[
  {
    "path": "CONTRIBUTING.md",
    "content": "# 贡献指南\n\n感谢您考虑为53AI Hub项目做出贡献！以下是一些指导方针，帮助您参与到项目中来。\n\n## 行为准则\n\n请尊重所有项目参与者，保持专业和友好的交流环境。\n\n## 如何贡献\n\n### 报告问题\n\n如果您发现了bug或有新功能建议，请通过以下步骤提交问题：\n\n1. 检查是否已存在相同或类似的问题\n2. 使用清晰的标题和详细描述创建新问题\n3. 包含重现步骤、预期行为和实际行为\n4. 如可能，添加截图或错误日志\n\n### 提交代码\n\n1. Fork项目仓库\n2. 创建您的特性分支 (`git checkout -b feature/amazing-feature`)\n3. 提交您的更改 (`git commit -m '添加一些功能'`)\n4. 推送到分支 (`git push origin feature/amazing-feature`)\n5. 创建一个Pull Request\n\n### 代码风格\n\n- 遵循项目现有的代码风格和约定\n- 使用ESLint和Prettier保持代码格式一致\n- 为新功能编写测试\n- 保持代码简洁可读\n\n## 开发设置\n\n请参考README.md中的项目设置部分，了解如何设置开发环境。\n\n## Pull Request流程\n\n1. 确保您的PR描述清晰地说明了更改内容和原因\n2. 可能需要进行代码审查和修改\n3. 一旦获得批准，您的PR将被合并\n\n## 许可证\n\n通过贡献代码，您同意您的贡献将在项目的[许可和贡献者协议](./LICENSE)下发布。\n\n\n"
  },
  {
    "path": "LICENSE",
    "content": "## 53AI 开源许可证  \n**53AI Open Source License**  \n\n53AI Hub 基于 Apache License 2.0 的开源协议，并附加以下条件：  \n53AI Hub is licensed under the Apache License 2.0, with the following additional conditions:  \n\n小微企业与创业团队**可将 53AI Hub 源码用于商业用途**。  \nSmall and micro enterprises, as well as startup teams, are permitted to use the 53AI Hub source code for commercial purposes.  \n\n若满足以下任一条件，须从 53AI 获得商业许可：  \nHowever, if any of the following conditions apply, a commercial license must be obtained from 53AI:  \n\n- **中大型企业使用**：员工数 300 人以上或年营收 6,000 万以上属于中大型企业。  \n- **Medium and large enterprises**: Companies with **300 or more employees** or **annual revenue exceeding 60 million RMB** are considered medium or large enterprises.  \n\n- **移除 Logo 与版权**：不得删除或修改 53AI 的 Logo 及版权信息。  \n- **Removal of logo and copyright**: The 53AI logo and copyright information **must not be removed or altered**.  \n\n- **多租户 SaaS 服务**：不得使用 53AI Hub 的源代码运营多租户环境。  \n- **Multi-tenant SaaS services**: The source code of 53AI Hub **must not be used to operate multi-tenant environments**.  \n\n作为贡献者，需同意：  \nAs a contributor, you agree to:  \n\n- 产品方可根据需要调整开源协议，使其更严格或更宽松。  \n- Allow the product team to adjust the open-source license as needed, making it either stricter or more permissive.  \n\n- 贡献的代码可用于商业用途，包括但不限于云服务运营。  \n- Permit the contributed code to be used for commercial purposes, including but not limited to cloud service operations.  \n\n除上述特定条件外，其他所有权利和限制遵循 Apache License 2.0。  \nExcept for the specific conditions mentioned above, all other rights and restrictions shall follow the Apache License 2.0.  \n\n关于 Apache License 2.0 的详细信息，请访问 [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)。  \nFor detailed information about the Apache License 2.0, please visit [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0).\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n  <a href=\"https://www.53ai.com/products/53AIHub\"><img alt=\"Product Introduction Page\" src=\"https://oss.ibos.cn/53ai/common/53AIHub_banner.png\"></a>\n</div>\n\n<div align=\"center\">\n<a href=\"./README.md\"><img alt=\"README in English\" src=\"https://img.shields.io/badge/English-d9d9d9\"></a>\n<a href=\"./README_CN.md\"><img alt=\"Simplified Chinese README\" src=\"https://img.shields.io/badge/简体中文-d9d9d9\"></a>\n<a href=\"./README_JA.md\"><img alt=\"Japanese README\" src=\"https://img.shields.io/badge/日本語-d9d9d9\"></a>\n</div>\n\n<div>\n<a href=\"https://hub.53ai.com\">Cloud Service</a> ·\n<a href=\"https://docs.53ai.com/%E5%85%A5%E9%97%A8/%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2\">Local Deployment</a> ·\n<a href=\"https://docs.53ai.com/\">Documentation</a> ·\n<a href=\"https://aihub.53ai.com\">Demo Site</a>\n</div>\n\n**53AI Hub** is an **open-source AI portal**, which enables you to quickly build a operational-level AI portal to launch and operate AI agents, prompts, and AI tools. It supports seamless integration with development platforms like **Coze, Dify, FastGPT, RAGFlow, and 53AI Studio**, and cloud platforms such as **Aliyun , Tencent Cloud , and Baidu Cloud**, helping developers and enterprises build production-grade AI portals without complex integrations. Even users with no technical background can participate easily, significantly lowering the barrier to AI inplementation.\n\nKey features are as follows:\n\n**1. Platform Integration**:\nSupports integration with mainstream agent development platforms, cloud services, and large language model platforms. Users can choose from site templates and styles, and customize the interface as needed.\n\n**2. Application Management**:\nProvides full lifecycle management for AI agents, prompts, and AI tools, including publishing, grouping, sorting, and user permission configuration.\n\n**3. User Operations**:\nSupports the operation of both registered users and internal users, with the ability to manage and view login and usage records.\n\n**4. Independent Deployment**:\nSupports one-click deployment on both cloud and local environments, and binding to a custom domain name.\n\n## Product Comparison\n\n| Feature            | 53AI Hub                | NextChat    | lobehub     | Cherry Studio |\n| ------------------ | ----------------------- | ----------- | ----------- | ------------- |\n| Custom Interface   | Multiple styles         | Fixed style | Fixed style | Fixed style   |\n| Access Permissions | Enterprise-grade        | None        | None        | None          |\n| Agent Integration  | ✅                      | ❌          | ❌          | ❌            |\n| LLM Integration    | ✅                      | ✅          | ✅          | ✅            |\n| Registered Users   | ✅                      | ✅          | ✅          | ✅            |\n| Internal Users     | ✅                      | ❌          | ❌          | ❌            |\n| SSO Support        | WeCom, DingTalk, Feishu | ❌          | ❌          | ❌            |\n| Local Deployment   | ✅                      | ✅          | ✅          | ✅            |\n\n## Usage\n\n* **Cloud Service**\n  Visit [53AI Hub Cloud Service](https://hub.53ai.com) to apply. The cloud service includes Free, Standard, and Enterprise editions. The Enterprise version offers all features, and the Free version supports 10 agents and 100 registered users.\n* **Community Open Source Edition**\n  Refer to our [Getting Started Guide](https://docs.53ai.com/%E5%85%A5%E9%97%A8/%E6%AC%A2%E8%BF%8E%E4%BD%BF%E7%94%A8) for quick local deployment and our [Documentation](https://docs.53ai.com) for in-depth usage.\n* **Enterprise Customized Edition**\n  We offer enterprise custom versions with features like integration with WeCom, DingTalk, and Feishu org structures. For custom needs, contact us via [email](mailto:hub@53ai.com?subject=[GitHub]Customization).\n\n## Installing the Community Edition\n\n### System Requirements\n\nMinimum configuration for installing 53AI Hub:\n\n* CPU ≥ 1 Core\n* RAM ≥ 2 GiB\n\n### Quick Installation\n\nThe simplest way to install 53AI Hub Community Edition is to run our docker/docker-compose.yaml file. Before running the installation command, ensure that https://docs.docker.com/get-docker/ and https://docs.docker.com/compose/install/ are installed on your machine. :\n\n1. Clone the repository\n```bash\ngit clone https://github.com/53ai/53aihub.git\ncd 53aihub\n```\n2. Run the following command\n```bash\ncd docker\ndocker compose up -d\n```\n\nThen visit [`http://localhost:3000`](http://localhost:3000) to access the administration panel and begin setup.\n\n### Custom Configuration\n\nRefer to the comments in `.env.example`, copy and rename it to `.env`, and edit the values. You may also modify `docker-compose.yaml` for things like image versions, port mappings, or volume mounts. After changes, rerun `docker-compose up -d`. You can find the full list of available environment variables here.\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=53AI/53AIhub&type=Date)](https://star-history.com/#53AI/53AIhub&Date)\n\n\n## Contributing\n\n> We're seeking contributors to help translate 53AI Hub into more languages. Interested? Get in touch!\n\nWe welcome your contributions—whether code, ideas, or issues. Feel free to share 53AI Hub at events, in talks, or on social media.\n\n* [GitHub Discussion](https://github.com/53ai/53aihub/discussions): Share your apps and ideas with the community.\n* [GitHub Issues](https://github.com/53ai/53aihub/issues): Report bugs or problems.\n\n\n\n## Compliance Certifications\n\n53AI has obtained the following certifications:\n\n* **ISO/IEC 27001:2022 – Information Security Management Systems**\n* **ISO 9001:2015 – Quality Management Systems**\n\n## License\n\nThis repository is licensed under the [53AI Open Source License](https://docs.53ai.com/%E5%85%A5%E9%97%A8/%E5%BC%80%E6%BA%90%E8%AE%B8%E5%8F%AF%E5%8D%8F%E8%AE%AE), which is based on Apache 2.0 with additional restrictions.\n\n## Follow Us\n\nStar 53AI Hub on GitHub to get notified about updates and new releases.\n\n"
  },
  {
    "path": "README_CN.md",
    "content": "<div align=\"center\">\n  <a href=\"https://www.53ai.com/products/53AIHub\"><img alt=\"产品介绍页\" src=\"https://oss.ibos.cn/53ai/common/53AIHub_banner.png\"></a>\n</div>\n\n<div align=\"center\">\n<a href=\"./README.md\"><img alt=\"README in English\" src=\"https://img.shields.io/badge/English-d9d9d9\"></a>\n<a href=\"./README_CN.md\"><img alt=\"简体中文版自述文件\" src=\"https://img.shields.io/badge/简体中文-d9d9d9\"></a>\n<a href=\"./README_JA.md\"><img alt=\"日本語のREADME\" src=\"https://img.shields.io/badge/日本語-d9d9d9\"></a>\n\n</div>\n<div>\n<a href=\"https://hub.53ai.com\">云服务</a> ·\n<a href=\"https://docs.53ai.com/%E5%85%A5%E9%97%A8/%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2\">本地部署</a> ·\n<a href=\"https://docs.53ai.com/\">产品文档</a> ·\n<a href=\"https://aihub.53ai.com\">演示站</a>\n\n</div>\n\n**53AI Hub** 是一款**开源的AI门户**。它可以让你快速搭建一个运营级的AI门户，实现对智能体、提示词与AI工具的发布与运营。它支持无缝对接**字节扣子、腾讯元器、Dify、FastGPT、RAGFlow、53AI Studio**等智能体开发平台，以及**阿里百炼、腾讯云智能体开发平台、火山方舟、百度千帆 AppBuild**等云计算平台，让开发者和企业能够快速搭建生产运营级的 AI 门户，无需复杂的技术整合流程。即使是没有技术背景的人员，也能轻松参与智能体发布和运营，极大降低了 AI 应用落地的门槛。\n\n以下是核心功能列表： </br> </br>\n\n**1. 平台接入**:\n主流的智能体开发平台、云计算平台、大模型平台的接入，可选择站点模板及风格，并进行自定义界面。\n\n**2. 应用管理**:\n支持智能体、提示词、AI工具的发布、管理、分组、排序、使用权限等设置。\n\n**3.  用户运营**:\n支持注册用户、内部用户两类用户的运营，可以管理和查看用户登录、使用记录,\n\n**4. 独立部署**:\n可在云平台及本地一键安装部署，支持绑定独立域名。\n\n## 产品对比\n\n<table style=\"width:100%;\">\n  <tr>\n    <th align=\"center\">功能</th>\n    <th align=\"center\">53AI Hub</th>\n    <th align=\"center\">NextChat</th>\n    <th align=\"center\">lobehub</th>\n    <th align=\"center\">Cherry Studio</th>\n  </tr>\n  <tr>\n    <td align=\"center\">自定义界面</td>\n    <td align=\"center\">多风格及样式</td>\n    <td align=\"center\">固定风格</td>\n    <td align=\"center\">固定风格</td>\n    <td align=\"center\">固定风格</td>\n  </tr>\n  <tr>\n    <td align=\"center\">使用权限</td>\n    <td align=\"center\">企业级权限</td>\n    <td align=\"center\">无</td>\n    <td align=\"center\">无</td>\n    <td align=\"center\">无</td>\n  </tr>\n  <tr>\n    <td align=\"center\">智能体接入</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">❌</td>\n    <td align=\"center\">❌</td>\n    <td align=\"center\">❌</td>\n  </tr>\n  <tr>\n    <td align=\"center\">大模型接入</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">✅</td>\n  </tr>\n  <tr>\n    <td align=\"center\">注册用户</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">✅</td>\n  </tr>\n  <tr>\n    <td align=\"center\">内部用户</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">❌</td>\n    <td align=\"center\">❌</td>\n    <td align=\"center\">❌</td>\n  </tr>\n  <tr>\n    <td align=\"center\">单点登录</td>\n    <td align=\"center\">企微、钉钉、飞书</td>\n    <td align=\"center\">❌</td>\n    <td align=\"center\">❌</td>\n    <td align=\"center\">❌</td>\n  </tr>\n  <tr>\n    <td align=\"center\">本地部署</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">✅</td>\n    <td align=\"center\">✅</td>\n  </tr>\n</table>\n\n## 使用方式\n\n* **在线云服务 </br>**\n  我们提供[ 53AI Hub 云服务](https://hub.53ai.com)，用户可以在线申请开通。云服务包含免费版、标准版和企业版，企业版提供了53AI Hub的全部功能，在免费版本中支持接入10个智能体及100个注册用户。\n* **社区开源版</br>**\n  通过[入门指南](https://docs.53ai.com/%E5%85%A5%E9%97%A8/%E6%AC%A2%E8%BF%8E%E4%BD%BF%E7%94%A8)快速进行本地部署，阅读[产品文档](https://docs.53ai.com)进行更深入的了解。\n* **企业定制版</br>**\n  我们提供可以企业定制版，具有包括不限于打通企微、钉钉、飞书组织架构等企业级产品特性，如果你需要个性化定制，也可以通过[电子邮件](mailto\\:hub@53ai.com?subject=\\[GitHub]个性定制)讨论你的个性化需求。 </br>\n\n## 安装社区版\n\n### 系统要求\n\n53AI Hub 的最低安装配置：\n\n* CPU >= 1 Core\n* RAM >= 2 GiB\n\n### 快速安装\n\n安装 53AI Hub 社区版最简单方法是运行我们的 [docker-compose.yml](docker/docker-compose.yaml) 文件。在运行安装命令之前，请确保您的机器上安装了 [Docker](https://docs.docker.com/get-docker/) 和 [Docker Compose](https://docs.docker.com/compose/install/)：\n\n1. 克隆仓库：\n```bash\ngit clone https://github.com/53ai/53aihub.git\ncd 53aihub\n```\n2. 运行安装命令：\n```bash\ncd docker\ndocker compose up -d\n```\n\n运行后，可以在浏览器上访问 [`http://localhost:3000`](http://localhost:3000) 进入 53AI Hub 并开始初始化配置操作，默认账号通常是`admin@53ai.com` 密码`admin888`。\n\n### 自定义配置\n\n如果您需要自定义配置，请参考 `.env.example`文件中的注释，复制一个改名为 `.env`并更新文件中对应的值。\n此外，您可能需要根据您的具体部署环境和需求对 `docker-compose.yaml`文件本身进行调整，例如更改镜像版本、端口映射或卷挂载。完成任何更改后，请重新运行 `docker-compose up -d`。您可以在此处找到可用环境变量的完整列表。\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=53AI/53AIhub&type=Date)](https://star-history.com/#53AI/53AIhub&Date)\n\n## 参与项目\n\n> 我们在寻找贡献者来帮助将 53AI Hub 翻译成英文之外的其他语言，如果您有兴趣参与，请通联系我们。\n\n我们欢迎您为 53AI Hub做出贡献，包括不限于：提交代码、提交问题、你的新想法。我们也欢迎您在不同的活动、会议和社交媒体上分享 53AI Hub。\n\n* [Github Discussion](https://github.com/53ai/53aihub/discussions)👉：分享您的应用程序并与社区交流。\n* [GitHub Issues](https://github.com/53ai/53aihub/issues)👉：使用 53AI Hub 时遇到的错误和问题。\n\n## 合规认证\n\n53AI 已获取以下认证：\n\n* **ISO/IEC 27001:2022  Information security management systems**\n* **ISO 9001:2015 Quality management systems**\n\n## 开源协议\n\n本仓库遵循 [53AI Open Source License](https://docs.53ai.com/%E5%85%A5%E9%97%A8/%E5%BC%80%E6%BA%90%E8%AE%B8%E5%8F%AF%E5%8D%8F%E8%AE%AE) 开源协议，该许可证本质上是 Apache 2.0，但有一些额外的限制。\n\n## 关注我们\n\n在 GitHub 上给 53AI Hub Star，我们更新产品你将第一时间收到新版本更新的通知。\n\n## 商务合作\n\n联系人：杨先生\n\n📮：hub@53ai.com\n\n📱：18688881185 (非客服电话)\n\n![.jpg](http://kmdev.53ai.com/api/preview/e884dbfe4ab8161ee268011111b900c3.jpg)\n\n> 使用问题咨询，可以在官网首页底部加入用户交流群，也可邮件 hub@53ai.com\n>\n> 如果您需要更多开发和运营指导，可以联系购买商业版本及交付服务\n\n\n"
  },
  {
    "path": "README_JA.md",
    "content": "<div align=\"center\">\n  <a href=\"https://www.53ai.com/products/53AIHub\"><img alt=\"製品紹介ページ\" src=\"https://oss.ibos.cn/53ai/common/53AIHub_banner.png\"></a>\n</div>\n\n<div align=\"center\">\n<a href=\"./README.md\"><img alt=\"README（英語）\" src=\"https://img.shields.io/badge/English-d9d9d9\"></a>\n<a href=\"./README_CN.md\"><img alt=\"簡体字中国語README\" src=\"https://img.shields.io/badge/简体中文-d9d9d9\"></a>\n<a href=\"./README_JA.md\"><img alt=\"日本語README\" src=\"https://img.shields.io/badge/日本語-d9d9d9\"></a>\n</div>\n\n<div>\n<a href=\"https://hub.53ai.com\">クラウドサービス</a> ·\n<a href=\"https://docs.53ai.com/%E5%85%A5%E9%97%A8/%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2\">ローカル導入</a> ·\n<a href=\"https://docs.53ai.com/\">製品ドキュメント</a> ·\n<a href=\"https://aihub.53ai.com\">デモサイト</a>\n</div>\n\n**53AI Hub** は、**オープンソースのAIポータル**です。AIエージェント、プロンプト、AIツールの公開・運用を迅速に構築できます。**ByteDance Coze、Tencent Yuanqi、Dify、FastGPT、RAGFlow、53AI Studio**などの開発プラットフォーム、**Aliyun ModelScope、Tencent Cloud、Volcano Ark、Baidu Qianfan AppBuild**などのクラウドプラットフォームとシームレスに連携できます。技術的な統合作業を必要とせず、非技術者でもAIエージェントの運用に参加できるため、AI活用のハードルを大幅に下げることができます。\n\n主な機能：\n\n**1. プラットフォーム連携**：\n主流のエージェント開発・クラウド・大規模言語モデル（LLM）との接続。サイトテンプレートやスタイルを選択し、UIをカスタマイズ可能。\n\n**2. アプリケーション管理**：\nAIエージェント、プロンプト、ツールの公開、管理、分類、順序、アクセス権限などを設定。\n\n**3. ユーザー管理**：\n登録ユーザーと内部ユーザーのログインや利用履歴を確認・管理。\n\n**4. 独立導入**：\nクラウドまたはローカル環境にワンクリックで導入可能。独自ドメインも設定可能。\n\n## 製品比較\n\n| 機能             | 53AI Hub                | NextChat     | lobehub      | Cherry Studio |\n| ---------------- | ----------------------- | ------------ | ------------ | ------------- |\n| UIカスタマイズ   | 多様なスタイル          | 固定スタイル | 固定スタイル | 固定スタイル  |\n| アクセス制御     | 企業レベル              | なし         | なし         | なし          |\n| エージェント統合 | ✅                      | ❌           | ❌           | ❌            |\n| LLM統合          | ✅                      | ✅           | ✅           | ✅            |\n| 登録ユーザー     | ✅                      | ✅           | ✅           | ✅            |\n| 内部ユーザー     | ✅                      | ❌           | ❌           | ❌            |\n| SSO対応          | WeCom、DingTalk、Feishu | ❌           | ❌           | ❌            |\n| ローカル導入     | ✅                      | ✅           | ✅           | ✅            |\n\n## 利用方法\n\n* **クラウドサービス**\n  [53AI Hubクラウドサービス](https://hub.53ai.com)から申請可能。無料版、標準版、企業版を提供。無料版では10個のAIエージェントと100人のユーザーが利用可能。\n* **オープンソース版**\n  [入門ガイド](https://docs.53ai.com/%E5%85%A5%E9%97%A8/%E6%AC%A2%E8%BF%8E%E4%BD%BF%E7%94%A8)を参照し、ローカルに迅速導入可能。[製品ドキュメント](https://docs.53ai.com)で詳細を確認。\n* **企業向けカスタム版**\n  WeCom、DingTalk、Feishuとの組織連携など企業向け機能に対応。カスタマイズのご希望は[メール](mailto:hub@53ai.com?subject=[GitHub]カスタマイズ要望)にてご相談ください。\n\n## コミュニティ版の導入\n\n### システム要件\n\n最小構成：\n\n* CPU：1コア以上\n* メモリ：2GiB以上\n\n### クイックインストール\n\n[docker-compose.yml](docker/docker-compose.yaml) を使用すると簡単にインストールできます。事前に [Docker](https://docs.docker.com/get-docker/) と [Docker Compose](https://docs.docker.com/compose/install/) をインストールしてください。：\n\n1. `git clone` でリポジトリをクローン\n```bash\ngit clone https://github.com/53ai/53aihub.git\ncd 53aihub\n```\n2. Docker Composeを実行\n```bash\ncd docker\ndocker compose up -d\n```\n\nブラウザで [`http://localhost:3000`](http://localhost:3000) にアクセスし、管理画面で初期設定を行います。\n\n### カスタム設定\n\n`.env.example` を `.env` にコピーし、コメントを参考に必要な値を設定。`docker-compose.yaml`の内容も環境に応じて調整可能です。\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=53AI/53AIhub&type=Date)](https://star-history.com/#53AI/53AIhub&Date)\n\n\n## コミュニティへの参加\n\n> 他言語翻訳の貢献者も募集中です。興味のある方はご連絡ください。\n\nコード、アイデア、フィードバックの提供など、あらゆる形での貢献を歓迎します。\n\n* [GitHub Discussion](https://github.com/53ai/53aihub/discussions)：アプリの共有や交流\n* [GitHub Issues](https://github.com/53ai/53aihub/issues)：バグ報告・提案\n\n## 認証取得\n\n53AIは以下の国際認証を取得済み：\n\n* **ISO/IEC 27001:2022 – 情報セキュリティマネジメントシステム**\n* **ISO 9001:2015 – 品質マネジメントシステム**\n\n## ライセンス\n\nこのリポジトリは [53AI オープンソースライセンス](https://docs.53ai.com/%E5%85%A5%E9%97%A8/%E5%BC%80%E6%BA%90%E8%AE%B8%E5%8F%AF%E5%8D%8F%E8%AE%AE) の下で提供されており、Apache 2.0をベースに追加制限が加えられています。\n\n## フォローしよう\n\nGitHubで53AI Hubにスターを付けると、最新のアップデート通知を受け取ることができます。\n\n"
  },
  {
    "path": "api/.gitattributes",
    "content": "saas/** merge=ours"
  },
  {
    "path": "api/.gitignore",
    "content": ".idea\n.vscode\nupload\n*.exe\n*.db\nbuild\n*.db-journal\nlogs\ndata\n/web/node_modules\ncmd.md\n.env\ntemp\n.DS_Store\n__debug_bin*\nstatic/uploads/*\nstatic/console/*\nstatic/front/*\nbin/.env\nbin/*hub\ndocs/*\nsaas/\nbuild-restart-develop.sh\nsend-build-msg.sh\n.envkm\n.envhub\n53AIHub\nAI_TASK.txt\n.tasks/*\n.env*"
  },
  {
    "path": "api/Dockerfile",
    "content": "FROM golang:1.24.1 as builder\n\n# 设置工作目录\nWORKDIR /app\n\n# 设置GOPROXY为中国大陆代理\nENV GOPROXY=https://goproxy.cn,direct\n\n# 安装构建依赖(使用阿里云Debian镜像源)\nRUN echo \"deb https://mirrors.aliyun.com/debian/ bookworm main contrib non-free\\n\\\ndeb https://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free\\n\\\ndeb https://mirrors.aliyun.com/debian-security bookworm-security main\" > /etc/apt/sources.list && \\\n    apt-get update -o Acquire::Retries=3 -o Acquire::http::Timeout=10 && \\\n    apt-get install -y --no-install-recommends gcc libc6-dev && \\\n    apt-get clean && \\\n    rm -rf /var/lib/apt/lists/*\n\n# 复制go.mod和go.sum文件\nCOPY go.mod go.sum ./\n\n# 下载依赖\nRUN go mod download\n\n# 复制源代码\nCOPY . .\n\n# 构建应用 (修正CGO设置)\nRUN CGO_ENABLED=1 go build -a -o /app/53AIHub -ldflags '-X \"github.com/53AI/53AIHub/config.VersionTime=$(date +%Y%m%d%H%M%S)\" -extldflags \"-static\"' ./main.go\n\n# 使用精简的Alpine镜像作为运行时\nFROM alpine:3.18\n\n# 安装SQLite运行时依赖和C库\nRUN apk --no-cache add ca-certificates sqlite libc6-compat\n\n# 从构建阶段复制可执行文件\nCOPY --from=builder /app/53AIHub /app/\n\n# 暴露端口\nEXPOSE 3000\n\n# 设置启动命令\nCMD [\"/app/53AIHub\"]"
  },
  {
    "path": "api/Makefile",
    "content": "# Go parameters\nGOBIN = go\nGOFMT = gofmt\nGOLINT = golangci-lint\nGOTEST = go test\nGOBUILD = go build\nGOCLEAN = go clean\n\n# Binary name\nBINARY_NAME = 53aihub\nBINARY_UNIX = $(BINARY_NAME)_unix\n\n# Output directory\nBIN_DIR = bin\n\n# Build flags\nBUILD_FLAGS = -v\n\n.PHONY: all build clean test lint fmt\n\nall: clean fmt lint test build\n\nbuild:\n\t$(GOBUILD) $(BUILD_FLAGS) -o $(BIN_DIR)/$(BINARY_NAME) ./main.go\n\nsbuild:\n\t$(GOBUILD) $(BUILD_FLAGS) -o $(BIN_DIR)/$(BINARY_NAME) -v -ldflags=\"-X 'github.com/53AI/53AIHub/config.VersionTime=$(shell date +%Y%m%d%H%M%S)' -linkmode external -extldflags '-static'\" ./main.go\n\ntest:\n\t$(GOTEST) -v ./...\n\nclean:\n\t$(GOCLEAN)\n\trm -f $(BIN_DIR)/*\n\nlint:\n\t$(GOLINT) run\n\nfmt:\n\t$(GOFMT) -w .\n\n# Cross compilation\nbuild-linux:\n\tCGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) $(BUILD_FLAGS) -o $(BIN_DIR)/$(BINARY_UNIX) -v ./...\n\n# Static build with no glibc dependency\nswagger-init:\n\tswag init -g router/main.go --output docs/\n\nstatic-build: swagger-init\n\tCGO_ENABLED=0 $(GOBUILD) -trimpath $(BUILD_FLAGS) -o $(BIN_DIR)/$(BINARY_NAME) -a -ldflags '-X \"github.com/53AI/53AIHub/config.VersionTime=$(shell date +%Y%m%d%H%M%S)\" -extldflags \"-static\"' ./main.go\n\n# 交叉编译 Windows 版本 (启用 CGO 支持 go-sqlite3)\nWIN_OS := windows\nWIN_BITS := 64\nWIN_DATE := $(shell date +%Y%m%d%H%M)\nWIN_OUTPUT := $(BIN_DIR)/$(BINARY_NAME)_$(WIN_OS)_$(WIN_BITS)_$(WIN_DATE).exe\n\nLINUX_OS := linux\nLINUX_BITS := 64\nLINUX_DATE := $(shell date +%Y%m%d%H%M)\nLINUX_OUTPUT := $(BIN_DIR)/$(BINARY_NAME)_$(LINUX_OS)_$(LINUX_BITS)_$(LINUX_DATE)\n\nstatic-build-with-info: swagger-init\n\tGOMAXPROCS=1 CGO_ENABLED=0 $(GOBUILD) -trimpath $(BUILD_FLAGS) -o $(LINUX_OUTPUT) -a -ldflags '-X \"github.com/53AI/53AIHub/config.VersionTime=$(LINUX_DATE)\" -extldflags \"-static\"' ./main.go\n\nbuild-windows-cgo:\n\t@echo \"开始交叉编译 Windows 可执行文件 (启用 CGO)...\"\n\t@if ! command -v x86_64-w64-mingw32-gcc > /dev/null; then \\\n\t\techo \"请先安装 MinGW 交叉编译工具链: sudo apt-get install -y gcc-mingw-w64\"; \\\n\t\texit 1; \\\n\tfi\n\tCGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc CGO_LDFLAGS=\"-static -static-libgcc\" $(GOBUILD) -trimpath $(BUILD_FLAGS) -o $(WIN_OUTPUT) -ldflags '-X \"github.com/53AI/53AIHub/config.VersionTime=$(WIN_DATE)\" -s -w' ./main.go\n\t@echo \"Windows 可执行文件已生成: $(WIN_OUTPUT)\"\n\n# 静态编译 Windows 版本 (完全静态链接，启用 CGO)\nbuild-windows-static-cgo:\n\t@echo \"开始静态编译 Windows 可执行文件 (启用 CGO)...\"\n\t@if ! command -v x86_64-w64-mingw32-gcc > /dev/null; then \\\n\t\techo \"请先安装 MinGW 交叉编译工具链: sudo apt-get install -y gcc-mingw-w64\"; \\\n\t\texit 1; \\\n\tfi\n\tCGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc CGO_LDFLAGS=\"-static -static-libgcc -static-libstdc++\" $(GOBUILD) -trimpath  $(BUILD_FLAGS) -o $(WIN_OUTPUT) -ldflags '-X \"github.com/53AI/53AIHub/config.VersionTime=$(WIN_DATE)\" -s -w -H=windowsgui' ./main.go\n\t@echo \"Windows 静态可执行文件已生成: $(WIN_OUTPUT)\""
  },
  {
    "path": "api/README.md",
    "content": "# 53AIHub 后端接口\n\n53AIHub 是一个强大的 AI 代理管理平台，支持多种 AI 模型的接入和管理。本指南将帮助您快速上手并开始使用 53AIHub。\n\n## 目录\n\n- [53AIHub 后端接口](#53aihub-后端接口)\n  - [目录](#目录)\n  - [环境要求](#环境要求)\n  - [快速开始](#快速开始)\n    - [使用 Docker Compose 启动](#使用-docker-compose-启动)\n    - [使用 Go 源码编译启动](#使用-go-源码编译启动)\n    - [源代码编译启动](#源代码编译启动)\n    - [使用预编译文件启动](#使用预编译文件启动)\n  - [配置说明](#配置说明)\n  - [常见问题排查](#常见问题排查)\n    - [1. 服务无法启动](#1-服务无法启动)\n    - [2. 数据库问题](#2-数据库问题)\n    - [3. 微信支付配置](#3-微信支付配置)\n    - [4. Token 编码器初始化失败](#4-token-编码器初始化失败)\n\n## 环境要求\n\n- Docker 和 Docker Compose (如使用容器化部署)\n- Go 1.24+ (如从源码编译)\n\n## 快速开始\n\n1. 克隆仓库到本地\n\n```bash\ngit clone https://github.com/53AI/53AIHub.git\ncd 53AIHub\n```\n\n### 使用 Docker Compose 启动\n\n\n2. 进入 docker 目录并启动服务\n\n```bash\ncd docker\ndocker compose up -d\n```\n\n这将启动 53AIHub 应用 (端口 3000 可在docker-compose.yml中修改)。\n\n服务将在 `http://localhost:3000` 上运行。\n\n### 使用 Go 源码编译启动\n\n1. 确保你本地有 Go 语言环境和构建工具，以及node和npm环境\n2. 先进入web目录构建前端的网页前台与管理后台(**非常重要**)\n3. 再进入本目录，执行构建\n```bash\nmake build-windows-cgo\n```\n4. 构建完成后，可执行文件将生成在 `bin` 目录下。\n5. 运行可执行文件\n\n### 源代码编译启动\n\n1. 安装依赖并编译\n\n```bash\ngo mod tidy\ngo build -o bin/53aihub main.go\n```\n\n3. 启动 53AIHub 服务\n\n```bash\n./bin/53aihub\n```\n\n服务将在默认端口上运行（通常是 3000，可通过.evn文件的 PORT 环境变量修改）。\n\n### 使用预编译文件启动\n\n1. 从 GitHub Releases 页面下载预编译文件\n\n访问 [GitHub Releases](https://github.com/53AI/53AIHub/releases) 下载适合您操作系统的预编译文件。\n\n2. 启动 53AIHub\n\n- Linux/MacOS:\n  \n  ```bash\n  chmod +x 53AIHub_linux\n  ./53AIHub_linux\n  ```\n- Windows:\n  双击 `53AIHub_install.exe` 文件安装运行启动\n\n服务将在默认端口上`3000`运行。\n\n## 配置说明\n\n53AIHub 默认不需要任何配置即可启动，它使用以下默认配置：\n\n- 数据库：SQLite（默认，无需配置）\n- 端口：默认为 3000（可通过.env的 PORT 环境变量修改）\n\n如果需要特定功能，可以配置以下环境变量：\n\n- `SQL_DSN`: 数据库连接字符串，默认使用 SQLite\n- `PORT`: 服务监听端口，默认为 3000\n- `LOG_LEVEL`: 日志级别，可选值为 DEBUG、INFO（默认）\n- `API_HOST`: API 主机地址，如需支持微信支付，必须配置此项\n\n## 常见问题排查\n\n### 1. 服务无法启动\n\n- 检查端口是否被占用\n- 查看日志文件中的错误信息\n\n```bash\ncat logs/53aihub.log\n```\n\n### 2. 数据库问题\n\n默认情况下，53AIHub 使用 SQLite 数据库，无需额外配置。如果您配置了 MySQL 数据库但连接失败：\n\n- 确认 MySQL 服务是否正常运行\n- 检查数据库连接参数是否正确\n- 确认数据库用户是否有足够的权限\n\n### 3. 支付配置\n\n如需支持微信支付功能、支付宝支付功能，必须配置 `API_HOST` 环境变量：\n\n```bash\nexport API_HOST=\"http://your-domain.com\"\n```\n\n或在启动时指定：\n\n```bash\nAPI_HOST=\"http://your-domain.com\" ./53aihub\n```\n\n### 4. Token 编码器初始化失败\n\n错误信息示例：\n\n```\npanic: runtime error: invalid memory address or nil pointer dereference\n```\n\n可能原因：\n\n- billingratio.ModelRatio 为 nil\n- logger 未正确初始化\n\n解决方法：\n\n- 确保在使用 logger 前已正确初始化\n\n请注意：静态编译需要安装一些额外的依赖项（例如 GCC、G++、Git、Make），请查看 Makefile 中的静态编译命令，以获得更多信息。如果您的环境缺少这些依赖项，可能会导致静态编译失败。\n\n错误信息示例2：\n\n```\nCGO_ENABLED=0 go build -trimpath -v -o bin/53aihub -a -ldflags '-X \"github.com/53AI/53AIHub/config.VersionTime=20250817222030\" -extldflags \"-static\"' ./main.go\nmain.go:18:29: pattern all:static/console: no matching files found\nmake: *** [Makefile:48: static-build] Error 1\n\n可能原因：\n\n- 没有先编绎前端\n\n//go:embed all:static/front all:static/console static/images all:static/libs\n上面这句的意思是打包前端资源，注意要先将前端打包成出来，分别放在static/front和static/console里\n不熟悉go的请注意它就是这种注释语法\n如果您遇到其他问题，请提交 GitHub Issue 获取支持。\n\n```\n\n```\n\n"
  },
  {
    "path": "api/bin/restart.sh",
    "content": "#!/bin/bash\n\n# 1. 找到 53aihub 运行的 pid \nPID=$(ps aux | grep '[5]3aihub' | awk '{print $2}')\n\n# 2. 优雅 kill 掉\nif [ -n \"$PID\" ]; then\n    echo \"找到 53aihub 进程 PID: $PID，正在停止...\"\n    kill -15 $PID\n    sleep 2 # 等待进程结束\nelse\n    echo \"未找到正在运行的 53aihub 进程\"\nfi\n\n# 3. 后台运行 53aihub 并且输出日志到当前目录位置\necho \"启动 53aihub...\"\nnohup ./53aihub > ./53aihub.log 2>&1 &\n\necho \"53aihub 已启动，日志输出到 ./53aihub.log\"\n"
  },
  {
    "path": "api/bin/version.txt",
    "content": "v0.1.0"
  },
  {
    "path": "api/build.sh",
    "content": "#!/bin/bash\nmake static-build"
  },
  {
    "path": "api/common/cache.go",
    "content": "package common\n"
  },
  {
    "path": "api/common/ctxkey/key.go",
    "content": "package ctxkey\n\nconst (\n\tConfig            = \"config\"\n\tId                = \"id\"\n\tUsername          = \"username\"\n\tRole              = \"role\"\n\tStatus            = \"status\"\n\tChannel           = \"channel\"\n\tChannelId         = \"channel_id\"\n\tSpecificChannelId = \"specific_channel_id\"\n\tRequestModel      = \"request_model\"\n\tConvertedRequest  = \"converted_request\"\n\tOriginalModel     = \"original_model\"\n\tGroup             = \"group\"\n\tModelMapping      = \"model_mapping\"\n\tChannelName       = \"channel_name\"\n\tTokenId           = \"token_id\"\n\tTokenName         = \"token_name\"\n\tBaseURL           = \"base_url\"\n\tAvailableModels   = \"available_models\"\n\tKeyRequestBody    = \"key_request_body\"\n\tSystemPrompt      = \"system_prompt\"\n)\n"
  },
  {
    "path": "api/common/email.go",
    "content": "package common\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/tls\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/smtp\"\n\t\"regexp\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/jordan-wright/email\"\n\t\"gorm.io/gorm\"\n)\n\n// ValidateEmailFormat 验证基础邮箱格式（通用版）\nfunc ValidateEmailFormat(email string) bool {\n\tpattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$` // 通用邮箱格式验证（如user@domain.com）\n\treturn regexp.MustCompile(pattern).MatchString(email)\n}\n\n// sendQQMailWithTLS 使用手动TLS连接发送QQ邮件\nfunc sendQQMailWithTLS(e *email.Email, auth smtp.Auth, host string, port int) error {\n\t// 创建 TLS 配置\n\ttlsconfig := &tls.Config{\n\t\tInsecureSkipVerify: false,\n\t\tServerName:         host,\n\t}\n\n\t// 连接到 SMTP 服务器\n\taddr := fmt.Sprintf(\"%s:%d\", host, port)\n\tconn, err := tls.Dial(\"tcp\", addr, tlsconfig)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"TLS connection failed: %v\", err)\n\t}\n\tdefer conn.Close()\n\n\t// 创建 SMTP 客户端\n\tclient, err := smtp.NewClient(conn, host)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"SMTP client creation failed: %v\", err)\n\t}\n\tdefer client.Quit()\n\n\t// 认证\n\tif err = client.Auth(auth); err != nil {\n\t\treturn fmt.Errorf(\"authentication failed: %v\", err)\n\t}\n\n\t// 设置发件人和收件人\n\tif err = client.Mail(e.From); err != nil {\n\t\treturn fmt.Errorf(\"sender setup failed: %v\", err)\n\t}\n\n\tfor _, recipient := range e.To {\n\t\tif err = client.Rcpt(recipient); err != nil {\n\t\t\treturn fmt.Errorf(\"recipient setup failed: %v\", err)\n\t\t}\n\t}\n\n\t// 写入邮件内容\n\twc, err := client.Data()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"data writer creation failed: %v\", err)\n\t}\n\tdefer wc.Close()\n\n\t// 构建邮件内容\n\tvar msg strings.Builder\n\t// 添加From\n\tmsg.WriteString(fmt.Sprintf(\"From: %s\\r\\n\", e.From))\n\t// 添加To\n\tmsg.WriteString(fmt.Sprintf(\"To: %s\\r\\n\", strings.Join(e.To, \", \")))\n\t// 添加Subject\n\tmsg.WriteString(fmt.Sprintf(\"Subject: %s\\r\\n\", e.Subject))\n\n\t// 添加其他头部信息\n\tfor key, values := range e.Headers {\n\t\tfor _, value := range values {\n\t\t\tmsg.WriteString(fmt.Sprintf(\"%s: %s\\r\\n\", key, value))\n\t\t}\n\t}\n\n\t// 添加空行分隔头部和正文\n\tmsg.WriteString(\"\\r\\n\")\n\n\t// 添加正文\n\tif len(e.HTML) > 0 {\n\t\tmsg.Write(e.HTML)\n\t} else if len(e.Text) > 0 {\n\t\tmsg.Write(e.Text)\n\t}\n\n\t// 发送邮件内容\n\t_, err = wc.Write([]byte(msg.String()))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"message sending failed: %v\", err)\n\t}\n\n\treturn nil\n}\n\n// SendEmail 使用jordan-wright/email库通过通用SMTP服务发送邮件\nfunc SendEmail(e *email.Email, auth smtp.Auth, isSsl bool, host string, port int) error {\n\taddr := fmt.Sprintf(\"%s:%d\", host, port)\n\n\tfmt.Printf(\"Sending email to %v via %s, SSL: %v, Port: %d\\n\", e.To, addr, isSsl, port)\n\n\t// 针对QQ邮箱等特殊处理\n\tisQQMail := strings.Contains(host, \"qq.com\")\n\n\t// 对于QQ邮箱且使用465端口，使用特殊处理方式\n\tif isQQMail && port == 465 {\n\t\tfmt.Printf(\"Using special handling for QQ mail on port 465\\n\")\n\t\treturn sendQQMailWithTLS(e, auth, host, port)\n\t}\n\n\tif isSsl {\n\t\ttlsConfig := &tls.Config{\n\t\t\tInsecureSkipVerify: false,\n\t\t\tServerName:         host,\n\t\t}\n\n\t\tif err := e.SendWithTLS(addr, auth, tlsConfig); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to send email via %s:%d: %w\", host, port, err)\n\t\t}\n\t} else {\n\t\tif err := e.Send(addr, auth); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to send email via %s:%d: %w\", host, port, err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// VerifyEmailCode 验证邮箱验证码有效性\nfunc VerifyEmailCode(email, code string) (bool, error) {\n\tif email == \"\" || code == \"\" {\n\t\treturn false, errors.New(\"missing email or code parameter\")\n\t}\n\n\tnow := time.Now().UTC().UnixMilli()\n\tvar storedCode string\n\t// 优先从Redis获取验证码\n\tstoredCode, err := RedisGet(\"email_verification:\" + email)\n\tif err != nil || storedCode == \"\" {\n\t\t// Redis不存在时查询数据库\n\t\tvar vc model.VerificationCode\n\t\terr = model.DB.Where(\"target = ? AND type = 'email' AND code = ? AND expires_at > ?\", email, code, now).First(&vc).Error\n\t\tif err != nil {\n\t\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\t\treturn false, errors.New(\"verification code expired or invalid\")\n\t\t\t}\n\t\t\treturn false, fmt.Errorf(\"database query error: %w\", err)\n\t\t}\n\t\tstoredCode = code\n\t}\n\n\tif storedCode != code {\n\t\treturn false, errors.New(model.InvalidVerificationCode)\n\t}\n\n\t_ = RedisDel(\"email_verification:\" + email)\n\treturn true, nil\n}\n\nfunc GenerateRandomCode(length int) (string, error) {\n\tbytes := make([]byte, length)\n\tif _, err := rand.Read(bytes); err != nil {\n\t\treturn \"\", err\n\t}\n\tfor i := 0; i < length; i++ {\n\t\tbytes[i] = byte(48 + int(bytes[i])%10) // 0-9\n\t}\n\treturn string(bytes), nil\n}\n"
  },
  {
    "path": "api/common/init.go",
    "content": "package common\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/53AI/53AIHub/config\"\n)\n\nvar (\n\tPort         = flag.Int(\"1port\", 3000, \"the listening port\")\n\tPrintVersion = flag.Bool(\"1version\", false, \"print version and exit\")\n\tPrintHelp    = flag.Bool(\"1help\", false, \"print help and exit\")\n\tLogDir       = flag.String(\"1log-dir\", \"./logs\", \"specify the log directory\")\n)\n\nfunc printHelp() {\n\t// TODO: print help\n\tfmt.Println(\"53AIHub Api \" + config.Version + \" - Fast, simple, and efficient AI WebSite.\")\n\tfmt.Println(\"Copyright (C) 2025 Liuzimu. All rights reserved.\")\n\tfmt.Println(\"GitHub: xxx\")\n\tfmt.Println(\"Usage: 53AIHub [--port <port>] [--log-dir <log directory>] [--version] [--help]\")\n}\n\nfunc Init() {\n\tflag.Parse()\n\n\tif *PrintHelp {\n\t\tprintHelp()\n\t\tos.Exit(0) // 仅在 --help 参数存在时退出\n\t}\n\n\tif *PrintVersion {\n\t\tfmt.Println(config.Version)\n\t\tos.Exit(0) // 仅在 --version 参数存在时退出\n\t}\n\n\t// Initialize the logger\n\tInitRedisClient()\n\tInitLocker()\n}\n"
  },
  {
    "path": "api/common/lock.go",
    "content": "package common\n\nimport (\n\t\"context\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/go-redis/redis/v8\"\n)\n\nvar LOCKER Locker\n\nfunc InitLocker() {\n\tif RedisEnabled {\n\t\tLOCKER = NewRedisLock(RDB)\n\t} else {\n\t\tLOCKER = NewLocalLock()\n\t}\n}\n\ntype Locker interface {\n\t// TryLock 尝试获取锁\n\t// name: 锁名称\n\t// ttl: 锁的存活时间\n\t// 返回是否获取成功\n\tTryLock(name string, ttl time.Duration) bool\n\n\t// Unlock 释放锁\n\tUnlock(name string)\n}\n\nfunc NewLocalLock() *LocalLock {\n\treturn &LocalLock{}\n}\n\ntype LocalLock struct {\n\tlocks sync.Map // key: lockName, value: *lockEntry\n}\n\ntype lockEntry struct {\n\tmu        sync.Mutex\n\texpiresAt time.Time\n}\n\n// TryLock 尝试获取锁，如果成功返回true，否则返回false\n// name: 锁名称\n// ttl: 锁的存活时间\nfunc (ll *LocalLock) TryLock(name string, ttl time.Duration) bool {\n\tnow := time.Now()\n\tentry, loaded := ll.locks.LoadOrStore(name, &lockEntry{\n\t\texpiresAt: now.Add(ttl),\n\t})\n\n\tle := entry.(*lockEntry)\n\tle.mu.Lock()\n\tlogger.SysLogf(\"lock: %s\", name)\n\n\t// 检查锁是否已过期\n\tif now.After(le.expiresAt) {\n\t\tle.expiresAt = now.Add(ttl)\n\t\tle.mu.Unlock()\n\t\treturn true\n\t}\n\n\tif loaded {\n\t\tle.mu.Unlock()\n\t\treturn false\n\t}\n\n\t// 新创建的锁，启动定时器自动释放\n\ttime.AfterFunc(ttl, func() {\n\t\tle.mu.Lock()\n\t\tdefer le.mu.Unlock()\n\t\tll.locks.Delete(name)\n\t\tlogger.SysLogf(\"lock %s expired, unlock\", name)\n\t})\n\n\tle.mu.Unlock()\n\treturn true\n}\n\n// Unlock 手动释放锁\nfunc (ll *LocalLock) Unlock(name string) {\n\tif entry, ok := ll.locks.Load(name); ok {\n\t\tle := entry.(*lockEntry)\n\t\tle.mu.Lock()\n\t\tdefer le.mu.Unlock()\n\t\tll.locks.Delete(name)\n\t}\n}\n\ntype RedisLock struct {\n\tclient redis.Cmdable\n}\n\nfunc NewRedisLock(client redis.Cmdable) *RedisLock {\n\treturn &RedisLock{client: client}\n}\n\nfunc (rl *RedisLock) TryLock(name string, ttl time.Duration) bool {\n\tctx := context.Background()\n\t// 使用SET NX EX实现原子操作\n\tresult, err := rl.client.SetNX(ctx, \"lock:\"+name, \"1\", ttl).Result()\n\treturn err == nil && result\n}\n\nfunc (rl *RedisLock) Unlock(name string) {\n\tctx := context.Background()\n\trl.client.Del(ctx, \"lock:\"+name)\n}\n"
  },
  {
    "path": "api/common/logger/logger.go",
    "content": "package logger\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype loggerLevel string\n\nconst (\n\tloggerDEBUG loggerLevel = \"DEBUG\"\n\tloggerINFO  loggerLevel = \"INFO\"\n\tloggerWARN  loggerLevel = \"WARN\"\n\tloggerERROR loggerLevel = \"ERROR\"\n\tloggerFATAL loggerLevel = \"FATAL\"\n\tloggerNONE  loggerLevel = \"NONE\"\n)\n\nvar (\n\tsetupLogOnce sync.Once\n\t// Current log level, initialized from environment variable\n\tcurrentLogLevel loggerLevel = loggerINFO\n)\n\n// Initialize the logger system with environment variables\nfunc init() {\n\t// Get log level from environment variable, default to INFO if not set\n\tenvLogLevel := os.Getenv(\"LOG_LEVEL\")\n\tif envLogLevel != \"\" {\n\t\tswitch strings.ToUpper(envLogLevel) {\n\t\tcase string(loggerDEBUG):\n\t\t\tcurrentLogLevel = loggerDEBUG\n\t\tcase string(loggerINFO):\n\t\t\tcurrentLogLevel = loggerINFO\n\t\tcase string(loggerWARN):\n\t\t\tcurrentLogLevel = loggerWARN\n\t\tcase string(loggerERROR):\n\t\t\tcurrentLogLevel = loggerERROR\n\t\tcase string(loggerFATAL):\n\t\t\tcurrentLogLevel = loggerFATAL\n\t\tcase string(loggerNONE):\n\t\t\tcurrentLogLevel = loggerNONE\n\t\tdefault:\n\t\t\t// If invalid level is provided, default to INFO\n\t\t\tcurrentLogLevel = loggerINFO\n\t\t}\n\t}\n}\n\n// SetLogLevel allows programmatically setting the log level\nfunc SetLogLevel(level string) {\n\tswitch strings.ToUpper(level) {\n\tcase string(loggerDEBUG):\n\t\tcurrentLogLevel = loggerDEBUG\n\tcase string(loggerINFO):\n\t\tcurrentLogLevel = loggerINFO\n\tcase string(loggerWARN):\n\t\tcurrentLogLevel = loggerWARN\n\tcase string(loggerERROR):\n\t\tcurrentLogLevel = loggerERROR\n\tcase string(loggerFATAL):\n\t\tcurrentLogLevel = loggerFATAL\n\tcase string(loggerNONE):\n\t\tcurrentLogLevel = loggerNONE\n\tdefault:\n\t\t// If invalid level is provided, default to INFO\n\t\tcurrentLogLevel = loggerINFO\n\t}\n}\n\n// GetLogLevel returns the current log level\nfunc GetLogLevel() string {\n\treturn string(currentLogLevel)\n}\n\n// shouldLog determines if a log message should be output based on its level\nfunc shouldLog(level loggerLevel) bool {\n\tif currentLogLevel == loggerNONE {\n\t\treturn false\n\t}\n\n\tswitch currentLogLevel {\n\tcase loggerDEBUG:\n\t\treturn true\n\tcase loggerINFO:\n\t\treturn level != loggerDEBUG\n\tcase loggerWARN:\n\t\treturn level != loggerDEBUG && level != loggerINFO\n\tcase loggerERROR:\n\t\treturn level == loggerERROR || level == loggerFATAL\n\tcase loggerFATAL:\n\t\treturn level == loggerFATAL\n\tdefault:\n\t\treturn true\n\t}\n}\n\nfunc SetupLogger() {\n\tsetupLogOnce.Do(func() {\n\t\tif config.LogDir != \"\" {\n\t\t\tvar logPath string\n\t\t\tif config.OnlyOneLogFile {\n\t\t\t\tlogPath = filepath.Join(config.LogDir, \"53AIHub.log\")\n\t\t\t} else {\n\t\t\t\tlogPath = filepath.Join(config.LogDir, fmt.Sprintf(\"53AIHub-%s.log\", time.Now().Format(\"20060102\")))\n\t\t\t}\n\t\t\tfd, err := os.OpenFile(logPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)\n\t\t\tif err != nil {\n\t\t\t\tlog.Fatal(\"failed to open log file\")\n\t\t\t}\n\t\t\tgin.DefaultWriter = io.MultiWriter(os.Stdout, fd)\n\t\t\tgin.DefaultErrorWriter = io.MultiWriter(os.Stderr, fd)\n\t\t}\n\t})\n}\n\nfunc SysLog(s string) {\n\tlogHelper(nil, loggerINFO, s)\n}\n\nfunc SysLogf(format string, a ...any) {\n\tlogHelper(nil, loggerINFO, fmt.Sprintf(format, a...))\n}\n\nfunc SysWarn(s string) {\n\tlogHelper(nil, loggerWARN, s)\n}\n\nfunc SysWarnf(format string, a ...any) {\n\tlogHelper(nil, loggerWARN, fmt.Sprintf(format, a...))\n}\n\nfunc SysError(s string) {\n\tlogHelper(nil, loggerERROR, s)\n}\n\nfunc SysErrorf(format string, a ...any) {\n\tlogHelper(nil, loggerERROR, fmt.Sprintf(format, a...))\n}\n\nfunc Debug(ctx context.Context, msg string) {\n\tlogHelper(ctx, loggerDEBUG, msg)\n}\n\nfunc Info(ctx context.Context, msg string) {\n\tlogHelper(ctx, loggerINFO, msg)\n}\n\nfunc Warn(ctx context.Context, msg string) {\n\tlogHelper(ctx, loggerWARN, msg)\n}\n\nfunc Error(ctx context.Context, msg string) {\n\tlogHelper(ctx, loggerERROR, msg)\n}\n\nfunc Debugf(ctx context.Context, format string, a ...any) {\n\tlogHelper(ctx, loggerDEBUG, fmt.Sprintf(format, a...))\n}\n\nfunc Infof(ctx context.Context, format string, a ...any) {\n\tlogHelper(ctx, loggerINFO, fmt.Sprintf(format, a...))\n}\n\nfunc Warnf(ctx context.Context, format string, a ...any) {\n\tlogHelper(ctx, loggerWARN, fmt.Sprintf(format, a...))\n}\n\nfunc Errorf(ctx context.Context, format string, a ...any) {\n\tlogHelper(ctx, loggerERROR, fmt.Sprintf(format, a...))\n}\n\nfunc FatalLog(s string) {\n\tlogHelper(nil, loggerFATAL, s)\n}\n\nfunc FatalLogf(format string, a ...any) {\n\tlogHelper(nil, loggerFATAL, fmt.Sprintf(format, a...))\n}\n\nfunc logHelper(ctx context.Context, level loggerLevel, msg string) {\n\t// Check if this log level should be output\n\tif !shouldLog(level) {\n\t\treturn\n\t}\n\n\twriter := gin.DefaultErrorWriter\n\tif level == loggerINFO {\n\t\twriter = gin.DefaultWriter\n\t}\n\tvar requestId string\n\tif ctx != nil {\n\t\trawRequestId := helper.GetRequestID(ctx)\n\t\tif rawRequestId != \"\" {\n\t\t\trequestId = fmt.Sprintf(\" | %s\", rawRequestId)\n\t\t}\n\t}\n\tlineInfo, funcName := getLineInfo()\n\tnow := time.Now()\n\t_, _ = fmt.Fprintf(writer, \"[%s] %v%s%s %s%s \\n\", level, now.Format(\"2006/01/02 - 15:04:05\"), requestId, lineInfo, funcName, msg)\n\tSetupLogger()\n\tif level == loggerFATAL {\n\t\tos.Exit(1)\n\t}\n}\n\nfunc getLineInfo() (string, string) {\n\tfuncName := \"[unknown] \"\n\tpc, file, line, ok := runtime.Caller(3)\n\tif ok {\n\t\tif fn := runtime.FuncForPC(pc); fn != nil {\n\t\t\tparts := strings.Split(fn.Name(), \".\")\n\t\t\tfuncName = \"[\" + parts[len(parts)-1] + \"] \"\n\t\t}\n\t} else {\n\t\tfile = \"unknown\"\n\t\tline = 0\n\t}\n\tparts := strings.Split(file, \"one-api/\")\n\tif len(parts) > 1 {\n\t\tfile = parts[1]\n\t}\n\treturn fmt.Sprintf(\" | %s:%d\", file, line), funcName\n}\n"
  },
  {
    "path": "api/common/permission.go",
    "content": "package common\n\nimport (\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc IsAdmin(c *gin.Context) bool {\n\trole, success := c.Get(\"SESSION_USER_ROLE\")\n\tif success && role != nil {\n\t\treturn role.(int64) >= model.RoleAdminUser\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "api/common/redis.go",
    "content": "package common\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/go-redis/redis/v8\"\n)\n\nvar RDB redis.Cmdable\nvar RedisEnabled = true\nvar ErrRedisNotEnabled = errors.New(\"redis is not enabled\")\n\n// InitRedisClient\nfunc InitRedisClient() error {\n\tif config.REDIS_CONN == \"\" {\n\t\tRedisEnabled = false\n\t\tlogger.SysLog(\"REDIS_CONN not set, Redis is not enabled\")\n\t\treturn nil\n\t}\n\n\tlogger.SysLog(\"Redis is enabled\")\n\topt, err := redis.ParseURL(config.REDIS_CONN)\n\tif err != nil {\n\t\tlogger.FatalLog(\"Redis connection error: \" + err.Error())\n\t}\n\tRDB = redis.NewClient(opt)\n\n\tctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)\n\tdefer cancel()\n\n\t_, err = RDB.Ping(ctx).Result()\n\tif err != nil {\n\t\tlogger.FatalLog(\"Redis test failed: \" + err.Error())\n\t}\n\treturn err\n}\n\n// checkRedisEnabled checks if Redis is enabled and logs a warning if not\n// Returns true if Redis is enabled, false otherwise\nfunc checkRedisEnabled() bool {\n\tif !RedisEnabled {\n\t\tlogger.SysWarn(\"Redis operation attempted but Redis is not enabled\")\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc IsRedisEnabled() bool {\n\treturn RedisEnabled\n}\n\nfunc RedisSet(key string, value string, expiration time.Duration) error {\n\tif !checkRedisEnabled() {\n\t\treturn ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\treturn RDB.Set(ctx, key, value, expiration).Err()\n}\n\nfunc RedisGet(key string) (string, error) {\n\tif !checkRedisEnabled() {\n\t\treturn \"\", ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\treturn RDB.Get(ctx, key).Result()\n}\n\nfunc RedisDel(key string) error {\n\tif !checkRedisEnabled() {\n\t\treturn ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\treturn RDB.Del(ctx, key).Err()\n}\n\nfunc RedisDecrease(key string, value int64) error {\n\tif !checkRedisEnabled() {\n\t\treturn ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\treturn RDB.DecrBy(ctx, key, value).Err()\n}\n\n// RedisZAdd adds a member to a sorted set\n// key: the key of the sorted set\n// score: the score used for ordering\n// member: the member to be added\n// Returns the number of new members added and any error that occurred\nfunc RedisZAdd(key string, score int64, member string) (int64, error) {\n\tif !checkRedisEnabled() {\n\t\treturn 0, ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\tz := redis.Z{\n\t\tScore:  float64(score),\n\t\tMember: member,\n\t}\n\treturn RDB.ZAdd(ctx, key, &z).Result()\n}\n\n// RedisZRangeByScore gets elements within a score range from a sorted set\n// key: the key of the sorted set\n// min: minimum score\n// max: maximum score\n// Returns all members in the specified range and any error that occurred\nfunc RedisZRangeByScore(key string, min, max int64) ([]string, error) {\n\tif !checkRedisEnabled() {\n\t\treturn nil, ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\topt := &redis.ZRangeBy{\n\t\tMin: strconv.FormatInt(min, 10),\n\t\tMax: strconv.FormatInt(max, 10),\n\t}\n\treturn RDB.ZRangeByScore(ctx, key, opt).Result()\n}\n\n// RedisZRem removes a member from a sorted set\n// key: the key of the sorted set\n// member: the member to be removed\n// Returns the number of members removed and any error that occurred\nfunc RedisZRem(key string, member string) (int64, error) {\n\tif !checkRedisEnabled() {\n\t\treturn 0, ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\treturn RDB.ZRem(ctx, key, member).Result()\n}\n\n// RedisZRemRangeByScore removes all elements within a score range from a sorted set\n// key: the key of the sorted set\n// min: minimum score\n// max: maximum score\n// Returns the number of members removed and any error that occurred\nfunc RedisZRemRangeByScore(key string, min, max int64) (int64, error) {\n\tif !checkRedisEnabled() {\n\t\treturn 0, ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\treturn RDB.ZRemRangeByScore(ctx, key, strconv.FormatInt(min, 10), strconv.FormatInt(max, 10)).Result()\n}\n\n// RedisZCount counts the number of elements within a score range in a sorted set\n// key: the key of the sorted set\n// min: minimum score\n// max: maximum score\n// Returns the count of members in the specified range and any error that occurred\nfunc RedisZCount(key string, min, max int64) (int64, error) {\n\tif !checkRedisEnabled() {\n\t\treturn 0, ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\treturn RDB.ZCount(ctx, key, strconv.FormatInt(min, 10), strconv.FormatInt(max, 10)).Result()\n}\n\n// RedisExists checks if a key exists\n// key: the key to check\n// Returns the number of existing keys and any error that occurred\nfunc RedisExists(key string) (int64, error) {\n\tif !checkRedisEnabled() {\n\t\treturn 0, ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\treturn RDB.Exists(ctx, key).Result()\n}\n\n// RedisExpire sets an expiration time for a key\n// key: the key to set expiration for\n// expiration: the expiration duration\n// Returns whether the expiration was set successfully and any error that occurred\nfunc RedisExpire(key string, expiration time.Duration) (bool, error) {\n\tif !checkRedisEnabled() {\n\t\treturn false, ErrRedisNotEnabled\n\t}\n\tctx := context.Background()\n\treturn RDB.Expire(ctx, key, expiration).Result()\n}\n"
  },
  {
    "path": "api/common/session/key.go",
    "content": "package session\n\nconst (\n\tSESSION_USER_ID          = \"SESSION_USER_ID\"\n\tSESSION_USER_NICKNAME    = \"SESSION_USER_NICKNAME\"\n\tSESSION_USER_ROLE        = \"SESSION_USER_ROLE\"\n\tSESSION_USER_GROUP_ID    = \"SESSION_USER_GROUP_ID\"\n\tENV_EID                  = \"ENV_EID\"\n\tSESSION_AGENT_MODEL      = \"SESSION_AGENT_MODEL\"\n\tSESSION_AGENT_ID         = \"SESSION_AGENT_ID\"\n\tSESSION_AGENT            = \"SESSION_AGENT\"\n\tSESSION_CONVERSATION_ID  = \"SESSION_CONVERSATION_ID\"\n\tSESSION_CONVERSATION     = \"SESSION_CONVERSATION\"\n\tSESSION_SAAS_USER        = \"SESSION_SAAS_USER\"\n\tSESSION_REQUEST_PROTOCOL = \"SESSION_REQUEST_PROTOCOL\"\n\tSESSION_REQUEST_DOMAIN   = \"SESSION_REQUEST_DOMAIN\"\n\tSESSION_ENV_VERSION      = \"SESSION_ENV_VERSION\"\n)\n"
  },
  {
    "path": "api/common/storage/storage.go",
    "content": "package storage\n\nimport (\n\t\"bytes\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"sync\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/aliyun/aliyun-oss-go-sdk/oss\"\n)\n\nvar StorageInstance Storage = NewStorage()\n\ntype Storage interface {\n\tSave(file []byte, fileName string) error\n\tExists(fileName string) bool\n\tDelete(fileName string) error\n\tLoad(fileName string) ([]byte, error)\n\tGetBasePath() string\n}\n\ntype LocalStorage struct {\n\tBasePath string\n\tmu       sync.RWMutex\n}\n\ntype AliyunOSSStorage struct {\n\tclient          *oss.Client\n\tbucket          *oss.Bucket\n\tEndpoint        string\n\tAccessKeyID     string\n\tAccessKeySecret string\n\tBucketName      string\n\tBasePath        string\n}\n\nfunc NewStorage() Storage {\n\tswitch config.StorageType {\n\tcase \"aliyun_oss\":\n\t\tclient, err := oss.New(config.AliyunOssEndpoint, config.AliyunOssAccessKeyID, config.AliyunOssAccessKeySecret)\n\t\tif err != nil {\n\t\t\tpanic(fmt.Errorf(\"failed to create oss client: %w\", err))\n\t\t}\n\t\tbucket, err := client.Bucket(config.AliyunOssBucketName)\n\t\tif err != nil {\n\t\t\tpanic(fmt.Errorf(\"failed to get oss bucket: %w\", err))\n\t\t}\n\t\treturn &AliyunOSSStorage{\n\t\t\tclient:          client,\n\t\t\tbucket:          bucket,\n\t\t\tEndpoint:        config.AliyunOssEndpoint,\n\t\t\tAccessKeyID:     config.AliyunOssAccessKeyID,\n\t\t\tAccessKeySecret: config.AliyunOssAccessKeySecret,\n\t\t\tBucketName:      config.AliyunOssBucketName,\n\t\t\tBasePath:        config.StorageBasePath,\n\t\t}\n\tdefault:\n\t\treturn &LocalStorage{BasePath: config.StorageBasePath}\n\t}\n}\n\nfunc (l *LocalStorage) Save(file []byte, fileName string) error {\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\n\tif err := os.MkdirAll(path.Dir(fileName), 0755); err != nil {\n\t\treturn fmt.Errorf(\"create dir error: %w\", err)\n\t}\n\n\tif err := os.WriteFile(fileName, file, 0666); err != nil {\n\t\treturn fmt.Errorf(\"write file error: %w\", err)\n\t}\n\n\treturn nil\n}\n\nfunc (l *LocalStorage) Exists(fileName string) bool {\n\tl.mu.RLock()\n\tdefer l.mu.RUnlock()\n\t_, err := os.Stat(fileName)\n\treturn !os.IsNotExist(err)\n}\n\nfunc (l *LocalStorage) Delete(fileName string) error {\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\terr := os.Remove(fileName)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"remove file error: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc (l *LocalStorage) Load(fileName string) ([]byte, error) {\n\tl.mu.RLock()\n\tdefer l.mu.RUnlock()\n\tdata, err := os.ReadFile(fileName)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"read file error: %w\", err)\n\t}\n\treturn data, nil\n}\n\nfunc GetFileHash(file multipart.File) (string, error) {\n\thash := sha256.New()\n\tif _, err := io.Copy(hash, file); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif seeker, ok := file.(io.Seeker); ok {\n\t\tif _, err := seeker.Seek(0, io.SeekStart); err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"file seek error: %w\", err)\n\t\t}\n\t}\n\n\thashInBytes := hash.Sum(nil)\n\treturn hex.EncodeToString(hashInBytes), nil\n}\n\nfunc (l *LocalStorage) GetBasePath() string {\n\treturn l.BasePath\n}\n\nfunc (a *AliyunOSSStorage) Save(file []byte, fileName string) error {\n\tobjectName := filepath.ToSlash(fileName)\n\treader := bytes.NewReader(file)\n\n\terr := a.bucket.PutObject(objectName, reader)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"oss upload error: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc (a *AliyunOSSStorage) Load(fileName string) ([]byte, error) {\n\tobjectName := filepath.ToSlash(fileName)\n\treader, err := a.bucket.GetObject(objectName)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"oss file download error: %w\", err)\n\t}\n\tdefer reader.Close()\n\treturn io.ReadAll(reader)\n}\n\nfunc (a *AliyunOSSStorage) Exists(fileName string) bool {\n\tobjectName := filepath.ToSlash(fileName)\n\texist, err := a.bucket.IsObjectExist(objectName)\n\treturn err == nil && exist\n}\n\nfunc (a *AliyunOSSStorage) Delete(fileName string) error {\n\tobjectName := filepath.ToSlash(fileName)\n\tif err := a.bucket.DeleteObject(objectName); err != nil {\n\t\treturn fmt.Errorf(\"oss file delete error: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc (a *AliyunOSSStorage) GetBasePath() string {\n\treturn a.BasePath\n}\n"
  },
  {
    "path": "api/common/storage/storage_test.go",
    "content": "package storage\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n)\n\nfunc TestSaveFile(t *testing.T) {\n\t// 创建 LocalStorage 实例\n\ttempDir := \"../../static/uploads\"\n\tlocalStorage := &LocalStorage{\n\t\tBasePath: \"../../static/uploads\",\n\t}\n\n\tfileContent := []byte(\"测试文件内容\")\n\tfileName := \"test.txt\"\n\terr := localStorage.Save(fileContent, fileName)\n\tif err != nil {\n\t\tt.Errorf(\"保存文件失败: %v\", err)\n\t}\n\n\tfilePath := filepath.Join(tempDir, fileName)\n\t_, err = os.Stat(filePath)\n\tif err != nil {\n\t\tt.Errorf(\"文件不存在: %v\", err)\n\t}\n\n\tlocalStorage.BasePath = \"/invalid/path\"\n\terr = localStorage.Save(fileContent, fileName)\n\tif err == nil {\n\t\tt.Errorf(\"创建目录失败时应返回错误\")\n\t}\n}\n"
  },
  {
    "path": "api/common/utils/ai53/api.go",
    "content": "package ai53\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype AI53Api struct {\n\tBaseUrl   string\n\tAuthToken string\n}\n\ntype AppResponse struct {\n\tBotID              string   `json:\"bot_id\"`\n\tName               string   `json:\"name\"`\n\tNickname           string   `json:\"nickname\"`\n\tDescription        *string  `json:\"description\"`\n\tLogo               string   `json:\"logo\"`\n\tOpeningStatement   string   `json:\"opening_statement\"`\n\tSuggestedQuestions []string `json:\"suggested_questions\"`\n\tUpdatedAt          int64    `json:\"updated_at\"`\n}\n\nfunc (a *AI53Api) GetBaseURL() string {\n\turl := a.BaseUrl\n\turl = strings.TrimSuffix(url, \"/\")\n\turl = strings.TrimSuffix(url, \"/v3\")\n\treturn url\n}\n\nfunc (a *AI53Api) GetApps(offset, limit int) ([]AppResponse, error) {\n\turl := a.GetBaseURL() + \"/v3/apps\"\n\treq, err := http.NewRequest(\"GET\", url, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tq := req.URL.Query()\n\tq.Add(\"offset\", strconv.Itoa(offset))\n\tq.Add(\"limit\", strconv.Itoa(limit))\n\treq.URL.RawQuery = q.Encode()\n\n\treq.Header.Set(\"Authorization\", \"Bearer \"+a.AuthToken)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode >= 400 {\n\t\treturn nil, fmt.Errorf(\"API request failed with status %d\", resp.StatusCode)\n\t}\n\n\tbody, _ := io.ReadAll(resp.Body)\n\t// logger.SysLogf(\"AI53 GetApps response: %s\", string(body))\n\n\tvar result []AppResponse\n\tif err := json.Unmarshal(body, &result); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn result, nil\n}\n\nfunc (a *AI53Api) GetWorkflows(offset, limit int) ([]AppResponse, error) {\n\turl := a.GetBaseURL() + \"/v3/workflows\"\n\treq, err := http.NewRequest(\"GET\", url, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tq := req.URL.Query()\n\tq.Add(\"offset\", strconv.Itoa(offset))\n\tq.Add(\"limit\", strconv.Itoa(limit))\n\treq.URL.RawQuery = q.Encode()\n\n\treq.Header.Set(\"Authorization\", \"Bearer \"+a.AuthToken)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode >= 400 {\n\t\treturn nil, fmt.Errorf(\"API request failed with status %d\", resp.StatusCode)\n\t}\n\n\tbody, _ := io.ReadAll(resp.Body)\n\t// logger.SysLogf(\"AI53 GetWorkflows response: %s\", string(body))\n\n\tvar result []AppResponse\n\tif err := json.Unmarshal(body, &result); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn result, nil\n}\n\n// cleanBotId 清理 botId，去掉可能的前缀\nfunc (a *AI53Api) cleanBotId(botId string) string {\n\t// 去掉 \"bot-\" 前缀\n\tif strings.HasPrefix(botId, \"bot-\") {\n\t\treturn strings.TrimPrefix(botId, \"bot-\")\n\t}\n\n\t// 去掉 \"workflow-\" 前缀\n\tif strings.HasPrefix(botId, \"workflow-\") {\n\t\treturn strings.TrimPrefix(botId, \"workflow-\")\n\t}\n\n\t// 直接返回原始 botId\n\treturn botId\n}\n\n// GetAppParameters 获取 53AI 应用参数配置\nfunc (a *AI53Api) GetAppParameters(botId string) (interface{}, error) {\n\t// 清理 botId (去掉可能的前缀)\n\tcleanBotId := a.cleanBotId(botId)\n\n\t// 构建 URL (使用 53AI 的 v3 端点)\n\turl := a.GetBaseURL() + \"/v3/parameters\"\n\n\treq, err := http.NewRequest(\"GET\", url, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treq.Header.Set(\"Authorization\", \"Bearer \"+a.AuthToken)\n\treq.Header.Set(\"Bot-Id\", cleanBotId)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode >= 400 {\n\t\treturn nil, fmt.Errorf(\"API request failed with status %d\", resp.StatusCode)\n\t}\n\n\tbody, _ := io.ReadAll(resp.Body)\n\n\tvar result interface{}\n\tif err := json.Unmarshal(body, &result); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn result, nil\n}\n"
  },
  {
    "path": "api/common/utils/appbuilder/api.go",
    "content": "package appbuilder\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n)\n\ntype AppBuilderApi struct {\n\tBaseUrl   string\n\tAuthToken string\n}\n\n// AppInfo represents application information\n// @Description Application information structure\ntype AppInfo struct {\n\t// ID is the unique identifier of the application\n\t// @Example \"app_1234567890\"\n\tID string `json:\"id\"`\n\n\t// Name is the display name of the application\n\t// @Example \"My Awesome App\"\n\tName string `json:\"name\"`\n\n\t// Description provides details about the application\n\t// @Example \"This is a sample application for demonstration purposes\"\n\tDescription string `json:\"description\"`\n\n\t// AppType indicates the type of the application\n\t// @Example \"chatbot\"\n\tAppType string `json:\"appType\"`\n\n\t// IsPublished shows whether the application is published\n\t// @Example true\n\tIsPublished bool `json:\"isPublished\"`\n\n\t// UpdateTime is the last update timestamp in Unix time format\n\t// @Example 1672531200\n\tUpdateTime int64 `json:\"updateTime\"`\n}\n\ntype DescribeAppsResponse struct {\n\tRequestId   string    `json:\"requestId\"`\n\tData        []AppInfo `json:\"data\"`\n\tMarker      string    `json:\"marker\"`\n\tIsTruncated bool      `json:\"isTruncated\"`\n\tNextMarker  string    `json:\"nextMarker\"`\n\tMaxKeys     int       `json:\"maxKeys\"`\n}\n\nfunc (a *AppBuilderApi) DescribeApps(marker string, maxKeys int) (*DescribeAppsResponse, error) {\n\turl := a.BaseUrl + \"/v2/app?Action=DescribeApps\"\n\tvar payload interface{}\n\tif marker == \"\" {\n\t\tpayload = map[string]interface{}{\n\t\t\t\"maxKeys\": maxKeys,\n\t\t}\n\t} else {\n\t\tpayload = map[string]interface{}{\n\t\t\t\"marker\":  marker,\n\t\t\t\"maxKeys\": maxKeys,\n\t\t}\n\t}\n\n\theaders := map[string]string{\n\t\t\"Content-Type\":  \"application/json\",\n\t\t\"Authorization\": \"Bearer \" + a.AuthToken,\n\t}\n\n\tresp, err := a.doRequest(\"POST\", url, payload, headers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpayloadBytes, _ := json.Marshal(payload)\n\tlogger.SysLogf(\"AppBuilder DescribeApps request: URL: %s, Payload: %s\", url, string(payloadBytes))\n\tlogger.SysLogf(\"AppBuilder DescribeApps response: Body: %s\", string(resp))\n\tvar result DescribeAppsResponse\n\terr = json.Unmarshal(resp, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &result, nil\n}\n\ntype ConversationResponse struct {\n\tRequestId      string `json:\"request_id\"`\n\tConversationId string `json:\"conversation_id\"`\n}\n\ntype ErrorResponse struct {\n\tRequestId string `json:\"request_id\"`\n\tCode      string `json:\"code\"`\n\tMessage   string `json:\"message\"`\n}\n\nfunc (a *AppBuilderApi) CreateConversation(appId string) (*ConversationResponse, error) {\n\turl := a.BaseUrl + \"/v2/app/conversation\"\n\tpayload := map[string]interface{}{\n\t\t\"app_id\": appId,\n\t}\n\n\theaders := map[string]string{\n\t\t\"Content-Type\":  \"application/json\",\n\t\t\"Authorization\": \"Bearer \" + a.AuthToken,\n\t}\n\n\tresp, err := a.doRequest(\"POST\", url, payload, headers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpayloadBytes, _ := json.Marshal(payload)\n\tlogger.SysLogf(\"AppBuilder CreateConversation request: URL: %s, Payload: %s\", url, string(payloadBytes))\n\tlogger.SysLogf(\"AppBuilder CreateConversation response: Body: %s\", string(resp))\n\n\tif strings.Contains(string(resp), \"code\") {\n\t\tvar errorResp ErrorResponse\n\t\terr = json.Unmarshal(resp, &errorResp)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn nil, fmt.Errorf(\"API error: %s (%s)\", errorResp.Message, errorResp.Code)\n\t}\n\n\tvar result ConversationResponse\n\terr = json.Unmarshal(resp, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &result, nil\n}\n\nfunc (a *AppBuilderApi) doRequest(method, url string, payload interface{}, headers map[string]string) ([]byte, error) {\n\tpayloadBytes, err := json.Marshal(payload)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treq, err := http.NewRequest(method, url, bytes.NewBuffer(payloadBytes))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor key, value := range headers {\n\t\treq.Header.Set(key, value)\n\t}\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif resp.StatusCode >= 400 {\n\t\treturn nil, fmt.Errorf(\"request failed with status %d: %s\", resp.StatusCode, string(body))\n\t}\n\n\treturn body, nil\n}\n"
  },
  {
    "path": "api/common/utils/coze/api.go",
    "content": "package coze\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/model\"\n)\n\ntype CozeApi struct {\n\tBaseUrl string\n}\n\nconst (\n\tCozeCnUrl  = \"https://api.coze.cn\"\n\tCozeComUrl = \"https://api.coze.com\"\n)\n\ntype CozeApiTokenResponse struct {\n\tAccessToken  string `json:\"access_token\"`\n\tRefreshToken string `json:\"refresh_token\"`\n\tExpiresIn    int64  `json:\"expires_in\"`\n}\n\nfunc (c *CozeApi) doRequest(method, url string, payload interface{}, headers map[string]string) ([]byte, error) {\n\tpayloadBytes, err := json.Marshal(payload)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treq, err := http.NewRequest(method, url, bytes.NewBuffer(payloadBytes))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor key, value := range headers {\n\t\treq.Header.Set(key, value)\n\t}\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif resp.StatusCode >= 400 {\n\t\treturn nil, fmt.Errorf(\"request failed with status %d: %s\", resp.StatusCode, string(body))\n\t}\n\n\treturn body, nil\n}\n\nfunc (c *CozeApi) GetOAuthToken(clientID, clientSecret, code, redirectURI string) (*CozeApiTokenResponse, error) {\n\turl := c.BaseUrl + \"/api/permission/oauth2/token\"\n\tpayload := map[string]string{\n\t\t\"grant_type\":   \"authorization_code\",\n\t\t\"code\":         code,\n\t\t\"client_id\":    clientID,\n\t\t\"redirect_uri\": redirectURI,\n\t}\n\n\theaders := map[string]string{\n\t\t\"Content-Type\":  \"application/json\",\n\t\t\"Authorization\": \"Bearer \" + clientSecret,\n\t}\n\n\tresp, err := c.doRequest(\"POST\", url, payload, headers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar result CozeApiTokenResponse\n\terr = json.Unmarshal(resp, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif result.AccessToken == \"\" || result.RefreshToken == \"\" || result.ExpiresIn == 0 {\n\t\treturn nil, fmt.Errorf(\"invalid token response: %s\", string(resp))\n\t}\n\treturn &result, nil\n}\n\nfunc (c *CozeApi) RefreshOAuthToken(clientID, clientSecret, refreshToken string) (*CozeApiTokenResponse, error) {\n\turl := c.BaseUrl + \"/api/permission/oauth2/token\"\n\tpayload := map[string]string{\n\t\t\"grant_type\":    \"refresh_token\",\n\t\t\"refresh_token\": refreshToken,\n\t\t\"client_id\":     clientID,\n\t}\n\n\theaders := map[string]string{\n\t\t\"Content-Type\":  \"application/json\",\n\t\t\"Authorization\": \"Bearer \" + clientSecret,\n\t}\n\n\tresp, err := c.doRequest(\"POST\", url, payload, headers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar result CozeApiTokenResponse\n\terr = json.Unmarshal(resp, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif result.AccessToken == \"\" || result.RefreshToken == \"\" || result.ExpiresIn == 0 {\n\t\treturn nil, fmt.Errorf(\"invalid token response: %s\", string(resp))\n\t}\n\treturn &result, nil\n}\n\ntype Workspace struct {\n\tID            string `json:\"id\"`\n\tName          string `json:\"name\"`\n\tIconURL       string `json:\"icon_url\"`\n\tRoleType      string `json:\"role_type\"`\n\tWorkspaceType string `json:\"workspace_type\"`\n}\n\ntype WorkspacesResponse struct {\n\tTotalCount int         `json:\"total_count\"`\n\tWorkspaces []Workspace `json:\"workspaces\"`\n}\n\ntype Bot struct {\n\tBotID       string `json:\"bot_id\"`\n\tBotName     string `json:\"bot_name\"`\n\tDescription string `json:\"description\"`\n\tIconURL     string `json:\"icon_url\"`\n\tPublishTime string `json:\"publish_time\"`\n}\n\ntype PublishedBotsResponse struct {\n\tSpaceBots []Bot `json:\"space_bots\"`\n\tTotal     int   `json:\"total\"`\n}\n\n// IsTokenExpired checks if token is expired (with 5 minutes buffer time)\nfunc IsTokenExpired(provider *model.Provider) bool {\n\treturn time.Now().Unix()+300 >= provider.CreatedTime+provider.ExpiresIn\n}\n\n// RefreshTokenIfNeeded refreshes token if it's about to expire\nfunc (c *CozeApi) RefreshTokenIfNeeded(provider *model.Provider) error {\n\tif !IsTokenExpired(provider) {\n\t\treturn nil\n\t}\n\n\tvar config model.CozeConfig\n\tif err := json.Unmarshal([]byte(provider.Configs), &config); err != nil {\n\t\treturn fmt.Errorf(\"failed to parse provider config: %w\", err)\n\t}\n\n\tresp, err := c.RefreshOAuthToken(config.ClientID, config.ClientSecret, provider.RefreshToken)\n\tif err != nil {\n\t\t// If refresh token expired, mark provider as unauthorized\n\t\tif strings.Contains(err.Error(), \"invalid_grant\") || strings.Contains(err.Error(), \"invalid_refresh_token\") {\n\t\t\tprovider.IsAuthorized = false\n\t\t\tif updateErr := model.UpdateProvider(provider); updateErr != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to update provider authorization status: %w\", updateErr)\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"refresh token expired, reauthorization required: %w\", err)\n\t\t}\n\t\treturn fmt.Errorf(\"failed to refresh token: %w\", err)\n\t}\n\n\tprovider.AccessToken = resp.AccessToken\n\tprovider.RefreshToken = resp.RefreshToken\n\tprovider.ExpiresIn = resp.ExpiresIn\n\tprovider.CreatedTime = time.Now().Unix()\n\n\treturn model.UpdateProvider(provider)\n}\n\n// GetWorkspaces retrieves list of workspaces\nfunc (c *CozeApi) GetWorkspaces(provider *model.Provider, pageNum int, pageSize int) (*WorkspacesResponse, error) {\n\tif err := c.RefreshTokenIfNeeded(provider); err != nil {\n\t\treturn nil, err\n\t}\n\n\turl := c.BaseUrl + \"/v1/workspaces\"\n\tquery := fmt.Sprintf(\"?page_num=%d&page_size=%d\", pageNum, pageSize)\n\turl = url + query\n\n\t// Log request details\n\tfmt.Printf(\"GetWorkspaces: Provider ID %d, URL: %s\\n\", provider.ProviderID, url)\n\tfmt.Printf(\"GetWorkspaces: AccessToken: %s...\\n\", provider.AccessToken[:min(len(provider.AccessToken), 20)])\n\n\theaders := map[string]string{\n\t\t\"Content-Type\":  \"application/json\",\n\t\t\"Authorization\": \"Bearer \" + provider.AccessToken,\n\t}\n\n\tresp, err := c.doRequest(\"GET\", url, nil, headers)\n\tif err != nil {\n\t\tfmt.Printf(\"GetWorkspaces: Request failed for provider %d: %v\\n\", provider.ProviderID, err)\n\t\treturn nil, err\n\t}\n\n\tfmt.Printf(\"GetWorkspaces: Raw response for provider %d: %s\\n\", provider.ProviderID, string(resp))\n\n\tvar result struct {\n\t\tData WorkspacesResponse `json:\"data\"`\n\t\tCode int                `json:\"code\"`\n\t\tMsg  string             `json:\"msg\"`\n\t}\n\tif err := json.Unmarshal(resp, &result); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif result.Code != 0 {\n\t\treturn nil, fmt.Errorf(\"request failed with code %d: %s\", result.Code, result.Msg)\n\t}\n\n\tfmt.Printf(\"GetWorkspaces: Found %d workspaces for provider %d\\n\", len(result.Data.Workspaces), provider.ProviderID)\n\treturn &result.Data, nil\n}\n\n// GetPublishedBots retrieves list of published bots\nfunc (c *CozeApi) GetPublishedBots(provider *model.Provider, spaceID string, pageIndex int, pageSize int) (*PublishedBotsResponse, error) {\n\tif err := c.RefreshTokenIfNeeded(provider); err != nil {\n\t\treturn nil, err\n\t}\n\n\turl := c.BaseUrl + \"/v1/space/published_bots_list\"\n\tquery := fmt.Sprintf(\"?space_id=%s&page_size=%d&page_index=%d\", spaceID, pageSize, pageIndex)\n\turl = url + query\n\n\theaders := map[string]string{\n\t\t\"Content-Type\":  \"application/json\",\n\t\t\"Authorization\": \"Bearer \" + provider.AccessToken,\n\t}\n\n\tresp, err := c.doRequest(\"GET\", url, nil, headers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar result struct {\n\t\tData PublishedBotsResponse `json:\"data\"`\n\t\tCode int                   `json:\"code\"`\n\t\tMsg  string                `json:\"msg\"`\n\t}\n\tif err := json.Unmarshal(resp, &result); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif result.Code != 0 {\n\t\treturn nil, fmt.Errorf(\"request failed with code %d: %s\", result.Code, result.Msg)\n\t}\n\n\treturn &result.Data, nil\n}\n"
  },
  {
    "path": "api/common/utils/env/env.go",
    "content": "package env\n\nimport (\n\t\"os\"\n\t\"strconv\"\n\n\t_ \"github.com/joho/godotenv/autoload\"\n)\n\nfunc Int(env string, defaultValue int) int {\n\tif env == \"\" || os.Getenv(env) == \"\" {\n\t\treturn defaultValue\n\t}\n\tnum, err := strconv.Atoi(os.Getenv(env))\n\tif err != nil {\n\t\treturn defaultValue\n\t}\n\treturn num\n}\n\nfunc Int64(env string, defaultValue int64) int64 {\n\tif env == \"\" || os.Getenv(env) == \"\" {\n\t\treturn defaultValue\n\t}\n\tnum, err := strconv.ParseInt(os.Getenv(env), 10, 64)\n\tif err != nil {\n\t\treturn defaultValue\n\t}\n\treturn num\n}\n\nfunc Float64(env string, defaultValue float64) float64 {\n\tif env == \"\" || os.Getenv(env) == \"\" {\n\t\treturn defaultValue\n\t}\n\tnum, err := strconv.ParseFloat(os.Getenv(env), 64)\n\tif err != nil {\n\t\treturn defaultValue\n\t}\n\treturn num\n}\n\nfunc String(env string, defaultValue string) string {\n\tif env == \"\" || os.Getenv(env) == \"\" {\n\t\treturn defaultValue\n\t}\n\treturn os.Getenv(env)\n}\n\nfunc Bool(env string, defaultValue bool) bool {\n\tif env == \"\" || os.Getenv(env) == \"\" {\n\t\treturn defaultValue\n\t}\n\treturn os.Getenv(env) == \"true\"\n}\n"
  },
  {
    "path": "api/common/utils/helper/helper.go",
    "content": "package helper\n\nimport (\n\t\"context\"\n\t\"crypto/md5\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\nfunc GetRequestID(ctx context.Context) string {\n\trawRequestId := ctx.Value(RequestIdKey)\n\tif rawRequestId == nil {\n\t\treturn \"\"\n\t}\n\treturn rawRequestId.(string)\n}\n\nconst Chars = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\nfunc RandomString(n int) string {\n\trand.Seed(time.Now().UnixNano())\n\tkey := make([]byte, n)\n\tfor i := 0; i < n; i++ {\n\t\tkey[i] = Chars[rand.Intn(len(Chars))]\n\t}\n\treturn string(key)\n}\n\nfunc PasswordHash(password string, salt string) (string, error) {\n\t// md5(password+salt)\n\tcombined := password + salt\n\thash := md5.Sum([]byte(combined))\n\treturn fmt.Sprintf(\"%x\", hash), nil\n}\n\nvar sizeKB = 1024\nvar sizeMB = sizeKB * 1024\nvar sizeGB = sizeMB * 1024\n\nfunc Bytes2Size(num int64) string {\n\tnumStr := \"\"\n\tunit := \"B\"\n\tif num/int64(sizeGB) > 1 {\n\t\tnumStr = fmt.Sprintf(\"%.2f\", float64(num)/float64(sizeGB))\n\t\tunit = \"GB\"\n\t} else if num/int64(sizeMB) > 1 {\n\t\tnumStr = fmt.Sprintf(\"%d\", int(float64(num)/float64(sizeMB)))\n\t\tunit = \"MB\"\n\t} else if num/int64(sizeKB) > 1 {\n\t\tnumStr = fmt.Sprintf(\"%d\", int(float64(num)/float64(sizeKB)))\n\t\tunit = \"KB\"\n\t} else {\n\t\tnumStr = fmt.Sprintf(\"%d\", num)\n\t}\n\treturn numStr + \" \" + unit\n}\n\nfunc ParseSize(sizeStr string) (int64, error) {\n\tsizeStr = strings.TrimSpace(sizeStr)\n\tunitIndex := strings.IndexAny(sizeStr, \"kKmMgG\")\n\tif unitIndex == -1 {\n\t\treturn strconv.ParseInt(sizeStr, 10, 64)\n\t}\n\n\tnumStr := sizeStr[:unitIndex]\n\tnum, err := strconv.ParseInt(numStr, 10, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tunit := strings.ToUpper(sizeStr[unitIndex:])\n\tswitch unit {\n\tcase \"K\", \"KB\":\n\t\treturn num * 1024, nil\n\tcase \"M\", \"MB\":\n\t\treturn num * 1024 * 1024, nil\n\tcase \"G\", \"GB\":\n\t\treturn num * 1024 * 1024 * 1024, nil\n\tdefault:\n\t\treturn 0, nil\n\t}\n}\n\nfunc CalcElapsedTime(start time.Time) int64 {\n\treturn time.Now().Sub(start).Milliseconds()\n}\n\n// IsValidPhone validates if the input is a valid phone number\n// Supports international phone numbers in various formats\nfunc IsValidPhone(phone string) bool {\n\tphone = regexp.MustCompile(`[\\s\\-\\(\\)]`).ReplaceAllString(phone, \"\")\n\n\tif phone == \"\" {\n\t\treturn false\n\t}\n\n\tif strings.HasPrefix(phone, \"+\") {\n\t\tnumPart := phone[1:]\n\t\tif regexp.MustCompile(`^\\d{7,15}$`).MatchString(numPart) {\n\t\t\treturn true\n\t\t}\n\t}\n\n\tif regexp.MustCompile(`^1[3-9]\\d{9}$`).MatchString(phone) {\n\t\treturn true\n\t}\n\n\tif regexp.MustCompile(`^\\d{7,15}$`).MatchString(phone) {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// IsValidEmail validates if the input is a valid email address\nfunc IsValidEmail(email string) bool {\n\t// Simple email format validation\n\tmatch, _ := regexp.MatchString(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$`, email)\n\treturn match\n}\n\nfunc HasIntersection(a, b []int64) bool {\n\tif len(a) > len(b) {\n\t\ta, b = b, a\n\t}\n\tset := make(map[int64]struct{}, len(a))\n\tfor _, v := range a {\n\t\tset[v] = struct{}{}\n\t}\n\tfor _, v := range b {\n\t\tif _, ok := set[v]; ok {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc GetHost(u string) (string, error) {\n\tparsed, err := url.Parse(u)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\thost := parsed.Scheme + \"://\" + parsed.Host\n\treturn host, nil\n}\n\nfunc StrInArray(str string, arr []string) bool {\n\tfor _, v := range arr {\n\t\tif v == str {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "api/common/utils/helper/key.go",
    "content": "package helper\n\nconst (\n\tRequestIdKey = \"X-Request-Id\"\n)\n"
  },
  {
    "path": "api/common/utils/helper/sso_sign.go",
    "content": "package helper\n\nimport (\n\t\"crypto/md5\"\n\t\"fmt\"\n)\n\n// BuildSSORawString 构造原始签名串：timestamp={10位}&username={规范化用户名}{secret}\nfunc BuildSSORawString(timestamp string, normalizedUsername string, secret string) string {\n\treturn fmt.Sprintf(\"timestamp=%s&username=%s%s\", timestamp, normalizedUsername, secret)\n}\n\n// CalcSSOSignLowerHex 计算 MD5 并返回小写十六进制字符串（UTF-8）\nfunc CalcSSOSignLowerHex(raw string) string {\n\tsum := md5.Sum([]byte(raw))\n\treturn fmt.Sprintf(\"%x\", sum)\n}\n"
  },
  {
    "path": "api/common/utils/huawei_cloud/model.go",
    "content": "package huawei_cloud\n\ntype HuaweicloudBaseResponse struct {\n\tResultCode string `json:\"resultCode\"`\n\tResultMsg  string `json:\"resultMsg\"`\n}\n\ntype HuaweicloudCallbackRequest struct {\n\tActivity string `json:\"activity\"`\n\tTestFlag string `json:\"testFlag\"`\n}\n\ntype HuaweicloudCallbackQuery struct {\n\tSignature string `form:\"signature\"`\n\tTimestamp int64  `form:\"timestamp\"`\n\tNonce     string `form:\"nonce\"`\n}\n\nconst (\n\tSUCCESS = \"000000\"\n)\n\nconst (\n\tSUCCESS_MSG = \"success\"\n)\n\ntype CreateInstanceResponse struct {\n\tHuaweicloudBaseResponse\n\tInstanceId string `json:\"instanceId\"`\n}\n\nfunc GetSuccess() HuaweicloudBaseResponse {\n\treturn HuaweicloudBaseResponse{\n\t\tResultCode: SUCCESS,\n\t\tResultMsg:  SUCCESS_MSG,\n\t}\n}\n\ntype HuaweiCloudBody struct {\n\tActivity    string `json:\"activity\"`\n\tBusinessId  string `json:\"businessId\"`\n\tOrderId     string `json:\"orderId\"`\n\tOrderLineId string `json:\"orderLineId\"`\n\tInstanceId  string `json:\"instanceId\"` // 查询实例信息时使用\n\tTestFlag    string `json:\"testFlag\"`\n\n\t// 更新实例相关字段\n\tScene      string `json:\"scene\"`      // 场景：TRIAL_TO_FORMAL, RENEWAL, UNSUBSCRIBE_RENEWAL_PERIOD\n\tProductId  string `json:\"productId\"`  // 产品标识\n\tExpireTime string `json:\"expireTime\"` // 过期时间 yyyyMMddHHmmss\n\n\t// 更新实例状态相关字段\n\tStatus string `json:\"status\"` // 状态：FROZEN, UNFROZEN\n\n\t// 升级实例相关字段\n\tNewProductId string `json:\"newProductId\"` // 新产品标识\n}\n\n// 查询实例信息响应结构\ntype QueryInstanceResponse struct {\n\tHuaweicloudBaseResponse\n\tInfo []InstanceInfo `json:\"info\"`\n}\n\ntype InstanceInfo struct {\n\tInstanceId string  `json:\"instanceId\"`\n\tAppInfo    AppInfo `json:\"appInfo\"`\n}\n\ntype AppInfo struct {\n\tFrontEndUrl string `json:\"frontEndUrl\"` // 前台地址\n\tAdminUrl    string `json:\"adminUrl\"`    // 管理地址\n\tUserName    string `json:\"userName\"`    // 管理员账号\n\tPassword    string `json:\"password\"`    // 管理员密码\n\tMemo        string `json:\"memo\"`        // 备注\n}\n"
  },
  {
    "path": "api/common/utils/huawei_cloud/signature.go",
    "content": "package huawei_cloud\n\nimport (\n\t\"crypto/hmac\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype IMessageResp struct {\n\tResultCode string\n\tResultMsg  string\n}\n\nconst (\n\tTIMESTAMP = \"timestamp\"\n\tNONCE     = \"nonce\"\n\tSIGNATURE = \"signature\"\n\tTIME_DIFF = 60 * time.Second\n)\n\nfunc VerifySignature(c *gin.Context, accessKey string) error {\n\t// 从请求中获取时间戳\n\ttimestamp := c.Query(\"timestamp\")\n\tif timestamp == \"\" {\n\t\treturn errors.New(\"缺少时间戳\")\n\t}\n\n\t// 获取请求体\n\tbody, err := c.GetRawData()\n\tif err != nil {\n\t\treturn errors.New(\"获取请求体失败\")\n\t}\n\n\t// 验证时间\n\tif !validateReqTime(timestamp) {\n\t\treturn errors.New(\"时间戳无效\")\n\t}\n\n\t// 获取随机字符串\n\tnonce := c.Query(\"nonce\")\n\tif nonce == \"\" {\n\t\treturn errors.New(\"缺少随机字符串\")\n\t}\n\n\t// 获取签名\n\tsignature := c.Query(\"signature\")\n\tif signature == \"\" {\n\t\treturn errors.New(\"缺少签名\")\n\t}\n\n\t// 生成签名并验证\n\tgeneratedSig := generateSignature(accessKey, body, timestamp, nonce)\n\tif !strings.EqualFold(signature, generatedSig) {\n\t\treturn errors.New(\"签名验证失败\")\n\t}\n\n\treturn nil\n}\n\nfunc generateSignature(accessKey string, body []byte, timestamp string, nonce string) string {\n\t// 计算请求体HMAC-SHA256哈希\n\tbodyHash := hmacSHA256(body, accessKey)\n\n\t// 构建规范请求字符串\n\tcanonicalRequest := fmt.Sprintf(\"%s%s%s%s\",\n\t\taccessKey, nonce, timestamp, strings.ToLower(hex.EncodeToString(bodyHash)))\n\n\t// 计算最终签名\n\tsignature := hmacSHA256([]byte(canonicalRequest), accessKey)\n\treturn strings.ToLower(hex.EncodeToString(signature))\n}\n\n// 辅助函数：计算HMAC-SHA256\nfunc hmacSHA256(data []byte, key string) []byte {\n\th := hmac.New(sha256.New, []byte(key))\n\th.Write(data)\n\treturn h.Sum(nil)\n}\n\nfunc validateReqTime(timestamp string) bool {\n\treqTime, err := strconv.ParseInt(timestamp, 10, 64)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\t// 华为云时间戳是毫秒级，转换为秒\n\treqTime = reqTime / 1000\n\tcurrentTime := time.Now().Unix()\n\n\t// 允许60秒的时间差\n\treturn math.Abs(float64(currentTime-reqTime)) <= 60\n}\n"
  },
  {
    "path": "api/common/utils/ip.go",
    "content": "package utils\n\nimport (\n\t\"strings\"\n\n\t\"github.com/gin-gonic/gin\"\n)\n\n// GetClientIP 获取请求客户端真实IP\n// 优先级：X-Real-Ip > X-Forwarded-For > RemoteAddr\nfunc GetClientIP(c *gin.Context) string {\n\t// 尝试从X-Real-Ip获取\n\tip := c.GetHeader(\"X-Real-Ip\")\n\tif ip != \"\" {\n\t\treturn ip\n\t}\n\n\t// 尝试从X-Forwarded-For获取（取第一个IP）\n\txForwardedFor := c.GetHeader(\"X-Forwarded-For\")\n\tif xForwardedFor != \"\" {\n\t\tips := strings.Split(xForwardedFor, \",\")\n\t\tif len(ips) > 0 {\n\t\t\tip = strings.TrimSpace(ips[0])\n\t\t\tif ip != \"\" {\n\t\t\t\treturn ip\n\t\t\t}\n\t\t}\n\t}\n\n\t// 尝试从X-Client-Ip获取（兼容部分代理）\n\tip = c.GetHeader(\"X-Client-Ip\")\n\tif ip != \"\" {\n\t\treturn ip\n\t}\n\n\t// 最后使用RemoteAddr（可能包含端口，需要解析）\n\tremoteAddr := c.Request.RemoteAddr\n\tif idx := strings.LastIndex(remoteAddr, \":\"); idx > 0 {\n\t\treturn remoteAddr[:idx]\n\t}\n\treturn remoteAddr\n}\n"
  },
  {
    "path": "api/common/utils/jwt/jwt.go",
    "content": "package jwt\n\nimport (\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/utils/env\"\n\t\"github.com/golang-jwt/jwt/v5\"\n)\n\nvar secretKey = []byte(env.String(\"JWT_SECRET\", \"secret\"))\n\nfunc UserGenerateJWT(userID int64, eid int64) (string, error) {\n\tclaims := jwt.MapClaims{\n\t\t\"user_id\": userID,\n\t\t\"eid\":     eid,\n\t\t\"exp\":     time.Now().Add(168 * time.Hour).Unix(),\n\t}\n\n\ttoken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)\n\treturn token.SignedString(secretKey)\n}\n\nfunc UserParseJWT(tokenString string) (int64, int64, error) {\n\ttoken, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {\n\t\treturn secretKey, nil\n\t})\n\n\tif claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {\n\t\t// 判断是否存在 eid，如果不存在则是 saas 用户 token，这里登录无效\n\t\tif _, ok := claims[\"eid\"]; !ok {\n\t\t\t// 返回无效 token 错误\n\t\t\treturn 0, 0, jwt.ErrTokenInvalidClaims\n\t\t}\n\t\treturn int64(claims[\"user_id\"].(float64)),\n\t\t\tint64(claims[\"eid\"].(float64)), nil\n\t}\n\treturn 0, 0, err\n}\n"
  },
  {
    "path": "api/common/utils/random.go",
    "content": "package utils\n\nimport (\n\t\"math/rand\"\n\t\"time\"\n)\n\nvar randomGenerator *rand.Rand\n\nfunc init() {\n\tsource := rand.NewSource(time.Now().UnixNano())\n\trandomGenerator = rand.New(source)\n}\n\nfunc GetRandomInt64(n int64) int64 {\n\tif n <= 0 {\n\t\treturn 0\n\t}\n\treturn randomGenerator.Int63n(n)\n}\n"
  },
  {
    "path": "api/common/utils/snowflake.go",
    "content": "package utils\n\nimport (\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n)\n\n// Snowflake ID generator\ntype Snowflake struct {\n\tmutex      sync.Mutex\n\ttimestamp  int64\n\tworkerId   int64\n\tsequence   int64\n\tstartEpoch int64\n}\n\n// NewSnowflake creates a new Snowflake ID generator\nfunc NewSnowflake(workerId int64) *Snowflake {\n\t// Use 2023-01-01 00:00:00 as start epoch\n\tstartEpoch := int64(1672531200000)\n\treturn &Snowflake{\n\t\ttimestamp:  0,\n\t\tworkerId:   workerId & 0x3FF, // 10-bit worker ID\n\t\tsequence:   0,\n\t\tstartEpoch: startEpoch,\n\t}\n}\n\n// NextId generates the next ID\nfunc (s *Snowflake) NextId() int64 {\n\ts.mutex.Lock()\n\tdefer s.mutex.Unlock()\n\n\tcurrentTimestamp := time.Now().UnixNano() / 1e6 // Timestamp in milliseconds\n\n\t// If current time is less than last timestamp, system clock has moved backwards\n\tif currentTimestamp < s.timestamp {\n\t\t// Simple handling: use the last timestamp\n\t\tcurrentTimestamp = s.timestamp\n\t}\n\n\t// If generating ID in same millisecond, increment sequence\n\tif currentTimestamp == s.timestamp {\n\t\ts.sequence = (s.sequence + 1) & 0xFFF // 12-bit sequence\n\t\t// Sequence overflow in same millisecond\n\t\tif s.sequence == 0 {\n\t\t\t// Block until next millisecond\n\t\t\tcurrentTimestamp = s.waitNextMillis(currentTimestamp)\n\t\t}\n\t} else {\n\t\t// Reset sequence for different timestamp\n\t\ts.sequence = 0\n\t}\n\n\t// Update last timestamp\n\ts.timestamp = currentTimestamp\n\n\t// Combine timestamp, worker ID and sequence to generate 64-bit ID\n\t// timestamp bits | worker ID bits | sequence bits\n\treturn ((currentTimestamp - s.startEpoch) << 22) | (s.workerId << 12) | s.sequence\n}\n\n// waitNextMillis blocks until next millisecond\nfunc (s *Snowflake) waitNextMillis(lastTimestamp int64) int64 {\n\ttimestamp := time.Now().UnixNano() / 1e6\n\tfor timestamp <= lastTimestamp {\n\t\ttimestamp = time.Now().UnixNano() / 1e6\n\t}\n\treturn timestamp\n}\n\n// Global Snowflake generator instance\nvar defaultSnowflake = NewSnowflake(1) // Using worker ID = 1\n\n// GenerateOrderId generates a unique order ID that complies with WeChat Pay requirements\n// Must be 6-32 characters, can only contain numbers, letters and specific symbols\nfunc GenerateOrderId() string {\n\t// Generate base ID using Snowflake algorithm\n\tsnowflakeId := defaultSnowflake.NextId()\n\n\t// Convert to base36 string (contains numbers and letters)\n\t// Base36: 0-9 and a-z\n\tbaseId := strconv.FormatInt(snowflakeId, 36)\n\n\t// Add prefix for better identification\n\tprefix := \"AH\"\n\n\t// Combine order ID\n\torderId := prefix + baseId\n\n\t// Ensure length is between 6-32\n\tif len(orderId) < 6 {\n\t\t// Add timestamp if too short\n\t\torderId = orderId + time.Now().Format(\"150405\")\n\t} else if len(orderId) > 32 {\n\t\t// Truncate if too long\n\t\torderId = orderId[:32]\n\t}\n\n\treturn orderId\n}\n"
  },
  {
    "path": "api/common/utils/system/machine.go",
    "content": "package system\n\nimport (\n\t\"bufio\"\n\t\"crypto/md5\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n)\n\nconst (\n\tEnvFilePath = \".env\"\n)\n\n// MachineInfo 机器信息结构\ntype MachineInfo struct {\n\tMachineCode string `json:\"machine_code\"`\n\tOS          string `json:\"os\"`\n\tArch        string `json:\"arch\"`\n\tHostname    string `json:\"hostname\"`\n\tVersion     string `json:\"version\"`\n}\n\n// GenerateMachineCode 生成唯一机器码\nfunc GenerateMachineCode() (string, error) {\n\t// 获取系统信息\n\thostname, _ := os.Hostname()\n\n\t// 获取网络接口MAC地址\n\tinterfaces, err := net.Interfaces()\n\tif err != nil {\n\t\tlogger.SysLogf(\"Failed to get network interfaces: %v\", err)\n\t\treturn \"\", err\n\t}\n\n\tvar macAddresses []string\n\tfor _, iface := range interfaces {\n\t\t// 跳过回环接口和虚拟接口\n\t\tif iface.Flags&net.FlagLoopback != 0 || iface.Flags&net.FlagUp == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tmac := iface.HardwareAddr.String()\n\t\tif mac != \"\" && mac != \"00:00:00:00:00:00\" {\n\t\t\tmacAddresses = append(macAddresses, mac)\n\t\t}\n\t}\n\n\t// 构建唯一标识字符串\n\tidentifier := fmt.Sprintf(\"%s-%s-%s-%s\",\n\t\thostname,\n\t\truntime.GOOS,\n\t\truntime.GOARCH,\n\t\tstrings.Join(macAddresses, \"-\"))\n\n\t// 生成MD5哈希作为机器码\n\thash := md5.New()\n\thash.Write([]byte(identifier))\n\tmachineCode := fmt.Sprintf(\"%x\", hash.Sum(nil))\n\n\tlogger.SysLogf(\"Generated machine code: %s\", machineCode)\n\treturn machineCode, nil\n}\n\n// GetMachineInfo 获取完整的机器信息\nfunc GetMachineInfo() (*MachineInfo, error) {\n\t// 从环境变量或生成新的机器码\n\tmachineCode, err := GetOrGenerateMachineCode()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\thostname, _ := os.Hostname()\n\tversion := GetVersion()\n\n\treturn &MachineInfo{\n\t\tMachineCode: machineCode,\n\t\tOS:          runtime.GOOS,\n\t\tArch:        runtime.GOARCH,\n\t\tHostname:    hostname,\n\t\tVersion:     version,\n\t}, nil\n}\n\n// GetOrGenerateMachineCode 获取或生成机器码\nfunc GetOrGenerateMachineCode() (string, error) {\n\t// 先尝试从环境变量中获取\n\texistingCode := os.Getenv(\"MACHINE_CODE\")\n\tif existingCode != \"\" {\n\t\tlogger.SysLogf(\"Using existing machine code from environment: %s\", existingCode)\n\t\treturn existingCode, nil\n\t}\n\n\t// 尝试从.env文件中读取\n\tenvMap, err := readEnvFile()\n\tif err != nil {\n\t\tlogger.SysLogf(\"Failed to read .env file: %v\", err)\n\t} else {\n\t\tif code, exists := envMap[\"MACHINE_CODE\"]; exists && code != \"\" {\n\t\t\tlogger.SysLogf(\"Using existing machine code from .env file: %s\", code)\n\t\t\treturn code, nil\n\t\t}\n\t}\n\n\t// 生成新的机器码\n\tmachineCode, err := GenerateMachineCode()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// 保存到.env文件\n\tif err := saveMachineCodeToEnv(machineCode); err != nil {\n\t\tlogger.SysLogf(\"Failed to save machine code to .env file: %v\", err)\n\t\t// 不返回错误，因为机器码已经生成成功\n\t}\n\n\treturn machineCode, nil\n}\n\n// GetVersion 获取版本信息\nfunc GetVersion() string {\n\t// 尝试从版本文件读取\n\tif content, err := os.ReadFile(\"bin/version.txt\"); err == nil {\n\t\tversion := strings.TrimSpace(string(content))\n\t\tif version != \"\" {\n\t\t\treturn version\n\t\t}\n\t}\n\n\t// 尝试从环境变量读取\n\tif version := os.Getenv(\"VERSION\"); version != \"\" {\n\t\treturn version\n\t}\n\n\t// 默认版本\n\treturn \"1.0.0\"\n}\n\n// readEnvFile 读取.env文件\nfunc readEnvFile() (map[string]string, error) {\n\tfile, err := os.Open(EnvFilePath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer file.Close()\n\n\tenvMap := make(map[string]string)\n\tscanner := bufio.NewScanner(file)\n\n\tfor scanner.Scan() {\n\t\tline := strings.TrimSpace(scanner.Text())\n\t\tif line == \"\" || strings.HasPrefix(line, \"#\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tparts := strings.SplitN(line, \"=\", 2)\n\t\tif len(parts) == 2 {\n\t\t\tkey := strings.TrimSpace(parts[0])\n\t\t\tvalue := strings.TrimSpace(parts[1])\n\t\t\t// 移除可能的引号\n\t\t\tvalue = strings.Trim(value, \"\\\"'\")\n\t\t\tenvMap[key] = value\n\t\t}\n\t}\n\n\treturn envMap, scanner.Err()\n}\n\n// writeEnvFile 写入.env文件\nfunc writeEnvFile(envMap map[string]string) error {\n\tfile, err := os.Create(EnvFilePath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\n\twriter := bufio.NewWriter(file)\n\tdefer writer.Flush()\n\n\tfor key, value := range envMap {\n\t\t_, err := writer.WriteString(fmt.Sprintf(\"%s=\\\"%s\\\"\\n\", key, value))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// saveMachineCodeToEnv 保存机器码到.env文件\nfunc saveMachineCodeToEnv(machineCode string) error {\n\tenvMap, err := readEnvFile()\n\tif err != nil {\n\t\t// 如果文件不存在，创建新的映射\n\t\tenvMap = make(map[string]string)\n\t}\n\n\t// 检查是否已存在\n\tif existingCode, exists := envMap[\"MACHINE_CODE\"]; exists && existingCode != \"\" {\n\t\tlogger.SysLogf(\"MACHINE_CODE already exists in .env file: %s, skipping update\", existingCode)\n\t\treturn nil\n\t}\n\n\t// 添加机器码\n\tenvMap[\"MACHINE_CODE\"] = machineCode\n\n\t// 写回文件\n\tif err := writeEnvFile(envMap); err != nil {\n\t\treturn fmt.Errorf(\"failed to write .env file: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"Successfully saved MACHINE_CODE=%s to %s\", machineCode, EnvFilePath)\n\treturn nil\n}\n\n// AppendToEnvFile 追加内容到.env文件（如果不存在的话）\nfunc AppendToEnvFile(key, value string) error {\n\tenvMap, err := readEnvFile()\n\tif err != nil {\n\t\tenvMap = make(map[string]string)\n\t}\n\n\t// 检查是否已存在\n\tif existingValue, exists := envMap[key]; exists && existingValue != \"\" {\n\t\tlogger.SysLogf(\"%s already exists in .env file: %s, skipping update\", key, existingValue)\n\t\treturn nil\n\t}\n\n\t// 添加新值\n\tenvMap[key] = value\n\n\t// 写回文件\n\tif err := writeEnvFile(envMap); err != nil {\n\t\treturn fmt.Errorf(\"failed to write .env file: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"Successfully saved %s=%s to %s\", key, value, EnvFilePath)\n\treturn nil\n}\n"
  },
  {
    "path": "api/common/utils/system/version.go",
    "content": "package system\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n)\n\nconst (\n\t// VersionCheckURL 版本检查URL\n\tVersionCheckURL = \"https://update.53ai.net/checkversion/53aihub/\"\n)\n\n// VersionCheckResponse 版本检查响应\ntype VersionCheckResponse struct {\n\tCurrentVersion string `json:\"current_version\"`\n\tLatestVersion  string `json:\"latest_version\"`\n\tHasUpdate      bool   `json:\"has_update\"`\n\tUpdateURL      string `json:\"update_url\"`\n\tReleaseNotes   string `json:\"release_notes\"`\n\tWebsiteId      string `json:\"websiteid\"`\n\tServerURL      string `json:\"serverurl\"`\n\tAction         string `json:\"action\"`\n}\n\n// CheckVersion 检查版本更新\nfunc CheckVersion() (*VersionCheckResponse, error) {\n\tlogger.SysLog(\"Checking for version updates...\")\n\n\t// 获取机器信息\n\tmachineInfo, err := GetMachineInfo()\n\tif err != nil {\n\t\tlogger.SysLogf(\"Failed to get machine info: %v\", err)\n\t\treturn nil, fmt.Errorf(\"获取机器信息失败: %v\", err)\n\t}\n\n\t// 准备请求数据\n\trequestData := map[string]interface{}{\n\t\t\"machine_code\": machineInfo.MachineCode,\n\t\t\"version\":      machineInfo.Version,\n\t\t\"os\":           machineInfo.OS,\n\t\t\"arch\":         machineInfo.Arch,\n\t\t\"hostname\":     machineInfo.Hostname,\n\t\t\"timestamp\":    time.Now().Unix(),\n\t\t\"action\":       \"install\",\n\t}\n\n\t// 序列化请求数据\n\tjsonData, err := json.Marshal(requestData)\n\tif err != nil {\n\t\tlogger.SysLogf(\"Failed to marshal request data: %v\", err)\n\t\treturn nil, fmt.Errorf(\"序列化请求数据失败: %v\", err)\n\t}\n\n\t// 创建 HTTP 客户端\n\tclient := &http.Client{\n\t\tTimeout: 10 * time.Second,\n\t}\n\n\t// 发送 POST 请求\n\tresp, err := client.Post(VersionCheckURL, \"application/json\", bytes.NewBuffer(jsonData))\n\tif err != nil {\n\t\tlogger.SysLogf(\"Failed to check version: %v\", err)\n\t\treturn nil, fmt.Errorf(\"无法连接到版本检查服务器: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tlogger.SysLogf(\"Version check failed with status %d: %s\", resp.StatusCode, string(body))\n\t\treturn nil, fmt.Errorf(\"版本检查失败，状态码: %d\", resp.StatusCode)\n\t}\n\n\tvar versionResp VersionCheckResponse\n\tif err := json.NewDecoder(resp.Body).Decode(&versionResp); err != nil {\n\t\tlogger.SysLogf(\"Failed to parse version response: %v\", err)\n\t\treturn nil, fmt.Errorf(\"解析版本响应失败: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"Version check completed. Current: %s, Latest: %s, HasUpdate: %v\",\n\t\tversionResp.CurrentVersion, versionResp.LatestVersion, versionResp.HasUpdate)\n\n\treturn &versionResp, nil\n}\n\n// CheckVersionAsync 异步检查版本更新\nfunc CheckVersionAndReturn() (*VersionCheckResponse, string, error) {\n\tif resp, err := CheckVersion(); err != nil {\n\t\tlogger.SysLogf(\"Async version check failed: %v\", err)\n\t\treturn resp, \"\", err\n\t} else {\n\t\tlogger.SysLog(\"Async version check completed.\")\n\t\tif resp.HasUpdate {\n\t\t\tlogger.SysLogf(\"New version: %s, URL: %s\", resp.LatestVersion, resp.UpdateURL)\n\t\t}\n\t\tif resp.ReleaseNotes != \"\" {\n\t\t\tlogger.SysLogf(\"Release Notes:\\n%s\", resp.ReleaseNotes)\n\t\t}\n\t\tif resp.Action == \"install\" {\n\t\t\tlogger.SysLog(\"开始执行站点配置流程...\")\n\n\t\t\t// 1. 检查 .env 文件中是否已有 WEBSITE_ID\n\t\t\texistingID, exists, err := checkWebsiteIdExists()\n\t\t\tif err != nil {\n\t\t\t\tlogger.SysErrorf(\"检查 WEBSITE_ID 失败: %v\", err)\n\t\t\t}\n\t\t\tif exists {\n\t\t\t\tlogger.SysLogf(\"检测到已配置的 WEBSITE_ID: %s，跳过创建流程\", existingID)\n\t\t\t} else {\n\t\t\t\taddWebsiteIdToEnv(resp.WebsiteId)\n\t\t\t\t// 生成统计脚本\n\t\t\t\tstatisticScript := fmt.Sprintf(`<script src=\"%s/script.js\" data-website-id=\"%s\"></script>`, resp.ServerURL, resp.WebsiteId)\n\t\t\t\tlogger.SysLogf(\"Successfully generated and saved statistic script\")\n\t\t\t\treturn resp, statisticScript, nil\n\t\t\t}\n\n\t\t}\n\t\treturn resp, \"\", nil\n\t}\n}\n\n// checkWebsiteIdExists 检查 .env 文件中是否已有 WEBSITE_ID\nfunc checkWebsiteIdExists() (string, bool, error) {\n\tenvMap, err := readEnvFile()\n\tif err != nil {\n\t\treturn \"\", false, err\n\t}\n\tid, exists := envMap[\"WEBSITE_ID\"]\n\treturn id, exists && id != \"\", nil\n}\n\n// addWebsiteIdToEnv 添加 WEBSITE_ID 到 .env 文件\nfunc addWebsiteIdToEnv(websiteId string) error {\n\tenvMap, err := readEnvFile()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"读取 .env 文件失败: %v\", err)\n\t}\n\n\t// 检查是否已存在\n\tif existingID, exists := envMap[\"WEBSITE_ID\"]; exists && existingID != \"\" {\n\t\tlogger.SysLogf(\"WEBSITE_ID 已存在: %s，跳过添加\", existingID)\n\t\treturn nil\n\t}\n\n\t// 添加新的 WEBSITE_ID\n\tenvMap[\"WEBSITE_ID\"] = websiteId\n\n\t// 写回文件\n\tif err := writeEnvFile(envMap); err != nil {\n\t\treturn fmt.Errorf(\"写入 .env 文件失败: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"成功将 WEBSITE_ID=%s 添加到 %s\", websiteId, EnvFilePath)\n\treturn nil\n}\n"
  },
  {
    "path": "api/common/utils/wxbizjsonmsgcrypt/wxbizjsonmsgcrypt.go",
    "content": "package wxbizmsgcrypt\n\nimport (\n\t\"bytes\"\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"crypto/sha1\"\n\t\"encoding/base64\"\n\t\"encoding/binary\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"sort\"\n\t\"strings\"\n)\n\nconst letterBytes = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\nconst (\n\tValidateSignatureError int = -40001\n\tParseXmlError          int = -40002\n\tComputeSignatureError  int = -40003\n\tIllegalAesKey          int = -40004\n\tValidateCorpidError    int = -40005\n\tEncryptAESError        int = -40006\n\tDecryptAESError        int = -40007\n\tIllegalBuffer          int = -40008\n\tEncodeBase64Error      int = -40009\n\tDecodeBase64Error      int = -40010\n\tGenXmlError            int = -40010\n\tParseJsonError         int = -40012\n\tGenJsonError           int = -40013\n\tIllegalProtocolType    int = -40014\n)\n\ntype ProtocolType int\n\nconst (\n\tXmlType ProtocolType = 1\n)\n\ntype CryptError struct {\n\tErrCode int\n\tErrMsg  string\n}\n\nfunc NewCryptError(err_code int, err_msg string) *CryptError {\n\treturn &CryptError{ErrCode: err_code, ErrMsg: err_msg}\n}\n\ntype WXBizMsg4Recv struct {\n\tTousername string `xml:\"ToUserName\"`\n\tEncrypt    string `xml:\"Encrypt\"`\n\tAgentid    string `xml:\"AgentID\"`\n}\n\ntype CDATA struct {\n\tValue string `xml:\",cdata\"`\n}\n\ntype WXBizMsg4Send struct {\n\tXMLName   xml.Name `xml:\"xml\"`\n\tEncrypt   CDATA    `xml:\"Encrypt\"`\n\tSignature CDATA    `xml:\"MsgSignature\"`\n\tTimestamp string   `xml:\"TimeStamp\"`\n\tNonce     CDATA    `xml:\"Nonce\"`\n}\n\nfunc NewWXBizMsg4Send(encrypt, signature, timestamp, nonce string) *WXBizMsg4Send {\n\treturn &WXBizMsg4Send{Encrypt: CDATA{Value: encrypt}, Signature: CDATA{Value: signature}, Timestamp: timestamp, Nonce: CDATA{Value: nonce}}\n}\n\ntype ProtocolProcessor interface {\n\tparse(src_data []byte) (*WXBizMsg4Recv, *CryptError)\n\tserialize(msg_send *WXBizMsg4Send) ([]byte, *CryptError)\n}\n\ntype WXBizMsgCrypt struct {\n\ttoken              string\n\tencoding_aeskey    string\n\treceiver_id        string\n\tprotocol_processor ProtocolProcessor\n}\n\ntype XmlProcessor struct {\n}\n\nfunc (self *XmlProcessor) parse(src_data []byte) (*WXBizMsg4Recv, *CryptError) {\n\tvar msg4_recv WXBizMsg4Recv\n\terr := xml.Unmarshal(src_data, &msg4_recv)\n\tif nil != err {\n\t\treturn nil, NewCryptError(ParseXmlError, \"xml to msg fail\")\n\t}\n\treturn &msg4_recv, nil\n}\n\nfunc (self *XmlProcessor) serialize(msg4_send *WXBizMsg4Send) ([]byte, *CryptError) {\n\txml_msg, err := xml.Marshal(msg4_send)\n\tif nil != err {\n\t\treturn nil, NewCryptError(GenXmlError, err.Error())\n\t}\n\treturn xml_msg, nil\n}\n\nfunc NewWXBizMsgCrypt(token, encoding_aeskey, receiver_id string, protocol_type ProtocolType) *WXBizMsgCrypt {\n\tvar protocol_processor ProtocolProcessor\n\tif protocol_type != XmlType {\n\t\tpanic(\"unsupport protocal\")\n\t} else {\n\t\tprotocol_processor = new(XmlProcessor)\n\t}\n\n\treturn &WXBizMsgCrypt{token: token, encoding_aeskey: (encoding_aeskey + \"=\"), receiver_id: receiver_id, protocol_processor: protocol_processor}\n}\n\nfunc (self *WXBizMsgCrypt) randString(n int) string {\n\tb := make([]byte, n)\n\tfor i := range b {\n\t\tb[i] = letterBytes[rand.Int63()%int64(len(letterBytes))]\n\t}\n\treturn string(b)\n}\n\nfunc (self *WXBizMsgCrypt) pKCS7Padding(plaintext string, block_size int) []byte {\n\tpadding := block_size - (len(plaintext) % block_size)\n\tpadtext := bytes.Repeat([]byte{byte(padding)}, padding)\n\tvar buffer bytes.Buffer\n\tbuffer.WriteString(plaintext)\n\tbuffer.Write(padtext)\n\treturn buffer.Bytes()\n}\n\nfunc (self *WXBizMsgCrypt) pKCS7Unpadding(plaintext []byte, block_size int) ([]byte, *CryptError) {\n\tplaintext_len := len(plaintext)\n\tif nil == plaintext || plaintext_len == 0 {\n\t\treturn nil, NewCryptError(DecryptAESError, \"pKCS7Unpadding error nil or zero\")\n\t}\n\tif plaintext_len%block_size != 0 {\n\t\treturn nil, NewCryptError(DecryptAESError, \"pKCS7Unpadding text not a multiple of the block size\")\n\t}\n\tpadding_len := int(plaintext[plaintext_len-1])\n\treturn plaintext[:plaintext_len-padding_len], nil\n}\n\nfunc (self *WXBizMsgCrypt) cbcEncrypter(plaintext string) ([]byte, *CryptError) {\n\taeskey, err := base64.StdEncoding.DecodeString(self.encoding_aeskey)\n\tif nil != err {\n\t\treturn nil, NewCryptError(DecodeBase64Error, err.Error())\n\t}\n\tconst block_size = 32\n\tpad_msg := self.pKCS7Padding(plaintext, block_size)\n\n\tblock, err := aes.NewCipher(aeskey)\n\tif err != nil {\n\t\treturn nil, NewCryptError(EncryptAESError, err.Error())\n\t}\n\n\tciphertext := make([]byte, len(pad_msg))\n\tiv := aeskey[:aes.BlockSize]\n\n\tmode := cipher.NewCBCEncrypter(block, iv)\n\n\tmode.CryptBlocks(ciphertext, pad_msg)\n\tbase64_msg := make([]byte, base64.StdEncoding.EncodedLen(len(ciphertext)))\n\tbase64.StdEncoding.Encode(base64_msg, ciphertext)\n\n\treturn base64_msg, nil\n}\n\nfunc (self *WXBizMsgCrypt) cbcDecrypter(base64_encrypt_msg string) ([]byte, *CryptError) {\n\taeskey, err := base64.StdEncoding.DecodeString(self.encoding_aeskey)\n\tif nil != err {\n\t\treturn nil, NewCryptError(DecodeBase64Error, err.Error())\n\t}\n\n\tencrypt_msg, err := base64.StdEncoding.DecodeString(base64_encrypt_msg)\n\tif nil != err {\n\t\treturn nil, NewCryptError(DecodeBase64Error, err.Error())\n\t}\n\n\tblock, err := aes.NewCipher(aeskey)\n\tif err != nil {\n\t\treturn nil, NewCryptError(DecryptAESError, err.Error())\n\t}\n\n\tif len(encrypt_msg) < aes.BlockSize {\n\t\treturn nil, NewCryptError(DecryptAESError, \"encrypt_msg size is not valid\")\n\t}\n\n\tiv := aeskey[:aes.BlockSize]\n\n\tif len(encrypt_msg)%aes.BlockSize != 0 {\n\t\treturn nil, NewCryptError(DecryptAESError, \"encrypt_msg not a multiple of the block size\")\n\t}\n\n\tmode := cipher.NewCBCDecrypter(block, iv)\n\n\tmode.CryptBlocks(encrypt_msg, encrypt_msg)\n\n\treturn encrypt_msg, nil\n}\n\nfunc (self *WXBizMsgCrypt) calSignature(timestamp, nonce, data string) string {\n\tsort_arr := []string{self.token, timestamp, nonce, data}\n\tsort.Strings(sort_arr)\n\tvar buffer bytes.Buffer\n\tfor _, value := range sort_arr {\n\t\tbuffer.WriteString(value)\n\t}\n\n\tsha := sha1.New()\n\tsha.Write(buffer.Bytes())\n\tsignature := fmt.Sprintf(\"%x\", sha.Sum(nil))\n\treturn string(signature)\n}\n\nfunc (self *WXBizMsgCrypt) ParsePlainText(plaintext []byte) ([]byte, uint32, []byte, []byte, *CryptError) {\n\tconst block_size = 32\n\tplaintext, err := self.pKCS7Unpadding(plaintext, block_size)\n\tif nil != err {\n\t\treturn nil, 0, nil, nil, err\n\t}\n\n\ttext_len := uint32(len(plaintext))\n\tif text_len < 20 {\n\t\treturn nil, 0, nil, nil, NewCryptError(IllegalBuffer, \"plain is to small 1\")\n\t}\n\trandom := plaintext[:16]\n\tmsg_len := binary.BigEndian.Uint32(plaintext[16:20])\n\tif text_len < (20 + msg_len) {\n\t\treturn nil, 0, nil, nil, NewCryptError(IllegalBuffer, \"plain is to small 2\")\n\t}\n\n\tmsg := plaintext[20 : 20+msg_len]\n\treceiver_id := plaintext[20+msg_len:]\n\n\treturn random, msg_len, msg, receiver_id, nil\n}\n\nfunc (self *WXBizMsgCrypt) VerifyURL(msg_signature, timestamp, nonce, echostr string) ([]byte, *CryptError) {\n\tsignature := self.calSignature(timestamp, nonce, echostr)\n\n\tif strings.Compare(signature, msg_signature) != 0 {\n\t\treturn nil, NewCryptError(ValidateSignatureError, \"signature not equal\")\n\t}\n\n\tplaintext, err := self.cbcDecrypter(echostr)\n\tif nil != err {\n\t\treturn nil, err\n\t}\n\n\t_, _, msg, receiver_id, err := self.ParsePlainText(plaintext)\n\tif nil != err {\n\t\treturn nil, err\n\t}\n\n\tif len(self.receiver_id) > 0 && strings.Compare(string(receiver_id), self.receiver_id) != 0 {\n\t\tfmt.Println(string(receiver_id), self.receiver_id, len(receiver_id), len(self.receiver_id))\n\t\treturn nil, NewCryptError(ValidateCorpidError, \"receiver_id is not equil\")\n\t}\n\n\treturn msg, nil\n}\n\nfunc (self *WXBizMsgCrypt) EncryptMsg(reply_msg, timestamp, nonce string) ([]byte, *CryptError) {\n\trand_str := self.randString(16)\n\tvar buffer bytes.Buffer\n\tbuffer.WriteString(rand_str)\n\n\tmsg_len_buf := make([]byte, 4)\n\tbinary.BigEndian.PutUint32(msg_len_buf, uint32(len(reply_msg)))\n\tbuffer.Write(msg_len_buf)\n\tbuffer.WriteString(reply_msg)\n\tbuffer.WriteString(self.receiver_id)\n\n\ttmp_ciphertext, err := self.cbcEncrypter(buffer.String())\n\tif nil != err {\n\t\treturn nil, err\n\t}\n\tciphertext := string(tmp_ciphertext)\n\n\tsignature := self.calSignature(timestamp, nonce, ciphertext)\n\n\tmsg4_send := NewWXBizMsg4Send(ciphertext, signature, timestamp, nonce)\n\treturn self.protocol_processor.serialize(msg4_send)\n}\n\nfunc (self *WXBizMsgCrypt) DecryptMsg(msg_signature, timestamp, nonce string, post_data []byte) ([]byte, *CryptError) {\n\tmsg4_recv, crypt_err := self.protocol_processor.parse(post_data)\n\tif nil != crypt_err {\n\t\treturn nil, crypt_err\n\t}\n\n\tsignature := self.calSignature(timestamp, nonce, msg4_recv.Encrypt)\n\n\tif strings.Compare(signature, msg_signature) != 0 {\n\t\treturn nil, NewCryptError(ValidateSignatureError, \"signature not equal\")\n\t}\n\n\tplaintext, crypt_err := self.cbcDecrypter(msg4_recv.Encrypt)\n\tif nil != crypt_err {\n\t\treturn nil, crypt_err\n\t}\n\n\t_, _, msg, receiver_id, crypt_err := self.ParsePlainText(plaintext)\n\tif nil != crypt_err {\n\t\treturn nil, crypt_err\n\t}\n\n\tif len(self.receiver_id) > 0 && strings.Compare(string(receiver_id), self.receiver_id) != 0 {\n\t\treturn nil, NewCryptError(ValidateCorpidError, \"receiver_id is not equil\")\n\t}\n\n\treturn msg, nil\n}\n"
  },
  {
    "path": "api/common/validate.go",
    "content": "package common\n\nimport \"github.com/go-playground/validator/v10\"\n\nvar Validate *validator.Validate\n\nfunc init() {\n\tValidate = validator.New()\n}\n"
  },
  {
    "path": "api/config/config.go",
    "content": "package config\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/session\"\n\t\"github.com/53AI/53AIHub/common/utils/env\"\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nvar Version = env.String(\"HUB_VERSION\", \"v0.1.0\")\n\n// build time make file\n// go build -ldflags \"-X 'config.VersionTime=$(date +%Y%m%d%H%M)'\"\nvar VersionTime string\nvar Server = env.String(\"HUB_SERVER\", \"\")\nvar LogDir = env.String(\"LOG_DIR\", \"\")\nvar DebugEnabled = env.Bool(\"DEBUG\", false)\nvar OnlyOneLogFile = env.Bool(\"ONLY_ONE_LOG_FILE\", false)\nvar StartTime = time.Now().Format(\"2006-01-02 15:04:05\")\nvar IS_SAAS = env.Bool(\"IS_SAAS\", false)\nvar ApiHost = env.String(\"API_HOST\", \"\")\nvar MigrateDBEnabled = env.Bool(\"MIGRATE_DB_ENABLED\", true)\n\nvar REDIS_CONN = env.String(\"REDIS_CONN\", \"\")\nvar MAX_UPLOAD_FILE_SIZE_STRING = env.String(\"MAX_UPLOAD_FILE_SIZE\", \"30MB\")\nvar MAX_UPLOAD_FILE_SIZE, _ = helper.ParseSize(MAX_UPLOAD_FILE_SIZE_STRING)\n\nvar CHANNEL_RETRY_TIMES = env.Int64(\"CHANNEL_RETRY_TIMES\", 3)\nvar EnforceIncludeUsage = env.Bool(\"ENFORCE_INCLUDE_USAGE\", false)\n\nvar PreConsumedQuota int64 = 500\nvar WECOM_SUITE_ID = env.String(\"WECOM_SUITE_ID\", \"\")\nvar IS_TEST_WECOM_SUITE = env.Bool(\"IS_TEST_WECOM_SUITE\", false)\nvar HUAWEI_CLOUD_ACCESS_KEY = env.String(\"HUAWEI_CLOUD_ACCESS_KEY\", \"\")\nvar DINGTALK_SUITE_ID = env.String(\"DINGTALK_SUITE_ID\", \"\")\n\nfunc GetApiHost() string {\n\tif !strings.HasSuffix(ApiHost, \"/\") {\n\t\treturn ApiHost + \"/\"\n\t}\n\treturn ApiHost\n}\n\nfunc GetEID(c *gin.Context) int64 {\n\teid, success := c.Get(session.ENV_EID)\n\tif success && eid != nil {\n\t\treturn eid.(int64)\n\t} else {\n\t\treturn env.Int64(\"EID\", 1)\n\t}\n}\n\nfunc GetUserId(c *gin.Context) int64 {\n\tuser_id, success := c.Get(session.SESSION_USER_ID)\n\tif success && user_id != nil {\n\t\treturn user_id.(int64)\n\t}\n\treturn 0\n}\n\nfunc GetUserNickname(c *gin.Context) string {\n\tnickanme, success := c.Get(session.SESSION_USER_NICKNAME)\n\tif success && nickanme != nil {\n\t\treturn nickanme.(string)\n\t}\n\treturn \"\"\n}\n\n// GetUserGroup returns the group id of the user\nfunc GetUserGroupID(c *gin.Context) int64 {\n\tgroup_id, success := c.Get(session.SESSION_USER_GROUP_ID)\n\tif success && group_id != nil {\n\t\treturn group_id.(int64)\n\t}\n\treturn 0\n}\n\n// GetProtocol returns the request protocol from session\nfunc GetProtocol(c *gin.Context) string {\n\tprotocol, success := c.Get(session.SESSION_REQUEST_PROTOCOL)\n\tif success && protocol != nil {\n\t\treturn protocol.(string)\n\t}\n\treturn \"http\"\n}\n\n// GetDomain returns the request domain from session\nfunc GetDomain(c *gin.Context) string {\n\tdomain, success := c.Get(session.SESSION_REQUEST_DOMAIN)\n\tif success && domain != nil {\n\t\treturn domain.(string)\n\t}\n\treturn \"\"\n}\n\nfunc GetServer(c *gin.Context) string {\n\treturn Server\n}\n\nfunc Getwd() string {\n\tworkDir, err := os.Getwd()\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\treturn workDir\n}\n\nfunc GetBinScriptPath(shName string) string {\n\tworkDir := Getwd()\n\tbase := filepath.Base(workDir)\n\tif base == \"bin\" {\n\t\treturn filepath.Join(workDir, shName)\n\t} else {\n\t\treturn filepath.Join(workDir, \"bin\", shName)\n\t}\n}\n\nfunc GetWecomSuiteID() string {\n\treturn WECOM_SUITE_ID\n}\n\nfunc GetDingtalkSuiteID() string {\n\treturn DINGTALK_SUITE_ID\n}\n\nfunc GetUserRole(c *gin.Context) int64 {\n\trole, success := c.Get(session.SESSION_USER_ROLE)\n\tif success && role != nil {\n\t\treturn role.(int64)\n\t}\n\treturn 0 // 默认返回 0，表示无权限或未登录\n}\n"
  },
  {
    "path": "api/config/database.go",
    "content": "package config\n\nimport \"github.com/53AI/53AIHub/common/utils/env\"\n\nvar UsingSQLite = false\nvar UsingPostgreSQL = false\nvar UsingMySQL = false\nvar DebugSQLEnabled = env.Bool(\"DEBUG_SQL\", false)\n\nvar SQLitePath = \"53ai-hub.db\"\nvar SQLiteBusyTimeout = env.Int(\"SQLITE_BUSY_TIMEOUT\", 3000)\n"
  },
  {
    "path": "api/config/encryption.go",
    "content": "package config\n\nimport (\n\t\"os\"\n)\n\n// GetEncryptionKey returns the encryption key for sensitive data\nfunc GetEncryptionKey() string {\n\t// In production, this should be a secure key stored in environment variables\n\t// or a secure key management system\n\tkey := os.Getenv(\"53AIHub_ENCRYPTION_KEY\")\n\tif key == \"\" {\n\t\t// Fallback to a default key (not recommended for production)\n\t\tkey = \"default-encryption-key-32-bytes-long\"\n\t}\n\treturn key\n}\n"
  },
  {
    "path": "api/config/storage.go",
    "content": "package config\n\nimport \"github.com/53AI/53AIHub/common/utils/env\"\n\nvar StorageType = env.String(\"STORAGE\", \"local\")\nvar StorageBasePath = env.String(\"BASE_PATH\", \"static/uploads\")\nvar AliyunOssAccessKeyID = env.String(\"ALIYUN_OSS_ACCESS_KEY_ID\", \"\")\nvar AliyunOssAccessKeySecret = env.String(\"ALIYUN_OSS_ACCESS_KEY_SECRET\", \"\")\nvar AliyunOssEndpoint = env.String(\"ALIYUN_OSS_ENDPOINT\", \"\")\nvar AliyunOssBucketName = env.String(\"ALIYUN_OSS_BUCKET_NAME\", \"\")\n"
  },
  {
    "path": "api/controller/agent.go",
    "content": "package controller\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common\"\n\t\"github.com/53AI/53AIHub/common/utils\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype AgentListRequest struct {\n\tKeyword      string `json:\"keyword\" form:\"keyword\" example:\"Json\"`\n\tGroupId      int64  `json:\"group_id\" form:\"group_id\" example:\"0\"`\n\tOffset       int    `json:\"offset\" form:\"offset\" example:\"0\"`\n\tLimit        int    `json:\"limit\" form:\"limit\" example:\"10\"`\n\tChannelTypes string `json:\"channel_types\" form:\"channel_types\" example:\"0,1,2\"`\n\tAgentTypes   string `json:\"agent_types\" form:\"agent_types\" example:\"0,1,2\"`\n}\n\ntype AgentsResponse struct {\n\tCount  int64          `json:\"count\"`\n\tAgents []*model.Agent `json:\"agents\"`\n}\n\ntype AgentRequest struct {\n\tName                 string  `json:\"name\" example:\"OpenAI-ChatGPT\"`\n\tLogo                 string  `json:\"logo\" example:\"http://URL_ADDRESS.com/logo.png\"`\n\tSort                 int     `json:\"sort\" example:\"0\"`\n\tDescription          string  `json:\"description\" example:\"A ChatGPT based agent for general conversation\"`\n\tConfigs              string  `json:\"configs\" example:\"{\\\"model\\\":\\\"gpt-3.5-turbo\\\",\\\"temperature\\\":0.7}\"`\n\tPrompt               string  `json:\"prompt\" example:\"You are a helpful AI assistant\"`\n\tChannelType          int     `json:\"channel_type\"`\n\tModel                string  `json:\"model\" example:\"gpt-3.5-turbo\"`\n\tGroupId              int64   `json:\"group_id\" example:\"0\"`\n\tUseCases             string  `json:\"use_cases\" example:\"[]\"`\n\tTools                string  `json:\"tools\"  example:\"[]\"`\n\tCustomConfig         string  `json:\"custom_config\" example:\"{}\"`\n\tUserGroupIds         []int64 `json:\"user_group_ids\"`\n\tEnable               bool    `json:\"enable\" example:\"true\"`\n\tSubscriptionGroupIds []int64 `json:\"subscription_group_ids\"` // 订阅分组IDs\n\tSettings             string  `json:\"settings\" example:\"{}\"`\n\tAgentType            int     `json:\"agent_type\" example:\"0\"` // Agent type (0=App, 1=Workflow), default is 0\n}\n\ntype UpdateAgentEnableRequest struct {\n\tEnable *bool `json:\"enable\" example:\"true\" binding:\"required\"` // Enable status (true=enabled, false=disabled)\n}\n\n// @Summary Create a new agent\n// @Description Create agent with configurable parameters. agent_type: 0=App (default), 1=Workflow\n// @Tags Agent\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param Agent body AgentRequest true \"Agent Data\"\n// @Success 200 {object} model.CommonResponse{data=model.Agent} \"Success\"\n// @Router /api/agents [post]\nfunc CreateAgent(c *gin.Context) {\n\tvar agentReq AgentRequest\n\tif err := c.ShouldBindJSON(&agentReq); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\t// Check if user is admin\n\tif !common.IsAdmin(c) {\n\t\tc.JSON(http.StatusForbidden, model.AuthFailed.ToResponse(nil))\n\t\treturn\n\t}\n\n\tagentReq.Model = model.ProcessModelNames(agentReq.Model, agentReq.ChannelType)\n\tif agentReq.Model == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(errors.New(\"model is required\")))\n\t\treturn\n\t}\n\n\tparams := map[string]interface{}{\n\t\t\"from\": \"agent\",\n\t}\n\t_, err := service.IsFeatureAvailable(c, \"agent\", params)\n\tif err != nil {\n\t\tc.JSON(http.StatusForbidden, model.FeatureNotAvailableError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Start transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tagent := model.Agent{\n\t\tEid:          config.GetEID(c),\n\t\tName:         agentReq.Name,\n\t\tLogo:         agentReq.Logo,\n\t\tChannelType:  agentReq.ChannelType,\n\t\tSort:         agentReq.Sort,\n\t\tDescription:  agentReq.Description,\n\t\tModel:        agentReq.Model,\n\t\tPrompt:       agentReq.Prompt,\n\t\tConfigs:      agentReq.Configs,\n\t\tTools:        agentReq.Tools,\n\t\tCustomConfig: agentReq.CustomConfig,\n\t\tGroupID:      agentReq.GroupId,\n\t\tUseCases:     agentReq.UseCases,\n\t\tCreatedBy:    config.GetUserId(c),\n\t\tEnable:       agentReq.Enable,\n\t\tSettings:     agentReq.Settings,\n\t\tAgentType:    agentReq.AgentType, // 添加 AgentType 字段，默认为 0\n\t}\n\n\tif err := tx.Create(&agent).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tallGroupIds := make([]int64, 0)\n\n\tif len(agentReq.SubscriptionGroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, agentReq.SubscriptionGroupIds...)\n\t}\n\n\tif len(agentReq.UserGroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, agentReq.UserGroupIds...)\n\t}\n\n\t// Add permissions for user groups\n\tif len(allGroupIds) > 0 {\n\t\tfor _, groupID := range allGroupIds {\n\t\t\tpermission := model.ResourcePermission{\n\t\t\t\tGroupID:      groupID,\n\t\t\t\tResourceID:   agent.AgentID,\n\t\t\t\tResourceType: model.ResourceTypeAgent,\n\t\t\t\tPermission:   model.PermissionRead,\n\t\t\t}\n\t\t\tif err := tx.Create(&permission).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Parse CustomConfig to get agent_type\n\tvar customConfig map[string]interface{}\n\tif err := json.Unmarshal([]byte(agentReq.CustomConfig), &customConfig); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\tagentType, ok := customConfig[\"agent_type\"].(string)\n\tif !ok {\n\t\tagentType = \"unknown\"\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      agent.Eid,\n\t\tUserID:   agent.CreatedBy,\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleAgent,\n\t\tAction:   model.SystemLogActionCreate,\n\t\tContent:  fmt.Sprintf(\"新建智能体【】名称：【%s】；类型：%s\", agent.Name, model.GetChannelDescription(agentType)),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(agent))\n}\n\n// @Summary Get agent details\n// @Description Get agent by AgentID\n// @Tags Agent\n// @Produce json\n// @Security BearerAuth\n// @Param agent_id path int true \"Agent ID\"\n// @Success 200 {object} model.CommonResponse{data=model.Agent} \"Success\"\n// @Router /api/agents/{agent_id} [get]\nfunc GetAgent(c *gin.Context) {\n\tagent_id, err := strconv.ParseInt(c.Param(\"agent_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\teid := config.GetEID(c)\n\tagent, err := model.GetAgentByID(eid, agent_id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Check if user is admin or has permission to access this agent\n\tif !common.IsAdmin(c) {\n\t\thasPermission, err := model.CheckPermission(config.GetUserGroupID(c), agent_id, model.ResourceTypeAgent, model.PermissionRead)\n\t\tif err != nil || !hasPermission {\n\t\t\tc.JSON(http.StatusForbidden, model.AuthFailed.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t}\n\n\tif err := agent.LoadUserGroupIds(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(agent))\n}\n\n// @Summary Update agent\n// @Description Update existing agent details. agent_type: 0=App (default), 1=Workflow\n// @Tags Agent\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param agent_id path int true \"Agent ID\"\n// @Param agent body AgentRequest true \"Agent data\" example:{\"name\":\"OpenAI-ChatGPT\",\"description\":\"ChatGPT\",\"configs\":\"{\\\"model\\\":\\\"gpt-3.5-turbo\\\",\\\"temperature\\\":0.7}\",\"prompt\":\"你好\",\"model\":\"gpt-3.5-turbo\",\"group_id\":0,\"use_cases\":\"[]\",\"tools\":\"[]\",\"user_group_ids\":[1,2,3],\"agent_type\":0}\n// @Success 200 {object} model.CommonResponse{data=model.Agent} \"Success\"\n// @Router /api/agents/{agent_id} [put]\nfunc UpdateAgent(c *gin.Context) {\n\tagent_id, err := strconv.ParseInt(c.Param(\"agent_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\teid := config.GetEID(c)\n\tagent, err := model.GetAgentByID(eid, agent_id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Check if user is admin\n\tif !common.IsAdmin(c) {\n\t\tc.JSON(http.StatusForbidden, model.AuthFailed.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar agentReq AgentRequest\n\tif err := c.ShouldBindJSON(&agentReq); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tagentReq.Model = model.ProcessModelNames(agentReq.Model, agentReq.ChannelType)\n\tif agentReq.Model == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(errors.New(\"model is required\")))\n\t\treturn\n\t}\n\n\t// Start transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\toldAgent := *agent\n\n\t// Update agent fields\n\tagent.Name = agentReq.Name\n\tagent.Description = agentReq.Description\n\tagent.Model = agentReq.Model\n\tagent.Prompt = agentReq.Prompt\n\tagent.Configs = agentReq.Configs\n\tagent.Tools = agentReq.Tools\n\tagent.GroupID = agentReq.GroupId\n\tagent.UseCases = agentReq.UseCases\n\tagent.ChannelType = agentReq.ChannelType\n\tagent.Sort = agentReq.Sort\n\tagent.Logo = agentReq.Logo\n\tagent.CustomConfig = agentReq.CustomConfig\n\tagent.Enable = agentReq.Enable\n\tagent.Settings = agentReq.Settings\n\tagent.AgentType = agentReq.AgentType // 添加 AgentType 字段更新\n\n\tif err := tx.Save(agent).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 获取企业信息\n\tenterprise, err := model.GetEnterpriseByID(eid)\n\tif err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 确定分组ID\n\tvar allGroupIds []int64\n\tgroupIDSet := make(map[int64]bool)\n\n\tswitch enterprise.Type {\n\tcase model.EnterpriseTypeIndustry:\n\t\t// 取所有分组ID\n\t\tif len(agentReq.SubscriptionGroupIds) > 0 {\n\t\t\tfor _, id := range agentReq.SubscriptionGroupIds {\n\t\t\t\tgroupIDSet[id] = true\n\t\t\t}\n\t\t}\n\t\tif len(agentReq.UserGroupIds) > 0 {\n\t\t\tfor _, id := range agentReq.UserGroupIds {\n\t\t\t\tgroupIDSet[id] = true\n\t\t\t}\n\t\t}\n\tcase model.EnterpriseTypeIndependent:\n\t\t// 只取订阅分组ID\n\t\tif len(agentReq.SubscriptionGroupIds) > 0 {\n\t\t\tfor _, id := range agentReq.SubscriptionGroupIds {\n\t\t\t\tgroupIDSet[id] = true\n\t\t\t}\n\t\t}\n\tcase model.EnterpriseTypeEnterprise:\n\t\t// 只取用户分组ID\n\t\tif len(agentReq.UserGroupIds) > 0 {\n\t\t\tfor _, id := range agentReq.UserGroupIds {\n\t\t\t\tgroupIDSet[id] = true\n\t\t\t}\n\t\t}\n\t}\n\n\t// 转换为切片\n\tallGroupIds = make([]int64, 0, len(groupIDSet))\n\tfor id := range groupIDSet {\n\t\tallGroupIds = append(allGroupIds, id)\n\t}\n\n\t// 使用通用方法更新资源权限（带过滤）\n\tif err := service.UpdateAgentResourcePermissions(c, tx, agent.AgentID, agentReq.SubscriptionGroupIds, agentReq.UserGroupIds, enterprise); err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Prepare for logging\n\tfieldMap := map[string]string{\n\t\t\"Name\":        \"名称\",\n\t\t\"Description\": \"描述\",\n\t}\n\tmodel.LogEntityChange(\n\t\tfmt.Sprintf(\"智能体【%s】\", oldAgent.Name),\n\t\tmodel.SystemLogActionUpdate,\n\t\teid,\n\t\tconfig.GetUserId(c),\n\t\tconfig.GetUserNickname(c),\n\t\tmodel.SystemLogModuleAgent,\n\t\toldAgent,\n\t\tagent,\n\t\tutils.GetClientIP(c),\n\t\tfieldMap,\n\t)\n\n\tif err := agent.LoadUserGroupIds(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(agent))\n}\n\n// @Summary Delete agent\n// @Description Delete agent by ID\n// @Tags Agent\n// @Produce json\n// @Security BearerAuth\n// @Param agent_id path int true \"Agent ID\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/agents/{agent_id} [delete]\nfunc DeleteAgent(c *gin.Context) {\n\tagent_id, err := strconv.ParseInt(c.Param(\"agent_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tagent, err := model.GetAgentByID(eid, agent_id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Check if user is admin\n\tif !common.IsAdmin(c) {\n\t\tc.JSON(http.StatusForbidden, model.AuthFailed.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Start transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Delete agent\n\tif err := tx.Delete(agent).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Delete associated permissions\n\tif err := tx.Where(\"resource_id = ? AND resource_type = ?\", agent_id, model.ResourceTypeAgent).Delete(&model.ResourcePermission{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      agent.Eid,\n\t\tUserID:   agent.CreatedBy,\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleAgent,\n\t\tAction:   model.SystemLogActionDelete,\n\t\tContent:  fmt.Sprintf(\"删除智能体【%s】\", agent.Name),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Get agents list\n// @Description Retrieve paginated list of agents\n// @Tags Agent\n// @Produce json\n// @Security BearerAuth\n// @Param keyword query string false \"Keyword\"\n// @Param group_id query int false \"Group ID\"\n// @Param offset query int false \"Offset\"\n// @Param limit query int false \"Limit\" default(10)\n// @Param channel_types query string false \"Channel types , split by comma\"\n// @Param agent_types query string false \"Agent types , split by comma\"\n// @Success 200 {object} model.CommonResponse{data=AgentsResponse} \"Success\"\n// @Router /api/agents [get]\nfunc GetAgents(c *gin.Context) {\n\tvar agentListRequest AgentListRequest\n\tif err := c.ShouldBindQuery(&agentListRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Set default limit to 10 if not specified\n\tif agentListRequest.Limit == 0 {\n\t\tagentListRequest.Limit = 10\n\t}\n\n\t// If user is not admin, get only agents they have permission to access\n\tvar total int64\n\tvar agents []*model.Agent\n\tvar err error\n\tchannelTypes := splitChannelTypesString(agentListRequest.ChannelTypes)\n\tagentTypes := splitAgentTypesString(agentListRequest.AgentTypes)\n\tif common.IsAdmin(c) {\n\t\ttotal, agents, err = model.GetAgentListWithIDs(\n\t\t\tconfig.GetEID(c), agentListRequest.Keyword, agentListRequest.GroupId,\n\t\t\tnil, channelTypes, agentTypes, agentListRequest.Offset, agentListRequest.Limit)\n\t} else {\n\t\t// Get list of agent IDs the user has permission to access\n\t\tpermittedAgentIDs, getErr := model.GetResourcesByGroupAndType(config.GetUserGroupID(c), model.ResourceTypeAgent)\n\t\tif getErr != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\n\t\ttotal, agents, err = model.GetAgentListWithIDs(\n\t\t\tconfig.GetEID(c), agentListRequest.Keyword, agentListRequest.GroupId,\n\t\t\tpermittedAgentIDs, channelTypes, agentTypes,\n\t\t\tagentListRequest.Offset, agentListRequest.Limit)\n\t}\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tfor _, agent := range agents {\n\t\tif err := agent.LoadUserGroupIds(); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(AgentsResponse{\n\t\tCount:  total,\n\t\tAgents: agents,\n\t}))\n}\n\n// @Summary Get agents by group\n// @Description Retrieve paginated list of agents by specified group\n// @Tags Agent\n// @Produce json\n// @Security BearerAuth\n// @Param keyword    query string false \"Search keyword\"\n// @Param group_id   query int    false  \"Target group ID\"\n// @Param offset     query int    false \"Pagination offset\" default(0)\n// @Param limit      query int    false \"Pagination limit\"  default(10)\n// @Param channel_types query string false \"Channel types , split by comma\"\n// @Param agent_types query string false \"Agent types , split by comma\"\n// @Success 200 {object} model.CommonResponse{data=AgentsResponse} \"Success response with agent list\"\n// @Router /api/agents/group [get]\nfunc GetAgentsByGroup(c *gin.Context) {\n\tvar agentListRequest AgentListRequest\n\tif err := c.ShouldBindQuery(&agentListRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Set default limit to 10 if not specified\n\tif agentListRequest.Limit == 0 {\n\t\tagentListRequest.Limit = 10\n\t}\n\n\tchannelTypes := splitChannelTypesString(agentListRequest.ChannelTypes)\n\tagentTypes := splitAgentTypesString(agentListRequest.AgentTypes)\n\tvar total, agents, err = model.GetAgentListWithIDs(\n\t\tconfig.GetEID(c), agentListRequest.Keyword, agentListRequest.GroupId,\n\t\tnil, channelTypes, agentTypes, agentListRequest.Offset, agentListRequest.Limit)\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tfor _, agent := range agents {\n\t\tif err := agent.LoadUserGroupIds(); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(AgentsResponse{\n\t\tCount:  total,\n\t\tAgents: agents,\n\t}))\n}\n\n// @Summary Get available agents\n// @Description Retrieve paginated list of available agents\n// @Tags Agent\n// @Produce json\n// @Param offset query int false \"Pagination offset\" default(0)\n// @Param limit query int false \"Pagination limit\" default(10)\n// @Param agent_types query string false \"Agent types , split by comma\"\n// @Success 200 {object} model.CommonResponse{data=AgentsResponse} \"Success response with available agent list\"\n// @Router /api/agents/available [get]\nfunc GetAvailableAgents(c *gin.Context) {\n\tvar agentListRequest AgentListRequest\n\tif err := c.ShouldBindQuery(&agentListRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif agentListRequest.Limit == 0 {\n\t\tagentListRequest.Limit = 10\n\t}\n\n\tagentTypes := splitAgentTypesString(agentListRequest.AgentTypes)\n\tvar total, agents, err = model.GetAvailableAgentList(\n\t\tconfig.GetEID(c),\n\t\tagentTypes,\n\t\tagentListRequest.Offset,\n\t\tagentListRequest.Limit,\n\t)\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tfor _, agent := range agents {\n\t\tif err = agent.LoadUserGroupIds(); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t\tif err = agent.LoadConversationCount(); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(AgentsResponse{\n\t\tCount:  total,\n\t\tAgents: agents,\n\t}))\n}\n\n// Get Current Agents\n// @Summary Get current agent list\n// @Description Get agents list under the first agent-type group of current enterprise (no pagination required)\n// @Tags Agent\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=AgentsResponse} \"Success response containing agent list\"\n// @Router /api/agents/current [get]\nfunc GetCurrentAgents(c *gin.Context) {\n\teid := config.GetEID(c)\n\n\tauthHeader := c.GetHeader(\"Authorization\")\n\tauthHeader = strings.Replace(authHeader, \"Bearer \", \"\", 1)\n\n\tvar theGroup *model.Group\n\tvar err error\n\n\tif authHeader == \"\" {\n\t\tgroup, err := model.GetFirstGroupByEid(eid, model.USER_GROUP_TYPE)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusNotFound, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t\ttheGroup = &group\n\t} else {\n\t\tuser := model.ValidateAccessToken(authHeader)\n\t\tif user == nil {\n\t\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\n\t\tif user.GroupId > 0 {\n\t\t\ttheGroup, err = model.GetGroupByID(user.GroupId)\n\t\t\tif err != nil {\n\t\t\t\tc.JSON(http.StatusNotFound, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tgroup, err := model.GetGroupWithAgents(theGroup.GroupId, true)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tfor i := range group.Agents {\n\t\tvar count int64\n\t\tmodel.DB.Model(&model.Conversation{}).\n\t\t\tWhere(\"eid = ? AND agent_id = ?\", eid, group.Agents[i].AgentID).\n\t\t\tCount(&count)\n\n\t\tgroup.Agents[i].ConversationCount = count\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(AgentsResponse{\n\t\tCount:  int64(len(group.Agents)),\n\t\tAgents: group.Agents,\n\t}))\n}\n\n// @Summary Update agent status\n// @Description Update agent enable/disable status\n// @Tags Agent\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param agent_id path int true \"Agent ID\"\n// @Param request body UpdateAgentEnableRequest true \"Enable status\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/agents/{agent_id}/status [patch]\nfunc UpdateAgentStatus(c *gin.Context) {\n\tagentID, err := strconv.ParseInt(c.Param(\"agent_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar updateAgentEnableReq UpdateAgentEnableRequest\n\tif err = c.ShouldBindJSON(&updateAgentEnableReq); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\t_, err = model.GetAgentByID(eid, agentID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\terr = model.UpdateAgentStatus(eid, agentID, updateAgentEnableReq.Enable)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tagent, err := model.GetAgentByID(eid, agentID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\tstatusText := \"启用\"\n\tif !agent.Enable {\n\t\tstatusText = \"禁用\"\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleAgent,\n\t\tAction:   model.SystemLogActionToggle,\n\t\tContent:  fmt.Sprintf(\"%s智能体【%s】\", statusText, agent.Name),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\nfunc splitChannelTypesString(channelTypesStr string) []int {\n\tvar channelTypes []int\n\tif channelTypesStr != \"\" {\n\t\tstrSlice := strings.Split(channelTypesStr, \",\")\n\t\tfor _, s := range strSlice {\n\t\t\tif i, err := strconv.Atoi(strings.TrimSpace(s)); err == nil {\n\t\t\t\tchannelTypes = append(channelTypes, i)\n\t\t\t}\n\t\t}\n\t}\n\treturn channelTypes\n}\n\nfunc splitAgentTypesString(agentTypesStr string) []int {\n\tvar agentTypes []int\n\tif agentTypesStr != \"\" {\n\t\tstrSlice := strings.Split(agentTypesStr, \",\")\n\t\tfor _, s := range strSlice {\n\t\t\tif i, err := strconv.Atoi(strings.TrimSpace(s)); err == nil {\n\t\t\t\tagentTypes = append(agentTypes, i)\n\t\t\t}\n\t\t}\n\t}\n\treturn agentTypes\n}\n\n// GetInternalUserAgents retrieves available agents for a specific internal user\n// @Summary Get available agents for a specific internal user\n// @Description Get all available agents for a specific internal user (including agents from user's groups and department groups, with duplicates removed)\n// @Tags Agent\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=AgentsResponse} \"Success response containing agent list\"\n// @Router /api/agents/internal_users [get]\nfunc GetInternalUserAgents(c *gin.Context) {\n\teid := config.GetEID(c)\n\n\tuserID := config.GetUserId(c)\n\tuser, err := model.GetUserByID(userID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif user.Eid != eid || user.Type != model.UserTypeInternal {\n\t\tc.JSON(http.StatusForbidden, model.AuthFailed.ToResponse(\"User is not an internal member of the current enterprise\"))\n\t\treturn\n\t}\n\n\tvar groupIDs []int64\n\tgroupIDs, err = model.GetGroupsByUserID(userID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar dids []int64\n\tdids, err = model.GetMemberDidsByBID(eid, userID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar departmentGroupIDs []int64\n\tif len(dids) == 0 {\n\t\tdids = []int64{0}\n\t}\n\n\tfor _, did := range dids {\n\t\tdeptGroupIDs, err := model.GetGroupsByDepartmentID(did)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t\tdepartmentGroupIDs = append(departmentGroupIDs, deptGroupIDs...)\n\t}\n\n\tif len(departmentGroupIDs) > 0 {\n\t\tgroupIDMap := make(map[int64]bool)\n\t\tfor _, id := range groupIDs {\n\t\t\tgroupIDMap[id] = true\n\t\t}\n\n\t\tfor _, id := range departmentGroupIDs {\n\t\t\tif !groupIDMap[id] {\n\t\t\t\tgroupIDs = append(groupIDs, id)\n\t\t\t\tgroupIDMap[id] = true\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(groupIDs) == 0 {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(AgentsResponse{\n\t\t\tCount:  0,\n\t\t\tAgents: []*model.Agent{},\n\t\t}))\n\t\treturn\n\t}\n\n\tvar allAgents []*model.Agent\n\tagentMap := make(map[int64]*model.Agent)\n\n\tfor _, groupID := range groupIDs {\n\t\tgroup, err := model.GetGroupWithAgents(groupID, true)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tfor i := range group.Agents {\n\t\t\tif group.Agents[i].Enable {\n\t\t\t\tagentMap[group.Agents[i].AgentID] = group.Agents[i]\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, agent := range agentMap {\n\t\tvar count int64\n\t\tmodel.DB.Model(&model.Conversation{}).\n\t\t\tWhere(\"eid = ? AND agent_id = ?\", eid, agent.AgentID).\n\t\t\tCount(&count)\n\n\t\tagent.ConversationCount = count\n\t\tallAgents = append(allAgents, agent)\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(AgentsResponse{\n\t\tCount:  int64(len(allAgents)),\n\t\tAgents: allAgents,\n\t}))\n}\n"
  },
  {
    "path": "api/controller/ai53.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/utils/ai53\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// Get53AIAllBots Get all 53AI bots\n// @Summary Get all 53AI bots list\n// @Description Get all bots list from 53AI platform\n// @Tags 53AI\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param provider_id query int false \"Provider ID (optional, for backward compatibility)\"\n// @Success 200 {object} model.CommonResponse{data=[]ai53.AppResponse}\n// @Router /api/53ai/bots [get]\nfunc Get53AIAllBots(c *gin.Context) {\n\teid := config.GetEID(c)\n\tproviderID, _ := strconv.ParseInt(c.DefaultQuery(\"provider_id\", \"0\"), 10, 64)\n\tprovider, err := model.GetProviderByEidAndProviderTypeWithOptionalID(eid, int64(model.ProviderType53AI), providerID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\tser := service.AI53Service{\n\t\tProvider: &provider,\n\t}\n\n\tbots, err := ser.GetAllBots()\n\tif err != nil {\n\t\tlogger.SysLogf(\"Get53AIAllBots: %s\", err.Error())\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\tUpdate53AIChannel(provider, bots)\n\tc.JSON(http.StatusOK, model.Success.ToResponse(bots))\n}\n\n// Get53AIAllWorkflows Get all 53AI workflows\n// @Summary Get all 53AI workflows list\n// @Description Get all workflows list from 53AI platform\n// @Tags 53AI\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param provider_id query int false \"Provider ID (optional, for backward compatibility)\"\n// @Success 200 {object} model.CommonResponse{data=[]ai53.AppResponse}\n// @Router /api/53ai/workflows [get]\nfunc Get53AIAllWorkflows(c *gin.Context) {\n\teid := config.GetEID(c)\n\tproviderID, _ := strconv.ParseInt(c.DefaultQuery(\"provider_id\", \"0\"), 10, 64)\n\tprovider, err := model.GetProviderByEidAndProviderTypeWithOptionalID(eid, int64(model.ProviderType53AI), providerID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\tser := service.AI53Service{\n\t\tProvider: &provider,\n\t}\n\n\tworkflows, err := ser.GetAllWorkflows()\n\tif err != nil {\n\t\tlogger.SysLogf(\"Get53AIAllWorkflows: %s\", err.Error())\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\tUpdate53AIWorkflowChannel(provider, workflows)\n\tc.JSON(http.StatusOK, model.Success.ToResponse(workflows))\n}\n\nfunc Update53AIChannel(provider model.Provider, apps []ai53.AppResponse) error {\n\tvar botIds []string\n\tfor _, bot := range apps {\n\t\tbotIds = append(botIds, \"bot-\"+bot.BotID)\n\t}\n\t// todo Call interface user ID all use the same\n\tconfigStr := `{\"region\":\"\",\"sk\":\"\",\"ak\":\"\",\"user_id\":\"53AIHub\",\"vertex_ai_project_id\":\"\",\"vertex_ai_adc\":\"\"}`\n\t// Create or update channel record\n\tbaseURL := provider.GetBaseURLByProviderType()\n\tchannel := &model.Channel{\n\t\tEid:        provider.Eid,\n\t\tName:       provider.Name,\n\t\tKey:        provider.AccessToken,\n\t\tType:       model.ChannelApi53AI,\n\t\tProviderID: provider.ProviderID,\n\t\tBaseURL:    &baseURL,\n\t\tStatus:     model.ChannelStatusEnabled,\n\t\tConfig:     configStr,\n\t}\n\n\texistingChannel, err := model.GetFirstChannelByEidAndProviderId(channel.Eid, channel.ProviderID)\n\tif err != nil {\n\t\t// Create new record with initial botIds\n\t\tchannel.Models = strings.Join(botIds, \",\")\n\t\treturn model.CreateChannel(channel)\n\t} else {\n\t\t// Update existing record with incremental botIds\n\t\tchannel.ChannelID = existingChannel.ChannelID\n\t\tchannel.CreatedTime = existingChannel.CreatedTime\n\t\t\n\t\t// Get existing botIds\n\t\texistingBotIds := strings.Split(existingChannel.Models, \",\")\n\t\tbotIdMap := make(map[string]bool)\n\t\tfor _, id := range existingBotIds {\n\t\t\tif id != \"\" {\n\t\t\t\tbotIdMap[id] = true\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Add new botIds\n\t\tfor _, id := range botIds {\n\t\t\tbotIdMap[id] = true\n\t\t}\n\t\t\n\t\t// Convert map back to slice\n\t\tvar updatedBotIds []string\n\t\tfor id := range botIdMap {\n\t\t\tupdatedBotIds = append(updatedBotIds, id)\n\t\t}\n\t\t\n\t\tchannel.Models = strings.Join(updatedBotIds, \",\")\n\t\treturn model.UpdateChannel(channel)\n\t}\n}\n\nfunc Update53AIWorkflowChannel(provider model.Provider, apps []ai53.AppResponse) error {\n\tvar workflowIds []string\n\tfor _, workflow := range apps {\n\t\tworkflowIds = append(workflowIds, \"workflow-\"+workflow.BotID)\n\t}\n\t// todo Call interface user ID all use the same\n\tconfigStr := `{\"region\":\"\",\"sk\":\"\",\"ak\":\"\",\"user_id\":\"53AIHub\",\"vertex_ai_project_id\":\"\",\"vertex_ai_adc\":\"\"}`\n\t// Create or update channel record\n\tbaseURL := provider.GetBaseURLByProviderType()\n\tchannel := &model.Channel{\n\t\tEid:        provider.Eid,\n\t\tName:       provider.Name,\n\t\tKey:        provider.AccessToken,\n\t\tType:       model.ChannelApi53AI,\n\t\tProviderID: provider.ProviderID,\n\t\tBaseURL:    &baseURL,\n\t\tStatus:     model.ChannelStatusEnabled,\n\t\tConfig:     configStr,\n\t}\n\n\texistingChannel, err := model.GetFirstChannelByEidAndProviderId(channel.Eid, channel.ProviderID)\n\tif err != nil {\n\t\t// Create new record with initial workflowIds\n\t\tchannel.Models = strings.Join(workflowIds, \",\")\n\t\treturn model.CreateChannel(channel)\n\t} else {\n\t\t// Update existing record with incremental workflowIds\n\t\tchannel.ChannelID = existingChannel.ChannelID\n\t\tchannel.CreatedTime = existingChannel.CreatedTime\n\t\t\n\t\t// Get existing workflowIds\n\t\texistingWorkflowIds := strings.Split(existingChannel.Models, \",\")\n\t\tworkflowIdMap := make(map[string]bool)\n\t\tfor _, id := range existingWorkflowIds {\n\t\t\tif id != \"\" {\n\t\t\t\tworkflowIdMap[id] = true\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Add new workflowIds\n\t\tfor _, id := range workflowIds {\n\t\t\tworkflowIdMap[id] = true\n\t\t}\n\t\t\n\t\t// Convert map back to slice\n\t\tvar updatedWorkflowIds []string\n\t\tfor id := range workflowIdMap {\n\t\t\tupdatedWorkflowIds = append(updatedWorkflowIds, id)\n\t\t}\n\t\t\n\t\tchannel.Models = strings.Join(updatedWorkflowIds, \",\")\n\t\treturn model.UpdateChannel(channel)\n\t}\n}\n\n// Get53AIAppParameters 获取 53AI 应用参数配置\n// @Summary 获取 53AI 应用参数配置\n// @Description 根据 botId 获取 53AI 应用的参数配置信息，支持带前缀或不带前缀的 botId\n// @Tags 53AI\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param botId path string true \"机器人ID (支持 bot-xxx, workflow-xxx 或直接 xxx 格式)\"\n// @Param provider_id query int false \"Provider ID (optional, for backward compatibility)\"\n// @Success 200 {object} model.CommonResponse{data=interface{}}\n// @Router /api/53ai/parameters/{botId} [get]\nfunc Get53AIAppParameters(c *gin.Context) {\n\t// 1. 获取并处理 botId 参数\n\tbotId := c.Param(\"botId\")\n\tif botId == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"botId 不能为空\"))\n\t\treturn\n\t}\n\n\tlogger.SysLogf(\"🔍 获取53AI应用参数 - Bot ID: %s\", botId)\n\n\t// 2. 获取 EID (遵循 53AI 渠道模式)\n\teid := config.GetEID(c)\n\n\t// 3. 获取 53AI Provider (遵循 53AI 渠道模式)\n\tproviderID, _ := strconv.ParseInt(c.DefaultQuery(\"provider_id\", \"0\"), 10, 64)\n\tprovider, err := model.GetProviderByEidAndProviderTypeWithOptionalID(eid, int64(model.ProviderType53AI), providerID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 4. 创建 AI53Service 实例 (遵循 53AI 渠道模式)\n\tser := service.AI53Service{\n\t\tProvider: &provider,\n\t}\n\n\t// 5. 调用服务方法获取应用参数\n\tappParams, err := ser.GetAppParameters(botId)\n\tif err != nil {\n\t\tlogger.SysLogf(\"Get53AIAppParameters: %s\", err.Error())\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlogger.SysLogf(\"✅ 53AI应用参数获取成功 - Bot ID: %s\", botId)\n\t// 6. 返回结果\n\tc.JSON(http.StatusOK, model.Success.ToResponse(appParams))\n}\n"
  },
  {
    "path": "api/controller/ai_link.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype AILinkRequest struct {\n\tGroupID       int64  `json:\"group_id\" example:\"1\"`\n\tName          string `json:\"name\" example:\"ai_link_name\"`\n\tLogo          string `json:\"logo\" example:\"logo_url\"`\n\tURL           string `json:\"url\" example:\"ai_link_url\"`\n\tDescription   string `json:\"description\" example:\"ai_link_description\"`\n\tSort          int64  `json:\"sort\" example:\"0\"`\n\tSharedAccount string `json:\"shared_account\" example:\"[{'account':'admin', 'password':'<PASSWORD>', 'remark':''}]\"`\n\t// 使用范围\n\tSubscriptionGroupIds []int64 `json:\"subscription_group_ids\"`\n\tUserGroupIds         []int64 `json:\"user_group_ids\"`\n}\n\n// @Summary Create AI Link\n// @Description Create new AI link entry\n// @Tags AI Link\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param link body AILinkRequest true \"AI Link data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/ai_links [post]\nfunc CreateAILink(c *gin.Context) {\n\tvar req AILinkRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlink := model.AILink{\n\t\tEid:           config.GetEID(c),\n\t\tGroupID:       req.GroupID,\n\t\tName:          req.Name,\n\t\tLogo:          req.Logo,\n\t\tURL:           req.URL,\n\t\tDescription:   req.Description,\n\t\tSort:          req.Sort,\n\t\tCreatedBy:     config.GetUserId(c),\n\t\tSharedAccount: req.SharedAccount,\n\t}\n\n\tif err := model.CreateAILink(&link); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 添加分组关联\n\tallGroupIds := make([]int64, 0)\n\n\t// 添加订阅分组\n\tif len(req.SubscriptionGroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, req.SubscriptionGroupIds...)\n\t}\n\n\t// 添加用户分组\n\tif len(req.UserGroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, req.UserGroupIds...)\n\t}\n\n\t// 创建资源权限\n\tif len(allGroupIds) > 0 {\n\t\ttx := model.DB.Begin()\n\t\tif tx.Error != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t}\n\t\t}()\n\n\t\t// 使用通用方法更新资源权限\n\t\tif err := service.UpdateResourcePermissions(c, tx, link.ID, model.ResourceTypeAILink, allGroupIds); err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\n\t\t// 提交事务\n\t\tif err := tx.Commit().Error; err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(link))\n}\n\n// @Summary Get AI Link\n// @Description Get AI link by ID\n// @Tags AI Link\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Link ID\"\n// @Success 200 {object} model.CommonResponse{data=model.AILink}\n// @Router /api/ai_links/{id} [get]\nfunc GetAILink(c *gin.Context) {\n\tid, _ := strconv.Atoi(c.Param(\"id\"))\n\tlink, err := model.GetAILinkByID(int64(id))\n\n\tif err != nil || link.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\terr = link.LoadUserGroupIds()\n\tif err != nil {\n\t\tlink.UserGroupIds = []int64{}\n\t}\n\tlink.LoadHasSharedAccount()\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(link))\n}\n\n// @Summary Update AI Link\n// @Description Update existing AI link\n// @Tags AI Link\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Link ID\"\n// @Param link body AILinkRequest true \"Update data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/ai_links/{id} [put]\nfunc UpdateAILink(c *gin.Context) {\n\tid, _ := strconv.Atoi(c.Param(\"id\"))\n\tlink, err := model.GetAILinkByID(int64(id))\n\n\tif err != nil || link.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar req AILinkRequest\n\tif c.ShouldBindJSON(&req) != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tlink.GroupID = req.GroupID\n\tlink.Name = req.Name\n\tlink.Logo = req.Logo\n\tlink.URL = req.URL\n\tlink.Description = req.Description\n\tlink.Sort = req.Sort\n\tlink.SharedAccount = req.SharedAccount\n\n\tif err := model.UpdateAILink(link); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 更新分组关联\n\tallGroupIds := make([]int64, 0)\n\n\t// 添加订阅分组\n\tif len(req.SubscriptionGroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, req.SubscriptionGroupIds...)\n\t}\n\n\t// 添加用户分组\n\tif len(req.UserGroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, req.UserGroupIds...)\n\t}\n\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\t// 使用通用方法更新资源权限\n\tif err := service.UpdateResourcePermissions(c, tx, link.ID, model.ResourceTypeAILink, allGroupIds); err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 提交事务\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\terr = link.LoadUserGroupIds()\n\tif err != nil {\n\t\tlink.UserGroupIds = []int64{}\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(link))\n}\n\n// @Summary Delete AI Link\n// @Description Delete AI link by ID\n// @Tags AI Link\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Link ID\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/ai_links/{id} [delete]\nfunc DeleteAILink(c *gin.Context) {\n\tid, _ := strconv.Atoi(c.Param(\"id\"))\n\tlink, err := model.GetAILinkByID(int64(id))\n\n\tif err != nil || link.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 开始事务\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\t// 删除AI链接\n\tif err := tx.Delete(link).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 使用通用方法删除资源权限\n\tif err := service.UpdateResourcePermissions(c, tx, int64(id), model.ResourceTypeAILink, []int64{}); err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 提交事务\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Get AI Links\n// @Description Get AI links by group ID\n// @Tags AI Link\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param group_id query int false \"Empty for all groups or group ID\"\n// @Param keyword query string false \"Search by name\"\n// @Success 200 {object} model.CommonResponse{data=[]model.AILink}\n// @Router /api/ai_links [get]\nfunc GetAILinks(c *gin.Context) {\n\tgroupID, _ := strconv.ParseInt(c.Query(\"group_id\"), 10, 64)\n\tkeyword := c.Query(\"keyword\")\n\tvar links []model.AILink\n\tvar err error\n\n\tif groupID != 0 {\n\t\tif keyword != \"\" {\n\t\t\tlinks, err = model.GetAILinksByEidAndGroupIdWithKeyword(config.GetEID(c), groupID, keyword)\n\t\t} else {\n\t\t\tlinks, err = model.GetAILinksByEidAndGroupId(config.GetEID(c), groupID)\n\t\t}\n\t} else {\n\t\tif keyword != \"\" {\n\t\t\tlinks, err = model.GetAILinksGroupedBySortWithKeyword(config.GetEID(c), keyword)\n\t\t} else {\n\t\t\tlinks, err = model.GetAILinksGroupedBySort(config.GetEID(c))\n\t\t}\n\t}\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(links))\n}\n\n// @Summary Get current site AI links\n// @Description Get all AI links for current site\n// @Tags AI Link\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=[]model.AILink}\n// @Router /api/ai_links/current [get]\nfunc GetCurrentSiteAILinks(c *gin.Context) {\n\teid := config.GetEID(c)\n\tlinks, err := model.GetAILinksGroupedBySort(eid)\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(links))\n}\n\n// @Summary 获取默认AI链接数据\n// @Description 获取预定义的AI工具分组及对应链接列表（如AI搜索、智能对话等分组）\n// @Tags AI Link\n// @Accept json\n// @Produce json\n// @Success 200 {object} model.CommonResponse{data=[]model.GroupInfo} \"成功返回默认AI链接数据\"\n// @Router /api/ai_links/default [get]\nfunc GetDefaultAILinks(c *gin.Context) {\n\tlinks := model.GetDefaultGroupData()\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(links))\n}\n\ntype SortItem struct {\n\tID      int64 `json:\"id\" example:\"1\"`\n\tSort    int64 `json:\"sort\" example:\"5\"`\n\tGroupID int64 `json:\"group_id\" example:\"1\"`\n}\n\ntype BatchSortRequest struct {\n\tItems []SortItem `json:\"items\"`\n}\n\n// @Summary Batch Sort AI Links\n// @Description Batch update sort order of AI links\n// @Tags AI Link\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param data body BatchSortRequest true \"Batch sort data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/ai_links/batch/sort [post]\nfunc BatchSortAILinks(c *gin.Context) {\n\tvar req BatchSortRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\ttx := model.DB.Begin()\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\tfor _, item := range req.Items {\n\t\tlink, err := model.GetAILinkByID(item.ID)\n\t\tif err != nil || link.Eid != eid {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\n\t\tlink.Sort = item.Sort\n\t\tlink.GroupID = item.GroupID\n\t\tif err := tx.Model(&link).Updates(link).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n"
  },
  {
    "path": "api/controller/appbuilder.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/utils/appbuilder\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// GetAppBuilderAllBots Get all AppBuilder bots\n// @Summary Get all AppBuilder bots list\n// @Description Get all bots list from AppBuilder\n// @Tags AppBuilder\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param provider_id query int false \"Provider ID (optional, for backward compatibility)\"\n// @Success 200 {object} model.CommonResponse{data=[]appbuilder.AppInfo}\n// @Router /api/appbuilder/bots [get]\nfunc GetAppBuilderAllBots(c *gin.Context) {\n\teid := config.GetEID(c)\n\tproviderID, _ := strconv.ParseInt(c.DefaultQuery(\"provider_id\", \"0\"), 10, 64)\n\tprovider, err := model.GetProviderByEidAndProviderTypeWithOptionalID(eid, int64(model.ProviderTypeAppBuilder), providerID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\tser := service.AppBuilderService{\n\t\tProvider: &provider,\n\t}\n\n\tapps, err := ser.GetAllDescribeApps()\n\tif err != nil {\n\t\tlogger.SysLogf(\"GetAppBuilderAllBots: %s\", err.Error())\n\t\tif len(apps) == 0 {\n\t\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\t// update or channel\n\tUpdateAppBuilderChannel(provider, apps)\n\tc.JSON(http.StatusOK, model.Success.ToResponse(apps))\n}\n\nfunc UpdateAppBuilderChannel(provider model.Provider, apps []appbuilder.AppInfo) error {\n\tvar botIds []string\n\tfor _, bot := range apps {\n\t\tif !bot.IsPublished {\n\t\t\tcontinue\n\t\t}\n\t\tbotIds = append(botIds, \"bot-\"+bot.ID)\n\t}\n\t// todo Call interface user ID all use the same\n\tconfigStr := `{\"region\":\"\",\"sk\":\"\",\"ak\":\"\",\"user_id\":\"53AIHub\",\"vertex_ai_project_id\":\"\",\"vertex_ai_adc\":\"\"}`\n\t// Create or update channel record\n\tbaseURL := provider.GetBaseURLByProviderType()\n\tchannel := &model.Channel{\n\t\tEid:        provider.Eid,\n\t\tName:       provider.Name,\n\t\tKey:        provider.AccessToken,\n\t\tType:       model.ChannelApiAppBuilder,\n\t\tProviderID: provider.ProviderID,\n\t\tBaseURL:    &baseURL, // Fix: assign address of baseURL since Channel.BaseURL is *string\n\t\tModels:     strings.Join(botIds, \",\"),\n\t\tStatus:     model.ChannelStatusEnabled,\n\t\tConfig:     configStr,\n\t}\n\n\texistingChannel, err := model.GetFirstChannelByEidAndProviderId(channel.Eid, channel.ProviderID)\n\tif err != nil {\n\t\t// Create new record\n\t\treturn model.CreateChannel(channel) // Fix: return error instead of assigning i\n\t} else {\n\t\t// Update existing record\n\t\tchannel.ChannelID = existingChannel.ChannelID\n\t\tchannel.CreatedTime = existingChannel.CreatedTime\n\t\treturn model.UpdateChannel(channel)\n\t}\n}\n"
  },
  {
    "path": "api/controller/auth_sso.go",
    "content": "package controller\n\nimport (\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"time\"\n\t\"unicode\"\n\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// SSO 配置结构，存储于 enterprise-configs type=\"auth_sso\" 的 JSON 内容\ntype SSOConfig struct {\n\tEnable         bool   `json:\"enable\"`\n\tEncryptEnabled bool   `json:\"encrypt_enabled\"`\n\tSecret         string `json:\"secret\"`\n}\n\n// SSO 登录请求体\ntype SSOLoginRequest struct {\n\tUsername  string `json:\"username\" binding:\"required\"`\n\tTimestamp string `json:\"timestamp\"` // 10位秒\n\tSign      string `json:\"sign\"`      // 加密启用时必须传\n}\n\n// SaasLoginResponse 复用现有返回体格式\ntype SaasLoginResponse struct {\n\tAccessToken string `json:\"access_token\"`\n\tUserID      int64  `json:\"user_id\"`\n}\n\n// @Summary API SSO Login\n// @Description 站点API单点登录。时间戳为10位秒，窗口10分钟。eid无需传，使用站点环境。\n// @Tags Auth\n// @Accept json\n// @Produce json\n// @Param request body SSOLoginRequest true \"SSO请求体\"\n// @Success 200 {object} model.CommonResponse{data=SaasLoginResponse} \"成功，返回access_token与user_id\"\n// @Failure 401 {object} model.CommonResponse \"未授权（超时或签名错误）\"\n// @Failure 403 {object} model.CommonResponse \"拒绝（SSO关闭）\"\n// @Failure 404 {object} model.CommonResponse \"用户不存在\"\n// @Router /api/auth/sso_login [post]\nfunc ApiSSOSSOLogin(c *gin.Context) {\n\teid := config.GetEID(c)\n\n\t// 加载 SSO 配置\n\tcfg := loadSSOConfig(eid)\n\n\t// 开关关闭：403\n\tif !cfg.Enable {\n\t\tc.JSON(http.StatusForbidden, model.ForbiddenError.ToNewErrorResponse(\"拒绝登录\"))\n\t\treturn\n\t}\n\n\t// 绑定请求参数\n\tvar req SSOLoginRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusForbidden, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 签名校验（加密启用时）\n\tif cfg.EncryptEnabled {\n\t\t// 校验时间戳：必须10位数字\n\t\tif !isValid10DigitTimestamp(req.Timestamp) {\n\t\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToNewErrorResponse(\"sso timeout\"))\n\t\t\treturn\n\t\t}\n\t\tts, _ := strconv.ParseInt(req.Timestamp, 10, 64)\n\t\tnow := time.Now().Unix()\n\t\t// 且600秒内有效\n\t\tif now-ts > 600 {\n\t\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToNewErrorResponse(\"sso timeout\"))\n\t\t\treturn\n\t\t}\n\n\t\tif cfg.Secret == \"\" {\n\t\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToNewErrorResponse(\"invalid sign\"))\n\t\t\treturn\n\t\t}\n\t\traw := helper.BuildSSORawString(req.Timestamp, req.Username, cfg.Secret)\n\t\texpected := helper.CalcSSOSignLowerHex(raw)\n\t\tif expected != req.Sign {\n\t\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToNewErrorResponse(\"invalid sign\"))\n\t\t\treturn\n\t\t}\n\t}\n\n\tisEmail := helper.IsValidEmail(req.Username)\n\t// 根据账号查找用户（邮箱或手机）\n\tvar user model.User\n\tif isEmail {\n\t\tu, err := model.GetUserByEmail(eid, req.Username)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(\"user not found\"))\n\t\t\treturn\n\t\t}\n\t\tuser = u\n\t} else {\n\t\tu, err := model.GetUserByMobile(eid, req.Username)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(\"user not found\"))\n\t\t\treturn\n\t\t}\n\t\tuser = u\n\t}\n\n\t// 刷新令牌并返回\n\tif err := user.RefreshAccessToken(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(SaasLoginResponse{\n\t\tAccessToken: user.AccessToken,\n\t\tUserID:      user.UserID,\n\t}))\n}\n\nfunc loadSSOConfig(eid int64) *SSOConfig {\n\t// 从 enterprise-configs 读取 type=\"auth_sso\"\n\tconf, err := service.GetEnterpriseConfigByType(eid, model.EnterpriseConfigTypeSSO)\n\tif err != nil || conf.Content == \"\" {\n\t\t// 不存在则视为关闭\n\t\treturn &SSOConfig{Enable: false, EncryptEnabled: true, Secret: \"\"}\n\t}\n\tvar cfg SSOConfig\n\t_ = json.Unmarshal([]byte(conf.Content), &cfg)\n\tcfg.Enable = conf.Enabled\n\treturn &cfg\n}\n\nfunc isValid10DigitTimestamp(ts string) bool {\n\tif len(ts) != 10 {\n\t\treturn false\n\t}\n\tfor _, r := range ts {\n\t\tif !unicode.IsDigit(r) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "api/controller/channel-test.go",
    "content": "package controller\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/ctxkey\"\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/middleware\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\trelaymodel \"github.com/songquanpeng/one-api/relay/model\"\n\t\"github.com/songquanpeng/one-api/relay/relaymode\"\n)\n\ntype ChannelTestResponse struct {\n\tSuccess bool    `json:\"success\"`\n\tMessage string  `json:\"message\"`\n\tTime    float64 `json:\"time\"`\n}\n\n// TestChannel Test channel availability\n// @Summary Test channel connectivity\n// @Description Verify channel configuration by invoking actual API endpoints\n// @Tags Channel\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param channel_id path int true \"Channel ID\"\n// @Param model query string false \"Model name\"\n// @Success 200 {object} model.CommonResponse{data=ChannelTestResponse}\n// @Router /api/channels/test/{channel_id} [get]\nfunc TestChannel(c *gin.Context) {\n\tctx := c.Request.Context()\n\tchannel_id, err := strconv.Atoi(c.Param(\"channel_id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusOK, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\tchannel, err := model.GetChannelByID(int64(channel_id))\n\tif err != nil {\n\t\tc.JSON(http.StatusOK, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\tmodelName := c.Query(\"model\")\n\ttestRequest := buildTestRequest(modelName)\n\ttik := time.Now()\n\tresponseMessage, err, _ := testChannel(ctx, channel, testRequest)\n\ttok := time.Now()\n\tmilliseconds := tok.Sub(tik).Milliseconds()\n\tif err != nil {\n\t\tmilliseconds = 0\n\t}\n\tgo channel.UpdateResponseTime(milliseconds)\n\tconsumedTime := float64(milliseconds) / 1000.0\n\tif err != nil {\n\t\tc.JSON(http.StatusOK, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(ChannelTestResponse{\n\t\tSuccess: true,\n\t\tMessage: responseMessage,\n\t\tTime:    consumedTime,\n\t}))\n}\n\nfunc testChannel(ctx context.Context, channel *model.Channel, request *relaymodel.GeneralOpenAIRequest) (responseMessage string, err error, openaiErr *relaymodel.Error) {\n\t//startTime := time.Now()\n\tw := httptest.NewRecorder()\n\tc, _ := gin.CreateTestContext(w)\n\tc.Request = &http.Request{\n\t\tMethod: \"POST\",\n\t\tURL:    &url.URL{Path: \"/v1/chat/completions\"},\n\t\tBody:   nil,\n\t\tHeader: make(http.Header),\n\t}\n\tc.Request.Header.Set(\"Authorization\", \"Bearer \"+channel.Key)\n\tc.Request.Header.Set(\"Content-Type\", \"application/json\")\n\tc.Set(ctxkey.Channel, channel.Type)\n\tc.Set(ctxkey.BaseURL, channel.GetBaseURL())\n\tcfg, _ := channel.LoadConfig()\n\tc.Set(ctxkey.Config, cfg)\n\tmiddleware.SetupContextForSelectedChannel(c, channel, \"\")\n\tmeta := meta.GetByContext(c)\n\tapiType := model.GetApiType(channel.Type)\n\tmeta.APIType = apiType\n\t// apiType := channeltype.ToAPIType(channel.Type)\n\tadaptor := service.GetAdaptor(meta.APIType)\n\terr = service.SetCustomConfig(&adaptor, &custom.CustomConfig{\n\t\tConversationId: \"\",\n\t\tUserId:         \"53AIHub\",\n\t})\n\tif err != nil {\n\t\treturn \"\", err, nil\n\t}\n\t// adaptor := relay.GetAdaptor(apiType)\n\tif adaptor == nil {\n\t\treturn \"\", fmt.Errorf(\"invalid api type: %d, adaptor is nil\", apiType), nil\n\t}\n\tadaptor.Init(meta)\n\tmodelName := request.Model\n\tmodelMap := channel.GetModelMapping()\n\tif modelName == \"\" || !strings.Contains(channel.Models, modelName) {\n\t\tmodelNames := strings.Split(channel.Models, \",\")\n\t\tif len(modelNames) > 0 {\n\t\t\tmodelName = modelNames[0]\n\t\t}\n\t}\n\tif modelMap != nil && modelMap[modelName] != \"\" {\n\t\tmodelName = modelMap[modelName]\n\t}\n\tmeta.OriginModelName, meta.ActualModelName = request.Model, modelName\n\trequest.Model = modelName\n\tconvertedRequest, err := adaptor.ConvertRequest(c, relaymode.ChatCompletions, request)\n\tif err != nil {\n\t\treturn \"\", err, nil\n\t}\n\tjsonData, err := json.Marshal(convertedRequest)\n\tif err != nil {\n\t\treturn \"\", err, nil\n\t}\n\tdefer func() {\n\t\t//logContent := fmt.Sprintf(\"渠道 %s 测试成功，响应：%s\", channel.Name, responseMessage)\n\t\tif err != nil || openaiErr != nil {\n\t\t\t// errorMessage := \"\"\n\t\t\t// if err != nil {\n\t\t\t// \terrorMessage = err.Error()\n\t\t\t// } else {\n\t\t\t// \terrorMessage = openaiErr.Message\n\t\t\t// }\n\t\t\t//logContent = fmt.Sprintf(\"渠道 %s 测试失败，错误：%s\", channel.Name, errorMessage)\n\t\t}\n\t\t// go model.RecordTestLog(ctx, &model.Log{\n\t\t// \tChannelId:   channel.Id,\n\t\t// \tModelName:   modelName,\n\t\t// \tContent:     logContent,\n\t\t// \tElapsedTime: helper.CalcElapsedTime(startTime),\n\t\t// })\n\t}()\n\tlogger.SysLog(string(jsonData))\n\trequestBody := bytes.NewBuffer(jsonData)\n\tc.Request.Body = io.NopCloser(requestBody)\n\tresp, err := adaptor.DoRequest(c, meta, requestBody)\n\tif err != nil {\n\t\treturn \"\", err, nil\n\t}\n\tif resp != nil && resp.StatusCode != http.StatusOK {\n\t\t// err := controller.RelayErrorHandler(resp)\n\t\t// err := errors.New(\"http status code: \" + strconv.Itoa(resp.StatusCode))\n\t\t// errorMessage := err.Error.Message\n\t\t// if errorMessage != \"\" {\n\t\t// \terrorMessage = \", error message: \" + errorMessage\n\t\t// }\n\t\treturn \"\", fmt.Errorf(\"http status code: %d%s\", resp.StatusCode, \"\"), nil\n\t}\n\tusage, respErr := adaptor.DoResponse(c, resp, meta)\n\tif respErr != nil {\n\t\treturn \"\", fmt.Errorf(\"%s\", respErr.Error.Message), &respErr.Error\n\t}\n\tif usage == nil {\n\t\treturn \"\", errors.New(\"usage is nil\"), nil\n\t}\n\trawResponse := w.Body.String()\n\t_, responseMessage, err = parseTestResponse(rawResponse)\n\tif err != nil {\n\t\tlogger.SysError(fmt.Sprintf(\"failed to parse error: %s, \\nresponse: %s\", err.Error(), rawResponse))\n\t\treturn \"\", err, nil\n\t}\n\tresult := w.Result()\n\t// print result.Body\n\trespBody, err := io.ReadAll(result.Body)\n\tif err != nil {\n\t\treturn \"\", err, nil\n\t}\n\tlogger.SysLog(fmt.Sprintf(\"testing channel #%d, response: \\n%s\", channel.ChannelID, string(respBody)))\n\treturn responseMessage, nil, nil\n}\n\nfunc parseTestResponse(resp string) (*openai.TextResponse, string, error) {\n\tvar response openai.TextResponse\n\terr := json.Unmarshal([]byte(resp), &response)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tif len(response.Choices) == 0 {\n\t\treturn nil, \"\", errors.New(\"response has no choices\")\n\t}\n\tstringContent, ok := response.Choices[0].Content.(string)\n\tif !ok {\n\t\treturn nil, \"\", errors.New(\"response content is not string\")\n\t}\n\treturn &response, stringContent, nil\n}\n\nfunc buildTestRequest(model string) *relaymodel.GeneralOpenAIRequest {\n\tif model == \"\" {\n\t\tmodel = \"gpt-3.5-turbo\"\n\t}\n\ttestRequest := &relaymodel.GeneralOpenAIRequest{\n\t\tModel: model,\n\t}\n\ttestMessage := relaymodel.Message{\n\t\tRole:    \"user\",\n\t\tContent: \"Output only your specific model name with no additional text.\",\n\t}\n\ttestRequest.Messages = append(testRequest.Messages, testMessage)\n\treturn testRequest\n}\n"
  },
  {
    "path": "api/controller/channel.go",
    "content": "package controller\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// autoAssignCozeStudioProvider automatically assigns a ProviderID for CozeStudio channels\n// when ProviderID is 0 in the request\n// In multi-provider environments, this should be explicitly specified by the client\nfunc autoAssignCozeStudioProvider(channel *model.Channel) error {\n\t// Check if this is a CozeStudio channel and ProviderID is 0\n\tif channel.Type == model.ChannelApiTypeCozeStudio && channel.ProviderID == 0 {\n\t\t// Get all CozeStudio providers for this enterprise\n\t\tproviders, err := model.GetProvidersByEidAndProviderType(channel.Eid, model.ProviderTypeCozeStudio)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif len(providers) == 0 {\n\t\t\treturn fmt.Errorf(\"no CozeStudio provider found for enterprise %d\", channel.Eid)\n\t\t}\n\n\t\t// If there's only one provider, auto-assign it\n\t\tif len(providers) == 1 {\n\t\t\tchannel.ProviderID = providers[0].ProviderID\n\t\t} else {\n\t\t\t// Multiple providers found - this is ambiguous in multi-provider environment\n\t\t\t// Return error to force explicit provider selection\n\t\t\treturn fmt.Errorf(\"multiple CozeStudio providers found (%d), please specify provider_id explicitly\", len(providers))\n\t\t}\n\t}\n\treturn nil\n}\n\ntype ChannelRequest struct {\n\tType         int     `json:\"type\" example:\"1\"`\n\tModelType    *int    `json:\"model_type\" example:\"1\"`\n\tKey          string  `json:\"key\" example:\"channel_key\"`\n\tName         string  `json:\"name\" example:\"channel_name\"`\n\tModels       string  `json:\"models\" example:\"gpt-3.5-turbo\"`\n\tConfig       string  `json:\"config\" example:\"{\\\"region\\\":\\\"us-east-1\\\"}\"`\n\tModelMapping *string `json:\"model_mapping\"`\n\tWeight       *uint   `json:\"weight\"`\n\tPriority     *int64  `json:\"priority\"`\n\tBaseURL      *string `json:\"base_url\"`\n\tOther        *string `json:\"other\"`\n\tProviderID   *int64  `json:\"provider_id\" example:\"181\"`\n}\n\n// @Summary Create channel\n// @Description Create new channel configuration\n// @Tags Channel\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param channel body ChannelRequest true \"Channel data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/channels [post]\nfunc CreateChannel(c *gin.Context) {\n\tvar req ChannelRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tchannel := model.Channel{\n\t\tEid:          config.GetEID(c),\n\t\tType:         req.Type,\n\t\tModelType:    1,\n\t\tKey:          req.Key,\n\t\tName:         req.Name,\n\t\tModels:       req.Models,\n\t\tConfig:       req.Config,\n\t\tModelMapping: req.ModelMapping,\n\t\tWeight:       req.Weight,\n\t\tPriority:     req.Priority,\n\t\tBaseURL:      req.BaseURL,\n\t\tOther:        req.Other,\n\t\tProviderID:   0, // Default to 0 if not provided\n\t}\n\n\t// Set ProviderID if provided in request\n\tif req.ProviderID != nil {\n\t\tchannel.ProviderID = *req.ProviderID\n\t}\n\t// Set ModelType: default 1; if provided and valid (1,2,3), use it\n\tif req.ModelType != nil {\n\t\tif model.IsValidModelType(*req.ModelType) {\n\t\t\tchannel.ModelType = *req.ModelType\n\t\t}\n\t}\n\n\tchannel.Models = model.ProcessModelNames(req.Models, channel.Type)\n\tif channel.Models == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(strings.NewReader(\"models is required\")))\n\t\treturn\n\t}\n\n\t// Auto assign ProviderID for CozeStudio channels if needed\n\tif err := autoAssignCozeStudioProvider(&channel); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif err := model.CreateChannel(&channel); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(channel))\n}\n\n// @Summary Get channel\n// @Description Get channel configuration by ID\n// @Tags Channel\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param channel_id path int true \"Channel ID\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/channels/{channel_id} [get]\nfunc GetChannel(c *gin.Context) {\n\tid, _ := strconv.ParseInt(c.Param(\"channel_id\"), 10, 64)\n\tchannel, err := model.GetChannelByID(id)\n\n\tif err != nil || channel.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(channel))\n}\n\n// @Summary Update channel\n// @Description Update existing channel configuration\n// @Tags Channel\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param channel_id path int true \"Channel ID\"\n// @Param channel body ChannelRequest true \"Update data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/channels/{channel_id} [put]\nfunc UpdateChannel(c *gin.Context) {\n\tid, _ := strconv.ParseInt(c.Param(\"channel_id\"), 10, 64)\n\tchannel, err := model.GetChannelByID(id)\n\n\tif err != nil || channel.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar req ChannelRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tchannel.Models = model.ProcessModelNames(req.Models, channel.Type)\n\n\tif channel.Models == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(strings.NewReader(\"models is required\")))\n\t\treturn\n\t}\n\n\tchannel.Type = req.Type\n\tchannel.Key = req.Key\n\tchannel.Name = req.Name\n\n\tchannel.Config = req.Config\n\tchannel.ModelMapping = req.ModelMapping\n\tchannel.Weight = req.Weight\n\tchannel.Priority = req.Priority\n\tchannel.BaseURL = req.BaseURL\n\tchannel.Other = req.Other\n\n\t// Update ProviderID if provided in request\n\tif req.ProviderID != nil {\n\t\tchannel.ProviderID = *req.ProviderID\n\t}\n\t// Update ModelType if provided and valid (1,2,3)\n\tif req.ModelType != nil {\n\t\tif model.IsValidModelType(*req.ModelType) {\n\t\t\tchannel.ModelType = *req.ModelType\n\t\t}\n\t}\n\n\t// Auto assign ProviderID for CozeStudio channels if needed\n\tif err := autoAssignCozeStudioProvider(channel); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif err := model.UpdateChannel(channel); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(channel))\n}\n\n// @Summary Delete channel\n// @Description Delete channel by ID\n// @Tags Channel\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param channel_id path int true \"Channel ID\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/channels/{channel_id} [delete]\nfunc DeleteChannel(c *gin.Context) {\n\tid, _ := strconv.ParseInt(c.Param(\"channel_id\"), 10, 64)\n\tchannel, err := model.GetChannelByID(id)\n\n\tif err == nil && channel.Eid == config.GetEID(c) {\n\t\terr = model.DeleteChannelByID(id)\n\t}\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Get all channels\n// @Description Get all channels for current enterprise\n// @Tags Channel\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param provider_id query int false \"Provider ID, 0 means platform-added keys, non-zero means get channels from other platforms\" example:\"0\"\n// @Param channel_types query string false \"Channel type filters\" example:\"1,1001,1002\"\n// @Param model_type query string false \"Model type filters: 1=LLM,2=Embedding,3=Rerank; comma-separated supported; 0 or empty means no filter\" example:\"1,3\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/channels [get]\nfunc GetChannels(c *gin.Context) {\n\tproviderId, _ := strconv.ParseInt(c.Query(\"provider_id\"), 10, 64)\n\tchannelTypesStr := c.Query(\"channel_types\")\n\tvar channelTypes []int\n\tif channelTypesStr != \"\" {\n\t\tfor _, s := range strings.Split(channelTypesStr, \",\") {\n\t\t\tif t, err := strconv.Atoi(strings.TrimSpace(s)); err == nil {\n\t\t\t\tchannelTypes = append(channelTypes, t)\n\t\t\t}\n\t\t}\n\t}\n\n\tmodelTypesStr := c.Query(\"model_type\")\n\tvar modelTypes []int\n\tif modelTypesStr != \"\" {\n\t\tfor _, s := range strings.Split(modelTypesStr, \",\") {\n\t\t\tif t, err := strconv.Atoi(strings.TrimSpace(s)); err == nil {\n\t\t\t\t// Only accept defined model types; 0 or invalid values mean no filter\n\t\t\t\tif model.IsValidModelType(t) {\n\t\t\t\t\tmodelTypes = append(modelTypes, t)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tchannels, err := model.GetChannelsByEidAndParams(config.GetEID(c), providerId, channelTypes, modelTypes)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(channels))\n}\n"
  },
  {
    "path": "api/controller/conversation.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype ConversationRequest struct {\n\tTitle   string `json:\"title\"`\n\tAgentID int64  `json:\"agent_id\" binding:\"required\"`\n}\n\ntype ConversationUpdateRequest struct {\n\tTitle string `json:\"title\"`\n}\n\ntype ConversationResponse struct {\n\tCount         int64                 `json:\"count\"`\n\tConversations []*model.Conversation `json:\"conversations\"`\n}\n\ntype ConversationListRequest struct {\n\tKeyword string `json:\"keyword\" form:\"keyword\"`\n\tOffset  int    `json:\"offset\" form:\"offset\" example:\"0\"`\n\tLimit   int    `json:\"limit\" form:\"limit\" example:\"10\"`\n}\n\n// @Summary Create conversation\n// @Description Create a new conversation\n// @Tags Conversation\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param conversation body ConversationRequest true \"Conversation data\"\n// @Success 200 {object} model.CommonResponse{data=model.Conversation} \"Success\"\n// @Router /api/conversations [post]\nfunc CreateConversation(c *gin.Context) {\n\tvar req ConversationRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tagent, err := model.GetAgentByID(eid, req.AgentID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tconversation := &model.Conversation{\n\t\tEid:     eid,\n\t\tUserID:  config.GetUserId(c),\n\t\tAgentID: req.AgentID,\n\t\tTitle:   req.Title,\n\t\tStatus:  model.ConversationStatusActive,\n\t\tModel:   agent.Model,\n\t}\n\n\tif err := model.CreateConversation(conversation); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tconversation.LoadAgent()\n\tc.JSON(http.StatusOK, model.Success.ToResponse(conversation))\n}\n\n// @Summary Get conversation details\n// @Description Get conversation details by ID\n// @Tags Conversation\n// @Produce json\n// @Security BearerAuth\n// @Param conversation_id path int true \"Conversation ID\"\n// @Success 200 {object} model.CommonResponse{data=model.Conversation} \"Success\"\n// @Router /api/conversations/{conversation_id} [get]\nfunc GetConversation(c *gin.Context) {\n\tconversationID, err := strconv.ParseInt(c.Param(\"conversation_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tconversation, err := model.GetConversationByID(config.GetEID(c), config.GetUserId(c), conversationID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(conversation))\n}\n\n// @Summary Get user conversations\n// @Description Get conversation list for current user\n// @Tags Conversation\n// @Produce json\n// @Security BearerAuth\n// @Param keyword query string false \"Search keyword\"\n// @Param offset query int false \"Offset\" default(0)\n// @Param limit query int false \"Limit\" default(10)\n// @Success 200 {object} model.CommonResponse{data=ConversationResponse} \"Success\"\n// @Router /api/conversations [get]\nfunc GetConversations(c *gin.Context) {\n\tvar req ConversationListRequest\n\tif err := c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tconversations, err := model.GetConversationsByUserID(config.GetEID(c), config.GetUserId(c))\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&ConversationResponse{\n\t\tCount:         int64(len(conversations)),\n\t\tConversations: conversations,\n\t}))\n}\n\n// @Summary Update conversation\n// @Description Update conversation information\n// @Tags Conversation\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param conversation_id path int true \"Conversation ID\"\n// @Param conversation body ConversationUpdateRequest true \"Conversation data\"\n// @Success 200 {object} model.CommonResponse{data=model.Conversation} \"Success\"\n// @Router /api/conversations/{conversation_id} [put]\nfunc UpdateConversation(c *gin.Context) {\n\tconversationID, err := strconv.ParseInt(c.Param(\"conversation_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar req ConversationUpdateRequest\n\tif err = c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tconversation, err := model.GetConversationByID(config.GetEID(c), config.GetUserId(c), conversationID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tconversation.Title = req.Title\n\n\tif err := model.UpdateConversation(conversation); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(conversation))\n}\n\ntype UserConversationListRequest struct {\n\tConversationListRequest\n\tCreatedAtStart int64 `form:\"created_at_start\"`\n\tCreatedAtEnd   int64 `form:\"created_at_end\"`\n\tAgentID        int64 `form:\"agent_id\"`\n}\n\n// @Summary Get user conversations\n// @Description Get paginated conversation list for specified user with time range filter\n// @Tags Conversation\n// @Produce json\n// @Security BearerAuth\n// @Param user_id path int true \"Target user ID\"\n// @Param keyword query string false \"Search keyword\"\n// @Param created_at_start query int64 false \"Start time (millisecond timestamp)\"\n// @Param created_at_end query int64 false \"End time (millisecond timestamp)\"\n// @Param offset query int false \"Offset\" default(0)\n// @Param limit query int false \"Limit\" default(10)\n// @Success 200 {object} model.CommonResponse{data=ConversationSummaryResponse} \"Success\"\n// @Router /api/users/{user_id}/conversations [get]\nfunc GetUserConversations(c *gin.Context) {\n\tuserID, err := strconv.ParseInt(c.Param(\"user_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tuser, err := model.GetUserByID(userID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\tvar req UserConversationListRequest\n\tif err = c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tconversations, total, err := model.GetUserConversationsWithFilter(\n\t\tconfig.GetEID(c),\n\t\tuserID,\n\t\treq.Keyword,\n\t\treq.CreatedAtStart,\n\t\treq.CreatedAtEnd,\n\t\treq.Offset,\n\t\treq.Limit,\n\t)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar summaries []*ConversationSummary = make([]*ConversationSummary, 0)\n\tfor _, conv := range conversations {\n\t\tmessageCount, msgErr := model.GetMessageCountByConversationID(conv.ConversationID)\n\t\tif msgErr != nil {\n\t\t\tmessageCount = 0\n\t\t}\n\t\tfirstMessage, firstMsgErr := model.GetFirstMessageByConversationID(conv.ConversationID)\n\t\tif firstMsgErr != nil {\n\t\t\tfirstMessage = \"\"\n\t\t}\n\t\tsummaries = append(summaries, &ConversationSummary{\n\t\t\tID:           conv.ConversationID,\n\t\t\tTitle:        conv.Title,\n\t\t\tCreatedAt:    conv.CreatedTime,\n\t\t\tSummary:      firstMessage,\n\t\t\tMessageCount: messageCount,\n\t\t\tUser:         UserInfo{user.UserID, user.Username},\n\t\t})\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&ConversationSummaryResponse{\n\t\tCount: total,\n\t\tItems: summaries,\n\t}))\n}\n\ntype UserInfo struct {\n\tUserID   int64  `json:\"user_id\"`\n\tUsername string `json:\"username\"`\n}\n\n// ConversationSummary 定义返回的会话摘要结构\ntype ConversationSummary struct {\n\tID           int64    `json:\"id\"`\n\tTitle        string   `json:\"title\"`\n\tCreatedAt    int64    `json:\"created_at\"`\n\tSummary      string   `json:\"summary\"`\n\tMessageCount int      `json:\"message_count\"`\n\tUser         UserInfo `json:\"user\" omitempty:\"true\"`\n}\n\n// ConversationSummaryResponse 分页返回结构\ntype ConversationSummaryResponse struct {\n\tCount int64                  `json:\"count\"`\n\tItems []*ConversationSummary `json:\"items\"`\n}\n\n// @Summary Get agent conversations\n// @Description Get paginated conversation list for specified agent with time range filter\n// @Tags Conversation\n// @Produce json\n// @Security BearerAuth\n// @Param agent_id path int true \"Target agent ID\"\n// @Param keyword query string false \"Search keyword\"\n// @Param created_at_start query int64 false \"Start time (millisecond timestamp)\"\n// @Param created_at_end query int64 false \"End time (millisecond timestamp)\"\n// @Param offset query int false \"Offset\" default(0)\n// @Param limit query int false \"Limit\" default(10)\n// @Success 200 {object} model.CommonResponse{data=ConversationSummaryResponse} \"Success\"\n// @Router /api/agents/{agent_id}/conversations [get]\nfunc GetAgentConversations(c *gin.Context) {\n\tagentID, err := strconv.ParseInt(c.Param(\"agent_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar req UserConversationListRequest\n\tif err = c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tconversations, total, err := model.GetAgentConversationsWithFilter(\n\t\tconfig.GetEID(c),\n\t\tagentID,\n\t\treq.Keyword,\n\t\treq.CreatedAtStart,\n\t\treq.CreatedAtEnd,\n\t\treq.Offset,\n\t\treq.Limit,\n\t)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar summaries []*ConversationSummary = make([]*ConversationSummary, 0)\n\tfor _, conv := range conversations {\n\t\tmessageCount, msgErr := model.GetMessageCountByConversationID(conv.ConversationID)\n\t\tif msgErr != nil {\n\t\t\tmessageCount = 0\n\t\t}\n\t\tfirstMessage, firstMsgErr := model.GetFirstMessageByConversationID(conv.ConversationID)\n\t\tif firstMsgErr != nil {\n\t\t\tfirstMessage = \"\"\n\t\t}\n\t\tconv.LoadUser()\n\t\tsummaries = append(summaries, &ConversationSummary{\n\t\t\tID:           conv.ConversationID,\n\t\t\tTitle:        conv.Title,\n\t\t\tCreatedAt:    conv.CreatedTime,\n\t\t\tSummary:      firstMessage,\n\t\t\tMessageCount: messageCount,\n\t\t\tUser:         UserInfo{conv.User.UserID, conv.User.Username},\n\t\t})\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&ConversationSummaryResponse{\n\t\tCount: total,\n\t\tItems: summaries,\n\t}))\n}\n\n// @Summary Delete conversation\n// @Description Delete specified conversation\n// @Tags Conversation\n// @Produce json\n// @Security BearerAuth\n// @Param conversation_id path int true \"Conversation ID\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/conversations/{conversation_id} [delete]\nfunc DeleteConversation(c *gin.Context) {\n\tconversationID, err := strconv.ParseInt(c.Param(\"conversation_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tif err := model.DeleteConversation(config.GetEID(c), conversationID); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n"
  },
  {
    "path": "api/controller/coze.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// GetCozeAllWorkspaces Get all Coze workspaces\n// @Summary Get all Coze workspaces\n// @Description Get all Coze workspaces list under current enterprise\n// @Tags Coze\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param provider_id query int false \"Provider ID (optional, for backward compatibility)\"\n// @Success 200 {object} model.CommonResponse{data=[]coze.Workspace}\n// @Router /api/coze/workspaces [get]\nfunc GetCozeAllWorkspaces(c *gin.Context) {\n\teid := config.GetEID(c)\n\tproviderID, _ := strconv.ParseInt(c.DefaultQuery(\"provider_id\", \"0\"), 10, 64)\n\tprovider, err := model.GetProviderByEidAndProviderTypeWithOptionalID(eid, int64(model.ProviderTypeCozeCn), providerID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\tser := service.CozeService{\n\t\tProvider: provider,\n\t}\n\tworkspaces, err := ser.GetAllWorkspace()\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(workspaces))\n}\n\n// GetCozeAllBots Get all bots in specified workspace\n// @Summary Get workspace bots list\n// @Description Get all bots list under specified Coze workspace\n// @Tags Coze\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param workspace_id path string true \"Workspace ID\"\n// @Param provider_id query int false \"Provider ID (optional, for backward compatibility)\"\n// @Success 200 {object} model.CommonResponse{data=[]coze.Bot}\n// @Router /api/coze/workspaces/{workspace_id}/bots [get]\nfunc GetCozeAllBots(c *gin.Context) {\n\tworkspaceID := c.Param(\"workspace_id\")\n\tif workspaceID == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tproviderID, _ := strconv.ParseInt(c.DefaultQuery(\"provider_id\", \"0\"), 10, 64)\n\tprovider, err := model.GetProviderByEidAndProviderTypeWithOptionalID(eid, int64(model.ProviderTypeCozeCn), providerID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\tser := service.CozeService{\n\t\tProvider: provider,\n\t}\n\n\tbots, err := ser.GetAllBot(workspaceID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 缓存所有bot图标（使用新的基于UploadFile的方式）\n\tlogger.SysLogf(\"开始缓存 %d 个bot图标\", len(bots))\n\tfor i := range bots {\n\t\tif bots[i].IconURL != \"\" {\n\t\t\tlogger.SysLogf(\"开始缓存bot图标，bot_id: %s, icon_url: %s\", bots[i].BotID, bots[i].IconURL)\n\t\t\tcachedIconURL, err := ser.CacheBotIconWithUploadFile(bots[i].BotID, bots[i].IconURL, eid)\n\t\t\tif err != nil {\n\t\t\t\t// 如果缓存失败，记录日志但继续执行\n\t\t\t\tlogger.SysLogf(\"缓存bot图标失败，bot_id: %s, error: %v\", bots[i].BotID, err)\n\t\t\t\t// 不中断整个流程\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// 使用缓存的图标URL\n\t\t\tlogger.SysLogf(\"成功缓存bot图标，bot_id: %s, cached_url: %s\", bots[i].BotID, cachedIconURL)\n\t\t\tbots[i].IconURL = cachedIconURL\n\t\t}\n\t}\n\t//重新合并请求\n\n\tvar botIds []string\n\tfor _, bot := range bots {\n\t\tbotIds = append(botIds, bot.BotID)\n\t}\n\n\tser.UpdateCozeChannel(botIds, &provider)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(bots))\n}\n"
  },
  {
    "path": "api/controller/department.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// DepartmentRequest represents the request body for department operations\ntype DepartmentRequest struct {\n\tPDID int64  `json:\"pdid\"`\n\tName string `json:\"name\" binding:\"required\"`\n\tSort int    `json:\"sort\"`\n}\n\ntype UpdateDepartmentRequest struct {\n\tName string `json:\"name\" binding:\"required\"`\n\tSort int    `json:\"sort\"`\n}\n\n// DepartmentResponse represents the response for department list\ntype DepartmentResponse struct {\n\tDepartments []*model.Department `json:\"departments\"`\n\tTotal       int                 `json:\"total\"`\n}\n\n// DepartmentTreeResponse represents the response for department tree\ntype DepartmentTreeResponse struct {\n\tTree []*model.DepartmentNode `json:\"tree\"`\n}\n\ntype BindRequest struct {\n\tBid    int64 `json:\"bid\"`\n\tFrom   int   `json:\"from\"`\n\tUserID int64 `json:\"user_id\"`\n}\ntype UnBindRequest struct {\n\tFrom   int   `json:\"from\"`\n\tUserID int64 `json:\"user_id\"`\n}\n\n// CreateDepartment creates a new department\n// @Summary Create a new department\n// @Description Create a new department in the organization\n// @Tags Department\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body DepartmentRequest true \"Department information\"\n// @Success 200 {object} model.CommonResponse{data=model.Department} \"Success\"\n// @Failure 400 {object} model.CommonResponse \"Bad request\"\n// @Failure 500 {object} model.CommonResponse \"Internal server error\"\n// @Router /api/departments [post]\nfunc CreateDepartment(c *gin.Context) {\n\tvar req DepartmentRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Create department object\n\tdept := &model.Department{\n\t\tPDID: req.PDID,\n\t\tEID:  config.GetEID(c),\n\t\tName: req.Name,\n\t\tSort: req.Sort,\n\t\tFrom: model.DepartmentFromBackend,\n\t}\n\n\t// Create department in database\n\tif err := model.CreateDepartment(dept); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(dept))\n}\n\n// GetDepartment retrieves a department by ID\n// @Summary Get department by ID\n// @Description Get department details by ID\n// @Tags Department\n// @Produce json\n// @Security BearerAuth\n// @Param did path int true \"Department ID\"\n// @Success 200 {object} model.CommonResponse{data=model.Department} \"Success\"\n// @Failure 404 {object} model.CommonResponse \"Department not found\"\n// @Failure 500 {object} model.CommonResponse \"Internal server error\"\n// @Router /api/departments/{did} [get]\nfunc GetDepartment(c *gin.Context) {\n\tdidStr := c.Param(\"did\")\n\tdid, err := strconv.ParseInt(didStr, 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tdept, err := model.GetDepartmentByID(config.GetEID(c), did)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(dept))\n}\n\n// UpdateDepartment updates an existing department\n// @Summary Update department\n// @Description Update an existing department\n// @Tags Department\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param did path int true \"Department ID\"\n// @Param request body UpdateDepartmentRequest true \"Department information\"\n// @Success 200 {object} model.CommonResponse{data=model.Department} \"Success\"\n// @Failure 400 {object} model.CommonResponse \"Bad request\"\n// @Failure 404 {object} model.CommonResponse \"Department not found\"\n// @Failure 500 {object} model.CommonResponse \"Internal server error\"\n// @Router /api/departments/{did} [put]\nfunc UpdateDepartment(c *gin.Context) {\n\tdidStr := c.Param(\"did\")\n\tdid, err := strconv.ParseInt(didStr, 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar req UpdateDepartmentRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Get existing department\n\tdept, err := model.GetDepartmentByID(config.GetEID(c), did)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Update department fields\n\tdept.Name = req.Name\n\tdept.Sort = req.Sort\n\n\t// Update department in database\n\tif err := model.UpdateDepartment(dept); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(dept))\n}\n\n// DeleteDepartment deletes a department\n// @Summary Delete department\n// @Description Delete a department and optionally its children\n// @Tags Department\n// @Produce json\n// @Security BearerAuth\n// @Param did path int true \"Department ID\"\n// @Param delete_children query bool false \"Delete children\" default(false)\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Failure 400 {object} model.CommonResponse \"Bad request\"\n// @Failure 404 {object} model.CommonResponse \"Department not found\"\n// @Failure 500 {object} model.CommonResponse \"Internal server error\"\n// @Router /api/departments/{did} [delete]\nfunc DeleteDepartment(c *gin.Context) {\n\tdidStr := c.Param(\"did\")\n\tdid, err := strconv.ParseInt(didStr, 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tdeleteChildrenStr := c.DefaultQuery(\"delete_children\", \"false\")\n\tdeleteChildren := deleteChildrenStr == \"true\"\n\n\tif err := model.DeleteDepartment(config.GetEID(c), did, deleteChildren); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// GetDepartments retrieves all departments\n// @Summary Get all departments\n// @Description Get all departments for the current enterprise\n// @Tags Department\n// @Produce json\n// @Security BearerAuth\n// @Param keyword query string false \"Search keyword\"\n// @Param limit query int false \"Limit results\" default(100)\n// @Success 200 {object} model.CommonResponse{data=DepartmentResponse} \"Success\"\n// @Failure 500 {object} model.CommonResponse \"Internal server error\"\n// @Router /api/departments [get]\nfunc GetDepartments(c *gin.Context) {\n\tkeyword := c.Query(\"keyword\")\n\tlimitStr := c.DefaultQuery(\"limit\", \"100\")\n\tlimit, _ := strconv.Atoi(limitStr)\n\n\tdepartments, err := model.SearchDepartments(config.GetEID(c), keyword, limit)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(DepartmentResponse{\n\t\tDepartments: departments,\n\t\tTotal:       len(departments),\n\t}))\n}\n\n// GetChildDepartments retrieves child departments\n// @Summary Get child departments\n// @Description Get all child departments for a specific department\n// @Tags Department\n// @Produce json\n// @Security BearerAuth\n// @Param pdid path int true \"Parent Department ID\"\n// @Success 200 {object} model.CommonResponse{data=DepartmentResponse} \"Success\"\n// @Failure 400 {object} model.CommonResponse \"Bad request\"\n// @Failure 500 {object} model.CommonResponse \"Internal server error\"\n// @Router /api/departments/children/{pdid} [get]\nfunc GetChildDepartments(c *gin.Context) {\n\tpdidStr := c.Param(\"pdid\")\n\tpdid, err := strconv.ParseInt(pdidStr, 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tdepartments, err := model.GetChildDepartments(config.GetEID(c), pdid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(DepartmentResponse{\n\t\tDepartments: departments,\n\t\tTotal:       len(departments),\n\t}))\n}\n\n// GetDepartmentTree retrieves the department hierarchy\n// @Summary Get department tree\n// @Description Get hierarchical structure of departments\n// @Tags Department\n// @Produce json\n// @Security BearerAuth\n// @Param from query int false \"Filter by source (0: backend [default], 1: wecom，2：dingtalk)\" default(0)\n// @Success 200 {object} model.CommonResponse{data=DepartmentTreeResponse} \"Success\"\n// @Failure 500 {object} model.CommonResponse \"Internal server error\"\n// @Router /api/departments/tree [get]\nfunc GetDepartmentTree(c *gin.Context) {\n\tfromStr := c.Query(\"from\")\n\tfrom, err := strconv.Atoi(fromStr)\n\tif err != nil {\n\t\tfrom = model.DepartmentFromBackend\n\t}\n\ttree, err := model.GetDepartmentTree(config.GetEID(c), from)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(DepartmentTreeResponse{\n\t\tTree: tree,\n\t}))\n}\n\n// @Summary Bind member to department\n// @Description Bind a member to specific department with given role\n// @Tags Department\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body BindRequest true \"Binding request parameters\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/departments/bind-member [post]\nfunc DepartmentBindMember(c *gin.Context) {\n\teid := config.GetEID(c)\n\t// Replace query params with body params\n\tvar req BindRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Now use req.Bid, req.From, req.UserID instead of the query params\n\tbid := req.Bid\n\tfrom := req.From\n\tuserID := req.UserID\n\n\tvar user *model.User\n\terr := model.DB.Where(\"eid = ? AND user_id = ?\", eid, userID).First(&user).Error\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar memberBinding *model.MemberBinding\n\tmemberBinding, _ = model.GetMemberBindingByMidAndFrom(user.UserID, from)\n\n\tif memberBinding != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"user already bound\"))\n\t\treturn\n\t}\n\n\terr = model.DB.Where(\"eid =? AND id =? AND `from` =? AND mid = 0\", eid, bid, from).First(&memberBinding).Error\n\tif err != nil || memberBinding == nil {\n\t\tc.JSON(http.StatusBadRequest, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tmemberBinding.MID = user.UserID\n\tmemberBinding.Status = model.MemberBindingStatusActive\n\n\terr = model.UpdateMemberBinding(memberBinding)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Unbind member from department\n// @Description Remove a member's binding from department\n// @Tags Department\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body UnBindRequest true \"Unbinding request parameters\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/departments/bind-member [delete]\nfunc DepartmentUnbindMember(c *gin.Context) {\n\teid := config.GetEID(c)\n\tvar req UnBindRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\tvar user *model.User\n\terr := model.DB.Where(\"eid = ? AND user_id = ?\", eid, req.UserID).First(&user).Error\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tmemberBinding, err := model.GetMemberBindingByMidAndFrom(user.UserID, req.From)\n\tif err != nil || memberBinding == nil {\n\t\tc.JSON(http.StatusBadRequest, model.NotFound.ToResponse(\"user bind not bound\"))\n\t\treturn\n\t}\n\n\tmemberBinding.MID = 0\n\tmemberBinding.Status = model.MemberBindingStatusInactive\n\terr = model.UpdateMemberBinding(memberBinding)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n"
  },
  {
    "path": "api/controller/dify.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/dify\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n)\n\n// GetDifyAppInfo 获取 DIFY 应用基本信息\n// @Summary 获取 DIFY 应用基本信息\n// @Description 根据渠道ID获取 DIFY 应用的基本信息\n// @Tags DIFY\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param channelId path int true \"渠道ID\"\n// @Success 200 {object} model.CommonResponse{data=dify.AppInfoResponse}\n// @Router /api/dify/info/{channelId} [get]\nfunc GetDifyAppInfo(c *gin.Context) {\n\tchannelIdStr := c.Param(\"channelId\")\n\tchannelId, err := strconv.ParseInt(channelIdStr, 10, 64)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"解析渠道ID失败: %v\", err)\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"无效的渠道ID\"))\n\t\treturn\n\t}\n\n\tlogger.SysLogf(\"🔍 获取DIFY应用信息 - 渠道ID: %d\", channelId)\n\n\t// 获取渠道信息\n\tchannel, err := model.GetChannelByID(channelId)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"获取渠道信息失败: %v\", err)\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(\"渠道不存在\"))\n\t\treturn\n\t}\n\n\t// 验证渠道类型\n\tif channel.Type != model.ChannelApiDify {\n\t\tlogger.SysErrorf(\"渠道类型不匹配: 期望 %d, 实际 %d\", model.ChannelApiDify, channel.Type)\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"渠道类型不是DIFY\"))\n\t\treturn\n\t}\n\n\t// 构建元数据\n\tmeta := &meta.Meta{\n\t\tChannelId: int(channelId),\n\t\tAPIKey:    channel.Key,\n\t}\n\tif channel.BaseURL != nil {\n\t\tmeta.BaseURL = *channel.BaseURL\n\t}\n\n\t// 创建适配器并获取应用信息\n\tadaptor := &dify.DifyInfoAdaptor{}\n\tappInfo, err := adaptor.GetAppInfo(meta)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"获取DIFY应用信息失败: %v\", err)\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlogger.SysLogf(\"✅ DIFY应用信息获取成功 - 应用名称: %s\", appInfo.Name)\n\tc.JSON(http.StatusOK, model.Success.ToResponse(appInfo))\n}\n\n// GetDifyAppParameters 获取 DIFY 应用参数配置\n// @Summary 获取 DIFY 应用参数配置\n// @Description 根据渠道ID获取 DIFY 应用的参数配置信息\n// @Tags DIFY\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param channelId path int true \"渠道ID\"\n// @Success 200 {object} model.CommonResponse{data=dify.AppParametersResponse}\n// @Router /api/dify/parameters/{channelId} [get]\nfunc GetDifyAppParameters(c *gin.Context) {\n\tchannelIdStr := c.Param(\"channelId\")\n\tchannelId, err := strconv.ParseInt(channelIdStr, 10, 64)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"解析渠道ID失败: %v\", err)\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"无效的渠道ID\"))\n\t\treturn\n\t}\n\n\tlogger.SysLogf(\"🔍 获取DIFY应用参数 - 渠道ID: %d\", channelId)\n\n\t// 获取渠道信息\n\tchannel, err := model.GetChannelByID(channelId)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"获取渠道信息失败: %v\", err)\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(\"渠道不存在\"))\n\t\treturn\n\t}\n\n\t// 验证渠道类型\n\tif channel.Type != model.ChannelApiDify {\n\t\tlogger.SysErrorf(\"渠道类型不匹配: 期望 %d, 实际 %d\", model.ChannelApiDify, channel.Type)\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"渠道类型不是DIFY\"))\n\t\treturn\n\t}\n\n\t// 构建元数据\n\tmeta := &meta.Meta{\n\t\tChannelId: int(channelId),\n\t\tAPIKey:    channel.Key,\n\t}\n\tif channel.BaseURL != nil {\n\t\tmeta.BaseURL = *channel.BaseURL\n\t}\n\n\t// 创建适配器并获取应用参数\n\tadaptor := &dify.DifyInfoAdaptor{}\n\tappParams, err := adaptor.GetAppParameters(meta)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"获取DIFY应用参数失败: %v\", err)\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlogger.SysLogf(\"✅ DIFY应用参数获取成功 - 输入表单项数: %d\", len(appParams.UserInputForm))\n\tc.JSON(http.StatusOK, model.Success.ToResponse(appParams))\n}\n"
  },
  {
    "path": "api/controller/email.go",
    "content": "package controller\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/smtp\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/jordan-wright/email\"\n\t\"gorm.io/gorm\"\n)\n\nconst (\n\tverificationCodeLength = 6\n\tduration               = 15\n\tcodeExpiration         = duration * time.Minute\n)\n\ntype SendVerificationEmailRequest struct {\n\tEmail string `json:\"email\" binding:\"required,email\" example:\"user@126.com\"` // 需要验证的邮箱地址\n}\n\n// @Summary 发送邮箱验证码\n// @Description 向指定邮箱发送6位数字验证码（有效期10分钟）\n// @Tags Email\n// @Accept json\n// @Produce json\n// @Param data body SendVerificationEmailRequest true \"邮箱验证请求\"\n// @Success 200 {object} model.CommonResponse{data=string} \"成功响应：验证码已发送\"\n// @Failure 400 {object} model.CommonResponse \"参数错误\"\n// @Failure 500 {object} model.CommonResponse \"服务器内部错误\"\n// @Router /api/email/send_verification [post]\nfunc SendVerificationEmail(c *gin.Context) {\n\tvar req SendVerificationEmailRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tcode, err := common.GenerateRandomCode(verificationCodeLength)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tnow := time.Now().UTC().UnixMilli()\n\tcurrentDayStart := now - (now % 86400000) // 计算当日0点时间戳（毫秒）\n\n\tvar existingVC model.VerificationCode\n\terr = model.DB.Where(\"target = ? AND type = 'email' AND created_time >= ?\", req.Email, currentDayStart).First(&existingVC).Error\n\n\tif err == nil {\n\t\texistingVC.Code = code\n\t\texistingVC.ExpiresAt = now + int64(codeExpiration.Milliseconds())\n\t\texistingVC.DailyCount++\n\t\terr = model.DB.Save(&existingVC).Error\n\t} else if errors.Is(err, gorm.ErrRecordNotFound) {\n\t\tnewVC := model.VerificationCode{\n\t\t\tType:       model.VerificationCodeTypeEmail,\n\t\t\tTarget:     req.Email,\n\t\t\tCode:       code,\n\t\t\tExpiresAt:  now + int64(codeExpiration.Milliseconds()),\n\t\t\tDailyCount: 1,\n\t\t}\n\t\terr = model.DB.Create(&newVC).Error\n\t}\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t_ = common.RedisSet(\"email_verification:\"+req.Email, code, codeExpiration)\n\n\teid := config.GetEID(c)\n\te := email.NewEmail()\n\te.To = []string{req.Email}\n\te.Subject = \"邮箱验证码\"\n\te.Text = []byte(fmt.Sprintf(\"您的验证码是：%s，有效期%d分钟\", code, duration))\n\n\tauth, from, host, port, isSsl, err := service.GetSmtpConfig(eid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NetworkError.ToResponse(fmt.Errorf(\"failed to get SMTP auth: %w\", err)))\n\t\treturn\n\t}\n\tif from == \"\" {\n\t\tc.JSON(http.StatusInternalServerError, model.NetworkError.ToResponse(errors.New(\"SMTP from address is empty\")))\n\t\treturn\n\t}\n\te.From = from\n\n\tif err := common.SendEmail(e, auth, isSsl, host, port); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NetworkError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(\"Verification code has been sent\"))\n}\n\ntype SendTestEmailRequest struct {\n\tHost     string `json:\"host\" binding:\"required\" example:\"smtp.126.com\"`\n\tPort     int    `json:\"port\" binding:\"required\" example:\"465\"`\n\tUsername string `json:\"username\" binding:\"required\" example:\"user@126.com\"`\n\tPassword string `json:\"password\" binding:\"required\" example:\"123456\"`\n\tFrom     string `json:\"from\" binding:\"required\" example:\"user@126.com\"`\n\tIsSSL    bool   `json:\"is_ssl\" example:\"true\"`\n\tTo       string `json:\"to\" binding:\"required\" example:\"user@126.com\"`\n}\n\n// @Summary 发送邮箱测试邮件\n// @Description 向指定邮箱发送测试信息\n// @Tags Email\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param data body SendTestEmailRequest true \"邮箱测试请求\"\n// @Success 200 {object} model.CommonResponse{data=string} \"成功响应：已发送\"\n// @Failure 400 {object} model.CommonResponse \"参数错误\"\n// @Failure 500 {object} model.CommonResponse \"服务器内部错误\"\n// @Router /api/email/send_test [post]\nfunc SendTestEmail(c *gin.Context) {\n\tvar req SendTestEmailRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\te := email.NewEmail()\n\te.To = []string{req.To}\n\te.Subject = \"53AI Hub SMTP设置测试邮件！\"\n\te.Text = []byte(\"收到此邮件表示配置无误\")\n\n\tfrom := req.From\n\tauth := smtp.PlainAuth(\n\t\t\"\",\n\t\treq.Username,\n\t\treq.Password,\n\t\treq.Host,\n\t)\n\n\t// 使用配置中的值\n\thost := req.Host\n\tport := req.Port\n\tisSsl := req.IsSSL\n\te.From = from\n\n\tif err := common.SendEmail(e, auth, isSsl, host, port); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NetworkError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(\"Test email has been sent\"))\n}\n\n// UpdateUserEmailRequest 更新用户邮箱请求结构体\ntype UpdateUserEmailRequest struct {\n\tEmail string `json:\"email\" binding:\"required,email\"`      // 新邮箱地址\n\tCode  string `json:\"code\" binding:\"required,min=6,max=6\"` // 验证码（6位数字）\n}\n\n// UpdateUserEmail 绑定、更新用户邮箱\n// @Summary 绑定、更新用户邮箱\n// @Description 通过验证码验证后更新用户绑定的邮箱\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"用户ID\"\n// @Param data body UpdateUserEmailRequest true \"新邮箱及验证码\"\n// @Success 200 {object} model.CommonResponse{data=model.User} \"更新成功\"\n// @Failure 400 {object} model.CommonResponse \"参数错误\"\n// @Failure 401 {object} model.CommonResponse \"验证码无效\"\n// @Failure 409 {object} model.CommonResponse \"邮箱已被绑定\"\n// @Router /api/users/{id}/email [patch]\nfunc UpdateUserEmail(c *gin.Context) {\n\t// 解析路径参数ID\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar req UpdateUserEmailRequest\n\tif err = c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 验证验证码\n\tvalid, err := common.VerifyEmailCode(req.Email, req.Code)\n\tif err != nil {\n\t\tc.JSON(http.StatusUnauthorized, model.AuthFailed.ToResponse(err))\n\t\treturn\n\t}\n\tif !valid {\n\t\tc.JSON(http.StatusUnauthorized, model.AuthFailed.ToNewErrorResponse(model.InvalidVerificationCode))\n\t\treturn\n\t}\n\n\t// 获取当前用户\n\tuser, err := model.GetUserByID(id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 检查邮箱是否已被其他用户绑定\n\texistingUser, err := model.GetUserByEmail(user.Eid, req.Email)\n\tif err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\tif existingUser.UserID > 0 && existingUser.UserID != id {\n\t\terr := errors.New(\"This email has been bound by another user\")\n\t\tc.JSON(http.StatusConflict, model.AuthFailed.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\t// 更新邮箱\n\tuser.Email = req.Email\n\tif err := user.Update(false); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(user))\n}\n"
  },
  {
    "path": "api/controller/enterprise.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/common/utils\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// Compare behavior snippet from 53AIHub/model/enterprise.go:\n// resulf api\ntype EnterpriseResponse struct {\n\tEnterprise model.Enterprise `json:\"enterprise\"`\n}\n\n// Compare behavior snippet from 53AIHub/model/enterprise.go:\n// resulf api\n\n// @Summary Get enterprise information\n// @Description Retrieve detailed information of a specific enterprise by ID\n// @Tags Enterprise\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Enterprise ID\"\n// @Success 200 {object} model.Enterprise \"Enterprise information\"\n// @Router /api/enterprises/{id} [get]\nfunc GetEnterprise(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil || id <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tenterprise, err := model.GetEnterpriseModel(id)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(EnterpriseResponse{\n\t\tEnterprise: *enterprise,\n\t}))\n}\n\n// CreateEnterprise handles enterprise creation\n// @Summary      Create a new enterprise\n// @Tags         Enterprise\n// @Accept       json\n// @Produce      json\n// @Security BearerAuth\n// @Param        enterprise  body   model.Enterprise  true  \"Enterprise data\"\n// @Success      200  {object}  model.CommonResponse{data=EnterpriseResponse}  \"Success\"\n// @Router       /api/enterprises [post]\nfunc CreateEnterprise(c *gin.Context) {\n\tenterprise := model.Enterprise{}\n\terr := c.ShouldBindJSON(&enterprise)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\terr = model.CreateEnterpriseModel(&enterprise)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(nil))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(EnterpriseResponse{\n\t\tEnterprise: enterprise,\n\t}))\n}\n\n// UpdateEnterpriseRequest defines the request structure for updating enterprise information\ntype UpdateEnterpriseRequest struct {\n\tDisplayName  string `json:\"display_name\" binding:\"required\" example:\"Enterprise Name\"`\n\tLogo         string `json:\"logo\" binding:\"required\" example:\"http://a.com/a.jpg\"`\n\tIco          string `json:\"ico\" example:\"http://a.com/favicon.ico\"`\n\tKeywords     string `json:\"keywords\" example:\"AI,Hub,Agent\"`\n\tCopyright    string `json:\"copyright\" example:\"© 2023 Company Name\"`\n\tType         string `json:\"type\" example:\"independent、enterprise、industry\"`\n\tBanner       string `json:\"banner\" example:\"http://a.com/banner.jpg\"`\n\tLanguage     string `json:\"language\" binding:\"required\" example:\"zh-cn\"`\n\tDescription  string `json:\"description\" example:\"Description Test\"`\n\tTemplateType string `json:\"template_type\" example:\"default\"`\n\tLayoutType   string `json:\"layout_type\" example:\"1\"`\n}\n\n// @Summary Update enterprise information\n// @Description Update enterprise information\n// @Tags Enterprise\n// @Accept json\n// @Produce json\n// @Param id  path  int  true  \"Enterprise ID\"\n// @Param request body UpdateEnterpriseRequest true \"Enterprise information\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/enterprises/{id} [put]\nfunc UpdateEnterprise(c *gin.Context) {\n\tvar req UpdateEnterpriseRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar currentEid int64\n\tuser, err := model.GetLoginUser(c)\n\tif err == nil {\n\t\tif user.Role < model.RoleAdminUser {\n\t\t\tc.JSON(http.StatusForbidden, model.ForbiddenError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t\tcurrentEid = config.GetEID(c)\n\t} else {\n\t\t// 兼容初始化\n\t\tif err = model.DB.Where(\"eid = ?\", 1).First(&user).Error; err != nil && err.Error() == \"record not found\" {\n\t\t\tcurrentEid = 1\n\t\t} else {\n\t\t\tc.JSON(http.StatusForbidden, model.ForbiddenError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\tif currentEid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tenterprise, err := model.GetEnterpriseModel(currentEid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tif req.Type != model.EnterpriseTypeIndependent {\n\t\tparams := map[string]interface{}{\n\t\t\t\"from\": \"enterprise\",\n\t\t\t\"type\": req.Type,\n\t\t}\n\t\t_, err = service.IsFeatureAvailable(c, \"internal_user\", params)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusForbidden, model.FeatureNotAvailableError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\n\toldEnterprise := *enterprise\n\n\t// 构建要更新的字段映射\n\tupdateData := make(map[string]interface{})\n\n\tif req.DisplayName != \"\" {\n\t\tupdateData[\"display_name\"] = req.DisplayName\n\t\tenterprise.DisplayName = req.DisplayName\n\t}\n\n\tif req.Logo != \"\" {\n\t\tupdateData[\"logo\"] = req.Logo\n\t\tenterprise.Logo = req.Logo\n\t}\n\n\tif req.Ico != \"\" {\n\t\tupdateData[\"ico\"] = req.Ico\n\t\tenterprise.Ico = req.Ico\n\t}\n\n\tupdateData[\"keywords\"] = req.Keywords\n\tenterprise.Keywords = req.Keywords\n\n\tupdateData[\"copyright\"] = req.Copyright\n\tenterprise.Copyright = req.Copyright\n\n\tif req.Type != \"\" {\n\t\tupdateData[\"type\"] = req.Type\n\t\tenterprise.Type = req.Type\n\t}\n\tif req.Language != \"\" {\n\t\tupdateData[\"language\"] = req.Language\n\t\tenterprise.Language = req.Language\n\t}\n\tupdateData[\"description\"] = req.Description\n\tenterprise.Description = req.Description\n\n\tif req.TemplateType != \"\" {\n\t\tupdateData[\"template_type\"] = req.TemplateType\n\t\tenterprise.TemplateType = req.TemplateType\n\t}\n\n\tupdateData[\"layout_type\"] = req.LayoutType\n\tenterprise.LayoutType = req.LayoutType\n\n\tif err := enterprise.PartialUpdateEnterprise(updateData); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Prepare for logging\n\tfieldMap := map[string]string{\n\t\t\"DisplayName\": \"站点名称\",\n\t\t\"Type\":        \"站点类型\",\n\t}\n\n\tmodel.LogEntityChange(\n\t\t\"站点信息\",\n\t\tmodel.SystemLogActionUpdate,\n\t\tcurrentEid,\n\t\tconfig.GetUserId(c),\n\t\tconfig.GetUserNickname(c),\n\t\tmodel.SystemLogModuleSiteInfo,\n\t\toldEnterprise,\n\t\t*enterprise,\n\t\tutils.GetClientIP(c),\n\t\tfieldMap,\n\t)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(enterprise))\n}\n\n// DeleteEnterprise handles enterprise deletion\n// @Summary      Delete an enterprise\n// @Description  Delete an existing enterprise by ID\n// @Tags         Enterprise\n// @Accept       json\n// @Produce      json\n// @Security BearerAuth\n// @Param        id  path  int  true  \"Enterprise ID\"\n// @Success      200  {object}  model.CommonResponse  \"Success\"\n// @Router       /api/enterprises/{id} [delete]\nfunc DeleteEnterprise(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\tenterprise, err := model.GetEnterpriseModel(id)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\terr = enterprise.Delete()\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// UpdateEnterpriseAttribute handles partial update of enterprise attributes\n// @Summary      Partial update of enterprise attributes\n// @Description  Update specific attributes of an existing enterprise by ID\n// @Tags         Enterprise\n// @Accept       json\n// @Produce      json\n// @Security BearerAuth\n// @Param        id  path  int  true  \"Enterprise ID\"\n// @Param        updateData  body  map[string]interface{}  true  \"Update data for enterprise attributes\"\n// @Success      200  {object}  model.CommonResponse{data=EnterpriseResponse} \"Success\"\n// @Router       /api/enterprises/{id} [patch]\nfunc UpdateEnterpriseAttribute(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tenterprise, err := model.GetEnterpriseModel(id)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar updateData map[string]interface{}\n\tif err := c.ShouldBindJSON(&updateData); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tif err := enterprise.PartialUpdateEnterprise(updateData); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(EnterpriseResponse{\n\t\tEnterprise: *enterprise,\n\t}))\n}\n\n// @Summary Get current enterprise information\n// @Description Retrieve information of current enterprise (when not logged in)\n// @Tags Enterprise\n// @Accept json\n// @Produce json\n// @Success 200 {object} model.Enterprise \"Current enterprise information\"\n// @Router /api/enterprises/current [get]\nfunc GetCurrentEnterprise(c *gin.Context) {\n\t// Get default enterprise ID\n\tcurrentEid := config.GetEID(c)\n\tif currentEid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\tenterprise, err := model.GetEnterpriseModel(currentEid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tparams := map[string]interface{}{\n\t\t\"from\": \"enterprise\",\n\t}\n\tisFeatureAvailable, _ := service.IsFeatureAvailable(c, \"wecom\", params)\n\tif isFeatureAvailable {\n\t\tenterprise.LoadWecomCorpInfo(config.GetWecomSuiteID(), 0)\n\t\tenterprise.LoadDingtalkCorpInfo(config.GetDingtalkSuiteID(), 0)\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(EnterpriseResponse{\n\t\tEnterprise: *enterprise,\n\t}))\n}\n\ntype GetIsSaasResponse struct {\n\tIsSaas bool `json:\"is_saas\" example:\"true\"` // Whether the system is running in SAAS mode\n}\n\n// GetIsSaas retrieves the system's SAAS mode status\n// @Summary Get SAAS mode status\n// @Description Get whether the system is running in SAAS mode\n// @Tags Enterprise\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=GetIsSaasResponse} \"Success\"\n// @Router /api/enterprises/is_saas [get]\nfunc GetIsSaas(c *gin.Context) {\n\tc.JSON(http.StatusOK, model.Success.ToResponse(GetIsSaasResponse{\n\t\tIsSaas: config.IS_SAAS,\n\t}))\n}\n\ntype HomePageResponse struct {\n\tAgentCount  int64 `json:\"agent_count\"`\n\tUserCount   int64 `json:\"user_count\"`\n\tPromptCount int64 `json:\"prompt_count\"`\n\tAILinkCount int64 `json:\"ai_link_count\"`\n}\n\n// @Summary Get homepage information\n// @Description Get site application info, enterprise info, agent count and user count\n// @Tags Enterprise\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=HomePageResponse} \"Success\"\n// @Router /api/enterprises/homepage [get]\nfunc GetHomePage(c *gin.Context) {\n\teid := config.GetEID(c)\n\tif eid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar agentCount int64\n\tif err := model.DB.Model(&model.Agent{}).Where(\"eid = ?\", eid).Count(&agentCount).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar userCount int64\n\tif err := model.DB.Model(&model.User{}).Where(\"eid = ? AND type = ?\", eid, model.UserTypeRegistered).Count(&userCount).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar promptCount int64\n\tstatusArray := []int{model.PromptStatusNormal, model.PromptStatusDisable}\n\tif err := model.DB.Model(&model.Prompt{}).Where(\"eid = ? AND status in (?)\", eid, statusArray).Count(&promptCount).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar aiLinkCount int64\n\tif err := model.DB.Model(&model.AILink{}).Where(\"eid =?\", eid).Count(&aiLinkCount).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(HomePageResponse{\n\t\tAgentCount:  agentCount,\n\t\tUserCount:   userCount,\n\t\tPromptCount: promptCount,\n\t\tAILinkCount: aiLinkCount,\n\t}))\n}\n\n// @Summary Get enterprise banner\n// @Description Get banner information of the current enterprise\n// @Tags Enterprise\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse\n// @Router /api/enterprises/banner [get]\nfunc GetEnterpriseBanner(c *gin.Context) {\n\tcurrentEid := config.GetEID(c)\n\tif currentEid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tenterprise, err := model.GetEnterpriseModel(currentEid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(map[string]string{\n\t\t\"banner\": enterprise.Banner,\n\t}))\n}\n\ntype UpdateEnterpriseBannerRequest struct {\n\tBanner string `json:\"banner\" binding:\"required\" example:\"http://a.com/banner.jpg\"`\n}\n\n// @Summary Update enterprise banner\n// @Description Update banner information of the current enterprise\n// @Tags Enterprise\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body UpdateEnterpriseBannerRequest true \"Banner information\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/enterprises/banner [put]\nfunc UpdateEnterpriseBanner(c *gin.Context) {\n\tvar req UpdateEnterpriseBannerRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tcurrentEid := config.GetEID(c)\n\tif currentEid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tenterprise, err := model.GetEnterpriseModel(currentEid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Update Banner\n\tupdateData := map[string]interface{}{\n\t\t\"banner\": req.Banner,\n\t}\n\n\tif err := enterprise.PartialUpdateEnterprise(updateData); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(map[string]string{\n\t\t\"banner\": req.Banner,\n\t}))\n}\n\ntype UpdateEnterpriseTemplateTypeRequest struct {\n\tTemplateType string `json:\"template_type\" binding:\"required\" example:\"default\"`\n}\n\n// @Summary Update enterprise template type\n// @Description Update template type information of the current enterprise\n// @Tags Enterprise\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body UpdateEnterpriseTemplateTypeRequest true \"Template type information\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/enterprises/template_type [put]\nfunc UpdateEnterpriseTemplateType(c *gin.Context) {\n\tvar req UpdateEnterpriseTemplateTypeRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tcurrentEid := config.GetEID(c)\n\tif currentEid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tenterprise, err := model.GetEnterpriseModel(currentEid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Update template type\n\tupdateData := map[string]interface{}{\n\t\t\"template_type\": req.TemplateType,\n\t}\n\n\tif err := enterprise.PartialUpdateEnterprise(updateData); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      currentEid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleTemplate,\n\t\tAction:   model.SystemLogActionUpdate,\n\t\tContent:  \"编辑模板风格\",\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(map[string]string{\n\t\t\"template_type\": req.TemplateType,\n\t}))\n}\n\n// @Summary Get enterprise template type\n// @Description Get template type information of the current enterprise\n// @Tags Enterprise\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse\n// @Router /api/enterprises/template_type [get]\nfunc GetEnterpriseTemplateType(c *gin.Context) {\n\tcurrentEid := config.GetEID(c)\n\tif currentEid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tenterprise, err := model.GetEnterpriseModel(currentEid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(map[string]string{\n\t\t\"template_type\": enterprise.TemplateType,\n\t}))\n}\n"
  },
  {
    "path": "api/controller/enterprise_config.go",
    "content": "package controller\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n\t\"gorm.io/gorm\"\n)\n\n// 只返回类型和启用状态\ntype ConfigTypeStatus struct {\n\t// smtp, auth_sso\n\tType    string `json:\"type\"`\n\tEnabled bool   `json:\"enabled\"`\n}\n\n// GetEnterpriseConfigTypes 获取所有企业配置的类型及启用状态\n// @Summary 获取所有企业配置的类型及启用状态\n// @Description 获取所有企业配置的列表，只返回对应类型 type 的 enable 状态\n// @Tags EnterpriseConfig\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=[]ConfigTypeStatus}\n// @Router /api/enterprise-configs [get]\nfunc GetEnterpriseConfigTypes(c *gin.Context) {\n\teid := config.GetEID(c)\n\n\tconfigs, err := service.GetEnterpriseConfigs(eid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tresult := make([]ConfigTypeStatus, 0)\n\tfor _, config := range configs {\n\t\tresult = append(result, ConfigTypeStatus{\n\t\t\tType:    config.Type,\n\t\t\tEnabled: config.Enabled,\n\t\t})\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(result))\n}\n\n// GetEnterpriseConfig 获取单个企业配置详情\n// @Summary 获取单个企业配置详情\n// @Description 通过 Type 获取单个企业配置详情\n// @Tags EnterpriseConfig\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param type path string true \"配置类型: smtp, auth_sso\"\n// @Success 200 {object} model.CommonResponse{data=model.EnterpriseConfig}\n// @Router /api/enterprise-configs/{type} [get]\nfunc GetEnterpriseConfig(c *gin.Context) {\n\teid := config.GetEID(c)\n\tconfigType := c.Param(\"type\")\n\n\tconfig, err := service.GetEnterpriseConfigByType(eid, configType)\n\tif err != nil {\n\t\t// 如果没有找到配置，返回一个默认配置\n\t\tdefaultcontent, err := model.GetEnterpriseConfigDefaultContent(configType)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t}\n\t\tconfig = &model.EnterpriseConfig{\n\t\t\tEID:     eid,\n\t\t\tType:    configType,\n\t\t\tContent: defaultcontent,\n\t\t\tEnabled: false,\n\t\t}\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(config))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(config))\n}\n\n// IsEnterpriseConfigEnabled 检查企业配置是否启用\n// @Summary 检查企业配置是否启用\n// @Description 检查指定类型的企业配置是否启用（content中enable字段为true表示启用）\n// @Tags EnterpriseConfig\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param type path string true \"配置类型: smtp, auth_sso\"\n// @Success 200 {object} model.CommonResponse{data=bool}\n// @Router /api/enterprise-configs/{type}/enabled [get]\nfunc IsEnterpriseConfigEnabled(c *gin.Context) {\n\teid := config.GetEID(c)\n\tconfigType := c.Param(\"type\")\n\n\tenabled, err := service.IsEnterpriseConfigEnabled(eid, configType)\n\tif err != nil {\n\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\tc.JSON(http.StatusOK, model.Success.ToResponse(false))\n\t\t\treturn\n\t\t}\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(enabled))\n}\n\ntype SaveEnterpriseConfigRequest struct {\n\t// smtp {\\\"smtp_host\\\":\\\"smtp_host.com\\\",\\\"smtp_username\\\":\\\"smtp_username@xx.com\\\",\\\"smtp_port\\\":\\\"465\\\",\\\"smtp_password\\\":\\\"xxxxxx\\\",\\\"smtp_from\\\":\\\"smtp_username@xx.com\\\",\\\"smtp_is_ssl\\\":true,\\\"smtp_to\\\":\\\"smtp_to\\\"}\n\tContent string `json:\"content\" binding:\"required\"`\n\tEnabled bool   `json:\"enabled\"`\n}\n\n// SaveEnterpriseConfig 保存单个企业配置详情\n// @Summary 保存单个企业配置详情\n// @Description 通过 Type 保存单个企业配置详情，如果不存在则创建，否则更新\n// @Tags EnterpriseConfig\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param type path string true \"配置类型: smtp, auth_sso\"\n// @Param config body SaveEnterpriseConfigRequest true \"企业配置\"\n// @Success 200 {object} model.CommonResponse{data=model.EnterpriseConfig}\n// @Router /api/enterprise-configs/{type} [post]\nfunc SaveEnterpriseConfig(c *gin.Context) {\n\teid := config.GetEID(c)\n\tconfigType := c.Param(\"type\")\n\n\tvar req SaveEnterpriseConfigRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tconfig, err := service.SaveEnterpriseConfig(eid, configType, req.Content, req.Enabled)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(config))\n}\n\n// ToggleEnterpriseConfig 开关某个企业配置\n// @Summary 开关某个企业配置\n// @Description 开关某个 EnterpriseConfig，通过 Type\n// @Tags EnterpriseConfig\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param type path string true \"配置类型: smtp, auth_sso\"\n// @Success 200 {object} model.CommonResponse{data=bool}\n// @Router /api/enterprise-configs/{type}/toggle [put]\nfunc ToggleEnterpriseConfig(c *gin.Context) {\n\teid := config.GetEID(c)\n\tconfigType := c.Param(\"type\")\n\n\tenabled, err := service.ToggleEnterpriseConfig(eid, configType)\n\tif err != nil {\n\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\tc.JSON(http.StatusOK, model.NotFound.ToResponse(\"请先保存设置\"))\n\t\t\treturn\n\t\t}\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(enabled))\n}\n"
  },
  {
    "path": "api/controller/group.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\t\"errors\"\n\n\t\"github.com/53AI/53AIHub/common/utils\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype BaseGroupRequest struct {\n\tGroupName string `json:\"group_name\" example:\"group_name\"`\n\tSort      int64  `json:\"sort\" example:\"0\"`\n}\n\ntype GroupRequest struct {\n\tGroupType int64 `json:\"group_type\" example:\"1\"` // Group type: 1=USER_GROUP_TYPE, 2=AI_LINKS_TYPE, 3=AGENT_TYPE, 4=INTERNAL_USER_GROUP_TYPE， 5=SYSTEM_PROMPT_TYPE 6=PERSONAL_PROMPT_TYPE\n\tBaseGroupRequest\n}\n\ntype BatchSubmitGroupRequestItem struct {\n\tGroupId int64 `json:\"group_id\" example:\"0\"`\n\tBaseGroupRequest\n}\n\ntype BatchSubmitGroupsRequest struct {\n\tGroups []BatchSubmitGroupRequestItem `json:\"groups\"`\n}\n\n// @Summary Create a new group\n// @Description Create a new group with the provided information\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param group body GroupRequest true \"Group information (GroupType: 1=USER_GROUP_TYPE, 2=AI_LINKS_TYPE, 3=AGENT_TYPE, 4=INTERNAL_USER_GROUP_TYPE， 5=SYSTEM_PROMPT_TYPE 6=PERSONAL_PROMPT_TYPE)\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups [post]\n// @Router /api/groups/prompt [post]\nfunc CreateGroup(c *gin.Context) {\n\tvar groupRequest GroupRequest\n\tif err := c.ShouldBindJSON(&groupRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tpath := c.Request.URL.Path\n\tif path == \"/api/groups/prompt\" {\n\t\tgroupRequest.GroupType = model.PERSONAL_PROMPT_TYPE\n\t}\n\n\tgroup := model.Group{\n\t\tEid:       config.GetEID(c),\n\t\tCreatedBy: config.GetUserId(c),\n\t\tGroupName: groupRequest.GroupName,\n\t\tGroupType: groupRequest.GroupType,\n\t\tSort:      groupRequest.Sort,\n\t}\n\tif err := model.CreateGroup(&group); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(group))\n}\n\n// @Summary Get group information\n// @Description Retrieve detailed information of a specific group by ID\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id} [get]\nfunc GetGroup(c *gin.Context) {\n\tid, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tgroup, err := model.GetGroupByID(int64(id))\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(group))\n}\n\n// @Summary Update group information\n// @Description Update an existing group with the provided information\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param group body GroupRequest true \"Group information to update\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id} [put]\nfunc UpdateGroup(c *gin.Context) {\n\tid, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar groupRequest GroupRequest\n\tif err = c.ShouldBindJSON(&groupRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tgroup, err := model.GetGroupByID(int64(id))\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tgroup.GroupName = groupRequest.GroupName\n\tgroup.GroupType = groupRequest.GroupType\n\tgroup.Sort = groupRequest.Sort\n\n\tif err := model.UpdateGroup(group); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(group))\n}\n\n// @Summary Delete a group\n// @Description Delete a specific group by ID\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id} [delete]\nfunc DeleteGroup(c *gin.Context) {\n\tid, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tgroup, err := model.GetGroupByID(int64(id))\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tif err := model.DeleteGroupByID(int64(id)); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Get groups by type\n// @Description Retrieve a list of groups based on the specified type\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param group_type path int true \"Group type\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/type/{group_type} [get]\nfunc GetGroups(c *gin.Context) {\n\tgroupType, err := strconv.Atoi(c.Param(\"group_type\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tgroups, err := model.GetGroupsByEid(eid, int64(groupType))\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(groups))\n}\n\n// @Summary Get groups by type\n// @Description Retrieve a list of groups based on the specified type\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Param group_type path int true \"Group type\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/type/current/{group_type} [get]\nfunc GetCurrentGroups(c *gin.Context) {\n\tgroupType, err := strconv.Atoi(c.Param(\"group_type\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tif groupType == model.USER_GROUP_TYPE {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t}\n\n\teid := config.GetEID(c)\n\tgroups, err := model.GetGroupsByEid(eid, int64(groupType))\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(groups))\n}\n\n// @Summary Batch submit groups\n// @Description Batch submit groups with the provided information\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param group_type path int true \"Group type\"\n// @Param groups body BatchSubmitGroupsRequest true \"Groups information to submit\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/type/{group_type} [post]\nfunc BatchSubmitGroups(c *gin.Context) {\n\tgroupType, err := strconv.Atoi(c.Param(\"group_type\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar request BatchSubmitGroupsRequest\n\tif err := c.ShouldBindJSON(&request); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\teid := config.GetEID(c)\n\tvar GroupModels []model.Group\n\tfor _, group := range request.Groups {\n\t\tGroupModels = append(GroupModels, model.Group{\n\t\t\tGroupId:   group.GroupId,\n\t\t\tEid:       eid,\n\t\t\tCreatedBy: config.GetUserId(c),\n\t\t\tGroupName: group.GroupName,\n\t\t\tGroupType: int64(groupType),\n\t\t\tSort:      group.Sort,\n\t\t})\n\t}\n\tif err := model.BatchSubmitGroups(int64(groupType), eid, GroupModels); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.GetModuleByGroupType(int64(groupType)),\n\t\tAction:   model.SystemLogActionUpdate,\n\t\tContent:  \"管理了分组\",\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// AddAgentsToGroupRequest defines the request structure for adding Agents to a Group\ntype AddAgentsToGroupRequest struct {\n\tAgentIDs []int64 `json:\"agent_ids\" binding:\"required\" example:\"1,2,3\"` // Array of Agent IDs\n}\n\n// AddResourcesToGroupRequest defines the request structure for adding resources to a Group\ntype AddResourcesToGroupRequest struct {\n\tResourceIDs []int64 `json:\"resource_ids\" binding:\"required\" example:\"1,2,3\"` // Array of Resource IDs\n\tResourceType string `json:\"resource_type\" binding:\"required\" example:\"agent, prompt, ai_link\"` // Type of resource\n}\n\n// @Summary Add Agents to Group\n// @Description Add multiple Agents to a specified Group\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param request body AddAgentsToGroupRequest true \"Array of Agent IDs\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id}/agents [post]\nfunc AddAgentsToGroup(c *gin.Context) {\n\t// Parse Group ID\n\tgroupID, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Get Group information, verify its existence\n\tgroup, err := model.GetGroupByID(int64(groupID))\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Verify enterprise permissions\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Parse request body\n\tvar request AddAgentsToGroupRequest\n\tif err := c.ShouldBindJSON(&request); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Begin transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\t// Batch create ResourcePermission records\n\tfor _, agentID := range request.AgentIDs {\n\t\tpermission := model.ResourcePermission{\n\t\t\tGroupID:      int64(groupID),\n\t\t\tResourceID:   agentID,\n\t\t\tResourceType: model.ResourceTypeAgent,\n\t\t\tPermission:   model.PermissionRead,\n\t\t}\n\n\t\t// Check if the same permission record already exists\n\t\tvar count int64\n\t\tif err := tx.Model(&model.ResourcePermission{}).\n\t\t\tWhere(\"group_id = ? AND resource_id = ? AND resource_type = ?\",\n\t\t\t\tgroupID, agentID, model.ResourceTypeAgent).\n\t\t\tCount(&count).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\n\t\t// If it doesn't exist, create it\n\t\tif count == 0 {\n\t\t\tif err := tx.Create(&permission).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Add Resources to Group\n// @Description Add multiple resources to a specified Group\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param request body AddResourcesToGroupRequest true \"Array of Resource IDs and Resource Type\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id}/resources [post]\nfunc AddResourcesToGroup(c *gin.Context) {\n\t// Parse Group ID\n\tgroupID, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Get Group information, verify its existence\n\tgroup, err := model.GetGroupByID(int64(groupID))\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Verify enterprise permissions\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Parse request body\n\tvar request AddResourcesToGroupRequest\n\tif err := c.ShouldBindJSON(&request); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Validate resource type\n\tvalidTypes := map[string]bool{\n\t\tmodel.ResourceTypeAgent:   true,\n\t\tmodel.ResourceTypeAILink:  true,\n\t\tmodel.ResourceTypePrompt:  true,\n\t}\n\t\n\tif !validTypes[request.ResourceType] {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(errors.New(\"invalid resource type\")))\n\t\treturn\n\t}\n\n\t// Begin transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\t// Batch create ResourcePermission records\n\tfor _, resourceID := range request.ResourceIDs {\n\t\tpermission := model.ResourcePermission{\n\t\t\tGroupID:      int64(groupID),\n\t\t\tResourceID:   resourceID,\n\t\t\tResourceType: request.ResourceType,\n\t\t\tPermission:   model.PermissionRead,\n\t\t}\n\n\t\t// Check if the same permission record already exists\n\t\tvar count int64\n\t\tif err := tx.Model(&model.ResourcePermission{}).\n\t\t\tWhere(\"group_id = ? AND resource_id = ? AND resource_type = ?\",\n\t\t\t\tgroupID, resourceID, request.ResourceType).\n\t\t\tCount(&count).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\n\t\t// If it doesn't exist, create it\n\t\tif count == 0 {\n\t\t\tif err := tx.Create(&permission).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// RemoveAgentsFromGroupRequest defines the request structure for removing Agents from a Group\ntype RemoveAgentsFromGroupRequest struct {\n\tAgentIDs []int64 `json:\"agent_ids\" binding:\"required\" example:\"1,2,3\"` // Array of Agent IDs to remove\n}\n\n// RemoveResourcesFromGroupRequest defines the request structure for removing resources from a Group\ntype RemoveResourcesFromGroupRequest struct {\n\tResourceIDs []int64 `json:\"resource_ids\" binding:\"required\" example:\"1,2,3\"` // Array of Resource IDs to remove\n\tResourceType string `json:\"resource_type\" binding:\"required\" example:\"agent, prompt, ai_link\"` // Type of resource\n}\n\n// @Summary Remove Agents from Group\n// @Description Remove multiple Agents from a specified Group\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param request body RemoveAgentsFromGroupRequest true \"Array of Agent IDs to remove\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id}/agents [delete]\nfunc RemoveAgentsFromGroup(c *gin.Context) {\n\t// Parse Group ID\n\tgroupID, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Get Group information, verify its existence\n\tgroup, err := model.GetGroupByID(int64(groupID))\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Verify enterprise permissions\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Parse request body\n\tvar request RemoveAgentsFromGroupRequest\n\tif err := c.ShouldBindJSON(&request); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// If AgentIDs is empty, return success directly\n\tif len(request.AgentIDs) == 0 {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Begin transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\t// Batch delete ResourcePermission records\n\tif err := tx.Where(\"group_id = ? AND resource_id IN ? AND resource_type = ?\",\n\t\tgroupID, request.AgentIDs, model.ResourceTypeAgent).\n\t\tDelete(&model.ResourcePermission{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Remove Resources from Group\n// @Description Remove multiple resources from a specified Group\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param request body RemoveResourcesFromGroupRequest true \"Array of Resource IDs and Resource Type to remove\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id}/resources [delete]\nfunc RemoveResourcesFromGroup(c *gin.Context) {\n\t// Parse Group ID\n\tgroupID, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Get Group information, verify its existence\n\tgroup, err := model.GetGroupByID(int64(groupID))\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Verify enterprise permissions\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Parse request body\n\tvar request RemoveResourcesFromGroupRequest\n\tif err := c.ShouldBindJSON(&request); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Validate resource type\n\tvalidTypes := map[string]bool{\n\t\tmodel.ResourceTypeAgent:   true,\n\t\tmodel.ResourceTypeAILink:  true,\n\t\tmodel.ResourceTypePrompt:  true,\n\t}\n\t\n\tif !validTypes[request.ResourceType] {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(errors.New(\"invalid resource type\")))\n\t\treturn\n\t}\n\n\t// If ResourceIDs is empty, return success directly\n\tif len(request.ResourceIDs) == 0 {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Begin transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\t// Batch delete ResourcePermission records\n\tif err := tx.Where(\"group_id = ? AND resource_id IN ? AND resource_type = ?\",\n\t\tgroupID, request.ResourceIDs, request.ResourceType).\n\t\tDelete(&model.ResourcePermission{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// GroupAgentListRequest defines the request structure for getting agent list in a group\ntype GroupAgentListRequest struct {\n\tKeyword string `form:\"keyword\"` // Search keyword for agent name\n\tOffset  int    `form:\"offset\"`  // Pagination offset\n\tLimit   int    `form:\"limit\"`   // Items per page\n}\n\n// GroupAgentListResponse defines the response structure for getting agent list in a group\ntype GroupAgentListResponse struct {\n\tCount  int64         `json:\"count\"`  // Total count of agents\n\tAgents []model.Agent `json:\"agents\"` // List of agents\n}\n\n// @Summary Get all Agents in a Group\n// @Description Get all Agent information associated with a specified Group, sorted in descending order\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param keyword query string false \"Agent name keyword for fuzzy search\"\n// @Param offset query int false \"Pagination offset\" default(0)\n// @Param limit query int false \"Pagination limit\" default(10)\n// @Success 200 {object} model.CommonResponse{data=GroupAgentListResponse} \"Success\"\n// @Router /api/groups/{id}/agents [get]\nfunc GetGroupAgents(c *gin.Context) {\n\t// Parse group ID\n\tgroupID, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Get group information, verify its existence\n\tgroup, err := model.GetGroupByID(int64(groupID))\n\tif err != nil {\n\t\t// c.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(&GroupUsersResponse{\n\t\t\tTotal:       0,\n\t\t\tPermissions: make([]*model.ResourcePermission, 0),\n\t\t}))\n\t\treturn\n\t}\n\n\t// Verify enterprise permissions\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Bind request parameters\n\tvar req GroupAgentListRequest\n\tif err := c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Set default pagination parameters\n\tif req.Limit <= 0 {\n\t\treq.Limit = 10 // Default 10 items per page\n\t}\n\tif req.Offset < 0 {\n\t\treq.Offset = 0 // Offset cannot be negative\n\t}\n\n\t// Query all resource permission records associated with this group\n\tvar permissions []model.ResourcePermission\n\tif err := model.DB.Where(\"group_id = ? AND resource_type = ?\",\n\t\tgroupID, model.ResourceTypeAgent).Find(&permissions).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// If there are no associated agents, return an empty array\n\tif len(permissions) == 0 {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(GroupAgentListResponse{\n\t\t\tCount:  0,\n\t\t\tAgents: []model.Agent{},\n\t\t}))\n\t\treturn\n\t}\n\n\t// Extract all agent IDs\n\tvar agentIDs []int64\n\tfor _, perm := range permissions {\n\t\tagentIDs = append(agentIDs, perm.ResourceID)\n\t}\n\n\t// Build query\n\tquery := model.DB.Model(&model.Agent{}).Where(\"agent_id IN ?\", agentIDs)\n\n\t// If there is a keyword, add fuzzy search condition\n\tif req.Keyword != \"\" {\n\t\tquery = query.Where(\"name LIKE ?\", \"%\"+req.Keyword+\"%\")\n\t}\n\n\t// Get total count\n\tvar total int64\n\tif err := query.Count(&total).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Apply pagination and get data\n\tvar agents []model.Agent\n\tif err := query.Order(\"sort DESC\").Offset(req.Offset).Limit(req.Limit).Find(&agents).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Return result\n\tc.JSON(http.StatusOK, model.Success.ToResponse(GroupAgentListResponse{\n\t\tCount:  total,\n\t\tAgents: agents,\n\t}))\n}\n\n// @Summary Get all Resources in a Group\n// @Description Get all resource information associated with a specified Group, sorted in descending order\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param keyword query string false \"Resource name keyword for fuzzy search\"\n// @Param offset query int false \"Pagination offset\" default(0)\n// @Param limit query int false \"Pagination limit\" default(10)\n// @Param resource_type query string false \"Resource type。agent, prompt, ai_link\" default(agent)\n// @Success 200 {object} model.CommonResponse{data=GroupResourceListResponse} \"Success\"\n// @Router /api/groups/{id}/resources [get]\nfunc GetGroupResources(c *gin.Context) {\n\t// Parse group ID\n\tgroupID, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Get group information, verify its existence\n\tgroup, err := model.GetGroupByID(int64(groupID))\n\tif err != nil {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(&GroupResourceListResponse{\n\t\t\tCount:     0,\n\t\t\tResources: make([]interface{}, 0),\n\t\t}))\n\t\treturn\n\t}\n\n\t// Verify enterprise permissions\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Bind request parameters\n\tvar req GroupResourceListRequest\n\tif err := c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Set default pagination parameters\n\tif req.Limit <= 0 {\n\t\treq.Limit = 10 // Default 10 items per page\n\t}\n\tif req.Offset < 0 {\n\t\treq.Offset = 0 // Offset cannot be negative\n\t}\n\n\t// Set default resource type\n\tif req.ResourceType == \"\" {\n\t\treq.ResourceType = model.ResourceTypeAgent\n\t}\n\n\t// Validate resource type\n\tvalidTypes := map[string]bool{\n\t\tmodel.ResourceTypeAgent:   true,\n\t\tmodel.ResourceTypeAILink:  true,\n\t\tmodel.ResourceTypePrompt:  true,\n\t}\n\t\n\tif !validTypes[req.ResourceType] {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(errors.New(\"invalid resource type\")))\n\t\treturn\n\t}\n\n\t// Query all resource permission records associated with this group\n\tvar permissions []model.ResourcePermission\n\tif err := model.DB.Where(\"group_id = ? AND resource_type = ?\",\n\t\tgroupID, req.ResourceType).Find(&permissions).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// If there are no associated resources, return an empty array\n\tif len(permissions) == 0 {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(GroupResourceListResponse{\n\t\t\tCount:     0,\n\t\t\tResources: []interface{}{},\n\t\t}))\n\t\treturn\n\t}\n\n\t// Extract all resource IDs\n\tvar resourceIDs []int64\n\tfor _, perm := range permissions {\n\t\tresourceIDs = append(resourceIDs, perm.ResourceID)\n\t}\n\n\t// Handle different resource types\n\tswitch req.ResourceType {\n\tcase model.ResourceTypeAgent:\n\t\thandleAgentResources(c, resourceIDs, req.Keyword, req.Offset, req.Limit)\n\t\t\n\tcase model.ResourceTypeAILink:\n\t\thandleAILinkResources(c, resourceIDs, req.Keyword, int64(req.Offset), int64(req.Limit), group.Eid)\n\t\t\n\tcase model.ResourceTypePrompt:\n\t\thandlePromptResources(c, resourceIDs, req.Keyword, int64(req.Offset), int64(req.Limit), group.Eid)\n\t}\n}\n\n// GroupResourceListRequest defines the request structure for getting resource list in a group\ntype GroupResourceListRequest struct {\n\tKeyword      string `form:\"keyword\"`      // Search keyword for resource name\n\tOffset       int    `form:\"offset\"`       // Pagination offset\n\tLimit        int    `form:\"limit\"`        // Items per page\n\tResourceType string `form:\"resource_type\"`// Type of resource\n}\n\n// GroupResourceListResponse defines the response structure for getting resource list in a group\ntype GroupResourceListResponse struct {\n\tCount     int64       `json:\"count\"`      // Total count of resources\n\tResources interface{} `json:\"resources\"`  // List of resources\n}\n\n// BatchAddUsersToGroupRequest defines the request structure for batch adding users to a group\ntype BatchAddUsersToGroupRequest struct {\n\tUserIDs       []int64 `json:\"user_ids\" example:\"1,2,3\"`       // Array of user IDs\n\tDepartmentIDs []int64 `json:\"department_ids\" example:\"1,2,3\"` // Array of department IDs\n}\n\n// @Summary Batch add users and departments to group\n// @Description Add multiple users and departments to a specified group, either by department ID or by directly specifying user IDs\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param request body BatchAddUsersToGroupRequest true \"Array of department IDs, user IDs, and department IDs to add as resources\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id}/users/batch [post]\nfunc BatchAddUsersToGroup(c *gin.Context) {\n\t// Parse Group ID\n\tgroupID, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Get Group information, verify its existence\n\tgroup, err := model.GetGroupByID(int64(groupID))\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Verify enterprise permissions\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Parse request body\n\tvar request BatchAddUsersToGroupRequest\n\tif err := c.ShouldBindJSON(&request); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Begin transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\t// Process user resources\n\tif len(request.UserIDs) > 0 {\n\t\t// Collect all user IDs to be added\n\t\tallUserIDs := make([]int64, 0)\n\n\t\t// Add directly specified user IDs\n\t\tif len(request.UserIDs) > 0 {\n\t\t\tallUserIDs = append(allUserIDs, request.UserIDs...)\n\t\t}\n\n\t\t// Remove duplicates\n\t\tuserIDMap := make(map[int64]bool)\n\t\tuniqueUserIDs := make([]int64, 0)\n\t\tfor _, userID := range allUserIDs {\n\t\t\tif !userIDMap[userID] {\n\t\t\t\tuniqueUserIDs = append(uniqueUserIDs, userID)\n\t\t\t\tuserIDMap[userID] = true\n\t\t\t}\n\t\t}\n\n\t\t// Batch create ResourcePermission records for users\n\t\tfor _, userID := range uniqueUserIDs {\n\t\t\tpermission := model.ResourcePermission{\n\t\t\t\tGroupID:      int64(groupID),\n\t\t\t\tResourceID:   userID,\n\t\t\t\tResourceType: model.ResourceTypeUser,\n\t\t\t\tPermission:   model.PermissionRead,\n\t\t\t}\n\n\t\t\t// Check if the same permission record already exists\n\t\t\tvar count int64\n\t\t\tif err := tx.Model(&model.ResourcePermission{}).\n\t\t\t\tWhere(\"group_id = ? AND resource_id = ? AND resource_type = ?\",\n\t\t\t\t\tgroupID, userID, model.ResourceTypeUser).\n\t\t\t\tCount(&count).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If it doesn't exist, create it\n\t\t\tif count == 0 {\n\t\t\t\tif err := tx.Create(&permission).Error; err != nil {\n\t\t\t\t\ttx.Rollback()\n\t\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Process department resources\n\tif len(request.DepartmentIDs) > 0 {\n\t\t// Remove duplicates\n\t\tdeptIDMap := make(map[int64]bool)\n\t\tuniqueDeptIDs := make([]int64, 0)\n\t\tfor _, deptID := range request.DepartmentIDs {\n\t\t\tif !deptIDMap[deptID] {\n\t\t\t\tuniqueDeptIDs = append(uniqueDeptIDs, deptID)\n\t\t\t\tdeptIDMap[deptID] = true\n\t\t\t}\n\t\t}\n\n\t\t// Batch create ResourcePermission records for departments\n\t\tfor _, deptID := range uniqueDeptIDs {\n\t\t\tpermission := model.ResourcePermission{\n\t\t\t\tGroupID:      int64(groupID),\n\t\t\t\tResourceID:   deptID,\n\t\t\t\tResourceType: model.ResourceTypeDepartment,\n\t\t\t\tPermission:   model.PermissionRead,\n\t\t\t}\n\n\t\t\t// Check if the same permission record already exists\n\t\t\tvar count int64\n\t\t\tif err := tx.Model(&model.ResourcePermission{}).\n\t\t\t\tWhere(\"group_id = ? AND resource_id = ? AND resource_type = ?\",\n\t\t\t\t\tgroupID, deptID, model.ResourceTypeDepartment).\n\t\t\t\tCount(&count).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If it doesn't exist, create it\n\t\t\tif count == 0 {\n\t\t\t\tif err := tx.Create(&permission).Error; err != nil {\n\t\t\t\t\ttx.Rollback()\n\t\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Get all users in a group\n// @Description Get all user information associated with a specified group, sorted in descending order\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id}/users [get]\ntype GroupUsersRequest struct {\n\tKeyword      string `form:\"keyword\" json:\"keyword\"`\n\tResourceType string `form:\"resource_type\" json:\"resource_type\"`\n\tOffset       int    `form:\"offset\" json:\"offset\" default:\"0\"`\n\tLimit        int    `form:\"limit\" json:\"limit\" default:\"10\"`\n}\n\n// GroupUsersResponse 定义获取组内用户和部门的响应结构\ntype GroupUsersResponse struct {\n\tTotal       int64                       `json:\"total\"`\n\tPermissions []*model.ResourcePermission `json:\"permissions\"`\n}\n\n// GetGroupUsers gets users and departments in a group\n// @Summary Get users and departments in a group\n// @Description Get users and departments in a group with search and pagination support\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param keyword query string false \"Search keyword\"\n// @Param resource_type query string false \"Resource type: user,department,all\" default(all)\n// @Param offset query int false \"Pagination offset\" default(0)\n// @Param limit query int false \"Page size\" default(10)\n// @Success 200 {object} model.CommonResponse{data=GroupUsersResponse} \"Success\"\n// @Router /api/groups/{id}/users [get]\nfunc GetGroupUsers(c *gin.Context) {\n\tgroupID, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tgroup, err := model.GetGroupByID(int64(groupID))\n\tif err != nil {\n\t\t// c.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(&GroupUsersResponse{\n\t\t\tTotal:       0,\n\t\t\tPermissions: make([]*model.ResourcePermission, 0),\n\t\t}))\n\t\treturn\n\t}\n\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar req GroupUsersRequest\n\tif err := c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif req.Limit <= 0 {\n\t\treq.Limit = 10\n\t}\n\tif req.ResourceType == \"\" {\n\t\treq.ResourceType = \"all\"\n\t}\n\n\tvar resourceTypes []string\n\tswitch req.ResourceType {\n\tcase \"user\":\n\t\tresourceTypes = []string{model.ResourceTypeUser}\n\tcase \"department\":\n\t\tresourceTypes = []string{model.ResourceTypeDepartment}\n\tdefault:\n\t\tresourceTypes = []string{model.ResourceTypeUser, model.ResourceTypeDepartment}\n\t}\n\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\tvar total int64\n\tvar permissions []*model.ResourcePermission\n\n\tquery := tx.Model(&model.ResourcePermission{}).\n\t\tWhere(\"group_id = ?\", groupID).\n\t\tWhere(\"resource_type IN ?\", resourceTypes)\n\n\tif req.Keyword != \"\" {\n\t\tquery = query.Where(`\n\t\t\t(resource_type = ? AND resource_id IN (\n\t\t\t\tSELECT user_id FROM users WHERE \n\t\t\t\t(nickname LIKE ? OR mobile LIKE ? OR email LIKE ?) AND eid = ?\n\t\t\t)) OR \n\t\t\t(resource_type = ? AND resource_id IN (\n\t\t\t\tSELECT did FROM departments WHERE name LIKE ? AND eid = ?\n\t\t\t))\n\t\t`,\n\t\t\tmodel.ResourceTypeUser, \"%\"+req.Keyword+\"%\", \"%\"+req.Keyword+\"%\", \"%\"+req.Keyword+\"%\", group.Eid,\n\t\t\tmodel.ResourceTypeDepartment, \"%\"+req.Keyword+\"%\", group.Eid)\n\t}\n\n\tif err := query.Count(&total).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif err := query.Offset(req.Offset).Limit(req.Limit).Find(&permissions).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 获取用户和部门的详细信息\n\tvar userMap = make(map[int64]*model.User)\n\tvar departmentMap = make(map[int64]*model.Department)\n\n\t// 提取用户ID和部门ID\n\tvar userIDs []int64\n\tvar departmentIDs []int64\n\n\tfor _, perm := range permissions {\n\t\tif perm.ResourceType == model.ResourceTypeUser {\n\t\t\tuserIDs = append(userIDs, perm.ResourceID)\n\t\t} else if perm.ResourceType == model.ResourceTypeDepartment {\n\t\t\tdepartmentIDs = append(departmentIDs, perm.ResourceID)\n\t\t}\n\t}\n\n\t// 查询用户详细信息\n\tif len(userIDs) > 0 {\n\t\tvar users []*model.User\n\t\tif err := tx.Where(\"user_id IN ?\", userIDs).Find(&users).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\n\t\t// 构建用户ID到用户对象的映射\n\t\tfor _, user := range users {\n\t\t\tuser.LoadDepartments(model.DepartmentFromBackend)\n\t\t\tuserMap[user.UserID] = user\n\t\t}\n\t}\n\n\t// 查询部门详细信息\n\tif len(departmentIDs) > 0 {\n\t\tvar departments []*model.Department\n\t\tif err := tx.Where(\"did IN ?\", departmentIDs).Find(&departments).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\n\t\t// 构建部门ID到部门对象的映射\n\t\tfor _, dept := range departments {\n\t\t\tdepartmentMap[dept.DID] = dept\n\t\t}\n\t}\n\n\t// 回填数据到permissions\n\tfor _, perm := range permissions {\n\t\tif perm.ResourceType == model.ResourceTypeUser {\n\t\t\tif user, ok := userMap[perm.ResourceID]; ok {\n\t\t\t\tperm.User = user\n\t\t\t}\n\t\t} else if perm.ResourceType == model.ResourceTypeDepartment {\n\t\t\tif dept, ok := departmentMap[perm.ResourceID]; ok {\n\t\t\t\tperm.Department = dept\n\t\t\t}\n\t\t}\n\t}\n\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&GroupUsersResponse{\n\t\tTotal:       total,\n\t\tPermissions: permissions,\n\t}))\n}\n\n// @Summary Remove users from group\n// @Description Remove multiple users from the specified group\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param request body RemoveUsersFromGroupRequest true \"Array of resource permission record IDs\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id}/users [delete]\n// RemoveUsersFromGroupRequest\ntype RemoveUsersFromGroupRequest struct {\n\tPermissionIDs []int64 `json:\"permission_ids\" binding:\"required\" example:\"1,2,3\"` // 资源权限记录ID数组\n}\n\n// @Summary Remove users from group\n// @Description Remove multiple users from the specified group\n// @Tags Group\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Group ID\"\n// @Param request body RemoveUsersFromGroupRequest true \"Array of resource permission record IDs\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/groups/{id}/users [delete]\nfunc RemoveUsersFromGroup(c *gin.Context) {\n\tgroupID, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tgroup, err := model.GetGroupByID(int64(groupID))\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tif group.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar request RemoveUsersFromGroupRequest\n\tif err := c.ShouldBindJSON(&request); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif len(request.PermissionIDs) == 0 {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n\t\treturn\n\t}\n\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\tif err := tx.Where(\"id IN ? AND group_id = ?\",\n\t\trequest.PermissionIDs, groupID).\n\t\tDelete(&model.ResourcePermission{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// handleAgentResources handles the retrieval of agent resources\nfunc handleAgentResources(c *gin.Context, agentIDs []int64, keyword string, offset, limit int) {\n\t// Build query\n\tquery := model.DB.Model(&model.Agent{}).Where(\"agent_id IN ?\", agentIDs)\n\n\t// If there is a keyword, add fuzzy search condition\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"name LIKE ?\", \"%\"+keyword+\"%\")\n\t}\n\n\t// Get total count\n\tvar total int64\n\tif err := query.Count(&total).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Apply pagination and get data\n\tvar agents []model.Agent\n\tif err := query.Order(\"sort DESC\").Offset(offset).Limit(limit).Find(&agents).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Return result\n\tc.JSON(http.StatusOK, model.Success.ToResponse(GroupAgentListResponse{\n\t\tCount:  total,\n\t\tAgents: agents,\n\t}))\n}\n\n// handleAILinkResources handles the retrieval of AI link resources\nfunc handleAILinkResources(c *gin.Context, aiLinkIDs []int64, keyword string, offset, limit int64, eid int64) {\n\t// Build query\n\tquery := model.DB.Model(&model.AILink{}).Where(\"id IN ? AND eid = ?\", aiLinkIDs, eid)\n\n\t// If there is a keyword, add fuzzy search condition\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"name LIKE ?\", \"%\"+keyword+\"%\")\n\t}\n\n\t// Get total count\n\tvar total int64\n\tif err := query.Count(&total).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Apply pagination and get data\n\tvar aiLinks []model.AILink\n\tif err := query.Order(\"sort DESC\").Offset(int(offset)).Limit(int(limit)).Find(&aiLinks).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Return result\n\tc.JSON(http.StatusOK, model.Success.ToResponse(GroupResourceListResponse{\n\t\tCount:     total,\n\t\tResources: aiLinks,\n\t}))\n}\n\n// handlePromptResources handles the retrieval of prompt resources\nfunc handlePromptResources(c *gin.Context, promptIDs []int64, keyword string, offset, limit int64, eid int64) {\n\t// Build query\n\tstatusArray := []int{model.PromptStatusNormal, model.PromptStatusDisable}\n\tquery := model.DB.Model(&model.Prompt{}).Where(\"prompt_id IN ? AND eid = ? AND status IN ?\", promptIDs, eid, statusArray)\n\n\t// If there is a keyword, add fuzzy search condition\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"name LIKE ?\", \"%\"+keyword+\"%\")\n\t}\n\n\t// Get total count\n\tvar total int64\n\tif err := query.Count(&total).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Apply pagination and get data\n\tvar prompts []model.Prompt\n\tif err := query.Order(\"sort DESC\").Offset(int(offset)).Limit(int(limit)).Find(&prompts).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Return result\n\tc.JSON(http.StatusOK, model.Success.ToResponse(GroupResourceListResponse{\n\t\tCount:     total,\n\t\tResources: prompts,\n\t}))\n}\n"
  },
  {
    "path": "api/controller/maxkb.go",
    "content": "package controller\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/client\"\n)\n\n// MaxKBProfileResponse MaxKB应用配置响应结构\ntype MaxKBProfileResponse struct {\n\tCode    int              `json:\"code\"`\n\tMessage string           `json:\"message\"`\n\tData    MaxKBProfileData `json:\"data\"`\n}\n\ntype MaxKBProfileData struct {\n\tID                     string                 `json:\"id\"`\n\tName                   string                 `json:\"name\"`\n\tDesc                   string                 `json:\"desc\"`\n\tPrologue               string                 `json:\"prologue\"`\n\tDialogueNumber         int                    `json:\"dialogue_number\"`\n\tIcon                   string                 `json:\"icon\"`\n\tType                   string                 `json:\"type\"`\n\tSttModelID             *string                `json:\"stt_model_id\"`\n\tTtsModelID             *string                `json:\"tts_model_id\"`\n\tSttModelEnable         bool                   `json:\"stt_model_enable\"`\n\tTtsModelEnable         bool                   `json:\"tts_model_enable\"`\n\tTtsType                string                 `json:\"tts_type\"`\n\tTtsAutoplay            bool                   `json:\"tts_autoplay\"`\n\tSttAutosend            bool                   `json:\"stt_autosend\"`\n\tFileUploadEnable       bool                   `json:\"file_upload_enable\"`\n\tFileUploadSetting      map[string]interface{} `json:\"file_upload_setting\"`\n\tWorkFlow               map[string]interface{} `json:\"work_flow\"`\n\tShowSource             bool                   `json:\"show_source\"`\n\tLanguage               *string                `json:\"language\"`\n\tMultipleRoundsDialogue bool                   `json:\"multiple_rounds_dialogue\"`\n}\n\n// @Summary Get MaxKB application profile\n// @Description 代理MaxKB应用配置查询接口\n// @Tags MaxKB\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param bot-id query string true \"Bot ID, format: bot-application-{token}\" example:\"bot-application-ddac703d701b5cf6dcb9fc4bcc365db7\"\n// @Success 200 {object} MaxKBProfileResponse\n// @Router /api/maxkb/application/profile [get]\nfunc GetMaxKBApplicationProfile(c *gin.Context) {\n\t// 1. 解析bot-id参数\n\tbotID := c.Query(\"bot-id\")\n\tif botID == \"\" {\n\t\tlogger.SysErrorf(\"MaxKB请求失败: bot-id参数为空\")\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"bot-id parameter is required\"))\n\t\treturn\n\t}\n\n\tlogger.SysLogf(\"MaxKB请求 - bot-id: %s\", botID)\n\n\t// // 2. 验证bot-id格式并提取application token\n\t// applicationToken, err := extractApplicationToken(botID)\n\t// if err != nil {\n\t// \tlogger.SysErrorf(\"❌ bot-id格式错误: %v\", err)\n\t// \tc.JSON(http.StatusBadRequest, model.ParamError.ToErrorResponse(err))\n\t// \treturn\n\t// }\n\n\t// logger.SysLogf(\"🔑 提取到application token: %s\", applicationToken)\n\n\t// 2. 查询包含指定botID的MaxKB渠道\n\teid := config.GetEID(c)\n\tchannel, err := findMaxKBChannelByBotID(eid, botID)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"MaxKB渠道查询失败 - eid: %d, bot-id: %s, error: %v\", eid, botID, err)\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\t// 3. 构建代理请求\n\tfullBaseURL := channel.GetBaseURL()\n\tif fullBaseURL == \"\" {\n\t\tlogger.SysErrorf(\"MaxKB渠道BaseURL为空\")\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToNewErrorResponse(\"channel base URL is empty\"))\n\t\treturn\n\t}\n\n\t// 提取基础URL (只保留 scheme://host:port 部分)\n\tbaseURL, err := extractBaseURL(fullBaseURL)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"MaxKB BaseURL解析失败: %v\", err)\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\t// 4. 发起代理请求\n\tproxyURL := fmt.Sprintf(\"%s/api/application/profile\", baseURL)\n\tlogger.SysLogf(\"MaxKB代理请求 - URL: %s\", proxyURL)\n\n\tresponse, err := makeMaxKBRequest(proxyURL, channel.Key)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"MaxKB代理请求失败: %v\", err)\n\t\tc.JSON(http.StatusInternalServerError, model.NetworkError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\t// 5. 解析响应并返回结果\n\tvar maxkbResponse MaxKBProfileResponse\n\tif err := json.Unmarshal(response, &maxkbResponse); err != nil {\n\t\tlogger.SysErrorf(\"MaxKB响应解析失败: %v\", err)\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\tlogger.SysLogf(\"MaxKB响应成功 - 应用名称: %s, 应用ID: %s\", maxkbResponse.Data.Name, maxkbResponse.Data.ID)\n\n\t// 返回符合项目规范的响应格式\n\tc.JSON(http.StatusOK, model.Success.ToResponse(maxkbResponse.Data))\n}\n\n// extractBaseURL 从完整URL中提取基础URL\n// 例如: http://192.168.1.218:8080/api/application/cd3006e4-6051-11f0-97a0-0242ac110002 -> http://192.168.1.218:8080\nfunc extractBaseURL(fullURL string) (string, error) {\n\tif fullURL == \"\" {\n\t\treturn \"\", fmt.Errorf(\"base URL cannot be empty\")\n\t}\n\n\t// 解析URL\n\tparsedURL, err := url.Parse(fullURL)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"invalid URL format: %v\", err)\n\t}\n\n\t// 构建基础URL (scheme + host)\n\tbaseURL := fmt.Sprintf(\"%s://%s\", parsedURL.Scheme, parsedURL.Host)\n\treturn baseURL, nil\n}\n\n// makeMaxKBRequest 发起MaxKB API请求\nfunc makeMaxKBRequest(url, applicationToken string) ([]byte, error) {\n\t// 创建HTTP请求\n\treq, err := http.NewRequest(\"GET\", url, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"create request failed: %v\", err)\n\t}\n\n\t// 设置请求头\n\treq.Header.Set(\"Accept\", \"application/json\")\n\treq.Header.Set(\"AUTHORIZATION\", applicationToken)\n\n\tlogger.SysLogf(\"MaxKB请求头 - AUTHORIZATION: %s\", applicationToken)\n\n\t// 发起请求\n\tresp, err := client.HTTPClient.Do(req)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"HTTP request failed: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\t// 读取响应体\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"read response body failed: %v\", err)\n\t}\n\n\t// 检查HTTP状态码\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn nil, fmt.Errorf(\"MaxKB API returned status %d: %s\", resp.StatusCode, string(body))\n\t}\n\n\t// 验证响应是否为有效JSON\n\tvar jsonCheck interface{}\n\tif err := json.Unmarshal(body, &jsonCheck); err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid JSON response: %v\", err)\n\t}\n\n\treturn body, nil\n}\n\n// findMaxKBChannelByBotID 根据企业ID和botID查找包含该botID的MaxKB渠道\nfunc findMaxKBChannelByBotID(eid int64, botID string) (*model.Channel, error) {\n\t// 获取企业下所有MaxKB类型的渠道\n\tchannels, err := model.GetChannelsByEidAndParams(eid, 0, []int{model.ChannelApiTypeMaxKB}, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to get MaxKB channels: %v\", err)\n\t}\n\n\tif len(channels) == 0 {\n\t\treturn nil, fmt.Errorf(\"no MaxKB channels found for enterprise %d\", eid)\n\t}\n\n\t// 遍历渠道，查找包含指定botID的渠道\n\tfor _, channel := range channels {\n\t\tif containsBotID(channel.Models, botID) {\n\t\t\treturn &channel, nil\n\t\t}\n\t}\n\n\treturn nil, fmt.Errorf(\"no MaxKB channel found containing bot-id: %s\", botID)\n}\n\n// containsBotID 检查models字段中是否包含指定的botID\nfunc containsBotID(models, botID string) bool {\n\tif models == \"\" || botID == \"\" {\n\t\treturn false\n\t}\n\n\t// 将models按逗号分割\n\tmodelList := strings.Split(models, \",\")\n\n\t// 遍历每个model，检查是否匹配\n\tfor _, model := range modelList {\n\t\t// 去除空格\n\t\tmodel = strings.TrimSpace(model)\n\t\tif model == botID {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "api/controller/message.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/common\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype MessagesResponse struct {\n\tCount    int64              `json:\"count\"`\n\tMessages []*EnhancedMessage `json:\"messages\"`\n}\n\n// EnhancedMessage 增强的消息结构，包含解析后的内容\ntype EnhancedMessage struct {\n\t*model.Message\n\tMessageType   model.MessageType `json:\"message_type\"`   // 消息类型\n\tParsedMessage interface{}       `json:\"parsed_message\"` // 解析后的 message 内容\n\tParsedAnswer  interface{}       `json:\"parsed_answer\"`  // 解析后的 answer 内容\n}\n\ntype MessageListRequest struct {\n\tKeyword   string `json:\"keyword\" form:\"keyword\" example:\"gpt\"`\n\tOffset    int    `json:\"offset\" form:\"offset\" example:\"0\"`\n\tLimit     int    `json:\"limit\" form:\"limit\" example:\"10\"`\n\tDirection string `json:\"direction\" form:\"direction\" example:\"desc\"` // 获取方向: desc=从新到旧, asc=从旧到新\n}\n\n// convertToEnhancedMessages 将普通消息转换为增强消息\nfunc convertToEnhancedMessages(messages []*model.Message) []*EnhancedMessage {\n\tenhancedMessages := make([]*EnhancedMessage, len(messages))\n\n\tfor i, msg := range messages {\n\t\tenhanced := &EnhancedMessage{\n\t\t\tMessage:     msg,\n\t\t\tMessageType: msg.GetMessageType(),\n\t\t}\n\n\t\t// 根据消息类型解析内容\n\t\tswitch enhanced.MessageType {\n\t\tcase model.MessageTypeChat:\n\t\t\t// 解析聊天消息\n\t\t\tif parsedMsg, err := msg.ParseChatMessage(); err == nil {\n\t\t\t\tenhanced.ParsedMessage = parsedMsg\n\t\t\t} else {\n\t\t\t\tenhanced.ParsedMessage = msg.Message // 解析失败时返回原始内容\n\t\t\t}\n\t\t\tenhanced.ParsedAnswer = msg.Answer // 聊天消息的 answer 就是文本\n\n\t\tcase model.MessageTypeWorkflow:\n\t\t\t// 解析工作流消息\n\t\t\tif parsedParams, err := msg.ParseWorkflowParameters(); err == nil {\n\t\t\t\tenhanced.ParsedMessage = parsedParams\n\t\t\t} else {\n\t\t\t\tenhanced.ParsedMessage = msg.Message // 解析失败时返回原始内容\n\t\t\t}\n\n\t\t\tif parsedOutput, err := msg.ParseWorkflowOutput(); err == nil {\n\t\t\t\tenhanced.ParsedAnswer = parsedOutput\n\t\t\t} else {\n\t\t\t\tenhanced.ParsedAnswer = msg.Answer // 解析失败时返回原始内容\n\t\t\t}\n\t\t}\n\n\t\tenhancedMessages[i] = enhanced\n\t}\n\n\treturn enhancedMessages\n}\n\n// @Summary Get messages by agent\n// @Description Get messages between user and specific agent with pagination and keyword search\n// @Tags Message\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param agent_id path int true \"Agent ID\"\n// @Param keyword query string false \"Search keyword\"\n// @Param offset query int false \"Pagination offset\" default(0)\n// @Param limit query int false \"Pagination limit\" default(10)\n// @Success 200 {object} model.CommonResponse{data=MessagesResponse} \"Success\"\n// @Router /api/agents/{agent_id}/messages [get]\nfunc GetMessagesByUserAndAgent(c *gin.Context) {\n\tagent_id, err := strconv.ParseInt(c.Param(\"agent_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar messageListRequest MessageListRequest\n\tif err := c.ShouldBindQuery(&messageListRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tuserId := config.GetUserId(c)\n\teid := config.GetEID(c)\n\tcount, messages, err := model.GetMessagesByUserAndAgent(\n\t\teid, userId, agent_id,\n\t\tmessageListRequest.Keyword, messageListRequest.Limit, messageListRequest.Offset)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&MessagesResponse{\n\t\tCount:    count,\n\t\tMessages: convertToEnhancedMessages(messages),\n\t}))\n}\n\n// @Summary Get messages by user and agent\n// @Description Get messages between user and specific agent with pagination and keyword search\n// @Tags Message\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param agent_id path int true \"Agent ID\"\n// @Param user_id path int true \"User ID\"\n// @Param keyword query string false \"Search keyword\"\n// @Param offset query int false \"Pagination offset\" default(0)\n// @Param limit query int false \"Pagination limit\" default(10)\n// @Success 200 {object} model.CommonResponse{data=MessagesResponse} \"Success\"\n// @Router /api/users/{user_id}/agents/{agent_id}/messages [get]\nfunc GetUserMessages(c *gin.Context) {\n\tagent_id, err := strconv.ParseInt(c.Param(\"agent_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tuser_id, err := strconv.ParseInt(c.Param(\"user_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\tuser, err := model.GetUserByID(user_id)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif user.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar messageListRequest MessageListRequest\n\tif err := c.ShouldBindQuery(&messageListRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tcount, messages, err := model.GetMessagesByUserAndAgent(\n\t\teid, user_id, agent_id,\n\t\tmessageListRequest.Keyword, messageListRequest.Limit, messageListRequest.Offset)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&MessagesResponse{\n\t\tCount:    count,\n\t\tMessages: convertToEnhancedMessages(messages),\n\t}))\n}\n\n// @Summary Get messages by conversation ID\n// @Description Get message list by conversation ID with pagination and keyword search\n// @Tags Message\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param conversation_id path int true \"Conversation ID\"\n// @Param keyword query string false \"Search keyword\"\n// @Param offset query int false \"Pagination offset\" default(0)\n// @Param limit query int false \"Pagination limit\" default(10)\n// @Param direction query string false \"Direction (desc=newest first, asc=oldest first)\" default(desc)\n// @Success 200 {object} model.CommonResponse{data=MessagesResponse} \"Success\"\n// @Router /api/conversations/{conversation_id}/messages [get]\nfunc GetMessagesByConversation(c *gin.Context) {\n\tconversation_id, err := strconv.ParseInt(c.Param(\"conversation_id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar messageListRequest MessageListRequest\n\tif err := c.ShouldBindQuery(&messageListRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 设置默认方向为从新到旧\n\tif messageListRequest.Direction == \"\" {\n\t\tmessageListRequest.Direction = \"desc\"\n\t}\n\n\teid := config.GetEID(c)\n\tvar messages []*model.Message\n\tvar count int64\n\n\tvar getConversation func() error\n\tif common.IsAdmin(c) {\n\t\tgetConversation = func() error {\n\t\t\t_, err := model.AdminGetConversationByID(eid, conversation_id)\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\tgetConversation = func() error {\n\t\t\t_, err := model.GetConversationByID(eid, config.GetUserId(c), conversation_id)\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := getConversation(); err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 传递方向参数到模型层\n\tcount, messages, err = model.GetMessagesByConversationIDWithDirection(\n\t\teid, conversation_id,\n\t\tmessageListRequest.Keyword, messageListRequest.Limit, messageListRequest.Offset,\n\t\tmessageListRequest.Direction)\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 如果是从新到旧获取的，需要反转结果集以确保最终结果是从旧到新排序\n\tif messageListRequest.Direction == \"desc\" {\n\t\t// 反转消息数组\n\t\tfor i, j := 0, len(messages)-1; i < j; i, j = i+1, j-1 {\n\t\t\tmessages[i], messages[j] = messages[j], messages[i]\n\t\t}\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&MessagesResponse{\n\t\tCount:    count,\n\t\tMessages: convertToEnhancedMessages(messages),\n\t}))\n}\n"
  },
  {
    "path": "api/controller/model.go",
    "content": "package controller\n\nimport (\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/apitype\"\n\t\"github.com/songquanpeng/one-api/relay/channeltype\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n)\n\ntype OpenAIModelPermission struct {\n\tId                 string  `json:\"id\"`\n\tObject             string  `json:\"object\"`\n\tCreated            int     `json:\"created\"`\n\tAllowCreateEngine  bool    `json:\"allow_create_engine\"`\n\tAllowSampling      bool    `json:\"allow_sampling\"`\n\tAllowLogprobs      bool    `json:\"allow_logprobs\"`\n\tAllowSearchIndices bool    `json:\"allow_search_indices\"`\n\tAllowView          bool    `json:\"allow_view\"`\n\tAllowFineTuning    bool    `json:\"allow_fine_tuning\"`\n\tOrganization       string  `json:\"organization\"`\n\tGroup              *string `json:\"group\"`\n\tIsBlocking         bool    `json:\"is_blocking\"`\n}\n\ntype OpenAIModels struct {\n\tId         string                  `json:\"id\"`\n\tObject     string                  `json:\"object\"`\n\tCreated    int                     `json:\"created\"`\n\tOwnedBy    string                  `json:\"owned_by\"`\n\tPermission []OpenAIModelPermission `json:\"permission\"`\n\tRoot       string                  `json:\"root\"`\n\tParent     *string                 `json:\"parent\"`\n}\n\ntype OpenAIModelsResponse struct {\n\tModels []OpenAIModels `json:\"models\"`\n}\n\nvar models []OpenAIModels\nvar modelsMap map[string]OpenAIModels\nvar channelId2Models map[int][]string\n\nfunc init() {\n\tvar permission []OpenAIModelPermission\n\tpermission = append(permission, OpenAIModelPermission{\n\t\tId:                 \"modelperm-LwHkVFn8AcMItP432fKKDIKJ\",\n\t\tObject:             \"model_permission\",\n\t\tCreated:            1626777600,\n\t\tAllowCreateEngine:  true,\n\t\tAllowSampling:      true,\n\t\tAllowLogprobs:      true,\n\t\tAllowSearchIndices: false,\n\t\tAllowView:          true,\n\t\tAllowFineTuning:    false,\n\t\tOrganization:       \"*\",\n\t\tGroup:              nil,\n\t\tIsBlocking:         false,\n\t})\n\t// https://platform.openai.com/docs/models/model-endpoint-compatibility\n\tfor i := 0; i < apitype.Dummy; i++ {\n\t\tif i == apitype.AIProxyLibrary {\n\t\t\tcontinue\n\t\t}\n\t\tadaptor := relay.GetAdaptor(i)\n\t\tchannelName := adaptor.GetChannelName()\n\t\tmodelNames := adaptor.GetModelList()\n\t\tfor _, modelName := range modelNames {\n\t\t\tmodels = append(models, OpenAIModels{\n\t\t\t\tId:         modelName,\n\t\t\t\tObject:     \"model\",\n\t\t\t\tCreated:    1626777600,\n\t\t\t\tOwnedBy:    channelName,\n\t\t\t\tPermission: permission,\n\t\t\t\tRoot:       modelName,\n\t\t\t\tParent:     nil,\n\t\t\t})\n\t\t}\n\t}\n\n\t// 添加自定义适配器的模型\n\tcustomAdaptorTypes := []int{\n\t\tmodel.ChannelApiDify,\n\t\tmodel.ChannelApi53AI,\n\t\tmodel.ChannelApiBailian,\n\t\tmodel.ChannelApiVolcengine,\n\t\tmodel.ChannelApiAppBuilder,\n\t\tmodel.ChannelApiYuanqi,\n\t\tmodel.ChannelApiTypeFastGpt,\n\t\tmodel.ChannelApiTypeMaxKB,\n\t\tmodel.ChannelApiTypeN8n,\n\t\tmodel.ChannelApiTypeCozeStudio,\n\t}\n\n\tfor _, apiType := range customAdaptorTypes {\n\t\tadaptor := service.GetAdaptor(apiType)\n\t\tif adaptor != nil {\n\t\t\tchannelName := adaptor.GetChannelName()\n\t\t\tmodelNames := adaptor.GetModelList()\n\t\t\tfor _, modelName := range modelNames {\n\t\t\t\tmodels = append(models, OpenAIModels{\n\t\t\t\t\tId:         modelName,\n\t\t\t\t\tObject:     \"model\",\n\t\t\t\t\tCreated:    1626777600,\n\t\t\t\t\tOwnedBy:    channelName,\n\t\t\t\t\tPermission: permission,\n\t\t\t\t\tRoot:       modelName,\n\t\t\t\t\tParent:     nil,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, channelType := range openai.CompatibleChannels {\n\t\tif channelType == channeltype.Azure {\n\t\t\tcontinue\n\t\t}\n\t\tchannelName, channelModelList := openai.GetCompatibleChannelMeta(channelType)\n\t\tfor _, modelName := range channelModelList {\n\t\t\tmodels = append(models, OpenAIModels{\n\t\t\t\tId:         modelName,\n\t\t\t\tObject:     \"model\",\n\t\t\t\tCreated:    1626777600,\n\t\t\t\tOwnedBy:    channelName,\n\t\t\t\tPermission: permission,\n\t\t\t\tRoot:       modelName,\n\t\t\t\tParent:     nil,\n\t\t\t})\n\t\t}\n\t}\n\tmodelsMap = make(map[string]OpenAIModels)\n\tfor _, model := range models {\n\t\tmodelsMap[model.Id] = model\n\t}\n\tchannelId2Models = make(map[int][]string)\n\tfor i := 1; i < channeltype.Dummy; i++ {\n\t\tadaptor := relay.GetAdaptor(channeltype.ToAPIType(i))\n\t\tmeta := &meta.Meta{\n\t\t\tChannelType: i,\n\t\t}\n\t\tadaptor.Init(meta)\n\t\tchannelId2Models[i] = adaptor.GetModelList()\n\t}\n}\n\n// ListAllModels List all models\n// @Summary List all available models\n// @Description Get a list of all available models in the system\n// @Tags Channel\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=OpenAIModelsResponse}\n// @Router /api/channels/models [get]\nfunc ListAllModels(c *gin.Context) {\n\tc.JSON(200, model.Success.ToResponse(OpenAIModelsResponse{\n\t\tModels: models,\n\t}))\n}\n"
  },
  {
    "path": "api/controller/navigation.go",
    "content": "package controller\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/utils\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// @Summary 获取导航列表\n// @Description 获取当前企业的所有导航项\n// @Tags Navigation\n// @Produce json\n// @Success 200 {object} model.CommonResponse{data=[]model.Navigation} \"成功响应\"\n// @Router /api/navigations [get]\nfunc GetNavigations(c *gin.Context) {\n\teid := config.GetEID(c)\n\tuser, err := model.GetLoginUser(c)\n\n\tif err == nil {\n\t\teid = user.Eid\n\t}\n\n\tnavigations, err := model.GetNavigationsByEid(eid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\tfor _, nav := range navigations {\n\t\tif nav.Type == 3 { // 添加类型判断\n\t\t\tnav.LoadContent()\n\t\t}\n\t\t// 处理空图标URL，设置默认图标\n\t\tif nav.Icon == \"\" {\n\t\t\tnav.Icon = \"/static/images/navigation/default.svg\"\n\t\t}\n\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(navigations))\n}\n\ntype NavigationRequest struct {\n\tName     string `json:\"name\" binding:\"required\"`      // 导航名称\n\tJumpPath string `json:\"jump_path\" binding:\"required\"` // 跳转路径\n\tConfig   string `json:\"config\" binding:\"required\"`    // 配置信息 json字符串\n\tSort     int    `json:\"sort\"`                         // 排序\n\tIcon     string `json:\"icon\"`                         // 图标\n\tType     int    `json:\"type\"`                         // 导航类型 2: 外部链接 3: 自定义页面\n}\n\n// @Summary 创建导航\n// @Description 创建新的导航项\n// @Tags Navigation\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param navigation body NavigationRequest true \"导航数据\"\n// @Success 200 {object} model.CommonResponse{data=model.Navigation} \"成功响应\"\n// @Router /api/navigations [post]\nfunc CreateNavigation(c *gin.Context) {\n\tvar req NavigationRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif req.Type == model.NavigationTypeSystemBuiltIn {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(errors.New(\"系统内置导航不能创建\")))\n\t\treturn\n\t}\n\n\t// 处理空图标URL，设置默认图标\n\ticon := req.Icon\n\tif icon == \"\" {\n\t\ticon = \"/static/images/navigation/default.svg\"\n\t}\n\n\t//从DTO映射到持久化模型\n\tnav := model.Navigation{\n\t\tName:     req.Name,\n\t\tJumpPath: req.JumpPath,\n\t\tConfig:   req.Config,\n\t\tSort:     req.Sort,\n\t\tIcon:     icon,\n\t\tType:     req.Type,\n\t\tEid:      config.GetEID(c), // 服务端填充租户/企业ID，避免被客户端篡改\n\t}\n\n\t//持久化\n\tif err := nav.Create(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      nav.Eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleNavigation,\n\t\tAction:   model.SystemLogActionCreate,\n\t\tContent:  fmt.Sprintf(\"新建导航【%s】\", nav.Name),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nav))\n}\n\n// @Summary 获取导航详情\n// @Description 根据ID获取导航项详情\n// @Tags Navigation\n// @Produce json\n// @Security BearerAuth\n// @Param nav_id path int true \"导航ID\"\n// @Success 200 {object} model.CommonResponse{data=model.Navigation} \"成功响应\"\n// @Router /api/navigations/{nav_id} [get]\nfunc GetNavigation(c *gin.Context) {\n\tnavID, _ := strconv.Atoi(c.Param(\"nav_id\"))\n\teid := config.GetEID(c)\n\tnav, err := model.GetNavigationByID(eid, int64(navID))\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\tif nav.Type == 3 { // 添加类型判断\n\t\tnav.LoadContent()\n\t}\n\n\t// 处理空图标URL，设置默认图标\n\tif nav.Icon == \"\" {\n\t\tnav.Icon = \"/static/images/navigation/default.svg\"\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nav))\n}\n\n// @Summary 更新导航\n// @Description 更新现有导航项\n// @Tags Navigation\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param nav_id path int true \"导航ID\"\n// @Param request body NavigationRequest true \"更新数据\"\n// @Success 200 {object} model.CommonResponse \"成功响应\"\n// @Router /api/navigations/{nav_id} [put]\nfunc UpdateNavigation(c *gin.Context) {\n\tnavID, _ := strconv.Atoi(c.Param(\"nav_id\"))\n\teid := config.GetEID(c)\n\tvar req NavigationRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tnav, err := model.GetNavigationByID(eid, int64(navID))\n\tif handleNotFound(c, nav, err) {\n\t\treturn\n\t}\n\toldNav := *nav\n\n\t// 处理空图标URL，设置默认图标\n\ticon := req.Icon\n\tif icon == \"\" {\n\t\ticon = \"/static/images/navigation/default.svg\"\n\t}\n\n\tif err := model.UpdateNavigation(navID, map[string]interface{}{\n\t\t\"name\":      req.Name,\n\t\t\"icon\":      req.Icon,\n\t\t\"jump_path\": req.JumpPath,\n\t\t\"sort\":      req.Sort,\n\t\t\"config\":    req.Config,\n\t\t\"type\":      req.Type,\n\t}); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tnav, err = model.GetNavigationByID(eid, int64(navID))\n\tfieldMap := map[string]string{\n\t\t\"Name\": \"名称\",\n\t}\n\tmodel.LogEntityChange(\n\t\tfmt.Sprintf(\"导航【%s】\", oldNav.Name),\n\t\tmodel.SystemLogActionUpdate,\n\t\teid,\n\t\tconfig.GetUserId(c),\n\t\tconfig.GetUserNickname(c),\n\t\tmodel.SystemLogModuleNavigation,\n\t\toldNav,\n\t\tnav,\n\t\tutils.GetClientIP(c),\n\t\tfieldMap,\n\t)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary 删除导航\n// @Description 根据ID删除导航项\n// @Tags Navigation\n// @Produce json\n// @Security BearerAuth\n// @Param nav_id path int true \"导航ID\"\n// @Success 200 {object} model.CommonResponse \"成功响应\"\n// @Router /api/navigations/{nav_id} [delete]\nfunc DeleteNavigation(c *gin.Context) {\n\tnavID, _ := strconv.Atoi(c.Param(\"nav_id\"))\n\teid := config.GetEID(c)\n\n\ttx := model.DB.Begin()\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\tvar nav model.Navigation\n\terr := tx.Where(\"eid = ? AND navigation_id = ?\", eid, navID).First(&nav).Error\n\tif handleNotFound(c, &nav, err) {\n\t\ttx.Rollback()\n\t\treturn\n\t}\n\n\tif nav.Type == model.NavigationTypeCustomPage {\n\t\tif err := tx.Where(\"navigation_id = ?\", navID).Delete(&model.NavigationContent{}).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t}\n\n\tif err := tx.Where(\"navigation_id = ?\", navID).Delete(&model.Navigation{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tif err := tx.Commit().Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      nav.Eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleNavigation,\n\t\tAction:   model.SystemLogActionDelete,\n\t\tContent:  fmt.Sprintf(\"删除导航【%s】\", nav.Name),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\ntype UpdateNavigationStatusRequest struct {\n\tStatus int `json:\"status\"`\n}\n\n// @Summary 更新导航状态\n// @Description 启用/禁用导航项\n// @Tags Navigation\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param nav_id path int true \"导航ID\"\n// @Param request body UpdateNavigationStatusRequest true \"状态数据\"\n// @Success 200 {object} model.CommonResponse \"成功响应\"\n// @Router /api/navigations/{nav_id}/status [patch]\nfunc UpdateNavigationStatus(c *gin.Context) {\n\tnavID, _ := strconv.Atoi(c.Param(\"nav_id\"))\n\n\treq := &UpdateNavigationStatusRequest{}\n\tif err := c.ShouldBindJSON(req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tnav, err := model.GetNavigationByID(eid, int64(navID))\n\tif handleNotFound(c, nav, err) {\n\t\treturn\n\t}\n\n\tif err := model.UpdateNavigationStatus(navID, req.Status); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tstatusText := \"显示\"\n\tif req.Status == model.NavigationStatusDisabled {\n\t\tstatusText = \"不显示\"\n\t}\n\tlog := model.SystemLog{\n\t\tEid:      eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleNavigation,\n\t\tAction:   model.SystemLogActionToggle,\n\t\tContent:  fmt.Sprintf(\"%s导航【%s】\", statusText, nav.Name),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// 在文件顶部定义全局类型\ntype NavigationSortItem struct {\n\tID   int `json:\"id\" binding:\"required\"`\n\tSort int `json:\"sort\"`\n}\n\n// 修改SortNavigations方法\n// @Summary 排序导航项\n// @Description 批量更新导航项排序\n// @Tags Navigation\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param sortList body []NavigationSortItem true \"排序列表\"\n// @Success 200 {object} model.CommonResponse \"成功响应\"\n// @Router /api/navigations/sort [post]\nfunc SortNavigations(c *gin.Context) {\n\tvar sortList []NavigationSortItem // 使用新定义的类型\n\n\tif err := c.ShouldBindJSON(&sortList); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tparamList := make([]struct {\n\t\tID   int\n\t\tSort int\n\t}, len(sortList))\n\tfor i, item := range sortList {\n\t\tparamList[i].ID = item.ID\n\t\tparamList[i].Sort = item.Sort\n\t}\n\n\tif err := model.BatchUpdateNavigationSort(paramList); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\nfunc handleNotFound(c *gin.Context, nav *model.Navigation, err error) bool {\n\tif err != nil || nav == nil || nav.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn true\n\t}\n\treturn false\n}\n\n// @Summary 初始化系统导航\n// @Description 初始化企业系统默认导航\n// @Tags Navigation\n// @Accept json\n// @Produce json\n// @Param request body []NavigationRequest true \"导航列表\"\n// @Success 201 {object} model.CommonResponse{data=[]model.Navigation} \"创建成功\"\n// @Router /api/navigations/init [post]\nfunc InitSystemNavigation(c *gin.Context) {\n\teid := config.GetEID(c)\n\tuser, err := model.GetLoginUser(c)\n\tif err == nil {\n\t\teid = user.Eid\n\t}\n\n\tnavs, err := model.GetNavigationsByEid(eid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\tif len(navs) > 0 {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(navs))\n\t\treturn\n\t}\n\n\tvar req []NavigationRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\ttx := model.DB.Begin()\n\tfor _, nav := range req {\n\t\tcreatedTime := time.Now().UTC().UnixMilli()\n\t\tnav := model.Navigation{\n\t\t\tName:     nav.Name,\n\t\t\tJumpPath: nav.JumpPath,\n\t\t\tSort:     nav.Sort,\n\t\t\tConfig:   nav.Config,\n\t\t\tEid:      eid,\n\t\t\tType:     model.NavigationTypeSystemBuiltIn,\n\t\t\tBaseModel: model.BaseModel{\n\t\t\t\tCreatedTime: createdTime,\n\t\t\t\tUpdatedTime: createdTime,\n\t\t\t},\n\t\t}\n\t\tif err := tx.Create(&nav).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t\tnavs = append(navs, &nav)\n\t}\n\ttx.Commit()\n\n\tc.JSON(http.StatusCreated, model.Success.ToResponse(nil))\n}\n\ntype CreateNavigationContentRequest struct {\n\tHtmlContent string `json:\"html_content\" binding:\"required\"`\n}\n\n// @Summary 创建/更新导航内容\n// @Description 当导航类型为自定义页时，自动创建或更新内容\n// @Tags Navigation\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param nav_id path int true \"导航ID\"\n// @Param request body CreateNavigationContentRequest true \"内容数据\"\n// @Success 200 {object} model.CommonResponse{data=model.NavigationContent} \"成功响应\"\n// @Router /api/navigations/{nav_id}/content [post]\nfunc CreateNavigationContent(c *gin.Context) {\n\tnavID, _ := strconv.Atoi(c.Param(\"nav_id\"))\n\teid := config.GetEID(c)\n\n\tnav, err := model.GetNavigationByID(eid, int64(navID))\n\tif handleNotFound(c, nav, err) {\n\t\treturn\n\t}\n\n\tif nav.Type != model.NavigationTypeCustomPage {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"非自定义页导航类型\"))\n\t\treturn\n\t}\n\n\tvar req CreateNavigationContentRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\ttx := model.DB.Begin()\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\tvar content *model.NavigationContent\n\tif nav.Type == 3 { // 添加类型判断\n\t\tnav.LoadContent()\n\t}\n\tif nav.Content != nil {\n\t\tcontent = nav.Content\n\t\tcontent.HtmlContent = req.HtmlContent\n\t\tif err := content.Update(); err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t} else {\n\t\tcontent = &model.NavigationContent{\n\t\t\tNavigationID: int64(navID),\n\t\t\tHtmlContent:  req.HtmlContent,\n\t\t}\n\t\tif err := content.Create(); err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t}\n\n\ttx.Commit()\n\n\tlog := model.SystemLog{\n\t\tEid:      nav.Eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleNavigation,\n\t\tAction:   model.SystemLogActionUpdate,\n\t\tContent:  fmt.Sprintf(\"编辑导航【%s】-页面编辑 \", nav.Name),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(content))\n}\n\nfunc GetNavigationContent(c *gin.Context) {\n\tnavID, err := strconv.ParseInt(c.Param(\"nav_id\"), 10, 64)\n\tif err != nil || navID <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"无效的导航ID\"))\n\t\treturn\n\t}\n\n\tcontent, err := model.GetNavigationContentByID(navID)\n\tif err != nil {\n\t\tc.JSON(http.StatusOK, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(content))\n}\n"
  },
  {
    "path": "api/controller/navigation_icons.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// NavigationIcon 导航图标信息\ntype NavigationIcon struct {\n\tKey   string `json:\"key\"`   // 图标标识\n\tName  string `json:\"name\"`  // 图标名称\n\tURL   string `json:\"url\"`   // 图标URL\n\tStyle string `json:\"style\"` // 图标样式类\n}\n\n// @Summary 获取导航默认图标列表\n// @Description 获取系统预置的导航图标列表\n// @Tags Navigation\n// @Produce json\n// @Success 200 {object} model.CommonResponse{data=[]NavigationIcon} \"成功响应\"\n// @Router /api/navigations/icons [get]\nfunc GetNavigationIcons(c *gin.Context) {\n\t// 预置的默认图标列表\n\ticons := []NavigationIcon{\n\t\t{\n\t\t\tKey:   \"home\",\n\t\t\tName:  \"首页\",\n\t\t\tURL:   \"/static/images/navigation/home.svg\",\n\t\t\tStyle: \"icon-home\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"dashboard\",\n\t\t\tName:  \"仪表盘\",\n\t\t\tURL:   \"/static/images/navigation/dashboard.svg\",\n\t\t\tStyle: \"icon-dashboard\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"chat\",\n\t\t\tName:  \"聊天\",\n\t\t\tURL:   \"/static/images/navigation/chat.svg\",\n\t\t\tStyle: \"icon-chat\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"ai\",\n\t\t\tName:  \"AI助手\",\n\t\t\tURL:   \"/static/images/navigation/ai.svg\",\n\t\t\tStyle: \"icon-ai\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"document\",\n\t\t\tName:  \"文档\",\n\t\t\tURL:   \"/static/images/navigation/document.svg\",\n\t\t\tStyle: \"icon-document\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"setting\",\n\t\t\tName:  \"设置\",\n\t\t\tURL:   \"/static/images/navigation/setting.svg\",\n\t\t\tStyle: \"icon-setting\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"user\",\n\t\t\tName:  \"用户\",\n\t\t\tURL:   \"/static/images/navigation/user.svg\",\n\t\t\tStyle: \"icon-user\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"group\",\n\t\t\tName:  \"群组\",\n\t\t\tURL:   \"/static/images/navigation/group.svg\",\n\t\t\tStyle: \"icon-group\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"analysis\",\n\t\t\tName:  \"分析\",\n\t\t\tURL:   \"/static/images/navigation/analysis.svg\",\n\t\t\tStyle: \"icon-analysis\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"report\",\n\t\t\tName:  \"报告\",\n\t\t\tURL:   \"/static/images/navigation/report.svg\",\n\t\t\tStyle: \"icon-report\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"calendar\",\n\t\t\tName:  \"日历\",\n\t\t\tURL:   \"/static/images/navigation/calendar.svg\",\n\t\t\tStyle: \"icon-calendar\",\n\t\t},\n\t\t{\n\t\t\tKey:   \"notification\",\n\t\t\tName:  \"通知\",\n\t\t\tURL:   \"/static/images/navigation/notification.svg\",\n\t\t\tStyle: \"icon-notification\",\n\t\t},\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(icons))\n}\n"
  },
  {
    "path": "api/controller/order.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/payment\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/go-pay/xlog\"\n)\n\n// 响应类型定义\ntype Response struct {\n\tCode    string      `json:\"code,omitempty\"`\n\tMessage string      `json:\"message,omitempty\"`\n\tData    interface{} `json:\"data,omitempty\"`\n}\n\ntype ErrorResponse struct {\n\tCode    string `json:\"code\"`\n\tMessage string `json:\"message\"`\n}\n\n// @Summary Close order\n// @Description Close an existing order\n// @Tags Order\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @param referer header string true \"Referer\"\n// @Param id path string true \"Order ID\"\n// @Success 200 {object} model.CommonResponse{data=model.Order}\n// @Router /api/orders/{id}/close [post]\nfunc CloseOrder(c *gin.Context) {\n\torderID := c.Param(\"id\")\n\tif orderID == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Order ID is required\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tuserID := config.GetUserId(c)\n\n\t// Get order from database\n\torder, err := model.GetOrderByOrderId(eid, orderID)\n\tif err != nil {\n\t\txlog.Errorf(\"Failed to get order: %v\", err)\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(model.OrderNotFound))\n\t\treturn\n\t}\n\n\t// Check if order belongs to current user\n\tif order.UserID != userID {\n\t\tc.JSON(http.StatusForbidden, model.ForbiddenError.ToResponse(\"No permission to close this order\"))\n\t\treturn\n\t}\n\n\tpaySetting, err := model.GetPaySettingByType(eid, model.PayTypeAlipay)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Payment method not configured\"))\n\t\treturn\n\t}\n\n\tswitch order.PayType {\n\tcase model.PayTypeAlipay:\n\t\tfactory := &payment.PaymentFactory{}\n\t\tpayment, err := factory.NewPayment(model.PayTypeWechat)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t\ttradeNo, err := payment.CloseOrder(order, paySetting)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.ParamError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t\torder.TransactionId = tradeNo\n\tdefault:\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Unsupported payment method\"))\n\t\treturn\n\t}\n\n\torder.Status = model.OrderStatusClosed\n\tif err := order.Update(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// OrderListRequest represents the request for listing orders\ntype OrderListRequest struct {\n\t// UserID    int64  `form:\"user_id\" example:\"0\"` // 0 means all users\n\tOffset       int    `form:\"offset\" example:\"0\"`\n\tLimit        int    `form:\"limit\" example:\"10\"`\n\tStatus       int    `form:\"status\" example:\"-1\"`      // -1 means all statuses (default -1)\n\tPayType      int    `form:\"pay_type\" example:\"-1\"`    // -1 means all payment types (default -1)\n\tKeyword      string `form:\"keyword\" example:\"\"`       // Search by nickname or order ID\n\tSubscription int64  `form:\"subscription\" example:\"0\"` // Subscription ID (0 means all subscriptions)\n\tStartTime    int64  `form:\"start_time\" example:\"0\"`   // Start time (timestamp in milliseconds)\n\tEndTime      int64  `form:\"end_time\" example:\"0\"`     // End time (timestamp in milliseconds)\n}\n\n// OrderListResponse represents the response for listing orders\ntype OrderListResponse struct {\n\tTotal  int64          `json:\"total\"`\n\tOrders []*model.Order `json:\"orders\"`\n}\n\n// GetOrders gets orders with pagination\n// @Summary Get orders\n// @Description Retrieve orders with pagination and filtering options. Supports distinguishing between backend and wecom requests.\n// @Tags Order\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param offset query int false \"Offset for pagination (default: 0)\"\n// @Param limit query int false \"Limit for pagination (default: 10)\"\n// @Param status query int false \"Order status (-1 for all statuses, 1: Not confirmed, 2: Pending, 3: Paid, 4: Expired 5:Closed)\"\n// @Param pay_type query int false \"Payment type (-1 for all types, 1: WeChat Pay, 2: Manual Transfer, 3: PayPal 4:Alipay)\"\n// @Param keyword query string false \"Search by nickname or order ID\"\n// @Param subscription query int64 false \"Subscription ID (0 for all subscriptions)\"\n// @Param start_time query int64 false \"Start time for filtering (timestamp in milliseconds)\"\n// @Param end_time query int64 false \"End time for filtering (timestamp in milliseconds)\"\n// @Success 200 {object} model.CommonResponse{data=OrderListResponse}\n// @Failure 400 {object} model.CommonResponse \"Invalid parameters\"\n// @Failure 500 {object} model.CommonResponse \"Internal server error\"\n// @Router /api/orders [get]\n// @Router /api/orders/me [get]\nfunc GetOrders(c *gin.Context) {\n\tvar req OrderListRequest\n\tif err := c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tuserID := config.GetUserId(c)\n\n\tisBackend := true\n\n\tpath := c.Request.URL.Path\n\tif path == \"/api/orders/me\" {\n\t\tisBackend = false\n\t}\n\n\tvar userIdScope int64\n\n\t// 获取当前用户角色\n\tuser, err := model.GetUserByID(userID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 判断是否为管理员角色\n\tisAdmin := user.Role == model.RoleAdminUser || user.Role == model.RoleCreatorUser || user.Role == model.RoleRootUser\n\n\toffset := req.Offset\n\tif offset == 0 {\n\t\toffset = 0\n\t}\n\n\tif req.Status == 0 {\n\t\treq.Status = -1\n\t}\n\n\tif req.PayType == 0 {\n\t\treq.PayType = -1\n\t}\n\n\tlimit := req.Limit\n\tif limit == 0 {\n\t\tlimit = 10\n\t}\n\n\t// 如果不是管理员,并且不是后台请求，则限制查询条件为当前用户的 ID\n\tif !(isAdmin && isBackend) {\n\t\tuserIdScope = userID // 限制查询条件为当前用户的 ID\n\t}\n\n\t// Get orders with extended filters\n\torders, total, err := model.GetOrdersWithFilters(\n\t\teid, userIdScope, req.Status, req.PayType, req.Keyword, req.Subscription, req.StartTime, req.EndTime, offset, limit,\n\t)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&OrderListResponse{\n\t\tTotal:  total,\n\t\tOrders: orders,\n\t}))\n}\n\n// GetOrder gets an order by ID\n// @Summary Get order\n// @Description Get an order by ID\n// @Tags Order\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Order ID\"\n// @Success 200 {object} model.CommonResponse{data=model.Order}\n// @Router /api/orders/{id} [get]\nfunc GetOrder(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid ID\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// Get order\n\torder, err := model.GetOrderByID(eid, id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(model.OrderNotFound))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(order))\n}\n\n// GetUserOrders gets orders for the current user\n// @Summary Get user orders\n// @Description Get orders for the current user\n// @Tags Order\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=[]model.Order}\n// @Router /api/orders/user [get]\nfunc GetUserOrders(c *gin.Context) {\n\teid := config.GetEID(c)\n\tuserID := config.GetUserId(c)\n\n\t// Get orders\n\torders, err := model.GetUserOrders(eid, userID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(orders))\n}\n\n// UpdateOrderStatusRequest represents the request for updating order status\ntype UpdateOrderStatusRequest struct {\n\tStatus int `json:\"status\" binding:\"required\" example:\"1\"` // 1: Paid\n}\n\n// UpdateOrderStatus updates the status of an order\n// @Summary Update order status\n// @Description Update the status of an order\n// @Tags Order\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Order ID\"\n// @Param status body UpdateOrderStatusRequest true \"Order status\"\n// @Success 200 {object} model.CommonResponse{data=model.Order}\n// @Router /api/orders/{id}/status [patch]\nfunc UpdateOrderStatus(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid ID\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// Get order\n\torder, err := model.GetOrderByID(eid, id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(model.OrderNotFound))\n\t\treturn\n\t}\n\n\t// Check payment type, only manual payment orders can be updated through this interface\n\tif order.PayType != 2 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"Only manual payment orders can be updated through this interface\"))\n\t\treturn\n\t}\n\n\tvar req UpdateOrderStatusRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif order.Status != model.OrderStatusConfirming {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"Only orders in confirming status can be updated\"))\n\t\treturn\n\t}\n\n\t// Validate status\n\tif req.Status < 0 || req.Status > 4 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid status\"))\n\t\treturn\n\t}\n\n\t// Update status\n\torder.Status = req.Status\n\n\t// If status is paid, set paid time\n\tif req.Status == model.OrderStatusPaid && order.PayTime == 0 {\n\t\torder.PayTime = time.Now().UTC().UnixMilli()\n\t}\n\n\tif err := order.Update(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(order))\n}\n\n// DeleteOrder deletes an order\n// @Summary Delete order\n// @Description Delete an order\n// @Tags Order\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Order ID\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/orders/{id} [delete]\nfunc DeleteOrder(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid ID\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// Get order\n\torder, err := model.GetOrderByID(eid, id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(model.OrderNotFound))\n\t\treturn\n\t}\n\n\t// Check payment type, only manual payment orders can be deleted through this interface\n\tif order.PayType != 2 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"Only manual payment orders can be deleted through this interface\"))\n\t\treturn\n\t}\n\n\t// Delete order\n\tif err := order.Delete(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// ConfirmManualPayment confirms a manual payment\n// @Summary Confirm manual payment\n// @Description Confirm a manual payment\n// @Tags Order\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Order ID\"\n// @Success 200 {object} model.CommonResponse{data=model.Order}\n// @Router /api/orders/{id}/confirm [post]\nfunc ConfirmManualPayment(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid ID\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// Get order\n\torder, err := model.GetOrderByID(eid, id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(model.OrderNotFound))\n\t\treturn\n\t}\n\n\t// Check if order is manual payment and in confirming status\n\tif order.PayType != 2 || order.Status != model.OrderStatusConfirming {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"Only manual payments in confirming status can be confirmed\"))\n\t\treturn\n\t}\n\n\t// Start database transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\t// Update order status within transaction\n\torder.Status = model.OrderStatusPaid\n\torder.PayTime = time.Now().UTC().UnixMilli()\n\tif err = tx.Model(&order).Updates(order).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Get user and update subscription group\n\tvar user model.User\n\tif err = tx.Where(\"user_id = ?\", order.UserID).First(&user).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Calculate new expiration time\n\tnewExpiredTime, err := order.CalculateNewExpiredTime(&user)\n\tif err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Update user group and expiration time\n\tif err := tx.Model(&user).Updates(map[string]interface{}{\n\t\t\"group_id\":     order.ServiceID,\n\t\t\"expired_time\": newExpiredTime,\n\t}).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(order))\n}\n\n// UpdateManualTransferOrderRequest represents the request for updating manual transfer order\ntype UpdateManualTransferOrderRequest struct {\n\tAmount           int64  `json:\"amount\" binding:\"required\"`\n\tCurrency         string `json:\"currency\" binding:\"required,oneof=CNY USD\"`\n\tDuration         int    `json:\"duration\" binding:\"required,min=1\"`\n\tUserID           int64  `json:\"user_id\" binding:\"required\" example:\"1\"`\n\tNickname         string `json:\"nickname\" binding:\"required\"`\n\tSubscriptionID   int64  `json:\"subscription_id\" binding:\"required\"`\n\tSubscriptionName string `json:\"subscription_name\" binding:\"required\"`\n\tTimeUnit         string `json:\"time_unit\" binding:\"required,oneof=day week month quarter year\"`\n}\n\n// UpdateManualTransferOrder updates a manual transfer order\n// @Summary Update manual transfer order\n// @Description Update details of a manual transfer order\n// @Tags Order\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Order ID\"\n// @Param data body UpdateManualTransferOrderRequest true \"Order details\"\n// @Success 200 {object} model.CommonResponse{data=model.Order}\n// @Router /api/orders/{id}/manual [put]\nfunc UpdateManualTransferOrder(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid ID\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\tvar req UpdateManualTransferOrderRequest\n\tif err = c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\torder, err := model.GetOrderByID(eid, id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(model.OrderNotFound))\n\t\treturn\n\t}\n\n\tif order.PayType != 2 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"Only manual payment orders can be updated\"))\n\t\treturn\n\t}\n\n\t// Update order fields\n\torder.Amount = req.Amount\n\torder.Currency = req.Currency\n\torder.Duration = req.Duration\n\torder.UserID = req.UserID\n\torder.Nickname = req.Nickname\n\torder.ServiceID = req.SubscriptionID\n\torder.SubscriptionName = req.SubscriptionName\n\torder.TimeUnit = req.TimeUnit\n\n\tif err := order.Update(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(order))\n}\n\nfunc QueryTradeOrder(c *gin.Context) {\n\torderId := c.Param(\"order_id\")\n\tif orderId == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Order ID is required\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\t// Try to get order from database\n\torder, err := model.GetOrderByOrderId(eid, orderId)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(model.OrderNotFound))\n\t\treturn\n\t}\n\n\tpaySetting, err := model.GetPaySettingByType(eid, order.PayType)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Payment method not configured\"))\n\t\treturn\n\t}\n\n\tfactory := &payment.PaymentFactory{}\n\tnewPayment, err := factory.NewPayment(order.PayType)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\trsp, err := newPayment.QueryPaymentStatus(order, paySetting)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(rsp))\n}\n\nfunc RefunTradeOrder(c *gin.Context) {\n\torderId := c.Param(\"order_id\")\n\tif orderId == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Order ID is required\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\t// Try to get order from database\n\torder, err := model.GetOrderByOrderId(eid, orderId)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(model.OrderNotFound))\n\t\treturn\n\t}\n\n\tpaySetting, err := model.GetPaySettingByType(eid, order.PayType)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Payment method not configured\"))\n\t\treturn\n\t}\n\n\tfactory := &payment.PaymentFactory{}\n\tnewPayment, err := factory.NewPayment(order.PayType)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\trsp, err := newPayment.Refund(order, paySetting)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(rsp))\n}\n"
  },
  {
    "path": "api/controller/pay.go",
    "content": "package controller\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common\"\n\t\"github.com/53AI/53AIHub/common/utils\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/payment\"\n\t\"github.com/53AI/53AIHub/tasks\"\n\t\"github.com/gin-gonic/gin\"\n\talipayV2 \"github.com/go-pay/gopay/alipay\"\n\t\"github.com/go-pay/gopay/wechat/v3\"\n\t\"github.com/go-pay/xlog\"\n)\n\n// WechatNotifyResponse represents the response for WeChat payment notification\ntype WechatNotifyResponse struct {\n\tCode    string `json:\"code\" example:\"SUCCESS\"`\n\tMessage string `json:\"message\" example:\"SUCCESS\"`\n}\n\n// CreateOrderRequest represents the request for creating a new order\ntype CreateOrderRequest struct {\n\tSubscriptionID   int64  `json:\"subscription_id\" form:\"subscription_id\" binding:\"required\" example:\"1\"`                // group_id\n\tSubscriptionName string `json:\"subscription_name\" form:\"subscription_name\" binding:\"required\" example:\"Professional\"` // group_name\n\tDuration         int    `json:\"duration\" form:\"duration\" binding:\"required\" example:\"12\"`                             // Duration in months\n\tTimeUnit         string `json:\"time_unit\" form:\"time_unit\" binding:\"required\" example:\"month\"`                        // Time unit for subscription duration\n\tAmount           int64  `json:\"amount\" form:\"amount\" binding:\"required\" example:\"29900\"`                              // Amount in cents\n\tCurrency         string `json:\"currency\" form:\"currency\" binding:\"required\" example:\"CNY\"`                            // Currency type\n\tPayType          int    `json:\"pay_type\" form:\"pay_type\" binding:\"required\" example:\"1\"`                              // 1: WeChat, 2: Manual, 3: PayPal, 4: Alipay\n\tOrderId          string `json:\"order_id\" form:\"order_id\"`                                                             // 订单ID存在则使用旧订单发起支付\n\tUserID           int64  `json:\"user_id\" form:\"user_id\" binding:\"required\" example:\"1\"`                                // User ID\n\tNickname         string `json:\"nickname\" form:\"nickname\" binding:\"required\" example:\"nickname\"`                       // User nickname\n\tReturnUrl        string `json:\"return_url\" form:\"return_url\"`                                                         // Return URL for alipay\n}\n\n// OrderResponse represents the response for order operations\ntype OrderResponse struct {\n\tOrder       *model.Order `json:\"order\"`\n\tPaymentInfo interface{}  `json:\"payment_info,omitempty\"` // Payment-specific information\n}\n\n// PayOrderRequest represents the request for paying an order\ntype PayOrderRequest struct {\n\tPayType   int    `json:\"pay_type\" binding:\"required\" example:\"1\"`        // Payment type (1: WeChat, 2: Manual, 3: PayPal)\n\tPayMethod string `json:\"pay_method\" binding:\"required\" example:\"native\"` // Payment method (e.g., \"native\", \"jsapi\")\n\tOpenID    string `json:\"openid\" example:\"\"`                              // OpenID for JSAPI payment (optional)\n}\n\n// PayOrderResponse represents the response for paying an order\ntype PayOrderResponse struct {\n\tPaymentInfo interface{}  `json:\"payment_info\"` // Payment-specific information\n\tOrder       *model.Order `json:\"order\"`        // Updated order information\n}\n\nvar orderMutex = &sync.Mutex{}\n\n// CreateOrder creates a new order\n// @Summary Create order\n// @Description Create a new order for service subscription\n// @Tags Order\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param order body CreateOrderRequest true \"Order information\"\n// @Success 200 {object} model.CommonResponse{data=OrderResponse}\n// @Router /api/orders [post]\nfunc CreateOrder(c *gin.Context) {\n\tvar req CreateOrderRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// Validate payment type\n\tif !isValidPayType(req.PayType) {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid payment type\"))\n\t\treturn\n\t}\n\n\t// Get payment setting\n\tpaySetting, err := model.GetPaySettingByType(eid, req.PayType)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Payment method not configured\"))\n\t\treturn\n\t}\n\n\tif paySetting.PayStatus != model.PayStatusEnabled {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Payment method is disabled\"))\n\t\treturn\n\t}\n\n\torder := getOrder(c, eid, req, paySetting)\n\n\tfactory := &payment.PaymentFactory{}\n\tnewPayment, err := factory.NewPayment(req.PayType)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\tpaymentReq := &payment.PaymentRequest{\n\t\tOrder:      order,\n\t\tPaySetting: paySetting,\n\t\tOpenID:     c.Query(\"openid\"),\n\t\tReturnURL:  req.ReturnUrl,\n\t\tPayMethod:  c.Query(\"pay_method\"),\n\t}\n\tpaymentInfo, processErr := newPayment.CreateOrder(paymentReq)\n\n\tif processErr != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(processErr))\n\t\treturn\n\t}\n\n\tif req.OrderId == \"\" {\n\t\tif err := order.Create(); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\n\tif order.Status == model.OrderStatusPending && order.ExpiredTime > 0 {\n\t\tif err := tasks.AddOrderToExpirationQueue(order.Eid, order.OrderId, order.ExpiredTime); err != nil {\n\t\t\txlog.Error(\"Failed to add order to expiration queue:\", err)\n\t\t}\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&OrderResponse{\n\t\tOrder:       order,\n\t\tPaymentInfo: paymentInfo,\n\t}))\n}\n\nfunc getOrder(c *gin.Context, eid int64, req CreateOrderRequest, paySetting *model.PaySetting) *model.Order {\n\torder := &model.Order{}\n\tif req.PayType == model.PayTypeAlipay && req.OrderId != \"\" {\n\t\torder, _ = model.GetOrderByOrderId(eid, req.OrderId)\n\t\tif order == nil {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(model.OrderNotFound))\n\t\t\treturn nil\n\t\t}\n\t\tif order.PayType != model.PayTypeAlipay {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Order is not an Alipay order\"))\n\t\t\treturn nil\n\t\t}\n\t\tif order.Status != model.OrderStatusPending {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Order is not pending\"))\n\t\t\treturn nil\n\t\t}\n\t} else {\n\t\torderId := utils.GenerateOrderId()\n\n\t\torderStatus := model.OrderStatusPending\n\t\tif req.PayType == model.PayTypeManual {\n\t\t\torderStatus = model.OrderStatusConfirming\n\t\t}\n\n\t\t// Create order object (but don't save to database yet)\n\t\torder = &model.Order{\n\t\t\tOrderId:          orderId,\n\t\t\tEid:              eid,\n\t\t\tUserID:           req.UserID,\n\t\t\tNickname:         req.Nickname,\n\t\t\tServiceID:        req.SubscriptionID,\n\t\t\tServiceType:      model.ServiceTypeSubscription,\n\t\t\tSubscriptionName: req.SubscriptionName,\n\t\t\tDuration:         req.Duration,\n\t\t\tTimeUnit:         req.TimeUnit,\n\t\t\tAmount:           req.Amount,\n\t\t\tCurrency:         req.Currency,\n\t\t\tPayType:          req.PayType,\n\t\t\tStatus:           orderStatus,\n\t\t\tExpiredTime:      time.Now().Add(2 * time.Hour).UnixMilli(),\n\t\t}\n\t}\n\treturn order\n}\n\n// Cache order data\n// func cacheOrderData(order *model.Order) {\n// \torderData, _ := json.Marshal(order)\n// \tcommon.RedisSet(order.OrderId, string(orderData), 2*time.Hour)\n// }\n\n// Get cached order data\nfunc getCachedOrder(orderId string) (*model.Order, bool) {\n\tdata, err := common.RedisGet(orderId)\n\tif err != nil || data == \"\" {\n\t\treturn nil, false\n\t}\n\n\tvar order model.Order\n\terr = json.Unmarshal([]byte(data), &order)\n\tif err != nil {\n\t\treturn nil, false\n\t}\n\n\treturn &order, true\n}\n\n// Remove cached order data\nfunc removeCachedOrder(orderId string) {\n\tcommon.RedisDel(orderId)\n}\n\n// createOrUpdateOrderFromCache creates a new order from cache or updates an existing one\nfunc createOrUpdateOrderFromCache(eid int64, orderId string, status int, transactionId string) (*model.Order, error) {\n\t// Lock to prevent concurrent operations\n\torderMutex.Lock()\n\tdefer orderMutex.Unlock()\n\n\t// Check if order exists in database\n\tdbOrder, err := model.GetOrderByOrderId(eid, orderId)\n\tif err != nil {\n\t\t// Order not found in database, check cache\n\t\tcachedOrder, found := getCachedOrder(orderId)\n\t\tif !found {\n\t\t\treturn nil, fmt.Errorf(\"order not found in database or cache: %s\", orderId)\n\t\t}\n\n\t\txlog.Info(\"Order found in cache:\", orderId)\n\t\t// Create order from cached data\n\t\tcachedOrder.Status = status\n\t\tif transactionId != \"\" {\n\t\t\tcachedOrder.TransactionId = transactionId\n\t\t}\n\n\t\tif status == model.OrderStatusPaid {\n\t\t\tcachedOrder.PayTime = time.Now().UTC().UnixMilli()\n\t\t}\n\n\t\tif err = cachedOrder.Create(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"create order from cache error: %v\", err)\n\t\t}\n\t\txlog.Info(\"Successfully created order from cache with status:\", status)\n\n\t\t// Remove from cache\n\t\tremoveCachedOrder(orderId)\n\t\txlog.Info(\"Removed order from cache\")\n\n\t\treturn cachedOrder, nil\n\t}\n\n\t// Order exists, update status\n\tif status == model.OrderStatusPaid {\n\t\terr = model.UpdateOrderPaid(eid, orderId, transactionId)\n\t\tdbOrder.Status = model.OrderStatusPaid\n\t\tdbOrder.TransactionId = transactionId\n\t\tdbOrder.PayTime = time.Now().UTC().UnixMilli()\n\t} else {\n\t\terr = model.UpdateOrderStatus(eid, orderId, status)\n\t\tdbOrder.Status = status\n\t}\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"update order status error: %v\", err)\n\t}\n\txlog.Info(\"Successfully updated order status to:\", status)\n\n\t// Remove from cache if exists\n\tremoveCachedOrder(orderId)\n\txlog.Info(\"Attempted to remove order from cache\")\n\n\treturn dbOrder, nil\n}\n\nfunc createOrUpdateOrderFromCacheWithTime(eid int64, orderId string, status int, transactionId string, payTime int64) (*model.Order, error) {\n\t// Lock to prevent concurrent operations\n\torderMutex.Lock()\n\tdefer orderMutex.Unlock()\n\n\t// Check if order exists in database\n\tdbOrder, err := model.GetOrderByOrderId(eid, orderId)\n\tif err != nil {\n\t\t// Order not found in database, check cache\n\t\tcachedOrder, found := getCachedOrder(orderId)\n\t\tif !found {\n\t\t\treturn nil, fmt.Errorf(\"order not found in database or cache: %s\", orderId)\n\t\t}\n\n\t\txlog.Info(\"Order found in cache:\", orderId)\n\t\t// Create order from cached data\n\t\tcachedOrder.Status = status\n\t\tif transactionId != \"\" {\n\t\t\tcachedOrder.TransactionId = transactionId\n\t\t}\n\n\t\tif status == model.OrderStatusPaid && payTime > 0 {\n\t\t\tcachedOrder.PayTime = payTime\n\t\t\txlog.Info(\"Setting payment time from WeChat:\", time.UnixMilli(payTime).Format(time.RFC3339))\n\t\t} else if status == model.OrderStatusPaid {\n\t\t\tcachedOrder.PayTime = time.Now().UTC().UnixMilli()\n\t\t}\n\n\t\tif err = cachedOrder.Create(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"create order from cache error: %v\", err)\n\t\t}\n\t\txlog.Info(\"Successfully created order from cache with status:\", status)\n\n\t\t// Remove from cache\n\t\tremoveCachedOrder(orderId)\n\t\txlog.Info(\"Removed order from cache\")\n\n\t\treturn cachedOrder, nil\n\t}\n\n\t// Order exists, update status\n\tif status == model.OrderStatusPaid {\n\t\tif payTime > 0 {\n\t\t\terr = model.UpdateOrderPaidWithTime(eid, orderId, transactionId, payTime)\n\t\t\tdbOrder.PayTime = payTime\n\t\t} else {\n\t\t\terr = model.UpdateOrderPaid(eid, orderId, transactionId)\n\t\t\tdbOrder.PayTime = time.Now().UTC().UnixMilli()\n\t\t}\n\t\tdbOrder.Status = model.OrderStatusPaid\n\t\tdbOrder.TransactionId = transactionId\n\t} else {\n\t\terr = model.UpdateOrderStatus(eid, orderId, status)\n\t\tdbOrder.Status = status\n\t}\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"update order status error: %v\", err)\n\t}\n\txlog.Info(\"Successfully updated order status to:\", status)\n\n\t// Remove from cache if exists\n\tremoveCachedOrder(orderId)\n\txlog.Info(\"Attempted to remove order from cache\")\n\n\treturn dbOrder, nil\n}\n\n// AlipayNotify handles Alipay payment notification callbacks\n// It processes payment result notifications sent by Alipay after a payment is completed\n// The function verifies the notification, parses the data, and updates the order status accordingly\n// @Summary Process Alipay payment notification\n// @Description Handle payment notification callbacks from Alipay\n// @Tags Payment\n// @Accept json\n// @Produce json\n// @Param id path int true \"Enterprise ID\"\n// @Success 200 {string} string \"success\"\n// @Failure 400 {string} string \"Bad Request\"\n// @Failure 500 {string} string \"Internal Server Error\"\n// @Router /api/payment/alipay/notify/{id} [post]\nfunc AlipayNotify(c *gin.Context) {\n\t// Log request basic information\n\txlog.Info(\"Received Alipay payment notification - Time:\", time.Now().Format(\"2006-01-02 15:04:05\"))\n\txlog.Info(\"Request IP:\", c.ClientIP())\n\n\t// Get enterprise ID\n\tnotifyID := c.Param(\"id\")\n\teid, err := strconv.ParseInt(notifyID, 10, 64)\n\tif err != nil {\n\t\txlog.Error(\"Invalid notification ID:\", err)\n\t\tc.String(http.StatusBadRequest, \"fail\")\n\t\treturn\n\t}\n\n\t// Get Alipay payment settings\n\tpaySetting, err := model.GetPaySettingByType(eid, model.PayTypeAlipay)\n\tif err != nil {\n\t\txlog.Error(\"Payment setting not found:\", err)\n\t\tc.String(http.StatusBadRequest, \"fail\")\n\t\treturn\n\t}\n\n\t// Parse Alipay configuration\n\tvar alipayConfig model.AlipayConfig\n\tif err = json.Unmarshal([]byte(paySetting.PayConfig), &alipayConfig); err != nil {\n\t\txlog.Error(\"Parse payment config error:\", err)\n\t\tc.String(http.StatusInternalServerError, \"fail\")\n\t\treturn\n\t}\n\n\tnotifyReq, err := alipayV2.ParseNotifyToBodyMap(c.Request)\n\tnotifyReqJson, _ := json.Marshal(notifyReq)\n\txlog.Info(\"Parsed notification:\", string(notifyReqJson))\n\tif err != nil {\n\t\txlog.Error(\"Parse notification error:\", err)\n\t\tc.String(http.StatusBadRequest, \"fail\")\n\t\treturn\n\t}\n\n\tvar ok bool\n\tok, err = alipayV2.VerifySign(alipayConfig.AlipayPublicKey, notifyReq)\n\n\tif err != nil || !ok {\n\t\txlog.Error(\"Signature verification failed:\", err)\n\t\tc.String(http.StatusBadRequest, \"fail\")\n\t\treturn\n\t}\n\n\t// Check trade status\n\ttradeStatus := notifyReq.Get(\"trade_status\")\n\tif tradeStatus != \"TRADE_SUCCESS\" {\n\t\txlog.Errorf(\"Trade state not success: %s\", tradeStatus)\n\t\tc.String(http.StatusOK, \"success\")\n\t\treturn\n\t}\n\n\t// Get order information\n\torderId := notifyReq.Get(\"out_trade_no\")\n\ttransactionId := notifyReq.Get(\"trade_no\")\n\tsuccessTime := notifyReq.Get(\"gmt_payment\")\n\n\t// Parse payment time\n\tvar payTime int64\n\tif successTime != \"\" {\n\t\tlayout := \"2006-01-02 15:04:05\"\n\t\tt, err := time.Parse(layout, successTime)\n\t\tif err != nil {\n\t\t\txlog.Error(\"Failed to parse success time:\", err)\n\t\t\tpayTime = time.Now().UTC().UnixMilli()\n\t\t} else {\n\t\t\tpayTime = t.UnixMilli()\n\t\t}\n\t} else {\n\t\tpayTime = time.Now().UTC().UnixMilli()\n\t}\n\n\t_, err = createOrUpdateOrderFromCacheWithTime(eid, orderId, model.OrderStatusPaid, transactionId, payTime)\n\tif err != nil {\n\t\txlog.Error(\"Update order status error:\", err)\n\t\tc.String(http.StatusInternalServerError, \"fail\")\n\t\treturn\n\t}\n\n\t// Return success response as required by Alipay\n\tc.String(http.StatusOK, \"success\")\n}\n\n// WechatPayNotify handles WeChat payment notification callbacks\n// It processes payment result notifications sent by WeChat Pay after a payment is completed\n// The function verifies the notification, decrypts the data, and updates the order status accordingly\n// @Summary Process WeChat payment notification\n// @Description Handle payment notification callbacks from WeChat Pay\n// @Tags Payment\n// @Accept json\n// @Produce json\n// @Param id path int true \"Enterprise ID\"\n// @Success 200 {object} WechatNotifyResponse\n// @Failure 400 {string} string \"Bad Request\"\n// @Failure 500 {string} string \"Internal Server Error\"\n// @Router /api/payment/wechat/notify/{id} [post]\nfunc WechatPayNotify(c *gin.Context) {\n\t// Log request basic information\n\txlog.Info(\"Received WeChat payment notification - Time:\", time.Now().Format(\"2006-01-02 15:04:05\"))\n\txlog.Info(\"Request IP:\", c.ClientIP())\n\n\t// Log request headers\n\theaders := make(map[string]string)\n\tfor k, v := range c.Request.Header {\n\t\tif len(v) > 0 {\n\t\t\theaders[k] = v[0]\n\t\t\txlog.Info(\"Request header:\", k, \"=\", v[0])\n\t\t}\n\t}\n\n\t// Read and log request body - Ensure safe reading of request body\n\tvar bodyBytes []byte\n\tif c.Request.Body != nil {\n\t\t// Save original request body\n\t\tbodyBytes, _ = io.ReadAll(c.Request.Body)\n\t\t// Reset request body for subsequent processing\n\t\tc.Request.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))\n\n\t\t// Log original request body\n\t\txlog.Info(\"Request raw body:\", string(bodyBytes))\n\t}\n\n\t// Reset request body again for subsequent parsing\n\tif len(bodyBytes) > 0 {\n\t\tc.Request.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))\n\t}\n\n\t// Get enterprise ID\n\tnotifyID := c.Param(\"id\")\n\teid, err := strconv.ParseInt(notifyID, 10, 64)\n\tif err != nil {\n\t\txlog.Error(\"Invalid notification ID:\", err)\n\t\tc.String(http.StatusBadRequest, \"Invalid notification ID\")\n\t\treturn\n\t}\n\n\t// Get WeChat payment settings\n\tpaySetting, err := model.GetPaySettingByType(eid, model.PayTypeWechat)\n\tif err != nil {\n\t\txlog.Error(\"Payment setting not found:\", err)\n\t\tc.String(http.StatusBadRequest, \"Payment setting not found\")\n\t\treturn\n\t}\n\n\t// Parse WeChat configuration\n\tvar wechatConfig model.WechatPayConfig\n\tif err = json.Unmarshal([]byte(paySetting.PayConfig), &wechatConfig); err != nil {\n\t\txlog.Error(\"Parse payment config error:\", err)\n\t\tc.String(http.StatusInternalServerError, \"Failed to parse payment configuration\")\n\t\treturn\n\t}\n\n\t// 添加详细的配置信息日志（隐藏敏感信息）\n\txlog.Info(\"WeChat Pay Config Debug Info:\")\n\txlog.Info(\"- AppID length:\", len(wechatConfig.AppID))\n\txlog.Info(\"- MchID:\", wechatConfig.MchID)\n\txlog.Info(\"- SerialNo:\", wechatConfig.SerialNo)\n\txlog.Info(\"- APIv3Key length:\", len(wechatConfig.APIv3Key))\n\txlog.Info(\"- PrivateKeyPath:\", wechatConfig.PrivateKeyPath)\n\txlog.Info(\"- NotifyURL:\", wechatConfig.NotifyURL)\n\txlog.Info(\"- UseEncryptedConfig:\", wechatConfig.UseEncryptedConfig)\n\n\t// 检查关键配置是否完整\n\tif wechatConfig.AppID == \"\" {\n\t\txlog.Error(\"AppID is empty in payment configuration\")\n\t\tc.String(http.StatusInternalServerError, \"Payment configuration error: missing AppID\")\n\t\treturn\n\t}\n\n\tif wechatConfig.MchID == \"\" {\n\t\txlog.Error(\"MchID is empty in payment configuration\")\n\t\tc.String(http.StatusInternalServerError, \"Payment configuration error: missing MchID\")\n\t\treturn\n\t}\n\n\t// 检查APIv3Key是否正确加载\n\tif wechatConfig.APIv3Key == \"\" {\n\t\txlog.Error(\"APIv3Key is empty in payment configuration\")\n\t\tc.String(http.StatusInternalServerError, \"Payment configuration error: missing APIv3Key\")\n\t\treturn\n\t}\n\n\t// 检查APIv3Key长度是否符合要求（应该为32位）\n\tif len(wechatConfig.APIv3Key) != 32 {\n\t\txlog.Error(\"APIv3Key length is invalid, expected 32, got:\", len(wechatConfig.APIv3Key))\n\t\txlog.Error(\"APIv3Key content (first 4 and last 4 chars):\", wechatConfig.APIv3Key[:4], \"...\", wechatConfig.APIv3Key[len(wechatConfig.APIv3Key)-4:])\n\t\tc.String(http.StatusInternalServerError, fmt.Sprintf(\"Payment configuration error: invalid APIv3Key length, expected 32, got %d\", len(wechatConfig.APIv3Key)))\n\t\treturn\n\t}\n\n\t// Initialize WeChat client\n\t_, err = payment.InitWechatClient(wechatConfig)\n\tif err != nil {\n\t\txlog.Error(\"Initialize WeChat client error:\", err)\n\t\tc.String(http.StatusInternalServerError, \"Failed to initialize payment client: \"+err.Error())\n\t\treturn\n\t}\n\n\t// Parse notification parameters\n\tnotifyReq, err := wechat.V3ParseNotify(c.Request)\n\tif err != nil {\n\t\txlog.Error(\"Parse notification error:\", err)\n\t\t// Log detailed error information\n\t\txlog.Error(\"Parse notification detailed error:\", err.Error())\n\t\tc.String(http.StatusBadRequest, \"Failed to parse notification\")\n\t\treturn\n\t}\n\n\t// Log parsed notification request data\n\tnotifyReqJSON, _ := json.MarshalIndent(notifyReq, \"\", \"  \")\n\txlog.Info(\"Parsed notification request data:\", string(notifyReqJSON))\n\n\t// Decrypt payment notification\n\t// result, err := notifyReq.DecryptPayCipherText(wechatConfig.APIv3Key)\n\t// 通用通知解密（推荐此方法）\n\tvar result wechat.V3DecryptPayResult\n\terr = notifyReq.DecryptCipherTextToStruct(wechatConfig.APIv3Key, &result)\n\tif err != nil {\n\t\txlog.Error(\"Decrypt notification data error:\", err)\n\t\t// Log detailed error information\n\t\txlog.Error(\"Decrypt notification detailed error:\", err.Error())\n\t\tc.String(http.StatusBadRequest, \"Failed to decrypt notification data\")\n\t\treturn\n\t}\n\n\t// Process successful payment notification\n\tif result.TradeState == \"SUCCESS\" {\n\t\t// Get order number\n\t\torderId := result.OutTradeNo\n\t\ttransactionId := result.TransactionId\n\n\t\tvar payTime int64\n\t\tif result.SuccessTime != \"\" {\n\t\t\tsuccessTime, err := time.Parse(time.RFC3339, result.SuccessTime)\n\t\t\tif err != nil {\n\t\t\t\txlog.Error(\"Failed to parse success time:\", err)\n\t\t\t\tpayTime = time.Now().UTC().UnixMilli()\n\t\t\t} else {\n\t\t\t\tpayTime = successTime.UnixMilli()\n\t\t\t\txlog.Info(\"Using payment success time from WeChat:\", result.SuccessTime)\n\t\t\t}\n\t\t} else {\n\t\t\tpayTime = time.Now().UTC().UnixMilli()\n\t\t\txlog.Info(\"No success time provided, using current time\")\n\t\t}\n\n\t\t// Lock to prevent concurrent operations\n\t\torderMutex.Lock()\n\t\tdefer orderMutex.Unlock()\n\n\t\t// Check if order exists in database\n\t\t_, err := model.GetOrderByOrderId(eid, orderId)\n\t\tif err != nil {\n\t\t\t// Order not found in database, check cache\n\t\t\tcachedOrder, found := getCachedOrder(orderId)\n\t\t\tif found {\n\t\t\t\t// Create order from cached data\n\t\t\t\tcachedOrder.Status = model.OrderStatusPaid\n\t\t\t\tcachedOrder.TransactionId = transactionId\n\t\t\t\tcachedOrder.PayTime = payTime\n\n\t\t\t\tif err = cachedOrder.Create(); err != nil {\n\t\t\t\t\txlog.Error(\"Create order from cache error:\", err)\n\t\t\t\t\tc.String(http.StatusInternalServerError, \"Failed to create order\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// Remove from cache\n\t\t\t\tremoveCachedOrder(orderId)\n\t\t\t} else {\n\t\t\t\txlog.Error(\"Order not found in database or cache:\", orderId)\n\t\t\t\tc.String(http.StatusBadRequest, \"Order not found\")\n\t\t\t\treturn\n\t\t\t}\n\t\t} else {\n\t\t\t// Order exists, update status\n\t\t\terr = model.UpdateOrderPaidWithTime(eid, orderId, transactionId, payTime)\n\t\t\tif err != nil {\n\t\t\t\txlog.Error(\"Update order status error:\", err)\n\t\t\t\tc.String(http.StatusInternalServerError, \"Failed to update order\")\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Remove from cache if exists\n\t\t\tremoveCachedOrder(orderId)\n\t\t}\n\n\t\t// Return success response\n\t\tc.JSON(http.StatusOK, &WechatNotifyResponse{\n\t\t\tCode:    \"SUCCESS\",\n\t\t\tMessage: \"SUCCESS\",\n\t\t})\n\t} else {\n\t\txlog.Errorf(\"Trade state not success: %s\", result.TradeState)\n\t\tc.String(http.StatusBadRequest, \"Trade state not success\")\n\t}\n}\n\n// QueryOrderStatus queries the status of an order\n// @Summary Query order status\n// @Description Query the status of an order\n// @Tags Order\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param order_id path string true \"Order ID\"\n// @Success 200 {object} model.CommonResponse{data=OrderStatusResponse}\n// @Router /api/orders/status/{order_id} [get]\n// QueryOrderStatus queries the status of an order\nfunc QueryOrderStatus(c *gin.Context) {\n\torderId := c.Param(\"order_id\")\n\tif orderId == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Order ID is required\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// Try to get order from database\n\torder, err := model.GetOrderByOrderId(eid, orderId)\n\tif err != nil {\n\t\t// Order not found in database, check cache\n\t\tcachedOrder, found := getCachedOrder(orderId)\n\t\tif !found {\n\t\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(model.OrderNotFound))\n\t\t\treturn\n\t\t}\n\n\t\t// Use cached order\n\t\torder = cachedOrder\n\t}\n\n\t// Initialize response structure\n\tresponse := &OrderStatusResponse{\n\t\tOrder:              order,\n\t\tOriginalStatus:     \"\",\n\t\tOriginalStatusDesc: \"\",\n\t}\n\n\tif order.PayType == model.PayTypeWechat {\n\t\t// Query WeChat payment status\n\t\tstatus, transactionId, originalStatus, payTime, err := queryWechatOrderStatusWithOriginal(eid, orderId)\n\t\tif err == nil {\n\t\t\t// Set original status\n\t\t\tresponse.OriginalStatus = originalStatus\n\t\t\tresponse.OriginalStatusDesc = getTradeStateDesc(originalStatus)\n\n\t\t\t// Handle different payment states\n\t\t\tif status == model.OrderStatusPaid {\n\t\t\t\t// Payment successful, create or update order with payment time\n\t\t\t\tupdatedOrder, err := createOrUpdateOrderFromCacheWithTime(eid, orderId, model.OrderStatusPaid, transactionId, payTime)\n\t\t\t\tif err == nil {\n\t\t\t\t\torder = updatedOrder\n\t\t\t\t\txlog.Info(\"Order updated with payment time:\", time.UnixMilli(payTime).Format(time.RFC3339))\n\t\t\t\t} else {\n\t\t\t\t\txlog.Error(\"Failed to update order:\", err)\n\t\t\t\t}\n\t\t\t} else if originalStatus == model.TradeStateUserPaying {\n\t\t\t\t// User is paying, record this status but don't mark as paid\n\t\t\t\txlog.Info(\"User is paying for order:\", orderId)\n\n\t\t\t\t// If order is not in database yet, create it with pending status\n\t\t\t\tif order.ID == 0 {\n\t\t\t\t\tupdatedOrder, err := createOrUpdateOrderFromCache(eid, orderId, model.OrderStatusPending, \"\")\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\torder = updatedOrder\n\t\t\t\t\t} else {\n\t\t\t\t\t\txlog.Error(\"Failed to create order record for user paying:\", err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if status == model.OrderStatusPending && order.ID == 0 {\n\t\t\t\t// Order still pending and not in database\n\t\t\t\t// Keep in cache, do nothing\n\t\t\t}\n\t\t}\n\t} else if order.PayType == model.PayTypeAlipay {\n\t\t// Get Alipay order status\n\t\tstatus, transactionId, originalStatus, payTime, err := queryAlipayOrderStatusWithOriginal(eid, order)\n\t\tif err == nil {\n\t\t\tresponse.OriginalStatus = originalStatus\n\t\t\tresponse.OriginalStatusDesc = getTradeStateDesc(originalStatus)\n\n\t\t\t// Handle different payment states\n\t\t\tif status == model.OrderStatusPaid {\n\t\t\t\t// Payment successful, create or update order with payment time\n\t\t\t\tupdatedOrder, err := createOrUpdateOrderFromCacheWithTime(eid, orderId, model.OrderStatusPaid, transactionId, payTime)\n\t\t\t\tif err == nil {\n\t\t\t\t\torder = updatedOrder\n\t\t\t\t\txlog.Info(\"Order updated with payment time:\", time.UnixMilli(payTime).Format(time.RFC3339))\n\t\t\t\t} else {\n\t\t\t\t\txlog.Error(\"Failed to update order:\", err)\n\t\t\t\t}\n\t\t\t} else if originalStatus == model.TradeStateWaitBuyerPay {\n\t\t\t\t// User is paying, record this status but don't mark as paid\n\t\t\t\txlog.Info(\"User is paying for order:\", orderId)\n\n\t\t\t\t// If order is not in database yet, create it with pending status\n\t\t\t\tif order.ID == 0 {\n\t\t\t\t\tupdatedOrder, err := createOrUpdateOrderFromCache(eid, orderId, model.OrderStatusPending, \"\")\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\torder = updatedOrder\n\t\t\t\t\t} else {\n\t\t\t\t\t\txlog.Error(\"Failed to create order record for user paying:\", err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if status == model.OrderStatusPending && order.ID == 0 {\n\t\t\t\t// Order still pending and not in database\n\t\t\t\t// Keep in cache, do nothing\n\t\t\t}\n\t\t}\n\t}\n\n\t// If order status is pending, check payment status\n\tswitch order.Status {\n\tcase model.OrderStatusPending:\n\t\t// Check if order has expired\n\t\tif order.Status == model.OrderStatusPending && time.Now().UnixMilli() > order.ExpiredTime {\n\t\t\t// If order is in database, update status\n\t\t\tif order.ID > 0 {\n\t\t\t\tmodel.UpdateOrderStatus(eid, orderId, model.OrderStatusExpired)\n\t\t\t}\n\t\t\torder.Status = model.OrderStatusExpired\n\t\t\tresponse.OriginalStatus = model.TradeStateClosed\n\t\t\tresponse.OriginalStatusDesc = \"Order Expired\"\n\n\t\t\t// Remove from cache\n\t\t\tremoveCachedOrder(orderId)\n\t\t}\n\tcase model.OrderStatusPaid:\n\t\tresponse.OriginalStatus = model.TradeStateSuccess\n\t\tresponse.OriginalStatusDesc = \"Payment Successful\"\n\t// case model.OrderStatusExpired:\n\t// \tresponse.OriginalStatus = model.TradeStateClosed\n\t// \tresponse.OriginalStatusDesc = \"Order Expired\"\n\tcase model.OrderStatusConfirming:\n\t\tresponse.OriginalStatus = \"CONFIRMING\"\n\t\tresponse.OriginalStatusDesc = \"Waiting for Confirmation\"\n\t}\n\t// Update order information in response\n\tresponse.Order = order\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(response))\n}\n\n// OrderStatusResponse contains order status and original payment status\ntype OrderStatusResponse struct {\n\tOrder              *model.Order `json:\"order\"`              // Order information\n\tOriginalStatus     string       `json:\"originalStatus\"`     // Original payment status code\n\tOriginalStatusDesc string       `json:\"originalStatusDesc\"` // Original payment status description\n}\n\n// Get WeChat payment status description\nfunc getTradeStateDesc(tradeState string) string {\n\tswitch tradeState {\n\tcase model.TradeStateSuccess:\n\t\treturn \"Payment Successful\"\n\tcase model.TradeStateRefund:\n\t\treturn \"Refund Initiated\"\n\tcase model.TradeStateNotPay:\n\t\treturn \"Not Paid\"\n\tcase model.TradeStateClosed:\n\t\treturn \"Order Closed\"\n\tcase model.TradeStateRevoked:\n\t\treturn \"Order Revoked\"\n\tcase model.TradeStateUserPaying:\n\t\treturn \"User is Paying\"\n\tcase model.TradeStatePayError:\n\t\treturn \"Payment Failed\"\n\tcase model.TradeStateWaitBuyerPay:\n\t\treturn \"Waiting for Payment\"\n\tcase model.TradeStateTradeClosed:\n\t\treturn \"Order Closed\"\n\tcase model.TradeStateTradeSuccess:\n\t\treturn \"Payment Success\"\n\tcase model.TradeStateTradeFinish:\n\t\treturn \"Payment Success\"\n\tdefault:\n\t\treturn \"Unknown Status\"\n\t}\n}\n\n// Query WeChat order status and return original status\nfunc queryWechatOrderStatusWithOriginal(eid int64, orderId string) (int, string, string, int64, error) {\n\t// Get WeChat payment settings\n\tpaySetting, err := model.GetPaySettingByType(eid, model.PayTypeWechat)\n\tif err != nil {\n\t\treturn 0, \"\", \"\", 0, err\n\t}\n\n\torder, err := model.GetOrderByOrderId(eid, orderId)\n\tif err != nil {\n\t\treturn 0, \"\", \"\", 0, err\n\t}\n\n\tfactory := &payment.PaymentFactory{}\n\tnewPayment, err := factory.NewPayment(order.PayType)\n\tif err != nil {\n\t\treturn 0, \"\", \"\", 0, err\n\t}\n\n\t// Query order status\n\trsp, err := newPayment.QueryPaymentStatus(order, paySetting)\n\tif err != nil {\n\t\treturn 0, \"\", \"\", 0, err\n\t}\n\n\twxRsp, ok := rsp.(*wechat.QueryOrderRsp)\n\tif !ok {\n\t\treturn 0, \"\", \"\", 0, fmt.Errorf(\"invalid response type\")\n\t}\n\n\tvar payTime int64\n\tif wxRsp.Response.SuccessTime != \"\" {\n\t\tsuccessTime, err := time.Parse(time.RFC3339, wxRsp.Response.SuccessTime)\n\t\tif err != nil {\n\t\t\txlog.Error(\"Failed to parse success time:\", err)\n\t\t\tpayTime = time.Now().UTC().UnixMilli()\n\t\t} else {\n\t\t\tpayTime = successTime.UnixMilli()\n\t\t\txlog.Info(\"Using payment success time from WeChat:\", wxRsp.Response.SuccessTime)\n\t\t}\n\t} else {\n\t\tpayTime = time.Now().UTC().UnixMilli()\n\t}\n\n\t// Check payment status\n\tif wxRsp.Response.TradeState == model.TradeStateSuccess {\n\t\treturn model.OrderStatusPaid, wxRsp.Response.TransactionId, wxRsp.Response.TradeState, payTime, nil\n\t} else if wxRsp.Response.TradeState == model.TradeStateClosed {\n\t\treturn model.OrderStatusExpired, \"\", wxRsp.Response.TradeState, 0, nil\n\t} else if wxRsp.Response.TradeState == model.TradeStateRefund {\n\t\treturn model.OrderStatusPending, \"\", wxRsp.Response.TradeState, 0, nil\n\t}\n\n\treturn model.OrderStatusPending, \"\", wxRsp.Response.TradeState, 0, nil\n}\n\n// Query Alipay order status and return original status\nfunc queryAlipayOrderStatusWithOriginal(eid int64, order *model.Order) (int, string, string, int64, error) {\n\t// Get Alipay payment settings\n\tpaySetting, err := model.GetPaySettingByType(eid, model.PayTypeAlipay)\n\tif err != nil {\n\t\treturn 0, \"\", \"\", 0, err\n\t}\n\n\tfactory := &payment.PaymentFactory{}\n\tnewPayment, err := factory.NewPayment(order.PayType)\n\tif err != nil {\n\t\treturn 0, \"\", \"\", 0, err\n\t}\n\n\t// Query order status\n\trsp, err := newPayment.QueryPaymentStatus(order, paySetting)\n\tif err != nil {\n\t\treturn 0, \"\", \"\", 0, err\n\t}\n\n\taliRsp, ok := rsp.(*alipayV2.TradeQueryResponse)\n\tif !ok {\n\t\treturn 0, \"\", \"\", 0, fmt.Errorf(\"invalid response type\")\n\t}\n\n\tvar payTime int64\n\tif aliRsp.Response.SendPayDate != \"\" {\n\t\t// Alipay timestamp format is \"yyyy-MM-dd HH:mm:ss\"\n\t\tlayout := \"2006-01-02 15:04:05\"\n\t\tsuccessTime, err := time.Parse(layout, aliRsp.Response.SendPayDate)\n\t\tif err != nil {\n\t\t\txlog.Error(\"Failed to parse success time:\", err)\n\t\t\tpayTime = time.Now().UTC().UnixMilli()\n\t\t} else {\n\t\t\tpayTime = successTime.UnixMilli()\n\t\t\txlog.Info(\"Using payment success time from Alipay:\", aliRsp.Response.SendPayDate)\n\t\t}\n\t} else {\n\t\tpayTime = time.Now().UTC().UnixMilli()\n\t}\n\n\t// Check payment status\n\tswitch aliRsp.Response.TradeStatus {\n\tcase model.TradeStateTradeSuccess, model.TradeStateTradeFinish:\n\t\treturn model.OrderStatusPaid, aliRsp.Response.TradeNo, aliRsp.Response.TradeStatus, payTime, nil\n\tcase model.TradeStateWaitBuyerPay:\n\t\treturn model.OrderStatusPending, \"\", aliRsp.Response.TradeStatus, 0, nil\n\tcase model.TradeStateTradeClosed:\n\t\treturn model.OrderStatusClosed, \"\", aliRsp.Response.TradeStatus, 0, nil\n\t}\n\n\treturn model.OrderStatusPending, \"\", aliRsp.Response.TradeStatus, 0, nil\n}\n\n// PayTypeStatus represents the status information of a payment type\ntype PayTypeStatus struct {\n\tPayType    int  `json:\"pay_type\"`   // Payment type ID\n\tEnabled    bool `json:\"enabled\"`    // Whether the payment type is enabled\n\tConfigured bool `json:\"configured\"` // Whether the payment type is configured\n}\n\n// GetAvailablePayTypes gets all available payment types\n// @Summary Get available payment types\n// @Description Get all payment types that are configured and enabled on the site\n// @Tags Payment\n// @Accept json\n// @Produce json\n// @Success 200 {object} model.CommonResponse{data=[]PayTypeStatus}\n// @Router /api/payment/available [get]\nfunc GetAvailablePayTypes(c *gin.Context) {\n\teid := config.GetEID(c)\n\n\t// Get all payment settings\n\tpaySettings, err := model.GetPaySettingsByEid(eid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Build payment type status list\n\tvar payTypeStatusList []PayTypeStatus\n\n\t// Add all possible payment types (can be adjusted according to actual situation)\n\tallPayTypes := []int{\n\t\tmodel.PayTypeWechat, // WeChat Pay\n\t\tmodel.PayTypeManual, // Manual Transfer\n\t\tmodel.PayTypePaypal, // PayPal\n\t\tmodel.PayTypeAlipay, // Alipay\n\t}\n\n\t// Create payment type mapping for quick lookup\n\tpayTypeMap := make(map[int]*model.PaySetting)\n\tfor _, setting := range paySettings {\n\t\tpayTypeMap[setting.PayType] = setting\n\t}\n\n\tfor _, payType := range allPayTypes {\n\t\tstatus := PayTypeStatus{\n\t\t\tPayType:    payType,\n\t\t\tEnabled:    false,\n\t\t\tConfigured: false,\n\t\t}\n\n\t\tif setting, exists := payTypeMap[payType]; exists {\n\t\t\tstatus.Configured = true\n\t\t\tstatus.Enabled = (setting.PayStatus == model.PayStatusEnabled)\n\t\t}\n\n\t\tpayTypeStatusList = append(payTypeStatusList, status)\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(payTypeStatusList))\n}\n"
  },
  {
    "path": "api/controller/pay_setting.go",
    "content": "package controller\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/common/utils\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/payment\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// PaySettingRequest represents the request for creating or updating a payment setting\ntype PaySettingRequest struct {\n\t// Payment type: 1:WeChat Pay 2:Manual Transfer 3:PayPal 4:alipay\n\tPayType int `json:\"pay_type\" binding:\"required\" example:\"1\" enums:\"1,2,3,4\"`\n\t// PayConfig is the payment configuration in JSON format\n\t// - For WeChat Pay: Required fields include appId, mchId, serialNo, apiV3Key, notifyUrl, privateKeyPath, platformCertPath\n\t// - For Alipay: Required fields include appId, privateKey, alipayPublicKey\n\tPayConfig   string `json:\"pay_config\" binding:\"required\" example:\"{\\\"appId\\\":\\\"wx123456\\\",\\\"mchId\\\":\\\"1900000109\\\",\\\"serialNo\\\":\\\"1DDE55AD98ED71EB\\\",\\\"apiV3Key\\\":\\\"Aa111111\\\",\\\"notifyUrl\\\":\\\"https://example.com/notify\\\",\\\"privateKeyPath\\\":\\\"/path/to/apiclient_key.pem\\\",\\\"certPath\\\":\\\"\\\",\\\"platformCertPath\\\":\\\"/path/to/platform_cert.pem\\\"}\"`\n\tPayStatus   bool   `json:\"pay_status\" example:\"true\" description:\"Payment status, true for enabled, false for disabled\"`\n\tExtraConfig string `json:\"extra_config\" example:\"{}\" description:\"Extra configuration\"`\n}\n\n// PaySettingsResponse represents the response for listing payment settings\ntype PaySettingsResponse struct {\n\tCount       int64               `json:\"count\"`\n\tPaySettings []*model.PaySetting `json:\"pay_settings\"`\n}\n\n// CreatePaySetting creates a new payment setting\n// @Summary Create payment setting\n// @Description Create a new payment setting. For WeChat Pay, certificate files will be read from the specified paths and encrypted\n// @Tags PaySetting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param setting body PaySettingRequest true \"Payment setting information including payment type, configuration and status. For WeChat Pay, configuration must include certificate file paths\"\n// @Success 200 {object} model.CommonResponse{data=model.PaySetting} \"Payment setting created successfully\"\n// @Failure 400 {object} model.CommonResponse \"Invalid parameters or payment setting already exists\"\n// @Failure 500 {object} model.CommonResponse \"Internal server error\"\n// @Router /api/pay_settings [post]\nfunc CreatePaySetting(c *gin.Context) {\n\tvar req PaySettingRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// Validate payment type\n\tif !isValidPayType(req.PayType) {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid payment type\"))\n\t\treturn\n\t}\n\n\t// Check if payment setting already exists\n\texisting, _ := model.GetPaySettingByType(eid, req.PayType)\n\tif existing != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Payment setting of this type already exists\"))\n\t\treturn\n\t}\n\n\t// Process configuration based on payment type\n\tvar err error\n\tif req.PayType == model.PayTypeWechat {\n\t\treq.PayConfig, err = processWechatConfig(req.PayConfig)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err.Error()))\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Set default status if not provided\n\tif !req.PayStatus {\n\t\treq.PayStatus = model.PayStatusEnabled\n\t}\n\n\tpaySetting := &model.PaySetting{\n\t\tEid:         eid,\n\t\tPayType:     req.PayType,\n\t\tPayConfig:   req.PayConfig,\n\t\tPayStatus:   req.PayStatus,\n\t\tExtraConfig: req.ExtraConfig,\n\t}\n\n\tif err = paySetting.Create(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tpayText, err := model.GetPayTypeText(paySetting.PayType)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModulePayment,\n\t\tAction:   model.SystemLogActionCreate,\n\t\tContent:  fmt.Sprintf(\"设置%s\", payText),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(paySetting))\n}\n\n// UpdatePaySetting updates an existing payment setting\n// @Summary Update payment setting\n// @Description Update an existing payment setting\n// @Tags PaySetting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Payment setting ID\"\n// @Param setting body PaySettingRequest true \"Payment setting information\"\n// @Success 200 {object} model.CommonResponse{data=model.PaySetting}\n// @Router /api/pay_settings/{id} [put]\nfunc UpdatePaySetting(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid ID\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// Get existing payment setting\n\tpaySetting, err := model.GetPaySettingByID(eid, id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(\"Payment setting not found\"))\n\t\treturn\n\t}\n\n\tvar req PaySettingRequest\n\tif err = c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Validate payment type\n\tif !isValidPayType(req.PayType) {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid payment type\"))\n\t\treturn\n\t}\n\n\t// Process configuration based on payment type\n\tif req.PayType == model.PayTypeWechat {\n\t\treq.PayConfig, err = processWechatConfig(req.PayConfig)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err.Error()))\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Update payment setting\n\tpaySetting.PayType = req.PayType\n\tpaySetting.PayConfig = req.PayConfig\n\tpaySetting.PayStatus = req.PayStatus\n\tpaySetting.ExtraConfig = req.ExtraConfig\n\n\tif err := paySetting.Update(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(paySetting))\n}\n\n// DeletePaySetting deletes a payment setting\n// @Summary Delete payment setting\n// @Description Delete a specific payment setting\n// @Tags PaySetting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Payment setting ID\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/pay_settings/{id} [delete]\nfunc DeletePaySetting(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid ID\"))\n\t\treturn\n\t}\n\n\tpaySetting, err := model.GetPaySettingByID(config.GetEID(c), id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tif err := paySetting.Delete(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// GetPaySetting gets a payment setting by ID\n// @Summary Get payment setting\n// @Description Get a specific payment setting by ID\n// @Tags PaySetting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Payment setting ID\"\n// @Success 200 {object} model.CommonResponse{data=model.PaySetting}\n// @Router /api/pay_settings/{id} [get]\nfunc GetPaySetting(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid ID\"))\n\t\treturn\n\t}\n\n\tpaySetting, err := model.GetPaySettingByID(config.GetEID(c), id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(paySetting))\n}\n\n// GetPaySettings gets all payment settings for the current enterprise\n// @Summary Get all payment settings\n// @Description Get all payment settings for the current enterprise\n// @Tags PaySetting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=PaySettingsResponse}\n// @Router /api/pay_settings [get]\nfunc GetPaySettings(c *gin.Context) {\n\tpaySettings, err := model.GetPaySettingsByEid(config.GetEID(c))\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&PaySettingsResponse{\n\t\tCount:       int64(len(paySettings)),\n\t\tPaySettings: paySettings,\n\t}))\n}\n\n// GetPaySettingByType gets a payment setting by type\n// @Summary Get payment setting by type\n// @Description Get a payment setting by payment type\n// @Tags PaySetting\n// @Accept json\n// @Produce json\n// @Param type path int true \"Payment type (1: WeChat Pay, 2: Manual Transfer, 3: PayPal)\"\n// @Success 200 {object} model.CommonResponse{data=model.PaySetting}\n// @Router /api/pay_settings/type/{type} [get]\nfunc GetPaySettingByType(c *gin.Context) {\n\ttypeStr := c.Param(\"type\")\n\tpayType, err := strconv.Atoi(typeStr)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid payment type\"))\n\t\treturn\n\t}\n\n\t// Validate payment type\n\tif !isValidPayType(payType) {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid payment type\"))\n\t\treturn\n\t}\n\n\tpaySetting, err := model.GetPaySettingByType(config.GetEID(c), payType)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(paySetting))\n}\n\n// PayConfigRequest represents the request for updating payment configuration\ntype PayConfigRequest struct {\n\tPayConfig   string `json:\"pay_config\" binding:\"required\" example:\"{\\\"appId\\\":\\\"wx123456\\\",\\\"mchId\\\":\\\"1900000109\\\",\\\"serialNo\\\":\\\"1DDE55AD98ED71EB\\\",\\\"apiV3Key\\\":\\\"Aa111111\\\",\\\"notifyUrl\\\":\\\"https://example.com/notify\\\",\\\"privateKeyPath\\\":\\\"/path/to/apiclient_key.pem\\\",\\\"certPath\\\":\\\"\\\",\\\"platformCertPath\\\":\\\"/path/to/platform_cert.pem\\\"}\"`\n\tExtraConfig string `json:\"extra_config\" example:\"{}\"`\n}\n\n// PayStatusRequest represents the request for updating payment status\ntype PayStatusRequest struct {\n\tPayStatus *bool `json:\"pay_status\" binding:\"required\" example:\"false\"`\n}\n\n// UpdatePayConfig updates the payment configuration\n// @Summary Update payment configuration\n// @Description Update the configuration of an existing payment setting\n// @Tags PaySetting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Payment setting ID\"\n// @Param setting body PayConfigRequest true \"Payment configuration\"\n// @Success 200 {object} model.CommonResponse{data=model.PaySetting}\n// @Router /api/pay_settings/{id}/config [patch]\nfunc UpdatePayConfig(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid ID\"))\n\t\treturn\n\t}\n\n\tpaySetting, err := model.GetPaySettingByID(config.GetEID(c), id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar req PayConfigRequest\n\tif err = c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Validate configuration based on payment type\n\tif paySetting.PayType == model.PayTypeWechat {\n\t\tpaySetting.PayConfig, err = processWechatConfig(req.PayConfig)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err.Error()))\n\t\t\treturn\n\t\t}\n\t} else {\n\t\tif paySetting.PayType == model.PayTypeAlipay && config.ApiHost == \"\" {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Please set api_host\"))\n\t\t\treturn\n\t\t}\n\t\tpaySetting.PayConfig = req.PayConfig\n\t}\n\tpaySetting.ExtraConfig = req.ExtraConfig\n\n\tif err = paySetting.Update(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tpayText, err := model.GetPayTypeText(paySetting.PayType)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      config.GetEID(c),\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModulePayment,\n\t\tAction:   model.SystemLogActionUpdate,\n\t\tContent:  fmt.Sprintf(\"设置%s\", payText),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(paySetting))\n}\n\n// UpdatePayStatus updates the payment status\n// @Summary Update payment status\n// @Description Update the status of an existing payment setting\n// @Tags PaySetting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Payment setting ID\"\n// @Param status body PayStatusRequest true \"Payment status (1: Enabled, 0: Disabled)\"\n// @Success 200 {object} model.CommonResponse{data=model.PaySetting}\n// @Router /api/pay_settings/{id}/status [patch]\nfunc UpdatePayStatus(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(\"Invalid ID\"))\n\t\treturn\n\t}\n\n\tpaySetting, err := model.GetPaySettingByID(config.GetEID(c), id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar req PayStatusRequest\n\tif err = c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tpaySetting.PayStatus = *req.PayStatus\n\n\tif err = paySetting.Update(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tstatusText := \"启用\"\n\tif !paySetting.PayStatus {\n\t\tstatusText = \"禁用\"\n\t}\n\n\tpayText, err := model.GetPayTypeText(paySetting.PayType)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      paySetting.Eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleAdmin,\n\t\tAction:   model.SystemLogActionToggle,\n\t\tContent:  fmt.Sprintf(\"%s%s\", statusText, payText),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(paySetting))\n}\n\n// isValidPayType checks if the payment type is valid\nfunc isValidPayType(payType int) bool {\n\treturn payType >= model.PayTypeWechat && payType <= model.PayTypeAlipay\n}\n\n// processWechatConfig processes and validates WeChat payment configuration\nfunc processWechatConfig(payConfig string) (string, error) {\n\twechatConfig, err := payment.ValidateWechatConfig(payConfig)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tconfigBytes, err := json.Marshal(wechatConfig)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to marshal config: %v\", err)\n\t}\n\n\treturn string(configBytes), nil\n}\n"
  },
  {
    "path": "api/controller/prompt.go",
    "content": "package controller\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n\t\"gorm.io/gorm\"\n)\n\n// PromptListRequest 定义获取提示词列表的请求参数\ntype PromptListRequest struct {\n\tKeyword string `form:\"keyword\" json:\"keyword\"`   // 关键词搜索\n\tGroupId string `form:\"group_id\" json:\"group_id\"` // 分组ID，多个ID用逗号分隔，为空时查询全部\n\tOffset  int    `form:\"offset\" json:\"offset\"`     // 分页偏移量\n\tLimit   int    `form:\"limit\" json:\"limit\"`       // 分页大小\n}\n\n// PromptsResponse 定义提示词列表的响应结构\ntype PromptsResponse struct {\n\tCount   int64           `json:\"count\"`   // 总数\n\tPrompts []*model.Prompt `json:\"prompts\"` // 提示词列表\n}\n\n// PromptRequest 定义创建或更新提示词的请求参数\ntype PromptRequest struct {\n\tName                 string     `json:\"name\" binding:\"required\"`                                                                                                                                                                                                                                                                                                                                                                                 // 提示词名称\n\tContent              string     `json:\"content\"`                                                                                                                                                                                                                                                                                                                                                                                                 // 提示词内容\n\tDescription          string     `json:\"description\"`                                                                                                                                                                                                                                                                                                                                                                                             // 提示词描述\n\tGroupIds             []int64    `json:\"group_ids\" binding:\"required\"`                                                                                                                                                                                                                                                                                                                                                                            // 所属分组IDs\n\tSubscriptionGroupIds []int64    `json:\"subscription_group_ids\"`                                                                                                                                                                                                                                                                                                                                                                                  // 订阅分组IDs\n\tUserGroupIds         []int64    `json:\"user_group_ids\"`                                                                                                                                                                                                                                                                                                                                                                                          // 用户分组IDs\n\tSort                 int        `json:\"sort\"`                                                                                                                                                                                                                                                                                                                                                                                                    // 排序\n\tCustomConfig         string     `json:\"custom_config\"`                                                                                                                                                                                                                                                                                                                                                                                           // 自定义配置\n\tStatus               int        `form:\"status\" json:\"status\"`                                                                                                                                                                                                                                                                                                                                                                                    // 状态，0未启用，1正常，2删除\n\tAILinks              []LinkItem `json:\"ai_links\" example:\"[{\\\"ai_link\\\":{\\\"name\\\":\\\"link1\\\",\\\"logo\\\":\\\"https://example.com/logo1.png\\\",\\\"url\\\":\\\"https://example.com/link1\\\",\\\"description\\\":\\\"Description for link1\\\",\\\"sort\\\":0},\\\"delete\\\":false},{\\\"ai_link\\\":{\\\"name\\\":\\\"link2\\\",\\\"logo\\\":\\\"https://example.com/logo2.png\\\",\\\"url\\\":\\\"https://example.com/link2\\\",\\\"description\\\":\\\"Description for link2\\\",\\\"sort\\\":1},\\\"delete\\\":true}]\"` // 网站配置列表，支持增删改\n}\n\n// GetPrompts 获取提示词列表\n// @Summary 获取提示词列表\n// @Description 获取提示词列表，支持分页、关键词搜索、按分组筛选\n// @Tags Prompt\n// @Produce json\n// @Param keyword query string false \"关键词搜索\"\n// @Param group_id query string false \"分组ID，多个ID用逗号分隔，为空时查询全部\"\n// @Param offset query int false \"分页偏移量\"\n// @Param limit query int false \"分页大小\" default(10)\n// @Success 200 {object} model.CommonResponse{data=PromptsResponse} \"成功\"\n// @Router /api/prompts [get]\n// @Router /api/prompts/admin [get]\nfunc GetPrompts(c *gin.Context) {\n\tvar promptListRequest PromptListRequest\n\tif err := c.ShouldBindQuery(&promptListRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 设置默认分页大小为10\n\tif promptListRequest.Limit == 0 {\n\t\tpromptListRequest.Limit = 10\n\t}\n\n\tvar userId int64\n\teid := config.GetEID(c)\n\tuser, err := model.GetLoginUser(c)\n\tif err == nil {\n\t\tuserId = user.UserID\n\t\teid = user.Eid\n\t}\n\n\tstatus := -1\n\tif !strings.Contains(c.Request.URL.Path, \"/admin\") {\n\t\tstatus = model.PromptStatusNormal\n\t}\n\n\t// 获取提示词列表\n\tvar total int64\n\tvar prompts []*model.Prompt\n\n\t// 可以查看所有提示词\n\ttotal, prompts, err = model.GetPromptList(\n\t\teid,\n\t\tpromptListRequest.Keyword,\n\t\tpromptListRequest.GroupId,\n\t\tstatus,\n\t\tpromptListRequest.Offset,\n\t\tpromptListRequest.Limit,\n\t)\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 加载每个提示词的分组信息\n\tfor _, prompt := range prompts {\n\t\t// 反序列化 AILinks 字段\n\t\tvar links []model.AILinkInfo\n\t\tif prompt.AILinks != \"\" {\n\t\t\tif err := json.Unmarshal([]byte(prompt.AILinks), &links); err != nil {\n\t\t\t\t// 记录日志并使用默认值\n\t\t\t\tlinks = []model.AILinkInfo{}\n\t\t\t}\n\t\t}\n\t\tprompt.AILinksData = links // 将解析后的数据赋值到 AILinksData\n\n\t\tif err := prompt.LoadPromptGroups(); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t\tif userId > 0 {\n\t\t\tif err := prompt.LoadIsLiked(userId); err != nil {\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(PromptsResponse{\n\t\tCount:   total,\n\t\tPrompts: prompts,\n\t}))\n}\n\n// CreatePrompt 创建提示词\n// @Summary 创建提示词\n// @Description 创建新的提示词\n// @Tags Prompt\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body PromptRequest true \"提示词信息\"\n// @Success 200 {object} model.CommonResponse{data=model.Prompt} \"成功\"\n// @Router /api/prompts/system [post]\n// @Router /api/prompts/personal [post]\nfunc CreatePrompt(c *gin.Context) {\n\tvar promptReq PromptRequest\n\tif err := c.ShouldBindJSON(&promptReq); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tuserID := config.GetUserId(c)\n\n\tvar promptType int\n\tif strings.Contains(c.Request.URL.Path, \"/system\") {\n\t\tpromptType = model.PromptTypeSystem\n\t} else if strings.Contains(c.Request.URL.Path, \"/personal\") {\n\t\tpromptType = model.PromptTypePersonal\n\t}\n\n\tif promptType == model.PromptTypeSystem && !common.IsAdmin(c) {\n\t\tc.JSON(http.StatusForbidden, model.AuthFailed.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 获取默认网站配置\n\tdefaultLinks, err := model.GetDefaultPromptLinks(eid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 如果 defaultLinks 或 promptReq.AILinks 为空，设置为空数组\n\tif defaultLinks == nil {\n\t\tdefaultLinks = []model.AILinkInfo{}\n\t}\n\n\t// 序列化 AILinks 为 JSON 字符串\n\tlinksJSON, err := json.Marshal(defaultLinks)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 创建提示词对象\n\tprompt := &model.Prompt{\n\t\tName:         promptReq.Name,\n\t\tContent:      promptReq.Content,\n\t\tDescription:  promptReq.Description,\n\t\tType:         promptType,\n\t\tStatus:       promptReq.Status,\n\t\tUserID:       userID,\n\t\tEid:          eid,\n\t\tSort:         promptReq.Sort,\n\t\tCustomConfig: promptReq.CustomConfig,\n\t\tAILinks:      string(linksJSON),\n\t\tAILinksData:  defaultLinks, // 使用默认链接\n\t}\n\n\t// 开始事务\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 创建提示词\n\tif err := tx.Create(prompt).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 添加分组关联\n\tallGroupIds := make([]int64, 0)\n\n\t// 添加普通分组\n\tif len(promptReq.GroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, promptReq.GroupIds...)\n\t}\n\n\t// 添加订阅分组\n\tif len(promptReq.SubscriptionGroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, promptReq.SubscriptionGroupIds...)\n\t}\n\n\t// 添加用户分组\n\tif len(promptReq.UserGroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, promptReq.UserGroupIds...)\n\t}\n\n\t// 使用通用方法更新资源权限\n\tif err := service.UpdateResourcePermissions(c, tx, int64(prompt.PromptID), model.ResourceTypePrompt, allGroupIds); err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 提交事务\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 加载提示词的分组信息\n\tif err := prompt.LoadPromptGroups(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(prompt))\n}\n\n// GetPrompt 获取单个提示词\n// @Summary 获取单个提示词\n// @Description 根据ID获取提示词详情\n// @Tags Prompt\n// @Produce json\n// @Security BearerAuth\n// @Param pid path int true \"提示词ID\"\n// @Success 200 {object} model.CommonResponse{data=model.Prompt} \"成功\"\n// @Router /api/prompts/{pid} [get]\nfunc GetPrompt(c *gin.Context) {\n\tpromptID, err := strconv.Atoi(c.Param(\"pid\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar eid int64\n\tuser, err := model.GetLoginUser(c)\n\tif err == nil {\n\t\teid = user.Eid\n\t} else {\n\t\teid = config.GetEID(c)\n\t}\n\tprompt, err := model.GetPromptByID(promptID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 检查提示词是否属于当前企业\n\tif prompt.Eid != eid {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 加载提示词的分组信息\n\tif err := prompt.LoadPromptGroups(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 反序列化 AILinks 字段\n\tvar links []model.AILinkInfo\n\tif prompt.AILinks != \"\" {\n\t\tif err := json.Unmarshal([]byte(prompt.AILinks), &links); err != nil {\n\t\t\t// 记录日志并使用默认值\n\t\t\tlinks = []model.AILinkInfo{}\n\t\t}\n\t}\n\tprompt.AILinksData = links\n\n\tif err := prompt.LoadIsLiked(config.GetUserId(c)); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tprompt.Views++\n\tprompt.Update()\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(prompt))\n}\n\n// UpdatePrompt 更新提示词\n// @Summary 更新提示词\n// @Description 更新提示词信息，包括提示词的名称、内容、描述、排序、自定义配置、状态，以及分组关联和网站配置的增删改。\n// @Tags Prompt\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param pid path int true \"提示词ID\"\n// @Param request body PromptRequest true \"提示词信息，包括分组关联和网站配置的增删改\"\n// @Success 200 {object} model.CommonResponse{data=model.Prompt} \"成功返回更新后的提示词信息\"\n// @Failure 400 {object} model.CommonResponse \"请求参数错误\"\n// @Failure 403 {object} model.CommonResponse \"权限不足\"\n// @Failure 404 {object} model.CommonResponse \"提示词不存在或不属于当前企业\"\n// @Failure 500 {object} model.CommonResponse \"服务器内部错误\"\n// @Router /api/prompts/{pid} [put]\nfunc UpdatePrompt(c *gin.Context) {\n\tpromptID, err := strconv.Atoi(c.Param(\"pid\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar promptReq PromptRequest\n\tif err = c.ShouldBindJSON(&promptReq); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tprompt, err := model.GetPromptByID(promptID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tif prompt.Type == model.PromptTypeSystem && !common.IsAdmin(c) {\n\t\tc.JSON(http.StatusForbidden, model.AuthFailed.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 检查提示词是否属于当前企业\n\tif prompt.Eid != eid {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 开始事务\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 更新提示词字段\n\tprompt.Name = promptReq.Name\n\tprompt.Content = promptReq.Content\n\tprompt.Description = promptReq.Description\n\tprompt.Sort = promptReq.Sort\n\tprompt.CustomConfig = promptReq.CustomConfig\n\tprompt.Status = promptReq.Status\n\n\t// 处理 AILinks 的增删改\n\tvar updatedLinks []model.AILinkInfo\n\tfor _, linkItem := range promptReq.AILinks {\n\t\tif linkItem.Delete {\n\t\t\tcontinue\n\t\t}\n\t\tupdatedLinks = append(updatedLinks, linkItem.AILink)\n\t}\n\n\t// 序列化更新后的 AILinks 为 JSON 字符串\n\tlinksJSON, err := json.Marshal(updatedLinks)\n\tif err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\tprompt.AILinks = string(linksJSON)\n\n\tif err := tx.Save(prompt).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 添加分组关联\n\tallGroupIds := make([]int64, 0)\n\n\t// 添加普通分组\n\tif len(promptReq.GroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, promptReq.GroupIds...)\n\t}\n\n\t// 添加订阅分组\n\tif len(promptReq.SubscriptionGroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, promptReq.SubscriptionGroupIds...)\n\t}\n\n\t// 添加用户分组\n\tif len(promptReq.UserGroupIds) > 0 {\n\t\tallGroupIds = append(allGroupIds, promptReq.UserGroupIds...)\n\t}\n\n\t// 使用通用方法更新资源权限\n\tif err := service.UpdateResourcePermissions(c, tx, int64(prompt.PromptID), model.ResourceTypePrompt, allGroupIds); err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 提交事务\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 加载提示词的分组信息\n\tif err := prompt.LoadPromptGroups(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(prompt))\n}\n\n// DeletePrompt 删除提示词\n// @Summary 删除提示词\n// @Description 根据ID删除提示词\n// @Tags Prompt\n// @Produce json\n// @Security BearerAuth\n// @Param pid path int true \"提示词ID\"\n// @Success 200 {object} model.CommonResponse \"成功\"\n// @Router /api/prompts/{pid} [delete]\nfunc DeletePrompt(c *gin.Context) {\n\tpromptID, err := strconv.Atoi(c.Param(\"pid\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tprompt, err := model.GetPromptByID(promptID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tif prompt.Type == model.PromptTypeSystem && !common.IsAdmin(c) {\n\t\tc.JSON(http.StatusForbidden, model.AuthFailed.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 检查提示词是否属于当前企业\n\tif prompt.Eid != eid {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 开始事务\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 删除提示词（软删除）\n\tif err := prompt.Delete(); err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 删除关联的权限\n\tif err := tx.Where(\"resource_id = ? AND resource_type = ?\", promptID, model.ResourceTypePrompt).Delete(&model.ResourcePermission{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 提交事务\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// UpdatePromptLike 更新提示词点赞\n// @Summary 更新提示词点赞\n// @Description 更新提示词点赞\n// @Tags Prompt\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param pid path int true \"提示词ID\"\n// @Success 200 {object} model.CommonResponse \"成功\"\n// @Router /api/prompts/{pid}/like [patch]\nfunc UpdatePromptLike(c *gin.Context) {\n\tpromptID, err := strconv.Atoi(c.Param(\"pid\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tprompt, err := model.GetPromptByID(promptID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 检查提示词是否属于当前企业\n\tif prompt.Eid != eid {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tuserID := config.GetUserId(c)\n\tlikeType := model.LikeTypePrompt\n\tobjectID := prompt.PromptID\n\n\t// 开始事务\n\ttx := model.DB.Begin()\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\t// 查询是否存在点赞记录\n\tvar like model.Like\n\tresult := tx.Where(\"user_id = ? AND type = ? AND object_id = ?\", userID, likeType, objectID).First(&like)\n\tif result.Error != nil && !errors.Is(result.Error, gorm.ErrRecordNotFound) {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar likeChange int64 = 0\n\tif result.Error == nil { // 记录存在\n\t\t// 切换点赞状态\n\t\tnewStatus := model.LikeStatusCancel\n\t\tif like.Status == model.LikeStatusCancel {\n\t\t\tnewStatus = model.LikeStatusActive\n\t\t\tlikeChange = 1 // 从取消变为点赞，点赞数+1\n\t\t} else {\n\t\t\tlikeChange = -1 // 从点赞变为取消，点赞数-1\n\t\t}\n\n\t\t// 更新点赞状态\n\t\tif err := tx.Model(&like).Update(\"status\", newStatus).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t} else { // 记录不存在，创建新记录\n\t\tnewLike := &model.Like{\n\t\t\tUserID:   userID,\n\t\t\tType:     likeType,\n\t\t\tObjectID: objectID,\n\t\t\tStatus:   model.LikeStatusActive,\n\t\t}\n\n\t\tif err := tx.Create(newLike).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\n\t\tlikeChange = 1 // 新增点赞，点赞数+1\n\t}\n\n\t// 更新提示词的点赞数\n\tif likeChange != 0 {\n\t\t// 使用原生SQL更新点赞数，避免并发问题\n\t\tif err := tx.Exec(\"UPDATE prompts SET likes = likes + ? WHERE prompt_id = ?\", likeChange, objectID).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t}\n\n\t// 提交事务\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\ntype UpdatePromptStatusRequest struct {\n\tStatus *int `form:\"status\" json:\"status\" default:\"1\" binding:\"required\"` // 状态，0未启用，1正常\n}\n\n// UpdatePromptStatus 更新提示词状态\n// @Summary 更新提示词状态\n// @Description 更新提示词状态\n// @Tags Prompt\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param pid path int true \"提示词ID\"\n// @Param request body UpdatePromptStatusRequest true \"提示词状态\"\n// @Success 200 {object} model.CommonResponse \"成功\"\n// @Router /api/prompts/{pid}/status [patch]\nfunc UpdatePromptStatus(c *gin.Context) {\n\tpromptID, err := strconv.Atoi(c.Param(\"pid\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tprompt, err := model.GetPromptByID(promptID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 检查提示词是否属于当前企业\n\tif prompt.Eid != eid {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar promptReq UpdatePromptStatusRequest\n\tif err = c.ShouldBindJSON(&promptReq); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif prompt.Status != model.PromptStatusNormal && prompt.Status != model.PromptStatusDisable {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(errors.New(\"prompt status is not normal\")))\n\t\treturn\n\t}\n\n\tstatus := *promptReq.Status\n\tprompt.Status = status\n\tprompt.Update()\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// GetPromptGroups 获取提示词所在的所有分组\n// @Summary 获取提示词所在的所有分组\n// @Description 获取提示词关联的所有分组\n// @Tags Prompt\n// @Produce json\n// @Security BearerAuth\n// @Param pid path int true \"提示词ID\"\n// @Success 200 {object} model.CommonResponse{data=[]model.Group} \"成功\"\n// @Router /api/prompts/{pid}/groups [get]\nfunc GetPromptGroups(c *gin.Context) {\n\tpromptID, err := strconv.Atoi(c.Param(\"pid\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tprompt, err := model.GetPromptByID(promptID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 检查提示词是否属于当前企业\n\tif prompt.Eid != eid {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 获取提示词关联的所有分组ID\n\tvar groupIDs []int64\n\terr = model.DB.Model(&model.ResourcePermission{}).\n\t\tWhere(\"resource_id = ? AND resource_type = ?\", promptID, model.ResourceTypePrompt).\n\t\tPluck(\"group_id\", &groupIDs).Error\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 获取所有分组信息\n\tvar groups []*model.Group\n\tif len(groupIDs) > 0 {\n\t\terr = model.DB.Where(\"group_id IN (?)\", groupIDs).Find(&groups).Error\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(nil))\n\t\t\treturn\n\t\t}\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(groups))\n}\n\n// 辅助函数：根据ID列表获取提示词列表\nfunc getPromptListWithIDs(eid int64, keyword string, groupIDStr string, promptIDs []int64, offset int, limit int, sortDesc bool) (int64, []*model.Prompt, error) {\n\tif len(promptIDs) == 0 {\n\t\treturn 0, []*model.Prompt{}, nil\n\t}\n\n\tdb := model.DB.Model(&model.Prompt{}).Where(\"status = ? AND eid = ? AND prompt_id IN (?)\", model.PromptStatusNormal, eid, promptIDs)\n\n\tif keyword != \"\" {\n\t\tdb = db.Where(\"name LIKE ?\", \"%\"+keyword+\"%\")\n\t}\n\n\tif groupIDStr != \"\" {\n\t\t// 解析多个分组ID\n\t\tgroupIDStrings := strings.Split(groupIDStr, \",\")\n\t\tgroupIDs := make([]int64, 0, len(groupIDStrings))\n\n\t\tfor _, idStr := range groupIDStrings {\n\t\t\tidStr = strings.TrimSpace(idStr)\n\t\t\tif idStr == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tid, err := strconv.ParseInt(idStr, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tcontinue // 忽略无效的ID\n\t\t\t}\n\n\t\t\tif id > 0 {\n\t\t\t\tgroupIDs = append(groupIDs, id)\n\t\t\t}\n\t\t}\n\n\t\tif len(groupIDs) > 0 {\n\t\t\t// 通过 ResourcePermission 表关联查询\n\t\t\tdb = db.Joins(\"JOIN resource_permissions ON prompts.prompt_id = resource_permissions.resource_id\").\n\t\t\t\tWhere(\"resource_permissions.group_id IN (?) AND resource_permissions.resource_type = ?\", groupIDs, model.ResourceTypePrompt).\n\t\t\t\tGroup(\"prompts.prompt_id\") // 确保结果不重复\n\t\t}\n\t}\n\n\tvar count int64\n\tdb.Count(&count)\n\n\tvar prompts []*model.Prompt\n\tif sortDesc {\n\t\tdb = db.Order(\"sort DESC, prompt_id DESC\")\n\t} else {\n\t\tdb = db.Order(\"created_time DESC\")\n\t}\n\n\terr := db.Offset(offset).Limit(limit).Find(&prompts).Error\n\n\treturn count, prompts, err\n}\n"
  },
  {
    "path": "api/controller/provider.go",
    "content": "package controller\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype ProviderRequest struct {\n\tName         string  `json:\"name\" example:\"Coze.cn\"`                                                                // Platform name\n\tProviderType int64   `json:\"provider_type\" example:\"1\"`                                                             // Platform type: 1 for coze.cn, 2 for coze.com\n\tConfigs      string  `json:\"configs\" example:\"{\\\"client_id\\\":\\\"client_id\\\", \\\"client_secret\\\": \\\"client_secret\\\"}\"` // Platform configuration\n\tAccessToken  string  `json:\"access_token\" example:\"access_token\"`\n\tBaseURL      *string `json:\"base_url\" example:\"\"`\n}\n\nfunc validateCozeConfig(providerType int64, configStr string) error {\n\n\tswitch providerType {\n\tcase model.ProviderTypeCozeCn, model.ProviderTypeCozeCom:\n\t\tvar config model.CozeConfig\n\t\tif err := json.Unmarshal([]byte(configStr), &config); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid coze.cn config: %v\", err)\n\t\t}\n\t\tif config.ClientID == \"\" || config.ClientSecret == \"\" {\n\t\t\treturn errors.New(\"client_id and client_secret are required for coze.cn config\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc checkSaveAccessToken(ProviderType int64, req ProviderRequest) (bool, error) {\n\tsaveAccessToken := false\n\tswitch ProviderType {\n\tcase model.ProviderTypeAppBuilder, model.ProviderType53AI, model.ProviderTypeCozeStudio:\n\t\tif req.AccessToken == \"\" {\n\t\t\treturn saveAccessToken, errors.New(\"access_token is required for provider\")\n\t\t}\n\t\tsaveAccessToken = true\n\tcase model.ProviderTypeCozeCn, model.ProviderTypeCozeCom:\n\t\tif req.AccessToken != \"\" {\n\t\t\treturn saveAccessToken, errors.New(\"access_token is not required for provider\")\n\t\t}\n\t}\n\treturn saveAccessToken, nil\n}\n\n// @Summary Create provider\n// @Description Create new provider configuration\n// @Tags Provider\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param provider body ProviderRequest true \"Provider data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/providers [post]\nfunc CreateProvider(c *gin.Context) {\n\tvar req ProviderRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif err := validateCozeConfig(req.ProviderType, req.Configs); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tprovider := model.Provider{\n\t\tEid:          config.GetEID(c),\n\t\tName:         req.Name,\n\t\tProviderType: req.ProviderType,\n\t\tConfigs:      req.Configs,\n\t\tBaseURL:      req.BaseURL,\n\t}\n\tsaveAccessToken, err := checkSaveAccessToken(req.ProviderType, req)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif saveAccessToken {\n\t\tprovider.AccessToken = req.AccessToken\n\t\tprovider.IsAuthorized = true\n\t}\n\n\tif err := model.CreateProvider(&provider); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(provider))\n}\n\n// @Summary Delete provider\n// @Description Delete provider by ID\n// @Tags Provider\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Provider ID\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/providers/{id} [delete]\nfunc DeleteProvider(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// Start transaction to ensure atomicity\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\t// First delete all channels associated with this provider\n\tif err := tx.Where(\"provider_id = ? AND eid = ?\", id, eid).Delete(&model.Channel{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Then delete the provider itself\n\tif err := tx.Where(\"provider_id = ? AND eid = ?\", id, eid).Delete(&model.Provider{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Commit the transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Get providers\n// @Description Get all providers for current enterprise\n// @Tags Provider\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param providerType query int false \"Provider type filter (0 for all, 1 for coze.cn, 2 for coze.com, 3 for bailian, 4 for volcengine)\"\n// @Param name query string false \"Provider name filter (supports like search)\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/providers [get]\n// GetProviders Get all provider configurations for current enterprise\nfunc GetProviders(c *gin.Context) {\n\teid := config.GetEID(c)\n\tproviderType, _ := strconv.ParseInt(c.DefaultQuery(\"providerType\", \"0\"), 10, 64)\n\tname := c.Query(\"name\")\n\tproviders, err := model.GetProvidersByEidWithFilters(eid, providerType, name)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(providers))\n}\n\n// @Summary Update provider\n// @Description Update provider configuration\n// @Tags Provider\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Provider ID\"\n// @Param provider body ProviderRequest true \"Provider data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/providers/{id} [put]\nfunc UpdateProvider(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\texistingProvider, err := model.GetProviderByID(id, eid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar req ProviderRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif err := validateCozeConfig(req.ProviderType, req.Configs); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Reset authorization if configs changed\n\tif existingProvider.Configs != req.Configs {\n\t\texistingProvider.IsAuthorized = false\n\t}\n\n\texistingProvider.Name = req.Name\n\texistingProvider.ProviderType = req.ProviderType\n\texistingProvider.Configs = req.Configs\n\tif req.BaseURL != nil {\n\t\texistingProvider.BaseURL = req.BaseURL\n\t}\n\n\tsaveAccessToken, err := checkSaveAccessToken(req.ProviderType, req)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif saveAccessToken {\n\t\texistingProvider.AccessToken = req.AccessToken\n\t\texistingProvider.IsAuthorized = true\n\t}\n\n\tif err := model.UpdateProvider(existingProvider); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(existingProvider))\n}\n"
  },
  {
    "path": "api/controller/provider_callback.go",
    "content": "package controller\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/channeltype\"\n)\n\ntype CozeCallbackRequest struct {\n\tCode  string `json:\"code\" form:\"code\" binding:\"required\"`\n\tState string `json:\"state\" form:\"state\" binding:\"required\"`\n}\n\n// @Summary Coze authorization callback\n// @Description Handles OAuth2 authorization callback from Coze platform\n// @Tags CallBack\n// @Accept json\n// @Produce json\n// @Param request body CozeCallbackRequest true \"Callback request parameters\"\n// @Param eid path int true \"eid\"\n// @Success 200 {object} model.CommonResponse\n// @Failure 400 {object} model.CommonResponse\n// @Failure 500 {object} model.CommonResponse\n// @Router /api/callback/cozecn/auth/{eid} [get]\n// @Router /api/callback/cozecom/auth/{eid} [get]\nfunc CozeCallBack(c *gin.Context) {\n\teid, err := strconv.ParseInt(c.Param(\"eid\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar providerType int64\n\tif strings.Contains(c.Request.URL.Path, \"/api/callback/cozecn/auth/\") {\n\t\tproviderType = int64(model.ProviderTypeCozeCn)\n\t} else if strings.Contains(c.Request.URL.Path, \"/api/callback/cozecom/auth/\") {\n\t\tproviderType = int64(model.ProviderTypeCozeCom)\n\t} else {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(errors.New(\"invalid path\")))\n\t\treturn\n\t}\n\tvar req CozeCallbackRequest\n\tif err := c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Try to parse provider_id from query parameter or state parameter\n\t// State parameter format might be: \"provider_id=123\" or just the provider_id\n\tvar providerID int64 = 0\n\tif providerIDStr := c.Query(\"provider_id\"); providerIDStr != \"\" {\n\t\tproviderID, _ = strconv.ParseInt(providerIDStr, 10, 64)\n\t} else if strings.Contains(req.State, \"provider_id=\") {\n\t\t// Extract provider_id from state parameter\n\t\tparts := strings.Split(req.State, \"provider_id=\")\n\t\tif len(parts) > 1 {\n\t\t\tproviderIDStr := strings.Split(parts[1], \"&\")[0] // Get first part before any other parameters\n\t\t\tproviderID, _ = strconv.ParseInt(providerIDStr, 10, 64)\n\t\t}\n\t}\n\n\tprovider, err := model.GetProviderByEidAndProviderTypeWithOptionalID(eid, providerType, providerID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Determine scheme based on TLS or forwarded headers\n\tscheme := \"https\"\n\n\t// 这里是因为coze 就是需要二次验证，但是 nginx 反向代理把 https 的请求换成了 http，所以异常，现在强制所有的都是 https\n\t// if c.Request.TLS != nil ||\n\t// \tstrings.ToLower(c.Request.Header.Get(\"X-Forwarded-Proto\")) == \"https\" ||\n\t// \tstrings.ToLower(c.Request.Header.Get(\"X-Forwarded-Protocol\")) == \"https\" ||\n\t// \tstrings.ToLower(c.Request.Header.Get(\"X-Forwarded-Ssl\")) == \"on\" ||\n\t// \tstrings.ToLower(c.Request.Header.Get(\"X-Url-Scheme\")) == \"https\" ||\n\t// \tc.Request.Header.Get(\"X-Forwarded-Port\") == \"443\" {\n\t// \tscheme = \"https\"\n\t// }\n\n\t// Build callback URL with proper host (including port if non-standard)\n\tcallbackUrl := scheme + \"://\" + c.Request.Host + c.Request.URL.Path\n\tser := service.CozeService{\n\t\tProvider: provider,\n\t}\n\n\tlogger.SysLogf(\"callbackUrl: %v\", callbackUrl)\n\tif err := ser.HandlerAccessTokenByCode(req.Code, callbackUrl); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Get all workspaces and bots\n\tworkspaces, err := ser.GetAllWorkspace()\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Collect all bot IDs\n\tvar botIds []string\n\tfor _, workspace := range workspaces {\n\t\tbots, err := ser.GetAllBot(workspace.ID)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, bot := range bots {\n\t\t\tbotIds = append(botIds, \"bot-\"+bot.BotID)\n\t\t}\n\t}\n\t// todo Call interface user ID all use the same\n\tconfigStr := `{\"region\":\"\",\"sk\":\"\",\"ak\":\"\",\"user_id\":\"53AIHub\",\"vertex_ai_project_id\":\"\",\"vertex_ai_adc\":\"\"}`\n\t// Create or update channel record\n\tbaseURL := provider.GetBaseURLByProviderType()\n\tchannel := &model.Channel{\n\t\tEid:        eid,\n\t\tName:       ser.Provider.Name,\n\t\tKey:        ser.Provider.AccessToken,\n\t\tType:       channeltype.Coze,\n\t\tProviderID: ser.Provider.ProviderID,\n\t\tBaseURL:    &baseURL, // Fix: assign address of baseURL since Channel.BaseURL is *string\n\t\tModels:     strings.Join(botIds, \",\"),\n\t\tStatus:     model.ChannelStatusEnabled,\n\t\tConfig:     configStr,\n\t}\n\n\texistingChannel, err := model.GetFirstChannelByEidAndProviderId(channel.Eid, channel.ProviderID)\n\tif err != nil {\n\t\t// Create new record\n\t\tif err := model.CreateChannel(channel); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t} else {\n\t\t// Update existing record\n\t\tchannel.ChannelID = existingChannel.ChannelID\n\t\tif err := model.UpdateChannel(channel); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Redirect to frontend page\n\tredirectURL := fmt.Sprintf(scheme+\"://%s/console/?is_authorized=%t&provider_id=%d&provider_type=%d\",\n\t\tc.Request.Host, provider.IsAuthorized, provider.ProviderID, provider.ProviderType)\n\tc.Redirect(http.StatusFound, redirectURL)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n"
  },
  {
    "path": "api/controller/relay.go",
    "content": "package controller\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/ctxkey\"\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/session\"\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/middleware\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\tadaptor53AI \"github.com/53AI/53AIHub/service/hub_adaptor/53AI\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/coze\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/dify\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/fastgpt\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/n8n\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common\"\n\toneapi_model \"github.com/songquanpeng/one-api/model\"\n\t\"github.com/songquanpeng/one-api/monitor\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/apitype\"\n\tbilling_ratio \"github.com/songquanpeng/one-api/relay/billing/ratio\"\n\t\"github.com/songquanpeng/one-api/relay/channeltype\"\n\t\"github.com/songquanpeng/one-api/relay/constant/role\"\n\t\"github.com/songquanpeng/one-api/relay/controller\"\n\t\"github.com/songquanpeng/one-api/relay/controller/validator\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\trelay_meta \"github.com/songquanpeng/one-api/relay/meta\"\n\trelay_model \"github.com/songquanpeng/one-api/relay/model\"\n\t\"github.com/songquanpeng/one-api/relay/relaymode\"\n)\n\ntype Message struct {\n\tRole    string `json:\"role\" example:\"user\"`\n\tContent string `json:\"content\" example:\"who are you\"`\n}\n\ntype ChatRequest struct {\n\tMessages         []Message `json:\"messages\"`\n\tStream           bool      `json:\"stream\"`\n\tModel            string    `json:\"model\" example:\"agent-6\"`\n\tTemperature      float64   `json:\"temperature,omitempty\"`\n\tPresencePenalty  float64   `json:\"presence_penalty,omitempty\"`\n\tFrequencyPenalty float64   `json:\"frequency_penalty,omitempty\"`\n\tTopP             float64   `json:\"top_p,omitempty\"`\n\tConversationID   int64     `json:\"conversation_id\"`\n}\n\n// WorkflowRunRequest 工作流运行请求结构体\ntype WorkflowRunRequest struct {\n\tParameters     map[string]interface{} `json:\"parameters\"`      // 工作流参数\n\tStream         bool                   `json:\"stream\"`          // 是否流式响应（工作流不支持，会被忽略）\n\tModel          string                 `json:\"model\"`           // Agent模型\n\tConversationID int64                  `json:\"conversation_id\"` // 会话ID\n}\n\n// @Summary Workflow Run\n// @Description 工作流运行接口，返回标准格式的工作流执行结果\n// @Tags Workflow\n// @Accept json\n// @Produce json\n// @Param workflowRequest body WorkflowRunRequest true \"WorkflowRunRequest\"\n// @Success 200 {object} model.CommonResponse{data=custom.WorkflowResponseData}\n// @Router /v1/workflow/run [post]\n// @Security BearerAuth\nfunc WorkflowRun(c *gin.Context) {\n\tc.Set(ctxkey.Group, \"vip\")\n\n\t// 记录开始时间用于计算执行时长\n\tstartTime := time.Now()\n\tc.Set(\"workflow_start_time\", startTime)\n\n\tbody, err := io.ReadAll(c.Request.Body)\n\tif err != nil {\n\t\tc.JSON(400, model.ParamError.ToResponse(errors.New(\"请求体读取失败\")))\n\t\treturn\n\t}\n\tc.Request.Body = io.NopCloser(bytes.NewBuffer(body))\n\n\tvar workflowRequest WorkflowRunRequest\n\tif err := json.Unmarshal(body, &workflowRequest); err != nil {\n\t\tc.JSON(400, model.ParamError.ToResponse(errors.New(\"请求参数解析失败\")))\n\t\treturn\n\t}\n\n\t// 获取 agent 信息\n\tagent, err := GetSessionAgent(c)\n\tif err != nil {\n\t\tc.JSON(404, model.NotFound.ToResponse(errors.New(\"Agent 未找到\")))\n\t\treturn\n\t}\n\n\t// 验证是否为工作流类型的 agent\n\tif agent.AgentType != model.AgentTypeWorkflow {\n\t\tc.JSON(400, model.ParamError.ToResponse(errors.New(\"该 Agent 不是工作流类型\")))\n\t\treturn\n\t}\n\n\t// 检查流式响应参数\n\tif workflowRequest.Stream {\n\t\tlogger.SysLogf(\"工作流请求设置了 stream=true，但工作流不支持流式响应，将忽略此参数\")\n\t}\n\n\tlogger.SysLogf(\"工作流运行请求 - Agent: %s, Stream: %v, Parameters: %+v\",\n\t\tagent.Model, workflowRequest.Stream, workflowRequest.Parameters)\n\n\t// 执行工作流\n\tresponse, err := executeWorkflow(c, &workflowRequest, agent)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"工作流执行失败 - Agent: %s, Error: %v\", agent.Model, err)\n\n\t\t// 根据错误类型返回不同的状态码\n\t\tstatusCode := 500\n\t\tif strings.Contains(err.Error(), \"参数\") || strings.Contains(err.Error(), \"输入\") {\n\t\t\tstatusCode = 400\n\t\t} else if strings.Contains(err.Error(), \"未找到\") || strings.Contains(err.Error(), \"不存在\") {\n\t\t\tstatusCode = 404\n\t\t}\n\n\t\t// 根据状态码选择合适的响应码\n\t\tvar responseCode model.ResponseCode\n\t\tswitch statusCode {\n\t\tcase 400:\n\t\t\tresponseCode = model.ParamError\n\t\tcase 404:\n\t\t\tresponseCode = model.NotFound\n\t\tdefault:\n\t\t\tresponseCode = model.SystemError\n\t\t}\n\n\t\tc.JSON(statusCode, responseCode.ToResponse(errors.New(err.Error())))\n\t\treturn\n\t}\n\n\tlogger.SysLogf(\"工作流执行成功 - Agent: %s, ExecuteID: %s\",\n\t\tagent.Model, response.ExecuteID)\n\n\t// 保存工作流消息记录\n\tif err := saveWorkflowMessage(c, &workflowRequest, agent, response); err != nil {\n\t\tlogger.SysErrorf(\"保存工作流消息失败: %v\", err)\n\t\t// 不影响主流程，继续返回成功响应\n\t}\n\n\t// 使用标准响应格式返回\n\tc.JSON(200, model.Success.ToResponse(response))\n}\n\nfunc GetSessionAgent(c *gin.Context) (agent *model.Agent, err error) {\n\tsessionAgent, exists := c.Get(session.SESSION_AGENT)\n\tif !exists {\n\t\treturn nil, errors.New(\"agent not found\")\n\t}\n\tagent, ok := sessionAgent.(*model.Agent)\n\tif !ok {\n\t\treturn nil, errors.New(\"agent not found\")\n\t}\n\treturn agent, nil\n}\n\n// extractWorkflowID 从 agent 配置中提取工作流ID\nfunc extractWorkflowID(modelName, customConfig string) string {\n\t// 方法1: 如果模型名称已经是工作流ID格式，直接使用\n\tif strings.HasPrefix(modelName, \"workflow-\") {\n\t\treturn strings.TrimPrefix(modelName, \"workflow-\")\n\t}\n\n\t// 方法2: 从 CustomConfig 中解析工作流ID\n\tif customConfig != \"\" {\n\t\tvar config map[string]interface{}\n\t\tif err := json.Unmarshal([]byte(customConfig), &config); err == nil {\n\t\t\tif workflowID, ok := config[\"workflow_id\"].(string); ok && workflowID != \"\" {\n\t\t\t\treturn workflowID\n\t\t\t}\n\t\t\t// 也可能存储在其他字段中\n\t\t\tif workflowID, ok := config[\"bot_id\"].(string); ok && workflowID != \"\" {\n\t\t\t\treturn workflowID\n\t\t\t}\n\t\t}\n\t}\n\n\t// 方法3: 直接使用模型名称作为工作流ID（假设模型名称就是工作流ID）\n\tif modelName != \"\" {\n\t\treturn modelName\n\t}\n\n\treturn \"\"\n}\n\nfunc GetSessionConversation(c *gin.Context) (conversation *model.Conversation, err error) {\n\tsessionConversation, exists := c.Get(session.SESSION_CONVERSATION)\n\tif !exists {\n\t\treturn nil, errors.New(\"conversation not found\")\n\t}\n\tconversation, ok := sessionConversation.(*model.Conversation)\n\tif !ok {\n\t\treturn nil, errors.New(\"conversation not found\")\n\t}\n\treturn conversation, nil\n}\n\n// @Summary Relay\n// @Description Relay\n// @Tags Relay\n// @Accept json\n// @Produce json\n// @Param chatRequest body ChatRequest true \"ChatRequest\"\n// @Success 500 {object} model.OpenAIErrorResponse\n// @Router /v1/chat/completions [post]\n// @Security BearerAuth\nfunc Relay(c *gin.Context) {\n\tc.Set(ctxkey.Group, \"vip\")\n\n\tbody, err := io.ReadAll(c.Request.Body)\n\tif err != nil {\n\t\tc.JSON(400, model.ParamError.ToOpenAIErrorRespone(nil))\n\t\treturn\n\t}\n\tc.Request.Body = io.NopCloser(bytes.NewBuffer(body))\n\n\t// 先获取 agent 信息来判断类型\n\trelayMode := relaymode.GetByPath(c.Request.URL.Path)\n\tagent, err := GetSessionAgent(c)\n\tif err != nil {\n\t\tc.JSON(404, model.NotFound.ToOpenAIErrorRespone(err))\n\t\treturn\n\t}\n\n\t// 检查是否为工作流类型的 agent\n\tif agent.AgentType == model.AgentTypeWorkflow {\n\t\t// 工作流类型的 agent 不支持聊天接口，返回错误\n\t\tc.JSON(400, model.ParamError.ToOpenAIErrorRespone(errors.New(\"工作流类型的 Agent 请使用 /v1/workflow/run 接口\")))\n\t\treturn\n\t}\n\n\t// 处理普通聊天请求\n\thandleChatRequest(c, body, agent, relayMode)\n}\n\n// handleChatRequest 处理标准聊天请求\nfunc handleChatRequest(c *gin.Context, body []byte, agent *model.Agent, relayMode int) {\n\tvar chatRequest ChatRequest\n\tif err := json.Unmarshal(body, &chatRequest); err != nil {\n\t\tc.JSON(400, model.ParamError.ToOpenAIErrorRespone(nil))\n\t\treturn\n\t}\n\n\tprocessChatRequest(c, &chatRequest, agent, relayMode)\n}\n\n// processChatRequest 处理聊天请求的通用逻辑\nfunc processChatRequest(c *gin.Context, chatRequest *ChatRequest, agent *model.Agent, relayMode int) {\n\tctx := c.Request.Context()\n\n\t// Handle object_string type messages\n\t// {\"conversation_id\":619,\"frequency_penalty\":0.5,\"messages\":[{\"role\":\"user\",\"content\":\"[{\\\"type\\\":\\\"text\\\",\\\"content\\\":\\\"解析这张图片\\\"},{\\\"type\\\":\\\"image\\\",\\\"content\\\":\\\"file_id:175\\\"}]\"}],\"model\":\"agent-56\",\"presence_penalty\":0.5,\"stream\":true,\"temperature\":0.2,\"top_p\":0.75}\n\tlogger.SysLogf(\"Relay\", \"Relay\", \"RelayMode\", relayMode, \"Agent\", agent)\n\n\tretryTimes := config.CHANNEL_RETRY_TIMES\n\trequestModel := agent.Model\n\n\t// 如果是工作流类型的 agent，需要转换模型名称格式\n\tif agent.AgentType == model.AgentTypeWorkflow {\n\t\t// 从 agent.Model 中提取工作流ID，或者使用 agent.Model 作为工作流ID\n\t\t// 格式转换：原模型名称 -> workflow-{workflow_id}\n\t\tworkflowID := extractWorkflowID(agent.Model, agent.CustomConfig)\n\t\tif workflowID != \"\" {\n\t\t\trequestModel = fmt.Sprintf(\"workflow-%s\", workflowID)\n\t\t}\n\t\tlogger.SysLogf(\"工作流Agent - 原模型: %s, 转换后: %s\", agent.Model, requestModel)\n\t}\n\n\tchatRequest.Model = requestModel\n\n\t// if 1o model, unset temperature, presence_penalty, frequency_penalty, top_p\n\tif agent.ChannelType == channeltype.OpenAI && strings.Contains(strings.ToLower(chatRequest.Model), \"o1\") {\n\t\tchatRequest.Temperature = 0\n\t\tchatRequest.PresencePenalty = 0\n\t\tchatRequest.FrequencyPenalty = 0\n\t\tchatRequest.TopP = 0\n\t}\n\n\tmodifiedBody, err := json.Marshal(chatRequest)\n\tif err != nil {\n\t\tc.JSON(500, model.ParamError.ToOpenAIErrorRespone(nil))\n\t\treturn\n\t}\n\tc.Request.Body = io.NopCloser(bytes.NewBuffer(modifiedBody))\n\tlogger.SysLogf(\"modifiedBody\", string(modifiedBody))\n\n\t// bizErr := relayHelper(c, relayMode)\n\t// if bizErr == nil {\n\t// \treturn\n\t// }\n\n\tvar lastFailedChannelId int64\n\tfor i := retryTimes; i > 0; i-- {\n\t\t// 使用新的服务函数获取渠道并检查/刷新token\n\t\tchannel, err := service.GetChannelWithTokenRefresh(ctx, agent.Eid, agent.ChannelType, requestModel, lastFailedChannelId)\n\t\tif err != nil {\n\t\t\tlogger.Errorf(ctx, \"获取渠道失败: %s\", err.Error())\n\t\t\tcontinue\n\t\t}\n\n\t\tmiddleware.SetupContextForSelectedChannel(c, channel, requestModel)\n\t\tlogger.SysLogf(\"ChannelID\", channel.ChannelID)\n\t\tchannelId := c.GetInt64(ctxkey.ChannelId)\n\t\tlastFailedChannelId = channelId\n\t\trequestBody, err := common.GetRequestBody(c)\n\t\tc.Request.Body = io.NopCloser(bytes.NewBuffer(requestBody))\n\t\tbizErr := relayHelper(c, relayMode)\n\t\tif bizErr == nil {\n\t\t\treturn\n\t\t}\n\t\tchannelName := c.GetString(ctxkey.ChannelName)\n\t\tgo processChannelRelayError(ctx, int(config.GetUserId(c)), int(channelId), channelName, *bizErr)\n\t\t// return error message\n\t\tc.JSON(500, model.OpenAIErrorResponse{\n\t\t\tError: struct {\n\t\t\t\tMessage string `json:\"message\"`\n\t\t\t\tType    string `json:\"type\"`\n\t\t\t}{\n\t\t\t\tMessage: bizErr.Message,\n\t\t\t\tType:    bizErr.Type,\n\t\t\t},\n\t\t})\n\t\treturn\n\t}\n\tc.JSON(500, model.OpenAIErrorResponse{\n\t\tError: struct {\n\t\t\tMessage string `json:\"message\"`\n\t\t\tType    string `json:\"type\"`\n\t\t}{\n\t\t\tMessage: \"All channels are unavailable\",\n\t\t\tType:    \"53aihub_error\",\n\t\t},\n\t})\n}\n\nfunc relayHelper(c *gin.Context, relayMode int) *relay_model.ErrorWithStatusCode {\n\tvar err *relay_model.ErrorWithStatusCode\n\tswitch relayMode {\n\tcase relaymode.ImagesGenerations:\n\t\terr = controller.RelayImageHelper(c, relayMode)\n\t// case relaymode.AudioSpeech:\n\t// \tfallthrough\n\t// case relaymode.AudioTranslation:\n\t// \tfallthrough\n\t// case relaymode.AudioTranscription:\n\t// \terr = controller.RelayAudioHelper(c, relayMode)\n\t// case relaymode.Proxy:\n\t// \terr = controller.RelayProxyHelper(c, relayMode)\n\tdefault:\n\t\terr = RelayTextHelper(c)\n\t}\n\treturn err\n}\n\nfunc processChannelRelayError(ctx context.Context, userId int, channelId int, channelName string, err relay_model.ErrorWithStatusCode) {\n\tlogger.Errorf(ctx, \"relay error (channel id %d, user id: %d): %+v\", channelId, userId, err.Error)\n\tif monitor.ShouldDisableChannel(&err.Error, err.StatusCode) {\n\t\tmonitor.DisableChannel(channelId, channelName, err.Message)\n\t} else {\n\t\tmonitor.Emit(channelId, false)\n\t}\n}\n\nfunc getAndValidateTextRequest(c *gin.Context, relayMode int) (*relay_model.GeneralOpenAIRequest, error) {\n\ttextRequest := &relay_model.GeneralOpenAIRequest{}\n\terr := common.UnmarshalBodyReusable(c, textRequest)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif relayMode == relaymode.Moderations && textRequest.Model == \"\" {\n\t\ttextRequest.Model = \"text-moderation-latest\"\n\t}\n\tif relayMode == relaymode.Embeddings && textRequest.Model == \"\" {\n\t\ttextRequest.Model = c.Param(\"model\")\n\t}\n\terr = validator.ValidateTextRequest(textRequest, relayMode)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn textRequest, nil\n}\n\nfunc getMappedModelName(modelName string, mapping map[string]string) (string, bool) {\n\tif mapping == nil {\n\t\treturn modelName, false\n\t}\n\tmappedModelName := mapping[modelName]\n\tif mappedModelName != \"\" {\n\t\treturn mappedModelName, true\n\t}\n\treturn modelName, false\n}\n\nfunc setSystemPrompt(ctx context.Context, request *relay_model.GeneralOpenAIRequest, prompt string) (reset bool) {\n\tif prompt == \"\" {\n\t\treturn false\n\t}\n\tif len(request.Messages) == 0 {\n\t\treturn false\n\t}\n\tif request.Messages[0].Role == role.System {\n\t\trequest.Messages[0].Content = prompt\n\t\tlogger.Infof(ctx, \"rewrite system prompt\")\n\t\treturn true\n\t}\n\trequest.Messages = append([]relay_model.Message{{\n\t\tRole:    role.System,\n\t\tContent: prompt,\n\t}}, request.Messages...)\n\tlogger.Infof(ctx, \"add system prompt\")\n\treturn true\n}\n\n// createInitialMessage 在请求发起前创建占位消息，返回 messageID\nfunc createInitialMessage(c *gin.Context, agent *model.Agent, user_id int64, conversationId int64, textRequest *relay_model.GeneralOpenAIRequest, meta *meta.Meta, requestId string) (int64, error) {\n\tctx := c.Request.Context()\n\tmessageJSON, err := json.Marshal(textRequest.Messages)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"marshal messages failed: %s\", err.Error())\n\t\tmessageJSON = []byte(\"[]\")\n\t}\n\n\tmsg := &model.Message{\n\t\tEid:              agent.Eid,\n\t\tUserID:           user_id,\n\t\tConversationID:   conversationId,\n\t\tAgentID:          agent.AgentID,\n\t\tMessage:          string(messageJSON),\n\t\tAnswer:           \"\",\n\t\tReasoningContent: \"\",\n\t\tModelName:        textRequest.Model,\n\t\tQuota:            0,\n\t\tPromptTokens:     0,\n\t\tCompletionTokens: 0,\n\t\tTotalTokens:      0,\n\t\tChannelId:        int(meta.ChannelId),\n\t\tRequestId:        requestId,\n\t\tElapsedTime:      0,\n\t\tIsStream:         meta.IsStream,\n\t\tQuotaContent:     \"\",\n\t\tAgentCustomConfig: func() string {\n\t\t\t// 保存历史配置便于追溯\n\t\t\treturn agent.CustomConfig\n\t\t}(),\n\t}\n\tif err := model.CreateMessage(msg); err != nil {\n\t\treturn 0, err\n\t}\n\treturn msg.ID, nil\n}\n\n// sendSaveMessageEvent 按OpenAI兼容格式发送首帧，包含 save_message.id\nfunc sendSaveMessageEvent(c *gin.Context, requestId, modelName string, messageID int64) error {\n\t// 设置必要头部（幂等）\n\th := c.Writer.Header()\n\th.Set(\"Content-Type\", \"text/event-stream; charset=utf-8\")\n\th.Set(\"Cache-Control\", \"no-cache\")\n\th.Set(\"Connection\", \"keep-alive\")\n\th.Set(\"X-Accel-Buffering\", \"no\")\n\n\tpayload := map[string]interface{}{\n\t\t\"id\":         requestId,\n\t\t\"object\":     \"chat.completion.chunk\",\n\t\t\"created\":    time.Now().Unix(),\n\t\t\"model\":      modelName,\n\t\t\"message_id\": messageID,\n\t\t\"choices\":    []interface{}{},\n\t}\n\tb, err := json.Marshal(payload)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tchunk := append([]byte(\"data: \"), b...)\n\tchunk = append(chunk, []byte(\"\\n\\n\")...)\n\n\tif _, err := c.Writer.Write(chunk); err != nil {\n\t\treturn err\n\t}\n\tif flusher, ok := c.Writer.(http.Flusher); ok {\n\t\tflusher.Flush()\n\t}\n\treturn nil\n}\n\nfunc getPromptTokens(textRequest *relay_model.GeneralOpenAIRequest, relayMode int) int {\n\tswitch relayMode {\n\tcase relaymode.ChatCompletions:\n\t\treturn openai.CountTokenMessages(textRequest.Messages, textRequest.Model)\n\tcase relaymode.Completions:\n\t\treturn openai.CountTokenInput(textRequest.Prompt, textRequest.Model)\n\tcase relaymode.Moderations:\n\t\treturn openai.CountTokenInput(textRequest.Input, textRequest.Model)\n\t}\n\treturn 0\n}\n\nfunc getRequestBody(c *gin.Context, meta *meta.Meta, textRequest *relay_model.GeneralOpenAIRequest, adaptor adaptor.Adaptor) (io.Reader, error) {\n\tif !config.EnforceIncludeUsage &&\n\t\tmeta.APIType != apitype.OpenAI &&\n\t\tmeta.OriginModelName == meta.ActualModelName &&\n\t\tmeta.ChannelType != channeltype.Baichuan &&\n\t\tmeta.SystemPrompt == \"\" {\n\t\tbodyBytes, err := io.ReadAll(c.Request.Body)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar requestData map[string]interface{}\n\t\tif err := json.Unmarshal(bodyBytes, &requestData); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tdelete(requestData, \"conversation_id\")\n\t\tmodifiedBody, err := json.Marshal(requestData)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tc.Request.Body = io.NopCloser(bytes.NewBuffer(modifiedBody))\n\t\t// return c.Request.Body, nil\n\t}\n\n\t// get request body\n\tvar requestBody io.Reader\n\tconvertedRequest, err := adaptor.ConvertRequest(c, meta.Mode, textRequest)\n\tif err != nil {\n\t\tlogger.Debugf(c.Request.Context(), \"converted request failed: %s\\n\", err.Error())\n\t\treturn nil, err\n\t}\n\n\tif convertedRequestMap, ok := convertedRequest.(map[string]interface{}); ok {\n\t\tdelete(convertedRequestMap, \"conversation_id\")\n\t}\n\n\tjsonData, err := json.Marshal(convertedRequest)\n\tif err != nil {\n\t\tlogger.Debugf(c.Request.Context(), \"converted request json_marshal_failed: %s\\n\", err.Error())\n\t\treturn nil, err\n\t}\n\tlogger.Debugf(c.Request.Context(), \"converted request: \\n%s\", string(jsonData))\n\trequestBody = bytes.NewBuffer(jsonData)\n\treturn requestBody, nil\n}\n\nfunc RelayTextHelper(c *gin.Context) *relay_model.ErrorWithStatusCode {\n\tctx := c.Request.Context()\n\tuser_id := config.GetUserId(c)\n\tmeta := GetByContext(c)\n\tchannelId := c.GetInt64(ctxkey.ChannelId)\n\tmeta.ChannelId = int(channelId)\n\tmeta.APIType = model.GetApiType(meta.ChannelType)\n\tstartTime := time.Now()\n\ttextRequest, err := getAndValidateTextRequest(c, meta.Mode)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"getAndValidateTextRequest failed: %s\", err.Error())\n\t\treturn openai.ErrorWrapper(err, \"invalid_text_request\", http.StatusBadRequest)\n\t}\n\tmeta.IsStream = textRequest.Stream\n\n\tif meta.IsStream {\n\t\tSetupStreamInterceptor(c)\n\t}\n\t// 获取请求ID\n\trequestId := helper.GetRequestID(ctx)\n\tif requestId == \"\" {\n\t\trequestId = fmt.Sprintf(\"req-%d\", time.Now().UnixNano())\n\t}\n\n\t// map model name\n\tmeta.OriginModelName = textRequest.Model\n\ttextRequest.Model, _ = getMappedModelName(textRequest.Model, meta.ModelMapping)\n\tmeta.ActualModelName = textRequest.Model\n\tmodelRatio := billing_ratio.GetModelRatio(textRequest.Model, meta.ChannelType)\n\t// groupRatio := billing_ratio.GetGroupRatio(meta.Group)\n\tgroupRatio := 1.0\n\tratio := modelRatio * groupRatio\n\t// set system prompt if not empty\n\tagent, err := GetSessionAgent(c)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"getSessionAgent failed: %s\", err.Error())\n\t\treturn openai.ErrorWrapper(err, \"invalid_text_request\", http.StatusBadRequest)\n\t}\n\tsystemPromptReset := false\n\tif agent.Prompt != \"\" {\n\t\tsystemPromptReset = addAgentPrompt(ctx, textRequest, agent.Prompt, agent.ChannelType)\n\t\tmodifiedBody, err := json.Marshal(textRequest)\n\t\tif err != nil {\n\t\t\treturn openai.ErrorWrapper(err, \"marshal_request_failed\", http.StatusInternalServerError)\n\t\t}\n\t\tc.Request.Body = io.NopCloser(bytes.NewBuffer(modifiedBody))\n\t}\n\n\tpromptTokens := getPromptTokens(textRequest, meta.Mode)\n\tmeta.PromptTokens = promptTokens\n\tpreConsumedQuota, bizErr := preConsumeQuota(ctx, textRequest, promptTokens, ratio, meta)\n\tif bizErr != nil {\n\t\tlogger.Warnf(ctx, \"preConsumeQuota failed: %+v\", *bizErr)\n\t\treturn bizErr\n\t}\n\tconversation, err := GetSessionConversation(c)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"getSessionConversation failed: %s\", err.Error())\n\t\treturn openai.ErrorWrapper(err, \"invalid_text_request\", http.StatusBadRequest)\n\t}\n\tadaptor := service.GetAdaptor(meta.APIType)\n\t// set custom config\n\tif adaptor == nil {\n\t\treturn openai.ErrorWrapper(fmt.Errorf(\"invalid api type: %d\", meta.APIType), \"invalid_api_type\", http.StatusBadRequest)\n\t}\n\tadaptor.Init(meta)\n\tcustomConfig := &custom.CustomConfig{\n\t\tUserId:                     \"angethub_u\" + fmt.Sprintf(\"%d\", user_id),\n\t\tConversationId:             conversation.ChannelConversationID,\n\t\tConversationExpirationTime: conversation.ChannelConversationExpirationTime,\n\t\tAIHubConversationId:        conversation.ConversationID,\n\t}\n\n\terr = service.SetCustomConfig(&adaptor, customConfig)\n\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"convert_request_failed\", http.StatusInternalServerError)\n\t}\n\n\t// 1) 前置创建消息记录，获取 messageID\n\tmessageID, errCreate := createInitialMessage(c, agent, user_id, conversation.ConversationID, textRequest, meta, requestId)\n\tif errCreate != nil {\n\t\tlogger.Errorf(ctx, \"createInitialMessage failed: %s\", errCreate.Error())\n\t\treturn openai.ErrorWrapper(errCreate, \"create_message_failed\", http.StatusInternalServerError)\n\t}\n\n\t// get request body\n\trequestBody, err := getRequestBody(c, meta, textRequest, adaptor)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"convert_request_failed\", http.StatusInternalServerError)\n\t}\n\n\t// do request\n\tresp, err := adaptor.DoRequest(c, meta, requestBody)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"DoRequest failed: %s\", err.Error())\n\t\treturn openai.ErrorWrapper(err, \"do_request_failed\", http.StatusInternalServerError)\n\t}\n\n\t// 先判断是否错误，再决定是否发送首帧\n\tif isErrorHappened(meta, resp) {\n\t\tlogger.SysErrorf(\"检测到错误响应 - StatusCode: %d, ContentType: %s, IsStream: %v, ChannelType: %d, ModelName: %s\",\n\t\t\tresp.StatusCode, resp.Header.Get(\"Content-Type\"), meta.IsStream, meta.ChannelType, meta.ActualModelName)\n\n\t\t// 读取错误正文以写入到消息中，然后复位 resp.Body 供后续错误处理\n\t\terrBodyBytes, _ := io.ReadAll(resp.Body)\n\t\tresp.Body = io.NopCloser(bytes.NewBuffer(errBodyBytes))\n\n\t\t// 更新前置消息为失败记录\n\t\tfailUpdateMessage(c, agent, messageID, startTime, meta, textRequest.Model, requestId, string(errBodyBytes))\n\n\t\t// 返回统一错误处理\n\t\treturn controller.RelayErrorHandler(resp)\n\t}\n\n\t// 非错误：此时再发送首帧 message_id\n\tif meta.IsStream {\n\t\tif err := sendSaveMessageEvent(c, requestId, textRequest.Model, messageID); err != nil {\n\t\t\tlogger.Warnf(ctx, \"sendSaveMessageEvent failed: %s\", err.Error())\n\t\t\t// 不中断主流程\n\t\t}\n\t}\n\n\t// do response\n\tusage, respErr := adaptor.DoResponse(c, resp, meta)\n\tlogger.SysLogf(\"usage\", usage)\n\tif respErr != nil {\n\t\tlogger.Errorf(ctx, \"respErr is not nil: %+v\", respErr)\n\t\t//billing.ReturnPreConsumedQuota(ctx, preConsumedQuota, meta.TokenId)\n\t\treturn respErr\n\t}\n\n\tresponseContent, reasoningContent := GetResponseContent(c, meta.IsStream, resp)\n\n\tcustomConfig = service.GetCustomConfig(&adaptor)\n\t// post-consume quota\n\tgo postConsumeQuota(c, agent, user_id, startTime, ctx, usage, meta,\n\t\ttextRequest, ratio, preConsumedQuota, modelRatio, groupRatio,\n\t\tsystemPromptReset, responseContent, reasoningContent, customConfig, messageID)\n\treturn nil\n}\n\nfunc isErrorHappened(meta *meta.Meta, resp *http.Response) bool {\n\tif resp == nil {\n\t\tif meta.ChannelType == channeltype.AwsClaude {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t}\n\tif resp.StatusCode != http.StatusOK &&\n\t\t// replicate return 201 to create a task\n\t\tresp.StatusCode != http.StatusCreated {\n\t\treturn true\n\t}\n\tif meta.ChannelType == channeltype.DeepL {\n\t\t// skip stream check for deepl\n\t\treturn false\n\t}\n\n\t// Coze 工作流特殊处理：工作流不支持流式响应，总是返回 JSON\n\tif meta.ChannelType == channeltype.Coze && strings.HasPrefix(meta.ActualModelName, \"workflow-\") {\n\t\t// 对于 Coze 工作流，即使设置了 stream=true，也会返回 JSON 格式，这是正常的\n\t\treturn false\n\t}\n\n\tif meta.IsStream && strings.HasPrefix(resp.Header.Get(\"Content-Type\"), \"application/json\") &&\n\t\t// Even if stream mode is enabled, replicate will first return a task info in JSON format,\n\t\t// requiring the client to request the stream endpoint in the task info\n\t\tmeta.ChannelType != channeltype.Replicate {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc addAgentPrompt(ctx context.Context, textRequest *relay_model.GeneralOpenAIRequest, agentPrompt string, channelType int) bool {\n\tif agentPrompt == \"\" {\n\t\treturn false\n\t}\n\n\tif channelType == channeltype.OpenAI && strings.Contains(strings.ToLower(textRequest.Model), \"o1\") {\n\t\ttextRequest.Messages = append([]relay_model.Message{{\n\t\t\tRole:    \"user\",\n\t\t\tContent: agentPrompt,\n\t\t}}, textRequest.Messages...)\n\t\tlogger.Infof(ctx, \"add agent prompt for o1 model\")\n\t\treturn true\n\t}\n\n\tif len(textRequest.Messages) > 0 && textRequest.Messages[0].Role == role.System {\n\t\ttextRequest.Messages[0].Content = fmt.Sprintf(\"%s\\n%s\", agentPrompt, textRequest.Messages[0].Content)\n\t\tlogger.Infof(ctx, \"append agent system prompt\")\n\t} else {\n\t\ttextRequest.Messages = append([]relay_model.Message{{\n\t\t\tRole:    role.System,\n\t\t\tContent: agentPrompt,\n\t\t}}, textRequest.Messages...)\n\t\tlogger.Infof(ctx, \"add agent system prompt\")\n\t}\n\treturn true\n}\n\nfunc postConsumeQuota(c *gin.Context, agent *model.Agent, user_id int64, startTime time.Time,\n\tctx context.Context, usage *relay_model.Usage, meta *meta.Meta, textRequest *relay_model.GeneralOpenAIRequest,\n\tratio float64, preConsumedQuota int64, modelRatio float64,\n\tgroupRatio float64, systemPromptReset bool, responseContent string, reasoningContent string, customConfig *custom.CustomConfig, messageID int64) {\n\tif usage == nil {\n\t\tlogger.Error(ctx, \"usage is nil, which is unexpected\")\n\t\treturn\n\t}\n\tvar quota int64\n\tcompletionRatio := billing_ratio.GetCompletionRatio(textRequest.Model, meta.ChannelType)\n\tpromptTokens := usage.PromptTokens\n\tcompletionTokens := usage.CompletionTokens\n\tquota = int64(math.Ceil((float64(promptTokens) + float64(completionTokens)*completionRatio) * ratio))\n\tif ratio != 0 && quota <= 0 {\n\t\tquota = 1\n\t}\n\ttotalTokens := promptTokens + completionTokens\n\tif totalTokens == 0 {\n\t\tquota = 0\n\t}\n\tquotaDelta := quota - preConsumedQuota\n\n\tlogContent := fmt.Sprintf(\"倍率：%.2f × %.2f × %.2f\", modelRatio, groupRatio, completionRatio)\n\n\t// 获取前置保存的消息并更新\n\tmessage, err := model.GetMessageByID(agent.Eid, messageID)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"GetMessageByID failed (eid=%d id=%d): %s\", agent.Eid, messageID, err.Error())\n\t\treturn\n\t}\n\n\t// 重新序列化提问以保证 lastMessage 构造\n\tmessageJSON, err := json.Marshal(textRequest.Messages)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"marshal messages failed: %s\", err.Error())\n\t\tmessageJSON = []byte(\"[]\")\n\t}\n\n\t// 更新消息字段\n\tmessage.Answer = responseContent\n\tmessage.ReasoningContent = reasoningContent\n\tmessage.ModelName = textRequest.Model\n\tmessage.Quota = int(quotaDelta)\n\tmessage.PromptTokens = promptTokens\n\tmessage.CompletionTokens = completionTokens\n\tmessage.TotalTokens = totalTokens\n\tmessage.ChannelId = int(meta.ChannelId)\n\t// 保持原始 RequestId，如为空则补齐\n\tif message.RequestId == \"\" {\n\t\tmessage.RequestId = helper.GetRequestID(ctx)\n\t}\n\tmessage.ElapsedTime = helper.CalcElapsedTime(startTime)\n\tmessage.IsStream = meta.IsStream\n\tmessage.QuotaContent = logContent\n\n\tif err := model.UpdateMessage(message); err != nil {\n\t\tlogger.Errorf(ctx, \"UpdateMessage failed: %s\", err.Error())\n\t\treturn\n\t}\n\n\t// conversation update\n\tconversationId := message.ConversationID\n\tif conversationId != 0 {\n\t\tconversation, err := model.GetConversationByIdAndUserId(agent.Eid, conversationId, user_id)\n\t\tif err != nil {\n\t\t\tlogger.Errorf(ctx, \"get conversation by id and user id failed: %s\", err.Error())\n\t\t} else {\n\t\t\tlastMessage, _ := json.Marshal(map[string]string{\n\t\t\t\t\"question\": string(messageJSON),\n\t\t\t\t\"answer\":   responseContent,\n\t\t\t})\n\n\t\t\tconversation.Quota += int(quotaDelta)\n\t\t\tconversation.TotalTokens += totalTokens\n\t\t\tconversation.LastMessage = string(lastMessage)\n\t\t\tif customConfig != nil {\n\t\t\t\tif customConfig.ConversationId != \"\" {\n\t\t\t\t\tconversation.ChannelConversationID = customConfig.ConversationId\n\t\t\t\t}\n\t\t\t\tif customConfig.ConversationExpirationTime != 0 {\n\t\t\t\t\tconversation.ChannelConversationExpirationTime = customConfig.ConversationExpirationTime\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif err := model.UpdateConversation(conversation); err != nil {\n\t\t\t\tlogger.Errorf(ctx, \"UpdateConversation failed: %s\", err.Error())\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc preConsumeQuota(ctx context.Context, textRequest *relay_model.GeneralOpenAIRequest, promptTokens int, ratio float64, meta *meta.Meta) (int64, *relay_model.ErrorWithStatusCode) {\n\tpreConsumedQuota := getPreConsumedQuota(textRequest, promptTokens, ratio)\n\treturn preConsumedQuota, nil\n}\n\nfunc getPreConsumedQuota(textRequest *relay_model.GeneralOpenAIRequest, promptTokens int, ratio float64) int64 {\n\tpreConsumedTokens := config.PreConsumedQuota + int64(promptTokens)\n\tif textRequest.MaxTokens != 0 {\n\t\tpreConsumedTokens += int64(textRequest.MaxTokens)\n\t}\n\treturn int64(float64(preConsumedTokens) * ratio)\n}\n\n// failUpdateMessage: 在错误路径下更新前置创建的消息为失败记录\nfunc failUpdateMessage(c *gin.Context, agent *model.Agent, messageID int64, startTime time.Time, meta *meta.Meta, modelName, requestId, errText string) {\n\tctx := c.Request.Context()\n\tmsg, err := model.GetMessageByID(agent.Eid, messageID)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"failUpdateMessage GetMessageByID failed (eid=%d id=%d): %s\", agent.Eid, messageID, err.Error())\n\t\treturn\n\t}\n\t// 将错误文本写入 Answer，tokens/Quota 置零\n\tmsg.Answer = errText\n\tmsg.ReasoningContent = \"\"\n\tmsg.ModelName = modelName\n\tmsg.Quota = 0\n\tmsg.PromptTokens = 0\n\tmsg.CompletionTokens = 0\n\tmsg.TotalTokens = 0\n\tmsg.ChannelId = int(meta.ChannelId)\n\tif msg.RequestId == \"\" {\n\t\tmsg.RequestId = requestId\n\t}\n\tmsg.ElapsedTime = helper.CalcElapsedTime(startTime)\n\tmsg.IsStream = meta.IsStream\n\t// 可选：标注倍率文本为空\n\tmsg.QuotaContent = \"\"\n\n\tif err := model.UpdateMessage(msg); err != nil {\n\t\tlogger.Errorf(ctx, \"failUpdateMessage UpdateMessage failed: %s\", err.Error())\n\t}\n}\n\n// executeWorkflow 执行工作流并返回标准响应数据\nfunc executeWorkflow(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent) (*custom.WorkflowResponseData, error) {\n\t// 允许空参数，归一化为 {}\n\tif workflowRequest.Parameters == nil || len(workflowRequest.Parameters) == 0 {\n\t\tworkflowRequest.Parameters = map[string]interface{}{}\n\t}\n\n\tlogger.SysLogf(\"工作流执行开始 - Model: %s, ConversationID: %d, Parameters: %+v\",\n\t\tworkflowRequest.Model, workflowRequest.ConversationID, workflowRequest.Parameters)\n\n\tmodelName := agent.Model\n\t// 获取渠道并检查/刷新token\n\tlogger.SysLogf(\"工作流执行 - 开始获取渠道，Eid: %d, ChannelType: %d, Model: %s\",\n\t\tagent.Eid, agent.ChannelType, modelName)\n\n\t// 使用新的服务函数获取渠道并检查/刷新token\n\tctx := c.Request.Context()\n\tchannel, err := service.GetChannelWithTokenRefresh(ctx, agent.Eid, agent.ChannelType, modelName, 0)\n\tif err != nil {\n\t\tproviderID := agent.GetProviderID()\n\t\tlogger.SysLogf(\"尝试获取平台 ID %d\", providerID)\n\t\t// 如果是Coze渠道，尝试使用备用方法获取渠道（优先选择有Provider的Channel）\n\t\tif agent.ChannelType == channeltype.Coze {\n\t\t\tif providerID == 0 {\n\t\t\t\tchannel, err = model.GetFirstAvailableChannelByEidAndProviderType(agent.Eid, channeltype.Coze)\n\t\t\t} else {\n\t\t\t\tchannel, err = model.GetFirstChannelByEidAndProviderType(agent.Eid, channeltype.Coze, providerID)\n\t\t\t}\n\n\t\t\tif err != nil || channel == nil {\n\t\t\t\treturn nil, fmt.Errorf(\"provider channel error\")\n\t\t\t}\n\t\t\tchannel.Models = channel.GetAddModelString(modelName)\n\t\t\terr := model.DB.Updates(channel).Error\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"update channel error\")\n\t\t\t}\n\t\t} else {\n\t\t\treturn nil, fmt.Errorf(\"获取渠道失败，Eid: %d, ChannelType: %d, Model: %s, Error: %v\",\n\t\t\t\tagent.Eid, agent.ChannelType, modelName, err)\n\t\t}\n\t}\n\n\tlogger.SysLogf(\"工作流执行 - 成功获取渠道，ChannelID: %d, BaseURL: %s\",\n\t\tchannel.ChannelID, channel.BaseURL)\n\n\t// 设置渠道上下文\n\tmiddleware.SetupContextForSelectedChannel(c, channel, modelName)\n\n\t// 直接调用工作流适配器执行\n\treturn executeWorkflowDirect(c, workflowRequest, agent, channel, modelName)\n}\n\n// executeWorkflowDirect 直接执行工作流，简化参数传递\nfunc executeWorkflowDirect(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string) (*custom.WorkflowResponseData, error) {\n\t// 根据渠道类型选择对应的工作流适配器\n\tif channel.Type == channeltype.Coze || channel.Type == model.ChannelApiTypeCozeStudio {\n\t\treturn executeCozeWorkflow(c, workflowRequest, agent, channel, modelName)\n\t}\n\n\tif channel.Type == model.ChannelApiDify {\n\t\treturn executeDifyWorkflow(c, workflowRequest, agent, channel, modelName)\n\t}\n\n\tif channel.Type == channeltype.FastGPT || channel.Type == model.ChannelApiTypeFastGpt {\n\t\t// 这个 fastgpt 是因为 适配器的默认给 0 了，所以这里要手动设置一下，实际上数据库里面不会存 1007\n\t\treturn executeFastGPTWorkflow(c, workflowRequest, agent, channel, modelName)\n\t}\n\n\tif channel.Type == model.ChannelApi53AI {\n\t\treturn executeAI53Workflow(c, workflowRequest, agent, channel, modelName)\n\t}\n\n\tif channel.Type == model.ChannelApiTypeN8n {\n\t\treturn executeN8nWorkflow(c, workflowRequest, agent, channel, modelName)\n\t}\n\n\treturn nil, fmt.Errorf(\"不支持的渠道类型: %d\", channel.Type)\n}\n\n// handleWorkflowError 处理工作流HTTP错误响应\nfunc handleWorkflowError(resp *http.Response, workflowType string) error {\n\t// 读取错误响应内容\n\tbody, _ := io.ReadAll(resp.Body)\n\tresp.Body.Close()\n\n\tlogger.SysErrorf(\"❌ %s工作流请求失败 - 状态码: %d, 响应: %s\",\n\t\tworkflowType, resp.StatusCode, string(body))\n\n\t// 尝试解析错误响应获取详细信息\n\tvar detailMsg string\n\tif len(body) > 0 {\n\t\t// 尝试解析 JSON 错误响应\n\t\tvar errorResp map[string]interface{}\n\t\tif err := json.Unmarshal(body, &errorResp); err == nil {\n\t\t\t// 优先获取 message 字段\n\t\t\tif msg, ok := errorResp[\"message\"].(string); ok && msg != \"\" {\n\t\t\t\tdetailMsg = msg\n\t\t\t} else if msg, ok := errorResp[\"error\"].(string); ok && msg != \"\" {\n\t\t\t\tdetailMsg = msg\n\t\t\t} else if msg, ok := errorResp[\"detail\"].(string); ok && msg != \"\" {\n\t\t\t\tdetailMsg = msg\n\t\t\t}\n\t\t}\n\n\t\t// 如果无法解析 JSON，使用原始响应内容\n\t\tif detailMsg == \"\" {\n\t\t\tdetailMsg = string(body)\n\t\t}\n\t}\n\n\t// 构建错误消息\n\tvar errorMsg string\n\tif resp.StatusCode >= 400 && resp.StatusCode < 500 {\n\t\tif detailMsg != \"\" {\n\t\t\terrorMsg = fmt.Sprintf(\"%s工作流请求参数错误：%s\", workflowType, detailMsg)\n\t\t} else {\n\t\t\terrorMsg = fmt.Sprintf(\"%s工作流请求参数错误，状态码: %d\", workflowType, resp.StatusCode)\n\t\t}\n\t} else {\n\t\tif detailMsg != \"\" {\n\t\t\terrorMsg = fmt.Sprintf(\"%s工作流请求失败：%s\", workflowType, detailMsg)\n\t\t} else {\n\t\t\terrorMsg = fmt.Sprintf(\"%s工作流请求失败，状态码: %d\", workflowType, resp.StatusCode)\n\t\t}\n\t}\n\n\treturn errors.New(errorMsg)\n}\n\n// executeCozeWorkflow 执行 Coze 工作流\nfunc executeCozeWorkflow(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string) (*custom.WorkflowResponseData, error) {\n\t// 获取元数据\n\tmeta := GetByContext(c)\n\tmeta.APIType = model.GetApiType(channel.Type)\n\tmeta.OriginModelName = modelName\n\tmeta.ChannelId = int(channel.ChannelID)\n\tif channel.BaseURL != nil {\n\t\tmeta.BaseURL = *channel.BaseURL\n\t}\n\tmeta.APIKey = channel.Key\n\n\t// 应用模型映射\n\tmappedModel, _ := getMappedModelName(modelName, meta.ModelMapping)\n\tmeta.ActualModelName = mappedModel\n\n\tlogger.SysLogf(\"Coze工作流执行 - 模型映射，OriginModel: %s, ActualModel: %s\",\n\t\tmeta.OriginModelName, meta.ActualModelName)\n\n\t// 创建工作流适配器\n\tworkflowAdaptor := &coze.WorkflowAdaptor{}\n\tworkflowAdaptor.Init(meta)\n\n\t// 设置自定义配置\n\tuser_id := config.GetUserId(c)\n\tconversation, err := GetSessionConversation(c)\n\tif err == nil {\n\t\tcustomConfig := &custom.CustomConfig{\n\t\t\tUserId:                     \"angethub_u\" + fmt.Sprintf(\"%d\", user_id),\n\t\t\tConversationId:             conversation.ChannelConversationID,\n\t\t\tConversationExpirationTime: conversation.ChannelConversationExpirationTime,\n\t\t\tAIHubConversationId:        conversation.ConversationID,\n\t\t}\n\t\tworkflowAdaptor.CustomConfig = customConfig\n\t}\n\n\t// 构建工作流请求\n\tworkflowID := extractWorkflowID(agent.Model, agent.CustomConfig)\n\tif workflowID == \"\" {\n\t\treturn nil, fmt.Errorf(\"无法提取工作流ID\")\n\t}\n\n\t// 使用简化的方法直接构造请求\n\tcozeRequest := workflowAdaptor.ConvertWorkflowRequest(workflowID, workflowRequest.Parameters)\n\n\t// 序列化请求\n\trequestBody, err := json.Marshal(cozeRequest)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"序列化工作流请求失败: %v\", err)\n\t}\n\n\t// 执行请求\n\tresp, err := workflowAdaptor.DoRequest(c, meta, bytes.NewReader(requestBody))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"执行工作流请求失败: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\t// 检查 HTTP 状态码\n\tif resp.StatusCode >= 400 {\n\t\treturn nil, handleWorkflowError(resp, \"Coze\")\n\t}\n\n\t// 读取响应\n\tresponseBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取工作流响应失败: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"Coze工作流原始响应 - StatusCode: %d, 响应长度: %d bytes\",\n\t\tresp.StatusCode, len(responseBody))\n\n\t// 转换响应\n\tworkflowResponse, err := workflowAdaptor.ConvertToWorkflowResponseData(responseBody)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"转换工作流响应失败: %v\", err)\n\t}\n\n\t// 设置响应信息\n\tworkflowResponse.ChannelID = int(channel.ChannelID)\n\tworkflowResponse.ModelName = agent.Model\n\n\tif len(workflowResponse.WorkflowOutputData) == 0 {\n\t\tlogger.SysLogf(\"⚠️ Coze工作流执行成功但输出字段为空 - ExecuteID: %s\", workflowResponse.ExecuteID)\n\t\tlogger.SysLogf(\"🔍 Coze工作流详细输出数据: %+v\", workflowResponse)\n\t} else {\n\t\tlogger.SysLogf(\"✅ Coze工作流执行成功 - ExecuteID: %s, 输出字段数: %d\",\n\t\t\tworkflowResponse.ExecuteID, len(workflowResponse.WorkflowOutputData))\n\t}\n\n\treturn workflowResponse, nil\n}\n\n// executeDifyWorkflow 执行 DIFY 工作流\nfunc executeDifyWorkflow(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string) (*custom.WorkflowResponseData, error) {\n\t// 获取元数据\n\tmeta := GetByContext(c)\n\tmeta.APIType = model.GetApiType(channel.Type)\n\tmeta.OriginModelName = modelName\n\tmeta.ChannelId = int(channel.ChannelID)\n\tif channel.BaseURL != nil {\n\t\tmeta.BaseURL = *channel.BaseURL\n\t}\n\tmeta.APIKey = channel.Key\n\n\t// 应用模型映射\n\tmappedModel, _ := getMappedModelName(modelName, meta.ModelMapping)\n\tmeta.ActualModelName = mappedModel\n\n\tlogger.SysLogf(\"DIFY工作流执行 - 模型映射，OriginModel: %s, ActualModel: %s\",\n\t\tmeta.OriginModelName, meta.ActualModelName)\n\n\t// 创建工作流适配器\n\tworkflowAdaptor := &dify.DifyWorkflowAdaptor{}\n\tworkflowAdaptor.Init(meta)\n\n\t// 设置自定义配置\n\tuser_id := config.GetUserId(c)\n\tconversation, err := GetSessionConversation(c)\n\tif err == nil {\n\t\tcustomConfig := &custom.CustomConfig{\n\t\t\tUserId:                     \"angethub_u\" + fmt.Sprintf(\"%d\", user_id),\n\t\t\tConversationId:             conversation.ChannelConversationID,\n\t\t\tConversationExpirationTime: conversation.ChannelConversationExpirationTime,\n\t\t\tAIHubConversationId:        conversation.ConversationID,\n\t\t}\n\t\tworkflowAdaptor.CustomConfig = customConfig\n\t}\n\n\t// 构建工作流请求\n\tworkflowID := extractWorkflowID(agent.Model, agent.CustomConfig)\n\tif workflowID == \"\" {\n\t\treturn nil, fmt.Errorf(\"无法提取工作流ID\")\n\t}\n\n\t// 使用简化的方法直接构造请求\n\tdifyRequest, err := workflowAdaptor.ConvertWorkflowRequest(workflowID, workflowRequest.Parameters)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"构造DIFY工作流请求失败: %v\", err)\n\t}\n\n\t// 序列化请求\n\trequestBody, err := json.Marshal(difyRequest)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"序列化DIFY工作流请求失败: %v\", err)\n\t}\n\n\t// 执行请求\n\tresp, err := workflowAdaptor.DoRequest(c, meta, bytes.NewReader(requestBody))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"执行DIFY工作流请求失败: %v\", err)\n\t}\n\n\t// 检查 HTTP 状态码\n\tif resp.StatusCode >= 400 {\n\t\treturn nil, handleWorkflowError(resp, \"DIFY\")\n\t}\n\n\t// 处理流式响应\n\tworkflowResponse, err := workflowAdaptor.ProcessStreamingResponse(resp)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"处理DIFY工作流响应失败: %v\", err)\n\t}\n\n\t// 设置响应信息\n\tworkflowResponse.ChannelID = int(channel.ChannelID)\n\tworkflowResponse.ModelName = agent.Model\n\n\tif len(workflowResponse.WorkflowOutputData) == 0 {\n\t\tlogger.SysLogf(\"⚠️ DIFY工作流执行成功但输出字段为空 - ExecuteID: %s\", workflowResponse.ExecuteID)\n\t\tlogger.SysLogf(\"🔍 DIFY工作流详细输出数据: %+v\", workflowResponse)\n\t} else {\n\t\tlogger.SysLogf(\"✅ DIFY工作流执行成功 - ExecuteID: %s, 输出字段数: %d\",\n\t\t\tworkflowResponse.ExecuteID, len(workflowResponse.WorkflowOutputData))\n\t}\n\n\treturn workflowResponse, nil\n}\n\n// executeFastGPTWorkflow 执行 FastGPT 工作流\nfunc executeFastGPTWorkflow(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string) (*custom.WorkflowResponseData, error) {\n\t// 检查 Agent 类型是否为工作流类型\n\tif agent.AgentType != model.AgentTypeWorkflow {\n\t\treturn nil, fmt.Errorf(\"Agent 类型不是工作流类型，当前类型: %d\", agent.AgentType)\n\t}\n\n\t// 获取元数据\n\tmeta := GetByContext(c)\n\tmeta.APIType = model.GetApiType(channel.Type)\n\tmeta.OriginModelName = modelName\n\tmeta.ChannelId = int(channel.ChannelID)\n\tif channel.BaseURL != nil {\n\t\tmeta.BaseURL = *channel.BaseURL\n\t}\n\tmeta.APIKey = channel.Key\n\n\t// 应用模型映射\n\tmappedModel, _ := getMappedModelName(modelName, meta.ModelMapping)\n\tmeta.ActualModelName = mappedModel\n\n\tlogger.SysLogf(\"FastGPT工作流执行 - 模型映射，OriginModel: %s, ActualModel: %s\",\n\t\tmeta.OriginModelName, meta.ActualModelName)\n\n\t// 创建工作流适配器\n\tworkflowAdaptor := &fastgpt.FastGPTWorkflowAdaptor{}\n\tworkflowAdaptor.Init(meta)\n\n\t// 设置自定义配置\n\tuser_id := config.GetUserId(c)\n\tconversation, err := GetSessionConversation(c)\n\tif err == nil {\n\t\tcustomConfig := &custom.CustomConfig{\n\t\t\tUserId:                     \"angethub_u\" + fmt.Sprintf(\"%d\", user_id),\n\t\t\tConversationId:             conversation.ChannelConversationID,\n\t\t\tConversationExpirationTime: conversation.ChannelConversationExpirationTime,\n\t\t\tAIHubConversationId:        conversation.ConversationID,\n\t\t}\n\t\tworkflowAdaptor.CustomConfig = customConfig\n\t}\n\n\t// 转换工作流请求为 FastGPT 工作流请求\n\tfastgptRequest, err := workflowAdaptor.ConvertWorkflowToWorkflowRequest(workflowRequest.Parameters)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"转换FastGPT工作流请求失败: %v\", err)\n\t}\n\n\t// 序列化请求\n\trequestBody, err := json.Marshal(fastgptRequest)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"序列化FastGPT工作流请求失败: %v\", err)\n\t}\n\n\t// 执行请求\n\tresp, err := workflowAdaptor.DoRequest(c, meta, bytes.NewReader(requestBody))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"执行FastGPT工作流请求失败: %v\", err)\n\t}\n\n\t// 检查 HTTP 状态码\n\tif resp.StatusCode >= 400 {\n\t\treturn nil, handleWorkflowError(resp, \"FastGPT\")\n\t}\n\n\t// 处理响应\n\tworkflowResponse, err := workflowAdaptor.ProcessWorkflowResponse(resp)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"处理FastGPT工作流响应失败: %v\", err)\n\t}\n\n\t// 设置响应信息\n\tworkflowResponse.ChannelID = int(channel.ChannelID)\n\tworkflowResponse.ModelName = agent.Model\n\n\tif len(workflowResponse.WorkflowOutputData) == 0 {\n\t\tlogger.SysLogf(\"⚠️ FastGPT工作流执行成功但输出字段为空 - ExecuteID: %s\", workflowResponse.ExecuteID)\n\t\tlogger.SysLogf(\"🔍 FastGPT工作流详细输出数据: %+v\", workflowResponse)\n\t} else {\n\t\tlogger.SysLogf(\"✅ FastGPT工作流执行成功 - ExecuteID: %s, 输出字段数: %d\",\n\t\t\tworkflowResponse.ExecuteID, len(workflowResponse.WorkflowOutputData))\n\t}\n\n\treturn workflowResponse, nil\n}\n\n// executeAI53Workflow 执行 53AI 工作流\nfunc executeAI53Workflow(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string) (*custom.WorkflowResponseData, error) {\n\t// 检查 Agent 类型是否为工作流类型\n\tif agent.AgentType != model.AgentTypeWorkflow {\n\t\treturn nil, fmt.Errorf(\"Agent 类型不是工作流类型，当前类型: %d\", agent.AgentType)\n\t}\n\n\t// 获取元数据\n\tmeta := GetByContext(c)\n\tmeta.APIType = model.GetApiType(channel.Type)\n\tmeta.OriginModelName = modelName\n\tmeta.ChannelId = int(channel.ChannelID)\n\tif channel.BaseURL != nil {\n\t\tmeta.BaseURL = *channel.BaseURL\n\t}\n\tmeta.APIKey = channel.Key\n\n\t// 应用模型映射\n\tmappedModel, _ := getMappedModelName(modelName, meta.ModelMapping)\n\tmeta.ActualModelName = mappedModel\n\n\tlogger.SysLogf(\"53AI工作流执行 - 模型映射，OriginModel: %s, ActualModel: %s\",\n\t\tmeta.OriginModelName, meta.ActualModelName)\n\n\t// 创建工作流适配器\n\tworkflowAdaptor := &adaptor53AI.AI53WorkflowAdaptor{}\n\tworkflowAdaptor.Init(meta)\n\n\t// 设置自定义配置\n\tuser_id := config.GetUserId(c)\n\tconversation, err := GetSessionConversation(c)\n\tif err == nil {\n\t\tcustomConfig := &custom.CustomConfig{\n\t\t\tUserId:                     \"angethub_u\" + fmt.Sprintf(\"%d\", user_id),\n\t\t\tConversationId:             conversation.ChannelConversationID,\n\t\t\tConversationExpirationTime: conversation.ChannelConversationExpirationTime,\n\t\t\tAIHubConversationId:        conversation.ConversationID,\n\t\t}\n\t\tworkflowAdaptor.CustomConfig = customConfig\n\t}\n\n\t// 转换工作流请求为 53AI 工作流请求\n\tai53Request, err := workflowAdaptor.ConvertWorkflowToAI53Request(workflowRequest.Parameters)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"转换53AI工作流请求失败: %v\", err)\n\t}\n\n\t// 序列化请求\n\trequestBody, err := json.Marshal(ai53Request)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"序列化53AI工作流请求失败: %v\", err)\n\t}\n\n\t// 执行请求\n\tresp, err := workflowAdaptor.DoRequest(c, meta, bytes.NewReader(requestBody))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"执行53AI工作流请求失败: %v\", err)\n\t}\n\n\t// 检查 HTTP 状态码\n\tif resp.StatusCode >= 400 {\n\t\treturn nil, handleWorkflowError(resp, \"53AI\")\n\t}\n\n\t// 处理响应\n\tworkflowResponse, err := workflowAdaptor.ProcessAI53WorkflowResponse(resp)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"处理53AI工作流响应失败: %v\", err)\n\t}\n\n\t// 设置响应信息\n\tworkflowResponse.ChannelID = int(channel.ChannelID)\n\tworkflowResponse.ModelName = agent.Model\n\n\tif len(workflowResponse.WorkflowOutputData) == 0 {\n\t\tlogger.SysLogf(\"⚠️ 53AI工作流执行成功但输出字段为空 - TaskID: %s\", workflowResponse.ExecuteID)\n\t\tlogger.SysLogf(\"🔍 53AI工作流详细输出数据: %+v\", workflowResponse)\n\t} else {\n\t\tlogger.SysLogf(\"✅ 53AI工作流执行成功 - TaskID: %s, 输出字段数: %d\",\n\t\t\tworkflowResponse.ExecuteID, len(workflowResponse.WorkflowOutputData))\n\t}\n\n\treturn workflowResponse, nil\n}\n\n// saveWorkflowMessage 保存工作流消息记录\nfunc saveWorkflowMessage(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, response *custom.WorkflowResponseData) error {\n\tctx := c.Request.Context()\n\n\t// 获取用户信息\n\tuserId := config.GetUserId(c)\n\tif userId == 0 {\n\t\treturn errors.New(\"用户ID获取失败\")\n\t}\n\n\t// 获取会话ID\n\tconversationId := workflowRequest.ConversationID\n\tif conversationId == 0 {\n\t\tconversationId = c.GetInt64(session.SESSION_CONVERSATION_ID)\n\t}\n\n\t// 序列化工作流参数作为 message 内容\n\tparametersJSON, err := json.Marshal(workflowRequest.Parameters)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"序列化工作流参数失败: %v\", err)\n\t\tparametersJSON = []byte(\"{}\")\n\t}\n\n\t// 序列化工作流输出数据作为 answer 内容\n\toutputDataJSON, err := json.Marshal(response.WorkflowOutputData)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"序列化工作流输出数据失败: %v\", err)\n\t\toutputDataJSON = []byte(\"{}\")\n\t}\n\n\t// 获取请求ID\n\trequestId := helper.GetRequestID(ctx)\n\tif requestId == \"\" {\n\t\trequestId = response.ExecuteID // 使用 execute_id 作为 request_id\n\t}\n\n\t// 计算执行时间（如果有开始时间记录）\n\tvar elapsedTime int64 = 0\n\tif startTimeValue, exists := c.Get(\"workflow_start_time\"); exists {\n\t\tif startTime, ok := startTimeValue.(time.Time); ok {\n\t\t\telapsedTime = helper.CalcElapsedTime(startTime)\n\t\t}\n\t}\n\n\t// 计算 token 消耗\n\tpromptTokens, completionTokens, totalTokens := calculateWorkflowTokens(workflowRequest, response)\n\n\t// 获取费率信息（复用 chat 的费率计算逻辑）\n\tchannelType := getWorkflowChannelType(response)\n\tmodelRatio := billing_ratio.GetModelRatio(workflowRequest.Model, channelType)\n\tgroupRatio := 1.0 // 与 chat 保持一致\n\tcompletionRatio := billing_ratio.GetCompletionRatio(workflowRequest.Model, channelType)\n\tratio := modelRatio * groupRatio\n\n\t// 计算配额（复用 chat 的配额计算公式）\n\tquota := int64(math.Ceil((float64(promptTokens) + float64(completionTokens)*completionRatio) * ratio))\n\tif ratio != 0 && quota <= 0 {\n\t\tquota = 1 // 边界情况处理，与 chat 保持一致\n\t}\n\n\t// 生成配额内容记录（复用 chat 的格式）\n\tquotaContent := fmt.Sprintf(\"倍率：%.2f × %.2f × %.2f\", modelRatio, groupRatio, completionRatio)\n\n\t// 创建消息记录\n\tmessage := &model.Message{\n\t\tEid:               agent.Eid,\n\t\tUserID:            userId,\n\t\tConversationID:    conversationId,\n\t\tAgentID:           agent.AgentID,\n\t\tMessage:           string(parametersJSON), // 存储 parameters 的 JSON\n\t\tAnswer:            string(outputDataJSON), // 存储 workflow_output_data 的 JSON\n\t\tReasoningContent:  \"\",                     // 工作流暂不支持推理内容\n\t\tModelName:         response.ModelName,\n\t\tQuota:             int(quota),\n\t\tPromptTokens:      promptTokens,\n\t\tCompletionTokens:  completionTokens,\n\t\tTotalTokens:       totalTokens,\n\t\tChannelId:         response.ChannelID,\n\t\tRequestId:         requestId,\n\t\tElapsedTime:       elapsedTime,\n\t\tIsStream:          false, // 工作流不支持流式\n\t\tQuotaContent:      quotaContent,\n\t\tAgentCustomConfig: agent.CustomConfig, // 历史记录\n\t}\n\n\t// 保存消息到数据库\n\tif err := model.CreateMessage(message); err != nil {\n\t\treturn fmt.Errorf(\"创建消息记录失败: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"工作流消息保存成功 - MessageID: %d, ExecuteID: %s\", message.ID, response.ExecuteID)\n\n\t// 更新会话的最后消息（如果有会话ID）\n\tif conversationId != 0 {\n\t\tif err := updateConversationLastMessage(agent.Eid, conversationId, userId, string(parametersJSON), string(outputDataJSON), int(quota), totalTokens); err != nil {\n\t\t\tlogger.SysErrorf(\"更新会话最后消息失败: %v\", err)\n\t\t\t// 不返回错误，不影响主流程\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// updateConversationLastMessage 更新会话的最后消息和配额统计\nfunc updateConversationLastMessage(eid, conversationId, userId int64, question, answer string, quota, totalTokens int) error {\n\tconversation, err := model.GetConversationByIdAndUserId(eid, conversationId, userId)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"获取会话失败: %v\", err)\n\t}\n\n\t// 构造最后消息的 JSON 格式（与 chat 类型保持一致）\n\tlastMessage, err := json.Marshal(map[string]string{\n\t\t\"question\": question,\n\t\t\"answer\":   answer,\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"序列化最后消息失败: %v\", err)\n\t}\n\n\t// 更新会话（复用 chat 的会话统计逻辑）\n\tconversation.LastMessage = string(lastMessage)\n\tconversation.Quota += quota\n\tconversation.TotalTokens += totalTokens\n\tif err := model.UpdateConversation(conversation); err != nil {\n\t\treturn fmt.Errorf(\"更新会话失败: %v\", err)\n\t}\n\n\treturn nil\n}\n\n// calculateWorkflowTokens 计算工作流的 token 消耗\nfunc calculateWorkflowTokens(workflowRequest *WorkflowRunRequest, response *custom.WorkflowResponseData) (promptTokens, completionTokens, totalTokens int) {\n\t// 计算输入 token（基于 parameters）\n\tparametersText := \"\"\n\tfor key, value := range workflowRequest.Parameters {\n\t\tif strValue, ok := value.(string); ok {\n\t\t\tparametersText += key + \":\" + strValue + \" \"\n\t\t} else {\n\t\t\t// 对于非字符串类型，序列化为 JSON\n\t\t\tif jsonBytes, err := json.Marshal(value); err == nil {\n\t\t\t\tparametersText += key + \":\" + string(jsonBytes) + \" \"\n\t\t\t}\n\t\t}\n\t}\n\n\t// 使用现有的 token 计算逻辑\n\tpromptTokens = openai.CountTokenText(parametersText, workflowRequest.Model)\n\n\t// 计算输出 token（基于 workflow_output_data）\n\toutputText := \"\"\n\tfor key, value := range response.WorkflowOutputData {\n\t\tif strValue, ok := value.(string); ok {\n\t\t\toutputText += key + \":\" + strValue + \" \"\n\t\t} else {\n\t\t\t// 对于非字符串类型，序列化为 JSON\n\t\t\tif jsonBytes, err := json.Marshal(value); err == nil {\n\t\t\t\toutputText += key + \":\" + string(jsonBytes) + \" \"\n\t\t\t}\n\t\t}\n\t}\n\n\tcompletionTokens = openai.CountTokenText(outputText, workflowRequest.Model)\n\ttotalTokens = promptTokens + completionTokens\n\n\tlogger.SysLogf(\"工作流 Token 计算 - Model: %s, PromptTokens: %d, CompletionTokens: %d, TotalTokens: %d\",\n\t\tworkflowRequest.Model, promptTokens, completionTokens, totalTokens)\n\n\treturn promptTokens, completionTokens, totalTokens\n}\n\n// executeN8nWorkflow 执行 n8n 工作流\nfunc executeN8nWorkflow(c *gin.Context, workflowRequest *WorkflowRunRequest, agent *model.Agent, channel *model.Channel, modelName string) (*custom.WorkflowResponseData, error) {\n\t// 检查 Agent 类型是否为工作流类型\n\tif agent.AgentType != model.AgentTypeWorkflow {\n\t\treturn nil, fmt.Errorf(\"Agent 类型不是工作流类型，当前类型: %d\", agent.AgentType)\n\t}\n\n\t// 获取元数据\n\tmeta := GetByContext(c)\n\tmeta.APIType = model.GetApiType(channel.Type)\n\tmeta.OriginModelName = modelName\n\tmeta.ChannelId = int(channel.ChannelID)\n\tif channel.BaseURL != nil {\n\t\tmeta.BaseURL = *channel.BaseURL\n\t}\n\tmeta.APIKey = channel.Key\n\n\t// 应用模型映射\n\tmappedModel, _ := getMappedModelName(modelName, meta.ModelMapping)\n\tmeta.ActualModelName = mappedModel\n\n\tlogger.SysLogf(\"n8n工作流执行 - 模型映射，OriginModel: %s, ActualModel: %s\",\n\t\tmeta.OriginModelName, meta.ActualModelName)\n\n\t// 创建工作流适配器\n\tworkflowAdaptor := &n8n.N8nWorkflowAdaptor{}\n\tworkflowAdaptor.Init(meta)\n\n\t// 设置自定义配置\n\tuser_id := config.GetUserId(c)\n\tconversation, err := GetSessionConversation(c)\n\tif err == nil {\n\t\tcustomConfig := &custom.CustomConfig{\n\t\t\tUserId:                     \"angethub_u\" + fmt.Sprintf(\"%d\", user_id),\n\t\t\tConversationId:             conversation.ChannelConversationID,\n\t\t\tConversationExpirationTime: conversation.ChannelConversationExpirationTime,\n\t\t\tAIHubConversationId:        conversation.ConversationID,\n\t\t}\n\t\tworkflowAdaptor.CustomConfig = customConfig\n\t}\n\n\t// 构建工作流请求\n\tworkflowID := extractWorkflowID(agent.Model, agent.CustomConfig)\n\tif workflowID == \"\" {\n\t\treturn nil, fmt.Errorf(\"无法提取工作流ID\")\n\t}\n\n\t// 转换工作流请求为 n8n 工作流请求\n\tn8nRequest, err := workflowAdaptor.ConvertWorkflowRequest(workflowID, workflowRequest.Parameters)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"转换n8n工作流请求失败: %v\", err)\n\t}\n\n\t// 序列化请求\n\trequestBody, err := json.Marshal(n8nRequest)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"序列化n8n工作流请求失败: %v\", err)\n\t}\n\n\t// 执行请求\n\tresp, err := workflowAdaptor.DoRequest(c, meta, bytes.NewReader(requestBody))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"执行n8n工作流请求失败: %v\", err)\n\t}\n\n\t// 检查 HTTP 状态码\n\tif resp.StatusCode >= 400 {\n\t\treturn nil, handleWorkflowError(resp, \"n8n\")\n\t}\n\n\t// 处理响应\n\tworkflowResponse, err := workflowAdaptor.ProcessResponse(resp)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"处理n8n工作流响应失败: %v\", err)\n\t}\n\n\t// 设置响应信息\n\tworkflowResponse.ChannelID = int(channel.ChannelID)\n\tworkflowResponse.ModelName = agent.Model\n\n\tif len(workflowResponse.WorkflowOutputData) == 0 {\n\t\tlogger.SysLogf(\"⚠️ n8n工作流执行成功但输出字段为空 - ExecuteID: %s\", workflowResponse.ExecuteID)\n\t\tlogger.SysLogf(\"🔍 n8n工作流详细输出数据: %+v\", workflowResponse)\n\t} else {\n\t\tlogger.SysLogf(\"✅ n8n工作流执行成功 - ExecuteID: %s, 输出字段数: %d\",\n\t\t\tworkflowResponse.ExecuteID, len(workflowResponse.WorkflowOutputData))\n\t}\n\n\treturn workflowResponse, nil\n}\n\n// getWorkflowChannelType 获取工作流的渠道类型\nfunc getWorkflowChannelType(response *custom.WorkflowResponseData) int {\n\t// 从响应中获取渠道ID，然后查询渠道类型\n\tif response.ChannelID > 0 {\n\t\tif channel, err := model.GetChannelByID(int64(response.ChannelID)); err == nil {\n\t\t\treturn channel.Type\n\t\t}\n\t}\n\n\t// 默认返回 Coze 类型（当前主要支持的工作流类型）\n\treturn channeltype.Coze\n}\n\nfunc GetByContext(c *gin.Context) *relay_meta.Meta {\n\tmeta := relay_meta.Meta{\n\t\tMode:            relaymode.GetByPath(c.Request.URL.Path),\n\t\tChannelType:     c.GetInt(ctxkey.Channel),\n\t\tChannelId:       c.GetInt(ctxkey.ChannelId),\n\t\tTokenId:         c.GetInt(ctxkey.TokenId),\n\t\tTokenName:       c.GetString(ctxkey.TokenName),\n\t\tUserId:          c.GetInt(ctxkey.Id),\n\t\tGroup:           c.GetString(ctxkey.Group),\n\t\tModelMapping:    c.GetStringMapString(ctxkey.ModelMapping),\n\t\tOriginModelName: c.GetString(ctxkey.RequestModel),\n\t\tBaseURL:         c.GetString(ctxkey.BaseURL),\n\t\tAPIKey:          strings.TrimPrefix(c.Request.Header.Get(\"Authorization\"), \"Bearer \"),\n\t\tRequestURLPath:  c.Request.URL.String(),\n\t\tSystemPrompt:    c.GetString(ctxkey.SystemPrompt),\n\t}\n\tcfg, ok := c.Get(ctxkey.Config)\n\tif ok {\n\t\tmeta.Config = cfg.(oneapi_model.ChannelConfig)\n\t}\n\tif meta.BaseURL == \"\" {\n\t\tif meta.ChannelType >= 0 && meta.ChannelType < len(channeltype.ChannelBaseURLs) {\n\t\t\tmeta.BaseURL = channeltype.ChannelBaseURLs[meta.ChannelType]\n\t\t}\n\t}\n\tmeta.APIType = channeltype.ToAPIType(meta.ChannelType)\n\treturn &meta\n}\n"
  },
  {
    "path": "api/controller/rerank.go",
    "content": "package controller\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"math\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/middleware\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\tbilling_ratio \"github.com/songquanpeng/one-api/relay/billing/ratio\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\trelay_model \"github.com/songquanpeng/one-api/relay/model\"\n)\n\n// RerankRequest represents the request structure for rerank API\ntype RerankRequest struct {\n\tModel           string   `json:\"model\" example:\"gte-rerank-v2\" binding:\"required\"`                                                                               // Model name for reranking\n\tQuery           string   `json:\"query\" example:\"人工智能的发展历程\" binding:\"required\"`                                                                                   // Query text to compare against documents\n\tDocuments       []string `json:\"documents\" example:\"[\\\"人工智能起源于1950年代，图灵提出了著名的图灵测试\\\",\\\"深度学习是机器学习的一个分支，使用神经网络进行学习\\\",\\\"自然语言处理是人工智能的重要应用领域之一\\\"]\" binding:\"required\"` // List of documents to rerank\n\tTopN            *int     `json:\"top_n,omitempty\" example:\"3\"`                                                                                                    // Number of top results to return\n\tReturnDocuments *bool    `json:\"return_documents,omitempty\" example:\"true\"`                                                                                      // Whether to return document content in response\n}\n\n// RerankResponse represents the response structure for rerank API\ntype RerankResponse struct {\n\tObject string         `json:\"object\" example:\"list\"`         // Response object type\n\tData   []RerankResult `json:\"data\"`                          // Array of rerank results\n\tModel  string         `json:\"model\" example:\"gte-rerank-v2\"` // Model used for reranking\n\tUsage  RerankUsage    `json:\"usage\"`                         // Token usage information\n}\n\n// RerankResult represents a single rerank result\ntype RerankResult struct {\n\tObject         string          `json:\"object\" example:\"rerank_result\"` // Result object type\n\tIndex          int             `json:\"index\" example:\"0\"`              // Original index in input documents\n\tRelevanceScore float64         `json:\"relevance_score\" example:\"0.95\"` // Relevance score (0-1)\n\tDocument       *RerankDocument `json:\"document,omitempty\"`             // Document content (if return_documents=true)\n}\n\n// RerankDocument represents document content in rerank result\ntype RerankDocument struct {\n\tText string `json:\"text\" example:\"文档内容\"` // Document text content\n}\n\n// RerankUsage represents token usage information for rerank\ntype RerankUsage struct {\n\tTotalTokens int `json:\"total_tokens\" example:\"150\"` // Total tokens used\n}\n\n// @Summary Rerank\n// @Description Rerank documents based on query relevance using AI models\n// @Tags Rerank\n// @Accept json\n// @Produce json\n// @Param rerankRequest body RerankRequest true \"Rerank request with query and documents\"\n// @Success 200 {object} RerankResponse \"Successful rerank response\"\n// @Failure 400 {object} model.OpenAIErrorResponse \"Bad request - invalid parameters\"\n// @Failure 401 {object} model.OpenAIErrorResponse \"Unauthorized - invalid API key\"\n// @Failure 500 {object} model.OpenAIErrorResponse \"Internal server error\"\n// @Router /v1/rerank [post]\n// @Security BearerAuth\nfunc Rerank(c *gin.Context) {\n\tctx := c.Request.Context()\n\tstartTime := time.Now()\n\n\t// 解析请求\n\tvar rerankRequest RerankRequest\n\tif err := c.ShouldBindJSON(&rerankRequest); err != nil {\n\t\tlogger.Errorf(ctx, \"解析 rerank 请求失败: %v\", err)\n\t\tc.JSON(http.StatusBadRequest, model.OpenAIErrorResponse{\n\t\t\tError: struct {\n\t\t\t\tMessage string `json:\"message\"`\n\t\t\t\tType    string `json:\"type\"`\n\t\t\t}{\n\t\t\t\tMessage: \"请求参数格式错误: \" + err.Error(),\n\t\t\t\tType:    \"invalid_request_error\",\n\t\t\t},\n\t\t})\n\t\treturn\n\t}\n\n\t// 验证请求参数\n\tif err := validateRerankRequest(&rerankRequest); err != nil {\n\t\tlogger.Errorf(ctx, \"rerank 请求参数验证失败: %v\", err)\n\t\tc.JSON(http.StatusBadRequest, model.OpenAIErrorResponse{\n\t\t\tError: struct {\n\t\t\t\tMessage string `json:\"message\"`\n\t\t\t\tType    string `json:\"type\"`\n\t\t\t}{\n\t\t\t\tMessage: err.Error(),\n\t\t\t\tType:    \"invalid_request_error\",\n\t\t\t},\n\t\t})\n\t\treturn\n\t}\n\n\t// 记录请求开始日志 - 参考 workflow 格式\n\tlogger.SysLogf(\"🚀 Rerank请求开始\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 🤖 模型名称: %s\", rerankRequest.Model)\n\tlogger.SysLogf(\"│ 📝 查询内容: %s\", truncateString(rerankRequest.Query, 100))\n\tlogger.SysLogf(\"│ 📚 文档数量: %d\", len(rerankRequest.Documents))\n\tif rerankRequest.TopN != nil {\n\t\tlogger.SysLogf(\"│ 🔢 TopN: %d\", *rerankRequest.TopN)\n\t}\n\tif rerankRequest.ReturnDocuments != nil {\n\t\tlogger.SysLogf(\"│ 📄 返回文档: %v\", *rerankRequest.ReturnDocuments)\n\t}\n\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\n\t// 获取用户信息\n\tuserId := config.GetUserId(c)\n\tif userId == 0 {\n\t\tlogger.SysErrorf(\"❌ Rerank请求失败 - 用户身份验证失败\")\n\t\tc.JSON(http.StatusUnauthorized, model.OpenAIErrorResponse{\n\t\t\tError: struct {\n\t\t\t\tMessage string `json:\"message\"`\n\t\t\t\tType    string `json:\"type\"`\n\t\t\t}{\n\t\t\t\tMessage: \"未授权访问\",\n\t\t\t\tType:    \"authentication_error\",\n\t\t\t},\n\t\t})\n\t\treturn\n\t}\n\n\t// 获取企业信息 - 从用户信息中获取\n\tuser, err := model.GetUserByID(userId)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"❌ Rerank请求失败 - 用户信息获取失败, UserID: %d, Error: %v\", userId, err)\n\t\tc.JSON(http.StatusUnauthorized, model.OpenAIErrorResponse{\n\t\t\tError: struct {\n\t\t\t\tMessage string `json:\"message\"`\n\t\t\t\tType    string `json:\"type\"`\n\t\t\t}{\n\t\t\t\tMessage: \"用户信息获取失败\",\n\t\t\t\tType:    \"authentication_error\",\n\t\t\t},\n\t\t})\n\t\treturn\n\t}\n\teid := user.Eid\n\n\tlogger.SysLogf(\"📋 用户信息 - UserID: %d, EnterpriseID: %d\", userId, eid)\n\n\t// 根据模型名称确定渠道类型\n\tchannelType := getChannelTypeByModel(rerankRequest.Model)\n\tif channelType == -1 {\n\t\tlogger.SysErrorf(\"❌ Rerank请求失败 - 不支持的模型: %s\", rerankRequest.Model)\n\t\tc.JSON(http.StatusBadRequest, model.OpenAIErrorResponse{\n\t\t\tError: struct {\n\t\t\t\tMessage string `json:\"message\"`\n\t\t\t\tType    string `json:\"type\"`\n\t\t\t}{\n\t\t\t\tMessage: fmt.Sprintf(\"不支持的 rerank 模型: %s\", rerankRequest.Model),\n\t\t\t\tType:    \"invalid_request_error\",\n\t\t\t},\n\t\t})\n\t\treturn\n\t}\n\n\t// 获取可用渠道\n\tchannel, err := model.GetRandomChannel(eid, channelType, rerankRequest.Model)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"❌ 获取 rerank 渠道失败: %v\", err)\n\t\tc.JSON(http.StatusInternalServerError, model.OpenAIErrorResponse{\n\t\t\tError: struct {\n\t\t\t\tMessage string `json:\"message\"`\n\t\t\t\tType    string `json:\"type\"`\n\t\t\t}{\n\t\t\t\tMessage: \"暂无可用的 rerank 服务渠道\",\n\t\t\t\tType:    \"service_unavailable\",\n\t\t\t},\n\t\t})\n\t\treturn\n\t}\n\n\tlogger.SysLogf(\"✅ 成功获取渠道 - ChannelID: %d, ChannelName: %s, ChannelType: %d\",\n\t\tchannel.ChannelID, channel.Name, channel.Type)\n\n\t// 设置渠道上下文\n\tmiddleware.SetupContextForSelectedChannel(c, channel, rerankRequest.Model)\n\n\t// 执行 rerank 请求\n\tresponse, usage, err := executeRerankRequest(c, &rerankRequest, channel)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"❌ 执行 rerank 请求失败: %v\", err)\n\t\tc.JSON(http.StatusInternalServerError, model.OpenAIErrorResponse{\n\t\t\tError: struct {\n\t\t\t\tMessage string `json:\"message\"`\n\t\t\t\tType    string `json:\"type\"`\n\t\t\t}{\n\t\t\t\tMessage: err.Error(),\n\t\t\t\tType:    \"service_error\",\n\t\t\t},\n\t\t})\n\t\treturn\n\t}\n\n\t// 计算执行时间\n\telapsedTime := helper.CalcElapsedTime(startTime)\n\n\t// 记录成功日志\n\tlogger.SysLogf(\"✅ Rerank请求成功完成\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📊 结果统计:\")\n\tlogger.SysLogf(\"│   🔢 返回结果数: %d\", len(response.Data))\n\tlogger.SysLogf(\"│   ⏱️  执行时间: %dms\", elapsedTime)\n\tlogger.SysLogf(\"│   🎯 Token使用: %d\", usage.TotalTokens)\n\tlogger.SysLogf(\"│   🏷️  模型名称: %s\", response.Model)\n\tlogger.SysLogf(\"│   🆔 渠道ID: %d\", channel.ChannelID)\n\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\n\t// 异步记录使用情况\n\tgo recordRerankUsage(ctx, userId, eid, &rerankRequest, response, usage, int(channel.ChannelID), startTime)\n\n\t// 返回响应\n\tc.JSON(http.StatusOK, response)\n}\n\n// validateRerankRequest 验证 rerank 请求参数\nfunc validateRerankRequest(req *RerankRequest) error {\n\tif req.Model == \"\" {\n\t\treturn fmt.Errorf(\"model 参数不能为空\")\n\t}\n\tif req.Query == \"\" {\n\t\treturn fmt.Errorf(\"query 参数不能为空\")\n\t}\n\tif len(req.Documents) == 0 {\n\t\treturn fmt.Errorf(\"documents 参数不能为空\")\n\t}\n\tif len(req.Documents) > 1000 {\n\t\treturn fmt.Errorf(\"documents 数量不能超过 1000\")\n\t}\n\tif req.TopN != nil && *req.TopN <= 0 {\n\t\treturn fmt.Errorf(\"top_n 参数必须大于 0\")\n\t}\n\tif req.TopN != nil && *req.TopN > len(req.Documents) {\n\t\t*req.TopN = len(req.Documents)\n\t}\n\treturn nil\n}\n\n// getChannelTypeByModel 根据模型名称确定渠道类型\nfunc getChannelTypeByModel(modelName string) int {\n\t// 百炼模型\n\tif strings.HasPrefix(modelName, \"gte-rerank\") {\n\t\treturn model.ChannelApiBailian\n\t}\n\n\t// 可以扩展支持其他厂商的 rerank 模型\n\t// if strings.HasPrefix(modelName, \"cohere-rerank\") {\n\t//     return channeltype.Cohere\n\t// }\n\n\treturn -1 // 不支持的模型\n}\n\n// executeRerankRequest 执行 rerank 请求\nfunc executeRerankRequest(c *gin.Context, req *RerankRequest, channel *model.Channel) (*RerankResponse, *relay_model.Usage, error) {\n\t// 创建元数据\n\tmeta := &meta.Meta{\n\t\tMode:            0, // rerank 模式\n\t\tChannelType:     channel.Type,\n\t\tChannelId:       int(channel.ChannelID),\n\t\tUserId:          int(config.GetUserId(c)),\n\t\tOriginModelName: req.Model,\n\t\tActualModelName: req.Model,\n\t\tAPIType:         model.GetApiType(channel.Type),\n\t\tAPIKey:          channel.Key,\n\t}\n\n\tif channel.BaseURL != nil {\n\t\tmeta.BaseURL = *channel.BaseURL\n\t}\n\n\t// 根据渠道类型处理请求\n\tswitch channel.Type {\n\tcase model.ChannelApiBailian:\n\t\treturn executeAliRerankRequest(c, req, meta)\n\tdefault:\n\t\treturn nil, nil, fmt.Errorf(\"不支持的渠道类型: %d\", channel.Type)\n\t}\n}\n\n// executeAliRerankRequest 执行阿里云百炼 rerank 请求\nfunc executeAliRerankRequest(c *gin.Context, req *RerankRequest, meta *meta.Meta) (*RerankResponse, *relay_model.Usage, error) {\n\t// 创建新的 service 实例\n\trerankService := &service.BailianRerankService{}\n\n\t// 将 controller 中的 RerankRequest 转换为 service 中的 RerankRequest\n\tserviceReq := &service.RerankRequest{\n\t\tModel:           req.Model,\n\t\tQuery:           req.Query,\n\t\tDocuments:       req.Documents,\n\t\tTopN:            req.TopN,\n\t\tReturnDocuments: req.ReturnDocuments,\n\t}\n\n\t// 调用 service 的方法\n\tserviceResp, usage, err := rerankService.CallBailianRerankAPI(c.Request.Context(), serviceReq, meta)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// 将 service 中的 RerankResponse 转换为 controller 中的 RerankResponse\n\tcontrollerResp := &RerankResponse{\n\t\tObject: serviceResp.Object,\n\t\tModel:  serviceResp.Model,\n\t\tUsage: RerankUsage{\n\t\t\tTotalTokens: serviceResp.Usage.TotalTokens,\n\t\t},\n\t}\n\n\t// 转换 Data 字段\n\tcontrollerResp.Data = make([]RerankResult, len(serviceResp.Data))\n\tfor i, serviceResult := range serviceResp.Data {\n\t\tcontrollerResult := RerankResult{\n\t\t\tObject:         serviceResult.Object,\n\t\t\tIndex:          serviceResult.Index,\n\t\t\tRelevanceScore: serviceResult.RelevanceScore,\n\t\t}\n\n\t\tif serviceResult.Document != nil {\n\t\t\tcontrollerResult.Document = &RerankDocument{\n\t\t\t\tText: serviceResult.Document.Text,\n\t\t\t}\n\t\t}\n\n\t\tcontrollerResp.Data[i] = controllerResult\n\t}\n\n\treturn controllerResp, usage, nil\n}\n\n// convertBailianRerankResponse 转换百炼 rerank 响应为标准格式\nfunc convertBailianRerankResponse(bailianResp map[string]interface{}, req *RerankRequest) (*RerankResponse, *relay_model.Usage, error) {\n\t// 解析输出数据\n\toutput, ok := bailianResp[\"output\"].(map[string]interface{})\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"响应格式错误：缺少 output 字段\")\n\t}\n\n\tresults, ok := output[\"results\"].([]interface{})\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"响应格式错误：缺少 results 字段\")\n\t}\n\n\t// 转换结果\n\tvar rerankResults []RerankResult\n\tfor _, result := range results {\n\t\tresultMap, ok := result.(map[string]interface{})\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tindex, _ := resultMap[\"index\"].(float64)\n\t\tscore, _ := resultMap[\"relevance_score\"].(float64)\n\n\t\trerankResult := RerankResult{\n\t\t\tObject:         \"rerank_result\",\n\t\t\tIndex:          int(index),\n\t\t\tRelevanceScore: score,\n\t\t}\n\n\t\t// 如果需要返回文档内容\n\t\tif req.ReturnDocuments != nil && *req.ReturnDocuments {\n\t\t\tif int(index) < len(req.Documents) {\n\t\t\t\trerankResult.Document = &RerankDocument{\n\t\t\t\t\tText: req.Documents[int(index)],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trerankResults = append(rerankResults, rerankResult)\n\t}\n\n\t// 计算 token 使用量\n\tusage := calculateRerankUsage(req, len(rerankResults))\n\n\tresponse := &RerankResponse{\n\t\tObject: \"list\",\n\t\tData:   rerankResults,\n\t\tModel:  req.Model,\n\t\tUsage: RerankUsage{\n\t\t\tTotalTokens: usage.TotalTokens,\n\t\t},\n\t}\n\n\tlogger.SysLogf(\"✅ 响应转换完成 - 结果数量: %d, Token使用: %d\", len(rerankResults), usage.TotalTokens)\n\n\treturn response, usage, nil\n}\n\n// calculateRerankUsage 计算 rerank 的 token 使用量\nfunc calculateRerankUsage(req *RerankRequest, resultCount int) *relay_model.Usage {\n\t// 计算输入 token（query + documents）\n\tqueryTokens := openai.CountTokenText(req.Query, req.Model)\n\n\tdocumentsText := strings.Join(req.Documents, \" \")\n\tdocumentsTokens := openai.CountTokenText(documentsText, req.Model)\n\n\tpromptTokens := queryTokens + documentsTokens\n\n\t// rerank 通常没有生成内容，completion tokens 为 0\n\tcompletionTokens := 0\n\n\ttotalTokens := promptTokens + completionTokens\n\n\tlogger.SysLogf(\"📊 Token计算详情 - Query: %d, Documents: %d, Total: %d\",\n\t\tqueryTokens, documentsTokens, totalTokens)\n\n\treturn &relay_model.Usage{\n\t\tPromptTokens:     promptTokens,\n\t\tCompletionTokens: completionTokens,\n\t\tTotalTokens:      totalTokens,\n\t}\n}\n\n// recordRerankUsage 记录 rerank 使用情况\nfunc recordRerankUsage(ctx context.Context, userId, eid int64, req *RerankRequest, resp *RerankResponse, usage *relay_model.Usage, channelId int, startTime time.Time) {\n\t// 计算费用\n\tchannelType := getChannelTypeByModel(req.Model)\n\tmodelRatio := billing_ratio.GetModelRatio(req.Model, channelType)\n\tgroupRatio := 1.0\n\tcompletionRatio := billing_ratio.GetCompletionRatio(req.Model, channelType)\n\tratio := modelRatio * groupRatio\n\n\tquota := int64(math.Ceil((float64(usage.PromptTokens) + float64(usage.CompletionTokens)*completionRatio) * ratio))\n\tif ratio != 0 && quota <= 0 {\n\t\tquota = 1\n\t}\n\n\t// 序列化请求和响应\n\trequestJSON, _ := json.Marshal(req)\n\tresponseJSON, _ := json.Marshal(resp)\n\n\t// 获取请求ID\n\trequestId := helper.GetRequestID(ctx)\n\tif requestId == \"\" {\n\t\trequestId = fmt.Sprintf(\"rerank_%d_%d\", userId, time.Now().UnixNano())\n\t}\n\n\t// 创建消息记录\n\tmessage := &model.Message{\n\t\tEid:              eid,\n\t\tUserID:           userId,\n\t\tConversationID:   0, // rerank 不关联会话\n\t\tAgentID:          0, // rerank 不关联 agent\n\t\tMessage:          string(requestJSON),\n\t\tAnswer:           string(responseJSON),\n\t\tModelName:        req.Model,\n\t\tQuota:            int(quota),\n\t\tPromptTokens:     usage.PromptTokens,\n\t\tCompletionTokens: usage.CompletionTokens,\n\t\tTotalTokens:      usage.TotalTokens,\n\t\tChannelId:        channelId,\n\t\tRequestId:        requestId,\n\t\tElapsedTime:      helper.CalcElapsedTime(startTime),\n\t\tIsStream:         false,\n\t\tQuotaContent:     fmt.Sprintf(\"倍率：%.2f × %.2f × %.2f\", modelRatio, groupRatio, completionRatio),\n\t}\n\n\tif err := model.CreateMessage(message); err != nil {\n\t\tlogger.SysErrorf(\"❌ 记录 rerank 使用情况失败: %v\", err)\n\t} else {\n\t\tlogger.SysLogf(\"✅ Rerank使用记录保存成功\")\n\t\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\t\tlogger.SysLogf(\"│ 📊 使用统计:\")\n\t\tlogger.SysLogf(\"│   🆔 消息ID: %d\", message.ID)\n\t\tlogger.SysLogf(\"│   👤 用户ID: %d\", userId)\n\t\tlogger.SysLogf(\"│   🏢 企业ID: %d\", eid)\n\t\tlogger.SysLogf(\"│   🤖 模型: %s\", req.Model)\n\t\tlogger.SysLogf(\"│   🎯 Token: %d\", usage.TotalTokens)\n\t\tlogger.SysLogf(\"│   💰 配额: %d\", quota)\n\t\tlogger.SysLogf(\"│   ⏱️  耗时: %dms\", helper.CalcElapsedTime(startTime))\n\t\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\t}\n}\n\n// maskAPIKey 遮蔽API密钥的敏感部分\nfunc maskAPIKey(apiKey string) string {\n\tif len(apiKey) <= 8 {\n\t\treturn \"****\"\n\t}\n\treturn apiKey[:4] + \"****\" + apiKey[len(apiKey)-4:]\n}\n\n// truncateString 截断字符串到指定长度\nfunc truncateString(s string, maxLen int) string {\n\tif len(s) <= maxLen {\n\t\treturn s\n\t}\n\treturn s[:maxLen] + \"...\"\n}\n"
  },
  {
    "path": "api/controller/response_handler.go",
    "content": "package controller\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// GetResponseContent 获取响应内容\nfunc GetResponseContent(c *gin.Context, isStream bool, resp *http.Response) (string, string) {\n\tif resp == nil {\n\t\treturn \"\", \"\"\n\t}\n\n\tif !isStream {\n\t\trespBody, err := io.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\tlogger.Errorf(c.Request.Context(), \"read response body failed: %s\", err.Error())\n\t\t\treturn \"\", \"\"\n\t\t}\n\t\t// 重置响应体，以便后续处理\n\t\tresp.Body = io.NopCloser(bytes.NewBuffer(respBody))\n\n\t\t// 尝试解析不同格式的响应内容\n\t\tvar openaiResp struct {\n\t\t\tChoices []struct {\n\t\t\t\tMessage struct {\n\t\t\t\t\tContent string `json:\"content\"`\n\t\t\t\t} `json:\"message\"`\n\t\t\t\tText             string `json:\"text\"`\n\t\t\t\tReasoningContent string `json:\"reasoning_content\"`\n\t\t\t} `json:\"choices\"`\n\t\t\tText             string `json:\"text\"`\n\t\t\tReasoningContent string `json:\"reasoning_content\"`\n\t\t}\n\n\t\tif err := json.Unmarshal(respBody, &openaiResp); err != nil {\n\t\t\tlogger.Errorf(c.Request.Context(), \"unmarshal response failed: %s\", err.Error())\n\t\t\treturn string(respBody), \"\"\n\t\t}\n\n\t\t// 优先检查 message.content (chat completions)\n\t\tif len(openaiResp.Choices) > 0 {\n\t\t\tif openaiResp.Choices[0].Message.Content != \"\" {\n\t\t\t\treturn openaiResp.Choices[0].Message.Content, openaiResp.Choices[0].ReasoningContent\n\t\t\t}\n\t\t\tif openaiResp.Choices[0].Text != \"\" {\n\t\t\t\treturn openaiResp.Choices[0].Text, openaiResp.Choices[0].ReasoningContent\n\t\t\t}\n\t\t\tif openaiResp.Choices[0].ReasoningContent != \"\" {\n\t\t\t\treturn \"\", openaiResp.Choices[0].ReasoningContent\n\t\t\t}\n\t\t}\n\t\tif openaiResp.Text != \"\" {\n\t\t\treturn openaiResp.Text, openaiResp.ReasoningContent\n\t\t}\n\t\tif openaiResp.ReasoningContent != \"\" {\n\t\t\treturn \"\", openaiResp.ReasoningContent\n\t\t}\n\t\treturn string(respBody), \"\"\n\t}\n\n\t// 对于流式响应，从上下文中获取收集器\n\tcollector, exists := c.Get(\"stream_response_collector\")\n\tif exists {\n\t\tif streamCollector, ok := collector.(*StreamResponseCollector); ok {\n\t\t\treturn streamCollector.GetContent()\n\t\t}\n\t}\n\n\treturn \"\", \"\"\n}\n\n// StreamResponseCollector 用于收集流式响应\ntype StreamResponseCollector struct {\n\tcontent          strings.Builder\n\treasoningContent strings.Builder\n}\n\nfunc NewStreamResponseCollector() *StreamResponseCollector {\n\treturn &StreamResponseCollector{\n\t\tcontent:          strings.Builder{},\n\t\treasoningContent: strings.Builder{},\n\t}\n}\n\nfunc (c *StreamResponseCollector) Collect(chunk []byte) {\n\tdata := string(chunk)\n\tlines := strings.Split(data, \"\\n\")\n\n\tfor _, line := range lines {\n\t\tif strings.HasPrefix(line, \"data: \") {\n\t\t\tdataContent := strings.TrimPrefix(line, \"data: \")\n\t\t\tif dataContent == \"[DONE]\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar streamResp struct {\n\t\t\t\tChoices []struct {\n\t\t\t\t\tDelta struct {\n\t\t\t\t\t\tContent          *string `json:\"content\"`\n\t\t\t\t\t\tReasoningContent *string `json:\"reasoning_content\"`\n\t\t\t\t\t} `json:\"delta\"`\n\t\t\t\t} `json:\"choices\"`\n\t\t\t}\n\n\t\t\tif err := json.Unmarshal([]byte(dataContent), &streamResp); err == nil {\n\t\t\t\tif len(streamResp.Choices) > 0 {\n\t\t\t\t\tdelta := streamResp.Choices[0].Delta\n\t\t\t\t\tif delta.Content != nil && *delta.Content != \"\" {\n\t\t\t\t\t\tc.content.WriteString(*delta.Content)\n\t\t\t\t\t}\n\t\t\t\t\tif delta.ReasoningContent != nil && *delta.ReasoningContent != \"\" {\n\t\t\t\t\t\tc.reasoningContent.WriteString(*delta.ReasoningContent)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (c *StreamResponseCollector) GetContent() (string, string) {\n\treturn c.content.String(), c.reasoningContent.String()\n}\n\n// StreamResponseInterceptor 用于拦截和收集流式响应\ntype StreamResponseInterceptor struct {\n\tgin.ResponseWriter\n\tcollector *StreamResponseCollector\n}\n\n// Write 实现 ResponseWriter 接口\nfunc (w *StreamResponseInterceptor) Write(b []byte) (int, error) {\n\t// 收集响应内容\n\tw.collector.Collect(b)\n\t// 同时转发给客户端\n\treturn w.ResponseWriter.Write(b)\n}\n\n// WriteHeader 实现 ResponseWriter 接口\nfunc (w *StreamResponseInterceptor) WriteHeader(statusCode int) {\n\tw.ResponseWriter.WriteHeader(statusCode)\n}\n\n// Flush 实现 Flusher 接口\nfunc (w *StreamResponseInterceptor) Flush() {\n\tif flusher, ok := w.ResponseWriter.(http.Flusher); ok {\n\t\tflusher.Flush()\n\t}\n}\n\n// SetupStreamInterceptor 设置流式响应拦截器\nfunc SetupStreamInterceptor(c *gin.Context) *StreamResponseCollector {\n\tcollector := NewStreamResponseCollector()\n\tc.Set(\"stream_response_collector\", collector)\n\n\t// 创建并设置拦截器\n\tinterceptor := &StreamResponseInterceptor{\n\t\tResponseWriter: c.Writer,\n\t\tcollector:      collector,\n\t}\n\tc.Writer = interceptor\n\n\treturn collector\n}\n"
  },
  {
    "path": "api/controller/setting.go",
    "content": "package controller\n\nimport (\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype SettingRequest struct {\n\tKey   string `json:\"key\" example:\"setting_key\"`\n\tValue string `json:\"value\" example:\"setting_value\"`\n}\n\ntype UpdateDefaultLinksRequest struct {\n\tLinks []LinkItem `json:\"links\"` // 网站配置列表\n}\n\ntype LinkItem struct {\n\tAILink model.AILinkInfo `json:\"ai_link\"` // AI 链接信息\n\tDelete bool             `json:\"delete\" example:\"false\" description:\"Whether to delete this link\"`\n}\n\n// @Summary Create Setting\n// @Description Create new setting entry\n// @Tags Setting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param setting body SettingRequest true \"Setting data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/settings [post]\nfunc CreateSetting(c *gin.Context) {\n\tvar req SettingRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tsetting := model.Setting{\n\t\tEid:   config.GetEID(c),\n\t\tKey:   req.Key,\n\t\tValue: req.Value,\n\t}\n\n\tif err := model.CreateSetting(&setting); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(setting))\n}\n\n// @Summary Get Setting\n// @Description Get setting by ID\n// @Tags Setting\n// @Accept json\n// @Produce json\n// @Param id path int true \"Setting ID\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/settings/{id} [get]\nfunc GetSetting(c *gin.Context) {\n\tid, _ := strconv.Atoi(c.Param(\"id\"))\n\tsetting, err := model.GetSettingByID(int64(id))\n\n\tif err != nil || setting.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(setting))\n}\n\n// @Summary Update Setting\n// @Description Update existing setting\n// @Tags Setting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Setting ID\"\n// @Param setting body SettingRequest true \"Update data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/settings/{id} [put]\nfunc UpdateSetting(c *gin.Context) {\n\tid, _ := strconv.Atoi(c.Param(\"id\"))\n\tsetting, err := model.GetSettingByID(int64(id))\n\n\tif err != nil || setting.Eid != config.GetEID(c) {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar req SettingRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tsetting.Key = req.Key\n\tsetting.Value = req.Value\n\n\tif err := model.UpdateSetting(setting); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(setting))\n}\n\n// @Summary Delete Setting\n// @Description Delete setting by ID\n// @Tags Setting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"Setting ID\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/settings/{id} [delete]\nfunc DeleteSetting(c *gin.Context) {\n\tid, _ := strconv.Atoi(c.Param(\"id\"))\n\tsetting, err := model.GetSettingByID(int64(id))\n\n\tif err == nil && setting.Eid == config.GetEID(c) {\n\t\terr = model.DeleteSettingByID(int64(id))\n\t}\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Get Settings\n// @Description Get all settings for current enterprise\n// @Tags Setting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse\n// @Router /api/settings [get]\nfunc GetSettings(c *gin.Context) {\n\tsettings, err := model.GetSettingsByEid(config.GetEID(c))\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(settings))\n}\n\n// @Summary Get Settings by Group\n// @Description Get settings by group name\n// @Tags Setting\n// @Accept json\n// @Produce json\n// @Param group_name path string true \"Group name (third_party_statistic)\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/settings/group/{group_name} [get]\nfunc GetSettingsByGroup(c *gin.Context) {\n\tgroupName := c.Param(\"group_name\")\n\tsettings, err := model.GetSettingsBySettingsGroup(config.GetEID(c), groupName)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(settings))\n}\n\n// @Summary Get setting by key\n// @Description Retrieve a specific setting by its key\n// @Tags Setting\n// @Produce json\n// @Security BearerAuth\n// @Param key path string true \"Setting key\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/settings/key/{key} [get]\nfunc GetSettingByKey(c *gin.Context) {\n\tkey := c.Param(\"key\")\n\tuser, err := model.GetLoginUser(c)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.UnauthorizedError.ToResponse(err))\n\t\treturn\n\t}\n\tsetting, err := model.GetSettingByEidAndKey(user.Eid, key)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif setting == nil {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(setting))\n}\n\n// @Summary 批量更新默认提示词链接\n// @Description 更新默认提示词链接，支持增删改操作\n// @Tags Setting\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body UpdateDefaultLinksRequest true \"默认提示词链接列表\"\n// @Success 200 {object} model.CommonResponse \"成功\"\n// @Router /api/settings/default_links [post]\nfunc BatchUpdateDefaultPromptLinks(c *gin.Context) {\n\tvar req UpdateDefaultLinksRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// 获取当前设置\n\tsetting, err := model.GetSettingByEidAndKey(eid, string(model.DefaultPromptLinks))\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar links []model.AILink\n\tif setting != nil {\n\t\t// 解析现有的 JSON 数据\n\t\tif err := json.Unmarshal([]byte(setting.Value), &links); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\n\t// 更新链接列表\n\tupdatedLinks := []model.AILinkInfo{}\n\tfor _, linkItem := range req.Links {\n\t\tif linkItem.Delete {\n\t\t\t// 删除操作：跳过删除的链接\n\t\t\tcontinue\n\t\t}\n\t\tupdatedLinks = append(updatedLinks, linkItem.AILink)\n\t}\n\n\t// 保存更新后的数据\n\tlinksJSON, err := json.Marshal(updatedLinks)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif setting == nil {\n\t\t// 如果设置不存在，则创建新设置\n\t\tsetting = &model.Setting{\n\t\t\tEid:   eid,\n\t\t\tKey:   string(model.DefaultPromptLinks),\n\t\t\tValue: string(linksJSON),\n\t\t}\n\t\tif err := model.CreateSetting(setting); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t} else {\n\t\t// 更新现有设置\n\t\tsetting.Value = string(linksJSON)\n\t\tif err := model.UpdateSetting(setting); err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Get Default Prompt Links\n// @Description Retrieve the default website configuration stored in settings\n// @Tags Setting\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=[]model.AILink} \"Default website configuration\"\n// @Router /api/settings/default_links [get]\nfunc GetDefaultPromptLinks(c *gin.Context) {\n\teid := config.GetEID(c)\n\tlinks, err := model.GetDefaultPromptLinks(eid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(links))\n}\n"
  },
  {
    "path": "api/controller/share.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype CreateShareRequest struct {\n\tConversationID int64   `json:\"conversation_id\" binding:\"required\"`\n\tMessageIDs     []int64 `json:\"message_ids\"`\n\tSelectAll      bool    `json:\"select_all\"`\n}\n\ntype CreateShareResponse struct {\n\tShareID string `json:\"share_id\"`\n}\n\n// @Summary Create a share for selected messages\n// @Description Create a share record under a conversation with a set of message IDs (dedup+sorted, idempotent). Returns a UUID share_id.\n// @Tags Share\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param share body CreateShareRequest true \"Share create payload\"\n// @Success 200 {object} model.CommonResponse{data=CreateShareResponse} \"Success\"\n// @Failure 400 {object} model.CommonResponse \"Param error\"\n// @Failure 500 {object} model.CommonResponse \"DB error\"\n// @Router /api/shares [post]\n// POST /api/shares\nfunc CreateShare(c *gin.Context) {\n\tvar req CreateShareRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\tif req.ConversationID <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"invalid conversation_id\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// 构造用于分享的消息ID集合（支持全选）\n\tvar idsForShare []int64\n\tif req.SelectAll {\n\t\tids, err := model.ListMessageIDsByConversation(eid, req.ConversationID)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t\tif len(ids) == 0 {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"no messages to share\"))\n\t\t\treturn\n\t\t}\n\t\tidsForShare = ids\n\t} else {\n\t\tif len(req.MessageIDs) == 0 {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"empty message_ids\"))\n\t\t\treturn\n\t\t}\n\t\tidsForShare = req.MessageIDs\n\t}\n\t// 生成 normalized_key（内部已去重+升序）\n\tnkey, normalizedIDs := model.NormalizeMessageIDs(idsForShare)\n\tif nkey == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"normalized_key empty after dedup\"))\n\t\treturn\n\t}\n\n\t// 校验所有消息属于同一 eid+conversation_id\n\tif err := model.ValidateMessagesBelongToConversation(eid, req.ConversationID, normalizedIDs); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tshareID, _, err := model.CreateShareRecord(eid, req.ConversationID, nkey)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&CreateShareResponse{ShareID: shareID}))\n}\n\n// GET /api/shares/:share_id\ntype GetShareResponse struct {\n\tConversation struct {\n\t\tID          int64  `json:\"id\"`\n\t\tTitle       string `json:\"title\"`\n\t\tCreatedTime int64  `json:\"created_time\"`\n\t} `json:\"conversation\"`\n\tUser struct {\n\t\tNickname string `json:\"nickname\"`\n\t\tAvatar   string `json:\"avatar\"`\n\t} `json:\"user\"`\n\tAgent struct {\n\t\tAgentId     int64  `json:\"agent_id\"`\n\t\tName        string `json:\"name\"`\n\t\tLogo        string `json:\"logo\"`\n\t\tModel       string `json:\"model\"`\n\t\tDescription string `json:\"description\"`\n\t} `json:\"agent\"`\n\tMessages []*EnhancedMessage `json:\"messages\"`\n}\n\n// @Summary Get share content (public)\n// @Description Get shared conversation details and messages by share_id. Anonymous access allowed.\n// @Tags Share\n// @Produce json\n// @Param share_id path string true \"Share ID (UUID)\"\n// @Success 200 {object} model.CommonResponse{data=GetShareResponse} \"Success\"\n// @Failure 404 {object} model.CommonResponse \"Not found\"\n// @Failure 400 {object} model.CommonResponse \"Param error\"\n// @Failure 500 {object} model.CommonResponse \"DB error\"\n// @Router /api/shares/{share_id} [get]\nfunc GetShare(c *gin.Context) {\n\tshareID := c.Param(\"share_id\")\n\tshareID = strings.TrimSpace(shareID)\n\tif shareID == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"empty share_id\"))\n\t\treturn\n\t}\n\n\trec, err := model.GetShareRecordByShareID(shareID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(\"分享不存在\"))\n\t\treturn\n\t}\n\n\t// 加载会话\n\tconv, err := model.AdminGetConversationByID(rec.Eid, rec.ConversationID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(\"分享不存在\"))\n\t\treturn\n\t}\n\t// 加载用户与智能体\n\tif err := conv.LoadUser(); err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(\"分享不存在\"))\n\t\treturn\n\t}\n\tif err := conv.LoadAgent(); err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(\"分享不存在\"))\n\t\treturn\n\t}\n\n\tif !conv.Agent.Enable {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(\"分享不存在\"))\n\t}\n\n\t// 解析 normalized_key 为 ids\n\tids, err := model.ParseMessageIDsToIDs(rec.MessageIDs)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 读取消息并升序排序\n\tmsgs, err := model.GetMessagesByIDsOrderedAsc(rec.Eid, ids)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tresp := &GetShareResponse{}\n\tresp.Conversation.ID = conv.ConversationID\n\tresp.Conversation.Title = conv.Title\n\tresp.Conversation.CreatedTime = conv.CreatedTime\n\tresp.User.Nickname = conv.User.Nickname\n\tresp.User.Avatar = conv.User.Avatar\n\tresp.Agent.AgentId = conv.Agent.AgentID\n\tresp.Agent.Name = conv.Agent.Name\n\tresp.Agent.Logo = conv.Agent.Logo\n\tresp.Agent.Model = conv.Agent.Model\n\tresp.Agent.Description = conv.Agent.Description\n\tresp.Messages = convertToEnhancedMessages(msgs)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(resp))\n}\n"
  },
  {
    "path": "api/controller/status.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype HealthData struct {\n\tVersion   string `json:\"version\"`\n\tStartTime string `json:\"start_time\"`\n}\n\n// HealthCheck HealthCheck\n// @Summary HealthCheck\n// @Description HealthCheck\n// @Tags System\n// @Produce json\n// @Success 200 {object} model.CommonResponse{data=HealthData} \"Success response\"\n// @Router /heath [get]\nfunc HealthCheck(c *gin.Context) {\n\tc.JSON(http.StatusOK, model.Success.ToResponse(HealthData{\n\t\tVersion:   config.Version + \".\" + config.VersionTime + \"-\" + config.Server,\n\t\tStartTime: config.StartTime,\n\t}))\n}\n\ntype CodeInfo struct {\n\tCode        int    `json:\"code\"`\n\tDescription string `json:\"description\"`\n}\n\n// GetAllResponseCodes Get all response codes and their descriptions\n// @Summary Get all response codes\n// @Description Returns all defined response codes and their descriptions in the system\n// @Tags System\n// @Produce json\n// @Success 200 {object} []CodeInfo \"Success response\"\n// @Router /api/response_codes [get]\nfunc GetAllResponseCodes(c *gin.Context) {\n\tcodes := make([]CodeInfo, 0, len(model.CodeMessage))\n\n\tfor code, description := range model.CodeMessage {\n\t\tcodes = append(codes, CodeInfo{\n\t\t\tCode:        int(code),\n\t\t\tDescription: description,\n\t\t})\n\t}\n\n\tc.JSON(http.StatusOK, codes)\n}\n"
  },
  {
    "path": "api/controller/subscription.go",
    "content": "package controller\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/utils\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// BatchSubscriptionRelation defines the subscription relation request structure\n// BatchSubscriptionRelation represents a subscription relation in batch operations\n// @Description Contains pricing and duration information for a subscription plan\ntype BatchSubscriptionRelation struct {\n\t// @Description Unique identifier for the subscription relation, 0 for new relation\n\t// @Example 1\n\tRelationId int64 `json:\"relation_id\" example:\"1\" description:\"Relation ID\"`\n\t// @Description Amount in cents/pennies for the subscription\n\t// @Example 9900\n\tAmount int64 `json:\"amount\" example:\"1000\" description:\"Amount in cents/pennies\"`\n\t// @Description Currency type for the subscription amount\n\t// @Enum CNY,USD\n\t// @Example CNY\n\tCurrency string `json:\"currency\" example:\"CNY\" description:\"Currency type: CNY/USD\"`\n\t// @Description Time unit for subscription duration\n\t// @Enum year,month,week,day,quarter\n\t// @Example month\n\tTimeUnit string `json:\"time_unit\" example:\"month\" description:\"Time unit: year/month/week/day/quarter\"`\n\t// @Description Type of subscription\n\t// @Enum 1,2\n\t// @Example 1\n\t// @Description 1=Fee subscription, 2=Points subscription\n\tType uint `json:\"type\" example:\"1\" description:\"Subscription type: 1=Fee/2=Points\"`\n}\n\n// BatchSubscriptionItem defines the subscription item request structure\n// BatchSubscriptionItem represents a subscription item in batch operations\n// @Description Contains group and subscription settings information for batch operations\ntype BatchSubscriptionItem struct {\n\t// @Description Group identifier, use 0 to create new group\n\t// @Example 1\n\tGroupId int64 `json:\"group_id\" example:\"1\" description:\"Group ID, 0 for new group\"`\n\t// @Description Name of the subscription group\n\t// @Example Premium Subscription\n\tGroupName string `json:\"group_name\" example:\"VIP Group\" description:\"Group name\"`\n\t// @Description Display order for the group\n\t// @Example 100\n\tSort int64 `json:\"sort\" example:\"1\" description:\"Sort order for display\"`\n\t// @Description Setting identifier, use 0 to create new setting\n\t// @Example 1\n\tSettingId int64 `json:\"setting_id\" example:\"1\" description:\"Setting ID, 0 for new setting\"`\n\t// @Description URL for the subscription logo image\n\t// @Example https://example.com/subscription-logo.png\n\tLogoUrl string `json:\"logo_url\" example:\"http://example.com/logo.png\" description:\"Logo URL\"`\n\t// @Description Whether AI features are enabled for this subscription\n\t// @Example true\n\tAiEnabled bool `json:\"ai_enabled\" example:\"true\" description:\"Whether AI features are enabled\"`\n\t// @Description Whether to delete this subscription item\n\t// @Example false\n\tDelete bool `json:\"delete\" example:\"false\" description:\"Whether to delete this item\"`\n\t// @Description Target group ID for user migration during deletion\n\t// @Example 2\n\tTargetGroupId int64 `json:\"target_group_id\" example:\"2\" description:\"Target group ID for user migration\"`\n\t// @Description List of subscription relations for this item\n\tRelations []BatchSubscriptionRelation `json:\"relations\" description:\"List of subscription relations\"`\n}\n\n// BatchSubscriptionRequest defines the batch operation request structure\n// BatchSubscriptionRequest represents the request structure for batch operations\n// @Description Request structure for batch creating, updating or deleting subscription settings\ntype BatchSubscriptionRequest struct {\n\t// @Description List of subscription items to process\n\tItems []BatchSubscriptionItem `json:\"items\" description:\"List of subscription items\"`\n}\n\n// GetSubscriptionSettingsRequest defines the query request structure\ntype GetSubscriptionSettingsRequest struct {\n\tOffset int `form:\"offset\" json:\"offset\" example:\"0\" description:\"Pagination offset\"`\n\tLimit  int `form:\"limit\" json:\"limit\" example:\"10\" description:\"Pagination limit\"`\n}\n\n// SubscriptionSettingsResponse defines the query response structure\ntype SubscriptionSettingsResponse struct {\n\tCount    int64                                 `json:\"count\" description:\"Total number of records\"`\n\tSettings []model.SubscriptionSettingWithAgents `json:\"settings\" description:\"List of subscription settings with agents\"`\n}\n\n// @Summary Batch operation for subscription settings\n// @Description Batch create, update or delete subscription settings\n// @Tags Subscription\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body BatchSubscriptionRequest true \"Batch operation request\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/subscriptions/batch [post]\nfunc BatchSubscriptionOperation(c *gin.Context) {\n\tvar req BatchSubscriptionRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Start transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\t// 添加循环依赖检查逻辑\n\tdependencyMap := make(map[int64]int64) // 用于记录 GroupId -> TargetGroupId 的映射\n\tfor _, item := range req.Items {\n\t\tif item.Delete && item.GroupId > 0 && item.TargetGroupId > 0 {\n\t\t\tdependencyMap[item.GroupId] = item.TargetGroupId\n\t\t}\n\t}\n\n\t// 检测循环依赖\n\tfor groupId := range dependencyMap {\n\t\tvisited := make(map[int64]bool) // 用于记录访问过的节点\n\t\tcurrent := groupId\n\n\t\tfor {\n\t\t\tif visited[current] {\n\t\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(fmt.Errorf(\"检测到用户迁移循环，group_id=%d 存在循环\", groupId)))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tvisited[current] = true\n\n\t\t\t// 检查是否有下一个目标\n\t\t\tnext, exists := dependencyMap[current]\n\t\t\tif !exists {\n\t\t\t\tbreak // 如果没有下一个目标，说明没有循环\n\t\t\t}\n\n\t\t\tcurrent = next\n\t\t}\n\t}\n\n\teid := config.GetEID(c)\n\tuserId := config.GetUserId(c)\n\n\tvar isUpdate bool\n\tfor _, item := range req.Items {\n\t\t// 检查是否为默认订阅\n\t\tvar setting model.SubscriptionSetting\n\t\tif err := tx.Where(\"setting_id = ?\", item.SettingId).First(&setting).Error; err == nil && setting.IsDefault {\n\t\t\tif item.Delete {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(fmt.Errorf(\"默认订阅不可删除\")))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// 如果是默认订阅，检查是否设置了价格\n\t\t\tfor _, relation := range item.Relations {\n\t\t\t\t// 让默认订阅可以设置积分\n\t\t\t\tif relation.Amount > 0 && relation.Type != 2 {\n\t\t\t\t\ttx.Rollback()\n\t\t\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(fmt.Errorf(\"默认订阅不能设置价格\")))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Delete operation\n\t\tif item.Delete {\n\t\t\tif item.GroupId > 0 {\n\t\t\t\t// 检查是否传入目标订阅\n\t\t\t\tif item.TargetGroupId == 0 {\n\t\t\t\t\ttx.Rollback()\n\t\t\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(fmt.Errorf(\"请为 group_id=%d 指定目标订阅\", item.GroupId)))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// 检查目标订阅是否存在\n\t\t\t\tvar targetSetting model.SubscriptionSetting\n\t\t\t\tif err := tx.Where(\"group_id = ?\", item.TargetGroupId).First(&targetSetting).Error; err != nil {\n\t\t\t\t\ttx.Rollback()\n\t\t\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(fmt.Errorf(\"目标订阅 group_id=%d 不存在\", item.TargetGroupId)))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// 将用户迁移到目标订阅\n\t\t\t\tif err := tx.Model(&model.User{}).Where(\"group_id = ?\", item.GroupId).Update(\"group_id\", item.TargetGroupId).Error; err != nil {\n\t\t\t\t\ttx.Rollback()\n\t\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// Delete relations\n\t\t\t\tif err := tx.Where(\"setting_id = ?\", item.SettingId).Delete(&model.SubscriptionRelation{}).Error; err != nil {\n\t\t\t\t\ttx.Rollback()\n\t\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// Delete settings\n\t\t\t\tif err := tx.Where(\"setting_id = ?\", item.SettingId).Delete(&model.SubscriptionSetting{}).Error; err != nil {\n\t\t\t\t\ttx.Rollback()\n\t\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// Delete group\n\t\t\t\tif err := tx.Where(\"group_id = ?\", item.GroupId).Delete(&model.Group{}).Error; err != nil {\n\t\t\t\t\ttx.Rollback()\n\t\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\tisUpdate = true\n\t\t\tcontinue\n\t\t}\n\n\t\t// Create or update group\n\t\tvar groupId int64 = item.GroupId\n\t\tif groupId == 0 {\n\t\t\t// Create new group\n\t\t\tgroup := model.Group{\n\t\t\t\tEid:       eid,\n\t\t\t\tCreatedBy: userId,\n\t\t\t\tGroupName: item.GroupName,\n\t\t\t\tGroupType: model.USER_GROUP_TYPE, // Fixed as 1\n\t\t\t\tSort:      item.Sort,\n\t\t\t}\n\n\t\t\tif err := tx.Create(&group).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tgroupId = group.GroupId\n\t\t\tisUpdate = true\n\t\t} else {\n\t\t\t// Update existing group\n\t\t\tgroup := model.Group{\n\t\t\t\tGroupName: item.GroupName,\n\t\t\t\tSort:      item.Sort,\n\t\t\t}\n\t\t\tif err := tx.Model(&model.Group{}).Where(\"group_id =?\", groupId).Updates(group).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tisUpdate = true\n\t\t}\n\n\t\t// Create or update subscription settings\n\n\t\tif item.SettingId > 0 {\n\t\t\t// Update existing settings\n\t\t\tif err := tx.Where(\"setting_id = ?\", item.SettingId).First(&setting).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tsetting.GroupId = groupId\n\t\t\tsetting.LogoUrl = item.LogoUrl\n\t\t\tsetting.AiEnabled = item.AiEnabled\n\n\t\t\tif err := tx.Save(&setting).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tisUpdate = true\n\t\t} else {\n\t\t\t// Create new settings\n\t\t\tsetting = model.SubscriptionSetting{\n\t\t\t\tGroupId:   groupId,\n\t\t\t\tLogoUrl:   item.LogoUrl,\n\t\t\t\tAiEnabled: item.AiEnabled,\n\t\t\t}\n\n\t\t\tif err := tx.Create(&setting).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tisUpdate = true\n\t\t}\n\n\t\t// Delete old relations\n\t\tif err := tx.Where(\"setting_id = ?\", setting.SettingId).Delete(&model.SubscriptionRelation{}).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\n\t\t// Create new relations\n\t\tfor _, relationItem := range item.Relations {\n\t\t\trelation := model.SubscriptionRelation{\n\t\t\t\tSettingId: setting.SettingId,\n\t\t\t\tAmount:    relationItem.Amount,\n\t\t\t\tCurrency:  relationItem.Currency,\n\t\t\t\tTimeUnit:  relationItem.TimeUnit,\n\t\t\t\tType:      relationItem.Type,\n\t\t\t}\n\n\t\t\tif err := tx.Create(&relation).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tisUpdate = true\n\t\t}\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif isUpdate {\n\t\tlog := model.SystemLog{\n\t\t\tEid:      eid,\n\t\t\tUserID:   userId,\n\t\t\tNickname: config.GetUserNickname(c),\n\t\t\tModule:   model.SystemLogModuleSubscription,\n\t\t\tAction:   model.SystemLogActionUpdate,\n\t\t\tContent:  fmt.Sprint(\"编辑了订阅版本\"),\n\t\t\tIP:       utils.GetClientIP(c),\n\t\t}\n\t\tmodel.CreateSystemLog(&log)\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// @Summary Get subscription settings list\n// @Description Get all subscription settings with their groups, agents and relations\n// @Tags Subscription\n// @Accept json\n// @Produce json\n// @Param offset query int false \"Offset for pagination\" example:\"0\"\n// @Param limit query int false \"Limit for pagination\" example:\"10\"\n// @Success 200 {object} model.CommonResponse{data=SubscriptionSettingsResponse} \"Success\"\n// @Router /api/subscriptions/settings [get]\nfunc GetSubscriptionList(c *gin.Context) {\n\tvar req GetSubscriptionSettingsRequest\n\tif err := c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\toffset := req.Offset\n\tlimit := req.Limit\n\tif limit <= 0 {\n\t\tlimit = 10\n\t}\n\teid := config.GetEID(c)\n\tuser, err := model.GetLoginUser(c)\n\tif err == nil {\n\t\teid = user.Eid\n\t}\n\tsettings, count, err := model.GetSubscriptionSettingsWithAgents(eid, offset, limit)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tfor _, setting := range settings {\n\t\tif !strings.Contains(setting.Setting.LogoUrl, \"//img.ibos.cn\") {\n\t\t\tlogoUrl := setting.Setting.LogoUrl\n\t\t\tif strings.Contains(setting.Setting.LogoUrl, \"://\") {\n\t\t\t\tlogoUrl = strings.TrimPrefix(setting.Setting.LogoUrl, \"http://\")\n\t\t\t\tlogoUrl = strings.TrimPrefix(logoUrl, \"https://\")\n\t\t\t\tlogoUrl = strings.SplitN(logoUrl, \"/\", 2)[1]\n\t\t\t}\n\t\t\tif !strings.HasPrefix(logoUrl, \"/\") {\n\t\t\t\tlogoUrl = \"/\" + logoUrl\n\t\t\t}\n\t\t\tsetting.Setting.LogoUrl = config.GetProtocol(c) + \"://\" + config.GetDomain(c) + logoUrl\n\t\t}\n\t}\n\n\tresponse := SubscriptionSettingsResponse{\n\t\tCount:    count,\n\t\tSettings: settings,\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(response))\n}\n"
  },
  {
    "path": "api/controller/sync_organization.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// SyncOrganization 处理组织同步请求（开源版本）\n// @Summary Sync organization structure\n// @Description Synchronize enterprise organization structure based on source\n// @Tags Department\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param from path int true \"Source identifier (1=WeCom, 2=DingTalk)\"\n// @Param body body interface{} true \"Sync parameters\"\n// @Success 200 {object} model.CommonResponse \"Operation succeeded\"\n// @Failure 400 {object} model.CommonResponse \"Parameter error\"\n// @Failure 500 {object} model.CommonResponse \"Server error\"\n// @Router /api/departments/sync/{from} [post]\nfunc SyncOrganization(c *gin.Context) {\n\t// 开源版本不支持组织同步功能\n\tc.JSON(http.StatusForbidden, model.ForbiddenError.ToResponse(\"organization sync feature not available in oss version\"))\n}\n\n// GetSyncProgress 获取同步进度（开源版本）\n// @Summary Get sync progress\n// @Description Get synchronization progress\n// @Tags Synchronization\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param from path int true \"Source: 1=WeCom, 2=DingTalk\"\n// @Success 200 {object} model.CommonResponse{data=interface{}} \"Operation succeeded\"\n// @Failure 400 {object} model.CommonResponse \"Parameter error\"\n// @Failure 404 {object} model.CommonResponse \"Enterprise not found\"\n// @Router /api/sync-progress/{from} [get]\nfunc GetSyncProgress(c *gin.Context) {\n\t// 开源版本不支持组织同步功能\n\tc.JSON(http.StatusForbidden, model.ForbiddenError.ToResponse(\"organization sync feature not available in oss version\"))\n}\n\n// GetAllSyncProgress 获取所有同步进度（开源版本）\n// @Summary Get all sync progress\n// @Description Get all synchronization progress\n// @Tags SyncProgress\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=map[string]interface{}} \"Operation succeeded\"\n// @Router /api/sync-progress [get]\nfunc GetAllSyncProgress(c *gin.Context) {\n\t// 开源版本不支持组织同步功能\n\tc.JSON(http.StatusForbidden, model.ForbiddenError.ToResponse(\"organization sync feature not available in oss version\"))\n}\n\n// GetSyncProgressByFrom 根据来源获取同步进度（开源版本）\n// @Summary Get sync progress by source\n// @Description Get synchronization progress by source type\n// @Tags SyncProgress\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param from path int true \"Source identifier (1=WeCom, 2=DingTalk)\"\n// @Success 200 {object} model.CommonResponse{data=map[int64]interface{}} \"Operation succeeded\"\n// @Failure 400 {object} model.CommonResponse \"Parameter error\"\n// @Router /api/sync-progress/{from}/all [get]\nfunc GetSyncProgressByFrom(c *gin.Context) {\n\t// 开源版本不支持组织同步功能\n\tc.JSON(http.StatusForbidden, model.ForbiddenError.ToResponse(\"organization sync feature not available in oss version\"))\n}\n"
  },
  {
    "path": "api/controller/system_log.go",
    "content": "package controller\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/53AI/53AIHub/common/utils\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// @Summary 获取所有系统日志模块定义\n// @Description 返回模块值与描述的映射列表（风格对齐ai_link控制器）\n// @Tags SystemLog\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=[]model.ModuleItem} \"成功返回模块列表\"\n// @Router /api/system_logs/modules [get]\nfunc GetModules(c *gin.Context) {\n\t// 无参数绑定，直接调用模型方法\n\tmodules := model.GetAllModules()\n\tc.JSON(http.StatusOK, model.Success.ToResponse(modules))\n}\n\n// @Summary 获取所有系统日志动作定义\n// @Description 返回动作值与描述的映射列表（风格对齐ai_link控制器）\n// @Tags SystemLog\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=[]model.ActionItem} \"成功返回动作列表\"\n// @Router /api/system_logs/actions [get]\nfunc GetActions(c *gin.Context) {\n\t// 无参数绑定，直接调用模型方法\n\tactions := model.GetAllActions()\n\tc.JSON(http.StatusOK, model.Success.ToResponse(actions))\n}\n\ntype CreateLogRequest struct {\n\tAction  uint8  `json:\"action\" binding:\"required\"`\n\tContent string `json:\"content\" binding:\"required\"`\n}\n\n// GetSystemLogsRequest 请求参数结构体\ntype GetSystemLogsRequest struct {\n\tOffset    int   `form:\"offset\" default:\"0\"`\n\tLimit     int   `form:\"limit\" default:\"10\"`\n\tStartTime int64 `form:\"start_time\"`\n\tEndTime   int64 `form:\"end_time\"`\n\tModule    int64 `form:\"module\"`\n\tAction    int64 `form:\"action\"`\n\tUserID    int64 `form:\"user_id\"`\n}\n\ntype SystemLogsResponse struct {\n\tCount      int64              `json:\"count\"`\n\tSystemLogs []*model.SystemLog `json:\"system_logs\"`\n}\n\n// @Summary 获取当前站点系统日志\n// @Description 根据eid、时间范围、分页及筛选条件获取系统日志\n// @Tags SystemLog\n// @Accept json\n// @Produce json\n// @Param offset query int false \"offset\" default(0)\n// @Param limit query int false \"每页数量\" default(10)\n// @Param start_time query int64 false \"开始时间（毫秒时间戳）\"\n// @Param end_time query int64 false \"结束时间（毫秒时间戳）\"\n// @Param module query string false \"模块筛选（可选）\"\n// @Param action query string false \"操作类型筛选（可选）\"\n// @Param user_id query int64 false \"用户ID筛选（可选）\"\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=SystemLogsResponse{}} \"成功返回日志列表\"\n// @Failure 400 {object} model.CommonResponse \"参数验证失败\"\n// @Failure 500 {object} model.CommonResponse \"数据库操作失败\"\n// @Router /api/system_logs [get]\nfunc GetSystemLogs(c *gin.Context) {\n\tvar req GetSystemLogsRequest\n\tif err := c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tlogs, total, err := model.GetSystemLogsByConditions(\n\t\teid,\n\t\treq.Module,\n\t\treq.Action,\n\t\treq.UserID,\n\t\treq.StartTime,\n\t\treq.EndTime,\n\t\treq.Offset,\n\t\treq.Limit,\n\t)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(SystemLogsResponse{\n\t\tCount:      total,\n\t\tSystemLogs: logs,\n\t}))\n}\n\n// @Summary 创建系统日志\n// @Description 根据用户ID和请求参数创建系统日志记录\n// @Tags SystemLog\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param data body CreateLogRequest true \"日志请求参数\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/users/system_log [post]\nfunc CreateSystemLogs(c *gin.Context) {\n\tuserID := config.GetUserId(c)\n\tif userID == 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tvar req CreateLogRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tuser, err := model.GetUserByID(userID)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\tip := utils.GetClientIP(c)\n\n\tlog := model.SystemLog{\n\t\tEid:      eid,\n\t\tUserID:   userID,\n\t\tNickname: user.Nickname,\n\t\tModule:   model.SystemLogModuleSystem,\n\t\tAction:   req.Action,\n\t\tContent:  req.Content,\n\t\tIP:       ip,\n\t}\n\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n"
  },
  {
    "path": "api/controller/tencent.go",
    "content": "package controller\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\ttencent_sdk \"github.com/53AI/53AIHub/service/hub_adaptor/tencent/sdk\"\n\t\"github.com/gin-gonic/gin\"\n\ttcommon \"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common\"\n\t\"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile\"\n)\n\n// GetTencentAllApps Get all Tencent apps\n// @Summary Get all Tencent apps\n// @Description Get all Tencent apps list under current enterprise\n// @Tags Tencent\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param provider_id query int false \"Provider ID (optional, for backward compatibility)\"\n// @Success 200 {object} model.CommonResponse{data=[]tencent_sdk.AppInfo}\n// @Router /api/tencent/apps [get]\nfunc GetTencentAllApps(c *gin.Context) {\n\teid := config.GetEID(c)\n\tproviderID, _ := strconv.ParseInt(c.DefaultQuery(\"provider_id\", \"0\"), 10, 64)\n\tprovider, err := model.GetProviderByEidAndProviderTypeWithOptionalID(eid, int64(model.ProviderTypeTencent), providerID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 从Configs中解析secretId, secretKey, region\n\tsecretId, secretKey, region, err := parseTencentCredentials(provider.Configs)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 初始化腾讯云客户端\n\tclient, err := initTencentClient(secretId, secretKey, region)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 循环调用ListApp接口获取所有应用列表\n\tvar allApps []*tencent_sdk.AppInfo\n\tpageSize := uint64(100)\n\tpageNumber := uint64(1)\n\n\tfor {\n\t\trequest := tencent_sdk.NewListAppRequest()\n\t\trequest.PageSize = tcommon.Uint64Ptr(pageSize)\n\t\trequest.PageNumber = tcommon.Uint64Ptr(pageNumber)\n\t\trequest.AppStatus = tcommon.StringPtr(\"2\") // 只获取运行中的\n\n\t\tresponse, err := client.ListApp(request)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\n\t\t// 添加当前页的应用到总列表\n\t\tallApps = append(allApps, response.Response.List...)\n\n\t\t// 检查是否还有更多页面\n\t\ttotal, _ := strconv.ParseUint(*response.Response.Total, 10, 64)\n\t\tif uint64(len(allApps)) >= total {\n\t\t\tbreak\n\t\t}\n\n\t\tpageNumber++\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(allApps))\n}\n\n// GetTencentAppDetail Get Tencent app detail\n// @Summary Get Tencent app detail\n// @Description Get Tencent app detail by app ID\n// @Tags Tencent\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param app_id path string true \"App ID\"\n// @Param provider_id query int false \"Provider ID (optional, for backward compatibility)\"\n// @Success 200 {object} model.CommonResponse{data=tencent_sdk.DescribeAppResponseParams}\n// @Router /api/tencent/apps/{app_id} [get]\nfunc GetTencentAppDetail(c *gin.Context) {\n\tappID := c.Param(\"app_id\")\n\tif appID == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tproviderID, _ := strconv.ParseInt(c.DefaultQuery(\"provider_id\", \"0\"), 10, 64)\n\tprovider, err := model.GetProviderByEidAndProviderTypeWithOptionalID(eid, int64(model.ProviderTypeTencent), providerID)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 从Configs中解析secretId, secretKey, region\n\tsecretId, secretKey, region, err := parseTencentCredentials(provider.Configs)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 初始化腾讯云客户端\n\tclient, err := initTencentClient(secretId, secretKey, region)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 调用DescribeApp接口获取应用详情\n\trequest := tencent_sdk.NewDescribeAppRequest()\n\trequest.AppBizId = &appID\n\tresponse, err := client.DescribeApp(request)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\t// 同步更新或创建Channel\n\terr = UpdateTencentChannel(client, provider, response.Response)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ProviderNoFoundError.ToResponse(err))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(response.Response))\n}\n\nfunc UpdateTencentChannel(client *tencent_sdk.Client, provider model.Provider, response *tencent_sdk.DescribeAppResponseParams) error {\n\t// 检查response和AppBizId是否为nil\n\tif response == nil || response.AppBizId == nil {\n\t\terr := fmt.Errorf(\"received nil response or AppBizId from Tencent API\")\n\t\tlogger.SysError(\"Failed to get valid response from Tencent API: \" + err.Error())\n\t\treturn err\n\t}\n\n\tmodelName := \"bot-\" + *response.AppBizId\n\tvar channel *model.Channel\n\terr := model.DB.Where(\"eid = ? and provider_id = ? and models = ?\", provider.Eid, provider.ProviderID, modelName).First(&channel).Error\n\tif err != nil || channel == nil {\n\t\t// 创建新的Channel\n\t\tchannel = &model.Channel{\n\t\t\tEid:        provider.Eid,\n\t\t\tProviderID: provider.ProviderID,\n\t\t\tType:       model.ChannelApiTypeTencent,\n\t\t\tModels:     modelName,\n\t\t\tName:       modelName,\n\t\t\tBaseURL:    provider.BaseURL,\n\t\t\tStatus:     model.ChannelStatusEnabled,\n\t\t}\n\t}\n\t// 获取token 更新并保存\n\trequest := tencent_sdk.NewGetAppSecretRequest()\n\trequest.AppBizId = response.AppBizId\n\tsecretResponse, err := client.GetAppSecret(request)\n\tif err != nil {\n\t\tlogger.SysError(\"Failed to get Tencent app secret: \" + err.Error())\n\t\treturn err\n\t}\n\n\t// 检查AppKey是否为nil\n\tif secretResponse.Response == nil || secretResponse.Response.AppKey == nil {\n\t\terr := fmt.Errorf(\"received nil AppKey from Tencent API\")\n\t\tlogger.SysError(\"Failed to get valid AppKey from Tencent response: \" + err.Error())\n\t\treturn err\n\t}\n\n\tchannel.Key = *secretResponse.Response.AppKey\n\n\t// 更新Channel\n\terr = model.DB.Save(channel).Error\n\tif err != nil {\n\t\tlogger.SysError(\"Failed to save Tencent channel: \" + err.Error())\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// parseTencentCredentials 从Configs中解析腾讯云凭证信息\nfunc parseTencentCredentials(configs string) (secretId, secretKey, region string, err error) {\n\t// 定义腾讯云配置结构\n\ttype TencentConfig struct {\n\t\tSecretID  string `json:\"secret_id\"`\n\t\tSecretKey string `json:\"secret_key\"`\n\t\tRegion    string `json:\"region\"`\n\t}\n\n\tvar config TencentConfig\n\tif err = json.Unmarshal([]byte(configs), &config); err != nil {\n\t\t// 如果JSON解析失败，尝试使用旧的AccessToken格式作为备选方案\n\t\tparts := strings.Split(configs, \":\")\n\t\tif len(parts) != 3 {\n\t\t\terr = fmt.Errorf(\"invalid tencent config format, expected JSON with 'secret_id', 'secret_key', and 'region' fields\")\n\t\t\treturn\n\t\t}\n\t\tsecretId = parts[0]\n\t\tsecretKey = parts[1]\n\t\tregion = parts[2]\n\t\treturn\n\t}\n\n\t// 检查必要字段\n\tif config.SecretID == \"\" || config.SecretKey == \"\" || config.Region == \"\" {\n\t\terr = fmt.Errorf(\"tencent config missing required fields: secret_id, secret_key, or region\")\n\t\treturn\n\t}\n\n\tsecretId = config.SecretID\n\tsecretKey = config.SecretKey\n\tregion = config.Region\n\treturn\n}\n\n// initTencentClient 初始化腾讯云客户端\nfunc initTencentClient(secretId, secretKey, region string) (*tencent_sdk.Client, error) {\n\tcredential := tcommon.NewCredential(secretId, secretKey)\n\tcpf := profile.NewClientProfile()\n\tclient, err := tencent_sdk.NewClient(credential, region, cpf)\n\tif err != nil {\n\t\tlogger.SysError(\"Failed to initialize Tencent client: \" + err.Error())\n\t\treturn nil, err\n\t}\n\treturn client, nil\n}\n"
  },
  {
    "path": "api/controller/upload.go",
    "content": "package controller\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"path\"\n\n\t\"github.com/53AI/53AIHub/common/storage\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// Upload\n// @Summary      Upload a file\n// @Description  Upload a file\n// @Tags         Upload\n// @Accept       mpfd\n// @Produce      json\n// @Param        file  formData  file  true  \"file\"\n// @Success      200  {object}  model.CommonResponse{data=model.UploadFile}  \"success\"\n// @Router       /api/upload [post]\nfunc Upload(c *gin.Context) {\n\t// upload file\n\tfileHeader, err := c.FormFile(\"file\")\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\tif fileHeader.Size > config.MAX_UPLOAD_FILE_SIZE {\n\t\tc.JSON(http.StatusBadRequest, model.FileError.ToResponse(errors.New(\"The maximum allowed size for file uploads is \"+config.MAX_UPLOAD_FILE_SIZE_STRING+\".\")))\n\t\treturn\n\t}\n\n\tvar eid, user_id int64\n\tuser, err := model.GetLoginUser(c)\n\tif err == nil {\n\t\teid = user.Eid\n\t\tuser_id = user.UserID\n\t} else {\n\t\t// 兼容用户首次没有登录，又要上传的处理\n\t\teid = 1\n\t\tuser_id = 1\n\t}\n\n\tif eid == 0 || user_id == 0 {\n\t\tc.JSON(http.StatusBadRequest, model.AuthFailed.ToResponse(nil))\n\t\treturn\n\t}\n\tfile, err := fileHeader.Open()\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.FileError.ToResponse(err))\n\t\treturn\n\t}\n\tdefer file.Close()\n\n\t// 先读取文件内容\n\tfileContent, err := io.ReadAll(file)\n\tif err != nil && err != io.EOF {\n\t\tc.JSON(http.StatusBadRequest, model.FileError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 计算哈希前重置文件指针\n\tif _, err := file.Seek(0, 0); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.FileError.ToResponse(err))\n\t\treturn\n\t}\n\thashStr, err := storage.GetFileHash(file)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.FileError.ToResponse(err))\n\t\treturn\n\t}\n\n\textension := path.Ext(fileHeader.Filename)\n\tPreviewKey, err := model.GetPreviewKey(hashStr, extension)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.FileError.ToResponse(err))\n\t\treturn\n\t}\n\n\tkey := model.GetFileKey(PreviewKey, eid, user_id)\n\terr = storage.StorageInstance.Save(fileContent, key)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.FileError.ToResponse(err))\n\t\treturn\n\t}\n\n\tuploadFile := &model.UploadFile{\n\t\tFileName:   fileHeader.Filename,\n\t\tKey:        key,\n\t\tEid:        eid,\n\t\tUserID:     user_id,\n\t\tSize:       fileHeader.Size,\n\t\tExtension:  extension,\n\t\tMimeType:   fileHeader.Header.Get(\"Content-Type\"),\n\t\tHash:       hashStr,\n\t\tPreviewKey: PreviewKey,\n\t}\n\n\terr = uploadFile.Save()\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.FileError.ToResponse(err))\n\t\treturn\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(uploadFile))\n}\n\n// PreviewFile\n// @Summary      Preview a file\n// @Description  Preview a file\n// @Tags         Upload\n// @Accept       json\n// @Produce      octet-stream\n// @Param        key  path  string  true  \"file key\"\n// @Success      200  {object}  []byte  \"file content\"\n// 修改路由定义，使用路径参数\n// @Router       /api/preview/{key} [get]\nfunc PreviewFile(c *gin.Context) {\n\t// 从路径参数中获取 key\n\tkey := c.Param(\"key\")\n\tif key == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// uploadFile, err := model.GetUploadFileByEidAndPreviewKey(config.GetEID(c), key)\n\t// if err != nil {\n\t// \tc.JSON(http.StatusBadRequest, model.NotFound.ToResponse(err))\n\t// \treturn\n\t// }\n\tuploadFile, err := model.GetNoAuthUploadFileByEidAndPreviewKey(key)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tfileContent, err := storage.StorageInstance.Load(uploadFile.Key)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.FileError.ToResponse(err))\n\t\treturn\n\t}\n\n\tfilename := uploadFile.FileName\n\tencodedFilename := url.QueryEscape(filename)\n\n\tc.Header(\"Content-Disposition\", `inline; filename=\"`+filename+`\"; filename*=UTF-8''`+encodedFilename)\n\tc.Header(\"Content-Type\", uploadFile.MimeType)\n\tc.Header(\"Content-Length\", fmt.Sprintf(\"%d\", uploadFile.Size))\n\n\tc.Data(http.StatusOK, uploadFile.MimeType, fileContent)\n}\n"
  },
  {
    "path": "api/controller/user.go",
    "content": "package controller\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common\"\n\t\"github.com/53AI/53AIHub/common/session\"\n\t\"github.com/53AI/53AIHub/common/utils\"\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n\t\"gorm.io/gorm\"\n\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype LoginRequest struct {\n\tUsername string `json:\"username\" example:\"john_doe\" binding:\"required,min=1\"`\n\tPassword string `json:\"password\" example:\"password123\" binding:\"required,min=1\"`\n}\n\ntype LoginResponse struct {\n\tAccessToken string `json:\"access_token\"`\n\tUserID      int64  `json:\"user_id\"`\n}\n\ntype PasswordRegisterUserRequest struct {\n\tUsername   string `json:\"username\" example:\"john_doe\"`\n\tNickname   string `json:\"nickname\" example:\"John Doe\"`\n\tPassword   string `json:\"password\" validate:\"min=8,max=20\" example:\"password123\"`\n\tVerifyCode string `json:\"verify_code\" example:\"123456\"` // Add verification code field\n}\n\ntype EnterpriseAddUserRequest struct {\n\tUsername    string `json:\"username\" example:\"Json\"`\n\tNickname    string `json:\"nickname\" example:\"Json Jobs\"`\n\tAvatar      string `json:\"avatar\" example:\"http://avatar.cc/a.jpg\"`\n\tPassword    string `json:\"password\" validate:\"min=8,max=20\" example:\"password123\"`\n\tMobile      string `json:\"mobile\" example:\"13800138000\"`\n\tGroupId     int64  `json:\"group_id\" example:\"1\"`\n\tExpiredTime int64  `json:\"expired_time\" example:\"1672502400\"`\n}\n\n// Modify EnterpriseUserGetRequest struct, add Role field\ntype EnterpriseUserGetRequest struct {\n\tKeyword   string `json:\"keyword\" form:\"keyword\" example:\"Json\"`\n\tGroupId   int64  `json:\"group_id\" form:\"group_id\" example:\"0\"`\n\tRole      string `json:\"role\" form:\"role\" example:\"1,2\"` // Role parameter, allows multiple role values separated by commas\n\tOffset    int    `json:\"offset\" form:\"offset\" example:\"0\"`\n\tLimit     int    `json:\"limit\" form:\"limit\" example:\"10\"`\n\tStartTime int64  `json:\"start_time\" form:\"start_time\" example:\"0\"`\n\tEndTime   int64  `json:\"end_time\" form:\"end_time\" example:\"0\"`\n\tRangeBy   string `json:\"range_by\" form:\"range_by\" example:\"expired_time\"` // Sorting field, default is expired_time, optional value: created_time\n}\n\ntype EnterpriseUsersResponse struct {\n\tCount int64         `json:\"count\"`\n\tUsers []*model.User `json:\"users\"`\n}\n\n// Register User Login\n// @Summary User Login\n// @Description User Login\n// @Tags User\n// @Accept json\n// @Produce json\n// @Param user body LoginRequest true \"User Login Request Data\"\n// @Success 200 {object} model.CommonResponse{data=LoginResponse} \"Success\"\n// @Router /api/login [post]\nfunc Login(c *gin.Context) {\n\tvar loginRequest LoginRequest\n\terr := json.NewDecoder(c.Request.Body).Decode(&loginRequest)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tusername := loginRequest.Username\n\tpassword := loginRequest.Password\n\teid := config.GetEID(c)\n\n\tisEmail := helper.IsValidEmail(username)\n\tisMobile := helper.IsValidPhone(username)\n\n\tvar user model.User\n\tif isEmail {\n\t\tuser, err = model.GetUserByEmail(eid, username)\n\t} else if isMobile {\n\t\tuser, err = model.GetUserByMobile(eid, username)\n\t} else {\n\t}\n\n\tif err != nil {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(err))\n\t\treturn\n\t}\n\n\terr = user.VerifyPassword(password)\n\tif err != nil {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(err))\n\t\treturn\n\t}\n\n\terr = user.RefreshAccessToken()\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(err))\n\t\treturn\n\t}\n\n\terr = user.UpdateStatusToJoin()\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(err))\n\t}\n\n\t// log := model.SystemLog{\n\t// \tEid:      eid,\n\t// \tUserID:   user.UserID,\n\t// \tNickname: user.Nickname,\n\t// \tModule:   model.SystemLogModuleSystem,\n\t// \tAction:   model.SystemLogActionLoginOut,\n\t// \tContent:  \"登录\",\n\t// \tIP:       utils.GetClientIP(c),\n\t// }\n\t// model.CreateSystemLog(&log)\n\n\tloginResponse := LoginResponse{\n\t\tAccessToken: user.AccessToken,\n\t\tUserID:      user.UserID,\n\t}\n\tc.JSON(http.StatusOK, model.Success.ToResponse(loginResponse))\n}\n\n// SmsLoginRequest 手机号登录请求结构体\ntype SmsLoginRequest struct {\n\tMobile     string `json:\"mobile\" binding:\"required\"`      // 手机号\n\tVerifyCode string `json:\"verify_code\" binding:\"required\"` // 验证码\n}\n\ntype SmsLoginResponse struct {\n\tLoginResponse\n\tUsername string `json:\"username\"`\n\tNickname string `json:\"nickname\"`\n}\n\n// @Summary 手机号验证码登录\n// @Description 使用手机号和验证码登录\n// @Tags User\n// @Accept json\n// @Produce json\n// @Param request body SmsLoginRequest true \"登录信息\"\n// @Success 200 {object} model.CommonResponse{data=SmsLoginResponse} \"Success\"\n// @Router /api/sms_login [post]\nfunc SmsLogin(c *gin.Context) {\n\tvar req SmsLoginRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif !helper.IsValidPhone(req.Mobile) {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(model.InvalidMobileOrEmail))\n\t\treturn\n\t}\n\n\tif req.VerifyCode == \"\" {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToNewErrorResponse(model.InvalidVerificationCode))\n\t\treturn\n\t}\n\n\tredisKey := fmt.Sprintf(\"Api::CheckVerificationCode:%s\", req.Mobile)\n\tcode, err := common.RedisGet(redisKey)\n\tif err != nil || code != req.VerifyCode {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToNewErrorResponse(model.InvalidVerificationCode))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\texistingUser, err := model.GetUserByMobile(eid, req.Mobile)\n\tif err != nil {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif err := existingUser.RefreshAccessToken(); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(&SmsLoginResponse{\n\t\tLoginResponse: LoginResponse{\n\t\t\tAccessToken: existingUser.AccessToken,\n\t\t\tUserID:      existingUser.UserID,\n\t\t},\n\t\tUsername: existingUser.Username,\n\t\tNickname: existingUser.Nickname,\n\t}))\n}\n\n// Register User Register\n// @Summary User Register\n// @Description User Register\n// @Tags User\n// @Accept json\n// @Produce json\n// @Param user body PasswordRegisterUserRequest true \"User Registration Data\"\n// @Success 200 {object} model.CommonResponse{data=LoginResponse} \"Success\"\n// @Router /api/register [post]\nfunc PasswordRegister(c *gin.Context) {\n\t// Parse the request body into PasswordRegisterUserRequest struct\n\tvar userRequest PasswordRegisterUserRequest\n\terr := json.NewDecoder(c.Request.Body).Decode(&userRequest)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tparams := map[string]interface{}{\n\t\t\"from\": \"user\",\n\t}\n\t_, err = service.IsFeatureAvailable(c, \"registered_user\", params)\n\tif err != nil {\n\t\tc.JSON(http.StatusForbidden, model.FeatureNotAvailableError.ToResponse(err))\n\t\treturn\n\t}\n\n\tusername := userRequest.Username\n\n\tisEmail := helper.IsValidEmail(username)\n\tisMobile := helper.IsValidPhone(username)\n\n\teid := config.GetEID(c)\n\n\tif isMobile && config.IS_SAAS {\n\t\tif userRequest.VerifyCode == \"\" {\n\t\t\tc.JSON(http.StatusBadRequest, model.InvalidVerificationCodeError.ToNewErrorResponse(model.InvalidVerificationCode))\n\t\t\treturn\n\t\t}\n\n\t\tredisKey := fmt.Sprintf(\"Api::CheckVerificationCode:%s\", username)\n\t\tcode, err := common.RedisGet(redisKey)\n\t\tif err != nil || code != userRequest.VerifyCode {\n\t\t\tc.JSON(http.StatusBadRequest, model.InvalidVerificationCodeError.ToNewErrorResponse(model.InvalidVerificationCode))\n\t\t\treturn\n\t\t}\n\t} else if !isEmail && config.IS_SAAS {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(model.InvalidMobileOrEmail))\n\t\treturn\n\t} else if isEmail {\n\t\tenabled, _ := service.IsEnterpriseConfigEnabled(eid, model.EnterpriseConfigTypeSMTP)\n\t\tif enabled || config.IS_SAAS {\n\t\t\t_, err = common.VerifyEmailCode(username, userRequest.VerifyCode)\n\t\t\tif err != nil {\n\t\t\t\tc.JSON(http.StatusUnauthorized, model.AuthFailed.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t// Get the first user group for this enterprise\n\ttheGroup, err := model.GetFirstGroupByEid(eid, model.USER_GROUP_TYPE)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tuser := model.User{\n\t\tUsername: userRequest.Username,\n\t\tNickname: userRequest.Nickname,\n\t\tPassword: userRequest.Password,\n\t\tEid:      eid,\n\t\tGroupId:  theGroup.GroupId, // Assign the group ID from the enterprise's first user group\n\t}\n\n\tif isMobile {\n\t\tuser.Mobile = userRequest.Username\n\t}\n\n\tif isEmail {\n\t\tuser.Email = userRequest.Username\n\t}\n\n\tif err := common.Validate.Struct(&user); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\tvar theUser model.User\n\tif err = model.DB.Where(\"eid = ?\", eid).First(&theUser).Error; err != nil && err.Error() == \"record not found\" {\n\t\t// 一个站点没有用户，视为初始化，是创建者\n\t\tuser.Role = model.RoleCreatorUser\n\t}\n\n\terr = user.Create()\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ParamError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(LoginResponse{\n\t\tAccessToken: user.AccessToken,\n\t\tUserID:      user.UserID,\n\t}))\n}\n\n// Enterprise Admin add User\n// @Summary Add User\n// @Description Add User\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param user body EnterpriseAddUserRequest true \"User Data\"\n// @Success 200 {object} model.CommonResponse{data=model.User} \"Success\"\n// @Router /api/users [post]\nfunc EnterpriseAddUser(c *gin.Context) {\n\tvar userRequest EnterpriseAddUserRequest\n\terr := json.NewDecoder(c.Request.Body).Decode(&userRequest)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tuser := model.User{\n\t\tUsername:    userRequest.Username,\n\t\tNickname:    userRequest.Nickname,\n\t\tAvatar:      userRequest.Avatar,\n\t\tPassword:    userRequest.Password,\n\t\tMobile:      userRequest.Mobile,\n\t\tGroupId:     userRequest.GroupId,\n\t\tExpiredTime: userRequest.ExpiredTime,\n\t\tEid:         config.GetEID(c),\n\t\tRole:        model.RoleGuestUser,\n\t}\n\n\tif err := common.Validate.Struct(&user); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\terr = user.Create()\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ParamError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(user))\n}\n\n// Enterprise Admin get User List\n// @Summary Get User List\n// @Description Get User List\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param keyword query string false \"Search keyword, matches username, email or phone\"\n// @Param group_id query int false \"Filter by user group ID\"\n// @Param role query string false \"Filter by role IDs, multiple roles separated by commas\"\n// @Param offset query int false \"Pagination offset, default 0\"\n// @Param limit query int false \"Pagination limit, default 20, max 100\"\n// @Param start_time query int64 false \"Time range start (timestamp)\"\n// @Param endtime query int64 false \"Time range end (timestamp)\"\n// @Param range_by query string false \"Range field, default is expired_time, optional value: created_time\"\n// @Success 200 {object} model.CommonResponse{data=EnterpriseUsersResponse} \"Success\"\n// @Router /api/users [get]\n// @Router /api/users/admin [get]\nfunc EnterpriseUsers(c *gin.Context) {\n\tvar userGetRequest EnterpriseUserGetRequest\n\tif err := c.ShouldBindQuery(&userGetRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\troleStr := userGetRequest.Role\n\n\tvar userType int64\n\tuserType = model.UserTypeRegistered\n\n\tpath := c.Request.URL.Path\n\tisAdminPath := path == \"/api/users/admin\"\n\n\tif isAdminPath {\n\t\tuserType = 0\n\t\troleStr = fmt.Sprintf(\"%d,%d\", model.RoleCreatorUser, model.RoleAdminUser)\n\t}\n\n\toffset := userGetRequest.Offset\n\tif offset == 0 {\n\t\toffset = 0\n\t}\n\n\tlimit := userGetRequest.Limit\n\tif limit == 0 {\n\t\tlimit = 10\n\t}\n\n\t// Process sorting parameters\n\trangeBy := userGetRequest.RangeBy\n\tif rangeBy == \"\" {\n\t\trangeBy = \"expired_time\"\n\t}\n\t// Validate sorting field\n\tvalidOrderFields := map[string]bool{\"expired_time\": true, \"created_time\": true}\n\tif !validOrderFields[rangeBy] {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"order by field must be either 'expired_time' or 'created_time'\"))\n\t\treturn\n\t}\n\n\t// Get enterprise ID\n\tenterpriseID := config.GetEID(c)\n\n\t// Process time range filters\n\tvar timeStart, timeEnd int64\n\tif userGetRequest.StartTime > 0 {\n\t\ttimeStart = userGetRequest.StartTime\n\t}\n\tif userGetRequest.EndTime > 0 {\n\t\ttimeEnd = userGetRequest.EndTime\n\t}\n\n\t// Get user list with filtering\n\tcount, users, err := model.GetUserListWithRoles(\n\t\tenterpriseID,\n\t\tuserGetRequest.Keyword,\n\t\tuserGetRequest.GroupId,\n\t\troleStr,\n\t\tuserType,\n\t\trangeBy,\n\t\ttimeStart,\n\t\ttimeEnd,\n\t\toffset,\n\t\tlimit,\n\t)\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(EnterpriseUsersResponse{\n\t\tCount: count,\n\t\tUsers: users,\n\t}))\n}\n\n// Enterprise Admin delete User\n// @Summary Delete User\n// @Description Delete User\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"User ID\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/users/{id} [delete]\nfunc DeleteEnterpriseUser(c *gin.Context) {\n\tuser_id, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tuser, err := model.GetUserByID(int64(user_id))\n\tif err != nil {\n\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\terr = model.DeleteUser(eid, int64(user_id))\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar module uint8\n\tmodule = model.SystemLogModuleRegistered\n\tif user.Type == model.UserTypeInternal {\n\t\tmodule = model.SystemLogModuleInternalUser\n\t}\n\n\tmodel.LogEntityChange(\n\t\tfmt.Sprintf(\"账号【%s】\", user.Nickname),\n\t\tmodel.SystemLogActionDelete,\n\t\teid,\n\t\tconfig.GetUserId(c),\n\t\tconfig.GetUserNickname(c),\n\t\tmodule,\n\t\tnil,\n\t\tnil,\n\t\tutils.GetClientIP(c),\n\t\tnil,\n\t)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\n// Enterprise Admin update User\n// @Summary Update User\n// @Description Update User\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"User ID\"\n// @Param user body EnterpriseAddUserRequest true \"User Data\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/users/{id} [put]\nfunc UpdateEnterpriseUser(c *gin.Context) {\n\tuser_id, err := strconv.Atoi(c.Param(\"id\"))\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\tvar userRequest EnterpriseAddUserRequest\n\terr = json.NewDecoder(c.Request.Body).Decode(&userRequest)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tuser, err := model.GetUserByID(int64(user_id))\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tfieldMap := map[string]string{\n\t\t\"Nickname\":    \"姓名\",\n\t\t\"Avatar\":      \"头像\",\n\t\t\"Password\":    \"密码\",\n\t\t\"GroupId\":     \"分组ID\",\n\t\t\"ExpiredTime\": \"过期时间\",\n\t}\n\n\toldUser := *user\n\n\tuser.Nickname = userRequest.Nickname\n\tuser.Avatar = userRequest.Avatar\n\tupdatePassword := false\n\tuser.GroupId = userRequest.GroupId\n\tuser.ExpiredTime = userRequest.ExpiredTime\n\n\tmodel.LogEntityChange(\n\t\tfmt.Sprintf(\"账号【%s】\", oldUser.Nickname),\n\t\tmodel.SystemLogActionUpdate,\n\t\tuser.Eid,\n\t\tuser.UserID,\n\t\tuser.Nickname,\n\t\tmodel.SystemLogModuleRegistered,\n\t\toldUser,\n\t\tuser,\n\t\tutils.GetClientIP(c),\n\t\tfieldMap,\n\t)\n\n\terr = user.Update(updatePassword)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.ParamError.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(user))\n}\n\n// GetCurrentUserResponse defines the response structure for current user data\ntype GetCurrentUserResponse struct {\n\t*model.User\n}\n\n// Get Current User\n// @Summary Get current user info\n// @Description Get information of the currently logged-in user\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse{data=GetCurrentUserResponse} \"Success\"\n// @Router /api/users/me [get]\nfunc GetCurrentUser(c *gin.Context) {\n\t// Retrieve user ID from context (assuming set by auth middleware)\n\tuserID, success := c.Get(session.SESSION_USER_ID)\n\tif !success {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Type assertion for user ID\n\tuid, ok := userID.(int64)\n\tif !ok {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Query database for user\n\tuser, err := model.GetUserByID(uid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\tuser.LoadGroupIds()\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(GetCurrentUserResponse{\n\t\tUser: user,\n\t}))\n}\n\ntype UpdatePasswordRequest struct {\n\tNewPassword     string `json:\"new_password\" binding:\"required,min=8,max=20\" example:\"newPassword123\"`\n\tConfirmPassword string `json:\"confirm_password\" binding:\"required,min=8,max=20\" example:\"newPassword123\"`\n}\n\n// @Summary Update user password\n// @Description Update the password for the current logged-in user\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body UpdatePasswordRequest true \"Password update data\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Router /api/users/password [put]\nfunc UpdateUserPassword(c *gin.Context) {\n\tvar req UpdatePasswordRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif req.NewPassword != req.ConfirmPassword {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(model.PasswordNotMatch))\n\t\treturn\n\t}\n\n\tuserID := config.GetUserId(c)\n\tif userID == 0 {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(nil))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\terr := model.UpdateUserPassword(eid, userID, req.NewPassword)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(nil))\n}\n\ntype UpdateCurrentUserRequest struct {\n\tNickname string `json:\"nickname\" example:\"new nickname\"`\n\tAvatar   string `json:\"avatar\" example:\"http://example.com/avatar.jpg\"`\n}\n\n// @Summary Update current user information\n// @Description Update information for the currently logged-in user\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body UpdateCurrentUserRequest true \"User information to update\"\n// @Success 200 {object} model.CommonResponse{data=model.User} \"Success\"\n// @Router /api/users/me [put]\nfunc UpdateCurrentUser(c *gin.Context) {\n\tvar req UpdateCurrentUserRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tuserID := config.GetUserId(c)\n\tif userID == 0 {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tuser, err := model.GetUserByID(int64(userID))\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif req.Nickname != \"\" {\n\t\tuser.Nickname = req.Nickname\n\t}\n\n\tif req.Avatar != \"\" {\n\t\tuser.Avatar = req.Avatar\n\t}\n\n\tif err := model.DB.Save(user).Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(user))\n}\n\n// CheckAccountRequest defines the structure for account existence check request\ntype CheckAccountRequest struct {\n\tAccount string `json:\"account\" binding:\"required\" example:\"user@example.com\"`\n}\n\n// CheckAccountResponse defines the structure for account existence check response\ntype CheckAccountResponse struct {\n\tExists bool `json:\"exists\"`\n}\n\n// CheckAccountExists checks if an account exists in the system\n// @Summary Check if account exists\n// @Description Check if the specified account already exists in the system\n// @Tags User\n// @Accept json\n// @Produce json\n// @Param request body CheckAccountRequest true \"Account information\"\n// @Success 200 {object} model.CommonResponse{data=CheckAccountResponse}\n// @Failure 400 {object} model.CommonResponse \"Parameter error\"\n// @Failure 500 {object} model.CommonResponse \"System error\"\n// @Router /api/check_account [post]\nfunc CheckAccountExists(c *gin.Context) {\n\tvar req CheckAccountRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Get current enterprise ID\n\teid := config.GetEID(c)\n\tif eid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Check if account exists\n\texists, err := model.IsUserExistsByAccount(eid, req.Account)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(CheckAccountResponse{\n\t\tExists: exists,\n\t}))\n}\n\n// BatchSetAdminRequest defines the structure for batch admin setting request\ntype BatchSetAdminRequest struct {\n\tUserIDs []int64 `json:\"user_ids\" binding:\"required\" example:\"1,2,3\"`\n}\n\n// BatchSetAdminResponse defines the structure for batch admin setting response\ntype BatchSetAdminResponse struct {\n\tSuccess []int64 `json:\"success\"` // List of successfully processed user IDs\n\tFailed  []int64 `json:\"failed\"`  // List of failed user IDs\n}\n\n// SetUserAsAdmin sets users as administrators (batch operation)\n// @Summary Set users as admin\n// @Description Set multiple users as administrators for the current enterprise\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body BatchSetAdminRequest true \"Batch user ID list\"\n// @Success 200 {object} model.CommonResponse{data=BatchSetAdminResponse} \"Success\"\n// @Failure 400 {object} model.CommonResponse \"Parameter error\"\n// @Failure 401 {object} model.CommonResponse \"Unauthorized\"\n// @Failure 403 {object} model.CommonResponse \"Forbidden\"\n// @Failure 500 {object} model.CommonResponse \"System error\"\n// @Router /api/users/batch/admin [put]\nfunc SetUserAsAdmin(c *gin.Context) {\n\teid := config.GetEID(c)\n\tif eid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(model.InvalidEnterpriseID))\n\t\treturn\n\t}\n\n\tvar batchRequest BatchSetAdminRequest\n\tif err := c.ShouldBindJSON(&batchRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tuserIDs := batchRequest.UserIDs\n\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\tresponse := BatchSetAdminResponse{\n\t\tSuccess: []int64{},\n\t\tFailed:  []int64{},\n\t}\n\n\tnicknames := make([]string, 0, len(userIDs))\n\tfor _, userID := range userIDs {\n\t\tuser, err := model.GetUserByID(userID)\n\t\tif err != nil {\n\t\t\tresponse.Failed = append(response.Failed, userID)\n\t\t\tcontinue\n\t\t}\n\n\t\tif user.Eid != eid {\n\t\t\tresponse.Failed = append(response.Failed, userID)\n\t\t\tcontinue\n\t\t}\n\n\t\tif user.Role == model.RoleAdminUser {\n\t\t\tresponse.Success = append(response.Success, userID)\n\t\t\tcontinue\n\t\t}\n\n\t\tupdateMap := map[string]interface{}{\n\t\t\t\"role\":           model.RoleAdminUser,\n\t\t\t\"add_admin_time\": time.Now().UTC().UnixMilli(),\n\t\t}\n\n\t\terr = tx.Model(user).Where(\"user_id = ?\", userID).Updates(updateMap).Error\n\t\tif err != nil {\n\t\t\tresponse.Failed = append(response.Failed, userID)\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse.Success = append(response.Success, userID)\n\t\tnicknames = append(nicknames, user.Nickname)\n\t}\n\n\tif err := tx.Commit().Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleAdmin,\n\t\tAction:   model.SystemLogActionCreate,\n\t\tContent:  fmt.Sprintf(\"新建管理员【%s】\", strings.Join(nicknames, \"】【\")),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(response))\n}\n\n// UnsetUserAsAdmin removes administrator privileges from users (batch operation)\n// @Summary Remove admin privileges\n// @Description Remove administrator privileges from multiple users\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body BatchSetAdminRequest true \"Batch user ID list\"\n// @Success 200 {object} model.CommonResponse{data=BatchSetAdminResponse} \"Success\"\n// @Failure 400 {object} model.CommonResponse \"Parameter error\"\n// @Failure 401 {object} model.CommonResponse \"Unauthorized\"\n// @Failure 403 {object} model.CommonResponse \"Forbidden\"\n// @Failure 404 {object} model.CommonResponse \"User not found\"\n// @Failure 500 {object} model.CommonResponse \"System error\"\n// @Router /api/users/batch/admin [delete]\nfunc UnsetUserAsAdmin(c *gin.Context) {\n\t// Get current enterprise ID\n\teid := config.GetEID(c)\n\tif eid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(model.InvalidEnterpriseID))\n\t\treturn\n\t}\n\n\tvar batchRequest BatchSetAdminRequest\n\tif err := c.ShouldBindJSON(&batchRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tuserIDs := batchRequest.UserIDs\n\n\t// Begin transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\t// Define response structure\n\tresponse := BatchSetAdminResponse{\n\t\tSuccess: []int64{},\n\t\tFailed:  []int64{},\n\t}\n\n\tnicknames := make([]string, 0, len(userIDs))\n\t// Process each user ID\n\tfor _, userID := range userIDs {\n\t\t// Get user information\n\t\tuser, err := model.GetUserByID(userID)\n\t\tif err != nil {\n\t\t\tresponse.Failed = append(response.Failed, userID)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check if user belongs to current enterprise\n\t\tif user.Eid != eid {\n\t\t\tresponse.Failed = append(response.Failed, userID)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check if user is an admin\n\t\tif user.Role != model.RoleAdminUser {\n\t\t\tresponse.Success = append(response.Success, userID)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Update user role to common user and clear admin time\n\t\tupdateMap := map[string]interface{}{\n\t\t\t\"role\":           model.RoleCommonUser,\n\t\t\t\"add_admin_time\": 0, // Clear admin time\n\t\t}\n\n\t\terr = tx.Model(user).Where(\"user_id = ?\", userID).Updates(updateMap).Error\n\t\tif err != nil {\n\t\t\tresponse.Failed = append(response.Failed, userID)\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse.Success = append(response.Success, userID)\n\t\tnicknames = append(nicknames, user.Nickname)\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleAdmin,\n\t\tAction:   model.SystemLogActionUpdate,\n\t\tContent:  fmt.Sprintf(\"删除管理员【%s】\", strings.Join(nicknames, \"】【\")),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(response))\n}\n\n// BatchAddInternalUserRequest defines the structure for batch adding internal users\ntype BatchAddInternalUserRequest struct {\n\tUsers []BatchInternalUserInfo `json:\"users\" binding:\"required\"`\n}\n\n// InternalUserInfo defines the structure for internal user information\ntype InternalUserInfo struct {\n\tUsername string  `json:\"username\" binding:\"required\" example:\"john@example.com\"`\n\tNickname string  `json:\"nickname\" binding:\"required\" example:\"John Doe\"`\n\tDid      int64   `json:\"did\" binding:\"required\" example:\"1\"`\n\tDids     []int64 `json:\"dids\" example:\"[1,2,3]\"`\n\tPassword string  `json:\"password\" binding:\"required\" example:\"password123\"`\n}\n\n// BatchInternalUserInfo defines the structure for batch internal user information\ntype BatchInternalUserInfo struct {\n\tUsername string  `json:\"username\"`\n\tNickname string  `json:\"nickname\"`\n\tDids     []int64 `json:\"dids\"`\n\tPassword string  `json:\"password\"`\n}\n\n// BatchAddInternalUserResponse defines the structure for batch adding internal users response\ntype BatchAddInternalUserResponse struct {\n\tSuccess []service.BatchAddUserResult `json:\"success\"` // List of successfully added users\n\tFailed  []service.BatchAddUserResult `json:\"failed\"`  // List of failed users\n}\n\n// BatchAddInternalUsers adds multiple internal users\n// @Summary Batch add internal users\n// @Description Add multiple internal users to the system\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body BatchAddInternalUserRequest true \"Batch internal user data\"\n// @Success 200 {object} model.CommonResponse{data=BatchAddInternalUserResponse} \"Success\"\n// @Failure 400 {object} model.CommonResponse \"Parameter error\"\n// @Failure 401 {object} model.CommonResponse \"Unauthorized\"\n// @Failure 500 {object} model.CommonResponse \"System error\"\n// @Router /api/users/internal/batch [post]\nfunc BatchAddInternalUsers(c *gin.Context) {\n\tvar batchRequest BatchAddInternalUserRequest\n\tif err := c.ShouldBindJSON(&batchRequest); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tif eid <= 0 {\n\t\tc.JSON(http.StatusOK, model.ParamError.ToNewErrorResponse(model.InvalidEnterpriseID))\n\t\treturn\n\t}\n\n\tnicknames := make([]string, len(batchRequest.Users))\n\tusers := make([]service.InternalUserInfo, len(batchRequest.Users))\n\tfor i, user := range batchRequest.Users {\n\t\tusers[i] = service.InternalUserInfo{\n\t\t\tUsername: user.Username,\n\t\t\tNickname: user.Nickname,\n\t\t\tDids:     user.Dids,\n\t\t\tPassword: user.Password,\n\t\t}\n\t\tnicknames[i] = user.Nickname\n\t}\n\n\tuserService := service.UserService{}\n\tresult, err := userService.BatchAddInternalUsers(eid, users)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif len(result.Failed) > 0 && len(result.Success) == 0 {\n\t\tc.JSON(http.StatusOK, model.ParamError.ToResponse(BatchAddInternalUserResponse{\n\t\t\tSuccess: result.Success,\n\t\t\tFailed:  result.Failed,\n\t\t}))\n\t\treturn\n\t}\n\n\tmodel.LogEntityChange(\n\t\tfmt.Sprintf(\"账号【%s】\", strings.Join(nicknames, \"; \")),\n\t\tmodel.SystemLogActionCreate,\n\t\teid,\n\t\tconfig.GetUserId(c),\n\t\tconfig.GetUserNickname(c),\n\t\tmodel.SystemLogModuleInternalUser,\n\t\tnil,\n\t\tnil,\n\t\tutils.GetClientIP(c),\n\t\tnil,\n\t)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(BatchAddInternalUserResponse{\n\t\tSuccess: result.Success,\n\t\tFailed:  result.Failed,\n\t}))\n}\n\n// RegisterUserToInternalRequest defines the structure for batch registering internal users request\ntype RegisterUserToInternalRequest struct {\n\tUserDepartments []struct {\n\t\tUserID int64   `json:\"user_id\" binding:\"required\"`\n\t\tDIDs   []int64 `json:\"dids\" binding:\"required\"`\n\t} `json:\"user_departments\" binding:\"required\"`\n}\n\n// RegisterUserToInternal registers users as internal users and associates them with departments\n// @Summary Register users as internal users and associate with departments\n// @Description Batch process user IDs and department IDs, update user information and add department associations within a transaction\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param request body RegisterUserToInternalRequest true \"User-department mapping data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/users/register/to/internal [put]\nfunc RegisterUserToInternal(c *gin.Context) {\n\tvar req RegisterUserToInternalRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tif len(req.UserDepartments) == 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"User-department mapping cannot be empty\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\tif eid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(model.InvalidEnterpriseID))\n\t\treturn\n\t}\n\n\tmappings := make([]service.UserDepartmentMapping, len(req.UserDepartments))\n\tfor i, mapping := range req.UserDepartments {\n\t\tmappings[i] = service.UserDepartmentMapping{\n\t\t\tUserID: mapping.UserID,\n\t\t\tDIDs:   mapping.DIDs,\n\t\t}\n\t}\n\n\tuserService := service.UserService{}\n\tresult, err := userService.RegisterUserToInternal(eid, mappings)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(gin.H{\n\t\t\"success_count\": result.SuccessCount,\n\t\t\"failed_users\":  result.FailedUsers,\n\t\t\"total\":         result.Total,\n\t}))\n}\n\n// InternalUserRequest 定义获取内部用户列表的请求参数\ntype InternalUserRequest struct {\n\tKeyword string `json:\"keyword\" form:\"keyword\" example:\"张三\"`  // 关键词，用于搜索部门名称或用户昵称/手机号\n\tStatus  int    `json:\"status\" form:\"status\" example:\"-1\"\"`   // 用户状态，-1表示全部，0未加入，1已加入，2被禁用\n\tOffset  int    `json:\"offset\" form:\"offset\" example:\"0\"`     // 分页偏移量\n\tLimit   int    `json:\"limit\" form:\"limit\" example:\"10\"`      // 每页数量\n\tDID     int64  `json:\"did\" form:\"did\" example:\"0\"`           // 部门ID，0表示不按部门筛选\n\tFrom    int    `json:\"from\" form:\"from\" example:\"0\"`         // 来源，0表示不按来源筛选\n\tNotBind int    `json:\"not_bind\" form:\"not_bind\" example:\"0\"` // 是否未绑定，0表示不筛选，1表示未绑定\n}\n\n// InternalUserResponse 定义内部用户列表的响应结构\ntype InternalUserResponse struct {\n\tCount int64         `json:\"count\"` // 总数量\n\tUsers []*model.User `json:\"users\"` // 用户列表\n}\n\n// GetInternalUsers 获取内部用户列表\n// @Summary 获取内部用户列表\n// @Description 获取企业内部用户列表，支持分页、按状态查询、按成员/部门模糊匹配\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param keyword query string false \"关键词，用于搜索部门名称或用户昵称/手机号\"\n// @Param status query int false \"用户状态，-1表示全部，0未加入，1已加入，2被禁用，默认为-1\"\n// @Param offset query int false \"分页偏移量，默认为0\"\n// @Param limit query int false \"每页数量，默认为10\"\n// @Param not_bind query int false \"筛选没有绑定的用户，0表示不筛选，1表示未绑定\"\n// @Param did query int false \"部门ID，0表示不按部门筛选\"\n// @Param from query int false \"来源，0 1企业微信，2钉钉\"\n// @Success 200 {object} model.CommonResponse{data=InternalUserResponse} \"成功\"\n// @Failure 400 {object} model.CommonResponse \"参数错误\"\n// @Failure 401 {object} model.CommonResponse \"未授权\"\n// @Failure 500 {object} model.CommonResponse \"系统错误\"\n// @Router /api/users/internal [get]\nfunc GetInternalUsers(c *gin.Context) {\n\teid := config.GetEID(c)\n\tif eid <= 0 {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(model.InvalidEnterpriseID))\n\t\treturn\n\t}\n\n\t// 解析请求参数\n\tvar req InternalUserRequest\n\tif err := c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 设置默认值\n\tif req.Limit <= 0 {\n\t\treq.Limit = 10\n\t}\n\tif req.Offset < 0 {\n\t\treq.Offset = 0\n\t}\n\tif req.Status < 0 {\n\t\treq.Status = -1 // 默认查询全部状态\n\t}\n\n\t// 调用服务层获取内部用户列表\n\tuserService := service.UserService{}\n\tcount, users, err := userService.GetInternalUsersWithPagination(\n\t\teid,\n\t\treq.Keyword,\n\t\treq.Status,\n\t\treq.Offset,\n\t\treq.Limit,\n\t\treq.DID,\n\t\treq.From,\n\t\treq.NotBind,\n\t)\n\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 返回处理结果\n\tc.JSON(http.StatusOK, model.Success.ToResponse(InternalUserResponse{\n\t\tCount: count,\n\t\tUsers: users,\n\t}))\n}\n\n// UpdateUserStatus updates the user status\n// @Summary Update user status\n// @Description Update the status of a specified user (enable/disable)\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"User ID\"\n// @Param status body UpdateUserStatusRequest true \"Status information\"\n// @Success 200 {object} model.CommonResponse{data=model.User} \"Success\"\n// @Router /api/users/{id}/status [patch]\nfunc UpdateUserStatus(c *gin.Context) {\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar req UpdateUserStatusRequest\n\tif err = c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Validate if the status value is valid\n\tif req.Status != model.UserStatusJoined && req.Status != model.UserStatusDisabled {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"Invalid status value\"))\n\t\treturn\n\t}\n\n\teid := config.GetEID(c)\n\n\t// Get user\n\tuser, err := model.GetUserByID(id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Verify if the user belongs to the current enterprise\n\tif user.Eid != eid {\n\t\tc.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Update user status\n\tuser.Status = req.Status\n\tif err := user.Update(false); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tstatusText := \"激活\"\n\tif user.Status == model.UserStatusDisabled {\n\t\tstatusText = \"禁用\"\n\t}\n\n\tlog := model.SystemLog{\n\t\tEid:      eid,\n\t\tUserID:   config.GetUserId(c),\n\t\tNickname: config.GetUserNickname(c),\n\t\tModule:   model.SystemLogModuleSystem,\n\t\tAction:   model.SystemLogActionToggle,\n\t\tContent:  fmt.Sprintf(\"%s账号【%s】\", statusText, user.Nickname),\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(user))\n}\n\n// UpdateUserStatusRequest request for updating user status\ntype UpdateUserStatusRequest struct {\n\tStatus int `json:\"status\" binding:\"required\" example:\"1\"` // User status: 1-Joined, 2-Disabled\n}\n\n// UpdateInternalUserRequest defines the structure for updating internal user\ntype UpdateInternalUserRequest struct {\n\tNickname   string  `json:\"nickname\"`\n\tStatus     int     `json:\"status\"`\n\tMobile     string  `json:\"mobile\"`     // Mobile number, can be updated when user status is not joined\n\tEmail      string  `json:\"email\"`      // Email address, can be updated when user status is not joined\n\tDepartment []int64 `json:\"department\"` // Department ID list\n}\n\n// UpdateInternalUser updates internal user information\n// @Summary Update internal user information\n// @Description Update nickname, status and department relationships of internal user\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"User ID\"\n// @Param request body UpdateInternalUserRequest true \"Update data\"\n// @Success 200 {object} model.CommonResponse\n// @Router /api/users/internal/{id} [put]\nfunc UpdateInternalUser(c *gin.Context) {\n\t// Parse user ID from request parameters\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Get enterprise ID from context\n\teid := config.GetEID(c)\n\n\t// Retrieve user by ID\n\tuser, err := model.GetUserByID(id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\toldUser := *user\n\t// Verify user belongs to current enterprise\n\tif user.Eid != eid {\n\t\tc.JSON(http.StatusForbidden, model.ForbiddenError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// Parse request body\n\tvar req UpdateInternalUserRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Begin database transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(tx.Error))\n\t\treturn\n\t}\n\n\t// Update basic user information\n\tif req.Nickname != \"\" {\n\t\tuser.Nickname = req.Nickname\n\t}\n\n\t// Only allow editing contact information when user hasn't joined yet\n\tif user.Status == model.UserStatusNotJoined {\n\t\t// Update mobile number if provided and not already in use\n\t\tif req.Mobile != \"\" {\n\t\t\t// Check if mobile number already exists\n\t\t\tvar count int64\n\t\t\tif err := tx.Model(&model.User{}).Where(\"eid = ? AND mobile = ? AND user_id != ?\", eid, req.Mobile, id).Count(&count).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif count > 0 {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"Mobile number already exists\"))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tuser.Mobile = req.Mobile\n\t\t}\n\n\t\t// Update email if provided and not already in use\n\t\tif req.Email != \"\" {\n\t\t\t// Check if email already exists\n\t\t\tvar count int64\n\t\t\tif err := tx.Model(&model.User{}).Where(\"eid = ? AND email = ? AND user_id != ?\", eid, req.Email, id).Count(&count).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif count > 0 {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(\"Email already exists\"))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tuser.Email = req.Email\n\t\t}\n\t}\n\n\t// Update user status if provided\n\tif req.Status != 0 {\n\t\tuser.Status = req.Status\n\t}\n\n\t// Save user changes\n\tif err := tx.Save(user).Error; err != nil {\n\t\ttx.Rollback()\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Update department relationships if provided\n\tif len(req.Department) > 0 {\n\t\t// Fetch existing department relationships\n\t\tbindvalue, err := model.GetMemberBindingByDepartmentFromBackend(id, tx)\n\t\tif err != nil || bindvalue == nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\n\t\tvar existingRelations []*model.MemberDepartmentRelation\n\t\tif err := tx.Where(\"bid = ? AND eid = ?\", bindvalue.ID, eid).Find(&existingRelations).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\n\t\t// Create map of existing department IDs for quick lookup\n\t\texistingDeptMap := make(map[int64]bool)\n\t\tfor _, relation := range existingRelations {\n\t\t\texistingDeptMap[relation.DID] = true\n\t\t}\n\n\t\t// Identify departments to remove\n\t\tvar deptToDelete []int64\n\t\tfor _, relation := range existingRelations {\n\t\t\tfound := false\n\t\t\tfor _, newDeptID := range req.Department {\n\t\t\t\tif newDeptID > 0 && relation.DID == newDeptID {\n\t\t\t\t\tfound = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !found {\n\t\t\t\tdeptToDelete = append(deptToDelete, relation.DID)\n\t\t\t}\n\t\t}\n\n\t\t// Delete removed department relationships\n\t\tif len(deptToDelete) > 0 {\n\t\t\tif err := tx.Where(\"eid = ? AND did IN ?\", eid, deptToDelete).Delete(&model.MemberDepartmentRelation{}).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\t// Add new department relationships\n\t\tfor _, deptID := range req.Department {\n\t\t\t// Skip if department already exists or ID is invalid (<=0)\n\t\t\tif existingDeptMap[deptID] || deptID <= 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Create new department relationship\n\t\t\trelation := model.MemberDepartmentRelation{\n\t\t\t\tEID: eid,\n\t\t\t\tBID: bindvalue.ID,\n\t\t\t\tDID: deptID,\n\t\t\t}\n\t\t\tif err := tx.Create(&relation).Error; err != nil {\n\t\t\t\ttx.Rollback()\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Prepare for logging\n\tfieldMap := map[string]string{\n\t\t\"Nickname\": \"昵称\",\n\t\t\"Mobile\":   \"手机号\",\n\t\t\"Email\":    \"邮箱\",\n\t\t\"Status\":   \"状态\",\n\t}\n\tmodel.LogEntityChange(\n\t\tfmt.Sprintf(\"账号【%s】\", oldUser.Nickname),\n\t\tmodel.SystemLogActionUpdate,\n\t\teid,\n\t\tconfig.GetUserId(c),\n\t\tconfig.GetUserNickname(c),\n\t\tmodel.SystemLogModuleInternalUser,\n\t\toldUser,\n\t\tuser,\n\t\tutils.GetClientIP(c),\n\t\tfieldMap,\n\t)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(user))\n}\n\n// ResetPasswordRequest 重置密码请求结构体\ntype ResetPasswordRequest struct {\n\tMobile          string `json:\"mobile\"`                                // 手机号（与邮箱二选一）\n\tEmail           string `json:\"email\"`                                 // 邮箱（与手机号二选一）\n\tVerifyCode      string `json:\"verify_code\" binding:\"required\"`        // 验证码\n\tNewPassword     string `json:\"new_password\" binding:\"required,min=6\"` // 新密码（至少6位）\n\tConfirmPassword string `json:\"confirm_password\" binding:\"required\"`   // 确认新密码\n}\n\n// Logout 用户登出\n// @Summary 用户登出\n// @Description 使当前用户的访问令牌失效，完成登出操作\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Success 200 {object} model.CommonResponse \"登出成功\"\n// @Router /api/logout [post]\nfunc Logout(c *gin.Context) {\n\t// 从请求头获取令牌\n\ttoken := c.Request.Header.Get(\"Authorization\")\n\ttoken = strings.Replace(token, \"Bearer \", \"\", 1)\n\n\tif token == \"\" {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 获取用户ID\n\tuserID, exists := c.Get(session.SESSION_USER_ID)\n\tif !exists {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(nil))\n\t\treturn\n\t}\n\n\tuid, ok := userID.(int64)\n\tif !ok {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(nil))\n\t\treturn\n\t}\n\n\t// 获取用户信息\n\tuser, err := model.GetUserByID(uid)\n\tif err != nil || user == nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 使令牌失效\n\terr = user.InvalidateAccessToken()\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.SystemError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 记录系统日志\n\tlog := model.SystemLog{\n\t\tEid:      user.Eid,\n\t\tUserID:   user.UserID,\n\t\tNickname: user.Nickname,\n\t\tModule:   model.SystemLogModuleSystem,\n\t\tAction:   model.SystemLogActionLoginOut,\n\t\tContent:  \"登出\",\n\t\tIP:       utils.GetClientIP(c),\n\t}\n\tmodel.CreateSystemLog(&log)\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(\"登出成功\"))\n}\n\n// ResetPassword 重置用户密码\n// @Summary 重置用户密码\n// @Description 通过手机号或邮箱验证码重置密码\n// @Tags User\n// @Accept json\n// @Produce json\n// @Param request body ResetPasswordRequest true \"重置密码请求\"\n// @Success 200 {object} model.CommonResponse \"密码重置成功\"\n// @Router /api/reset_password [post]\nfunc ResetPassword(c *gin.Context) {\n\tvar req ResetPasswordRequest\n\tif err := c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tuser, err := model.GetLoginUser(c)\n\tif err == nil {\n\t\tif req.Mobile != \"\" {\n\t\t\treq.Mobile = user.Mobile\n\t\t}\n\t\tif req.Email != \"\" {\n\t\t\treq.Email = user.Email\n\t\t}\n\t}\n\n\t// 验证至少提供手机号或邮箱\n\tif req.Mobile == \"\" && req.Email == \"\" {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(model.InvalidMobileOrEmail))\n\t\treturn\n\t}\n\n\t// 验证新密码一致性\n\tif req.NewPassword != req.ConfirmPassword {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(model.PasswordNotMatch))\n\t\treturn\n\t}\n\n\t// 验证格式\n\tvalidMobile := req.Mobile != \"\" && helper.IsValidPhone(req.Mobile)\n\tvalidEmail := req.Email != \"\" && helper.IsValidEmail(req.Email)\n\tif !validMobile && !validEmail {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToNewErrorResponse(model.InvalidMobileOrEmail))\n\t\treturn\n\t}\n\n\t// 验证验证码\n\tvar code string\n\tif validMobile {\n\t\t// 目前 saas 版要求是这样\n\t\tredisKey := fmt.Sprintf(\"Api::CheckVerificationCode:%s\", req.Mobile)\n\t\tcode, err = common.RedisGet(redisKey)\n\t} else {\n\t\t// 邮箱验证码从数据库查询\n\t\tvar vc model.VerificationCode\n\t\terr = model.DB.Where(\"target = ? AND type = ? AND code = ?\", req.Email, model.VerificationCodeTypeEmail, req.VerifyCode).First(&vc).Error\n\t\tif err == nil {\n\t\t\tcode = vc.Code\n\t\t}\n\t}\n\n\tif err != nil || code != req.VerifyCode {\n\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToNewErrorResponse(model.InvalidVerificationCode))\n\t\treturn\n\t}\n\n\tif user == nil {\n\t\teid := config.GetEID(c)\n\t\t// 查询用户\n\t\tquery := model.DB\n\t\tif validMobile {\n\t\t\tquery = query.Where(\"eid = ? AND mobile = ?\", eid, req.Mobile)\n\t\t} else {\n\t\t\tquery = query.Where(\"eid = ? AND email = ?\", eid, req.Email)\n\t\t}\n\t\terr = query.First(&user).Error\n\t\tif err != nil {\n\t\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\t\tc.JSON(http.StatusNotFound, model.NotFound.ToNewErrorResponse(\"User does not exist\"))\n\t\t\t} else {\n\t\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t}\n\n\t// 加密新密码，并更新用户\n\tsalt := helper.RandomString(6)\n\thashedPassword, err := helper.PasswordHash(req.NewPassword, salt)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.InvalidVerificationCodeError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 更新用户密码\n\tuser.Password = hashedPassword\n\tuser.Salt = salt\n\terr = model.DB.Save(&user).Error\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(\"Password reset successful\"))\n}\n\n// UpdateUserMobileRequest 更新用户手机号请求结构体\ntype UpdateUserMobileRequest struct {\n\tOldCode   string `json:\"old_code\"`                      // 原手机号验证码\n\tNewMobile string `json:\"new_mobile\" binding:\"required\"` // 新手机号\n\tNewCode   string `json:\"new_code\" binding:\"required\"`   // 新手机号验证码\n}\n\n// UpdateUserMobile 绑定、更新用户手机号\n// @Summary 绑定、更新用户手机号\n// @Description 通过原手机号和新手机号验证码验证后更新绑定的手机号\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"用户ID\"\n// @Param data body UpdateUserMobileRequest true \"原手机号验证码、新手机号及新验证码\"\n// @Success 200 {object} model.CommonResponse{data=model.User} \"更新成功\"\n// @Failure 400 {object} model.CommonResponse \"参数错误\"\n// @Failure 401 {object} model.CommonResponse \"验证码无效\"\n// @Failure 409 {object} model.CommonResponse \"手机号已被绑定\"\n// @Router /api/users/{id}/mobile [patch]\nfunc UpdateUserMobile(c *gin.Context) {\n\t// 解析路径参数ID\n\tid, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\tvar req UpdateUserMobileRequest\n\tif err = c.ShouldBindJSON(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// 获取当前用户\n\tuser, err := model.GetUserByID(id)\n\tif err != nil {\n\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))\n\t\treturn\n\t}\n\n\tif user.Mobile != \"\" {\n\t\toldMobileRedisKey := fmt.Sprintf(\"Api::CheckVerificationCode:%s\", user.Mobile)\n\t\toldCode, err := common.RedisGet(oldMobileRedisKey)\n\t\tif err != nil || oldCode != req.OldCode {\n\t\t\tc.JSON(http.StatusUnauthorized, model.AuthFailed.ToNewErrorResponse(model.InvalidVerificationCode))\n\t\t\treturn\n\t\t}\n\t}\n\n\t// 验证新手机号格式\n\tif !helper.IsValidPhone(req.NewMobile) {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(model.InvalidMobileFormat))\n\t\treturn\n\t}\n\n\t// 验证新手机号验证码（Redis）\n\tnewMobileRedisKey := fmt.Sprintf(\"Api::CheckVerificationCode:%s\", req.NewMobile)\n\tnewCode, err := common.RedisGet(newMobileRedisKey)\n\tif err != nil || newCode != req.NewCode {\n\t\tc.JSON(http.StatusUnauthorized, model.AuthFailed.ToNewErrorResponse(model.InvalidVerificationCode))\n\t\treturn\n\t}\n\n\t// 检查新手机号是否已被其他用户绑定\n\texistingUser, err := model.GetUserByMobile(user.Eid, req.NewMobile)\n\tif err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\tif existingUser.UserID > 0 && existingUser.UserID != id {\n\t\terr := errors.New(\"This mobile has been bound by another user\")\n\t\tc.JSON(http.StatusConflict, model.AuthFailed.ToErrorResponse(err))\n\t\treturn\n\t}\n\n\tuser.Mobile = req.NewMobile\n\tif err := user.Update(false); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(user))\n}\n\n// @Summary 获取组织用户列表\n// @Description 获取指定组织下的所有用户信息及其成员绑定关系\n// @Tags User\n// @Accept application/json\n// @Produce application/json\n// @Security BearerAuth\n// @Param did query int64 false \"部门ID\" default(0)\n// @Param status query int false \"用户状态（0：未加入，1：已加入 -1 全部）\" default(-1)\n// @Param from query int false \"绑定来源（0：默认，1：企业微信，2：钉钉）\" default(0)\n// @Param keyword query string false \"搜索关键字\"\n// @Param offset query int false \"offset\" default(0)\n// @Param limit query int false \"limit\" default(10)\n// @Param user_status query int false \"用户状态 -1 全部\" default(-1)\n// @Success 200 {object} model.CommonResponse(data=service.OrganizationUserListParams) \"成功返回用户列表及绑定关系\"\n// @Router /api/users/organization [get]\nfunc GetOrganizationUserList(c *gin.Context) {\n\tvar req service.OrganizationUserListParams\n\tif err := c.ShouldBindQuery(&req); err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))\n\t\treturn\n\t}\n\teid := config.GetEID(c)\n\treq.EID = eid\n\n\tif req.From == model.DepartmentFromBackend {\n\t\terr := service.InitFromBackendMemberBinding(eid)\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\t\treturn\n\t\t}\n\t}\n\n\tif req.From == model.DepartmentFromWecom {\n\t\tif req.Status == model.MemberBindingStatusInactive {\n\t\t\treq.UserStatus = model.UserStatusNotJoined\n\t\t} else if req.Status == model.MemberBindingStatusActive {\n\t\t\treq.UserStatus = model.UserStatusJoined\n\t\t}\n\t}\n\n\tuserListResp, err := service.GetOrganizationalUserList(req)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\tc.JSON(http.StatusOK, model.Success.ToResponse(userListResp))\n}\n\n// SetUserToDefaultSubscription sets a user's subscription to the default subscription\n// @Summary Set user to default subscription\n// @Description Updates the user's subscription to the default subscription and sets the expiration time to permanent\n// @Tags User\n// @Accept json\n// @Produce json\n// @Security BearerAuth\n// @Param id path int true \"User ID\"\n// @Success 200 {object} model.CommonResponse \"Success\"\n// @Failure 400 {object} model.CommonResponse \"Parameter error\"\n// @Failure 403 {object} model.CommonResponse \"Forbidden\"\n// @Failure 404 {object} model.CommonResponse \"User not found\"\n// @Failure 500 {object} model.CommonResponse \"System error\"\n// @Router /api/users/{id}/default_subscription [put]\nfunc SetUserToDefaultSubscription(c *gin.Context) {\n\t// Parse user ID from the request path\n\tuserID, err := strconv.ParseInt(c.Param(\"id\"), 10, 64)\n\tif err != nil {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(fmt.Errorf(\"Invalid user ID\")))\n\t\treturn\n\t}\n\n\t// Get the current logged-in user's ID and role\n\tcurrentUserID := config.GetUserId(c)\n\tcurrentUserRole := config.GetUserRole(c)\n\n\t// Check if the current user is an admin\n\tif currentUserRole < model.RoleAdminUser {\n\t\t// If not an admin, ensure the user can only modify their own subscription\n\t\tif currentUserID != userID {\n\t\t\tc.JSON(http.StatusForbidden, model.ForbiddenError.ToResponse(fmt.Errorf(\"You can only modify your own subscription\")))\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Retrieve the user by ID\n\tuser, err := model.GetUserByID(userID)\n\tif err != nil {\n\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\tc.JSON(http.StatusNotFound, model.NotFound.ToResponse(fmt.Errorf(\"User not found\")))\n\t\t\treturn\n\t\t}\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))\n\t\treturn\n\t}\n\n\t// Check if the user's subscription has expired\n\tcurrentTime := time.Now().UnixMilli()\n\tif user.ExpiredTime > currentTime {\n\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToResponse(fmt.Errorf(\"Subscription has not expired yet\")))\n\t\treturn\n\t}\n\n\t// Retrieve the default subscription setting\n\tdefaultSubscription, err := model.GetDefaultSubscription(user.Eid)\n\tif err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(fmt.Errorf(\"Failed to retrieve default subscription: %v\", err)))\n\t\treturn\n\t}\n\n\t// Update the user's subscription to the default subscription\n\tuser.GroupId = defaultSubscription.GroupId\n\tuser.ExpiredTime = 0 // Set expiration time to permanent\n\n\t// Save the updated user information\n\tif err := user.Update(false); err != nil {\n\t\tc.JSON(http.StatusInternalServerError, model.DBError.ToResponse(fmt.Errorf(\"Failed to update user subscription: %v\", err)))\n\t\treturn\n\t}\n\n\t// Log the subscription change\n\tmodel.LogEntityChange(\n\t\tfmt.Sprintf(\"User【%s】subscription updated to default\", user.Nickname),\n\t\tmodel.SystemLogActionUpdate,\n\t\tuser.Eid,\n\t\tuser.UserID,\n\t\tuser.Nickname,\n\t\tmodel.SystemLogModuleRegistered,\n\t\tnil,\n\t\tuser,\n\t\tutils.GetClientIP(c),\n\t\tmap[string]string{\n\t\t\t\"GroupId\":     \"Subscription Group ID\",\n\t\t\t\"ExpiredTime\": \"Expiration Time\",\n\t\t},\n\t)\n\n\t// Return success response\n\tc.JSON(http.StatusOK, model.Success.ToResponse(user))\n}\n\n\n // IsInit checks whether the system has been initialized (whether a user exists for eid=1)\n // @Summary Check initialization status\n // @Description Returns true if the system is initialized (exists a user with eid=1), otherwise false\n // @Tags System\n // @Accept json\n // @Produce json\n // @Success 200 {object} model.CommonResponse{data=bool} \"Success\"\n // @Router /api/is_init [get]\nfunc IsInit(c *gin.Context) {\n\tvar user model.User\n\tif err := model.DB.Where(\"eid = ?\", 1).First(&user).Error; err != nil {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(false))\n\t} else {\n\t\tc.JSON(http.StatusOK, model.Success.ToResponse(true))\n\t}\n}\n"
  },
  {
    "path": "api/docker/docker-compose.yml",
    "content": "version: '3.8'\n\nservices:\n  53aihub:\n    build:\n      context: ..\n      dockerfile: Dockerfile\n    env_file: .env\n    ports:\n      - \"3000:3000\"\n    environment:\n      - REDIS_HOST=redis\n      - MYSQL_HOST=mysql\n    depends_on:\n      - redis\n      - mysql\n    restart: unless-stopped\n\n  redis:\n    image: redis:6-alpine\n    command: redis-server --requirepass your_redis_password  # 设置 Redis 密码\n    ports:\n      - \"6379:6379\"\n    volumes:\n      - redis_data:/data\n    restart: unless-stopped\n\n  mysql:\n    image: mysql:8.0\n    environment:\n      MYSQL_ROOT_PASSWORD: rootpassword\n      MYSQL_DATABASE: 53ai_hub\n      MYSQL_USER: agent\n      MYSQL_PASSWORD: agentpassword\n    ports:\n      - \"3306:3306\"\n    volumes:\n      - mysql_data:/var/lib/mysql\n    restart: unless-stopped\n\nvolumes:\n  redis_data:\n  mysql_data:"
  },
  {
    "path": "api/docs/.gitignore",
    "content": "# 忽略文件夹内所有文件\n*\n# 但不忽略 .gitignore 文件本身\n!.gitignore"
  },
  {
    "path": "api/go.mod",
    "content": "module github.com/53AI/53AIHub\n\ngo 1.24.1\n\nrequire (\n\tgithub.com/alibabacloud-go/darabonba-openapi/v2 v2.1.13\n\tgithub.com/alibabacloud-go/dingtalk v1.6.91\n\tgithub.com/alibabacloud-go/tea v1.3.13\n\tgithub.com/gin-contrib/cors v1.7.4\n\tgithub.com/gin-gonic/gin v1.10.0\n\tgithub.com/go-pay/crypto v0.0.1\n\tgithub.com/go-pay/gopay v1.5.114\n\tgithub.com/go-pay/xlog v0.0.3\n\tgithub.com/google/uuid v1.6.0\n\tgithub.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible\n\tgithub.com/pkoukk/tiktoken-go v0.1.7\n\tgithub.com/swaggo/swag v1.16.4\n\tgithub.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.34\n\tgorm.io/gorm v1.25.10\n)\n\nrequire github.com/mattn/go-sqlite3 v1.14.22 // indirect\n\nrequire (\n\tcloud.google.com/go/auth v0.6.1 // indirect\n\tcloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect\n\tcloud.google.com/go/compute/metadata v0.3.0 // indirect\n\tcloud.google.com/go/iam v1.1.10 // indirect\n\tfilippo.io/edwards25519 v1.1.0 // indirect\n\tgithub.com/KyleBanks/depth v1.2.1 // indirect\n\tgithub.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect\n\tgithub.com/alibabacloud-go/debug v1.0.1 // indirect\n\tgithub.com/alibabacloud-go/gateway-dingtalk v1.0.2 // indirect\n\tgithub.com/alibabacloud-go/openapi-util v0.1.1 // indirect\n\tgithub.com/alibabacloud-go/tea-utils/v2 v2.0.7 // indirect\n\tgithub.com/aliyun/credentials-go v1.4.6 // indirect\n\tgithub.com/aws/aws-sdk-go-v2 v1.27.0 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.17.15 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/configsources v1.3.7 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.7 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.8.3 // indirect\n\tgithub.com/aws/smithy-go v1.20.2 // indirect\n\tgithub.com/cespare/xxhash/v2 v2.3.0 // indirect\n\tgithub.com/clbanning/mxj/v2 v2.7.0 // indirect\n\tgithub.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect\n\tgithub.com/dlclark/regexp2 v1.11.0 // indirect\n\tgithub.com/felixge/httpsnoop v1.0.4 // indirect\n\tgithub.com/gin-contrib/static v1.1.2 // indirect\n\tgithub.com/go-logr/logr v1.4.1 // indirect\n\tgithub.com/go-logr/stdr v1.2.2 // indirect\n\tgithub.com/go-openapi/jsonpointer v0.21.1 // indirect\n\tgithub.com/go-openapi/jsonreference v0.21.0 // indirect\n\tgithub.com/go-openapi/spec v0.21.0 // indirect\n\tgithub.com/go-openapi/swag v0.23.1 // indirect\n\tgithub.com/go-pay/errgroup v0.0.3 // indirect\n\tgithub.com/go-pay/smap v0.0.2 // indirect\n\tgithub.com/go-pay/util v0.0.4 // indirect\n\tgithub.com/go-pay/xtime v0.0.2 // indirect\n\tgithub.com/go-sql-driver/mysql v1.8.1 // indirect\n\tgithub.com/golang-jwt/jwt v3.2.2+incompatible // indirect\n\tgithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect\n\tgithub.com/golang/protobuf v1.5.4 // indirect\n\tgithub.com/google/s2a-go v0.1.7 // indirect\n\tgithub.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect\n\tgithub.com/googleapis/gax-go/v2 v2.12.5 // indirect\n\tgithub.com/gorilla/websocket v1.5.1 // indirect\n\tgithub.com/jackc/pgpassfile v1.0.0 // indirect\n\tgithub.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 // indirect\n\tgithub.com/jackc/pgx/v5 v5.5.5 // indirect\n\tgithub.com/jackc/puddle/v2 v2.2.1 // indirect\n\tgithub.com/jinzhu/copier v0.4.0 // indirect\n\tgithub.com/jinzhu/inflection v1.0.0 // indirect\n\tgithub.com/jinzhu/now v1.1.5 // indirect\n\tgithub.com/josharian/intern v1.0.0 // indirect\n\tgithub.com/mailru/easyjson v0.9.0 // indirect\n\tgithub.com/patrickmn/go-cache v2.1.0+incompatible // indirect\n\tgithub.com/pkg/errors v0.9.1 // indirect\n\tgithub.com/tjfoc/gmsm v1.4.1 // indirect\n\tgo.opencensus.io v0.24.0 // indirect\n\tgo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect\n\tgo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect\n\tgo.opentelemetry.io/otel v1.24.0 // indirect\n\tgo.opentelemetry.io/otel/metric v1.24.0 // indirect\n\tgo.opentelemetry.io/otel/trace v1.24.0 // indirect\n\tgolang.org/x/image v0.18.0 // indirect\n\tgolang.org/x/oauth2 v0.21.0 // indirect\n\tgolang.org/x/sync v0.15.0 // indirect\n\tgolang.org/x/time v0.11.0 // indirect\n\tgolang.org/x/tools v0.33.0 // indirect\n\tgoogle.golang.org/api v0.187.0 // indirect\n\tgoogle.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4 // indirect\n\tgoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d // indirect\n\tgoogle.golang.org/grpc v1.64.1 // indirect\n\tgopkg.in/ini.v1 v1.67.0 // indirect\n\tgorm.io/driver/postgres v1.5.7 // indirect\n)\n\nrequire (\n\tgithub.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible\n\tgithub.com/bytedance/sonic v1.12.6 // indirect\n\tgithub.com/bytedance/sonic/loader v0.2.1 // indirect\n\tgithub.com/cloudwego/base64x v0.1.4 // indirect\n\tgithub.com/cloudwego/iasm v0.2.0 // indirect\n\tgithub.com/gabriel-vasile/mimetype v1.4.7 // indirect\n\tgithub.com/gin-contrib/sse v0.1.0 // indirect\n\tgithub.com/go-playground/locales v0.14.1 // indirect\n\tgithub.com/go-playground/universal-translator v0.18.1 // indirect\n\tgithub.com/go-playground/validator/v10 v10.23.0\n\tgithub.com/go-redis/redis/v8 v8.11.5\n\tgithub.com/goccy/go-json v0.10.4 // indirect\n\tgithub.com/golang-jwt/jwt/v5 v5.2.1\n\tgithub.com/joho/godotenv v1.5.1\n\tgithub.com/json-iterator/go v1.1.12 // indirect\n\tgithub.com/klauspost/cpuid/v2 v2.2.9 // indirect\n\tgithub.com/leodido/go-urn v1.4.0 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect\n\tgithub.com/modern-go/reflect2 v1.0.2 // indirect\n\tgithub.com/pelletier/go-toml/v2 v2.2.3 // indirect\n\tgithub.com/songquanpeng/one-api v0.6.10\n\tgithub.com/swaggo/files v1.0.1\n\tgithub.com/swaggo/gin-swagger v1.6.0\n\tgithub.com/twitchyliquid64/golang-asm v0.15.1 // indirect\n\tgithub.com/ugorji/go/codec v1.2.12 // indirect\n\tgolang.org/x/arch v0.12.0 // indirect\n\tgolang.org/x/crypto v0.39.0 // indirect\n\tgolang.org/x/net v0.40.0 // indirect\n\tgolang.org/x/sys v0.33.0 // indirect\n\tgolang.org/x/text v0.26.0 // indirect\n\tgoogle.golang.org/protobuf v1.36.1 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n\tgorm.io/driver/mysql v1.5.7\n\tgorm.io/driver/sqlite v1.5.7\n)\n"
  },
  {
    "path": "api/go.sum",
    "content": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go/auth v0.6.1 h1:T0Zw1XM5c1GlpN2HYr2s+m3vr1p2wy+8VN+Z1FKxW38=\ncloud.google.com/go/auth v0.6.1/go.mod h1:eFHG7zDzbXHKmjJddFG/rBlcGp6t25SwRUiEQSlO4x4=\ncloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4=\ncloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q=\ncloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=\ncloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=\ncloud.google.com/go/iam v1.1.10 h1:ZSAr64oEhQSClwBL670MsJAW5/RLiC6kfw3Bqmd5ZDI=\ncloud.google.com/go/iam v1.1.10/go.mod h1:iEgMq62sg8zx446GCaijmA2Miwg5o3UbO+nI47WHJps=\nfilippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=\nfilippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=\ngithub.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\ngithub.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=\ngithub.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=\ngithub.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6 h1:eIf+iGJxdU4U9ypaUfbtOWCsZSbTb8AUHvyPrxu6mAA=\ngithub.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6/go.mod h1:4EUIoxs/do24zMOGGqYVWgw0s9NtiylnJglOeEB5UJo=\ngithub.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc=\ngithub.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 h1:zE8vH9C7JiZLNJJQ5OwjU9mSi4T9ef9u3BURT6LCLC8=\ngithub.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5/go.mod h1:tWnyE9AjF8J8qqLk645oUmVUnFybApTQWklQmi5tY6g=\ngithub.com/alibabacloud-go/darabonba-array v0.1.0 h1:vR8s7b1fWAQIjEjWnuF0JiKsCvclSRTfDzZHTYqfufY=\ngithub.com/alibabacloud-go/darabonba-array v0.1.0/go.mod h1:BLKxr0brnggqOJPqT09DFJ8g3fsDshapUD3C3aOEFaI=\ngithub.com/alibabacloud-go/darabonba-encode-util v0.0.2 h1:1uJGrbsGEVqWcWxrS9MyC2NG0Ax+GpOM5gtupki31XE=\ngithub.com/alibabacloud-go/darabonba-encode-util v0.0.2/go.mod h1:JiW9higWHYXm7F4PKuMgEUETNZasrDM6vqVr/Can7H8=\ngithub.com/alibabacloud-go/darabonba-map v0.0.2 h1:qvPnGB4+dJbJIxOOfawxzF3hzMnIpjmafa0qOTp6udc=\ngithub.com/alibabacloud-go/darabonba-map v0.0.2/go.mod h1:28AJaX8FOE/ym8OUFWga+MtEzBunJwQGceGQlvaPGPc=\ngithub.com/alibabacloud-go/darabonba-openapi/v2 v2.0.12/go.mod h1:cgtLEj8i4ddXMcQgq4PnpVQvlzS+y5B+QtdSfmcLM3A=\ngithub.com/alibabacloud-go/darabonba-openapi/v2 v2.1.13 h1:Q00FU3H94Ts0ZIHDmY+fYGgB7dV9D/YX6FGsgorQPgw=\ngithub.com/alibabacloud-go/darabonba-openapi/v2 v2.1.13/go.mod h1:lxFGfobinVsQ49ntjpgWghXmIF0/Sm4+wvBJ1h5RtaE=\ngithub.com/alibabacloud-go/darabonba-signature-util v0.0.7 h1:UzCnKvsjPFzApvODDNEYqBHMFt1w98wC7FOo0InLyxg=\ngithub.com/alibabacloud-go/darabonba-signature-util v0.0.7/go.mod h1:oUzCYV2fcCH797xKdL6BDH8ADIHlzrtKVjeRtunBNTQ=\ngithub.com/alibabacloud-go/darabonba-string v1.0.2 h1:E714wms5ibdzCqGeYJ9JCFywE5nDyvIXIIQbZVFkkqo=\ngithub.com/alibabacloud-go/darabonba-string v1.0.2/go.mod h1:93cTfV3vuPhhEwGGpKKqhVW4jLe7tDpo3LUM0i0g6mA=\ngithub.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY=\ngithub.com/alibabacloud-go/debug v1.0.0/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc=\ngithub.com/alibabacloud-go/debug v1.0.1 h1:MsW9SmUtbb1Fnt3ieC6NNZi6aEwrXfDksD4QA6GSbPg=\ngithub.com/alibabacloud-go/debug v1.0.1/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc=\ngithub.com/alibabacloud-go/dingtalk v1.6.91 h1:K/b5J1IRNdzjYAfnzVE6vlSUrBMk2+VvGZf5Dt9AHx4=\ngithub.com/alibabacloud-go/dingtalk v1.6.91/go.mod h1:mUcgNRgMGQzABtiZtTK8a3b6LwQBQ8t9WsDKzklqVpg=\ngithub.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q=\ngithub.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE=\ngithub.com/alibabacloud-go/gateway-dingtalk v1.0.2 h1:+etjmc64QTmYvHlc6eFkH9y2DOc3UPcyD2nF3IXsVqw=\ngithub.com/alibabacloud-go/gateway-dingtalk v1.0.2/go.mod h1:JUvHpkJtlPFpgJcfXqc9Y4mk2JnoRn5XpKbRz38jJho=\ngithub.com/alibabacloud-go/openapi-util v0.1.0/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws=\ngithub.com/alibabacloud-go/openapi-util v0.1.1 h1:ujGErJjG8ncRW6XtBBMphzHTvCxn4DjrVw4m04HsS28=\ngithub.com/alibabacloud-go/openapi-util v0.1.1/go.mod h1:/UehBSE2cf1gYT43GV4E+RxTdLRzURImCYY0aRmlXpw=\ngithub.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg=\ngithub.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4=\ngithub.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4=\ngithub.com/alibabacloud-go/tea v1.1.11/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4=\ngithub.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A=\ngithub.com/alibabacloud-go/tea v1.1.20/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A=\ngithub.com/alibabacloud-go/tea v1.2.2/go.mod h1:CF3vOzEMAG+bR4WOql8gc2G9H3EkH3ZLAQdpmpXMgwk=\ngithub.com/alibabacloud-go/tea v1.3.13 h1:WhGy6LIXaMbBM6VBYcsDCz6K/TPsT1Ri2hPmmZffZ94=\ngithub.com/alibabacloud-go/tea v1.3.13/go.mod h1:A560v/JTQ1n5zklt2BEpurJzZTI8TUT+Psg2drWlxRg=\ngithub.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE=\ngithub.com/alibabacloud-go/tea-utils/v2 v2.0.1/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=\ngithub.com/alibabacloud-go/tea-utils/v2 v2.0.5/go.mod h1:dL6vbUT35E4F4bFTHL845eUloqaerYBYPsdWR2/jhe4=\ngithub.com/alibabacloud-go/tea-utils/v2 v2.0.6/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I=\ngithub.com/alibabacloud-go/tea-utils/v2 v2.0.7 h1:WDx5qW3Xa5ZgJ1c8NfqJkF6w+AU5wB8835UdhPr6Ax0=\ngithub.com/alibabacloud-go/tea-utils/v2 v2.0.7/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I=\ngithub.com/alibabacloud-go/tea-xml v1.1.3/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=\ngithub.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible h1:8psS8a+wKfiLt1iVDX79F7Y6wUM49Lcha2FMXt4UM8g=\ngithub.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=\ngithub.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=\ngithub.com/aliyun/credentials-go v1.3.1/go.mod h1:8jKYhQuDawt8x2+fusqa1Y6mPxemTsBEN04dgcAcYz0=\ngithub.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmPrib8NVePL3fxM=\ngithub.com/aliyun/credentials-go v1.4.5/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=\ngithub.com/aliyun/credentials-go v1.4.6 h1:CG8rc/nxCNKfXbZWpWDzI9GjF4Tuu3Es14qT8Y0ClOk=\ngithub.com/aliyun/credentials-go v1.4.6/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=\ngithub.com/aws/aws-sdk-go-v2 v1.27.0 h1:7bZWKoXhzI+mMR/HjdMx8ZCC5+6fY0lS5tr0bbgiLlo=\ngithub.com/aws/aws-sdk-go-v2 v1.27.0/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=\ngithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to=\ngithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg=\ngithub.com/aws/aws-sdk-go-v2/credentials v1.17.15 h1:YDexlvDRCA8ems2T5IP1xkMtOZ1uLJOCJdTr0igs5zo=\ngithub.com/aws/aws-sdk-go-v2/credentials v1.17.15/go.mod h1:vxHggqW6hFNaeNC0WyXS3VdyjcV0a4KMUY4dKJ96buU=\ngithub.com/aws/aws-sdk-go-v2/internal/configsources v1.3.7 h1:lf/8VTF2cM+N4SLzaYJERKEWAXq8MOMpZfU6wEPWsPk=\ngithub.com/aws/aws-sdk-go-v2/internal/configsources v1.3.7/go.mod h1:4SjkU7QiqK2M9oozyMzfZ/23LmUY+h3oFqhdeP5OMiI=\ngithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.7 h1:4OYVp0705xu8yjdyoWix0r9wPIRXnIzzOoUpQVHIJ/g=\ngithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.7/go.mod h1:vd7ESTEvI76T2Na050gODNmNU7+OyKrIKroYTu4ABiI=\ngithub.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.8.3 h1:Fihjyd6DeNjcawBEGLH9dkIEUi6AdhucDKPE9nJ4QiY=\ngithub.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.8.3/go.mod h1:opvUj3ismqSCxYc+m4WIjPL0ewZGtvp0ess7cKvBPOQ=\ngithub.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=\ngithub.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=\ngithub.com/bytedance/sonic v1.12.6 h1:/isNmCUF2x3Sh8RAp/4mh4ZGkcFAX/hLrzrK3AvpRzk=\ngithub.com/bytedance/sonic v1.12.6/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk=\ngithub.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=\ngithub.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E=\ngithub.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=\ngithub.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=\ngithub.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=\ngithub.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\ngithub.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=\ngithub.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=\ngithub.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=\ngithub.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=\ngithub.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=\ngithub.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=\ngithub.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=\ngithub.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=\ngithub.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=\ngithub.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=\ngithub.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=\ngithub.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=\ngithub.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=\ngithub.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=\ngithub.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=\ngithub.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=\ngithub.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=\ngithub.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=\ngithub.com/gabriel-vasile/mimetype v1.4.7 h1:SKFKl7kD0RiPdbht0s7hFtjl489WcQ1VyPW8ZzUMYCA=\ngithub.com/gabriel-vasile/mimetype v1.4.7/go.mod h1:GDlAgAyIRT27BhFl53XNAFtfjzOkLaF35JdEG0P7LtU=\ngithub.com/gin-contrib/cors v1.7.4 h1:/fC6/wk7rCRtqKqki8lLr2Xq+hnV49aXDLIuSek9g4k=\ngithub.com/gin-contrib/cors v1.7.4/go.mod h1:vGc/APSgLMlQfEJV5NAzkrAHb0C8DetL3K6QZuvGii0=\ngithub.com/gin-contrib/gzip v1.0.1 h1:HQ8ENHODeLY7a4g1Au/46Z92bdGFl74OhxcZble9WJE=\ngithub.com/gin-contrib/gzip v1.0.1/go.mod h1:njt428fdUNRvjuJf16tZMYZ2Yl+WQB53X5wmhDwXvC4=\ngithub.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=\ngithub.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=\ngithub.com/gin-contrib/static v1.1.2 h1:c3kT4bFkUJn2aoRU3s6XnMjJT8J6nNWJkR0NglqmlZ4=\ngithub.com/gin-contrib/static v1.1.2/go.mod h1:Fw90ozjHCmZBWbgrsqrDvO28YbhKEKzKp8GixhR4yLw=\ngithub.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=\ngithub.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=\ngithub.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=\ngithub.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=\ngithub.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=\ngithub.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=\ngithub.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=\ngithub.com/go-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic=\ngithub.com/go-openapi/jsonpointer v0.21.1/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk=\ngithub.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=\ngithub.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=\ngithub.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY=\ngithub.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk=\ngithub.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU=\ngithub.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0=\ngithub.com/go-pay/crypto v0.0.1 h1:B6InT8CLfSLc6nGRVx9VMJRBBazFMjr293+jl0lLXUY=\ngithub.com/go-pay/crypto v0.0.1/go.mod h1:41oEIvHMKbNcYlWUlRWtsnC6+ASgh7u29z0gJXe5bes=\ngithub.com/go-pay/errgroup v0.0.3 h1:DB4s8e8oWYDyETKQ1y1riMJ7y29zE1uIsMCSjEOFSbU=\ngithub.com/go-pay/errgroup v0.0.3/go.mod h1:0+4b8mvFMS71MIzsaC+gVvB4x37I93lRb2dqrwuU8x8=\ngithub.com/go-pay/gopay v1.5.114 h1:jNYpcylr7WJev6i/MBeer0Z58E0x5NyqG4FfZrar3pQ=\ngithub.com/go-pay/gopay v1.5.114/go.mod h1:p48xvWeepPolZuakAjCeucWynWwW7msoXsqahcoJpKE=\ngithub.com/go-pay/smap v0.0.2 h1:kKflYor5T5FgZltPFBMTFfjJvqYMHr5VnIFSEyhVTcA=\ngithub.com/go-pay/smap v0.0.2/go.mod h1:HW9oAo0okuyDYsbpbj5fJFxnNj/BZorRGFw26SxrNWw=\ngithub.com/go-pay/util v0.0.4 h1:TuwSU9o3Qd7m9v1PbzFuIA/8uO9FJnA6P7neG/NwPyk=\ngithub.com/go-pay/util v0.0.4/go.mod h1:Tsdhs8Ib9J9b4+NKNO1PHh5hWHhlg98PthsX0ckq6PM=\ngithub.com/go-pay/xlog v0.0.3 h1:avyMhCL/JgBHreoGx/am/kHxfs1udDOAeVqbmzP/Yes=\ngithub.com/go-pay/xlog v0.0.3/go.mod h1:mH47xbobrdsSHWsmFtSF5agWbMHFP+tK0ZbVCk5OAEw=\ngithub.com/go-pay/xtime v0.0.2 h1:7YR4/iuELsEHpJ6LUO0SVK80hQxDO9MLCfuVYIiTCRM=\ngithub.com/go-pay/xtime v0.0.2/go.mod h1:W1yRbJaSt4CSBcdAtLBQ8xajiN/Pl5hquGczUcUE9xE=\ngithub.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=\ngithub.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=\ngithub.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=\ngithub.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=\ngithub.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=\ngithub.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=\ngithub.com/go-playground/validator/v10 v10.23.0 h1:/PwmTwZhS0dPkav3cdK9kV1FsAmrL8sThn8IHr/sO+o=\ngithub.com/go-playground/validator/v10 v10.23.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=\ngithub.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=\ngithub.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=\ngithub.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=\ngithub.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=\ngithub.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=\ngithub.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM=\ngithub.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=\ngithub.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=\ngithub.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=\ngithub.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=\ngithub.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=\ngithub.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=\ngithub.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=\ngithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\ngithub.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\ngithub.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=\ngithub.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=\ngithub.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=\ngithub.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=\ngithub.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=\ngithub.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=\ngithub.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\ngithub.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\ngithub.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=\ngithub.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=\ngithub.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=\ngithub.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=\ngithub.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=\ngithub.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=\ngithub.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\ngithub.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=\ngithub.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=\ngithub.com/googleapis/gax-go/v2 v2.12.5 h1:8gw9KZK8TiVKB6q3zHY3SBzLnrGp6HQjyfYBYGmXdxA=\ngithub.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E=\ngithub.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=\ngithub.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=\ngithub.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g=\ngithub.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=\ngithub.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=\ngithub.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=\ngithub.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=\ngithub.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=\ngithub.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=\ngithub.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=\ngithub.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=\ngithub.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=\ngithub.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=\ngithub.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=\ngithub.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=\ngithub.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=\ngithub.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=\ngithub.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=\ngithub.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=\ngithub.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=\ngithub.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=\ngithub.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=\ngithub.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible h1:jdpOPRN1zP63Td1hDQbZW73xKmzDvZHzVdNYxhnTMDA=\ngithub.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible/go.mod h1:1c7szIrayyPPB/987hsnvNzLushdWf4o/79s3P08L8A=\ngithub.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=\ngithub.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=\ngithub.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\ngithub.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=\ngithub.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=\ngithub.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=\ngithub.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=\ngithub.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=\ngithub.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY=\ngithub.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8=\ngithub.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=\ngithub.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=\ngithub.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=\ngithub.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=\ngithub.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=\ngithub.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=\ngithub.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=\ngithub.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=\ngithub.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=\ngithub.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=\ngithub.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=\ngithub.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=\ngithub.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=\ngithub.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=\ngithub.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=\ngithub.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=\ngithub.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=\ngithub.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=\ngithub.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=\ngithub.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=\ngithub.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=\ngithub.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=\ngithub.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=\ngithub.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=\ngithub.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pkoukk/tiktoken-go v0.1.7 h1:qOBHXX4PHtvIvmOtyg1EeKlwFRiMKAcoMp4Q+bLQDmw=\ngithub.com/pkoukk/tiktoken-go v0.1.7/go.mod h1:9NiV+i9mJKGj1rYOT+njbv+ZwA/zJxYdewGl6qVatpg=\ngithub.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\ngithub.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=\ngithub.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=\ngithub.com/smarty/assertions v1.15.0 h1:cR//PqUBUiQRakZWqBiFFQ9wb8emQGDb0HeGdqGByCY=\ngithub.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+E8C6HtKdec=\ngithub.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=\ngithub.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=\ngithub.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=\ngithub.com/smartystreets/goconvey v1.8.1 h1:qGjIddxOk4grTu9JPOU31tVfq3cNdBlNa5sSznIX1xY=\ngithub.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60=\ngithub.com/songquanpeng/one-api v0.6.10 h1:oBUcwet8zinHZ5AEYu8OYQaFkcXOKyImsM0X4JfeEZo=\ngithub.com/songquanpeng/one-api v0.6.10/go.mod h1:IuuHlpeT9urxzxNgRqRqZFOuDlRZ6HLULx/82MX6hXA=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=\ngithub.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=\ngithub.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=\ngithub.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=\ngithub.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=\ngithub.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=\ngithub.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=\ngithub.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=\ngithub.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=\ngithub.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE=\ngithub.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg=\ngithub.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M=\ngithub.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo=\ngithub.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A=\ngithub.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg=\ngithub.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.34 h1:wY3i2D1lp4ggOzYtDW60NxknxaU/DBUGT6DAf29p8hc=\ngithub.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.34/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=\ngithub.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=\ngithub.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=\ngithub.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=\ngithub.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=\ngithub.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=\ngithub.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=\ngithub.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=\ngithub.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=\ngo.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=\ngo.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=\ngo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=\ngo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=\ngo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=\ngo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=\ngo.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=\ngo.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=\ngo.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=\ngo.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=\ngo.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=\ngo.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=\ngolang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg=\ngolang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=\ngolang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=\ngolang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=\ngolang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=\ngolang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=\ngolang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=\ngolang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=\ngolang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=\ngolang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=\ngolang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=\ngolang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ=\ngolang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=\ngolang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\ngolang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=\ngolang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=\ngolang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=\ngolang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=\ngolang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=\ngolang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=\ngolang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=\ngolang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=\ngolang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=\ngolang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=\ngolang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=\ngolang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=\ngolang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=\ngolang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=\ngolang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=\ngolang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=\ngolang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=\ngolang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=\ngolang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=\ngolang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=\ngolang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\ngolang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=\ngolang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=\ngolang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=\ngolang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=\ngolang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=\ngolang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=\ngolang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=\ngolang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=\ngolang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=\ngolang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=\ngolang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=\ngolang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=\ngolang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=\ngolang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=\ngolang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=\ngolang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=\ngolang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=\ngolang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=\ngolang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=\ngolang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=\ngolang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=\ngolang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=\ngolang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=\ngolang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=\ngolang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=\ngolang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=\ngolang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=\ngolang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=\ngolang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=\ngolang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=\ngolang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=\ngolang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=\ngolang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=\ngolang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=\ngolang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=\ngolang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngoogle.golang.org/api v0.187.0 h1:Mxs7VATVC2v7CY+7Xwm4ndkX71hpElcvx0D1Ji/p1eo=\ngoogle.golang.org/api v0.187.0/go.mod h1:KIHlTc4x7N7gKKuVsdmfBXN13yEEWXWFURWY6SBp2gk=\ngoogle.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=\ngoogle.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=\ngoogle.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\ngoogle.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4 h1:MuYw1wJzT+ZkybKfaOXKp5hJiZDn2iHaXRw0mRYdHSc=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4/go.mod h1:px9SlOOZBg1wM1zdnr8jEL4CNGUBZ+ZKYtNPApNQc4c=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d h1:k3zyW3BYYR30e8v3x0bTDdE9vpYFjZHK+HcyqkrppWk=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY=\ngoogle.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=\ngoogle.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=\ngoogle.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=\ngoogle.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\ngoogle.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\ngoogle.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=\ngoogle.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA=\ngoogle.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0=\ngoogle.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=\ngoogle.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=\ngoogle.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=\ngoogle.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=\ngoogle.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=\ngoogle.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=\ngoogle.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=\ngoogle.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\ngopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=\ngopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=\ngopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=\ngopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=\ngopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=\ngopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=\ngopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=\ngorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=\ngorm.io/driver/postgres v1.5.7 h1:8ptbNJTDbEmhdr62uReG5BGkdQyeasu/FZHxI0IMGnM=\ngorm.io/driver/postgres v1.5.7/go.mod h1:3e019WlBaYI5o5LIdNV+LyxCMNtLOQETBXL2h4chKpA=\ngorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=\ngorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=\ngorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=\ngorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s=\ngorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=\nhonnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nnullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=\n"
  },
  {
    "path": "api/main.go",
    "content": "package main\n\nimport (\n\t\"embed\"\n\t\"os\"\n\n\t\"github.com/53AI/53AIHub/common\"\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/router\"\n\thub_openai \"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\t\"github.com/53AI/53AIHub/tasks\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/client\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n)\n\n//go:embed all:static/front all:static/console static/images all:static/libs\nvar buildFS embed.FS\n\nfunc main() {\n\tvar err error\n\tcommon.Init()\n\tmodel.InitDB()\n\tclient.Init()\n\topenai.InitTokenEncoders()\n\thub_openai.InitTokenEncoders()\n\n\t// Initialize system (create default enterprise, user group, and admin if needed)\n\tif err := model.InitializeSystem(); err != nil {\n\t\tlogger.FatalLog(\"Failed to initialize system: \" + err.Error())\n\t}\n\n\ttasks.Start()\n\n\tlogLevel := os.Getenv(\"LOG_LEVEL\")\n\tif logLevel == \"\" {\n\t\tlogLevel = \"INFO\"\n\t}\n\n\tlogger.SetLogLevel(logLevel)\n\n\tif logLevel == \"DEBUG\" {\n\t\tgin.SetMode(gin.DebugMode)\n\t} else {\n\t\tgin.SetMode(gin.ReleaseMode)\n\t}\n\tvar port = os.Getenv(\"PORT\")\n\tif port == \"\" {\n\t\tport = \"80\"\n\t}\n\tlogger.SysLogf(\"\\033[94m\"+`\n                    @                \n                   ###                \n           /###################\\      \n          |#####################|     \n        ##|#####################|##  \n       ###|####    #####    ####|###  \n        ##|#####################|##  \n          |#####################|     \n           \\###################/      \n                  ######              \n                  ###                 \n                  @\n  server started on http://localhost:%s\n\t\t`+\"\\033[0m\", port)\n\n\tserver := gin.New()\n\n\trouter.SetRouter(server, buildFS)\n\terr = server.Run(\":\" + port)\n\tif err != nil {\n\t\tlogger.FatalLog(\"failed to start HTTP server: \" + err.Error())\n\t}\n}\n"
  },
  {
    "path": "api/middleware/auth.go",
    "content": "package middleware\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/session\"\n\t\"github.com/53AI/53AIHub/common/utils/jwt\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc UserTokenAuth(role int64) func(c *gin.Context) {\n\treturn func(c *gin.Context) {\n\t\ttoken := c.Request.Header.Get(\"Authorization\")\n\t\ttoken = strings.Replace(token, \"Bearer \", \"\", 1)\n\t\tif token == \"\" {\n\t\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(nil))\n\t\t\tc.Abort()\n\t\t\treturn\n\t\t}\n\t\tuser, err := HandleTokenAuth(token, role)\n\t\tif err != nil {\n\t\t\tswitch err.Error() {\n\t\t\tcase \"token is expired\":\n\t\t\t\tc.JSON(http.StatusUnauthorized, model.TokenExpiredError.ToResponse(nil))\n\t\t\tcase \"token has invalid claims\", \"forbidden access\":\n\t\t\t\tc.JSON(http.StatusUnauthorized, model.ForbiddenError.ToResponse(nil))\n\t\t\tdefault:\n\t\t\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToResponse(nil))\n\t\t\t}\n\n\t\t\tc.Abort()\n\t\t\treturn\n\t\t}\n\n\t\tc.Set(session.SESSION_USER_ID, user.UserID)\n\t\tc.Set(session.SESSION_USER_NICKNAME, user.Nickname)\n\t\tc.Set(session.SESSION_USER_ROLE, user.Role)\n\t\tc.Set(session.SESSION_USER_GROUP_ID, user.GroupId)\n\t\tc.Set(session.ENV_EID, user.Eid)\n\t\tc.Set(session.SESSION_SAAS_USER, false)\n\t}\n}\n\nfunc HandleTokenAuth(token string, role int64) (user *model.User, err error) {\n\tuser_id, _, err := jwt.UserParseJWT(token)\n\tif err != nil {\n\t\tif strings.Contains(err.Error(), \"token is expired\") {\n\t\t\treturn nil, errors.New(\"token is expired\")\n\t\t} else if strings.Contains(err.Error(), \"token has invalid claims\") {\n\t\t\treturn nil, errors.New(\"token has invalid claims\")\n\t\t} else {\n\t\t\treturn nil, errors.New(\"unauthorized access\")\n\t\t}\n\t}\n\n\tuser = model.ValidateAccessToken(token)\n\tif user == nil || user.UserID != user_id {\n\t\treturn nil, errors.New(\"not found\")\n\t}\n\n\tif user.Status == model.UserStatusDisabled {\n\t\treturn nil, errors.New(\"forbidden access\")\n\t}\n\n\tif role > 0 && user.Role < role {\n\t\treturn nil, errors.New(\"forbidden access\")\n\t}\n\n\treturn user, nil\n}\n"
  },
  {
    "path": "api/middleware/cors.go",
    "content": "package middleware\n\nimport (\n\t\"github.com/gin-contrib/cors\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc CORS() gin.HandlerFunc {\n\tconfig := cors.DefaultConfig()\n\tconfig.AllowAllOrigins = true\n\tconfig.AllowCredentials = true\n\tconfig.AllowMethods = []string{\"GET\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\", \"PATCH\"}\n\tconfig.AllowHeaders = []string{\"*\"}\n\treturn cors.New(config)\n}\n"
  },
  {
    "path": "api/middleware/distributor.go",
    "content": "package middleware\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/53AI/53AIHub/common/ctxkey\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/channeltype\"\n)\n\ntype ModelRequest struct {\n\tModel string `json:\"model\" form:\"model\"`\n}\n\nfunc SetupContextForSelectedChannel(c *gin.Context, channel *model.Channel, modelName string) {\n\tc.Set(ctxkey.Channel, channel.Type)\n\tc.Set(ctxkey.ChannelId, channel.ChannelID)\n\tc.Set(ctxkey.ChannelName, channel.Name)\n\t// if channel.SystemPrompt != nil && *channel.SystemPrompt != \"\" {\n\t// \tc.Set(ctxkey.SystemPrompt, *channel.SystemPrompt)\n\t// }\n\tc.Set(ctxkey.ModelMapping, channel.GetModelMapping())\n\tc.Set(ctxkey.OriginalModel, modelName) // for retry\n\n\t// Check if channel has provider_id and use provider's credentials for coze-studio\n\tapiKey := channel.Key\n\tbaseURL := channel.GetBaseURL()\n\n\tif channel.ProviderID != 0 {\n\t\tprovider, err := model.GetProviderByID(channel.ProviderID, channel.Eid)\n\t\tif err == nil {\n\t\t\t// For coze-studio, use provider's AccessToken and BaseURL\n\t\t\tif provider.ProviderType == model.ProviderTypeCozeStudio {\n\t\t\t\tapiKey = provider.AccessToken\n\t\t\t\tif provider.BaseURL != nil && *provider.BaseURL != \"\" {\n\t\t\t\t\tbaseURL = *provider.BaseURL\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tc.Request.Header.Set(\"Authorization\", fmt.Sprintf(\"Bearer %s\", apiKey))\n\tc.Set(ctxkey.BaseURL, baseURL)\n\tcfg, _ := channel.LoadConfig()\n\t// this is for backward compatibility\n\tif channel.Other != nil {\n\t\tswitch channel.Type {\n\t\tcase channeltype.Azure:\n\t\t\tif cfg.APIVersion == \"\" {\n\t\t\t\tcfg.APIVersion = *channel.Other\n\t\t\t}\n\t\tcase channeltype.Xunfei:\n\t\t\tif cfg.APIVersion == \"\" {\n\t\t\t\tcfg.APIVersion = *channel.Other\n\t\t\t}\n\t\tcase channeltype.Gemini:\n\t\t\tif cfg.APIVersion == \"\" {\n\t\t\t\tcfg.APIVersion = *channel.Other\n\t\t\t}\n\t\tcase channeltype.AIProxyLibrary:\n\t\t\tif cfg.LibraryID == \"\" {\n\t\t\t\tcfg.LibraryID = *channel.Other\n\t\t\t}\n\t\tcase channeltype.Ali:\n\t\t\tif cfg.Plugin == \"\" {\n\t\t\t\tcfg.Plugin = *channel.Other\n\t\t\t}\n\t\t}\n\t}\n\tc.Set(ctxkey.Config, cfg)\n}\n"
  },
  {
    "path": "api/middleware/logger.go",
    "content": "package middleware\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/session\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc Logger() gin.HandlerFunc {\n\treturn func(c *gin.Context) {\n\t\t// 保存请求协议和域名\n\t\tif c.Request.URL.Scheme != \"\" {\n\t\t\tc.Set(session.SESSION_REQUEST_PROTOCOL, c.Request.URL.Scheme)\n\t\t} else {\n\t\t\tc.Set(session.SESSION_REQUEST_PROTOCOL, \"http\")\n\t\t}\n\t\tc.Set(session.SESSION_REQUEST_DOMAIN, c.Request.Host)\n\n\t\t// 记录请求开始时间\n\t\tstart := time.Now()\n\n\t\t// 处理请求\n\t\tc.Next()\n\n\t\t// 计算请求耗时\n\t\tduration := time.Since(start)\n\n\t\t// 记录日志\n\t\tfmt.Printf(\"Method: %s | Path: %s | Status: %d | Duration: %v\\n\",\n\t\t\tc.Request.Method,\n\t\t\tc.Request.URL.Path,\n\t\t\tc.Writer.Status(),\n\t\t\tduration,\n\t\t)\n\t}\n}\n"
  },
  {
    "path": "api/middleware/relay_auth.go",
    "content": "package middleware\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common\"\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/session\"\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n\t\"github.com/53AI/53AIHub/common/utils/jwt\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc RelayTokenAuth() func(c *gin.Context) {\n\treturn func(c *gin.Context) {\n\t\ttoken := c.Request.Header.Get(\"Authorization\")\n\t\ttoken = strings.Replace(token, \"Bearer \", \"\", 1)\n\t\tif token == \"\" {\n\t\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToOpenAIErrorRespone(nil))\n\t\t\tc.Abort()\n\t\t\treturn\n\t\t}\n\n\t\tuser_id, eid, err := jwt.UserParseJWT(token)\n\t\tif err != nil {\n\t\t\tif strings.Contains(err.Error(), \"token is expired\") {\n\t\t\t\tc.JSON(http.StatusUnauthorized, model.TokenExpiredError.ToOpenAIErrorRespone(nil))\n\t\t\t} else {\n\t\t\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToOpenAIErrorRespone(nil))\n\t\t\t}\n\t\t\tc.Abort()\n\t\t\treturn\n\t\t}\n\n\t\tuser := model.ValidateAccessToken(token)\n\t\tif user.UserID != user_id {\n\t\t\tc.JSON(http.StatusUnauthorized, model.UnauthorizedError.ToOpenAIErrorRespone(nil))\n\t\t\tc.Abort()\n\t\t\treturn\n\t\t}\n\n\t\tc.Set(session.SESSION_USER_ID, user_id)\n\t\tc.Set(session.SESSION_USER_ROLE, user.Role)\n\t\tc.Set(session.SESSION_USER_GROUP_ID, user.GroupId)\n\t\tc.Set(session.ENV_EID, eid)\n\n\t\t// 读取原始请求体\n\t\tbodyBytes, err := c.GetRawData()\n\t\tif err != nil {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToOpenAIErrorRespone(err))\n\t\t\tc.Abort()\n\t\t\treturn\n\t\t}\n\n\t\tvar requestData map[string]interface{}\n\t\tif err := json.Unmarshal(bodyBytes, &requestData); err != nil {\n\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToOpenAIErrorRespone(err))\n\t\t\tc.Abort()\n\t\t\treturn\n\t\t}\n\n\t\tc.Request.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))\n\n\t\tif modelValue, exists := requestData[\"model\"]; exists {\n\t\t\tmodelStr, ok := modelValue.(string)\n\t\t\tif !ok {\n\t\t\t\tc.JSON(http.StatusUnauthorized, model.ParamError.ToOpenAIErrorRespone(nil))\n\t\t\t\tc.Abort()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tc.Set(session.SESSION_AGENT_MODEL, modelStr)\n\t\t\tif conversationIdValue, exists := requestData[\"conversation_id\"]; exists {\n\t\t\t\tif conversationIdValue != nil {\n\t\t\t\t\tvar conversationId int64\n\t\t\t\t\tswitch v := conversationIdValue.(type) {\n\t\t\t\t\tcase float64:\n\t\t\t\t\t\tconversationId = int64(v)\n\t\t\t\t\tcase int64:\n\t\t\t\t\t\tconversationId = v\n\t\t\t\t\t}\n\t\t\t\t\t// TODO: check conversation_id is exist and belong to user_id\n\t\t\t\t\tconversation, err := model.GetConversationByIdAndUserId(eid, conversationId, user_id)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tc.JSON(http.StatusNotFound, model.NotFound.ToOpenAIErrorRespone(errors.New(\"Conversation not found\")))\n\t\t\t\t\t\tc.Abort()\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tc.Set(session.SESSION_CONVERSATION_ID, conversationId)\n\t\t\t\t\tc.Set(session.SESSION_CONVERSATION, conversation)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif strings.HasPrefix(modelStr, \"agent-\") {\n\t\t\t\tagentIDStr := strings.TrimPrefix(modelStr, \"agent-\")\n\t\t\t\tagentID, err := strconv.ParseInt(agentIDStr, 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\tc.JSON(http.StatusBadRequest, model.ParamError.ToOpenAIErrorRespone(errors.New(\"AgentId Error\")))\n\t\t\t\t\tc.Abort()\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tagent, err := model.GetAgentByID(eid, agentID)\n\t\t\t\tif err != nil {\n\t\t\t\t\tc.JSON(http.StatusNotFound, model.NotFound.ToOpenAIErrorRespone(\"Agent not found\"))\n\t\t\t\t\tc.Abort()\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif !common.IsAdmin(c) {\n\t\t\t\t\tagentUserGroupIds, err := agent.GetUserGroupIds()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tc.JSON(http.StatusInternalServerError, model.NotFound.ToOpenAIErrorRespone(err))\n\t\t\t\t\t\tc.Abort()\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tuserGroupIds, err := user.GetUserGroupIds()\n\t\t\t\t\tif !helper.HasIntersection(agentUserGroupIds, userGroupIds) {\n\t\t\t\t\t\tc.JSON(http.StatusForbidden, model.AgentAuthError.ToOpenAIErrorRespone(nil))\n\t\t\t\t\t\tc.Abort()\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlogger.SysLogf(\"Admin user access agent: %d\", agent.AgentID)\n\t\t\t\t}\n\n\t\t\t\tc.Set(session.SESSION_AGENT_ID, agentID)\n\t\t\t\tc.Set(session.SESSION_AGENT, agent)\n\t\t\t\tlogger.SysLogf(\"Agent ID: %d\", agent.AgentID)\n\t\t\t}\n\t\t}\n\t\tc.Next()\n\t}\n}\n"
  },
  {
    "path": "api/model/agent.go",
    "content": "package model\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"strconv\"\n)\n\ntype Agent struct {\n\tAgentID           int64   `json:\"agent_id\" gorm:\"primaryKey;autoIncrement\"`\n\tEid               int64   `json:\"eid\" gorm:\"not null;index\"`\n\tName              string  `json:\"name\" gorm:\"not null\"`\n\tLogo              string  `json:\"logo\" gorm:\"not null\"`\n\tSort              int     `json:\"sort\" gorm:\"default:0\"`\n\tDescription       string  `json:\"description\" gorm:\"not null\"`\n\tChannelType       int     `json:\"channel_type\" gorm:\"default:0\"`\n\tModel             string  `json:\"model\" gorm:\"not null\"`\n\tPrompt            string  `json:\"prompt\" gorm:\"not null\"`\n\tConfigs           string  `json:\"configs\" gorm:\"not null;type:text\"`\n\tTools             string  `json:\"tools\" gorm:\"not null;type:text\"`\n\tGroupID           int64   `json:\"group_id\" gorm:\"type:int;default:0;not null\"`\n\tUseCases          string  `json:\"use_cases\" gorm:\"not null;type:text\"`\n\tCreatedBy         int64   `json:\"created_by\" gorm:\"not null\"`\n\tCustomConfig      string  `json:\"custom_config\" gorm:\"not null;type:text\"`\n\tSettings          string  `json:\"settings\" gorm:\"not null;type:text\"`\n\tUserGroupIds      []int64 `json:\"user_group_ids\" gorm:\"-\"`\n\tEnable            bool    `json:\"enable\" gorm:\"default:false;comment:enable status\"`\n\tConversationCount int64   `json:\"conversation_count\" gorm:\"-\"`\n\tAgentType         int     `json:\"agent_type\" gorm:\"default:0\"`\n\tBaseModel\n}\n\nconst (\n\tAgentTypeApp      = 0\n\tAgentTypeWorkflow = 1\n)\n\nfunc (agent *Agent) Create() error {\n\tif agent.Eid == 0 {\n\t\treturn errors.New(\"eid is empty\")\n\t}\n\t// check if name exists\n\tvar count int64\n\tDB.Model(&Agent{}).Where(\"eid = ? AND name = ?\", agent.Eid, agent.Name).Count(&count)\n\tif count > 0 {\n\t\treturn errors.New(\"name already exists\")\n\t}\n\n\tresult := DB.Create(agent)\n\tif result.Error != nil {\n\t\treturn result.Error\n\t}\n\n\treturn nil\n}\n\nfunc (agent *Agent) Update() error {\n\terr := DB.Model(agent).Updates(agent).Error\n\treturn err\n}\n\nfunc (agent *Agent) Delete() error {\n\terr := DB.Delete(agent).Error\n\treturn err\n}\n\nfunc GetAgentByID(eid int64, agentID int64) (*Agent, error) {\n\tvar agent Agent\n\terr := DB.Where(\"eid = ? AND agent_id = ?\", eid, agentID).First(&agent).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &agent, nil\n}\n\nfunc GetAgentListWithIDs(eid int64, keyword string, group_id int64, permittedAgentIDs []int64, channel_types []int, agent_types []int, offset int, limit int) (count int64, agents []*Agent, err error) {\n\tdb := DB.Model(&Agent{}).Where(\"eid = ?\", eid)\n\tif keyword != \"\" {\n\t\tdb = db.Where(\"name LIKE ?\", \"%\"+keyword+\"%\")\n\t}\n\n\tif group_id != 0 {\n\t\tdb = db.Where(\"group_id =?\", group_id)\n\t}\n\n\tif len(channel_types) > 0 {\n\t\tdb = db.Where(\"channel_type IN?\", channel_types)\n\t}\n\n\tif len(agent_types) > 0 {\n\t\tdb = db.Where(\"agent_type IN?\", agent_types)\n\t}\n\n\tif permittedAgentIDs != nil {\n\t\tif len(permittedAgentIDs) == 0 {\n\t\t\treturn 0, []*Agent{}, nil\n\t\t}\n\t\tdb = db.Where(\"agent_id IN ?\", permittedAgentIDs)\n\t}\n\n\tdb.Count(&count)\n\n\terr = db.Offset(offset).Limit(limit).Order(\"sort DESC\").Order(\"agent_id DESC\").Find(&agents).Error\n\n\treturn count, agents, err\n}\n\nfunc GetAvailableAgentList(eid int64, agent_types []int, offset int, limit int) (count int64, agents []*Agent, err error) {\n\tdb := DB.Model(&Agent{}).Where(\"eid = ?\", eid).\n\t\tWhere(\"Enable = ?\", true)\n\n\tif len(agent_types) > 0 {\n\t\tdb = db.Where(\"agent_type IN?\", agent_types)\n\t}\n\n\tdb.Count(&count)\n\n\terr = db.Offset(offset).Limit(limit).Order(\"sort DESC\").Order(\"agent_id DESC\").Find(&agents).Error\n\n\treturn count, agents, err\n}\n\nfunc (a *Agent) GetUserGroupIds() ([]int64, error) {\n\tvar permissions []ResourcePermission\n\tgroupIds := make([]int64, 0)\n\tseen := make(map[int64]bool)\n\n\terr := DB.Where(\"resource_id = ? AND resource_type = ?\", a.AgentID, ResourceTypeAgent).Find(&permissions).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, p := range permissions {\n\t\tif !seen[p.GroupID] {\n\t\t\tseen[p.GroupID] = true\n\t\t\tgroupIds = append(groupIds, p.GroupID)\n\t\t}\n\t}\n\n\treturn groupIds, nil\n}\n\n// LoadUserGroupIds\nfunc (a *Agent) LoadUserGroupIds() error {\n\tids, err := a.GetUserGroupIds()\n\tif err != nil {\n\t\treturn err\n\t}\n\ta.UserGroupIds = ids\n\treturn nil\n}\n\nfunc (a *Agent) LoadConversationCount() error {\n\tvar count int64\n\terr := DB.Model(&Conversation{}).Where(\"agent_id =?\", a.AgentID).Count(&count).Error\n\tif err != nil {\n\t\treturn err\n\t}\n\ta.ConversationCount = count\n\treturn nil\n}\n\nfunc UpdateAgentStatus(eid, agentID int64, enable *bool) error {\n\treturn DB.Model(&Agent{}).\n\t\tWhere(\"eid = ? AND agent_id = ?\", eid, agentID).\n\t\tUpdate(\"enable\", enable).Error\n}\n\nfunc GetAgentCountByEID(eid int64) (int64, error) {\n\tvar count int64\n\terr := DB.Model(&Agent{}).Where(\"eid =?\", eid).Count(&count).Error\n\treturn count, err\n}\n\nfunc (a *Agent) GetProviderID() int64 {\n\tif a.CustomConfig == \"\" {\n\t\treturn 0\n\t}\n\n\tvar config map[string]interface{}\n\tif err := json.Unmarshal([]byte(a.CustomConfig), &config); err != nil {\n\t\treturn 0\n\t}\n\n\tif providerID, exists := config[\"provider_id\"]; exists {\n\t\tswitch v := providerID.(type) {\n\t\tcase float64:\n\t\t\treturn int64(v)\n\t\tcase int:\n\t\t\treturn int64(v)\n\t\tcase int64:\n\t\t\treturn v\n\t\tcase string:\n\t\t\t// Try to parse string as number\n\t\t\tif num, err := strconv.ParseInt(v, 10, 64); err == nil {\n\t\t\t\treturn num\n\t\t\t}\n\t\t}\n\t}\n\n\treturn 0\n}\n"
  },
  {
    "path": "api/model/ai_link.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\t\"log\"\n)\n\ntype AILink struct {\n\tID          int64  `json:\"id\" gorm:\"primaryKey;autoIncrement\"`\n\tEid         int64  `json:\"eid\" gorm:\"not null;index\" example:\"1\"`\n\tGroupID     int64  `json:\"group_id\" gorm:\"not null;index\" example:\"1\"`\n\tName        string `json:\"name\" gorm:\"not null\" example:\"ai_link_name\"`\n\tLogo        string `json:\"logo\" gorm:\"not null\" example:\"logo_url\"`\n\tURL         string `json:\"url\" gorm:\"not null\" example:\"ai_link_url\"`\n\tDescription string `json:\"description\" gorm:\"not null\" example:\"ai_link_description\"`\n\tSort        int64  `json:\"sort\" gorm:\"not null; default:0\" example:\"0\"`\n\tCreatedBy   int64  `json:\"created_by\" gorm:\"not null\" example:\"1\"`\n\tBaseModel\n\t// 字符串字段存 共享账号（账号、密码、备注）\n\tSharedAccount   string  `json:\"shared_account\" gorm:\"not null\" example:\"[{'account':'admin', 'password':'<PASSWORD>', 'remark':''}]\"`\n\tHasShareAccount bool    `json:\"has_share_account\" gorm:\"-\"`\n\tUserGroupIds    []int64 `json:\"user_group_ids\" gorm:\"-\"`\n}\n\nfunc (aiLink *AILink) CheckGroup() error {\n\tif aiLink.GroupID == 0 {\n\t\treturn nil\n\t}\n\texist, _ := ExistsGroupByIDAndType(aiLink.Eid, aiLink.GroupID, AI_LINKS_TYPE)\n\tif !exist {\n\t\treturn errors.New(\"group not exist\")\n\t}\n\treturn nil\n}\n\nfunc CreateAILink(aiLink *AILink) error {\n\terr := aiLink.CheckGroup()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn DB.Create(aiLink).Error\n}\n\nfunc DeleteAILinkByID(id int64) error {\n\treturn DB.Where(\"id = ?\", id).Delete(&AILink{}).Error\n}\n\nfunc UpdateAILink(aiLink *AILink) error {\n\terr := aiLink.CheckGroup()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn DB.Model(aiLink).\n\t\tSelect(\"name\", \"group_id\", \"logo\", \"url\", \"description\", \"sort\", \"updated_at\", \"shared_account\").\n\t\tUpdates(aiLink).Error\n}\n\nfunc GetAILinkByID(id int64) (*AILink, error) {\n\tvar aiLink AILink\n\tresult := DB.Where(\"id = ?\", id).First(&aiLink)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\treturn &aiLink, nil\n}\n\nfunc (aiLink *AILink) LoadUserGroupIds() error {\n\tvar userGroupIds []int64\n\tif err := DB.Model(&ResourcePermission{}).\n\t\tWhere(\"resource_id = ? AND resource_type = ?\", aiLink.ID, ResourceTypeAILink).\n\t\tPluck(\"group_id\", &userGroupIds).Error; err != nil {\n\t\treturn err\n\t}\n\taiLink.UserGroupIds = userGroupIds\n\treturn nil\n}\n\nfunc GetAILinksByEidAndGroupId(eid int64, groupID int64) ([]AILink, error) {\n\tvar aiLinks []AILink\n\tif err := DB.Where(\"eid =? AND group_id =?\", eid, groupID).\n\t\tSelect(\"ai_links.id, ai_links.eid, ai_links.group_id, ai_links.name, ai_links.logo, ai_links.url, ai_links.description, ai_links.sort, ai_links.created_by, ai_links.created_time, ai_links.updated_time, ai_links.shared_account\").\n\t\tOrder(\"sort DESC\").Find(&aiLinks).Error; err != nil {\n\t\treturn nil, err\n\t}\n\tfor i := range aiLinks {\n\t\terr := aiLinks[i].LoadUserGroupIds()\n\t\tif err != nil {\n\t\t\taiLinks[i].UserGroupIds = []int64{}\n\t\t}\n\t\taiLinks[i].LoadHasSharedAccount()\n\t\taiLinks[i].SharedAccount = \"\"\n\t}\n\treturn aiLinks, nil\n}\n\nfunc GetAILinksGroupedBySort(eid int64) ([]AILink, error) {\n\ttype queryResult struct {\n\t\tGroupSort int64 `gorm:\"column:group_sort\"`\n\t\tAILink\n\t}\n\n\tvar results []queryResult\n\terr := DB.Table(\"groups\").\n\t\tSelect(\"groups.sort AS group_sort, ai_links.id, ai_links.eid, ai_links.group_id, ai_links.name, ai_links.logo, ai_links.url, ai_links.description, ai_links.sort, ai_links.created_by, ai_links.created_time, ai_links.updated_time, ai_links.shared_account\").\n\t\tJoins(\"JOIN ai_links ON groups.group_id = ai_links.group_id AND groups.eid = ai_links.eid\").\n\t\tWhere(\"ai_links.eid = ?\", eid).\n\t\tOrder(\"group_sort DESC, ai_links.sort DESC\").\n\t\tScan(&results).Error\n\n\tif err != nil {\n\t\tlog.Printf(\"GetAILinksGroupedBySort failed: %v\", err)\n\t\treturn nil, err\n\t}\n\n\taiLinks := make([]AILink, 0, len(results))\n\tfor _, r := range results {\n\t\terr := r.AILink.LoadUserGroupIds()\n\t\tif err != nil {\n\t\t\tr.AILink.UserGroupIds = []int64{}\n\t\t}\n\t\tr.AILink.LoadHasSharedAccount()\n\t\tr.AILink.SharedAccount = \"\"\n\t\taiLinks = append(aiLinks, r.AILink)\n\t}\n\treturn aiLinks, nil\n}\n\nfunc GetAILinksByEidAndGroupIdWithKeyword(eid int64, groupID int64, keyword string) ([]AILink, error) {\n\tvar aiLinks []AILink\n\tif err := DB.Where(\"eid = ? AND group_id = ? AND name LIKE ?\", eid, groupID, \"%\"+keyword+\"%\").\n\t\tSelect(\"ai_links.id, ai_links.eid, ai_links.group_id, ai_links.name, ai_links.logo, ai_links.url, ai_links.description, ai_links.sort, ai_links.created_by, ai_links.created_time, ai_links.updated_time, ai_links.shared_account\").\n\t\tOrder(\"sort DESC\").Find(&aiLinks).Error; err != nil {\n\t\treturn nil, err\n\t}\n\tfor i := range aiLinks {\n\t\terr := aiLinks[i].LoadUserGroupIds()\n\t\tif err != nil {\n\t\t\taiLinks[i].UserGroupIds = []int64{}\n\t\t}\n\t\taiLinks[i].LoadHasSharedAccount()\n\t\taiLinks[i].SharedAccount = \"\"\n\t}\n\treturn aiLinks, nil\n}\n\nfunc GetAILinksGroupedBySortWithKeyword(eid int64, keyword string) ([]AILink, error) {\n\ttype queryResult struct {\n\t\tGroupSort int64 `gorm:\"column:group_sort\"`\n\t\tAILink\n\t}\n\n\tvar results []queryResult\n\terr := DB.Table(\"groups\").\n\t\tSelect(\"groups.sort AS group_sort, ai_links.id, ai_links.eid, ai_links.group_id, ai_links.name, ai_links.logo, ai_links.url, ai_links.description, ai_links.sort, ai_links.created_by, ai_links.created_time, ai_links.updated_time, ai_links.shared_account\").\n\t\tJoins(\"JOIN ai_links ON groups.group_id = ai_links.group_id AND groups.eid = ai_links.eid\").\n\t\tWhere(\"ai_links.eid = ? AND ai_links.name LIKE ?\", eid, \"%\"+keyword+\"%\").\n\t\tOrder(\"group_sort DESC, sort DESC\").\n\t\tScan(&results).Error\n\n\tif err != nil {\n\t\tlog.Printf(\"GetAILinksGroupedBySortWithKeyword failed: %v\", err)\n\t\treturn nil, err\n\t}\n\n\taiLinks := make([]AILink, 0, len(results))\n\tfor _, r := range results {\n\t\terr := r.AILink.LoadUserGroupIds()\n\t\tif err != nil {\n\t\t\tr.AILink.UserGroupIds = []int64{}\n\t\t}\n\t\tr.AILink.LoadHasSharedAccount()\n\t\tr.AILink.SharedAccount = \"\"\n\t\taiLinks = append(aiLinks, r.AILink)\n\t}\n\treturn aiLinks, nil\n}\n\nfunc (aiLink *AILink) LoadHasSharedAccount() {\n\taiLink.HasShareAccount = aiLink.SharedAccount != \"\"\n}\n"
  },
  {
    "path": "api/model/base.go",
    "content": "package model\n\nimport (\n\t\"time\"\n\n\t\"gorm.io/gorm\"\n)\n\ntype BaseModel struct {\n\tCreatedTime int64 `json:\"created_time\" gorm:\"not null\"`\n\tUpdatedTime int64 `json:\"updated_time\" gorm:\"not null\"`\n}\n\nfunc (m *BaseModel) BeforeCreate(tx *gorm.DB) (err error) {\n\tnow := time.Now().UTC().UnixMilli()\n\tif m.CreatedTime == 0 {\n\t\tm.CreatedTime = now\n\t}\n\tm.UpdatedTime = now\n\treturn\n}\n\nfunc (m *BaseModel) BeforeUpdate(tx *gorm.DB) (err error) {\n\tm.UpdatedTime = time.Now().UTC().UnixMilli()\n\treturn\n}\n"
  },
  {
    "path": "api/model/cache.go",
    "content": "package model\n\nconst (\n\tLockOrganizationKeyPre = \"lock_enterprise_organization_sync\"\n)\n"
  },
  {
    "path": "api/model/channel.go",
    "content": "package model\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/utils\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\toneapi_model \"github.com/songquanpeng/one-api/model\"\n\t\"github.com/songquanpeng/one-api/relay/channeltype\"\n)\n\nconst (\n\tChannelStatusUnknown          = 0\n\tChannelStatusEnabled          = 1\n\tChannelStatusManuallyDisabled = 2\n\tChannelStatusAutoDisabled     = 3\n)\n\nconst (\n\tChannelApiDify       = 1001\n\tChannelApi53AI       = 1002\n\tChannelApiBailian    = 1003\n\tChannelApiVolcengine = 1004\n\tChannelApiAppBuilder = 1005\n\tChannelApiYuanqi     = 1006\n\t// FastGpt 不是新的渠道，数据库里面还是 22，这里是为了替代 apitype 为0 只能走默认 openai 的问题\n\tChannelApiTypeFastGpt    = 1007\n\tChannelApiTypeMaxKB      = 1008\n\tChannelApiTypeN8n        = 1009\n\tChannelApiTypeCozeStudio = 1010\n\t// 腾讯云\n\tChannelApiTypeTencent = 1011\n)\n\n// Model types for channels\nconst (\n\tModelTypeLLM       = 1\n\tModelTypeEmbedding = 2\n\tModelTypeRerank    = 3\n)\n\n// IsValidModelType returns true if t is one of the defined model types.\nfunc IsValidModelType(t int) bool {\n\tswitch t {\n\tcase ModelTypeLLM, ModelTypeEmbedding, ModelTypeRerank:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// ChannelDescription 渠道描述结构体\ntype ChannelDescription struct {\n\tKey   string `json:\"key\"`\n\tValue string `json:\"value\"`\n}\n\n// channelDescMap 渠道key到描述的映射\nvar channelDescMap = map[string]string{\n\t\"prompt\":           \"通过Prompt创建\",\n\t\"53ai_agent\":       \"53AI Studio\",\n\t\"53ai_workflow\":    \"53AI工作流\",\n\t\"coze_agent_cn\":    \"扣子\",\n\t\"coze_workflow_cn\": \"扣子工作流\",\n\t\"coze_agent\":       \"Coze智能体\",\n\t\"coze_workflow\":    \"Coze工作流\",\n\t\"coze_studio\":      \"Coze Studio\",\n\t\"dify_agent\":       \"Dify\",\n\t\"dify_workflow\":    \"Dify工作流\",\n\t\"app_builder\":      \"百度千帆Appbuilder\",\n\t\"yuanqi\":           \"腾讯元器\",\n\t\"bailian\":          \"阿里百炼\",\n\t\"volcengine\":       \"火山方舟\",\n\t\"tencent\":          \"腾讯云\",\n}\n\n// GetChannelDescription 通过key获取渠道描述\nfunc GetChannelDescription(key string) string {\n\tif desc, ok := channelDescMap[key]; ok {\n\t\treturn desc\n\t}\n\treturn \"\"\n}\n\n// GetAllChannelDescriptions 获取所有渠道描述\nfunc GetAllChannelDescriptions() []ChannelDescription {\n\tdescriptions := make([]ChannelDescription, 0, len(channelDescMap))\n\tfor k, v := range channelDescMap {\n\t\tdescriptions = append(descriptions, ChannelDescription{Key: k, Value: v})\n\t}\n\treturn descriptions\n}\n\ntype Channel struct {\n\tChannelID          int64   `json:\"channel_id\" gorm:\"primaryKey;autoIncrement\"`\n\tEid                int64   `json:\"eid\" gorm:\"not null;index\" example:\"1\"`\n\tType               int     `json:\"type\" gorm:\"default:0\"`\n\tModelType          int     `json:\"model_type\" gorm:\"not null;default:1\"`\n\tKey                string  `json:\"key\" gorm:\"type:text\"`\n\tWeight             *uint   `json:\"weight\" gorm:\"default:0\"`\n\tName               string  `json:\"name\" gorm:\"not null\" example:\"channel_name\"`\n\tModels             string  `json:\"models\"`\n\tConfig             string  `json:\"config\"`\n\tOther              *string `json:\"other\"`\n\tModelMapping       *string `json:\"model_mapping\" gorm:\"type:varchar(1024);default:''\"`\n\tPriority           *int64  `json:\"priority\" gorm:\"bigint;default:0\"`\n\tBaseURL            *string `json:\"base_url\" gorm:\"column:base_url;default:''\"`\n\tUsedQuota          int64   `json:\"used_quota\" gorm:\"bigint;default:0\"`\n\tStatus             int     `json:\"status\" gorm:\"default:1\"`\n\tBalance            float64 `json:\"balance\"`\n\tBalanceUpdatedTime int64   `json:\"balance_updated_time\" gorm:\"bigint\"`\n\tTestTime           int64   `json:\"test_time\" gorm:\"bigint\"`\n\tResponseTime       int     `json:\"response_time\"`\n\tProviderID         int64   `json:\"provider_id\" gorm:\"bigint;default:0\"`\n\tBaseModel\n}\n\nfunc CreateChannel(channel *Channel) error {\n\treturn DB.Create(channel).Error\n}\n\nfunc GetChannelByID(id int64) (*Channel, error) {\n\tvar channel Channel\n\terr := DB.Where(\"channel_id = ?\", id).First(&channel).Error\n\treturn &channel, err\n}\n\nfunc UpdateChannel(channel *Channel) error {\n\treturn DB.Save(channel).Error\n}\n\nfunc DeleteChannelByID(id int64) error {\n\treturn DB.Where(\"channel_id = ?\", id).Delete(&Channel{}).Error\n}\n\nfunc GetChannelsByEid(eid int64) ([]Channel, error) {\n\tvar channels []Channel\n\terr := DB.Where(\"eid = ?\", eid).Find(&channels).Error\n\treturn channels, err\n}\n\n// GetChannelsByEidAndProviderId gets a list of channels by enterprise ID and provider ID\n// If providerId is 0, get channels added by the platform itself (providerId=0)\n// If providerId is not 0, get channels from other platforms\nfunc GetChannelsByEidAndParams(eid int64, providerId int64, channelTypes []int, modelTypes []int) ([]Channel, error) {\n\tvar channels []Channel\n\tvar err error\n\n\tdb := DB.Where(\"eid = ?\", eid)\n\n\tif providerId != 0 {\n\t\tdb = db.Where(\"provider_id = ?\", providerId)\n\t} else {\n\t\tdb = db.Where(\"provider_id = 0\")\n\t}\n\n\tif len(channelTypes) > 0 {\n\t\tdb = db.Where(\"type IN (?)\", channelTypes)\n\t}\n\n\tif len(modelTypes) > 0 {\n\t\tdb = db.Where(\"model_type IN (?)\", modelTypes)\n\t}\n\n\terr = db.Find(&channels).Error\n\n\treturn channels, err\n}\n\n// GetFirstChannelByEidAndProviderId finds the first channel record by enterprise ID and provider ID\nfunc GetFirstChannelByEidAndProviderId(eid int64, providerId int64) (*Channel, error) {\n\tvar channel Channel\n\terr := DB.Where(\"eid = ? and provider_id = ?\", eid, providerId).First(&channel).Error\n\treturn &channel, err\n}\n\nfunc (channel *Channel) GetBaseURL() string {\n\tif channel.BaseURL == nil {\n\t\treturn \"\"\n\t}\n\treturn *channel.BaseURL\n}\n\nfunc (channel *Channel) LoadConfig() (oneapi_model.ChannelConfig, error) {\n\tvar cfg oneapi_model.ChannelConfig\n\tif channel.Config == \"\" {\n\t\treturn cfg, nil\n\t}\n\terr := json.Unmarshal([]byte(channel.Config), &cfg)\n\tif err != nil {\n\t\treturn cfg, err\n\t}\n\treturn cfg, nil\n}\n\nfunc (channel *Channel) GetModelMapping() map[string]string {\n\tif channel.ModelMapping == nil || *channel.ModelMapping == \"\" || *channel.ModelMapping == \"{}\" {\n\t\treturn nil\n\t}\n\tmodelMapping := make(map[string]string)\n\terr := json.Unmarshal([]byte(*channel.ModelMapping), &modelMapping)\n\tif err != nil {\n\t\tlogger.SysError(fmt.Sprintf(\"failed to unmarshal model mapping for channel %d, error: %s\", channel.ChannelID, err.Error()))\n\t\treturn nil\n\t}\n\treturn modelMapping\n}\n\nfunc (channel *Channel) UpdateResponseTime(responseTime int64) {\n\terr := DB.Model(channel).Select(\"response_time\", \"test_time\").Updates(Channel{\n\t\tTestTime:     helper.GetTimestamp(),\n\t\tResponseTime: int(responseTime),\n\t}).Error\n\tif err != nil {\n\t\tlogger.SysError(\"failed to update response time: \" + err.Error())\n\t}\n}\n\nfunc GetRandomChannel(eid int64, channelType int, modelName string) (*Channel, error) {\n\tvar channels []Channel\n\n\terr := DB.Where(\"eid = ? AND type = ? AND status = ? AND models LIKE ?\",\n\t\teid, channelType, ChannelStatusEnabled, \"%\"+modelName+\"%\").\n\t\tFind(&channels).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(channels) == 0 {\n\t\treturn nil, fmt.Errorf(\"no available channel found\")\n\t}\n\n\tvar totalWeight uint = 0\n\tfor _, channel := range channels {\n\t\tif channel.Weight != nil {\n\t\t\ttotalWeight += *channel.Weight\n\t\t}\n\t}\n\n\tif totalWeight == 0 {\n\t\treturn &channels[utils.GetRandomInt64(int64(len(channels)))], nil\n\t}\n\n\trandomWeight := utils.GetRandomInt64(int64(totalWeight))\n\tvar currentWeight uint = 0\n\tfor _, channel := range channels {\n\t\tif channel.Weight != nil {\n\t\t\tcurrentWeight += *channel.Weight\n\t\t\tif uint(randomWeight) < currentWeight {\n\t\t\t\treturn &channel, nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn &channels[0], nil\n}\n\nfunc GetApiType(channelType int) int {\n\tapiType := channeltype.ToAPIType(channelType)\n\tif channelType > 1000 {\n\t\tapiType = channelType\n\t}\n\t// Refactoring and modification\n\tswitch channelType {\n\tcase channeltype.FastGPT:\n\t\treturn ChannelApiTypeFastGpt\n\t}\n\n\treturn apiType\n}\n\nfunc GetFirstChannelByEidAndProviderType(eid int64, providerType int64, providerID int64) (*Channel, error) {\n\tvar channel Channel\n\terr := DB.Where(\"eid = ? AND type = ? AND provider_id = ?\", eid, providerType, providerID).First(&channel).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &channel, nil\n}\n\n// GetFirstAvailableChannelByEidAndProviderType gets the first available channel by enterprise ID and provider type\n// This function prioritizes channels with provider_id > 0 (associated with specific providers)\n// Falls back to provider_id = 0 (platform channels) for backward compatibility\nfunc GetFirstAvailableChannelByEidAndProviderType(eid int64, providerType int64) (*Channel, error) {\n\tvar channel Channel\n\n\t// First try to get channel with provider_id > 0 (specific provider)\n\terr := DB.Where(\"eid = ? AND type = ? AND provider_id > 0\", eid, providerType).First(&channel).Error\n\tif err == nil {\n\t\treturn &channel, nil\n\t}\n\n\t// Fallback to any channel of this type (backward compatibility)\n\terr = DB.Where(\"eid = ? AND type = ?\", eid, providerType).First(&channel).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &channel, nil\n}\n\nfunc StandardizationBotId(botId string) string {\n\tif !strings.HasPrefix(botId, \"bot-\") && !strings.HasPrefix(botId, \"workflow-\") {\n\t\treturn \"bot-\" + botId\n\t}\n\treturn botId\n}\n\nfunc StandardizationBotIdByChannelType(botId string, channelType int) string {\n\tswitch channelType {\n\tcase ChannelApiDify, ChannelApi53AI, ChannelApiBailian, ChannelApiVolcengine, ChannelApiAppBuilder, ChannelApiYuanqi, ChannelApiTypeFastGpt, ChannelApiTypeMaxKB:\n\t\treturn StandardizationBotId(botId)\n\t}\n\treturn botId\n}\n\nfunc ProcessModelNames(models string, channelType int) string {\n\tmodelArr := strings.Split(models, \",\")\n\tif len(modelArr) == 0 {\n\t\treturn \"\"\n\t}\n\n\tvar newModels []string\n\tfor _, modelName := range modelArr {\n\t\tnewModels = append(newModels, StandardizationBotIdByChannelType(modelName, channelType))\n\t}\n\n\treturn strings.Join(newModels, \",\")\n}\n\nfunc (channel *Channel) GetAddModelString(model string) string {\n\texistingModels := make(map[string]bool)\n\tfor _, m := range strings.Split(channel.Models, \",\") {\n\t\texistingModels[m] = true\n\t}\n\n\t// 如果新模型不存在，则添加\n\tif !existingModels[model] {\n\t\texistingModels[model] = true\n\t}\n\n\t// 将map转换回切片\n\tvar models []string\n\tfor m := range existingModels {\n\t\tmodels = append(models, m)\n\t}\n\treturn strings.Join(models, \",\")\n}\n"
  },
  {
    "path": "api/model/channel_file_mapping.go",
    "content": "package model\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n)\n\ntype ChannelFileMapping struct {\n\tId             int64  `json:\"id\"`\n\tEid            int64  `json:\"eid\"`\n\tChannelID      int    `json:\"channel_id\"`\n\tModel          string `json:\"model\"`\n\tFileID         int64  `json:\"file_id\"`\n\tExpirationTime int64  `json:\"expiration_time\" gorm:\"column:expiration_time;default:0\"`\n\tChannelFileID  string `json:\"channel_file_id\" gorm:\"column:channel_file_id\"`\n\tApiResponse    string `json:\"api_response\" gorm:\"column:api_response\"`\n\tBaseModel\n}\n\ntype ObjectStringContent struct {\n\tType    string `json:\"type\"`\n\tContent string `json:\"content\"`\n}\n\ntype ContentPart struct {\n\tType    string `json:\"type\"`\n\tContent string `json:\"content\"`\n}\n\nfunc GetChannelFileMapping(eid int64, channelId int64, fileId int64) *ChannelFileMapping {\n\tvar channelFileMapping ChannelFileMapping\n\tif err := DB.Where(\"eid = ? AND channel_id = ? AND file_id = ?\", eid, channelId, fileId).First(&channelFileMapping).Error; err != nil {\n\t\treturn nil\n\t}\n\treturn &channelFileMapping\n}\n\nfunc CreateChannelFileMapping(channelFileMapping *ChannelFileMapping) error {\n\treturn DB.Create(channelFileMapping).Error\n}\n\nfunc UpdateChannelFileMapping(channelFileMapping *ChannelFileMapping) error {\n\treturn DB.Save(channelFileMapping).Error\n}\n\nfunc (obj *ObjectStringContent) GetUploadFile() *UploadFile {\n\tif obj.Type != \"file\" && obj.Type != \"image\" {\n\t\treturn nil\n\t}\n\n\tcontent := obj.Content\n\tif strings.HasPrefix(content, \"file_id:\") {\n\t\tcontent = strings.TrimPrefix(content, \"file_id:\")\n\t}\n\n\tfileId, err := strconv.ParseInt(content, 10, 64)\n\tif err != nil {\n\t\treturn nil\n\t}\n\n\tfile, err := GetUploadFileByID(fileId)\n\tif err != nil {\n\t\tlogger.SysLogf(\"get upload file failed\", fileId, err)\n\t\treturn nil\n\t}\n\n\treturn file\n}\n"
  },
  {
    "path": "api/model/conversation.go",
    "content": "package model\n\ntype Conversation struct {\n\tConversationID                    int64  `json:\"conversation_id\" gorm:\"column:conversation_id;primaryKey;autoIncrement\"`\n\tEid                               int64  `json:\"eid\" gorm:\"column:eid;not null;index:idx_conversation_user_agent\"`\n\tUserID                            int64  `json:\"user_id\" gorm:\"column:user_id;not null;index:idx_conversation_user_agent\"`\n\tAgentID                           int64  `json:\"agent_id\" gorm:\"column:agent_id;not null;index:idx_conversation_user_agent\"`\n\tTitle                             string `json:\"title\" gorm:\"column:title;type:varchar(255)\"`\n\tStatus                            int    `json:\"status\" gorm:\"column:status;default:1\"`\n\tLastMessage                       string `json:\"last_message\" gorm:\"column:last_message;type:text\"`\n\tDeletedTime                       int64  `json:\"deleted_time\" gorm:\"not null\"`\n\tQuota                             int    `json:\"quota\" gorm:\"default:0\"`\n\tTotalTokens                       int    `json:\"total_tokens\" gorm:\"default:0\"`\n\tChannelConversationID             string `json:\"channel_conversation_id\" gorm:\"column:channel_conversation_id;type:varchar(255)\"`\n\tChannelConversationExpirationTime int64  `json:\"channel_conversation_expiration_time\" gorm:\"column:channel_conversation_expiration_time;default:0\"`\n\tModel                             string `json:\"model\" gorm:\"column:model;type:varchar(255)\"`\n\tAgent                             *Agent `json:\"agent\" gorm:\"-\"`\n\tUser                              *User  `json:\"user\" gorm:\"-\"`\n\tBaseModel\n}\n\nconst (\n\tConversationStatusActive   = 1\n\tConversationStatusArchived = 2\n\tConversationStatusDeleted  = 0\n)\n\n// CreateConversation creates a new conversation record\nfunc CreateConversation(conversation *Conversation) error {\n\treturn DB.Create(conversation).Error\n}\n\n// GetConversationByID retrieves a conversation by ID\nfunc GetConversationByID(eid int64, user_id int64, conversation_id int64) (*Conversation, error) {\n\tvar conversation Conversation\n\terr := DB.Where(\"eid = ? AND conversation_id = ? and user_id = ?\", eid, conversation_id, user_id).First(&conversation).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tconversation.LoadAgent()\n\treturn &conversation, nil\n}\n\nfunc AdminGetConversationByID(eid int64, conversation_id int64) (*Conversation, error) {\n\tvar conversation Conversation\n\terr := DB.Where(\"eid =? AND conversation_id =?\", eid, conversation_id).First(&conversation).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &conversation, nil\n}\n\n// GetConversationsByUserID retrieves all conversations for a user\nfunc GetConversationsByUserID(eid int64, userID int64) ([]*Conversation, error) {\n\tvar conversations []*Conversation\n\terr := DB.Where(\"eid = ? AND user_id = ?\", eid, userID).Order(\"updated_time DESC\").Find(&conversations).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, conversation := range conversations {\n\t\tconversation.LoadAgent()\n\t}\n\treturn conversations, nil\n}\n\n// GetUserConversationsWithFilter retrieves conversations with filter and pagination\nfunc GetUserConversationsWithFilter(eid, userID int64, keyword string, createdAtStart, createdAtEnd int64, offset, limit int) ([]*Conversation, int64, error) {\n\tquery := DB.Where(\"eid = ? AND user_id = ?\", eid, userID)\n\n\tif createdAtStart > 0 {\n\t\tquery = query.Where(\"created_time >= ?\", createdAtStart)\n\t}\n\tif createdAtEnd > 0 {\n\t\tquery = query.Where(\"created_time <= ?\", createdAtEnd)\n\t}\n\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"title LIKE ?\", \"%\"+keyword+\"%\")\n\t}\n\n\tvar total int64\n\tif err := query.Model(&Conversation{}).Count(&total).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\tvar conversations []*Conversation\n\tif err := query.Order(\"created_time DESC\").Offset(offset).Limit(limit).Find(&conversations).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\treturn conversations, total, nil\n}\n\n// GetMessageCountByConversationID 获取会话消息数量\nfunc GetMessageCountByConversationID(conversationID int64) (int, error) {\n\tvar count int64\n\tif err := DB.Model(&Message{}).Where(\"conversation_id = ?\", conversationID).Count(&count).Error; err != nil {\n\t\treturn 0, err\n\t}\n\treturn int(count), nil\n}\n\n// GetFirstMessageByConversationID 获取会话的第一条消息\nfunc GetFirstMessageByConversationID(conversationID int64) (string, error) {\n\tvar msg Message\n\tif err := DB.Where(\"conversation_id = ?\", conversationID).Order(\"created_time ASC\").First(&msg).Error; err != nil {\n\t\treturn \"\", err\n\t}\n\treturn msg.Message, nil\n}\n\nfunc (c *Conversation) LoadAgent() error {\n\tagent, err := GetAgentByID(c.Eid, c.AgentID)\n\tif err != nil {\n\t\treturn err\n\t}\n\tc.Agent = agent\n\treturn nil\n}\n\nfunc (c *Conversation) LoadUser() error {\n\tuser, err := GetUserByID(c.UserID)\n\tif err != nil {\n\t\treturn err\n\t}\n\tc.User = user\n\treturn nil\n}\n\n// GetConversationsByAgentID retrieves all conversations for a specific agent\nfunc GetConversationsByAgentID(eid int64, agentID int64) ([]*Conversation, error) {\n\tvar conversations []*Conversation\n\terr := DB.Where(\"eid = ? AND agent_id = ?\", eid, agentID).Order(\"updated_time DESC\").Find(&conversations).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn conversations, nil\n}\n\n// GetAgentConversationsWithFilter retrieves conversations with filter and pagination for agent\nfunc GetAgentConversationsWithFilter(eid, agentID int64, keyword string, createdAtStart, createdAtEnd int64, offset, limit int) ([]*Conversation, int64, error) {\n\tquery := DB.Where(\"eid = ? AND agent_id = ?\", eid, agentID)\n\n\tif createdAtStart > 0 {\n\t\tquery = query.Where(\"created_time >= ?\", createdAtStart)\n\t}\n\tif createdAtEnd > 0 {\n\t\tquery = query.Where(\"created_time <= ?\", createdAtEnd)\n\t}\n\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"title LIKE ?\", \"%\"+keyword+\"%\")\n\t}\n\n\tvar total int64\n\tif err := query.Model(&Conversation{}).Count(&total).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\tvar conversations []*Conversation\n\tif err := query.Order(\"created_time DESC\").Offset(offset).Limit(limit).Find(&conversations).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\treturn conversations, total, nil\n}\n\n// UpdateConversation updates a conversation record\nfunc UpdateConversation(conversation *Conversation) error {\n\treturn DB.Save(conversation).Error\n}\n\n// DeleteConversation deletes a conversation record\nfunc DeleteConversation(eid int64, conversation_id int64) error {\n\treturn DB.Where(\"eid = ? AND conversation_id = ?\", eid, conversation_id).Delete(&Conversation{}).Error\n}\n\nfunc GetConversationByIdAndUserId(eid int64, conversation_id int64, user_id int64) (*Conversation, error) {\n\tvar conversation Conversation\n\terr := DB.Where(\"eid =? AND conversation_id =? AND user_id =?\", eid, conversation_id, user_id).First(&conversation).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &conversation, nil\n}\n"
  },
  {
    "path": "api/model/department.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"gorm.io/gorm\"\n)\n\n// Department source constants\nconst (\n\tDepartmentFromBackend   = 0 // Created from Backend\n\tDepartmentFromWecom     = 1 // Imported from WecomChat\n\tDepartmentFromDingtalk  = 2 // Imported from DingTalk\n)\n\n// Department status constants\nconst (\n\tDepartmentStatusNormal   = 0 // Normal\n\tDepartmentStatusDisabled = 1 // Disabled\n\tDepartmentStatusDeleted  = 2 // Deleted\n)\n\n// Department sort default values\nconst (\n\tDepartmentSortDefault = 0  // Default sort\n\tDepartmentSortTop     = -1 // Top priority\n)\n\n// Department represents a department in the organization\ntype Department struct {\n\tDID       int64  `json:\"did\" gorm:\"column:did;primaryKey;autoIncrement;comment:'Department ID'\"`\n\tPDID      int64  `json:\"pdid\" gorm:\"column:pdid;not null;default:0;comment:'Parent Department ID'\"`\n\tEID       int64  `json:\"eid\" gorm:\"column:eid;not null;default:0;comment:'Enterprise ID'\"`\n\tName      string `json:\"name\" gorm:\"column:name;not null;default:'';comment:'Department Name'\"`\n\tPath      string `json:\"path\" gorm:\"column:path;not null;default:'';comment:'Department Path'\"`\n\tSort      int    `json:\"sort\" gorm:\"column:sort;not null;default:0;comment:'Sort Order'\"`\n\tFrom      int    `json:\"from\" gorm:\"column:from;not null;default:0;comment:'Source: 0-Backend, 1-Enterprise WeChat'\"`\n\tBindValue string `json:\"bind_value\" gorm:\"column:bindvalue;not null;default:'';comment:'Source Platform Binding Value'\"`\n\tBaseModel\n}\n\n// TableName specifies the table name for Department model\nfunc (Department) TableName() string {\n\treturn \"departments\"\n}\n\n// InitDepartmentTable initializes the department table\nfunc InitDepartmentTable() error {\n\t// Check if table exists\n\tif DB.Migrator().HasTable(&Department{}) {\n\t\treturn nil\n\t}\n\n\t// Create table\n\terr := DB.Migrator().CreateTable(&Department{})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to create department table: %w\", err)\n\t}\n\n\t// Create default root department for system\n\trootDept := &Department{\n\t\tEID:  1, // System EID\n\t\tName: \"System Root Department\",\n\t\tSort: 0,\n\t}\n\n\tresult := DB.Create(rootDept)\n\tif result.Error != nil {\n\t\treturn fmt.Errorf(\"failed to create root department: %w\", result.Error)\n\t}\n\n\treturn nil\n}\n\n// CreateDepartment creates a new department\nfunc CreateDepartment(dept *Department) error {\n\tif err := validateDepartment(dept); err != nil {\n\t\treturn err\n\t}\n\n\ttx := DB.Begin()\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\tif err := tx.Create(dept).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn err\n\t}\n\n\tif dept.PDID > 0 {\n\t\tvar pDept Department\n\t\tif err := tx.Where(\"eid = ? AND did = ?\", dept.EID, dept.PDID).First(&pDept).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn fmt.Errorf(\"pdid: %w\", err)\n\t\t}\n\n\t\tif pDept.Path != \"\" {\n\t\t\tdept.Path = fmt.Sprintf(\"%s,%d\", pDept.Path, dept.DID)\n\t\t} else {\n\t\t\tdept.Path = fmt.Sprintf(\"%d\", dept.DID)\n\t\t}\n\t} else {\n\t\tdept.Path = fmt.Sprintf(\"%d\", dept.DID)\n\t}\n\n\tif err := tx.Model(dept).Updates(map[string]interface{}{\n\t\t\"path\":      dept.Path,\n\t\t\"bindvalue\": fmt.Sprintf(\"%d\", dept.DID),\n\t}).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn err\n\t}\n\n\treturn tx.Commit().Error\n}\n\n// validateDepartment validates department fields\nfunc validateDepartment(dept *Department) error {\n\tif dept == nil {\n\t\treturn errors.New(\"department cannot be nil\")\n\t}\n\tif dept.Name == \"\" {\n\t\treturn errors.New(\"department name cannot be empty\")\n\t}\n\tif dept.EID == 0 {\n\t\treturn errors.New(\"enterprise ID (EID) cannot be empty\")\n\t}\n\treturn nil\n}\n\n// GetDepartmentByID retrieves a department by its ID and enterprise ID\nfunc GetDepartmentByID(eid int64, did int64) (*Department, error) {\n\tvar dept Department\n\tresult := DB.Where(\"eid = ? AND did = ?\", eid, did).First(&dept)\n\tif result.Error != nil {\n\t\tif errors.Is(result.Error, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, fmt.Errorf(\"department not found with ID %d\", did)\n\t\t}\n\t\treturn nil, result.Error\n\t}\n\treturn &dept, nil\n}\n\n// GetDepartmentsByEID retrieves all departments for a specific enterprise\nfunc GetDepartmentsByEID(eid int64, from int) ([]*Department, error) {\n\tvar departments []*Department\n\tresult := DB.Where(\"eid = ? and `from` = ?\", eid, from).Order(\"sort DESC\").Find(&departments)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\treturn departments, nil\n}\n\n// GetChildDepartments retrieves all child departments for a specific department\nfunc GetChildDepartments(eid int64, pdid int64) ([]*Department, error) {\n\tvar departments []*Department\n\tresult := DB.Where(\"eid = ? AND pdid = ?\", eid, pdid).Order(\"sort DESC\").Find(&departments)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\treturn departments, nil\n}\n\n// BatchGetDepartmentsByIDs retrieves multiple departments by their IDs\nfunc BatchGetDepartmentsByIDs(eid int64, dids []int64) ([]*Department, error) {\n\tif len(dids) == 0 {\n\t\treturn []*Department{}, nil\n\t}\n\n\tvar departments []*Department\n\tresult := DB.Where(\"eid = ? AND did IN ?\", eid, dids).Find(&departments)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\treturn departments, nil\n}\n\n// UpdateDepartment updates an existing department\nfunc UpdateDepartment(dept *Department) error {\n\tif dept.DID == 0 {\n\t\treturn errors.New(\"department ID cannot be empty\")\n\t}\n\tif dept.EID == 0 {\n\t\treturn errors.New(\"enterprise ID (EID) cannot be empty\")\n\t}\n\n\t// Check if department exists\n\texistingDept, err := GetDepartmentByID(dept.EID, dept.DID)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"department not found: %w\", err)\n\t}\n\n\t// Check if parent department changed\n\tif dept.PDID != existingDept.PDID {\n\t\tif err := handleParentChange(dept, existingDept); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\t// Keep the existing path if parent hasn't changed\n\t\tdept.Path = existingDept.Path\n\t}\n\n\t// Update department in database\n\tresult := DB.Model(dept).Updates(map[string]interface{}{\n\t\t\"name\": dept.Name,\n\t\t\"sort\": dept.Sort,\n\t})\n\n\treturn result.Error\n}\n\n// handleParentChange handles the logic when a department's parent changes\nfunc handleParentChange(dept *Department, existingDept *Department) error {\n\t// Ensure no circular reference\n\tif dept.PDID == dept.DID {\n\t\treturn errors.New(\"department cannot be its own parent\")\n\t}\n\n\t// Check if new parent exists\n\tif dept.PDID > 0 {\n\t\tparentDept, err := GetDepartmentByID(dept.EID, dept.PDID)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"parent department not found: %w\", err)\n\t\t}\n\n\t\t// Check if new parent is not a child of current department\n\t\tif isChildDepartment(parentDept.Path, dept.DID) {\n\t\t\treturn errors.New(\"circular department reference detected\")\n\t\t}\n\n\t\t// Update path\n\t\tif parentDept.Path == \"\" {\n\t\t\tdept.Path = fmt.Sprintf(\"%d\", dept.PDID)\n\t\t} else {\n\t\t\tdept.Path = fmt.Sprintf(\"%s,%d\", parentDept.Path, dept.PDID)\n\t\t}\n\t} else {\n\t\t// Root department\n\t\tdept.Path = \"\"\n\t}\n\n\t// Update paths of all child departments\n\treturn updateChildDepartmentPaths(dept.EID, dept.DID, existingDept.Path, dept.Path)\n}\n\n// isChildDepartment checks if a department is a child of another department\nfunc isChildDepartment(path string, did int64) bool {\n\tdidStr := fmt.Sprintf(\"%d\", did)\n\treturn strings.Contains(path, fmt.Sprintf(\",%s,\", didStr)) ||\n\t\tstrings.HasPrefix(path, fmt.Sprintf(\"%s,\", didStr)) ||\n\t\tstrings.HasSuffix(path, fmt.Sprintf(\",%s\", didStr)) ||\n\t\tpath == didStr\n}\n\n// updateChildDepartmentPaths updates the paths of all child departments\nfunc updateChildDepartmentPaths(eid int64, did int64, oldPath string, newPath string) error {\n\tvar childDepts []*Department\n\n\t// Find all child departments\n\tif oldPath == \"\" {\n\t\tresult := DB.Where(\"eid = ? AND (path LIKE ? OR path = ?)\",\n\t\t\teid, fmt.Sprintf(\"%d,%%\", did), fmt.Sprintf(\"%d\", did)).Find(&childDepts)\n\t\tif result.Error != nil {\n\t\t\treturn result.Error\n\t\t}\n\t} else {\n\t\tresult := DB.Where(\"eid = ? AND (path LIKE ? OR path = ?)\",\n\t\t\teid, fmt.Sprintf(\"%s,%d,%%\", oldPath, did), fmt.Sprintf(\"%s,%d\", oldPath, did)).Find(&childDepts)\n\t\tif result.Error != nil {\n\t\t\treturn result.Error\n\t\t}\n\t}\n\n\tif len(childDepts) == 0 {\n\t\treturn nil\n\t}\n\n\t// Begin transaction for batch updates\n\ttx := DB.Begin()\n\tif tx.Error != nil {\n\t\treturn tx.Error\n\t}\n\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\t// Update each child department's path\n\tfor _, child := range childDepts {\n\t\tnewChildPath := updateSingleChildPath(child.Path, oldPath, newPath, did)\n\n\t\t// Update the path\n\t\tif err := tx.Model(&Department{}).Where(\"eid = ? AND did = ?\", eid, child.DID).\n\t\t\tUpdate(\"path\", newChildPath).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Commit transaction\n\treturn tx.Commit().Error\n}\n\n// updateSingleChildPath updates a single child department path\nfunc updateSingleChildPath(childPath, oldPath, newPath string, did int64) string {\n\tvar oldPrefix, newPrefix string\n\n\tif oldPath == \"\" {\n\t\toldPrefix = fmt.Sprintf(\"%d\", did)\n\t} else {\n\t\toldPrefix = fmt.Sprintf(\"%s,%d\", oldPath, did)\n\t}\n\n\tif newPath == \"\" {\n\t\tnewPrefix = fmt.Sprintf(\"%d\", did)\n\t} else {\n\t\tnewPrefix = fmt.Sprintf(\"%s,%d\", newPath, did)\n\t}\n\n\treturn strings.Replace(childPath, oldPrefix, newPrefix, 1)\n}\n\n// DeleteDepartment deletes a department and optionally its children\nfunc DeleteDepartment(eid int64, did int64, deleteChildren bool) error {\n\t// Check if department exists\n\t_, err := GetDepartmentByID(eid, did)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"department not found: %w\", err)\n\t}\n\n\t// Check if department has children\n\tchildDepts, err := GetChildDepartments(eid, did)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif len(childDepts) > 0 && !deleteChildren {\n\t\treturn errors.New(\"department has children, cannot delete\")\n\t}\n\n\t// Begin transaction\n\ttx := DB.Begin()\n\tif tx.Error != nil {\n\t\treturn tx.Error\n\t}\n\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\tif err := tx.Where(\"eid = ? AND did = ?\", eid, did).Delete(&MemberDepartmentRelation{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn fmt.Errorf(\"failed to delete member-department relations: %w\", err)\n\t}\n\n\tif deleteChildren && len(childDepts) > 0 {\n\t\tvar childDIDs []int64\n\t\tfor _, child := range childDepts {\n\t\t\tchildDIDs = append(childDIDs, child.DID)\n\t\t}\n\n\t\tif err := tx.Where(\"eid = ? AND did IN ?\", eid, childDIDs).Delete(&MemberDepartmentRelation{}).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn fmt.Errorf(\"failed to delete child member-department relations: %w\", err)\n\t\t}\n\n\t\tif err := tx.Where(\"eid = ? AND did IN ?\", eid, childDIDs).Delete(&Department{}).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Delete the department\n\tif err := tx.Where(\"eid = ? AND did = ?\", eid, did).Delete(&Department{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn err\n\t}\n\n\t// Commit transaction\n\treturn tx.Commit().Error\n}\n\n// BatchDeleteDepartments deletes multiple departments\nfunc BatchDeleteDepartments(eid int64, dids []int64) error {\n\tif len(dids) == 0 {\n\t\treturn nil\n\t}\n\n\ttx := DB.Begin()\n\tif tx.Error != nil {\n\t\treturn tx.Error\n\t}\n\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\tif err := tx.Where(\"eid = ? AND did IN ?\", eid, dids).Delete(&Department{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn err\n\t}\n\n\treturn tx.Commit().Error\n}\n\n// SearchDepartments searches for departments by name\nfunc SearchDepartments(eid int64, keyword string, limit int) ([]*Department, error) {\n\tvar departments []*Department\n\n\tquery := DB.Where(\"eid = ?\", eid)\n\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"name LIKE ?\", \"%\"+keyword+\"%\")\n\t}\n\n\tif limit > 0 {\n\t\tquery = query.Limit(limit)\n\t}\n\n\tresult := query.Order(\"sort DESC\").Find(&departments)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\n\treturn departments, nil\n}\n\n// GetDepartmentTree returns a hierarchical structure of departments\nfunc GetDepartmentTree(eid int64, from int) ([]*DepartmentNode, error) {\n\t// Get all departments for the enterprise\n\tallDepts, err := GetDepartmentsByEID(eid, from)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(allDepts) == 0 {\n\t\treturn []*DepartmentNode{}, nil\n\t}\n\n\t// Create a map of departments by ID\n\tdeptMap := make(map[int64]*Department, len(allDepts))\n\tfor _, dept := range allDepts {\n\t\tdeptMap[dept.DID] = dept\n\t}\n\n\t// Create root nodes (departments with no parent)\n\tvar rootNodes []*DepartmentNode\n\n\t// Build the tree\n\tfor _, dept := range allDepts {\n\t\tif dept.PDID == 0 {\n\t\t\t// This is a root department\n\t\t\tnode := &DepartmentNode{\n\t\t\t\tDepartment: dept,\n\t\t\t\tChildren:   make([]*DepartmentNode, 0),\n\t\t\t}\n\t\t\trootNodes = append(rootNodes, node)\n\t\t}\n\t}\n\n\t// Sort root nodes by sort order\n\tsortDepartmentNodes(rootNodes)\n\n\t// Build children for each root node\n\tfor _, rootNode := range rootNodes {\n\t\tbuildDepartmentTree(rootNode, allDepts, deptMap)\n\t}\n\n\treturn rootNodes, nil\n}\n\n// DepartmentNode represents a node in the department hierarchy\ntype DepartmentNode struct {\n\tDepartment *Department       `json:\"department\"`\n\tChildren   []*DepartmentNode `json:\"children\"`\n}\n\n// buildDepartmentTree recursively builds the department tree\nfunc buildDepartmentTree(node *DepartmentNode, allDepts []*Department, deptMap map[int64]*Department) {\n\tfor _, dept := range allDepts {\n\t\tif dept.PDID == node.Department.DID {\n\t\t\tchildNode := &DepartmentNode{\n\t\t\t\tDepartment: dept,\n\t\t\t\tChildren:   make([]*DepartmentNode, 0),\n\t\t\t}\n\t\t\tnode.Children = append(node.Children, childNode)\n\t\t\tbuildDepartmentTree(childNode, allDepts, deptMap)\n\t\t}\n\t}\n\n\t// Sort children by sort order\n\tsortDepartmentNodes(node.Children)\n}\n\n// sortDepartmentNodes sorts department nodes by sort order\nfunc sortDepartmentNodes(nodes []*DepartmentNode) {\n\tfor i := 0; i < len(nodes)-1; i++ {\n\t\tfor j := i + 1; j < len(nodes); j++ {\n\t\t\tif nodes[i].Department.Sort < nodes[j].Department.Sort {\n\t\t\t\tnodes[i], nodes[j] = nodes[j], nodes[i]\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "api/model/dingtalk_corp.go",
    "content": "package model\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\n\t\"gorm.io/gorm\"\n)\n\ntype DingtalkCorp struct {\n\tCorpId          string `json:\"corpid\" gorm:\"primaryKey;type:varchar(64)\"`\n\tSuiteId         string `json:\"suiteid\" gorm:\"type:varchar(32);index;not null\"`\n\tCorpName        string `json:\"corp_name\" gorm:\"type:varchar(255);not null\"`\n\tIndustryCode    string `json:\"industry_code\" gorm:\"type:varchar(50)\"`\n\tAccessToken     string `json:\"access_token\" gorm:\"type:varchar(255)\"`\n\tExpiresIn       int    `json:\"expires_in\" gorm:\"type:int\"`\n\tPermanentCode   string `json:\"permanent_code\" gorm:\"type:varchar(255)\"`\n\tTokenUpdateTime int64  `json:\"token_update_time\" gorm:\"type:bigint\"`\n\tLogoUrl         string `json:\"logo_url\" gorm:\"type:varchar(1000)\"`\n\tScale           int    `json:\"scale\" gorm:\"type:int\"`\n\tAuthUserId      string `json:\"auth_user_id\" gorm:\"type:varchar(255)\"`\n\tStatus          int    `json:\"status\" gorm:\"type:int;default:0\"`\n\tAuthInfo        string `json:\"auth_info\" gorm:\"type:text\"`\n\tAuthUserInfo    string `json:\"auth_user_info\" gorm:\"type:text\"`\n\tAgentId         int    `json:\"agentid\" gorm:\"type:int\"`\n\t// 根据钉钉授权事件文档新增字段\n\tIsAuthenticated bool `json:\"is_authenticated\" gorm:\"type:bool\"` // 企业是否认证\n\tBaseModel\n}\n\ntype DingtalkAuthCorpInfo struct {\n\tCorpId       string `json:\"corpid\"`\n\tCorpName     string `json:\"corp_name\"`\n\tIndustryCode string `json:\"industry_code\"`\n\tLogoUrl      string `json:\"logo_url\"`\n\tScale        int    `json:\"scale\"`\n\tSuiteId      string `json:\"suite_id\"`\n}\n\ntype DingtalkAuthUserInfo struct {\n\tUserId string `json:\"user_id\"`\n}\n\ntype AuthInfo struct {\n\tIsAuth bool `json:\"isAuth\"`\n\tAgent  []struct {\n\t\tAgentId   int    `json:\"agentId\"`\n\t\tAppName   string `json:\"appName\"`\n\t\tAppLogo   string `json:\"appLogo\"`\n\t\tIsAuth    bool   `json:\"isAuth\"`\n\t\tPermanent bool   `json:\"permanent\"`\n\t} `json:\"agent\"`\n}\n\nfunc GetDingtalkCorp(suiteId string, corpId string) (*DingtalkCorp, error) {\n\tif corpId == \"\" {\n\t\treturn nil, errors.New(\"corp_id is empty\")\n\t}\n\tmodel := &DingtalkCorp{}\n\terr := DB.Where(\"suite_id = ? AND corp_id = ?\", suiteId, corpId).First(model).Error\n\tif err != nil {\n\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn model, nil\n}\n\nfunc CreateDingtalkCorp(corp *DingtalkCorp) error {\n\terr := DB.Create(corp).Error\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc UpdateDingtalkCorp(corp *DingtalkCorp) error {\n\terr := DB.Save(corp).Error\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (d *DingtalkCorp) GetAuthUserInfo() *DingtalkAuthUserInfo {\n\tvar authInfo DingtalkAuthUserInfo\n\tif err := json.Unmarshal([]byte(d.AuthUserInfo), &authInfo); err != nil {\n\t\treturn nil\n\t}\n\treturn &authInfo\n}\n\nfunc (d *DingtalkCorp) Update() error {\n\treturn DB.Save(d).Error\n}\n\nfunc (d *DingtalkCorp) Delete() error {\n\treturn DB.Delete(d).Error\n}\n\nfunc (d *DingtalkCorp) GetAuthCorpInfo() *DingtalkAuthCorpInfo {\n\tvar authCorpInfo DingtalkAuthCorpInfo\n\tif err := json.Unmarshal([]byte(d.AuthInfo), &authCorpInfo); err != nil {\n\t\treturn nil\n\t}\n\tif authCorpInfo.CorpId == \"\" {\n\t\tauthCorpInfo.CorpId = d.CorpId\n\t}\n\tif authCorpInfo.CorpName == \"\" {\n\t\tauthCorpInfo.CorpName = d.CorpName\n\t}\n\tif authCorpInfo.IndustryCode == \"\" {\n\t\tauthCorpInfo.IndustryCode = d.IndustryCode\n\t}\n\tif authCorpInfo.LogoUrl == \"\" {\n\t\tauthCorpInfo.LogoUrl = d.LogoUrl\n\t}\n\tif authCorpInfo.Scale == 0 {\n\t\tauthCorpInfo.Scale = d.Scale\n\t}\n\tif authCorpInfo.SuiteId == \"\" {\n\t\tauthCorpInfo.SuiteId = d.SuiteId\n\t}\n\treturn &authCorpInfo\n}\n"
  },
  {
    "path": "api/model/dingtalk_suite.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n)\n\ntype DingtalkSuite struct {\n\tSuiteID                 string `json:\"suite_id\" gorm:\"primaryKey;type:varchar(32)\"`\n\tSecret                  string `json:\"secret\" gorm:\"type:varchar(255);not null\"`\n\tTicket                  string `json:\"ticket\" gorm:\"type:varchar(255)\"`\n\tTicketUpdateTime        int64  `json:\"ticket_update_time\" gorm:\"type:bigint\"`\n\tAccessToken             string `json:\"access_token\" gorm:\"type:varchar(255)\"`\n\tExpiresIn               int    `json:\"expires_in\" gorm:\"type:int\"`\n\tTokenUpdateTime         int64  `json:\"token_update_time\" gorm:\"type:bigint\"`\n\tName                    string `json:\"name\" gorm:\"type:varchar(255);not null\"`\n\tToken                   string `json:\"token\" gorm:\"type:varchar(255);not null\"`\n\tEncodingAesKey          string `json:\"encoding_aes_key\" gorm:\"type:varchar(255);not null\"`\n\tCorpID                  string `json:\"corp_id\" gorm:\"type:varchar(255);index\"`\n\tBaseModel\n}\n\nfunc GetDingtalkSuite(suiteID string) (*DingtalkSuite, error) {\n\tvar suite DingtalkSuite\n\terr := DB.Where(\"suite_id = ?\", suiteID).First(&suite).Error\n\tif err != nil {\n\t\treturn nil, errors.New(\"suite not found\")\n\t}\n\treturn &suite, nil\n}\n\nfunc (suite *DingtalkSuite) Create() error {\n\tif suite.SuiteID == \"\" {\n\t\treturn errors.New(\"suite_id cannot be empty\")\n\t}\n\tvar count int64\n\tDB.Model(&DingtalkSuite{}).Where(\"suite_id = ?\", suite.SuiteID).Count(&count)\n\tif count > 0 {\n\t\treturn errors.New(\"suite_id already exists\")\n\t}\n\n\tresult := DB.Create(suite)\n\treturn result.Error\n}\n\nfunc (suite *DingtalkSuite) Update() error {\n\tif suite.SuiteID == \"\" {\n\t\treturn errors.New(\"suite_id cannot be empty\")\n\t}\n\n\treturn DB.Model(suite).Updates(suite).Error\n}\n\nfunc (suite *DingtalkSuite) Delete() error {\n\tif suite.SuiteID == \"\" {\n\t\treturn errors.New(\"suite_id cannot be empty\")\n\t}\n\n\treturn DB.Delete(suite).Error\n}\n\nfunc GetDingtalkSuitesByCorpID(corpID string) ([]*DingtalkSuite, error) {\n\tvar suites []*DingtalkSuite\n\terr := DB.Where(\"corp_id = ?\", corpID).Find(&suites).Error\n\treturn suites, err\n}"
  },
  {
    "path": "api/model/enterprise.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/utils/system\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"gorm.io/gorm\"\n)\n\ntype Enterprise struct {\n\tEid                 int64                `json:\"id\" gorm:\"primaryKey;autoIncrement\"`\n\tDisplayName         string               `json:\"display_name\" gorm:\"not null\" binding:\"required\" example:\"Enterprise Name\"`\n\tLogo                string               `json:\"logo\" gorm:\"not null\" binding:\"required\" example:\"http://a.com/a.jpg\"`\n\tIco                 string               `json:\"ico\" gorm:\"type:varchar(100);default:'';not null\" example:\"http://a.com/favicon.ico\"`\n\tKeywords            string               `json:\"keywords\" gorm:\"type:text;not null\" example:\"AI,Hub,Agent\"`\n\tCopyright           string               `json:\"copyright\" gorm:\"type:varchar(255);default:'';not null\" example:\"© 2023 Company Name\"`\n\tType                string               `json:\"type\" gorm:\"type:varchar(20);default:independent;not null;comment:'站点类型：independent、enterprise、industry'\" example:\"independent、enterprise、industry\"`\n\tBanner              string               `json:\"banner\" gorm:\"type:text;not null\" example:\"http://a.com/banner.jpg\"`\n\tLanguage            string               `json:\"language\" gorm:\"type:varchar(10);default:zh-cn;not null\" binding:\"required\" example:\"En\"`\n\tTimezone            string               `json:\"timezone\" gorm:\"type:varchar(20);default:UTC+8;not null\" binding:\"required\" example:\"UTC+8\"`\n\tDomain              string               `json:\"domain\" gorm:\"not null\" binding:\"required\" example:\"http://a.com\"`\n\tSlogan              string               `json:\"slogan\" gorm:\"not null\" binding:\"required\" example:\"Slogan Test\"`\n\tStatus              int                  `json:\"status\" gorm:\"type:int;default:1;not null\" example:\"1\"`\n\tDescription         string               `json:\"description\" gorm:\"not null\" example:\"Description Test\"`\n\tTemplateType        string               `json:\"template_type\" gorm:\"type:text;not null\" example:\"default\"`\n\tLayoutType          string               `json:\"layout_type\" gorm:\"type:varchar(10);default:1;not null\" example:\"1\"`\n\tWecomCorpID         string               `json:\"wecom_corp_id\" gorm:\"type:varchar(100);default:'';not null\" example:\"\"`\n\tDingtalkCorpID      string               `json:\"dingtalk_corp_id\" gorm:\"type:varchar(100);default:'';not null\" example:\"\"`\n\tWecomInstallInfo    *WecomInstallInfo    `json:\"wecom_install_info\" gorm:\"-\"`\n\tDingtalkInstallInfo *DingtalkInstallInfo `json:\"dingtalk_auth_corp_info\" gorm:\"-\"`\n\tBaseModel\n}\n\ntype WecomInstallInfo struct {\n\tInstallWecomApp int           `json:\"install_wecom_app\" default:\"0\"`\n\tAuthCorpInfo    *AuthCorpInfo `json:\"auth_corp_info\"`\n}\n\ntype DingtalkInstallInfo struct {\n\tInstallDingtalkApp int                   `json:\"install_dingtalk_app\" default:\"0\"`\n\tAuthCorpInfo       *DingtalkAuthCorpInfo `json:\"auth_corp_info\"`\n}\n\nconst (\n\tEnterpriseStatusNormal       = 1\n\tEnterpriseStatusDisabled     = 2\n\tEnterpriseStatusNotActivated = 0\n\n\tEnterpriseTypeIndependent = \"independent\"\n\tEnterpriseTypeEnterprise  = \"enterprise\"\n\tEnterpriseTypeIndustry    = \"industry\"\n)\n\ntype EnterpriseTypeDescription struct {\n\tKey   string `json:\"key\"`\n\tValue string `json:\"value\"`\n}\n\nvar enterpriseTypeDescMap = map[string]string{\n\tEnterpriseTypeIndependent: \"AI 独立站\",\n\tEnterpriseTypeEnterprise:  \"企业 AI 门户\",\n\tEnterpriseTypeIndustry:    \"行业 AI 门户\",\n}\n\nfunc GetEnterpriseTypeDescription(key string) string {\n\tif desc, ok := enterpriseTypeDescMap[key]; ok {\n\t\treturn desc\n\t}\n\treturn \"\"\n}\n\nfunc GetAllEnterpriseTypeDescriptions() []EnterpriseTypeDescription {\n\tdescriptions := make([]EnterpriseTypeDescription, 0, len(enterpriseTypeDescMap))\n\tfor k, v := range enterpriseTypeDescMap {\n\t\tdescriptions = append(descriptions, EnterpriseTypeDescription{Key: k, Value: v})\n\t}\n\treturn descriptions\n}\n\nfunc GetEnterpriseModel(id int64) (*Enterprise, error) {\n\tvar enterprise Enterprise\n\terr := DB.First(&enterprise, id).Error\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &enterprise, nil\n}\n\n// GetEnterpriseByID Get enterprise information by ID\nfunc GetEnterpriseByID(eid int64) (*Enterprise, error) {\n\tvar enterprise Enterprise\n\terr := DB.Where(\"eid = ?\", eid).First(&enterprise).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &enterprise, nil\n}\n\nfunc CreateEnterpriseModel(enterprise *Enterprise) error {\n\treturn DB.Create(enterprise).Error\n}\n\nfunc (enterprise *Enterprise) Update() error {\n\terr := DB.Model(enterprise).\n\t\tWhere(\"eid = ?\", enterprise.Eid). // 添加主键条件\n\t\tSelect(\"*\").                      // 明确指定更新所有字段\n\t\tUpdates(enterprise).Error\n\treturn err\n}\n\nfunc (enterprise *Enterprise) Delete() error {\n\treturn DB.Delete(enterprise).Error\n}\n\nfunc (enterprise *Enterprise) PartialUpdateEnterprise(updateData map[string]interface{}) error {\n\t// 定义允许更新的字段白名单\n\tallowedFields := map[string]bool{\n\t\t\"display_name\":  true,\n\t\t\"logo\":          true,\n\t\t\"ico\":           true,\n\t\t\"keywords\":      true,\n\t\t\"copyright\":     true,\n\t\t\"type\":          true,\n\t\t\"banner\":        true,\n\t\t\"language\":      true,\n\t\t\"timezone\":      true,\n\t\t\"domain\":        true,\n\t\t\"slogan\":        true,\n\t\t\"status\":        true,\n\t\t\"description\":   true,\n\t\t\"template_type\": true,\n\t\t\"layout_type\":   true,\n\t}\n\n\t// 过滤非法字段\n\tfilteredUpdate := make(map[string]interface{})\n\tfor field, value := range updateData {\n\t\tif allowedFields[field] {\n\t\t\tfilteredUpdate[field] = value\n\t\t}\n\t}\n\n\t// 自动添加更新时间\n\tfilteredUpdate[\"updated_time\"] = time.Now().Unix()\n\n\treturn DB.Model(enterprise).\n\t\tWhere(\"eid = ?\", enterprise.Eid).\n\t\tUpdates(filteredUpdate).Error\n}\n\nfunc GetEnterpriseName(eid int64) (string, error) {\n\tvar displayName string\n\terr := DB.Model(&Enterprise{}).\n\t\tSelect(\"display_name\").\n\t\tWhere(\"eid = ?\", eid).\n\t\tLimit(1).\n\t\tScan(&displayName).Error\n\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn displayName, nil\n}\n\n// InitializeSystem checks if the system is in SAAS mode\n// If not and no enterprise exists, it creates a default enterprise, user group, and admin user\nfunc InitializeSystem() error {\n\t// Check if in SAAS mode\n\tisSaas := config.IS_SAAS\n\tif isSaas {\n\t\tlogger.SysLogf(\"System is running in SAAS mode, skipping default enterprise and user initialization\")\n\t\treturn nil\n\t}\n\n\t// Check if any enterprise exists\n\tvar count int64\n\tif err := DB.Model(&Enterprise{}).Count(&count).Error; err != nil {\n\t\tlogger.SysLogf(\"Failed to check enterprise records: %s\", err.Error())\n\t\treturn err\n\t}\n\n\t// If enterprises already exist, no need to initialize\n\tif count > 0 {\n\t\tlogger.SysLogf(\"Enterprise records already exist, skipping default enterprise and user initialization\")\n\t\treturn nil\n\t}\n\n\tlogger.SysLogf(\"System is running in non-SAAS mode with no enterprise records, starting initialization\")\n\n\t// Start a transaction\n\ttx := DB.Begin()\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\tif tx.Error != nil {\n\t\tlogger.SysLogf(\"Failed to begin transaction: %s\", tx.Error.Error())\n\t\treturn tx.Error\n\t}\n\n\t// 1. Create default enterprise\n\tenterprise := Enterprise{\n\t\tDisplayName:  \"53AI Hub\",\n\t\tLogo:         \"https://img.ibos.cn/common/agenthub/agent/53ai.png\",\n\t\tLanguage:     \"zh-cn\",\n\t\tDescription:  \"Default enterprise created during system initialization\",\n\t\tLayoutType:   \"1\",\n\t\tTemplateType: \"\",\n\t\tStatus:       EnterpriseStatusNormal,\n\t}\n\n\tif err := tx.Create(&enterprise).Error; err != nil {\n\t\ttx.Rollback()\n\t\tlogger.SysLogf(\"Failed to create default enterprise: %s\", err.Error())\n\t\treturn err\n\t}\n\tlogger.SysLogf(\"Successfully created default enterprise, ID: %d\", enterprise.Eid)\n\n\t// 2. Create default user group\n\tdefaultGroup := Group{\n\t\tEid:       enterprise.Eid,\n\t\tCreatedBy: 0, // System created\n\t\tGroupName: \"免费版\",\n\t\tGroupType: USER_GROUP_TYPE,\n\t\tSort:      0,\n\t}\n\n\tif err := tx.Create(&defaultGroup).Error; err != nil {\n\t\ttx.Rollback()\n\t\tlogger.SysLogf(\"Failed to create default user group: %s\", err.Error())\n\t\treturn err\n\t}\n\tlogger.SysLogf(\"Successfully created default user group, ID: %d\", defaultGroup.GroupId)\n\n\tinitAILinkData(tx, enterprise.Eid)\n\tlogger.SysLog(\"Successfully created default ai_link group\")\n\n\tagentGroup := Group{\n\t\tEid:       enterprise.Eid,\n\t\tCreatedBy: 0, // System created\n\t\tGroupName: \"默认\",\n\t\tGroupType: AGENT_TYPE,\n\t\tSort:      0,\n\t}\n\n\tif err := tx.Create(&agentGroup).Error; err != nil {\n\t\ttx.Rollback()\n\t\tlogger.SysLogf(\"Failed to create default agent group: %s\", err.Error())\n\t\treturn err\n\t}\n\tlogger.SysLogf(\"Successfully created default agent group, ID: %d\", agentGroup.GroupId)\n\n\t// 创建订阅设置\n\tsubscriptionSetting := &SubscriptionSetting{\n\t\tGroupId:   defaultGroup.GroupId,\n\t\tLogoUrl:   \"//img.ibos.cn/common/agenthub/subscription/vip-1.png\", // 默认为空\n\t\tAiEnabled: false,\n\t\tIsDefault: true,\n\t}\n\n\tif err := tx.Create(subscriptionSetting).Error; err != nil {\n\t\ttx.Rollback()\n\t\tlogger.SysLogf(\"Failed to create subscription setting: %s\", err.Error())\n\t\treturn err\n\t}\n\tlogger.SysLogf(\"Successfully created subscription setting, ID: %d\", subscriptionSetting.SettingId)\n\n\tyearRelation := &SubscriptionRelation{\n\t\tSettingId: subscriptionSetting.SettingId,\n\t\tAmount:    0,\n\t\tCurrency:  \"CNY\",\n\t\tTimeUnit:  \"year\",\n\t\tType:      1,\n\t}\n\n\tif err := tx.Create(yearRelation).Error; err != nil {\n\t\ttx.Rollback()\n\t\tlogger.SysLogf(\"Failed to create yearly subscription relation: %s\", err.Error())\n\t\treturn err\n\t}\n\tlogger.SysLogf(\"Successfully created yearly subscription relation\")\n\n\tmonthRelation := &SubscriptionRelation{\n\t\tSettingId: subscriptionSetting.SettingId,\n\t\tAmount:    0,\n\t\tCurrency:  \"CNY\",\n\t\tTimeUnit:  \"month\",\n\t\tType:      1,\n\t}\n\n\tif err := tx.Create(monthRelation).Error; err != nil {\n\t\ttx.Rollback()\n\t\tlogger.SysLogf(\"Failed to create monthly subscription relation: %s\", err.Error())\n\t\treturn err\n\t}\n\tlogger.SysLogf(\"Successfully created monthly subscription relation\")\n\n\tpointsRelation := &SubscriptionRelation{\n\t\tSettingId: subscriptionSetting.SettingId,\n\t\tAmount:    0,\n\t\tCurrency:  \"\",\n\t\tTimeUnit:  \"month\",\n\t\tType:      2,\n\t}\n\n\tif err := tx.Create(pointsRelation).Error; err != nil {\n\t\ttx.Rollback()\n\t\tlogger.SysLogf(\"Failed to create points subscription relation: %s\", err.Error())\n\t\treturn err\n\t}\n\tlogger.SysLogf(\"Successfully created points subscription relation\")\n\n\t// Commit transaction\n\tif err := tx.Commit().Error; err != nil {\n\t\tlogger.SysLogf(\"Failed to commit transaction: %s\", err.Error())\n\t\treturn err\n\t}\n\n\tlogger.SysLogf(\"System initialization completed successfully\")\n\n\t// 执行版本检查（异步执行，不阻塞初始化流程）\n\tgo func() {\n\t\tif resp, statisticScript, err := system.CheckVersionAndReturn(); err != nil {\n\t\t\tlogger.SysLogf(\"Async version check failed: %v\", err)\n\t\t} else {\n\t\t\tif resp.Action == \"install\" && statisticScript != \"\" {\n\t\t\t\t// 保存到数据库\n\t\t\t\tsetting := &Setting{\n\t\t\t\t\tEid:   enterprise.Eid,\n\t\t\t\t\tKey:   string(ThirdPartyStatisticHeader),\n\t\t\t\t\tValue: statisticScript,\n\t\t\t\t}\n\n\t\t\t\tif err := CreateSetting(setting); err != nil {\n\t\t\t\t\tlogger.SysLogf(\"Failed to save statistic setting: %v\", err)\n\t\t\t\t}\n\t\t\t\tlogger.SysLogf(\"Successfully generated and saved statistic script\")\n\t\t\t}\n\n\t\t}\n\t}()\n\n\tlogger.SysLogf(\"\\033[34m\" + `\n                    @                \n                   ###                \n           /###################\\      \n          |#####################|     \n        ##|#####################|##  \n       ###|####    #####    ####|###  \n        ##|#####################|##  \n          |#####################|     \n           \\###################/      \n                  ######              \n                  ###                 \n                  @\n\t` + \"\\033[0m\")\n\tlogger.SysLogf(\"\\033[32m\\n\" +\n\t\t\"#################################\\n\" +\n\t\t\"#  Email: admin@53ai.com        #\\n\" +\n\t\t\"#  Password: admin888           #\\n\" +\n\t\t\"#################################\\n\" +\n\t\t\"\\033[0m\")\n\treturn nil\n}\n\nvar GroupData = []struct {\n\tGroupName string\n\tGroupType int64\n\tSort      int64\n}{\n\t{\"AI搜索\", 2, 6},\n\t{\"智能对话\", 2, 5},\n\t{\"办公提效\", 2, 4},\n\t{\"图片处理\", 2, 3},\n\t{\"视频制作\", 2, 2},\n\t{\"AI学习\", 2, 1},\n}\n\nvar AILinkData = []struct {\n\tGroupName   string\n\tName        string\n\tLogo        string\n\tURL         string\n\tDescription string\n\tSort        int64\n}{\n\t// AI搜索分组\n\t{\"AI搜索\", \"百度AI+\", \"https://hubapi.53ai.com/api/preview/b5970a3697479df6b00d73ab827dabb2.png\", \"https://chat.baidu.com\", \"百度官方ai搜索\", 0},\n\t{\"AI搜索\", \"天工AI\", \"https://hubapi.53ai.com/api/preview/432dfdbb2ade2e941a331fdc25ee29f5.png\", \"https://www.tiangong.cn/\", \"国内首个对标 ChatGPT 的双千亿级大语言模型，也是一个对话式AI助手\", 0},\n\t{\"AI搜索\", \"同花顺问财\", \"https://hubapi.53ai.com/api/preview/c65e9d65c42a1bdabfd7e09635dec05a.png\", \"https://www.iwencai.com\", \"同花顺旗下专业的智能选股平台\", 0},\n\t{\"AI搜索\", \"秘塔搜索\", \"https://hubapi.53ai.com/api/preview/710cd2a90fc7a38d8e78798af1fc597a.png\", \"https://metaso.cn\", \"没有广告，直达结果\", 0},\n\t{\"AI搜索\", \"Perplexity AI\", \"https://hubapi.53ai.com/api/preview/b2d85e0aa413297b2dccd0837fba6f28.png\", \"https://perplexity.ai\", \"知识的起点\", 0},\n\t{\"AI搜索\", \"知乎直答\", \"https://hubapi.53ai.com/api/preview/8698388b9dfc34d995a6238b120365d8.png\", \"https://zhida.zhihu.com\", \"用提问发现世界\", 0},\n\n\t// 智能对话分组\n\t{\"智能对话\", \"360智脑\", \"https://hubapi.53ai.com/api/preview/4a83fd5e7a31d0dd816d4f57237f13c5.png\", \"https://i.360.com/\", \"360搜索最新推出的AI对话聊天大模型\", 0},\n\t{\"智能对话\", \"百度AI伙伴\", \"https://hubapi.53ai.com/api/preview/afbc2525ffca738ba39989d486e97223.png\", \"https://chat.baidu.com/\", \"百度最新上线的AI搜索对话工具\", 0},\n\t{\"智能对话\", \"智谱清言\", \"https://hubapi.53ai.com/api/preview/b0072ad41d46626043cf1b2e3b2ce374.png\", \"https://chatglm.cn/\", \"Chatglm,千亿参数对话模型,支持多轮对话\", 0},\n\t{\"智能对话\", \"豆包\", \"https://hubapi.53ai.com/api/preview/d98b75d99fba38975312841a3c85aa72.png\", \"https://www.doubao.com/\", \"抖音旗下AI工具，你的智能助手\", 0},\n\t{\"智能对话\", \"ChatGPT\", \"https://hubapi.53ai.com/api/preview/bcade7d1cebca9273da445ffc8671711.png\", \"https://chat.openai.com\", \"Chatgpt.com\", 0},\n\t{\"智能对话\", \"通义千问\", \"https://hubapi.53ai.com/api/preview/ea1ad076efc73a30c8eaf1e86fc193cc.png\", \"https://tongyi.aliyun.com\", \"阿里巴巴旗下的一款智能体机器人，它利用自然语言处理技术，为用户提供智能化的语音交互服务\", 0},\n\t{\"智能对话\", \"零一万知\", \"https://hubapi.53ai.com/api/preview/f03bced2dfe845dec2d897cffcb3ce1b.png\", \"https://www.wanzhi.com/\", \"集AI对话聊天、文档阅读和PPT创作于一体的一站式AI工作平台\", 0},\n\t{\"智能对话\", \"讯飞星火\", \"https://hubapi.53ai.com/api/preview/4417ab5f7607452ccd8a3174616d7f56.png\", \"https://xinghuo.xfyun.cn\", \"懂你的AI助手\", 0},\n\t{\"智能对话\", \"文心一言\", \"https://hubapi.53ai.com/api/preview/eee853619f4fcbd7f15622198101630c.png\", \"https://yiyan.baidu.com/\", \"文心一言是百度研发的知识增强大语言模型，能够与人对话互动，回答问题，协助创作\", 0},\n\t{\"智能对话\", \"腾讯元宝\", \"https://hubapi.53ai.com/api/preview/433b8834406d66420558b6f093f0fed1.png\", \"https://yuanbao.tencent.com\", \"腾讯元宝是一款基于腾讯混元大模型的AI产品，为用户提供多元化的AI能力\", 0},\n\n\t// 办公提效分组\n\t{\"办公提效\", \"秒出PPT\", \"https://hubapi.53ai.com/api/preview/e3d748b2fc4a7f108090552e0b0dfc18.png\", \"https://10sppt.com/\", \"10S快速生成PPT\", 0},\n\t{\"办公提效\", \"AIPPT\", \"https://hubapi.53ai.com/api/preview/872850cdbb1fec8bc54581982572d4aa.png\", \"https://www.aippt.cn/\", \"AI一键生成PPT\", 0},\n\t{\"办公提效\", \"笔尖写作\", \"https://hubapi.53ai.com/api/preview/23addd994bc064fd2d48d8b0adbad6bd.png\", \"https://www.bijianxiezuo.com/\", \"高质量Ai写作利器\", 0},\n\t{\"办公提效\", \"ChatPPT\", \"https://hubapi.53ai.com/api/preview/f95c1d7469c53aff1c2d896677ce504b.png\", \"https://chat-ppt.com/\", \"对话式创作演示文稿，1400+类指令支持\", 0},\n\t{\"办公提效\", \"百度橙篇\", \"https://hubapi.53ai.com/api/preview/d6121e6ed2e190ad67ef05fc2897fc84.png\", \"https://cp.baidu.com\", \"写长文神器\", 0},\n\t{\"办公提效\", \"歌者PPT\", \"https://hubapi.53ai.com/api/preview/5379914644c44119e771865e00a1a565.png\", \"https://gezhe.com/\", \"永久免费的 PPT 智能生成工具\", 0},\n\t{\"办公提效\", \"万彩AI\", \"https://hubapi.53ai.com/api/preview/dd71cc93f0324a7d985e51ea931f8396.png\", \"https://ai.kezhan365.com/\", \"万彩AI，让创意轻松落地\", 0},\n\t{\"办公提效\", \"标智客\", \"https://hubapi.53ai.com/api/preview/b55f51c783bd473d3f9a1b3d1ebcf147.png\", \"https://www.logomaker.com.cn/\", \"智能LOGO设计生成\", 0},\n\t{\"办公提效\", \"Wegic\", \"https://hubapi.53ai.com/api/preview/de7b13cb2c80afc5cc010b2a6615d69a.png\", \"https://wegic.ai/\", \"即时设计团队推出的 AI 网页生成工具\", 0},\n\t{\"办公提效\", \"有道写作\", \"https://hubapi.53ai.com/api/preview/a5a84f10db33b8d49f5c242ba52b3a47.png\", \"https://write.youdao.com\", \"网易有道出品的智能英文写作修改和润色工具\", 0},\n\n\t// 图片处理分组\n\t{\"图片处理\", \"美图抠图\", \"https://hubapi.53ai.com/api/preview/b9f3a740af7c87e18af40d8ed8e50a8c.png\", \"https://cutout.designkit.com/\", \"美图秀秀推出的AI智能抠图工具，一键移除背景\", 0},\n\t{\"图片处理\", \"美图设计室\", \"https://hubapi.53ai.com/api/preview/179d3e00e9ebddf92da34330ad6e2097.png\", \"https://www.designkit.com/\", \"一款功能强大、易于使用的图像处理和照片编辑软件，提供了丰富功能\", 0},\n\t{\"图片处理\", \"一键抠图\", \"https://hubapi.53ai.com/api/preview/17a1c172c241b5ac79a5e9eb9ab58561.png\", \"https://www.yijiankoutu.com/\", \"在线一键抠图换背景\", 0},\n\n\t// 视频制作分组\n\t{\"视频制作\", \"百度度加\", \"https://hubapi.53ai.com/api/preview/919eb97d2b02114f475046c68fe3e70b.png\", \"https://aigc.baidu.com/\", \"度加剪辑是百度官方出品的口播自媒体必备剪辑工具，简洁好用\", 0},\n\t{\"视频制作\", \"鬼手剪辑\", \"https://hubapi.53ai.com/api/preview/8244602231503e7ebb429ffd393ccab7.png\", \"https://cn.jollytoday.com\", \"视频AI翻译、硬字幕翻译和视频去字幕的专业视频剪辑工具\", 0},\n\t{\"视频制作\", \"快手可灵\", \"https://hubapi.53ai.com/api/preview/52193bfb4d03a28fccfd827bbb450e04.png\", \"https://app.klingai.com/\", \"快手旗下图片生成和视频生成大模型工具\", 0},\n\t{\"视频制作\", \"抖音即创\", \"https://hubapi.53ai.com/api/preview/707620ea6742afae608c9c109b51a33d.png\", \"https://aic.oceanengine.com\", \"专注于智能创意生产与管理分析\", 0},\n\t{\"视频制作\", \"pika\", \"https://hubapi.53ai.com/api/preview/7f2201d2f291251a64c626dffa5d9d2d.png\", \"https://pika.art\", \"文本生成电影工具\", 0},\n\t{\"视频制作\", \"腾讯智影\", \"https://hubapi.53ai.com/api/preview/2bf37ee21997235dea73084e21795987.png\", \"https://zenvideo.qq.com\", \"腾讯智影AI绘画，只需简单的描述就可为您生成独一无二的创意画作\", 0},\n\n\t// AI学习分组\n\t{\"AI学习\", \"LangGPT\", \"https://hubapi.53ai.com/api/preview/41193ab845ca040c9ea34b0a7fa1bb80.png\", \"https://langgptai.feishu.cn/\", \"人人都能写出高质量提示词\", 0},\n\t{\"AI学习\", \"通往AGI之路\", \"https://hubapi.53ai.com/api/preview/30f58543638b8e9eab9a242f2c1594ed.png\", \"https://waytoagi.feishu.cn/\", \"一个全面系统的AI学习路径\", 0},\n}\n\nfunc initAILinkData(tx *gorm.DB, eid int64) error {\n\tgroups := make([]Group, 0, len(GroupData))\n\tcurrentTime := time.Now().UnixMilli()\n\n\tfor _, g := range GroupData {\n\t\tgroups = append(groups, Group{\n\t\t\tEid:       eid,\n\t\t\tGroupName: g.GroupName,\n\t\t\tGroupType: g.GroupType,\n\t\t\tSort:      g.Sort,\n\t\t\tBaseModel: BaseModel{\n\t\t\t\tCreatedTime: currentTime,\n\t\t\t\tUpdatedTime: currentTime,\n\t\t\t},\n\t\t})\n\t}\n\n\tif err := tx.CreateInBatches(groups, 100).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn err\n\t}\n\n\tgroupMap := make(map[string]int64)\n\tvar insertedGroups []Group\n\tif err := tx.Where(\"eid = ?\", eid).Find(&insertedGroups).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn err\n\t}\n\n\tfor _, g := range insertedGroups {\n\t\tgroupMap[g.GroupName] = g.GroupId\n\t}\n\n\taiLinks := make([]AILink, 0, len(AILinkData))\n\tfor _, link := range AILinkData {\n\t\tgroupID, exists := groupMap[link.GroupName]\n\t\tif !exists {\n\t\t\tcontinue\n\t\t}\n\n\t\taiLinks = append(aiLinks, AILink{\n\t\t\tEid:         eid,\n\t\t\tGroupID:     groupID,\n\t\t\tName:        link.Name,\n\t\t\tLogo:        link.Logo,\n\t\t\tURL:         link.URL,\n\t\t\tDescription: link.Description,\n\t\t\tSort:        link.Sort,\n\t\t\tBaseModel: BaseModel{\n\t\t\t\tCreatedTime: currentTime,\n\t\t\t\tUpdatedTime: currentTime,\n\t\t\t},\n\t\t})\n\t}\n\n\tif err := tx.CreateInBatches(aiLinks, 200).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc GetEnterpriseByWecomCorpID(wecomCorpID string) (*Enterprise, error) {\n\tvar enterprise Enterprise\n\terr := DB.Where(\"wecom_corp_id = ?\", wecomCorpID).First(&enterprise).Error\n\tif err != nil {\n\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn &enterprise, nil\n}\n\nfunc (e *Enterprise) LoadWecomCorpInfo(suiteID string, loadType int) error {\n\te.WecomInstallInfo = &WecomInstallInfo{\n\t\tInstallWecomApp: 0,\n\t}\n\tif e.WecomCorpID == \"\" || suiteID == \"\" {\n\t\treturn nil\n\t}\n\n\twc, err := GetWecomCorp(suiteID, e.WecomCorpID)\n\tif wc == nil || err != nil {\n\t\treturn nil\n\t}\n\n\te.WecomInstallInfo.InstallWecomApp = 1\n\tif loadType == 1 {\n\t\te.WecomInstallInfo.AuthCorpInfo = wc.GetAuthCorpInfo()\n\t}\n\n\treturn nil\n}\n\nfunc (e *Enterprise) LoadDingtalkCorpInfo(suiteID string, loadType int) error {\n\te.DingtalkInstallInfo = &DingtalkInstallInfo{\n\t\tInstallDingtalkApp: 0,\n\t}\n\tif e.DingtalkCorpID == \"\" || suiteID == \"\" {\n\t\treturn nil\n\t}\n\n\tdt, err := GetDingtalkCorp(suiteID, e.DingtalkCorpID)\n\tif dt == nil || err != nil || dt.Status == 0  {\n\t\t// 授权以无效，更新为无授权。测试服流程是分开的，这里不能直接处理，不然会在真授权之前被清除掉\n\t\t// e.DingtalkCorpID = \"\"\n\t\t// _ = e.Update()\n\t\treturn nil\n\t}\n\te.DingtalkInstallInfo.InstallDingtalkApp = 1\n\tif loadType == 1 {\n\t\te.DingtalkInstallInfo.AuthCorpInfo = dt.GetAuthCorpInfo()\n\t}\n\treturn nil\n}\n\nfunc GetEnterpriseByDingtalkCorpID(dingtalkCorpID string) (*Enterprise, error) {\n\tvar enterprise Enterprise\n\terr := DB.Where(\"dingtalk_corp_id = ?\", dingtalkCorpID).First(&enterprise).Error\n\tif err != nil {\n\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn &enterprise, nil\n}\n"
  },
  {
    "path": "api/model/enterprise_config.go",
    "content": "package model\n\nimport (\n\t\"fmt\"\n)\n\ntype EnterpriseConfig struct {\n\tID      int64  `gorm:\"primaryKey;autoIncrement\" json:\"id\"`\n\tEID     int64  `json:\"eid\" gorm:\"column:eid;size:64;uniqueIndex:idx_eid_config\"`\n\tEnabled bool   `json:\"enabled\" gorm:\"not null;default:false\"`\n\tType    string `json:\"type\" gorm:\"uniqueIndex:idx_eid_config;size:64;not null;default:''\"`\n\t// smtp {\\\"smtp_host\\\":\\\"smtp_host.com\\\",\\\"smtp_username\\\":\\\"smtp_username@xx.com\\\",\\\"smtp_port\\\":\\\"465\\\",\\\"smtp_password\\\":\\\"xxxxxx\\\",\\\"smtp_from\\\":\\\"smtp_username@xx.com\\\",\\\"smtp_is_ssl\\\":true,\\\"smtp_to\\\":\\\"smtp_to\\\"}\n\t// auth_sso {\"encrypt_enabled\":true,\"secret\":\"\"}\n\tContent string `json:\"content\" gorm:\"type:text\"`\n\tBaseModel\n}\n\nconst (\n\tEnterpriseConfigTypeSMTP   = \"smtp\"\n\tEnterpriseConfigTypeMobile = \"mobile\"\n\tEnterpriseConfigTypeSSO    = \"auth_sso\"\n)\n\nvar EnterpriseConfigTypes = []string{\n\tEnterpriseConfigTypeSMTP,\n\tEnterpriseConfigTypeMobile,\n\tEnterpriseConfigTypeSSO,\n}\n\n// 根据 type 获取 content 默认值\nfunc GetEnterpriseConfigDefaultContent(configType string) (string, error) {\n\tswitch configType {\n\tcase EnterpriseConfigTypeSMTP:\n\t\treturn `{\"smtp_host\":\"\",\"smtp_username\":\"\",\"smtp_port\":\"\",\"smtp_password\":\"\",\"smtp_from\":\"\",\"smtp_is_ssl\":true,\"smtp_to\":\"\"}`, nil\n\tcase EnterpriseConfigTypeMobile:\n\t\treturn `{}`, nil\n\tcase EnterpriseConfigTypeSSO:\n\t\treturn `{\"encrypt_enabled\":true,\"secret\":\"\"}`, nil\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"config type %s not found\", configType)\n\t}\n}\n"
  },
  {
    "path": "api/model/enterprise_sync.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n)\n\n// FindEnterpriseUserByAccount 在所有企业中查找账号（先平台表未找到时调用）\n// 支持手机号、邮箱、用户名；返回第一条匹配\nfunc FindEnterpriseUserByAccount(account string) (*User, error) {\n\tif helper.IsValidPhone(account) {\n\t\tvar u User\n\t\tif err := DB.Where(\"mobile = ?\", account).First(&u).Error; err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &u, nil\n\t}\n\n\tif helper.IsValidEmail(account) {\n\t\tvar u User\n\t\tif err := DB.Where(\"email = ?\", account).First(&u).Error; err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &u, nil\n\t}\n\n\t// username\n\tvar u User\n\tif err := DB.Where(\"username = ?\", account).First(&u).Error; err != nil {\n\t\treturn nil, err\n\t}\n\treturn &u, nil\n}\n\n// SetRelatedID 将企业用户的 related_id 更新为 platformUserID\nfunc SetRelatedID(enterpriseUserID int64, platformUserID int64) error {\n\tif enterpriseUserID == 0 || platformUserID == 0 {\n\t\treturn errors.New(\"invalid ids\")\n\t}\n\treturn DB.Model(&User{}).Where(\"user_id = ?\", enterpriseUserID).Update(\"related_id\", platformUserID).Error\n}\n\n// SetRelatedIDByEidAccount 按 eid + account（mobile/email/username）批量将相关 enterprise 记录的 related_id 写回 platformUserID\n// 仅更新 related_id == 0 的记录，返回受影响的行数\nfunc SetRelatedIDByEidAccount(eid int64, account string, platformUserID int64) (int64, error) {\n\tif eid == 0 || account == \"\" || platformUserID == 0 {\n\t\treturn 0, errors.New(\"invalid params\")\n\t}\n\n\tdb := DB.Model(&User{}).Where(\"eid = ? AND related_id = 0\", eid)\n\tif helper.IsValidPhone(account) {\n\t\tdb = db.Where(\"mobile = ?\", account)\n\t} else if helper.IsValidEmail(account) {\n\t\tdb = db.Where(\"email = ?\", account)\n\t} else {\n\t\tdb = db.Where(\"username = ?\", account)\n\t}\n\n\tres := db.Update(\"related_id\", platformUserID)\n\tif res.Error != nil {\n\t\treturn 0, res.Error\n\t}\n\treturn res.RowsAffected, nil\n}"
  },
  {
    "path": "api/model/group.go",
    "content": "package model\n\n// Group represents a group entity with optional agent associations\ntype Group struct {\n\tGroupId   int64  `json:\"group_id\" gorm:\"primaryKey;autoIncrement\"`\n\tEid       int64  `json:\"eid\" gorm:\"not null;index\" example:\"1\"`\n\tCreatedBy int64  `json:\"created_by\" gorm:\"not null\" example:\"1\"`\n\tGroupName string `json:\"group_name\" gorm:\"not null\" example:\"group_name\"`\n\tGroupType int64  `json:\"group_type\" gorm:\"not null;default:0\" example:\"1\"`\n\tSort      int64  `json:\"sort\" gorm:\"not null; default:0\" example:\"0\"`\n\t// Define the relationship between Group and Agent through resource_permissions table\n\tAgents []*Agent `json:\"agents\" gorm:\"-\"` // Ignore this field in normal GORM operations\n\tBaseModel\n}\n\nconst (\n\tUSER_FREE_GROUP_NAME = \"免费版\"\n)\n\n// GetGroupWithAgents retrieves a group with its associated agents through resource permissions\nfunc GetGroupWithAgents(groupId int64, enable bool) (*Group, error) {\n\tvar group Group\n\n\t// First get the group\n\tif err := DB.Where(\"group_id = ?\", groupId).First(&group).Error; err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Then get associated agents through resource permissions\n\tvar agents []*Agent\n\terr := DB.Model(&Agent{}).\n\t\tDistinct(\"agents.*\").\n\t\tJoins(\"JOIN resource_permissions ON resource_permissions.resource_id = agents.agent_id\").\n\t\tWhere(\"resource_permissions.group_id = ? AND resource_permissions.resource_type = ? and enable = ?\",\n\t\t\tgroupId, ResourceTypeAgent, enable).\n\t\tOrder(\"sort DESC\").\n\t\tOrder(\"agent_id DESC\").\n\t\tFind(&agents).Error\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgroup.Agents = agents\n\treturn &group, nil\n}\n\n// GetGroupsWithAgents retrieves groups with their associated agents with pagination support\nfunc GetGroupsWithAgents(eid int64, groupType int64, offset, limit int) ([]Group, int64, error) {\n\tvar groups []Group\n\tvar count int64\n\n\t// Get total count first\n\tif err := DB.Model(&Group{}).\n\t\tWhere(\"eid = ? AND group_type = ?\", eid, groupType).\n\t\tCount(&count).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\t// Query paginated groups\n\tquery := DB.Where(\"eid = ? AND group_type = ?\", eid, groupType).\n\t\tOrder(\"sort DESC\")\n\n\tif limit > 0 {\n\t\tquery = query.Offset(offset).Limit(limit)\n\t}\n\n\tif err := query.Find(&groups).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\t// Query associated agents for each group\n\tfor i := range groups {\n\t\tvar agents []*Agent\n\t\terr := DB.Model(&Agent{}).\n\t\t\tDistinct(\"agents.*\").\n\t\t\tJoins(\"JOIN resource_permissions ON resource_permissions.resource_id = agents.agent_id\").\n\t\t\tWhere(\"resource_permissions.group_id = ? AND resource_permissions.resource_type = ? AND agents.enable = ?\",\n\t\t\t\tgroups[i].GroupId, ResourceTypeAgent, true).\n\t\t\tOrder(\"sort DESC\").\n\t\t\tOrder(\"agent_id DESC\").\n\t\t\tFind(&agents).Error\n\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\n\t\tgroups[i].Agents = agents\n\t}\n\n\treturn groups, count, nil\n}\n\nconst (\n\tUSER_GROUP_TYPE          = 1\n\tAI_LINKS_TYPE            = 2\n\tAGENT_TYPE               = 3\n\tINTERNAL_USER_GROUP_TYPE = 4\n\tSYSTEM_PROMPT_TYPE       = 5\n\tPERSONAL_PROMPT_TYPE     = 6\n)\n\nfunc CreateGroup(group *Group) error {\n\treturn DB.Create(group).Error\n}\n\nfunc DeleteGroupByID(groupID int64) error {\n\treturn DB.Where(\"group_id = ?\", groupID).Delete(&Group{}).Error\n}\n\nfunc UpdateGroup(group *Group) error {\n\treturn DB.Model(group).\n\t\tSelect(\"group_name\", \"group_type\", \"sort\", \"updated_at\").\n\t\tUpdates(group).Error\n}\n\nfunc GetGroupByID(groupID int64) (*Group, error) {\n\tvar group Group\n\t// 执行查询操作\n\tresult := DB.Where(\"group_id = ?\", groupID).First(&group)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\treturn &group, nil\n}\n\n// BatchSubmitGroups batch submits group information of a specified type, and decides to create, update, or delete based on the ID.\nfunc BatchSubmitGroups(groupType int64, eid int64, groups []Group) error {\n\t// Query only existing groups of the specified type and eid\n\tvar existingGroups []Group\n\tif err := DB.Where(\"group_type = ? AND eid = ?\", groupType, eid).Find(&existingGroups).Error; err != nil {\n\t\treturn err\n\t}\n\texistingGroupIDs := make(map[int64]bool)\n\tfor _, group := range existingGroups {\n\t\texistingGroupIDs[group.GroupId] = true\n\t}\n\n\t// Process only incoming groups of the specified type and valid eid\n\tfor _, group := range groups {\n\t\tif group.GroupType != groupType || group.Eid != eid {\n\t\t\tcontinue\n\t\t}\n\t\tif group.GroupId == 0 {\n\t\t\tif err := CreateGroup(&group); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tif err := UpdateGroup(&group); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\texistingGroupIDs[group.GroupId] = false\n\t\t}\n\t}\n\n\t// Delete groups of the specified type and eid that exist in the database but not in the incoming data\n\tfor groupID, shouldDelete := range existingGroupIDs {\n\t\tif shouldDelete {\n\t\t\tif err := DeleteGroupByID(groupID); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc GetGroupsByEid(eid int64, groupType int64) ([]Group, error) {\n\tvar groups []Group\n\tif err := DB.Where(\"eid =? AND group_type =?\", eid, groupType).Order(\"sort DESC\").Find(&groups).Error; err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(groups) == 0 {\n\t\tdefaultGroup := Group{\n\t\t\tEid:       eid,\n\t\t\tGroupType: groupType,\n\t\t\tGroupName: \"默认\",\n\t\t\tSort:      0,\n\t\t}\n\t\tif err := DB.Create(&defaultGroup).Error; err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tgroups = append(groups, defaultGroup)\n\t}\n\n\treturn groups, nil\n}\n\nfunc GetFirstGroupByEid(eid int64, groupType int64) (Group, error) {\n\tvar group Group\n\tif err := DB.Where(\"eid =? AND group_type =?\", eid, groupType).Order(\"sort DESC\").First(&group).Error; err != nil {\n\t\treturn Group{}, err\n\t}\n\treturn group, nil\n}\n\nfunc ExistsGroupByIDAndType(Eid int64, groupId int64, groupType int64) (bool, error) {\n\tvar group Group\n\terr := DB.Where(\"group_id =? AND group_type =? AND eid =?\", groupId, groupType, Eid).First(&group).Error\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn true, nil\n}\n\n// AILinkInfo 定义AI链接信息结构体\ntype AILinkInfo struct {\n\tName        string `json:\"name\"`\n\tLogo        string `json:\"logo\"`\n\tURL         string `json:\"url\"`\n\tDescription string `json:\"description\"`\n\tSort        int64  `json:\"sort\"`\n}\n\n// GroupInfo 定义分组信息结构体，包含子链接\ntype GroupInfo struct {\n\tGroupName string       `json:\"group_name\"`\n\tGroupType int64        `json:\"group_type\"`\n\tSort      int64        `json:\"sort\"`\n\tLinks     []AILinkInfo `json:\"links\"`\n}\n\n// GetDefaultGroupData 返回组合后的默认分组及链接数据\nfunc GetDefaultGroupData() []GroupInfo {\n\tdefaultGroups := []GroupInfo{\n\t\t{GroupName: \"AI搜索\", GroupType: 2, Sort: 6, Links: []AILinkInfo{\n\t\t\t{Name: \"百度AI+\", Logo: \"https://hubapi.53ai.com/api/preview/b5970a3697479df6b00d73ab827dabb2.png\", URL: \"https://chat.baidu.com\", Description: \"百度官方ai搜索\", Sort: 0},\n\t\t\t{Name: \"天工AI\", Logo: \"https://hubapi.53ai.com/api/preview/432dfdbb2ade2e941a331fdc25ee29f5.png\", URL: \"https://www.tiangong.cn/\", Description: \"国内首个对标 ChatGPT 的双千亿级大语言模型，也是一个对话式AI助手\", Sort: 0},\n\t\t\t{Name: \"同花顺问财\", Logo: \"https://hubapi.53ai.com/api/preview/c65e9d65c42a1bdabfd7e09635dec05a.png\", URL: \"https://www.iwencai.com\", Description: \"同花顺旗下专业的智能选股平台\", Sort: 0},\n\t\t\t{Name: \"秘塔搜索\", Logo: \"https://hubapi.53ai.com/api/preview/710cd2a90fc7a38d8e78798af1fc597a.png\", URL: \"https://metaso.cn\", Description: \"没有广告，直达结果\", Sort: 0},\n\t\t\t{Name: \"Perplexity AI\", Logo: \"https://hubapi.53ai.com/api/preview/b2d85e0aa413297b2dccd0837fba6f28.png\", URL: \"https://perplexity.ai\", Description: \"知识的起点\", Sort: 0},\n\t\t\t{Name: \"知乎直答\", Logo: \"https://hubapi.53ai.com/api/preview/8698388b9dfc34d995a6238b120365d8.png\", URL: \"https://zhida.zhihu.com\", Description: \"用提问发现世界\", Sort: 0},\n\t\t}},\n\t\t{GroupName: \"智能对话\", GroupType: 2, Sort: 5, Links: []AILinkInfo{\n\t\t\t{Name: \"360智脑\", Logo: \"https://hubapi.53ai.com/api/preview/4a83fd5e7a31d0dd816d4f57237f13c5.png\", URL: \"https://i.360.com/\", Description: \"360搜索最新推出的AI对话聊天大模型\", Sort: 0},\n\t\t\t{Name: \"百度AI伙伴\", Logo: \"https://hubapi.53ai.com/api/preview/afbc2525ffca738ba39989d486e97223.png\", URL: \"https://chat.baidu.com/\", Description: \"百度最新上线的AI搜索对话工具\", Sort: 0},\n\t\t\t{Name: \"智谱清言\", Logo: \"https://hubapi.53ai.com/api/preview/b0072ad41d46626043cf1b2e3b2ce374.png\", URL: \"https://chatglm.cn/\", Description: \"Chatglm,千亿参数对话模型,支持多轮对话\", Sort: 0},\n\t\t\t{Name: \"豆包\", Logo: \"https://hubapi.53ai.com/api/preview/d98b75d99fba38975312841a3c85aa72.png\", URL: \"https://www.doubao.com/\", Description: \"抖音旗下AI工具，你的智能助手\", Sort: 0},\n\t\t\t{Name: \"ChatGPT\", Logo: \"https://hubapi.53ai.com/api/preview/bcade7d1cebca9273da445ffc8671711.png\", URL: \"https://chat.openai.com\", Description: \"Chatgpt.com\", Sort: 0},\n\t\t\t{Name: \"通义千问\", Logo: \"https://hubapi.53ai.com/api/preview/ea1ad076efc73a30c8eaf1e86fc193cc.png\", URL: \"https://tongyi.aliyun.com\", Description: \"阿里巴巴旗下的一款智能体机器人，它利用自然语言处理技术，为用户提供智能化的语音交互服务\", Sort: 0},\n\t\t\t{Name: \"零一万知\", Logo: \"https://hubapi.53ai.com/api/preview/f03bced2dfe845dec2d897cffcb3ce1b.png\", URL: \"https://www.wanzhi.com/\", Description: \"集AI对话聊天、文档阅读和PPT创作于一体的一站式AI工作平台\", Sort: 0},\n\t\t\t{Name: \"讯飞星火\", Logo: \"https://hubapi.53ai.com/api/preview/4417ab5f7607452ccd8a3174616d7f56.png\", URL: \"https://xinghuo.xfyun.cn\", Description: \"懂你的AI助手\", Sort: 0},\n\t\t\t{Name: \"文心一言\", Logo: \"https://hubapi.53ai.com/api/preview/eee853619f4fcbd7f15622198101630c.png\", URL: \"https://yiyan.baidu.com/\", Description: \"文心一言是百度研发的知识增强大语言模型，能够与人对话互动，回答问题，协助创作\", Sort: 0},\n\t\t\t{Name: \"腾讯元宝\", Logo: \"https://hubapi.53ai.com/api/preview/433b8834406d66420558b6f093f0fed1.png\", URL: \"https://yuanbao.tencent.com\", Description: \"腾讯元宝是一款基于腾讯混元大模型的AI产品，为用户提供多元化的AI能力\", Sort: 0},\n\t\t\t{Name: \"Kimi\", Logo: \"https://hubapi.53ai.com/api/preview/3df2f0d2e59edf80f4a1c93ce2d22035.png\", URL: \"https://www.kimi.com/\", Description: \"Kimi 是一款AI智能助手，由 Moonshot 自研的大语言模型驱动，支持在线搜索、深度思考、多模态推理和超长文本对话\", Sort: 0},\n\t\t\t{Name: \"DeepSeek\", Logo: \"https://hubapi.53ai.com/api/preview/30a0967845beb701a184764e62a60e7f.png\", URL: \"https://chat.deepseek.com/\", Description: \"深度求索人工智能AI对话大模型，带你探索未至之境\", Sort: 0},\n\t\t}},\n\t\t{GroupName: \"办公提效\", GroupType: 2, Sort: 4, Links: []AILinkInfo{\n\t\t\t{Name: \"秒出PPT\", Logo: \"https://hubapi.53ai.com/api/preview/e3d748b2fc4a7f108090552e0b0dfc18.png\", URL: \"https://10sppt.com/\", Description: \"10S快速生成PPT\", Sort: 0},\n\t\t\t{Name: \"AIPPT\", Logo: \"https://hubapi.53ai.com/api/preview/872850cdbb1fec8bc54581982572d4aa.png\", URL: \"https://www.aippt.cn/\", Description: \"AI一键生成PPT\", Sort: 0},\n\t\t\t{Name: \"笔尖写作\", Logo: \"https://hubapi.53ai.com/api/preview/23addd994bc064fd2d48d8b0adbad6bd.png\", URL: \"https://www.bijianxiezuo.com/\", Description: \"高质量Ai写作利器\", Sort: 0},\n\t\t\t{Name: \"ChatPPT\", Logo: \"https://hubapi.53ai.com/api/preview/f95c1d7469c53aff1c2d896677ce504b.png\", URL: \"https://chat-ppt.com/\", Description: \"对话式创作演示文稿，1400+类指令支持\", Sort: 0},\n\t\t\t{Name: \"百度橙篇\", Logo: \"https://hubapi.53ai.com/api/preview/d6121e6ed2e190ad67ef05fc2897fc84.png\", URL: \"https://cp.baidu.com\", Description: \"写长文神器\", Sort: 0},\n\t\t\t{Name: \"歌者PPT\", Logo: \"https://hubapi.53ai.com/api/preview/5379914644c44119e771865e00a1a565.png\", URL: \"https://gezhe.com/\", Description: \"永久免费的 PPT 智能生成工具\", Sort: 0},\n\t\t\t{Name: \"万彩AI\", Logo: \"https://hubapi.53ai.com/api/preview/dd71cc93f0324a7d985e51ea931f8396.png\", URL: \"https://ai.kezhan365.com/\", Description: \"万彩AI，让创意轻松落地\", Sort: 0},\n\t\t\t{Name: \"标智客\", Logo: \"https://hubapi.53ai.com/api/preview/b55f51c783bd473d3f9a1b3d1ebcf147.png\", URL: \"https://www.logomaker.com.cn/\", Description: \"智能LOGO设计生成\", Sort: 0},\n\t\t\t{Name: \"Wegic\", Logo: \"https://hubapi.53ai.com/api/preview/de7b13cb2c80afc5cc010b2a6615d69a.png\", URL: \"https://wegic.ai/\", Description: \"即时设计团队推出的 AI 网页生成工具\", Sort: 0},\n\t\t\t{Name: \"有道写作\", Logo: \"https://hubapi.53ai.com/api/preview/a5a84f10db33b8d49f5c242ba52b3a47.png\", URL: \"https://write.youdao.com\", Description: \"网易有道出品的智能英文写作修改和润色工具\", Sort: 0},\n\t\t}},\n\t\t{GroupName: \"图片处理\", GroupType: 2, Sort: 3, Links: []AILinkInfo{\n\t\t\t{Name: \"美图抠图\", Logo: \"https://hubapi.53ai.com/api/preview/b9f3a740af7c87e18af40d8ed8e50a8c.png\", URL: \"https://cutout.designkit.com/\", Description: \"美图秀秀推出的AI智能抠图工具，一键移除背景\", Sort: 0},\n\t\t\t{Name: \"美图设计室\", Logo: \"https://hubapi.53ai.com/api/preview/179d3e00e9ebddf92da34330ad6e2097.png\", URL: \"https://www.designkit.com/\", Description: \"一款功能强大、易于使用的图像处理和照片编辑软件，提供了丰富功能\", Sort: 0},\n\t\t\t{Name: \"一键抠图\", Logo: \"https://hubapi.53ai.com/api/preview/17a1c172c241b5ac79a5e9eb9ab58561.png\", URL: \"https://www.yijiankoutu.com/\", Description: \"在线一键抠图换背景\", Sort: 0},\n\t\t}},\n\t\t{GroupName: \"视频制作\", GroupType: 2, Sort: 2, Links: []AILinkInfo{\n\t\t\t{Name: \"百度度加\", Logo: \"https://hubapi.53ai.com/api/preview/919eb97d2b02114f475046c68fe3e70b.png\", URL: \"https://aigc.baidu.com/\", Description: \"度加剪辑是百度官方出品的口播自媒体必备剪辑工具，简洁好用\", Sort: 0},\n\t\t\t{Name: \"鬼手剪辑\", Logo: \"https://hubapi.53ai.com/api/preview/8244602231503e7ebb429ffd393ccab7.png\", URL: \"https://cn.jollytoday.com\", Description: \"视频AI翻译、硬字幕翻译和视频去字幕的专业视频剪辑工具\", Sort: 0},\n\t\t\t{Name: \"快手可灵\", Logo: \"https://hubapi.53ai.com/api/preview/52193bfb4d03a28fccfd827bbb450e04.png\", URL: \"https://app.klingai.com/\", Description: \"快手旗下图片生成和视频生成大模型工具\", Sort: 0},\n\t\t\t{Name: \"抖音即创\", Logo: \"https://hubapi.53ai.com/api/preview/707620ea6742afae608c9c109b51a33d.png\", URL: \"https://aic.oceanengine.com\", Description: \"专注于智能创意生产与管理分析\", Sort: 0},\n\t\t\t{Name: \"pika\", Logo: \"https://hubapi.53ai.com/api/preview/7f2201d2f291251a64c626dffa5d9d2d.png\", URL: \"https://pika.art\", Description: \"文本生成电影工具\", Sort: 0},\n\t\t\t{Name: \"腾讯智影\", Logo: \"https://hubapi.53ai.com/api/preview/2bf37ee21997235dea73084e21795987.png\", URL: \"https://zenvideo.qq.com\", Description: \"腾讯智影AI绘画，只需简单的描述就可为您生成独一无二的创意画作\", Sort: 0},\n\t\t}},\n\t\t{GroupName: \"AI学习\", GroupType: 2, Sort: 1, Links: []AILinkInfo{\n\t\t\t{Name: \"LangGPT\", Logo: \"https://hubapi.53ai.com/api/preview/41193ab845ca040c9ea34b0a7fa1bb80.png\", URL: \"https://langgptai.feishu.cn/\", Description: \"人人都能写出高质量提示词\", Sort: 0},\n\t\t\t{Name: \"通往AGI之路\", Logo: \"https://hubapi.53ai.com/api/preview/30f58543638b8e9eab9a242f2c1594ed.png\", URL: \"https://waytoagi.feishu.cn/\", Description: \"一个全面系统的AI学习路径\", Sort: 0},\n\t\t}},\n\t}\n\treturn defaultGroups\n}\n\nfunc GetUserFreeGroup(eid int64) (*Group, error) {\n\tvar group Group\n\tif err := DB.Where(\"eid =? AND group_type =? AND group_name =?\", eid, USER_GROUP_TYPE, USER_FREE_GROUP_NAME).First(&group).Error; err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &group, nil\n}\n"
  },
  {
    "path": "api/model/like.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\n\t\"gorm.io/gorm\"\n)\n\n// Like 点赞记录表\ntype Like struct {\n\tLikeID   int64  `json:\"like_id\" gorm:\"primaryKey;autoIncrement;comment:自增ID\"`\n\tUserID   int64  `json:\"user_id\" gorm:\"column:user_id;not null;index;comment:用户ID\"`\n\tType     string `json:\"type\" gorm:\"type:varchar(50);not null;index;comment:点赞对象类型(prompt/comment等)\"`\n\tObjectID int64  `json:\"object_id\" gorm:\"column:object_id;not null;index;comment:对象ID\"`\n\tStatus   int    `json:\"status\" gorm:\"type:tinyint(1);not null;default:1;comment:状态(1:有效 0:取消)\"`\n\tBaseModel\n}\n\n// 状态常量\nconst (\n\tLikeStatusActive = 1 // 有效点赞\n\tLikeStatusCancel = 0 // 取消点赞\n)\n\n// 对象类型常量\nconst (\n\tLikeTypePrompt = \"prompt\" // 提示词点赞\n)\n\n// TableName 设置表名\nfunc (Like) TableName() string {\n\treturn \"likes\"\n}\n\n// Validate 数据验证\nfunc (l *Like) Validate() error {\n\tif l.UserID <= 0 {\n\t\treturn errors.New(\"用户ID无效\")\n\t}\n\tif l.ObjectID <= 0 {\n\t\treturn errors.New(\"对象ID无效\")\n\t}\n\tif l.Type == \"\" {\n\t\treturn errors.New(\"点赞类型不能为空\")\n\t}\n\treturn nil\n}\n\n// Create 创建点赞记录\nfunc (l *Like) Create() error {\n\tif err := l.Validate(); err != nil {\n\t\treturn err\n\t}\n\n\t// 检查是否已存在点赞记录\n\texist, err := l.Exists()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif exist {\n\t\treturn errors.New(\"已存在点赞记录\")\n\t}\n\n\tl.Status = LikeStatusActive // 默认激活状态\n\treturn DB.Create(l).Error\n}\n\n// UpdateStatus 更新点赞状态\nfunc (l *Like) UpdateStatus(newStatus int) error {\n\tif newStatus != LikeStatusActive && newStatus != LikeStatusCancel {\n\t\treturn errors.New(\"无效的状态值\")\n\t}\n\n\tl.Status = newStatus\n\treturn DB.Model(l).Updates(map[string]interface{}{\n\t\t\"status\": l.Status,\n\t}).Error\n}\n\n// Delete 软删除（更新状态为取消）\nfunc (l *Like) Delete() error {\n\treturn l.UpdateStatus(LikeStatusCancel)\n}\n\n// HardDelete 硬删除记录\nfunc (l *Like) HardDelete() error {\n\treturn DB.Delete(l).Error\n}\n\n// Exists 检查点赞记录是否存在\nfunc (l *Like) Exists() (bool, error) {\n\tvar count int64\n\terr := DB.Model(&Like{}).\n\t\tWhere(\"user_id = ? AND type = ? AND object_id = ?\", l.UserID, l.Type, l.ObjectID).\n\t\tCount(&count).Error\n\treturn count > 0, err\n}\n\n// GetLikeByID 根据ID获取点赞记录\nfunc GetLikeByID(likeID int64) (*Like, error) {\n\tvar like Like\n\terr := DB.Where(\"like_id = ?\", likeID).First(&like).Error\n\tif err != nil {\n\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, errors.New(\"点赞记录不存在\")\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn &like, nil\n}\n\n// GetUserLikes 获取用户的所有点赞记录\nfunc GetUserLikes(userID int64, likeType string) ([]Like, error) {\n\tvar likes []Like\n\tquery := DB.Where(\"user_id = ? AND status = ?\", userID, LikeStatusActive)\n\n\tif likeType != \"\" {\n\t\tquery = query.Where(\"type = ?\", likeType)\n\t}\n\n\terr := query.Find(&likes).Error\n\treturn likes, err\n}\n\n// CountLikesByObject 统计对象的点赞数量\nfunc CountLikesByObject(objectType string, objectID int64) (int64, error) {\n\tvar count int64\n\terr := DB.Model(&Like{}).\n\t\tWhere(\"type = ? AND object_id = ? AND status = ?\", objectType, objectID, LikeStatusActive).\n\t\tCount(&count).Error\n\treturn count, err\n}\n\n// ToggleLike 点赞/取消点赞\nfunc (l *Like) ToggleLike() error {\n\texists, err := l.Exists()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif exists {\n\t\t// 存在则更新状态（取消点赞）\n\t\tcurrentLike, err := GetLikeByUserObject(l.UserID, l.Type, l.ObjectID)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnewStatus := LikeStatusCancel\n\t\tif currentLike.Status == LikeStatusCancel {\n\t\t\tnewStatus = LikeStatusActive\n\t\t}\n\t\treturn currentLike.UpdateStatus(newStatus)\n\t}\n\n\t// 不存在则创建新记录\n\treturn l.Create()\n}\n\n// GetLikeByUserObject 根据用户和对象获取点赞记录\nfunc GetLikeByUserObject(userID int64, objectType string, objectID int64) (*Like, error) {\n\tvar like Like\n\terr := DB.Where(\"user_id = ? AND type = ? AND object_id = ?\", userID, objectType, objectID).\n\t\tFirst(&like).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &like, nil\n}\n"
  },
  {
    "path": "api/model/main.go",
    "content": "package model\n\nimport (\n\t\"database/sql\"\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/utils/env\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"gorm.io/driver/mysql\"\n\n\t\"gorm.io/driver/sqlite\"\n\t\"gorm.io/gorm\"\n)\n\nvar DB *gorm.DB\n\nfunc InitDB() {\n\tlogger.SysLog(\"database init started\")\n\tvar err error\n\tDB, err = GetDbConn()\n\tif err != nil {\n\t\tlogger.FatalLog(\"failed to initialize database: \" + err.Error())\n\t\treturn\n\t}\n\n\tsetDBConns(DB)\n\tlogger.Debug(nil, \"database init end\")\n\n\tif config.MigrateDBEnabled {\n\t\tlogger.Debug(nil, \"database migration started\")\n\t\tif err = migrateDB(); err != nil {\n\t\t\tlogger.FatalLog(\"failed to migrate database: \" + err.Error())\n\t\t\treturn\n\t\t}\n\t\tlogger.SysLog(\"database migrated\")\n\t} else {\n\t\tlogger.SysLog(\"database migration skipped (MIGRATE_DB_ENABLED=false)\")\n\t}\n}\n\nfunc GetDbConn() (*gorm.DB, error) {\n\tdsn := os.Getenv(\"SQL_DSN\")\n\tswitch {\n\t// case strings.HasPrefix(dsn, \"postgres://\"):\n\t// \t// TODO Use PostgreSQL\n\t// \t// return openPostgreSQL(dsn)\n\tcase dsn != \"\":\n\t\t// Use MySQL\n\t\treturn openMySQL(dsn)\n\tdefault:\n\t\t// Use SQLite\n\t\treturn openSQLite()\n\t}\n}\n\nfunc openSQLite() (*gorm.DB, error) {\n\tlogger.SysLog(\"SQL_DSN not set, using SQLite as database\")\n\tconfig.UsingSQLite = true\n\tdsn := fmt.Sprintf(\"%s?_busy_timeout=%d\", config.SQLitePath, config.SQLiteBusyTimeout)\n\treturn gorm.Open(sqlite.Open(dsn), &gorm.Config{\n\t\tPrepareStmt: true,\n\t})\n}\n\nfunc openMySQL(dsn string) (*gorm.DB, error) {\n\tlogger.SysLog(\"using MySQL as database\")\n\tconfig.UsingMySQL = true\n\treturn gorm.Open(mysql.Open(dsn), &gorm.Config{\n\t\tPrepareStmt: true, // precompile SQL\n\t})\n}\n\nfunc setDBConns(db *gorm.DB) *sql.DB {\n\tif config.DebugSQLEnabled {\n\t\tdb = db.Debug()\n\t}\n\n\tsqlDB, err := db.DB()\n\tif err != nil {\n\t\tlogger.FatalLog(\"failed to connect database: \" + err.Error())\n\t\treturn nil\n\t}\n\n\tsqlDB.SetMaxIdleConns(env.Int(\"SQL_MAX_IDLE_CONNS\", 100))\n\tsqlDB.SetMaxOpenConns(env.Int(\"SQL_MAX_OPEN_CONNS\", 1000))\n\tsqlDB.SetConnMaxLifetime(time.Second * time.Duration(env.Int(\"SQL_MAX_LIFETIME\", 60)))\n\treturn sqlDB\n}\n\nfunc migrateDB() error {\n\tvar err error\n\tif err = DB.AutoMigrate(&Enterprise{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&User{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&UploadFile{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&Group{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&SubscriptionSetting{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&SubscriptionRelation{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&AILink{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&Setting{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&Channel{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&Agent{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&ResourcePermission{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&Message{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&Conversation{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&Provider{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(\n\t\t&PaySetting{},\n\t\t&Order{},\n\t\t&Department{},\n\t\t&MemberDepartmentRelation{},\n\t\t&MemberBinding{},\n\t\t&Prompt{},\n\t\t&Like{},\n\t\t&Navigation{},\n\t\t&NavigationContent{},\n\t\t&VerificationCode{},\n\t\t&SystemLog{},\n\t\t&WecomSuite{},\n\t\t&WecomCorp{},\n\t); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&ChannelFileMapping{}); err != nil {\n\t\treturn err\n\t}\n\tif err = DB.AutoMigrate(&EnterpriseConfig{}); err != nil {\n\t\treturn err\n\t}\n\tif err := DB.AutoMigrate(&ShareRecord{}); err != nil {\n\t\treturn err\n\t}\n\tif err := DB.AutoMigrate(\n\t\t&DingtalkSuite{},\n\t\t&DingtalkCorp{},\n\t\t); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "api/model/member_binding.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"gorm.io/gorm\"\n)\n\n// Member binding source constants\nconst (\n\tMemberBindingSourceNone   = 0 // No binding\n\tMemberBindingSourceWeChat = 1 // WeChat Enterprise\n)\n\n// Member binding status constants\nconst (\n\tMemberBindingStatusInactive = 0 // Inactive\n\tMemberBindingStatusActive   = 1 // Active\n\tMemberBindingStatusDisabled = 2 // Disabled\n\tMemberBindingStatusExpired  = 3 // Expired\n)\n\n// MemberBinding represents a binding between a member and a third-party platform\ntype MemberBinding struct {\n\tID        int64  `json:\"id\" gorm:\"column:id;primaryKey;autoIncrement;comment:'Serial ID'\"`\n\tMID       int64  `json:\"mid\" gorm:\"column:mid;not null;default:0;comment:'enterprise_member.id'\"`\n\tEID       int64  `json:\"eid\" gorm:\"column:eid;not null;default:0;comment:'Enterprise ID'\"`\n\tName      string `json:\"name\" gorm:\"column:name;not null;default:'';comment:'Name obtained under different authorization scenarios'\"`\n\tBindValue string `json:\"bind_value\" gorm:\"column:bindvalue;not null;default:'';comment:'WeChat Enterprise, DingTalk unionid'\"`\n\tStatus    int    `json:\"status\" gorm:\"column:status;not null;default:0;comment:'Status'\"`\n\tFrom      int    `json:\"from\" gorm:\"column:from;not null;default:0;comment:'Binding source: 0-Default;1-WeChat Enterprise;'\"`\n\tBaseModel\n}\n\n// TableName specifies the table name for MemberBinding model\nfunc (MemberBinding) TableName() string {\n\treturn \"member_bindings\"\n}\n\n// InitMemberBindingTable initializes the member_binding table\nfunc InitMemberBindingTable() error {\n\t// Check if table exists\n\tif DB.Migrator().HasTable(&MemberBinding{}) {\n\t\treturn nil\n\t}\n\n\t// Create table\n\terr := DB.Migrator().CreateTable(&MemberBinding{})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to create member_binding table: %w\", err)\n\t}\n\n\treturn nil\n}\n\n// CreateMemberBinding creates a new member binding\nfunc CreateMemberBinding(binding *MemberBinding) error {\n\tif err := validateMemberBinding(binding); err != nil {\n\t\treturn err\n\t}\n\n\t// Create binding in database\n\tresult := DB.Create(binding)\n\treturn result.Error\n}\n\n// validateMemberBinding validates member binding fields\nfunc validateMemberBinding(binding *MemberBinding) error {\n\tif binding == nil {\n\t\treturn errors.New(\"member binding cannot be nil\")\n\t}\n\tif binding.MID == 0 {\n\t\treturn errors.New(\"member ID (MID) cannot be empty\")\n\t}\n\tif binding.EID == 0 {\n\t\treturn errors.New(\"enterprise ID (EID) cannot be empty\")\n\t}\n\tif binding.BindValue == \"\" {\n\t\treturn errors.New(\"bind value cannot be empty\")\n\t}\n\treturn nil\n}\n\n// GetMemberBindingByID retrieves a member binding by its ID\nfunc GetMemberBindingByID(id int64) (*MemberBinding, error) {\n\tvar binding MemberBinding\n\tresult := DB.Where(\"id = ?\", id).First(&binding)\n\tif result.Error != nil {\n\t\tif errors.Is(result.Error, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, fmt.Errorf(\"member binding not found with ID %d\", id)\n\t\t}\n\t\treturn nil, result.Error\n\t}\n\treturn &binding, nil\n}\n\n// GetMemberBindingByMID retrieves member bindings by member ID\nfunc GetMemberBindingByMID(mid int64) ([]*MemberBinding, error) {\n\tvar bindings []*MemberBinding\n\tresult := DB.Where(\"mid = ?\", mid).Find(&bindings)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\treturn bindings, nil\n}\n\nfunc GetMemberBindingByMidAndFrom(mid int64, from int) (*MemberBinding, error) {\n\tvar binding MemberBinding\n\tresult := DB.Where(\"mid =? AND `from` =?\", mid, from).First(&binding)\n\tif result.Error != nil {\n\t\tif errors.Is(result.Error, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, result.Error\n\t}\n\treturn &binding, nil\n}\n\nfunc GetMemberBindingByDepartmentFromBackend(mid int64, tx *gorm.DB) (*MemberBinding, error) {\n\tuser, err := GetUserByID(mid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbindValue, err := GetMemberBindingByMidAndFrom(mid, DepartmentFromBackend)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif bindValue == nil {\n\t\t// create\n\t\tbindValue = &MemberBinding{\n\t\t\tMID:       mid,\n\t\t\tEID:       user.Eid,\n\t\t\tName:      user.Username,\n\t\t\tBindValue: fmt.Sprintf(\"%d\", user.UserID),\n\t\t\tStatus:    MemberBindingStatusActive,\n\t\t\tFrom:      DepartmentFromBackend,\n\t\t}\n\t\terr := tx.Create(bindValue).Error\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn bindValue, nil\n}\n\n// GetMemberBindingByBindValue retrieves a member binding by bind value and source\nfunc GetMemberBindingByBindValue(eid int64, bindValue string, from int) (*MemberBinding, error) {\n\tvar binding MemberBinding\n\tresult := DB.Where(\"eid = ? AND bindvalue = ? AND `from` = ?\", eid, bindValue, from).First(&binding)\n\tif result.Error != nil {\n\t\tif errors.Is(result.Error, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, result.Error\n\t}\n\treturn &binding, nil\n}\n\n// GetMemberBindings retrieves all member bindings for a specific enterprise\nfunc GetMemberBindings(eid int64, from int, status int, offset, limit int) ([]*MemberBinding, int64, error) {\n\tvar bindings []*MemberBinding\n\tvar count int64\n\n\tquery := DB.Model(&MemberBinding{}).Where(\"eid = ?\", eid)\n\n\tif from > 0 {\n\t\tquery = query.Where(\"`from` = ?\", from)\n\t}\n\n\tif status >= 0 {\n\t\tquery = query.Where(\"status = ?\", status)\n\t}\n\n\t// Get total count\n\tif err := query.Count(&count).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\t// Get paginated results\n\tif limit > 0 {\n\t\tquery = query.Offset(offset).Limit(limit)\n\t}\n\n\tresult := query.Order(\"id DESC\").Find(&bindings)\n\tif result.Error != nil {\n\t\treturn nil, 0, result.Error\n\t}\n\n\treturn bindings, count, nil\n}\n\n// UpdateMemberBinding updates an existing member binding\nfunc UpdateMemberBinding(binding *MemberBinding) error {\n\tif binding.ID == 0 {\n\t\treturn errors.New(\"binding ID cannot be empty\")\n\t}\n\n\t// Check if binding exists\n\t_, err := GetMemberBindingByID(binding.ID)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"member binding not found: %w\", err)\n\t}\n\n\t// Update binding in database\n\tresult := DB.Model(binding).Updates(map[string]interface{}{\n\t\t\"mid\":       binding.MID,\n\t\t\"name\":      binding.Name,\n\t\t\"bindvalue\": binding.BindValue,\n\t\t\"status\":    binding.Status,\n\t\t\"from\":      binding.From,\n\t})\n\n\treturn result.Error\n}\n\n// DeleteMemberBinding deletes a member binding\nfunc DeleteMemberBinding(id int64) error {\n\t// Check if binding exists\n\t_, err := GetMemberBindingByID(id)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"member binding not found: %w\", err)\n\t}\n\n\t// Delete binding from database\n\tresult := DB.Delete(&MemberBinding{}, id)\n\treturn result.Error\n}\n\n// BatchDeleteMemberBindings deletes multiple member bindings\nfunc BatchDeleteMemberBindings(ids []int64) error {\n\tif len(ids) == 0 {\n\t\treturn nil\n\t}\n\n\tresult := DB.Where(\"id IN ?\", ids).Delete(&MemberBinding{})\n\treturn result.Error\n}\n\n// DeleteMemberBindingsByMID deletes all bindings for a specific member\nfunc DeleteMemberBindingsByMID(mid int64) error {\n\tresult := DB.Where(\"mid = ?\", mid).Delete(&MemberBinding{})\n\treturn result.Error\n}\n\n// ActivateMemberBinding activates a member binding\nfunc ActivateMemberBinding(id int64) error {\n\tresult := DB.Model(&MemberBinding{}).Where(\"id = ?\", id).Updates(map[string]interface{}{\n\t\t\"status\":     MemberBindingStatusActive,\n\t\t\"updatetime\": time.Now(),\n\t})\n\treturn result.Error\n}\n\n// DeactivateMemberBinding deactivates a member binding\nfunc DeactivateMemberBinding(id int64) error {\n\tresult := DB.Model(&MemberBinding{}).Where(\"id = ?\", id).Updates(map[string]interface{}{\n\t\t\"status\":     MemberBindingStatusDisabled,\n\t\t\"updatetime\": time.Now(),\n\t})\n\treturn result.Error\n}\n\n// CountMemberBindings counts the number of bindings in an enterprise\nfunc CountMemberBindings(eid int64, from int) (int64, error) {\n\tvar count int64\n\tquery := DB.Model(&MemberBinding{}).Where(\"eid = ?\", eid)\n\n\tif from > 0 {\n\t\tquery = query.Where(\"`from` = ?\", from)\n\t}\n\n\tresult := query.Count(&count)\n\treturn count, result.Error\n}\n\n// GetMemberBindingsBySource retrieves all bindings from a specific source\nfunc GetMemberBindingsBySource(eid int64, from int) ([]*MemberBinding, error) {\n\tvar bindings []*MemberBinding\n\tresult := DB.Where(\"eid = ? AND `from` = ?\", eid, from).Find(&bindings)\n\tif result.Error != nil {\n\t\tif errors.Is(result.Error, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\treturn bindings, nil\n}\n"
  },
  {
    "path": "api/model/member_department_relation.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"gorm.io/gorm\"\n)\n\n// MemberDepartmentRelation source constants\nconst (\n\tMemberDepartmentRelationFromBackend = 0 // Created from Backend\n\tMemberDepartmentRelationFromWeChat  = 1 // Imported from Enterprise WeChat\n)\n\n// MemberDepartmentRelation represents the relationship between members and departments\ntype MemberDepartmentRelation struct {\n\tID   int64 `json:\"id\" gorm:\"column:id;primaryKey;autoIncrement;comment:'Relation ID'\"`\n\tDID  int64 `json:\"did\" gorm:\"column:did;not null;default:0;comment:'Department ID'\"`\n\tEID  int64 `json:\"eid\" gorm:\"column:eid;not null;default:0;comment:'Enterprise ID'\"`\n\tBID  int64 `json:\"bid\" gorm:\"column:bid;not null;default:0;comment:'Member Binding ID'\"`\n\tFrom int   `json:\"from\" gorm:\"column:from;not null;default:0;comment:'Source: 0-Backend, 1-Enterprise WeChat'\"`\n\tBaseModel\n}\n\n// TableName specifies the table name for MemberDepartmentRelation model\nfunc (MemberDepartmentRelation) TableName() string {\n\treturn \"member_department_relations\"\n}\n\n// CreateMemberDepartmentRelation creates a new member-department relation\nfunc CreateMemberDepartmentRelation(relation *MemberDepartmentRelation) error {\n\tif err := validateMemberDepartmentRelation(relation); err != nil {\n\t\treturn err\n\t}\n\n\tresult := DB.Create(relation)\n\treturn result.Error\n}\n\n// validateMemberDepartmentRelation validates member-department relation fields\nfunc validateMemberDepartmentRelation(relation *MemberDepartmentRelation) error {\n\tif relation == nil {\n\t\treturn errors.New(\"relation cannot be nil\")\n\t}\n\tif relation.DID == 0 {\n\t\treturn errors.New(\"department ID (DID) cannot be empty\")\n\t}\n\tif relation.EID == 0 {\n\t\treturn errors.New(\"enterprise ID (EID) cannot be empty\")\n\t}\n\tif relation.BID == 0 {\n\t\treturn errors.New(\"member binding ID (BID) cannot be empty\")\n\t}\n\treturn nil\n}\n\n// GetMemberDepartmentRelationByID retrieves a relation by its ID\nfunc GetMemberDepartmentRelationByID(id int64) (*MemberDepartmentRelation, error) {\n\tvar relation MemberDepartmentRelation\n\tresult := DB.Where(\"id = ?\", id).First(&relation)\n\tif result.Error != nil {\n\t\tif errors.Is(result.Error, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, fmt.Errorf(\"relation not found with ID %d\", id)\n\t\t}\n\t\treturn nil, result.Error\n\t}\n\treturn &relation, nil\n}\n\n// GetMemberDepartmentRelationsByEID retrieves all relations for a specific enterprise\nfunc GetMemberDepartmentRelationsByEID(eid int64) ([]*MemberDepartmentRelation, error) {\n\tvar relations []*MemberDepartmentRelation\n\tresult := DB.Where(\"eid = ?\", eid).Find(&relations)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\treturn relations, nil\n}\n\n// GetMemberDepartmentRelationsByDID retrieves all relations for a specific department\nfunc GetMemberDepartmentRelationsByDID(eid int64, did int64) ([]*MemberDepartmentRelation, error) {\n\tvar relations []*MemberDepartmentRelation\n\tresult := DB.Where(\"eid = ? AND did = ?\", eid, did).Find(&relations)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\treturn relations, nil\n}\n\n// GetMemberDepartmentRelationsByBID retrieves all relations for a specific member binding\nfunc GetMemberDepartmentRelationsByBID(eid int64, bid int64) ([]*MemberDepartmentRelation, error) {\n\tvar relations []*MemberDepartmentRelation\n\tresult := DB.Where(\"eid = ? AND bid = ?\", eid, bid).Find(&relations)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\treturn relations, nil\n}\n\nfunc GetMemberDidsByBID(eid int64, bid int64) ([]int64, error) {\n\tvar dids []int64\n\tvar relations []*MemberDepartmentRelation\n\tresult := DB.Where(\"eid = ? AND bid = ?\", eid, bid).Find(&relations)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\n\tfor _, relation := range relations {\n\t\tdids = append(dids, relation.DID)\n\t}\n\n\treturn dids, nil\n}\n\n// UpdateMemberDepartmentRelation updates an existing relation\nfunc UpdateMemberDepartmentRelation(relation *MemberDepartmentRelation) error {\n\tif relation.ID == 0 {\n\t\treturn errors.New(\"relation ID cannot be empty\")\n\t}\n\n\t// Check if relation exists\n\t_, err := GetMemberDepartmentRelationByID(relation.ID)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"relation not found: %w\", err)\n\t}\n\n\t// Update relation in database\n\tresult := DB.Model(relation).Updates(map[string]interface{}{\n\t\t\"did\":  relation.DID,\n\t\t\"eid\":  relation.EID,\n\t\t\"bid\":  relation.BID,\n\t\t\"from\": relation.From,\n\t})\n\n\treturn result.Error\n}\n\n// DeleteMemberDepartmentRelation deletes a relation by its ID\nfunc DeleteMemberDepartmentRelation(id int64) error {\n\t// Check if relation exists\n\t_, err := GetMemberDepartmentRelationByID(id)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"relation not found: %w\", err)\n\t}\n\n\t// Delete relation from database\n\tresult := DB.Delete(&MemberDepartmentRelation{}, id)\n\treturn result.Error\n}\n\n// DeleteMemberDepartmentRelationsByDID deletes all relations for a specific department\nfunc DeleteMemberDepartmentRelationsByDID(eid int64, did int64) error {\n\tresult := DB.Where(\"eid = ? AND did = ?\", eid, did).Delete(&MemberDepartmentRelation{})\n\treturn result.Error\n}\n\n// DeleteMemberDepartmentRelationsByBID deletes all relations for a specific member binding\nfunc DeleteMemberDepartmentRelationsByBID(eid int64, bid int64) error {\n\tresult := DB.Where(\"eid = ? AND bid = ?\", eid, bid).Delete(&MemberDepartmentRelation{})\n\treturn result.Error\n}\n\n// BatchCreateMemberDepartmentRelations creates multiple relations in a single transaction\nfunc BatchCreateMemberDepartmentRelations(relations []*MemberDepartmentRelation) error {\n\tif len(relations) == 0 {\n\t\treturn nil\n\t}\n\n\t// Begin transaction\n\ttx := DB.Begin()\n\tif tx.Error != nil {\n\t\treturn tx.Error\n\t}\n\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\t// Create each relation\n\tfor _, relation := range relations {\n\t\tif err := validateMemberDepartmentRelation(relation); err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn err\n\t\t}\n\n\t\tif err := tx.Create(relation).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Commit transaction\n\treturn tx.Commit().Error\n}\n\nfunc GetUsersByDepartmentIDs(eid int64, dids []int64) ([]int64, error) {\n\tif len(dids) == 0 {\n\t\treturn []int64{}, nil\n\t}\n\n\tvar relations []*MemberDepartmentRelation\n\terr := DB.Where(\"eid = ? AND did IN ?\", eid, dids).Find(&relations).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbidMap := make(map[int64]bool)\n\tfor _, relation := range relations {\n\t\tbidMap[relation.BID] = true\n\t}\n\n\tbids := make([]int64, 0, len(bidMap))\n\tfor bid := range bidMap {\n\t\tbids = append(bids, bid)\n\t}\n\n\tif len(bids) == 0 {\n\t\treturn []int64{}, nil\n\t}\n\n\tvar userIDs []int64\n\terr = DB.Model(&User{}).Where(\"eid = ? AND binding_id IN ?\", eid, bids).Pluck(\"user_id\", &userIDs).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn userIDs, nil\n}\n"
  },
  {
    "path": "api/model/message.go",
    "content": "package model\n\nimport \"encoding/json\"\n\ntype Message struct {\n\tID                int64  `json:\"id\" gorm:\"column:id;primaryKey;autoIncrement\"`\n\tEid               int64  `json:\"eid\" gorm:\"column:eid;not null\"`\n\tUserID            int64  `json:\"user_id\" gorm:\"column:user_id;not null\"`\n\tMessage           string `json:\"message\" gorm:\"column:message;type:text\"`\n\tAgentID           int64  `json:\"agent_id\" gorm:\"column:agent_id;not null\"`\n\tConversationID    int64  `json:\"conversation_id\" gorm:\"column:conversation_id;not null\"`\n\tAnswer            string `json:\"answer\" gorm:\"column:answer;type:text\"`\n\tReasoningContent  string `json:\"reasoning_content\" gorm:\"column:reasoning_content;type:text\"`\n\tModelName         string `json:\"model_name\" gorm:\"index;index:index_username_model_name,priority:1;default:''\"`\n\tQuota             int    `json:\"quota\" gorm:\"default:0\"`\n\tPromptTokens      int    `json:\"prompt_tokens\" gorm:\"default:0\"`\n\tCompletionTokens  int    `json:\"completion_tokens\" gorm:\"default:0\"`\n\tTotalTokens       int    `json:\"total_tokens\" gorm:\"default:0\"`\n\tChannelId         int    `json:\"channel\" gorm:\"index\"`\n\tRequestId         string `json:\"request_id\" gorm:\"default:''\"`\n\tElapsedTime       int64  `json:\"elapsed_time\" gorm:\"default:0\"`\n\tIsStream          bool   `json:\"is_stream\" gorm:\"default:false\"`\n\tQuotaContent      string `json:\"quota_content\" gorm:\"default:''\"`\n\tAgentCustomConfig string `json:\"agent_custom_config\" gorm:\"default:''\"`\n\tBaseModel\n}\n\n// MessageType 消息类型枚举\ntype MessageType string\n\nconst (\n\tMessageTypeChat     MessageType = \"chat\"     // 聊天消息\n\tMessageTypeWorkflow MessageType = \"workflow\" // 工作流消息\n)\n\n// GetMessageType 根据 Agent 类型判断消息类型\nfunc (m *Message) GetMessageType() MessageType {\n\t// 查询关联的 Agent 来判断类型\n\tagent, err := GetAgentByID(m.Eid, m.AgentID)\n\tif err != nil {\n\t\t// 如果查询失败，默认返回聊天类型\n\t\treturn MessageTypeChat\n\t}\n\n\tif agent.AgentType == AgentTypeWorkflow {\n\t\treturn MessageTypeWorkflow\n\t}\n\n\treturn MessageTypeChat\n}\n\n// ParseChatMessage 解析聊天消息的 Message 字段\nfunc (m *Message) ParseChatMessage() ([]map[string]interface{}, error) {\n\tvar messages []map[string]interface{}\n\tif err := json.Unmarshal([]byte(m.Message), &messages); err != nil {\n\t\treturn nil, err\n\t}\n\treturn messages, nil\n}\n\n// ParseWorkflowParameters 解析工作流消息的 Message 字段（parameters）\nfunc (m *Message) ParseWorkflowParameters() (map[string]interface{}, error) {\n\tvar parameters map[string]interface{}\n\tif err := json.Unmarshal([]byte(m.Message), &parameters); err != nil {\n\t\treturn nil, err\n\t}\n\treturn parameters, nil\n}\n\n// ParseWorkflowOutput 解析工作流消息的 Answer 字段（workflow_output_data）\nfunc (m *Message) ParseWorkflowOutput() (map[string]interface{}, error) {\n\tvar outputData map[string]interface{}\n\tif err := json.Unmarshal([]byte(m.Answer), &outputData); err != nil {\n\t\treturn nil, err\n\t}\n\treturn outputData, nil\n}\n\n// CreateMessage creates a new message record\nfunc CreateMessage(message *Message) error {\n\treturn DB.Create(message).Error\n}\n\n// GetMessageByID retrieves a message by ID\nfunc GetMessageByID(eid int64, id int64) (*Message, error) {\n\tvar message Message\n\terr := DB.Where(\"eid = ? AND id = ?\", eid, id).First(&message).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &message, nil\n}\n\n// GetMessagesByUserID retrieves all messages for a user\nfunc GetMessagesByUserID(eid int64, userID int64) ([]*Message, error) {\n\tvar messages []*Message\n\terr := DB.Where(\"eid = ? AND user_id = ?\", eid, userID).Find(&messages).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn messages, nil\n}\n\n// GetMessagesByAgentID retrieves all messages for a specific agent\nfunc GetMessagesByAgentID(eid int64, agentID int64) ([]*Message, error) {\n\tvar messages []*Message\n\terr := DB.Where(\"eid = ? AND agent_id = ?\", eid, agentID).Find(&messages).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn messages, nil\n}\n\n// GetMessagesByUserAndAgent retrieves conversation messages between a user and a specific agent\nfunc GetMessagesByUserAndAgent(eid int64, userID int64, agentID int64, keyword string, limit int, offset int) (count int64, messages []*Message, err error) {\n\tquery := DB.Model(&Message{}).Where(\"eid = ? AND user_id = ? AND agent_id = ?\", eid, userID, agentID)\n\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"message LIKE ? OR answer LIKE ?\", \"%\"+keyword+\"%\", \"%\"+keyword+\"%\")\n\t}\n\n\tcountQuery := query\n\tif err = countQuery.Count(&count).Error; err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\tif limit == 0 {\n\t\tlimit = 10\n\t}\n\tquery = query.Limit(limit)\n\n\tif offset > 0 {\n\t\tquery = query.Offset(offset)\n\t}\n\n\terr = query.Find(&messages).Error\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\treturn count, messages, nil\n}\n\n// UpdateMessage updates a message record\nfunc UpdateMessage(message *Message) error {\n\treturn DB.Save(message).Error\n}\n\n// DeleteMessage deletes a message by ID\nfunc DeleteMessage(eid int64, id int64) error {\n\treturn DB.Where(\"eid = ? AND id = ?\", eid, id).Delete(&Message{}).Error\n}\n\n// DeleteMessagesByUserID deletes all messages for a user\nfunc DeleteMessagesByUserID(eid int64, userID int64) error {\n\treturn DB.Where(\"eid = ? AND user_id = ?\", eid, userID).Delete(&Message{}).Error\n}\n\n// DeleteMessagesByAgentID deletes all messages for a specific agent\nfunc DeleteMessagesByAgentID(eid int64, agentID int64) error {\n\treturn DB.Where(\"eid = ? AND agent_id = ?\", eid, agentID).Delete(&Message{}).Error\n}\n\n// GetMessagesByConversationID retrieves conversation messages by conversation ID\nfunc GetMessagesByConversationID(eid int64, conversationID int64, keyword string, limit int, offset int) (count int64, messages []*Message, err error) {\n\tquery := DB.Model(&Message{}).Where(\"eid =? AND conversation_id =?\", eid, conversationID)\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"message LIKE? OR answer LIKE?\", \"%\"+keyword+\"%\", \"%\"+keyword+\"%\")\n\t}\n\n\tcountQuery := query\n\tif err = countQuery.Count(&count).Error; err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\tif limit == 0 {\n\t\tlimit = 10\n\t}\n\tquery = query.Limit(limit)\n\tif offset > 0 {\n\t\tquery = query.Offset(offset)\n\t}\n\n\terr = query.Find(&messages).Order(\"created_time DESC\").Error\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\treturn count, messages, nil\n}\n\n// GetMessagesByConversationIDWithDirection retrieves conversation messages by conversation ID with direction control\nfunc GetMessagesByConversationIDWithDirection(eid int64, conversationID int64, keyword string, limit, offset int, direction string) (count int64, messages []*Message, err error) {\n\tquery := DB.Model(&Message{}).Where(\"eid =? AND conversation_id =?\", eid, conversationID)\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"message LIKE? OR answer LIKE?\", \"%\"+keyword+\"%\", \"%\"+keyword+\"%\")\n\t}\n\n\tcountQuery := query\n\tif err = countQuery.Count(&count).Error; err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\tif limit == 0 {\n\t\tlimit = 10\n\t}\n\tquery = query.Limit(limit)\n\tif offset > 0 {\n\t\tquery = query.Offset(offset)\n\t}\n\n\tif direction == \"asc\" {\n\t\tquery = query.Order(\"created_time ASC\")\n\t} else {\n\t\tquery = query.Order(\"created_time DESC\")\n\t}\n\n\terr = query.Find(&messages).Error\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\treturn count, messages, nil\n}\n"
  },
  {
    "path": "api/model/navigation.go",
    "content": "package model\n\nimport \"errors\"\n\ntype Navigation struct {\n\tNavigationID int64              `json:\"navigation_id\" gorm:\"primaryKey;autoIncrement;comment:自增id\"`\n\tEid          int64              `json:\"eid\" gorm:\"not null;comment:企业ID\"`\n\tName         string             `json:\"name\" gorm:\"size:50;not null;comment:名称\"`\n\tIcon         string             `json:\"icon\" gorm:\"size:255;comment:图标URL或标识\"`\n\tType         int                `json:\"type\" gorm:\"not null;comment:类型1系统内置,2外部链接,3自定义页\"` // 类型(1=系统内置,2=外部链接,3=自定义页)\n\tJumpPath     string             `json:\"jump_path\" gorm:\"size:255;not null;comment:跳转路径\"`\n\tSort         int                `json:\"sort\" gorm:\"default:0;comment:排序\"`\n\tConfig       string             `json:\"config\" gorm:\"type:text;not null;comment:配置\"`\n\tStatus       int                `json:\"status\" gorm:\"not null;default:1;comment:状态1启用,2禁用\"` // 状态(1=启用,2=禁用)\n\tContent      *NavigationContent `json:\"content\" gorm:\"-\"`\n\tBaseModel\n}\n\nconst (\n\tNavigationTypeSystemBuiltIn = 1\n\tNavigationTypeExternalLink  = 2\n\tNavigationTypeCustomPage    = 3\n\n\tNavigationStatusEnabled  = 1\n\tNavigationStatusDisabled = 2\n)\n\nfunc (nav *Navigation) Create() error {\n\tif nav.Eid == 0 {\n\t\treturn errors.New(\"eid不能为空\")\n\t}\n\tif nav.JumpPath == \"\" {\n\t\treturn errors.New(\"跳转路径不能为空\")\n\t}\n\n\t// var count int64\n\t// DB.Model(&Navigation{}).Where(\"eid = ? AND jump_path = ?\", nav.Eid, nav.JumpPath).Count(&count)\n\t// if count > 0 {\n\t// \treturn errors.New(\"当前企业下该跳转路径已存在\")\n\t// }\n\n\tresult := DB.Create(nav)\n\tif result.Error != nil {\n\t\treturn result.Error\n\t}\n\treturn nil\n}\n\nfunc (nav *Navigation) Update() error {\n\treturn DB.Model(nav).Updates(nav).Error\n}\n\nfunc (nav *Navigation) Delete() error {\n\treturn DB.Delete(nav).Error\n}\n\nfunc GetNavigationByID(eid int64, navigationID int64) (*Navigation, error) {\n\tvar nav Navigation\n\terr := DB.Where(\"eid = ? AND navigation_id = ?\", eid, navigationID).First(&nav).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &nav, nil\n}\n\nfunc (nav *Navigation) LoadContent() error {\n\tvar content NavigationContent\n\terr := DB.Where(\"navigation_id = ?\", nav.NavigationID).First(&content).Error\n\tif err != nil {\n\t\treturn err\n\t}\n\tnav.Content = &content\n\treturn nil\n}\n\nfunc UpdateNavigation(id int, updates map[string]interface{}) error {\n\treturn DB.Model(&Navigation{}).Where(\"navigation_id = ?\", id).Updates(updates).Error\n}\n\nfunc DeleteNavigation(id int) error {\n\treturn DB.Where(\"navigation_id = ?\", id).Delete(&Navigation{}).Error\n}\n\nfunc UpdateNavigationStatus(id int, status int) error {\n\treturn DB.Model(&Navigation{}).Where(\"navigation_id = ?\", id).Update(\"status\", status).Error\n}\n\nfunc BatchUpdateNavigationSort(sortList []struct {\n\tID   int\n\tSort int\n}) error {\n\ttx := DB.Begin()\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\tfor _, item := range sortList {\n\t\tif err := tx.Model(&Navigation{}).Where(\"navigation_id = ?\", item.ID).Update(\"sort\", item.Sort).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn tx.Commit().Error\n}\n\nfunc GetNavigationsByEid(eid int64) ([]*Navigation, error) {\n\tvar navs []*Navigation\n\terr := DB.Where(\"eid =?\", eid).Order(\"sort DESC\").Find(&navs).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn navs, nil\n}\n"
  },
  {
    "path": "api/model/navigation_content.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\t\"time\"\n)\n\ntype NavigationContent struct {\n\tContentID    int64  `json:\"content_id\" gorm:\"primaryKey;autoIncrement;comment:自增id\"`\n\tNavigationID int64  `json:\"navigation_id\" gorm:\"index;comment:navigations.navigation_id\"`\n\tHtmlContent  string `json:\"html_content\" gorm:\"type:text;comment:html内容\"`\n\tBaseModel\n}\n\nfunc (NavigationContent) TableName() string {\n\treturn \"navigation_contents\"\n}\n\nfunc (nc *NavigationContent) Create() error {\n\tif nc.NavigationID == 0 {\n\t\treturn errors.New(\"navigation_id不能为空\")\n\t}\n\n\t// 检查关联导航是否存在\n\tvar count int64\n\tDB.Model(&Navigation{}).Where(\"navigation_id = ?\", nc.NavigationID).Count(&count)\n\tif count == 0 {\n\t\treturn errors.New(\"关联导航不存在\")\n\t}\n\n\treturn DB.Create(nc).Error\n}\n\nfunc (nc *NavigationContent) Update() error {\n\treturn DB.Model(nc).Updates(map[string]interface{}{\n\t\t\"html_content\": nc.HtmlContent,\n\t\t\"updated_time\": time.Now().UTC().UnixMilli(),\n\t}).Error\n}\n\nfunc (nc *NavigationContent) Delete() error {\n\treturn DB.Delete(nc).Error\n}\n\nfunc GetContentByID(contentID int64, navigationID int64) (*NavigationContent, error) {\n\tvar content NavigationContent\n\terr := DB.Where(\"content_id = ? AND navigation_id = ?\", contentID, navigationID).First(&content).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &content, nil\n}\n\nfunc GetNavigationContentByID(navID int64) (*NavigationContent, error) {\n\tvar content NavigationContent\n\tif err := DB.Where(\"nav_id = ?\", navID).First(&content).Error; err != nil {\n\t\treturn nil, err\n\t}\n\treturn &content, nil\n}\n\nfunc DeleteNavigationContentByNavID(navID int64) error {\n    return DB.Where(\"navigation_id = ?\", navID).Delete(&NavigationContent{}).Error\n}\n"
  },
  {
    "path": "api/model/order.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\t\"time\"\n)\n\n// Order status constants\nconst (\n\tOrderStatusConfirming = 1 // Manual payment confirming\n\tOrderStatusPending    = 2 // Pending payment\n\tOrderStatusPaid       = 3 // Paid\n\tOrderStatusExpired    = 4 // Expired\n\tOrderStatusClosed     = 5 // Closed\n)\n\n// Service type constants\nconst (\n\tServiceTypeSubscription = 1 // Subscription service\n)\n\n// WechatPay trade_type constants\nconst (\n\tTradeTypeJSAPI    = \"JSAPI\"    // Public account payment, Mini Program payment\n\tTradeTypeNative   = \"NATIVE\"   // Native payment\n\tTradeTypeApp      = \"APP\"      // APP payment\n\tTradeTypeMicroPay = \"MICROPAY\" // Payment code payment\n\tTradeTypeMWeb     = \"MWEB\"     // H5 payment\n\tTradeTypeFacePay  = \"FACEPAY\"  // Face payment\n)\n\n// WechatPay trade_state constants\nconst (\n\tTradeStateSuccess    = \"SUCCESS\"    // Payment successful\n\tTradeStateRefund     = \"REFUND\"     // Refund initiated\n\tTradeStateNotPay     = \"NOTPAY\"     // Not paid\n\tTradeStateClosed     = \"CLOSED\"     // Order closed\n\tTradeStateRevoked    = \"REVOKED\"    // Order revoked (only for payment code)\n\tTradeStateUserPaying = \"USERPAYING\" // User is paying (only for payment code)\n\tTradeStatePayError   = \"PAYERROR\"   // Payment failed (only for payment code)\n\n\t// alipay trade_state constants\n\tTradeStateWaitBuyerPay = \"WAIT_BUYER_PAY\" // Waiting for buyer to pay\n\tTradeStateTradeClosed  = \"TRADE_CLOSED\"  // Trade closed\n\tTradeStateTradeSuccess = \"TRADE_SUCCESS\" // Trade succeeded\n\tTradeStateTradeFinish  = \"TRADE_FINISHED\" // Trade finished\n)\n\n// Order represents an order record\ntype Order struct {\n\tID               int64  `json:\"id\" gorm:\"primaryKey\"`                                                                  // Primary key ID\n\tEid              int64  `json:\"eid\" gorm:\"index;comment:'Enterprise ID'\"`                                              // Enterprise ID\n\tOrderId          string `json:\"order_id\" gorm:\"uniqueIndex;size:32;comment:'Order Number'\"`                            // Order number\n\tServiceID        int64  `json:\"service_id\" gorm:\"comment:'Service ID'\"`                                                // Service ID\n\tServiceType      int    `json:\"service_type\" gorm:\"comment:'Service Type 1:Subscription Service'\"`                     // Service type 1:Subscription service\n\tSubscriptionName string `json:\"subscription_name\" gorm:\"comment:'Subscription name'\"`                                  // Subscription name\n\tDuration         int    `json:\"duration\" gorm:\"comment:'Subscription Duration'\"`                                       // Subscription duration\n\tTimeUnit         string `json:\"time_unit\" gorm:\"comment:'Time unit: year/month/week/day/quarter'\"`                     // Time unit: year/month/week/day/quarter\n\tCurrency         string `json:\"currency\" gorm:\"type:varchar(10);not null;column:currency;comment:'Currency: CNY/USD'\"` // Currency type: CNY/USD\n\tAmount           int64  `json:\"amount\" gorm:\"comment:'Order Amount'\"`                                                  // Order amount (in cents)\n\tPayType          int    `json:\"pay_type\" gorm:\"comment:'Payment Type 1:WeChat 2:Manual 3:PayPal'\"`                     // Payment type 1:WeChat 2:Manual 3:PayPal\n\tStatus           int    `json:\"status\" gorm:\"comment:'Order Status 1:Not confirmed 2:Pending 3:Paid 4:Expired'\"`       // Order status 1:Not confirmed 2:Pending 3:Paid 4:Expired\n\tUserID           int64  `json:\"user_id\" gorm:\"comment:'User ID'\"`                                                      // User ID\n\tNickname         string `json:\"nickname\" gorm:\"comment:'Nickname'\"`                                                    // User nickname\n\tTransactionId    string `json:\"transaction_id\" gorm:\"comment:'Transaction ID'\"`                                        // Transaction ID\n\tPayTime          int64  `json:\"pay_time\" gorm:\"comment:'Payment Time'\"`                                                // Payment time\n\tExpiredTime      int64  `json:\"expired_time\" gorm:\"comment:'Expiration Time'\"`                                         // Expiration time\n\tBaseModel\n}\n\n// CalculateNewExpiredTime calculates the new expiration time based on user's current status and order information\nfunc (o *Order) CalculateNewExpiredTime(user *User) (int64, error) {\n\t// Determine start time for calculation\n\tnow := time.Now().UTC()\n\tvar startTime time.Time\n\n\t// If user has expired, calculate from current time\n\t// If user has not expired, calculate from original expiration time\n\tif user.ExpiredTime < now.UnixMilli() {\n\t\tstartTime = now\n\t} else {\n\t\tstartTime = time.UnixMilli(user.ExpiredTime).UTC()\n\t}\n\n\t// Calculate new expiration time based on time unit\n\tvar endTime time.Time\n\n\tswitch o.TimeUnit {\n\tcase \"day\":\n\t\tendTime = startTime.AddDate(0, 0, o.Duration)\n\tcase \"week\":\n\t\tendTime = startTime.AddDate(0, 0, o.Duration*7)\n\tcase \"month\":\n\t\tendTime = startTime.AddDate(0, o.Duration, 0)\n\tcase \"quarter\":\n\t\tendTime = startTime.AddDate(0, o.Duration*3, 0)\n\tcase \"year\":\n\t\tendTime = startTime.AddDate(o.Duration, 0, 0)\n\tdefault:\n\t\treturn 0, errors.New(\"unsupported time unit: \" + o.TimeUnit)\n\t}\n\n\t// Convert to milliseconds for storage\n\treturn endTime.UnixMilli(), nil\n}\n\n// GetOrderByID gets an order by order ID\nfunc GetOrderByID(eid int64, id int64) (*Order, error) {\n\tvar order Order\n\terr := DB.Where(\"eid = ? AND id = ?\", eid, id).First(&order).Error\n\treturn &order, err\n}\n\n// GetOrderByOrderId gets an order by order ID\nfunc GetOrderByOrderId(eid int64, orderId string) (*Order, error) {\n\tvar order Order\n\terr := DB.Where(\"eid = ? AND order_id = ?\", eid, orderId).First(&order).Error\n\treturn &order, err\n}\n\n// UpdateOrderStatus updates the status of an order\nfunc UpdateOrderStatus(eid int64, orderId string, status int) error {\n\treturn DB.Model(&Order{}).Where(\"eid = ? AND order_id = ?\", eid, orderId).\n\t\tUpdates(map[string]interface{}{\n\t\t\t\"status\": status,\n\t\t}).Error\n}\n\n// UpdateOrderPaid updates an order as paid\nfunc UpdateOrderPaid(eid int64, orderId string, transactionId string) error {\n\t// Use current time as payment time\n\treturn UpdateOrderPaidWithTime(eid, orderId, transactionId, time.Now().UTC().UnixMilli())\n}\n\nfunc UpdateOrderPaidWithTime(eid int64, orderId string, transactionId string, payTime int64) error {\n\t// Start transaction\n\ttx := DB.Begin()\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\ttx.Rollback()\n\t\t}\n\t}()\n\n\t// Query updated order\n\tvar order Order\n\tif err := tx.Where(\"eid = ? AND order_id = ?\", eid, orderId).First(&order).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn err\n\t}\n\n\tif order.PayTime == payTime {\n\t\t// If payment time is the same, no need to update\n\t\treturn nil\n\t}\n\n\t// Update order status\n\tif err := tx.Model(&Order{}).\n\t\tWhere(\"eid = ? AND order_id = ?\", eid, orderId).\n\t\tUpdates(map[string]interface{}{\n\t\t\t\"status\":         OrderStatusPaid,\n\t\t\t\"transaction_id\": transactionId,\n\t\t\t\"pay_time\":       payTime,\n\t\t}).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn err\n\t}\n\n\t// If it's a subscription service, update user's expiration time\n\tif order.ServiceType == ServiceTypeSubscription {\n\t\t// Get user information\n\t\tvar user User\n\t\tif err := tx.Where(\"user_id = ? AND eid = ?\", order.UserID, eid).First(&user).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn errors.New(\"user not found for order: \" + err.Error())\n\t\t}\n\n\t\tnewExpiredTime, err := order.CalculateNewExpiredTime(&user)\n\t\tif err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn err\n\t\t}\n\n\t\t// Update user expiration time\n\t\tif err := tx.Model(&User{}).\n\t\t\tWhere(\"user_id = ? AND eid = ?\", order.UserID, eid).\n\t\t\tUpdates(map[string]interface{}{\n\t\t\t\t\"expired_time\": newExpiredTime,\n\t\t\t\t\"group_id\":     order.ServiceID,\n\t\t\t}).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn errors.New(\"failed to update user expiration time and group_id: \" + err.Error())\n\t\t}\n\t}\n\n\t// Commit transaction\n\treturn tx.Commit().Error\n}\n\n// TableName returns the table name for the Order model\nfunc (o *Order) TableName() string {\n\treturn \"orders\"\n}\n\n// Create creates a new order record\nfunc (o *Order) Create() error {\n\treturn DB.Create(o).Error\n}\n\n// Update updates an existing order record\nfunc (o *Order) Update() error {\n\treturn DB.Save(o).Error\n}\n\n// Delete deletes an order record\nfunc (o *Order) Delete() error {\n\treturn DB.Delete(o).Error\n}\n\n// GetOrders gets orders with pagination\nfunc GetOrders(eid, userID int64, status, page, pageSize int) ([]*Order, int64, error) {\n\tvar orders []*Order\n\tvar total int64\n\n\tquery := DB.Model(&Order{}).Where(\"eid = ?\", eid)\n\n\tif userID > 0 {\n\t\tquery = query.Where(\"user_id = ?\", userID)\n\t}\n\n\tif status > 0 {\n\t\tquery = query.Where(\"status = ?\", status)\n\t}\n\n\terr := query.Count(&total).Error\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\toffset := (page - 1) * pageSize\n\terr = query.Order(\"id DESC\").Offset(offset).Limit(pageSize).Find(&orders).Error\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\treturn orders, total, nil\n}\n\n// GetUserOrders gets orders for a specific user\nfunc GetUserOrders(eid int64, userID int64) ([]*Order, error) {\n\tvar orders []*Order\n\terr := DB.Where(\"eid = ? AND user_id = ?\", eid, userID).Order(\"id DESC\").Find(&orders).Error\n\treturn orders, err\n}\n\n// GetPendingOrders gets all pending orders\nfunc GetPendingOrders() ([]*Order, error) {\n\tvar orders []*Order\n\terr := DB.Where(\"status = ?\", OrderStatusPending).Find(&orders).Error\n\treturn orders, err\n}\n\n// GetExpiredOrders gets all expired orders\nfunc GetExpiredOrders() ([]*Order, error) {\n\tvar orders []*Order\n\terr := DB.Where(\"status = ?\", OrderStatusExpired).Find(&orders).Error\n\treturn orders, err\n}\n\n// GetOrdersByStatus gets orders by status\nfunc GetOrdersByStatus(eid int64, status int) ([]*Order, error) {\n\tvar orders []*Order\n\terr := DB.Where(\"eid = ? AND status = ?\", eid, status).Order(\"id DESC\").Find(&orders).Error\n\treturn orders, err\n}\n\n// CountOrdersByStatus counts orders by status\nfunc CountOrdersByStatus(eid int64, status int) (int64, error) {\n\tvar count int64\n\terr := DB.Model(&Order{}).Where(\"eid = ? AND status = ?\", eid, status).Count(&count).Error\n\treturn count, err\n}\n\n// GetOrderStatistics gets order statistics\nfunc GetOrderStatistics(eid int64) (map[string]interface{}, error) {\n\tvar totalAmount float64\n\tvar totalCount, pendingCount, paidCount, expiredCount int64\n\n\t// Get total amount and count\n\terr := DB.Model(&Order{}).Where(\"eid = ?\", eid).Count(&totalCount).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = DB.Model(&Order{}).Where(\"eid = ? AND status = ?\", eid, OrderStatusPaid).\n\t\tSelect(\"COALESCE(SUM(amount), 0)\").Scan(&totalAmount).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Get counts by status\n\terr = DB.Model(&Order{}).Where(\"eid = ? AND status = ?\", eid, OrderStatusPending).Count(&pendingCount).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = DB.Model(&Order{}).Where(\"eid = ? AND status = ?\", eid, OrderStatusPaid).Count(&paidCount).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = DB.Model(&Order{}).Where(\"eid = ? AND status = ?\", eid, OrderStatusExpired).Count(&expiredCount).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn map[string]interface{}{\n\t\t\"totalAmount\":  totalAmount,\n\t\t\"totalCount\":   totalCount,\n\t\t\"pendingCount\": pendingCount,\n\t\t\"paidCount\":    paidCount,\n\t\t\"expiredCount\": expiredCount,\n\t}, nil\n}\n\n// GetRecentOrders gets recent orders\nfunc GetRecentOrders(eid int64, limit int) ([]*Order, error) {\n\tvar orders []*Order\n\terr := DB.Where(\"eid = ?\", eid).Order(\"id DESC\").Limit(limit).Find(&orders).Error\n\treturn orders, err\n}\n\n// GetOrdersWithFilters gets orders with extended filters\nfunc GetOrdersWithFilters(eid int64, userID int64, status, payType int, keyword string, subscriptionID int64, startTime, endTime int64, offset, limit int) ([]*Order, int64, error) {\n\tquery := DB.Model(&Order{}).Where(\"eid = ?\", eid)\n\n\t// Filter by user ID\n\tif userID > 0 {\n\t\tquery = query.Where(\"user_id = ?\", userID)\n\t}\n\n\t// Filter by status\n\tif status >= 0 {\n\t\tquery = query.Where(\"status = ?\", status)\n\t}\n\n\t// Filter by payment type\n\tif payType >= 0 {\n\t\tquery = query.Where(\"pay_type = ?\", payType)\n\t}\n\n\t// Filter by keyword (user ID )\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"order_id LIKE ? OR nickname LIKE ?\", \"%\"+keyword+\"%\", \"%\"+keyword+\"%\")\n\t}\n\n\t// Filter by subscription ID\n\tif subscriptionID > 0 {\n\t\tquery = query.Where(\"service_id = ?\", subscriptionID)\n\t}\n\n\t// Validate and apply time range filters\n\tif startTime > 0 {\n\t\tquery = query.Where(\"created_time >= ?\", startTime)\n\t}\n\tif endTime > 0 {\n\t\tquery = query.Where(\"created_time <= ?\", endTime)\n\t}\n\n\t// Count total records\n\tvar total int64\n\tif err := query.Count(&total).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\t// Get paginated results\n\tvar orders []*Order\n\tif err := query.Offset(offset).Limit(limit).Order(\"created_time DESC\").Find(&orders).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\treturn orders, total, nil\n}\n\n// UpdateExpiredOrders updates orders that have passed their expiration time\n// It finds all orders with expiration time earlier than current time and status still in pending state\n// Returns the number of affected records and any error that occurred\nfunc UpdateExpiredOrders() (int64, error) {\n\tnow := time.Now().UTC().UnixMilli()\n\tresult := DB.Model(&Order{}).\n\t\tWhere(\"expired_time < ? AND status = ? \", now, OrderStatusPending).\n\t\tUpdates(map[string]interface{}{\n\t\t\t\"status\": OrderStatusExpired,\n\t\t})\n\treturn result.RowsAffected, result.Error\n}\n\nfunc GetExpiredPendingOrders(expireTime time.Time) ([]Order, error) {\n\tvar orders []Order\n\terr := DB.Where(\"status = ? AND expired_time < ?\", OrderStatusPending, expireTime).Find(&orders).Error\n\treturn orders, err\n}\n"
  },
  {
    "path": "api/model/pay_setting.go",
    "content": "package model\n\nimport \"errors\"\n\n// Payment type constants\nconst (\n\tPayTypeWechat = 1 // WeChat Pay\n\tPayTypeManual = 2 // Manual Transfer\n\tPayTypePaypal = 3 // PayPal\n\tPayTypeAlipay = 4 // Alipay\n)\n\n// Payment status constants\nconst (\n\tPayStatusDisabled = false // Payment method disabled\n\tPayStatusEnabled  = true  // Payment method enabled\n)\n\n// PaySetting represents the payment setting table\ntype PaySetting struct {\n\tPaySettingID int64  `json:\"pay_setting_id\" gorm:\"primaryKey;autoIncrement\"`\n\tEid          int64  `json:\"eid\" gorm:\"not null;index\"`\n\tPayType      int    `json:\"pay_type\" gorm:\"not null;comment:'Payment type 1:WeChat Pay 2:Manual Transfer 3:PayPal 4:alipay'\"` // 1:WeChat Pay 2:Manual Transfer 3:PayPal 4:alipay\n\tPayConfig    string `json:\"pay_config\" gorm:\"type:text;not null;comment:'Payment configuration JSON'\"`\n\tPayStatus    bool   `json:\"pay_status\" gorm:\"not null;default:1;comment:'Status true:Enabled false:Disabled'\"` // 1:Enabled false:Disabled\n\tExtraConfig  string `json:\"extra_config\" gorm:\"type:text;comment:'Extra configuration JSON'\"`\n\tBaseModel\n}\n\n// WechatPayConfig represents the configuration for WeChat Pay\ntype WechatPayConfig struct {\n\tAppID              string `json:\"appId\"`              // Application ID\n\tMchID              string `json:\"mchId\"`              // Merchant ID\n\tSerialNo           string `json:\"serialNo\"`           // Merchant Certificate Serial Number\n\tAPIv3Key           string `json:\"apiV3Key\"`           // API v3 Key\n\tPrivateKeyPath     string `json:\"privateKeyPath\"`     // Path to Merchant Private Key file\n\tPrivateKey         string `json:\"privateKey\"`         // Encrypted Merchant Private Key content\n\tCertPath           string `json:\"certPath\"`           // Path to Merchant Certificate file\n\tNotifyURL          string `json:\"notifyUrl\"`          // Payment Notification URL\n\tPlatformCertPath   string `json:\"platformCertPath\"`   // Path to WeChat Pay Platform Certificate (optional)\n\tPlatformCert       string `json:\"platformCert\"`       // Encrypted WeChat Pay Platform Certificate content (optional)\n\tPlatformSerialNo   string `json:\"platformSerialNo\"`   // WeChat Pay Platform Certificate Serial Number (optional)\n\tUseEncryptedConfig bool   `json:\"useEncryptedConfig\"` // Whether to use encrypted configuration\n}\n\ntype AlipayConfig struct {\n\tAppID           string `json:\"appId\"`\n\tPrivateKey      string `json:\"privateKey\"`\n\tAlipayPublicKey string `json:\"alipayPublicKey\"`\n\tReturnUrl       string `json:\"returnUrl\"`\n\tNotifyUrl       string `json:\"notifyUrl\"`\n}\n\n// TableName specifies the table name\nfunc (PaySetting) TableName() string {\n\treturn \"pay_settings\"\n}\n\n// Create creates a new payment setting\nfunc (ps *PaySetting) Create() error {\n\treturn DB.Create(ps).Error\n}\n\n// Update updates an existing payment setting\nfunc (ps *PaySetting) Update() error {\n\treturn DB.Save(ps).Error\n}\n\n// Delete deletes a payment setting\nfunc (ps *PaySetting) Delete() error {\n\treturn DB.Delete(ps).Error\n}\n\n// GetPaySettingByID gets a payment setting by ID\nfunc GetPaySettingByID(eid int64, id int64) (*PaySetting, error) {\n\tvar paySetting PaySetting\n\terr := DB.Where(\"eid = ? AND pay_setting_id = ?\", eid, id).First(&paySetting).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &paySetting, nil\n}\n\n// GetPaySettingsByEid gets all payment settings for an enterprise\nfunc GetPaySettingsByEid(eid int64) ([]*PaySetting, error) {\n\tvar paySettings []*PaySetting\n\terr := DB.Where(\"eid = ?\", eid).Find(&paySettings).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn paySettings, nil\n}\n\n// GetPaySettingByType gets a payment setting by type\nfunc GetPaySettingByType(eid int64, payType int) (*PaySetting, error) {\n\tvar paySetting PaySetting\n\terr := DB.Where(\"eid = ? AND pay_type = ?\", eid, payType).First(&paySetting).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &paySetting, nil\n}\n\nfunc GetPayTypeText(payType int) (string, error) {\n\tswitch payType {\n\tcase PayTypeWechat:\n\t\treturn \"微信支付\", nil\n\tcase PayTypeManual:\n\t\treturn \"手动转账\", nil\n\tcase PayTypePaypal:\n\t\treturn \"PayPal\", nil\n\tcase PayTypeAlipay:\n\t\treturn \"支付宝\", nil\n\tdefault:\n\t\treturn \"\", errors.New(\"unsupported payment type\")\n\t}\n}\n"
  },
  {
    "path": "api/model/prompt.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Prompt 提示词表\ntype Prompt struct {\n\tPromptID     int64        `json:\"prompt_id\" gorm:\"primaryKey;autoIncrement;comment:自增id\"`\n\tName         string       `json:\"name\" gorm:\"size:255;not null;default:'';comment:名称\"`\n\tContent      string       `json:\"content\" gorm:\"size:5000;not null;default:'';comment:技能提示语\"`\n\tDescription  string       `json:\"description\" gorm:\"type:text;comment:描述\"`\n\tType         int          `json:\"type\" gorm:\"not null;default:1;comment:类型。1个人；2系统\"`\n\tStatus       int          `json:\"status\" gorm:\"not null;default:1;comment:状态。；0未启用；1正常；2删除\"`\n\tUserID       int64        `json:\"user_id\" gorm:\"not null;default:0;comment:creator user id\"`\n\tEid          int64        `json:\"eid\" gorm:\"not null;default:0;comment:团队id\"`\n\tViews        int64        `json:\"views\" gorm:\"not null;default:0;comment:查看次数\"`\n\tLikes        int64        `json:\"likes\" gorm:\"not null;default:0;comment:点赞次数\"`\n\tSort         int          `json:\"sort\" gorm:\"not null;default:0;comment:排序\"`\n\tCustomConfig string       `json:\"custom_config\" gorm:\"not null;type:text\"`\n\tAILinks      string       `json:\"ai_links\" gorm:\"type:text;comment:关联的AI链接\"`\n\tAILinksData  []AILinkInfo `gorm:\"-\" json:\"ai_links_data\"`\n\tGroupIDs     []int64      `json:\"group_ids\" gorm:\"-\"`\n\tIsLiked      bool         `json:\"is_liked\" gorm:\"-\"`\n\tBaseModel\n}\n\nconst (\n\tPromptTypeSystem   = 1\n\tPromptTypePersonal = 2\n\n\tPromptStatusDisable = 0\n\tPromptStatusNormal  = 1\n\tPromptStatusDelete  = 2\n)\n\n// TableName 设置表名\nfunc (Prompt) TableName() string {\n\treturn \"prompts\"\n}\n\n// Create 创建提示词记录\nfunc (p *Prompt) Create() error {\n\tif p.Name == \"\" {\n\t\treturn errors.New(\"name is empty\")\n\t}\n\tif p.Content == \"\" {\n\t\treturn errors.New(\"content is empty\")\n\t}\n\n\tif p.Description == \"\" {\n\t\treturn errors.New(\"description is empty\")\n\t}\n\n\tresult := DB.Create(p)\n\tif result.Error != nil {\n\t\treturn result.Error\n\t}\n\n\treturn nil\n}\n\n// Update 更新提示词信息\nfunc (p *Prompt) Update() error {\n\tupdateData := map[string]interface{}{\n\t\t\"name\":          p.Name,\n\t\t\"content\":       p.Content,\n\t\t\"description\":   p.Description,\n\t\t\"status\":        p.Status,\n\t\t\"views\":         p.Views,\n\t\t\"likes\":         p.Likes,\n\t\t\"sort\":          p.Sort,\n\t\t\"custom_config\": p.CustomConfig,\n\t}\n\treturn DB.Model(p).Updates(updateData).Error\n}\n\n// Delete 删除提示词记录（软删除，将状态设为2）\nfunc (p *Prompt) Delete() error {\n\tp.Status = 2\n\n\treturn DB.Model(p).Updates(map[string]interface{}{\n\t\t\"status\": p.Status,\n\t}).Error\n}\n\n// HardDelete 硬删除提示词记录\nfunc (p *Prompt) HardDelete() error {\n\terr := DB.Delete(p).Error\n\treturn err\n}\n\n// GetPromptByID 根据ID获取提示词信息\nfunc GetPromptByID(promptID int) (*Prompt, error) {\n\tvar prompt Prompt\n\tstatusArray := []int{PromptStatusNormal, PromptStatusDisable}\n\terr := DB.Where(\"prompt_id = ? AND status in (?)\", promptID, statusArray).First(&prompt).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &prompt, nil\n}\n\n// GetPromptsByEid 根据团队ID获取提示词列表\nfunc GetPromptsByEid(eid int) ([]*Prompt, error) {\n\tvar prompts []*Prompt\n\tstatusArray := []int{PromptStatusNormal, PromptStatusDisable}\n\terr := DB.Where(\"eid = ? AND status in (?)\", eid, statusArray).Find(&prompts).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn prompts, nil\n}\n\nfunc GetPromptList(eid int64, keyword string, groupIDStr string, status, offset int, limit int) (int64, []*Prompt, error) {\n\tstatusArray := []int{PromptStatusNormal, PromptStatusDisable}\n\tif status != -1 {\n\t\tstatusArray = []int{status}\n\t}\n\tdb := DB.Model(&Prompt{}).Where(\"status in (?) AND eid = ?\", statusArray, eid)\n\n\tif keyword != \"\" {\n\t\tdb = db.Where(\"name LIKE ?\", \"%\"+keyword+\"%\")\n\t}\n\n\tif groupIDStr != \"\" {\n\t\t// 解析多个分组ID\n\t\tgroupIDStrings := strings.Split(groupIDStr, \",\")\n\t\tgroupIDs := make([]int64, 0, len(groupIDStrings))\n\n\t\tfor _, idStr := range groupIDStrings {\n\t\t\tidStr = strings.TrimSpace(idStr)\n\t\t\tif idStr == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tid, err := strconv.ParseInt(idStr, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tcontinue // 忽略无效的ID\n\t\t\t}\n\n\t\t\tif id > 0 {\n\t\t\t\tgroupIDs = append(groupIDs, id)\n\t\t\t}\n\t\t}\n\n\t\tif len(groupIDs) > 0 {\n\t\t\t// 通过 ResourcePermission 表关联查询\n\t\t\tdb = db.Joins(\"JOIN resource_permissions ON prompts.prompt_id = resource_permissions.resource_id\").\n\t\t\t\tWhere(\"resource_permissions.group_id IN (?) AND resource_permissions.resource_type = ?\", groupIDs, ResourceTypePrompt).\n\t\t\t\tGroup(\"prompts.prompt_id\") // 确保结果不重复\n\t\t}\n\t}\n\n\tvar count int64\n\tdb.Count(&count)\n\n\tvar prompts []*Prompt\n\tdb = db.Order(\"sort DESC, prompt_id DESC\")\n\n\terr := db.Offset(offset).Limit(limit).Find(&prompts).Error\n\n\treturn count, prompts, err\n}\n\n// IncrementViews 增加查看次数\nfunc (p *Prompt) IncrementViews() error {\n\tp.Views++\n\n\treturn DB.Model(p).Updates(map[string]interface{}{\n\t\t\"views\": p.Views,\n\t}).Error\n}\n\n// UpdateSort 更新排序\nfunc (p *Prompt) UpdateSort(sort int) error {\n\tp.Sort = sort\n\n\treturn DB.Model(p).Updates(map[string]interface{}{\n\t\t\"sort\": p.Sort,\n\t}).Error\n}\n\n// UpdateCustomConfig 更新自定义配置\nfunc (p *Prompt) UpdateCustomConfig(config string) error {\n\tp.CustomConfig = config\n\n\treturn DB.Model(p).Updates(map[string]interface{}{\n\t\t\"custom_config\": p.CustomConfig,\n\t}).Error\n}\n\nfunc (p *Prompt) LoadPromptGroups() error {\n\t// 获取提示词关联的所有分组ID\n\tvar groupIDs []int64\n\terr := DB.Model(&ResourcePermission{}).\n\t\tWhere(\"resource_id = ? AND resource_type = ?\", p.PromptID, ResourceTypePrompt).\n\t\tPluck(\"group_id\", &groupIDs).Error\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// 将分组ID添加到提示词对象中\n\tp.GroupIDs = groupIDs\n\treturn nil\n}\n\nfunc (p *Prompt) LoadIsLiked(UserId int64) error {\n\tlike, err := GetLikeByUserObject(UserId, ResourceTypePrompt, p.PromptID)\n\tif err != nil {\n\t\tp.IsLiked = false\n\t\treturn nil\n\t}\n\tp.IsLiked = like != nil && like.Status == LikeStatusActive\n\treturn nil\n}\n"
  },
  {
    "path": "api/model/provider.go",
    "content": "package model\n\nimport (\n\t\"github.com/53AI/53AIHub/common/logger\"\n)\n\ntype Provider struct {\n\tProviderID   int64   `json:\"provider_id\" gorm:\"primaryKey;autoIncrement\"`\n\tEid          int64   `json:\"eid\" gorm:\"not null;index\" example:\"1\"`\n\tName         string  `json:\"name\" gorm:\"size:100;not null;index\"`\n\tProviderType int64   `json:\"provider_type\" gorm:\"not null;index\"`\n\tConfigs      string  `json:\"configs\" gorm:\"type:text;not null\"`\n\tIsAuthorized bool    `json:\"is_authorized\" gorm:\"not null;default:false\"`\n\tAccessToken  string  `json:\"access_token\" gorm:\"type:text\"`\n\tRefreshToken string  `json:\"refresh_token\" gorm:\"type:text\"`\n\tExpiresIn    int64   `json:\"expires_in\" gorm:\"not null\"`\n\tAuthedTime   int64   `json:\"authed_time\" gorm:\"not null\"`\n\tBaseURL      *string `json:\"base_url\" gorm:\"column:base_url;default:''\"`\n\tBaseModel\n}\n\ntype CozeConfig struct {\n\tClientID     string `json:\"client_id\"`\n\tClientSecret string `json:\"client_secret\"`\n}\n\nconst (\n\tProviderTypeCozeCn     = 1\n\tProviderTypeCozeCom    = 2\n\tProviderTypeAppBuilder = 3\n\tProviderType53AI       = 4\n\tProviderTypeCozeStudio = 5\n\tProviderTypeTencent    = 6\n)\n\n// GetBaseURLByProviderType returns the base URL based on provider type\nfunc (provider *Provider) GetBaseURLByProviderType() string {\n\tif provider.BaseURL != nil && *provider.BaseURL != \"\" {\n\t\treturn *provider.BaseURL\n\t}\n\n\tswitch provider.ProviderType {\n\tcase ProviderTypeCozeCn:\n\t\treturn \"https://api.coze.cn\"\n\tcase ProviderTypeCozeCom:\n\t\treturn \"https://api.coze.com\"\n\tcase ProviderTypeAppBuilder:\n\t\treturn \"https://qianfan.baidubce.com\"\n\tcase ProviderType53AI:\n\t\treturn \"https://api.53ai.com\"\n\tcase ProviderTypeCozeStudio:\n\t\t// coze-studio requires custom base_url, return empty if not set\n\t\treturn \"\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc CreateProvider(provider *Provider) error {\n\treturn DB.Create(provider).Error\n}\n\nfunc DeleteProviderByID(id, eid int64) error {\n\treturn DB.Where(\"provider_id = ? AND eid = ?\", id, eid).Delete(&Provider{}).Error\n}\n\nfunc UpdateProvider(provider *Provider) error {\n\treturn DB.Model(provider).\n\t\tUpdates(provider).Error\n}\n\nfunc GetProviderByID(id, eid int64) (*Provider, error) {\n\tvar provider Provider\n\terr := DB.Where(\"provider_id = ? AND eid = ?\", id, eid).First(&provider).Error\n\treturn &provider, err\n}\n\nfunc GetProvidersByEidAndProviderType(eid int64, providerType int64) ([]Provider, error) {\n\tvar providers []Provider\n\tif providerType != 0 {\n\t\terr := DB.Where(\"eid =? AND provider_type =?\", eid, providerType).Find(&providers).Error\n\t\treturn providers, err\n\t}\n\n\terr := DB.Where(\"eid = ?\", eid).Find(&providers).Error\n\treturn providers, err\n}\n\nfunc GetProvidersByEidWithFilters(eid int64, providerType int64, name string) ([]Provider, error) {\n\tvar providers []Provider\n\tquery := DB.Where(\"eid = ?\", eid)\n\n\tif providerType != 0 {\n\t\tquery = query.Where(\"provider_type = ?\", providerType)\n\t}\n\n\tif name != \"\" {\n\t\tquery = query.Where(\"name LIKE ?\", \"%\"+name+\"%\")\n\t}\n\n\terr := query.Find(&providers).Error\n\treturn providers, err\n}\n\nfunc GetFirstProviderByEidAndProviderType(eid int64, providerType int64) (provider Provider, err error) {\n\terr = DB.Where(\"eid =? AND provider_type =?\", eid, providerType).First(&provider).Error\n\treturn provider, err\n}\n\nfunc GetProvidersByTypeAndAuthStatus(providerType int64, authStatus bool) ([]Provider, error) {\n\tvar providers []Provider\n\terr := DB.Where(\"provider_type = ? and is_authorized = ?\", providerType, authStatus).Find(&providers).Error\n\treturn providers, err\n}\n\n// GetProviderByEidAndProviderTypeWithOptionalID gets a provider by enterprise ID and provider type\n// If providerID is provided (> 0), returns the specific provider\n// If providerID is 0, returns the first provider of that type (backward compatibility)\nfunc GetProviderByEidAndProviderTypeWithOptionalID(eid int64, providerType int64, providerID int64) (Provider, error) {\n\tvar provider Provider\n\tvar err error\n\n\tif providerID > 0 {\n\t\t// Specific provider requested\n\t\terr = DB.Where(\"eid = ? AND provider_type = ? AND provider_id = ?\", eid, providerType, providerID).First(&provider).Error\n\t\tif err == nil {\n\t\t\tlogger.SysLogf(\"GetProviderByEidAndProviderTypeWithOptionalID: Found specific provider - ID: %d, Name: %s, Type: %d\", provider.ProviderID, provider.Name, provider.ProviderType)\n\t\t} else {\n\t\t\tlogger.SysLogf(\"GetProviderByEidAndProviderTypeWithOptionalID: Failed to find specific provider - EID: %d, Type: %d, ProviderID: %d, Error: %v\", eid, providerType, providerID, err)\n\t\t}\n\t} else {\n\t\t// Backward compatibility: get first provider of this type\n\t\terr = DB.Where(\"eid = ? AND provider_type = ?\", eid, providerType).First(&provider).Error\n\t\tif err == nil {\n\t\t\tlogger.SysLogf(\"GetProviderByEidAndProviderTypeWithOptionalID: Found first provider - ID: %d, Name: %s, Type: %d\", provider.ProviderID, provider.Name, provider.ProviderType)\n\t\t} else {\n\t\t\tlogger.SysLogf(\"GetProviderByEidAndProviderTypeWithOptionalID: Failed to find first provider - EID: %d, Type: %d, Error: %v\", eid, providerType, err)\n\t\t}\n\t}\n\n\treturn provider, err\n}\n"
  },
  {
    "path": "api/model/resource_permission.go",
    "content": "package model\n\n// ResourceType defines constants for resource types\nconst (\n\tResourceTypeAgent      = \"agent\"      // Agent resource type\n\tResourceTypeUser       = \"user\"       // User resource type\n\tResourceTypeDepartment = \"department\" // Department resource type\n\tResourceTypePrompt     = \"prompt\"     // Prompt resource type\n\tResourceTypeAILink     = \"ai_link\"\n)\n\n// Permission defines constants for permission types\nconst (\n\tPermissionRead  = \"read\"  // Read permission\n\tPermissionWrite = \"write\" // Write permission\n)\n\n// ResourcePermission defines the resource permission association table\ntype ResourcePermission struct {\n\tID           int64       `json:\"id\" gorm:\"primaryKey;autoIncrement\"`\n\tGroupID      int64       `json:\"group_id\" gorm:\"not null;index:idx_group_resource\"`\n\tResourceID   int64       `json:\"resource_id\" gorm:\"not null;index:idx_group_resource\"`\n\tResourceType string      `json:\"resource_type\" gorm:\"not null;index:idx_group_resource;type:varchar(100)\"` // agent, user, department\n\tPermission   string      `json:\"permission\" gorm:\"not null;type:varchar(50)\"`\n\tUser         *User       `json:\"user,omitempty\" gorm:\"-\"`\n\tDepartment   *Department `json:\"department,omitempty\" gorm:\"-\"`\n\tBaseModel\n}\n\n// TableName specifies the table name for ResourcePermission\nfunc (ResourcePermission) TableName() string {\n\treturn \"resource_permissions\"\n}\n\n// Create creates a new resource permission\nfunc (rule *ResourcePermission) Create() error {\n\treturn DB.Create(rule).Error\n}\n\n// Update updates an existing resource permission\nfunc (rule *ResourcePermission) Update() error {\n\treturn DB.Save(rule).Error\n}\n\n// Delete deletes a resource permission\nfunc (rule *ResourcePermission) Delete() error {\n\treturn DB.Delete(rule).Error\n}\n\n// GetResourcePermissionByID retrieves a resource permission by ID\nfunc GetResourcePermissionByID(id int64) (*ResourcePermission, error) {\n\tvar rule ResourcePermission\n\terr := DB.Where(\"id = ?\", id).First(&rule).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &rule, nil\n}\n\n// GetResourcePermissionsByGroupID retrieves all permissions for a specific group\nfunc GetResourcePermissionsByGroupID(groupID int64) ([]*ResourcePermission, error) {\n\tvar rules []*ResourcePermission\n\terr := DB.Where(\"group_id = ?\", groupID).Find(&rules).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn rules, nil\n}\n\n// CheckPermission checks if a group has permission for a specific resource\nfunc CheckPermission(groupID int64, resourceID int64, resourceType string, requiredPermission string) (bool, error) {\n\tvar count int64\n\terr := DB.Model(&ResourcePermission{}).\n\t\tWhere(\"group_id = ? AND resource_id = ? AND resource_type = ? AND permission = ?\",\n\t\t\tgroupID, resourceID, resourceType, requiredPermission).\n\t\tCount(&count).Error\n\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn count > 0, nil\n}\n\n// GetResourcesByGroupAndType retrieves all resources of a specific type that a group has access to\nfunc GetResourcesByGroupAndType(groupID int64, resourceType string) ([]int64, error) {\n\tvar resourceIDs []int64\n\terr := DB.Model(&ResourcePermission{}).\n\t\tWhere(\"group_id = ? AND resource_type = ?\", groupID, resourceType).\n\t\tPluck(\"resource_id\", &resourceIDs).Error\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn resourceIDs, nil\n}\n\n// DeleteResourcePermissionsByResource\nfunc DeleteResourcePermissionsByResource(resourceID int64, resourceType string) error {\n\treturn DB.Where(\"resource_id = ? AND resource_type = ?\", resourceID, resourceType).Delete(&ResourcePermission{}).Error\n}\n\nfunc GetGroupsByUserID(userID int64) ([]int64, error) {\n\tvar groupIDs []int64\n\terr := DB.Model(&ResourcePermission{}).\n\t\tWhere(\"resource_id = ? AND resource_type = ?\", userID, ResourceTypeUser).\n\t\tPluck(\"group_id\", &groupIDs).Error\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn groupIDs, nil\n}\n\nfunc GetGroupsByUserIDAndType(userID int64, groupType int64) ([]int64, error) {\n\tvar groupIDs []int64\n\terr := DB.Model(&ResourcePermission{}).\n\t\tSelect(\"resource_permissions.group_id\").\n\t\tJoins(\"JOIN groups ON groups.group_id = resource_permissions.group_id\").\n\t\tWhere(\"resource_permissions.resource_id = ? AND resource_permissions.resource_type = ? AND groups.group_type = ?\",\n\t\t\tuserID, ResourceTypeUser, groupType).\n\t\tPluck(\"resource_permissions.group_id\", &groupIDs).Error\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn groupIDs, nil\n}\n\nfunc GetGroupsByDepartmentID(departmentID int64) ([]int64, error) {\n\tvar groupIDs []int64\n\terr := DB.Model(&ResourcePermission{}).\n\t\tWhere(\"resource_id = ? AND resource_type = ?\", departmentID, ResourceTypeDepartment).\n\t\tPluck(\"group_id\", &groupIDs).Error\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn groupIDs, nil\n}\n\nfunc GetGroupIDsByDepartmentIDs(dids []int64) ([]int64, error) {\n\tvar groupIDs []int64\n\n\terr := DB.Model(&ResourcePermission{}).Where(\"resource_type = ? AND resource_id IN (?)\", ResourceTypeDepartment, dids).Pluck(\"group_id\", &groupIDs).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn groupIDs, nil\n}\n"
  },
  {
    "path": "api/model/response.go",
    "content": "package model\n\nimport \"errors\"\n\n// CommonResponse represents the standard API response format\n// @Description Standard API response structure\n// @Description Code: Status code of the response\n// @Description Message: Human-readable message about the response\n// @Description Data: Actual response data, can be any type\ntype CommonResponse struct {\n\t// @Description Status code, see ResponseCode enum for details\n\t// @Enum 0:Success - Operation completed successfully\n\t// @Enum 1:ParamError - Invalid parameters provided\n\t// @Enum 2:DBError - Database operation failed\n\t// @Enum 3:NetworkError - Network communication error\n\t// @Enum 4:SystemError - Internal system error\n\t// @Enum 5:AuthFailed - Authentication failure\n\t// @Enum 6:NotFound - Resource not found\n\t// @Enum 7:UnauthorizedError - Unauthorized access\n\t// @Enum 8:FileError - File operation failed\n\t// @Enum 9:ForbiddenError - Forbidden access\n\t// @Enum 10:AgentAuthError - Agent authentication failed\n\t// @Enum 11:TokenExpiredError - Token expired, need to re-login\n\t// @Enum 12:ChatError - Chat operation failed\n\t// @Enum 13:ProviderNoFoundError - Provider not found\n\tCode    int         `json:\"code\" example:\"0\" enums:\"0,1,2,3,4,5,6,7,8,9,10,11,12,13\"`\n\tMessage string      `json:\"message\" example:\"ok\" description:\"Response message\"`\n\tData    interface{} `json:\"data\" description:\"Response data payload\"`\n}\n\ntype OpenAIErrorResponse struct {\n\tError struct {\n\t\tMessage string `json:\"message\"`\n\t\tType    string `json:\"type\"`\n\t} `json:\"error\"`\n}\n\n// ResponseCode defines the status codes used in API responses\n// @Description Enumeration of all possible response status codes\ntype ResponseCode int\n\n// Response code enumeration\n// @enum ResponseCode\nconst (\n\tSuccess                      ResponseCode = iota // 0 - Success\n\tParamError                                       // 1 - Invalid parameters\n\tDBError                                          // 2 - Database operation failed\n\tNetworkError                                     // 3 - Network communication error\n\tSystemError                                      // 4 - Internal system error\n\tAuthFailed                                       // 5 - Authentication failure\n\tNotFound                                         // 6 - Resource not found\n\tUnauthorizedError                                // 7 - Unauthorized access\n\tFileError                                        // 8 - File operation failed\n\tForbiddenError                                   // 9 - Forbidden access\n\tAgentAuthError                                   // 10 - Agent authentication failed\n\tTokenExpiredError                                // 11 - Token expired, need to re-login\n\tChatError                                        // 12 - Chat operation failed\n\tProviderNoFoundError                             // 13 - Provider not found\n\tOperateTooFast                                   // 14 - Operate too fast\n\tFeatureNotAvailableError                         // 15 - Feature not available\n\tRecordAlreadyExists                              // 16 - Record already exists\n\tInvalidVerificationCodeError                     // 17 - 验证码错误\n)\n\n// Response code descriptions\n// @Description Mapping of response codes to their human-readable messages\n// @Description This map provides the default message for each response code\n// @Description Used by the Message() method to get the standard message for a code\nvar CodeMessage = map[ResponseCode]string{\n\tSuccess:                      \"ok\",\n\tParamError:                   \"param error\",\n\tDBError:                      \"db error\",\n\tNetworkError:                 \"network error\",\n\tSystemError:                  \"system error\",\n\tAuthFailed:                   \"auth failed\",\n\tNotFound:                     \"not found\",\n\tUnauthorizedError:            \"unauthorized\",\n\tFileError:                    \"file error\",\n\tForbiddenError:               \"forbidden\",\n\tAgentAuthError:               \"agent auth failed\",\n\tTokenExpiredError:            \"token expired\",\n\tChatError:                    \"chat error\",\n\tProviderNoFoundError:         \"provider not found\",\n\tOperateTooFast:               \"operate too fast\",\n\tFeatureNotAvailableError:     \"feature not available\",\n\tRecordAlreadyExists:          \"record already exists\",\n\tInvalidVerificationCodeError: \"invalid or expired verification code\",\n}\n\nconst (\n\tInvalidEnterpriseID     = \"invalid enterprise id\"\n\tInvalidVerificationCode = \"invalid or expired verification code\"\n\tInvalidMobileOrEmail    = \"invalid mobile number or email format\"\n\tInvalidMobileFormat     = \"invalid mobile number format\"\n\tPasswordNotMatch        = \"password not match\"\n\tOrderNotFound           = \"order not found\"\n\tFeatureNotAvailable     = \"feature not available\"\n\tFeatureOverLimit        = \"feature over limit\"\n)\n\nfunc (c ResponseCode) Message() string {\n\tif msg, ok := CodeMessage[c]; ok {\n\t\treturn msg\n\t}\n\treturn \"system error\"\n}\n\nfunc (c ResponseCode) ToResponse(data interface{}) CommonResponse {\n\tif err, ok := data.(error); ok {\n\t\treturn c.ToErrorResponse(err)\n\t}\n\treturn CommonResponse{\n\t\tCode:    int(c),\n\t\tMessage: c.Message(),\n\t\tData:    data,\n\t}\n}\n\nfunc (c ResponseCode) ToErrorResponse(err error) CommonResponse {\n\treturn CommonResponse{\n\t\tCode:    int(c),\n\t\tMessage: c.Message() + \": \" + err.Error(),\n\t\tData:    nil,\n\t}\n}\n\nfunc (c ResponseCode) ToNewErrorResponse(message string) CommonResponse {\n\terr := errors.New(message)\n\treturn CommonResponse{\n\t\tCode:    int(c),\n\t\tMessage: c.Message() + \": \" + err.Error(),\n\t\tData:    nil,\n\t}\n}\n\nfunc (c ResponseCode) ToOpenAIErrorRespone(data interface{}) OpenAIErrorResponse {\n\tmsg := c.Message()\n\tif err, ok := data.(error); ok {\n\t\tmsg += \": \" + err.Error()\n\t}\n\t// data if str\n\tif str, ok := data.(string); ok {\n\t\tmsg += \": \" + str\n\t}\n\n\treturn OpenAIErrorResponse{\n\t\tError: struct {\n\t\t\tMessage string `json:\"message\"`\n\t\t\tType    string `json:\"type\"`\n\t\t}{\n\t\t\tMessage: msg,\n\t\t\tType:    \"53aihub_error\",\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "api/model/setting.go",
    "content": "package model\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\n\t\"gorm.io/gorm\"\n)\n\ntype Setting struct {\n\tSettingID int64  `json:\"setting_id\" gorm:\"primaryKey;autoIncrement\"`\n\tEid       int64  `json:\"eid\" gorm:\"not null;index\" example:\"1\"`\n\tKey       string `json:\"key\" gorm:\"not null;index\" example:\"setting_key\"`\n\tValue     string `json:\"value\" gorm:\"not null\" example:\"setting_value\"`\n\tBaseModel\n}\n\ntype SettingKey string\n\nconst (\n\tThirdPartyStatisticHeader SettingKey = \"third_party_statistic_header\"\n\tThirdPartyStatisticCss    SettingKey = \"third_party_statistic_css\"\n)\n\nconst (\n\tDefaultPromptLinks string = \"default_prompt_links\" // 添加默认网站配置的 key\n)\n\ntype SettingGroup []SettingKey\n\nvar ThirdPartyStatisticGroup SettingGroup = []SettingKey{\n\tThirdPartyStatisticHeader,\n\tThirdPartyStatisticCss,\n}\n\nvar settingGroupMap = map[string]SettingGroup{\n\t\"third_party_statistic\": ThirdPartyStatisticGroup,\n}\n\nfunc GetSettingGroupByName(group_name string) (SettingGroup, bool) {\n\tgroup, exists := settingGroupMap[group_name]\n\treturn group, exists\n}\n\nfunc CreateSetting(setting *Setting) error {\n\treturn DB.Create(setting).Error\n}\n\nfunc DeleteSettingByID(id int64) error {\n\treturn DB.Where(\"setting_id = ?\", id).Delete(&Setting{}).Error\n}\n\nfunc UpdateSetting(setting *Setting) error {\n\treturn DB.Model(setting).\n\t\tSelect(\"key\", \"value\", \"updated_time\").\n\t\tUpdates(setting).Error\n}\n\nfunc GetSettingByID(id int64) (*Setting, error) {\n\tvar setting Setting\n\tresult := DB.Where(\"setting_id = ?\", id).First(&setting)\n\tif result.Error != nil {\n\t\treturn nil, result.Error\n\t}\n\treturn &setting, nil\n}\n\nfunc GetSettingsByEid(eid int64) ([]Setting, error) {\n\tvar settings []Setting\n\tif err := DB.Where(\"eid =?\", eid).Order(\"created_time DESC\").Find(&settings).Error; err != nil {\n\t\treturn nil, err\n\t}\n\treturn settings, nil\n}\n\nfunc GetSettingsBySettingsGroup(eid int64, group_name string) ([]Setting, error) {\n\tgroup, ok := GetSettingGroupByName(group_name)\n\tif !ok {\n\t\treturn nil, errors.New(\"setting group not exist\")\n\t}\n\tvar settings []Setting\n\tkeys := make([]string, len(group))\n\tfor i, k := range group {\n\t\tkeys[i] = string(k)\n\t}\n\tif err := DB.Where(\"eid = ?\", eid).Where(\"`key` IN (?)\", keys).Order(\"created_time DESC\").Find(&settings).Error; err != nil {\n\t\treturn nil, err\n\t}\n\treturn settings, nil\n}\n\nfunc GetSettingByEidAndKey(eid int64, key string) (*Setting, error) {\n\tvar setting Setting\n\tresult := DB.Where(\"eid =?\", eid).Where(\"`key` =?\", key).First(&setting)\n\tif result.Error != nil {\n\t\tif result.Error.Error() == \"record not found\" {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, result.Error\n\t}\n\treturn &setting, nil\n}\n\n// 添加解析 JSON 的辅助函数\nfunc GetDefaultPromptLinks(eid int64) ([]AILinkInfo, error) {\n\tvar setting Setting\n\terr := DB.Where(\"eid = ? AND `key` = ?\", eid, DefaultPromptLinks).First(&setting).Error\n\tif err != nil {\n\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\t// 如果记录未找到，从 GetDefaultGroupData 中提取数据\n\t\t\tdefaultGroups := GetDefaultGroupData()\n\n\t\t\t// 定义需要的链接名称，并存储到 map 中\n\t\t\trequiredLinkNames := map[string]bool{\n\t\t\t\t\"豆包\":       true,\n\t\t\t\t\"腾讯元宝\":     true,\n\t\t\t\t\"百度AI+\":    true,\n\t\t\t\t\"ChatGPT\":  true,\n\t\t\t\t\"Kimi\":     true,\n\t\t\t\t\"DeekSeek\": true,\n\t\t\t}\n\n\t\t\t// 提取需要的链接数据\n\t\t\tvar defaultLinks []AILinkInfo\n\t\t\tfor _, group := range defaultGroups {\n\t\t\t\tfor _, link := range group.Links {\n\t\t\t\t\tif requiredLinkNames[link.Name] {\n\t\t\t\t\t\tdefaultLinks = append(defaultLinks, link)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata, _ := json.Marshal(defaultLinks)\n\t\t\tsetting = Setting{\n\t\t\t\tEid:   eid,\n\t\t\t\tKey:   DefaultPromptLinks,\n\t\t\t\tValue: string(data),\n\t\t\t}\n\t\t\tif err := CreateSetting(&setting); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t// 重新从数据库中获取设置\n\t\t\terr = DB.Where(\"eid = ? AND `key` = ?\", eid, DefaultPromptLinks).First(&setting).Error\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\t// 还需要把setting.eid传入links中\n\tvar links []AILinkInfo\n\tif err := json.Unmarshal([]byte(setting.Value), &links); err != nil {\n\t\treturn nil, err\n\t}\n\treturn links, nil\n}\n"
  },
  {
    "path": "api/model/share_record.go",
    "content": "package model\n\nimport (\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/google/uuid\"\n\t\"gorm.io/gorm\"\n)\n\ntype ShareRecord struct {\n\t// 索引说明：\n\t// - uniq_eid_shareid: (eid, share_id) unique，用于跨企业防冲突、快速按share_id查找\n\t// - uniq_eid_convid_hash: (eid, conversation_id, normalized_hash) unique，用于同会话下相同消息集合的幂等去重\n\tID             int64  `json:\"id\" gorm:\"column:id;primaryKey;autoIncrement\"`\n\tShareID        string `json:\"share_id\" gorm:\"column:share_id;type:varchar(64);not null;index:uniq_eid_shareid,unique\"`\n\tEid            int64  `json:\"eid\" gorm:\"column:eid;not null;index:uniq_eid_shareid,unique;index:uniq_eid_convid_hash,unique\"`\n\tConversationID int64  `json:\"conversation_id\" gorm:\"column:conversation_id;not null;index:uniq_eid_convid_hash,unique\"`\n\t// message_ids 形如 \"12,34,57\"：对 message_ids 去重+升序后拼接，用于可读性与解析\n\tMessageIDs     string `json:\"message_ids\" gorm:\"column:message_ids;type:varchar(2048);not null\"`\n\t// normalized_hash: 对规范化后的 message_ids 进行哈希（sha256 hex），用于唯一去重\n\tNormalizedHash string `json:\"normalized_hash\" gorm:\"column:normalized_hash;type:char(64);not null;index:uniq_eid_convid_hash,unique\"`\n\tBaseModel\n}\n\nfunc (ShareRecord) TableName() string {\n\treturn \"share_records\"\n}\n\n// NormalizeMessageIDs 去重+升序+拼接，返回 normalized 字符串 与 标准化后的ID切片\nfunc NormalizeMessageIDs(ids []int64) (string, []int64) {\n\tif len(ids) == 0 {\n\t\treturn \"\", []int64{}\n\t}\n\tseen := make(map[int64]struct{}, len(ids))\n\tdedup := make([]int64, 0, len(ids))\n\tfor _, id := range ids {\n\t\tif _, ok := seen[id]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tseen[id] = struct{}{}\n\t\tdedup = append(dedup, id)\n\t}\n\tsort.Slice(dedup, func(i, j int) bool { return dedup[i] < dedup[j] })\n\tparts := make([]string, 0, len(dedup))\n\tfor _, id := range dedup {\n\t\tparts = append(parts, fmt.Sprintf(\"%d\", id))\n\t}\n\treturn strings.Join(parts, \",\"), dedup\n}\n\n// HashNormalizedKey 对规范化后的 key 计算 sha256 hex\nfunc HashNormalizedKey(key string) string {\n\th := sha256.Sum256([]byte(key))\n\treturn hex.EncodeToString(h[:])\n}\n\n// ParseMessageIDsToIDs 将规范化后的 message_ids 解析为升序ID数组\nfunc ParseMessageIDsToIDs(key string) ([]int64, error) {\n\tif strings.TrimSpace(key) == \"\" {\n\t\treturn []int64{}, nil\n\t}\n\tparts := strings.Split(key, \",\")\n\tout := make([]int64, 0, len(parts))\n\tfor _, p := range parts {\n\t\tvar id int64\n\t\t_, err := fmt.Sscan(p, &id)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid message_ids segment: %s\", p)\n\t\t}\n\t\tout = append(out, id)\n\t}\n\treturn out, nil\n}\n\n// ValidateMessagesBelongToConversation 确认所有消息均属于同一 eid+conversation_id\nfunc ValidateMessagesBelongToConversation(eid, conversationID int64, ids []int64) error {\n\tif len(ids) == 0 {\n\t\treturn errors.New(\"empty message_ids\")\n\t}\n\tvar count int64\n\tif err := DB.Model(&Message{}).\n\t\tWhere(\"eid = ? AND conversation_id = ? AND id IN ?\", eid, conversationID, ids).\n\t\tCount(&count).Error; err != nil {\n\t\treturn err\n\t}\n\tif count != int64(len(ids)) {\n\t\treturn errors.New(\"some message_ids not belong to the conversation or missing\")\n\t}\n\treturn nil\n}\n\n// CreateShareRecord 在 (eid, conversation_id, normalized_hash) 唯一范围内创建或复用\n// 返回 share_id 与 reused 标识\nfunc CreateShareRecord(eid, conversationID int64, messageIDsNormalized string) (string, bool, error) {\n\tif messageIDsNormalized == \"\" {\n\t\treturn \"\", false, errors.New(\"message_ids(normalized) is empty\")\n\t}\n\thash := HashNormalizedKey(messageIDsNormalized)\n\n\tvar existed ShareRecord\n\terr := DB.Where(\"eid = ? AND conversation_id = ? AND normalized_hash = ?\",\n\t\teid, conversationID, hash).First(&existed).Error\n\tif err == nil {\n\t\treturn existed.ShareID, true, nil\n\t}\n\tif !errors.Is(err, gorm.ErrRecordNotFound) {\n\t\treturn \"\", false, err\n\t}\n\n\t// 不存在则创建\n\tshareID := uuid.NewString()\n\trec := &ShareRecord{\n\t\tEid:            eid,\n\t\tShareID:        shareID,\n\t\tConversationID: conversationID,\n\t\tMessageIDs:     messageIDsNormalized,\n\t\tNormalizedHash: hash,\n\t}\n\tif err := DB.Create(rec).Error; err != nil {\n\t\t// 并发场景下唯一键冲突，回查返回已有\n\t\tvar existed2 ShareRecord\n\t\tif qerr := DB.Where(\"eid = ? AND conversation_id = ? AND normalized_hash = ?\",\n\t\t\teid, conversationID, hash).First(&existed2).Error; qerr == nil {\n\t\t\treturn existed2.ShareID, true, nil\n\t\t}\n\t\treturn \"\", false, err\n\t}\n\treturn shareID, false, nil\n}\n\nfunc GetShareRecordByShareID(shareID string) (*ShareRecord, error) {\n\tvar rec ShareRecord\n\t// (eid, share_id) 联合唯一已有；这里按 share_id 查询，若需要隔离可在上层传入 eid 追加过滤\n\tif err := DB.Where(\"share_id = ?\", shareID).First(&rec).Error; err != nil {\n\t\treturn nil, err\n\t}\n\treturn &rec, nil\n}\n\n // GetMessagesByIDsOrderedAsc 按ID批量加载并基于 CreatedTime 升序排序\n func ListMessageIDsByConversation(eid, conversationID int64) ([]int64, error) {\n\tif conversationID <= 0 {\n\t\treturn []int64{}, nil\n\t}\n\t// 仅选择 id 字段，避免加载大字段\n\ttype row struct{ ID int64 `gorm:\"column:id\"` }\n\tvar rows []row\n\tif err := DB.Model(&Message{}).\n\t\tSelect(\"id\").\n\t\tWhere(\"eid = ? AND conversation_id = ?\", eid, conversationID).\n\t\tFind(&rows).Error; err != nil {\n\t\treturn nil, err\n\t}\n\tids := make([]int64, 0, len(rows))\n\tfor _, r := range rows {\n\t\tids = append(ids, r.ID)\n\t}\n\treturn ids, nil\n}\n\nfunc GetMessagesByIDsOrderedAsc(eid int64, ids []int64) ([]*Message, error) {\n\tif len(ids) == 0 {\n\t\treturn []*Message{}, nil\n\t}\n\tvar msgs []*Message\n\tif err := DB.Where(\"eid = ? AND id IN ?\", eid, ids).Find(&msgs).Error; err != nil {\n\t\treturn nil, err\n\t}\n\tsort.Slice(msgs, func(i, j int) bool {\n\t\treturn msgs[i].CreatedTime < msgs[j].CreatedTime\n\t})\n\treturn msgs, nil\n}"
  },
  {
    "path": "api/model/subscription.go",
    "content": "package model\n\nconst (\n\tCurrencyCNY = \"CNY\"\n\tCurrencyUSD = \"USD\"\n\n\tTimeUnitYear    = \"year\"\n\tTimeUnitMonth   = \"month\"\n\tTimeUnitWeek    = \"week\"\n\tTimeUnitDay     = \"day\"\n\tTimeUnitQuarter = \"quarter\"\n\n\tSubscriptionTypeFee    = 1\n\tSubscriptionTypePoints = 2\n)\n\n// SubscriptionSetting 订阅设置表\n// @Description Subscription setting configuration\n// @Description Contains the basic settings for a subscription, including group association and AI features\ntype SubscriptionSetting struct {\n\t// @Description Unique identifier for the subscription setting\n\t// @Example 1\n\tSettingId int64 `json:\"setting_id\" gorm:\"primaryKey;autoIncrement;column:setting_id;comment:'Subscription setting ID'\"`\n\t// @Description Associated group identifier\n\t// @Example 1\n\tGroupId int64 `json:\"group_id\" gorm:\"not null;column:group_id;comment:'Associated group ID'\"`\n\t// @Description URL of the subscription logo image\n\t// @Example https://example.com/logo.png\n\tLogoUrl string `json:\"logo_url\" gorm:\"type:varchar(255);column:logo_url;comment:'Subscription logo image URL'\"`\n\t// @Description Whether AI features are enabled for this subscription\n\t// @Example true\n\tAiEnabled bool `json:\"ai_enabled\" gorm:\"default:false;column:ai_enabled;comment:'Whether AI features are enabled'\"`\n\t// @Description Whether this subscription is the default subscription\n\t// @Example true\n\tIsDefault bool `json:\"is_default\" gorm:\"default:false;column:is_default;comment:'Whether this is the default subscription'\"`\n\t// @Description List of subscription relations containing pricing and duration details\n\tRelations []*SubscriptionRelation `json:\"relations\" gorm:\"-\"`\n\tBaseModel\n}\n\n// LoadRelations loads all subscription relations for the current subscription setting\n// @Summary Load subscription relations\n// @Description Retrieves all subscription relations associated with this subscription setting by setting_id\nfunc (s *SubscriptionSetting) LoadRelations() error {\n\treturn DB.Where(\"setting_id = ?\", s.SettingId).Find(&s.Relations).Error\n}\n\n// SubscriptionRelation\n// @Description Subscription relation details\n// @Description Contains pricing and duration information for a subscription plan\ntype SubscriptionRelation struct {\n\t// @Description Unique identifier for the subscription relation\n\t// @Example 1\n\tRelationId int64 `json:\"relation_id\" gorm:\"primaryKey;autoIncrement;column:relation_id;comment:'Subscription relation ID'\"`\n\t// @Description Associated subscription setting identifier\n\t// @Example 1\n\tSettingId int64 `json:\"setting_id\" gorm:\"not null;column:setting_id;comment:'Associated subscription setting ID'\"`\n\t// @Description Amount in cents/pennies\n\t// @Example 9900\n\tAmount int64 `json:\"amount\" gorm:\"not null;column:amount;comment:'Amount in cents/pennies'\"`\n\t// @Description Currency type\n\t// @Enum CNY,USD\n\t// @Example CNY\n\tCurrency string `json:\"currency\" gorm:\"type:varchar(10);not null;column:currency;comment:'Currency: CNY/USD'\"`\n\t// @Description Time unit for subscription duration\n\t// @Enum year,month,week,day,quarter\n\t// @Example month\n\tTimeUnit string `json:\"time_unit\" gorm:\"type:varchar(10);not null;column:time_unit;comment:'Time unit: year/month/week/day/quarter'\"`\n\t// @Description Subscription type\n\t// @Enum 1,2\n\t// @Example 1\n\t// @Description 1=Fee, 2=Points\n\tType uint `json:\"type\" gorm:\"not null;column:type;comment:'Type: 1=Fee/2=Points'\"`\n\tBaseModel\n}\n\n// Add table name methods with comments\nfunc (SubscriptionSetting) TableName() string {\n\treturn \"subscription_settings\"\n}\n\nfunc (SubscriptionRelation) TableName() string {\n\treturn \"subscription_relations\"\n}\n\n// Create subscription setting\nfunc CreateSubscriptionSetting(setting *SubscriptionSetting) error {\n\treturn DB.Create(setting).Error\n}\n\n// Update subscription setting\nfunc UpdateSubscriptionSetting(setting *SubscriptionSetting) error {\n\treturn DB.Model(setting).Updates(map[string]interface{}{\n\t\t\"logo_url\":   setting.LogoUrl,\n\t\t\"ai_enabled\": setting.AiEnabled,\n\t}).Error\n}\n\n// Delete subscription setting\nfunc DeleteSubscriptionSetting(settingId int64) error {\n\t// Hard delete\n\treturn DB.Where(\"setting_id = ?\", settingId).Delete(&SubscriptionSetting{}).Error\n}\n\n// Get subscription setting by ID\nfunc GetSubscriptionSettingById(settingId int64) (*SubscriptionSetting, error) {\n\tvar setting SubscriptionSetting\n\terr := DB.Where(\"setting_id = ?\", settingId).First(&setting).Error\n\treturn &setting, err\n}\n\n// Get all subscription settings\nfunc GetAllSubscriptionSettings(offset, limit int) ([]SubscriptionSetting, int64, error) {\n\tvar settings []SubscriptionSetting\n\tvar count int64\n\n\tquery := DB.Model(&SubscriptionSetting{})\n\n\terr := query.Count(&count).Error\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\tif limit > 0 {\n\t\tquery = query.Offset(offset).Limit(limit)\n\t}\n\n\terr = query.Find(&settings).Error\n\treturn settings, count, err\n}\n\n// Create subscription relation\nfunc CreateSubscriptionRelation(relation *SubscriptionRelation) error {\n\treturn DB.Create(relation).Error\n}\n\n// Update subscription relation\nfunc UpdateSubscriptionRelation(relation *SubscriptionRelation) error {\n\treturn DB.Model(relation).Updates(map[string]interface{}{\n\t\t\"amount\":    relation.Amount,\n\t\t\"currency\":  relation.Currency,\n\t\t\"time_unit\": relation.TimeUnit,\n\t\t\"type\":      relation.Type,\n\t}).Error\n}\n\n// Delete subscription relation\nfunc DeleteSubscriptionRelation(relationId int64) error {\n\t// Hard delete\n\treturn DB.Where(\"relation_id = ?\", relationId).Delete(&SubscriptionRelation{}).Error\n}\n\n// Delete all relations by setting ID\nfunc DeleteSubscriptionRelationsBySettingId(settingId int64) error {\n\t// Hard delete\n\treturn DB.Where(\"setting_id = ?\", settingId).Delete(&SubscriptionRelation{}).Error\n}\n\n// Get subscription relations by setting ID\nfunc GetSubscriptionRelationsBySettingId(settingId int64) ([]SubscriptionRelation, error) {\n\tvar relations []SubscriptionRelation\n\terr := DB.Where(\"setting_id = ?\", settingId).Find(&relations).Error\n\treturn relations, err\n}\n\n// SubscriptionSettingWithAgents represents subscription settings with related agents and groups\ntype SubscriptionSettingWithAgents struct {\n\tGroup   *Group               `json:\"group\"`\n\tSetting *SubscriptionSetting `json:\"setting\"`\n}\n\n// GetSubscriptionSettingsWithAgents retrieves subscription settings with their associated agents\nfunc GetSubscriptionSettingsWithAgents(eid int64, offset, limit int) ([]SubscriptionSettingWithAgents, int64, error) {\n\tgroups, count, err := GetGroupsWithAgents(eid, USER_GROUP_TYPE, offset, limit)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\tresult := make([]SubscriptionSettingWithAgents, 0)\n\n\tfor _, group := range groups {\n\t\tvar setting SubscriptionSetting\n\t\terr := DB.Where(\"group_id = ?\", group.GroupId).First(&setting).Error\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := setting.LoadRelations(); err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tsettingWithAgents := SubscriptionSettingWithAgents{\n\t\t\tGroup:   &group,\n\t\t\tSetting: &setting,\n\t\t}\n\n\t\tresult = append(result, settingWithAgents)\n\t}\n\n\treturn result, count, nil\n}\n\n// get default subscription setting\nfunc GetDefaultSubscription(eid int64) (*SubscriptionSetting, error) {\n\tvar groupIds []int64\n\tif err := DB.Model(&Group{}).Select(\"group_id\").Where(\"eid = ? and group_type = ?\", eid, USER_GROUP_TYPE).Pluck(\"group_id\", &groupIds).Error; err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar defaultSubscription SubscriptionSetting\n\n\t// Query the database for the default subscription setting\n\terr := DB.Debug().Where(\"is_default = ? and group_id in ?\",  true, groupIds).First(&defaultSubscription).Error\n\tif err != nil {\n\t\t// Return nil and the error if the query fails\n\t\treturn nil, err\n\t}\n\n\t// Return the default subscription setting\n\treturn &defaultSubscription, nil\n}\n"
  },
  {
    "path": "api/model/system_log.go",
    "content": "package model\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n)\n\n// SystemLog 系统日志模型\n// @Description 对应数据库system_logs表，记录系统操作日志\ntype SystemLog struct {\n\tID         int64  `json:\"id\" gorm:\"primaryKey;autoIncrement;comment:流水ID\"`\n\tEid        int64  `json:\"eid\" gorm:\"not null;comment:站点ID\"`\n\tUserID     int64  `json:\"user_id\" gorm:\"not null;comment:操作成员ID\"`\n\tNickname   string `json:\"nickname\" gorm:\"size:255;not null;comment:成员名称\"`\n\tModule     uint8  `json:\"module\" gorm:\"unsigned;not null;comment:模块。1系统；2智能体；3提示词；4AI工具；5订单数据；6注册用户；7内部用户；8订阅设置；9管理员；10模板风格；11Banner图；12导航管理；13站点信息；14平台接入；15支付配置；16站点域名；17三方统计\"`\n\tAction     uint8  `json:\"action\" gorm:\"unsigned;not null;comment:动作。1新建；2编辑；3删除；4启用/停用；5登录/退出\"`\n\tContent    string `json:\"content\" gorm:\"type:text;not null;comment:日志内容\"`\n\tIP         string `json:\"ip\" gorm:\"size:20;not null;comment:ip\"`\n\tActionTime int64  `json:\"action_time\" gorm:\"comment:创建时间（毫秒值）\"`\n}\n\n// Module 模块常量定义\nconst (\n\tSystemLogModuleSystem       uint8 = 1  // 系统\n\tSystemLogModuleAgent        uint8 = 2  // 智能体\n\tSystemLogModulePrompt       uint8 = 3  // 提示词\n\tSystemLogModuleAITool       uint8 = 4  // AI工具\n\tSystemLogModuleOrder        uint8 = 5  // 订单数据\n\tSystemLogModuleRegistered   uint8 = 6  // 注册用户\n\tSystemLogModuleInternalUser uint8 = 7  // 内部用户\n\tSystemLogModuleSubscription uint8 = 8  // 订阅设置\n\tSystemLogModuleAdmin        uint8 = 9  // 管理员\n\tSystemLogModuleTemplate     uint8 = 10 // 模板风格\n\tSystemLogModuleBanner       uint8 = 11 // Banner图\n\tSystemLogModuleNavigation   uint8 = 12 // 导航管理\n\tSystemLogModuleSiteInfo     uint8 = 13 // 站点信息\n\tSystemLogModulePlatform     uint8 = 14 // 平台接入\n\tSystemLogModulePayment      uint8 = 15 // 支付配置\n\tSystemLogModuleDomain       uint8 = 16 // 站点域名\n\tSystemLogModuleStatistics   uint8 = 17 // 三方统计\n)\n\n// GetModuleByGroupType 根据分组类型获取对应的系统日志模块\nfunc GetModuleByGroupType(groupType int64) uint8 {\n\t// 示例映射关系，可根据实际业务调整\n\tswitch groupType {\n\tcase AI_LINKS_TYPE:\n\t\treturn SystemLogModuleAITool\n\tcase AGENT_TYPE:\n\t\treturn SystemLogModuleAgent\n\tcase SYSTEM_PROMPT_TYPE, PERSONAL_PROMPT_TYPE:\n\t\treturn SystemLogModulePrompt\n\tcase USER_GROUP_TYPE:\n\t\treturn SystemLogModuleRegistered\n\tcase INTERNAL_USER_GROUP_TYPE:\n\t\treturn SystemLogModuleInternalUser\n\tdefault:\n\t\treturn SystemLogModuleSystem\n\t}\n}\n\n// Action 动作常量定义\nconst (\n\tSystemLogActionCreate   uint8 = 1 // 新建\n\tSystemLogActionUpdate   uint8 = 2 // 编辑\n\tSystemLogActionDelete   uint8 = 3 // 删除\n\tSystemLogActionToggle   uint8 = 4 // 启用/停用\n\tSystemLogActionLoginOut uint8 = 5 // 登录/退出\n)\n\n// TableName 指定表名\nfunc (SystemLog) TableName() string {\n\treturn \"system_logs\"\n}\n\n// GetSystemLogsByConditions 按条件分页查询系统日志\nfunc GetSystemLogsByConditions(eid, module, action, userID, startTime, endTime int64, offset, limit int) ([]*SystemLog, int64, error) {\n\tquery := DB.Model(&SystemLog{}).Where(\"eid = ?\", eid)\n\n\tif module > 0 {\n\t\tquery = query.Where(\"module = ?\", module)\n\t}\n\tif action > 0 {\n\t\tquery = query.Where(\"action = ?\", action)\n\t}\n\tif userID > 0 {\n\t\tquery = query.Where(\"user_id = ?\", userID)\n\t}\n\tif startTime > 0 {\n\t\tquery = query.Where(\"action_time >= ?\", startTime)\n\t}\n\tif endTime > 0 {\n\t\tquery = query.Where(\"action_time <= ?\", endTime)\n\t}\n\n\tvar total int64\n\tif err := query.Count(&total).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\tlogs := make([]*SystemLog, 0)\n\tif err := query.Offset(offset).Limit(limit).Order(\"id DESC\").Find(&logs).Error; err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\treturn logs, total, nil\n}\n\n// CreateSystemLog 创建系统日志记录\nfunc CreateSystemLog(log *SystemLog) {\n\tgo func() {\n\t\tlog.ActionTime = time.Now().UnixMilli()\n\t\tif err := DB.Create(log).Error; err != nil {\n\t\t\t// 记录日志失败时输出错误日志\n\t\t\tfmt.Printf(\"创建系统日志失败: %v\\n\", err)\n\t\t}\n\t}()\n}\n\n// LogEntityChange 记录实体变更日志\n// entityType: 实体类型(用户/分组等), action: 操作类型(创建/更新/删除), eid: 企业ID, userId: 操作用户ID, nickname: 操作用户昵称,\n// module: 模块类型, oldEntity: 旧实体, newEntity: 新实体, ip: 操作IP, fieldMap: 字段映射关系\nfunc LogEntityChange(entityType string, action uint8, eid, userId int64, nickname string, module uint8, oldEntity, newEntity interface{}, ip string, fieldMap map[string]string) {\n\t// 使用反射比较实体差异\n\tcontent := generateChangeContent(entityType, action, oldEntity, newEntity, fieldMap)\n\tif content == \"\" {\n\t\treturn\n\t}\n\n\tlog := &SystemLog{\n\t\tEid:      eid,\n\t\tUserID:   userId,\n\t\tNickname: nickname,\n\t\tModule:   module,\n\t\tAction:   action,\n\t\tContent:  content,\n\t\tIP:       ip,\n\t}\n\n\tCreateSystemLog(log)\n}\n\n// generateChangeContent 生成变更内容描述\nfunc generateChangeContent(entityType string, action uint8, oldEntity, newEntity interface{}, fieldMap map[string]string) string {\n\tvar content string\n\n\tswitch action {\n\tcase SystemLogActionCreate:\n\t\tcontent = fmt.Sprintf(\"新增%s\", entityType)\n\tcase SystemLogActionDelete:\n\t\tcontent = fmt.Sprintf(\"删除%s\", entityType)\n\tcase SystemLogActionUpdate:\n\t\t// 比较新旧实体差异\n\t\tchanges := compareEntities(oldEntity, newEntity, fieldMap, entityType)\n\t\tif len(changes) == 0 {\n\t\t\treturn \"\"\n\t\t}\n\t\tcontent = fmt.Sprintf(\"编辑%s: %s\", entityType, strings.Join(changes, \"; \"))\n\t}\n\n\treturn content\n}\n\n// compareEntities 比较两个实体的差异\nfunc compareEntities(oldEntity, newEntity interface{}, fieldMap map[string]string, entityType string) []string {\n\tvar changes []string\n\n\toldVal := reflect.ValueOf(oldEntity)\n\tnewVal := reflect.ValueOf(newEntity)\n\n\t// 如果是指针，获取其指向的值\n\tif oldVal.Kind() == reflect.Ptr {\n\t\toldVal = oldVal.Elem()\n\t}\n\tif newVal.Kind() == reflect.Ptr {\n\t\tnewVal = newVal.Elem()\n\t}\n\n\t// 确保是结构体\n\tif oldVal.Kind() != reflect.Struct || newVal.Kind() != reflect.Struct {\n\t\treturn changes\n\t}\n\n\toldType := oldVal.Type()\n\n\t// 遍历结构体字段\n\tfor i := 0; i < oldVal.NumField(); i++ {\n\t\tfield := oldType.Field(i)\n\t\tfieldName := field.Name\n\n\t\t// 检查是否在字段映射中\n\t\tif displayName, ok := fieldMap[fieldName]; ok {\n\t\t\toldFieldVal := oldVal.Field(i).Interface()\n\t\t\tnewFieldVal := newVal.Field(i).Interface()\n\n\t\t\t// 比较字段值\n\t\t\tif !reflect.DeepEqual(oldFieldVal, newFieldVal) {\n\t\t\t\t// 处理密码特殊情况\n\t\t\t\tif fieldName == \"Password\" && newFieldVal != \"\" {\n\t\t\t\t\tchanges = append(changes, fmt.Sprintf(\"%s: ******\", displayName))\n\t\t\t\t} else if fieldName == \"ExpiredTime\" {\n\t\t\t\t\toldTime := time.UnixMilli(oldFieldVal.(int64))\n\t\t\t\t\tnewTime := time.UnixMilli(newFieldVal.(int64))\n\t\t\t\t\toldTimeStr := oldTime.Format(\"2006-01-02\")\n\t\t\t\t\tnewTimeStr := newTime.Format(\"2006-01-02\")\n\t\t\t\t\tchanges = append(changes, fmt.Sprintf(\"%s: %s→%s\", displayName, oldTimeStr, newTimeStr))\n\t\t\t\t} else if fieldName == \"Type\" {\n\t\t\t\t\tif entityType == \"entityType\" {\n\t\t\t\t\t\tchanges = append(changes, fmt.Sprintf(\"%s: %v→%v\", displayName, GetEnterpriseTypeDescription(oldFieldVal.(string)), GetEnterpriseTypeDescription(newFieldVal.(string))))\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfieldChangeMap := map[string]string{\n\t\t\t\t\t\t\"GroupId\": \"修改了分组\",\n\t\t\t\t\t\t\"Avatar\":  \"修改了头像\",\n\t\t\t\t\t}\n\t\t\t\t\tif desc, ok := fieldChangeMap[fieldName]; ok {\n\t\t\t\t\t\tchanges = append(changes, desc)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchanges = append(changes, fmt.Sprintf(\"%s: %v→%v\", displayName, oldFieldVal, newFieldVal))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn changes\n}\n\n// ModuleItem 模块常量项\ntype ModuleItem struct {\n\tValue uint8  `json:\"value\"`\n\tText  string `json:\"text\"`\n}\n\n// moduleTextMap 模块常量到文本的映射\nvar moduleTextMap = map[uint8]string{\n\tSystemLogModuleSystem:       \"系统\",\n\tSystemLogModuleAgent:        \"智能体\",\n\tSystemLogModulePrompt:       \"提示词\",\n\tSystemLogModuleAITool:       \"AI工具\",\n\tSystemLogModuleOrder:        \"订单数据\",\n\tSystemLogModuleRegistered:   \"注册用户\",\n\tSystemLogModuleInternalUser: \"内部用户\",\n\tSystemLogModuleSubscription: \"订阅设置\",\n\tSystemLogModuleAdmin:        \"管理员\",\n\tSystemLogModuleTemplate:     \"模板风格\",\n\tSystemLogModuleBanner:       \"Banner图\",\n\tSystemLogModuleNavigation:   \"导航管理\",\n\tSystemLogModuleSiteInfo:     \"站点信息\",\n\tSystemLogModulePlatform:     \"平台接入\",\n\tSystemLogModulePayment:      \"支付配置\",\n\tSystemLogModuleDomain:       \"站点域名\",\n\tSystemLogModuleStatistics:   \"三方统计\",\n}\n\n// GetAllModules 获取所有模块定义\nfunc GetAllModules() []ModuleItem {\n\tmodules := make([]ModuleItem, 0, len(moduleTextMap))\n\tfor value, text := range moduleTextMap {\n\t\tmodules = append(modules, ModuleItem{Value: value, Text: text})\n\t}\n\treturn modules\n}\n\n// GetModuleText 通过常量获取模块文本\nfunc GetModuleText(value uint8) string {\n\treturn moduleTextMap[value]\n}\n\n// ActionItem 动作常量项\ntype ActionItem struct {\n\tValue uint8  `json:\"value\"`\n\tText  string `json:\"text\"`\n}\n\n// GetAllActions 获取所有动作定义\n// actionTextMap 操作常量到文本的映射\nvar actionTextMap = map[uint8]string{\n\tSystemLogActionCreate:   \"新建\",\n\tSystemLogActionUpdate:   \"编辑\",\n\tSystemLogActionDelete:   \"删除\",\n\tSystemLogActionToggle:   \"启用/停用\",\n\tSystemLogActionLoginOut: \"登录/退出\",\n}\n\n// GetAllActions 获取所有操作定义\nfunc GetAllActions() []ActionItem {\n\tactions := make([]ActionItem, 0, len(actionTextMap))\n\tfor value, text := range actionTextMap {\n\t\tactions = append(actions, ActionItem{Value: value, Text: text})\n\t}\n\treturn actions\n}\n\n// GetActionText 通过常量获取操作文本\nfunc GetActionText(value uint8) string {\n\treturn actionTextMap[value]\n}\n"
  },
  {
    "path": "api/model/upload_file.go",
    "content": "package model\n\nimport (\n\t\"crypto/md5\"\n\t\"fmt\"\n\t\"path\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/common/storage\"\n\t\"github.com/53AI/53AIHub/config\"\n)\n\ntype UploadFile struct {\n\tID         int64  `json:\"id\" gorm:\"primaryKey;autoIncrement\"`\n\tFileName   string `json:\"file_name\" gorm:\"not null;type:varchar(512);default:''\"`\n\tKey        string `json:\"key\" gorm:\"not null;type:varchar(512)\"`\n\tEid        int64  `json:\"eid\" gorm:\"not null;index\" example:\"1\"`\n\tUserID     int64  `json:\"user_id\" gorm:\"not null;index\" example:\"1\"`\n\tSize       int64  `json:\"size\" gorm:\"not null;default:0\" example:\"0\"`\n\tExtension  string `json:\"extension\" gorm:\"not null;type:varchar(50);default:''\" example:\"\"`\n\tMimeType   string `json:\"mime_type\" gorm:\"not null;type:varchar(50);default:''\" example:\"\"`\n\tHash       string `json:\"hash\" gorm:\"not null;type:varchar(512);default:''\" example:\"\"`\n\tPreviewKey string `json:\"preview_key\" gorm:\"not null;type:varchar(100);index;default:''\" example:\"\"`\n\tBaseModel\n}\n\nfunc GetFileKey(fileName string, Eid int64, UserId int64) string {\n\teidStr := strconv.FormatInt(Eid, 10)\n\tuserIdStr := strconv.FormatInt(UserId, 10)\n\n\treturn storage.StorageInstance.GetBasePath() + \"/\" + path.Join(eidStr, userIdStr, fileName)\n}\n\nfunc (uploadFile *UploadFile) Save() error {\n\tvar oldUploadFile UploadFile\n\tif err := DB.Where(\"eid =? AND user_id =? AND hash =?\", uploadFile.Eid, uploadFile.UserID, uploadFile.Hash).First(&oldUploadFile).Error; err != nil {\n\t\tif err.Error() == \"record not found\" {\n\t\t\tresult := DB.Create(uploadFile)\n\t\t\tif result.Error != nil {\n\t\t\t\treturn result.Error\n\t\t\t}\n\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\tresult := DB.Model(&oldUploadFile).Updates(uploadFile)\n\tif result.Error != nil {\n\t\treturn result.Error\n\t}\n\t*uploadFile = oldUploadFile\n\treturn nil\n}\n\nfunc GetPreviewKey(hashStr string, extension string) (string, error) {\n\t// md5 hash str + extension\n\tcombined := hashStr\n\thash := md5.Sum([]byte(combined))\n\treturn fmt.Sprintf(\"%x\", hash) + extension, nil\n}\n\nfunc GetUploadFileByEidAndPreviewKey(Eid int64, PreviewKey string) (uploadFile UploadFile, err error) {\n\tif len(PreviewKey) > 0 && PreviewKey[0] == '/' {\n\t\tPreviewKey = PreviewKey[1:]\n\t}\n\terr = DB.Model(&UploadFile{}).Where(\"eid =? AND `preview_key` =?\", Eid, PreviewKey).First(&uploadFile).Error\n\treturn uploadFile, err\n}\n\nfunc GetNoAuthUploadFileByEidAndPreviewKey(PreviewKey string) (uploadFile UploadFile, err error) {\n\tif len(PreviewKey) > 0 && PreviewKey[0] == '/' {\n\t\tPreviewKey = PreviewKey[1:]\n\t}\n\terr = DB.Model(&UploadFile{}).Where(\"`preview_key` =?\", PreviewKey).First(&uploadFile).Error\n\treturn uploadFile, err\n}\n\nfunc GetUploadFileByID(id int64) (uploadFile *UploadFile, err error) {\n\terr = DB.Model(&UploadFile{}).Where(\"id =?\", id).First(&uploadFile).Error\n\treturn uploadFile, err\n}\n\nfunc (uploadFile *UploadFile) GetChannelFileMapping(channelId int, model string) *ChannelFileMapping {\n\tvar channelFileMapping ChannelFileMapping\n\terr := DB.Model(&ChannelFileMapping{}).Where(\"channel_id =? AND file_id =? AND model =?\", channelId, uploadFile.ID, model).First(&channelFileMapping).Error\n\tif err != nil {\n\t\treturn nil\n\t}\n\treturn &channelFileMapping\n}\n\nfunc (uploadFile *UploadFile) GetPreviewFullUrl() string {\n\tif uploadFile.PreviewKey == \"\" {\n\t\treturn \"\"\n\t}\n\n\treturn config.GetApiHost() + \"api/preview/\" + uploadFile.PreviewKey\n}\n"
  },
  {
    "path": "api/model/user.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n\t\"github.com/53AI/53AIHub/common/utils/jwt\"\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype User struct {\n\tUserID         int64           `json:\"user_id\" gorm:\"primaryKey;autoIncrement\"`\n\tUsername       string          `json:\"username\" gorm:\"not null;index\" binding:\"required\" example:\"john_doe\"`\n\tNickname       string          `json:\"nickname\" gorm:\"not null\" example:\"John Doe\"`\n\tAvatar         string          `json:\"avatar\" gorm:\"not null\" example:\"http://avatar.cc/a.jpg\"`\n\tMobile         string          `json:\"mobile\" gorm:\"size:20\" example:\"13800138000\"`\n\tEmail          string          `json:\"email\" gorm:\"size:100\" example:\"john@example.com\"`\n\tEid            int64           `json:\"eid\" gorm:\"not null;index\" example:\"123\"`\n\tRole           int64           `json:\"role\" gorm:\"type:int;default:1;not null\" example:\"1\"`\n\tGroupId        int64           `json:\"group_id\" gorm:\"type:int;default:0;not null\" example:\"0\"`\n\tStatus         int             `json:\"status\" gorm:\"type:int;default:1;not null;comment:'User status: 0-Not joined, 1-Joined, 2-Disabled'\" example:\"1\"`\n\tPassword       string          `json:\"-\" gorm:\"not null;default:''\"`\n\tSalt           string          `json:\"-\" gorm:\"size:10;not null\"`\n\tExpiredTime    int64           `json:\"expired_time\" gorm:\"not null\" example:\"1672502400\"`\n\tLastLoginTime  int64           `json:\"last_login_time\" gorm:\"not null\" example:\"1672502400\"`\n\tAccessToken    string          `json:\"access_token\" gorm:\"type:varchar(512);column:access_token\"`\n\tRelatedId      int64           `json:\"related_id\" gorm:\"type:int;default:0;not null;index:idx_users_related_id\" example:\"0\"`\n\tType           int             `json:\"type\" gorm:\"type:int;default:1;not null;comment:'User type: 1-Registered user, 2-Internal user'\" example:\"1\"`\n\tAddAdminTime   int64           `json:\"add_admin_time\" gorm:\"type:bigint;default:0;not null;comment:'Time when user was added as admin'\" example:\"1672502400\"`\n\tOpenID         string          `json:\"openid\" gorm:\"type:varchar(512);column:openid\"`\n\tUnionID        string          `json:\"unionid\" gorm:\"type:varchar(512);column:unionid\"`\n\tDepartments    []Department    `json:\"departments\" gorm:\"-\"`\n\tMemberBindings []MemberBinding `json:\"memberbindings\" gorm:\"-\"`\n\tGroupIds       []int64         `json:\"group_ids\" gorm:\"-\"`\n\tBaseModel\n}\n\nconst (\n\tRoleGuestUser   = 0\n\tRoleCommonUser  = 1\n\tRoleAdminUser   = 10\n\tRoleCreatorUser = 10000\n\tRoleRootUser    = 100000\n\n\tUserStatusNotJoined = 0 // Not joined\n\tUserStatusJoined    = 1 // Joined\n\tUserStatusDisabled  = 2 // Disabled\n\n\tUserTypeRegistered = 1 // Registered user\n\tUserTypeInternal   = 2 // Internal user\n)\n\nfunc (user *User) Create() error {\n\tvar err error\n\tif user.Eid == 0 {\n\t\treturn errors.New(\"eid is empty\")\n\t}\n\t// check if username exists\n\tvar count int64\n\t// DB.Model(&User{}).Where(\"eid = ? AND username = ?\", user.Eid, user.Username).Count(&count)\n\t// if count > 0 {\n\t// \treturn errors.New(\"username already exists\")\n\t// }\n\n\tif user.Mobile != \"\" {\n\t\t// check if mobile exists\n\t\tDB.Model(&User{}).Where(\"eid =? AND mobile =?\", user.Eid, user.Mobile).Count(&count)\n\t\tif count > 0 {\n\t\t\treturn errors.New(\"mobile already exists\")\n\t\t}\n\t}\n\n\tif user.Email != \"\" {\n\t\t// check if email exists\n\t\tDB.Model(&User{}).Where(\"eid =? AND email =?\", user.Eid, user.Email).Count(&count)\n\t\tif count > 0 {\n\t\t\treturn errors.New(\"email already exists\")\n\t\t}\n\t}\n\n\tif user.Salt == \"\" {\n\t\tuser.Salt = helper.RandomString(6)\n\t}\n\tif user.Password != \"\" {\n\t\tuser.Password, err = helper.PasswordHash(user.Password, user.Salt)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\treturn errors.New(\"password is empty\")\n\t}\n\n\tresult := DB.Create(user)\n\tif result.Error != nil {\n\t\treturn result.Error\n\t}\n\n\tuser.AccessToken, err = jwt.UserGenerateJWT(user.UserID, user.Eid)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = DB.Model(user).Updates(user).Error\n\n\treturn err\n}\n\nfunc (user *User) Update(updatePassword bool) error {\n\tupdateMap := map[string]interface{}{\n\t\t\"nickname\":     user.Nickname,\n\t\t\"avatar\":       user.Avatar,\n\t\t\"mobile\":       user.Mobile,\n\t\t\"email\":        user.Email,\n\t\t\"group_id\":     user.GroupId,\n\t\t\"expired_time\": user.ExpiredTime,\n\t\t\"status\":       user.Status,\n\t\t\"role\":         user.Role,\n\t\t\"openid\":       user.OpenID,\n\t\t\"unionid\":      user.UnionID,\n\t}\n\n\tif updatePassword && user.Password != \"\" {\n\t\tvar err error\n\t\tuser.Password, err = helper.PasswordHash(user.Password, user.Salt)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tupdateMap[\"password\"] = user.Password\n\t}\n\n\treturn DB.Model(user).Updates(updateMap).Error\n}\n\nfunc (user *User) Delete() error {\n\terr := DB.Delete(user).Error\n\treturn err\n}\n\nfunc GetUserByID(userID int64) (*User, error) {\n\tvar user User\n\terr := DB.First(&user, userID).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &user, nil\n}\n\nfunc (user *User) LoginValidate(eid int64, username string, password string) error {\n\tif username == \"\" || password == \"\" {\n\t\treturn errors.New(\"username or password is empty\")\n\t}\n\n\tfoundUser, err := GetUserByUserName(eid, username)\n\tif err != nil {\n\t\treturn errors.New(\"user not found\")\n\t}\n\t*user = *foundUser\n\n\tpassword, err = helper.PasswordHash(password, user.Salt)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif user.Password != password {\n\t\treturn errors.New(\"username or password is incorrect\")\n\t}\n\n\treturn nil\n}\n\nfunc GetUserByUserName(eid int64, username string) (*User, error) {\n\tvar user User\n\terr := DB.Where(\"eid = ? AND username = ?\", eid, username).First(&user).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &user, nil\n}\n\nfunc (user *User) RefreshAccessToken() error {\n\tvar err error\n\tuser.AccessToken, err = jwt.UserGenerateJWT(user.UserID, user.Eid)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// 内部成员登录默认改为加入\n\tif user.Type == UserTypeInternal && user.Status == UserStatusNotJoined {\n\t\tuser.Status = UserStatusJoined\n\t}\n\n\tuser.LastLoginTime = time.Now().UTC().UnixMilli()\n\terr = DB.Model(user).Updates(user).Error\n\treturn err\n}\n\nfunc (user *User) UpdateStatusToJoin() error {\n\tvar err error\n\tif user.Status == UserStatusNotJoined {\n\t\tuser.Status = UserStatusJoined\n\t\terr = DB.Model(user).Updates(user).Error\n\t}\n\treturn err\n}\n\nfunc ValidateAccessToken(token string) (user *User) {\n\tif token == \"\" {\n\t\treturn nil\n\t}\n\tuser = &User{}\n\tif DB.Where(\"access_token = ?\", token).First(user).RowsAffected == 1 {\n\t\treturn user\n\t}\n\treturn nil\n}\n\nfunc GetUserList(eid int64, keyword string, group_id int64, offset int, limit int) (count int64, users []*User, err error) {\n\tdb := DB.Model(&User{}).Omit(\"password\", \"access_token\").Where(\"eid = ?\", eid)\n\tif keyword != \"\" {\n\t\tdb = db.Where(\"username LIKE ? OR nickname LIKE ? OR mobile LIKE ? OR email LIKE ?\",\n\t\t\tkeyword+\"%\", keyword+\"%\", keyword+\"%\", keyword+\"%\")\n\t}\n\n\tif group_id != 0 {\n\t\tdb = db.Where(\"group_id =?\", group_id)\n\t}\n\n\tdb.Count(&count)\n\n\terr = db.Offset(offset).Limit(limit).Find(&users).Error\n\n\treturn count, users, err\n}\n\nfunc DeleteUser(eid int64, user_id int64) error {\n\tvar user User\n\tif err := DB.Where(\"eid = ? AND user_id = ?\", eid, user_id).First(&user).Error; err != nil {\n\t\treturn err\n\t}\n\n\ttx := DB.Begin()\n\tif tx.Error != nil {\n\t\treturn tx.Error\n\t}\n\n\tif user.Type == UserTypeInternal {\n\t\tvar binds []*MemberBinding\n\t\ttx.Where(\"eid = ? AND mid = ?\", eid, user_id).Find(&binds)\n\t\tif len(binds) > 0 {\n\t\t\tfor _, bind := range binds {\n\t\t\t\tif bind.From == DepartmentFromBackend {\n\t\t\t\t\terr := tx.Where(\"eid = ? AND bid = ? AND `from` = ? \", eid, bind.ID, DepartmentFromBackend).Delete(&MemberDepartmentRelation{}).Error\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\ttx.Rollback()\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\ttx.Where(\"eid = ? AND id = ?\", eid, bind.ID).Delete(&MemberBinding{})\n\t\t\t\t} else if bind.From == DepartmentFromWecom {\n\t\t\t\t\terr := tx.Model(&MemberBinding{}).Where(\"eid = ? AND id = ?\", eid, bind.ID).Updates(\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"mid\":    0,\n\t\t\t\t\t\t\t\"status\": MemberBindingStatusInactive,\n\t\t\t\t\t\t}).Error\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\ttx.Rollback()\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif err := tx.Where(\"eid = ? AND user_id = ?\", eid, user_id).Delete(&User{}).Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn err\n\t}\n\n\treturn tx.Commit().Error\n}\n\nfunc UpdateUserPassword(eid int64, userID int64, newPassword string) error {\n\tvar user User\n\tif err := DB.Where(\"user_id = ? AND eid = ?\", userID, eid).First(&user).Error; err != nil {\n\t\treturn err\n\t}\n\n\tif user.Password != \"\" {\n\t\tuser.Password, _ = helper.PasswordHash(newPassword, user.Salt)\n\t}\n\n\treturn DB.Model(&user).Update(\"password\", user.Password).Error\n}\n\n// UpdateAllUsersPasswordByRelatedID updates password for all enterprise users whose related_id equals the platform UserID.\n// It re-hashes the newPassword with each enterprise user's own salt.\nfunc UpdateAllUsersPasswordByRelatedID(relatedId int64, newSalt string, hashedPassword string) error {\n\tif relatedId <= 0 {\n\t\treturn errors.New(\"invalid relatedId\")\n\t}\n\t// 批量更新所有 related_id 命中的记录的 salt 与 password\n\treturn DB.Model(&User{}).\n\t\tWhere(\"related_id = ?\", relatedId).\n\t\tUpdates(map[string]interface{}{\n\t\t\t\"salt\":     newSalt,\n\t\t\t\"password\": hashedPassword,\n\t\t}).Error\n}\n\nfunc GetUserByEmail(eid int64, email string) (User, error) {\n\tvar user User\n\terr := DB.Where(\"eid = ? AND email = ?\", eid, email).First(&user).Error\n\treturn user, err\n}\n\nfunc GetUserByMobile(eid int64, mobile string) (User, error) {\n\tvar user User\n\terr := DB.Where(\"eid = ? AND mobile = ?\", eid, mobile).First(&user).Error\n\treturn user, err\n}\n\nfunc (user *User) VerifyPassword(password string) error {\n\thashedPassword, err := helper.PasswordHash(password, user.Salt)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif hashedPassword != user.Password {\n\t\treturn errors.New(\"username or password is incorrect\")\n\t}\n\treturn nil\n}\n\n// GetUserByRelatedId retrieves a user by related ID\nfunc GetUserByRelatedId(eid int64, relatedId int64) (*User, error) {\n\tvar user User\n\terr := DB.Where(\"eid = ? AND related_id = ?\", eid, relatedId).First(&user).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &user, nil\n}\n\nfunc GetFirstUserByRelatedId(relatedId int64) (*User, error) {\n\tvar user User\n\terr := DB.Where(\"related_id = ?\", relatedId).First(&user).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &user, nil\n}\n\n// GetUserListWithRoles retrieves user list with role filtering\nfunc GetUserListWithRoles(eid int64, keyword string, groupId int64, roleStr string, userType int64, rangeBy string, timeStart, timeEnd int64, offset, limit int) (int64, []*User, error) {\n\tvar users []*User\n\tquery := DB.Model(&User{}).Where(\"eid = ?\", eid)\n\n\tif userType != 0 {\n\t\tquery = query.Where(\"type =?\", userType)\n\t}\n\n\t// Process keyword search\n\tif keyword != \"\" {\n\t\tquery = query.Where(\"nickname LIKE ? OR mobile LIKE ? OR email LIKE ?\", \"%\"+keyword+\"%\", \"%\"+keyword+\"%\", \"%\"+keyword+\"%\")\n\t}\n\n\t// Process user group filtering\n\tif groupId > 0 {\n\t\tquery = query.Where(\"group_id = ?\", groupId)\n\t}\n\n\t// Process role filtering\n\tif roleStr != \"\" {\n\t\t// Convert comma-separated role string to integer slice\n\t\troleStrs := strings.Split(roleStr, \",\")\n\t\tvar roles []int\n\t\tfor _, r := range roleStrs {\n\t\t\tif roleInt, err := strconv.Atoi(strings.TrimSpace(r)); err == nil {\n\t\t\t\troles = append(roles, roleInt)\n\t\t\t}\n\t\t}\n\n\t\tif len(roles) > 0 {\n\t\t\tquery = query.Where(\"role IN ?\", roles)\n\t\t}\n\t}\n\n\tif timeStart > 0 {\n\t\tquery = query.Where(fmt.Sprintf(\"%s >= ?\", rangeBy), timeStart)\n\t}\n\n\tif timeEnd > 0 {\n\t\tquery = query.Where(fmt.Sprintf(\"%s <= ?\", rangeBy), timeEnd)\n\t}\n\n\t// Get total count\n\tvar count int64\n\tif err := query.Count(&count).Error; err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\t// Get paginated data\n\tif err := query.Offset(offset).Limit(limit).Find(&users).Error; err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\treturn count, users, nil\n}\n\n// IsUserExistsByAccount checks if a user exists by account (email or mobile)\nfunc IsUserExistsByAccount(eid int64, account string) (bool, error) {\n\tvar count int64\n\n\t// Check if the account is an email or mobile\n\tisEmail := helper.IsValidEmail(account)\n\tisMobile := helper.IsValidPhone(account)\n\n\tquery := DB.Model(&User{}).Where(\"eid = ?\", eid)\n\n\tif isEmail {\n\t\t// Check by email\n\t\tquery = query.Where(\"email = ?\", account)\n\t} else if isMobile {\n\t\t// Check by mobile\n\t\tquery = query.Where(\"mobile = ?\", account)\n\t} else {\n\t\t// Check by username\n\t\tquery = query.Where(\"username = ?\", account)\n\t}\n\n\terr := query.Count(&count).Error\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn count > 0, nil\n}\n\n// LoadDepartments 加载用户关联的部门信息\nfunc (u *User) LoadDepartments(from int) error {\n\tvar departments []Department\n\terr := DB.Table(\"departments\").\n\t\tJoins(\"JOIN member_department_relations ON departments.did = member_department_relations.did AND member_department_relations.eid = departments.eid\").\n\t\tJoins(\"JOIN member_bindings ON member_department_relations.bid = member_bindings.id AND member_bindings.eid = departments.eid AND member_bindings.`from` = member_department_relations.`from`\").\n\t\tWhere(\"member_bindings.mid = ? AND departments.eid = ? AND member_department_relations.`from` = ?\",\n\t\t\tu.UserID, u.Eid, from).Find(&departments).Error\n\n\tif err == nil && len(departments) > 0 {\n\t\tu.Departments = departments\n\t}\n\treturn err\n}\n\nfunc (u *User) LoadMemberBindings(from int) error {\n\tvar memberBindings []MemberBinding\n\tif u.UserID == 0 {\n\t\treturn nil\n\t}\n\terr := DB.Where(\"mid = ? AND eid = ? AND `from`=?\", u.UserID, u.Eid, from).\n\t\tFind(&memberBindings).Error\n\tif err == nil && len(memberBindings) > 0 {\n\t\tu.MemberBindings = memberBindings\n\t}\n\treturn err\n}\n\nfunc (u *User) LoadUserInfo(from int) {\n\t_ = u.LoadDepartments(from)\n\t_ = u.LoadMemberBindings(from)\n\t_ = u.LoadGroupIds()\n}\n\nfunc (u *User) GetUserGroupIds() ([]int64, error) {\n\tswitch u.Type {\n\tcase UserTypeRegistered:\n\t\treturn []int64{u.GroupId}, nil\n\tcase UserTypeInternal:\n\t\tvar groupIDs, userGroupIds []int64\n\t\terr := DB.Model(&ResourcePermission{}).Where(\"resource_type = ? AND resource_id = ?\", ResourceTypeUser, u.UserID).Pluck(\"group_id\", &userGroupIds).Error\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar dids []int64\n\t\terr = DB.Model(&MemberDepartmentRelation{}).Where(\"eid = ? AND bid = ?\", u.Eid, u.UserID).Pluck(\"did\", &dids).Error\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tdepartmentGroupIds, err := GetGroupIDsByDepartmentIDs(dids)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tgroupIDs = append(userGroupIds, departmentGroupIds...)\n\t\treturn groupIDs, nil\n\t}\n\treturn []int64{}, nil\n}\n\nfunc (u *User) LoadGroupIds() error {\n\tgroupIDs, err := u.GetUserGroupIds()\n\tif err != nil {\n\t\treturn err\n\t}\n\tu.GroupIds = groupIDs\n\tif u.Type == UserTypeInternal && u.GroupId > 0 {\n\t\tu.GroupIds = append(u.GroupIds, u.GroupId)\n\t}\n\treturn nil\n}\n\nfunc GetLoginUser(c *gin.Context) (*User, error) {\n\tauthHeader := c.GetHeader(\"Authorization\")\n\tauthHeader = strings.Replace(authHeader, \"Bearer \", \"\", 1)\n\n\tif authHeader != \"\" {\n\t\tuser := ValidateAccessToken(authHeader)\n\t\tif user != nil {\n\t\t\treturn user, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"user not found\")\n}\n\n// GetUserByOpenId 根据OpenID获取用户\nfunc GetUserByOpenId(openId string, eid int64) (*User, error) {\n\tvar user User\n\tif err := DB.Where(\"openid = ? and eid = ?\", openId, eid).First(&user).Error; err != nil {\n\t\treturn nil, err\n\t}\n\treturn &user, nil\n}\n\nfunc GetUserByUnionId(unionId string, eid int64) (*User, error) {\n\tvar user User\n\tif err := DB.Where(\"unionid = ? and eid = ?\", unionId, eid).First(&user).Error; err != nil {\n\t\treturn nil, err\n\t}\n\treturn &user, nil\n}\n\nfunc GetFirstUserByUnionId(unionId string) (*User, error) {\n\tvar user User\n\tif err := DB.Where(\"unionid = ?\", unionId).First(&user).Error; err != nil {\n\t\treturn nil, err\n\t}\n\treturn &user, nil\n}\n\n// IsOpenIdExists 检查OpenID是否已存在\nfunc IsOpenIdExists(openId string) (bool, error) {\n\tvar count int64\n\tif err := DB.Model(&User{}).Where(\"openid = ?\", openId).Count(&count).Error; err != nil {\n\t\treturn false, err\n\t}\n\treturn count > 0, nil\n}\n\nfunc GetUserCountByEIDAndType(eid int64, theType int) (int64, error) {\n\tvar count int64\n\tif err := DB.Model(&User{}).Where(\"eid =? and type = ?\", eid, theType).Count(&count).Error; err != nil {\n\t\treturn 0, err\n\t}\n\treturn count, nil\n}\n\n// InvalidateAccessToken 使用户的访问令牌失效\nfunc (user *User) InvalidateAccessToken() error {\n\t// 清空用户的访问令牌\n\tuser.AccessToken = \"\"\n\t// 更新数据库中的用户记录\n\treturn DB.Model(user).Update(\"access_token\", \"\").Error\n}\n\nfunc IsAdmin(role int64) bool {\n\treturn role >= RoleAdminUser\n}"
  },
  {
    "path": "api/model/verification_code.go",
    "content": "package model\n\n// VerificationCode 验证码数据表\n// @Description 存储手机号/邮箱验证码及发送次数等信息\ntype VerificationCode struct {\n\tID         int64  `json:\"id\" gorm:\"primaryKey;autoIncrement;comment:主键ID\"`\n\tType       string `json:\"type\" gorm:\"type:varchar(20);not null;comment:验证码类型（phone/email）\"` // 验证码类型（phone/email）\n\tTarget     string `json:\"target\" gorm:\"type:varchar(50);not null;comment:验证目标（手机号/邮箱）\"`     // 验证目标（手机号/邮箱）\n\tCode       string `json:\"code\" gorm:\"type:varchar(10);not null;comment:验证码\"`                // 验证码\n\tExpiresAt  int64  `json:\"expires_at\" gorm:\"not null;comment:过期时间戳（毫秒）\"`                     // 过期时间戳（毫秒）\n\tDailyCount int    `json:\"daily_count\" gorm:\"not null;default:1;comment:本日发送次数\"`             // 本日发送次数\n\tBaseModel\n}\n\nconst (\n\tVerificationCodeTypePhone = \"phone\"\n\tVerificationCodeTypeEmail = \"email\"\n)\n\n// TableName 指定表名\nfunc (VerificationCode) TableName() string {\n\treturn \"verification_codes\"\n}\n"
  },
  {
    "path": "api/model/wecom_corp.go",
    "content": "package model\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\n\t\"gorm.io/gorm\"\n)\n\ntype WecomCorp struct {\n\tCorpID                string `json:\"corp_id\" gorm:\"primaryKey;type:varchar(64)\"`\n\tSuiteID               string `json:\"suite_id\" gorm:\"type:varchar(32);index;not null\"`\n\tName                  string `json:\"name\" gorm:\"type:varchar(255);not null\"`\n\tType                  string `json:\"type\" gorm:\"type:varchar(50)\"`\n\tAccessToken           string `json:\"access_token\" gorm:\"type:varchar(255)\"`\n\tExpiresIn             int    `json:\"expires_in\" gorm:\"type:int\"`\n\tTokenUpdateTime       int64  `json:\"token_update_time\" gorm:\"type:bigint\"`\n\tPermanentCode         string `json:\"permanent_code\" gorm:\"type:varchar(255)\"`\n\tRoundLogoURL          string `json:\"round_logo_url\" gorm:\"type:varchar(1000)\"`\n\tSquareLogoURL         string `json:\"square_logo_url\" gorm:\"type:varchar(1000)\"`\n\tUserMax               int    `json:\"user_max\" gorm:\"type:int\"`\n\tAgentMax              int    `json:\"agent_max\" gorm:\"type:int\"`\n\tAgents                string `json:\"agents\" gorm:\"type:text\"`\n\tDepartments           string `json:\"departments\" gorm:\"type:text\"`\n\tStatus                int    `json:\"status\" gorm:\"type:int;default:0\"`\n\tWxQrcode              string `json:\"wx_qrcode\" gorm:\"type:varchar(1000)\"`\n\tSyncAgents            string `json:\"sync_agents\" gorm:\"type:varchar(1000)\"`\n\tAuthor                string `json:\"author\" gorm:\"type:text\"`\n\tCorpInfo              string `json:\"corp_info\" gorm:\"type:text\"`\n\tAppID                 string `json:\"appid\" gorm:\"type:varchar(255)\"`\n\tCorpTicket            string `json:\"corp_ticket\" gorm:\"type:varchar(255)\"`\n\tCorpTicketUpdateTime  int64  `json:\"corp_ticket_update_time\" gorm:\"type:bigint\"`\n\tAgentTicket           string `json:\"agent_ticket\" gorm:\"type:varchar(255)\"`\n\tAgentTicketUpdateTime int64  `json:\"agent_ticket_update_time\" gorm:\"type:bigint\"`\n\tCorpTicketExpiresIn   int    `json:\"corp_ticket_expires_in\" gorm:\"type:int\"`\n\tAgentTicketExpiresIn  int    `json:\"agent_ticket_expires_in\" gorm:\"type:int\"`\n\tIsSetChatMenu         int    `json:\"is_set_chat_menu\" gorm:\"type:int;default:0\"`\n\tBaseModel\n}\n\ntype AuthCorpInfo struct {\n\tCorpID            string `json:\"corpid\"`\n\tCorpName          string `json:\"corp_name\"`\n\tCorpType          string `json:\"corp_type\"`\n\tCorpSquareLogoURL string `json:\"corp_square_logo_url\"`\n\tCorpUserMax       int    `json:\"corp_user_max\"`\n}\n\ntype AuthUserInfo struct {\n\tUserID     string `json:\"userid\"`\n\tOpenUserID string `json:\"open_userid\"`\n\tName       string `json:\"name\"`\n\tAvatar     string `json:\"avatar\"`\n}\n\ntype AgentItem struct {\n\tAgentID         int       `json:\"agentid\"`\n\tAuthMode        int       `json:\"auth_mode\"`\n\tIsCustomizedApp bool      `json:\"is_customized_app\"`\n\tName            string    `json:\"name\"`\n\tPrivilege       Privilege `json:\"privilege\"`\n\tSquareLogoURL   string    `json:\"square_logo_url\"`\n}\n\ntype Privilege struct {\n\tAllowParty []int    `json:\"allow_party\"` // 修改为int类型\n\tAllowTag   []string `json:\"allow_tag\"`\n\tAllowUser  []string `json:\"allow_user\"`\n\tExtraParty []int    `json:\"extra_party\"` // 修改为int类型\n\tExtraTag   []string `json:\"extra_tag\"`\n\tExtraUser  []string `json:\"extra_user\"`\n\tLevel      int      `json:\"level\"`\n}\n\nfunc GetWecomCorp(suiteID string, corpID string) (*WecomCorp, error) {\n\tif corpID == \"\" {\n\t\treturn nil, errors.New(\"corp_id is empty\")\n\t}\n\tmodel := &WecomCorp{}\n\terr := DB.Where(\"suite_id = ? AND corp_id = ?\", suiteID, corpID).First(model).Error\n\tif err != nil {\n\t\tif errors.Is(err, gorm.ErrRecordNotFound) {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn model, nil\n}\n\nfunc CreateWecomCorp(corp *WecomCorp) error {\n\terr := DB.Create(corp).Error\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc UpdateWecomCorp(corp *WecomCorp) error {\n\terr := DB.Save(corp).Error\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (w *WecomCorp) GetWecomAuthUserInfo() *AuthUserInfo {\n\tvar authInfo AuthUserInfo\n\tif err := json.Unmarshal([]byte(w.Author), &authInfo); err != nil {\n\t\treturn nil\n\t}\n\treturn &authInfo\n}\n\nfunc (w *WecomCorp) Delete() error {\n\treturn DB.Delete(w).Error\n}\n\nfunc (w *WecomCorp) GetAgents() []AgentItem {\n\tvar agents []AgentItem\n\tif err := json.Unmarshal([]byte(w.Agents), &agents); err != nil {\n\t\treturn nil\n\t}\n\treturn agents\n}\n\nfunc (w *WecomCorp) GetAgentID() int {\n\tagents := w.GetAgents()\n\tif len(agents) > 0 {\n\t\treturn agents[0].AgentID\n\t}\n\treturn 0\n}\n\nfunc (w *WecomCorp) GetAuthCorpInfo() *AuthCorpInfo {\n\tvar authCorpInfo AuthCorpInfo\n\tif err := json.Unmarshal([]byte(w.CorpInfo), &authCorpInfo); err != nil {\n\t\treturn nil\n\t}\n\treturn &authCorpInfo\n}\n"
  },
  {
    "path": "api/model/wecom_suite.go",
    "content": "package model\n\nimport (\n\t\"errors\"\n)\n\ntype WecomSuite struct {\n\tSuiteID                 string `json:\"suite_id\" gorm:\"primaryKey;type:varchar(32)\"`\n\tSecret                  string `json:\"secret\" gorm:\"type:varchar(255);not null\"`\n\tTicket                  string `json:\"ticket\" gorm:\"type:varchar(255)\"`\n\tTicketUpdateTime        int64  `json:\"ticket_update_time\" gorm:\"type:bigint\"`\n\tAccessToken             string `json:\"access_token\" gorm:\"type:varchar(255)\"`\n\tExpiresIn               int    `json:\"expires_in\" gorm:\"type:int\"`\n\tTokenUpdateTime         int64  `json:\"token_update_time\" gorm:\"type:bigint\"`\n\tAuths                   int    `json:\"auths\" gorm:\"type:int;default:0\"`\n\tName                    string `json:\"name\" gorm:\"type:varchar(255);not null\"`\n\tDesc                    string `json:\"desc\" gorm:\"type:varchar(255)\"`\n\tToken                   string `json:\"token\" gorm:\"type:varchar(255);not null\"`\n\tEncodingAesKey          string `json:\"encoding_aes_key\" gorm:\"type:varchar(255);not null\"`\n\tAppInfo                 string `json:\"app_info\" gorm:\"type:text\"`\n\tProviderSecret          string `json:\"provider_secret\" gorm:\"type:varchar(255)\"`\n\tCorpID                  string `json:\"corp_id\" gorm:\"type:varchar(255);index\"`\n\tProviderToken           string `json:\"provider_token\" gorm:\"type:varchar(255)\"`\n\tProviderTokenUpdateTime int64  `json:\"provider_token_update_time\" gorm:\"type:bigint\"`\n\tProviderTokenExpiresIn  int    `json:\"provider_token_expires_in\" gorm:\"type:int\"`\n\tApp                     string `json:\"app\" gorm:\"type:varchar(255)\"`\n\tBaseModel\n}\n\nfunc GetWecomSuite(suiteID string) (*WecomSuite, error) {\n\tvar suite WecomSuite\n\terr := DB.Where(\"suite_id = ?\", suiteID).First(&suite).Error\n\tif err != nil {\n\t\treturn nil, errors.New(\"suite not found\")\n\t}\n\treturn &suite, nil\n}\n\nfunc (suite *WecomSuite) Create() error {\n\tif suite.SuiteID == \"\" {\n\t\treturn errors.New(\"suite_id cannot be empty\")\n\t}\n\tvar count int64\n\tDB.Model(&WecomSuite{}).Where(\"suite_id = ?\", suite.SuiteID).Count(&count)\n\tif count > 0 {\n\t\treturn errors.New(\"suite_id already exists\")\n\t}\n\n\tresult := DB.Create(suite)\n\treturn result.Error\n}\n\nfunc (suite *WecomSuite) Update() error {\n\tif suite.SuiteID == \"\" {\n\t\treturn errors.New(\"suite_id cannot be empty\")\n\t}\n\n\treturn DB.Model(suite).Updates(suite).Error\n}\n\nfunc (suite *WecomSuite) Delete() error {\n\tif suite.SuiteID == \"\" {\n\t\treturn errors.New(\"suite_id cannot be empty\")\n\t}\n\n\treturn DB.Delete(suite).Error\n}\n\nfunc GetWecomSuitesByCorpID(corpID string) ([]*WecomSuite, error) {\n\tvar suites []*WecomSuite\n\terr := DB.Where(\"corp_id = ?\", corpID).Find(&suites).Error\n\treturn suites, err\n}\n"
  },
  {
    "path": "api/router/api.go",
    "content": "package router\n\nimport (\n\t\"github.com/53AI/53AIHub/controller\"\n\t\"github.com/53AI/53AIHub/middleware\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc SetApiRouter(router *gin.Engine) {\n\tapiRouter := router.Group(\"/api\")\n\t// apiRouter.Use(middleware.CORS())\n\tapiRouter.Use(middleware.Logger())\n\n\tenterpriseRoute := apiRouter.Group(\"/enterprises\")\n\t{\n\t\tenterpriseRoute.GET(\"/is_saas\", middleware.UserTokenAuth(model.RoleCommonUser), controller.GetIsSaas)\n\t\tenterpriseRoute.GET(\"/homepage\", middleware.UserTokenAuth(model.RoleCommonUser), controller.GetHomePage)\n\n\t\tenterpriseRoute.GET(\"/current\", controller.GetCurrentEnterprise)\n\n\t\tenterpriseRoute.GET(\"/:id\", middleware.UserTokenAuth(model.RoleAdminUser), controller.GetEnterprise)\n\t\tenterpriseRoute.PUT(\"/:id\", controller.UpdateEnterprise)\n\t\tenterpriseRoute.PATCH(\"/:id\", middleware.UserTokenAuth(model.RoleAdminUser), controller.UpdateEnterpriseAttribute)\n\t\tenterpriseRoute.DELETE(\"/:id\", middleware.UserTokenAuth(model.RoleAdminUser), controller.DeleteEnterprise)\n\t\tenterpriseRoute.POST(\"\", middleware.UserTokenAuth(model.RoleAdminUser), controller.CreateEnterprise)\n\t\tenterpriseRoute.GET(\"/banner\", middleware.UserTokenAuth(model.RoleAdminUser), controller.GetEnterpriseBanner)\n\t\tenterpriseRoute.PUT(\"/banner\", middleware.UserTokenAuth(model.RoleAdminUser), controller.UpdateEnterpriseBanner)\n\t\tenterpriseRoute.GET(\"/template_type\", middleware.UserTokenAuth(model.RoleAdminUser), controller.GetEnterpriseTemplateType)\n\t\tenterpriseRoute.PUT(\"/template_type\", middleware.UserTokenAuth(model.RoleAdminUser), controller.UpdateEnterpriseTemplateType)\n\t}\n\n\tenterpriseConfigRoute := apiRouter.Group(\"/enterprise-configs\")\n\t{\n\t\tenterpriseConfigRoute.GET(\"\", middleware.UserTokenAuth(model.RoleAdminUser), controller.GetEnterpriseConfigTypes)\n\t\tenterpriseConfigRoute.GET(\"/:type\", middleware.UserTokenAuth(model.RoleAdminUser), controller.GetEnterpriseConfig)\n\t\tenterpriseConfigRoute.GET(\"/:type/enabled\", controller.IsEnterpriseConfigEnabled)\n\t\tenterpriseConfigRoute.POST(\"/:type\", middleware.UserTokenAuth(model.RoleAdminUser), controller.SaveEnterpriseConfig)\n\t\tenterpriseConfigRoute.PUT(\"/:type/toggle\", middleware.UserTokenAuth(model.RoleAdminUser), controller.ToggleEnterpriseConfig)\n\t}\n\n\tcommonRoute := apiRouter.Group(\"\")\n\t{\n\t\tcommonRoute.POST(\"/register\", controller.PasswordRegister)\n\t\tcommonRoute.POST(\"/login\", controller.Login)\n\t\tcommonRoute.POST(\"/logout\", middleware.UserTokenAuth(model.RoleGuestUser), controller.Logout)\n\t\tcommonRoute.POST(\"/sms_login\", controller.SmsLogin)\n\t\tcommonRoute.POST(\"/check_account\", controller.CheckAccountExists)\n\t\tcommonRoute.POST(\"/upload\", controller.Upload)\n\t\tcommonRoute.GET(\"/is_init\", controller.IsInit)\n\t\tcommonRoute.GET(\"/preview/*key\", controller.PreviewFile)\n\t\tcommonRoute.GET(\"/response_codes\", controller.GetAllResponseCodes)\n\t\tcommonRoute.POST(\"/reset_password\", controller.ResetPassword)\n\n\t\t// API SSO 登录\n\t\tcommonRoute.POST(\"/auth/sso_login\", controller.ApiSSOSSOLogin)\n\t}\n\n\temailRoute := apiRouter.Group(\"/email\")\n\t{\n\t\temailRoute.POST(\"/send_verification\", controller.SendVerificationEmail)\n\t\temailRoute.POST(\"/send_test\", middleware.UserTokenAuth(model.RoleAdminUser), controller.SendTestEmail)\n\t}\n\n\tuserRoute := apiRouter.Group(\"/users\")\n\tuserRoute.GET(\"/me\", middleware.UserTokenAuth(model.RoleCommonUser), controller.GetCurrentUser)\n\tuserRoute.PUT(\"/password\", middleware.UserTokenAuth(model.RoleCommonUser), controller.UpdateUserPassword)\n\tuserRoute.PATCH(\"/:id/mobile\", middleware.UserTokenAuth(model.RoleCommonUser), controller.UpdateUserMobile)\n\tuserRoute.PATCH(\"/:id/email\", middleware.UserTokenAuth(model.RoleCommonUser), controller.UpdateUserEmail)\n\tuserRoute.PUT(\"/me\", middleware.UserTokenAuth(model.RoleCommonUser), controller.UpdateCurrentUser)\n\tuserRoute.POST(\"/system_log\", middleware.UserTokenAuth(model.RoleCommonUser), controller.CreateSystemLogs)\n\tuserRoute.PUT(\"/:id/default_subscription\", middleware.UserTokenAuth(model.RoleCommonUser), controller.SetUserToDefaultSubscription)\n\tuserRoute.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tuserRoute.POST(\"\", controller.EnterpriseAddUser)\n\t\tuserRoute.GET(\"\", controller.EnterpriseUsers)\n\t\tuserRoute.DELETE(\"/:id\", controller.DeleteEnterpriseUser)\n\t\tuserRoute.PUT(\"/:id\", controller.UpdateEnterpriseUser)\n\t\tuserRoute.GET(\"/:user_id/agents/:agent_id/messages\", controller.GetUserMessages)\n\t\tuserRoute.GET(\"/:user_id/conversations\", controller.GetUserConversations)\n\t\tuserRoute.PUT(\"/batch/admin\", controller.SetUserAsAdmin)\n\t\tuserRoute.DELETE(\"/batch/admin\", controller.UnsetUserAsAdmin)\n\t\tuserRoute.POST(\"/internal/batch\", controller.BatchAddInternalUsers)\n\t\tuserRoute.PUT(\"/register/to/internal\", controller.RegisterUserToInternal)\n\t\tuserRoute.GET(\"/internal\", controller.GetInternalUsers)\n\t\tuserRoute.PATCH(\"/:id/status\", controller.UpdateUserStatus)\n\t\tuserRoute.PUT(\"/internal/:id\", controller.UpdateInternalUser)\n\t\tuserRoute.GET(\"/admin\", controller.EnterpriseUsers)\n\t\tuserRoute.GET(\"/organization\", controller.GetOrganizationUserList)\n\t}\n\n\tgroupRoute := apiRouter.Group(\"/groups\")\n\tgroupRoute.GET(\"type/current/:group_type\", controller.GetGroups)\n\tgroupRoute.POST(\"/prompt\", middleware.UserTokenAuth(model.RoleCommonUser), controller.CreateGroup)\n\tgroupRoute.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tgroupRoute.POST(\"\", controller.CreateGroup)\n\t\tgroupRoute.GET(\"/:id\", controller.GetGroup)\n\t\tgroupRoute.PUT(\"/:id\", controller.UpdateGroup)\n\t\tgroupRoute.DELETE(\"/:id\", controller.DeleteGroup)\n\t\tgroupRoute.POST(\"type/:group_type\", controller.BatchSubmitGroups)\n\t\tgroupRoute.GET(\"type/:group_type\", controller.GetGroups)\n\t\tgroupRoute.POST(\"/:id/agents\", controller.AddAgentsToGroup)\n\t\tgroupRoute.DELETE(\"/:id/agents\", controller.RemoveAgentsFromGroup)\n\t\tgroupRoute.GET(\"/:id/agents\", controller.GetGroupAgents)\n\t\tgroupRoute.POST(\"/:id/resources\", controller.AddResourcesToGroup)\n\t\tgroupRoute.DELETE(\"/:id/resources\", controller.RemoveResourcesFromGroup)\n\t\tgroupRoute.GET(\"/:id/resources\", controller.GetGroupResources)\n\t\tgroupRoute.DELETE(\"/:id/users\", controller.RemoveUsersFromGroup)\n\t\tgroupRoute.GET(\"/:id/users\", controller.GetGroupUsers)\n\t\tgroupRoute.POST(\"/:id/users/batch\", controller.BatchAddUsersToGroup)\n\t}\n\n\taiLinkRoute := apiRouter.Group(\"/ai_links\")\n\taiLinkRoute.GET(\"/current\", controller.GetCurrentSiteAILinks)\n\taiLinkRoute.GET(\"/default\", controller.GetDefaultAILinks)\n\taiLinkRoute.GET(\"/:id\", middleware.UserTokenAuth(model.RoleCommonUser), controller.GetAILink)\n\taiLinkRoute.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\taiLinkRoute.POST(\"\", controller.CreateAILink)\n\t\taiLinkRoute.GET(\"\", controller.GetAILinks)\n\t\taiLinkRoute.PUT(\"/:id\", controller.UpdateAILink)\n\t\taiLinkRoute.DELETE(\"/:id\", controller.DeleteAILink)\n\t\taiLinkRoute.POST(\"/batch/sort\", controller.BatchSortAILinks)\n\t}\n\n\tsettingRoute := apiRouter.Group(\"/settings\")\n\t{\n\t\tsettingRoute.POST(\"\", middleware.UserTokenAuth(model.RoleGuestUser), controller.CreateSetting)\n\t\tsettingRoute.GET(\"/:id\", controller.GetSetting)\n\t\tsettingRoute.PUT(\"/:id\", middleware.UserTokenAuth(model.RoleGuestUser), controller.UpdateSetting)\n\t\tsettingRoute.DELETE(\"/:id\", middleware.UserTokenAuth(model.RoleGuestUser), controller.DeleteSetting)\n\t\tsettingRoute.GET(\"\", middleware.UserTokenAuth(model.RoleAdminUser), controller.GetSettings)\n\t\tsettingRoute.GET(\"/group/:group_name\", controller.GetSettingsByGroup)\n\t\tsettingRoute.GET(\"/key/:key\", controller.GetSettingByKey)\n\t\tsettingRoute.POST(\"/default_links\", middleware.UserTokenAuth(model.RoleGuestUser), controller.BatchUpdateDefaultPromptLinks) // 批量更新默认提示词链接\n\t\tsettingRoute.GET(\"/default_links\", middleware.UserTokenAuth(model.RoleGuestUser), controller.GetDefaultPromptLinks)          // 获取默认提示词链接\n\t}\n\n\tchannelGroup := apiRouter.Group(\"/channels\")\n\tchannelGroup.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tchannelGroup.POST(\"\", controller.CreateChannel)\n\t\tchannelGroup.GET(\"\", controller.GetChannels)\n\t\tchannelGroup.GET(\"/:channel_id\", controller.GetChannel)\n\t\tchannelGroup.PUT(\"/:channel_id\", controller.UpdateChannel)\n\t\tchannelGroup.DELETE(\"/:channel_id\", controller.DeleteChannel)\n\t\tchannelGroup.GET(\"/test/:channel_id\", controller.TestChannel)\n\t\tchannelGroup.GET(\"/models\", controller.ListAllModels)\n\t}\n\n\tagentGroup := apiRouter.Group(\"/agents\")\n\tagentGroup.GET(\"/current\", controller.GetCurrentAgents)\n\tagentGroup.GET(\"/available\", controller.GetAvailableAgents)\n\tagentGroup.Use(middleware.UserTokenAuth(model.RoleGuestUser))\n\t{\n\t\tagentGroup.POST(\"\", controller.CreateAgent)\n\t\tagentGroup.GET(\"\", controller.GetAgents)\n\t\tagentGroup.GET(\"/group\", controller.GetAgentsByGroup)\n\t\tagentGroup.GET(\"/:agent_id\", controller.GetAgent)\n\t\tagentGroup.PUT(\"/:agent_id\", controller.UpdateAgent)\n\t\tagentGroup.DELETE(\"/:agent_id\", controller.DeleteAgent)\n\t\tagentGroup.GET(\"/:agent_id/messages\", controller.GetMessagesByUserAndAgent)\n\t\tagentGroup.PATCH(\"/:agent_id/status\", controller.UpdateAgentStatus)\n\t\tagentGroup.GET(\"/internal_users\", controller.GetInternalUserAgents)\n\t\tagentGroup.GET(\"/:agent_id/conversations\", controller.GetAgentConversations)\n\t}\n\n\tconversationGroup := apiRouter.Group(\"/conversations\")\n\tconversationGroup.Use(middleware.UserTokenAuth(model.RoleGuestUser))\n\t{\n\t\tconversationGroup.POST(\"\", controller.CreateConversation)\n\t\tconversationGroup.GET(\"\", controller.GetConversations)\n\t\tconversationGroup.GET(\"/:conversation_id\", controller.GetConversation)\n\t\tconversationGroup.PUT(\"/:conversation_id\", controller.UpdateConversation)\n\t\tconversationGroup.DELETE(\"/:conversation_id\", controller.DeleteConversation)\n\t\t//conversationGroup.POST(\"/:conversation_id/messages\", controller.CreateMessage)\n\t\tconversationGroup.GET(\"/:conversation_id/messages\", controller.GetMessagesByConversation)\n\t}\n\n\tsubscription := apiRouter.Group(\"/subscriptions\")\n\t{\n\t\tsubscription.GET(\"/settings\", controller.GetSubscriptionList)\n\t\tsubscription.\n\t\t\tPOST(\"/batch\", middleware.UserTokenAuth(model.RoleAdminUser), controller.BatchSubscriptionOperation)\n\t}\n\n\tproviderRouter := apiRouter.Group(\"/providers\")\n\tproviderRouter.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tproviderRouter.POST(\"\", controller.CreateProvider)\n\t\tproviderRouter.GET(\"\", controller.GetProviders)\n\t\tproviderRouter.PUT(\"/:id\", controller.UpdateProvider)\n\t\tproviderRouter.DELETE(\"/:id\", controller.DeleteProvider)\n\t}\n\n\tcallbackRouter := apiRouter.Group(\"/callback\")\n\t{\n\t\tcallbackRouter.GET(\"/cozecn/auth/:eid\", controller.CozeCallBack)\n\t\tcallbackRouter.GET(\"/cozecom/auth/:eid\", controller.CozeCallBack)\n\t}\n\n\tcozeRouter := apiRouter.Group(\"/coze\")\n\tcozeRouter.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tcozeRouter.GET(\"/workspaces\", controller.GetCozeAllWorkspaces)\n\t\tcozeRouter.GET(\"/workspaces/:workspace_id/bots\", controller.GetCozeAllBots)\n\t}\n\n\ttencentRouter := apiRouter.Group(\"/tencent\")\n\ttencentRouter.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\ttencentRouter.GET(\"/apps\", controller.GetTencentAllApps)\n\t\ttencentRouter.GET(\"/apps/:app_id\", controller.GetTencentAppDetail)\n\t}\n\n\tAppBuilderRouter := apiRouter.Group(\"/appbuilder\")\n\tAppBuilderRouter.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tAppBuilderRouter.GET(\"/bots\", controller.GetAppBuilderAllBots)\n\t}\n\n\tai53Router := apiRouter.Group(\"/53ai\")\n\tai53Router.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tai53Router.GET(\"/bots\", controller.Get53AIAllBots)\n\t\tai53Router.GET(\"/workflows\", controller.Get53AIAllWorkflows)\n\t\tai53Router.GET(\"/parameters/:botId\", controller.Get53AIAppParameters)\n\t}\n\n\tapiV1Router := router.Group(\"/v1\")\n\tapiV1Router.Use(middleware.CORS())\n\tapiV1Router.Use(middleware.Logger())\n\tapiV1Router.Use(middleware.RelayTokenAuth())\n\t{\n\t\tapiV1Router.POST(\"/chat/completions\", controller.Relay)\n\t\tapiV1Router.POST(\"/workflow/run\", controller.WorkflowRun)\n\t\tapiV1Router.POST(\"/rerank\", controller.Rerank)\n\t}\n\n\tpaySettingRouter := apiRouter.Group(\"/pay_settings\")\n\tpaySettingRouter.GET(\"/type/:type\", controller.GetPaySettingByType)\n\t{\n\t\tpaySettingRouter.GET(\"\", middleware.UserTokenAuth(model.RoleGuestUser), controller.GetPaySettings)\n\t\tpaySettingRouter.GET(\"/:id\", middleware.UserTokenAuth(model.RoleGuestUser), controller.GetPaySetting)\n\t\tpaySettingRouter.POST(\"\", middleware.UserTokenAuth(model.RoleAdminUser), controller.CreatePaySetting)\n\t\t// paySettingRouter.PUT(\"/:id\", controller.UpdatePaySetting)\n\t\tpaySettingRouter.DELETE(\"/:id\", middleware.UserTokenAuth(model.RoleAdminUser), controller.DeletePaySetting)\n\t\tpaySettingRouter.PATCH(\"/:id/config\", middleware.UserTokenAuth(model.RoleAdminUser), controller.UpdatePayConfig)\n\t\tpaySettingRouter.PATCH(\"/:id/status\", middleware.UserTokenAuth(model.RoleAdminUser), controller.UpdatePayStatus)\n\t}\n\n\torderRouter := apiRouter.Group(\"/orders\")\n\t{\n\t\torderRouter.POST(\"\", middleware.UserTokenAuth(model.RoleCommonUser), controller.CreateOrder)\n\t\torderRouter.PUT(\"/:id/manual\", middleware.UserTokenAuth(model.RoleAdminUser), controller.UpdateManualTransferOrder)\n\t\torderRouter.GET(\"\", middleware.UserTokenAuth(model.RoleCommonUser), controller.GetOrders)\n\t\torderRouter.GET(\"/me\", middleware.UserTokenAuth(model.RoleCommonUser), controller.GetOrders)\n\t\torderRouter.GET(\"/:id\", middleware.UserTokenAuth(model.RoleAdminUser), controller.GetOrder)\n\t\torderRouter.PATCH(\"/:id/status\", middleware.UserTokenAuth(model.RoleAdminUser), controller.UpdateOrderStatus) // Only manual transfers can be marked as paid\n\t\torderRouter.DELETE(\"/:id\", middleware.UserTokenAuth(model.RoleAdminUser), controller.DeleteOrder)             // Only manual transfers can be deleted, but paid ones cannot be deleted\n\t\torderRouter.GET(\"/status/:order_id\", middleware.UserTokenAuth(model.RoleCommonUser), controller.QueryOrderStatus)\n\t\torderRouter.POST(\"/:id/confirm\", middleware.UserTokenAuth(model.RoleCommonUser), controller.ConfirmManualPayment)\n\t\torderRouter.GET(\"/user\", middleware.UserTokenAuth(model.RoleAdminUser), controller.GetUserOrders)\n\t\torderRouter.POST(\"/:id/close\", middleware.UserTokenAuth(model.RoleCommonUser), controller.CloseOrder)\n\t\torderRouter.GET(\"/trade/:order_id\", middleware.UserTokenAuth(model.RoleAdminUser), controller.QueryTradeOrder)\n\t\torderRouter.POST(\"/trade/:order_id/refund\", middleware.UserTokenAuth(model.RoleAdminUser), controller.RefunTradeOrder)\n\t}\n\n\tpaymentRouter := apiRouter.Group(\"/payment\")\n\t{\n\t\tpaymentRouter.GET(\"/available\", controller.GetAvailablePayTypes)\n\t\t// Payment notification routes\n\t\tpaymentRouter.POST(\"/wechat/notify/:id\", controller.WechatPayNotify)\n\t\tpaymentRouter.POST(\"/alipay/notify/:id\", controller.AlipayNotify)\n\t}\n\n\t// 同步进度相关路由组\n\tsyncProgressRouter := apiRouter.Group(\"/sync-progress\")\n\tsyncProgressRouter.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tsyncProgressRouter.GET(\"/:from\", controller.GetSyncProgress)           // 获取指定来源的同步进度\n\t\tsyncProgressRouter.GET(\"/:from/all\", controller.GetSyncProgressByFrom) // 获取指定来源的所有企业同步进度\n\t\tsyncProgressRouter.GET(\"\", controller.GetAllSyncProgress)              // 获取所有来源的所有同步进度\n\t}\n\n\t// Department routes\n\tdepartmentGroup := apiRouter.Group(\"/departments\")\n\tdepartmentGroup.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tdepartmentGroup.POST(\"\", controller.CreateDepartment)\n\t\tdepartmentGroup.GET(\"\", controller.GetDepartments)\n\t\tdepartmentGroup.GET(\"/:did\", controller.GetDepartment)\n\t\tdepartmentGroup.PUT(\"/:did\", controller.UpdateDepartment)\n\t\tdepartmentGroup.DELETE(\"/:did\", controller.DeleteDepartment)\n\t\tdepartmentGroup.GET(\"/children/:pdid\", controller.GetChildDepartments)\n\t\tdepartmentGroup.GET(\"/tree\", controller.GetDepartmentTree)\n\t\tdepartmentGroup.POST(\"/sync/:from\", controller.SyncOrganization)\n\t\tdepartmentGroup.POST(\"/bind-member\", controller.DepartmentBindMember)\n\t\tdepartmentGroup.DELETE(\"/bind-member\", controller.DepartmentUnbindMember)\n\t}\n\n\tpromptGroup := apiRouter.Group(\"/prompts\")\n\t{\n\t\tpromptGroup.GET(\"\", controller.GetPrompts)\n\t\tpromptGroup.GET(\"/admin\", middleware.UserTokenAuth(model.RoleAdminUser), controller.GetPrompts)\n\t\tpromptGroup.POST(\"/system\", middleware.UserTokenAuth(model.RoleAdminUser), controller.CreatePrompt)\n\t\tpromptGroup.POST(\"/personal\", middleware.UserTokenAuth(model.RoleCommonUser), controller.CreatePrompt)\n\t\tpromptGroup.GET(\"/:pid\", controller.GetPrompt)\n\t\tpromptGroup.PUT(\"/:pid\", middleware.UserTokenAuth(model.RoleCommonUser), controller.UpdatePrompt)\n\t\tpromptGroup.DELETE(\"/:pid\", middleware.UserTokenAuth(model.RoleCommonUser), controller.DeletePrompt)\n\t\tpromptGroup.PATCH(\"/:pid/like\", middleware.UserTokenAuth(model.RoleCommonUser), controller.UpdatePromptLike)\n\t\tpromptGroup.GET(\"/:pid/groups\", middleware.UserTokenAuth(model.RoleCommonUser), controller.GetPromptGroups)\n\t\tpromptGroup.PATCH(\"/:pid/status\", middleware.UserTokenAuth(model.RoleCommonUser), controller.UpdatePromptStatus)\n\t}\n\n\tnavigationRoute := apiRouter.Group(\"/navigations\")\n\tnavigationRoute.GET(\"\", controller.GetNavigations)\n\tnavigationRoute.GET(\"/icons\", controller.GetNavigationIcons)\n\tnavigationRoute.POST(\"/init\", controller.InitSystemNavigation)\n\tnavigationRoute.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tnavigationRoute.GET(\"/:nav_id\", controller.GetNavigation)\n\t\tnavigationRoute.POST(\"\", controller.CreateNavigation)\n\t\tnavigationRoute.PUT(\"/:nav_id\", controller.UpdateNavigation)\n\t\tnavigationRoute.DELETE(\"/:nav_id\", controller.DeleteNavigation)\n\t\tnavigationRoute.PATCH(\"/:nav_id/status\", controller.UpdateNavigationStatus)\n\t\tnavigationRoute.POST(\"/sort\", controller.SortNavigations)\n\t\tnavigationRoute.POST(\"/:nav_id/content\", controller.CreateNavigationContent)\n\t\tnavigationRoute.GET(\"/:nav_id/content\", controller.GetNavigationContent)\n\t}\n\n\tsystemLogRouter := apiRouter.Group(\"/system_logs\")\n\tsystemLogRouter.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tsystemLogRouter.GET(\"/modules\", controller.GetModules)\n\t\tsystemLogRouter.GET(\"/actions\", controller.GetActions)\n\t\tsystemLogRouter.GET(\"\", controller.GetSystemLogs)\n\t}\n\n\tmaxKB := apiRouter.Group(\"/maxkb\")\n\t{\n\t\tmaxKB.GET(\"/application/profile\", middleware.UserTokenAuth(model.RoleAdminUser), controller.GetMaxKBApplicationProfile)\n\t}\n\n\tdifyRouter := apiRouter.Group(\"/dify\")\n\tdifyRouter.Use(middleware.UserTokenAuth(model.RoleAdminUser))\n\t{\n\t\tdifyRouter.GET(\"/info/:channelId\", controller.GetDifyAppInfo)\n\t\tdifyRouter.GET(\"/parameters/:channelId\", controller.GetDifyAppParameters)\n\t}\n\n\tsharesAuth := apiRouter.Group(\"/shares\")\n\tsharesAuth.Use(middleware.UserTokenAuth(model.RoleGuestUser))\n\t{\n\t\tsharesAuth.POST(\"\", controller.CreateShare)\n\t}\n\n\tsharesPublic := apiRouter.Group(\"/shares\")\n\t{\n\t\tsharesPublic.GET(\"/:share_id\", controller.GetShare)\n\t}\n}\n"
  },
  {
    "path": "api/router/main.go",
    "content": "package router\n\nimport (\n\t\"embed\"\n\t\"io/fs\"\n\t\"net/http\"\n\t\"os\"\n\n\t\"github.com/53AI/53AIHub/controller\"\n\t_ \"github.com/53AI/53AIHub/docs\"\n\t\"github.com/53AI/53AIHub/middleware\"\n\n\t\"github.com/gin-gonic/gin\"\n\tswaggerFiles \"github.com/swaggo/files\"\n\tginSwagger \"github.com/swaggo/gin-swagger\"\n)\n\n// @title 53AIHub API\n// @version 0.1\n// @description This is the API documentation for 53AIHub\n// @securityDefinitions.apikey BearerAuth\n// @in header\n// @name Authorization\n// @description Type \"Bearer\" followed by a space and JWT token. Example: \"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\nfunc SetRouter(router *gin.Engine, buildFS embed.FS) {\n\tif os.Getenv(\"HUB_SERVER\") != \"prod\" {\n\t\trouter.GET(\"/swagger/*any\", ginSwagger.WrapHandler(swaggerFiles.Handler))\n\t}\n\trouter.GET(\"/heath\", controller.HealthCheck)\n\trouter.Use(middleware.CORS())\n\tsetStaticImagesRouter(router, buildFS)\n\tsetStaticLibsRouter(router, buildFS)\n\tSetApiRouter(router)\n\t// SetWebRouter(router, buildFS)\n\tSetStaticRouter(router, buildFS)\n}\n\nfunc setStaticImagesRouter(router *gin.Engine, buildFS embed.FS) {\n\tsubFS, _ := fs.Sub(buildFS, \"static/images\")\n\trouter.StaticFS(\"/api/images\", http.FS(subFS))\n}\n\nfunc setStaticLibsRouter(router *gin.Engine, buildFS embed.FS) {\n\tsubFS, _ := fs.Sub(buildFS, \"static/libs\")\n\trouter.StaticFS(\"/api/libs\", http.FS(subFS))\n}\n"
  },
  {
    "path": "api/router/static.go",
    "content": "package router\n\nimport (\n\t\"embed\"\n\t\"io/fs\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/gin-gonic/gin\"\n)\n\nconst (\n\tpathAPI     = \"/api/\"\n\tpathStatic  = \"/static/\"\n\tpathConsole = \"/console\"\n\tpathAssets  = \"/assets/\"\n\tpathImages  = \"/images/\"\n)\n\nconst contentTypeHTML = \"text/html; charset=utf-8\"\n\n// serveHTMLFile handles HTML file requests\nfunc serveHTMLFile(c *gin.Context, fsys fs.FS, filename string, logMsg string) {\n\t// logger.SysLog(logMsg)\n\tc.Header(\"Content-Type\", contentTypeHTML)\n\tc.Status(http.StatusOK)\n\n\tcontent, err := fs.ReadFile(fsys, filename)\n\tif err != nil {\n\t\tlogger.SysLogf(\"Failed to read file %s: %v\", filename, err)\n\t\tc.String(http.StatusInternalServerError, \"Failed to read file: \"+err.Error())\n\t\treturn\n\t}\n\n\tc.Writer.Write(content)\n}\n\n// serveStaticFile handles static resource file requests\nfunc serveStaticFile(c *gin.Context, fsys fs.FS, filepath string, logMsg string) {\n\t// logger.SysLogf(logMsg)\n\n\tcontent, fileErr := fs.ReadFile(fsys, filepath)\n\tif fileErr != nil {\n\t\tlogger.SysLogf(\"Failed to read file %s: %v\", filepath, fileErr)\n\t\tc.String(http.StatusNotFound, \"File not found\")\n\t\treturn\n\t}\n\n\t// Set appropriate Content-Type based on file extension\n\tcontentType := \"application/octet-stream\"\n\tif strings.HasSuffix(filepath, \".js\") {\n\t\tcontentType = \"application/javascript\"\n\t} else if strings.HasSuffix(filepath, \".css\") {\n\t\tcontentType = \"text/css\"\n\t} else if strings.HasSuffix(filepath, \".png\") {\n\t\tcontentType = \"image/png\"\n\t} else if strings.HasSuffix(filepath, \".jpg\") || strings.HasSuffix(filepath, \".jpeg\") {\n\t\tcontentType = \"image/jpeg\"\n\t} else if strings.HasSuffix(filepath, \".svg\") {\n\t\tcontentType = \"image/svg+xml\"\n\t}\n\n\tc.Header(\"Content-Type\", contentType)\n\tc.Status(http.StatusOK)\n\tc.Writer.Write(content)\n}\n\n// tryServeFile attempts to serve a file from the filesystem, returns false if file doesn't exist\nfunc tryServeFile(c *gin.Context, fsys fs.FS, filePath string, logMsg string) bool {\n\t// Check if file exists\n\t_, err := fs.Stat(fsys, filePath)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\t// Determine if it's HTML or another static resource based on file extension\n\tif strings.HasSuffix(filePath, \".html\") {\n\t\tserveHTMLFile(c, fsys, filePath, logMsg)\n\t} else {\n\t\tserveStaticFile(c, fsys, filePath, logMsg)\n\t}\n\n\treturn true\n}\n\n// SetStaticRouter configures static file routes\nfunc SetStaticRouter(router *gin.Engine, buildFS embed.FS) error {\n\trendererSubFS, err := fs.Sub(buildFS, \"static/front\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdistSubFS, err := fs.Sub(buildFS, \"static/console\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trouter.StaticFS(\"/static/front\", http.FS(rendererSubFS))\n\trouter.StaticFS(\"/static/console\", http.FS(distSubFS))\n\n\t// Handle assets path requests\n\trouter.GET(\"/assets/*filepath\", func(c *gin.Context) {\n\t\tfilepath := c.Param(\"filepath\")\n\t\tassetPath := \"assets\" + filepath\n\t\tserveStaticFile(c, rendererSubFS, assetPath, \"Processing assets request: \"+assetPath)\n\t})\n\n\t// Handle images path requests\n\trouter.GET(\"/images/*filepath\", func(c *gin.Context) {\n\t\tfilepath := c.Param(\"filepath\")\n\t\timagePath := \"images\" + filepath\n\t\tserveStaticFile(c, rendererSubFS, imagePath, \"Processing images request: \"+imagePath)\n\t})\n\n\t// Handle root path request\n\trouter.GET(\"/\", func(c *gin.Context) {\n\t\tserveHTMLFile(c, rendererSubFS, \"index.html\", \"Processing root path request\")\n\t})\n\n\t// Handle all non-API and non-static resource requests\n\trouter.NoRoute(func(c *gin.Context) {\n\t\tpath := c.Request.URL.Path\n\n\t\t// If it's an API route, return and let the API route handler handle it\n\t\tif strings.HasPrefix(path, pathAPI) {\n\t\t\treturn\n\t\t}\n\n\t\t// If it's a static file route, return and let the static file handler handle it\n\t\tif strings.HasPrefix(path, pathStatic) {\n\t\t\treturn\n\t\t}\n\n\t\t// If it's an assets or images path, return and let the dedicated handler handle it\n\t\tif strings.HasPrefix(path, pathAssets) || strings.HasPrefix(path, pathImages) {\n\t\t\treturn\n\t\t}\n\n\t\t// If it's a console route, use the dist directory\n\t\tif strings.HasPrefix(path, pathConsole) {\n\t\t\t// Remove the \"/console\" prefix to get the relative path\n\t\t\trelativePath := strings.TrimPrefix(path, \"/console\")\n\t\t\tif relativePath == \"\" || relativePath == \"/\" {\n\t\t\t\t// If it's /console or /console/, return index.html from the dist directory\n\t\t\t\tserveHTMLFile(c, distSubFS, \"index.html\", \"Processing console root path request: \"+path)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Try to find the corresponding file in the dist directory\n\t\t\tfilePath := strings.TrimPrefix(relativePath, \"/\")\n\t\t\tif tryServeFile(c, distSubFS, filePath, \"Processing console file request: \"+path) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If the file doesn't exist, return index.html from the dist directory (for SPA frontend routing)\n\t\t\tserveHTMLFile(c, distSubFS, \"index.html\", \"Processing console frontend route request: \"+path)\n\t\t\treturn\n\t\t}\n\n\t\t// Other routes use the renderer directory\n\t\t// Try to find the corresponding file in the renderer directory\n\t\tfilePath := strings.TrimPrefix(path, \"/\")\n\t\tif filePath == \"\" {\n\t\t\t// If it's the root path, return index.html from the renderer directory\n\t\t\tserveHTMLFile(c, rendererSubFS, \"index.html\", \"Processing root path request\")\n\t\t\treturn\n\t\t}\n\n\t\t// Try to find the corresponding file in the renderer directory\n\t\tif tryServeFile(c, rendererSubFS, filePath, \"Processing renderer file request: \"+path) {\n\t\t\treturn\n\t\t}\n\n\t\t// If the file doesn't exist, return index.html from the renderer directory (for SPA frontend routing)\n\t\tserveHTMLFile(c, rendererSubFS, \"index.html\", \"Processing frontend route request: \"+path)\n\t})\n\n\treturn nil\n}\n"
  },
  {
    "path": "api/router/web.go",
    "content": "package router\n\nimport (\n\t\"embed\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc SetWebRouter(router *gin.Engine, buildFS embed.FS) {\n\t// 添加错误处理\n\tcurrentDir, err := os.Getwd()\n\tlog.Printf(\"当前工作目录: %s\", currentDir)\n\tindexPageData, err := buildFS.ReadFile(\"./web/build/index.html\")\n\tif err != nil {\n\t\tlog.Printf(\"无法读取 index.html 文件: %v\", err)\n\t}\n\n\t// 显式处理根路径\n\t// router.GET(\"/\", func(c *gin.Context) {\n\t// \tc.Header(\"Cache-Control\", \"no-cache\")\n\t// \tc.Data(http.StatusOK, \"text/html; charset=utf-8\", indexPageData)\n\t// })\n\n\t// 静态文件服务\n\t//router.Use(static.Serve(\"/\", common.EmbedFolder(buildFS, \"web/build\")))\n\n\t// NoRoute 处理\n\trouter.NoRoute(func(c *gin.Context) {\n\t\tc.Header(\"Cache-Control\", \"no-cache\")\n\t\tc.Data(http.StatusOK, \"text/html; charset=utf-8\", indexPageData)\n\t})\n}\n"
  },
  {
    "path": "api/service/adaptor.go",
    "content": "package service\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/model\"\n\tadaptor53AI \"github.com/53AI/53AIHub/service/hub_adaptor/53AI\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/appbuilder\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/bailian\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/coze\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/dify\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/n8n\"\n\tHub_openai \"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\tHub_tencent \"github.com/53AI/53AIHub/service/hub_adaptor/tencent\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/yuanqi\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/aiproxy\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/ali\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/anthropic\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/aws\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/baidu\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/cloudflare\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/cohere\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/deepl\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/gemini\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/ollama\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/palm\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/proxy\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/replicate\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/tencent\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/vertexai\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/xunfei\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/zhipu\"\n\t\"github.com/songquanpeng/one-api/relay/apitype\"\n)\n\nfunc GetAdaptor(apiType int) adaptor.Adaptor {\n\tswitch apiType {\n\tcase apitype.AIProxyLibrary:\n\t\treturn &aiproxy.Adaptor{}\n\tcase apitype.Ali:\n\t\treturn &ali.Adaptor{}\n\tcase apitype.Anthropic:\n\t\treturn &anthropic.Adaptor{}\n\tcase apitype.AwsClaude:\n\t\treturn &aws.Adaptor{}\n\tcase apitype.Baidu:\n\t\treturn &baidu.Adaptor{}\n\tcase apitype.Gemini:\n\t\treturn &gemini.Adaptor{}\n\tcase apitype.OpenAI:\n\t\treturn &Hub_openai.Adaptor{}\n\tcase apitype.PaLM:\n\t\treturn &palm.Adaptor{}\n\tcase apitype.Tencent:\n\t\treturn &tencent.Adaptor{}\n\tcase apitype.Xunfei:\n\t\treturn &xunfei.Adaptor{}\n\tcase apitype.Zhipu:\n\t\treturn &zhipu.Adaptor{}\n\tcase apitype.Ollama:\n\t\treturn &ollama.Adaptor{}\n\tcase apitype.Coze:\n\t\treturn &coze.Adaptor{}\n\tcase apitype.Cohere:\n\t\treturn &cohere.Adaptor{}\n\tcase apitype.Cloudflare:\n\t\treturn &cloudflare.Adaptor{}\n\tcase apitype.DeepL:\n\t\treturn &deepl.Adaptor{}\n\tcase apitype.VertexAI:\n\t\treturn &vertexai.Adaptor{}\n\tcase apitype.Proxy:\n\t\treturn &proxy.Adaptor{}\n\tcase apitype.Replicate:\n\t\treturn &replicate.Adaptor{}\n\tcase model.ChannelApiDify:\n\t\treturn &dify.Adaptor{}\n\tcase model.ChannelApi53AI:\n\t\treturn &adaptor53AI.Adaptor{}\n\tcase model.ChannelApiVolcengine:\n\t\treturn &Hub_openai.Adaptor{}\n\tcase model.ChannelApiAppBuilder:\n\t\treturn &appbuilder.Adaptor{}\n\tcase model.ChannelApiBailian:\n\t\treturn &bailian.Adaptor{}\n\tcase model.ChannelApiYuanqi:\n\t\treturn &yuanqi.Adaptor{}\n\tcase model.ChannelApiTypeFastGpt:\n\t\treturn &Hub_openai.Adaptor{}\n\tcase model.ChannelApiTypeMaxKB:\n\t\treturn &Hub_openai.Adaptor{}\n\tcase model.ChannelApiTypeN8n:\n\t\treturn &n8n.Adaptor{}\n\tcase model.ChannelApiTypeCozeStudio:\n\t\treturn &coze.Adaptor{}\n\tcase model.ChannelApiTypeTencent:\n\t\treturn &Hub_tencent.Adaptor{}\n\t}\n\n\treturn nil\n}\n\nfunc SetCustomConfig(a *adaptor.Adaptor, customConfig *custom.CustomConfig) error {\n\tswitch v := (*a).(type) {\n\tcase *dify.Adaptor:\n\t\tv.CustomConfig = customConfig\n\tcase *adaptor53AI.Adaptor:\n\t\tv.CustomConfig = customConfig\n\tcase *coze.Adaptor:\n\t\tv.CustomConfig = customConfig\n\tcase *Hub_openai.Adaptor:\n\t\tv.CustomConfig = customConfig\n\tcase *appbuilder.Adaptor:\n\t\t// Appbuilder 7 day Expired\n\t\tif customConfig.ConversationId == \"\" || customConfig.ConversationExpirationTime <= time.Now().Unix() {\n\t\t\tappBuilderConversationId, err := v.GetConversationId()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcustomConfig.ConversationId = appBuilderConversationId\n\t\t\tif customConfig.ConversationId == \"\" {\n\t\t\t\treturn errors.New(\"appbuilder create conversation error: conversation id is empty\")\n\t\t\t}\n\t\t\tcustomConfig.ConversationExpirationTime = time.Now().Unix() + 60*60*24*7\n\t\t}\n\t\tv.CustomConfig = customConfig\n\tcase *bailian.Adaptor:\n\t\t// The SessionId in Bailian is customized for multi-turn conversations.\n\t\tv.CustomConfig = customConfig\n\t\tv.CustomConfig.ConversationId = fmt.Sprintf(\"53AIHub_%d\", customConfig.AIHubConversationId)\n\tcase *yuanqi.Adaptor:\n\t\tv.CustomConfig = customConfig\n\tcase *n8n.Adaptor:\n\t\tv.CustomConfig = customConfig\n\tcase *Hub_tencent.Adaptor:\n\t\tv.CustomConfig = customConfig\n\t}\n\treturn nil\n}\n\nfunc GetCustomConfig(a *adaptor.Adaptor) *custom.CustomConfig {\n\tswitch v := (*a).(type) {\n\tcase *dify.Adaptor:\n\t\treturn v.CustomConfig\n\tcase *adaptor53AI.Adaptor:\n\t\treturn v.CustomConfig\n\tcase *coze.Adaptor:\n\t\treturn v.CustomConfig\n\tcase *Hub_openai.Adaptor:\n\t\treturn v.CustomConfig\n\tcase *appbuilder.Adaptor:\n\t\treturn v.CustomConfig\n\tcase *bailian.Adaptor:\n\t\treturn v.CustomConfig\n\tcase *yuanqi.Adaptor:\n\t\treturn v.CustomConfig\n\tcase *n8n.Adaptor:\n\t\treturn v.CustomConfig\n\tcase *Hub_tencent.Adaptor:\n\t\treturn v.CustomConfig\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "api/service/ai53_provider.go",
    "content": "package service\n\nimport (\n\t\"github.com/53AI/53AIHub/common/utils/ai53\"\n\t\"github.com/53AI/53AIHub/model\"\n)\n\ntype AI53Service struct {\n\tProvider *model.Provider\n}\n\nfunc (a *AI53Service) GetApiSdk() *ai53.AI53Api {\n\tbaseUrl := a.Provider.GetBaseURLByProviderType()\n\treturn &ai53.AI53Api{\n\t\tBaseUrl:   baseUrl,\n\t\tAuthToken: a.Provider.AccessToken,\n\t}\n}\n\nfunc (a *AI53Service) GetAllBots() ([]ai53.AppResponse, error) {\n\tapi := a.GetApiSdk()\n\tvar allBots []ai53.AppResponse\n\toffset := 0\n\tlimit := 100\n\n\tfor {\n\t\tresp, err := api.GetApps(offset, limit)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tallBots = append(allBots, resp...)\n\n\t\tif len(resp) < limit {\n\t\t\tbreak\n\t\t}\n\t\toffset += limit\n\t}\n\n\treturn allBots, nil\n}\n\nfunc (a *AI53Service) GetAllWorkflows() ([]ai53.AppResponse, error) {\n\tapi := a.GetApiSdk()\n\tallWorkflows := make([]ai53.AppResponse, 0)\n\toffset := 0\n\tlimit := 100\n\n\tfor {\n\t\tresp, err := api.GetWorkflows(offset, limit)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tallWorkflows = append(allWorkflows, resp...)\n\n\t\tif len(resp) < limit {\n\t\t\tbreak\n\t\t}\n\t\toffset += limit\n\t}\n\n\treturn allWorkflows, nil\n}\n\nfunc (a *AI53Service) GetAppParameters(botId string) (interface{}, error) {\n\t// 获取 API SDK 实例 (复用现有模式)\n\tapi := a.GetApiSdk()\n\n\t// 调用 API 方法\n\treturn api.GetAppParameters(botId)\n}\n"
  },
  {
    "path": "api/service/appbuilder_provider.go",
    "content": "package service\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/53AI/53AIHub/common/utils/appbuilder\"\n\t\"github.com/53AI/53AIHub/model\"\n)\n\ntype AppBuilderService struct {\n\tProvider *model.Provider\n}\n\nfunc (a *AppBuilderService) GetApiSdk() *appbuilder.AppBuilderApi {\n\tbaseUrl := a.Provider.GetBaseURLByProviderType()\n\treturn &appbuilder.AppBuilderApi{\n\t\tBaseUrl:   baseUrl,\n\t\tAuthToken: a.Provider.AccessToken,\n\t}\n}\n\n// GetAllDescribeApps retrieves all apps by paginating through DescribeApps API\n// It will keep calling the API with marker from previous response until all apps are loaded\n// maxKeys is set to 100 which is the maximum allowed value\nfunc (a *AppBuilderService) GetAllDescribeApps() ([]appbuilder.AppInfo, error) {\n\tapi := a.GetApiSdk()\n\tvar allApps []appbuilder.AppInfo\n\tmarker := \"\"\n\tmaxKeys := 100\n\tmaxAttempts := 10\n\tattempt := 0\n\n\tfor {\n\t\tattempt++\n\t\tif attempt > maxAttempts {\n\t\t\treturn allApps, fmt.Errorf(\"maximum API call attempts (%d) reached\", maxAttempts)\n\t\t}\n\n\t\tresp, err := api.DescribeApps(marker, maxKeys)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif len(resp.Data) == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tallApps = append(allApps, resp.Data...)\n\n\t\tif !resp.IsTruncated {\n\t\t\tbreak\n\t\t}\n\t\tmarker = resp.NextMarker\n\t}\n\n\treturn allApps, nil\n}\n"
  },
  {
    "path": "api/service/channel_service.go",
    "content": "package service\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n)\n\n// GetChannelWithTokenRefresh 获取渠道并检查/刷新token（如果需要 ）\n// 这个函数可以被聊天和工作流共同使用\nfunc GetChannelWithTokenRefresh(ctx context.Context, eid int64, channelType int, modelName string, lastFailedChannelId int64) (*model.Channel, error) {\n\t// 获取重试次数\n\tretryTimes := config.CHANNEL_RETRY_TIMES\n\n\tvar lastErr error\n\tfor i := retryTimes; i > 0; i-- {\n\t\t// 获取随机渠道\n\t\tchannel, err := model.GetRandomChannel(eid, channelType, modelName)\n\t\tif err != nil {\n\t\t\tlastErr = err\n\t\t\tcontinue\n\t\t}\n\n\t\t// 避免重复使用上次失败的渠道\n\t\tif channel.ChannelID == lastFailedChannelId {\n\t\t\tcontinue\n\t\t}\n\n\t\t// 检查并刷新token（如果需要）\n\t\tisRefreshToken := false\n\t\tif channel.ProviderID != 0 {\n\t\t\tprovider, err := model.GetProviderByID(channel.ProviderID, channel.Eid)\n\t\t\tif err != nil {\n\t\t\t\tlogger.Errorf(ctx, \"refresh token failed: %s\", err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcheckProviderType := int(provider.ProviderType)\n\n\t\t\tswitch checkProviderType {\n\t\t\tcase model.ProviderTypeCozeCn, model.ProviderTypeCozeCom:\n\t\t\t\tser := CozeService{\n\t\t\t\t\tProvider: *provider,\n\t\t\t\t}\n\t\t\t\tisRefreshToken, err = ser.CheckAndRefreshToken()\n\t\t\t\tif err != nil {\n\t\t\t\t\tlogger.Errorf(ctx, \"refresh token failed: %s\", err.Error())\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\tcase model.ProviderTypeCozeStudio:\n\t\t\t\tif channel.BaseURL != provider.BaseURL || channel.Key != provider.AccessToken {\n\t\t\t\t\tchannel.BaseURL = provider.BaseURL\n\t\t\t\t\tchannel.Key = provider.AccessToken\n\t\t\t\t\tisRefreshToken = true\n\t\t\t\t\terr = model.UpdateChannel(channel)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 如果token被刷新，更新渠道信息\n\t\tif isRefreshToken {\n\t\t\t// update channel key\n\t\t\tchannel, err = model.GetChannelByID(channel.ChannelID)\n\t\t\tif err != nil {\n\t\t\t\tlogger.Errorf(ctx, \"refresh token failed: %s\", err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlogger.SysLogf(\"channel token update success, channel_id=\", channel.ChannelID)\n\t\t}\n\n\t\treturn channel, nil\n\t}\n\n\treturn nil, fmt.Errorf(\"all channels are unavailable, last error: %v\", lastErr)\n}\n"
  },
  {
    "path": "api/service/coze_provider.go",
    "content": "package service\n\nimport (\n\t\"crypto/md5\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"path\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/storage\"\n\t\"github.com/53AI/53AIHub/common/utils/coze\"\n\t\"github.com/53AI/53AIHub/model\"\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/songquanpeng/one-api/relay/channeltype\"\n)\n\ntype CozeService struct {\n\tProvider db_model.Provider\n}\n\nfunc (ser *CozeService) GetCozeApiSdk() (*coze.CozeApi, error) {\n\tvar baseUrl string\n\tif ser.Provider.ProviderType == model.ProviderTypeCozeCn {\n\t\tbaseUrl = coze.CozeCnUrl\n\t} else if ser.Provider.ProviderType == model.ProviderTypeCozeCom {\n\t\tbaseUrl = coze.CozeComUrl\n\t} else if ser.Provider.ProviderType == model.ProviderTypeCozeStudio {\n\t\t// coze-studio uses custom base_url from Provider.BaseURL\n\t\tif ser.Provider.BaseURL != nil && *ser.Provider.BaseURL != \"\" {\n\t\t\tbaseUrl = *ser.Provider.BaseURL\n\t\t} else {\n\t\t\treturn nil, errors.New(\"coze-studio requires custom base_url\")\n\t\t}\n\t} else {\n\t\tbaseUrl = coze.CozeComUrl\n\t}\n\n\treturn &coze.CozeApi{\n\t\tBaseUrl: baseUrl,\n\t}, nil\n}\n\nfunc (ser *CozeService) HandlerAccessTokenByCode(coze string, callbackUrl string) error {\n\tif ser.Provider.ProviderType != model.ProviderTypeCozeCn && ser.Provider.ProviderType != model.ProviderTypeCozeCom {\n\t\treturn errors.New(\"invalid provider type\")\n\t}\n\n\t// coze-studio uses fixed AccessToken, skip OAuth flow\n\tif ser.Provider.ProviderType == model.ProviderTypeCozeStudio {\n\t\treturn errors.New(\"coze-studio does not support OAuth flow\")\n\t}\n\n\tapi, err := ser.GetCozeApiSdk()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar config model.CozeConfig\n\n\terr = json.Unmarshal([]byte(ser.Provider.Configs), &config)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcozeApiToken, err := api.GetOAuthToken(config.ClientID, config.ClientSecret, coze, callbackUrl)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tser.Provider.AccessToken = cozeApiToken.AccessToken\n\tser.Provider.RefreshToken = cozeApiToken.RefreshToken\n\tser.Provider.ExpiresIn = cozeApiToken.ExpiresIn\n\tser.Provider.IsAuthorized = true\n\tser.Provider.AuthedTime = time.Now().UTC().UnixMilli()\n\terr = model.UpdateProvider(&ser.Provider)\n\n\treturn err\n}\n\nfunc (ser *CozeService) HandlerAccessTokenByRefreshToken() error {\n\tif ser.Provider.ProviderType != model.ProviderTypeCozeCn && ser.Provider.ProviderType != model.ProviderTypeCozeCom {\n\t\treturn errors.New(\"invalid provider type\")\n\t}\n\n\t// coze-studio uses fixed AccessToken, skip refresh flow\n\tif ser.Provider.ProviderType == model.ProviderTypeCozeStudio {\n\t\treturn errors.New(\"coze-studio does not support token refresh\")\n\t}\n\tapi, err := ser.GetCozeApiSdk()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar config model.CozeConfig\n\terr = json.Unmarshal([]byte(ser.Provider.Configs), &config)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcozeApiToken, err := api.RefreshOAuthToken(config.ClientID, config.ClientSecret, ser.Provider.RefreshToken)\n\tif err != nil {\n\t\treturn err\n\t}\n\tser.Provider.AccessToken = cozeApiToken.AccessToken\n\tser.Provider.RefreshToken = cozeApiToken.RefreshToken\n\tser.Provider.ExpiresIn = cozeApiToken.ExpiresIn\n\tser.Provider.IsAuthorized = true\n\terr = model.UpdateProvider(&ser.Provider)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// update channel key\n\texistingChannel, err := model.GetFirstChannelByEidAndProviderId(ser.Provider.Eid, ser.Provider.ProviderID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\texistingChannel.Key = ser.Provider.AccessToken\n\terr = model.UpdateChannel(existingChannel)\n\treturn err\n}\n\nfunc (ser *CozeService) CheckAndRefreshToken() (ok bool, err error) {\n\t// coze-studio uses fixed AccessToken, no need to refresh\n\tif ser.Provider.ProviderType == model.ProviderTypeCozeStudio {\n\t\treturn false, nil\n\t}\n\n\tif ser.Provider.ExpiresIn <= time.Now().Unix() {\n\t\tlogger.SysLogf(\"Coze RefreshToken: eid = %d\", ser.Provider.Eid)\n\t\terr := ser.HandlerAccessTokenByRefreshToken()\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\treturn true, nil\n\t}\n\treturn false, nil\n}\n\nfunc (ser *CozeService) GetAllWorkspace() ([]*coze.Workspace, error) {\n\tlogger.SysLogf(\"CozeService.GetAllWorkspace: Using provider - ID: %d, Name: %s, Type: %d, AccessToken: %s\",\n\t\tser.Provider.ProviderID, ser.Provider.Name, ser.Provider.ProviderType,\n\t\tser.Provider.AccessToken[:min(len(ser.Provider.AccessToken), 20)]+\"...\")\n\n\t_, err := ser.CheckAndRefreshToken()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tapi, err := ser.GetCozeApiSdk()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar config model.CozeConfig\n\terr = json.Unmarshal([]byte(ser.Provider.Configs), &config)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar allWorkspaces []*coze.Workspace\n\tpage := 1\n\tpageSize := 50\n\n\tfor {\n\t\tif page > 20 {\n\t\t\tbreak\n\t\t}\n\t\tlogger.SysLogf(\"CozeService.GetAllWorkspace: Fetching page %d for provider %d\", page, ser.Provider.ProviderID)\n\t\tworkspacesResp, err := api.GetWorkspaces(&ser.Provider, page, pageSize)\n\t\tif err != nil {\n\t\t\tlogger.SysLogf(\"CozeService.GetAllWorkspace: Error fetching workspaces for provider %d on page %d: %v\", ser.Provider.ProviderID, page, err)\n\t\t\treturn nil, err\n\t\t}\n\t\tlogger.SysLogf(\"CozeService.GetAllWorkspace: Got %d workspaces on page %d for provider %d\", len(workspacesResp.Workspaces), page, ser.Provider.ProviderID)\n\t\tif len(workspacesResp.Workspaces) == 0 {\n\t\t\tbreak\n\t\t}\n\t\tfor _, workspace := range workspacesResp.Workspaces {\n\t\t\tallWorkspaces = append(allWorkspaces, &workspace)\n\t\t}\n\t\tpage++\n\t}\n\n\tlogger.SysLogf(\"CozeService.GetAllWorkspace: Total workspaces found for provider %d: %d\", ser.Provider.ProviderID, len(allWorkspaces))\n\treturn allWorkspaces, nil\n}\n\nfunc (ser *CozeService) GetAllBot(workspaceId string) ([]*coze.Bot, error) {\n\t// 使用API工具类中的认证检查方式\n\tapi, err := ser.GetCozeApiSdk()\n\tif err != nil {\n\t\tlogger.SysErrorf(\"GetCozeApiSdk failed: %v\", err)\n\t\treturn nil, err\n\t}\n\n\t// 通过API工具类检查和刷新token\n\tif err := api.RefreshTokenIfNeeded(&ser.Provider); err != nil {\n\t\tlogger.SysErrorf(\"RefreshTokenIfNeeded failed: %v\", err)\n\t\treturn nil, err\n\t}\n\n\tvar config db_model.CozeConfig\n\terr = json.Unmarshal([]byte(ser.Provider.Configs), &config)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"Failed to unmarshal config: %v\", err)\n\t\treturn nil, err\n\t}\n\n\tlogger.SysLogf(\"Getting bots for workspace: %s, page_size: %d\", workspaceId, 50)\n\n\tvar allBots []*coze.Bot\n\tpage := 1\n\tpageSize := 50\n\n\tfor {\n\t\tif page > 20 {\n\t\t\tlogger.SysLogf(\"Reached max page limit: %d\", page)\n\t\t\tbreak\n\t\t}\n\n\t\tlogger.SysLogf(\"Fetching page %d for workspace: %s\", page, workspaceId)\n\t\t// 调整参数顺序，确保与API定义一致\n\t\tbotsResp, err := api.GetPublishedBots(&ser.Provider, workspaceId, page, pageSize)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"GetPublishedBots failed for workspace %s, page %d: %v\", workspaceId, page, err)\n\t\t\treturn nil, err\n\t\t}\n\n\t\tlogger.SysLogf(\"Fetched %d bots for workspace %s on page %d\", len(botsResp.SpaceBots), workspaceId, page)\n\n\t\tif len(botsResp.SpaceBots) == 0 {\n\t\t\tlogger.SysLogf(\"No more bots found for workspace %s\", workspaceId)\n\t\t\tbreak\n\t\t}\n\n\t\tfor _, bot := range botsResp.SpaceBots {\n\t\t\tlogger.SysLogf(\"Name: %s, icon: %s\", bot.BotName, bot.IconURL)\n\t\t\tallBots = append(allBots, &bot)\n\t\t}\n\n\t\t// 如果返回的记录数小于分页大小，说明已经到达最后一页\n\t\tif len(botsResp.SpaceBots) < pageSize {\n\t\t\tlogger.SysLogf(\"Reached last page for workspace %s\", workspaceId)\n\t\t\tbreak\n\t\t}\n\t\tpage++\n\t}\n\n\tlogger.SysLogf(\"Total bots fetched for workspace %s: %d\", workspaceId, len(allBots))\n\treturn allBots, nil\n}\n\n// CacheBotIconWithUploadFile 使用UploadFile表缓存bot图标\nfunc (ser *CozeService) CacheBotIconWithUploadFile(botID string, iconURL string, eid int64) (string, error) {\n\t// 清理URL，只保留?之前的部分（去除查询参数）\n\tcleanedIconURL := iconURL\n\tif idx := strings.Index(iconURL, \"?\"); idx != -1 {\n\t\tcleanedIconURL = iconURL[:idx]\n\t}\n\n\t// 计算清理后URL的哈希值\n\turlHash := fmt.Sprintf(\"%x\", md5.Sum([]byte(cleanedIconURL)))\n\n\t// 检查UploadFile表中是否已存在该URL的记录\n\texistingFile := ser.findUploadFileByHash(urlHash)\n\tif existingFile != nil {\n\t\t// 已存在，直接返回预览URL\n\t\treturn existingFile.GetPreviewFullUrl(), nil\n\t}\n\n\t// 不存在，需要下载并保存图标\n\tvar iconData []byte\n\tvar err error\n\tfor i := 0; i < 3; i++ {\n\t\ticonData, err = ser.downloadIcon(iconURL)\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tlogger.SysLogf(\"下载图标失败，第 %d 次重试: %v\", i+1, err)\n\t\ttime.Sleep(200 * time.Millisecond)\n\t}\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"下载图标失败: %w\", err)\n\t}\n\n\t// 获取文件扩展名\n\text := path.Ext(cleanedIconURL)\n\tif ext == \"\" {\n\t\t// 尝试从Content-Type获取扩展名\n\t\t// 这里简化处理，直接默认使用png\n\t\text = \".png\"\n\t}\n\n\t// 生成previewKey\n\tpreviewKey, err := db_model.GetPreviewKey(urlHash, ext)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"生成预览键失败: %w\", err)\n\t}\n\n\t// 保存新文件到存储系统\n\tfileKey := db_model.GetFileKey(fmt.Sprintf(\"coze_bot_%s_icon%s\", botID, ext), 0, 0)\n\tif err := storage.StorageInstance.Save(iconData, fileKey); err != nil {\n\t\treturn \"\", fmt.Errorf(\"保存图标文件失败: %w\", err)\n\t}\n\n\t// 创建UploadFile记录\n\tuploadFile := &db_model.UploadFile{\n\t\tFileName:   fmt.Sprintf(\"coze_bot_%s_icon%s\", botID, ext),\n\t\tKey:        fileKey,\n\t\tEid:        eid,\n\t\tUserID:     0, // 系统文件\n\t\tSize:       int64(len(iconData)),\n\t\tExtension:  ext,\n\t\tMimeType:   http.DetectContentType(iconData),\n\t\tHash:       urlHash, // 使用URL哈希\n\t\tPreviewKey: previewKey,\n\t}\n\n\tif err := uploadFile.Save(); err != nil {\n\t\t// 如果保存记录失败，删除已上传的文件\n\t\tstorage.StorageInstance.Delete(fileKey)\n\t\treturn \"\", fmt.Errorf(\"保存上传文件记录失败: %w\", err)\n\t}\n\n\treturn uploadFile.GetPreviewFullUrl(), nil\n}\n\n// findUploadFileByHash 根据哈希查找UploadFile记录\nfunc (ser *CozeService) findUploadFileByHash(hash string) *db_model.UploadFile {\n\tvar uploadFile db_model.UploadFile\n\tif err := db_model.DB.Where(\"hash = ?\", hash).First(&uploadFile).Error; err != nil {\n\t\tif err.Error() == \"record not found\" {\n\t\t\treturn nil\n\t\t}\n\t\tlogger.SysErrorf(\"查询UploadFile失败: %v\", err)\n\t\treturn nil\n\t}\n\treturn &uploadFile\n}\n\n// downloadIcon 下载图标文件\nfunc (ser *CozeService) downloadIcon(iconURL string) ([]byte, error) {\n\t// 创建HTTP客户端\n\tclient := &http.Client{\n\t\tTimeout: 30 * time.Second,\n\t}\n\n\t// 创建HTTP请求\n\treq, err := http.NewRequest(\"GET\", iconURL, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"创建请求失败: %w\", err)\n\t}\n\n\t// 设置User-Agent避免被拦截\n\treq.Header.Set(\"User-Agent\", \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36\")\n\n\tif ser.Provider.AccessToken != \"\" {\n\t\tlogger.SysLogf(\"添加认证头到图标请求\")\n\t\treq.Header.Set(\"Authorization\", \"Bearer \"+ser.Provider.AccessToken)\n\t} else {\n\t\tlogger.SysLogf(\"警告：没有AccessToken可用于图标请求\")\n\t}\n\n\tlogger.SysLogf(\"下载Coze图标，URL: %s\", iconURL)\n\n\t// 发送HTTP请求\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"下载图标失败: %w\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\t// 检查响应状态码\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn nil, fmt.Errorf(\"下载图标失败，状态码: %d\", resp.StatusCode)\n\t}\n\n\t// 读取响应内容\n\tdata, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取响应内容失败: %w\", err)\n\t}\n\n\treturn data, nil\n}\n\n// UpdateCozeChannel asynchronously updates the Coze channel's model list with new bot IDs.\n// It ensures no duplicate bot IDs are added to the channel's models.\n// The update process runs in a separate goroutine to avoid blocking the main execution.\n// Parameters:\n//   - botIds: slice of bot IDs to be added to the channel's model list\n//\n// Returns:\n//   - error: returns nil as the update process runs asynchronously\nfunc (ser *CozeService) UpdateCozeChannel(botIds []string, provider *model.Provider) error {\n\tgo func() {\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tlogger.SysErrorf(\"Panic in UpdateCozeChannel: %v\", r)\n\t\t\t}\n\t\t}()\n\n\t\t// Get the existing channel for the current enterprise ID with type Coze (34)\n\t\texistingChannel, err := model.GetFirstChannelByEidAndProviderType(ser.Provider.Eid, int64(channeltype.Coze), provider.ProviderID)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"Failed to get Channel: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\t// Parse existing models and store them in a map for deduplication\n\t\texistingModels := make(map[string]bool)\n\t\tif existingChannel.Models != \"\" {\n\t\t\tfor _, model := range strings.Split(existingChannel.Models, \",\") {\n\t\t\t\tmodel = strings.TrimSpace(model)\n\t\t\t\tif model != \"\" {\n\t\t\t\t\texistingModels[model] = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Process new bot IDs and add them if they don't exist\n\t\tvar updatedBotIds []string\n\t\tfor _, botId := range botIds {\n\t\t\tif botId == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tformattedBotId := \"bot-\" + botId\n\t\t\tif !existingModels[formattedBotId] {\n\t\t\t\tupdatedBotIds = append(updatedBotIds, formattedBotId)\n\t\t\t\texistingModels[formattedBotId] = true // Mark as added to prevent duplicates\n\t\t\t}\n\t\t}\n\n\t\t// If no new bot IDs to add, return early\n\t\tif len(updatedBotIds) == 0 {\n\t\t\tlogger.SysLogf(\"No new bot IDs to add\")\n\t\t\treturn\n\t\t}\n\n\t\t// Rebuild the complete bot IDs list from the map to ensure uniqueness\n\t\tvar allBotIds []string\n\t\tfor model := range existingModels {\n\t\t\tallBotIds = append(allBotIds, model)\n\t\t}\n\n\t\t// Prepare channel update with default configuration\n\t\tconfigStr := `{\"region\":\"\",\"sk\":\"\",\"ak\":\"\",\"user_id\":\"53AIHub\",\"vertex_ai_project_id\":\"\",\"vertex_ai_adc\":\"\"}`\n\t\tbaseURL := ser.Provider.GetBaseURLByProviderType()\n\n\t\t// Create channel object with updated information\n\t\tchannel := &model.Channel{\n\t\t\tChannelID:  existingChannel.ChannelID,\n\t\t\tEid:        ser.Provider.Eid,\n\t\t\tName:       ser.Provider.Name,\n\t\t\tKey:        ser.Provider.AccessToken,\n\t\t\tType:       channeltype.Coze,\n\t\t\tProviderID: ser.Provider.ProviderID,\n\t\t\tBaseURL:    &baseURL,\n\t\t\tModels:     strings.Join(allBotIds, \",\"),\n\t\t\tStatus:     model.ChannelStatusEnabled,\n\t\t\tConfig:     configStr,\n\t\t}\n\n\t\t// Update the channel in the database\n\t\tif err := model.UpdateChannel(channel); err != nil {\n\t\t\tlogger.SysErrorf(\"Failed to update Channel: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tlogger.SysLogf(\"Successfully updated Channel %d, added %d new bot IDs\", channel.ChannelID, len(updatedBotIds))\n\t}()\n\n\treturn nil\n}\n"
  },
  {
    "path": "api/service/enterprise_config_service.go",
    "content": "package service\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"net/smtp\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/common/utils/env\"\n\t\"github.com/53AI/53AIHub/model\"\n)\n\n// ConfigContent 配置内容结构\ntype ConfigContent struct {\n\tEnable bool `json:\"enable\"`\n\t// 其他配置项可以在这里添加\n}\n\n// SmtpConfig SMTP配置结构体\ntype SmtpConfig struct {\n\tUsername string `json:\"username\"`\n\tPassword string `json:\"password\"`\n\tFrom     string `json:\"from\"`\n\tHost     string `json:\"host\"`\n\tPort     string `json:\"port\"`\n\tIsSSL    bool   `json:\"is_ssl\"`\n}\n\n// UnmarshalJSON 实现自定义的JSON解析，以支持多种字段名\nfunc (s *SmtpConfig) UnmarshalJSON(data []byte) error {\n\tvar raw map[string]interface{}\n\tif err := json.Unmarshal(data, &raw); err != nil {\n\t\treturn err\n\t}\n\n\t// 处理Username字段，支持smtp_username和email_account两种字段名\n\tif username, ok := raw[\"smtp_username\"]; ok {\n\t\ts.Username = getStringValue(username)\n\t} else if username, ok := raw[\"email_account\"]; ok {\n\t\ts.Username = getStringValue(username)\n\t}\n\n\t// 处理Password字段，支持smtp_password和email_password两种字段名\n\tif password, ok := raw[\"smtp_password\"]; ok {\n\t\ts.Password = getStringValue(password)\n\t} else if password, ok := raw[\"email_password\"]; ok {\n\t\ts.Password = getStringValue(password)\n\t}\n\n\t// 处理From字段，支持smtp_from和addresser_email两种字段名\n\tif from, ok := raw[\"smtp_from\"]; ok {\n\t\ts.From = getStringValue(from)\n\t} else if from, ok := raw[\"addresser_email\"]; ok {\n\t\ts.From = getStringValue(from)\n\t}\n\n\t// 处理Host字段，支持smtp_host和server两种字段名\n\tif host, ok := raw[\"smtp_host\"]; ok {\n\t\ts.Host = getStringValue(host)\n\t} else if host, ok := raw[\"server\"]; ok {\n\t\ts.Host = getStringValue(host)\n\t}\n\n\t// 处理Port字段，支持smtp_port和port两种字段名\n\tif port, ok := raw[\"smtp_port\"]; ok {\n\t\ts.Port = getStringValue(port)\n\t} else if port, ok := raw[\"port\"]; ok {\n\t\ts.Port = getStringValue(port)\n\t}\n\n\t// 处理IsSSL字段，支持smtp_is_ssl和openTLS两种字段名\n\tif isSSL, ok := raw[\"smtp_is_ssl\"]; ok {\n\t\ts.IsSSL = getBoolValue(isSSL)\n\t} else if isSSL, ok := raw[\"openTLS\"]; ok {\n\t\ts.IsSSL = getBoolValue(isSSL)\n\t}\n\n\treturn nil\n}\n\n// getStringValue 从interface{}获取字符串值\nfunc getStringValue(value interface{}) string {\n\tif value == nil {\n\t\treturn \"\"\n\t}\n\t\n\tswitch v := value.(type) {\n\tcase string:\n\t\treturn v\n\tcase float64:\n\t\treturn strconv.FormatFloat(v, 'f', -1, 64)\n\tcase bool:\n\t\treturn strconv.FormatBool(v)\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\n// getBoolValue 从interface{}获取布尔值\nfunc getBoolValue(value interface{}) bool {\n\tif value == nil {\n\t\treturn false\n\t}\n\t\n\tswitch v := value.(type) {\n\tcase bool:\n\t\treturn v\n\tcase string:\n\t\tb, _ := strconv.ParseBool(v)\n\t\treturn b\n\tcase float64:\n\t\treturn v != 0\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// GetEnterpriseConfigs 获取所有企业配置\nfunc GetEnterpriseConfigs(eid int64) ([]model.EnterpriseConfig, error) {\n\tvar configs []model.EnterpriseConfig\n\terr := model.DB.Where(\"eid = ?\", eid).Find(&configs).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(configs) == 0 {\n\t\t// 如果没有配置，则根据现有类型，返回默认关的空配置\n\t\tfor _, configType := range model.EnterpriseConfigTypes {\n\t\t\tconfigs = append(configs, model.EnterpriseConfig{\n\t\t\t\tEID:     eid,\n\t\t\t\tType:    configType,\n\t\t\t\tEnabled: false,\n\t\t\t\tContent: `{}`,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn configs, nil\n}\n\n// GetEnterpriseConfigByType 获取单个企业配置详情\nfunc GetEnterpriseConfigByType(eid int64, configType string) (*model.EnterpriseConfig, error) {\n\tvar config model.EnterpriseConfig\n\terr := model.DB.Where(\"eid = ? AND type = ?\", eid, configType).First(&config).Error\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &config, nil\n}\n\n/*\nSaveEnterpriseConfig 保存或更新单个企业配置。\n\n行为：\n- 若当前 EID 下不存在指定 type 的配置，则创建一条新记录（content 与 enabled 使用传入值）。\n- 若已存在，则更新该记录的 Content 与 Enabled 字段并保存。\n\n返回值：\n- 成功返回保存后的 *model.EnterpriseConfig\n- 失败返回 error\n*/\nfunc SaveEnterpriseConfig(eid int64, configType string, content string, enabled bool) (*model.EnterpriseConfig, error) {\n\tvar config model.EnterpriseConfig\n\terr := model.DB.Where(\"eid = ? AND type = ?\", eid, configType).First(&config).Error\n\n\tif err != nil {\n\t\t// 未找到配置：创建新记录\n\t\tconfig = model.EnterpriseConfig{\n\t\t\tEID:     eid,\n\t\t\tType:    configType,\n\t\t\tContent: content,\n\t\t\tEnabled: enabled,\n\t\t}\n\t\terr = model.DB.Create(&config).Error\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t} else {\n\t\t// 找到配置：更新 Content 与 Enabled 后保存\n\t\tconfig.Content = content\n\t\tconfig.Enabled = enabled\n\t\terr = model.DB.Save(&config).Error\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn &config, nil\n}\n\n// IsEnterpriseConfigEnabled 检查企业配置是否启用\nfunc IsEnterpriseConfigEnabled(eid int64, configType string) (bool, error) {\n\tconfig, err := GetEnterpriseConfigByType(eid, configType)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\tif config.Content == \"\" {\n\t\treturn false, nil\n\t}\n\n\treturn config.Enabled, nil\n}\n\n// ToggleEnterpriseConfig 开关某个企业配置\nfunc ToggleEnterpriseConfig(eid int64, configType string) (bool, error) {\n\t// 获取当前配置\n\tconfig, err := GetEnterpriseConfigByType(eid, configType)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\t// 切换状态\n\tconfig.Enabled = !config.Enabled\n\n\t// 保存更新后的配置\n\t_, err = SaveEnterpriseConfig(eid, configType, config.Content, config.Enabled)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn config.Enabled, nil\n}\n\n// GetSmtpConfig 获取 SMTP 配置\n// 优先从 model.EnterpriseConfig 中读取，如果不存在则从 env 中读取，如果不存在，则报错\nfunc GetSmtpConfig(eid int64) (smtp.Auth, string, string, int, bool, error) {\n\tconfig, err := GetEnterpriseConfigByType(eid, model.EnterpriseConfigTypeSMTP)\n\tif err != nil {\n\t\t// 数据库和环境变量中都没有配置，使用环境变量默认值\n\t\treturn GetSmtpConfigFromEnv()\n\t}\n\n\t// 解析 SMTP 配置内容\n\tvar smtpConfig SmtpConfig\n\tif err := json.Unmarshal([]byte(config.Content), &smtpConfig); err != nil {\n\t\treturn nil, \"\", \"\", 0, false, err\n\t}\n\n\tfrom := smtpConfig.From\n\tauth := smtp.PlainAuth(\n\t\t\"\",\n\t\tsmtpConfig.Username,\n\t\tsmtpConfig.Password,\n\t\tsmtpConfig.Host,\n\t)\n\n\t// 使用配置中的值\n\thost := smtpConfig.Host\n\tvar port int\n\tif smtpConfig.Port != \"\" {\n\t\tif p, err := strconv.Atoi(smtpConfig.Port); err == nil {\n\t\t\tport = p\n\t\t}\n\t}\n\n\tisSsl := smtpConfig.IsSSL\n\n\treturn auth, from, host, port, isSsl, nil\n}\n\nfunc GetSmtpConfigFromEnv() (smtp.Auth, string, string, int, bool, error) {\n\t// 解析失败，使用环境变量默认值\n\tfrom := env.String(\"SMTP_FROM\", \"\")\n\tauth := smtp.PlainAuth(\n\t\t\"\",\n\t\tenv.String(\"SMTP_USERNAME\", \"\"),\n\t\tenv.String(\"SMTP_PASSWORD\", \"\"),\n\t\tenv.String(\"SMTP_HOST\", \"\"),\n\t)\n\thost := env.String(\"SMTP_HOST\", \"smtp.example.com\")\n\tport := env.Int(\"SMTP_PORT\", 587)\n\tisSsl := env.Bool(\"SMTP_IS_SSL\", false)\n\n\tif from == \"\" || auth == nil || host == \"\" || port == 0 {\n\t\treturn nil, \"\", \"\", 0, false, errors.New(\"SMTP config is incomplete\")\n\t}\n\treturn auth, from, host, port, isSsl, nil\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/53AI/adaptor.go",
    "content": "package adaptor53AI\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"net/textproto\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/storage\"\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\ntype Adaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *Adaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\nfunc GetBaseURL(baseUrl string) string {\n\tbaseUrl = strings.TrimSuffix(baseUrl, \"/\")\n\tbaseUrl = strings.TrimSuffix(baseUrl, \"/v3\")\n\treturn baseUrl\n}\n\nfunc (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbaseUrl := GetBaseURL(meta.BaseURL)\n\treturn fmt.Sprintf(\"%s/v3/chat-messages\", baseUrl), nil\n}\n\nfunc (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\tcustom.SetupCommonRequestHeader(c, req, meta)\n\tbotID := strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treq.Header.Set(\"Bot-Id\", botID)\n\treturn nil\n}\n\nfunc (a *Adaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\trequest.User = a.meta.Config.UserID\n\treturn ConvertRequest(*request, a.meta, a.CustomConfig), nil\n}\n\nfunc ConvertRequest(textRequest model.GeneralOpenAIRequest, meta *meta.Meta, customConfig *custom.CustomConfig) *Request {\n\tmodelName := \"bot-\" + strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\tchannelID := meta.ChannelId\n\tconversationID := customConfig.ConversationId\n\tai53Request := Request{\n\t\tConversationId: customConfig.ConversationId,\n\t\tUser:           customConfig.UserId,\n\t\tResponseMode:   ResponseModeBlock,\n\t\tInputs:         struct{}{},\n\t}\n\tif textRequest.Stream {\n\t\tai53Request.ResponseMode = ResponseModeStream\n\t}\n\tqueryStr := \"\"\n\tfor i, message := range textRequest.Messages {\n\t\t// upload files\n\t\tif i == len(textRequest.Messages)-1 {\n\t\t\tqueryStr = message.StringContent()\n\t\t\tcontinue\n\t\t}\n\t}\n\n\tai53Request.Query = queryStr\n\tvar files []File\n\tvar contentObjs []db_model.ObjectStringContent\n\tif err := json.Unmarshal([]byte(queryStr), &contentObjs); err == nil {\n\t\tif len(contentObjs) > 0 {\n\t\t\ttargetStr := \"\"\n\t\t\tfor _, contentObj := range contentObjs {\n\t\t\t\tif contentObj.Type == \"text\" {\n\t\t\t\t\tif targetStr == \"\" {\n\t\t\t\t\t\ttargetStr = contentObj.Content\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif contentObj.Type != \"image\" {\n\t\t\t\t\tlogger.SysError(\"File types are not supported temporarily\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tuoloadFile := contentObj.GetUploadFile()\n\t\t\t\tif uoloadFile == nil {\n\t\t\t\t\tlogger.SysError(\"file not found\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfileMapping := uoloadFile.GetChannelFileMapping(channelID, modelName)\n\t\t\t\tif fileMapping == nil {\n\t\t\t\t\tfileMapping = &db_model.ChannelFileMapping{}\n\t\t\t\t\terr := AI53UploadFile(meta, uoloadFile, fileMapping, conversationID)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"upload file failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\terr = db_model.CreateChannelFileMapping(fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"create file mapping failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t} else if helper.GetTimestamp() > fileMapping.ExpirationTime {\n\t\t\t\t\terr := AI53UploadFile(meta, uoloadFile, fileMapping, conversationID)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"update file failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\terr = db_model.UpdateChannelFileMapping(fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"update file mapping failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfiles = append(files, File{\n\t\t\t\t\tUploadFileID:   fileMapping.ChannelFileID,\n\t\t\t\t\tType:           \"image\",\n\t\t\t\t\tTransferMethod: TransferMethodLocalFile,\n\t\t\t\t\tUrl:            \"\",\n\t\t\t\t})\n\n\t\t\t}\n\t\t\tai53Request.Files = files\n\t\t\tai53Request.Query = targetStr\n\t\t}\n\t}\n\t// logger.SysLogf(\"ai53Request: %+v\", ai53Request)\n\treturn &ai53Request\n}\n\nfunc (a *Adaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\treturn custom.DoRequestHelper(a, c, meta, requestBody)\n}\n\nfunc (a *Adaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\treturn request, nil\n}\n\nfunc (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\tvar responseText *string\n\tvar channelConversationId string\n\tif meta.IsStream {\n\t\terr, responseText, channelConversationId = StreamHandler(c, resp)\n\t} else {\n\t\terr, responseText, channelConversationId = Handler(c, resp, meta.PromptTokens, meta.ActualModelName)\n\t}\n\tif responseText != nil {\n\t\tusage = openai.ResponseText2Usage(*responseText, meta.ActualModelName, meta.PromptTokens)\n\t} else {\n\t\tusage = &model.Usage{}\n\t}\n\tusage.PromptTokens = meta.PromptTokens\n\tusage.TotalTokens = usage.PromptTokens + usage.CompletionTokens\n\ta.CustomConfig.ConversationId = channelConversationId\n\treturn\n}\n\nfunc Handler(c *gin.Context, resp *http.Response, promptTokens int, modelName string) (*model.ErrorWithStatusCode, *string, string) {\n\tchannelConversationId := \"\"\n\tresponseBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"read_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\terr = resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\tvar ai53Response BlockResponse\n\terr = json.Unmarshal(responseBody, &ai53Response)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"unmarshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\tfullTextResponse := ResponseAi53OpenAI(&ai53Response)\n\tfullTextResponse.Model = modelName\n\tjsonResponse, err := json.Marshal(fullTextResponse)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"marshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\tc.Writer.Header().Set(\"Content-Type\", \"application/json\")\n\tc.Writer.WriteHeader(resp.StatusCode)\n\t_, err = c.Writer.Write(jsonResponse)\n\tvar responseText string\n\tif len(fullTextResponse.Choices) > 0 {\n\t\tresponseText = fullTextResponse.Choices[0].Message.StringContent()\n\t}\n\tchannelConversationId = ai53Response.ConversationID\n\treturn nil, &responseText, channelConversationId\n}\n\nfunc ResponseAi53OpenAI(ai53Response *BlockResponse) *openai.TextResponse {\n\tvar responseText string\n\tresponseText = ai53Response.Answer\n\tchoice := openai.TextResponseChoice{\n\t\tIndex: 0,\n\t\tMessage: model.Message{\n\t\t\tRole:    \"assistant\",\n\t\t\tContent: responseText,\n\t\t\tName:    nil,\n\t\t},\n\t\tFinishReason: \"stop\",\n\t}\n\tfullTextResponse := openai.TextResponse{\n\t\tId:      fmt.Sprintf(\"chatcmpl-%s\", ai53Response.ConversationID),\n\t\tModel:   \"53ai-bot\",\n\t\tObject:  \"chat.completion\",\n\t\tCreated: helper.GetTimestamp(),\n\t\tChoices: []openai.TextResponseChoice{choice},\n\t}\n\treturn &fullTextResponse\n}\n\nfunc (a *Adaptor) GetModelList() []string {\n\treturn ModelList\n}\n\nfunc (a *Adaptor) GetChannelName() string {\n\treturn \"53AI\"\n}\n\nfunc AI53UploadFile(meta *meta.Meta, uploadFile *db_model.UploadFile, fileMapping *db_model.ChannelFileMapping, conversationID string) error {\n\turl := fmt.Sprintf(\"%s/v3/files/upload\", GetBaseURL(meta.BaseURL))\n\tlogger.SysLogf(\"开始上传文件到53AI - URL: %s\", url)\n\n\tfileContent, err := storage.StorageInstance.Load(uploadFile.Key)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"加载文件内容失败: %v, 文件Key: %s\", err, uploadFile.Key)\n\t\treturn err\n\t}\n\n\tlogger.SysLogf(\"文件内容加载成功 - 文件大小: %d bytes, 文件名: %s, MIME类型: %s\",\n\t\tlen(fileContent), uploadFile.FileName, uploadFile.MimeType)\n\n\tbody := &bytes.Buffer{}\n\twriter := multipart.NewWriter(body)\n\n\t// Add form fields\n\terr = writer.WriteField(\"user\", meta.Config.UserID)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"写入user字段失败: %v\", err)\n\t\treturn err\n\t}\n\n\tlogger.SysLogf(\"User字段写入成功: %s\", meta.Config.UserID)\n\n\tvar quoteEscaper = strings.NewReplacer(\"\\\\\", \"\\\\\\\\\", `\"`, \"\\\\\\\"\")\n\n\t// Add file part\n\th := make(textproto.MIMEHeader)\n\th.Set(\"Content-Disposition\",\n\t\tfmt.Sprintf(`form-data; name=\"%s\"; filename=\"%s\"; type=\"%s\"`,\n\t\t\tquoteEscaper.Replace(\"file\"),\n\t\t\tquoteEscaper.Replace(uploadFile.FileName),\n\t\t\tquoteEscaper.Replace(uploadFile.MimeType)))\n\th.Set(\"Content-Type\", uploadFile.MimeType)\n\n\tlogger.SysLogf(\"文件头部信息设置完成 - Content-Disposition: %s, Content-Type: %s\",\n\t\th.Get(\"Content-Disposition\"), h.Get(\"Content-Type\"))\n\n\tpart, err := writer.CreatePart(h)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"创建文件部分失败: %v\", err)\n\t\treturn err\n\t}\n\n\t_, err = io.Copy(part, bytes.NewReader(fileContent))\n\tif err != nil {\n\t\tlogger.SysErrorf(\"复制文件内容失败: %v\", err)\n\t\treturn err\n\t}\n\n\tlogger.SysLogf(\"文件内容复制成功\")\n\n\terr = writer.Close()\n\tif err != nil {\n\t\tlogger.SysErrorf(\"关闭writer失败: %v\", err)\n\t\treturn err\n\t}\n\n\treq, err := http.NewRequest(\"POST\", url, body)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"创建HTTP请求失败: %v\", err)\n\t\treturn err\n\t}\n\n\treq.Header.Set(\"Content-Type\", writer.FormDataContentType())\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\n\t// 统一的Bot-Id提取逻辑，支持 bot- 和 workflow- 前缀\n\tvar botID string\n\tif strings.HasPrefix(meta.ActualModelName, \"workflow-\") {\n\t\tbotID = strings.TrimPrefix(meta.ActualModelName, \"workflow-\")\n\t} else if strings.HasPrefix(meta.ActualModelName, \"bot-\") {\n\t\tbotID = strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\t} else {\n\t\tbotID = meta.ActualModelName\n\t}\n\treq.Header.Set(\"Bot-Id\", botID)\n\n\tlogger.SysLogf(\"请求头设置完成 - Content-Type: %s, Authorization: Bearer ****, Bot-Id: %s\",\n\t\twriter.FormDataContentType(), botID)\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"发送HTTP请求失败: %v\", err)\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tlogger.SysLogf(\"HTTP请求发送完成 - 状态码: %d\", resp.StatusCode)\n\n\tif resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {\n\t\t// 读取响应体以便记录错误信息\n\t\trespBody, _ := io.ReadAll(resp.Body)\n\t\tlogger.SysErrorf(\"文件上传失败 - 状态码: %d, 响应体: %s\", resp.StatusCode, string(respBody))\n\t\treturn fmt.Errorf(\"upload failed with status: %d, response: %s\", resp.StatusCode, string(respBody))\n\t}\n\n\tvar result UploadResponse\n\terr = json.NewDecoder(resp.Body).Decode(&result)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"解析响应体失败: %v\", err)\n\t\treturn err\n\t}\n\n\tlogger.SysLogf(\"响应体解析成功 - 文件ID: %s\", result.ID)\n\n\tfileMapping.ChannelFileID = result.ID\n\tfileMapping.Eid = uploadFile.Eid\n\tfileMapping.FileID = uploadFile.ID\n\tfileMapping.ChannelID = meta.ChannelId\n\tfileMapping.Model = \"bot-\" + strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\tfileMapping.ExpirationTime = helper.GetTimestamp() + 3600*24*30\n\tjsonResult, err := json.Marshal(result)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"序列化响应结果失败: %v\", err)\n\t\treturn err\n\t}\n\tfileMapping.ApiResponse = string(jsonResult)\n\n\tlogger.SysLogf(\"文件映射信息设置完成 - ChannelFileID: %s, FileID: %d, ChannelID: %d, Model: %s\",\n\t\tfileMapping.ChannelFileID, fileMapping.FileID, fileMapping.ChannelID, fileMapping.Model)\n\n\treturn nil\n}\n\nfunc Get53AIFileType(mimeType string, extension string) string {\n\t// 图片类型 - 与 chat 保持一致，优先支持图片\n\tif strings.HasPrefix(mimeType, \"image/\") {\n\t\treturn \"image\"\n\t}\n\n\t// 音频类型 - 支持的音频格式\n\tif strings.HasPrefix(mimeType, \"audio/\") {\n\t\text := strings.ToLower(extension)\n\t\tsupportedAudio := []string{\".mp3\", \".m4a\", \".wav\", \".webm\", \".amr\"}\n\t\tfor _, audioExt := range supportedAudio {\n\t\t\tif ext == audioExt {\n\t\t\t\treturn \"audio\"\n\t\t\t}\n\t\t}\n\t}\n\n\t// 视频类型 - 支持的视频格式\n\tif strings.HasPrefix(mimeType, \"video/\") {\n\t\text := strings.ToLower(extension)\n\t\tsupportedVideo := []string{\".mp4\", \".mov\", \".mpeg\", \".mpga\"}\n\t\tfor _, videoExt := range supportedVideo {\n\t\t\tif ext == videoExt {\n\t\t\t\treturn \"video\"\n\t\t\t}\n\t\t}\n\t}\n\n\t// 文档类型 - 根据 DIFY 文档支持的格式\n\text := strings.ToLower(extension)\n\tdocumentExts := []string{\".txt\", \".md\", \".markdown\", \".pdf\", \".html\", \".xlsx\", \".xls\", \".docx\", \".csv\", \".eml\", \".msg\", \".pptx\", \".ppt\", \".xml\", \".epub\"}\n\tfor _, docExt := range documentExts {\n\t\tif ext == docExt {\n\t\t\treturn \"document\"\n\t\t}\n\t}\n\n\t// 对于不在支持列表中的文件类型，返回 unsupported\n\t// 这样可以让上层代码决定如何处理\n\tlogger.SysLogf(\"🔍 检测到未明确支持的文件类型 - MIME: %s, Extension: %s\", mimeType, extension)\n\n\t// 其他类型归为 custom，但记录警告\n\treturn \"custom\"\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/53AI/constants.go",
    "content": "package adaptor53AI\n\nvar ModelList = []string{}\n"
  },
  {
    "path": "api/service/hub_adaptor/53AI/main.go",
    "content": "package adaptor53AI\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/common/render\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\nfunc StreamHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusCode, *string, string) {\n\tvar responseText string\n\tcreatedTime := helper.GetTimestamp()\n\tscanner := bufio.NewScanner(resp.Body)\n\t// 设置更大的缓冲区以处理大型响应 (1MB)\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\tscanner.Split(bufio.ScanLines)\n\tcommon.SetEventStreamHeaders(c)\n\tvar modelName string\n\n\tchannelConversationId := \"\"\n\tfor scanner.Scan() {\n\t\tdata := scanner.Text()\n\t\tif len(data) < 5 || !strings.HasPrefix(data, \"data:\") {\n\t\t\tcontinue\n\t\t}\n\t\tdata = strings.TrimPrefix(data, \"data:\")\n\t\tdata = strings.TrimSuffix(data, \"\\r\")\n\t\t// logger.SysLogf(\"53AI Stream Data: %s\\n\", data)\n\n\t\tvar ai53Response StreamResponse\n\t\terr := json.Unmarshal([]byte(data), &ai53Response)\n\t\tif err != nil {\n\t\t\tlogger.SysError(\"error unmarshalling stream response: \" + err.Error())\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse, _ := StreamResponseai53OpenAI(&ai53Response)\n\t\tif response == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse.Model = modelName\n\t\tresponse.Created = createdTime\n\n\t\terr = render.ObjectData(c, response)\n\t\tif err != nil {\n\t\t\tlogger.SysError(err.Error())\n\t\t}\n\t\tchannelConversationId = ai53Response.ConversationID\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\tlogger.SysError(\"error reading stream: \" + err.Error())\n\t}\n\n\trender.Done(c)\n\n\terr := resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\treturn nil, &responseText, channelConversationId\n}\n\nfunc StreamResponseai53OpenAI(ai53Response *StreamResponse) (*openai.ChatCompletionsStreamResponse, *Response) {\n\tvar response *Response\n\tvar stopReason string\n\tvar choice openai.ChatCompletionsStreamResponseChoice\n\n\t// Build content from answer and append_content for normal and error events alike.\n\tanswerStr := \"\"\n\tif ai53Response.Answer != \"\" {\n\t\tanswerStr = ai53Response.Answer\n\t}\n\tif ai53Response.AppendContents != nil && len(ai53Response.AppendContents) > 0 {\n\t\tfor _, appendContent := range ai53Response.AppendContents {\n\t\t\tif appendContent.Type == \"text\" {\n\t\t\t\tanswerStr += appendContent.Content\n\t\t\t}\n\t\t}\n\t}\n\n\t// If this is an error event but upstream didn't provide textual answer,\n\t// still emit a minimal content to ensure front-end receives a normal data chunk.\n\tif ai53Response.Event == \"error\" && strings.TrimSpace(answerStr) == \"\" {\n\t\t// keep it minimal and non-structured, as requested: treat as normal data\n\t\tanswerStr = \"Upstream Error: \\n\" + ai53Response.Message\n\t}\n\n\tchoice.Delta.Content = answerStr\n\tchoice.Delta.Role = \"assistant\"\n\n\tfinishReason := stopReasonAi53OpenAI(&stopReason)\n\tif finishReason != \"null\" {\n\t\tchoice.FinishReason = &finishReason\n\t}\n\n\tvar openaiResponse openai.ChatCompletionsStreamResponse\n\topenaiResponse.Object = \"chat.completion.chunk\"\n\topenaiResponse.Choices = []openai.ChatCompletionsStreamResponseChoice{choice}\n\topenaiResponse.Id = ai53Response.ConversationID\n\treturn &openaiResponse, response\n}\n\nfunc BlockingResponseai53OpenAI(ai53Response *BlockResponse) (*openai.ChatCompletionsStreamResponse, *Response) {\n\tvar response *Response\n\tvar choice openai.ChatCompletionsStreamResponseChoice\n\n\tif ai53Response.Answer != \"\" {\n\t\tchoice.Delta.Content = ai53Response.Answer\n\t}\n\tvar openaiResponse openai.ChatCompletionsStreamResponse\n\topenaiResponse.Object = \"chat.completion.chunk\"\n\topenaiResponse.Choices = []openai.ChatCompletionsStreamResponseChoice{choice}\n\topenaiResponse.Id = ai53Response.ConversationID\n\treturn &openaiResponse, response\n}\n\nfunc stopReasonAi53OpenAI(reason *string) string {\n\tif reason == nil {\n\t\treturn \"\"\n\t}\n\tswitch *reason {\n\tcase \"end_turn\":\n\t\treturn \"stop\"\n\tcase \"stop_sequence\":\n\t\treturn \"stop\"\n\tcase \"max_tokens\":\n\t\treturn \"length\"\n\tdefault:\n\t\treturn *reason\n\t}\n}\n\nconst (\n\tTransferMethodRemoteUrl = \"remote_url\"\n\tTransferMethodLocalFile = \"local_file\"\n)\n\ntype File struct {\n\tTransferMethod string `json:\"transfer_method\"`\n\tType           string `json:\"type\"`\n\tUrl            string `json:\"url\"`\n\tUploadFileID   string `json:\"upload_file_id\"`\n}\n\nconst (\n\tResponseModeStream = \"streaming\"\n\tResponseModeBlock  = \"blocking\"\n)\n\ntype Request struct {\n\tConversationId string      `json:\"conversation_id\"`\n\tUser           string      `json:\"user\"`\n\tQuery          string      `json:\"query\"`\n\tResponseMode   string      `json:\"response_mode\"`\n\tFiles          []File      `json:\"files\"`\n\tInputs         interface{} `json:\"inputs\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/53AI/model.go",
    "content": "package adaptor53AI\n\ntype StreamResponse struct {\n\tEvent          string          `json:\"event\"`\n\tConversationID string          `json:\"conversation_id\"`\n\tMessageID      string          `json:\"message_id\"`\n\tCreatedAt      int64           `json:\"created_at\"`\n\tTaskID         string          `json:\"task_id\"`\n\tID             string          `json:\"id\"`\n\tAnswer         string          `json:\"answer\"`\n\tMessage        string          `json:\"message\"`\n\tAppendContents []AppendContent `json:\"append_content,omitempty\"`\n}\n\ntype Response struct {\n\tConversationId string    `json:\"conversation_id,omitempty\"`\n\tMessages       []Message `json:\"messages,omitempty\"`\n\tCode           int       `json:\"code,omitempty\"`\n\tMsg            string    `json:\"msg,omitempty\"`\n\tMetadata       *Metadata `json:\"metadata,omitempty\"`\n}\n\ntype Message struct {\n\tRole        string `json:\"role\"`\n\tType        string `json:\"type\"`\n\tContent     string `json:\"content\"`\n\tContentType string `json:\"content_type\"`\n}\n\ntype BlockResponse struct {\n\tEvent          string    `json:\"event\"`\n\tTaskID         string    `json:\"task_id\"`\n\tID             string    `json:\"id\"`\n\tMessageID      string    `json:\"message_id\"`\n\tConversationID string    `json:\"conversation_id\"`\n\tCreatedAt      int64     `json:\"created_at\"`\n\tAnswer         string    `json:\"answer\"`\n\tMetadata       *Metadata `json:\"metadata\"`\n}\n\ntype AppendContent struct {\n\tContent string `json:\"content\"`\n\tType    string `json:\"type\"`\n}\n\ntype Metadata struct {\n\tUsage *Usage `json:\"usage\"`\n}\n\ntype Usage struct {\n\tPromptTokens        int     `json:\"prompt_tokens\"`\n\tPromptUnitPrice     string  `json:\"prompt_unit_price\"`\n\tPromptPriceUnit     string  `json:\"prompt_price_unit\"`\n\tPromptPrice         string  `json:\"prompt_price\"`\n\tCompletionTokens    int     `json:\"completion_tokens\"`\n\tCompletionUnitPrice string  `json:\"completion_unit_price\"`\n\tCompletionPriceUnit string  `json:\"completion_price_unit\"`\n\tCompletionPrice     string  `json:\"completion_price\"`\n\tTotalTokens         int     `json:\"total_tokens\"`\n\tTotalPrice          string  `json:\"total_price\"`\n\tCurrency            string  `json:\"currency\"`\n\tLatency             float64 `json:\"latency\"`\n}\n\ntype UploadResponse struct {\n\tID        string `json:\"id\"`\n\tName      string `json:\"name\"`\n\tSize      int64  `json:\"size\"`\n\tKey       string `json:\"key\"`\n\tExtension string `json:\"extension\"`\n\tMimeType  string `json:\"mime_type\"`\n\tCreatedBy string `json:\"created_by\"`\n\tCreatedAt int64  `json:\"created_at\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/53AI/workflow.go",
    "content": "package adaptor53AI\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\n// readCloser 简单的 ReadCloser 实现\ntype readCloser struct {\n\tio.Reader\n}\n\nfunc (rc *readCloser) Close() error {\n\treturn nil\n}\n\n// AI53WorkflowAdaptor 53AI 工作流适配器\ntype AI53WorkflowAdaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\n// AI53WorkflowRequest 53AI 工作流请求结构\ntype AI53WorkflowRequest struct {\n\tInputs       map[string]interface{} `json:\"inputs\"`        // 使用 inputs 而不是 variables\n\tResponseMode string                 `json:\"response_mode\"` // 使用 response_mode 而不是 stream\n\tUser         string                 `json:\"user\"`\n}\n\n// AI53WorkflowEvent 53AI 工作流事件结构 (精简版)\ntype AI53WorkflowEvent struct {\n\tEvent  string                 `json:\"event\"`\n\tTaskID string                 `json:\"task_id\"`\n\tData   map[string]interface{} `json:\"data\"`\n}\n\n// AI53WorkflowResponse 53AI 工作流完整响应结构\ntype AI53WorkflowResponse struct {\n\tTaskID    string                 `json:\"task_id\"`\n\tData      map[string]interface{} `json:\"data\"`\n\tCreatedAt int64                  `json:\"created_at\"`\n}\n\nfunc (a *AI53WorkflowAdaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\n// GetRequestURL 构建 53AI 工作流请求 URL (使用 v3 接口)\nfunc (a *AI53WorkflowAdaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbaseURL := meta.BaseURL\n\n\t// 去掉可能的 /v3 后缀以避免重复\n\tbaseURL = strings.TrimSuffix(baseURL, \"/v3\")\n\t// 确保 baseURL 不以 / 结尾\n\tbaseURL = strings.TrimSuffix(baseURL, \"/\")\n\n\treturn baseURL + \"/v3/workflows/run\", nil\n}\n\n// SetupRequestHeader 设置 53AI 工作流请求头 (包含 Bot-Id)\nfunc (a *AI53WorkflowAdaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\t// 53AI 特有的 Bot-Id 头\n\tbotId := a.extractBotId(meta.ActualModelName)\n\treq.Header.Set(\"Bot-Id\", botId)\n\n\treturn nil\n}\n\n// extractBotId 从模型名称中提取 Bot ID\nfunc (a *AI53WorkflowAdaptor) extractBotId(modelName string) string {\n\t// 去掉 \"workflow-\" 前缀\n\tif strings.HasPrefix(modelName, \"workflow-\") {\n\t\treturn strings.TrimPrefix(modelName, \"workflow-\")\n\t}\n\treturn modelName\n}\n\n// ConvertRequest 转换请求为 53AI 工作流格式\nfunc (a *AI53WorkflowAdaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\n\t// 提取工作流ID\n\tworkflowID := a.extractBotId(request.Model)\n\tlogger.SysLogf(\"53AI工作流请求 - WorkflowID: %s\", workflowID)\n\n\t// 构建 53AI 工作流请求\n\tai53Request := &AI53WorkflowRequest{\n\t\tInputs:       make(map[string]interface{}),\n\t\tResponseMode: \"streaming\", // 53AI 工作流使用流式模式\n\t\tUser:         a.getUserID(request),\n\t}\n\n\t// 处理消息转换为 variables\n\tif len(request.Messages) > 0 {\n\t\tlastMessage := request.Messages[len(request.Messages)-1]\n\n\t\t// 处理文本内容\n\t\tif lastMessage.StringContent() != \"\" {\n\t\t\tai53Request.Inputs[\"input\"] = lastMessage.StringContent()\n\t\t}\n\n\t\t// 处理文件内容 (使用与adaptor.go相同的File结构)\n\t\tif lastMessage.Content != nil {\n\t\t\tif contentArray, ok := lastMessage.Content.([]interface{}); ok {\n\t\t\t\tvar files []File\n\t\t\t\tfor _, contentItem := range contentArray {\n\t\t\t\t\tif contentObj, ok := contentItem.(db_model.ObjectStringContent); ok {\n\t\t\t\t\t\tif contentObj.Type == \"image\" || contentObj.Type == \"file\" {\n\t\t\t\t\t\t\t// 处理文件\n\t\t\t\t\t\t\tuploadFile := contentObj.GetUploadFile()\n\t\t\t\t\t\t\tif uploadFile != nil {\n\t\t\t\t\t\t\t\tfileMapping, err := a.processFile(uploadFile)\n\t\t\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t\t\tlogger.SysErrorf(\"53AI工作流文件处理失败: %v\", err)\n\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// 使用与adaptor.go相同的File结构\n\t\t\t\t\t\t\t\tfiles = append(files, File{\n\t\t\t\t\t\t\t\t\tUploadFileID:   fileMapping.ChannelFileID,\n\t\t\t\t\t\t\t\t\tType:           contentObj.Type,\n\t\t\t\t\t\t\t\t\tTransferMethod: TransferMethodLocalFile,\n\t\t\t\t\t\t\t\t\tUrl:            \"\",\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\tlogger.SysLogf(\"✅ 53AI工作流文件处理成功 - 原始ID: %d, 渠道文件ID: %s, 类型: %s\",\n\t\t\t\t\t\t\t\t\tuploadFile.ID, fileMapping.ChannelFileID, contentObj.Type)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif len(files) > 0 {\n\t\t\t\t\t// 将文件对象数组赋值给sys_files参数\n\t\t\t\t\tai53Request.Inputs[\"sys_files\"] = files\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlogger.SysLogf(\"🔄 53AI工作流请求转换完成 - 参数数量: %d\", len(ai53Request.Inputs))\n\treturn ai53Request, nil\n}\n\n// processFile 处理文件上传 (53AI 方式)\nfunc (a *AI53WorkflowAdaptor) processFile(uploadFile *db_model.UploadFile) (*db_model.ChannelFileMapping, error) {\n\tlogger.SysLogf(\"开始处理53AI工作流文件 - 文件ID: %d, 文件名: %s\", uploadFile.ID, uploadFile.FileName)\n\n\t// 查询是否已存在文件映射\n\tfileMapping := uploadFile.GetChannelFileMapping(a.meta.ChannelId, a.meta.ActualModelName)\n\tif fileMapping != nil && fileMapping.ChannelFileID != \"\" {\n\t\t// 文件已存在，直接返回\n\t\tlogger.SysLogf(\"文件映射已存在 - ChannelFileID: %s\", fileMapping.ChannelFileID)\n\t\treturn fileMapping, nil\n\t}\n\n\t// 创建新的文件映射\n\tfileMapping = &db_model.ChannelFileMapping{}\n\t// 对于工作流，使用空的 conversationID\n\tlogger.SysLogf(\"开始上传文件到53AI - ChannelID: %d, ModelName: %s\", a.meta.ChannelId, a.meta.ActualModelName)\n\terr := AI53UploadFile(a.meta, uploadFile, fileMapping, \"\")\n\tif err != nil {\n\t\tlogger.SysErrorf(\"上传文件到53AI失败: %v\", err)\n\t\treturn nil, err\n\t}\n\n\tlogger.SysLogf(\"文件上传成功 - ChannelFileID: %s\", fileMapping.ChannelFileID)\n\n\terr = db_model.CreateChannelFileMapping(fileMapping)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"创建文件映射失败: %v\", err)\n\t\treturn nil, err\n\t}\n\n\tlogger.SysLogf(\"文件映射创建成功 - ID: %d\", fileMapping.Id)\n\n\treturn fileMapping, nil\n}\n\n// processWorkflowParameters 处理工作流参数中的文件上传\nfunc (a *AI53WorkflowAdaptor) processWorkflowParameters(parameters map[string]interface{}) (map[string]interface{}, error) {\n\tif a.meta == nil {\n\t\treturn parameters, fmt.Errorf(\"meta is nil\")\n\t}\n\n\tprocessedParams := make(map[string]interface{})\n\n\tfor key, value := range parameters {\n\t\tprocessedValue, err := a.processParameterValue(value)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"处理参数 %s 失败: %v\", key, err)\n\t\t\t// 如果单个参数处理失败，使用原始值\n\t\t\tprocessedParams[key] = value\n\t\t} else {\n\t\t\tprocessedParams[key] = processedValue\n\t\t}\n\t}\n\n\treturn processedParams, nil\n}\n\n// processParameterValue 递归处理参数值，支持字符串、数组、对象\nfunc (a *AI53WorkflowAdaptor) processParameterValue(value interface{}) (interface{}, error) {\n\tswitch v := value.(type) {\n\tcase string:\n\t\t// 检查是否为 file_id: 格式\n\t\treturn a.processFileIDString(v)\n\tcase []interface{}:\n\t\t// 处理数组\n\t\tprocessedArray := make([]interface{}, len(v))\n\t\tfor i, item := range v {\n\t\t\tprocessedItem, err := a.processParameterValue(item)\n\t\t\tif err != nil {\n\t\t\t\tprocessedArray[i] = item // 使用原始值\n\t\t\t} else {\n\t\t\t\tprocessedArray[i] = processedItem\n\t\t\t}\n\t\t}\n\t\treturn processedArray, nil\n\tcase map[string]interface{}:\n\t\t// 处理对象\n\t\tprocessedMap := make(map[string]interface{})\n\t\tfor k, val := range v {\n\t\t\tprocessedVal, err := a.processParameterValue(val)\n\t\t\tif err != nil {\n\t\t\t\tprocessedMap[k] = val // 使用原始值\n\t\t\t} else {\n\t\t\t\tprocessedMap[k] = processedVal\n\t\t\t}\n\t\t}\n\t\treturn processedMap, nil\n\tdefault:\n\t\t// 其他类型直接返回\n\t\treturn value, nil\n\t}\n}\n\n// processFileIDString 处理 file_id: 格式的字符串\nfunc (a *AI53WorkflowAdaptor) processFileIDString(value string) (interface{}, error) {\n\t// 检查是否为 file_id: 格式\n\tif !strings.HasPrefix(value, \"file_id:\") {\n\t\treturn value, nil\n\t}\n\n\t// 提取文件ID\n\tfileIDStr := strings.TrimPrefix(value, \"file_id:\")\n\tfileID, err := strconv.ParseInt(fileIDStr, 10, 64)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"解析文件ID失败: %s, error: %v\", fileIDStr, err)\n\t\treturn value, err\n\t}\n\n\t// 获取上传文件对象\n\tuploadFile, err := db_model.GetUploadFileByID(fileID)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"获取上传文件失败: ID=%d, error: %v\", fileID, err)\n\t\treturn value, err\n\t}\n\n\t// 获取渠道文件映射\n\tchannelID := a.meta.ChannelId\n\tmodelName := a.meta.ActualModelName\n\n\tfileMapping := uploadFile.GetChannelFileMapping(channelID, modelName)\n\tif fileMapping == nil || fileMapping.ChannelFileID == \"\" {\n\t\t// 创建新的文件映射\n\t\tfileMapping, err = a.processFile(uploadFile)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"处理53AI文件失败: %v\", err)\n\t\t\treturn value, err\n\t\t}\n\t}\n\n\t// 确定文件类型\n\t// fileType := \"image\" // 默认类型\n\tfileType := Get53AIFileType(uploadFile.MimeType, uploadFile.Extension)\n\n\t// 对于工作流，返回完整的File对象数组而不是单个对象\n\tfileObj := File{\n\t\tUploadFileID:   fileMapping.ChannelFileID,\n\t\tType:           fileType,\n\t\tTransferMethod: TransferMethodLocalFile,\n\t\tUrl:            \"\",\n\t}\n\n\tlogger.SysLogf(\"工作流文件处理成功 - 原始ID: %d, 渠道文件ID: %s, 类型: %s\",\n\t\tfileID, fileMapping.ChannelFileID, fileType)\n\n\t// 返回文件对象数组，确保sys_files参数格式正确\n\treturn []File{fileObj}, nil\n}\n\n// getUserID 获取用户ID\nfunc (a *AI53WorkflowAdaptor) getUserID(request *model.GeneralOpenAIRequest) string {\n\tif request.User != \"\" {\n\t\treturn request.User\n\t}\n\treturn \"ai53_user\"\n}\n\n// DoRequest 执行 53AI 工作流请求\nfunc (a *AI53WorkflowAdaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\turl, err := a.GetRequestURL(meta)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 读取请求体用于日志输出\n\tbodyBytes, err := io.ReadAll(requestBody)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取请求体失败: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"🚀 53AI工作流请求开始\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📡 请求URL: %s\", url)\n\tlogger.SysLogf(\"│ 🔑 API Key: %s\", a.maskAPIKey(meta.APIKey))\n\tlogger.SysLogf(\"│ 🤖 Bot ID: %s\", a.extractBotId(meta.ActualModelName))\n\tlogger.SysLogf(\"│ 📝 请求方法: POST\")\n\n\t// 详细的请求参数日志\n\tlogger.SysLogf(\"├─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📦 请求参数:\")\n\tvar requestData map[string]interface{}\n\tif err := json.Unmarshal(bodyBytes, &requestData); err == nil {\n\t\tprettyJSON, _ := json.MarshalIndent(requestData, \"│   \", \"  \")\n\t\tlogger.SysLogf(\"│   %s\", string(prettyJSON))\n\t} else {\n\t\tlogger.SysLogf(\"│   原始数据: %s\", string(bodyBytes))\n\t}\n\n\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\n\treq, err := http.NewRequest(\"POST\", url, bytes.NewReader(bodyBytes))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"创建请求失败: %v\", err)\n\t}\n\n\t// 设置请求头\n\tif err := a.SetupRequestHeader(c, req, meta); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 记录请求头信息\n\tlogger.SysLogf(\"📋 请求头信息:\")\n\tfor key, values := range req.Header {\n\t\tlogger.SysLogf(\"  %s: %s\", key, strings.Join(values, \", \"))\n\t}\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"❌ 53AI工作流请求失败: %v\", err)\n\t\treturn nil, err\n\t}\n\n\tlogger.SysLogf(\"✅ 53AI工作流请求完成 - 状态码: %d\", resp.StatusCode)\n\n\t// 如果状态码不是 200，记录响应内容\n\tif resp.StatusCode != http.StatusOK {\n\t\tif resp.Body != nil {\n\t\t\terrorBody, _ := io.ReadAll(resp.Body)\n\t\t\tlogger.SysErrorf(\"❌ 53AI工作流请求失败 - 状态码: %d, 响应: %s\", resp.StatusCode, string(errorBody))\n\t\t\t// 重新创建响应体供后续使用\n\t\t\tresp.Body = &readCloser{bytes.NewReader(errorBody)}\n\t\t}\n\t}\n\n\treturn resp, nil\n}\n\n// DoResponse 处理 53AI 工作流响应 (精简事件处理)\nfunc (a *AI53WorkflowAdaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\tlogger.SysLogf(\"📡 开始处理53AI工作流流式响应\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 🔄 响应状态码: %d\", resp.StatusCode)\n\tlogger.SysLogf(\"│ 📋 Content-Type: %s\", resp.Header.Get(\"Content-Type\"))\n\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn nil, &model.ErrorWithStatusCode{\n\t\t\tError: model.Error{\n\t\t\t\tMessage: fmt.Sprintf(\"53AI工作流请求失败，状态码: %d\", resp.StatusCode),\n\t\t\t\tType:    \"api_error\",\n\t\t\t},\n\t\t\tStatusCode: resp.StatusCode,\n\t\t}\n\t}\n\n\tvar finalOutputs map[string]interface{}\n\tvar taskID string\n\n\tscanner := bufio.NewScanner(resp.Body)\n\t// 设置更大的缓冲区以处理大型响应 (1MB)\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\t\tif !strings.HasPrefix(line, \"data: \") {\n\t\t\tcontinue\n\t\t}\n\n\t\tdata := strings.TrimPrefix(line, \"data: \")\n\t\tif data == \"[DONE]\" {\n\t\t\tbreak\n\t\t}\n\n\t\tvar event AI53WorkflowEvent\n\t\tif err := json.Unmarshal([]byte(data), &event); err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// 53AI 精简事件处理 (只处理关键事件)\n\t\tswitch event.Event {\n\t\tcase \"workflow_started\":\n\t\t\ttaskID = event.TaskID\n\t\t\tlogger.SysLogf(\"53AI工作流开始执行 - TaskID: %s\", taskID)\n\n\t\tcase \"workflow_finished\":\n\t\t\tlogger.SysLogf(\"53AI工作流执行完成\")\n\t\t\t// 提取最终输出\n\t\t\tif outputs, ok := event.Data[\"outputs\"].(map[string]interface{}); ok {\n\t\t\t\tfinalOutputs = outputs\n\t\t\t\tlogger.SysLogf(\"53AI工作流最终输出: %+v\", finalOutputs)\n\t\t\t}\n\n\t\tcase \"error\":\n\t\t\tlogger.SysErrorf(\"53AI工作流执行错误: %+v\", event.Data)\n\t\t\treturn nil, &model.ErrorWithStatusCode{\n\t\t\t\tError: model.Error{\n\t\t\t\t\tMessage: \"53AI工作流执行失败\",\n\t\t\t\t\tType:    \"workflow_error\",\n\t\t\t\t},\n\t\t\t\tStatusCode: http.StatusInternalServerError,\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// 忽略其他事件 (与 DIFY 不同，体现精简特性)\n\t\t\tcontinue\n\t\t}\n\n\t\t// 发送事件到客户端\n\t\tc.Writer.Write([]byte(\"data: \" + data + \"\\n\\n\"))\n\t\tc.Writer.Flush()\n\t}\n\n\tlogger.SysLogf(\"53AI工作流处理完成 - TaskID: %s, 输出字段数: %d\",\n\t\ttaskID, len(finalOutputs))\n\n\t// 发送完成信号\n\tc.Writer.Write([]byte(\"data: [DONE]\\n\\n\"))\n\tc.Writer.Flush()\n\n\treturn &model.Usage{}, nil\n}\n\n// ConvertWorkflowToAI53Request 转换工作流参数为 53AI 请求\nfunc (a *AI53WorkflowAdaptor) ConvertWorkflowToAI53Request(parameters map[string]interface{}) (*AI53WorkflowRequest, error) {\n\t// 参数验证和日志\n\tlogger.SysLogf(\"🔄 开始转换53AI工作流请求 - 输入参数: %+v\", parameters)\n\n\t// 允许空参数，归一化为 {}\n\tif parameters == nil || len(parameters) == 0 {\n\t\tparameters = map[string]interface{}{}\n\t}\n\n\t// 处理参数中的文件上传\n\tprocessedParameters, err := a.processWorkflowParameters(parameters)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"处理工作流文件参数失败: %v\", err)\n\t\t// 如果文件处理失败，使用原始参数继续执行\n\t\tprocessedParameters = parameters\n\t}\n\n\tai53Request := &AI53WorkflowRequest{\n\t\tInputs:       processedParameters,\n\t\tResponseMode: \"streaming\", // 使用 streaming 模式\n\t\tUser:         \"ai53_user\",\n\t}\n\n\t// 设置用户ID\n\tif a.CustomConfig != nil && a.CustomConfig.UserId != \"\" {\n\t\tai53Request.User = a.CustomConfig.UserId\n\t}\n\n\t// 验证必要字段\n\tif ai53Request.Inputs == nil {\n\t\tai53Request.Inputs = make(map[string]interface{})\n\t}\n\n\tlogger.SysLogf(\"53AI工作流请求转换完成 - 参数数量: %d, ResponseMode: %s, User: %s\",\n\t\tlen(ai53Request.Inputs), ai53Request.ResponseMode, ai53Request.User)\n\n\t// 输出最终的请求结构\n\tif requestJSON, err := json.MarshalIndent(ai53Request, \"\", \"  \"); err == nil {\n\t\tlogger.SysLogf(\"📋 最终53AI请求结构:\\n%s\", string(requestJSON))\n\t}\n\n\treturn ai53Request, nil\n}\n\n// ProcessAI53WorkflowResponse 处理 53AI 工作流流式响应\nfunc (a *AI53WorkflowAdaptor) ProcessAI53WorkflowResponse(resp *http.Response) (*custom.WorkflowResponseData, error) {\n\tdefer resp.Body.Close()\n\n\tlogger.SysLogf(\"📡 53AI工作流响应状态码: %d\", resp.StatusCode)\n\n\tif resp.StatusCode != http.StatusOK {\n\t\t// 读取错误响应\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tlogger.SysErrorf(\"❌ 53AI工作流请求失败 - 状态码: %d, 响应: %s\", resp.StatusCode, string(body))\n\t\treturn nil, fmt.Errorf(\"53AI工作流请求失败，状态码: %d\", resp.StatusCode)\n\t}\n\n\t// 流式处理响应\n\tscanner := bufio.NewScanner(resp.Body)\n\t// 设置更大的缓冲区以处理大型响应 (1MB)\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\tvar finalOutputs map[string]interface{}\n\tvar workflowRunID string\n\tvar taskID string\n\tvar textChunks []string\n\n\tlogger.SysLogf(\"📡 开始处理53AI工作流流式响应\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 🔄 响应状态码: %d\", resp.StatusCode)\n\tlogger.SysLogf(\"│ 📋 Content-Type: %s\", resp.Header.Get(\"Content-Type\"))\n\tlogger.SysLogf(\"├─────────────────────────────────────────────────────────────\")\n\n\t// 使用标签来支持跳出外层循环\nscanLoop:\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\n\t\t// 跳过空行和非数据行\n\t\tif !strings.HasPrefix(line, \"data: \") {\n\t\t\tcontinue\n\t\t}\n\n\t\t// 提取 JSON 数据\n\t\tjsonData := strings.TrimPrefix(line, \"data: \")\n\t\tif jsonData == \"\" || jsonData == \"[DONE]\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// 解析事件\n\t\tvar event AI53WorkflowEvent\n\t\tif err := json.Unmarshal([]byte(jsonData), &event); err != nil {\n\t\t\tlogger.SysErrorf(\"解析53AI工作流事件失败: %v, 数据: %s\", err, jsonData)\n\t\t\tcontinue\n\t\t}\n\n\t\t// 记录基本信息\n\t\tif workflowRunID == \"\" {\n\t\t\tif event.Data != nil {\n\t\t\t\tif runID, ok := event.Data[\"workflow_run_id\"].(string); ok {\n\t\t\t\t\tworkflowRunID = runID\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif taskID == \"\" {\n\t\t\ttaskID = event.TaskID\n\t\t}\n\n\t\t// 53AI 精简事件处理 (只处理关键事件)\n\t\tswitch event.Event {\n\t\tcase \"workflow_started\":\n\t\t\tlogger.SysLogf(\"53AI工作流开始执行 - TaskID: %s\", event.TaskID)\n\n\t\tcase \"text_chunk\":\n\t\t\t// 收集文本块\n\t\t\tif text, ok := event.Data[\"text\"].(string); ok {\n\t\t\t\ttextChunks = append(textChunks, text)\n\t\t\t}\n\n\t\tcase \"node_finished\":\n\t\t\t// 检查是否有输出\n\t\t\tif outputs, ok := event.Data[\"outputs\"].(map[string]interface{}); ok {\n\t\t\t\tif len(outputs) > 0 {\n\t\t\t\t\tfinalOutputs = outputs\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase \"workflow_finished\":\n\t\t\tlogger.SysLogf(\"53AI工作流执行完成\")\n\t\t\t// 提取最终输出\n\t\t\tif outputs, ok := event.Data[\"outputs\"].(map[string]interface{}); ok {\n\t\t\t\tfinalOutputs = outputs\n\t\t\t\tlogger.SysLogf(\"53AI工作流最终输出: %+v\", finalOutputs)\n\t\t\t}\n\t\t\t// 工作流完成，可以退出循环\n\t\t\tbreak scanLoop\n\n\t\tcase \"error\":\n\t\t\tlogger.SysErrorf(\"53AI工作流执行错误: %+v\", event.Data)\n\t\t\treturn nil, fmt.Errorf(\"53AI工作流执行失败\")\n\n\t\tdefault:\n\t\t\t// 忽略其他事件 (与 DIFY 不同，体现精简特性)\n\t\t\tcontinue\n\t\t}\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"读取53AI工作流响应流失败: %v\", err)\n\t}\n\n\t// 构建最终响应\n\tif finalOutputs == nil {\n\t\tfinalOutputs = make(map[string]interface{})\n\t}\n\n\t// 如果有文本片段，合并到输出中\n\tif len(textChunks) > 0 {\n\t\tfinalOutputs[\"text\"] = strings.Join(textChunks, \"\")\n\t}\n\n\tworkflowResponse := &custom.WorkflowResponseData{\n\t\tExecuteID:          taskID,\n\t\tWorkflowOutputData: finalOutputs,\n\t}\n\n\tlogger.SysLogf(\"53AI工作流响应处理完成 - TaskID: %s, 输出字段数: %d\",\n\t\ttaskID, len(finalOutputs))\n\n\treturn workflowResponse, nil\n}\n\n// maskAPIKey 遮蔽API密钥的敏感部分\nfunc (a *AI53WorkflowAdaptor) maskAPIKey(apiKey string) string {\n\tif len(apiKey) <= 8 {\n\t\treturn \"****\"\n\t}\n\treturn apiKey[:4] + \"****\" + apiKey[len(apiKey)-4:]\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/appbuilder/adaptor.go",
    "content": "package appbuilder\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/storage\"\n\tappbuilder_api \"github.com/53AI/53AIHub/common/utils/appbuilder\"\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\ntype Adaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *Adaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\nfunc (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbaseUrl, err := custom.GetBaseURL(meta.BaseURL)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"%s/v2/app/conversation/runs\", baseUrl), nil\n}\n\nfunc (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\tcustom.SetupCommonRequestHeader(c, req, meta)\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treturn nil\n}\n\nfunc (a *Adaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\trequest.User = a.meta.Config.UserID\n\tbotID := strings.TrimPrefix(a.meta.ActualModelName, \"bot-\")\n\treturn ConvertRequest(botID, a.meta, *request, a.CustomConfig), nil\n}\n\nfunc ConvertRequest(botID string, meta *meta.Meta, textRequest model.GeneralOpenAIRequest, customConfig *custom.CustomConfig) *Request {\n\tmodelName := \"bot-\" + strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\tchannelID := meta.ChannelId\n\tconversationID := customConfig.ConversationId\n\trequest := Request{\n\t\tAppID:          botID,\n\t\tEndUserID:      customConfig.UserId,\n\t\tStream:         textRequest.Stream,\n\t\tConversationID: conversationID,\n\t}\n\tqueryStr := \"\"\n\tfor i, message := range textRequest.Messages {\n\t\t// upload files\n\t\tif i == len(textRequest.Messages)-1 {\n\t\t\tqueryStr = message.StringContent()\n\t\t\tcontinue\n\t\t}\n\t}\n\n\trequest.Query = queryStr\n\tvar contentObjs []db_model.ObjectStringContent\n\tif err := json.Unmarshal([]byte(queryStr), &contentObjs); err == nil {\n\t\tif len(contentObjs) > 0 {\n\t\t\ttargetStr := \"\"\n\t\t\tfor _, contentObj := range contentObjs {\n\t\t\t\tif contentObj.Type == \"text\" {\n\t\t\t\t\tif targetStr == \"\" {\n\t\t\t\t\t\ttargetStr = contentObj.Content\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tuoloadFile := contentObj.GetUploadFile()\n\t\t\t\tif uoloadFile == nil {\n\t\t\t\t\tlogger.SysError(\"file not found\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfileMapping := uoloadFile.GetChannelFileMapping(channelID, modelName)\n\t\t\t\tif fileMapping == nil {\n\t\t\t\t\tfileMapping = &db_model.ChannelFileMapping{}\n\t\t\t\t\terr := AppBuilderUploadFile(meta, uoloadFile, fileMapping, conversationID)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"upload file failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\terr = db_model.CreateChannelFileMapping(fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"create file mapping failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t} else if helper.GetTimestamp() > fileMapping.ExpirationTime {\n\t\t\t\t\terr := AppBuilderUploadFile(meta, uoloadFile, fileMapping, conversationID)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"update file failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\terr = db_model.UpdateChannelFileMapping(fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"update file mapping failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trequest.FileIDs = append(request.FileIDs, fileMapping.ChannelFileID)\n\t\t\t}\n\t\t\trequest.Query = targetStr\n\t\t}\n\t}\n\treturn &request\n}\n\nfunc (a *Adaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\treturn custom.DoRequestHelper(a, c, meta, requestBody)\n}\n\nfunc (a *Adaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\treturn request, nil\n}\n\nfunc (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\tvar responseText *string\n\tvar channelConversationId string\n\tif meta.IsStream {\n\t\terr, responseText, channelConversationId = StreamHandler(c, resp)\n\t} else {\n\t\terr, responseText, channelConversationId = Handler(c, resp, meta.PromptTokens, meta.ActualModelName)\n\t}\n\tif responseText != nil {\n\t\tusage = openai.ResponseText2Usage(*responseText, meta.ActualModelName, meta.PromptTokens)\n\t} else {\n\t\tusage = &model.Usage{}\n\t}\n\tusage.PromptTokens = meta.PromptTokens\n\tusage.TotalTokens = usage.PromptTokens + usage.CompletionTokens\n\ta.CustomConfig.ConversationId = channelConversationId\n\treturn\n}\n\nfunc (a *Adaptor) GetModelList() []string {\n\treturn ModelList\n}\n\nfunc (a *Adaptor) GetChannelName() string {\n\treturn \"appbuilder\"\n}\n\nfunc (a *Adaptor) GetConversationId() (string, error) {\n\tapiService := &appbuilder_api.AppBuilderApi{\n\t\tBaseUrl:   a.meta.BaseURL,\n\t\tAuthToken: a.meta.APIKey,\n\t}\n\n\tapp_id := strings.TrimPrefix(a.meta.ActualModelName, \"bot-\")\n\tconversation, error := apiService.CreateConversation(app_id)\n\tif error != nil {\n\t\treturn \"\", error\n\t}\n\treturn conversation.ConversationId, nil\n}\n\nfunc AppBuilderUploadFile(meta *meta.Meta, uploadFile *db_model.UploadFile, fileMapping *db_model.ChannelFileMapping, conversationID string) error {\n\turl := fmt.Sprintf(\"%s/v2/app/conversation/file/upload\", meta.BaseURL)\n\tfileContent, err := storage.StorageInstance.Load(uploadFile.Key)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbody := &bytes.Buffer{}\n\twriter := multipart.NewWriter(body)\n\n\t_ = writer.WriteField(\"app_id\", strings.TrimPrefix(meta.ActualModelName, \"bot-\"))\n\t_ = writer.WriteField(\"conversation_id\", conversationID)\n\n\tpart, err := writer.CreateFormFile(\"file\", uploadFile.FileName)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = io.Copy(part, bytes.NewReader(fileContent))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writer.Close()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq, err := http.NewRequest(\"POST\", url, body)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treq.Header.Set(\"Content-Type\", writer.FormDataContentType())\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn fmt.Errorf(\"upload failed with status: %d\", resp.StatusCode)\n\t}\n\n\tvar result struct {\n\t\tID             string `json:\"id\"`\n\t\tConversationId string `json:\"conversation_id\"`\n\t\tRequestId      string `json:\"request_id\"`\n\t}\n\tif err = json.NewDecoder(resp.Body).Decode(&result); err != nil {\n\t\treturn err\n\t}\n\n\tfileMapping.ChannelFileID = result.ID\n\tExpirationTime := helper.GetTimestamp() + 3600*24*7\n\tfileMapping.Eid = uploadFile.Eid\n\tfileMapping.FileID = uploadFile.ID\n\tfileMapping.ChannelID = meta.ChannelId\n\tfileMapping.Model = \"bot-\" + strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\tfileMapping.ExpirationTime = ExpirationTime\n\n\tjsonResult, err := json.Marshal(result)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfileMapping.ApiResponse = string(jsonResult)\n\treturn nil\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/appbuilder/constants.go",
    "content": "package appbuilder\n\nvar ModelList = []string{}\n"
  },
  {
    "path": "api/service/hub_adaptor/appbuilder/main.go",
    "content": "package appbuilder\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/common/render\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\nfunc StreamHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusCode, *string, string) {\n\tvar responseText string\n\tcreatedTime := helper.GetTimestamp()\n\tscanner := bufio.NewScanner(resp.Body)\n\t// 设置更大的缓冲区以处理大型响应 (1MB)\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\tscanner.Split(bufio.ScanLines)\n\tcommon.SetEventStreamHeaders(c)\n\tvar modelName string\n\n\tchannelConversationId := \"\"\n\tfor scanner.Scan() {\n\t\tdata := scanner.Text()\n\t\tif len(data) < 5 || !strings.HasPrefix(data, \"data:\") {\n\t\t\tcontinue\n\t\t}\n\t\tdata = strings.TrimPrefix(data, \"data:\")\n\t\tdata = strings.TrimSuffix(data, \"\\r\")\n\n\t\tvar appBuilderResponse Response\n\t\terr := json.Unmarshal([]byte(data), &appBuilderResponse)\n\t\tif err != nil {\n\t\t\tlogger.SysError(\"error unmarshalling stream response: \" + err.Error())\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse, _ := StreamResponseToOpenAI(&appBuilderResponse)\n\t\tif response == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse.Model = modelName\n\t\tresponse.Created = createdTime\n\n\t\terr = render.ObjectData(c, response)\n\t\tif err != nil {\n\t\t\tlogger.SysError(err.Error())\n\t\t}\n\t\tchannelConversationId = appBuilderResponse.ConversationID\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\tlogger.SysError(\"error reading stream: \" + err.Error())\n\t}\n\n\trender.Done(c)\n\n\terr := resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\treturn nil, &responseText, channelConversationId\n}\n\nfunc Handler(c *gin.Context, resp *http.Response, promptTokens int, modelName string) (*model.ErrorWithStatusCode, *string, string) {\n\tchannelConversationId := \"\"\n\tresponseBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"read_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\terr = resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\tvar response Response\n\terr = json.Unmarshal(responseBody, &response)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"unmarshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\tfullTextResponse := ResponseToOpenAI(&response)\n\tfullTextResponse.Model = modelName\n\tjsonResponse, err := json.Marshal(fullTextResponse)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"marshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\tc.Writer.Header().Set(\"Content-Type\", \"application/json\")\n\tc.Writer.WriteHeader(resp.StatusCode)\n\t_, err = c.Writer.Write(jsonResponse)\n\tvar responseText string\n\tif len(fullTextResponse.Choices) > 0 {\n\t\tresponseText = fullTextResponse.Choices[0].Message.StringContent()\n\t}\n\tchannelConversationId = response.ConversationID\n\treturn nil, &responseText, channelConversationId\n}\n\nfunc StreamResponseToOpenAI(appBuilderResponse *Response) (*openai.ChatCompletionsStreamResponse, *Response) {\n\tvar response *Response\n\tvar stopReason string\n\tvar choice openai.ChatCompletionsStreamResponseChoice\n\n\tif appBuilderResponse.Answer != \"\" {\n\t\tchoice.Delta.Content = appBuilderResponse.Answer\n\t}\n\tchoice.Delta.Role = \"assistant\"\n\tfinishReason := stopReasonAppBuilderOpenAI(&stopReason)\n\tif finishReason != \"null\" {\n\t\tchoice.FinishReason = &finishReason\n\t}\n\tvar openaiResponse openai.ChatCompletionsStreamResponse\n\topenaiResponse.Object = \"chat.completion.chunk\"\n\topenaiResponse.Choices = []openai.ChatCompletionsStreamResponseChoice{choice}\n\topenaiResponse.Id = appBuilderResponse.ConversationID\n\treturn &openaiResponse, response\n}\n\nfunc stopReasonAppBuilderOpenAI(reason *string) string {\n\tif reason == nil {\n\t\treturn \"\"\n\t}\n\tswitch *reason {\n\tcase \"end_turn\":\n\t\treturn \"stop\"\n\tcase \"stop_sequence\":\n\t\treturn \"stop\"\n\tcase \"max_tokens\":\n\t\treturn \"length\"\n\tdefault:\n\t\treturn *reason\n\t}\n}\n\nfunc ResponseToOpenAI(response *Response) *openai.TextResponse {\n\tvar responseText string\n\tresponseText = response.Answer\n\tchoice := openai.TextResponseChoice{\n\t\tIndex: 0,\n\t\tMessage: model.Message{\n\t\t\tRole:    \"assistant\",\n\t\t\tContent: responseText,\n\t\t\tName:    nil,\n\t\t},\n\t\tFinishReason: \"stop\",\n\t}\n\tfullTextResponse := openai.TextResponse{\n\t\tId:      fmt.Sprintf(\"chatcmpl-%s\", response.ConversationID),\n\t\tModel:   \"appbuilder-bot\",\n\t\tObject:  \"chat.completion\",\n\t\tCreated: helper.GetTimestamp(),\n\t\tChoices: []openai.TextResponseChoice{choice},\n\t}\n\treturn &fullTextResponse\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/appbuilder/model.go",
    "content": "package appbuilder\n\ntype Request struct {\n\tAppID          string       `json:\"app_id\"`\n\tEndUserID      string       `json:\"end_user_id,omitempty\"`\n\tQuery          string       `json:\"query\"`\n\tStream         bool         `json:\"stream\"`\n\tConversationID string       `json:\"conversation_id\"`\n\tFileIDs        []string     `json:\"file_ids,omitempty\"`\n\tToolChoice     *ToolChoice  `json:\"tool_choice,omitempty\"`\n\tTools          []Tool       `json:\"tools,omitempty\"`\n\tToolOutputs    []ToolOutput `json:\"tool_outputs,omitempty\"`\n\tAction         *Action      `json:\"action,omitempty\"`\n}\n\ntype ToolChoice struct {\n\tType     string    `json:\"type\"`\n\tFunction *Function `json:\"function,omitempty\"`\n}\n\ntype Function struct {\n\tName  string      `json:\"name\"`\n\tInput interface{} `json:\"input\"`\n}\n\ntype Tool struct {\n\tType     string    `json:\"type\"`\n\tFunction *Function `json:\"function\"`\n}\n\ntype ToolOutput struct {\n\tToolCallID string `json:\"tool_call_id\"`\n\tOutput     string `json:\"output\"`\n}\n\ntype Action struct {\n\tActionType string      `json:\"action_type\"`\n\tParameters interface{} `json:\"parameters\"`\n}\n\ntype InterruptEvent struct {\n\tID   string `json:\"id\"`\n\tType string `json:\"type\"`\n}\n\n// Response represents the main API response structure\ntype Response struct {\n\tRequestID      string    `json:\"request_id\"`\n\tDate           string    `json:\"date\"`\n\tAnswer         string    `json:\"answer\"`\n\tConversationID string    `json:\"conversation_id\"`\n\tMessageID      string    `json:\"message_id\"`\n\tIsCompletion   *bool     `json:\"is_completion\"`\n\tContent        []Content `json:\"content\"`\n}\n\n// Content represents the nested content structure\ntype Content struct {\n\tResultType   string      `json:\"result_type,omitempty\"`\n\tEventCode    int         `json:\"event_code\"`\n\tEventMessage string      `json:\"event_message\"`\n\tEventType    string      `json:\"event_type\"`\n\tEventID      string      `json:\"event_id\"`\n\tEventStatus  string      `json:\"event_status\"`\n\tContentType  string      `json:\"content_type\"`\n\tOutputs      interface{} `json:\"outputs\"`\n\tUsage        *Usage      `json:\"usage,omitempty\"`\n\tToolCalls    []ToolCall  `json:\"tool_calls,omitempty\"`\n}\n\n// ToolCall represents tool call information\ntype ToolCall struct {\n\tID       string      `json:\"id\"`\n\tType     string      `json:\"type\"`\n\tFunction *Function   `json:\"function,omitempty\"`\n\tInput    interface{} `json:\"input,omitempty\"`\n}\n\n// Usage represents model usage information\ntype Usage struct {\n\tPromptTokens     int    `json:\"prompt_tokens\"`\n\tCompletionTokens int    `json:\"completion_tokens\"`\n\tTotalTokens      int    `json:\"total_tokens\"`\n\tName             string `json:\"name\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/bailian/adaptor.go",
    "content": "package bailian\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\ntype Adaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *Adaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\nfunc (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbotID := strings.TrimPrefix(a.meta.ActualModelName, \"bot-\")\n\tbaseUrl, err := custom.GetBaseURL(meta.BaseURL)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"%s/api/v1/apps/%s/completion\", baseUrl, botID), nil\n}\n\nfunc (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\tcustom.SetupCommonRequestHeader(c, req, meta)\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\tif meta.IsStream {\n\t\treq.Header.Set(\"X-DashScope-SSE\", \"enable\")\n\t}\n\n\tif req.Body != nil {\n\t\tbodyBytes, err := io.ReadAll(req.Body)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treq.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))\n\t\treq.ContentLength = int64(len(bodyBytes))\n\t\treq.Header.Set(\"Content-Length\", strconv.Itoa(len(bodyBytes)))\n\t}\n\n\t// logger.SysLogf(\"request detail start\")\n\t// logger.SysLogf(\"request url: %s\", req.URL.String())\n\t// logger.SysLogf(\"request method: %s\", req.Method)\n\t// logger.SysLogf(\"request header: %v\", req.Header)\n\t// logger.SysLogf(\"request body: %s\", req.Body)\n\t// logger.SysLogf(\"request detail end\")\n\n\treturn nil\n}\n\nfunc (a *Adaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\t\n\t// 检查是否为 rerank 请求\n\tif a.IsRerankRequest(c, request) {\n\t\t// 解析 rerank 请求\n\t\trerankRequest, err := ParseRerankRequest(c)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to parse rerank request: %v\", err)\n\t\t}\n\t\t\n\t\t// 直接处理 rerank 请求\n\t\terr = a.HandleRerankRequest(c, rerankRequest)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t\n\t\t// 返回空值，因为响应已经在 HandleRerankRequest 中处理\n\t\treturn nil, nil\n\t}\n\t\n\t// 原有的 chat 转换逻辑\n\trequest.User = a.meta.Config.UserID\n\tbailianRequest := ConvertRequest(*request, a.meta, a.CustomConfig)\n\tif a.meta.IsStream {\n\t\tbailianRequest.Parameters.IncrementalOutput = true\n\t}\n\treturn bailianRequest, nil\n}\n\n// IsRerankRequest 检查是否为 rerank 请求\nfunc (a *Adaptor) IsRerankRequest(c *gin.Context, request *model.GeneralOpenAIRequest) bool {\n\t// 通过 URL 路径检测\n\tif strings.Contains(c.Request.URL.Path, \"rerank\") {\n\t\treturn true\n\t}\n\t\n\t// 通过模型名称检测\n\tif a.IsRerankModel(request.Model) {\n\t\treturn true\n\t}\n\t\n\treturn false\n}\n\nfunc ConvertRequest(textRequest model.GeneralOpenAIRequest, meta *meta.Meta, customConfig *custom.CustomConfig) *Request {\n\tvar Prompt string\n\tvar ImageList []string\n\t// var SessionFileIds []string\n\tconversationID := customConfig.ConversationId\n\t// modelName := \"bot-\" + strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\t// channelID := meta.ChannelId\n\tfor i, message := range textRequest.Messages {\n\t\tif i == len(textRequest.Messages)-1 {\n\t\t\tPrompt = message.StringContent()\n\t\t\tcontinue\n\t\t}\n\t}\n\n\tvar contentObjs []db_model.ObjectStringContent\n\tif err := json.Unmarshal([]byte(Prompt), &contentObjs); err == nil {\n\t\tif len(contentObjs) > 0 {\n\t\t\ttargetStr := \"\"\n\t\t\tfor _, contentObj := range contentObjs {\n\t\t\t\tif contentObj.Type == \"text\" {\n\t\t\t\t\tif targetStr == \"\" {\n\t\t\t\t\t\ttargetStr = contentObj.Content\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tuoloadFile := contentObj.GetUploadFile()\n\t\t\t\tif uoloadFile == nil {\n\t\t\t\t\tlogger.SysError(\"file not found\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif contentObj.Type != \"image\" {\n\t\t\t\t\t// input.image_list, need url\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tImageList = append(ImageList, uoloadFile.GetPreviewFullUrl())\n\t\t\t}\n\t\t\tPrompt = targetStr\n\t\t}\n\t}\n\n\trequest := Request{\n\t\tInput: Input{\n\t\t\tPrompt:    Prompt,\n\t\t\tSessionID: conversationID,\n\t\t\tImageList: ImageList,\n\t\t\t// SessionFileIds: SessionFileIds,\n\t\t},\n\t\tParameters: Parameters{\n\t\t\tIncrementalOutput: false,\n\t\t},\n\t}\n\n\treturn &request\n}\n\nfunc (a *Adaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\treturn custom.DoRequestHelper(a, c, meta, requestBody)\n}\n\nfunc (a *Adaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\treturn request, nil\n}\n\nfunc (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\tvar responseText *string\n\tvar channelConversationId string\n\tif meta.IsStream {\n\t\terr, responseText, channelConversationId = StreamHandler(c, resp)\n\t} else {\n\t\terr, responseText, channelConversationId = Handler(c, resp, meta.PromptTokens, meta.ActualModelName)\n\t}\n\tif responseText != nil {\n\t\tusage = openai.ResponseText2Usage(*responseText, meta.ActualModelName, meta.PromptTokens)\n\t} else {\n\t\tusage = &model.Usage{}\n\t}\n\tusage.PromptTokens = meta.PromptTokens\n\tusage.TotalTokens = usage.PromptTokens + usage.CompletionTokens\n\ta.CustomConfig.ConversationId = channelConversationId\n\treturn\n}\n\nfunc (a *Adaptor) GetModelList() []string {\n\treturn ModelList\n}\n\nfunc (a *Adaptor) GetChannelName() string {\n\treturn \"bailian\"\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/bailian/constants.go",
    "content": "package bailian\n\nvar ModelList = []string{\n\t\"gte-rerank-v2\",\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/bailian/main.go",
    "content": "package bailian\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/common/render\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\nfunc StreamHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusCode, *string, string) {\n\tvar responseText string\n\tcreatedTime := helper.GetTimestamp()\n\tscanner := bufio.NewScanner(resp.Body)\n\tscanner.Split(bufio.ScanLines)\n\tcommon.SetEventStreamHeaders(c)\n\tvar modelName string\n\n\tchannelConversationId := \"\"\n\tvar IsError bool\n\tIsError = false\n\tvar EventStr string\n\tvar ErrorStr string\n\tfor scanner.Scan() {\n\t\tdata := scanner.Text()\n\t\tif strings.HasPrefix(data, \"event:\") {\n\t\t\tEventStr = strings.TrimPrefix(data, \"event:\")\n\t\t\tif EventStr == \"error\" {\n\t\t\t\tIsError = true\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif len(data) < 5 || !strings.HasPrefix(data, \"data:\") {\n\t\t\tcontinue\n\t\t}\n\t\tdata = strings.TrimPrefix(data, \"data:\")\n\t\tdata = strings.TrimSuffix(data, \"\\r\")\n\n\t\tif IsError {\n\t\t\tlogger.SysError(\"bailian response: \" + data)\n\t\t\tErrorStr += data + \";\"\n\t\t\tcontinue\n\t\t}\n\n\t\tvar bailianResponse Response\n\t\terr := json.Unmarshal([]byte(data), &bailianResponse)\n\t\tif err != nil {\n\t\t\tlogger.SysError(\"error unmarshalling stream response: \" + err.Error())\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse, _ := StreamResponseToOpenAI(&bailianResponse)\n\t\tif response == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse.Model = modelName\n\t\tresponse.Created = createdTime\n\n\t\terr = render.ObjectData(c, response)\n\t\tif err != nil {\n\t\t\tlogger.SysError(err.Error())\n\t\t}\n\t\tchannelConversationId = bailianResponse.Output.SessionID\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\tlogger.SysError(\"error reading stream: \" + err.Error())\n\t}\n\n\tif IsError {\n\t\treturn openai.ErrorWrapper(\n\t\t\terrors.New(ErrorStr),\n\t\t\t\"stream_error\",\n\t\t\tresp.StatusCode,\n\t\t), nil, \"\"\n\t}\n\n\trender.Done(c)\n\n\terr := resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\treturn nil, &responseText, channelConversationId\n}\n\nfunc Handler(c *gin.Context, resp *http.Response, promptTokens int, modelName string) (*model.ErrorWithStatusCode, *string, string) {\n\tchannelConversationId := \"\"\n\tresponseBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"read_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\terr = resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\tvar response Response\n\terr = json.Unmarshal(responseBody, &response)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"unmarshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\tfullTextResponse := ResponseToOpenAI(&response)\n\tfullTextResponse.Model = modelName\n\tjsonResponse, err := json.Marshal(fullTextResponse)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"marshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\tc.Writer.Header().Set(\"Content-Type\", \"application/json\")\n\tc.Writer.WriteHeader(resp.StatusCode)\n\t_, err = c.Writer.Write(jsonResponse)\n\tvar responseText string\n\tif len(fullTextResponse.Choices) > 0 {\n\t\tresponseText = fullTextResponse.Choices[0].Message.StringContent()\n\t}\n\tchannelConversationId = response.Output.SessionID\n\treturn nil, &responseText, channelConversationId\n}\n\nfunc StreamResponseToOpenAI(bailianResponse *Response) (*openai.ChatCompletionsStreamResponse, *Response) {\n\tvar response *Response\n\tvar stopReason string\n\tvar choice openai.ChatCompletionsStreamResponseChoice\n\n\tif bailianResponse.Output.Text != \"\" {\n\t\tchoice.Delta.Content = bailianResponse.Output.Text\n\t}\n\tchoice.Delta.Role = \"assistant\"\n\tfinishReason := stopReasonAppBuilderOpenAI(&stopReason)\n\tif finishReason != \"null\" {\n\t\tchoice.FinishReason = &finishReason\n\t}\n\tvar openaiResponse openai.ChatCompletionsStreamResponse\n\topenaiResponse.Object = \"chat.completion.chunk\"\n\topenaiResponse.Choices = []openai.ChatCompletionsStreamResponseChoice{choice}\n\topenaiResponse.Id = bailianResponse.RequestID\n\treturn &openaiResponse, response\n}\n\nfunc stopReasonAppBuilderOpenAI(reason *string) string {\n\tif reason == nil {\n\t\treturn \"\"\n\t}\n\tswitch *reason {\n\tcase \"end_turn\":\n\t\treturn \"stop\"\n\tcase \"stop_sequence\":\n\t\treturn \"stop\"\n\tcase \"max_tokens\":\n\t\treturn \"length\"\n\tdefault:\n\t\treturn *reason\n\t}\n}\n\nfunc ResponseToOpenAI(response *Response) *openai.TextResponse {\n\tvar responseText string\n\tresponseText = response.Output.Text\n\tchoice := openai.TextResponseChoice{\n\t\tIndex: 0,\n\t\tMessage: model.Message{\n\t\t\tRole:    \"assistant\",\n\t\t\tContent: responseText,\n\t\t\tName:    nil,\n\t\t},\n\t\tFinishReason: \"stop\",\n\t}\n\tfullTextResponse := openai.TextResponse{\n\t\tId:      response.RequestID,\n\t\tModel:   \"bailian-bot\",\n\t\tObject:  \"chat.completion\",\n\t\tCreated: helper.GetTimestamp(),\n\t\tChoices: []openai.TextResponseChoice{choice},\n\t}\n\treturn &fullTextResponse\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/bailian/model.go",
    "content": "package bailian\n\ntype Request struct {\n\tInput      Input      `json:\"input\"`\n\tParameters Parameters `json:\"parameters\"`\n}\n\ntype Input struct {\n\tPrompt         string   `json:\"prompt\"`\n\tSessionID      string   `json:\"session_id,omitempty\"`\n\tImageList      []string `json:\"image_list,omitempty\"`\n\tSessionFileIds []string `json:\"session_file_ids,omitempty\"`\n}\n\ntype Parameters struct {\n\tIncrementalOutput bool `json:\"incremental_output,omitempty\"`\n}\n\ntype Response struct {\n\tOutput    Output `json:\"output\"`\n\tUsage     Usage  `json:\"usage\"`\n\tRequestID string `json:\"request_id\"`\n}\n\ntype Output struct {\n\tSessionID    string `json:\"session_id\"`\n\tFinishReason string `json:\"finish_reason\"`\n\tText         string `json:\"text\"`\n}\n\ntype Usage struct {\n\tModels Models `json:\"models\"`\n}\n\ntype Models []struct {\n\tInputTokens  int    `json:\"input_tokens\"`\n\tOutputTokens int    `json:\"output_tokens\"`\n\tModelID      string `json:\"model_id\"`\n}\n\ntype ErrorResponse struct {\n\tCode    int    `json:\"code\"`\n\tMessage string `json:\"message\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/bailian/rerank.go",
    "content": "package bailian\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/gin-gonic/gin\"\n)\n\n// RerankRequest 定义 rerank 请求结构\ntype RerankRequest struct {\n\tModel      string   `json:\"model\"`\n\tQuery      string   `json:\"query\"`\n\tDocuments  []string `json:\"documents\"`\n\tTopN       *int     `json:\"top_n,omitempty\"`\n\tReturnDocs *bool    `json:\"return_documents,omitempty\"`\n}\n\n// ConvertToRerankRequest 将 rerank 请求转换为百炼格式\nfunc (a *Adaptor) ConvertToRerankRequest(request *RerankRequest) (*BailianRerankRequest, error) {\n\tif request.Query == \"\" {\n\t\treturn nil, fmt.Errorf(\"query is required for rerank\")\n\t}\n\n\tif len(request.Documents) == 0 {\n\t\treturn nil, fmt.Errorf(\"documents are required for rerank\")\n\t}\n\n\trerankRequest := &BailianRerankRequest{\n\t\tModel: a.meta.ActualModelName,\n\t\tInput: BailianRerankInput{\n\t\t\tQuery:     request.Query,\n\t\t\tDocuments: request.Documents,\n\t\t},\n\t}\n\n\t// 设置参数\n\tif request.TopN != nil || request.ReturnDocs != nil {\n\t\trerankRequest.Parameters = BailianRerankParameters{\n\t\t\tTopN:            request.TopN,\n\t\t\tReturnDocuments: request.ReturnDocs,\n\t\t}\n\t}\n\n\treturn rerankRequest, nil\n}\n\n// GetRerankURL 获取百炼 rerank API URL\nfunc (a *Adaptor) GetRerankURL() string {\n\tbaseUrl := a.meta.BaseURL\n\tif baseUrl == \"\" {\n\t\tbaseUrl = \"https://dashscope.aliyuncs.com\"\n\t}\n\treturn fmt.Sprintf(\"%s/api/v1/services/rerank/text-rerank/text-rerank\", baseUrl)\n}\n\n// DoRerankRequest 执行 rerank 请求\nfunc (a *Adaptor) DoRerankRequest(c *gin.Context, request *BailianRerankRequest) (*http.Response, error) {\n\trequestBody, err := json.Marshal(request)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to marshal rerank request: %v\", err)\n\t}\n\n\turl := a.GetRerankURL()\n\treq, err := http.NewRequestWithContext(c.Request.Context(), \"POST\", url, bytes.NewBuffer(requestBody))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create rerank request: %v\", err)\n\t}\n\n\t// 设置请求头\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", fmt.Sprintf(\"Bearer %s\", a.meta.APIKey))\n\treq.Header.Set(\"X-DashScope-SSE\", \"disable\")\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to execute rerank request: %v\", err)\n\t}\n\n\treturn resp, nil\n}\n\n// ProcessRerankResponse 处理百炼 rerank 响应\nfunc (a *Adaptor) ProcessRerankResponse(resp *http.Response) (*OpenAIRerankResponse, error) {\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to read rerank response: %v\", err)\n\t}\n\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn nil, fmt.Errorf(\"rerank request failed with status %d: %s\", resp.StatusCode, string(body))\n\t}\n\n\tvar bailianResp BailianRerankResponse\n\tif err := json.Unmarshal(body, &bailianResp); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to decode rerank response: %v\", err)\n\t}\n\n\t// 转换为 OpenAI 兼容格式\n\topenaiResp := &OpenAIRerankResponse{\n\t\tObject: \"list\",\n\t\tModel:  a.meta.ActualModelName,\n\t\tData:   make([]OpenAIRerankResult, len(bailianResp.Output.Results)),\n\t\tUsage: &OpenAIRerankUsage{\n\t\t\tTotalTokens: bailianResp.Usage.TotalTokens,\n\t\t},\n\t}\n\n\tfor i, result := range bailianResp.Output.Results {\n\t\topenaiResult := OpenAIRerankResult{\n\t\t\tObject:         \"rerank_result\",\n\t\t\tIndex:          result.Index,\n\t\t\tRelevanceScore: result.RelevanceScore,\n\t\t}\n\n\t\tif result.Document != nil {\n\t\t\topenaiResult.Document = &OpenAIRerankDocument{\n\t\t\t\tText: result.Document.Text,\n\t\t\t}\n\t\t}\n\n\t\topenaiResp.Data[i] = openaiResult\n\t}\n\n\treturn openaiResp, nil\n}\n\n// HandleRerankRequest 处理完整的 rerank 请求流程\nfunc (a *Adaptor) HandleRerankRequest(c *gin.Context, request *RerankRequest) error {\n\tctx := c.Request.Context()\n\n\t// 转换请求格式\n\trerankRequest, err := a.ConvertToRerankRequest(request)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"failed to convert rerank request: %v\", err)\n\t\tc.JSON(http.StatusBadRequest, gin.H{\"error\": err.Error()})\n\t\treturn err\n\t}\n\n\t// 执行请求\n\tresp, err := a.DoRerankRequest(c, rerankRequest)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"failed to execute rerank request: %v\", err)\n\t\tc.JSON(http.StatusInternalServerError, gin.H{\"error\": err.Error()})\n\t\treturn err\n\t}\n\n\t// 处理响应\n\topenaiResp, err := a.ProcessRerankResponse(resp)\n\tif err != nil {\n\t\tlogger.Errorf(ctx, \"failed to process rerank response: %v\", err)\n\t\tc.JSON(http.StatusInternalServerError, gin.H{\"error\": err.Error()})\n\t\treturn err\n\t}\n\n\t// 返回响应\n\tc.JSON(http.StatusOK, openaiResp)\n\treturn nil\n}\n\n// ParseRerankRequest 从 gin.Context 中解析 rerank 请求\nfunc ParseRerankRequest(c *gin.Context) (*RerankRequest, error) {\n\tvar request RerankRequest\n\tif err := c.ShouldBindJSON(&request); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse rerank request: %v\", err)\n\t}\n\n\t// 验证必需字段\n\tif request.Query == \"\" {\n\t\treturn nil, fmt.Errorf(\"query is required\")\n\t}\n\n\tif len(request.Documents) == 0 {\n\t\treturn nil, fmt.Errorf(\"documents are required\")\n\t}\n\n\treturn &request, nil\n}\n\n// IsRerankModel 检查是否为 rerank 模型\nfunc (a *Adaptor) IsRerankModel(modelName string) bool {\n\trerankModels := []string{\"gte-rerank-v2\", \"gte-rerank\"}\n\tfor _, model := range rerankModels {\n\t\tif strings.HasPrefix(modelName, model) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/bailian/rerank_model.go",
    "content": "package bailian\n\n// Rerank 请求结构 - 百炼格式\ntype BailianRerankRequest struct {\n\tModel      string                  `json:\"model\"`\n\tInput      BailianRerankInput      `json:\"input\"`\n\tParameters BailianRerankParameters `json:\"parameters,omitempty\"`\n}\n\ntype BailianRerankInput struct {\n\tQuery     string   `json:\"query\"`\n\tDocuments []string `json:\"documents\"`\n}\n\ntype BailianRerankParameters struct {\n\tTopN            *int  `json:\"top_n,omitempty\"`\n\tReturnDocuments *bool `json:\"return_documents,omitempty\"`\n}\n\n// Rerank 响应结构 - 百炼格式\ntype BailianRerankResponse struct {\n\tOutput    BailianRerankOutput `json:\"output\"`\n\tUsage     RerankUsage         `json:\"usage\"`\n\tRequestID string              `json:\"request_id\"`\n}\n\ntype BailianRerankOutput struct {\n\tResults []BailianRerankResult `json:\"results\"`\n}\n\ntype BailianRerankResult struct {\n\tDocument       *BailianRerankDocument `json:\"document,omitempty\"`\n\tIndex          int                    `json:\"index\"`\n\tRelevanceScore float64                `json:\"relevance_score\"`\n}\n\ntype BailianRerankDocument struct {\n\tText string `json:\"text\"`\n}\n\ntype RerankUsage struct {\n\tTotalTokens int `json:\"total_tokens\"`\n}\n\n// 统一 Rerank 响应格式 - OpenAI 兼容\ntype OpenAIRerankResponse struct {\n\tObject string               `json:\"object\"`\n\tData   []OpenAIRerankResult `json:\"data\"`\n\tModel  string               `json:\"model\"`\n\tUsage  *OpenAIRerankUsage   `json:\"usage,omitempty\"`\n}\n\ntype OpenAIRerankResult struct {\n\tObject         string                `json:\"object\"`\n\tIndex          int                   `json:\"index\"`\n\tRelevanceScore float64               `json:\"relevance_score\"`\n\tDocument       *OpenAIRerankDocument `json:\"document,omitempty\"`\n}\n\ntype OpenAIRerankDocument struct {\n\tText string `json:\"text\"`\n}\n\ntype OpenAIRerankUsage struct {\n\tTotalTokens int `json:\"total_tokens\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/coze/adaptor.go",
    "content": "package coze\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\ntype Adaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *Adaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\nfunc (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbaseUrl, err := custom.GetBaseURL(meta.BaseURL)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// 检查是否为工作流请求\n\tif strings.HasPrefix(meta.ActualModelName, \"workflow-\") {\n\t\t// 使用工作流适配器处理\n\t\tworkflowAdaptor := &WorkflowAdaptor{\n\t\t\tmeta:         meta,\n\t\t\tCustomConfig: a.CustomConfig,\n\t\t}\n\t\treturn workflowAdaptor.GetRequestURL(meta)\n\t}\n\n\t// 默认使用Bot模式\n\turl := fmt.Sprintf(\"%s/v3/chat\", baseUrl)\n\tif a.CustomConfig.ConversationId != \"\" {\n\t\turl = fmt.Sprintf(\"%s?conversation_id=%s\", url, a.CustomConfig.ConversationId)\n\t}\n\treturn url, nil\n}\n\nfunc (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\tcustom.SetupCommonRequestHeader(c, req, meta)\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treturn nil\n}\n\nfunc (a *Adaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\n\t// 检查是否为工作流请求\n\tif strings.HasPrefix(a.meta.ActualModelName, \"workflow-\") {\n\t\t// 使用工作流适配器处理\n\t\tworkflowAdaptor := &WorkflowAdaptor{\n\t\t\tmeta:         a.meta,\n\t\t\tCustomConfig: a.CustomConfig,\n\t\t}\n\t\treturn workflowAdaptor.ConvertRequest(c, relayMode, request)\n\t}\n\n\t// 默认使用Bot模式\n\trequest.User = a.meta.Config.UserID\n\treturn ConvertRequest(*request, a.meta, a.CustomConfig), nil\n}\n\nfunc (a *Adaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\treturn request, nil\n}\n\nfunc (a *Adaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\treturn custom.DoRequestHelper(a, c, meta, requestBody)\n}\n\nfunc (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\t// 默认使用Bot模式\n\tvar responseText *string\n\tconversationId := \"\"\n\tif meta.IsStream {\n\t\terr, responseText, conversationId = StreamHandler(c, resp)\n\t} else {\n\t\terr, responseText, conversationId = Handler(c, resp, meta.PromptTokens, meta.ActualModelName)\n\t}\n\tif responseText != nil {\n\t\tusage = openai.ResponseText2Usage(*responseText, meta.ActualModelName, meta.PromptTokens)\n\t} else {\n\t\tusage = &model.Usage{}\n\t}\n\tusage.PromptTokens = meta.PromptTokens\n\tusage.TotalTokens = usage.PromptTokens + usage.CompletionTokens\n\ta.CustomConfig.ConversationId = conversationId\n\treturn\n}\n\nfunc (a *Adaptor) GetModelList() []string {\n\treturn ModelList\n}\n\nfunc (a *Adaptor) GetChannelName() string {\n\treturn \"coze\"\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/coze/constant/contenttype/define.go",
    "content": "package contenttype\n\nconst (\n\tText = \"text\"\n)\n"
  },
  {
    "path": "api/service/hub_adaptor/coze/constant/event/define.go",
    "content": "package event\n\nconst (\n\tMessage = \"message\"\n\tDone    = \"done\"\n\tError   = \"error\"\n)\n"
  },
  {
    "path": "api/service/hub_adaptor/coze/constant/messagetype/define.go",
    "content": "package messagetype\n\nconst (\n\tAnswer   = \"answer\"\n\tFollowUp = \"follow_up\"\n)\n"
  },
  {
    "path": "api/service/hub_adaptor/coze/constants.go",
    "content": "package coze\n\nvar ModelList = []string{}\n"
  },
  {
    "path": "api/service/hub_adaptor/coze/helper.go",
    "content": "package coze\n\nimport \"github.com/songquanpeng/one-api/relay/adaptor/coze/constant/event\"\n\nfunc event2StopReason(e *string) string {\n\tif e == nil || *e == event.Message {\n\t\treturn \"\"\n\t}\n\treturn \"stop\"\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/coze/main.go",
    "content": "package coze\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/storage\"\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common\"\n\t\"github.com/songquanpeng/one-api/common/conv\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\t\"github.com/songquanpeng/one-api/common/render\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/coze/constant/messagetype\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\n// https://www.coze.com/open\n\nfunc stopReasonCoze2OpenAI(reason *string) string {\n\tif reason == nil {\n\t\treturn \"\"\n\t}\n\tswitch *reason {\n\tcase \"end_turn\":\n\t\treturn \"stop\"\n\tcase \"stop_sequence\":\n\t\treturn \"stop\"\n\tcase \"max_tokens\":\n\t\treturn \"length\"\n\tdefault:\n\t\treturn *reason\n\t}\n}\n\nfunc ConvertRequest(textRequest model.GeneralOpenAIRequest, meta *meta.Meta, customConfig *custom.CustomConfig) *Request {\n\tmodelName := \"bot-\" + strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\tchannelID := meta.ChannelId\n\tcozeRequest := Request{\n\t\tStream: textRequest.Stream,\n\t\tUserID: customConfig.UserId,\n\t\tBotId:  strings.TrimPrefix(textRequest.Model, \"bot-\"),\n\t}\n\tfor _, message := range textRequest.Messages {\n\t\ttypeStr := TypeQuestion\n\t\tcontentType := ContentTypeText\n\t\tif message.Role == \"assistant\" {\n\t\t\ttypeStr = TypeAnswer\n\t\t}\n\t\tcontentStr := message.StringContent()\n\t\tif contentStr == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tvar contentObjs []db_model.ObjectStringContent\n\t\tif err := json.Unmarshal([]byte(contentStr), &contentObjs); err == nil {\n\t\t\tif len(contentObjs) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvar mergedContent []map[string]interface{}\n\t\t\tfor _, contentObj := range contentObjs {\n\t\t\t\tif contentObj.Type == \"text\" {\n\t\t\t\t\tmergedContent = append(mergedContent, map[string]interface{}{\n\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\"text\": contentObj.Content,\n\t\t\t\t\t})\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tuoloadFile := contentObj.GetUploadFile()\n\t\t\t\tif uoloadFile == nil {\n\t\t\t\t\tlogger.SysError(\"file not found\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfileMapping := uoloadFile.GetChannelFileMapping(channelID, modelName)\n\t\t\t\tif fileMapping == nil {\n\t\t\t\t\tfileMapping = &db_model.ChannelFileMapping{}\n\t\t\t\t\terr := CozeUploadFile(meta, uoloadFile, fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"upload file failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\terr = db_model.CreateChannelFileMapping(fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"create file mapping failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t} else if helper.GetTimestamp() > fileMapping.ExpirationTime {\n\t\t\t\t\terr := CozeUploadFile(meta, uoloadFile, fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"update file failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\terr = db_model.UpdateChannelFileMapping(fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"update file mapping failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar contentType string\n\t\t\t\tif strings.HasPrefix(uoloadFile.MimeType, \"image/\") {\n\t\t\t\t\tcontentType = \"image\"\n\t\t\t\t} else {\n\t\t\t\t\tcontentType = \"file\"\n\t\t\t\t}\n\t\t\t\tmergedContent = append(mergedContent, map[string]interface{}{\n\t\t\t\t\t\"type\":    contentType,\n\t\t\t\t\t\"file_id\": fileMapping.ChannelFileID,\n\t\t\t\t})\n\t\t\t}\n\t\t\tmergedJSON, _ := json.Marshal(mergedContent)\n\t\t\tcozeMessage := AdditionalMessage{\n\t\t\t\tRole:        message.Role,\n\t\t\t\tContent:     string(mergedJSON),\n\t\t\t\tContentType: ContentTypeObjectString,\n\t\t\t\tType:        typeStr,\n\t\t\t}\n\t\t\tcozeRequest.AdditionalMessages = append(cozeRequest.AdditionalMessages, cozeMessage)\n\t\t} else {\n\t\t\tcozeMessage := AdditionalMessage{\n\t\t\t\tRole:        message.Role,\n\t\t\t\tContent:     contentStr,\n\t\t\t\tContentType: contentType,\n\t\t\t\tType:        typeStr,\n\t\t\t}\n\t\t\tcozeRequest.AdditionalMessages = append(cozeRequest.AdditionalMessages, cozeMessage)\n\t\t}\n\t}\n\treturn &cozeRequest\n}\n\nfunc StreamResponseCoze2OpenAI(cozeResponse *StreamResponseV3) (*openai.ChatCompletionsStreamResponse, *Response) {\n\tvar response *Response\n\tvar stopReason string\n\tvar choice openai.ChatCompletionsStreamResponseChoice\n\n\tchoice.Delta.Content = cozeResponse.Content\n\tchoice.Delta.Role = \"assistant\"\n\tfinishReason := stopReasonCoze2OpenAI(&stopReason)\n\tif finishReason != \"null\" {\n\t\tchoice.FinishReason = &finishReason\n\t}\n\tvar openaiResponse openai.ChatCompletionsStreamResponse\n\topenaiResponse.Object = \"chat.completion.chunk\"\n\topenaiResponse.Choices = []openai.ChatCompletionsStreamResponseChoice{choice}\n\topenaiResponse.Id = cozeResponse.ConversationId\n\treturn &openaiResponse, response\n}\n\nfunc ResponseCoze2OpenAI(cozeResponse *Response) (*openai.TextResponse, string) {\n\tvar responseText string\n\tfor _, message := range cozeResponse.Messages {\n\t\tif message.Type == messagetype.Answer {\n\t\t\tresponseText = message.Content\n\t\t\tbreak\n\t\t}\n\t}\n\tchoice := openai.TextResponseChoice{\n\t\tIndex: 0,\n\t\tMessage: model.Message{\n\t\t\tRole:    \"assistant\",\n\t\t\tContent: responseText,\n\t\t\tName:    nil,\n\t\t},\n\t\tFinishReason: \"stop\",\n\t}\n\tfullTextResponse := openai.TextResponse{\n\t\tId:      fmt.Sprintf(\"chatcmpl-%s\", cozeResponse.ConversationId),\n\t\tModel:   \"coze-bot\",\n\t\tObject:  \"chat.completion\",\n\t\tCreated: helper.GetTimestamp(),\n\t\tChoices: []openai.TextResponseChoice{choice},\n\t}\n\treturn &fullTextResponse, cozeResponse.ConversationId\n}\n\nfunc StreamHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusCode, *string, string) {\n\tvar responseText string\n\tcreatedTime := helper.GetTimestamp()\n\tscanner := bufio.NewScanner(resp.Body)\n\t// 设置更大的缓冲区以处理大型响应 (1MB)\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\tscanner.Split(bufio.ScanLines)\n\n\tcommon.SetEventStreamHeaders(c)\n\tconversationId := \"\"\n\tvar modelName string\n\n\teventStr := \"\"\n\tfor scanner.Scan() {\n\t\tdata := scanner.Text()\n\t\tif data == \"\" || data == \"\\n\" {\n\t\t\tcontinue\n\t\t}\n\t\t// logger.SysLogf(\"coze stream : %s\", data)\n\t\tif strings.HasPrefix(data, \"event:\") {\n\t\t\teventStr = strings.TrimPrefix(data, \"event:\")\n\t\t}\n\n\t\tif eventStr != \"conversation.message.delta\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif len(data) < 5 || !strings.HasPrefix(data, \"data:\") {\n\t\t\tcontinue\n\t\t}\n\t\tdata = strings.TrimPrefix(data, \"data:\")\n\t\tdata = strings.TrimSuffix(data, \"\\r\")\n\n\t\tvar cozeResponse StreamResponseV3\n\t\terr := json.Unmarshal([]byte(data), &cozeResponse)\n\t\tif err != nil {\n\t\t\tlogger.SysError(\"error unmarshalling stream response: \" + err.Error())\n\t\t\tcontinue\n\t\t}\n\n\t\tif cozeResponse.Type != \"answer\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse, _ := StreamResponseCoze2OpenAI(&cozeResponse)\n\n\t\tif response == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif response.Id != \"\" {\n\t\t\tconversationId = response.Id\n\t\t}\n\n\t\tfor _, choice := range response.Choices {\n\t\t\tresponseText += conv.AsString(choice.Delta.Content)\n\t\t}\n\t\tresponse.Model = modelName\n\t\tresponse.Created = createdTime\n\n\t\terr = render.ObjectData(c, response)\n\t\tif err != nil {\n\t\t\tlogger.SysError(err.Error())\n\t\t}\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\tlogger.SysError(\"error reading stream: \" + err.Error())\n\t}\n\n\trender.Done(c)\n\n\terr := resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, conversationId\n\t}\n\n\treturn nil, &responseText, conversationId\n}\n\nfunc Handler(c *gin.Context, resp *http.Response, promptTokens int, modelName string) (*model.ErrorWithStatusCode, *string, string) {\n\tresponseBody, err := io.ReadAll(resp.Body)\n\tconversationId := \"\"\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"read_response_body_failed\", http.StatusInternalServerError), nil, conversationId\n\t}\n\terr = resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, conversationId\n\t}\n\tvar cozeResponse Response\n\terr = json.Unmarshal(responseBody, &cozeResponse)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"unmarshal_response_body_failed\", http.StatusInternalServerError), nil, conversationId\n\t}\n\tif cozeResponse.Code != 0 {\n\t\treturn &model.ErrorWithStatusCode{\n\t\t\tError: model.Error{\n\t\t\t\tMessage: cozeResponse.Msg,\n\t\t\t\tCode:    cozeResponse.Code,\n\t\t\t},\n\t\t\tStatusCode: resp.StatusCode,\n\t\t}, nil, conversationId\n\t}\n\tfullTextResponse, conversationId := ResponseCoze2OpenAI(&cozeResponse)\n\tfullTextResponse.Model = modelName\n\tjsonResponse, err := json.Marshal(fullTextResponse)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"marshal_response_body_failed\", http.StatusInternalServerError), nil, conversationId\n\t}\n\tc.Writer.Header().Set(\"Content-Type\", \"application/json\")\n\tc.Writer.WriteHeader(resp.StatusCode)\n\t_, err = c.Writer.Write(jsonResponse)\n\tvar responseText string\n\tif len(fullTextResponse.Choices) > 0 {\n\t\tresponseText = fullTextResponse.Choices[0].Message.StringContent()\n\t}\n\treturn nil, &responseText, conversationId\n}\n\nfunc CozeUploadFile(meta *meta.Meta, uploadFile *db_model.UploadFile, fileMapping *db_model.ChannelFileMapping) error {\n\turl := fmt.Sprintf(\"%s/v1/files/upload\", meta.BaseURL)\n\tfileContent, err := storage.StorageInstance.Load(uploadFile.Key)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbody := &bytes.Buffer{}\n\twriter := multipart.NewWriter(body)\n\tpart, err := writer.CreateFormFile(\"file\", uploadFile.FileName)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = io.Copy(part, bytes.NewReader(fileContent))\n\tif err != nil {\n\t\treturn err\n\t}\n\twriter.Close()\n\n\treq, err := http.NewRequest(\"POST\", url, body)\n\tif err != nil {\n\t\treturn err\n\t}\n\treq.Header.Set(\"Content-Type\", writer.FormDataContentType())\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn fmt.Errorf(\"upload failed with status: %s\", resp.Status)\n\t}\n\n\tvar result struct {\n\t\tCode int `json:\"code\"`\n\t\tData struct {\n\t\t\tID string `json:\"id\"`\n\t\t} `json:\"data\"`\n\t}\n\terr = json.NewDecoder(resp.Body).Decode(&result)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif result.Code != 0 {\n\t\treturn fmt.Errorf(\"upload failed with code: %d\", result.Code)\n\t}\n\tExpirationTime := helper.GetTimestamp() + 3600*24*30\n\n\tfileMapping.Eid = uploadFile.Eid\n\tfileMapping.FileID = uploadFile.ID\n\tfileMapping.ChannelID = meta.ChannelId\n\tfileMapping.Model = \"bot-\" + strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\tfileMapping.ChannelFileID = result.Data.ID\n\tfileMapping.ExpirationTime = ExpirationTime\n\tjsonResult, err := json.Marshal(result)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfileMapping.ApiResponse = string(jsonResult)\n\n\treturn nil\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/coze/model.go",
    "content": "package coze\n\ntype Message struct {\n\tRole        string `json:\"role\"`\n\tType        string `json:\"type\"`\n\tContent     string `json:\"content\"`\n\tContentType string `json:\"content_type\"`\n}\n\nconst (\n\tTypeQuestion     = \"question\"\n\tTypeAnswer       = \"answer\"\n\tTypeFunctionCall = \"function_call\"\n\tTypeToolResponse = \"tool_response\"\n)\n\nconst (\n\tContentTypeText         = \"text\"\n\tContentTypeObjectString = \"object_string\"\n)\n\ntype AdditionalMessage struct {\n\tRole        string `json:\"role\"`\n\tContent     string `json:\"content\"`\n\tContentType string `json:\"content_type\"`\n\tType        string `json:\"type\"`\n}\n\ntype ErrorInformation struct {\n\tCode int    `json:\"code\"`\n\tMsg  string `json:\"msg\"`\n}\n\ntype Request struct {\n\tBotId              string              `json:\"bot_id\"`\n\tUserID             string              `json:\"user_id\"`\n\tAdditionalMessages []AdditionalMessage `json:\"additional_messages,omitempty\"`\n\tStream             bool                `json:\"stream\"`\n}\n\ntype Response struct {\n\tConversationId string    `json:\"conversation_id,omitempty\"`\n\tMessages       []Message `json:\"messages,omitempty\"`\n\tCode           int       `json:\"code,omitempty\"`\n\tMsg            string    `json:\"msg,omitempty\"`\n}\n\ntype StreamResponse struct {\n\tEvent            string            `json:\"event,omitempty\"`\n\tMessage          *Message          `json:\"message,omitempty\"`\n\tIsFinish         bool              `json:\"is_finish,omitempty\"`\n\tIndex            int               `json:\"index,omitempty\"`\n\tConversationId   string            `json:\"conversation_id,omitempty\"`\n\tErrorInformation *ErrorInformation `json:\"error_information,omitempty\"`\n}\n\ntype StreamResponseV3 struct {\n\tID             string      `json:\"id\"`\n\tConversationId string      `json:\"conversation_id\"`\n\tBotId          string      `json:\"bot_id\"`\n\tRole           string      `json:\"role\"`\n\tType           string      `json:\"type\"`\n\tContent        interface{} `json:\"content\"`\n\tContentType    string      `json:\"content_type\"`\n\tChatId         string      `json:\"chat_id\"`\n\tSectionId      string      `json:\"section_id\"`\n}\n\n// Workflow related structures\ntype WorkflowRequest struct {\n\tWorkflowID string                 `json:\"workflow_id\"`\n\tParameters map[string]interface{} `json:\"parameters\"`\n}\n\ntype WorkflowResponse struct {\n\tCode      int         `json:\"code\"`\n\tMsg       string      `json:\"msg\"`\n\tData      interface{} `json:\"data\"` // 可能是字符串或对象\n\tExecuteID string      `json:\"execute_id\"`\n\tDebugURL  string      `json:\"debug_url\"`\n\tToken     int         `json:\"token\"`\n}\n\ntype WorkflowExecutionData struct {\n\tExecuteID string                 `json:\"execute_id\"`\n\tStatus    string                 `json:\"status\"`\n\tOutput    map[string]interface{} `json:\"output\"`\n\tError     *WorkflowError         `json:\"error,omitempty\"`\n}\n\ntype WorkflowError struct {\n\tCode    int    `json:\"code\"`\n\tMessage string `json:\"message\"`\n}\n\nconst (\n\tWorkflowStatusSuccess = \"success\"\n\tWorkflowStatusFailed  = \"failed\"\n\tWorkflowStatusRunning = \"running\"\n)\n"
  },
  {
    "path": "api/service/hub_adaptor/coze/workflow.go",
    "content": "package coze\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\ntype WorkflowAdaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *WorkflowAdaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\nfunc (a *WorkflowAdaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbaseUrl, err := custom.GetBaseURL(meta.BaseURL)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"%s/v1/workflow/run\", baseUrl), nil\n}\n\nfunc (a *WorkflowAdaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\tcustom.SetupCommonRequestHeader(c, req, meta)\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treturn nil\n}\n\nfunc (a *WorkflowAdaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\n\t// 提取工作流ID\n\tworkflowID := extractWorkflowIDFromModel(request.Model)\n\tif workflowID == \"\" {\n\t\treturn nil, errors.New(\"workflow ID cannot be empty\")\n\t}\n\n\t// 提取用户输入（取最后一条用户消息）\n\tvar input string\n\tfor i := len(request.Messages) - 1; i >= 0; i-- {\n\t\tif request.Messages[i].Role == \"user\" {\n\t\t\tinput = request.Messages[i].StringContent()\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif input == \"\" {\n\t\treturn nil, errors.New(\"no user input found in messages\")\n\t}\n\n\t// 构建工作流请求参数\n\tparameters := make(map[string]interface{})\n\n\t// 优先使用前端直接传入的工作流参数（从 relay 层传递）\n\tif c != nil {\n\t\tif workflowParams, exists := c.Get(\"workflow_parameters\"); exists {\n\t\t\tif params, ok := workflowParams.(map[string]interface{}); ok {\n\t\t\t\t// 直接使用传入的参数，不做任何验证或转换\n\t\t\t\tparameters = params\n\t\t\t\tlogger.SysLogf(\"Coze工作流请求 - 使用前端传入的参数: %+v\", parameters)\n\t\t\t}\n\t\t}\n\t}\n\n\t// 如果没有直接传入的参数，使用默认的 input 参数（向后兼容）\n\tif len(parameters) == 0 {\n\t\tparameters[\"input\"] = input\n\t\tlogger.SysLogf(\"Coze工作流请求 - 使用默认参数映射: input=%s\", input)\n\t}\n\n\t// 构建工作流请求\n\tworkflowRequest := &WorkflowRequest{\n\t\tWorkflowID: workflowID,\n\t\tParameters: parameters,\n\t}\n\n\tlogger.SysLogf(\"Coze工作流请求 - WorkflowID: %s, Parameters: %+v\", workflowID, parameters)\n\n\treturn workflowRequest, nil\n}\n\n// ConvertWorkflowRequest 直接从工作流参数构造请求，简化参数传递\nfunc (a *WorkflowAdaptor) ConvertWorkflowRequest(workflowID string, parameters map[string]interface{}) *WorkflowRequest {\n\tlogger.SysLogf(\"Coze工作流直接请求 - WorkflowID: %s, Parameters: %+v\", workflowID, parameters)\n\n\t// 处理参数中的文件上传\n\tprocessedParameters, err := a.processWorkflowParameters(parameters)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"处理工作流文件参数失败: %v\", err)\n\t\t// 如果文件处理失败，使用原始参数继续执行\n\t\tprocessedParameters = parameters\n\t}\n\n\treturn &WorkflowRequest{\n\t\tWorkflowID: workflowID,\n\t\tParameters: processedParameters,\n\t}\n}\n\n// processWorkflowParameters 处理工作流参数中的文件上传\nfunc (a *WorkflowAdaptor) processWorkflowParameters(parameters map[string]interface{}) (map[string]interface{}, error) {\n\tif a.meta == nil {\n\t\treturn parameters, fmt.Errorf(\"meta is nil\")\n\t}\n\n\tprocessedParams := make(map[string]interface{})\n\n\tfor key, value := range parameters {\n\t\tprocessedValue, err := a.processParameterValue(value)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"处理参数 %s 失败: %v\", key, err)\n\t\t\t// 如果单个参数处理失败，使用原始值\n\t\t\tprocessedParams[key] = value\n\t\t} else {\n\t\t\tprocessedParams[key] = processedValue\n\t\t}\n\t}\n\n\treturn processedParams, nil\n}\n\n// processParameterValue 递归处理参数值，支持字符串、数组、对象\n// https://www.coze.cn/open/docs/developer_guides/workflow_run\nfunc (a *WorkflowAdaptor) processParameterValue(value interface{}) (interface{}, error) {\n\tswitch v := value.(type) {\n\tcase string:\n\t\t// 检查是否为 file_id: 格式\n\t\treturn a.processFileIDString(v)\n\tcase []interface{}:\n\t\t// 处理数组\n\t\tprocessedArray := make([]interface{}, len(v))\n\t\tfor i, item := range v {\n\t\t\tprocessedItem, err := a.processParameterValue(item)\n\t\t\tif err != nil {\n\t\t\t\tprocessedArray[i] = item // 使用原始值\n\t\t\t} else {\n\t\t\t\tprocessedArray[i] = processedItem\n\t\t\t}\n\t\t}\n\t\treturn processedArray, nil\n\tcase map[string]interface{}:\n\t\t// 处理对象\n\t\tprocessedMap := make(map[string]interface{})\n\t\tfor k, val := range v {\n\t\t\tprocessedVal, err := a.processParameterValue(val)\n\t\t\tif err != nil {\n\t\t\t\tprocessedMap[k] = val // 使用原始值\n\t\t\t} else {\n\t\t\t\tprocessedMap[k] = processedVal\n\t\t\t}\n\t\t}\n\t\treturn processedMap, nil\n\tdefault:\n\t\t// 其他类型直接返回\n\t\treturn value, nil\n\t}\n}\n\n// processFileIDString 处理 file_id: 格式的字符串\nfunc (a *WorkflowAdaptor) processFileIDString(value string) (interface{}, error) {\n\t// 检查是否为 file_id: 格式\n\tif !strings.HasPrefix(value, \"file_id:\") {\n\t\treturn value, nil\n\t}\n\n\t// 提取文件ID\n\tfileIDStr := strings.TrimPrefix(value, \"file_id:\")\n\tfileID, err := strconv.ParseInt(fileIDStr, 10, 64)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"解析文件ID失败: %s, error: %v\", fileIDStr, err)\n\t\treturn value, err\n\t}\n\n\t// 获取上传文件对象\n\tuploadFile, err := db_model.GetUploadFileByID(fileID)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"获取上传文件失败: ID=%d, error: %v\", fileID, err)\n\t\treturn value, err\n\t}\n\n\t// 获取渠道文件映射\n\tchannelID := a.meta.ChannelId\n\tmodelName := \"workflow-\" + strings.TrimPrefix(a.meta.ActualModelName, \"workflow-\")\n\n\tfileMapping := uploadFile.GetChannelFileMapping(channelID, modelName)\n\tif fileMapping == nil {\n\t\t// 创建新的文件映射\n\t\tfileMapping = &db_model.ChannelFileMapping{}\n\t\terr := CozeUploadFile(a.meta, uploadFile, fileMapping)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"上传文件到Coze失败: %v\", err)\n\t\t\treturn value, err\n\t\t}\n\t\terr = db_model.CreateChannelFileMapping(fileMapping)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"创建文件映射失败: %v\", err)\n\t\t\treturn value, err\n\t\t}\n\t} else if helper.GetTimestamp() > fileMapping.ExpirationTime {\n\t\t// 文件映射已过期，重新上传\n\t\terr := CozeUploadFile(a.meta, uploadFile, fileMapping)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"重新上传文件到Coze失败: %v\", err)\n\t\t\treturn value, err\n\t\t}\n\t\terr = db_model.UpdateChannelFileMapping(fileMapping)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"更新文件映射失败: %v\", err)\n\t\t\treturn value, err\n\t\t}\n\t}\n\n\t// 根据文件类型生成对应的格式\n\tvar fileObject map[string]interface{}\n\tif strings.HasPrefix(uploadFile.MimeType, \"image/\") {\n\t\tfileObject = map[string]interface{}{\n\t\t\t// \"type\":    \"image\",\n\t\t\t\"file_id\": fileMapping.ChannelFileID,\n\t\t}\n\t} else {\n\t\tfileObject = map[string]interface{}{\n\t\t\t// \"type\":    \"file\",\n\t\t\t\"file_id\": fileMapping.ChannelFileID,\n\t\t}\n\t}\n\n\t// 将文件对象转换为 JSON 字符串，然后包装在数组中（Coze 工作流要求的格式）\n\tfileObjectJSON, err := json.Marshal(fileObject)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"序列化文件对象失败: %v\", err)\n\t\treturn value, err\n\t}\n\n\t// 返回包含 JSON 字符串的数组格式\n\t// fileArray := []string{string(fileObjectJSON)}\n\n\t// logger.SysLogf(\"工作流文件处理成功 - 原始ID: %d, 渠道文件ID: %s, 类型: %s, 数组格式: %v\",\n\t// \tfileID, fileMapping.ChannelFileID, uploadFile.MimeType, fileArray)\n\n\treturn string(fileObjectJSON), nil\n}\n\nfunc (a *WorkflowAdaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\treturn nil, errors.New(\"workflow adaptor does not support image requests\")\n}\n\nfunc (a *WorkflowAdaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\treturn custom.DoRequestHelper(a, c, meta, requestBody)\n}\n\nfunc (a *WorkflowAdaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\t// 读取响应体\n\tresponseBody, readErr := io.ReadAll(resp.Body)\n\tif readErr != nil {\n\t\treturn nil, openai.ErrorWrapper(readErr, \"read_response_body_failed\", http.StatusInternalServerError)\n\t}\n\n\tcloseErr := resp.Body.Close()\n\tif closeErr != nil {\n\t\treturn nil, openai.ErrorWrapper(closeErr, \"close_response_body_failed\", http.StatusInternalServerError)\n\t}\n\n\t// 解析工作流响应\n\tvar workflowResp WorkflowResponse\n\tif unmarshalErr := json.Unmarshal(responseBody, &workflowResp); unmarshalErr != nil {\n\t\tlogger.SysErrorf(\"Coze工作流响应解析失败: %v\", unmarshalErr)\n\t\treturn nil, openai.ErrorWrapper(unmarshalErr, \"unmarshal_response_body_failed\", http.StatusInternalServerError)\n\t}\n\n\t// 检查工作流执行状态\n\tif workflowResp.Code != 0 {\n\t\tlogger.SysErrorf(\"Coze工作流执行失败 - Code: %d, Msg: %s\", workflowResp.Code, workflowResp.Msg)\n\t\treturn nil, &model.ErrorWithStatusCode{\n\t\t\tError: model.Error{\n\t\t\t\tMessage: workflowResp.Msg,\n\t\t\t\tCode:    workflowResp.Code,\n\t\t\t},\n\t\t\tStatusCode: resp.StatusCode,\n\t\t}\n\t}\n\n\t// 转换为OpenAI格式响应\n\topenaiResponse := a.convertToOpenAIResponse(&workflowResp, meta.ActualModelName)\n\n\t// 序列化响应\n\tjsonResponse, marshalErr := json.Marshal(openaiResponse)\n\tif marshalErr != nil {\n\t\treturn nil, openai.ErrorWrapper(marshalErr, \"marshal_response_body_failed\", http.StatusInternalServerError)\n\t}\n\n\t// 写入响应\n\tc.Writer.Header().Set(\"Content-Type\", \"application/json\")\n\tc.Writer.WriteHeader(resp.StatusCode)\n\t_, writeErr := c.Writer.Write(jsonResponse)\n\tif writeErr != nil {\n\t\tlogger.SysErrorf(\"写入响应失败: %v\", writeErr)\n\t}\n\n\t// 计算使用量\n\tvar responseText string\n\tif len(openaiResponse.Choices) > 0 {\n\t\tresponseText = openaiResponse.Choices[0].Message.StringContent()\n\t}\n\n\tusage = &model.Usage{\n\t\tPromptTokens:     openaiResponse.Usage.PromptTokens,\n\t\tCompletionTokens: openaiResponse.Usage.CompletionTokens,\n\t\tTotalTokens:      openaiResponse.Usage.TotalTokens,\n\t}\n\n\tlogger.SysLogf(\"Coze工作流响应成功 - Token: %d, 输出长度: %d\", workflowResp.Token, len(responseText))\n\n\treturn usage, nil\n}\n\nfunc (a *WorkflowAdaptor) GetModelList() []string {\n\treturn []string{} // 工作流模型列表由渠道配置决定\n}\n\nfunc (a *WorkflowAdaptor) GetChannelName() string {\n\treturn \"coze-workflow\"\n}\n\n// extractWorkflowIDFromModel 从模型名称中提取工作流ID\nfunc extractWorkflowIDFromModel(modelName string) string {\n\t// 方法1: 如果是标准的 workflow-{id} 格式\n\tif strings.HasPrefix(modelName, \"workflow-\") {\n\t\treturn strings.TrimPrefix(modelName, \"workflow-\")\n\t}\n\n\t// 方法2: 直接使用模型名称作为工作流ID\n\t// 这适用于手动创建的 agent，其模型名称就是工作流ID\n\treturn modelName\n}\n\n// convertToOpenAIResponse 将工作流响应转换为OpenAI格式\nfunc (a *WorkflowAdaptor) convertToOpenAIResponse(workflowResp *WorkflowResponse, modelName string) *openai.TextResponse {\n\t// 解析 data 字段（可能是字符串或对象）\n\tvar outputData map[string]interface{}\n\tvar content string\n\n\t// 处理 data 字段\n\tif dataStr, ok := workflowResp.Data.(string); ok {\n\t\t// data 是字符串，需要解析 JSON\n\t\tif err := json.Unmarshal([]byte(dataStr), &outputData); err != nil {\n\t\t\tlogger.SysErrorf(\"解析工作流 data 字段失败: %v\", err)\n\t\t\tcontent = dataStr // 如果解析失败，直接使用原字符串\n\t\t} else {\n\t\t\t// 成功解析，按照统一标准提取结果\n\t\t\tcontent = extractUnifiedOutput(outputData)\n\t\t}\n\t} else if dataMap, ok := workflowResp.Data.(map[string]interface{}); ok {\n\t\t// data 是对象\n\t\toutputData = dataMap\n\t\tcontent = extractUnifiedOutput(outputData)\n\t} else {\n\t\t// 其他情况，转换为字符串\n\t\tif dataBytes, err := json.Marshal(workflowResp.Data); err == nil {\n\t\t\tcontent = string(dataBytes)\n\t\t} else {\n\t\t\tcontent = \"工作流执行完成，但输出格式无法解析\"\n\t\t}\n\t}\n\n\t// 使用 Coze 返回的 token 数量，如果没有则估算\n\tvar promptTokens, completionTokens, totalTokens int\n\tif workflowResp.Token > 0 {\n\t\ttotalTokens = workflowResp.Token\n\t\tpromptTokens = totalTokens / 3         // 估算输入占 1/3\n\t\tcompletionTokens = totalTokens * 2 / 3 // 估算输出占 2/3\n\t} else {\n\t\t// 简单估算\n\t\tpromptTokens = len(content) / 4\n\t\tcompletionTokens = len(content) / 4\n\t\ttotalTokens = promptTokens + completionTokens\n\t}\n\n\treturn &openai.TextResponse{\n\t\tId:      fmt.Sprintf(\"workflow-exec-%s\", workflowResp.ExecuteID),\n\t\tObject:  \"chat.completion\",\n\t\tModel:   modelName,\n\t\tCreated: helper.GetTimestamp(),\n\t\tChoices: []openai.TextResponseChoice{{\n\t\t\tIndex: 0,\n\t\t\tMessage: model.Message{\n\t\t\t\tRole:    \"assistant\",\n\t\t\t\tContent: content,\n\t\t\t},\n\t\t\tFinishReason: \"stop\",\n\t\t}},\n\t\tUsage: model.Usage{\n\t\t\tPromptTokens:     promptTokens,\n\t\t\tCompletionTokens: completionTokens,\n\t\t\tTotalTokens:      totalTokens,\n\t\t},\n\t}\n}\n\n// extractUnifiedOutput 按照统一标准提取输出结果\n// 统一标准：优先查找 \"结果\" 字段，然后是其他常见字段\nfunc extractUnifiedOutput(outputData map[string]interface{}) string {\n\t// 按优先级查找输出字段\n\tpriorityFields := []string{\"结果\", \"output\", \"result\", \"answer\", \"response\", \"content\", \"text\"}\n\n\tfor _, field := range priorityFields {\n\t\tif value, exists := outputData[field]; exists {\n\t\t\tif strValue, ok := value.(string); ok && strValue != \"\" {\n\t\t\t\treturn strValue\n\t\t\t}\n\t\t}\n\t}\n\n\t// 如果没有找到标准字段，将整个输出序列化为JSON\n\tif outputBytes, err := json.Marshal(outputData); err == nil {\n\t\treturn string(outputBytes)\n\t}\n\n\treturn \"工作流执行完成，但输出格式无法解析\"\n}\n\n// ConvertToWorkflowResponseData 将 Coze 工作流响应转换为统一的 WorkflowResponseData 格式\nfunc (a *WorkflowAdaptor) ConvertToWorkflowResponseData(responseBody []byte) (*custom.WorkflowResponseData, error) {\n\t// 解析工作流响应\n\tvar workflowResp WorkflowResponse\n\tif err := json.Unmarshal(responseBody, &workflowResp); err != nil {\n\t\tlogger.SysErrorf(\"Coze工作流响应解析失败: %v\", err)\n\t\treturn nil, fmt.Errorf(\"响应解析失败: %v\", err)\n\t}\n\n\t// 检查工作流执行状态\n\tif workflowResp.Code != 0 {\n\t\tlogger.SysErrorf(\"Coze工作流执行失败 - Code: %d, Msg: %s\", workflowResp.Code, workflowResp.Msg)\n\t\treturn nil, fmt.Errorf(\"工作流执行失败 - Code: %d, Msg: %s\", workflowResp.Code, workflowResp.Msg)\n\t}\n\n\t// 转换工作流输出数据\n\tworkflowOutputData := a.parseWorkflowOutputData(workflowResp.Data)\n\n\t// 构造统一的响应格式\n\tresponseData := &custom.WorkflowResponseData{\n\t\tWorkflowOutputData: workflowOutputData,\n\t\tExecuteID:          workflowResp.ExecuteID,\n\t}\n\n\tlogger.SysLogf(\"Coze工作流响应转换完成 - ExecuteID: %s, 输出字段数: %d\",\n\t\tworkflowResp.ExecuteID, len(workflowOutputData))\n\n\treturn responseData, nil\n}\n\n// parseWorkflowOutputData 解析工作流输出数据为 key-value 格式\nfunc (a *WorkflowAdaptor) parseWorkflowOutputData(rawData interface{}) map[string]interface{} {\n\tresult := make(map[string]interface{})\n\n\tif rawData == nil {\n\t\tlogger.SysLogf(\"Coze工作流数据为空\")\n\t\tresult[\"output\"] = \"\"\n\t\treturn result\n\t}\n\n\t// 处理字符串格式的 JSON 数据\n\tif dataStr, ok := rawData.(string); ok {\n\t\tvar parsedData map[string]interface{}\n\t\tif err := json.Unmarshal([]byte(dataStr), &parsedData); err != nil {\n\t\t\tlogger.SysLogf(\"Coze工作流数据 JSON 解析失败: %v, 原始数据长度: %d\", err, len(dataStr))\n\t\t\t// 如果解析失败，将原始字符串作为 \"output\" 字段返回\n\t\t\tresult[\"output\"] = dataStr\n\t\t\treturn result\n\t\t}\n\t\t// 成功解析，直接返回解析后的数据\n\t\treturn parsedData\n\t}\n\n\t// 处理已经是 map 格式的数据\n\tif dataMap, ok := rawData.(map[string]interface{}); ok {\n\t\treturn dataMap\n\t}\n\n\t// 处理数组类型的数据\n\tif dataArray, ok := rawData.([]interface{}); ok {\n\t\tresult[\"output\"] = dataArray\n\t\tresult[\"count\"] = len(dataArray)\n\t\tlogger.SysLogf(\"Coze工作流返回数组数据，长度: %d\", len(dataArray))\n\t\treturn result\n\t}\n\n\t// 处理其他类型的数据，尝试序列化后再解析\n\tif dataBytes, err := json.Marshal(rawData); err == nil {\n\t\tvar parsedData map[string]interface{}\n\t\tif err := json.Unmarshal(dataBytes, &parsedData); err == nil {\n\t\t\treturn parsedData\n\t\t}\n\t\t// 如果解析失败，将序列化后的字符串作为 \"output\" 字段返回\n\t\tresult[\"output\"] = string(dataBytes)\n\t} else {\n\t\t// 如果序列化也失败，将原始数据转换为字符串\n\t\tresult[\"output\"] = fmt.Sprintf(\"%v\", rawData)\n\t}\n\n\tlogger.SysLogf(\"Coze工作流数据转换为默认格式，输出字段数: %d\", len(result))\n\treturn result\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/custom/common.go",
    "content": "package custom\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/client\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n)\n\nfunc SetupCommonRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) {\n\treq.Header.Set(\"Content-Type\", c.Request.Header.Get(\"Content-Type\"))\n\treq.Header.Set(\"Accept\", c.Request.Header.Get(\"Accept\"))\n\tif meta.IsStream && c.Request.Header.Get(\"Accept\") == \"\" {\n\t\treq.Header.Set(\"Accept\", \"text/event-stream\")\n\t}\n}\n\nfunc DoRequestHelper(a adaptor.Adaptor, c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\t// 先读取并保存请求体内容\n\tvar bodyBytes []byte\n\tvar err error\n\tif requestBody != nil {\n\t\tbodyBytes, err = io.ReadAll(requestBody)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"read request body failed: %w\", err)\n\t\t}\n\t\t// 重新创建requestBody供后续使用\n\t\trequestBody = bytes.NewReader(bodyBytes)\n\t}\n\n\tfullRequestURL, err := a.GetRequestURL(meta)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get request url failed: %w\", err)\n\t}\n\treq, err := http.NewRequest(c.Request.Method, fullRequestURL, requestBody)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"new request failed: %w\", err)\n\t}\n\terr = a.SetupRequestHeader(c, req, meta)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"setup request header failed: %w\", err)\n\t}\n\tresp, err := DoRequest(c, req)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"do request failed: %w\", err)\n\t}\n\n\tif config.DebugEnabled {\n\t\tvar bodyStr string\n\t\tif len(bodyBytes) > 0 {\n\t\t\tbodyStr = string(bodyBytes)\n\t\t\t// 尝试将bodyStr格式化为更易读的JSON\n\t\t\tvar jsonBody interface{}\n\t\t\tif json.Unmarshal(bodyBytes, &jsonBody) == nil {\n\t\t\t\tif prettyJSON, err := json.MarshalIndent(jsonBody, \"\", \"  \"); err == nil {\n\t\t\t\t\tbodyStr = string(prettyJSON)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tbodyStr = \"<empty>\"\n\t\t}\n\n\t\tlogger.SysLogf(\"\\n=== DEBUG REQUEST ===\\n\"+\n\t\t\t\"URL: %s\\n\"+\n\t\t\t\"Method: %s\\n\"+\n\t\t\t\"Headers: %v\\n\"+\n\t\t\t\"Body: \\n%s\\n\"+\n\t\t\t\"====================\",\n\t\t\tfullRequestURL,\n\t\t\tc.Request.Method,\n\t\t\treq.Header,\n\t\t\tbodyStr,\n\t\t)\n\t}\n\treturn resp, nil\n}\n\nfunc DoRequest(c *gin.Context, req *http.Request) (*http.Response, error) {\n\tresp, err := client.HTTPClient.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif resp == nil {\n\t\treturn nil, errors.New(\"resp is nil\")\n\t}\n\t_ = req.Body.Close()\n\t_ = c.Request.Body.Close()\n\treturn resp, nil\n}\n\nfunc GetBaseURL(baseUrl string) (string, error) {\n\tbaseUrl, err := helper.GetHost(baseUrl)\n\tif err != nil {\n\t\treturn \"\", errors.New(\"invalid base url: \" + baseUrl)\n\t}\n\tbaseUrl = strings.TrimSuffix(baseUrl, \"/\")\n\treturn baseUrl, nil\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/custom/config.go",
    "content": "package custom\n\ntype CustomConfig struct {\n\tUserId                     string                   `json:\"user_id,omitempty\"`\n\tConversationId             string                   `json:\"conversation_id,omitempty\"`\n\tConversationExpirationTime int64                    `json:\"conversation_expire,omitempty\"`\n\tAIHubConversationId        int64                    `json:\"53AIHub_conversation_id,omitempty\"`\n\tWorkflowParams             map[string]WorkflowParam `json:\"workflow_params,omitempty\"` // 工作流参数配置\n}\n\n// WorkflowParam 工作流参数配置\ntype WorkflowParam struct {\n\tSource string `json:\"source\"` // 参数来源: \"user_input\", \"static\", \"duplicate\"\n\tValue  string `json:\"value\"`  // 静态值（当 source 为 \"static\" 时使用）\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/custom/workflow.go",
    "content": "package custom\n\n// WorkflowResponseData 工作流标准响应数据结构\ntype WorkflowResponseData struct {\n\tWorkflowOutputData map[string]interface{} `json:\"workflow_output_data\"` // 工作流输出数据\n\tExecuteID          string                 `json:\"execute_id\"`           // 执行ID\n\tChannelID          int                    `json:\"channel_id\"`\n\tModelName          string                 `json:\"model_name\"` // 模型名称\n}\n\n// WorkflowAdaptorResponse 工作流适配器响应接口\n// 所有工作流适配器都应该实现此接口，以提供统一的响应格式\ntype WorkflowAdaptorResponse interface {\n\tIsSuccess() bool\n\tGetExecuteID() string\n\tGetOutputData() interface{}\n\tGetErrorMessage() string\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/dify/adaptor.go",
    "content": "package dify\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"net/textproto\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/storage\"\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\ntype Adaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *Adaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\nfunc (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbaseUrl, err := custom.GetBaseURL(meta.BaseURL)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"%s/v1/chat-messages\", baseUrl), nil\n}\n\nfunc (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\tcustom.SetupCommonRequestHeader(c, req, meta)\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treturn nil\n}\n\nfunc (a *Adaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\trequest.User = a.meta.Config.UserID\n\treturn ConvertRequest(*request, a.meta, a.CustomConfig), nil\n}\n\nfunc ConvertRequest(textRequest model.GeneralOpenAIRequest, meta *meta.Meta, customConfig *custom.CustomConfig) *Request {\n\tmodelName := \"bot-\" + strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\tchannelID := meta.ChannelId\n\tdifyRequest := Request{\n\t\tConversationId: customConfig.ConversationId,\n\t\tUser:           customConfig.UserId,\n\t\tResponseMode:   ResponseModeBlock,\n\t\tInputs:         struct{}{},\n\t}\n\tif textRequest.Stream {\n\t\tdifyRequest.ResponseMode = ResponseModeStream\n\t}\n\n\tqueryStr := \"\"\n\tfor i, message := range textRequest.Messages {\n\t\tif i == len(textRequest.Messages)-1 {\n\t\t\tqueryStr = message.StringContent()\n\t\t\tcontinue\n\t\t}\n\t}\n\n\tdifyRequest.Query = queryStr\n\tvar files []File\n\tvar contentObjs []db_model.ObjectStringContent\n\n\tif err := json.Unmarshal([]byte(queryStr), &contentObjs); err == nil {\n\t\tif len(contentObjs) > 0 {\n\t\t\ttargetStr := \"\"\n\t\t\tfor _, contentObj := range contentObjs {\n\t\t\t\tif contentObj.Type == \"text\" {\n\t\t\t\t\tif targetStr == \"\" {\n\t\t\t\t\t\ttargetStr = contentObj.Content\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif contentObj.Type != \"image\" {\n\t\t\t\t\tlogger.SysError(\"File types are not supported temporarily\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tuoloadFile := contentObj.GetUploadFile()\n\t\t\t\tif uoloadFile == nil {\n\t\t\t\t\tlogger.SysError(\"file not found\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfileMapping := uoloadFile.GetChannelFileMapping(channelID, modelName)\n\t\t\t\tif fileMapping == nil {\n\t\t\t\t\tfileMapping = &db_model.ChannelFileMapping{}\n\t\t\t\t\terr := DIFYUploadFile(meta, uoloadFile, fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"upload file failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\terr = db_model.CreateChannelFileMapping(fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"create file mapping failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t} else if helper.GetTimestamp() > fileMapping.ExpirationTime {\n\t\t\t\t\terr := DIFYUploadFile(meta, uoloadFile, fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"update file failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\terr = db_model.UpdateChannelFileMapping(fileMapping)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tlogger.SysError(fmt.Sprintf(\"update file mapping failed: %v\", err))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfiles = append(files, File{\n\t\t\t\t\tType:           \"image\",\n\t\t\t\t\tTransferMethod: \"local_file\",\n\t\t\t\t\tUploadFileID:   fileMapping.ChannelFileID,\n\t\t\t\t\tUrl:            \"\",\n\t\t\t\t})\n\t\t\t}\n\t\t\tdifyRequest.Files = files\n\t\t\tdifyRequest.Query = targetStr\n\t\t}\n\t}\n\tlogger.SysLogf(\"difyRequest:\", difyRequest)\n\treturn &difyRequest\n}\n\nfunc (a *Adaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\treturn custom.DoRequestHelper(a, c, meta, requestBody)\n}\n\nfunc (a *Adaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\treturn request, nil\n}\n\nfunc (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\tvar responseText *string\n\tvar channelConversationId string\n\tif meta.IsStream {\n\t\terr, responseText, channelConversationId = StreamHandler(c, resp)\n\t} else {\n\t\terr, responseText, channelConversationId = Handler(c, resp, meta.PromptTokens, meta.ActualModelName)\n\t}\n\tif responseText != nil {\n\t\tusage = openai.ResponseText2Usage(*responseText, meta.ActualModelName, meta.PromptTokens)\n\t} else {\n\t\tusage = &model.Usage{}\n\t}\n\tusage.PromptTokens = meta.PromptTokens\n\tusage.TotalTokens = usage.PromptTokens + usage.CompletionTokens\n\ta.CustomConfig.ConversationId = channelConversationId\n\treturn\n}\n\nfunc Handler(c *gin.Context, resp *http.Response, promptTokens int, modelName string) (*model.ErrorWithStatusCode, *string, string) {\n\tchannelConversationId := \"\"\n\tresponseBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"read_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\terr = resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\tvar difyResponse BlockResponse\n\terr = json.Unmarshal(responseBody, &difyResponse)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"unmarshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\tfullTextResponse := ResponseDify2OpenAI(&difyResponse)\n\tfullTextResponse.Model = modelName\n\tjsonResponse, err := json.Marshal(fullTextResponse)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"marshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\tc.Writer.Header().Set(\"Content-Type\", \"application/json\")\n\tc.Writer.WriteHeader(resp.StatusCode)\n\t_, err = c.Writer.Write(jsonResponse)\n\tvar responseText string\n\tif len(fullTextResponse.Choices) > 0 {\n\t\tresponseText = fullTextResponse.Choices[0].Message.StringContent()\n\t}\n\tchannelConversationId = difyResponse.ConversationID\n\treturn nil, &responseText, channelConversationId\n}\n\nfunc ResponseDify2OpenAI(difyResponse *BlockResponse) *openai.TextResponse {\n\tvar responseText string\n\tresponseText = difyResponse.Answer\n\tchoice := openai.TextResponseChoice{\n\t\tIndex: 0,\n\t\tMessage: model.Message{\n\t\t\tRole:    \"assistant\",\n\t\t\tContent: responseText,\n\t\t\tName:    nil,\n\t\t},\n\t\tFinishReason: \"stop\",\n\t}\n\tfullTextResponse := openai.TextResponse{\n\t\tId:      fmt.Sprintf(\"chatcmpl-%s\", difyResponse.ConversationID),\n\t\tModel:   \"dify-bot\",\n\t\tObject:  \"chat.completion\",\n\t\tCreated: helper.GetTimestamp(),\n\t\tChoices: []openai.TextResponseChoice{choice},\n\t}\n\treturn &fullTextResponse\n}\n\nfunc (a *Adaptor) GetModelList() []string {\n\treturn ModelList\n}\n\nfunc (a *Adaptor) GetChannelName() string {\n\treturn \"dify\"\n}\n\nfunc DIFYUploadFile(meta *meta.Meta, uploadFile *db_model.UploadFile, fileMapping *db_model.ChannelFileMapping) error {\n\tbaseUrl, err := custom.GetBaseURL(meta.BaseURL)\n\tif err != nil {\n\t\treturn err\n\t}\n\turl := fmt.Sprintf(\"%s/v1/files/upload\", baseUrl)\n\tfileContent, err := storage.StorageInstance.Load(uploadFile.Key)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbody := &bytes.Buffer{}\n\twriter := multipart.NewWriter(body)\n\n\t// Add form fields\n\t_ = writer.WriteField(\"user\", meta.Config.UserID)\n\tvar quoteEscaper = strings.NewReplacer(\"\\\\\", \"\\\\\\\\\", `\"`, \"\\\\\\\"\")\n\n\th := make(textproto.MIMEHeader)\n\th.Set(\"Content-Disposition\",\n\t\tfmt.Sprintf(`form-data; name=\"%s\"; filename=\"%s\"; type=\"%s\"`,\n\t\t\tquoteEscaper.Replace(\"file\"),\n\t\t\tquoteEscaper.Replace(uploadFile.FileName),\n\t\t\tquoteEscaper.Replace(uploadFile.MimeType)))\n\th.Set(\"Content-Type\", uploadFile.MimeType)\n\tpart, err := writer.CreatePart(h)\n\n\t_, err = io.Copy(part, bytes.NewReader(fileContent))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = writer.Close()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq, err := http.NewRequest(\"POST\", url, body)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.Header.Set(\"Content-Type\", writer.FormDataContentType())\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {\n\t\treturn fmt.Errorf(\"upload failed with status: %d\", resp.StatusCode)\n\t}\n\n\tvar result DIFYUploadResponse\n\terr = json.NewDecoder(resp.Body).Decode(&result)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfileMapping.ChannelFileID = result.ID\n\tfileMapping.Eid = uploadFile.Eid\n\tfileMapping.FileID = uploadFile.ID\n\tfileMapping.ChannelID = meta.ChannelId\n\tfileMapping.Model = \"bot-\" + strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\tfileMapping.ExpirationTime = helper.GetTimestamp() + 3600*24*30\n\tjsonResult, err := json.Marshal(result)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfileMapping.ApiResponse = string(jsonResult)\n\n\treturn nil\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/dify/constants.go",
    "content": "package dify\n\nvar ModelList = []string{}\n"
  },
  {
    "path": "api/service/hub_adaptor/dify/info.go",
    "content": "package dify\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n)\n\n// DifyInfoAdaptor DIFY 应用信息适配器\ntype DifyInfoAdaptor struct{}\n\n// AppInfoResponse DIFY 应用基本信息响应\ntype AppInfoResponse struct {\n\tName        string   `json:\"name\"`\n\tDescription string   `json:\"description\"`\n\tTags        []string `json:\"tags\"`\n\tMode        string   `json:\"mode\"`\n\tAuthorName  string   `json:\"author_name\"`\n}\n\n// AppParametersResponse DIFY 应用参数配置响应\ntype AppParametersResponse struct {\n\tUserInputForm    []UserInputFormItem    `json:\"user_input_form\"`\n\tFileUpload       FileUploadConfig       `json:\"file_upload\"`\n\tSystemParameters SystemParametersConfig `json:\"system_parameters\"`\n}\n\n// UserInputFormItem 用户输入表单项\ntype UserInputFormItem struct {\n\tTextInput *TextInputConfig `json:\"text-input,omitempty\"`\n\tParagraph *ParagraphConfig `json:\"paragraph,omitempty\"`\n\tSelect    *SelectConfig    `json:\"select,omitempty\"`\n}\n\n// TextInputConfig 文本输入控件配置\ntype TextInputConfig struct {\n\tLabel    string `json:\"label\"`\n\tVariable string `json:\"variable\"`\n\tRequired bool   `json:\"required\"`\n\tDefault  string `json:\"default\"`\n}\n\n// ParagraphConfig 段落文本输入控件配置\ntype ParagraphConfig struct {\n\tLabel    string `json:\"label\"`\n\tVariable string `json:\"variable\"`\n\tRequired bool   `json:\"required\"`\n\tDefault  string `json:\"default\"`\n}\n\n// SelectConfig 下拉控件配置\ntype SelectConfig struct {\n\tLabel    string   `json:\"label\"`\n\tVariable string   `json:\"variable\"`\n\tRequired bool     `json:\"required\"`\n\tDefault  string   `json:\"default\"`\n\tOptions  []string `json:\"options\"`\n}\n\n// FileUploadConfig 文件上传配置\ntype FileUploadConfig struct {\n\tImage ImageUploadConfig `json:\"image\"`\n}\n\n// ImageUploadConfig 图片上传配置\ntype ImageUploadConfig struct {\n\tEnabled         bool     `json:\"enabled\"`\n\tNumberLimits    int      `json:\"number_limits\"`\n\tDetail          string   `json:\"detail,omitempty\"`\n\tTransferMethods []string `json:\"transfer_methods\"`\n}\n\n// SystemParametersConfig 系统参数配置\ntype SystemParametersConfig struct {\n\tFileSizeLimit      int `json:\"file_size_limit\"`\n\tImageFileSizeLimit int `json:\"image_file_size_limit\"`\n\tAudioFileSizeLimit int `json:\"audio_file_size_limit\"`\n\tVideoFileSizeLimit int `json:\"video_file_size_limit\"`\n}\n\n// GetAppInfo 获取 DIFY 应用基本信息\nfunc (a *DifyInfoAdaptor) GetAppInfo(meta *meta.Meta) (*AppInfoResponse, error) {\n\turl, err := a.buildInfoURL(meta.BaseURL)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlogger.SysLogf(\"🚀 请求DIFY应用信息\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📡 请求URL: %s\", url)\n\tlogger.SysLogf(\"│ 🔑 API Key: %s\", maskAPIKey(meta.APIKey))\n\tlogger.SysLogf(\"│ 📝 请求方法: GET\")\n\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\n\treq, err := http.NewRequest(\"GET\", url, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"创建请求失败: %v\", err)\n\t}\n\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"❌ DIFY应用信息请求失败: %v\", err)\n\t\treturn nil, fmt.Errorf(\"请求失败: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tlogger.SysErrorf(\"❌ DIFY应用信息请求失败 - 状态码: %d\", resp.StatusCode)\n\t\treturn nil, fmt.Errorf(\"请求失败，状态码: %d\", resp.StatusCode)\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取响应失败: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"✅ DIFY应用信息请求成功 - 状态码: %d\", resp.StatusCode)\n\tlogger.SysLogf(\"📦 响应内容: %s\", string(body))\n\n\tvar appInfo AppInfoResponse\n\tif err := json.Unmarshal(body, &appInfo); err != nil {\n\t\treturn nil, fmt.Errorf(\"解析响应失败: %v\", err)\n\t}\n\n\treturn &appInfo, nil\n}\n\n// GetAppParameters 获取 DIFY 应用参数配置\nfunc (a *DifyInfoAdaptor) GetAppParameters(meta *meta.Meta) (*AppParametersResponse, error) {\n\turl, err := a.buildParametersURL(meta.BaseURL)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlogger.SysLogf(\"🚀 请求DIFY应用参数\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📡 请求URL: %s\", url)\n\tlogger.SysLogf(\"│ 🔑 API Key: %s\", maskAPIKey(meta.APIKey))\n\tlogger.SysLogf(\"│ 📝 请求方法: GET\")\n\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\n\treq, err := http.NewRequest(\"GET\", url, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"创建请求失败: %v\", err)\n\t}\n\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"❌ DIFY应用参数请求失败: %v\", err)\n\t\treturn nil, fmt.Errorf(\"请求失败: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\tlogger.SysErrorf(\"❌ DIFY应用参数请求失败 - 状态码: %d\", resp.StatusCode)\n\t\treturn nil, fmt.Errorf(\"请求失败，状态码: %d\", resp.StatusCode)\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取响应失败: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"✅ DIFY应用参数请求成功 - 状态码: %d\", resp.StatusCode)\n\tlogger.SysLogf(\"📦 响应内容: %s\", string(body))\n\n\tvar appParams AppParametersResponse\n\tif err := json.Unmarshal(body, &appParams); err != nil {\n\t\treturn nil, fmt.Errorf(\"解析响应失败: %v\", err)\n\t}\n\n\treturn &appParams, nil\n}\n\n// buildInfoURL 构建应用信息接口URL\nfunc (a *DifyInfoAdaptor) buildInfoURL(baseURL string) (string, error) {\n\t// 去掉可能的 /v1 后缀以避免重复\n\tbaseURL = strings.TrimSuffix(baseURL, \"/v1\")\n\t// 确保 baseURL 不以 / 结尾\n\tbaseURL = strings.TrimSuffix(baseURL, \"/\")\n\n\treturn baseURL + \"/v1/info\", nil\n}\n\n// buildParametersURL 构建应用参数接口URL\nfunc (a *DifyInfoAdaptor) buildParametersURL(baseURL string) (string, error) {\n\t// 去掉可能的 /v1 后缀以避免重复\n\tbaseURL = strings.TrimSuffix(baseURL, \"/v1\")\n\t// 确保 baseURL 不以 / 结尾\n\tbaseURL = strings.TrimSuffix(baseURL, \"/\")\n\n\treturn baseURL + \"/v1/parameters\", nil\n}\n\n// maskAPIKey 遮蔽API密钥的敏感部分\nfunc maskAPIKey(apiKey string) string {\n\tif len(apiKey) <= 8 {\n\t\treturn \"****\"\n\t}\n\treturn apiKey[:4] + \"****\" + apiKey[len(apiKey)-4:]\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/dify/main.go",
    "content": "package dify\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/common/render\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\nfunc StreamHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusCode, *string, string) {\n\tvar responseText string\n\tcreatedTime := helper.GetTimestamp()\n\tscanner := bufio.NewScanner(resp.Body)\n\t// 设置更大的缓冲区以处理大型响应 (1MB)\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\tscanner.Split(bufio.ScanLines)\n\tcommon.SetEventStreamHeaders(c)\n\tvar modelName string\n\n\tchannelConversationId := \"\"\n\tfor scanner.Scan() {\n\t\tdata := scanner.Text()\n\t\tif len(data) < 5 || !strings.HasPrefix(data, \"data:\") {\n\t\t\tcontinue\n\t\t}\n\t\tdata = strings.TrimPrefix(data, \"data:\")\n\t\tdata = strings.TrimSuffix(data, \"\\r\")\n\n\t\t//logger.SysLogf(\"dify stream data: %s\", data)\n\t\tvar difyResponse StreamResponse\n\t\terr := json.Unmarshal([]byte(data), &difyResponse)\n\t\tif err != nil {\n\t\t\tlogger.SysError(\"error unmarshalling stream response: \" + err.Error())\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse, _ := StreamResponseDifyOpenAI(&difyResponse)\n\t\tif response == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse.Model = modelName\n\t\tresponse.Created = createdTime\n\n\t\terr = render.ObjectData(c, response)\n\t\tif err != nil {\n\t\t\tlogger.SysError(err.Error())\n\t\t}\n\t\tchannelConversationId = difyResponse.ConversationID\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\tlogger.SysError(\"error reading stream: \" + err.Error())\n\t}\n\n\trender.Done(c)\n\n\terr := resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\treturn nil, &responseText, channelConversationId\n}\n\nfunc StreamResponseDifyOpenAI(difyResponse *StreamResponse) (*openai.ChatCompletionsStreamResponse, *Response) {\n\tvar response *Response\n\tvar stopReason string\n\tvar choice openai.ChatCompletionsStreamResponseChoice\n\n\tif difyResponse.Answer != \"\" {\n\t\tchoice.Delta.Content = difyResponse.Answer\n\t}\n\tchoice.Delta.Role = \"assistant\"\n\tfinishReason := stopReasonDifyOpenAI(&stopReason)\n\tif finishReason != \"null\" {\n\t\tchoice.FinishReason = &finishReason\n\t}\n\tvar openaiResponse openai.ChatCompletionsStreamResponse\n\topenaiResponse.Object = \"chat.completion.chunk\"\n\topenaiResponse.Choices = []openai.ChatCompletionsStreamResponseChoice{choice}\n\topenaiResponse.Id = difyResponse.ConversationID\n\treturn &openaiResponse, response\n}\n\nfunc BlockingResponseDifyOpenAI(difyResponse *BlockResponse) (*openai.ChatCompletionsStreamResponse, *Response) {\n\tvar response *Response\n\tvar choice openai.ChatCompletionsStreamResponseChoice\n\n\tif difyResponse.Answer != \"\" {\n\t\tchoice.Delta.Content = difyResponse.Answer\n\t}\n\tvar openaiResponse openai.ChatCompletionsStreamResponse\n\topenaiResponse.Object = \"chat.completion.chunk\"\n\topenaiResponse.Choices = []openai.ChatCompletionsStreamResponseChoice{choice}\n\topenaiResponse.Id = difyResponse.ConversationID\n\treturn &openaiResponse, response\n}\n\nfunc stopReasonDifyOpenAI(reason *string) string {\n\tif reason == nil {\n\t\treturn \"\"\n\t}\n\tswitch *reason {\n\tcase \"end_turn\":\n\t\treturn \"stop\"\n\tcase \"stop_sequence\":\n\t\treturn \"stop\"\n\tcase \"max_tokens\":\n\t\treturn \"length\"\n\tdefault:\n\t\treturn *reason\n\t}\n}\n\ntype File struct {\n\tTransferMethod string `json:\"transfer_method\"`\n\tType           string `json:\"type\"`\n\tUrl            string `json:\"url\"`\n\tUploadFileID   string `json:\"upload_file_id\"`\n}\n\nconst (\n\tResponseModeStream = \"streaming\"\n\tResponseModeBlock  = \"blocking\"\n)\n\ntype Request struct {\n\tConversationId string      `json:\"conversation_id\"`\n\tUser           string      `json:\"user\"`\n\tQuery          string      `json:\"query\"`\n\tResponseMode   string      `json:\"response_mode\"`\n\tFiles          []File      `json:\"files\"`\n\tInputs         interface{} `json:\"inputs\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/dify/model.go",
    "content": "package dify\n\ntype StreamResponse struct {\n\tEvent          string `json:\"event\"`\n\tConversationID string `json:\"conversation_id\"`\n\tMessageID      string `json:\"message_id\"`\n\tCreatedAt      int64  `json:\"created_at\"`\n\tTaskID         string `json:\"task_id\"`\n\tID             string `json:\"id\"`\n\tAnswer         string `json:\"answer\"`\n}\n\ntype Response struct {\n\tConversationId string    `json:\"conversation_id,omitempty\"`\n\tMessages       []Message `json:\"messages,omitempty\"`\n\tCode           int       `json:\"code,omitempty\"`\n\tMsg            string    `json:\"msg,omitempty\"`\n\tMetadata       *Metadata `json:\"metadata,omitempty\"`\n}\n\ntype Message struct {\n\tRole        string `json:\"role\"`\n\tType        string `json:\"type\"`\n\tContent     string `json:\"content\"`\n\tContentType string `json:\"content_type\"`\n}\n\ntype BlockResponse struct {\n\tEvent          string    `json:\"event\"`\n\tTaskID         string    `json:\"task_id\"`\n\tID             string    `json:\"id\"`\n\tMessageID      string    `json:\"message_id\"`\n\tConversationID string    `json:\"conversation_id\"`\n\tCreatedAt      int64     `json:\"created_at\"`\n\tAnswer         string    `json:\"answer\"`\n\tMetadata       *Metadata `json:\"metadata\"`\n}\n\ntype Metadata struct {\n\tUsage *Usage `json:\"usage\"`\n}\n\ntype Usage struct {\n\tPromptTokens        int     `json:\"prompt_tokens\"`\n\tPromptUnitPrice     string  `json:\"prompt_unit_price\"`\n\tPromptPriceUnit     string  `json:\"prompt_price_unit\"`\n\tPromptPrice         string  `json:\"prompt_price\"`\n\tCompletionTokens    int     `json:\"completion_tokens\"`\n\tCompletionUnitPrice string  `json:\"completion_unit_price\"`\n\tCompletionPriceUnit string  `json:\"completion_price_unit\"`\n\tCompletionPrice     string  `json:\"completion_price\"`\n\tTotalTokens         int     `json:\"total_tokens\"`\n\tTotalPrice          string  `json:\"total_price\"`\n\tCurrency            string  `json:\"currency\"`\n\tLatency             float64 `json:\"latency\"`\n}\n\ntype DIFYUploadResponse struct {\n\tID        string `json:\"id\"`\n\tName      string `json:\"name\"`\n\tSize      int64  `json:\"size\"`\n\tExtension string `json:\"extension\"`\n\tMimeType  string `json:\"mime_type\"`\n\tCreatedBy string `json:\"created_by\"`\n\tCreatedAt int64  `json:\"created_at\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/dify/workflow.go",
    "content": "package dify\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\ntype DifyWorkflowAdaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\n// DifyWorkflowRequest DIFY 工作流请求结构\ntype DifyWorkflowRequest struct {\n\tInputs       map[string]interface{} `json:\"inputs\"`\n\tResponseMode string                 `json:\"response_mode\"`\n\tUser         string                 `json:\"user\"`\n}\n\n// DifyFileInput DIFY 文件输入结构\ntype DifyFileInput struct {\n\tTransferMethod string `json:\"transfer_method\"`\n\tUploadFileID   string `json:\"upload_file_id\"`\n\tType           string `json:\"type\"`\n}\n\n// DifyWorkflowEvent DIFY 工作流事件结构\ntype DifyWorkflowEvent struct {\n\tEvent         string                 `json:\"event\"`\n\tTaskID        string                 `json:\"task_id\"`\n\tWorkflowRunID string                 `json:\"workflow_run_id\"`\n\tData          map[string]interface{} `json:\"data\"`\n}\n\n// DifyWorkflowResponse DIFY 工作流完整响应结构\ntype DifyWorkflowResponse struct {\n\tWorkflowRunID string                 `json:\"workflow_run_id\"`\n\tTaskID        string                 `json:\"task_id\"`\n\tData          map[string]interface{} `json:\"data\"`\n}\n\nfunc (a *DifyWorkflowAdaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\nfunc (a *DifyWorkflowAdaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbaseURL := meta.BaseURL\n\n\t// 去掉可能的 /v1 后缀以避免重复\n\tbaseURL = strings.TrimSuffix(baseURL, \"/v1\")\n\n\t// 确保 baseURL 不以 / 结尾\n\tbaseURL = strings.TrimSuffix(baseURL, \"/\")\n\n\treturn baseURL + \"/v1/workflows/run\", nil\n}\n\nfunc (a *DifyWorkflowAdaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treturn nil\n}\n\n// ConvertWorkflowRequest 直接从工作流参数构造 DIFY 请求\nfunc (a *DifyWorkflowAdaptor) ConvertWorkflowRequest(workflowID string, parameters map[string]interface{}) (*DifyWorkflowRequest, error) {\n\tlogger.SysLogf(\"DIFY工作流直接请求 - WorkflowID: %s, Parameters: %+v\", workflowID, parameters)\n\n\t// 处理参数中的文件上传\n\tprocessedInputs, err := a.processWorkflowParameters(parameters)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"处理DIFY工作流文件参数失败: %v\", err)\n\t\t// 如果文件处理失败，使用原始参数继续执行\n\t\tprocessedInputs = parameters\n\t}\n\n\t// 构建 DIFY 工作流请求\n\trequest := &DifyWorkflowRequest{\n\t\tInputs:       processedInputs,\n\t\tResponseMode: \"streaming\", // 使用流式模式\n\t\tUser:         a.getUserID(),\n\t}\n\n\treturn request, nil\n}\n\n// processWorkflowParameters 处理工作流参数中的文件上传\nfunc (a *DifyWorkflowAdaptor) processWorkflowParameters(parameters map[string]interface{}) (map[string]interface{}, error) {\n\tif a.meta == nil {\n\t\treturn parameters, fmt.Errorf(\"meta is nil\")\n\t}\n\n\tprocessedParams := make(map[string]interface{})\n\n\tfor key, value := range parameters {\n\t\tprocessedValue, err := a.processParameterValue(value)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"处理DIFY参数 %s 失败: %v\", key, err)\n\t\t\t// 如果单个参数处理失败，使用原始值\n\t\t\tprocessedParams[key] = value\n\t\t} else {\n\t\t\tprocessedParams[key] = processedValue\n\t\t}\n\t}\n\n\treturn processedParams, nil\n}\n\n// processParameterValue 递归处理参数值，支持字符串、数组、对象\nfunc (a *DifyWorkflowAdaptor) processParameterValue(value interface{}) (interface{}, error) {\n\tswitch v := value.(type) {\n\tcase string:\n\t\t// 检查是否为 file_id: 格式\n\t\treturn a.processFileIDString(v)\n\tcase []interface{}:\n\t\t// 处理数组\n\t\tprocessedArray := make([]interface{}, len(v))\n\t\tfor i, item := range v {\n\t\t\tprocessedItem, err := a.processParameterValue(item)\n\t\t\tif err != nil {\n\t\t\t\tprocessedArray[i] = item // 使用原始值\n\t\t\t} else {\n\t\t\t\tprocessedArray[i] = processedItem\n\t\t\t}\n\t\t}\n\t\treturn processedArray, nil\n\tcase map[string]interface{}:\n\t\t// 处理对象\n\t\tprocessedMap := make(map[string]interface{})\n\t\tfor k, val := range v {\n\t\t\tprocessedVal, err := a.processParameterValue(val)\n\t\t\tif err != nil {\n\t\t\t\tprocessedMap[k] = val // 使用原始值\n\t\t\t} else {\n\t\t\t\tprocessedMap[k] = processedVal\n\t\t\t}\n\t\t}\n\t\treturn processedMap, nil\n\tdefault:\n\t\t// 其他类型直接返回\n\t\treturn value, nil\n\t}\n}\n\n// processFileIDString 处理 file_id: 格式的字符串，转换为 DIFY 文件格式\nfunc (a *DifyWorkflowAdaptor) processFileIDString(value string) (interface{}, error) {\n\t// 检查是否为 file_id: 格式\n\tif !strings.HasPrefix(value, \"file_id:\") {\n\t\treturn value, nil\n\t}\n\n\t// 提取文件ID\n\tfileIDStr := strings.TrimPrefix(value, \"file_id:\")\n\tfileID, err := strconv.ParseInt(fileIDStr, 10, 64)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"解析文件ID失败: %s, error: %v\", fileIDStr, err)\n\t\treturn value, err\n\t}\n\n\t// 获取上传文件对象\n\tuploadFile, err := db_model.GetUploadFileByID(fileID)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"获取上传文件失败: ID=%d, error: %v\", fileID, err)\n\t\treturn value, err\n\t}\n\n\t// 获取渠道文件映射\n\tchannelID := a.meta.ChannelId\n\t// 使用与 chat 一致的模型名称格式\n\tmodelName := \"bot-\" + strings.TrimPrefix(a.meta.ActualModelName, \"bot-\")\n\n\tfileMapping := uploadFile.GetChannelFileMapping(channelID, modelName)\n\tif fileMapping == nil {\n\t\t// 创建新的文件映射\n\t\tfileMapping = &db_model.ChannelFileMapping{}\n\t\terr := DifyUploadFile(a.meta, uploadFile, fileMapping)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"上传文件到DIFY失败: %v\", err)\n\t\t\treturn value, err\n\t\t}\n\t\terr = db_model.CreateChannelFileMapping(fileMapping)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"创建文件映射失败: %v\", err)\n\t\t\treturn value, err\n\t\t}\n\t} else if helper.GetTimestamp() > fileMapping.ExpirationTime {\n\t\t// 文件映射已过期，重新上传\n\t\terr := DifyUploadFile(a.meta, uploadFile, fileMapping)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"重新上传文件到DIFY失败: %v\", err)\n\t\t\treturn value, err\n\t\t}\n\t\terr = db_model.UpdateChannelFileMapping(fileMapping)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"更新文件映射失败: %v\", err)\n\t\t\treturn value, err\n\t\t}\n\t}\n\n\t// 根据文件类型生成 DIFY 文件格式\n\tfileType := a.getDifyFileType(uploadFile.MimeType, uploadFile.Extension)\n\n\t// 对于不支持的文件类型，记录警告但不中断处理\n\tif fileType == \"unsupported\" {\n\t\tlogger.SysLogf(\"⚠️  DIFY工作流暂不支持文件类型: %s (MIME: %s)\", uploadFile.Extension, uploadFile.MimeType)\n\t\t// 返回原始值，让上层决定如何处理\n\t\treturn value, nil\n\t}\n\n\t// 返回 DIFY 文件数组格式（单个文件也要包装成数组）\n\tfileArray := []DifyFileInput{\n\t\t{\n\t\t\tTransferMethod: \"local_file\",\n\t\t\tUploadFileID:   fileMapping.ChannelFileID,\n\t\t\tType:           fileType,\n\t\t},\n\t}\n\n\tlogger.SysLogf(\"✅ DIFY工作流文件处理成功 - 原始ID: %d, 渠道文件ID: %s, 类型: %s\",\n\t\tfileID, fileMapping.ChannelFileID, fileType)\n\n\treturn fileArray, nil\n}\n\n// getDifyFileType 根据 MIME 类型和扩展名确定 DIFY 文件类型\nfunc (a *DifyWorkflowAdaptor) getDifyFileType(mimeType, extension string) string {\n\t// 图片类型 - 与 chat 保持一致，优先支持图片\n\tif strings.HasPrefix(mimeType, \"image/\") {\n\t\treturn \"image\"\n\t}\n\n\t// 音频类型 - 支持的音频格式\n\tif strings.HasPrefix(mimeType, \"audio/\") {\n\t\text := strings.ToLower(extension)\n\t\tsupportedAudio := []string{\".mp3\", \".m4a\", \".wav\", \".webm\", \".amr\"}\n\t\tfor _, audioExt := range supportedAudio {\n\t\t\tif ext == audioExt {\n\t\t\t\treturn \"audio\"\n\t\t\t}\n\t\t}\n\t}\n\n\t// 视频类型 - 支持的视频格式\n\tif strings.HasPrefix(mimeType, \"video/\") {\n\t\text := strings.ToLower(extension)\n\t\tsupportedVideo := []string{\".mp4\", \".mov\", \".mpeg\", \".mpga\"}\n\t\tfor _, videoExt := range supportedVideo {\n\t\t\tif ext == videoExt {\n\t\t\t\treturn \"video\"\n\t\t\t}\n\t\t}\n\t}\n\n\t// 文档类型 - 根据 DIFY 文档支持的格式\n\text := strings.ToLower(extension)\n\tdocumentExts := []string{\".txt\", \".md\", \".markdown\", \".pdf\", \".html\", \".xlsx\", \".xls\", \".docx\", \".csv\", \".eml\", \".msg\", \".pptx\", \".ppt\", \".xml\", \".epub\"}\n\tfor _, docExt := range documentExts {\n\t\tif ext == docExt {\n\t\t\treturn \"document\"\n\t\t}\n\t}\n\n\t// 对于不在支持列表中的文件类型，返回 unsupported\n\t// 这样可以让上层代码决定如何处理\n\tlogger.SysLogf(\"🔍 检测到未明确支持的文件类型 - MIME: %s, Extension: %s\", mimeType, extension)\n\n\t// 其他类型归为 custom，但记录警告\n\treturn \"custom\"\n}\n\n// getUserID 获取用户ID\nfunc (a *DifyWorkflowAdaptor) getUserID() string {\n\tif a.CustomConfig != nil && a.CustomConfig.UserId != \"\" {\n\t\treturn a.CustomConfig.UserId\n\t}\n\treturn \"default_user\"\n}\n\n// DoRequest 执行 DIFY 工作流请求\nfunc (a *DifyWorkflowAdaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\turl, err := a.GetRequestURL(meta)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 读取请求体用于日志输出\n\tbodyBytes, err := io.ReadAll(requestBody)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取请求体失败: %v\", err)\n\t}\n\n\t// 格式化输出请求信息\n\tlogger.SysLogf(\"🚀 DIFY工作流请求开始\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📡 请求URL: %s\", url)\n\tlogger.SysLogf(\"│ 🔑 API Key: %s\", maskAPIKey(meta.APIKey))\n\tlogger.SysLogf(\"│ 📝 请求方法: POST\")\n\tlogger.SysLogf(\"│ 📋 Content-Type: application/json\")\n\tlogger.SysLogf(\"├─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📦 请求参数:\")\n\n\t// 格式化输出请求体\n\tvar requestData map[string]interface{}\n\tif err := json.Unmarshal(bodyBytes, &requestData); err == nil {\n\t\tprettyJSON, _ := json.MarshalIndent(requestData, \"│   \", \"  \")\n\t\tlogger.SysLogf(\"│   %s\", string(prettyJSON))\n\t} else {\n\t\tlogger.SysLogf(\"│   %s\", string(bodyBytes))\n\t}\n\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\n\t// 重新创建请求体\n\treq, err := http.NewRequest(\"POST\", url, bytes.NewReader(bodyBytes))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = a.SetupRequestHeader(c, req, meta)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\n\tif err != nil {\n\t\tlogger.SysErrorf(\"❌ DIFY工作流请求失败: %v\", err)\n\t\treturn nil, err\n\t}\n\n\tlogger.SysLogf(\"✅ DIFY工作流请求成功 - 状态码: %d\", resp.StatusCode)\n\treturn resp, nil\n}\n\n// ProcessStreamingResponse 处理 DIFY 工作流的流式响应\nfunc (a *DifyWorkflowAdaptor) ProcessStreamingResponse(resp *http.Response) (*custom.WorkflowResponseData, error) {\n\tdefer resp.Body.Close()\n\n\tscanner := bufio.NewScanner(resp.Body)\n\t// 设置更大的缓冲区以处理大型响应 (1MB)\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\n\tvar finalOutputs map[string]interface{}\n\tvar workflowRunID string\n\tvar taskID string\n\tvar textChunks []string\n\n\tlogger.SysLogf(\"📡 开始处理DIFY工作流流式响应\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 🔄 响应状态码: %d\", resp.StatusCode)\n\tlogger.SysLogf(\"│ 📋 Content-Type: %s\", resp.Header.Get(\"Content-Type\"))\n\tlogger.SysLogf(\"├─────────────────────────────────────────────────────────────\")\n\n\t// 使用标签来支持跳出外层循环\nscanLoop:\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\n\t\t// 跳过空行和非数据行\n\t\tif !strings.HasPrefix(line, \"data: \") {\n\t\t\tcontinue\n\t\t}\n\n\t\t// 提取 JSON 数据\n\t\tjsonData := strings.TrimPrefix(line, \"data: \")\n\t\tif jsonData == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// 解析事件\n\t\tvar event DifyWorkflowEvent\n\t\tif err := json.Unmarshal([]byte(jsonData), &event); err != nil {\n\t\t\tlogger.SysErrorf(\"解析DIFY工作流事件失败: %v, 数据: %s\", err, jsonData)\n\t\t\tcontinue\n\t\t}\n\n\t\t// 记录基本信息\n\t\tif workflowRunID == \"\" {\n\t\t\tworkflowRunID = event.WorkflowRunID\n\t\t}\n\t\tif taskID == \"\" {\n\t\t\ttaskID = event.TaskID\n\t\t}\n\n\t\t// 处理不同类型的事件\n\t\tswitch event.Event {\n\t\tcase \"workflow_started\":\n\t\t\tlogger.SysLogf(\"DIFY工作流开始执行 - WorkflowRunID: %s\", event.WorkflowRunID)\n\n\t\tcase \"node_started\":\n\t\t\tif nodeID, ok := event.Data[\"node_id\"].(string); ok {\n\t\t\t\tif title, ok := event.Data[\"title\"].(string); ok {\n\t\t\t\t\tlogger.SysLogf(\"DIFY节点开始执行 - NodeID: %s, Title: %s\", nodeID, title)\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase \"text_chunk\":\n\t\t\tif text, ok := event.Data[\"text\"].(string); ok {\n\t\t\t\ttextChunks = append(textChunks, text)\n\t\t\t\t// logger.SysLogf(\"%s\", text)\n\t\t\t}\n\n\t\tcase \"node_finished\":\n\t\t\tif nodeID, ok := event.Data[\"node_id\"].(string); ok {\n\t\t\t\tif status, ok := event.Data[\"status\"].(string); ok {\n\t\t\t\t\tlogger.SysLogf(\"DIFY节点执行完成 - NodeID: %s, Status: %s\", nodeID, status)\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase \"workflow_finished\":\n\t\t\tlogger.SysLogf(\"DIFY工作流执行完成\")\n\n\t\t\t// 提取最终输出\n\t\t\tif outputs, ok := event.Data[\"outputs\"].(map[string]interface{}); ok {\n\t\t\t\tfinalOutputs = outputs\n\t\t\t\tlogger.SysLogf(\"DIFY工作流最终输出: %+v\", finalOutputs)\n\t\t\t}\n\n\t\t\t// 工作流完成，可以退出循环\n\t\t\tbreak scanLoop\n\n\t\tcase \"ping\":\n\t\t\t// 心跳事件，保持连接\n\t\t\tlogger.SysLogf(\"DIFY工作流心跳\")\n\n\t\tdefault:\n\t\t\tlogger.SysLogf(\"DIFY工作流未知事件类型: %s\", event.Event)\n\t\t}\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"读取DIFY工作流响应流失败: %v\", err)\n\t}\n\n\t// 构建最终响应\n\tif finalOutputs == nil {\n\t\tfinalOutputs = make(map[string]interface{})\n\t}\n\n\t// 如果有文本片段，合并到输出中\n\tif len(textChunks) > 0 {\n\t\tfinalOutputs[\"text\"] = strings.Join(textChunks, \"\")\n\t}\n\n\tworkflowResponse := &custom.WorkflowResponseData{\n\t\tWorkflowOutputData: finalOutputs,\n\t\tExecuteID:          workflowRunID,\n\t\tChannelID:          a.meta.ChannelId,\n\t\tModelName:          a.meta.OriginModelName,\n\t}\n\n\tlogger.SysLogf(\"DIFY工作流处理完成 - ExecuteID: %s, 输出字段数: %d\",\n\t\tworkflowRunID, len(finalOutputs))\n\n\treturn workflowResponse, nil\n}\n\n// DifyUploadFile 上传文件到 DIFY (复用 chat 的实现)\nfunc DifyUploadFile(meta *meta.Meta, uploadFile *db_model.UploadFile, fileMapping *db_model.ChannelFileMapping) error {\n\t// 直接调用 chat 适配器的文件上传实现\n\treturn DIFYUploadFile(meta, uploadFile, fileMapping)\n}\n\nfunc (a *DifyWorkflowAdaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\treturn nil, errors.New(\"dify workflow adaptor does not support image requests\")\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/fastgpt/workflow.go",
    "content": "package fastgpt\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n)\n\n// FastGPTWorkflowAdaptor FastGPT 工作流适配器\ntype FastGPTWorkflowAdaptor struct {\n\topenai.Adaptor // 继承 OpenAI 适配器的文件处理能力\n\tmeta           *meta.Meta\n\tCustomConfig   *custom.CustomConfig\n}\n\n// FastGPTWorkflowRequest FastGPT 工作流请求结构\ntype FastGPTWorkflowRequest struct {\n\tVariables map[string]interface{} `json:\"variables\"`\n\tStream    bool                   `json:\"stream\"`\n\tDetail    bool                   `json:\"detail\"`\n}\n\n// FastGPTWorkflowResponse FastGPT 工作流响应结构\ntype FastGPTWorkflowResponse struct {\n\tResponseData []ModuleResponse `json:\"responseData\"`\n}\n\n// ModuleResponse 模块响应结构\ntype ModuleResponse struct {\n\tNodeId       string                 `json:\"nodeId\"`\n\tModuleName   string                 `json:\"moduleName\"`\n\tModuleType   string                 `json:\"moduleType\"`\n\tTotalPoints  float64                `json:\"totalPoints\"`\n\tRunningTime  float64                `json:\"runningTime\"`\n\tPluginOutput map[string]interface{} `json:\"pluginOutput,omitempty\"`\n}\n\n// Init 初始化适配器\nfunc (a *FastGPTWorkflowAdaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n\ta.Adaptor.Init(meta)\n}\n\n// GetRequestURL 构建请求URL\nfunc (a *FastGPTWorkflowAdaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbaseURL := standardizeBaseURL(meta.BaseURL)\n\treturn baseURL + \"/api/v1/chat/completions\", nil\n}\n\n// standardizeBaseURL 标准化 baseURL，移除可能的路径后缀\nfunc standardizeBaseURL(baseURL string) string {\n\t// 移除末尾的斜杠\n\tbaseURL = strings.TrimSuffix(baseURL, \"/\")\n\n\t// 移除常见的 FastGPT API 路径后缀\n\tsuffixesToRemove := []string{\n\t\t\"/api/v1/chat/completions\", // 完整的 API 路径\n\t\t\"/api/v1/chat\",             // 部分 API 路径\n\t\t\"/api/v1\",                  // API 版本路径\n\t\t\"/api\",                     // API 基础路径\n\t\t\"/v1\",                      // 版本路径\n\t}\n\n\tfor _, suffix := range suffixesToRemove {\n\t\tif strings.HasSuffix(baseURL, suffix) {\n\t\t\tbaseURL = strings.TrimSuffix(baseURL, suffix)\n\t\t\t// 递归处理，以防有多层嵌套\n\t\t\treturn standardizeBaseURL(baseURL)\n\t\t}\n\t}\n\n\treturn baseURL\n}\n\n// ConvertWorkflowToWorkflowRequest 将工作流请求转换为 FastGPT 工作流请求\nfunc (a *FastGPTWorkflowAdaptor) ConvertWorkflowToWorkflowRequest(parameters map[string]interface{}) (*FastGPTWorkflowRequest, error) {\n\t// 处理文件参数\n\tprocessedParams, err := a.processFileParameters(parameters)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"处理文件参数失败: %v\", err)\n\t}\n\n\tworkflowRequest := &FastGPTWorkflowRequest{\n\t\tVariables: processedParams,\n\t\tStream:    false, // 工作流默认非流式\n\t\tDetail:    true,  // 工作流默认详细模式\n\t}\n\n\tlogger.SysLogf(\"🔄 FastGPT工作流请求转换完成 - 参数数量: %d\", len(workflowRequest.Variables))\n\treturn workflowRequest, nil\n}\n\n// processFileParameters 处理文件参数，复用 OpenAI 适配器的文件处理逻辑\nfunc (a *FastGPTWorkflowAdaptor) processFileParameters(parameters map[string]interface{}) (map[string]interface{}, error) {\n\tprocessedParams := make(map[string]interface{})\n\n\tfor key, value := range parameters {\n\t\tif strValue, ok := value.(string); ok && strings.HasPrefix(strValue, \"file_id:\") {\n\t\t\t// 处理文件参数\n\t\t\tfileContent, err := a.processFileParameter(strValue)\n\t\t\tif err != nil {\n\t\t\t\tlogger.SysErrorf(\"处理文件参数失败 - key: %s, value: %s, error: %v\", key, strValue, err)\n\t\t\t\t// 文件处理失败时，保留原始值\n\t\t\t\tprocessedParams[key] = value\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocessedParams[key] = fileContent\n\t\t\tlogger.SysLogf(\"✅ 文件参数处理成功 - key: %s\", key)\n\t\t} else {\n\t\t\t// 非文件参数直接复制\n\t\t\tprocessedParams[key] = value\n\t\t}\n\t}\n\n\treturn processedParams, nil\n}\n\n// processFileParameter 处理单个文件参数，返回 FastGPT 数组格式\nfunc (a *FastGPTWorkflowAdaptor) processFileParameter(fileParam string) (interface{}, error) {\n\t// 解析 file_id:xxx 格式\n\tif !strings.HasPrefix(fileParam, \"file_id:\") {\n\t\treturn fileParam, nil\n\t}\n\n\tfileIDStr := strings.TrimPrefix(fileParam, \"file_id:\")\n\tfileID, err := strconv.ParseInt(fileIDStr, 10, 64)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"解析文件ID失败: %s, error: %v\", fileIDStr, err)\n\t\treturn fileParam, fmt.Errorf(\"无效的文件ID: %s\", fileIDStr)\n\t}\n\n\t// 获取文件信息\n\tuploadFile, err := model.GetUploadFileByID(fileID)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"获取上传文件失败: ID=%d, error: %v\", fileID, err)\n\t\treturn fileParam, fmt.Errorf(\"文件不存在: %v\", err)\n\t}\n\n\t// 统一使用预览 URL 方式处理所有文件类型\n\tpreviewURL := uploadFile.GetPreviewFullUrl()\n\tif previewURL == \"\" {\n\t\tlogger.SysErrorf(\"文件预览URL为空: ID=%d, PreviewKey=%s\", fileID, uploadFile.PreviewKey)\n\t\treturn fileParam, fmt.Errorf(\"文件预览URL不可用\")\n\t}\n\n\t// 根据文件类型返回 FastGPT 数组格式\n\textension := strings.ToLower(uploadFile.Extension)\n\tif isImageFile(extension) {\n\t\t// 图片文件：返回数组格式\n\t\tlogger.SysLogf(\"✅ FastGPT工作流图片文件处理 - ID: %d, Name: %s, URL: %s\",\n\t\t\tfileID, uploadFile.FileName, previewURL)\n\t\treturn []map[string]interface{}{\n\t\t\t{\n\t\t\t\t\"type\": \"image\",\n\t\t\t\t\"name\": uploadFile.FileName,\n\t\t\t\t\"url\":  previewURL,\n\t\t\t},\n\t\t}, nil\n\t} else {\n\t\t// 文档文件：返回数组格式\n\t\tlogger.SysLogf(\"✅ FastGPT工作流文档文件处理 - ID: %d, Name: %s, URL: %s\",\n\t\t\tfileID, uploadFile.FileName, previewURL)\n\t\treturn []map[string]interface{}{\n\t\t\t{\n\t\t\t\t\"type\": \"file\",\n\t\t\t\t\"name\": uploadFile.FileName,\n\t\t\t\t\"url\":  previewURL,\n\t\t\t},\n\t\t}, nil\n\t}\n}\n\n// isImageFile 判断是否为图片文件\nfunc isImageFile(extension string) bool {\n\timageExts := []string{\".jpg\", \".jpeg\", \".png\", \".gif\", \".webp\", \".bmp\"}\n\tfor _, ext := range imageExts {\n\t\tif extension == ext {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// DoRequest 执行 FastGPT 工作流请求\nfunc (a *FastGPTWorkflowAdaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\turl, err := a.GetRequestURL(meta)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 读取请求体用于日志输出\n\tbodyBytes, err := io.ReadAll(requestBody)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取请求体失败: %v\", err)\n\t}\n\n\t// 格式化输出请求信息\n\tlogger.SysLogf(\"🚀 FastGPT工作流请求开始\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📡 请求URL: %s\", url)\n\tlogger.SysLogf(\"│ 🔑 API Key: %s\", maskAPIKey(meta.APIKey))\n\tlogger.SysLogf(\"│ 📝 请求方法: POST\")\n\tlogger.SysLogf(\"│ 📋 Content-Type: application/json\")\n\tlogger.SysLogf(\"├─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📦 请求参数:\")\n\n\t// 格式化输出请求体\n\tvar requestData map[string]interface{}\n\tif err := json.Unmarshal(bodyBytes, &requestData); err == nil {\n\t\tprettyJSON, _ := json.MarshalIndent(requestData, \"│   \", \"  \")\n\t\tlogger.SysLogf(\"│   %s\", string(prettyJSON))\n\t} else {\n\t\tlogger.SysLogf(\"│   %s\", string(bodyBytes))\n\t}\n\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\n\t// 重新创建请求体\n\treq, err := http.NewRequest(\"POST\", url, bytes.NewReader(bodyBytes))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 设置请求头\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\n\tif err != nil {\n\t\tlogger.SysErrorf(\"❌ FastGPT工作流请求失败: %v\", err)\n\t\treturn nil, err\n\t}\n\n\tlogger.SysLogf(\"✅ FastGPT工作流请求成功 - 状态码: %d\", resp.StatusCode)\n\treturn resp, nil\n}\n\n// ProcessWorkflowResponse 处理工作流响应\nfunc (a *FastGPTWorkflowAdaptor) ProcessWorkflowResponse(resp *http.Response) (*custom.WorkflowResponseData, error) {\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn nil, fmt.Errorf(\"请求失败，状态码: %d\", resp.StatusCode)\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取响应失败: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"📦 FastGPT工作流响应: %s\", string(body))\n\n\tvar workflowResp FastGPTWorkflowResponse\n\tif err := json.Unmarshal(body, &workflowResp); err != nil {\n\t\treturn nil, fmt.Errorf(\"解析响应失败: %v\", err)\n\t}\n\n\t// 提取工作流输出\n\tworkflowOutput := a.extractWorkflowOutput(workflowResp.ResponseData)\n\n\t// 转换为统一的工作流响应格式\n\tworkflowResponse := &custom.WorkflowResponseData{\n\t\tExecuteID:          fmt.Sprintf(\"fastgpt_workflow_%d\", a.meta.ChannelId),\n\t\tWorkflowOutputData: workflowOutput,\n\t\tModelName:          a.meta.ActualModelName,\n\t\tChannelID:          a.meta.ChannelId,\n\t}\n\n\tlogger.SysLogf(\"✅ FastGPT工作流响应处理完成 - 输出字段数: %d\", len(workflowOutput))\n\treturn workflowResponse, nil\n}\n\n// extractWorkflowOutput 从响应数据中提取工作流输出\nfunc (a *FastGPTWorkflowAdaptor) extractWorkflowOutput(responseData []ModuleResponse) map[string]interface{} {\n\tworkflowOutput := make(map[string]interface{})\n\n\tfor _, module := range responseData {\n\t\tlogger.SysLogf(\"🔍 检查模块 - NodeId: %s, ModuleType: %s\", module.NodeId, module.ModuleType)\n\n\t\tif module.ModuleType == \"pluginOutput\" && module.PluginOutput != nil {\n\t\t\t// 找到插件输出模块（FastGPT中工作流的输出仍然叫pluginOutput）\n\t\t\tfor key, value := range module.PluginOutput {\n\t\t\t\tworkflowOutput[key] = value\n\t\t\t}\n\t\t\tlogger.SysLogf(\"✅ 找到工作流输出 - 字段数: %d\", len(module.PluginOutput))\n\t\t}\n\t}\n\n\t// 如果没有找到专门的插件输出，尝试从最后一个模块获取输出\n\tif len(workflowOutput) == 0 && len(responseData) > 0 {\n\t\tlastModule := responseData[len(responseData)-1]\n\t\tif lastModule.PluginOutput != nil {\n\t\t\tworkflowOutput = lastModule.PluginOutput\n\t\t\tlogger.SysLogf(\"⚠️  使用最后一个模块的输出作为工作流输出\")\n\t\t}\n\t}\n\n\treturn workflowOutput\n}\n\n// ExtractWorkflowOutputForTest 为测试提供的公开方法\nfunc (a *FastGPTWorkflowAdaptor) ExtractWorkflowOutputForTest(responseData []ModuleResponse) map[string]interface{} {\n\treturn a.extractWorkflowOutput(responseData)\n}\n\n// maskAPIKey 遮蔽API密钥的敏感部分\nfunc maskAPIKey(apiKey string) string {\n\tif len(apiKey) <= 8 {\n\t\treturn \"****\"\n\t}\n\treturn apiKey[:4] + \"****\" + apiKey[len(apiKey)-4:]\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/n8n/README.md",
    "content": "# n8n 工作流适配器\n\nn8n 是一个强大的工作流自动化平台，本适配器实现了与 n8n webhook 的完整集成，支持文件上传和复杂参数传递。\n\n## 功能特性\n\n### ✅ 核心功能\n- **渠道类型**: ChannelApiTypeN8n = 1009\n- **URL 格式**: `{baseurl}/webhook/{workflow_id}`\n- **认证方式**: Authorization header（无 Bearer 前缀）\n- **参数传递**: 支持任意 JSON 参数结构\n- **响应处理**: 自动解析 n8n 数组格式响应\n\n### ✅ 文件上传支持\n- **格式识别**: 自动识别 `file_id:xxx` 格式参数\n- **Base64 转换**: 将文件内容转换为 base64 编码\n- **大小限制**: 10MB 文件大小限制（符合 n8n 最佳实践）\n- **元信息保留**: 包含文件名、MIME类型、大小、扩展名等完整信息\n- **递归处理**: 支持复杂参数结构中的文件参数（数组、对象嵌套）\n- **错误处理**: 文件过大、读取失败等情况的优雅降级\n\n## 配置说明\n\n### 1. 创建 n8n 渠道\n```json\n{\n  \"type\": 1009,\n  \"name\": \"n8n工作流\",\n  \"base_url\": \"http://localhost:5678\",\n  \"key\": \"your-api-key\"\n}\n```\n\n### 2. 创建工作流 Agent\n```json\n{\n  \"agent_type\": \"workflow\",\n  \"model\": \"workflow-d3c8ffe7-f052-4f51-a7b3-2e226d0b4d0c\",\n  \"name\": \"n8n智能助手\"\n}\n```\n\n## 使用示例\n\n### 基本调用\n```bash\ncurl --location --request POST '/v1/workflow/run' \\\n--header 'Authorization: Bearer {token}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n    \"parameters\": {\n        \"query\": \"你是谁\"\n    },\n    \"model\": \"workflow-d3c8ffe7-f052-4f51-a7b3-2e226d0b4d0c\"\n}'\n```\n\n### 复杂参数调用\n```bash\ncurl --location --request POST '/v1/workflow/run' \\\n--header 'Authorization: Bearer {token}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n    \"parameters\": {\n        \"query\": \"分析这个文档\",\n        \"document\": \"file_id:123\",\n        \"options\": {\n            \"language\": \"zh-CN\",\n            \"format\": \"summary\"\n        },\n        \"images\": [\"file_id:456\", \"file_id:789\"]\n    },\n    \"model\": \"workflow-d3c8ffe7-f052-4f51-a7b3-2e226d0b4d0c\"\n}'\n```\n\n### 文件上传示例\n当参数中包含 `file_id:xxx` 格式时，系统会自动：\n\n1. **识别文件参数**: 检测 `file_id:123` 格式\n2. **读取文件内容**: 从存储系统加载文件\n3. **转换为 base64**: 编码文件内容\n4. **构造文件对象**: 包含完整元信息\n\n转换后的文件对象格式：\n```json\n{\n  \"filename\": \"document.pdf\",\n  \"mimeType\": \"application/pdf\",\n  \"data\": \"base64编码的文件内容\",\n  \"size\": 1024000,\n  \"extension\": \".pdf\",\n  \"originalId\": 123\n}\n```\n\n## n8n 工作流配置\n\n### 1. 创建 Webhook 节点\n在 n8n 中创建一个 Webhook 节点，配置如下：\n- **HTTP Method**: POST\n- **Path**: 任意路径（将作为 workflow_id）\n- **Authentication**: None（通过 Header 验证）\n\n### 2. 处理文件数据\n在 n8n 工作流中，可以通过以下方式处理文件：\n\n```javascript\n// 获取文件数据\nconst fileData = $json.document;\nif (fileData && fileData.data) {\n  // 解码 base64 数据\n  const buffer = Buffer.from(fileData.data, 'base64');\n  \n  // 获取文件信息\n  const filename = fileData.filename;\n  const mimeType = fileData.mimeType;\n  const size = fileData.size;\n  \n  // 处理文件内容...\n}\n```\n\n### 3. 返回响应\nn8n 工作流应该返回数组格式的响应：\n```json\n[\n  {\n    \"output\": \"处理结果\",\n    \"query\": \"原始查询\",\n    \"status\": \"success\"\n  }\n]\n```\n\n## 响应格式\n\n### n8n 原始响应\n```json\n[\n  {\n    \"output\": \"我是DeepSeek Chat，由深度求索公司开发的智能助手！\",\n    \"query\": \"你是谁\"\n  }\n]\n```\n\n### 转换后的统一格式\n```json\n{\n  \"workflow_output_data\": {\n    \"output\": \"我是DeepSeek Chat，由深度求索公司开发的智能助手！\",\n    \"query\": \"你是谁\"\n  },\n  \"execute_id\": \"n8n-exec-102\",\n  \"channel_id\": 1,\n  \"model_name\": \"workflow-d3c8ffe7-f052-4f51-a7b3-2e226d0b4d0c\"\n}\n```\n\n## 错误处理\n\n### 文件相关错误\n- **文件过大**: 超过 10MB 限制时返回错误信息\n- **文件不存在**: 无法找到指定 file_id 时的处理\n- **读取失败**: 文件存储访问失败时的降级处理\n\n### 网络相关错误\n- **连接超时**: n8n 服务不可用时的错误处理\n- **认证失败**: API Key 错误时的响应\n- **工作流错误**: n8n 工作流执行失败时的错误信息\n\n## 最佳实践\n\n### 1. 文件处理\n- 控制文件大小在 10MB 以内\n- 使用合适的文件格式（PDF、图片、文档等）\n- 在 n8n 中及时清理临时文件\n\n### 2. 参数设计\n- 使用清晰的参数名称\n- 避免过深的嵌套结构\n- 合理使用数组和对象参数\n\n### 3. 错误处理\n- 在 n8n 工作流中添加错误处理节点\n- 返回有意义的错误信息\n- 记录详细的执行日志\n\n### 4. 性能优化\n- 避免在工作流中进行耗时操作\n- 使用异步处理大文件\n- 合理设置超时时间\n\n## 调试技巧\n\n### 1. 查看日志\n系统会记录详细的执行日志：\n```\n[INFO] n8n工作流请求转换 - WorkflowID: xxx, Parameters: {...}\n[INFO] n8n工作流文件处理成功 - 原始ID: 123, 文件名: test.pdf\n[INFO] n8n工作流处理完成 - ExecuteID: xxx, 输出字段数: 2\n```\n\n### 2. 测试工作流\n可以直接使用 curl 测试 n8n webhook：\n```bash\ncurl --location --request POST 'http://localhost:5678/webhook/your-workflow-id' \\\n--header 'Authorization: your-api-key' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\"query\": \"测试\"}'\n```\n\n### 3. 验证响应格式\n确保 n8n 工作流返回正确的数组格式响应，包含必要的字段。\n\n## 版本历史\n\n- **v1.0.0**: 基础工作流集成\n- **v1.1.0**: 添加文件上传支持\n- **v1.2.0**: 完善错误处理和日志记录\n\n## 技术支持\n\n如遇到问题，请检查：\n1. n8n 服务是否正常运行\n2. webhook URL 是否正确配置\n3. API Key 是否有效\n4. 文件大小是否超过限制\n5. 参数格式是否正确\n\n更多技术细节请参考源码注释和测试用例。"
  },
  {
    "path": "api/service/hub_adaptor/n8n/adaptor.go",
    "content": "package n8n\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\ntype Adaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *Adaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\nfunc (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\t// n8n 只支持工作流模式，使用工作流适配器\n\tworkflowAdaptor := &N8nWorkflowAdaptor{\n\t\tmeta:         meta,\n\t\tCustomConfig: a.CustomConfig,\n\t}\n\treturn workflowAdaptor.GetRequestURL(meta)\n}\n\nfunc (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\t// n8n 只支持工作流模式，使用工作流适配器\n\tworkflowAdaptor := &N8nWorkflowAdaptor{\n\t\tmeta:         meta,\n\t\tCustomConfig: a.CustomConfig,\n\t}\n\treturn workflowAdaptor.SetupRequestHeader(c, req, meta)\n}\n\nfunc (a *Adaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\t// n8n 主要用于工作流，不支持标准的聊天请求\n\treturn nil, errors.New(\"n8n 适配器主要用于工作流，请使用 /v1/workflow/run 接口\")\n}\n\nfunc (a *Adaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\treturn nil, errors.New(\"n8n 适配器不支持图像请求\")\n}\n\nfunc (a *Adaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\treturn custom.DoRequestHelper(a, c, meta, requestBody)\n}\n\nfunc (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\t// n8n 主要用于工作流，标准聊天响应处理暂不支持\n\treturn nil, &model.ErrorWithStatusCode{\n\t\tError: model.Error{\n\t\t\tMessage: \"n8n 适配器主要用于工作流，请使用 /v1/workflow/run 接口\",\n\t\t\tType:    \"n8n_workflow_only\",\n\t\t},\n\t\tStatusCode: http.StatusBadRequest,\n\t}\n}\n\nfunc (a *Adaptor) GetModelList() []string {\n\treturn ModelList\n}\n\nfunc (a *Adaptor) GetChannelName() string {\n\treturn \"n8n\"\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/n8n/constants.go",
    "content": "package n8n\n\nvar ModelList = []string{}\n"
  },
  {
    "path": "api/service/hub_adaptor/n8n/main.go",
    "content": "package n8n\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/common/render\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\n// ProcessN8nWorkflowResponse 处理 n8n 工作流响应\nfunc ProcessN8nWorkflowResponse(c *gin.Context, resp *http.Response, meta interface{}) (*custom.WorkflowResponseData, error) {\n\tworkflowAdaptor := &N8nWorkflowAdaptor{}\n\n\t// 处理响应\n\tworkflowResponse, err := workflowAdaptor.ProcessResponse(resp)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"处理n8n工作流响应失败: %v\", err)\n\t\treturn nil, err\n\t}\n\n\treturn workflowResponse, nil\n}\n\n// StreamHandler 处理 n8n 流式响应（如果需要的话）\nfunc StreamHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusCode, *string, string) {\n\tvar responseText string\n\tscanner := bufio.NewScanner(resp.Body)\n\n\t// 设置更大的缓冲区以处理大型响应\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\tscanner.Split(bufio.ScanLines)\n\tcommon.SetEventStreamHeaders(c)\n\n\tchannelConversationId := \"\"\n\n\tfor scanner.Scan() {\n\t\tdata := scanner.Text()\n\t\tif len(data) < 5 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// n8n 可能不支持标准的 SSE 格式，这里预留处理逻辑\n\t\t// logger.SysLogf(\"n8n stream data: %s\", data)\n\n\t\t// 如果 n8n 支持流式响应，在这里处理\n\t\t// 目前 n8n webhook 通常返回完整响应，不是流式的\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\tlogger.SysError(\"error reading n8n stream: \" + err.Error())\n\t}\n\n\trender.Done(c)\n\n\terr := resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\treturn nil, &responseText, channelConversationId\n}\n\n// Handler 处理 n8n 阻塞式响应\nfunc Handler(c *gin.Context, resp *http.Response, promptTokens int, modelName string) (*model.ErrorWithStatusCode, *string, string) {\n\tchannelConversationId := \"\"\n\n\t// 使用工作流适配器处理响应\n\tworkflowAdaptor := &N8nWorkflowAdaptor{}\n\tworkflowResponse, err := workflowAdaptor.ProcessResponse(resp)\n\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"process_n8n_response_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\t// 转换为 OpenAI 格式响应\n\tfullTextResponse := ResponseN8nToOpenAI(workflowResponse, modelName)\n\tjsonResponse, err := json.Marshal(fullTextResponse)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"marshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\tc.Writer.Header().Set(\"Content-Type\", \"application/json\")\n\tc.Writer.WriteHeader(resp.StatusCode)\n\t_, err = c.Writer.Write(jsonResponse)\n\n\tvar responseText string\n\tif len(fullTextResponse.Choices) > 0 {\n\t\tresponseText = fullTextResponse.Choices[0].Message.StringContent()\n\t}\n\n\t// n8n 没有会话ID概念，使用执行ID\n\tchannelConversationId = workflowResponse.ExecuteID\n\n\treturn nil, &responseText, channelConversationId\n}\n\n// ResponseN8nToOpenAI 将 n8n 工作流响应转换为 OpenAI 格式\nfunc ResponseN8nToOpenAI(workflowResponse *custom.WorkflowResponseData, modelName string) *openai.TextResponse {\n\tvar responseText string\n\n\t// 从工作流输出数据中提取主要内容\n\tif output, exists := workflowResponse.WorkflowOutputData[\"output\"]; exists {\n\t\tif outputStr, ok := output.(string); ok {\n\t\t\tresponseText = outputStr\n\t\t} else {\n\t\t\t// 如果不是字符串，转换为 JSON\n\t\t\tif jsonBytes, err := json.Marshal(output); err == nil {\n\t\t\t\tresponseText = string(jsonBytes)\n\t\t\t} else {\n\t\t\t\tresponseText = fmt.Sprintf(\"%v\", output)\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// 如果没有 output 字段，将整个输出数据转换为 JSON\n\t\tif jsonBytes, err := json.Marshal(workflowResponse.WorkflowOutputData); err == nil {\n\t\t\tresponseText = string(jsonBytes)\n\t\t} else {\n\t\t\tresponseText = \"n8n workflow executed successfully\"\n\t\t}\n\t}\n\n\tchoice := openai.TextResponseChoice{\n\t\tIndex: 0,\n\t\tMessage: model.Message{\n\t\t\tRole:    \"assistant\",\n\t\t\tContent: responseText,\n\t\t\tName:    nil,\n\t\t},\n\t\tFinishReason: \"stop\",\n\t}\n\n\tfullTextResponse := openai.TextResponse{\n\t\tId:      fmt.Sprintf(\"n8n-exec-%s\", workflowResponse.ExecuteID),\n\t\tModel:   modelName,\n\t\tObject:  \"chat.completion\",\n\t\tCreated: helper.GetTimestamp(),\n\t\tChoices: []openai.TextResponseChoice{choice},\n\t}\n\n\treturn &fullTextResponse\n}\n\n// ValidateN8nWorkflowID 验证 n8n 工作流ID格式\nfunc ValidateN8nWorkflowID(workflowID string) bool {\n\t// n8n 工作流ID通常是 UUID 格式\n\t// 例如: d3c8ffe7-f052-4f51-a7b3-2e226d0b4d0c\n\tif len(workflowID) == 0 {\n\t\treturn false\n\t}\n\n\t// 简单验证：包含连字符且长度合理\n\treturn strings.Contains(workflowID, \"-\") && len(workflowID) >= 10\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/n8n/model.go",
    "content": "package n8n\n\n// N8nWorkflowRequest n8n 工作流请求结构\ntype N8nWorkflowRequest map[string]interface{}\n\n// N8nWorkflowResponse n8n 工作流响应结构（数组格式）\ntype N8nWorkflowResponse []map[string]interface{}\n\n// N8nWorkflowItem n8n 工作流响应项\ntype N8nWorkflowItem struct {\n\tOutput interface{} `json:\"output,omitempty\"`\n\tQuery  interface{} `json:\"query,omitempty\"`\n\t// 支持任意其他字段\n\tData map[string]interface{} `json:\"-\"`\n}\n\n// N8nErrorResponse n8n 错误响应结构\ntype N8nErrorResponse struct {\n\tError   string `json:\"error,omitempty\"`\n\tMessage string `json:\"message,omitempty\"`\n\tCode    int    `json:\"code,omitempty\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/n8n/workflow.go",
    "content": "package n8n\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/common/storage\"\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n)\n\ntype N8nWorkflowAdaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *N8nWorkflowAdaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\nfunc (a *N8nWorkflowAdaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbaseURL := strings.TrimSuffix(meta.BaseURL, \"/\")\n\n\tif strings.Contains(baseURL, \"/webhook-test/\") || strings.Contains(baseURL, \"/webhook/\") {\n\t\treturn baseURL, nil\n\t}\n\n\t// 从模型名称中提取工作流ID\n\tworkflowID := extractWorkflowID(meta.ActualModelName)\n\tif workflowID == \"\" {\n\t\treturn \"\", fmt.Errorf(\"无法从模型名称中提取工作流ID: %s\", meta.ActualModelName)\n\t}\n\n\t// 智能判断使用 webhook 还是 webhook-test\n\tvar webhookPath string\n\tif strings.HasSuffix(baseURL, \"/webhook-test\") {\n\t\t// 如果 baseURL 以 /webhook-test 结尾，使用 test 模式\n\t\twebhookPath = \"webhook-test\"\n\t\t// 去掉 baseURL 中的 /webhook-test 部分\n\t\tbaseURL = strings.TrimSuffix(baseURL, \"/webhook-test\")\n\t} else if strings.HasSuffix(baseURL, \"/webhook\") {\n\t\t// 如果 baseURL 以 /webhook 结尾，使用正式模式\n\t\twebhookPath = \"webhook\"\n\t\t// 去掉 baseURL 中的 /webhook 部分\n\t\tbaseURL = strings.TrimSuffix(baseURL, \"/webhook\")\n\t} else {\n\t\t// 默认使用正式模式\n\t\twebhookPath = \"webhook\"\n\t}\n\n\t// 构造 n8n webhook URL\n\turl := fmt.Sprintf(\"%s/%s/%s\", baseURL, webhookPath, workflowID)\n\n\tlogger.SysLogf(\"n8n工作流URL构造 - BaseURL: %s, WebhookPath: %s, WorkflowID: %s, 完整URL: %s\",\n\t\tmeta.BaseURL, webhookPath, workflowID, url)\n\n\treturn url, nil\n}\n\nfunc (a *N8nWorkflowAdaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\t// n8n 特殊认证：直接使用 API Key，不加 Bearer 前缀\n\treq.Header.Set(\"Authorization\", meta.APIKey)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Accept\", \"application/json\")\n\n\tlogger.SysLogf(\"n8n工作流请求头设置 - Authorization: %s\", maskAPIKey(meta.APIKey))\n\n\treturn nil\n}\n\n// ConvertWorkflowRequest 将工作流参数转换为 n8n 请求格式\nfunc (a *N8nWorkflowAdaptor) ConvertWorkflowRequest(workflowID string, parameters map[string]interface{}) (*N8nWorkflowRequest, error) {\n\tlogger.SysLogf(\"n8n工作流请求转换 - WorkflowID: %s, Parameters: %+v\", workflowID, parameters)\n\n\t// 处理参数中的文件上传\n\tprocessedParameters, err := a.processWorkflowParameters(parameters)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"处理n8n工作流文件参数失败: %v\", err)\n\t\t// 如果文件处理失败，使用原始参数继续执行\n\t\tprocessedParameters = parameters\n\t}\n\n\t// n8n 支持任意 JSON 参数，传递处理后的参数\n\trequest := N8nWorkflowRequest(processedParameters)\n\n\treturn &request, nil\n}\n\n// processWorkflowParameters 处理工作流参数中的文件上传\nfunc (a *N8nWorkflowAdaptor) processWorkflowParameters(parameters map[string]interface{}) (map[string]interface{}, error) {\n\tif a.meta == nil {\n\t\treturn parameters, fmt.Errorf(\"meta is nil\")\n\t}\n\n\tprocessedParams := make(map[string]interface{})\n\n\tfor key, value := range parameters {\n\t\tprocessedValue, err := a.processParameterValue(value)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"处理n8n参数 %s 失败: %v\", key, err)\n\t\t\t// 如果单个参数处理失败，使用原始值\n\t\t\tprocessedParams[key] = value\n\t\t} else {\n\t\t\tprocessedParams[key] = processedValue\n\t\t}\n\t}\n\n\treturn processedParams, nil\n}\n\n// processParameterValue 递归处理参数值，支持字符串、数组、对象\nfunc (a *N8nWorkflowAdaptor) processParameterValue(value interface{}) (interface{}, error) {\n\tswitch v := value.(type) {\n\tcase string:\n\t\t// 检查是否为 file_id: 格式\n\t\treturn a.processFileIDString(v)\n\tcase []interface{}:\n\t\t// 处理数组\n\t\tprocessedArray := make([]interface{}, len(v))\n\t\tfor i, item := range v {\n\t\t\tprocessedItem, err := a.processParameterValue(item)\n\t\t\tif err != nil {\n\t\t\t\tprocessedArray[i] = item // 使用原始值\n\t\t\t} else {\n\t\t\t\tprocessedArray[i] = processedItem\n\t\t\t}\n\t\t}\n\t\treturn processedArray, nil\n\tcase map[string]interface{}:\n\t\t// 处理对象\n\t\tprocessedMap := make(map[string]interface{})\n\t\tfor k, val := range v {\n\t\t\tprocessedVal, err := a.processParameterValue(val)\n\t\t\tif err != nil {\n\t\t\t\tprocessedMap[k] = val // 使用原始值\n\t\t\t} else {\n\t\t\t\tprocessedMap[k] = processedVal\n\t\t\t}\n\t\t}\n\t\treturn processedMap, nil\n\tdefault:\n\t\t// 其他类型直接返回\n\t\treturn value, nil\n\t}\n}\n\n// processFileIDString 处理 file_id: 格式的字符串，转换为 n8n base64 格式\nfunc (a *N8nWorkflowAdaptor) processFileIDString(value string) (interface{}, error) {\n\t// 检查是否为 file_id: 格式\n\tif !strings.HasPrefix(value, \"file_id:\") {\n\t\treturn value, nil\n\t}\n\n\t// 提取文件ID\n\tfileIDStr := strings.TrimPrefix(value, \"file_id:\")\n\tfileID, err := strconv.ParseInt(fileIDStr, 10, 64)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"解析文件ID失败: %s, error: %v\", fileIDStr, err)\n\t\treturn value, err\n\t}\n\n\t// 获取上传文件对象\n\tuploadFile, err := db_model.GetUploadFileByID(fileID)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"获取上传文件失败: ID=%d, error: %v\", fileID, err)\n\t\treturn value, err\n\t}\n\n\t// 检查文件大小限制（n8n 建议限制在 10MB 以内）\n\tconst maxFileSize = 10 * 1024 * 1024 // 10MB\n\tif uploadFile.Size > maxFileSize {\n\t\tlogger.SysErrorf(\"文件过大，n8n不支持: ID=%d, Size=%d bytes, 限制=%d bytes\",\n\t\t\tfileID, uploadFile.Size, maxFileSize)\n\t\treturn value, fmt.Errorf(\"文件过大，n8n限制为10MB，当前文件大小: %d bytes\", uploadFile.Size)\n\t}\n\n\t// 读取文件内容\n\tfileContent, err := storage.StorageInstance.Load(uploadFile.Key)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"读取文件内容失败: ID=%d, Key=%s, error: %v\", fileID, uploadFile.Key, err)\n\t\treturn value, fmt.Errorf(\"读取文件内容失败: %v\", err)\n\t}\n\n\t// 转换为 base64\n\tbase64Content := base64.StdEncoding.EncodeToString(fileContent)\n\n\t// 构造 n8n 文件对象格式\n\tfileObject := map[string]interface{}{\n\t\t\"filename\":   uploadFile.FileName,\n\t\t\"mimeType\":   uploadFile.MimeType,\n\t\t\"data\":       base64Content,\n\t\t\"size\":       uploadFile.Size,\n\t\t\"extension\":  uploadFile.Extension,\n\t\t\"originalId\": fileID, // 保留原始ID用于调试\n\t}\n\n\tlogger.SysLogf(\"✅ n8n工作流文件处理成功 - 原始ID: %d, 文件名: %s, 大小: %d bytes, MIME: %s\",\n\t\tfileID, uploadFile.FileName, uploadFile.Size, uploadFile.MimeType)\n\n\treturn fileObject, nil\n}\n\n// DoRequest 执行 n8n 工作流请求\nfunc (a *N8nWorkflowAdaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\t// 读取请求体用于日志输出\n\tbodyBytes, err := io.ReadAll(requestBody)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取请求体失败: %v\", err)\n\t}\n\n\t// 获取请求URL\n\turl, err := a.GetRequestURL(meta)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 创建HTTP请求\n\treq, err := http.NewRequest(\"POST\", url, bytes.NewReader(bodyBytes))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"创建HTTP请求失败: %v\", err)\n\t}\n\n\t// 设置请求头\n\terr = a.SetupRequestHeader(c, req, meta)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 格式化输出请求信息\n\tlogger.SysLogf(\"🚀 n8n工作流请求开始\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📡 请求URL: %s\", url)\n\tlogger.SysLogf(\"│ 🔑 API Key: %s\", maskAPIKey(meta.APIKey))\n\tlogger.SysLogf(\"│ 📝 请求方法: POST\")\n\tlogger.SysLogf(\"│ 📋 Content-Type: application/json\")\n\tlogger.SysLogf(\"├─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📦 请求参数:\")\n\n\t// 格式化输出请求体\n\tvar requestData map[string]interface{}\n\tif err := json.Unmarshal(bodyBytes, &requestData); err == nil {\n\t\tprettyJSON, _ := json.MarshalIndent(requestData, \"│   \", \"  \")\n\t\tlogger.SysLogf(\"│   %s\", string(prettyJSON))\n\t} else {\n\t\tlogger.SysLogf(\"│   %s\", string(bodyBytes))\n\t}\n\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\n\t// 执行请求\n\tclient := &http.Client{}\n\tresp, err := client.Do(req)\n\n\tif err != nil {\n\t\tlogger.SysErrorf(\"❌ n8n工作流请求失败: %v\", err)\n\t\treturn nil, err\n\t}\n\n\tlogger.SysLogf(\"✅ n8n工作流请求成功 - 状态码: %d\", resp.StatusCode)\n\treturn resp, nil\n}\n\n// ProcessResponse 处理 n8n 工作流响应\nfunc (a *N8nWorkflowAdaptor) ProcessResponse(resp *http.Response) (*custom.WorkflowResponseData, error) {\n\tdefer resp.Body.Close()\n\n\t// 读取响应体\n\tresponseBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"读取n8n工作流响应失败: %v\", err)\n\t}\n\n\tlogger.SysLogf(\"📡 n8n工作流原始响应 - StatusCode: %d, 响应长度: %d bytes\",\n\t\tresp.StatusCode, len(responseBody))\n\n\t// 解析 n8n 响应（数组格式）\n\tvar n8nResponse N8nWorkflowResponse\n\tif err := json.Unmarshal(responseBody, &n8nResponse); err != nil {\n\t\tlogger.SysErrorf(\"解析n8n工作流响应失败: %v, 响应内容: %s\", err, string(responseBody))\n\t\treturn nil, fmt.Errorf(\"解析n8n工作流响应失败: %v\", err)\n\t}\n\n\t// 转换为统一的工作流响应格式\n\tworkflowOutputData := a.convertN8nResponseToOutputData(n8nResponse)\n\n\t// 生成执行ID（使用时间戳或其他唯一标识）\n\texecuteID := fmt.Sprintf(\"n8n-exec-%d\", len(responseBody))\n\n\tworkflowResponse := &custom.WorkflowResponseData{\n\t\tWorkflowOutputData: workflowOutputData,\n\t\tExecuteID:          executeID,\n\t\tChannelID:          a.meta.ChannelId,\n\t\tModelName:          a.meta.OriginModelName,\n\t}\n\n\tlogger.SysLogf(\"✅ n8n工作流处理完成 - ExecuteID: %s, 输出字段数: %d\",\n\t\texecuteID, len(workflowOutputData))\n\n\treturn workflowResponse, nil\n}\n\n// convertN8nResponseToOutputData 将 n8n 数组响应转换为标准输出格式\nfunc (a *N8nWorkflowAdaptor) convertN8nResponseToOutputData(n8nResponse N8nWorkflowResponse) map[string]interface{} {\n\toutputData := make(map[string]interface{})\n\n\tif len(n8nResponse) == 0 {\n\t\tlogger.SysLogf(\"⚠️ n8n工作流返回空数组\")\n\t\toutputData[\"output\"] = \"\"\n\t\treturn outputData\n\t}\n\n\t// 如果只有一个响应项，直接展开其字段\n\tif len(n8nResponse) == 1 {\n\t\tfor key, value := range n8nResponse[0] {\n\t\t\toutputData[key] = value\n\t\t}\n\t\tlogger.SysLogf(\"n8n工作流单项响应转换 - 字段数: %d\", len(outputData))\n\t\treturn outputData\n\t}\n\n\t// 如果有多个响应项，将整个数组作为 items 字段\n\toutputData[\"items\"] = n8nResponse\n\toutputData[\"count\"] = len(n8nResponse)\n\n\t// 尝试提取第一项的 output 字段作为主要输出\n\tif firstItem := n8nResponse[0]; firstItem != nil {\n\t\tif output, exists := firstItem[\"output\"]; exists {\n\t\t\toutputData[\"output\"] = output\n\t\t}\n\t}\n\n\tlogger.SysLogf(\"n8n工作流多项响应转换 - 项目数: %d, 输出字段数: %d\",\n\t\tlen(n8nResponse), len(outputData))\n\n\treturn outputData\n}\n\n// extractWorkflowID 从模型名称中提取工作流ID\nfunc extractWorkflowID(modelName string) string {\n\t// 支持 workflow-{id} 格式\n\tif strings.HasPrefix(modelName, \"workflow-\") {\n\t\treturn strings.TrimPrefix(modelName, \"workflow-\")\n\t}\n\n\t// 直接使用模型名称作为工作流ID\n\treturn modelName\n}\n\n// maskAPIKey 遮蔽 API Key 用于日志输出\nfunc maskAPIKey(apiKey string) string {\n\tif len(apiKey) <= 8 {\n\t\treturn strings.Repeat(\"*\", len(apiKey))\n\t}\n\treturn apiKey[:4] + strings.Repeat(\"*\", len(apiKey)-8) + apiKey[len(apiKey)-4:]\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/openai/adaptor.go",
    "content": "package openai\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/storage\"\n\tHub_model \"github.com/53AI/53AIHub/model\"\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/volcengine\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/doubao\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/minimax\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/novita\"\n\t\"github.com/songquanpeng/one-api/relay/channeltype\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n\t\"github.com/songquanpeng/one-api/relay/relaymode\"\n)\n\ntype Adaptor struct {\n\tChannelType  int\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *Adaptor) Init(meta *meta.Meta) {\n\ta.ChannelType = meta.ChannelType\n}\n\nfunc (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tswitch meta.ChannelType {\n\tcase channeltype.Azure:\n\t\tif meta.Mode == relaymode.ImagesGenerations {\n\t\t\t// https://learn.microsoft.com/en-us/azure/ai-services/openai/dall-e-quickstart?tabs=dalle3%2Ccommand-line&pivots=rest-api\n\t\t\t// https://{resource_name}.openai.azure.com/openai/deployments/dall-e-3/images/generations?api-version=2024-03-01-preview\n\t\t\tbaseUrl := meta.BaseURL\n\t\t\tbaseUrl = strings.TrimSuffix(baseUrl, \"/\")\n\t\t\tfullRequestURL := fmt.Sprintf(\"%s/openai/deployments/%s/images/generations?api-version=%s\", baseUrl, meta.ActualModelName, meta.Config.APIVersion)\n\t\t\treturn fullRequestURL, nil\n\t\t}\n\n\t\t// https://learn.microsoft.com/en-us/azure/cognitive-services/openai/chatgpt-quickstart?pivots=rest-api&tabs=command-line#rest-api\n\t\trequestURL := strings.Split(meta.RequestURLPath, \"?\")[0]\n\t\trequestURL = fmt.Sprintf(\"%s?api-version=%s\", requestURL, meta.Config.APIVersion)\n\t\ttask := strings.TrimPrefix(requestURL, \"/v1/\")\n\t\tmodel_ := meta.ActualModelName\n\t\tmodel_ = strings.Replace(model_, \".\", \"\", -1)\n\t\t//https://github.com/songquanpeng/one-api/issues/1191\n\t\t// {your endpoint}/openai/deployments/{your azure_model}/chat/completions?api-version={api_version}\n\t\trequestURL = fmt.Sprintf(\"/openai/deployments/%s/%s\", model_, task)\n\t\treturn GetFullRequestURL(meta.BaseURL, requestURL, meta.ChannelType), nil\n\tcase channeltype.Minimax:\n\t\treturn minimax.GetRequestURL(meta)\n\tcase channeltype.Doubao:\n\t\treturn doubao.GetRequestURL(meta)\n\tcase channeltype.Novita:\n\t\treturn novita.GetRequestURL(meta)\n\tcase Hub_model.ChannelApiVolcengine:\n\t\treturn volcengine.GetRequestURL(meta)\n\tcase Hub_model.ChannelApiTypeMaxKB:\n\t\tmeta.RequestURLPath = strings.TrimPrefix(meta.RequestURLPath, \"/v1\")\n\t\treturn GetFullRequestURL(meta.BaseURL, meta.RequestURLPath, meta.ChannelType), nil\n\tdefault:\n\t\treturn GetFullRequestURL(meta.BaseURL, meta.RequestURLPath, meta.ChannelType), nil\n\t}\n}\n\nfunc (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\tcustom.SetupCommonRequestHeader(c, req, meta)\n\tif meta.ChannelType == channeltype.Azure {\n\t\treq.Header.Set(\"api-key\", meta.APIKey)\n\t\treturn nil\n\t}\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\tif meta.ChannelType == channeltype.OpenRouter {\n\t\treq.Header.Set(\"HTTP-Referer\", \"https://53ai.com\")\n\t\treq.Header.Set(\"X-Title\", \"53AIHub\")\n\t}\n\treturn nil\n}\n\nfunc (a *Adaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\tif request.Stream {\n\t\t// always return usage in stream mode\n\t\tif request.StreamOptions == nil {\n\t\t\trequest.StreamOptions = &model.StreamOptions{}\n\t\t}\n\t\trequest.StreamOptions.IncludeUsage = true\n\t}\n\n\ta.HandlerUploadFileMessages(request)\n\treturn request, nil\n}\n\nfunc (a *Adaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\treturn request, nil\n}\n\nfunc (a *Adaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\treturn custom.DoRequestHelper(a, c, meta, requestBody)\n}\n\nfunc (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\tif meta.IsStream {\n\t\tvar responseText string\n\t\terr, responseText, usage = StreamHandler(c, resp, meta.Mode)\n\t\tif usage == nil || usage.TotalTokens == 0 {\n\t\t\tusage = ResponseText2Usage(responseText, meta.ActualModelName, meta.PromptTokens)\n\t\t}\n\t\tif usage.TotalTokens != 0 && usage.PromptTokens == 0 { // some channels don't return prompt tokens & completion tokens\n\t\t\tusage.PromptTokens = meta.PromptTokens\n\t\t\tusage.CompletionTokens = usage.TotalTokens - meta.PromptTokens\n\t\t}\n\t} else {\n\t\tswitch meta.Mode {\n\t\tcase relaymode.ImagesGenerations:\n\t\t\terr, _ = ImageHandler(c, resp)\n\t\tdefault:\n\t\t\terr, usage = Handler(c, resp, meta.PromptTokens, meta.ActualModelName)\n\t\t}\n\t}\n\treturn\n}\n\nfunc (a *Adaptor) GetModelList() []string {\n\t_, modelList := GetCompatibleChannelMeta(a.ChannelType)\n\treturn modelList\n}\n\nfunc (a *Adaptor) GetChannelName() string {\n\tchannelName, _ := GetCompatibleChannelMeta(a.ChannelType)\n\treturn channelName\n}\n\nfunc (a *Adaptor) HandlerUploadFileMessages(request *model.GeneralOpenAIRequest) {\n\tif request.Messages == nil || len(request.Messages) == 0 {\n\t\treturn\n\t}\n\n\tvar newMessages []model.Message\n\tvar contentObjs []db_model.ObjectStringContent\n\n\tfor _, message := range request.Messages {\n\t\tif message.Role == \"assistant\" {\n\t\t\tnewMessages = append(newMessages, message)\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, ok := message.Content.(string); !ok {\n\t\t\tnewMessages = append(newMessages, message)\n\t\t\tcontinue\n\t\t}\n\n\t\tqueryStr := message.Content.(string)\n\t\tif err := json.Unmarshal([]byte(queryStr), &contentObjs); err != nil {\n\t\t\tnewMessages = append(newMessages, message)\n\t\t\tcontinue\n\t\t}\n\n\t\tvar contexts []any\n\t\tfor _, contentObj := range contentObjs {\n\t\t\tif contentObj.Type == \"text\" {\n\t\t\t\tcontexts = append(contexts, TextContent{\n\t\t\t\t\tType: \"text\",\n\t\t\t\t\tText: contentObj.Content,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t} else if contentObj.Type == \"image\" {\n\t\t\t\tuoloadFile := contentObj.GetUploadFile()\n\t\t\t\tif uoloadFile == nil {\n\t\t\t\t\tlogger.SysError(\"file not found\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif a.ChannelType == channeltype.FastGPT {\n\t\t\t\t\tfileType := GetFileFastGptTypeString(uoloadFile.Extension)\n\t\t\t\t\tif fileType == \"\" {\n\t\t\t\t\t\tlogger.SysErrorf(\"yuanqi: file type not supported, %+v\", contentObj)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif fileType == \"file\" {\n\t\t\t\t\t\t// fastgpt 支持文件,图片就和之前一样\n\t\t\t\t\t\tcontexts = append(contexts, FastGptFileContent{\n\t\t\t\t\t\t\tType: \"file_url\",\n\t\t\t\t\t\t\tName: uoloadFile.FileName,\n\t\t\t\t\t\t\tUrl:  uoloadFile.GetPreviewFullUrl(),\n\t\t\t\t\t\t})\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfileContent, err := storage.StorageInstance.Load(uoloadFile.Key)\n\t\t\t\tif err != nil {\n\t\t\t\t\tlogger.SysError(\"file content not found\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbase64Str := base64.StdEncoding.EncodeToString(fileContent)\n\t\t\t\tmimeType := uoloadFile.MimeType\n\t\t\t\tdataUrl := \"data:\" + mimeType + \";base64,\" + base64Str\n\t\t\t\tcontexts = append(contexts, ImageContent{\n\t\t\t\t\tType: \"image_url\",\n\t\t\t\t\tImageURL: &model.ImageURL{\n\t\t\t\t\t\tUrl: dataUrl,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tmessage.Content = contexts\n\t\tnewMessages = append(newMessages, message)\n\t}\n\n\trequest.Messages = newMessages\n\t// jsonBytes, err := json.Marshal(request)\n\t// if err != nil {\n\t// \tlogger.SysError(\"marshal request failed\")\n\t// \treturn\n\t// }\n\t// logger.SysLogf(\"request: %s\", string(jsonBytes))\n\n\t// return\n}\n\nfunc GetFileFastGptTypeString(extension string) string {\n\t// 兼容 openAI 目前是支持文件和图片\n\tvar fileType string\n\tswitch strings.ToLower(extension) {\n\tcase \".jpg\", \".jpeg\", \".png\", \".gif\", \".webp\", \".bmp\":\n\t\tfileType = \"image\"\n\t// case \".mp4\", \".mov\", \".avi\", \".wmv\", \".flv\":\n\t// \tfileType = \"video\"\n\t// case \".mp3\", \".wav\", \".aac\", \".flac\":\n\t// \tfileType = \"audio\"\n\t// case \".pdf\", \".txt\", \".csv\", \".json\", \".xml\", \".doc\", \".docx\":\n\t// \tfileType = \"file\"\n\t// case \".txt\", \".csv\", \".json\", \".xml\":\n\t// \tfileType = \"text\"\n\t// case \".doc\", \".docx\":\n\t// \tfileType = \"doc\"\n\t// case \".xls\", \".xlsx\":\n\t// \tfileType = \"xls\"\n\t// case \".ppt\", \".pptx\":\n\t// \tfileType = \"ppt\"\n\tdefault:\n\t\tfileType = \"file\"\n\t}\n\n\treturn fileType\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/openai/compatible.go",
    "content": "package openai\n\nimport (\n\t\"github.com/songquanpeng/one-api/relay/adaptor/ai360\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/baichuan\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/deepseek\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/doubao\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/groq\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/lingyiwanwu\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/minimax\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/mistral\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/moonshot\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/novita\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/siliconflow\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/stepfun\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/togetherai\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/xai\"\n\t\"github.com/songquanpeng/one-api/relay/channeltype\"\n)\n\nvar CompatibleChannels = []int{\n\tchanneltype.Azure,\n\tchanneltype.AI360,\n\tchanneltype.Moonshot,\n\tchanneltype.Baichuan,\n\tchanneltype.Minimax,\n\tchanneltype.Doubao,\n\tchanneltype.Mistral,\n\tchanneltype.Groq,\n\tchanneltype.LingYiWanWu,\n\tchanneltype.StepFun,\n\tchanneltype.DeepSeek,\n\tchanneltype.TogetherAI,\n\tchanneltype.Novita,\n\tchanneltype.SiliconFlow,\n\tchanneltype.XAI,\n}\n\nfunc GetCompatibleChannelMeta(channelType int) (string, []string) {\n\tswitch channelType {\n\tcase channeltype.Azure:\n\t\treturn \"azure\", ModelList\n\tcase channeltype.AI360:\n\t\treturn \"360\", ai360.ModelList\n\tcase channeltype.Moonshot:\n\t\treturn \"moonshot\", moonshot.ModelList\n\tcase channeltype.Baichuan:\n\t\treturn \"baichuan\", baichuan.ModelList\n\tcase channeltype.Minimax:\n\t\treturn \"minimax\", minimax.ModelList\n\tcase channeltype.Mistral:\n\t\treturn \"mistralai\", mistral.ModelList\n\tcase channeltype.Groq:\n\t\treturn \"groq\", groq.ModelList\n\tcase channeltype.LingYiWanWu:\n\t\treturn \"lingyiwanwu\", lingyiwanwu.ModelList\n\tcase channeltype.StepFun:\n\t\treturn \"stepfun\", stepfun.ModelList\n\tcase channeltype.DeepSeek:\n\t\treturn \"deepseek\", deepseek.ModelList\n\tcase channeltype.TogetherAI:\n\t\treturn \"together.ai\", togetherai.ModelList\n\tcase channeltype.Doubao:\n\t\treturn \"doubao\", doubao.ModelList\n\tcase channeltype.Novita:\n\t\treturn \"novita\", novita.ModelList\n\tcase channeltype.SiliconFlow:\n\t\treturn \"siliconflow\", siliconflow.ModelList\n\tcase channeltype.XAI:\n\t\treturn \"xai\", xai.ModelList\n\tdefault:\n\t\treturn \"openai\", ModelList\n\t}\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/openai/constants.go",
    "content": "package openai\n\nvar ModelList = []string{\n\t\"gpt-3.5-turbo\", \"gpt-3.5-turbo-0301\", \"gpt-3.5-turbo-0613\", \"gpt-3.5-turbo-1106\", \"gpt-3.5-turbo-0125\",\n\t\"gpt-3.5-turbo-16k\", \"gpt-3.5-turbo-16k-0613\",\n\t\"gpt-3.5-turbo-instruct\",\n\t\"gpt-4\", \"gpt-4-0314\", \"gpt-4-0613\", \"gpt-4-1106-preview\", \"gpt-4-0125-preview\",\n\t\"gpt-4-32k\", \"gpt-4-32k-0314\", \"gpt-4-32k-0613\",\n\t\"gpt-4-turbo-preview\", \"gpt-4-turbo\", \"gpt-4-turbo-2024-04-09\",\n\t\"gpt-4o\", \"gpt-4o-2024-05-13\",\n\t\"gpt-4o-2024-08-06\",\n\t\"gpt-4o-2024-11-20\",\n\t\"chatgpt-4o-latest\",\n\t\"gpt-4o-mini\", \"gpt-4o-mini-2024-07-18\",\n\t\"gpt-4-vision-preview\",\n\t\"text-embedding-ada-002\", \"text-embedding-3-small\", \"text-embedding-3-large\",\n\t\"text-curie-001\", \"text-babbage-001\", \"text-ada-001\", \"text-davinci-002\", \"text-davinci-003\",\n\t\"text-moderation-latest\", \"text-moderation-stable\",\n\t\"text-davinci-edit-001\",\n\t\"davinci-002\", \"babbage-002\",\n\t\"dall-e-2\", \"dall-e-3\",\n\t\"whisper-1\",\n\t\"tts-1\", \"tts-1-1106\", \"tts-1-hd\", \"tts-1-hd-1106\",\n\t\"o1\", \"o1-2024-12-17\",\n\t\"o1-preview\", \"o1-preview-2024-09-12\",\n\t\"o1-mini\", \"o1-mini-2024-09-12\",\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/openai/helper.go",
    "content": "package openai\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/songquanpeng/one-api/relay/channeltype\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\nfunc ResponseText2Usage(responseText string, modelName string, promptTokens int) *model.Usage {\n\tusage := &model.Usage{}\n\tusage.PromptTokens = promptTokens\n\tusage.CompletionTokens = CountTokenText(responseText, modelName)\n\tusage.TotalTokens = usage.PromptTokens + usage.CompletionTokens\n\treturn usage\n}\n\nfunc GetFullRequestURL(baseURL string, requestURL string, channelType int) string {\n\tfullRequestURL := fmt.Sprintf(\"%s%s\", baseURL, requestURL)\n\n\tif strings.HasPrefix(baseURL, \"https://gateway.ai.cloudflare.com\") {\n\t\tswitch channelType {\n\t\tcase channeltype.OpenAI:\n\t\t\tfullRequestURL = fmt.Sprintf(\"%s%s\", baseURL, strings.TrimPrefix(requestURL, \"/v1\"))\n\t\tcase channeltype.Azure:\n\t\t\tfullRequestURL = fmt.Sprintf(\"%s%s\", baseURL, strings.TrimPrefix(requestURL, \"/openai/deployments\"))\n\t\t}\n\t}\n\treturn fullRequestURL\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/openai/image.go",
    "content": "package openai\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n\t\"io\"\n\t\"net/http\"\n)\n\nfunc ImageHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusCode, *model.Usage) {\n\tvar imageResponse ImageResponse\n\tresponseBody, err := io.ReadAll(resp.Body)\n\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"read_response_body_failed\", http.StatusInternalServerError), nil\n\t}\n\terr = resp.Body.Close()\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil\n\t}\n\terr = json.Unmarshal(responseBody, &imageResponse)\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"unmarshal_response_body_failed\", http.StatusInternalServerError), nil\n\t}\n\n\tresp.Body = io.NopCloser(bytes.NewBuffer(responseBody))\n\n\tfor k, v := range resp.Header {\n\t\tc.Writer.Header().Set(k, v[0])\n\t}\n\tc.Writer.WriteHeader(resp.StatusCode)\n\n\t_, err = io.Copy(c.Writer, resp.Body)\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"copy_response_body_failed\", http.StatusInternalServerError), nil\n\t}\n\terr = resp.Body.Close()\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil\n\t}\n\treturn nil, nil\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/openai/main.go",
    "content": "package openai\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/songquanpeng/one-api/common/render\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common\"\n\t\"github.com/songquanpeng/one-api/common/conv\"\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n\t\"github.com/songquanpeng/one-api/relay/relaymode\"\n)\n\nconst (\n\tdataPrefix       = \"data: \"\n\tdone             = \"[DONE]\"\n\tdataPrefixLength = len(dataPrefix)\n)\n\nfunc StreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*model.ErrorWithStatusCode, string, *model.Usage) {\n\tresponseText := \"\"\n\tscanner := bufio.NewScanner(resp.Body)\n\t// 设置更大的缓冲区以处理大型响应 (1MB)\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\tscanner.Split(bufio.ScanLines)\n\tvar usage *model.Usage\n\n\tcommon.SetEventStreamHeaders(c)\n\n\tdoneRendered := false\n\t// logger.SysLogf(\"========== stream data: =======\")\n\tfor scanner.Scan() {\n\t\tdata := scanner.Text()\n\t\t// logger.SysLogf(\"%s\", data)\n\t\tif len(data) < dataPrefixLength { // ignore blank line or wrong format\n\t\t\tcontinue\n\t\t}\n\t\t// Normalize data format by adding space after 'data:' if missing\n\t\tif strings.HasPrefix(data, \"data:{\") {\n\t\t\tdata = strings.Replace(data, \"data:{\", \"data: {\", 1)\n\t\t}\n\t\tif data[:dataPrefixLength] != dataPrefix && data[:dataPrefixLength] != done {\n\t\t\tcontinue\n\t\t}\n\t\tif strings.HasPrefix(data[dataPrefixLength:], done) {\n\t\t\trender.StringData(c, data)\n\t\t\tdoneRendered = true\n\t\t\tcontinue\n\t\t}\n\t\tswitch relayMode {\n\t\tcase relaymode.ChatCompletions:\n\t\t\tvar streamResponse ChatCompletionsStreamResponse\n\t\t\terr := json.Unmarshal([]byte(data[dataPrefixLength:]), &streamResponse)\n\t\t\tif err != nil {\n\t\t\t\tlogger.SysError(\"error unmarshalling stream response: \" + err.Error())\n\t\t\t\trender.StringData(c, data) // if error happened, pass the data to client\n\t\t\t\tcontinue                   // just ignore the error\n\t\t\t}\n\t\t\tif len(streamResponse.Choices) == 0 && streamResponse.Usage == nil {\n\t\t\t\t// but for empty choice and no usage, we should not pass it to client, this is for azure\n\t\t\t\tcontinue // just ignore empty choice\n\t\t\t}\n\t\t\trender.StringData(c, data)\n\t\t\tfor _, choice := range streamResponse.Choices {\n\t\t\t\tresponseText += conv.AsString(choice.Delta.Content)\n\t\t\t}\n\t\t\tif streamResponse.Usage != nil {\n\t\t\t\tusage = streamResponse.Usage\n\t\t\t}\n\t\tcase relaymode.Completions:\n\t\t\trender.StringData(c, data)\n\t\t\tvar streamResponse CompletionsStreamResponse\n\t\t\terr := json.Unmarshal([]byte(data[dataPrefixLength:]), &streamResponse)\n\t\t\tif err != nil {\n\t\t\t\tlogger.SysError(\"error unmarshalling stream response: \" + err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, choice := range streamResponse.Choices {\n\t\t\t\tresponseText += choice.Text\n\t\t\t}\n\t\t}\n\t}\n\n\t// logger.SysLogf(\"========== stream data end =======\")\n\tif err := scanner.Err(); err != nil {\n\t\tlogger.SysError(\"error reading stream: \" + err.Error())\n\t}\n\n\tif !doneRendered {\n\t\trender.Done(c)\n\t}\n\n\terr := resp.Body.Close()\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), \"\", nil\n\t}\n\n\treturn nil, responseText, usage\n}\n\nfunc Handler(c *gin.Context, resp *http.Response, promptTokens int, modelName string) (*model.ErrorWithStatusCode, *model.Usage) {\n\tvar textResponse SlimTextResponse\n\tresponseBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"read_response_body_failed\", http.StatusInternalServerError), nil\n\t}\n\terr = resp.Body.Close()\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil\n\t}\n\terr = json.Unmarshal(responseBody, &textResponse)\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"unmarshal_response_body_failed\", http.StatusInternalServerError), nil\n\t}\n\tif textResponse.Error.Type != \"\" {\n\t\treturn &model.ErrorWithStatusCode{\n\t\t\tError:      textResponse.Error,\n\t\t\tStatusCode: resp.StatusCode,\n\t\t}, nil\n\t}\n\t// Reset response body\n\tresp.Body = io.NopCloser(bytes.NewBuffer(responseBody))\n\n\t// We shouldn't set the header before we parse the response body, because the parse part may fail.\n\t// And then we will have to send an error response, but in this case, the header has already been set.\n\t// So the HTTPClient will be confused by the response.\n\t// For example, Postman will report error, and we cannot check the response at all.\n\tfor k, v := range resp.Header {\n\t\tc.Writer.Header().Set(k, v[0])\n\t}\n\tc.Writer.WriteHeader(resp.StatusCode)\n\t_, err = io.Copy(c.Writer, resp.Body)\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"copy_response_body_failed\", http.StatusInternalServerError), nil\n\t}\n\terr = resp.Body.Close()\n\tif err != nil {\n\t\treturn ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil\n\t}\n\n\tif textResponse.Usage.TotalTokens == 0 || (textResponse.Usage.PromptTokens == 0 && textResponse.Usage.CompletionTokens == 0) {\n\t\tcompletionTokens := 0\n\t\tfor _, choice := range textResponse.Choices {\n\t\t\tcompletionTokens += CountTokenText(choice.Message.StringContent(), modelName)\n\t\t}\n\t\ttextResponse.Usage = model.Usage{\n\t\t\tPromptTokens:     promptTokens,\n\t\t\tCompletionTokens: completionTokens,\n\t\t\tTotalTokens:      promptTokens + completionTokens,\n\t\t}\n\t}\n\treturn nil, &textResponse.Usage\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/openai/model.go",
    "content": "package openai\n\nimport \"github.com/songquanpeng/one-api/relay/model\"\n\ntype TextContent struct {\n\tType string `json:\"type,omitempty\"`\n\tText string `json:\"text,omitempty\"`\n}\n\ntype ImageContent struct {\n\tType     string          `json:\"type,omitempty\"`\n\tImageURL *model.ImageURL `json:\"image_url,omitempty\"`\n}\n\ntype ChatRequest struct {\n\tModel     string          `json:\"model\"`\n\tMessages  []model.Message `json:\"messages\"`\n\tMaxTokens int             `json:\"max_tokens\"`\n}\n\ntype TextRequest struct {\n\tModel     string          `json:\"model\"`\n\tMessages  []model.Message `json:\"messages\"`\n\tPrompt    string          `json:\"prompt\"`\n\tMaxTokens int             `json:\"max_tokens\"`\n\t//Stream   bool      `json:\"stream\"`\n}\n\n// ImageRequest docs: https://platform.openai.com/docs/api-reference/images/create\ntype ImageRequest struct {\n\tModel          string `json:\"model\"`\n\tPrompt         string `json:\"prompt\" binding:\"required\"`\n\tN              int    `json:\"n,omitempty\"`\n\tSize           string `json:\"size,omitempty\"`\n\tQuality        string `json:\"quality,omitempty\"`\n\tResponseFormat string `json:\"response_format,omitempty\"`\n\tStyle          string `json:\"style,omitempty\"`\n\tUser           string `json:\"user,omitempty\"`\n}\n\ntype WhisperJSONResponse struct {\n\tText string `json:\"text,omitempty\"`\n}\n\ntype WhisperVerboseJSONResponse struct {\n\tTask     string    `json:\"task,omitempty\"`\n\tLanguage string    `json:\"language,omitempty\"`\n\tDuration float64   `json:\"duration,omitempty\"`\n\tText     string    `json:\"text,omitempty\"`\n\tSegments []Segment `json:\"segments,omitempty\"`\n}\n\ntype Segment struct {\n\tId               int     `json:\"id\"`\n\tSeek             int     `json:\"seek\"`\n\tStart            float64 `json:\"start\"`\n\tEnd              float64 `json:\"end\"`\n\tText             string  `json:\"text\"`\n\tTokens           []int   `json:\"tokens\"`\n\tTemperature      float64 `json:\"temperature\"`\n\tAvgLogprob       float64 `json:\"avg_logprob\"`\n\tCompressionRatio float64 `json:\"compression_ratio\"`\n\tNoSpeechProb     float64 `json:\"no_speech_prob\"`\n}\n\ntype TextToSpeechRequest struct {\n\tModel          string  `json:\"model\" binding:\"required\"`\n\tInput          string  `json:\"input\" binding:\"required\"`\n\tVoice          string  `json:\"voice\" binding:\"required\"`\n\tSpeed          float64 `json:\"speed\"`\n\tResponseFormat string  `json:\"response_format\"`\n}\n\ntype UsageOrResponseText struct {\n\t*model.Usage\n\tResponseText string\n}\n\ntype SlimTextResponse struct {\n\tChoices     []TextResponseChoice `json:\"choices\"`\n\tmodel.Usage `json:\"usage\"`\n\tError       model.Error `json:\"error\"`\n}\n\ntype TextResponseChoice struct {\n\tIndex         int `json:\"index\"`\n\tmodel.Message `json:\"message\"`\n\tFinishReason  string `json:\"finish_reason\"`\n}\n\ntype TextResponse struct {\n\tId          string               `json:\"id\"`\n\tModel       string               `json:\"model,omitempty\"`\n\tObject      string               `json:\"object\"`\n\tCreated     int64                `json:\"created\"`\n\tChoices     []TextResponseChoice `json:\"choices\"`\n\tmodel.Usage `json:\"usage\"`\n}\n\ntype EmbeddingResponseItem struct {\n\tObject    string    `json:\"object\"`\n\tIndex     int       `json:\"index\"`\n\tEmbedding []float64 `json:\"embedding\"`\n}\n\ntype EmbeddingResponse struct {\n\tObject      string                  `json:\"object\"`\n\tData        []EmbeddingResponseItem `json:\"data\"`\n\tModel       string                  `json:\"model\"`\n\tmodel.Usage `json:\"usage\"`\n}\n\ntype ImageData struct {\n\tUrl           string `json:\"url,omitempty\"`\n\tB64Json       string `json:\"b64_json,omitempty\"`\n\tRevisedPrompt string `json:\"revised_prompt,omitempty\"`\n}\n\ntype ImageResponse struct {\n\tCreated int64       `json:\"created\"`\n\tData    []ImageData `json:\"data\"`\n\t//model.Usage `json:\"usage\"`\n}\n\ntype ChatCompletionsStreamResponseChoice struct {\n\tIndex        int           `json:\"index\"`\n\tDelta        model.Message `json:\"delta\"`\n\tFinishReason *string       `json:\"finish_reason,omitempty\"`\n}\n\ntype ChatCompletionsStreamResponse struct {\n\tId      string                                `json:\"id\"`\n\tObject  string                                `json:\"object\"`\n\tCreated int64                                 `json:\"created\"`\n\tModel   string                                `json:\"model\"`\n\tChoices []ChatCompletionsStreamResponseChoice `json:\"choices\"`\n\tUsage   *model.Usage                          `json:\"usage,omitempty\"`\n}\n\ntype CompletionsStreamResponse struct {\n\tChoices []struct {\n\t\tText         string `json:\"text\"`\n\t\tFinishReason string `json:\"finish_reason\"`\n\t} `json:\"choices\"`\n}\n\ntype FastGptFileContent struct {\n\tType string `json:\"type\"`\n\tName string `json:\"name\"`\n\tUrl  string `json:\"url\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/openai/token.go",
    "content": "package openai\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"strings\"\n\n\t\"github.com/pkoukk/tiktoken-go\"\n\n\t\"github.com/songquanpeng/one-api/common/config\"\n\t\"github.com/songquanpeng/one-api/common/image\"\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\tbillingratio \"github.com/songquanpeng/one-api/relay/billing/ratio\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\n// tokenEncoderMap won't grow after initialization\nvar tokenEncoderMap = map[string]*tiktoken.Tiktoken{}\nvar defaultTokenEncoder *tiktoken.Tiktoken\n\nfunc InitTokenEncoders() {\n\t// logger.SysLog(\"initializing token encoders\")\n\tgpt35TokenEncoder, err := tiktoken.EncodingForModel(\"gpt-3.5-turbo\")\n\tif err != nil {\n\t\tlogger.FatalLog(fmt.Sprintf(\"failed to get gpt-3.5-turbo token encoder: %s, \"+\n\t\t\t\"if you are using in offline environment, please set TIKTOKEN_CACHE_DIR to use exsited files, check this link for more information: https://stackoverflow.com/questions/76106366/how-to-use-tiktoken-in-offline-mode-computer \", err.Error()))\n\t}\n\tdefaultTokenEncoder = gpt35TokenEncoder\n\tgpt4oTokenEncoder, err := tiktoken.EncodingForModel(\"gpt-4o\")\n\tif err != nil {\n\t\tlogger.FatalLog(fmt.Sprintf(\"failed to get gpt-4o token encoder: %s\", err.Error()))\n\t}\n\tgpt4TokenEncoder, err := tiktoken.EncodingForModel(\"gpt-4\")\n\tif err != nil {\n\t\tlogger.FatalLog(fmt.Sprintf(\"failed to get gpt-4 token encoder: %s\", err.Error()))\n\t}\n\tfor model := range billingratio.ModelRatio {\n\t\tif strings.HasPrefix(model, \"gpt-3.5\") {\n\t\t\ttokenEncoderMap[model] = gpt35TokenEncoder\n\t\t} else if strings.HasPrefix(model, \"gpt-4o\") {\n\t\t\ttokenEncoderMap[model] = gpt4oTokenEncoder\n\t\t} else if strings.HasPrefix(model, \"gpt-4\") {\n\t\t\ttokenEncoderMap[model] = gpt4TokenEncoder\n\t\t} else {\n\t\t\ttokenEncoderMap[model] = nil\n\t\t}\n\t}\n\t// logger.SysLog(\"token encoders initialized\")\n}\n\nfunc getTokenEncoder(model string) *tiktoken.Tiktoken {\n\ttokenEncoder, ok := tokenEncoderMap[model]\n\tif ok && tokenEncoder != nil {\n\t\treturn tokenEncoder\n\t}\n\tif ok {\n\t\ttokenEncoder, err := tiktoken.EncodingForModel(model)\n\t\tif err != nil {\n\t\t\tlogger.SysError(fmt.Sprintf(\"failed to get token encoder for model %s: %s, using encoder for gpt-3.5-turbo\", model, err.Error()))\n\t\t\ttokenEncoder = defaultTokenEncoder\n\t\t}\n\t\ttokenEncoderMap[model] = tokenEncoder\n\t\treturn tokenEncoder\n\t}\n\treturn defaultTokenEncoder\n}\n\nfunc getTokenNum(tokenEncoder *tiktoken.Tiktoken, text string) int {\n\tif config.ApproximateTokenEnabled {\n\t\treturn int(float64(len(text)) * 0.38)\n\t}\n\treturn len(tokenEncoder.Encode(text, nil, nil))\n}\n\nfunc CountTokenMessages(messages []model.Message, model string) int {\n\ttokenEncoder := getTokenEncoder(model)\n\t// Reference:\n\t// https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\n\t// https://github.com/pkoukk/tiktoken-go/issues/6\n\t//\n\t// Every message follows <|start|>{role/name}\\n{content}<|end|>\\n\n\tvar tokensPerMessage int\n\tvar tokensPerName int\n\tif model == \"gpt-3.5-turbo-0301\" {\n\t\ttokensPerMessage = 4\n\t\ttokensPerName = -1 // If there's a name, the role is omitted\n\t} else {\n\t\ttokensPerMessage = 3\n\t\ttokensPerName = 1\n\t}\n\ttokenNum := 0\n\tfor _, message := range messages {\n\t\ttokenNum += tokensPerMessage\n\t\tswitch v := message.Content.(type) {\n\t\tcase string:\n\t\t\ttokenNum += getTokenNum(tokenEncoder, v)\n\t\tcase []any:\n\t\t\tfor _, it := range v {\n\t\t\t\tm := it.(map[string]any)\n\t\t\t\tswitch m[\"type\"] {\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif textValue, ok := m[\"text\"]; ok {\n\t\t\t\t\t\tif textString, ok := textValue.(string); ok {\n\t\t\t\t\t\t\ttokenNum += getTokenNum(tokenEncoder, textString)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tcase \"image_url\":\n\t\t\t\t\timageUrl, ok := m[\"image_url\"].(map[string]any)\n\t\t\t\t\tif ok {\n\t\t\t\t\t\turl := imageUrl[\"url\"].(string)\n\t\t\t\t\t\tdetail := \"\"\n\t\t\t\t\t\tif imageUrl[\"detail\"] != nil {\n\t\t\t\t\t\t\tdetail = imageUrl[\"detail\"].(string)\n\t\t\t\t\t\t}\n\t\t\t\t\t\timageTokens, err := countImageTokens(url, detail, model)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\tlogger.SysError(\"error counting image tokens: \" + err.Error())\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttokenNum += imageTokens\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttokenNum += getTokenNum(tokenEncoder, message.Role)\n\t\tif message.Name != nil {\n\t\t\ttokenNum += tokensPerName\n\t\t\ttokenNum += getTokenNum(tokenEncoder, *message.Name)\n\t\t}\n\t}\n\ttokenNum += 3 // Every reply is primed with <|start|>assistant<|message|>\n\treturn tokenNum\n}\n\nconst (\n\tlowDetailCost         = 85\n\thighDetailCostPerTile = 170\n\tadditionalCost        = 85\n\t// gpt-4o-mini cost higher than other model\n\tgpt4oMiniLowDetailCost  = 2833\n\tgpt4oMiniHighDetailCost = 5667\n\tgpt4oMiniAdditionalCost = 2833\n)\n\n// https://platform.openai.com/docs/guides/vision/calculating-costs\n// https://github.com/openai/openai-cookbook/blob/05e3f9be4c7a2ae7ecf029a7c32065b024730ebe/examples/How_to_count_tokens_with_tiktoken.ipynb\nfunc countImageTokens(url string, detail string, model string) (_ int, err error) {\n\tvar fetchSize = true\n\tvar width, height int\n\t// Reference: https://platform.openai.com/docs/guides/vision/low-or-high-fidelity-image-understanding\n\t// detail == \"auto\" is undocumented on how it works, it just said the model will use the auto setting which will look at the image input size and decide if it should use the low or high setting.\n\t// According to the official guide, \"low\" disable the high-res model,\n\t// and only receive low-res 512px x 512px version of the image, indicating\n\t// that image is treated as low-res when size is smaller than 512px x 512px,\n\t// then we can assume that image size larger than 512px x 512px is treated\n\t// as high-res. Then we have the following logic:\n\t// if detail == \"\" || detail == \"auto\" {\n\t// \twidth, height, err = image.GetImageSize(url)\n\t// \tif err != nil {\n\t// \t\treturn 0, err\n\t// \t}\n\t// \tfetchSize = false\n\t// \t// not sure if this is correct\n\t// \tif width > 512 || height > 512 {\n\t// \t\tdetail = \"high\"\n\t// \t} else {\n\t// \t\tdetail = \"low\"\n\t// \t}\n\t// }\n\n\t// However, in my test, it seems to be always the same as \"high\".\n\t// The following image, which is 125x50, is still treated as high-res, taken\n\t// 255 tokens in the response of non-stream chat completion api.\n\t// https://upload.wikimedia.org/wikipedia/commons/1/10/18_Infantry_Division_Messina.jpg\n\tif detail == \"\" || detail == \"auto\" {\n\t\t// assume by test, not sure if this is correct\n\t\tdetail = \"high\"\n\t}\n\tswitch detail {\n\tcase \"low\":\n\t\tif strings.HasPrefix(model, \"gpt-4o-mini\") {\n\t\t\treturn gpt4oMiniLowDetailCost, nil\n\t\t}\n\t\treturn lowDetailCost, nil\n\tcase \"high\":\n\t\tif fetchSize {\n\t\t\twidth, height, err = image.GetImageSize(url)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t}\n\t\tif width > 2048 || height > 2048 { // max(width, height) > 2048\n\t\t\tratio := float64(2048) / math.Max(float64(width), float64(height))\n\t\t\twidth = int(float64(width) * ratio)\n\t\t\theight = int(float64(height) * ratio)\n\t\t}\n\t\tif width > 768 && height > 768 { // min(width, height) > 768\n\t\t\tratio := float64(768) / math.Min(float64(width), float64(height))\n\t\t\twidth = int(float64(width) * ratio)\n\t\t\theight = int(float64(height) * ratio)\n\t\t}\n\t\tnumSquares := int(math.Ceil(float64(width)/512) * math.Ceil(float64(height)/512))\n\t\tif strings.HasPrefix(model, \"gpt-4o-mini\") {\n\t\t\treturn numSquares*gpt4oMiniHighDetailCost + gpt4oMiniAdditionalCost, nil\n\t\t}\n\t\tresult := numSquares*highDetailCostPerTile + additionalCost\n\t\treturn result, nil\n\tdefault:\n\t\treturn 0, errors.New(\"invalid detail option\")\n\t}\n}\n\nfunc CountTokenInput(input any, model string) int {\n\tswitch v := input.(type) {\n\tcase string:\n\t\treturn CountTokenText(v, model)\n\tcase []string:\n\t\ttext := \"\"\n\t\tfor _, s := range v {\n\t\t\ttext += s\n\t\t}\n\t\treturn CountTokenText(text, model)\n\t}\n\treturn 0\n}\n\nfunc CountTokenText(text string, model string) int {\n\ttokenEncoder := getTokenEncoder(model)\n\treturn getTokenNum(tokenEncoder, text)\n}\n\nfunc CountToken(text string) int {\n\treturn CountTokenInput(text, \"gpt-3.5-turbo\")\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/openai/util.go",
    "content": "package openai\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/songquanpeng/one-api/common/logger\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\nfunc ErrorWrapper(err error, code string, statusCode int) *model.ErrorWithStatusCode {\n\tlogger.Error(context.TODO(), fmt.Sprintf(\"[%s]%+v\", code, err))\n\n\tError := model.Error{\n\t\tMessage: err.Error(),\n\t\tType:    \"api_error\",\n\t\tCode:    code,\n\t}\n\treturn &model.ErrorWithStatusCode{\n\t\tError:      Error,\n\t\tStatusCode: statusCode,\n\t}\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/tencent/adaptor.go",
    "content": "package tencent\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\ntype Adaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *Adaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\nfunc (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\t// 腾讯云API端点\n\tbaseURL := meta.BaseURL\n\tif baseURL == \"\" {\n\t\tbaseURL = \"https://wss.lke.cloud.tencent.com\"\n\t}\n\treturn baseURL + \"/v1/qbot/chat/sse\", nil\n}\n\nfunc (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\t// 设置请求头\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treturn nil\n}\n\nfunc (a *Adaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, fmt.Errorf(\"request is nil\")\n\t}\n\n\t// 转换请求格式，使用meta中的APIKey作为botAppKey\n\tconversationID := a.CustomConfig.AIHubConversationId\n\tUserId := a.CustomConfig.UserId\n\ttencentReq := ConvertRequest(*request, conversationID, UserId, a.meta.APIKey)\n\treturn tencentReq, nil\n}\n\nfunc (a *Adaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\t// 腾讯云暂不支持图像生成\n\treturn nil, fmt.Errorf(\"image generation not supported\")\n}\n\nfunc (a *Adaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\treturn custom.DoRequestHelper(a, c, meta, requestBody)\n}\n\nfunc (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\tvar responseText *string\n\tvar channelConversationId string\n\tif meta.IsStream {\n\t\terr, responseText, channelConversationId = StreamHandler(c, meta, resp)\n\t} else {\n\t\terr, responseText, channelConversationId = Handler(c, resp)\n\t}\n\tif responseText != nil {\n\t\tusage = &model.Usage{\n\t\t\tPromptTokens:     meta.PromptTokens,\n\t\t\tCompletionTokens: len(*responseText) / 4, // 简单估算\n\t\t\tTotalTokens:      meta.PromptTokens + len(*responseText)/4,\n\t\t}\n\t} else {\n\t\tusage = &model.Usage{}\n\t}\n\tif a.CustomConfig != nil {\n\t\ta.CustomConfig.ConversationId = channelConversationId\n\t}\n\treturn\n}\n\nfunc (a *Adaptor) GetModelList() []string {\n\treturn ModelList\n}\n\nfunc (a *Adaptor) GetChannelName() string {\n\treturn \"tencent\"\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/tencent/constants.go",
    "content": "package tencent\n\nvar ModelList = []string{\n\t\"tencent-bot\",\n\t\"hunyuan\",\n\t\"hunyuan-13B\",\n\t\"hunyuan-turbo\",\n\t\"hunyuan-standard-256K\",\n\t\"hunyuan-role\",\n\t\"lke-deepseek-r1\",\n\t\"lke-deepseek-v3\",\n\t\"lke-deepseek-r1-0528\",\n\t\"lke-deepseek-v3-0324\",\n}\n\nconst TencentBaseURL = \"https://wss.lke.cloud.tencent.com\"\n"
  },
  {
    "path": "api/service/hub_adaptor/tencent/helper.go",
    "content": "package tencent\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\n// ConvertRequest 将OpenAI格式请求转换为腾讯云格式\nfunc ConvertRequest(request model.GeneralOpenAIRequest, conversationID int64, UserId string, botAppKey string) *TencentRequest {\n\t// 构建内容和系统角色\n\tvar content string\n\tvar systemRole string\n\n\tfor _, message := range request.Messages {\n\t\tmessageContent := message.StringContent()\n\t\tif message.Role == \"user\" {\n\t\t\tcontent = messageContent\n\t\t} else if message.Role == \"system\" {\n\t\t\tsystemRole = messageContent\n\t\t}\n\t}\n\n\t// 生成会话ID和访客ID\n\tsessionID := fmt.Sprintf(\"%d\", conversationID)\n\tvisitorBizID := UserId\n\n\ttencentReq := &TencentRequest{\n\t\tContent:      content,\n\t\tSessionID:    sessionID,\n\t\tBotAppKey:    botAppKey,\n\t\tVisitorBizID: visitorBizID,\n\t\tSystemRole:   systemRole,\n\t\tIncremental:  true,\n\t}\n\n\t// 设置流式传输\n\tif request.Stream {\n\t\ttencentReq.Stream = \"enable\"\n\t} else {\n\t\ttencentReq.Stream = \"disable\"\n\t}\n\n\t// 设置模型名称\n\tif request.Model != \"\" {\n\t\ttencentReq.ModelName = request.Model\n\t}\n\n\tlogger.SysLogf(\"tencent request: %+v\", tencentReq)\n\treturn tencentReq\n}\n\nfunc generateUUID() string {\n\t// 简单的UUID生成（实际应用中应使用更完善的UUID库）\n\trand.Seed(time.Now().UnixNano())\n\treturn fmt.Sprintf(\"%08x-%04x-%04x-%04x-%012x\",\n\t\trand.Uint32(),\n\t\trand.Uint32()&0xffff,\n\t\trand.Uint32()&0xffff,\n\t\trand.Uint32()&0xffff,\n\t\trand.Uint64()&0xffffffffffff)\n}\n\n// ConvertResponse 将腾讯云响应转换为OpenAI格式\nfunc ConvertResponse(tencentResp *TencentResponse, modelName string) *openai.TextResponse {\n\tchoice := openai.TextResponseChoice{\n\t\tIndex: 0,\n\t\tMessage: model.Message{\n\t\t\tRole:    \"assistant\",\n\t\t\tContent: tencentResp.Payload.Content,\n\t\t},\n\t\tFinishReason: \"stop\",\n\t}\n\n\tusage := model.Usage{\n\t\tPromptTokens:     0, // 腾讯云响应中没有token统计\n\t\tCompletionTokens: 0,\n\t\tTotalTokens:      0,\n\t}\n\n\treturn &openai.TextResponse{\n\t\tId:      tencentResp.Payload.RequestID,\n\t\tObject:  \"chat.completion\",\n\t\tCreated: tencentResp.Payload.Timestamp,\n\t\tModel:   modelName,\n\t\tChoices: []openai.TextResponseChoice{choice},\n\t\tUsage:   usage,\n\t}\n}\n\n// ConvertStreamResponse 将腾讯云流式响应转换为OpenAI格式\nfunc ConvertStreamResponse(data string, modelName string, previousContent string) *openai.ChatCompletionsStreamResponse {\n\t// 先尝试解析为标准响应\n\tvar tencentResp TencentResponse\n\tif err := json.Unmarshal([]byte(data), &tencentResp); err != nil {\n\t\tlogger.SysError(\"failed to parse tencent stream data: \" + err.Error())\n\t\treturn nil\n\t}\n\n\t// 处理错误类型的响应\n\tif tencentResp.Type == \"error\" {\n\t\t// 解析错误响应结构\n\t\tvar errorResp struct {\n\t\t\tType      string `json:\"type\"`\n\t\t\tPayload   struct {\n\t\t\t\tError    struct {\n\t\t\t\t\tCode    uint32 `json:\"code\"`\n\t\t\t\t\tMessage string `json:\"message\"`\n\t\t\t\t} `json:\"error\"`\n\t\t\t\tRequestID string `json:\"request_id\"`\n\t\t\t\tTraceID   string `json:\"trace_id\"`\n\t\t\t} `json:\"payload\"`\n\t\t\tMessageID string `json:\"message_id\"`\n\t\t}\n\n\t\tif err := json.Unmarshal([]byte(data), &errorResp); err == nil {\n\t\t\t// 创建错误响应\n\t\t\tchoice := openai.ChatCompletionsStreamResponseChoice{\n\t\t\t\tIndex: 0,\n\t\t\t\tDelta: model.Message{\n\t\t\t\t\tContent: fmt.Sprintf(\"Error: %s (code: %d)\", errorResp.Payload.Error.Message, errorResp.Payload.Error.Code),\n\t\t\t\t\tRole:    \"assistant\",\n\t\t\t\t},\n\t\t\t}\n\t\t\tstopReason := \"error\"\n\t\t\tchoice.FinishReason = &stopReason\n\n\t\t\treturn &openai.ChatCompletionsStreamResponse{\n\t\t\t\tId:      errorResp.Payload.RequestID,\n\t\t\t\tObject:  \"chat.completion.chunk\",\n\t\t\t\tCreated: time.Now().Unix(),\n\t\t\t\tModel:   modelName,\n\t\t\t\tChoices: []openai.ChatCompletionsStreamResponseChoice{choice},\n\t\t\t}\n\t\t}\n\t}\n\n\t// 只处理reply类型的响应\n\tif tencentResp.Type != \"reply\" {\n\t\treturn nil\n\t}\n\n\tif tencentResp.Payload.IsFromSelf {\n\t\t// 不需要再重复一次自己的内容\n\t\treturn nil\n\t}\n\n\t// 计算增量内容\n\tcurrentContent := tencentResp.Payload.Content\n\tvar deltaContent string\n\n\tif len(currentContent) > len(previousContent) && strings.HasPrefix(currentContent, previousContent) {\n\t\t// 计算增量部分\n\t\tdeltaContent = currentContent[len(previousContent):]\n\t} else {\n\t\t// 如果无法计算增量，返回完整内容（第一次或内容重置）\n\t\tdeltaContent = currentContent\n\t}\n\tchoice := openai.ChatCompletionsStreamResponseChoice{\n\t\tIndex: 0,\n\t\tDelta: model.Message{\n\t\t\tContent: deltaContent,\n\t\t\tRole:    \"assistant\",\n\t\t},\n\t}\n\n\t// 判断是否结束\n\temptyStr := \"\"\n\tvar finishReason *string\n\tfinishReason = &emptyStr\n\tif tencentResp.Payload.IsFinal {\n\t\tstopReason := \"stop\"\n\t\tfinishReason = &stopReason\n\t}\n\tchoice.FinishReason = finishReason\n\n\t// 使用session_id作为响应ID\n\tresponseID := tencentResp.Payload.SessionID\n\tif responseID == \"\" {\n\t\tresponseID = tencentResp.Payload.RequestID\n\t}\n\n\treturn &openai.ChatCompletionsStreamResponse{\n\t\tId:      responseID,\n\t\tObject:  \"chat.completion.chunk\",\n\t\tCreated: tencentResp.Payload.Timestamp,\n\t\tModel:   modelName,\n\t\tChoices: []openai.ChatCompletionsStreamResponseChoice{choice},\n\t}\n}\n\n// IsStreamEnd 判断是否为流式响应结束\nfunc IsStreamEnd(event string) bool {\n\treturn strings.Contains(event, \"finish\") || strings.Contains(event, \"done\") || strings.Contains(event, \"end\")\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/tencent/main.go",
    "content": "package tencent\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\n// Handler 处理非流式响应\nfunc Handler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusCode, *string, string) {\n\tvar tencentResp TencentResponse\n\tif err := json.NewDecoder(resp.Body).Decode(&tencentResp); err != nil {\n\t\treturn openai.ErrorWrapper(fmt.Errorf(\"failed to decode response: %w\"), \"bad_response_format\", http.StatusInternalServerError), nil, \"\"\n\t}\n\n\t// 检查错误\n\tif tencentResp.Type == \"error\" {\n\t\treturn openai.ErrorWrapper(fmt.Errorf(\"tencent api error: %s\", tencentResp.Payload.Content), \"tencent_api_error\", http.StatusBadRequest), nil, \"\"\n\t}\n\n\t// 转换响应\n\topenaiResp := ConvertResponse(&tencentResp, \"tencent-bot\")\n\n\t// 返回响应\n\tc.JSON(http.StatusOK, openaiResp)\n\tresponseText := tencentResp.Payload.Content\n\treturn nil, &responseText, tencentResp.Payload.SessionID\n}\n\n// StreamHandler 处理流式响应\nfunc StreamHandler(c *gin.Context, meta *meta.Meta, resp *http.Response) (*model.ErrorWithStatusCode, *string, string) {\n\tvar responseText string\n\tvar previousContent string // 用于计算增量内容\n\tscanner := bufio.NewScanner(resp.Body)\n\t// 设置更大的缓冲区以处理大型响应 (1MB)\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\tscanner.Split(bufio.ScanLines)\n\tcommon.SetEventStreamHeaders(c)\n\n\tvar sessionID string\n\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\t\t// logger.SysLogf(\"%s\", line)\n\t\t// 跳过空行\n\t\tif line == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// 解析SSE格式 - 处理data行\n\t\tif strings.HasPrefix(line, \"data:\") {\n\t\t\tdata := strings.TrimPrefix(line, \"data:\")\n\n\t\t\t// 跳过心跳包\n\t\t\tif data == \"\" || data == \"ping\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// 检查结束标志\n\t\t\tif data == \"[DONE]\" {\n\t\t\t\tc.SSEvent(\"message\", \" [DONE]\")\n\t\t\t\tc.Writer.Flush()\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// 转换响应（ConvertStreamResponse现在会处理错误和reply类型）\n\t\t\topenaiResp := ConvertStreamResponse(data, meta.ActualModelName, previousContent)\n\t\t\tif openaiResp != nil {\n\t\t\t\t// 记录会话ID\n\t\t\t\tif sessionID == \"\" {\n\t\t\t\t\tsessionID = openaiResp.Id\n\t\t\t\t}\n\n\t\t\t\t// 累积响应文本\n\t\t\t\tif len(openaiResp.Choices) > 0 {\n\t\t\t\t\tif content, ok := openaiResp.Choices[0].Delta.Content.(string); ok {\n\t\t\t\t\t\tresponseText += content\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trespData, err := json.Marshal(openaiResp)\n\t\t\t\tif err != nil {\n\t\t\t\t\tlogger.SysError(\"failed to marshal stream response: \" + err.Error())\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tc.SSEvent(\"message\", \" \"+string(respData))\n\t\t\t\tc.Writer.Flush()\n\n\t\t\t\t// 检查是否为错误响应，如果是则发送[DONE]并停止处理\n\t\t\t\tif len(openaiResp.Choices) > 0 && openaiResp.Choices[0].FinishReason != nil && *openaiResp.Choices[0].FinishReason == \"error\" {\n\t\t\t\t\tc.SSEvent(\"message\", \" [DONE]\")\n\t\t\t\t\tc.Writer.Flush()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t// 更新previousContent用于下次计算增量（仅在reply类型时）\n\t\t\t\tvar tencentResp TencentResponse\n\t\t\t\tif err := json.Unmarshal([]byte(data), &tencentResp); err == nil && tencentResp.Type == \"reply\" {\n\t\t\t\t\tpreviousContent = tencentResp.Payload.Content\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn openai.ErrorWrapper(fmt.Errorf(\"failed to read stream: %w\"), \"stream_error\", http.StatusInternalServerError), nil, \"\"\n\t}\n\n\treturn nil, &responseText, sessionID\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/tencent/model.go",
    "content": "package tencent\n\n// TencentRequest 腾讯云请求结构体\ntype TencentRequest struct {\n\tRequestID         string            `json:\"request_id,omitempty\"`\n\tContent           string            `json:\"content\"`\n\tSessionID         string            `json:\"session_id\"`\n\tBotAppKey         string            `json:\"bot_app_key\"`\n\tVisitorBizID      string            `json:\"visitor_biz_id\"`\n\tStreamingThrottle int32             `json:\"streaming_throttle,omitempty\"`\n\tCustomVariables   map[string]string `json:\"custom_variables,omitempty\"`\n\tSystemRole        string            `json:\"system_role,omitempty\"`\n\tIncremental       bool              `json:\"incremental,omitempty\"`\n\tSearchNetwork     string            `json:\"search_network,omitempty\"`\n\tModelName         string            `json:\"model_name,omitempty\"`\n\tStream            string            `json:\"stream,omitempty\"`\n\tWorkflowStatus    string            `json:\"workflow_status,omitempty\"`\n\tVisitorLabels     []VisitorLabel    `json:\"visitor_labels,omitempty\"`\n\tFileInfos         []FileInfo        `json:\"file_infos,omitempty\"`\n\tTcadpUserID       string            `json:\"tcadp_user_id,omitempty\"`\n}\n\ntype VisitorLabel struct {\n\tName   string   `json:\"name\"`\n\tValues []string `json:\"values\"`\n}\n\ntype FileInfo struct {\n\tFileName string `json:\"file_name\"`\n\tFileSize string `json:\"file_size\"`\n\tFileURL  string `json:\"file_url\"`\n\tFileType string `json:\"file_type\"`\n\tDocID    string `json:\"doc_id\"`\n}\n\n// TencentResponse 腾讯云响应结构体\ntype TencentResponse struct {\n\tType    string                 `json:\"type\"`\n\tPayload TencentResponsePayload `json:\"payload\"`\n}\n\n// TencentResponsePayload 腾讯云响应载荷\ntype TencentResponsePayload struct {\n\tRequestID       string             `json:\"request_id\"`\n\tContent         string             `json:\"content\"`\n\tRecordID        string             `json:\"record_id\"`\n\tRelatedRecordID string             `json:\"related_record_id\"`\n\tSessionID       string             `json:\"session_id\"`\n\tIsFromSelf      bool               `json:\"is_from_self\"`\n\tCanRating       bool               `json:\"can_rating\"`\n\tTimestamp       int64              `json:\"timestamp\"`\n\tIsFinal         bool               `json:\"is_final\"`\n\tIsEvil          bool               `json:\"is_evil\"`\n\tIsLLMGenerated  bool               `json:\"is_llm_generated\"`\n\tReplyMethod     uint8              `json:\"reply_method\"`\n\tKnowledge       []TencentKnowledge `json:\"knowledge\"`\n\tOptionCards     []string           `json:\"option_cards\"`\n\tCustomParams    []string           `json:\"custom_params\"`\n\tTaskFlow        interface{}        `json:\"task_flow\"`\n\tWorkFlow        interface{}        `json:\"work_flow\"`\n\tQuoteInfos      []TencentQuoteInfo `json:\"quote_infos\"`\n}\n\n// TencentKnowledge 知识结构\ntype TencentKnowledge struct {\n\tID    string `json:\"id\"`\n\tType  uint32 `json:\"type\"`\n\tSegID string `json:\"seg_id\"`\n}\n\n// TencentQuoteInfo 引用信息\ntype TencentQuoteInfo struct {\n\tIndex    int `json:\"index\"`\n\tPosition int `json:\"position\"`\n}\n\n// TencentStreamResponse 腾讯云流式响应\ntype TencentStreamResponse struct {\n\tEvent string `json:\"event\"` // 事件类型\n\tData  string `json:\"data\"`  // 数据内容\n}\n\n// TencentErrorResponse 腾讯云错误响应\ntype TencentErrorResponse struct {\n\tType  string           `json:\"type\"`\n\tError TencentErrorInfo `json:\"error\"`\n}\n\ntype TencentErrorInfo struct {\n\tCode    uint32 `json:\"code\"`\n\tMessage string `json:\"message\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/tencent/sdk/client.go",
    "content": "// Copyright (c) 2017-2025 Tencent. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//    http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage tencent_sdk\n\nimport (\n\t\"context\"\n\t\"errors\"\n\n\t\"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common\"\n\ttchttp \"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http\"\n\t\"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile\"\n)\n\nconst APIVersion = \"2023-11-30\"\n\ntype Client struct {\n\tcommon.Client\n}\n\n// Deprecated\nfunc NewClientWithSecretId(secretId, secretKey, region string) (client *Client, err error) {\n\tcpf := profile.NewClientProfile()\n\tclient = &Client{}\n\tclient.Init(region).WithSecretId(secretId, secretKey).WithProfile(cpf)\n\treturn\n}\n\nfunc NewClient(credential common.CredentialIface, region string, clientProfile *profile.ClientProfile) (client *Client, err error) {\n\tclient = &Client{}\n\tclient.Init(region).\n\t\tWithCredential(credential).\n\t\tWithProfile(clientProfile)\n\treturn\n}\n\nfunc NewCheckAttributeLabelExistRequest() (request *CheckAttributeLabelExistRequest) {\n\trequest = &CheckAttributeLabelExistRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CheckAttributeLabelExist\")\n\n\treturn\n}\n\nfunc NewCheckAttributeLabelExistResponse() (response *CheckAttributeLabelExistResponse) {\n\tresponse = &CheckAttributeLabelExistResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CheckAttributeLabelExist\n// 检查属性下的标签名是否存在\nfunc (c *Client) CheckAttributeLabelExist(request *CheckAttributeLabelExistRequest) (response *CheckAttributeLabelExistResponse, err error) {\n\treturn c.CheckAttributeLabelExistWithContext(context.Background(), request)\n}\n\n// CheckAttributeLabelExist\n// 检查属性下的标签名是否存在\nfunc (c *Client) CheckAttributeLabelExistWithContext(ctx context.Context, request *CheckAttributeLabelExistRequest) (response *CheckAttributeLabelExistResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCheckAttributeLabelExistRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CheckAttributeLabelExist\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CheckAttributeLabelExist require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCheckAttributeLabelExistResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCheckAttributeLabelReferRequest() (request *CheckAttributeLabelReferRequest) {\n\trequest = &CheckAttributeLabelReferRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CheckAttributeLabelRefer\")\n\n\treturn\n}\n\nfunc NewCheckAttributeLabelReferResponse() (response *CheckAttributeLabelReferResponse) {\n\tresponse = &CheckAttributeLabelReferResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CheckAttributeLabelRefer\n// 检查属性标签引用\nfunc (c *Client) CheckAttributeLabelRefer(request *CheckAttributeLabelReferRequest) (response *CheckAttributeLabelReferResponse, err error) {\n\treturn c.CheckAttributeLabelReferWithContext(context.Background(), request)\n}\n\n// CheckAttributeLabelRefer\n// 检查属性标签引用\nfunc (c *Client) CheckAttributeLabelReferWithContext(ctx context.Context, request *CheckAttributeLabelReferRequest) (response *CheckAttributeLabelReferResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCheckAttributeLabelReferRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CheckAttributeLabelRefer\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CheckAttributeLabelRefer require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCheckAttributeLabelReferResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCreateAppRequest() (request *CreateAppRequest) {\n\trequest = &CreateAppRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CreateApp\")\n\n\treturn\n}\n\nfunc NewCreateAppResponse() (response *CreateAppResponse) {\n\tresponse = &CreateAppResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CreateApp\n// 创建知识引擎应用。\nfunc (c *Client) CreateApp(request *CreateAppRequest) (response *CreateAppResponse, err error) {\n\treturn c.CreateAppWithContext(context.Background(), request)\n}\n\n// CreateApp\n// 创建知识引擎应用。\nfunc (c *Client) CreateAppWithContext(ctx context.Context, request *CreateAppRequest) (response *CreateAppResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCreateAppRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CreateApp\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CreateApp require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCreateAppResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCreateAttributeLabelRequest() (request *CreateAttributeLabelRequest) {\n\trequest = &CreateAttributeLabelRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CreateAttributeLabel\")\n\n\treturn\n}\n\nfunc NewCreateAttributeLabelResponse() (response *CreateAttributeLabelResponse) {\n\tresponse = &CreateAttributeLabelResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CreateAttributeLabel\n// 创建标签\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateAttributeLabel(request *CreateAttributeLabelRequest) (response *CreateAttributeLabelResponse, err error) {\n\treturn c.CreateAttributeLabelWithContext(context.Background(), request)\n}\n\n// CreateAttributeLabel\n// 创建标签\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateAttributeLabelWithContext(ctx context.Context, request *CreateAttributeLabelRequest) (response *CreateAttributeLabelResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCreateAttributeLabelRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CreateAttributeLabel\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CreateAttributeLabel require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCreateAttributeLabelResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCreateDocCateRequest() (request *CreateDocCateRequest) {\n\trequest = &CreateDocCateRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CreateDocCate\")\n\n\treturn\n}\n\nfunc NewCreateDocCateResponse() (response *CreateDocCateResponse) {\n\tresponse = &CreateDocCateResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CreateDocCate\n// 创建Doc分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateDocCate(request *CreateDocCateRequest) (response *CreateDocCateResponse, err error) {\n\treturn c.CreateDocCateWithContext(context.Background(), request)\n}\n\n// CreateDocCate\n// 创建Doc分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateDocCateWithContext(ctx context.Context, request *CreateDocCateRequest) (response *CreateDocCateResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCreateDocCateRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CreateDocCate\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CreateDocCate require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCreateDocCateResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCreateQARequest() (request *CreateQARequest) {\n\trequest = &CreateQARequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CreateQA\")\n\n\treturn\n}\n\nfunc NewCreateQAResponse() (response *CreateQAResponse) {\n\tresponse = &CreateQAResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CreateQA\n// 录入问答\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateQA(request *CreateQARequest) (response *CreateQAResponse, err error) {\n\treturn c.CreateQAWithContext(context.Background(), request)\n}\n\n// CreateQA\n// 录入问答\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateQAWithContext(ctx context.Context, request *CreateQARequest) (response *CreateQAResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCreateQARequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CreateQA\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CreateQA require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCreateQAResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCreateQACateRequest() (request *CreateQACateRequest) {\n\trequest = &CreateQACateRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CreateQACate\")\n\n\treturn\n}\n\nfunc NewCreateQACateResponse() (response *CreateQACateResponse) {\n\tresponse = &CreateQACateResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CreateQACate\n// 创建QA分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateQACate(request *CreateQACateRequest) (response *CreateQACateResponse, err error) {\n\treturn c.CreateQACateWithContext(context.Background(), request)\n}\n\n// CreateQACate\n// 创建QA分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateQACateWithContext(ctx context.Context, request *CreateQACateRequest) (response *CreateQACateResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCreateQACateRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CreateQACate\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CreateQACate require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCreateQACateResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCreateRejectedQuestionRequest() (request *CreateRejectedQuestionRequest) {\n\trequest = &CreateRejectedQuestionRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CreateRejectedQuestion\")\n\n\treturn\n}\n\nfunc NewCreateRejectedQuestionResponse() (response *CreateRejectedQuestionResponse) {\n\tresponse = &CreateRejectedQuestionResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CreateRejectedQuestion\n// 创建拒答问题\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateRejectedQuestion(request *CreateRejectedQuestionRequest) (response *CreateRejectedQuestionResponse, err error) {\n\treturn c.CreateRejectedQuestionWithContext(context.Background(), request)\n}\n\n// CreateRejectedQuestion\n// 创建拒答问题\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateRejectedQuestionWithContext(ctx context.Context, request *CreateRejectedQuestionRequest) (response *CreateRejectedQuestionResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCreateRejectedQuestionRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CreateRejectedQuestion\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CreateRejectedQuestion require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCreateRejectedQuestionResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCreateReleaseRequest() (request *CreateReleaseRequest) {\n\trequest = &CreateReleaseRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CreateRelease\")\n\n\treturn\n}\n\nfunc NewCreateReleaseResponse() (response *CreateReleaseResponse) {\n\tresponse = &CreateReleaseResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CreateRelease\n// 创建发布\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateRelease(request *CreateReleaseRequest) (response *CreateReleaseResponse, err error) {\n\treturn c.CreateReleaseWithContext(context.Background(), request)\n}\n\n// CreateRelease\n// 创建发布\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateReleaseWithContext(ctx context.Context, request *CreateReleaseRequest) (response *CreateReleaseResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCreateReleaseRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CreateRelease\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CreateRelease require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCreateReleaseResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCreateSharedKnowledgeRequest() (request *CreateSharedKnowledgeRequest) {\n\trequest = &CreateSharedKnowledgeRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CreateSharedKnowledge\")\n\n\treturn\n}\n\nfunc NewCreateSharedKnowledgeResponse() (response *CreateSharedKnowledgeResponse) {\n\tresponse = &CreateSharedKnowledgeResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CreateSharedKnowledge\n// 创建共享知识库。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateSharedKnowledge(request *CreateSharedKnowledgeRequest) (response *CreateSharedKnowledgeResponse, err error) {\n\treturn c.CreateSharedKnowledgeWithContext(context.Background(), request)\n}\n\n// CreateSharedKnowledge\n// 创建共享知识库。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) CreateSharedKnowledgeWithContext(ctx context.Context, request *CreateSharedKnowledgeRequest) (response *CreateSharedKnowledgeResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCreateSharedKnowledgeRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CreateSharedKnowledge\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CreateSharedKnowledge require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCreateSharedKnowledgeResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCreateVarRequest() (request *CreateVarRequest) {\n\trequest = &CreateVarRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CreateVar\")\n\n\treturn\n}\n\nfunc NewCreateVarResponse() (response *CreateVarResponse) {\n\tresponse = &CreateVarResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CreateVar\n// 创建变量\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) CreateVar(request *CreateVarRequest) (response *CreateVarResponse, err error) {\n\treturn c.CreateVarWithContext(context.Background(), request)\n}\n\n// CreateVar\n// 创建变量\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) CreateVarWithContext(ctx context.Context, request *CreateVarRequest) (response *CreateVarResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCreateVarRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CreateVar\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CreateVar require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCreateVarResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewCreateWorkflowRunRequest() (request *CreateWorkflowRunRequest) {\n\trequest = &CreateWorkflowRunRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"CreateWorkflowRun\")\n\n\treturn\n}\n\nfunc NewCreateWorkflowRunResponse() (response *CreateWorkflowRunResponse) {\n\tresponse = &CreateWorkflowRunResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// CreateWorkflowRun\n// 本接口用来创建工作流的异步运行实例，创建成功后工作流会在后台异步运行，接口返回工作流运行实例ID（WorkflowRunId）等信息。后面可通过调用DescribeWorkflowRun接口查工作流运行的详情。\n//\n// 注意：工作流的异步运行是基于应用的，需要先把对应的应用配置成“单工作流模式”，并且打开“异步调用”的开关，才能创建成功。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) CreateWorkflowRun(request *CreateWorkflowRunRequest) (response *CreateWorkflowRunResponse, err error) {\n\treturn c.CreateWorkflowRunWithContext(context.Background(), request)\n}\n\n// CreateWorkflowRun\n// 本接口用来创建工作流的异步运行实例，创建成功后工作流会在后台异步运行，接口返回工作流运行实例ID（WorkflowRunId）等信息。后面可通过调用DescribeWorkflowRun接口查工作流运行的详情。\n//\n// 注意：工作流的异步运行是基于应用的，需要先把对应的应用配置成“单工作流模式”，并且打开“异步调用”的开关，才能创建成功。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) CreateWorkflowRunWithContext(ctx context.Context, request *CreateWorkflowRunRequest) (response *CreateWorkflowRunResponse, err error) {\n\tif request == nil {\n\t\trequest = NewCreateWorkflowRunRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"CreateWorkflowRun\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"CreateWorkflowRun require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewCreateWorkflowRunResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDeleteAgentRequest() (request *DeleteAgentRequest) {\n\trequest = &DeleteAgentRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DeleteAgent\")\n\n\treturn\n}\n\nfunc NewDeleteAgentResponse() (response *DeleteAgentResponse) {\n\tresponse = &DeleteAgentResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DeleteAgent\n// 删除Agent\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteAgent(request *DeleteAgentRequest) (response *DeleteAgentResponse, err error) {\n\treturn c.DeleteAgentWithContext(context.Background(), request)\n}\n\n// DeleteAgent\n// 删除Agent\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteAgentWithContext(ctx context.Context, request *DeleteAgentRequest) (response *DeleteAgentResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDeleteAgentRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DeleteAgent\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DeleteAgent require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDeleteAgentResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDeleteAppRequest() (request *DeleteAppRequest) {\n\trequest = &DeleteAppRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DeleteApp\")\n\n\treturn\n}\n\nfunc NewDeleteAppResponse() (response *DeleteAppResponse) {\n\tresponse = &DeleteAppResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DeleteApp\n// 删除应用\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteApp(request *DeleteAppRequest) (response *DeleteAppResponse, err error) {\n\treturn c.DeleteAppWithContext(context.Background(), request)\n}\n\n// DeleteApp\n// 删除应用\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteAppWithContext(ctx context.Context, request *DeleteAppRequest) (response *DeleteAppResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDeleteAppRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DeleteApp\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DeleteApp require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDeleteAppResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDeleteAttributeLabelRequest() (request *DeleteAttributeLabelRequest) {\n\trequest = &DeleteAttributeLabelRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DeleteAttributeLabel\")\n\n\treturn\n}\n\nfunc NewDeleteAttributeLabelResponse() (response *DeleteAttributeLabelResponse) {\n\tresponse = &DeleteAttributeLabelResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DeleteAttributeLabel\n// 删除属性标签\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteAttributeLabel(request *DeleteAttributeLabelRequest) (response *DeleteAttributeLabelResponse, err error) {\n\treturn c.DeleteAttributeLabelWithContext(context.Background(), request)\n}\n\n// DeleteAttributeLabel\n// 删除属性标签\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteAttributeLabelWithContext(ctx context.Context, request *DeleteAttributeLabelRequest) (response *DeleteAttributeLabelResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDeleteAttributeLabelRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DeleteAttributeLabel\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DeleteAttributeLabel require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDeleteAttributeLabelResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDeleteDocRequest() (request *DeleteDocRequest) {\n\trequest = &DeleteDocRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DeleteDoc\")\n\n\treturn\n}\n\nfunc NewDeleteDocResponse() (response *DeleteDocResponse) {\n\tresponse = &DeleteDocResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DeleteDoc\n// 删除文档\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteDoc(request *DeleteDocRequest) (response *DeleteDocResponse, err error) {\n\treturn c.DeleteDocWithContext(context.Background(), request)\n}\n\n// DeleteDoc\n// 删除文档\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteDocWithContext(ctx context.Context, request *DeleteDocRequest) (response *DeleteDocResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDeleteDocRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DeleteDoc\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DeleteDoc require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDeleteDocResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDeleteDocCateRequest() (request *DeleteDocCateRequest) {\n\trequest = &DeleteDocCateRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DeleteDocCate\")\n\n\treturn\n}\n\nfunc NewDeleteDocCateResponse() (response *DeleteDocCateResponse) {\n\tresponse = &DeleteDocCateResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DeleteDocCate\n// Doc分类删除\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteDocCate(request *DeleteDocCateRequest) (response *DeleteDocCateResponse, err error) {\n\treturn c.DeleteDocCateWithContext(context.Background(), request)\n}\n\n// DeleteDocCate\n// Doc分类删除\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteDocCateWithContext(ctx context.Context, request *DeleteDocCateRequest) (response *DeleteDocCateResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDeleteDocCateRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DeleteDocCate\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DeleteDocCate require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDeleteDocCateResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDeleteQARequest() (request *DeleteQARequest) {\n\trequest = &DeleteQARequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DeleteQA\")\n\n\treturn\n}\n\nfunc NewDeleteQAResponse() (response *DeleteQAResponse) {\n\tresponse = &DeleteQAResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DeleteQA\n// 删除问答\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteQA(request *DeleteQARequest) (response *DeleteQAResponse, err error) {\n\treturn c.DeleteQAWithContext(context.Background(), request)\n}\n\n// DeleteQA\n// 删除问答\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteQAWithContext(ctx context.Context, request *DeleteQARequest) (response *DeleteQAResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDeleteQARequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DeleteQA\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DeleteQA require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDeleteQAResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDeleteQACateRequest() (request *DeleteQACateRequest) {\n\trequest = &DeleteQACateRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DeleteQACate\")\n\n\treturn\n}\n\nfunc NewDeleteQACateResponse() (response *DeleteQACateResponse) {\n\tresponse = &DeleteQACateResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DeleteQACate\n// 分类删除\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteQACate(request *DeleteQACateRequest) (response *DeleteQACateResponse, err error) {\n\treturn c.DeleteQACateWithContext(context.Background(), request)\n}\n\n// DeleteQACate\n// 分类删除\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteQACateWithContext(ctx context.Context, request *DeleteQACateRequest) (response *DeleteQACateResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDeleteQACateRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DeleteQACate\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DeleteQACate require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDeleteQACateResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDeleteRejectedQuestionRequest() (request *DeleteRejectedQuestionRequest) {\n\trequest = &DeleteRejectedQuestionRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DeleteRejectedQuestion\")\n\n\treturn\n}\n\nfunc NewDeleteRejectedQuestionResponse() (response *DeleteRejectedQuestionResponse) {\n\tresponse = &DeleteRejectedQuestionResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DeleteRejectedQuestion\n// 删除拒答问题\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteRejectedQuestion(request *DeleteRejectedQuestionRequest) (response *DeleteRejectedQuestionResponse, err error) {\n\treturn c.DeleteRejectedQuestionWithContext(context.Background(), request)\n}\n\n// DeleteRejectedQuestion\n// 删除拒答问题\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteRejectedQuestionWithContext(ctx context.Context, request *DeleteRejectedQuestionRequest) (response *DeleteRejectedQuestionResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDeleteRejectedQuestionRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DeleteRejectedQuestion\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DeleteRejectedQuestion require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDeleteRejectedQuestionResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDeleteSharedKnowledgeRequest() (request *DeleteSharedKnowledgeRequest) {\n\trequest = &DeleteSharedKnowledgeRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DeleteSharedKnowledge\")\n\n\treturn\n}\n\nfunc NewDeleteSharedKnowledgeResponse() (response *DeleteSharedKnowledgeResponse) {\n\tresponse = &DeleteSharedKnowledgeResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DeleteSharedKnowledge\n// 删除共享知识库。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteSharedKnowledge(request *DeleteSharedKnowledgeRequest) (response *DeleteSharedKnowledgeResponse, err error) {\n\treturn c.DeleteSharedKnowledgeWithContext(context.Background(), request)\n}\n\n// DeleteSharedKnowledge\n// 删除共享知识库。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteSharedKnowledgeWithContext(ctx context.Context, request *DeleteSharedKnowledgeRequest) (response *DeleteSharedKnowledgeResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDeleteSharedKnowledgeRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DeleteSharedKnowledge\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DeleteSharedKnowledge require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDeleteSharedKnowledgeResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDeleteVarRequest() (request *DeleteVarRequest) {\n\trequest = &DeleteVarRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DeleteVar\")\n\n\treturn\n}\n\nfunc NewDeleteVarResponse() (response *DeleteVarResponse) {\n\tresponse = &DeleteVarResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DeleteVar\n// 删除变量\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteVar(request *DeleteVarRequest) (response *DeleteVarResponse, err error) {\n\treturn c.DeleteVarWithContext(context.Background(), request)\n}\n\n// DeleteVar\n// 删除变量\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DeleteVarWithContext(ctx context.Context, request *DeleteVarRequest) (response *DeleteVarResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDeleteVarRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DeleteVar\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DeleteVar require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDeleteVarResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeAppRequest() (request *DescribeAppRequest) {\n\trequest = &DescribeAppRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeApp\")\n\n\treturn\n}\n\nfunc NewDescribeAppResponse() (response *DescribeAppResponse) {\n\tresponse = &DescribeAppResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeApp\n// 获取企业下应用详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeApp(request *DescribeAppRequest) (response *DescribeAppResponse, err error) {\n\treturn c.DescribeAppWithContext(context.Background(), request)\n}\n\n// DescribeApp\n// 获取企业下应用详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeAppWithContext(ctx context.Context, request *DescribeAppRequest) (response *DescribeAppResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeAppRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeApp\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeApp require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeAppResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeAppAgentListRequest() (request *DescribeAppAgentListRequest) {\n\trequest = &DescribeAppAgentListRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeAppAgentList\")\n\n\treturn\n}\n\nfunc NewDescribeAppAgentListResponse() (response *DescribeAppAgentListResponse) {\n\tresponse = &DescribeAppAgentListResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeAppAgentList\n// 查询指定应用下的Agent列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeAppAgentList(request *DescribeAppAgentListRequest) (response *DescribeAppAgentListResponse, err error) {\n\treturn c.DescribeAppAgentListWithContext(context.Background(), request)\n}\n\n// DescribeAppAgentList\n// 查询指定应用下的Agent列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeAppAgentListWithContext(ctx context.Context, request *DescribeAppAgentListRequest) (response *DescribeAppAgentListResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeAppAgentListRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeAppAgentList\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeAppAgentList require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeAppAgentListResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeAttributeLabelRequest() (request *DescribeAttributeLabelRequest) {\n\trequest = &DescribeAttributeLabelRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeAttributeLabel\")\n\n\treturn\n}\n\nfunc NewDescribeAttributeLabelResponse() (response *DescribeAttributeLabelResponse) {\n\tresponse = &DescribeAttributeLabelResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeAttributeLabel\n// 查询属性标签详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeAttributeLabel(request *DescribeAttributeLabelRequest) (response *DescribeAttributeLabelResponse, err error) {\n\treturn c.DescribeAttributeLabelWithContext(context.Background(), request)\n}\n\n// DescribeAttributeLabel\n// 查询属性标签详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeAttributeLabelWithContext(ctx context.Context, request *DescribeAttributeLabelRequest) (response *DescribeAttributeLabelResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeAttributeLabelRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeAttributeLabel\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeAttributeLabel require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeAttributeLabelResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeCallStatsGraphRequest() (request *DescribeCallStatsGraphRequest) {\n\trequest = &DescribeCallStatsGraphRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeCallStatsGraph\")\n\n\treturn\n}\n\nfunc NewDescribeCallStatsGraphResponse() (response *DescribeCallStatsGraphResponse) {\n\tresponse = &DescribeCallStatsGraphResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeCallStatsGraph\n// 接口调用折线图\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeCallStatsGraph(request *DescribeCallStatsGraphRequest) (response *DescribeCallStatsGraphResponse, err error) {\n\treturn c.DescribeCallStatsGraphWithContext(context.Background(), request)\n}\n\n// DescribeCallStatsGraph\n// 接口调用折线图\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeCallStatsGraphWithContext(ctx context.Context, request *DescribeCallStatsGraphRequest) (response *DescribeCallStatsGraphResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeCallStatsGraphRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeCallStatsGraph\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeCallStatsGraph require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeCallStatsGraphResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeConcurrencyUsageRequest() (request *DescribeConcurrencyUsageRequest) {\n\trequest = &DescribeConcurrencyUsageRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeConcurrencyUsage\")\n\n\treturn\n}\n\nfunc NewDescribeConcurrencyUsageResponse() (response *DescribeConcurrencyUsageResponse) {\n\tresponse = &DescribeConcurrencyUsageResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeConcurrencyUsage\n// 并发调用响应\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeConcurrencyUsage(request *DescribeConcurrencyUsageRequest) (response *DescribeConcurrencyUsageResponse, err error) {\n\treturn c.DescribeConcurrencyUsageWithContext(context.Background(), request)\n}\n\n// DescribeConcurrencyUsage\n// 并发调用响应\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeConcurrencyUsageWithContext(ctx context.Context, request *DescribeConcurrencyUsageRequest) (response *DescribeConcurrencyUsageResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeConcurrencyUsageRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeConcurrencyUsage\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeConcurrencyUsage require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeConcurrencyUsageResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeConcurrencyUsageGraphRequest() (request *DescribeConcurrencyUsageGraphRequest) {\n\trequest = &DescribeConcurrencyUsageGraphRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeConcurrencyUsageGraph\")\n\n\treturn\n}\n\nfunc NewDescribeConcurrencyUsageGraphResponse() (response *DescribeConcurrencyUsageGraphResponse) {\n\tresponse = &DescribeConcurrencyUsageGraphResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeConcurrencyUsageGraph\n// 并发调用折线图\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeConcurrencyUsageGraph(request *DescribeConcurrencyUsageGraphRequest) (response *DescribeConcurrencyUsageGraphResponse, err error) {\n\treturn c.DescribeConcurrencyUsageGraphWithContext(context.Background(), request)\n}\n\n// DescribeConcurrencyUsageGraph\n// 并发调用折线图\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeConcurrencyUsageGraphWithContext(ctx context.Context, request *DescribeConcurrencyUsageGraphRequest) (response *DescribeConcurrencyUsageGraphResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeConcurrencyUsageGraphRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeConcurrencyUsageGraph\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeConcurrencyUsageGraph require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeConcurrencyUsageGraphResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeDocRequest() (request *DescribeDocRequest) {\n\trequest = &DescribeDocRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeDoc\")\n\n\treturn\n}\n\nfunc NewDescribeDocResponse() (response *DescribeDocResponse) {\n\tresponse = &DescribeDocResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeDoc\n// 文档详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeDoc(request *DescribeDocRequest) (response *DescribeDocResponse, err error) {\n\treturn c.DescribeDocWithContext(context.Background(), request)\n}\n\n// DescribeDoc\n// 文档详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeDocWithContext(ctx context.Context, request *DescribeDocRequest) (response *DescribeDocResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeDocRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeDoc\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeDoc require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeDocResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeKnowledgeUsageRequest() (request *DescribeKnowledgeUsageRequest) {\n\trequest = &DescribeKnowledgeUsageRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeKnowledgeUsage\")\n\n\treturn\n}\n\nfunc NewDescribeKnowledgeUsageResponse() (response *DescribeKnowledgeUsageResponse) {\n\tresponse = &DescribeKnowledgeUsageResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeKnowledgeUsage\n// 查询知识库用量\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeKnowledgeUsage(request *DescribeKnowledgeUsageRequest) (response *DescribeKnowledgeUsageResponse, err error) {\n\treturn c.DescribeKnowledgeUsageWithContext(context.Background(), request)\n}\n\n// DescribeKnowledgeUsage\n// 查询知识库用量\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeKnowledgeUsageWithContext(ctx context.Context, request *DescribeKnowledgeUsageRequest) (response *DescribeKnowledgeUsageResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeKnowledgeUsageRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeKnowledgeUsage\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeKnowledgeUsage require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeKnowledgeUsageResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeKnowledgeUsagePieGraphRequest() (request *DescribeKnowledgeUsagePieGraphRequest) {\n\trequest = &DescribeKnowledgeUsagePieGraphRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeKnowledgeUsagePieGraph\")\n\n\treturn\n}\n\nfunc NewDescribeKnowledgeUsagePieGraphResponse() (response *DescribeKnowledgeUsagePieGraphResponse) {\n\tresponse = &DescribeKnowledgeUsagePieGraphResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeKnowledgeUsagePieGraph\n// 查询企业知识库容量饼图\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeKnowledgeUsagePieGraph(request *DescribeKnowledgeUsagePieGraphRequest) (response *DescribeKnowledgeUsagePieGraphResponse, err error) {\n\treturn c.DescribeKnowledgeUsagePieGraphWithContext(context.Background(), request)\n}\n\n// DescribeKnowledgeUsagePieGraph\n// 查询企业知识库容量饼图\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeKnowledgeUsagePieGraphWithContext(ctx context.Context, request *DescribeKnowledgeUsagePieGraphRequest) (response *DescribeKnowledgeUsagePieGraphResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeKnowledgeUsagePieGraphRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeKnowledgeUsagePieGraph\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeKnowledgeUsagePieGraph require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeKnowledgeUsagePieGraphResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeNodeRunRequest() (request *DescribeNodeRunRequest) {\n\trequest = &DescribeNodeRunRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeNodeRun\")\n\n\treturn\n}\n\nfunc NewDescribeNodeRunResponse() (response *DescribeNodeRunResponse) {\n\tresponse = &DescribeNodeRunResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeNodeRun\n// 通过DescribeWorkflowRun接口获取了工作流异步运行的整体内容，其中包含了基本的节点信息，再通用本接口可查看节点的运行详情（包括输入、输出、日志等）。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeNodeRun(request *DescribeNodeRunRequest) (response *DescribeNodeRunResponse, err error) {\n\treturn c.DescribeNodeRunWithContext(context.Background(), request)\n}\n\n// DescribeNodeRun\n// 通过DescribeWorkflowRun接口获取了工作流异步运行的整体内容，其中包含了基本的节点信息，再通用本接口可查看节点的运行详情（包括输入、输出、日志等）。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeNodeRunWithContext(ctx context.Context, request *DescribeNodeRunRequest) (response *DescribeNodeRunResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeNodeRunRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeNodeRun\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeNodeRun require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeNodeRunResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeQARequest() (request *DescribeQARequest) {\n\trequest = &DescribeQARequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeQA\")\n\n\treturn\n}\n\nfunc NewDescribeQAResponse() (response *DescribeQAResponse) {\n\tresponse = &DescribeQAResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeQA\n// 问答详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeQA(request *DescribeQARequest) (response *DescribeQAResponse, err error) {\n\treturn c.DescribeQAWithContext(context.Background(), request)\n}\n\n// DescribeQA\n// 问答详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeQAWithContext(ctx context.Context, request *DescribeQARequest) (response *DescribeQAResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeQARequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeQA\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeQA require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeQAResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeReferRequest() (request *DescribeReferRequest) {\n\trequest = &DescribeReferRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeRefer\")\n\n\treturn\n}\n\nfunc NewDescribeReferResponse() (response *DescribeReferResponse) {\n\tresponse = &DescribeReferResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeRefer\n// 获取来源详情列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeRefer(request *DescribeReferRequest) (response *DescribeReferResponse, err error) {\n\treturn c.DescribeReferWithContext(context.Background(), request)\n}\n\n// DescribeRefer\n// 获取来源详情列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeReferWithContext(ctx context.Context, request *DescribeReferRequest) (response *DescribeReferResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeReferRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeRefer\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeRefer require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeReferResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeReleaseRequest() (request *DescribeReleaseRequest) {\n\trequest = &DescribeReleaseRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeRelease\")\n\n\treturn\n}\n\nfunc NewDescribeReleaseResponse() (response *DescribeReleaseResponse) {\n\tresponse = &DescribeReleaseResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeRelease\n// 发布详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeRelease(request *DescribeReleaseRequest) (response *DescribeReleaseResponse, err error) {\n\treturn c.DescribeReleaseWithContext(context.Background(), request)\n}\n\n// DescribeRelease\n// 发布详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeReleaseWithContext(ctx context.Context, request *DescribeReleaseRequest) (response *DescribeReleaseResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeReleaseRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeRelease\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeRelease require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeReleaseResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeReleaseInfoRequest() (request *DescribeReleaseInfoRequest) {\n\trequest = &DescribeReleaseInfoRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeReleaseInfo\")\n\n\treturn\n}\n\nfunc NewDescribeReleaseInfoResponse() (response *DescribeReleaseInfoResponse) {\n\tresponse = &DescribeReleaseInfoResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeReleaseInfo\n// 拉取发布按钮状态、最后发布时间\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeReleaseInfo(request *DescribeReleaseInfoRequest) (response *DescribeReleaseInfoResponse, err error) {\n\treturn c.DescribeReleaseInfoWithContext(context.Background(), request)\n}\n\n// DescribeReleaseInfo\n// 拉取发布按钮状态、最后发布时间\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeReleaseInfoWithContext(ctx context.Context, request *DescribeReleaseInfoRequest) (response *DescribeReleaseInfoResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeReleaseInfoRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeReleaseInfo\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeReleaseInfo require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeReleaseInfoResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeRobotBizIDByAppKeyRequest() (request *DescribeRobotBizIDByAppKeyRequest) {\n\trequest = &DescribeRobotBizIDByAppKeyRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeRobotBizIDByAppKey\")\n\n\treturn\n}\n\nfunc NewDescribeRobotBizIDByAppKeyResponse() (response *DescribeRobotBizIDByAppKeyResponse) {\n\tresponse = &DescribeRobotBizIDByAppKeyResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeRobotBizIDByAppKey\n// 通过appKey获取应用业务ID\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeRobotBizIDByAppKey(request *DescribeRobotBizIDByAppKeyRequest) (response *DescribeRobotBizIDByAppKeyResponse, err error) {\n\treturn c.DescribeRobotBizIDByAppKeyWithContext(context.Background(), request)\n}\n\n// DescribeRobotBizIDByAppKey\n// 通过appKey获取应用业务ID\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeRobotBizIDByAppKeyWithContext(ctx context.Context, request *DescribeRobotBizIDByAppKeyRequest) (response *DescribeRobotBizIDByAppKeyResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeRobotBizIDByAppKeyRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeRobotBizIDByAppKey\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeRobotBizIDByAppKey require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeRobotBizIDByAppKeyResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeSearchStatsGraphRequest() (request *DescribeSearchStatsGraphRequest) {\n\trequest = &DescribeSearchStatsGraphRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeSearchStatsGraph\")\n\n\treturn\n}\n\nfunc NewDescribeSearchStatsGraphResponse() (response *DescribeSearchStatsGraphResponse) {\n\tresponse = &DescribeSearchStatsGraphResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeSearchStatsGraph\n// 查询搜索服务调用折线图\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeSearchStatsGraph(request *DescribeSearchStatsGraphRequest) (response *DescribeSearchStatsGraphResponse, err error) {\n\treturn c.DescribeSearchStatsGraphWithContext(context.Background(), request)\n}\n\n// DescribeSearchStatsGraph\n// 查询搜索服务调用折线图\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeSearchStatsGraphWithContext(ctx context.Context, request *DescribeSearchStatsGraphRequest) (response *DescribeSearchStatsGraphResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeSearchStatsGraphRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeSearchStatsGraph\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeSearchStatsGraph require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeSearchStatsGraphResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeSegmentsRequest() (request *DescribeSegmentsRequest) {\n\trequest = &DescribeSegmentsRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeSegments\")\n\n\treturn\n}\n\nfunc NewDescribeSegmentsResponse() (response *DescribeSegmentsResponse) {\n\tresponse = &DescribeSegmentsResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeSegments\n// 获取片段详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeSegments(request *DescribeSegmentsRequest) (response *DescribeSegmentsResponse, err error) {\n\treturn c.DescribeSegmentsWithContext(context.Background(), request)\n}\n\n// DescribeSegments\n// 获取片段详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeSegmentsWithContext(ctx context.Context, request *DescribeSegmentsRequest) (response *DescribeSegmentsResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeSegmentsRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeSegments\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeSegments require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeSegmentsResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeSharedKnowledgeRequest() (request *DescribeSharedKnowledgeRequest) {\n\trequest = &DescribeSharedKnowledgeRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeSharedKnowledge\")\n\n\treturn\n}\n\nfunc NewDescribeSharedKnowledgeResponse() (response *DescribeSharedKnowledgeResponse) {\n\tresponse = &DescribeSharedKnowledgeResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeSharedKnowledge\n// 查询共享知识库。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeSharedKnowledge(request *DescribeSharedKnowledgeRequest) (response *DescribeSharedKnowledgeResponse, err error) {\n\treturn c.DescribeSharedKnowledgeWithContext(context.Background(), request)\n}\n\n// DescribeSharedKnowledge\n// 查询共享知识库。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeSharedKnowledgeWithContext(ctx context.Context, request *DescribeSharedKnowledgeRequest) (response *DescribeSharedKnowledgeResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeSharedKnowledgeRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeSharedKnowledge\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeSharedKnowledge require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeSharedKnowledgeResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeStorageCredentialRequest() (request *DescribeStorageCredentialRequest) {\n\trequest = &DescribeStorageCredentialRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeStorageCredential\")\n\n\treturn\n}\n\nfunc NewDescribeStorageCredentialResponse() (response *DescribeStorageCredentialResponse) {\n\tresponse = &DescribeStorageCredentialResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeStorageCredential\n// 获取文件上传临时密钥\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeStorageCredential(request *DescribeStorageCredentialRequest) (response *DescribeStorageCredentialResponse, err error) {\n\treturn c.DescribeStorageCredentialWithContext(context.Background(), request)\n}\n\n// DescribeStorageCredential\n// 获取文件上传临时密钥\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeStorageCredentialWithContext(ctx context.Context, request *DescribeStorageCredentialRequest) (response *DescribeStorageCredentialResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeStorageCredentialRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeStorageCredential\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeStorageCredential require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeStorageCredentialResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeTokenUsageRequest() (request *DescribeTokenUsageRequest) {\n\trequest = &DescribeTokenUsageRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeTokenUsage\")\n\n\treturn\n}\n\nfunc NewDescribeTokenUsageResponse() (response *DescribeTokenUsageResponse) {\n\tresponse = &DescribeTokenUsageResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeTokenUsage\n// 接口调用token详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeTokenUsage(request *DescribeTokenUsageRequest) (response *DescribeTokenUsageResponse, err error) {\n\treturn c.DescribeTokenUsageWithContext(context.Background(), request)\n}\n\n// DescribeTokenUsage\n// 接口调用token详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeTokenUsageWithContext(ctx context.Context, request *DescribeTokenUsageRequest) (response *DescribeTokenUsageResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeTokenUsageRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeTokenUsage\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeTokenUsage require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeTokenUsageResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeTokenUsageGraphRequest() (request *DescribeTokenUsageGraphRequest) {\n\trequest = &DescribeTokenUsageGraphRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeTokenUsageGraph\")\n\n\treturn\n}\n\nfunc NewDescribeTokenUsageGraphResponse() (response *DescribeTokenUsageGraphResponse) {\n\tresponse = &DescribeTokenUsageGraphResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeTokenUsageGraph\n// 接口调用token折线图\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeTokenUsageGraph(request *DescribeTokenUsageGraphRequest) (response *DescribeTokenUsageGraphResponse, err error) {\n\treturn c.DescribeTokenUsageGraphWithContext(context.Background(), request)\n}\n\n// DescribeTokenUsageGraph\n// 接口调用token折线图\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) DescribeTokenUsageGraphWithContext(ctx context.Context, request *DescribeTokenUsageGraphRequest) (response *DescribeTokenUsageGraphResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeTokenUsageGraphRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeTokenUsageGraph\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeTokenUsageGraph require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeTokenUsageGraphResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeUnsatisfiedReplyContextRequest() (request *DescribeUnsatisfiedReplyContextRequest) {\n\trequest = &DescribeUnsatisfiedReplyContextRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeUnsatisfiedReplyContext\")\n\n\treturn\n}\n\nfunc NewDescribeUnsatisfiedReplyContextResponse() (response *DescribeUnsatisfiedReplyContextResponse) {\n\tresponse = &DescribeUnsatisfiedReplyContextResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeUnsatisfiedReplyContext\n// 获取不满意回复上下文\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tINVALIDPARAMETER = \"InvalidParameter\"\nfunc (c *Client) DescribeUnsatisfiedReplyContext(request *DescribeUnsatisfiedReplyContextRequest) (response *DescribeUnsatisfiedReplyContextResponse, err error) {\n\treturn c.DescribeUnsatisfiedReplyContextWithContext(context.Background(), request)\n}\n\n// DescribeUnsatisfiedReplyContext\n// 获取不满意回复上下文\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tINVALIDPARAMETER = \"InvalidParameter\"\nfunc (c *Client) DescribeUnsatisfiedReplyContextWithContext(ctx context.Context, request *DescribeUnsatisfiedReplyContextRequest) (response *DescribeUnsatisfiedReplyContextResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeUnsatisfiedReplyContextRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeUnsatisfiedReplyContext\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeUnsatisfiedReplyContext require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeUnsatisfiedReplyContextResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewDescribeWorkflowRunRequest() (request *DescribeWorkflowRunRequest) {\n\trequest = &DescribeWorkflowRunRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"DescribeWorkflowRun\")\n\n\treturn\n}\n\nfunc NewDescribeWorkflowRunResponse() (response *DescribeWorkflowRunResponse) {\n\tresponse = &DescribeWorkflowRunResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// DescribeWorkflowRun\n// 创建了工作流的异步运行实例后，通过本接口可以查询整体的运行详情。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeWorkflowRun(request *DescribeWorkflowRunRequest) (response *DescribeWorkflowRunResponse, err error) {\n\treturn c.DescribeWorkflowRunWithContext(context.Background(), request)\n}\n\n// DescribeWorkflowRun\n// 创建了工作流的异步运行实例后，通过本接口可以查询整体的运行详情。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) DescribeWorkflowRunWithContext(ctx context.Context, request *DescribeWorkflowRunRequest) (response *DescribeWorkflowRunResponse, err error) {\n\tif request == nil {\n\t\trequest = NewDescribeWorkflowRunRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"DescribeWorkflowRun\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"DescribeWorkflowRun require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewDescribeWorkflowRunResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewExportAttributeLabelRequest() (request *ExportAttributeLabelRequest) {\n\trequest = &ExportAttributeLabelRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ExportAttributeLabel\")\n\n\treturn\n}\n\nfunc NewExportAttributeLabelResponse() (response *ExportAttributeLabelResponse) {\n\tresponse = &ExportAttributeLabelResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ExportAttributeLabel\n// 导出属性标签\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ExportAttributeLabel(request *ExportAttributeLabelRequest) (response *ExportAttributeLabelResponse, err error) {\n\treturn c.ExportAttributeLabelWithContext(context.Background(), request)\n}\n\n// ExportAttributeLabel\n// 导出属性标签\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ExportAttributeLabelWithContext(ctx context.Context, request *ExportAttributeLabelRequest) (response *ExportAttributeLabelResponse, err error) {\n\tif request == nil {\n\t\trequest = NewExportAttributeLabelRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ExportAttributeLabel\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ExportAttributeLabel require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewExportAttributeLabelResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewExportQAListRequest() (request *ExportQAListRequest) {\n\trequest = &ExportQAListRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ExportQAList\")\n\n\treturn\n}\n\nfunc NewExportQAListResponse() (response *ExportQAListResponse) {\n\tresponse = &ExportQAListResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ExportQAList\n// 导出QA列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ExportQAList(request *ExportQAListRequest) (response *ExportQAListResponse, err error) {\n\treturn c.ExportQAListWithContext(context.Background(), request)\n}\n\n// ExportQAList\n// 导出QA列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ExportQAListWithContext(ctx context.Context, request *ExportQAListRequest) (response *ExportQAListResponse, err error) {\n\tif request == nil {\n\t\trequest = NewExportQAListRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ExportQAList\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ExportQAList require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewExportQAListResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewExportUnsatisfiedReplyRequest() (request *ExportUnsatisfiedReplyRequest) {\n\trequest = &ExportUnsatisfiedReplyRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ExportUnsatisfiedReply\")\n\n\treturn\n}\n\nfunc NewExportUnsatisfiedReplyResponse() (response *ExportUnsatisfiedReplyResponse) {\n\tresponse = &ExportUnsatisfiedReplyResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ExportUnsatisfiedReply\n// 导出不满意回复\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ExportUnsatisfiedReply(request *ExportUnsatisfiedReplyRequest) (response *ExportUnsatisfiedReplyResponse, err error) {\n\treturn c.ExportUnsatisfiedReplyWithContext(context.Background(), request)\n}\n\n// ExportUnsatisfiedReply\n// 导出不满意回复\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ExportUnsatisfiedReplyWithContext(ctx context.Context, request *ExportUnsatisfiedReplyRequest) (response *ExportUnsatisfiedReplyResponse, err error) {\n\tif request == nil {\n\t\trequest = NewExportUnsatisfiedReplyRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ExportUnsatisfiedReply\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ExportUnsatisfiedReply require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewExportUnsatisfiedReplyResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGenerateQARequest() (request *GenerateQARequest) {\n\trequest = &GenerateQARequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GenerateQA\")\n\n\treturn\n}\n\nfunc NewGenerateQAResponse() (response *GenerateQAResponse) {\n\tresponse = &GenerateQAResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GenerateQA\n// 文档生成问答\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GenerateQA(request *GenerateQARequest) (response *GenerateQAResponse, err error) {\n\treturn c.GenerateQAWithContext(context.Background(), request)\n}\n\n// GenerateQA\n// 文档生成问答\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GenerateQAWithContext(ctx context.Context, request *GenerateQARequest) (response *GenerateQAResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGenerateQARequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GenerateQA\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GenerateQA require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGenerateQAResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGetAnswerTypeDataCountRequest() (request *GetAnswerTypeDataCountRequest) {\n\trequest = &GetAnswerTypeDataCountRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GetAnswerTypeDataCount\")\n\n\treturn\n}\n\nfunc NewGetAnswerTypeDataCountResponse() (response *GetAnswerTypeDataCountResponse) {\n\tresponse = &GetAnswerTypeDataCountResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GetAnswerTypeDataCount\n// 回答类型数据统计\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) GetAnswerTypeDataCount(request *GetAnswerTypeDataCountRequest) (response *GetAnswerTypeDataCountResponse, err error) {\n\treturn c.GetAnswerTypeDataCountWithContext(context.Background(), request)\n}\n\n// GetAnswerTypeDataCount\n// 回答类型数据统计\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) GetAnswerTypeDataCountWithContext(ctx context.Context, request *GetAnswerTypeDataCountRequest) (response *GetAnswerTypeDataCountResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGetAnswerTypeDataCountRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GetAnswerTypeDataCount\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GetAnswerTypeDataCount require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGetAnswerTypeDataCountResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGetAppKnowledgeCountRequest() (request *GetAppKnowledgeCountRequest) {\n\trequest = &GetAppKnowledgeCountRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GetAppKnowledgeCount\")\n\n\treturn\n}\n\nfunc NewGetAppKnowledgeCountResponse() (response *GetAppKnowledgeCountResponse) {\n\tresponse = &GetAppKnowledgeCountResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GetAppKnowledgeCount\n// 获取模型列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GetAppKnowledgeCount(request *GetAppKnowledgeCountRequest) (response *GetAppKnowledgeCountResponse, err error) {\n\treturn c.GetAppKnowledgeCountWithContext(context.Background(), request)\n}\n\n// GetAppKnowledgeCount\n// 获取模型列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GetAppKnowledgeCountWithContext(ctx context.Context, request *GetAppKnowledgeCountRequest) (response *GetAppKnowledgeCountResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGetAppKnowledgeCountRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GetAppKnowledgeCount\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GetAppKnowledgeCount require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGetAppKnowledgeCountResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGetAppSecretRequest() (request *GetAppSecretRequest) {\n\trequest = &GetAppSecretRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GetAppSecret\")\n\n\treturn\n}\n\nfunc NewGetAppSecretResponse() (response *GetAppSecretResponse) {\n\tresponse = &GetAppSecretResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GetAppSecret\n// 获取应用密钥\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GetAppSecret(request *GetAppSecretRequest) (response *GetAppSecretResponse, err error) {\n\treturn c.GetAppSecretWithContext(context.Background(), request)\n}\n\n// GetAppSecret\n// 获取应用密钥\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GetAppSecretWithContext(ctx context.Context, request *GetAppSecretRequest) (response *GetAppSecretResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGetAppSecretRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GetAppSecret\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GetAppSecret require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGetAppSecretResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGetDocPreviewRequest() (request *GetDocPreviewRequest) {\n\trequest = &GetDocPreviewRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GetDocPreview\")\n\n\treturn\n}\n\nfunc NewGetDocPreviewResponse() (response *GetDocPreviewResponse) {\n\tresponse = &GetDocPreviewResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GetDocPreview\n// 获取文档预览信息\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GetDocPreview(request *GetDocPreviewRequest) (response *GetDocPreviewResponse, err error) {\n\treturn c.GetDocPreviewWithContext(context.Background(), request)\n}\n\n// GetDocPreview\n// 获取文档预览信息\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GetDocPreviewWithContext(ctx context.Context, request *GetDocPreviewRequest) (response *GetDocPreviewResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGetDocPreviewRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GetDocPreview\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GetDocPreview require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGetDocPreviewResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGetLikeDataCountRequest() (request *GetLikeDataCountRequest) {\n\trequest = &GetLikeDataCountRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GetLikeDataCount\")\n\n\treturn\n}\n\nfunc NewGetLikeDataCountResponse() (response *GetLikeDataCountResponse) {\n\tresponse = &GetLikeDataCountResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GetLikeDataCount\n// 点赞点踩数据统计\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) GetLikeDataCount(request *GetLikeDataCountRequest) (response *GetLikeDataCountResponse, err error) {\n\treturn c.GetLikeDataCountWithContext(context.Background(), request)\n}\n\n// GetLikeDataCount\n// 点赞点踩数据统计\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) GetLikeDataCountWithContext(ctx context.Context, request *GetLikeDataCountRequest) (response *GetLikeDataCountResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGetLikeDataCountRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GetLikeDataCount\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GetLikeDataCount require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGetLikeDataCountResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGetMsgRecordRequest() (request *GetMsgRecordRequest) {\n\trequest = &GetMsgRecordRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GetMsgRecord\")\n\n\treturn\n}\n\nfunc NewGetMsgRecordResponse() (response *GetMsgRecordResponse) {\n\tresponse = &GetMsgRecordResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GetMsgRecord\n// 获取聊天历史\n//\n// 根据会话session id获取聊天历史（仅保留180天内的历史对话数据）\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) GetMsgRecord(request *GetMsgRecordRequest) (response *GetMsgRecordResponse, err error) {\n\treturn c.GetMsgRecordWithContext(context.Background(), request)\n}\n\n// GetMsgRecord\n// 获取聊天历史\n//\n// 根据会话session id获取聊天历史（仅保留180天内的历史对话数据）\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) GetMsgRecordWithContext(ctx context.Context, request *GetMsgRecordRequest) (response *GetMsgRecordResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGetMsgRecordRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GetMsgRecord\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GetMsgRecord require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGetMsgRecordResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGetTaskStatusRequest() (request *GetTaskStatusRequest) {\n\trequest = &GetTaskStatusRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GetTaskStatus\")\n\n\treturn\n}\n\nfunc NewGetTaskStatusResponse() (response *GetTaskStatusResponse) {\n\tresponse = &GetTaskStatusResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GetTaskStatus\n// 获取任务状态\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) GetTaskStatus(request *GetTaskStatusRequest) (response *GetTaskStatusResponse, err error) {\n\treturn c.GetTaskStatusWithContext(context.Background(), request)\n}\n\n// GetTaskStatus\n// 获取任务状态\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) GetTaskStatusWithContext(ctx context.Context, request *GetTaskStatusRequest) (response *GetTaskStatusResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGetTaskStatusRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GetTaskStatus\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GetTaskStatus require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGetTaskStatusResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGetVarListRequest() (request *GetVarListRequest) {\n\trequest = &GetVarListRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GetVarList\")\n\n\treturn\n}\n\nfunc NewGetVarListResponse() (response *GetVarListResponse) {\n\tresponse = &GetVarListResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GetVarList\n// 查询自定义变量列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) GetVarList(request *GetVarListRequest) (response *GetVarListResponse, err error) {\n\treturn c.GetVarListWithContext(context.Background(), request)\n}\n\n// GetVarList\n// 查询自定义变量列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) GetVarListWithContext(ctx context.Context, request *GetVarListRequest) (response *GetVarListResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGetVarListRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GetVarList\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GetVarList require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGetVarListResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGetWsTokenRequest() (request *GetWsTokenRequest) {\n\trequest = &GetWsTokenRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GetWsToken\")\n\n\treturn\n}\n\nfunc NewGetWsTokenResponse() (response *GetWsTokenResponse) {\n\tresponse = &GetWsTokenResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GetWsToken\n// 获取ws token\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GetWsToken(request *GetWsTokenRequest) (response *GetWsTokenResponse, err error) {\n\treturn c.GetWsTokenWithContext(context.Background(), request)\n}\n\n// GetWsToken\n// 获取ws token\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GetWsTokenWithContext(ctx context.Context, request *GetWsTokenRequest) (response *GetWsTokenResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGetWsTokenRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GetWsToken\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GetWsToken require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGetWsTokenResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGroupDocRequest() (request *GroupDocRequest) {\n\trequest = &GroupDocRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GroupDoc\")\n\n\treturn\n}\n\nfunc NewGroupDocResponse() (response *GroupDocResponse) {\n\tresponse = &GroupDocResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GroupDoc\n// Doc分组\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GroupDoc(request *GroupDocRequest) (response *GroupDocResponse, err error) {\n\treturn c.GroupDocWithContext(context.Background(), request)\n}\n\n// GroupDoc\n// Doc分组\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GroupDocWithContext(ctx context.Context, request *GroupDocRequest) (response *GroupDocResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGroupDocRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GroupDoc\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GroupDoc require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGroupDocResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewGroupQARequest() (request *GroupQARequest) {\n\trequest = &GroupQARequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"GroupQA\")\n\n\treturn\n}\n\nfunc NewGroupQAResponse() (response *GroupQAResponse) {\n\tresponse = &GroupQAResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// GroupQA\n// QA分组\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GroupQA(request *GroupQARequest) (response *GroupQAResponse, err error) {\n\treturn c.GroupQAWithContext(context.Background(), request)\n}\n\n// GroupQA\n// QA分组\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) GroupQAWithContext(ctx context.Context, request *GroupQARequest) (response *GroupQAResponse, err error) {\n\tif request == nil {\n\t\trequest = NewGroupQARequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"GroupQA\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"GroupQA require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewGroupQAResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewIgnoreUnsatisfiedReplyRequest() (request *IgnoreUnsatisfiedReplyRequest) {\n\trequest = &IgnoreUnsatisfiedReplyRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"IgnoreUnsatisfiedReply\")\n\n\treturn\n}\n\nfunc NewIgnoreUnsatisfiedReplyResponse() (response *IgnoreUnsatisfiedReplyResponse) {\n\tresponse = &IgnoreUnsatisfiedReplyResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// IgnoreUnsatisfiedReply\n// 忽略不满意回复\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) IgnoreUnsatisfiedReply(request *IgnoreUnsatisfiedReplyRequest) (response *IgnoreUnsatisfiedReplyResponse, err error) {\n\treturn c.IgnoreUnsatisfiedReplyWithContext(context.Background(), request)\n}\n\n// IgnoreUnsatisfiedReply\n// 忽略不满意回复\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) IgnoreUnsatisfiedReplyWithContext(ctx context.Context, request *IgnoreUnsatisfiedReplyRequest) (response *IgnoreUnsatisfiedReplyResponse, err error) {\n\tif request == nil {\n\t\trequest = NewIgnoreUnsatisfiedReplyRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"IgnoreUnsatisfiedReply\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"IgnoreUnsatisfiedReply require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewIgnoreUnsatisfiedReplyResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewIsTransferIntentRequest() (request *IsTransferIntentRequest) {\n\trequest = &IsTransferIntentRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"IsTransferIntent\")\n\n\treturn\n}\n\nfunc NewIsTransferIntentResponse() (response *IsTransferIntentResponse) {\n\tresponse = &IsTransferIntentResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// IsTransferIntent\n// 是否意图转人工\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) IsTransferIntent(request *IsTransferIntentRequest) (response *IsTransferIntentResponse, err error) {\n\treturn c.IsTransferIntentWithContext(context.Background(), request)\n}\n\n// IsTransferIntent\n// 是否意图转人工\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) IsTransferIntentWithContext(ctx context.Context, request *IsTransferIntentRequest) (response *IsTransferIntentResponse, err error) {\n\tif request == nil {\n\t\trequest = NewIsTransferIntentRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"IsTransferIntent\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"IsTransferIntent require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewIsTransferIntentResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListAppRequest() (request *ListAppRequest) {\n\trequest = &ListAppRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListApp\")\n\n\treturn\n}\n\nfunc NewListAppResponse() (response *ListAppResponse) {\n\tresponse = &ListAppResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListApp\n// 获取企业下应用列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListApp(request *ListAppRequest) (response *ListAppResponse, err error) {\n\treturn c.ListAppWithContext(context.Background(), request)\n}\n\n// ListApp\n// 获取企业下应用列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListAppWithContext(ctx context.Context, request *ListAppRequest) (response *ListAppResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListAppRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListApp\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListApp require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListAppResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListAppKnowledgeDetailRequest() (request *ListAppKnowledgeDetailRequest) {\n\trequest = &ListAppKnowledgeDetailRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListAppKnowledgeDetail\")\n\n\treturn\n}\n\nfunc NewListAppKnowledgeDetailResponse() (response *ListAppKnowledgeDetailResponse) {\n\tresponse = &ListAppKnowledgeDetailResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListAppKnowledgeDetail\n// 列表查询知识库容量详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListAppKnowledgeDetail(request *ListAppKnowledgeDetailRequest) (response *ListAppKnowledgeDetailResponse, err error) {\n\treturn c.ListAppKnowledgeDetailWithContext(context.Background(), request)\n}\n\n// ListAppKnowledgeDetail\n// 列表查询知识库容量详情\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListAppKnowledgeDetailWithContext(ctx context.Context, request *ListAppKnowledgeDetailRequest) (response *ListAppKnowledgeDetailResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListAppKnowledgeDetailRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListAppKnowledgeDetail\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListAppKnowledgeDetail require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListAppKnowledgeDetailResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListAttributeLabelRequest() (request *ListAttributeLabelRequest) {\n\trequest = &ListAttributeLabelRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListAttributeLabel\")\n\n\treturn\n}\n\nfunc NewListAttributeLabelResponse() (response *ListAttributeLabelResponse) {\n\tresponse = &ListAttributeLabelResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListAttributeLabel\n// 查询属性标签列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListAttributeLabel(request *ListAttributeLabelRequest) (response *ListAttributeLabelResponse, err error) {\n\treturn c.ListAttributeLabelWithContext(context.Background(), request)\n}\n\n// ListAttributeLabel\n// 查询属性标签列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListAttributeLabelWithContext(ctx context.Context, request *ListAttributeLabelRequest) (response *ListAttributeLabelResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListAttributeLabelRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListAttributeLabel\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListAttributeLabel require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListAttributeLabelResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListChannelRequest() (request *ListChannelRequest) {\n\trequest = &ListChannelRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListChannel\")\n\n\treturn\n}\n\nfunc NewListChannelResponse() (response *ListChannelResponse) {\n\tresponse = &ListChannelResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListChannel\n// 获取发布渠道列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListChannel(request *ListChannelRequest) (response *ListChannelResponse, err error) {\n\treturn c.ListChannelWithContext(context.Background(), request)\n}\n\n// ListChannel\n// 获取发布渠道列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListChannelWithContext(ctx context.Context, request *ListChannelRequest) (response *ListChannelResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListChannelRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListChannel\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListChannel require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListChannelResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListDocRequest() (request *ListDocRequest) {\n\trequest = &ListDocRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListDoc\")\n\n\treturn\n}\n\nfunc NewListDocResponse() (response *ListDocResponse) {\n\tresponse = &ListDocResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListDoc\n// 文档列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListDoc(request *ListDocRequest) (response *ListDocResponse, err error) {\n\treturn c.ListDocWithContext(context.Background(), request)\n}\n\n// ListDoc\n// 文档列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListDocWithContext(ctx context.Context, request *ListDocRequest) (response *ListDocResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListDocRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListDoc\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListDoc require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListDocResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListDocCateRequest() (request *ListDocCateRequest) {\n\trequest = &ListDocCateRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListDocCate\")\n\n\treturn\n}\n\nfunc NewListDocCateResponse() (response *ListDocCateResponse) {\n\tresponse = &ListDocCateResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListDocCate\n// 获取Doc分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListDocCate(request *ListDocCateRequest) (response *ListDocCateResponse, err error) {\n\treturn c.ListDocCateWithContext(context.Background(), request)\n}\n\n// ListDocCate\n// 获取Doc分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListDocCateWithContext(ctx context.Context, request *ListDocCateRequest) (response *ListDocCateResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListDocCateRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListDocCate\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListDocCate require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListDocCateResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListModelRequest() (request *ListModelRequest) {\n\trequest = &ListModelRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListModel\")\n\n\treturn\n}\n\nfunc NewListModelResponse() (response *ListModelResponse) {\n\tresponse = &ListModelResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListModel\n// 获取模型列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListModel(request *ListModelRequest) (response *ListModelResponse, err error) {\n\treturn c.ListModelWithContext(context.Background(), request)\n}\n\n// ListModel\n// 获取模型列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListModelWithContext(ctx context.Context, request *ListModelRequest) (response *ListModelResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListModelRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListModel\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListModel require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListModelResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListQARequest() (request *ListQARequest) {\n\trequest = &ListQARequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListQA\")\n\n\treturn\n}\n\nfunc NewListQAResponse() (response *ListQAResponse) {\n\tresponse = &ListQAResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListQA\n// 问答列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListQA(request *ListQARequest) (response *ListQAResponse, err error) {\n\treturn c.ListQAWithContext(context.Background(), request)\n}\n\n// ListQA\n// 问答列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListQAWithContext(ctx context.Context, request *ListQARequest) (response *ListQAResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListQARequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListQA\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListQA require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListQAResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListQACateRequest() (request *ListQACateRequest) {\n\trequest = &ListQACateRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListQACate\")\n\n\treturn\n}\n\nfunc NewListQACateResponse() (response *ListQACateResponse) {\n\tresponse = &ListQACateResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListQACate\n// 获取QA分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListQACate(request *ListQACateRequest) (response *ListQACateResponse, err error) {\n\treturn c.ListQACateWithContext(context.Background(), request)\n}\n\n// ListQACate\n// 获取QA分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListQACateWithContext(ctx context.Context, request *ListQACateRequest) (response *ListQACateResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListQACateRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListQACate\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListQACate require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListQACateResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListReferShareKnowledgeRequest() (request *ListReferShareKnowledgeRequest) {\n\trequest = &ListReferShareKnowledgeRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListReferShareKnowledge\")\n\n\treturn\n}\n\nfunc NewListReferShareKnowledgeResponse() (response *ListReferShareKnowledgeResponse) {\n\tresponse = &ListReferShareKnowledgeResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListReferShareKnowledge\n// 查看应用引用了哪些共享知识库，可以看到共享知识库的基础信息，包括名称，id等\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListReferShareKnowledge(request *ListReferShareKnowledgeRequest) (response *ListReferShareKnowledgeResponse, err error) {\n\treturn c.ListReferShareKnowledgeWithContext(context.Background(), request)\n}\n\n// ListReferShareKnowledge\n// 查看应用引用了哪些共享知识库，可以看到共享知识库的基础信息，包括名称，id等\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListReferShareKnowledgeWithContext(ctx context.Context, request *ListReferShareKnowledgeRequest) (response *ListReferShareKnowledgeResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListReferShareKnowledgeRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListReferShareKnowledge\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListReferShareKnowledge require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListReferShareKnowledgeResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListRejectedQuestionRequest() (request *ListRejectedQuestionRequest) {\n\trequest = &ListRejectedQuestionRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListRejectedQuestion\")\n\n\treturn\n}\n\nfunc NewListRejectedQuestionResponse() (response *ListRejectedQuestionResponse) {\n\tresponse = &ListRejectedQuestionResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListRejectedQuestion\n// 获取拒答问题\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListRejectedQuestion(request *ListRejectedQuestionRequest) (response *ListRejectedQuestionResponse, err error) {\n\treturn c.ListRejectedQuestionWithContext(context.Background(), request)\n}\n\n// ListRejectedQuestion\n// 获取拒答问题\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListRejectedQuestionWithContext(ctx context.Context, request *ListRejectedQuestionRequest) (response *ListRejectedQuestionResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListRejectedQuestionRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListRejectedQuestion\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListRejectedQuestion require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListRejectedQuestionResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListRejectedQuestionPreviewRequest() (request *ListRejectedQuestionPreviewRequest) {\n\trequest = &ListRejectedQuestionPreviewRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListRejectedQuestionPreview\")\n\n\treturn\n}\n\nfunc NewListRejectedQuestionPreviewResponse() (response *ListRejectedQuestionPreviewResponse) {\n\tresponse = &ListRejectedQuestionPreviewResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListRejectedQuestionPreview\n// 发布拒答问题预览\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListRejectedQuestionPreview(request *ListRejectedQuestionPreviewRequest) (response *ListRejectedQuestionPreviewResponse, err error) {\n\treturn c.ListRejectedQuestionPreviewWithContext(context.Background(), request)\n}\n\n// ListRejectedQuestionPreview\n// 发布拒答问题预览\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListRejectedQuestionPreviewWithContext(ctx context.Context, request *ListRejectedQuestionPreviewRequest) (response *ListRejectedQuestionPreviewResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListRejectedQuestionPreviewRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListRejectedQuestionPreview\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListRejectedQuestionPreview require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListRejectedQuestionPreviewResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListReleaseRequest() (request *ListReleaseRequest) {\n\trequest = &ListReleaseRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListRelease\")\n\n\treturn\n}\n\nfunc NewListReleaseResponse() (response *ListReleaseResponse) {\n\tresponse = &ListReleaseResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListRelease\n// 发布列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListRelease(request *ListReleaseRequest) (response *ListReleaseResponse, err error) {\n\treturn c.ListReleaseWithContext(context.Background(), request)\n}\n\n// ListRelease\n// 发布列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListReleaseWithContext(ctx context.Context, request *ListReleaseRequest) (response *ListReleaseResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListReleaseRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListRelease\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListRelease require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListReleaseResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListReleaseConfigPreviewRequest() (request *ListReleaseConfigPreviewRequest) {\n\trequest = &ListReleaseConfigPreviewRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListReleaseConfigPreview\")\n\n\treturn\n}\n\nfunc NewListReleaseConfigPreviewResponse() (response *ListReleaseConfigPreviewResponse) {\n\tresponse = &ListReleaseConfigPreviewResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListReleaseConfigPreview\n// 发布配置项预览\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListReleaseConfigPreview(request *ListReleaseConfigPreviewRequest) (response *ListReleaseConfigPreviewResponse, err error) {\n\treturn c.ListReleaseConfigPreviewWithContext(context.Background(), request)\n}\n\n// ListReleaseConfigPreview\n// 发布配置项预览\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListReleaseConfigPreviewWithContext(ctx context.Context, request *ListReleaseConfigPreviewRequest) (response *ListReleaseConfigPreviewResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListReleaseConfigPreviewRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListReleaseConfigPreview\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListReleaseConfigPreview require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListReleaseConfigPreviewResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListReleaseDocPreviewRequest() (request *ListReleaseDocPreviewRequest) {\n\trequest = &ListReleaseDocPreviewRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListReleaseDocPreview\")\n\n\treturn\n}\n\nfunc NewListReleaseDocPreviewResponse() (response *ListReleaseDocPreviewResponse) {\n\tresponse = &ListReleaseDocPreviewResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListReleaseDocPreview\n// 发布文档预览\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListReleaseDocPreview(request *ListReleaseDocPreviewRequest) (response *ListReleaseDocPreviewResponse, err error) {\n\treturn c.ListReleaseDocPreviewWithContext(context.Background(), request)\n}\n\n// ListReleaseDocPreview\n// 发布文档预览\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListReleaseDocPreviewWithContext(ctx context.Context, request *ListReleaseDocPreviewRequest) (response *ListReleaseDocPreviewResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListReleaseDocPreviewRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListReleaseDocPreview\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListReleaseDocPreview require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListReleaseDocPreviewResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListReleaseQAPreviewRequest() (request *ListReleaseQAPreviewRequest) {\n\trequest = &ListReleaseQAPreviewRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListReleaseQAPreview\")\n\n\treturn\n}\n\nfunc NewListReleaseQAPreviewResponse() (response *ListReleaseQAPreviewResponse) {\n\tresponse = &ListReleaseQAPreviewResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListReleaseQAPreview\n// 文档列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListReleaseQAPreview(request *ListReleaseQAPreviewRequest) (response *ListReleaseQAPreviewResponse, err error) {\n\treturn c.ListReleaseQAPreviewWithContext(context.Background(), request)\n}\n\n// ListReleaseQAPreview\n// 文档列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListReleaseQAPreviewWithContext(ctx context.Context, request *ListReleaseQAPreviewRequest) (response *ListReleaseQAPreviewResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListReleaseQAPreviewRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListReleaseQAPreview\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListReleaseQAPreview require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListReleaseQAPreviewResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListSelectDocRequest() (request *ListSelectDocRequest) {\n\trequest = &ListSelectDocRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListSelectDoc\")\n\n\treturn\n}\n\nfunc NewListSelectDocResponse() (response *ListSelectDocResponse) {\n\tresponse = &ListSelectDocResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListSelectDoc\n// 文档生成问答时，可通过该接口获得当前支持生成问答的文档列表，当前不支持xlsx、xls、csv格式的文档生成问答，且文档需处于待发布或已发布状态才可生成问答。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListSelectDoc(request *ListSelectDocRequest) (response *ListSelectDocResponse, err error) {\n\treturn c.ListSelectDocWithContext(context.Background(), request)\n}\n\n// ListSelectDoc\n// 文档生成问答时，可通过该接口获得当前支持生成问答的文档列表，当前不支持xlsx、xls、csv格式的文档生成问答，且文档需处于待发布或已发布状态才可生成问答。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListSelectDocWithContext(ctx context.Context, request *ListSelectDocRequest) (response *ListSelectDocResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListSelectDocRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListSelectDoc\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListSelectDoc require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListSelectDocResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListSharedKnowledgeRequest() (request *ListSharedKnowledgeRequest) {\n\trequest = &ListSharedKnowledgeRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListSharedKnowledge\")\n\n\treturn\n}\n\nfunc NewListSharedKnowledgeResponse() (response *ListSharedKnowledgeResponse) {\n\tresponse = &ListSharedKnowledgeResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListSharedKnowledge\n// 列举共享知识库。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListSharedKnowledge(request *ListSharedKnowledgeRequest) (response *ListSharedKnowledgeResponse, err error) {\n\treturn c.ListSharedKnowledgeWithContext(context.Background(), request)\n}\n\n// ListSharedKnowledge\n// 列举共享知识库。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ListSharedKnowledgeWithContext(ctx context.Context, request *ListSharedKnowledgeRequest) (response *ListSharedKnowledgeResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListSharedKnowledgeRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListSharedKnowledge\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListSharedKnowledge require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListSharedKnowledgeResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListUnsatisfiedReplyRequest() (request *ListUnsatisfiedReplyRequest) {\n\trequest = &ListUnsatisfiedReplyRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListUnsatisfiedReply\")\n\n\treturn\n}\n\nfunc NewListUnsatisfiedReplyResponse() (response *ListUnsatisfiedReplyResponse) {\n\tresponse = &ListUnsatisfiedReplyResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListUnsatisfiedReply\n// 查询不满意回复列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tINVALIDPARAMETER = \"InvalidParameter\"\nfunc (c *Client) ListUnsatisfiedReply(request *ListUnsatisfiedReplyRequest) (response *ListUnsatisfiedReplyResponse, err error) {\n\treturn c.ListUnsatisfiedReplyWithContext(context.Background(), request)\n}\n\n// ListUnsatisfiedReply\n// 查询不满意回复列表\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tINVALIDPARAMETER = \"InvalidParameter\"\nfunc (c *Client) ListUnsatisfiedReplyWithContext(ctx context.Context, request *ListUnsatisfiedReplyRequest) (response *ListUnsatisfiedReplyResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListUnsatisfiedReplyRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListUnsatisfiedReply\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListUnsatisfiedReply require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListUnsatisfiedReplyResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListUsageCallDetailRequest() (request *ListUsageCallDetailRequest) {\n\trequest = &ListUsageCallDetailRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListUsageCallDetail\")\n\n\treturn\n}\n\nfunc NewListUsageCallDetailResponse() (response *ListUsageCallDetailResponse) {\n\tresponse = &ListUsageCallDetailResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListUsageCallDetail\n// 列表查询单次调用明细\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tINVALIDPARAMETER = \"InvalidParameter\"\nfunc (c *Client) ListUsageCallDetail(request *ListUsageCallDetailRequest) (response *ListUsageCallDetailResponse, err error) {\n\treturn c.ListUsageCallDetailWithContext(context.Background(), request)\n}\n\n// ListUsageCallDetail\n// 列表查询单次调用明细\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tINVALIDPARAMETER = \"InvalidParameter\"\nfunc (c *Client) ListUsageCallDetailWithContext(ctx context.Context, request *ListUsageCallDetailRequest) (response *ListUsageCallDetailResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListUsageCallDetailRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListUsageCallDetail\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListUsageCallDetail require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListUsageCallDetailResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewListWorkflowRunsRequest() (request *ListWorkflowRunsRequest) {\n\trequest = &ListWorkflowRunsRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ListWorkflowRuns\")\n\n\treturn\n}\n\nfunc NewListWorkflowRunsResponse() (response *ListWorkflowRunsResponse) {\n\tresponse = &ListWorkflowRunsResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ListWorkflowRuns\n// 此接口可查询已创建的所有工作流异步运行实例。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ListWorkflowRuns(request *ListWorkflowRunsRequest) (response *ListWorkflowRunsResponse, err error) {\n\treturn c.ListWorkflowRunsWithContext(context.Background(), request)\n}\n\n// ListWorkflowRuns\n// 此接口可查询已创建的所有工作流异步运行实例。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ListWorkflowRunsWithContext(ctx context.Context, request *ListWorkflowRunsRequest) (response *ListWorkflowRunsResponse, err error) {\n\tif request == nil {\n\t\trequest = NewListWorkflowRunsRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ListWorkflowRuns\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ListWorkflowRuns require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewListWorkflowRunsResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewModifyAppRequest() (request *ModifyAppRequest) {\n\trequest = &ModifyAppRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ModifyApp\")\n\n\treturn\n}\n\nfunc NewModifyAppResponse() (response *ModifyAppResponse) {\n\tresponse = &ModifyAppResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ModifyApp\n// 修改应用请求结构体\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ModifyApp(request *ModifyAppRequest) (response *ModifyAppResponse, err error) {\n\treturn c.ModifyAppWithContext(context.Background(), request)\n}\n\n// ModifyApp\n// 修改应用请求结构体\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ModifyAppWithContext(ctx context.Context, request *ModifyAppRequest) (response *ModifyAppResponse, err error) {\n\tif request == nil {\n\t\trequest = NewModifyAppRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ModifyApp\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ModifyApp require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewModifyAppResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewModifyAttributeLabelRequest() (request *ModifyAttributeLabelRequest) {\n\trequest = &ModifyAttributeLabelRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ModifyAttributeLabel\")\n\n\treturn\n}\n\nfunc NewModifyAttributeLabelResponse() (response *ModifyAttributeLabelResponse) {\n\tresponse = &ModifyAttributeLabelResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ModifyAttributeLabel\n// 编辑属性标签\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ModifyAttributeLabel(request *ModifyAttributeLabelRequest) (response *ModifyAttributeLabelResponse, err error) {\n\treturn c.ModifyAttributeLabelWithContext(context.Background(), request)\n}\n\n// ModifyAttributeLabel\n// 编辑属性标签\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ModifyAttributeLabelWithContext(ctx context.Context, request *ModifyAttributeLabelRequest) (response *ModifyAttributeLabelResponse, err error) {\n\tif request == nil {\n\t\trequest = NewModifyAttributeLabelRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ModifyAttributeLabel\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ModifyAttributeLabel require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewModifyAttributeLabelResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewModifyDocRequest() (request *ModifyDocRequest) {\n\trequest = &ModifyDocRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ModifyDoc\")\n\n\treturn\n}\n\nfunc NewModifyDocResponse() (response *ModifyDocResponse) {\n\tresponse = &ModifyDocResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ModifyDoc\n// 修改文档\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ModifyDoc(request *ModifyDocRequest) (response *ModifyDocResponse, err error) {\n\treturn c.ModifyDocWithContext(context.Background(), request)\n}\n\n// ModifyDoc\n// 修改文档\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) ModifyDocWithContext(ctx context.Context, request *ModifyDocRequest) (response *ModifyDocResponse, err error) {\n\tif request == nil {\n\t\trequest = NewModifyDocRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ModifyDoc\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ModifyDoc require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewModifyDocResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewModifyDocAttrRangeRequest() (request *ModifyDocAttrRangeRequest) {\n\trequest = &ModifyDocAttrRangeRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ModifyDocAttrRange\")\n\n\treturn\n}\n\nfunc NewModifyDocAttrRangeResponse() (response *ModifyDocAttrRangeResponse) {\n\tresponse = &ModifyDocAttrRangeResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ModifyDocAttrRange\n// 批量修改文档适用范围\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyDocAttrRange(request *ModifyDocAttrRangeRequest) (response *ModifyDocAttrRangeResponse, err error) {\n\treturn c.ModifyDocAttrRangeWithContext(context.Background(), request)\n}\n\n// ModifyDocAttrRange\n// 批量修改文档适用范围\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyDocAttrRangeWithContext(ctx context.Context, request *ModifyDocAttrRangeRequest) (response *ModifyDocAttrRangeResponse, err error) {\n\tif request == nil {\n\t\trequest = NewModifyDocAttrRangeRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ModifyDocAttrRange\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ModifyDocAttrRange require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewModifyDocAttrRangeResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewModifyDocCateRequest() (request *ModifyDocCateRequest) {\n\trequest = &ModifyDocCateRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ModifyDocCate\")\n\n\treturn\n}\n\nfunc NewModifyDocCateResponse() (response *ModifyDocCateResponse) {\n\tresponse = &ModifyDocCateResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ModifyDocCate\n// 修改Doc分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyDocCate(request *ModifyDocCateRequest) (response *ModifyDocCateResponse, err error) {\n\treturn c.ModifyDocCateWithContext(context.Background(), request)\n}\n\n// ModifyDocCate\n// 修改Doc分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyDocCateWithContext(ctx context.Context, request *ModifyDocCateRequest) (response *ModifyDocCateResponse, err error) {\n\tif request == nil {\n\t\trequest = NewModifyDocCateRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ModifyDocCate\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ModifyDocCate require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewModifyDocCateResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewModifyQARequest() (request *ModifyQARequest) {\n\trequest = &ModifyQARequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ModifyQA\")\n\n\treturn\n}\n\nfunc NewModifyQAResponse() (response *ModifyQAResponse) {\n\tresponse = &ModifyQAResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ModifyQA\n// 更新问答\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyQA(request *ModifyQARequest) (response *ModifyQAResponse, err error) {\n\treturn c.ModifyQAWithContext(context.Background(), request)\n}\n\n// ModifyQA\n// 更新问答\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyQAWithContext(ctx context.Context, request *ModifyQARequest) (response *ModifyQAResponse, err error) {\n\tif request == nil {\n\t\trequest = NewModifyQARequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ModifyQA\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ModifyQA require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewModifyQAResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewModifyQAAttrRangeRequest() (request *ModifyQAAttrRangeRequest) {\n\trequest = &ModifyQAAttrRangeRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ModifyQAAttrRange\")\n\n\treturn\n}\n\nfunc NewModifyQAAttrRangeResponse() (response *ModifyQAAttrRangeResponse) {\n\tresponse = &ModifyQAAttrRangeResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ModifyQAAttrRange\n// 批量修改问答适用范围\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyQAAttrRange(request *ModifyQAAttrRangeRequest) (response *ModifyQAAttrRangeResponse, err error) {\n\treturn c.ModifyQAAttrRangeWithContext(context.Background(), request)\n}\n\n// ModifyQAAttrRange\n// 批量修改问答适用范围\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyQAAttrRangeWithContext(ctx context.Context, request *ModifyQAAttrRangeRequest) (response *ModifyQAAttrRangeResponse, err error) {\n\tif request == nil {\n\t\trequest = NewModifyQAAttrRangeRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ModifyQAAttrRange\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ModifyQAAttrRange require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewModifyQAAttrRangeResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewModifyQACateRequest() (request *ModifyQACateRequest) {\n\trequest = &ModifyQACateRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ModifyQACate\")\n\n\treturn\n}\n\nfunc NewModifyQACateResponse() (response *ModifyQACateResponse) {\n\tresponse = &ModifyQACateResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ModifyQACate\n// 更新QA分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyQACate(request *ModifyQACateRequest) (response *ModifyQACateResponse, err error) {\n\treturn c.ModifyQACateWithContext(context.Background(), request)\n}\n\n// ModifyQACate\n// 更新QA分类\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyQACateWithContext(ctx context.Context, request *ModifyQACateRequest) (response *ModifyQACateResponse, err error) {\n\tif request == nil {\n\t\trequest = NewModifyQACateRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ModifyQACate\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ModifyQACate require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewModifyQACateResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewModifyRejectedQuestionRequest() (request *ModifyRejectedQuestionRequest) {\n\trequest = &ModifyRejectedQuestionRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ModifyRejectedQuestion\")\n\n\treturn\n}\n\nfunc NewModifyRejectedQuestionResponse() (response *ModifyRejectedQuestionResponse) {\n\tresponse = &ModifyRejectedQuestionResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ModifyRejectedQuestion\n// 修改拒答问题\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyRejectedQuestion(request *ModifyRejectedQuestionRequest) (response *ModifyRejectedQuestionResponse, err error) {\n\treturn c.ModifyRejectedQuestionWithContext(context.Background(), request)\n}\n\n// ModifyRejectedQuestion\n// 修改拒答问题\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ModifyRejectedQuestionWithContext(ctx context.Context, request *ModifyRejectedQuestionRequest) (response *ModifyRejectedQuestionResponse, err error) {\n\tif request == nil {\n\t\trequest = NewModifyRejectedQuestionRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ModifyRejectedQuestion\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ModifyRejectedQuestion require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewModifyRejectedQuestionResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewRateMsgRecordRequest() (request *RateMsgRecordRequest) {\n\trequest = &RateMsgRecordRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"RateMsgRecord\")\n\n\treturn\n}\n\nfunc NewRateMsgRecordResponse() (response *RateMsgRecordResponse) {\n\tresponse = &RateMsgRecordResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// RateMsgRecord\n// 点赞点踩消息\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) RateMsgRecord(request *RateMsgRecordRequest) (response *RateMsgRecordResponse, err error) {\n\treturn c.RateMsgRecordWithContext(context.Background(), request)\n}\n\n// RateMsgRecord\n// 点赞点踩消息\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) RateMsgRecordWithContext(ctx context.Context, request *RateMsgRecordRequest) (response *RateMsgRecordResponse, err error) {\n\tif request == nil {\n\t\trequest = NewRateMsgRecordRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"RateMsgRecord\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"RateMsgRecord require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewRateMsgRecordResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewReferShareKnowledgeRequest() (request *ReferShareKnowledgeRequest) {\n\trequest = &ReferShareKnowledgeRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"ReferShareKnowledge\")\n\n\treturn\n}\n\nfunc NewReferShareKnowledgeResponse() (response *ReferShareKnowledgeResponse) {\n\tresponse = &ReferShareKnowledgeResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// ReferShareKnowledge\n// 应用引用共享知识库，可以引用一个或多个，每次都是全量覆盖\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ReferShareKnowledge(request *ReferShareKnowledgeRequest) (response *ReferShareKnowledgeResponse, err error) {\n\treturn c.ReferShareKnowledgeWithContext(context.Background(), request)\n}\n\n// ReferShareKnowledge\n// 应用引用共享知识库，可以引用一个或多个，每次都是全量覆盖\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) ReferShareKnowledgeWithContext(ctx context.Context, request *ReferShareKnowledgeRequest) (response *ReferShareKnowledgeResponse, err error) {\n\tif request == nil {\n\t\trequest = NewReferShareKnowledgeRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"ReferShareKnowledge\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"ReferShareKnowledge require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewReferShareKnowledgeResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewRenameDocRequest() (request *RenameDocRequest) {\n\trequest = &RenameDocRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"RenameDoc\")\n\n\treturn\n}\n\nfunc NewRenameDocResponse() (response *RenameDocResponse) {\n\tresponse = &RenameDocResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// RenameDoc\n// 文档重命名\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) RenameDoc(request *RenameDocRequest) (response *RenameDocResponse, err error) {\n\treturn c.RenameDocWithContext(context.Background(), request)\n}\n\n// RenameDoc\n// 文档重命名\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) RenameDocWithContext(ctx context.Context, request *RenameDocRequest) (response *RenameDocResponse, err error) {\n\tif request == nil {\n\t\trequest = NewRenameDocRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"RenameDoc\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"RenameDoc require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewRenameDocResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewRetryDocAuditRequest() (request *RetryDocAuditRequest) {\n\trequest = &RetryDocAuditRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"RetryDocAudit\")\n\n\treturn\n}\n\nfunc NewRetryDocAuditResponse() (response *RetryDocAuditResponse) {\n\tresponse = &RetryDocAuditResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// RetryDocAudit\n// 文档解析重试\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) RetryDocAudit(request *RetryDocAuditRequest) (response *RetryDocAuditResponse, err error) {\n\treturn c.RetryDocAuditWithContext(context.Background(), request)\n}\n\n// RetryDocAudit\n// 文档解析重试\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) RetryDocAuditWithContext(ctx context.Context, request *RetryDocAuditRequest) (response *RetryDocAuditResponse, err error) {\n\tif request == nil {\n\t\trequest = NewRetryDocAuditRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"RetryDocAudit\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"RetryDocAudit require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewRetryDocAuditResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewRetryDocParseRequest() (request *RetryDocParseRequest) {\n\trequest = &RetryDocParseRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"RetryDocParse\")\n\n\treturn\n}\n\nfunc NewRetryDocParseResponse() (response *RetryDocParseResponse) {\n\tresponse = &RetryDocParseResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// RetryDocParse\n// 文档解析重试\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) RetryDocParse(request *RetryDocParseRequest) (response *RetryDocParseResponse, err error) {\n\treturn c.RetryDocParseWithContext(context.Background(), request)\n}\n\n// RetryDocParse\n// 文档解析重试\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) RetryDocParseWithContext(ctx context.Context, request *RetryDocParseRequest) (response *RetryDocParseResponse, err error) {\n\tif request == nil {\n\t\trequest = NewRetryDocParseRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"RetryDocParse\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"RetryDocParse require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewRetryDocParseResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewRetryReleaseRequest() (request *RetryReleaseRequest) {\n\trequest = &RetryReleaseRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"RetryRelease\")\n\n\treturn\n}\n\nfunc NewRetryReleaseResponse() (response *RetryReleaseResponse) {\n\tresponse = &RetryReleaseResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// RetryRelease\n// 发布暂停后重试\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) RetryRelease(request *RetryReleaseRequest) (response *RetryReleaseResponse, err error) {\n\treturn c.RetryReleaseWithContext(context.Background(), request)\n}\n\n// RetryRelease\n// 发布暂停后重试\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) RetryReleaseWithContext(ctx context.Context, request *RetryReleaseRequest) (response *RetryReleaseResponse, err error) {\n\tif request == nil {\n\t\trequest = NewRetryReleaseRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"RetryRelease\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"RetryRelease require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewRetryReleaseResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewSaveDocRequest() (request *SaveDocRequest) {\n\trequest = &SaveDocRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"SaveDoc\")\n\n\treturn\n}\n\nfunc NewSaveDocResponse() (response *SaveDocResponse) {\n\tresponse = &SaveDocResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// SaveDoc\n// 知识库文档问答保存。\n//\n// 将文件存储到应用的知识库内需要三步：\n//\n// 1.获取临时密钥，参考[接口文档](https://cloud.tencent.com/document/product/1759/105050)。获取临时密钥不同参数组合权限不一样，可参考 [智能体开发平台操作 cos 指南](https://cloud.tencent.com/document/product/1759/116238)\n//\n// 2.调用腾讯云提供的 cos 存储接口，将文件存储到智能体开发平台 cos 中：具体可参考[ COS SDK 概览](https://cloud.tencent.com/document/product/436/6474), 注意使用的是临时密钥的方式操作 COS\n//\n// 3.调用本接口，将文件的基础信息存储到智能体开发平台中。\n//\n// 以上步骤可参考[文档](https://cloud.tencent.com/document/product/1759/108903)，文档最后有[代码demo](https://cloud.tencent.com/document/product/1759/108903#demo)，可作为参考。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) SaveDoc(request *SaveDocRequest) (response *SaveDocResponse, err error) {\n\treturn c.SaveDocWithContext(context.Background(), request)\n}\n\n// SaveDoc\n// 知识库文档问答保存。\n//\n// 将文件存储到应用的知识库内需要三步：\n//\n// 1.获取临时密钥，参考[接口文档](https://cloud.tencent.com/document/product/1759/105050)。获取临时密钥不同参数组合权限不一样，可参考 [智能体开发平台操作 cos 指南](https://cloud.tencent.com/document/product/1759/116238)\n//\n// 2.调用腾讯云提供的 cos 存储接口，将文件存储到智能体开发平台 cos 中：具体可参考[ COS SDK 概览](https://cloud.tencent.com/document/product/436/6474), 注意使用的是临时密钥的方式操作 COS\n//\n// 3.调用本接口，将文件的基础信息存储到智能体开发平台中。\n//\n// 以上步骤可参考[文档](https://cloud.tencent.com/document/product/1759/108903)，文档最后有[代码demo](https://cloud.tencent.com/document/product/1759/108903#demo)，可作为参考。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) SaveDocWithContext(ctx context.Context, request *SaveDocRequest) (response *SaveDocResponse, err error) {\n\tif request == nil {\n\t\trequest = NewSaveDocRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"SaveDoc\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"SaveDoc require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewSaveDocResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewStopDocParseRequest() (request *StopDocParseRequest) {\n\trequest = &StopDocParseRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"StopDocParse\")\n\n\treturn\n}\n\nfunc NewStopDocParseResponse() (response *StopDocParseResponse) {\n\tresponse = &StopDocParseResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// StopDocParse\n// 终止文档解析\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) StopDocParse(request *StopDocParseRequest) (response *StopDocParseResponse, err error) {\n\treturn c.StopDocParseWithContext(context.Background(), request)\n}\n\n// StopDocParse\n// 终止文档解析\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\nfunc (c *Client) StopDocParseWithContext(ctx context.Context, request *StopDocParseRequest) (response *StopDocParseResponse, err error) {\n\tif request == nil {\n\t\trequest = NewStopDocParseRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"StopDocParse\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"StopDocParse require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewStopDocParseResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewStopWorkflowRunRequest() (request *StopWorkflowRunRequest) {\n\trequest = &StopWorkflowRunRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"StopWorkflowRun\")\n\n\treturn\n}\n\nfunc NewStopWorkflowRunResponse() (response *StopWorkflowRunResponse) {\n\tresponse = &StopWorkflowRunResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// StopWorkflowRun\n// 此接口用来停止正在进行的工作流异步运行实例。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) StopWorkflowRun(request *StopWorkflowRunRequest) (response *StopWorkflowRunResponse, err error) {\n\treturn c.StopWorkflowRunWithContext(context.Background(), request)\n}\n\n// StopWorkflowRun\n// 此接口用来停止正在进行的工作流异步运行实例。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) StopWorkflowRunWithContext(ctx context.Context, request *StopWorkflowRunRequest) (response *StopWorkflowRunResponse, err error) {\n\tif request == nil {\n\t\trequest = NewStopWorkflowRunRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"StopWorkflowRun\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"StopWorkflowRun require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewStopWorkflowRunResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewUpdateSharedKnowledgeRequest() (request *UpdateSharedKnowledgeRequest) {\n\trequest = &UpdateSharedKnowledgeRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"UpdateSharedKnowledge\")\n\n\treturn\n}\n\nfunc NewUpdateSharedKnowledgeResponse() (response *UpdateSharedKnowledgeResponse) {\n\tresponse = &UpdateSharedKnowledgeResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// UpdateSharedKnowledge\n// 更新共享知识库。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) UpdateSharedKnowledge(request *UpdateSharedKnowledgeRequest) (response *UpdateSharedKnowledgeResponse, err error) {\n\treturn c.UpdateSharedKnowledgeWithContext(context.Background(), request)\n}\n\n// UpdateSharedKnowledge\n// 更新共享知识库。\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) UpdateSharedKnowledgeWithContext(ctx context.Context, request *UpdateSharedKnowledgeRequest) (response *UpdateSharedKnowledgeResponse, err error) {\n\tif request == nil {\n\t\trequest = NewUpdateSharedKnowledgeRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"UpdateSharedKnowledge\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"UpdateSharedKnowledge require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewUpdateSharedKnowledgeResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewUpdateVarRequest() (request *UpdateVarRequest) {\n\trequest = &UpdateVarRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"UpdateVar\")\n\n\treturn\n}\n\nfunc NewUpdateVarResponse() (response *UpdateVarResponse) {\n\tresponse = &UpdateVarResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// UpdateVar\n// 更新变量\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) UpdateVar(request *UpdateVarRequest) (response *UpdateVarResponse, err error) {\n\treturn c.UpdateVarWithContext(context.Background(), request)\n}\n\n// UpdateVar\n// 更新变量\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) UpdateVarWithContext(ctx context.Context, request *UpdateVarRequest) (response *UpdateVarResponse, err error) {\n\tif request == nil {\n\t\trequest = NewUpdateVarRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"UpdateVar\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"UpdateVar require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewUpdateVarResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewUploadAttributeLabelRequest() (request *UploadAttributeLabelRequest) {\n\trequest = &UploadAttributeLabelRequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"UploadAttributeLabel\")\n\n\treturn\n}\n\nfunc NewUploadAttributeLabelResponse() (response *UploadAttributeLabelResponse) {\n\tresponse = &UploadAttributeLabelResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// UploadAttributeLabel\n// 上传导入属性标签\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) UploadAttributeLabel(request *UploadAttributeLabelRequest) (response *UploadAttributeLabelResponse, err error) {\n\treturn c.UploadAttributeLabelWithContext(context.Background(), request)\n}\n\n// UploadAttributeLabel\n// 上传导入属性标签\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) UploadAttributeLabelWithContext(ctx context.Context, request *UploadAttributeLabelRequest) (response *UploadAttributeLabelResponse, err error) {\n\tif request == nil {\n\t\trequest = NewUploadAttributeLabelRequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"UploadAttributeLabel\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"UploadAttributeLabel require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewUploadAttributeLabelResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n\nfunc NewVerifyQARequest() (request *VerifyQARequest) {\n\trequest = &VerifyQARequest{\n\t\tBaseRequest: &tchttp.BaseRequest{},\n\t}\n\n\trequest.Init().WithApiInfo(\"lke\", APIVersion, \"VerifyQA\")\n\n\treturn\n}\n\nfunc NewVerifyQAResponse() (response *VerifyQAResponse) {\n\tresponse = &VerifyQAResponse{\n\t\tBaseResponse: &tchttp.BaseResponse{},\n\t}\n\treturn\n\n}\n\n// VerifyQA\n// 校验问答\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) VerifyQA(request *VerifyQARequest) (response *VerifyQAResponse, err error) {\n\treturn c.VerifyQAWithContext(context.Background(), request)\n}\n\n// VerifyQA\n// 校验问答\n//\n// 可能返回的错误码:\n//\n//\tFAILEDOPERATION = \"FailedOperation\"\n//\tMISSINGPARAMETER = \"MissingParameter\"\nfunc (c *Client) VerifyQAWithContext(ctx context.Context, request *VerifyQARequest) (response *VerifyQAResponse, err error) {\n\tif request == nil {\n\t\trequest = NewVerifyQARequest()\n\t}\n\tc.InitBaseRequest(&request.BaseRequest, \"lke\", APIVersion, \"VerifyQA\")\n\n\tif c.GetCredential() == nil {\n\t\treturn nil, errors.New(\"VerifyQA require credential\")\n\t}\n\n\trequest.SetContext(ctx)\n\n\tresponse = NewVerifyQAResponse()\n\terr = c.Send(request, response)\n\treturn\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/tencent/sdk/errors.go",
    "content": "// Copyright (c) 2017-2025 Tencent. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//    http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage tencent_sdk\n\nconst (\n\t// 此产品的特有错误码\n\n\t// 操作失败。\n\tFAILEDOPERATION = \"FailedOperation\"\n\n\t// 参数错误。\n\tINVALIDPARAMETER = \"InvalidParameter\"\n\n\t// 缺少参数错误。\n\tMISSINGPARAMETER = \"MissingParameter\"\n)\n"
  },
  {
    "path": "api/service/hub_adaptor/tencent/sdk/models.go",
    "content": "// Copyright (c) 2017-2025 Tencent. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//    http://www.apache.org/licenses/LICENSE-2.0\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage tencent_sdk\n\nimport (\n\ttcerr \"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors\"\n\ttchttp \"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http\"\n\t\"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/json\"\n)\n\ntype AICallConfig struct {\n\t// 启用语音互动功能\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tEnableVoiceInteract *bool `json:\"EnableVoiceInteract,omitnil,omitempty\" name:\"EnableVoiceInteract\"`\n\n\t// 启用语音通话\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tEnableVoiceCall *bool `json:\"EnableVoiceCall,omitnil,omitempty\" name:\"EnableVoiceCall\"`\n\n\t// 启用数智人\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tEnableDigitalHuman *bool `json:\"EnableDigitalHuman,omitnil,omitempty\" name:\"EnableDigitalHuman\"`\n\n\t// 音色配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tVoice *VoiceConfig `json:\"Voice,omitnil,omitempty\" name:\"Voice\"`\n\n\t// 数智人配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDigitalHuman *DigitalHumanConfig `json:\"DigitalHuman,omitnil,omitempty\" name:\"DigitalHuman\"`\n}\n\ntype Agent struct {\n\t// AgentID\n\tAgentId *string `json:\"AgentId,omitnil,omitempty\" name:\"AgentId\"`\n\n\t// WorkflowID，非空则当前Agent从workflow转换而来\n\tWorkflowId *string `json:\"WorkflowId,omitnil,omitempty\" name:\"WorkflowId\"`\n\n\t// Agent名称，同一个应用内，Agent名称不能重复\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// Agent图标url\n\tIconUrl *string `json:\"IconUrl,omitnil,omitempty\" name:\"IconUrl\"`\n\n\t// Agent指令；当该Agent被调用时，将作为“系统提示词”使用，描述Agent应执行的操作和响应方式\n\tInstructions *string `json:\"Instructions,omitnil,omitempty\" name:\"Instructions\"`\n\n\t// 当Agent作为转交目标时的描述，用于让其他Agent的LLM理解其功能和转交时机\n\tHandoffDescription *string `json:\"HandoffDescription,omitnil,omitempty\" name:\"HandoffDescription\"`\n\n\t// Agent可转交的子AgentId列表\n\tHandoffs []*string `json:\"Handoffs,omitnil,omitempty\" name:\"Handoffs\"`\n\n\t// Agent调用LLM时使用的模型配置\n\tModel *AgentModelInfo `json:\"Model,omitnil,omitempty\" name:\"Model\"`\n\n\t// Agent可使用的工具列表\n\tTools []*AgentToolInfo `json:\"Tools,omitnil,omitempty\" name:\"Tools\"`\n\n\t// Agent可使用的插件列表\n\tPlugins []*AgentPluginInfo `json:\"Plugins,omitnil,omitempty\" name:\"Plugins\"`\n\n\t// 当前Agent是否是启动Agent\n\tIsStartingAgent *bool `json:\"IsStartingAgent,omitnil,omitempty\" name:\"IsStartingAgent\"`\n\n\t// Agent类型; 0: 未指定类型; 1: 知识库检索Agent\n\tAgentType *uint64 `json:\"AgentType,omitnil,omitempty\" name:\"AgentType\"`\n\n\t// 0 自由转交，1 计划与执行\n\tAgentMode *int64 `json:\"AgentMode,omitnil,omitempty\" name:\"AgentMode\"`\n\n\t// 高级设置\n\tAdvancedConfig *AgentAdvancedConfig `json:\"AdvancedConfig,omitnil,omitempty\" name:\"AdvancedConfig\"`\n}\n\ntype AgentAdvancedConfig struct {\n\t// 是否开启澄清询问\n\tEnableClarification *bool `json:\"EnableClarification,omitnil,omitempty\" name:\"EnableClarification\"`\n\n\t// 思考模式，0为效果优先，1为速度优先\n\tThinkingMode *int64 `json:\"ThinkingMode,omitnil,omitempty\" name:\"ThinkingMode\"`\n\n\t// 最大推理轮数\n\tMaxReasoningRound *uint64 `json:\"MaxReasoningRound,omitnil,omitempty\" name:\"MaxReasoningRound\"`\n\n\t// 上下文轮数\n\tHistoryLimit *uint64 `json:\"HistoryLimit,omitnil,omitempty\" name:\"HistoryLimit\"`\n\n\t// 是否开启结构化输出\n\tEnableStructuredOutput *bool `json:\"EnableStructuredOutput,omitnil,omitempty\" name:\"EnableStructuredOutput\"`\n\n\t// 结构化输出配置\n\tStructuredOutputConfig *StructuredOutputConfig `json:\"StructuredOutputConfig,omitnil,omitempty\" name:\"StructuredOutputConfig\"`\n}\n\ntype AgentDebugInfo struct {\n\t// 工具、大模型的输入信息，json\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tInput *string `json:\"Input,omitnil,omitempty\" name:\"Input\"`\n\n\t// 工具、大模型的输出信息，json\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOutput *string `json:\"Output,omitnil,omitempty\" name:\"Output\"`\n\n\t// 模型名\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n}\n\ntype AgentInput struct {\n\t// 输入来源类型：0 用户输入，3 自定义变量（API参数）\n\tInputType *uint64 `json:\"InputType,omitnil,omitempty\" name:\"InputType\"`\n\n\t// 用户手写输入\n\tUserInputValue *AgentInputUserInputValue `json:\"UserInputValue,omitnil,omitempty\" name:\"UserInputValue\"`\n\n\t// 自定义变量（API参数）\n\tCustomVarId *string `json:\"CustomVarId,omitnil,omitempty\" name:\"CustomVarId\"`\n\n\t// 环境变量参数\n\tEnvVarId *string `json:\"EnvVarId,omitnil,omitempty\" name:\"EnvVarId\"`\n\n\t// 应用变量参数\n\tAppVarId *string `json:\"AppVarId,omitnil,omitempty\" name:\"AppVarId\"`\n\n\t// 系统参数\n\tSystemVariable *AgentInputSystemVariable `json:\"SystemVariable,omitnil,omitempty\" name:\"SystemVariable\"`\n}\n\ntype AgentInputSystemVariable struct {\n\t// 系统参数名\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 对话历史轮数的配置；如果Input是系统变量中的“对话历史”时才使用；\n\tDialogHistoryLimit *int64 `json:\"DialogHistoryLimit,omitnil,omitempty\" name:\"DialogHistoryLimit\"`\n}\n\ntype AgentInputUserInputValue struct {\n\t// 用户输入的值\n\tValues []*string `json:\"Values,omitnil,omitempty\" name:\"Values\"`\n}\n\ntype AgentKnowledge struct {\n\t// 知识库id\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 0-应用内知识库\n\t// 1-共享知识库\n\tKnowledgeType *int64 `json:\"KnowledgeType,omitnil,omitempty\" name:\"KnowledgeType\"`\n\n\t// 0-全部知识\n\t// 1-按文档和问答\n\t// 2-按标签\n\tFilter *int64 `json:\"Filter,omitnil,omitempty\" name:\"Filter\"`\n\n\t// 文档id\n\tDocBizIds []*string `json:\"DocBizIds,omitnil,omitempty\" name:\"DocBizIds\"`\n\n\t// true:包含所有问答\n\t// false:不包含问答\n\tAllQa *bool `json:\"AllQa,omitnil,omitempty\" name:\"AllQa\"`\n\n\t// 文档标签过滤器\n\tTag *AgentKnowledgeFilterTag `json:\"Tag,omitnil,omitempty\" name:\"Tag\"`\n}\n\ntype AgentKnowledgeAttrLabel struct {\n\t// 属性ID\n\tAttributeBizId *string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n\n\t// 标签值，标签值之间是或的关系，只有匹配的，才会进行知识检索，否则报检索不到\n\tInputs []*AgentInput `json:\"Inputs,omitnil,omitempty\" name:\"Inputs\"`\n}\n\ntype AgentKnowledgeFilter struct {\n\t// 知识检索筛选方式; 0: 全部知识; 1:按文档和问答; 2: 按标签\n\tFilterType *uint64 `json:\"FilterType,omitnil,omitempty\" name:\"FilterType\"`\n\n\t// 文档和问答过滤器\n\tDocAndAnswer *AgentKnowledgeFilterDocAndAnswer `json:\"DocAndAnswer,omitnil,omitempty\" name:\"DocAndAnswer\"`\n\n\t// 标签过滤器\n\tTag *AgentKnowledgeFilterTag `json:\"Tag,omitnil,omitempty\" name:\"Tag\"`\n\n\t// 知识库列表\n\tKnowledgeList []*AgentKnowledge `json:\"KnowledgeList,omitnil,omitempty\" name:\"KnowledgeList\"`\n\n\t// 是否检索全部知识\n\tAllKnowledge *bool `json:\"AllKnowledge,omitnil,omitempty\" name:\"AllKnowledge\"`\n}\n\ntype AgentKnowledgeFilterDocAndAnswer struct {\n\t// 文档ID列表\n\tDocBizIds []*string `json:\"DocBizIds,omitnil,omitempty\" name:\"DocBizIds\"`\n\n\t// 问答\n\tAllQa *bool `json:\"AllQa,omitnil,omitempty\" name:\"AllQa\"`\n}\n\ntype AgentKnowledgeFilterTag struct {\n\t// 标签之间的关系;0:AND, 1:OR\n\tOperator *uint64 `json:\"Operator,omitnil,omitempty\" name:\"Operator\"`\n\n\t// 标签\n\tLabels []*AgentKnowledgeAttrLabel `json:\"Labels,omitnil,omitempty\" name:\"Labels\"`\n}\n\ntype AgentKnowledgeQAPlugin struct {\n\t// 知识检索筛选范围\n\tFilter *AgentKnowledgeFilter `json:\"Filter,omitnil,omitempty\" name:\"Filter\"`\n}\n\ntype AgentMCPServerInfo struct {\n\t// mcp server URL地址\n\tMcpServerUrl *string `json:\"McpServerUrl,omitnil,omitempty\" name:\"McpServerUrl\"`\n\n\t// mcp server header信息\n\tHeaders []*AgentPluginHeader `json:\"Headers,omitnil,omitempty\" name:\"Headers\"`\n\n\t// 超时时间，单位秒\n\tTimeout *int64 `json:\"Timeout,omitnil,omitempty\" name:\"Timeout\"`\n\n\t// sse服务超时时间，单位秒\n\tSseReadTimeout *int64 `json:\"SseReadTimeout,omitnil,omitempty\" name:\"SseReadTimeout\"`\n\n\t// mcp server query信息\n\tQuery []*AgentPluginQuery `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n}\n\ntype AgentModelInfo struct {\n\t// 模型名称\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 模型别名\n\tModelAliasName *string `json:\"ModelAliasName,omitnil,omitempty\" name:\"ModelAliasName\"`\n\n\t// 模型温度\n\tTemperature *float64 `json:\"Temperature,omitnil,omitempty\" name:\"Temperature\"`\n\n\t// 模型TopP\n\tTopP *float64 `json:\"TopP,omitnil,omitempty\" name:\"TopP\"`\n\n\t// 模型是否可用\n\tIsEnabled *bool `json:\"IsEnabled,omitnil,omitempty\" name:\"IsEnabled\"`\n\n\t// 对话历史条数限制\n\tHistoryLimit *uint64 `json:\"HistoryLimit,omitnil,omitempty\" name:\"HistoryLimit\"`\n\n\t// 模型上下文长度字符限制\n\tModelContextWordsLimit *string `json:\"ModelContextWordsLimit,omitnil,omitempty\" name:\"ModelContextWordsLimit\"`\n\n\t// 指令长度字符限制\n\tInstructionsWordsLimit *uint64 `json:\"InstructionsWordsLimit,omitnil,omitempty\" name:\"InstructionsWordsLimit\"`\n\n\t// 单次会话最大推理轮数\n\tMaxReasoningRound *uint64 `json:\"MaxReasoningRound,omitnil,omitempty\" name:\"MaxReasoningRound\"`\n\n\t// 模型参数\n\tModelParams *ModelParams `json:\"ModelParams,omitnil,omitempty\" name:\"ModelParams\"`\n}\n\ntype AgentPluginHeader struct {\n\t// 参数名称\n\tParamName *string `json:\"ParamName,omitnil,omitempty\" name:\"ParamName\"`\n\n\t// 参数值\n\tParamValue *string `json:\"ParamValue,omitnil,omitempty\" name:\"ParamValue\"`\n\n\t// header参数配置是否隐藏不可见\n\tGlobalHidden *bool `json:\"GlobalHidden,omitnil,omitempty\" name:\"GlobalHidden\"`\n\n\t// 输入的值\n\tInput *AgentInput `json:\"Input,omitnil,omitempty\" name:\"Input\"`\n\n\t// 参数是否可以为空\n\tIsRequired *bool `json:\"IsRequired,omitnil,omitempty\" name:\"IsRequired\"`\n}\n\ntype AgentPluginInfo struct {\n\t// 插件id\n\tPluginId *string `json:\"PluginId,omitnil,omitempty\" name:\"PluginId\"`\n\n\t// 应用配置的插件header信息\n\tHeaders []*AgentPluginHeader `json:\"Headers,omitnil,omitempty\" name:\"Headers\"`\n\n\t// 插件调用LLM时使用的模型配置，一般用于指定知识库问答插件的生成模型\n\tModel *AgentModelInfo `json:\"Model,omitnil,omitempty\" name:\"Model\"`\n\n\t// 插件信息类型; 0: 未指定类型; 1: 知识库问答插件\n\tPluginInfoType *uint64 `json:\"PluginInfoType,omitnil,omitempty\" name:\"PluginInfoType\"`\n\n\t// 知识库问答插件配置\n\tKnowledgeQa *AgentKnowledgeQAPlugin `json:\"KnowledgeQa,omitnil,omitempty\" name:\"KnowledgeQa\"`\n\n\t// 是否使用一键授权\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tEnableRoleAuth *bool `json:\"EnableRoleAuth,omitnil,omitempty\" name:\"EnableRoleAuth\"`\n\n\t// 应用配置的插件query信息\n\tQuery []*AgentPluginQuery `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// MCP类型\n\tMcpType *uint64 `json:\"McpType,omitnil,omitempty\" name:\"McpType\"`\n}\n\ntype AgentPluginQuery struct {\n\t// 参数名称\n\tParamName *string `json:\"ParamName,omitnil,omitempty\" name:\"ParamName\"`\n\n\t// 参数值\n\tParamValue *string `json:\"ParamValue,omitnil,omitempty\" name:\"ParamValue\"`\n\n\t// query参数配置是否隐藏不可见，true-隐藏不可见，false-可见\n\tGlobalHidden *bool `json:\"GlobalHidden,omitnil,omitempty\" name:\"GlobalHidden\"`\n\n\t// 参数是否可以为空\n\tIsRequired *bool `json:\"IsRequired,omitnil,omitempty\" name:\"IsRequired\"`\n\n\t// 输入的值\n\tInput *AgentInput `json:\"Input,omitnil,omitempty\" name:\"Input\"`\n}\n\ntype AgentProcedure struct {\n\t// 索引\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIndex *uint64 `json:\"Index,omitnil,omitempty\" name:\"Index\"`\n\n\t// 执行过程英语名\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 中文名, 用于展示\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTitle *string `json:\"Title,omitnil,omitempty\" name:\"Title\"`\n\n\t// 状态常量: 使用中: processing, 成功: success, 失败: failed\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatus *string `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 图标\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIcon *string `json:\"Icon,omitnil,omitempty\" name:\"Icon\"`\n\n\t// Agent调试信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDebugging *AgentProcedureDebugging `json:\"Debugging,omitnil,omitempty\" name:\"Debugging\"`\n\n\t// 是否切换Agent，取值为\"main\"或者\"workflow\",不切换为空\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSwitch *string `json:\"Switch,omitnil,omitempty\" name:\"Switch\"`\n\n\t// 工作流名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflowName *string `json:\"WorkflowName,omitnil,omitempty\" name:\"WorkflowName\"`\n\n\t// 当前请求执行时间, 单位 ms\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tElapsed *uint64 `json:\"Elapsed,omitnil,omitempty\" name:\"Elapsed\"`\n\n\t// 工作流节点名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tNodeName *string `json:\"NodeName,omitnil,omitempty\" name:\"NodeName\"`\n\n\t// 用于展示思考放在哪个回复气泡中\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReplyIndex *uint64 `json:\"ReplyIndex,omitnil,omitempty\" name:\"ReplyIndex\"`\n\n\t// 主agent\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSourceAgentName *string `json:\"SourceAgentName,omitnil,omitempty\" name:\"SourceAgentName\"`\n\n\t// 挂号agent\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTargetAgentName *string `json:\"TargetAgentName,omitnil,omitempty\" name:\"TargetAgentName\"`\n\n\t// Agent的图标\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAgentIcon *string `json:\"AgentIcon,omitnil,omitempty\" name:\"AgentIcon\"`\n}\n\ntype AgentProcedureDebugging struct {\n\t// 模型思考内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tContent *string `json:\"Content,omitnil,omitempty\" name:\"Content\"`\n\n\t// 展示的具体文本内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDisplayContent *string `json:\"DisplayContent,omitnil,omitempty\" name:\"DisplayContent\"`\n\n\t// 1：搜索引擎参考来源；2：知识库参考来源\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDisplayType *uint64 `json:\"DisplayType,omitnil,omitempty\" name:\"DisplayType\"`\n\n\t// 搜索引擎展示的索引\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQuoteInfos []*QuoteInfo `json:\"QuoteInfos,omitnil,omitempty\" name:\"QuoteInfos\"`\n\n\t// 具体的参考来源\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReferences []*AgentReference `json:\"References,omitnil,omitempty\" name:\"References\"`\n\n\t// 展示正在执行的状态\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDisplayStatus *string `json:\"DisplayStatus,omitnil,omitempty\" name:\"DisplayStatus\"`\n\n\t// 云桌面的URL地址\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSandboxUrl *string `json:\"SandboxUrl,omitnil,omitempty\" name:\"SandboxUrl\"`\n\n\t// 云桌面里面通过浏览器打开的URL地址\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDisplayUrl *string `json:\"DisplayUrl,omitnil,omitempty\" name:\"DisplayUrl\"`\n}\n\ntype AgentReference struct {\n\t// 来源文档ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocId *string `json:\"DocId,omitnil,omitempty\" name:\"DocId\"`\n\n\t// id\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tId *string `json:\"Id,omitnil,omitempty\" name:\"Id\"`\n\n\t// 名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 类型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 链接\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUrl *string `json:\"Url,omitnil,omitempty\" name:\"Url\"`\n\n\t// 文档业务ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 文档名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocName *string `json:\"DocName,omitnil,omitempty\" name:\"DocName\"`\n\n\t// 问答业务ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 搜索引擎索引\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIndex *uint64 `json:\"Index,omitnil,omitempty\" name:\"Index\"`\n\n\t// 标题\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTitle *string `json:\"Title,omitnil,omitempty\" name:\"Title\"`\n\n\t// 知识库名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeName *string `json:\"KnowledgeName,omitnil,omitempty\" name:\"KnowledgeName\"`\n\n\t// 知识库标识\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n}\n\ntype AgentThought struct {\n\t// 会话 ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSessionId *string `json:\"SessionId,omitnil,omitempty\" name:\"SessionId\"`\n\n\t// 请求 ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n\n\t// 对应哪条会话, 会话 ID, 用于回答的消息存储使用, 可提前生成, 保存消息时使用\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRecordId *string `json:\"RecordId,omitnil,omitempty\" name:\"RecordId\"`\n\n\t// 当前请求执行时间, 单位 ms\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tElapsed *uint64 `json:\"Elapsed,omitnil,omitempty\" name:\"Elapsed\"`\n\n\t// 当前是否为工作流\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsWorkflow *bool `json:\"IsWorkflow,omitnil,omitempty\" name:\"IsWorkflow\"`\n\n\t// 如果当前是工作流，工作流名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflowName *string `json:\"WorkflowName,omitnil,omitempty\" name:\"WorkflowName\"`\n\n\t// 具体思考过程详情\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tProcedures []*AgentProcedure `json:\"Procedures,omitnil,omitempty\" name:\"Procedures\"`\n\n\t// TraceId\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTraceId *string `json:\"TraceId,omitnil,omitempty\" name:\"TraceId\"`\n\n\t// 文件信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFiles []*FileInfo `json:\"Files,omitnil,omitempty\" name:\"Files\"`\n}\n\ntype AgentToolInfo struct {\n\t// 插件id\n\tPluginId *string `json:\"PluginId,omitnil,omitempty\" name:\"PluginId\"`\n\n\t// 插件名称\n\tPluginName *string `json:\"PluginName,omitnil,omitempty\" name:\"PluginName\"`\n\n\t// 插件图标url\n\tIconUrl *string `json:\"IconUrl,omitnil,omitempty\" name:\"IconUrl\"`\n\n\t// 0 自定义插件\n\t// 1 官方插件\n\t// 2 第三方插件 目前用于第三方实现的mcp server\n\tPluginType *uint64 `json:\"PluginType,omitnil,omitempty\" name:\"PluginType\"`\n\n\t// 工具id\n\tToolId *string `json:\"ToolId,omitnil,omitempty\" name:\"ToolId\"`\n\n\t// 工具名称\n\tToolName *string `json:\"ToolName,omitnil,omitempty\" name:\"ToolName\"`\n\n\t// 工具描述\n\tToolDesc *string `json:\"ToolDesc,omitnil,omitempty\" name:\"ToolDesc\"`\n\n\t// 输入参数\n\tInputs []*AgentToolReqParam `json:\"Inputs,omitnil,omitempty\" name:\"Inputs\"`\n\n\t// 输出参数\n\tOutputs []*AgentToolRspParam `json:\"Outputs,omitnil,omitempty\" name:\"Outputs\"`\n\n\t// 创建方式，0:服务创建，1:代码创建，2:MCP创建\n\tCreateType *int64 `json:\"CreateType,omitnil,omitempty\" name:\"CreateType\"`\n\n\t// MCP插件的配置信息\n\tMcpServer *AgentMCPServerInfo `json:\"McpServer,omitnil,omitempty\" name:\"McpServer\"`\n\n\t// 该工具是否和知识库绑定\n\tIsBindingKnowledge *bool `json:\"IsBindingKnowledge,omitnil,omitempty\" name:\"IsBindingKnowledge\"`\n\n\t// 插件状态，1:可用，2:不可用\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// header信息\n\tHeaders []*AgentPluginHeader `json:\"Headers,omitnil,omitempty\" name:\"Headers\"`\n\n\t// NON_STREAMING: 非流式  STREAMIN: 流式\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCallingMethod *string `json:\"CallingMethod,omitnil,omitempty\" name:\"CallingMethod\"`\n\n\t// query信息\n\tQuery []*AgentPluginQuery `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 工具计费状态 0-不计费 1-可用 2-不可用（欠费、无资源等）\n\tFinanceStatus *int64 `json:\"FinanceStatus,omitnil,omitempty\" name:\"FinanceStatus\"`\n}\n\ntype AgentToolReqParam struct {\n\t// 参数名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 参数描述\n\tDesc *string `json:\"Desc,omitnil,omitempty\" name:\"Desc\"`\n\n\t// 参数类型，0:string, 1:int, 2:float，3:bool 4:object 5:array_string, 6:array_int, 7:array_float, 8:array_bool, 9:array_object\n\tType *int64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 参数是否必填\n\tIsRequired *bool `json:\"IsRequired,omitnil,omitempty\" name:\"IsRequired\"`\n\n\t// 参数默认值\n\tDefaultValue *string `json:\"DefaultValue,omitnil,omitempty\" name:\"DefaultValue\"`\n\n\t// 子参数,ParamType 是OBJECT 或 ARRAY<>类型有用\n\tSubParams []*AgentToolReqParam `json:\"SubParams,omitnil,omitempty\" name:\"SubParams\"`\n\n\t// 是否隐藏不可见\n\tGlobalHidden *bool `json:\"GlobalHidden,omitnil,omitempty\" name:\"GlobalHidden\"`\n\n\t// agent模式下模型是否可见\n\tAgentHidden *bool `json:\"AgentHidden,omitnil,omitempty\" name:\"AgentHidden\"`\n\n\t// 其中任意\n\tAnyOf []*AgentToolReqParam `json:\"AnyOf,omitnil,omitempty\" name:\"AnyOf\"`\n\n\t// 其中一个\n\tOneOf []*AgentToolReqParam `json:\"OneOf,omitnil,omitempty\" name:\"OneOf\"`\n\n\t// 输入\n\tInput *AgentInput `json:\"Input,omitnil,omitempty\" name:\"Input\"`\n}\n\ntype AgentToolRspParam struct {\n\t// 参数名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 参数描述\n\tDesc *string `json:\"Desc,omitnil,omitempty\" name:\"Desc\"`\n\n\t// 参数类型，0:string, 1:int, 2:float，3:bool 4:object 5:array_string, 6:array_int, 7:array_float, 8:array_bool, 9:array_object\n\tType *int64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 子参数,ParamType 是OBJECT 或 ARRAY<>类型有用\n\tSubParams []*AgentToolRspParam `json:\"SubParams,omitnil,omitempty\" name:\"SubParams\"`\n\n\t// agent模式下模型是否可见\n\tAgentHidden *bool `json:\"AgentHidden,omitnil,omitempty\" name:\"AgentHidden\"`\n\n\t// 是否隐藏不可见\n\tGlobalHidden *bool `json:\"GlobalHidden,omitnil,omitempty\" name:\"GlobalHidden\"`\n\n\t// COVER: 覆盖解析 INCREMENT:增量解析\n\tAnalysisMethod *string `json:\"AnalysisMethod,omitnil,omitempty\" name:\"AnalysisMethod\"`\n}\n\ntype ApiVarAttrInfo struct {\n\t// 自定义变量id\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tApiVarId *string `json:\"ApiVarId,omitnil,omitempty\" name:\"ApiVarId\"`\n\n\t// 标签id\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAttrBizId *string `json:\"AttrBizId,omitnil,omitempty\" name:\"AttrBizId\"`\n}\n\ntype AppBaseInfo struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppName *string `json:\"AppName,omitnil,omitempty\" name:\"AppName\"`\n}\n\ntype AppConfig struct {\n\t// 知识问答管理应用配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeQa *KnowledgeQaConfig `json:\"KnowledgeQa,omitnil,omitempty\" name:\"KnowledgeQa\"`\n\n\t// 知识摘要应用配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSummary *SummaryConfig `json:\"Summary,omitnil,omitempty\" name:\"Summary\"`\n\n\t// 标签提取应用配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tClassify *ClassifyConfig `json:\"Classify,omitnil,omitempty\" name:\"Classify\"`\n}\n\ntype AppInfo struct {\n\t// 应用类型；knowledge_qa-知识问答管理；summary-知识摘要；classifys-知识标签提取\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 应用类型描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppTypeDesc *string `json:\"AppTypeDesc,omitnil,omitempty\" name:\"AppTypeDesc\"`\n\n\t// 应用ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 应用头像\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAvatar *string `json:\"Avatar,omitnil,omitempty\" name:\"Avatar\"`\n\n\t// 应用描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDesc *string `json:\"Desc,omitnil,omitempty\" name:\"Desc\"`\n\n\t// 应用状态，1：未上线，2：运行中，3：停用\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppStatus *uint64 `json:\"AppStatus,omitnil,omitempty\" name:\"AppStatus\"`\n\n\t// 状态说明\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppStatusDesc *string `json:\"AppStatusDesc,omitnil,omitempty\" name:\"AppStatusDesc\"`\n\n\t// 修改时间\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 最后修改人\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOperator *string `json:\"Operator,omitnil,omitempty\" name:\"Operator\"`\n\n\t// 模型名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 生成模型别名\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModelAliasName *string `json:\"ModelAliasName,omitnil,omitempty\" name:\"ModelAliasName\"`\n\n\t// 应用模式 standard:标准模式, agent: agent模式，single_workflow：单工作流模式\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPattern *string `json:\"Pattern,omitnil,omitempty\" name:\"Pattern\"`\n\n\t// 思考模型别名\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tThoughtModelAliasName *string `json:\"ThoughtModelAliasName,omitnil,omitempty\" name:\"ThoughtModelAliasName\"`\n\n\t// 权限位信息\n\tPermissionIds []*string `json:\"PermissionIds,omitnil,omitempty\" name:\"PermissionIds\"`\n\n\t// 创建人昵称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCreator *string `json:\"Creator,omitnil,omitempty\" name:\"Creator\"`\n}\n\ntype AppModel struct {\n\t// 模型名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 模型描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDesc *string `json:\"Desc,omitnil,omitempty\" name:\"Desc\"`\n\n\t// 上下文指代轮次\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tContextLimit *uint64 `json:\"ContextLimit,omitnil,omitempty\" name:\"ContextLimit\"`\n\n\t// 模型别名\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAliasName *string `json:\"AliasName,omitnil,omitempty\" name:\"AliasName\"`\n\n\t// token余量\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTokenBalance *float64 `json:\"TokenBalance,omitnil,omitempty\" name:\"TokenBalance\"`\n\n\t// 是否使用上下文指代轮次\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsUseContext *bool `json:\"IsUseContext,omitnil,omitempty\" name:\"IsUseContext\"`\n\n\t// 上下文记忆轮数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tHistoryLimit *uint64 `json:\"HistoryLimit,omitnil,omitempty\" name:\"HistoryLimit\"`\n\n\t// 使用类型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUsageType *string `json:\"UsageType,omitnil,omitempty\" name:\"UsageType\"`\n\n\t// 模型温度\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTemperature *string `json:\"Temperature,omitnil,omitempty\" name:\"Temperature\"`\n\n\t// 模型TopP\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTopP *string `json:\"TopP,omitnil,omitempty\" name:\"TopP\"`\n\n\t// 模型资源状态 1：资源可用；2：资源已用尽\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tResourceStatus *uint64 `json:\"ResourceStatus,omitnil,omitempty\" name:\"ResourceStatus\"`\n\n\t// 模型参数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModelParams *ModelParams `json:\"ModelParams,omitnil,omitempty\" name:\"ModelParams\"`\n}\n\ntype AttrLabel struct {\n\t// 标签来源\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSource *uint64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 标签ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAttrBizId *string `json:\"AttrBizId,omitnil,omitempty\" name:\"AttrBizId\"`\n\n\t// 标签标识\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAttrKey *string `json:\"AttrKey,omitnil,omitempty\" name:\"AttrKey\"`\n\n\t// 标签名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAttrName *string `json:\"AttrName,omitnil,omitempty\" name:\"AttrName\"`\n\n\t// 标签值\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tLabels []*Label `json:\"Labels,omitnil,omitempty\" name:\"Labels\"`\n}\n\ntype AttrLabelDetail struct {\n\t// 标签ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAttrBizId *string `json:\"AttrBizId,omitnil,omitempty\" name:\"AttrBizId\"`\n\n\t// 标签标识\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAttrKey *string `json:\"AttrKey,omitnil,omitempty\" name:\"AttrKey\"`\n\n\t// 标签名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAttrName *string `json:\"AttrName,omitnil,omitempty\" name:\"AttrName\"`\n\n\t// 标签值名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tLabelNames []*string `json:\"LabelNames,omitnil,omitempty\" name:\"LabelNames\"`\n\n\t// 标签是否在更新中\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsUpdating *bool `json:\"IsUpdating,omitnil,omitempty\" name:\"IsUpdating\"`\n\n\t// 状态\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 状态描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatusDesc *string `json:\"StatusDesc,omitnil,omitempty\" name:\"StatusDesc\"`\n\n\t// 标签值总数\n\tLabelTotalCount *string `json:\"LabelTotalCount,omitnil,omitempty\" name:\"LabelTotalCount\"`\n}\n\ntype AttrLabelRefer struct {\n\t// 标签来源，1：标签\n\tSource *uint64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 标签ID\n\tAttributeBizId *string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n\n\t// 标签值ID\n\tLabelBizIds []*string `json:\"LabelBizIds,omitnil,omitempty\" name:\"LabelBizIds\"`\n}\n\ntype AttributeFilters struct {\n\t// 检索，属性或标签名称\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n}\n\ntype AttributeLabel struct {\n\t// 标准词ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tLabelBizId *string `json:\"LabelBizId,omitnil,omitempty\" name:\"LabelBizId\"`\n\n\t// 标准词名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tLabelName *string `json:\"LabelName,omitnil,omitempty\" name:\"LabelName\"`\n\n\t// 同义词名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSimilarLabels []*string `json:\"SimilarLabels,omitnil,omitempty\" name:\"SimilarLabels\"`\n}\n\ntype AttributeLabelRefByWorkflow struct {\n\t// 标签值id\n\tAttributeLabelBizId *string `json:\"AttributeLabelBizId,omitnil,omitempty\" name:\"AttributeLabelBizId\"`\n\n\t// 标签值引用的工作流列表\n\tWorkflowList []*WorkflowRef `json:\"WorkflowList,omitnil,omitempty\" name:\"WorkflowList\"`\n}\n\ntype BackgroundImageConfig struct {\n\t// 横图(pc)\n\tLandscapeImageUrl *string `json:\"LandscapeImageUrl,omitnil,omitempty\" name:\"LandscapeImageUrl\"`\n\n\t// 原始图\n\tOriginalImageUrl *string `json:\"OriginalImageUrl,omitnil,omitempty\" name:\"OriginalImageUrl\"`\n\n\t// 长图(手机)\n\tPortraitImageUrl *string `json:\"PortraitImageUrl,omitnil,omitempty\" name:\"PortraitImageUrl\"`\n\n\t// 主题色\n\tThemeColor *string `json:\"ThemeColor,omitnil,omitempty\" name:\"ThemeColor\"`\n\n\t// 亮度值\n\tBrightness *int64 `json:\"Brightness,omitnil,omitempty\" name:\"Brightness\"`\n}\n\ntype BaseConfig struct {\n\t// 应用名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 应用头像url，在CreateApp和ModifyApp中作为入参必填。\n\t// 作为入参传入说明：\n\t// 1. 传入的url图片限制为jpeg和png，大小限制为500KB，url链接需允许head请求。\n\t// 2. 如果用户没有对象存储，可使用“获取文件上传临时密钥”(DescribeStorageCredential)接口，获取cos临时密钥和上传路径，自行上传头像至cos中并获取访问链接。\n\tAvatar *string `json:\"Avatar,omitnil,omitempty\" name:\"Avatar\"`\n\n\t// 应用描述\n\tDesc *string `json:\"Desc,omitnil,omitempty\" name:\"Desc\"`\n}\n\ntype CallDetail struct {\n\t// 关联ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tId *string `json:\"Id,omitnil,omitempty\" name:\"Id\"`\n\n\t// 调用时间\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCallTime *string `json:\"CallTime,omitnil,omitempty\" name:\"CallTime\"`\n\n\t// 总token消耗\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTotalTokenUsage *float64 `json:\"TotalTokenUsage,omitnil,omitempty\" name:\"TotalTokenUsage\"`\n\n\t// 输入token消耗\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tInputTokenUsage *float64 `json:\"InputTokenUsage,omitnil,omitempty\" name:\"InputTokenUsage\"`\n\n\t// 输出token消耗\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOutputTokenUsage *float64 `json:\"OutputTokenUsage,omitnil,omitempty\" name:\"OutputTokenUsage\"`\n\n\t// 搜索服务调用次数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSearchUsage *uint64 `json:\"SearchUsage,omitnil,omitempty\" name:\"SearchUsage\"`\n\n\t// 模型名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 调用类型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCallType *string `json:\"CallType,omitnil,omitempty\" name:\"CallType\"`\n\n\t// 账号\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUinAccount *string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 应用名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppName *string `json:\"AppName,omitnil,omitempty\" name:\"AppName\"`\n\n\t// 总消耗页数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPageUsage *uint64 `json:\"PageUsage,omitnil,omitempty\" name:\"PageUsage\"`\n\n\t// 筛选子场景\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSubScene *string `json:\"SubScene,omitnil,omitempty\" name:\"SubScene\"`\n\n\t// 账单明细对应的自定义tag\n\tBillingTag *string `json:\"BillingTag,omitnil,omitempty\" name:\"BillingTag\"`\n}\n\ntype CateInfo struct {\n\t// 分类ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 分类名称\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 分类下的Record（如文档、同义词等）数量\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTotal *int64 `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 是否可新增\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCanAdd *bool `json:\"CanAdd,omitnil,omitempty\" name:\"CanAdd\"`\n\n\t// 是否可编辑\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCanEdit *bool `json:\"CanEdit,omitnil,omitempty\" name:\"CanEdit\"`\n\n\t// 是否可删除\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCanDelete *bool `json:\"CanDelete,omitnil,omitempty\" name:\"CanDelete\"`\n\n\t// 子分类\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tChildren []*CateInfo `json:\"Children,omitnil,omitempty\" name:\"Children\"`\n}\n\ntype ChannelListInfo struct {\n\t// 渠道类型 10000 微信订阅号 10001 微信服务号 10002 企微应用\n\tChannelType *uint64 `json:\"ChannelType,omitnil,omitempty\" name:\"ChannelType\"`\n\n\t// 渠道状态 1未发布 2运行中 3已下线\n\tChannelStatus *uint64 `json:\"ChannelStatus,omitnil,omitempty\" name:\"ChannelStatus\"`\n\n\t// 渠道名称\n\tChannelName *string `json:\"ChannelName,omitnil,omitempty\" name:\"ChannelName\"`\n\n\t// 渠道id 数据库主键\n\tChannelId *string `json:\"ChannelId,omitnil,omitempty\" name:\"ChannelId\"`\n\n\t// 备注\n\tComment *string `json:\"Comment,omitnil,omitempty\" name:\"Comment\"`\n\n\t// 更新时间\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 创建时间\n\tCreateTime *string `json:\"CreateTime,omitnil,omitempty\" name:\"CreateTime\"`\n\n\t// 最后更新人\n\tUpdatedUser *string `json:\"UpdatedUser,omitnil,omitempty\" name:\"UpdatedUser\"`\n\n\t// 智能体应用可见范围，public-所有人可见 private-仅自己可见 share-通过分享可见\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tYuanQiInfo *YuanQi `json:\"YuanQiInfo,omitnil,omitempty\" name:\"YuanQiInfo\"`\n}\n\n// Predefined struct for user\ntype CheckAttributeLabelExistRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 属性名称\n\tLabelName *string `json:\"LabelName,omitnil,omitempty\" name:\"LabelName\"`\n\n\t// 属性ID\n\tAttributeBizId *string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 滚动加载，最后一个属性标签ID\n\tLastLabelBizId *string `json:\"LastLabelBizId,omitnil,omitempty\" name:\"LastLabelBizId\"`\n}\n\ntype CheckAttributeLabelExistRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 属性名称\n\tLabelName *string `json:\"LabelName,omitnil,omitempty\" name:\"LabelName\"`\n\n\t// 属性ID\n\tAttributeBizId *string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 滚动加载，最后一个属性标签ID\n\tLastLabelBizId *string `json:\"LastLabelBizId,omitnil,omitempty\" name:\"LastLabelBizId\"`\n}\n\nfunc (r *CheckAttributeLabelExistRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CheckAttributeLabelExistRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"LabelName\")\n\tdelete(f, \"AttributeBizId\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"LastLabelBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CheckAttributeLabelExistRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CheckAttributeLabelExistResponseParams struct {\n\t// 是否存在\n\tIsExist *bool `json:\"IsExist,omitnil,omitempty\" name:\"IsExist\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CheckAttributeLabelExistResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CheckAttributeLabelExistResponseParams `json:\"Response\"`\n}\n\nfunc (r *CheckAttributeLabelExistResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CheckAttributeLabelExistResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CheckAttributeLabelReferRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 属性标签\n\tLabelBizId *string `json:\"LabelBizId,omitnil,omitempty\" name:\"LabelBizId\"`\n\n\t// 属性ID\n\tAttributeBizId []*string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n}\n\ntype CheckAttributeLabelReferRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 属性标签\n\tLabelBizId *string `json:\"LabelBizId,omitnil,omitempty\" name:\"LabelBizId\"`\n\n\t// 属性ID\n\tAttributeBizId []*string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n}\n\nfunc (r *CheckAttributeLabelReferRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CheckAttributeLabelReferRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"LabelBizId\")\n\tdelete(f, \"AttributeBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CheckAttributeLabelReferRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CheckAttributeLabelReferResponseParams struct {\n\t// 是否引用\n\tIsRefer *bool `json:\"IsRefer,omitnil,omitempty\" name:\"IsRefer\"`\n\n\t// 引用的工作流详情\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tList []*AttributeLabelRefByWorkflow `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CheckAttributeLabelReferResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CheckAttributeLabelReferResponseParams `json:\"Response\"`\n}\n\nfunc (r *CheckAttributeLabelReferResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CheckAttributeLabelReferResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype ClassifyConfig struct {\n\t// 模型配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModel *AppModel `json:\"Model,omitnil,omitempty\" name:\"Model\"`\n\n\t// 标签列表\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tLabels []*ClassifyLabel `json:\"Labels,omitnil,omitempty\" name:\"Labels\"`\n\n\t// 欢迎语，200字符以内\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tGreeting *string `json:\"Greeting,omitnil,omitempty\" name:\"Greeting\"`\n}\n\ntype ClassifyLabel struct {\n\t// 标签名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 标签描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDescription *string `json:\"Description,omitnil,omitempty\" name:\"Description\"`\n\n\t// 标签取值范围\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tValues []*string `json:\"Values,omitnil,omitempty\" name:\"Values\"`\n}\n\ntype Context struct {\n\t// 消息记录ID信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRecordBizId *string `json:\"RecordBizId,omitnil,omitempty\" name:\"RecordBizId\"`\n\n\t// 是否为用户\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsVisitor *bool `json:\"IsVisitor,omitnil,omitempty\" name:\"IsVisitor\"`\n\n\t// 昵称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tNickName *string `json:\"NickName,omitnil,omitempty\" name:\"NickName\"`\n\n\t// 头像\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAvatar *string `json:\"Avatar,omitnil,omitempty\" name:\"Avatar\"`\n\n\t// 消息内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tContent *string `json:\"Content,omitnil,omitempty\" name:\"Content\"`\n\n\t// 文档信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileInfos []*MsgFileInfo `json:\"FileInfos,omitnil,omitempty\" name:\"FileInfos\"`\n\n\t// 回复方式，15：澄清确认回复\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReplyMethod *uint64 `json:\"ReplyMethod,omitnil,omitempty\" name:\"ReplyMethod\"`\n}\n\n// Predefined struct for user\ntype CreateAppRequestParams struct {\n\t// 应用类型；knowledge_qa-知识问答管理\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 应用基础配置\n\tBaseConfig *BaseConfig `json:\"BaseConfig,omitnil,omitempty\" name:\"BaseConfig\"`\n\n\t// 应用模式 standard:标准模式, agent: agent模式，single_workflow：单工作流模式\n\tPattern *string `json:\"Pattern,omitnil,omitempty\" name:\"Pattern\"`\n\n\t// 智能体类型 dialogue 对话式智能体，wechat 公众号智能体\n\tAgentType *string `json:\"AgentType,omitnil,omitempty\" name:\"AgentType\"`\n}\n\ntype CreateAppRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用类型；knowledge_qa-知识问答管理\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 应用基础配置\n\tBaseConfig *BaseConfig `json:\"BaseConfig,omitnil,omitempty\" name:\"BaseConfig\"`\n\n\t// 应用模式 standard:标准模式, agent: agent模式，single_workflow：单工作流模式\n\tPattern *string `json:\"Pattern,omitnil,omitempty\" name:\"Pattern\"`\n\n\t// 智能体类型 dialogue 对话式智能体，wechat 公众号智能体\n\tAgentType *string `json:\"AgentType,omitnil,omitempty\" name:\"AgentType\"`\n}\n\nfunc (r *CreateAppRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateAppRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppType\")\n\tdelete(f, \"BaseConfig\")\n\tdelete(f, \"Pattern\")\n\tdelete(f, \"AgentType\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CreateAppRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateAppResponseParams struct {\n\t// 应用ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 判断账户应用列表权限是否是自定义的，用户交互提示\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsCustomList *bool `json:\"IsCustomList,omitnil,omitempty\" name:\"IsCustomList\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CreateAppResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CreateAppResponseParams `json:\"Response\"`\n}\n\nfunc (r *CreateAppResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateAppResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateAttributeLabelRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 标签名\n\tAttrName *string `json:\"AttrName,omitnil,omitempty\" name:\"AttrName\"`\n\n\t// 标签值\n\tLabels []*AttributeLabel `json:\"Labels,omitnil,omitempty\" name:\"Labels\"`\n\n\t// 标签标识（不生效，无需填写） 已作废\n\tAttrKey *string `json:\"AttrKey,omitnil,omitempty\" name:\"AttrKey\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype CreateAttributeLabelRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 标签名\n\tAttrName *string `json:\"AttrName,omitnil,omitempty\" name:\"AttrName\"`\n\n\t// 标签值\n\tLabels []*AttributeLabel `json:\"Labels,omitnil,omitempty\" name:\"Labels\"`\n\n\t// 标签标识（不生效，无需填写） 已作废\n\tAttrKey *string `json:\"AttrKey,omitnil,omitempty\" name:\"AttrKey\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *CreateAttributeLabelRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateAttributeLabelRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"AttrName\")\n\tdelete(f, \"Labels\")\n\tdelete(f, \"AttrKey\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CreateAttributeLabelRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateAttributeLabelResponseParams struct {\n\t// 标签ID\n\tAttrBizId *string `json:\"AttrBizId,omitnil,omitempty\" name:\"AttrBizId\"`\n\n\t// 标签值ID与名称\n\tLabels []*AttributeLabel `json:\"Labels,omitnil,omitempty\" name:\"Labels\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CreateAttributeLabelResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CreateAttributeLabelResponseParams `json:\"Response\"`\n}\n\nfunc (r *CreateAttributeLabelResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateAttributeLabelResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateDocCateRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 父级业务ID\n\tParentBizId *string `json:\"ParentBizId,omitnil,omitempty\" name:\"ParentBizId\"`\n\n\t// 分类名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n}\n\ntype CreateDocCateRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 父级业务ID\n\tParentBizId *string `json:\"ParentBizId,omitnil,omitempty\" name:\"ParentBizId\"`\n\n\t// 分类名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n}\n\nfunc (r *CreateDocCateRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateDocCateRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"ParentBizId\")\n\tdelete(f, \"Name\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CreateDocCateRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateDocCateResponseParams struct {\n\t// 是否可新增\n\tCanAdd *bool `json:\"CanAdd,omitnil,omitempty\" name:\"CanAdd\"`\n\n\t// 是否可编辑\n\tCanEdit *bool `json:\"CanEdit,omitnil,omitempty\" name:\"CanEdit\"`\n\n\t// 是否可删除\n\tCanDelete *bool `json:\"CanDelete,omitnil,omitempty\" name:\"CanDelete\"`\n\n\t// 分类业务ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CreateDocCateResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CreateDocCateResponseParams `json:\"Response\"`\n}\n\nfunc (r *CreateDocCateResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateDocCateResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateQACateRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 父级业务ID，创建顶级分类时传字符串\"0\"\n\tParentBizId *string `json:\"ParentBizId,omitnil,omitempty\" name:\"ParentBizId\"`\n\n\t// 分类名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n}\n\ntype CreateQACateRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 父级业务ID，创建顶级分类时传字符串\"0\"\n\tParentBizId *string `json:\"ParentBizId,omitnil,omitempty\" name:\"ParentBizId\"`\n\n\t// 分类名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n}\n\nfunc (r *CreateQACateRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateQACateRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"ParentBizId\")\n\tdelete(f, \"Name\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CreateQACateRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateQACateResponseParams struct {\n\t// 是否可新增\n\tCanAdd *bool `json:\"CanAdd,omitnil,omitempty\" name:\"CanAdd\"`\n\n\t// 是否可编辑\n\tCanEdit *bool `json:\"CanEdit,omitnil,omitempty\" name:\"CanEdit\"`\n\n\t// 是否可删除\n\tCanDelete *bool `json:\"CanDelete,omitnil,omitempty\" name:\"CanDelete\"`\n\n\t// 分类业务ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CreateQACateResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CreateQACateResponseParams `json:\"Response\"`\n}\n\nfunc (r *CreateQACateResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateQACateResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateQARequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 问题\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 答案\n\tAnswer *string `json:\"Answer,omitnil,omitempty\" name:\"Answer\"`\n\n\t// 标签适用范围 1：全部，2：按条件\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 自定义参数\n\tCustomParam *string `json:\"CustomParam,omitnil,omitempty\" name:\"CustomParam\"`\n\n\t// 标签引用\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 有效开始时间，unix时间戳\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix时间戳，0代表永久有效\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 相似问内容\n\tSimilarQuestions []*string `json:\"SimilarQuestions,omitnil,omitempty\" name:\"SimilarQuestions\"`\n\n\t// 问题描述\n\tQuestionDesc *string `json:\"QuestionDesc,omitnil,omitempty\" name:\"QuestionDesc\"`\n}\n\ntype CreateQARequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 问题\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 答案\n\tAnswer *string `json:\"Answer,omitnil,omitempty\" name:\"Answer\"`\n\n\t// 标签适用范围 1：全部，2：按条件\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 自定义参数\n\tCustomParam *string `json:\"CustomParam,omitnil,omitempty\" name:\"CustomParam\"`\n\n\t// 标签引用\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 有效开始时间，unix时间戳\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix时间戳，0代表永久有效\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 相似问内容\n\tSimilarQuestions []*string `json:\"SimilarQuestions,omitnil,omitempty\" name:\"SimilarQuestions\"`\n\n\t// 问题描述\n\tQuestionDesc *string `json:\"QuestionDesc,omitnil,omitempty\" name:\"QuestionDesc\"`\n}\n\nfunc (r *CreateQARequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateQARequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"Question\")\n\tdelete(f, \"Answer\")\n\tdelete(f, \"AttrRange\")\n\tdelete(f, \"CustomParam\")\n\tdelete(f, \"AttrLabels\")\n\tdelete(f, \"DocBizId\")\n\tdelete(f, \"CateBizId\")\n\tdelete(f, \"ExpireStart\")\n\tdelete(f, \"ExpireEnd\")\n\tdelete(f, \"SimilarQuestions\")\n\tdelete(f, \"QuestionDesc\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CreateQARequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateQAResponseParams struct {\n\t// 问答ID\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CreateQAResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CreateQAResponseParams `json:\"Response\"`\n}\n\nfunc (r *CreateQAResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateQAResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateRejectedQuestionRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 拒答问题\n\t//\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 拒答问题来源的数据源唯一id， - 拒答来源于不满意回复  2 - 拒答来源于手动添加\n\tBusinessSource *uint64 `json:\"BusinessSource,omitnil,omitempty\" name:\"BusinessSource\"`\n\n\t// 拒答问题来源的数据源唯一id\n\t//\n\tBusinessId *string `json:\"BusinessId,omitnil,omitempty\" name:\"BusinessId\"`\n}\n\ntype CreateRejectedQuestionRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 拒答问题\n\t//\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 拒答问题来源的数据源唯一id， - 拒答来源于不满意回复  2 - 拒答来源于手动添加\n\tBusinessSource *uint64 `json:\"BusinessSource,omitnil,omitempty\" name:\"BusinessSource\"`\n\n\t// 拒答问题来源的数据源唯一id\n\t//\n\tBusinessId *string `json:\"BusinessId,omitnil,omitempty\" name:\"BusinessId\"`\n}\n\nfunc (r *CreateRejectedQuestionRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateRejectedQuestionRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"Question\")\n\tdelete(f, \"BusinessSource\")\n\tdelete(f, \"BusinessId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CreateRejectedQuestionRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateRejectedQuestionResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CreateRejectedQuestionResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CreateRejectedQuestionResponseParams `json:\"Response\"`\n}\n\nfunc (r *CreateRejectedQuestionResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateRejectedQuestionResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateReleaseRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 发布描述\n\tDesc *string `json:\"Desc,omitnil,omitempty\" name:\"Desc\"`\n\n\t// 渠道业务ID，从ListChannel接口的响应字段ChannelId获取\n\tChannelBizIds []*string `json:\"ChannelBizIds,omitnil,omitempty\" name:\"ChannelBizIds\"`\n}\n\ntype CreateReleaseRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 发布描述\n\tDesc *string `json:\"Desc,omitnil,omitempty\" name:\"Desc\"`\n\n\t// 渠道业务ID，从ListChannel接口的响应字段ChannelId获取\n\tChannelBizIds []*string `json:\"ChannelBizIds,omitnil,omitempty\" name:\"ChannelBizIds\"`\n}\n\nfunc (r *CreateReleaseRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateReleaseRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"Desc\")\n\tdelete(f, \"ChannelBizIds\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CreateReleaseRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateReleaseResponseParams struct {\n\t// 发布ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CreateReleaseResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CreateReleaseResponseParams `json:\"Response\"`\n}\n\nfunc (r *CreateReleaseResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateReleaseResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateSharedKnowledgeRequestParams struct {\n\t// 共享知识库名称，字符数量范围：[1, 50]\n\tKnowledgeName *string `json:\"KnowledgeName,omitnil,omitempty\" name:\"KnowledgeName\"`\n\n\t// 共享知识库描述，字符数量上限2000\n\tKnowledgeDescription *string `json:\"KnowledgeDescription,omitnil,omitempty\" name:\"KnowledgeDescription\"`\n\n\t// Embedding模型，字符数量上限128\n\t//\n\t// Deprecated: EmbeddingModel is deprecated.\n\tEmbeddingModel *string `json:\"EmbeddingModel,omitnil,omitempty\" name:\"EmbeddingModel\"`\n\n\t// 共享知识库类型，0普通，1公众号\n\tKnowledgeType *int64 `json:\"KnowledgeType,omitnil,omitempty\" name:\"KnowledgeType\"`\n}\n\ntype CreateSharedKnowledgeRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 共享知识库名称，字符数量范围：[1, 50]\n\tKnowledgeName *string `json:\"KnowledgeName,omitnil,omitempty\" name:\"KnowledgeName\"`\n\n\t// 共享知识库描述，字符数量上限2000\n\tKnowledgeDescription *string `json:\"KnowledgeDescription,omitnil,omitempty\" name:\"KnowledgeDescription\"`\n\n\t// Embedding模型，字符数量上限128\n\tEmbeddingModel *string `json:\"EmbeddingModel,omitnil,omitempty\" name:\"EmbeddingModel\"`\n\n\t// 共享知识库类型，0普通，1公众号\n\tKnowledgeType *int64 `json:\"KnowledgeType,omitnil,omitempty\" name:\"KnowledgeType\"`\n}\n\nfunc (r *CreateSharedKnowledgeRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateSharedKnowledgeRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"KnowledgeName\")\n\tdelete(f, \"KnowledgeDescription\")\n\tdelete(f, \"EmbeddingModel\")\n\tdelete(f, \"KnowledgeType\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CreateSharedKnowledgeRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateSharedKnowledgeResponseParams struct {\n\t// 共享知识库业务ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CreateSharedKnowledgeResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CreateSharedKnowledgeResponseParams `json:\"Response\"`\n}\n\nfunc (r *CreateSharedKnowledgeResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateSharedKnowledgeResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateVarRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 变量名称，不允许重复，最大支持50个字符\n\tVarName *string `json:\"VarName,omitnil,omitempty\" name:\"VarName\"`\n\n\t// 变量描述，最大支持120个字符\n\tVarDesc *string `json:\"VarDesc,omitnil,omitempty\" name:\"VarDesc\"`\n\n\t// 变量类型定义，支持类型如下：(STRING,INT,FLOAT,BOOL,OBJECT,ARRAY_STRING,ARRAY_INT,ARRAY_FLOAT,ARRAY_BOOL,ARRAY_OBJECT,FILE,DOCUMENT,IMAGE,AUDIO);传输过程是json字符串，标签中仅支持\"STRING\"类型使用\n\tVarType *string `json:\"VarType,omitnil,omitempty\" name:\"VarType\"`\n\n\t// 自定义变量默认值\n\tVarDefaultValue *string `json:\"VarDefaultValue,omitnil,omitempty\" name:\"VarDefaultValue\"`\n\n\t// 自定义变量文件默认名称\n\tVarDefaultFileName *string `json:\"VarDefaultFileName,omitnil,omitempty\" name:\"VarDefaultFileName\"`\n\n\t// 参数类型\n\tVarModuleType *uint64 `json:\"VarModuleType,omitnil,omitempty\" name:\"VarModuleType\"`\n}\n\ntype CreateVarRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 变量名称，不允许重复，最大支持50个字符\n\tVarName *string `json:\"VarName,omitnil,omitempty\" name:\"VarName\"`\n\n\t// 变量描述，最大支持120个字符\n\tVarDesc *string `json:\"VarDesc,omitnil,omitempty\" name:\"VarDesc\"`\n\n\t// 变量类型定义，支持类型如下：(STRING,INT,FLOAT,BOOL,OBJECT,ARRAY_STRING,ARRAY_INT,ARRAY_FLOAT,ARRAY_BOOL,ARRAY_OBJECT,FILE,DOCUMENT,IMAGE,AUDIO);传输过程是json字符串，标签中仅支持\"STRING\"类型使用\n\tVarType *string `json:\"VarType,omitnil,omitempty\" name:\"VarType\"`\n\n\t// 自定义变量默认值\n\tVarDefaultValue *string `json:\"VarDefaultValue,omitnil,omitempty\" name:\"VarDefaultValue\"`\n\n\t// 自定义变量文件默认名称\n\tVarDefaultFileName *string `json:\"VarDefaultFileName,omitnil,omitempty\" name:\"VarDefaultFileName\"`\n\n\t// 参数类型\n\tVarModuleType *uint64 `json:\"VarModuleType,omitnil,omitempty\" name:\"VarModuleType\"`\n}\n\nfunc (r *CreateVarRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateVarRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"VarName\")\n\tdelete(f, \"VarDesc\")\n\tdelete(f, \"VarType\")\n\tdelete(f, \"VarDefaultValue\")\n\tdelete(f, \"VarDefaultFileName\")\n\tdelete(f, \"VarModuleType\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CreateVarRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateVarResponseParams struct {\n\t// 变量ID\n\tVarId *string `json:\"VarId,omitnil,omitempty\" name:\"VarId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CreateVarResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CreateVarResponseParams `json:\"Response\"`\n}\n\nfunc (r *CreateVarResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateVarResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateWorkflowRunRequestParams struct {\n\t// 运行环境。0: 测试环境； 1: 正式环境\n\tRunEnv *uint64 `json:\"RunEnv,omitnil,omitempty\" name:\"RunEnv\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 用户输入的内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// API参数配置\n\tCustomVariables []*CustomVariable `json:\"CustomVariables,omitnil,omitempty\" name:\"CustomVariables\"`\n}\n\ntype CreateWorkflowRunRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 运行环境。0: 测试环境； 1: 正式环境\n\tRunEnv *uint64 `json:\"RunEnv,omitnil,omitempty\" name:\"RunEnv\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 用户输入的内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// API参数配置\n\tCustomVariables []*CustomVariable `json:\"CustomVariables,omitnil,omitempty\" name:\"CustomVariables\"`\n}\n\nfunc (r *CreateWorkflowRunRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateWorkflowRunRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"RunEnv\")\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"Query\")\n\tdelete(f, \"CustomVariables\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"CreateWorkflowRunRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype CreateWorkflowRunResponseParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 工作流运行实例的ID\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n\n\t// 运行环境。0: 测试环境； 1: 正式环境\n\tRunEnv *uint64 `json:\"RunEnv,omitnil,omitempty\" name:\"RunEnv\"`\n\n\t// 用户输入的内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// API参数配置\n\tCustomVariables []*CustomVariable `json:\"CustomVariables,omitnil,omitempty\" name:\"CustomVariables\"`\n\n\t// 创建时间（毫秒时间戳）\n\tCreateTime *string `json:\"CreateTime,omitnil,omitempty\" name:\"CreateTime\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype CreateWorkflowRunResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *CreateWorkflowRunResponseParams `json:\"Response\"`\n}\n\nfunc (r *CreateWorkflowRunResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *CreateWorkflowRunResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype Credentials struct {\n\t// token\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tToken *string `json:\"Token,omitnil,omitempty\" name:\"Token\"`\n\n\t// 临时证书密钥ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTmpSecretId *string `json:\"TmpSecretId,omitnil,omitempty\" name:\"TmpSecretId\"`\n\n\t// 临时证书密钥Key\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTmpSecretKey *string `json:\"TmpSecretKey,omitnil,omitempty\" name:\"TmpSecretKey\"`\n\n\t// 临时证书appid\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppId *uint64 `json:\"AppId,omitnil,omitempty\" name:\"AppId\"`\n}\n\ntype CustomVariable struct {\n\t// 参数名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 参数的值\n\tValue *string `json:\"Value,omitnil,omitempty\" name:\"Value\"`\n}\n\n// Predefined struct for user\ntype DeleteAgentRequestParams struct {\n\t// Agent的ID\n\tAgentId *string `json:\"AgentId,omitnil,omitempty\" name:\"AgentId\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n}\n\ntype DeleteAgentRequest struct {\n\t*tchttp.BaseRequest\n\n\t// Agent的ID\n\tAgentId *string `json:\"AgentId,omitnil,omitempty\" name:\"AgentId\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n}\n\nfunc (r *DeleteAgentRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteAgentRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AgentId\")\n\tdelete(f, \"AppBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DeleteAgentRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteAgentResponseParams struct {\n\t// Agent的ID\n\tAgentId *string `json:\"AgentId,omitnil,omitempty\" name:\"AgentId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DeleteAgentResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DeleteAgentResponseParams `json:\"Response\"`\n}\n\nfunc (r *DeleteAgentResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteAgentResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteAppRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用类型；knowledge_qa-知识问答管理；summary-知识摘要；classifys-知识标签提取\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n}\n\ntype DeleteAppRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用类型；knowledge_qa-知识问答管理；summary-知识摘要；classifys-知识标签提取\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n}\n\nfunc (r *DeleteAppRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteAppRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"AppType\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DeleteAppRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteAppResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DeleteAppResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DeleteAppResponseParams `json:\"Response\"`\n}\n\nfunc (r *DeleteAppResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteAppResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteAttributeLabelRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 标签ID\n\tAttributeBizIds []*string `json:\"AttributeBizIds,omitnil,omitempty\" name:\"AttributeBizIds\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype DeleteAttributeLabelRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 标签ID\n\tAttributeBizIds []*string `json:\"AttributeBizIds,omitnil,omitempty\" name:\"AttributeBizIds\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *DeleteAttributeLabelRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteAttributeLabelRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"AttributeBizIds\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DeleteAttributeLabelRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteAttributeLabelResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DeleteAttributeLabelResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DeleteAttributeLabelResponseParams `json:\"Response\"`\n}\n\nfunc (r *DeleteAttributeLabelResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteAttributeLabelResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteDocCateRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 分类业务ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\ntype DeleteDocCateRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 分类业务ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\nfunc (r *DeleteDocCateRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteDocCateRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"CateBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DeleteDocCateRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteDocCateResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DeleteDocCateResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DeleteDocCateResponseParams `json:\"Response\"`\n}\n\nfunc (r *DeleteDocCateResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteDocCateResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteDocRequestParams struct {\n\t// 文档业务ID列表\n\tDocBizIds []*string `json:\"DocBizIds,omitnil,omitempty\" name:\"DocBizIds\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\ntype DeleteDocRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 文档业务ID列表\n\tDocBizIds []*string `json:\"DocBizIds,omitnil,omitempty\" name:\"DocBizIds\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\nfunc (r *DeleteDocRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteDocRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"DocBizIds\")\n\tdelete(f, \"BotBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DeleteDocRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteDocResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DeleteDocResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DeleteDocResponseParams `json:\"Response\"`\n}\n\nfunc (r *DeleteDocResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteDocResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteQACateRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 分类业务ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\ntype DeleteQACateRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 分类业务ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\nfunc (r *DeleteQACateRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteQACateRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"CateBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DeleteQACateRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteQACateResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DeleteQACateResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DeleteQACateResponseParams `json:\"Response\"`\n}\n\nfunc (r *DeleteQACateResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteQACateResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteQARequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 问答ID\n\tQaBizIds []*string `json:\"QaBizIds,omitnil,omitempty\" name:\"QaBizIds\"`\n}\n\ntype DeleteQARequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 问答ID\n\tQaBizIds []*string `json:\"QaBizIds,omitnil,omitempty\" name:\"QaBizIds\"`\n}\n\nfunc (r *DeleteQARequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteQARequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"QaBizIds\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DeleteQARequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteQAResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DeleteQAResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DeleteQAResponseParams `json:\"Response\"`\n}\n\nfunc (r *DeleteQAResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteQAResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteRejectedQuestionRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 拒答问题来源的数据源唯一id\n\t//\n\t//\n\tRejectedBizIds []*string `json:\"RejectedBizIds,omitnil,omitempty\" name:\"RejectedBizIds\"`\n}\n\ntype DeleteRejectedQuestionRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 拒答问题来源的数据源唯一id\n\t//\n\t//\n\tRejectedBizIds []*string `json:\"RejectedBizIds,omitnil,omitempty\" name:\"RejectedBizIds\"`\n}\n\nfunc (r *DeleteRejectedQuestionRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteRejectedQuestionRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"RejectedBizIds\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DeleteRejectedQuestionRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteRejectedQuestionResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DeleteRejectedQuestionResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DeleteRejectedQuestionResponseParams `json:\"Response\"`\n}\n\nfunc (r *DeleteRejectedQuestionResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteRejectedQuestionResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteSharedKnowledgeRequestParams struct {\n\t// 共享知识库业务ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n}\n\ntype DeleteSharedKnowledgeRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 共享知识库业务ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n}\n\nfunc (r *DeleteSharedKnowledgeRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteSharedKnowledgeRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"KnowledgeBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DeleteSharedKnowledgeRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteSharedKnowledgeResponseParams struct {\n\t// 共享知识库业务ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DeleteSharedKnowledgeResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DeleteSharedKnowledgeResponseParams `json:\"Response\"`\n}\n\nfunc (r *DeleteSharedKnowledgeResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteSharedKnowledgeResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteVarRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 变量ID\n\tVarId *string `json:\"VarId,omitnil,omitempty\" name:\"VarId\"`\n\n\t// 参数类型\n\tVarModuleType *uint64 `json:\"VarModuleType,omitnil,omitempty\" name:\"VarModuleType\"`\n}\n\ntype DeleteVarRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 变量ID\n\tVarId *string `json:\"VarId,omitnil,omitempty\" name:\"VarId\"`\n\n\t// 参数类型\n\tVarModuleType *uint64 `json:\"VarModuleType,omitnil,omitempty\" name:\"VarModuleType\"`\n}\n\nfunc (r *DeleteVarRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteVarRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"VarId\")\n\tdelete(f, \"VarModuleType\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DeleteVarRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DeleteVarResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DeleteVarResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DeleteVarResponseParams `json:\"Response\"`\n}\n\nfunc (r *DeleteVarResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DeleteVarResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeAppAgentListRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n}\n\ntype DescribeAppAgentListRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n}\n\nfunc (r *DescribeAppAgentListRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeAppAgentListRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeAppAgentListRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeAppAgentListResponseParams struct {\n\t// 入口启动AgentID\n\tStaringAgentId *string `json:\"StaringAgentId,omitnil,omitempty\" name:\"StaringAgentId\"`\n\n\t// 应用Agent信息列表\n\tAgents []*Agent `json:\"Agents,omitnil,omitempty\" name:\"Agents\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeAppAgentListResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeAppAgentListResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeAppAgentListResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeAppAgentListResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeAppRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用类型；knowledge_qa-知识问答管理；summary-知识摘要；classifys-知识标签提取\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 是否发布后的配置\n\tIsRelease *bool `json:\"IsRelease,omitnil,omitempty\" name:\"IsRelease\"`\n}\n\ntype DescribeAppRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用类型；knowledge_qa-知识问答管理；summary-知识摘要；classifys-知识标签提取\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 是否发布后的配置\n\tIsRelease *bool `json:\"IsRelease,omitnil,omitempty\" name:\"IsRelease\"`\n}\n\nfunc (r *DescribeAppRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeAppRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"AppType\")\n\tdelete(f, \"IsRelease\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeAppRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeAppResponseParams struct {\n\t// 应用 ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用类型；knowledge_qa-知识问答管理；summary-知识摘要；classifys-知识标签提取\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 应用类型说明\n\tAppTypeDesc *string `json:\"AppTypeDesc,omitnil,omitempty\" name:\"AppTypeDesc\"`\n\n\t// 应用类型说明\n\tBaseConfig *BaseConfig `json:\"BaseConfig,omitnil,omitempty\" name:\"BaseConfig\"`\n\n\t// 应用配置\n\tAppConfig *AppConfig `json:\"AppConfig,omitnil,omitempty\" name:\"AppConfig\"`\n\n\t// 头像是否在申诉中\n\tAvatarInAppeal *bool `json:\"AvatarInAppeal,omitnil,omitempty\" name:\"AvatarInAppeal\"`\n\n\t// 角色描述是否在申诉中\n\tRoleInAppeal *bool `json:\"RoleInAppeal,omitnil,omitempty\" name:\"RoleInAppeal\"`\n\n\t// 名称是否在申诉中\n\tNameInAppeal *bool `json:\"NameInAppeal,omitnil,omitempty\" name:\"NameInAppeal\"`\n\n\t// 欢迎语是否在申诉中\n\tGreetingInAppeal *bool `json:\"GreetingInAppeal,omitnil,omitempty\" name:\"GreetingInAppeal\"`\n\n\t// 未知问题回复语是否在申诉中\n\tBareAnswerInAppeal *bool `json:\"BareAnswerInAppeal,omitnil,omitempty\" name:\"BareAnswerInAppeal\"`\n\n\t// 应用appKey\n\tAppKey *string `json:\"AppKey,omitnil,omitempty\" name:\"AppKey\"`\n\n\t// 应用状态，1：未上线，2：运行中，3：停用\n\tAppStatus *uint64 `json:\"AppStatus,omitnil,omitempty\" name:\"AppStatus\"`\n\n\t// 状态说明\n\tAppStatusDesc *string `json:\"AppStatusDesc,omitnil,omitempty\" name:\"AppStatusDesc\"`\n\n\t// 应用是否在复制中\n\tIsCopying *bool `json:\"IsCopying,omitnil,omitempty\" name:\"IsCopying\"`\n\n\t// 智能体类型 dialogue 对话式智能体，wechat 公众号智能体\n\tAgentType *string `json:\"AgentType,omitnil,omitempty\" name:\"AgentType\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeAppResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeAppResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeAppResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeAppResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeAttributeLabelRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 属性ID\n\tAttributeBizId *string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n\n\t// 每次加载的数量\n\tLimit *uint64 `json:\"Limit,omitnil,omitempty\" name:\"Limit\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 查询标签或相似标签\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 滚动加载游标的标签ID\n\tLastLabelBizId *string `json:\"LastLabelBizId,omitnil,omitempty\" name:\"LastLabelBizId\"`\n\n\t// 查询范围 all(或者传空):标准词和相似词 standard:标准词 similar:相似词\n\tQueryScope *string `json:\"QueryScope,omitnil,omitempty\" name:\"QueryScope\"`\n}\n\ntype DescribeAttributeLabelRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 属性ID\n\tAttributeBizId *string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n\n\t// 每次加载的数量\n\tLimit *uint64 `json:\"Limit,omitnil,omitempty\" name:\"Limit\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 查询标签或相似标签\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 滚动加载游标的标签ID\n\tLastLabelBizId *string `json:\"LastLabelBizId,omitnil,omitempty\" name:\"LastLabelBizId\"`\n\n\t// 查询范围 all(或者传空):标准词和相似词 standard:标准词 similar:相似词\n\tQueryScope *string `json:\"QueryScope,omitnil,omitempty\" name:\"QueryScope\"`\n}\n\nfunc (r *DescribeAttributeLabelRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeAttributeLabelRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"AttributeBizId\")\n\tdelete(f, \"Limit\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"Query\")\n\tdelete(f, \"LastLabelBizId\")\n\tdelete(f, \"QueryScope\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeAttributeLabelRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeAttributeLabelResponseParams struct {\n\t// 属性ID\n\tAttributeBizId *string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n\n\t// 属性标识\n\tAttrKey *string `json:\"AttrKey,omitnil,omitempty\" name:\"AttrKey\"`\n\n\t// 属性名称\n\tAttrName *string `json:\"AttrName,omitnil,omitempty\" name:\"AttrName\"`\n\n\t// 标签数量\n\tLabelNumber *string `json:\"LabelNumber,omitnil,omitempty\" name:\"LabelNumber\"`\n\n\t// 标签名称\n\tLabels []*AttributeLabel `json:\"Labels,omitnil,omitempty\" name:\"Labels\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeAttributeLabelResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeAttributeLabelResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeAttributeLabelResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeAttributeLabelResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeCallStatsGraphRequestParams struct {\n\t// uin\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 子业务类型\n\tSubBizType *string `json:\"SubBizType,omitnil,omitempty\" name:\"SubBizType\"`\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 筛选子场景(文档解析场景使用)\n\tSubScenes []*string `json:\"SubScenes,omitnil,omitempty\" name:\"SubScenes\"`\n\n\t// 应用类型(knowledge_qa应用管理， shared_knowlege 共享知识库)\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\ntype DescribeCallStatsGraphRequest struct {\n\t*tchttp.BaseRequest\n\n\t// uin\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 子业务类型\n\tSubBizType *string `json:\"SubBizType,omitnil,omitempty\" name:\"SubBizType\"`\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 筛选子场景(文档解析场景使用)\n\tSubScenes []*string `json:\"SubScenes,omitnil,omitempty\" name:\"SubScenes\"`\n\n\t// 应用类型(knowledge_qa应用管理， shared_knowlege 共享知识库)\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\nfunc (r *DescribeCallStatsGraphRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeCallStatsGraphRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"UinAccount\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"SubBizType\")\n\tdelete(f, \"ModelName\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"AppBizIds\")\n\tdelete(f, \"SubScenes\")\n\tdelete(f, \"AppType\")\n\tdelete(f, \"SpaceId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeCallStatsGraphRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeCallStatsGraphResponseParams struct {\n\t// 接口调用次数统计信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tList []*Stat `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeCallStatsGraphResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeCallStatsGraphResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeCallStatsGraphResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeCallStatsGraphResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeConcurrencyUsageGraphRequestParams struct {\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// uin\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 子业务类型\n\tSubBizType *string `json:\"SubBizType,omitnil,omitempty\" name:\"SubBizType\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\ntype DescribeConcurrencyUsageGraphRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// uin\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 子业务类型\n\tSubBizType *string `json:\"SubBizType,omitnil,omitempty\" name:\"SubBizType\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\nfunc (r *DescribeConcurrencyUsageGraphRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeConcurrencyUsageGraphRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"ModelName\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"UinAccount\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"SubBizType\")\n\tdelete(f, \"AppBizIds\")\n\tdelete(f, \"SpaceId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeConcurrencyUsageGraphRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeConcurrencyUsageGraphResponseParams struct {\n\t// X轴: 时间区域；根据查询条件的粒度返回“分/小时/日”两种区间范围\n\tX []*string `json:\"X,omitnil,omitempty\" name:\"X\"`\n\n\t// 可用并发y轴坐标\n\tAvailableY []*int64 `json:\"AvailableY,omitnil,omitempty\" name:\"AvailableY\"`\n\n\t// 成功调用并发y轴坐标\n\tSuccessCallY []*int64 `json:\"SuccessCallY,omitnil,omitempty\" name:\"SuccessCallY\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeConcurrencyUsageGraphResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeConcurrencyUsageGraphResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeConcurrencyUsageGraphResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeConcurrencyUsageGraphResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeConcurrencyUsageRequestParams struct {\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\ntype DescribeConcurrencyUsageRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\nfunc (r *DescribeConcurrencyUsageRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeConcurrencyUsageRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"ModelName\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"AppBizIds\")\n\tdelete(f, \"SpaceId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeConcurrencyUsageRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeConcurrencyUsageResponseParams struct {\n\t// 可用并发数上限\n\tAvailableConcurrency *uint64 `json:\"AvailableConcurrency,omitnil,omitempty\" name:\"AvailableConcurrency\"`\n\n\t// 并发峰值\n\tConcurrencyPeak *uint64 `json:\"ConcurrencyPeak,omitnil,omitempty\" name:\"ConcurrencyPeak\"`\n\n\t// 超出可用并发数上限的次数\n\tExceedUsageTime *uint64 `json:\"ExceedUsageTime,omitnil,omitempty\" name:\"ExceedUsageTime\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeConcurrencyUsageResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeConcurrencyUsageResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeConcurrencyUsageResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeConcurrencyUsageResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeDocRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n}\n\ntype DescribeDocRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n}\n\nfunc (r *DescribeDocRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeDocRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"DocBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeDocRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeDocResponseParams struct {\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 文件名称\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文件类型\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// cos路径\n\tCosUrl *string `json:\"CosUrl,omitnil,omitempty\" name:\"CosUrl\"`\n\n\t// 更新时间\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 文档状态： 1-未生成 2-生成中 3-生成成功 4-生成失败 5-删除中 6-删除成功 7-审核中 8-审核失败 9-审核成功 10-待发布 11-发布中 12-已发布 13-学习中 14-学习失败 15-更新中 16-更新失败 17-解析中 18-解析失败 19-导入失败 20-已过期 21-超量失效 22-超量失效恢复\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 文档状态描述\n\tStatusDesc *string `json:\"StatusDesc,omitnil,omitempty\" name:\"StatusDesc\"`\n\n\t// 生成失败原因\n\tReason *string `json:\"Reason,omitnil,omitempty\" name:\"Reason\"`\n\n\t// 答案中是否引用\n\tIsRefer *bool `json:\"IsRefer,omitnil,omitempty\" name:\"IsRefer\"`\n\n\t// 问答对数量\n\tQaNum *int64 `json:\"QaNum,omitnil,omitempty\" name:\"QaNum\"`\n\n\t// 是否删除\n\tIsDeleted *bool `json:\"IsDeleted,omitnil,omitempty\" name:\"IsDeleted\"`\n\n\t// 文档来源\n\tSource *int64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 文档来源描述\n\tSourceDesc *string `json:\"SourceDesc,omitnil,omitempty\" name:\"SourceDesc\"`\n\n\t// 是否允许重新生成\n\tIsAllowRestart *bool `json:\"IsAllowRestart,omitnil,omitempty\" name:\"IsAllowRestart\"`\n\n\t// qa是否已删除\n\tIsDeletedQa *bool `json:\"IsDeletedQa,omitnil,omitempty\" name:\"IsDeletedQa\"`\n\n\t// 问答是否生成中\n\tIsCreatingQa *bool `json:\"IsCreatingQa,omitnil,omitempty\" name:\"IsCreatingQa\"`\n\n\t// 是否允许删除\n\tIsAllowDelete *bool `json:\"IsAllowDelete,omitnil,omitempty\" name:\"IsAllowDelete\"`\n\n\t// 是否允许操作引用开关\n\tIsAllowRefer *bool `json:\"IsAllowRefer,omitnil,omitempty\" name:\"IsAllowRefer\"`\n\n\t// 是否生成过问答\n\tIsCreatedQa *bool `json:\"IsCreatedQa,omitnil,omitempty\" name:\"IsCreatedQa\"`\n\n\t// 文档字符量\n\tDocCharSize *string `json:\"DocCharSize,omitnil,omitempty\" name:\"DocCharSize\"`\n\n\t// 是否允许编辑\n\tIsAllowEdit *bool `json:\"IsAllowEdit,omitnil,omitempty\" name:\"IsAllowEdit\"`\n\n\t// 标签适用范围 1：全部，2：按条件范围\n\tAttrRange *int64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 标签\n\tAttrLabels []*AttrLabel `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 文档是否停用，false:未停用，true:已停用\n\tIsDisabled *bool `json:\"IsDisabled,omitnil,omitempty\" name:\"IsDisabled\"`\n\n\t// 是否支持下载\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsDownload *bool `json:\"IsDownload,omitnil,omitempty\" name:\"IsDownload\"`\n\n\t// 自定义切分规则\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSplitRule *string `json:\"SplitRule,omitnil,omitempty\" name:\"SplitRule\"`\n\n\t// 文档更新频率\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUpdatePeriodInfo *UpdatePeriodInfo `json:\"UpdatePeriodInfo,omitnil,omitempty\" name:\"UpdatePeriodInfo\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeDocResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeDocResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeDocResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeDocResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeKnowledgeUsagePieGraphRequestParams struct {\n\t// 应用ID数组\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 空间列表\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\ntype DescribeKnowledgeUsagePieGraphRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID数组\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 空间列表\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\nfunc (r *DescribeKnowledgeUsagePieGraphRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeKnowledgeUsagePieGraphRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizIds\")\n\tdelete(f, \"SpaceId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeKnowledgeUsagePieGraphRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeKnowledgeUsagePieGraphResponseParams struct {\n\t// 所有应用已用的字符总数\n\tAvailableCharSize *string `json:\"AvailableCharSize,omitnil,omitempty\" name:\"AvailableCharSize\"`\n\n\t// 应用饼图详情列表\n\tList []*KnowledgeCapacityPieGraphDetail `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeKnowledgeUsagePieGraphResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeKnowledgeUsagePieGraphResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeKnowledgeUsagePieGraphResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeKnowledgeUsagePieGraphResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeKnowledgeUsageRequestParams struct {\n}\n\ntype DescribeKnowledgeUsageRequest struct {\n\t*tchttp.BaseRequest\n}\n\nfunc (r *DescribeKnowledgeUsageRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeKnowledgeUsageRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeKnowledgeUsageRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeKnowledgeUsageResponseParams struct {\n\t// 可用字符数上限\n\tAvailableCharSize *string `json:\"AvailableCharSize,omitnil,omitempty\" name:\"AvailableCharSize\"`\n\n\t// 超过可用字符数上限的字符数\n\tExceedCharSize *string `json:\"ExceedCharSize,omitnil,omitempty\" name:\"ExceedCharSize\"`\n\n\t// 知识库使用字符总数\n\tUsedCharSize *string `json:\"UsedCharSize,omitnil,omitempty\" name:\"UsedCharSize\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeKnowledgeUsageResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeKnowledgeUsageResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeKnowledgeUsageResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeKnowledgeUsageResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeNodeRunRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 节点运行实例ID\n\tNodeRunId *string `json:\"NodeRunId,omitnil,omitempty\" name:\"NodeRunId\"`\n}\n\ntype DescribeNodeRunRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 节点运行实例ID\n\tNodeRunId *string `json:\"NodeRunId,omitnil,omitempty\" name:\"NodeRunId\"`\n}\n\nfunc (r *DescribeNodeRunRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeNodeRunRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"NodeRunId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeNodeRunRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeNodeRunResponseParams struct {\n\t// 节点运行实例详情\n\tNodeRun *NodeRunDetail `json:\"NodeRun,omitnil,omitempty\" name:\"NodeRun\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeNodeRunResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeNodeRunResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeNodeRunResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeNodeRunResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeQARequestParams struct {\n\t// QA业务ID\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\ntype DescribeQARequest struct {\n\t*tchttp.BaseRequest\n\n\t// QA业务ID\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\nfunc (r *DescribeQARequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeQARequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"QaBizId\")\n\tdelete(f, \"BotBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeQARequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeQAResponseParams struct {\n\t// QA业务ID\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 问题\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 答案\n\tAnswer *string `json:\"Answer,omitnil,omitempty\" name:\"Answer\"`\n\n\t// 自定义参数\n\tCustomParam *string `json:\"CustomParam,omitnil,omitempty\" name:\"CustomParam\"`\n\n\t// 来源 1-文档生成问答对  2-批量导入问答对  3-单条手动录入问答对\n\tSource *uint64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 来源描述\n\tSourceDesc *string `json:\"SourceDesc,omitnil,omitempty\" name:\"SourceDesc\"`\n\n\t// 更新时间\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 状态 <br>1-未校验  2-未发布 3-发布中 4-已发布  5-发布失败 6-不采纳 7-审核中  8-审核失败  9-审核失败申诉后人工审核中  11-审核失败申诉后人工审核不通过  12-已过期  13-超量失效  14-超量失效恢复 19-学习中  20-学习失败\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 状态描述\n\tStatusDesc *string `json:\"StatusDesc,omitnil,omitempty\" name:\"StatusDesc\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 是否允许校验\n\tIsAllowAccept *bool `json:\"IsAllowAccept,omitnil,omitempty\" name:\"IsAllowAccept\"`\n\n\t// 是否允许删除\n\tIsAllowDelete *bool `json:\"IsAllowDelete,omitnil,omitempty\" name:\"IsAllowDelete\"`\n\n\t// 是否允许编辑\n\tIsAllowEdit *bool `json:\"IsAllowEdit,omitnil,omitempty\" name:\"IsAllowEdit\"`\n\n\t// 文档id\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 文档名称\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文档类型\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// 分片ID\n\tSegmentBizId *string `json:\"SegmentBizId,omitnil,omitempty\" name:\"SegmentBizId\"`\n\n\t// 分片内容\n\tPageContent *string `json:\"PageContent,omitnil,omitempty\" name:\"PageContent\"`\n\n\t// 分片高亮内容\n\tHighlights []*Highlight `json:\"Highlights,omitnil,omitempty\" name:\"Highlights\"`\n\n\t// 分片内容\n\tOrgData *string `json:\"OrgData,omitnil,omitempty\" name:\"OrgData\"`\n\n\t// 标签适用范围\n\tAttrRange *int64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 标签\n\tAttrLabels []*AttrLabel `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 有效开始时间，unix时间戳\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix时间戳，0代表永久有效\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 相似问列表信息\n\tSimilarQuestions []*SimilarQuestion `json:\"SimilarQuestions,omitnil,omitempty\" name:\"SimilarQuestions\"`\n\n\t// 问题和答案文本审核状态 1审核失败\n\tQaAuditStatus *uint64 `json:\"QaAuditStatus,omitnil,omitempty\" name:\"QaAuditStatus\"`\n\n\t// 答案中的图片审核状态 1审核失败\n\tPicAuditStatus *uint64 `json:\"PicAuditStatus,omitnil,omitempty\" name:\"PicAuditStatus\"`\n\n\t// 答案中的视频审核状态 1审核失败\n\tVideoAuditStatus *uint64 `json:\"VideoAuditStatus,omitnil,omitempty\" name:\"VideoAuditStatus\"`\n\n\t// 问题描述\n\tQuestionDesc *string `json:\"QuestionDesc,omitnil,omitempty\" name:\"QuestionDesc\"`\n\n\t// 问答是否停用，false:未停用，true已停用\n\tIsDisabled *bool `json:\"IsDisabled,omitnil,omitempty\" name:\"IsDisabled\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeQAResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeQAResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeQAResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeQAResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeReferRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 引用ID\n\tReferBizIds []*string `json:\"ReferBizIds,omitnil,omitempty\" name:\"ReferBizIds\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype DescribeReferRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 引用ID\n\tReferBizIds []*string `json:\"ReferBizIds,omitnil,omitempty\" name:\"ReferBizIds\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *DescribeReferRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeReferRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"ReferBizIds\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeReferRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeReferResponseParams struct {\n\t// 引用列表\n\tList []*ReferDetail `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeReferResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeReferResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeReferResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeReferResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeReleaseInfoRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\ntype DescribeReleaseInfoRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\nfunc (r *DescribeReleaseInfoRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeReleaseInfoRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeReleaseInfoRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeReleaseInfoResponseParams struct {\n\t// 最后发布时间\n\tLastTime *string `json:\"LastTime,omitnil,omitempty\" name:\"LastTime\"`\n\n\t// 发布状态 ， 1-待发布 , 2-发布中 , 3-发布成功 , 4-发布失败 , 5-审核中 , 6-审核成功 , 7-审核失败 , 8-发布成功回调处理中 , 9-发布暂停 , 10-申诉审核中 , 11-申诉审核通过 , 12-申诉审核不通过\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 是否编辑过, 当为true的时候表示可以发布\n\tIsUpdated *bool `json:\"IsUpdated,omitnil,omitempty\" name:\"IsUpdated\"`\n\n\t// 失败原因\n\tMsg *string `json:\"Msg,omitnil,omitempty\" name:\"Msg\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeReleaseInfoResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeReleaseInfoResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeReleaseInfoResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeReleaseInfoResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeReleaseRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 发布详情\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n}\n\ntype DescribeReleaseRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 发布详情\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n}\n\nfunc (r *DescribeReleaseRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeReleaseRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"ReleaseBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeReleaseRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeReleaseResponseParams struct {\n\t// 创建时间\n\tCreateTime *string `json:\"CreateTime,omitnil,omitempty\" name:\"CreateTime\"`\n\n\t// 发布描述\n\tDescription *string `json:\"Description,omitnil,omitempty\" name:\"Description\"`\n\n\t// 发布状态(1待发布 2发布中 3发布成功 4发布失败 5发布中(审核中) 6发布中(审核完成) 7发布失败(审核失败) 9发布暂停)\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 发布状态描述\n\tStatusDesc *string `json:\"StatusDesc,omitnil,omitempty\" name:\"StatusDesc\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeReleaseResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeReleaseResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeReleaseResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeReleaseResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeRobotBizIDByAppKeyRequestParams struct {\n\t// 应用appkey\n\tAppKey *string `json:\"AppKey,omitnil,omitempty\" name:\"AppKey\"`\n}\n\ntype DescribeRobotBizIDByAppKeyRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用appkey\n\tAppKey *string `json:\"AppKey,omitnil,omitempty\" name:\"AppKey\"`\n}\n\nfunc (r *DescribeRobotBizIDByAppKeyRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeRobotBizIDByAppKeyRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppKey\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeRobotBizIDByAppKeyRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeRobotBizIDByAppKeyResponseParams struct {\n\t// 应用业务ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeRobotBizIDByAppKeyResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeRobotBizIDByAppKeyResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeRobotBizIDByAppKeyResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeRobotBizIDByAppKeyResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeSearchStatsGraphRequestParams struct {\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// uin列表\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 子业务类型\n\tSubBizType *string `json:\"SubBizType,omitnil,omitempty\" name:\"SubBizType\"`\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\ntype DescribeSearchStatsGraphRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// uin列表\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 子业务类型\n\tSubBizType *string `json:\"SubBizType,omitnil,omitempty\" name:\"SubBizType\"`\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\nfunc (r *DescribeSearchStatsGraphRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeSearchStatsGraphRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"UinAccount\")\n\tdelete(f, \"SubBizType\")\n\tdelete(f, \"ModelName\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"AppBizIds\")\n\tdelete(f, \"SpaceId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeSearchStatsGraphRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeSearchStatsGraphResponseParams struct {\n\t// 统计结果\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tList []*Stat `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeSearchStatsGraphResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeSearchStatsGraphResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeSearchStatsGraphResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeSearchStatsGraphResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeSegmentsRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档片段ID\n\tSegBizId []*string `json:\"SegBizId,omitnil,omitempty\" name:\"SegBizId\"`\n}\n\ntype DescribeSegmentsRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档片段ID\n\tSegBizId []*string `json:\"SegBizId,omitnil,omitempty\" name:\"SegBizId\"`\n}\n\nfunc (r *DescribeSegmentsRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeSegmentsRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"SegBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeSegmentsRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeSegmentsResponseParams struct {\n\t// 片段列表\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tList []*DocSegment `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeSegmentsResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeSegmentsResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeSegmentsResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeSegmentsResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeSharedKnowledgeRequestParams struct {\n\t// 共享知识库业务ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n}\n\ntype DescribeSharedKnowledgeRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 共享知识库业务ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n}\n\nfunc (r *DescribeSharedKnowledgeRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeSharedKnowledgeRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"KnowledgeBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeSharedKnowledgeRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeSharedKnowledgeResponseParams struct {\n\t// 知识库详情列表\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tInfo *KnowledgeDetailInfo `json:\"Info,omitnil,omitempty\" name:\"Info\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeSharedKnowledgeResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeSharedKnowledgeResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeSharedKnowledgeResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeSharedKnowledgeResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeStorageCredentialRequestParams struct {\n\t// 应用ID，参数非必填不代表不需要填写，下面不同的参数组合会获取到不同的权限，具体请参考 https://cloud.tencent.com/document/product/1759/116238\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文件类型,正常的文件名类型后缀，例如 xlsx、pdf、 docx、png 等\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// IsPublic用于上传文件或图片时选择场景，当上传对话端图片时IsPublic为true，上传文件（包括文档库文件/图片等和对话端文件）时IsPublic为false\n\tIsPublic *bool `json:\"IsPublic,omitnil,omitempty\" name:\"IsPublic\"`\n\n\t// 存储类型: offline:离线文件，realtime:实时文件；为空默认为offline\n\tTypeKey *string `json:\"TypeKey,omitnil,omitempty\" name:\"TypeKey\"`\n}\n\ntype DescribeStorageCredentialRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID，参数非必填不代表不需要填写，下面不同的参数组合会获取到不同的权限，具体请参考 https://cloud.tencent.com/document/product/1759/116238\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文件类型,正常的文件名类型后缀，例如 xlsx、pdf、 docx、png 等\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// IsPublic用于上传文件或图片时选择场景，当上传对话端图片时IsPublic为true，上传文件（包括文档库文件/图片等和对话端文件）时IsPublic为false\n\tIsPublic *bool `json:\"IsPublic,omitnil,omitempty\" name:\"IsPublic\"`\n\n\t// 存储类型: offline:离线文件，realtime:实时文件；为空默认为offline\n\tTypeKey *string `json:\"TypeKey,omitnil,omitempty\" name:\"TypeKey\"`\n}\n\nfunc (r *DescribeStorageCredentialRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeStorageCredentialRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"FileType\")\n\tdelete(f, \"IsPublic\")\n\tdelete(f, \"TypeKey\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeStorageCredentialRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeStorageCredentialResponseParams struct {\n\t// 密钥信息\n\tCredentials *Credentials `json:\"Credentials,omitnil,omitempty\" name:\"Credentials\"`\n\n\t// 失效时间\n\tExpiredTime *int64 `json:\"ExpiredTime,omitnil,omitempty\" name:\"ExpiredTime\"`\n\n\t// 开始时间\n\tStartTime *int64 `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 对象存储桶\n\tBucket *string `json:\"Bucket,omitnil,omitempty\" name:\"Bucket\"`\n\n\t// 对象存储可用区\n\tRegion *string `json:\"Region,omitnil,omitempty\" name:\"Region\"`\n\n\t// 文件存储目录\n\tFilePath *string `json:\"FilePath,omitnil,omitempty\" name:\"FilePath\"`\n\n\t// 存储类型\n\tType *string `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 主号\n\tCorpUin *string `json:\"CorpUin,omitnil,omitempty\" name:\"CorpUin\"`\n\n\t// 图片存储目录\n\tImagePath *string `json:\"ImagePath,omitnil,omitempty\" name:\"ImagePath\"`\n\n\t// 上传存储路径，到具体文件\n\tUploadPath *string `json:\"UploadPath,omitnil,omitempty\" name:\"UploadPath\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeStorageCredentialResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeStorageCredentialResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeStorageCredentialResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeStorageCredentialResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeTokenUsageGraphRequestParams struct {\n\t// 腾讯云主账号\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 知识引擎子业务类型:  FileParse(文档解析)、Embedding、Rewrite(多轮改写)、 Concurrency(并发)、KnowledgeSummary(知识总结)   KnowledgeQA(知识问答)、KnowledgeCapacity(知识库容量)、SearchEngine(搜索引擎)\n\tSubBizType *string `json:\"SubBizType,omitnil,omitempty\" name:\"SubBizType\"`\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 应用类型(knowledge_qa应用管理， shared_knowlege 共享知识库)\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 筛选子场景\n\tSubScenes []*string `json:\"SubScenes,omitnil,omitempty\" name:\"SubScenes\"`\n}\n\ntype DescribeTokenUsageGraphRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 腾讯云主账号\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 知识引擎子业务类型:  FileParse(文档解析)、Embedding、Rewrite(多轮改写)、 Concurrency(并发)、KnowledgeSummary(知识总结)   KnowledgeQA(知识问答)、KnowledgeCapacity(知识库容量)、SearchEngine(搜索引擎)\n\tSubBizType *string `json:\"SubBizType,omitnil,omitempty\" name:\"SubBizType\"`\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 应用类型(knowledge_qa应用管理， shared_knowlege 共享知识库)\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 筛选子场景\n\tSubScenes []*string `json:\"SubScenes,omitnil,omitempty\" name:\"SubScenes\"`\n}\n\nfunc (r *DescribeTokenUsageGraphRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeTokenUsageGraphRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"UinAccount\")\n\tdelete(f, \"SubBizType\")\n\tdelete(f, \"ModelName\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"AppBizIds\")\n\tdelete(f, \"AppType\")\n\tdelete(f, \"SubScenes\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeTokenUsageGraphRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeTokenUsageGraphResponseParams struct {\n\t// Token消耗总量\n\tTotal []*Stat `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 输入Token消耗量\n\tInput []*Stat `json:\"Input,omitnil,omitempty\" name:\"Input\"`\n\n\t// 输出Token消耗量\n\tOutput []*Stat `json:\"Output,omitnil,omitempty\" name:\"Output\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeTokenUsageGraphResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeTokenUsageGraphResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeTokenUsageGraphResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeTokenUsageGraphResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeTokenUsageRequestParams struct {\n\t// 腾讯云主账号\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 知识引擎子业务类型:  FileParse(文档解析)、Embedding、Rewrite(多轮改写)、 Concurrency(并发)、KnowledgeSummary(知识总结)   KnowledgeQA(知识问答)、KnowledgeCapacity(知识库容量)、SearchEngine(搜索引擎)\n\tSubBizType *string `json:\"SubBizType,omitnil,omitempty\" name:\"SubBizType\"`\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒(默认值0)\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒(默认值0， 必须大于开始时间戳)\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 筛选子场景(文档解析场景使用)\n\tSubScenes []*string `json:\"SubScenes,omitnil,omitempty\" name:\"SubScenes\"`\n\n\t// 应用类型(knowledge_qa应用管理， shared_knowlege 共享知识库)\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\ntype DescribeTokenUsageRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 腾讯云主账号\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 知识引擎子业务类型:  FileParse(文档解析)、Embedding、Rewrite(多轮改写)、 Concurrency(并发)、KnowledgeSummary(知识总结)   KnowledgeQA(知识问答)、KnowledgeCapacity(知识库容量)、SearchEngine(搜索引擎)\n\tSubBizType *string `json:\"SubBizType,omitnil,omitempty\" name:\"SubBizType\"`\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间戳, 单位为秒(默认值0)\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳, 单位为秒(默认值0， 必须大于开始时间戳)\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 筛选子场景(文档解析场景使用)\n\tSubScenes []*string `json:\"SubScenes,omitnil,omitempty\" name:\"SubScenes\"`\n\n\t// 应用类型(knowledge_qa应用管理， shared_knowlege 共享知识库)\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\nfunc (r *DescribeTokenUsageRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeTokenUsageRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"UinAccount\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"SubBizType\")\n\tdelete(f, \"ModelName\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"AppBizIds\")\n\tdelete(f, \"SubScenes\")\n\tdelete(f, \"AppType\")\n\tdelete(f, \"SpaceId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeTokenUsageRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeTokenUsageResponseParams struct {\n\t// 总token消耗量\n\tTotalTokenUsage *float64 `json:\"TotalTokenUsage,omitnil,omitempty\" name:\"TotalTokenUsage\"`\n\n\t// 输入token消耗\n\tInputTokenUsage *float64 `json:\"InputTokenUsage,omitnil,omitempty\" name:\"InputTokenUsage\"`\n\n\t// 输出token消耗\n\tOutputTokenUsage *float64 `json:\"OutputTokenUsage,omitnil,omitempty\" name:\"OutputTokenUsage\"`\n\n\t// 接口调用次数\n\tApiCallStats *uint64 `json:\"ApiCallStats,omitnil,omitempty\" name:\"ApiCallStats\"`\n\n\t// 搜索服务调用次数\n\tSearchUsage *float64 `json:\"SearchUsage,omitnil,omitempty\" name:\"SearchUsage\"`\n\n\t// 文档解析消耗页数\n\tPageUsage *uint64 `json:\"PageUsage,omitnil,omitempty\" name:\"PageUsage\"`\n\n\t// 拆分token消耗量\n\tSplitTokenUsage *float64 `json:\"SplitTokenUsage,omitnil,omitempty\" name:\"SplitTokenUsage\"`\n\n\t// Rag检索次数\n\tRagSearchUsage *float64 `json:\"RagSearchUsage,omitnil,omitempty\" name:\"RagSearchUsage\"`\n\n\t// 联网搜索次数\n\tInternetSearchUsage *float64 `json:\"InternetSearchUsage,omitnil,omitempty\" name:\"InternetSearchUsage\"`\n\n\t// dosage配额限制\n\tDosageTypeLimit *float64 `json:\"DosageTypeLimit,omitnil,omitempty\" name:\"DosageTypeLimit\"`\n\n\t// dosage当前用量\n\tDosageTypeCurr *float64 `json:\"DosageTypeCurr,omitnil,omitempty\" name:\"DosageTypeCurr\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeTokenUsageResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeTokenUsageResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeTokenUsageResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeTokenUsageResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeUnsatisfiedReplyContextRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 回复ID\n\tReplyBizId *string `json:\"ReplyBizId,omitnil,omitempty\" name:\"ReplyBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype DescribeUnsatisfiedReplyContextRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 回复ID\n\tReplyBizId *string `json:\"ReplyBizId,omitnil,omitempty\" name:\"ReplyBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *DescribeUnsatisfiedReplyContextRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeUnsatisfiedReplyContextRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"ReplyBizId\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeUnsatisfiedReplyContextRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeUnsatisfiedReplyContextResponseParams struct {\n\t// 不满意回复上下文\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tList []*Context `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeUnsatisfiedReplyContextResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeUnsatisfiedReplyContextResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeUnsatisfiedReplyContextResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeUnsatisfiedReplyContextResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeWorkflowRunRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 工作流运行实例ID\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n}\n\ntype DescribeWorkflowRunRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 工作流运行实例ID\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n}\n\nfunc (r *DescribeWorkflowRunRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeWorkflowRunRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"WorkflowRunId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"DescribeWorkflowRunRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype DescribeWorkflowRunResponseParams struct {\n\t// 总数\n\tWorkflowRun *WorkflowRunDetail `json:\"WorkflowRun,omitnil,omitempty\" name:\"WorkflowRun\"`\n\n\t// 节点列表\n\tNodeRuns []*NodeRunBase `json:\"NodeRuns,omitnil,omitempty\" name:\"NodeRuns\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype DescribeWorkflowRunResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *DescribeWorkflowRunResponseParams `json:\"Response\"`\n}\n\nfunc (r *DescribeWorkflowRunResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *DescribeWorkflowRunResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype DigitalHumanConfig struct {\n\t// 数智人资产key\n\tAssetKey *string `json:\"AssetKey,omitnil,omitempty\" name:\"AssetKey\"`\n\n\t// 数智人名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 图像\n\tAvatar *string `json:\"Avatar,omitnil,omitempty\" name:\"Avatar\"`\n\n\t// 预览图\n\tPreviewUrl *string `json:\"PreviewUrl,omitnil,omitempty\" name:\"PreviewUrl\"`\n}\n\ntype DocFilterFlag struct {\n\t// 标识位\n\tFlag *string `json:\"Flag,omitnil,omitempty\" name:\"Flag\"`\n\n\t// 标识值\n\tValue *bool `json:\"Value,omitnil,omitempty\" name:\"Value\"`\n}\n\ntype DocSegment struct {\n\t// 片段ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tId *string `json:\"Id,omitnil,omitempty\" name:\"Id\"`\n\n\t// 业务ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tBusinessId *string `json:\"BusinessId,omitnil,omitempty\" name:\"BusinessId\"`\n\n\t// 文件类型(markdown,word,txt)\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// 文档切片类型(segment-文档切片 table-表格)\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSegmentType *string `json:\"SegmentType,omitnil,omitempty\" name:\"SegmentType\"`\n\n\t// 标题\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTitle *string `json:\"Title,omitnil,omitempty\" name:\"Title\"`\n\n\t// 段落内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPageContent *string `json:\"PageContent,omitnil,omitempty\" name:\"PageContent\"`\n\n\t// 段落原文\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOrgData *string `json:\"OrgData,omitnil,omitempty\" name:\"OrgData\"`\n\n\t// 文章ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocId *string `json:\"DocId,omitnil,omitempty\" name:\"DocId\"`\n\n\t// 文档业务ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 文档链接\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocUrl *string `json:\"DocUrl,omitnil,omitempty\" name:\"DocUrl\"`\n\n\t// 文档的自定义链接\n\tWebUrl *string `json:\"WebUrl,omitnil,omitempty\" name:\"WebUrl\"`\n\n\t// 页码信息\n\tPageInfos []*uint64 `json:\"PageInfos,omitnil,omitempty\" name:\"PageInfos\"`\n}\n\ntype DuplicateFileHandle struct {\n\t// 重复文档判断方式，1：按文档内容，即cos_hash字段判断是否重复\n\tCheckType *uint64 `json:\"CheckType,omitnil,omitempty\" name:\"CheckType\"`\n\n\t// 重复文档处理方式，1：返回报错，2：跳过，返回重复的文档业务ID\n\tHandleType *uint64 `json:\"HandleType,omitnil,omitempty\" name:\"HandleType\"`\n}\n\n// Predefined struct for user\ntype ExportAttributeLabelRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 属性ID\n\tAttributeBizIds []*string `json:\"AttributeBizIds,omitnil,omitempty\" name:\"AttributeBizIds\"`\n\n\t// 根据筛选数据导出\n\tFilters *AttributeFilters `json:\"Filters,omitnil,omitempty\" name:\"Filters\"`\n}\n\ntype ExportAttributeLabelRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 属性ID\n\tAttributeBizIds []*string `json:\"AttributeBizIds,omitnil,omitempty\" name:\"AttributeBizIds\"`\n\n\t// 根据筛选数据导出\n\tFilters *AttributeFilters `json:\"Filters,omitnil,omitempty\" name:\"Filters\"`\n}\n\nfunc (r *ExportAttributeLabelRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ExportAttributeLabelRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"AttributeBizIds\")\n\tdelete(f, \"Filters\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ExportAttributeLabelRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ExportAttributeLabelResponseParams struct {\n\t// 导出任务ID\n\tTaskId *string `json:\"TaskId,omitnil,omitempty\" name:\"TaskId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ExportAttributeLabelResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ExportAttributeLabelResponseParams `json:\"Response\"`\n}\n\nfunc (r *ExportAttributeLabelResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ExportAttributeLabelResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ExportQAListRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// QA业务ID\n\tQaBizIds []*string `json:\"QaBizIds,omitnil,omitempty\" name:\"QaBizIds\"`\n\n\t// 查询参数\n\tFilters *QAQuery `json:\"Filters,omitnil,omitempty\" name:\"Filters\"`\n}\n\ntype ExportQAListRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// QA业务ID\n\tQaBizIds []*string `json:\"QaBizIds,omitnil,omitempty\" name:\"QaBizIds\"`\n\n\t// 查询参数\n\tFilters *QAQuery `json:\"Filters,omitnil,omitempty\" name:\"Filters\"`\n}\n\nfunc (r *ExportQAListRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ExportQAListRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"QaBizIds\")\n\tdelete(f, \"Filters\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ExportQAListRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ExportQAListResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ExportQAListResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ExportQAListResponseParams `json:\"Response\"`\n}\n\nfunc (r *ExportQAListResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ExportQAListResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ExportUnsatisfiedReplyRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 勾选导出ID列表\n\tReplyBizIds []*string `json:\"ReplyBizIds,omitnil,omitempty\" name:\"ReplyBizIds\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 检索过滤器\n\tFilters *Filters `json:\"Filters,omitnil,omitempty\" name:\"Filters\"`\n}\n\ntype ExportUnsatisfiedReplyRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 勾选导出ID列表\n\tReplyBizIds []*string `json:\"ReplyBizIds,omitnil,omitempty\" name:\"ReplyBizIds\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 检索过滤器\n\tFilters *Filters `json:\"Filters,omitnil,omitempty\" name:\"Filters\"`\n}\n\nfunc (r *ExportUnsatisfiedReplyRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ExportUnsatisfiedReplyRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"ReplyBizIds\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"Filters\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ExportUnsatisfiedReplyRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ExportUnsatisfiedReplyResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ExportUnsatisfiedReplyResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ExportUnsatisfiedReplyResponseParams `json:\"Response\"`\n}\n\nfunc (r *ExportUnsatisfiedReplyResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ExportUnsatisfiedReplyResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype ExtraInfo struct {\n\t// ECharts信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tEChartsInfo []*string `json:\"EChartsInfo,omitnil,omitempty\" name:\"EChartsInfo\"`\n}\n\ntype FileInfo struct {\n\t// 文件名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文件大小\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileSize *string `json:\"FileSize,omitnil,omitempty\" name:\"FileSize\"`\n\n\t// 文件的URL地址，COS地址\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileUrl *string `json:\"FileUrl,omitnil,omitempty\" name:\"FileUrl\"`\n\n\t// 文件类型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// 解析后返回的DocID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocId *string `json:\"DocId,omitnil,omitempty\" name:\"DocId\"`\n\n\t// 创建时间\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCreatedAt *string `json:\"CreatedAt,omitnil,omitempty\" name:\"CreatedAt\"`\n}\n\ntype Filters struct {\n\t// 检索，用户问题或答案\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 错误类型检索\n\tReasons []*string `json:\"Reasons,omitnil,omitempty\" name:\"Reasons\"`\n}\n\n// Predefined struct for user\ntype GenerateQARequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizIds []*string `json:\"DocBizIds,omitnil,omitempty\" name:\"DocBizIds\"`\n}\n\ntype GenerateQARequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizIds []*string `json:\"DocBizIds,omitnil,omitempty\" name:\"DocBizIds\"`\n}\n\nfunc (r *GenerateQARequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GenerateQARequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"DocBizIds\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GenerateQARequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GenerateQAResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GenerateQAResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GenerateQAResponseParams `json:\"Response\"`\n}\n\nfunc (r *GenerateQAResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GenerateQAResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetAnswerTypeDataCountRequestParams struct {\n\t// 开始日期\n\tStartTime *uint64 `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束日期\n\tEndTime *uint64 `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id\n\tAppBizId []*string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 消息来源(1、分享用户端  2、对话API  3、对话测试  4、应用评测)\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype GetAnswerTypeDataCountRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 开始日期\n\tStartTime *uint64 `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束日期\n\tEndTime *uint64 `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id\n\tAppBizId []*string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 消息来源(1、分享用户端  2、对话API  3、对话测试  4、应用评测)\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *GetAnswerTypeDataCountRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetAnswerTypeDataCountRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"Type\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GetAnswerTypeDataCountRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetAnswerTypeDataCountResponseParams struct {\n\t// 总消息数\n\tTotal *uint64 `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 大模型直接回复总数\n\tModelReplyCount *uint64 `json:\"ModelReplyCount,omitnil,omitempty\" name:\"ModelReplyCount\"`\n\n\t// 知识型回复总数\n\tKnowledgeCount *uint64 `json:\"KnowledgeCount,omitnil,omitempty\" name:\"KnowledgeCount\"`\n\n\t// 任务流回复总数\n\tTaskFlowCount *uint64 `json:\"TaskFlowCount,omitnil,omitempty\" name:\"TaskFlowCount\"`\n\n\t// 搜索引擎回复总数\n\tSearchEngineCount *uint64 `json:\"SearchEngineCount,omitnil,omitempty\" name:\"SearchEngineCount\"`\n\n\t// 图片理解回复总数\n\tImageUnderstandingCount *uint64 `json:\"ImageUnderstandingCount,omitnil,omitempty\" name:\"ImageUnderstandingCount\"`\n\n\t// 拒答回复总数\n\tRejectCount *uint64 `json:\"RejectCount,omitnil,omitempty\" name:\"RejectCount\"`\n\n\t// 敏感回复总数\n\tSensitiveCount *uint64 `json:\"SensitiveCount,omitnil,omitempty\" name:\"SensitiveCount\"`\n\n\t// 并发超限回复总数\n\tConcurrentLimitCount *uint64 `json:\"ConcurrentLimitCount,omitnil,omitempty\" name:\"ConcurrentLimitCount\"`\n\n\t// 未知问题回复总数\n\tUnknownIssuesCount *uint64 `json:\"UnknownIssuesCount,omitnil,omitempty\" name:\"UnknownIssuesCount\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GetAnswerTypeDataCountResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GetAnswerTypeDataCountResponseParams `json:\"Response\"`\n}\n\nfunc (r *GetAnswerTypeDataCountResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetAnswerTypeDataCountResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetAppKnowledgeCountRequestParams struct {\n\t// 类型：doc-文档；qa-问答对\n\tType *string `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype GetAppKnowledgeCountRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 类型：doc-文档；qa-问答对\n\tType *string `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *GetAppKnowledgeCountRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetAppKnowledgeCountRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"Type\")\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GetAppKnowledgeCountRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetAppKnowledgeCountResponseParams struct {\n\t// 总数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GetAppKnowledgeCountResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GetAppKnowledgeCountResponseParams `json:\"Response\"`\n}\n\nfunc (r *GetAppKnowledgeCountResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetAppKnowledgeCountResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetAppSecretRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n}\n\ntype GetAppSecretRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n}\n\nfunc (r *GetAppSecretRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetAppSecretRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GetAppSecretRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetAppSecretResponseParams struct {\n\t// 应用密钥\n\tAppKey *string `json:\"AppKey,omitnil,omitempty\" name:\"AppKey\"`\n\n\t// 创建时间\n\tCreateTime *string `json:\"CreateTime,omitnil,omitempty\" name:\"CreateTime\"`\n\n\t// 是否发布\n\tIsRelease *bool `json:\"IsRelease,omitnil,omitempty\" name:\"IsRelease\"`\n\n\t// 是否有查看权限\n\tHasPermission *bool `json:\"HasPermission,omitnil,omitempty\" name:\"HasPermission\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GetAppSecretResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GetAppSecretResponseParams `json:\"Response\"`\n}\n\nfunc (r *GetAppSecretResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetAppSecretResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetDocPreviewRequestParams struct {\n\t// 文档BizID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 存储类型: offline:离线文件，realtime:实时文件；为空默认为offline\n\tTypeKey *string `json:\"TypeKey,omitnil,omitempty\" name:\"TypeKey\"`\n}\n\ntype GetDocPreviewRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 文档BizID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 存储类型: offline:离线文件，realtime:实时文件；为空默认为offline\n\tTypeKey *string `json:\"TypeKey,omitnil,omitempty\" name:\"TypeKey\"`\n}\n\nfunc (r *GetDocPreviewRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetDocPreviewRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"DocBizId\")\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"TypeKey\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GetDocPreviewRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetDocPreviewResponseParams struct {\n\t// 文件名, 发布端固定使用这个名称\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文件类型\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// cos路径\n\tCosUrl *string `json:\"CosUrl,omitnil,omitempty\" name:\"CosUrl\"`\n\n\t// cos临时地址\n\tUrl *string `json:\"Url,omitnil,omitempty\" name:\"Url\"`\n\n\t// cos桶\n\tBucket *string `json:\"Bucket,omitnil,omitempty\" name:\"Bucket\"`\n\n\t// 存在文档重命名情况下的新名称, 评测端优先使用这个名称\n\tNewName *string `json:\"NewName,omitnil,omitempty\" name:\"NewName\"`\n\n\t// 文件md结果cos临时地址\n\tParseResultCosUrl *string `json:\"ParseResultCosUrl,omitnil,omitempty\" name:\"ParseResultCosUrl\"`\n\n\t// 是否可下载\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsDownload *bool `json:\"IsDownload,omitnil,omitempty\" name:\"IsDownload\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GetDocPreviewResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GetDocPreviewResponseParams `json:\"Response\"`\n}\n\nfunc (r *GetDocPreviewResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetDocPreviewResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetLikeDataCountRequestParams struct {\n\t// 开始日期\n\tStartTime *uint64 `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束日期\n\tEndTime *uint64 `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id\n\tAppBizId []*string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 消息来源(1、分享用户端  2、对话API)\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype GetLikeDataCountRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 开始日期\n\tStartTime *uint64 `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束日期\n\tEndTime *uint64 `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 应用id\n\tAppBizId []*string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 消息来源(1、分享用户端  2、对话API)\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *GetLikeDataCountRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetLikeDataCountRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"Type\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GetLikeDataCountRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetLikeDataCountResponseParams struct {\n\t// 可评价消息数\n\tTotal *uint64 `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 评价数\n\tAppraisalTotal *uint64 `json:\"AppraisalTotal,omitnil,omitempty\" name:\"AppraisalTotal\"`\n\n\t// 参评率\n\tParticipationRate *float64 `json:\"ParticipationRate,omitnil,omitempty\" name:\"ParticipationRate\"`\n\n\t// 点赞数\n\tLikeTotal *uint64 `json:\"LikeTotal,omitnil,omitempty\" name:\"LikeTotal\"`\n\n\t// 点赞率\n\tLikeRate *float64 `json:\"LikeRate,omitnil,omitempty\" name:\"LikeRate\"`\n\n\t// 点踩数\n\tDislikeTotal *uint64 `json:\"DislikeTotal,omitnil,omitempty\" name:\"DislikeTotal\"`\n\n\t// 点踩率\n\tDislikeRate *float64 `json:\"DislikeRate,omitnil,omitempty\" name:\"DislikeRate\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GetLikeDataCountResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GetLikeDataCountResponseParams `json:\"Response\"`\n}\n\nfunc (r *GetLikeDataCountResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetLikeDataCountResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetMsgRecordRequestParams struct {\n\t// 类型\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 数量,  数量需大于2, 最大1000\n\tCount *uint64 `json:\"Count,omitnil,omitempty\" name:\"Count\"`\n\n\t// 会话sessionid\n\tSessionId *string `json:\"SessionId,omitnil,omitempty\" name:\"SessionId\"`\n\n\t// 应用AppKey, 当Type=5[API访客]时, 该字段必填  :</br>  获取方式:</br>   1、应用发布后在应用页面[发布管理]-[调用信息]-[API管理]处获取</br>   2、参考 https://cloud.tencent.com/document/product/1759/109469 第二项\n\tBotAppKey *string `json:\"BotAppKey,omitnil,omitempty\" name:\"BotAppKey\"`\n\n\t// 场景, 体验: 1; 正式: 2\n\tScene *uint64 `json:\"Scene,omitnil,omitempty\" name:\"Scene\"`\n\n\t// 最后一条记录ID， 消息从后往前获取\n\t//\n\t// MidRecordId与LastRecordId只能选择一个\n\tLastRecordId *string `json:\"LastRecordId,omitnil,omitempty\" name:\"LastRecordId\"`\n\n\t// 传该值，代表拉取该记录id的前后总共count条消息记录\n\t//\n\t// MidRecordId与LastRecordId只能选择一个\n\tMidRecordId *string `json:\"MidRecordId,omitnil,omitempty\" name:\"MidRecordId\"`\n}\n\ntype GetMsgRecordRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 类型\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 数量,  数量需大于2, 最大1000\n\tCount *uint64 `json:\"Count,omitnil,omitempty\" name:\"Count\"`\n\n\t// 会话sessionid\n\tSessionId *string `json:\"SessionId,omitnil,omitempty\" name:\"SessionId\"`\n\n\t// 应用AppKey, 当Type=5[API访客]时, 该字段必填  :</br>  获取方式:</br>   1、应用发布后在应用页面[发布管理]-[调用信息]-[API管理]处获取</br>   2、参考 https://cloud.tencent.com/document/product/1759/109469 第二项\n\tBotAppKey *string `json:\"BotAppKey,omitnil,omitempty\" name:\"BotAppKey\"`\n\n\t// 场景, 体验: 1; 正式: 2\n\tScene *uint64 `json:\"Scene,omitnil,omitempty\" name:\"Scene\"`\n\n\t// 最后一条记录ID， 消息从后往前获取\n\t//\n\t// MidRecordId与LastRecordId只能选择一个\n\tLastRecordId *string `json:\"LastRecordId,omitnil,omitempty\" name:\"LastRecordId\"`\n\n\t// 传该值，代表拉取该记录id的前后总共count条消息记录\n\t//\n\t// MidRecordId与LastRecordId只能选择一个\n\tMidRecordId *string `json:\"MidRecordId,omitnil,omitempty\" name:\"MidRecordId\"`\n}\n\nfunc (r *GetMsgRecordRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetMsgRecordRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"Type\")\n\tdelete(f, \"Count\")\n\tdelete(f, \"SessionId\")\n\tdelete(f, \"BotAppKey\")\n\tdelete(f, \"Scene\")\n\tdelete(f, \"LastRecordId\")\n\tdelete(f, \"MidRecordId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GetMsgRecordRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetMsgRecordResponseParams struct {\n\t// 会话记录\n\tRecords []*MsgRecord `json:\"Records,omitnil,omitempty\" name:\"Records\"`\n\n\t// session 清除关联上下文时间, 单位 ms\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSessionDisassociatedTimestamp *string `json:\"SessionDisassociatedTimestamp,omitnil,omitempty\" name:\"SessionDisassociatedTimestamp\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GetMsgRecordResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GetMsgRecordResponseParams `json:\"Response\"`\n}\n\nfunc (r *GetMsgRecordResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetMsgRecordResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetTaskStatusRequestParams struct {\n\t// 任务ID\n\tTaskId *string `json:\"TaskId,omitnil,omitempty\" name:\"TaskId\"`\n\n\t// 任务类型\n\tTaskType *string `json:\"TaskType,omitnil,omitempty\" name:\"TaskType\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\ntype GetTaskStatusRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 任务ID\n\tTaskId *string `json:\"TaskId,omitnil,omitempty\" name:\"TaskId\"`\n\n\t// 任务类型\n\tTaskType *string `json:\"TaskType,omitnil,omitempty\" name:\"TaskType\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\nfunc (r *GetTaskStatusRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetTaskStatusRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"TaskId\")\n\tdelete(f, \"TaskType\")\n\tdelete(f, \"BotBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GetTaskStatusRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetTaskStatusResponseParams struct {\n\t// 任务ID\n\tTaskId *string `json:\"TaskId,omitnil,omitempty\" name:\"TaskId\"`\n\n\t// 任务类型\n\tTaskType *string `json:\"TaskType,omitnil,omitempty\" name:\"TaskType\"`\n\n\t// 任务状态\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatus *string `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 任务消息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tMessage *string `json:\"Message,omitnil,omitempty\" name:\"Message\"`\n\n\t// 任务参数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tParams *TaskParams `json:\"Params,omitnil,omitempty\" name:\"Params\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GetTaskStatusResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GetTaskStatusResponseParams `json:\"Response\"`\n}\n\nfunc (r *GetTaskStatusResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetTaskStatusResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetVarListRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 变量ID数组\n\tVarIds []*string `json:\"VarIds,omitnil,omitempty\" name:\"VarIds\"`\n\n\t// 按变量名称关键词搜索\n\tKeyword *string `json:\"Keyword,omitnil,omitempty\" name:\"Keyword\"`\n\n\t// 起始偏移量（默认0）\n\tOffset *uint64 `json:\"Offset,omitnil,omitempty\" name:\"Offset\"`\n\n\t// 限定数量（默认15）\n\tLimit *uint64 `json:\"Limit,omitnil,omitempty\" name:\"Limit\"`\n\n\t// 按变量类型过滤，默认查询所有类型(STRING,INT,FLOAT,BOOL,OBJECT,ARRAY_STRING,ARRAY_INT,ARRAY_FLOAT,ARRAY_BOOL,ARRAY_OBJECT,FILE,DOCUMENT,IMAGE,AUDIO)\n\tVarType *string `json:\"VarType,omitnil,omitempty\" name:\"VarType\"`\n\n\t// 是否需要内部变量(默认false)\n\tNeedInternalVar *bool `json:\"NeedInternalVar,omitnil,omitempty\" name:\"NeedInternalVar\"`\n\n\t// 变量类型\n\tVarModuleType *int64 `json:\"VarModuleType,omitnil,omitempty\" name:\"VarModuleType\"`\n}\n\ntype GetVarListRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 变量ID数组\n\tVarIds []*string `json:\"VarIds,omitnil,omitempty\" name:\"VarIds\"`\n\n\t// 按变量名称关键词搜索\n\tKeyword *string `json:\"Keyword,omitnil,omitempty\" name:\"Keyword\"`\n\n\t// 起始偏移量（默认0）\n\tOffset *uint64 `json:\"Offset,omitnil,omitempty\" name:\"Offset\"`\n\n\t// 限定数量（默认15）\n\tLimit *uint64 `json:\"Limit,omitnil,omitempty\" name:\"Limit\"`\n\n\t// 按变量类型过滤，默认查询所有类型(STRING,INT,FLOAT,BOOL,OBJECT,ARRAY_STRING,ARRAY_INT,ARRAY_FLOAT,ARRAY_BOOL,ARRAY_OBJECT,FILE,DOCUMENT,IMAGE,AUDIO)\n\tVarType *string `json:\"VarType,omitnil,omitempty\" name:\"VarType\"`\n\n\t// 是否需要内部变量(默认false)\n\tNeedInternalVar *bool `json:\"NeedInternalVar,omitnil,omitempty\" name:\"NeedInternalVar\"`\n\n\t// 变量类型\n\tVarModuleType *int64 `json:\"VarModuleType,omitnil,omitempty\" name:\"VarModuleType\"`\n}\n\nfunc (r *GetVarListRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetVarListRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"VarIds\")\n\tdelete(f, \"Keyword\")\n\tdelete(f, \"Offset\")\n\tdelete(f, \"Limit\")\n\tdelete(f, \"VarType\")\n\tdelete(f, \"NeedInternalVar\")\n\tdelete(f, \"VarModuleType\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GetVarListRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetVarListResponseParams struct {\n\t// 变量总数\n\tTotal *uint64 `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 变量信息列表\n\tList []*TaskFLowVar `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GetVarListResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GetVarListResponseParams `json:\"Response\"`\n}\n\nfunc (r *GetVarListResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetVarListResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype GetWsTokenReq_Label struct {\n\t// 标签名\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 标签值\n\tValues []*string `json:\"Values,omitnil,omitempty\" name:\"Values\"`\n}\n\n// Predefined struct for user\ntype GetWsTokenRequestParams struct {\n\t// 接入类型， 5-API 访客，目前仅支持传5\n\tType *int64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t//   应用AppKey </br>   获取方式:</br>   1、应用发布后在应用页面[发布管理]-[调用信息]-[API管理]处获取</br>   2、参考 https://cloud.tencent.com/document/product/1759/109469 第二项\n\tBotAppKey *string `json:\"BotAppKey,omitnil,omitempty\" name:\"BotAppKey\"`\n\n\t// 访客ID（外部输入，建议唯一，标识当前接入会话的用户）\n\t// 长度限制： string(64)\n\tVisitorBizId *string `json:\"VisitorBizId,omitnil,omitempty\" name:\"VisitorBizId\"`\n\n\t// 知识标签，用于知识库中知识的检索过滤。该字段即将下线，请使用对话端接口中的 custom_variables 字段替代该字段。\n\tVisitorLabels []*GetWsTokenReq_Label `json:\"VisitorLabels,omitnil,omitempty\" name:\"VisitorLabels\"`\n}\n\ntype GetWsTokenRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 接入类型， 5-API 访客，目前仅支持传5\n\tType *int64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t//   应用AppKey </br>   获取方式:</br>   1、应用发布后在应用页面[发布管理]-[调用信息]-[API管理]处获取</br>   2、参考 https://cloud.tencent.com/document/product/1759/109469 第二项\n\tBotAppKey *string `json:\"BotAppKey,omitnil,omitempty\" name:\"BotAppKey\"`\n\n\t// 访客ID（外部输入，建议唯一，标识当前接入会话的用户）\n\t// 长度限制： string(64)\n\tVisitorBizId *string `json:\"VisitorBizId,omitnil,omitempty\" name:\"VisitorBizId\"`\n\n\t// 知识标签，用于知识库中知识的检索过滤。该字段即将下线，请使用对话端接口中的 custom_variables 字段替代该字段。\n\tVisitorLabels []*GetWsTokenReq_Label `json:\"VisitorLabels,omitnil,omitempty\" name:\"VisitorLabels\"`\n}\n\nfunc (r *GetWsTokenRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetWsTokenRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"Type\")\n\tdelete(f, \"BotAppKey\")\n\tdelete(f, \"VisitorBizId\")\n\tdelete(f, \"VisitorLabels\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GetWsTokenRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GetWsTokenResponseParams struct {\n\t// token值（有效期60s，仅一次有效，多次校验会报错）\n\tToken *string `json:\"Token,omitnil,omitempty\" name:\"Token\"`\n\n\t// 余额; 余额大于 0 时表示有效\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tBalance *float64 `json:\"Balance,omitnil,omitempty\" name:\"Balance\"`\n\n\t// 对话窗输入字符限制\n\tInputLenLimit *int64 `json:\"InputLenLimit,omitnil,omitempty\" name:\"InputLenLimit\"`\n\n\t// 应用模式，standard:标准模式, agent: agent模式，single_workflow：单工作流模式\n\tPattern *string `json:\"Pattern,omitnil,omitempty\" name:\"Pattern\"`\n\n\t// SingleWorkflow\n\tSingleWorkflow *KnowledgeQaSingleWorkflow `json:\"SingleWorkflow,omitnil,omitempty\" name:\"SingleWorkflow\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GetWsTokenResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GetWsTokenResponseParams `json:\"Response\"`\n}\n\nfunc (r *GetWsTokenResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GetWsTokenResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GroupDocRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 操作对象的业务ID列表\n\tBizIds []*string `json:\"BizIds,omitnil,omitempty\" name:\"BizIds\"`\n\n\t// 分组 ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\ntype GroupDocRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 操作对象的业务ID列表\n\tBizIds []*string `json:\"BizIds,omitnil,omitempty\" name:\"BizIds\"`\n\n\t// 分组 ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\nfunc (r *GroupDocRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GroupDocRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"BizIds\")\n\tdelete(f, \"CateBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GroupDocRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GroupDocResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GroupDocResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GroupDocResponseParams `json:\"Response\"`\n}\n\nfunc (r *GroupDocResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GroupDocResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GroupQARequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// QaBizID列表\n\tQaBizIds []*string `json:\"QaBizIds,omitnil,omitempty\" name:\"QaBizIds\"`\n\n\t// 分组 ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\ntype GroupQARequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// QaBizID列表\n\tQaBizIds []*string `json:\"QaBizIds,omitnil,omitempty\" name:\"QaBizIds\"`\n\n\t// 分组 ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\nfunc (r *GroupQARequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GroupQARequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"QaBizIds\")\n\tdelete(f, \"CateBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"GroupQARequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype GroupQAResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype GroupQAResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *GroupQAResponseParams `json:\"Response\"`\n}\n\nfunc (r *GroupQAResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *GroupQAResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype Highlight struct {\n\t// 高亮起始位置\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStartPos *string `json:\"StartPos,omitnil,omitempty\" name:\"StartPos\"`\n\n\t// 高亮结束位置\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tEndPos *string `json:\"EndPos,omitnil,omitempty\" name:\"EndPos\"`\n\n\t// 高亮子文本\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tText *string `json:\"Text,omitnil,omitempty\" name:\"Text\"`\n}\n\ntype HistorySummary struct {\n\t// 助手\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAssistant *string `json:\"Assistant,omitnil,omitempty\" name:\"Assistant\"`\n\n\t// 用户\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUser *string `json:\"User,omitnil,omitempty\" name:\"User\"`\n}\n\n// Predefined struct for user\ntype IgnoreUnsatisfiedReplyRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 不满意回复ID\n\tReplyBizIds []*string `json:\"ReplyBizIds,omitnil,omitempty\" name:\"ReplyBizIds\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype IgnoreUnsatisfiedReplyRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 不满意回复ID\n\tReplyBizIds []*string `json:\"ReplyBizIds,omitnil,omitempty\" name:\"ReplyBizIds\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *IgnoreUnsatisfiedReplyRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *IgnoreUnsatisfiedReplyRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"ReplyBizIds\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"IgnoreUnsatisfiedReplyRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype IgnoreUnsatisfiedReplyResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype IgnoreUnsatisfiedReplyResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *IgnoreUnsatisfiedReplyResponseParams `json:\"Response\"`\n}\n\nfunc (r *IgnoreUnsatisfiedReplyResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *IgnoreUnsatisfiedReplyResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype IntentAchievement struct {\n\t// 意图达成方式，qa:问答回复、doc：文档回复、workflow：工作流回复，llm：大模型回复\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 意图达成方式描述\n\tDesc *string `json:\"Desc,omitnil,omitempty\" name:\"Desc\"`\n}\n\ntype InvokeAPI struct {\n\t// 请求方法，如GET/POST等\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tMethod *string `json:\"Method,omitnil,omitempty\" name:\"Method\"`\n\n\t// 请求地址\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUrl *string `json:\"Url,omitnil,omitempty\" name:\"Url\"`\n\n\t// header参数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tHeaderValues []*StrValue `json:\"HeaderValues,omitnil,omitempty\" name:\"HeaderValues\"`\n\n\t// 入参Query\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQueryValues []*StrValue `json:\"QueryValues,omitnil,omitempty\" name:\"QueryValues\"`\n\n\t// Post请求的原始数据\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRequestPostBody *string `json:\"RequestPostBody,omitnil,omitempty\" name:\"RequestPostBody\"`\n\n\t// 返回的原始数据\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tResponseBody *string `json:\"ResponseBody,omitnil,omitempty\" name:\"ResponseBody\"`\n\n\t// 出参\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tResponseValues []*ValueInfo `json:\"ResponseValues,omitnil,omitempty\" name:\"ResponseValues\"`\n\n\t// 异常信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFailMessage *string `json:\"FailMessage,omitnil,omitempty\" name:\"FailMessage\"`\n}\n\n// Predefined struct for user\ntype IsTransferIntentRequestParams struct {\n\t// 内容\n\tContent *string `json:\"Content,omitnil,omitempty\" name:\"Content\"`\n\n\t// 应用appKey\n\tBotAppKey *string `json:\"BotAppKey,omitnil,omitempty\" name:\"BotAppKey\"`\n}\n\ntype IsTransferIntentRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 内容\n\tContent *string `json:\"Content,omitnil,omitempty\" name:\"Content\"`\n\n\t// 应用appKey\n\tBotAppKey *string `json:\"BotAppKey,omitnil,omitempty\" name:\"BotAppKey\"`\n}\n\nfunc (r *IsTransferIntentRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *IsTransferIntentRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"Content\")\n\tdelete(f, \"BotAppKey\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"IsTransferIntentRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype IsTransferIntentResponseParams struct {\n\t// 是否意图转人工\n\tHit *bool `json:\"Hit,omitnil,omitempty\" name:\"Hit\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype IsTransferIntentResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *IsTransferIntentResponseParams `json:\"Response\"`\n}\n\nfunc (r *IsTransferIntentResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *IsTransferIntentResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype KnowledgeAdvancedConfig struct {\n\t// 重排序模型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRerankModel *string `json:\"RerankModel,omitnil,omitempty\" name:\"RerankModel\"`\n\n\t// 召回数量\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRerankRecallNum *int64 `json:\"RerankRecallNum,omitnil,omitempty\" name:\"RerankRecallNum\"`\n}\n\ntype KnowledgeBaseInfo struct {\n\t// 共享知识库业务ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 共享知识库名称\n\tKnowledgeName *string `json:\"KnowledgeName,omitnil,omitempty\" name:\"KnowledgeName\"`\n\n\t// 共享知识库描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeDescription *string `json:\"KnowledgeDescription,omitnil,omitempty\" name:\"KnowledgeDescription\"`\n\n\t// Embedding模型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tEmbeddingModel *string `json:\"EmbeddingModel,omitnil,omitempty\" name:\"EmbeddingModel\"`\n\n\t// 问答提取模型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQaExtractModel *string `json:\"QaExtractModel,omitnil,omitempty\" name:\"QaExtractModel\"`\n\n\t// 更新时间\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 共享知识库类型，0普通，1公众号\n\tKnowledgeType *int64 `json:\"KnowledgeType,omitnil,omitempty\" name:\"KnowledgeType\"`\n\n\t// 拥有者id\n\tOwnerStaffId *string `json:\"OwnerStaffId,omitnil,omitempty\" name:\"OwnerStaffId\"`\n\n\t// 知识库文档数量,当前仅支持公众号知识库\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocTotal *int64 `json:\"DocTotal,omitnil,omitempty\" name:\"DocTotal\"`\n\n\t// 知识库处理中状态标记，1：向量embedding变更中\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tProcessingFlags []*int64 `json:\"ProcessingFlags,omitnil,omitempty\" name:\"ProcessingFlags\"`\n\n\t// 知识库拥有者的名字\n\tOwnerStaffName *string `json:\"OwnerStaffName,omitnil,omitempty\" name:\"OwnerStaffName\"`\n}\n\ntype KnowledgeCapacityPieGraphDetail struct {\n\t// 当前应用名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppName *string `json:\"AppName,omitnil,omitempty\" name:\"AppName\"`\n\n\t// 当前应用使用的字符数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUsedCharSize *string `json:\"UsedCharSize,omitnil,omitempty\" name:\"UsedCharSize\"`\n\n\t// 当前应用对于总用量的占比\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tProportion *float64 `json:\"Proportion,omitnil,omitempty\" name:\"Proportion\"`\n\n\t// 知识库类型:0默认1共享\n\tKnowledgeType *int64 `json:\"KnowledgeType,omitnil,omitempty\" name:\"KnowledgeType\"`\n}\n\ntype KnowledgeDetail struct {\n\t// 应用名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppName *string `json:\"AppName,omitnil,omitempty\" name:\"AppName\"`\n\n\t// 已用字符数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUsedCharSize *string `json:\"UsedCharSize,omitnil,omitempty\" name:\"UsedCharSize\"`\n\n\t// 使用占比\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tProportion *float64 `json:\"Proportion,omitnil,omitempty\" name:\"Proportion\"`\n\n\t// 超量字符数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tExceedCharSize *string `json:\"ExceedCharSize,omitnil,omitempty\" name:\"ExceedCharSize\"`\n\n\t// 废弃\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsSharedKnowledge *bool `json:\"IsSharedKnowledge,omitnil,omitempty\" name:\"IsSharedKnowledge\"`\n\n\t// 知识库类型:0默认1共享\n\tKnowledgeType *int64 `json:\"KnowledgeType,omitnil,omitempty\" name:\"KnowledgeType\"`\n}\n\ntype KnowledgeDetailInfo struct {\n\t// 知识库信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledge *KnowledgeBaseInfo `json:\"Knowledge,omitnil,omitempty\" name:\"Knowledge\"`\n\n\t// 应用列表\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppList []*AppBaseInfo `json:\"AppList,omitnil,omitempty\" name:\"AppList\"`\n\n\t// 用户信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUser *UserBaseInfo `json:\"User,omitnil,omitempty\" name:\"User\"`\n\n\t// 权限位信息\n\tPermissionIds []*string `json:\"PermissionIds,omitnil,omitempty\" name:\"PermissionIds\"`\n}\n\ntype KnowledgeModelConfig struct {\n\t// 向量模型，该字段只有共享知识库有，应用知识库没有\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tEmbeddingModel *string `json:\"EmbeddingModel,omitnil,omitempty\" name:\"EmbeddingModel\"`\n\n\t// 问答对生成模型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQaExtractModel *string `json:\"QaExtractModel,omitnil,omitempty\" name:\"QaExtractModel\"`\n\n\t// schema生成模型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSchemaModel *string `json:\"SchemaModel,omitnil,omitempty\" name:\"SchemaModel\"`\n}\n\ntype KnowledgeQaAgent struct {\n\t// 协同方式，1：自由转交，2：工作流编排，3：Plan-and-Execute\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAgentCollaboration *uint64 `json:\"AgentCollaboration,omitnil,omitempty\" name:\"AgentCollaboration\"`\n\n\t// 应用配置agent关联的工作流\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflow *KnowledgeQaWorkflowInfo `json:\"Workflow,omitnil,omitempty\" name:\"Workflow\"`\n}\n\ntype KnowledgeQaConfig struct {\n\t// 欢迎语，200字符以内\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tGreeting *string `json:\"Greeting,omitnil,omitempty\" name:\"Greeting\"`\n\n\t// 角色描述，4000字符以内。通过填写描述，设定应用的 #角色名称、 #风格特点 及可达成的#意图。建议按照下面的模板填写，且自定义意图建议不超过5个。\n\t//\n\t// #角色名称：\n\t// #风格特点：\n\t// #输出要求：\n\t// #能力限制：\n\t//\n\t// 能够达成以下用户意图\n\t// ##意图名称：\n\t// ##意图描述：\n\t// ##意图示例：\n\t// ##意图实现：\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRoleDescription *string `json:\"RoleDescription,omitnil,omitempty\" name:\"RoleDescription\"`\n\n\t// 生成模型配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModel *AppModel `json:\"Model,omitnil,omitempty\" name:\"Model\"`\n\n\t// 知识搜索配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSearch []*KnowledgeQaSearch `json:\"Search,omitnil,omitempty\" name:\"Search\"`\n\n\t// 知识管理输出配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOutput *KnowledgeQaOutput `json:\"Output,omitnil,omitempty\" name:\"Output\"`\n\n\t// 工作流程配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflow *KnowledgeWorkflow `json:\"Workflow,omitnil,omitempty\" name:\"Workflow\"`\n\n\t// 检索范围\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSearchRange *SearchRange `json:\"SearchRange,omitnil,omitempty\" name:\"SearchRange\"`\n\n\t// 应用模式，standard:标准模式, agent: agent模式，single_workflow：单工作流模式\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPattern *string `json:\"Pattern,omitnil,omitempty\" name:\"Pattern\"`\n\n\t// 检索策略\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSearchStrategy *SearchStrategy `json:\"SearchStrategy,omitnil,omitempty\" name:\"SearchStrategy\"`\n\n\t// 单工作流ID，Pattern为single_workflow时传入\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSingleWorkflow *KnowledgeQaSingleWorkflow `json:\"SingleWorkflow,omitnil,omitempty\" name:\"SingleWorkflow\"`\n\n\t// 应用关联插件\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPlugins []*KnowledgeQaPlugin `json:\"Plugins,omitnil,omitempty\" name:\"Plugins\"`\n\n\t// 思考模型配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tThoughtModel *AppModel `json:\"ThoughtModel,omitnil,omitempty\" name:\"ThoughtModel\"`\n\n\t// 意图达成方式优先级\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIntentAchievements []*IntentAchievement `json:\"IntentAchievements,omitnil,omitempty\" name:\"IntentAchievements\"`\n\n\t// 是否开启图文检索\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tImageTextRetrieval *bool `json:\"ImageTextRetrieval,omitnil,omitempty\" name:\"ImageTextRetrieval\"`\n\n\t// 配置语音通话参数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAiCall *AICallConfig `json:\"AiCall,omitnil,omitempty\" name:\"AiCall\"`\n\n\t// 共享知识库关联配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tShareKnowledgeBases []*ShareKnowledgeBase `json:\"ShareKnowledgeBases,omitnil,omitempty\" name:\"ShareKnowledgeBases\"`\n\n\t// 背景图相关信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tBackgroundImage *BackgroundImageConfig `json:\"BackgroundImage,omitnil,omitempty\" name:\"BackgroundImage\"`\n\n\t// 开场问题\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOpeningQuestions []*string `json:\"OpeningQuestions,omitnil,omitempty\" name:\"OpeningQuestions\"`\n\n\t// 长期记忆开关\n\tLongMemoryOpen *bool `json:\"LongMemoryOpen,omitnil,omitempty\" name:\"LongMemoryOpen\"`\n\n\t// 长期记忆时效\n\tLongMemoryDay *uint64 `json:\"LongMemoryDay,omitnil,omitempty\" name:\"LongMemoryDay\"`\n\n\t// agent配置信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAgent *KnowledgeQaAgent `json:\"Agent,omitnil,omitempty\" name:\"Agent\"`\n\n\t// 知识库模型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeModelConfig *KnowledgeModelConfig `json:\"KnowledgeModelConfig,omitnil,omitempty\" name:\"KnowledgeModelConfig\"`\n\n\t// 知识库高级设置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeAdvancedConfig *KnowledgeAdvancedConfig `json:\"KnowledgeAdvancedConfig,omitnil,omitempty\" name:\"KnowledgeAdvancedConfig\"`\n}\n\ntype KnowledgeQaOutput struct {\n\t// 输出方式 1：流式 2：非流式\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tMethod *uint64 `json:\"Method,omitnil,omitempty\" name:\"Method\"`\n\n\t// 通用模型回复\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUseGeneralKnowledge *bool `json:\"UseGeneralKnowledge,omitnil,omitempty\" name:\"UseGeneralKnowledge\"`\n\n\t// 未知回复语，300字符以内\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tBareAnswer *string `json:\"BareAnswer,omitnil,omitempty\" name:\"BareAnswer\"`\n\n\t// 是否展示问题澄清开关\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tShowQuestionClarify *bool `json:\"ShowQuestionClarify,omitnil,omitempty\" name:\"ShowQuestionClarify\"`\n\n\t// 是否打开问题澄清\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUseQuestionClarify *bool `json:\"UseQuestionClarify,omitnil,omitempty\" name:\"UseQuestionClarify\"`\n\n\t// 问题澄清关键词列表\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQuestionClarifyKeywords []*string `json:\"QuestionClarifyKeywords,omitnil,omitempty\" name:\"QuestionClarifyKeywords\"`\n\n\t// 是否打开推荐问题开关\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUseRecommended *bool `json:\"UseRecommended,omitnil,omitempty\" name:\"UseRecommended\"`\n\n\t// 推荐问模式，0.结合知识库&对话历史推荐问题Prompt(默认) 1.仅结合知识库输出推荐问的prompt\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRecommendedPromptMode *uint64 `json:\"RecommendedPromptMode,omitnil,omitempty\" name:\"RecommendedPromptMode\"`\n}\n\ntype KnowledgeQaPlugin struct {\n\t// 插件ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPluginId *string `json:\"PluginId,omitnil,omitempty\" name:\"PluginId\"`\n\n\t// 插件名称\n\tPluginName *string `json:\"PluginName,omitnil,omitempty\" name:\"PluginName\"`\n\n\t// 插件图标\n\tPluginIcon *string `json:\"PluginIcon,omitnil,omitempty\" name:\"PluginIcon\"`\n\n\t// 工具ID\n\tToolId *string `json:\"ToolId,omitnil,omitempty\" name:\"ToolId\"`\n\n\t// 工具名称\n\tToolName *string `json:\"ToolName,omitnil,omitempty\" name:\"ToolName\"`\n\n\t// 工具描述\n\tToolDesc *string `json:\"ToolDesc,omitnil,omitempty\" name:\"ToolDesc\"`\n\n\t// 工具输入参数\n\tInputs []*PluginToolReqParam `json:\"Inputs,omitnil,omitempty\" name:\"Inputs\"`\n\n\t// 插件是否和知识库绑定\n\tIsBindingKnowledge *bool `json:\"IsBindingKnowledge,omitnil,omitempty\" name:\"IsBindingKnowledge\"`\n}\n\ntype KnowledgeQaSearch struct {\n\t// 知识来源 doc：文档，qa：问答  taskflow：业务流程，search：搜索增强，database:数据库\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tType *string `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 问答-回复灵活度 1：已采纳答案直接回复 2：已采纳润色后回复\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReplyFlexibility *uint64 `json:\"ReplyFlexibility,omitnil,omitempty\" name:\"ReplyFlexibility\"`\n\n\t// 搜索增强-搜索引擎状态\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUseSearchEngine *bool `json:\"UseSearchEngine,omitnil,omitempty\" name:\"UseSearchEngine\"`\n\n\t// 是否显示搜索引擎检索状态\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tShowSearchEngine *bool `json:\"ShowSearchEngine,omitnil,omitempty\" name:\"ShowSearchEngine\"`\n\n\t// 知识来源，是否选择\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsEnabled *bool `json:\"IsEnabled,omitnil,omitempty\" name:\"IsEnabled\"`\n\n\t// 问答最大召回数量, 默认2，限制5\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQaTopN *uint64 `json:\"QaTopN,omitnil,omitempty\" name:\"QaTopN\"`\n\n\t// 文档最大召回数量, 默认3，限制5\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocTopN *uint64 `json:\"DocTopN,omitnil,omitempty\" name:\"DocTopN\"`\n\n\t// 检索置信度，针对文档和问答有效，最小0.01，最大0.99\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tConfidence *float64 `json:\"Confidence,omitnil,omitempty\" name:\"Confidence\"`\n\n\t// 资源状态 1：资源可用；2：资源已用尽\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tResourceStatus *uint64 `json:\"ResourceStatus,omitnil,omitempty\" name:\"ResourceStatus\"`\n}\n\ntype KnowledgeQaSingleWorkflow struct {\n\t// 工作流ID\n\tWorkflowId *string `json:\"WorkflowId,omitnil,omitempty\" name:\"WorkflowId\"`\n\n\t// 工作流名称\n\tWorkflowName *string `json:\"WorkflowName,omitnil,omitempty\" name:\"WorkflowName\"`\n\n\t// 工作流描述\n\tWorkflowDesc *string `json:\"WorkflowDesc,omitnil,omitempty\" name:\"WorkflowDesc\"`\n\n\t// 工作流状态，发布状态(UNPUBLISHED: 待发布 PUBLISHING: 发布中 PUBLISHED: 已发布 FAIL:发布失败)\n\tStatus *string `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 工作流是否启用\n\tIsEnable *bool `json:\"IsEnable,omitnil,omitempty\" name:\"IsEnable\"`\n\n\t// 是否开启异步调用工作流\n\tAsyncWorkflow *bool `json:\"AsyncWorkflow,omitnil,omitempty\" name:\"AsyncWorkflow\"`\n}\n\ntype KnowledgeQaWorkflowInfo struct {\n\t// 工作流ID\n\tWorkflowId *string `json:\"WorkflowId,omitnil,omitempty\" name:\"WorkflowId\"`\n\n\t// 工作流名称\n\tWorkflowName *string `json:\"WorkflowName,omitnil,omitempty\" name:\"WorkflowName\"`\n\n\t// 工作流描述\n\tWorkflowDesc *string `json:\"WorkflowDesc,omitnil,omitempty\" name:\"WorkflowDesc\"`\n\n\t// 工作流状态，发布状态(UNPUBLISHED: 待发布 PUBLISHING: 发布中 PUBLISHED: 已发布 FAIL:发布失败)\n\tStatus *string `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 工作流是否启用\n\tIsEnable *bool `json:\"IsEnable,omitnil,omitempty\" name:\"IsEnable\"`\n}\n\ntype KnowledgeSummary struct {\n\t// 1是问答 2是文档片段\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 知识内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tContent *string `json:\"Content,omitnil,omitempty\" name:\"Content\"`\n}\n\ntype KnowledgeUpdateInfo struct {\n\t// 共享知识库名称\n\tKnowledgeName *string `json:\"KnowledgeName,omitnil,omitempty\" name:\"KnowledgeName\"`\n\n\t// 共享知识库描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeDescription *string `json:\"KnowledgeDescription,omitnil,omitempty\" name:\"KnowledgeDescription\"`\n\n\t// Embedding模型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\t//\n\t// Deprecated: EmbeddingModel is deprecated.\n\tEmbeddingModel *string `json:\"EmbeddingModel,omitnil,omitempty\" name:\"EmbeddingModel\"`\n\n\t// 问答提取模型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\t//\n\t// Deprecated: QaExtractModel is deprecated.\n\tQaExtractModel *string `json:\"QaExtractModel,omitnil,omitempty\" name:\"QaExtractModel\"`\n\n\t// 拥有者id\n\tOwnerStaffId *string `json:\"OwnerStaffId,omitnil,omitempty\" name:\"OwnerStaffId\"`\n}\n\ntype KnowledgeWorkflow struct {\n\t// 是否启用工作流\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsEnabled *bool `json:\"IsEnabled,omitnil,omitempty\" name:\"IsEnabled\"`\n\n\t// 是否启用PDL\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUsePdl *bool `json:\"UsePdl,omitnil,omitempty\" name:\"UsePdl\"`\n}\n\ntype Label struct {\n\t// 标签ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tLabelBizId *string `json:\"LabelBizId,omitnil,omitempty\" name:\"LabelBizId\"`\n\n\t// 标签名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tLabelName *string `json:\"LabelName,omitnil,omitempty\" name:\"LabelName\"`\n}\n\n// Predefined struct for user\ntype ListAppKnowledgeDetailRequestParams struct {\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 页面大小\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 应用ID列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 空间列表\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\ntype ListAppKnowledgeDetailRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 页面大小\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 应用ID列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 空间列表\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\nfunc (r *ListAppKnowledgeDetailRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListAppKnowledgeDetailRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"AppBizIds\")\n\tdelete(f, \"SpaceId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListAppKnowledgeDetailRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListAppKnowledgeDetailResponseParams struct {\n\t// 列表总数\n\tTotal *uint64 `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 应用使用知识库容量详情\n\tList []*KnowledgeDetail `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListAppKnowledgeDetailResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListAppKnowledgeDetailResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListAppKnowledgeDetailResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListAppKnowledgeDetailResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListAppRequestParams struct {\n\t// 应用类型；knowledge_qa - 知识问答管理\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 每页数目，整型\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 页码，整型\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 关键词：应用/修改人\n\tKeyword *string `json:\"Keyword,omitnil,omitempty\" name:\"Keyword\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 智能体类型 dialogue：对话智能体，wechat：公众号智能体\n\tAgentType *string `json:\"AgentType,omitnil,omitempty\" name:\"AgentType\"`\n\n\t// 应用状态 1:未上线   2：运行中\n\tAppStatus *string `json:\"AppStatus,omitnil,omitempty\" name:\"AppStatus\"`\n}\n\ntype ListAppRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用类型；knowledge_qa - 知识问答管理\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 每页数目，整型\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 页码，整型\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 关键词：应用/修改人\n\tKeyword *string `json:\"Keyword,omitnil,omitempty\" name:\"Keyword\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 智能体类型 dialogue：对话智能体，wechat：公众号智能体\n\tAgentType *string `json:\"AgentType,omitnil,omitempty\" name:\"AgentType\"`\n\n\t// 应用状态 1:未上线   2：运行中\n\tAppStatus *string `json:\"AppStatus,omitnil,omitempty\" name:\"AppStatus\"`\n}\n\nfunc (r *ListAppRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListAppRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppType\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"Keyword\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"AgentType\")\n\tdelete(f, \"AppStatus\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListAppRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListAppResponseParams struct {\n\t// 数量\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 应用列表\n\tList []*AppInfo `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListAppResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListAppResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListAppResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListAppResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListAttributeLabelRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 每个属性同步拉取的标签值数量\n\tLabelSize *uint64 `json:\"LabelSize,omitnil,omitempty\" name:\"LabelSize\"`\n}\n\ntype ListAttributeLabelRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 每个属性同步拉取的标签值数量\n\tLabelSize *uint64 `json:\"LabelSize,omitnil,omitempty\" name:\"LabelSize\"`\n}\n\nfunc (r *ListAttributeLabelRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListAttributeLabelRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"Query\")\n\tdelete(f, \"LabelSize\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListAttributeLabelRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListAttributeLabelResponseParams struct {\n\t// 总数\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 列表\n\tList []*AttrLabelDetail `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListAttributeLabelResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListAttributeLabelResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListAttributeLabelResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListAttributeLabelResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListChannelRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用ID\n\t//\n\t// Deprecated: BotBizId is deprecated.\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 分页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 渠道类型, 10000: 微信订阅号，10001: 微信服务号，10002：企微应用，10004：微信客服，10005：小程序，10009：企微智能机器人\n\tChannelType []*uint64 `json:\"ChannelType,omitnil,omitempty\" name:\"ChannelType\"`\n\n\t// 渠道状态 1未发布 2运行中 3已下线\n\tChannelStatus []*uint64 `json:\"ChannelStatus,omitnil,omitempty\" name:\"ChannelStatus\"`\n}\n\ntype ListChannelRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 分页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 渠道类型, 10000: 微信订阅号，10001: 微信服务号，10002：企微应用，10004：微信客服，10005：小程序，10009：企微智能机器人\n\tChannelType []*uint64 `json:\"ChannelType,omitnil,omitempty\" name:\"ChannelType\"`\n\n\t// 渠道状态 1未发布 2运行中 3已下线\n\tChannelStatus []*uint64 `json:\"ChannelStatus,omitnil,omitempty\" name:\"ChannelStatus\"`\n}\n\nfunc (r *ListChannelRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListChannelRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"ChannelType\")\n\tdelete(f, \"ChannelStatus\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListChannelRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListChannelResponseParams struct {\n\t// 返回总数\n\tTotal *uint64 `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 渠道信息列表\n\tListChannel []*ChannelListInfo `json:\"ListChannel,omitnil,omitempty\" name:\"ListChannel\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListChannelResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListChannelResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListChannelResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListChannelResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListDocCateRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\ntype ListDocCateRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\nfunc (r *ListDocCateRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListDocCateRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListDocCateRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListDocCateResponseParams struct {\n\t// 列表\n\tList []*CateInfo `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListDocCateResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListDocCateResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListDocCateResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListDocCateResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype ListDocItem struct {\n\t// 文档ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 文件名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 重命名的新文档名称，在重命名提交之后，文档发布之前都是这个名称\n\tNewName *string `json:\"NewName,omitnil,omitempty\" name:\"NewName\"`\n\n\t// 文件类型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// cos路径\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCosUrl *string `json:\"CosUrl,omitnil,omitempty\" name:\"CosUrl\"`\n\n\t// 更新时间\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 文档状态\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 文档状态描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatusDesc *string `json:\"StatusDesc,omitnil,omitempty\" name:\"StatusDesc\"`\n\n\t// 原因\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReason *string `json:\"Reason,omitnil,omitempty\" name:\"Reason\"`\n\n\t// 答案中是否引用\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsRefer *bool `json:\"IsRefer,omitnil,omitempty\" name:\"IsRefer\"`\n\n\t// 问答对数量\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQaNum *int64 `json:\"QaNum,omitnil,omitempty\" name:\"QaNum\"`\n\n\t// 是否已删除\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsDeleted *bool `json:\"IsDeleted,omitnil,omitempty\" name:\"IsDeleted\"`\n\n\t// 文档来源\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSource *int64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 文档来源描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSourceDesc *string `json:\"SourceDesc,omitnil,omitempty\" name:\"SourceDesc\"`\n\n\t// 是否允许重新生成\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsAllowRestart *bool `json:\"IsAllowRestart,omitnil,omitempty\" name:\"IsAllowRestart\"`\n\n\t// qa是否已删除\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsDeletedQa *bool `json:\"IsDeletedQa,omitnil,omitempty\" name:\"IsDeletedQa\"`\n\n\t// 问答是否生成中\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsCreatingQa *bool `json:\"IsCreatingQa,omitnil,omitempty\" name:\"IsCreatingQa\"`\n\n\t// 是否允许删除\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsAllowDelete *bool `json:\"IsAllowDelete,omitnil,omitempty\" name:\"IsAllowDelete\"`\n\n\t// 是否允许操作引用开关\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsAllowRefer *bool `json:\"IsAllowRefer,omitnil,omitempty\" name:\"IsAllowRefer\"`\n\n\t// 问答是否生成过\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsCreatedQa *bool `json:\"IsCreatedQa,omitnil,omitempty\" name:\"IsCreatedQa\"`\n\n\t// 文档字符量\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocCharSize *string `json:\"DocCharSize,omitnil,omitempty\" name:\"DocCharSize\"`\n\n\t// 属性标签适用范围\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 属性标签\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAttrLabels []*AttrLabel `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 是否允许编辑\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsAllowEdit *bool `json:\"IsAllowEdit,omitnil,omitempty\" name:\"IsAllowEdit\"`\n\n\t// 外部引用链接类型 0：系统链接 1：自定义链接\n\t// 值为1时，WebUrl 字段不能为空，否则不生效。\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReferUrlType *uint64 `json:\"ReferUrlType,omitnil,omitempty\" name:\"ReferUrlType\"`\n\n\t// 网页(或自定义链接)地址\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWebUrl *string `json:\"WebUrl,omitnil,omitempty\" name:\"WebUrl\"`\n\n\t// 有效开始时间，unix时间戳\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix时间戳，0代表永久有效\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 是否允许重试，0：否，1：是\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsAllowRetry *bool `json:\"IsAllowRetry,omitnil,omitempty\" name:\"IsAllowRetry\"`\n\n\t// 0:文档比对处理 1:文档生成问答\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tProcessing []*int64 `json:\"Processing,omitnil,omitempty\" name:\"Processing\"`\n\n\t// 文档创建落库时间\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCreateTime *string `json:\"CreateTime,omitnil,omitempty\" name:\"CreateTime\"`\n\n\t// 文档所属分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 文档的用户自定义ID\n\tCustomerKnowledgeId *string `json:\"CustomerKnowledgeId,omitnil,omitempty\" name:\"CustomerKnowledgeId\"`\n\n\t// 文档的属性标记，0: 不做用户外部权限校验\n\tAttributeFlags []*uint64 `json:\"AttributeFlags,omitnil,omitempty\" name:\"AttributeFlags\"`\n\n\t// false:未停用，ture:已停用\n\tIsDisabled *bool `json:\"IsDisabled,omitnil,omitempty\" name:\"IsDisabled\"`\n\n\t// 员工名称\n\tStaffName *string `json:\"StaffName,omitnil,omitempty\" name:\"StaffName\"`\n}\n\n// Predefined struct for user\ntype ListDocRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\t//\n\t// 输入特定标识 lke:system:untagged  将查询所有未关联标签的文档\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 文档状态： 1-未生成 2-生成中 3-生成成功 4-生成失败 5-删除中 6-删除成功  7-审核中  8-审核失败 9-审核成功  10-待发布  11-发布中  12-已发布  13-学习中  14-学习失败  15-更新中  16-更新失败  17-解析中  18-解析失败  19-导入失败   20-已过期 21-超量失效 22-超量失效恢复\n\tStatus []*int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 查询类型 filename 文档、 attribute 标签\n\tQueryType *string `json:\"QueryType,omitnil,omitempty\" name:\"QueryType\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 文件类型分类筛选\n\tFileTypes []*string `json:\"FileTypes,omitnil,omitempty\" name:\"FileTypes\"`\n\n\t// 文档列表筛选标识位\n\tFilterFlag []*DocFilterFlag `json:\"FilterFlag,omitnil,omitempty\" name:\"FilterFlag\"`\n\n\t// 是否只展示当前分类的数据 0不是，1是\n\tShowCurrCate *uint64 `json:\"ShowCurrCate,omitnil,omitempty\" name:\"ShowCurrCate\"`\n}\n\ntype ListDocRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\t//\n\t// 输入特定标识 lke:system:untagged  将查询所有未关联标签的文档\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 文档状态： 1-未生成 2-生成中 3-生成成功 4-生成失败 5-删除中 6-删除成功  7-审核中  8-审核失败 9-审核成功  10-待发布  11-发布中  12-已发布  13-学习中  14-学习失败  15-更新中  16-更新失败  17-解析中  18-解析失败  19-导入失败   20-已过期 21-超量失效 22-超量失效恢复\n\tStatus []*int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 查询类型 filename 文档、 attribute 标签\n\tQueryType *string `json:\"QueryType,omitnil,omitempty\" name:\"QueryType\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 文件类型分类筛选\n\tFileTypes []*string `json:\"FileTypes,omitnil,omitempty\" name:\"FileTypes\"`\n\n\t// 文档列表筛选标识位\n\tFilterFlag []*DocFilterFlag `json:\"FilterFlag,omitnil,omitempty\" name:\"FilterFlag\"`\n\n\t// 是否只展示当前分类的数据 0不是，1是\n\tShowCurrCate *uint64 `json:\"ShowCurrCate,omitnil,omitempty\" name:\"ShowCurrCate\"`\n}\n\nfunc (r *ListDocRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListDocRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"Query\")\n\tdelete(f, \"Status\")\n\tdelete(f, \"QueryType\")\n\tdelete(f, \"CateBizId\")\n\tdelete(f, \"FileTypes\")\n\tdelete(f, \"FilterFlag\")\n\tdelete(f, \"ShowCurrCate\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListDocRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListDocResponseParams struct {\n\t// 文档数量\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 文档列表\n\tList []*ListDocItem `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListDocResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListDocResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListDocResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListDocResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListModelRequestParams struct {\n\t// 应用类型；knowledge_qa-知识问答管理；summary-知识摘要；classifys-知识标签提取\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 应用模式 standard:标准模式, agent: agent模式，single_workflow：单工作流模式\n\tPattern *string `json:\"Pattern,omitnil,omitempty\" name:\"Pattern\"`\n\n\t// 模型类别 generate：生成模型，thought：思考模型,embedding模型，rerank：rerank模型\n\tModelCategory *string `json:\"ModelCategory,omitnil,omitempty\" name:\"ModelCategory\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype ListModelRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用类型；knowledge_qa-知识问答管理；summary-知识摘要；classifys-知识标签提取\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 应用模式 standard:标准模式, agent: agent模式，single_workflow：单工作流模式\n\tPattern *string `json:\"Pattern,omitnil,omitempty\" name:\"Pattern\"`\n\n\t// 模型类别 generate：生成模型，thought：思考模型,embedding模型，rerank：rerank模型\n\tModelCategory *string `json:\"ModelCategory,omitnil,omitempty\" name:\"ModelCategory\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *ListModelRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListModelRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppType\")\n\tdelete(f, \"Pattern\")\n\tdelete(f, \"ModelCategory\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListModelRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListModelResponseParams struct {\n\t// 模型列表\n\tList []*ModelInfo `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListModelResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListModelResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListModelResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListModelResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListQACateRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\ntype ListQACateRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n}\n\nfunc (r *ListQACateRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListQACateRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListQACateRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListQACateResponseParams struct {\n\t// 列表\n\tList []*QACate `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListQACateResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListQACateResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListQACateResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListQACateResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListQARequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *int64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页大小\n\tPageSize *int64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询问题\n\t//\n\t// 输入特定标识 lke:system:untagged  将查询所有未关联标签的问答\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 校验状态(1未校验2采纳3不采纳)\n\tAcceptStatus []*int64 `json:\"AcceptStatus,omitnil,omitempty\" name:\"AcceptStatus\"`\n\n\t// 发布状态(2待发布 3发布中 4已发布 7审核中 8审核失败 9人工申述中 11人工申述失败 12已过期 13超量失效 14超量失效恢复)\n\tReleaseStatus []*int64 `json:\"ReleaseStatus,omitnil,omitempty\" name:\"ReleaseStatus\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 来源(1 文档生成 2 批量导入 3 手动添加)\n\tSource *int64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 查询答案\n\tQueryAnswer *string `json:\"QueryAnswer,omitnil,omitempty\" name:\"QueryAnswer\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// QA业务ID列表\n\tQaBizIds []*string `json:\"QaBizIds,omitnil,omitempty\" name:\"QaBizIds\"`\n\n\t// 查询类型 filename 名称、 attribute 标签\n\tQueryType *string `json:\"QueryType,omitnil,omitempty\" name:\"QueryType\"`\n\n\t// 是否只展示当前分类的数据 0不是，1是\n\tShowCurrCate *uint64 `json:\"ShowCurrCate,omitnil,omitempty\" name:\"ShowCurrCate\"`\n}\n\ntype ListQARequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *int64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页大小\n\tPageSize *int64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询问题\n\t//\n\t// 输入特定标识 lke:system:untagged  将查询所有未关联标签的问答\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 校验状态(1未校验2采纳3不采纳)\n\tAcceptStatus []*int64 `json:\"AcceptStatus,omitnil,omitempty\" name:\"AcceptStatus\"`\n\n\t// 发布状态(2待发布 3发布中 4已发布 7审核中 8审核失败 9人工申述中 11人工申述失败 12已过期 13超量失效 14超量失效恢复)\n\tReleaseStatus []*int64 `json:\"ReleaseStatus,omitnil,omitempty\" name:\"ReleaseStatus\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 来源(1 文档生成 2 批量导入 3 手动添加)\n\tSource *int64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 查询答案\n\tQueryAnswer *string `json:\"QueryAnswer,omitnil,omitempty\" name:\"QueryAnswer\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// QA业务ID列表\n\tQaBizIds []*string `json:\"QaBizIds,omitnil,omitempty\" name:\"QaBizIds\"`\n\n\t// 查询类型 filename 名称、 attribute 标签\n\tQueryType *string `json:\"QueryType,omitnil,omitempty\" name:\"QueryType\"`\n\n\t// 是否只展示当前分类的数据 0不是，1是\n\tShowCurrCate *uint64 `json:\"ShowCurrCate,omitnil,omitempty\" name:\"ShowCurrCate\"`\n}\n\nfunc (r *ListQARequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListQARequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"Query\")\n\tdelete(f, \"AcceptStatus\")\n\tdelete(f, \"ReleaseStatus\")\n\tdelete(f, \"DocBizId\")\n\tdelete(f, \"Source\")\n\tdelete(f, \"QueryAnswer\")\n\tdelete(f, \"CateBizId\")\n\tdelete(f, \"QaBizIds\")\n\tdelete(f, \"QueryType\")\n\tdelete(f, \"ShowCurrCate\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListQARequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListQAResponseParams struct {\n\t// 问答数量\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 待校验问答数量\n\tWaitVerifyTotal *string `json:\"WaitVerifyTotal,omitnil,omitempty\" name:\"WaitVerifyTotal\"`\n\n\t// 未采纳问答数量\n\tNotAcceptedTotal *string `json:\"NotAcceptedTotal,omitnil,omitempty\" name:\"NotAcceptedTotal\"`\n\n\t// 已采纳问答数量\n\tAcceptedTotal *string `json:\"AcceptedTotal,omitnil,omitempty\" name:\"AcceptedTotal\"`\n\n\t// 页码\n\tPageNumber *int64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 问答详情\n\tList []*ListQaItem `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListQAResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListQAResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListQAResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListQAResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype ListQaItem struct {\n\t// 问答ID\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 问题\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 答案\n\tAnswer *string `json:\"Answer,omitnil,omitempty\" name:\"Answer\"`\n\n\t// 来源\n\tSource *int64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 来源描述\n\tSourceDesc *string `json:\"SourceDesc,omitnil,omitempty\" name:\"SourceDesc\"`\n\n\t// 更新时间\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 状态\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 状态描述\n\tStatusDesc *string `json:\"StatusDesc,omitnil,omitempty\" name:\"StatusDesc\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 创建时间\n\tCreateTime *string `json:\"CreateTime,omitnil,omitempty\" name:\"CreateTime\"`\n\n\t// 是否允许编辑\n\tIsAllowEdit *bool `json:\"IsAllowEdit,omitnil,omitempty\" name:\"IsAllowEdit\"`\n\n\t// 是否允许删除\n\tIsAllowDelete *bool `json:\"IsAllowDelete,omitnil,omitempty\" name:\"IsAllowDelete\"`\n\n\t// 是否允许校验\n\tIsAllowAccept *bool `json:\"IsAllowAccept,omitnil,omitempty\" name:\"IsAllowAccept\"`\n\n\t// 文档名称\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文档类型\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// 问答字符数\n\tQaCharSize *string `json:\"QaCharSize,omitnil,omitempty\" name:\"QaCharSize\"`\n\n\t// 有效开始时间，unix时间戳\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix时间戳，0代表永久有效\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 属性标签适用范围 1：全部，2：按条件\n\tAttrRange *int64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 属性标签\n\tAttrLabels []*AttrLabel `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 相似问个数\n\tSimilarQuestionNum *uint64 `json:\"SimilarQuestionNum,omitnil,omitempty\" name:\"SimilarQuestionNum\"`\n\n\t// 返回问答关联的相似问,联动搜索,仅展示一条\n\tSimilarQuestionTips *string `json:\"SimilarQuestionTips,omitnil,omitempty\" name:\"SimilarQuestionTips\"`\n\n\t// 问答是否停用，false:未停用，ture:已停用\n\tIsDisabled *bool `json:\"IsDisabled,omitnil,omitempty\" name:\"IsDisabled\"`\n\n\t// 员工名称\n\tStaffName *string `json:\"StaffName,omitnil,omitempty\" name:\"StaffName\"`\n}\n\n// Predefined struct for user\ntype ListReferShareKnowledgeRequestParams struct {\n\t// 应用业务id\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype ListReferShareKnowledgeRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用业务id\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *ListReferShareKnowledgeRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListReferShareKnowledgeRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListReferShareKnowledgeRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListReferShareKnowledgeResponseParams struct {\n\t// 共享知识库信息列表\n\tList []*KnowledgeBaseInfo `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListReferShareKnowledgeResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListReferShareKnowledgeResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListReferShareKnowledgeResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListReferShareKnowledgeResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListRejectedQuestionPreviewRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 发布单ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n\n\t// 状态(1新增2更新3删除)\n\tActions []*uint64 `json:\"Actions,omitnil,omitempty\" name:\"Actions\"`\n\n\t// 开始时间\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n}\n\ntype ListRejectedQuestionPreviewRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 发布单ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n\n\t// 状态(1新增2更新3删除)\n\tActions []*uint64 `json:\"Actions,omitnil,omitempty\" name:\"Actions\"`\n\n\t// 开始时间\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n}\n\nfunc (r *ListRejectedQuestionPreviewRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListRejectedQuestionPreviewRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"Query\")\n\tdelete(f, \"ReleaseBizId\")\n\tdelete(f, \"Actions\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListRejectedQuestionPreviewRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListRejectedQuestionPreviewResponseParams struct {\n\t// 文档数量\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 文档列表\n\tList []*ReleaseRejectedQuestion `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListRejectedQuestionPreviewResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListRejectedQuestionPreviewResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListRejectedQuestionPreviewResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListRejectedQuestionPreviewResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListRejectedQuestionRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n}\n\ntype ListRejectedQuestionRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n}\n\nfunc (r *ListRejectedQuestionRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListRejectedQuestionRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"Query\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListRejectedQuestionRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListRejectedQuestionResponseParams struct {\n\t// 总数\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 拒答问题列表\n\tList []*RejectedQuestion `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListRejectedQuestionResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListRejectedQuestionResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListRejectedQuestionResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListRejectedQuestionResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListReleaseConfigPreviewRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 发布单ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n\n\t// 状态(1新增2更新3删除)\n\tActions []*uint64 `json:\"Actions,omitnil,omitempty\" name:\"Actions\"`\n\n\t// 开始时间\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 发布状态\n\tReleaseStatus []*uint64 `json:\"ReleaseStatus,omitnil,omitempty\" name:\"ReleaseStatus\"`\n}\n\ntype ListReleaseConfigPreviewRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 发布单ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n\n\t// 状态(1新增2更新3删除)\n\tActions []*uint64 `json:\"Actions,omitnil,omitempty\" name:\"Actions\"`\n\n\t// 开始时间\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 发布状态\n\tReleaseStatus []*uint64 `json:\"ReleaseStatus,omitnil,omitempty\" name:\"ReleaseStatus\"`\n}\n\nfunc (r *ListReleaseConfigPreviewRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListReleaseConfigPreviewRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"Query\")\n\tdelete(f, \"ReleaseBizId\")\n\tdelete(f, \"Actions\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"ReleaseStatus\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListReleaseConfigPreviewRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListReleaseConfigPreviewResponseParams struct {\n\t// 数量\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 配置项列表\n\tList []*ReleaseConfigs `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListReleaseConfigPreviewResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListReleaseConfigPreviewResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListReleaseConfigPreviewResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListReleaseConfigPreviewResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListReleaseDocPreviewRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 发布单ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n\n\t// 开始时间\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 状态(1新增2修改3删除)\n\tActions []*uint64 `json:\"Actions,omitnil,omitempty\" name:\"Actions\"`\n}\n\ntype ListReleaseDocPreviewRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 发布单ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n\n\t// 开始时间\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 状态(1新增2修改3删除)\n\tActions []*uint64 `json:\"Actions,omitnil,omitempty\" name:\"Actions\"`\n}\n\nfunc (r *ListReleaseDocPreviewRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListReleaseDocPreviewRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"Query\")\n\tdelete(f, \"ReleaseBizId\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"Actions\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListReleaseDocPreviewRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListReleaseDocPreviewResponseParams struct {\n\t// 文档数量\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 文档列表\n\tList []*ReleaseDoc `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListReleaseDocPreviewResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListReleaseDocPreviewResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListReleaseDocPreviewResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListReleaseDocPreviewResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype ListReleaseItem struct {\n\t// 版本ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n\n\t// 发布人\n\tOperator *string `json:\"Operator,omitnil,omitempty\" name:\"Operator\"`\n\n\t// 发布描述\n\tDesc *string `json:\"Desc,omitnil,omitempty\" name:\"Desc\"`\n\n\t// 更新时间\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 发布状态，1：待发布，2：发布中，3：发布成功，5：发布失败\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 发布状态描述\n\tStatusDesc *string `json:\"StatusDesc,omitnil,omitempty\" name:\"StatusDesc\"`\n\n\t// 失败原因\n\tReason *string `json:\"Reason,omitnil,omitempty\" name:\"Reason\"`\n\n\t// 发布成功数\n\tSuccessCount *int64 `json:\"SuccessCount,omitnil,omitempty\" name:\"SuccessCount\"`\n\n\t// 发布失败数\n\tFailCount *int64 `json:\"FailCount,omitnil,omitempty\" name:\"FailCount\"`\n}\n\n// Predefined struct for user\ntype ListReleaseQAPreviewRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 发布单ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n\n\t// 开始时间\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 状态(1新增2修改3删除)\n\tActions []*uint64 `json:\"Actions,omitnil,omitempty\" name:\"Actions\"`\n\n\t// 发布状态(4发布成功5发布失败)\n\tReleaseStatus []*uint64 `json:\"ReleaseStatus,omitnil,omitempty\" name:\"ReleaseStatus\"`\n}\n\ntype ListReleaseQAPreviewRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 发布单ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n\n\t// 开始时间\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 状态(1新增2修改3删除)\n\tActions []*uint64 `json:\"Actions,omitnil,omitempty\" name:\"Actions\"`\n\n\t// 发布状态(4发布成功5发布失败)\n\tReleaseStatus []*uint64 `json:\"ReleaseStatus,omitnil,omitempty\" name:\"ReleaseStatus\"`\n}\n\nfunc (r *ListReleaseQAPreviewRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListReleaseQAPreviewRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"Query\")\n\tdelete(f, \"ReleaseBizId\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"Actions\")\n\tdelete(f, \"ReleaseStatus\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListReleaseQAPreviewRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListReleaseQAPreviewResponseParams struct {\n\t// 文档数量\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 文档列表\n\tList []*ReleaseQA `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListReleaseQAPreviewResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListReleaseQAPreviewResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListReleaseQAPreviewResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListReleaseQAPreviewResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListReleaseRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n}\n\ntype ListReleaseRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n}\n\nfunc (r *ListReleaseRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListReleaseRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListReleaseRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListReleaseResponseParams struct {\n\t// 发布列表数量\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 发布列表\n\tList []*ListReleaseItem `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListReleaseResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListReleaseResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListReleaseResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListReleaseResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListSelectDocRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档名称。可通过文档名称检索支持生成问答的文档，不支持xlsx、xls、csv格式\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文档状态筛选。文档状态对应码为7 审核中、8 审核失败、10 待发布、11 发布中、12 已发布、13 学习中、14 学习失败 20 已过期。其中仅状态为10 待发布、12 已发布的文档支持生成问答\n\tStatus []*int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n}\n\ntype ListSelectDocRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档名称。可通过文档名称检索支持生成问答的文档，不支持xlsx、xls、csv格式\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文档状态筛选。文档状态对应码为7 审核中、8 审核失败、10 待发布、11 发布中、12 已发布、13 学习中、14 学习失败 20 已过期。其中仅状态为10 待发布、12 已发布的文档支持生成问答\n\tStatus []*int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n}\n\nfunc (r *ListSelectDocRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListSelectDocRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"FileName\")\n\tdelete(f, \"Status\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListSelectDocRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListSelectDocResponseParams struct {\n\t// 下拉框内容\n\tList []*Option `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListSelectDocResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListSelectDocResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListSelectDocResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListSelectDocResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListSharedKnowledgeRequestParams struct {\n\t// 分页序号，编码从1开始\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 分页大小，有效范围为[1,200]\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 搜索关键字\n\tKeyword *string `json:\"Keyword,omitnil,omitempty\" name:\"Keyword\"`\n\n\t// 共享知识库类型，0普通，1公众号\n\tKnowledgeTypes []*int64 `json:\"KnowledgeTypes,omitnil,omitempty\" name:\"KnowledgeTypes\"`\n}\n\ntype ListSharedKnowledgeRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 分页序号，编码从1开始\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 分页大小，有效范围为[1,200]\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 搜索关键字\n\tKeyword *string `json:\"Keyword,omitnil,omitempty\" name:\"Keyword\"`\n\n\t// 共享知识库类型，0普通，1公众号\n\tKnowledgeTypes []*int64 `json:\"KnowledgeTypes,omitnil,omitempty\" name:\"KnowledgeTypes\"`\n}\n\nfunc (r *ListSharedKnowledgeRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListSharedKnowledgeRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"Keyword\")\n\tdelete(f, \"KnowledgeTypes\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListSharedKnowledgeRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListSharedKnowledgeResponseParams struct {\n\t// 累计数量\n\tTotal *uint64 `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 知识库列表\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeList []*KnowledgeDetailInfo `json:\"KnowledgeList,omitnil,omitempty\" name:\"KnowledgeList\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListSharedKnowledgeResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListSharedKnowledgeResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListSharedKnowledgeResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListSharedKnowledgeResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListUnsatisfiedReplyRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 分页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 用户请求(问题或答案)\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 错误类型检索\n\tReasons []*string `json:\"Reasons,omitnil,omitempty\" name:\"Reasons\"`\n\n\t// 操作状态  0-全部 1-待处理  2-已处理【包括答案纠错，拒答，忽略】\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n}\n\ntype ListUnsatisfiedReplyRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 页码\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 分页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 用户请求(问题或答案)\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 错误类型检索\n\tReasons []*string `json:\"Reasons,omitnil,omitempty\" name:\"Reasons\"`\n\n\t// 操作状态  0-全部 1-待处理  2-已处理【包括答案纠错，拒答，忽略】\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n}\n\nfunc (r *ListUnsatisfiedReplyRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListUnsatisfiedReplyRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"Query\")\n\tdelete(f, \"Reasons\")\n\tdelete(f, \"Status\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListUnsatisfiedReplyRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListUnsatisfiedReplyResponseParams struct {\n\t// 总数\n\tTotal *string `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 不满意回复列表\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tList []*UnsatisfiedReply `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListUnsatisfiedReplyResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListUnsatisfiedReplyResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListUnsatisfiedReplyResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListUnsatisfiedReplyResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListUsageCallDetailRequestParams struct {\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 页码（从1开始）\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 分页数量(最大值1000)\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// uin列表\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 应用ID列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 调用类型列表\n\tCallType *string `json:\"CallType,omitnil,omitempty\" name:\"CallType\"`\n\n\t// 筛选子场景\n\tSubScenes []*string `json:\"SubScenes,omitnil,omitempty\" name:\"SubScenes\"`\n\n\t// 应用类型(knowledge_qa应用管理， shared_knowlege 共享知识库)\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 账单明细对应的自定义tag\n\tBillingTag *string `json:\"BillingTag,omitnil,omitempty\" name:\"BillingTag\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\ntype ListUsageCallDetailRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 模型标识\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 开始时间\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 页码（从1开始）\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 分页数量(最大值1000)\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// uin列表\n\tUinAccount []*string `json:\"UinAccount,omitnil,omitempty\" name:\"UinAccount\"`\n\n\t// 应用ID列表\n\tAppBizIds []*string `json:\"AppBizIds,omitnil,omitempty\" name:\"AppBizIds\"`\n\n\t// 调用类型列表\n\tCallType *string `json:\"CallType,omitnil,omitempty\" name:\"CallType\"`\n\n\t// 筛选子场景\n\tSubScenes []*string `json:\"SubScenes,omitnil,omitempty\" name:\"SubScenes\"`\n\n\t// 应用类型(knowledge_qa应用管理， shared_knowlege 共享知识库)\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 账单明细对应的自定义tag\n\tBillingTag *string `json:\"BillingTag,omitnil,omitempty\" name:\"BillingTag\"`\n\n\t// 空间id\n\tSpaceId *string `json:\"SpaceId,omitnil,omitempty\" name:\"SpaceId\"`\n}\n\nfunc (r *ListUsageCallDetailRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListUsageCallDetailRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"ModelName\")\n\tdelete(f, \"StartTime\")\n\tdelete(f, \"EndTime\")\n\tdelete(f, \"PageNumber\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"UinAccount\")\n\tdelete(f, \"AppBizIds\")\n\tdelete(f, \"CallType\")\n\tdelete(f, \"SubScenes\")\n\tdelete(f, \"AppType\")\n\tdelete(f, \"BillingTag\")\n\tdelete(f, \"SpaceId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListUsageCallDetailRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListUsageCallDetailResponseParams struct {\n\t// 列表总数\n\tTotal *uint64 `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 列表\n\tList []*CallDetail `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListUsageCallDetailResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListUsageCallDetailResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListUsageCallDetailResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListUsageCallDetailResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListWorkflowRunsRequestParams struct {\n\t// 运行环境。0: 测试环境； 1: 正式环境\n\tRunEnv *uint64 `json:\"RunEnv,omitnil,omitempty\" name:\"RunEnv\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 页码\n\tPage *uint64 `json:\"Page,omitnil,omitempty\" name:\"Page\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype ListWorkflowRunsRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 运行环境。0: 测试环境； 1: 正式环境\n\tRunEnv *uint64 `json:\"RunEnv,omitnil,omitempty\" name:\"RunEnv\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 页码\n\tPage *uint64 `json:\"Page,omitnil,omitempty\" name:\"Page\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *ListWorkflowRunsRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListWorkflowRunsRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"RunEnv\")\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"Page\")\n\tdelete(f, \"PageSize\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ListWorkflowRunsRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ListWorkflowRunsResponseParams struct {\n\t// 总数\n\tTotal *uint64 `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 工作流运行列表\n\tWorkflowRuns []*WorkflowRunBase `json:\"WorkflowRuns,omitnil,omitempty\" name:\"WorkflowRuns\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ListWorkflowRunsResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ListWorkflowRunsResponseParams `json:\"Response\"`\n}\n\nfunc (r *ListWorkflowRunsResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ListWorkflowRunsResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype ModelInfo struct {\n\t// 模型名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 模型描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModelDesc *string `json:\"ModelDesc,omitnil,omitempty\" name:\"ModelDesc\"`\n\n\t// 模型名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAliasName *string `json:\"AliasName,omitnil,omitempty\" name:\"AliasName\"`\n\n\t// 资源状态 1：资源可用；2：资源已用尽\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tResourceStatus *uint64 `json:\"ResourceStatus,omitnil,omitempty\" name:\"ResourceStatus\"`\n\n\t// 提示词内容字符限制\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPromptWordsLimit *string `json:\"PromptWordsLimit,omitnil,omitempty\" name:\"PromptWordsLimit\"`\n\n\t// 通过核心采样控制内容生成的多样性，较高的Top P值会导致生成更多样的内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTopP *ModelParameter `json:\"TopP,omitnil,omitempty\" name:\"TopP\"`\n\n\t// 温度控制随机性\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTemperature *ModelParameter `json:\"Temperature,omitnil,omitempty\" name:\"Temperature\"`\n\n\t// 最多能生成的token数量\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tMaxTokens *ModelParameter `json:\"MaxTokens,omitnil,omitempty\" name:\"MaxTokens\"`\n\n\t// 模型来源 Hunyuan：腾讯混元大模型,Industry：腾讯云行业大模型,Experience：新模型体验,Custom自定义模型\n\tSource *string `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 模型图标\n\tIcon *string `json:\"Icon,omitnil,omitempty\" name:\"Icon\"`\n\n\t// 是否免费\n\tIsFree *bool `json:\"IsFree,omitnil,omitempty\" name:\"IsFree\"`\n\n\t// 模型对话框可输入的上限\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tInputLenLimit *uint64 `json:\"InputLenLimit,omitnil,omitempty\" name:\"InputLenLimit\"`\n\n\t// 支持工作流的类型 0:模型不支持; 1: 模型支持工作流； 2： 模型支持效果不佳；\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSupportWorkflowStatus *uint64 `json:\"SupportWorkflowStatus,omitnil,omitempty\" name:\"SupportWorkflowStatus\"`\n\n\t// 模型类别 generate：生成模型，thought：思考模型\n\tModelCategory *string `json:\"ModelCategory,omitnil,omitempty\" name:\"ModelCategory\"`\n\n\t// 是否默认模型\n\tIsDefault *bool `json:\"IsDefault,omitnil,omitempty\" name:\"IsDefault\"`\n\n\t// 角色提示词输入长度限制\n\tRoleLenLimit *uint64 `json:\"RoleLenLimit,omitnil,omitempty\" name:\"RoleLenLimit\"`\n\n\t// 是否专属并发模型\n\tIsExclusive *bool `json:\"IsExclusive,omitnil,omitempty\" name:\"IsExclusive\"`\n\n\t// 模型支持智能通话效果\n\tSupportAiCallStatus *uint64 `json:\"SupportAiCallStatus,omitnil,omitempty\" name:\"SupportAiCallStatus\"`\n\n\t// 专属并发数\n\tConcurrency *uint64 `json:\"Concurrency,omitnil,omitempty\" name:\"Concurrency\"`\n\n\t// 模型标签\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModelTags []*string `json:\"ModelTags,omitnil,omitempty\" name:\"ModelTags\"`\n\n\t// 模型超参定义\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModelParams []*ModelParameter `json:\"ModelParams,omitnil,omitempty\" name:\"ModelParams\"`\n\n\t// 提供商名称\n\tProviderName *string `json:\"ProviderName,omitnil,omitempty\" name:\"ProviderName\"`\n\n\t// 提供商别名\n\tProviderAliasName *string `json:\"ProviderAliasName,omitnil,omitempty\" name:\"ProviderAliasName\"`\n\n\t// 提供商类型 Self:提供商，Custom：自定义模型提供商，Third：第三方模型提供商\n\tProviderType *string `json:\"ProviderType,omitnil,omitempty\" name:\"ProviderType\"`\n\n\t// 是否关闭模型超参\n\tIsCloseModelParams *bool `json:\"IsCloseModelParams,omitnil,omitempty\" name:\"IsCloseModelParams\"`\n\n\t// 是否支持深度思考\n\tIsDeepThinking *bool `json:\"IsDeepThinking,omitnil,omitempty\" name:\"IsDeepThinking\"`\n}\n\ntype ModelParameter struct {\n\t// 默认值\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDefault *float64 `json:\"Default,omitnil,omitempty\" name:\"Default\"`\n\n\t// 最小值\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tMin *float64 `json:\"Min,omitnil,omitempty\" name:\"Min\"`\n\n\t// 最大值\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tMax *float64 `json:\"Max,omitnil,omitempty\" name:\"Max\"`\n\n\t// 超参名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n}\n\ntype ModelParams struct {\n\t// 温度\n\tTemperature *float64 `json:\"Temperature,omitnil,omitempty\" name:\"Temperature\"`\n\n\t// Top_P\n\tTopP *float64 `json:\"TopP,omitnil,omitempty\" name:\"TopP\"`\n\n\t// 随机种子\n\tSeed *int64 `json:\"Seed,omitnil,omitempty\" name:\"Seed\"`\n\n\t// 存在惩罚\n\tPresencePenalty *float64 `json:\"PresencePenalty,omitnil,omitempty\" name:\"PresencePenalty\"`\n\n\t// 频率惩罚\n\tFrequencyPenalty *float64 `json:\"FrequencyPenalty,omitnil,omitempty\" name:\"FrequencyPenalty\"`\n\n\t// 重复惩罚\n\tRepetitionPenalty *float64 `json:\"RepetitionPenalty,omitnil,omitempty\" name:\"RepetitionPenalty\"`\n\n\t// 最大输出长度\n\tMaxTokens *int64 `json:\"MaxTokens,omitnil,omitempty\" name:\"MaxTokens\"`\n\n\t// 停止序列\n\tStopSequences []*string `json:\"StopSequences,omitnil,omitempty\" name:\"StopSequences\"`\n\n\t// 输出格式\n\tReplyFormat *string `json:\"ReplyFormat,omitnil,omitempty\" name:\"ReplyFormat\"`\n}\n\n// Predefined struct for user\ntype ModifyAppRequestParams struct {\n\t// 应用 ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用类型；knowledge_qa-知识问答管理；summary-知识摘要；classify-知识标签提取\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 应用基础配置\n\tBaseConfig *BaseConfig `json:\"BaseConfig,omitnil,omitempty\" name:\"BaseConfig\"`\n\n\t// 应用配置\n\tAppConfig *AppConfig `json:\"AppConfig,omitnil,omitempty\" name:\"AppConfig\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype ModifyAppRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用 ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 应用类型；knowledge_qa-知识问答管理；summary-知识摘要；classify-知识标签提取\n\tAppType *string `json:\"AppType,omitnil,omitempty\" name:\"AppType\"`\n\n\t// 应用基础配置\n\tBaseConfig *BaseConfig `json:\"BaseConfig,omitnil,omitempty\" name:\"BaseConfig\"`\n\n\t// 应用配置\n\tAppConfig *AppConfig `json:\"AppConfig,omitnil,omitempty\" name:\"AppConfig\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *ModifyAppRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyAppRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"AppType\")\n\tdelete(f, \"BaseConfig\")\n\tdelete(f, \"AppConfig\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ModifyAppRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyAppResponseParams struct {\n\t// 应用App\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 更新时间\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ModifyAppResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ModifyAppResponseParams `json:\"Response\"`\n}\n\nfunc (r *ModifyAppResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyAppResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyAttributeLabelRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 标签ID\n\tAttributeBizId *string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n\n\t// 标签名称\n\tAttrName *string `json:\"AttrName,omitnil,omitempty\" name:\"AttrName\"`\n\n\t// 标签标识 （已作废）\n\tAttrKey *string `json:\"AttrKey,omitnil,omitempty\" name:\"AttrKey\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 删除的标签值\n\tDeleteLabelBizIds []*string `json:\"DeleteLabelBizIds,omitnil,omitempty\" name:\"DeleteLabelBizIds\"`\n\n\t// 新增或编辑的标签\n\tLabels []*AttributeLabel `json:\"Labels,omitnil,omitempty\" name:\"Labels\"`\n}\n\ntype ModifyAttributeLabelRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 标签ID\n\tAttributeBizId *string `json:\"AttributeBizId,omitnil,omitempty\" name:\"AttributeBizId\"`\n\n\t// 标签名称\n\tAttrName *string `json:\"AttrName,omitnil,omitempty\" name:\"AttrName\"`\n\n\t// 标签标识 （已作废）\n\tAttrKey *string `json:\"AttrKey,omitnil,omitempty\" name:\"AttrKey\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 删除的标签值\n\tDeleteLabelBizIds []*string `json:\"DeleteLabelBizIds,omitnil,omitempty\" name:\"DeleteLabelBizIds\"`\n\n\t// 新增或编辑的标签\n\tLabels []*AttributeLabel `json:\"Labels,omitnil,omitempty\" name:\"Labels\"`\n}\n\nfunc (r *ModifyAttributeLabelRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyAttributeLabelRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"AttributeBizId\")\n\tdelete(f, \"AttrName\")\n\tdelete(f, \"AttrKey\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"DeleteLabelBizIds\")\n\tdelete(f, \"Labels\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ModifyAttributeLabelRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyAttributeLabelResponseParams struct {\n\t// 任务ID\n\tTaskId *string `json:\"TaskId,omitnil,omitempty\" name:\"TaskId\"`\n\n\t// 标签ID与名称\n\tLabels []*AttributeLabel `json:\"Labels,omitnil,omitempty\" name:\"Labels\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ModifyAttributeLabelResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ModifyAttributeLabelResponseParams `json:\"Response\"`\n}\n\nfunc (r *ModifyAttributeLabelResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyAttributeLabelResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyDocAttrRangeRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizIds []*string `json:\"DocBizIds,omitnil,omitempty\" name:\"DocBizIds\"`\n\n\t// 属性标签适用范围 1：全部，2：按条件\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 属性标签引用\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n}\n\ntype ModifyDocAttrRangeRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizIds []*string `json:\"DocBizIds,omitnil,omitempty\" name:\"DocBizIds\"`\n\n\t// 属性标签适用范围 1：全部，2：按条件\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 属性标签引用\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n}\n\nfunc (r *ModifyDocAttrRangeRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyDocAttrRangeRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"DocBizIds\")\n\tdelete(f, \"AttrRange\")\n\tdelete(f, \"AttrLabels\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ModifyDocAttrRangeRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyDocAttrRangeResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ModifyDocAttrRangeResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ModifyDocAttrRangeResponseParams `json:\"Response\"`\n}\n\nfunc (r *ModifyDocAttrRangeResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyDocAttrRangeResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyDocCateRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 分类名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 分类业务ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\ntype ModifyDocCateRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 分类名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 分类业务ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\nfunc (r *ModifyDocCateRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyDocCateRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"Name\")\n\tdelete(f, \"CateBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ModifyDocCateRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyDocCateResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ModifyDocCateResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ModifyDocCateResponseParams `json:\"Response\"`\n}\n\nfunc (r *ModifyDocCateResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyDocCateResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyDocRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 是否引用链接\n\tIsRefer *bool `json:\"IsRefer,omitnil,omitempty\" name:\"IsRefer\"`\n\n\t// 标签适用范围，需要传参为1\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 关联的标签\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 网页(或自定义链接)地址\n\tWebUrl *string `json:\"WebUrl,omitnil,omitempty\" name:\"WebUrl\"`\n\n\t// 外部引用链接类型 0：系统链接 1：自定义链接\n\t// 值为1时，WebUrl 字段不能为空，否则不生效。\n\tReferUrlType *uint64 `json:\"ReferUrlType,omitnil,omitempty\" name:\"ReferUrlType\"`\n\n\t// 有效开始时间，unix时间戳\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix时间戳，0代表永久有效\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 是否可下载，IsRefer为true并且ReferUrlType为0时，该值才有意义\n\tIsDownload *bool `json:\"IsDownload,omitnil,omitempty\" name:\"IsDownload\"`\n\n\t// 需要修改的内容类型  0  无效 1 更新文档cos信息 2 更新文档引用信息 3 更新文档刷新频率 4 腾讯文档刷新\n\tModifyTypes []*uint64 `json:\"ModifyTypes,omitnil,omitempty\" name:\"ModifyTypes\"`\n\n\t// 文档更新频率\n\tUpdatePeriodInfo *UpdatePeriodInfo `json:\"UpdatePeriodInfo,omitnil,omitempty\" name:\"UpdatePeriodInfo\"`\n\n\t// 自定义切分规则\n\tSplitRule *string `json:\"SplitRule,omitnil,omitempty\" name:\"SplitRule\"`\n}\n\ntype ModifyDocRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 是否引用链接\n\tIsRefer *bool `json:\"IsRefer,omitnil,omitempty\" name:\"IsRefer\"`\n\n\t// 标签适用范围，需要传参为1\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 关联的标签\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 网页(或自定义链接)地址\n\tWebUrl *string `json:\"WebUrl,omitnil,omitempty\" name:\"WebUrl\"`\n\n\t// 外部引用链接类型 0：系统链接 1：自定义链接\n\t// 值为1时，WebUrl 字段不能为空，否则不生效。\n\tReferUrlType *uint64 `json:\"ReferUrlType,omitnil,omitempty\" name:\"ReferUrlType\"`\n\n\t// 有效开始时间，unix时间戳\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix时间戳，0代表永久有效\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 是否可下载，IsRefer为true并且ReferUrlType为0时，该值才有意义\n\tIsDownload *bool `json:\"IsDownload,omitnil,omitempty\" name:\"IsDownload\"`\n\n\t// 需要修改的内容类型  0  无效 1 更新文档cos信息 2 更新文档引用信息 3 更新文档刷新频率 4 腾讯文档刷新\n\tModifyTypes []*uint64 `json:\"ModifyTypes,omitnil,omitempty\" name:\"ModifyTypes\"`\n\n\t// 文档更新频率\n\tUpdatePeriodInfo *UpdatePeriodInfo `json:\"UpdatePeriodInfo,omitnil,omitempty\" name:\"UpdatePeriodInfo\"`\n\n\t// 自定义切分规则\n\tSplitRule *string `json:\"SplitRule,omitnil,omitempty\" name:\"SplitRule\"`\n}\n\nfunc (r *ModifyDocRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyDocRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"DocBizId\")\n\tdelete(f, \"IsRefer\")\n\tdelete(f, \"AttrRange\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"AttrLabels\")\n\tdelete(f, \"WebUrl\")\n\tdelete(f, \"ReferUrlType\")\n\tdelete(f, \"ExpireStart\")\n\tdelete(f, \"ExpireEnd\")\n\tdelete(f, \"CateBizId\")\n\tdelete(f, \"IsDownload\")\n\tdelete(f, \"ModifyTypes\")\n\tdelete(f, \"UpdatePeriodInfo\")\n\tdelete(f, \"SplitRule\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ModifyDocRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyDocResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ModifyDocResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ModifyDocResponseParams `json:\"Response\"`\n}\n\nfunc (r *ModifyDocResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyDocResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyQAAttrRangeRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 问答ID\n\tQaBizIds []*string `json:\"QaBizIds,omitnil,omitempty\" name:\"QaBizIds\"`\n\n\t// 属性标签适用范围 1：全部，2：按条件\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 属性标签引用\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n}\n\ntype ModifyQAAttrRangeRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 问答ID\n\tQaBizIds []*string `json:\"QaBizIds,omitnil,omitempty\" name:\"QaBizIds\"`\n\n\t// 属性标签适用范围 1：全部，2：按条件\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 属性标签引用\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n}\n\nfunc (r *ModifyQAAttrRangeRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyQAAttrRangeRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"QaBizIds\")\n\tdelete(f, \"AttrRange\")\n\tdelete(f, \"AttrLabels\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ModifyQAAttrRangeRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyQAAttrRangeResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ModifyQAAttrRangeResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ModifyQAAttrRangeResponseParams `json:\"Response\"`\n}\n\nfunc (r *ModifyQAAttrRangeResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyQAAttrRangeResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyQACateRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 分类名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 分类业务ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\ntype ModifyQACateRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 分类名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 分类业务ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n}\n\nfunc (r *ModifyQACateRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyQACateRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"Name\")\n\tdelete(f, \"CateBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ModifyQACateRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyQACateResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ModifyQACateResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ModifyQACateResponseParams `json:\"Response\"`\n}\n\nfunc (r *ModifyQACateResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyQACateResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyQARequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 问答ID\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 问题\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 答案\n\tAnswer *string `json:\"Answer,omitnil,omitempty\" name:\"Answer\"`\n\n\t// 自定义参数\n\tCustomParam *string `json:\"CustomParam,omitnil,omitempty\" name:\"CustomParam\"`\n\n\t// 标签适用范围 1：全部，2：按条件\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 标签引用\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 有效开始时间，unix时间戳\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix时间戳，0代表永久有效\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 相似问修改信息(相似问没有修改则不传)\n\tSimilarQuestionModify *SimilarQuestionModify `json:\"SimilarQuestionModify,omitnil,omitempty\" name:\"SimilarQuestionModify\"`\n\n\t// 问题描述\n\tQuestionDesc *string `json:\"QuestionDesc,omitnil,omitempty\" name:\"QuestionDesc\"`\n}\n\ntype ModifyQARequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 问答ID\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 问题\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 答案\n\tAnswer *string `json:\"Answer,omitnil,omitempty\" name:\"Answer\"`\n\n\t// 自定义参数\n\tCustomParam *string `json:\"CustomParam,omitnil,omitempty\" name:\"CustomParam\"`\n\n\t// 标签适用范围 1：全部，2：按条件\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 标签引用\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 有效开始时间，unix时间戳\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix时间戳，0代表永久有效\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 相似问修改信息(相似问没有修改则不传)\n\tSimilarQuestionModify *SimilarQuestionModify `json:\"SimilarQuestionModify,omitnil,omitempty\" name:\"SimilarQuestionModify\"`\n\n\t// 问题描述\n\tQuestionDesc *string `json:\"QuestionDesc,omitnil,omitempty\" name:\"QuestionDesc\"`\n}\n\nfunc (r *ModifyQARequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyQARequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"QaBizId\")\n\tdelete(f, \"Question\")\n\tdelete(f, \"Answer\")\n\tdelete(f, \"CustomParam\")\n\tdelete(f, \"AttrRange\")\n\tdelete(f, \"AttrLabels\")\n\tdelete(f, \"DocBizId\")\n\tdelete(f, \"CateBizId\")\n\tdelete(f, \"ExpireStart\")\n\tdelete(f, \"ExpireEnd\")\n\tdelete(f, \"SimilarQuestionModify\")\n\tdelete(f, \"QuestionDesc\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ModifyQARequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyQAResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ModifyQAResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ModifyQAResponseParams `json:\"Response\"`\n}\n\nfunc (r *ModifyQAResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyQAResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyRejectedQuestionRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 拒答问题\n\t//\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 拒答问题来源的数据源唯一id\n\t//\n\t//\n\tRejectedBizId *string `json:\"RejectedBizId,omitnil,omitempty\" name:\"RejectedBizId\"`\n}\n\ntype ModifyRejectedQuestionRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 拒答问题\n\t//\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 拒答问题来源的数据源唯一id\n\t//\n\t//\n\tRejectedBizId *string `json:\"RejectedBizId,omitnil,omitempty\" name:\"RejectedBizId\"`\n}\n\nfunc (r *ModifyRejectedQuestionRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyRejectedQuestionRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"Question\")\n\tdelete(f, \"RejectedBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ModifyRejectedQuestionRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ModifyRejectedQuestionResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ModifyRejectedQuestionResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ModifyRejectedQuestionResponseParams `json:\"Response\"`\n}\n\nfunc (r *ModifyRejectedQuestionResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ModifyRejectedQuestionResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype MsgFileInfo struct {\n\t// 文档名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文档大小\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileSize *string `json:\"FileSize,omitnil,omitempty\" name:\"FileSize\"`\n\n\t// 文档URL\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileUrl *string `json:\"FileUrl,omitnil,omitempty\" name:\"FileUrl\"`\n\n\t// 文档类型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// 文档ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocId *string `json:\"DocId,omitnil,omitempty\" name:\"DocId\"`\n}\n\ntype MsgRecord struct {\n\t// 内容\n\tContent *string `json:\"Content,omitnil,omitempty\" name:\"Content\"`\n\n\t// 当前记录所对应的 Session ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSessionId *string `json:\"SessionId,omitnil,omitempty\" name:\"SessionId\"`\n\n\t// 记录ID\n\tRecordId *string `json:\"RecordId,omitnil,omitempty\" name:\"RecordId\"`\n\n\t// 关联记录ID\n\tRelatedRecordId *string `json:\"RelatedRecordId,omitnil,omitempty\" name:\"RelatedRecordId\"`\n\n\t// 是否来自自己\n\tIsFromSelf *bool `json:\"IsFromSelf,omitnil,omitempty\" name:\"IsFromSelf\"`\n\n\t// 发送者名称\n\tFromName *string `json:\"FromName,omitnil,omitempty\" name:\"FromName\"`\n\n\t// 发送者头像\n\tFromAvatar *string `json:\"FromAvatar,omitnil,omitempty\" name:\"FromAvatar\"`\n\n\t// 时间戳\n\tTimestamp *string `json:\"Timestamp,omitnil,omitempty\" name:\"Timestamp\"`\n\n\t// 是否已读\n\tHasRead *bool `json:\"HasRead,omitnil,omitempty\" name:\"HasRead\"`\n\n\t// 评价\n\tScore *uint64 `json:\"Score,omitnil,omitempty\" name:\"Score\"`\n\n\t// 是否评分\n\tCanRating *bool `json:\"CanRating,omitnil,omitempty\" name:\"CanRating\"`\n\n\t// 是否展示反馈按钮\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCanFeedback *bool `json:\"CanFeedback,omitnil,omitempty\" name:\"CanFeedback\"`\n\n\t// 记录类型\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 引用来源\n\tReferences []*MsgRecordReference `json:\"References,omitnil,omitempty\" name:\"References\"`\n\n\t// 评价原因\n\tReasons []*string `json:\"Reasons,omitnil,omitempty\" name:\"Reasons\"`\n\n\t// 是否大模型\n\tIsLlmGenerated *bool `json:\"IsLlmGenerated,omitnil,omitempty\" name:\"IsLlmGenerated\"`\n\n\t// 图片链接，可公有读\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tImageUrls []*string `json:\"ImageUrls,omitnil,omitempty\" name:\"ImageUrls\"`\n\n\t// 当次 token 统计信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTokenStat *TokenStat `json:\"TokenStat,omitnil,omitempty\" name:\"TokenStat\"`\n\n\t// 回复方式\n\t// 1:大模型直接回复;\n\t// 2:保守回复, 未知问题回复;\n\t// 3:拒答问题回复;\n\t// 4:敏感回复;\n\t// 5:问答对直接回复, 已采纳问答对优先回复;\n\t// 6:欢迎语回复;\n\t// 7:并发超限回复;\n\t// 8:全局干预知识;\n\t// 9:任务流程过程回复, 当历史记录中 task_flow.type = 0 时, 为大模型回复;\n\t// 10:任务流程答案回复;\n\t// 11:搜索引擎回复;\n\t// 12:知识润色后回复;\n\t// 13:图片理解回复;\n\t// 14:实时文档回复;\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReplyMethod *uint64 `json:\"ReplyMethod,omitnil,omitempty\" name:\"ReplyMethod\"`\n\n\t// 选项卡, 用于多轮对话\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOptionCards []*string `json:\"OptionCards,omitnil,omitempty\" name:\"OptionCards\"`\n\n\t// 任务信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTaskFlow *TaskFlowInfo `json:\"TaskFlow,omitnil,omitempty\" name:\"TaskFlow\"`\n\n\t// 用户传入的文件信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileInfos []*FileInfo `json:\"FileInfos,omitnil,omitempty\" name:\"FileInfos\"`\n\n\t// 参考来源引用位置信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQuoteInfos []*QuoteInfo `json:\"QuoteInfos,omitnil,omitempty\" name:\"QuoteInfos\"`\n\n\t// Agent的思考过程信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAgentThought *AgentThought `json:\"AgentThought,omitnil,omitempty\" name:\"AgentThought\"`\n\n\t// 扩展信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tExtraInfo *ExtraInfo `json:\"ExtraInfo,omitnil,omitempty\" name:\"ExtraInfo\"`\n\n\t// 工作流信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkFlow *WorkflowInfo `json:\"WorkFlow,omitnil,omitempty\" name:\"WorkFlow\"`\n}\n\ntype MsgRecordReference struct {\n\t// id\n\tId *string `json:\"Id,omitnil,omitempty\" name:\"Id\"`\n\n\t// 链接\n\tUrl *string `json:\"Url,omitnil,omitempty\" name:\"Url\"`\n\n\t// 类型\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 来源文档ID\n\tDocId *string `json:\"DocId,omitnil,omitempty\" name:\"DocId\"`\n\n\t// 知识库名称\n\tKnowledgeName *string `json:\"KnowledgeName,omitnil,omitempty\" name:\"KnowledgeName\"`\n\n\t// 知识库业务id\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 文档业务id\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 问答业务id\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 文档索引id\n\tIndex *uint64 `json:\"Index,omitnil,omitempty\" name:\"Index\"`\n}\n\ntype NodeRunBase struct {\n\t// 节点运行的ID\n\tNodeRunId *string `json:\"NodeRunId,omitnil,omitempty\" name:\"NodeRunId\"`\n\n\t// 节点ID\n\tNodeId *string `json:\"NodeId,omitnil,omitempty\" name:\"NodeId\"`\n\n\t// 工作流运行实例的ID\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n\n\t// 节点名称\n\tNodeName *string `json:\"NodeName,omitnil,omitempty\" name:\"NodeName\"`\n\n\t// 节点类型。\n\t// 1： 开始节点\n\t// 2：参数提取节点\n\t// 3：大模型节点\n\t// 4：知识问答节点\n\t// 5：知识检索节点\n\t// 6：标签提取节点\n\t// 7：代码执行节点\n\t// 8：工具节点\n\t// 9：逻辑判断节点\n\t// 10：回复节点\n\t// 11：选项卡节点\n\t// 12：循环节点\n\t// 13：意图识别节点\n\t// 14：工作流节点\n\t// 15：插件节点\n\t// 16：结束节点\n\t// 17: 变量聚合节点数据\n\t// 18: 批处理节点\n\t// 19: 消息队列节点\n\tNodeType *uint64 `json:\"NodeType,omitnil,omitempty\" name:\"NodeType\"`\n\n\t// 运行状态。0: 初始状态；1: 运行中；2: 运行成功； 3: 运行失败； 4: 已取消\n\tState *uint64 `json:\"State,omitnil,omitempty\" name:\"State\"`\n\n\t// 错误码\n\tFailCode *string `json:\"FailCode,omitnil,omitempty\" name:\"FailCode\"`\n\n\t// 错误信息\n\tFailMessage *string `json:\"FailMessage,omitnil,omitempty\" name:\"FailMessage\"`\n\n\t// 消耗时间（毫秒）\n\tCostMilliseconds *uint64 `json:\"CostMilliseconds,omitnil,omitempty\" name:\"CostMilliseconds\"`\n\n\t// 消耗的token总数\n\tTotalTokens *uint64 `json:\"TotalTokens,omitnil,omitempty\" name:\"TotalTokens\"`\n}\n\ntype NodeRunDetail struct {\n\t// 节点运行的ID\n\tNodeRunId *string `json:\"NodeRunId,omitnil,omitempty\" name:\"NodeRunId\"`\n\n\t// 节点ID\n\tNodeId *string `json:\"NodeId,omitnil,omitempty\" name:\"NodeId\"`\n\n\t// 工作流运行实例的ID\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n\n\t// 节点名称\n\tNodeName *string `json:\"NodeName,omitnil,omitempty\" name:\"NodeName\"`\n\n\t// 节点类型。\n\t// 1： 开始节点\n\t// 2：参数提取节点\n\t// 3：大模型节点\n\t// 4：知识问答节点\n\t// 5：知识检索节点\n\t// 6：标签提取节点\n\t// 7：代码执行节点\n\t// 8：工具节点\n\t// 9：逻辑判断节点\n\t// 10：回复节点\n\t// 11：选项卡节点\n\t// 12：循环节点\n\t// 13：意图识别节点\n\t// 14：工作流节点\n\t// 15：插件节点\n\t// 16：结束节点\n\t// 17: 变量聚合节点数据\n\t// 18: 批处理节点\n\t// 19: 消息队列节点\n\tNodeType *uint64 `json:\"NodeType,omitnil,omitempty\" name:\"NodeType\"`\n\n\t// 运行状态。0: 初始状态；1: 运行中；2: 运行成功； 3: 运行失败； 4: 已取消\n\tState *uint64 `json:\"State,omitnil,omitempty\" name:\"State\"`\n\n\t// 错误码\n\tFailCode *string `json:\"FailCode,omitnil,omitempty\" name:\"FailCode\"`\n\n\t// 错误信息\n\tFailMessage *string `json:\"FailMessage,omitnil,omitempty\" name:\"FailMessage\"`\n\n\t// 消耗时间（毫秒）\n\tCostMilliseconds *uint64 `json:\"CostMilliseconds,omitnil,omitempty\" name:\"CostMilliseconds\"`\n\n\t// 消耗的token总数\n\tTotalTokens *uint64 `json:\"TotalTokens,omitnil,omitempty\" name:\"TotalTokens\"`\n\n\t// 输入变量信息\n\tInput *string `json:\"Input,omitnil,omitempty\" name:\"Input\"`\n\n\t// 节点的输入的完整内容的链接。（当Input内容超过限制的时候此字段才有值）\n\tInputRef *string `json:\"InputRef,omitnil,omitempty\" name:\"InputRef\"`\n\n\t// 输出变量信息\n\tOutput *string `json:\"Output,omitnil,omitempty\" name:\"Output\"`\n\n\t// 节点的输出的完整内容的链接。（当Output内容超过限制的时候此字段才有值）\n\tOutputRef *string `json:\"OutputRef,omitnil,omitempty\" name:\"OutputRef\"`\n\n\t// 原始输出信息。部分节点才有值，如工具节点、代码节点\n\tTaskOutput *string `json:\"TaskOutput,omitnil,omitempty\" name:\"TaskOutput\"`\n\n\t// 任务的原始输出的完整内容的链接。（当TaskOutput内容超过限制的时候此字段才有值）\n\tTaskOutputRef *string `json:\"TaskOutputRef,omitnil,omitempty\" name:\"TaskOutputRef\"`\n\n\t// 节点的日志\n\tLog *string `json:\"Log,omitnil,omitempty\" name:\"Log\"`\n\n\t// 节点的日志的完整内容的链接志（当Log内容超过限制的时候才有值）\n\tLogRef *string `json:\"LogRef,omitnil,omitempty\" name:\"LogRef\"`\n\n\t// 开始时间戳（毫秒）\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间戳（毫秒）\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// LLM统计信息。\n\tStatisticInfos []*StatisticInfo `json:\"StatisticInfos,omitnil,omitempty\" name:\"StatisticInfos\"`\n}\n\ntype Option struct {\n\t// 文本\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tText *string `json:\"Text,omitnil,omitempty\" name:\"Text\"`\n\n\t// 值\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tValue *string `json:\"Value,omitnil,omitempty\" name:\"Value\"`\n\n\t// 文件字符数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCharSize *string `json:\"CharSize,omitnil,omitempty\" name:\"CharSize\"`\n\n\t// 文件类型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n}\n\ntype OptionCardIndex struct {\n\t// 唯一标识\n\tRecordId *string `json:\"RecordId,omitnil,omitempty\" name:\"RecordId\"`\n\n\t// 选项卡索引\n\tIndex *int64 `json:\"Index,omitnil,omitempty\" name:\"Index\"`\n}\n\ntype ParameterConfig struct {\n\t// 字段名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 字段描述\n\tDescription *string `json:\"Description,omitnil,omitempty\" name:\"Description\"`\n\n\t// 字段类型\n\tType *int64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 是否必填\n\tIsRequired *bool `json:\"IsRequired,omitnil,omitempty\" name:\"IsRequired\"`\n\n\t// 子参数\n\tSubParams []*ParameterConfig `json:\"SubParams,omitnil,omitempty\" name:\"SubParams\"`\n\n\t// OneOf类型的参数\n\tOneOf []*ParameterConfig `json:\"OneOf,omitnil,omitempty\" name:\"OneOf\"`\n\n\t// AnyOf类型的参数\n\tAnyOf []*ParameterConfig `json:\"AnyOf,omitnil,omitempty\" name:\"AnyOf\"`\n}\n\ntype PluginToolReqParam struct {\n\t// 参数名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 参数描述\n\tDesc *string `json:\"Desc,omitnil,omitempty\" name:\"Desc\"`\n\n\t// 参数类型，0:string, 1:int, 2:float，3:bool 4:object 5:array_string, 6:array_int, 7:array_float, 8:array_bool, 9:array_object, 99:null, 100:upspecified\n\tType *int64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n\n\t// 参数是否必填\n\tIsRequired *bool `json:\"IsRequired,omitnil,omitempty\" name:\"IsRequired\"`\n\n\t// 参数默认值\n\tDefaultValue *string `json:\"DefaultValue,omitnil,omitempty\" name:\"DefaultValue\"`\n\n\t// 子参数,ParamType 是OBJECT 或 ARRAY<>类型有用\n\tSubParams []*PluginToolReqParam `json:\"SubParams,omitnil,omitempty\" name:\"SubParams\"`\n\n\t// 插件参数配置是否隐藏不可见，true-隐藏不可见，false-可见\n\tGlobalHidden *bool `json:\"GlobalHidden,omitnil,omitempty\" name:\"GlobalHidden\"`\n\n\t// OneOf类型参数\n\tOneOf []*PluginToolReqParam `json:\"OneOf,omitnil,omitempty\" name:\"OneOf\"`\n\n\t// AnyOf类型参数\n\tAnyOf []*PluginToolReqParam `json:\"AnyOf,omitnil,omitempty\" name:\"AnyOf\"`\n}\n\ntype Procedure struct {\n\t// 执行过程英语名\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 中文名, 用于展示\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTitle *string `json:\"Title,omitnil,omitempty\" name:\"Title\"`\n\n\t// 状态常量: 使用中: processing, 成功: success, 失败: failed\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatus *string `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 消耗 token 数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCount *uint64 `json:\"Count,omitnil,omitempty\" name:\"Count\"`\n\n\t// 调试信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDebugging *ProcedureDebugging `json:\"Debugging,omitnil,omitempty\" name:\"Debugging\"`\n\n\t// 计费资源状态，1：可用，2：不可用\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tResourceStatus *uint64 `json:\"ResourceStatus,omitnil,omitempty\" name:\"ResourceStatus\"`\n\n\t// 输入消耗 token 数\n\tInputCount *uint64 `json:\"InputCount,omitnil,omitempty\" name:\"InputCount\"`\n\n\t// 输出消耗 token 数\n\tOutputCount *uint64 `json:\"OutputCount,omitnil,omitempty\" name:\"OutputCount\"`\n}\n\ntype ProcedureDebugging struct {\n\t// 检索query\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tContent *string `json:\"Content,omitnil,omitempty\" name:\"Content\"`\n\n\t// 系统prompt\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSystem *string `json:\"System,omitnil,omitempty\" name:\"System\"`\n\n\t// 多轮历史信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tHistories []*HistorySummary `json:\"Histories,omitnil,omitempty\" name:\"Histories\"`\n\n\t// 检索知识\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledge []*KnowledgeSummary `json:\"Knowledge,omitnil,omitempty\" name:\"Knowledge\"`\n\n\t// 任务流程\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTaskFlow *TaskFlowSummary `json:\"TaskFlow,omitnil,omitempty\" name:\"TaskFlow\"`\n\n\t// 工作流调试信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkFlow *WorkFlowSummary `json:\"WorkFlow,omitnil,omitempty\" name:\"WorkFlow\"`\n\n\t// Agent调试信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAgent *AgentDebugInfo `json:\"Agent,omitnil,omitempty\" name:\"Agent\"`\n\n\t// 自定义参数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCustomVariables []*string `json:\"CustomVariables,omitnil,omitempty\" name:\"CustomVariables\"`\n}\n\ntype QACate struct {\n\t// QA分类的业务ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 分类名称\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 分类下QA数量\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTotal *int64 `json:\"Total,omitnil,omitempty\" name:\"Total\"`\n\n\t// 是否可新增\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCanAdd *bool `json:\"CanAdd,omitnil,omitempty\" name:\"CanAdd\"`\n\n\t// 是否可编辑\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCanEdit *bool `json:\"CanEdit,omitnil,omitempty\" name:\"CanEdit\"`\n\n\t// 是否可删除\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCanDelete *bool `json:\"CanDelete,omitnil,omitempty\" name:\"CanDelete\"`\n\n\t// 子分类\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tChildren []*QACate `json:\"Children,omitnil,omitempty\" name:\"Children\"`\n}\n\ntype QAList struct {\n\t// 问答ID\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 是否采纳\n\tIsAccepted *bool `json:\"IsAccepted,omitnil,omitempty\" name:\"IsAccepted\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 问题\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 答案\n\tAnswer *string `json:\"Answer,omitnil,omitempty\" name:\"Answer\"`\n}\n\ntype QAQuery struct {\n\t// 页码\n\t//\n\tPageNumber *uint64 `json:\"PageNumber,omitnil,omitempty\" name:\"PageNumber\"`\n\n\t// 每页数量\n\tPageSize *uint64 `json:\"PageSize,omitnil,omitempty\" name:\"PageSize\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 查询内容\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 校验状态\n\tAcceptStatus []*uint64 `json:\"AcceptStatus,omitnil,omitempty\" name:\"AcceptStatus\"`\n\n\t// 发布状态\n\tReleaseStatus []*uint64 `json:\"ReleaseStatus,omitnil,omitempty\" name:\"ReleaseStatus\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// QAID\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 来源\n\tSource *uint64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 查询答案\n\tQueryAnswer *string `json:\"QueryAnswer,omitnil,omitempty\" name:\"QueryAnswer\"`\n\n\t// 查询类型 filename 名称、 attribute 标签\n\tQueryType *string `json:\"QueryType,omitnil,omitempty\" name:\"QueryType\"`\n}\n\ntype QuoteInfo struct {\n\t// 参考来源位置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPosition *uint64 `json:\"Position,omitnil,omitempty\" name:\"Position\"`\n\n\t// 参考来源索引顺序\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIndex *string `json:\"Index,omitnil,omitempty\" name:\"Index\"`\n}\n\n// Predefined struct for user\ntype RateMsgRecordRequestParams struct {\n\t// 应用appKey\n\tBotAppKey *string `json:\"BotAppKey,omitnil,omitempty\" name:\"BotAppKey\"`\n\n\t// 消息ID 【大模型回复答案的RecordID】\n\tRecordId *string `json:\"RecordId,omitnil,omitempty\" name:\"RecordId\"`\n\n\t// 1: 点赞;   2: 点踩;\n\t// 注：\n\t// (1) 评测端不支持点赞、点踩\n\t// (2) 消息回复类型为欢迎语、并发超限、实时文档，不支持点赞、点踩\n\tScore *uint64 `json:\"Score,omitnil,omitempty\" name:\"Score\"`\n\n\t// 原因，只有Score参数为2即点踩的时候才需要输入\n\tReasons []*string `json:\"Reasons,omitnil,omitempty\" name:\"Reasons\"`\n}\n\ntype RateMsgRecordRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用appKey\n\tBotAppKey *string `json:\"BotAppKey,omitnil,omitempty\" name:\"BotAppKey\"`\n\n\t// 消息ID 【大模型回复答案的RecordID】\n\tRecordId *string `json:\"RecordId,omitnil,omitempty\" name:\"RecordId\"`\n\n\t// 1: 点赞;   2: 点踩;\n\t// 注：\n\t// (1) 评测端不支持点赞、点踩\n\t// (2) 消息回复类型为欢迎语、并发超限、实时文档，不支持点赞、点踩\n\tScore *uint64 `json:\"Score,omitnil,omitempty\" name:\"Score\"`\n\n\t// 原因，只有Score参数为2即点踩的时候才需要输入\n\tReasons []*string `json:\"Reasons,omitnil,omitempty\" name:\"Reasons\"`\n}\n\nfunc (r *RateMsgRecordRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *RateMsgRecordRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotAppKey\")\n\tdelete(f, \"RecordId\")\n\tdelete(f, \"Score\")\n\tdelete(f, \"Reasons\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"RateMsgRecordRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype RateMsgRecordResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype RateMsgRecordResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *RateMsgRecordResponseParams `json:\"Response\"`\n}\n\nfunc (r *RateMsgRecordResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *RateMsgRecordResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype ReferDetail struct {\n\t// 引用ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReferBizId *string `json:\"ReferBizId,omitnil,omitempty\" name:\"ReferBizId\"`\n\n\t// 文档类型 (1 QA, 2 文档段)\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocType *uint64 `json:\"DocType,omitnil,omitempty\" name:\"DocType\"`\n\n\t// 文档名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocName *string `json:\"DocName,omitnil,omitempty\" name:\"DocName\"`\n\n\t// 分片内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPageContent *string `json:\"PageContent,omitnil,omitempty\" name:\"PageContent\"`\n\n\t// 问题\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 答案\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAnswer *string `json:\"Answer,omitnil,omitempty\" name:\"Answer\"`\n\n\t// 置信度\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tConfidence *float64 `json:\"Confidence,omitnil,omitempty\" name:\"Confidence\"`\n\n\t// 标记\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tMark *uint64 `json:\"Mark,omitnil,omitempty\" name:\"Mark\"`\n\n\t// 分片高亮内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tHighlights []*Highlight `json:\"Highlights,omitnil,omitempty\" name:\"Highlights\"`\n\n\t// 原始内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOrgData *string `json:\"OrgData,omitnil,omitempty\" name:\"OrgData\"`\n\n\t// 页码信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPageInfos []*uint64 `json:\"PageInfos,omitnil,omitempty\" name:\"PageInfos\"`\n\n\t// sheet信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSheetInfos []*string `json:\"SheetInfos,omitnil,omitempty\" name:\"SheetInfos\"`\n\n\t// 文档ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 知识库ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n}\n\n// Predefined struct for user\ntype ReferShareKnowledgeRequestParams struct {\n\t// 应用业务id\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 共享知识库业务id列表\n\tKnowledgeBizId []*string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype ReferShareKnowledgeRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用业务id\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 共享知识库业务id列表\n\tKnowledgeBizId []*string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *ReferShareKnowledgeRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ReferShareKnowledgeRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"KnowledgeBizId\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"ReferShareKnowledgeRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype ReferShareKnowledgeResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype ReferShareKnowledgeResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *ReferShareKnowledgeResponseParams `json:\"Response\"`\n}\n\nfunc (r *ReferShareKnowledgeResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *ReferShareKnowledgeResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype RejectedQuestion struct {\n\t// 拒答问题ID\n\t//\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRejectedBizId *string `json:\"RejectedBizId,omitnil,omitempty\" name:\"RejectedBizId\"`\n\n\t// 被拒答的问题\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 发布状态(1 待发布 2 发布中 3 已发布 4 发布失败)\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatus *uint64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 状态描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatusDesc *string `json:\"StatusDesc,omitnil,omitempty\" name:\"StatusDesc\"`\n\n\t// 更新时间, 秒级时间戳\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 是否允许编辑\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsAllowEdit *bool `json:\"IsAllowEdit,omitnil,omitempty\" name:\"IsAllowEdit\"`\n\n\t// 是否允许删除\n\t//\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIsAllowDelete *bool `json:\"IsAllowDelete,omitnil,omitempty\" name:\"IsAllowDelete\"`\n\n\t// 操作人\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOperator *string `json:\"Operator,omitnil,omitempty\" name:\"Operator\"`\n}\n\ntype ReleaseConfigs struct {\n\t// 配置项描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tConfigItem *string `json:\"ConfigItem,omitnil,omitempty\" name:\"ConfigItem\"`\n\n\t// 更新时间\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 状态\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAction *uint64 `json:\"Action,omitnil,omitempty\" name:\"Action\"`\n\n\t// 变更后的内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tValue *string `json:\"Value,omitnil,omitempty\" name:\"Value\"`\n\n\t// 变更前的内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tLastValue *string `json:\"LastValue,omitnil,omitempty\" name:\"LastValue\"`\n\n\t// 变更内容(优先级展示content内容,content为空取value内容)\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tContent *string `json:\"Content,omitnil,omitempty\" name:\"Content\"`\n\n\t// 失败原因\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tMessage *string `json:\"Message,omitnil,omitempty\" name:\"Message\"`\n}\n\ntype ReleaseDoc struct {\n\t// 文件名\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文件类型\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// 更新时间\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 状态\n\tAction *uint64 `json:\"Action,omitnil,omitempty\" name:\"Action\"`\n\n\t// 状态描述\n\tActionDesc *string `json:\"ActionDesc,omitnil,omitempty\" name:\"ActionDesc\"`\n\n\t// 失败原因\n\tMessage *string `json:\"Message,omitnil,omitempty\" name:\"Message\"`\n\n\t// 文档业务ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n}\n\ntype ReleaseQA struct {\n\t// 问题\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 更新时间\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 状态\n\tAction *uint64 `json:\"Action,omitnil,omitempty\" name:\"Action\"`\n\n\t// 状态描述\n\tActionDesc *string `json:\"ActionDesc,omitnil,omitempty\" name:\"ActionDesc\"`\n\n\t// 来源1:文档生成，2：批量导入，3：手动添加\n\tSource *uint64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 来源描述\n\tSourceDesc *string `json:\"SourceDesc,omitnil,omitempty\" name:\"SourceDesc\"`\n\n\t// 文件名字\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文档类型\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// 失败原因\n\tMessage *string `json:\"Message,omitnil,omitempty\" name:\"Message\"`\n\n\t// 发布状态\n\tReleaseStatus *uint64 `json:\"ReleaseStatus,omitnil,omitempty\" name:\"ReleaseStatus\"`\n\n\t// QAID\n\tQaBizId *string `json:\"QaBizId,omitnil,omitempty\" name:\"QaBizId\"`\n\n\t// 文档业务ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n}\n\ntype ReleaseRejectedQuestion struct {\n\t// 问题\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 更新时间\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 状态\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAction *uint64 `json:\"Action,omitnil,omitempty\" name:\"Action\"`\n\n\t// 状态描述\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tActionDesc *string `json:\"ActionDesc,omitnil,omitempty\" name:\"ActionDesc\"`\n\n\t// 失败原因\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tMessage *string `json:\"Message,omitnil,omitempty\" name:\"Message\"`\n}\n\n// Predefined struct for user\ntype RenameDocRequestParams struct {\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 新文档名，需要带上后缀\n\tNewName *string `json:\"NewName,omitnil,omitempty\" name:\"NewName\"`\n}\n\ntype RenameDocRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 新文档名，需要带上后缀\n\tNewName *string `json:\"NewName,omitnil,omitempty\" name:\"NewName\"`\n}\n\nfunc (r *RenameDocRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *RenameDocRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"DocBizId\")\n\tdelete(f, \"NewName\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"RenameDocRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype RenameDocResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype RenameDocResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *RenameDocResponseParams `json:\"Response\"`\n}\n\nfunc (r *RenameDocResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *RenameDocResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype RetryDocAuditRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n}\n\ntype RetryDocAuditRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n}\n\nfunc (r *RetryDocAuditRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *RetryDocAuditRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"DocBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"RetryDocAuditRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype RetryDocAuditResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype RetryDocAuditResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *RetryDocAuditResponseParams `json:\"Response\"`\n}\n\nfunc (r *RetryDocAuditResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *RetryDocAuditResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype RetryDocParseRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n}\n\ntype RetryDocParseRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n}\n\nfunc (r *RetryDocParseRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *RetryDocParseRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"DocBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"RetryDocParseRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype RetryDocParseResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype RetryDocParseResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *RetryDocParseResponseParams `json:\"Response\"`\n}\n\nfunc (r *RetryDocParseResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *RetryDocParseResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype RetryReleaseRequestParams struct {\n\t// 机器人ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 发布业务ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n}\n\ntype RetryReleaseRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 机器人ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 发布业务ID\n\tReleaseBizId *string `json:\"ReleaseBizId,omitnil,omitempty\" name:\"ReleaseBizId\"`\n}\n\nfunc (r *RetryReleaseRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *RetryReleaseRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"ReleaseBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"RetryReleaseRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype RetryReleaseResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype RetryReleaseResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *RetryReleaseResponseParams `json:\"Response\"`\n}\n\nfunc (r *RetryReleaseResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *RetryReleaseResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype RunNodeInfo struct {\n\t// 节点类型，0:未指定，1:开始节点，2:API节点，3:询问节点，4:答案节点\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tNodeType *int64 `json:\"NodeType,omitnil,omitempty\" name:\"NodeType\"`\n\n\t// 节点ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tNodeId *string `json:\"NodeId,omitnil,omitempty\" name:\"NodeId\"`\n\n\t// 节点名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tNodeName *string `json:\"NodeName,omitnil,omitempty\" name:\"NodeName\"`\n\n\t// 请求的API\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tInvokeApi *InvokeAPI `json:\"InvokeApi,omitnil,omitempty\" name:\"InvokeApi\"`\n\n\t// 当前节点的所有槽位的值，key：SlotID。没有值的时候也要返回空。\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSlotValues []*ValueInfo `json:\"SlotValues,omitnil,omitempty\" name:\"SlotValues\"`\n}\n\n// Predefined struct for user\ntype SaveDocRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文件名\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文档支持下面类型\n\t// pdf、doc、docx、ppt、mhtml、pptx、wps、ppsx，单个文件不超过200MB；\n\t// xlsx、xls、md、txt、csv、html，单个文件不超过20MB；\n\t//\n\t// 图片支持下面类型：\n\t// jpg、png、jpeg、tiff、bmp、gif，单个文件不超过50MB\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// 平台cos路径，与DescribeStorageCredential接口查询UploadPath参数保持一致\n\tCosUrl *string `json:\"CosUrl,omitnil,omitempty\" name:\"CosUrl\"`\n\n\t// ETag 全称为 Entity Tag，是对象被创建时标识对象内容的信息标签，可用于检查对象的内容是否发生变化 成功上传cos后，从返回头中获取\n\tETag *string `json:\"ETag,omitnil,omitempty\" name:\"ETag\"`\n\n\t// cos_hash x-cos-hash-crc64ecma 头部中的 CRC64编码进行校验上传到云端的文件和本地文件的一致性\n\t// 成功上传cos后，从返回头中获取\n\t//\n\t// 请注意：\n\t// cos_hash为文档唯一性标识，与文件名无关 相同的cos_hash会被判定为重复文档\n\tCosHash *string `json:\"CosHash,omitnil,omitempty\" name:\"CosHash\"`\n\n\t// 文件大小\n\tSize *string `json:\"Size,omitnil,omitempty\" name:\"Size\"`\n\n\t// 标签适用范围，需要传参为1\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 来源（0 从本地文档导入），默认值为0\n\tSource *int64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 自定义链接地址, IsRefer为true的时候，该值才有意义\n\tWebUrl *string `json:\"WebUrl,omitnil,omitempty\" name:\"WebUrl\"`\n\n\t// 标签引用\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 外部引用链接类型 0：系统链接 1：自定义链接\n\t// 值为1时，WebUrl 字段不能为空，否则不生效。\n\tReferUrlType *uint64 `json:\"ReferUrlType,omitnil,omitempty\" name:\"ReferUrlType\"`\n\n\t// 有效开始时间，unix秒级时间戳\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix秒级时间戳，0代表永久有效\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 是否引用链接\n\tIsRefer *bool `json:\"IsRefer,omitnil,omitempty\" name:\"IsRefer\"`\n\n\t// 文档操作类型：1：批量导入（批量导入问答对）；2:文档导入（正常导入单个文档） 默认为1  <br> 请注意，opt=1的时候请从腾讯云智能体开发平台页面下载excel模板\n\tOpt *uint64 `json:\"Opt,omitnil,omitempty\" name:\"Opt\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 是否可下载，IsRefer为true并且ReferUrlType为0时，该值才有意义\n\tIsDownload *bool `json:\"IsDownload,omitnil,omitempty\" name:\"IsDownload\"`\n\n\t// 重复文档处理方式，按顺序匹配第一个满足条件的方式处理\n\tDuplicateFileHandles []*DuplicateFileHandle `json:\"DuplicateFileHandles,omitnil,omitempty\" name:\"DuplicateFileHandles\"`\n\n\t// 自定义切分规则\n\t//\n\t// 请求参数为一个 **JSON Object**，具体格式可参见接口示例值。包含以下主要字段：\n\t//\n\t// | 字段名             | 类型      | 说明                                   |\n\t// |--------------------|--------|----------------------------------------|\n\t// | `xlsx_splitter`    | Object   | **Excel（xlsx）文件切分策略配置**，仅当处理 Excel 文件时有效 |\n\t// | `common_splitter`  | Object  | **通用文件（如 txt、pdf 等）切分策略配置**，按页或按标签切分 |\n\t// | `table_style`      | String | 表格内容的输出格式，如 HTML 或 Markdown |\n\t//\n\t// ---\n\t//\n\t// ## `xlsx_splitter`（Excel 切分策略）\n\t//\n\t// 用于配置 **表格文件的切分方式**。\n\t// **类型：Object**\n\t//\n\t// ```json\n\t// \"xlsx_splitter\": {\n\t//   \"header_interval\": [1, 2],\n\t//   \"content_start\": 10,\n\t//   \"split_row\": 2\n\t// }\n\t// ```\n\t//\n\t// ### 字段说明：\n\t//\n\t// | 字段名            | 类型   | 说明                                                                 |\n\t// |-------------------|--------|----------------------------------------------------------------------|\n\t// | `header_interval` | Array\\<Number\\>  | 表头所在的行区间，格式为 `[起始行, 结束行]`，**行号从 1 开始计数**。例如 `[1, 2]` 表示第 1~2 行为表头。 |\n\t// | `content_start`   | Number  | **表格内容的起始行号（从 1 开始）**。 |\n\t// | `split_row`       | Number   | **切分行数**。                   |\n\t//\n\t// ---\n\t// ## `common_splitter`（通用文件切分策略）\n\t//\n\t// 用于配置 **非 Excel 文件（如 TXT、PDF、DOCX 等）的切分方式**，支持两种策略：**按页切分（page）** 或 **按标识符切分（tag）**。\n\t//\n\t// **类型：Object**\n\t//\n\t// ```json\n\t// \"common_splitter\": {\n\t//   \"splitter\": \"page\",\n\t//   \"page_splitter\": {\n\t//     \"chunk_length\": 1000,\n\t//     \"chunk_overlap_length\": 100\n\t//   }\n\t// }\n\t// ```\n\t//\n\t// ### 字段说明：\n\t//\n\t// | 字段名            | 类型     | 说明                                                                 |\n\t// |-------------------|--------|---------------------------------------------------|\n\t// | `splitter`        | String  | 切分策略类型，可选值为：`\"page\"`（按页切分） 或 `\"tag\"`（按标识符切分）。 |\n\t// | `page_splitter`   | Object   | **按页切分的配置**。                                         |\n\t// | `page_splitter.chunk_length`   | 1000    | **切片最大长度**。              |\n\t// | `page_splitter.chunk_overlap_length`  | 100    | **切片重叠长度**。  |\n\t// | `tag_splitter`             | Object          | **自定义切分配置**。             |\n\t// | `tag_splitter.tag`         | Array\\<String\\>    | **切分标识符**。                             |\n\t// | `tag_splitter.chunk_length`| Number       | **切片最大长度**。                                                               |\n\t// | `tag_splitter.chunk_overlap_length` | Number    | **切块重叠长度**。                                                  |\n\t//\n\t// 🔹 **补充说明：**\n\t//\n\t// - `splitter` 字段的值可以是：\n\t//   - `\"page\"`：只使用按页切分逻辑，此时只需要关心 `page_splitter` 相关字段。\n\t//   - `\"tag\"`：只使用按标识符（如分号、换行等）切分逻辑，此时关注 `tag_splitter`。\n\t// ---\n\t//\n\t// ##  `table_style`（表格输出样式）\n\t//\n\t// 用于指定 **表格类内容（比如从 Excel 或 CSV 中提取的表格）最终以何种格式返回**，方便前端展示或后续处理。\n\t//\n\t// **类型：String**\n\t//\n\t// ```json\n\t// \"table_style\": \"md\"\n\t// ```\n\t//\n\t// ### 字段说明：\n\t//\n\t// | 字段名       | 类型   | 说明                                                                 |\n\t// |--------------|--------|----------------------------------------------------------------------|\n\t// | `table_style` | String | 指定表格内容的输出格式。可用值：<br>• `\"html\"`：以 HTML 表格形式返回，适合网页展示。<br>• `\"md\"`：以 Markdown 表格语法返回，适合文档或 Markdown 渲染环境。|\n\tSplitRule *string `json:\"SplitRule,omitnil,omitempty\" name:\"SplitRule\"`\n\n\t// 文档更新频率\n\tUpdatePeriodInfo *UpdatePeriodInfo `json:\"UpdatePeriodInfo,omitnil,omitempty\" name:\"UpdatePeriodInfo\"`\n}\n\ntype SaveDocRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文件名\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// 文档支持下面类型\n\t// pdf、doc、docx、ppt、mhtml、pptx、wps、ppsx，单个文件不超过200MB；\n\t// xlsx、xls、md、txt、csv、html，单个文件不超过20MB；\n\t//\n\t// 图片支持下面类型：\n\t// jpg、png、jpeg、tiff、bmp、gif，单个文件不超过50MB\n\tFileType *string `json:\"FileType,omitnil,omitempty\" name:\"FileType\"`\n\n\t// 平台cos路径，与DescribeStorageCredential接口查询UploadPath参数保持一致\n\tCosUrl *string `json:\"CosUrl,omitnil,omitempty\" name:\"CosUrl\"`\n\n\t// ETag 全称为 Entity Tag，是对象被创建时标识对象内容的信息标签，可用于检查对象的内容是否发生变化 成功上传cos后，从返回头中获取\n\tETag *string `json:\"ETag,omitnil,omitempty\" name:\"ETag\"`\n\n\t// cos_hash x-cos-hash-crc64ecma 头部中的 CRC64编码进行校验上传到云端的文件和本地文件的一致性\n\t// 成功上传cos后，从返回头中获取\n\t//\n\t// 请注意：\n\t// cos_hash为文档唯一性标识，与文件名无关 相同的cos_hash会被判定为重复文档\n\tCosHash *string `json:\"CosHash,omitnil,omitempty\" name:\"CosHash\"`\n\n\t// 文件大小\n\tSize *string `json:\"Size,omitnil,omitempty\" name:\"Size\"`\n\n\t// 标签适用范围，需要传参为1\n\tAttrRange *uint64 `json:\"AttrRange,omitnil,omitempty\" name:\"AttrRange\"`\n\n\t// 来源（0 从本地文档导入），默认值为0\n\tSource *int64 `json:\"Source,omitnil,omitempty\" name:\"Source\"`\n\n\t// 自定义链接地址, IsRefer为true的时候，该值才有意义\n\tWebUrl *string `json:\"WebUrl,omitnil,omitempty\" name:\"WebUrl\"`\n\n\t// 标签引用\n\tAttrLabels []*AttrLabelRefer `json:\"AttrLabels,omitnil,omitempty\" name:\"AttrLabels\"`\n\n\t// 外部引用链接类型 0：系统链接 1：自定义链接\n\t// 值为1时，WebUrl 字段不能为空，否则不生效。\n\tReferUrlType *uint64 `json:\"ReferUrlType,omitnil,omitempty\" name:\"ReferUrlType\"`\n\n\t// 有效开始时间，unix秒级时间戳\n\tExpireStart *string `json:\"ExpireStart,omitnil,omitempty\" name:\"ExpireStart\"`\n\n\t// 有效结束时间，unix秒级时间戳，0代表永久有效\n\tExpireEnd *string `json:\"ExpireEnd,omitnil,omitempty\" name:\"ExpireEnd\"`\n\n\t// 是否引用链接\n\tIsRefer *bool `json:\"IsRefer,omitnil,omitempty\" name:\"IsRefer\"`\n\n\t// 文档操作类型：1：批量导入（批量导入问答对）；2:文档导入（正常导入单个文档） 默认为1  <br> 请注意，opt=1的时候请从腾讯云智能体开发平台页面下载excel模板\n\tOpt *uint64 `json:\"Opt,omitnil,omitempty\" name:\"Opt\"`\n\n\t// 分类ID\n\tCateBizId *string `json:\"CateBizId,omitnil,omitempty\" name:\"CateBizId\"`\n\n\t// 是否可下载，IsRefer为true并且ReferUrlType为0时，该值才有意义\n\tIsDownload *bool `json:\"IsDownload,omitnil,omitempty\" name:\"IsDownload\"`\n\n\t// 重复文档处理方式，按顺序匹配第一个满足条件的方式处理\n\tDuplicateFileHandles []*DuplicateFileHandle `json:\"DuplicateFileHandles,omitnil,omitempty\" name:\"DuplicateFileHandles\"`\n\n\t// 自定义切分规则\n\t//\n\t// 请求参数为一个 **JSON Object**，具体格式可参见接口示例值。包含以下主要字段：\n\t//\n\t// | 字段名             | 类型      | 说明                                   |\n\t// |--------------------|--------|----------------------------------------|\n\t// | `xlsx_splitter`    | Object   | **Excel（xlsx）文件切分策略配置**，仅当处理 Excel 文件时有效 |\n\t// | `common_splitter`  | Object  | **通用文件（如 txt、pdf 等）切分策略配置**，按页或按标签切分 |\n\t// | `table_style`      | String | 表格内容的输出格式，如 HTML 或 Markdown |\n\t//\n\t// ---\n\t//\n\t// ## `xlsx_splitter`（Excel 切分策略）\n\t//\n\t// 用于配置 **表格文件的切分方式**。\n\t// **类型：Object**\n\t//\n\t// ```json\n\t// \"xlsx_splitter\": {\n\t//   \"header_interval\": [1, 2],\n\t//   \"content_start\": 10,\n\t//   \"split_row\": 2\n\t// }\n\t// ```\n\t//\n\t// ### 字段说明：\n\t//\n\t// | 字段名            | 类型   | 说明                                                                 |\n\t// |-------------------|--------|----------------------------------------------------------------------|\n\t// | `header_interval` | Array\\<Number\\>  | 表头所在的行区间，格式为 `[起始行, 结束行]`，**行号从 1 开始计数**。例如 `[1, 2]` 表示第 1~2 行为表头。 |\n\t// | `content_start`   | Number  | **表格内容的起始行号（从 1 开始）**。 |\n\t// | `split_row`       | Number   | **切分行数**。                   |\n\t//\n\t// ---\n\t// ## `common_splitter`（通用文件切分策略）\n\t//\n\t// 用于配置 **非 Excel 文件（如 TXT、PDF、DOCX 等）的切分方式**，支持两种策略：**按页切分（page）** 或 **按标识符切分（tag）**。\n\t//\n\t// **类型：Object**\n\t//\n\t// ```json\n\t// \"common_splitter\": {\n\t//   \"splitter\": \"page\",\n\t//   \"page_splitter\": {\n\t//     \"chunk_length\": 1000,\n\t//     \"chunk_overlap_length\": 100\n\t//   }\n\t// }\n\t// ```\n\t//\n\t// ### 字段说明：\n\t//\n\t// | 字段名            | 类型     | 说明                                                                 |\n\t// |-------------------|--------|---------------------------------------------------|\n\t// | `splitter`        | String  | 切分策略类型，可选值为：`\"page\"`（按页切分） 或 `\"tag\"`（按标识符切分）。 |\n\t// | `page_splitter`   | Object   | **按页切分的配置**。                                         |\n\t// | `page_splitter.chunk_length`   | 1000    | **切片最大长度**。              |\n\t// | `page_splitter.chunk_overlap_length`  | 100    | **切片重叠长度**。  |\n\t// | `tag_splitter`             | Object          | **自定义切分配置**。             |\n\t// | `tag_splitter.tag`         | Array\\<String\\>    | **切分标识符**。                             |\n\t// | `tag_splitter.chunk_length`| Number       | **切片最大长度**。                                                               |\n\t// | `tag_splitter.chunk_overlap_length` | Number    | **切块重叠长度**。                                                  |\n\t//\n\t// 🔹 **补充说明：**\n\t//\n\t// - `splitter` 字段的值可以是：\n\t//   - `\"page\"`：只使用按页切分逻辑，此时只需要关心 `page_splitter` 相关字段。\n\t//   - `\"tag\"`：只使用按标识符（如分号、换行等）切分逻辑，此时关注 `tag_splitter`。\n\t// ---\n\t//\n\t// ##  `table_style`（表格输出样式）\n\t//\n\t// 用于指定 **表格类内容（比如从 Excel 或 CSV 中提取的表格）最终以何种格式返回**，方便前端展示或后续处理。\n\t//\n\t// **类型：String**\n\t//\n\t// ```json\n\t// \"table_style\": \"md\"\n\t// ```\n\t//\n\t// ### 字段说明：\n\t//\n\t// | 字段名       | 类型   | 说明                                                                 |\n\t// |--------------|--------|----------------------------------------------------------------------|\n\t// | `table_style` | String | 指定表格内容的输出格式。可用值：<br>• `\"html\"`：以 HTML 表格形式返回，适合网页展示。<br>• `\"md\"`：以 Markdown 表格语法返回，适合文档或 Markdown 渲染环境。|\n\tSplitRule *string `json:\"SplitRule,omitnil,omitempty\" name:\"SplitRule\"`\n\n\t// 文档更新频率\n\tUpdatePeriodInfo *UpdatePeriodInfo `json:\"UpdatePeriodInfo,omitnil,omitempty\" name:\"UpdatePeriodInfo\"`\n}\n\nfunc (r *SaveDocRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *SaveDocRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"FileName\")\n\tdelete(f, \"FileType\")\n\tdelete(f, \"CosUrl\")\n\tdelete(f, \"ETag\")\n\tdelete(f, \"CosHash\")\n\tdelete(f, \"Size\")\n\tdelete(f, \"AttrRange\")\n\tdelete(f, \"Source\")\n\tdelete(f, \"WebUrl\")\n\tdelete(f, \"AttrLabels\")\n\tdelete(f, \"ReferUrlType\")\n\tdelete(f, \"ExpireStart\")\n\tdelete(f, \"ExpireEnd\")\n\tdelete(f, \"IsRefer\")\n\tdelete(f, \"Opt\")\n\tdelete(f, \"CateBizId\")\n\tdelete(f, \"IsDownload\")\n\tdelete(f, \"DuplicateFileHandles\")\n\tdelete(f, \"SplitRule\")\n\tdelete(f, \"UpdatePeriodInfo\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"SaveDocRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype SaveDocResponseParams struct {\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n\n\t// 导入错误信息\n\tErrorMsg *string `json:\"ErrorMsg,omitnil,omitempty\" name:\"ErrorMsg\"`\n\n\t// 错误链接\n\tErrorLink *string `json:\"ErrorLink,omitnil,omitempty\" name:\"ErrorLink\"`\n\n\t// 错误链接文本\n\tErrorLinkText *string `json:\"ErrorLinkText,omitnil,omitempty\" name:\"ErrorLinkText\"`\n\n\t// 重复类型，0：未重复，其他取值请参考入参DuplicateFileHandle结构体的CheckType字段\n\tDuplicateFileCheckType *uint64 `json:\"DuplicateFileCheckType,omitnil,omitempty\" name:\"DuplicateFileCheckType\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype SaveDocResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *SaveDocResponseParams `json:\"Response\"`\n}\n\nfunc (r *SaveDocResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *SaveDocResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype SearchRange struct {\n\t// 检索条件and/or\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCondition *string `json:\"Condition,omitnil,omitempty\" name:\"Condition\"`\n\n\t// 自定义变量和标签关系数据\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tApiVarAttrInfos []*ApiVarAttrInfo `json:\"ApiVarAttrInfos,omitnil,omitempty\" name:\"ApiVarAttrInfos\"`\n}\n\ntype SearchStrategy struct {\n\t// 检索策略类型 0:混合检索，1：语义检索\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStrategyType *uint64 `json:\"StrategyType,omitnil,omitempty\" name:\"StrategyType\"`\n\n\t// Excel检索增强开关, false关闭，true打开\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTableEnhancement *bool `json:\"TableEnhancement,omitnil,omitempty\" name:\"TableEnhancement\"`\n\n\t// 向量模型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tEmbeddingModel *string `json:\"EmbeddingModel,omitnil,omitempty\" name:\"EmbeddingModel\"`\n\n\t// 结果重排序开关， on打开，off关闭\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRerankModelSwitch *string `json:\"RerankModelSwitch,omitnil,omitempty\" name:\"RerankModelSwitch\"`\n\n\t// 结果重排序模型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRerankModel *string `json:\"RerankModel,omitnil,omitempty\" name:\"RerankModel\"`\n}\n\ntype ShareKnowledgeBase struct {\n\t// 共享知识库ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 检索范围\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSearchRange *SearchRange `json:\"SearchRange,omitnil,omitempty\" name:\"SearchRange\"`\n\n\t// 知识库模型设置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeModelConfig *KnowledgeModelConfig `json:\"KnowledgeModelConfig,omitnil,omitempty\" name:\"KnowledgeModelConfig\"`\n\n\t// 检索策略配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSearchStrategy *SearchStrategy `json:\"SearchStrategy,omitnil,omitempty\" name:\"SearchStrategy\"`\n\n\t// 检索配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSearch []*KnowledgeQaSearch `json:\"Search,omitnil,omitempty\" name:\"Search\"`\n\n\t// // 问答-回复灵活度 1：已采纳答案直接回复 2：已采纳润色后回复\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReplyFlexibility *int64 `json:\"ReplyFlexibility,omitnil,omitempty\" name:\"ReplyFlexibility\"`\n\n\t// 共享知识库名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tKnowledgeName *string `json:\"KnowledgeName,omitnil,omitempty\" name:\"KnowledgeName\"`\n}\n\ntype SimilarQuestion struct {\n\t// 相似问ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSimBizId *string `json:\"SimBizId,omitnil,omitempty\" name:\"SimBizId\"`\n\n\t// 相似问内容\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 相似问审核状态，1审核失败\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAuditStatus *uint64 `json:\"AuditStatus,omitnil,omitempty\" name:\"AuditStatus\"`\n}\n\ntype SimilarQuestionModify struct {\n\t// 需要添加的相似问(内容)列表\n\tAddQuestions []*string `json:\"AddQuestions,omitnil,omitempty\" name:\"AddQuestions\"`\n\n\t// 需要更新的相似问列表\n\tUpdateQuestions []*SimilarQuestion `json:\"UpdateQuestions,omitnil,omitempty\" name:\"UpdateQuestions\"`\n\n\t// 需要删除的相似问列表\n\tDeleteQuestions []*SimilarQuestion `json:\"DeleteQuestions,omitnil,omitempty\" name:\"DeleteQuestions\"`\n}\n\ntype Stat struct {\n\t// X轴: 时间区域；根据查询条件的粒度返回“分/小时/日”三种区间范围\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tX *string `json:\"X,omitnil,omitempty\" name:\"X\"`\n\n\t// Y轴: 该时间区域内的统计值，如token消耗量，调用次数或使用量等信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tY *float64 `json:\"Y,omitnil,omitempty\" name:\"Y\"`\n}\n\ntype StatisticInfo struct {\n\t// 模型名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModelName *string `json:\"ModelName,omitnil,omitempty\" name:\"ModelName\"`\n\n\t// 首Token耗时\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFirstTokenCost *uint64 `json:\"FirstTokenCost,omitnil,omitempty\" name:\"FirstTokenCost\"`\n\n\t// 总耗时\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTotalCost *uint64 `json:\"TotalCost,omitnil,omitempty\" name:\"TotalCost\"`\n\n\t// 输入Token数量\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tInputTokens *uint64 `json:\"InputTokens,omitnil,omitempty\" name:\"InputTokens\"`\n\n\t// 输出Token数量\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOutputTokens *uint64 `json:\"OutputTokens,omitnil,omitempty\" name:\"OutputTokens\"`\n\n\t// 总Token数量\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTotalTokens *uint64 `json:\"TotalTokens,omitnil,omitempty\" name:\"TotalTokens\"`\n}\n\n// Predefined struct for user\ntype StopDocParseRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n}\n\ntype StopDocParseRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文档ID\n\tDocBizId *string `json:\"DocBizId,omitnil,omitempty\" name:\"DocBizId\"`\n}\n\nfunc (r *StopDocParseRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *StopDocParseRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"DocBizId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"StopDocParseRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype StopDocParseResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype StopDocParseResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *StopDocParseResponseParams `json:\"Response\"`\n}\n\nfunc (r *StopDocParseResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *StopDocParseResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype StopWorkflowRunRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 工作流运行实例ID\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n}\n\ntype StopWorkflowRunRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 工作流运行实例ID\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n}\n\nfunc (r *StopWorkflowRunRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *StopWorkflowRunRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"WorkflowRunId\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"StopWorkflowRunRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype StopWorkflowRunResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype StopWorkflowRunResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *StopWorkflowRunResponseParams `json:\"Response\"`\n}\n\nfunc (r *StopWorkflowRunResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *StopWorkflowRunResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype StrValue struct {\n\t// 名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 值\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tValue *string `json:\"Value,omitnil,omitempty\" name:\"Value\"`\n}\n\ntype StructuredOutputConfig struct {\n\t// 参数列表\n\tStructuredOutputParams []*ParameterConfig `json:\"StructuredOutputParams,omitnil,omitempty\" name:\"StructuredOutputParams\"`\n}\n\ntype SummaryConfig struct {\n\t// 模型配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tModel *AppModel `json:\"Model,omitnil,omitempty\" name:\"Model\"`\n\n\t// 知识摘要输出配置\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOutput *SummaryOutput `json:\"Output,omitnil,omitempty\" name:\"Output\"`\n\n\t// 欢迎语，200字符以内\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tGreeting *string `json:\"Greeting,omitnil,omitempty\" name:\"Greeting\"`\n}\n\ntype SummaryOutput struct {\n\t// 输出方式 1：流式 2：非流式\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tMethod *uint64 `json:\"Method,omitnil,omitempty\" name:\"Method\"`\n\n\t// 输出要求 1：文本总结 2：自定义要求\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRequirement *uint64 `json:\"Requirement,omitnil,omitempty\" name:\"Requirement\"`\n\n\t// 自定义要求指令\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRequireCommand *string `json:\"RequireCommand,omitnil,omitempty\" name:\"RequireCommand\"`\n}\n\ntype TaskFLowVar struct {\n\t// 变量ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tVarId *string `json:\"VarId,omitnil,omitempty\" name:\"VarId\"`\n\n\t// 变量名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tVarName *string `json:\"VarName,omitnil,omitempty\" name:\"VarName\"`\n\n\t// 变量描述（默认为\"-\"）\n\tVarDesc *string `json:\"VarDesc,omitnil,omitempty\" name:\"VarDesc\"`\n\n\t// 变量类型 (STRING,INT,FLOAT,BOOL,OBJECT,ARRAY_STRING,ARRAY_INT,ARRAY_FLOAT,ARRAY_BOOL,ARRAY_OBJECT,FILE,DOCUMENT,IMAGE,AUDIO)\n\tVarType *string `json:\"VarType,omitnil,omitempty\" name:\"VarType\"`\n\n\t// 自定义变量默认值\n\tVarDefaultValue *string `json:\"VarDefaultValue,omitnil,omitempty\" name:\"VarDefaultValue\"`\n\n\t// 自定义变量文件默认名称\n\tVarDefaultFileName *string `json:\"VarDefaultFileName,omitnil,omitempty\" name:\"VarDefaultFileName\"`\n\n\t// 变量类型\n\tVarModuleType *uint64 `json:\"VarModuleType,omitnil,omitempty\" name:\"VarModuleType\"`\n}\n\ntype TaskFlowInfo struct {\n\t// 任务流程ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTaskFlowId *string `json:\"TaskFlowId,omitnil,omitempty\" name:\"TaskFlowId\"`\n\n\t// 任务流程名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTaskFlowName *string `json:\"TaskFlowName,omitnil,omitempty\" name:\"TaskFlowName\"`\n\n\t// Query 重写结果\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQueryRewrite *string `json:\"QueryRewrite,omitnil,omitempty\" name:\"QueryRewrite\"`\n\n\t// 命中意图\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tHitIntent *string `json:\"HitIntent,omitnil,omitempty\" name:\"HitIntent\"`\n\n\t// 任务流程回复类型\n\t// 0: 任务流回复\n\t// 1: 任务流静默\n\t// 2: 任务流拉回话术\n\t// 3: 任务流自定义回复\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tType *uint64 `json:\"Type,omitnil,omitempty\" name:\"Type\"`\n}\n\ntype TaskFlowSummary struct {\n\t// 任务流程名\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tIntentName *string `json:\"IntentName,omitnil,omitempty\" name:\"IntentName\"`\n\n\t// 实体列表\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUpdatedSlotValues []*ValueInfo `json:\"UpdatedSlotValues,omitnil,omitempty\" name:\"UpdatedSlotValues\"`\n\n\t// 节点列表\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRunNodes []*RunNodeInfo `json:\"RunNodes,omitnil,omitempty\" name:\"RunNodes\"`\n\n\t// 意图判断\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tPurposes []*string `json:\"Purposes,omitnil,omitempty\" name:\"Purposes\"`\n}\n\ntype TaskParams struct {\n\t// 下载地址,需要通过cos桶临时密钥去下载\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCosPath *string `json:\"CosPath,omitnil,omitempty\" name:\"CosPath\"`\n}\n\ntype TokenStat struct {\n\t// 会话 ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tSessionId *string `json:\"SessionId,omitnil,omitempty\" name:\"SessionId\"`\n\n\t// 请求 ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n\n\t// 对应哪条会话, 会话 ID, 用于回答的消息存储使用, 可提前生成, 保存消息时使用\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRecordId *string `json:\"RecordId,omitnil,omitempty\" name:\"RecordId\"`\n\n\t// token 已使用数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUsedCount *uint64 `json:\"UsedCount,omitnil,omitempty\" name:\"UsedCount\"`\n\n\t// 免费 token 数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFreeCount *uint64 `json:\"FreeCount,omitnil,omitempty\" name:\"FreeCount\"`\n\n\t// 订单总 token 数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOrderCount *uint64 `json:\"OrderCount,omitnil,omitempty\" name:\"OrderCount\"`\n\n\t// 当前执行状态汇总, 常量: 使用中: processing, 成功: success, 失败: failed\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatusSummary *string `json:\"StatusSummary,omitnil,omitempty\" name:\"StatusSummary\"`\n\n\t// 当前执行状态汇总后中文展示\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatusSummaryTitle *string `json:\"StatusSummaryTitle,omitnil,omitempty\" name:\"StatusSummaryTitle\"`\n\n\t// 当前请求执行时间, 单位 ms\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tElapsed *uint64 `json:\"Elapsed,omitnil,omitempty\" name:\"Elapsed\"`\n\n\t// 当前请求消耗 token 数\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTokenCount *uint64 `json:\"TokenCount,omitnil,omitempty\" name:\"TokenCount\"`\n\n\t// 执行过程信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tProcedures []*Procedure `json:\"Procedures,omitnil,omitempty\" name:\"Procedures\"`\n\n\t// 执行过程信息TraceId\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTraceId *string `json:\"TraceId,omitnil,omitempty\" name:\"TraceId\"`\n}\n\ntype UnsatisfiedReply struct {\n\t// 不满意回复ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReplyBizId *string `json:\"ReplyBizId,omitnil,omitempty\" name:\"ReplyBizId\"`\n\n\t// 消息记录ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRecordBizId *string `json:\"RecordBizId,omitnil,omitempty\" name:\"RecordBizId\"`\n\n\t// 用户问题\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tQuestion *string `json:\"Question,omitnil,omitempty\" name:\"Question\"`\n\n\t// 问题回复\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tAnswer *string `json:\"Answer,omitnil,omitempty\" name:\"Answer\"`\n\n\t// 错误类型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tReasons []*string `json:\"Reasons,omitnil,omitempty\" name:\"Reasons\"`\n\n\t// 处理状态，0：待处理，1：已拒答，2：已忽略，3：已纠错\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatus *int64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 创建时间，秒级时间戳\n\tCreateTime *string `json:\"CreateTime,omitnil,omitempty\" name:\"CreateTime\"`\n\n\t// 更新时间,秒级时间戳\n\tUpdateTime *string `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n\n\t// 操作人\n\tOperator *string `json:\"Operator,omitnil,omitempty\" name:\"Operator\"`\n}\n\ntype UpdatePeriodInfo struct {\n\t// 文档更新频率类型：0不更新 -H 小时粒度,当前仅支持24(1天)，72(3天)，168(7天) 仅source=2 腾讯文档类型有效\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUpdatePeriodH *uint64 `json:\"UpdatePeriodH,omitnil,omitempty\" name:\"UpdatePeriodH\"`\n}\n\n// Predefined struct for user\ntype UpdateSharedKnowledgeRequestParams struct {\n\t// 共享知识库业务ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 共享知识库更新信息\n\tInfo *KnowledgeUpdateInfo `json:\"Info,omitnil,omitempty\" name:\"Info\"`\n}\n\ntype UpdateSharedKnowledgeRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 共享知识库业务ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 共享知识库更新信息\n\tInfo *KnowledgeUpdateInfo `json:\"Info,omitnil,omitempty\" name:\"Info\"`\n}\n\nfunc (r *UpdateSharedKnowledgeRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *UpdateSharedKnowledgeRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"KnowledgeBizId\")\n\tdelete(f, \"Info\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"UpdateSharedKnowledgeRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype UpdateSharedKnowledgeResponseParams struct {\n\t// 共享知识库业务ID\n\tKnowledgeBizId *string `json:\"KnowledgeBizId,omitnil,omitempty\" name:\"KnowledgeBizId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype UpdateSharedKnowledgeResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *UpdateSharedKnowledgeResponseParams `json:\"Response\"`\n}\n\nfunc (r *UpdateSharedKnowledgeResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *UpdateSharedKnowledgeResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype UpdateVarRequestParams struct {\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 变量ID\n\tVarId *string `json:\"VarId,omitnil,omitempty\" name:\"VarId\"`\n\n\t// 变量名称，最大支持50个字符\n\tVarName *string `json:\"VarName,omitnil,omitempty\" name:\"VarName\"`\n\n\t// 参数描述\n\tVarDesc *string `json:\"VarDesc,omitnil,omitempty\" name:\"VarDesc\"`\n\n\t// 参数类型\n\tVarType *string `json:\"VarType,omitnil,omitempty\" name:\"VarType\"`\n\n\t// 自定义变量默认值\n\tVarDefaultValue *string `json:\"VarDefaultValue,omitnil,omitempty\" name:\"VarDefaultValue\"`\n\n\t// 自定义变量文件默认名称\n\tVarDefaultFileName *string `json:\"VarDefaultFileName,omitnil,omitempty\" name:\"VarDefaultFileName\"`\n\n\t// 变量类型\n\tVarModuleType *uint64 `json:\"VarModuleType,omitnil,omitempty\" name:\"VarModuleType\"`\n}\n\ntype UpdateVarRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 变量ID\n\tVarId *string `json:\"VarId,omitnil,omitempty\" name:\"VarId\"`\n\n\t// 变量名称，最大支持50个字符\n\tVarName *string `json:\"VarName,omitnil,omitempty\" name:\"VarName\"`\n\n\t// 参数描述\n\tVarDesc *string `json:\"VarDesc,omitnil,omitempty\" name:\"VarDesc\"`\n\n\t// 参数类型\n\tVarType *string `json:\"VarType,omitnil,omitempty\" name:\"VarType\"`\n\n\t// 自定义变量默认值\n\tVarDefaultValue *string `json:\"VarDefaultValue,omitnil,omitempty\" name:\"VarDefaultValue\"`\n\n\t// 自定义变量文件默认名称\n\tVarDefaultFileName *string `json:\"VarDefaultFileName,omitnil,omitempty\" name:\"VarDefaultFileName\"`\n\n\t// 变量类型\n\tVarModuleType *uint64 `json:\"VarModuleType,omitnil,omitempty\" name:\"VarModuleType\"`\n}\n\nfunc (r *UpdateVarRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *UpdateVarRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"AppBizId\")\n\tdelete(f, \"VarId\")\n\tdelete(f, \"VarName\")\n\tdelete(f, \"VarDesc\")\n\tdelete(f, \"VarType\")\n\tdelete(f, \"VarDefaultValue\")\n\tdelete(f, \"VarDefaultFileName\")\n\tdelete(f, \"VarModuleType\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"UpdateVarRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype UpdateVarResponseParams struct {\n\t// 变量ID\n\tVarId *string `json:\"VarId,omitnil,omitempty\" name:\"VarId\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype UpdateVarResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *UpdateVarResponseParams `json:\"Response\"`\n}\n\nfunc (r *UpdateVarResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *UpdateVarResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype UploadAttributeLabelRequestParams struct {\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文件名\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// cos路径\n\tCosUrl *string `json:\"CosUrl,omitnil,omitempty\" name:\"CosUrl\"`\n\n\t// x-cos-hash-crc64ecma 头部中的 CRC64编码进行校验上传到云端的文件和本地文件的一致性\n\tCosHash *string `json:\"CosHash,omitnil,omitempty\" name:\"CosHash\"`\n\n\t// 文件大小\n\tSize *string `json:\"Size,omitnil,omitempty\" name:\"Size\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype UploadAttributeLabelRequest struct {\n\t*tchttp.BaseRequest\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 文件名\n\tFileName *string `json:\"FileName,omitnil,omitempty\" name:\"FileName\"`\n\n\t// cos路径\n\tCosUrl *string `json:\"CosUrl,omitnil,omitempty\" name:\"CosUrl\"`\n\n\t// x-cos-hash-crc64ecma 头部中的 CRC64编码进行校验上传到云端的文件和本地文件的一致性\n\tCosHash *string `json:\"CosHash,omitnil,omitempty\" name:\"CosHash\"`\n\n\t// 文件大小\n\tSize *string `json:\"Size,omitnil,omitempty\" name:\"Size\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *UploadAttributeLabelRequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *UploadAttributeLabelRequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"FileName\")\n\tdelete(f, \"CosUrl\")\n\tdelete(f, \"CosHash\")\n\tdelete(f, \"Size\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"UploadAttributeLabelRequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype UploadAttributeLabelResponseParams struct {\n\t// 导入错误\n\tErrorMsg *string `json:\"ErrorMsg,omitnil,omitempty\" name:\"ErrorMsg\"`\n\n\t// 错误链接\n\tErrorLink *string `json:\"ErrorLink,omitnil,omitempty\" name:\"ErrorLink\"`\n\n\t// 错误链接文本\n\tErrorLinkText *string `json:\"ErrorLinkText,omitnil,omitempty\" name:\"ErrorLinkText\"`\n\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype UploadAttributeLabelResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *UploadAttributeLabelResponseParams `json:\"Response\"`\n}\n\nfunc (r *UploadAttributeLabelResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *UploadAttributeLabelResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype UserBaseInfo struct {\n\t// 用户ID\n\tUserBizId *string `json:\"UserBizId,omitnil,omitempty\" name:\"UserBizId\"`\n\n\t// 用户名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tUserName *string `json:\"UserName,omitnil,omitempty\" name:\"UserName\"`\n}\n\ntype ValueInfo struct {\n\t// 值ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tId *string `json:\"Id,omitnil,omitempty\" name:\"Id\"`\n\n\t// 名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 值类型：0:未知或者空, 1:string, 2:int, 3:float, 4:bool, 5:array(字符串数组), 6: object_array(结构体数组), 7: object(结构体)\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tValueType *int64 `json:\"ValueType,omitnil,omitempty\" name:\"ValueType\"`\n\n\t// string\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tValueStr *string `json:\"ValueStr,omitnil,omitempty\" name:\"ValueStr\"`\n\n\t// int（避免精度丢失使用字符串返回）\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tValueInt *string `json:\"ValueInt,omitnil,omitempty\" name:\"ValueInt\"`\n\n\t// float\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tValueFloat *float64 `json:\"ValueFloat,omitnil,omitempty\" name:\"ValueFloat\"`\n\n\t// bool\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tValueBool *bool `json:\"ValueBool,omitnil,omitempty\" name:\"ValueBool\"`\n\n\t// array\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tValueStrArray []*string `json:\"ValueStrArray,omitnil,omitempty\" name:\"ValueStrArray\"`\n}\n\n// Predefined struct for user\ntype VerifyQARequestParams struct {\n\t// 问答列表\n\tList []*QAList `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\ntype VerifyQARequest struct {\n\t*tchttp.BaseRequest\n\n\t// 问答列表\n\tList []*QAList `json:\"List,omitnil,omitempty\" name:\"List\"`\n\n\t// 应用ID\n\tBotBizId *string `json:\"BotBizId,omitnil,omitempty\" name:\"BotBizId\"`\n\n\t// 登录用户主账号(集成商模式必填)\n\tLoginUin *string `json:\"LoginUin,omitnil,omitempty\" name:\"LoginUin\"`\n\n\t// 登录用户子账号(集成商模式必填)\n\tLoginSubAccountUin *string `json:\"LoginSubAccountUin,omitnil,omitempty\" name:\"LoginSubAccountUin\"`\n}\n\nfunc (r *VerifyQARequest) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *VerifyQARequest) FromJsonString(s string) error {\n\tf := make(map[string]interface{})\n\tif err := json.Unmarshal([]byte(s), &f); err != nil {\n\t\treturn err\n\t}\n\tdelete(f, \"List\")\n\tdelete(f, \"BotBizId\")\n\tdelete(f, \"LoginUin\")\n\tdelete(f, \"LoginSubAccountUin\")\n\tif len(f) > 0 {\n\t\treturn tcerr.NewTencentCloudSDKError(\"ClientError.BuildRequestError\", \"VerifyQARequest has unknown keys!\", \"\")\n\t}\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\n// Predefined struct for user\ntype VerifyQAResponseParams struct {\n\t// 唯一请求 ID，由服务端生成，每次请求都会返回（若请求因其他原因未能抵达服务端，则该次请求不会获得 RequestId）。定位问题时需要提供该次请求的 RequestId。\n\tRequestId *string `json:\"RequestId,omitnil,omitempty\" name:\"RequestId\"`\n}\n\ntype VerifyQAResponse struct {\n\t*tchttp.BaseResponse\n\tResponse *VerifyQAResponseParams `json:\"Response\"`\n}\n\nfunc (r *VerifyQAResponse) ToJsonString() string {\n\tb, _ := json.Marshal(r)\n\treturn string(b)\n}\n\n// FromJsonString It is highly **NOT** recommended to use this function\n// because it has no param check, nor strict type check\nfunc (r *VerifyQAResponse) FromJsonString(s string) error {\n\treturn json.Unmarshal([]byte(s), &r)\n}\n\ntype VoiceConfig struct {\n\t// 公有云音色id\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tVoiceType *uint64 `json:\"VoiceType,omitnil,omitempty\" name:\"VoiceType\"`\n\n\t// 音色key\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTimbreKey *string `json:\"TimbreKey,omitnil,omitempty\" name:\"TimbreKey\"`\n\n\t// 音色名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tVoiceName *string `json:\"VoiceName,omitnil,omitempty\" name:\"VoiceName\"`\n}\n\ntype WorkFlowSummary struct {\n\t// 工作流ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflowId *string `json:\"WorkflowId,omitnil,omitempty\" name:\"WorkflowId\"`\n\n\t// 工作流名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflowName *string `json:\"WorkflowName,omitnil,omitempty\" name:\"WorkflowName\"`\n\n\t// 工作流运行ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n\n\t// 节点信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tRunNodes []*WorkflowRunNodeInfo `json:\"RunNodes,omitnil,omitempty\" name:\"RunNodes\"`\n\n\t// 选项卡\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOptionCards []*string `json:\"OptionCards,omitnil,omitempty\" name:\"OptionCards\"`\n\n\t// 多气泡的输出结果\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOutputs []*string `json:\"Outputs,omitnil,omitempty\" name:\"Outputs\"`\n\n\t// 工作流发布时间，unix时间戳\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflowReleaseTime *string `json:\"WorkflowReleaseTime,omitnil,omitempty\" name:\"WorkflowReleaseTime\"`\n\n\t// 中间消息\n\tPendingMessages []*string `json:\"PendingMessages,omitnil,omitempty\" name:\"PendingMessages\"`\n\n\t// 选项卡索引\n\tOptionCardIndex *OptionCardIndex `json:\"OptionCardIndex,omitnil,omitempty\" name:\"OptionCardIndex\"`\n}\n\ntype WorkflowInfo struct {\n\t// 工作流ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflowId *string `json:\"WorkflowId,omitnil,omitempty\" name:\"WorkflowId\"`\n\n\t// 工作流名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflowName *string `json:\"WorkflowName,omitnil,omitempty\" name:\"WorkflowName\"`\n\n\t// 工作流运行ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n\n\t// 选项卡\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOptionCards []*string `json:\"OptionCards,omitnil,omitempty\" name:\"OptionCards\"`\n\n\t// 多气泡的输出结果\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOutputs []*string `json:\"Outputs,omitnil,omitempty\" name:\"Outputs\"`\n\n\t// 工作流发布时间，unix时间戳\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tWorkflowReleaseTime *string `json:\"WorkflowReleaseTime,omitnil,omitempty\" name:\"WorkflowReleaseTime\"`\n}\n\ntype WorkflowRef struct {\n\t// 任务流ID\n\tWorkflowId *string `json:\"WorkflowId,omitnil,omitempty\" name:\"WorkflowId\"`\n\n\t// 任务流名称\n\tWorkflowName *string `json:\"WorkflowName,omitnil,omitempty\" name:\"WorkflowName\"`\n\n\t// 任务流描述\n\tWorkflowDesc *string `json:\"WorkflowDesc,omitnil,omitempty\" name:\"WorkflowDesc\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 更新时间\n\tUpdateTime *uint64 `json:\"UpdateTime,omitnil,omitempty\" name:\"UpdateTime\"`\n}\n\ntype WorkflowRunBase struct {\n\t// 运行环境。0: 测试环境； 1: 正式环境\n\tRunEnv *uint64 `json:\"RunEnv,omitnil,omitempty\" name:\"RunEnv\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 工作流运行实例的ID\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n\n\t// 所属工作流ID\n\tWorkflowId *string `json:\"WorkflowId,omitnil,omitempty\" name:\"WorkflowId\"`\n\n\t// 名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 运行状态。0: 排队中；1: 运行中；2: 运行成功；3: 运行失败； 4: 已取消\n\tState *uint64 `json:\"State,omitnil,omitempty\" name:\"State\"`\n\n\t// 错误信息\n\tFailMessage *string `json:\"FailMessage,omitnil,omitempty\" name:\"FailMessage\"`\n\n\t// 消耗的token总数\n\tTotalTokens *uint64 `json:\"TotalTokens,omitnil,omitempty\" name:\"TotalTokens\"`\n\n\t// 创建时间（毫秒时间戳）\n\tCreateTime *string `json:\"CreateTime,omitnil,omitempty\" name:\"CreateTime\"`\n\n\t// 开始时间（毫秒时间戳）\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间（毫秒时间戳）\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n}\n\ntype WorkflowRunDetail struct {\n\t// 运行环境。0: 测试环境； 1: 正式环境\n\tRunEnv *uint64 `json:\"RunEnv,omitnil,omitempty\" name:\"RunEnv\"`\n\n\t// 应用ID\n\tAppBizId *string `json:\"AppBizId,omitnil,omitempty\" name:\"AppBizId\"`\n\n\t// 工作流运行实例的ID\n\tWorkflowRunId *string `json:\"WorkflowRunId,omitnil,omitempty\" name:\"WorkflowRunId\"`\n\n\t// 所属工作流ID\n\tWorkflowId *string `json:\"WorkflowId,omitnil,omitempty\" name:\"WorkflowId\"`\n\n\t// 名称\n\tName *string `json:\"Name,omitnil,omitempty\" name:\"Name\"`\n\n\t// 工作流输出\n\tOutput *string `json:\"Output,omitnil,omitempty\" name:\"Output\"`\n\n\t// 运行状态。0: 排队中；1: 运行中；2: 运行成功；3: 运行失败； 4: 已取消\n\tState *uint64 `json:\"State,omitnil,omitempty\" name:\"State\"`\n\n\t// 错误信息\n\tFailMessage *string `json:\"FailMessage,omitnil,omitempty\" name:\"FailMessage\"`\n\n\t// 消耗的token总数\n\tTotalTokens *uint64 `json:\"TotalTokens,omitnil,omitempty\" name:\"TotalTokens\"`\n\n\t// 创建时间（毫秒时间戳）\n\tCreateTime *string `json:\"CreateTime,omitnil,omitempty\" name:\"CreateTime\"`\n\n\t// 开始时间（毫秒时间戳）\n\tStartTime *string `json:\"StartTime,omitnil,omitempty\" name:\"StartTime\"`\n\n\t// 结束时间（毫秒时间戳）\n\tEndTime *string `json:\"EndTime,omitnil,omitempty\" name:\"EndTime\"`\n\n\t// 工作流画布Json\n\tDialogJson *string `json:\"DialogJson,omitnil,omitempty\" name:\"DialogJson\"`\n\n\t// 用户的输入\n\tQuery *string `json:\"Query,omitnil,omitempty\" name:\"Query\"`\n\n\t// 主模型名称\n\tMainModelName *string `json:\"MainModelName,omitnil,omitempty\" name:\"MainModelName\"`\n\n\t// API参数配置\n\tCustomVariables []*CustomVariable `json:\"CustomVariables,omitnil,omitempty\" name:\"CustomVariables\"`\n}\n\ntype WorkflowRunNodeInfo struct {\n\t// 节点ID\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tNodeId *string `json:\"NodeId,omitnil,omitempty\" name:\"NodeId\"`\n\n\t// 节点类型\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tNodeType *uint64 `json:\"NodeType,omitnil,omitempty\" name:\"NodeType\"`\n\n\t// 节点名称\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tNodeName *string `json:\"NodeName,omitnil,omitempty\" name:\"NodeName\"`\n\n\t// 状态\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatus *uint64 `json:\"Status,omitnil,omitempty\" name:\"Status\"`\n\n\t// 输入\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tInput *string `json:\"Input,omitnil,omitempty\" name:\"Input\"`\n\n\t// 输出\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tOutput *string `json:\"Output,omitnil,omitempty\" name:\"Output\"`\n\n\t// 任务输出\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tTaskOutput *string `json:\"TaskOutput,omitnil,omitempty\" name:\"TaskOutput\"`\n\n\t// 错误信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFailMessage *string `json:\"FailMessage,omitnil,omitempty\" name:\"FailMessage\"`\n\n\t// 花费时长\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tCostMilliSeconds *uint64 `json:\"CostMilliSeconds,omitnil,omitempty\" name:\"CostMilliSeconds\"`\n\n\t// 大模型输出信息\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tStatisticInfos []*StatisticInfo `json:\"StatisticInfos,omitnil,omitempty\" name:\"StatisticInfos\"`\n\n\t// 错误代码\n\t// 注意：此字段可能返回 null，表示取不到有效值。\n\tFailCode *string `json:\"FailCode,omitnil,omitempty\" name:\"FailCode\"`\n}\n\ntype YuanQi struct {\n\t// public-所有人可见\n\tVisibleRange *string `json:\"VisibleRange,omitnil,omitempty\" name:\"VisibleRange\"`\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/volcengine/main.go",
    "content": "package volcengine\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/relaymode\"\n)\n\nfunc GetRequestURL(meta *meta.Meta) (string, error) {\n\tif meta.Mode == relaymode.ChatCompletions {\n\t\treturn fmt.Sprintf(\"%s/api/v3/bots/chat/completions\", meta.BaseURL), nil\n\t}\n\treturn \"\", fmt.Errorf(\"unsupported relay mode %d for minimax\", meta.Mode)\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/yuanqi/adaptor.go",
    "content": "package yuanqi\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\tdb_model \"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/custom\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\ntype Adaptor struct {\n\tmeta         *meta.Meta\n\tCustomConfig *custom.CustomConfig\n}\n\nfunc (a *Adaptor) Init(meta *meta.Meta) {\n\ta.meta = meta\n}\n\nfunc (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {\n\tbaseUrl, err := custom.GetBaseURL(meta.BaseURL)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"%s/openapi/v1/agent/chat/completions\", baseUrl), nil\n}\n\nfunc (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {\n\tcustom.SetupCommonRequestHeader(c, req, meta)\n\treq.Header.Set(\"X-Source\", \"openapi\")\n\treq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treturn nil\n}\n\nfunc (a *Adaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\trequest.User = a.meta.Config.UserID\n\tbotID := strings.TrimPrefix(a.meta.ActualModelName, \"bot-\")\n\treturn ConvertRequest(botID, a.meta, *request, a.CustomConfig), nil\n}\n\nfunc ConvertRequest(botID string, meta *meta.Meta, textRequest model.GeneralOpenAIRequest, customConfig *custom.CustomConfig) *YuanQiRequest {\n\tmodelName := \"bot-\" + strings.TrimPrefix(meta.ActualModelName, \"bot-\")\n\tlogger.SysLogf(\"yuanqi model name: %s\", modelName)\n\t// channelID := meta.ChannelId\n\trequest := YuanQiRequest{\n\t\tAssistantID: botID,\n\t\tUserID:      customConfig.UserId,\n\t\tStream:      textRequest.Stream,\n\t\tChatType:    \"published\",\n\t}\n\tvar queryStr string\n\tvar yuanQiMessages []YuanQiMessage\n\tfor _, message := range textRequest.Messages {\n\t\tqueryStr = message.StringContent()\n\t\tvar contentObjs []db_model.ObjectStringContent\n\t\tvar yuanQiContents []YuanQiContent\n\t\tif err := json.Unmarshal([]byte(queryStr), &contentObjs); err == nil {\n\t\t\tif len(contentObjs) > 0 {\n\t\t\t\tfor _, contentObj := range contentObjs {\n\t\t\t\t\tif contentObj.Type == \"text\" {\n\t\t\t\t\t\tyuanQiContents = append(yuanQiContents, YuanQiContent{\n\t\t\t\t\t\t\tType: \"text\",\n\t\t\t\t\t\t\tText: contentObj.Content,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tuoloadFile := contentObj.GetUploadFile()\n\t\t\t\t\tif uoloadFile == nil {\n\t\t\t\t\t\tlogger.SysErrorf(\"file not found, %+v\", contentObj)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tfileType := GetFileTypeString(uoloadFile.Extension)\n\t\t\t\t\tif fileType == \"\" {\n\t\t\t\t\t\tlogger.SysErrorf(\"yuanqi: file type not supported, %+v\", contentObj)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tyuanQiContents = append(yuanQiContents, YuanQiContent{\n\t\t\t\t\t\tType: \"file_url\",\n\t\t\t\t\t\tFileURL: &FileURL{\n\t\t\t\t\t\t\tType: fileType,\n\t\t\t\t\t\t\tURL:  uoloadFile.GetPreviewFullUrl(),\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\n\t\t\t\t}\n\t\t\t\tyuanQiMessages = append(yuanQiMessages, YuanQiMessage{\n\t\t\t\t\tRole:    message.Role,\n\t\t\t\t\tContent: yuanQiContents,\n\t\t\t\t})\n\t\t\t}\n\t\t} else {\n\t\t\tyuanQiContents = append(yuanQiContents, YuanQiContent{\n\t\t\t\tType: \"text\",\n\t\t\t\tText: queryStr,\n\t\t\t})\n\t\t\tyuanQiMessages = append(yuanQiMessages, YuanQiMessage{\n\t\t\t\tRole:    message.Role,\n\t\t\t\tContent: yuanQiContents,\n\t\t\t})\n\t\t}\n\t}\n\trequest.Messages = yuanQiMessages\n\tlogger.SysLogf(\"yuanqi request: %+v\", request)\n\treturn &request\n}\n\nfunc (a *Adaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {\n\treturn custom.DoRequestHelper(a, c, meta, requestBody)\n}\n\nfunc (a *Adaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {\n\tif request == nil {\n\t\treturn nil, errors.New(\"request is nil\")\n\t}\n\treturn request, nil\n}\n\nfunc (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {\n\tvar responseText *string\n\tvar channelConversationId string\n\tif meta.IsStream {\n\t\terr, responseText, channelConversationId = StreamHandler(c, resp)\n\t} else {\n\t\terr, responseText, channelConversationId = Handler(c, resp, meta.PromptTokens, meta.ActualModelName)\n\t}\n\tif responseText != nil {\n\t\tusage = openai.ResponseText2Usage(*responseText, meta.ActualModelName, meta.PromptTokens)\n\t} else {\n\t\tusage = &model.Usage{}\n\t}\n\tusage.PromptTokens = meta.PromptTokens\n\tusage.TotalTokens = usage.PromptTokens + usage.CompletionTokens\n\ta.CustomConfig.ConversationId = channelConversationId\n\treturn\n}\n\nfunc (a *Adaptor) GetModelList() []string {\n\treturn ModelList\n}\n\nfunc (a *Adaptor) GetChannelName() string {\n\treturn \"yuanqi\"\n}\n\nfunc GetFileTypeString(extension string) string {\n\tvar fileType string\n\tswitch strings.ToLower(extension) {\n\tcase \".jpg\", \".jpeg\", \".png\", \".gif\", \".webp\", \".bmp\":\n\t\tfileType = \"image\"\n\tcase \".mp4\", \".mov\", \".avi\", \".wmv\", \".flv\":\n\t\tfileType = \"video\"\n\tcase \".mp3\", \".wav\", \".aac\", \".flac\":\n\t\tfileType = \"audio\"\n\tcase \".pdf\":\n\t\tfileType = \"pdf\"\n\tcase \".txt\", \".csv\", \".json\", \".xml\":\n\t\tfileType = \"text\"\n\tcase \".doc\", \".docx\":\n\t\tfileType = \"doc\"\n\tcase \".xls\", \".xlsx\":\n\t\tfileType = \"xls\"\n\tcase \".ppt\", \".pptx\":\n\t\tfileType = \"ppt\"\n\tdefault:\n\t\tfileType = \"\"\n\t}\n\n\treturn fileType\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/yuanqi/constants.go",
    "content": "package yuanqi\n\nvar ModelList = []string{}\n"
  },
  {
    "path": "api/service/hub_adaptor/yuanqi/main.go",
    "content": "package yuanqi\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/service/hub_adaptor/openai\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/songquanpeng/one-api/common\"\n\t\"github.com/songquanpeng/one-api/common/helper\"\n\t\"github.com/songquanpeng/one-api/common/render\"\n\t\"github.com/songquanpeng/one-api/relay/model\"\n)\n\nfunc StreamHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusCode, *string, string) {\n\tvar responseText string\n\tcreatedTime := helper.GetTimestamp()\n\tscanner := bufio.NewScanner(resp.Body)\n\t// 设置更大的缓冲区以处理大型响应 (1MB)\n\tbuf := make([]byte, 0, 64*1024)\n\tscanner.Buffer(buf, 1024*1024)\n\tscanner.Split(bufio.ScanLines)\n\tcommon.SetEventStreamHeaders(c)\n\tvar modelName string\n\n\tchannelConversationId := \"\"\n\tfor scanner.Scan() {\n\t\tdata := scanner.Text()\n\t\tif len(data) < 5 || !strings.HasPrefix(data, \"data:\") {\n\t\t\tcontinue\n\t\t}\n\t\tdata = strings.TrimPrefix(data, \"data:\")\n\t\tdata = strings.TrimSuffix(data, \"\\r\")\n\n\t\tvar appBuilderResponse Response\n\t\terr := json.Unmarshal([]byte(data), &appBuilderResponse)\n\t\tif err != nil {\n\t\t\tlogger.SysError(\"error unmarshalling stream response: %s\" + err.Error())\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse, _ := StreamResponseToOpenAI(&appBuilderResponse)\n\t\tif response == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tresponse.Model = modelName\n\t\tresponse.Created = createdTime\n\n\t\terr = render.ObjectData(c, response)\n\t\tif err != nil {\n\t\t\tlogger.SysError(err.Error())\n\t\t}\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\tlogger.SysError(\"error reading stream: \" + err.Error())\n\t}\n\n\trender.Done(c)\n\n\terr := resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\treturn nil, &responseText, channelConversationId\n}\n\nfunc Handler(c *gin.Context, resp *http.Response, promptTokens int, modelName string) (*model.ErrorWithStatusCode, *string, string) {\n\tchannelConversationId := \"\"\n\tresponseBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"read_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\terr = resp.Body.Close()\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"close_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\tvar response Response\n\terr = json.Unmarshal(responseBody, &response)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"unmarshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\n\tfullTextResponse := ResponseToOpenAI(&response)\n\tfullTextResponse.Model = modelName\n\tjsonResponse, err := json.Marshal(fullTextResponse)\n\tif err != nil {\n\t\treturn openai.ErrorWrapper(err, \"marshal_response_body_failed\", http.StatusInternalServerError), nil, channelConversationId\n\t}\n\tc.Writer.Header().Set(\"Content-Type\", \"application/json\")\n\tc.Writer.WriteHeader(resp.StatusCode)\n\t_, err = c.Writer.Write(jsonResponse)\n\tvar responseText string\n\tif len(fullTextResponse.Choices) > 0 {\n\t\tresponseText = fullTextResponse.Choices[0].Message.StringContent()\n\t}\n\treturn nil, &responseText, channelConversationId\n}\n\nfunc StreamResponseToOpenAI(yuanqiResponse *Response) (*openai.ChatCompletionsStreamResponse, *Response) {\n\tvar response *Response\n\tvar choice openai.ChatCompletionsStreamResponseChoice\n\n\tif len(yuanqiResponse.Choices) > 0 {\n\t\tchoice.Delta.Content = yuanqiResponse.Choices[0].Delta.Content\n\t\tchoice.Delta.Role = yuanqiResponse.Choices[0].Delta.Role\n\n\t\tif yuanqiResponse.Choices[0].FinishReason != \"\" {\n\t\t\tchoice.FinishReason = &yuanqiResponse.Choices[0].FinishReason\n\t\t}\n\t}\n\n\tvar openaiResponse openai.ChatCompletionsStreamResponse\n\topenaiResponse.Object = \"chat.completion.chunk\"\n\topenaiResponse.Choices = []openai.ChatCompletionsStreamResponseChoice{choice}\n\topenaiResponse.Id = yuanqiResponse.ID\n\treturn &openaiResponse, response\n}\n\nfunc ResponseToOpenAI(response *Response) *openai.TextResponse {\n\tvar responseText string\n\tif len(response.Choices) > 0 {\n\t\tresponseText = response.Choices[0].Message.Content\n\t}\n\n\tchoice := openai.TextResponseChoice{\n\t\tIndex: 0,\n\t\tMessage: model.Message{\n\t\t\tRole:    \"assistant\",\n\t\t\tContent: responseText,\n\t\t\tName:    nil,\n\t\t},\n\t\tFinishReason: \"stop\",\n\t}\n\n\tfullTextResponse := openai.TextResponse{\n\t\tId:      response.ID,\n\t\tModel:   \"yuanqi-bot\",\n\t\tObject:  \"chat.completion\",\n\t\tCreated: response.Created,\n\t\tChoices: []openai.TextResponseChoice{choice},\n\t}\n\treturn &fullTextResponse\n}\n"
  },
  {
    "path": "api/service/hub_adaptor/yuanqi/model.go",
    "content": "package yuanqi\n\n// 顶层请求结构体\ntype YuanQiRequest struct {\n\tAssistantID string          `json:\"assistant_id\"`        // 助手ID（必选）\n\tVersion     *int            `json:\"version,omitempty\"`   // 助手版本（可选，仅内部开放）\n\tUserID      string          `json:\"user_id\"`             // 用户ID（必选）\n\tStream      bool            `json:\"stream,omitempty\"`    // 是否流式返回（可选，默认false）\n\tChatType    string          `json:\"chat_type,omitempty\"` // 会话类型（可选，默认published）\n\tMessages    []YuanQiMessage `json:\"messages\"`            // 会话内容列表（必选，最多40条）\n}\n\n// 会话消息结构体\ntype YuanQiMessage struct {\n\tRole    string          `json:\"role\"`    // 角色（必选，'user'或'assistant'）\n\tContent []YuanQiContent `json:\"content\"` // 消息内容列表（必选）\n}\n\n// 消息内容结构体（支持文本或文件）\ntype YuanQiContent struct {\n\tType    string   `json:\"type,omitempty\"`     // 内容类型（可选，'text'或'file_url'）\n\tText    string   `json:\"text,omitempty\"`     // 文本内容（当type为text时使用）\n\tFileURL *FileURL `json:\"file_url,omitempty\"` // 文件信息（当type为file_url时使用）\n}\n\n// 文件URL信息结构体\ntype FileURL struct {\n\tType string `json:\"type,omitempty\"` // 文件类型（如image/video/audio等）\n\tURL  string `json:\"url,omitempty\"`  // 文件URL地址\n}\n\n// 工具调用函数结构体\ntype ToolCallFunction struct {\n\tName      string `json:\"name\"`\n\tDesc      string `json:\"desc\"`\n\tType      string `json:\"type\"`\n\tArguments string `json:\"arguments\"`\n}\n\n// 工具调用结构体\ntype ToolCall struct {\n\tID       string          `json:\"id\"`\n\tType     string          `json:\"type\"`\n\tFunction ToolCallFunction `json:\"function\"`\n}\n\n// 使用情况结构体\ntype Usage struct {\n\tPromptTokens     int `json:\"prompt_tokens\"`\n\tCompletionTokens int `json:\"completion_tokens\"`\n\tTotalTokens      int `json:\"total_tokens\"`\n}\n\n// 步骤结构体\ntype Step struct {\n\tRole       string    `json:\"role\"`\n\tContent    string    `json:\"content\"`\n\tToolCallID string    `json:\"tool_call_id\"`\n\tToolCalls  []ToolCall `json:\"tool_calls\"`\n\tUsage      Usage     `json:\"usage\"`\n\tTimeCost   int64     `json:\"time_cost\"`\n}\n\n// 消息结构体\ntype Message struct {\n\tRole    string `json:\"role\"`\n\tContent string `json:\"content\"`\n\tSteps   []Step `json:\"steps\"`\n}\n\n// Delta结构体\ntype Delta struct {\n\tRole      string     `json:\"role\"`\n\tContent   string     `json:\"content\"`\n\tToolCalls []ToolCall `json:\"tool_calls\"`\n\tTimeCost  int64      `json:\"time_cost\"`\n}\n\n// 选择项结构体\ntype Choice struct {\n\tIndex           int    `json:\"index\"`\n\tFinishReason    string `json:\"finish_reason\"`\n\tMessage         Message `json:\"message\"`\n\tDelta           Delta  `json:\"delta\"`\n\tModerationLevel string `json:\"moderation_level\"`\n}\n\n// 响应结构体\ntype Response struct {\n\tID          string   `json:\"id\"`\n\tCreated     int64    `json:\"created\"`\n\tChoices     []Choice `json:\"choices\"`\n\tAssistantID string   `json:\"assistant_id\"`\n\tUsage       Usage    `json:\"usage\"`\n}\n"
  },
  {
    "path": "api/service/organizational_service.go",
    "content": "package service\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n)\n\ntype SyncOrganizationParams struct {\n\t// suite_id dingtalk无效，取系统配置的SuiteID\n\tSuiteID string `json:\"suite_id\"`\n}\n\ntype OrganizationUserListParams struct {\n\tEID        int64  `form:\"-\"`\n\tFrom       int    `form:\"from\"`\n\tStatus     int    `form:\"status\" default:\"-1\"`\n\tOffset     int    `form:\"offset\" default:\"0\"`\n\tLimit      int    `form:\"limit\" default:\"10\"`\n\tKeyword    string `form:\"keyword\"`\n\tUserStatus int    `form:\"user_status\" default:\"-1\"`\n\tDID        int64  `form:\"did\"`\n}\n\ntype OrganizationUserDataTemp struct {\n\tmodel.MemberBinding\n\tUserUserID          int64                                `gorm:\"column:user_id\" json:\"user_id\"`\n\tUsername            string                               `gorm:\"column:username\" json:\"username\"`\n\tNickname            string                               `gorm:\"column:nickname\" json:\"nickname\"`\n\tAvatar              string                               `gorm:\"column:avatar\" json:\"avatar\"`\n\tMobile              string                               `gorm:\"column:mobile\" json:\"mobile\"`\n\tEmail               string                               `gorm:\"column:email\" json:\"email\"`\n\tRole                int64                                `gorm:\"column:role\" json:\"role\"`\n\tUserStatus          int                                  `gorm:\"column:user_status\" json:\"user_status\"`\n\tDepartmentRelations []*OrganizationDepartmentRelationRes `gorm:\"-\" json:\"department_relations\"`\n}\n\ntype OrganizationUserListResponse struct {\n\tTotalCount int64                       `json:\"total_count\"`\n\tData       []*OrganizationUserDataTemp `json:\"data\"`\n}\n\ntype OrganizationDepartmentRelationRes struct {\n\tmodel.MemberDepartmentRelation\n\tBindValue string `json:\"bind_value\" gorm:\"column:bindvalue\"`\n\tName      string `json:\"name\"`\n\tPDID      int64  `json:\"pid\"`\n\tPath      string `json:\"path\"`\n\tSort      int    `json:\"sort\"`\n}\n\nfunc WeComRunSyncOrganization(e *model.Enterprise, params SyncOrganizationParams) error {\n\tif config.IS_SAAS {\n\t\twc, err := model.GetWecomCorp(params.SuiteID, e.WecomCorpID)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif wc == nil {\n\t\t\treturn errors.New(\"wecom corp not found\")\n\t\t}\n\t\treturn nil\n\t} else {\n\t\treturn nil\n\t}\n}\n\nfunc DingtalkRunSyncOrganization(e *model.Enterprise, params SyncOrganizationParams) error {\n\tif config.IS_SAAS {\n\t\tdc, err := model.GetDingtalkCorp(params.SuiteID, e.DingtalkCorpID)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif dc == nil {\n\t\t\treturn errors.New(\"dingtalk corp not found\")\n\t\t}\n\t\treturn nil\n\t} else {\n\t\treturn nil\n\t}\n}\n\nfunc InitFromBackendMemberBinding(eid int64) error {\n\t// init from backend member binding\n\tvar users []*model.User\n\terr := model.DB.Model(&model.User{}).\n\t\tWhere(\"type = ? AND eid = ?\", model.UserTypeInternal, eid).Find(&users).Error\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif len(users) == 0 {\n\t\treturn nil\n\t}\n\n\tvar UserIDs []int64\n\tfor _, u := range users {\n\t\tUserIDs = append(UserIDs, u.UserID)\n\t}\n\n\tvar bindings []*model.MemberBinding\n\terr = model.DB.Model(&model.MemberBinding{}).Where(\"eid = ? AND `from` = ? AND mid IN?\", eid, model.DepartmentFromBackend, UserIDs).Find(&bindings).Error\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttx := model.DB.Begin()\n\tdiff := make([]int64, 0)\n\tfor _, mid := range UserIDs {\n\t\tfound := false\n\t\tfor _, binding := range bindings {\n\t\t\tif mid == binding.MID {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tdiff = append(diff, mid)\n\t\t}\n\t}\n\n\tfor _, mid := range diff {\n\t\tmemberBinding := &model.MemberBinding{\n\t\t\tEID:       eid,\n\t\t\tMID:       mid,\n\t\t\tBindValue: fmt.Sprintf(\"%d\", mid),\n\t\t\tFrom:      model.DepartmentFromBackend,\n\t\t\tStatus:    model.DepartmentStatusNormal,\n\t\t}\n\n\t\tmemberBinding.Name = fmt.Sprintf(\"%d\", mid)\n\t\tif err := tx.Create(memberBinding).Error; err != nil {\n\t\t\ttx.Rollback()\n\t\t\treturn err\n\t\t}\n\t}\n\n\ttx.Commit()\n\n\treturn nil\n}\n\nfunc GetOrganizationalUserList(params OrganizationUserListParams) (*OrganizationUserListResponse, error) {\n\tparams.Keyword = strings.TrimSpace(params.Keyword)\n\tquery := model.DB.Model(&model.MemberBinding{}).\n\t\tWhere(\"member_bindings.eid = ? AND member_bindings.`from` = ?\", params.EID, params.From)\n\n\tquery.Select(`\n    member_bindings.*,\n    users.user_id as user_id,\n    users.username,\n    users.nickname,\n    users.avatar,\n    users.mobile,\n    users.email,\n    users.role,\n    users.status as user_status\n`)\n\tquery.Joins(\"LEFT JOIN users ON users.user_id = member_bindings.mid AND users.eid = member_bindings.eid\")\n\tif params.Keyword != \"\" {\n\t\tquery.Where(\"users.nickname LIKE? OR users.mobile LIKE? OR users.email LIKE? OR member_bindings.bindvalue LIKE?\",\n\t\t\t\"%\"+params.Keyword+\"%\", \"%\"+params.Keyword+\"%\", \"%\"+params.Keyword+\"%\", \"%\"+params.Keyword+\"%\")\n\t}\n\n\tif params.DID != 0 {\n\t\tquery.Joins(\"LEFT JOIN member_department_relations ON member_department_relations.bid = member_bindings.id AND member_department_relations.`from` = member_bindings.`from` AND member_department_relations.eid = member_bindings.eid\")\n\t\tquery.Where(\"member_department_relations.did =?\", params.DID)\n\t}\n\tif params.UserStatus != -1 {\n\t\tquery.Where(\"users.status =?\", params.UserStatus)\n\t}\n\tif params.Status != -1 {\n\t\tquery.Where(\"member_bindings.status =?\", params.Status)\n\t}\n\n\tcount := int64(0)\n\tif err := query.Count(&count).Error; err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar itemTmp []*OrganizationUserDataTemp\n\tres := &OrganizationUserListResponse{\n\t\tTotalCount: count,\n\t\tData:       itemTmp,\n\t}\n\tif count == 0 {\n\t\treturn res, nil\n\t}\n\n\terr := query.Debug().Offset(params.Offset).\n\t\tLimit(params.Limit).Order(\"member_bindings.updated_time desc\").\n\t\tFind(&itemTmp).Error\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tres.Data = itemTmp\n\n\tres.LoadDepartmentRelations()\n\treturn res, nil\n}\n\nfunc (o *OrganizationUserListResponse) LoadDepartmentRelations() error {\n\tvar eid int64\n\tbindIDs := make([]int64, 0)\n\tintFrom := false\n\tvar from int\n\tfor _, item := range o.Data {\n\t\tif eid == 0 {\n\t\t\teid = item.EID\n\t\t}\n\t\tif !intFrom {\n\t\t\tfrom = item.From\n\t\t\tintFrom = true\n\t\t}\n\t\tbindIDs = append(bindIDs, item.ID)\n\t}\n\n\tvar relations []*OrganizationDepartmentRelationRes\n\terr := model.DB.Model(&model.MemberDepartmentRelation{}).\n\t\tSelect(\"member_department_relations.*, departments.bindvalue, departments.pdid, departments.name, departments.sort, departments.path\").\n\t\tJoins(\"Left Join departments ON departments.did = member_department_relations.did AND departments.eid = member_department_relations.eid AND departments.`from` = member_department_relations.`from`\").\n\t\tWhere(\"member_department_relations.eid=? AND member_department_relations.bid IN?\", eid, bindIDs).\n\t\tWhere(\"member_department_relations.`from` =?\", from).\n\t\tFind(&relations).Error\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trelationMap := make(map[int64][]*OrganizationDepartmentRelationRes)\n\tfor _, relation := range relations {\n\t\trelationMap[relation.BID] = append(relationMap[relation.BID], relation)\n\t}\n\n\tfor _, item := range o.Data {\n\t\titem.DepartmentRelations = relationMap[item.ID]\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "api/service/payment/alipay.go",
    "content": "package payment\n\nimport (\n\t\"context\"\n\t\"crypto\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/sha256\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/go-pay/crypto/xpem\"\n\t\"github.com/go-pay/crypto/xrsa\"\n\t\"github.com/go-pay/gopay\"\n\talipayV2 \"github.com/go-pay/gopay/alipay\"\n\t\"github.com/go-pay/gopay/alipay/v3\"\n\t\"github.com/go-pay/xlog\"\n)\n\n// AlipayService 支付宝支付实现\ntype AlipayService struct{}\n\nfunc getAlipayConfig(paySetting *model.PaySetting) (*model.AlipayConfig, error) {\n\tvar alipayConfig model.AlipayConfig\n\tif err := json.Unmarshal([]byte(paySetting.PayConfig), &alipayConfig); err != nil {\n\t\treturn nil, fmt.Errorf(\"alipay config parse error: %v\", err)\n\t}\n\n\tif alipayConfig.AppID == \"\" || alipayConfig.PrivateKey == \"\" || alipayConfig.AlipayPublicKey == \"\" {\n\t\treturn nil, fmt.Errorf(\"missing required alipay configuration\")\n\t}\n\treturn &alipayConfig, nil\n}\n\n// CreateOrder 创建支付宝订单\nfunc (a *AlipayService) CreateOrder(req *PaymentRequest) (interface{}, error) {\n\torder := req.Order\n\talipayConfig, err := getAlipayConfig(req.PaySetting)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tclient, err := alipay.NewClientV3(alipayConfig.AppID, alipayConfig.PrivateKey, true)\n\tif err != nil {\n\t\txlog.Error(err)\n\t\treturn \"\", fmt.Errorf(\"create alipay client failed: %v\", err)\n\t}\n\n\t// 构建支付请求参数\n\tbm := gopay.BodyMap{}\n\tbm.Set(\"out_trade_no\", order.OrderId)\n\tbm.Set(\"total_amount\", fmt.Sprintf(\"%.2f\", float64(order.Amount)/100.0))\n\tsiteName, err := model.GetEnterpriseName(order.Eid)\n\tif err != nil || siteName == \"\" {\n\t\tsiteName = \"53AIHub\"\n\t}\n\tbm.Set(\"subject\", fmt.Sprintf(\"%s - %s %d%s\", siteName, order.SubscriptionName, order.Duration, order.TimeUnit))\n\tbm.Set(\"product_code\", \"FAST_INSTANT_TRADE_PAY\")\n\tNotifyUrl := formatNotifyURL(alipayConfig.NotifyUrl, config.ApiHost, order.Eid, model.PayTypeAlipay)\n\tbm.Set(\"notify_url\", NotifyUrl)\n\n\tif req.ReturnURL != \"\" {\n\t\tbm.Set(\"return_url\", req.ReturnURL)\n\t}\n\n\tpayUrl, err := createTradePagePayURL(client, bm, alipayConfig.PrivateKey)\n\tif err != nil {\n\t\txlog.Error(err)\n\t\treturn \"\", fmt.Errorf(\"create alipay trade page pay url failed: %v\", err)\n\t}\n\treturn &model.AlipayConfig{ReturnUrl: payUrl}, nil\n}\n\n// CloseOrder 关闭支付宝订单\nfunc (a *AlipayService) CloseOrder(order *model.Order, paySetting *model.PaySetting) (string, error) {\n\talipayConfig, err := getAlipayConfig(paySetting)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tclient, err := alipayV2.NewClient(alipayConfig.AppID, alipayConfig.PrivateKey, true)\n\tif err != nil {\n\t\txlog.Error(err)\n\t\treturn \"\", fmt.Errorf(\"create alipay client failed: %v\", err)\n\t}\n\tclient.SetCharset(\"utf-8\").\n\t\tSetSignType(alipayV2.RSA2)\n\n\tbm := make(gopay.BodyMap)\n\tbm.Set(\"out_trade_no\", order.OrderId)\n\n\taliRsp, err := client.TradeClose(context.Background(), bm)\n\tif err != nil {\n\t\txlog.Error(\"err:\", err)\n\t\t// code == 40004 && sub_code == ACQ.TRADE_NOT_EXIST 则返回 \"\", nil\n\t\tif aliRsp.Response.Code == \"40004\" && (aliRsp.Response.SubCode == \"ACQ.TRADE_NOT_EXIST\" || aliRsp.Response.SubCode == \"ACQ.TRADE_STATUS_ERROR\") {\n\t\t\treturn \"\", nil\n\t\t}\n\t\treturn \"\", fmt.Errorf(\"alipay trade close failed: %v\", err)\n\t}\n\n\tif aliRsp.Response.Code != \"10000\" {\n\t\treturn \"\", fmt.Errorf(\"alipay close order failed: %s, sub_msg: %s\", aliRsp.Response.Code, aliRsp.Response.SubMsg)\n\t}\n\treturn aliRsp.Response.TradeNo, nil\n}\n\n// Refund 支付宝退款\nfunc (a *AlipayService) Refund(order *model.Order, paySetting *model.PaySetting) (any, error) {\n\talipayConfig, err := getAlipayConfig(paySetting)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tclient, err := alipayV2.NewClient(alipayConfig.AppID, alipayConfig.PrivateKey, true)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"create alipay client failed: %v\", err)\n\t}\n\tclient.SetCharset(\"utf-8\").\n\t\tSetSignType(alipayV2.RSA2)\n\n\t//请求参数\n\tbm := make(gopay.BodyMap)\n\tbm.Set(\"out_trade_no\", order.OrderId).\n\t\tSet(\"refund_amount\", fmt.Sprintf(\"%.2f\", float64(order.Amount)/100.0)).\n\t\tSet(\"refund_reason\", \"测试退款\")\n\n\taliRsp, err := client.TradeRefund(context.Background(), bm)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"alipay trade refund failed: %v\", err)\n\t}\n\treturn aliRsp, nil\n}\n\n// QueryPaymentStatus 查询支付宝支付状态\nfunc (a *AlipayService) QueryPaymentStatus(order *model.Order, paySetting *model.PaySetting) (any, error) {\n\talipayConfig, err := getAlipayConfig(paySetting)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// 查询订单\n\tclient, err := alipayV2.NewClient(alipayConfig.AppID, alipayConfig.PrivateKey, true)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"create alipay client failed: %v\", err)\n\t}\n\tclient.SetCharset(\"utf-8\").\n\t\tSetSignType(alipayV2.RSA2)\n\n\t//请求参数\n\tbm := make(gopay.BodyMap)\n\tbm.Set(\"out_trade_no\", order.OrderId)\n\n\taliRsp, err := client.TradeQuery(context.Background(), bm)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"alipay trade query failed: %v\", err)\n\t}\n\treturn aliRsp, nil\n}\n\nfunc createTradePagePayURL(client *alipay.ClientV3, bm gopay.BodyMap, privateKey string) (string, error) {\n\t// 构建公共请求参数\n\tpubParams := gopay.BodyMap{}\n\tpubParams.Set(\"app_id\", client.AppId)\n\tpubParams.Set(\"method\", \"alipay.trade.page.pay\")\n\tpubParams.Set(\"format\", \"JSON\")\n\tpubParams.Set(\"charset\", \"utf-8\")\n\tpubParams.Set(\"sign_type\", \"RSA2\")\n\tpubParams.Set(\"version\", \"1.0\")\n\tpubParams.Set(\"timestamp\", time.Now().Format(\"2006-01-02 15:04:05\"))\n\tpubParams.Set(\"biz_content\", bm.JsonBody())\n\n\tif returnUrl := bm.GetString(\"return_url\"); returnUrl != gopay.NULL {\n\t\tpubParams.Set(\"return_url\", returnUrl)\n\t}\n\tif notifyUrl := bm.GetString(\"notify_url\"); notifyUrl != gopay.NULL {\n\t\tpubParams.Set(\"notify_url\", notifyUrl)\n\t}\n\n\tkey := xrsa.FormatAlipayPrivateKey(privateKey)\n\tpriKey, err := xpem.DecodePrivateKey([]byte(key))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"生成签名失败: %w\", err)\n\t}\n\tsign, err := rsaSign(pubParams.EncodeAliPaySignParams(), priKey)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"生成签名失败: %w\", err)\n\t}\n\tpubParams.Set(\"sign\", sign)\n\n\tgateway := \"https://openapi.alipay.com/gateway.do\"\n\tif !client.IsProd {\n\t\tgateway = \"https://openapi-sandbox.dl.alipaydev.com/gateway.do\"\n\t}\n\treturn gateway + \"?\" + pubParams.EncodeURLParams(), nil\n}\n\n// 使用RSA私钥对数据进行签名\nfunc rsaSign(data string, privateKey *rsa.PrivateKey) (string, error) {\n\th := sha256.New()\n\th.Write([]byte(data))\n\tresult, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, h.Sum(nil))\n\tif err != nil {\n\t\treturn gopay.NULL, fmt.Errorf(\"[%w]: %+v\", gopay.SignatureErr, err)\n\t}\n\n\treturn base64.StdEncoding.EncodeToString(result), nil\n}\n"
  },
  {
    "path": "api/service/payment/manual.go",
    "content": "package payment\n\nimport \"github.com/53AI/53AIHub/model\"\n\ntype ManualService struct{}\n\n// CreateOrder 创建手动支付订单\nfunc (m *ManualService) CreateOrder(req *PaymentRequest) (interface{}, error) {\n\t// 实现手动支付创建订单逻辑\n\treturn \"\", nil\n}\n\n// CloseOrder 关闭手动支付订单\nfunc (m *ManualService) CloseOrder(order *model.Order, paySetting *model.PaySetting) (string, error) {\n\t// 实现手动支付取消订单逻辑\n\treturn \"\", nil\n}\n\n// Refund 手动支付退款\nfunc (m *ManualService) Refund(order *model.Order, paySetting *model.PaySetting) (any, error) {\n\t// 实现手动支付退款逻辑\n\treturn \"\", nil\n}\n\n// QueryPaymentStatus 查询手动支付状态\nfunc (m *ManualService) QueryPaymentStatus(order *model.Order, paySetting *model.PaySetting) (any, error) {\n\t// 实现手动支付状态查询逻辑\n\treturn \"\", nil\n}\n"
  },
  {
    "path": "api/service/payment/payment.go",
    "content": "package payment\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/53AI/53AIHub/model\"\n)\n\n// PaymentRequest 统一支付请求参数\ntype PaymentRequest struct {\n\tOrder      *model.Order      // 订单信息\n\tPaySetting *model.PaySetting // 支付配置\n\tOpenID     string            // 微信支付OpenID(JSAPI支付需要)\n\tReturnURL  string            // 支付完成返回URL\n\tNotifyURL  string            // 支付结果通知URL\n\tPayMethod  string            // 支付方式(可选)\n}\n\n// PaymentInterface 定义支付方式的统一接口\ntype PaymentInterface interface {\n\t// 创建支付订单\n\tCreateOrder(req *PaymentRequest) (interface{}, error)\n\t// 关闭支付订单\n\tCloseOrder(order *model.Order, paySetting *model.PaySetting) (string, error)\n\t// 退款\n\tRefund(order *model.Order, paySetting *model.PaySetting) (any, error)\n\t// 查询支付状态\n\tQueryPaymentStatus(order *model.Order, paySetting *model.PaySetting) (any, error)\n}\n\n// PaymentFactory 支付方式工厂\ntype PaymentFactory struct{}\n\n// NewPayment 根据支付类型创建对应的支付实例\nfunc (f *PaymentFactory) NewPayment(payType int) (PaymentInterface, error) {\n\tswitch payType {\n\tcase model.PayTypeAlipay:\n\t\treturn &AlipayService{}, nil\n\tcase model.PayTypeWechat:\n\t\treturn &WechatService{}, nil\n\tcase model.PayTypePaypal:\n\t\treturn &PaypalService{}, nil\n\tcase model.PayTypeManual:\n\t\treturn &ManualService{}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unsupported payment type: %d\", payType)\n\t}\n}\n\nfunc formatNotifyURL(configURL string, apiHost string, eid int64, payType int) string {\n\tif configURL == \"\" {\n\t\tif !strings.HasSuffix(apiHost, \"/\") {\n\t\t\tapiHost = apiHost + \"/\"\n\t\t}\n\t\tif payType == model.PayTypeAlipay {\n\t\t\treturn fmt.Sprintf(\"%sapi/payment/alipay/notify/%d\", apiHost, eid)\n\t\t} else {\n\t\t\treturn fmt.Sprintf(\"%sapi/payment/wechat/notify/%d\", apiHost, eid)\n\t\t}\n\t} else if !strings.HasPrefix(configURL, \"http://\") && !strings.HasPrefix(configURL, \"https://\") {\n\t\tif !strings.HasSuffix(apiHost, \"/\") {\n\t\t\tapiHost = apiHost + \"/\"\n\t\t}\n\t\tif strings.HasPrefix(configURL, \"/\") {\n\t\t\tconfigURL = configURL[1:]\n\t\t}\n\t\treturn apiHost + configURL\n\t}\n\treturn configURL\n}\n"
  },
  {
    "path": "api/service/payment/paypal.go",
    "content": "package payment\n\nimport \"github.com/53AI/53AIHub/model\"\n\n// PaypalService PayPal支付实现\ntype PaypalService struct{}\n\n// CreateOrder 创建PayPal订单\nfunc (p *PaypalService) CreateOrder(req *PaymentRequest) (interface{}, error) {\n\t// 实现PayPal创建订单逻辑\n\treturn \"\", nil\n}\n\n// CloseOrder 关闭PayPal订单\nfunc (p *PaypalService) CloseOrder(order *model.Order, paySetting *model.PaySetting) (string, error) {\n\t// 实现PayPal取消订单逻辑\n\treturn \"\", nil\n}\n\n// Refund PayPal退款\nfunc (p *PaypalService) Refund(order *model.Order, paySetting *model.PaySetting) (any, error) {\n\t// 实现PayPal退款逻辑\n\treturn \"\", nil\n}\n\n// QueryPaymentStatus 查询PayPal支付状态\nfunc (p *PaypalService) QueryPaymentStatus(order *model.Order, paySetting *model.PaySetting) (any, error) {\n\t// 实现PayPal支付状态查询逻辑\n\treturn \"\", nil\n}\n"
  },
  {
    "path": "api/service/payment/wechatpay.go",
    "content": "package payment\n\nimport (\n\t\"context\"\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"crypto/rand\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/storage\"\n\t\"github.com/53AI/53AIHub/config\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/go-pay/gopay\"\n\t\"github.com/go-pay/gopay/wechat/v3\"\n\t\"github.com/go-pay/xlog\"\n)\n\n// WechatService 微信支付实现\ntype WechatService struct{}\n\n// CreateOrder 创建微信订单\n// 返回支付参数(如prepay_id)，用于前端调起支付\nfunc (w *WechatService) CreateOrder(req *PaymentRequest) (interface{}, error) {\n\torder := req.Order\n\tpaySetting := req.PaySetting\n\n\twechatConfig, err := ValidateWechatConfig(paySetting.PayConfig)\n\tif err != nil {\n\t\txlog.Errorf(\"[Wechat] invalid config: %v\", err)\n\t\treturn \"\", fmt.Errorf(\"invalid wechat configuration: %w\", err)\n\t}\n\n\tclient, err := InitWechatClient(wechatConfig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbm, err := buildWechatPaymentBodyMap(wechatConfig, order)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 4. 根据支付方式处理不同支付类型\n\tpayMethod := req.PayMethod\n\tif payMethod == \"jsapi\" {\n\t\topenid := req.OpenID\n\t\t// 从统一请求参数中获取openid\n\t\tif openid == \"\" {\n\t\t\treturn \"\", fmt.Errorf(\"OpenID is required for JSAPI payment\")\n\t\t}\n\t\t// 处理JSAPI支付\n\t\treturn w.processJsapiPayment(client, bm, wechatConfig, openid)\n\t} else {\n\t\t// 默认使用Native支付(扫码支付)\n\t\treturn w.processNativePayment(client, bm, order, wechatConfig)\n\t}\n}\n\n// WechatJsapiPayInfo represents the WeChat JSAPI payment information\ntype WechatJsapiPayInfo struct {\n\tAppId     string `json:\"app_id\"`\n\tTimeStamp string `json:\"time_stamp\"`\n\tNonceStr  string `json:\"nonce_str\"`\n\tPackage   string `json:\"package\"`\n\tSignType  string `json:\"sign_type\"`\n\tPaySign   string `json:\"pay_sign\"`\n\tOrderId   string `json:\"order_id\"`\n}\n\n// processJsapiPayment 处理微信JSAPI支付\nfunc (w *WechatService) processJsapiPayment(client *wechat.ClientV3, bm gopay.BodyMap, wechatConfig model.WechatPayConfig, openid string) (*WechatJsapiPayInfo, error) {\n\tpayerBM := make(gopay.BodyMap)\n\tpayerBM.Set(\"openid\", openid)\n\tbm.Set(\"payer\", payerBM)\n\n\t// Create JSAPI payment\n\twxRsp, err := client.V3TransactionJsapi(context.Background(), bm)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif wxRsp.Code != wechat.Success {\n\t\treturn nil, fmt.Errorf(\"WeChat payment error: %s\", wxRsp.Error)\n\t}\n\n\t// Get JSAPI payment parameters\n\tjsapiParams, err := client.PaySignOfJSAPI(wechatConfig.AppID, wxRsp.Response.PrepayId)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Return payment information\n\treturn &WechatJsapiPayInfo{\n\t\tAppId:     jsapiParams.AppId,\n\t\tTimeStamp: jsapiParams.TimeStamp,\n\t\tNonceStr:  jsapiParams.NonceStr,\n\t\tPackage:   jsapiParams.Package,\n\t\tSignType:  jsapiParams.SignType,\n\t\tPaySign:   jsapiParams.PaySign,\n\t\tOrderId:   bm.Get(\"out_trade_no\"),\n\t}, nil\n}\n\n// WechatNativePayInfo represents the WeChat Native payment information\ntype WechatNativePayInfo struct {\n\tCodeURL     string `json:\"code_url\"`     // QR code URL for payment\n\tOrderId     string `json:\"order_id\"`     // Order ID\n\tExpiredTime int64  `json:\"expired_time\"` // Expiration timestamp\n}\n\n// processNativePayment 处理微信Native支付\nfunc (w *WechatService) processNativePayment(client *wechat.ClientV3, bm gopay.BodyMap, order *model.Order, config model.WechatPayConfig) (*WechatNativePayInfo, error) {\n\t// Create Native payment\n\twxRsp, err := client.V3TransactionNative(context.Background(), bm)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif wxRsp.Code != wechat.Success {\n\t\treturn nil, fmt.Errorf(\"WeChat payment error: %s\", wxRsp.Error)\n\t}\n\n\t// Return payment information\n\treturn &WechatNativePayInfo{\n\t\tCodeURL:     wxRsp.Response.CodeUrl,\n\t\tOrderId:     order.OrderId,\n\t\tExpiredTime: order.ExpiredTime,\n\t}, nil\n}\n\n// CloseOrder 关闭微信订单\nfunc (w *WechatService) CloseOrder(order *model.Order, paySetting *model.PaySetting) (string, error) {\n\t// 实现微信支付取消订单逻辑\n\treturn \"\", nil\n}\n\n// Refund 微信退款\nfunc (w *WechatService) Refund(order *model.Order, paySetting *model.PaySetting) (any, error) {\n\t// 验证微信支付配置\n\twechatConfig, err := ValidateWechatConfig(paySetting.PayConfig)\n\tif err != nil {\n\t\txlog.Errorf(\"[Wechat] invalid config: %v\", err)\n\t\treturn \"\", fmt.Errorf(\"invalid wechat configuration: %w\", err)\n\t}\n\n\t// 初始化微信客户端\n\tclient, err := InitWechatClient(wechatConfig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// 构建退款请求参数\n\tbm := make(gopay.BodyMap)\n\tbm.Set(\"out_trade_no\", order.OrderId)                    // 商户订单号\n\tbm.Set(\"out_refund_no\", generateRefundNo(order.OrderId)) // 商户退款单号，需要唯一\n\n\t// 设置退款金额信息\n\tamount := make(gopay.BodyMap)\n\tamount.Set(\"refund\", int64(order.Amount)) // 退款金额\n\tamount.Set(\"total\", int64(order.Amount))  // 原订单金额\n\tamount.Set(\"currency\", order.Currency)    // 货币类型\n\tbm.Set(\"amount\", amount)\n\n\t// 设置退款原因（可选）\n\tbm.Set(\"reason\", \"测试用户申请退款\")\n\n\t// 发起退款请求\n\trefundRsp, err := client.V3Refund(context.Background(), bm)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"发起微信退款失败: %w\", err)\n\t}\n\n\t// 检查响应状态\n\tif refundRsp.Code != wechat.Success {\n\t\treturn nil, fmt.Errorf(\"微信退款失败: %s\", refundRsp.Error)\n\t}\n\n\t// 返回退款结果\n\treturn refundRsp, nil\n}\n\n// generateRefundNo 生成退款单号\nfunc generateRefundNo(orderId string) string {\n\t// 使用订单号+时间戳+随机数生成唯一退款单号\n\treturn fmt.Sprintf(\"%s_refund_%d\", orderId, time.Now().Unix())\n}\n\n// QueryPaymentStatus 查询微信支付状态\nfunc (w *WechatService) QueryPaymentStatus(order *model.Order, paySetting *model.PaySetting) (any, error) {\n\twechatConfig, err := ValidateWechatConfig(paySetting.PayConfig)\n\tif err != nil {\n\t\txlog.Errorf(\"[Wechat] invalid config: %v\", err)\n\t\treturn \"\", fmt.Errorf(\"invalid wechat configuration: %w\", err)\n\t}\n\n\tclient, err := InitWechatClient(wechatConfig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\twxRsp, err := client.V3TransactionQueryOrder(context.Background(), wechat.OutTradeNo, order.OrderId)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif wxRsp.Code != wechat.Success {\n\t\treturn nil, fmt.Errorf(\"WeChat payment error: %s\", wxRsp.Error)\n\t}\n\treturn wxRsp, nil\n}\n\n// Function to decrypt sensitive data\nfunc decryptSensitiveData(encryptedData string) (string, error) {\n\t// Decode base64\n\tdata, err := base64.StdEncoding.DecodeString(encryptedData)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Prepare encryption key\n\tkey, err := prepareEncryptionKey()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Create cipher\n\tblock, err := aes.NewCipher(key)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Create GCM mode\n\tgcm, err := cipher.NewGCM(block)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Get nonce size\n\tnonceSize := gcm.NonceSize()\n\tif len(data) < nonceSize {\n\t\treturn \"\", errors.New(\"ciphertext too short\")\n\t}\n\n\t// Extract nonce and ciphertext\n\tnonce, ciphertext := data[:nonceSize], data[nonceSize:]\n\n\t// Decrypt\n\tplaintext, err := gcm.Open(nil, nonce, ciphertext, nil)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn string(plaintext), nil\n}\n\n// loadFileFromPathOrURL loads a file from a local path or URL\nfunc loadFileFromPathOrURL(path string) ([]byte, error) {\n\tif strings.HasPrefix(path, \"http://\") || strings.HasPrefix(path, \"https://\") {\n\t\t// Fetch from URL\n\t\tresp, err := http.Get(path)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to fetch from URL: %v\", err)\n\t\t}\n\t\tdefer resp.Body.Close()\n\n\t\tif resp.StatusCode != http.StatusOK {\n\t\t\treturn nil, fmt.Errorf(\"failed to fetch from URL, status code: %d\", resp.StatusCode)\n\t\t}\n\n\t\treturn io.ReadAll(resp.Body)\n\t}\n\n\t// Load from storage\n\treturn storage.StorageInstance.Load(path)\n}\n\n// prepareEncryptionKey prepares a 32-byte encryption key for AES-256\nfunc prepareEncryptionKey() ([]byte, error) {\n\t// Get encryption key from config\n\toriginalKey := []byte(config.GetEncryptionKey())\n\n\t// Ensure key is exactly 32 bytes (256 bits) for AES-256\n\tkey := make([]byte, 32)\n\n\t// If key is shorter than 32 bytes, pad with zeros\n\t// If key is longer than 32 bytes, truncate it\n\tif len(originalKey) > 32 {\n\t\tcopy(key, originalKey[:32])\n\t} else {\n\t\tcopy(key, originalKey)\n\t}\n\n\treturn key, nil\n}\n\n// Helper function to validate WeChat payment configuration\nfunc ValidateWechatConfig(payConfig string) (model.WechatPayConfig, error) {\n\tvar wechatConfig model.WechatPayConfig\n\tif err := json.Unmarshal([]byte(payConfig), &wechatConfig); err != nil {\n\t\treturn wechatConfig, err\n\t}\n\n\t// Validate required fields\n\tif wechatConfig.AppID == \"\" || wechatConfig.MchID == \"\" || wechatConfig.APIv3Key == \"\" || wechatConfig.SerialNo == \"\" {\n\t\treturn wechatConfig, fmt.Errorf(\"missing required WeChat payment configuration (AppID, MchID, APIv3Key, SerialNo)\")\n\t}\n\n\t// Check if we need to process certificate and private key files\n\tif wechatConfig.UseEncryptedConfig {\n\t\t// Configuration already contains encrypted data\n\t\tif wechatConfig.PrivateKey == \"\" {\n\t\t\treturn wechatConfig, fmt.Errorf(\"encrypted private key is required when using encrypted configuration\")\n\t\t}\n\t} else {\n\t\t// Need to read and encrypt files\n\t\tif wechatConfig.PrivateKeyPath == \"\" {\n\t\t\treturn wechatConfig, fmt.Errorf(\"private key path is required\")\n\t\t}\n\n\t\t// Load and encrypt private key\n\t\tprivateKeyBytes, err := loadFileFromPathOrURL(wechatConfig.PrivateKeyPath)\n\t\tif err != nil {\n\t\t\treturn wechatConfig, fmt.Errorf(\"failed to read private key file: %v\", err)\n\t\t}\n\n\t\t// Encrypt private key content\n\t\tencryptedPrivateKey, err := encryptSensitiveData(string(privateKeyBytes))\n\t\tif err != nil {\n\t\t\treturn wechatConfig, fmt.Errorf(\"failed to encrypt private key: %v\", err)\n\t\t}\n\n\t\t// Save encrypted private key content and original file path\n\t\twechatConfig.PrivateKey = encryptedPrivateKey\n\t\t// Keep original file path unchanged\n\n\t\t// Read and encrypt platform certificate (if provided)\n\t\tif wechatConfig.PlatformCertPath != \"\" {\n\t\t\tplatformCertBytes, err := loadFileFromPathOrURL(wechatConfig.PlatformCertPath)\n\t\t\tif err != nil {\n\t\t\t\treturn wechatConfig, fmt.Errorf(\"failed to read platform certificate file: %v\", err)\n\t\t\t}\n\n\t\t\tencryptedPlatformCert, err := encryptSensitiveData(string(platformCertBytes))\n\t\t\tif err != nil {\n\t\t\t\treturn wechatConfig, fmt.Errorf(\"failed to encrypt platform certificate: %v\", err)\n\t\t\t}\n\n\t\t\t// Save encrypted certificate content and original file path\n\t\t\twechatConfig.PlatformCert = encryptedPlatformCert\n\t\t\t// Keep original file path unchanged\n\t\t}\n\n\t\t// Mark as using encrypted configuration for future use\n\t\twechatConfig.UseEncryptedConfig = true\n\t}\n\n\t// Validate notification URL\n\t// if wechatConfig.NotifyURL == \"\" {\n\t// \treturn wechatConfig, fmt.Errorf(\"Notification URL is required\")\n\t// }\n\n\treturn wechatConfig, nil\n}\n\n// Function to encrypt sensitive data\nfunc encryptSensitiveData(data string) (string, error) {\n\t// Prepare encryption key\n\tkey, err := prepareEncryptionKey()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Create cipher\n\tblock, err := aes.NewCipher(key)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Create GCM mode\n\tgcm, err := cipher.NewGCM(block)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Create nonceprocessWechatConfig\n\tnonce := make([]byte, gcm.NonceSize())\n\tif _, err := io.ReadFull(rand.Reader, nonce); err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Encrypt data\n\tciphertext := gcm.Seal(nonce, nonce, []byte(data), nil)\n\n\t// Return base64 encoded encrypted data\n\treturn base64.StdEncoding.EncodeToString(ciphertext), nil\n}\n\n// Initialize WeChat client\nfunc InitWechatClient(wechatConfig model.WechatPayConfig) (*wechat.ClientV3, error) {\n\t// Decrypt private key if using encrypted configuration\n\tvar privateKey string\n\tvar err error\n\n\tif wechatConfig.UseEncryptedConfig {\n\t\tprivateKey, err = decryptSensitiveData(wechatConfig.PrivateKey)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to decrypt private key: %v\", err)\n\t\t}\n\t} else {\n\t\t// This should not happen with the new implementation\n\t\treturn nil, fmt.Errorf(\"configuration is not encrypted\")\n\t}\n\n\t// Initialize WeChat client\n\tclient, err := wechat.NewClientV3(wechatConfig.MchID, wechatConfig.SerialNo, wechatConfig.APIv3Key, privateKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Enable debug mode\n\tif config.DebugEnabled {\n\t\tclient.DebugSwitch = gopay.DebugOn\n\t}\n\n\t// Auto verify signature (if platform certificate exists)\n\tif wechatConfig.PlatformCert != \"\" && wechatConfig.PlatformSerialNo != \"\" {\n\t\t// Decrypt platform certificate\n\t\tplatformCert, err := decryptSensitiveData(wechatConfig.PlatformCert)\n\t\tif err != nil {\n\t\t\txlog.Error(\"failed to decrypt platform certificate:\", err)\n\t\t\t// Continue execution, don't return error\n\t\t} else {\n\t\t\terr = client.AutoVerifySignByPublicKey([]byte(platformCert), wechatConfig.PlatformSerialNo)\n\t\t\tif err != nil {\n\t\t\t\txlog.Error(\"auto verify sign error:\", err)\n\t\t\t\t// Continue execution, don't return error\n\t\t\t}\n\t\t}\n\t}\n\n\treturn client, nil\n}\n\nfunc buildWechatPaymentBodyMap(wechatConfig model.WechatPayConfig, order *model.Order) (gopay.BodyMap, error) {\n\tbm := make(gopay.BodyMap)\n\tbm.Set(\"appid\", wechatConfig.AppID)\n\tbm.Set(\"mchid\", wechatConfig.MchID)\n\n\tsiteName, err := model.GetEnterpriseName(order.Eid)\n\tif err != nil || siteName == \"\" {\n\t\tsiteName = \"53AIHub\"\n\t}\n\tbm.Set(\"description\", fmt.Sprintf(\"%s - %s %d%s\", siteName, order.SubscriptionName, order.Duration, order.TimeUnit))\n\tbm.Set(\"out_trade_no\", order.OrderId)\n\n\tnotifyURL := formatNotifyURL(wechatConfig.NotifyURL, config.ApiHost, order.Eid, model.PayTypeWechat)\n\txlog.Info(\"notifyURL:\", notifyURL)\n\tbm.Set(\"notify_url\", notifyURL)\n\n\tamountBM := make(gopay.BodyMap)\n\tamountBM.Set(\"total\", int64(order.Amount))\n\n\tamountBM.Set(\"currency\", order.Currency)\n\n\tbm.Set(\"amount\", amountBM)\n\n\treturn bm, nil\n}\n"
  },
  {
    "path": "api/service/rerank_service.go",
    "content": "package service\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/songquanpeng/one-api/relay/adaptor/openai\"\n\t\"github.com/songquanpeng/one-api/relay/meta\"\n\trelay_model \"github.com/songquanpeng/one-api/relay/model\"\n)\n\n// BailianRerankService 处理百炼 rerank API 调用的服务\ntype BailianRerankService struct{}\n\n// RerankRequest 与 controller 中的 RerankRequest 结构相同\ntype RerankRequest struct {\n\tModel           string   `json:\"model\" example:\"gte-rerank-v2\" binding:\"required\"`\n\tQuery           string   `json:\"query\" example:\"人工智能的发展历程\" binding:\"required\"`\n\tDocuments       []string `json:\"documents\" example:\"[\\\"人工智能起源于1950年代，图灵提出了著名的图灵测试\\\",\\\"深度学习是机器学习的一个分支，使用神经网络进行学习\\\",\\\"自然语言处理是人工智能的重要应用领域之一\\\"]\" binding:\"required\"`\n\tTopN            *int     `json:\"top_n,omitempty\" example:\"3\"`\n\tReturnDocuments *bool    `json:\"return_documents,omitempty\" example:\"true\"`\n}\n\n// RerankResult represents a single rerank result\ntype RerankResult struct {\n\tObject         string          `json:\"object\" example:\"rerank_result\"` // Result object type\n\tIndex          int             `json:\"index\" example:\"0\"`              // Original index in input documents\n\tRelevanceScore float64         `json:\"relevance_score\" example:\"0.95\"` // Relevance score (0-1)\n\tDocument       *RerankDocument `json:\"document,omitempty\"`             // Document content (if return_documents=true)\n}\n\n// RerankDocument represents document content in rerank result\ntype RerankDocument struct {\n\tText string `json:\"text\" example:\"文档内容\"` // Document text content\n}\n\n// RerankResponse 与 controller 中的 RerankResponse 结构相同\ntype RerankResponse struct {\n\tObject string         `json:\"object\" example:\"list\"`\n\tData   []RerankResult `json:\"data\"`\n\tModel  string         `json:\"model\" example:\"gte-rerank-v2\"`\n\tUsage  RerankUsage    `json:\"usage\"`\n}\n\n// RerankUsage 与 controller 中的 RerankUsage 结构相同\ntype RerankUsage struct {\n\tTotalTokens int `json:\"total_tokens\" example:\"150\"`\n}\n\n// CallBailianRerankAPI 调用百炼 rerank API\nfunc (s *BailianRerankService) CallBailianRerankAPI(ctx context.Context, req *RerankRequest, meta *meta.Meta) (*RerankResponse, *relay_model.Usage, error) {\n\t// 创建百炼适配器请求格式\n\tbailianReq := struct {\n\t\tModel      string   `json:\"model\"`\n\t\tQuery      string   `json:\"query\"`\n\t\tDocuments  []string `json:\"documents\"`\n\t\tTopN       *int     `json:\"top_n,omitempty\"`\n\t\tReturnDocs *bool    `json:\"return_documents,omitempty\"`\n\t}{\n\t\tModel:      req.Model,\n\t\tQuery:      req.Query,\n\t\tDocuments:  req.Documents,\n\t\tTopN:       req.TopN,\n\t\tReturnDocs: req.ReturnDocuments,\n\t}\n\n\t// 构建请求体\n\trequestBody, err := json.Marshal(map[string]interface{}{\n\t\t\"model\": bailianReq.Model,\n\t\t\"input\": map[string]interface{}{\n\t\t\t\"query\":     bailianReq.Query,\n\t\t\t\"documents\": bailianReq.Documents,\n\t\t},\n\t\t\"parameters\": func() map[string]interface{} {\n\t\t\tparams := make(map[string]interface{})\n\t\t\tif bailianReq.TopN != nil {\n\t\t\t\tparams[\"top_n\"] = *bailianReq.TopN\n\t\t\t}\n\t\t\tif bailianReq.ReturnDocs != nil {\n\t\t\t\tparams[\"return_documents\"] = *bailianReq.ReturnDocs\n\t\t\t} else {\n\t\t\t\tparams[\"return_documents\"] = false\n\t\t\t}\n\t\t\treturn params\n\t\t}(),\n\t})\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"序列化请求失败: %v\", err)\n\t}\n\n\t// 构建正确的 rerank API URL\n\tbaseUrl := meta.BaseURL\n\tif baseUrl == \"\" {\n\t\tbaseUrl = \"https://dashscope.aliyuncs.com\"\n\t}\n\turl := fmt.Sprintf(\"%s/api/v1/services/rerank/text-rerank/text-rerank\", baseUrl)\n\n\t// 详细的请求日志\n\tlogger.SysLogf(\"🚀 百炼Rerank API请求开始\")\n\tlogger.SysLogf(\"┌─────────────────────────────────────────────────────────────\")\n\tlogger.SysLogf(\"│ 📡 请求URL: %s\", url)\n\tlogger.SysLogf(\"│ 🔑 API Key: %s\", maskAPIKey(meta.APIKey))\n\tlogger.SysLogf(\"│ 🤖 模型名称: %s\", req.Model)\n\tlogger.SysLogf(\"│ 📝 请求方法: POST\")\n\tlogger.SysLogf(\"│ 📊 查询长度: %d 字符\", len(req.Query))\n\tlogger.SysLogf(\"│ 📚 文档数量: %d\", len(req.Documents))\n\tif req.TopN != nil {\n\t\tlogger.SysLogf(\"│ 🔢 TopN: %d\", *req.TopN)\n\t}\n\tif req.ReturnDocuments != nil {\n\t\tlogger.SysLogf(\"│ 📄 返回文档: %v\", *req.ReturnDocuments)\n\t}\n\tlogger.SysLogf(\"└─────────────────────────────────────────────────────────────\")\n\n\t// 创建HTTP请求\n\thttpReq, err := http.NewRequestWithContext(ctx, \"POST\", url, bytes.NewReader(requestBody))\n\tif err != nil {\n\t\tlogger.SysErrorf(\"❌ 创建HTTP请求失败: %v\", err)\n\t\treturn nil, nil, fmt.Errorf(\"创建请求失败: %v\", err)\n\t}\n\n\t// 设置请求头\n\thttpReq.Header.Set(\"Content-Type\", \"application/json\")\n\thttpReq.Header.Set(\"Authorization\", \"Bearer \"+meta.APIKey)\n\n\t// 发送请求\n\tclient := &http.Client{Timeout: 60 * time.Second}\n\tresp, err := client.Do(httpReq)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"❌ 百炼Rerank请求失败: %v\", err)\n\t\treturn nil, nil, fmt.Errorf(\"发送请求失败: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tlogger.SysLogf(\"✅ 百炼Rerank请求完成 - 状态码: %d\", resp.StatusCode)\n\n\t// 检查响应状态\n\tif resp.StatusCode != http.StatusOK {\n\t\tbody, _ := io.ReadAll(resp.Body)\n\t\tlogger.SysErrorf(\"❌ 百炼Rerank请求失败 - 状态码: %d, 响应: %s\", resp.StatusCode, string(body))\n\t\treturn nil, nil, fmt.Errorf(\"请求失败，状态码: %d\", resp.StatusCode)\n\t}\n\n\t// 读取响应\n\tresponseBody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"❌ 读取响应失败: %v\", err)\n\t\treturn nil, nil, fmt.Errorf(\"读取响应失败: %v\", err)\n\t}\n\n\t// 解析百炼响应\n\tvar bailianResponse map[string]interface{}\n\tif err := json.Unmarshal(responseBody, &bailianResponse); err != nil {\n\t\tlogger.SysErrorf(\"❌ 解析响应失败: %v\", err)\n\t\treturn nil, nil, fmt.Errorf(\"解析响应失败: %v\", err)\n\t}\n\n\t// 转换为标准格式\n\treturn s.convertBailianRerankResponse(bailianResponse, req)\n}\n\n// convertBailianRerankResponse 转换百炼 rerank 响应为标准格式\nfunc (s *BailianRerankService) convertBailianRerankResponse(bailianResp map[string]interface{}, req *RerankRequest) (*RerankResponse, *relay_model.Usage, error) {\n\t// 解析输出数据\n\toutput, ok := bailianResp[\"output\"].(map[string]interface{})\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"响应格式错误：缺少 output 字段\")\n\t}\n\n\tresults, ok := output[\"results\"].([]interface{})\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"响应格式错误：缺少 results 字段\")\n\t}\n\n\t// 转换结果\n\tvar rerankResults []RerankResult\n\tfor _, result := range results {\n\t\tresultMap, ok := result.(map[string]interface{})\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tindex, _ := resultMap[\"index\"].(float64)\n\t\tscore, _ := resultMap[\"relevance_score\"].(float64)\n\n\t\trerankResult := RerankResult{\n\t\t\tObject:         \"rerank_result\",\n\t\t\tIndex:          int(index),\n\t\t\tRelevanceScore: score,\n\t\t}\n\n\t\t// 如果需要返回文档内容\n\t\tif req.ReturnDocuments != nil && *req.ReturnDocuments {\n\t\t\tif int(index) < len(req.Documents) {\n\t\t\t\trerankResult.Document = &RerankDocument{\n\t\t\t\t\tText: req.Documents[int(index)],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trerankResults = append(rerankResults, rerankResult)\n\t}\n\n\t// 计算 token 使用量\n\tusage := s.calculateRerankUsage(req, len(rerankResults))\n\n\tresponse := &RerankResponse{\n\t\tObject: \"list\",\n\t\tData:   rerankResults,\n\t\tModel:  req.Model,\n\t\tUsage: RerankUsage{\n\t\t\tTotalTokens: usage.TotalTokens,\n\t\t},\n\t}\n\n\tlogger.SysLogf(\"✅ 响应转换完成 - 结果数量: %d, Token使用: %d\", len(rerankResults), usage.TotalTokens)\n\n\treturn response, usage, nil\n}\n\n// calculateRerankUsage 计算 rerank 的 token 使用量\nfunc (s *BailianRerankService) calculateRerankUsage(req *RerankRequest, resultCount int) *relay_model.Usage {\n\t// 计算输入 token（query + documents）\n\tqueryTokens := openai.CountTokenText(req.Query, req.Model)\n\n\tdocumentsText := strings.Join(req.Documents, \" \")\n\tdocumentsTokens := openai.CountTokenText(documentsText, req.Model)\n\n\tpromptTokens := queryTokens + documentsTokens\n\n\t// rerank 通常没有生成内容，completion tokens 为 0\n\tcompletionTokens := 0\n\n\ttotalTokens := promptTokens + completionTokens\n\n\tlogger.SysLogf(\"📊 Token计算详情 - Query: %d, Documents: %d, Total: %d\",\n\t\tqueryTokens, documentsTokens, totalTokens)\n\n\treturn &relay_model.Usage{\n\t\tPromptTokens:     promptTokens,\n\t\tCompletionTokens: completionTokens,\n\t\tTotalTokens:      totalTokens,\n\t}\n}\n\n// maskAPIKey 遮蔽API密钥的敏感部分\nfunc maskAPIKey(apiKey string) string {\n\tif len(apiKey) <= 8 {\n\t\treturn \"****\"\n\t}\n\treturn apiKey[:4] + \"****\" + apiKey[len(apiKey)-4:]\n}\n"
  },
  {
    "path": "api/service/resource_permission_service.go",
    "content": "package service\n\nimport (\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/gin-gonic/gin\"\n\t\"gorm.io/gorm\"\n)\n\n// UpdateResourcePermissions 更新资源权限的通用方法\n// 该方法会先删除指定资源的所有现有权限，然后添加新的权限\nfunc UpdateResourcePermissions(c *gin.Context, tx *gorm.DB, resourceID int64, resourceType string, groupIDs []int64) error {\n\t// 删除现有权限\n\tif err := tx.Where(\"resource_id = ? AND resource_type = ?\", resourceID, resourceType).Delete(&model.ResourcePermission{}).Error; err != nil {\n\t\treturn err\n\t}\n\n\t// 添加新权限\n\tif len(groupIDs) > 0 {\n\t\t// 使用map去重\n\t\tgroupIDMap := make(map[int64]bool)\n\t\tuniqueGroupIDs := make([]int64, 0)\n\n\t\tfor _, groupID := range groupIDs {\n\t\t\tif !groupIDMap[groupID] && groupID > 0 {\n\t\t\t\tgroupIDMap[groupID] = true\n\t\t\t\tuniqueGroupIDs = append(uniqueGroupIDs, groupID)\n\t\t\t}\n\t\t}\n\n\t\tfor _, groupID := range uniqueGroupIDs {\n\t\t\tpermission := model.ResourcePermission{\n\t\t\t\tGroupID:      groupID,\n\t\t\t\tResourceID:   resourceID,\n\t\t\t\tResourceType: resourceType,\n\t\t\t\tPermission:   model.PermissionRead,\n\t\t\t}\n\n\t\t\tif err := tx.Create(&permission).Error; err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// UpdateAgentResourcePermissions 更新Agent资源权限的专用方法\n// 该方法会先删除指定Agent的所有现有权限，然后根据企业类型过滤后添加新的权限\nfunc UpdateAgentResourcePermissions(c *gin.Context, tx *gorm.DB, agentID int64, subscriptionGroupIds, userGroupIds []int64, enterprise *model.Enterprise) error {\n\t// 删除现有权限\n\tif err := tx.Where(\"resource_id = ? AND resource_type = ?\", agentID, model.ResourceTypeAgent).Delete(&model.ResourcePermission{}).Error; err != nil {\n\t\treturn err\n\t}\n\n\t// 确定分组ID\n\tvar allGroupIds []int64\n\tgroupIDSet := make(map[int64]bool)\n\n\tswitch enterprise.Type {\n\tcase model.EnterpriseTypeIndustry:\n\t\t// 取所有分组ID\n\t\tif len(subscriptionGroupIds) > 0 {\n\t\t\tfor _, id := range subscriptionGroupIds {\n\t\t\t\tgroupIDSet[id] = true\n\t\t\t}\n\t\t}\n\t\tif len(userGroupIds) > 0 {\n\t\t\tfor _, id := range userGroupIds {\n\t\t\t\tgroupIDSet[id] = true\n\t\t\t}\n\t\t}\n\tcase model.EnterpriseTypeIndependent:\n\t\t// 只取订阅分组ID\n\t\tif len(subscriptionGroupIds) > 0 {\n\t\t\tfor _, id := range subscriptionGroupIds {\n\t\t\t\tgroupIDSet[id] = true\n\t\t\t}\n\t\t}\n\tcase model.EnterpriseTypeEnterprise:\n\t\t// 只取用户分组ID\n\t\tif len(userGroupIds) > 0 {\n\t\t\tfor _, id := range userGroupIds {\n\t\t\t\tgroupIDSet[id] = true\n\t\t\t}\n\t\t}\n\t}\n\n\t// 转换为切片\n\tallGroupIds = make([]int64, 0, len(groupIDSet))\n\tfor id := range groupIDSet {\n\t\tallGroupIds = append(allGroupIds, id)\n\t}\n\n\t// 如果不是行业类型且有分组ID，需要过滤分组\n\tif enterprise.Type != model.EnterpriseTypeIndustry && len(allGroupIds) > 0 {\n\t\t// 获取所有分组\n\t\tvar groups []model.Group\n\t\tif err := tx.Where(\"group_id IN (?)\", allGroupIds).Find(&groups).Error; err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// 过滤分组\n\t\tfilteredGroupIds := make([]int64, 0, len(groups))\n\t\tfor _, group := range groups {\n\t\t\t// 根据企业类型过滤\n\t\t\tif (enterprise.Type == model.EnterpriseTypeIndependent && group.GroupType != model.USER_GROUP_TYPE) ||\n\t\t\t\t(enterprise.Type == model.EnterpriseTypeEnterprise && group.GroupType != model.INTERNAL_USER_GROUP_TYPE) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfilteredGroupIds = append(filteredGroupIds, group.GroupId)\n\t\t}\n\n\t\tallGroupIds = filteredGroupIds\n\t}\n\n\t// 添加新权限\n\tif len(allGroupIds) > 0 {\n\t\tfor _, groupID := range allGroupIds {\n\t\t\tpermission := model.ResourcePermission{\n\t\t\t\tGroupID:      groupID,\n\t\t\t\tResourceID:   agentID,\n\t\t\t\tResourceType: model.ResourceTypeAgent,\n\t\t\t\tPermission:   model.PermissionRead,\n\t\t\t}\n\t\t\tif err := tx.Create(&permission).Error; err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "api/service/user_service.go",
    "content": "package service\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\n\t\"github.com/53AI/53AIHub/common\"\n\t\"github.com/53AI/53AIHub/common/utils/helper\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"gorm.io/gorm\"\n)\n\n// UserService handles user-related business logic\ntype UserService struct{}\n\n// BatchAddInternalUserResult defines the result of batch adding users\ntype BatchAddInternalUserResult struct {\n\tSuccess []BatchAddUserResult\n\tFailed  []BatchAddUserResult\n}\n\n// BatchAddUserResult defines the structure for batch add user result\ntype BatchAddUserResult struct {\n\tUsername     string `json:\"username\"`\n\tUserID       int64  `json:\"user_id,omitempty\"`\n\tMessage      string `json:\"message,omitempty\"`\n\tExistingType int    `json:\"existing_type,omitempty\"` // If the user already exists, mark the user type\n\tUsernameType int    `json:\"username_type,omitempty\"` // 1: mobile phone, 2: email\n}\n\n// InternalUserInfo defines internal user information\ntype InternalUserInfo struct {\n\tUsername string\n\tNickname string\n\tDids     []int64\n\tPassword string\n}\n\n// BatchAddInternalUsers batch add internal users\nfunc (s *UserService) BatchAddInternalUsers(eid int64, users []InternalUserInfo) (*BatchAddInternalUserResult, error) {\n\t// Begin transaction\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\treturn nil, tx.Error\n\t}\n\n\tresult := &BatchAddInternalUserResult{\n\t\tSuccess: []BatchAddUserResult{},\n\t\tFailed:  []BatchAddUserResult{},\n\t}\n\n\t// Process each user\n\tfor _, userInfo := range users {\n\t\tusername := userInfo.Username\n\n\t\t// Validate username format\n\t\tisEmail := helper.IsValidEmail(username)\n\t\tisMobile := helper.IsValidPhone(username)\n\n\t\tif !isEmail && !isMobile {\n\t\t\tresult.Failed = append(result.Failed, BatchAddUserResult{\n\t\t\t\tUsername: username,\n\t\t\t\tMessage:  \"invalid username\",\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\t// Create user object\n\t\tuser := model.User{\n\t\t\tUsername: username,\n\t\t\tNickname: userInfo.Nickname,\n\t\t\tPassword: userInfo.Password,\n\t\t\tEid:      eid,\n\t\t\tGroupId:  0,\n\t\t\tType:     model.UserTypeInternal,\n\t\t\tRole:     model.RoleCommonUser,\n\t\t}\n\n\t\t// Set email or mobile\n\t\tif isMobile {\n\t\t\tuser.Mobile = username\n\t\t}\n\t\tif isEmail {\n\t\t\tuser.Email = username\n\t\t}\n\n\t\t// Validate user struct\n\t\tif err := common.Validate.Struct(&user); err != nil {\n\t\t\tresult.Failed = append(result.Failed, BatchAddUserResult{\n\t\t\t\tUsername: username,\n\t\t\t\tMessage:  err.Error(),\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check if user already exists\n\t\tif err := s.checkExistingUser(tx, &user, eid, result); err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Handle password encryption\n\t\tuser.Salt = helper.RandomString(6)\n\t\tvar err error\n\t\tuser.Password, err = helper.PasswordHash(user.Password, user.Salt)\n\t\tif err != nil {\n\t\t\tresult.Failed = append(result.Failed, BatchAddUserResult{\n\t\t\t\tUsername: username,\n\t\t\t\tMessage:  err.Error(),\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\t// Create user\n\t\tif err := tx.Create(&user).Error; err != nil {\n\t\t\tresult.Failed = append(result.Failed, BatchAddUserResult{\n\t\t\t\tUsername: username,\n\t\t\t\tMessage:  err.Error(),\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tuser.Status = model.UserStatusNotJoined\n\t\tif err := tx.Model(&model.User{}).\n\t\t\tWhere(\"user_id = ?\", user.UserID).\n\t\t\tUpdate(\"status\", model.UserStatusNotJoined).Error; err != nil {\n\t\t\tresult.Failed = append(result.Failed, BatchAddUserResult{\n\t\t\t\tUsername: username,\n\t\t\t\tMessage:  err.Error(),\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\t// Create member binding\n\t\tif err := s.createMemberBinding(tx, &user, eid); err != nil {\n\t\t\tresult.Failed = append(result.Failed, BatchAddUserResult{\n\t\t\t\tUsername: username,\n\t\t\t\tUserID:   user.UserID,\n\t\t\t\tMessage:  \"User created successfully but member binding failed: \" + err.Error(),\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\t// Associate with departments\n\t\tif len(userInfo.Dids) > 0 {\n\t\t\tfor _, did := range userInfo.Dids {\n\t\t\t\tif did > 0 {\n\t\t\t\t\tif err := s.associateWithDepartment(tx, user.UserID, eid, did); err != nil {\n\t\t\t\t\t\tresult.Failed = append(result.Failed, BatchAddUserResult{\n\t\t\t\t\t\t\tUsername: username,\n\t\t\t\t\t\t\tUserID:   user.UserID,\n\t\t\t\t\t\t\tMessage:  \"User created successfully but failed to associate with department: \" + err.Error(),\n\t\t\t\t\t\t})\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tresult.Success = append(result.Success, BatchAddUserResult{\n\t\t\tUsername: username,\n\t\t\tUserID:   user.UserID,\n\t\t})\n\t}\n\n\t// Handle transaction commit or rollback\n\tif len(result.Failed) > 0 && len(result.Success) == 0 {\n\t\ttx.Rollback()\n\t\treturn result, nil\n\t}\n\n\tif err := tx.Commit().Error; err != nil {\n\t\ttx.Rollback()\n\t\treturn nil, err\n\t}\n\n\treturn result, nil\n}\n\n// check if user already exists\nfunc (s *UserService) checkExistingUser(tx *gorm.DB, user *model.User, eid int64, result *BatchAddInternalUserResult) error {\n\tvar existingUser model.User\n\tif user.Mobile != \"\" {\n\t\tif tx.Where(\"eid = ? AND mobile = ?\", eid, user.Mobile).First(&existingUser).Error == nil {\n\t\t\tresult.Failed = append(result.Failed, BatchAddUserResult{\n\t\t\t\tUserID:       existingUser.UserID,\n\t\t\t\tUsername:     existingUser.Username,\n\t\t\t\tMessage:      user.Mobile,\n\t\t\t\tExistingType: existingUser.Type,\n\t\t\t\tUsernameType: 1,\n\t\t\t})\n\t\t\treturn fmt.Errorf(\"user with mobile %s already exists\", user.Mobile)\n\t\t}\n\t}\n\n\tif user.Email != \"\" {\n\t\tif tx.Where(\"eid = ? AND email = ?\", eid, user.Email).First(&existingUser).Error == nil {\n\t\t\tresult.Failed = append(result.Failed, BatchAddUserResult{\n\t\t\t\tUserID:       existingUser.UserID,\n\t\t\t\tUsername:     existingUser.Username,\n\t\t\t\tMessage:      user.Email,\n\t\t\t\tExistingType: existingUser.Type,\n\t\t\t\tUsernameType: 2,\n\t\t\t})\n\t\t\treturn fmt.Errorf(\"user with email %s already exists\", user.Email)\n\t\t}\n\t}\n\treturn nil\n}\n\n// create member binding\nfunc (s *UserService) createMemberBinding(tx *gorm.DB, user *model.User, eid int64) error {\n\tmemberBinding := model.MemberBinding{\n\t\tMID:       user.UserID,\n\t\tEID:       eid,\n\t\tName:      user.Nickname,\n\t\tBindValue: strconv.FormatInt(user.UserID, 10),\n\t\tStatus:    model.MemberBindingStatusActive,\n\t}\n\treturn tx.Create(&memberBinding).Error\n}\n\n// associate with department\nfunc (s *UserService) associateWithDepartment(tx *gorm.DB, userID int64, eid int64, did int64) error {\n\tdepartmentRelation := model.MemberDepartmentRelation{\n\t\tBID: userID,\n\t\tEID: eid,\n\t\tDID: did,\n\t}\n\treturn tx.Create(&departmentRelation).Error\n}\n\n// UserDepartmentMapping defines the mapping relationship between user and department\ntype UserDepartmentMapping struct {\n\tUserID int64\n\tDIDs   []int64\n}\n\ntype RegisterUserToInternalResult struct {\n\tSuccessCount int      `json:\"success_count\"`\n\tFailedUsers  []string `json:\"failed_users\"`\n\tTotal        int      `json:\"total\"`\n}\n\nfunc (s *UserService) RegisterUserToInternal(eid int64, mappings []UserDepartmentMapping) (*RegisterUserToInternalResult, error) {\n\ttx := model.DB.Begin()\n\tif tx.Error != nil {\n\t\treturn nil, tx.Error\n\t}\n\n\tresult := &RegisterUserToInternalResult{\n\t\tSuccessCount: 0,\n\t\tFailedUsers:  []string{},\n\t\tTotal:        len(mappings),\n\t}\n\n\tfor _, mapping := range mappings {\n\t\tuser, err := model.GetUserByID(mapping.UserID)\n\t\tif err != nil {\n\t\t\tresult.FailedUsers = append(result.FailedUsers, fmt.Sprintf(\"User ID %d not found\", mapping.UserID))\n\t\t\tcontinue\n\t\t}\n\n\t\tif user.Eid != eid {\n\t\t\tresult.FailedUsers = append(result.FailedUsers, fmt.Sprintf(\"User ID %d does not belong to this enterprise\", mapping.UserID))\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := tx.Model(&model.User{}).Where(\"user_id = ?\", mapping.UserID).Update(\"type\", model.UserTypeInternal).Error; err != nil {\n\t\t\tresult.FailedUsers = append(result.FailedUsers, fmt.Sprintf(\"Failed to update user type for user ID %d\", mapping.UserID))\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, did := range mapping.DIDs {\n\t\t\tif did > 0 {\n\t\t\t\trelation := model.MemberDepartmentRelation{\n\t\t\t\t\tBID: mapping.UserID,\n\t\t\t\t\tDID: did,\n\t\t\t\t\tEID: eid,\n\t\t\t\t}\n\n\t\t\t\tvar count int64\n\t\t\t\ttx.Model(&model.MemberDepartmentRelation{}).\n\t\t\t\t\tWhere(\"bid = ? AND did = ? AND eid = ?\", mapping.UserID, did, eid).\n\t\t\t\t\tCount(&count)\n\n\t\t\t\tif count == 0 {\n\t\t\t\t\tif err := tx.Create(&relation).Error; err != nil {\n\t\t\t\t\t\tresult.FailedUsers = append(result.FailedUsers, fmt.Sprintf(\"Failed to create department relation for user ID %d and department ID %d\", mapping.UserID, did))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tresult.SuccessCount++\n\t}\n\n\tif result.SuccessCount == 0 {\n\t\ttx.Rollback()\n\t} else {\n\t\tif err := tx.Commit().Error; err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn result, nil\n}\n\n// GetInternalUsersWithPagination get internal user list, supports pagination, status filtering and keyword search\nfunc (s *UserService) GetInternalUsersWithPagination(\n\teid int64, keyword string, status,\n\toffset, limit int, did int64, from int, notBind int) (int64, []*model.User, error) {\n\t// Build base query condition\n\tquery := model.DB.Model(&model.User{}).Where(\"users.eid = ? AND users.type = ?\", eid, model.UserTypeInternal)\n\n\t// Filter by status\n\tif status != -1 {\n\t\tquery = query.Where(\"users.status = ?\", status)\n\t}\n\n\t// Keyword search (user nickname, mobile, email)\n\tif keyword != \"\" {\n\t\t// Only query fields in user table, do not join tables\n\t\tquery = query.Where(\n\t\t\t\"users.nickname LIKE ? OR users.mobile LIKE ? OR users.email LIKE ?\",\n\t\t\t\"%\"+keyword+\"%\",\n\t\t\t\"%\"+keyword+\"%\",\n\t\t\t\"%\"+keyword+\"%\",\n\t\t)\n\t}\n\n\tif did > 0 || notBind > 0 {\n\t\tquery = query.Joins(\"Left JOIN member_bindings ON member_bindings.mid = users.user_id and member_bindings.eid = users.eid AND member_bindings.`from` =?\", from)\n\t}\n\n\tif notBind > 0 {\n\t\tquery = query.Where(\"member_bindings.id is null\")\n\t}\n\n\tif did > 0 {\n\t\tquery = query.Joins(\n\t\t\t\"JOIN member_department_relations ON member_department_relations.bid = member_bindings.id and member_department_relations.eid = member_bindings.eid\").\n\t\t\tWhere(\"member_department_relations.did = ? AND member_department_relations.`from` = ?\", did, from)\n\t}\n\n\t// Get total count\n\tvar count int64\n\tif err := query.Count(&count).Error; err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\t// Get paginated data\n\tvar users []*model.User\n\tif err := query.Debug().Offset(offset).Limit(limit).Find(&users).Error; err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\tfor _, user := range users {\n\t\tuser.LoadUserInfo(from)\n\t}\n\n\treturn count, users, nil\n}\n"
  },
  {
    "path": "api/service/version_feature.go",
    "content": "package service\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n)\n\nfunc IsFeatureAvailable(c *gin.Context, featureKey string, params map[string]interface{}) (bool, error) {\n\treturn true, nil\n}\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/anchor/anchor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n        <title></title>\n        <style type=\"text/css\">\n            *{color: #838383;margin: 0;padding: 0}\n            html,body {font-size: 12px;overflow: hidden; }\n            .content{padding:5px 0 0 15px;}\n            input{width:210px;height:21px;line-height:21px;margin-left: 4px;}\n        </style>\n    </head>\n    <body>\n        <div class=\"content\">\n            <span><var id=\"lang_input_anchorName\"></var></span><input id=\"anchorName\"  value=\"\" />\n        </div>\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n        <script type=\"text/javascript\">\n            var anchorInput = $G('anchorName'),\n                node = editor.selection.getRange().getClosedNode();\n            if(node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))){\n                anchorInput.value = node;\n            }\n            anchorInput.onkeydown = function(evt){\n                evt = evt || window.event;\n                if(evt.keyCode == 13){\n                    editor.execCommand('anchor', anchorInput.value);\n                    dialog.close();\n                    domUtils.preventDefault(evt)\n                }\n            };\n            dialog.onok = function (){\n                editor.execCommand('anchor', anchorInput.value);\n                dialog.close();\n            };\n            $focus(anchorInput);\n        </script>\n    </body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/attachment/attachment.css",
    "content": "@charset \"utf-8\";\n/* dialog样式 */\n.wrapper {\n    zoom: 1;\n    width: 630px;\n    *width: 626px;\n    height: 380px;\n    margin: 0 auto;\n    padding: 10px;\n    position: relative;\n    font-family: sans-serif;\n}\n\n/*tab样式框大小*/\n.tabhead {\n    float:left;\n}\n.tabbody {\n    width: 100%;\n    height: 346px;\n    position: relative;\n    clear: both;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n\n.tabbody .panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n}\n\n/* 上传附件 */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n    clip: auto;\n}\n\n#upload .queueList {\n    margin: 0;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 172px;\n    padding-top: 150px;\n    text-align: center;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top:0;\n    *top: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 300px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 9px 0 0 9px;\n    *margin: 6px 0 0 6px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n#upload .filelist li p.imgWrap.notimage {\n    margin-top: 0;\n    width: 111px;\n    height: 111px;\n    border: 1px #eeeeee solid;\n}\n#upload .filelist li p.imgWrap.notimage i.file-preview {\n    margin-top: 15px;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display:none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background-image: url(./images/success.gif) \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n#upload .filelist li.filePickerBlock div.webuploader-pick  {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display:none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display:none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused{\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover{\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter:alpha(opacity=60);\n    -moz-opacity:0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n\n/* 图片管理样式 */\n#online {\n    width: 100%;\n    height: 336px;\n    padding: 10px 0 0 0;\n}\n#online #fileList{\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n}\n#online ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n#online li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 0 0 9px 9px;\n    *margin: 0 0 6px 6px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n#online li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width:0;\n    height:0;\n    margin: 0;\n    padding: 0;\n}\n#online li img {\n    cursor: pointer;\n}\n#online li div.file-wrapper {\n    cursor: pointer;\n    position: absolute;\n    display: block;\n    width: 111px;\n    height: 111px;\n    border: 1px solid #eee;\n    background: url(\"./images/bg.png\") repeat;\n}\n#online li div span.file-title{\n    display: block;\n    padding: 0 3px;\n    margin: 3px 0 0 0;\n    font-size: 12px;\n    height: 15px;\n    color: #555555;\n    text-align: center;\n    width: 107px;\n    white-space: nowrap;\n    word-break: break-all;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n#online li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n#online li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n#online li.selected .icon {\n    background-image: url(images/success.png);\n    background-image: url(images/success.gif) \\9;\n    background-position: 75px 75px;\n}\n#online li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}\n\n\n/* 在线文件的文件预览图标 */\ni.file-preview {\n    display: block;\n    margin: 10px auto;\n    width: 70px;\n    height: 70px;\n    background-image: url(\"./images/file-icons.png\");\n    background-image: url(\"./images/file-icons.gif\") \\9;\n    background-position: -140px center;\n    background-repeat: no-repeat;\n}\ni.file-preview.file-type-dir{\n    background-position: 0 center;\n}\ni.file-preview.file-type-file{\n    background-position: -140px center;\n}\ni.file-preview.file-type-filelist{\n    background-position: -210px center;\n}\ni.file-preview.file-type-zip,\ni.file-preview.file-type-rar,\ni.file-preview.file-type-7z,\ni.file-preview.file-type-tar,\ni.file-preview.file-type-gz,\ni.file-preview.file-type-bz2{\n    background-position: -280px center;\n}\ni.file-preview.file-type-xls,\ni.file-preview.file-type-xlsx{\n    background-position: -350px center;\n}\ni.file-preview.file-type-doc,\ni.file-preview.file-type-docx{\n    background-position: -420px center;\n}\ni.file-preview.file-type-ppt,\ni.file-preview.file-type-pptx{\n    background-position: -490px center;\n}\ni.file-preview.file-type-vsd{\n    background-position: -560px center;\n}\ni.file-preview.file-type-pdf{\n    background-position: -630px center;\n}\ni.file-preview.file-type-txt,\ni.file-preview.file-type-md,\ni.file-preview.file-type-json,\ni.file-preview.file-type-htm,\ni.file-preview.file-type-xml,\ni.file-preview.file-type-html,\ni.file-preview.file-type-js,\ni.file-preview.file-type-css,\ni.file-preview.file-type-php,\ni.file-preview.file-type-jsp,\ni.file-preview.file-type-asp{\n    background-position: -700px center;\n}\ni.file-preview.file-type-apk{\n    background-position: -770px center;\n}\ni.file-preview.file-type-exe{\n    background-position: -840px center;\n}\ni.file-preview.file-type-ipa{\n    background-position: -910px center;\n}\ni.file-preview.file-type-mp4,\ni.file-preview.file-type-swf,\ni.file-preview.file-type-mkv,\ni.file-preview.file-type-avi,\ni.file-preview.file-type-flv,\ni.file-preview.file-type-mov,\ni.file-preview.file-type-mpg,\ni.file-preview.file-type-mpeg,\ni.file-preview.file-type-ogv,\ni.file-preview.file-type-webm,\ni.file-preview.file-type-rm,\ni.file-preview.file-type-rmvb{\n    background-position: -980px center;\n}\ni.file-preview.file-type-ogg,\ni.file-preview.file-type-wav,\ni.file-preview.file-type-wmv,\ni.file-preview.file-type-mid,\ni.file-preview.file-type-mp3{\n    background-position: -1050px center;\n}\ni.file-preview.file-type-jpg,\ni.file-preview.file-type-jpeg,\ni.file-preview.file-type-gif,\ni.file-preview.file-type-bmp,\ni.file-preview.file-type-png,\ni.file-preview.file-type-psd{\n    background-position: -140px center;\n}\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/attachment/attachment.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.min.js\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css\">\n\n    <!-- attachment dialog -->\n    <link rel=\"stylesheet\" href=\"attachment.css\" type=\"text/css\" />\n</head>\n<body>\n\n    <div class=\"wrapper\">\n        <div id=\"tabhead\" class=\"tabhead\">\n            <span class=\"tab focus\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n            <span class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n        </div>\n        <div id=\"tabbody\" class=\"tabbody\">\n            <!-- 上传图片 -->\n            <div id=\"upload\" class=\"panel focus\">\n                <div id=\"queueList\" class=\"queueList\">\n                    <div class=\"statusBar element-invisible\">\n                        <div class=\"progress\">\n                            <span class=\"text\">0%</span>\n                            <span class=\"percentage\"></span>\n                        </div><div class=\"info\"></div>\n                        <div class=\"btns\">\n                            <div id=\"filePickerBtn\"></div>\n                            <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                        </div>\n                    </div>\n                    <div id=\"dndArea\" class=\"placeholder\">\n                        <div class=\"filePickerContainer\">\n                            <div id=\"filePickerReady\"></div>\n                        </div>\n                    </div>\n                    <ul class=\"filelist element-invisible\">\n                        <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                    </ul>\n                </div>\n            </div>\n\n            <!-- 在线图片 -->\n            <div id=\"online\" class=\"panel\">\n                <div id=\"fileList\"><var id=\"lang_imgLoading\"></var></div>\n            </div>\n\n        </div>\n    </div>\n    <script type=\"text/javascript\" src=\"attachment.js\"></script>\n\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/attachment/attachment.js",
    "content": "/**\n * User: Jinqn\n * Date: 14-04-08\n * Time: 下午16:34\n * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片\n */\n\n;(function () {\n  var uploadFile, onlineFile\n\n  window.onload = function () {\n    initTabs()\n    initButtons()\n  }\n\n  /* 初始化tab标签 */\n  function initTabs() {\n    var tabs = $G('tabhead').children\n    for (var i = 0; i < tabs.length; i++) {\n      domUtils.on(tabs[i], 'click', function (e) {\n        var target = e.target || e.srcElement\n        setTabFocus(target.getAttribute('data-content-id'))\n      })\n    }\n\n    setTabFocus('upload')\n  }\n\n  /* 初始化tabbody */\n  function setTabFocus(id) {\n    if (!id) return\n    var i,\n      bodyId,\n      tabs = $G('tabhead').children\n    for (i = 0; i < tabs.length; i++) {\n      bodyId = tabs[i].getAttribute('data-content-id')\n      if (bodyId == id) {\n        domUtils.addClass(tabs[i], 'focus')\n        domUtils.addClass($G(bodyId), 'focus')\n      } else {\n        domUtils.removeClasses(tabs[i], 'focus')\n        domUtils.removeClasses($G(bodyId), 'focus')\n      }\n    }\n    switch (id) {\n      case 'upload':\n        uploadFile = uploadFile || new UploadFile('queueList')\n        break\n      case 'online':\n        onlineFile = onlineFile || new OnlineFile('fileList')\n        break\n    }\n  }\n\n  /* 初始化onok事件 */\n  function initButtons() {\n    dialog.onok = function () {\n      var list = [],\n        id,\n        tabs = $G('tabhead').children\n      for (var i = 0; i < tabs.length; i++) {\n        if (domUtils.hasClass(tabs[i], 'focus')) {\n          id = tabs[i].getAttribute('data-content-id')\n          break\n        }\n      }\n\n      switch (id) {\n        case 'upload':\n          list = uploadFile.getInsertList()\n          var count = uploadFile.getQueueCount()\n          if (count) {\n            $('.info', '#queueList').html(\n              '<span style=\"color:red;\">' +\n                '还有2个未上传文件'.replace(/[\\d]/, count) +\n                '</span>'\n            )\n            return false\n          }\n          break\n        case 'online':\n          list = onlineFile.getInsertList()\n          break\n      }\n\n      editor.execCommand('insertfile', list)\n    }\n  }\n\n  /* 上传附件 */\n  function UploadFile(target) {\n    this.$wrap = target.constructor == String ? $('#' + target) : $(target)\n    this.init()\n  }\n  UploadFile.prototype = {\n    init: function () {\n      this.fileList = []\n      this.initContainer()\n      this.initUploader()\n    },\n    initContainer: function () {\n      this.$queue = this.$wrap.find('.filelist')\n    },\n    /* 初始化容器 */\n    initUploader: function () {\n      var _this = this,\n        $ = jQuery, // just in case. Make sure it's not an other libaray.\n        $wrap = _this.$wrap,\n        // 图片容器\n        $queue = $wrap.find('.filelist'),\n        // 状态栏，包括进度和控制按钮\n        $statusBar = $wrap.find('.statusBar'),\n        // 文件总体选择信息。\n        $info = $statusBar.find('.info'),\n        // 上传按钮\n        $upload = $wrap.find('.uploadBtn'),\n        // 上传按钮\n        $filePickerBtn = $wrap.find('.filePickerBtn'),\n        // 上传按钮\n        $filePickerBlock = $wrap.find('.filePickerBlock'),\n        // 没选择文件之前的内容。\n        $placeHolder = $wrap.find('.placeholder'),\n        // 总体进度条\n        $progress = $statusBar.find('.progress').hide(),\n        // 添加的文件数量\n        fileCount = 0,\n        // 添加的文件总大小\n        fileSize = 0,\n        // 优化retina, 在retina下这个值是2\n        ratio = window.devicePixelRatio || 1,\n        // 缩略图大小\n        thumbnailWidth = 113 * ratio,\n        thumbnailHeight = 113 * ratio,\n        // 可能有pedding, ready, uploading, confirm, done.\n        state = '',\n        // 所有文件的进度信息，key为file id\n        percentages = {},\n        supportTransition = (function () {\n          var s = document.createElement('p').style,\n            r =\n              'transition' in s ||\n              'WebkitTransition' in s ||\n              'MozTransition' in s ||\n              'msTransition' in s ||\n              'OTransition' in s\n          s = null\n          return r\n        })(),\n        // WebUploader实例\n        uploader,\n        actionUrl = editor.getActionUrl(editor.getOpt('fileActionName')),\n        fileMaxSize = editor.getOpt('fileMaxSize'),\n        acceptExtensions = (editor.getOpt('fileAllowFiles') || [])\n          .join('')\n          .replace(/\\./g, ',')\n          .replace(/^[,]/, '')\n\n      if (!WebUploader.Uploader.support()) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorNotSupport))\n          .hide()\n        return\n      } else if (!editor.getOpt('fileActionName')) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorLoadConfig))\n          .hide()\n        return\n      }\n\n      uploader = _this.uploader = WebUploader.create({\n        pick: {\n          id: '#filePickerReady',\n          label: lang.uploadSelectFile,\n        },\n        swf: '../../third-party/webuploader/Uploader.swf',\n        server: actionUrl,\n        fileVal: editor.getOpt('fileFieldName'),\n        duplicate: true,\n        fileSingleSizeLimit: fileMaxSize,\n        compress: false,\n      })\n      uploader.addButton({\n        id: '#filePickerBlock',\n      })\n      uploader.addButton({\n        id: '#filePickerBtn',\n        label: lang.uploadAddFile,\n      })\n\n      setState('pedding')\n\n      // 当有文件添加进来时执行，负责view的创建\n      function addFile(file) {\n        var $li = $(\n            '<li id=\"' +\n              file.id +\n              '\">' +\n              '<p class=\"title\">' +\n              file.name +\n              '</p>' +\n              '<p class=\"imgWrap\"></p>' +\n              '<p class=\"progress\"><span></span></p>' +\n              '</li>'\n          ),\n          $btns = $(\n            '<div class=\"file-panel\">' +\n              '<span class=\"cancel\">' +\n              lang.uploadDelete +\n              '</span>' +\n              '<span class=\"rotateRight\">' +\n              lang.uploadTurnRight +\n              '</span>' +\n              '<span class=\"rotateLeft\">' +\n              lang.uploadTurnLeft +\n              '</span></div>'\n          ).appendTo($li),\n          $prgress = $li.find('p.progress span'),\n          $wrap = $li.find('p.imgWrap'),\n          $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n          showError = function (code) {\n            switch (code) {\n              case 'exceed_size':\n                text = lang.errorExceedSize\n                break\n              case 'interrupt':\n                text = lang.errorInterrupt\n                break\n              case 'http':\n                text = lang.errorHttp\n                break\n              case 'not_allow_type':\n                text = lang.errorFileType\n                break\n              default:\n                text = lang.errorUploadRetry\n                break\n            }\n            $info.text(text).show()\n          }\n\n        if (file.getStatus() === 'invalid') {\n          showError(file.statusText)\n        } else {\n          $wrap.text(lang.uploadPreview)\n          if (\n            '|png|jpg|jpeg|bmp|gif|'.indexOf(\n              '|' + file.ext.toLowerCase() + '|'\n            ) == -1\n          ) {\n            $wrap\n              .empty()\n              .addClass('notimage')\n              .append(\n                '<i class=\"file-preview file-type-' +\n                  file.ext.toLowerCase() +\n                  '\"></i>' +\n                  '<span class=\"file-title\" title=\"' +\n                  file.name +\n                  '\">' +\n                  file.name +\n                  '</span>'\n              )\n          } else {\n            if (browser.ie && browser.version <= 7) {\n              $wrap.text(lang.uploadNoPreview)\n            } else {\n              uploader.makeThumb(\n                file,\n                function (error, src) {\n                  if (error || !src) {\n                    $wrap.text(lang.uploadNoPreview)\n                  } else {\n                    var $img = $('<img src=\"' + src + '\">')\n                    $wrap.empty().append($img)\n                    $img.on('error', function () {\n                      $wrap.text(lang.uploadNoPreview)\n                    })\n                  }\n                },\n                thumbnailWidth,\n                thumbnailHeight\n              )\n            }\n          }\n          percentages[file.id] = [file.size, 0]\n          file.rotation = 0\n\n          /* 检查文件格式 */\n          if (\n            !file.ext ||\n            acceptExtensions.indexOf(file.ext.toLowerCase()) == -1\n          ) {\n            showError('not_allow_type')\n            uploader.removeFile(file)\n          }\n        }\n\n        file.on('statuschange', function (cur, prev) {\n          if (prev === 'progress') {\n            $prgress.hide().width(0)\n          } else if (prev === 'queued') {\n            $li.off('mouseenter mouseleave')\n            $btns.remove()\n          }\n          // 成功\n          if (cur === 'error' || cur === 'invalid') {\n            showError(file.statusText)\n            percentages[file.id][1] = 1\n          } else if (cur === 'interrupt') {\n            showError('interrupt')\n          } else if (cur === 'queued') {\n            percentages[file.id][1] = 0\n          } else if (cur === 'progress') {\n            $info.hide()\n            $prgress.css('display', 'block')\n          } else if (cur === 'complete') {\n          }\n\n          $li.removeClass('state-' + prev).addClass('state-' + cur)\n        })\n\n        $li.on('mouseenter', function () {\n          $btns.stop().animate({ height: 30 })\n        })\n        $li.on('mouseleave', function () {\n          $btns.stop().animate({ height: 0 })\n        })\n\n        $btns.on('click', 'span', function () {\n          var index = $(this).index(),\n            deg\n\n          switch (index) {\n            case 0:\n              uploader.removeFile(file)\n              return\n            case 1:\n              file.rotation += 90\n              break\n            case 2:\n              file.rotation -= 90\n              break\n          }\n\n          if (supportTransition) {\n            deg = 'rotate(' + file.rotation + 'deg)'\n            $wrap.css({\n              '-webkit-transform': deg,\n              '-mos-transform': deg,\n              '-o-transform': deg,\n              transform: deg,\n            })\n          } else {\n            $wrap.css(\n              'filter',\n              'progid:DXImageTransform.Microsoft.BasicImage(rotation=' +\n                (~~(((file.rotation / 90) % 4) + 4) % 4) +\n                ')'\n            )\n          }\n        })\n\n        $li.insertBefore($filePickerBlock)\n      }\n\n      // 负责view的销毁\n      function removeFile(file) {\n        var $li = $('#' + file.id)\n        delete percentages[file.id]\n        updateTotalProgress()\n        $li.off().find('.file-panel').off().end().remove()\n      }\n\n      function updateTotalProgress() {\n        var loaded = 0,\n          total = 0,\n          spans = $progress.children(),\n          percent\n\n        $.each(percentages, function (k, v) {\n          total += v[0]\n          loaded += v[0] * v[1]\n        })\n\n        percent = total ? loaded / total : 0\n\n        spans.eq(0).text(Math.round(percent * 100) + '%')\n        spans.eq(1).css('width', Math.round(percent * 100) + '%')\n        updateStatus()\n      }\n\n      function setState(val, files) {\n        if (val != state) {\n          var stats = uploader.getStats()\n\n          $upload.removeClass('state-' + state)\n          $upload.addClass('state-' + val)\n\n          switch (val) {\n            /* 未选择文件 */\n            case 'pedding':\n              $queue.addClass('element-invisible')\n              $statusBar.addClass('element-invisible')\n              $placeHolder.removeClass('element-invisible')\n              $progress.hide()\n              $info.hide()\n              uploader.refresh()\n              break\n\n            /* 可以开始上传 */\n            case 'ready':\n              $placeHolder.addClass('element-invisible')\n              $queue.removeClass('element-invisible')\n              $statusBar.removeClass('element-invisible')\n              $progress.hide()\n              $info.show()\n              $upload.text(lang.uploadStart)\n              uploader.refresh()\n              break\n\n            /* 上传中 */\n            case 'uploading':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadPause)\n              break\n\n            /* 暂停上传 */\n            case 'paused':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadContinue)\n              break\n\n            case 'confirm':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadStart)\n\n              stats = uploader.getStats()\n              if (stats.successNum && !stats.uploadFailNum) {\n                setState('finish')\n                return\n              }\n              break\n\n            case 'finish':\n              $progress.hide()\n              $info.show()\n              if (stats.uploadFailNum) {\n                $upload.text(lang.uploadRetry)\n              } else {\n                $upload.text(lang.uploadStart)\n              }\n              break\n          }\n\n          state = val\n          updateStatus()\n        }\n\n        if (!_this.getQueueCount()) {\n          $upload.addClass('disabled')\n        } else {\n          $upload.removeClass('disabled')\n        }\n      }\n\n      function updateStatus() {\n        var text = '',\n          stats\n\n        if (state === 'ready') {\n          text = lang.updateStatusReady\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n        } else if (state === 'confirm') {\n          stats = uploader.getStats()\n          if (stats.uploadFailNum) {\n            text = lang.updateStatusConfirm\n              .replace('_', stats.successNum)\n              .replace('_', stats.successNum)\n          }\n        } else {\n          stats = uploader.getStats()\n          text = lang.updateStatusFinish\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n            .replace('_', stats.successNum)\n\n          if (stats.uploadFailNum) {\n            text += lang.updateStatusError.replace('_', stats.uploadFailNum)\n          }\n        }\n\n        $info.html(text)\n      }\n\n      uploader.on('fileQueued', function (file) {\n        if (\n          file.ext &&\n          acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 &&\n          file.size <= fileMaxSize\n        ) {\n          fileCount++\n          fileSize += file.size\n        }\n\n        if (fileCount === 1) {\n          $placeHolder.addClass('element-invisible')\n          $statusBar.show()\n        }\n\n        addFile(file)\n      })\n\n      uploader.on('fileDequeued', function (file) {\n        if (\n          file.ext &&\n          acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 &&\n          file.size <= fileMaxSize &&\n          fileCount > 0\n        ) {\n          fileCount--\n          fileSize -= file.size\n        }\n\n        removeFile(file)\n        updateTotalProgress()\n      })\n\n      uploader.on('filesQueued', function (file) {\n        if (\n          !uploader.isInProgress() &&\n          (state == 'pedding' ||\n            state == 'finish' ||\n            state == 'confirm' ||\n            state == 'ready')\n        ) {\n          setState('ready')\n        }\n        updateTotalProgress()\n      })\n\n      uploader.on('all', function (type, files) {\n        switch (type) {\n          case 'uploadFinished':\n            setState('confirm', files)\n            break\n          case 'startUpload':\n            /* 添加额外的GET参数 */\n            var params =\n                utils.serializeParam(editor.queryCommandValue('serverparam')) ||\n                '',\n              url = utils.formatUrl(\n                actionUrl +\n                  (actionUrl.indexOf('?') == -1 ? '?' : '&') +\n                  'encode=utf-8&' +\n                  params\n              )\n            uploader.option('server', url)\n            setState('uploading', files)\n            break\n          case 'stopUpload':\n            setState('paused', files)\n            break\n        }\n      })\n\n      uploader.on('uploadBeforeSend', function (file, data, header) {\n        //这里可以通过data对象添加POST参数\n        if (actionUrl.toLowerCase().indexOf('jsp') != -1) {\n          header['X_Requested_With'] = 'XMLHttpRequest'\n        }\n      })\n\n      uploader.on('uploadProgress', function (file, percentage) {\n        var $li = $('#' + file.id),\n          $percent = $li.find('.progress span')\n\n        $percent.css('width', percentage * 100 + '%')\n        percentages[file.id][1] = percentage\n        updateTotalProgress()\n      })\n\n      uploader.on('uploadSuccess', function (file, ret) {\n        var $file = $('#' + file.id)\n        try {\n          var responseText = ret._raw || ret,\n            json = utils.str2json(responseText)\n          if (json.state == 'SUCCESS') {\n            _this.fileList.push(json)\n            $file.append('<span class=\"success\"></span>')\n          } else {\n            $file.find('.error').text(json.state).show()\n          }\n        } catch (e) {\n          $file.find('.error').text(lang.errorServerUpload).show()\n        }\n      })\n\n      uploader.on('uploadError', function (file, code) {})\n      uploader.on('error', function (code, file) {\n        if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {\n          addFile(file)\n        }\n      })\n      uploader.on('uploadComplete', function (file, ret) {})\n\n      $upload.on('click', function () {\n        if ($(this).hasClass('disabled')) {\n          return false\n        }\n\n        if (state === 'ready') {\n          uploader.upload()\n        } else if (state === 'paused') {\n          uploader.upload()\n        } else if (state === 'uploading') {\n          uploader.stop()\n        }\n      })\n\n      $upload.addClass('state-' + state)\n      updateTotalProgress()\n    },\n    getQueueCount: function () {\n      var file,\n        i,\n        status,\n        readyFile = 0,\n        files = this.uploader.getFiles()\n      for (i = 0; (file = files[i++]); ) {\n        status = file.getStatus()\n        if (status == 'queued' || status == 'uploading' || status == 'progress')\n          readyFile++\n      }\n      return readyFile\n    },\n    getInsertList: function () {\n      var i,\n        link,\n        data,\n        list = [],\n        prefix = editor.getOpt('fileUrlPrefix')\n      for (i = 0; i < this.fileList.length; i++) {\n        data = this.fileList[i]\n        link = data.url\n        list.push({\n          title: data.original || link.substr(link.lastIndexOf('/') + 1),\n          url: prefix + link,\n        })\n      }\n      return list\n    },\n  }\n\n  /* 在线附件 */\n  function OnlineFile(target) {\n    this.container = utils.isString(target)\n      ? document.getElementById(target)\n      : target\n    this.init()\n  }\n  OnlineFile.prototype = {\n    init: function () {\n      this.initContainer()\n      this.initEvents()\n      this.initData()\n    },\n    /* 初始化容器 */\n    initContainer: function () {\n      this.container.innerHTML = ''\n      this.list = document.createElement('ul')\n      this.clearFloat = document.createElement('li')\n\n      domUtils.addClass(this.list, 'list')\n      domUtils.addClass(this.clearFloat, 'clearFloat')\n\n      this.list.appendChild(this.clearFloat)\n      this.container.appendChild(this.list)\n    },\n    /* 初始化滚动事件,滚动到地步自动拉取数据 */\n    initEvents: function () {\n      var _this = this\n\n      /* 滚动拉取图片 */\n      domUtils.on($G('fileList'), 'scroll', function (e) {\n        var panel = this\n        if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n          _this.getFileData()\n        }\n      })\n      /* 选中图片 */\n      domUtils.on(this.list, 'click', function (e) {\n        var target = e.target || e.srcElement,\n          li = target.parentNode\n\n        if (li.tagName.toLowerCase() == 'li') {\n          if (domUtils.hasClass(li, 'selected')) {\n            domUtils.removeClasses(li, 'selected')\n          } else {\n            domUtils.addClass(li, 'selected')\n          }\n        }\n      })\n    },\n    /* 初始化第一次的数据 */\n    initData: function () {\n      /* 拉取数据需要使用的值 */\n      this.state = 0\n      this.listSize = editor.getOpt('fileManagerListSize')\n      this.listIndex = 0\n      this.listEnd = false\n\n      /* 第一次拉取数据 */\n      this.getFileData()\n    },\n    /* 向后台拉取图片列表数据 */\n    getFileData: function () {\n      var _this = this\n\n      if (!_this.listEnd && !this.isLoadingData) {\n        this.isLoadingData = true\n        ajax.request(\n          editor.getActionUrl(editor.getOpt('fileManagerActionName')),\n          {\n            timeout: 100000,\n            data: utils.extend(\n              {\n                start: this.listIndex,\n                size: this.listSize,\n              },\n              editor.queryCommandValue('serverparam')\n            ),\n            method: 'get',\n            onsuccess: function (r) {\n              try {\n                var json = eval('(' + r.responseText + ')')\n                if (json.state == 'SUCCESS') {\n                  _this.pushData(json.list)\n                  _this.listIndex =\n                    parseInt(json.start) + parseInt(json.list.length)\n                  if (_this.listIndex >= json.total) {\n                    _this.listEnd = true\n                  }\n                  _this.isLoadingData = false\n                }\n              } catch (e) {\n                if (r.responseText.indexOf('ue_separate_ue') != -1) {\n                  var list = r.responseText.split(r.responseText)\n                  _this.pushData(list)\n                  _this.listIndex = parseInt(list.length)\n                  _this.listEnd = true\n                  _this.isLoadingData = false\n                }\n              }\n            },\n            onerror: function () {\n              _this.isLoadingData = false\n            },\n          }\n        )\n      }\n    },\n    /* 添加图片到列表界面上 */\n    pushData: function (list) {\n      var i,\n        item,\n        img,\n        filetype,\n        preview,\n        icon,\n        _this = this,\n        urlPrefix = editor.getOpt('fileManagerUrlPrefix')\n      for (i = 0; i < list.length; i++) {\n        if (list[i] && list[i].url) {\n          item = document.createElement('li')\n          icon = document.createElement('span')\n          filetype = list[i].url.substr(list[i].url.lastIndexOf('.') + 1)\n\n          if ('png|jpg|jpeg|gif|bmp'.indexOf(filetype) != -1) {\n            preview = document.createElement('img')\n            domUtils.on(\n              preview,\n              'load',\n              (function (image) {\n                return function () {\n                  _this.scale(\n                    image,\n                    image.parentNode.offsetWidth,\n                    image.parentNode.offsetHeight\n                  )\n                }\n              })(preview)\n            )\n            preview.width = 113\n            preview.setAttribute(\n              'src',\n              urlPrefix +\n                list[i].url +\n                (list[i].url.indexOf('?') == -1 ? '?noCache=' : '&noCache=') +\n                (+new Date()).toString(36)\n            )\n          } else {\n            var ic = document.createElement('i'),\n              textSpan = document.createElement('span')\n            textSpan.innerHTML = list[i].url.substr(\n              list[i].url.lastIndexOf('/') + 1\n            )\n            preview = document.createElement('div')\n            preview.appendChild(ic)\n            preview.appendChild(textSpan)\n            domUtils.addClass(preview, 'file-wrapper')\n            domUtils.addClass(textSpan, 'file-title')\n            domUtils.addClass(ic, 'file-type-' + filetype)\n            domUtils.addClass(ic, 'file-preview')\n          }\n          domUtils.addClass(icon, 'icon')\n          item.setAttribute('data-url', urlPrefix + list[i].url)\n          if (list[i].original) {\n            item.setAttribute('data-title', list[i].original)\n          }\n\n          item.appendChild(preview)\n          item.appendChild(icon)\n          this.list.insertBefore(item, this.clearFloat)\n        }\n      }\n    },\n    /* 改变图片大小 */\n    scale: function (img, w, h, type) {\n      var ow = img.width,\n        oh = img.height\n\n      if (type == 'justify') {\n        if (ow >= oh) {\n          img.width = w\n          img.height = (h * oh) / ow\n          img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'\n        } else {\n          img.width = (w * ow) / oh\n          img.height = h\n          img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'\n        }\n      } else {\n        if (ow >= oh) {\n          img.width = (w * ow) / oh\n          img.height = h\n          img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'\n        } else {\n          img.width = w\n          img.height = (h * oh) / ow\n          img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'\n        }\n      }\n    },\n    getInsertList: function () {\n      var i,\n        lis = this.list.children,\n        list = []\n      for (i = 0; i < lis.length; i++) {\n        if (domUtils.hasClass(lis[i], 'selected')) {\n          var url = lis[i].getAttribute('data-url')\n          var title =\n            lis[i].getAttribute('data-title') ||\n            url.substr(url.lastIndexOf('/') + 1)\n          list.push({\n            title: title,\n            url: url,\n          })\n        }\n      }\n      return list\n    },\n  }\n})()\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/background/background.css",
    "content": ".wrapper{ width: 424px;margin: 10px auto; zoom:1;position: relative}\n.tabbody{height:225px;}\n.tabbody .panel { position: absolute;width:100%; height:100%;background: #fff; display: none;}\n.tabbody .focus { display: block;}\n\nbody{font-size: 12px;color: #888;overflow: hidden;}\ninput,label{vertical-align:middle}\n.clear{clear: both;}\n.pl{padding-left: 18px;padding-left: 23px\\9;}\n\n#imageList {width: 420px;height: 215px;margin-top: 10px;overflow: hidden;overflow-y: auto;}\n#imageList div {float: left;width: 100px;height: 95px;margin: 5px 10px;}\n#imageList img {cursor: pointer;border: 2px solid white;}\n\n.bgarea{margin: 10px;padding: 5px;height: 84%;border: 1px solid #A8A297;}\n.content div{margin: 10px 0 10px 5px;}\n.content .iptradio{margin: 0px 5px 5px 0px;}\n.txt{width:280px;}\n\n.wrapcolor{height: 19px;}\ndiv.color{float: left;margin: 0;}\n#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;margin: 0;float: left;}\ndiv.alignment,#custom{margin-left: 23px;margin-left: 28px\\9;}\n#custom input{height: 15px;min-height: 15px;width:20px;}\n#repeatType{width:100px;}\n\n\n/* 图片管理样式 */\n#imgManager {\n    width: 100%;\n    height: 225px;\n}\n#imgManager #imageList{\n    width: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n}\n#imgManager ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n#imgManager li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 9px 0 0 19px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n#imgManager li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width:0;\n    height:0;\n    margin: 0;\n    padding: 0;\n}\n#imgManager li img {\n    cursor: pointer;\n}\n#imgManager li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n#imgManager li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n#imgManager li.selected .icon {\n    background-image: url(images/success.png);\n    background-position: 75px 75px;\n}\n#imgManager li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/background/background.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"background.css\">\n</head>\n<body>\n    <div id=\"bg_container\" class=\"wrapper\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span class=\"focus\" data-content-id=\"normal\"><var id=\"lang_background_normal\"></var></span>\n            <span class=\"\" data-content-id=\"imgManager\"><var id=\"lang_background_local\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"normal\" class=\"panel focus\">\n                <fieldset class=\"bgarea\">\n                    <legend><var id=\"lang_background_set\"></var></legend>\n                    <div class=\"content\">\n                        <div>\n                            <label><input id=\"nocolorRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"none\" checked=\"checked\"><var id=\"lang_background_none\"></var></label>\n                            <label><input id=\"coloredRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"color\"><var id=\"lang_background_colored\"></var></label>\n                        </div>\n                        <div class=\"wrapcolor pl\">\n                            <div class=\"color\">\n                                <var id=\"lang_background_color\"></var>:\n                            </div>\n                            <div id=\"colorPicker\"></div>\n                            <div class=\"clear\"></div>\n                        </div>\n                        <div class=\"wrapcolor pl\">\n                            <label><var id=\"lang_background_netimg\"></var>:</label><input class=\"txt\" type=\"text\" id=\"url\">\n                        </div>\n                        <div id=\"alignment\" class=\"alignment\">\n                            <var id=\"lang_background_align\"></var>:<select id=\"repeatType\">\n                                <option value=\"center\"></option>\n                                <option value=\"repeat-x\"></option>\n                                <option value=\"repeat-y\"></option>\n                                <option value=\"repeat\"></option>\n                                <option value=\"self\"></option>\n                            </select>\n                        </div>\n                        <div id=\"custom\" >\n                            <var id=\"lang_background_position\"></var>:x:<input type=\"text\" size=\"1\" id=\"x\" maxlength=\"4\" value=\"0\">px&nbsp;&nbsp;y:<input type=\"text\" size=\"1\" id=\"y\" maxlength=\"4\" value=\"0\">px\n                        </div>\n                    </div>\n                </fieldset>\n\n            </div>\n            <div id=\"imgManager\" class=\"panel\">\n                <div id=\"imageList\" style=\"\"></div>\n            </div>\n        </div>\n    </div>\n    <script type=\"text/javascript\" src=\"background.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/background/background.js",
    "content": "(function () {\n\n    var onlineImage,\n        backupStyle = editor.queryCommandValue('background');\n\n    window.onload = function () {\n        initTabs();\n        initColorSelector();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs(){\n        var tabs = $G('tabHeads').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var target = e.target || e.srcElement;\n                for (var j = 0; j < tabs.length; j++) {\n                    if(tabs[j] == target){\n                        tabs[j].className = \"focus\";\n                        var contentId = tabs[j].getAttribute('data-content-id');\n                        $G(contentId).style.display = \"block\";\n                        if(contentId == 'imgManager') {\n                            initImagePanel();\n                        }\n                    }else {\n                        tabs[j].className = \"\";\n                        $G(tabs[j].getAttribute('data-content-id')).style.display = \"none\";\n                    }\n                }\n            });\n        }\n    }\n\n    /* 初始化颜色设置 */\n    function initColorSelector () {\n        var obj = editor.queryCommandValue('background');\n        if (obj) {\n            var color = obj['background-color'],\n                repeat = obj['background-repeat'] || 'repeat',\n                image = obj['background-image'] || '',\n                position = obj['background-position'] || 'center center',\n                pos = position.split(' '),\n                x = parseInt(pos[0]) || 0,\n                y = parseInt(pos[1]) || 0;\n\n            if(repeat == 'no-repeat' && (x || y)) repeat = 'self';\n\n            image = image.match(/url[\\s]*\\(([^\\)]*)\\)/);\n            image = image ? image[1]:'';\n            updateFormState('colored', color, image, repeat, x, y);\n        } else {\n            updateFormState();\n        }\n\n        var updateHandler = function () {\n            updateFormState();\n            updateBackground();\n        }\n        domUtils.on($G('nocolorRadio'), 'click', updateBackground);\n        domUtils.on($G('coloredRadio'), 'click', updateHandler);\n        domUtils.on($G('url'), 'keyup', function(){\n            if($G('url').value && $G('alignment').style.display == \"none\") {\n                utils.each($G('repeatType').children, function(item){\n                    item.selected = ('repeat' == item.getAttribute('value') ? 'selected':false);\n                });\n            }\n            updateHandler();\n        });\n        domUtils.on($G('repeatType'), 'change', updateHandler);\n        domUtils.on($G('x'), 'keyup', updateBackground);\n        domUtils.on($G('y'), 'keyup', updateBackground);\n\n        initColorPicker();\n    }\n\n    /* 初始化颜色选择器 */\n    function initColorPicker() {\n        var me = editor,\n            cp = $G(\"colorPicker\");\n\n        /* 生成颜色选择器ui对象 */\n        var popup = new UE.ui.Popup({\n            content: new UE.ui.ColorPicker({\n                noColorText: me.getLang(\"clearColor\"),\n                editor: me,\n                onpickcolor: function (t, color) {\n                    updateFormState('colored', color);\n                    updateBackground();\n                    UE.ui.Popup.postHide();\n                },\n                onpicknocolor: function (t, color) {\n                    updateFormState('colored', 'transparent');\n                    updateBackground();\n                    UE.ui.Popup.postHide();\n                }\n            }),\n            editor: me,\n            onhide: function () {\n            }\n        });\n\n        /* 设置颜色选择器 */\n        domUtils.on(cp, \"click\", function () {\n            popup.showAnchor(this);\n        });\n        domUtils.on(document, 'mousedown', function (evt) {\n            var el = evt.target || evt.srcElement;\n            UE.ui.Popup.postHide(el);\n        });\n        domUtils.on(window, 'scroll', function () {\n            UE.ui.Popup.postHide();\n        });\n    }\n\n    /* 初始化在线图片列表 */\n    function initImagePanel() {\n        onlineImage = onlineImage || new OnlineImage('imageList');\n    }\n\n    /* 更新背景色设置面板 */\n    function updateFormState (radio, color, url, align, x, y) {\n        var nocolorRadio = $G('nocolorRadio'),\n            coloredRadio = $G('coloredRadio');\n\n        if(radio) {\n            nocolorRadio.checked = (radio == 'colored' ? false:'checked');\n            coloredRadio.checked = (radio == 'colored' ? 'checked':false);\n        }\n        if(color) {\n            domUtils.setStyle($G(\"colorPicker\"), \"background-color\", color);\n        }\n\n        if(url && /^\\//.test(url)) {\n            var a = document.createElement('a');\n            a.href = url;\n            browser.ie && (a.href = a.href);\n            url = browser.ie ? a.href:(a.protocol + '//' + a.host + a.pathname + a.search + a.hash);\n        }\n\n        if(url || url === '') {\n            $G('url').value = url;\n        }\n        if(align) {\n            utils.each($G('repeatType').children, function(item){\n                item.selected = (align == item.getAttribute('value') ? 'selected':false);\n            });\n        }\n        if(x || y) {\n            $G('x').value = parseInt(x) || 0;\n            $G('y').value = parseInt(y) || 0;\n        }\n\n        $G('alignment').style.display = coloredRadio.checked && $G('url').value ? '':'none';\n        $G('custom').style.display = coloredRadio.checked && $G('url').value && $G('repeatType').value == 'self' ? '':'none';\n    }\n\n    /* 更新背景颜色 */\n    function updateBackground () {\n        if ($G('coloredRadio').checked) {\n            var color = domUtils.getStyle($G(\"colorPicker\"), \"background-color\"),\n                bgimg = $G(\"url\").value,\n                align = $G(\"repeatType\").value,\n                backgroundObj = {\n                    \"background-repeat\": \"no-repeat\",\n                    \"background-position\": \"center center\"\n                };\n\n            if (color) backgroundObj[\"background-color\"] = color;\n            if (bgimg) backgroundObj[\"background-image\"] = 'url(' + bgimg + ')';\n            if (align == 'self') {\n                backgroundObj[\"background-position\"] = $G(\"x\").value + \"px \" + $G(\"y\").value + \"px\";\n            } else if (align == 'repeat-x' || align == 'repeat-y' || align == 'repeat') {\n                backgroundObj[\"background-repeat\"] = align;\n            }\n\n            editor.execCommand('background', backgroundObj);\n        } else {\n            editor.execCommand('background', null);\n        }\n    }\n\n\n    /* 在线图片 */\n    function OnlineImage(target) {\n        this.container = utils.isString(target) ? document.getElementById(target) : target;\n        this.init();\n    }\n    OnlineImage.prototype = {\n        init: function () {\n            this.reset();\n            this.initEvents();\n        },\n        /* 初始化容器 */\n        initContainer: function () {\n            this.container.innerHTML = '';\n            this.list = document.createElement('ul');\n            this.clearFloat = document.createElement('li');\n\n            domUtils.addClass(this.list, 'list');\n            domUtils.addClass(this.clearFloat, 'clearFloat');\n\n            this.list.id = 'imageListUl';\n            this.list.appendChild(this.clearFloat);\n            this.container.appendChild(this.list);\n        },\n        /* 初始化滚动事件,滚动到地步自动拉取数据 */\n        initEvents: function () {\n            var _this = this;\n\n            /* 滚动拉取图片 */\n            domUtils.on($G('imageList'), 'scroll', function(e){\n                var panel = this;\n                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n                    _this.getImageData();\n                }\n            });\n            /* 选中图片 */\n            domUtils.on(this.container, 'click', function (e) {\n                var target = e.target || e.srcElement,\n                    li = target.parentNode,\n                    nodes = $G('imageListUl').childNodes;\n\n                if (li.tagName.toLowerCase() == 'li') {\n                    updateFormState('nocolor', null, '');\n                    for (var i = 0, node; node = nodes[i++];) {\n                        if (node == li && !domUtils.hasClass(node, 'selected')) {\n                            domUtils.addClass(node, 'selected');\n                            updateFormState('colored', null, li.firstChild.getAttribute(\"_src\"), 'repeat');\n                        } else {\n                            domUtils.removeClasses(node, 'selected');\n                        }\n                    }\n                    updateBackground();\n                }\n            });\n        },\n        /* 初始化第一次的数据 */\n        initData: function () {\n\n            /* 拉取数据需要使用的值 */\n            this.state = 0;\n            this.listSize = editor.getOpt('imageManagerListSize');\n            this.listIndex = 0;\n            this.listEnd = false;\n\n            /* 第一次拉取数据 */\n            this.getImageData();\n        },\n        /* 重置界面 */\n        reset: function() {\n            this.initContainer();\n            this.initData();\n        },\n        /* 向后台拉取图片列表数据 */\n        getImageData: function () {\n            var _this = this;\n\n            if(!_this.listEnd && !this.isLoadingData) {\n                this.isLoadingData = true;\n                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),\n                    isJsonp = utils.isCrossDomainUrl(url);\n                ajax.request(url, {\n                    'timeout': 100000,\n                    'dataType': isJsonp ? 'jsonp':'',\n                    'data': utils.extend({\n                            start: this.listIndex,\n                            size: this.listSize\n                        }, editor.queryCommandValue('serverparam')),\n                    'method': 'get',\n                    'onsuccess': function (r) {\n                        try {\n                            var json = isJsonp ? r:eval('(' + r.responseText + ')');\n                            if (json.state == 'SUCCESS') {\n                                _this.pushData(json.list);\n                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);\n                                if(_this.listIndex >= json.total) {\n                                    _this.listEnd = true;\n                                }\n                                _this.isLoadingData = false;\n                            }\n                        } catch (e) {\n                            if(r.responseText.indexOf('ue_separate_ue') != -1) {\n                                var list = r.responseText.split(r.responseText);\n                                _this.pushData(list);\n                                _this.listIndex = parseInt(list.length);\n                                _this.listEnd = true;\n                                _this.isLoadingData = false;\n                            }\n                        }\n                    },\n                    'onerror': function () {\n                        _this.isLoadingData = false;\n                    }\n                });\n            }\n        },\n        /* 添加图片到列表界面上 */\n        pushData: function (list) {\n            var i, item, img, icon, _this = this,\n                urlPrefix = editor.getOpt('imageManagerUrlPrefix');\n            for (i = 0; i < list.length; i++) {\n                if(list[i] && list[i].url) {\n                    item = document.createElement('li');\n                    img = document.createElement('img');\n                    icon = document.createElement('span');\n\n                    domUtils.on(img, 'load', (function(image){\n                        return function(){\n                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);\n                        }\n                    })(img));\n                    img.width = 113;\n                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );\n                    img.setAttribute('_src', urlPrefix + list[i].url);\n                    domUtils.addClass(icon, 'icon');\n\n                    item.appendChild(img);\n                    item.appendChild(icon);\n                    this.list.insertBefore(item, this.clearFloat);\n                }\n            }\n        },\n        /* 改变图片大小 */\n        scale: function (img, w, h, type) {\n            var ow = img.width,\n                oh = img.height;\n\n            if (type == 'justify') {\n                if (ow >= oh) {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            } else {\n                if (ow >= oh) {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            }\n        },\n        getInsertList: function () {\n            var i, lis = this.list.children, list = [], align = getAlign();\n            for (i = 0; i < lis.length; i++) {\n                if (domUtils.hasClass(lis[i], 'selected')) {\n                    var img = lis[i].firstChild,\n                        src = img.getAttribute('_src');\n                    list.push({\n                        src: src,\n                        _src: src,\n                        floatStyle: align\n                    });\n                }\n\n            }\n            return list;\n        }\n    };\n\n    dialog.onok = function () {\n        updateBackground();\n        editor.fireEvent('saveScene');\n    };\n    dialog.oncancel = function () {\n        editor.execCommand('background', backupStyle);\n    };\n\n})();"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/charts/chart.config.js",
    "content": "/*\n * 图表配置文件\n * */\n\n\n//不同类型的配置\nvar typeConfig = [\n    {\n        chart: {\n            type: 'line'\n        },\n        plotOptions: {\n            line: {\n                dataLabels: {\n                    enabled: false\n                },\n                enableMouseTracking: true\n            }\n        }\n    }, {\n        chart: {\n            type: 'line'\n        },\n        plotOptions: {\n            line: {\n                dataLabels: {\n                    enabled: true\n                },\n                enableMouseTracking: false\n            }\n        }\n    }, {\n        chart: {\n            type: 'area'\n        }\n    }, {\n        chart: {\n            type: 'bar'\n        }\n    }, {\n        chart: {\n            type: 'column'\n        }\n    }, {\n        chart: {\n            plotBackgroundColor: null,\n            plotBorderWidth: null,\n            plotShadow: false\n        },\n        plotOptions: {\n            pie: {\n                allowPointSelect: true,\n                cursor: 'pointer',\n                dataLabels: {\n                    enabled: true,\n                    color: '#000000',\n                    connectorColor: '#000000',\n                    formatter: function() {\n                        return '<b>'+ this.point.name +'</b>: '+ ( Math.round( this.point.percentage*100 ) / 100 ) +' %';\n                    }\n                }\n            }\n        }\n    }\n];\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/charts/charts.css",
    "content": "html, body {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n}\n\n.main {\n    width: 100%;\n    overflow: hidden;\n}\n\n.table-view {\n    height: 100%;\n    float: left;\n    margin: 20px;\n    width: 40%;\n}\n\n.table-view .table-container {\n    width: 100%;\n    margin-bottom: 50px;\n    overflow: scroll;\n}\n\n.table-view th {\n    padding: 5px 10px;\n    background-color: #F7F7F7;\n}\n\n.table-view td {\n    width: 50px;\n    text-align: center;\n    padding:0;\n}\n\n.table-container input {\n    width: 40px;\n    padding: 5px;\n    border: none;\n    outline: none;\n}\n\n.table-view caption {\n    font-size: 18px;\n    text-align: left;\n}\n\n.charts-view {\n    /*margin-left: 49%!important;*/\n    width: 50%;\n    margin-left: 49%;\n    height: 400px;\n}\n\n.charts-container {\n    border-left: 1px solid #c3c3c3;\n}\n\n.charts-format fieldset {\n    padding-left: 20px;\n    margin-bottom: 50px;\n}\n\n.charts-format legend {\n    padding-left: 10px;\n    padding-right: 10px;\n}\n\n.format-item-container {\n    padding: 20px;\n}\n\n.format-item-container label {\n    display: block;\n    margin: 10px 0;\n}\n\n.charts-format .data-item {\n    border: 1px solid black;\n    outline: none;\n    padding: 2px 3px;\n}\n\n/* 图表类型 */\n\n.charts-type {\n    margin-top: 50px;\n    height: 300px;\n}\n\n.scroll-view {\n    border: 1px solid #c3c3c3;\n    border-left: none;\n    border-right: none;\n    overflow: hidden;\n}\n\n.scroll-container {\n    margin: 20px;\n    width: 100%;\n    overflow: hidden;\n}\n\n.scroll-bed {\n    width: 10000px;\n    _margin-top: 20px;\n    -webkit-transition: margin-left .5s ease;\n    -moz-transition: margin-left .5s ease;\n    transition: margin-left .5s ease;\n}\n\n.view-box {\n    display: inline-block;\n    *display: inline;\n    *zoom: 1;\n    margin-right: 20px;\n    border: 2px solid white;\n    line-height: 0;\n    overflow: hidden;\n    cursor: pointer;\n}\n\n.view-box img {\n    border: 1px solid #cecece;\n}\n\n.view-box.selected {\n    border-color: #7274A7;\n}\n\n.button-container {\n    margin-bottom: 20px;\n    text-align: center;\n}\n\n.button-container a {\n    display: inline-block;\n    width: 100px;\n    height: 25px;\n    line-height: 25px;\n    border: 1px solid #c2ccd1;\n    margin-right: 30px;\n    text-decoration: none;\n    color: black;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n    border-radius: 2px;\n}\n\n.button-container a:HOVER {\n    background: #fcfcfc;\n}\n\n.button-container a:ACTIVE {\n    border-top-color: #c2ccd1;\n    box-shadow:inset 0 5px 4px -4px rgba(49, 49, 64, 0.1);\n}\n\n.edui-charts-not-data {\n    height: 100px;\n    line-height: 100px;\n    text-align: center;\n}"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/charts/charts.html",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <title>chart</title>\n        <meta chartset=\"utf-8\">\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"charts.css\">\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    </head>\n    <body>\n        <div class=\"main\">\n            <div class=\"table-view\">\n                <h3><var id=\"lang_data_source\"></var></h3>\n                <div id=\"tableContainer\" class=\"table-container\"></div>\n                <h3><var id=\"lang_chart_format\"></var></h3>\n                <form name=\"data-form\">\n                    <div class=\"charts-format\">\n                        <fieldset>\n                            <legend><var id=\"lang_data_align\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label>\n                                    <input type=\"radio\" class=\"format-ctrl not-pie-item\" name=\"charts-format\" value=\"1\" checked=\"checked\">\n                                    <var id=\"lang_chart_align_same\"></var>\n                                </label>\n                                <label>\n                                    <input type=\"radio\" class=\"format-ctrl not-pie-item\" name=\"charts-format\" value=\"-1\">\n                                    <var id=\"lang_chart_align_reverse\"></var>\n                                </label>\n                                <br>\n                            </div>\n                        </fieldset>\n                        <fieldset>\n                            <legend><var id=\"lang_chart_title\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label>\n                                    <var id=\"lang_chart_main_title\"></var><input type=\"text\" name=\"title\" class=\"data-item\">\n                                </label>\n                                <label>\n                                    <var id=\"lang_chart_sub_title\"></var><input type=\"text\" name=\"sub-title\" class=\"data-item not-pie-item\">\n                                </label>\n                                <label>\n                                    <var id=\"lang_chart_x_title\"></var><input type=\"text\" name=\"x-title\" class=\"data-item not-pie-item\">\n                                </label>\n                                <label>\n                                    <var id=\"lang_chart_y_title\"></var><input type=\"text\" name=\"y-title\" class=\"data-item not-pie-item\">\n                                </label>\n                            </div>\n                        </fieldset>\n                        <fieldset>\n                            <legend><var id=\"lang_chart_tip\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label>\n                                    <var id=\"lang_cahrt_tip_prefix\"></var>\n                                    <input type=\"text\" id=\"tipInput\" name=\"tip\" class=\"data-item\" disabled=\"disabled\">\n                                </label>\n                                <p><var id=\"lang_cahrt_tip_description\"></var></p>\n                            </div>\n                        </fieldset>\n                        <fieldset>\n                            <legend><var id=\"lang_chart_data_unit\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label><var id=\"lang_chart_data_unit_title\"></var><input type=\"text\" name=\"unit\" class=\"data-item\"></label>\n                                <p><var id=\"lang_chart_data_unit_description\"></var></p>\n                            </div>\n                        </fieldset>\n                    </div>\n                </form>\n            </div>\n            <div class=\"charts-view\">\n                <div id=\"chartsContainer\" class=\"charts-container\"></div>\n                <div id=\"chartsType\" class=\"charts-type\">\n                    <h3><var id=\"lang_chart_type\"></var></h3>\n                    <div class=\"scroll-view\">\n                        <div class=\"scroll-container\">\n                            <div id=\"scrollBed\" class=\"scroll-bed\"></div>\n                        </div>\n                        <div id=\"buttonContainer\" class=\"button-container\">\n                            <a href=\"#\" data-title=\"prev\"><var id=\"lang_prev_btn\"></var></a>\n                            <a href=\"#\" data-title=\"next\"><var id=\"lang_next_btn\"></var></a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <script src=\"../../third-party/jquery-1.10.2.min.js\"></script>\n        <script src=\"../../third-party/highcharts/highcharts.js\"></script>\n        <script src=\"chart.config.js\"></script>\n        <script src=\"charts.js\"></script>\n    </body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/charts/charts.js",
    "content": "/*\n * 图片转换对话框脚本\n **/\n\nvar tableData = [],\n    //编辑器页面table\n    editorTable = null,\n    chartsConfig = window.typeConfig,\n    resizeTimer = null,\n    //初始默认图表类型\n    currentChartType = 0;\n\nwindow.onload = function () {\n\n    editorTable = domUtils.findParentByTagName( editor.selection.getRange().startContainer, 'table', true);\n\n    //未找到表格， 显示错误页面\n    if ( !editorTable ) {\n        document.body.innerHTML = \"<div class='edui-charts-not-data'>未找到数据</div>\";\n        return;\n    }\n\n    //初始化图表类型选择\n    initChartsTypeView();\n    renderTable( editorTable );\n    initEvent();\n    initUserConfig( editorTable.getAttribute( \"data-chart\" ) );\n    $( \"#scrollBed .view-box:eq(\"+ currentChartType +\")\" ).trigger( \"click\" );\n    updateViewType( currentChartType );\n\n    dialog.addListener( \"resize\", function () {\n\n        if ( resizeTimer != null ) {\n            window.clearTimeout( resizeTimer );\n        }\n\n        resizeTimer = window.setTimeout( function () {\n\n            resizeTimer = null;\n\n            renderCharts();\n\n        }, 500 );\n\n    } );\n\n};\n\nfunction initChartsTypeView () {\n\n    var contents = [];\n\n    for ( var i = 0, len = chartsConfig.length; i<len; i++ ) {\n\n        contents.push( '<div class=\"view-box\" data-chart-type=\"'+ i +'\"><img width=\"300\" src=\"images/charts'+ i +'.png\"></div>' );\n\n    }\n\n    $( \"#scrollBed\" ).html( contents.join( \"\" ) );\n\n}\n\n//渲染table， 以便用户修改数据\nfunction renderTable ( table ) {\n\n    var tableHtml = [];\n\n    //构造数据\n    for ( var i = 0, row; row = table.rows[ i ]; i++ ) {\n\n        tableData[ i ] = [];\n        tableHtml[ i ] = [];\n\n        for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) {\n\n            var value = getCellValue( cell );\n\n            if ( i > 0 && j > 0 ) {\n                value = +value;\n            }\n\n            if ( i === 0 || j === 0 ) {\n                tableHtml[ i ].push( '<th>'+ value +'</th>' );\n            } else {\n                tableHtml[ i ].push( '<td><input type=\"text\" class=\"data-item\" value=\"'+ value +'\"></td>' );\n            }\n\n            tableData[ i ][ j ] = value;\n\n        }\n\n        tableHtml[ i ] = tableHtml[ i ].join( \"\" );\n\n    }\n\n    //draw 表格\n    $( \"#tableContainer\" ).html( '<table id=\"showTable\" border=\"1\"><tbody><tr>'+ tableHtml.join( \"</tr><tr>\" ) +'</tr></tbody></table>' );\n\n}\n\n/*\n * 根据表格已有的图表属性初始化当前图表属性\n */\nfunction initUserConfig ( config ) {\n\n    var parsedConfig = {};\n\n    if ( !config ) {\n        return;\n    }\n\n    config = config.split( \";\" );\n\n    $.each( config, function ( index, item ) {\n\n        item = item.split( \":\" );\n        parsedConfig[ item[ 0 ] ] = item[ 1 ];\n\n    } );\n\n    setUserConfig( parsedConfig );\n\n}\n\nfunction initEvent () {\n\n    var cacheValue = null,\n        //图表类型数\n        typeViewCount = chartsConfig.length- 1,\n        $chartsTypeViewBox = $( '#scrollBed .view-box' );\n\n    $( \".charts-format\" ).delegate( \".format-ctrl\", \"change\", function () {\n\n        renderCharts();\n\n    } )\n\n    $( \".table-view\" ).delegate( \".data-item\", \"focus\", function () {\n\n        cacheValue = this.value;\n\n    } ).delegate( \".data-item\", \"blur\", function () {\n\n        if ( this.value !== cacheValue ) {\n            renderCharts();\n        }\n\n        cacheValue = null;\n\n    } );\n\n    $( \"#buttonContainer\" ).delegate( \"a\", \"click\", function (e) {\n\n        e.preventDefault();\n\n        if ( this.getAttribute( \"data-title\" ) === 'prev' ) {\n\n            if ( currentChartType > 0 ) {\n                currentChartType--;\n                updateViewType( currentChartType );\n            }\n\n        } else {\n\n            if ( currentChartType < typeViewCount ) {\n                currentChartType++;\n                updateViewType( currentChartType );\n            }\n\n        }\n\n    } );\n\n    //图表类型变化\n    $( '#scrollBed' ).delegate( \".view-box\", \"click\", function (e) {\n\n        var index = $( this ).attr( \"data-chart-type\" );\n        $chartsTypeViewBox.removeClass( \"selected\" );\n        $( $chartsTypeViewBox[ index ] ).addClass( \"selected\" );\n\n        currentChartType = index | 0;\n\n        //饼图， 禁用部分配置\n        if ( currentChartType === chartsConfig.length - 1 ) {\n\n            disableNotPieConfig();\n\n        //启用完整配置\n        } else {\n\n            enableNotPieConfig();\n\n        }\n\n        renderCharts();\n\n    } );\n\n}\n\nfunction renderCharts () {\n\n    var data = collectData();\n\n    $('#chartsContainer').highcharts( $.extend( {}, chartsConfig[ currentChartType ], {\n\n        credits: {\n            enabled: false\n        },\n        exporting: {\n            enabled: false\n        },\n        title: {\n            text: data.title,\n            x: -20 //center\n        },\n        subtitle: {\n            text: data.subTitle,\n            x: -20\n        },\n        xAxis: {\n            title: {\n                text: data.xTitle\n            },\n            categories: data.categories\n        },\n        yAxis: {\n            title: {\n                text: data.yTitle\n            },\n            plotLines: [{\n                value: 0,\n                width: 1,\n                color: '#808080'\n            }]\n        },\n        tooltip: {\n            enabled: true,\n            valueSuffix: data.suffix\n        },\n        legend: {\n            layout: 'vertical',\n            align: 'right',\n            verticalAlign: 'middle',\n            borderWidth: 1\n        },\n        series: data.series\n\n    } ));\n\n}\n\nfunction updateViewType ( index ) {\n\n    $( \"#scrollBed\" ).css( 'marginLeft', -index*324+'px' );\n\n}\n\nfunction collectData () {\n\n    var form = document.forms[ 'data-form' ],\n        data = null;\n\n    if ( currentChartType !== chartsConfig.length - 1 ) {\n\n        data = getSeriesAndCategories();\n        $.extend( data, getUserConfig() );\n\n    //饼图数据格式\n    } else {\n        data = getSeriesForPieChart();\n        data.title = form[ 'title' ].value;\n        data.suffix = form[ 'unit' ].value;\n    }\n\n    return data;\n\n}\n\n/**\n * 获取用户配置信息\n */\nfunction getUserConfig () {\n\n    var form = document.forms[ 'data-form' ],\n        info = {\n            title: form[ 'title' ].value,\n            subTitle: form[ 'sub-title' ].value,\n            xTitle: form[ 'x-title' ].value,\n            yTitle: form[ 'y-title' ].value,\n            suffix: form[ 'unit' ].value,\n            //数据对齐方式\n            tableDataFormat: getTableDataFormat (),\n            //饼图提示文字\n            tip: $( \"#tipInput\" ).val()\n        };\n\n    return info;\n\n}\n\nfunction setUserConfig ( config ) {\n\n    var form = document.forms[ 'data-form' ];\n\n    config.title && ( form[ 'title' ].value = config.title );\n    config.subTitle && ( form[ 'sub-title' ].value = config.subTitle );\n    config.xTitle && ( form[ 'x-title' ].value = config.xTitle );\n    config.yTitle && ( form[ 'y-title' ].value = config.yTitle );\n    config.suffix && ( form[ 'unit' ].value = config.suffix );\n    config.dataFormat == \"-1\" && ( form[ 'charts-format' ][ 1 ].checked = true );\n    config.tip && ( form[ 'tip' ].value = config.tip );\n    currentChartType = config.chartType || 0;\n\n}\n\nfunction getSeriesAndCategories () {\n\n    var form = document.forms[ 'data-form' ],\n        series = [],\n        categories = [],\n        tmp = [],\n        tableData = getTableData();\n\n    //反转数据\n    if ( getTableDataFormat() === \"-1\" ) {\n\n        for ( var i = 0, len = tableData.length; i < len; i++ ) {\n\n            for ( var j = 0, jlen = tableData[ i ].length; j < jlen; j++ ) {\n\n                if ( !tmp[ j ] ) {\n                    tmp[ j ] = [];\n                }\n\n                tmp[ j ][ i ] = tableData[ i ][ j ];\n\n            }\n\n        }\n\n        tableData = tmp;\n\n    }\n\n    categories = tableData[0].slice( 1 );\n\n    for ( var i = 1, data; data = tableData[ i ]; i++ ) {\n\n        series.push( {\n            name: data[ 0 ],\n            data: data.slice( 1 )\n        } );\n\n    }\n\n    return {\n        series: series,\n        categories: categories\n    };\n\n}\n\n/*\n * 获取数据源数据对齐方式\n */\nfunction getTableDataFormat () {\n\n    var form = document.forms[ 'data-form' ],\n        items = form['charts-format'];\n\n    return items[ 0 ].checked ? items[ 0 ].value : items[ 1 ].value;\n\n}\n\n/*\n * 禁用非饼图类型的配置项\n */\nfunction disableNotPieConfig() {\n\n    updateConfigItem( 'disable' );\n\n}\n\n/*\n * 启用非饼图类型的配置项\n */\nfunction enableNotPieConfig() {\n\n    updateConfigItem( 'enable' );\n\n}\n\nfunction updateConfigItem ( value ) {\n\n    var table = $( \"#showTable\" )[ 0 ],\n        isDisable = value === 'disable' ? true : false;\n\n    //table中的input处理\n    for ( var i = 2 , row; row = table.rows[ i ]; i++ ) {\n\n        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {\n\n            $( \"input\", cell ).attr( \"disabled\", isDisable );\n\n        }\n\n    }\n\n    //其他项处理\n    $( \"input.not-pie-item\" ).attr( \"disabled\", isDisable );\n    $( \"#tipInput\" ).attr( \"disabled\", !isDisable )\n\n}\n\n/*\n * 获取饼图数据\n * 饼图的数据只取第一行的\n **/\nfunction getSeriesForPieChart () {\n\n    var series = {\n            type: 'pie',\n            name: $(\"#tipInput\").val(),\n            data: []\n        },\n        tableData = getTableData();\n\n\n    for ( var j = 1, jlen = tableData[ 0 ].length; j < jlen; j++ ) {\n\n        var title = tableData[ 0 ][ j ],\n            val = tableData[ 1 ][ j ];\n\n        series.data.push( [ title, val ] );\n\n    }\n\n    return {\n        series: [ series ]\n    };\n\n}\n\nfunction getTableData () {\n\n    var table = document.getElementById( \"showTable\" ),\n        xCount = table.rows[0].cells.length - 1,\n        values = getTableInputValue();\n\n    for ( var i = 0, value; value = values[ i ]; i++ ) {\n\n        tableData[ Math.floor( i / xCount ) + 1 ][ i % xCount + 1 ] = values[ i ];\n\n    }\n\n    return tableData;\n\n}\n\nfunction getTableInputValue () {\n\n    var table = document.getElementById( \"showTable\" ),\n        inputs = table.getElementsByTagName( \"input\" ),\n        values = [];\n\n    for ( var i = 0, input; input = inputs[ i ]; i++ ) {\n        values.push( input.value | 0 );\n    }\n\n    return values;\n\n}\n\nfunction getCellValue ( cell ) {\n\n    var value = utils.trim( ( cell.innerText || cell.textContent || '' ) );\n\n    return value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\\s+|\\s+$/g, '' );\n\n}\n\n\n//dialog确认事件\ndialog.onok = function () {\n\n    //收集信息\n    var form = document.forms[ 'data-form' ],\n        info = getUserConfig();\n\n    //添加图表类型\n    info.chartType = currentChartType;\n\n    //同步表格数据到编辑器\n    syncTableData();\n\n    //执行图表命令\n    editor.execCommand( 'charts', info );\n\n};\n\n/*\n * 同步图表编辑视图的表格数据到编辑器里的原始表格\n */\nfunction syncTableData () {\n\n    var tableData = getTableData();\n\n    for ( var i = 1, row; row = editorTable.rows[ i ]; i++ ) {\n\n        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {\n\n            cell.innerHTML = tableData[ i ] [ j ];\n\n        }\n\n    }\n\n}"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/emotion/emotion.css",
    "content": ".jd img{\n    background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.pp img{\n    background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:25px;height:25px;display:block;\n}\n.ldw img{\n    background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.tsj img{\n    background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.cat img{\n    background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.bb img{\n    background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.youa img{\n    background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n\n.smileytable td {height: 37px;}\n#tabPanel{margin-left:5px;overflow: hidden;}\n#tabContent {float:left;background:#FFFFFF;}\n#tabContent div{display: none;width:480px;overflow:hidden;}\n#tabIconReview.show{left:17px;display:block;}\n.menuFocus{background:#ACCD3C;}\n.menuDefault{background:#FFFFFF;}\n#tabIconReview{position:absolute;left:406px;left:398px \\9;top:41px;z-index:65533;width:90px;height:76px;}\nimg.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFFFFF;background-position:center;background-repeat:no-repeat;}\n\n.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width: 95%;}\n.tabbody table{width: 100%;}\n.tabbody td{border:1px solid #BAC498;}\n.tabbody td span{display: block;zoom:1;padding:0 4px;}"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/emotion/emotion.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" >\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"emotion.css\">\n</head>\n<body>\n<div id=\"tabPanel\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span><var id=\"lang_input_choice\"></var></span>\n        <span><var id=\"lang_input_Tuzki\"></var></span>\n        <span><var id=\"lang_input_lvdouwa\"></var></span>\n        <span><var id=\"lang_input_BOBO\"></var></span>\n        <span><var id=\"lang_input_babyCat\"></var></span>\n        <span><var id=\"lang_input_bubble\"></var></span>\n        <span><var id=\"lang_input_youa\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"tab0\"></div>\n        <div id=\"tab1\"></div>\n        <div id=\"tab2\"></div>\n        <div id=\"tab3\"></div>\n        <div id=\"tab4\"></div>\n        <div id=\"tab5\"></div>\n        <div id=\"tab6\"></div>\n    </div>\n</div>\n<div id=\"tabIconReview\">\n    <img id='faceReview' class='review' src=\"../../themes/default/images/spacer.gif\"/>\n</div>\n<script type=\"text/javascript\" src=\"emotion.js\"></script>\n<script type=\"text/javascript\">\n    var emotion = {\n        tabNum:7, //切换面板数量\n        SmilmgName:{ tab0:['j_00', 84], tab1:['t_00', 40], tab2:['w_00', 52], tab3:['B_00', 63], tab4:['C_00', 20], tab5:['i_f', 50], tab6:['y_00', 40] }, //图片前缀名\n        imageFolders:{ tab0:'jx2/', tab1:'tsj/', tab2:'ldw/', tab3:'bobo/', tab4:'babycat/', tab5:'face/', tab6:'youa/'}, //图片对应文件夹路径\n        imageCss:{tab0:'jd', tab1:'tsj', tab2:'ldw', tab3:'bb', tab4:'cat', tab5:'pp', tab6:'youa'}, //图片css类名\n        imageCssOffset:{tab0:35, tab1:35, tab2:35, tab3:35, tab4:35, tab5:25, tab6:35}, //图片偏移\n        SmileyInfor:{\n            tab0:['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],\n            tab1:['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么？', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],\n            tab2:['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢？', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],\n            tab3:['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],\n            tab4:['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],\n            tab5:['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],\n            tab6:['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']\n        }\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/emotion/emotion.js",
    "content": "window.onload = function () {\n    editor.setOpt({\n        emotionLocalization:false\n    });\n\n    emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : \"http://img.baidu.com/hi/\";\n    emotion.SmileyBox = createTabList( emotion.tabNum );\n    emotion.tabExist = createArr( emotion.tabNum );\n\n    initImgName();\n    initEvtHandler( \"tabHeads\" );\n};\n\nfunction initImgName() {\n    for ( var pro in emotion.SmilmgName ) {\n        var tempName = emotion.SmilmgName[pro],\n                tempBox = emotion.SmileyBox[pro],\n                tempStr = \"\";\n\n        if ( tempBox.length ) return;\n        for ( var i = 1; i <= tempName[1]; i++ ) {\n            tempStr = tempName[0];\n            if ( i < 10 ) tempStr = tempStr + '0';\n            tempStr = tempStr + i + '.gif';\n            tempBox.push( tempStr );\n        }\n    }\n}\n\nfunction initEvtHandler( conId ) {\n    var tabHeads = $G( conId );\n    for ( var i = 0, j = 0; i < tabHeads.childNodes.length; i++ ) {\n        var tabObj = tabHeads.childNodes[i];\n        if ( tabObj.nodeType == 1 ) {\n            domUtils.on( tabObj, \"click\", (function ( index ) {\n                return function () {\n                    switchTab( index );\n                };\n            })( j ) );\n            j++;\n        }\n    }\n    switchTab( 0 );\n    $G( \"tabIconReview\" ).style.display = 'none';\n}\n\nfunction InsertSmiley( url, evt ) {\n    var obj = {\n        src:editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + \"dialogs/emotion/\" + url : url\n    };\n    obj._src = obj.src;\n    editor.execCommand( 'insertimage', obj );\n    if ( !evt.ctrlKey ) {\n        dialog.popup.hide();\n    }\n}\n\nfunction switchTab( index ) {\n\n    autoHeight( index );\n    if ( emotion.tabExist[index] == 0 ) {\n        emotion.tabExist[index] = 1;\n        createTab( 'tab' + index );\n    }\n    //获取呈现元素句柄数组\n    var tabHeads = $G( \"tabHeads\" ).getElementsByTagName( \"span\" ),\n            tabBodys = $G( \"tabBodys\" ).getElementsByTagName( \"div\" ),\n            i = 0, L = tabHeads.length;\n    //隐藏所有呈现元素\n    for ( ; i < L; i++ ) {\n        tabHeads[i].className = \"\";\n        tabBodys[i].style.display = \"none\";\n    }\n    //显示对应呈现元素\n    tabHeads[index].className = \"focus\";\n    tabBodys[index].style.display = \"block\";\n}\n\nfunction autoHeight( index ) {\n    var iframe = dialog.getDom( \"iframe\" ),\n            parent = iframe.parentNode.parentNode;\n    switch ( index ) {\n        case 0:\n            iframe.style.height = \"380px\";\n            parent.style.height = \"392px\";\n            break;\n        case 1:\n            iframe.style.height = \"220px\";\n            parent.style.height = \"232px\";\n            break;\n        case 2:\n            iframe.style.height = \"260px\";\n            parent.style.height = \"272px\";\n            break;\n        case 3:\n            iframe.style.height = \"300px\";\n            parent.style.height = \"312px\";\n            break;\n        case 4:\n            iframe.style.height = \"140px\";\n            parent.style.height = \"152px\";\n            break;\n        case 5:\n            iframe.style.height = \"260px\";\n            parent.style.height = \"272px\";\n            break;\n        case 6:\n            iframe.style.height = \"230px\";\n            parent.style.height = \"242px\";\n            break;\n        default:\n\n    }\n}\n\n\nfunction createTab( tabName ) {\n    var faceVersion = \"?v=1.1\", //版本号\n            tab = $G( tabName ), //获取将要生成的Div句柄\n            imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径\n            positionLine = 11 / 2, //中间数\n            iWidth = iHeight = 35, //图片长宽\n            iColWidth = 3, //表格剩余空间的显示比例\n            tableCss = emotion.imageCss[tabName],\n            cssOffset = emotion.imageCssOffset[tabName],\n            textHTML = ['<table class=\"smileytable\">'],\n            i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage,\n            sUrl, realUrl, posflag, offset, infor;\n\n    for ( ; i < imgNum; ) {\n        textHTML.push( '<tr>' );\n        for ( var j = 0; j < imgColNum; j++, i++ ) {\n            faceImage = emotion.SmileyBox[tabName][i];\n            if ( faceImage ) {\n                sUrl = imagePath + faceImage + faceVersion;\n                realUrl = imagePath + faceImage;\n                posflag = j < positionLine ? 0 : 1;\n                offset = cssOffset * i * (-1) - 1;\n                infor = emotion.SmileyInfor[tabName][i];\n\n                textHTML.push( '<td  class=\"' + tableCss + '\"   border=\"1\" width=\"' + iColWidth + '%\" style=\"border-collapse:collapse;\" align=\"center\"  bgcolor=\"transparent\" onclick=\"InsertSmiley(\\'' + realUrl.replace( /'/g, \"\\\\'\" ) + '\\',event)\" onmouseover=\"over(this,\\'' + sUrl + '\\',\\'' + posflag + '\\')\" onmouseout=\"out(this)\">' );\n                textHTML.push( '<span>' );\n                textHTML.push( '<img  style=\"background-position:left ' + offset + 'px;\" title=\"' + infor + '\" src=\"' + emotion.SmileyPath + (editor.options.emotionLocalization ? '0.gif\" width=\"' : 'default/0.gif\" width=\"') + iWidth + '\" height=\"' + iHeight + '\"></img>' );\n                textHTML.push( '</span>' );\n            } else {\n                textHTML.push( '<td width=\"' + iColWidth + '%\"   bgcolor=\"#FFFFFF\">' );\n            }\n            textHTML.push( '</td>' );\n        }\n        textHTML.push( '</tr>' );\n    }\n    textHTML.push( '</table>' );\n    textHTML = textHTML.join( \"\" );\n    tab.innerHTML = textHTML;\n}\n\nfunction over( td, srcPath, posFlag ) {\n    td.style.backgroundColor = \"#ACCD3C\";\n    $G( 'faceReview' ).style.backgroundImage = \"url(\" + srcPath + \")\";\n    if ( posFlag == 1 ) $G( \"tabIconReview\" ).className = \"show\";\n    $G( \"tabIconReview\" ).style.display = 'block';\n}\n\nfunction out( td ) {\n    td.style.backgroundColor = \"transparent\";\n    var tabIconRevew = $G( \"tabIconReview\" );\n    tabIconRevew.className = \"\";\n    tabIconRevew.style.display = 'none';\n}\n\nfunction createTabList( tabNum ) {\n    var obj = {};\n    for ( var i = 0; i < tabNum; i++ ) {\n        obj[\"tab\" + i] = [];\n    }\n    return obj;\n}\n\nfunction createArr( tabNum ) {\n    var arr = [];\n    for ( var i = 0; i < tabNum; i++ ) {\n        arr[i] = 0;\n    }\n    return arr;\n}\n\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/gmap/gmap.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .content{width:530px; height: 350px;margin: 10px auto;}\n        .content table{width: 100%}\n        .content table td{vertical-align: middle;}\n        #address{width:220px;height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}\n    </style>\n    <script type=\"text/javascript\" src=\"http://maps.googleapis.com/maps/api/js?sensor=false\"></script>\n</head>\n<body>\n<div class=\"content\">\n    <table>\n        <tr>\n            <td><label for=\"address\"><var id=\"lang_input_address\"></var></label></td>\n            <td><input id=\"address\" type=\"text\" /></td>\n            <td><a id=\"doSearch\" href=\"javascript:void(0)\" class=\"button\"><var id=\"lang_input_search\"></var></a></td>\n        </tr>\n    </table>\n    <div id=\"container\" style=\"width: 100%; height: 340px;margin: 5px auto; border: 1px solid gray;\"></div>\n</div>\n<script type=\"text/javascript\">\n    domUtils.on(window,\"load\",function(){\n        var map = new google.maps.Map(document.getElementById('container'), {\n                zoom: 3,\n                streetViewControl: false,\n                scaleControl: true,\n                mapTypeId: google.maps.MapTypeId.ROADMAP\n            });\n            var imgcss;\n            var marker = new google.maps.Marker({\n                map: map,\n                draggable: true\n            });\n            function doSearch(){\n                var address = document.getElementById('address').value;\n                var geocoder = new google.maps.Geocoder();\n                geocoder.geocode( { 'address': address}, function (results, status) {\n                    if (status == google.maps.GeocoderStatus.OK) {\n                        var bounds = results[0].geometry.viewport;\n                        map.fitBounds(bounds);\n                        marker.setPosition(results[0].geometry.location);\n                        marker.setTitle(address);\n                    } else alert(lang.searchError);\n                });\n            }\n            $G('address').onkeydown = function (evt){\n                evt = evt || event;\n                if (evt.keyCode == 13) {\n                    doSearch();\n                }\n            };\n            $G(\"doSearch\").onclick = doSearch;\n            dialog.onok = function (){\n                var center = map.getCenter();\n                var point = marker.getPosition();\n                var url = \"http://maps.googleapis.com/maps/api/staticmap?center=\" + center.lat() + ',' + center.lng() + \"&zoom=\" + map.zoom + \"&size=520x340&maptype=\" + map.getMapTypeId() + \"&markers=\" + point.lat() + ',' + point.lng() + \"&sensor=false\";\n                editor.execCommand('inserthtml', '<img width=\"520\" height=\"340\" src=\"' + url + '\"' + (imgcss ? ' style=\"' + imgcss + '\"' :'') + '/>');\n            };\n\n            function getPars(str,par){\n                var reg = new RegExp(par+\"=((\\\\d+|[.,])*)\",\"g\");\n                return reg.exec(str)[1];\n            }\n            var img = editor.selection.getRange().getClosedNode();\n            if(img && img.src.indexOf(\"http://maps.googleapis.com/maps/api/staticmap\")!=-1){\n                var url = img.getAttribute(\"src\");\n                var centers = getPars(url,\"center\").split(\",\");\n                point = new google.maps.LatLng(Number(centers[0]),Number(centers[1]));\n                map.setCenter(point);\n                map.setZoom(Number(getPars(url,\"zoom\")));\n                centers = getPars(url,\"markers\").split(\",\");\n                marker.setPosition(new google.maps.LatLng(Number(centers[0]),Number(centers[1])));\n                imgcss = img.style.cssText;\n            }else{\n                setTimeout(function(){\n                    doSearch();\n                },30)\n            }\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/help/help.css",
    "content": ".wrapper{width: 370px;margin: 10px auto;zoom: 1;}\n.tabbody{height: 360px;}\n.tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;}\n.tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;}\n.tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;}\n.tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;}\n.tabbody table thead{font-weight: bold;line-height: 25px;}"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/help/help.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title>帮助</title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"help.css\">\n</head>\n<body>\n<div class=\"wrapper\" id=\"helptab\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" tabsrc=\"about\"><var id=\"lang_input_about\"></var></span>\n        <span tabsrc=\"shortcuts\"><var id=\"lang_input_shortcuts\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"about\" class=\"panel\">\n            <h1>UEditor</h1>\n            <p id=\"version\"></p>\n            <p><var id=\"lang_input_introduction\"></var></p>\n        </div>\n        <div id=\"shortcuts\" class=\"panel\">\n            <table>\n                <thead>\n                <tr>\n                    <td><var id=\"lang_Txt_shortcuts\"></var></td>\n                    <td><var id=\"lang_Txt_func\"></var></td>\n                </tr>\n                </thead>\n                <tbody>\n                <tr>\n                    <td>ctrl+b</td>\n                    <td><var id=\"lang_Txt_bold\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+c</td>\n                    <td><var id=\"lang_Txt_copy\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+x</td>\n                    <td><var id=\"lang_Txt_cut\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+v</td>\n                    <td><var id=\"lang_Txt_Paste\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+y</td>\n                    <td><var id=\"lang_Txt_undo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+z</td>\n                    <td><var id=\"lang_Txt_redo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+i</td>\n                    <td><var id=\"lang_Txt_italic\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+u</td>\n                    <td><var id=\"lang_Txt_underline\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+a</td>\n                    <td><var id=\"lang_Txt_selectAll\"></var></td>\n                </tr>\n                <tr>\n                    <td>shift+enter</td>\n                    <td><var id=\"lang_Txt_visualEnter\"></var></td>\n                </tr>\n                <tr>\n                    <td>alt+z</td>\n                    <td><var id=\"lang_Txt_fullscreen\"></var></td>\n                </tr>\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"help.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/help/help.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午1:06\n * To change this template use File | Settings | File Templates.\n */\n/**\n * tab点击处理事件\n * @param tabHeads\n * @param tabBodys\n * @param obj\n */\nfunction clickHandler( tabHeads,tabBodys,obj ) {\n    //head样式更改\n    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {\n        tabHeads[k].className = \"\";\n    }\n    obj.className = \"focus\";\n    //body显隐\n    var tabSrc = obj.getAttribute( \"tabSrc\" );\n    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {\n        var body = tabBodys[j],\n            id = body.getAttribute( \"id\" );\n        body.onclick = function(){\n            this.style.zoom = 1;\n        };\n        if ( id != tabSrc ) {\n            body.style.zIndex = 1;\n        } else {\n            body.style.zIndex = 200;\n        }\n    }\n\n}\n\n/**\n * TAB切换\n * @param tabParentId  tab的父节点ID或者对象本身\n */\nfunction switchTab( tabParentId ) {\n    var tabElements = $G( tabParentId ).children,\n        tabHeads = tabElements[0].children,\n        tabBodys = tabElements[1].children;\n\n    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {\n        var head = tabHeads[i];\n        if ( head.className === \"focus\" )clickHandler(tabHeads,tabBodys, head );\n        head.onclick = function () {\n            clickHandler(tabHeads,tabBodys,this);\n        }\n    }\n}\nswitchTab(\"helptab\");\n\ndocument.getElementById('version').innerHTML = parent.UE.version;"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/image/image.css",
    "content": "@charset \"utf-8\";\n/* dialog样式 */\n.wrapper {\n    zoom: 1;\n    width: 630px;\n    *width: 626px;\n    height: 380px;\n    margin: 0 auto;\n    padding: 10px;\n    position: relative;\n    font-family: sans-serif;\n}\n\n/*tab样式框大小*/\n.tabhead {\n    float:left;\n}\n.tabbody {\n    width: 100%;\n    height: 346px;\n    position: relative;\n    clear: both;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n\n.tabbody .panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n}\n\n/* 图片对齐方式 */\n.alignBar{\n    float:right;\n    margin-top: 5px;\n    position: relative;\n}\n\n.alignBar .algnLabel{\n    float:left;\n    height: 20px;\n    line-height: 20px;\n}\n\n.alignBar #alignIcon{\n    zoom:1;\n    _display: inline;\n    display: inline-block;\n    position: relative;\n}\n.alignBar #alignIcon span{\n    float: left;\n    cursor: pointer;\n    display: block;\n    width: 19px;\n    height: 17px;\n    margin-right: 3px;\n    margin-left: 3px;\n    background-image: url(./images/alignicon.jpg);\n}\n.alignBar #alignIcon .none-align{\n    background-position: 0 -18px;\n}\n.alignBar #alignIcon .left-align{\n    background-position: -20px -18px;\n}\n.alignBar #alignIcon .right-align{\n    background-position: -40px -18px;\n}\n.alignBar #alignIcon .center-align{\n    background-position: -60px -18px;\n}\n.alignBar #alignIcon .none-align.focus{\n    background-position: 0 0;\n}\n.alignBar #alignIcon .left-align.focus{\n    background-position: -20px 0;\n}\n.alignBar #alignIcon .right-align.focus{\n    background-position: -40px 0;\n}\n.alignBar #alignIcon .center-align.focus{\n    background-position: -60px 0;\n}\n\n\n\n\n/* 远程图片样式 */\n#remote {\n    z-index: 200;\n}\n\n#remote .top{\n    width: 100%;\n    margin-top: 25px;\n}\n#remote .left{\n    display: block;\n    float: left;\n    width: 300px;\n    height:10px;\n}\n#remote .right{\n    display: block;\n    float: right;\n    width: 300px;\n    height:10px;\n}\n#remote .row{\n    margin-left: 20px;\n    clear: both;\n    height: 40px;\n}\n\n#remote .row label{\n    text-align: center;\n    width: 50px;\n    zoom:1;\n    _display: inline;\n    display:inline-block;\n    vertical-align: middle;\n}\n#remote .row label.algnLabel{\n    float: left;\n\n}\n\n#remote input.text{\n    width: 150px;\n    padding: 3px 6px;\n    font-size: 14px;\n    line-height: 1.42857143;\n    color: #555;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n#remote input.text:focus {\n    border-color: #66afe9;\n    outline: 0;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n}\n#remote #url{\n    width: 500px;\n    margin-bottom: 2px;\n}\n#remote #width,\n#remote #height{\n    width: 20px;\n    margin-left: 2px;\n    margin-right: 2px;\n}\n#remote #border,\n#remote #vhSpace,\n#remote #title{\n    width: 180px;\n    margin-right: 5px;\n}\n#remote #lock{\n}\n#remote #lockicon{\n    zoom: 1;\n    _display:inline;\n    display: inline-block;\n    width: 20px;\n    height: 20px;\n    background: url(\"../../themes/default/images/lock.gif\") -13px -13px no-repeat;\n    vertical-align: middle;\n}\n#remote #preview{\n    clear: both;\n    width: 260px;\n    height: 240px;\n    z-index: 9999;\n    margin-top: 10px;\n    background-color: #eee;\n    overflow: hidden;\n}\n\n/* 上传图片 */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n    clip: auto;\n}\n\n#upload .queueList {\n    margin: 0;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 172px;\n    padding-top: 150px;\n    text-align: center;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top:0;\n    *top: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 300px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n    position: relative;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 9px 0 0 9px;\n    *margin: 6px 0 0 6px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display:none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background: url(./images/success.gif) no-repeat right bottom \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n#upload .filelist li.filePickerBlock div.webuploader-pick  {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display:none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display:none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused{\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover{\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter:alpha(opacity=60);\n    -moz-opacity:0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n\n/* 图片管理样式 */\n#online {\n    width: 100%;\n    height: 336px;\n    padding: 10px 0 0 0;\n}\n#online #imageList{\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n}\n#online ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n#online li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 0 0 9px 9px;\n    *margin: 0 0 6px 6px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n#online li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width:0;\n    height:0;\n    margin: 0;\n    padding: 0;\n}\n#online li img {\n    cursor: pointer;\n}\n#online li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n#online li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n#online li.selected .icon {\n    background-image: url(images/success.png);\n    background-image: url(images/success.gif)\\9;\n    background-position: 75px 75px;\n}\n#online li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}\n\n\n/* 图片搜索样式 */\n#search .searchBar {\n    width: 100%;\n    height: 30px;\n    margin: 10px 0 5px 0;\n    padding: 0;\n}\n\n#search input.text{\n    width: 150px;\n    padding: 3px 6px;\n    font-size: 14px;\n    line-height: 1.42857143;\n    color: #555;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n#search input.text:focus {\n    border-color: #66afe9;\n    outline: 0;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n}\n#search input.searchTxt {\n    margin-left:5px;\n    padding-left: 5px;\n    background: #FFF;\n    width: 300px;\n    *width: 260px;\n    height: 21px;\n    line-height: 21px;\n    float: left;\n    dislay: block;\n}\n\n#search .searchType {\n    width: 65px;\n    height: 28px;\n    padding:0;\n    line-height: 28px;\n    border: 1px solid #d7d7d7;\n    border-radius: 0;\n    vertical-align: top;\n    margin-left: 5px;\n    float: left;\n    dislay: block;\n}\n\n#search #searchBtn,\n#search #searchReset {\n    display: inline-block;\n    margin-bottom: 0;\n    margin-right: 5px;\n    padding: 4px 10px;\n    font-weight: 400;\n    text-align: center;\n    vertical-align: middle;\n    cursor: pointer;\n    background-image: none;\n    border: 1px solid transparent;\n    white-space: nowrap;\n    font-size: 14px;\n    border-radius: 4px;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    vertical-align: top;\n    float: right;\n}\n\n#search #searchBtn {\n    color: white;\n    border-color: #285e8e;\n    background-color: #3b97d7;\n}\n#search #searchReset {\n    color: #333;\n    border-color: #ccc;\n    background-color: #fff;\n}\n#search #searchBtn:hover {\n    background-color: #3276b1;\n}\n#search #searchReset:hover {\n    background-color: #eee;\n}\n\n#search .msg {\n    margin-left: 5px;\n}\n\n#search .searchList{\n    width: 100%;\n    height: 300px;\n    overflow: hidden;\n    clear: both;\n}\n#search .searchList ul{\n    margin:0;\n    padding:0;\n    list-style:none;\n    clear: both;\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    zoom: 1;\n    position: relative;\n}\n\n#search .searchList li {\n    list-style:none;\n    float: left;\n    display: block;\n    width: 115px;\n    margin: 5px 10px 5px 20px;\n    *margin: 5px 10px 5px 15px;\n    padding:0;\n    font-size: 12px;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, .3);\n    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);\n    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);\n    position: relative;\n    vertical-align: top;\n    text-align: center;\n    overflow: hidden;\n    cursor: pointer;\n    filter: alpha(Opacity=100);\n    -moz-opacity: 1;\n    opacity: 1;\n    border: 2px solid #eee;\n}\n\n#search .searchList li.selected {\n    filter: alpha(Opacity=40);\n    -moz-opacity: 0.4;\n    opacity: 0.4;\n    border: 2px solid #00a0e9;\n}\n\n#search .searchList li p {\n    background-color: #eee;\n    margin: 0;\n    padding: 0;\n    position: relative;\n    width:100%;\n    height:115px;\n    overflow: hidden;\n}\n\n#search .searchList li p img {\n    cursor: pointer;\n    border: 0;\n}\n\n#search .searchList li a {\n    color: #999;\n    border-top: 1px solid #F2F2F2;\n    background: #FAFAFA;\n    text-align: center;\n    display: block;\n    padding: 0 5px;\n    width: 105px;\n    height:32px;\n    line-height:32px;\n    white-space:nowrap;\n    text-overflow:ellipsis;\n    text-decoration: none;\n    overflow: hidden;\n    word-break: break-all;\n}\n\n#search .searchList a:hover {\n    text-decoration: underline;\n    color: #333;\n}\n#search .searchList .clearFloat{\n    clear: both;\n}"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/image/image.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n\n    <!-- jquery -->\n    <script\n      type=\"text/javascript\"\n      src=\"../../third-party/jquery-1.10.2.min.js\"\n    ></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.min.js\"></script>\n    <link\n      rel=\"stylesheet\"\n      type=\"text/css\"\n      href=\"../../third-party/webuploader/webuploader.css\"\n    />\n\n    <!-- image dialog -->\n    <link rel=\"stylesheet\" href=\"image.css\" type=\"text/css\" />\n  </head>\n  <body>\n    <div class=\"wrapper\">\n      <div id=\"tabhead\" class=\"tabhead\">\n        <span class=\"tab\" data-content-id=\"remote\"\n          ><var id=\"lang_tab_remote\"></var\n        ></span>\n        <span class=\"tab focus\" data-content-id=\"upload\"\n          ><var id=\"lang_tab_upload\"></var\n        ></span>\n        <!-- <span class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n            <span class=\"tab\" data-content-id=\"search\"><var id=\"lang_tab_search\"></var></span> -->\n      </div>\n      <div class=\"alignBar\">\n        <label class=\"algnLabel\"><var id=\"lang_input_align\"></var></label>\n        <span id=\"alignIcon\">\n          <span\n            id=\"noneAlign\"\n            class=\"none-align focus\"\n            data-align=\"none\"\n          ></span>\n          <span id=\"leftAlign\" class=\"left-align\" data-align=\"left\"></span>\n          <span id=\"rightAlign\" class=\"right-align\" data-align=\"right\"></span>\n          <span\n            id=\"centerAlign\"\n            class=\"center-align\"\n            data-align=\"center\"\n          ></span>\n        </span>\n        <input id=\"align\" name=\"align\" type=\"hidden\" value=\"none\" />\n      </div>\n      <div id=\"tabbody\" class=\"tabbody\">\n        <!-- 远程图片 -->\n        <div id=\"remote\" class=\"panel\">\n          <div class=\"top\">\n            <div class=\"row\">\n              <label for=\"url\"><var id=\"lang_input_url\"></var></label>\n              <span><input class=\"text\" id=\"url\" type=\"text\" /></span>\n            </div>\n          </div>\n          <div class=\"left\">\n            <div class=\"row\">\n              <label><var id=\"lang_input_size\"></var></label>\n              <span\n                ><var id=\"lang_input_width\">&nbsp;&nbsp;</var\n                ><input class=\"text\" type=\"text\" id=\"width\" />px\n              </span>\n              <span\n                ><var id=\"lang_input_height\">&nbsp;&nbsp;</var\n                ><input class=\"text\" type=\"text\" id=\"height\" />px\n              </span>\n              <span\n                ><input id=\"lock\" type=\"checkbox\" disabled=\"disabled\" /><span\n                  id=\"lockicon\"\n                ></span\n              ></span>\n            </div>\n            <div class=\"row\">\n              <label><var id=\"lang_input_border\"></var></label>\n              <span><input class=\"text\" type=\"text\" id=\"border\" />px </span>\n            </div>\n            <div class=\"row\">\n              <label><var id=\"lang_input_vhspace\"></var></label>\n              <span><input class=\"text\" type=\"text\" id=\"vhSpace\" />px </span>\n            </div>\n            <div class=\"row\">\n              <label><var id=\"lang_input_title\"></var></label>\n              <span><input class=\"text\" type=\"text\" id=\"title\" /></span>\n            </div>\n          </div>\n          <div class=\"right\"><div id=\"preview\"></div></div>\n        </div>\n\n        <!-- 上传图片 -->\n        <div id=\"upload\" class=\"panel focus\">\n          <div id=\"queueList\" class=\"queueList\">\n            <div class=\"statusBar element-invisible\">\n              <div class=\"progress\">\n                <span class=\"text\">0%</span>\n                <span class=\"percentage\"></span>\n              </div>\n              <div class=\"info\"></div>\n              <div class=\"btns\">\n                <div id=\"filePickerBtn\"></div>\n                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n              </div>\n            </div>\n            <div id=\"dndArea\" class=\"placeholder\">\n              <div class=\"filePickerContainer\">\n                <div id=\"filePickerReady\"></div>\n              </div>\n            </div>\n            <ul class=\"filelist element-invisible\">\n              <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n            </ul>\n          </div>\n        </div>\n\n        <!-- 在线图片 -->\n        <div id=\"online\" class=\"panel\">\n          <div id=\"imageList\"><var id=\"lang_imgLoading\"></var></div>\n        </div>\n\n        <!-- 搜索图片 -->\n        <div id=\"search\" class=\"panel\">\n          <div class=\"searchBar\">\n            <input id=\"searchTxt\" class=\"searchTxt text\" type=\"text\" />\n            <select id=\"searchType\" class=\"searchType\">\n              <option value=\"&s=4&z=0\"></option>\n              <option value=\"&s=1&z=19\"></option>\n              <option value=\"&s=2&z=0\"></option>\n              <option value=\"&s=3&z=0\"></option>\n            </select>\n            <input id=\"searchReset\" type=\"button\" />\n            <input id=\"searchBtn\" type=\"button\" />\n          </div>\n          <div id=\"searchList\" class=\"searchList\">\n            <ul id=\"searchListUl\"></ul>\n          </div>\n        </div>\n      </div>\n    </div>\n    <script type=\"text/javascript\" src=\"image.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/image/image.js",
    "content": "/**\n * User: Jinqn\n * Date: 14-04-08\n * Time: 下午16:34\n * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片\n */\n\n;(function () {\n  var remoteImage, uploadImage, onlineImage, searchImage\n\n  window.onload = function () {\n    initTabs()\n    initAlign()\n    initButtons()\n  }\n\n  /* 初始化tab标签 */\n  function initTabs() {\n    var tabs = $G('tabhead').children\n    for (var i = 0; i < tabs.length; i++) {\n      domUtils.on(tabs[i], 'click', function (e) {\n        var target = e.target || e.srcElement\n        setTabFocus(target.getAttribute('data-content-id'))\n      })\n    }\n\n    var img = editor.selection.getRange().getClosedNode()\n    if (img && img.tagName && img.tagName.toLowerCase() == 'img') {\n      setTabFocus('remote')\n    } else {\n      setTabFocus('upload')\n    }\n  }\n\n  /* 初始化tabbody */\n  function setTabFocus(id) {\n    if (!id) return\n    var i,\n      bodyId,\n      tabs = $G('tabhead').children\n    for (i = 0; i < tabs.length; i++) {\n      bodyId = tabs[i].getAttribute('data-content-id')\n      if (bodyId == id) {\n        domUtils.addClass(tabs[i], 'focus')\n        domUtils.addClass($G(bodyId), 'focus')\n      } else {\n        domUtils.removeClasses(tabs[i], 'focus')\n        domUtils.removeClasses($G(bodyId), 'focus')\n      }\n    }\n    switch (id) {\n      case 'remote':\n        remoteImage = remoteImage || new RemoteImage()\n        break\n      case 'upload':\n        setAlign(editor.getOpt('imageInsertAlign'))\n        uploadImage = uploadImage || new UploadImage('queueList')\n        break\n      case 'online':\n        setAlign(editor.getOpt('imageManagerInsertAlign'))\n        onlineImage = onlineImage || new OnlineImage('imageList')\n        onlineImage.reset()\n        break\n      case 'search':\n        setAlign(editor.getOpt('imageManagerInsertAlign'))\n        searchImage = searchImage || new SearchImage()\n        break\n    }\n  }\n\n  /* 初始化onok事件 */\n  function initButtons() {\n    dialog.onok = function () {\n      var remote = false,\n        list = [],\n        id,\n        tabs = $G('tabhead').children\n      for (var i = 0; i < tabs.length; i++) {\n        if (domUtils.hasClass(tabs[i], 'focus')) {\n          id = tabs[i].getAttribute('data-content-id')\n          break\n        }\n      }\n\n      switch (id) {\n        case 'remote':\n          list = remoteImage.getInsertList()\n          break\n        case 'upload':\n          list = uploadImage.getInsertList()\n          var count = uploadImage.getQueueCount()\n          if (count) {\n            $('.info', '#queueList').html(\n              '<span style=\"color:red;\">' +\n                '还有2个未上传文件'.replace(/[\\d]/, count) +\n                '</span>'\n            )\n            return false\n          }\n          break\n        case 'online':\n          list = onlineImage.getInsertList()\n          break\n        case 'search':\n          list = searchImage.getInsertList()\n          remote = true\n          break\n      }\n\n      if (list) {\n        editor.execCommand('insertimage', list)\n        remote && editor.fireEvent('catchRemoteImage')\n      }\n    }\n  }\n\n  /* 初始化对其方式的点击事件 */\n  function initAlign() {\n    /* 点击align图标 */\n    domUtils.on($G('alignIcon'), 'click', function (e) {\n      var target = e.target || e.srcElement\n      if (target.className && target.className.indexOf('-align') != -1) {\n        setAlign(target.getAttribute('data-align'))\n      }\n    })\n  }\n\n  /* 设置对齐方式 */\n  function setAlign(align) {\n    align = align || 'none'\n    var aligns = $G('alignIcon').children\n    for (i = 0; i < aligns.length; i++) {\n      if (aligns[i].getAttribute('data-align') == align) {\n        domUtils.addClass(aligns[i], 'focus')\n        $G('align').value = aligns[i].getAttribute('data-align')\n      } else {\n        domUtils.removeClasses(aligns[i], 'focus')\n      }\n    }\n  }\n  /* 获取对齐方式 */\n  function getAlign() {\n    var align = $G('align').value || 'none'\n    return align == 'none' ? '' : align\n  }\n\n  /* 在线图片 */\n  function RemoteImage(target) {\n    this.container = utils.isString(target)\n      ? document.getElementById(target)\n      : target\n    this.init()\n  }\n  RemoteImage.prototype = {\n    init: function () {\n      this.initContainer()\n      this.initEvents()\n    },\n    initContainer: function () {\n      this.dom = {\n        url: $G('url'),\n        width: $G('width'),\n        height: $G('height'),\n        border: $G('border'),\n        vhSpace: $G('vhSpace'),\n        title: $G('title'),\n        align: $G('align'),\n      }\n      var img = editor.selection.getRange().getClosedNode()\n      if (img) {\n        this.setImage(img)\n      }\n    },\n    initEvents: function () {\n      var _this = this,\n        locker = $G('lock')\n\n      /* 改变url */\n      domUtils.on($G('url'), 'keyup', updatePreview)\n      domUtils.on($G('border'), 'keyup', updatePreview)\n      domUtils.on($G('title'), 'keyup', updatePreview)\n\n      domUtils.on($G('width'), 'keyup', function () {\n        if (locker.checked) {\n          var proportion = locker.getAttribute('data-proportion')\n          $G('height').value = Math.round(this.value / proportion)\n        } else {\n          _this.updateLocker()\n        }\n        updatePreview()\n      })\n      domUtils.on($G('height'), 'keyup', function () {\n        if (locker.checked) {\n          var proportion = locker.getAttribute('data-proportion')\n          $G('width').value = Math.round(this.value * proportion)\n        } else {\n          _this.updateLocker()\n        }\n        updatePreview()\n      })\n      domUtils.on($G('lock'), 'change', function () {\n        var proportion =\n          parseInt($G('width').value) / parseInt($G('height').value)\n        locker.setAttribute('data-proportion', proportion)\n      })\n\n      function updatePreview() {\n        _this.setPreview()\n      }\n    },\n    updateLocker: function () {\n      var width = $G('width').value,\n        height = $G('height').value,\n        locker = $G('lock')\n      if (\n        width &&\n        height &&\n        width == parseInt(width) &&\n        height == parseInt(height)\n      ) {\n        locker.disabled = false\n        locker.title = ''\n      } else {\n        locker.checked = false\n        locker.disabled = 'disabled'\n        locker.title = lang.remoteLockError\n      }\n    },\n    setImage: function (img) {\n      /* 不是正常的图片 */\n      if (\n        !img.tagName ||\n        (img.tagName.toLowerCase() != 'img' && !img.getAttribute('src')) ||\n        !img.src\n      )\n        return\n\n      var wordImgFlag = img.getAttribute('word_img'),\n        src = wordImgFlag\n          ? wordImgFlag.replace('&amp;', '&')\n          : img.getAttribute('_src') ||\n            img.getAttribute('src', 2).replace('&amp;', '&'),\n        align = editor.queryCommandValue('imageFloat')\n\n      /* 防止onchange事件循环调用 */\n      if (src !== $G('url').value) $G('url').value = src\n      if (src) {\n        /* 设置表单内容 */\n        $G('width').value = img.width || ''\n        $G('height').value = img.height || ''\n        $G('border').value = img.getAttribute('border') || '0'\n        $G('vhSpace').value = img.getAttribute('vspace') || '0'\n        $G('title').value = img.title || img.alt || ''\n        setAlign(align)\n        this.setPreview()\n        this.updateLocker()\n      }\n    },\n    getData: function () {\n      var data = {}\n      for (var k in this.dom) {\n        data[k] = this.dom[k].value\n      }\n      return data\n    },\n    setPreview: function () {\n      var url = $G('url').value,\n        ow = $G('width').value,\n        oh = $G('height').value,\n        border = $G('border').value,\n        title = $G('title').value,\n        preview = $G('preview'),\n        width,\n        height\n\n      width =\n        !ow || !oh ? preview.offsetWidth : Math.min(ow, preview.offsetWidth)\n      width =\n        width + border * 2 > preview.offsetWidth\n          ? width\n          : preview.offsetWidth - border * 2\n      height = !ow || !oh ? '' : (width * oh) / ow\n\n      if (url) {\n        preview.innerHTML =\n          '<img src=\"' +\n          url +\n          '\" width=\"' +\n          width +\n          '\" height=\"' +\n          height +\n          '\" border=\"' +\n          border +\n          'px solid #000\" title=\"' +\n          title +\n          '\" />'\n      }\n    },\n    getInsertList: function () {\n      var data = this.getData()\n      if (data['url']) {\n        return [\n          {\n            src: data['url'],\n            _src: data['url'],\n            width: data['width'] || '',\n            height: data['height'] || '',\n            border: data['border'] || '',\n            floatStyle: data['align'] || '',\n            vspace: data['vhSpace'] || '',\n            alt: data['title'] || '',\n            style:\n              'width:' + data['width'] + 'px;height:' + data['height'] + 'px;',\n          },\n        ]\n      } else {\n        return []\n      }\n    },\n  }\n\n  /* 上传图片 */\n  function UploadImage(target) {\n    this.$wrap = target.constructor == String ? $('#' + target) : $(target)\n    this.init()\n  }\n  UploadImage.prototype = {\n    init: function () {\n      this.imageList = []\n      this.initContainer()\n      this.initUploader()\n    },\n    initContainer: function () {\n      this.$queue = this.$wrap.find('.filelist')\n    },\n    /* 初始化容器 */\n    initUploader: function () {\n      var _this = this,\n        $ = jQuery, // just in case. Make sure it's not an other libaray.\n        $wrap = _this.$wrap,\n        // 图片容器\n        $queue = $wrap.find('.filelist'),\n        // 状态栏，包括进度和控制按钮\n        $statusBar = $wrap.find('.statusBar'),\n        // 文件总体选择信息。\n        $info = $statusBar.find('.info'),\n        // 上传按钮\n        $upload = $wrap.find('.uploadBtn'),\n        // 上传按钮\n        $filePickerBtn = $wrap.find('.filePickerBtn'),\n        // 上传按钮\n        $filePickerBlock = $wrap.find('.filePickerBlock'),\n        // 没选择文件之前的内容。\n        $placeHolder = $wrap.find('.placeholder'),\n        // 总体进度条\n        $progress = $statusBar.find('.progress').hide(),\n        // 添加的文件数量\n        fileCount = 0,\n        // 添加的文件总大小\n        fileSize = 0,\n        // 优化retina, 在retina下这个值是2\n        ratio = window.devicePixelRatio || 1,\n        // 缩略图大小\n        thumbnailWidth = 113 * ratio,\n        thumbnailHeight = 113 * ratio,\n        // 可能有pedding, ready, uploading, confirm, done.\n        state = '',\n        // 所有文件的进度信息，key为file id\n        percentages = {},\n        supportTransition = (function () {\n          var s = document.createElement('p').style,\n            r =\n              'transition' in s ||\n              'WebkitTransition' in s ||\n              'MozTransition' in s ||\n              'msTransition' in s ||\n              'OTransition' in s\n          s = null\n          return r\n        })(),\n        // WebUploader实例\n        uploader,\n        actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n        acceptExtensions = (editor.getOpt('imageAllowFiles') || [])\n          .join('')\n          .replace(/\\./g, ',')\n          .replace(/^[,]/, ''),\n        imageMaxSize = editor.getOpt('imageMaxSize'),\n        imageCompressBorder = editor.getOpt('imageCompressBorder')\n\n      if (!WebUploader.Uploader.support()) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorNotSupport))\n          .hide()\n        return\n      } else if (!editor.getOpt('imageActionName')) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorLoadConfig))\n          .hide()\n        return\n      }\n\n      uploader = _this.uploader = WebUploader.create({\n        pick: {\n          id: '#filePickerReady',\n          label: lang.uploadSelectFile,\n        },\n        accept: {\n          title: 'Images',\n          extensions: acceptExtensions,\n          mimeTypes: 'image/*',\n        },\n        swf: '../../third-party/webuploader/Uploader.swf',\n        server: actionUrl,\n        fileVal: editor.getOpt('imageFieldName'),\n        duplicate: true,\n        fileSingleSizeLimit: imageMaxSize, // 默认 2 M\n        compress: editor.getOpt('imageCompressEnable')\n          ? {\n              width: imageCompressBorder,\n              height: imageCompressBorder,\n              // 图片质量，只有type为`image/jpeg`的时候才有效。\n              quality: 90,\n              // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n              allowMagnify: false,\n              // 是否允许裁剪。\n              crop: false,\n              // 是否保留头部meta信息。\n              preserveHeaders: true,\n            }\n          : false,\n      })\n      uploader.addButton({\n        id: '#filePickerBlock',\n      })\n      uploader.addButton({\n        id: '#filePickerBtn',\n        label: lang.uploadAddFile,\n      })\n\n      setState('pedding')\n\n      // 当有文件添加进来时执行，负责view的创建\n      function addFile(file) {\n        var $li = $(\n            '<li id=\"' +\n              file.id +\n              '\">' +\n              '<p class=\"title\">' +\n              file.name +\n              '</p>' +\n              '<p class=\"imgWrap\"></p>' +\n              '<p class=\"progress\"><span></span></p>' +\n              '</li>'\n          ),\n          $btns = $(\n            '<div class=\"file-panel\">' +\n              '<span class=\"cancel\">' +\n              lang.uploadDelete +\n              '</span>' +\n              '<span class=\"rotateRight\">' +\n              lang.uploadTurnRight +\n              '</span>' +\n              '<span class=\"rotateLeft\">' +\n              lang.uploadTurnLeft +\n              '</span></div>'\n          ).appendTo($li),\n          $prgress = $li.find('p.progress span'),\n          $wrap = $li.find('p.imgWrap'),\n          $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n          showError = function (code) {\n            switch (code) {\n              case 'exceed_size':\n                text = lang.errorExceedSize\n                break\n              case 'interrupt':\n                text = lang.errorInterrupt\n                break\n              case 'http':\n                text = lang.errorHttp\n                break\n              case 'not_allow_type':\n                text = lang.errorFileType\n                break\n              default:\n                text = lang.errorUploadRetry\n                break\n            }\n            $info.text(text).show()\n          }\n\n        if (file.getStatus() === 'invalid') {\n          showError(file.statusText)\n        } else {\n          $wrap.text(lang.uploadPreview)\n          if (browser.ie && browser.version <= 7) {\n            $wrap.text(lang.uploadNoPreview)\n          } else {\n            uploader.makeThumb(\n              file,\n              function (error, src) {\n                if (error || !src) {\n                  $wrap.text(lang.uploadNoPreview)\n                } else {\n                  var $img = $('<img src=\"' + src + '\">')\n                  $wrap.empty().append($img)\n                  $img.on('error', function () {\n                    $wrap.text(lang.uploadNoPreview)\n                  })\n                }\n              },\n              thumbnailWidth,\n              thumbnailHeight\n            )\n          }\n          percentages[file.id] = [file.size, 0]\n          file.rotation = 0\n\n          /* 检查文件格式 */\n          if (\n            !file.ext ||\n            acceptExtensions.indexOf(file.ext.toLowerCase()) == -1\n          ) {\n            showError('not_allow_type')\n            uploader.removeFile(file)\n          }\n        }\n\n        file.on('statuschange', function (cur, prev) {\n          if (prev === 'progress') {\n            $prgress.hide().width(0)\n          } else if (prev === 'queued') {\n            $li.off('mouseenter mouseleave')\n            $btns.remove()\n          }\n          // 成功\n          if (cur === 'error' || cur === 'invalid') {\n            showError(file.statusText)\n            percentages[file.id][1] = 1\n          } else if (cur === 'interrupt') {\n            showError('interrupt')\n          } else if (cur === 'queued') {\n            percentages[file.id][1] = 0\n          } else if (cur === 'progress') {\n            $info.hide()\n            $prgress.css('display', 'block')\n          } else if (cur === 'complete') {\n          }\n\n          $li.removeClass('state-' + prev).addClass('state-' + cur)\n        })\n\n        $li.on('mouseenter', function () {\n          $btns.stop().animate({ height: 30 })\n        })\n        $li.on('mouseleave', function () {\n          $btns.stop().animate({ height: 0 })\n        })\n\n        $btns.on('click', 'span', function () {\n          var index = $(this).index(),\n            deg\n\n          switch (index) {\n            case 0:\n              uploader.removeFile(file)\n              return\n            case 1:\n              file.rotation += 90\n              break\n            case 2:\n              file.rotation -= 90\n              break\n          }\n\n          if (supportTransition) {\n            deg = 'rotate(' + file.rotation + 'deg)'\n            $wrap.css({\n              '-webkit-transform': deg,\n              '-mos-transform': deg,\n              '-o-transform': deg,\n              transform: deg,\n            })\n          } else {\n            $wrap.css(\n              'filter',\n              'progid:DXImageTransform.Microsoft.BasicImage(rotation=' +\n                (~~(((file.rotation / 90) % 4) + 4) % 4) +\n                ')'\n            )\n          }\n        })\n\n        $li.insertBefore($filePickerBlock)\n      }\n\n      // 负责view的销毁\n      function removeFile(file) {\n        var $li = $('#' + file.id)\n        delete percentages[file.id]\n        updateTotalProgress()\n        $li.off().find('.file-panel').off().end().remove()\n      }\n\n      function updateTotalProgress() {\n        var loaded = 0,\n          total = 0,\n          spans = $progress.children(),\n          percent\n\n        $.each(percentages, function (k, v) {\n          total += v[0]\n          loaded += v[0] * v[1]\n        })\n\n        percent = total ? loaded / total : 0\n\n        spans.eq(0).text(Math.round(percent * 100) + '%')\n        spans.eq(1).css('width', Math.round(percent * 100) + '%')\n        updateStatus()\n      }\n\n      function setState(val, files) {\n        if (val != state) {\n          var stats = uploader.getStats()\n\n          $upload.removeClass('state-' + state)\n          $upload.addClass('state-' + val)\n\n          switch (val) {\n            /* 未选择文件 */\n            case 'pedding':\n              $queue.addClass('element-invisible')\n              $statusBar.addClass('element-invisible')\n              $placeHolder.removeClass('element-invisible')\n              $progress.hide()\n              $info.hide()\n              uploader.refresh()\n              break\n\n            /* 可以开始上传 */\n            case 'ready':\n              $placeHolder.addClass('element-invisible')\n              $queue.removeClass('element-invisible')\n              $statusBar.removeClass('element-invisible')\n              $progress.hide()\n              $info.show()\n              $upload.text(lang.uploadStart)\n              uploader.refresh()\n              break\n\n            /* 上传中 */\n            case 'uploading':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadPause)\n              break\n\n            /* 暂停上传 */\n            case 'paused':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadContinue)\n              break\n\n            case 'confirm':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadStart)\n\n              stats = uploader.getStats()\n              if (stats.successNum && !stats.uploadFailNum) {\n                setState('finish')\n                return\n              }\n              break\n\n            case 'finish':\n              $progress.hide()\n              $info.show()\n              if (stats.uploadFailNum) {\n                $upload.text(lang.uploadRetry)\n              } else {\n                $upload.text(lang.uploadStart)\n              }\n              break\n          }\n\n          state = val\n          updateStatus()\n        }\n\n        if (!_this.getQueueCount()) {\n          $upload.addClass('disabled')\n        } else {\n          $upload.removeClass('disabled')\n        }\n      }\n\n      function updateStatus() {\n        var text = '',\n          stats\n\n        if (state === 'ready') {\n          text = lang.updateStatusReady\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n        } else if (state === 'confirm') {\n          stats = uploader.getStats()\n          if (stats.uploadFailNum) {\n            text = lang.updateStatusConfirm\n              .replace('_', stats.successNum)\n              .replace('_', stats.successNum)\n          }\n        } else {\n          stats = uploader.getStats()\n          text = lang.updateStatusFinish\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n            .replace('_', stats.successNum)\n\n          if (stats.uploadFailNum) {\n            text += lang.updateStatusError.replace('_', stats.uploadFailNum)\n          }\n        }\n\n        $info.html(text)\n      }\n\n      uploader.on('fileQueued', function (file) {\n        fileCount++\n        fileSize += file.size\n\n        if (fileCount === 1) {\n          $placeHolder.addClass('element-invisible')\n          $statusBar.show()\n        }\n\n        addFile(file)\n      })\n\n      uploader.on('fileDequeued', function (file) {\n        if (\n          file.ext &&\n          acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 &&\n          file.size <= imageMaxSize &&\n          fileCount > 0\n        ) {\n          fileCount--\n          fileSize -= file.size\n        }\n\n        removeFile(file)\n        updateTotalProgress()\n      })\n\n      uploader.on('filesQueued', function (file) {\n        if (\n          !uploader.isInProgress() &&\n          (state == 'pedding' ||\n            state == 'finish' ||\n            state == 'confirm' ||\n            state == 'ready')\n        ) {\n          setState('ready')\n        }\n        updateTotalProgress()\n      })\n\n      uploader.on('all', function (type, files) {\n        switch (type) {\n          case 'uploadFinished':\n            setState('confirm', files)\n            break\n          case 'startUpload':\n            /* 添加额外的GET参数 */\n            var params =\n                utils.serializeParam(editor.queryCommandValue('serverparam')) ||\n                '',\n              url = utils.formatUrl(\n                actionUrl +\n                  (actionUrl.indexOf('?') == -1 ? '?' : '&') +\n                  'encode=utf-8&' +\n                  params\n              )\n            uploader.option('server', url)\n            setState('uploading', files)\n            break\n          case 'stopUpload':\n            setState('paused', files)\n            break\n        }\n      })\n\n      uploader.on('uploadBeforeSend', function (file, data, header) {\n        //这里可以通过data对象添加POST参数\n        if (actionUrl.toLowerCase().indexOf('jsp') != -1) {\n          header['X-Requested-With'] = 'XMLHttpRequest'\n        }\n      })\n\n      uploader.on('uploadProgress', function (file, percentage) {\n        var $li = $('#' + file.id),\n          $percent = $li.find('.progress span')\n\n        $percent.css('width', percentage * 100 + '%')\n        percentages[file.id][1] = percentage\n        updateTotalProgress()\n      })\n\n      uploader.on('uploadSuccess', function (file, ret) {\n        var $file = $('#' + file.id)\n        try {\n          var responseText = ret._raw || ret,\n            json = utils.str2json(responseText)\n          if (json.state == 'SUCCESS') {\n            _this.imageList.push(json)\n            $file.append('<span class=\"success\"></span>')\n          } else {\n            $file.find('.error').text(json.state).show()\n          }\n        } catch (e) {\n          $file.find('.error').text(lang.errorServerUpload).show()\n        }\n      })\n\n      uploader.on('uploadError', function (file, code) {})\n      uploader.on('error', function (code, file) {\n        if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {\n          addFile(file)\n        }\n      })\n      uploader.on('uploadComplete', function (file, ret) {})\n\n      $upload.on('click', function () {\n        if ($(this).hasClass('disabled')) {\n          return false\n        }\n\n        if (state === 'ready') {\n          uploader.upload()\n        } else if (state === 'paused') {\n          uploader.upload()\n        } else if (state === 'uploading') {\n          uploader.stop()\n        }\n      })\n\n      $upload.addClass('state-' + state)\n      updateTotalProgress()\n    },\n    getQueueCount: function () {\n      var file,\n        i,\n        status,\n        readyFile = 0,\n        files = this.uploader.getFiles()\n      for (i = 0; (file = files[i++]); ) {\n        status = file.getStatus()\n        if (status == 'queued' || status == 'uploading' || status == 'progress')\n          readyFile++\n      }\n      return readyFile\n    },\n    destroy: function () {\n      this.$wrap.remove()\n    },\n    getInsertList: function () {\n      var i,\n        data,\n        list = [],\n        align = getAlign(),\n        prefix = editor.getOpt('imageUrlPrefix')\n      for (i = 0; i < this.imageList.length; i++) {\n        data = this.imageList[i]\n        list.push({\n          src: prefix + data.url,\n          _src: prefix + data.url,\n          alt: data.original,\n          floatStyle: align,\n        })\n      }\n      return list\n    },\n  }\n\n  /* 在线图片 */\n  function OnlineImage(target) {\n    this.container = utils.isString(target)\n      ? document.getElementById(target)\n      : target\n    this.init()\n  }\n  OnlineImage.prototype = {\n    init: function () {\n      this.reset()\n      this.initEvents()\n    },\n    /* 初始化容器 */\n    initContainer: function () {\n      this.container.innerHTML = ''\n      this.list = document.createElement('ul')\n      this.clearFloat = document.createElement('li')\n\n      domUtils.addClass(this.list, 'list')\n      domUtils.addClass(this.clearFloat, 'clearFloat')\n\n      this.list.appendChild(this.clearFloat)\n      this.container.appendChild(this.list)\n    },\n    /* 初始化滚动事件,滚动到地步自动拉取数据 */\n    initEvents: function () {\n      var _this = this\n\n      /* 滚动拉取图片 */\n      domUtils.on($G('imageList'), 'scroll', function (e) {\n        var panel = this\n        if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n          _this.getImageData()\n        }\n      })\n      /* 选中图片 */\n      domUtils.on(this.container, 'click', function (e) {\n        var target = e.target || e.srcElement,\n          li = target.parentNode\n\n        if (li.tagName.toLowerCase() == 'li') {\n          if (domUtils.hasClass(li, 'selected')) {\n            domUtils.removeClasses(li, 'selected')\n          } else {\n            domUtils.addClass(li, 'selected')\n          }\n        }\n      })\n    },\n    /* 初始化第一次的数据 */\n    initData: function () {\n      /* 拉取数据需要使用的值 */\n      this.state = 0\n      this.listSize = editor.getOpt('imageManagerListSize')\n      this.listIndex = 0\n      this.listEnd = false\n\n      /* 第一次拉取数据 */\n      this.getImageData()\n    },\n    /* 重置界面 */\n    reset: function () {\n      this.initContainer()\n      this.initData()\n    },\n    /* 向后台拉取图片列表数据 */\n    getImageData: function () {\n      var _this = this\n\n      if (!_this.listEnd && !this.isLoadingData) {\n        this.isLoadingData = true\n        var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),\n          isJsonp = utils.isCrossDomainUrl(url)\n        ajax.request(url, {\n          timeout: 100000,\n          dataType: isJsonp ? 'jsonp' : '',\n          data: utils.extend(\n            {\n              start: this.listIndex,\n              size: this.listSize,\n            },\n            editor.queryCommandValue('serverparam')\n          ),\n          method: 'get',\n          onsuccess: function (r) {\n            try {\n              var json = isJsonp ? r : eval('(' + r.responseText + ')')\n              if (json.state == 'SUCCESS') {\n                _this.pushData(json.list)\n                _this.listIndex =\n                  parseInt(json.start) + parseInt(json.list.length)\n                if (_this.listIndex >= json.total) {\n                  _this.listEnd = true\n                }\n                _this.isLoadingData = false\n              }\n            } catch (e) {\n              if (r.responseText.indexOf('ue_separate_ue') != -1) {\n                var list = r.responseText.split(r.responseText)\n                _this.pushData(list)\n                _this.listIndex = parseInt(list.length)\n                _this.listEnd = true\n                _this.isLoadingData = false\n              }\n            }\n          },\n          onerror: function () {\n            _this.isLoadingData = false\n          },\n        })\n      }\n    },\n    /* 添加图片到列表界面上 */\n    pushData: function (list) {\n      var i,\n        item,\n        img,\n        icon,\n        _this = this,\n        urlPrefix = editor.getOpt('imageManagerUrlPrefix')\n      for (i = 0; i < list.length; i++) {\n        if (list[i] && list[i].url) {\n          item = document.createElement('li')\n          img = document.createElement('img')\n          icon = document.createElement('span')\n\n          domUtils.on(\n            img,\n            'load',\n            (function (image) {\n              return function () {\n                _this.scale(\n                  image,\n                  image.parentNode.offsetWidth,\n                  image.parentNode.offsetHeight\n                )\n              }\n            })(img)\n          )\n          img.width = 113\n          img.setAttribute(\n            'src',\n            urlPrefix +\n              list[i].url +\n              (list[i].url.indexOf('?') == -1 ? '?noCache=' : '&noCache=') +\n              (+new Date()).toString(36)\n          )\n          img.setAttribute('_src', urlPrefix + list[i].url)\n          domUtils.addClass(icon, 'icon')\n\n          item.appendChild(img)\n          item.appendChild(icon)\n          this.list.insertBefore(item, this.clearFloat)\n        }\n      }\n    },\n    /* 改变图片大小 */\n    scale: function (img, w, h, type) {\n      var ow = img.width,\n        oh = img.height\n\n      if (type == 'justify') {\n        if (ow >= oh) {\n          img.width = w\n          img.height = (h * oh) / ow\n          img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'\n        } else {\n          img.width = (w * ow) / oh\n          img.height = h\n          img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'\n        }\n      } else {\n        if (ow >= oh) {\n          img.width = (w * ow) / oh\n          img.height = h\n          img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'\n        } else {\n          img.width = w\n          img.height = (h * oh) / ow\n          img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'\n        }\n      }\n    },\n    getInsertList: function () {\n      var i,\n        lis = this.list.children,\n        list = [],\n        align = getAlign()\n      for (i = 0; i < lis.length; i++) {\n        if (domUtils.hasClass(lis[i], 'selected')) {\n          var img = lis[i].firstChild,\n            src = img.getAttribute('_src')\n          list.push({\n            src: src,\n            _src: src,\n            alt: src.substr(src.lastIndexOf('/') + 1),\n            floatStyle: align,\n          })\n        }\n      }\n      return list\n    },\n  }\n\n  /*搜索图片 */\n  function SearchImage() {\n    this.init()\n  }\n  SearchImage.prototype = {\n    init: function () {\n      this.initEvents()\n    },\n    initEvents: function () {\n      var _this = this\n\n      /* 点击搜索按钮 */\n      domUtils.on($G('searchBtn'), 'click', function () {\n        var key = $G('searchTxt').value\n        if (key && key != lang.searchRemind) {\n          _this.getImageData()\n        }\n      })\n      /* 点击清除妞 */\n      domUtils.on($G('searchReset'), 'click', function () {\n        $G('searchTxt').value = lang.searchRemind\n        $G('searchListUl').innerHTML = ''\n        $G('searchType').selectedIndex = 0\n      })\n      /* 搜索框聚焦 */\n      domUtils.on($G('searchTxt'), 'focus', function () {\n        var key = $G('searchTxt').value\n        if (key && key == lang.searchRemind) {\n          $G('searchTxt').value = ''\n        }\n      })\n      /* 搜索框回车键搜索 */\n      domUtils.on($G('searchTxt'), 'keydown', function (e) {\n        var keyCode = e.keyCode || e.which\n        if (keyCode == 13) {\n          $G('searchBtn').click()\n        }\n      })\n\n      /* 选中图片 */\n      domUtils.on($G('searchList'), 'click', function (e) {\n        var target = e.target || e.srcElement,\n          li = target.parentNode.parentNode\n\n        if (li.tagName.toLowerCase() == 'li') {\n          if (domUtils.hasClass(li, 'selected')) {\n            domUtils.removeClasses(li, 'selected')\n          } else {\n            domUtils.addClass(li, 'selected')\n          }\n        }\n      })\n    },\n    /* 改变图片大小 */\n    scale: function (img, w, h) {\n      var ow = img.width,\n        oh = img.height\n\n      if (ow >= oh) {\n        img.width = (w * ow) / oh\n        img.height = h\n        img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'\n      } else {\n        img.width = w\n        img.height = (h * oh) / ow\n        img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'\n      }\n    },\n    getImageData: function () {\n      var _this = this,\n        key = $G('searchTxt').value,\n        type = $G('searchType').value,\n        keepOriginName = editor.options.keepOriginName ? '1' : '0',\n        url =\n          'http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&st=-1&tn=baiduimagejson&istype=2&rn=32&fm=index&pv=&word=' +\n          key +\n          type +\n          '&ie=utf-8&oe=utf-8&keeporiginname=' +\n          keepOriginName +\n          '&' +\n          +new Date()\n\n      $G('searchListUl').innerHTML = lang.searchLoading\n      ajax.request(url, {\n        dataType: 'jsonp',\n        charset: 'GB18030',\n        onsuccess: function (json) {\n          var list = []\n          if (json && json.data) {\n            for (var i = 0; i < json.data.length; i++) {\n              if (json.data[i].objURL) {\n                list.push({\n                  title: json.data[i].fromPageTitleEnc,\n                  src: json.data[i].objURL,\n                  url: json.data[i].fromURL,\n                })\n              }\n            }\n          }\n          _this.setList(list)\n        },\n        onerror: function () {\n          $G('searchListUl').innerHTML = lang.searchRetry\n        },\n      })\n    },\n    /* 添加图片到列表界面上 */\n    setList: function (list) {\n      var i,\n        item,\n        p,\n        img,\n        link,\n        _this = this,\n        listUl = $G('searchListUl')\n\n      listUl.innerHTML = ''\n      if (list.length) {\n        for (i = 0; i < list.length; i++) {\n          item = document.createElement('li')\n          p = document.createElement('p')\n          img = document.createElement('img')\n          link = document.createElement('a')\n\n          img.onload = function () {\n            _this.scale(this, 113, 113)\n          }\n          img.width = 113\n          img.setAttribute('src', list[i].src)\n\n          link.href = list[i].url\n          link.target = '_blank'\n          link.title = list[i].title\n          link.innerHTML = list[i].title\n\n          p.appendChild(img)\n          item.appendChild(p)\n          item.appendChild(link)\n          listUl.appendChild(item)\n        }\n      } else {\n        listUl.innerHTML = lang.searchRetry\n      }\n    },\n    getInsertList: function () {\n      var child,\n        src,\n        align = getAlign(),\n        list = [],\n        items = $G('searchListUl').children\n      for (var i = 0; i < items.length; i++) {\n        child = items[i].firstChild && items[i].firstChild.firstChild\n        if (\n          child.tagName &&\n          child.tagName.toLowerCase() == 'img' &&\n          domUtils.hasClass(items[i], 'selected')\n        ) {\n          src = child.src\n          list.push({\n            src: src,\n            _src: src,\n            alt: src.substr(src.lastIndexOf('/') + 1),\n            floatStyle: align,\n          })\n        }\n      }\n      return list\n    },\n  }\n})()\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/insertframe/insertframe.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .warp {width: 320px;height: 153px;margin-left:5px;padding: 20px 0 0 15px;position: relative;}\n        #url {width: 290px; margin-bottom: 2px; margin-left: -6px; margin-left: -2px\\9;*margin-left:0;_margin-left:0; }\n        .format span{display: inline-block; width: 58px;text-align: center; zoom:1;}\n        table td{padding:5px 0;}\n        #align{width: 65px;height: 23px;line-height: 22px;}\n    </style>\n</head>\n<body>\n<div class=\"warp\">\n        <table width=\"300\" cellpadding=\"0\" cellspacing=\"0\">\n            <tr>\n                <td colspan=\"2\" class=\"format\">\n                    <span><var id=\"lang_input_address\"></var></span>\n                    <input style=\"width:200px\" id=\"url\" type=\"text\" value=\"\"/>\n                </td>\n            </tr>\n            <tr>\n                <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_width\"></var></span><input style=\"width:200px\" type=\"text\" id=\"width\"/> px</td>\n\n            </tr>\n            <tr>\n                <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_height\"></var></span><input style=\"width:200px\" type=\"text\" id=\"height\"/> px</td>\n            </tr>\n            <tr>\n                <td><span><var id=\"lang_input_isScroll\"></var></span><input type=\"checkbox\" id=\"scroll\"/> </td>\n                <td><span><var id=\"lang_input_frameborder\"></var></span><input type=\"checkbox\" id=\"frameborder\"/> </td>\n            </tr>\n\n            <tr>\n                <td colspan=\"2\"><span><var id=\"lang_input_alignMode\"></var></span>\n                    <select id=\"align\">\n                        <option value=\"\"></option>\n                        <option value=\"left\"></option>\n                        <option value=\"right\"></option>\n                    </select>\n                </td>\n            </tr>\n        </table>\n</div>\n<script type=\"text/javascript\">\n    var iframe = editor._iframe;\n    if(iframe){\n        $G(\"url\").value = iframe.getAttribute(\"src\")||\"\";\n        $G(\"width\").value = iframe.getAttribute(\"width\")||iframe.style.width.replace(\"px\",\"\")||\"\";\n        $G(\"height\").value = iframe.getAttribute(\"height\") || iframe.style.height.replace(\"px\",\"\") ||\"\";\n        $G(\"scroll\").checked = (iframe.getAttribute(\"scrolling\") == \"yes\") ? true : false;\n        $G(\"frameborder\").checked = (iframe.getAttribute(\"frameborder\") == \"1\") ? true : false;\n        $G(\"align\").value = iframe.align ? iframe.align : \"\";\n    }\n    function queding(){\n        var  url = $G(\"url\").value.replace(/^\\s*|\\s*$/ig,\"\"),\n                width = $G(\"width\").value,\n                height = $G(\"height\").value,\n                scroll = $G(\"scroll\"),\n                frameborder = $G(\"frameborder\"),\n                float = $G(\"align\").value,\n                newIframe = editor.document.createElement(\"iframe\"),\n                div;\n        if(!url){\n            alert(lang.enterAddress);\n            return false;\n        }\n        newIframe.setAttribute(\"src\",/http:\\/\\/|https:\\/\\//ig.test(url) ? url : \"http://\"+url);\n        /^[1-9]+[.]?\\d*$/g.test( width ) ? newIframe.setAttribute(\"width\",width) : \"\";\n        /^[1-9]+[.]?\\d*$/g.test( height ) ? newIframe.setAttribute(\"height\",height) : \"\";\n        scroll.checked ?  newIframe.setAttribute(\"scrolling\",\"yes\") : newIframe.setAttribute(\"scrolling\",\"no\");\n        frameborder.checked ?  newIframe.setAttribute(\"frameborder\",\"1\",0) : newIframe.setAttribute(\"frameborder\",\"0\",0);\n        float ? newIframe.setAttribute(\"align\",float) :  newIframe.setAttribute(\"align\",\"\");\n        if(iframe){\n            iframe.parentNode.insertBefore(newIframe,iframe);\n            domUtils.remove(iframe);\n        }else{\n            div = editor.document.createElement(\"div\");\n            div.appendChild(newIframe);\n            editor.execCommand(\"inserthtml\",div.innerHTML);\n        }\n        editor._iframe = null;\n        dialog.close();\n    }\n    dialog.onok = queding;\n    $G(\"url\").onkeydown = function(evt){\n        evt = evt || event;\n        if(evt.keyCode == 13){\n            queding();\n        }\n    };\n    $focus($G( \"url\" ));\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/internal.js",
    "content": "(function () {\n    var parent = window.parent;\n    //dialog对象\n    dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )];\n    //当前打开dialog的编辑器实例\n    editor = dialog.editor;\n\n    UE = parent.UE;\n\n    domUtils = UE.dom.domUtils;\n\n    utils = UE.utils;\n\n    browser = UE.browser;\n\n    ajax = UE.ajax;\n\n    $G = function ( id ) {\n        return document.getElementById( id )\n    };\n    //focus元素\n    $focus = function ( node ) {\n        setTimeout( function () {\n            if ( browser.ie ) {\n                var r = node.createTextRange();\n                r.collapse( false );\n                r.select();\n            } else {\n                node.focus()\n            }\n        }, 0 )\n    };\n    utils.loadFile(document,{\n        href:editor.options.themePath + editor.options.theme + \"/dialogbase.css?cache=\"+Math.random(),\n        tag:\"link\",\n        type:\"text/css\",\n        rel:\"stylesheet\"\n    });\n    lang = editor.getLang(dialog.className.split( \"-\" )[2]);\n    if(lang){\n        domUtils.on(window,'load',function () {\n\n            var langImgPath = editor.options.langPath + editor.options.lang + \"/images/\";\n            //针对静态资源\n            for ( var i in lang[\"static\"] ) {\n                var dom = $G( i );\n                if(!dom) continue;\n                var tagName = dom.tagName,\n                    content = lang[\"static\"][i];\n                if(content.src){\n                    //clone\n                    content = utils.extend({},content,false);\n                    content.src = langImgPath + content.src;\n                }\n                if(content.style){\n                    content = utils.extend({},content,false);\n                    content.style = content.style.replace(/url\\s*\\(/g,\"url(\" + langImgPath)\n                }\n                switch ( tagName.toLowerCase() ) {\n                    case \"var\":\n                        dom.parentNode.replaceChild( document.createTextNode( content ), dom );\n                        break;\n                    case \"select\":\n                        var ops = dom.options;\n                        for ( var j = 0, oj; oj = ops[j]; ) {\n                            oj.innerHTML = content.options[j++];\n                        }\n                        for ( var p in content ) {\n                            p != \"options\" && dom.setAttribute( p, content[p] );\n                        }\n                        break;\n                    default :\n                        domUtils.setAttributes( dom, content);\n                }\n            }\n        } );\n    }\n\n\n})();\n\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/link/link.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        *{margin:0;padding:0;color: #838383;}\n        table{font-size: 12px;margin: 10px;line-height: 30px}\n        .txt{width:300px;height:21px;line-height:21px;border:1px solid #d7d7d7;}\n    </style>\n</head>\n<body>\n    <table>\n        <tr>\n            <td><label for=\"text\"> <var id=\"lang_input_text\"></var></label></td>\n            <td><input class=\"txt\" id=\"text\" type=\"text\" disabled=\"true\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"href\"> <var id=\"lang_input_url\"></var></label></td>\n            <td><input class=\"txt\" id=\"href\" type=\"text\" /></td>\n        </tr>\n        <tr>\n            <td><label for=\"title\"> <var id=\"lang_input_title\"></var></label></td>\n            <td><input class=\"txt\" id=\"title\" type=\"text\"/></td>\n        </tr>\n        <tr>\n             <td colspan=\"2\">\n                 <label for=\"target\"><var id=\"lang_input_target\"></var></label>\n                 <input id=\"target\" type=\"checkbox\"/>\n             </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" id=\"msg\"></td>\n        </tr>\n    </table>\n<script type=\"text/javascript\">\n\n    editor.setOpt('allowLinkProtocols', ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:']);\n    var allowLinkProtocols = editor.getOpt('allowLinkProtocols');\n\n    var range = editor.selection.getRange(),\n        link = range.collapsed ? editor.queryCommandValue( \"link\" ) : editor.selection.getStart(),\n        url,\n        text = $G('text'),\n        rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(),'a',true),\n        orgText;\n\n    link = domUtils.findParentByTagName( link, \"a\", true );\n\n    if(link){\n        url = utils.html(link.getAttribute( '_href' ) || link.getAttribute( 'href', 2 ));\n\n        if(rangeLink === link && !link.getElementsByTagName('img').length){\n            text.removeAttribute('disabled');\n            orgText = text.value = link[browser.ie ? 'innerText':'textContent'];\n        }else{\n            text.setAttribute('disabled','true');\n            text.value = lang.validLink;\n        }\n\n    }else{\n        if(range.collapsed){\n            text.removeAttribute('disabled');\n            text.value = '';\n        }else{\n            text.setAttribute('disabled','true');\n            text.value = lang.validLink;\n        }\n\n    }\n    $G(\"title\").value = url ? link.title : \"\";\n    $G(\"href\").value = url ? url: '';\n    $G(\"target\").checked = url && link.target == \"_blank\" ? true :  false;\n    $focus($G(\"href\"));\n\n    function handleDialogOk(){\n        var href =$G('href').value.replace(/^\\s+|\\s+$/g, '');\n        if(href){\n            if(!hrefStartWith(href, allowLinkProtocols)) {\n                href  = \"http://\" + href;\n            }\n            var obj = {\n                'href' : href,\n                'target' : $G(\"target\").checked ? \"_blank\" : '_self',\n                'title' : $G(\"title\").value.replace(/^\\s+|\\s+$/g, ''),\n                '_href':href\n            };\n            //修改链接内容的情况太特殊了，所以先做到这里了\n            //todo:情况多的时候，做到command里\n            if(orgText && text.value != orgText){\n                link[browser.ie ? 'innerText' : 'textContent'] =  obj.textValue = text.value;\n                range.selectNode(link).select()\n            }\n            if(range.collapsed){\n                obj.textValue = text.value;\n            }\n            editor.execCommand('link',utils.clearEmptyAttrs(obj) );\n            dialog.close();\n        }\n    }\n    dialog.onok = handleDialogOk;\n    $G('href').onkeydown = $G('title').onkeydown = function(evt){\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            handleDialogOk();\n            return false;\n        }\n    };\n    $G('href').onblur = function(){\n        if(!hrefStartWith(this.value, allowLinkProtocols)){\n            $G(\"msg\").innerHTML = \"<span style='color: red'>\"+lang.httpPrompt+\"</span>\";\n        }else{\n            $G(\"msg\").innerHTML = \"\";\n        }\n    };\n\n    function hrefStartWith(href,arr){\n        href = href.replace(/^\\s+|\\s+$/g, '');\n        for(var i=0,ai;ai=arr[i++];){\n            if(href.indexOf(ai)==0){\n                return true;\n            }\n        }\n        return false;\n    }\n\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/map/map.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <script type=\"text/javascript\" src=\"http://api.map.baidu.com/api?v=1.1&services=true\"></script>\n    <style type=\"text/css\">\n        .content{width:530px; height: 350px;margin: 10px auto;}\n        .content table{width: 100%}\n        .content table td{vertical-align: middle;}\n        #city,#address{height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}\n        #city{width:60px}\n        #address{width:130px}\n        #is_dynamic_label span{vertical-align:middle;margin: 3px 0px 3px 3px;}\n        #is_dynamic_label input{vertical-align:middle;margin: 3px 3px 3px 50px;}\n    </style>\n</head>\n<body>\n<div class=\"content\">\n    <table>\n        <tr>\n            <td><var id=\"lang_city\"></var>:</td>\n            <td><input id=\"city\" type=\"text\" /></td>\n            <td><var id=\"lang_address\"></var>:</td>\n            <td><input id=\"address\" type=\"text\" value=\"\" /></td>\n            <td><a href=\"javascript:doSearch()\" class=\"button\"><var id=\"lang_search\"></var></a></td>\n            <td><label id=\"is_dynamic_label\" for=\"is_dynamic\"><input id=\"is_dynamic\" type=\"checkbox\" name=\"is_dynamic\" /><span><var id=\"lang_dynamicmap\"></var></span></label></td>\n        </tr>\n    </table>\n    <div style=\"width:100%;height:340px;margin:5px auto;border:1px solid gray\" id=\"container\"></div>\n\n</div>\n<script type=\"text/javascript\">\n    var map = new BMap.Map(\"container\"),marker,point,styleStr;\n    map.enableScrollWheelZoom();\n    map.enableContinuousZoom();\n    function doSearch(){\n        if (!document.getElementById('city').value) {\n            alert(lang.cityMsg);\n            return;\n        }\n        var search = new BMap.LocalSearch(document.getElementById('city').value, {\n            onSearchComplete: function (results){\n                if (results && results.getNumPois()) {\n                    var points = [];\n                    for (var i=0; i<results.getCurrentNumPois(); i++) {\n                        points.push(results.getPoi(i).point);\n                    }\n                    if (points.length > 1) {\n                        map.setViewport(points);\n                    } else {\n                        map.centerAndZoom(points[0], 13);\n                    }\n                    point = map.getCenter();\n                    marker.setPoint(point);\n                } else {\n                    alert(lang.errorMsg);\n                }\n            }\n        });\n        search.search(document.getElementById('address').value || document.getElementById('city').value);\n    }\n    //获得参数\n    function getPars(str,par){\n        var reg = new RegExp(par+\"=((\\\\d+|[.,])*)\",\"g\");\n        return reg.exec(str)[1];\n    }\n    function init(){\n        var mapNode = editor.selection.getRange().getClosedNode(),\n            isMapImg = mapNode && /api[.]map[.]baidu[.]com/ig.test(mapNode.getAttribute(\"src\")),\n            isMapIframe = mapNode && domUtils.hasClass(mapNode, 'ueditor_baidumap');\n        if(isMapImg || isMapIframe){\n            var url, centerPos, markerPos;\n            if(isMapIframe) {\n                url = decodeURIComponent(mapNode.getAttribute(\"src\"));\n                $G('is_dynamic').checked = true;\n                styleStr = mapNode.style.cssText;\n            } else {\n                url = mapNode.getAttribute(\"src\");\n                styleStr = mapNode.style.cssText;\n            }\n\n            centerPos = getPars(url,\"center\").split(\",\");\n            markerPos = getPars(url, \"markers\").split(\",\");\n            point = new BMap.Point(Number(centerPos[0]),Number(centerPos[1]));\n            marker = new BMap.Marker(new BMap.Point(Number(markerPos[0]), Number(markerPos[1])));\n            map.addControl(new BMap.NavigationControl());\n            map.centerAndZoom(point, Number(getPars(url,\"zoom\")));\n        }else{\n            point = new BMap.Point(116.404, 39.915);    // 创建点坐标\n            marker = new BMap.Marker(point);\n            map.addControl(new BMap.NavigationControl());\n            map.centerAndZoom(point, 10);                     // 初始化地图,设置中心点坐标和地图级别。\n        }\n        marker.enableDragging();\n        map.addOverlay(marker);\n    }\n    init();\n    document.getElementById('address').onkeydown = function (evt){\n        evt = evt || event;\n        if (evt.keyCode == 13) {\n            doSearch();\n        }\n    };\n    dialog.onok = function (){\n        var center = map.getCenter();\n        var zoom = map.zoomLevel;\n        var size = map.getSize();\n        var mapWidth = size.width;\n        var mapHeight = size.height;\n        var point = marker.getPoint();\n\n        if($G('is_dynamic').checked) {\n            var URL = editor.options.UEDITOR_HOME_URL,\n                url = [URL + (/\\/$/.test(URL) ? '':'/') + \"dialogs/map/show.html\" +\n                    '#center=' + center.lng + ',' + center.lat,\n                    '&zoom=' + zoom,\n                    '&width=' + mapWidth,\n                    '&height=' + mapHeight,\n                    '&markers=' + point.lng + ',' + point.lat,\n                    '&markerStyles=' + 'l,A'].join('');\n            editor.execCommand('inserthtml', '<iframe class=\"ueditor_baidumap\" src=\"' + url + '\"' + (styleStr ? ' style=\"' + styleStr + '\"' :'') + ' frameborder=\"0\" width=\"' + (mapWidth+4) + '\" height=\"' + (mapHeight+4) + '\"></iframe>');\n        } else {\n            var url = \"http://api.map.baidu.com/staticimage?center=\" + center.lng + ',' + center.lat +\n                    \"&zoom=\" + zoom + \"&width=\" + size.width + '&height=' + size.height + \"&markers=\" + point.lng + ',' + point.lat;\n            editor.execCommand('inserthtml', '<img width=\"'+ size.width +'\"height=\"'+ size.height +'\" src=\"' + url + '\"' + (styleStr ? ' style=\"' + styleStr + '\"' :'') + '/>');\n        }\n    };\n    document.getElementById(\"address\").focus();\n</script>\n\n\n</body>\n</html>\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/map/show.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n        \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <meta charset=\"utf-8\"/>\n    <meta name=\"keywords\" content=\"百度地图,百度地图API，百度地图自定义工具，百度地图所见即所得工具\"/>\n    <meta name=\"description\" content=\"百度地图API自定义地图，帮助用户在可视化操作下生成百度地图\"/>\n    <title>百度地图API自定义地图</title>\n    <!--引用百度地图API-->\n    <style type=\"text/css\">\n        html, body {\n            margin: 0;\n            padding: 0;\n            overflow: hidden;\n        }\n    </style>\n    <script type=\"text/javascript\" src=\"http://api.map.baidu.com/api?key=&v=1.1&services=true\"></script>\n</head>\n\n<body onload=\"initMap();\">\n<!--百度地图容器-->\n<div style=\"width:697px;height:550px;border:#ccc solid 1px;\" id=\"dituContent\"></div>\n</body>\n<script type=\"text/javascript\">\n    function getParam(name) {\n        return location.href.match(new RegExp('[?#&]' + name + '=([^?#&]+)', 'i')) ? RegExp.$1 : '';\n    }\n    var map, marker;\n    var centerParam = getParam('center');\n    var zoomParam = getParam('zoom');\n    var widthParam = getParam('width');\n    var heightParam = getParam('height');\n    var markersParam = getParam('markers');\n    var markerStylesParam = getParam('markerStyles');\n\n    //创建和初始化地图函数：\n    function initMap() {\n        // [FF]切换模式后报错\n        if (!window.BMap) {\n            return;\n        }\n        var dituContent = document.getElementById('dituContent');\n        dituContent.style.width = widthParam + 'px';\n        dituContent.style.height = heightParam + 'px';\n\n        createMap();//创建地图\n        setMapEvent();//设置地图事件\n        addMapControl();//向地图添加控件\n\n        // 创建标注\n        var markersArr = markersParam.split(',');\n        var point = new BMap.Point(markersArr[0], markersArr[1]);\n        marker = new BMap.Marker(point);\n        marker.enableDragging();\n        map.addOverlay(marker); // 将标注添加到地图中\n\n        if(parent.editor && parent.document.body.contentEditable==\"true\") { //在编辑状态下\n            setMapListener();//地图改变修改外层的iframe标签src属性\n        }\n    }\n\n    //创建地图函数：\n    function createMap() {\n        map = new BMap.Map(\"dituContent\");//在百度地图容器中创建一个地图\n        var centerArr = centerParam.split(',');\n        var point = new BMap.Point(parseFloat(centerArr[0]), parseFloat(centerArr[1]));//定义一个中心点坐标\n        map.centerAndZoom(point, parseInt(zoomParam));//设定地图的中心点和坐标并将地图显示在地图容器中\n    }\n\n    //地图事件设置函数：\n    function setMapEvent() {\n        map.enableDragging();//启用地图拖拽事件，默认启用(可不写)\n        map.enableScrollWheelZoom();//启用地图滚轮放大缩小\n        map.enableDoubleClickZoom();//启用鼠标双击放大，默认启用(可不写)\n        map.enableKeyboard();//启用键盘上下左右键移动地图\n    }\n\n    //地图控件添加函数：\n    function addMapControl() {\n        //向地图中添加缩放控件\n        var ctrl_nav = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE});\n        map.addControl(ctrl_nav);\n        //向地图中添加缩略图控件\n        var ctrl_ove = new BMap.OverviewMapControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1});\n        map.addControl(ctrl_ove);\n        //向地图中添加比例尺控件\n        var ctrl_sca = new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});\n        map.addControl(ctrl_sca);\n    }\n\n    function setMapListener() {\n        var editor = parent.editor, containerIframe,\n            iframes = parent.document.getElementsByTagName('iframe');\n        for (var key in iframes) {\n            if (iframes[key].contentWindow == window) {\n                containerIframe = iframes[key];\n                break;\n            }\n        }\n        if (containerIframe) {\n            map.addEventListener('moveend', mapListenerHandler);\n            map.addEventListener('zoomend', mapListenerHandler);\n            marker.addEventListener('dragend', mapListenerHandler);\n        }\n\n        function mapListenerHandler() {\n            var zoom = map.getZoom(),\n                center = map.getCenter(),\n                marker = window.marker.getPoint();\n            containerIframe.src = containerIframe.src.\n                replace(new RegExp('([?#&])center=([^?#&]+)', 'i'), '$1center=' + center.lng + ',' + center.lat).\n                replace(new RegExp('([?#&])markers=([^?#&]+)', 'i'), '$1markers=' + marker.lng + ',' + marker.lat).\n                replace(new RegExp('([?#&])zoom=([^?#&]+)', 'i'), '$1zoom=' + zoom);\n            editor.fireEvent('saveScene');\n        }\n    }\n</script>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/music/music.css",
    "content": ".wrapper{margin: 5px 10px;}\n\n.searchBar{height:30px;padding:7px 0 3px;text-align:center;}\n.searchBtn{font-size:13px;height:24px;}\n\n.resultBar{width:460px;margin:5px auto;border: 1px solid #CCC;border-radius: 5px;box-shadow: 2px 2px 5px #D3D6DA;overflow: hidden;}\n\n.listPanel{overflow: hidden;}\n.panelon{display:block;}\n.paneloff{display:none}\n\n.page{width:220px;margin:20px auto;overflow: hidden;}\n.pageon{float:right;width:24px;line-height:24px;height:24px;margin-right: 5px;background: none;border: none;color: #000;font-weight: bold;text-align:center}\n.pageoff{float:right;width:24px;line-height:24px;height:24px;cursor:pointer;background-color: #fff;\n   border: 1px solid #E7ECF0;color: #2D64B3;margin-right: 5px;text-decoration: none;text-align:center;}\n\n.m-box{width:460px;}\n.m-m{float: left;line-height: 20px;height: 20px;}\n.m-h{height:24px;line-height:24px;padding-left: 46px;background-color:#FAFAFA;border-bottom: 1px solid #DAD8D8;font-weight: bold;font-size: 12px;color: #333;}\n.m-l{float:left;width:40px; }\n.m-t{float:left;width:140px;}\n.m-s{float:left;width:110px;}\n.m-z{float:left;width:100px;}\n.m-try-t{float: left;width: 60px;;}\n\n.m-try{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/try_music.gif') no-repeat ;}\n.m-trying{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/stop_music.gif') no-repeat ;}\n\n.loading{width:95px;height:7px;font-size:7px;margin:60px auto;background:url(http://static.tieba.baidu.com/tb/editor/images/loading.gif) no-repeat}\n.empty{width:300px;height:40px;padding:2px;margin:50px auto;line-height:40px; color:#006699;text-align:center;}"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/music/music.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n    <title>插入音乐</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"music.css\">\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"searchBar\">\n        <input id=\"J_searchName\" type=\"text\"/>\n        <input type=\"button\" class=\"searchBtn\" id=\"J_searchBtn\">\n    </div>\n    <div class=\"resultBar\" id=\"J_resultBar\">\n        <div class=\"loading\" style=\"display:none\"></div>\n        <div class=\"empty\"><var id=\"lang_input_tips\"></var></div>\n    </div>\n    <div id=\"J_preview\"></div>\n</div>\n<script type=\"text/javascript\" src=\"music.js\"></script>\n<script type=\"text/javascript\">\n    var music = new Music;\n    dialog.onok = function () {\n        music.exec();\n    };\n    dialog.oncancel = function () {\n        $G('J_preview').innerHTML = \"\";\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/music/music.js",
    "content": "function Music() {\n    this.init();\n}\n(function () {\n    var pages = [],\n        panels = [],\n        selectedItem = null;\n    Music.prototype = {\n        total:70,\n        pageSize:10,\n        dataUrl:\"http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.common\",\n        playerUrl:\"http://box.baidu.com/widget/flash/bdspacesong.swf\",\n\n        init:function () {\n            var me = this;\n            domUtils.on($G(\"J_searchName\"), \"keyup\", function (event) {\n                var e = window.event || event;\n                if (e.keyCode == 13) {\n                    me.dosearch();\n                }\n            });\n            domUtils.on($G(\"J_searchBtn\"), \"click\", function () {\n                me.dosearch();\n            });\n        },\n        callback:function (data) {\n            var me = this;\n            me.data = data.song_list;\n            setTimeout(function () {\n                $G('J_resultBar').innerHTML = me._renderTemplate(data.song_list);\n            }, 300);\n        },\n        dosearch:function () {\n            var me = this;\n            selectedItem = null;\n            var key = $G('J_searchName').value;\n            if (utils.trim(key) == \"\")return false;\n            key = encodeURIComponent(key);\n            me._sent(key);\n        },\n        doselect:function (i) {\n            var me = this;\n            if (typeof i == 'object') {\n                selectedItem = i;\n            } else if (typeof i == 'number') {\n                selectedItem = me.data[i];\n            }\n        },\n        onpageclick:function (id) {\n            var me = this;\n            for (var i = 0; i < pages.length; i++) {\n                $G(pages[i]).className = 'pageoff';\n                $G(panels[i]).className = 'paneloff';\n            }\n            $G('page' + id).className = 'pageon';\n            $G('panel' + id).className = 'panelon';\n        },\n        listenTest:function (elem) {\n            var me = this,\n                view = $G('J_preview'),\n                is_play_action = (elem.className == 'm-try'),\n                old_trying = me._getTryingElem();\n\n            if (old_trying) {\n                old_trying.className = 'm-try';\n                view.innerHTML = '';\n            }\n            if (is_play_action) {\n                elem.className = 'm-trying';\n                view.innerHTML = me._buildMusicHtml(me._getUrl(true));\n            }\n        },\n        _sent:function (param) {\n            var me = this;\n            $G('J_resultBar').innerHTML = '<div class=\"loading\"></div>';\n\n            utils.loadFile(document, {\n                src:me.dataUrl + '&query=' + param + '&page_size=' + me.total + '&callback=music.callback&.r=' + Math.random(),\n                tag:\"script\",\n                type:\"text/javascript\",\n                defer:\"defer\"\n            });\n        },\n        _removeHtml:function (str) {\n            var reg = /<\\s*\\/?\\s*[^>]*\\s*>/gi;\n            return str.replace(reg, \"\");\n        },\n        _getUrl:function (isTryListen) {\n            var me = this;\n            var param = 'from=tiebasongwidget&url=&name=' + encodeURIComponent(me._removeHtml(selectedItem.title)) + '&artist='\n                + encodeURIComponent(me._removeHtml(selectedItem.author)) + '&extra='\n                + encodeURIComponent(me._removeHtml(selectedItem.album_title))\n                + '&autoPlay='+isTryListen+'' + '&loop=true';\n            return  me.playerUrl + \"?\" + param;\n        },\n        _getTryingElem:function () {\n            var s = $G('J_listPanel').getElementsByTagName('span');\n\n            for (var i = 0; i < s.length; i++) {\n                if (s[i].className == 'm-trying')\n                    return s[i];\n            }\n            return null;\n        },\n        _buildMusicHtml:function (playerUrl) {\n            var html = '<embed class=\"BDE_try_Music\" allowfullscreen=\"false\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"';\n            html += ' src=\"' + playerUrl + '\"';\n            html += ' width=\"1\" height=\"1\" style=\"position:absolute;left:-2000px;\"';\n            html += ' type=\"application/x-shockwave-flash\" wmode=\"transparent\" play=\"true\" loop=\"false\"';\n            html += ' menu=\"false\" allowscriptaccess=\"never\" scale=\"noborder\">';\n            return html;\n        },\n        _byteLength:function (str) {\n            return str.replace(/[^\\u0000-\\u007f]/g, \"\\u0061\\u0061\").length;\n        },\n        _getMaxText:function (s) {\n            var me = this;\n            s = me._removeHtml(s);\n            if (me._byteLength(s) > 12)\n                return s.substring(0, 5) + '...';\n            if (!s) s = \"&nbsp;\";\n            return s;\n        },\n        _rebuildData:function (data) {\n            var me = this,\n                newData = [],\n                d = me.pageSize,\n                itembox;\n            for (var i = 0; i < data.length; i++) {\n                if ((i + d) % d == 0) {\n                    itembox = [];\n                    newData.push(itembox)\n                }\n                itembox.push(data[i]);\n            }\n            return newData;\n        },\n        _renderTemplate:function (data) {\n            var me = this;\n            if (data.length == 0)return '<div class=\"empty\">' + lang.emptyTxt + '</div>';\n            data = me._rebuildData(data);\n            var s = [], p = [], t = [];\n            s.push('<div id=\"J_listPanel\" class=\"listPanel\">');\n            p.push('<div class=\"page\">');\n            for (var i = 0, tmpList; tmpList = data[i++];) {\n                panels.push('panel' + i);\n                pages.push('page' + i);\n                if (i == 1) {\n                    s.push('<div id=\"panel' + i + '\" class=\"panelon\">');\n                    if (data.length != 1) {\n                        t.push('<div id=\"page' + i + '\" onclick=\"music.onpageclick(' + i + ')\" class=\"pageon\">' + (i ) + '</div>');\n                    }\n                } else {\n                    s.push('<div id=\"panel' + i + '\" class=\"paneloff\">');\n                    t.push('<div id=\"page' + i + '\" onclick=\"music.onpageclick(' + i + ')\" class=\"pageoff\">' + (i ) + '</div>');\n                }\n                s.push('<div class=\"m-box\">');\n                s.push('<div class=\"m-h\"><span class=\"m-t\">' + lang.chapter + '</span><span class=\"m-s\">' + lang.singer\n                    + '</span><span class=\"m-z\">' + lang.special + '</span><span class=\"m-try-t\">' + lang.listenTest + '</span></div>');\n                for (var j = 0, tmpObj; tmpObj = tmpList[j++];) {\n                    s.push('<label for=\"radio-' + i + '-' + j + '\" class=\"m-m\">');\n                    s.push('<input type=\"radio\" id=\"radio-' + i + '-' + j + '\" name=\"musicId\" class=\"m-l\" onclick=\"music.doselect(' + (me.pageSize * (i-1) + (j-1)) + ')\"/>');\n                    s.push('<span class=\"m-t\">' + me._getMaxText(tmpObj.title) + '</span>');\n                    s.push('<span class=\"m-s\">' + me._getMaxText(tmpObj.author) + '</span>');\n                    s.push('<span class=\"m-z\">' + me._getMaxText(tmpObj.album_title) + '</span>');\n                    s.push('<span class=\"m-try\" onclick=\"music.doselect(' + (me.pageSize * (i-1) + (j-1)) + ');music.listenTest(this)\"></span>');\n                    s.push('</label>');\n                }\n                s.push('</div>');\n                s.push('</div>');\n            }\n            t.reverse();\n            p.push(t.join(''));\n            s.push('</div>');\n            p.push('</div>');\n            return s.join('') + p.join('');\n        },\n        exec:function () {\n            var me = this;\n            if (selectedItem == null)   return;\n            $G('J_preview').innerHTML = \"\";\n            editor.execCommand('music', {\n                url:me._getUrl(false),\n                width:400,\n                height:95\n            });\n        }\n    };\n})();\n\n\n\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/preview/preview.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n        <style>\n            html,body{\n                height:100%;\n                width:100%;\n                padding:0;\n                margin:0;\n            }\n            #preview{\n                width:100%;\n                height:100%;\n                padding:0;\n                margin:0;\n            }\n            #preview *{font-family:sans-serif;font-size:16px;}\n        </style>\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n        <script src=\"../../ueditor.parse.js\"></script>\n        <title></title>\n    </head>\n    <body class=\"view\">\n        <div id=\"preview\" style=\"margin:8px\">\n\n        </div>\n    </body>\n    <script>\n        document.getElementById('preview').innerHTML = editor.getContent();\n        uParse('#preview',{\n            rootPath : '../../',\n            chartContainerHeight:500\n        })\n        dialog.oncancel = function(){\n            document.getElementById('preview').innerHTML = '';\n        }\n    </script>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/scrawl/scrawl.css",
    "content": "/*common\n*/\nbody{margin: 0;}\ntable{width:100%;}\ntable td{padding:2px 4px;vertical-align: middle;}\na{text-decoration: none;}\nem{font-style: normal;}\n.border_style1{border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}\n/*module\n*/\n.main{margin: 8px;overflow: hidden;}\n\n.hot{float:left;height:335px;}\n.drawBoard{position: relative; cursor: crosshair;}\n.brushBorad{position: absolute;left:0;top:0;z-index: 998;}\n.picBoard{border: none;text-align: center;line-height: 300px;cursor: default;}\n.operateBar{margin-top:10px;font-size:12px;text-align: center;}\n.operateBar span{margin-left: 10px;}\n\n.drawToolbar{float:right;width:110px;height:300px;overflow: hidden;}\n.colorBar{margin-top:10px;font-size: 12px;text-align: center;}\n.colorBar a{display:block;width: 10px;height: 10px;border:1px solid #1006F1;border-radius: 3px; box-shadow:2px 2px 5px #d3d6da;opacity: 0.3}\n.sectionBar{margin-top:15px;font-size: 12px;text-align: center;}\n.sectionBar a{display:inline-block;width:10px;height:12px;color: #888;text-indent: -999px;opacity: 0.3}\n.size1{background: url('images/size.png') 1px center no-repeat ;}\n.size2{background: url('images/size.png') -10px center no-repeat;}\n.size3{background: url('images/size.png') -22px center no-repeat;}\n.size4{background: url('images/size.png') -35px center no-repeat;}\n\n.addImgH{position: relative;}\n.addImgH_form{position: absolute;left: 18px;top: -1px;width: 75px;height: 21px;opacity: 0;cursor: pointer;}\n.addImgH_form input{width: 100%;}\n/*scrawl遮罩层\n*/\n.maskLayerNull{display: none;}\n.maskLayer{position: absolute;top:0;left:0;width: 100%; height: 100%;opacity: 0.7;\n    background-color: #fff;text-align:center;font-weight:bold;line-height:300px;z-index: 1000;}\n/*btn state\n*/\n.previousStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undoH.png');cursor: pointer;}\n.previousStepH .text{color:#888;cursor:pointer;}\n.previousStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undo.png');cursor:default;}\n.previousStep .text{color:#ccc;cursor:default;}\n\n.nextStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redoH.png');cursor: pointer;}\n.nextStepH .text{color:#888;cursor:pointer;}\n.nextStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redo.png');cursor:default;}\n.nextStep .text{color:#ccc;cursor:default;}\n\n.clearBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/emptyH.png');cursor: pointer;}\n.clearBoardH .text{color:#888;cursor:pointer;}\n.clearBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/empty.png');cursor:default;}\n.clearBoard .text{color:#ccc;cursor:default;}\n\n.scaleBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scaleH.png');cursor: pointer;}\n.scaleBoardH .text{color:#888;cursor:pointer;}\n.scaleBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scale.png');cursor:default;}\n.scaleBoard .text{color:#ccc;cursor:default;}\n\n.removeImgH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimgH.png');cursor: pointer;}\n.removeImgH .text{color:#888;cursor:pointer;}\n.removeImg .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimg.png');cursor:default;}\n.removeImg .text{color:#ccc;cursor:default;}\n\n.addImgH .icon{vertical-align:top;display: inline-block;width:16px;height:16px;background-image: url('images/addimg.png')}\n.addImgH .text{color:#888;cursor:pointer;}\n/*icon\n*/\n.brushIcon{display: inline-block;width:16px;height:16px;background-image: url('images/brush.png')}\n.eraserIcon{display: inline-block;width:16px;height:16px;background-image: url('images/eraser.png')}\n\n\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/scrawl/scrawl.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"scrawl.css\">\n</head>\n<body>\n<div class=\"main\" id=\"J_wrap\">\n    <div class=\"hot\">\n        <div class=\"drawBoard border_style1\">\n            <canvas id=\"J_brushBoard\" class=\"brushBorad\" width=\"360\" height=\"300\"></canvas>\n            <div id=\"J_picBoard\" class=\"picBoard\" style=\"width: 360px;height: 300px\"></div>\n        </div>\n        <div id=\"J_operateBar\" class=\"operateBar\">\n            <span id=\"J_previousStep\" class=\"previousStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_previousStep\"></var></em>\n            </span>\n            <span id=\"J_nextStep\" class=\"nextStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_nextsStep\"></var></em>\n            </span>\n            <span id=\"J_clearBoard\" class=\"clearBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_clear\"></var></em>\n            </span>\n            <span id=\"J_sacleBoard\" class=\"scaleBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_ScalePic\"></var></em>\n            </span>\n        </div>\n    </div>\n    <div class=\"drawToolbar border_style1\">\n        <div id=\"J_colorBar\" class=\"colorBar\"></div>\n        <div id=\"J_brushBar\" class=\"sectionBar\">\n            <em class=\"brushIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div id=\"J_eraserBar\" class=\"sectionBar\">\n            <em class=\"eraserIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div class=\"sectionBar\">\n            <div id=\"J_addImg\" class=\"addImgH\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_addPic\"></var></em>\n                <form method=\"post\" id=\"fileForm\" enctype=\"multipart/form-data\" class=\"addImgH_form\" target=\"up\">\n                    <input type=\"file\" name=\"upfile\" id=\"J_imgTxt\"\n                           accept=\"image/gif,image/jpeg,image/png,image/jpg,image/bmp\"/>\n                </form>\n                <iframe name=\"up\" style=\"display: none\"></iframe>\n            </div>\n        </div>\n        <div class=\"sectionBar\">\n            <span id=\"J_removeImg\" class=\"removeImg\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_removePic\"></var></em>\n            </span>\n        </div>\n    </div>\n</div>\n<div id=\"J_maskLayer\" class=\"maskLayerNull\"></div>\n\n<script type=\"text/javascript\" src=\"scrawl.js\"></script>\n<script type=\"text/javascript\">\n    var settings = {\n        drawBrushSize:3, //画笔初始大小\n        drawBrushColor:\"#4bacc6\", //画笔初始颜色\n        colorList:['c00000', 'ff0000', 'ffc000', 'ffff00', '92d050', '00b050', '00b0f0', '0070c0', '002060', '7030a0', 'ffffff',\n            '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646'], //画笔选择颜色\n        saveNum:10  //撤销次数\n    };\n\n    var scrawlObj = new scrawl( settings );\n    scrawlObj.isCancelScrawl = false;\n\n    dialog.onok = function () {\n        exec( scrawlObj );\n        return false;\n    };\n    dialog.oncancel = function () {\n        scrawlObj.isCancelScrawl = true;\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/scrawl/scrawl.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-5-22\n * Time: 上午11:38\n * To change this template use File | Settings | File Templates.\n */\nvar scrawl = function (options) {\n    options && this.initOptions(options);\n};\n(function () {\n    var canvas = $G(\"J_brushBoard\"),\n        context = canvas.getContext('2d'),\n        drawStep = [], //undo redo存储\n        drawStepIndex = 0; //undo redo指针\n\n    scrawl.prototype = {\n        isScrawl:false, //是否涂鸦\n        brushWidth:-1, //画笔粗细\n        brushColor:\"\", //画笔颜色\n\n        initOptions:function (options) {\n            var me = this;\n            me.originalState(options);//初始页面状态\n            me._buildToolbarColor(options.colorList);//动态生成颜色选择集合\n\n            me._addBoardListener(options.saveNum);//添加画板处理\n            me._addOPerateListener(options.saveNum);//添加undo redo clearBoard处理\n            me._addColorBarListener();//添加颜色选择处理\n            me._addBrushBarListener();//添加画笔大小处理\n            me._addEraserBarListener();//添加橡皮大小处理\n            me._addAddImgListener();//添加增添背景图片处理\n            me._addRemoveImgListenter();//删除背景图片处理\n            me._addScalePicListenter();//添加缩放处理\n            me._addClearSelectionListenter();//添加清楚选中状态处理\n\n            me._originalColorSelect(options.drawBrushColor);//初始化颜色选中\n            me._originalBrushSelect(options.drawBrushSize);//初始化画笔选中\n            me._clearSelection();//清楚选中状态\n        },\n\n        originalState:function (options) {\n            var me = this;\n\n            me.brushWidth = options.drawBrushSize;//同步画笔粗细\n            me.brushColor = options.drawBrushColor;//同步画笔颜色\n\n            context.lineWidth = me.brushWidth;//初始画笔大小\n            context.strokeStyle = me.brushColor;//初始画笔颜色\n            context.fillStyle = \"transparent\";//初始画布背景颜色\n            context.lineCap = \"round\";//去除锯齿\n            context.fill();\n        },\n        _buildToolbarColor:function (colorList) {\n            var tmp = null, arr = [];\n            arr.push(\"<table id='J_colorList'>\");\n            for (var i = 0, color; color = colorList[i++];) {\n                if ((i - 1) % 5 == 0) {\n                    if (i != 1) {\n                        arr.push(\"</tr>\");\n                    }\n                    arr.push(\"<tr>\");\n                }\n                tmp = '#' + color;\n                arr.push(\"<td><a title='\" + tmp + \"' href='javascript:void(0)' style='background-color:\" + tmp + \"'></a></td>\");\n            }\n            arr.push(\"</tr></table>\");\n            $G(\"J_colorBar\").innerHTML = arr.join(\"\");\n        },\n\n        _addBoardListener:function (saveNum) {\n            var me = this,\n                margin = 0,\n                startX = -1,\n                startY = -1,\n                isMouseDown = false,\n                isMouseMove = false,\n                isMouseUp = false,\n                buttonPress = 0, button, flag = '';\n\n            margin = parseInt(domUtils.getComputedStyle($G(\"J_wrap\"), \"margin-left\"));\n            drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n            drawStepIndex += 1;\n\n            domUtils.on(canvas, [\"mousedown\", \"mousemove\", \"mouseup\", \"mouseout\"], function (e) {\n                button = browser.webkit ? e.which : buttonPress;\n                switch (e.type) {\n                    case 'mousedown':\n                        buttonPress = 1;\n                        flag = 1;\n                        isMouseDown = true;\n                        isMouseUp = false;\n                        isMouseMove = false;\n                        me.isScrawl = true;\n                        startX = e.clientX - margin;//10为外边距总和\n                        startY = e.clientY - margin;\n                        context.beginPath();\n                        break;\n                    case 'mousemove' :\n                        if (!flag && button == 0) {\n                            return;\n                        }\n                        if (!flag && button) {\n                            startX = e.clientX - margin;//10为外边距总和\n                            startY = e.clientY - margin;\n                            context.beginPath();\n                            flag = 1;\n                        }\n                        if (isMouseUp || !isMouseDown) {\n                            return;\n                        }\n                        var endX = e.clientX - margin,\n                            endY = e.clientY - margin;\n\n                        context.moveTo(startX, startY);\n                        context.lineTo(endX, endY);\n                        context.stroke();\n                        startX = endX;\n                        startY = endY;\n                        isMouseMove = true;\n                        break;\n                    case 'mouseup':\n                        buttonPress = 0;\n                        if (!isMouseDown)return;\n                        if (!isMouseMove) {\n                            context.arc(startX, startY, context.lineWidth, 0, Math.PI * 2, false);\n                            context.fillStyle = context.strokeStyle;\n                            context.fill();\n                        }\n                        context.closePath();\n                        me._saveOPerate(saveNum);\n                        isMouseDown = false;\n                        isMouseMove = false;\n                        isMouseUp = true;\n                        startX = -1;\n                        startY = -1;\n                        break;\n                    case 'mouseout':\n                        flag = '';\n                        buttonPress = 0;\n                        if (button == 1) return;\n                        context.closePath();\n                        break;\n                }\n            });\n        },\n        _addOPerateListener:function (saveNum) {\n            var me = this;\n            domUtils.on($G(\"J_previousStep\"), \"click\", function () {\n                if (drawStepIndex > 1) {\n                    drawStepIndex -= 1;\n                    context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                    context.putImageData(drawStep[drawStepIndex - 1], 0, 0);\n                    me.btn2Highlight(\"J_nextStep\");\n                    drawStepIndex == 1 && me.btn2disable(\"J_previousStep\");\n                }\n            });\n            domUtils.on($G(\"J_nextStep\"), \"click\", function () {\n                if (drawStepIndex > 0 && drawStepIndex < drawStep.length) {\n                    context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                    context.putImageData(drawStep[drawStepIndex], 0, 0);\n                    drawStepIndex += 1;\n                    me.btn2Highlight(\"J_previousStep\");\n                    drawStepIndex == drawStep.length && me.btn2disable(\"J_nextStep\");\n                }\n            });\n            domUtils.on($G(\"J_clearBoard\"), \"click\", function () {\n                context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                drawStep = [];\n                me._saveOPerate(saveNum);\n                drawStepIndex = 1;\n                me.isScrawl = false;\n                me.btn2disable(\"J_previousStep\");\n                me.btn2disable(\"J_nextStep\");\n                me.btn2disable(\"J_clearBoard\");\n            });\n        },\n        _addColorBarListener:function () {\n            var me = this;\n            domUtils.on($G(\"J_colorBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    color = target.title;\n                if (!!color) {\n                    me._addColorSelect(target);\n\n                    me.brushColor = color;\n                    context.globalCompositeOperation = \"source-over\";\n                    context.lineWidth = me.brushWidth;\n                    context.strokeStyle = color;\n                }\n            });\n        },\n        _addBrushBarListener:function () {\n            var me = this;\n            domUtils.on($G(\"J_brushBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    size = browser.ie ? target.innerText : target.text;\n                if (!!size) {\n                    me._addBESelect(target);\n\n                    context.globalCompositeOperation = \"source-over\";\n                    context.lineWidth = parseInt(size);\n                    context.strokeStyle = me.brushColor;\n                    me.brushWidth = context.lineWidth;\n                }\n            });\n        },\n        _addEraserBarListener:function () {\n            var me = this;\n            domUtils.on($G(\"J_eraserBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    size = browser.ie ? target.innerText : target.text;\n                if (!!size) {\n                    me._addBESelect(target);\n\n                    context.lineWidth = parseInt(size);\n                    context.globalCompositeOperation = \"destination-out\";\n                    context.strokeStyle = \"#FFF\";\n                }\n            });\n        },\n        _addAddImgListener:function () {\n            var file = $G(\"J_imgTxt\");\n            if (!window.FileReader) {\n                $G(\"J_addImg\").style.display = 'none';\n                $G(\"J_removeImg\").style.display = 'none';\n                $G(\"J_sacleBoard\").style.display = 'none';\n            }\n            domUtils.on(file, \"change\", function (e) {\n                var frm = file.parentNode;\n                addMaskLayer(lang.backgroundUploading);\n\n                var target = e.target || e.srcElement,\n                    reader = new FileReader();\n                reader.onload = function(evt){\n                    var target = evt.target || evt.srcElement;\n                    ue_callback(target.result, 'SUCCESS');\n                };\n                reader.readAsDataURL(target.files[0]);\n                frm.reset();\n            });\n        },\n        _addRemoveImgListenter:function () {\n            var me = this;\n            domUtils.on($G(\"J_removeImg\"), \"click\", function () {\n                $G(\"J_picBoard\").innerHTML = \"\";\n                me.btn2disable(\"J_removeImg\");\n                me.btn2disable(\"J_sacleBoard\");\n            });\n        },\n        _addScalePicListenter:function () {\n            domUtils.on($G(\"J_sacleBoard\"), \"click\", function () {\n                var picBoard = $G(\"J_picBoard\"),\n                    scaleCon = $G(\"J_scaleCon\"),\n                    img = picBoard.children[0];\n\n                if (img) {\n                    if (!scaleCon) {\n                        picBoard.style.cssText = \"position:relative;z-index:999;\"+picBoard.style.cssText;\n                        img.style.cssText = \"position: absolute;top:\" + (canvas.height - img.height) / 2 + \"px;left:\" + (canvas.width - img.width) / 2 + \"px;\";\n                        var scale = new ScaleBoy();\n                        picBoard.appendChild(scale.init());\n                        scale.startScale(img);\n                    } else {\n                        if (scaleCon.style.visibility == \"visible\") {\n                            scaleCon.style.visibility = \"hidden\";\n                            picBoard.style.position = \"\";\n                            picBoard.style.zIndex = \"\";\n                        } else {\n                            scaleCon.style.visibility = \"visible\";\n                            picBoard.style.cssText += \"position:relative;z-index:999\";\n                        }\n                    }\n                }\n            });\n        },\n        _addClearSelectionListenter:function () {\n            var doc = document;\n            domUtils.on(doc, 'mousemove', function (e) {\n                if (browser.ie && browser.version < 11)\n                    doc.selection.clear();\n                else\n                    window.getSelection().removeAllRanges();\n            });\n        },\n        _clearSelection:function () {\n            var list = [\"J_operateBar\", \"J_colorBar\", \"J_brushBar\", \"J_eraserBar\", \"J_picBoard\"];\n            for (var i = 0, group; group = list[i++];) {\n                domUtils.unSelectable($G(group));\n            }\n        },\n\n        _saveOPerate:function (saveNum) {\n            var me = this;\n            if (drawStep.length <= saveNum) {\n                if(drawStepIndex<drawStep.length){\n                    me.btn2disable(\"J_nextStep\");\n                    drawStep.splice(drawStepIndex);\n                }\n                drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n                drawStepIndex = drawStep.length;\n            } else {\n                drawStep.shift();\n                drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n                drawStepIndex = drawStep.length;\n            }\n            me.btn2Highlight(\"J_previousStep\");\n            me.btn2Highlight(\"J_clearBoard\");\n        },\n\n        _originalColorSelect:function (title) {\n            var colorList = $G(\"J_colorList\").getElementsByTagName(\"td\");\n            for (var j = 0, cell; cell = colorList[j++];) {\n                if (cell.children[0].title.toLowerCase() == title) {\n                    cell.children[0].style.opacity = 1;\n                }\n            }\n        },\n        _originalBrushSelect:function (text) {\n            var brushList = $G(\"J_brushBar\").children;\n            for (var i = 0, ele; ele = brushList[i++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    var size = browser.ie ? ele.innerText : ele.text;\n                    if (size.toLowerCase() == text) {\n                        ele.style.opacity = 1;\n                    }\n                }\n            }\n        },\n        _addColorSelect:function (target) {\n            var me = this,\n                colorList = $G(\"J_colorList\").getElementsByTagName(\"td\"),\n                eraserList = $G(\"J_eraserBar\").children,\n                brushList = $G(\"J_brushBar\").children;\n\n            for (var i = 0, cell; cell = colorList[i++];) {\n                cell.children[0].style.opacity = 0.3;\n            }\n            for (var k = 0, ele; ele = brushList[k++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    ele.style.opacity = 0.3;\n                    var size = browser.ie ? ele.innerText : ele.text;\n                    if (size.toLowerCase() == this.brushWidth) {\n                        ele.style.opacity = 1;\n                    }\n                }\n            }\n            for (var j = 0, node; node = eraserList[j++];) {\n                if (node.tagName.toLowerCase() == \"a\") {\n                    node.style.opacity = 0.3;\n                }\n            }\n\n            target.style.opacity = 1;\n            target.blur();\n        },\n        _addBESelect:function (target) {\n            var brushList = $G(\"J_brushBar\").children;\n            var eraserList = $G(\"J_eraserBar\").children;\n\n            for (var i = 0, ele; ele = brushList[i++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    ele.style.opacity = 0.3;\n                }\n            }\n            for (var j = 0, node; node = eraserList[j++];) {\n                if (node.tagName.toLowerCase() == \"a\") {\n                    node.style.opacity = 0.3;\n                }\n            }\n\n            target.style.opacity = 1;\n            target.blur();\n        },\n        getCanvasData:function () {\n            var picContainer = $G(\"J_picBoard\"),\n                img = picContainer.children[0];\n            if (img) {\n                var x, y;\n                if (img.style.position == \"absolute\") {\n                    x = parseInt(img.style.left);\n                    y = parseInt(img.style.top);\n                } else {\n                    x = (picContainer.offsetWidth - img.width) / 2;\n                    y = (picContainer.offsetHeight - img.height) / 2;\n                }\n                context.globalCompositeOperation = \"destination-over\";\n                context.drawImage(img, x, y, img.width, img.height);\n            } else {\n                context.globalCompositeOperation = \"destination-atop\";\n                context.fillStyle = \"#fff\";//重置画布背景白色\n                context.fillRect(0, 0, canvas.width, canvas.height);\n            }\n            try {\n                return canvas.toDataURL(\"image/png\").substring(22);\n            } catch (e) {\n                return \"\";\n            }\n        },\n        btn2Highlight:function (id) {\n            var cur = $G(id);\n            cur.className.indexOf(\"H\") == -1 && (cur.className += \"H\");\n        },\n        btn2disable:function (id) {\n            var cur = $G(id);\n            cur.className.indexOf(\"H\") != -1 && (cur.className = cur.className.replace(\"H\", \"\"));\n        },\n        getTarget:function (evt) {\n            return evt.target || evt.srcElement;\n        }\n    };\n})();\n\nvar ScaleBoy = function () {\n    this.dom = null;\n    this.scalingElement = null;\n};\n(function () {\n    function _appendStyle() {\n        var doc = document,\n            head = doc.getElementsByTagName('head')[0],\n            style = doc.createElement('style'),\n            cssText = '.scale{visibility:hidden;cursor:move;position:absolute;left:0;top:0;width:100px;height:50px;background-color:#fff;font-size:0;line-height:0;opacity:.4;filter:Alpha(opacity=40);}'\n                + '.scale span{position:absolute;left:0;top:0;width:6px;height:6px;background-color:#006DAE;}'\n                + '.scale .hand0, .scale .hand7{cursor:nw-resize;}'\n                + '.scale .hand1, .scale .hand6{left:50%;margin-left:-3px;cursor:n-resize;}'\n                + '.scale .hand2, .scale .hand4, .scale .hand7{left:100%;margin-left:-6px;}'\n                + '.scale .hand3, .scale .hand4{top:50%;margin-top:-3px;cursor:w-resize;}'\n                + '.scale .hand5, .scale .hand6, .scale .hand7{margin-top:-6px;top:100%;}'\n                + '.scale .hand2, .scale .hand5{cursor:ne-resize;}';\n        style.type = 'text/css';\n\n        try {\n            style.appendChild(doc.createTextNode(cssText));\n        } catch (e) {\n            style.styleSheet.cssText = cssText;\n        }\n        head.appendChild(style);\n    }\n\n    function _getDom() {\n        var doc = document,\n            hand,\n            arr = [],\n            scale = doc.createElement('div');\n\n        scale.id = 'J_scaleCon';\n        scale.className = 'scale';\n        for (var i = 0; i < 8; i++) {\n            arr.push(\"<span class='hand\" + i + \"'></span>\");\n        }\n        scale.innerHTML = arr.join(\"\");\n        return scale;\n    }\n\n    var rect = [\n        //[left, top, width, height]\n        [1, 1, -1, -1],\n        [0, 1, 0, -1],\n        [0, 1, 1, -1],\n        [1, 0, -1, 0],\n        [0, 0, 1, 0],\n        [1, 0, -1, 1],\n        [0, 0, 0, 1],\n        [0, 0, 1, 1]\n    ];\n    ScaleBoy.prototype = {\n        init:function () {\n            _appendStyle();\n            var me = this,\n                scale = me.dom = _getDom();\n\n            me.scaleMousemove.fp = me;\n            domUtils.on(scale, 'mousedown', function (e) {\n                var target = e.target || e.srcElement;\n                me.start = {x:e.clientX, y:e.clientY};\n                if (target.className.indexOf('hand') != -1) {\n                    me.dir = target.className.replace('hand', '');\n                }\n                domUtils.on(document.body, 'mousemove', me.scaleMousemove);\n                e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\n            });\n            domUtils.on(document.body, 'mouseup', function (e) {\n                if (me.start) {\n                    domUtils.un(document.body, 'mousemove', me.scaleMousemove);\n                    if (me.moved) {\n                        me.updateScaledElement({position:{x:scale.style.left, y:scale.style.top}, size:{w:scale.style.width, h:scale.style.height}});\n                    }\n                    delete me.start;\n                    delete me.moved;\n                    delete me.dir;\n                }\n            });\n            return scale;\n        },\n        startScale:function (objElement) {\n            var me = this, Idom = me.dom;\n\n            Idom.style.cssText = 'visibility:visible;top:' + objElement.style.top + ';left:' + objElement.style.left + ';width:' + objElement.offsetWidth + 'px;height:' + objElement.offsetHeight + 'px;';\n            me.scalingElement = objElement;\n        },\n        updateScaledElement:function (objStyle) {\n            var cur = this.scalingElement,\n                pos = objStyle.position,\n                size = objStyle.size;\n            if (pos) {\n                typeof pos.x != 'undefined' && (cur.style.left = pos.x);\n                typeof pos.y != 'undefined' && (cur.style.top = pos.y);\n            }\n            if (size) {\n                size.w && (cur.style.width = size.w);\n                size.h && (cur.style.height = size.h);\n            }\n        },\n        updateStyleByDir:function (dir, offset) {\n            var me = this,\n                dom = me.dom, tmp;\n\n            rect['def'] = [1, 1, 0, 0];\n            if (rect[dir][0] != 0) {\n                tmp = parseInt(dom.style.left) + offset.x;\n                dom.style.left = me._validScaledProp('left', tmp) + 'px';\n            }\n            if (rect[dir][1] != 0) {\n                tmp = parseInt(dom.style.top) + offset.y;\n                dom.style.top = me._validScaledProp('top', tmp) + 'px';\n            }\n            if (rect[dir][2] != 0) {\n                tmp = dom.clientWidth + rect[dir][2] * offset.x;\n                dom.style.width = me._validScaledProp('width', tmp) + 'px';\n            }\n            if (rect[dir][3] != 0) {\n                tmp = dom.clientHeight + rect[dir][3] * offset.y;\n                dom.style.height = me._validScaledProp('height', tmp) + 'px';\n            }\n            if (dir === 'def') {\n                me.updateScaledElement({position:{x:dom.style.left, y:dom.style.top}});\n            }\n        },\n        scaleMousemove:function (e) {\n            var me = arguments.callee.fp,\n                start = me.start,\n                dir = me.dir || 'def',\n                offset = {x:e.clientX - start.x, y:e.clientY - start.y};\n\n            me.updateStyleByDir(dir, offset);\n            arguments.callee.fp.start = {x:e.clientX, y:e.clientY};\n            arguments.callee.fp.moved = 1;\n        },\n        _validScaledProp:function (prop, value) {\n            var ele = this.dom,\n                wrap = $G(\"J_picBoard\");\n\n            value = isNaN(value) ? 0 : value;\n            switch (prop) {\n                case 'left':\n                    return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value;\n                case 'top':\n                    return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value;\n                case 'width':\n                    return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value;\n                case 'height':\n                    return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value;\n            }\n        }\n    };\n})();\n\n//后台回调\nfunction ue_callback(url, state) {\n    var doc = document,\n        picBorard = $G(\"J_picBoard\"),\n        img = doc.createElement(\"img\");\n\n    //图片缩放\n    function scale(img, max, oWidth, oHeight) {\n        var width = 0, height = 0, percent, ow = img.width || oWidth, oh = img.height || oHeight;\n        if (ow > max || oh > max) {\n            if (ow >= oh) {\n                if (width = ow - max) {\n                    percent = (width / ow).toFixed(2);\n                    img.height = oh - oh * percent;\n                    img.width = max;\n                }\n            } else {\n                if (height = oh - max) {\n                    percent = (height / oh).toFixed(2);\n                    img.width = ow - ow * percent;\n                    img.height = max;\n                }\n            }\n        }\n    }\n\n    //移除遮罩层\n    removeMaskLayer();\n    //状态响应\n    if (state == \"SUCCESS\") {\n        picBorard.innerHTML = \"\";\n        img.onload = function () {\n            scale(this, 300);\n            picBorard.appendChild(img);\n\n            var obj = new scrawl();\n            obj.btn2Highlight(\"J_removeImg\");\n            //trace 2457\n            obj.btn2Highlight(\"J_sacleBoard\");\n        };\n        img.src = url;\n    } else {\n        alert(state);\n    }\n}\n//去掉遮罩层\nfunction removeMaskLayer() {\n    var maskLayer = $G(\"J_maskLayer\");\n    maskLayer.className = \"maskLayerNull\";\n    maskLayer.innerHTML = \"\";\n    dialog.buttons[0].setDisabled(false);\n}\n//添加遮罩层\nfunction addMaskLayer(html) {\n    var maskLayer = $G(\"J_maskLayer\");\n    dialog.buttons[0].setDisabled(true);\n    maskLayer.className = \"maskLayer\";\n    maskLayer.innerHTML = html;\n}\n//执行确认按钮方法\nfunction exec(scrawlObj) {\n    if (scrawlObj.isScrawl) {\n        addMaskLayer(lang.scrawlUpLoading);\n        var base64 = scrawlObj.getCanvasData();\n        if (!!base64) {\n            var options = {\n                timeout:100000,\n                onsuccess:function (xhr) {\n                    if (!scrawlObj.isCancelScrawl) {\n                        var responseObj;\n                        responseObj = eval(\"(\" + xhr.responseText + \")\");\n                        if (responseObj.state == \"SUCCESS\") {\n                            var imgObj = {},\n                                url = editor.options.scrawlUrlPrefix + responseObj.url;\n                            imgObj.src = url;\n                            imgObj._src = url;\n                            imgObj.alt = responseObj.original || '';\n                            editor.execCommand(\"insertImage\", imgObj);\n                            dialog.close();\n                        } else {\n                            alert(responseObj.state);\n                        }\n\n                    }\n                },\n                onerror:function () {\n                    alert(lang.imageError);\n                    dialog.close();\n                }\n            };\n            options[editor.getOpt('scrawlFieldName')] = base64;\n\n            var actionUrl = editor.getActionUrl(editor.getOpt('scrawlActionName')),\n                params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + params);\n            ajax.request(url, options);\n        }\n    } else {\n        addMaskLayer(lang.noScarwl + \"&nbsp;&nbsp;&nbsp;<input type='button' value='\" + lang.continueBtn + \"'  onclick='removeMaskLayer()'/>\");\n    }\n}\n\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/searchreplace/searchreplace.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .warpper{ position:relative;width: 380px; height: 100%; margin: 10px auto;}\n        .tabbody{height: 160px;}\n        .tabbody table{width:100%;border-collapse: separate;border-spacing: 3px;}\n        .tabbody .panel{width:373px;height:100%;padding-left: 5px;position: absolute;background-color: #fff;}\n        .tabbody input.int{ width:190px;height:21px;border:1px solid #d7d7d7;line-height:21px;}\n        .tabbody input.btn{padding: 0 5px; text-align:center;line-height:24px; text-decoration: none;height:24px;background:url(\"../../themes/default/images/dialog-title-bg.png\") repeat-x;border:1px solid #ccc; }\n    </style>\n</head>\n<body>\n<div class=\"warpper\" id=\"searchtab\">\n    <div id=\"head\" class=\"tabhead\">\n        <span  tabsrc=\"find\" class=\"focus\"><var id=\"lang_tab_search\"></var></span>\n        <span  tabsrc=\"replace\" ><var id=\"lang_tab_replace\"></var></span>\n    </div>\n    <div class=\"tabbody\">\n        <div class=\"panel\" id=\"find\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search1\"></var>: </td>\n                    <td><input id=\"findtxt\" type=\"text\" class=\"int\" /></td>\n                </tr>\n                <!--<tr>-->\n\n                    <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_case_sensitive1\"></var></td>\n                    <td>\n                        <input id=\"matchCase\" type=\"checkbox\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextFindBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"preFindBtn\" type=\"button\" class=\"btn\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"search-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n        <div class=\"panel\" id=\"replace\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search2\"></var>: </td>\n                    <td><input id=\"findtxt1\" type=\"text\" class=\"int\"  /></td>\n                </tr>\n                <!--<tr>-->\n\n                    <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg1\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_replace\"></var>: </td>\n                    <td><input id=\"replacetxt\" type=\"text\" class=\"int\" /></td>\n                </tr>\n                <tr>\n                    <td><var id=\"lang_case_sensitive2\"></var></td>\n                    <td>\n                        <input id=\"matchCase1\" type=\"checkbox\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextReplaceBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"preReplaceBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"repalceBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"repalceAllBtn\" type=\"button\" class=\"btn\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"replace-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"searchreplace.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/searchreplace/searchreplace.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午12:29\n * To change this template use File | Settings | File Templates.\n */\n\n//清空上次查选的痕迹\neditor.firstForSR = 0;\neditor.currentRangeForSR = null;\n//给tab注册切换事件\n/**\n * tab点击处理事件\n * @param tabHeads\n * @param tabBodys\n * @param obj\n */\nfunction clickHandler( tabHeads,tabBodys,obj ) {\n    //head样式更改\n    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {\n        tabHeads[k].className = \"\";\n    }\n    obj.className = \"focus\";\n    //body显隐\n    var tabSrc = obj.getAttribute( \"tabSrc\" );\n    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {\n        var body = tabBodys[j],\n            id = body.getAttribute( \"id\" );\n        if ( id != tabSrc ) {\n            body.style.zIndex = 1;\n        } else {\n            body.style.zIndex = 200;\n        }\n    }\n\n}\n\n/**\n * TAB切换\n * @param tabParentId  tab的父节点ID或者对象本身\n */\nfunction switchTab( tabParentId ) {\n    var tabElements = $G( tabParentId ).children,\n        tabHeads = tabElements[0].children,\n        tabBodys = tabElements[1].children;\n\n    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {\n        var head = tabHeads[i];\n        if ( head.className === \"focus\" )clickHandler(tabHeads,tabBodys, head );\n        head.onclick = function () {\n            clickHandler(tabHeads,tabBodys,this);\n        }\n    }\n}\n$G('searchtab').onmousedown = function(){\n    $G('search-msg').innerHTML = '';\n    $G('replace-msg').innerHTML = ''\n}\n//是否区分大小写\nfunction getMatchCase(id) {\n    return $G(id).checked ? true : false;\n}\n//查找\n$G(\"nextFindBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:1,\n        casesensitive:getMatchCase(\"matchCase\")\n    };\n    if (!frCommond(obj)) {\n        var bk = editor.selection.getRange().createBookmark();\n        $G('search-msg').innerHTML = lang.getEnd;\n        editor.selection.getRange().moveToBookmark(bk).select();\n\n\n    }\n};\n$G(\"nextReplaceBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt1\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:1,\n        casesensitive:getMatchCase(\"matchCase1\")\n    };\n    frCommond(obj);\n};\n$G(\"preFindBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:-1,\n        casesensitive:getMatchCase(\"matchCase\")\n    };\n    if (!frCommond(obj)) {\n        $G('search-msg').innerHTML = lang.getStart;\n    }\n};\n$G(\"preReplaceBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt1\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:-1,\n        casesensitive:getMatchCase(\"matchCase1\")\n    };\n    frCommond(obj);\n};\n//替换\n$G(\"repalceBtn\").onclick = function () {\n    editor.trigger('clearLastSearchResult');\n    var findtxt = $G(\"findtxt1\").value.replace(/^\\s|\\s$/g, \"\"), obj,\n        replacetxt = $G(\"replacetxt\").value.replace(/^\\s|\\s$/g, \"\");\n    if (!findtxt) {\n        return false;\n    }\n    if (findtxt == replacetxt || (!getMatchCase(\"matchCase1\") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:1,\n        casesensitive:getMatchCase(\"matchCase1\"),\n        replaceStr:replacetxt\n    };\n    frCommond(obj);\n};\n//全部替换\n$G(\"repalceAllBtn\").onclick = function () {\n    var findtxt = $G(\"findtxt1\").value.replace(/^\\s|\\s$/g, \"\"), obj,\n        replacetxt = $G(\"replacetxt\").value.replace(/^\\s|\\s$/g, \"\");\n    if (!findtxt) {\n        return false;\n    }\n    if (findtxt == replacetxt || (!getMatchCase(\"matchCase1\") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        casesensitive:getMatchCase(\"matchCase1\"),\n        replaceStr:replacetxt,\n        all:true\n    };\n    var num = frCommond(obj);\n    if (num) {\n        $G('replace-msg').innerHTML = lang.countMsg.replace(\"{#count}\", num);\n    }\n};\n//执行\nvar frCommond = function (obj) {\n    return editor.execCommand(\"searchreplace\", obj);\n};\nswitchTab(\"searchtab\");\n\n\ndialog.onclose = function(){\n    editor.trigger('clearLastSearchResult')\n};"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/snapscreen/snapscreen.html",
    "content": "<!DOCTYPE HTML>\n<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n        <title></title>\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n        <style type=\"text/css\">\n            *{color: #838383}\n            html,body {\n                font-size: 12px;\n                width:100%;\n                height:100%;\n                overflow: hidden;\n                margin:0px;\n                padding:0px;\n            }\n            h2 { font-size: 16px; margin: 20px auto;}\n            .content{\n                padding:5px 15px 0 15px;\n                height:100%;\n            }\n            dt,dd { margin-left: 0; padding-left: 0;}\n            dt a { display: block;\n                    height: 30px;\n                    line-height: 30px;\n                    width: 55px;\n                    background: #EFEFEF;\n                    border: 1px solid #CCC;\n                    padding: 0 10px;\n                    text-decoration: none;\n            }\n            dt a:hover{\n                background: #e0e0e0;\n                border-color: #999\n            }\n            dt a:active{\n                background: #ccc;\n                border-color: #999;\n                color: #666;\n            }\n            dd { line-height:20px;margin-top: 10px;}\n            span{ padding-right:4px;}\n            input{width:210px;height:21px;background: #FFF;border:1px solid #d7d7d7;padding: 0px; margin: 0px; }\n\n\n        </style>\n    </head>\n    <body>\n        <div class=\"content\">\n            <h2><var id=\"lang_showMsg\"></var></h2>\n            <dl>\n                <dt><a href=\"../../third-party/snapscreen/UEditorSnapscreen.exe\" target=\"_blank\" id=\"downlink\"><var id=\"lang_download\"></var></a></dt>\n                <dd><var id=\"lang_step1\"></var></dd>\n                <dd><var id=\"lang_step2\"></var></dd>\n            </dl>\n        </div>\n    </body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/spechars/spechars.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        html,body{overflow:hidden;}\n        #specharsTab{width: 97%;margin: 10px auto; zoom:1;position: relative}\n        .tabbody {height:447px;}\n        .tabbody span{ margin: 5px 3px;text-align: center;display:inline-block;width: 40px;height:16px;line-height: 16px;cursor: pointer; }\n    </style>\n</head>\n<body>\n    <div id=\"specharsTab\">\n        <div id=\"tabHeads\" class=\"tabhead\"></div><div id=\"tabBodys\" class=\"tabbody\"></div>\n    </div>\n<script type=\"text/javascript\" src=\"spechars.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/spechars/spechars.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午1:09\n * To change this template use File | Settings | File Templates.\n */\nvar charsContent = [\n    { name:\"tsfh\", title:lang.tsfh, content:toArray(\"、,。,·,ˉ,ˇ,¨,〃,々,—,～,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,＄,¤,￠,￡,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,￢,￤,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞\")},\n    { name:\"lmsz\", title:lang.lmsz, content:toArray(\"ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ\")},\n    { name:\"szfh\", title:lang.szfh, content:toArray(\"⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩\")},\n    { name:\"rwfh\", title:lang.rwfh, content:toArray(\"ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ\")},\n    { name:\"xlzm\", title:lang.xlzm, content:toArray(\"Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω\")},\n    { name:\"ewzm\", title:lang.ewzm, content:toArray(\"А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я\")},\n    { name:\"pyzm\", title:lang.pyzm, content:toArray(\"ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü\")},\n    { name:\"yyyb\", title:lang.yyyb, content:toArray(\"i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,\")},\n    { name:\"zyzf\", title:lang.zyzf, content:toArray(\"ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ\")}\n];\n(function createTab(content) {\n    for (var i = 0, ci; ci = content[i++];) {\n        var span = document.createElement(\"span\");\n        span.setAttribute(\"tabSrc\", ci.name);\n        span.innerHTML = ci.title;\n        if (i == 1)span.className = \"focus\";\n        domUtils.on(span, \"click\", function () {\n            var tmps = $G(\"tabHeads\").children;\n            for (var k = 0, sk; sk = tmps[k++];) {\n                sk.className = \"\";\n            }\n            tmps = $G(\"tabBodys\").children;\n            for (var k = 0, sk; sk = tmps[k++];) {\n                sk.style.display = \"none\";\n            }\n            this.className = \"focus\";\n            $G(this.getAttribute(\"tabSrc\")).style.display = \"\";\n        });\n        $G(\"tabHeads\").appendChild(span);\n        domUtils.insertAfter(span, document.createTextNode(\"\\n\"));\n        var div = document.createElement(\"div\");\n        div.id = ci.name;\n        div.style.display = (i == 1) ? \"\" : \"none\";\n        var cons = ci.content;\n        for (var j = 0, con; con = cons[j++];) {\n            var charSpan = document.createElement(\"span\");\n            charSpan.innerHTML = con;\n            domUtils.on(charSpan, \"click\", function () {\n                editor.execCommand(\"insertHTML\", this.innerHTML);\n                dialog.close();\n            });\n            div.appendChild(charSpan);\n        }\n        $G(\"tabBodys\").appendChild(div);\n    }\n})(charsContent);\nfunction toArray(str) {\n    return str.split(\",\");\n}\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/table/edittable.css",
    "content": "body{\n    overflow: hidden;\n    width: 540px;\n}\n.wrapper {\n    margin: 10px auto 0;\n    font-size: 12px;\n    overflow: hidden;\n    width: 520px;\n    height: 315px;\n}\n\n.clear {\n    clear: both;\n}\n\n.wrapper .left {\n    float: left;\n    margin-left: 10px;;\n}\n\n.wrapper .right {\n    float: right;\n    border-left: 2px dotted #EDEDED;\n    padding-left: 15px;\n}\n\n.section {\n    margin-bottom: 15px;\n    width: 240px;\n    overflow: hidden;\n}\n\n.section h3 {\n    font-weight: bold;\n    padding: 5px 0;\n    margin-bottom: 10px;\n    border-bottom: 1px solid #EDEDED;\n    font-size: 12px;\n}\n\n.section ul {\n    list-style: none;\n    overflow: hidden;\n    clear: both;\n\n}\n\n.section li {\n    float: left;\n    width: 120px;;\n}\n\n.section .tone {\n    width: 80px;;\n}\n\n.section .preview {\n    width: 220px;\n}\n\n.section .preview table {\n    text-align: center;\n    vertical-align: middle;\n    color: #666;\n}\n\n.section .preview caption {\n    font-weight: bold;\n}\n\n.section .preview td {\n    border-width: 1px;\n    border-style: solid;\n    height: 22px;\n}\n\n.section .preview th {\n    border-style: solid;\n    border-color: #DDD;\n    border-width: 2px 1px 1px 1px;\n    height: 22px;\n    background-color: #F7F7F7;\n}"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/table/edittable.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"edittable.css\">\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"left\">\n        <div class=\"section\">\n            <h3><var id=\"lang_tableStyle\"></var></h3>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_title\" name=\"style\"/><var id=\"lang_insertTitle\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_titleCol\" name=\"style\"/><var id=\"lang_insertTitleCol\"></var></label>\n                </li>\n            </ul>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_caption\" name=\"style\"/><var id=\"lang_insertCaption\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_sorttable\" name=\"style\"/><var id=\"lang_orderbycontent\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_tableSize\"></var></h3>\n            <ul>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizeContent\" name=\"size\"/><var id=\"lang_autoSizeContent\"></var></label>\n                </li>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizePage\" name=\"size\"/><var id=\"lang_autoSizePage\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_borderStyle\"></var></h3>\n            <ul>\n                <li>\n                    <span><var id=\"lang_color\"></var></span>\n                    <input type=\"text\" class=\"tone\" id=\"J_tone\" readonly='readonly' />\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n    </div>\n    <div class=\"right\">\n        <div class=\"section\">\n            <h3><var id=\"lang_example\"></var></h3>\n            <div class=\"preview\" id=\"J_preview\">\n            </div>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"edittable.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/table/edittable.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-12-19\n * Time: 下午4:55\n * To change this template use File | Settings | File Templates.\n */\n(function () {\n    var title = $G(\"J_title\"),\n        titleCol = $G(\"J_titleCol\"),\n        caption = $G(\"J_caption\"),\n        sorttable = $G(\"J_sorttable\"),\n        autoSizeContent = $G(\"J_autoSizeContent\"),\n        autoSizePage = $G(\"J_autoSizePage\"),\n        tone = $G(\"J_tone\"),\n        me,\n        preview = $G(\"J_preview\");\n\n    var editTable = function () {\n        me = this;\n        me.init();\n    };\n    editTable.prototype = {\n        init:function () {\n            var colorPiker = new UE.ui.ColorPicker({\n                    editor:editor\n                }),\n                colorPop = new UE.ui.Popup({\n                    editor:editor,\n                    content:colorPiker\n                });\n\n            title.checked = editor.queryCommandState(\"inserttitle\") == -1;\n            titleCol.checked = editor.queryCommandState(\"inserttitlecol\") == -1;\n            caption.checked = editor.queryCommandState(\"insertcaption\") == -1;\n            sorttable.checked = editor.queryCommandState(\"enablesort\") == 1;\n\n            var enablesortState = editor.queryCommandState(\"enablesort\"),\n                disablesortState = editor.queryCommandState(\"disablesort\");\n\n            sorttable.checked = !!(enablesortState < 0 && disablesortState >=0);\n            sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0);\n            sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:'';\n\n            me.createTable(title.checked, titleCol.checked, caption.checked);\n            me.setAutoSize();\n            me.setColor(me.getColor());\n\n            domUtils.on(title, \"click\", me.titleHanler);\n            domUtils.on(titleCol, \"click\", me.titleColHanler);\n            domUtils.on(caption, \"click\", me.captionHanler);\n            domUtils.on(sorttable, \"click\", me.sorttableHanler);\n            domUtils.on(autoSizeContent, \"click\", me.autoSizeContentHanler);\n            domUtils.on(autoSizePage, \"click\", me.autoSizePageHanler);\n\n            domUtils.on(tone, \"click\", function () {\n                colorPop.showAnchor(tone);\n            });\n            domUtils.on(document, 'mousedown', function () {\n                colorPop.hide();\n            });\n            colorPiker.addListener(\"pickcolor\", function () {\n                me.setColor(arguments[1]);\n                colorPop.hide();\n            });\n            colorPiker.addListener(\"picknocolor\", function () {\n                me.setColor(\"\");\n                colorPop.hide();\n            });\n        },\n\n        createTable:function (hasTitle, hasTitleCol, hasCaption) {\n            var arr = [],\n                sortSpan = '<span>^</span>';\n            arr.push(\"<table id='J_example'>\");\n            if (hasCaption) {\n                arr.push(\"<caption>\" + lang.captionName + \"</caption>\")\n            }\n            if (hasTitle) {\n                arr.push(\"<tr>\");\n                if(hasTitleCol) { arr.push(\"<th>\" + lang.titleName + \"</th>\"); }\n                for (var j = 0; j < 5; j++) {\n                    arr.push(\"<th>\" + lang.titleName + \"</th>\");\n                }\n                arr.push(\"</tr>\");\n            }\n            for (var i = 0; i < 6; i++) {\n                arr.push(\"<tr>\");\n                if(hasTitleCol) { arr.push(\"<th>\" + lang.titleName + \"</th>\") }\n                for (var k = 0; k < 5; k++) {\n                    arr.push(\"<td>\" + lang.cellsName + \"</td>\")\n                }\n                arr.push(\"</tr>\");\n            }\n            arr.push(\"</table>\");\n            preview.innerHTML = arr.join(\"\");\n            this.updateSortSpan();\n        },\n        titleHanler:function () {\n            var example = $G(\"J_example\"),\n                frg=document.createDocumentFragment(),\n                color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, \"td\")[0], \"border-color\"),\n                colCount = example.rows[0].children.length;\n\n            if (title.checked) {\n                example.insertRow(0);\n                for (var i = 0, node; i < colCount; i++) {\n                    node = document.createElement(\"th\");\n                    node.innerHTML = lang.titleName;\n                    frg.appendChild(node);\n                }\n                example.rows[0].appendChild(frg);\n\n            } else {\n                domUtils.remove(example.rows[0]);\n            }\n            me.setColor(color);\n            me.updateSortSpan();\n        },\n        titleColHanler:function () {\n            var example = $G(\"J_example\"),\n                color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, \"td\")[0], \"border-color\"),\n                colArr = example.rows,\n                colCount = colArr.length;\n\n            if (titleCol.checked) {\n                for (var i = 0, node; i < colCount; i++) {\n                    node = document.createElement(\"th\");\n                    node.innerHTML = lang.titleName;\n                    colArr[i].insertBefore(node, colArr[i].children[0]);\n                }\n            } else {\n                for (var i = 0; i < colCount; i++) {\n                    domUtils.remove(colArr[i].children[0]);\n                }\n            }\n            me.setColor(color);\n            me.updateSortSpan();\n        },\n        captionHanler:function () {\n            var example = $G(\"J_example\");\n            if (caption.checked) {\n                var row = document.createElement('caption');\n                row.innerHTML = lang.captionName;\n                example.insertBefore(row, example.firstChild);\n            } else {\n                domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]);\n            }\n        },\n        sorttableHanler:function(){\n            me.updateSortSpan();\n        },\n        autoSizeContentHanler:function () {\n            var example = $G(\"J_example\");\n            example.removeAttribute(\"width\");\n        },\n        autoSizePageHanler:function () {\n            var example = $G(\"J_example\");\n            var tds = example.getElementsByTagName(example, \"td\");\n            utils.each(tds, function (td) {\n                td.removeAttribute(\"width\");\n            });\n            example.setAttribute('width', '100%');\n        },\n        updateSortSpan: function(){\n            var example = $G(\"J_example\"),\n                row = example.rows[0];\n\n            var spans = domUtils.getElementsByTagName(example,\"span\");\n            utils.each(spans,function(span){\n                span.parentNode.removeChild(span);\n            });\n            if (sorttable.checked) {\n                utils.each(row.cells, function(cell, i){\n                    var span = document.createElement(\"span\");\n                    span.innerHTML = \"^\";\n                    cell.appendChild(span);\n                });\n            }\n        },\n        getColor:function () {\n            var start = editor.selection.getStart(), color,\n                cell = domUtils.findParentByTagName(start, [\"td\", \"th\", \"caption\"], true);\n            color = cell && domUtils.getComputedStyle(cell, \"border-color\");\n            if (!color)  color = \"#DDDDDD\";\n            return color;\n        },\n        setColor:function (color) {\n            var example = $G(\"J_example\"),\n                arr = domUtils.getElementsByTagName(example, \"td\").concat(\n                    domUtils.getElementsByTagName(example, \"th\"),\n                    domUtils.getElementsByTagName(example, \"caption\")\n                );\n\n            tone.value = color;\n            utils.each(arr, function (node) {\n                node.style.borderColor = color;\n            });\n\n        },\n        setAutoSize:function () {\n            var me = this;\n            autoSizePage.checked = true;\n            me.autoSizePageHanler();\n        }\n    };\n\n    new editTable;\n\n    dialog.onok = function () {\n        editor.__hasEnterExecCommand = true;\n\n        var checks = {\n            title:\"inserttitle deletetitle\",\n            titleCol:\"inserttitlecol deletetitlecol\",\n            caption:\"insertcaption deletecaption\",\n            sorttable:\"enablesort disablesort\"\n        };\n        editor.fireEvent('saveScene');\n        for(var i in checks){\n            var cmds = checks[i].split(\" \"),\n                input = $G(\"J_\" + i);\n            if(input[\"checked\"]){\n                editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]);\n            }else{\n                editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]);\n            }\n        }\n\n        editor.execCommand(\"edittable\", tone.value);\n        autoSizeContent.checked ?editor.execCommand('adaptbytext') : \"\";\n        autoSizePage.checked ? editor.execCommand(\"adaptbywindow\") : \"\";\n        editor.fireEvent('saveScene');\n\n        editor.__hasEnterExecCommand = false;\n    };\n})();"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/table/edittd.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .section {\n            text-align: center;\n            margin-top: 10px;\n        }\n        .section input {\n            margin-left: 5px;\n            width: 70px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <span><var id=\"lang_tdBkColor\"></var></span>\n    <input type=\"text\" id=\"J_tone\"/>\n</div>\n<script type=\"text/javascript\">\n    var tone = $G(\"J_tone\"),\n            colorPiker = new UE.ui.ColorPicker({\n                editor:editor\n            }),\n            colorPop = new UE.ui.Popup({\n                editor:editor,\n                content:colorPiker\n            });\n    domUtils.on(tone, \"click\", function () {\n        colorPop.showAnchor(tone);\n    });\n    domUtils.on(document, 'mousedown', function () {\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"pickcolor\", function () {\n        tone.value = arguments[1];\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"picknocolor\", function () {\n        tone.value=\"\";\n        colorPop.hide();\n    });\n    dialog.onok=function(){\n        editor.execCommand(\"edittd\",tone.value);\n    };\n\n    var start = editor.selection.getStart(),\n        cell = start && domUtils.findParentByTagName(start, [\"td\", \"th\"], true);\n    if(cell){\n        var color = domUtils.getComputedStyle(cell,'background-color');\n        if(/^#/.test(color)){\n            tone.value = color\n        }\n\n    }\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/table/edittip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title>表格删除提示</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .section {\n            width: 200px;\n            margin: 10px auto 0;\n            font-size: 14px;\n        }\n\n        .item {\n            text-align: center;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delRow\" name=\"cmd\" checked/><var id=\"lang_delRow\"></var></label>\n    </div>\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delCol\" name=\"cmd\"/><var id=\"lang_delCol\"></var></label>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    dialog.onok = function () {\n        $G(\"J_delRow\").checked ? editor.execCommand(\"deleterow\") : editor.execCommand(\"deletecol\");\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/template/config.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-8-8\n * Time: 下午2:00\n * To change this template use File | Settings | File Templates.\n */\nvar templates = [\n    {\n        \"pre\":\"pre0.png\",\n        'title':lang.blank,\n        'preHtml':'<p class=\"ue_t\">&nbsp;欢迎使用UEditor！</p>',\n        \"html\":'<p class=\"ue_t\">欢迎使用UEditor！</p>'\n\n    },\n    {\n        \"pre\":\"pre1.png\",\n        'title':lang.blog,\n        'preHtml':'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">深入理解Range</span></h1><p style=\"text-align:center;\"><strong class=\" \">UEditor二次开发</strong></p><h3><span class=\" \" style=\"font-family:幼圆\">什么是Range</span></h3><p style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 </p><br /><h3><span class=\" \" style=\"font-family:幼圆\">Range能干什么</span></h3><p style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。</p>',\n        \"html\":'<h1 class=\"ue_t\" label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">[键入文档标题]</span></h1><p style=\"text-align:center;\"><strong class=\"ue_t\">[键入文档副标题]</strong></p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 1]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 2]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观，还是使用某种直接指定的格式。 </p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 3]</span></h3><p class=\"ue_t\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><p class=\"ue_t\"><br /></p>'\n\n    },\n    {\n        \"pre\":\"pre2.png\",\n        'title':lang.resume,\n        'preHtml':'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\" \">WEB前端开发简历</span></h1><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"100\" style=\"text-align:center;\"><p><span style=\"background-color:transparent;\">插</span><br /></p><p>入</p><p>照</p><p>片</p></td><td><p><span style=\"background-color:transparent;\"> 联系电话：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电话]</span><br /></p><p><span style=\"background-color:transparent;\"> 电子邮件：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电子邮件地址]</span><br /></p><p><span style=\"background-color:transparent;\"> 家庭住址：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的地址]</span><br /></p></td></tr></tbody></table><h3><span style=\"color:#E36C09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\" \">WEB前端研发工程师</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">﻿</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[起止时间]</span> <span class=\"ue_t\">[学校名称] </span> <span class=\"ue_t\">[所学专业]</span> <span class=\"ue_t\">[所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><p><br /></p>',\n        \"html\":'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\"ue_t\">[此处键入简历标题]</span></h1><p><span style=\"color:#e36c09;\"><br /></span></p><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"200\" style=\"text-align:center;\" class=\"ue_t\">【此处插入照片】</td><td><p><br /></p><p> 联系电话：<span class=\"ue_t\">[键入您的电话]</span></p><p><br /></p><p> 电子邮件：<span class=\"ue_t\">[键入您的电子邮件地址]</span></p><p><br /></p><p> 家庭住址：<span class=\"ue_t\">[键入您的地址]</span></p><p><br /></p></td></tr></tbody></table><h3><span style=\"color:#e36c09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\"ue_t\">[此处键入您的期望职位]</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">﻿</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称] </span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称]</span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol></ol><p><span style=\"color:#e36c09;font-size:20px;\">掌握技能</span></p><p style=\"text-indent:2em;\"> &nbsp;<span class=\"ue_t\">[这里可以键入您所掌握的技能]</span><br /></p>'\n\n    },\n    {\n        \"pre\":\"pre3.png\",\n        'title':lang.richText,\n        'preHtml':'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"150\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:150px;height:100px;float:left;\" />图文混排方法</p><p>图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文</p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"100\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:100px;height:100px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p>',\n        \"html\":'<p><br /></p><h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"300\" height=\"200\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:200px;float:left;\" />图文混排方法</p><p>1. 图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文本</p><p><br /></p><p>2. 图片居右，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居右对齐，然后即可在左边输入多行文本</p><p><br /></p><p>3. 图片居中环绕排版</p><p>方法：亲，这个真心没有办法。。。</p><p><br /></p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"300\" height=\"300\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:300px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p><br /></p>'\n    },\n    {\n        \"pre\":\"pre4.png\",\n        'title':lang.sciPapers,\n        'preHtml':'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><br /></p>',\n        'html':'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个列表瞅瞅：</span></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以多行</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">右边是图片</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">绝对没有问题的，不信你也可以试试看</span></p><p><br /></p>'\n    }\n];"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/template/template.css",
    "content": ".wrap{ padding: 5px;font-size: 14px;}\n.left{width:425px;float: left;}\n.right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;}\n.right .pre{height: 332px;overflow-y: auto;}\n.right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;}\n.right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;}\n.right .preitem img{display: block;margin: 0 auto;width:100px;}\n.clear{clear: both;}\n.top{height:26px;line-height: 26px;padding: 5px;}\n.bottom{height:320px;width:100%;margin: 0 auto;}\n.transparent{ background: url(\"images/bg.gif\") repeat;}\n.bottom table tr td{border:1px dashed #ccc;}\n#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;}\n.border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}\np{margin: 5px 0}\ntable{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;}\nli{clear:both}\nol{padding-left:40px; }"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/template/template.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"template.css\">\n</head>\n<body>\n    <div class=\"wrap\">\n        <div class=\"left\">\n            <div class=\"top\">\n                <label><var id=\"lang_template_clear\"></var>：<input id=\"issave\" type=\"checkbox\"></label>\n            </div>\n            <div class=\"bottom border_style1\" id=\"preview\"></div>\n        </div>\n        <fieldset  class=\"right border_style1\">\n            <legend><var id=\"lang_template_select\"></var></legend>\n            <div class=\"pre\" id=\"preitem\"></div>\n        </fieldset>\n        <div class=\"clear\"></div>\n    </div>\n    <script type=\"text/javascript\" src=\"config.js\"></script>\n    <script type=\"text/javascript\" src=\"template.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/template/template.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-8-8\n * Time: 下午2:09\n * To change this template use File | Settings | File Templates.\n */\n(function () {\n    var me = editor,\n            preview = $G( \"preview\" ),\n            preitem = $G( \"preitem\" ),\n            tmps = templates,\n            currentTmp;\n    var initPre = function () {\n        var str = \"\";\n        for ( var i = 0, tmp; tmp = tmps[i++]; ) {\n            str += '<div class=\"preitem\" onclick=\"pre(' + i + ')\"><img src=\"' + \"images/\" + tmp.pre + '\" ' + (tmp.title ? \"alt=\" + tmp.title + \" title=\" + tmp.title + \"\" : \"\") + '></div>';\n        }\n        preitem.innerHTML = str;\n    };\n    var pre = function ( n ) {\n        var tmp = tmps[n - 1];\n        currentTmp = tmp;\n        clearItem();\n        domUtils.setStyles( preitem.childNodes[n - 1], {\n            \"background-color\":\"lemonChiffon\",\n            \"border\":\"#ccc 1px solid\"\n        } );\n        preview.innerHTML = tmp.preHtml ? tmp.preHtml : \"\";\n    };\n    var clearItem = function () {\n        var items = preitem.children;\n        for ( var i = 0, item; item = items[i++]; ) {\n            domUtils.setStyles( item, {\n                \"background-color\":\"\",\n                \"border\":\"white 1px solid\"\n            } );\n        }\n    };\n    dialog.onok = function () {\n        if ( !$G( \"issave\" ).checked ){\n            me.execCommand( \"cleardoc\" );\n        }\n        var obj = {\n            html:currentTmp && currentTmp.html\n        };\n        me.execCommand( \"template\", obj );\n    };\n    initPre();\n    window.pre = pre;\n    pre(2)\n\n})();"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/video/video.css",
    "content": "@charset \"utf-8\";\n.wrapper{ width: 570px;_width:575px;margin: 10px auto; zoom:1;position: relative}\n.tabbody{height: 335px;}\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n.tabbody .panel.focus {\n    width: 100%;\n    height: 335px;\n    display: block;\n}\n\n.tabbody .panel table td{vertical-align: middle;}\n#videoUrl {\n    width: 490px;\n    height: 21px;\n    line-height: 21px;\n    margin: 8px 5px;\n    background: #FFF;\n    border: 1px solid #d7d7d7;\n}\n#videoSearchTxt{margin-left:15px;background: #FFF;width:200px;height:21px;line-height:21px;border: 1px solid #d7d7d7;}\n#searchList{width: 570px;overflow: auto;zoom:1;height: 270px;}\n#searchList div{float: left;width: 120px;height: 135px;margin: 5px 15px;}\n#searchList img{margin: 2px 8px;cursor: pointer;border: 2px solid #fff} /*不用缩略图*/\n#searchList p{margin-left: 10px;}\n#videoType{\n    width: 65px;\n    height: 23px;\n    line-height: 22px;\n    border: 1px solid #d7d7d7;\n}\n#videoSearchBtn,#videoSearchReset{\n    /*width: 80px;*/\n    height: 25px;\n    line-height: 25px;\n    background: #eee;\n    border: 1px solid #d7d7d7;\n    cursor: pointer;\n    padding: 0 5px;\n}\n\n\n\n#preview{position: relative;width: 420px;padding:0;overflow: hidden; margin-left: 10px; _margin-left:5px; height: 280px;background-color: #ddd;float: left}\n#preview .previewMsg {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color: #666;}\n#preview .previewMsg span{display:block;margin: 125px auto 0 auto;text-align:center;font-size:18px;color:#fff;}\n#preview .previewVideo {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;}\n.edui-video-wrapper fieldset{\n    border: 1px solid #ddd;\n    padding-left: 5px;\n    margin-bottom: 20px;\n    padding-bottom: 5px;\n    width: 115px;\n}\n\n#videoInfo {width: 120px;float: left;margin-left: 10px;_margin-left:7px;}\nfieldset{\n    border: 1px solid #ddd;\n    padding-left: 5px;\n    margin-bottom: 20px;\n    padding-bottom: 5px;\n    width: 115px;\n}\nfieldset legend{font-weight: bold;}\nfieldset p{line-height: 30px;}\nfieldset input.txt{\n    width: 65px;\n    height: 21px;\n    line-height: 21px;\n    margin: 8px 5px;\n    background: #FFF;\n    border: 1px solid #d7d7d7;\n}\nlabel.url{font-weight: bold;margin-left: 5px;color: #06c;}\n#videoFloat div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;}\n#videoFloat .focus{opacity: 1;filter: alpha(opacity = 100)}\nspan.view{display: inline-block;width: 30px;float: right;cursor: pointer;color: blue}\n\n\n\n\n/* upload video */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 335px;\n    display: block;\n    clip: auto;\n}\n#upload_alignment div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;}\n#upload_alignment .focus{opacity: 1;filter: alpha(opacity = 100)}\n#upload_left { width:427px; float:left; }\n#upload_left .controller { height: 30px; clear: both; }\n#uploadVideoInfo{margin-top:10px;float:right;padding-right:8px;}\n\n#upload .queueList {\n    margin: 0;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    margin-right:0;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 161px;\n    padding-top: 150px;\n    text-align: center;\n    width: 97%;\n    float: left;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top:0;\n    *margin-left: 0;\n    *left: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 285px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 15px 0 0 20px;\n    *margin: 15px 0 0 15px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n#upload .filelist li p.imgWrap.notimage {\n    margin-top: 0;\n    width: 111px;\n    height: 111px;\n    border: 1px #eeeeee solid;\n}\n#upload .filelist li p.imgWrap.notimage i.file-preview {\n    margin-top: 15px;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display:none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background-image: url(./images/success.gif) \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n#upload .filelist li.filePickerBlock div.webuploader-pick  {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display:none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display:none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused{\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover{\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter:alpha(opacity=60);\n    -moz-opacity:0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n/* 在线文件的文件预览图标 */\ni.file-preview {\n    display: block;\n    margin: 10px auto;\n    width: 70px;\n    height: 70px;\n    background-image: url(\"./images/file-icons.png\");\n    background-image: url(\"./images/file-icons.gif\") \\9;\n    background-position: -140px center;\n    background-repeat: no-repeat;\n}\ni.file-preview.file-type-dir{\n    background-position: 0 center;\n}\ni.file-preview.file-type-file{\n    background-position: -140px center;\n}\ni.file-preview.file-type-filelist{\n    background-position: -210px center;\n}\ni.file-preview.file-type-zip,\ni.file-preview.file-type-rar,\ni.file-preview.file-type-7z,\ni.file-preview.file-type-tar,\ni.file-preview.file-type-gz,\ni.file-preview.file-type-bz2{\n    background-position: -280px center;\n}\ni.file-preview.file-type-xls,\ni.file-preview.file-type-xlsx{\n    background-position: -350px center;\n}\ni.file-preview.file-type-doc,\ni.file-preview.file-type-docx{\n    background-position: -420px center;\n}\ni.file-preview.file-type-ppt,\ni.file-preview.file-type-pptx{\n    background-position: -490px center;\n}\ni.file-preview.file-type-vsd{\n    background-position: -560px center;\n}\ni.file-preview.file-type-pdf{\n    background-position: -630px center;\n}\ni.file-preview.file-type-txt,\ni.file-preview.file-type-md,\ni.file-preview.file-type-json,\ni.file-preview.file-type-htm,\ni.file-preview.file-type-xml,\ni.file-preview.file-type-html,\ni.file-preview.file-type-js,\ni.file-preview.file-type-css,\ni.file-preview.file-type-php,\ni.file-preview.file-type-jsp,\ni.file-preview.file-type-asp{\n    background-position: -700px center;\n}\ni.file-preview.file-type-apk{\n    background-position: -770px center;\n}\ni.file-preview.file-type-exe{\n    background-position: -840px center;\n}\ni.file-preview.file-type-ipa{\n    background-position: -910px center;\n}\ni.file-preview.file-type-mp4,\ni.file-preview.file-type-swf,\ni.file-preview.file-type-mkv,\ni.file-preview.file-type-avi,\ni.file-preview.file-type-flv,\ni.file-preview.file-type-mov,\ni.file-preview.file-type-mpg,\ni.file-preview.file-type-mpeg,\ni.file-preview.file-type-ogv,\ni.file-preview.file-type-webm,\ni.file-preview.file-type-rm,\ni.file-preview.file-type-rmvb{\n    background-position: -980px center;\n}\ni.file-preview.file-type-ogg,\ni.file-preview.file-type-wav,\ni.file-preview.file-type-wmv,\ni.file-preview.file-type-mid,\ni.file-preview.file-type-mp3{\n    background-position: -1050px center;\n}\ni.file-preview.file-type-jpg,\ni.file-preview.file-type-jpeg,\ni.file-preview.file-type-gif,\ni.file-preview.file-type-bmp,\ni.file-preview.file-type-png,\ni.file-preview.file-type-psd{\n    background-position: -140px center;\n}"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/video/video.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"video.css\" />\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"videoTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"video\" class=\"focus\" data-content-id=\"video\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" data-content-id=\"upload\"><var id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"video\" class=\"panel focus\">\n               <table><tr><td><label for=\"videoUrl\" class=\"url\"><var id=\"lang_video_url\"></var></label></td><td><input id=\"videoUrl\" type=\"text\"></td></tr></table>\n               <div id=\"preview\"></div>\n               <div id=\"videoInfo\">\n                   <fieldset>\n                       <legend><var id=\"lang_video_size\"></var></legend>\n                       <table>\n                           <tr><td><label for=\"videoWidth\"><var id=\"lang_videoW\"></var></label></td><td><input class=\"txt\" id=\"videoWidth\" type=\"text\"/></td></tr>\n                           <tr><td><label for=\"videoHeight\"><var id=\"lang_videoH\"></var></label></td><td><input class=\"txt\" id=\"videoHeight\" type=\"text\"/></td></tr>\n                       </table>\n                   </fieldset>\n                   <fieldset>\n                      <legend><var id=\"lang_alignment\"></var></legend>\n                      <div id=\"videoFloat\"></div>\n                  </fieldset>\n               </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div><div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadVideoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_size\"></var></legend>\n                        <table>\n                            <tr><td><label><var id=\"lang_upload_width\"></var></label></td><td><input class=\"txt\" id=\"upload_width\" type=\"text\"/></td></tr>\n                            <tr><td><label><var id=\"lang_upload_height\"></var></label></td><td><input class=\"txt\" id=\"upload_height\" type=\"text\"/></td></tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.min.js\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.min.js\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css\">\n\n<!-- video -->\n<script type=\"text/javascript\" src=\"video.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/video/video.js",
    "content": "/**\n * Created by JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-2-20\n * Time: 上午11:19\n * To change this template use File | Settings | File Templates.\n */\n\n;(function () {\n  var video = {},\n    uploadVideoList = [],\n    isModifyUploadVideo = false,\n    uploadFile\n\n  window.onload = function () {\n    $focus($G('videoUrl'))\n    initTabs()\n    initVideo()\n    initUpload()\n  }\n\n  /* 初始化tab标签 */\n  function initTabs() {\n    var tabs = $G('tabHeads').children\n    for (var i = 0; i < tabs.length; i++) {\n      domUtils.on(tabs[i], 'click', function (e) {\n        var j,\n          bodyId,\n          target = e.target || e.srcElement\n        for (j = 0; j < tabs.length; j++) {\n          bodyId = tabs[j].getAttribute('data-content-id')\n          if (tabs[j] == target) {\n            domUtils.addClass(tabs[j], 'focus')\n            domUtils.addClass($G(bodyId), 'focus')\n          } else {\n            domUtils.removeClasses(tabs[j], 'focus')\n            domUtils.removeClasses($G(bodyId), 'focus')\n          }\n        }\n      })\n    }\n  }\n\n  function initVideo() {\n    createAlignButton(['videoFloat', 'upload_alignment'])\n    addUrlChangeListener($G('videoUrl'))\n    addOkListener()\n\n    //编辑视频时初始化相关信息\n    ;(function () {\n      var img = editor.selection.getRange().getClosedNode(),\n        url\n      if (img && img.className) {\n        var hasFakedClass = img.className == 'edui-faked-video',\n          hasUploadClass = img.className.indexOf('edui-upload-video') != -1\n        if (hasFakedClass || hasUploadClass) {\n          $G('videoUrl').value = url = img.getAttribute('_url')\n          $G('videoWidth').value = img.width\n          $G('videoHeight').value = img.height\n          var align = domUtils.getComputedStyle(img, 'float'),\n            parentAlign = domUtils.getComputedStyle(\n              img.parentNode,\n              'text-align'\n            )\n          updateAlignButton(parentAlign === 'center' ? 'center' : align)\n        }\n        if (hasUploadClass) {\n          isModifyUploadVideo = true\n        }\n      }\n      createPreviewVideo(url)\n    })()\n  }\n\n  /**\n   * 监听确认和取消两个按钮事件，用户执行插入或者清空正在播放的视频实例操作\n   */\n  function addOkListener() {\n    dialog.onok = function () {\n      $G('preview').innerHTML = ''\n      var currentTab = findFocus('tabHeads', 'tabSrc')\n      switch (currentTab) {\n        case 'video':\n          return insertSingle()\n          break\n        case 'videoSearch':\n          return insertSearch('searchList')\n          break\n        case 'upload':\n          return insertUpload()\n          break\n      }\n    }\n    dialog.oncancel = function () {\n      $G('preview').innerHTML = ''\n    }\n  }\n\n  /**\n   * 依据传入的align值更新按钮信息\n   * @param align\n   */\n  function updateAlignButton(align) {\n    var aligns = $G('videoFloat').children\n    for (var i = 0, ci; (ci = aligns[i++]); ) {\n      if (ci.getAttribute('name') == align) {\n        if (ci.className != 'focus') {\n          ci.className = 'focus'\n        }\n      } else {\n        if (ci.className == 'focus') {\n          ci.className = ''\n        }\n      }\n    }\n  }\n\n  /**\n   * 将单个视频信息插入编辑器中\n   */\n  function insertSingle() {\n    var width = $G('videoWidth'),\n      height = $G('videoHeight'),\n      url = $G('videoUrl').value,\n      align = findFocus('videoFloat', 'name')\n    if (!url) return false\n    if (!checkNum([width, height])) return false\n    editor.execCommand(\n      'insertvideo',\n      {\n        url: convert_url(url),\n        width: width.value,\n        height: height.value,\n        align: align,\n      },\n      isModifyUploadVideo ? 'upload' : null\n    )\n  }\n\n  /**\n   * 将元素id下的所有代表视频的图片插入编辑器中\n   * @param id\n   */\n  function insertSearch(id) {\n    var imgs = domUtils.getElementsByTagName($G(id), 'img'),\n      videoObjs = []\n    for (var i = 0, img; (img = imgs[i++]); ) {\n      if (img.getAttribute('selected')) {\n        videoObjs.push({\n          url: img.getAttribute('ue_video_url'),\n          width: 420,\n          height: 280,\n          align: 'none',\n        })\n      }\n    }\n    editor.execCommand('insertvideo', videoObjs)\n  }\n\n  /**\n   * 找到id下具有focus类的节点并返回该节点下的某个属性\n   * @param id\n   * @param returnProperty\n   */\n  function findFocus(id, returnProperty) {\n    var tabs = $G(id).children,\n      property\n    for (var i = 0, ci; (ci = tabs[i++]); ) {\n      if (ci.className == 'focus') {\n        property = ci.getAttribute(returnProperty)\n        break\n      }\n    }\n    return property\n  }\n  function convert_url(url) {\n    if (!url) return ''\n    url = utils\n      .trim(url)\n      .replace(\n        /v\\.youku\\.com\\/v_show\\/id_([\\w\\-=]+)\\.html/i,\n        'player.youku.com/player.php/sid/$1/v.swf'\n      )\n      .replace(\n        /(www\\.)?youtube\\.com\\/watch\\?v=([\\w\\-]+)/i,\n        'www.youtube.com/v/$2'\n      )\n      .replace(/youtu.be\\/(\\w+)$/i, 'www.youtube.com/v/$1')\n      .replace(\n        /v\\.ku6\\.com\\/.+\\/([\\w\\.]+)\\.html.*$/i,\n        'player.ku6.com/refer/$1/v.swf'\n      )\n      .replace(\n        /www\\.56\\.com\\/u\\d+\\/v_([\\w\\-]+)\\.html/i,\n        'player.56.com/v_$1.swf'\n      )\n      .replace(\n        /www.56.com\\/w\\d+\\/play_album\\-aid\\-\\d+_vid\\-([^.]+)\\.html/i,\n        'player.56.com/v_$1.swf'\n      )\n      .replace(\n        /v\\.pps\\.tv\\/play_([\\w]+)\\.html.*$/i,\n        'player.pps.tv/player/sid/$1/v.swf'\n      )\n      .replace(\n        /www\\.letv\\.com\\/ptv\\/vplay\\/([\\d]+)\\.html.*$/i,\n        'i7.imgs.letv.com/player/swfPlayer.swf?id=$1&autoplay=0'\n      )\n      .replace(\n        /www\\.tudou\\.com\\/programs\\/view\\/([\\w\\-]+)\\/?/i,\n        'www.tudou.com/v/$1'\n      )\n      .replace(\n        /v\\.qq\\.com\\/cover\\/[\\w]+\\/[\\w]+\\/([\\w]+)\\.html/i,\n        'static.video.qq.com/TPout.swf?vid=$1'\n      )\n      .replace(\n        /v\\.qq\\.com\\/.+[\\?\\&]vid=([^&]+).*$/i,\n        'static.video.qq.com/TPout.swf?vid=$1'\n      )\n      .replace(\n        /my\\.tv\\.sohu\\.com\\/[\\w]+\\/[\\d]+\\/([\\d]+)\\.shtml.*$/i,\n        'share.vrs.sohu.com/my/v.swf&id=$1'\n      )\n\n    return url\n  }\n\n  /**\n   * 检测传入的所有input框中输入的长宽是否是正数\n   * @param nodes input框集合，\n   */\n  function checkNum(nodes) {\n    for (var i = 0, ci; (ci = nodes[i++]); ) {\n      var value = ci.value\n      if (!isNumber(value) && value) {\n        alert(lang.numError)\n        ci.value = ''\n        ci.focus()\n        return false\n      }\n    }\n    return true\n  }\n\n  /**\n   * 数字判断\n   * @param value\n   */\n  function isNumber(value) {\n    return /(0|^[1-9]\\d*$)/.test(value)\n  }\n\n  /**\n   * 创建图片浮动选择按钮\n   * @param ids\n   */\n  function createAlignButton(ids) {\n    for (var i = 0, ci; (ci = ids[i++]); ) {\n      var floatContainer = $G(ci),\n        nameMaps = {\n          none: lang['default'],\n          left: lang.floatLeft,\n          right: lang.floatRight,\n          center: lang.block,\n        }\n      for (var j in nameMaps) {\n        var div = document.createElement('div')\n        div.setAttribute('name', j)\n        if (j == 'none') div.className = 'focus'\n        div.style.cssText = 'background:url(images/' + j + '_focus.jpg);'\n        div.setAttribute('title', nameMaps[j])\n        floatContainer.appendChild(div)\n      }\n      switchSelect(ci)\n    }\n  }\n\n  /**\n   * 选择切换\n   * @param selectParentId\n   */\n  function switchSelect(selectParentId) {\n    var selects = $G(selectParentId).children\n    for (var i = 0, ci; (ci = selects[i++]); ) {\n      domUtils.on(ci, 'click', function () {\n        for (var j = 0, cj; (cj = selects[j++]); ) {\n          cj.className = ''\n          cj.removeAttribute && cj.removeAttribute('class')\n        }\n        this.className = 'focus'\n      })\n    }\n  }\n\n  /**\n   * 监听url改变事件\n   * @param url\n   */\n  function addUrlChangeListener(url) {\n    if (browser.ie) {\n      url.onpropertychange = function () {\n        createPreviewVideo(this.value)\n      }\n    } else {\n      url.addEventListener(\n        'input',\n        function () {\n          createPreviewVideo(this.value)\n        },\n        false\n      )\n    }\n  }\n\n  /**\n   * 根据url生成视频预览\n   * @param url\n   */\n  function createPreviewVideo(url) {\n    if (!url) return\n\n    var conUrl = convert_url(url)\n\n    $G('preview').innerHTML =\n      '<div class=\"previewMsg\"><span>' +\n      lang.urlError +\n      '</span></div>' +\n      '<embed class=\"previewVideo\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"' +\n      ' src=\"' +\n      conUrl +\n      '\"' +\n      ' width=\"' +\n      420 +\n      '\"' +\n      ' height=\"' +\n      280 +\n      '\"' +\n      ' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >' +\n      '</embed>'\n  }\n\n  /* 插入上传视频 */\n  function insertUpload() {\n    var videoObjs = [],\n      uploadDir = editor.getOpt('videoUrlPrefix'),\n      width = $G('upload_width').value || 420,\n      height = $G('upload_height').value || 280,\n      align = findFocus('upload_alignment', 'name') || 'none'\n    for (var key in uploadVideoList) {\n      var file = uploadVideoList[key]\n      videoObjs.push({\n        url: uploadDir + file.url,\n        width: width,\n        height: height,\n        align: align,\n      })\n    }\n\n    var count = uploadFile.getQueueCount()\n    if (count) {\n      $('.info', '#queueList').html(\n        '<span style=\"color:red;\">' +\n          '还有2个未上传文件'.replace(/[\\d]/, count) +\n          '</span>'\n      )\n      return false\n    } else {\n      editor.execCommand('insertvideo', videoObjs, 'upload')\n    }\n  }\n\n  /*初始化上传标签*/\n  function initUpload() {\n    uploadFile = new UploadFile('queueList')\n  }\n\n  /* 上传附件 */\n  function UploadFile(target) {\n    this.$wrap = target.constructor == String ? $('#' + target) : $(target)\n    this.init()\n  }\n  UploadFile.prototype = {\n    init: function () {\n      this.fileList = []\n      this.initContainer()\n      this.initUploader()\n    },\n    initContainer: function () {\n      this.$queue = this.$wrap.find('.filelist')\n    },\n    /* 初始化容器 */\n    initUploader: function () {\n      var _this = this,\n        $ = jQuery, // just in case. Make sure it's not an other libaray.\n        $wrap = _this.$wrap,\n        // 图片容器\n        $queue = $wrap.find('.filelist'),\n        // 状态栏，包括进度和控制按钮\n        $statusBar = $wrap.find('.statusBar'),\n        // 文件总体选择信息。\n        $info = $statusBar.find('.info'),\n        // 上传按钮\n        $upload = $wrap.find('.uploadBtn'),\n        // 上传按钮\n        $filePickerBtn = $wrap.find('.filePickerBtn'),\n        // 上传按钮\n        $filePickerBlock = $wrap.find('.filePickerBlock'),\n        // 没选择文件之前的内容。\n        $placeHolder = $wrap.find('.placeholder'),\n        // 总体进度条\n        $progress = $statusBar.find('.progress').hide(),\n        // 添加的文件数量\n        fileCount = 0,\n        // 添加的文件总大小\n        fileSize = 0,\n        // 优化retina, 在retina下这个值是2\n        ratio = window.devicePixelRatio || 1,\n        // 缩略图大小\n        thumbnailWidth = 113 * ratio,\n        thumbnailHeight = 113 * ratio,\n        // 可能有pedding, ready, uploading, confirm, done.\n        state = '',\n        // 所有文件的进度信息，key为file id\n        percentages = {},\n        supportTransition = (function () {\n          var s = document.createElement('p').style,\n            r =\n              'transition' in s ||\n              'WebkitTransition' in s ||\n              'MozTransition' in s ||\n              'msTransition' in s ||\n              'OTransition' in s\n          s = null\n          return r\n        })(),\n        // WebUploader实例\n        uploader,\n        actionUrl = editor.getActionUrl(editor.getOpt('videoActionName')),\n        fileMaxSize = editor.getOpt('videoMaxSize'),\n        acceptExtensions = (editor.getOpt('videoAllowFiles') || [])\n          .join('')\n          .replace(/\\./g, ',')\n          .replace(/^[,]/, '')\n\n      if (!WebUploader.Uploader.support()) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorNotSupport))\n          .hide()\n        return\n      } else if (!editor.getOpt('videoActionName')) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorLoadConfig))\n          .hide()\n        return\n      }\n\n      uploader = _this.uploader = WebUploader.create({\n        pick: {\n          id: '#filePickerReady',\n          label: lang.uploadSelectFile,\n        },\n        swf: '../../third-party/webuploader/Uploader.swf',\n        server: actionUrl,\n        fileVal: editor.getOpt('videoFieldName'),\n        duplicate: true,\n        fileSingleSizeLimit: fileMaxSize,\n        compress: false,\n      })\n      uploader.addButton({\n        id: '#filePickerBlock',\n      })\n      uploader.addButton({\n        id: '#filePickerBtn',\n        label: lang.uploadAddFile,\n      })\n\n      setState('pedding')\n\n      // 当有文件添加进来时执行，负责view的创建\n      function addFile(file) {\n        var $li = $(\n            '<li id=\"' +\n              file.id +\n              '\">' +\n              '<p class=\"title\">' +\n              file.name +\n              '</p>' +\n              '<p class=\"imgWrap\"></p>' +\n              '<p class=\"progress\"><span></span></p>' +\n              '</li>'\n          ),\n          $btns = $(\n            '<div class=\"file-panel\">' +\n              '<span class=\"cancel\">' +\n              lang.uploadDelete +\n              '</span>' +\n              '<span class=\"rotateRight\">' +\n              lang.uploadTurnRight +\n              '</span>' +\n              '<span class=\"rotateLeft\">' +\n              lang.uploadTurnLeft +\n              '</span></div>'\n          ).appendTo($li),\n          $prgress = $li.find('p.progress span'),\n          $wrap = $li.find('p.imgWrap'),\n          $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n          showError = function (code) {\n            switch (code) {\n              case 'exceed_size':\n                text = lang.errorExceedSize\n                break\n              case 'interrupt':\n                text = lang.errorInterrupt\n                break\n              case 'http':\n                text = lang.errorHttp\n                break\n              case 'not_allow_type':\n                text = lang.errorFileType\n                break\n              default:\n                text = lang.errorUploadRetry\n                break\n            }\n            $info.text(text).show()\n          }\n\n        if (file.getStatus() === 'invalid') {\n          showError(file.statusText)\n        } else {\n          $wrap.text(lang.uploadPreview)\n          if (\n            '|png|jpg|jpeg|bmp|gif|'.indexOf(\n              '|' + file.ext.toLowerCase() + '|'\n            ) == -1\n          ) {\n            $wrap\n              .empty()\n              .addClass('notimage')\n              .append(\n                '<i class=\"file-preview file-type-' +\n                  file.ext.toLowerCase() +\n                  '\"></i>' +\n                  '<span class=\"file-title\">' +\n                  file.name +\n                  '</span>'\n              )\n          } else {\n            if (browser.ie && browser.version <= 7) {\n              $wrap.text(lang.uploadNoPreview)\n            } else {\n              uploader.makeThumb(\n                file,\n                function (error, src) {\n                  if (\n                    error ||\n                    !src ||\n                    (/^data:/.test(src) && browser.ie && browser.version <= 7)\n                  ) {\n                    $wrap.text(lang.uploadNoPreview)\n                  } else {\n                    var $img = $('<img src=\"' + src + '\">')\n                    $wrap.empty().append($img)\n                    $img.on('error', function () {\n                      $wrap.text(lang.uploadNoPreview)\n                    })\n                  }\n                },\n                thumbnailWidth,\n                thumbnailHeight\n              )\n            }\n          }\n          percentages[file.id] = [file.size, 0]\n          file.rotation = 0\n\n          /* 检查文件格式 */\n          if (\n            !file.ext ||\n            acceptExtensions.indexOf(file.ext.toLowerCase()) == -1\n          ) {\n            showError('not_allow_type')\n            uploader.removeFile(file)\n          }\n        }\n\n        file.on('statuschange', function (cur, prev) {\n          if (prev === 'progress') {\n            $prgress.hide().width(0)\n          } else if (prev === 'queued') {\n            $li.off('mouseenter mouseleave')\n            $btns.remove()\n          }\n          // 成功\n          if (cur === 'error' || cur === 'invalid') {\n            showError(file.statusText)\n            percentages[file.id][1] = 1\n          } else if (cur === 'interrupt') {\n            showError('interrupt')\n          } else if (cur === 'queued') {\n            percentages[file.id][1] = 0\n          } else if (cur === 'progress') {\n            $info.hide()\n            $prgress.css('display', 'block')\n          } else if (cur === 'complete') {\n          }\n\n          $li.removeClass('state-' + prev).addClass('state-' + cur)\n        })\n\n        $li.on('mouseenter', function () {\n          $btns.stop().animate({ height: 30 })\n        })\n        $li.on('mouseleave', function () {\n          $btns.stop().animate({ height: 0 })\n        })\n\n        $btns.on('click', 'span', function () {\n          var index = $(this).index(),\n            deg\n\n          switch (index) {\n            case 0:\n              uploader.removeFile(file)\n              return\n            case 1:\n              file.rotation += 90\n              break\n            case 2:\n              file.rotation -= 90\n              break\n          }\n\n          if (supportTransition) {\n            deg = 'rotate(' + file.rotation + 'deg)'\n            $wrap.css({\n              '-webkit-transform': deg,\n              '-mos-transform': deg,\n              '-o-transform': deg,\n              transform: deg,\n            })\n          } else {\n            $wrap.css(\n              'filter',\n              'progid:DXImageTransform.Microsoft.BasicImage(rotation=' +\n                (~~(((file.rotation / 90) % 4) + 4) % 4) +\n                ')'\n            )\n          }\n        })\n\n        $li.insertBefore($filePickerBlock)\n      }\n\n      // 负责view的销毁\n      function removeFile(file) {\n        var $li = $('#' + file.id)\n        delete percentages[file.id]\n        updateTotalProgress()\n        $li.off().find('.file-panel').off().end().remove()\n      }\n\n      function updateTotalProgress() {\n        var loaded = 0,\n          total = 0,\n          spans = $progress.children(),\n          percent\n\n        $.each(percentages, function (k, v) {\n          total += v[0]\n          loaded += v[0] * v[1]\n        })\n\n        percent = total ? loaded / total : 0\n\n        spans.eq(0).text(Math.round(percent * 100) + '%')\n        spans.eq(1).css('width', Math.round(percent * 100) + '%')\n        updateStatus()\n      }\n\n      function setState(val, files) {\n        if (val != state) {\n          var stats = uploader.getStats()\n\n          $upload.removeClass('state-' + state)\n          $upload.addClass('state-' + val)\n\n          switch (val) {\n            /* 未选择文件 */\n            case 'pedding':\n              $queue.addClass('element-invisible')\n              $statusBar.addClass('element-invisible')\n              $placeHolder.removeClass('element-invisible')\n              $progress.hide()\n              $info.hide()\n              uploader.refresh()\n              break\n\n            /* 可以开始上传 */\n            case 'ready':\n              $placeHolder.addClass('element-invisible')\n              $queue.removeClass('element-invisible')\n              $statusBar.removeClass('element-invisible')\n              $progress.hide()\n              $info.show()\n              $upload.text(lang.uploadStart)\n              uploader.refresh()\n              break\n\n            /* 上传中 */\n            case 'uploading':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadPause)\n              break\n\n            /* 暂停上传 */\n            case 'paused':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadContinue)\n              break\n\n            case 'confirm':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadStart)\n\n              stats = uploader.getStats()\n              if (stats.successNum && !stats.uploadFailNum) {\n                setState('finish')\n                return\n              }\n              break\n\n            case 'finish':\n              $progress.hide()\n              $info.show()\n              if (stats.uploadFailNum) {\n                $upload.text(lang.uploadRetry)\n              } else {\n                $upload.text(lang.uploadStart)\n              }\n              break\n          }\n\n          state = val\n          updateStatus()\n        }\n\n        if (!_this.getQueueCount()) {\n          $upload.addClass('disabled')\n        } else {\n          $upload.removeClass('disabled')\n        }\n      }\n\n      function updateStatus() {\n        var text = '',\n          stats\n\n        if (state === 'ready') {\n          text = lang.updateStatusReady\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n        } else if (state === 'confirm') {\n          stats = uploader.getStats()\n          if (stats.uploadFailNum) {\n            text = lang.updateStatusConfirm\n              .replace('_', stats.successNum)\n              .replace('_', stats.successNum)\n          }\n        } else {\n          stats = uploader.getStats()\n          text = lang.updateStatusFinish\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n            .replace('_', stats.successNum)\n\n          if (stats.uploadFailNum) {\n            text += lang.updateStatusError.replace('_', stats.uploadFailNum)\n          }\n        }\n        $info.html(text)\n      }\n\n      uploader.on('fileQueued', function (file) {\n        fileCount++\n        fileSize += file.size\n\n        if (fileCount === 1) {\n          $placeHolder.addClass('element-invisible')\n          $statusBar.show()\n        }\n\n        addFile(file)\n      })\n\n      uploader.on('fileDequeued', function (file) {\n        if (fileCount > 0) {\n          fileCount--\n          fileSize -= file.size\n        }\n\n        removeFile(file)\n        updateTotalProgress()\n      })\n\n      uploader.on('filesQueued', function (file) {\n        if (\n          !uploader.isInProgress() &&\n          (state == 'pedding' ||\n            state == 'finish' ||\n            state == 'confirm' ||\n            state == 'ready')\n        ) {\n          setState('ready')\n        }\n        updateTotalProgress()\n      })\n\n      uploader.on('all', function (type, files) {\n        switch (type) {\n          case 'uploadFinished':\n            setState('confirm', files)\n            break\n          case 'startUpload':\n            /* 添加额外的GET参数 */\n            var params =\n                utils.serializeParam(editor.queryCommandValue('serverparam')) ||\n                '',\n              url = utils.formatUrl(\n                actionUrl +\n                  (actionUrl.indexOf('?') == -1 ? '?' : '&') +\n                  'encode=utf-8&' +\n                  params\n              )\n            uploader.option('server', url)\n            setState('uploading', files)\n            break\n          case 'stopUpload':\n            setState('paused', files)\n            break\n        }\n      })\n\n      uploader.on('uploadBeforeSend', function (file, data, header) {\n        //这里可以通过data对象添加POST参数\n        if (actionUrl.toLowerCase().indexOf('jsp') != -1) {\n          header['X_Requested_With'] = 'XMLHttpRequest'\n        }\n      })\n\n      uploader.on('uploadProgress', function (file, percentage) {\n        var $li = $('#' + file.id),\n          $percent = $li.find('.progress span')\n\n        $percent.css('width', percentage * 100 + '%')\n        percentages[file.id][1] = percentage\n        updateTotalProgress()\n      })\n\n      uploader.on('uploadSuccess', function (file, ret) {\n        var $file = $('#' + file.id)\n        try {\n          var responseText = ret._raw || ret,\n            json = utils.str2json(responseText)\n          if (json.state == 'SUCCESS') {\n            uploadVideoList.push({\n              url: json.url,\n              type: json.type,\n              original: json.original,\n            })\n            $file.append('<span class=\"success\"></span>')\n          } else {\n            $file.find('.error').text(json.state).show()\n          }\n        } catch (e) {\n          $file.find('.error').text(lang.errorServerUpload).show()\n        }\n      })\n\n      uploader.on('uploadError', function (file, code) {})\n      uploader.on('error', function (code, file) {\n        if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {\n          addFile(file)\n        }\n      })\n      uploader.on('uploadComplete', function (file, ret) {})\n\n      $upload.on('click', function () {\n        if ($(this).hasClass('disabled')) {\n          return false\n        }\n\n        if (state === 'ready') {\n          uploader.upload()\n        } else if (state === 'paused') {\n          uploader.upload()\n        } else if (state === 'uploading') {\n          uploader.stop()\n        }\n      })\n\n      $upload.addClass('state-' + state)\n      updateTotalProgress()\n    },\n    getQueueCount: function () {\n      var file,\n        i,\n        status,\n        readyFile = 0,\n        files = this.uploader.getFiles()\n      for (i = 0; (file = files[i++]); ) {\n        status = file.getStatus()\n        if (status == 'queued' || status == 'uploading' || status == 'progress')\n          readyFile++\n      }\n      return readyFile\n    },\n    refresh: function () {\n      this.uploader.refresh()\n    },\n  }\n})()\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/webapp/webapp.html",
    "content": "<!DOCTYPE>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .wrapper{width: 540px; margin: 10px auto;}\n        #appShow {border: 1px solid #ddd;}\n        .errorMsg{font-size: 13px;margin: 10px;color: #dd0000}\n    </style>\n</head>\n<body>\n    <div class=\"wrapper\">\n        <div id=\"appShow\"></div>\n    </div>\n    <script type=\"text/javascript\">\n        //此处配置您在百度上申请到的appkey。\n        var apikey = editor.options.webAppKey;\n        if ( apikey && apikey.length == 24 ) {\n            var searchConfig = {\n                container:'appShow', //容器ID\n                tips:\"\", //该值用于自动清空\n                search:1, //是否显示搜索框\n                ps:12, //每页显示的条数\n                suggest:1, //是否开启搜索自动完成\n                limit:0, //搜索结果显示条数，0表示无限制\n                searchNow:0, //是否在初始化完成时立即搜索\n                apikey:apikey, //每人得\n                pager:1,\n                cid:7134562,\n                outputHTML:1\n            },baiduApp;\n\n            function clickCallback() {\n                baiduApp.addEventListener( 'getAppHTML', function ( e, data ) {\n                    var url = 'http://app.baidu.com/app/enter?appid='+data.data['app_id'] +'&tn=app_canvas&app_spce_id=1&apikey='+apikey+'&api_key=' + apikey;\n                    editor.execCommand( \"webapp\", {url:url,width:data.uniWidth,height:data.uniHeight+60,logo:data.data['app_logo'],title:data.data['app_name']});\n                    dialog.close();\n                } );\n            }\n\n            var script = document.createElement( \"script\" );\n            script.type = \"text/javascript\";\n            script.src = \"http://app.baidu.com/appweb/api/search?auto=yes&container=container&apikey=\" + apikey + \"&instanceName=baiduApp&callback=clickCallback&config=searchConfig\";\n            document.body.appendChild( script );\n        } else {\n            $G( \"appShow\" ).innerHTML = \"<p class='errorMsg'>\"+lang.tip1+\"<a title='\"+lang.anthorApi+\"' href='http://app.baidu.com/static/cms/getapikey.html' target='_blank'>\"+lang.applyFor+\"</a></p><p class='errorMsg'>\"+lang.tip2+\"</p>\" ;\n        }\n\n    </script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/wordimage/tangram.js",
    "content": "// Copyright (c) 2009, Baidu Inc. All rights reserved.\n// \n// Licensed under the BSD License\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//      http:// tangram.baidu.com/license.html\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n /**\n * @namespace T Tangram七巧板\n * @name T\n * @version 1.6.0\n*/\n\n/**\n * 声明baidu包\n * @author: allstar, erik, meizz, berg\n */\nvar T,\n    baidu = T = baidu || {version: \"1.5.0\"};\nbaidu.guid = \"$BAIDU$\";\nbaidu.$$ = window[baidu.guid] = window[baidu.guid] || {global:{}};\n\n/**\n * 使用flash资源封装的一些功能\n * @namespace baidu.flash\n */\nbaidu.flash = baidu.flash || {};\n\n/**\n * 操作dom的方法\n * @namespace baidu.dom \n */\nbaidu.dom = baidu.dom || {};\n\n\n/**\n * 从文档中获取指定的DOM元素\n * @name baidu.dom.g\n * @function\n * @grammar baidu.dom.g(id)\n * @param {string|HTMLElement} id 元素的id或DOM元素.\n * @shortcut g,T.G\n * @meta standard\n * @see baidu.dom.q\n *\n * @return {HTMLElement|null} 获取的元素，查找不到时返回null,如果参数不合法，直接返回参数.\n */\nbaidu.dom.g = function(id) {\n    if (!id) return null;\n    if ('string' == typeof id || id instanceof String) {\n        return document.getElementById(id);\n    } else if (id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) {\n        return id;\n    }\n    return null;\n};\nbaidu.g = baidu.G = baidu.dom.g;\n\n\n/**\n * 操作数组的方法\n * @namespace baidu.array\n */\n\nbaidu.array = baidu.array || {};\n\n\n/**\n * 遍历数组中所有元素\n * @name baidu.array.each\n * @function\n * @grammar baidu.array.each(source, iterator[, thisObject])\n * @param {Array} source 需要遍历的数组\n * @param {Function} iterator 对每个数组元素进行调用的函数，该函数有两个参数，第一个为数组元素，第二个为数组索引值，function (item, index)。\n * @param {Object} [thisObject] 函数调用时的this指针，如果没有此参数，默认是当前遍历的数组\n * @remark\n * each方法不支持对Object的遍历,对Object的遍历使用baidu.object.each 。\n * @shortcut each\n * @meta standard\n *             \n * @returns {Array} 遍历的数组\n */\n \nbaidu.each = baidu.array.forEach = baidu.array.each = function (source, iterator, thisObject) {\n    var returnValue, item, i, len = source.length;\n    \n    if ('function' == typeof iterator) {\n        for (i = 0; i < len; i++) {\n            item = source[i];\n            returnValue = iterator.call(thisObject || source, item, i);\n    \n            if (returnValue === false) {\n                break;\n            }\n        }\n    }\n    return source;\n};\n\n/**\n * 对语言层面的封装，包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。\n * @namespace baidu.lang\n */\nbaidu.lang = baidu.lang || {};\n\n\n/**\n * 判断目标参数是否为function或Function实例\n * @name baidu.lang.isFunction\n * @function\n * @grammar baidu.lang.isFunction(source)\n * @param {Any} source 目标参数\n * @version 1.2\n * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate\n * @meta standard\n * @returns {boolean} 类型判断结果\n */\nbaidu.lang.isFunction = function (source) {\n    return '[object Function]' == Object.prototype.toString.call(source);\n};\n\n/**\n * 判断目标参数是否string类型或String对象\n * @name baidu.lang.isString\n * @function\n * @grammar baidu.lang.isString(source)\n * @param {Any} source 目标参数\n * @shortcut isString\n * @meta standard\n * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate\n *             \n * @returns {boolean} 类型判断结果\n */\nbaidu.lang.isString = function (source) {\n    return '[object String]' == Object.prototype.toString.call(source);\n};\nbaidu.isString = baidu.lang.isString;\n\n\n/**\n * 判断浏览器类型和特性的属性\n * @namespace baidu.browser\n */\nbaidu.browser = baidu.browser || {};\n\n\n/**\n * 判断是否为opera浏览器\n * @property opera opera版本号\n * @grammar baidu.browser.opera\n * @meta standard\n * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.chrome\n * @returns {Number} opera版本号\n */\n\n/**\n * opera 从10开始不是用opera后面的字符串进行版本的判断\n * 在Browser identification最后添加Version + 数字进行版本标识\n * opera后面的数字保持在9.80不变\n */\nbaidu.browser.opera = /opera(\\/| )(\\d+(\\.\\d+)?)(.+?(version\\/(\\d+(\\.\\d+)?)))?/i.test(navigator.userAgent) ?  + ( RegExp[\"\\x246\"] || RegExp[\"\\x242\"] ) : undefined;\n\n\n/**\n * 在目标元素的指定位置插入HTML代码\n * @name baidu.dom.insertHTML\n * @function\n * @grammar baidu.dom.insertHTML(element, position, html)\n * @param {HTMLElement|string} element 目标元素或目标元素的id\n * @param {string} position 插入html的位置信息，取值为beforeBegin,afterBegin,beforeEnd,afterEnd\n * @param {string} html 要插入的html\n * @remark\n * \n * 对于position参数，大小写不敏感<br>\n * 参数的意思：beforeBegin&lt;span&gt;afterBegin   this is span! beforeEnd&lt;/span&gt; afterEnd <br />\n * 此外，如果使用本函数插入带有script标签的HTML字符串，script标签对应的脚本将不会被执行。\n * \n * @shortcut insertHTML\n * @meta standard\n *             \n * @returns {HTMLElement} 目标元素\n */\nbaidu.dom.insertHTML = function (element, position, html) {\n    element = baidu.dom.g(element);\n    var range,begin;\n    if (element.insertAdjacentHTML && !baidu.browser.opera) {\n        element.insertAdjacentHTML(position, html);\n    } else {\n        range = element.ownerDocument.createRange();\n        position = position.toUpperCase();\n        if (position == 'AFTERBEGIN' || position == 'BEFOREEND') {\n            range.selectNodeContents(element);\n            range.collapse(position == 'AFTERBEGIN');\n        } else {\n            begin = position == 'BEFOREBEGIN';\n            range[begin ? 'setStartBefore' : 'setEndAfter'](element);\n            range.collapse(begin);\n        }\n        range.insertNode(range.createContextualFragment(html));\n    }\n    return element;\n};\n\nbaidu.insertHTML = baidu.dom.insertHTML;\n\n/**\n * 操作flash对象的方法，包括创建flash对象、获取flash对象以及判断flash插件的版本号\n * @namespace baidu.swf\n */\nbaidu.swf = baidu.swf || {};\n\n\n/**\n * 浏览器支持的flash插件版本\n * @property version 浏览器支持的flash插件版本\n * @grammar baidu.swf.version\n * @return {String} 版本号\n * @meta standard\n */\nbaidu.swf.version = (function () {\n    var n = navigator;\n    if (n.plugins && n.mimeTypes.length) {\n        var plugin = n.plugins[\"Shockwave Flash\"];\n        if (plugin && plugin.description) {\n            return plugin.description\n                    .replace(/([a-zA-Z]|\\s)+/, \"\")\n                    .replace(/(\\s)+r/, \".\") + \".0\";\n        }\n    } else if (window.ActiveXObject && !window.opera) {\n        for (var i = 12; i >= 2; i--) {\n            try {\n                var c = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + i);\n                if (c) {\n                    var version = c.GetVariable(\"$version\");\n                    return version.replace(/WIN/g,'').replace(/,/g,'.');\n                }\n            } catch(e) {}\n        }\n    }\n})();\n\n/**\n * 操作字符串的方法\n * @namespace baidu.string\n */\nbaidu.string = baidu.string || {};\n\n\n/**\n * 对目标字符串进行html编码\n * @name baidu.string.encodeHTML\n * @function\n * @grammar baidu.string.encodeHTML(source)\n * @param {string} source 目标字符串\n * @remark\n * 编码字符有5个：&<>\"'\n * @shortcut encodeHTML\n * @meta standard\n * @see baidu.string.decodeHTML\n *             \n * @returns {string} html编码后的字符串\n */\nbaidu.string.encodeHTML = function (source) {\n    return String(source)\n                .replace(/&/g,'&amp;')\n                .replace(/</g,'&lt;')\n                .replace(/>/g,'&gt;')\n                .replace(/\"/g, \"&quot;\")\n                .replace(/'/g, \"&#39;\");\n};\n\nbaidu.encodeHTML = baidu.string.encodeHTML;\n\n/**\n * 创建flash对象的html字符串\n * @name baidu.swf.createHTML\n * @function\n * @grammar baidu.swf.createHTML(options)\n * \n * @param {Object} \toptions \t\t\t\t\t创建flash的选项参数\n * @param {string} \toptions.id \t\t\t\t\t要创建的flash的标识\n * @param {string} \toptions.url \t\t\t\tflash文件的url\n * @param {String} \toptions.errorMessage \t\t未安装flash player或flash player版本号过低时的提示\n * @param {string} \toptions.ver \t\t\t\t最低需要的flash player版本号\n * @param {string} \toptions.width \t\t\t\tflash的宽度\n * @param {string} \toptions.height \t\t\t\tflash的高度\n * @param {string} \toptions.align \t\t\t\tflash的对齐方式，允许值：middle/left/right/top/bottom\n * @param {string} \toptions.base \t\t\t\t设置用于解析swf文件中的所有相对路径语句的基本目录或URL\n * @param {string} \toptions.bgcolor \t\t\tswf文件的背景色\n * @param {string} \toptions.salign \t\t\t\t设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值：l/r/t/b/tl/tr/bl/br\n * @param {boolean} options.menu \t\t\t\t是否显示右键菜单，允许值：true/false\n * @param {boolean} options.loop \t\t\t\t播放到最后一帧时是否重新播放，允许值： true/false\n * @param {boolean} options.play \t\t\t\tflash是否在浏览器加载时就开始播放。允许值：true/false\n * @param {string} \toptions.quality \t\t\t设置flash播放的画质，允许值：low/medium/high/autolow/autohigh/best\n * @param {string} \toptions.scale \t\t\t\t设置flash内容如何缩放来适应设置的宽高。允许值：showall/noborder/exactfit\n * @param {string} \toptions.wmode \t\t\t\t设置flash的显示模式。允许值：window/opaque/transparent\n * @param {string} \toptions.allowscriptaccess \t设置flash与页面的通信权限。允许值：always/never/sameDomain\n * @param {string} \toptions.allownetworking \t设置swf文件中允许使用的网络API。允许值：all/internal/none\n * @param {boolean} options.allowfullscreen \t是否允许flash全屏。允许值：true/false\n * @param {boolean} options.seamlesstabbing \t允许设置执行无缝跳格，从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值：true/false\n * @param {boolean} options.devicefont \t\t\t设置静态文本对象是否以设备字体呈现。允许值：true/false\n * @param {boolean} options.swliveconnect \t\t第一次加载flash时浏览器是否应启动Java。允许值：true/false\n * @param {Object} \toptions.vars \t\t\t\t要传递给flash的参数，支持JSON或string类型。\n * \n * @see baidu.swf.create\n * @meta standard\n * @returns {string} flash对象的html字符串\n */\nbaidu.swf.createHTML = function (options) {\n    options = options || {};\n    var version = baidu.swf.version, \n        needVersion = options['ver'] || '6.0.0', \n        vUnit1, vUnit2, i, k, len, item, tmpOpt = {},\n        encodeHTML = baidu.string.encodeHTML;\n    for (k in options) {\n        tmpOpt[k] = options[k];\n    }\n    options = tmpOpt;\n    if (version) {\n        version = version.split('.');\n        needVersion = needVersion.split('.');\n        for (i = 0; i < 3; i++) {\n            vUnit1 = parseInt(version[i], 10);\n            vUnit2 = parseInt(needVersion[i], 10);\n            if (vUnit2 < vUnit1) {\n                break;\n            } else if (vUnit2 > vUnit1) {\n                return '';\n            }\n        }\n    } else {\n        return '';\n    }\n    \n    var vars = options['vars'],\n        objProperties = ['classid', 'codebase', 'id', 'width', 'height', 'align'];\n    options['align'] = options['align'] || 'middle';\n    options['classid'] = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';\n    options['codebase'] = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0';\n    options['movie'] = options['url'] || '';\n    delete options['vars'];\n    delete options['url'];\n    if ('string' == typeof vars) {\n        options['flashvars'] = vars;\n    } else {\n        var fvars = [];\n        for (k in vars) {\n            item = vars[k];\n            fvars.push(k + \"=\" + encodeURIComponent(item));\n        }\n        options['flashvars'] = fvars.join('&');\n    }\n    var str = ['<object '];\n    for (i = 0, len = objProperties.length; i < len; i++) {\n        item = objProperties[i];\n        str.push(' ', item, '=\"', encodeHTML(options[item]), '\"');\n    }\n    str.push('>');\n    var params = {\n        'wmode'             : 1,\n        'scale'             : 1,\n        'quality'           : 1,\n        'play'              : 1,\n        'loop'              : 1,\n        'menu'              : 1,\n        'salign'            : 1,\n        'bgcolor'           : 1,\n        'base'              : 1,\n        'allowscriptaccess' : 1,\n        'allownetworking'   : 1,\n        'allowfullscreen'   : 1,\n        'seamlesstabbing'   : 1,\n        'devicefont'        : 1,\n        'swliveconnect'     : 1,\n        'flashvars'         : 1,\n        'movie'             : 1\n    };\n    \n    for (k in options) {\n        item = options[k];\n        k = k.toLowerCase();\n        if (params[k] && (item || item === false || item === 0)) {\n            str.push('<param name=\"' + k + '\" value=\"' + encodeHTML(item) + '\" />');\n        }\n    }\n    options['src']  = options['movie'];\n    options['name'] = options['id'];\n    delete options['id'];\n    delete options['movie'];\n    delete options['classid'];\n    delete options['codebase'];\n    options['type'] = 'application/x-shockwave-flash';\n    options['pluginspage'] = 'http://www.macromedia.com/go/getflashplayer';\n    str.push('<embed');\n    var salign;\n    for (k in options) {\n        item = options[k];\n        if (item || item === false || item === 0) {\n            if ((new RegExp(\"^salign\\x24\", \"i\")).test(k)) {\n                salign = item;\n                continue;\n            }\n            \n            str.push(' ', k, '=\"', encodeHTML(item), '\"');\n        }\n    }\n    \n    if (salign) {\n        str.push(' salign=\"', encodeHTML(salign), '\"');\n    }\n    str.push('></embed></object>');\n    \n    return str.join('');\n};\n\n\n/**\n * 在页面中创建一个flash对象\n * @name baidu.swf.create\n * @function\n * @grammar baidu.swf.create(options[, container])\n * \n * @param {Object} \toptions \t\t\t\t\t创建flash的选项参数\n * @param {string} \toptions.id \t\t\t\t\t要创建的flash的标识\n * @param {string} \toptions.url \t\t\t\tflash文件的url\n * @param {String} \toptions.errorMessage \t\t未安装flash player或flash player版本号过低时的提示\n * @param {string} \toptions.ver \t\t\t\t最低需要的flash player版本号\n * @param {string} \toptions.width \t\t\t\tflash的宽度\n * @param {string} \toptions.height \t\t\t\tflash的高度\n * @param {string} \toptions.align \t\t\t\tflash的对齐方式，允许值：middle/left/right/top/bottom\n * @param {string} \toptions.base \t\t\t\t设置用于解析swf文件中的所有相对路径语句的基本目录或URL\n * @param {string} \toptions.bgcolor \t\t\tswf文件的背景色\n * @param {string} \toptions.salign \t\t\t\t设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值：l/r/t/b/tl/tr/bl/br\n * @param {boolean} options.menu \t\t\t\t是否显示右键菜单，允许值：true/false\n * @param {boolean} options.loop \t\t\t\t播放到最后一帧时是否重新播放，允许值： true/false\n * @param {boolean} options.play \t\t\t\tflash是否在浏览器加载时就开始播放。允许值：true/false\n * @param {string} \toptions.quality \t\t\t设置flash播放的画质，允许值：low/medium/high/autolow/autohigh/best\n * @param {string} \toptions.scale \t\t\t\t设置flash内容如何缩放来适应设置的宽高。允许值：showall/noborder/exactfit\n * @param {string} \toptions.wmode \t\t\t\t设置flash的显示模式。允许值：window/opaque/transparent\n * @param {string} \toptions.allowscriptaccess \t设置flash与页面的通信权限。允许值：always/never/sameDomain\n * @param {string} \toptions.allownetworking \t设置swf文件中允许使用的网络API。允许值：all/internal/none\n * @param {boolean} options.allowfullscreen \t是否允许flash全屏。允许值：true/false\n * @param {boolean} options.seamlesstabbing \t允许设置执行无缝跳格，从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值：true/false\n * @param {boolean} options.devicefont \t\t\t设置静态文本对象是否以设备字体呈现。允许值：true/false\n * @param {boolean} options.swliveconnect \t\t第一次加载flash时浏览器是否应启动Java。允许值：true/false\n * @param {Object} \toptions.vars \t\t\t\t要传递给flash的参数，支持JSON或string类型。\n * \n * @param {HTMLElement|string} [container] \t\tflash对象的父容器元素，不传递该参数时在当前代码位置创建flash对象。\n * @meta standard\n * @see baidu.swf.createHTML,baidu.swf.getMovie\n */\nbaidu.swf.create = function (options, target) {\n    options = options || {};\n    var html = baidu.swf.createHTML(options) \n               || options['errorMessage'] \n               || '';\n                \n    if (target && 'string' == typeof target) {\n        target = document.getElementById(target);\n    }\n    baidu.dom.insertHTML( target || document.body ,'beforeEnd',html );\n};\n/**\n * 判断是否为ie浏览器\n * @name baidu.browser.ie\n * @field\n * @grammar baidu.browser.ie\n * @returns {Number} IE版本号\n */\nbaidu.browser.ie = baidu.ie = /msie (\\d+\\.\\d+)/i.test(navigator.userAgent) ? (document.documentMode || + RegExp['\\x241']) : undefined;\n\n/**\n * 移除数组中的项\n * @name baidu.array.remove\n * @function\n * @grammar baidu.array.remove(source, match)\n * @param {Array} source 需要移除项的数组\n * @param {Any} match 要移除的项\n * @meta standard\n * @see baidu.array.removeAt\n *             \n * @returns {Array} 移除后的数组\n */\nbaidu.array.remove = function (source, match) {\n    var len = source.length;\n        \n    while (len--) {\n        if (len in source && source[len] === match) {\n            source.splice(len, 1);\n        }\n    }\n    return source;\n};\n\n/**\n * 判断目标参数是否Array对象\n * @name baidu.lang.isArray\n * @function\n * @grammar baidu.lang.isArray(source)\n * @param {Any} source 目标参数\n * @meta standard\n * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate\n *             \n * @returns {boolean} 类型判断结果\n */\nbaidu.lang.isArray = function (source) {\n    return '[object Array]' == Object.prototype.toString.call(source);\n};\n\n\n\n/**\n * 将一个变量转换成array\n * @name baidu.lang.toArray\n * @function\n * @grammar baidu.lang.toArray(source)\n * @param {mix} source 需要转换成array的变量\n * @version 1.3\n * @meta standard\n * @returns {array} 转换后的array\n */\nbaidu.lang.toArray = function (source) {\n    if (source === null || source === undefined)\n        return [];\n    if (baidu.lang.isArray(source))\n        return source;\n    if (typeof source.length !== 'number' || typeof source === 'string' || baidu.lang.isFunction(source)) {\n        return [source];\n    }\n    if (source.item) {\n        var l = source.length, array = new Array(l);\n        while (l--)\n            array[l] = source[l];\n        return array;\n    }\n\n    return [].slice.call(source);\n};\n\n/**\n * 获得flash对象的实例\n * @name baidu.swf.getMovie\n * @function\n * @grammar baidu.swf.getMovie(name)\n * @param {string} name flash对象的名称\n * @see baidu.swf.create\n * @meta standard\n * @returns {HTMLElement} flash对象的实例\n */\nbaidu.swf.getMovie = function (name) {\n\tvar movie = document[name], ret;\n    return baidu.browser.ie == 9 ?\n    \tmovie && movie.length ? \n    \t\t(ret = baidu.array.remove(baidu.lang.toArray(movie),function(item){\n    \t\t\treturn item.tagName.toLowerCase() != \"embed\";\n    \t\t})).length == 1 ? ret[0] : ret\n    \t\t: movie\n    \t: movie || window[name];\n};\n\n\nbaidu.flash._Base = (function(){\n   \n    var prefix = 'bd__flash__';\n\n    /**\n     * 创建一个随机的字符串\n     * @private\n     * @return {String}\n     */\n    function _createString(){\n        return  prefix + Math.floor(Math.random() * 2147483648).toString(36);\n    };\n   \n    /**\n     * 检查flash状态\n     * @private\n     * @param {Object} target flash对象\n     * @return {Boolean}\n     */\n    function _checkReady(target){\n        if(typeof target !== 'undefined' && typeof target.flashInit !== 'undefined' && target.flashInit()){\n            return true;\n        }else{\n            return false;\n        }\n    };\n\n    /**\n     * 调用之前进行压栈的函数\n     * @private\n     * @param {Array} callQueue 调用队列\n     * @param {Object} target flash对象\n     * @return {Null}\n     */\n    function _callFn(callQueue, target){\n        var result = null;\n        \n        callQueue = callQueue.reverse();\n        baidu.each(callQueue, function(item){\n            result = target.call(item.fnName, item.params);\n            item.callBack(result);\n        });\n    };\n\n    /**\n     * 为传入的匿名函数创建函数名\n     * @private\n     * @param {String|Function} fun 传入的匿名函数或者函数名\n     * @return {String}\n     */\n    function _createFunName(fun){\n        var name = '';\n\n        if(baidu.lang.isFunction(fun)){\n            name = _createString();\n            window[name] = function(){\n                fun.apply(window, arguments);\n            };\n\n            return name;\n        }else if(baidu.lang.isString){\n            return fun;\n        }\n    };\n\n    /**\n     * 绘制flash\n     * @private\n     * @param {Object} options 创建参数\n     * @return {Object} \n     */\n    function _render(options){\n        if(!options.id){\n            options.id = _createString();\n        }\n        \n        var container = options.container || '';\n        delete(options.container);\n        \n        baidu.swf.create(options, container);\n        \n        return baidu.swf.getMovie(options.id);\n    };\n\n    return function(options, callBack){\n        var me = this,\n            autoRender = (typeof options.autoRender !== 'undefined' ? options.autoRender : true),\n            createOptions = options.createOptions || {},\n            target = null,\n            isReady = false,\n            callQueue = [],\n            timeHandle = null,\n            callBack = callBack || [];\n\n        /**\n         * 将flash文件绘制到页面上\n         * @public\n         * @return {Null}\n         */\n        me.render = function(){\n            target = _render(createOptions);\n            \n            if(callBack.length > 0){\n                baidu.each(callBack, function(funName, index){\n                    callBack[index] = _createFunName(options[funName] || new Function());\n                });    \n            }\n            me.call('setJSFuncName', [callBack]);\n        };\n\n        /**\n         * 返回flash状态\n         * @return {Boolean}\n         */\n        me.isReady = function(){\n            return isReady;\n        };\n\n        /**\n         * 调用flash接口的统一入口\n         * @param {String} fnName 调用的函数名\n         * @param {Array} params 传入的参数组成的数组,若不许要参数，需传入空数组\n         * @param {Function} [callBack] 异步调用后将返回值作为参数的调用回调函数，如无返回值，可以不传入此参数\n         * @return {Null}\n        */\n        me.call = function(fnName, params, callBack){\n            if(!fnName) return null;\n            callBack = callBack || new Function();\n\n            var result = null;\n    \n            if(isReady){\n                result = target.call(fnName, params);\n                callBack(result);\n            }else{\n                callQueue.push({\n                    fnName: fnName,\n                    params: params,\n                    callBack: callBack\n                });\n    \n                (!timeHandle) && (timeHandle = setInterval(_check, 200));\n            }\n        };\n    \n        /**\n         * 为传入的匿名函数创建函数名\n         * @public\n         * @param {String|Function} fun 传入的匿名函数或者函数名\n         * @return {String}\n         */\n        me.createFunName = function(fun){\n            return _createFunName(fun);    \n        };\n\n        /**\n         * 检查flash是否ready， 并进行调用\n         * @private\n         * @return {Null}\n         */\n        function _check(){\n            if(_checkReady(target)){\n                clearInterval(timeHandle);\n                timeHandle = null;\n                _call();\n\n                isReady = true;\n            }               \n        };\n\n        /**\n         * 调用之前进行压栈的函数\n         * @private\n         * @return {Null}\n         */\n        function _call(){\n            _callFn(callQueue, target);\n            callQueue = [];\n        }\n\n        autoRender && me.render(); \n    };\n})();\n\n\n\n/**\n * 创建flash based imageUploader\n * @class\n * @grammar baidu.flash.imageUploader(options)\n * @param {Object} createOptions 创建flash时需要的参数，请参照baidu.swf.create文档\n * @config {Object} vars 创建imageUploader时所需要的参数\n * @config {Number} vars.gridWidth 每一个预览图片所占的宽度，应该为flash寛的整除\n * @config {Number} vars.gridHeight 每一个预览图片所占的高度，应该为flash高的整除\n * @config {Number} vars.picWidth 单张预览图片的宽度\n * @config {Number} vars.picHeight 单张预览图片的高度\n * @config {String} vars.uploadDataFieldName POST请求中图片数据的key,默认值'picdata'\n * @config {String} vars.picDescFieldName POST请求中图片描述的key,默认值'picDesc'\n * @config {Number} vars.maxSize 文件的最大体积,单位'MB'\n * @config {Number} vars.compressSize 上传前如果图片体积超过该值，会先压缩\n * @config {Number} vars.maxNum:32 最大上传多少个文件\n * @config {Number} vars.compressLength 能接受的最大边长，超过该值会等比压缩\n * @config {String} vars.url 上传的url地址\n * @config {Number} vars.mode mode == 0时，是使用滚动条，mode == 1时，拉伸flash, 默认值为0\n * @see baidu.swf.createHTML\n * @param {String} backgroundUrl 背景图片路径\n * @param {String} listBacgroundkUrl 布局控件背景\n * @param {String} buttonUrl 按钮图片不背景\n * @param {String|Function} selectFileCallback 选择文件的回调\n * @param {String|Function} exceedFileCallback文件超出限制的最大体积时的回调\n * @param {String|Function} deleteFileCallback 删除文件的回调\n * @param {String|Function} startUploadCallback 开始上传某个文件时的回调\n * @param {String|Function} uploadCompleteCallback 某个文件上传完成的回调\n * @param {String|Function} uploadErrorCallback 某个文件上传失败的回调\n * @param {String|Function} allCompleteCallback 全部上传完成时的回调\n * @param {String|Function} changeFlashHeight 改变Flash的高度，mode==1的时候才有用\n */ \nbaidu.flash.imageUploader = baidu.flash.imageUploader || function(options){\n   \n    var me = this,\n        options = options || {},\n        _flash = new baidu.flash._Base(options, [\n            'selectFileCallback', \n            'exceedFileCallback', \n            'deleteFileCallback', \n            'startUploadCallback',\n            'uploadCompleteCallback',\n            'uploadErrorCallback',\n            'allCompleteCallback',\n            'changeFlashHeight'\n        ]);\n    /**\n     * 开始或回复上传图片\n     * @public\n     * @return {Null}\n     */\n    me.upload = function(){\n        _flash.call('upload');\n    };\n\n    /**\n     * 暂停上传图片\n     * @public\n     * @return {Null}\n     */\n    me.pause = function(){\n        _flash.call('pause');\n    };\n    me.addCustomizedParams = function(index,obj){\n        _flash.call('addCustomizedParams',[index,obj]);\n    }\n};\n\n/**\n * 操作原生对象的方法\n * @namespace baidu.object\n */\nbaidu.object = baidu.object || {};\n\n\n/**\n * 将源对象的所有属性拷贝到目标对象中\n * @author erik\n * @name baidu.object.extend\n * @function\n * @grammar baidu.object.extend(target, source)\n * @param {Object} target 目标对象\n * @param {Object} source 源对象\n * @see baidu.array.merge\n * @remark\n * \n1.目标对象中，与源对象key相同的成员将会被覆盖。<br>\n2.源对象的prototype成员不会拷贝。\n\t\t\n * @shortcut extend\n * @meta standard\n *             \n * @returns {Object} 目标对象\n */\nbaidu.extend =\nbaidu.object.extend = function (target, source) {\n    for (var p in source) {\n        if (source.hasOwnProperty(p)) {\n            target[p] = source[p];\n        }\n    }\n    \n    return target;\n};\n\n\n\n\n\n/**\n * 创建flash based fileUploader\n * @class\n * @grammar baidu.flash.fileUploader(options)\n * @param {Object} options\n * @config {Object} createOptions 创建flash时需要的参数，请参照baidu.swf.create文档\n * @config {String} createOptions.width\n * @config {String} createOptions.height\n * @config {Number} maxNum 最大可选文件数\n * @config {Function|String} selectFile\n * @config {Function|String} exceedMaxSize\n * @config {Function|String} deleteFile\n * @config {Function|String} uploadStart\n * @config {Function|String} uploadComplete\n * @config {Function|String} uploadError\n * @config {Function|String} uploadProgress\n */\nbaidu.flash.fileUploader = baidu.flash.fileUploader || function(options){\n    var me = this,\n        options = options || {};\n    \n    options.createOptions = baidu.extend({\n        wmod: 'transparent'\n    },options.createOptions || {});\n    \n    var _flash = new baidu.flash._Base(options, [\n        'selectFile',\n        'exceedMaxSize',\n        'deleteFile',\n        'uploadStart',\n        'uploadComplete',\n        'uploadError', \n        'uploadProgress'\n    ]);\n\n    _flash.call('setMaxNum', options.maxNum ? [options.maxNum] : [1]);\n\n    /**\n     * 设置当鼠标移动到flash上时，是否变成手型\n     * @public\n     * @param {Boolean} isCursor\n     * @return {Null}\n     */\n    me.setHandCursor = function(isCursor){\n        _flash.call('setHandCursor', [isCursor || false]);\n    };\n\n    /**\n     * 设置鼠标相应函数名\n     * @param {String|Function} fun\n     */\n    me.setMSFunName = function(fun){\n        _flash.call('setMSFunName',[_flash.createFunName(fun)]);\n    }; \n\n    /**\n     * 执行上传操作\n     * @param {String} url 上传的url\n     * @param {String} fieldName 上传的表单字段名\n     * @param {Object} postData 键值对，上传的POST数据\n     * @param {Number|Array|null|-1} [index]上传的文件序列\n     *                            Int值上传该文件\n     *                            Array一次串行上传该序列文件\n     *                            -1/null上传所有文件\n     * @return {Null}\n     */\n    me.upload = function(url, fieldName, postData, index){\n\n        if(typeof url !== 'string' || typeof fieldName !== 'string') return null;\n        if(typeof index === 'undefined') index = -1;\n\n        _flash.call('upload', [url, fieldName, postData, index]);\n    };\n\n    /**\n     * 取消上传操作\n     * @public\n     * @param {Number|-1} index\n     */\n    me.cancel = function(index){\n        if(typeof index === 'undefined') index = -1;\n        _flash.call('cancel', [index]);\n    };\n\n    /**\n     * 删除文件\n     * @public\n     * @param {Number|Array} [index] 要删除的index，不传则全部删除\n     * @param {Function} callBack\n     * */\n    me.deleteFile = function(index, callBack){\n\n        var callBackAll = function(list){\n                callBack && callBack(list);\n            };\n\n        if(typeof index === 'undefined'){\n            _flash.call('deleteFilesAll', [], callBackAll);\n            return;\n        };\n        \n        if(typeof index === 'Number') index = [index];\n        index.sort(function(a,b){\n            return b-a;\n        });\n        baidu.each(index, function(item){\n            _flash.call('deleteFileBy', item, callBackAll);\n        });\n    };\n\n    /**\n     * 添加文件类型，支持macType\n     * @public\n     * @param {Object|Array[Object]} type {description:String, extention:String}\n     * @return {Null};\n     */\n    me.addFileType = function(type){\n        var type = type || [[]];\n        \n        if(type instanceof Array) type = [type];\n        else type = [[type]];\n        _flash.call('addFileTypes', type);\n    };\n    \n    /**\n     * 设置文件类型，支持macType\n     * @public\n     * @param {Object|Array[Object]} type {description:String, extention:String}\n     * @return {Null};\n     */\n    me.setFileType = function(type){\n        var type = type || [[]];\n        \n        if(type instanceof Array) type = [type];\n        else type = [[type]];\n        _flash.call('setFileTypes', type);\n    };\n\n    /**\n     * 设置可选文件的数量限制\n     * @public\n     * @param {Number} num\n     * @return {Null}\n     */\n    me.setMaxNum = function(num){\n        _flash.call('setMaxNum', [num]);\n    };\n\n    /**\n     * 设置可选文件大小限制，以兆M为单位\n     * @public\n     * @param {Number} num,0为无限制\n     * @return {Null}\n     */\n    me.setMaxSize = function(num){\n        _flash.call('setMaxSize', [num]);\n    };\n\n    /**\n     * @public\n     */\n    me.getFileAll = function(callBack){\n        _flash.call('getFileAll', [], callBack);\n    };\n\n    /**\n     * @public\n     * @param {Number} index\n     * @param {Function} [callBack]\n     */\n    me.getFileByIndex = function(index, callBack){\n        _flash.call('getFileByIndex', [], callBack);\n    };\n\n    /**\n     * @public\n     * @param {Number} index\n     * @param {function} [callBack]\n     */\n    me.getStatusByIndex = function(index, callBack){\n        _flash.call('getStatusByIndex', [], callBack);\n    };\n};\n\n/**\n * 使用动态script标签请求服务器资源，包括由服务器端的回调和浏览器端的回调\n * @namespace baidu.sio\n */\nbaidu.sio = baidu.sio || {};\n\n/**\n * \n * @param {HTMLElement} src script节点\n * @param {String} url script节点的地址\n * @param {String} [charset] 编码\n */\nbaidu.sio._createScriptTag = function(scr, url, charset){\n    scr.setAttribute('type', 'text/javascript');\n    charset && scr.setAttribute('charset', charset);\n    scr.setAttribute('src', url);\n    document.getElementsByTagName('head')[0].appendChild(scr);\n};\n\n/**\n * 删除script的属性，再删除script标签，以解决修复内存泄漏的问题\n * \n * @param {HTMLElement} src script节点\n */\nbaidu.sio._removeScriptTag = function(scr){\n    if (scr.clearAttributes) {\n        scr.clearAttributes();\n    } else {\n        for (var attr in scr) {\n            if (scr.hasOwnProperty(attr)) {\n                delete scr[attr];\n            }\n        }\n    }\n    if(scr && scr.parentNode){\n        scr.parentNode.removeChild(scr);\n    }\n    scr = null;\n};\n\n\n/**\n * 通过script标签加载数据，加载完成由浏览器端触发回调\n * @name baidu.sio.callByBrowser\n * @function\n * @grammar baidu.sio.callByBrowser(url, opt_callback, opt_options)\n * @param {string} url 加载数据的url\n * @param {Function|string} opt_callback 数据加载结束时调用的函数或函数名\n * @param {Object} opt_options 其他可选项\n * @config {String} [charset] script的字符集\n * @config {Integer} [timeOut] 超时时间，超过这个时间将不再响应本请求，并触发onfailure函数\n * @config {Function} [onfailure] timeOut设定后才生效，到达超时时间时触发本函数\n * @remark\n * 1、与callByServer不同，callback参数只支持Function类型，不支持string。\n * 2、如果请求了一个不存在的页面，callback函数在IE/opera下也会被调用，因此使用者需要在onsuccess函数中判断数据是否正确加载。\n * @meta standard\n * @see baidu.sio.callByServer\n */\nbaidu.sio.callByBrowser = function (url, opt_callback, opt_options) {\n    var scr = document.createElement(\"SCRIPT\"),\n        scriptLoaded = 0,\n        options = opt_options || {},\n        charset = options['charset'],\n        callback = opt_callback || function(){},\n        timeOut = options['timeOut'] || 0,\n        timer;\n    scr.onload = scr.onreadystatechange = function () {\n        if (scriptLoaded) {\n            return;\n        }\n        \n        var readyState = scr.readyState;\n        if ('undefined' == typeof readyState\n            || readyState == \"loaded\"\n            || readyState == \"complete\") {\n            scriptLoaded = 1;\n            try {\n                callback();\n                clearTimeout(timer);\n            } finally {\n                scr.onload = scr.onreadystatechange = null;\n                baidu.sio._removeScriptTag(scr);\n            }\n        }\n    };\n\n    if( timeOut ){\n        timer = setTimeout(function(){\n            scr.onload = scr.onreadystatechange = null;\n            baidu.sio._removeScriptTag(scr);\n            options.onfailure && options.onfailure();\n        }, timeOut);\n    }\n    \n    baidu.sio._createScriptTag(scr, url, charset);\n};\n\n/**\n * 通过script标签加载数据，加载完成由服务器端触发回调\n * @name baidu.sio.callByServer\n * @function\n * @grammar baidu.sio.callByServer(url, callback[, opt_options])\n * @param {string} url 加载数据的url.\n * @param {Function|string} callback 服务器端调用的函数或函数名。如果没有指定本参数，将在URL中寻找options['queryField']做为callback的方法名.\n * @param {Object} opt_options 加载数据时的选项.\n * @config {string} [charset] script的字符集\n * @config {string} [queryField] 服务器端callback请求字段名，默认为callback\n * @config {Integer} [timeOut] 超时时间(单位：ms)，超过这个时间将不再响应本请求，并触发onfailure函数\n * @config {Function} [onfailure] timeOut设定后才生效，到达超时时间时触发本函数\n * @remark\n * 如果url中已经包含key为“options['queryField']”的query项，将会被替换成callback中参数传递或自动生成的函数名。\n * @meta standard\n * @see baidu.sio.callByBrowser\n */\nbaidu.sio.callByServer = /**@function*/function(url, callback, opt_options) {\n    var scr = document.createElement('SCRIPT'),\n        prefix = 'bd__cbs__',\n        callbackName,\n        callbackImpl,\n        options = opt_options || {},\n        charset = options['charset'],\n        queryField = options['queryField'] || 'callback',\n        timeOut = options['timeOut'] || 0,\n        timer,\n        reg = new RegExp('(\\\\?|&)' + queryField + '=([^&]*)'),\n        matches;\n\n    if (baidu.lang.isFunction(callback)) {\n        callbackName = prefix + Math.floor(Math.random() * 2147483648).toString(36);\n        window[callbackName] = getCallBack(0);\n    } else if(baidu.lang.isString(callback)){\n        callbackName = callback;\n    } else {\n        if (matches = reg.exec(url)) {\n            callbackName = matches[2];\n        }\n    }\n\n    if( timeOut ){\n        timer = setTimeout(getCallBack(1), timeOut);\n    }\n    url = url.replace(reg, '\\x241' + queryField + '=' + callbackName);\n    \n    if (url.search(reg) < 0) {\n        url += (url.indexOf('?') < 0 ? '?' : '&') + queryField + '=' + callbackName;\n    }\n    baidu.sio._createScriptTag(scr, url, charset);\n\n    /*\n     * 返回一个函数，用于立即（挂在window上）或者超时（挂在setTimeout中）时执行\n     */\n    function getCallBack(onTimeOut){\n        /*global callbackName, callback, scr, options;*/\n        return function(){\n            try {\n                if( onTimeOut ){\n                    options.onfailure && options.onfailure();\n                }else{\n                    callback.apply(window, arguments);\n                    clearTimeout(timer);\n                }\n                window[callbackName] = null;\n                delete window[callbackName];\n            } catch (exception) {\n            } finally {\n                baidu.sio._removeScriptTag(scr);\n            }\n        }\n    }\n};\n\n/**\n * 通过请求一个图片的方式令服务器存储一条日志\n * @function\n * @grammar baidu.sio.log(url)\n * @param {string} url 要发送的地址.\n * @author: int08h,leeight\n */\nbaidu.sio.log = function(url) {\n  var img = new Image(),\n      key = 'tangram_sio_log_' + Math.floor(Math.random() *\n            2147483648).toString(36);\n  window[key] = img;\n\n  img.onload = img.onerror = img.onabort = function() {\n    img.onload = img.onerror = img.onabort = null;\n\n    window[key] = null;\n    img = null;\n  };\n  img.src = url;\n};\n\n\n\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json.js\n * author: erik\n * version: 1.1.0\n * date: 2009/12/02\n */\n\n\n/**\n * 操作json对象的方法\n * @namespace baidu.json\n */\nbaidu.json = baidu.json || {};\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/parse.js\n * author: erik, berg\n * version: 1.2\n * date: 2009/11/23\n */\n\n\n\n/**\n * 将字符串解析成json对象。注：不会自动祛除空格\n * @name baidu.json.parse\n * @function\n * @grammar baidu.json.parse(data)\n * @param {string} source 需要解析的字符串\n * @remark\n * 该方法的实现与ecma-262第五版中规定的JSON.parse不同，暂时只支持传入一个参数。后续会进行功能丰富。\n * @meta standard\n * @see baidu.json.stringify,baidu.json.decode\n *             \n * @returns {JSON} 解析结果json对象\n */\nbaidu.json.parse = function (data) {\n    //2010/12/09：更新至不使用原生parse，不检测用户输入是否正确\n    return (new Function(\"return (\" + data + \")\"))();\n};\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/decode.js\n * author: erik, cat\n * version: 1.3.4\n * date: 2010/12/23\n */\n\n\n\n/**\n * 将字符串解析成json对象，为过时接口，今后会被baidu.json.parse代替\n * @name baidu.json.decode\n * @function\n * @grammar baidu.json.decode(source)\n * @param {string} source 需要解析的字符串\n * @meta out\n * @see baidu.json.encode,baidu.json.parse\n *             \n * @returns {JSON} 解析结果json对象\n */\nbaidu.json.decode = baidu.json.parse;\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/stringify.js\n * author: erik\n * version: 1.1.0\n * date: 2010/01/11\n */\n\n\n\n/**\n * 将json对象序列化\n * @name baidu.json.stringify\n * @function\n * @grammar baidu.json.stringify(value)\n * @param {JSON} value 需要序列化的json对象\n * @remark\n * 该方法的实现与ecma-262第五版中规定的JSON.stringify不同，暂时只支持传入一个参数。后续会进行功能丰富。\n * @meta standard\n * @see baidu.json.parse,baidu.json.encode\n *             \n * @returns {string} 序列化后的字符串\n */\nbaidu.json.stringify = (function () {\n    /**\n     * 字符串处理时需要转义的字符表\n     * @private\n     */\n    var escapeMap = {\n        \"\\b\": '\\\\b',\n        \"\\t\": '\\\\t',\n        \"\\n\": '\\\\n',\n        \"\\f\": '\\\\f',\n        \"\\r\": '\\\\r',\n        '\"' : '\\\\\"',\n        \"\\\\\": '\\\\\\\\'\n    };\n    \n    /**\n     * 字符串序列化\n     * @private\n     */\n    function encodeString(source) {\n        if (/[\"\\\\\\x00-\\x1f]/.test(source)) {\n            source = source.replace(\n                /[\"\\\\\\x00-\\x1f]/g, \n                function (match) {\n                    var c = escapeMap[match];\n                    if (c) {\n                        return c;\n                    }\n                    c = match.charCodeAt();\n                    return \"\\\\u00\" \n                            + Math.floor(c / 16).toString(16) \n                            + (c % 16).toString(16);\n                });\n        }\n        return '\"' + source + '\"';\n    }\n    \n    /**\n     * 数组序列化\n     * @private\n     */\n    function encodeArray(source) {\n        var result = [\"[\"], \n            l = source.length,\n            preComma, i, item;\n            \n        for (i = 0; i < l; i++) {\n            item = source[i];\n            \n            switch (typeof item) {\n            case \"undefined\":\n            case \"function\":\n            case \"unknown\":\n                break;\n            default:\n                if(preComma) {\n                    result.push(',');\n                }\n                result.push(baidu.json.stringify(item));\n                preComma = 1;\n            }\n        }\n        result.push(\"]\");\n        return result.join(\"\");\n    }\n    \n    /**\n     * 处理日期序列化时的补零\n     * @private\n     */\n    function pad(source) {\n        return source < 10 ? '0' + source : source;\n    }\n    \n    /**\n     * 日期序列化\n     * @private\n     */\n    function encodeDate(source){\n        return '\"' + source.getFullYear() + \"-\" \n                + pad(source.getMonth() + 1) + \"-\" \n                + pad(source.getDate()) + \"T\" \n                + pad(source.getHours()) + \":\" \n                + pad(source.getMinutes()) + \":\" \n                + pad(source.getSeconds()) + '\"';\n    }\n    \n    return function (value) {\n        switch (typeof value) {\n        case 'undefined':\n            return 'undefined';\n            \n        case 'number':\n            return isFinite(value) ? String(value) : \"null\";\n            \n        case 'string':\n            return encodeString(value);\n            \n        case 'boolean':\n            return String(value);\n            \n        default:\n            if (value === null) {\n                return 'null';\n            } else if (value instanceof Array) {\n                return encodeArray(value);\n            } else if (value instanceof Date) {\n                return encodeDate(value);\n            } else {\n                var result = ['{'],\n                    encode = baidu.json.stringify,\n                    preComma,\n                    item;\n                    \n                for (var key in value) {\n                    if (Object.prototype.hasOwnProperty.call(value, key)) {\n                        item = value[key];\n                        switch (typeof item) {\n                        case 'undefined':\n                        case 'unknown':\n                        case 'function':\n                            break;\n                        default:\n                            if (preComma) {\n                                result.push(',');\n                            }\n                            preComma = 1;\n                            result.push(encode(key) + ':' + encode(item));\n                        }\n                    }\n                }\n                result.push('}');\n                return result.join('');\n            }\n        }\n    };\n})();\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/encode.js\n * author: erik, cat\n * version: 1.3.4\n * date: 2010/12/23\n */\n\n\n\n/**\n * 将json对象序列化，为过时接口，今后会被baidu.json.stringify代替\n * @name baidu.json.encode\n * @function\n * @grammar baidu.json.encode(value)\n * @param {JSON} value 需要序列化的json对象\n * @meta out\n * @see baidu.json.decode,baidu.json.stringify\n *             \n * @returns {string} 序列化后的字符串\n */\nbaidu.json.encode = baidu.json.stringify;\n"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/wordimage/wordimage.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .wrapper{width: 600px;padding: 10px;height: 352px;overflow: hidden;position: relative;border-bottom: 1px solid #d7d7d7}\n        .localPath input{float: left;width: 350px;line-height: 20px;height: 20px;}\n        #clipboard{float:left;width: 70px;height: 30px; }\n        .description{ color: #0066cc; margin-top: 2px; width: 450px; height: 45px;float: left;line-height: 22px}\n        #upload{width: 100px;height: 30px;float: right; margin:10px 2px 0 0;cursor: pointer;}\n        #msg{ width: 140px; height: 30px; line-height:25px;float: left;color: red}\n    </style>\n</head>\n<body>\n    <div class=\"wrapper\">\n        <div class=\"localPath\">\n            <input id=\"localPath\" type=\"text\" readonly />\n            <div id=\"clipboard\"></div>\n            <div id=\"msg\"></div>\n        </div>\n        <div id=\"flashContainer\"></div>\n        <div>\n            <div id=\"upload\" style=\"display: none\" ><img id=\"uploadBtn\"></div>\n            <div class=\"description\">\n                <span style=\"color: red\"><var id=\"lang_resave\"></var>: </span><var id=\"lang_step\"></var>\n            </div>\n          </div>\n    </div>\n    <script type=\"text/javascript\" src=\"tangram.js\"></script>\n    <script type=\"text/javascript\" src=\"wordimage.js\"></script>\n    <script type=\"text/javascript\">\n        editor.setOpt({\n            wordImageFieldName:\"upfile\",\n            compressSide:0,\n            maxImageSideLength:900\n        });\n\n            //全局变量\n        var imageUrls = [],          //用于保存从服务器返回的图片信息数组\n            selectedImageCount = 0,  //当前已选择的但未上传的图片数量\n            optImageUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n            optImageFieldName = editor.getOpt('imageFieldName'),\n            optImageCompressBorder = editor.getOpt('imageCompressEnable') ? editor.getOpt('imageCompressBorder'):null,\n            maxSize = editor.getOpt('imageMaxSize') / 1024 / 1024,\n            extension = editor.getOpt('imageAllowFiles').join(';').replace(/\\./g, '*.');\n\n        /* 添加额外的GET参数 */\n        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n            urlWidthParams = optImageUrl + (optImageUrl.indexOf('?') == -1 ? '?':'&') + params;\n\n        utils.domReady(function(){\n            //创建Flash相关的参数集合\n            var flashOptions = {\n                container:\"flashContainer\",                                                    //flash容器id\n                url:urlWidthParams,                                           // 上传处理页面的url地址\n                ext:editor.queryCommandValue('serverParam') || {},                                 //可向服务器提交的自定义参数列表\n                fileType:'{\"description\":\"'+lang.fileType+'\", \"extension\":\"' + extension + '\"}',     //上传文件格式限制\n                flashUrl:'imageUploader.swf',                                                  //上传用的flash组件地址\n                width:600,          //flash的宽度\n                height:272,         //flash的高度\n                gridWidth:120,     // 每一个预览图片所占的宽度\n                gridHeight:120,    // 每一个预览图片所占的高度\n                picWidth:100,      // 单张预览图片的宽度\n                picHeight:100,     // 单张预览图片的高度\n                uploadDataFieldName: optImageFieldName,    // POST请求中图片数据的key\n                picDescFieldName:'pictitle',      // POST请求中图片描述的key\n                maxSize: maxSize,                         // 文件的最大体积,单位M\n                compressSize:1,                   // 上传前如果图片体积超过该值，会先压缩,单位M\n                maxNum:32,                         // 单次最大可上传多少个文件\n                compressSide: 0,                 //等比压缩的基准，0为按照最长边，1为按照宽度，2为按照高度\n                compressLength: optImageCompressBorder        //能接受的最大边长，超过该值Flash会自动等比压缩\n            };\n            //回调函数集合，支持传递函数名的字符串、函数句柄以及函数本身三种类型\n            var callbacks={\n                selectFileCallback: function(selectFiles){                // 选择文件的回调\n                    selectedImageCount += selectFiles.length;\n                    if(selectedImageCount) baidu.g(\"upload\").style.display = \"\";\n                    dialog.buttons[0].setDisabled(true); //初始化时置灰确定按钮\n                },\n                deleteFileCallback: function(delFiles){                 // 删除文件的回调\n                    selectedImageCount -= delFiles.length;\n                    if (!selectedImageCount) {\n                        baidu.g(\"upload\").style.display = \"none\";\n                        dialog.buttons[0].setDisabled(false);         //没有选择图片时重新点亮按钮\n                    }\n                },\n                uploadCompleteCallback: function(data){               // 单个文件上传完成的回调\n                    try{var info = eval(\"(\" + data.info + \")\");\n                    info && imageUrls.push(info);\n                    selectedImageCount--;\n                    }catch(e){}\n                },\n                uploadErrorCallback: function (data){         // 单个文件上传失败的回调,\n                    console && console.log(data);\n                },\n                allCompleteCallback: function(){              // 全部上传完成时的回调\n                    dialog.buttons[0].setDisabled(false);    //上传完毕后点亮按钮\n                }\n                //exceedFileCallback: 'exceedFileCallback',   // 文件超出限制的最大体积时的回调\n                //startUploadCallback: startUploadCallback    // 开始上传某个文件时的回调\n            };\n            wordImage.init(flashOptions,callbacks);\n        });\n\n    </script>\n\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/dialogs/wordimage/wordimage.js",
    "content": "/**\n * Created by JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-1-30\n * Time: 下午12:50\n * To change this template use File | Settings | File Templates.\n */\n\n\n\nvar wordImage = {};\n//(function(){\nvar g = baidu.g,\n\tflashObj,flashContainer;\n\nwordImage.init = function(opt, callbacks) {\n\tshowLocalPath(\"localPath\");\n\t//createCopyButton(\"clipboard\",\"localPath\");\n\tcreateFlashUploader(opt, callbacks);\n\taddUploadListener();\n\taddOkListener();\n};\n\nfunction hideFlash(){\n    flashObj = null;\n    flashContainer.innerHTML = \"\";\n}\nfunction addOkListener() {\n\tdialog.onok = function() {\n\t\tif (!imageUrls.length) return;\n\t\tvar urlPrefix = editor.getOpt('imageUrlPrefix'),\n            images = domUtils.getElementsByTagName(editor.document,\"img\");\n        editor.fireEvent('saveScene');\n\t\tfor (var i = 0,img; img = images[i++];) {\n\t\t\tvar src = img.getAttribute(\"word_img\");\n\t\t\tif (!src) continue;\n\t\t\tfor (var j = 0,url; url = imageUrls[j++];) {\n\t\t\t\tif (src.indexOf(url.original.replace(\" \",\"\")) != -1) {\n\t\t\t\t\timg.src = urlPrefix + url.url;\n\t\t\t\t\timg.setAttribute(\"_src\", urlPrefix + url.url);  //同时修改\"_src\"属性\n\t\t\t\t\timg.setAttribute(\"title\",url.title);\n                    domUtils.removeAttributes(img, [\"word_img\",\"style\",\"width\",\"height\"]);\n\t\t\t\t\teditor.fireEvent(\"selectionchange\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n        editor.fireEvent('saveScene');\n        hideFlash();\n\t};\n    dialog.oncancel = function(){\n        hideFlash();\n    }\n}\n\n/**\n * 绑定开始上传事件\n */\nfunction addUploadListener() {\n\tg(\"upload\").onclick = function () {\n\t\tflashObj.upload();\n\t\tthis.style.display = \"none\";\n\t};\n}\n\nfunction showLocalPath(id) {\n    //单张编辑\n    var img = editor.selection.getRange().getClosedNode();\n    var images = editor.execCommand('wordimage');\n    if(images.length==1 || img && img.tagName == 'IMG'){\n        g(id).value = images[0];\n        return;\n    }\n\tvar path = images[0];\n    var leftSlashIndex  = path.lastIndexOf(\"/\")||0,  //不同版本的doc和浏览器都可能影响到这个符号，故直接判断两种\n        rightSlashIndex = path.lastIndexOf(\"\\\\\")||0,\n        separater = leftSlashIndex > rightSlashIndex ? \"/\":\"\\\\\" ;\n\n\tpath = path.substring(0, path.lastIndexOf(separater)+1);\n\tg(id).value = path;\n}\n\nfunction createFlashUploader(opt, callbacks) {\n    //由于lang.flashI18n是静态属性，不可以直接进行修改，否则会影响到后续内容\n    var i18n = utils.extend({},lang.flashI18n);\n    //处理图片资源地址的编码，补全等问题\n    for(var i in i18n){\n        if(!(i in {\"lang\":1,\"uploadingTF\":1,\"imageTF\":1,\"textEncoding\":1}) && i18n[i]){\n            i18n[i] = encodeURIComponent(editor.options.langPath + editor.options.lang + \"/images/\" + i18n[i]);\n        }\n    }\n    opt = utils.extend(opt,i18n,false);\n\tvar option = {\n\t\tcreateOptions:{\n\t\t\tid:'flash',\n\t\t\turl:opt.flashUrl,\n\t\t\twidth:opt.width,\n\t\t\theight:opt.height,\n\t\t\terrorMessage:lang.flashError,\n\t\t\twmode:browser.safari ? 'transparent' : 'window',\n\t\t\tver:'10.0.0',\n\t\t\tvars:opt,\n\t\t\tcontainer:opt.container\n\t\t}\n\t};\n\n\toption = extendProperty(callbacks, option);\n\tflashObj = new baidu.flash.imageUploader(option);\n    flashContainer = $G(opt.container);\n}\n\nfunction extendProperty(fromObj, toObj) {\n\tfor (var i in fromObj) {\n\t\tif (!toObj[i]) {\n\t\t\ttoObj[i] = fromObj[i];\n\t\t}\n\t}\n\treturn toObj;\n}\n\n//})();\n\nfunction getPasteData(id) {\n\tbaidu.g(\"msg\").innerHTML = lang.copySuccess + \"</br>\";\n\tsetTimeout(function() {\n\t\tbaidu.g(\"msg\").innerHTML = \"\";\n\t}, 5000);\n\treturn baidu.g(id).value;\n}\n\nfunction createCopyButton(id, dataFrom) {\n\tbaidu.swf.create({\n\t\t\tid:\"copyFlash\",\n\t\t\turl:\"fClipboard_ueditor.swf\",\n\t\t\twidth:\"58\",\n\t\t\theight:\"25\",\n\t\t\terrorMessage:\"\",\n\t\t\tbgColor:\"#CBCBCB\",\n\t\t\twmode:\"transparent\",\n\t\t\tver:\"10.0.0\",\n\t\t\tvars:{\n\t\t\t\ttid:dataFrom\n\t\t\t}\n\t\t}, id\n\t);\n\n\tvar clipboard = baidu.swf.getMovie(\"copyFlash\");\n\tvar clipinterval = setInterval(function() {\n\t\tif (clipboard && clipboard.flashInit) {\n\t\t\tclearInterval(clipinterval);\n\t\t\tclipboard.setHandCursor(true);\n\t\t\tclipboard.setContentFuncName(\"getPasteData\");\n\t\t\t//clipboard.setMEFuncName(\"mouseEventHandler\");\n\t\t}\n\t}, 500);\n}\ncreateCopyButton(\"clipboard\", \"localPath\");"
  },
  {
    "path": "api/static/libs/js/UEditor/index.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title>完整demo</title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"ueditor.all.min.js\"> </script>\n    <!--建议手动加在语言，避免在ie下有时因为加载语言失败导致编辑器加载失败-->\n    <!--这里加载的语言文件会覆盖你在配置项目里添加的语言类型，比如你在配置项目里配置的是英文，这里加载的中文，那最后就是中文-->\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"lang/zh-cn/zh-cn.js\"></script>\n\n    <style type=\"text/css\">\n        div{\n            width:100%;\n        }\n    </style>\n</head>\n<body>\n<div>\n    <h1>完整demo</h1>\n    <script id=\"editor\" type=\"text/plain\" style=\"width:1024px;height:500px;\"></script>\n</div>\n<div id=\"btns\">\n    <div>\n        <button onclick=\"getAllHtml()\">获得整个html的内容</button>\n        <button onclick=\"getContent()\">获得内容</button>\n        <button onclick=\"setContent()\">写入内容</button>\n        <button onclick=\"setContent(true)\">追加内容</button>\n        <button onclick=\"getContentTxt()\">获得纯文本</button>\n        <button onclick=\"getPlainTxt()\">获得带格式的纯文本</button>\n        <button onclick=\"hasContent()\">判断是否有内容</button>\n        <button onclick=\"setFocus()\">使编辑器获得焦点</button>\n        <button onmousedown=\"isFocus(event)\">编辑器是否获得焦点</button>\n        <button onmousedown=\"setblur(event)\" >编辑器失去焦点</button>\n\n    </div>\n    <div>\n        <button onclick=\"getText()\">获得当前选中的文本</button>\n        <button onclick=\"insertHtml()\">插入给定的内容</button>\n        <button id=\"enable\" onclick=\"setEnabled()\">可以编辑</button>\n        <button onclick=\"setDisabled()\">不可编辑</button>\n        <button onclick=\" UE.getEditor('editor').setHide()\">隐藏编辑器</button>\n        <button onclick=\" UE.getEditor('editor').setShow()\">显示编辑器</button>\n        <button onclick=\" UE.getEditor('editor').setHeight(300)\">设置高度为300默认关闭了自动长高</button>\n    </div>\n\n    <div>\n        <button onclick=\"getLocalData()\" >获取草稿箱内容</button>\n        <button onclick=\"clearLocalData()\" >清空草稿箱</button>\n    </div>\n\n</div>\n<div>\n    <button onclick=\"createEditor()\">\n    创建编辑器</button>\n    <button onclick=\"deleteEditor()\">\n    删除编辑器</button>\n</div>\n\n<script type=\"text/javascript\">\n\n    //实例化编辑器\n    //建议使用工厂方法getEditor创建和引用编辑器实例，如果在某个闭包下引用该编辑器，直接调用UE.getEditor('editor')就能拿到相关的实例\n    var ue = UE.getEditor('editor');\n\n\n    function isFocus(e){\n        alert(UE.getEditor('editor').isFocus());\n        UE.dom.domUtils.preventDefault(e)\n    }\n    function setblur(e){\n        UE.getEditor('editor').blur();\n        UE.dom.domUtils.preventDefault(e)\n    }\n    function insertHtml() {\n        var value = prompt('插入html代码', '');\n        UE.getEditor('editor').execCommand('insertHtml', value)\n    }\n    function createEditor() {\n        enableBtn();\n        UE.getEditor('editor');\n    }\n    function getAllHtml() {\n        alert(UE.getEditor('editor').getAllHtml())\n    }\n    function getContent() {\n        var arr = [];\n        arr.push(\"使用editor.getContent()方法可以获得编辑器的内容\");\n        arr.push(\"内容为：\");\n        arr.push(UE.getEditor('editor').getContent());\n        alert(arr.join(\"\\n\"));\n    }\n    function getPlainTxt() {\n        var arr = [];\n        arr.push(\"使用editor.getPlainTxt()方法可以获得编辑器的带格式的纯文本内容\");\n        arr.push(\"内容为：\");\n        arr.push(UE.getEditor('editor').getPlainTxt());\n        alert(arr.join('\\n'))\n    }\n    function setContent(isAppendTo) {\n        var arr = [];\n        arr.push(\"使用editor.setContent('欢迎使用ueditor')方法可以设置编辑器的内容\");\n        UE.getEditor('editor').setContent('欢迎使用ueditor', isAppendTo);\n        alert(arr.join(\"\\n\"));\n    }\n    function setDisabled() {\n        UE.getEditor('editor').setDisabled('fullscreen');\n        disableBtn(\"enable\");\n    }\n\n    function setEnabled() {\n        UE.getEditor('editor').setEnabled();\n        enableBtn();\n    }\n\n    function getText() {\n        //当你点击按钮时编辑区域已经失去了焦点，如果直接用getText将不会得到内容，所以要在选回来，然后取得内容\n        var range = UE.getEditor('editor').selection.getRange();\n        range.select();\n        var txt = UE.getEditor('editor').selection.getText();\n        alert(txt)\n    }\n\n    function getContentTxt() {\n        var arr = [];\n        arr.push(\"使用editor.getContentTxt()方法可以获得编辑器的纯文本内容\");\n        arr.push(\"编辑器的纯文本内容为：\");\n        arr.push(UE.getEditor('editor').getContentTxt());\n        alert(arr.join(\"\\n\"));\n    }\n    function hasContent() {\n        var arr = [];\n        arr.push(\"使用editor.hasContents()方法判断编辑器里是否有内容\");\n        arr.push(\"判断结果为：\");\n        arr.push(UE.getEditor('editor').hasContents());\n        alert(arr.join(\"\\n\"));\n    }\n    function setFocus() {\n        UE.getEditor('editor').focus();\n    }\n    function deleteEditor() {\n        disableBtn();\n        UE.getEditor('editor').destroy();\n    }\n    function disableBtn(str) {\n        var div = document.getElementById('btns');\n        var btns = UE.dom.domUtils.getElementsByTagName(div, \"button\");\n        for (var i = 0, btn; btn = btns[i++];) {\n            if (btn.id == str) {\n                UE.dom.domUtils.removeAttributes(btn, [\"disabled\"]);\n            } else {\n                btn.setAttribute(\"disabled\", \"true\");\n            }\n        }\n    }\n    function enableBtn() {\n        var div = document.getElementById('btns');\n        var btns = UE.dom.domUtils.getElementsByTagName(div, \"button\");\n        for (var i = 0, btn; btn = btns[i++];) {\n            UE.dom.domUtils.removeAttributes(btn, [\"disabled\"]);\n        }\n    }\n\n    function getLocalData () {\n        alert(UE.getEditor('editor').execCommand( \"getlocaldata\" ));\n    }\n\n    function clearLocalData () {\n        UE.getEditor('editor').execCommand( \"clearlocaldata\" );\n        alert(\"已清空草稿箱\")\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "api/static/libs/js/UEditor/lang/en/en.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-6-12\n * Time: 下午6:57\n * To change this template use File | Settings | File Templates.\n */\nUE.I18N['en'] = {\n    'labelMap':{\n        'anchor':'Anchor', 'undo':'Undo', 'redo':'Redo', 'bold':'Bold', 'indent':'Indent', 'snapscreen':'SnapScreen',\n        'italic':'Italic', 'underline':'Underline', 'strikethrough':'Strikethrough', 'subscript':'SubScript','fontborder':'text border',\n        'superscript':'SuperScript', 'formatmatch':'Format Match', 'source':'Source', 'blockquote':'BlockQuote',\n        'pasteplain':'PastePlain', 'selectall':'SelectAll', 'print':'Print', 'preview':'Preview',\n        'horizontal':'Horizontal', 'removeformat':'RemoveFormat', 'time':'Time', 'date':'Date',\n        'unlink':'Unlink', 'insertrow':'InsertRow', 'insertcol':'InsertCol', 'mergeright':'MergeRight', 'mergedown':'MergeDown',\n        'deleterow':'DeleteRow', 'deletecol':'DeleteCol', 'splittorows':'SplitToRows','insertcode':'insert code',\n        'splittocols':'SplitToCols', 'splittocells':'SplitToCells','deletecaption':'DeleteCaption','inserttitle':'InsertTitle',\n        'mergecells':'MergeCells', 'deletetable':'DeleteTable', 'cleardoc':'Clear', 'insertparagraphbeforetable':\"InsertParagraphBeforeTable\",\n        'fontfamily':'FontFamily', 'fontsize':'FontSize', 'paragraph':'Paragraph','simpleupload':'Single Image','insertimage':'Multi Image','edittable':'Edit Table', 'edittd':'Edit Td','link':'Link',\n        'emotion':'Emotion', 'spechars':'Spechars', 'searchreplace':'SearchReplace', 'map':'BaiduMap', 'gmap':'GoogleMap',\n        'insertvideo':'Video', 'help':'Help', 'justifyleft':'JustifyLeft', 'justifyright':'JustifyRight', 'justifycenter':'JustifyCenter',\n        'justifyjustify':'Justify', 'forecolor':'FontColor', 'backcolor':'BackColor', 'insertorderedlist':'OL',\n        'insertunorderedlist':'UL', 'fullscreen':'FullScreen', 'directionalityltr':'EnterFromLeft', 'directionalityrtl':'EnterFromRight',\n        'rowspacingtop':'RowSpacingTop', 'rowspacingbottom':'RowSpacingBottom', 'pagebreak':'PageBreak', 'insertframe':'Iframe', 'imagenone':'Default',\n        'imageleft':'ImageLeft', 'imageright':'ImageRight', 'attachment':'Attachment', 'imagecenter':'ImageCenter', 'wordimage':'WordImage',\n        'lineheight':'LineHeight','edittip':'EditTip','customstyle':'CustomStyle', 'scrawl':'Scrawl', 'autotypeset':'AutoTypeset',\n        'webapp':'WebAPP', 'touppercase':'UpperCase', 'tolowercase':'LowerCase','template':'Template','background':'Background','inserttable':'InsertTable',\n        'music':'Music', 'charts': 'charts','drafts': 'Load from Drafts'\n    },\n    'insertorderedlist':{\n        'num':'1,2,3...',\n        'num1':'1),2),3)...',\n        'num2':'(1),(2),(3)...',\n        'cn':'一,二,三....',\n        'cn1':'一),二),三)....',\n        'cn2':'(一),(二),(三)....',\n        'decimal':'1,2,3...',\n        'lower-alpha':'a,b,c...',\n        'lower-roman':'i,ii,iii...',\n        'upper-alpha':'A,B,C...',\n        'upper-roman':'I,II,III...'\n    },\n    'insertunorderedlist':{\n        'circle':'○ Circle',\n        'disc':'● Circle dot',\n        'square':'■ Rectangle ',\n        'dash' :'－ Dash',\n        'dot' : '。dot'\n    },\n    'paragraph':{'p':'Paragraph', 'h1':'Title 1', 'h2':'Title 2', 'h3':'Title 3', 'h4':'Title 4', 'h5':'Title 5', 'h6':'Title 6'},\n    'fontfamily':{\n        'songti':'Sim Sun',\n        'kaiti':'Sim Kai',\n        'heiti':'Sim Hei',\n        'lishu':'Sim Li',\n        'yahei': 'Microsoft YaHei',\n        'andaleMono':'Andale Mono',\n        'arial': 'Arial',\n        'arialBlack':'Arial Black',\n        'comicSansMs':'Comic Sans MS',\n        'impact':'Impact',\n        'timesNewRoman':'Times New Roman'\n    },\n    'customstyle':{\n        'tc':'Title center',\n        'tl':'Title left',\n        'im':'Important',\n        'hi':'Highlight'\n    },\n    'autoupload': {\n        'exceedSizeError': 'File Size Exceed',\n        'exceedTypeError': 'File Type Not Allow',\n        'jsonEncodeError': 'Server Return Format Error',\n        'loading':\"loading...\",\n        'loadError':\"load error\",\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n    },\n    'simpleupload':{\n        'exceedSizeError': 'File Size Exceed',\n        'exceedTypeError': 'File Type Not Allow',\n        'jsonEncodeError': 'Server Return Format Error',\n        'loading':\"loading...\",\n        'loadError':\"load error\",\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n    },\n    'elementPathTip':\"Path\",\n    'wordCountTip':\"Word Count\",\n    'wordCountMsg':'{#count} characters entered,{#leave} left. ',\n    'wordOverFlowMsg':'<span style=\"color:red;\">The number of characters has exceeded allowable maximum values, the server may refuse to save!</span>',\n    'ok':\"OK\",\n    'cancel':\"Cancel\",\n    'closeDialog':\"closeDialog\",\n    'tableDrag':\"You must import the file uiUtils.js before drag! \",\n    'autofloatMsg':\"The plugin AutoFloat depends on EditorUI!\",\n    'loadconfigError': 'Get server config error.',\n    'loadconfigFormatError': 'Server config format error.',\n    'loadconfigHttpError': 'Get server config http error.',\n    'snapScreen_plugin':{\n        'browserMsg':\"Only IE supported!\",\n        'callBackErrorMsg':\"The callback data is wrong,please check the config!\",\n        'uploadErrorMsg':\"Upload error,please check your server environment! \"\n    },\n    'insertcode':{\n        'as3':'ActionScript 3',\n        'bash':'Bash/Shell',\n        'cpp':'C/C++',\n        'css':'CSS',\n        'cf':'ColdFusion',\n        'c#':'C#',\n        'delphi':'Delphi',\n        'diff':'Diff',\n        'erlang':'Erlang',\n        'groovy':'Groovy',\n        'html':'HTML',\n        'java':'Java',\n        'jfx':'JavaFX',\n        'js':'JavaScript',\n        'pl':'Perl',\n        'php':'PHP',\n        'plain':'Plain Text',\n        'ps':'PowerShell',\n        'python':'Python',\n        'ruby':'Ruby',\n        'scala':'Scala',\n        'sql':'SQL',\n        'vb':'Visual Basic',\n        'xml':'XML'\n    },\n    'confirmClear':\"Do you confirm to clear the Document?\",\n    'contextMenu':{\n        'delete':\"Delete\",\n        'selectall':\"Select all\",\n        'deletecode':\"Delete Code\",\n        'cleardoc':\"Clear Document\",\n        'confirmclear':\"Do you confirm to clear the Document?\",\n        'unlink':\"Unlink\",\n        'paragraph':\"Paragraph\",\n        'edittable':\"Table property\",\n        'aligncell':'Align cell',\n        'aligntable':'Table alignment',\n        'tableleft':'Left float',\n        'tablecenter':'Center',\n        'tableright':'Right float',\n        'aligntd':'Cell alignment',\n        'edittd':\"Cell property\",\n        'setbordervisible':'set table edge visible',\n        'table':\"Table\",\n        'justifyleft':'Justify Left',\n        'justifyright':'Justify Right',\n        'justifycenter':'Justify Center',\n        'justifyjustify':'Default',\n        'deletetable':\"Delete table\",\n        'insertparagraphbefore':\"InsertedBeforeLine\",\n        'insertparagraphafter':'InsertedAfterLine',\n        'inserttable':'Insert table',\n        'insertcaption':'Insert caption',\n        'deletecaption':'Delete Caption',\n        'inserttitle':'Insert Title',\n        'deletetitle':'Delete Title',\n        'inserttitlecol':'Insert Title Col',\n        'deletetitlecol':'Delete Title Col',\n        'averageDiseRow':'AverageDise Row',\n        'averageDisCol':'AverageDis Col',\n        'deleterow':\"Delete row\",\n        'deletecol':\"Delete col\",\n        'insertrow':\"Insert row\",\n        'insertcol':\"Insert col\",\n        'insertrownext':'Insert Row Next',\n        'insertcolnext':'Insert Col Next',\n        'mergeright':\"Merge right\",\n        'mergeleft':\"Merge left\",\n        'mergedown':\"Merge down\",\n        'mergecells':\"Merge cells\",\n        'splittocells':\"Split to cells\",\n        'splittocols':\"Split to Cols\",\n        'splittorows':\"Split to Rows\",\n        'tablesort':'Table sorting',\n        'enablesort':'Sorting Enable',\n        'disablesort':'Sorting Disable',\n        'reversecurrent':'Reverse current',\n        'orderbyasc':'Order By ASCII',\n        'reversebyasc':'Reverse By ASCII',\n        'orderbynum':'Order By Num',\n        'reversebynum':'Reverse By Num',\n        'borderbk':'Border shading',\n        'setcolor':'interlaced color',\n        'unsetcolor':'Cancel interlacedcolor',\n        'setbackground':'Background interlaced',\n        'unsetbackground':'Cancel Bk interlaced',\n        'redandblue':'Blue and red',\n        'threecolorgradient':'Three-color gradient',\n        'copy':\"Copy(Ctrl + c)\",\n        'copymsg':\"Browser does not support. Please use 'Ctrl + c' instead!\",\n        'paste':\"Paste(Ctrl + v)\",\n        'pastemsg':\"Browser does not support. Please use 'Ctrl + v' instead!\"\n    },\n    'copymsg': \"Browser does not support. Please use 'Ctrl + c' instead!\",\n    'pastemsg': \"Browser does not support. Please use 'Ctrl + v' instead!\",\n    'anthorMsg':\"Link\",\n    'clearColor':'Clear',\n    'standardColor':'Standard color',\n    'themeColor':'Theme color',\n    'property':'Property',\n    'default':'Default',\n    'modify':'Modify',\n    'justifyleft':'Justify Left',\n    'justifyright':'Justify Right',\n    'justifycenter':'Justify Center',\n    'justify':'Default',\n    'clear':'Clear',\n    'anchorMsg':'Anchor',\n    'delete':'Delete',\n    'clickToUpload':\"Click to upload\",\n    'unset':'Language hasn\\'t been set!',\n    't_row':'row',\n    't_col':'col',\n    'pasteOpt':'Paste Option',\n    'pasteSourceFormat':\"Keep Source Formatting\",\n    'tagFormat':'Keep tag',\n    'pasteTextFormat':'Keep Text only',\n    'more':'More',\n    'autoTypeSet':{\n        'mergeLine':\"Merge empty line\",\n        'delLine':\"Del empty line\",\n        'removeFormat':\"Remove format\",\n        'indent':\"Indent\",\n        'alignment':\"Alignment\",\n        'imageFloat':\"Image float\",\n        'removeFontsize':\"Remove font size\",\n        'removeFontFamily':\"Remove fontFamily\",\n        'removeHtml':\"Remove redundant HTML code\",\n        'pasteFilter':\"Paste filter\",\n        'run':\"Done\",\n        'symbol':'Symbol Conversion',\n        'bdc2sb':'Full-width to Half-width',\n        'tobdc':'Half-width to Full-width'\n    },\n\n    'background':{\n        'static':{\n            'lang_background_normal':'Normal',\n            'lang_background_local':'Online',\n            'lang_background_set':'Background Set',\n            'lang_background_none':'No Background',\n            'lang_background_colored':'Colored Background',\n            'lang_background_color':'Color Set',\n            'lang_background_netimg':'Net-Image',\n            'lang_background_align':'Align Type',\n            'lang_background_position':'Position',\n            'repeatType':{'options':[\"Center\", \"Repeat-x\", \"Repeat-y\", \"Tile\",\"Custom\"]}\n        },\n        'noUploadImage':\"No pictures has been uploaded！\",\n        'toggleSelect':'Change the active state by click!\\n Image Size: '\n    },\n    //===============dialog i18N=======================\n    'insertimage':{\n        'static':{\n            'lang_tab_remote':\"Insert\",\n            'lang_tab_upload':\"Local\",\n            'lang_tab_online':\"Manager\",\n            'lang_tab_search':\"Search\",\n            'lang_input_url':\"Address:\",\n            'lang_input_size':\"Size:\",\n            'lang_input_width':\"Width\",\n            'lang_input_height':\"Height\",\n            'lang_input_border':\"Border:\",\n            'lang_input_vhspace':\"Margins:\",\n            'lang_input_title':\"Title:\",\n            'lang_input_align':'Image Float Style:',\n            'lang_imgLoading':\"Loading...\",\n            'lang_start_upload':\"Start Upload\",\n            'lock':{'title':\"Lock rate\"},\n            'searchType':{'title':\"ImageType\", 'options':[\"News\", \"Wallpaper\", \"emotions\", \"photo\"]},\n            'searchTxt':{'value':\"Enter the search keyword!\"},\n            'searchBtn':{'value':\"Search\"},\n            'searchReset':{'value':\"Clear\"},\n            'noneAlign':{'title':'None Float'},\n            'leftAlign':{'title':'Left Float'},\n            'rightAlign':{'title':'Right Float'},\n            'centerAlign':{'title':'Center In A Line'}\n        },\n        'uploadSelectFile':'Select File',\n        'uploadAddFile':'Add File',\n        'uploadStart':'Start Upload',\n        'uploadPause':'Pause Upload',\n        'uploadContinue':'Continue Upload',\n        'uploadRetry':'Retry Upload',\n        'uploadDelete':'Delete',\n        'uploadTurnLeft':'Turn Left',\n        'uploadTurnRight':'Turn Right',\n        'uploadPreview':'Doing Preview',\n        'uploadNoPreview':'Can Not Preview',\n        'updateStatusReady': 'Selected _ pictures, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ pictures (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize':'File Size Exceed',\n        'errorFileType':'File Type Not Allow',\n        'errorInterrupt':'File Upload Interrupted',\n        'errorUploadRetry':'Upload Error, Please Retry.',\n        'errorHttp':'Http Error',\n        'errorServerUpload':'Server Result Error.',\n        'remoteLockError':\"Cannot Lock the Proportion between width and height\",\n        'numError':\"Please enter the correct Num. e.g 123,400\",\n        'imageUrlError':\"The image format may be wrong!\",\n        'imageLoadError':\"Error,please check the network or URL！\",\n        'searchRemind':\"Enter the search keyword!\",\n        'searchLoading':\"Image is loading,please wait...\",\n        'searchRetry':\" Sorry,can't find the image,please try again!\"\n    },\n    'attachment':{\n        'static':{\n            'lang_tab_upload': 'Upload',\n            'lang_tab_online': 'Online',\n            'lang_start_upload':\"Start upload\",\n            'lang_drop_remind':\"You can drop files here, a single maximum of 300 files\"\n        },\n        'uploadSelectFile':'Select File',\n        'uploadAddFile':'Add File',\n        'uploadStart':'Start Upload',\n        'uploadPause':'Pause Upload',\n        'uploadContinue':'Continue Upload',\n        'uploadRetry':'Retry Upload',\n        'uploadDelete':'Delete',\n        'uploadTurnLeft':'Turn Left',\n        'uploadTurnRight':'Turn Right',\n        'uploadPreview':'Doing Preview',\n        'updateStatusReady': 'Selected _ files, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ files (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize':'File Size Exceed',\n        'errorFileType':'File Type Not Allow',\n        'errorInterrupt':'File Upload Interrupted',\n        'errorUploadRetry':'Upload Error, Please Retry.',\n        'errorHttp':'Http Error',\n        'errorServerUpload':'Server Result Error.'\n    },\n\n    'insertvideo':{\n        'static':{\n            'lang_tab_insertV':\"Video\",\n            'lang_tab_searchV':\"Search\",\n            'lang_tab_uploadV':\"Upload\",\n            'lang_video_url':\" URL \",\n            'lang_video_size':\"Video Size\",\n            'lang_videoW':\"Width\",\n            'lang_videoH':\"Height\",\n            'lang_alignment':\"Alignment\",\n            'videoSearchTxt':{'value':\"Enter the search keyword!\"},\n            'videoType':{'options':[\"All\", \"Hot\", \"Entertainment\", \"Funny\", \"Sports\", \"Science\", \"variety\"]},\n            'videoSearchBtn':{'value':\"Search in Baidu\"},\n            'videoSearchReset':{'value':\"Clear result\"},\n\n            'lang_input_fileStatus':' No file uploaded!',\n            'startUpload':{'style':\"background:url(upload.png) no-repeat;\"},\n\n            'lang_upload_size':\"Video Size\",\n            'lang_upload_width':\"Width\",\n            'lang_upload_height':\"Height\",\n            'lang_upload_alignment':\"Alignment\",\n            'lang_format_advice':\"Recommends mp4 format.\"\n        },\n        'numError':\"Please enter the correct Num. e.g 123,400\",\n        'floatLeft':\"Float left\",\n        'floatRight':\"Float right\",\n        'default':\"Default\",\n        'block':\"Display in block\",\n        'urlError':\"The video url format may be wrong!\",\n        'loading':\" &nbsp;The video is loading, please wait…\",\n        'clickToSelect':\"Click to select\",\n        'goToSource':'Visit source video ',\n        'noVideo':\" &nbsp; &nbsp;Sorry,can't find the video,please try again!\",\n\n        'browseFiles':'Open files',\n        'uploadSuccess':'Upload Successful!',\n        'delSuccessFile':'Remove from the success of the queue',\n        'delFailSaveFile':'Remove the save failed file',\n        'statusPrompt':' file(s) uploaded! ',\n        'flashVersionError':'The current Flash version is too low, please update FlashPlayer,then try again!',\n        'flashLoadingError':'The Flash failed loading! Please check the path or network state',\n        'fileUploadReady':'Wait for uploading...',\n        'delUploadQueue':'Remove from the uploading queue ',\n        'limitPrompt1':'Can not choose more than single',\n        'limitPrompt2':'file(s)！Please choose again！',\n        'delFailFile':'Remove failure file',\n        'fileSizeLimit':'File size exceeds the limit！',\n        'emptyFile':'Can not upload an empty file！',\n        'fileTypeError':'File type error！',\n        'unknownError':'Unknown error！',\n        'fileUploading':'Uploading,please wait...',\n        'cancelUpload':'Cancel upload',\n        'netError':'Network error',\n        'failUpload':'Upload failed',\n        'serverIOError':'Server IO error！',\n        'noAuthority':'No Permission！',\n        'fileNumLimit':'Upload limit to the number',\n        'failCheck':'Authentication fails, the upload is skipped!',\n        'fileCanceling':'Cancel, please wait...',\n        'stopUploading':'Upload has stopped...',\n\n        'uploadSelectFile':'Select File',\n        'uploadAddFile':'Add File',\n        'uploadStart':'Start Upload',\n        'uploadPause':'Pause Upload',\n        'uploadContinue':'Continue Upload',\n        'uploadRetry':'Retry Upload',\n        'uploadDelete':'Delete',\n        'uploadTurnLeft':'Turn Left',\n        'uploadTurnRight':'Turn Right',\n        'uploadPreview':'Doing Preview',\n        'updateStatusReady': 'Selected _ files, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ files (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize':'File Size Exceed',\n        'errorFileType':'File Type Not Allow',\n        'errorInterrupt':'File Upload Interrupted',\n        'errorUploadRetry':'Upload Error, Please Retry.',\n        'errorHttp':'Http Error',\n        'errorServerUpload':'Server Result Error.'\n    },\n    'webapp':{\n        'tip1':\"This function provided by Baidu APP,please apply for baidu APPKey webmaster first!\",\n        'tip2':\"And then open the file ueditor.config.js to set it! \",\n        'applyFor':\"APPLY FOR\",\n        'anthorApi':\"Baidu API\"\n    },\n    'template':{\n        'static':{\n            'lang_template_bkcolor':'Background Color',\n            'lang_template_clear' : 'Keep Content',\n            'lang_template_select':'Select Template'\n        },\n        'blank':\"Blank\",\n        'blog':\"Blog\",\n        'resume':\"Resume\",\n        'richText':\"Rich Text\",\n        'scrPapers':\"Scientific Papers\"\n    },\n    scrawl:{\n        'static':{\n            'lang_input_previousStep':\"Previous\",\n            'lang_input_nextsStep':\"Next\",\n            'lang_input_clear':'Clear',\n            'lang_input_addPic':'AddImage',\n            'lang_input_ScalePic':'ScaleImage',\n            'lang_input_removePic':'RemoveImage',\n            'J_imgTxt':{title:'Add background image'}\n        },\n        'noScarwl':\"No paint, a white paper...\",\n        'scrawlUpLoading':\"Image is uploading, please wait...\",\n        'continueBtn':\"Try again\",\n        'imageError':\"Image failed to load!\",\n        'backgroundUploading':'Image is uploading,please wait...'\n    },\n    'music':{\n        'static':{\n            'lang_input_tips':\"Input singer/song/album, search you interested in music!\",\n            'J_searchBtn':{value:'Search songs'}\n        },\n        'emptyTxt':'Not search to the relevant music results, please change a keyword try.',\n        'chapter':'Songs',\n        'singer':'Singer',\n        'special':'Album',\n        'listenTest':'Audition'\n    },\n    anchor:{\n        'static':{\n            'lang_input_anchorName':'Anchor Name:'\n        }\n    },\n    'charts':{\n        'static':{\n            'lang_data_source':'Data source:',\n            'lang_chart_format': 'Chart format:',\n            'lang_data_align': 'Align',\n            'lang_chart_align_same': 'Consistent with the X-axis Y-axis',\n            'lang_chart_align_reverse': 'X-axis Y-axis opposite',\n            'lang_chart_title': 'Title',\n            'lang_chart_main_title': 'main title:',\n            'lang_chart_sub_title': 'sub title:',\n            'lang_chart_x_title': 'X-axis title:',\n            'lang_chart_y_title': 'Y-axis title:',\n            'lang_chart_tip': 'Prompt',\n            'lang_cahrt_tip_prefix': 'prefix:',\n            'lang_cahrt_tip_description': '仅饼图有效， 当鼠标移动到饼图中相应的块上时，提示框内的文字的前缀',\n            'lang_chart_data_unit': 'Unit',\n            'lang_chart_data_unit_title': 'unit:',\n            'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位， 比如： 温度的单位 ℃',\n            'lang_chart_type': 'Chart type:',\n            'lang_prev_btn': 'Previous',\n            'lang_next_btn': 'Next'\n        }\n    },\n    emotion:{\n        'static':{\n            'lang_input_choice':'Choice',\n            'lang_input_Tuzki':'Tuzki',\n            'lang_input_lvdouwa':'LvDouWa',\n            'lang_input_BOBO':'BOBO',\n            'lang_input_babyCat':'BabyCat',\n            'lang_input_bubble':'Bubble',\n            'lang_input_youa':'YouA'\n        }\n    },\n    gmap:{\n        'static':{\n            'lang_input_address':'Address:',\n            'lang_input_search':'Search',\n            'address':{value:\"Beijing\"}\n        },\n        searchError:'Unable to locate the address!'\n    },\n    help:{\n        'static':{\n            'lang_input_about':'About',\n            'lang_input_shortcuts':'Shortcuts',\n            'lang_input_introduction':\"UEditor is developed by Baidu Co.ltd.  It is lightweight, customizable , focusing on user experience and etc. , UEditor is based on open source BSD license , allowing free use and redistribution.\",\n            'lang_Txt_shortcuts':'Shortcuts',\n            'lang_Txt_func':'Function',\n            'lang_Txt_bold':'Bold',\n            'lang_Txt_copy':'Copy',\n            'lang_Txt_cut':'Cut',\n            'lang_Txt_Paste':'Paste',\n            'lang_Txt_undo':'Undo',\n            'lang_Txt_redo':'Redo',\n            'lang_Txt_italic':'Italic',\n            'lang_Txt_underline':'Underline',\n            'lang_Txt_selectAll':'Select All',\n            'lang_Txt_visualEnter':'Submit',\n            'lang_Txt_fullscreen':'Fullscreen'\n        }\n    },\n    insertframe:{\n        'static':{\n            'lang_input_address':'Address：',\n            'lang_input_width':'Width：',\n            'lang_input_height':'height：',\n            'lang_input_isScroll':'Enable scrollbars：',\n            'lang_input_frameborder':'Show frame border：',\n            'lang_input_alignMode':'Alignment：',\n            'align':{title:\"Alignment\", options:[\"Default\", \"Left\", \"Right\", \"Center\"]}\n        },\n        'enterAddress':'Please enter an address!'\n    },\n    link:{\n        'static':{\n            'lang_input_text':'Text：',\n            'lang_input_url':'URL：',\n            'lang_input_title':'Title：',\n            'lang_input_target':'open in new window：'\n        },\n        'validLink':'Supports only effective when a link is selected',\n        'httpPrompt':'The hyperlink you enter should start with \"http|https|ftp://\"!'\n    },\n    map:{\n        'static':{\n            lang_city:\"City\",\n            lang_address:\"Address\",\n            city:{value:\"Beijing\"},\n            lang_search:\"Search\",\n            lang_dynamicmap:\"Dynamic map\"\n        },\n        cityMsg:\"Please enter the city name!\",\n        errorMsg:\"Can't find the place!\"\n    },\n    searchreplace:{\n        'static':{\n            lang_tab_search:\"Search\",\n            lang_tab_replace:\"Replace\",\n            lang_search1:\"Search\",\n            lang_search2:\"Search\",\n            lang_replace:\"Replace\",\n            lang_searchReg:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',\n            lang_searchReg1:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',\n            lang_case_sensitive1:\"Case sense\",\n            lang_case_sensitive2:\"Case sense\",\n            nextFindBtn:{value:\"Next\"},\n            preFindBtn:{value:\"Preview\"},\n            nextReplaceBtn:{value:\"Next\"},\n            preReplaceBtn:{value:\"Preview\"},\n            repalceBtn:{value:\"Replace\"},\n            repalceAllBtn:{value:\"Replace all\"}\n        },\n        getEnd:\"Has the search to the bottom!\",\n        getStart:\"Has the search to the top!\",\n        countMsg:\"Altogether replaced {#count} character(s)!\"\n    },\n    snapscreen:{\n        'static':{\n            lang_showMsg:\"You should install the UEditor screenshots program first!\",\n            lang_download:\"Download!\",\n            lang_step1:\"Step1:Download the program and then run it\",\n            lang_step2:\"Step2:After complete install,try to click the button again\"\n        }\n    },\n    spechars:{\n        'static':{},\n        tsfh:\"Special\",\n        lmsz:\"Roman\",\n        szfh:\"Numeral\",\n        rwfh:\"Japanese\",\n        xlzm:\"The Greek\",\n        ewzm:\"Russian\",\n        pyzm:\"Phonetic\",\n        yyyb:\"English\",\n        zyzf:\"Others\"\n    },\n    'edittable':{\n        'static':{\n            'lang_tableStyle':'Table style',\n            'lang_insertCaption':'Add table header row',\n            'lang_insertTitle':'Add table title row',\n            'lang_insertTitleCol':'Add table title col',\n            'lang_tableSize':'Automatically adjust table size',\n            'lang_autoSizeContent':'Adaptive by form text',\n            'lang_orderbycontent':\"Table of contents sortable\",\n            'lang_autoSizePage':'Page width adaptive',\n            'lang_example':'Example',\n            'lang_borderStyle':'Table Border',\n            'lang_color':'Color:'\n        },\n        captionName:'Caption',\n        titleName:'Title',\n        cellsName:'text',\n        errorMsg:'There are merged cells, can not sort.'\n    },\n    'edittip':{\n        'static':{\n            lang_delRow:'Delete entire row',\n            lang_delCol:'Delete entire col'\n        }\n    },\n    'edittd':{\n        'static':{\n            lang_tdBkColor:'Background Color:'\n        }\n    },\n    'formula':{\n        'static':{\n        }\n    },\n    wordimage:{\n        'static':{\n            lang_resave:\"The re-save step\",\n            uploadBtn:{src:\"upload.png\", alt:\"Upload\"},\n            clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},\n            lang_step:\" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process.\"\n        },\n        fileType:\"Image\",\n        flashError:\"Flash initialization failed!\",\n        netError:\"Network error! Please try again!\",\n        copySuccess:\"URL has been copied!\",\n\n        'flashI18n':{\n            lang:encodeURI( '{\"UploadingState\":\"totalNum: ${a},uploadComplete: ${b}\", \"BeforeUpload\":\"waitingNum: ${a}\", \"ExceedSize\":\"Size exceed${a}\", \"ErrorInPreview\":\"Preview failed\", \"DefaultDescription\":\"Description\", \"LoadingImage\":\"Loading...\"}' ),\n            uploadingTF:encodeURI( '{\"font\":\"Arial\", \"size\":12, \"color\":\"0x000\", \"bold\":\"true\", \"italic\":\"false\", \"underline\":\"false\"}' ),\n            imageTF:encodeURI( '{\"font\":\"Arial\", \"size\":11, \"color\":\"red\", \"bold\":\"false\", \"italic\":\"false\", \"underline\":\"false\"}' ),\n            textEncoding:\"utf-8\",\n            addImageSkinURL:\"addImage.png\",\n            allDeleteBtnUpSkinURL:\"allDeleteBtnUpSkin.png\",\n            allDeleteBtnHoverSkinURL:\"allDeleteBtnHoverSkin.png\",\n            rotateLeftBtnEnableSkinURL:\"rotateLeftEnable.png\",\n            rotateLeftBtnDisableSkinURL:\"rotateLeftDisable.png\",\n            rotateRightBtnEnableSkinURL:\"rotateRightEnable.png\",\n            rotateRightBtnDisableSkinURL:\"rotateRightDisable.png\",\n            deleteBtnEnableSkinURL:\"deleteEnable.png\",\n            deleteBtnDisableSkinURL:\"deleteDisable.png\",\n            backgroundURL:'',\n            listBackgroundURL:'',\n            buttonURL:'button.png'\n        }\n    },\n    'autosave': {\n        'success':'Local conservation success'\n    }\n};\n"
  },
  {
    "path": "api/static/libs/js/UEditor/lang/zh-cn/zh-cn.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-6-12\n * Time: 下午5:02\n * To change this template use File | Settings | File Templates.\n */\nUE.I18N['zh-cn'] = {\n    'labelMap':{\n        'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图',\n        'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框',\n        'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用',\n        'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览',\n        'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期',\n        'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格',\n        'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行',\n        'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题',\n        'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':\"表格前插入行\",'insertcode':'代码语言',\n        'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接',\n        'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图', 'gmap':'Google地图',\n        'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐',\n        'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表',\n        'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入',\n        'rowspacingtop':'段前距', 'rowspacingbottom':'段后距',  'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认',\n        'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存',\n        'lineheight':'行间距','edittip' :'编辑提示','customstyle':'自定义标题', 'autotypeset':'自动排版',\n        'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦',\n        'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表'\n    },\n    'insertorderedlist':{\n        'num':'1,2,3...',\n        'num1':'1),2),3)...',\n        'num2':'(1),(2),(3)...',\n        'cn':'一,二,三....',\n        'cn1':'一),二),三)....',\n        'cn2':'(一),(二),(三)....',\n        'decimal':'1,2,3...',\n        'lower-alpha':'a,b,c...',\n        'lower-roman':'i,ii,iii...',\n        'upper-alpha':'A,B,C...',\n        'upper-roman':'I,II,III...'\n    },\n    'insertunorderedlist':{\n        'circle':'○ 大圆圈',\n        'disc':'● 小黑点',\n        'square':'■ 小方块 ',\n        'dash' :'— 破折号',\n        'dot':' 。 小圆圈'\n    },\n    'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'},\n    'fontfamily':{\n        'songti':'宋体',\n        'kaiti':'楷体',\n        'heiti':'黑体',\n        'lishu':'隶书',\n        'yahei':'微软雅黑',\n        'andaleMono':'andale mono',\n        'arial': 'arial',\n        'arialBlack':'arial black',\n        'comicSansMs':'comic sans ms',\n        'impact':'impact',\n        'timesNewRoman':'times new roman'\n    },\n    'customstyle':{\n        'tc':'标题居中',\n        'tl':'标题居左',\n        'im':'强调',\n        'hi':'明显强调'\n    },\n    'autoupload': {\n        'exceedSizeError': '文件大小超出限制',\n        'exceedTypeError': '文件格式不允许',\n        'jsonEncodeError': '服务器返回格式错误',\n        'loading':\"正在上传...\",\n        'loadError':\"上传错误\",\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！'\n    },\n    'simpleupload':{\n        'exceedSizeError': '文件大小超出限制',\n        'exceedTypeError': '文件格式不允许',\n        'jsonEncodeError': '服务器返回格式错误',\n        'loading':\"正在上传...\",\n        'loadError':\"上传错误\",\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！'\n    },\n    'elementPathTip':\"元素路径\",\n    'wordCountTip':\"字数统计\",\n    'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ',\n    'wordOverFlowMsg':'<span style=\"color:red;\">字数超出最大允许值，服务器可能拒绝保存！</span>',\n    'ok':\"确认\",\n    'cancel':\"取消\",\n    'closeDialog':\"关闭对话框\",\n    'tableDrag':\"表格拖动必须引入uiUtils.js文件！\",\n    'autofloatMsg':\"工具栏浮动依赖编辑器UI，您首先需要引入UI文件!\",\n    'loadconfigError': '获取后台配置项请求出错，上传功能将不能正常使用！',\n    'loadconfigFormatError': '后台配置项返回格式出错，上传功能将不能正常使用！',\n    'loadconfigHttpError': '请求后台配置项http错误，上传功能将不能正常使用！',\n    'snapScreen_plugin':{\n        'browserMsg':\"仅支持IE浏览器！\",\n        'callBackErrorMsg':\"服务器返回数据有误，请检查配置项之后重试。\",\n        'uploadErrorMsg':\"截图上传失败，请检查服务器端环境! \"\n    },\n    'insertcode':{\n        'as3':'ActionScript 3',\n        'bash':'Bash/Shell',\n        'cpp':'C/C++',\n        'css':'CSS',\n        'cf':'ColdFusion',\n        'c#':'C#',\n        'delphi':'Delphi',\n        'diff':'Diff',\n        'erlang':'Erlang',\n        'groovy':'Groovy',\n        'html':'HTML',\n        'java':'Java',\n        'jfx':'JavaFX',\n        'js':'JavaScript',\n        'pl':'Perl',\n        'php':'PHP',\n        'plain':'Plain Text',\n        'ps':'PowerShell',\n        'python':'Python',\n        'ruby':'Ruby',\n        'scala':'Scala',\n        'sql':'SQL',\n        'vb':'Visual Basic',\n        'xml':'XML'\n    },\n    'confirmClear':\"确定清空当前文档么？\",\n    'contextMenu':{\n        'delete':\"删除\",\n        'selectall':\"全选\",\n        'deletecode':\"删除代码\",\n        'cleardoc':\"清空文档\",\n        'confirmclear':\"确定清空当前文档么？\",\n        'unlink':\"删除超链接\",\n        'paragraph':\"段落格式\",\n        'edittable':\"表格属性\",\n        'aligntd':\"单元格对齐方式\",\n        'aligntable':'表格对齐方式',\n        'tableleft':'左浮动',\n        'tablecenter':'居中显示',\n        'tableright':'右浮动',\n        'edittd':\"单元格属性\",\n        'setbordervisible':'设置表格边线可见',\n        'justifyleft':'左对齐',\n        'justifyright':'右对齐',\n        'justifycenter':'居中对齐',\n        'justifyjustify':'两端对齐',\n        'table':\"表格\",\n        'inserttable':'插入表格',\n        'deletetable':\"删除表格\",\n        'insertparagraphbefore':\"前插入段落\",\n        'insertparagraphafter':'后插入段落',\n        'deleterow':\"删除当前行\",\n        'deletecol':\"删除当前列\",\n        'insertrow':\"前插入行\",\n        'insertcol':\"左插入列\",\n        'insertrownext':'后插入行',\n        'insertcolnext':'右插入列',\n        'insertcaption':'插入表格名称',\n        'deletecaption':'删除表格名称',\n        'inserttitle':'插入表格标题行',\n        'deletetitle':'删除表格标题行',\n        'inserttitlecol':'插入表格标题列',\n        'deletetitlecol':'删除表格标题列',\n        'averageDiseRow':'平均分布各行',\n        'averageDisCol':'平均分布各列',\n        'mergeright':\"向右合并\",\n        'mergeleft':\"向左合并\",\n        'mergedown':\"向下合并\",\n        'mergecells':\"合并单元格\",\n        'splittocells':\"完全拆分单元格\",\n        'splittocols':\"拆分成列\",\n        'splittorows':\"拆分成行\",\n        'tablesort':'表格排序',\n        'enablesort':'设置表格可排序',\n        'disablesort':'取消表格可排序',\n        'reversecurrent':'逆序当前',\n        'orderbyasc':'按ASCII字符升序',\n        'reversebyasc':'按ASCII字符降序',\n        'orderbynum':'按数值大小升序',\n        'reversebynum':'按数值大小降序',\n        'borderbk':'边框底纹',\n        'setcolor':'表格隔行变色',\n        'unsetcolor':'取消表格隔行变色',\n        'setbackground':'选区背景隔行',\n        'unsetbackground':'取消选区背景',\n        'redandblue':'红蓝相间',\n        'threecolorgradient':'三色渐变',\n        'copy':\"复制(Ctrl + c)\",\n        'copymsg': \"浏览器不支持,请使用 'Ctrl + c'\",\n        'paste':\"粘贴(Ctrl + v)\",\n         'pastemsg': \"浏览器不支持,请使用 'Ctrl + v'\"\n    },\n    'copymsg': \"浏览器不支持,请使用 'Ctrl + c'\",\n    'pastemsg': \"浏览器不支持,请使用 'Ctrl + v'\",\n    'anthorMsg':\"链接\",\n    'clearColor':'清空颜色',\n    'standardColor':'标准颜色',\n    'themeColor':'主题颜色',\n    'property':'属性',\n    'default':'默认',\n    'modify':'修改',\n    'justifyleft':'左对齐',\n    'justifyright':'右对齐',\n    'justifycenter':'居中',\n    'justify':'默认',\n    'clear':'清除',\n    'anchorMsg':'锚点',\n    'delete':'删除',\n    'clickToUpload':\"点击上传\",\n    'unset':'尚未设置语言文件',\n    't_row':'行',\n    't_col':'列',\n    'more':'更多',\n    'pasteOpt':'粘贴选项',\n    'pasteSourceFormat':\"保留源格式\",\n    'tagFormat':'只保留标签',\n    'pasteTextFormat':'只保留文本',\n    'autoTypeSet':{\n        'mergeLine':\"合并空行\",\n        'delLine':\"清除空行\",\n        'removeFormat':\"清除格式\",\n        'indent':\"首行缩进\",\n        'alignment':\"对齐方式\",\n        'imageFloat':\"图片浮动\",\n        'removeFontsize':\"清除字号\",\n        'removeFontFamily':\"清除字体\",\n        'removeHtml':\"清除冗余HTML代码\",\n        'pasteFilter':\"粘贴过滤\",\n        'run':\"执行\",\n        'symbol':'符号转换',\n        'bdc2sb':'全角转半角',\n        'tobdc':'半角转全角'\n    },\n\n    'background':{\n        'static':{\n            'lang_background_normal':'背景设置',\n            'lang_background_local':'在线图片',\n            'lang_background_set':'选项',\n            'lang_background_none':'无背景色',\n            'lang_background_colored':'有背景色',\n            'lang_background_color':'颜色设置',\n            'lang_background_netimg':'网络图片',\n            'lang_background_align':'对齐方式',\n            'lang_background_position':'精确定位',\n            'repeatType':{'options':[\"居中\", \"横向重复\", \"纵向重复\", \"平铺\",\"自定义\"]}\n\n        },\n        'noUploadImage':\"当前未上传过任何图片！\",\n        'toggleSelect':\"单击可切换选中状态\\n原图尺寸: \"\n    },\n    //===============dialog i18N=======================\n    'insertimage':{\n        'static':{\n            'lang_tab_remote':\"插入图片\", //节点\n            'lang_tab_upload':\"本地上传\",\n            'lang_tab_online':\"在线管理\",\n            'lang_tab_search':\"图片搜索\",\n            'lang_input_url':\"地 址：\",\n            'lang_input_size':\"大 小：\",\n            'lang_input_width':\"宽度\",\n            'lang_input_height':\"高度\",\n            'lang_input_border':\"边 框：\",\n            'lang_input_vhspace':\"边 距：\",\n            'lang_input_title':\"描 述：\",\n            'lang_input_align':'图片浮动方式：',\n            'lang_imgLoading':\"　图片加载中……\",\n            'lang_start_upload':\"开始上传\",\n            'lock':{'title':\"锁定宽高比例\"}, //属性\n            'searchType':{'title':\"图片类型\", 'options':[\"新闻\", \"壁纸\", \"表情\", \"头像\"]}, //select的option\n            'searchTxt':{'value':\"请输入搜索关键词\"},\n            'searchBtn':{'value':\"百度一下\"},\n            'searchReset':{'value':\"清空搜索\"},\n            'noneAlign':{'title':'无浮动'},\n            'leftAlign':{'title':'左浮动'},\n            'rightAlign':{'title':'右浮动'},\n            'centerAlign':{'title':'居中独占一行'}\n        },\n        'uploadSelectFile':'点击选择图片',\n        'uploadAddFile':'继续添加',\n        'uploadStart':'开始上传',\n        'uploadPause':'暂停上传',\n        'uploadContinue':'继续上传',\n        'uploadRetry':'重试上传',\n        'uploadDelete':'删除',\n        'uploadTurnLeft':'向左旋转',\n        'uploadTurnRight':'向右旋转',\n        'uploadPreview':'预览中',\n        'uploadNoPreview':'不能预览',\n        'updateStatusReady': '选中_张图片，共_KB。',\n        'updateStatusConfirm': '已成功上传_张照片，_张照片上传失败',\n        'updateStatusFinish': '共_张（_KB），_张上传成功',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize':'文件大小超出',\n        'errorFileType':'文件格式不允许',\n        'errorInterrupt':'文件传输中断',\n        'errorUploadRetry':'上传失败，请重试',\n        'errorHttp':'http请求错误',\n        'errorServerUpload':'服务器返回出错',\n        'remoteLockError':\"宽高不正确,不能所定比例\",\n        'numError':\"请输入正确的长度或者宽度值！例如：123，400\",\n        'imageUrlError':\"不允许的图片格式或者图片域！\",\n        'imageLoadError':\"图片加载失败！请检查链接地址或网络状态！\",\n        'searchRemind':\"请输入搜索关键词\",\n        'searchLoading':\"图片加载中，请稍后……\",\n        'searchRetry':\" :( ，抱歉，没有找到图片！请重试一次！\"\n    },\n    'attachment':{\n        'static':{\n            'lang_tab_upload': '上传附件',\n            'lang_tab_online': '在线附件',\n            'lang_start_upload':\"开始上传\",\n            'lang_drop_remind':\"可以将文件拖到这里，单次最多可选100个文件\"\n        },\n        'uploadSelectFile':'点击选择文件',\n        'uploadAddFile':'继续添加',\n        'uploadStart':'开始上传',\n        'uploadPause':'暂停上传',\n        'uploadContinue':'继续上传',\n        'uploadRetry':'重试上传',\n        'uploadDelete':'删除',\n        'uploadTurnLeft':'向左旋转',\n        'uploadTurnRight':'向右旋转',\n        'uploadPreview':'预览中',\n        'updateStatusReady': '选中_个文件，共_KB。',\n        'updateStatusConfirm': '已成功上传_个文件，_个文件上传失败',\n        'updateStatusFinish': '共_个（_KB），_个上传成功',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize':'文件大小超出',\n        'errorFileType':'文件格式不允许',\n        'errorInterrupt':'文件传输中断',\n        'errorUploadRetry':'上传失败，请重试',\n        'errorHttp':'http请求错误',\n        'errorServerUpload':'服务器返回出错'\n    },\n    'insertvideo':{\n        'static':{\n            'lang_tab_insertV':\"插入视频\",\n            'lang_tab_searchV':\"搜索视频\",\n            'lang_tab_uploadV':\"上传视频\",\n            'lang_video_url':\"视频网址\",\n            'lang_video_size':\"视频尺寸\",\n            'lang_videoW':\"宽度\",\n            'lang_videoH':\"高度\",\n            'lang_alignment':\"对齐方式\",\n            'videoSearchTxt':{'value':\"请输入搜索关键字！\"},\n            'videoType':{'options':[\"全部\", \"热门\", \"娱乐\", \"搞笑\", \"体育\", \"科技\", \"综艺\"]},\n            'videoSearchBtn':{'value':\"百度一下\"},\n            'videoSearchReset':{'value':\"清空结果\"},\n\n            'lang_input_fileStatus':' 当前未上传文件',\n            'startUpload':{'style':\"background:url(upload.png) no-repeat;\"},\n\n            'lang_upload_size':\"视频尺寸\",\n            'lang_upload_width':\"宽度\",\n            'lang_upload_height':\"高度\",\n            'lang_upload_alignment':\"对齐方式\",\n            'lang_format_advice':\"建议使用mp4格式.\"\n\n        },\n        'numError':\"请输入正确的数值，如123,400\",\n        'floatLeft':\"左浮动\",\n        'floatRight':\"右浮动\",\n        '\"default\"':\"默认\",\n        'block':\"独占一行\",\n        'urlError':\"输入的视频地址有误，请检查后再试！\",\n        'loading':\" &nbsp;视频加载中，请等待……\",\n        'clickToSelect':\"点击选中\",\n        'goToSource':'访问源视频',\n        'noVideo':\" &nbsp; &nbsp;抱歉，找不到对应的视频，请重试！\",\n\n        'browseFiles':'浏览文件',\n        'uploadSuccess':'上传成功!',\n        'delSuccessFile':'从成功队列中移除',\n        'delFailSaveFile':'移除保存失败文件',\n        'statusPrompt':' 个文件已上传！ ',\n        'flashVersionError':'当前Flash版本过低，请更新FlashPlayer后重试！',\n        'flashLoadingError':'Flash加载失败!请检查路径或网络状态',\n        'fileUploadReady':'等待上传……',\n        'delUploadQueue':'从上传队列中移除',\n        'limitPrompt1':'单次不能选择超过',\n        'limitPrompt2':'个文件！请重新选择！',\n        'delFailFile':'移除失败文件',\n        'fileSizeLimit':'文件大小超出限制！',\n        'emptyFile':'空文件无法上传！',\n        'fileTypeError':'文件类型不允许！',\n        'unknownError':'未知错误！',\n        'fileUploading':'上传中，请等待……',\n        'cancelUpload':'取消上传',\n        'netError':'网络错误',\n        'failUpload':'上传失败!',\n        'serverIOError':'服务器IO错误！',\n        'noAuthority':'无权限！',\n        'fileNumLimit':'上传个数限制',\n        'failCheck':'验证失败，本次上传被跳过！',\n        'fileCanceling':'取消中，请等待……',\n        'stopUploading':'上传已停止……',\n\n        'uploadSelectFile':'点击选择文件',\n        'uploadAddFile':'继续添加',\n        'uploadStart':'开始上传',\n        'uploadPause':'暂停上传',\n        'uploadContinue':'继续上传',\n        'uploadRetry':'重试上传',\n        'uploadDelete':'删除',\n        'uploadTurnLeft':'向左旋转',\n        'uploadTurnRight':'向右旋转',\n        'uploadPreview':'预览中',\n        'updateStatusReady': '选中_个文件，共_KB。',\n        'updateStatusConfirm': '成功上传_个，_个失败',\n        'updateStatusFinish': '共_个(_KB)，_个成功上传',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize':'文件大小超出',\n        'errorFileType':'文件格式不允许',\n        'errorInterrupt':'文件传输中断',\n        'errorUploadRetry':'上传失败，请重试',\n        'errorHttp':'http请求错误',\n        'errorServerUpload':'服务器返回出错'\n    },\n    'webapp':{\n        'tip1':\"本功能由百度APP提供，如看到此页面，请各位站长首先申请百度APPKey!\",\n        'tip2':\"申请完成之后请至ueditor.config.js中配置获得的appkey! \",\n        'applyFor':\"点此申请\",\n        'anthorApi':\"百度API\"\n    },\n    'template':{\n        'static':{\n            'lang_template_bkcolor':'背景颜色',\n            'lang_template_clear' : '保留原有内容',\n            'lang_template_select' : '选择模板'\n        },\n        'blank':\"空白文档\",\n        'blog':\"博客文章\",\n        'resume':\"个人简历\",\n        'richText':\"图文混排\",\n        'sciPapers':\"科技论文\"\n\n\n    },\n    'scrawl':{\n        'static':{\n            'lang_input_previousStep':\"上一步\",\n            'lang_input_nextsStep':\"下一步\",\n            'lang_input_clear':'清空',\n            'lang_input_addPic':'添加背景',\n            'lang_input_ScalePic':'缩放背景',\n            'lang_input_removePic':'删除背景',\n            'J_imgTxt':{title:'添加背景图片'}\n        },\n        'noScarwl':\"尚未作画，白纸一张~\",\n        'scrawlUpLoading':\"涂鸦上传中,别急哦~\",\n        'continueBtn':\"继续\",\n        'imageError':\"糟糕，图片读取失败了！\",\n        'backgroundUploading':'背景图片上传中,别急哦~'\n    },\n    'music':{\n        'static':{\n            'lang_input_tips':\"输入歌手/歌曲/专辑，搜索您感兴趣的音乐！\",\n            'J_searchBtn':{value:'搜索歌曲'}\n        },\n        'emptyTxt':'未搜索到相关音乐结果，请换一个关键词试试。',\n        'chapter':'歌曲',\n        'singer':'歌手',\n        'special':'专辑',\n        'listenTest':'试听'\n    },\n    'anchor':{\n        'static':{\n            'lang_input_anchorName':'锚点名字：'\n        }\n    },\n    'charts':{\n        'static':{\n            'lang_data_source':'数据源：',\n            'lang_chart_format': '图表格式：',\n            'lang_data_align': '数据对齐方式',\n            'lang_chart_align_same': '数据源与图表X轴Y轴一致',\n            'lang_chart_align_reverse': '数据源与图表X轴Y轴相反',\n            'lang_chart_title': '图表标题',\n            'lang_chart_main_title': '主标题：',\n            'lang_chart_sub_title': '子标题：',\n            'lang_chart_x_title': 'X轴标题：',\n            'lang_chart_y_title': 'Y轴标题：',\n            'lang_chart_tip': '提示文字',\n            'lang_cahrt_tip_prefix': '提示文字前缀：',\n            'lang_cahrt_tip_description': '仅饼图有效， 当鼠标移动到饼图中相应的块上时，提示框内的文字的前缀',\n            'lang_chart_data_unit': '数据单位',\n            'lang_chart_data_unit_title': '单位：',\n            'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位， 比如： 温度的单位 ℃',\n            'lang_chart_type': '图表类型：',\n            'lang_prev_btn': '上一个',\n            'lang_next_btn': '下一个'\n        }\n    },\n    'emotion':{\n        'static':{\n            'lang_input_choice':'精选',\n            'lang_input_Tuzki':'兔斯基',\n            'lang_input_BOBO':'BOBO',\n            'lang_input_lvdouwa':'绿豆蛙',\n            'lang_input_babyCat':'baby猫',\n            'lang_input_bubble':'泡泡',\n            'lang_input_youa':'有啊'\n        }\n    },\n    'gmap':{\n        'static':{\n            'lang_input_address':'地址',\n            'lang_input_search':'搜索',\n            'address':{value:\"北京\"}\n        },\n        searchError:'无法定位到该地址!'\n    },\n    'help':{\n        'static':{\n            'lang_input_about':'关于UEditor',\n            'lang_input_shortcuts':'快捷键',\n            'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器，具有轻量，可定制，注重用户体验等特点。开源基于BSD协议，允许自由使用和修改代码。',\n            'lang_Txt_shortcuts':'快捷键',\n            'lang_Txt_func':'功能',\n            'lang_Txt_bold':'给选中字设置为加粗',\n            'lang_Txt_copy':'复制选中内容',\n            'lang_Txt_cut':'剪切选中内容',\n            'lang_Txt_Paste':'粘贴',\n            'lang_Txt_undo':'重新执行上次操作',\n            'lang_Txt_redo':'撤销上一次操作',\n            'lang_Txt_italic':'给选中字设置为斜体',\n            'lang_Txt_underline':'给选中字加下划线',\n            'lang_Txt_selectAll':'全部选中',\n            'lang_Txt_visualEnter':'软回车',\n            'lang_Txt_fullscreen':'全屏'\n        }\n    },\n    'insertframe':{\n        'static':{\n            'lang_input_address':'地址：',\n            'lang_input_width':'宽度：',\n            'lang_input_height':'高度：',\n            'lang_input_isScroll':'允许滚动条：',\n            'lang_input_frameborder':'显示框架边框：',\n            'lang_input_alignMode':'对齐方式：',\n            'align':{title:\"对齐方式\", options:[\"默认\", \"左对齐\", \"右对齐\", \"居中\"]}\n        },\n        'enterAddress':'请输入地址!'\n    },\n    'link':{\n        'static':{\n            'lang_input_text':'文本内容：',\n            'lang_input_url':'链接地址：',\n            'lang_input_title':'标题：',\n            'lang_input_target':'是否在新窗口打开：'\n        },\n        'validLink':'只支持选中一个链接时生效',\n        'httpPrompt':'您输入的超链接中不包含http等协议名称，默认将为您添加http://前缀'\n    },\n    'map':{\n        'static':{\n            lang_city:\"城市\",\n            lang_address:\"地址\",\n            city:{value:\"北京\"},\n            lang_search:\"搜索\",\n            lang_dynamicmap:\"插入动态地图\"\n        },\n        cityMsg:\"请选择城市\",\n        errorMsg:\"抱歉，找不到该位置！\"\n    },\n    'searchreplace':{\n        'static':{\n            lang_tab_search:\"查找\",\n            lang_tab_replace:\"替换\",\n            lang_search1:\"查找\",\n            lang_search2:\"查找\",\n            lang_replace:\"替换\",\n            lang_searchReg:'支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”',\n            lang_searchReg1:'支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”',\n            lang_case_sensitive1:\"区分大小写\",\n            lang_case_sensitive2:\"区分大小写\",\n            nextFindBtn:{value:\"下一个\"},\n            preFindBtn:{value:\"上一个\"},\n            nextReplaceBtn:{value:\"下一个\"},\n            preReplaceBtn:{value:\"上一个\"},\n            repalceBtn:{value:\"替换\"},\n            repalceAllBtn:{value:\"全部替换\"}\n        },\n        getEnd:\"已经搜索到文章末尾！\",\n        getStart:\"已经搜索到文章头部\",\n        countMsg:\"总共替换了{#count}处！\"\n    },\n    'snapscreen':{\n        'static':{\n            lang_showMsg:\"截图功能需要首先安装UEditor截图插件！ \",\n            lang_download:\"点此下载\",\n            lang_step1:\"第一步，下载UEditor截图插件并运行安装。\",\n            lang_step2:\"第二步，插件安装完成后即可使用，如不生效，请重启浏览器后再试！\"\n        }\n    },\n    'spechars':{\n        'static':{},\n        tsfh:\"特殊字符\",\n        lmsz:\"罗马字符\",\n        szfh:\"数学字符\",\n        rwfh:\"日文字符\",\n        xlzm:\"希腊字母\",\n        ewzm:\"俄文字符\",\n        pyzm:\"拼音字母\",\n        yyyb:\"英语音标\",\n        zyzf:\"其他\"\n    },\n    'edittable':{\n        'static':{\n            'lang_tableStyle':'表格样式',\n            'lang_insertCaption':'添加表格名称行',\n            'lang_insertTitle':'添加表格标题行',\n            'lang_insertTitleCol':'添加表格标题列',\n            'lang_orderbycontent':\"使表格内容可排序\",\n            'lang_tableSize':'自动调整表格尺寸',\n            'lang_autoSizeContent':'按表格文字自适应',\n            'lang_autoSizePage':'按页面宽度自适应',\n            'lang_example':'示例',\n            'lang_borderStyle':'表格边框',\n            'lang_color':'颜色:'\n        },\n        captionName:'表格名称',\n        titleName:'标题',\n        cellsName:'内容',\n        errorMsg:'有合并单元格，不可排序'\n    },\n    'edittip':{\n        'static':{\n            lang_delRow:'删除整行',\n            lang_delCol:'删除整列'\n        }\n    },\n    'edittd':{\n        'static':{\n            lang_tdBkColor:'背景颜色:'\n        }\n    },\n    'formula':{\n        'static':{\n        }\n    },\n    'wordimage':{\n        'static':{\n            lang_resave:\"转存步骤\",\n            uploadBtn:{src:\"upload.png\",alt:\"上传\"},\n            clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},\n            lang_step:\"1、点击顶部复制按钮，将地址复制到剪贴板；2、点击添加照片按钮，在弹出的对话框中使用Ctrl+V粘贴地址；3、点击打开后选择图片上传流程。\"\n        },\n        'fileType':\"图片\",\n        'flashError':\"FLASH初始化失败，请检查FLASH插件是否正确安装！\",\n        'netError':\"网络连接错误，请重试！\",\n        'copySuccess':\"图片地址已经复制！\",\n        'flashI18n':{} //留空默认中文\n    },\n    'autosave': {\n        'saving':'保存中...',\n        'success':'本地保存成功'\n    }\n};\n"
  },
  {
    "path": "api/static/libs/js/UEditor/themes/default/css/ueditor.css",
    "content": "/*基础UI构建\n*/\n/* common layer */\n.edui-default .edui-box {\n    border: none;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n}\n\n.edui-default a.edui-box {\n    display: block;\n    text-decoration: none;\n    color: black;\n}\n\n.edui-default a.edui-box:hover {\n    text-decoration: none;\n}\n\n.edui-default a.edui-box:active {\n    text-decoration: none;\n}\n\n.edui-default table.edui-box {\n    border-collapse: collapse;\n}\n\n.edui-default ul.edui-box {\n    list-style-type: none;\n}\n\ndiv.edui-box {\n    position: relative;\n    display: -moz-inline-box !important;\n    display: inline-block !important;\n    vertical-align: top;\n}\n\n.edui-default .edui-clearfix {\n    zoom: 1\n}\n\n.edui-default .edui-clearfix:after {\n    content: '\\20';\n    display: block;\n    clear: both;\n}\n\n * html div.edui-box {\n    display: inline !important;\n}\n\n*:first-child+html div.edui-box {\n    display: inline !important;\n}\n\n/* control layout */\n.edui-default .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body {\n    position: relative;\n}\n\n.edui-default .edui-popup {\n    position: absolute;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n}\n\n.edui-default .edui-popup .edui-shadow {\n    position: absolute;\n    z-index: -1;\n}\n\n.edui-default .edui-popup .edui-bordereraser {\n    position: absolute;\n    overflow: hidden;\n}\n\n.edui-default .edui-tablepicker .edui-canvas {\n    position: relative;\n}\n\n.edui-default .edui-tablepicker .edui-canvas .edui-overlay {\n    position: absolute;\n}\n\n.edui-default .edui-dialog-modalmask, .edui-dialog-dragmask {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.edui-default .edui-toolbar {\n    position: relative;\n}\n\n/*\n * default theme\n */\n.edui-default .edui-label {\n    cursor: default;\n}\n\n.edui-default span.edui-clickable {\n    color: blue;\n    cursor: pointer;\n    text-decoration: underline;\n}\n\n.edui-default span.edui-unclickable {\n    color: gray;\n    cursor: default;\n}\n/* 工具栏 */\n.edui-default .edui-toolbar {\n    cursor: default;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    padding: 1px;\n    overflow: hidden; /*全屏下单独一行不占位*/\n    zoom: 1;\n    width:auto;\n    height:auto;\n}\n\n.edui-default .edui-toolbar .edui-button,\n.edui-default .edui-toolbar .edui-splitbutton,\n.edui-default .edui-toolbar .edui-menubutton,\n.edui-default .edui-toolbar .edui-combox {\n    margin: 1px;\n}\n/*UI工具栏、编辑区域、底部*/\n.edui-default .edui-editor {\n    border: 1px solid #d4d4d4;\n    background-color: white;\n    position: relative;\n    overflow: visible;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n.edui-editor div{\n    width:auto;\n    height:auto;\n}\n.edui-default .edui-editor-toolbarbox {\n    position: relative;\n    zoom: 1;\n    -webkit-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);\n    -moz-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);\n    box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);\n    border-top-left-radius:2px;\n    border-top-right-radius:2px;\n}\n\n.edui-default .edui-editor-toolbarboxouter {\n    border-bottom: 1px solid #d4d4d4;\n    background-color: #fafafa;\n    background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);\n    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));\n    background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);\n    background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);\n    background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);\n    background-repeat: repeat-x;\n    /*border: 1px solid #d4d4d4;*/\n    -webkit-border-radius: 4px 4px 0 0;\n    -moz-border-radius: 4px 4px 0 0;\n    border-radius: 4px 4px 0 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);\n    *zoom: 1;\n    -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);\n    -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);\n    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);\n}\n\n.edui-default .edui-editor-toolbarboxinner {\n    padding: 2px;\n}\n\n.edui-default .edui-editor-iframeholder {\n    position: relative;\n    /*for fix ie6 toolbarmsg under iframe bug. relative -> static */\n    /*_position: static !important;*\n}\n\n.edui-default .edui-editor-iframeholder textarea {\n    font-family: consolas, \"Courier New\", \"lucida console\", monospace;\n    font-size: 12px;\n    line-height: 18px;\n}\n\n.edui-default .edui-editor-bottombar {\n    /*border-top: 1px solid #ccc;*/\n    /*height: 20px;*/\n    /*width: 40%;*/\n    /*float: left;*/\n    /*overflow: hidden;*/\n}\n\n.edui-default .edui-editor-bottomContainer {\n    overflow: hidden;\n}\n\n.edui-default .edui-editor-bottomContainer table {\n    width: 100%;\n    height: 0;\n    overflow: hidden;\n    border-spacing: 0;\n}\n\n.edui-default .edui-editor-bottomContainer td {\n    white-space: nowrap;\n    border-top: 1px solid #ccc;\n    line-height: 20px;\n    font-size: 12px;\n    font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif;\n}\n\n.edui-default .edui-editor-wordcount {\n    text-align: right;\n    margin-right: 5px;\n    color: #aaa;\n}\n.edui-default .edui-editor-scale {\n    width: 12px;\n}\n.edui-default .edui-editor-scale .edui-editor-icon {\n    float: right;\n    width: 100%;\n    height: 12px;\n    margin-top: 10px;\n    background: url(../images/scale.png) no-repeat;\n    cursor: se-resize;\n}\n.edui-default .edui-editor-breadcrumb {\n    margin: 2px 0 0 3px;\n}\n\n.edui-default .edui-editor-breadcrumb span {\n    cursor: pointer;\n    text-decoration: underline;\n    color: blue;\n}\n\n.edui-default .edui-toolbar .edui-for-fullscreen {\n    float: right;\n}\n\n.edui-default .edui-bubble .edui-popup-content {\n    border: 1px solid #DCAC6C;\n    background-color: #fff6d9;\n    padding: 5px;\n    font-size: 10pt;\n    font-family: \"宋体\";\n}\n\n.edui-default .edui-bubble .edui-shadow {\n    /*box-shadow: 1px 1px 3px #818181;*/\n    /*-webkit-box-shadow: 2px 2px 3px #818181;*/\n    /*-moz-box-shadow: 2px 2px 3px #818181;*/\n    /*filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '2', MakeShadow = 'true', ShadowOpacity = '0.5');*/\n}\n\n.edui-default .edui-editor-toolbarmsg {\n    background-color: #FFF6D9;\n    border-bottom: 1px solid #ccc;\n    position: absolute;\n    bottom: -25px;\n    left: 0;\n    z-index: 1009;\n    width: 99.9%;\n}\n\n.edui-default .edui-editor-toolbarmsg-upload {\n    font-size: 14px;\n    color: blue;\n    width: 100px;\n    height: 16px;\n    line-height: 16px;\n    cursor: pointer;\n    position: absolute;\n    top: 5px;\n    left: 350px;\n}\n\n.edui-default .edui-editor-toolbarmsg-label {\n    font-size: 12px;\n    line-height: 16px;\n    padding: 4px;\n}\n\n.edui-default .edui-editor-toolbarmsg-close {\n    float: right;\n    width: 20px;\n    height: 16px;\n    line-height: 16px;\n    cursor: pointer;\n    color: red;\n}\n/*可选中菜单按钮*/\n.edui-default .edui-list .edui-bordereraser {\n    display: none;\n}\n\n.edui-default .edui-listitem {\n    padding: 1px;\n    white-space: nowrap;\n}\n\n.edui-default .edui-list .edui-state-hover {\n    position: relative;\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n    padding: 0;\n}\n\n.edui-default .edui-for-fontfamily .edui-listitem-label {\n    min-width: 130px;\n    _width: 120px;\n    font-size: 12px;\n    height: 22px;\n    line-height: 22px;\n    padding-left: 5px;\n}\n.edui-default .edui-for-insertcode .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    font-size: 12px;\n    height: 22px;\n    line-height: 22px;\n    padding-left: 5px;\n}\n.edui-default .edui-for-underline .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    padding: 3px 5px;\n    font-size: 12px;\n}\n\n.edui-default .edui-for-fontsize .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    padding: 3px 5px;\n\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label {\n    min-width: 200px;\n    _width: 200px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-rowspacingtop .edui-listitem-label,\n.edui-default .edui-for-rowspacingbottom .edui-listitem-label {\n    min-width: 53px;\n    _width: 53px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-lineheight .edui-listitem-label {\n    min-width: 53px;\n    _width: 53px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-customstyle .edui-listitem-label {\n    min-width: 200px;\n    _width: 200px;\n    width: 200px !important;\n    padding: 2px 5px;\n}\n/* 可选中按钮弹出菜单*/\n.edui-default .edui-menu {\n    z-index: 3000;\n}\n\n.edui-default .edui-menu .edui-popup-content {\n    padding: 3px;\n}\n\n.edui-default .edui-menu-body {\n    _width: 150px;\n    min-width: 170px;\n    background: url(\"../images/sparator_v.png\") repeat-y 25px;\n}\n\n.edui-default .edui-menuitem-body {\n}\n\n.edui-default .edui-menuitem {\n    height: 20px;\n    cursor: default;\n    vertical-align: top;\n}\n\n.edui-default .edui-menuitem .edui-icon {\n    width: 20px !important;\n    height: 20px !important;\n    background: url(../images/icons.png) 0 -4000px;\n    background: url(../images/icons.gif) 0 -4000px\\9;\n}\n\n.edui-default .edui-menuitem .edui-label {\n    font-size: 12px;\n    line-height: 20px;\n    height: 20px;\n    padding-left: 10px;\n}\n\n.edui-default .edui-state-checked .edui-menuitem-body {\n    background: url(\"../images/icons-all.gif\") no-repeat 6px -205px;\n}\n\n.edui-default .edui-state-disabled .edui-menuitem-label {\n    color: gray;\n}\n\n\n/*不可选中菜单按钮 */\n.edui-default .edui-toolbar .edui-combox-body .edui-button-body {\n    width: 60px;\n    font-size: 12px;\n    height: 20px;\n    line-height: 20px;\n    padding-left: 5px;\n    white-space: nowrap;\n    margin: 0 3px 0 0;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-arrow {\n    background: url(../images/icons.png) -741px 0;\n    _background: url(../images/icons.gif) -741px 0;\n    height: 20px;\n    width: 9px;\n}\n\n.edui-default .edui-toolbar .edui-combox .edui-combox-body {\n    border: 1px solid #CCC;\n    background-color: white;\n    border-radius: 2px;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-splitborder {\n    display: none;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-arrow {\n    border-left: 1px solid #CCC;\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-combox-body {\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow {\n    border-left: 1px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-state-checked .edui-combox-body {\n    background-color: #FFE69F;\n    border: 1px solid #DCAC6C;\n}\n\n.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow {\n    border-left: 1px solid #DCAC6C;\n}\n\n.edui-toolbar .edui-state-disabled .edui-combox-body {\n    background-color: #F0F0EE;\n    opacity: 0.3;\n    filter: alpha(opacity = 30);\n}\n\n.edui-toolbar .edui-state-opened .edui-combox-body {\n    background-color: white;\n    border: 1px solid gray;\n}\n/*普通按钮样式及状态*/\n.edui-default .edui-toolbar .edui-button .edui-icon,\n.edui-default .edui-toolbar .edui-menubutton .edui-icon,\n.edui-default .edui-toolbar .edui-splitbutton .edui-icon {\n    height: 20px !important;\n    width: 20px !important;\n    background-image: url(../images/icons.png);\n    background-image: url(../images/icons.gif) \\9;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-button-wrap {\n    padding: 1px;\n    position: relative;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap {\n    background-color: #fff5d4;\n    padding: 0;\n    border: 1px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap {\n    background-color: #ffe69f;\n    padding: 0;\n    border: 1px solid #dcac6c;\n    border-radius: 2px;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap {\n    background-color: #ffffff;\n    padding: 0;\n    border: 1px solid gray;\n}\n.edui-default .edui-toolbar .edui-state-disabled .edui-label {\n    color: #ccc;\n}\n.edui-default .edui-toolbar .edui-state-disabled .edui-icon {\n    opacity: 0.3;\n    filter: alpha(opacity = 30);\n}\n\n/* toolbar icons */\n.edui-default .edui-for-undo .edui-icon {\n    background-position: -160px 0;\n}\n\n.edui-default  .edui-for-redo .edui-icon {\n    background-position: -100px 0;\n}\n\n.edui-default  .edui-for-bold .edui-icon {\n    background-position: 0 0;\n}\n\n.edui-default  .edui-for-italic .edui-icon {\n    background-position: -60px 0;\n}\n\n.edui-default  .edui-for-fontborder .edui-icon {\n    background-position:-160px -40px;\n}\n.edui-default  .edui-for-underline .edui-icon {\n    background-position: -140px 0;\n}\n\n.edui-default  .edui-for-strikethrough .edui-icon {\n    background-position: -120px 0;\n}\n\n.edui-default  .edui-for-subscript .edui-icon {\n    background-position: -600px 0;\n}\n\n.edui-default  .edui-for-superscript .edui-icon {\n    background-position: -620px 0;\n}\n\n.edui-default  .edui-for-blockquote .edui-icon {\n    background-position: -220px 0;\n}\n\n.edui-default  .edui-for-forecolor .edui-icon {\n    background-position: -720px 0;\n}\n\n.edui-default  .edui-for-backcolor .edui-icon {\n    background-position: -760px 0;\n}\n\n.edui-default  .edui-for-inserttable .edui-icon {\n    background-position: -580px -20px;\n}\n\n.edui-default  .edui-for-autotypeset .edui-icon {\n    background-position: -640px -40px;\n}\n\n.edui-default  .edui-for-justifyleft .edui-icon {\n    background-position: -460px 0;\n}\n\n.edui-default  .edui-for-justifycenter .edui-icon {\n    background-position: -420px 0;\n}\n\n.edui-default  .edui-for-justifyright .edui-icon {\n    background-position: -480px 0;\n}\n\n.edui-default  .edui-for-justifyjustify .edui-icon {\n    background-position: -440px 0;\n}\n\n.edui-default  .edui-for-insertorderedlist .edui-icon {\n    background-position: -80px 0;\n}\n\n.edui-default  .edui-for-insertunorderedlist .edui-icon {\n    background-position: -20px 0;\n}\n\n.edui-default  .edui-for-lineheight .edui-icon {\n    background-position: -725px -40px;\n}\n\n.edui-default  .edui-for-rowspacingbottom .edui-icon {\n    background-position: -745px -40px;\n}\n\n.edui-default  .edui-for-rowspacingtop .edui-icon {\n    background-position: -765px -40px;\n}\n\n.edui-default  .edui-for-horizontal .edui-icon {\n    background-position: -360px 0;\n}\n\n.edui-default  .edui-for-link .edui-icon {\n    background-position: -500px 0;\n}\n\n.edui-default  .edui-for-code .edui-icon {\n    background-position: -440px -40px;\n}\n\n.edui-default  .edui-for-insertimage .edui-icon {\n    background-position: -726px -77px;\n}\n\n.edui-default  .edui-for-insertframe .edui-icon {\n    background-position: -240px -40px;\n}\n\n.edui-default  .edui-for-emoticon .edui-icon {\n    background-position: -60px -20px;\n}\n\n.edui-default  .edui-for-spechars .edui-icon {\n    background-position: -240px 0;\n}\n\n.edui-default  .edui-for-help .edui-icon {\n    background-position: -340px 0;\n}\n\n.edui-default  .edui-for-print .edui-icon {\n    background-position: -440px -20px;\n}\n\n.edui-default  .edui-for-preview .edui-icon {\n    background-position: -420px -20px;\n}\n\n.edui-default  .edui-for-selectall .edui-icon {\n    background-position: -400px -20px;\n}\n\n.edui-default  .edui-for-searchreplace .edui-icon {\n    background-position: -520px -20px;\n}\n\n.edui-default  .edui-for-map .edui-icon {\n    background-position: -40px -40px;\n}\n\n.edui-default  .edui-for-gmap .edui-icon {\n    background-position: -260px -40px;\n}\n\n.edui-default  .edui-for-insertvideo .edui-icon {\n    background-position: -320px -20px;\n}\n\n.edui-default  .edui-for-time .edui-icon {\n    background-position: -160px -20px;\n}\n\n.edui-default  .edui-for-date .edui-icon {\n    background-position: -140px -20px;\n}\n\n.edui-default  .edui-for-cut .edui-icon {\n    background-position: -680px 0;\n}\n\n.edui-default  .edui-for-copy .edui-icon {\n    background-position: -700px 0;\n}\n\n.edui-default  .edui-for-paste .edui-icon {\n    background-position: -560px 0;\n}\n\n.edui-default  .edui-for-formatmatch .edui-icon {\n    background-position: -40px 0;\n}\n\n.edui-default  .edui-for-pasteplain .edui-icon {\n    background-position: -360px -20px;\n}\n\n.edui-default  .edui-for-directionalityltr .edui-icon {\n    background-position: -20px -20px;\n}\n\n.edui-default  .edui-for-directionalityrtl .edui-icon {\n    background-position: -40px -20px;\n}\n\n.edui-default  .edui-for-source .edui-icon {\n    background-position: -261px -0px;\n}\n\n.edui-default  .edui-for-removeformat .edui-icon {\n    background-position: -580px 0;\n}\n\n.edui-default  .edui-for-unlink .edui-icon {\n    background-position: -640px 0;\n}\n\n.edui-default  .edui-for-touppercase .edui-icon {\n    background-position: -786px 0;\n}\n\n.edui-default  .edui-for-tolowercase .edui-icon {\n    background-position: -806px 0;\n}\n\n.edui-default  .edui-for-insertrow .edui-icon {\n    background-position: -478px -76px;\n}\n\n.edui-default  .edui-for-insertrownext .edui-icon {\n    background-position: -498px -76px;\n}\n\n.edui-default  .edui-for-insertcol .edui-icon {\n    background-position: -455px -76px;\n}\n\n.edui-default  .edui-for-insertcolnext  .edui-icon {\n    background-position: -429px -76px;\n}\n\n.edui-default  .edui-for-mergeright .edui-icon {\n    background-position: -60px -40px;\n}\n\n.edui-default  .edui-for-mergedown .edui-icon {\n    background-position: -80px -40px;\n}\n\n.edui-default  .edui-for-splittorows .edui-icon {\n    background-position: -100px -40px;\n}\n\n.edui-default  .edui-for-splittocols .edui-icon {\n    background-position: -120px -40px;\n}\n\n.edui-default  .edui-for-insertparagraphbeforetable .edui-icon {\n    background-position: -140px -40px;\n}\n\n.edui-default  .edui-for-deleterow .edui-icon {\n    background-position: -660px -20px;\n}\n\n.edui-default  .edui-for-deletecol .edui-icon {\n    background-position: -640px -20px;\n}\n\n.edui-default  .edui-for-splittocells .edui-icon {\n    background-position: -800px -20px;\n}\n\n.edui-default  .edui-for-mergecells .edui-icon {\n    background-position: -760px -20px;\n}\n\n.edui-default  .edui-for-deletetable .edui-icon {\n    background-position: -620px -20px;\n}\n\n.edui-default  .edui-for-cleardoc .edui-icon {\n    background-position: -520px 0;\n}\n\n.edui-default  .edui-for-fullscreen .edui-icon {\n    background-position: -100px -20px;\n}\n\n.edui-default  .edui-for-anchor .edui-icon {\n    background-position: -200px 0;\n}\n\n.edui-default  .edui-for-pagebreak .edui-icon {\n    background-position: -460px -40px;\n}\n\n.edui-default  .edui-for-imagenone .edui-icon {\n    background-position: -480px -40px;\n}\n\n.edui-default  .edui-for-imageleft .edui-icon {\n    background-position: -500px -40px;\n}\n\n.edui-default  .edui-for-wordimage .edui-icon {\n    background-position: -660px -40px;\n}\n\n.edui-default  .edui-for-imageright .edui-icon {\n    background-position: -520px -40px;\n}\n\n.edui-default  .edui-for-imagecenter .edui-icon {\n    background-position: -540px -40px;\n}\n\n.edui-default  .edui-for-indent .edui-icon {\n    background-position: -400px 0;\n}\n\n.edui-default  .edui-for-outdent .edui-icon {\n    background-position: -540px 0;\n}\n\n.edui-default  .edui-for-webapp .edui-icon {\n    background-position: -601px -40px\n}\n\n.edui-default  .edui-for-table .edui-icon {\n    background-position: -580px -20px;\n}\n\n.edui-default  .edui-for-edittable .edui-icon {\n    background-position: -420px -40px;\n}\n\n.edui-default  .edui-for-template .edui-icon {\n    background-position: -339px -40px;\n}\n\n.edui-default  .edui-for-delete .edui-icon {\n    background-position: -360px -40px;\n}\n\n.edui-default  .edui-for-attachment .edui-icon {\n    background-position: -620px -40px;\n}\n\n.edui-default  .edui-for-edittd .edui-icon {\n    background-position: -700px -40px;\n}\n\n.edui-default  .edui-for-snapscreen .edui-icon {\n    background-position: -581px -40px\n}\n\n.edui-default  .edui-for-scrawl .edui-icon {\n    background-position: -801px -41px\n}\n\n.edui-default  .edui-for-background .edui-icon {\n    background-position: -680px -40px;\n}\n\n.edui-default  .edui-for-music .edui-icon {\n    background-position: -18px -40px\n}\n\n.edui-default  .edui-for-formula .edui-icon {\n    background-position: -200px -40px\n}\n\n.edui-default  .edui-for-aligntd  .edui-icon {\n    background-position: -236px -76px;\n}\n\n.edui-default  .edui-for-insertparagraphtrue  .edui-icon {\n    background-position: -625px -76px;\n}\n\n.edui-default  .edui-for-insertparagraph  .edui-icon {\n    background-position: -602px -76px;\n}\n\n.edui-default  .edui-for-insertcaption  .edui-icon {\n    background-position: -336px -76px;\n}\n\n.edui-default  .edui-for-deletecaption  .edui-icon {\n    background-position: -362px -76px;\n}\n\n.edui-default  .edui-for-inserttitle  .edui-icon {\n    background-position: -286px -76px;\n}\n\n.edui-default  .edui-for-deletetitle  .edui-icon {\n    background-position: -311px -76px;\n}\n\n.edui-default  .edui-for-aligntable  .edui-icon {\n    background-position: -440px 0;\n}\n\n.edui-default  .edui-for-tablealignment-left  .edui-icon {\n    background-position: -460px 0;\n}\n\n.edui-default  .edui-for-tablealignment-center  .edui-icon {\n    background-position: -420px 0;\n}\n\n.edui-default  .edui-for-tablealignment-right  .edui-icon {\n    background-position: -480px 0;\n}\n\n.edui-default  .edui-for-drafts  .edui-icon {\n    background-position: -560px 0;\n}\n\n.edui-default  .edui-for-charts  .edui-icon {\n    background: url(../images/charts.png) no-repeat 2px 3px!important;\n}\n\n.edui-default  .edui-for-inserttitlecol  .edui-icon {\n    background-position: -673px -76px;\n}\n\n.edui-default  .edui-for-deletetitlecol  .edui-icon {\n    background-position: -698px -76px;\n}\n\n.edui-default  .edui-for-simpleupload  .edui-icon {\n    background-position: -380px 0px;\n}\n\n/*splitbutton*/\n.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,\n.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow {\n    background: url(../images/icons.png) -741px 0;\n    _background: url(../images/icons.gif) -741px 0;\n    height: 20px;\n    width: 9px;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body {\n    padding: 1px;\n}\n\n.edui-default .edui-toolbar .edui-splitborder {\n    width: 1px;\n    height: 20px;\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-splitborder {\n    width: 1px;\n    border-left: 0px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-state-active .edui-splitborder {\n    width: 0;\n    border-left: 1px solid gray;\n}\n\n.edui-default .edui-toolbar .edui-state-opened .edui-splitborder {\n    width: 1px;\n    border: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body {\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n    padding: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body {\n    background-color: #FFE69F;\n    border: 1px solid #DCAC6C;\n    padding: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body {\n    background-color: #ffffff;\n    border: 1px solid gray;\n    padding: 0;\n}\n\n.edui-default .edui-state-disabled .edui-arrow {\n    opacity: 0.3;\n    _filter: alpha(opacity = 30);\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body {\n    background-color: white;\n    border: 1px solid gray;\n    padding: 0;\n}\n\n.edui-default .edui-for-insertorderedlist .edui-bordereraser,\n.edui-default .edui-for-lineheight .edui-bordereraser,\n.edui-default .edui-for-rowspacingtop .edui-bordereraser,\n.edui-default .edui-for-rowspacingbottom .edui-bordereraser,\n.edui-default .edui-for-insertunorderedlist .edui-bordereraser {\n    background-color: white;\n}\n\n/* 解决嵌套导致的图标问题 */\n.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,\n.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,\n.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,\n.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,\n.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon {\n    /*background-position: 0 -40px;*/\n    background-image: none  ;\n}\n\n/* 弹出菜单 */\n.edui-default .edui-popup {\n    z-index: 3000;\n    background-color: #ffffff;\n    width:auto;\n    height:auto;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n}\n\n.edui-default .edui-popup .edui-shadow {\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.edui-default .edui-popup-content {\n    border:1px solid #ccc;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    *border-right-width: 2px;\n    *border-bottom-width: 2px;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n    -webkit-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);\n    -moz-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);\n    -webkit-background-clip: padding-box;\n    -moz-background-clip: padding;\n    background-clip: padding-box;\n    padding: 5px;\n    background:#ffffff;\n}\n\n.edui-default .edui-popup .edui-bordereraser {\n    background-color: white;\n    height: 3px;\n}\n\n.edui-default .edui-menu .edui-bordereraser {\n    height: 3px;\n}\n\n.edui-default .edui-anchor-topleft .edui-bordereraser {\n    left: 1px;\n    top: -2px;\n}\n\n.edui-default .edui-anchor-topright .edui-bordereraser {\n    right: 1px;\n    top: -2px;\n}\n\n.edui-default .edui-anchor-bottomleft .edui-bordereraser {\n    left: 0;\n    bottom: -6px;\n    height: 7px;\n    border-left: 1px solid gray;\n    border-right: 1px solid gray;\n}\n\n.edui-default .edui-anchor-bottomright .edui-bordereraser {\n    right: 0;\n    bottom: -6px;\n    height: 7px;\n    border-left: 1px solid gray;\n    border-right: 1px solid gray;\n}\n\n.edui-popup div{\n    width:auto;\n    height:auto;\n}\n.edui-default .edui-editor-messageholder {\n    display: block;\n    width: 150px;\n    height: auto;\n    border: 0;\n    margin: 0;\n    padding: 0;\n    position: absolute;\n    top: 28px;\n    right: 3px;\n}\n\n.edui-default .edui-message{\n    min-height: 10px;\n    text-shadow: 0 1px 0 rgba(255,255,255,0.5);\n    padding: 0;\n    margin-bottom: 3px;\n    position: relative;\n}\n.edui-default .edui-message-body{\n    border-radius: 3px;\n    padding: 8px 15px 8px 8px;\n    color: #c09853;\n    background-color: #fcf8e3;\n    border: 1px solid #fbeed5;\n}\n.edui-default .edui-message-type-info{\n    color: #3a87ad;\n    background-color: #d9edf7;\n    border-color: #bce8f1\n}\n.edui-default .edui-message-type-success{\n    color: #468847;\n    background-color: #dff0d8;\n    border-color: #d6e9c6\n}\n.edui-default .edui-message-type-danger,\n.edui-default .edui-message-type-error{\n    color: #b94a48;\n    background-color: #f2dede;\n    border-color: #eed3d7\n}\n.edui-default .edui-message .edui-message-closer {\n    display: block;\n    width: 16px;\n    height: 16px;\n    line-height: 16px;\n    position: absolute;\n    top: 0;\n    right: 0;\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    float: right;\n    font-size: 20px;\n    font-weight: bold;\n    color: #999;\n    text-shadow: 0 1px 0 #fff;\n    font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n}\n.edui-default .edui-message .edui-message-content {\n    font-size: 10pt;\n    word-wrap: break-word;\n    word-break: normal;\n}\n/* 弹出对话框按钮和对话框大小 */\n.edui-default .edui-dialog {\n    z-index: 2000;\n    position: absolute;\n\n}\n\n.edui-dialog div{\n    width:auto;\n}\n\n.edui-default .edui-dialog-wrap {\n    margin-right: 6px;\n    margin-bottom: 6px;\n}\n\n.edui-default .edui-dialog-fullscreen-flag {\n    margin-right: 0;\n    margin-bottom: 0;\n}\n\n.edui-default .edui-dialog-body {\n    position: relative;\n    padding:2px 0 0 2px;\n    _zoom: 1;\n}\n\n.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body {\n    padding: 0;\n}\n\n.edui-default .edui-dialog-shadow {\n    position: absolute;\n    z-index: -1;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    background-color: #ffffff;\n    border: 1px solid #ccc;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    *border-right-width: 2px;\n    *border-bottom-width: 2px;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n    -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    -webkit-background-clip: padding-box;\n    -moz-background-clip: padding;\n    background-clip: padding-box;\n}\n\n.edui-default .edui-dialog-foot {\n    background-color: white;\n}\n\n.edui-default .edui-dialog-titlebar {\n    height: 26px;\n    border-bottom: 1px solid #c6c6c6;\n    background: url(../images/dialog-title-bg.png) repeat-x bottom;\n    position: relative;\n    cursor: move;\n}\n.edui-default .edui-dialog-caption {\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 26px;\n    padding-left: 5px;\n}\n\n.edui-default .edui-dialog-draghandle {\n    height: 26px;\n}\n\n.edui-default .edui-dialog-closebutton {\n    position: absolute !important;\n    right: 5px;\n    top: 3px;\n}\n\n.edui-default .edui-dialog-closebutton .edui-button-body {\n    height: 20px;\n    width: 20px;\n    cursor: pointer;\n    background: url(\"../images/icons-all.gif\") no-repeat 0 -59px;\n}\n\n.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body {\n    background: url(\"../images/icons-all.gif\") no-repeat 0 -89px;\n}\n\n.edui-default .edui-dialog-foot {\n    height: 40px;\n}\n\n.edui-default .edui-dialog-buttons {\n    position: absolute;\n    right: 0;\n}\n\n.edui-default .edui-dialog-buttons .edui-button {\n    margin-right: 10px;\n}\n\n.edui-default .edui-dialog-buttons .edui-button .edui-button-body {\n    background: url(\"../images/icons-all.gif\") no-repeat;\n    height: 24px;\n    width: 96px;\n    font-size: 12px;\n    line-height: 24px;\n    text-align: center;\n    cursor: default;\n}\n\n.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body {\n    background: url(\"../images/icons-all.gif\") no-repeat 0 -30px;\n}\n\n.edui-default .edui-dialog iframe {\n    border: 0;\n    padding: 0;\n    margin: 0;\n    vertical-align: top;\n}\n\n.edui-default .edui-dialog-modalmask {\n    opacity: 0.3;\n    filter: alpha(opacity = 30);\n    background-color: #ccc;\n    position: absolute;\n    /*z-index: 1999;*/\n}\n\n.edui-default .edui-dialog-dragmask {\n    position: absolute;\n    /*z-index: 2001;*/\n    background-color: transparent;\n    cursor: move;\n}\n\n.edui-default .edui-dialog-content {\n    position: relative;\n}\n\n.edui-default .dialogcontmask {\n    cursor: move;\n    visibility: hidden;\n    display: block;\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    opacity: 0;\n    filter: alpha(opacity = 0);\n}\n\n/*link-dialog*/\n.edui-default .edui-for-link .edui-dialog-content {\n    width: 420px;\n    height: 200px;\n    overflow: hidden;\n}\n/*background-dialog*/\n.edui-default .edui-for-background .edui-dialog-content {\n    width: 440px;\n    height: 280px;\n    overflow: hidden;\n}\n\n/*template-dialog*/\n.edui-default .edui-for-template .edui-dialog-content {\n    width: 630px;\n    height: 390px;\n    overflow: hidden;\n}\n\n/*scrawl-dialog*/\n.edui-default .edui-for-scrawl .edui-dialog-content {\n    width: 515px;\n    *width: 506px;\n    height: 360px;\n}\n\n/*spechars-dialog*/\n.edui-default .edui-for-spechars .edui-dialog-content {\n    width: 620px;\n    height: 500px;\n    *width: 630px;\n    *height: 570px;\n}\n\n/*image-dialog*/\n.edui-default .edui-for-insertimage .edui-dialog-content {\n    width: 650px;\n    height: 400px;\n    overflow: hidden;\n}\n/*webapp-dialog*/\n.edui-default .edui-for-webapp .edui-dialog-content {\n    width: 560px;\n    _width: 565px;\n    height: 450px;\n    overflow: hidden;\n}\n\n/*image-insertframe*/\n.edui-default .edui-for-insertframe .edui-dialog-content {\n    width: 350px;\n    height: 200px;\n    overflow: hidden;\n}\n\n/*wordImage-dialog*/\n.edui-default .edui-for-wordimage .edui-dialog-content {\n    width: 620px;\n    height: 380px;\n    overflow: hidden;\n}\n\n/*attachment-dialog*/\n.edui-default .edui-for-attachment .edui-dialog-content {\n    width: 650px;\n    height: 400px;\n    overflow: hidden;\n}\n\n\n/*map-dialog*/\n.edui-default .edui-for-map .edui-dialog-content {\n    width: 550px;\n    height: 400px;\n}\n\n/*gmap-dialog*/\n.edui-default .edui-for-gmap .edui-dialog-content {\n    width: 550px;\n    height: 400px;\n}\n\n/*video-dialog*/\n.edui-default .edui-for-insertvideo .edui-dialog-content {\n    width: 590px;\n    height: 390px;\n}\n\n/*anchor-dialog*/\n.edui-default .edui-for-anchor .edui-dialog-content {\n    width: 320px;\n    height: 60px;\n    overflow: hidden;\n}\n\n/*searchreplace-dialog*/\n.edui-default .edui-for-searchreplace .edui-dialog-content {\n    width: 400px;\n    height: 220px;\n}\n\n/*help-dialog*/\n.edui-default .edui-for-help .edui-dialog-content {\n    width: 400px;\n    height: 420px;\n}\n\n/*edittable-dialog*/\n.edui-default .edui-for-edittable .edui-dialog-content {\n    width: 540px;\n    _width:590px;\n    height: 335px;\n}\n\n/*edittip-dialog*/\n.edui-default .edui-for-edittip .edui-dialog-content {\n    width: 225px;\n    height: 60px;\n}\n\n/*edittd-dialog*/\n.edui-default .edui-for-edittd .edui-dialog-content {\n    width: 240px;\n    height: 50px;\n}\n/*snapscreen-dialog*/\n.edui-default .edui-for-snapscreen .edui-dialog-content {\n    width: 400px;\n    height: 220px;\n}\n\n/*music-dialog*/\n.edui-default .edui-for-music .edui-dialog-content {\n    width: 515px;\n    height: 360px;\n}\n\n/*段落弹出菜单*/\n.edui-default .edui-for-paragraph .edui-listitem-label {\n    font-family: Tahoma, Verdana, Arial, Helvetica;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p {\n    font-size: 22px;\n    line-height: 27px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1 {\n    font-weight: bolder;\n    font-size: 32px;\n    line-height: 36px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2 {\n    font-weight: bolder;\n    font-size: 27px;\n    line-height: 29px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3 {\n    font-weight: bolder;\n    font-size: 19px;\n    line-height: 23px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4 {\n    font-weight: bolder;\n    font-size: 16px;\n    line-height: 19px\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5 {\n    font-weight: bolder;\n    font-size: 13px;\n    line-height: 16px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6 {\n    font-weight: bolder;\n    font-size: 12px;\n    line-height: 14px;\n}\n/* 表格弹出菜单 */\n.edui-default .edui-for-inserttable .edui-splitborder {\n    display: none\n}\n.edui-default .edui-for-inserttable  .edui-splitbutton-body .edui-arrow {\n    width: 0\n}\n.edui-default .edui-toolbar .edui-for-inserttable  .edui-state-active .edui-splitborder{\n    border-left: 1px solid transparent;\n}\n.edui-default .edui-tablepicker .edui-infoarea {\n    height: 14px;\n    line-height: 14px;\n    font-size: 12px;\n    width: 220px;\n    margin-bottom: 3px;\n    clear: both;\n}\n\n.edui-default .edui-tablepicker .edui-infoarea .edui-label {\n    float: left;\n}\n\n.edui-default .edui-dialog-buttons .edui-label {\n    line-height: 24px;\n}\n\n.edui-default .edui-tablepicker .edui-infoarea .edui-clickable {\n    float: right;\n}\n\n.edui-default .edui-tablepicker .edui-pickarea {\n    background: url(\"../images/unhighlighted.gif\") repeat;\n    height: 220px;\n    width: 220px;\n}\n\n.edui-default .edui-tablepicker .edui-pickarea .edui-overlay {\n    background: url(\"../images/highlighted.gif\") repeat;\n}\n\n/* 颜色弹出菜单 */\n.edui-default .edui-colorpicker-topbar {\n    height: 27px;\n    width: 200px;\n    /*border-bottom: 1px gray dashed;*/\n}\n\n.edui-default .edui-colorpicker-preview {\n    height: 20px;\n    border: 1px inset black;\n    margin-left: 1px;\n    width: 128px;\n    float: left;\n}\n\n.edui-default .edui-colorpicker-nocolor {\n    float: right;\n    margin-right: 1px;\n    font-size: 12px;\n    line-height: 14px;\n    height: 14px;\n    border: 1px solid #333;\n    padding: 3px 5px;\n    cursor: pointer;\n}\n\n.edui-default .edui-colorpicker-tablefirstrow {\n    height: 30px;\n}\n\n.edui-default .edui-colorpicker-colorcell {\n    width: 14px;\n    height: 14px;\n    display: block;\n    margin: 0;\n    cursor: pointer;\n}\n\n.edui-default .edui-colorpicker-colorcell:hover {\n    width: 14px;\n    height: 14px;\n    margin: 0;\n}\n.edui-default .edui-colorpicker-advbtn{\n    display: block;\n    text-align: center;\n    cursor: pointer;\n    height:20px;\n}\n.arrow_down{\n    background: white url('../images/arrow_down.png') no-repeat center;\n}\n.arrow_up{\n    background: white url('../images/arrow_up.png') no-repeat center;\n}\n/*高级的样式*/\n.edui-colorpicker-adv{\n    position: relative;\n    overflow: hidden;\n    height: 180px;\n    display: none;\n}\n.edui-colorpicker-plant, .edui-colorpicker-hue {\n    border: solid 1px #666;\n}\n.edui-colorpicker-pad {\n    width: 150px;\n    height: 150px;\n    left: 14px;\n    top: 13px;\n    position: absolute;\n    background: red;\n    overflow: hidden;\n    cursor: crosshair;\n}\n.edui-colorpicker-cover{\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 150px;\n    height: 150px;\n    background: url(\"../images/tangram-colorpicker.png\") -160px -200px;\n}\n.edui-colorpicker-padDot{\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 11px;\n    height: 11px;\n    overflow: hidden;\n    background: url(../images/tangram-colorpicker.png) 0px -200px repeat-x;\n    z-index: 1000;\n\n}\n.edui-colorpicker-sliderMain {\n    position: absolute;\n    left: 171px;\n    top: 13px;\n    width: 19px;\n    height: 152px;\n    background: url(../images/tangram-colorpicker.png) -179px -12px no-repeat;\n\n}\n.edui-colorpicker-slider {\n    width: 100%;\n    height: 100%;\n    cursor: pointer;\n}\n.edui-colorpicker-thumb{\n    position: absolute;\n    top: 0;\n    cursor: pointer;\n    height: 3px;\n    left: -1px;\n    right: -1px;\n    border: 1px solid black;\n    background: white;\n    opacity: .8;\n}\n/*自动排版弹出菜单*/\n.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body {\n    font-size: 12px;\n    margin-bottom: 3px;\n    clear: both;\n}\n\n.edui-default .edui-autotypesetpicker-body table {\n    border-collapse: separate;\n    border-spacing: 2px;\n}\n\n.edui-default .edui-autotypesetpicker-body td {\n    font-size: 12px;\n    word-wrap:break-word;\n}\n\n.edui-default .edui-autotypesetpicker-body td input {\n    margin: 3px 3px 3px 4px;\n    *margin: 1px 0 0 0;\n}\n/*自动排版弹出菜单*/\n.edui-default .edui-cellalignpicker .edui-cellalignpicker-body {\n    width: 70px;\n    font-size: 12px;\n    cursor: default;\n}\n\n.edui-default .edui-cellalignpicker-body table {\n    border-collapse: separate;\n    border-spacing: 0;\n}\n.edui-default .edui-cellalignpicker-body td{\n    padding: 1px;\n}\n.edui-default .edui-cellalignpicker-body .edui-icon{\n    height: 20px;\n    width: 20px;\n    padding: 1px;\n    background-image: url(../images/table-cell-align.png);\n}\n\n.edui-default .edui-cellalignpicker-body .edui-left{\n    background-position: 0 0;\n}\n\n.edui-default .edui-cellalignpicker-body .edui-center{\n    background-position: -25px 0;\n}\n.edui-default .edui-cellalignpicker-body .edui-right{\n    background-position: -51px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{\n    background-position: -73px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{\n    background-position: -98px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{\n    background-position: -124px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left {\n    background-position: -146px 0;\n    background-color: #f1f4f5;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center {\n    background-position: -245px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right {\n    background-position: -271px 0;\n}\n/*分隔线*/\n.edui-default .edui-toolbar .edui-separator {\n    width: 2px;\n    height: 20px;\n    margin: 2px 4px 2px 3px;\n    background: url(../images/icons.png) -181px 0;\n    background: url(../images/icons.gif) -181px 0 \\9;\n}\n\n/*颜色按钮 */\n.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump {\n    position: absolute;\n    overflow: hidden;\n    bottom: 1px;\n    left: 1px;\n    width: 18px;\n    height: 4px;\n}\n/*表情按钮及弹出菜单*/\n/*去除了表情的下拉箭头*/\n.edui-default .edui-for-emotion .edui-icon {\n    background-position: -60px -20px;\n}\n.edui-default .edui-for-emotion .edui-popup-content iframe\n{\n    width: 514px;\n    height: 380px;\n    overflow: hidden;\n}\n.edui-default .edui-for-emotion .edui-popup-content\n{\n    position: relative;\n    z-index: 555\n}\n\n.edui-default .edui-for-emotion .edui-splitborder {\n    display: none\n}\n\n.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow\n{\n    width: 0\n}\n.edui-default .edui-toolbar .edui-for-emotion  .edui-state-active .edui-splitborder\n{\n    border-left: 1px solid transparent;\n}\n/*contextmenu*/\n.edui-default .edui-hassubmenu .edui-arrow {\n    height: 20px;\n    width: 20px;\n    float: right;\n    background: url(\"../images/icons-all.gif\") no-repeat 10px -233px;\n}\n\n.edui-default .edui-menu-body .edui-menuitem {\n    padding: 1px;\n}\n\n.edui-default .edui-menuseparator {\n    margin: 2px 0;\n    height: 1px;\n    overflow: hidden;\n}\n\n.edui-default .edui-menuseparator-inner {\n    border-bottom: 1px solid #e2e3e3;\n    margin-left: 29px;\n    margin-right: 1px;\n}\n\n.edui-default .edui-menu-body .edui-state-hover {\n    padding: 0 !important;\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n}\n/*弹出菜单*/\n.edui-default .edui-shortcutmenu {\n    padding: 2px;\n    width: 190px;\n    height: 50px;\n    background-color: #fff;\n    border: 1px solid #ccc;\n    border-radius: 5px;\n}\n\n/*粘贴弹出菜单*/\n.edui-default .edui-wordpastepop .edui-popup-content{\n    border: none;\n    padding: 0;\n    width: 54px;\n    height: 21px;\n}\n.edui-default  .edui-pasteicon {\n    width: 100%;\n    height: 100%;\n    background-image: url('../images/wordpaste.png');\n    background-position: 0 0;\n}\n\n.edui-default  .edui-pasteicon.edui-state-opened {\n    background-position: 0 -34px;\n}\n\n.edui-default  .edui-pastecontainer {\n    position: relative;\n    visibility: hidden;\n    width: 97px;\n    background: #fff;\n    border: 1px solid #ccc;\n}\n\n.edui-default  .edui-pastecontainer .edui-title {\n    font-weight: bold;\n    background: #F8F8FF;\n    height: 25px;\n    line-height: 25px;\n    font-size: 12px;\n    padding-left: 5px;\n}\n\n.edui-default  .edui-pastecontainer .edui-button {\n    overflow: hidden;\n    margin: 3px 0;\n}\n\n.edui-default  .edui-pastecontainer .edui-button .edui-richtxticon,\n.edui-default  .edui-pastecontainer .edui-button .edui-tagicon,\n.edui-default  .edui-pastecontainer .edui-button .edui-plaintxticon{\n    float: left;\n    cursor: pointer;\n    width: 29px;\n    height: 29px;\n    margin-left: 5px;\n    background-image: url('../images/wordpaste.png');\n    background-repeat: no-repeat;\n}\n.edui-default  .edui-pastecontainer .edui-button .edui-richtxticon {\n    margin-left: 0;\n    background-position: -109px 0;\n}\n.edui-default  .edui-pastecontainer .edui-button .edui-tagicon {\n    background-position: -148px 1px;\n}\n\n.edui-default  .edui-pastecontainer .edui-button .edui-plaintxticon {\n    background-position: -72px 0;\n}\n\n.edui-default  .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon {\n    background-position: -109px -34px;\n}\n.edui-default  .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{\n    background-position: -148px -34px;\n}\n.edui-default  .edui-pastecontainer .edui-button  .edui-state-hover .edui-plaintxticon{\n    background-position: -72px -34px;\n}"
  },
  {
    "path": "api/static/libs/js/UEditor/themes/default/dialogbase.css",
    "content": "/*弹出对话框页面样式组件\n*/\n\n/*reset\n*/\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, font, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td {\n    margin: 0;\n    padding: 0;\n    outline: 0;\n    font-size: 100%;\n}\n\nbody {\n    line-height: 1;\n}\n\nol, ul {\n    list-style: none;\n}\n\nblockquote, q {\n    quotes: none;\n}\n\nins {\n    text-decoration: none;\n}\n\ndel {\n    text-decoration: line-through;\n}\n\ntable {\n    border-collapse: collapse;\n    border-spacing: 0;\n}\n\n/*module\n*/\nbody {\n    background-color: #fff;\n    font: 12px/1.5 sans-serif, \"宋体\", \"Arial Narrow\", HELVETICA;\n    color: #646464;\n}\n\n/*tab*/\n.tabhead {\n    position: relative;\n    z-index: 10;\n}\n\n.tabhead span {\n    display: inline-block;\n    padding: 0 5px;\n    height: 30px;\n    border: 1px solid #ccc;\n    background: url(\"images/dialog-title-bg.png\") repeat-x;\n    text-align: center;\n    line-height: 30px;\n    cursor: pointer;\n    *margin-right: 5px;\n}\n\n.tabhead span.focus {\n    height: 31px;\n    border-bottom: none;\n    background: #fff;\n}\n\n.tabbody {\n    position: relative;\n    top: -1px;\n    margin: 0 auto;\n    border: 1px solid #ccc;\n}\n\n/*button*/\na.button {\n    display: block;\n    text-align: center;\n    line-height: 24px;\n    text-decoration: none;\n    height: 24px;\n    width: 95px;\n    border: 0;\n    color: #838383;\n    background: url(../../themes/default/images/icons-all.gif) no-repeat;\n}\n\na.button:hover {\n    background-position: 0 -30px;\n}"
  },
  {
    "path": "api/static/libs/js/UEditor/themes/iframe.css",
    "content": "/*可以在这里添加你自己的css*/\nhtml,\nbody {\n  /* overflow-y: auto !important; */\n  overflow: hidden !important;\n  height: auto !important;\n}\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/SyntaxHighlighter/shCore.js",
    "content": "// XRegExp 1.5.1\n// (c) 2007-2012 Steven Levithan\n// MIT License\n// <http://xregexp.com>\n// Provides an augmented, extensible, cross-browser implementation of regular expressions,\n// including support for additional syntax, flags, and methods\n\nvar XRegExp;\n\nif (XRegExp) {\n    // Avoid running twice, since that would break references to native globals\n    throw Error(\"can't load XRegExp twice in the same frame\");\n}\n\n// Run within an anonymous function to protect variables and avoid new globals\n(function (undefined) {\n\n    //---------------------------------\n    //  Constructor\n    //---------------------------------\n\n    // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native\n    // regular expression in that additional syntax and flags are supported and cross-browser\n    // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and\n    // converts to type XRegExp\n    XRegExp = function (pattern, flags) {\n        var output = [],\n            currScope = XRegExp.OUTSIDE_CLASS,\n            pos = 0,\n            context, tokenResult, match, chr, regex;\n\n        if (XRegExp.isRegExp(pattern)) {\n            if (flags !== undefined)\n                throw TypeError(\"can't supply flags when constructing one RegExp from another\");\n            return clone(pattern);\n        }\n        // Tokens become part of the regex construction process, so protect against infinite\n        // recursion when an XRegExp is constructed within a token handler or trigger\n        if (isInsideConstructor)\n            throw Error(\"can't call the XRegExp constructor within token definition functions\");\n\n        flags = flags || \"\";\n        context = { // `this` object for custom tokens\n            hasNamedCapture: false,\n            captureNames: [],\n            hasFlag: function (flag) {return flags.indexOf(flag) > -1;},\n            setFlag: function (flag) {flags += flag;}\n        };\n\n        while (pos < pattern.length) {\n            // Check for custom tokens at the current position\n            tokenResult = runTokens(pattern, pos, currScope, context);\n\n            if (tokenResult) {\n                output.push(tokenResult.output);\n                pos += (tokenResult.match[0].length || 1);\n            } else {\n                // Check for native multicharacter metasequences (excluding character classes) at\n                // the current position\n                if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) {\n                    output.push(match[0]);\n                    pos += match[0].length;\n                } else {\n                    chr = pattern.charAt(pos);\n                    if (chr === \"[\")\n                        currScope = XRegExp.INSIDE_CLASS;\n                    else if (chr === \"]\")\n                        currScope = XRegExp.OUTSIDE_CLASS;\n                    // Advance position one character\n                    output.push(chr);\n                    pos++;\n                }\n            }\n        }\n\n        regex = RegExp(output.join(\"\"), nativ.replace.call(flags, flagClip, \"\"));\n        regex._xregexp = {\n            source: pattern,\n            captureNames: context.hasNamedCapture ? context.captureNames : null\n        };\n        return regex;\n    };\n\n\n    //---------------------------------\n    //  Public properties\n    //---------------------------------\n\n    XRegExp.version = \"1.5.1\";\n\n    // Token scope bitflags\n    XRegExp.INSIDE_CLASS = 1;\n    XRegExp.OUTSIDE_CLASS = 2;\n\n\n    //---------------------------------\n    //  Private variables\n    //---------------------------------\n\n    var replacementToken = /\\$(?:(\\d\\d?|[$&`'])|{([$\\w]+)})/g,\n        flagClip = /[^gimy]+|([\\s\\S])(?=[\\s\\S]*\\1)/g, // Nonnative and duplicate flags\n        quantifier = /^(?:[?*+]|{\\d+(?:,\\d*)?})\\??/,\n        isInsideConstructor = false,\n        tokens = [],\n    // Copy native globals for reference (\"native\" is an ES3 reserved keyword)\n        nativ = {\n            exec: RegExp.prototype.exec,\n            test: RegExp.prototype.test,\n            match: String.prototype.match,\n            replace: String.prototype.replace,\n            split: String.prototype.split\n        },\n        compliantExecNpcg = nativ.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n        compliantLastIndexIncrement = function () {\n            var x = /^/g;\n            nativ.test.call(x, \"\");\n            return !x.lastIndex;\n        }(),\n        hasNativeY = RegExp.prototype.sticky !== undefined,\n        nativeTokens = {};\n\n    // `nativeTokens` match native multicharacter metasequences only (including deprecated octals,\n    // excluding character classes)\n    nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S]))/;\n    nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??)/;\n\n\n    //---------------------------------\n    //  Public methods\n    //---------------------------------\n\n    // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by\n    // the XRegExp library and can be used to create XRegExp plugins. This function is intended for\n    // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can\n    // be disabled by `XRegExp.freezeTokens`\n    XRegExp.addToken = function (regex, handler, scope, trigger) {\n        tokens.push({\n            pattern: clone(regex, \"g\" + (hasNativeY ? \"y\" : \"\")),\n            handler: handler,\n            scope: scope || XRegExp.OUTSIDE_CLASS,\n            trigger: trigger || null\n        });\n    };\n\n    // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag\n    // combination has previously been cached, the cached copy is returned; otherwise the newly\n    // created regex is cached\n    XRegExp.cache = function (pattern, flags) {\n        var key = pattern + \"/\" + (flags || \"\");\n        return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags));\n    };\n\n    // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh\n    // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global`\n    // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve\n    // special properties required for named capture\n    XRegExp.copyAsGlobal = function (regex) {\n        return clone(regex, \"g\");\n    };\n\n    // Accepts a string; returns the string with regex metacharacters escaped. The returned string\n    // can safely be used at any point within a regex to match the provided literal string. Escaped\n    // characters are [ ] { } ( ) * + ? - . , \\ ^ $ | # and whitespace\n    XRegExp.escape = function (str) {\n        return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n    };\n\n    // Accepts a string to search, regex to search with, position to start the search within the\n    // string (default: 0), and an optional Boolean indicating whether matches must start at-or-\n    // after the position or at the specified position only. This function ignores the `lastIndex`\n    // of the provided regex in its own handling, but updates the property for compatibility\n    XRegExp.execAt = function (str, regex, pos, anchored) {\n        var r2 = clone(regex, \"g\" + ((anchored && hasNativeY) ? \"y\" : \"\")),\n            match;\n        r2.lastIndex = pos = pos || 0;\n        match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.)\n        if (anchored && match && match.index !== pos)\n            match = null;\n        if (regex.global)\n            regex.lastIndex = match ? r2.lastIndex : 0;\n        return match;\n    };\n\n    // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing\n    // syntax and flag changes. Should be run after XRegExp and any plugins are loaded\n    XRegExp.freezeTokens = function () {\n        XRegExp.addToken = function () {\n            throw Error(\"can't run addToken after freezeTokens\");\n        };\n    };\n\n    // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object.\n    // Note that this is also `true` for regex literals and regexes created by the `XRegExp`\n    // constructor. This works correctly for variables created in another frame, when `instanceof`\n    // and `constructor` checks would fail to work as intended\n    XRegExp.isRegExp = function (o) {\n        return Object.prototype.toString.call(o) === \"[object RegExp]\";\n    };\n\n    // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to\n    // iterate over regex matches compared to the traditional approaches of subverting\n    // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop\n    XRegExp.iterate = function (str, regex, callback, context) {\n        var r2 = clone(regex, \"g\"),\n            i = -1, match;\n        while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)\n            if (regex.global)\n                regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback`\n            callback.call(context, match, ++i, str, regex);\n            if (r2.lastIndex === match.index)\n                r2.lastIndex++;\n        }\n        if (regex.global)\n            regex.lastIndex = 0;\n    };\n\n    // Accepts a string and an array of regexes; returns the result of using each successive regex\n    // to search within the matches of the previous regex. The array of regexes can also contain\n    // objects with `regex` and `backref` properties, in which case the named or numbered back-\n    // references specified are passed forward to the next regex or returned. E.g.:\n    // var xregexpImgFileNames = XRegExp.matchChain(html, [\n    //     {regex: /<img\\b([^>]+)>/i, backref: 1}, // <img> tag attributes\n    //     {regex: XRegExp('(?ix) \\\\s src=\" (?<src> [^\"]+ )'), backref: \"src\"}, // src attribute values\n    //     {regex: XRegExp(\"^http://xregexp\\\\.com(/[^#?]+)\", \"i\"), backref: 1}, // xregexp.com paths\n    //     /[^\\/]+$/ // filenames (strip directory paths)\n    // ]);\n    XRegExp.matchChain = function (str, chain) {\n        return function recurseChain (values, level) {\n            var item = chain[level].regex ? chain[level] : {regex: chain[level]},\n                regex = clone(item.regex, \"g\"),\n                matches = [], i;\n            for (i = 0; i < values.length; i++) {\n                XRegExp.iterate(values[i], regex, function (match) {\n                    matches.push(item.backref ? (match[item.backref] || \"\") : match[0]);\n                });\n            }\n            return ((level === chain.length - 1) || !matches.length) ?\n                matches : recurseChain(matches, level + 1);\n        }([str], 0);\n    };\n\n\n    //---------------------------------\n    //  New RegExp prototype methods\n    //---------------------------------\n\n    // Accepts a context object and arguments array; returns the result of calling `exec` with the\n    // first value in the arguments array. the context is ignored but is accepted for congruity\n    // with `Function.prototype.apply`\n    RegExp.prototype.apply = function (context, args) {\n        return this.exec(args[0]);\n    };\n\n    // Accepts a context object and string; returns the result of calling `exec` with the provided\n    // string. the context is ignored but is accepted for congruity with `Function.prototype.call`\n    RegExp.prototype.call = function (context, str) {\n        return this.exec(str);\n    };\n\n\n    //---------------------------------\n    //  Overriden native methods\n    //---------------------------------\n\n    // Adds named capture support (with backreferences returned as `result.name`), and fixes two\n    // cross-browser issues per ES3:\n    // - Captured values for nonparticipating capturing groups should be returned as `undefined`,\n    //   rather than the empty string.\n    // - `lastIndex` should not be incremented after zero-length matches.\n    RegExp.prototype.exec = function (str) {\n        var match, name, r2, origLastIndex;\n        if (!this.global)\n            origLastIndex = this.lastIndex;\n        match = nativ.exec.apply(this, arguments);\n        if (match) {\n            // Fix browsers whose `exec` methods don't consistently return `undefined` for\n            // nonparticipating capturing groups\n            if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n                r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), \"g\", \"\"));\n                // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed\n                // matching due to characters outside the match\n                nativ.replace.call((str + \"\").slice(match.index), r2, function () {\n                    for (var i = 1; i < arguments.length - 2; i++) {\n                        if (arguments[i] === undefined)\n                            match[i] = undefined;\n                    }\n                });\n            }\n            // Attach named capture properties\n            if (this._xregexp && this._xregexp.captureNames) {\n                for (var i = 1; i < match.length; i++) {\n                    name = this._xregexp.captureNames[i - 1];\n                    if (name)\n                        match[name] = match[i];\n                }\n            }\n            // Fix browsers that increment `lastIndex` after zero-length matches\n            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n        }\n        if (!this.global)\n            this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        return match;\n    };\n\n    // Fix browser bugs in native method\n    RegExp.prototype.test = function (str) {\n        // Use the native `exec` to skip some processing overhead, even though the altered\n        // `exec` would take care of the `lastIndex` fixes\n        var match, origLastIndex;\n        if (!this.global)\n            origLastIndex = this.lastIndex;\n        match = nativ.exec.call(this, str);\n        // Fix browsers that increment `lastIndex` after zero-length matches\n        if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n            this.lastIndex--;\n        if (!this.global)\n            this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        return !!match;\n    };\n\n    // Adds named capture support and fixes browser bugs in native method\n    String.prototype.match = function (regex) {\n        if (!XRegExp.isRegExp(regex))\n            regex = RegExp(regex); // Native `RegExp`\n        if (regex.global) {\n            var result = nativ.match.apply(this, arguments);\n            regex.lastIndex = 0; // Fix IE bug\n            return result;\n        }\n        return regex.exec(this); // Run the altered `exec`\n    };\n\n    // Adds support for `${n}` tokens for named and numbered backreferences in replacement text,\n    // and provides named backreferences to replacement functions as `arguments[0].name`. Also\n    // fixes cross-browser differences in replacement text syntax when performing a replacement\n    // using a nonregex search value, and the value of replacement regexes' `lastIndex` property\n    // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary\n    // third (`flags`) parameter\n    String.prototype.replace = function (search, replacement) {\n        var isRegex = XRegExp.isRegExp(search),\n            captureNames, result, str, origLastIndex;\n\n        // There are too many combinations of search/replacement types/values and browser bugs that\n        // preclude passing to native `replace`, so don't try\n        //if (...)\n        //    return nativ.replace.apply(this, arguments);\n\n        if (isRegex) {\n            if (search._xregexp)\n                captureNames = search._xregexp.captureNames; // Array or `null`\n            if (!search.global)\n                origLastIndex = search.lastIndex;\n        } else {\n            search = search + \"\"; // Type conversion\n        }\n\n        if (Object.prototype.toString.call(replacement) === \"[object Function]\") {\n            result = nativ.replace.call(this + \"\", search, function () {\n                if (captureNames) {\n                    // Change the `arguments[0]` string primitive to a String object which can store properties\n                    arguments[0] = new String(arguments[0]);\n                    // Store named backreferences on `arguments[0]`\n                    for (var i = 0; i < captureNames.length; i++) {\n                        if (captureNames[i])\n                            arguments[0][captureNames[i]] = arguments[i + 1];\n                    }\n                }\n                // Update `lastIndex` before calling `replacement` (fix browsers)\n                if (isRegex && search.global)\n                    search.lastIndex = arguments[arguments.length - 2] + arguments[0].length;\n                return replacement.apply(null, arguments);\n            });\n        } else {\n            str = this + \"\"; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`)\n            result = nativ.replace.call(str, search, function () {\n                var args = arguments; // Keep this function's `arguments` available through closure\n                return nativ.replace.call(replacement + \"\", replacementToken, function ($0, $1, $2) {\n                    // Numbered backreference (without delimiters) or special variable\n                    if ($1) {\n                        switch ($1) {\n                            case \"$\": return \"$\";\n                            case \"&\": return args[0];\n                            case \"`\": return args[args.length - 1].slice(0, args[args.length - 2]);\n                            case \"'\": return args[args.length - 1].slice(args[args.length - 2] + args[0].length);\n                            // Numbered backreference\n                            default:\n                                // What does \"$10\" mean?\n                                // - Backreference 10, if 10 or more capturing groups exist\n                                // - Backreference 1 followed by \"0\", if 1-9 capturing groups exist\n                                // - Otherwise, it's the string \"$10\"\n                                // Also note:\n                                // - Backreferences cannot be more than two digits (enforced by `replacementToken`)\n                                // - \"$01\" is equivalent to \"$1\" if a capturing group exists, otherwise it's the string \"$01\"\n                                // - There is no \"$0\" token (\"$&\" is the entire match)\n                                var literalNumbers = \"\";\n                                $1 = +$1; // Type conversion; drop leading zero\n                                if (!$1) // `$1` was \"0\" or \"00\"\n                                    return $0;\n                                while ($1 > args.length - 3) {\n                                    literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers;\n                                    $1 = Math.floor($1 / 10); // Drop the last digit\n                                }\n                                return ($1 ? args[$1] || \"\" : \"$\") + literalNumbers;\n                        }\n                        // Named backreference or delimited numbered backreference\n                    } else {\n                        // What does \"${n}\" mean?\n                        // - Backreference to numbered capture n. Two differences from \"$n\":\n                        //   - n can be more than two digits\n                        //   - Backreference 0 is allowed, and is the entire match\n                        // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture\n                        // - Otherwise, it's the string \"${n}\"\n                        var n = +$2; // Type conversion; drop leading zeros\n                        if (n <= args.length - 3)\n                            return args[n];\n                        n = captureNames ? indexOf(captureNames, $2) : -1;\n                        return n > -1 ? args[n + 1] : $0;\n                    }\n                });\n            });\n        }\n\n        if (isRegex) {\n            if (search.global)\n                search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows)\n            else\n                search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        }\n\n        return result;\n    };\n\n    // A consistent cross-browser, ES3 compliant `split`\n    String.prototype.split = function (s /* separator */, limit) {\n        // If separator `s` is not a regex, use the native `split`\n        if (!XRegExp.isRegExp(s))\n            return nativ.split.apply(this, arguments);\n\n        var str = this + \"\", // Type conversion\n            output = [],\n            lastLastIndex = 0,\n            match, lastLength;\n\n        // Behavior for `limit`: if it's...\n        // - `undefined`: No limit\n        // - `NaN` or zero: Return an empty array\n        // - A positive number: Use `Math.floor(limit)`\n        // - A negative number: No limit\n        // - Other: Type-convert, then use the above rules\n        if (limit === undefined || +limit < 0) {\n            limit = Infinity;\n        } else {\n            limit = Math.floor(+limit);\n            if (!limit)\n                return [];\n        }\n\n        // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero\n        // and restore it to its original value when we're done using the regex\n        s = XRegExp.copyAsGlobal(s);\n\n        while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)\n            if (s.lastIndex > lastLastIndex) {\n                output.push(str.slice(lastLastIndex, match.index));\n\n                if (match.length > 1 && match.index < str.length)\n                    Array.prototype.push.apply(output, match.slice(1));\n\n                lastLength = match[0].length;\n                lastLastIndex = s.lastIndex;\n\n                if (output.length >= limit)\n                    break;\n            }\n\n            if (s.lastIndex === match.index)\n                s.lastIndex++;\n        }\n\n        if (lastLastIndex === str.length) {\n            if (!nativ.test.call(s, \"\") || lastLength)\n                output.push(\"\");\n        } else {\n            output.push(str.slice(lastLastIndex));\n        }\n\n        return output.length > limit ? output.slice(0, limit) : output;\n    };\n\n\n    //---------------------------------\n    //  Private helper functions\n    //---------------------------------\n\n    // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp`\n    // instance with a fresh `lastIndex` (set to zero), preserving properties required for named\n    // capture. Also allows adding new flags in the process of copying the regex\n    function clone (regex, additionalFlags) {\n        if (!XRegExp.isRegExp(regex))\n            throw TypeError(\"type RegExp expected\");\n        var x = regex._xregexp;\n        regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || \"\"));\n        if (x) {\n            regex._xregexp = {\n                source: x.source,\n                captureNames: x.captureNames ? x.captureNames.slice(0) : null\n            };\n        }\n        return regex;\n    }\n\n    function getNativeFlags (regex) {\n        return (regex.global     ? \"g\" : \"\") +\n            (regex.ignoreCase ? \"i\" : \"\") +\n            (regex.multiline  ? \"m\" : \"\") +\n            (regex.extended   ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n            (regex.sticky     ? \"y\" : \"\");\n    }\n\n    function runTokens (pattern, index, scope, context) {\n        var i = tokens.length,\n            result, match, t;\n        // Protect against constructing XRegExps within token handler and trigger functions\n        isInsideConstructor = true;\n        // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws\n        try {\n            while (i--) { // Run in reverse order\n                t = tokens[i];\n                if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) {\n                    t.pattern.lastIndex = index;\n                    match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc.\n                    if (match && match.index === index) {\n                        result = {\n                            output: t.handler.call(context, match, scope),\n                            match: match\n                        };\n                        break;\n                    }\n                }\n            }\n        } catch (err) {\n            throw err;\n        } finally {\n            isInsideConstructor = false;\n        }\n        return result;\n    }\n\n    function indexOf (array, item, from) {\n        if (Array.prototype.indexOf) // Use the native array method if available\n            return array.indexOf(item, from);\n        for (var i = from || 0; i < array.length; i++) {\n            if (array[i] === item)\n                return i;\n        }\n        return -1;\n    }\n\n\n    //---------------------------------\n    //  Built-in tokens\n    //---------------------------------\n\n    // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the\n    // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS`\n\n    // Comment pattern: (?# )\n    XRegExp.addToken(\n        /\\(\\?#[^)]*\\)/,\n        function (match) {\n            // Keep tokens separated unless the following token is a quantifier\n            return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? \"\" : \"(?:)\";\n        }\n    );\n\n    // Capturing group (match the opening parenthesis only).\n    // Required for support of named capturing groups\n    XRegExp.addToken(\n        /\\((?!\\?)/,\n        function () {\n            this.captureNames.push(null);\n            return \"(\";\n        }\n    );\n\n    // Named capturing group (match the opening delimiter only): (?<name>\n    XRegExp.addToken(\n        /\\(\\?<([$\\w]+)>/,\n        function (match) {\n            this.captureNames.push(match[1]);\n            this.hasNamedCapture = true;\n            return \"(\";\n        }\n    );\n\n    // Named backreference: \\k<name>\n    XRegExp.addToken(\n        /\\\\k<([\\w$]+)>/,\n        function (match) {\n            var index = indexOf(this.captureNames, match[1]);\n            // Keep backreferences separate from subsequent literal numbers. Preserve back-\n            // references to named groups that are undefined at this point as literal strings\n            return index > -1 ?\n                \"\\\\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? \"\" : \"(?:)\") :\n                match[0];\n        }\n    );\n\n    // Empty character class: [] or [^]\n    XRegExp.addToken(\n        /\\[\\^?]/,\n        function (match) {\n            // For cross-browser compatibility with ES3, convert [] to \\b\\B and [^] to [\\s\\S].\n            // (?!) should work like \\b\\B, but is unreliable in Firefox\n            return match[0] === \"[]\" ? \"\\\\b\\\\B\" : \"[\\\\s\\\\S]\";\n        }\n    );\n\n    // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx)\n    // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc.\n    XRegExp.addToken(\n        /^\\(\\?([imsx]+)\\)/,\n        function (match) {\n            this.setFlag(match[1]);\n            return \"\";\n        }\n    );\n\n    // Whitespace and comments, in free-spacing (aka extended) mode only\n    XRegExp.addToken(\n        /(?:\\s+|#.*)+/,\n        function (match) {\n            // Keep tokens separated unless the following token is a quantifier\n            return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? \"\" : \"(?:)\";\n        },\n        XRegExp.OUTSIDE_CLASS,\n        function () {return this.hasFlag(\"x\");}\n    );\n\n    // Dot, in dotall (aka singleline) mode only\n    XRegExp.addToken(\n        /\\./,\n        function () {return \"[\\\\s\\\\S]\";},\n        XRegExp.OUTSIDE_CLASS,\n        function () {return this.hasFlag(\"s\");}\n    );\n\n\n    //---------------------------------\n    //  Backward compatibility\n    //---------------------------------\n\n    // Uncomment the following block for compatibility with XRegExp 1.0-1.2:\n    /*\n     XRegExp.matchWithinChain = XRegExp.matchChain;\n     RegExp.prototype.addFlags = function (s) {return clone(this, s);};\n     RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;};\n     RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);};\n     RegExp.prototype.validate = function (s) {var r = RegExp(\"^(?:\" + this.source + \")$(?!\\\\s)\", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;};\n     */\n\n})();\n\n//\n// Begin anonymous function. This is used to contain local scope variables without polutting global scope.\n//\nif (typeof(SyntaxHighlighter) == 'undefined') var SyntaxHighlighter = function() {\n\n// CommonJS\n    if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined')\n    {\n        XRegExp = require('XRegExp').XRegExp;\n    }\n\n// Shortcut object which will be assigned to the SyntaxHighlighter variable.\n// This is a shorthand for local reference in order to avoid long namespace\n// references to SyntaxHighlighter.whatever...\n    var sh = {\n        defaults : {\n            /** Additional CSS class names to be added to highlighter elements. */\n            'class-name' : '',\n\n            /** First line number. */\n            'first-line' : 1,\n\n            /**\n             * Pads line numbers. Possible values are:\n             *\n             *   false - don't pad line numbers.\n             *   true  - automaticaly pad numbers with minimum required number of leading zeroes.\n             *   [int] - length up to which pad line numbers.\n             */\n            'pad-line-numbers' : false,\n\n            /** Lines to highlight. */\n            'highlight' : false,\n\n            /** Title to be displayed above the code block. */\n            'title' : null,\n\n            /** Enables or disables smart tabs. */\n            'smart-tabs' : true,\n\n            /** Gets or sets tab size. */\n            'tab-size' : 4,\n\n            /** Enables or disables gutter. */\n            'gutter' : true,\n\n            /** Enables or disables toolbar. */\n            'toolbar' : true,\n\n            /** Enables quick code copy and paste from double click. */\n            'quick-code' : true,\n\n            /** Forces code view to be collapsed. */\n            'collapse' : false,\n\n            /** Enables or disables automatic links. */\n            'auto-links' : false,\n\n            /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */\n            'light' : false,\n\n            'unindent' : true,\n\n            'html-script' : false\n        },\n\n        config : {\n            space : '&nbsp;',\n\n            /** Enables use of <SCRIPT type=\"syntaxhighlighter\" /> tags. */\n            useScriptTags : true,\n\n            /** Blogger mode flag. */\n            bloggerMode : false,\n\n            stripBrs : false,\n\n            /** Name of the tag that SyntaxHighlighter will automatically look for. */\n            tagName : 'pre',\n\n            strings : {\n                expandSource : 'expand source',\n                help : '?',\n                alert: 'SyntaxHighlighter\\n\\n',\n                noBrush : 'Can\\'t find brush for: ',\n                brushNotHtmlScript : 'Brush wasn\\'t configured for html-script option: ',\n\n                // this is populated by the build script\n                aboutDialog : '@ABOUT@'\n            }\n        },\n\n        /** Internal 'global' variables. */\n        vars : {\n            discoveredBrushes : null,\n            highlighters : {}\n        },\n\n        /** This object is populated by user included external brush files. */\n        brushes : {},\n\n        /** Common regular expressions. */\n        regexLib : {\n            multiLineCComments\t\t\t: /\\/\\*[\\s\\S]*?\\*\\//gm,\n            singleLineCComments\t\t\t: /\\/\\/.*$/gm,\n            singleLinePerlComments\t\t: /#.*$/gm,\n            doubleQuotedString\t\t\t: /\"([^\\\\\"\\n]|\\\\.)*\"/g,\n            singleQuotedString\t\t\t: /'([^\\\\'\\n]|\\\\.)*'/g,\n            multiLineDoubleQuotedString\t: new XRegExp('\"([^\\\\\\\\\"]|\\\\\\\\.)*\"', 'gs'),\n            multiLineSingleQuotedString\t: new XRegExp(\"'([^\\\\\\\\']|\\\\\\\\.)*'\", 'gs'),\n            xmlComments\t\t\t\t\t: /(&lt;|<)!--[\\s\\S]*?--(&gt;|>)/gm,\n            url\t\t\t\t\t\t\t: /\\w+:\\/\\/[\\w-.\\/?%&=:@;#]*/g,\n\n            /** <?= ?> tags. */\n            phpScriptTags \t\t\t\t: { left: /(&lt;|<)\\?(?:=|php)?/g, right: /\\?(&gt;|>)/g, 'eof' : true },\n\n            /** <%= %> tags. */\n            aspScriptTags\t\t\t\t: { left: /(&lt;|<)%=?/g, right: /%(&gt;|>)/g },\n\n            /** <script> tags. */\n            scriptScriptTags\t\t\t: { left: /(&lt;|<)\\s*script.*?(&gt;|>)/gi, right: /(&lt;|<)\\/\\s*script\\s*(&gt;|>)/gi }\n        },\n\n        toolbar: {\n            /**\n             * Generates HTML markup for the toolbar.\n             * @param {Highlighter} highlighter Highlighter instance.\n             * @return {String} Returns HTML markup.\n             */\n            getHtml: function(highlighter)\n            {\n                var html = '<div class=\"toolbar\">',\n                    items = sh.toolbar.items,\n                    list = items.list\n                    ;\n\n                function defaultGetHtml(highlighter, name)\n                {\n                    return sh.toolbar.getButtonHtml(highlighter, name, sh.config.strings[name]);\n                };\n\n                for (var i = 0; i < list.length; i++)\n                    html += (items[list[i]].getHtml || defaultGetHtml)(highlighter, list[i]);\n\n                html += '</div>';\n\n                return html;\n            },\n\n            /**\n             * Generates HTML markup for a regular button in the toolbar.\n             * @param {Highlighter} highlighter Highlighter instance.\n             * @param {String} commandName\t\tCommand name that would be executed.\n             * @param {String} label\t\t\tLabel text to display.\n             * @return {String}\t\t\t\t\tReturns HTML markup.\n             */\n            getButtonHtml: function(highlighter, commandName, label)\n            {\n                return '<span><a href=\"#\" class=\"toolbar_item'\n                    + ' command_' + commandName\n                    + ' ' + commandName\n                    + '\">' + label + '</a></span>'\n                    ;\n            },\n\n            /**\n             * Event handler for a toolbar anchor.\n             */\n            handler: function(e)\n            {\n                var target = e.target,\n                    className = target.className || ''\n                    ;\n\n                function getValue(name)\n                {\n                    var r = new RegExp(name + '_(\\\\w+)'),\n                        match = r.exec(className)\n                        ;\n\n                    return match ? match[1] : null;\n                };\n\n                var highlighter = getHighlighterById(findParentElement(target, '.syntaxhighlighter').id),\n                    commandName = getValue('command')\n                    ;\n\n                // execute the toolbar command\n                if (highlighter && commandName)\n                    sh.toolbar.items[commandName].execute(highlighter);\n\n                // disable default A click behaviour\n                e.preventDefault();\n            },\n\n            /** Collection of toolbar items. */\n            items : {\n                // Ordered lis of items in the toolbar. Can't expect `for (var n in items)` to be consistent.\n                list: ['expandSource', 'help'],\n\n                expandSource: {\n                    getHtml: function(highlighter)\n                    {\n                        if (highlighter.getParam('collapse') != true)\n                            return '';\n\n                        var title = highlighter.getParam('title');\n                        return sh.toolbar.getButtonHtml(highlighter, 'expandSource', title ? title : sh.config.strings.expandSource);\n                    },\n\n                    execute: function(highlighter)\n                    {\n                        var div = getHighlighterDivById(highlighter.id);\n                        removeClass(div, 'collapsed');\n                    }\n                },\n\n                /** Command to display the about dialog window. */\n                help: {\n                    execute: function(highlighter)\n                    {\n                        var wnd = popup('', '_blank', 500, 250, 'scrollbars=0'),\n                            doc = wnd.document\n                            ;\n\n                        doc.write(sh.config.strings.aboutDialog);\n                        doc.close();\n                        wnd.focus();\n                    }\n                }\n            }\n        },\n\n        /**\n         * Finds all elements on the page which should be processes by SyntaxHighlighter.\n         *\n         * @param {Object} globalParams\t\tOptional parameters which override element's\n         * \t\t\t\t\t\t\t\t\tparameters. Only used if element is specified.\n         *\n         * @param {Object} element\tOptional element to highlight. If none is\n         * \t\t\t\t\t\t\tprovided, all elements in the current document\n         * \t\t\t\t\t\t\tare returned which qualify.\n         *\n         * @return {Array}\tReturns list of <code>{ target: DOMElement, params: Object }</code> objects.\n         */\n        findElements: function(globalParams, element)\n        {\n            var elements = element ? [element] : toArray(document.getElementsByTagName(sh.config.tagName)),\n                conf = sh.config,\n                result = []\n                ;\n\n            // support for <SCRIPT TYPE=\"syntaxhighlighter\" /> feature\n            if (conf.useScriptTags)\n                elements = elements.concat(getSyntaxHighlighterScriptTags());\n\n            if (elements.length === 0)\n                return result;\n\n            for (var i = 0; i < elements.length; i++)\n            {\n                var item = {\n                    target: elements[i],\n                    // local params take precedence over globals\n                    params: merge(globalParams, parseParams(elements[i].className))\n                };\n\n                if (item.params['brush'] == null)\n                    continue;\n\n                result.push(item);\n            }\n\n            return result;\n        },\n\n        /**\n         * Shorthand to highlight all elements on the page that are marked as\n         * SyntaxHighlighter source code.\n         *\n         * @param {Object} globalParams\t\tOptional parameters which override element's\n         * \t\t\t\t\t\t\t\t\tparameters. Only used if element is specified.\n         *\n         * @param {Object} element\tOptional element to highlight. If none is\n         * \t\t\t\t\t\t\tprovided, all elements in the current document\n         * \t\t\t\t\t\t\tare highlighted.\n         */\n        highlight: function(globalParams, element)\n        {\n            var elements = this.findElements(globalParams, element),\n                propertyName = 'innerHTML',\n                highlighter = null,\n                conf = sh.config\n                ;\n\n            if (elements.length === 0)\n                return;\n\n            for (var i = 0; i < elements.length; i++)\n            {\n                var element = elements[i],\n                    target = element.target,\n                    params = element.params,\n                    brushName = params.brush,\n                    code\n                    ;\n\n                if (brushName == null)\n                    continue;\n\n                // Instantiate a brush\n                if (params['html-script'] == 'true' || sh.defaults['html-script'] == true)\n                {\n                    highlighter = new sh.HtmlScript(brushName);\n                    brushName = 'htmlscript';\n                }\n                else\n                {\n                    var brush = findBrush(brushName);\n\n                    if (brush)\n                        highlighter = new brush();\n                    else\n                        continue;\n                }\n\n                code = target[propertyName];\n\n                // remove CDATA from <SCRIPT/> tags if it's present\n                if (conf.useScriptTags)\n                    code = stripCData(code);\n\n                // Inject title if the attribute is present\n                if ((target.title || '') != '')\n                    params.title = target.title;\n\n                params['brush'] = brushName;\n                highlighter.init(params);\n                element = highlighter.getDiv(code);\n\n                // carry over ID\n                if ((target.id || '') != '')\n                    element.id = target.id;\n                //by zhanyi 去掉多余的外围div\n                var tmp = element.firstChild.firstChild;\n                tmp.className = element.firstChild.className;\n\n                target.parentNode.replaceChild(tmp, target);\n            }\n        },\n\n        /**\n         * Main entry point for the SyntaxHighlighter.\n         * @param {Object} params Optional params to apply to all highlighted elements.\n         */\n        all: function(params)\n        {\n            attachEvent(\n                window,\n                'load',\n                function() { sh.highlight(params); }\n            );\n        }\n    }; // end of sh\n\n    /**\n     * Checks if target DOM elements has specified CSS class.\n     * @param {DOMElement} target Target DOM element to check.\n     * @param {String} className Name of the CSS class to check for.\n     * @return {Boolean} Returns true if class name is present, false otherwise.\n     */\n    function hasClass(target, className)\n    {\n        return target.className.indexOf(className) != -1;\n    };\n\n    /**\n     * Adds CSS class name to the target DOM element.\n     * @param {DOMElement} target Target DOM element.\n     * @param {String} className New CSS class to add.\n     */\n    function addClass(target, className)\n    {\n        if (!hasClass(target, className))\n            target.className += ' ' + className;\n    };\n\n    /**\n     * Removes CSS class name from the target DOM element.\n     * @param {DOMElement} target Target DOM element.\n     * @param {String} className CSS class to remove.\n     */\n    function removeClass(target, className)\n    {\n        target.className = target.className.replace(className, '');\n    };\n\n    /**\n     * Converts the source to array object. Mostly used for function arguments and\n     * lists returned by getElementsByTagName() which aren't Array objects.\n     * @param {List} source Source list.\n     * @return {Array} Returns array.\n     */\n    function toArray(source)\n    {\n        var result = [];\n\n        for (var i = 0; i < source.length; i++)\n            result.push(source[i]);\n\n        return result;\n    };\n\n    /**\n     * Splits block of text into lines.\n     * @param {String} block Block of text.\n     * @return {Array} Returns array of lines.\n     */\n    function splitLines(block)\n    {\n        return block.split(/\\r?\\n/);\n    }\n\n    /**\n     * Generates HTML ID for the highlighter.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {String} Returns HTML ID.\n     */\n    function getHighlighterId(id)\n    {\n        var prefix = 'highlighter_';\n        return id.indexOf(prefix) == 0 ? id : prefix + id;\n    };\n\n    /**\n     * Finds Highlighter instance by ID.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {Highlighter} Returns instance of the highlighter.\n     */\n    function getHighlighterById(id)\n    {\n        return sh.vars.highlighters[getHighlighterId(id)];\n    };\n\n    /**\n     * Finds highlighter's DIV container.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {Element} Returns highlighter's DIV element.\n     */\n    function getHighlighterDivById(id)\n    {\n        return document.getElementById(getHighlighterId(id));\n    };\n\n    /**\n     * Stores highlighter so that getHighlighterById() can do its thing. Each\n     * highlighter must call this method to preserve itself.\n     * @param {Highilghter} highlighter Highlighter instance.\n     */\n    function storeHighlighter(highlighter)\n    {\n        sh.vars.highlighters[getHighlighterId(highlighter.id)] = highlighter;\n    };\n\n    /**\n     * Looks for a child or parent node which has specified classname.\n     * Equivalent to jQuery's $(container).find(\".className\")\n     * @param {Element} target Target element.\n     * @param {String} search Class name or node name to look for.\n     * @param {Boolean} reverse If set to true, will go up the node tree instead of down.\n     * @return {Element} Returns found child or parent element on null.\n     */\n    function findElement(target, search, reverse /* optional */)\n    {\n        if (target == null)\n            return null;\n\n        var nodes\t\t\t= reverse != true ? target.childNodes : [ target.parentNode ],\n            propertyToFind\t= { '#' : 'id', '.' : 'className' }[search.substr(0, 1)] || 'nodeName',\n            expectedValue,\n            found\n            ;\n\n        expectedValue = propertyToFind != 'nodeName'\n            ? search.substr(1)\n            : search.toUpperCase()\n        ;\n\n        // main return of the found node\n        if ((target[propertyToFind] || '').indexOf(expectedValue) != -1)\n            return target;\n\n        for (var i = 0; nodes && i < nodes.length && found == null; i++)\n            found = findElement(nodes[i], search, reverse);\n\n        return found;\n    };\n\n    /**\n     * Looks for a parent node which has specified classname.\n     * This is an alias to <code>findElement(container, className, true)</code>.\n     * @param {Element} target Target element.\n     * @param {String} className Class name to look for.\n     * @return {Element} Returns found parent element on null.\n     */\n    function findParentElement(target, className)\n    {\n        return findElement(target, className, true);\n    };\n\n    /**\n     * Finds an index of element in the array.\n     * @ignore\n     * @param {Object} searchElement\n     * @param {Number} fromIndex\n     * @return {Number} Returns index of element if found; -1 otherwise.\n     */\n    function indexOf(array, searchElement, fromIndex)\n    {\n        fromIndex = Math.max(fromIndex || 0, 0);\n\n        for (var i = fromIndex; i < array.length; i++)\n            if(array[i] == searchElement)\n                return i;\n\n        return -1;\n    };\n\n    /**\n     * Generates a unique element ID.\n     */\n    function guid(prefix)\n    {\n        return (prefix || '') + Math.round(Math.random() * 1000000).toString();\n    };\n\n    /**\n     * Merges two objects. Values from obj2 override values in obj1.\n     * Function is NOT recursive and works only for one dimensional objects.\n     * @param {Object} obj1 First object.\n     * @param {Object} obj2 Second object.\n     * @return {Object} Returns combination of both objects.\n     */\n    function merge(obj1, obj2)\n    {\n        var result = {}, name;\n\n        for (name in obj1)\n            result[name] = obj1[name];\n\n        for (name in obj2)\n            result[name] = obj2[name];\n\n        return result;\n    };\n\n    /**\n     * Attempts to convert string to boolean.\n     * @param {String} value Input string.\n     * @return {Boolean} Returns true if input was \"true\", false if input was \"false\" and value otherwise.\n     */\n    function toBoolean(value)\n    {\n        var result = { \"true\" : true, \"false\" : false }[value];\n        return result == null ? value : result;\n    };\n\n    /**\n     * Opens up a centered popup window.\n     * @param {String} url\t\tURL to open in the window.\n     * @param {String} name\t\tPopup name.\n     * @param {int} width\t\tPopup width.\n     * @param {int} height\t\tPopup height.\n     * @param {String} options\twindow.open() options.\n     * @return {Window}\t\t\tReturns window instance.\n     */\n    function popup(url, name, width, height, options)\n    {\n        var x = (screen.width - width) / 2,\n            y = (screen.height - height) / 2\n            ;\n\n        options +=\t', left=' + x +\n            ', top=' + y +\n            ', width=' + width +\n            ', height=' + height\n        ;\n        options = options.replace(/^,/, '');\n\n        var win = window.open(url, name, options);\n        win.focus();\n        return win;\n    };\n\n    /**\n     * Adds event handler to the target object.\n     * @param {Object} obj\t\tTarget object.\n     * @param {String} type\t\tName of the event.\n     * @param {Function} func\tHandling function.\n     */\n    function attachEvent(obj, type, func, scope)\n    {\n        function handler(e)\n        {\n            e = e || window.event;\n\n            if (!e.target)\n            {\n                e.target = e.srcElement;\n                e.preventDefault = function()\n                {\n                    this.returnValue = false;\n                };\n            }\n\n            func.call(scope || window, e);\n        };\n\n        if (obj.attachEvent)\n        {\n            obj.attachEvent('on' + type, handler);\n        }\n        else\n        {\n            obj.addEventListener(type, handler, false);\n        }\n    };\n\n    /**\n     * Displays an alert.\n     * @param {String} str String to display.\n     */\n    function alert(str)\n    {\n        window.alert(sh.config.strings.alert + str);\n    };\n\n    /**\n     * Finds a brush by its alias.\n     *\n     * @param {String} alias\t\tBrush alias.\n     * @param {Boolean} showAlert\tSuppresses the alert if false.\n     * @return {Brush}\t\t\t\tReturns bursh constructor if found, null otherwise.\n     */\n    function findBrush(alias, showAlert)\n    {\n        var brushes = sh.vars.discoveredBrushes,\n            result = null\n            ;\n\n        if (brushes == null)\n        {\n            brushes = {};\n\n            // Find all brushes\n            for (var brush in sh.brushes)\n            {\n                var info = sh.brushes[brush],\n                    aliases = info.aliases\n                    ;\n\n                if (aliases == null)\n                    continue;\n\n                // keep the brush name\n                info.brushName = brush.toLowerCase();\n\n                for (var i = 0; i < aliases.length; i++)\n                    brushes[aliases[i]] = brush;\n            }\n\n            sh.vars.discoveredBrushes = brushes;\n        }\n\n        result = sh.brushes[brushes[alias]];\n\n        if (result == null && showAlert)\n            alert(sh.config.strings.noBrush + alias);\n\n        return result;\n    };\n\n    /**\n     * Executes a callback on each line and replaces each line with result from the callback.\n     * @param {Object} str\t\t\tInput string.\n     * @param {Object} callback\t\tCallback function taking one string argument and returning a string.\n     */\n    function eachLine(str, callback)\n    {\n        var lines = splitLines(str);\n\n        for (var i = 0; i < lines.length; i++)\n            lines[i] = callback(lines[i], i);\n\n        // include \\r to enable copy-paste on windows (ie8) without getting everything on one line\n        return lines.join('\\r\\n');\n    };\n\n    /**\n     * This is a special trim which only removes first and last empty lines\n     * and doesn't affect valid leading space on the first line.\n     *\n     * @param {String} str   Input string\n     * @return {String}      Returns string without empty first and last lines.\n     */\n    function trimFirstAndLastLines(str)\n    {\n        return str.replace(/^[ ]*[\\n]+|[\\n]*[ ]*$/g, '');\n    };\n\n    /**\n     * Parses key/value pairs into hash object.\n     *\n     * Understands the following formats:\n     * - name: word;\n     * - name: [word, word];\n     * - name: \"string\";\n     * - name: 'string';\n     *\n     * For example:\n     *   name1: value; name2: [value, value]; name3: 'value'\n     *\n     * @param {String} str    Input string.\n     * @return {Object}       Returns deserialized object.\n     */\n    function parseParams(str)\n    {\n        var match,\n            result = {},\n            arrayRegex = new XRegExp(\"^\\\\[(?<values>(.*?))\\\\]$\"),\n            regex = new XRegExp(\n                \"(?<name>[\\\\w-]+)\" +\n                    \"\\\\s*:\\\\s*\" +\n                    \"(?<value>\" +\n                    \"[\\\\w-%#]+|\" +\t\t// word\n                    \"\\\\[.*?\\\\]|\" +\t\t// [] array\n                    '\".*?\"|' +\t\t\t// \"\" string\n                    \"'.*?'\" +\t\t\t// '' string\n                    \")\\\\s*;?\",\n                \"g\"\n            )\n            ;\n\n        while ((match = regex.exec(str)) != null)\n        {\n            var value = match.value\n                    .replace(/^['\"]|['\"]$/g, '') // strip quotes from end of strings\n                ;\n\n            // try to parse array value\n            if (value != null && arrayRegex.test(value))\n            {\n                var m = arrayRegex.exec(value);\n                value = m.values.length > 0 ? m.values.split(/\\s*,\\s*/) : [];\n            }\n\n            result[match.name] = value;\n        }\n\n        return result;\n    };\n\n    /**\n     * Wraps each line of the string into <code/> tag with given style applied to it.\n     *\n     * @param {String} str   Input string.\n     * @param {String} css   Style name to apply to the string.\n     * @return {String}      Returns input string with each line surrounded by <span/> tag.\n     */\n    function wrapLinesWithCode(str, css)\n    {\n        if (str == null || str.length == 0 || str == '\\n')\n            return str;\n\n        str = str.replace(/</g, '&lt;');\n\n        // Replace two or more sequential spaces with &nbsp; leaving last space untouched.\n        str = str.replace(/ {2,}/g, function(m)\n        {\n            var spaces = '';\n\n            for (var i = 0; i < m.length - 1; i++)\n                spaces += sh.config.space;\n\n            return spaces + ' ';\n        });\n\n        // Split each line and apply <span class=\"...\">...</span> to them so that\n        // leading spaces aren't included.\n        if (css != null)\n            str = eachLine(str, function(line)\n            {\n                if (line.length == 0)\n                    return '';\n\n                var spaces = '';\n\n                line = line.replace(/^(&nbsp;| )+/, function(s)\n                {\n                    spaces = s;\n                    return '';\n                });\n\n                if (line.length == 0)\n                    return spaces;\n\n                return spaces + '<code class=\"' + css + '\">' + line + '</code>';\n            });\n\n        return str;\n    };\n\n    /**\n     * Pads number with zeros until it's length is the same as given length.\n     *\n     * @param {Number} number\tNumber to pad.\n     * @param {Number} length\tMax string length with.\n     * @return {String}\t\t\tReturns a string padded with proper amount of '0'.\n     */\n    function padNumber(number, length)\n    {\n        var result = number.toString();\n\n        while (result.length < length)\n            result = '0' + result;\n\n        return result;\n    };\n\n    /**\n     * Replaces tabs with spaces.\n     *\n     * @param {String} code\t\tSource code.\n     * @param {Number} tabSize\tSize of the tab.\n     * @return {String}\t\t\tReturns code with all tabs replaces by spaces.\n     */\n    function processTabs(code, tabSize)\n    {\n        var tab = '';\n\n        for (var i = 0; i < tabSize; i++)\n            tab += ' ';\n\n        return code.replace(/\\t/g, tab);\n    };\n\n    /**\n     * Replaces tabs with smart spaces.\n     *\n     * @param {String} code    Code to fix the tabs in.\n     * @param {Number} tabSize Number of spaces in a column.\n     * @return {String}        Returns code with all tabs replaces with roper amount of spaces.\n     */\n    function processSmartTabs(code, tabSize)\n    {\n        var lines = splitLines(code),\n            tab = '\\t',\n            spaces = ''\n            ;\n\n        // Create a string with 1000 spaces to copy spaces from...\n        // It's assumed that there would be no indentation longer than that.\n        for (var i = 0; i < 50; i++)\n            spaces += '                    '; // 20 spaces * 50\n\n        // This function inserts specified amount of spaces in the string\n        // where a tab is while removing that given tab.\n        function insertSpaces(line, pos, count)\n        {\n            return line.substr(0, pos)\n                + spaces.substr(0, count)\n                + line.substr(pos + 1, line.length) // pos + 1 will get rid of the tab\n                ;\n        };\n\n        // Go through all the lines and do the 'smart tabs' magic.\n        code = eachLine(code, function(line)\n        {\n            if (line.indexOf(tab) == -1)\n                return line;\n\n            var pos = 0;\n\n            while ((pos = line.indexOf(tab)) != -1)\n            {\n                // This is pretty much all there is to the 'smart tabs' logic.\n                // Based on the position within the line and size of a tab,\n                // calculate the amount of spaces we need to insert.\n                var spaces = tabSize - pos % tabSize;\n                line = insertSpaces(line, pos, spaces);\n            }\n\n            return line;\n        });\n\n        return code;\n    };\n\n    /**\n     * Performs various string fixes based on configuration.\n     */\n    function fixInputString(str)\n    {\n        var br = /<br\\s*\\/?>|&lt;br\\s*\\/?&gt;/gi;\n\n        if (sh.config.bloggerMode == true)\n            str = str.replace(br, '\\n');\n\n        if (sh.config.stripBrs == true)\n            str = str.replace(br, '');\n\n        return str;\n    };\n\n    /**\n     * Removes all white space at the begining and end of a string.\n     *\n     * @param {String} str   String to trim.\n     * @return {String}      Returns string without leading and following white space characters.\n     */\n    function trim(str)\n    {\n        return str.replace(/^\\s+|\\s+$/g, '');\n    };\n\n    /**\n     * Unindents a block of text by the lowest common indent amount.\n     * @param {String} str   Text to unindent.\n     * @return {String}      Returns unindented text block.\n     */\n    function unindent(str)\n    {\n        var lines = splitLines(fixInputString(str)),\n            indents = new Array(),\n            regex = /^\\s*/,\n            min = 1000\n            ;\n\n        // go through every line and check for common number of indents\n        for (var i = 0; i < lines.length && min > 0; i++)\n        {\n            var line = lines[i];\n\n            if (trim(line).length == 0)\n                continue;\n\n            var matches = regex.exec(line);\n\n            // In the event that just one line doesn't have leading white space\n            // we can't unindent anything, so bail completely.\n            if (matches == null)\n                return str;\n\n            min = Math.min(matches[0].length, min);\n        }\n\n        // trim minimum common number of white space from the begining of every line\n        if (min > 0)\n            for (var i = 0; i < lines.length; i++)\n                lines[i] = lines[i].substr(min);\n\n        return lines.join('\\n');\n    };\n\n    /**\n     * Callback method for Array.sort() which sorts matches by\n     * index position and then by length.\n     *\n     * @param {Match} m1\tLeft object.\n     * @param {Match} m2    Right object.\n     * @return {Number}     Returns -1, 0 or -1 as a comparison result.\n     */\n    function matchesSortCallback(m1, m2)\n    {\n        // sort matches by index first\n        if(m1.index < m2.index)\n            return -1;\n        else if(m1.index > m2.index)\n            return 1;\n        else\n        {\n            // if index is the same, sort by length\n            if(m1.length < m2.length)\n                return -1;\n            else if(m1.length > m2.length)\n                return 1;\n        }\n\n        return 0;\n    };\n\n    /**\n     * Executes given regular expression on provided code and returns all\n     * matches that are found.\n     *\n     * @param {String} code    Code to execute regular expression on.\n     * @param {Object} regex   Regular expression item info from <code>regexList</code> collection.\n     * @return {Array}         Returns a list of Match objects.\n     */\n    function getMatches(code, regexInfo)\n    {\n        function defaultAdd(match, regexInfo)\n        {\n            return match[0];\n        };\n\n        var index = 0,\n            match = null,\n            matches = [],\n            func = regexInfo.func ? regexInfo.func : defaultAdd\n            ;\n\n        while((match = regexInfo.regex.exec(code)) != null)\n        {\n            var resultMatch = func(match, regexInfo);\n\n            if (typeof(resultMatch) == 'string')\n                resultMatch = [new sh.Match(resultMatch, match.index, regexInfo.css)];\n\n            matches = matches.concat(resultMatch);\n        }\n\n        return matches;\n    };\n\n    /**\n     * Turns all URLs in the code into <a/> tags.\n     * @param {String} code Input code.\n     * @return {String} Returns code with </a> tags.\n     */\n    function processUrls(code)\n    {\n        var gt = /(.*)((&gt;|&lt;).*)/;\n\n        return code.replace(sh.regexLib.url, function(m)\n        {\n            var suffix = '',\n                match = null\n                ;\n\n            // We include &lt; and &gt; in the URL for the common cases like <http://google.com>\n            // The problem is that they get transformed into &lt;http://google.com&gt;\n            // Where as &gt; easily looks like part of the URL string.\n\n            if (match = gt.exec(m))\n            {\n                m = match[1];\n                suffix = match[2];\n            }\n\n            return '<a href=\"' + m + '\">' + m + '</a>' + suffix;\n        });\n    };\n\n    /**\n     * Finds all <SCRIPT TYPE=\"syntaxhighlighter\" /> elementss.\n     * @return {Array} Returns array of all found SyntaxHighlighter tags.\n     */\n    function getSyntaxHighlighterScriptTags()\n    {\n        var tags = document.getElementsByTagName('script'),\n            result = []\n            ;\n\n        for (var i = 0; i < tags.length; i++)\n            if (tags[i].type == 'syntaxhighlighter')\n                result.push(tags[i]);\n\n        return result;\n    };\n\n    /**\n     * Strips <![CDATA[]]> from <SCRIPT /> content because it should be used\n     * there in most cases for XHTML compliance.\n     * @param {String} original\tInput code.\n     * @return {String} Returns code without leading <![CDATA[]]> tags.\n     */\n    function stripCData(original)\n    {\n        var left = '<![CDATA[',\n            right = ']]>',\n        // for some reason IE inserts some leading blanks here\n            copy = trim(original),\n            changed = false,\n            leftLength = left.length,\n            rightLength = right.length\n            ;\n\n        if (copy.indexOf(left) == 0)\n        {\n            copy = copy.substring(leftLength);\n            changed = true;\n        }\n\n        var copyLength = copy.length;\n\n        if (copy.indexOf(right) == copyLength - rightLength)\n        {\n            copy = copy.substring(0, copyLength - rightLength);\n            changed = true;\n        }\n\n        return changed ? copy : original;\n    };\n\n\n    /**\n     * Quick code mouse double click handler.\n     */\n    function quickCodeHandler(e)\n    {\n        var target = e.target,\n            highlighterDiv = findParentElement(target, '.syntaxhighlighter'),\n            container = findParentElement(target, '.container'),\n            textarea = document.createElement('textarea'),\n            highlighter\n            ;\n\n        if (!container || !highlighterDiv || findElement(container, 'textarea'))\n            return;\n\n        highlighter = getHighlighterById(highlighterDiv.id);\n\n        // add source class name\n        addClass(highlighterDiv, 'source');\n\n        // Have to go over each line and grab it's text, can't just do it on the\n        // container because Firefox loses all \\n where as Webkit doesn't.\n        var lines = container.childNodes,\n            code = []\n            ;\n\n        for (var i = 0; i < lines.length; i++)\n            code.push(lines[i].innerText || lines[i].textContent);\n\n        // using \\r instead of \\r or \\r\\n makes this work equally well on IE, FF and Webkit\n        code = code.join('\\r');\n\n        // For Webkit browsers, replace nbsp with a breaking space\n        code = code.replace(/\\u00a0/g, \" \");\n\n        // inject <textarea/> tag\n        textarea.appendChild(document.createTextNode(code));\n        container.appendChild(textarea);\n\n        // preselect all text\n        textarea.focus();\n        textarea.select();\n\n        // set up handler for lost focus\n        attachEvent(textarea, 'blur', function(e)\n        {\n            textarea.parentNode.removeChild(textarea);\n            removeClass(highlighterDiv, 'source');\n        });\n    };\n\n    /**\n     * Match object.\n     */\n    sh.Match = function(value, index, css)\n    {\n        this.value = value;\n        this.index = index;\n        this.length = value.length;\n        this.css = css;\n        this.brushName = null;\n    };\n\n    sh.Match.prototype.toString = function()\n    {\n        return this.value;\n    };\n\n    /**\n     * Simulates HTML code with a scripting language embedded.\n     *\n     * @param {String} scriptBrushName Brush name of the scripting language.\n     */\n    sh.HtmlScript = function(scriptBrushName)\n    {\n        var brushClass = findBrush(scriptBrushName),\n            scriptBrush,\n            xmlBrush = new sh.brushes.Xml(),\n            bracketsRegex = null,\n            ref = this,\n            methodsToExpose = 'getDiv getHtml init'.split(' ')\n            ;\n\n        if (brushClass == null)\n            return;\n\n        scriptBrush = new brushClass();\n\n        for(var i = 0; i < methodsToExpose.length; i++)\n            // make a closure so we don't lose the name after i changes\n            (function() {\n                var name = methodsToExpose[i];\n\n                ref[name] = function()\n                {\n                    return xmlBrush[name].apply(xmlBrush, arguments);\n                };\n            })();\n\n        if (scriptBrush.htmlScript == null)\n        {\n            alert(sh.config.strings.brushNotHtmlScript + scriptBrushName);\n            return;\n        }\n\n        xmlBrush.regexList.push(\n            { regex: scriptBrush.htmlScript.code, func: process }\n        );\n\n        function offsetMatches(matches, offset)\n        {\n            for (var j = 0; j < matches.length; j++)\n                matches[j].index += offset;\n        }\n\n        function process(match, info)\n        {\n            var code = match.code,\n                matches = [],\n                regexList = scriptBrush.regexList,\n                offset = match.index + match.left.length,\n                htmlScript = scriptBrush.htmlScript,\n                result\n                ;\n\n            // add all matches from the code\n            for (var i = 0; i < regexList.length; i++)\n            {\n                result = getMatches(code, regexList[i]);\n                offsetMatches(result, offset);\n                matches = matches.concat(result);\n            }\n\n            // add left script bracket\n            if (htmlScript.left != null && match.left != null)\n            {\n                result = getMatches(match.left, htmlScript.left);\n                offsetMatches(result, match.index);\n                matches = matches.concat(result);\n            }\n\n            // add right script bracket\n            if (htmlScript.right != null && match.right != null)\n            {\n                result = getMatches(match.right, htmlScript.right);\n                offsetMatches(result, match.index + match[0].lastIndexOf(match.right));\n                matches = matches.concat(result);\n            }\n\n            for (var j = 0; j < matches.length; j++)\n                matches[j].brushName = brushClass.brushName;\n\n            return matches;\n        }\n    };\n\n    /**\n     * Main Highlither class.\n     * @constructor\n     */\n    sh.Highlighter = function()\n    {\n        // not putting any code in here because of the prototype inheritance\n    };\n\n    sh.Highlighter.prototype = {\n        /**\n         * Returns value of the parameter passed to the highlighter.\n         * @param {String} name\t\t\t\tName of the parameter.\n         * @param {Object} defaultValue\t\tDefault value.\n         * @return {Object}\t\t\t\t\tReturns found value or default value otherwise.\n         */\n        getParam: function(name, defaultValue)\n        {\n            var result = this.params[name];\n            return toBoolean(result == null ? defaultValue : result);\n        },\n\n        /**\n         * Shortcut to document.createElement().\n         * @param {String} name\t\tName of the element to create (DIV, A, etc).\n         * @return {HTMLElement}\tReturns new HTML element.\n         */\n        create: function(name)\n        {\n            return document.createElement(name);\n        },\n\n        /**\n         * Applies all regular expression to the code and stores all found\n         * matches in the `this.matches` array.\n         * @param {Array} regexList\t\tList of regular expressions.\n         * @param {String} code\t\t\tSource code.\n         * @return {Array}\t\t\t\tReturns list of matches.\n         */\n        findMatches: function(regexList, code)\n        {\n            var result = [];\n\n            if (regexList != null)\n                for (var i = 0; i < regexList.length; i++)\n                    // BUG: length returns len+1 for array if methods added to prototype chain (oising@gmail.com)\n                    if (typeof (regexList[i]) == \"object\")\n                        result = result.concat(getMatches(code, regexList[i]));\n\n            // sort and remove nested the matches\n            return this.removeNestedMatches(result.sort(matchesSortCallback));\n        },\n\n        /**\n         * Checks to see if any of the matches are inside of other matches.\n         * This process would get rid of highligted strings inside comments,\n         * keywords inside strings and so on.\n         */\n        removeNestedMatches: function(matches)\n        {\n            // Optimized by Jose Prado (http://joseprado.com)\n            for (var i = 0; i < matches.length; i++)\n            {\n                if (matches[i] === null)\n                    continue;\n\n                var itemI = matches[i],\n                    itemIEndPos = itemI.index + itemI.length\n                    ;\n\n                for (var j = i + 1; j < matches.length && matches[i] !== null; j++)\n                {\n                    var itemJ = matches[j];\n\n                    if (itemJ === null)\n                        continue;\n                    else if (itemJ.index > itemIEndPos)\n                        break;\n                    else if (itemJ.index == itemI.index && itemJ.length > itemI.length)\n                        matches[i] = null;\n                    else if (itemJ.index >= itemI.index && itemJ.index < itemIEndPos)\n                        matches[j] = null;\n                }\n            }\n\n            return matches;\n        },\n\n        /**\n         * Creates an array containing integer line numbers starting from the 'first-line' param.\n         * @return {Array} Returns array of integers.\n         */\n        figureOutLineNumbers: function(code)\n        {\n            var lines = [],\n                firstLine = parseInt(this.getParam('first-line'))\n                ;\n\n            eachLine(code, function(line, index)\n            {\n                lines.push(index + firstLine);\n            });\n\n            return lines;\n        },\n\n        /**\n         * Determines if specified line number is in the highlighted list.\n         */\n        isLineHighlighted: function(lineNumber)\n        {\n            var list = this.getParam('highlight', []);\n\n            if (typeof(list) != 'object' && list.push == null)\n                list = [ list ];\n\n            return indexOf(list, lineNumber.toString()) != -1;\n        },\n\n        /**\n         * Generates HTML markup for a single line of code while determining alternating line style.\n         * @param {Integer} lineNumber\tLine number.\n         * @param {String} code Line\tHTML markup.\n         * @return {String}\t\t\t\tReturns HTML markup.\n         */\n        getLineHtml: function(lineIndex, lineNumber, code)\n        {\n            var classes = [\n                'line',\n                'number' + lineNumber,\n                'index' + lineIndex,\n                'alt' + (lineNumber % 2 == 0 ? 1 : 2).toString()\n            ];\n\n            if (this.isLineHighlighted(lineNumber))\n                classes.push('highlighted');\n\n            if (lineNumber == 0)\n                classes.push('break');\n\n            return '<div class=\"' + classes.join(' ') + '\">' + code + '</div>';\n        },\n\n        /**\n         * Generates HTML markup for line number column.\n         * @param {String} code\t\t\tComplete code HTML markup.\n         * @param {Array} lineNumbers\tCalculated line numbers.\n         * @return {String}\t\t\t\tReturns HTML markup.\n         */\n        getLineNumbersHtml: function(code, lineNumbers)\n        {\n            var html = '',\n                count = splitLines(code).length,\n                firstLine = parseInt(this.getParam('first-line')),\n                pad = this.getParam('pad-line-numbers')\n                ;\n\n            if (pad == true)\n                pad = (firstLine + count - 1).toString().length;\n            else if (isNaN(pad) == true)\n                pad = 0;\n\n            for (var i = 0; i < count; i++)\n            {\n                var lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i,\n                    code = lineNumber == 0 ? sh.config.space : padNumber(lineNumber, pad)\n                    ;\n\n                html += this.getLineHtml(i, lineNumber, code);\n            }\n\n            return html;\n        },\n\n        /**\n         * Splits block of text into individual DIV lines.\n         * @param {String} code\t\t\tCode to highlight.\n         * @param {Array} lineNumbers\tCalculated line numbers.\n         * @return {String}\t\t\t\tReturns highlighted code in HTML form.\n         */\n        getCodeLinesHtml: function(html, lineNumbers)\n        {\n            html = trim(html);\n\n            var lines = splitLines(html),\n                padLength = this.getParam('pad-line-numbers'),\n                firstLine = parseInt(this.getParam('first-line')),\n                html = '',\n                brushName = this.getParam('brush')\n                ;\n\n            for (var i = 0; i < lines.length; i++)\n            {\n                var line = lines[i],\n                    indent = /^(&nbsp;|\\s)+/.exec(line),\n                    spaces = null,\n                    lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i;\n                ;\n\n                if (indent != null)\n                {\n                    spaces = indent[0].toString();\n                    line = line.substr(spaces.length);\n                    spaces = spaces.replace(' ', sh.config.space);\n                }\n\n                line = trim(line);\n\n                if (line.length == 0)\n                    line = sh.config.space;\n\n                html += this.getLineHtml(\n                    i,\n                    lineNumber,\n                    (spaces != null ? '<code class=\"' + brushName + ' spaces\">' + spaces + '</code>' : '') + line\n                );\n            }\n\n            return html;\n        },\n\n        /**\n         * Returns HTML for the table title or empty string if title is null.\n         */\n        getTitleHtml: function(title)\n        {\n            return title ? '<caption>' + title + '</caption>' : '';\n        },\n\n        /**\n         * Finds all matches in the source code.\n         * @param {String} code\t\tSource code to process matches in.\n         * @param {Array} matches\tDiscovered regex matches.\n         * @return {String} Returns formatted HTML with processed mathes.\n         */\n        getMatchesHtml: function(code, matches)\n        {\n            var pos = 0,\n                result = '',\n                brushName = this.getParam('brush', '')\n                ;\n\n            function getBrushNameCss(match)\n            {\n                var result = match ? (match.brushName || brushName) : brushName;\n                return result ? result + ' ' : '';\n            };\n\n            // Finally, go through the final list of matches and pull the all\n            // together adding everything in between that isn't a match.\n            for (var i = 0; i < matches.length; i++)\n            {\n                var match = matches[i],\n                    matchBrushName\n                    ;\n\n                if (match === null || match.length === 0)\n                    continue;\n\n                matchBrushName = getBrushNameCss(match);\n\n                result += wrapLinesWithCode(code.substr(pos, match.index - pos), matchBrushName + 'plain')\n                    + wrapLinesWithCode(match.value, matchBrushName + match.css)\n                ;\n\n                pos = match.index + match.length + (match.offset || 0);\n            }\n\n            // don't forget to add whatever's remaining in the string\n            result += wrapLinesWithCode(code.substr(pos), getBrushNameCss() + 'plain');\n\n            return result;\n        },\n\n        /**\n         * Generates HTML markup for the whole syntax highlighter.\n         * @param {String} code Source code.\n         * @return {String} Returns HTML markup.\n         */\n        getHtml: function(code)\n        {\n            var html = '',\n                classes = [ 'syntaxhighlighter' ],\n                tabSize,\n                matches,\n                lineNumbers\n                ;\n\n            // process light mode\n            if (this.getParam('light') == true)\n                this.params.toolbar = this.params.gutter = false;\n\n            className = 'syntaxhighlighter';\n\n            if (this.getParam('collapse') == true)\n                classes.push('collapsed');\n\n            if ((gutter = this.getParam('gutter')) == false)\n                classes.push('nogutter');\n\n            // add custom user style name\n            classes.push(this.getParam('class-name'));\n\n            // add brush alias to the class name for custom CSS\n            classes.push(this.getParam('brush'));\n\n            code = trimFirstAndLastLines(code)\n                .replace(/\\r/g, ' ') // IE lets these buggers through\n            ;\n\n            tabSize = this.getParam('tab-size');\n\n            // replace tabs with spaces\n            code = this.getParam('smart-tabs') == true\n                ? processSmartTabs(code, tabSize)\n                : processTabs(code, tabSize)\n            ;\n\n            // unindent code by the common indentation\n            if (this.getParam('unindent'))\n                code = unindent(code);\n\n            if (gutter)\n                lineNumbers = this.figureOutLineNumbers(code);\n\n            // find matches in the code using brushes regex list\n            matches = this.findMatches(this.regexList, code);\n            // processes found matches into the html\n            html = this.getMatchesHtml(code, matches);\n            // finally, split all lines so that they wrap well\n            html = this.getCodeLinesHtml(html, lineNumbers);\n\n            // finally, process the links\n            if (this.getParam('auto-links'))\n                html = processUrls(html);\n\n            if (typeof(navigator) != 'undefined' && navigator.userAgent && navigator.userAgent.match(/MSIE/))\n                classes.push('ie');\n\n            html =\n                '<div id=\"' + getHighlighterId(this.id) + '\" class=\"' + classes.join(' ') + '\">'\n                    + (this.getParam('toolbar') ? sh.toolbar.getHtml(this) : '')\n                    + '<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">'\n                    + this.getTitleHtml(this.getParam('title'))\n                    + '<tbody>'\n                    + '<tr>'\n                    + (gutter ? '<td class=\"gutter\">' + this.getLineNumbersHtml(code) + '</td>' : '')\n                    + '<td class=\"code\">'\n                    + '<div class=\"container\">'\n                    + html\n                    + '</div>'\n                    + '</td>'\n                    + '</tr>'\n                    + '</tbody>'\n                    + '</table>'\n                    + '</div>'\n            ;\n\n            return html;\n        },\n\n        /**\n         * Highlights the code and returns complete HTML.\n         * @param {String} code     Code to highlight.\n         * @return {Element}        Returns container DIV element with all markup.\n         */\n        getDiv: function(code)\n        {\n            if (code === null)\n                code = '';\n\n            this.code = code;\n\n            var div = this.create('div');\n\n            // create main HTML\n            div.innerHTML = this.getHtml(code);\n\n            // set up click handlers\n            if (this.getParam('toolbar'))\n                attachEvent(findElement(div, '.toolbar'), 'click', sh.toolbar.handler);\n\n            if (this.getParam('quick-code'))\n                attachEvent(findElement(div, '.code'), 'dblclick', quickCodeHandler);\n\n            return div;\n        },\n\n        /**\n         * Initializes the highlighter/brush.\n         *\n         * Constructor isn't used for initialization so that nothing executes during necessary\n         * `new SyntaxHighlighter.Highlighter()` call when setting up brush inheritence.\n         *\n         * @param {Hash} params Highlighter parameters.\n         */\n        init: function(params)\n        {\n            this.id = guid();\n\n            // register this instance in the highlighters list\n            storeHighlighter(this);\n\n            // local params take precedence over defaults\n            this.params = merge(sh.defaults, params || {})\n\n            // process light mode\n            if (this.getParam('light') == true)\n                this.params.toolbar = this.params.gutter = false;\n        },\n\n        /**\n         * Converts space separated list of keywords into a regular expression string.\n         * @param {String} str    Space separated keywords.\n         * @return {String}       Returns regular expression string.\n         */\n        getKeywords: function(str)\n        {\n            str = str\n                .replace(/^\\s+|\\s+$/g, '')\n                .replace(/\\s+/g, '|')\n            ;\n\n            return '\\\\b(?:' + str + ')\\\\b';\n        },\n\n        /**\n         * Makes a brush compatible with the `html-script` functionality.\n         * @param {Object} regexGroup Object containing `left` and `right` regular expressions.\n         */\n        forHtmlScript: function(regexGroup)\n        {\n            var regex = { 'end' : regexGroup.right.source };\n\n            if(regexGroup.eof)\n                regex.end = \"(?:(?:\" + regex.end + \")|$)\";\n\n            this.htmlScript = {\n                left : { regex: regexGroup.left, css: 'script' },\n                right : { regex: regexGroup.right, css: 'script' },\n                code : new XRegExp(\n                    \"(?<left>\" + regexGroup.left.source + \")\" +\n                        \"(?<code>.*?)\" +\n                        \"(?<right>\" + regex.end + \")\",\n                    \"sgi\"\n                )\n            };\n        }\n    }; // end of Highlighter\n\n    return sh;\n}(); // end of anonymous function\n\n// CommonJS\ntypeof(exports) != 'undefined' ? exports.SyntaxHighlighter = SyntaxHighlighter : null;\n\n;(function()\n{\n    // CommonJS\n    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n    function Brush()\n    {\n        // Created by Peter Atoria @ http://iAtoria.com\n\n        var inits \t =  'class interface function package';\n\n        var keywords =\t'-Infinity ...rest Array as AS3 Boolean break case catch const continue Date decodeURI ' +\n                'decodeURIComponent default delete do dynamic each else encodeURI encodeURIComponent escape ' +\n                'extends false final finally flash_proxy for get if implements import in include Infinity ' +\n                'instanceof int internal is isFinite isNaN isXMLName label namespace NaN native new null ' +\n                'Null Number Object object_proxy override parseFloat parseInt private protected public ' +\n                'return set static String super switch this throw true try typeof uint undefined unescape ' +\n                'use void while with'\n            ;\n\n        this.regexList = [\n            { regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t// one line comments\n            { regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t// multiline comments\n            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// double quoted strings\n            { regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// single quoted strings\n            { regex: /\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,\t\t\t\tcss: 'value' },\t\t\t// numbers\n            { regex: new RegExp(this.getKeywords(inits), 'gm'),\t\t\tcss: 'color3' },\t\t// initializations\n            { regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n            { regex: new RegExp('var', 'gm'),\t\t\t\t\t\t\tcss: 'variable' },\t\t// variable\n            { regex: new RegExp('trace', 'gm'),\t\t\t\t\t\t\tcss: 'color1' }\t\t\t// trace\n        ];\n\n        this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags);\n    };\n\n    Brush.prototype\t= new SyntaxHighlighter.Highlighter();\n    Brush.aliases\t= ['actionscript3', 'as3'];\n\n    SyntaxHighlighter.brushes.AS3 = Brush;\n\n    // CommonJS\n    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n\n;(function()\n{\n    // CommonJS\n    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n    function Brush()\n    {\n        // AppleScript brush by David Chambers\n        // http://davidchambersdesign.com/\n        var keywords   = 'after before beginning continue copy each end every from return get global in local named of set some that the then times to where whose with without';\n        var ordinals   = 'first second third fourth fifth sixth seventh eighth ninth tenth last front back middle';\n        var specials   = 'activate add alias AppleScript ask attachment boolean class constant delete duplicate empty exists false id integer list make message modal modified new no paragraph pi properties quit real record remove rest result reveal reverse run running save string true word yes';\n\n        this.regexList = [\n\n            { regex: /(--|#).*$/gm,\n                css: 'comments' },\n\n            { regex: /\\(\\*(?:[\\s\\S]*?\\(\\*[\\s\\S]*?\\*\\))*[\\s\\S]*?\\*\\)/gm, // support nested comments\n                css: 'comments' },\n\n            { regex: /\"[\\s\\S]*?\"/gm,\n                css: 'string' },\n\n            { regex: /(?:,|:|¬|'s\\b|\\(|\\)|\\{|\\}|«|\\b\\w*»)/g,\n                css: 'color1' },\n\n            { regex: /(-)?(\\d)+(\\.(\\d)?)?(E\\+(\\d)+)?/g, // numbers\n                css: 'color1' },\n\n            { regex: /(?:&(amp;|gt;|lt;)?|=|� |>|<|≥|>=|≤|<=|\\*|\\+|-|\\/|÷|\\^)/g,\n                css: 'color2' },\n\n            { regex: /\\b(?:and|as|div|mod|not|or|return(?!\\s&)(ing)?|equals|(is(n't| not)? )?equal( to)?|does(n't| not) equal|(is(n't| not)? )?(greater|less) than( or equal( to)?)?|(comes|does(n't| not) come) (after|before)|is(n't| not)?( in)? (back|front) of|is(n't| not)? behind|is(n't| not)?( (in|contained by))?|does(n't| not) contain|contain(s)?|(start|begin|end)(s)? with|((but|end) )?(consider|ignor)ing|prop(erty)?|(a )?ref(erence)?( to)?|repeat (until|while|with)|((end|exit) )?repeat|((else|end) )?if|else|(end )?(script|tell|try)|(on )?error|(put )?into|(of )?(it|me)|its|my|with (timeout( of)?|transaction)|end (timeout|transaction))\\b/g,\n                css: 'keyword' },\n\n            { regex: /\\b\\d+(st|nd|rd|th)\\b/g, // ordinals\n                css: 'keyword' },\n\n            { regex: /\\b(?:about|above|against|around|at|below|beneath|beside|between|by|(apart|aside) from|(instead|out) of|into|on(to)?|over|since|thr(ough|u)|under)\\b/g,\n                css: 'color3' },\n\n            { regex: /\\b(?:adding folder items to|after receiving|choose( ((remote )?application|color|folder|from list|URL))?|clipboard info|set the clipboard to|(the )?clipboard|entire contents|display(ing| (alert|dialog|mode))?|document( (edited|file|nib name))?|file( (name|type))?|(info )?for|giving up after|(name )?extension|quoted form|return(ed)?|second(?! item)(s)?|list (disks|folder)|text item(s| delimiters)?|(Unicode )?text|(disk )?item(s)?|((current|list) )?view|((container|key) )?window|with (data|icon( (caution|note|stop))?|parameter(s)?|prompt|properties|seed|title)|case|diacriticals|hyphens|numeric strings|punctuation|white space|folder creation|application(s( folder)?| (processes|scripts position|support))?|((desktop )?(pictures )?|(documents|downloads|favorites|home|keychain|library|movies|music|public|scripts|sites|system|users|utilities|workflows) )folder|desktop|Folder Action scripts|font(s| panel)?|help|internet plugins|modem scripts|(system )?preferences|printer descriptions|scripting (additions|components)|shared (documents|libraries)|startup (disk|items)|temporary items|trash|on server|in AppleTalk zone|((as|long|short) )?user name|user (ID|locale)|(with )?password|in (bundle( with identifier)?|directory)|(close|open for) access|read|write( permission)?|(g|s)et eof|using( delimiters)?|starting at|default (answer|button|color|country code|entr(y|ies)|identifiers|items|name|location|script editor)|hidden( answer)?|open(ed| (location|untitled))?|error (handling|reporting)|(do( shell)?|load|run|store) script|administrator privileges|altering line endings|get volume settings|(alert|boot|input|mount|output|set) volume|output muted|(fax|random )?number|round(ing)?|up|down|toward zero|to nearest|as taught in school|system (attribute|info)|((AppleScript( Studio)?|system) )?version|(home )?directory|(IPv4|primary Ethernet) address|CPU (type|speed)|physical memory|time (stamp|to GMT)|replacing|ASCII (character|number)|localized string|from table|offset|summarize|beep|delay|say|(empty|multiple) selections allowed|(of|preferred) type|invisibles|showing( package contents)?|editable URL|(File|FTP|News|Media|Web) [Ss]ervers|Telnet hosts|Directory services|Remote applications|waiting until completion|saving( (in|to))?|path (for|to( (((current|frontmost) )?application|resource))?)|POSIX (file|path)|(background|RGB) color|(OK|cancel) button name|cancel button|button(s)?|cubic ((centi)?met(re|er)s|yards|feet|inches)|square ((kilo)?met(re|er)s|miles|yards|feet)|(centi|kilo)?met(re|er)s|miles|yards|feet|inches|lit(re|er)s|gallons|quarts|(kilo)?grams|ounces|pounds|degrees (Celsius|Fahrenheit|Kelvin)|print( (dialog|settings))?|clos(e(able)?|ing)|(de)?miniaturized|miniaturizable|zoom(ed|able)|attribute run|action (method|property|title)|phone|email|((start|end)ing|home) page|((birth|creation|current|custom|modification) )?date|((((phonetic )?(first|last|middle))|computer|host|maiden|related) |nick)?name|aim|icq|jabber|msn|yahoo|address(es)?|save addressbook|should enable action|city|country( code)?|formatte(r|d address)|(palette )?label|state|street|zip|AIM [Hh]andle(s)?|my card|select(ion| all)?|unsaved|(alpha )?value|entr(y|ies)|group|(ICQ|Jabber|MSN) handle|person|people|company|department|icon image|job title|note|organization|suffix|vcard|url|copies|collating|pages (across|down)|request print time|target( printer)?|((GUI Scripting|Script menu) )?enabled|show Computer scripts|(de)?activated|awake from nib|became (key|main)|call method|of (class|object)|center|clicked toolbar item|closed|for document|exposed|(can )?hide|idle|keyboard (down|up)|event( (number|type))?|launch(ed)?|load (image|movie|nib|sound)|owner|log|mouse (down|dragged|entered|exited|moved|up)|move|column|localization|resource|script|register|drag (info|types)|resigned (active|key|main)|resiz(e(d)?|able)|right mouse (down|dragged|up)|scroll wheel|(at )?index|should (close|open( untitled)?|quit( after last window closed)?|zoom)|((proposed|screen) )?bounds|show(n)?|behind|in front of|size (mode|to fit)|update(d| toolbar item)?|was (hidden|miniaturized)|will (become active|close|finish launching|hide|miniaturize|move|open|quit|(resign )?active|((maximum|minimum|proposed) )?size|show|zoom)|bundle|data source|movie|pasteboard|sound|tool(bar| tip)|(color|open|save) panel|coordinate system|frontmost|main( (bundle|menu|window))?|((services|(excluded from )?windows) )?menu|((executable|frameworks|resource|scripts|shared (frameworks|support)) )?path|(selected item )?identifier|data|content(s| view)?|character(s)?|click count|(command|control|option|shift) key down|context|delta (x|y|z)|key( code)?|location|pressure|unmodified characters|types|(first )?responder|playing|(allowed|selectable) identifiers|allows customization|(auto saves )?configuration|visible|image( name)?|menu form representation|tag|user(-| )defaults|associated file name|(auto|needs) display|current field editor|floating|has (resize indicator|shadow)|hides when deactivated|level|minimized (image|title)|opaque|position|release when closed|sheet|title(d)?)\\b/g,\n                css: 'color3' },\n\n            { regex: new RegExp(this.getKeywords(specials), 'gm'), css: 'color3' },\n            { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' },\n            { regex: new RegExp(this.getKeywords(ordinals), 'gm'), css: 'keyword' }\n        ];\n    };\n\n    Brush.prototype = new SyntaxHighlighter.Highlighter();\n    Brush.aliases = ['applescript'];\n\n    SyntaxHighlighter.brushes.AppleScript = Brush;\n\n    // CommonJS\n    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'if fi then elif else for do done until while break continue case esac function return in eq ne ge le';\n\t\tvar commands =  'alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chroot' +\n\t\t\t\t\t\t'cksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df ' +\n\t\t\t\t\t\t'diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval ' +\n\t\t\t\t\t\t'exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format ' +\n\t\t\t\t\t\t'free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig ' +\n\t\t\t\t\t\t'import install join kill less let ln local locate logname logout look lpc lpr lprint ' +\n\t\t\t\t\t\t'lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools ' +\n\t\t\t\t\t\t'mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap ' +\n\t\t\t\t\t\t'printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice ' +\n\t\t\t\t\t\t'remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown ' +\n\t\t\t\t\t\t'sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time ' +\n\t\t\t\t\t\t'times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias ' +\n\t\t\t\t\t\t'uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir ' +\n\t\t\t\t\t\t'vi watch wc whereis which who whoami Wget xargs yes'\n\t\t\t\t\t\t;\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /^#!.*$/gm,\t\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor bold' },\n\t\t\t{ regex: /\\/[\\w-\\/]+/gm,\t\t\t\t\t\t\t\t\t\tcss: 'plain' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\t\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(this.getKeywords(commands), 'gm'),\t\t\tcss: 'functions' }\t\t// commands\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['bash', 'shell', 'sh'];\n\n\tSyntaxHighlighter.brushes.Bash = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Jen\n\t\t// http://www.jensbits.com/2009/05/14/coldfusion-brush-for-syntaxhighlighter-plus\n\t\n\t\tvar funcs\t=\t'Abs ACos AddSOAPRequestHeader AddSOAPResponseHeader AjaxLink AjaxOnLoad ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ' + \n\t\t\t\t\t\t'ArrayInsertAt ArrayIsDefined ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArraySet ArraySort ArraySum ArraySwap ArrayToList ' + \n\t\t\t\t\t\t'Asc ASin Atn BinaryDecode BinaryEncode BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN BitSHRN BitXor ' + \n\t\t\t\t\t\t'Ceiling CharsetDecode CharsetEncode Chr CJustify Compare CompareNoCase Cos CreateDate CreateDateTime CreateObject ' + \n\t\t\t\t\t\t'CreateODBCDate CreateODBCDateTime CreateODBCTime CreateTime CreateTimeSpan CreateUUID DateAdd DateCompare DateConvert ' + \n\t\t\t\t\t\t'DateDiff DateFormat DatePart Day DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear DE DecimalFormat DecrementValue ' + \n\t\t\t\t\t\t'Decrypt DecryptBinary DeleteClientVariable DeserializeJSON DirectoryExists DollarFormat DotNetToCFType Duplicate Encrypt ' + \n\t\t\t\t\t\t'EncryptBinary Evaluate Exp ExpandPath FileClose FileCopy FileDelete FileExists FileIsEOF FileMove FileOpen FileRead ' + \n\t\t\t\t\t\t'FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute FileSetLastModified FileWrite Find FindNoCase FindOneOf ' + \n\t\t\t\t\t\t'FirstDayOfMonth Fix FormatBaseN GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList GetBaseTemplatePath ' + \n\t\t\t\t\t\t'GetClientVariablesList GetComponentMetaData GetContextRoot GetCurrentTemplatePath GetDirectoryFromPath GetEncoding ' + \n\t\t\t\t\t\t'GetException GetFileFromPath GetFileInfo GetFunctionList GetGatewayHelper GetHttpRequestData GetHttpTimeString ' + \n\t\t\t\t\t\t'GetK2ServerDocCount GetK2ServerDocCountLimit GetLocale GetLocaleDisplayName GetLocalHostIP GetMetaData GetMetricData ' + \n\t\t\t\t\t\t'GetPageContext GetPrinterInfo GetProfileSections GetProfileString GetReadableImageFormats GetSOAPRequest GetSOAPRequestHeader ' + \n\t\t\t\t\t\t'GetSOAPResponse GetSOAPResponseHeader GetTempDirectory GetTempFile GetTemplatePath GetTickCount GetTimeZoneInfo GetToken ' + \n\t\t\t\t\t\t'GetUserRoles GetWriteableImageFormats Hash Hour HTMLCodeFormat HTMLEditFormat IIf ImageAddBorder ImageBlur ImageClearRect ' + \n\t\t\t\t\t\t'ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect ImageDrawCubicCurve ImageDrawLine ImageDrawLines ImageDrawOval ' + \n\t\t\t\t\t\t'ImageDrawPoint ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob ImageGetBufferedImage ' + \n\t\t\t\t\t\t'ImageGetEXIFTag ImageGetHeight ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay ImagePaste ' + \n\t\t\t\t\t\t'ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit ImageSetAntialiasing ImageSetBackgroundColor ' + \n\t\t\t\t\t\t'ImageSetDrawingColor ImageSetDrawingStroke ImageSetDrawingTransparency ImageSharpen ImageShear ImageShearDrawingAxis ImageTranslate ' + \n\t\t\t\t\t\t'ImageTranslateDrawingAxis ImageWrite ImageWriteBase64 ImageXORDrawingMode IncrementValue InputBaseN Insert Int IsArray IsBinary ' + \n\t\t\t\t\t\t'IsBoolean IsCustomFunction IsDate IsDDX IsDebugMode IsDefined IsImage IsImageFile IsInstanceOf IsJSON IsLeapYear IsLocalHost ' + \n\t\t\t\t\t\t'IsNumeric IsNumericDate IsObject IsPDFFile IsPDFObject IsQuery IsSimpleValue IsSOAPRequest IsStruct IsUserInAnyRole IsUserInRole ' + \n\t\t\t\t\t\t'IsUserLoggedIn IsValid IsWDDX IsXML IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot JavaCast JSStringFormat LCase Left Len ' + \n\t\t\t\t\t\t'ListAppend ListChangeDelims ListContains ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst ListGetAt ListInsertAt ' + \n\t\t\t\t\t\t'ListLast ListLen ListPrepend ListQualify ListRest ListSetAt ListSort ListToArray ListValueCount ListValueCountNoCase LJustify Log ' + \n\t\t\t\t\t\t'Log10 LSCurrencyFormat LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime ' + \n\t\t\t\t\t\t'LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Max Mid Min Minute Month MonthAsString Now NumberFormat ParagraphFormat ParseDateTime ' + \n\t\t\t\t\t\t'Pi PrecisionEvaluate PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow QueryConvertForGrid QueryNew QuerySetCell QuotedValueList Rand ' + \n\t\t\t\t\t\t'Randomize RandRange REFind REFindNoCase ReleaseComObject REMatch REMatchNoCase RemoveChars RepeatString Replace ReplaceList ReplaceNoCase ' + \n\t\t\t\t\t\t'REReplace REReplaceNoCase Reverse Right RJustify Round RTrim Second SendGatewayMessage SerializeJSON SetEncoding SetLocale SetProfileString ' + \n\t\t\t\t\t\t'SetVariable Sgn Sin Sleep SpanExcluding SpanIncluding Sqr StripCR StructAppend StructClear StructCopy StructCount StructDelete StructFind ' + \n\t\t\t\t\t\t'StructFindKey StructFindValue StructGet StructInsert StructIsEmpty StructKeyArray StructKeyExists StructKeyList StructKeyList StructNew ' + \n\t\t\t\t\t\t'StructSort StructUpdate Tan TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase URLDecode URLEncodedFormat URLSessionFormat Val ' + \n\t\t\t\t\t\t'ValueList VerifyClient Week Wrap Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform ' + \n\t\t\t\t\t\t'XmlValidate Year YesNoFormat';\n\n\t\tvar keywords =\t'cfabort cfajaximport cfajaxproxy cfapplet cfapplication cfargument cfassociate cfbreak cfcache cfcalendar ' + \n\t\t\t\t\t\t'cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection cfcomponent cfcontent cfcookie cfdbinfo ' + \n\t\t\t\t\t\t'cfdefaultcase cfdirectory cfdiv cfdocument cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror ' + \n\t\t\t\t\t\t'cfexchangecalendar cfexchangeconnection cfexchangecontact cfexchangefilter cfexchangemail cfexchangetask ' + \n\t\t\t\t\t\t'cfexecute cfexit cffeed cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid cfgridcolumn ' + \n\t\t\t\t\t\t'cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif cfimage cfimport cfinclude cfindex ' + \n\t\t\t\t\t\t'cfinput cfinsert cfinterface cfinvoke cfinvokeargument cflayout cflayoutarea cfldap cflocation cflock cflog ' + \n\t\t\t\t\t\t'cflogin cfloginuser cflogout cfloop cfmail cfmailparam cfmailpart cfmenu cfmenuitem cfmodule cfNTauthenticate ' + \n\t\t\t\t\t\t'cfobject cfobjectcache cfoutput cfparam cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod cfpop ' + \n\t\t\t\t\t\t'cfpresentation cfpresentationslide cfpresenter cfprint cfprocessingdirective cfprocparam cfprocresult ' + \n\t\t\t\t\t\t'cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow cfreturn cfsavecontent cfschedule ' + \n\t\t\t\t\t\t'cfscript cfsearch cfselect cfset cfsetting cfsilent cfslider cfsprydataset cfstoredproc cfswitch cftable ' + \n\t\t\t\t\t\t'cftextarea cfthread cfthrow cftimer cftooltip cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx ' + \n\t\t\t\t\t\t'cfwindow cfxml cfzip cfzipparam';\n\n\t\tvar operators =\t'all and any between cross in join like not null or outer some';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp('--(.*)$', 'gm'),\t\t\t\t\t\tcss: 'comments' },  // one line and multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.xmlComments,\t\t\tcss: 'comments' },    // single quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },    // double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },    // single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' }, // functions\n\t\t\t{ regex: new RegExp(this.getKeywords(operators), 'gmi'),\tcss: 'color1' },    // operators and such\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\tcss: 'keyword' }    // keyword\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['coldfusion','cf'];\n\t\n\tSyntaxHighlighter.brushes.ColdFusion = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Copyright 2006 Shin, YoungJin\n\t\n\t\tvar datatypes =\t'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' +\n\t\t\t\t\t\t'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' +\n\t\t\t\t\t\t'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' +\n\t\t\t\t\t\t'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' +\n\t\t\t\t\t\t'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' +\n\t\t\t\t\t\t'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' +\n\t\t\t\t\t\t'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' +\n\t\t\t\t\t\t'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' +\n\t\t\t\t\t\t'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' +\n\t\t\t\t\t\t'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' +\n\t\t\t\t\t\t'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' +\n\t\t\t\t\t\t'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' +\n\t\t\t\t\t\t'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' +\n\t\t\t\t\t\t'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' +\n\t\t\t\t\t\t'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' +\n\t\t\t\t\t\t'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM ' +\n\t\t\t\t\t\t'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' +\n\t\t\t\t\t\t'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' +\n\t\t\t\t\t\t'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' +\n\t\t\t\t\t\t'__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' +\n\t\t\t\t\t\t'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' +\n\t\t\t\t\t\t'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' +\n\t\t\t\t\t\t'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' +\n\t\t\t\t\t\t'va_list wchar_t wctrans_t wctype_t wint_t signed';\n\n\t\tvar keywords =\t'auto break case catch class const decltype __finally __exception __try ' +\n\t\t\t\t\t\t'const_cast continue private public protected __declspec ' +\n\t\t\t\t\t\t'default delete deprecated dllexport dllimport do dynamic_cast ' +\n\t\t\t\t\t\t'else enum explicit extern if for friend goto inline ' +\n\t\t\t\t\t\t'mutable naked namespace new noinline noreturn nothrow ' +\n\t\t\t\t\t\t'register reinterpret_cast return selectany ' +\n\t\t\t\t\t\t'sizeof static static_cast struct switch template this ' +\n\t\t\t\t\t\t'thread throw true false try typedef typeid typename union ' +\n\t\t\t\t\t\t'using uuid virtual void volatile whcar_t while';\n\t\t\t\t\t\n\t\tvar functions =\t'assert isalnum isalpha iscntrl isdigit isgraph islower isprint' +\n\t\t\t\t\t\t'ispunct isspace isupper isxdigit tolower toupper errno localeconv ' +\n\t\t\t\t\t\t'setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod ' +\n\t\t\t\t\t\t'frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf ' +\n\t\t\t\t\t\t'longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start ' +\n\t\t\t\t\t\t'clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen ' +\n\t\t\t\t\t\t'fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell ' +\n\t\t\t\t\t\t'fwrite getc getchar gets perror printf putc putchar puts remove ' +\n\t\t\t\t\t\t'rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ' +\n\t\t\t\t\t\t'ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol ' +\n\t\t\t\t\t\t'bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs ' +\n\t\t\t\t\t\t'mbtowc qsort rand realloc srand strtod strtol strtoul system ' +\n\t\t\t\t\t\t'wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr ' +\n\t\t\t\t\t\t'strcmp strcoll strcpy strcspn strerror strlen strncat strncmp ' +\n\t\t\t\t\t\t'strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime ' +\n\t\t\t\t\t\t'clock ctime difftime gmtime localtime mktime strftime time';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^ *#.*/gm,\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\n\t\t\t{ regex: new RegExp(this.getKeywords(datatypes), 'gm'),\t\tcss: 'color1 bold' },\n\t\t\t{ regex: new RegExp(this.getKeywords(functions), 'gm'),\t\tcss: 'functions bold' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword bold' }\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['cpp', 'c'];\n\n\tSyntaxHighlighter.brushes.Cpp = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abstract as base bool break byte case catch char checked class const ' +\n\t\t\t\t\t\t'continue decimal default delegate do double else enum event explicit volatile ' +\n\t\t\t\t\t\t'extern false finally fixed float for foreach get goto if implicit in int ' +\n\t\t\t\t\t\t'interface internal is lock long namespace new null object operator out ' +\n\t\t\t\t\t\t'override params private protected public readonly ref return sbyte sealed set ' +\n\t\t\t\t\t\t'short sizeof stackalloc static string struct switch this throw true try ' +\n\t\t\t\t\t\t'typeof uint ulong unchecked unsafe ushort using virtual void while var ' +\n\t\t\t\t\t\t'from group by into select let where orderby join on equals ascending descending';\n\n\t\tfunction fixComments(match, regexInfo)\n\t\t{\n\t\t\tvar css = (match[0].indexOf(\"///\") == 0)\n\t\t\t\t? 'color1'\n\t\t\t\t: 'comments'\n\t\t\t\t;\n\t\t\t\n\t\t\treturn [new SyntaxHighlighter.Match(match[0], match.index, css)];\n\t\t}\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tfunc : fixComments },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: /@\"(?:[^\"]|\"\")*\"/g,\t\t\t\t\t\t\t\tcss: 'string' },\t\t\t// @-quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^\\s*#.*/gm,\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t\t// c# keyword\n\t\t\t{ regex: /\\bpartial(?=\\s+(?:class|interface|struct)\\b)/g,\tcss: 'keyword' },\t\t\t// contextual keyword: 'partial'\n\t\t\t{ regex: /\\byield(?=\\s+(?:return|break)\\b)/g,\t\t\t\tcss: 'keyword' }\t\t\t// contextual keyword: 'yield'\n\t\t\t];\n\t\t\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['c#', 'c-sharp', 'csharp'];\n\n\tSyntaxHighlighter.brushes.CSharp = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\t\n\t\tfunction getValuesCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';\n\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t// single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t// html colors\n\t\t\t{ regex: /(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)/g,\t\t\t\tcss: 'value' },\t\t// sizes\n\t\t\t{ regex: /!important/g,\t\t\t\t\t\t\t\t\t\tcss: 'color3' },\t// !important\n\t\t\t{ regex: new RegExp(getKeywordsCSS(keywords), 'gm'),\t\tcss: 'keyword' },\t// keywords\n\t\t\t{ regex: new RegExp(getValuesCSS(values), 'g'),\t\t\t\tcss: 'value' },\t\t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\tcss: 'color1' }\t\t// fonts\n\t\t\t];\n\n\t\tthis.forHtmlScript({ \n\t\t\tleft: /(&lt;|<)\\s*style.*?(&gt;|>)/gi, \n\t\t\tright: /(&lt;|<)\\/\\s*style\\s*(&gt;|>)/gi \n\t\t\t});\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['css'];\n\n\tSyntaxHighlighter.brushes.CSS = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' +\n\t\t\t\t\t\t'case char class comp const constructor currency destructor div do double ' +\n\t\t\t\t\t\t'downto else end except exports extended false file finalization finally ' +\n\t\t\t\t\t\t'for function goto if implementation in inherited int64 initialization ' +\n\t\t\t\t\t\t'integer interface is label library longint longword mod nil not object ' +\n\t\t\t\t\t\t'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' +\n\t\t\t\t\t\t'pint64 pointer private procedure program property pshortstring pstring ' +\n\t\t\t\t\t\t'pvariant pwidechar pwidestring protected public published raise real real48 ' +\n\t\t\t\t\t\t'record repeat set shl shortint shortstring shr single smallint string then ' +\n\t\t\t\t\t\t'threadvar to true try type unit until uses val var varirnt while widechar ' +\n\t\t\t\t\t\t'widestring with word write writeln xor';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /\\(\\*[\\s\\S]*?\\*\\)/gm,\t\t\t\t\t\t\t\tcss: 'comments' },  \t// multiline comments (* *)\n\t\t\t{ regex: /{(?!\\$)[\\s\\S]*?}/gm,\t\t\t\t\t\t\t\tcss: 'comments' },  \t// multiline comments { }\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },  \t// one line\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\\{\\$[a-zA-Z]+ .+\\}/g,\t\t\t\t\t\t\t\tcss: 'color1' },\t\t// compiler Directives and Region tags\n\t\t\t{ regex: /\\b[\\d\\.]+\\b/g,\t\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// numbers 12345\n\t\t\t{ regex: /\\$[a-zA-Z0-9]+\\b/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// numbers $F5D3\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\tcss: 'keyword' }\t\t// keyword\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['delphi', 'pascal', 'pas'];\n\n\tSyntaxHighlighter.brushes.Delphi = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tthis.regexList = [\n\t\t\t{ regex: /^\\+\\+\\+ .*$/gm,\tcss: 'color2' },\t// new file\n\t\t\t{ regex: /^\\-\\-\\- .*$/gm,\tcss: 'color2' },\t// old file\n\t\t\t{ regex: /^\\s.*$/gm,\t\tcss: 'color1' },\t// unchanged\n\t\t\t{ regex: /^@@.*@@.*$/gm,\tcss: 'variable' },\t// location\n\t\t\t{ regex: /^\\+.*$/gm,\t\tcss: 'string' },\t// additions\n\t\t\t{ regex: /^\\-.*$/gm,\t\tcss: 'color3' }\t\t// deletions\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['diff', 'patch'];\n\n\tSyntaxHighlighter.brushes.Diff = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Jean-Lou Dupont\n\t\t// http://jldupont.blogspot.com/2009/06/erlang-syntax-highlighter.html  \n\n\t\t// According to: http://erlang.org/doc/reference_manual/introduction.html#1.5\n\t\tvar keywords = 'after and andalso band begin bnot bor bsl bsr bxor '+\n\t\t\t'case catch cond div end fun if let not of or orelse '+\n\t\t\t'query receive rem try when xor'+\n\t\t\t// additional\n\t\t\t' module export import define';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp(\"[A-Z][A-Za-z0-9_]+\", 'g'), \t\t\tcss: 'constants' },\n\t\t\t{ regex: new RegExp(\"\\\\%.+\", 'gm'), \t\t\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: new RegExp(\"\\\\?[A-Za-z0-9_]+\", 'g'), \t\t\t\tcss: 'preprocessor' },\n\t\t\t{ regex: new RegExp(\"[a-z0-9_]+:[a-z0-9_]+\", 'g'), \t\t\tcss: 'functions' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords),\t'gm'),\t\tcss: 'keyword' }\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['erl', 'erlang'];\n\n\tSyntaxHighlighter.brushes.Erland = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Andres Almiray\n\t\t// http://jroller.com/aalmiray/entry/nice_source_code_syntax_highlighter\n\n\t\tvar keywords =\t'as assert break case catch class continue def default do else extends finally ' +\n\t\t\t\t\t\t'if in implements import instanceof interface new package property return switch ' +\n\t\t\t\t\t\t'throw throws try while public protected private static';\n\t\tvar types    =  'void boolean byte char short int long float double';\n\t\tvar constants = 'null';\n\t\tvar methods   = 'allProperties count get size '+\n\t\t\t\t\t\t'collect each eachProperty eachPropertyName eachWithIndex find findAll ' +\n\t\t\t\t\t\t'findIndexOf grep inject max min reverseEach sort ' +\n\t\t\t\t\t\t'asImmutable asSynchronized flatten intersect join pop reverse subMap toList ' +\n\t\t\t\t\t\t'padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize ' +\n\t\t\t\t\t\t'eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText ' +\n\t\t\t\t\t\t'splitEachLine withReader append encodeBase64 decodeBase64 filterLine ' +\n\t\t\t\t\t\t'transformChar transformLine withOutputStream withPrintWriter withStream ' +\n\t\t\t\t\t\t'withStreams withWriter withWriterAppend write writeLine '+\n\t\t\t\t\t\t'dump inspect invokeMethod print println step times upto use waitForOrKill '+\n\t\t\t\t\t\t'getText';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\t\t\t\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\t\t\t\tcss: 'comments' },\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\t\t\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\t\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\"\"\".*\"\"\"/g,\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'string' },\t\t// GStrings\n\t\t\t{ regex: new RegExp('\\\\b([\\\\d]+(\\\\.[\\\\d]+)?|0x[a-f0-9]+)\\\\b', 'gi'),\tcss: 'value' },\t\t\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\t\t\tcss: 'keyword' },\t\t// goovy keyword\n\t\t\t{ regex: new RegExp(this.getKeywords(types), 'gm'),\t\t\t\t\t\tcss: 'color1' },\t\t// goovy/java type\n\t\t\t{ regex: new RegExp(this.getKeywords(constants), 'gm'),\t\t\t\t\tcss: 'constants' },\t\t// constants\n\t\t\t{ regex: new RegExp(this.getKeywords(methods), 'gm'),\t\t\t\t\tcss: 'functions' }\t\t// methods\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['groovy'];\n\n\tSyntaxHighlighter.brushes.Groovy = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abstract assert boolean break byte case catch char class const ' +\n\t\t\t\t\t\t'continue default do double else enum extends ' +\n\t\t\t\t\t\t'false final finally float for goto if implements import ' +\n\t\t\t\t\t\t'instanceof int interface long native new null ' +\n\t\t\t\t\t\t'package private protected public return ' +\n\t\t\t\t\t\t'short static strictfp super switch synchronized this throw throws true ' +\n\t\t\t\t\t\t'transient try void volatile while';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: /\\/\\*([^\\*][\\s\\S]*)?\\*\\//gm,\t\t\t\t\t\tcss: 'comments' },\t \t// multiline comments\n\t\t\t{ regex: /\\/\\*(?!\\*\\/)\\*[\\s\\S]*?\\*\\//gm,\t\t\t\t\tcss: 'preprocessor' },\t// documentation comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,\t\t\t\tcss: 'value' },\t\t\t// numbers\n\t\t\t{ regex: /(?!\\@interface\\b)\\@[\\$\\w]+\\b/g,\t\t\t\t\tcss: 'color1' },\t\t// annotation @anno\n\t\t\t{ regex: /\\@interface\\b/g,\t\t\t\t\t\t\t\t\tcss: 'color2' },\t\t// @interface keyword\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\t\t// java keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript({\n\t\t\tleft\t: /(&lt;|<)%[@!=]?/g, \n\t\t\tright\t: /%(&gt;|>)/g \n\t\t});\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['java'];\n\n\tSyntaxHighlighter.brushes.Java = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Patrick Webster\n\t\t// http://patrickwebster.blogspot.com/2009/04/javafx-brush-for-syntaxhighlighter.html\n\t\tvar datatypes =\t'Boolean Byte Character Double Duration '\n\t\t\t\t\t\t+ 'Float Integer Long Number Short String Void'\n\t\t\t\t\t\t;\n\n\t\tvar keywords = 'abstract after and as assert at before bind bound break catch class '\n\t\t\t\t\t\t+ 'continue def delete else exclusive extends false finally first for from '\n\t\t\t\t\t\t+ 'function if import in indexof init insert instanceof into inverse last '\n\t\t\t\t\t\t+ 'lazy mixin mod nativearray new not null on or override package postinit '\n\t\t\t\t\t\t+ 'protected public public-init public-read replace return reverse sizeof '\n\t\t\t\t\t\t+ 'step super then this throw true try tween typeof var where while with '\n\t\t\t\t\t\t+ 'attribute let private readonly static trigger'\n\t\t\t\t\t\t;\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: /(-?\\.?)(\\b(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[+-]?\\d+)?|0x[a-f\\d]+)\\b\\.?/gi, css: 'color2' },\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(datatypes), 'gm'),\t\tcss: 'variable' },\t// datatypes\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\n\t\t];\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['jfx', 'javafx'];\n\n\tSyntaxHighlighter.brushes.JavaFX = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'break case catch continue ' +\n\t\t\t\t\t\t'default delete do else false  ' +\n\t\t\t\t\t\t'for function if in instanceof ' +\n\t\t\t\t\t\t'new null return super switch ' +\n\t\t\t\t\t\t'this throw true try typeof var while with'\n\t\t\t\t\t\t;\n\n\t\tvar r = SyntaxHighlighter.regexLib;\n\t\t\n\t\tthis.regexList = [\n\t\t\t{ regex: r.multiLineDoubleQuotedString,\t\t\t\t\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: r.multiLineSingleQuotedString,\t\t\t\t\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: r.singleLineCComments,\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: r.multiLineCComments,\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: /\\s*#.*/gm,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\t\t\t// keywords\n\t\t\t];\n\t\n\t\tthis.forHtmlScript(r.scriptScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['js', 'jscript', 'javascript'];\n\n\tSyntaxHighlighter.brushes.JScript = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by David Simmons-Duffin and Marty Kube\n\t\n\t\tvar funcs = \n\t\t\t'abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr ' + \n\t\t\t'chroot close closedir connect cos crypt defined delete each endgrent ' + \n\t\t\t'endhostent endnetent endprotoent endpwent endservent eof exec exists ' + \n\t\t\t'exp fcntl fileno flock fork format formline getc getgrent getgrgid ' + \n\t\t\t'getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr ' + \n\t\t\t'getnetbyname getnetent getpeername getpgrp getppid getpriority ' + \n\t\t\t'getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid ' + \n\t\t\t'getservbyname getservbyport getservent getsockname getsockopt glob ' + \n\t\t\t'gmtime grep hex index int ioctl join keys kill lc lcfirst length link ' + \n\t\t\t'listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd ' + \n\t\t\t'oct open opendir ord pack pipe pop pos print printf prototype push ' + \n\t\t\t'quotemeta rand read readdir readline readlink readpipe recv rename ' + \n\t\t\t'reset reverse rewinddir rindex rmdir scalar seek seekdir select semctl ' + \n\t\t\t'semget semop send setgrent sethostent setnetent setpgrp setpriority ' + \n\t\t\t'setprotoent setpwent setservent setsockopt shift shmctl shmget shmread ' + \n\t\t\t'shmwrite shutdown sin sleep socket socketpair sort splice split sprintf ' + \n\t\t\t'sqrt srand stat study substr symlink syscall sysopen sysread sysseek ' + \n\t\t\t'system syswrite tell telldir time times tr truncate uc ucfirst umask ' + \n\t\t\t'undef unlink unpack unshift utime values vec wait waitpid warn write ' +\n\t\t\t// feature\n\t\t\t'say';\n    \n\t\tvar keywords =  \n\t\t\t'bless caller continue dbmclose dbmopen die do dump else elsif eval exit ' +\n\t\t\t'for foreach goto if import last local my next no our package redo ref ' + \n\t\t\t'require return sub tie tied unless untie until use wantarray while ' +\n\t\t\t// feature\n\t\t\t'given when default ' +\n\t\t\t// Try::Tiny\n\t\t\t'try catch finally ' +\n\t\t\t// Moose\n\t\t\t'has extends with before after around override augment';\n    \n\t\tthis.regexList = [\n\t\t\t{ regex: /(<<|&lt;&lt;)((\\w+)|(['\"])(.+?)\\4)[\\s\\S]+?\\n\\3\\5\\n/g,\tcss: 'string' },\t// here doc (maybe html encoded)\n\t\t\t{ regex: /#.*$/gm,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: /^#!.*\\n/g,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t// shebang\n\t\t\t{ regex: /-?\\w+(?=\\s*=(>|&gt;))/g,\tcss: 'string' }, // fat comma\n\n\t\t\t// is this too much?\n\t\t\t{ regex: /\\bq[qwxr]?\\([\\s\\S]*?\\)/g,\tcss: 'string' }, // quote-like operators ()\n\t\t\t{ regex: /\\bq[qwxr]?\\{[\\s\\S]*?\\}/g,\tcss: 'string' }, // quote-like operators {}\n\t\t\t{ regex: /\\bq[qwxr]?\\[[\\s\\S]*?\\]/g,\tcss: 'string' }, // quote-like operators []\n\t\t\t{ regex: /\\bq[qwxr]?(<|&lt;)[\\s\\S]*?(>|&gt;)/g,\tcss: 'string' }, // quote-like operators <>\n\t\t\t{ regex: /\\bq[qwxr]?([^\\w({<[])[\\s\\S]*?\\1/g,\tcss: 'string' }, // quote-like operators non-paired\n\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\tcss: 'string' },\n\t\t\t// currently ignoring single quote package separator and utf8 names\n\t\t\t{ regex: /(?:&amp;|[$@%*]|\\$#)[a-zA-Z_](\\w+|::)*/g,   \t\tcss: 'variable' },\n\t\t\t{ regex: /\\b__(?:END|DATA)__\\b[\\s\\S]*$/g,\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: /(^|\\n)=\\w[\\s\\S]*?(\\n=cut\\s*\\n|$)/g,\t\t\t\tcss: 'comments' },\t\t// pod\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gm'),\t\tcss: 'functions' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\n\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t\t= ['perl', 'Perl', 'pl'];\n\n\tSyntaxHighlighter.brushes.Perl = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar funcs\t=\t'abs acos acosh addcslashes addslashes ' +\n\t\t\t\t\t\t'array_change_key_case array_chunk array_combine array_count_values array_diff '+\n\t\t\t\t\t\t'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+\n\t\t\t\t\t\t'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+\n\t\t\t\t\t\t'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+\n\t\t\t\t\t\t'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+\n\t\t\t\t\t\t'array_push array_rand array_reduce array_reverse array_search array_shift '+\n\t\t\t\t\t\t'array_slice array_splice array_sum array_udiff array_udiff_assoc '+\n\t\t\t\t\t\t'array_udiff_uassoc array_uintersect array_uintersect_assoc '+\n\t\t\t\t\t\t'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+\n\t\t\t\t\t\t'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+\n\t\t\t\t\t\t'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+\n\t\t\t\t\t\t'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+\n\t\t\t\t\t\t'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+\n\t\t\t\t\t\t'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+\n\t\t\t\t\t\t'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+\n\t\t\t\t\t\t'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+\n\t\t\t\t\t\t'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+\n\t\t\t\t\t\t'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+\n\t\t\t\t\t\t'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+\n\t\t\t\t\t\t'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+\n\t\t\t\t\t\t'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+\n\t\t\t\t\t\t'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+\n\t\t\t\t\t\t'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+\n\t\t\t\t\t\t'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+\n\t\t\t\t\t\t'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+\n\t\t\t\t\t\t'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+\n\t\t\t\t\t\t'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+\n\t\t\t\t\t\t'parse_ini_file parse_str parse_url passthru pathinfo print readlink realpath rewind rewinddir rmdir '+\n\t\t\t\t\t\t'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+\n\t\t\t\t\t\t'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+\n\t\t\t\t\t\t'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+\n\t\t\t\t\t\t'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+\n\t\t\t\t\t\t'strtoupper strtr strval substr substr_compare';\n\n\t\tvar keywords =\t'abstract and array as break case catch cfunction class clone const continue declare default die do ' +\n\t\t\t\t\t\t'else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach ' +\n\t\t\t\t\t\t'function global goto if implements include include_once interface instanceof insteadof namespace new ' +\n\t\t\t\t\t\t'old_function or private protected public return require require_once static switch ' +\n\t\t\t\t\t\t'trait throw try use var while xor ';\n\t\t\n\t\tvar constants\t= '__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: /\\$\\w+/g,\t\t\t\t\t\t\t\t\t\t\tcss: 'variable' },\t\t\t// variables\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' },\t\t\t// common functions\n\t\t\t{ regex: new RegExp(this.getKeywords(constants), 'gmi'),\tcss: 'constants' },\t\t\t// constants\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\t\t\t// keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['php'];\n\n\tSyntaxHighlighter.brushes.Php = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['text', 'plain'];\n\n\tSyntaxHighlighter.brushes.Plain = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Joel 'Jaykul' Bennett, http://PoshCode.org | http://HuddledMasses.org\n\t\tvar keywords =\t'while validateset validaterange validatepattern validatelength validatecount ' +\n\t\t\t\t\t\t'until trap switch return ref process param parameter in if global: '+\n\t\t\t\t\t\t'function foreach for finally filter end elseif else dynamicparam do default ' +\n\t\t\t\t\t\t'continue cmdletbinding break begin alias \\\\? % #script #private #local #global '+\n\t\t\t\t\t\t'mandatory parametersetname position valuefrompipeline ' +\n\t\t\t\t\t\t'valuefrompipelinebypropertyname valuefromremainingarguments helpmessage ';\n\n\t\tvar operators =\t' and as band bnot bor bxor casesensitive ccontains ceq cge cgt cle ' +\n\t\t\t\t\t\t'clike clt cmatch cne cnotcontains cnotlike cnotmatch contains ' +\n\t\t\t\t\t\t'creplace eq exact f file ge gt icontains ieq ige igt ile ilike ilt ' +\n\t\t\t\t\t\t'imatch ine inotcontains inotlike inotmatch ireplace is isnot le like ' +\n\t\t\t\t\t\t'lt match ne not notcontains notlike notmatch or regex replace wildcard';\n\t\t\t\t\t\t\n\t\tvar verbs =\t\t'write where wait use update unregister undo trace test tee take suspend ' +\n\t\t\t\t\t\t'stop start split sort skip show set send select scroll resume restore ' +\n\t\t\t\t\t\t'restart resolve resize reset rename remove register receive read push ' +\n\t\t\t\t\t\t'pop ping out new move measure limit join invoke import group get format ' +\n\t\t\t\t\t\t'foreach export expand exit enter enable disconnect disable debug cxnew ' +\n\t\t\t\t\t\t'copy convertto convertfrom convert connect complete compare clear ' +\n\t\t\t\t\t\t'checkpoint aggregate add';\n\n\t\t// I can't find a way to match the comment based help in multi-line comments, because SH won't highlight in highlights, and javascript doesn't support lookbehind\n\t\tvar commenthelp = ' component description example externalhelp forwardhelpcategory forwardhelptargetname forwardhelptargetname functionality inputs link notes outputs parameter remotehelprunspace role synopsis';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp('^\\\\s*#[#\\\\s]*\\\\.('+this.getKeywords(commenthelp)+').*$', 'gim'),\t\t\tcss: 'preprocessor help bold' },\t\t// comment-based help\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t\t\t\t// one line comments\n\t\t\t{ regex: /(&lt;|<)#[\\s\\S]*?#(&gt;|>)/gm,\t\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments here' },\t\t\t\t\t// multi-line comments\n\t\t\t\n\t\t\t{ regex: new RegExp('@\"\\\\n[\\\\s\\\\S]*?\\\\n\"@', 'gm'),\t\t\t\t\t\t\t\t\t\t\t\tcss: 'script string here' },\t\t\t// double quoted here-strings\n\t\t\t{ regex: new RegExp(\"@'\\\\n[\\\\s\\\\S]*?\\\\n'@\", 'gm'),\t\t\t\t\t\t\t\t\t\t\t\tcss: 'script string single here' },\t\t// single quoted here-strings\n\t\t\t{ regex: new RegExp('\"(?:\\\\$\\\\([^\\\\)]*\\\\)|[^\"]|`\"|\"\")*[^`]\"','g'),\t\t\t\t\t\t\t\tcss: 'string' },\t\t\t\t\t\t// double quoted strings\n\t\t\t{ regex: new RegExp(\"'(?:[^']|'')*'\", 'g'),\t\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'string single' },\t\t\t\t\t// single quoted strings\n\t\t\t\n\t\t\t{ regex: new RegExp('[\\\\$|@|@@](?:(?:global|script|private|env):)?[A-Z0-9_]+', 'gi'),\t\t\tcss: 'variable' },\t\t\t\t\t\t// $variables\n\t\t\t{ regex: new RegExp('(?:\\\\b'+verbs.replace(/ /g, '\\\\b|\\\\b')+')-[a-zA-Z_][a-zA-Z0-9_]*', 'gmi'),\tcss: 'functions' },\t\t\t\t\t\t// functions and cmdlets\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\t\t\t\t\t\t\t\t\t\tcss: 'keyword' },\t\t\t\t\t\t// keywords\n\t\t\t{ regex: new RegExp('-'+this.getKeywords(operators), 'gmi'),\t\t\t\t\t\t\t\t\tcss: 'operator value' },\t\t\t\t// operators\n\t\t\t{ regex: new RegExp('\\\\[[A-Z_\\\\[][A-Z0-9_. `,\\\\[\\\\]]*\\\\]', 'gi'),\t\t\t\t\t\t\t\tcss: 'constants' },\t\t\t\t\t\t// .Net [Type]s\n\t\t\t{ regex: new RegExp('\\\\s+-(?!'+this.getKeywords(operators)+')[a-zA-Z_][a-zA-Z0-9_]*', 'gmi'),\tcss: 'color1' },\t\t\t\t\t\t// parameters\t  \n\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['powershell', 'ps', 'posh'];\n\n\tSyntaxHighlighter.brushes.PowerShell = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Gheorghe Milas and Ahmad Sherif\n\t\n\t\tvar keywords =  'and assert break class continue def del elif else ' +\n\t\t\t\t\t\t'except exec finally for from global if import in is ' +\n\t\t\t\t\t\t'lambda not or pass print raise return try yield while';\n\n\t\tvar funcs = '__import__ abs all any apply basestring bin bool buffer callable ' +\n\t\t\t\t\t'chr classmethod cmp coerce compile complex delattr dict dir ' +\n\t\t\t\t\t'divmod enumerate eval execfile file filter float format frozenset ' +\n\t\t\t\t\t'getattr globals hasattr hash help hex id input int intern ' +\n\t\t\t\t\t'isinstance issubclass iter len list locals long map max min next ' +\n\t\t\t\t\t'object oct open ord pow print property range raw_input reduce ' +\n\t\t\t\t\t'reload repr reversed round set setattr slice sorted staticmethod ' +\n\t\t\t\t\t'str sum super tuple type type unichr unicode vars xrange zip';\n\n\t\tvar special =  'None True False self cls class_';\n\n\t\tthis.regexList = [\n\t\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' },\n\t\t\t\t{ regex: /^\\s*@\\w+/gm, \t\t\t\t\t\t\t\t\t\tcss: 'decorator' },\n\t\t\t\t{ regex: /(['\\\"]{3})([^\\1])*?\\1/gm, \t\t\t\t\t\tcss: 'comments' },\n\t\t\t\t{ regex: /\"(?!\")(?:\\.|\\\\\\\"|[^\\\"\"\\n])*\"/gm, \t\t\t\t\tcss: 'string' },\n\t\t\t\t{ regex: /'(?!')(?:\\.|(\\\\\\')|[^\\''\\n])*'/gm, \t\t\t\tcss: 'string' },\n\t\t\t\t{ regex: /\\+|\\-|\\*|\\/|\\%|=|==/gm, \t\t\t\t\t\t\tcss: 'keyword' },\n\t\t\t\t{ regex: /\\b\\d+\\.?\\w*/g, \t\t\t\t\t\t\t\t\tcss: 'value' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'), \t\tcss: 'keyword' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(special), 'gm'), \t\tcss: 'color1' }\n\t\t\t\t];\n\t\t\t\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['py', 'python'];\n\n\tSyntaxHighlighter.brushes.Python = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Erik Peterson.\n\t\n\t\tvar keywords =\t'alias and BEGIN begin break case class def define_method defined do each else elsif ' +\n\t\t\t\t\t\t'END end ensure false for if in module new next nil not or raise redo rescue retry return ' +\n\t\t\t\t\t\t'self super then throw true undef unless until when while yield';\n\n\t\tvar builtins =\t'Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload ' +\n\t\t\t\t\t\t'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ' +\n\t\t\t\t\t\t'ThreadGroup Thread Time TrueClass';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: /\\b[A-Z0-9_]+\\b/g,\t\t\t\t\t\t\t\t\tcss: 'constants' },\t\t// constants\n\t\t\t{ regex: /:[a-z][A-Za-z0-9_]*/g,\t\t\t\t\t\t\tcss: 'color2' },\t\t// symbols\n\t\t\t{ regex: /(\\$|@@|@)\\w+/g,\t\t\t\t\t\t\t\t\tcss: 'variable bold' },\t// $global, @instance, and @@class variables\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(this.getKeywords(builtins), 'gm'),\t\tcss: 'color1' }\t\t\t// builtins\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['ruby', 'rails', 'ror', 'rb'];\n\n\tSyntaxHighlighter.brushes.Ruby = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\t\n\t\tfunction getValuesCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';\n\t\t\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\t\t\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\t\t\n\t\tvar statements\t\t= '!important !default';\n\t\tvar preprocessor\t= '@import @extend @debug @warn @if @for @while @mixin @include';\n\t\t\n\t\tvar r = SyntaxHighlighter.regexLib;\n\t\t\n\t\tthis.regexList = [\n\t\t\t{ regex: r.multiLineCComments,\t\t\t\t\t\t\t\tcss: 'comments' },\t\t// multiline comments\n\t\t\t{ regex: r.singleLineCComments,\t\t\t\t\t\t\t\tcss: 'comments' },\t\t// singleline comments\n\t\t\t{ regex: r.doubleQuotedString,\t\t\t\t\t\t\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: r.singleQuotedString,\t\t\t\t\t\t\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// html colors\n\t\t\t{ regex: /\\b(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)\\b/g,\t\t\tcss: 'value' },\t\t\t// sizes\n\t\t\t{ regex: /\\$\\w+/g,\t\t\t\t\t\t\t\t\t\t\tcss: 'variable' },\t\t// variables\n\t\t\t{ regex: new RegExp(this.getKeywords(statements), 'g'),\t\tcss: 'color3' },\t\t// statements\n\t\t\t{ regex: new RegExp(this.getKeywords(preprocessor), 'g'),\tcss: 'preprocessor' },\t// preprocessor\n\t\t\t{ regex: new RegExp(getKeywordsCSS(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(getValuesCSS(values), 'g'),\t\t\t\tcss: 'value' },\t\t\t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\tcss: 'color1' }\t\t\t// fonts\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['sass', 'scss'];\n\n\tSyntaxHighlighter.brushes.Sass = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Yegor Jbanov and David Bernard.\n\t\n\t\tvar keywords =\t'val sealed case def true trait implicit forSome import match object null finally super ' +\n\t\t\t\t\t\t'override try lazy for var catch throw type extends class while with new final yield abstract ' +\n\t\t\t\t\t\t'else do if return protected private this package false';\n\n\t\tvar keyops =\t'[_:=><%#@]+';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\t\t\tcss: 'comments' },\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\t\t\tcss: 'comments' },\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString,\tcss: 'string' },\t// multi-line strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,    css: 'string' },\t// double-quoted string\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\t\tcss: 'string' },\t// strings\n\t\t\t{ regex: /0x[a-f0-9]+|\\d+(\\.\\d+)?/gi,\t\t\t\t\t\t\t\tcss: 'value' },\t\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\t\tcss: 'keyword' },\t// keywords\n\t\t\t{ regex: new RegExp(keyops, 'gm'),\t\t\t\t\t\t\t\t\tcss: 'keyword' }\t// scala keyword\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['scala'];\n\n\tSyntaxHighlighter.brushes.Scala = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar funcs\t=\t'abs avg case cast coalesce convert count current_timestamp ' +\n\t\t\t\t\t\t'current_user day isnull left lower month nullif replace right ' +\n\t\t\t\t\t\t'session_user space substring sum system_user upper user year';\n\n\t\tvar keywords =\t'absolute action add after alter as asc at authorization begin bigint ' +\n\t\t\t\t\t\t'binary bit by cascade char character check checkpoint close collate ' +\n\t\t\t\t\t\t'column commit committed connect connection constraint contains continue ' +\n\t\t\t\t\t\t'create cube current current_date current_time cursor database date ' +\n\t\t\t\t\t\t'deallocate dec decimal declare default delete desc distinct double drop ' +\n\t\t\t\t\t\t'dynamic else end end-exec escape except exec execute false fetch first ' +\n\t\t\t\t\t\t'float for force foreign forward free from full function global goto grant ' +\n\t\t\t\t\t\t'group grouping having hour ignore index inner insensitive insert instead ' +\n\t\t\t\t\t\t'int integer intersect into is isolation key last level load local max min ' +\n\t\t\t\t\t\t'minute modify move name national nchar next no numeric of off on only ' +\n\t\t\t\t\t\t'open option order out output partial password precision prepare primary ' +\n\t\t\t\t\t\t'prior privileges procedure public read real references relative repeatable ' +\n\t\t\t\t\t\t'restrict return returns revoke rollback rollup rows rule schema scroll ' +\n\t\t\t\t\t\t'second section select sequence serializable set size smallint static ' +\n\t\t\t\t\t\t'statistics table temp temporary then time timestamp to top transaction ' +\n\t\t\t\t\t\t'translation trigger true truncate uncommitted union unique update values ' +\n\t\t\t\t\t\t'varchar varying view when where with work';\n\n\t\tvar operators =\t'all and any between cross in join like not null or outer some';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /--(.*)$/gm,\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line and multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString,\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\t\t\tcss: 'color2' },\t\t\t// functions\n\t\t\t{ regex: new RegExp(this.getKeywords(operators), 'gmi'),\t\t\tcss: 'color1' },\t\t\t// operators and such\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\t\t\tcss: 'keyword' }\t\t\t// keyword\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['sql'];\n\n\tSyntaxHighlighter.brushes.Sql = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' +\n\t\t\t\t\t\t'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' +\n\t\t\t\t\t\t'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' +\n\t\t\t\t\t\t'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' +\n\t\t\t\t\t\t'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' +\n\t\t\t\t\t\t'Function Get GetType GoSub GoTo Handles If Implements Imports In ' +\n\t\t\t\t\t\t'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' +\n\t\t\t\t\t\t'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' +\n\t\t\t\t\t\t'NotInheritable NotOverridable Object On Option Optional Or OrElse ' +\n\t\t\t\t\t\t'Overloads Overridable Overrides ParamArray Preserve Private Property ' +\n\t\t\t\t\t\t'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' +\n\t\t\t\t\t\t'Return Select Set Shadows Shared Short Single Static Step Stop String ' +\n\t\t\t\t\t\t'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' +\n\t\t\t\t\t\t'Variant When While With WithEvents WriteOnly Xor';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /'.*$/gm,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^\\s*#.*$/gm,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\t\t\t// vb keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['vb', 'vbnet'];\n\n\tSyntaxHighlighter.brushes.Vb = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction process(match, regexInfo)\n\t\t{\n\t\t\tvar constructor = SyntaxHighlighter.Match,\n\t\t\t\tcode = match[0],\n\t\t\t\ttag = new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(?<name>[:\\\\w-\\\\.]+)', 'xg').exec(code),\n\t\t\t\tresult = []\n\t\t\t\t;\n\t\t\n\t\t\tif (match.attributes != null) \n\t\t\t{\n\t\t\t\tvar attributes,\n\t\t\t\t\tregex = new XRegExp('(?<name> [\\\\w:\\\\-\\\\.]+)' +\n\t\t\t\t\t\t\t\t\t\t'\\\\s*=\\\\s*' +\n\t\t\t\t\t\t\t\t\t\t'(?<value> \".*?\"|\\'.*?\\'|\\\\w+)',\n\t\t\t\t\t\t\t\t\t\t'xg');\n\n\t\t\t\twhile ((attributes = regex.exec(code)) != null) \n\t\t\t\t{\n\t\t\t\t\tresult.push(new constructor(attributes.name, match.index + attributes.index, 'color1'));\n\t\t\t\t\tresult.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tag != null)\n\t\t\t\tresult.push(\n\t\t\t\t\tnew constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword')\n\t\t\t\t);\n\n\t\t\treturn result;\n\t\t}\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: new XRegExp('(\\\\&lt;|<)\\\\!\\\\[[\\\\w\\\\s]*?\\\\[(.|\\\\s)*?\\\\]\\\\](\\\\&gt;|>)', 'gm'),\t\t\tcss: 'color2' },\t// <![ ... [ ... ]]>\n\t\t\t{ regex: SyntaxHighlighter.regexLib.xmlComments,\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t// <!-- ... -->\n\t\t\t{ regex: new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(\\\\w+)(?<attributes>.*?)[\\\\s\\\\/\\\\?]*(&gt;|>)', 'sg'), func: process }\n\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['xml', 'xhtml', 'xslt', 'html'];\n\n\tSyntaxHighlighter.brushes.Xml = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/SyntaxHighlighter/shCoreDefault.css",
    "content": ".syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter,.syntaxhighlighter td,.syntaxhighlighter tr,.syntaxhighlighter tbody,.syntaxhighlighter thead,.syntaxhighlighter caption,.syntaxhighlighter textarea{-moz-border-radius:0 0 0 0!important;-webkit-border-radius:0 0 0 0!important;background:none!important;border:0!important;bottom:auto!important;float:none!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Monaco,Menlo,Consolas,\"Courier New\",monospace;font-weight:normal!important;font-style:normal!important;min-height:inherit!important;min-height:auto!important;font-size:13px!important}.syntaxhighlighter{width:100%!important;margin:.3em 0 .3em 0!important;position:relative!important;overflow:auto!important;background-color:#f5f5f5!important;border:1px solid #ccc!important;border-radius:4px!important;border-collapse:separate!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .bold{font-weight:bold!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .gutter div{white-space:pre!important;word-wrap:normal}.syntaxhighlighter caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter td.code{width:100%!important}.syntaxhighlighter td.code .container{position:relative!important}.syntaxhighlighter td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;border:none!important;background:white!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0 .8em!important;font-size:1em!important;position:static!important;width:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar span.title{display:inline!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;text-decoration:none!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0 1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:none!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content{color:black!important}.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.printing a{text-decoration:none!important}.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:black!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:blue!important}.syntaxhighlighter.printing .keyword{color:#ff7800!important;font-weight:bold!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .script{font-weight:bold!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:black!important}.syntaxhighlighter{background-color:#f5f5f5!important}.syntaxhighlighter .line.highlighted.number{color:black!important}.syntaxhighlighter caption{color:black!important}.syntaxhighlighter .gutter{color:#afafaf!important;background-color:#f7f7f9!important;border-right:1px solid #e1e1e8!important;padding:9.5px 0 9.5px 9.5px!important;border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;user-select:none!important;-moz-user-select:none!important;-webkit-user-select:none!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:white!important}.syntaxhighlighter.printing .line .content{border:none!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:blue!important;background:white!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:blue!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:white!important;background:#6ce26c!important;border:none!important}.syntaxhighlighter .toolbar a{color:white!important}.syntaxhighlighter .toolbar a:hover{color:black!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:black!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:blue!important}.syntaxhighlighter .keyword{color:#ff7800!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{font-weight:bold!important;color:#ff7800!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}.syntaxhighlighter .keyword{font-weight:bold!important}"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/codemirror/codemirror.css",
    "content": ".CodeMirror {\n    line-height: 1em;\n    font-family: monospace;\n}\n\n.CodeMirror-scroll {\n    overflow: auto;\n    height: 300px;\n    /* This is needed to prevent an IE[67] bug where the scrolled content\n       is visible outside of the scrolling box. */\n    position: relative;\n}\n\n.CodeMirror-gutter {\n    position: absolute; left: 0; top: 0;\n    z-index: 10;\n    background-color: #f7f7f7;\n    border-right: 1px solid #eee;\n    min-width: 2em;\n    height: 100%;\n}\n.CodeMirror-gutter-text {\n    color: #aaa;\n    text-align: right;\n    padding: .4em .2em .4em .4em;\n    white-space: pre !important;\n}\n.CodeMirror-lines {\n    padding: .4em;\n}\n\n.CodeMirror pre {\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    -o-border-radius: 0;\n    border-radius: 0;\n    border-width: 0; margin: 0; padding: 0; background: transparent;\n    font-family: inherit;\n    font-size: inherit;\n    padding: 0; margin: 0;\n    white-space: pre;\n    word-wrap: normal;\n}\n\n.CodeMirror-wrap pre {\n    word-wrap: break-word;\n    white-space: pre-wrap;\n}\n.CodeMirror-wrap .CodeMirror-scroll {\n    overflow-x: hidden;\n}\n\n.CodeMirror textarea {\n    outline: none !important;\n}\n\n.CodeMirror pre.CodeMirror-cursor {\n    z-index: 10;\n    position: absolute;\n    visibility: hidden;\n    border-left: 1px solid black;\n}\n.CodeMirror-focused pre.CodeMirror-cursor {\n    visibility: visible;\n}\n\nspan.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused span.CodeMirror-selected { background: #d2dcf8; }\n\n.CodeMirror-searching {background: #ffa;}\n\n/* Default theme */\n\n.cm-s-default span.cm-keyword {color: #708;}\n.cm-s-default span.cm-atom {color: #219;}\n.cm-s-default span.cm-number {color: #164;}\n.cm-s-default span.cm-def {color: #00f;}\n.cm-s-default span.cm-variable {color: black;}\n.cm-s-default span.cm-variable-2 {color: #05a;}\n.cm-s-default span.cm-variable-3 {color: #085;}\n.cm-s-default span.cm-property {color: black;}\n.cm-s-default span.cm-operator {color: black;}\n.cm-s-default span.cm-comment {color: #a50;}\n.cm-s-default span.cm-string {color: #a11;}\n.cm-s-default span.cm-string-2 {color: #f50;}\n.cm-s-default span.cm-meta {color: #555;}\n.cm-s-default span.cm-error {color: #f00;}\n.cm-s-default span.cm-qualifier {color: #555;}\n.cm-s-default span.cm-builtin {color: #30a;}\n.cm-s-default span.cm-bracket {color: #cc7;}\n.cm-s-default span.cm-tag {color: #170;}\n.cm-s-default span.cm-attribute {color: #00c;}\n.cm-s-default span.cm-header {color: #a0a;}\n.cm-s-default span.cm-quote {color: #090;}\n.cm-s-default span.cm-hr {color: #999;}\n.cm-s-default span.cm-link {color: #00c;}\n\nspan.cm-header, span.cm-strong {font-weight: bold;}\nspan.cm-em {font-style: italic;}\nspan.cm-emstrong {font-style: italic; font-weight: bold;}\nspan.cm-link {text-decoration: underline;}\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/codemirror/codemirror.js",
    "content": "// CodeMirror version 2.2\n//\n// All functions that need access to the editor's state live inside\n// the CodeMirror function. Below that, at the bottom of the file,\n// some utilities are defined.\n\n// CodeMirror is the only global var we claim\nvar CodeMirror = (function() {\n    // This is the function that produces an editor instance. It's\n    // closure is used to store the editor state.\n    function CodeMirror(place, givenOptions) {\n        // Determine effective options based on given values and defaults.\n        var options = {}, defaults = CodeMirror.defaults;\n        for (var opt in defaults)\n            if (defaults.hasOwnProperty(opt))\n                options[opt] = (givenOptions && givenOptions.hasOwnProperty(opt) ? givenOptions : defaults)[opt];\n\n        var targetDocument = options[\"document\"];\n        // The element in which the editor lives.\n        var wrapper = targetDocument.createElement(\"div\");\n        wrapper.className = \"CodeMirror\" + (options.lineWrapping ? \" CodeMirror-wrap\" : \"\");\n        // This mess creates the base DOM structure for the editor.\n        wrapper.innerHTML =\n            '<div style=\"overflow: hidden; position: relative; width: 3px; height: 0px;\">' + // Wraps and hides input textarea\n                '<textarea style=\"position: absolute; padding: 0; width: 1px;\" wrap=\"off\" ' +\n                'autocorrect=\"off\" autocapitalize=\"off\"></textarea></div>' +\n                '<div class=\"CodeMirror-scroll\" tabindex=\"-1\">' +\n                '<div style=\"position: relative\">' + // Set to the height of the text, causes scrolling\n                '<div style=\"position: relative\">' + // Moved around its parent to cover visible view\n                '<div class=\"CodeMirror-gutter\"><div class=\"CodeMirror-gutter-text\"></div></div>' +\n                // Provides positioning relative to (visible) text origin\n                '<div class=\"CodeMirror-lines\"><div style=\"position: relative\">' +\n                '<div style=\"position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden\"></div>' +\n                '<pre class=\"CodeMirror-cursor\">&#160;</pre>' + // Absolutely positioned blinky cursor\n                '<div></div>' + // This DIV contains the actual code\n                '</div></div></div></div></div>';\n        if (place.appendChild) place.appendChild(wrapper); else place(wrapper);\n        // I've never seen more elegant code in my life.\n        var inputDiv = wrapper.firstChild, input = inputDiv.firstChild,\n            scroller = wrapper.lastChild, code = scroller.firstChild,\n            mover = code.firstChild, gutter = mover.firstChild, gutterText = gutter.firstChild,\n            lineSpace = gutter.nextSibling.firstChild, measure = lineSpace.firstChild,\n            cursor = measure.nextSibling, lineDiv = cursor.nextSibling;\n        themeChanged();\n        // Needed to hide big blue blinking cursor on Mobile Safari\n        if (/AppleWebKit/.test(navigator.userAgent) && /Mobile\\/\\w+/.test(navigator.userAgent)) input.style.width = \"0px\";\n        if (!webkit) lineSpace.draggable = true;\n        if (options.tabindex != null) input.tabIndex = options.tabindex;\n        if (!options.gutter && !options.lineNumbers) gutter.style.display = \"none\";\n\n        // Check for problem with IE innerHTML not working when we have a\n        // P (or similar) parent node.\n        try { stringWidth(\"x\"); }\n        catch (e) {\n            if (e.message.match(/runtime/i))\n                e = new Error(\"A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)\");\n            throw e;\n        }\n\n        // Delayed object wrap timeouts, making sure only one is active. blinker holds an interval.\n        var poll = new Delayed(), highlight = new Delayed(), blinker;\n\n        // mode holds a mode API object. doc is the tree of Line objects,\n        // work an array of lines that should be parsed, and history the\n        // undo history (instance of History constructor).\n        var mode, doc = new BranchChunk([new LeafChunk([new Line(\"\")])]), work, focused;\n        loadMode();\n        // The selection. These are always maintained to point at valid\n        // positions. Inverted is used to remember that the user is\n        // selecting bottom-to-top.\n        var sel = {from: {line: 0, ch: 0}, to: {line: 0, ch: 0}, inverted: false};\n        // Selection-related flags. shiftSelecting obviously tracks\n        // whether the user is holding shift.\n        var shiftSelecting, lastClick, lastDoubleClick, draggingText, overwrite = false;\n        // Variables used by startOperation/endOperation to track what\n        // happened during the operation.\n        var updateInput, userSelChange, changes, textChanged, selectionChanged, leaveInputAlone,\n            gutterDirty, callbacks;\n        // Current visible range (may be bigger than the view window).\n        var displayOffset = 0, showingFrom = 0, showingTo = 0, lastSizeC = 0;\n        // bracketHighlighted is used to remember that a backet has been\n        // marked.\n        var bracketHighlighted;\n        // Tracks the maximum line length so that the horizontal scrollbar\n        // can be kept static when scrolling.\n        var maxLine = \"\", maxWidth, tabText = computeTabText();\n\n        // Initialize the content.\n        operation(function(){setValue(options.value || \"\"); updateInput = false;})();\n        var history = new History();\n\n        // Register our event handlers.\n        connect(scroller, \"mousedown\", operation(onMouseDown));\n        connect(scroller, \"dblclick\", operation(onDoubleClick));\n        connect(lineSpace, \"dragstart\", onDragStart);\n        connect(lineSpace, \"selectstart\", e_preventDefault);\n        // Gecko browsers fire contextmenu *after* opening the menu, at\n        // which point we can't mess with it anymore. Context menu is\n        // handled in onMouseDown for Gecko.\n        if (!gecko) connect(scroller, \"contextmenu\", onContextMenu);\n        connect(scroller, \"scroll\", function() {\n            updateDisplay([]);\n            if (options.fixedGutter) gutter.style.left = scroller.scrollLeft + \"px\";\n            if (options.onScroll) options.onScroll(instance);\n        });\n        connect(window, \"resize\", function() {updateDisplay(true);});\n        connect(input, \"keyup\", operation(onKeyUp));\n        connect(input, \"input\", fastPoll);\n        connect(input, \"keydown\", operation(onKeyDown));\n        connect(input, \"keypress\", operation(onKeyPress));\n        connect(input, \"focus\", onFocus);\n        connect(input, \"blur\", onBlur);\n\n        connect(scroller, \"dragenter\", e_stop);\n        connect(scroller, \"dragover\", e_stop);\n        connect(scroller, \"drop\", operation(onDrop));\n        connect(scroller, \"paste\", function(){focusInput(); fastPoll();});\n        connect(input, \"paste\", fastPoll);\n        connect(input, \"cut\", operation(function(){replaceSelection(\"\");}));\n\n        // IE throws unspecified error in certain cases, when\n        // trying to access activeElement before onload\n        var hasFocus; try { hasFocus = (targetDocument.activeElement == input); } catch(e) { }\n        if (hasFocus) setTimeout(onFocus, 20);\n        else onBlur();\n\n        function isLine(l) {return l >= 0 && l < doc.size;}\n        // The instance object that we'll return. Mostly calls out to\n        // local functions in the CodeMirror function. Some do some extra\n        // range checking and/or clipping. operation is used to wrap the\n        // call so that changes it makes are tracked, and the display is\n        // updated afterwards.\n        var instance = wrapper.CodeMirror = {\n            getValue: getValue,\n            setValue: operation(setValue),\n            getSelection: getSelection,\n            replaceSelection: operation(replaceSelection),\n            focus: function(){focusInput(); onFocus(); fastPoll();},\n            setOption: function(option, value) {\n                var oldVal = options[option];\n                options[option] = value;\n                if (option == \"mode\" || option == \"indentUnit\") loadMode();\n                else if (option == \"readOnly\" && value) {onBlur(); input.blur();}\n                else if (option == \"theme\") themeChanged();\n                else if (option == \"lineWrapping\" && oldVal != value) operation(wrappingChanged)();\n                else if (option == \"tabSize\") operation(tabsChanged)();\n                if (option == \"lineNumbers\" || option == \"gutter\" || option == \"firstLineNumber\" || option == \"theme\")\n                    operation(gutterChanged)();\n            },\n            getOption: function(option) {return options[option];},\n            undo: operation(undo),\n            redo: operation(redo),\n            indentLine: operation(function(n, dir) {\n                if (isLine(n)) indentLine(n, dir == null ? \"smart\" : dir ? \"add\" : \"subtract\");\n            }),\n            indentSelection: operation(indentSelected),\n            historySize: function() {return {undo: history.done.length, redo: history.undone.length};},\n            clearHistory: function() {history = new History();},\n            matchBrackets: operation(function(){matchBrackets(true);}),\n            getTokenAt: operation(function(pos) {\n                pos = clipPos(pos);\n                return getLine(pos.line).getTokenAt(mode, getStateBefore(pos.line), pos.ch);\n            }),\n            getStateAfter: function(line) {\n                line = clipLine(line == null ? doc.size - 1: line);\n                return getStateBefore(line + 1);\n            },\n            cursorCoords: function(start){\n                if (start == null) start = sel.inverted;\n                return pageCoords(start ? sel.from : sel.to);\n            },\n            charCoords: function(pos){return pageCoords(clipPos(pos));},\n            coordsChar: function(coords) {\n                var off = eltOffset(lineSpace);\n                return coordsChar(coords.x - off.left, coords.y - off.top);\n            },\n            markText: operation(markText),\n            setBookmark: setBookmark,\n            setMarker: operation(addGutterMarker),\n            clearMarker: operation(removeGutterMarker),\n            setLineClass: operation(setLineClass),\n            hideLine: operation(function(h) {return setLineHidden(h, true);}),\n            showLine: operation(function(h) {return setLineHidden(h, false);}),\n            onDeleteLine: function(line, f) {\n                if (typeof line == \"number\") {\n                    if (!isLine(line)) return null;\n                    line = getLine(line);\n                }\n                (line.handlers || (line.handlers = [])).push(f);\n                return line;\n            },\n            lineInfo: lineInfo,\n            addWidget: function(pos, node, scroll, vert, horiz) {\n                pos = localCoords(clipPos(pos));\n                var top = pos.yBot, left = pos.x;\n                node.style.position = \"absolute\";\n                code.appendChild(node);\n                if (vert == \"over\") top = pos.y;\n                else if (vert == \"near\") {\n                    var vspace = Math.max(scroller.offsetHeight, doc.height * textHeight()),\n                        hspace = Math.max(code.clientWidth, lineSpace.clientWidth) - paddingLeft();\n                    if (pos.yBot + node.offsetHeight > vspace && pos.y > node.offsetHeight)\n                        top = pos.y - node.offsetHeight;\n                    if (left + node.offsetWidth > hspace)\n                        left = hspace - node.offsetWidth;\n                }\n                node.style.top = (top + paddingTop()) + \"px\";\n                node.style.left = node.style.right = \"\";\n                if (horiz == \"right\") {\n                    left = code.clientWidth - node.offsetWidth;\n                    node.style.right = \"0px\";\n                } else {\n                    if (horiz == \"left\") left = 0;\n                    else if (horiz == \"middle\") left = (code.clientWidth - node.offsetWidth) / 2;\n                    node.style.left = (left + paddingLeft()) + \"px\";\n                }\n                if (scroll)\n                    scrollIntoView(left, top, left + node.offsetWidth, top + node.offsetHeight);\n            },\n\n            lineCount: function() {return doc.size;},\n            clipPos: clipPos,\n            getCursor: function(start) {\n                if (start == null) start = sel.inverted;\n                return copyPos(start ? sel.from : sel.to);\n            },\n            somethingSelected: function() {return !posEq(sel.from, sel.to);},\n            setCursor: operation(function(line, ch, user) {\n                if (ch == null && typeof line.line == \"number\") setCursor(line.line, line.ch, user);\n                else setCursor(line, ch, user);\n            }),\n            setSelection: operation(function(from, to, user) {\n                (user ? setSelectionUser : setSelection)(clipPos(from), clipPos(to || from));\n            }),\n            getLine: function(line) {if (isLine(line)) return getLine(line).text;},\n            getLineHandle: function(line) {if (isLine(line)) return getLine(line);},\n            setLine: operation(function(line, text) {\n                if (isLine(line)) replaceRange(text, {line: line, ch: 0}, {line: line, ch: getLine(line).text.length});\n            }),\n            removeLine: operation(function(line) {\n                if (isLine(line)) replaceRange(\"\", {line: line, ch: 0}, clipPos({line: line+1, ch: 0}));\n            }),\n            replaceRange: operation(replaceRange),\n            getRange: function(from, to) {return getRange(clipPos(from), clipPos(to));},\n\n            execCommand: function(cmd) {return commands[cmd](instance);},\n            // Stuff used by commands, probably not much use to outside code.\n            moveH: operation(moveH),\n            deleteH: operation(deleteH),\n            moveV: operation(moveV),\n            toggleOverwrite: function() {overwrite = !overwrite;},\n\n            posFromIndex: function(off) {\n                var lineNo = 0, ch;\n                doc.iter(0, doc.size, function(line) {\n                    var sz = line.text.length + 1;\n                    if (sz > off) { ch = off; return true; }\n                    off -= sz;\n                    ++lineNo;\n                });\n                return clipPos({line: lineNo, ch: ch});\n            },\n            indexFromPos: function (coords) {\n                if (coords.line < 0 || coords.ch < 0) return 0;\n                var index = coords.ch;\n                doc.iter(0, coords.line, function (line) {\n                    index += line.text.length + 1;\n                });\n                return index;\n            },\n\n            operation: function(f){return operation(f)();},\n            refresh: function(){updateDisplay(true);},\n            getInputField: function(){return input;},\n            getWrapperElement: function(){return wrapper;},\n            getScrollerElement: function(){return scroller;},\n            getGutterElement: function(){return gutter;}\n        };\n\n        function getLine(n) { return getLineAt(doc, n); }\n        function updateLineHeight(line, height) {\n            gutterDirty = true;\n            var diff = height - line.height;\n            for (var n = line; n; n = n.parent) n.height += diff;\n        }\n\n        function setValue(code) {\n            var top = {line: 0, ch: 0};\n            updateLines(top, {line: doc.size - 1, ch: getLine(doc.size-1).text.length},\n                splitLines(code), top, top);\n            updateInput = true;\n        }\n        function getValue(code) {\n            var text = [];\n            doc.iter(0, doc.size, function(line) { text.push(line.text); });\n            return text.join(\"\\n\");\n        }\n\n        function onMouseDown(e) {\n            setShift(e.shiftKey);\n            // Check whether this is a click in a widget\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\n                if (n.parentNode == code && n != mover) return;\n\n            // See if this is a click in the gutter\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\n                if (n.parentNode == gutterText) {\n                    if (options.onGutterClick)\n                        options.onGutterClick(instance, indexOf(gutterText.childNodes, n) + showingFrom, e);\n                    return e_preventDefault(e);\n                }\n\n            var start = posFromMouse(e);\n\n            switch (e_button(e)) {\n                case 3:\n                    if (gecko && !mac) onContextMenu(e);\n                    return;\n                case 2:\n                    if (start) setCursor(start.line, start.ch, true);\n                    return;\n            }\n            // For button 1, if it was clicked inside the editor\n            // (posFromMouse returning non-null), we have to adjust the\n            // selection.\n            if (!start) {if (e_target(e) == scroller) e_preventDefault(e); return;}\n\n            if (!focused) onFocus();\n\n            var now = +new Date;\n            if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) {\n                e_preventDefault(e);\n                setTimeout(focusInput, 20);\n                return selectLine(start.line);\n            } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) {\n                lastDoubleClick = {time: now, pos: start};\n                e_preventDefault(e);\n                return selectWordAt(start);\n            } else { lastClick = {time: now, pos: start}; }\n\n            var last = start, going;\n            if (dragAndDrop && !posEq(sel.from, sel.to) &&\n                !posLess(start, sel.from) && !posLess(sel.to, start)) {\n                // Let the drag handler handle this.\n                if (webkit) lineSpace.draggable = true;\n                var up = connect(targetDocument, \"mouseup\", operation(function(e2) {\n                    if (webkit) lineSpace.draggable = false;\n                    draggingText = false;\n                    up();\n                    if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {\n                        e_preventDefault(e2);\n                        setCursor(start.line, start.ch, true);\n                        focusInput();\n                    }\n                }), true);\n                draggingText = true;\n                return;\n            }\n            e_preventDefault(e);\n            setCursor(start.line, start.ch, true);\n\n            function extend(e) {\n                var cur = posFromMouse(e, true);\n                if (cur && !posEq(cur, last)) {\n                    if (!focused) onFocus();\n                    last = cur;\n                    setSelectionUser(start, cur);\n                    updateInput = false;\n                    var visible = visibleLines();\n                    if (cur.line >= visible.to || cur.line < visible.from)\n                        going = setTimeout(operation(function(){extend(e);}), 150);\n                }\n            }\n\n            var move = connect(targetDocument, \"mousemove\", operation(function(e) {\n                clearTimeout(going);\n                e_preventDefault(e);\n                extend(e);\n            }), true);\n            var up = connect(targetDocument, \"mouseup\", operation(function(e) {\n                clearTimeout(going);\n                var cur = posFromMouse(e);\n                if (cur) setSelectionUser(start, cur);\n                e_preventDefault(e);\n                focusInput();\n                updateInput = true;\n                move(); up();\n            }), true);\n        }\n        function onDoubleClick(e) {\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\n                if (n.parentNode == gutterText) return e_preventDefault(e);\n            var start = posFromMouse(e);\n            if (!start) return;\n            lastDoubleClick = {time: +new Date, pos: start};\n            e_preventDefault(e);\n            selectWordAt(start);\n        }\n        function onDrop(e) {\n            e.preventDefault();\n            var pos = posFromMouse(e, true), files = e.dataTransfer.files;\n            if (!pos || options.readOnly) return;\n            if (files && files.length && window.FileReader && window.File) {\n                function loadFile(file, i) {\n                    var reader = new FileReader;\n                    reader.onload = function() {\n                        text[i] = reader.result;\n                        if (++read == n) {\n                            pos = clipPos(pos);\n                            operation(function() {\n                                var end = replaceRange(text.join(\"\"), pos, pos);\n                                setSelectionUser(pos, end);\n                            })();\n                        }\n                    };\n                    reader.readAsText(file);\n                }\n                var n = files.length, text = Array(n), read = 0;\n                for (var i = 0; i < n; ++i) loadFile(files[i], i);\n            }\n            else {\n                try {\n                    var text = e.dataTransfer.getData(\"Text\");\n                    if (text) {\n                        var end = replaceRange(text, pos, pos);\n                        var curFrom = sel.from, curTo = sel.to;\n                        setSelectionUser(pos, end);\n                        if (draggingText) replaceRange(\"\", curFrom, curTo);\n                        focusInput();\n                    }\n                }\n                catch(e){}\n            }\n        }\n        function onDragStart(e) {\n            var txt = getSelection();\n            // This will reset escapeElement\n            htmlEscape(txt);\n            e.dataTransfer.setDragImage(escapeElement, 0, 0);\n            e.dataTransfer.setData(\"Text\", txt);\n        }\n        function handleKeyBinding(e) {\n            var name = keyNames[e.keyCode], next = keyMap[options.keyMap].auto, bound, dropShift;\n            if (name == null || e.altGraphKey) {\n                if (next) options.keyMap = next;\n                return null;\n            }\n            if (e.altKey) name = \"Alt-\" + name;\n            if (e.ctrlKey) name = \"Ctrl-\" + name;\n            if (e.metaKey) name = \"Cmd-\" + name;\n            if (e.shiftKey && (bound = lookupKey(\"Shift-\" + name, options.extraKeys, options.keyMap))) {\n                dropShift = true;\n            } else {\n                bound = lookupKey(name, options.extraKeys, options.keyMap);\n            }\n            if (typeof bound == \"string\") {\n                if (commands.propertyIsEnumerable(bound)) bound = commands[bound];\n                else bound = null;\n            }\n            if (next && (bound || !isModifierKey(e))) options.keyMap = next;\n            if (!bound) return false;\n            if (dropShift) {\n                var prevShift = shiftSelecting;\n                shiftSelecting = null;\n                bound(instance);\n                shiftSelecting = prevShift;\n            } else bound(instance);\n            e_preventDefault(e);\n            return true;\n        }\n        var lastStoppedKey = null;\n        function onKeyDown(e) {\n            if (!focused) onFocus();\n            var code = e.keyCode;\n            // IE does strange things with escape.\n            if (ie && code == 27) { e.returnValue = false; }\n            setShift(code == 16 || e.shiftKey);\n            // First give onKeyEvent option a chance to handle this.\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\n            var handled = handleKeyBinding(e);\n            if (window.opera) {\n                lastStoppedKey = handled ? e.keyCode : null;\n                // Opera has no cut event... we try to at least catch the key combo\n                if (!handled && (mac ? e.metaKey : e.ctrlKey) && e.keyCode == 88)\n                    replaceSelection(\"\");\n            }\n        }\n        function onKeyPress(e) {\n            if (window.opera && e.keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\n            if (window.opera && !e.which && handleKeyBinding(e)) return;\n            if (options.electricChars && mode.electricChars) {\n                var ch = String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode);\n                if (mode.electricChars.indexOf(ch) > -1)\n                    setTimeout(operation(function() {indentLine(sel.to.line, \"smart\");}), 75);\n            }\n            fastPoll();\n        }\n        function onKeyUp(e) {\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\n            if (e.keyCode == 16) shiftSelecting = null;\n        }\n\n        function onFocus() {\n            if (options.readOnly) return;\n            if (!focused) {\n                if (options.onFocus) options.onFocus(instance);\n                focused = true;\n                if (wrapper.className.search(/\\bCodeMirror-focused\\b/) == -1)\n                    wrapper.className += \" CodeMirror-focused\";\n                if (!leaveInputAlone) resetInput(true);\n            }\n            slowPoll();\n            restartBlink();\n        }\n        function onBlur() {\n            if (focused) {\n                if (options.onBlur) options.onBlur(instance);\n                focused = false;\n                wrapper.className = wrapper.className.replace(\" CodeMirror-focused\", \"\");\n            }\n            clearInterval(blinker);\n            setTimeout(function() {if (!focused) shiftSelecting = null;}, 150);\n        }\n\n        // Replace the range from from to to by the strings in newText.\n        // Afterwards, set the selection to selFrom, selTo.\n        function updateLines(from, to, newText, selFrom, selTo) {\n            if (history) {\n                var old = [];\n                doc.iter(from.line, to.line + 1, function(line) { old.push(line.text); });\n                history.addChange(from.line, newText.length, old);\n                while (history.done.length > options.undoDepth) history.done.shift();\n            }\n            updateLinesNoUndo(from, to, newText, selFrom, selTo);\n        }\n        function unredoHelper(from, to) {\n            var change = from.pop();\n            if (change) {\n                var replaced = [], end = change.start + change.added;\n                doc.iter(change.start, end, function(line) { replaced.push(line.text); });\n                to.push({start: change.start, added: change.old.length, old: replaced});\n                var pos = clipPos({line: change.start + change.old.length - 1,\n                    ch: editEnd(replaced[replaced.length-1], change.old[change.old.length-1])});\n                updateLinesNoUndo({line: change.start, ch: 0}, {line: end - 1, ch: getLine(end-1).text.length}, change.old, pos, pos);\n                updateInput = true;\n            }\n        }\n        function undo() {unredoHelper(history.done, history.undone);}\n        function redo() {unredoHelper(history.undone, history.done);}\n\n        function updateLinesNoUndo(from, to, newText, selFrom, selTo) {\n            var recomputeMaxLength = false, maxLineLength = maxLine.length;\n            if (!options.lineWrapping)\n                doc.iter(from.line, to.line, function(line) {\n                    if (line.text.length == maxLineLength) {recomputeMaxLength = true; return true;}\n                });\n            if (from.line != to.line || newText.length > 1) gutterDirty = true;\n\n            var nlines = to.line - from.line, firstLine = getLine(from.line), lastLine = getLine(to.line);\n            // First adjust the line structure, taking some care to leave highlighting intact.\n            if (from.ch == 0 && to.ch == 0 && newText[newText.length - 1] == \"\") {\n                // This is a whole-line replace. Treated specially to make\n                // sure line objects move the way they are supposed to.\n                var added = [], prevLine = null;\n                if (from.line) {\n                    prevLine = getLine(from.line - 1);\n                    prevLine.fixMarkEnds(lastLine);\n                } else lastLine.fixMarkStarts();\n                for (var i = 0, e = newText.length - 1; i < e; ++i)\n                    added.push(Line.inheritMarks(newText[i], prevLine));\n                if (nlines) doc.remove(from.line, nlines, callbacks);\n                if (added.length) doc.insert(from.line, added);\n            } else if (firstLine == lastLine) {\n                if (newText.length == 1)\n                    firstLine.replace(from.ch, to.ch, newText[0]);\n                else {\n                    lastLine = firstLine.split(to.ch, newText[newText.length-1]);\n                    firstLine.replace(from.ch, null, newText[0]);\n                    firstLine.fixMarkEnds(lastLine);\n                    var added = [];\n                    for (var i = 1, e = newText.length - 1; i < e; ++i)\n                        added.push(Line.inheritMarks(newText[i], firstLine));\n                    added.push(lastLine);\n                    doc.insert(from.line + 1, added);\n                }\n            } else if (newText.length == 1) {\n                firstLine.replace(from.ch, null, newText[0]);\n                lastLine.replace(null, to.ch, \"\");\n                firstLine.append(lastLine);\n                doc.remove(from.line + 1, nlines, callbacks);\n            } else {\n                var added = [];\n                firstLine.replace(from.ch, null, newText[0]);\n                lastLine.replace(null, to.ch, newText[newText.length-1]);\n                firstLine.fixMarkEnds(lastLine);\n                for (var i = 1, e = newText.length - 1; i < e; ++i)\n                    added.push(Line.inheritMarks(newText[i], firstLine));\n                if (nlines > 1) doc.remove(from.line + 1, nlines - 1, callbacks);\n                doc.insert(from.line + 1, added);\n            }\n            if (options.lineWrapping) {\n                var perLine = scroller.clientWidth / charWidth() - 3;\n                doc.iter(from.line, from.line + newText.length, function(line) {\n                    if (line.hidden) return;\n                    var guess = Math.ceil(line.text.length / perLine) || 1;\n                    if (guess != line.height) updateLineHeight(line, guess);\n                });\n            } else {\n                doc.iter(from.line, i + newText.length, function(line) {\n                    var l = line.text;\n                    if (l.length > maxLineLength) {\n                        maxLine = l; maxLineLength = l.length; maxWidth = null;\n                        recomputeMaxLength = false;\n                    }\n                });\n                if (recomputeMaxLength) {\n                    maxLineLength = 0; maxLine = \"\"; maxWidth = null;\n                    doc.iter(0, doc.size, function(line) {\n                        var l = line.text;\n                        if (l.length > maxLineLength) {\n                            maxLineLength = l.length; maxLine = l;\n                        }\n                    });\n                }\n            }\n\n            // Add these lines to the work array, so that they will be\n            // highlighted. Adjust work lines if lines were added/removed.\n            var newWork = [], lendiff = newText.length - nlines - 1;\n            for (var i = 0, l = work.length; i < l; ++i) {\n                var task = work[i];\n                if (task < from.line) newWork.push(task);\n                else if (task > to.line) newWork.push(task + lendiff);\n            }\n            var hlEnd = from.line + Math.min(newText.length, 500);\n            highlightLines(from.line, hlEnd);\n            newWork.push(hlEnd);\n            work = newWork;\n            startWorker(100);\n            // Remember that these lines changed, for updating the display\n            changes.push({from: from.line, to: to.line + 1, diff: lendiff});\n            var changeObj = {from: from, to: to, text: newText};\n            if (textChanged) {\n                for (var cur = textChanged; cur.next; cur = cur.next) {}\n                cur.next = changeObj;\n            } else textChanged = changeObj;\n\n            // Update the selection\n            function updateLine(n) {return n <= Math.min(to.line, to.line + lendiff) ? n : n + lendiff;}\n            setSelection(selFrom, selTo, updateLine(sel.from.line), updateLine(sel.to.line));\n\n            // Make sure the scroll-size div has the correct height.\n            code.style.height = (doc.height * textHeight() + 2 * paddingTop()) + \"px\";\n        }\n\n        function replaceRange(code, from, to) {\n            from = clipPos(from);\n            if (!to) to = from; else to = clipPos(to);\n            code = splitLines(code);\n            function adjustPos(pos) {\n                if (posLess(pos, from)) return pos;\n                if (!posLess(to, pos)) return end;\n                var line = pos.line + code.length - (to.line - from.line) - 1;\n                var ch = pos.ch;\n                if (pos.line == to.line)\n                    ch += code[code.length-1].length - (to.ch - (to.line == from.line ? from.ch : 0));\n                return {line: line, ch: ch};\n            }\n            var end;\n            replaceRange1(code, from, to, function(end1) {\n                end = end1;\n                return {from: adjustPos(sel.from), to: adjustPos(sel.to)};\n            });\n            return end;\n        }\n        function replaceSelection(code, collapse) {\n            replaceRange1(splitLines(code), sel.from, sel.to, function(end) {\n                if (collapse == \"end\") return {from: end, to: end};\n                else if (collapse == \"start\") return {from: sel.from, to: sel.from};\n                else return {from: sel.from, to: end};\n            });\n        }\n        function replaceRange1(code, from, to, computeSel) {\n            var endch = code.length == 1 ? code[0].length + from.ch : code[code.length-1].length;\n            var newSel = computeSel({line: from.line + code.length - 1, ch: endch});\n            updateLines(from, to, code, newSel.from, newSel.to);\n        }\n\n        function getRange(from, to) {\n            var l1 = from.line, l2 = to.line;\n            if (l1 == l2) return getLine(l1).text.slice(from.ch, to.ch);\n            var code = [getLine(l1).text.slice(from.ch)];\n            doc.iter(l1 + 1, l2, function(line) { code.push(line.text); });\n            code.push(getLine(l2).text.slice(0, to.ch));\n            return code.join(\"\\n\");\n        }\n        function getSelection() {\n            return getRange(sel.from, sel.to);\n        }\n\n        var pollingFast = false; // Ensures slowPoll doesn't cancel fastPoll\n        function slowPoll() {\n            if (pollingFast) return;\n            poll.set(options.pollInterval, function() {\n                startOperation();\n                readInput();\n                if (focused) slowPoll();\n                endOperation();\n            });\n        }\n        function fastPoll() {\n            var missed = false;\n            pollingFast = true;\n            function p() {\n                startOperation();\n                var changed = readInput();\n                if (!changed && !missed) {missed = true; poll.set(60, p);}\n                else {pollingFast = false; slowPoll();}\n                endOperation();\n            }\n            poll.set(20, p);\n        }\n\n        // Previnput is a hack to work with IME. If we reset the textarea\n        // on every change, that breaks IME. So we look for changes\n        // compared to the previous content instead. (Modern browsers have\n        // events that indicate IME taking place, but these are not widely\n        // supported or compatible enough yet to rely on.)\n        var prevInput = \"\";\n        function readInput() {\n            if (leaveInputAlone || !focused || hasSelection(input)) return false;\n            var text = input.value;\n            if (text == prevInput) return false;\n            shiftSelecting = null;\n            var same = 0, l = Math.min(prevInput.length, text.length);\n            while (same < l && prevInput[same] == text[same]) ++same;\n            if (same < prevInput.length)\n                sel.from = {line: sel.from.line, ch: sel.from.ch - (prevInput.length - same)};\n            else if (overwrite && posEq(sel.from, sel.to))\n                sel.to = {line: sel.to.line, ch: Math.min(getLine(sel.to.line).text.length, sel.to.ch + (text.length - same))};\n            replaceSelection(text.slice(same), \"end\");\n            prevInput = text;\n            return true;\n        }\n        function resetInput(user) {\n            if (!posEq(sel.from, sel.to)) {\n                prevInput = \"\";\n                input.value = getSelection();\n                input.select();\n            } else if (user) prevInput = input.value = \"\";\n        }\n\n        function focusInput() {\n            if (!options.readOnly) input.focus();\n        }\n\n        function scrollEditorIntoView() {\n            if (!cursor.getBoundingClientRect) return;\n            var rect = cursor.getBoundingClientRect();\n            // IE returns bogus coordinates when the instance sits inside of an iframe and the cursor is hidden\n            if (ie && rect.top == rect.bottom) return;\n            var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);\n            if (rect.top < 0 || rect.bottom > winH) cursor.scrollIntoView();\n        }\n        function scrollCursorIntoView() {\n            var cursor = localCoords(sel.inverted ? sel.from : sel.to);\n            var x = options.lineWrapping ? Math.min(cursor.x, lineSpace.offsetWidth) : cursor.x;\n            return scrollIntoView(x, cursor.y, x, cursor.yBot);\n        }\n        function scrollIntoView(x1, y1, x2, y2) {\n            var pl = paddingLeft(), pt = paddingTop(), lh = textHeight();\n            y1 += pt; y2 += pt; x1 += pl; x2 += pl;\n            var screen = scroller.clientHeight, screentop = scroller.scrollTop, scrolled = false, result = true;\n            if (y1 < screentop) {scroller.scrollTop = Math.max(0, y1 - 2*lh); scrolled = true;}\n            else if (y2 > screentop + screen) {scroller.scrollTop = y2 + lh - screen; scrolled = true;}\n\n            var screenw = scroller.clientWidth, screenleft = scroller.scrollLeft;\n            var gutterw = options.fixedGutter ? gutter.clientWidth : 0;\n            if (x1 < screenleft + gutterw) {\n                if (x1 < 50) x1 = 0;\n                scroller.scrollLeft = Math.max(0, x1 - 10 - gutterw);\n                scrolled = true;\n            }\n            else if (x2 > screenw + screenleft - 3) {\n                scroller.scrollLeft = x2 + 10 - screenw;\n                scrolled = true;\n                if (x2 > code.clientWidth) result = false;\n            }\n            if (scrolled && options.onScroll) options.onScroll(instance);\n            return result;\n        }\n\n        function visibleLines() {\n            var lh = textHeight(), top = scroller.scrollTop - paddingTop();\n            var from_height = Math.max(0, Math.floor(top / lh));\n            var to_height = Math.ceil((top + scroller.clientHeight) / lh);\n            return {from: lineAtHeight(doc, from_height),\n                to: lineAtHeight(doc, to_height)};\n        }\n        // Uses a set of changes plus the current scroll position to\n        // determine which DOM updates have to be made, and makes the\n        // updates.\n        function updateDisplay(changes, suppressCallback) {\n            if (!scroller.clientWidth) {\n                showingFrom = showingTo = displayOffset = 0;\n                return;\n            }\n            // Compute the new visible window\n            var visible = visibleLines();\n            // Bail out if the visible area is already rendered and nothing changed.\n            if (changes !== true && changes.length == 0 && visible.from >= showingFrom && visible.to <= showingTo) return;\n            var from = Math.max(visible.from - 100, 0), to = Math.min(doc.size, visible.to + 100);\n            if (showingFrom < from && from - showingFrom < 20) from = showingFrom;\n            if (showingTo > to && showingTo - to < 20) to = Math.min(doc.size, showingTo);\n\n            // Create a range of theoretically intact lines, and punch holes\n            // in that using the change info.\n            var intact = changes === true ? [] :\n                computeIntact([{from: showingFrom, to: showingTo, domStart: 0}], changes);\n            // Clip off the parts that won't be visible\n            var intactLines = 0;\n            for (var i = 0; i < intact.length; ++i) {\n                var range = intact[i];\n                if (range.from < from) {range.domStart += (from - range.from); range.from = from;}\n                if (range.to > to) range.to = to;\n                if (range.from >= range.to) intact.splice(i--, 1);\n                else intactLines += range.to - range.from;\n            }\n            if (intactLines == to - from) return;\n            intact.sort(function(a, b) {return a.domStart - b.domStart;});\n\n            var th = textHeight(), gutterDisplay = gutter.style.display;\n            lineDiv.style.display = gutter.style.display = \"none\";\n            patchDisplay(from, to, intact);\n            lineDiv.style.display = \"\";\n\n            // Position the mover div to align with the lines it's supposed\n            // to be showing (which will cover the visible display)\n            var different = from != showingFrom || to != showingTo || lastSizeC != scroller.clientHeight + th;\n            // This is just a bogus formula that detects when the editor is\n            // resized or the font size changes.\n            if (different) lastSizeC = scroller.clientHeight + th;\n            showingFrom = from; showingTo = to;\n            displayOffset = heightAtLine(doc, from);\n            mover.style.top = (displayOffset * th) + \"px\";\n            code.style.height = (doc.height * th + 2 * paddingTop()) + \"px\";\n\n            // Since this is all rather error prone, it is honoured with the\n            // only assertion in the whole file.\n            if (lineDiv.childNodes.length != showingTo - showingFrom)\n                throw new Error(\"BAD PATCH! \" + JSON.stringify(intact) + \" size=\" + (showingTo - showingFrom) +\n                    \" nodes=\" + lineDiv.childNodes.length);\n\n            if (options.lineWrapping) {\n                maxWidth = scroller.clientWidth;\n                var curNode = lineDiv.firstChild;\n                doc.iter(showingFrom, showingTo, function(line) {\n                    if (!line.hidden) {\n                        var height = Math.round(curNode.offsetHeight / th) || 1;\n                        if (line.height != height) {updateLineHeight(line, height); gutterDirty = true;}\n                    }\n                    curNode = curNode.nextSibling;\n                });\n            } else {\n                if (maxWidth == null) maxWidth = stringWidth(maxLine);\n                if (maxWidth > scroller.clientWidth) {\n                    lineSpace.style.width = maxWidth + \"px\";\n                    // Needed to prevent odd wrapping/hiding of widgets placed in here.\n                    code.style.width = \"\";\n                    code.style.width = scroller.scrollWidth + \"px\";\n                } else {\n                    lineSpace.style.width = code.style.width = \"\";\n                }\n            }\n            gutter.style.display = gutterDisplay;\n            if (different || gutterDirty) updateGutter();\n            updateCursor();\n            if (!suppressCallback && options.onUpdate) options.onUpdate(instance);\n            return true;\n        }\n\n        function computeIntact(intact, changes) {\n            for (var i = 0, l = changes.length || 0; i < l; ++i) {\n                var change = changes[i], intact2 = [], diff = change.diff || 0;\n                for (var j = 0, l2 = intact.length; j < l2; ++j) {\n                    var range = intact[j];\n                    if (change.to <= range.from && change.diff)\n                        intact2.push({from: range.from + diff, to: range.to + diff,\n                            domStart: range.domStart});\n                    else if (change.to <= range.from || change.from >= range.to)\n                        intact2.push(range);\n                    else {\n                        if (change.from > range.from)\n                            intact2.push({from: range.from, to: change.from, domStart: range.domStart});\n                        if (change.to < range.to)\n                            intact2.push({from: change.to + diff, to: range.to + diff,\n                                domStart: range.domStart + (change.to - range.from)});\n                    }\n                }\n                intact = intact2;\n            }\n            return intact;\n        }\n\n        function patchDisplay(from, to, intact) {\n            // The first pass removes the DOM nodes that aren't intact.\n            if (!intact.length) lineDiv.innerHTML = \"\";\n            else {\n                function killNode(node) {\n                    var tmp = node.nextSibling;\n                    node.parentNode.removeChild(node);\n                    return tmp;\n                }\n                var domPos = 0, curNode = lineDiv.firstChild, n;\n                for (var i = 0; i < intact.length; ++i) {\n                    var cur = intact[i];\n                    while (cur.domStart > domPos) {curNode = killNode(curNode); domPos++;}\n                    for (var j = 0, e = cur.to - cur.from; j < e; ++j) {curNode = curNode.nextSibling; domPos++;}\n                }\n                while (curNode) curNode = killNode(curNode);\n            }\n            // This pass fills in the lines that actually changed.\n            var nextIntact = intact.shift(), curNode = lineDiv.firstChild, j = from;\n            var sfrom = sel.from.line, sto = sel.to.line, inSel = sfrom < from && sto >= from;\n            var scratch = targetDocument.createElement(\"div\"), newElt;\n            doc.iter(from, to, function(line) {\n                var ch1 = null, ch2 = null;\n                if (inSel) {\n                    ch1 = 0;\n                    if (sto == j) {inSel = false; ch2 = sel.to.ch;}\n                } else if (sfrom == j) {\n                    if (sto == j) {ch1 = sel.from.ch; ch2 = sel.to.ch;}\n                    else {inSel = true; ch1 = sel.from.ch;}\n                }\n                if (nextIntact && nextIntact.to == j) nextIntact = intact.shift();\n                if (!nextIntact || nextIntact.from > j) {\n                    if (line.hidden) scratch.innerHTML = \"<pre></pre>\";\n                    else scratch.innerHTML = line.getHTML(ch1, ch2, true, tabText);\n                    lineDiv.insertBefore(scratch.firstChild, curNode);\n                } else {\n                    curNode = curNode.nextSibling;\n                }\n                ++j;\n            });\n        }\n\n        function updateGutter() {\n            if (!options.gutter && !options.lineNumbers) return;\n            var hText = mover.offsetHeight, hEditor = scroller.clientHeight;\n            gutter.style.height = (hText - hEditor < 2 ? hEditor : hText) + \"px\";\n            var html = [], i = showingFrom;\n            doc.iter(showingFrom, Math.max(showingTo, showingFrom + 1), function(line) {\n                if (line.hidden) {\n                    html.push(\"<pre></pre>\");\n                } else {\n                    var marker = line.gutterMarker;\n                    var text = options.lineNumbers ? i + options.firstLineNumber : null;\n                    if (marker && marker.text)\n                        text = marker.text.replace(\"%N%\", text != null ? text : \"\");\n                    else if (text == null)\n                        text = \"\\u00a0\";\n                    html.push((marker && marker.style ? '<pre class=\"' + marker.style + '\">' : \"<pre>\"), text);\n                    for (var j = 1; j < line.height; ++j) html.push(\"<br/>&#160;\");\n                    html.push(\"</pre>\");\n                }\n                ++i;\n            });\n            gutter.style.display = \"none\";\n            gutterText.innerHTML = html.join(\"\");\n            var minwidth = String(doc.size).length, firstNode = gutterText.firstChild, val = eltText(firstNode), pad = \"\";\n            while (val.length + pad.length < minwidth) pad += \"\\u00a0\";\n            if (pad) firstNode.insertBefore(targetDocument.createTextNode(pad), firstNode.firstChild);\n            gutter.style.display = \"\";\n            lineSpace.style.marginLeft = gutter.offsetWidth + \"px\";\n            gutterDirty = false;\n        }\n        function updateCursor() {\n            var head = sel.inverted ? sel.from : sel.to, lh = textHeight();\n            var pos = localCoords(head, true);\n            var wrapOff = eltOffset(wrapper), lineOff = eltOffset(lineDiv);\n            inputDiv.style.top = (pos.y + lineOff.top - wrapOff.top) + \"px\";\n            inputDiv.style.left = (pos.x + lineOff.left - wrapOff.left) + \"px\";\n            if (posEq(sel.from, sel.to)) {\n                cursor.style.top = pos.y + \"px\";\n                cursor.style.left = (options.lineWrapping ? Math.min(pos.x, lineSpace.offsetWidth) : pos.x) + \"px\";\n                cursor.style.display = \"\";\n            }\n            else cursor.style.display = \"none\";\n        }\n\n        function setShift(val) {\n            if (val) shiftSelecting = shiftSelecting || (sel.inverted ? sel.to : sel.from);\n            else shiftSelecting = null;\n        }\n        function setSelectionUser(from, to) {\n            var sh = shiftSelecting && clipPos(shiftSelecting);\n            if (sh) {\n                if (posLess(sh, from)) from = sh;\n                else if (posLess(to, sh)) to = sh;\n            }\n            setSelection(from, to);\n            userSelChange = true;\n        }\n        // Update the selection. Last two args are only used by\n        // updateLines, since they have to be expressed in the line\n        // numbers before the update.\n        function setSelection(from, to, oldFrom, oldTo) {\n            goalColumn = null;\n            if (oldFrom == null) {oldFrom = sel.from.line; oldTo = sel.to.line;}\n            if (posEq(sel.from, from) && posEq(sel.to, to)) return;\n            if (posLess(to, from)) {var tmp = to; to = from; from = tmp;}\n\n            // Skip over hidden lines.\n            if (from.line != oldFrom) from = skipHidden(from, oldFrom, sel.from.ch);\n            if (to.line != oldTo) to = skipHidden(to, oldTo, sel.to.ch);\n\n            if (posEq(from, to)) sel.inverted = false;\n            else if (posEq(from, sel.to)) sel.inverted = false;\n            else if (posEq(to, sel.from)) sel.inverted = true;\n\n            // Some ugly logic used to only mark the lines that actually did\n            // see a change in selection as changed, rather than the whole\n            // selected range.\n            if (posEq(from, to)) {\n                if (!posEq(sel.from, sel.to))\n                    changes.push({from: oldFrom, to: oldTo + 1});\n            }\n            else if (posEq(sel.from, sel.to)) {\n                changes.push({from: from.line, to: to.line + 1});\n            }\n            else {\n                if (!posEq(from, sel.from)) {\n                    if (from.line < oldFrom)\n                        changes.push({from: from.line, to: Math.min(to.line, oldFrom) + 1});\n                    else\n                        changes.push({from: oldFrom, to: Math.min(oldTo, from.line) + 1});\n                }\n                if (!posEq(to, sel.to)) {\n                    if (to.line < oldTo)\n                        changes.push({from: Math.max(oldFrom, from.line), to: oldTo + 1});\n                    else\n                        changes.push({from: Math.max(from.line, oldTo), to: to.line + 1});\n                }\n            }\n            sel.from = from; sel.to = to;\n            selectionChanged = true;\n        }\n        function skipHidden(pos, oldLine, oldCh) {\n            function getNonHidden(dir) {\n                var lNo = pos.line + dir, end = dir == 1 ? doc.size : -1;\n                while (lNo != end) {\n                    var line = getLine(lNo);\n                    if (!line.hidden) {\n                        var ch = pos.ch;\n                        if (ch > oldCh || ch > line.text.length) ch = line.text.length;\n                        return {line: lNo, ch: ch};\n                    }\n                    lNo += dir;\n                }\n            }\n            var line = getLine(pos.line);\n            if (!line.hidden) return pos;\n            if (pos.line >= oldLine) return getNonHidden(1) || getNonHidden(-1);\n            else return getNonHidden(-1) || getNonHidden(1);\n        }\n        function setCursor(line, ch, user) {\n            var pos = clipPos({line: line, ch: ch || 0});\n            (user ? setSelectionUser : setSelection)(pos, pos);\n        }\n\n        function clipLine(n) {return Math.max(0, Math.min(n, doc.size-1));}\n        function clipPos(pos) {\n            if (pos.line < 0) return {line: 0, ch: 0};\n            if (pos.line >= doc.size) return {line: doc.size-1, ch: getLine(doc.size-1).text.length};\n            var ch = pos.ch, linelen = getLine(pos.line).text.length;\n            if (ch == null || ch > linelen) return {line: pos.line, ch: linelen};\n            else if (ch < 0) return {line: pos.line, ch: 0};\n            else return pos;\n        }\n\n        function findPosH(dir, unit) {\n            var end = sel.inverted ? sel.from : sel.to, line = end.line, ch = end.ch;\n            var lineObj = getLine(line);\n            function findNextLine() {\n                for (var l = line + dir, e = dir < 0 ? -1 : doc.size; l != e; l += dir) {\n                    var lo = getLine(l);\n                    if (!lo.hidden) { line = l; lineObj = lo; return true; }\n                }\n            }\n            function moveOnce(boundToLine) {\n                if (ch == (dir < 0 ? 0 : lineObj.text.length)) {\n                    if (!boundToLine && findNextLine()) ch = dir < 0 ? lineObj.text.length : 0;\n                    else return false;\n                } else ch += dir;\n                return true;\n            }\n            if (unit == \"char\") moveOnce();\n            else if (unit == \"column\") moveOnce(true);\n            else if (unit == \"word\") {\n                var sawWord = false;\n                for (;;) {\n                    if (dir < 0) if (!moveOnce()) break;\n                    if (isWordChar(lineObj.text.charAt(ch))) sawWord = true;\n                    else if (sawWord) {if (dir < 0) {dir = 1; moveOnce();} break;}\n                    if (dir > 0) if (!moveOnce()) break;\n                }\n            }\n            return {line: line, ch: ch};\n        }\n        function moveH(dir, unit) {\n            var pos = dir < 0 ? sel.from : sel.to;\n            if (shiftSelecting || posEq(sel.from, sel.to)) pos = findPosH(dir, unit);\n            setCursor(pos.line, pos.ch, true);\n        }\n        function deleteH(dir, unit) {\n            if (!posEq(sel.from, sel.to)) replaceRange(\"\", sel.from, sel.to);\n            else if (dir < 0) replaceRange(\"\", findPosH(dir, unit), sel.to);\n            else replaceRange(\"\", sel.from, findPosH(dir, unit));\n            userSelChange = true;\n        }\n        var goalColumn = null;\n        function moveV(dir, unit) {\n            var dist = 0, pos = localCoords(sel.inverted ? sel.from : sel.to, true);\n            if (goalColumn != null) pos.x = goalColumn;\n            if (unit == \"page\") dist = scroller.clientHeight;\n            else if (unit == \"line\") dist = textHeight();\n            var target = coordsChar(pos.x, pos.y + dist * dir + 2);\n            setCursor(target.line, target.ch, true);\n            goalColumn = pos.x;\n        }\n\n        function selectWordAt(pos) {\n            var line = getLine(pos.line).text;\n            var start = pos.ch, end = pos.ch;\n            while (start > 0 && isWordChar(line.charAt(start - 1))) --start;\n            while (end < line.length && isWordChar(line.charAt(end))) ++end;\n            setSelectionUser({line: pos.line, ch: start}, {line: pos.line, ch: end});\n        }\n        function selectLine(line) {\n            setSelectionUser({line: line, ch: 0}, {line: line, ch: getLine(line).text.length});\n        }\n        function indentSelected(mode) {\n            if (posEq(sel.from, sel.to)) return indentLine(sel.from.line, mode);\n            var e = sel.to.line - (sel.to.ch ? 0 : 1);\n            for (var i = sel.from.line; i <= e; ++i) indentLine(i, mode);\n        }\n\n        function indentLine(n, how) {\n            if (!how) how = \"add\";\n            if (how == \"smart\") {\n                if (!mode.indent) how = \"prev\";\n                else var state = getStateBefore(n);\n            }\n\n            var line = getLine(n), curSpace = line.indentation(options.tabSize),\n                curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n            if (how == \"prev\") {\n                if (n) indentation = getLine(n-1).indentation(options.tabSize);\n                else indentation = 0;\n            }\n            else if (how == \"smart\") indentation = mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n            else if (how == \"add\") indentation = curSpace + options.indentUnit;\n            else if (how == \"subtract\") indentation = curSpace - options.indentUnit;\n            indentation = Math.max(0, indentation);\n            var diff = indentation - curSpace;\n\n            if (!diff) {\n                if (sel.from.line != n && sel.to.line != n) return;\n                var indentString = curSpaceString;\n            }\n            else {\n                var indentString = \"\", pos = 0;\n                if (options.indentWithTabs)\n                    for (var i = Math.floor(indentation / options.tabSize); i; --i) {pos += options.tabSize; indentString += \"\\t\";}\n                while (pos < indentation) {++pos; indentString += \" \";}\n            }\n\n            replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length});\n        }\n\n        function loadMode() {\n            mode = CodeMirror.getMode(options, options.mode);\n            doc.iter(0, doc.size, function(line) { line.stateAfter = null; });\n            work = [0];\n            startWorker();\n        }\n        function gutterChanged() {\n            var visible = options.gutter || options.lineNumbers;\n            gutter.style.display = visible ? \"\" : \"none\";\n            if (visible) gutterDirty = true;\n            else lineDiv.parentNode.style.marginLeft = 0;\n        }\n        function wrappingChanged(from, to) {\n            if (options.lineWrapping) {\n                wrapper.className += \" CodeMirror-wrap\";\n                var perLine = scroller.clientWidth / charWidth() - 3;\n                doc.iter(0, doc.size, function(line) {\n                    if (line.hidden) return;\n                    var guess = Math.ceil(line.text.length / perLine) || 1;\n                    if (guess != 1) updateLineHeight(line, guess);\n                });\n                lineSpace.style.width = code.style.width = \"\";\n            } else {\n                wrapper.className = wrapper.className.replace(\" CodeMirror-wrap\", \"\");\n                maxWidth = null; maxLine = \"\";\n                doc.iter(0, doc.size, function(line) {\n                    if (line.height != 1 && !line.hidden) updateLineHeight(line, 1);\n                    if (line.text.length > maxLine.length) maxLine = line.text;\n                });\n            }\n            changes.push({from: 0, to: doc.size});\n        }\n        function computeTabText() {\n            for (var str = '<span class=\"cm-tab\">', i = 0; i < options.tabSize; ++i) str += \" \";\n            return str + \"</span>\";\n        }\n        function tabsChanged() {\n            tabText = computeTabText();\n            updateDisplay(true);\n        }\n        function themeChanged() {\n            scroller.className = scroller.className.replace(/\\s*cm-s-\\w+/g, \"\") +\n                options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n        }\n\n        function TextMarker() { this.set = []; }\n        TextMarker.prototype.clear = operation(function() {\n            var min = Infinity, max = -Infinity;\n            for (var i = 0, e = this.set.length; i < e; ++i) {\n                var line = this.set[i], mk = line.marked;\n                if (!mk || !line.parent) continue;\n                var lineN = lineNo(line);\n                min = Math.min(min, lineN); max = Math.max(max, lineN);\n                for (var j = 0; j < mk.length; ++j)\n                    if (mk[j].set == this.set) mk.splice(j--, 1);\n            }\n            if (min != Infinity)\n                changes.push({from: min, to: max + 1});\n        });\n        TextMarker.prototype.find = function() {\n            var from, to;\n            for (var i = 0, e = this.set.length; i < e; ++i) {\n                var line = this.set[i], mk = line.marked;\n                for (var j = 0; j < mk.length; ++j) {\n                    var mark = mk[j];\n                    if (mark.set == this.set) {\n                        if (mark.from != null || mark.to != null) {\n                            var found = lineNo(line);\n                            if (found != null) {\n                                if (mark.from != null) from = {line: found, ch: mark.from};\n                                if (mark.to != null) to = {line: found, ch: mark.to};\n                            }\n                        }\n                    }\n                }\n            }\n            return {from: from, to: to};\n        };\n\n        function markText(from, to, className) {\n            from = clipPos(from); to = clipPos(to);\n            var tm = new TextMarker();\n            function add(line, from, to, className) {\n                getLine(line).addMark(new MarkedText(from, to, className, tm.set));\n            }\n            if (from.line == to.line) add(from.line, from.ch, to.ch, className);\n            else {\n                add(from.line, from.ch, null, className);\n                for (var i = from.line + 1, e = to.line; i < e; ++i)\n                    add(i, null, null, className);\n                add(to.line, null, to.ch, className);\n            }\n            changes.push({from: from.line, to: to.line + 1});\n            return tm;\n        }\n\n        function setBookmark(pos) {\n            pos = clipPos(pos);\n            var bm = new Bookmark(pos.ch);\n            getLine(pos.line).addMark(bm);\n            return bm;\n        }\n\n        function addGutterMarker(line, text, className) {\n            if (typeof line == \"number\") line = getLine(clipLine(line));\n            line.gutterMarker = {text: text, style: className};\n            gutterDirty = true;\n            return line;\n        }\n        function removeGutterMarker(line) {\n            if (typeof line == \"number\") line = getLine(clipLine(line));\n            line.gutterMarker = null;\n            gutterDirty = true;\n        }\n\n        function changeLine(handle, op) {\n            var no = handle, line = handle;\n            if (typeof handle == \"number\") line = getLine(clipLine(handle));\n            else no = lineNo(handle);\n            if (no == null) return null;\n            if (op(line, no)) changes.push({from: no, to: no + 1});\n            else return null;\n            return line;\n        }\n        function setLineClass(handle, className) {\n            return changeLine(handle, function(line) {\n                if (line.className != className) {\n                    line.className = className;\n                    return true;\n                }\n            });\n        }\n        function setLineHidden(handle, hidden) {\n            return changeLine(handle, function(line, no) {\n                if (line.hidden != hidden) {\n                    line.hidden = hidden;\n                    updateLineHeight(line, hidden ? 0 : 1);\n                    if (hidden && (sel.from.line == no || sel.to.line == no))\n                        setSelection(skipHidden(sel.from, sel.from.line, sel.from.ch),\n                            skipHidden(sel.to, sel.to.line, sel.to.ch));\n                    return (gutterDirty = true);\n                }\n            });\n        }\n\n        function lineInfo(line) {\n            if (typeof line == \"number\") {\n                if (!isLine(line)) return null;\n                var n = line;\n                line = getLine(line);\n                if (!line) return null;\n            }\n            else {\n                var n = lineNo(line);\n                if (n == null) return null;\n            }\n            var marker = line.gutterMarker;\n            return {line: n, handle: line, text: line.text, markerText: marker && marker.text,\n                markerClass: marker && marker.style, lineClass: line.className};\n        }\n\n        function stringWidth(str) {\n            measure.innerHTML = \"<pre><span>x</span></pre>\";\n            measure.firstChild.firstChild.firstChild.nodeValue = str;\n            return measure.firstChild.firstChild.offsetWidth || 10;\n        }\n        // These are used to go from pixel positions to character\n        // positions, taking varying character widths into account.\n        function charFromX(line, x) {\n            if (x <= 0) return 0;\n            var lineObj = getLine(line), text = lineObj.text;\n            function getX(len) {\n                measure.innerHTML = \"<pre><span>\" + lineObj.getHTML(null, null, false, tabText, len) + \"</span></pre>\";\n                return measure.firstChild.firstChild.offsetWidth;\n            }\n            var from = 0, fromX = 0, to = text.length, toX;\n            // Guess a suitable upper bound for our search.\n            var estimated = Math.min(to, Math.ceil(x / charWidth()));\n            for (;;) {\n                var estX = getX(estimated);\n                if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2));\n                else {toX = estX; to = estimated; break;}\n            }\n            if (x > toX) return to;\n            // Try to guess a suitable lower bound as well.\n            estimated = Math.floor(to * 0.8); estX = getX(estimated);\n            if (estX < x) {from = estimated; fromX = estX;}\n            // Do a binary search between these bounds.\n            for (;;) {\n                if (to - from <= 1) return (toX - x > x - fromX) ? from : to;\n                var middle = Math.ceil((from + to) / 2), middleX = getX(middle);\n                if (middleX > x) {to = middle; toX = middleX;}\n                else {from = middle; fromX = middleX;}\n            }\n        }\n\n        var tempId = Math.floor(Math.random() * 0xffffff).toString(16);\n        function measureLine(line, ch) {\n            var extra = \"\";\n            // Include extra text at the end to make sure the measured line is wrapped in the right way.\n            if (options.lineWrapping) {\n                var end = line.text.indexOf(\" \", ch + 2);\n                extra = htmlEscape(line.text.slice(ch + 1, end < 0 ? line.text.length : end + (ie ? 5 : 0)));\n            }\n            measure.innerHTML = \"<pre>\" + line.getHTML(null, null, false, tabText, ch) +\n                '<span id=\"CodeMirror-temp-' + tempId + '\">' + htmlEscape(line.text.charAt(ch) || \" \") + \"</span>\" +\n                extra + \"</pre>\";\n            var elt = document.getElementById(\"CodeMirror-temp-\" + tempId);\n            var top = elt.offsetTop, left = elt.offsetLeft;\n            // Older IEs report zero offsets for spans directly after a wrap\n            if (ie && ch && top == 0 && left == 0) {\n                var backup = document.createElement(\"span\");\n                backup.innerHTML = \"x\";\n                elt.parentNode.insertBefore(backup, elt.nextSibling);\n                top = backup.offsetTop;\n            }\n            return {top: top, left: left};\n        }\n        function localCoords(pos, inLineWrap) {\n            var x, lh = textHeight(), y = lh * (heightAtLine(doc, pos.line) - (inLineWrap ? displayOffset : 0));\n            if (pos.ch == 0) x = 0;\n            else {\n                var sp = measureLine(getLine(pos.line), pos.ch);\n                x = sp.left;\n                if (options.lineWrapping) y += Math.max(0, sp.top);\n            }\n            return {x: x, y: y, yBot: y + lh};\n        }\n        // Coords must be lineSpace-local\n        function coordsChar(x, y) {\n            if (y < 0) y = 0;\n            var th = textHeight(), cw = charWidth(), heightPos = displayOffset + Math.floor(y / th);\n            var lineNo = lineAtHeight(doc, heightPos);\n            if (lineNo >= doc.size) return {line: doc.size - 1, ch: getLine(doc.size - 1).text.length};\n            var lineObj = getLine(lineNo), text = lineObj.text;\n            var tw = options.lineWrapping, innerOff = tw ? heightPos - heightAtLine(doc, lineNo) : 0;\n            if (x <= 0 && innerOff == 0) return {line: lineNo, ch: 0};\n            function getX(len) {\n                var sp = measureLine(lineObj, len);\n                if (tw) {\n                    var off = Math.round(sp.top / th);\n                    return Math.max(0, sp.left + (off - innerOff) * scroller.clientWidth);\n                }\n                return sp.left;\n            }\n            var from = 0, fromX = 0, to = text.length, toX;\n            // Guess a suitable upper bound for our search.\n            var estimated = Math.min(to, Math.ceil((x + innerOff * scroller.clientWidth * .9) / cw));\n            for (;;) {\n                var estX = getX(estimated);\n                if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2));\n                else {toX = estX; to = estimated; break;}\n            }\n            if (x > toX) return {line: lineNo, ch: to};\n            // Try to guess a suitable lower bound as well.\n            estimated = Math.floor(to * 0.8); estX = getX(estimated);\n            if (estX < x) {from = estimated; fromX = estX;}\n            // Do a binary search between these bounds.\n            for (;;) {\n                if (to - from <= 1) return {line: lineNo, ch: (toX - x > x - fromX) ? from : to};\n                var middle = Math.ceil((from + to) / 2), middleX = getX(middle);\n                if (middleX > x) {to = middle; toX = middleX;}\n                else {from = middle; fromX = middleX;}\n            }\n        }\n        function pageCoords(pos) {\n            var local = localCoords(pos, true), off = eltOffset(lineSpace);\n            return {x: off.left + local.x, y: off.top + local.y, yBot: off.top + local.yBot};\n        }\n\n        var cachedHeight, cachedHeightFor, measureText;\n        function textHeight() {\n            if (measureText == null) {\n                measureText = \"<pre>\";\n                for (var i = 0; i < 49; ++i) measureText += \"x<br/>\";\n                measureText += \"x</pre>\";\n            }\n            var offsetHeight = lineDiv.clientHeight;\n            if (offsetHeight == cachedHeightFor) return cachedHeight;\n            cachedHeightFor = offsetHeight;\n            measure.innerHTML = measureText;\n            cachedHeight = measure.firstChild.offsetHeight / 50 || 1;\n            measure.innerHTML = \"\";\n            return cachedHeight;\n        }\n        var cachedWidth, cachedWidthFor = 0;\n        function charWidth() {\n            if (scroller.clientWidth == cachedWidthFor) return cachedWidth;\n            cachedWidthFor = scroller.clientWidth;\n            return (cachedWidth = stringWidth(\"x\"));\n        }\n        function paddingTop() {return lineSpace.offsetTop;}\n        function paddingLeft() {return lineSpace.offsetLeft;}\n\n        function posFromMouse(e, liberal) {\n            var offW = eltOffset(scroller, true), x, y;\n            // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n            try { x = e.clientX; y = e.clientY; } catch (e) { return null; }\n            // This is a mess of a heuristic to try and determine whether a\n            // scroll-bar was clicked or not, and to return null if one was\n            // (and !liberal).\n            if (!liberal && (x - offW.left > scroller.clientWidth || y - offW.top > scroller.clientHeight))\n                return null;\n            var offL = eltOffset(lineSpace, true);\n            return coordsChar(x - offL.left, y - offL.top);\n        }\n        function onContextMenu(e) {\n            var pos = posFromMouse(e);\n            if (!pos || window.opera) return; // Opera is difficult.\n            if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to))\n                operation(setCursor)(pos.line, pos.ch);\n\n            var oldCSS = input.style.cssText;\n            inputDiv.style.position = \"absolute\";\n            input.style.cssText = \"position: fixed; width: 30px; height: 30px; top: \" + (e.clientY - 5) +\n                \"px; left: \" + (e.clientX - 5) + \"px; z-index: 1000; background: white; \" +\n                \"border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n            leaveInputAlone = true;\n            var val = input.value = getSelection();\n            focusInput();\n            input.select();\n            function rehide() {\n                var newVal = splitLines(input.value).join(\"\\n\");\n                if (newVal != val) operation(replaceSelection)(newVal, \"end\");\n                inputDiv.style.position = \"relative\";\n                input.style.cssText = oldCSS;\n                leaveInputAlone = false;\n                resetInput(true);\n                slowPoll();\n            }\n\n            if (gecko) {\n                e_stop(e);\n                var mouseup = connect(window, \"mouseup\", function() {\n                    mouseup();\n                    setTimeout(rehide, 20);\n                }, true);\n            }\n            else {\n                setTimeout(rehide, 50);\n            }\n        }\n\n        // Cursor-blinking\n        function restartBlink() {\n            clearInterval(blinker);\n            var on = true;\n            cursor.style.visibility = \"\";\n            blinker = setInterval(function() {\n                cursor.style.visibility = (on = !on) ? \"\" : \"hidden\";\n            }, 650);\n        }\n\n        var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\"};\n        function matchBrackets(autoclear) {\n            var head = sel.inverted ? sel.from : sel.to, line = getLine(head.line), pos = head.ch - 1;\n            var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];\n            if (!match) return;\n            var ch = match.charAt(0), forward = match.charAt(1) == \">\", d = forward ? 1 : -1, st = line.styles;\n            for (var off = pos + 1, i = 0, e = st.length; i < e; i+=2)\n                if ((off -= st[i].length) <= 0) {var style = st[i+1]; break;}\n\n            var stack = [line.text.charAt(pos)], re = /[(){}[\\]]/;\n            function scan(line, from, to) {\n                if (!line.text) return;\n                var st = line.styles, pos = forward ? 0 : line.text.length - 1, cur;\n                for (var i = forward ? 0 : st.length - 2, e = forward ? st.length : -2; i != e; i += 2*d) {\n                    var text = st[i];\n                    if (st[i+1] != null && st[i+1] != style) {pos += d * text.length; continue;}\n                    for (var j = forward ? 0 : text.length - 1, te = forward ? text.length : -1; j != te; j += d, pos+=d) {\n                        if (pos >= from && pos < to && re.test(cur = text.charAt(j))) {\n                            var match = matching[cur];\n                            if (match.charAt(1) == \">\" == forward) stack.push(cur);\n                            else if (stack.pop() != match.charAt(0)) return {pos: pos, match: false};\n                            else if (!stack.length) return {pos: pos, match: true};\n                        }\n                    }\n                }\n            }\n            for (var i = head.line, e = forward ? Math.min(i + 100, doc.size) : Math.max(-1, i - 100); i != e; i+=d) {\n                var line = getLine(i), first = i == head.line;\n                var found = scan(line, first && forward ? pos + 1 : 0, first && !forward ? pos : line.text.length);\n                if (found) break;\n            }\n            if (!found) found = {pos: null, match: false};\n            var style = found.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n            var one = markText({line: head.line, ch: pos}, {line: head.line, ch: pos+1}, style),\n                two = found.pos != null && markText({line: i, ch: found.pos}, {line: i, ch: found.pos + 1}, style);\n            var clear = operation(function(){one.clear(); two && two.clear();});\n            if (autoclear) setTimeout(clear, 800);\n            else bracketHighlighted = clear;\n        }\n\n        // Finds the line to start with when starting a parse. Tries to\n        // find a line with a stateAfter, so that it can start with a\n        // valid state. If that fails, it returns the line with the\n        // smallest indentation, which tends to need the least context to\n        // parse correctly.\n        function findStartLine(n) {\n            var minindent, minline;\n            for (var search = n, lim = n - 40; search > lim; --search) {\n                if (search == 0) return 0;\n                var line = getLine(search-1);\n                if (line.stateAfter) return search;\n                var indented = line.indentation(options.tabSize);\n                if (minline == null || minindent > indented) {\n                    minline = search - 1;\n                    minindent = indented;\n                }\n            }\n            return minline;\n        }\n        function getStateBefore(n) {\n            var start = findStartLine(n), state = start && getLine(start-1).stateAfter;\n            if (!state) state = startState(mode);\n            else state = copyState(mode, state);\n            doc.iter(start, n, function(line) {\n                line.highlight(mode, state, options.tabSize);\n                line.stateAfter = copyState(mode, state);\n            });\n            if (start < n) changes.push({from: start, to: n});\n            if (n < doc.size && !getLine(n).stateAfter) work.push(n);\n            return state;\n        }\n        function highlightLines(start, end) {\n            var state = getStateBefore(start);\n            doc.iter(start, end, function(line) {\n                line.highlight(mode, state, options.tabSize);\n                line.stateAfter = copyState(mode, state);\n            });\n        }\n        function highlightWorker() {\n            var end = +new Date + options.workTime;\n            var foundWork = work.length;\n            while (work.length) {\n                if (!getLine(showingFrom).stateAfter) var task = showingFrom;\n                else var task = work.pop();\n                if (task >= doc.size) continue;\n                var start = findStartLine(task), state = start && getLine(start-1).stateAfter;\n                if (state) state = copyState(mode, state);\n                else state = startState(mode);\n\n                var unchanged = 0, compare = mode.compareStates, realChange = false,\n                    i = start, bail = false;\n                doc.iter(i, doc.size, function(line) {\n                    var hadState = line.stateAfter;\n                    if (+new Date > end) {\n                        work.push(i);\n                        startWorker(options.workDelay);\n                        if (realChange) changes.push({from: task, to: i + 1});\n                        return (bail = true);\n                    }\n                    var changed = line.highlight(mode, state, options.tabSize);\n                    if (changed) realChange = true;\n                    line.stateAfter = copyState(mode, state);\n                    if (compare) {\n                        if (hadState && compare(hadState, state)) return true;\n                    } else {\n                        if (changed !== false || !hadState) unchanged = 0;\n                        else if (++unchanged > 3 && (!mode.indent || mode.indent(hadState, \"\") == mode.indent(state, \"\")))\n                            return true;\n                    }\n                    ++i;\n                });\n                if (bail) return;\n                if (realChange) changes.push({from: task, to: i + 1});\n            }\n            if (foundWork && options.onHighlightComplete)\n                options.onHighlightComplete(instance);\n        }\n        function startWorker(time) {\n            if (!work.length) return;\n            highlight.set(time, operation(highlightWorker));\n        }\n\n        // Operations are used to wrap changes in such a way that each\n        // change won't have to update the cursor and display (which would\n        // be awkward, slow, and error-prone), but instead updates are\n        // batched and then all combined and executed at once.\n        function startOperation() {\n            updateInput = userSelChange = textChanged = null;\n            changes = []; selectionChanged = false; callbacks = [];\n        }\n        function endOperation() {\n            var reScroll = false, updated;\n            if (selectionChanged) reScroll = !scrollCursorIntoView();\n            if (changes.length) updated = updateDisplay(changes, true);\n            else {\n                if (selectionChanged) updateCursor();\n                if (gutterDirty) updateGutter();\n            }\n            if (reScroll) scrollCursorIntoView();\n            if (selectionChanged) {scrollEditorIntoView(); restartBlink();}\n\n            if (focused && !leaveInputAlone &&\n                (updateInput === true || (updateInput !== false && selectionChanged)))\n                resetInput(userSelChange);\n\n            if (selectionChanged && options.matchBrackets)\n                setTimeout(operation(function() {\n                    if (bracketHighlighted) {bracketHighlighted(); bracketHighlighted = null;}\n                    if (posEq(sel.from, sel.to)) matchBrackets(false);\n                }), 20);\n            var tc = textChanged, cbs = callbacks; // these can be reset by callbacks\n            if (selectionChanged && options.onCursorActivity)\n                options.onCursorActivity(instance);\n            if (tc && options.onChange && instance)\n                options.onChange(instance, tc);\n            for (var i = 0; i < cbs.length; ++i) cbs[i](instance);\n            if (updated && options.onUpdate) options.onUpdate(instance);\n        }\n        var nestedOperation = 0;\n        function operation(f) {\n            return function() {\n                if (!nestedOperation++) startOperation();\n                try {var result = f.apply(this, arguments);}\n                finally {if (!--nestedOperation) endOperation();}\n                return result;\n            };\n        }\n\n        for (var ext in extensions)\n            if (extensions.propertyIsEnumerable(ext) &&\n                !instance.propertyIsEnumerable(ext))\n                instance[ext] = extensions[ext];\n        return instance;\n    } // (end of function CodeMirror)\n\n    // The default configuration options.\n    CodeMirror.defaults = {\n        value: \"\",\n        mode: null,\n        theme: \"default\",\n        indentUnit: 2,\n        indentWithTabs: false,\n        tabSize: 4,\n        keyMap: \"default\",\n        extraKeys: null,\n        electricChars: true,\n        onKeyEvent: null,\n        lineWrapping: false,\n        lineNumbers: false,\n        gutter: false,\n        fixedGutter: false,\n        firstLineNumber: 1,\n        readOnly: false,\n        onChange: null,\n        onCursorActivity: null,\n        onGutterClick: null,\n        onHighlightComplete: null,\n        onUpdate: null,\n        onFocus: null, onBlur: null, onScroll: null,\n        matchBrackets: false,\n        workTime: 100,\n        workDelay: 200,\n        pollInterval: 100,\n        undoDepth: 40,\n        tabindex: null,\n        document: window.document\n    };\n\n    var mac = /Mac/.test(navigator.platform);\n    var win = /Win/.test(navigator.platform);\n\n    // Known modes, by name and by MIME\n    var modes = {}, mimeModes = {};\n    CodeMirror.defineMode = function(name, mode) {\n        if (!CodeMirror.defaults.mode && name != \"null\") CodeMirror.defaults.mode = name;\n        modes[name] = mode;\n    };\n    CodeMirror.defineMIME = function(mime, spec) {\n        mimeModes[mime] = spec;\n    };\n    CodeMirror.getMode = function(options, spec) {\n        if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec))\n            spec = mimeModes[spec];\n        if (typeof spec == \"string\")\n            var mname = spec, config = {};\n        else if (spec != null)\n            var mname = spec.name, config = spec;\n        var mfactory = modes[mname];\n        if (!mfactory) {\n            if (window.console) console.warn(\"No mode \" + mname + \" found, falling back to plain text.\");\n            return CodeMirror.getMode(options, \"text/plain\");\n        }\n        return mfactory(options, config || {});\n    };\n    CodeMirror.listModes = function() {\n        var list = [];\n        for (var m in modes)\n            if (modes.propertyIsEnumerable(m)) list.push(m);\n        return list;\n    };\n    CodeMirror.listMIMEs = function() {\n        var list = [];\n        for (var m in mimeModes)\n            if (mimeModes.propertyIsEnumerable(m)) list.push({mime: m, mode: mimeModes[m]});\n        return list;\n    };\n\n    var extensions = CodeMirror.extensions = {};\n    CodeMirror.defineExtension = function(name, func) {\n        extensions[name] = func;\n    };\n\n    var commands = CodeMirror.commands = {\n        selectAll: function(cm) {cm.setSelection({line: 0, ch: 0}, {line: cm.lineCount() - 1});},\n        killLine: function(cm) {\n            var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);\n            if (!sel && cm.getLine(from.line).length == from.ch) cm.replaceRange(\"\", from, {line: from.line + 1, ch: 0});\n            else cm.replaceRange(\"\", from, sel ? to : {line: from.line});\n        },\n        deleteLine: function(cm) {var l = cm.getCursor().line; cm.replaceRange(\"\", {line: l, ch: 0}, {line: l});},\n        undo: function(cm) {cm.undo();},\n        redo: function(cm) {cm.redo();},\n        goDocStart: function(cm) {cm.setCursor(0, 0, true);},\n        goDocEnd: function(cm) {cm.setSelection({line: cm.lineCount() - 1}, null, true);},\n        goLineStart: function(cm) {cm.setCursor(cm.getCursor().line, 0, true);},\n        goLineStartSmart: function(cm) {\n            var cur = cm.getCursor();\n            var text = cm.getLine(cur.line), firstNonWS = Math.max(0, text.search(/\\S/));\n            cm.setCursor(cur.line, cur.ch <= firstNonWS && cur.ch ? 0 : firstNonWS, true);\n        },\n        goLineEnd: function(cm) {cm.setSelection({line: cm.getCursor().line}, null, true);},\n        goLineUp: function(cm) {cm.moveV(-1, \"line\");},\n        goLineDown: function(cm) {cm.moveV(1, \"line\");},\n        goPageUp: function(cm) {cm.moveV(-1, \"page\");},\n        goPageDown: function(cm) {cm.moveV(1, \"page\");},\n        goCharLeft: function(cm) {cm.moveH(-1, \"char\");},\n        goCharRight: function(cm) {cm.moveH(1, \"char\");},\n        goColumnLeft: function(cm) {cm.moveH(-1, \"column\");},\n        goColumnRight: function(cm) {cm.moveH(1, \"column\");},\n        goWordLeft: function(cm) {cm.moveH(-1, \"word\");},\n        goWordRight: function(cm) {cm.moveH(1, \"word\");},\n        delCharLeft: function(cm) {cm.deleteH(-1, \"char\");},\n        delCharRight: function(cm) {cm.deleteH(1, \"char\");},\n        delWordLeft: function(cm) {cm.deleteH(-1, \"word\");},\n        delWordRight: function(cm) {cm.deleteH(1, \"word\");},\n        indentAuto: function(cm) {cm.indentSelection(\"smart\");},\n        indentMore: function(cm) {cm.indentSelection(\"add\");},\n        indentLess: function(cm) {cm.indentSelection(\"subtract\");},\n        insertTab: function(cm) {cm.replaceSelection(\"\\t\", \"end\");},\n        transposeChars: function(cm) {\n            var cur = cm.getCursor(), line = cm.getLine(cur.line);\n            if (cur.ch > 0 && cur.ch < line.length - 1)\n                cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1),\n                    {line: cur.line, ch: cur.ch - 1}, {line: cur.line, ch: cur.ch + 1});\n        },\n        newlineAndIndent: function(cm) {\n            cm.replaceSelection(\"\\n\", \"end\");\n            cm.indentLine(cm.getCursor().line);\n        },\n        toggleOverwrite: function(cm) {cm.toggleOverwrite();}\n    };\n\n    var keyMap = CodeMirror.keyMap = {};\n    keyMap.basic = {\n        \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n        \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n        \"Delete\": \"delCharRight\", \"Backspace\": \"delCharLeft\", \"Tab\": \"indentMore\", \"Shift-Tab\": \"indentLess\",\n        \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\"\n    };\n    // Note that the save and find-related commands aren't defined by\n    // default. Unknown commands are simply ignored.\n    keyMap.pcDefault = {\n        \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n        \"Ctrl-Home\": \"goDocStart\", \"Alt-Up\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Down\": \"goDocEnd\",\n        \"Ctrl-Left\": \"goWordLeft\", \"Ctrl-Right\": \"goWordRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n        \"Ctrl-Backspace\": \"delWordLeft\", \"Ctrl-Delete\": \"delWordRight\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n        \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n        fallthrough: \"basic\"\n    };\n    keyMap.macDefault = {\n        \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n        \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goWordLeft\",\n        \"Alt-Right\": \"goWordRight\", \"Cmd-Left\": \"goLineStart\", \"Cmd-Right\": \"goLineEnd\", \"Alt-Backspace\": \"delWordLeft\",\n        \"Ctrl-Alt-Backspace\": \"delWordRight\", \"Alt-Delete\": \"delWordRight\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n        \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n        fallthrough: [\"basic\", \"emacsy\"]\n    };\n    keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n    keyMap.emacsy = {\n        \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n        \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n        \"Ctrl-V\": \"goPageUp\", \"Shift-Ctrl-V\": \"goPageDown\", \"Ctrl-D\": \"delCharRight\", \"Ctrl-H\": \"delCharLeft\",\n        \"Alt-D\": \"delWordRight\", \"Alt-Backspace\": \"delWordLeft\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\"\n    };\n\n    function lookupKey(name, extraMap, map) {\n        function lookup(name, map, ft) {\n            var found = map[name];\n            if (found != null) return found;\n            if (ft == null) ft = map.fallthrough;\n            if (ft == null) return map.catchall;\n            if (typeof ft == \"string\") return lookup(name, keyMap[ft]);\n            for (var i = 0, e = ft.length; i < e; ++i) {\n                found = lookup(name, keyMap[ft[i]]);\n                if (found != null) return found;\n            }\n            return null;\n        }\n        return extraMap ? lookup(name, extraMap, map) : lookup(name, keyMap[map]);\n    }\n    function isModifierKey(event) {\n        var name = keyNames[event.keyCode];\n        return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n    }\n\n    CodeMirror.fromTextArea = function(textarea, options) {\n        if (!options) options = {};\n        options.value = textarea.value;\n        if (!options.tabindex && textarea.tabindex)\n            options.tabindex = textarea.tabindex;\n\n        function save() {textarea.value = instance.getValue();}\n        if (textarea.form) {\n            // Deplorable hack to make the submit method do the right thing.\n            var rmSubmit = connect(textarea.form, \"submit\", save, true);\n            if (typeof textarea.form.submit == \"function\") {\n                var realSubmit = textarea.form.submit;\n                function wrappedSubmit() {\n                    save();\n                    textarea.form.submit = realSubmit;\n                    textarea.form.submit();\n                    textarea.form.submit = wrappedSubmit;\n                }\n                textarea.form.submit = wrappedSubmit;\n            }\n        }\n\n        textarea.style.display = \"none\";\n        var instance = CodeMirror(function(node) {\n            textarea.parentNode.insertBefore(node, textarea.nextSibling);\n        }, options);\n        instance.save = save;\n        instance.getTextArea = function() { return textarea; };\n        instance.toTextArea = function() {\n            save();\n            textarea.parentNode.removeChild(instance.getWrapperElement());\n            textarea.style.display = \"\";\n            if (textarea.form) {\n                rmSubmit();\n                if (typeof textarea.form.submit == \"function\")\n                    textarea.form.submit = realSubmit;\n            }\n        };\n        return instance;\n    };\n\n    // Utility functions for working with state. Exported because modes\n    // sometimes need to do this.\n    function copyState(mode, state) {\n        if (state === true) return state;\n        if (mode.copyState) return mode.copyState(state);\n        var nstate = {};\n        for (var n in state) {\n            var val = state[n];\n            if (val instanceof Array) val = val.concat([]);\n            nstate[n] = val;\n        }\n        return nstate;\n    }\n    CodeMirror.copyState = copyState;\n    function startState(mode, a1, a2) {\n        return mode.startState ? mode.startState(a1, a2) : true;\n    }\n    CodeMirror.startState = startState;\n\n    // The character stream used by a mode's parser.\n    function StringStream(string, tabSize) {\n        this.pos = this.start = 0;\n        this.string = string;\n        this.tabSize = tabSize || 8;\n    }\n    StringStream.prototype = {\n        eol: function() {return this.pos >= this.string.length;},\n        sol: function() {return this.pos == 0;},\n        peek: function() {return this.string.charAt(this.pos);},\n        next: function() {\n            if (this.pos < this.string.length)\n                return this.string.charAt(this.pos++);\n        },\n        eat: function(match) {\n            var ch = this.string.charAt(this.pos);\n            if (typeof match == \"string\") var ok = ch == match;\n            else var ok = ch && (match.test ? match.test(ch) : match(ch));\n            if (ok) {++this.pos; return ch;}\n        },\n        eatWhile: function(match) {\n            var start = this.pos;\n            while (this.eat(match)){}\n            return this.pos > start;\n        },\n        eatSpace: function() {\n            var start = this.pos;\n            while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n            return this.pos > start;\n        },\n        skipToEnd: function() {this.pos = this.string.length;},\n        skipTo: function(ch) {\n            var found = this.string.indexOf(ch, this.pos);\n            if (found > -1) {this.pos = found; return true;}\n        },\n        backUp: function(n) {this.pos -= n;},\n        column: function() {return countColumn(this.string, this.start, this.tabSize);},\n        indentation: function() {return countColumn(this.string, null, this.tabSize);},\n        match: function(pattern, consume, caseInsensitive) {\n            if (typeof pattern == \"string\") {\n                function cased(str) {return caseInsensitive ? str.toLowerCase() : str;}\n                if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) {\n                    if (consume !== false) this.pos += pattern.length;\n                    return true;\n                }\n            }\n            else {\n                var match = this.string.slice(this.pos).match(pattern);\n                if (match && consume !== false) this.pos += match[0].length;\n                return match;\n            }\n        },\n        current: function(){return this.string.slice(this.start, this.pos);}\n    };\n    CodeMirror.StringStream = StringStream;\n\n    function MarkedText(from, to, className, set) {\n        this.from = from; this.to = to; this.style = className; this.set = set;\n    }\n    MarkedText.prototype = {\n        attach: function(line) { this.set.push(line); },\n        detach: function(line) {\n            var ix = indexOf(this.set, line);\n            if (ix > -1) this.set.splice(ix, 1);\n        },\n        split: function(pos, lenBefore) {\n            if (this.to <= pos && this.to != null) return null;\n            var from = this.from < pos || this.from == null ? null : this.from - pos + lenBefore;\n            var to = this.to == null ? null : this.to - pos + lenBefore;\n            return new MarkedText(from, to, this.style, this.set);\n        },\n        dup: function() { return new MarkedText(null, null, this.style, this.set); },\n        clipTo: function(fromOpen, from, toOpen, to, diff) {\n            if (this.from != null && this.from >= from)\n                this.from = Math.max(to, this.from) + diff;\n            if (this.to != null && this.to > from)\n                this.to = to < this.to ? this.to + diff : from;\n            if (fromOpen && to > this.from && (to < this.to || this.to == null))\n                this.from = null;\n            if (toOpen && (from < this.to || this.to == null) && (from > this.from || this.from == null))\n                this.to = null;\n        },\n        isDead: function() { return this.from != null && this.to != null && this.from >= this.to; },\n        sameSet: function(x) { return this.set == x.set; }\n    };\n\n    function Bookmark(pos) {\n        this.from = pos; this.to = pos; this.line = null;\n    }\n    Bookmark.prototype = {\n        attach: function(line) { this.line = line; },\n        detach: function(line) { if (this.line == line) this.line = null; },\n        split: function(pos, lenBefore) {\n            if (pos < this.from) {\n                this.from = this.to = (this.from - pos) + lenBefore;\n                return this;\n            }\n        },\n        isDead: function() { return this.from > this.to; },\n        clipTo: function(fromOpen, from, toOpen, to, diff) {\n            if ((fromOpen || from < this.from) && (toOpen || to > this.to)) {\n                this.from = 0; this.to = -1;\n            } else if (this.from > from) {\n                this.from = this.to = Math.max(to, this.from) + diff;\n            }\n        },\n        sameSet: function(x) { return false; },\n        find: function() {\n            if (!this.line || !this.line.parent) return null;\n            return {line: lineNo(this.line), ch: this.from};\n        },\n        clear: function() {\n            if (this.line) {\n                var found = indexOf(this.line.marked, this);\n                if (found != -1) this.line.marked.splice(found, 1);\n                this.line = null;\n            }\n        }\n    };\n\n    // Line objects. These hold state related to a line, including\n    // highlighting info (the styles array).\n    function Line(text, styles) {\n        this.styles = styles || [text, null];\n        this.text = text;\n        this.height = 1;\n        this.marked = this.gutterMarker = this.className = this.handlers = null;\n        this.stateAfter = this.parent = this.hidden = null;\n    }\n    Line.inheritMarks = function(text, orig) {\n        var ln = new Line(text), mk = orig && orig.marked;\n        if (mk) {\n            for (var i = 0; i < mk.length; ++i) {\n                if (mk[i].to == null && mk[i].style) {\n                    var newmk = ln.marked || (ln.marked = []), mark = mk[i];\n                    var nmark = mark.dup(); newmk.push(nmark); nmark.attach(ln);\n                }\n            }\n        }\n        return ln;\n    }\n    Line.prototype = {\n        // Replace a piece of a line, keeping the styles around it intact.\n        replace: function(from, to_, text) {\n            var st = [], mk = this.marked, to = to_ == null ? this.text.length : to_;\n            copyStyles(0, from, this.styles, st);\n            if (text) st.push(text, null);\n            copyStyles(to, this.text.length, this.styles, st);\n            this.styles = st;\n            this.text = this.text.slice(0, from) + text + this.text.slice(to);\n            this.stateAfter = null;\n            if (mk) {\n                var diff = text.length - (to - from);\n                for (var i = 0, mark = mk[i]; i < mk.length; ++i) {\n                    mark.clipTo(from == null, from || 0, to_ == null, to, diff);\n                    if (mark.isDead()) {mark.detach(this); mk.splice(i--, 1);}\n                }\n            }\n        },\n        // Split a part off a line, keeping styles and markers intact.\n        split: function(pos, textBefore) {\n            var st = [textBefore, null], mk = this.marked;\n            copyStyles(pos, this.text.length, this.styles, st);\n            var taken = new Line(textBefore + this.text.slice(pos), st);\n            if (mk) {\n                for (var i = 0; i < mk.length; ++i) {\n                    var mark = mk[i];\n                    var newmark = mark.split(pos, textBefore.length);\n                    if (newmark) {\n                        if (!taken.marked) taken.marked = [];\n                        taken.marked.push(newmark); newmark.attach(taken);\n                    }\n                }\n            }\n            return taken;\n        },\n        append: function(line) {\n            var mylen = this.text.length, mk = line.marked, mymk = this.marked;\n            this.text += line.text;\n            copyStyles(0, line.text.length, line.styles, this.styles);\n            if (mymk) {\n                for (var i = 0; i < mymk.length; ++i)\n                    if (mymk[i].to == null) mymk[i].to = mylen;\n            }\n            if (mk && mk.length) {\n                if (!mymk) this.marked = mymk = [];\n                outer: for (var i = 0; i < mk.length; ++i) {\n                    var mark = mk[i];\n                    if (!mark.from) {\n                        for (var j = 0; j < mymk.length; ++j) {\n                            var mymark = mymk[j];\n                            if (mymark.to == mylen && mymark.sameSet(mark)) {\n                                mymark.to = mark.to == null ? null : mark.to + mylen;\n                                if (mymark.isDead()) {\n                                    mymark.detach(this);\n                                    mk.splice(i--, 1);\n                                }\n                                continue outer;\n                            }\n                        }\n                    }\n                    mymk.push(mark);\n                    mark.attach(this);\n                    mark.from += mylen;\n                    if (mark.to != null) mark.to += mylen;\n                }\n            }\n        },\n        fixMarkEnds: function(other) {\n            var mk = this.marked, omk = other.marked;\n            if (!mk) return;\n            for (var i = 0; i < mk.length; ++i) {\n                var mark = mk[i], close = mark.to == null;\n                if (close && omk) {\n                    for (var j = 0; j < omk.length; ++j)\n                        if (omk[j].sameSet(mark)) {close = false; break;}\n                }\n                if (close) mark.to = this.text.length;\n            }\n        },\n        fixMarkStarts: function() {\n            var mk = this.marked;\n            if (!mk) return;\n            for (var i = 0; i < mk.length; ++i)\n                if (mk[i].from == null) mk[i].from = 0;\n        },\n        addMark: function(mark) {\n            mark.attach(this);\n            if (this.marked == null) this.marked = [];\n            this.marked.push(mark);\n            this.marked.sort(function(a, b){return (a.from || 0) - (b.from || 0);});\n        },\n        // Run the given mode's parser over a line, update the styles\n        // array, which contains alternating fragments of text and CSS\n        // classes.\n        highlight: function(mode, state, tabSize) {\n            var stream = new StringStream(this.text, tabSize), st = this.styles, pos = 0;\n            var changed = false, curWord = st[0], prevWord;\n            if (this.text == \"\" && mode.blankLine) mode.blankLine(state);\n            while (!stream.eol()) {\n                var style = mode.token(stream, state);\n                var substr = this.text.slice(stream.start, stream.pos);\n                stream.start = stream.pos;\n                if (pos && st[pos-1] == style)\n                    st[pos-2] += substr;\n                else if (substr) {\n                    if (!changed && (st[pos+1] != style || (pos && st[pos-2] != prevWord))) changed = true;\n                    st[pos++] = substr; st[pos++] = style;\n                    prevWord = curWord; curWord = st[pos];\n                }\n                // Give up when line is ridiculously long\n                if (stream.pos > 5000) {\n                    st[pos++] = this.text.slice(stream.pos); st[pos++] = null;\n                    break;\n                }\n            }\n            if (st.length != pos) {st.length = pos; changed = true;}\n            if (pos && st[pos-2] != prevWord) changed = true;\n            // Short lines with simple highlights return null, and are\n            // counted as changed by the driver because they are likely to\n            // highlight the same way in various contexts.\n            return changed || (st.length < 5 && this.text.length < 10 ? null : false);\n        },\n        // Fetch the parser token for a given character. Useful for hacks\n        // that want to inspect the mode state (say, for completion).\n        getTokenAt: function(mode, state, ch) {\n            var txt = this.text, stream = new StringStream(txt);\n            while (stream.pos < ch && !stream.eol()) {\n                stream.start = stream.pos;\n                var style = mode.token(stream, state);\n            }\n            return {start: stream.start,\n                end: stream.pos,\n                string: stream.current(),\n                className: style || null,\n                state: state};\n        },\n        indentation: function(tabSize) {return countColumn(this.text, null, tabSize);},\n        // Produces an HTML fragment for the line, taking selection,\n        // marking, and highlighting into account.\n        getHTML: function(sfrom, sto, includePre, tabText, endAt) {\n            var html = [], first = true;\n            if (includePre)\n                html.push(this.className ? '<pre class=\"' + this.className + '\">': \"<pre>\");\n            function span(text, style) {\n                if (!text) return;\n                // Work around a bug where, in some compat modes, IE ignores leading spaces\n                if (first && ie && text.charAt(0) == \" \") text = \"\\u00a0\" + text.slice(1);\n                first = false;\n                if (style) html.push('<span class=\"', style, '\">', htmlEscape(text).replace(/\\t/g, tabText), \"</span>\");\n                else html.push(htmlEscape(text).replace(/\\t/g, tabText));\n            }\n            var st = this.styles, allText = this.text, marked = this.marked;\n            if (sfrom == sto) sfrom = null;\n            var len = allText.length;\n            if (endAt != null) len = Math.min(endAt, len);\n\n            if (!allText && endAt == null)\n                span(\" \", sfrom != null && sto == null ? \"CodeMirror-selected\" : null);\n            else if (!marked && sfrom == null)\n                for (var i = 0, ch = 0; ch < len; i+=2) {\n                    var str = st[i], style = st[i+1], l = str.length;\n                    if (ch + l > len) str = str.slice(0, len - ch);\n                    ch += l;\n                    span(str, style && \"cm-\" + style);\n                }\n            else {\n                var pos = 0, i = 0, text = \"\", style, sg = 0;\n                var markpos = -1, mark = null;\n                function nextMark() {\n                    if (marked) {\n                        markpos += 1;\n                        mark = (markpos < marked.length) ? marked[markpos] : null;\n                    }\n                }\n                nextMark();\n                while (pos < len) {\n                    var upto = len;\n                    var extraStyle = \"\";\n                    if (sfrom != null) {\n                        if (sfrom > pos) upto = sfrom;\n                        else if (sto == null || sto > pos) {\n                            extraStyle = \" CodeMirror-selected\";\n                            if (sto != null) upto = Math.min(upto, sto);\n                        }\n                    }\n                    while (mark && mark.to != null && mark.to <= pos) nextMark();\n                    if (mark) {\n                        if (mark.from > pos) upto = Math.min(upto, mark.from);\n                        else {\n                            extraStyle += \" \" + mark.style;\n                            if (mark.to != null) upto = Math.min(upto, mark.to);\n                        }\n                    }\n                    for (;;) {\n                        var end = pos + text.length;\n                        var appliedStyle = style;\n                        if (extraStyle) appliedStyle = style ? style + extraStyle : extraStyle;\n                        span(end > upto ? text.slice(0, upto - pos) : text, appliedStyle);\n                        if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}\n                        pos = end;\n                        text = st[i++]; style = \"cm-\" + st[i++];\n                    }\n                }\n                if (sfrom != null && sto == null) span(\" \", \"CodeMirror-selected\");\n            }\n            if (includePre) html.push(\"</pre>\");\n            return html.join(\"\");\n        },\n        cleanUp: function() {\n            this.parent = null;\n            if (this.marked)\n                for (var i = 0, e = this.marked.length; i < e; ++i) this.marked[i].detach(this);\n        }\n    };\n    // Utility used by replace and split above\n    function copyStyles(from, to, source, dest) {\n        for (var i = 0, pos = 0, state = 0; pos < to; i+=2) {\n            var part = source[i], end = pos + part.length;\n            if (state == 0) {\n                if (end > from) dest.push(part.slice(from - pos, Math.min(part.length, to - pos)), source[i+1]);\n                if (end >= from) state = 1;\n            }\n            else if (state == 1) {\n                if (end > to) dest.push(part.slice(0, to - pos), source[i+1]);\n                else dest.push(part, source[i+1]);\n            }\n            pos = end;\n        }\n    }\n\n    // Data structure that holds the sequence of lines.\n    function LeafChunk(lines) {\n        this.lines = lines;\n        this.parent = null;\n        for (var i = 0, e = lines.length, height = 0; i < e; ++i) {\n            lines[i].parent = this;\n            height += lines[i].height;\n        }\n        this.height = height;\n    }\n    LeafChunk.prototype = {\n        chunkSize: function() { return this.lines.length; },\n        remove: function(at, n, callbacks) {\n            for (var i = at, e = at + n; i < e; ++i) {\n                var line = this.lines[i];\n                this.height -= line.height;\n                line.cleanUp();\n                if (line.handlers)\n                    for (var j = 0; j < line.handlers.length; ++j) callbacks.push(line.handlers[j]);\n            }\n            this.lines.splice(at, n);\n        },\n        collapse: function(lines) {\n            lines.splice.apply(lines, [lines.length, 0].concat(this.lines));\n        },\n        insertHeight: function(at, lines, height) {\n            this.height += height;\n            this.lines.splice.apply(this.lines, [at, 0].concat(lines));\n            for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this;\n        },\n        iterN: function(at, n, op) {\n            for (var e = at + n; at < e; ++at)\n                if (op(this.lines[at])) return true;\n        }\n    };\n    function BranchChunk(children) {\n        this.children = children;\n        var size = 0, height = 0;\n        for (var i = 0, e = children.length; i < e; ++i) {\n            var ch = children[i];\n            size += ch.chunkSize(); height += ch.height;\n            ch.parent = this;\n        }\n        this.size = size;\n        this.height = height;\n        this.parent = null;\n    }\n    BranchChunk.prototype = {\n        chunkSize: function() { return this.size; },\n        remove: function(at, n, callbacks) {\n            this.size -= n;\n            for (var i = 0; i < this.children.length; ++i) {\n                var child = this.children[i], sz = child.chunkSize();\n                if (at < sz) {\n                    var rm = Math.min(n, sz - at), oldHeight = child.height;\n                    child.remove(at, rm, callbacks);\n                    this.height -= oldHeight - child.height;\n                    if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n                    if ((n -= rm) == 0) break;\n                    at = 0;\n                } else at -= sz;\n            }\n            if (this.size - n < 25) {\n                var lines = [];\n                this.collapse(lines);\n                this.children = [new LeafChunk(lines)];\n            }\n        },\n        collapse: function(lines) {\n            for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines);\n        },\n        insert: function(at, lines) {\n            var height = 0;\n            for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height;\n            this.insertHeight(at, lines, height);\n        },\n        insertHeight: function(at, lines, height) {\n            this.size += lines.length;\n            this.height += height;\n            for (var i = 0, e = this.children.length; i < e; ++i) {\n                var child = this.children[i], sz = child.chunkSize();\n                if (at <= sz) {\n                    child.insertHeight(at, lines, height);\n                    if (child.lines && child.lines.length > 50) {\n                        while (child.lines.length > 50) {\n                            var spilled = child.lines.splice(child.lines.length - 25, 25);\n                            var newleaf = new LeafChunk(spilled);\n                            child.height -= newleaf.height;\n                            this.children.splice(i + 1, 0, newleaf);\n                            newleaf.parent = this;\n                        }\n                        this.maybeSpill();\n                    }\n                    break;\n                }\n                at -= sz;\n            }\n        },\n        maybeSpill: function() {\n            if (this.children.length <= 10) return;\n            var me = this;\n            do {\n                var spilled = me.children.splice(me.children.length - 5, 5);\n                var sibling = new BranchChunk(spilled);\n                if (!me.parent) { // Become the parent node\n                    var copy = new BranchChunk(me.children);\n                    copy.parent = me;\n                    me.children = [copy, sibling];\n                    me = copy;\n                } else {\n                    me.size -= sibling.size;\n                    me.height -= sibling.height;\n                    var myIndex = indexOf(me.parent.children, me);\n                    me.parent.children.splice(myIndex + 1, 0, sibling);\n                }\n                sibling.parent = me.parent;\n            } while (me.children.length > 10);\n            me.parent.maybeSpill();\n        },\n        iter: function(from, to, op) { this.iterN(from, to - from, op); },\n        iterN: function(at, n, op) {\n            for (var i = 0, e = this.children.length; i < e; ++i) {\n                var child = this.children[i], sz = child.chunkSize();\n                if (at < sz) {\n                    var used = Math.min(n, sz - at);\n                    if (child.iterN(at, used, op)) return true;\n                    if ((n -= used) == 0) break;\n                    at = 0;\n                } else at -= sz;\n            }\n        }\n    };\n\n    function getLineAt(chunk, n) {\n        while (!chunk.lines) {\n            for (var i = 0;; ++i) {\n                var child = chunk.children[i], sz = child.chunkSize();\n                if (n < sz) { chunk = child; break; }\n                n -= sz;\n            }\n        }\n        return chunk.lines[n];\n    }\n    function lineNo(line) {\n        if (line.parent == null) return null;\n        var cur = line.parent, no = indexOf(cur.lines, line);\n        for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n            for (var i = 0, e = chunk.children.length; ; ++i) {\n                if (chunk.children[i] == cur) break;\n                no += chunk.children[i].chunkSize();\n            }\n        }\n        return no;\n    }\n    function lineAtHeight(chunk, h) {\n        var n = 0;\n        outer: do {\n            for (var i = 0, e = chunk.children.length; i < e; ++i) {\n                var child = chunk.children[i], ch = child.height;\n                if (h < ch) { chunk = child; continue outer; }\n                h -= ch;\n                n += child.chunkSize();\n            }\n            return n;\n        } while (!chunk.lines);\n        for (var i = 0, e = chunk.lines.length; i < e; ++i) {\n            var line = chunk.lines[i], lh = line.height;\n            if (h < lh) break;\n            h -= lh;\n        }\n        return n + i;\n    }\n    function heightAtLine(chunk, n) {\n        var h = 0;\n        outer: do {\n            for (var i = 0, e = chunk.children.length; i < e; ++i) {\n                var child = chunk.children[i], sz = child.chunkSize();\n                if (n < sz) { chunk = child; continue outer; }\n                n -= sz;\n                h += child.height;\n            }\n            return h;\n        } while (!chunk.lines);\n        for (var i = 0; i < n; ++i) h += chunk.lines[i].height;\n        return h;\n    }\n\n    // The history object 'chunks' changes that are made close together\n    // and at almost the same time into bigger undoable units.\n    function History() {\n        this.time = 0;\n        this.done = []; this.undone = [];\n    }\n    History.prototype = {\n        addChange: function(start, added, old) {\n            this.undone.length = 0;\n            var time = +new Date, last = this.done[this.done.length - 1];\n            if (time - this.time > 400 || !last ||\n                last.start > start + added || last.start + last.added < start - last.added + last.old.length)\n                this.done.push({start: start, added: added, old: old});\n            else {\n                var oldoff = 0;\n                if (start < last.start) {\n                    for (var i = last.start - start - 1; i >= 0; --i)\n                        last.old.unshift(old[i]);\n                    last.added += last.start - start;\n                    last.start = start;\n                }\n                else if (last.start < start) {\n                    oldoff = start - last.start;\n                    added += oldoff;\n                }\n                for (var i = last.added - oldoff, e = old.length; i < e; ++i)\n                    last.old.push(old[i]);\n                if (last.added < added) last.added = added;\n            }\n            this.time = time;\n        }\n    };\n\n    function stopMethod() {e_stop(this);}\n    // Ensure an event has a stop method.\n    function addStop(event) {\n        if (!event.stop) event.stop = stopMethod;\n        return event;\n    }\n\n    function e_preventDefault(e) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n    }\n    function e_stopPropagation(e) {\n        if (e.stopPropagation) e.stopPropagation();\n        else e.cancelBubble = true;\n    }\n    function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n\n    function e_target(e) {return e.target || e.srcElement;}\n    function e_button(e) {\n        if (e.which) return e.which;\n        else if (e.button & 1) return 1;\n        else if (e.button & 2) return 3;\n        else if (e.button & 4) return 2;\n    }\n\n    // Event handler registration. If disconnect is true, it'll return a\n    // function that unregisters the handler.\n    function connect(node, type, handler, disconnect) {\n        if (typeof node.addEventListener == \"function\") {\n            node.addEventListener(type, handler, false);\n            if (disconnect) return function() {node.removeEventListener(type, handler, false);};\n        }\n        else {\n            var wrapHandler = function(event) {handler(event || window.event);};\n            node.attachEvent(\"on\" + type, wrapHandler);\n            if (disconnect) return function() {node.detachEvent(\"on\" + type, wrapHandler);};\n        }\n    }\n    CodeMirror.connect = connect;\n\n    function Delayed() {this.id = null;}\n    Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}};\n\n    // Detect drag-and-drop\n    var dragAndDrop = function() {\n        // IE8 has ondragstart and ondrop properties, but doesn't seem to\n        // actually support ondragstart the way it's supposed to work.\n        if (/MSIE [1-8]\\b/.test(navigator.userAgent)) return false;\n        var div = document.createElement('div');\n        return \"draggable\" in div;\n    }();\n\n    var gecko = /gecko\\/\\d{7}/i.test(navigator.userAgent);\n    var ie = /MSIE \\d/.test(navigator.userAgent);\n    var webkit = /WebKit\\//.test(navigator.userAgent);\n\n    var lineSep = \"\\n\";\n    // Feature-detect whether newlines in textareas are converted to \\r\\n\n    (function () {\n        var te = document.createElement(\"textarea\");\n        te.value = \"foo\\nbar\";\n        if (te.value.indexOf(\"\\r\") > -1) lineSep = \"\\r\\n\";\n    }());\n\n    // Counts the column offset in a string, taking tabs into account.\n    // Used mostly to find indentation.\n    function countColumn(string, end, tabSize) {\n        if (end == null) {\n            end = string.search(/[^\\s\\u00a0]/);\n            if (end == -1) end = string.length;\n        }\n        for (var i = 0, n = 0; i < end; ++i) {\n            if (string.charAt(i) == \"\\t\") n += tabSize - (n % tabSize);\n            else ++n;\n        }\n        return n;\n    }\n\n    function computedStyle(elt) {\n        if (elt.currentStyle) return elt.currentStyle;\n        return window.getComputedStyle(elt, null);\n    }\n\n    // Find the position of an element by following the offsetParent chain.\n    // If screen==true, it returns screen (rather than page) coordinates.\n    function eltOffset(node, screen) {\n        var bod = node.ownerDocument.body;\n        var x = 0, y = 0, skipBody = false;\n        for (var n = node; n; n = n.offsetParent) {\n            var ol = n.offsetLeft, ot = n.offsetTop;\n            // Firefox reports weird inverted offsets when the body has a border.\n            if (n == bod) { x += Math.abs(ol); y += Math.abs(ot); }\n            else { x += ol, y += ot; }\n            if (screen && computedStyle(n).position == \"fixed\")\n                skipBody = true;\n        }\n        var e = screen && !skipBody ? null : bod;\n        for (var n = node.parentNode; n != e; n = n.parentNode)\n            if (n.scrollLeft != null) { x -= n.scrollLeft; y -= n.scrollTop;}\n        return {left: x, top: y};\n    }\n    // Use the faster and saner getBoundingClientRect method when possible.\n    if (document.documentElement.getBoundingClientRect != null) eltOffset = function(node, screen) {\n        // Take the parts of bounding client rect that we are interested in so we are able to edit if need be,\n        // since the returned value cannot be changed externally (they are kept in sync as the element moves within the page)\n        try { var box = node.getBoundingClientRect(); box = { top: box.top, left: box.left }; }\n        catch(e) { box = {top: 0, left: 0}; }\n        if (!screen) {\n            // Get the toplevel scroll, working around browser differences.\n            if (window.pageYOffset == null) {\n                var t = document.documentElement || document.body.parentNode;\n                if (t.scrollTop == null) t = document.body;\n                box.top += t.scrollTop; box.left += t.scrollLeft;\n            } else {\n                box.top += window.pageYOffset; box.left += window.pageXOffset;\n            }\n        }\n        return box;\n    };\n\n    // Get a node's text content.\n    function eltText(node) {\n        return node.textContent || node.innerText || node.nodeValue || \"\";\n    }\n\n    // Operations on {line, ch} objects.\n    function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}\n    function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}\n    function copyPos(x) {return {line: x.line, ch: x.ch};}\n\n    var escapeElement = document.createElement(\"pre\");\n    function htmlEscape(str) {\n        escapeElement.textContent = str;\n        return escapeElement.innerHTML;\n    }\n    // Recent (late 2011) Opera betas insert bogus newlines at the start\n    // of the textContent, so we strip those.\n    if (htmlEscape(\"a\") == \"\\na\")\n        htmlEscape = function(str) {\n            escapeElement.textContent = str;\n            return escapeElement.innerHTML.slice(1);\n        };\n    // Some IEs don't preserve tabs through innerHTML\n    else if (htmlEscape(\"\\t\") != \"\\t\")\n        htmlEscape = function(str) {\n            escapeElement.innerHTML = \"\";\n            escapeElement.appendChild(document.createTextNode(str));\n            return escapeElement.innerHTML;\n        };\n    CodeMirror.htmlEscape = htmlEscape;\n\n    // Used to position the cursor after an undo/redo by finding the\n    // last edited character.\n    function editEnd(from, to) {\n        if (!to) return from ? from.length : 0;\n        if (!from) return to.length;\n        for (var i = from.length, j = to.length; i >= 0 && j >= 0; --i, --j)\n            if (from.charAt(i) != to.charAt(j)) break;\n        return j + 1;\n    }\n\n    function indexOf(collection, elt) {\n        if (collection.indexOf) return collection.indexOf(elt);\n        for (var i = 0, e = collection.length; i < e; ++i)\n            if (collection[i] == elt) return i;\n        return -1;\n    }\n    function isWordChar(ch) {\n        return /\\w/.test(ch) || ch.toUpperCase() != ch.toLowerCase();\n    }\n\n    // See if \"\".split is the broken IE version, if so, provide an\n    // alternative way to split lines.\n    var splitLines = \"\\n\\nb\".split(/\\n/).length != 3 ? function(string) {\n        var pos = 0, nl, result = [];\n        while ((nl = string.indexOf(\"\\n\", pos)) > -1) {\n            result.push(string.slice(pos, string.charAt(nl-1) == \"\\r\" ? nl - 1 : nl));\n            pos = nl + 1;\n        }\n        result.push(string.slice(pos));\n        return result;\n    } : function(string){return string.split(/\\r?\\n/);};\n    CodeMirror.splitLines = splitLines;\n\n    var hasSelection = window.getSelection ? function(te) {\n        try { return te.selectionStart != te.selectionEnd; }\n        catch(e) { return false; }\n    } : function(te) {\n        try {var range = te.ownerDocument.selection.createRange();}\n        catch(e) {}\n        if (!range || range.parentElement() != te) return false;\n        return range.compareEndPoints(\"StartToEnd\", range) != 0;\n    };\n\n    CodeMirror.defineMode(\"null\", function() {\n        return {token: function(stream) {stream.skipToEnd();}};\n    });\n    CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n    var keyNames = {3: \"Enter\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n        19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n        36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n        46: \"Delete\", 59: \";\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\", 186: \";\", 187: \"=\", 188: \",\",\n        189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\", 221: \"]\", 222: \"'\", 63276: \"PageUp\",\n        63277: \"PageDown\", 63275: \"End\", 63273: \"Home\", 63234: \"Left\", 63232: \"Up\", 63235: \"Right\",\n        63233: \"Down\", 63302: \"Insert\", 63272: \"Delete\"};\n    CodeMirror.keyNames = keyNames;\n    (function() {\n        // Number keys\n        for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i);\n        // Alphabetic keys\n        for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);\n        // Function keys\n        for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = \"F\" + i;\n    })();\n\n    return CodeMirror;\n})();\nCodeMirror.defineMode(\"xml\", function(config, parserConfig) {\n    var indentUnit = config.indentUnit;\n    var Kludges = parserConfig.htmlMode ? {\n        autoSelfClosers: {\"br\": true, \"img\": true, \"hr\": true, \"link\": true, \"input\": true,\n            \"meta\": true, \"col\": true, \"frame\": true, \"base\": true, \"area\": true},\n        doNotIndent: {\"pre\": true},\n        allowUnquoted: true\n    } : {autoSelfClosers: {}, doNotIndent: {}, allowUnquoted: false};\n    var alignCDATA = parserConfig.alignCDATA;\n\n    // Return variables for tokenizers\n    var tagName, type;\n\n    function inText(stream, state) {\n        function chain(parser) {\n            state.tokenize = parser;\n            return parser(stream, state);\n        }\n\n        var ch = stream.next();\n        if (ch == \"<\") {\n            if (stream.eat(\"!\")) {\n                if (stream.eat(\"[\")) {\n                    if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n                    else return null;\n                }\n                else if (stream.match(\"--\")) return chain(inBlock(\"comment\", \"-->\"));\n                else if (stream.match(\"DOCTYPE\", true, true)) {\n                    stream.eatWhile(/[\\w\\._\\-]/);\n                    return chain(doctype(1));\n                }\n                else return null;\n            }\n            else if (stream.eat(\"?\")) {\n                stream.eatWhile(/[\\w\\._\\-]/);\n                state.tokenize = inBlock(\"meta\", \"?>\");\n                return \"meta\";\n            }\n            else {\n                type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n                stream.eatSpace();\n                tagName = \"\";\n                var c;\n                while ((c = stream.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/))) tagName += c;\n                state.tokenize = inTag;\n                return \"tag\";\n            }\n        }\n        else if (ch == \"&\") {\n            stream.eatWhile(/[^;]/);\n            stream.eat(\";\");\n            return \"atom\";\n        }\n        else {\n            stream.eatWhile(/[^&<]/);\n            return null;\n        }\n    }\n\n    function inTag(stream, state) {\n        var ch = stream.next();\n        if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n            state.tokenize = inText;\n            type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n            return \"tag\";\n        }\n        else if (ch == \"=\") {\n            type = \"equals\";\n            return null;\n        }\n        else if (/[\\'\\\"]/.test(ch)) {\n            state.tokenize = inAttribute(ch);\n            return state.tokenize(stream, state);\n        }\n        else {\n            stream.eatWhile(/[^\\s\\u00a0=<>\\\"\\'\\/?]/);\n            return \"word\";\n        }\n    }\n\n    function inAttribute(quote) {\n        return function(stream, state) {\n            while (!stream.eol()) {\n                if (stream.next() == quote) {\n                    state.tokenize = inTag;\n                    break;\n                }\n            }\n            return \"string\";\n        };\n    }\n\n    function inBlock(style, terminator) {\n        return function(stream, state) {\n            while (!stream.eol()) {\n                if (stream.match(terminator)) {\n                    state.tokenize = inText;\n                    break;\n                }\n                stream.next();\n            }\n            return style;\n        };\n    }\n    function doctype(depth) {\n        return function(stream, state) {\n            var ch;\n            while ((ch = stream.next()) != null) {\n                if (ch == \"<\") {\n                    state.tokenize = doctype(depth + 1);\n                    return state.tokenize(stream, state);\n                } else if (ch == \">\") {\n                    if (depth == 1) {\n                        state.tokenize = inText;\n                        break;\n                    } else {\n                        state.tokenize = doctype(depth - 1);\n                        return state.tokenize(stream, state);\n                    }\n                }\n            }\n            return \"meta\";\n        };\n    }\n\n    var curState, setStyle;\n    function pass() {\n        for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]);\n    }\n    function cont() {\n        pass.apply(null, arguments);\n        return true;\n    }\n\n    function pushContext(tagName, startOfLine) {\n        var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName) || (curState.context && curState.context.noIndent);\n        curState.context = {\n            prev: curState.context,\n            tagName: tagName,\n            indent: curState.indented,\n            startOfLine: startOfLine,\n            noIndent: noIndent\n        };\n    }\n    function popContext() {\n        if (curState.context) curState.context = curState.context.prev;\n    }\n\n    function element(type) {\n        if (type == \"openTag\") {\n            curState.tagName = tagName;\n            return cont(attributes, endtag(curState.startOfLine));\n        } else if (type == \"closeTag\") {\n            var err = false;\n            if (curState.context) {\n                err = curState.context.tagName != tagName;\n            } else {\n                err = true;\n            }\n            if (err) setStyle = \"error\";\n            return cont(endclosetag(err));\n        }\n        return cont();\n    }\n    function endtag(startOfLine) {\n        return function(type) {\n            if (type == \"selfcloseTag\" ||\n                (type == \"endTag\" && Kludges.autoSelfClosers.hasOwnProperty(curState.tagName.toLowerCase())))\n                return cont();\n            if (type == \"endTag\") {pushContext(curState.tagName, startOfLine); return cont();}\n            return cont();\n        };\n    }\n    function endclosetag(err) {\n        return function(type) {\n            if (err) setStyle = \"error\";\n            if (type == \"endTag\") { popContext(); return cont(); }\n            setStyle = \"error\";\n            return cont(arguments.callee);\n        }\n    }\n\n    function attributes(type) {\n        if (type == \"word\") {setStyle = \"attribute\"; return cont(attributes);}\n        if (type == \"equals\") return cont(attvalue, attributes);\n        if (type == \"string\") {setStyle = \"error\"; return cont(attributes);}\n        return pass();\n    }\n    function attvalue(type) {\n        if (type == \"word\" && Kludges.allowUnquoted) {setStyle = \"string\"; return cont();}\n        if (type == \"string\") return cont(attvaluemaybe);\n        return pass();\n    }\n    function attvaluemaybe(type) {\n        if (type == \"string\") return cont(attvaluemaybe);\n        else return pass();\n    }\n\n    return {\n        startState: function() {\n            return {tokenize: inText, cc: [], indented: 0, startOfLine: true, tagName: null, context: null};\n        },\n\n        token: function(stream, state) {\n            if (stream.sol()) {\n                state.startOfLine = true;\n                state.indented = stream.indentation();\n            }\n            if (stream.eatSpace()) return null;\n\n            setStyle = type = tagName = null;\n            var style = state.tokenize(stream, state);\n            state.type = type;\n            if ((style || type) && style != \"comment\") {\n                curState = state;\n                while (true) {\n                    var comb = state.cc.pop() || element;\n                    if (comb(type || style)) break;\n                }\n            }\n            state.startOfLine = false;\n            return setStyle || style;\n        },\n\n        indent: function(state, textAfter, fullLine) {\n            var context = state.context;\n            if ((state.tokenize != inTag && state.tokenize != inText) ||\n                context && context.noIndent)\n                return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n            if (alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n            if (context && /^<\\//.test(textAfter))\n                context = context.prev;\n            while (context && !context.startOfLine)\n                context = context.prev;\n            if (context) return context.indent + indentUnit;\n            else return 0;\n        },\n\n        compareStates: function(a, b) {\n            if (a.indented != b.indented || a.tokenize != b.tokenize) return false;\n            for (var ca = a.context, cb = b.context; ; ca = ca.prev, cb = cb.prev) {\n                if (!ca || !cb) return ca == cb;\n                if (ca.tagName != cb.tagName) return false;\n            }\n        },\n\n        electricChars: \"/\"\n    };\n});\n\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nCodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n    var indentUnit = config.indentUnit;\n    var jsonMode = parserConfig.json;\n\n    // Tokenizer\n\n    var keywords = function(){\n        function kw(type) {return {type: type, style: \"keyword\"};}\n        var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\n        var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n        return {\n            \"if\": A, \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n            \"return\": C, \"break\": C, \"continue\": C, \"new\": C, \"delete\": C, \"throw\": C,\n            \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n            \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n            \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n            \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n            \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom\n        };\n    }();\n\n    var isOperatorChar = /[+\\-*&%=<>!?|]/;\n\n    function chain(stream, state, f) {\n        state.tokenize = f;\n        return f(stream, state);\n    }\n\n    function nextUntilUnescaped(stream, end) {\n        var escaped = false, next;\n        while ((next = stream.next()) != null) {\n            if (next == end && !escaped)\n                return false;\n            escaped = !escaped && next == \"\\\\\";\n        }\n        return escaped;\n    }\n\n    // Used as scratch variables to communicate multiple values without\n    // consing up tons of objects.\n    var type, content;\n    function ret(tp, style, cont) {\n        type = tp; content = cont;\n        return style;\n    }\n\n    function jsTokenBase(stream, state) {\n        var ch = stream.next();\n        if (ch == '\"' || ch == \"'\")\n            return chain(stream, state, jsTokenString(ch));\n        else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch))\n            return ret(ch);\n        else if (ch == \"0\" && stream.eat(/x/i)) {\n            stream.eatWhile(/[\\da-f]/i);\n            return ret(\"number\", \"number\");\n        }\n        else if (/\\d/.test(ch)) {\n            stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\n            return ret(\"number\", \"number\");\n        }\n        else if (ch == \"/\") {\n            if (stream.eat(\"*\")) {\n                return chain(stream, state, jsTokenComment);\n            }\n            else if (stream.eat(\"/\")) {\n                stream.skipToEnd();\n                return ret(\"comment\", \"comment\");\n            }\n            else if (state.reAllowed) {\n                nextUntilUnescaped(stream, \"/\");\n                stream.eatWhile(/[gimy]/); // 'y' is \"sticky\" option in Mozilla\n                return ret(\"regexp\", \"string\");\n            }\n            else {\n                stream.eatWhile(isOperatorChar);\n                return ret(\"operator\", null, stream.current());\n            }\n        }\n        else if (ch == \"#\") {\n            stream.skipToEnd();\n            return ret(\"error\", \"error\");\n        }\n        else if (isOperatorChar.test(ch)) {\n            stream.eatWhile(isOperatorChar);\n            return ret(\"operator\", null, stream.current());\n        }\n        else {\n            stream.eatWhile(/[\\w\\$_]/);\n            var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\n            return (known && state.kwAllowed) ? ret(known.type, known.style, word) :\n                ret(\"variable\", \"variable\", word);\n        }\n    }\n\n    function jsTokenString(quote) {\n        return function(stream, state) {\n            if (!nextUntilUnescaped(stream, quote))\n                state.tokenize = jsTokenBase;\n            return ret(\"string\", \"string\");\n        };\n    }\n\n    function jsTokenComment(stream, state) {\n        var maybeEnd = false, ch;\n        while (ch = stream.next()) {\n            if (ch == \"/\" && maybeEnd) {\n                state.tokenize = jsTokenBase;\n                break;\n            }\n            maybeEnd = (ch == \"*\");\n        }\n        return ret(\"comment\", \"comment\");\n    }\n\n    // Parser\n\n    var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true};\n\n    function JSLexical(indented, column, type, align, prev, info) {\n        this.indented = indented;\n        this.column = column;\n        this.type = type;\n        this.prev = prev;\n        this.info = info;\n        if (align != null) this.align = align;\n    }\n\n    function inScope(state, varname) {\n        for (var v = state.localVars; v; v = v.next)\n            if (v.name == varname) return true;\n    }\n\n    function parseJS(state, style, type, content, stream) {\n        var cc = state.cc;\n        // Communicate our context to the combinators.\n        // (Less wasteful than consing up a hundred closures on every call.)\n        cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;\n\n        if (!state.lexical.hasOwnProperty(\"align\"))\n            state.lexical.align = true;\n\n        while(true) {\n            var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n            if (combinator(type, content)) {\n                while(cc.length && cc[cc.length - 1].lex)\n                    cc.pop()();\n                if (cx.marked) return cx.marked;\n                if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n                return style;\n            }\n        }\n    }\n\n    // Combinator utils\n\n    var cx = {state: null, column: null, marked: null, cc: null};\n    function pass() {\n        for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n    }\n    function cont() {\n        pass.apply(null, arguments);\n        return true;\n    }\n    function register(varname) {\n        var state = cx.state;\n        if (state.context) {\n            cx.marked = \"def\";\n            for (var v = state.localVars; v; v = v.next)\n                if (v.name == varname) return;\n            state.localVars = {name: varname, next: state.localVars};\n        }\n    }\n\n    // Combinators\n\n    var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\n    function pushcontext() {\n        if (!cx.state.context) cx.state.localVars = defaultVars;\n        cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n    }\n    function popcontext() {\n        cx.state.localVars = cx.state.context.vars;\n        cx.state.context = cx.state.context.prev;\n    }\n    function pushlex(type, info) {\n        var result = function() {\n            var state = cx.state;\n            state.lexical = new JSLexical(state.indented, cx.stream.column(), type, null, state.lexical, info)\n        };\n        result.lex = true;\n        return result;\n    }\n    function poplex() {\n        var state = cx.state;\n        if (state.lexical.prev) {\n            if (state.lexical.type == \")\")\n                state.indented = state.lexical.indented;\n            state.lexical = state.lexical.prev;\n        }\n    }\n    poplex.lex = true;\n\n    function expect(wanted) {\n        return function expecting(type) {\n            if (type == wanted) return cont();\n            else if (wanted == \";\") return pass();\n            else return cont(arguments.callee);\n        };\n    }\n\n    function statement(type) {\n        if (type == \"var\") return cont(pushlex(\"vardef\"), vardef1, expect(\";\"), poplex);\n        if (type == \"keyword a\") return cont(pushlex(\"form\"), expression, statement, poplex);\n        if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n        if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\n        if (type == \";\") return cont();\n        if (type == \"function\") return cont(functiondef);\n        if (type == \"for\") return cont(pushlex(\"form\"), expect(\"(\"), pushlex(\")\"), forspec1, expect(\")\"),\n            poplex, statement, poplex);\n        if (type == \"variable\") return cont(pushlex(\"stat\"), maybelabel);\n        if (type == \"switch\") return cont(pushlex(\"form\"), expression, pushlex(\"}\", \"switch\"), expect(\"{\"),\n            block, poplex, poplex);\n        if (type == \"case\") return cont(expression, expect(\":\"));\n        if (type == \"default\") return cont(expect(\":\"));\n        if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n            statement, poplex, popcontext);\n        return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n    }\n    function expression(type) {\n        if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator);\n        if (type == \"function\") return cont(functiondef);\n        if (type == \"keyword c\") return cont(maybeexpression);\n        if (type == \"(\") return cont(pushlex(\")\"), expression, expect(\")\"), poplex, maybeoperator);\n        if (type == \"operator\") return cont(expression);\n        if (type == \"[\") return cont(pushlex(\"]\"), commasep(expression, \"]\"), poplex, maybeoperator);\n        if (type == \"{\") return cont(pushlex(\"}\"), commasep(objprop, \"}\"), poplex, maybeoperator);\n        return cont();\n    }\n    function maybeexpression(type) {\n        if (type.match(/[;\\}\\)\\],]/)) return pass();\n        return pass(expression);\n    }\n\n    function maybeoperator(type, value) {\n        if (type == \"operator\" && /\\+\\+|--/.test(value)) return cont(maybeoperator);\n        if (type == \"operator\") return cont(expression);\n        if (type == \";\") return;\n        if (type == \"(\") return cont(pushlex(\")\"), commasep(expression, \")\"), poplex, maybeoperator);\n        if (type == \".\") return cont(property, maybeoperator);\n        if (type == \"[\") return cont(pushlex(\"]\"), expression, expect(\"]\"), poplex, maybeoperator);\n    }\n    function maybelabel(type) {\n        if (type == \":\") return cont(poplex, statement);\n        return pass(maybeoperator, expect(\";\"), poplex);\n    }\n    function property(type) {\n        if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n    }\n    function objprop(type) {\n        if (type == \"variable\") cx.marked = \"property\";\n        if (atomicTypes.hasOwnProperty(type)) return cont(expect(\":\"), expression);\n    }\n    function commasep(what, end) {\n        function proceed(type) {\n            if (type == \",\") return cont(what, proceed);\n            if (type == end) return cont();\n            return cont(expect(end));\n        }\n        return function commaSeparated(type) {\n            if (type == end) return cont();\n            else return pass(what, proceed);\n        };\n    }\n    function block(type) {\n        if (type == \"}\") return cont();\n        return pass(statement, block);\n    }\n    function vardef1(type, value) {\n        if (type == \"variable\"){register(value); return cont(vardef2);}\n        return cont();\n    }\n    function vardef2(type, value) {\n        if (value == \"=\") return cont(expression, vardef2);\n        if (type == \",\") return cont(vardef1);\n    }\n    function forspec1(type) {\n        if (type == \"var\") return cont(vardef1, forspec2);\n        if (type == \";\") return pass(forspec2);\n        if (type == \"variable\") return cont(formaybein);\n        return pass(forspec2);\n    }\n    function formaybein(type, value) {\n        if (value == \"in\") return cont(expression);\n        return cont(maybeoperator, forspec2);\n    }\n    function forspec2(type, value) {\n        if (type == \";\") return cont(forspec3);\n        if (value == \"in\") return cont(expression);\n        return cont(expression, expect(\";\"), forspec3);\n    }\n    function forspec3(type) {\n        if (type != \")\") cont(expression);\n    }\n    function functiondef(type, value) {\n        if (type == \"variable\") {register(value); return cont(functiondef);}\n        if (type == \"(\") return cont(pushlex(\")\"), pushcontext, commasep(funarg, \")\"), poplex, statement, popcontext);\n    }\n    function funarg(type, value) {\n        if (type == \"variable\") {register(value); return cont();}\n    }\n\n    // Interface\n\n    return {\n        startState: function(basecolumn) {\n            return {\n                tokenize: jsTokenBase,\n                reAllowed: true,\n                kwAllowed: true,\n                cc: [],\n                lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n                localVars: null,\n                context: null,\n                indented: 0\n            };\n        },\n\n        token: function(stream, state) {\n            if (stream.sol()) {\n                if (!state.lexical.hasOwnProperty(\"align\"))\n                    state.lexical.align = false;\n                state.indented = stream.indentation();\n            }\n            if (stream.eatSpace()) return null;\n            var style = state.tokenize(stream, state);\n            if (type == \"comment\") return style;\n            state.reAllowed = type == \"operator\" || type == \"keyword c\" || type.match(/^[\\[{}\\(,;:]$/);\n            state.kwAllowed = type != '.';\n            return parseJS(state, style, type, content, stream);\n        },\n\n        indent: function(state, textAfter) {\n            if (state.tokenize != jsTokenBase) return 0;\n            var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical,\n                type = lexical.type, closing = firstChar == type;\n            if (type == \"vardef\") return lexical.indented + 4;\n            else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n            else if (type == \"stat\" || type == \"form\") return lexical.indented + indentUnit;\n            else if (lexical.info == \"switch\" && !closing)\n                return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n            else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n            else return lexical.indented + (closing ? 0 : indentUnit);\n        },\n\n        electricChars: \":{}\"\n    };\n});\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\n\nCodeMirror.defineMode(\"css\", function(config) {\n    var indentUnit = config.indentUnit, type;\n    function ret(style, tp) {type = tp; return style;}\n\n    function tokenBase(stream, state) {\n        var ch = stream.next();\n        if (ch == \"@\") {stream.eatWhile(/[\\w\\\\\\-]/); return ret(\"meta\", stream.current());}\n        else if (ch == \"/\" && stream.eat(\"*\")) {\n            state.tokenize = tokenCComment;\n            return tokenCComment(stream, state);\n        }\n        else if (ch == \"<\" && stream.eat(\"!\")) {\n            state.tokenize = tokenSGMLComment;\n            return tokenSGMLComment(stream, state);\n        }\n        else if (ch == \"=\") ret(null, \"compare\");\n        else if ((ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) return ret(null, \"compare\");\n        else if (ch == \"\\\"\" || ch == \"'\") {\n            state.tokenize = tokenString(ch);\n            return state.tokenize(stream, state);\n        }\n        else if (ch == \"#\") {\n            stream.eatWhile(/[\\w\\\\\\-]/);\n            return ret(\"atom\", \"hash\");\n        }\n        else if (ch == \"!\") {\n            stream.match(/^\\s*\\w*/);\n            return ret(\"keyword\", \"important\");\n        }\n        else if (/\\d/.test(ch)) {\n            stream.eatWhile(/[\\w.%]/);\n            return ret(\"number\", \"unit\");\n        }\n        else if (/[,.+>*\\/]/.test(ch)) {\n            return ret(null, \"select-op\");\n        }\n        else if (/[;{}:\\[\\]]/.test(ch)) {\n            return ret(null, ch);\n        }\n        else {\n            stream.eatWhile(/[\\w\\\\\\-]/);\n            return ret(\"variable\", \"variable\");\n        }\n    }\n\n    function tokenCComment(stream, state) {\n        var maybeEnd = false, ch;\n        while ((ch = stream.next()) != null) {\n            if (maybeEnd && ch == \"/\") {\n                state.tokenize = tokenBase;\n                break;\n            }\n            maybeEnd = (ch == \"*\");\n        }\n        return ret(\"comment\", \"comment\");\n    }\n\n    function tokenSGMLComment(stream, state) {\n        var dashes = 0, ch;\n        while ((ch = stream.next()) != null) {\n            if (dashes >= 2 && ch == \">\") {\n                state.tokenize = tokenBase;\n                break;\n            }\n            dashes = (ch == \"-\") ? dashes + 1 : 0;\n        }\n        return ret(\"comment\", \"comment\");\n    }\n\n    function tokenString(quote) {\n        return function(stream, state) {\n            var escaped = false, ch;\n            while ((ch = stream.next()) != null) {\n                if (ch == quote && !escaped)\n                    break;\n                escaped = !escaped && ch == \"\\\\\";\n            }\n            if (!escaped) state.tokenize = tokenBase;\n            return ret(\"string\", \"string\");\n        };\n    }\n\n    return {\n        startState: function(base) {\n            return {tokenize: tokenBase,\n                baseIndent: base || 0,\n                stack: []};\n        },\n\n        token: function(stream, state) {\n            if (stream.eatSpace()) return null;\n            var style = state.tokenize(stream, state);\n\n            var context = state.stack[state.stack.length-1];\n            if (type == \"hash\" && context == \"rule\") style = \"atom\";\n            else if (style == \"variable\") {\n                if (context == \"rule\") style = \"number\";\n                else if (!context || context == \"@media{\") style = \"tag\";\n            }\n\n            if (context == \"rule\" && /^[\\{\\};]$/.test(type))\n                state.stack.pop();\n            if (type == \"{\") {\n                if (context == \"@media\") state.stack[state.stack.length-1] = \"@media{\";\n                else state.stack.push(\"{\");\n            }\n            else if (type == \"}\") state.stack.pop();\n            else if (type == \"@media\") state.stack.push(\"@media\");\n            else if (context == \"{\" && type != \"comment\") state.stack.push(\"rule\");\n            return style;\n        },\n\n        indent: function(state, textAfter) {\n            var n = state.stack.length;\n            if (/^\\}/.test(textAfter))\n                n -= state.stack[state.stack.length-1] == \"rule\" ? 2 : 1;\n            return state.baseIndent + n * indentUnit;\n        },\n\n        electricChars: \"}\"\n    };\n});\n\nCodeMirror.defineMIME(\"text/css\", \"css\");\nCodeMirror.defineMode(\"htmlmixed\", function(config, parserConfig) {\n    var htmlMode = CodeMirror.getMode(config, {name: \"xml\", htmlMode: true});\n    var jsMode = CodeMirror.getMode(config, \"javascript\");\n    var cssMode = CodeMirror.getMode(config, \"css\");\n\n    function html(stream, state) {\n        var style = htmlMode.token(stream, state.htmlState);\n        if (style == \"tag\" && stream.current() == \">\" && state.htmlState.context) {\n            if (/^script$/i.test(state.htmlState.context.tagName)) {\n                state.token = javascript;\n                state.localState = jsMode.startState(htmlMode.indent(state.htmlState, \"\"));\n                state.mode = \"javascript\";\n            }\n            else if (/^style$/i.test(state.htmlState.context.tagName)) {\n                state.token = css;\n                state.localState = cssMode.startState(htmlMode.indent(state.htmlState, \"\"));\n                state.mode = \"css\";\n            }\n        }\n        return style;\n    }\n    function maybeBackup(stream, pat, style) {\n        var cur = stream.current();\n        var close = cur.search(pat);\n        if (close > -1) stream.backUp(cur.length - close);\n        return style;\n    }\n    function javascript(stream, state) {\n        if (stream.match(/^<\\/\\s*script\\s*>/i, false)) {\n            state.token = html;\n            state.curState = null;\n            state.mode = \"html\";\n            return html(stream, state);\n        }\n        return maybeBackup(stream, /<\\/\\s*script\\s*>/,\n            jsMode.token(stream, state.localState));\n    }\n    function css(stream, state) {\n        if (stream.match(/^<\\/\\s*style\\s*>/i, false)) {\n            state.token = html;\n            state.localState = null;\n            state.mode = \"html\";\n            return html(stream, state);\n        }\n        return maybeBackup(stream, /<\\/\\s*style\\s*>/,\n            cssMode.token(stream, state.localState));\n    }\n\n    return {\n        startState: function() {\n            var state = htmlMode.startState();\n            return {token: html, localState: null, mode: \"html\", htmlState: state};\n        },\n\n        copyState: function(state) {\n            if (state.localState)\n                var local = CodeMirror.copyState(state.token == css ? cssMode : jsMode, state.localState);\n            return {token: state.token, localState: local, mode: state.mode,\n                htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};\n        },\n\n        token: function(stream, state) {\n            return state.token(stream, state);\n        },\n\n        indent: function(state, textAfter) {\n            if (state.token == html || /^\\s*<\\//.test(textAfter))\n                return htmlMode.indent(state.htmlState, textAfter);\n            else if (state.token == javascript)\n                return jsMode.indent(state.localState, textAfter);\n            else\n                return cssMode.indent(state.localState, textAfter);\n        },\n\n        compareStates: function(a, b) {\n            return htmlMode.compareStates(a.htmlState, b.htmlState);\n        },\n\n        electricChars: \"/{}:\"\n    }\n});\n\nCodeMirror.defineMIME(\"text/html\", \"htmlmixed\");\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/adapters/mootools-adapter.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n MooTools adapter\n\n (c) 2010-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(){var e=window,h=document,f=e.MooTools.version.substring(0,3),i=f===\"1.2\"||f===\"1.1\",j=i||f===\"1.3\",g=e.$extend||function(){return Object.append.apply(Object,arguments)};e.HighchartsAdapter={init:function(a){var b=Fx.prototype,c=b.start,d=Fx.Morph.prototype,e=d.compute;b.start=function(b,d){var e=this.element;if(b.d)this.paths=a.init(e,e.d,this.toD);c.apply(this,arguments);return this};d.compute=function(b,c,d){var f=this.paths;if(f)this.element.attr(\"d\",a.step(f[0],f[1],d,this.toD));else return e.apply(this,\narguments)}},adapterRun:function(a,b){if(b===\"width\"||b===\"height\")return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=h.getElementsByTagName(\"head\")[0],d=h.createElement(\"script\");d.type=\"text/javascript\";d.src=a;d.onload=b;c.appendChild(d)},animate:function(a,b,c){var d=a.attr,f=c&&c.complete;if(d&&!a.setStyle)a.getStyle=a.attr,a.setStyle=function(){var a=arguments;this.attr.call(this,a[0],a[1][0])},a.$family=function(){return!0};e.HighchartsAdapter.stop(a);c=new Fx.Morph(d?a:$(a),\ng({transition:Fx.Transitions.Quad.easeInOut},c));if(d)c.element=a;if(b.d)c.toD=b.d;f&&c.addEvent(\"complete\",f);c.start(b);a.fx=c},each:function(a,b){return i?$each(a,b):Array.each(a,b)},map:function(a,b){return a.map(b)},grep:function(a,b){return a.filter(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){a=a.getPosition();return{left:a.x,top:a.y}},extendWithEvents:function(a){a.addEvent||(a.nodeName?$(a):g(a,new Events))},addEvent:function(a,b,c){typeof b===\"string\"&&(b===\n\"unload\"&&(b=\"beforeunload\"),e.HighchartsAdapter.extendWithEvents(a),a.addEvent(b,c))},removeEvent:function(a,b,c){typeof a!==\"string\"&&a.addEvent&&(b?(b===\"unload\"&&(b=\"beforeunload\"),c?a.removeEvent(b,c):a.removeEvents&&a.removeEvents(b)):a.removeEvents())},fireEvent:function(a,b,c,d){b={type:b,target:a};b=j?new Event(b):new DOMEvent(b);b=g(b,c);if(!b.target&&b.event)b.target=b.event.target;b.preventDefault=function(){d=null};a.fireEvent&&a.fireEvent(b.type,b);d&&d(b)},washMouseEvent:function(a){if(a.page)a.pageX=\na.page.x,a.pageY=a.page.y;return a},stop:function(a){a.fx&&a.fx.cancel()}}})();\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/adapters/mootools-adapter.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * MooTools adapter\n *\n * (c) 2010-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Fx, $, $extend, $each, $merge, Events, Event, DOMEvent */\n\n(function () {\n\nvar win = window,\n\tdoc = document,\n\tmooVersion = win.MooTools.version.substring(0, 3), // Get the first three characters of the version number\n\tlegacy = mooVersion === '1.2' || mooVersion === '1.1', // 1.1 && 1.2 considered legacy, 1.3 is not.\n\tlegacyEvent = legacy || mooVersion === '1.3', // In versions 1.1 - 1.3 the event class is named Event, in newer versions it is named DOMEvent.\n\t$extend = win.$extend || function () {\n\t\treturn Object.append.apply(Object, arguments);\n\t};\n\nwin.HighchartsAdapter = {\n\t/**\n\t * Initialize the adapter. This is run once as Highcharts is first run.\n\t * @param {Object} pathAnim The helper object to do animations across adapters.\n\t */\n\tinit: function (pathAnim) {\n\t\tvar fxProto = Fx.prototype,\n\t\t\tfxStart = fxProto.start,\n\t\t\tmorphProto = Fx.Morph.prototype,\n\t\t\tmorphCompute = morphProto.compute;\n\n\t\t// override Fx.start to allow animation of SVG element wrappers\n\t\t/*jslint unparam: true*//* allow unused parameters in fx functions */\n\t\tfxProto.start = function (from, to) {\n\t\t\tvar fx = this,\n\t\t\t\telem = fx.element;\n\n\t\t\t// special for animating paths\n\t\t\tif (from.d) {\n\t\t\t\t//this.fromD = this.element.d.split(' ');\n\t\t\t\tfx.paths = pathAnim.init(\n\t\t\t\t\telem,\n\t\t\t\t\telem.d,\n\t\t\t\t\tfx.toD\n\t\t\t\t);\n\t\t\t}\n\t\t\tfxStart.apply(fx, arguments);\n\n\t\t\treturn this; // chainable\n\t\t};\n\n\t\t// override Fx.step to allow animation of SVG element wrappers\n\t\tmorphProto.compute = function (from, to, delta) {\n\t\t\tvar fx = this,\n\t\t\t\tpaths = fx.paths;\n\n\t\t\tif (paths) {\n\t\t\t\tfx.element.attr(\n\t\t\t\t\t'd',\n\t\t\t\t\tpathAnim.step(paths[0], paths[1], delta, fx.toD)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn morphCompute.apply(fx, arguments);\n\t\t\t}\n\t\t};\n\t\t/*jslint unparam: false*/\n\t},\n\t\n\t/**\n\t * Run a general method on the framework, following jQuery syntax\n\t * @param {Object} el The HTML element\n\t * @param {String} method Which method to run on the wrapped element\n\t */\n\tadapterRun: function (el, method) {\n\t\t\n\t\t// This currently works for getting inner width and height. If adding\n\t\t// more methods later, we need a conditional implementation for each.\n\t\tif (method === 'width' || method === 'height') {\n\t\t\treturn parseInt($(el).getStyle(method), 10);\n\t\t}\n\t},\n\n\t/**\n\t * Downloads a script and executes a callback when done.\n\t * @param {String} scriptLocation\n\t * @param {Function} callback\n\t */\n\tgetScript: function (scriptLocation, callback) {\n\t\t// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.\n\t\tvar head = doc.getElementsByTagName('head')[0];\n\t\tvar script = doc.createElement('script');\n\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = scriptLocation;\n\t\tscript.onload = callback;\n\n\t\thead.appendChild(script);\n\t},\n\n\t/**\n\t * Animate a HTML element or SVG element wrapper\n\t * @param {Object} el\n\t * @param {Object} params\n\t * @param {Object} options jQuery-like animation options: duration, easing, callback\n\t */\n\tanimate: function (el, params, options) {\n\t\tvar isSVGElement = el.attr,\n\t\t\teffect,\n\t\t\tcomplete = options && options.complete;\n\n\t\tif (isSVGElement && !el.setStyle) {\n\t\t\t// add setStyle and getStyle methods for internal use in Moo\n\t\t\tel.getStyle = el.attr;\n\t\t\tel.setStyle = function () { // property value is given as array in Moo - break it down\n\t\t\t\tvar args = arguments;\n\t\t\t\tthis.attr.call(this, args[0], args[1][0]);\n\t\t\t};\n\t\t\t// dirty hack to trick Moo into handling el as an element wrapper\n\t\t\tel.$family = function () { return true; };\n\t\t}\n\n\t\t// stop running animations\n\t\twin.HighchartsAdapter.stop(el);\n\n\t\t// define and run the effect\n\t\teffect = new Fx.Morph(\n\t\t\tisSVGElement ? el : $(el),\n\t\t\t$extend({\n\t\t\t\ttransition: Fx.Transitions.Quad.easeInOut\n\t\t\t}, options)\n\t\t);\n\n\t\t// Make sure that the element reference is set when animating svg elements\n\t\tif (isSVGElement) {\n\t\t\teffect.element = el;\n\t\t}\n\n\t\t// special treatment for paths\n\t\tif (params.d) {\n\t\t\teffect.toD = params.d;\n\t\t}\n\n\t\t// jQuery-like events\n\t\tif (complete) {\n\t\t\teffect.addEvent('complete', complete);\n\t\t}\n\n\t\t// run\n\t\teffect.start(params);\n\n\t\t// record for use in stop method\n\t\tel.fx = effect;\n\t},\n\n\t/**\n\t * MooTool's each function\n\t *\n\t */\n\teach: function (arr, fn) {\n\t\treturn legacy ?\n\t\t\t$each(arr, fn) :\n\t\t\tArray.each(arr, fn);\n\t},\n\n\t/**\n\t * Map an array\n\t * @param {Array} arr\n\t * @param {Function} fn\n\t */\n\tmap: function (arr, fn) {\n\t\treturn arr.map(fn);\n\t},\n\n\t/**\n\t * Grep or filter an array\n\t * @param {Array} arr\n\t * @param {Function} fn\n\t */\n\tgrep: function (arr, fn) {\n\t\treturn arr.filter(fn);\n\t},\n\t\n\t/**\n\t * Return the index of an item in an array, or -1 if not matched\n\t */\n\tinArray: function (item, arr, from) {\n\t\treturn arr ? arr.indexOf(item, from) : -1;\n\t},\n\n\t/**\n\t * Get the offset of an element relative to the top left corner of the web page\n\t */\n\toffset: function (el) {\n\t\tvar offsets = el.getPosition(); // #1496\n\t\treturn {\n\t\t\tleft: offsets.x,\n\t\t\ttop: offsets.y\n\t\t};\n\t},\n\n\t/**\n\t * Extends an object with Events, if its not done\n\t */\n\textendWithEvents: function (el) {\n\t\t// if the addEvent method is not defined, el is a custom Highcharts object\n\t\t// like series or point\n\t\tif (!el.addEvent) {\n\t\t\tif (el.nodeName) {\n\t\t\t\tel = $(el); // a dynamically generated node\n\t\t\t} else {\n\t\t\t\t$extend(el, new Events()); // a custom object\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Add an event listener\n\t * @param {Object} el HTML element or custom object\n\t * @param {String} type Event type\n\t * @param {Function} fn Event handler\n\t */\n\taddEvent: function (el, type, fn) {\n\t\tif (typeof type === 'string') { // chart broke due to el being string, type function\n\n\t\t\tif (type === 'unload') { // Moo self destructs before custom unload events\n\t\t\t\ttype = 'beforeunload';\n\t\t\t}\n\n\t\t\twin.HighchartsAdapter.extendWithEvents(el);\n\n\t\t\tel.addEvent(type, fn);\n\t\t}\n\t},\n\n\tremoveEvent: function (el, type, fn) {\n\t\tif (typeof el === 'string') {\n\t\t\t// el.removeEvents below apperantly calls this method again. Do not quite understand why, so for now just bail out.\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif (el.addEvent) { // If el doesn't have an addEvent method, there are no events to remove\n\t\t\tif (type) {\n\t\t\t\tif (type === 'unload') { // Moo self destructs before custom unload events\n\t\t\t\t\ttype = 'beforeunload';\n\t\t\t\t}\n\t\n\t\t\t\tif (fn) {\n\t\t\t\t\tel.removeEvent(type, fn);\n\t\t\t\t} else if (el.removeEvents) { // #958\n\t\t\t\t\tel.removeEvents(type);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tel.removeEvents();\n\t\t\t}\n\t\t}\n\t},\n\n\tfireEvent: function (el, event, eventArguments, defaultFunction) {\n\t\tvar eventArgs = {\n\t\t\ttype: event,\n\t\t\ttarget: el\n\t\t};\n\t\t// create an event object that keeps all functions\n\t\tevent = legacyEvent ? new Event(eventArgs) : new DOMEvent(eventArgs);\n\t\tevent = $extend(event, eventArguments);\n\n\t\t// When running an event on the Chart.prototype, MooTools nests the target in event.event\n\t\tif (!event.target && event.event) {\n\t\t\tevent.target = event.event.target;\n\t\t}\n\n\t\t// override the preventDefault function to be able to use\n\t\t// this for custom events\n\t\tevent.preventDefault = function () {\n\t\t\tdefaultFunction = null;\n\t\t};\n\t\t// if fireEvent is not available on the object, there hasn't been added\n\t\t// any events to it above\n\t\tif (el.fireEvent) {\n\t\t\tel.fireEvent(event.type, event);\n\t\t}\n\n\t\t// fire the default if it is passed and it is not prevented above\n\t\tif (defaultFunction) {\n\t\t\tdefaultFunction(event);\n\t\t}\n\t},\n\t\n\t/**\n\t * Set back e.pageX and e.pageY that MooTools has abstracted away. #1165, #1346.\n\t */\n\twashMouseEvent: function (e) {\n\t\tif (e.page) {\n\t\t\te.pageX = e.page.x;\n\t\t\te.pageY = e.page.y;\n\t\t}\n\t\treturn e;\n\t},\n\n\t/**\n\t * Stop running animations on the object\n\t */\n\tstop: function (el) {\n\t\tif (el.fx) {\n\t\t\tel.fx.cancel();\n\t\t}\n\t}\n};\n\n}());\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/adapters/prototype-adapter.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Prototype adapter\n\n @author Michael Nelson, Torstein Hønsi.\n\n Feel free to use and modify this script.\n Highcharts license: www.highcharts.com/license.\n*/\nvar HighchartsAdapter=function(){var f=typeof Effect!==\"undefined\";return{init:function(a){if(f)Effect.HighchartsTransition=Class.create(Effect.Base,{initialize:function(b,c,d,g){var e;this.element=b;this.key=c;e=b.attr?b.attr(c):$(b).getStyle(c);if(c===\"d\")this.paths=a.init(b,b.d,d),this.toD=d,e=0,d=1;this.start(Object.extend(g||{},{from:e,to:d,attribute:c}))},setup:function(){HighchartsAdapter._extend(this.element);if(!this.element._highchart_animation)this.element._highchart_animation={};this.element._highchart_animation[this.key]=\nthis},update:function(b){var c=this.paths,d=this.element;c&&(b=a.step(c[0],c[1],b,this.toD));d.attr?d.element&&d.attr(this.options.attribute,b):(c={},c[this.options.attribute]=b,$(d).setStyle(c))},finish:function(){this.element&&this.element._highchart_animation&&delete this.element._highchart_animation[this.key]}})},adapterRun:function(a,b){return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=$$(\"head\")[0];c&&c.appendChild((new Element(\"script\",{type:\"text/javascript\",src:a})).observe(\"load\",\nb))},addNS:function(a){var b=/^(?:click|mouse(?:down|up|over|move|out))$/;return/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/.test(a)||b.test(a)?a:\"h:\"+a},addEvent:function(a,b,c){a.addEventListener||a.attachEvent?Event.observe($(a),HighchartsAdapter.addNS(b),c):(HighchartsAdapter._extend(a),a._highcharts_observe(b,c))},animate:function(a,b,c){var d,c=c||{};c.delay=0;c.duration=(c.duration||500)/1E3;c.afterFinish=c.complete;if(f)for(d in b)new Effect.HighchartsTransition($(a),\nd,b[d],c);else{if(a.attr)for(d in b)a.attr(d,b[d]);c.complete&&c.complete()}a.attr||$(a).setStyle(b)},stop:function(a){var b;if(a._highcharts_extended&&a._highchart_animation)for(b in a._highchart_animation)a._highchart_animation[b].cancel()},each:function(a,b){$A(a).each(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){return $(a).cumulativeOffset()},fireEvent:function(a,b,c,d){a.fire?a.fire(HighchartsAdapter.addNS(b),c):a._highcharts_extended&&(c=c||{},a._highcharts_fire(b,\nc));c&&c.defaultPrevented&&(d=null);d&&d(c)},removeEvent:function(a,b,c){$(a).stopObserving&&(b&&(b=HighchartsAdapter.addNS(b)),$(a).stopObserving(b,c));window===a?Event.stopObserving(a,b,c):(HighchartsAdapter._extend(a),a._highcharts_stop_observing(b,c))},washMouseEvent:function(a){return a},grep:function(a,b){return a.findAll(b)},map:function(a,b){return a.map(b)},_extend:function(a){a._highcharts_extended||Object.extend(a,{_highchart_events:{},_highchart_animation:null,_highcharts_extended:!0,\n_highcharts_observe:function(b,a){this._highchart_events[b]=[this._highchart_events[b],a].compact().flatten()},_highcharts_stop_observing:function(b,a){b?a?this._highchart_events[b]=[this._highchart_events[b]].compact().flatten().without(a):delete this._highchart_events[b]:this._highchart_events={}},_highcharts_fire:function(a,c){var d=this;(this._highchart_events[a]||[]).each(function(a){if(!c.stopped)c.preventDefault=function(){c.defaultPrevented=!0},c.target=d,a.bind(this)(c)===!1&&c.preventDefault()}.bind(this))}})}}}();\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/adapters/prototype-adapter.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Prototype adapter\n *\n * @author Michael Nelson, Torstein Hønsi.\n *\n * Feel free to use and modify this script.\n * Highcharts license: www.highcharts.com/license.\n */\n\n// JSLint options:\n/*global Effect, Class, Event, Element, $, $$, $A */\n\n// Adapter interface between prototype and the Highcharts charting library\nvar HighchartsAdapter = (function () {\n\nvar hasEffect = typeof Effect !== 'undefined';\n\nreturn {\n\n\t/**\n\t * Initialize the adapter. This is run once as Highcharts is first run.\n\t * @param {Object} pathAnim The helper object to do animations across adapters.\n\t */\n\tinit: function (pathAnim) {\n\t\tif (hasEffect) {\n\t\t\t/**\n\t\t\t * Animation for Highcharts SVG element wrappers only\n\t\t\t * @param {Object} element\n\t\t\t * @param {Object} attribute\n\t\t\t * @param {Object} to\n\t\t\t * @param {Object} options\n\t\t\t */\n\t\t\tEffect.HighchartsTransition = Class.create(Effect.Base, {\n\t\t\t\tinitialize: function (element, attr, to, options) {\n\t\t\t\t\tvar from,\n\t\t\t\t\t\topts;\n\n\t\t\t\t\tthis.element = element;\n\t\t\t\t\tthis.key = attr;\n\t\t\t\t\tfrom = element.attr ? element.attr(attr) : $(element).getStyle(attr);\n\n\t\t\t\t\t// special treatment for paths\n\t\t\t\t\tif (attr === 'd') {\n\t\t\t\t\t\tthis.paths = pathAnim.init(\n\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\telement.d,\n\t\t\t\t\t\t\tto\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.toD = to;\n\n\n\t\t\t\t\t\t// fake values in order to read relative position as a float in update\n\t\t\t\t\t\tfrom = 0;\n\t\t\t\t\t\tto = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\topts = Object.extend((options || {}), {\n\t\t\t\t\t\tfrom: from,\n\t\t\t\t\t\tto: to,\n\t\t\t\t\t\tattribute: attr\n\t\t\t\t\t});\n\t\t\t\t\tthis.start(opts);\n\t\t\t\t},\n\t\t\t\tsetup: function () {\n\t\t\t\t\tHighchartsAdapter._extend(this.element);\n\t\t\t\t\t// If this is the first animation on this object, create the _highcharts_animation helper that\n\t\t\t\t\t// contain pointers to the animation objects.\n\t\t\t\t\tif (!this.element._highchart_animation) {\n\t\t\t\t\t\tthis.element._highchart_animation = {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store a reference to this animation instance.\n\t\t\t\t\tthis.element._highchart_animation[this.key] = this;\n\t\t\t\t},\n\t\t\t\tupdate: function (position) {\n\t\t\t\t\tvar paths = this.paths,\n\t\t\t\t\t\telement = this.element,\n\t\t\t\t\t\tobj;\n\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tposition = pathAnim.step(paths[0], paths[1], position, this.toD);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (element.attr) { // SVGElement\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (element.element) { // If not, it has been destroyed (#1405)\n\t\t\t\t\t\t\telement.attr(this.options.attribute, position);\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t} else { // HTML, #409\n\t\t\t\t\t\tobj = {};\n\t\t\t\t\t\tobj[this.options.attribute] = position;\n\t\t\t\t\t\t$(element).setStyle(obj);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tfinish: function () {\n\t\t\t\t\t// Delete the property that holds this animation now that it is finished.\n\t\t\t\t\t// Both canceled animations and complete ones gets a 'finish' call.\n\t\t\t\t\tif (this.element && this.element._highchart_animation) { // #1405\n\t\t\t\t\t\tdelete this.element._highchart_animation[this.key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Run a general method on the framework, following jQuery syntax\n\t * @param {Object} el The HTML element\n\t * @param {String} method Which method to run on the wrapped element\n\t */\n\tadapterRun: function (el, method) {\n\t\t\n\t\t// This currently works for getting inner width and height. If adding\n\t\t// more methods later, we need a conditional implementation for each.\n\t\treturn parseInt($(el).getStyle(method), 10);\n\t\t\n\t},\n\n\t/**\n\t * Downloads a script and executes a callback when done.\n\t * @param {String} scriptLocation\n\t * @param {Function} callback\n\t */\n\tgetScript: function (scriptLocation, callback) {\n\t\tvar head = $$('head')[0]; // Returns an array, so pick the first element.\n\t\tif (head) {\n\t\t\t// Append a new 'script' element, set its type and src attributes, add a 'load' handler that calls the callback\n\t\t\thead.appendChild(new Element('script', { type: 'text/javascript', src: scriptLocation}).observe('load', callback));\n\t\t}\n\t},\n\n\t/**\n\t * Custom events in prototype needs to be namespaced. This method adds a namespace 'h:' in front of\n\t * events that are not recognized as native.\n\t */\n\taddNS: function (eventName) {\n\t\tvar HTMLEvents = /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,\n\t\t\tMouseEvents = /^(?:click|mouse(?:down|up|over|move|out))$/;\n\t\treturn (HTMLEvents.test(eventName) || MouseEvents.test(eventName)) ?\n\t\t\teventName :\n\t\t\t'h:' + eventName;\n\t},\n\n\t// el needs an event to be attached. el is not necessarily a dom element\n\taddEvent: function (el, event, fn) {\n\t\tif (el.addEventListener || el.attachEvent) {\n\t\t\tEvent.observe($(el), HighchartsAdapter.addNS(event), fn);\n\n\t\t} else {\n\t\t\tHighchartsAdapter._extend(el);\n\t\t\tel._highcharts_observe(event, fn);\n\t\t}\n\t},\n\n\t// motion makes things pretty. use it if effects is loaded, if not... still get to the end result.\n\tanimate: function (el, params, options) {\n\t\tvar key,\n\t\t\tfx;\n\n\t\t// default options\n\t\toptions = options || {};\n\t\toptions.delay = 0;\n\t\toptions.duration = (options.duration || 500) / 1000;\n\t\toptions.afterFinish = options.complete;\n\n\t\t// animate wrappers and DOM elements\n\t\tif (hasEffect) {\n\t\t\tfor (key in params) {\n\t\t\t\t// The fx variable is seemingly thrown away here, but the Effect.setup will add itself to the _highcharts_animation object\n\t\t\t\t// on the element itself so its not really lost.\n\t\t\t\tfx = new Effect.HighchartsTransition($(el), key, params[key], options);\n\t\t\t}\n\t\t} else {\n\t\t\tif (el.attr) { // #409 without effects\n\t\t\t\tfor (key in params) {\n\t\t\t\t\tel.attr(key, params[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.complete) {\n\t\t\t\toptions.complete();\n\t\t\t}\n\t\t}\n\n\t\tif (!el.attr) { // HTML element, #409\n\t\t\t$(el).setStyle(params);\n\t\t}\n\t},\n\n\t// this only occurs in higcharts 2.0+\n\tstop: function (el) {\n\t\tvar key;\n\t\tif (el._highcharts_extended && el._highchart_animation) {\n\t\t\tfor (key in el._highchart_animation) {\n\t\t\t\t// Cancel the animation\n\t\t\t\t// The 'finish' function in the Effect object will remove the reference\n\t\t\t\tel._highchart_animation[key].cancel();\n\t\t\t}\n\t\t}\n\t},\n\n\t// um.. each\n\teach: function (arr, fn) {\n\t\t$A(arr).each(fn);\n\t},\n\t\n\tinArray: function (item, arr, from) {\n\t\treturn arr ? arr.indexOf(item, from) : -1;\n\t},\n\n\t/**\n\t * Get the cumulative offset relative to the top left of the page. This method, unlike its\n\t * jQuery and MooTools counterpart, still suffers from issue #208 regarding the position\n\t * of a chart within a fixed container.\n\t */\n\toffset: function (el) {\n\t\treturn $(el).cumulativeOffset();\n\t},\n\n\t// fire an event based on an event name (event) and an object (el).\n\t// again, el may not be a dom element\n\tfireEvent: function (el, event, eventArguments, defaultFunction) {\n\t\tif (el.fire) {\n\t\t\tel.fire(HighchartsAdapter.addNS(event), eventArguments);\n\t\t} else if (el._highcharts_extended) {\n\t\t\teventArguments = eventArguments || {};\n\t\t\tel._highcharts_fire(event, eventArguments);\n\t\t}\n\n\t\tif (eventArguments && eventArguments.defaultPrevented) {\n\t\t\tdefaultFunction = null;\n\t\t}\n\n\t\tif (defaultFunction) {\n\t\t\tdefaultFunction(eventArguments);\n\t\t}\n\t},\n\n\tremoveEvent: function (el, event, handler) {\n\t\tif ($(el).stopObserving) {\n\t\t\tif (event) {\n\t\t\t\tevent = HighchartsAdapter.addNS(event);\n\t\t\t}\n\t\t\t$(el).stopObserving(event, handler);\n\t\t} if (window === el) {\n\t\t\tEvent.stopObserving(el, event, handler);\n\t\t} else {\n\t\t\tHighchartsAdapter._extend(el);\n\t\t\tel._highcharts_stop_observing(event, handler);\n\t\t}\n\t},\n\t\n\twashMouseEvent: function (e) {\n\t\treturn e;\n\t},\n\n\t// um, grep\n\tgrep: function (arr, fn) {\n\t\treturn arr.findAll(fn);\n\t},\n\n\t// um, map\n\tmap: function (arr, fn) {\n\t\treturn arr.map(fn);\n\t},\n\n\t// extend an object to handle highchart events (highchart objects, not svg elements).\n\t// this is a very simple way of handling events but whatever, it works (i think)\n\t_extend: function (object) {\n\t\tif (!object._highcharts_extended) {\n\t\t\tObject.extend(object, {\n\t\t\t\t_highchart_events: {},\n\t\t\t\t_highchart_animation: null,\n\t\t\t\t_highcharts_extended: true,\n\t\t\t\t_highcharts_observe: function (name, fn) {\n\t\t\t\t\tthis._highchart_events[name] = [this._highchart_events[name], fn].compact().flatten();\n\t\t\t\t},\n\t\t\t\t_highcharts_stop_observing: function (name, fn) {\n\t\t\t\t\tif (name) {\n\t\t\t\t\t\tif (fn) {\n\t\t\t\t\t\t\tthis._highchart_events[name] = [this._highchart_events[name]].compact().flatten().without(fn);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdelete this._highchart_events[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._highchart_events = {};\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_highcharts_fire: function (name, args) {\n\t\t\t\t\tvar target = this;\n\t\t\t\t\t(this._highchart_events[name] || []).each(function (fn) {\n\t\t\t\t\t\t// args is never null here\n\t\t\t\t\t\tif (args.stopped) {\n\t\t\t\t\t\t\treturn; // \"throw $break\" wasn't working. i think because of the scope of 'this'.\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Attach a simple preventDefault function to skip default handler if called\n\t\t\t\t\t\targs.preventDefault = function () {\n\t\t\t\t\t\t\targs.defaultPrevented = true;\n\t\t\t\t\t\t};\n\t\t\t\t\t\targs.target = target;\n\n\t\t\t\t\t\t// If the event handler return false, prevent the default handler from executing\n\t\t\t\t\t\tif (fn.bind(this)(args) === false) {\n\t\t\t\t\t\t\targs.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n.bind(this));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n};\n}());\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/adapters/standalone-framework.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n Standalone Highcharts Framework\n\n License: MIT License\n*/\nvar HighchartsAdapter=function(){function o(c){function a(a,b,d){a.removeEventListener(b,d,!1)}function d(a,b,d){d=a.HCProxiedMethods[d.toString()];a.detachEvent(\"on\"+b,d)}function b(b,c){var f=b.HCEvents,i,g,k,j;if(b.removeEventListener)i=a;else if(b.attachEvent)i=d;else return;c?(g={},g[c]=!0):g=f;for(j in g)if(f[j])for(k=f[j].length;k--;)i(b,j,f[j][k])}c.HCExtended||Highcharts.extend(c,{HCExtended:!0,HCEvents:{},bind:function(b,a){var d=this,c=this.HCEvents,g;if(d.addEventListener)d.addEventListener(b,\na,!1);else if(d.attachEvent){g=function(b){a.call(d,b)};if(!d.HCProxiedMethods)d.HCProxiedMethods={};d.HCProxiedMethods[a.toString()]=g;d.attachEvent(\"on\"+b,g)}c[b]===r&&(c[b]=[]);c[b].push(a)},unbind:function(c,h){var f,i;c?(f=this.HCEvents[c]||[],h?(i=HighchartsAdapter.inArray(h,f),i>-1&&(f.splice(i,1),this.HCEvents[c]=f),this.removeEventListener?a(this,c,h):this.attachEvent&&d(this,c,h)):(b(this,c),this.HCEvents[c]=[])):(b(this),this.HCEvents={})},trigger:function(b,a){var d=this.HCEvents[b]||\n[],c=d.length,g,k,j;k=function(){a.defaultPrevented=!0};for(g=0;g<c;g++){j=d[g];if(a.stopped)break;a.preventDefault=k;a.target=this;a.type=b;j.call(this,a)===!1&&a.preventDefault()}}});return c}var r,l=document,p=[],m=[],q,n;Math.easeInOutSine=function(c,a,d,b){return-d/2*(Math.cos(Math.PI*c/b)-1)+a};return{init:function(c){if(!l.defaultView)this._getStyle=function(a,d){var b;return a.style[d]?a.style[d]:(d===\"opacity\"&&(d=\"filter\"),b=a.currentStyle[d.replace(/\\-(\\w)/g,function(a,b){return b.toUpperCase()})],\nd===\"filter\"&&(b=b.replace(/alpha\\(opacity=([0-9]+)\\)/,function(b,a){return a/100})),b===\"\"?1:b)},this.adapterRun=function(a,d){var b={width:\"clientWidth\",height:\"clientHeight\"}[d];if(b)return a.style.zoom=1,a[b]-2*parseInt(HighchartsAdapter._getStyle(a,\"padding\"),10)};if(!Array.prototype.forEach)this.each=function(a,d){for(var b=0,c=a.length;b<c;b++)if(d.call(a[b],a[b],b,a)===!1)return b};if(!Array.prototype.indexOf)this.inArray=function(a,d){var b,c=0;if(d)for(b=d.length;c<b;c++)if(d[c]===a)return c;\nreturn-1};if(!Array.prototype.filter)this.grep=function(a,d){for(var b=[],c=0,h=a.length;c<h;c++)d(a[c],c)&&b.push(a[c]);return b};n=function(a,c,b){this.options=c;this.elem=a;this.prop=b};n.prototype={update:function(){var a;a=this.paths;var d=this.elem,b=d.element;a&&b?d.attr(\"d\",c.step(a[0],a[1],this.now,this.toD)):d.attr?b&&d.attr(this.prop,this.now):(a={},a[d]=this.now+this.unit,Highcharts.css(d,a));this.options.step&&this.options.step.call(this.elem,this.now,this)},custom:function(a,c,b){var e=\nthis,h=function(a){return e.step(a)},f;this.startTime=+new Date;this.start=a;this.end=c;this.unit=b;this.now=this.start;this.pos=this.state=0;h.elem=this.elem;h()&&m.push(h)===1&&(q=setInterval(function(){for(f=0;f<m.length;f++)m[f]()||m.splice(f--,1);m.length||clearInterval(q)},13))},step:function(a){var c=+new Date,b;b=this.options;var e;if(this.elem.stopAnimation)b=!1;else if(a||c>=b.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();a=this.options.curAnim[this.prop]=\n!0;for(e in b.curAnim)b.curAnim[e]!==!0&&(a=!1);a&&b.complete&&b.complete.call(this.elem);b=!1}else e=c-this.startTime,this.state=e/b.duration,this.pos=b.easing(e,0,1,b.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update(),b=!0;return b}};this.animate=function(a,d,b){var e,h=\"\",f,i,g;a.stopAnimation=!1;if(typeof b!==\"object\"||b===null)e=arguments,b={duration:e[2],easing:e[3],complete:e[4]};if(typeof b.duration!==\"number\")b.duration=400;b.easing=Math[b.easing]||Math.easeInOutSine;\nb.curAnim=Highcharts.extend({},d);for(g in d)i=new n(a,b,g),f=null,g===\"d\"?(i.paths=c.init(a,a.d,d.d),i.toD=d.d,e=0,f=1):a.attr?e=a.attr(g):(e=parseFloat(HighchartsAdapter._getStyle(a,g))||0,g!==\"opacity\"&&(h=\"px\")),f||(f=parseFloat(d[g])),i.custom(e,f,h)}},_getStyle:function(c,a){return window.getComputedStyle(c).getPropertyValue(a)},getScript:function(c,a){var d=l.getElementsByTagName(\"head\")[0],b=l.createElement(\"script\");b.type=\"text/javascript\";b.src=c;b.onload=a;d.appendChild(b)},inArray:function(c,\na){return a.indexOf?a.indexOf(c):p.indexOf.call(a,c)},adapterRun:function(c,a){return parseInt(HighchartsAdapter._getStyle(c,a),10)},grep:function(c,a){return p.filter.call(c,a)},map:function(c,a){for(var d=[],b=0,e=c.length;b<e;b++)d[b]=a.call(c[b],c[b],b,c);return d},offset:function(c){for(var a=0,d=0;c;)a+=c.offsetLeft,d+=c.offsetTop,c=c.offsetParent;return{left:a,top:d}},addEvent:function(c,a,d){o(c).bind(a,d)},removeEvent:function(c,a,d){o(c).unbind(a,d)},fireEvent:function(c,a,d,b){var e;l.createEvent&&\n(c.dispatchEvent||c.fireEvent)?(e=l.createEvent(\"Events\"),e.initEvent(a,!0,!0),e.target=c,Highcharts.extend(e,d),c.dispatchEvent?c.dispatchEvent(e):c.fireEvent(a,e)):c.HCExtended===!0&&(d=d||{},c.trigger(a,d));d&&d.defaultPrevented&&(b=null);b&&b(d)},washMouseEvent:function(c){return c},stop:function(c){c.stopAnimation=!0},each:function(c,a){return Array.prototype.forEach.call(c,a)}}}();\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/adapters/standalone-framework.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n * Standalone Highcharts Framework\n *\n * License: MIT License\n */\n\n\n/*global Highcharts */\nvar HighchartsAdapter = (function () {\n\nvar UNDEFINED,\n\tdoc = document,\n\temptyArray = [],\n\ttimers = [],\n\ttimerId,\n\tFx;\n\nMath.easeInOutSine = function (t, b, c, d) {\n\treturn -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n};\n\n\n\n/**\n * Extend given object with custom events\n */\nfunction augment(obj) {\n\tfunction removeOneEvent(el, type, fn) {\n\t\tel.removeEventListener(type, fn, false);\n\t}\n\n\tfunction IERemoveOneEvent(el, type, fn) {\n\t\tfn = el.HCProxiedMethods[fn.toString()];\n\t\tel.detachEvent('on' + type, fn);\n\t}\n\n\tfunction removeAllEvents(el, type) {\n\t\tvar events = el.HCEvents,\n\t\t\tremove,\n\t\t\ttypes,\n\t\t\tlen,\n\t\t\tn;\n\n\t\tif (el.removeEventListener) {\n\t\t\tremove = removeOneEvent;\n\t\t} else if (el.attachEvent) {\n\t\t\tremove = IERemoveOneEvent;\n\t\t} else {\n\t\t\treturn; // break on non-DOM events\n\t\t}\n\n\n\t\tif (type) {\n\t\t\ttypes = {};\n\t\t\ttypes[type] = true;\n\t\t} else {\n\t\t\ttypes = events;\n\t\t}\n\n\t\tfor (n in types) {\n\t\t\tif (events[n]) {\n\t\t\t\tlen = events[n].length;\n\t\t\t\twhile (len--) {\n\t\t\t\t\tremove(el, n, events[n][len]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!obj.HCExtended) {\n\t\tHighcharts.extend(obj, {\n\t\t\tHCExtended: true,\n\n\t\t\tHCEvents: {},\n\n\t\t\tbind: function (name, fn) {\n\t\t\t\tvar el = this,\n\t\t\t\t\tevents = this.HCEvents,\n\t\t\t\t\twrappedFn;\n\n\t\t\t\t// handle DOM events in modern browsers\n\t\t\t\tif (el.addEventListener) {\n\t\t\t\t\tel.addEventListener(name, fn, false);\n\n\t\t\t\t// handle old IE implementation\n\t\t\t\t} else if (el.attachEvent) {\n\t\t\t\t\t\n\t\t\t\t\twrappedFn = function (e) {\n\t\t\t\t\t\tfn.call(el, e);\n\t\t\t\t\t};\n\n\t\t\t\t\tif (!el.HCProxiedMethods) {\n\t\t\t\t\t\tel.HCProxiedMethods = {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// link wrapped fn with original fn, so we can get this in removeEvent\n\t\t\t\t\tel.HCProxiedMethods[fn.toString()] = wrappedFn;\n\n\t\t\t\t\tel.attachEvent('on' + name, wrappedFn);\n\t\t\t\t}\n\n\n\t\t\t\tif (events[name] === UNDEFINED) {\n\t\t\t\t\tevents[name] = [];\n\t\t\t\t}\n\n\t\t\t\tevents[name].push(fn);\n\t\t\t},\n\n\t\t\tunbind: function (name, fn) {\n\t\t\t\tvar events,\n\t\t\t\t\tindex;\n\n\t\t\t\tif (name) {\n\t\t\t\t\tevents = this.HCEvents[name] || [];\n\t\t\t\t\tif (fn) {\n\t\t\t\t\t\tindex = HighchartsAdapter.inArray(fn, events);\n\t\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\t\tevents.splice(index, 1);\n\t\t\t\t\t\t\tthis.HCEvents[name] = events;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.removeEventListener) {\n\t\t\t\t\t\t\tremoveOneEvent(this, name, fn);\n\t\t\t\t\t\t} else if (this.attachEvent) {\n\t\t\t\t\t\t\tIERemoveOneEvent(this, name, fn);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tremoveAllEvents(this, name);\n\t\t\t\t\t\tthis.HCEvents[name] = [];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremoveAllEvents(this);\n\t\t\t\t\tthis.HCEvents = {};\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttrigger: function (name, args) {\n\t\t\t\tvar events = this.HCEvents[name] || [],\n\t\t\t\t\ttarget = this,\n\t\t\t\t\tlen = events.length,\n\t\t\t\t\ti,\n\t\t\t\t\tpreventDefault,\n\t\t\t\t\tfn;\n\n\t\t\t\t// Attach a simple preventDefault function to skip default handler if called\n\t\t\t\tpreventDefault = function () {\n\t\t\t\t\targs.defaultPrevented = true;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\tfn = events[i];\n\n\t\t\t\t\t// args is never null here\n\t\t\t\t\tif (args.stopped) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\targs.preventDefault = preventDefault;\n\t\t\t\t\targs.target = target;\n\t\t\t\t\targs.type = name; // #2297\t\n\t\t\t\t\t\n\t\t\t\t\t// If the event handler return false, prevent the default handler from executing\n\t\t\t\t\tif (fn.call(this, args) === false) {\n\t\t\t\t\t\targs.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn obj;\n}\n\n\nreturn {\n\t/**\n\t * Initialize the adapter. This is run once as Highcharts is first run.\n\t */\n\tinit: function (pathAnim) {\n\n\t\t/**\n\t\t * Compatibility section to add support for legacy IE. This can be removed if old IE \n\t\t * support is not needed.\n\t\t */\n\t\tif (!doc.defaultView) {\n\t\t\tthis._getStyle = function (el, prop) {\n\t\t\t\tvar val;\n\t\t\t\tif (el.style[prop]) {\n\t\t\t\t\treturn el.style[prop];\n\t\t\t\t} else {\n\t\t\t\t\tif (prop === 'opacity') {\n\t\t\t\t\t\tprop = 'filter';\n\t\t\t\t\t}\n\t\t\t\t\t/*jslint unparam: true*/\n\t\t\t\t\tval = el.currentStyle[prop.replace(/\\-(\\w)/g, function (a, b) { return b.toUpperCase(); })];\n\t\t\t\t\tif (prop === 'filter') {\n\t\t\t\t\t\tval = val.replace(\n\t\t\t\t\t\t\t/alpha\\(opacity=([0-9]+)\\)/, \n\t\t\t\t\t\t\tfunction (a, b) { \n\t\t\t\t\t\t\t\treturn b / 100; \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t/*jslint unparam: false*/\n\t\t\t\t\treturn val === '' ? 1 : val;\n\t\t\t\t} \n\t\t\t};\n\t\t\tthis.adapterRun = function (elem, method) {\n\t\t\t\tvar alias = { width: 'clientWidth', height: 'clientHeight' }[method];\n\n\t\t\t\tif (alias) {\n\t\t\t\t\telem.style.zoom = 1;\n\t\t\t\t\treturn elem[alias] - 2 * parseInt(HighchartsAdapter._getStyle(elem, 'padding'), 10);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (!Array.prototype.forEach) {\n\t\t\tthis.each = function (arr, fn) { // legacy\n\t\t\t\tvar i = 0, \n\t\t\t\t\tlen = arr.length;\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tif (fn.call(arr[i], arr[i], i, arr) === false) {\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (!Array.prototype.indexOf) {\n\t\t\tthis.inArray = function (item, arr) {\n\t\t\t\tvar len, \n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (arr) {\n\t\t\t\t\tlen = arr.length;\n\t\t\t\t\t\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tif (arr[i] === item) {\n\t\t\t\t\t\t\treturn i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t}\n\n\t\tif (!Array.prototype.filter) {\n\t\t\tthis.grep = function (elements, callback) {\n\t\t\t\tvar ret = [],\n\t\t\t\t\ti = 0,\n\t\t\t\t\tlength = elements.length;\n\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (!!callback(elements[i], i)) {\n\t\t\t\t\t\tret.push(elements[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn ret;\n\t\t\t};\n\t\t}\n\n\t\t//--- End compatibility section ---\n\n\n\t\t/**\n\t\t * Start of animation specific code\n\t\t */\n\t\tFx = function (elem, options, prop) {\n\t\t\tthis.options = options;\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t};\n\t\tFx.prototype = {\n\t\t\t\n\t\t\tupdate: function () {\n\t\t\t\tvar styles,\n\t\t\t\t\tpaths = this.paths,\n\t\t\t\t\telem = this.elem,\n\t\t\t\t\telemelem = elem.element; // if destroyed, it is null\n\n\t\t\t\t// Animating a path definition on SVGElement\n\t\t\t\tif (paths && elemelem) {\n\t\t\t\t\telem.attr('d', pathAnim.step(paths[0], paths[1], this.now, this.toD));\n\t\t\t\t\n\t\t\t\t// Other animations on SVGElement\n\t\t\t\t} else if (elem.attr) {\n\t\t\t\t\tif (elemelem) {\n\t\t\t\t\t\telem.attr(this.prop, this.now);\n\t\t\t\t\t}\n\n\t\t\t\t// HTML styles\n\t\t\t\t} else {\n\t\t\t\t\tstyles = {};\n\t\t\t\t\tstyles[elem] = this.now + this.unit;\n\t\t\t\t\tHighcharts.css(elem, styles);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (this.options.step) {\n\t\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t\t}\n\n\t\t\t},\n\t\t\tcustom: function (from, to, unit) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tt = function (gotoEnd) {\n\t\t\t\t\t\treturn self.step(gotoEnd);\n\t\t\t\t\t},\n\t\t\t\t\ti;\n\n\t\t\t\tthis.startTime = +new Date();\n\t\t\t\tthis.start = from;\n\t\t\t\tthis.end = to;\n\t\t\t\tthis.unit = unit;\n\t\t\t\tthis.now = this.start;\n\t\t\t\tthis.pos = this.state = 0;\n\n\t\t\t\tt.elem = this.elem;\n\n\t\t\t\tif (t() && timers.push(t) === 1) {\n\t\t\t\t\ttimerId = setInterval(function () {\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (i = 0; i < timers.length; i++) {\n\t\t\t\t\t\t\tif (!timers[i]()) {\n\t\t\t\t\t\t\t\ttimers.splice(i--, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!timers.length) {\n\t\t\t\t\t\t\tclearInterval(timerId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 13);\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tstep: function (gotoEnd) {\n\t\t\t\tvar t = +new Date(),\n\t\t\t\t\tret,\n\t\t\t\t\tdone,\n\t\t\t\t\toptions = this.options,\n\t\t\t\t\ti;\n\n\t\t\t\tif (this.elem.stopAnimation) {\n\t\t\t\t\tret = false;\n\n\t\t\t\t} else if (gotoEnd || t >= options.duration + this.startTime) {\n\t\t\t\t\tthis.now = this.end;\n\t\t\t\t\tthis.pos = this.state = 1;\n\t\t\t\t\tthis.update();\n\n\t\t\t\t\tthis.options.curAnim[this.prop] = true;\n\n\t\t\t\t\tdone = true;\n\t\t\t\t\tfor (i in options.curAnim) {\n\t\t\t\t\t\tif (options.curAnim[i] !== true) {\n\t\t\t\t\t\t\tdone = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tif (options.complete) {\n\t\t\t\t\t\t\toptions.complete.call(this.elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tret = false;\n\n\t\t\t\t} else {\n\t\t\t\t\tvar n = t - this.startTime;\n\t\t\t\t\tthis.state = n / options.duration;\n\t\t\t\t\tthis.pos = options.easing(n, 0, 1, options.duration);\n\t\t\t\t\tthis.now = this.start + ((this.end - this.start) * this.pos);\n\t\t\t\t\tthis.update();\n\t\t\t\t\tret = true;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * The adapter animate method\n\t\t */\n\t\tthis.animate = function (el, prop, opt) {\n\t\t\tvar start,\n\t\t\t\tunit = '',\n\t\t\t\tend,\n\t\t\t\tfx,\n\t\t\t\targs,\n\t\t\t\tname;\n\n\t\t\tel.stopAnimation = false; // ready for new\n\n\t\t\tif (typeof opt !== 'object' || opt === null) {\n\t\t\t\targs = arguments;\n\t\t\t\topt = {\n\t\t\t\t\tduration: args[2],\n\t\t\t\t\teasing: args[3],\n\t\t\t\t\tcomplete: args[4]\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (typeof opt.duration !== 'number') {\n\t\t\t\topt.duration = 400;\n\t\t\t}\n\t\t\topt.easing = Math[opt.easing] || Math.easeInOutSine;\n\t\t\topt.curAnim = Highcharts.extend({}, prop);\n\t\t\t\n\t\t\tfor (name in prop) {\n\t\t\t\tfx = new Fx(el, opt, name);\n\t\t\t\tend = null;\n\t\t\t\t\n\t\t\t\tif (name === 'd') {\n\t\t\t\t\tfx.paths = pathAnim.init(\n\t\t\t\t\t\tel,\n\t\t\t\t\t\tel.d,\n\t\t\t\t\t\tprop.d\n\t\t\t\t\t);\n\t\t\t\t\tfx.toD = prop.d;\n\t\t\t\t\tstart = 0;\n\t\t\t\t\tend = 1;\n\t\t\t\t} else if (el.attr) {\n\t\t\t\t\tstart = el.attr(name);\n\t\t\t\t} else {\n\t\t\t\t\tstart = parseFloat(HighchartsAdapter._getStyle(el, name)) || 0;\n\t\t\t\t\tif (name !== 'opacity') {\n\t\t\t\t\t\tunit = 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (!end) {\n\t\t\t\t\tend = parseFloat(prop[name]);\n\t\t\t\t}\n\t\t\t\tfx.custom(start, end, unit);\n\t\t\t}\t\n\t\t};\n\t},\n\n\t/**\n\t * Internal method to return CSS value for given element and property\n\t */\n\t_getStyle: function (el, prop) {\n\t\treturn window.getComputedStyle(el).getPropertyValue(prop);\n\t},\n\n\t/**\n\t * Downloads a script and executes a callback when done.\n\t * @param {String} scriptLocation\n\t * @param {Function} callback\n\t */\n\tgetScript: function (scriptLocation, callback) {\n\t\t// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.\n\t\tvar head = doc.getElementsByTagName('head')[0],\n\t\t\tscript = doc.createElement('script');\n\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = scriptLocation;\n\t\tscript.onload = callback;\n\n\t\thead.appendChild(script);\n\t},\n\n\t/**\n\t * Return the index of an item in an array, or -1 if not found\n\t */\n\tinArray: function (item, arr) {\n\t\treturn arr.indexOf ? arr.indexOf(item) : emptyArray.indexOf.call(arr, item);\n\t},\n\n\n\t/**\n\t * A direct link to adapter methods\n\t */\n\tadapterRun: function (elem, method) {\n\t\treturn parseInt(HighchartsAdapter._getStyle(elem, method), 10);\n\t},\n\n\t/**\n\t * Filter an array\n\t */\n\tgrep: function (elements, callback) {\n\t\treturn emptyArray.filter.call(elements, callback);\n\t},\n\n\t/**\n\t * Map an array\n\t */\n\tmap: function (arr, fn) {\n\t\tvar results = [], i = 0, len = arr.length;\n\n\t\tfor (; i < len; i++) {\n\t\t\tresults[i] = fn.call(arr[i], arr[i], i, arr);\n\t\t}\n\n\t\treturn results;\n\t},\n\n\toffset: function (el) {\n\t\tvar left = 0,\n\t\t\ttop = 0;\n\n\t\twhile (el) {\n\t\t\tleft += el.offsetLeft;\n\t\t\ttop += el.offsetTop;\n\t\t\tel = el.offsetParent;\n\t\t}\n\n\t\treturn {\n\t\t\tleft: left,\n\t\t\ttop: top\n\t\t};\n\t},\n\n\t/**\n\t * Add an event listener\n\t */\n\taddEvent: function (el, type, fn) {\n\t\taugment(el).bind(type, fn);\n\t},\n\n\t/**\n\t * Remove event added with addEvent\n\t */\n\tremoveEvent: function (el, type, fn) {\n\t\taugment(el).unbind(type, fn);\n\t},\n\n\t/**\n\t * Fire an event on a custom object\n\t */\n\tfireEvent: function (el, type, eventArguments, defaultFunction) {\n\t\tvar e;\n\n\t\tif (doc.createEvent && (el.dispatchEvent || el.fireEvent)) {\n\t\t\te = doc.createEvent('Events');\n\t\t\te.initEvent(type, true, true);\n\t\t\te.target = el;\n\n\t\t\tHighcharts.extend(e, eventArguments);\n\n\t\t\tif (el.dispatchEvent) {\n\t\t\t\tel.dispatchEvent(e);\n\t\t\t} else {\n\t\t\t\tel.fireEvent(type, e);\n\t\t\t}\n\n\t\t} else if (el.HCExtended === true) {\n\t\t\teventArguments = eventArguments || {};\n\t\t\tel.trigger(type, eventArguments);\n\t\t}\n\n\t\tif (eventArguments && eventArguments.defaultPrevented) {\n\t\t\tdefaultFunction = null;\n\t\t}\n\n\t\tif (defaultFunction) {\n\t\t\tdefaultFunction(eventArguments);\n\t\t}\n\t},\n\n\twashMouseEvent: function (e) {\n\t\treturn e;\n\t},\n\n\n\t/**\n\t * Stop running animation\n\t */\n\tstop: function (el) {\n\t\tel.stopAnimation = true;\n\t},\n\n\t/**\n\t * Utility for iterating over an array. Parameters are reversed compared to jQuery.\n\t * @param {Array} arr\n\t * @param {Function} fn\n\t */\n\teach: function (arr, fn) { // modern browsers\n\t\treturn Array.prototype.forEach.call(arr, fn);\n\t}\n};\n}());\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/highcharts-more.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n (c) 2009-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(j,C){function J(a,b,c){this.init.call(this,a,b,c)}function K(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var c=this.xAxis.center;a.push(\"L\",c[0],c[1])},this.closedStacks=!0}function L(a,b){var c=this.chart,d=this.options.animation,g=this.group,f=this.markerGroup,e=this.xAxis.center,i=c.plotLeft,n=c.plotTop;if(c.polar){if(c.renderer.isSVG)if(d===!0&&(d={}),b){if(c={translateX:e[0]+i,translateY:e[1]+n,scaleX:0.001,scaleY:0.001},g.attr(c),f)f.attrSetters=g.attrSetters,\nf.attr(c)}else c={translateX:i,translateY:n,scaleX:1,scaleY:1},g.animate(c,d),f&&f.animate(c,d),this.animate=null}else a.call(this,b)}var P=j.arrayMin,Q=j.arrayMax,s=j.each,F=j.extend,p=j.merge,R=j.map,r=j.pick,v=j.pInt,m=j.getOptions().plotOptions,h=j.seriesTypes,x=j.extendClass,M=j.splat,o=j.wrap,N=j.Axis,u=j.Tick,z=j.Series,q=h.column.prototype,t=Math,D=t.round,A=t.floor,S=t.max,w=function(){};F(J.prototype,{init:function(a,b,c){var d=this,g=d.defaultOptions;d.chart=b;if(b.angular)g.background=\n{};d.options=a=p(g,a);(a=a.background)&&s([].concat(M(a)).reverse(),function(a){var b=a.backgroundColor,a=p(d.defaultBackgroundOptions,a);if(b)a.backgroundColor=b;a.color=a.backgroundColor;c.options.plotBands.unshift(a)})},defaultOptions:{center:[\"50%\",\"50%\"],size:\"85%\",startAngle:0},defaultBackgroundOptions:{shape:\"circle\",borderWidth:1,borderColor:\"silver\",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,\"#FFF\"],[1,\"#DDD\"]]},from:Number.MIN_VALUE,innerRadius:0,to:Number.MAX_VALUE,\nouterRadius:\"105%\"}});var G=N.prototype,u=u.prototype,T={getOffset:w,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:w,setCategories:w,setTitle:w},O={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:\"center\",x:0,y:null},minorGridLineWidth:0,minorTickInterval:\"auto\",minorTickLength:10,minorTickPosition:\"inside\",minorTickWidth:1,plotBands:[],tickLength:10,tickPosition:\"inside\",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null,\ndistance:15,x:0,y:null},maxPadding:0,minPadding:0,plotBands:[],showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:\"circle\",labels:{align:\"right\",x:-3,y:-2},plotBands:[],showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){this.options=p(this.defaultOptions,this.defaultRadialOptions,a)},getOffset:function(){G.getOffset.call(this);this.chart.axisOffset[this.side]=0},getLinePath:function(a,b){var c=this.center,b=r(b,c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+\nc[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center&&(this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min||1),this.isXAxis))this.minPixelPadding=this.transA*this.minPointOffset+(this.reversed?(this.endAngleRad-this.startAngleRad)/4:0)},beforeSetTickPositions:function(){this.autoConnect&&(this.max+=this.categories&&\n1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial)this.center=this.pane.center=h.pie.prototype.getCenter.call(this.pane),this.len=this.width=this.height=this.isCircular?this.center[2]*(this.endAngleRad-this.startAngleRad)/2:this.center[2]/2},getPosition:function(a,b){if(!this.isCircular)b=this.translate(a),a=this.min;return this.postTranslate(this.translate(a),r(b,this.center[2]/2)-this.offset)},postTranslate:function(a,b){var c=this.chart,\nd=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+d[0]+Math.cos(a)*b,y:c.plotTop+d[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var d=this.center,g=this.startAngleRad,f=d[2]/2,e=[r(c.outerRadius,\"100%\"),c.innerRadius,r(c.thickness,10)],i=/%$/,n,l=this.isCircular;this.options.gridLineInterpolation===\"polygon\"?d=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(l||(e[0]=this.translate(a),e[1]=this.translate(b)),e=R(e,function(a){i.test(a)&&(a=v(a,10)*f/100);return a}),c.shape===\n\"circle\"||!l?(a=-Math.PI/2,b=Math.PI*1.5,n=!0):(a=g+this.translate(a),b=g+this.translate(b)),d=this.chart.renderer.symbols.arc(this.left+d[0],this.top+d[1],e[0],e[0],{start:a,end:b,innerR:r(e[1],e[0]-e[2]),open:n}));return d},getPlotLinePath:function(a,b){var c=this.center,d=this.chart,g=this.getPosition(a),f,e,i;this.isCircular?i=[\"M\",c[0]+d.plotLeft,c[1]+d.plotTop,\"L\",g.x,g.y]:this.options.gridLineInterpolation===\"circle\"?(a=this.translate(a))&&(i=this.getLinePath(0,a)):(f=d.xAxis[0],i=[],a=this.translate(a),\nc=f.tickPositions,f.autoConnect&&(c=c.concat([c[0]])),b&&(c=[].concat(c).reverse()),s(c,function(c,b){e=f.getPosition(c,a);i.push(b?\"L\":\"M\",e.x,e.y)}));return i},getTitlePosition:function(){var a=this.center,b=this.chart,c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};o(G,\"init\",function(a,b,c){var k;var d=b.angular,g=b.polar,f=c.isX,e=d&&f,i,n;n=b.options;var l=c.pane||0;if(d){if(F(this,e?T:O),i=!f)this.defaultRadialOptions=\nthis.defaultRadialGaugeOptions}else if(g)F(this,O),this.defaultRadialOptions=(i=f)?this.defaultRadialXOptions:p(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!e&&(d||g)){a=this.options;if(!b.panes)b.panes=[];this.pane=(k=b.panes[l]=b.panes[l]||new J(M(n.pane)[l],b,this),l=k);l=l.options;b.inverted=!1;n.chart.zoomType=null;this.startAngleRad=b=(l.startAngle-90)*Math.PI/180;this.endAngleRad=n=(r(l.endAngle,l.startAngle+360)-90)*Math.PI/180;this.offset=a.offset||0;if((this.isCircular=\ni)&&c.max===C&&n-b===2*Math.PI)this.autoConnect=!0}});o(u,\"getPosition\",function(a,b,c,d,g){var f=this.axis;return f.getPosition?f.getPosition(c):a.call(this,b,c,d,g)});o(u,\"getLabelPosition\",function(a,b,c,d,g,f,e,i,n){var l=this.axis,k=f.y,h=f.align,j=(l.translate(this.pos)+l.startAngleRad+Math.PI/2)/Math.PI*180%360;l.isRadial?(a=l.getPosition(this.pos,l.center[2]/2+r(f.distance,-25)),f.rotation===\"auto\"?d.attr({rotation:j}):k===null&&(k=v(d.styles.lineHeight)*0.9-d.getBBox().height/2),h===null&&\n(h=l.isCircular?j>20&&j<160?\"left\":j>200&&j<340?\"right\":\"center\":\"center\",d.attr({align:h})),a.x+=f.x,a.y+=k):a=a.call(this,b,c,d,g,f,e,i,n);return a});o(u,\"getMarkPath\",function(a,b,c,d,g,f,e){var i=this.axis;i.isRadial?(a=i.getPosition(this.pos,i.center[2]/2+d),b=[\"M\",b,c,\"L\",a.x,a.y]):b=a.call(this,b,c,d,g,f,e);return b});m.arearange=p(m.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:'<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>'},\ntrackByArea:!0,dataLabels:{verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0}});h.arearange=j.extendClass(h.area,{type:\"arearange\",pointArrayMap:[\"low\",\"high\"],toYData:function(a){return[a.low,a.high]},pointValKey:\"low\",getSegments:function(){var a=this;s(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y=null;else if(b.low===null&&b.high!==null)b.y=b.high});z.prototype.getSegments.call(this)},translate:function(){var a=this.yAxis;h.area.prototype.translate.apply(this);\ns(this.points,function(b){var c=b.low,d=b.high,g=b.plotY;d===null&&c===null?b.y=null:c===null?(b.plotLow=b.plotY=null,b.plotHigh=a.translate(d,0,1,0,1)):d===null?(b.plotLow=g,b.plotHigh=null):(b.plotLow=g,b.plotHigh=a.translate(d,0,1,0,1))})},getSegmentPath:function(a){var b,c=[],d=a.length,g=z.prototype.getSegmentPath,f,e;e=this.options;var i=e.step;for(b=HighchartsAdapter.grep(a,function(a){return a.plotLow!==null});d--;)f=a[d],f.plotHigh!==null&&c.push({plotX:f.plotX,plotY:f.plotHigh});a=g.call(this,\nb);if(i)i===!0&&(i=\"left\"),e.step={left:\"right\",center:\"center\",right:\"left\"}[i];c=g.call(this,c);e.step=i;e=[].concat(a,c);c[0]=\"L\";this.areaPath=this.areaPath.concat(a,c);return e},drawDataLabels:function(){var a=this.data,b=a.length,c,d=[],g=z.prototype,f=this.options.dataLabels,e,i=this.chart.inverted;if(f.enabled||this._hasPointLabels){for(c=b;c--;)e=a[c],e.y=e.high,e.plotY=e.plotHigh,d[c]=e.dataLabel,e.dataLabel=e.dataLabelUpper,e.below=!1,i?(f.align=\"left\",f.x=f.xHigh):f.y=f.yHigh;g.drawDataLabels.apply(this,\narguments);for(c=b;c--;)e=a[c],e.dataLabelUpper=e.dataLabel,e.dataLabel=d[c],e.y=e.low,e.plotY=e.plotLow,e.below=!0,i?(f.align=\"right\",f.x=f.xLow):f.y=f.yLow;g.drawDataLabels.apply(this,arguments)}},alignDataLabel:h.column.prototype.alignDataLabel,getSymbol:h.column.prototype.getSymbol,drawPoints:w});m.areasplinerange=p(m.arearange);h.areasplinerange=x(h.arearange,{type:\"areasplinerange\",getPointSpline:h.spline.prototype.getPointSpline});m.columnrange=p(m.column,m.arearange,{lineWidth:1,pointRange:null});\nh.columnrange=x(h.arearange,{type:\"columnrange\",translate:function(){var a=this,b=a.yAxis,c;q.translate.apply(a);s(a.points,function(d){var g=d.shapeArgs,f=a.options.minPointLength,e;d.plotHigh=c=b.translate(d.high,0,1,0,1);d.plotLow=d.plotY;e=c;d=d.plotY-c;d<f&&(f-=d,d+=f,e-=f/2);g.height=d;g.y=e})},trackerGroups:[\"group\",\"dataLabels\"],drawGraph:w,pointAttrToOptions:q.pointAttrToOptions,drawPoints:q.drawPoints,drawTracker:q.drawTracker,animate:q.animate,getColumnMetrics:q.getColumnMetrics});m.gauge=\np(m.line,{dataLabels:{enabled:!0,y:15,borderWidth:1,borderColor:\"silver\",borderRadius:3,style:{fontWeight:\"bold\"},verticalAlign:\"top\",zIndex:2},dial:{},pivot:{},tooltip:{headerFormat:\"\"},showInLegend:!1});u={type:\"gauge\",pointClass:j.extendClass(j.Point,{setState:function(a){this.state=a}}),angular:!0,drawGraph:w,fixedBox:!0,trackerGroups:[\"group\",\"dataLabels\"],translate:function(){var a=this.yAxis,b=this.options,c=a.center;this.generatePoints();s(this.points,function(d){var g=p(b.dial,d.dial),f=\nv(r(g.radius,80))*c[2]/200,e=v(r(g.baseLength,70))*f/100,i=v(r(g.rearLength,10))*f/100,n=g.baseWidth||3,l=g.topWidth||1,k=a.startAngleRad+a.translate(d.y,null,null,null,!0);b.wrap===!1&&(k=Math.max(a.startAngleRad,Math.min(a.endAngleRad,k)));k=k*180/Math.PI;d.shapeType=\"path\";d.shapeArgs={d:g.path||[\"M\",-i,-n/2,\"L\",e,-n/2,f,-l/2,f,l/2,e,n/2,-i,n/2,\"z\"],translateX:c[0],translateY:c[1],rotation:k};d.plotX=c[0];d.plotY=c[1]})},drawPoints:function(){var a=this,b=a.yAxis.center,c=a.pivot,d=a.options,g=\nd.pivot,f=a.chart.renderer;s(a.points,function(c){var b=c.graphic,g=c.shapeArgs,l=g.d,k=p(d.dial,c.dial);b?(b.animate(g),g.d=l):c.graphic=f[c.shapeType](g).attr({stroke:k.borderColor||\"none\",\"stroke-width\":k.borderWidth||0,fill:k.backgroundColor||\"black\",rotation:g.rotation}).add(a.group)});c?c.animate({translateX:b[0],translateY:b[1]}):a.pivot=f.circle(0,0,r(g.radius,5)).attr({\"stroke-width\":g.borderWidth||0,stroke:g.borderColor||\"silver\",fill:g.backgroundColor||\"black\"}).translate(b[0],b[1]).add(a.group)},\nanimate:function(a){var b=this;if(!a)s(b.points,function(a){var d=a.graphic;d&&(d.attr({rotation:b.yAxis.startAngleRad*180/Math.PI}),d.animate({rotation:a.shapeArgs.rotation},b.options.animation))}),b.animate=null},render:function(){this.group=this.plotGroup(\"group\",\"series\",this.visible?\"visible\":\"hidden\",this.options.zIndex,this.chart.seriesGroup);h.pie.prototype.render.call(this);this.group.clip(this.chart.clipRect)},setData:h.pie.prototype.setData,drawTracker:h.column.prototype.drawTracker};h.gauge=\nj.extendClass(h.line,u);m.boxplot=p(m.column,{fillColor:\"#FFFFFF\",lineWidth:1,medianWidth:2,states:{hover:{brightness:-0.3}},threshold:null,tooltip:{pointFormat:'<span style=\"color:{series.color};font-weight:bold\">{series.name}</span><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'},whiskerLength:\"50%\",whiskerWidth:2});h.boxplot=x(h.column,{type:\"boxplot\",pointArrayMap:[\"low\",\"q1\",\"median\",\"q3\",\"high\"],\ntoYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:\"high\",pointAttrToOptions:{fill:\"fillColor\",stroke:\"color\",\"stroke-width\":\"lineWidth\"},drawDataLabels:w,translate:function(){var a=this.yAxis,b=this.pointArrayMap;h.column.prototype.translate.apply(this);s(this.points,function(c){s(b,function(b){c[b]!==null&&(c[b+\"Plot\"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a=this,b=a.points,c=a.options,d=a.chart.renderer,g,f,e,i,n,l,k,h,j,m,o,H,p,E,I,q,w,t,v,u,z,y,x=a.doQuartiles!==\n!1,B=parseInt(a.options.whiskerLength,10)/100;s(b,function(b){j=b.graphic;z=b.shapeArgs;o={};E={};q={};y=b.color||a.color;if(b.plotY!==C)if(g=b.pointAttr[b.selected?\"selected\":\"\"],w=z.width,t=A(z.x),v=t+w,u=D(w/2),f=A(x?b.q1Plot:b.lowPlot),e=A(x?b.q3Plot:b.lowPlot),i=A(b.highPlot),n=A(b.lowPlot),o.stroke=b.stemColor||c.stemColor||y,o[\"stroke-width\"]=r(b.stemWidth,c.stemWidth,c.lineWidth),o.dashstyle=b.stemDashStyle||c.stemDashStyle,E.stroke=b.whiskerColor||c.whiskerColor||y,E[\"stroke-width\"]=r(b.whiskerWidth,\nc.whiskerWidth,c.lineWidth),q.stroke=b.medianColor||c.medianColor||y,q[\"stroke-width\"]=r(b.medianWidth,c.medianWidth,c.lineWidth),k=o[\"stroke-width\"]%2/2,h=t+u+k,m=[\"M\",h,e,\"L\",h,i,\"M\",h,f,\"L\",h,n,\"z\"],x&&(k=g[\"stroke-width\"]%2/2,h=A(h)+k,f=A(f)+k,e=A(e)+k,t+=k,v+=k,H=[\"M\",t,e,\"L\",t,f,\"L\",v,f,\"L\",v,e,\"L\",t,e,\"z\"]),B&&(k=E[\"stroke-width\"]%2/2,i+=k,n+=k,p=[\"M\",h-u*B,i,\"L\",h+u*B,i,\"M\",h-u*B,n,\"L\",h+u*B,n]),k=q[\"stroke-width\"]%2/2,l=D(b.medianPlot)+k,I=[\"M\",t,l,\"L\",v,l,\"z\"],j)b.stem.animate({d:m}),B&&\nb.whiskers.animate({d:p}),x&&b.box.animate({d:H}),b.medianShape.animate({d:I});else{b.graphic=j=d.g().add(a.group);b.stem=d.path(m).attr(o).add(j);if(B)b.whiskers=d.path(p).attr(E).add(j);if(x)b.box=d.path(H).attr(g).add(j);b.medianShape=d.path(I).attr(q).add(j)}})}});m.errorbar=p(m.boxplot,{color:\"#000000\",grouping:!1,linkedTo:\":previous\",tooltip:{pointFormat:m.arearange.tooltip.pointFormat},whiskerWidth:null});h.errorbar=x(h.boxplot,{type:\"errorbar\",pointArrayMap:[\"low\",\"high\"],toYData:function(a){return[a.low,\na.high]},pointValKey:\"high\",doQuartiles:!1,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||h.column.prototype.getColumnMetrics.call(this)}});m.waterfall=p(m.column,{lineWidth:1,lineColor:\"#333\",dashStyle:\"dot\",borderColor:\"#333\"});h.waterfall=x(h.column,{type:\"waterfall\",upColorProp:\"fill\",pointArrayMap:[\"low\",\"y\"],pointValKey:\"y\",init:function(a,b){b.stacking=!0;h.column.prototype.init.call(this,a,b)},translate:function(){var a=this.options,b=this.yAxis,c,d,\ng,f,e,i,n,l,k;c=a.threshold;a=a.borderWidth%2/2;h.column.prototype.translate.apply(this);l=c;g=this.points;for(d=0,c=g.length;d<c;d++){f=g[d];e=f.shapeArgs;i=this.getStack(d);k=i.points[this.index];if(isNaN(f.y))f.y=this.yData[d];n=S(l,l+f.y)+k[0];e.y=b.translate(n,0,1);f.isSum||f.isIntermediateSum?(e.y=b.translate(k[1],0,1),e.height=b.translate(k[0],0,1)-e.y):l+=i.total;e.height<0&&(e.y+=e.height,e.height*=-1);f.plotY=e.y=D(e.y)-a;e.height=D(e.height);f.yBottom=e.y+e.height}},processData:function(a){var b=\nthis.yData,c=this.points,d,g=b.length,f=this.options.threshold||0,e,i,h,l,k,j;i=e=h=l=f;for(j=0;j<g;j++)k=b[j],d=c&&c[j]?c[j]:{},k===\"sum\"||d.isSum?b[j]=i:k===\"intermediateSum\"||d.isIntermediateSum?(b[j]=e,e=f):(i+=k,e+=k),h=Math.min(i,h),l=Math.max(i,l);z.prototype.processData.call(this,a);this.dataMin=h;this.dataMax=l},toYData:function(a){if(a.isSum)return\"sum\";else if(a.isIntermediateSum)return\"intermediateSum\";return a.y},getAttribs:function(){h.column.prototype.getAttribs.apply(this,arguments);\nvar a=this.options,b=a.states,c=a.upColor||this.color,a=j.Color(c).brighten(0.1).get(),d=p(this.pointAttr),g=this.upColorProp;d[\"\"][g]=c;d.hover[g]=b.hover.upColor||a;d.select[g]=b.select.upColor||c;s(this.points,function(a){if(a.y>0&&!a.color)a.pointAttr=d,a.color=c})},getGraphPath:function(){var a=this.data,b=a.length,c=D(this.options.lineWidth+this.options.borderWidth)%2/2,d=[],g,f,e;for(e=1;e<b;e++)f=a[e].shapeArgs,g=a[e-1].shapeArgs,f=[\"M\",g.x+g.width,g.y+c,\"L\",f.x,g.y+c],a[e-1].y<0&&(f[2]+=\ng.height,f[5]+=g.height),d=d.concat(f);return d},getExtremes:w,getStack:function(a){var b=this.yAxis.stacks,c=this.stackKey;this.processedYData[a]<this.options.threshold&&(c=\"-\"+c);return b[c][a]},drawGraph:z.prototype.drawGraph});m.bubble=p(m.scatter,{dataLabels:{inside:!0,style:{color:\"white\",textShadow:\"0px 0px 3px black\"},verticalAlign:\"middle\"},marker:{lineColor:null,lineWidth:1},minSize:8,maxSize:\"20%\",tooltip:{pointFormat:\"({point.x}, {point.y}), Size: {point.z}\"},turboThreshold:0,zThreshold:0});\nh.bubble=x(h.scatter,{type:\"bubble\",pointArrayMap:[\"y\",\"z\"],trackerGroups:[\"group\",\"dataLabelsGroup\"],pointAttrToOptions:{stroke:\"lineColor\",\"stroke-width\":\"lineWidth\",fill:\"fillColor\"},applyOpacity:function(a){var b=this.options.marker,c=r(b.fillOpacity,0.5),a=a||b.fillColor||this.color;c!==1&&(a=j.Color(a).setOpacity(c).get(\"rgba\"));return a},convertAttribs:function(){var a=z.prototype.convertAttribs.apply(this,arguments);a.fill=this.applyOpacity(a.fill);return a},getRadii:function(a,b,c,d){var g,\nf,e,i=this.zData,h=[];for(f=0,g=i.length;f<g;f++)e=b-a,e=e>0?(i[f]-a)/(b-a):0.5,h.push(t.ceil(c+e*(d-c))/2);this.radii=h},animate:function(a){var b=this.options.animation;if(!a)s(this.points,function(a){var d=a.graphic,a=a.shapeArgs;d&&a&&(d.attr(\"r\",1),d.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,d,g=this.radii;h.scatter.prototype.translate.call(this);for(a=b.length;a--;)c=b[a],d=g?g[a]:0,c.negative=c.z<(this.options.zThreshold||0),d>=this.minPxSize/2?(c.shapeType=\n\"circle\",c.shapeArgs={x:c.plotX,y:c.plotY,r:d},c.dlBox={x:c.plotX-d,y:c.plotY-d,width:2*d,height:2*d}):c.shapeArgs=c.plotY=c.dlBox=C},drawLegendSymbol:function(a,b){var c=v(a.itemStyle.fontSize)/2;b.legendSymbol=this.chart.renderer.circle(c,a.baseline-c,c).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:h.column.prototype.drawPoints,alignDataLabel:h.column.prototype.alignDataLabel});N.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,d=0,g=b,f=this.isXAxis,\ne=f?\"xData\":\"yData\",i=this.min,h={},j=t.min(c.plotWidth,c.plotHeight),k=Number.MAX_VALUE,m=-Number.MAX_VALUE,o=this.max-i,p=b/o,q=[];this.tickPositions&&(s(this.series,function(b){var c=b.options;if(b.type===\"bubble\"&&b.visible&&(a.allowZoomOutside=!0,q.push(b),f))s([\"minSize\",\"maxSize\"],function(a){var b=c[a],d=/%$/.test(b),b=v(b);h[a]=d?j*b/100:b}),b.minPxSize=h.minSize,b=b.zData,b.length&&(k=t.min(k,t.max(P(b),c.displayNegative===!1?c.zThreshold:-Number.MAX_VALUE)),m=t.max(m,Q(b)))}),s(q,function(a){var b=\na[e],c=b.length,j;f&&a.getRadii(k,m,h.minSize,h.maxSize);if(o>0)for(;c--;)j=a.radii[c],d=Math.min((b[c]-i)*p-j,d),g=Math.max((b[c]-i)*p+j,g)}),q.length&&o>0&&r(this.options.min,this.userMin)===C&&r(this.options.max,this.userMax)===C&&(g-=b,p*=(b+d-g)/b,this.min+=d/p,this.max+=g/p))};var y=z.prototype,m=j.Pointer.prototype;y.toXY=function(a){var b,c=this.chart;b=a.plotX;var d=a.plotY;a.rectPlotX=b;a.rectPlotY=d;a.clientX=(b/Math.PI*180+this.xAxis.pane.options.startAngle)%360;b=this.xAxis.postTranslate(a.plotX,\nthis.yAxis.len-d);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop};y.orderTooltipPoints=function(a){if(this.chart.polar&&(a.sort(function(a,c){return a.clientX-c.clientX}),a[0]))a[0].wrappedClientX=a[0].clientX+360,a.push(a[0])};o(h.area.prototype,\"init\",K);o(h.areaspline.prototype,\"init\",K);o(h.spline.prototype,\"getPointSpline\",function(a,b,c,d){var g,f,e,i,h,j,k;if(this.chart.polar){g=c.plotX;f=c.plotY;a=b[d-1];e=b[d+1];this.connectEnds&&(a||(a=b[b.length-2]),e||(e=b[1]));\nif(a&&e)i=a.plotX,h=a.plotY,b=e.plotX,j=e.plotY,i=(1.5*g+i)/2.5,h=(1.5*f+h)/2.5,e=(1.5*g+b)/2.5,k=(1.5*f+j)/2.5,b=Math.sqrt(Math.pow(i-g,2)+Math.pow(h-f,2)),j=Math.sqrt(Math.pow(e-g,2)+Math.pow(k-f,2)),i=Math.atan2(h-f,i-g),h=Math.atan2(k-f,e-g),k=Math.PI/2+(i+h)/2,Math.abs(i-k)>Math.PI/2&&(k-=Math.PI),i=g+Math.cos(k)*b,h=f+Math.sin(k)*b,e=g+Math.cos(Math.PI+k)*j,k=f+Math.sin(Math.PI+k)*j,c.rightContX=e,c.rightContY=k;d?(c=[\"C\",a.rightContX||a.plotX,a.rightContY||a.plotY,i||g,h||f,g,f],a.rightContX=\na.rightContY=null):c=[\"M\",g,f]}else c=a.call(this,b,c,d);return c});o(y,\"translate\",function(a){a.call(this);if(this.chart.polar&&!this.preventPostTranslate)for(var a=this.points,b=a.length;b--;)this.toXY(a[b])});o(y,\"getSegmentPath\",function(a,b){var c=this.points;if(this.chart.polar&&this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this,b)});o(y,\"animate\",L);o(q,\"animate\",L);o(y,\"setTooltipPoints\",function(a,b){this.chart.polar&&\nF(this.xAxis,{tooltipLen:360});return a.call(this,b)});o(q,\"translate\",function(a){var b=this.xAxis,c=this.yAxis.len,d=b.center,g=b.startAngleRad,f=this.chart.renderer,e,h;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points;for(h=b.length;h--;)e=b[h],a=e.barX+g,e.shapeType=\"path\",e.shapeArgs={d:f.symbols.arc(d[0],d[1],c-e.plotY,null,{start:a,end:a+e.pointWidth,innerR:c-r(e.yBottom,c)})},this.toXY(e)}});o(q,\"alignDataLabel\",function(a,b,c,d,g,f){if(this.chart.polar){a=b.rectPlotX/\nMath.PI*180;if(d.align===null)d.align=a>20&&a<160?\"left\":a>200&&a<340?\"right\":\"center\";if(d.verticalAlign===null)d.verticalAlign=a<45||a>315?\"bottom\":a>135&&a<225?\"top\":\"middle\";y.alignDataLabel.call(this,b,c,d,g,f)}else a.call(this,b,c,d,g,f)});o(m,\"getIndex\",function(a,b){var c,d=this.chart,g;d.polar?(g=d.xAxis[0].center,c=b.chartX-g[0]-d.plotLeft,d=b.chartY-g[1]-d.plotTop,c=180-Math.round(Math.atan2(c,d)/Math.PI*180)):c=a.call(this,b);return c});o(m,\"getCoordinates\",function(a,b){var c=this.chart,\nd={xAxis:[],yAxis:[]};c.polar?s(c.axes,function(a){var f=a.isXAxis,e=a.center,h=b.chartX-e[0]-c.plotLeft,e=b.chartY-e[1]-c.plotTop;d[f?\"xAxis\":\"yAxis\"].push({axis:a,value:a.translate(f?Math.PI-Math.atan2(h,e):Math.sqrt(Math.pow(h,2)+Math.pow(e,2)),!0)})}):d=a.call(this,b);return d})})(Highcharts);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/highcharts-more.src.js",
    "content": "// ==ClosureCompiler==\n// @compilation_level SIMPLE_OPTIMIZATIONS\n\n/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n * (c) 2009-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts, HighchartsAdapter, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console */\n\n(function (Highcharts, UNDEFINED) {\nvar arrayMin = Highcharts.arrayMin,\n\tarrayMax = Highcharts.arrayMax,\n\teach = Highcharts.each,\n\textend = Highcharts.extend,\n\tmerge = Highcharts.merge,\n\tmap = Highcharts.map,\n\tpick = Highcharts.pick,\n\tpInt = Highcharts.pInt,\n\tdefaultPlotOptions = Highcharts.getOptions().plotOptions,\n\tseriesTypes = Highcharts.seriesTypes,\n\textendClass = Highcharts.extendClass,\n\tsplat = Highcharts.splat,\n\twrap = Highcharts.wrap,\n\tAxis = Highcharts.Axis,\n\tTick = Highcharts.Tick,\n\tSeries = Highcharts.Series,\n\tcolProto = seriesTypes.column.prototype,\n\tmath = Math,\n\tmathRound = math.round,\n\tmathFloor = math.floor,\n\tmathMax = math.max,\n\tnoop = function () {};/**\n * The Pane object allows options that are common to a set of X and Y axes.\n * \n * In the future, this can be extended to basic Highcharts and Highstock.\n */\nfunction Pane(options, chart, firstAxis) {\n\tthis.init.call(this, options, chart, firstAxis);\n}\n\n// Extend the Pane prototype\nextend(Pane.prototype, {\n\t\n\t/**\n\t * Initiate the Pane object\n\t */\n\tinit: function (options, chart, firstAxis) {\n\t\tvar pane = this,\n\t\t\tbackgroundOption,\n\t\t\tdefaultOptions = pane.defaultOptions;\n\t\t\n\t\tpane.chart = chart;\n\t\t\n\t\t// Set options\n\t\tif (chart.angular) { // gauges\n\t\t\tdefaultOptions.background = {}; // gets extended by this.defaultBackgroundOptions\n\t\t}\n\t\tpane.options = options = merge(defaultOptions, options);\n\t\t\n\t\tbackgroundOption = options.background;\n\t\t\n\t\t// To avoid having weighty logic to place, update and remove the backgrounds,\n\t\t// push them to the first axis' plot bands and borrow the existing logic there.\n\t\tif (backgroundOption) {\n\t\t\teach([].concat(splat(backgroundOption)).reverse(), function (config) {\n\t\t\t\tvar backgroundColor = config.backgroundColor; // if defined, replace the old one (specific for gradients)\n\t\t\t\tconfig = merge(pane.defaultBackgroundOptions, config);\n\t\t\t\tif (backgroundColor) {\n\t\t\t\t\tconfig.backgroundColor = backgroundColor;\n\t\t\t\t}\n\t\t\t\tconfig.color = config.backgroundColor; // due to naming in plotBands\n\t\t\t\tfirstAxis.options.plotBands.unshift(config);\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * The default options object\n\t */\n\tdefaultOptions: {\n\t\t// background: {conditional},\n\t\tcenter: ['50%', '50%'],\n\t\tsize: '85%',\n\t\tstartAngle: 0\n\t\t//endAngle: startAngle + 360\n\t},\t\n\t\n\t/**\n\t * The default background options\n\t */\n\tdefaultBackgroundOptions: {\n\t\tshape: 'circle',\n\t\tborderWidth: 1,\n\t\tborderColor: 'silver',\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#FFF'],\n\t\t\t\t[1, '#DDD']\n\t\t\t]\n\t\t},\n\t\tfrom: Number.MIN_VALUE, // corrected to axis min\n\t\tinnerRadius: 0,\n\t\tto: Number.MAX_VALUE, // corrected to axis max\n\t\touterRadius: '105%'\n\t}\n\t\n});\nvar axisProto = Axis.prototype,\n\ttickProto = Tick.prototype;\n\t\n/**\n * Augmented methods for the x axis in order to hide it completely, used for the X axis in gauges\n */\nvar hiddenAxisMixin = {\n\tgetOffset: noop,\n\tredraw: function () {\n\t\tthis.isDirty = false; // prevent setting Y axis dirty\n\t},\n\trender: function () {\n\t\tthis.isDirty = false; // prevent setting Y axis dirty\n\t},\n\tsetScale: noop,\n\tsetCategories: noop,\n\tsetTitle: noop\n};\n\n/**\n * Augmented methods for the value axis\n */\n/*jslint unparam: true*/\nvar radialAxisMixin = {\n\tisRadial: true,\n\t\n\t/**\n\t * The default options extend defaultYAxisOptions\n\t */\n\tdefaultRadialGaugeOptions: {\n\t\tlabels: {\n\t\t\talign: 'center',\n\t\t\tx: 0,\n\t\t\ty: null // auto\n\t\t},\n\t\tminorGridLineWidth: 0,\n\t\tminorTickInterval: 'auto',\n\t\tminorTickLength: 10,\n\t\tminorTickPosition: 'inside',\n\t\tminorTickWidth: 1,\n\t\tplotBands: [],\n\t\ttickLength: 10,\n\t\ttickPosition: 'inside',\n\t\ttickWidth: 2,\n\t\ttitle: {\n\t\t\trotation: 0\n\t\t},\n\t\tzIndex: 2 // behind dials, points in the series group\n\t},\n\t\n\t// Circular axis around the perimeter of a polar chart\n\tdefaultRadialXOptions: {\n\t\tgridLineWidth: 1, // spokes\n\t\tlabels: {\n\t\t\talign: null, // auto\n\t\t\tdistance: 15,\n\t\t\tx: 0,\n\t\t\ty: null // auto\n\t\t},\n\t\tmaxPadding: 0,\n\t\tminPadding: 0,\n\t\tplotBands: [],\n\t\tshowLastLabel: false, \n\t\ttickLength: 0\n\t},\n\t\n\t// Radial axis, like a spoke in a polar chart\n\tdefaultRadialYOptions: {\n\t\tgridLineInterpolation: 'circle',\n\t\tlabels: {\n\t\t\talign: 'right',\n\t\t\tx: -3,\n\t\t\ty: -2\n\t\t},\n\t\tplotBands: [],\n\t\tshowLastLabel: false,\n\t\ttitle: {\n\t\t\tx: 4,\n\t\t\ttext: null,\n\t\t\trotation: 90\n\t\t}\n\t},\n\t\n\t/**\n\t * Merge and set options\n\t */\n\tsetOptions: function (userOptions) {\n\t\t\n\t\tthis.options = merge(\n\t\t\tthis.defaultOptions,\n\t\t\tthis.defaultRadialOptions,\n\t\t\tuserOptions\n\t\t);\n\t\t\n\t},\n\t\n\t/**\n\t * Wrap the getOffset method to return zero offset for title or labels in a radial \n\t * axis\n\t */\n\tgetOffset: function () {\n\t\t// Call the Axis prototype method (the method we're in now is on the instance)\n\t\taxisProto.getOffset.call(this);\n\t\t\n\t\t// Title or label offsets are not counted\n\t\tthis.chart.axisOffset[this.side] = 0;\n\t},\n\n\n\t/**\n\t * Get the path for the axis line. This method is also referenced in the getPlotLinePath\n\t * method.\n\t */\n\tgetLinePath: function (lineWidth, radius) {\n\t\tvar center = this.center;\n\t\tradius = pick(radius, center[2] / 2 - this.offset);\n\t\t\n\t\treturn this.chart.renderer.symbols.arc(\n\t\t\tthis.left + center[0],\n\t\t\tthis.top + center[1],\n\t\t\tradius,\n\t\t\tradius, \n\t\t\t{\n\t\t\t\tstart: this.startAngleRad,\n\t\t\t\tend: this.endAngleRad,\n\t\t\t\topen: true,\n\t\t\t\tinnerR: 0\n\t\t\t}\n\t\t);\n\t},\n\n\t/**\n\t * Override setAxisTranslation by setting the translation to the difference\n\t * in rotation. This allows the translate method to return angle for \n\t * any given value.\n\t */\n\tsetAxisTranslation: function () {\n\t\t\n\t\t// Call uber method\t\t\n\t\taxisProto.setAxisTranslation.call(this);\n\t\t\t\n\t\t// Set transA and minPixelPadding\n\t\tif (this.center) { // it's not defined the first time\n\t\t\tif (this.isCircular) {\n\t\t\t\t\n\t\t\t\tthis.transA = (this.endAngleRad - this.startAngleRad) / \n\t\t\t\t\t((this.max - this.min) || 1);\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t} else { \n\t\t\t\tthis.transA = (this.center[2] / 2) / ((this.max - this.min) || 1);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.isXAxis) {\n\t\t\t\tthis.minPixelPadding = this.transA * this.minPointOffset +\n\t\t\t\t\t(this.reversed ? (this.endAngleRad - this.startAngleRad) / 4 : 0); // ???\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * In case of auto connect, add one closestPointRange to the max value right before\n\t * tickPositions are computed, so that ticks will extend passed the real max.\n\t */\n\tbeforeSetTickPositions: function () {\n\t\tif (this.autoConnect) {\n\t\t\tthis.max += (this.categories && 1) || this.pointRange || this.closestPointRange || 0; // #1197, #2260\n\t\t}\n\t},\n\t\n\t/**\n\t * Override the setAxisSize method to use the arc's circumference as length. This\n\t * allows tickPixelInterval to apply to pixel lengths along the perimeter\n\t */\n\tsetAxisSize: function () {\n\t\t\n\t\taxisProto.setAxisSize.call(this);\n\n\t\tif (this.isRadial) {\n\n\t\t\t// Set the center array\n\t\t\tthis.center = this.pane.center = seriesTypes.pie.prototype.getCenter.call(this.pane);\n\t\t\t\n\t\t\tthis.len = this.width = this.height = this.isCircular ?\n\t\t\t\tthis.center[2] * (this.endAngleRad - this.startAngleRad) / 2 :\n\t\t\t\tthis.center[2] / 2;\n\t\t}\n\t},\n\t\n\t/**\n\t * Returns the x, y coordinate of a point given by a value and a pixel distance\n\t * from center\n\t */\n\tgetPosition: function (value, length) {\n\t\tif (!this.isCircular) {\n\t\t\tlength = this.translate(value);\n\t\t\tvalue = this.min;\t\n\t\t}\n\t\t\n\t\treturn this.postTranslate(\n\t\t\tthis.translate(value),\n\t\t\tpick(length, this.center[2] / 2) - this.offset\n\t\t);\t\t\n\t},\n\t\n\t/**\n\t * Translate from intermediate plotX (angle), plotY (axis.len - radius) to final chart coordinates. \n\t */\n\tpostTranslate: function (angle, radius) {\n\t\t\n\t\tvar chart = this.chart,\n\t\t\tcenter = this.center;\n\t\t\t\n\t\tangle = this.startAngleRad + angle;\n\t\t\n\t\treturn {\n\t\t\tx: chart.plotLeft + center[0] + Math.cos(angle) * radius,\n\t\t\ty: chart.plotTop + center[1] + Math.sin(angle) * radius\n\t\t}; \n\t\t\n\t},\n\t\n\t/**\n\t * Find the path for plot bands along the radial axis\n\t */\n\tgetPlotBandPath: function (from, to, options) {\n\t\tvar center = this.center,\n\t\t\tstartAngleRad = this.startAngleRad,\n\t\t\tfullRadius = center[2] / 2,\n\t\t\tradii = [\n\t\t\t\tpick(options.outerRadius, '100%'),\n\t\t\t\toptions.innerRadius,\n\t\t\t\tpick(options.thickness, 10)\n\t\t\t],\n\t\t\tpercentRegex = /%$/,\n\t\t\tstart,\n\t\t\tend,\n\t\t\topen,\n\t\t\tisCircular = this.isCircular, // X axis in a polar chart\n\t\t\tret;\n\t\t\t\n\t\t// Polygonal plot bands\n\t\tif (this.options.gridLineInterpolation === 'polygon') {\n\t\t\tret = this.getPlotLinePath(from).concat(this.getPlotLinePath(to, true));\n\t\t\n\t\t// Circular grid bands\n\t\t} else {\n\t\t\t\n\t\t\t// Plot bands on Y axis (radial axis) - inner and outer radius depend on to and from\n\t\t\tif (!isCircular) {\n\t\t\t\tradii[0] = this.translate(from);\n\t\t\t\tradii[1] = this.translate(to);\n\t\t\t}\n\t\t\t\n\t\t\t// Convert percentages to pixel values\n\t\t\tradii = map(radii, function (radius) {\n\t\t\t\tif (percentRegex.test(radius)) {\n\t\t\t\t\tradius = (pInt(radius, 10) * fullRadius) / 100;\n\t\t\t\t}\n\t\t\t\treturn radius;\n\t\t\t});\n\t\t\t\n\t\t\t// Handle full circle\n\t\t\tif (options.shape === 'circle' || !isCircular) {\n\t\t\t\tstart = -Math.PI / 2;\n\t\t\t\tend = Math.PI * 1.5;\n\t\t\t\topen = true;\n\t\t\t} else {\n\t\t\t\tstart = startAngleRad + this.translate(from);\n\t\t\t\tend = startAngleRad + this.translate(to);\n\t\t\t}\n\t\t\n\t\t\n\t\t\tret = this.chart.renderer.symbols.arc(\n\t\t\t\tthis.left + center[0],\n\t\t\t\tthis.top + center[1],\n\t\t\t\tradii[0],\n\t\t\t\tradii[0],\n\t\t\t\t{\n\t\t\t\t\tstart: start,\n\t\t\t\t\tend: end,\n\t\t\t\t\tinnerR: pick(radii[1], radii[0] - radii[2]),\n\t\t\t\t\topen: open\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\t \n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Find the path for plot lines perpendicular to the radial axis.\n\t */\n\tgetPlotLinePath: function (value, reverse) {\n\t\tvar axis = this,\n\t\t\tcenter = axis.center,\n\t\t\tchart = axis.chart,\n\t\t\tend = axis.getPosition(value),\n\t\t\txAxis,\n\t\t\txy,\n\t\t\ttickPositions,\n\t\t\tret;\n\t\t\n\t\t// Spokes\n\t\tif (axis.isCircular) {\n\t\t\tret = ['M', center[0] + chart.plotLeft, center[1] + chart.plotTop, 'L', end.x, end.y];\n\t\t\n\t\t// Concentric circles\t\t\t\n\t\t} else if (axis.options.gridLineInterpolation === 'circle') {\n\t\t\tvalue = axis.translate(value);\n\t\t\tif (value) { // a value of 0 is in the center\n\t\t\t\tret = axis.getLinePath(0, value);\n\t\t\t}\n\t\t// Concentric polygons \n\t\t} else {\n\t\t\txAxis = chart.xAxis[0];\n\t\t\tret = [];\n\t\t\tvalue = axis.translate(value);\n\t\t\ttickPositions = xAxis.tickPositions;\n\t\t\tif (xAxis.autoConnect) {\n\t\t\t\ttickPositions = tickPositions.concat([tickPositions[0]]);\n\t\t\t}\n\t\t\t// Reverse the positions for concatenation of polygonal plot bands\n\t\t\tif (reverse) {\n\t\t\t\ttickPositions = [].concat(tickPositions).reverse();\n\t\t\t}\n\t\t\t\t\n\t\t\teach(tickPositions, function (pos, i) {\n\t\t\t\txy = xAxis.getPosition(pos, value);\n\t\t\t\tret.push(i ? 'L' : 'M', xy.x, xy.y);\n\t\t\t});\n\t\t\t\n\t\t}\n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Find the position for the axis title, by default inside the gauge\n\t */\n\tgetTitlePosition: function () {\n\t\tvar center = this.center,\n\t\t\tchart = this.chart,\n\t\t\ttitleOptions = this.options.title;\n\t\t\n\t\treturn { \n\t\t\tx: chart.plotLeft + center[0] + (titleOptions.x || 0), \n\t\t\ty: chart.plotTop + center[1] - ({ high: 0.5, middle: 0.25, low: 0 }[titleOptions.align] * \n\t\t\t\tcenter[2]) + (titleOptions.y || 0)  \n\t\t};\n\t}\n\t\n};\n/*jslint unparam: false*/\n\n/**\n * Override axisProto.init to mix in special axis instance functions and function overrides\n */\nwrap(axisProto, 'init', function (proceed, chart, userOptions) {\n\tvar axis = this,\n\t\tangular = chart.angular,\n\t\tpolar = chart.polar,\n\t\tisX = userOptions.isX,\n\t\tisHidden = angular && isX,\n\t\tisCircular,\n\t\tstartAngleRad,\n\t\tendAngleRad,\n\t\toptions,\n\t\tchartOptions = chart.options,\n\t\tpaneIndex = userOptions.pane || 0,\n\t\tpane,\n\t\tpaneOptions;\n\t\t\n\t// Before prototype.init\n\tif (angular) {\n\t\textend(this, isHidden ? hiddenAxisMixin : radialAxisMixin);\n\t\tisCircular =  !isX;\n\t\tif (isCircular) {\n\t\t\tthis.defaultRadialOptions = this.defaultRadialGaugeOptions;\n\t\t}\n\t\t\n\t} else if (polar) {\n\t\t//extend(this, userOptions.isX ? radialAxisMixin : radialAxisMixin);\n\t\textend(this, radialAxisMixin);\n\t\tisCircular = isX;\n\t\tthis.defaultRadialOptions = isX ? this.defaultRadialXOptions : merge(this.defaultYAxisOptions, this.defaultRadialYOptions);\n\t\t\n\t}\n\t\n\t// Run prototype.init\n\tproceed.call(this, chart, userOptions);\n\t\n\tif (!isHidden && (angular || polar)) {\n\t\toptions = this.options;\n\t\t\n\t\t// Create the pane and set the pane options.\n\t\tif (!chart.panes) {\n\t\t\tchart.panes = [];\n\t\t}\n\t\tthis.pane = pane = chart.panes[paneIndex] = chart.panes[paneIndex] || new Pane(\n\t\t\tsplat(chartOptions.pane)[paneIndex],\n\t\t\tchart,\n\t\t\taxis\n\t\t);\n\t\tpaneOptions = pane.options;\n\t\t\n\t\t\t\n\t\t// Disable certain features on angular and polar axes\n\t\tchart.inverted = false;\n\t\tchartOptions.chart.zoomType = null;\n\t\t\n\t\t// Start and end angle options are\n\t\t// given in degrees relative to top, while internal computations are\n\t\t// in radians relative to right (like SVG).\n\t\tthis.startAngleRad = startAngleRad = (paneOptions.startAngle - 90) * Math.PI / 180;\n\t\tthis.endAngleRad = endAngleRad = (pick(paneOptions.endAngle, paneOptions.startAngle + 360)  - 90) * Math.PI / 180;\n\t\tthis.offset = options.offset || 0;\n\t\t\n\t\tthis.isCircular = isCircular;\n\t\t\n\t\t// Automatically connect grid lines?\n\t\tif (isCircular && userOptions.max === UNDEFINED && endAngleRad - startAngleRad === 2 * Math.PI) {\n\t\t\tthis.autoConnect = true;\n\t\t}\n\t}\n\t\n});\n\n/**\n * Add special cases within the Tick class' methods for radial axes.\n */\t\nwrap(tickProto, 'getPosition', function (proceed, horiz, pos, tickmarkOffset, old) {\n\tvar axis = this.axis;\n\t\n\treturn axis.getPosition ? \n\t\taxis.getPosition(pos) :\n\t\tproceed.call(this, horiz, pos, tickmarkOffset, old);\t\n});\n\n/**\n * Wrap the getLabelPosition function to find the center position of the label\n * based on the distance option\n */\t\nwrap(tickProto, 'getLabelPosition', function (proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {\n\tvar axis = this.axis,\n\t\toptionsY = labelOptions.y,\n\t\tret,\n\t\talign = labelOptions.align,\n\t\tangle = ((axis.translate(this.pos) + axis.startAngleRad + Math.PI / 2) / Math.PI * 180) % 360;\n\t\n\tif (axis.isRadial) {\n\t\tret = axis.getPosition(this.pos, (axis.center[2] / 2) + pick(labelOptions.distance, -25));\n\t\t\n\t\t// Automatically rotated\n\t\tif (labelOptions.rotation === 'auto') {\n\t\t\tlabel.attr({ \n\t\t\t\trotation: angle\n\t\t\t});\n\t\t\n\t\t// Vertically centered\n\t\t} else if (optionsY === null) {\n\t\t\toptionsY = pInt(label.styles.lineHeight) * 0.9 - label.getBBox().height / 2;\n\t\t\n\t\t}\n\t\t\n\t\t// Automatic alignment\n\t\tif (align === null) {\n\t\t\tif (axis.isCircular) {\n\t\t\t\tif (angle > 20 && angle < 160) {\n\t\t\t\t\talign = 'left'; // right hemisphere\n\t\t\t\t} else if (angle > 200 && angle < 340) {\n\t\t\t\t\talign = 'right'; // left hemisphere\n\t\t\t\t} else {\n\t\t\t\t\talign = 'center'; // top or bottom\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\talign = 'center';\n\t\t\t}\n\t\t\tlabel.attr({\n\t\t\t\talign: align\n\t\t\t});\n\t\t}\n\t\t\n\t\tret.x += labelOptions.x;\n\t\tret.y += optionsY;\n\t\t\n\t} else {\n\t\tret = proceed.call(this, x, y, label, horiz, labelOptions, tickmarkOffset, index, step);\n\t}\n\treturn ret;\n});\n\n/**\n * Wrap the getMarkPath function to return the path of the radial marker\n */\nwrap(tickProto, 'getMarkPath', function (proceed, x, y, tickLength, tickWidth, horiz, renderer) {\n\tvar axis = this.axis,\n\t\tendPoint,\n\t\tret;\n\t\t\n\tif (axis.isRadial) {\n\t\tendPoint = axis.getPosition(this.pos, axis.center[2] / 2 + tickLength);\n\t\tret = [\n\t\t\t'M',\n\t\t\tx,\n\t\t\ty,\n\t\t\t'L',\n\t\t\tendPoint.x,\n\t\t\tendPoint.y\n\t\t];\n\t} else {\n\t\tret = proceed.call(this, x, y, tickLength, tickWidth, horiz, renderer);\n\t}\n\treturn ret;\n});/* \n * The AreaRangeSeries class\n * \n */\n\n/**\n * Extend the default options with map options\n */\ndefaultPlotOptions.arearange = merge(defaultPlotOptions.area, {\n\tlineWidth: 1,\n\tmarker: null,\n\tthreshold: null,\n\ttooltip: {\n\t\tpointFormat: '<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>' \n\t},\n\ttrackByArea: true,\n\tdataLabels: {\n\t\tverticalAlign: null,\n\t\txLow: 0,\n\t\txHigh: 0,\n\t\tyLow: 0,\n\t\tyHigh: 0\t\n\t}\n});\n\n/**\n * Add the series type\n */\nseriesTypes.arearange = Highcharts.extendClass(seriesTypes.area, {\n\ttype: 'arearange',\n\tpointArrayMap: ['low', 'high'],\n\ttoYData: function (point) {\n\t\treturn [point.low, point.high];\n\t},\n\tpointValKey: 'low',\n\t\n\t/**\n\t * Extend getSegments to force null points if the higher value is null. #1703.\n\t */\n\tgetSegments: function () {\n\t\tvar series = this;\n\n\t\teach(series.points, function (point) {\n\t\t\tif (!series.options.connectNulls && (point.low === null || point.high === null)) {\n\t\t\t\tpoint.y = null;\n\t\t\t} else if (point.low === null && point.high !== null) {\n\t\t\t\tpoint.y = point.high;\n\t\t\t}\n\t\t});\n\t\tSeries.prototype.getSegments.call(this);\n\t},\n\t\n\t/**\n\t * Translate data points from raw values x and y to plotX and plotY\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis;\n\n\t\tseriesTypes.area.prototype.translate.apply(series);\n\n\t\t// Set plotLow and plotHigh\n\t\teach(series.points, function (point) {\n\n\t\t\tvar low = point.low,\n\t\t\t\thigh = point.high,\n\t\t\t\tplotY = point.plotY;\n\n\t\t\tif (high === null && low === null) {\n\t\t\t\tpoint.y = null;\n\t\t\t} else if (low === null) {\n\t\t\t\tpoint.plotLow = point.plotY = null;\n\t\t\t\tpoint.plotHigh = yAxis.translate(high, 0, 1, 0, 1);\n\t\t\t} else if (high === null) {\n\t\t\t\tpoint.plotLow = plotY;\n\t\t\t\tpoint.plotHigh = null;\n\t\t\t} else {\n\t\t\t\tpoint.plotLow = plotY;\n\t\t\t\tpoint.plotHigh = yAxis.translate(high, 0, 1, 0, 1);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Extend the line series' getSegmentPath method by applying the segment\n\t * path to both lower and higher values of the range\n\t */\n\tgetSegmentPath: function (segment) {\n\t\t\n\t\tvar lowSegment,\n\t\t\thighSegment = [],\n\t\t\ti = segment.length,\n\t\t\tbaseGetSegmentPath = Series.prototype.getSegmentPath,\n\t\t\tpoint,\n\t\t\tlinePath,\n\t\t\tlowerPath,\n\t\t\toptions = this.options,\n\t\t\tstep = options.step,\n\t\t\thigherPath;\n\t\t\t\n\t\t// Remove nulls from low segment\n\t\tlowSegment = HighchartsAdapter.grep(segment, function (point) {\n\t\t\treturn point.plotLow !== null;\n\t\t});\n\t\t\n\t\t// Make a segment with plotX and plotY for the top values\n\t\twhile (i--) {\n\t\t\tpoint = segment[i];\n\t\t\tif (point.plotHigh !== null) {\n\t\t\t\thighSegment.push({\n\t\t\t\t\tplotX: point.plotX,\n\t\t\t\t\tplotY: point.plotHigh\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Get the paths\n\t\tlowerPath = baseGetSegmentPath.call(this, lowSegment);\n\t\tif (step) {\n\t\t\tif (step === true) {\n\t\t\t\tstep = 'left';\n\t\t\t}\n\t\t\toptions.step = { left: 'right', center: 'center', right: 'left' }[step]; // swap for reading in getSegmentPath\n\t\t}\n\t\thigherPath = baseGetSegmentPath.call(this, highSegment);\n\t\toptions.step = step;\n\t\t\n\t\t// Create a line on both top and bottom of the range\n\t\tlinePath = [].concat(lowerPath, higherPath);\n\t\t\n\t\t// For the area path, we need to change the 'move' statement into 'lineTo' or 'curveTo'\n\t\thigherPath[0] = 'L'; // this probably doesn't work for spline\t\t\t\n\t\tthis.areaPath = this.areaPath.concat(lowerPath, higherPath);\n\t\t\n\t\treturn linePath;\n\t},\n\t\n\t/**\n\t * Extend the basic drawDataLabels method by running it for both lower and higher\n\t * values.\n\t */\n\tdrawDataLabels: function () {\n\t\t\n\t\tvar data = this.data,\n\t\t\tlength = data.length,\n\t\t\ti,\n\t\t\toriginalDataLabels = [],\n\t\t\tseriesProto = Series.prototype,\n\t\t\tdataLabelOptions = this.options.dataLabels,\n\t\t\tpoint,\n\t\t\tinverted = this.chart.inverted;\n\t\t\t\n\t\tif (dataLabelOptions.enabled || this._hasPointLabels) {\n\t\t\t\n\t\t\t// Step 1: set preliminary values for plotY and dataLabel and draw the upper labels\n\t\t\ti = length;\n\t\t\twhile (i--) {\n\t\t\t\tpoint = data[i];\n\t\t\t\t\n\t\t\t\t// Set preliminary values\n\t\t\t\tpoint.y = point.high;\n\t\t\t\tpoint.plotY = point.plotHigh;\n\t\t\t\t\n\t\t\t\t// Store original data labels and set preliminary label objects to be picked up \n\t\t\t\t// in the uber method\n\t\t\t\toriginalDataLabels[i] = point.dataLabel;\n\t\t\t\tpoint.dataLabel = point.dataLabelUpper;\n\t\t\t\t\n\t\t\t\t// Set the default offset\n\t\t\t\tpoint.below = false;\n\t\t\t\tif (inverted) {\n\t\t\t\t\tdataLabelOptions.align = 'left';\n\t\t\t\t\tdataLabelOptions.x = dataLabelOptions.xHigh;\t\t\t\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tdataLabelOptions.y = dataLabelOptions.yHigh;\n\t\t\t\t}\n\t\t\t}\n\t\t\tseriesProto.drawDataLabels.apply(this, arguments); // #1209\n\t\t\t\n\t\t\t// Step 2: reorganize and handle data labels for the lower values\n\t\t\ti = length;\n\t\t\twhile (i--) {\n\t\t\t\tpoint = data[i];\n\t\t\t\t\n\t\t\t\t// Move the generated labels from step 1, and reassign the original data labels\n\t\t\t\tpoint.dataLabelUpper = point.dataLabel;\n\t\t\t\tpoint.dataLabel = originalDataLabels[i];\n\t\t\t\t\n\t\t\t\t// Reset values\n\t\t\t\tpoint.y = point.low;\n\t\t\t\tpoint.plotY = point.plotLow;\n\t\t\t\t\n\t\t\t\t// Set the default offset\n\t\t\t\tpoint.below = true;\n\t\t\t\tif (inverted) {\n\t\t\t\t\tdataLabelOptions.align = 'right';\n\t\t\t\t\tdataLabelOptions.x = dataLabelOptions.xLow;\n\t\t\t\t} else {\n\t\t\t\t\tdataLabelOptions.y = dataLabelOptions.yLow;\n\t\t\t\t}\n\t\t\t}\n\t\t\tseriesProto.drawDataLabels.apply(this, arguments);\n\t\t}\n\t\n\t},\n\t\n\talignDataLabel: seriesTypes.column.prototype.alignDataLabel,\n\t\n\tgetSymbol: seriesTypes.column.prototype.getSymbol,\n\t\n\tdrawPoints: noop\n});/**\n * The AreaSplineRangeSeries class\n */\n\ndefaultPlotOptions.areasplinerange = merge(defaultPlotOptions.arearange);\n\n/**\n * AreaSplineRangeSeries object\n */\nseriesTypes.areasplinerange = extendClass(seriesTypes.arearange, {\n\ttype: 'areasplinerange',\n\tgetPointSpline: seriesTypes.spline.prototype.getPointSpline\n});/**\n * The ColumnRangeSeries class\n */\ndefaultPlotOptions.columnrange = merge(defaultPlotOptions.column, defaultPlotOptions.arearange, {\n\tlineWidth: 1,\n\tpointRange: null\n});\n\n/**\n * ColumnRangeSeries object\n */\nseriesTypes.columnrange = extendClass(seriesTypes.arearange, {\n\ttype: 'columnrange',\n\t/**\n\t * Translate data points from raw values x and y to plotX and plotY\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis,\n\t\t\tplotHigh;\n\n\t\tcolProto.translate.apply(series);\n\n\t\t// Set plotLow and plotHigh\n\t\teach(series.points, function (point) {\n\t\t\tvar shapeArgs = point.shapeArgs,\n\t\t\t\tminPointLength = series.options.minPointLength,\n\t\t\t\theightDifference,\n\t\t\t\theight,\n\t\t\t\ty;\n\n\t\t\tpoint.plotHigh = plotHigh = yAxis.translate(point.high, 0, 1, 0, 1);\n\t\t\tpoint.plotLow = point.plotY;\n\n\t\t\t// adjust shape\n\t\t\ty = plotHigh;\n\t\t\theight = point.plotY - plotHigh;\n\n\t\t\tif (height < minPointLength) {\n\t\t\t\theightDifference = (minPointLength - height);\n\t\t\t\theight += heightDifference;\n\t\t\t\ty -= heightDifference / 2;\n\t\t\t}\n\t\t\tshapeArgs.height = height;\n\t\t\tshapeArgs.y = y;\n\t\t});\n\t},\n\ttrackerGroups: ['group', 'dataLabels'],\n\tdrawGraph: noop,\n\tpointAttrToOptions: colProto.pointAttrToOptions,\n\tdrawPoints: colProto.drawPoints,\n\tdrawTracker: colProto.drawTracker,\n\tanimate: colProto.animate,\n\tgetColumnMetrics: colProto.getColumnMetrics\n});\n/* \n * The GaugeSeries class\n */\n\n\n\n/**\n * Extend the default options\n */\ndefaultPlotOptions.gauge = merge(defaultPlotOptions.line, {\n\tdataLabels: {\n\t\tenabled: true,\n\t\ty: 15,\n\t\tborderWidth: 1,\n\t\tborderColor: 'silver',\n\t\tborderRadius: 3,\n\t\tstyle: {\n\t\t\tfontWeight: 'bold'\n\t\t},\n\t\tverticalAlign: 'top',\n\t\tzIndex: 2\n\t},\n\tdial: {\n\t\t// radius: '80%',\n\t\t// backgroundColor: 'black',\n\t\t// borderColor: 'silver',\n\t\t// borderWidth: 0,\n\t\t// baseWidth: 3,\n\t\t// topWidth: 1,\n\t\t// baseLength: '70%' // of radius\n\t\t// rearLength: '10%'\n\t},\n\tpivot: {\n\t\t//radius: 5,\n\t\t//borderWidth: 0\n\t\t//borderColor: 'silver',\n\t\t//backgroundColor: 'black'\n\t},\n\ttooltip: {\n\t\theaderFormat: ''\n\t},\n\tshowInLegend: false\n});\n\n/**\n * Extend the point object\n */\nvar GaugePoint = Highcharts.extendClass(Highcharts.Point, {\n\t/**\n\t * Don't do any hover colors or anything\n\t */\n\tsetState: function (state) {\n\t\tthis.state = state;\n\t}\n});\n\n\n/**\n * Add the series type\n */\nvar GaugeSeries = {\n\ttype: 'gauge',\n\tpointClass: GaugePoint,\n\t\n\t// chart.angular will be set to true when a gauge series is present, and this will\n\t// be used on the axes\n\tangular: true, \n\tdrawGraph: noop,\n\tfixedBox: true,\n\ttrackerGroups: ['group', 'dataLabels'],\n\t\n\t/**\n\t * Calculate paths etc\n\t */\n\ttranslate: function () {\n\t\t\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis,\n\t\t\toptions = series.options,\n\t\t\tcenter = yAxis.center;\n\t\t\t\n\t\tseries.generatePoints();\n\t\t\n\t\teach(series.points, function (point) {\n\t\t\t\n\t\t\tvar dialOptions = merge(options.dial, point.dial),\n\t\t\t\tradius = (pInt(pick(dialOptions.radius, 80)) * center[2]) / 200,\n\t\t\t\tbaseLength = (pInt(pick(dialOptions.baseLength, 70)) * radius) / 100,\n\t\t\t\trearLength = (pInt(pick(dialOptions.rearLength, 10)) * radius) / 100,\n\t\t\t\tbaseWidth = dialOptions.baseWidth || 3,\n\t\t\t\ttopWidth = dialOptions.topWidth || 1,\n\t\t\t\trotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true);\n\n\t\t\t// Handle the wrap option\n\t\t\tif (options.wrap === false) {\n\t\t\t\trotation = Math.max(yAxis.startAngleRad, Math.min(yAxis.endAngleRad, rotation));\n\t\t\t}\n\t\t\trotation = rotation * 180 / Math.PI;\n\t\t\t\t\n\t\t\tpoint.shapeType = 'path';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\td: dialOptions.path || [\n\t\t\t\t\t'M', \n\t\t\t\t\t-rearLength, -baseWidth / 2, \n\t\t\t\t\t'L', \n\t\t\t\t\tbaseLength, -baseWidth / 2,\n\t\t\t\t\tradius, -topWidth / 2,\n\t\t\t\t\tradius, topWidth / 2,\n\t\t\t\t\tbaseLength, baseWidth / 2,\n\t\t\t\t\t-rearLength, baseWidth / 2,\n\t\t\t\t\t'z'\n\t\t\t\t],\n\t\t\t\ttranslateX: center[0],\n\t\t\t\ttranslateY: center[1],\n\t\t\t\trotation: rotation\n\t\t\t};\n\t\t\t\n\t\t\t// Positions for data label\n\t\t\tpoint.plotX = center[0];\n\t\t\tpoint.plotY = center[1];\n\t\t});\n\t},\n\t\n\t/**\n\t * Draw the points where each point is one needle\n\t */\n\tdrawPoints: function () {\n\t\t\n\t\tvar series = this,\n\t\t\tcenter = series.yAxis.center,\n\t\t\tpivot = series.pivot,\n\t\t\toptions = series.options,\n\t\t\tpivotOptions = options.pivot,\n\t\t\trenderer = series.chart.renderer;\n\t\t\n\t\teach(series.points, function (point) {\n\t\t\t\n\t\t\tvar graphic = point.graphic,\n\t\t\t\tshapeArgs = point.shapeArgs,\n\t\t\t\td = shapeArgs.d,\n\t\t\t\tdialOptions = merge(options.dial, point.dial); // #1233\n\t\t\t\n\t\t\tif (graphic) {\n\t\t\t\tgraphic.animate(shapeArgs);\n\t\t\t\tshapeArgs.d = d; // animate alters it\n\t\t\t} else {\n\t\t\t\tpoint.graphic = renderer[point.shapeType](shapeArgs)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tstroke: dialOptions.borderColor || 'none',\n\t\t\t\t\t\t'stroke-width': dialOptions.borderWidth || 0,\n\t\t\t\t\t\tfill: dialOptions.backgroundColor || 'black',\n\t\t\t\t\t\trotation: shapeArgs.rotation // required by VML when animation is false\n\t\t\t\t\t})\n\t\t\t\t\t.add(series.group);\n\t\t\t}\n\t\t});\n\t\t\n\t\t// Add or move the pivot\n\t\tif (pivot) {\n\t\t\tpivot.animate({ // #1235\n\t\t\t\ttranslateX: center[0],\n\t\t\t\ttranslateY: center[1]\n\t\t\t});\n\t\t} else {\n\t\t\tseries.pivot = renderer.circle(0, 0, pick(pivotOptions.radius, 5))\n\t\t\t\t.attr({\n\t\t\t\t\t'stroke-width': pivotOptions.borderWidth || 0,\n\t\t\t\t\tstroke: pivotOptions.borderColor || 'silver',\n\t\t\t\t\tfill: pivotOptions.backgroundColor || 'black'\n\t\t\t\t})\n\t\t\t\t.translate(center[0], center[1])\n\t\t\t\t.add(series.group);\n\t\t}\n\t},\n\t\n\t/**\n\t * Animate the arrow up from startAngle\n\t */\n\tanimate: function (init) {\n\t\tvar series = this;\n\n\t\tif (!init) {\n\t\t\teach(series.points, function (point) {\n\t\t\t\tvar graphic = point.graphic;\n\n\t\t\t\tif (graphic) {\n\t\t\t\t\t// start value\n\t\t\t\t\tgraphic.attr({\n\t\t\t\t\t\trotation: series.yAxis.startAngleRad * 180 / Math.PI\n\t\t\t\t\t});\n\n\t\t\t\t\t// animate\n\t\t\t\t\tgraphic.animate({\n\t\t\t\t\t\trotation: point.shapeArgs.rotation\n\t\t\t\t\t}, series.options.animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// delete this function to allow it only once\n\t\t\tseries.animate = null;\n\t\t}\n\t},\n\t\n\trender: function () {\n\t\tthis.group = this.plotGroup(\n\t\t\t'group', \n\t\t\t'series', \n\t\t\tthis.visible ? 'visible' : 'hidden', \n\t\t\tthis.options.zIndex, \n\t\t\tthis.chart.seriesGroup\n\t\t);\n\t\tseriesTypes.pie.prototype.render.call(this);\n\t\tthis.group.clip(this.chart.clipRect);\n\t},\n\t\n\tsetData: seriesTypes.pie.prototype.setData,\n\tdrawTracker: seriesTypes.column.prototype.drawTracker\n};\nseriesTypes.gauge = Highcharts.extendClass(seriesTypes.line, GaugeSeries);/* ****************************************************************************\n * Start Box plot series code\t\t\t\t\t\t\t\t\t\t\t      *\n *****************************************************************************/\n\n// Set default options\ndefaultPlotOptions.boxplot = merge(defaultPlotOptions.column, {\n\tfillColor: '#FFFFFF',\n\tlineWidth: 1,\n\t//medianColor: null,\n\tmedianWidth: 2,\n\tstates: {\n\t\thover: {\n\t\t\tbrightness: -0.3\n\t\t}\n\t},\n\t//stemColor: null,\n\t//stemDashStyle: 'solid'\n\t//stemWidth: null,\n\tthreshold: null,\n\ttooltip: {\n\t\tpointFormat: '<span style=\"color:{series.color};font-weight:bold\">{series.name}</span><br/>' +\n\t\t\t'Maximum: {point.high}<br/>' +\n\t\t\t'Upper quartile: {point.q3}<br/>' +\n\t\t\t'Median: {point.median}<br/>' +\n\t\t\t'Lower quartile: {point.q1}<br/>' +\n\t\t\t'Minimum: {point.low}<br/>'\n\t\t\t\n\t},\n\t//whiskerColor: null,\n\twhiskerLength: '50%',\n\twhiskerWidth: 2\n});\n\n// Create the series object\nseriesTypes.boxplot = extendClass(seriesTypes.column, {\n\ttype: 'boxplot',\n\tpointArrayMap: ['low', 'q1', 'median', 'q3', 'high'], // array point configs are mapped to this\n\ttoYData: function (point) { // return a plain array for speedy calculation\n\t\treturn [point.low, point.q1, point.median, point.q3, point.high];\n\t},\n\tpointValKey: 'high', // defines the top of the tracker\n\t\n\t/**\n\t * One-to-one mapping from options to SVG attributes\n\t */\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tfill: 'fillColor',\n\t\tstroke: 'color',\n\t\t'stroke-width': 'lineWidth'\n\t},\n\t\n\t/**\n\t * Disable data labels for box plot\n\t */\n\tdrawDataLabels: noop,\n\n\t/**\n\t * Translate data points from raw values x and y to plotX and plotY\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis,\n\t\t\tpointArrayMap = series.pointArrayMap;\n\n\t\tseriesTypes.column.prototype.translate.apply(series);\n\n\t\t// do the translation on each point dimension\n\t\teach(series.points, function (point) {\n\t\t\teach(pointArrayMap, function (key) {\n\t\t\t\tif (point[key] !== null) {\n\t\t\t\t\tpoint[key + 'Plot'] = yAxis.translate(point[key], 0, 1, 0, 1);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n\t * Draw the data points\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,  //state = series.state,\n\t\t\tpoints = series.points,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tpointAttr,\n\t\t\tq1Plot,\n\t\t\tq3Plot,\n\t\t\thighPlot,\n\t\t\tlowPlot,\n\t\t\tmedianPlot,\n\t\t\tcrispCorr,\n\t\t\tcrispX,\n\t\t\tgraphic,\n\t\t\tstemPath,\n\t\t\tstemAttr,\n\t\t\tboxPath,\n\t\t\twhiskersPath,\n\t\t\twhiskersAttr,\n\t\t\tmedianPath,\n\t\t\tmedianAttr,\n\t\t\twidth,\n\t\t\tleft,\n\t\t\tright,\n\t\t\thalfWidth,\n\t\t\tshapeArgs,\n\t\t\tcolor,\n\t\t\tdoQuartiles = series.doQuartiles !== false, // error bar inherits this series type but doesn't do quartiles\n\t\t\twhiskerLength = parseInt(series.options.whiskerLength, 10) / 100;\n\n\n\t\teach(points, function (point) {\n\n\t\t\tgraphic = point.graphic;\n\t\t\tshapeArgs = point.shapeArgs; // the box\n\t\t\tstemAttr = {};\n\t\t\twhiskersAttr = {};\n\t\t\tmedianAttr = {};\n\t\t\tcolor = point.color || series.color;\n\t\t\t\n\t\t\tif (point.plotY !== UNDEFINED) {\n\n\t\t\t\tpointAttr = point.pointAttr[point.selected ? 'selected' : ''];\n\n\t\t\t\t// crisp vector coordinates\n\t\t\t\twidth = shapeArgs.width;\n\t\t\t\tleft = mathFloor(shapeArgs.x);\n\t\t\t\tright = left + width;\n\t\t\t\thalfWidth = mathRound(width / 2);\n\t\t\t\t//crispX = mathRound(left + halfWidth) + crispCorr;\n\t\t\t\tq1Plot = mathFloor(doQuartiles ? point.q1Plot : point.lowPlot);// + crispCorr;\n\t\t\t\tq3Plot = mathFloor(doQuartiles ? point.q3Plot : point.lowPlot);// + crispCorr;\n\t\t\t\thighPlot = mathFloor(point.highPlot);// + crispCorr;\n\t\t\t\tlowPlot = mathFloor(point.lowPlot);// + crispCorr;\n\t\t\t\t\n\t\t\t\t// Stem attributes\n\t\t\t\tstemAttr.stroke = point.stemColor || options.stemColor || color;\n\t\t\t\tstemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth);\n\t\t\t\tstemAttr.dashstyle = point.stemDashStyle || options.stemDashStyle;\n\t\t\t\t\n\t\t\t\t// Whiskers attributes\n\t\t\t\twhiskersAttr.stroke = point.whiskerColor || options.whiskerColor || color;\n\t\t\t\twhiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth);\n\t\t\t\t\n\t\t\t\t// Median attributes\n\t\t\t\tmedianAttr.stroke = point.medianColor || options.medianColor || color;\n\t\t\t\tmedianAttr['stroke-width'] = pick(point.medianWidth, options.medianWidth, options.lineWidth);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// The stem\n\t\t\t\tcrispCorr = (stemAttr['stroke-width'] % 2) / 2;\n\t\t\t\tcrispX = left + halfWidth + crispCorr;\t\t\t\t\n\t\t\t\tstemPath = [\n\t\t\t\t\t// stem up\n\t\t\t\t\t'M',\n\t\t\t\t\tcrispX, q3Plot,\n\t\t\t\t\t'L',\n\t\t\t\t\tcrispX, highPlot,\n\t\t\t\t\t\n\t\t\t\t\t// stem down\n\t\t\t\t\t'M',\n\t\t\t\t\tcrispX, q1Plot,\n\t\t\t\t\t'L',\n\t\t\t\t\tcrispX, lowPlot,\n\t\t\t\t\t'z'\n\t\t\t\t];\n\t\t\t\t\n\t\t\t\t// The box\n\t\t\t\tif (doQuartiles) {\n\t\t\t\t\tcrispCorr = (pointAttr['stroke-width'] % 2) / 2;\n\t\t\t\t\tcrispX = mathFloor(crispX) + crispCorr;\n\t\t\t\t\tq1Plot = mathFloor(q1Plot) + crispCorr;\n\t\t\t\t\tq3Plot = mathFloor(q3Plot) + crispCorr;\n\t\t\t\t\tleft += crispCorr;\n\t\t\t\t\tright += crispCorr;\n\t\t\t\t\tboxPath = [\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\tleft, q3Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tleft, q1Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tright, q1Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tright, q3Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tleft, q3Plot,\n\t\t\t\t\t\t'z'\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// The whiskers\n\t\t\t\tif (whiskerLength) {\n\t\t\t\t\tcrispCorr = (whiskersAttr['stroke-width'] % 2) / 2;\n\t\t\t\t\thighPlot = highPlot + crispCorr;\n\t\t\t\t\tlowPlot = lowPlot + crispCorr;\n\t\t\t\t\twhiskersPath = [\n\t\t\t\t\t\t// High whisker\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\tcrispX - halfWidth * whiskerLength, \n\t\t\t\t\t\thighPlot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tcrispX + halfWidth * whiskerLength, \n\t\t\t\t\t\thighPlot,\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Low whisker\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\tcrispX - halfWidth * whiskerLength, \n\t\t\t\t\t\tlowPlot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tcrispX + halfWidth * whiskerLength, \n\t\t\t\t\t\tlowPlot\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// The median\n\t\t\t\tcrispCorr = (medianAttr['stroke-width'] % 2) / 2;\t\t\t\t\n\t\t\t\tmedianPlot = mathRound(point.medianPlot) + crispCorr;\n\t\t\t\tmedianPath = [\n\t\t\t\t\t'M',\n\t\t\t\t\tleft, \n\t\t\t\t\tmedianPlot,\n\t\t\t\t\t'L',\n\t\t\t\t\tright, \n\t\t\t\t\tmedianPlot,\n\t\t\t\t\t'z'\n\t\t\t\t];\n\t\t\t\t\n\t\t\t\t// Create or update the graphics\n\t\t\t\tif (graphic) { // update\n\t\t\t\t\t\n\t\t\t\t\tpoint.stem.animate({ d: stemPath });\n\t\t\t\t\tif (whiskerLength) {\n\t\t\t\t\t\tpoint.whiskers.animate({ d: whiskersPath });\n\t\t\t\t\t}\n\t\t\t\t\tif (doQuartiles) {\n\t\t\t\t\t\tpoint.box.animate({ d: boxPath });\n\t\t\t\t\t}\n\t\t\t\t\tpoint.medianShape.animate({ d: medianPath });\n\t\t\t\t\t\n\t\t\t\t} else { // create new\n\t\t\t\t\tpoint.graphic = graphic = renderer.g()\n\t\t\t\t\t\t.add(series.group);\n\t\t\t\t\t\n\t\t\t\t\tpoint.stem = renderer.path(stemPath)\n\t\t\t\t\t\t.attr(stemAttr)\n\t\t\t\t\t\t.add(graphic);\n\t\t\t\t\t\t\n\t\t\t\t\tif (whiskerLength) {\n\t\t\t\t\t\tpoint.whiskers = renderer.path(whiskersPath) \n\t\t\t\t\t\t\t.attr(whiskersAttr)\n\t\t\t\t\t\t\t.add(graphic);\n\t\t\t\t\t}\n\t\t\t\t\tif (doQuartiles) {\n\t\t\t\t\t\tpoint.box = renderer.path(boxPath)\n\t\t\t\t\t\t\t.attr(pointAttr)\n\t\t\t\t\t\t\t.add(graphic);\n\t\t\t\t\t}\t\n\t\t\t\t\tpoint.medianShape = renderer.path(medianPath)\n\t\t\t\t\t\t.attr(medianAttr)\n\t\t\t\t\t\t.add(graphic);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t}\n\n\n});\n\n/* ****************************************************************************\n * End Box plot series code\t\t\t\t\t\t\t\t\t\t\t\t*\n *****************************************************************************/\n/* ****************************************************************************\n * Start error bar series code                                                *\n *****************************************************************************/\n\n// 1 - set default options\ndefaultPlotOptions.errorbar = merge(defaultPlotOptions.boxplot, {\n\tcolor: '#000000',\n\tgrouping: false,\n\tlinkedTo: ':previous',\n\ttooltip: {\n\t\tpointFormat: defaultPlotOptions.arearange.tooltip.pointFormat\n\t},\n\twhiskerWidth: null\n});\n\n// 2 - Create the series object\nseriesTypes.errorbar = extendClass(seriesTypes.boxplot, {\n\ttype: 'errorbar',\n\tpointArrayMap: ['low', 'high'], // array point configs are mapped to this\n\ttoYData: function (point) { // return a plain array for speedy calculation\n\t\treturn [point.low, point.high];\n\t},\n\tpointValKey: 'high', // defines the top of the tracker\n\tdoQuartiles: false,\n\n\t/**\n\t * Get the width and X offset, either on top of the linked series column\n\t * or standalone\n\t */\n\tgetColumnMetrics: function () {\n\t\treturn (this.linkedParent && this.linkedParent.columnMetrics) || \n\t\t\tseriesTypes.column.prototype.getColumnMetrics.call(this);\n\t}\n});\n\n/* ****************************************************************************\n * End error bar series code                                                  *\n *****************************************************************************/\n/* ****************************************************************************\n * Start Waterfall series code                                                *\n *****************************************************************************/\n\n// 1 - set default options\ndefaultPlotOptions.waterfall = merge(defaultPlotOptions.column, {\n\tlineWidth: 1,\n\tlineColor: '#333',\n\tdashStyle: 'dot',\n\tborderColor: '#333'\n});\n\n\n// 2 - Create the series object\nseriesTypes.waterfall = extendClass(seriesTypes.column, {\n\ttype: 'waterfall',\n\n\tupColorProp: 'fill',\n\n\tpointArrayMap: ['low', 'y'],\n\n\tpointValKey: 'y',\n\n\t/**\n\t * Init waterfall series, force stacking\n\t */\n\tinit: function (chart, options) {\n\t\t// force stacking\n\t\toptions.stacking = true;\n\n\t\tseriesTypes.column.prototype.init.call(this, chart, options);\n\t},\n\n\n\t/**\n\t * Translate data points from raw values\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\taxis = series.yAxis,\n\t\t\tlen,\n\t\t\ti,\n\t\t\tpoints,\n\t\t\tpoint,\n\t\t\tshapeArgs,\n\t\t\tstack,\n\t\t\ty,\n\t\t\tpreviousY,\n\t\t\tstackPoint,\n\t\t\tthreshold = options.threshold,\n\t\t\tcrispCorr = (options.borderWidth % 2) / 2;\n\n\t\t// run column series translate\n\t\tseriesTypes.column.prototype.translate.apply(this);\n\n\t\tpreviousY = threshold;\n\t\tpoints = series.points;\n\n\t\tfor (i = 0, len = points.length; i < len; i++) {\n\t\t\t// cache current point object\n\t\t\tpoint = points[i];\n\t\t\tshapeArgs = point.shapeArgs;\n\n\t\t\t// get current stack\n\t\t\tstack = series.getStack(i);\n\t\t\tstackPoint = stack.points[series.index];\n\n\t\t\t// override point value for sums\n\t\t\tif (isNaN(point.y)) {\n\t\t\t\tpoint.y = series.yData[i];\n\t\t\t}\n\n\t\t\t// up points\n\t\t\ty = mathMax(previousY, previousY + point.y) + stackPoint[0];\n\t\t\tshapeArgs.y = axis.translate(y, 0, 1);\n\n\n\t\t\t// sum points\n\t\t\tif (point.isSum || point.isIntermediateSum) {\n\t\t\t\tshapeArgs.y = axis.translate(stackPoint[1], 0, 1);\n\t\t\t\tshapeArgs.height = axis.translate(stackPoint[0], 0, 1) - shapeArgs.y;\n\n\t\t\t// if it's not the sum point, update previous stack end position\n\t\t\t} else {\n\t\t\t\tpreviousY += stack.total;\n\t\t\t}\n\n\t\t\t// negative points\n\t\t\tif (shapeArgs.height < 0) {\n\t\t\t\tshapeArgs.y += shapeArgs.height;\n\t\t\t\tshapeArgs.height *= -1;\n\t\t\t}\n\n\t\t\tpoint.plotY = shapeArgs.y = mathRound(shapeArgs.y) - crispCorr;\n\t\t\tshapeArgs.height = mathRound(shapeArgs.height);\n\t\t\tpoint.yBottom = shapeArgs.y + shapeArgs.height;\n\t\t}\n\t},\n\n\t/**\n\t * Call default processData then override yData to reflect waterfall's extremes on yAxis\n\t */\n\tprocessData: function (force) {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tyData = series.yData,\n\t\t\tpoints = series.points,\n\t\t\tpoint,\n\t\t\tdataLength = yData.length,\n\t\t\tthreshold = options.threshold || 0,\n\t\t\tsubSum,\n\t\t\tsum,\n\t\t\tdataMin,\n\t\t\tdataMax,\n\t\t\ty,\n\t\t\ti;\n\n\t\tsum = subSum = dataMin = dataMax = threshold;\n\n\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\ty = yData[i];\n\t\t\tpoint = points && points[i] ? points[i] : {};\n\n\t\t\tif (y === \"sum\" || point.isSum) {\n\t\t\t\tyData[i] = sum;\n\t\t\t} else if (y === \"intermediateSum\" || point.isIntermediateSum) {\n\t\t\t\tyData[i] = subSum;\n\t\t\t\tsubSum = threshold;\n\t\t\t} else {\n\t\t\t\tsum += y;\n\t\t\t\tsubSum += y;\n\t\t\t}\n\t\t\tdataMin = Math.min(sum, dataMin);\n\t\t\tdataMax = Math.max(sum, dataMax);\n\t\t}\n\n\t\tSeries.prototype.processData.call(this, force);\n\n\t\t// Record extremes\n\t\tseries.dataMin = dataMin;\n\t\tseries.dataMax = dataMax;\n\t},\n\n\t/**\n\t * Return y value or string if point is sum\n\t */\n\ttoYData: function (pt) {\n\t\tif (pt.isSum) {\n\t\t\treturn \"sum\";\n\t\t} else if (pt.isIntermediateSum) {\n\t\t\treturn \"intermediateSum\";\n\t\t}\n\n\t\treturn pt.y;\n\t},\n\n\t/**\n\t * Postprocess mapping between options and SVG attributes\n\t */\n\tgetAttribs: function () {\n\t\tseriesTypes.column.prototype.getAttribs.apply(this, arguments);\n\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tstateOptions = options.states,\n\t\t\tupColor = options.upColor || series.color,\n\t\t\thoverColor = Highcharts.Color(upColor).brighten(0.1).get(),\n\t\t\tseriesDownPointAttr = merge(series.pointAttr),\n\t\t\tupColorProp = series.upColorProp;\n\n\t\tseriesDownPointAttr[''][upColorProp] = upColor;\n\t\tseriesDownPointAttr.hover[upColorProp] = stateOptions.hover.upColor || hoverColor;\n\t\tseriesDownPointAttr.select[upColorProp] = stateOptions.select.upColor || upColor;\n\n\t\teach(series.points, function (point) {\n\t\t\tif (point.y > 0 && !point.color) {\n\t\t\t\tpoint.pointAttr = seriesDownPointAttr;\n\t\t\t\tpoint.color = upColor;\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Draw columns' connector lines\n\t */\n\tgetGraphPath: function () {\n\n\t\tvar data = this.data,\n\t\t\tlength = data.length,\n\t\t\tlineWidth = this.options.lineWidth + this.options.borderWidth,\n\t\t\tnormalizer = mathRound(lineWidth) % 2 / 2,\n\t\t\tpath = [],\n\t\t\tM = 'M',\n\t\t\tL = 'L',\n\t\t\tprevArgs,\n\t\t\tpointArgs,\n\t\t\ti,\n\t\t\td;\n\n\t\tfor (i = 1; i < length; i++) {\n\t\t\tpointArgs = data[i].shapeArgs;\n\t\t\tprevArgs = data[i - 1].shapeArgs;\n\n\t\t\td = [\n\t\t\t\tM,\n\t\t\t\tprevArgs.x + prevArgs.width, prevArgs.y + normalizer,\n\t\t\t\tL,\n\t\t\t\tpointArgs.x, prevArgs.y + normalizer\n\t\t\t];\n\n\t\t\tif (data[i - 1].y < 0) {\n\t\t\t\td[2] += prevArgs.height;\n\t\t\t\td[5] += prevArgs.height;\n\t\t\t}\n\n\t\t\tpath = path.concat(d);\n\t\t}\n\n\t\treturn path;\n\t},\n\n\t/**\n\t * Extremes are recorded in processData\n\t */\n\tgetExtremes: noop,\n\n\t/**\n\t * Return stack for given index\n\t */\n\tgetStack: function (i) {\n\t\tvar axis = this.yAxis,\n\t\t\tstacks = axis.stacks,\n\t\t\tkey = this.stackKey;\n\n\t\tif (this.processedYData[i] < this.options.threshold) {\n\t\t\tkey = '-' + key;\n\t\t}\n\n\t\treturn stacks[key][i];\n\t},\n\n\tdrawGraph: Series.prototype.drawGraph\n});\n\n/* ****************************************************************************\n * End Waterfall series code                                                  *\n *****************************************************************************/\n/* ****************************************************************************\n * Start Bubble series code\t\t\t\t\t\t\t\t\t\t\t          *\n *****************************************************************************/\n\n// 1 - set default options\ndefaultPlotOptions.bubble = merge(defaultPlotOptions.scatter, {\n\tdataLabels: {\n\t\tinside: true,\n\t\tstyle: {\n\t\t\tcolor: 'white',\n\t\t\ttextShadow: '0px 0px 3px black'\n\t\t},\n\t\tverticalAlign: 'middle'\n\t},\n\t// displayNegative: true,\n\tmarker: {\n\t\t// fillOpacity: 0.5,\n\t\tlineColor: null, // inherit from series.color\n\t\tlineWidth: 1\n\t},\n\tminSize: 8,\n\tmaxSize: '20%',\n\t// negativeColor: null,\n\ttooltip: {\n\t\tpointFormat: '({point.x}, {point.y}), Size: {point.z}'\n\t},\n\tturboThreshold: 0,\n\tzThreshold: 0\n});\n\n// 2 - Create the series object\nseriesTypes.bubble = extendClass(seriesTypes.scatter, {\n\ttype: 'bubble',\n\tpointArrayMap: ['y', 'z'],\n\ttrackerGroups: ['group', 'dataLabelsGroup'],\n\t\n\t/**\n\t * Mapping between SVG attributes and the corresponding options\n\t */\n\tpointAttrToOptions: { \n\t\tstroke: 'lineColor',\n\t\t'stroke-width': 'lineWidth',\n\t\tfill: 'fillColor'\n\t},\n\t\n\t/**\n\t * Apply the fillOpacity to all fill positions\n\t */\n\tapplyOpacity: function (fill) {\n\t\tvar markerOptions = this.options.marker,\n\t\t\tfillOpacity = pick(markerOptions.fillOpacity, 0.5);\n\t\t\n\t\t// When called from Legend.colorizeItem, the fill isn't predefined\n\t\tfill = fill || markerOptions.fillColor || this.color; \n\t\t\n\t\tif (fillOpacity !== 1) {\n\t\t\tfill = Highcharts.Color(fill).setOpacity(fillOpacity).get('rgba');\n\t\t}\n\t\treturn fill;\n\t},\n\t\n\t/**\n\t * Extend the convertAttribs method by applying opacity to the fill\n\t */\n\tconvertAttribs: function () {\n\t\tvar obj = Series.prototype.convertAttribs.apply(this, arguments);\n\t\t\n\t\tobj.fill = this.applyOpacity(obj.fill);\n\t\t\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Get the radius for each point based on the minSize, maxSize and each point's Z value. This\n\t * must be done prior to Series.translate because the axis needs to add padding in \n\t * accordance with the point sizes.\n\t */\n\tgetRadii: function (zMin, zMax, minSize, maxSize) {\n\t\tvar len,\n\t\t\ti,\n\t\t\tpos,\n\t\t\tzData = this.zData,\n\t\t\tradii = [],\n\t\t\tzRange;\n\t\t\n\t\t// Set the shape type and arguments to be picked up in drawPoints\n\t\tfor (i = 0, len = zData.length; i < len; i++) {\n\t\t\tzRange = zMax - zMin;\n\t\t\tpos = zRange > 0 ? // relative size, a number between 0 and 1\n\t\t\t\t(zData[i] - zMin) / (zMax - zMin) : \n\t\t\t\t0.5;\n\t\t\tradii.push(math.ceil(minSize + pos * (maxSize - minSize)) / 2);\n\t\t}\n\t\tthis.radii = radii;\n\t},\n\t\n\t/**\n\t * Perform animation on the bubbles\n\t */\n\tanimate: function (init) {\n\t\tvar animation = this.options.animation;\n\t\t\n\t\tif (!init) { // run the animation\n\t\t\teach(this.points, function (point) {\n\t\t\t\tvar graphic = point.graphic,\n\t\t\t\t\tshapeArgs = point.shapeArgs;\n\n\t\t\t\tif (graphic && shapeArgs) {\n\t\t\t\t\t// start values\n\t\t\t\t\tgraphic.attr('r', 1);\n\n\t\t\t\t\t// animate\n\t\t\t\t\tgraphic.animate({\n\t\t\t\t\t\tr: shapeArgs.r\n\t\t\t\t\t}, animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// delete this function to allow it only once\n\t\t\tthis.animate = null;\n\t\t}\n\t},\n\t\n\t/**\n\t * Extend the base translate method to handle bubble size\n\t */\n\ttranslate: function () {\n\t\t\n\t\tvar i,\n\t\t\tdata = this.data,\n\t\t\tpoint,\n\t\t\tradius,\n\t\t\tradii = this.radii;\n\t\t\n\t\t// Run the parent method\n\t\tseriesTypes.scatter.prototype.translate.call(this);\n\t\t\n\t\t// Set the shape type and arguments to be picked up in drawPoints\n\t\ti = data.length;\n\t\t\n\t\twhile (i--) {\n\t\t\tpoint = data[i];\n\t\t\tradius = radii ? radii[i] : 0; // #1737\n\n\t\t\t// Flag for negativeColor to be applied in Series.js\n\t\t\tpoint.negative = point.z < (this.options.zThreshold || 0);\n\t\t\t\n\t\t\tif (radius >= this.minPxSize / 2) {\n\t\t\t\t// Shape arguments\n\t\t\t\tpoint.shapeType = 'circle';\n\t\t\t\tpoint.shapeArgs = {\n\t\t\t\t\tx: point.plotX,\n\t\t\t\t\ty: point.plotY,\n\t\t\t\t\tr: radius\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// Alignment box for the data label\n\t\t\t\tpoint.dlBox = {\n\t\t\t\t\tx: point.plotX - radius,\n\t\t\t\t\ty: point.plotY - radius,\n\t\t\t\t\twidth: 2 * radius,\n\t\t\t\t\theight: 2 * radius\n\t\t\t\t};\n\t\t\t} else { // below zThreshold\n\t\t\t\tpoint.shapeArgs = point.plotY = point.dlBox = UNDEFINED; // #1691\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Get the series' symbol in the legend\n\t * \n\t * @param {Object} legend The legend object\n\t * @param {Object} item The series (this) or point\n\t */\n\tdrawLegendSymbol: function (legend, item) {\n\t\tvar radius = pInt(legend.itemStyle.fontSize) / 2;\n\t\t\n\t\titem.legendSymbol = this.chart.renderer.circle(\n\t\t\tradius,\n\t\t\tlegend.baseline - radius,\n\t\t\tradius\n\t\t).attr({\n\t\t\tzIndex: 3\n\t\t}).add(item.legendGroup);\n\t\titem.legendSymbol.isMarker = true;\t\n\t\t\n\t},\n\t\n\tdrawPoints: seriesTypes.column.prototype.drawPoints,\n\talignDataLabel: seriesTypes.column.prototype.alignDataLabel\n});\n\n/**\n * Add logic to pad each axis with the amount of pixels\n * necessary to avoid the bubbles to overflow.\n */\nAxis.prototype.beforePadding = function () {\n\tvar axis = this,\n\t\taxisLength = this.len,\n\t\tchart = this.chart,\n\t\tpxMin = 0, \n\t\tpxMax = axisLength,\n\t\tisXAxis = this.isXAxis,\n\t\tdataKey = isXAxis ? 'xData' : 'yData',\n\t\tmin = this.min,\n\t\textremes = {},\n\t\tsmallestSize = math.min(chart.plotWidth, chart.plotHeight),\n\t\tzMin = Number.MAX_VALUE,\n\t\tzMax = -Number.MAX_VALUE,\n\t\trange = this.max - min,\n\t\ttransA = axisLength / range,\n\t\tactiveSeries = [];\n\n\t// Handle padding on the second pass, or on redraw\n\tif (this.tickPositions) {\n\t\teach(this.series, function (series) {\n\n\t\t\tvar seriesOptions = series.options,\n\t\t\t\tzData;\n\n\t\t\tif (series.type === 'bubble' && series.visible) {\n\n\t\t\t\t// Correction for #1673\n\t\t\t\taxis.allowZoomOutside = true;\n\n\t\t\t\t// Cache it\n\t\t\t\tactiveSeries.push(series);\n\n\t\t\t\tif (isXAxis) { // because X axis is evaluated first\n\t\t\t\t\n\t\t\t\t\t// For each series, translate the size extremes to pixel values\n\t\t\t\t\teach(['minSize', 'maxSize'], function (prop) {\n\t\t\t\t\t\tvar length = seriesOptions[prop],\n\t\t\t\t\t\t\tisPercent = /%$/.test(length);\n\t\t\t\t\t\t\n\t\t\t\t\t\tlength = pInt(length);\n\t\t\t\t\t\textremes[prop] = isPercent ?\n\t\t\t\t\t\t\tsmallestSize * length / 100 :\n\t\t\t\t\t\t\tlength;\n\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t\tseries.minPxSize = extremes.minSize;\n\t\t\t\t\t\n\t\t\t\t\t// Find the min and max Z\n\t\t\t\t\tzData = series.zData;\n\t\t\t\t\tif (zData.length) { // #1735\n\t\t\t\t\t\tzMin = math.min(\n\t\t\t\t\t\t\tzMin,\n\t\t\t\t\t\t\tmath.max(\n\t\t\t\t\t\t\t\tarrayMin(zData), \n\t\t\t\t\t\t\t\tseriesOptions.displayNegative === false ? seriesOptions.zThreshold : -Number.MAX_VALUE\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tzMax = math.max(zMax, arrayMax(zData));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\teach(activeSeries, function (series) {\n\n\t\t\tvar data = series[dataKey],\n\t\t\t\ti = data.length,\n\t\t\t\tradius;\n\n\t\t\tif (isXAxis) {\n\t\t\t\tseries.getRadii(zMin, zMax, extremes.minSize, extremes.maxSize);\n\t\t\t}\n\t\t\t\n\t\t\tif (range > 0) {\n\t\t\t\twhile (i--) {\n\t\t\t\t\tradius = series.radii[i];\n\t\t\t\t\tpxMin = Math.min(((data[i] - min) * transA) - radius, pxMin);\n\t\t\t\t\tpxMax = Math.max(((data[i] - min) * transA) + radius, pxMax);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tif (activeSeries.length && range > 0 && pick(this.options.min, this.userMin) === UNDEFINED && pick(this.options.max, this.userMax) === UNDEFINED) {\n\t\t\tpxMax -= axisLength;\n\t\t\ttransA *= (axisLength + pxMin - pxMax) / axisLength;\n\t\t\tthis.min += pxMin / transA;\n\t\t\tthis.max += pxMax / transA;\n\t\t}\n\t}\n};\n\n/* ****************************************************************************\n * End Bubble series code                                                     *\n *****************************************************************************/\n/**\n * Extensions for polar charts. Additionally, much of the geometry required for polar charts is\n * gathered in RadialAxes.js.\n * \n */\n\nvar seriesProto = Series.prototype,\n\tpointerProto = Highcharts.Pointer.prototype;\n\n\n\n/**\n * Translate a point's plotX and plotY from the internal angle and radius measures to \n * true plotX, plotY coordinates\n */\nseriesProto.toXY = function (point) {\n\tvar xy,\n\t\tchart = this.chart,\n\t\tplotX = point.plotX,\n\t\tplotY = point.plotY;\n\t\n\t// Save rectangular plotX, plotY for later computation\n\tpoint.rectPlotX = plotX;\n\tpoint.rectPlotY = plotY;\n\t\n\t// Record the angle in degrees for use in tooltip\n\tpoint.clientX = ((plotX / Math.PI * 180) + this.xAxis.pane.options.startAngle) % 360;\n\t\n\t// Find the polar plotX and plotY\n\txy = this.xAxis.postTranslate(point.plotX, this.yAxis.len - plotY);\n\tpoint.plotX = point.polarPlotX = xy.x - chart.plotLeft;\n\tpoint.plotY = point.polarPlotY = xy.y - chart.plotTop;\n};\n\n/** \n * Order the tooltip points to get the mouse capture ranges correct. #1915. \n */\nseriesProto.orderTooltipPoints = function (points) {\n\tif (this.chart.polar) {\n\t\tpoints.sort(function (a, b) {\n\t\t\treturn a.clientX - b.clientX;\n\t\t});\n\n\t\t// Wrap mouse tracking around to capture movement on the segment to the left\n\t\t// of the north point (#1469, #2093).\n\t\tif (points[0]) {\n\t\t\tpoints[0].wrappedClientX = points[0].clientX + 360;\n\t\t\tpoints.push(points[0]);\n\t\t}\n\t}\n};\n\n\n/**\n * Add some special init logic to areas and areasplines\n */\nfunction initArea(proceed, chart, options) {\n\tproceed.call(this, chart, options);\n\tif (this.chart.polar) {\n\t\t\n\t\t/**\n\t\t * Overridden method to close a segment path. While in a cartesian plane the area \n\t\t * goes down to the threshold, in the polar chart it goes to the center.\n\t\t */\n\t\tthis.closeSegment = function (path) {\n\t\t\tvar center = this.xAxis.center;\n\t\t\tpath.push(\n\t\t\t\t'L',\n\t\t\t\tcenter[0],\n\t\t\t\tcenter[1]\n\t\t\t);\t\t\t\n\t\t};\n\t\t\n\t\t// Instead of complicated logic to draw an area around the inner area in a stack,\n\t\t// just draw it behind\n\t\tthis.closedStacks = true;\n\t}\n}\nwrap(seriesTypes.area.prototype, 'init', initArea);\nwrap(seriesTypes.areaspline.prototype, 'init', initArea);\n\t\t\n\n/**\n * Overridden method for calculating a spline from one point to the next\n */\nwrap(seriesTypes.spline.prototype, 'getPointSpline', function (proceed, segment, point, i) {\n\t\n\tvar ret,\n\t\tsmoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc;\n\t\tdenom = smoothing + 1,\n\t\tplotX, \n\t\tplotY,\n\t\tlastPoint,\n\t\tnextPoint,\n\t\tlastX,\n\t\tlastY,\n\t\tnextX,\n\t\tnextY,\n\t\tleftContX,\n\t\tleftContY,\n\t\trightContX,\n\t\trightContY,\n\t\tdistanceLeftControlPoint,\n\t\tdistanceRightControlPoint,\n\t\tleftContAngle,\n\t\trightContAngle,\n\t\tjointAngle;\n\t\t\n\t\t\n\tif (this.chart.polar) {\n\t\t\n\t\tplotX = point.plotX;\n\t\tplotY = point.plotY;\n\t\tlastPoint = segment[i - 1];\n\t\tnextPoint = segment[i + 1];\n\t\t\t\n\t\t// Connect ends\n\t\tif (this.connectEnds) {\n\t\t\tif (!lastPoint) {\n\t\t\t\tlastPoint = segment[segment.length - 2]; // not the last but the second last, because the segment is already connected\n\t\t\t}\n\t\t\tif (!nextPoint) {\n\t\t\t\tnextPoint = segment[1];\n\t\t\t}\t\n\t\t}\n\n\t\t// find control points\n\t\tif (lastPoint && nextPoint) {\n\t\t\n\t\t\tlastX = lastPoint.plotX;\n\t\t\tlastY = lastPoint.plotY;\n\t\t\tnextX = nextPoint.plotX;\n\t\t\tnextY = nextPoint.plotY;\n\t\t\tleftContX = (smoothing * plotX + lastX) / denom;\n\t\t\tleftContY = (smoothing * plotY + lastY) / denom;\n\t\t\trightContX = (smoothing * plotX + nextX) / denom;\n\t\t\trightContY = (smoothing * plotY + nextY) / denom;\n\t\t\tdistanceLeftControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2));\n\t\t\tdistanceRightControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2));\n\t\t\tleftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX);\n\t\t\trightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX);\n\t\t\tjointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2);\n\t\t\t\t\n\t\t\t\t\n\t\t\t// Ensure the right direction, jointAngle should be in the same quadrant as leftContAngle\n\t\t\tif (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) {\n\t\t\t\tjointAngle -= Math.PI;\n\t\t\t}\n\t\t\t\n\t\t\t// Find the corrected control points for a spline straight through the point\n\t\t\tleftContX = plotX + Math.cos(jointAngle) * distanceLeftControlPoint;\n\t\t\tleftContY = plotY + Math.sin(jointAngle) * distanceLeftControlPoint;\n\t\t\trightContX = plotX + Math.cos(Math.PI + jointAngle) * distanceRightControlPoint;\n\t\t\trightContY = plotY + Math.sin(Math.PI + jointAngle) * distanceRightControlPoint;\n\t\t\t\n\t\t\t// Record for drawing in next point\n\t\t\tpoint.rightContX = rightContX;\n\t\t\tpoint.rightContY = rightContY;\n\n\t\t}\n\t\t\n\t\t\n\t\t// moveTo or lineTo\n\t\tif (!i) {\n\t\t\tret = ['M', plotX, plotY];\n\t\t} else { // curve from last point to this\n\t\t\tret = [\n\t\t\t\t'C',\n\t\t\t\tlastPoint.rightContX || lastPoint.plotX,\n\t\t\t\tlastPoint.rightContY || lastPoint.plotY,\n\t\t\t\tleftContX || plotX,\n\t\t\t\tleftContY || plotY,\n\t\t\t\tplotX,\n\t\t\t\tplotY\n\t\t\t];\n\t\t\tlastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later\n\t\t}\n\t\t\n\t\t\n\t} else {\n\t\tret = proceed.call(this, segment, point, i);\n\t}\n\treturn ret;\n});\n\n/**\n * Extend translate. The plotX and plotY values are computed as if the polar chart were a\n * cartesian plane, where plotX denotes the angle in radians and (yAxis.len - plotY) is the pixel distance from\n * center. \n */\nwrap(seriesProto, 'translate', function (proceed) {\n\t\t\n\t// Run uber method\n\tproceed.call(this);\n\t\n\t// Postprocess plot coordinates\n\tif (this.chart.polar && !this.preventPostTranslate) {\n\t\tvar points = this.points,\n\t\t\ti = points.length;\n\t\twhile (i--) {\n\t\t\t// Translate plotX, plotY from angle and radius to true plot coordinates\n\t\t\tthis.toXY(points[i]);\n\t\t}\n\t}\n});\n\n/** \n * Extend getSegmentPath to allow connecting ends across 0 to provide a closed circle in \n * line-like series.\n */\nwrap(seriesProto, 'getSegmentPath', function (proceed, segment) {\n\t\t\n\tvar points = this.points;\n\t\n\t// Connect the path\n\tif (this.chart.polar && this.options.connectEnds !== false && \n\t\t\tsegment[segment.length - 1] === points[points.length - 1] && points[0].y !== null) {\n\t\tthis.connectEnds = true; // re-used in splines\n\t\tsegment = [].concat(segment, [points[0]]);\n\t}\n\t\n\t// Run uber method\n\treturn proceed.call(this, segment);\n\t\n});\n\n\nfunction polarAnimate(proceed, init) {\n\tvar chart = this.chart,\n\t\tanimation = this.options.animation,\n\t\tgroup = this.group,\n\t\tmarkerGroup = this.markerGroup,\n\t\tcenter = this.xAxis.center,\n\t\tplotLeft = chart.plotLeft,\n\t\tplotTop = chart.plotTop,\n\t\tattribs;\n\n\t// Specific animation for polar charts\n\tif (chart.polar) {\n\t\t\n\t\t// Enable animation on polar charts only in SVG. In VML, the scaling is different, plus animation\n\t\t// would be so slow it would't matter.\n\t\tif (chart.renderer.isSVG) {\n\n\t\t\tif (animation === true) {\n\t\t\t\tanimation = {};\n\t\t\t}\n\t\n\t\t\t// Initialize the animation\n\t\t\tif (init) {\n\t\t\t\t\n\t\t\t\t// Scale down the group and place it in the center\n\t\t\t\tattribs = {\n\t\t\t\t\ttranslateX: center[0] + plotLeft,\n\t\t\t\t\ttranslateY: center[1] + plotTop,\n\t\t\t\t\tscaleX: 0.001, // #1499\n\t\t\t\t\tscaleY: 0.001\n\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\tgroup.attr(attribs);\n\t\t\t\tif (markerGroup) {\n\t\t\t\t\tmarkerGroup.attrSetters = group.attrSetters;\n\t\t\t\t\tmarkerGroup.attr(attribs);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t// Run the animation\n\t\t\t} else {\n\t\t\t\tattribs = {\n\t\t\t\t\ttranslateX: plotLeft,\n\t\t\t\t\ttranslateY: plotTop,\n\t\t\t\t\tscaleX: 1,\n\t\t\t\t\tscaleY: 1\n\t\t\t\t};\n\t\t\t\tgroup.animate(attribs, animation);\n\t\t\t\tif (markerGroup) {\n\t\t\t\t\tmarkerGroup.animate(attribs, animation);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Delete this function to allow it only once\n\t\t\t\tthis.animate = null;\n\t\t\t}\n\t\t}\n\t\n\t// For non-polar charts, revert to the basic animation\n\t} else {\n\t\tproceed.call(this, init);\n\t} \n}\n\n// Define the animate method for both regular series and column series and their derivatives\nwrap(seriesProto, 'animate', polarAnimate);\nwrap(colProto, 'animate', polarAnimate);\n\n\n/**\n * Throw in a couple of properties to let setTooltipPoints know we're indexing the points\n * in degrees (0-360), not plot pixel width.\n */\nwrap(seriesProto, 'setTooltipPoints', function (proceed, renew) {\n\t\t\n\tif (this.chart.polar) {\n\t\textend(this.xAxis, {\n\t\t\ttooltipLen: 360 // degrees are the resolution unit of the tooltipPoints array\n\t\t});\t\n\t}\n\t\n\t// Run uber method\n\treturn proceed.call(this, renew);\n});\n\n\n/**\n * Extend the column prototype's translate method\n */\nwrap(colProto, 'translate', function (proceed) {\n\t\t\n\tvar xAxis = this.xAxis,\n\t\tlen = this.yAxis.len,\n\t\tcenter = xAxis.center,\n\t\tstartAngleRad = xAxis.startAngleRad,\n\t\trenderer = this.chart.renderer,\n\t\tstart,\n\t\tpoints,\n\t\tpoint,\n\t\ti;\n\t\n\tthis.preventPostTranslate = true;\n\t\n\t// Run uber method\n\tproceed.call(this);\n\t\n\t// Postprocess plot coordinates\n\tif (xAxis.isRadial) {\n\t\tpoints = this.points;\n\t\ti = points.length;\n\t\twhile (i--) {\n\t\t\tpoint = points[i];\n\t\t\tstart = point.barX + startAngleRad;\n\t\t\tpoint.shapeType = 'path';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\td: renderer.symbols.arc(\n\t\t\t\t\tcenter[0],\n\t\t\t\t\tcenter[1],\n\t\t\t\t\tlen - point.plotY,\n\t\t\t\t\tnull, \n\t\t\t\t\t{\n\t\t\t\t\t\tstart: start,\n\t\t\t\t\t\tend: start + point.pointWidth,\n\t\t\t\t\t\tinnerR: len - pick(point.yBottom, len)\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t};\n\t\t\tthis.toXY(point); // provide correct plotX, plotY for tooltip\n\t\t}\n\t}\n});\n\n\n/**\n * Align column data labels outside the columns. #1199.\n */\nwrap(colProto, 'alignDataLabel', function (proceed, point, dataLabel, options, alignTo, isNew) {\n\t\n\tif (this.chart.polar) {\n\t\tvar angle = point.rectPlotX / Math.PI * 180,\n\t\t\talign,\n\t\t\tverticalAlign;\n\t\t\n\t\t// Align nicely outside the perimeter of the columns\n\t\tif (options.align === null) {\n\t\t\tif (angle > 20 && angle < 160) {\n\t\t\t\talign = 'left'; // right hemisphere\n\t\t\t} else if (angle > 200 && angle < 340) {\n\t\t\t\talign = 'right'; // left hemisphere\n\t\t\t} else {\n\t\t\t\talign = 'center'; // top or bottom\n\t\t\t}\n\t\t\toptions.align = align;\n\t\t}\n\t\tif (options.verticalAlign === null) {\n\t\t\tif (angle < 45 || angle > 315) {\n\t\t\t\tverticalAlign = 'bottom'; // top part\n\t\t\t} else if (angle > 135 && angle < 225) {\n\t\t\t\tverticalAlign = 'top'; // bottom part\n\t\t\t} else {\n\t\t\t\tverticalAlign = 'middle'; // left or right\n\t\t\t}\n\t\t\toptions.verticalAlign = verticalAlign;\n\t\t}\n\t\t\n\t\tseriesProto.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n\t} else {\n\t\tproceed.call(this, point, dataLabel, options, alignTo, isNew);\n\t}\n\t\n});\n\n/**\n * Extend the mouse tracker to return the tooltip position index in terms of\n * degrees rather than pixels\n */\nwrap(pointerProto, 'getIndex', function (proceed, e) {\n\tvar ret,\n\t\tchart = this.chart,\n\t\tcenter,\n\t\tx,\n\t\ty;\n\t\n\tif (chart.polar) {\n\t\tcenter = chart.xAxis[0].center;\n\t\tx = e.chartX - center[0] - chart.plotLeft;\n\t\ty = e.chartY - center[1] - chart.plotTop;\n\t\t\n\t\tret = 180 - Math.round(Math.atan2(x, y) / Math.PI * 180);\n\t\n\t} else {\n\t\n\t\t// Run uber method\n\t\tret = proceed.call(this, e);\n\t}\n\treturn ret;\n});\n\n/**\n * Extend getCoordinates to prepare for polar axis values\n */\nwrap(pointerProto, 'getCoordinates', function (proceed, e) {\n\tvar chart = this.chart,\n\t\tret = {\n\t\t\txAxis: [],\n\t\t\tyAxis: []\n\t\t};\n\t\n\tif (chart.polar) {\t\n\n\t\teach(chart.axes, function (axis) {\n\t\t\tvar isXAxis = axis.isXAxis,\n\t\t\t\tcenter = axis.center,\n\t\t\t\tx = e.chartX - center[0] - chart.plotLeft,\n\t\t\t\ty = e.chartY - center[1] - chart.plotTop;\n\t\t\t\n\t\t\tret[isXAxis ? 'xAxis' : 'yAxis'].push({\n\t\t\t\taxis: axis,\n\t\t\t\tvalue: axis.translate(\n\t\t\t\t\tisXAxis ?\n\t\t\t\t\t\tMath.PI - Math.atan2(x, y) : // angle \n\t\t\t\t\t\tMath.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), // distance from center\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t});\n\t\t});\n\t\t\n\t} else {\n\t\tret = proceed.call(this, e);\n\t}\n\t\n\treturn ret;\n});\n}(Highcharts));\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/highcharts.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n (c) 2009-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(){function r(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function x(){var a,b=arguments.length,c={},d=function(a,b){var c,h;typeof a!==\"object\"&&(a={});for(h in b)b.hasOwnProperty(h)&&(c=b[h],a[h]=c&&typeof c===\"object\"&&Object.prototype.toString.call(c)!==\"[object Array]\"&&typeof c.nodeType!==\"number\"?d(a[h]||{},c):b[h]);return a};for(a=0;a<b;a++)c=d(c,arguments[a]);return c}function C(a,b){return parseInt(a,b||10)}function ea(a){return typeof a===\"string\"}function T(a){return typeof a===\n\"object\"}function Ia(a){return Object.prototype.toString.call(a)===\"[object Array]\"}function sa(a){return typeof a===\"number\"}function na(a){return R.log(a)/R.LN10}function fa(a){return R.pow(10,a)}function ga(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function u(a){return a!==w&&a!==null}function v(a,b,c){var d,e;if(ea(b))u(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(u(b)&&T(b))for(d in b)a.setAttribute(d,b[d]);return e}function ja(a){return Ia(a)?\na:[a]}function o(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!==\"undefined\"&&c!==null)return c}function K(a,b){if(ta&&b&&b.opacity!==w)b.filter=\"alpha(opacity=\"+b.opacity*100+\")\";r(a.style,b)}function U(a,b,c,d,e){a=y.createElement(a);b&&r(a,b);e&&K(a,{padding:0,border:S,margin:0});c&&K(a,c);d&&d.appendChild(a);return a}function ha(a,b){var c=function(){};c.prototype=new a;r(c.prototype,b);return c}function Aa(a,b,c,d){var e=M.lang,a=+a||0,f=b===-1?(a.toString().split(\".\")[1]||\n\"\").length:isNaN(b=N(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?\"-\":\"\",c=String(C(a=N(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:\"\")+c.substr(g).replace(/(\\d{3})(?=\\d)/g,\"$1\"+d)+(f?b+N(a-c).toFixed(f).slice(2):\"\")}function Ba(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function mb(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);a.unshift(d);return c.apply(this,a)}}function Ca(a,b){for(var c=\"{\",d=!1,\ne,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(\":\");g=f.shift().split(\".\");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]];if(f.length)f=f.join(\":\"),g=/\\.([0-9])/,h=M.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e=Aa(e,i,h.decimalPoint,f.indexOf(\",\")>-1?h.thousandsSep:\"\")):e=Xa(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?\"}\":\"{\"}j.push(a);return j.join(\"\")}function nb(a){return R.pow(10,P(R.log(a)/R.LN10))}function ob(a,b,c,d){var e,c=o(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===\n!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Cb(a,b){var c=b||[[Db,[1,2,5,10,20,25,50,100,200,500]],[pb,[1,2,5,10,15,30]],[Ya,[1,2,5,10,15,30]],[Qa,[1,2,3,4,6,8,12]],[ua,[1,2]],[Za,[1,2]],[Ra,[1,2,3,4,6]],[Da,null]],d=c[c.length-1],e=D[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=D[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+D[c[g+1][0]])/2)break;e===D[Da]&&a<5*e&&(f=[1,2,5]);c=ob(a/e,f,d[0]===Da?nb(a/e):1);\nreturn{unitRange:e,count:c,unitName:d[0]}}function Eb(a,b,c,d){var e=[],f={},g=M.global.useUTC,h,i=new Date(b),j=a.unitRange,k=a.count;if(u(b)){j>=D[pb]&&(i.setMilliseconds(0),i.setSeconds(j>=D[Ya]?0:k*P(i.getSeconds()/k)));if(j>=D[Ya])i[Fb](j>=D[Qa]?0:k*P(i[qb]()/k));if(j>=D[Qa])i[Gb](j>=D[ua]?0:k*P(i[rb]()/k));if(j>=D[ua])i[sb](j>=D[Ra]?1:k*P(i[Sa]()/k));j>=D[Ra]&&(i[Hb](j>=D[Da]?0:k*P(i[$a]()/k)),h=i[ab]());j>=D[Da]&&(h-=h%k,i[Ib](h));if(j===D[Za])i[sb](i[Sa]()-i[tb]()+o(d,1));b=1;h=i[ab]();for(var d=\ni.getTime(),l=i[$a](),m=i[Sa](),p=g?0:(864E5+i.getTimezoneOffset()*6E4)%864E5;d<c;)e.push(d),j===D[Da]?d=bb(h+b*k,0):j===D[Ra]?d=bb(h,l+b*k):!g&&(j===D[ua]||j===D[Za])?d=bb(h,l,m+b*k*(j===D[ua]?1:7)):d+=j*k,b++;e.push(d);n(ub(e,function(a){return j<=D[Qa]&&a%D[ua]===p}),function(a){f[a]=ua})}e.info=r(a,{higherRanks:f,totalRange:j*k});return e}function Jb(){this.symbol=this.color=0}function Kb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:\nd});for(e=0;e<c;e++)delete a[e].ss_i}function Ja(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function va(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Ka(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Ta(a){cb||(cb=U(Ea));a&&cb.appendChild(a);cb.innerHTML=\"\"}function ka(a,b){var c=\"Highcharts error #\"+a+\": www.highcharts.com/errors/\"+a;if(b)throw c;else O.console&&console.log(c)}function ia(a){return parseFloat(a.toPrecision(14))}\nfunction La(a,b){Fa=o(a,b.animation)}function Lb(){var a=M.global.useUTC,b=a?\"getUTC\":\"get\",c=a?\"setUTC\":\"set\";bb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,o(c,1),o(g,0),o(h,0),o(i,0))).getTime()};qb=b+\"Minutes\";rb=b+\"Hours\";tb=b+\"Day\";Sa=b+\"Date\";$a=b+\"Month\";ab=b+\"FullYear\";Fb=c+\"Minutes\";Gb=c+\"Hours\";sb=c+\"Date\";Hb=c+\"Month\";Ib=c+\"FullYear\"}function wa(){}function Ma(a,b,c,d){this.axis=a;this.pos=b;this.type=c||\"\";this.isNew=!0;!c&&!d&&this.addLabel()}function vb(a,b){this.axis=a;if(b)this.options=\nb,this.id=b.id}function Mb(a,b,c,d,e,f){var g=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.percent=f===\"percent\";this.alignOptions={align:b.align||(g?c?\"left\":\"right\":\"center\"),verticalAlign:b.verticalAlign||(g?\"middle\":c?\"bottom\":\"top\"),y:o(b.y,g?4:c?14:-6),x:o(b.x,g?c?-6:6:0)};this.textAlign=b.textAlign||(g?c?\"right\":\"left\":\"center\")}function db(){this.init.apply(this,arguments)}function wb(){this.init.apply(this,arguments)}\nfunction xb(a,b){this.init(a,b)}function eb(a,b){this.init(a,b)}function yb(){this.init.apply(this,arguments)}var w,y=document,O=window,R=Math,t=R.round,P=R.floor,xa=R.ceil,s=R.max,I=R.min,N=R.abs,V=R.cos,ca=R.sin,ya=R.PI,Ua=ya*2/360,oa=navigator.userAgent,Nb=O.opera,ta=/msie/i.test(oa)&&!Nb,fb=y.documentMode===8,gb=/AppleWebKit/.test(oa),hb=/Firefox/.test(oa),Ob=/(Mobile|Android|Windows Phone)/.test(oa),za=\"http://www.w3.org/2000/svg\",Z=!!y.createElementNS&&!!y.createElementNS(za,\"svg\").createSVGRect,\nUb=hb&&parseInt(oa.split(\"Firefox/\")[1],10)<4,$=!Z&&!ta&&!!y.createElement(\"canvas\").getContext,Va,ib=y.documentElement.ontouchstart!==w,Pb={},zb=0,cb,M,Xa,Fa,Ab,D,pa=function(){},Ga=[],Ea=\"div\",S=\"none\",Qb=\"rgba(192,192,192,\"+(Z?1.0E-4:0.002)+\")\",Db=\"millisecond\",pb=\"second\",Ya=\"minute\",Qa=\"hour\",ua=\"day\",Za=\"week\",Ra=\"month\",Da=\"year\",Rb=\"stroke-width\",bb,qb,rb,tb,Sa,$a,ab,Fb,Gb,sb,Hb,Ib,W={};O.Highcharts=O.Highcharts?ka(16,!0):{};Xa=function(a,b,c){if(!u(b)||isNaN(b))return\"Invalid date\";var a=\no(a,\"%Y-%m-%d %H:%M:%S\"),d=new Date(b),e,f=d[rb](),g=d[tb](),h=d[Sa](),i=d[$a](),j=d[ab](),k=M.lang,l=k.weekdays,d=r({a:l[g].substr(0,3),A:l[g],d:Ba(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ba(i+1),y:j.toString().substr(2,2),Y:j,H:Ba(f),I:Ba(f%12||12),l:f%12||12,M:Ba(d[qb]()),p:f<12?\"AM\":\"PM\",P:f<12?\"am\":\"pm\",S:Ba(d.getSeconds()),L:Ba(t(b%1E3),3)},Highcharts.dateFormats);for(e in d)for(;a.indexOf(\"%\"+e)!==-1;)a=a.replace(\"%\"+e,typeof d[e]===\"function\"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+\na.substr(1):a};Jb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};D=function(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}(Db,1,pb,1E3,Ya,6E4,Qa,36E5,ua,864E5,Za,6048E5,Ra,26784E5,Da,31556952E3);Ab={init:function(a,b,c){var b=b||\"\",d=a.shift,e=b.indexOf(\"C\")>-1,f=e?7:3,g,b=b.split(\" \"),c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]===\"M\"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&\n(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};\n(function(a){O.HighchartsAdapter=O.HighchartsAdapter||a&&{init:function(b){var c=a.fx,d=c.step,e,f=a.Tween,g=f&&f.propHooks;e=a.cssHooks.opacity;a.extend(a.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});a.each([\"cur\",\"_default\",\"width\",\"height\",\"opacity\"],function(a,b){var e=d,k,l;b===\"cur\"?e=c.prototype:b===\"_default\"&&f&&(e=g[b],b=\"set\");(k=e[b])&&(e[b]=function(c){c=a?c:this;if(c.prop!==\"align\")return l=c.elem,l.attr?l.attr(c.prop,b===\"cur\"?w:c.now):k.apply(this,arguments)})});\nmb(e,\"get\",function(a,b,c){return b.attr?b.opacity||0:a.call(this,b,c)});e=function(a){var c=a.elem,d;if(!a.started)d=b.init(c,c.d,c.toD),a.start=d[0],a.end=d[1],a.started=!0;c.attr(\"d\",b.step(a.start,a.end,a.pos,c.toD))};f?g.d={set:e}:d.d=e;this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c};a.fn.highcharts=function(){var a=\"Chart\",b=arguments,c,d;ea(b[0])&&(a=b[0],b=Array.prototype.slice.call(b,\n1));c=b[0];if(c!==w)c.chart=c.chart||{},c.chart.renderTo=this[0],new Highcharts[a](c,b[1]),d=this;c===w&&(d=Ga[v(this[0],\"data-highcharts-chart\")]);return d}},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b,c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);return d},offset:function(b){return a(b).offset()},addEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=y.removeEventListener?\"removeEventListener\":\n\"detachEvent\";y[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g=\"detached\"+c,h;!ta&&d&&(delete d.layerX,delete d.layerY);r(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each([\"preventDefault\",\"stopPropagation\"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b===\"preventDefault\"&&(h=!0)}}});a(b).trigger(f);b[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===w)c.pageX=\na.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(!b.style)b.style={};if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==w&&b.attr&&(c.opacity+=\"px\");e.animate(c,d)},stop:function(b){a(b).stop()}}})(O.jQuery);var X=O.HighchartsAdapter,G=X||{};X&&X.init.call(X,Ab);var jb=G.adapterRun,Vb=G.getScript,qa=G.inArray,n=G.each,ub=G.grep,Wb=G.offset,Na=G.map,J=G.addEvent,aa=G.removeEvent,z=G.fireEvent,Xb=G.washMouseEvent,Bb=G.animate,Wa=G.stop,G={enabled:!0,x:0,y:15,style:{color:\"#666\",cursor:\"default\",\nfontSize:\"11px\",lineHeight:\"14px\"}};M={colors:\"#2f7ed8,#0d233a,#8bbc21,#910000,#1aadce,#492970,#f28f43,#77a1e5,#c42525,#a6c96a\".split(\",\"),symbols:[\"circle\",\"diamond\",\"square\",\"triangle\",\"triangle-down\"],lang:{loading:\"Loading...\",months:\"January,February,March,April,May,June,July,August,September,October,November,December\".split(\",\"),shortMonths:\"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec\".split(\",\"),weekdays:\"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday\".split(\",\"),decimalPoint:\".\",\nnumericSymbols:\"k,M,G,T,P,E\".split(\",\"),resetZoom:\"Reset zoom\",resetZoomTitle:\"Reset zoom level 1:1\",thousandsSep:\",\"},global:{useUTC:!0,canvasToolsURL:\"http://code.highcharts.com/3.0.6/modules/canvas-tools.js\",VMLRadialGradientURL:\"http://code.highcharts.com/3.0.6/gfx/vml-radial-gradient.png\"},chart:{borderColor:\"#4572A7\",borderRadius:5,defaultSeriesType:\"line\",ignoreHiddenSeries:!0,spacing:[10,10,15,10],style:{fontFamily:'\"Lucida Grande\", \"Lucida Sans Unicode\", Verdana, Arial, Helvetica, sans-serif',\nfontSize:\"12px\"},backgroundColor:\"#FFFFFF\",plotBorderColor:\"#C0C0C0\",resetZoomButton:{theme:{zIndex:20},position:{align:\"right\",x:-10,y:10}}},title:{text:\"Chart title\",align:\"center\",margin:15,style:{color:\"#274b6d\",fontSize:\"16px\"}},subtitle:{text:\"\",align:\"center\",style:{color:\"#4d759e\"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{enabled:!0,lineWidth:0,radius:4,lineColor:\"#FFFFFF\",states:{hover:{enabled:!0},select:{fillColor:\"#FFFFFF\",\nlineColor:\"#000000\",lineWidth:2}}},point:{events:{}},dataLabels:x(G,{align:\"center\",enabled:!1,formatter:function(){return this.y===null?\"\":Aa(this.y,-1)},verticalAlign:\"bottom\",y:0}),cropThreshold:300,pointRange:0,showInLegend:!0,states:{hover:{marker:{}},select:{marker:{}}},stickyTracking:!0}},labels:{style:{position:\"absolute\",color:\"#3E576F\"}},legend:{enabled:!0,align:\"center\",layout:\"horizontal\",labelFormatter:function(){return this.name},borderWidth:1,borderColor:\"#909090\",borderRadius:5,navigation:{activeColor:\"#274b6d\",\ninactiveColor:\"#CCC\"},shadow:!1,itemStyle:{cursor:\"pointer\",color:\"#274b6d\",fontSize:\"12px\"},itemHoverStyle:{color:\"#000\"},itemHiddenStyle:{color:\"#CCC\"},itemCheckboxStyle:{position:\"absolute\",width:\"13px\",height:\"13px\"},symbolWidth:16,symbolPadding:5,verticalAlign:\"bottom\",x:0,y:0,title:{style:{fontWeight:\"bold\"}}},loading:{labelStyle:{fontWeight:\"bold\",position:\"relative\",top:\"1em\"},style:{position:\"absolute\",backgroundColor:\"white\",opacity:0.5,textAlign:\"center\"}},tooltip:{enabled:!0,animation:Z,\nbackgroundColor:\"rgba(255, 255, 255, .85)\",borderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:\"%A, %b %e, %H:%M:%S.%L\",second:\"%A, %b %e, %H:%M:%S\",minute:\"%A, %b %e, %H:%M\",hour:\"%A, %b %e, %H:%M\",day:\"%A, %b %e, %Y\",week:\"Week from %A, %b %e, %Y\",month:\"%B %Y\",year:\"%Y\"},headerFormat:'<span style=\"font-size: 10px\">{point.key}</span><br/>',pointFormat:'<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y}</b><br/>',shadow:!0,snap:Ob?25:10,style:{color:\"#333333\",cursor:\"default\",\nfontSize:\"12px\",padding:\"8px\",whiteSpace:\"nowrap\"}},credits:{enabled:!0,text:\"Highcharts.com\",href:\"http://www.highcharts.com\",position:{align:\"right\",x:-10,verticalAlign:\"bottom\",y:-5},style:{cursor:\"pointer\",color:\"#909090\",fontSize:\"9px\"}}};var Y=M.plotOptions,X=Y.line;Lb();var ra=function(a){var b=[],c,d;(function(a){a&&a.stops?d=Na(a.stops,function(a){return ra(a[1])}):(c=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/.exec(a))?b=[C(c[1]),C(c[2]),\nC(c[3]),parseFloat(c[4],10)]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))?b=[C(c[1],16),C(c[2],16),C(c[3],16),1]:(c=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(a))&&(b=[C(c[1]),C(c[2]),C(c[3]),1])})(a);return{get:function(c){var f;d?(f=x(a),f.stops=[].concat(f.stops),n(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c===\"rgb\"?\"rgb(\"+b[0]+\",\"+b[1]+\",\"+b[2]+\")\":c===\"a\"?b[3]:\"rgba(\"+b.join(\",\")+\")\":a;return f},brighten:function(a){if(d)n(d,\nfunction(b){b.brighten(a)});else if(sa(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=C(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};wa.prototype={init:function(a,b){this.element=b===\"span\"?U(b):y.createElementNS(za,b);this.renderer=a;this.attrSetters={}},opacity:1,animate:function(a,b,c){b=o(b,Fa,!0);Wa(this);if(b){b=x(b);if(c)b.complete=c;Bb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName.toLowerCase(),\ni=this.renderer,j,k=this.attrSetters,l=this.shadows,m,p,q=this;ea(a)&&u(b)&&(c=a,a={},a[c]=b);if(ea(a))c=a,h===\"circle\"?c={x:\"cx\",y:\"cy\"}[c]||c:c===\"strokeWidth\"&&(c=\"stroke-width\"),q=v(g,c)||this[c]||0,c!==\"d\"&&c!==\"visibility\"&&c!==\"fill\"&&(q=parseFloat(q));else{for(c in a)if(j=!1,d=a[c],e=k[c]&&k[c].call(this,d,c),e!==!1){e!==w&&(d=e);if(c===\"d\")d&&d.join&&(d=d.join(\" \")),/(NaN| {2}|^$)/.test(d)&&(d=\"M 0 0\");else if(c===\"x\"&&h===\"text\")for(e=0;e<g.childNodes.length;e++)f=g.childNodes[e],v(f,\"x\")===\nv(g,\"x\")&&v(f,\"x\",d);else if(this.rotation&&(c===\"x\"||c===\"y\"))p=!0;else if(c===\"fill\")d=i.color(d,g,c);else if(h===\"circle\"&&(c===\"x\"||c===\"y\"))c={x:\"cx\",y:\"cy\"}[c]||c;else if(h===\"rect\"&&c===\"r\")v(g,{rx:d,ry:d}),j=!0;else if(c===\"translateX\"||c===\"translateY\"||c===\"rotation\"||c===\"verticalAlign\"||c===\"scaleX\"||c===\"scaleY\")j=p=!0;else if(c===\"stroke\")d=i.color(d,g,c);else if(c===\"dashstyle\")if(c=\"stroke-dasharray\",d=d&&d.toLowerCase(),d===\"solid\")d=S;else{if(d){d=d.replace(\"shortdashdotdot\",\"3,1,1,1,1,1,\").replace(\"shortdashdot\",\n\"3,1,1,1\").replace(\"shortdot\",\"1,1,\").replace(\"shortdash\",\"3,1,\").replace(\"longdash\",\"8,3,\").replace(/dot/g,\"1,3,\").replace(\"dash\",\"4,3,\").replace(/,$/,\"\").split(\",\");for(e=d.length;e--;)d[e]=C(d[e])*o(a[\"stroke-width\"],this[\"stroke-width\"]);d=d.join(\",\")}}else if(c===\"width\")d=C(d);else if(c===\"align\")c=\"text-anchor\",d={left:\"start\",center:\"middle\",right:\"end\"}[d];else if(c===\"title\")e=g.getElementsByTagName(\"title\")[0],e||(e=y.createElementNS(za,\"title\"),g.appendChild(e)),e.textContent=d;c===\"strokeWidth\"&&\n(c=\"stroke-width\");if(c===\"stroke-width\"||c===\"stroke\"){this[c]=d;if(this.stroke&&this[\"stroke-width\"])v(g,\"stroke\",this.stroke),v(g,\"stroke-width\",this[\"stroke-width\"]),this.hasStroke=!0;else if(c===\"stroke-width\"&&d===0&&this.hasStroke)g.removeAttribute(\"stroke\"),this.hasStroke=!1;j=!0}this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&(m||(this.symbolAttr(a),m=!0),j=!0);if(l&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c))for(e=l.length;e--;)v(l[e],\nc,c===\"height\"?s(d-(l[e].cutHeight||0),0):d);if((c===\"width\"||c===\"height\")&&h===\"rect\"&&d<0)d=0;this[c]=d;c===\"text\"?(d!==this.textStr&&delete this.bBox,this.textStr=d,this.added&&i.buildText(this)):j||v(g,c,d)}p&&this.updateTransform()}return q},addClass:function(a){var b=this.element,c=v(b,\"class\")||\"\";c.indexOf(a)===-1&&v(b,\"class\",c+\" \"+a);return this},symbolAttr:function(a){var b=this;n(\"x,y,r,start,end,width,height,innerR,anchorX,anchorY\".split(\",\"),function(c){b[c]=o(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,\nb.y,b.width,b.height,b)})},clip:function(a){return this.attr(\"clip-path\",a?\"url(\"+this.renderer.url+\"#\"+a.id+\")\":S)},crisp:function(a,b,c,d,e){var f,g={},h={},i,a=a||this.strokeWidth||this.attr&&this.attr(\"stroke-width\")||0;i=t(a)%2/2;h.x=P(b||this.x||0)+i;h.y=P(c||this.y||0)+i;h.width=P((d||this.width||0)-2*i);h.height=P((e||this.height||0)-2*i);h.strokeWidth=a;for(f in h)this[f]!==h[f]&&(this[f]=g[f]=h[f]);return g},css:function(a){var b=this.element,c=a&&a.width&&b.nodeName.toLowerCase()===\"text\",\nd,e=\"\",f=function(a,b){return\"-\"+b.toLowerCase()};if(a&&a.color)a.fill=a.color;this.styles=a=r(this.styles,a);$&&c&&delete a.width;if(ta&&!Z)c&&delete a.width,K(this.element,a);else{for(d in a)e+=d.replace(/([A-Z])/g,f)+\":\"+a[d]+\";\";v(b,\"style\",e)}c&&this.added&&this.renderer.buildText(this);return this},on:function(a,b){var c=this,d=c.element;ib&&a===\"click\"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(oa.indexOf(\"Android\")===-1||\nDate.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d[\"on\"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},htmlCss:function(a){var b=this.element;if(b=a&&b.tagName===\"SPAN\"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=r(this.styles,a);K(this.element,a);return this},htmlGetBBox:function(){var a=\nthis.element,b=this.bBox;if(!b){if(a.nodeName===\"text\")a.style.position=\"absolute\";b=this.bBox={x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}return b},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||\"left\",h={left:0,center:0.5,right:1}[g],i=g&&g!==\"left\",j=this.shadows;K(b,{marginLeft:c,marginTop:d});j&&n(j,function(a){K(a,{marginLeft:c+1,marginTop:d+1})});\nthis.inverted&&n(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName===\"SPAN\"){var k,l,j=this.rotation,m;k=0;var p=1,q=0,ba;m=C(this.textWidth);var A=this.xCorr||0,L=this.yCorr||0,Sb=[j,g,b.innerHTML,this.textWidth].join(\",\");if(Sb!==this.cTT){u(j)&&(k=j*Ua,p=V(k),q=ca(k),this.setSpanRotation(j,q,p));k=o(this.elemWidth,b.offsetWidth);l=o(this.elemHeight,b.offsetHeight);if(k>m&&/[ \\-]/.test(b.textContent||b.innerText))K(b,{width:m+\"px\",display:\"block\",whiteSpace:\"normal\"}),k=m;m=a.fontMetrics(b.style.fontSize).b;\nA=p<0&&-k;L=q<0&&-l;ba=p*q<0;A+=q*m*(ba?1-h:h);L-=p*m*(j?ba?h:1-h:1);i&&(A-=k*h*(p<0?-1:1),j&&(L-=l*h*(q<0?-1:1)),K(b,{textAlign:g}));this.xCorr=A;this.yCorr=L}K(b,{left:e+A+\"px\",top:f+L+\"px\"});if(gb)l=b.offsetHeight;this.cTT=Sb}}else this.alignOnAdd=!0},setSpanRotation:function(a){var b={};b[ta?\"-ms-transform\":gb?\"-webkit-transform\":hb?\"MozTransform\":Nb?\"-o-transform\":\"\"]=b.transform=\"rotate(\"+a+\"deg)\";K(this.element,b)},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=\nthis.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation;e&&(a+=this.attr(\"width\"),b+=this.attr(\"height\"));a=[\"translate(\"+a+\",\"+b+\")\"];e?a.push(\"rotate(90) scale(-1,1)\"):f&&a.push(\"rotate(\"+f+\" \"+(this.x||0)+\" \"+(this.y||0)+\")\");(u(c)||u(d))&&a.push(\"scale(\"+o(c,1)+\" \"+o(d,1)+\")\");a.length&&v(this.element,\"transform\",a.join(\" \"))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=\na,this.alignByTranslate=b,!c||ea(c))this.alignTo=d=c||\"renderer\",ga(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=o(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+(a.y||0);if(d===\"right\"||d===\"center\")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?\"translateX\":\"x\"]=t(f);if(e===\"bottom\"||e===\"middle\")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?\"translateY\":\"y\"]=t(g);this[this.placed?\"animate\":\"attr\"](h);this.placed=\n!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d=this.rotation;c=this.element;var e=this.styles,f=d*Ua;if(!a){if(c.namespaceURI===za||b.forExport){try{a=c.getBBox?r({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(g){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){b=a.width;c=a.height;if(ta&&e&&e.fontSize===\"11px\"&&c.toPrecision(3)===\"22.7\")a.height=c=14;if(d)a.width=N(c*ca(f))+N(b*V(f)),a.height=N(c*V(f))+N(b*ca(f))}this.bBox=\na}return a},show:function(){return this.attr({visibility:\"visible\"})},hide:function(){return this.attr({visibility:\"hidden\"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=v(f,\"zIndex\"),h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=C(g);if(c.handleZ)for(c=0;c<e.length;c++)if(a=\ne[c],b=v(a,\"zIndex\"),a!==f&&(C(b)>g||!u(g)&&u(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;z(this,\"add\");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName===\"SPAN\"&&b.parentNode,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;Wa(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();\na.stops=null}a.safeRemoveChild(b);for(c&&n(c,function(b){a.safeRemoveChild(b)});d&&d.childNodes.length===0;)b=d.parentNode,a.safeRemoveChild(d),d=b;a.alignTo&&ga(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,j,k;if(a){i=o(a.width,3);j=(a.opacity||0.15)/i;k=this.parentInverted?\"(-1,-1)\":\"(\"+o(a.offsetX,1)+\", \"+o(a.offsetY,1)+\")\";for(e=1;e<=i;e++){f=g.cloneNode(0);h=i*2+1-2*e;v(f,{isShadow:\"true\",stroke:a.color||\"black\",\"stroke-opacity\":j*\ne,\"stroke-width\":h,transform:\"translate\"+k,fill:S});if(c)v(f,\"height\",s(v(f,\"height\")-h,0)),f.cutHeight=h;b?b.element.appendChild(f):g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this}};var Ha=function(){this.init.apply(this,arguments)};Ha.prototype={Element:wa,init:function(a,b,c,d){var e=location,f,g;f=this.createElement(\"svg\").attr({version:\"1.1\"});g=f.element;a.appendChild(g);a.innerHTML.indexOf(\"xmlns\")===-1&&v(g,\"xmlns\",za);this.isSVG=!0;this.box=g;this.boxWrapper=f;this.alignedObjects=\n[];this.url=(hb||gb)&&y.getElementsByTagName(\"base\").length?e.href.replace(/#.*?$/,\"\").replace(/([\\('\\)])/g,\"\\\\$1\").replace(/ /g,\"%20\"):\"\";this.createElement(\"desc\").add().element.appendChild(y.createTextNode(\"Created with Highcharts 3.0.6\"));this.defs=this.createElement(\"defs\").add();this.forExport=d;this.gradients={};this.setSize(b,c,!1);var h;if(hb&&a.getBoundingClientRect)this.subPixelFix=b=function(){K(a,{left:0,top:0});h=a.getBoundingClientRect();K(a,{left:xa(h.left)-h.left+\"px\",top:xa(h.top)-\nh.top+\"px\"})},b(),J(O,\"resize\",b)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Ka(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&aa(O,\"resize\",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},buildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=o(a.textStr,\n\"\").toString().replace(/<(b|strong)>/g,'<span style=\"font-weight:bold\">').replace(/<(i|em)>/g,'<span style=\"font-style:italic\">').replace(/<a/g,\"<span\").replace(/<\\/(b|strong|i|em|a)>/g,\"</span>\").split(/<br.*?>/g),f=b.childNodes,g=/style=\"([^\"]+)\"/,h=/href=\"(http[^\"]+)\"/,i=v(b,\"x\"),j=a.styles,k=j&&j.width&&C(j.width),l=j&&j.lineHeight,m=f.length;m--;)b.removeChild(f[m]);k&&!a.added&&this.box.appendChild(b);e[e.length-1]===\"\"&&e.pop();n(e,function(e,f){var m,o=0,e=e.replace(/<span/g,\"|||<span\").replace(/<\\/span>/g,\n\"</span>|||\");m=e.split(\"|||\");n(m,function(e){if(e!==\"\"||m.length===1){var p={},n=y.createElementNS(za,\"tspan\"),s;g.test(e)&&(s=e.match(g)[1].replace(/(;| |^)color([ :])/,\"$1fill$2\"),v(n,\"style\",s));h.test(e)&&!d&&(v(n,\"onclick\",'location.href=\"'+e.match(h)[1]+'\"'),K(n,{cursor:\"pointer\"}));e=(e.replace(/<(.|\\n)*?>/g,\"\")||\" \").replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\");if(e!==\" \"&&(n.appendChild(y.createTextNode(e)),o?p.dx=0:p.x=i,v(n,p),!o&&f&&(!Z&&d&&K(n,{display:\"block\"}),v(n,\"dy\",l||c.fontMetrics(/px$/.test(n.style.fontSize)?\nn.style.fontSize:j.fontSize).h,gb&&n.offsetHeight)),b.appendChild(n),o++,k))for(var e=e.replace(/([^\\^])-/g,\"$1- \").split(\" \"),u,t,p=a._clipHeight,E=[],w=C(l||16),B=1;e.length||E.length;)delete a.bBox,u=a.getBBox(),t=u.width,u=t>k,!u||e.length===1?(e=E,E=[],e.length&&(B++,p&&B*w>p?(e=[\"...\"],a.attr(\"title\",a.textStr)):(n=y.createElementNS(za,\"tspan\"),v(n,{dy:w,x:i}),s&&v(n,\"style\",s),b.appendChild(n),t>k&&(k=t)))):(n.removeChild(n.firstChild),E.unshift(e.pop())),e.length&&n.appendChild(y.createTextNode(e.join(\" \").replace(/- /g,\n\"-\")))}})})},button:function(a,b,c,d,e,f,g,h){var i=this.label(a,b,c,null,null,null,null,null,\"button\"),j=0,k,l,m,p,q,n,a={x1:0,y1:0,x2:0,y2:1},e=x({\"stroke-width\":1,stroke:\"#CCCCCC\",fill:{linearGradient:a,stops:[[0,\"#FEFEFE\"],[1,\"#F6F6F6\"]]},r:2,padding:5,style:{color:\"black\"}},e);m=e.style;delete e.style;f=x(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#FFF\"],[1,\"#ACF\"]]}},f);p=f.style;delete f.style;g=x(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#9BD\"],[1,\"#CDF\"]]}},g);q=g.style;\ndelete g.style;h=x(e,{style:{color:\"#CCC\"}},h);n=h.style;delete h.style;J(i.element,ta?\"mouseover\":\"mouseenter\",function(){j!==3&&i.attr(f).css(p)});J(i.element,ta?\"mouseout\":\"mouseleave\",function(){j!==3&&(k=[e,f,g][j],l=[m,p,q][j],i.attr(k).css(l))});i.setState=function(a){(i.state=j=a)?a===2?i.attr(g).css(q):a===3&&i.attr(h).css(n):i.attr(e).css(m)};return i.on(\"click\",function(){j!==3&&d.call(i)}).attr(e).css(r({cursor:\"default\"},m))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=t(a[1])-b%\n2/2);a[2]===a[5]&&(a[2]=a[5]=t(a[2])+b%2/2);return a},path:function(a){var b={fill:S};Ia(a)?b.d=a:T(a)&&r(b,a);return this.createElement(\"path\").attr(b)},circle:function(a,b,c){a=T(a)?a:{x:a,y:b,r:c};return this.createElement(\"circle\").attr(a)},arc:function(a,b,c,d,e,f){if(T(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol(\"arc\",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){e=T(a)?a.r:e;e=this.createElement(\"rect\").attr({rx:e,ry:e,\nfill:S});return e.attr(T(a)?a:e.crisp(f,a,b,s(c,0),s(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[o(c,!0)?\"animate\":\"attr\"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement(\"g\");return u(a)?b.attr({\"class\":\"highcharts-\"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:S};arguments.length>1&&r(f,{x:b,y:c,width:d,height:e});f=this.createElement(\"image\").attr(f);f.element.setAttributeNS?f.element.setAttributeNS(\"http://www.w3.org/1999/xlink\",\n\"href\",a):f.element.setAttribute(\"hc-svg-href\",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(t(b),t(c),d,e,f),i=/^url\\((.*?)\\)$/,j,k;if(h)g=this.path(h),r(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&r(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),a.alignByTranslate||a.translate(t((d-b[0])/2),t((e-b[1])/2)))},j=a.match(i)[1],a=Pb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),U(\"img\",{onload:function(){k(g,\nPb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return[\"M\",a+c/2,b,\"C\",a+c+e,b,a+c+e,b+d,a+c/2,b+d,\"C\",a-e,b+d,a-e,b,a+c/2,b,\"Z\"]},square:function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c,b+d,a,b+d,\"Z\"]},triangle:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",a+c,b+d,a,b+d,\"Z\"]},\"triangle-down\":function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c/2,b+d,\"Z\"]},diamond:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",a+c,b+d/2,a+c/2,b+d,a,b+d/2,\"Z\"]},arc:function(a,b,c,d,\ne){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=V(f),j=ca(f),k=V(g),g=ca(g),e=e.end-f<ya?0:1;return[\"M\",a+c*i,b+c*j,\"A\",c,c,0,e,1,a+c*k,b+c*g,h?\"M\":\"L\",a+d*k,b+d*g,\"A\",d,d,0,e,0,a+d*i,b+d*j,h?\"\":\"Z\"]}},clipRect:function(a,b,c,d){var e=\"highcharts-\"+zb++,f=this.createElement(\"clipPath\").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},color:function(a,b,c){var d=this,e,f=/^rgba/,g,h,i,j,k,l,m,p=[];a&&a.linearGradient?g=\"linearGradient\":a&&a.radialGradient&&\n(g=\"radialGradient\");if(g){c=a[g];h=d.gradients;j=a.stops;b=b.radialReference;Ia(c)&&(a[g]=c={x1:c[0],y1:c[1],x2:c[2],y2:c[3],gradientUnits:\"userSpaceOnUse\"});g===\"radialGradient\"&&b&&!u(c.gradientUnits)&&(c=x(c,{cx:b[0]-b[2]/2+c.cx*b[2],cy:b[1]-b[2]/2+c.cy*b[2],r:c.r*b[2],gradientUnits:\"userSpaceOnUse\"}));for(m in c)m!==\"id\"&&p.push(m,c[m]);for(m in j)p.push(j[m]);p=p.join(\",\");h[p]?a=h[p].id:(c.id=a=\"highcharts-\"+zb++,h[p]=i=d.createElement(g).attr(c).add(d.defs),i.stops=[],n(j,function(a){f.test(a[1])?\n(e=ra(a[1]),k=e.get(\"rgb\"),l=e.get(\"a\")):(k=a[1],l=1);a=d.createElement(\"stop\").attr({offset:a[0],\"stop-color\":k,\"stop-opacity\":l}).add(i);i.stops.push(a)}));return\"url(\"+d.url+\"#\"+a+\")\"}else return f.test(a)?(e=ra(a),v(b,c+\"-opacity\",e.get(\"a\")),e.get(\"rgb\")):(b.removeAttribute(c+\"-opacity\"),a)},text:function(a,b,c,d){var e=M.chart.style,f=$||!Z&&this.forExport;if(d&&!this.forExport)return this.html(a,b,c);b=t(o(b,0));c=t(o(c,0));a=this.createElement(\"text\").attr({x:b,y:c,text:a}).css({fontFamily:e.fontFamily,\nfontSize:e.fontSize});f&&a.css({position:\"absolute\"});a.x=b;a.y=c;return a},html:function(a,b,c){var d=M.chart.style,e=this.createElement(\"span\"),f=e.attrSetters,g=e.element,h=e.renderer;f.text=function(a){a!==g.innerHTML&&delete this.bBox;g.innerHTML=a;return!1};f.x=f.y=f.align=function(a,b){b===\"align\"&&(b=\"textAlign\");e[b]=a;e.htmlUpdateTransform();return!1};e.attr({text:a,x:t(b),y:t(c)}).css({position:\"absolute\",whiteSpace:\"nowrap\",fontFamily:d.fontFamily,fontSize:d.fontSize});e.css=e.htmlCss;\nif(h.isSVG)e.add=function(a){var b,c=h.box.parentNode,d=[];if(a){if(b=a.div,!b){for(;a;)d.push(a),a=a.parentGroup;n(d.reverse(),function(a){var d;b=a.div=a.div||U(Ea,{className:v(a.element,\"class\")},{position:\"absolute\",left:(a.translateX||0)+\"px\",top:(a.translateY||0)+\"px\"},b||c);d=b.style;r(a.attrSetters,{translateX:function(a){d.left=a+\"px\"},translateY:function(a){d.top=a+\"px\"},visibility:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(g);e.added=!0;e.alignOnAdd&&e.htmlUpdateTransform();return e};\nreturn e},fontMetrics:function(a){var a=C(a||11),a=a<24?a+4:t(a*1.2),b=t(a*0.8);return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a,b;a=o.element.style;L=(Oa===void 0||la===void 0||q.styles.textAlign)&&o.getBBox();q.width=(Oa||L.width||0)+2*da+kb;q.height=(la||L.height||0)+2*da;v=da+p.fontMetrics(a&&a.fontSize).b;if(C){if(!A)a=t(-s*da),b=h?-v:0,q.box=A=d?p.symbol(d,a,b,q.width,q.height):p.rect(a,b,q.width,q.height,0,lb[Rb]),A.add(q);A.isImg||A.attr(x({width:q.width,height:q.height},\nlb));lb=null}}function k(){var a=q.styles,a=a&&a.textAlign,b=kb+da*(1-s),c;c=h?0:v;if(u(Oa)&&(a===\"center\"||a===\"right\"))b+={center:0.5,right:1}[a]*(Oa-L.width);(b!==o.x||c!==o.y)&&o.attr({x:b,y:c});o.x=b;o.y=c}function l(a,b){A?A.attr(a,b):lb[a]=b}function m(){o.add(q);q.attr({text:a,x:b,y:c});A&&u(e)&&q.attr({anchorX:e,anchorY:f})}var p=this,q=p.g(i),o=p.text(\"\",0,0,g).attr({zIndex:1}),A,L,s=0,da=3,kb=0,Oa,la,E,H,B=0,lb={},v,g=q.attrSetters,C;J(q,\"add\",m);g.width=function(a){Oa=a;return!1};g.height=\nfunction(a){la=a;return!1};g.padding=function(a){u(a)&&a!==da&&(da=a,k());return!1};g.paddingLeft=function(a){u(a)&&a!==kb&&(kb=a,k());return!1};g.align=function(a){s={left:0,center:0.5,right:1}[a];return!1};g.text=function(a,b){o.attr(b,a);j();k();return!1};g[Rb]=function(a,b){C=!0;B=a%2/2;l(b,a);return!1};g.stroke=g.fill=g.r=function(a,b){b===\"fill\"&&(C=!0);l(b,a);return!1};g.anchorX=function(a,b){e=a;l(b,a+B-E);return!1};g.anchorY=function(a,b){f=a;l(b,a-H);return!1};g.x=function(a){q.x=a;a-=s*\n((Oa||L.width)+da);E=t(a);q.attr(\"translateX\",E);return!1};g.y=function(a){H=q.y=t(a);q.attr(\"translateY\",H);return!1};var y=q.css;return r(q,{css:function(a){if(a){var b={},a=x(a);n(\"fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow\".split(\",\"),function(c){a[c]!==w&&(b[c]=a[c],delete a[c])});o.css(b)}return y.call(q,a)},getBBox:function(){return{width:L.width+2*da,height:L.height+2*da,x:L.x-da,y:L.y-da}},shadow:function(a){A&&A.shadow(a);return q},destroy:function(){aa(q,\n\"add\",m);aa(q.element,\"mouseenter\");aa(q.element,\"mouseleave\");o&&(o=o.destroy());A&&(A=A.destroy());wa.prototype.destroy.call(q);q=p=j=k=l=m=null}})}};Va=Ha;var F;if(!Z&&!$){Highcharts.VMLElement=F={init:function(a,b){var c=[\"<\",b,' filled=\"f\" stroked=\"f\"'],d=[\"position: \",\"absolute\",\";\"],e=b===Ea;(b===\"shape\"||e)&&d.push(\"left:0;top:0;width:1px;height:1px;\");d.push(\"visibility: \",e?\"hidden\":\"visible\");c.push(' style=\"',d.join(\"\"),'\"/>');if(b)c=e||b===\"span\"||b===\"img\"?c.join(\"\"):a.prepVML(c),this.element=\nU(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();z(this,\"add\");return this},updateTransform:wa.prototype.htmlUpdateTransform,setSpanRotation:function(a,b,c){K(this.element,{filter:a?[\"progid:DXImageTransform.Microsoft.Matrix(M11=\",c,\", M12=\",-b,\", M21=\",b,\", M22=\",c,\", sizingMethod='auto expand')\"].join(\"\"):\nS})},pathToVML:function(a){for(var b=a.length,c=[],d;b--;)if(sa(a[b]))c[b]=t(a[b]*10)-5;else if(a[b]===\"Z\")c[b]=\"x\";else if(c[b]=a[b],a.isArc&&(a[b]===\"wa\"||a[b]===\"at\"))d=a[b]===\"wa\"?1:-1,c[b+5]===c[b+7]&&(c[b+7]-=d),c[b+6]===c[b+8]&&(c[b+8]-=d);return c.join(\" \")||\"x\"},attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,j=this.symbolName,k,l=this.shadows,m,p=this.attrSetters,q=this;ea(a)&&u(b)&&(c=a,a={},a[c]=b);if(ea(a))c=a,q=c===\"strokeWidth\"||c===\"stroke-width\"?\nthis.strokeweight:this[c];else for(c in a)if(d=a[c],m=!1,e=p[c]&&p[c].call(this,d,c),e!==!1&&d!==null){e!==w&&(d=e);if(j&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))k||(this.symbolAttr(a),k=!0),m=!0;else if(c===\"d\"){d=d||[];this.d=d.join(\" \");f.path=d=this.pathToVML(d);if(l)for(e=l.length;e--;)l[e].path=l[e].cutOff?this.cutOffPath(d,l[e].cutOff):d;m=!0}else if(c===\"visibility\"){if(l)for(e=l.length;e--;)l[e].style[c]=d;h===\"DIV\"&&(d=d===\"hidden\"?\"-999em\":0,fb||(g[c]=d?\"visible\":\n\"hidden\"),c=\"top\");g[c]=d;m=!0}else if(c===\"zIndex\")d&&(g[c]=d),m=!0;else if(qa(c,[\"x\",\"y\",\"width\",\"height\"])!==-1)this[c]=d,c===\"x\"||c===\"y\"?c={x:\"left\",y:\"top\"}[c]:d=s(0,d),this.updateClipping?(this[c]=d,this.updateClipping()):g[c]=d,m=!0;else if(c===\"class\"&&h===\"DIV\")f.className=d;else if(c===\"stroke\")d=i.color(d,f,c),c=\"strokecolor\";else if(c===\"stroke-width\"||c===\"strokeWidth\")f.stroked=d?!0:!1,c=\"strokeweight\",this[c]=d,sa(d)&&(d+=\"px\");else if(c===\"dashstyle\")(f.getElementsByTagName(\"stroke\")[0]||\nU(i.prepVML([\"<stroke/>\"]),null,null,f))[c]=d||\"solid\",this.dashstyle=d,m=!0;else if(c===\"fill\")if(h===\"SPAN\")g.color=d;else{if(h!==\"IMG\")f.filled=d!==S?!0:!1,d=i.color(d,f,c,this),c=\"fillcolor\"}else if(c===\"opacity\")m=!0;else if(h===\"shape\"&&c===\"rotation\")this[c]=f.style[c]=d,f.style.left=-t(ca(d*Ua)+1)+\"px\",f.style.top=t(V(d*Ua))+\"px\";else if(c===\"translateX\"||c===\"translateY\"||c===\"rotation\")this[c]=d,this.updateTransform(),m=!0;else if(c===\"text\")this.bBox=null,f.innerHTML=d,m=!0;m||(fb?f[c]=\nd:v(f,c,d))}return q},clip:function(a){var b=this,c;a?(c=a.members,ga(c,b),c.push(b),b.destroyClip=function(){ga(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:fb?\"inherit\":\"rect(auto)\"});return b.css(a)},css:wa.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Ta(a)},destroy:function(){this.destroyClip&&this.destroyClip();return wa.prototype.destroy.apply(this)},on:function(a,b){this.element[\"on\"+a]=function(){var a=O.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,\nb){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=C(a[c-2])-10*b;return a.join(\" \")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,l,m,p,q;k&&typeof k.value!==\"string\"&&(k=\"x\");m=k;if(a){p=o(a.width,3);q=(a.opacity||0.15)/p;for(e=1;e<=3;e++){l=p*2+1-2*e;c&&(m=this.cutOffPath(k.value,l+0.5));j=['<shape isShadow=\"true\" strokeweight=\"',l,'\" filled=\"false\" path=\"',m,'\" coordsize=\"10 10\" style=\"',f.style.cssText,'\" />'];h=U(g.prepVML(j),null,\n{left:C(i.left)+o(a.offsetX,1),top:C(i.top)+o(a.offsetY,1)});if(c)h.cutOff=l+1;j=['<stroke color=\"',a.color||\"black\",'\" opacity=\"',q*e,'\"/>'];U(g.prepVML(j),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this}};F=ha(wa,F);var ma={Element:F,isIE8:oa.indexOf(\"MSIE 8.0\")>-1,init:function(a,b,c){var d,e;this.alignedObjects=[];d=this.createElement(Ea);e=d.element;e.style.position=\"relative\";a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=\nd;this.setSize(b,c,!1);y.namespaces.hcv||(y.namespaces.add(\"hcv\",\"urn:schemas-microsoft-com:vml\"),(y.styleSheets.length?y.styleSheets[0]:y.createStyleSheet()).cssText+=\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \")},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=T(a);return r(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=\na.element,c=b.nodeName,a=a.inverted,d=this.top-(c===\"shape\"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:\"rect(\"+t(a?e:d)+\"px,\"+t(a?f:b)+\"px,\"+t(a?b:f)+\"px,\"+t(a?d:e)+\"px)\"};!a&&fb&&c===\"DIV\"&&r(d,{width:b+\"px\",height:f+\"px\"});return d},updateClipping:function(){n(e.members,function(a){a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=S;a&&a.linearGradient?i=\"gradient\":a&&a.radialGradient&&(i=\"pattern\");if(i){var k,l,m=a.linearGradient||a.radialGradient,\np,q,o,A,L,s=\"\",a=a.stops,u,t=[],w=function(){h=['<fill colors=\"'+t.join(\",\")+'\" opacity=\"',o,'\" o:opacity2=\"',q,'\" type=\"',i,'\" ',s,'focus=\"100%\" method=\"any\" />'];U(e.prepVML(h),null,null,b)};p=a[0];u=a[a.length-1];p[0]>0&&a.unshift([0,p[1]]);u[0]<1&&a.push([1,u[1]]);n(a,function(a,b){g.test(a[1])?(f=ra(a[1]),k=f.get(\"rgb\"),l=f.get(\"a\")):(k=a[1],l=1);t.push(a[0]*100+\"% \"+k);b?(o=l,A=k):(q=l,L=k)});if(c===\"fill\")if(i===\"gradient\")c=m.x1||m[0]||0,a=m.y1||m[1]||0,p=m.x2||m[2]||0,m=m.y2||m[3]||0,s='angle=\"'+\n(90-R.atan((m-a)/(p-c))*180/ya)+'\"',w();else{var j=m.r,r=j*2,E=j*2,H=m.cx,B=m.cy,x=b.radialReference,v,j=function(){x&&(v=d.getBBox(),H+=(x[0]-v.x)/v.width-0.5,B+=(x[1]-v.y)/v.height-0.5,r*=x[2]/v.width,E*=x[2]/v.height);s='src=\"'+M.global.VMLRadialGradientURL+'\" size=\"'+r+\",\"+E+'\" origin=\"0.5,0.5\" position=\"'+H+\",\"+B+'\" color2=\"'+L+'\" ';w()};d.added?j():J(d,\"add\",j);j=A}else j=k}else if(g.test(a)&&b.tagName!==\"IMG\")f=ra(a),h=[\"<\",c,' opacity=\"',f.get(\"a\"),'\"/>'],U(this.prepVML(h),null,null,b),j=\nf.get(\"rgb\");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type=\"solid\";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join(\"\");b?(a=a.replace(\"/>\",' xmlns=\"urn:schemas-microsoft-com:vml\" />'),a=a.indexOf('style=\"')===-1?a.replace(\"/>\",' style=\"display:inline-block;behavior:url(#default#VML);\" />'):a.replace('style=\"','style=\"display:inline-block;behavior:url(#default#VML);')):a=a.replace(\"<\",\"<hcv:\");return a},text:Ha.prototype.html,path:function(a){var b={coordsize:\"10 10\"};\nIa(a)?b.d=a:T(a)&&r(b,a);return this.createElement(\"shape\").attr(b)},circle:function(a,b,c){var d=this.symbol(\"circle\");if(T(a))c=a.r,b=a.y,a=a.x;d.isCircle=!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:\"highcharts-\"+a,\"class\":\"highcharts-\"+a});return this.createElement(Ea).attr(b)},image:function(a,b,c,d,e){var f=this.createElement(\"img\").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){var g=this.symbol(\"rect\");g.r=\nT(a)?a.r:e;return g.attr(T(a)?a:g.crisp(f,a,b,s(c,0),s(d,0)))},invertChild:function(a,b){var c=b.style;K(a,{flip:\"x\",left:C(c.width)-1,top:C(c.height)-1,rotation:-90})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=V(f),i=ca(f),j=V(g),k=ca(g);if(g-f===0)return[\"x\"];f=[\"wa\",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push(\"e\",\"M\",a,b);f.push(\"at\",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,\"x\",\"e\");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);\ne&&e.isCircle&&(a-=c/2,b-=d/2);return[\"wa\",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,\"e\"]},rect:function(a,b,c,d,e){var f=a+c,g=b+d,h;!u(e)||!e.r?f=Ha.prototype.symbols.square.apply(0,arguments):(h=I(e.r,c,d),f=[\"M\",a+h,b,\"L\",f-h,b,\"wa\",f-2*h,b,f,b+2*h,f-h,b,f,b+h,\"L\",f,g-h,\"wa\",f-2*h,g-2*h,f,g,f,g-h,f-h,g,\"L\",a+h,g,\"wa\",a,g-2*h,a+2*h,g,a+h,g,a,g-h,\"L\",a,b+h,\"wa\",a,b,a+2*h,b+2*h,a,b+h,a+h,b,\"x\",\"e\"]);return f}}};Highcharts.VMLRenderer=F=function(){this.init.apply(this,arguments)};F.prototype=x(Ha.prototype,\nma);Va=F}var Tb;if($)Highcharts.CanVGRenderer=F=function(){za=\"http://www.w3.org/1999/xhtml\"},F.prototype.symbols={},Tb=function(){function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Vb(d,a);b.push(c)}}}(),Va=F;Ma.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=a.series[0]&&a.series[0].names,g=this.pos,h=b.labels,i=a.tickPositions,d=d&&e&&!h.step&&!h.staggerLines&&!h.rotation&&c.plotWidth/i.length||\n!d&&(c.margin[3]||c.chartWidth*0.33),j=g===i[0],k=g===i[i.length-1],l,f=e?o(e[g],f&&f[g],g):g,e=this.label,m=i.info;a.isDatetimeAxis&&m&&(l=b.dateTimeLabelFormats[m.higherRanks[g]||m.unitName]);this.isFirst=j;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:j,isLast:k,dateTimeLabelFormat:l,value:a.isLog?ia(fa(f)):f});g=d&&{width:s(1,t(d-2*(h.padding||10)))+\"px\"};g=r(g,h.style);if(u(e))e&&e.attr({text:b}).css(g);else{l={align:a.labelAlign};if(sa(h.rotation))l.rotation=h.rotation;if(d&&\nh.ellipsis)l._clipHeight=a.len/i.length;this.label=u(b)&&h.enabled?c.renderer.text(b,0,0,h.useHTML).attr(l).css(g).add(a.labelGroup):null}},getLabelSize:function(){var a=this.label,b=this.axis;return a?(this.labelBBox=a.getBBox())[b.horiz?\"height\":\"width\"]:0},getLabelSides:function(){var a=this.axis,b=this.labelBBox.width,a=b*{left:0,center:0.5,right:1}[a.labelAlign]-a.options.labels.x;return[-a,b-a]},handleOverflow:function(a,b){var c=!0,d=this.axis,e=d.chart,f=this.isFirst,g=this.isLast,h=b.x,i=\nd.reversed,j=d.tickPositions;if(f||g){var k=this.getLabelSides(),l=k[0],k=k[1],e=e.plotLeft,m=e+d.len,j=(d=d.ticks[j[a+(f?1:-1)]])&&d.label.xy&&d.label.xy.x+d.getLabelSides()[f?0:1];f&&!i||g&&i?h+l<e&&(h=e-l,d&&h+k>j&&(c=!1)):h+k>m&&(h=m-k,d&&h+l<j&&(c=!1));b.x=h}return c},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a?\ng-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,l=i.staggerLines,m=i.chart.renderer.fontMetrics(e.style.fontSize).b,p=e.rotation,a=a+e.x-(f&&d?f*j*(k?-1:1):0),b=b+e.y-(f&&!d?f*j*(k?1:-1):0);p&&i.side===2&&(b-=m-m*V(p*Ua));!u(e.y)&&!p&&(b+=m-c.getBBox().height/2);l&&(b+=g/(h||1)%l*(i.labelOffset/l));return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine([\"M\",a,b,\"L\",\na+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,j=this.pos,k=e.labels,l=this.gridLine,m=h?h+\"Grid\":\"grid\",p=h?h+\"Tick\":\"tick\",q=e[m+\"LineWidth\"],n=e[m+\"LineColor\"],A=e[m+\"LineDashStyle\"],s=e[p+\"Length\"],m=e[p+\"Width\"]||0,u=e[p+\"Color\"],t=e[p+\"Position\"],p=this.mark,r=k.step,v=!0,x=d.tickmarkOffset,E=this.getPosition(g,j,x,b),H=E.x,E=E.y,B=g&&H===d.pos+d.len||!g&&E===d.pos?-1:1,C=d.staggerLines;this.isActive=!0;if(q){j=\nd.getPlotLinePath(j+x,q*B,b,!0);if(l===w){l={stroke:n,\"stroke-width\":q};if(A)l.dashstyle=A;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=q?f.path(j).attr(l).add(d.gridGroup):null}if(!b&&l&&j)l[this.isNew?\"attr\":\"animate\"]({d:j,opacity:c})}if(m&&s)t===\"inside\"&&(s=-s),d.opposite&&(s=-s),b=this.getMarkPath(H,E,s,m*B,g,f),p?p.animate({d:b,opacity:c}):this.mark=f.path(b).attr({stroke:u,\"stroke-width\":m,opacity:c}).add(d.axisGroup);if(i&&!isNaN(H))i.xy=E=this.getLabelPosition(H,E,i,g,k,x,a,r),this.isFirst&&\n!this.isLast&&!o(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!o(e.showLastLabel,1)?v=!1:!C&&g&&k.overflow===\"justify\"&&!this.handleOverflow(a,E)&&(v=!1),r&&a%r&&(v=!1),v&&!isNaN(E.y)?(E.opacity=c,i[this.isNew?\"attr\":\"animate\"](E),this.isNew=!1):i.attr(\"y\",-9999)},destroy:function(){Ka(this,this.axis)}};vb.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,g=a.label,h=e.width,i=e.to,j=e.from,k=u(j)&&u(i),l=e.value,m=e.dashStyle,p=a.svgElem,q=\n[],n,A=e.color,L=e.zIndex,t=e.events,w=b.chart.renderer;b.isLog&&(j=na(j),i=na(i),l=na(l));if(h){if(q=b.getPlotLinePath(l,h),d={stroke:A,\"stroke-width\":h},m)d.dashstyle=m}else if(k){if(j=s(j,b.min-d),i=I(i,b.max+d),q=b.getPlotBandPath(j,i,e),d={fill:A},e.borderWidth)d.stroke=e.borderColor,d[\"stroke-width\"]=e.borderWidth}else return;if(u(L))d.zIndex=L;if(p)q?p.animate({d:q},null,p.onGetPath):(p.hide(),p.onGetPath=function(){p.show()});else if(q&&q.length&&(a.svgElem=p=w.path(q).attr(d).add(),t))for(n in e=\nfunction(b){p.on(b,function(c){t[b].apply(a,[c])})},t)e(n);if(f&&u(f.text)&&q&&q.length&&b.width>0&&b.height>0){f=x({align:c&&k&&\"center\",x:c?!k&&4:10,verticalAlign:!c&&k&&\"middle\",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g)a.label=g=w.text(f.text,0,0,f.useHTML).attr({align:f.textAlign||f.align,rotation:f.rotation,zIndex:L}).css(f.style).add();b=[q[1],q[4],o(q[6],q[1])];q=[q[2],q[5],o(q[7],q[2])];c=Ja(b);k=Ja(q);g.align(f,!1,{x:c,y:k,width:va(b)-c,height:va(q)-k});g.show()}else g&&g.hide();return a},\ndestroy:function(){ga(this.axis.plotLinesAndBands,this);delete this.axis;Ka(this)}};Mb.prototype={destroy:function(){Ka(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ca(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:\"hidden\"}):this.label=this.axis.chart.renderer.text(c,0,0,b.useHTML).css(b.style).attr({align:this.textAlign,rotation:b.rotation,visibility:\"hidden\"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,\ng=c.translate(this.percent?100:this.total,0,0,0,1),c=c.translate(0),c=N(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e.attr({visibility:this.options.crop===!1||d.isInsidePlot(f.x,f.y)?Z?\"inherit\":\"visible\":\"hidden\"})}};db.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:\"%H:%M:%S.%L\",second:\"%H:%M:%S\",minute:\"%H:%M\",hour:\"%H:%M\",day:\"%e. %b\",week:\"%e. %b\",\nmonth:\"%b '%y\",year:\"%Y\"},endOnTick:!1,gridLineColor:\"#C0C0C0\",labels:G,lineColor:\"#C0D0E0\",lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:\"#E0E0E0\",minorGridLineWidth:1,minorTickColor:\"#A0A0A0\",minorTickLength:2,minorTickPosition:\"outside\",startOfWeek:1,startOnTick:!1,tickColor:\"#C0D0E0\",tickLength:5,tickmarkPlacement:\"between\",tickPixelInterval:100,tickPosition:\"outside\",tickWidth:1,title:{align:\"middle\",style:{color:\"#4d759e\",fontWeight:\"bold\"}},type:\"linear\"},defaultYAxisOptions:{endOnTick:!0,\ngridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:\"Values\"},stackLabels:{enabled:!1,formatter:function(){return Aa(this.total,-1)},style:G.style}},defaultLeftAxisOptions:{labels:{x:-8,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:8,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:14},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-5},\ntitle:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.xOrY=(this.isXAxis=c)?\"x\":\"y\";this.opposite=b.opposite;this.side=this.horiz?this.opposite?0:2:this.opposite?1:3;this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e===\"category\";this.isLog=e===\"logarithmic\";this.isDatetimeAxis=\ne===\"datetime\";this.isLinked=u(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement===\"between\"?0.5:0;this.ticks={};this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.stackExtremes={};this.min=this.max=null;var f,d=this.options.events;qa(this,a.axes)===-1&&(a.axes.push(this),a[c?\"xAxis\":\"yAxis\"].push(this));this.series=this.series||\n[];if(a.inverted&&c&&this.reversed===w)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)J(this,f,d[f]);if(this.isLog)this.val2lin=na,this.lin2val=fa},setOptions:function(a){this.options=x(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],x(M[this.isXAxis?\"xAxis\":\"yAxis\"],a))},update:function(a,b){var c=this.chart,a=c.options[this.xOrY+\n\"Axis\"][this.options.index]=x(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.userMin=this.userMax=w;this.init(c,r(a,{events:w}));c.isDirtyBox=!0;o(b,!0)&&c.redraw()},remove:function(a){var b=this.chart,c=this.xOrY+\"Axis\";n(this.series,function(a){a.remove(!1)});ga(b.axes,this);ga(b[c],this);b.options[c].splice(this.options.index,1);n(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;o(a,!0)&&b.redraw()},defaultLabelFormatter:function(){var a=this.axis,b=this.value,\nc=a.categories,d=this.dateTimeLabelFormat,e=M.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ca(h,this);else if(c)g=b;else if(d)g=Xa(d,b);else if(f&&a>=1E3)for(;f--&&g===w;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Aa(b/c,-1)+e[f]);g===w&&(g=b>=1E3?Aa(b,0):Aa(b,-1));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.stackExtremes={};a.buildStacks();n(a.series,function(c){if(c.visible||!b.options.chart.ignoreHiddenSeries){var d;\nd=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=I(o(a.dataMin,d[0]),Ja(d)),a.dataMax=s(o(a.dataMax,d[0]),va(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(u(c)&&u(e))a.dataMin=I(o(a.dataMin,c),c),a.dataMax=s(o(a.dataMax,e),e);if(u(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMax<d)a.dataMax=d,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e,f){var g=this.len,h=1,i=0,j=d?this.oldTransA:this.transA,\nd=d?this.oldMin:this.min,k=this.minPixelPadding,e=(this.options.ordinal||this.isLog&&e)&&this.lin2val;if(!j)j=this.transA;c&&(h*=-1,i=g);this.reversed&&(h*=-1,i-=h*g);b?(a=a*h+i,a-=k,a=a/j+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),f===\"between\"&&(f=0.5),a=h*(a-d)*j+i+h*k+(sa(f)?j*f*this.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,\nb,c,d){var e=this.chart,f=this.left,g=this.top,h,i,j,a=this.translate(a,null,null,c),k=c&&e.oldChartHeight||e.chartHeight,l=c&&e.oldChartWidth||e.chartWidth,m;h=this.transB;c=i=t(a+h);h=j=t(k-a-h);if(isNaN(a))m=!0;else if(this.horiz){if(h=g,j=k-this.bottom,c<f||c>f+this.width)m=!0}else if(c=f,i=l-this.right,h<g||h>g+this.height)m=!0;return m&&!d?null:e.renderer.crispLine([\"M\",c,h,\"L\",i,j],b||0)},getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a);d&&c?d.push(c[4],\nc[5],c[1],c[2]):d=null;return d},getLinearTickPositions:function(a,b,c){for(var d,b=ia(P(b/a)*a),c=ia(xa(c/a)*a),e=[];b<=c;){e.push(b);b=ia(b+a);if(b===d)break;d=b}return e},getLogTickPositions:function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=t(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=P(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=na(fa(f)*e[h]),j>b&&(!d||\nk<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=fa(b),c=fa(c),a=e[d?\"minorTickInterval\":\"tickInterval\"],a=o(a===\"auto\"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=ob(a,null,nb(a)),g=Na(this.getLinearTickPositions(a,b,c),na),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a<e;a++)d=d.concat(this.getLogTickPositions(c,\nb[a-1],b[a],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval===\"auto\")d=d.concat(Eb(Cb(c),this.min,this.max,a.startOfWeek)),d[0]<this.min&&d.shift();else for(b=this.min+(b[0]-this.min)%c;b<=this.max;b+=c)d.push(b);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===w&&!this.isLog)u(a.min)||u(a.max)?this.minRange=null:(n(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-\n1;g>0;g--)if(h=i[g]-i[g-1],f===w||h<f)f=h}),this.minRange=I(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=(k-c+b)/2;d=[b-d,o(a.min,b-d)];if(e)d[2]=this.dataMin;b=va(d);c=[b+k,o(a.max,b+k)];if(e)c[2]=this.dataMax;c=Ja(c);c-b<k&&(d[0]=c-k,d[1]=o(a.min,c-k),b=va(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this.max-this.min,c=0,d,e=0,f=0,g=this.linkedParent,h=this.transA;if(this.isXAxis)g?(e=g.minPointOffset,f=g.pointRangePadding):n(this.series,function(a){var g=\na.pointRange,h=a.options.pointPlacement,l=a.closestPointRange;g>b&&(g=0);c=s(c,g);e=s(e,ea(h)?0:g/2);f=s(f,h===\"on\"?0:g);!a.noSharedTooltip&&u(l)&&(d=u(d)?I(d,l):l)}),g=this.ordinalSlope&&d?this.ordinalSlope/d:1,this.minPointOffset=e*=g,this.pointRangePadding=f*=g,this.pointRange=I(c,b),this.closestPointRange=d;if(a)this.oldTransA=h;this.translationSlope=this.transA=h=this.len/(b+f||1);this.transB=this.horiz?this.left:this.bottom;this.minPixelPadding=h*e},setTickPositions:function(a){var b=this,c=\nb.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding,k=d.minPadding,l=d.tickInterval,m=d.minTickInterval,p=d.tickPixelInterval,q,ba=b.categories;h?(b.linkedParent=c[g?\"xAxis\":\"yAxis\"][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=o(c.min,c.dataMin),b.max=o(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ka(11,1)):(b.min=o(b.userMin,d.min,b.dataMin),b.max=o(b.userMax,d.max,b.dataMax));if(e)!a&&I(b.min,o(b.dataMin,b.min))<=0&&\nka(10,1),b.min=ia(na(b.min)),b.max=ia(na(b.max));if(b.range&&(b.userMin=b.min=s(b.min,b.max-b.range),b.userMax=b.max,a))b.range=null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!ba&&!b.usePercentage&&!h&&u(b.min)&&u(b.max)&&(c=b.max-b.min)){if(!u(d.min)&&!u(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!u(d.max)&&!u(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&p===b.linkedParent.options.tickPixelInterval?\nb.tickInterval=b.linkedParent.tickInterval:(b.tickInterval=o(l,ba?1:(b.max-b.min)*p/s(b.len,p)),!u(l)&&b.len<p&&!this.isRadial&&(q=!0,b.tickInterval/=4));g&&!a&&n(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange)b.tickInterval=s(b.pointRange,b.tickInterval);if(!l&&b.tickInterval<m)b.tickInterval=\nm;if(!f&&!e&&!l)b.tickInterval=ob(b.tickInterval,null,nb(b.tickInterval),d);b.minorTickInterval=d.minorTickInterval===\"auto\"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=a=d.tickPositions?[].concat(d.tickPositions):i&&i.apply(b,[b.min,b.max]);if(!a)!b.ordinalPositions&&(b.max-b.min)/b.tickInterval>s(2*b.len,200)&&ka(19,!0),a=f?(b.getNonLinearTimeTicks||Eb)(Cb(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,!0):e?b.getLogTickPositions(b.tickInterval,\nb.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),q&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h<f&&a.pop(),a.length===1&&(b.min-=0.001,b.max+=0.001)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.xOrY,this.pos,this.len].join(\"-\");if(!this.isLinked&&!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==\n!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(ia(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(u(d)&&a!==d)this.isDirty=!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=\nthis.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!==this.oldAxisLength;n(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax){if(!this.isXAxis)for(b in a)delete a[b];this.forceRedraw=!1;this.getSeriesExtremes();this.setTickPositions();this.oldUserMin=this.userMin;this.oldUserMax=this.userMax;if(!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==\nthis.oldMax}else if(!this.isXAxis){if(this.oldStacks)a=this.stacks=this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}this.setMaxTicks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=o(c,!0),e=r(e,{min:a,max:b});z(f,\"setExtremes\",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;f.isDirtyExtremes=!0;c&&g.redraw(d)})},zoom:function(a,b){this.allowZoomOutside||(u(this.dataMin)&&a<=this.dataMin&&(a=w),u(this.dataMax)&&b>=this.dataMax&&(b=w));this.displayBtn=a!==w||b!==w;this.setExtremes(a,\nb,!1,w,{trigger:\"zoom\"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=b.offsetRight||0,e=this.horiz,f,g;this.left=g=o(b.left,a.plotLeft+c);this.top=f=o(b.top,a.plotTop);this.width=c=o(b.width,a.plotWidth-c+d);this.height=b=o(b.height,a.plotHeight);this.bottom=a.chartHeight-b-f;this.right=a.chartWidth-c-g;this.len=s(e?c:b,0);this.pos=e?g:f},getExtremes:function(){var a=this.isLog;return{min:a?ia(fa(this.min)):this.min,max:a?ia(fa(this.max)):this.max,dataMin:this.dataMin,\ndataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?fa(this.min):this.min,b=b?fa(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},addPlotBand:function(a){this.addPlotBandOrLine(a,\"plotBands\")},addPlotLine:function(a){this.addPlotBandOrLine(a,\"plotLines\")},addPlotBandOrLine:function(a,b){var c=(new vb(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]||[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},\nautoLabelAlign:function(a){a=(o(a,0)-this.side*90+720)%360;return a>15&&a<165?\"right\":a>195&&a<345?\"left\":\"center\"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,m=0,p=d.title,q=d.labels,ba=0,A=b.axisOffset,L=b.clipOffset,t=[-1,1,1,-1][h],r,v=1,x=o(q.maxStaggerLines,5),la,E,H,B;a.hasData=j=a.hasVisibleSeries||u(a.min)&&u(a.max)&&!!e;a.showAxis=b=j||o(d.showEmpty,!0);a.staggerLines=a.horiz&&q.staggerLines;\nif(!a.axisGroup)a.gridGroup=c.g(\"grid\").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g(\"axis\").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g(\"axis-labels\").attr({zIndex:q.zIndex||7}).add();if(j||a.isLinked){a.labelAlign=o(q.align||a.autoLabelAlign(q.rotation));n(e,function(b){f[b]?f[b].addLabel():f[b]=new Ma(a,b)});if(a.horiz&&!a.staggerLines&&x&&!q.rotation){for(r=a.reversed?[].concat(e).reverse():e;v<x;){j=[];la=!1;for(q=0;q<r.length;q++)E=r[q],H=(H=f[E].label&&f[E].label.getBBox())?H.width:\n0,B=q%v,H&&(E=a.translate(E),j[B]!==w&&E<j[B]&&(la=!0),j[B]=E+H);if(la)v++;else break}if(v>1)a.staggerLines=v}n(e,function(b){if(h===0||h===2||{1:\"left\",3:\"right\"}[h]===a.labelAlign)ba=s(f[b].getLabelSize(),ba)});if(a.staggerLines)ba*=a.staggerLines,a.labelOffset=ba}else for(r in f)f[r].destroy(),delete f[r];if(p&&p.text&&p.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(p.text,0,0,p.useHTML).attr({zIndex:7,rotation:p.rotation||0,align:p.textAlign||{low:\"left\",middle:\"center\",high:\"right\"}[p.align]}).css(p.style).add(a.axisGroup),\na.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?\"height\":\"width\"],m=o(p.margin,g?5:10),l=p.offset;a.axisTitle[b?\"show\":\"hide\"]()}a.offset=t*o(d.offset,A[h]);a.axisTitleMargin=o(l,ba+m+(h!==2&&ba&&t*d.labels[g?\"y\":\"x\"]));A[h]=s(A[h],a.axisTitleMargin+k+t*a.offset);L[i]=s(L[i],P(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine([\"M\",\ne?this.left:f,e?d:this.top,\"L\",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=C(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,\nb=a.chart,c=b.renderer,d=a.options,e=a.isLog,f=a.isLinked,g=a.tickPositions,h=a.axisTitle,i=a.stacks,j=a.ticks,k=a.minorTicks,l=a.alternateBands,m=d.stackLabels,p=d.alternateGridColor,q=a.tickmarkOffset,o=d.lineWidth,A,s=b.hasRendered&&u(a.oldMin)&&!isNaN(a.oldMin);A=a.hasData;var t=a.showAxis,r,v;n([j,k,l],function(a){for(var b in a)a[b].isActive=!1});if(A||f)if(a.minorTickInterval&&!a.categories&&n(a.getMinorTickPositions(),function(b){k[b]||(k[b]=new Ma(a,b,\"minor\"));s&&k[b].isNew&&k[b].render(null,\n!0);k[b].render(null,!1,1)}),g.length&&(n(g.slice(1).concat([g[0]]),function(b,c){c=c===g.length-1?0:c+1;if(!f||b>=a.min&&b<=a.max)j[b]||(j[b]=new Ma(a,b)),s&&j[b].isNew&&j[b].render(c,!0),j[b].render(c,!1,1)}),q&&a.min===0&&(j[-1]||(j[-1]=new Ma(a,-1,null,!0)),j[-1].render(-1))),p&&n(g,function(b,c){if(c%2===0&&b<a.max)l[b]||(l[b]=new vb(a)),r=b+q,v=g[c+1]!==w?g[c+1]+q:a.max,l[b].options={from:e?fa(r):r,to:e?fa(v):v,color:p},l[b].render(),l[b].isActive=!0}),!a._addedPlotLB)n((d.plotLines||[]).concat(d.plotBands||\n[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0;n([j,k,l],function(a){var c,d,e=[],f=Fa?Fa.duration||500:0,g=function(){for(d=e.length;d--;)a[e[d]]&&!a[e[d]].isActive&&(a[e[d]].destroy(),delete a[e[d]])};for(c in a)if(!a[c].isActive)a[c].render(c,!1,0),a[c].isActive=!1,e.push(c);a===l||!b.hasRendered||!f?g():f&&setTimeout(g,f)});if(o)A=a.getLinePath(o),a.axisLine?a.axisLine.animate({d:A}):a.axisLine=c.path(A).attr({stroke:d.lineColor,\"stroke-width\":o,zIndex:7}).add(a.axisGroup),a.axisLine[t?\n\"show\":\"hide\"]();if(h&&t)h[h.isNew?\"attr\":\"animate\"](a.getTitlePosition()),h.isNew=!1;if(m&&m.enabled){var x,la,d=a.stackTotalGroup;if(!d)a.stackTotalGroup=d=c.g(\"stack-labels\").attr({visibility:\"visible\",zIndex:6}).add();d.translate(b.plotLeft,b.plotTop);for(x in i)for(la in c=i[x],c)c[la].render(d)}a.isDirty=!1},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();n([c.plotLines||[],d.plotLines||[],c.plotBands||\n[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id===a&&ga(b,b[e])})},setTitle:function(a,b){this.update({title:a},b)},redraw:function(){var a=this.chart.pointer;a.reset&&a.reset(!0);this.render();n(this.plotLinesAndBands,function(a){a.render()});n(this.series,function(a){a.isDirty=!0})},buildStacks:function(){var a=this.series,b=a.length;if(!this.isXAxis){for(;b--;)a[b].setStackedPoints();if(this.usePercentage)for(b=0;b<a.length;b++)a[b].setPercentStacks()}},setCategories:function(a,b){this.update({categories:a},\nb)},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||aa(b);for(d in c)Ka(c[d]),c[d]=null;n([b.ticks,b.minorTicks,b.alternateBands],function(a){Ka(a)});for(a=e.length;a--;)e[a].destroy();n(\"stackTotalGroup,axisLine,axisGroup,gridGroup,labelGroup,axisTitle\".split(\",\"),function(a){b[a]&&(b[a]=b[a].destroy())})}};wb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=C(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=\na.renderer.label(\"\",0,0,b.shape,null,null,b.useHTML,null,\"tooltip\").attr({padding:e,fill:b.backgroundColor,\"stroke-width\":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-999});$||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){n(this.crosshairs,function(a){a&&a.destroy()});if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden;\nr(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:g?(2*f.anchorX+c)/3:c,anchorY:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(N(a-f.x)>1||N(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a=this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},o(this.options.hideDelay,500)),b&&n(b,function(a){a.setState()}),this.chart.hoverPoints=\nnull},hideCrosshairs:function(){n(this.crosshairs,function(a){a&&a.hide()})},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=ja(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===w&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(n(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:\nh]);return Na(c,t)},getPosition:function(a,b,c){var d=this.chart,e=d.plotLeft,f=d.plotTop,g=d.plotWidth,h=d.plotHeight,i=o(this.options.distance,12),j=c.plotX,c=c.plotY,d=j+e+(d.inverted?i:-a-i),k=c-b+f+15,l;d<7&&(d=e+s(j,0)+i);d+a>e+g&&(d-=d+a-(e+g),k=c-b+f-i,l=!0);k<f+5&&(k=f+5,l&&c>=k&&c<=k+b&&(k=c+f+i));k+b>f+h&&(k=s(f,f+h-b-i));return{x:d,y:k}},defaultFormatter:function(a){var b=this.points||ja(this),c=b[0].series,d;d=[c.tooltipHeaderFormatter(b[0])];n(b,function(a){c=a.series;d.push(c.tooltipFormatter&&\nc.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))});d.push(a.options.footerFormat||\"\");return d.join(\"\")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=e.crosshairs,m=this.shared;clearTimeout(this.hideTimer);this.followPointer=ja(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];m&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&n(h,\nfunction(a){a.setState()}),n(a,function(a){a.setState(\"hover\");j.push(a.getLabelConfig())}),h={x:a[0].category,y:a[0].y},h.points=j,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;i===!1?this.hide():(this.isHidden&&(Wa(d),d.attr(\"opacity\",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||\"#606060\",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g}),this.isHidden=!1);if(l){l=ja(l);for(d=l.length;d--;)if(m=a.series,e=m[d?\"yAxis\":\"xAxis\"],l[d]&&e)if(h=d?o(a.stackY,a.y):a.x,\ne.isLog&&(h=na(h)),d===1&&m.modifyValue&&(h=m.modifyValue(h)),e=e.getPlotLinePath(h,1),this.crosshairs[d])this.crosshairs[d].attr({d:e,visibility:\"visible\"});else{h={\"stroke-width\":l[d].width||1,stroke:l[d].color||\"#C0C0C0\",zIndex:l[d].zIndex||2};if(l[d].dashStyle)h.dashstyle=l[d].dashStyle;this.crosshairs[d]=c.renderer.path(e).attr(h).add()}}z(c,\"tooltipRefresh\",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||\nthis.getPosition).call(this,c.width,c.height,a);this.move(t(c.x),t(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)}};xb.prototype={init:function(a,b){var c=b.chart,d=c.events,e=$?\"\":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(b.tooltip.enabled)a.tooltip=new wb(a,b.tooltip);this.setDOMEvents()},normalize:function(a,b){var c,\nd,a=a||O.event;if(!a.target)a.target=a.srcElement;a=Xb(a);d=a.touches?a.touches.item(0):a;if(!b)this.chartPosition=b=Wb(this.chart.container);d.pageX===w?(c=s(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return r(a,{chartX:t(c),chartY:t(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};n(this.chart.axes,function(c){b[c.isXAxis?\"xAxis\":\"yAxis\"].push({axis:c,value:c.toValue(a[c.horiz?\"chartX\":\"chartY\"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?\nb.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e,f=b.hoverPoint,g=b.hoverSeries,h,i,j=b.chartWidth,k=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!g||!g.noSharedTooltip)){e=[];h=c.length;for(i=0;i<h;i++)if(c[i].visible&&c[i].options.enableMouseTracking!==!1&&!c[i].noSharedTooltip&&c[i].tooltipPoints.length&&(b=c[i].tooltipPoints[k])&&b.series)b._dist=N(k-b.clientX),j=I(j,b._dist),e.push(b);for(h=e.length;h--;)e[h]._dist>\nj&&e.splice(h,1);if(e.length&&e[0].clientX!==this.hoverX)d.refresh(e,a),this.hoverX=e[0].clientX}if(g&&g.tracker){if((b=g.tooltipPoints[k])&&b!==f)b.onMouseOver(a)}else d&&d.followPointer&&!d.isHidden&&(a=d.getAnchor([{}],a),d.updatePosition({plotX:a[0],plotY:a[1]}))},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,b=e&&e.shared?b.hoverPoints:d;(a=a&&e&&b)&&ja(b)[0].plotX===w&&(a=!1);if(a)e.refresh(b);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&(e.hide(),e.hideCrosshairs());\nthis.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;n(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},pinchTranslateDirection:function(a,b,c,d,e,f,g){var h=this.chart,i=a?\"x\":\"y\",j=a?\"X\":\"Y\",k=\"chart\"+j,l=a?\"width\":\"height\",m=h[\"plot\"+(a?\"Left\":\"Top\")],p,q,o=1,n=h.inverted,s=h.bounds[a?\"h\":\"v\"],\nt=b.length===1,u=b[0][k],r=c[0][k],w=!t&&b[1][k],v=!t&&c[1][k],x,c=function(){!t&&N(u-w)>20&&(o=N(r-v)/N(u-w));q=(m-r)/o+u;p=h[\"plot\"+(a?\"Width\":\"Height\")]/o};c();b=q;b<s.min?(b=s.min,x=!0):b+p>s.max&&(b=s.max-p,x=!0);x?(r-=0.8*(r-g[i][0]),t||(v-=0.8*(v-g[i][1])),c()):g[i]=[r,v];n||(f[i]=q-m,f[l]=p);f=n?1/o:o;e[l]=p;e[i]=b;d[n?a?\"scaleY\":\"scaleX\":\"scale\"+j]=o;d[\"translate\"+j]=f*m+(r-f*u)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,e=c.tooltip&&c.tooltip.options.followTouchMove,f=a.touches,\ng=f.length,h=b.lastValidTouch,i=b.zoomHor||b.pinchHor,j=b.zoomVert||b.pinchVert,k=i||j,l=b.selectionMarker,m={},p=g===1&&(b.inClass(a.target,\"highcharts-tracker\")&&c.runTrackerClick||c.runChartClick),q={};(k||e)&&!p&&a.preventDefault();Na(f,function(a){return b.normalize(a)});if(a.type===\"touchstart\")n(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],n(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?\"h\":\"v\"],\nd=a.minPixelPadding,e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=I(e,f),e=s(e,f);b.min=I(a.pos,g-d);b.max=s(a.pos+a.len,e+d)}});else if(d.length){if(!l)b.selectionMarker=l=r({destroy:pa},c.plotBox);i&&b.pinchTranslateDirection(!0,d,f,m,l,q,h);j&&b.pinchTranslateDirection(!1,d,f,m,l,q,h);b.hasPinched=k;b.scaleGroups(m,q);!k&&e&&g===1&&this.runPointActions(b.normalize(a))}},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=\nthis.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,m=this.mouseDownX,p=this.mouseDownY;d<h?d=h:d>h+j&&(d=h+j);e<i?e=i:e>i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(m-d,2)+Math.pow(p-e,2));if(this.hasDragged>10){l=b.isInsidePlot(m-h,p-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?\n1:k,0).attr({fill:c.selectionMarkerFill||\"rgba(69,114,167,0.25)\",zIndex:7}).add();this.selectionMarker&&f&&(d-=m,this.selectionMarker.attr({width:N(d),x:(d>0?0:d)+m}));this.selectionMarker&&g&&(d=e-p,this.selectionMarker.attr({height:N(d),y:(d>0?0:d)+p}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},e=this.selectionMarker,f=e.x,g=e.y,h;if(this.hasDragged||\nc)n(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?f:g),b=a.toValue(b?f+e.width:g+e.height);!isNaN(c)&&!isNaN(b)&&(d[a.xOrY+\"Axis\"].push({axis:a,min:I(c,b),max:s(c,b)}),h=!0)}}),h&&z(b,\"selection\",d,function(a){b.zoom(r(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)K(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=\nthis.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){this.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,\"highcharts-tracker\")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){this.reset();this.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart,a=this.normalize(a);a.returnValue=\n!1;b.mouseIsDown===\"mousedown\"&&this.drag(a);(this.inClass(a.target,\"highcharts-tracker\")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=v(a,\"class\"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf(\"highcharts-container\")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries;if(b&&!b.options.stickyTracking&&!this.inClass(a.toElement||a.relatedTarget,\"highcharts-tooltip\"))b.onMouseOut()},\nonContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,f=b.inverted,g,h,i,a=this.normalize(a);a.cancelBubble=!0;if(!b.cancelClick)c&&this.inClass(a.target,\"highcharts-tracker\")?(g=this.chartPosition,h=c.plotX,i=c.plotY,r(c,{pageX:g.left+d+(f?b.plotWidth-i:h),pageY:g.top+e+(f?b.plotHeight-h:i)}),z(c.series,\"click\",r(a,{point:c})),b.hoverPoint&&c.firePointEvent(\"click\",a)):(r(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&z(b,\"click\",a))},onContainerTouchStart:function(a){var b=\nthis.chart;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){this.drop(a)},setDOMEvents:function(){var a=this,b=a.chart.container,c;this._events=c=[[b,\"onmousedown\",\"onContainerMouseDown\"],[b,\"onmousemove\",\"onContainerMouseMove\"],[b,\"onclick\",\n\"onContainerClick\"],[b,\"mouseleave\",\"onContainerMouseLeave\"],[y,\"mousemove\",\"onDocumentMouseMove\"],[y,\"mouseup\",\"onDocumentMouseUp\"]];ib&&c.push([b,\"ontouchstart\",\"onContainerTouchStart\"],[b,\"ontouchmove\",\"onContainerTouchMove\"],[y,\"touchend\",\"onDocumentTouchEnd\"]);n(c,function(b){a[\"_\"+b[2]]=function(c){a[b[2]](c)};b[1].indexOf(\"on\")===0?b[0][b[1]]=a[\"_\"+b[2]]:J(b[0],b[1],a[\"_\"+b[2]])})},destroy:function(){var a=this;n(a._events,function(b){b[1].indexOf(\"on\")===0?b[0][b[1]]=null:aa(b[0],b[1],a[\"_\"+\nb[2]])});delete a._events;clearInterval(a.tooltipTimeout)}};eb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=o(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=C(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=x(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY=e-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.render(),J(c.chart,\"endResize\",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,\nd=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.color:g,g=a.options&&a.options.marker,i={stroke:h,fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in g=a.convertAttribs(g),g)d=g[j],d!==w&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=\ne,f.y=d},destroyItem:function(a){var b=a.checkbox;n([\"legendItem\",\"legendLine\",\"legendSymbol\",\"legendGroup\"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Ta(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,n(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,K(f,{left:b.translateX+e.legendItemWidth+f.x-\n20+\"px\",top:g+\"px\",display:g>c-6&&g<c+d-6?\"\":S}))})},renderTitle:function(){var a=this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,\"legend-title\").attr({zIndex:1}).css(b.style).add(this.group);a=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},renderItem:function(a){var B;var b=this,c=b.chart,d=c.renderer,e=b.options,f=e.layout===\"horizontal\",\ng=e.symbolWidth,h=e.symbolPadding,i=b.itemStyle,j=b.itemHiddenStyle,k=b.padding,l=f?o(e.itemDistance,8):0,m=!e.rtl,p=e.width,q=e.itemMarginBottom||0,n=b.itemMarginTop,A=b.initialItemX,t=a.legendItem,u=a.series||a,r=u.options,w=r.showCheckbox,v=e.useHTML;if(!t&&(a.legendGroup=d.g(\"legend-item\").attr({zIndex:1}).add(b.scrollGroup),u.drawLegendSymbol(b,a),a.legendItem=t=d.text(e.labelFormat?Ca(e.labelFormat,a):e.labelFormatter.call(a),m?g+h:-h,b.baseline,v).css(x(a.visible?i:j)).attr({align:m?\"left\":\n\"right\",zIndex:2}).add(a.legendGroup),(v?t:a.legendGroup).on(\"mouseover\",function(){a.setState(\"hover\");t.css(b.options.itemHoverStyle)}).on(\"mouseout\",function(){t.css(a.visible?i:j);a.setState()}).on(\"click\",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent(\"legendItemClick\",b,c):z(a,\"legendItemClick\",b,c)}),b.colorizeItem(a,a.visible),r&&w))a.checkbox=U(\"input\",{type:\"checkbox\",checked:a.selected,defaultChecked:a.selected},e.itemCheckboxStyle,c.container),\nJ(a.checkbox,\"click\",function(b){z(a,\"checkboxClick\",{checked:b.target.checked},function(){a.select()})});d=t.getBBox();B=a.legendItemWidth=e.itemWidth||g+h+d.width+l+(w?20:0),e=B;b.itemHeight=g=d.height;if(f&&b.itemX-A+e>(p||c.chartWidth-2*k-A))b.itemX=A,b.itemY+=n+b.lastLineHeight+q,b.lastLineHeight=0;b.maxItemWidth=s(b.maxItemWidth,e);b.lastItemY=n+b.itemY+q;b.lastLineHeight=s(g,b.lastLineHeight);a._legendItemPos=[b.itemX,b.itemY];f?b.itemX+=e:(b.itemY+=n+g+q,b.lastLineHeight=g);b.offsetWidth=\np||s((f?b.itemX-A-l:e)+k,b.offsetWidth)},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,m=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g(\"legend\").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=[];n(b.series,function(a){var b=a.options;b.showInLegend&&!u(b.linkedTo)&&(e=e.concat(a.legendItems||\n(b.legendType===\"point\"?a.data:a)))});Kb(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;n(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||m){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?\"attr\":\"animate\"](i.crisp(null,null,null,g,h)),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,\n\"stroke-width\":l||0,fill:m||S}).add(d).shadow(j.shadow),i.isNew=!0;i[f?\"show\":\"hide\"]()}a.legendWidth=g;a.legendHeight=h;n(e,function(b){a.positionItem(b)});f&&d.align(r({width:g,height:h},j),!0,\"spacingBox\");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign===\"top\"?-f:f)-this.padding,g=e.maxHeight,h=this.clipRect,i=e.navigation,j=o(i.animation,!0),k=i.arrowSize||12,l=this.nav;e.layout===\n\"horizontal\"&&(f/=2);g&&(f=I(f,g));if(a>f&&!e.useHTML){this.clipHeight=c=f-20-this.titleHeight;this.pageCount=xa(a/c);this.currentPage=o(this.currentPage,1);this.fullHeight=a;if(!h)h=b.clipRect=d.clipRect(0,0,9999,0),b.contentGroup.clip(h);h.attr({height:c});if(!l)this.nav=l=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol(\"triangle\",0,0,k,k).on(\"click\",function(){b.scroll(-1,j)}).add(l),this.pager=d.text(\"\",15,10).css(i.style).add(l),this.down=d.symbol(\"triangle-down\",0,0,k,k).on(\"click\",\nfunction(){b.scroll(1,j)}).add(l);b.scroll(0);a=f}else if(l)h.attr({height:c.chartHeight}),l.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pageCount,d=this.currentPage+a,e=this.clipHeight,f=this.options.navigation,g=f.activeColor,h=f.inactiveColor,f=this.pager,i=this.padding;d>c&&(d=c);if(d>0)b!==w&&La(b,this.chart),this.nav.attr({translateX:i,translateY:e+7+this.titleHeight,visibility:\"visible\"}),this.up.attr({fill:d===1?h:g}).css({cursor:d===\n1?\"default\":\"pointer\"}),f.attr({text:d+\"/\"+this.pageCount}),this.down.attr({x:18+this.pager.getBBox().width,fill:d===c?h:g}).css({cursor:d===c?\"default\":\"pointer\"}),e=-I(e*(d-1),this.fullHeight-e+i)+1,this.scrollGroup.animate({translateY:e}),f.attr({text:d+\"/\"+c}),this.currentPage=d,this.positionCheckboxes(e)}};/Trident.*?11\\.0/.test(oa)&&mb(eb.prototype,\"positionItem\",function(a,b){var c=this;setTimeout(function(){a.call(c,b)})});yb.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=\nx(M,a);c.series=a.series=d;d=c.chart;this.margin=this.splashArray(\"margin\",d);this.spacing=this.splashArray(\"spacing\",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=Ga.length;Ga.push(f);d.reflow!==!1&&J(f,\"load\",function(){f.initReflow()});if(e)for(g in e)J(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=$?!1:o(d.animation,!0);f.pointCount=0;f.counters=new Jb;f.firstRender()},\ninitSeries:function(a){var b=this.options.chart;(b=W[a.type||b.type||b.defaultSeriesType])||ka(17,!0);b=new b;b.init(this,a);return b},addSeries:function(a,b,c){var d,e=this;a&&(b=o(b,!0),z(e,\"addSeries\",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?\"xAxis\":\"yAxis\",f=this.options;new db(this,x(a,{index:this[e].length,isX:b}));f[e]=ja(f[e]||{});f[e].push(a);o(c,!0)&&this.redraw(d)},isInsidePlot:function(a,b,\nc){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&n(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,m=l.isHidden(),p=[];La(a,this);m&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&(g=!0,a.isDirty)){h=!0;\nbreak}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;n(c,function(a){a.isDirty&&a.options.legendType===\"point\"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,n(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();n(b,function(a){a.isDirty&&(i=!0)});n(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,p.push(function(){z(a,\"afterSetExtremes\",r(a.eventArgs,\na.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();n(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset&&d.reset(!0);l.draw();z(this,\"redraw\");m&&this.cloneRenderTo(!0);n(p,function(a){a.call()})},showLoading:function(a){var b=this.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv=c=U(Ea,{className:\"highcharts-loading\"},r(d.style,{zIndex:10,display:S}),this.container),this.loadingSpan=U(\"span\",null,d.labelStyle,c);this.loadingSpan.innerHTML=\na||b.lang.loading;if(!this.loadingShown)K(c,{opacity:0,display:\"\",left:this.plotLeft+\"px\",top:this.plotTop+\"px\",width:this.plotWidth+\"px\",height:this.plotHeight+\"px\"}),Bb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&Bb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){K(b,{display:S})}});this.loadingShown=!1},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===\na)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=ja(b.xAxis||{}),b=b.yAxis=ja(b.yAxis||{});n(c,function(a,b){a.index=b;a.isX=!0});n(b,function(a,b){a.index=b});c=c.concat(b);n(c,function(b){new db(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];n(this.series,function(b){a=a.concat(ub(b.points||[],\nfunction(a){return a.selected}))});return a},getSelectedSeries:function(){return ub(this.series,function(a){return a.selected})},getStacks:function(){var a=this;n(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks=a.stacks});n(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+o(b.options.stack,\"\")})},showResetZoom:function(){var a=this,b=M.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo===\n\"chart\"?null:\"plotBox\";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this;z(a,\"selection\",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?n(this.axes,function(a){b=a.zoom()}):n(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?\"zoomX\":\"zoomY\"]||c[h?\"pinchX\":\"pinchY\"])b=\ne.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom();else if(!d&&T(e))this.resetZoomButton=e.destroy();b&&this.redraw(o(this.options.chart.animation,a&&a.animation,this.pointCount<100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&n(d,function(a){a.setState()});n(b===\"xy\"?[1,0]:[1],function(b){var d=a[b?\"chartX\":\"chartY\"],h=c[b?\"xAxis\":\"yAxis\"][0],i=c[b?\"mouseDownX\":\"mouseDownY\"],j=(h.pointRange||0)/2,k=h.getExtremes(),l=h.toValue(i-d,!0)+j,i=h.toValue(i+\nc[b?\"plotWidth\":\"plotHeight\"]-d,!0)-j;h.series.length&&l>I(k.dataMin,k.min)&&i<s(k.dataMax,k.max)&&(h.setExtremes(l,i,!1,!1,{trigger:\"pan\"}),e=!0);c[b?\"mouseDownX\":\"mouseDownY\"]=d});e&&c.redraw(!1);K(c.container,{cursor:\"move\"})},setTitle:function(a,b){var f;var c=this,d=c.options,e;e=d.title=x(d.title,a);f=d.subtitle=x(d.subtitle,b),d=f;n([[\"title\",a,e],[\"subtitle\",b,d]],function(a){var b=a[0],d=c[b],e=a[1],a=a[2];d&&e&&(c[b]=d=d.destroy());a&&a.text&&!d&&(c[b]=c.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,\n\"class\":\"highcharts-\"+b,zIndex:a.zIndex||4}).css(a.style).add())});c.layOutTitles()},layOutTitles:function(){var a=0,b=this.title,c=this.subtitle,d=this.options,e=d.title,d=d.subtitle,f=this.spacingBox.width-44;if(b&&(b.css({width:(e.width||f)+\"px\"}).align(r({y:15},e),!1,\"spacingBox\"),!e.floating&&!e.verticalAlign))a=b.getBBox().height,a>=18&&a<=25&&(a=15);c&&(c.css({width:(d.width||f)+\"px\"}).align(r({y:a+e.margin},d),!1,\"spacingBox\"),!d.floating&&!d.verticalAlign&&(a=xa(a+c.getBBox().height)));this.titleOffset=\na},getChartSize:function(){var a=this.options.chart,b=this.renderToClone||this.renderTo;this.containerWidth=jb(b,\"width\");this.containerHeight=jb(b,\"height\");this.chartWidth=s(0,a.width||this.containerWidth||600);this.chartHeight=s(0,o(a.height,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Ta(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=\nb=this.renderTo.cloneNode(0),K(b,{position:\"absolute\",top:\"-9999px\",display:\"block\"}),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e=\"highcharts-\"+zb++;if(ea(a))this.renderTo=a=y.getElementById(a);a||ka(13,!0);c=C(v(a,\"data-highcharts-chart\"));!isNaN(c)&&Ga[c]&&Ga[c].destroy();v(a,\"data-highcharts-chart\",this.index);a.innerHTML=\"\";a.offsetWidth||this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;\nthis.container=a=U(Ea,{className:\"highcharts-container\"+(b.className?\" \"+b.className:\"\"),id:e},r({position:\"relative\",overflow:\"hidden\",width:c+\"px\",height:d+\"px\",textAlign:\"left\",lineHeight:\"normal\",zIndex:0,\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\"},b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new Ha(a,c,d,!0):new Va(a,c,d);$&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,\nf=o(e.margin,10),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!u(d[0]))this.plotTop=s(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i===\"right\"){if(!u(d[1]))this.marginRight=s(this.marginRight,c.legendWidth-g+f+a[1])}else if(i===\"left\"){if(!u(d[3]))this.plotLeft=s(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j===\"top\"){if(!u(d[0]))this.plotTop=s(this.plotTop,c.legendHeight+h+f+a[0])}else if(j===\"bottom\"&&!u(d[2]))this.marginBottom=\ns(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&n(this.axes,function(a){a.getOffset()});u(d[3])||(this.plotLeft+=b[3]);u(d[0])||(this.plotTop+=b[0]);u(d[2])||(this.marginBottom+=b[2]);u(d[1])||(this.marginRight+=b[1]);this.setChartSize()},initReflow:function(){function a(a){var g=c.width||jb(d,\"width\"),h=c.height||jb(d,\"height\"),a=a?a.target:O;if(!b.hasUserSize&&\ng&&h&&(a===O||a===y)){if(g!==b.containerWidth||h!==b.containerHeight)clearTimeout(e),b.reflowTimeout=e=setTimeout(function(){if(b.container)b.setSize(g,h,!1),b.hasUserSize=null},100);b.containerWidth=g;b.containerHeight=h}}var b=this,c=b.options.chart,d=b.renderTo,e;b.reflow=a;J(O,\"resize\",a);J(b,\"destroy\",function(){aa(O,\"resize\",a)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&z(d,\"endResize\",null,function(){d.isResizing-=1})};La(c,d);d.oldChartHeight=d.chartHeight;\nd.oldChartWidth=d.chartWidth;if(u(a))d.chartWidth=e=s(0,t(a)),d.hasUserSize=!!e;if(u(b))d.chartHeight=f=s(0,t(b));K(d.container,{width:e+\"px\",height:f+\"px\"});d.setChartSize(!0);d.renderer.setSize(e,f,c);d.maxTicks=null;n(d.axes,function(a){a.isDirty=!0;a.setScale()});n(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.getMargins();d.redraw(c);d.oldChartHeight=null;z(d,\"resize\");Fa===!1?g():setTimeout(g,Fa&&Fa.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,\nd=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=t(this.plotLeft);this.plotTop=j=t(this.plotTop);this.plotWidth=k=s(0,t(d-i-this.marginRight));this.plotHeight=l=s(0,t(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*P(this.plotBorderWidth/2);\nb=xa(s(d,h[3])/2);c=xa(s(d,h[0])/2);this.clipBox={x:b,y:c,width:P(this.plotSizeX-s(d,h[1])/2-b),height:P(this.plotSizeY-s(d,h[2])/2-c)};a||n(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=o(b[0],a[0]);this.marginRight=o(b[1],a[1]);this.marginBottom=o(b[2],a[2]);this.plotLeft=o(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,\nd=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,m=a.plotBorderWidth||0,p,q=this.plotLeft,o=this.plotTop,n=this.plotWidth,s=this.plotHeight,t=this.plotBox,u=this.clipRect,r=this.clipBox;p=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp(null,null,null,c-p,d-p));else{e={fill:j||S};if(i)e.stroke=a.borderColor,e[\"stroke-width\"]=i;this.chartBackground=b.rect(p/2,p/\n2,c-p,d-p,a.borderRadius,i).attr(e).add().shadow(a.shadow)}if(k)f?f.animate(t):this.plotBackground=b.rect(q,o,n,s,0).attr({fill:k}).add().shadow(a.plotShadow);if(l)h?h.animate(t):this.plotBGImage=b.image(l,q,o,n,s).add();u?u.animate({width:r.width,height:r.height}):this.clipRect=b.clipRect(r);if(m)g?g.animate(g.crisp(null,q,o,n,s)):this.plotBorder=b.rect(q,o,n,s,0,-m).attr({stroke:a.plotBorderColor,\"stroke-width\":m,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,\nc,d=a.options.series,e,f;n([\"inverted\",\"angular\",\"polar\"],function(g){c=W[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=W[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;n(b,function(a){a.linkedSeries.length=0});n(b,function(b){var d=b.options.linkedTo;if(ea(d)&&(d=d===\":previous\"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,\ne=d.labels,f=d.credits,g;a.setTitle();a.legend=new eb(a,d.legend);a.getStacks();n(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;n(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&n(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g(\"series-group\").attr({zIndex:3}).add();n(a.series,function(a){a.translate();a.setTooltipPoints();a.render()});e.items&&n(e.items,function(b){var d=r(e.style,b.style),\nf=C(d.left)+a.plotLeft,g=C(d.top)+a.plotTop+12;delete d.left;delete d.top;c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on(\"click\",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;z(a,\"destroy\");Ga[a.index]=w;a.renderTo.removeAttribute(\"data-highcharts-chart\");aa(a);for(e=\nb.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();n(\"title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer\".split(\",\"),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML=\"\",aa(d),f&&Ta(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!Z&&O==O.top&&y.readyState!==\"complete\"||$&&!O.canvg?($?Tb.push(function(){a.firstRender()},\na.options.global.canvasToolsURL):y.attachEvent(\"onreadystatechange\",function(){y.detachEvent(\"onreadystatechange\",a.firstRender);y.readyState===\"complete\"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender())a.getContainer(),z(a,\"init\"),a.resetMargins(),a.setChartSize(),a.propFromSeries(),a.getAxes(),n(b.series||[],function(b){a.initSeries(b)}),a.linkSeries(),z(a,\"beforeRender\"),a.pointer=new xb(a,b),a.render(),a.renderer.draw(),c&&c.apply(a,\n[a]),n(a.callbacks,function(b){b.apply(a,[a])}),a.cloneRenderTo(!0),z(a,\"load\")},splashArray:function(a,b){var c=b[a],c=T(c)?c:[c,c,c,c];return[o(b[a+\"Top\"],c[0]),o(b[a+\"Right\"],c[1]),o(b[a+\"Bottom\"],c[2]),o(b[a+\"Left\"],c[3])]}};yb.prototype.callbacks=[];var Pa=function(){};Pa.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=\n0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Pa.prototype.optionsToObject.call(this,a);r(this,a);this.options=this.options?r(this.options,a):a;if(d)this.y=this[d];if(this.x===w&&c)this.x=b===w?c.autoIncrement():b;return this},optionsToObject:function(a){var b,c=this.series,d=c.pointArrayMap||[\"y\"],e=d.length,f=0,g=0;if(typeof a===\"number\"||a===null)b={y:a};else if(Ia(a)){b={};if(a.length>e){c=typeof a[0];if(c===\"string\")b.name=a[0];else if(c===\n\"number\")b.x=a[0];f++}for(;g<e;)b[d[g++]]=a[f++]}else if(typeof a===\"object\"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers=!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),ga(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)aa(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a=\n\"graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup\".split(\",\"),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},select:function(a,b){var c=this,d=c.series,e=d.chart,a=o(a,!c.selected);c.firePointEvent(a?\"select\":\"unselect\",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[qa(c,d.data)]=\nc.options;c.setState(a&&\"select\");b||n(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[qa(a,d.data)]=a.options,a.setState(\"\"),a.firePointEvent(\"unselect\")})})},onMouseOver:function(a){var b=this.series,c=b.chart,d=c.tooltip,e=c.hoverPoint;if(e&&e!==this)e.onMouseOut();this.firePointEvent(\"mouseOver\");d&&(!d.shared||b.noSharedTooltip)&&d.refresh(this,a);this.setState(\"hover\");c.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;\nif(!b||qa(this,b)===-1)this.firePointEvent(\"mouseOut\"),this.setState(),a.hoverPoint=null},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=o(c.valueDecimals,\"\"),e=c.valuePrefix||\"\",f=c.valueSuffix||\"\";n(b.pointArrayMap||[\"y\"],function(b){b=\"{point.\"+b;if(e||f)a=a.replace(b+\"}\",e+b+\"}\"+f);a=a.replace(b+\"}\",b+\":,.\"+d+\"f}\")});return Ca(a,{point:this,series:this.series})},update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=e.chart,j=e.options,b=o(b,!0);d.firePointEvent(\"update\",\n{options:a},function(){d.applyOptions(a);if(T(a)&&(e.getAttribs(),f))a.marker&&a.marker.symbol?d.graphic=f.destroy():f.attr(d.pointAttr[d.state||\"\"]);g=qa(d,h);e.xData[g]=d.x;e.yData[g]=e.toYData?e.toYData(d):d.y;e.zData[g]=d.z;j.data[g]=d.options;e.isDirty=e.isDirtyData=!0;if(!e.fixedBox&&e.hasCartesianSeries)i.isDirtyBox=!0;j.legendType===\"point\"&&i.legend.destroyItem(d);b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.points,f=d.chart,g,h=d.data;La(b,f);a=o(a,!0);c.firePointEvent(\"remove\",\nnull,function(){g=qa(c,h);h.length===e.length&&e.splice(g,1);h.splice(g,1);d.options.data.splice(g,1);d.xData.splice(g,1);d.yData.splice(g,1);d.zData.splice(g,1);c.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&f.redraw()})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a===\"click\"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});z(this,a,b,c)},importEvents:function(){if(!this.hasImportedEvents){var a=\nx(this.series.options.point,this.options).events,b;this.events=a;for(b in a)J(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a){var b=this.plotX,c=this.plotY,d=this.series,e=d.options.states,f=Y[d.type].marker&&d.options.marker,g=f&&!f.enabled,h=f&&f.states[a],i=h&&h.enabled===!1,j=d.stateMarkerGraphic,k=this.marker||{},l=d.chart,m=this.pointAttr,a=a||\"\";if(!(a===this.state||this.selected&&a!==\"select\"||e[a]&&e[a].enabled===!1||a&&(i||g&&!h.enabled))){if(this.graphic)e=f&&this.graphic.symbolName&&\nm[a].r,this.graphic.attr(x(m[a],e?{x:b-e,y:c-e,width:2*e,height:2*e}:{}));else{if(a&&h)e=h.radius,k=k.symbol||d.symbol,j&&j.currentSymbol!==k&&(j=j.destroy()),j?j.attr({x:b-e,y:c-e}):(d.stateMarkerGraphic=j=l.renderer.symbol(k,b-e,c-e,2*e,2*e).attr(m[a]).add(d.markerGroup),j.currentSymbol=k);if(j)j[a&&l.isInsidePlot(b,c)?\"show\":\"hide\"]()}this.state=a}}};var Q=function(){};Q.prototype={isCartesian:!0,type:\"line\",pointClass:Pa,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:\"lineColor\",\"stroke-width\":\"lineWidth\",\nfill:\"fillColor\",r:\"radius\"},colorCounter:0,init:function(a,b){var c,d,e=a.series;this.chart=a;this.options=b=this.setOptions(b);this.linkedSeries=[];this.bindAxes();r(this,{name:b.name,state:\"\",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if($)b.animation=!1;d=b.events;for(c in d)J(this,c,d[c]);if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;this.getColor();this.getSymbol();this.setData(b.data,!1);if(this.isCartesian)a.hasCartesianSeries=\n!0;e.push(this);this._i=e.length-1;Kb(e,function(a,b){return o(a.options.index,a._i)-o(b.options.index,a._i)});n(e,function(a,b){a.index=b;a.name=a.name||\"Series \"+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;a.isCartesian&&n([\"xAxis\",\"yAxis\"],function(e){n(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]!==w&&b[e]===d.id||b[e]===w&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});a[e]||ka(18,!0)})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=o(b,a.pointStart,\n0);this.pointInterval=o(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else n(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart.options,c=b.plotOptions,d=c[this.type];this.userOptions=a;a=x(d,c.series,\na);this.tooltipOptions=x(b.tooltip,a.tooltip);d.marker===null&&delete a.marker;return a},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,e;e=a.color||Y[this.type].color;if(!e&&!a.colorByPoint)u(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)u(a._symbolIndex)?\na=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:function(a){var b=this.options,c=b.marker,d=a.options,e;e=d.symbolWidth;var f=this.chart.renderer,g=this.legendGroup,a=a.baseline-t(f.fontMetrics(d.itemStyle.fontSize).b*0.3);if(b.lineWidth){d={\"stroke-width\":b.lineWidth};if(b.dashStyle)d.dashstyle=b.dashStyle;this.legendLine=f.path([\"M\",0,a,\"L\",e,a]).attr(d).add(g)}if(c&&c.enabled)b=c.radius,this.legendSymbol=\ne=f.symbol(this.symbol,e/2-b,a-b,2*b,2*b).add(g),e.isMarker=!0},addPoint:function(a,b,c,d){var e=this.options,f=this.data,g=this.graph,h=this.area,i=this.chart,j=this.xData,k=this.yData,l=this.zData,m=this.names,p=g&&g.shift||0,q=e.data,s;La(d,i);c&&n([g,h,this.graphNeg,this.areaNeg],function(a){if(a)a.shift=p+1});if(h)h.isArea=!0;b=o(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);g=d.x;h=j.length;if(this.requireSorting&&g<j[h-1])for(s=!0;h&&j[h-1]>g;)h--;j.splice(h,0,g);\nk.splice(h,0,this.toYData?this.toYData(d):d.y);l.splice(h,0,d.z);if(m)m[g]=d.name;q.splice(h,0,a);s&&(this.data.splice(h,0,null),this.processData());e.legendType===\"point\"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),j.shift(),k.shift(),l.shift(),q.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},setData:function(a,b){var c=this.points,d=this.options,e=this.chart,f=null,g=this.xAxis,h=g&&g.categories&&!g.categories.length?[]:null,i;this.xIncrement=\nnull;this.pointRange=g&&g.categories?1:d.pointRange;this.colorCounter=0;var j=[],k=[],l=[],m=a?a.length:[];i=o(d.turboThreshold,1E3);var p=this.pointArrayMap,p=p&&p.length,q=!!this.toYData;if(i&&m>i){for(i=0;f===null&&i<m;)f=a[i],i++;if(sa(f)){f=o(d.pointStart,0);d=o(d.pointInterval,1);for(i=0;i<m;i++)j[i]=f,k[i]=a[i],f+=d;this.xIncrement=f}else if(Ia(f))if(p)for(i=0;i<m;i++)d=a[i],j[i]=d[0],k[i]=d.slice(1,p+1);else for(i=0;i<m;i++)d=a[i],j[i]=d[0],k[i]=d[1];else ka(12)}else for(i=0;i<m;i++)if(a[i]!==\nw&&(d={series:this},this.pointClass.prototype.applyOptions.apply(d,[a[i]]),j[i]=d.x,k[i]=q?this.toYData(d):d.y,l[i]=d.z,h&&d.name))h[d.x]=d.name;ea(k[0])&&ka(14,!0);this.data=[];this.options.data=a;this.xData=j;this.yData=k;this.zData=l;this.names=h;for(i=c&&c.length||0;i--;)c[i]&&c[i].destroy&&c[i].destroy();if(g)g.minRange=g.userMinRange;this.isDirty=this.isDirtyData=e.isDirtyBox=!0;o(b,!0)&&e.redraw(!1)},remove:function(a,b){var c=this,d=c.chart,a=o(a,!0);if(!c.isRemoving)c.isRemoving=!0,z(c,\"remove\",\nnull,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=!1},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i=this.options,j=i.cropThreshold,k=this.isCartesian;if(k&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(k&&this.sorted&&(!j||d>j||this.forceCrop))if(a=h.min,h=h.max,b[d-1]<a||b[0]>h)b=[],c=[];else if(b[0]<a||b[d-1]>h)e=this.cropData(this.xData,this.yData,a,h),b=e.xData,c=e.yData,e=e.start,\nf=!0;for(h=b.length-1;h>=0;h--)d=b[h]-b[h-1],d>0&&(g===w||d<g)?g=d:d<0&&this.requireSorting&&ka(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c;if(i.pointRange===null)this.pointRange=g||1;this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=o(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>=c){f=s(0,i-h);break}for(;i<e;i++)if(a[i]>d){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,\nb=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],m;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(m=0;m<g;m++)i=h+m,j?l[m]=(new f).init(this,[d[m]].concat(ja(e[m]))):(b[i]?k=b[i]:a[i]!==w&&(b[i]=k=(new f).init(this,a[i],d[m])),l[m]=k);if(b&&(g!==(c=b.length)||j))for(m=0;m<c;m++)if(m===h&&!j&&(m+=g),b[m])b[m].destroyElements(),b[m].plotX=w;this.data=b;this.points=l},setStackedPoints:function(){if(this.options.stacking&&\n!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.stack,e=e.stacking,h=this.stackKey,i=\"-\"+h,j=this.negStacks,k=this.yAxis,l=k.stacks,m=k.oldStacks,p,q,o,n,t;for(o=0;o<d;o++){n=a[o];t=b[o];q=(p=j&&t<f)?i:h;l[q]||(l[q]={});if(!l[q][n])m[q]&&m[q][n]?(l[q][n]=m[q][n],l[q][n].total=null):l[q][n]=new Mb(k,k.options.stackLabels,p,n,g,e);q=l[q][n];q.points[this.index]=[q.cum||0];e===\"percent\"?\n(p=p?h:i,j&&l[p]&&l[p][n]?(p=l[p][n],q.total=p.total=s(p.total,q.total)+N(t)||0):q.total+=N(t)||0):q.total+=t||0;q.cum=(q.cum||0)+(t||0);q.points[this.index].push(q.cum);c[o]=q.cum}if(e===\"percent\")k.usePercentage=!0;this.stackedYData=c;k.oldStacks={}}},setPercentStacks:function(){var a=this,b=a.stackKey,c=a.yAxis.stacks;n([b,\"-\"+b],function(b){var d;for(var e=a.xData.length,f,g;e--;)if(f=a.xData[e],d=(g=c[b]&&c[b][f])&&g.points[a.index],f=d)g=g.total?100/g.total:0,f[0]=ia(f[0]*g),f[1]=ia(f[1]*g),\na.stackedYData[e]=f[1]})},getExtremes:function(){var a=this.yAxis,b=this.processedXData,c=this.stackedYData||this.processedYData,d=c.length,e=[],f=0,g=this.xAxis.getExtremes(),h=g.min,g=g.max,i,j,k,l;for(l=0;l<d;l++)if(j=b[l],k=c[l],i=k!==null&&k!==w&&(!a.isLog||k.length||k>0),j=this.getExtremesFromAll||this.cropped||(b[l+1]||j)>=h&&(b[l-1]||j)<=g,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=o(void 0,Ja(e));this.dataMax=o(void 0,va(e))},translate:function(){this.processedXData||\nthis.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i===\"between\"||sa(i),k=a.threshold,a=0;a<g;a++){var l=f[a],m=l.x,p=l.y,q=l.low,n=e.stacks[(this.negStacks&&p<k?\"-\":\"\")+this.stackKey];if(e.isLog&&p<=0)l.y=p=null;l.plotX=c.translate(m,0,0,0,1,i,this.type===\"flags\");if(b&&this.visible&&n&&n[m])n=n[m],p=n.points[this.index],q=p[0],p=p[1],q===0&&(q=o(k,e.min)),e.isLog&&\nq<=0&&(q=null),l.percentage=b===\"percent\"&&p,l.total=l.stackTotal=n.total,l.stackY=p,n.setOffset(this.pointXOffset||0,this.barW||0);l.yBottom=u(q)?e.translate(q,0,1,0,1):null;h&&(p=this.modifyValue(p,l));l.plotY=typeof p===\"number\"&&p!==Infinity?e.translate(p,0,1,0,1):w;l.clientX=j?c.translate(m,0,0,0,1):l.plotX;l.negative=l.y<(k||0);l.category=d&&d[l.x]!==w?d[l.x]:l.x}this.getSegments()},setTooltipPoints:function(a){var b=[],c,d,e=this.xAxis,f=e&&e.getExtremes(),g=e?e.tooltipLen||e.len:this.chart.plotSizeX,\nh,i,j=[];if(this.options.enableMouseTracking!==!1){if(a)this.tooltipPoints=null;n(this.segments||this.points,function(a){b=b.concat(a)});e&&e.reversed&&(b=b.reverse());this.orderTooltipPoints&&this.orderTooltipPoints(b);a=b.length;for(i=0;i<a;i++)if(e=b[i],c=e.x,c>=f.min&&c<=f.max){h=b[i+1];c=d===w?0:d+1;for(d=b[i+1]?I(s(0,P((e.clientX+(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},tooltipHeaderFormatter:function(a){var b=this.tooltipOptions,c=b.xDateFormat,\nd=b.dateTimeLabelFormats,e=this.xAxis,f=e&&e.options.type===\"datetime\",b=b.headerFormat,e=e&&e.closestPointRange,g;if(f&&!c)if(e)for(g in D){if(D[g]>=e){c=d[g];break}}else c=d.day;f&&c&&sa(a.key)&&(b=b.replace(\"{point.key}\",\"{point.key:\"+c+\"}\"));return Ca(b,{point:a,series:this})},onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&z(this,\"mouseOver\");this.setState(\"hover\");a.hoverSeries=this},onMouseOut:function(){var a=this.options,\nb=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&z(this,\"mouseOut\");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState();b.hoverSeries=null},animate:function(a){var b=this,c=b.chart,d=c.renderer,e;e=b.options.animation;var f=c.clipBox,g=c.inverted,h;if(e&&!T(e))e=Y[b.type].animation;h=\"_sharedClip\"+e.duration+e.easing;if(a)a=c[h],e=c[h+\"m\"],a||(c[h]=a=d.clipRect(r(f,{width:0})),c[h+\"m\"]=e=d.clipRect(-99,g?-c.plotLeft:-c.plotTop,99,g?\nc.chartWidth:c.chartHeight)),b.group.clip(a),b.markerGroup.clip(e),b.sharedClipKey=h;else{if(a=c[h])a.animate({width:c.plotSizeX},e),c[h+\"m\"].animate({width:c.plotSizeX+99},e);b.animate=null;b.animationTimeout=setTimeout(function(){b.afterAnimate()},e.duration)}},afterAnimate:function(){var a=this.chart,b=this.sharedClipKey,c=this.group;c&&this.options.clip!==!1&&(c.clip(a.clipRect),this.markerGroup.clip());setTimeout(function(){b&&a[b]&&(a[b]=a[b].destroy(),a[b+\"m\"]=a[b+\"m\"].destroy())},100)},drawPoints:function(){var a,\nb=this.points,c=this.chart,d,e,f,g,h,i,j,k,l=this.options.marker,m,p=this.markerGroup;if(l.enabled||this._hasPointMarkers)for(f=b.length;f--;)if(g=b[f],d=P(g.plotX),e=g.plotY,k=g.graphic,i=g.marker||{},a=l.enabled&&i.enabled===w||i.enabled,m=c.isInsidePlot(t(d),e,c.inverted),a&&e!==w&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?\"select\":\"\"],h=a.r,i=o(i.symbol,this.symbol),j=i.indexOf(\"url\")===0,k)k.attr({visibility:m?Z?\"inherit\":\"visible\":\"hidden\"}).animate(r({x:d-h,y:e-h},k.symbolName?{width:2*\nh,height:2*h}:{}));else{if(m&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(p)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=o(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=Y[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color,h={stroke:g,fill:g},i=a.points||[],j=[],k,l=a.pointAttrToOptions,m=b.negativeColor,p=c.lineColor,q;\nb.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=e.color||ra(e.color||g).brighten(e.brightness).get();j[\"\"]=a.convertAttribs(c,h);n([\"hover\",\"select\"],function(b){j[b]=a.convertAttribs(d[b],j[\"\"])});a.pointAttr=j;for(g=i.length;g--;){h=i[g];if((c=h.options&&h.options.marker||h.options)&&c.enabled===!1)c.radius=0;if(h.negative&&m)h.color=h.fillColor=m;f=b.colorByPoint||h.color;if(h.options)for(q in l)u(c[l[q]])&&(f=!0);if(f){c=c||{};k=[];d=c.states||{};f=d.hover=\nd.hover||{};if(!b.marker)f.color=ra(f.color||h.color).brighten(f.brightness||e.brightness).get();k[\"\"]=a.convertAttribs(r({color:h.color,fillColor:h.color,lineColor:p===null?h.color:w},c),j[\"\"]);k.hover=a.convertAttribs(d.hover,j.hover,k[\"\"]);k.select=a.convertAttribs(d.select,j.select,k[\"\"])}else k=j;h.pointAttr=k}},update:function(a,b){var c=this.chart,d=this.type,e=W[d].prototype,f,a=x(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);\nfor(f in e)e.hasOwnProperty(f)&&(this[f]=w);r(this,W[a.type||d].prototype);this.init(c,a);o(b,!0)&&c.redraw(!1)},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\\/533/.test(oa),d,e,f=a.data||[],g,h,i;z(a,\"destroy\");aa(a);n([\"xAxis\",\"yAxis\"],function(b){if(i=a[b])ga(i.series,a),i.isDirty=i.forceRedraw=!0,i.stacks={}});a.legendItem&&a.chart.legend.destroyItem(a);for(e=f.length;e--;)(g=f[e])&&g.destroy&&g.destroy();a.points=null;clearTimeout(a.animationTimeout);n(\"area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip\".split(\",\"),\nfunction(b){a[b]&&(d=c&&b===\"group\"?\"hide\":\"destroy\",a[b][d]())});if(b.hoverSeries===a)b.hoverSeries=null;ga(b.series,a);for(h in a)delete a[h]},drawDataLabels:function(){var a=this,b=a.options.dataLabels,c=a.points,d,e,f,g;if(b.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(b),g=a.plotGroup(\"dataLabelsGroup\",\"data-labels\",a.visible?\"visible\":\"hidden\",b.zIndex||6),e=b,n(c,function(c){var i,j=c.dataLabel,k,l,m=c.connector,p=!0;d=c.options&&c.options.dataLabels;i=o(d&&d.enabled,e.enabled);\nif(j&&!i)c.dataLabel=j.destroy();else if(i){b=x(e,d);i=b.rotation;k=c.getLabelConfig();f=b.format?Ca(b.format,k):b.formatter.call(k,b);b.style.color=o(b.color,b.style.color,a.color,\"black\");if(j)if(u(f))j.attr({text:f}),p=!1;else{if(c.dataLabel=j=j.destroy(),m)c.connector=m.destroy()}else if(u(f)){j={fill:b.backgroundColor,stroke:b.borderColor,\"stroke-width\":b.borderWidth,r:b.borderRadius||0,rotation:i,padding:b.padding,zIndex:1};for(l in j)j[l]===w&&delete j[l];j=c.dataLabel=a.chart.renderer[i?\"text\":\n\"label\"](f,0,-999,null,null,null,b.useHTML).attr(j).css(b.style).add(g).shadow(b.shadow)}j&&a.alignDataLabel(c,j,b,null,p)}})},alignDataLabel:function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=o(a.plotX,-999),i=o(a.plotY,-999),j=b.getBBox();if(a=this.visible&&f.isInsidePlot(a.plotX,a.plotY,g))d=r({x:g?f.plotWidth-i:h,y:t(g?f.plotHeight-h:i),width:0,height:0},d),r(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?\"attr\":\"animate\"](g)):(b.align(c,\nnull,d),g=b.alignAttr,o(c.overflow,\"justify\")===\"justify\"?this.justifyDataLabel(b,c,g,j,d,e):o(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));a||b.attr({y:-999})},justifyDataLabel:function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h===\"right\"?b.align=\"left\":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h===\"left\"?b.align=\"right\":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i===\"bottom\"?b.verticalAlign=\"top\":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i===\n\"top\"?b.verticalAlign=\"bottom\":b.y=g.plotHeight-j,k=!0;if(k)a.placed=!f,a.align(b,null,e)},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;n(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,e,f)):(c.push(f?\"L\":\"M\"),d&&f&&(i=a[f-1],d===\"right\"?c.push(i.plotX,h):d===\"center\"?c.push((i.plotX+g)/2,i.plotY,(i.plotX+g)/2,h):c.push(g,i.plotY)),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a=this,b=[],c,d=[];n(a.segments,function(e){c=\na.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[[\"graph\",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=this.getGraphPath(),g=b.negativeColor;g&&c.push([\"graphNeg\",g]);n(c,function(c,g){var j=c[0],k=a[j];if(k)Wa(k),k.animate({d:f});else if(d&&f.length)k={stroke:c[1],\"stroke-width\":d,zIndex:1},e?k.dashstyle=e:k[\"stroke-linecap\"]=k[\"stroke-linejoin\"]=\"round\",a[j]=a.chart.renderer.path(f).attr(k).add(a.group).shadow(!g&&\nb.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=b.chartHeight,k=s(e,j),l=this.yAxis;if(d&&(f||g)){d=t(l.toPixels(a.threshold||0,!0));a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?\n(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};n([\"group\",\"markerGroup\"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)J(c,\"resize\",a),J(b,\"destroy\",function(){aa(c,\"resize\",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],\ng=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?\"attr\":\"animate\"](this.getPlotBox());return f},getPlotBox:function(){return{translateX:this.xAxis?this.xAxis.left:this.chart.plotLeft,translateY:this.yAxis?this.yAxis.top:this.chart.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this.chart,b,c=this.options,d=c.animation&&!!this.animate&&a.renderer.isSVG,e=this.visible?\"visible\":\"hidden\",f=c.zIndex,g=this.hasRendered,h=a.seriesGroup;b=this.plotGroup(\"group\",\n\"series\",e,f,h);this.markerGroup=this.plotGroup(\"markerGroup\",\"markers\",e,f,h);d&&this.animate(!0);this.getAttribs();b.inverted=this.isCartesian?a.inverted:!1;this.drawGraph&&(this.drawGraph(),this.clipNeg());this.drawDataLabels();this.drawPoints();this.options.enableMouseTracking!==!1&&this.drawTracker();a.inverted&&this.invertGroups();c.clip!==!1&&!this.sharedClipKey&&!g&&b.clip(a.clipRect);d?this.animate():g||this.afterAnimate();this.isDirty=this.isDirtyData=!1;this.hasRendered=!0},redraw:function(){var a=\nthis.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:o(d&&d.left,a.plotLeft),translateY:o(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints(!0);this.render();b&&z(this,\"updatedData\")},setState:function(a){var b=this.options,c=this.graph,d=this.graphNeg,e=b.states,b=b.lineWidth,a=a||\"\";if(this.state!==a)this.state=a,e[a]&&e[a].enabled===!1||(a&&(b=e[a].lineWidth||b+1),c&&!c.dashstyle&&\n(a={\"stroke-width\":b},c.attr(a),d&&d.attr(a)))},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===w?!h:a)?\"show\":\"hide\";n([\"group\",\"dataLabelsGroup\",\"markerGroup\",\"tracker\"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&n(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});n(c.linkedSeries,function(b){b.setVisible(a,\n!1)});if(g)d.isDirtyBox=!0;b!==!1&&d.redraw();z(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===w?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;z(this,a?\"select\":\"unselect\")},drawTracker:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,p=function(){if(f.hoverSeries!==\na)a.onMouseOver()};if(e&&!c)for(m=e+1;m--;)d[m]===\"M\"&&d.splice(m+1,0,d[m+1]-i,d[m+2],\"L\"),(m&&d[m]===\"M\"||m===e)&&d.splice(m,0,\"L\",d[m-2]+i,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push(\"M\",e.plotX-i,e.plotY,\"L\",e.plotX+i,e.plotY);j?j.attr({d:d}):(a.tracker=h.path(d).attr({\"stroke-linejoin\":\"round\",visibility:a.visible?\"visible\":\"hidden\",stroke:Qb,fill:c?Qb:S,\"stroke-width\":b.lineWidth+(c?0:2*i),zIndex:2}).add(a.group),n([a.tracker,a.markerGroup],function(a){a.addClass(\"highcharts-tracker\").on(\"mouseover\",\np).on(\"mouseout\",function(a){g.onTrackerMouseOut(a)}).css(l);if(ib)a.on(\"touchstart\",p)}))}};G=ha(Q);W.line=G;Y.area=x(X,{threshold:0});G=ha(Q,{type:\"area\",getSegments:function(){var a=[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,m,p;if(this.options.stacking&&!this.cropped){for(m=0;m<j.length;m++)g[j[m].x]=j[m];for(p in f)c.push(+p);c.sort(function(a,b){return a-b});n(c,function(a){if(!k||g[a]&&g[a].y!==null)g[a]?b.push(g[a]):\n(h=d.translate(a),l=f[a].percent?f[a].total?f[a].cum*100/f[a].total:0:f[a].cum,i=e.toPixels(l,!0),b.push({y:null,plotX:h,clientX:h,plotY:i,yBottom:i,onMouseOver:pa}))});b.length&&a.push(b)}else Q.prototype.getSegments.call(this),a=this.segments;this.segments=a},getSegmentPath:function(a){var b=Q.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push(\"L\",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-\n1;d>=0;d--)g=o(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},closeSegment:function(a,b,c){a.push(\"L\",b[b.length-1].plotX,c,\"L\",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];Q.prototype.drawGraph.apply(this);var a=this,b=this.areaPath,c=this.options,d=c.negativeColor,e=c.negativeFillColor,f=[[\"area\",this.color,c.fillColor]];(d||e)&&f.push([\"areaNeg\",d,e]);n(f,function(d){var e=d[0],\nf=a[e];f?f.animate({d:b}):a[e]=a.chart.renderer.path(b).attr({fill:o(d[2],ra(d[1]).setOpacity(o(c.fillOpacity,0.75)).get()),zIndex:0}).add(a.group)})},drawLegendSymbol:function(a,b){b.legendSymbol=this.chart.renderer.rect(0,a.baseline-11,a.options.symbolWidth,12,2).attr({zIndex:3}).add(b.legendGroup)}});W.area=G;Y.spline=x(X);F=ha(Q,{type:\"spline\",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(f&&g){a=f.plotY;j=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*\ne+a)/2.5;j=(1.5*d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=s(a,e),k=2*e-i):i<a&&i<e&&(i=I(a,e),k=2*e-i);k>g&&k>e?(k=s(g,e),i=2*e-k):k<g&&k<e&&(k=I(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=[\"C\",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=[\"M\",d,e];return b}});W.spline=F;Y.areaspline=x(Y.area);ma=G.prototype;F=ha(F,{type:\"areaspline\",closedStacks:!0,getSegmentPath:ma.getSegmentPath,closeSegment:ma.closeSegment,drawGraph:ma.drawGraph,\ndrawLegendSymbol:ma.drawLegendSymbol});W.areaspline=F;Y.column=x(X,{borderColor:\"#FFFFFF\",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:\"#C0C0C0\",borderColor:\"#000000\",shadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},stickyTracking:!1,threshold:0});F=ha(Q,{type:\"column\",pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\",\nr:\"borderRadius\"},cropShoulder:0,trackerGroups:[\"group\",\"dataLabelsGroup\"],negStacks:!0,init:function(){Q.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=c.reversed,f,g={},h,i=0;b.grouping===!1?i=1:n(a.chart.series,function(b){var c=b.options,e=b.yAxis;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos===e.pos)c.stacking?(f=b.stackKey,g[f]===\nw&&(g[f]=i++),h=g[f]):c.grouping!==!1&&(h=i++),b.columnIndex=h});var c=I(N(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||1),c.len),j=c*b.groupPadding,k=(c-2*j)/i,l=b.pointWidth,b=u(l)?(k-l)/2:k*b.pointPadding,l=o(l,k-2*b);return a.columnMetrics={width:l,offset:b+(j+((e?i-(a.columnIndex||0):a.columnIndex)||0)*k-c/2)*(e?-1:1)}},translate:function(){var a=this.chart,b=this.options,c=b.borderWidth,d=this.yAxis,e=this.translatedThreshold=d.getThreshold(b.threshold),f=o(b.minPointLength,\n5),b=this.getColumnMetrics(),g=b.width,h=this.barW=xa(s(g,1+2*c)),i=this.pointXOffset=b.offset,j=-(c%2?0.5:0),k=c%2?0.5:1;a.renderer.isVML&&a.inverted&&(k+=1);Q.prototype.translate.apply(this);n(this.points,function(a){var b=o(a.yBottom,e),c=I(s(-999-b,a.plotY),d.len+999+b),n=a.plotX+i,u=h,r=I(c,b),w,c=s(c,b)-r;N(c)<f&&f&&(c=f,r=t(N(r-e)>f?b-f:e-(d.translate(a.y,0,1,0,1)<=e?f:0)));a.barX=n;a.pointWidth=g;b=N(n)<0.5;u=t(n+u)+j;n=t(n)+j;u-=n;w=N(r)<0.5;c=t(r+c)+k;r=t(r)+k;c-=r;b&&(n+=1,u-=1);w&&(r-=\n1,c+=1);a.shapeType=\"rect\";a.shapeArgs={x:n,y:r,width:u,height:c}})},getSymbol:pa,drawLegendSymbol:G.prototype.drawLegendSymbol,drawGraph:pa,drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer,d;n(a.points,function(e){var f=e.plotY,g=e.graphic;if(f!==w&&!isNaN(f)&&e.y!==null)d=e.shapeArgs,g?(Wa(g),g.animate(x(d))):e.graphic=c[e.shapeType](d).attr(e.pointAttr[e.selected?\"select\":\"\"]).add(a.group).shadow(b.shadow,null,b.stacking&&!b.borderRadius);else if(g)e.graphic=g.destroy()})},drawTracker:function(){var a=\nthis,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver();for(;d&&!e;)e=d.point,d=d.parentNode;if(e!==w&&e!==b.hoverPoint)e.onMouseOver(c)};n(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)n(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass(\"highcharts-tracker\").on(\"mouseover\",f).on(\"mouseout\",function(a){c.onTrackerMouseOut(a)}).css(e),ib))a[b].on(\"touchstart\",\nf)}),a._hasTracking=!0},alignDataLabel:function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=a.dlBox||a.shapeArgs,i=a.below||a.plotY>o(this.translatedThreshold,f.plotSizeY),j=o(c.inside,!!this.options.stacking);if(h&&(d=x(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=o(c.align,!g||j?\"center\":i?\"right\":\"left\");c.verticalAlign=o(c.verticalAlign,g||j?\"middle\":i?\"top\":\"bottom\");Q.prototype.alignDataLabel.call(this,\na,b,c,d,e)},animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(Z)a?(e.scaleY=0.001,a=I(b.pos+b.len,s(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?\"translateX\":\"translateY\"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0});Q.prototype.remove.apply(a,arguments)}});W.column=F;Y.bar=\nx(Y.column);ma=ha(F,{type:\"bar\",inverted:!0});W.bar=ma;Y.scatter=x(X,{lineWidth:0,tooltip:{headerFormat:'<span style=\"font-size: 10px; color:{series.color}\">{series.name}</span><br/>',pointFormat:\"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>\",followPointer:!0},stickyTracking:!1});ma=ha(Q,{type:\"scatter\",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"markerGroup\"],drawTracker:F.prototype.drawTracker,setTooltipPoints:pa});W.scatter=ma;Y.pie=x(X,{borderColor:\"#FFFFFF\",borderWidth:1,\ncenter:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,legendType:\"point\",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});X={type:\"pie\",isCartesian:!1,pointClass:ha(Pa,{init:function(){Pa.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;r(a,{visible:a.visible!==!1,name:o(a.name,\"Slice\")});b=function(b){a.slice(b.type===\n\"select\")};J(a,\"select\",b);J(a,\"unselect\",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart,e;b.visible=b.options.visible=a=a===w?!b.visible:a;c.options.data[qa(b,c.data)]=b.options;e=a?\"show\":\"hide\";n([\"graphic\",\"dataLabel\",\"connector\",\"shadowGroup\"],function(a){if(b[a])b[a][e]()});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;La(c,d.chart);o(b,!0);this.sliced=this.options.sliced=\na=u(a)?a:!this.sliced;d.options.data[qa(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"group\",\"dataLabelsGroup\"],pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\"},getColor:pa,animate:function(a){var b=this,c=b.points,d=b.startAngleRad;if(!a)n(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/\n2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b){Q.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();o(b,!0)&&this.chart.redraw()},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;Q.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0?e.y/b*100:0,e.total=b},getCenter:function(){var a=\nthis.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[o(b[0],\"50%\"),o(b[1],\"50%\"),a.size||\"100%\",a.innerSize||0],g=I(e,f),h;return Na(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*C(a)/100:a)+(d?c:0)})},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ya/180*(i-90),i=(this.endAngleRad=ya/180*((c.endAngle||i+360)-90))-j,k=this.points,\nl=c.dataLabels.distance,c=c.ignoreHiddenPoint,m,n=k.length,o;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=R.asin((b-a[1])/(a[2]/2+l));return a[0]+(c?-1:1)*V(h)*(a[2]/2+l)};for(m=0;m<n;m++){o=k[m];f=j+b*i;if(!c||o.visible)b+=o.percentage/100;g=j+b*i;o.shapeType=\"arc\";o.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:t(f*1E3)/1E3,end:t(g*1E3)/1E3};h=(g+f)/2;h>0.75*i&&(h-=2*ya);o.slicedTranslation={translateX:t(V(h)*d),translateY:t(ca(h)*d)};f=V(h)*a[2]/2;g=ca(h)*a[2]/2;o.tooltipPos=\n[a[0]+f*0.7,a[1]+g*0.7];o.half=h<-ya/2||h>ya/2?1:0;o.angle=h;e=I(e,l/2);o.labelPos=[a[0]+f+V(h)*l,a[1]+g+ca(h)*l,a[0]+f+V(h)*e,a[1]+g+ca(h)*e,a[0]+f,a[1]+g,l<0?\"center\":o.half?\"right\":\"left\",h]}},setTooltipPoints:pa,drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g(\"shadow\").add(a.group);n(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g(\"shadow\").add(a.shadowGroup);c=h.sliced?\nh.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(r(g,c)):h.graphic=d=b.arc(g).setRadialReference(a.center).attr(h.pointAttr[h.selected?\"select\":\"\"]).attr({\"stroke-linejoin\":\"round\"}).attr(c).add(a.group).shadow(e,f);h.visible===!1&&h.setVisible(!1)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawDataLabels:function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=o(e.connectorPadding,10),g=o(e.connectorWidth,1),\nh=d.plotWidth,d=d.plotHeight,i,j,k=o(e.softConnector,!0),l=e.distance,m=a.center,p=m[2]/2,q=m[1],u=l>0,r,w,v,x,C=[[],[]],y,z,E,H,B,D=[0,0,0,0],I=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){Q.prototype.drawDataLabels.apply(a);n(b,function(a){a.dataLabel&&C[a.half].push(a)});for(H=0;!x&&b[H];)x=b[H]&&b[H].dataLabel&&(b[H].dataLabel.getBBox().height||21),H++;for(H=2;H--;){var b=[],K=[],G=C[H],J=G.length,F;a.sortByAngle(G,H-0.5);if(l>0){for(B=q-p-l;B<=q+p+l;B+=x)b.push(B);\nw=b.length;if(J>w){c=[].concat(G);c.sort(I);for(B=J;B--;)c[B].rank=B;for(B=J;B--;)G[B].rank>=w&&G.splice(B,1);J=G.length}for(B=0;B<J;B++){c=G[B];v=c.labelPos;c=9999;var O,M;for(M=0;M<w;M++)O=N(b[M]-v[1]),O<c&&(c=O,F=M);if(F<B&&b[B]!==null)F=B;else for(w<J-B+F&&b[B]!==null&&(F=w-J+B);b[F]===null;)F++;K.push({i:F,y:b[F]});b[F]=null}K.sort(I)}for(B=0;B<J;B++){c=G[B];v=c.labelPos;r=c.dataLabel;E=c.visible===!1?\"hidden\":\"visible\";c=v[1];if(l>0){if(w=K.pop(),F=w.i,z=w.y,c>z&&b[F+1]!==null||c<z&&b[F-1]!==\nnull)z=c}else z=c;y=e.justify?m[0]+(H?-1:1)*(p+l):a.getX(F===0||F===b.length-1?c:z,H);r._attr={visibility:E,align:v[6]};r._pos={x:y+e.x+({left:f,right:-f}[v[6]]||0),y:z+e.y-10};r.connX=y;r.connY=z;if(this.options.size===null)w=r.width,y-w<f?D[3]=s(t(w-y+f),D[3]):y+w>h-f&&(D[1]=s(t(y+w-h+f),D[1])),z-x/2<0?D[0]=s(t(-z+x/2),D[0]):z+x/2>d&&(D[2]=s(t(z+x/2-d),D[2]))}}if(va(D)===0||this.verifyDataLabelOverflow(D))this.placeDataLabels(),u&&g&&n(this.points,function(b){i=b.connector;v=b.labelPos;if((r=b.dataLabel)&&\nr._pos)E=r._attr.visibility,y=r.connX,z=r.connY,j=k?[\"M\",y+(v[6]===\"left\"?5:-5),z,\"C\",y,z,2*v[2]-v[4],2*v[3]-v[5],v[2],v[3],\"L\",v[4],v[5]]:[\"M\",y+(v[6]===\"left\"?5:-5),z,\"L\",v[2],v[3],\"L\",v[4],v[5]],i?(i.animate({d:j}),i.attr(\"visibility\",E)):b.connector=i=a.chart.renderer.path(j).attr({\"stroke-width\":g,stroke:e.connectorColor||b.color||\"#606060\",visibility:E}).add(a.group);else if(i)b.connector=i.destroy()})}},verifyDataLabelOverflow:function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||\n80,f;d[0]!==null?e=s(b[2]-s(a[1],a[3]),c):(e=s(b[2]-a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=s(I(e,b[2]-s(a[0],a[2])),c):(e=s(I(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);e<b[2]?(b[2]=e,this.translate(b),n(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels()):f=!0;return f},placeDataLabels:function(){n(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?\"animate\":\"attr\"](b),a.moved=!0):a&&a.attr({y:-999})})},alignDataLabel:pa,\ndrawTracker:F.prototype.drawTracker,drawLegendSymbol:G.prototype.drawLegendSymbol,getSymbol:pa};X=ha(Q,X);W.pie=X;r(Highcharts,{Axis:db,Chart:yb,Color:ra,Legend:eb,Pointer:xb,Point:Pa,Tick:Ma,Tooltip:wb,Renderer:Va,Series:Q,SVGElement:wa,SVGRenderer:Ha,arrayMin:Ja,arrayMax:va,charts:Ga,dateFormat:Xa,format:Ca,pathAnim:Ab,getOptions:function(){return M},hasBidiBug:Ub,isTouchDevice:Ob,numberFormat:Aa,seriesTypes:W,setOptions:function(a){M=x(M,a);Lb();return M},addEvent:J,removeEvent:aa,createElement:U,\ndiscardElement:Ta,css:K,each:n,extend:r,map:Na,merge:x,pick:o,splat:ja,extendClass:ha,pInt:C,wrap:mb,svg:Z,canvas:$,vml:!Z&&!$,product:\"Highcharts\",version:\"3.0.6\"})})();\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/highcharts.src.js",
    "content": "// ==ClosureCompiler==\n// @compilation_level SIMPLE_OPTIMIZATIONS\n\n/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n * (c) 2009-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console, each, grep */\n\n(function () {\n// encapsulated variables\nvar UNDEFINED,\n\tdoc = document,\n\twin = window,\n\tmath = Math,\n\tmathRound = math.round,\n\tmathFloor = math.floor,\n\tmathCeil = math.ceil,\n\tmathMax = math.max,\n\tmathMin = math.min,\n\tmathAbs = math.abs,\n\tmathCos = math.cos,\n\tmathSin = math.sin,\n\tmathPI = math.PI,\n\tdeg2rad = mathPI * 2 / 360,\n\n\n\t// some variables\n\tuserAgent = navigator.userAgent,\n\tisOpera = win.opera,\n\tisIE = /msie/i.test(userAgent) && !isOpera,\n\tdocMode8 = doc.documentMode === 8,\n\tisWebKit = /AppleWebKit/.test(userAgent),\n\tisFirefox = /Firefox/.test(userAgent),\n\tisTouchDevice = /(Mobile|Android|Windows Phone)/.test(userAgent),\n\tSVG_NS = 'http://www.w3.org/2000/svg',\n\thasSVG = !!doc.createElementNS && !!doc.createElementNS(SVG_NS, 'svg').createSVGRect,\n\thasBidiBug = isFirefox && parseInt(userAgent.split('Firefox/')[1], 10) < 4, // issue #38\n\tuseCanVG = !hasSVG && !isIE && !!doc.createElement('canvas').getContext,\n\tRenderer,\n\thasTouch = doc.documentElement.ontouchstart !== UNDEFINED,\n\tsymbolSizes = {},\n\tidCounter = 0,\n\tgarbageBin,\n\tdefaultOptions,\n\tdateFormat, // function\n\tglobalAnimation,\n\tpathAnim,\n\ttimeUnits,\n\tnoop = function () {},\n\tcharts = [],\n\tPRODUCT = 'Highcharts',\n\tVERSION = '3.0.6',\n\n\t// some constants for frequently used strings\n\tDIV = 'div',\n\tABSOLUTE = 'absolute',\n\tRELATIVE = 'relative',\n\tHIDDEN = 'hidden',\n\tPREFIX = 'highcharts-',\n\tVISIBLE = 'visible',\n\tPX = 'px',\n\tNONE = 'none',\n\tM = 'M',\n\tL = 'L',\n\t/*\n\t * Empirical lowest possible opacities for TRACKER_FILL\n\t * IE6: 0.002\n\t * IE7: 0.002\n\t * IE8: 0.002\n\t * IE9: 0.00000000001 (unlimited)\n\t * IE10: 0.0001 (exporting only)\n\t * FF: 0.00000000001 (unlimited)\n\t * Chrome: 0.000001\n\t * Safari: 0.000001\n\t * Opera: 0.00000000001 (unlimited)\n\t */\n\tTRACKER_FILL = 'rgba(192,192,192,' + (hasSVG ? 0.0001 : 0.002) + ')', // invisible but clickable\n\t//TRACKER_FILL = 'rgba(192,192,192,0.5)',\n\tNORMAL_STATE = '',\n\tHOVER_STATE = 'hover',\n\tSELECT_STATE = 'select',\n\tMILLISECOND = 'millisecond',\n\tSECOND = 'second',\n\tMINUTE = 'minute',\n\tHOUR = 'hour',\n\tDAY = 'day',\n\tWEEK = 'week',\n\tMONTH = 'month',\n\tYEAR = 'year',\n\n\t// constants for attributes\n\tLINEAR_GRADIENT = 'linearGradient',\n\tSTOPS = 'stops',\n\tSTROKE_WIDTH = 'stroke-width',\n\n\t// time methods, changed based on whether or not UTC is used\n\tmakeTime,\n\tgetMinutes,\n\tgetHours,\n\tgetDay,\n\tgetDate,\n\tgetMonth,\n\tgetFullYear,\n\tsetMinutes,\n\tsetHours,\n\tsetDate,\n\tsetMonth,\n\tsetFullYear,\n\n\n\t// lookup over the types and the associated classes\n\tseriesTypes = {};\n\n// The Highcharts namespace\nwin.Highcharts = win.Highcharts ? error(16, true) : {};\n\n/**\n * Extend an object with the members of another\n * @param {Object} a The object to be extended\n * @param {Object} b The object to add to the first one\n */\nfunction extend(a, b) {\n\tvar n;\n\tif (!a) {\n\t\ta = {};\n\t}\n\tfor (n in b) {\n\t\ta[n] = b[n];\n\t}\n\treturn a;\n}\n\t\n/**\n * Deep merge two or more objects and return a third object.\n * Previously this function redirected to jQuery.extend(true), but this had two limitations.\n * First, it deep merged arrays, which lead to workarounds in Highcharts. Second,\n * it copied properties from extended prototypes. \n */\nfunction merge() {\n\tvar i,\n\t\tlen = arguments.length,\n\t\tret = {},\n\t\tdoCopy = function (copy, original) {\n\t\t\tvar value, key;\n\n\t\t\t// An object is replacing a primitive\n\t\t\tif (typeof copy !== 'object') {\n\t\t\t\tcopy = {};\n\t\t\t}\n\n\t\t\tfor (key in original) {\n\t\t\t\tif (original.hasOwnProperty(key)) {\n\t\t\t\t\tvalue = original[key];\n\n\t\t\t\t\t// Copy the contents of objects, but not arrays or DOM nodes\n\t\t\t\t\tif (value && typeof value === 'object' && Object.prototype.toString.call(value) !== '[object Array]'\n\t\t\t\t\t\t\t&& typeof value.nodeType !== 'number') {\n\t\t\t\t\t\tcopy[key] = doCopy(copy[key] || {}, value);\n\t\t\t\t\n\t\t\t\t\t// Primitives and arrays are copied over directly\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcopy[key] = original[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t// For each argument, extend the return\n\tfor (i = 0; i < len; i++) {\n\t\tret = doCopy(ret, arguments[i]);\n\t}\n\n\treturn ret;\n}\n\n/**\n * Take an array and turn into a hash with even number arguments as keys and odd numbers as\n * values. Allows creating constants for commonly used style properties, attributes etc.\n * Avoid it in performance critical situations like looping\n */\nfunction hash() {\n\tvar i = 0,\n\t\targs = arguments,\n\t\tlength = args.length,\n\t\tobj = {};\n\tfor (; i < length; i++) {\n\t\tobj[args[i++]] = args[i];\n\t}\n\treturn obj;\n}\n\n/**\n * Shortcut for parseInt\n * @param {Object} s\n * @param {Number} mag Magnitude\n */\nfunction pInt(s, mag) {\n\treturn parseInt(s, mag || 10);\n}\n\n/**\n * Check for string\n * @param {Object} s\n */\nfunction isString(s) {\n\treturn typeof s === 'string';\n}\n\n/**\n * Check for object\n * @param {Object} obj\n */\nfunction isObject(obj) {\n\treturn typeof obj === 'object';\n}\n\n/**\n * Check for array\n * @param {Object} obj\n */\nfunction isArray(obj) {\n\treturn Object.prototype.toString.call(obj) === '[object Array]';\n}\n\n/**\n * Check for number\n * @param {Object} n\n */\nfunction isNumber(n) {\n\treturn typeof n === 'number';\n}\n\nfunction log2lin(num) {\n\treturn math.log(num) / math.LN10;\n}\nfunction lin2log(num) {\n\treturn math.pow(10, num);\n}\n\n/**\n * Remove last occurence of an item from an array\n * @param {Array} arr\n * @param {Mixed} item\n */\nfunction erase(arr, item) {\n\tvar i = arr.length;\n\twhile (i--) {\n\t\tif (arr[i] === item) {\n\t\t\tarr.splice(i, 1);\n\t\t\tbreak;\n\t\t}\n\t}\n\t//return arr;\n}\n\n/**\n * Returns true if the object is not null or undefined. Like MooTools' $.defined.\n * @param {Object} obj\n */\nfunction defined(obj) {\n\treturn obj !== UNDEFINED && obj !== null;\n}\n\n/**\n * Set or get an attribute or an object of attributes. Can't use jQuery attr because\n * it attempts to set expando properties on the SVG element, which is not allowed.\n *\n * @param {Object} elem The DOM element to receive the attribute(s)\n * @param {String|Object} prop The property or an abject of key-value pairs\n * @param {String} value The value if a single property is set\n */\nfunction attr(elem, prop, value) {\n\tvar key,\n\t\tsetAttribute = 'setAttribute',\n\t\tret;\n\n\t// if the prop is a string\n\tif (isString(prop)) {\n\t\t// set the value\n\t\tif (defined(value)) {\n\n\t\t\telem[setAttribute](prop, value);\n\n\t\t// get the value\n\t\t} else if (elem && elem.getAttribute) { // elem not defined when printing pie demo...\n\t\t\tret = elem.getAttribute(prop);\n\t\t}\n\n\t// else if prop is defined, it is a hash of key/value pairs\n\t} else if (defined(prop) && isObject(prop)) {\n\t\tfor (key in prop) {\n\t\t\telem[setAttribute](key, prop[key]);\n\t\t}\n\t}\n\treturn ret;\n}\n/**\n * Check if an element is an array, and if not, make it into an array. Like\n * MooTools' $.splat.\n */\nfunction splat(obj) {\n\treturn isArray(obj) ? obj : [obj];\n}\n\n\n/**\n * Return the first value that is defined. Like MooTools' $.pick.\n */\nfunction pick() {\n\tvar args = arguments,\n\t\ti,\n\t\targ,\n\t\tlength = args.length;\n\tfor (i = 0; i < length; i++) {\n\t\targ = args[i];\n\t\tif (typeof arg !== 'undefined' && arg !== null) {\n\t\t\treturn arg;\n\t\t}\n\t}\n}\n\n/**\n * Set CSS on a given element\n * @param {Object} el\n * @param {Object} styles Style object with camel case property names\n */\nfunction css(el, styles) {\n\tif (isIE) {\n\t\tif (styles && styles.opacity !== UNDEFINED) {\n\t\t\tstyles.filter = 'alpha(opacity=' + (styles.opacity * 100) + ')';\n\t\t}\n\t}\n\textend(el.style, styles);\n}\n\n/**\n * Utility function to create element with attributes and styles\n * @param {Object} tag\n * @param {Object} attribs\n * @param {Object} styles\n * @param {Object} parent\n * @param {Object} nopad\n */\nfunction createElement(tag, attribs, styles, parent, nopad) {\n\tvar el = doc.createElement(tag);\n\tif (attribs) {\n\t\textend(el, attribs);\n\t}\n\tif (nopad) {\n\t\tcss(el, {padding: 0, border: NONE, margin: 0});\n\t}\n\tif (styles) {\n\t\tcss(el, styles);\n\t}\n\tif (parent) {\n\t\tparent.appendChild(el);\n\t}\n\treturn el;\n}\n\n/**\n * Extend a prototyped class by new members\n * @param {Object} parent\n * @param {Object} members\n */\nfunction extendClass(parent, members) {\n\tvar object = function () {};\n\tobject.prototype = new parent();\n\textend(object.prototype, members);\n\treturn object;\n}\n\n/**\n * Format a number and return a string based on input settings\n * @param {Number} number The input number to format\n * @param {Number} decimals The amount of decimals\n * @param {String} decPoint The decimal point, defaults to the one given in the lang options\n * @param {String} thousandsSep The thousands separator, defaults to the one given in the lang options\n */\nfunction numberFormat(number, decimals, decPoint, thousandsSep) {\n\tvar lang = defaultOptions.lang,\n\t\t// http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_number_format/\n\t\tn = +number || 0,\n\t\tc = decimals === -1 ?\n\t\t\t(n.toString().split('.')[1] || '').length : // preserve decimals\n\t\t\t(isNaN(decimals = mathAbs(decimals)) ? 2 : decimals),\n\t\td = decPoint === undefined ? lang.decimalPoint : decPoint,\n\t\tt = thousandsSep === undefined ? lang.thousandsSep : thousandsSep,\n\t\ts = n < 0 ? \"-\" : \"\",\n\t\ti = String(pInt(n = mathAbs(n).toFixed(c))),\n\t\tj = i.length > 3 ? i.length % 3 : 0;\n\n\treturn s + (j ? i.substr(0, j) + t : \"\") + i.substr(j).replace(/(\\d{3})(?=\\d)/g, \"$1\" + t) +\n\t\t(c ? d + mathAbs(n - i).toFixed(c).slice(2) : \"\");\n}\n\n/**\n * Pad a string to a given length by adding 0 to the beginning\n * @param {Number} number\n * @param {Number} length\n */\nfunction pad(number, length) {\n\t// Create an array of the remaining length +1 and join it with 0's\n\treturn new Array((length || 2) + 1 - String(number).length).join(0) + number;\n}\n\n/**\n * Wrap a method with extended functionality, preserving the original function\n * @param {Object} obj The context object that the method belongs to \n * @param {String} method The name of the method to extend\n * @param {Function} func A wrapper function callback. This function is called with the same arguments\n * as the original function, except that the original function is unshifted and passed as the first \n * argument. \n */\nfunction wrap(obj, method, func) {\n\tvar proceed = obj[method];\n\tobj[method] = function () {\n\t\tvar args = Array.prototype.slice.call(arguments);\n\t\targs.unshift(proceed);\n\t\treturn func.apply(this, args);\n\t};\n}\n\n/**\n * Based on http://www.php.net/manual/en/function.strftime.php\n * @param {String} format\n * @param {Number} timestamp\n * @param {Boolean} capitalize\n */\ndateFormat = function (format, timestamp, capitalize) {\n\tif (!defined(timestamp) || isNaN(timestamp)) {\n\t\treturn 'Invalid date';\n\t}\n\tformat = pick(format, '%Y-%m-%d %H:%M:%S');\n\n\tvar date = new Date(timestamp),\n\t\tkey, // used in for constuct below\n\t\t// get the basic time values\n\t\thours = date[getHours](),\n\t\tday = date[getDay](),\n\t\tdayOfMonth = date[getDate](),\n\t\tmonth = date[getMonth](),\n\t\tfullYear = date[getFullYear](),\n\t\tlang = defaultOptions.lang,\n\t\tlangWeekdays = lang.weekdays,\n\n\t\t// List all format keys. Custom formats can be added from the outside. \n\t\treplacements = extend({\n\n\t\t\t// Day\n\t\t\t'a': langWeekdays[day].substr(0, 3), // Short weekday, like 'Mon'\n\t\t\t'A': langWeekdays[day], // Long weekday, like 'Monday'\n\t\t\t'd': pad(dayOfMonth), // Two digit day of the month, 01 to 31\n\t\t\t'e': dayOfMonth, // Day of the month, 1 through 31\n\n\t\t\t// Week (none implemented)\n\t\t\t//'W': weekNumber(),\n\n\t\t\t// Month\n\t\t\t'b': lang.shortMonths[month], // Short month, like 'Jan'\n\t\t\t'B': lang.months[month], // Long month, like 'January'\n\t\t\t'm': pad(month + 1), // Two digit month number, 01 through 12\n\n\t\t\t// Year\n\t\t\t'y': fullYear.toString().substr(2, 2), // Two digits year, like 09 for 2009\n\t\t\t'Y': fullYear, // Four digits year, like 2009\n\n\t\t\t// Time\n\t\t\t'H': pad(hours), // Two digits hours in 24h format, 00 through 23\n\t\t\t'I': pad((hours % 12) || 12), // Two digits hours in 12h format, 00 through 11\n\t\t\t'l': (hours % 12) || 12, // Hours in 12h format, 1 through 12\n\t\t\t'M': pad(date[getMinutes]()), // Two digits minutes, 00 through 59\n\t\t\t'p': hours < 12 ? 'AM' : 'PM', // Upper case AM or PM\n\t\t\t'P': hours < 12 ? 'am' : 'pm', // Lower case AM or PM\n\t\t\t'S': pad(date.getSeconds()), // Two digits seconds, 00 through  59\n\t\t\t'L': pad(mathRound(timestamp % 1000), 3) // Milliseconds (naming from Ruby)\n\t\t}, Highcharts.dateFormats);\n\n\n\t// do the replaces\n\tfor (key in replacements) {\n\t\twhile (format.indexOf('%' + key) !== -1) { // regex would do it in one line, but this is faster\n\t\t\tformat = format.replace('%' + key, typeof replacements[key] === 'function' ? replacements[key](timestamp) : replacements[key]);\n\t\t}\n\t}\n\n\t// Optionally capitalize the string and return\n\treturn capitalize ? format.substr(0, 1).toUpperCase() + format.substr(1) : format;\n};\n\n/** \n * Format a single variable. Similar to sprintf, without the % prefix.\n */\nfunction formatSingle(format, val) {\n\tvar floatRegex = /f$/,\n\t\tdecRegex = /\\.([0-9])/,\n\t\tlang = defaultOptions.lang,\n\t\tdecimals;\n\n\tif (floatRegex.test(format)) { // float\n\t\tdecimals = format.match(decRegex);\n\t\tdecimals = decimals ? decimals[1] : -1;\n\t\tval = numberFormat(\n\t\t\tval,\n\t\t\tdecimals,\n\t\t\tlang.decimalPoint,\n\t\t\tformat.indexOf(',') > -1 ? lang.thousandsSep : ''\n\t\t);\n\t} else {\n\t\tval = dateFormat(format, val);\n\t}\n\treturn val;\n}\n\n/**\n * Format a string according to a subset of the rules of Python's String.format method.\n */\nfunction format(str, ctx) {\n\tvar splitter = '{',\n\t\tisInside = false,\n\t\tsegment,\n\t\tvalueAndFormat,\n\t\tpath,\n\t\ti,\n\t\tlen,\n\t\tret = [],\n\t\tval,\n\t\tindex;\n\t\n\twhile ((index = str.indexOf(splitter)) !== -1) {\n\t\t\n\t\tsegment = str.slice(0, index);\n\t\tif (isInside) { // we're on the closing bracket looking back\n\t\t\t\n\t\t\tvalueAndFormat = segment.split(':');\n\t\t\tpath = valueAndFormat.shift().split('.'); // get first and leave format\n\t\t\tlen = path.length;\n\t\t\tval = ctx;\n\n\t\t\t// Assign deeper paths\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tval = val[path[i]];\n\t\t\t}\n\n\t\t\t// Format the replacement\n\t\t\tif (valueAndFormat.length) {\n\t\t\t\tval = formatSingle(valueAndFormat.join(':'), val);\n\t\t\t}\n\n\t\t\t// Push the result and advance the cursor\n\t\t\tret.push(val);\n\t\t\t\n\t\t} else {\n\t\t\tret.push(segment);\n\t\t\t\n\t\t}\n\t\tstr = str.slice(index + 1); // the rest\n\t\tisInside = !isInside; // toggle\n\t\tsplitter = isInside ? '}' : '{'; // now look for next matching bracket\n\t}\n\tret.push(str);\n\treturn ret.join('');\n}\n\n/**\n * Get the magnitude of a number\n */\nfunction getMagnitude(num) {\n\treturn math.pow(10, mathFloor(math.log(num) / math.LN10));\n}\n\n/**\n * Take an interval and normalize it to multiples of 1, 2, 2.5 and 5\n * @param {Number} interval\n * @param {Array} multiples\n * @param {Number} magnitude\n * @param {Object} options\n */\nfunction normalizeTickInterval(interval, multiples, magnitude, options) {\n\tvar normalized, i;\n\n\t// round to a tenfold of 1, 2, 2.5 or 5\n\tmagnitude = pick(magnitude, 1);\n\tnormalized = interval / magnitude;\n\n\t// multiples for a linear scale\n\tif (!multiples) {\n\t\tmultiples = [1, 2, 2.5, 5, 10];\n\n\t\t// the allowDecimals option\n\t\tif (options && options.allowDecimals === false) {\n\t\t\tif (magnitude === 1) {\n\t\t\t\tmultiples = [1, 2, 5, 10];\n\t\t\t} else if (magnitude <= 0.1) {\n\t\t\t\tmultiples = [1 / magnitude];\n\t\t\t}\n\t\t}\n\t}\n\n\t// normalize the interval to the nearest multiple\n\tfor (i = 0; i < multiples.length; i++) {\n\t\tinterval = multiples[i];\n\t\tif (normalized <= (multiples[i] + (multiples[i + 1] || multiples[i])) / 2) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// multiply back to the correct magnitude\n\tinterval *= magnitude;\n\n\treturn interval;\n}\n\n/**\n * Get a normalized tick interval for dates. Returns a configuration object with\n * unit range (interval), count and name. Used to prepare data for getTimeTicks. \n * Previously this logic was part of getTimeTicks, but as getTimeTicks now runs\n * of segments in stock charts, the normalizing logic was extracted in order to \n * prevent it for running over again for each segment having the same interval. \n * #662, #697.\n */\nfunction normalizeTimeTickInterval(tickInterval, unitsOption) {\n\tvar units = unitsOption || [[\n\t\t\t\tMILLISECOND, // unit name\n\t\t\t\t[1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples\n\t\t\t], [\n\t\t\t\tSECOND,\n\t\t\t\t[1, 2, 5, 10, 15, 30]\n\t\t\t], [\n\t\t\t\tMINUTE,\n\t\t\t\t[1, 2, 5, 10, 15, 30]\n\t\t\t], [\n\t\t\t\tHOUR,\n\t\t\t\t[1, 2, 3, 4, 6, 8, 12]\n\t\t\t], [\n\t\t\t\tDAY,\n\t\t\t\t[1, 2]\n\t\t\t], [\n\t\t\t\tWEEK,\n\t\t\t\t[1, 2]\n\t\t\t], [\n\t\t\t\tMONTH,\n\t\t\t\t[1, 2, 3, 4, 6]\n\t\t\t], [\n\t\t\t\tYEAR,\n\t\t\t\tnull\n\t\t\t]],\n\t\tunit = units[units.length - 1], // default unit is years\n\t\tinterval = timeUnits[unit[0]],\n\t\tmultiples = unit[1],\n\t\tcount,\n\t\ti;\n\t\t\n\t// loop through the units to find the one that best fits the tickInterval\n\tfor (i = 0; i < units.length; i++) {\n\t\tunit = units[i];\n\t\tinterval = timeUnits[unit[0]];\n\t\tmultiples = unit[1];\n\n\n\t\tif (units[i + 1]) {\n\t\t\t// lessThan is in the middle between the highest multiple and the next unit.\n\t\t\tvar lessThan = (interval * multiples[multiples.length - 1] +\n\t\t\t\t\t\ttimeUnits[units[i + 1][0]]) / 2;\n\n\t\t\t// break and keep the current unit\n\t\t\tif (tickInterval <= lessThan) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// prevent 2.5 years intervals, though 25, 250 etc. are allowed\n\tif (interval === timeUnits[YEAR] && tickInterval < 5 * interval) {\n\t\tmultiples = [1, 2, 5];\n\t}\n\n\t// get the count\n\tcount = normalizeTickInterval(\n\t\ttickInterval / interval, \n\t\tmultiples,\n\t\tunit[0] === YEAR ? getMagnitude(tickInterval / interval) : 1 // #1913\n\t);\n\t\n\treturn {\n\t\tunitRange: interval,\n\t\tcount: count,\n\t\tunitName: unit[0]\n\t};\n}\n\n/**\n * Set the tick positions to a time unit that makes sense, for example\n * on the first of each month or on every Monday. Return an array\n * with the time positions. Used in datetime axes as well as for grouping\n * data on a datetime axis.\n *\n * @param {Object} normalizedInterval The interval in axis values (ms) and the count\n * @param {Number} min The minimum in axis values\n * @param {Number} max The maximum in axis values\n * @param {Number} startOfWeek\n */\nfunction getTimeTicks(normalizedInterval, min, max, startOfWeek) {\n\tvar tickPositions = [],\n\t\ti,\n\t\thigherRanks = {},\n\t\tuseUTC = defaultOptions.global.useUTC,\n\t\tminYear, // used in months and years as a basis for Date.UTC()\n\t\tminDate = new Date(min),\n\t\tinterval = normalizedInterval.unitRange,\n\t\tcount = normalizedInterval.count;\n\n\tif (defined(min)) { // #1300\n\t\tif (interval >= timeUnits[SECOND]) { // second\n\t\t\tminDate.setMilliseconds(0);\n\t\t\tminDate.setSeconds(interval >= timeUnits[MINUTE] ? 0 :\n\t\t\t\tcount * mathFloor(minDate.getSeconds() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[MINUTE]) { // minute\n\t\t\tminDate[setMinutes](interval >= timeUnits[HOUR] ? 0 :\n\t\t\t\tcount * mathFloor(minDate[getMinutes]() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[HOUR]) { // hour\n\t\t\tminDate[setHours](interval >= timeUnits[DAY] ? 0 :\n\t\t\t\tcount * mathFloor(minDate[getHours]() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[DAY]) { // day\n\t\t\tminDate[setDate](interval >= timeUnits[MONTH] ? 1 :\n\t\t\t\tcount * mathFloor(minDate[getDate]() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[MONTH]) { // month\n\t\t\tminDate[setMonth](interval >= timeUnits[YEAR] ? 0 :\n\t\t\t\tcount * mathFloor(minDate[getMonth]() / count));\n\t\t\tminYear = minDate[getFullYear]();\n\t\t}\n\t\n\t\tif (interval >= timeUnits[YEAR]) { // year\n\t\t\tminYear -= minYear % count;\n\t\t\tminDate[setFullYear](minYear);\n\t\t}\n\t\n\t\t// week is a special case that runs outside the hierarchy\n\t\tif (interval === timeUnits[WEEK]) {\n\t\t\t// get start of current week, independent of count\n\t\t\tminDate[setDate](minDate[getDate]() - minDate[getDay]() +\n\t\t\t\tpick(startOfWeek, 1));\n\t\t}\n\t\n\t\n\t\t// get tick positions\n\t\ti = 1;\n\t\tminYear = minDate[getFullYear]();\n\t\tvar time = minDate.getTime(),\n\t\t\tminMonth = minDate[getMonth](),\n\t\t\tminDateDate = minDate[getDate](),\n\t\t\ttimezoneOffset = useUTC ? \n\t\t\t\t0 : \n\t\t\t\t(24 * 3600 * 1000 + minDate.getTimezoneOffset() * 60 * 1000) % (24 * 3600 * 1000); // #950\n\t\n\t\t// iterate and add tick positions at appropriate values\n\t\twhile (time < max) {\n\t\t\ttickPositions.push(time);\n\t\n\t\t\t// if the interval is years, use Date.UTC to increase years\n\t\t\tif (interval === timeUnits[YEAR]) {\n\t\t\t\ttime = makeTime(minYear + i * count, 0);\n\t\n\t\t\t// if the interval is months, use Date.UTC to increase months\n\t\t\t} else if (interval === timeUnits[MONTH]) {\n\t\t\t\ttime = makeTime(minYear, minMonth + i * count);\n\t\n\t\t\t// if we're using global time, the interval is not fixed as it jumps\n\t\t\t// one hour at the DST crossover\n\t\t\t} else if (!useUTC && (interval === timeUnits[DAY] || interval === timeUnits[WEEK])) {\n\t\t\t\ttime = makeTime(minYear, minMonth, minDateDate +\n\t\t\t\t\ti * count * (interval === timeUnits[DAY] ? 1 : 7));\n\t\n\t\t\t// else, the interval is fixed and we use simple addition\n\t\t\t} else {\n\t\t\t\ttime += interval * count;\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t}\n\t\n\t\t// push the last time\n\t\ttickPositions.push(time);\n\n\n\t\t// mark new days if the time is dividible by day (#1649, #1760)\n\t\teach(grep(tickPositions, function (time) {\n\t\t\treturn interval <= timeUnits[HOUR] && time % timeUnits[DAY] === timezoneOffset;\n\t\t}), function (time) {\n\t\t\thigherRanks[time] = DAY;\n\t\t});\n\t}\n\n\n\t// record information on the chosen unit - for dynamic label formatter\n\ttickPositions.info = extend(normalizedInterval, {\n\t\thigherRanks: higherRanks,\n\t\ttotalRange: interval * count\n\t});\n\n\treturn tickPositions;\n}\n\n/**\n * Helper class that contains variuos counters that are local to the chart.\n */\nfunction ChartCounters() {\n\tthis.color = 0;\n\tthis.symbol = 0;\n}\n\nChartCounters.prototype =  {\n\t/**\n\t * Wraps the color counter if it reaches the specified length.\n\t */\n\twrapColor: function (length) {\n\t\tif (this.color >= length) {\n\t\t\tthis.color = 0;\n\t\t}\n\t},\n\n\t/**\n\t * Wraps the symbol counter if it reaches the specified length.\n\t */\n\twrapSymbol: function (length) {\n\t\tif (this.symbol >= length) {\n\t\t\tthis.symbol = 0;\n\t\t}\n\t}\n};\n\n\n/**\n * Utility method that sorts an object array and keeping the order of equal items.\n * ECMA script standard does not specify the behaviour when items are equal.\n */\nfunction stableSort(arr, sortFunction) {\n\tvar length = arr.length,\n\t\tsortValue,\n\t\ti;\n\n\t// Add index to each item\n\tfor (i = 0; i < length; i++) {\n\t\tarr[i].ss_i = i; // stable sort index\n\t}\n\n\tarr.sort(function (a, b) {\n\t\tsortValue = sortFunction(a, b);\n\t\treturn sortValue === 0 ? a.ss_i - b.ss_i : sortValue;\n\t});\n\n\t// Remove index from items\n\tfor (i = 0; i < length; i++) {\n\t\tdelete arr[i].ss_i; // stable sort index\n\t}\n}\n\n/**\n * Non-recursive method to find the lowest member of an array. Math.min raises a maximum\n * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This\n * method is slightly slower, but safe.\n */\nfunction arrayMin(data) {\n\tvar i = data.length,\n\t\tmin = data[0];\n\n\twhile (i--) {\n\t\tif (data[i] < min) {\n\t\t\tmin = data[i];\n\t\t}\n\t}\n\treturn min;\n}\n\n/**\n * Non-recursive method to find the lowest member of an array. Math.min raises a maximum\n * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This\n * method is slightly slower, but safe.\n */\nfunction arrayMax(data) {\n\tvar i = data.length,\n\t\tmax = data[0];\n\n\twhile (i--) {\n\t\tif (data[i] > max) {\n\t\t\tmax = data[i];\n\t\t}\n\t}\n\treturn max;\n}\n\n/**\n * Utility method that destroys any SVGElement or VMLElement that are properties on the given object.\n * It loops all properties and invokes destroy if there is a destroy method. The property is\n * then delete'ed.\n * @param {Object} The object to destroy properties on\n * @param {Object} Exception, do not destroy this property, only delete it.\n */\nfunction destroyObjectProperties(obj, except) {\n\tvar n;\n\tfor (n in obj) {\n\t\t// If the object is non-null and destroy is defined\n\t\tif (obj[n] && obj[n] !== except && obj[n].destroy) {\n\t\t\t// Invoke the destroy\n\t\t\tobj[n].destroy();\n\t\t}\n\n\t\t// Delete the property from the object.\n\t\tdelete obj[n];\n\t}\n}\n\n\n/**\n * Discard an element by moving it to the bin and delete\n * @param {Object} The HTML node to discard\n */\nfunction discardElement(element) {\n\t// create a garbage bin element, not part of the DOM\n\tif (!garbageBin) {\n\t\tgarbageBin = createElement(DIV);\n\t}\n\n\t// move the node and empty bin\n\tif (element) {\n\t\tgarbageBin.appendChild(element);\n\t}\n\tgarbageBin.innerHTML = '';\n}\n\n/**\n * Provide error messages for debugging, with links to online explanation \n */\nfunction error(code, stop) {\n\tvar msg = 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code;\n\tif (stop) {\n\t\tthrow msg;\n\t} else if (win.console) {\n\t\tconsole.log(msg);\n\t}\n}\n\n/**\n * Fix JS round off float errors\n * @param {Number} num\n */\nfunction correctFloat(num) {\n\treturn parseFloat(\n\t\tnum.toPrecision(14)\n\t);\n}\n\n/**\n * Set the global animation to either a given value, or fall back to the\n * given chart's animation option\n * @param {Object} animation\n * @param {Object} chart\n */\nfunction setAnimation(animation, chart) {\n\tglobalAnimation = pick(animation, chart.animation);\n}\n\n/**\n * The time unit lookup\n */\n/*jslint white: true*/\ntimeUnits = hash(\n\tMILLISECOND, 1,\n\tSECOND, 1000,\n\tMINUTE, 60000,\n\tHOUR, 3600000,\n\tDAY, 24 * 3600000,\n\tWEEK, 7 * 24 * 3600000,\n\tMONTH, 31 * 24 * 3600000,\n\tYEAR, 31556952000\n);\n/*jslint white: false*/\n/**\n * Path interpolation algorithm used across adapters\n */\npathAnim = {\n\t/**\n\t * Prepare start and end values so that the path can be animated one to one\n\t */\n\tinit: function (elem, fromD, toD) {\n\t\tfromD = fromD || '';\n\t\tvar shift = elem.shift,\n\t\t\tbezier = fromD.indexOf('C') > -1,\n\t\t\tnumParams = bezier ? 7 : 3,\n\t\t\tendLength,\n\t\t\tslice,\n\t\t\ti,\n\t\t\tstart = fromD.split(' '),\n\t\t\tend = [].concat(toD), // copy\n\t\t\tstartBaseLine,\n\t\t\tendBaseLine,\n\t\t\tsixify = function (arr) { // in splines make move points have six parameters like bezier curves\n\t\t\t\ti = arr.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tif (arr[i] === M) {\n\t\t\t\t\t\tarr.splice(i + 1, 0, arr[i + 1], arr[i + 2], arr[i + 1], arr[i + 2]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tif (bezier) {\n\t\t\tsixify(start);\n\t\t\tsixify(end);\n\t\t}\n\n\t\t// pull out the base lines before padding\n\t\tif (elem.isArea) {\n\t\t\tstartBaseLine = start.splice(start.length - 6, 6);\n\t\t\tendBaseLine = end.splice(end.length - 6, 6);\n\t\t}\n\n\t\t// if shifting points, prepend a dummy point to the end path\n\t\tif (shift <= end.length / numParams && start.length === end.length) {\n\t\t\twhile (shift--) {\n\t\t\t\tend = [].concat(end).splice(0, numParams).concat(end);\n\t\t\t}\n\t\t}\n\t\telem.shift = 0; // reset for following animations\n\n\t\t// copy and append last point until the length matches the end length\n\t\tif (start.length) {\n\t\t\tendLength = end.length;\n\t\t\twhile (start.length < endLength) {\n\n\t\t\t\t//bezier && sixify(start);\n\t\t\t\tslice = [].concat(start).splice(start.length - numParams, numParams);\n\t\t\t\tif (bezier) { // disable first control point\n\t\t\t\t\tslice[numParams - 6] = slice[numParams - 2];\n\t\t\t\t\tslice[numParams - 5] = slice[numParams - 1];\n\t\t\t\t}\n\t\t\t\tstart = start.concat(slice);\n\t\t\t}\n\t\t}\n\n\t\tif (startBaseLine) { // append the base lines for areas\n\t\t\tstart = start.concat(startBaseLine);\n\t\t\tend = end.concat(endBaseLine);\n\t\t}\n\t\treturn [start, end];\n\t},\n\n\t/**\n\t * Interpolate each value of the path and return the array\n\t */\n\tstep: function (start, end, pos, complete) {\n\t\tvar ret = [],\n\t\t\ti = start.length,\n\t\t\tstartVal;\n\n\t\tif (pos === 1) { // land on the final path without adjustment points appended in the ends\n\t\t\tret = complete;\n\n\t\t} else if (i === end.length && pos < 1) {\n\t\t\twhile (i--) {\n\t\t\t\tstartVal = parseFloat(start[i]);\n\t\t\t\tret[i] =\n\t\t\t\t\tisNaN(startVal) ? // a letter instruction like M or L\n\t\t\t\t\t\tstart[i] :\n\t\t\t\t\t\tpos * (parseFloat(end[i] - startVal)) + startVal;\n\n\t\t\t}\n\t\t} else { // if animation is finished or length not matching, land on right value\n\t\t\tret = end;\n\t\t}\n\t\treturn ret;\n\t}\n};\n\n(function ($) {\n\t/**\n\t * The default HighchartsAdapter for jQuery\n\t */\n\twin.HighchartsAdapter = win.HighchartsAdapter || ($ && {\n\t\t\n\t\t/**\n\t\t * Initialize the adapter by applying some extensions to jQuery\n\t\t */\n\t\tinit: function (pathAnim) {\n\t\t\t\n\t\t\t// extend the animate function to allow SVG animations\n\t\t\tvar Fx = $.fx,\n\t\t\t\tStep = Fx.step,\n\t\t\t\tdSetter,\n\t\t\t\tTween = $.Tween,\n\t\t\t\tpropHooks = Tween && Tween.propHooks,\n\t\t\t\topacityHook = $.cssHooks.opacity;\n\t\t\t\n\t\t\t/*jslint unparam: true*//* allow unused param x in this function */\n\t\t\t$.extend($.easing, {\n\t\t\t\teaseOutQuad: function (x, t, b, c, d) {\n\t\t\t\t\treturn -c * (t /= d) * (t - 2) + b;\n\t\t\t\t}\n\t\t\t});\n\t\t\t/*jslint unparam: false*/\n\t\t\n\t\t\t// extend some methods to check for elem.attr, which means it is a Highcharts SVG object\n\t\t\t$.each(['cur', '_default', 'width', 'height', 'opacity'], function (i, fn) {\n\t\t\t\tvar obj = Step,\n\t\t\t\t\tbase,\n\t\t\t\t\telem;\n\t\t\t\t\t\n\t\t\t\t// Handle different parent objects\n\t\t\t\tif (fn === 'cur') {\n\t\t\t\t\tobj = Fx.prototype; // 'cur', the getter, relates to Fx.prototype\n\t\t\t\t\n\t\t\t\t} else if (fn === '_default' && Tween) { // jQuery 1.8 model\n\t\t\t\t\tobj = propHooks[fn];\n\t\t\t\t\tfn = 'set';\n\t\t\t\t}\n\t\t\n\t\t\t\t// Overwrite the method\n\t\t\t\tbase = obj[fn];\n\t\t\t\tif (base) { // step.width and step.height don't exist in jQuery < 1.7\n\t\t\n\t\t\t\t\t// create the extended function replacement\n\t\t\t\t\tobj[fn] = function (fx) {\n\t\t\n\t\t\t\t\t\t// Fx.prototype.cur does not use fx argument\n\t\t\t\t\t\tfx = i ? fx : this;\n\n\t\t\t\t\t\t// Don't run animations on textual properties like align (#1821)\n\t\t\t\t\t\tif (fx.prop === 'align') {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// shortcut\n\t\t\t\t\t\telem = fx.elem;\n\t\t\n\t\t\t\t\t\t// Fx.prototype.cur returns the current value. The other ones are setters\n\t\t\t\t\t\t// and returning a value has no effect.\n\t\t\t\t\t\treturn elem.attr ? // is SVG element wrapper\n\t\t\t\t\t\t\telem.attr(fx.prop, fn === 'cur' ? UNDEFINED : fx.now) : // apply the SVG wrapper's method\n\t\t\t\t\t\t\tbase.apply(this, arguments); // use jQuery's built-in method\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Extend the opacity getter, needed for fading opacity with IE9 and jQuery 1.10+\n\t\t\twrap(opacityHook, 'get', function (proceed, elem, computed) {\n\t\t\t\treturn elem.attr ? (elem.opacity || 0) : proceed.call(this, elem, computed);\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t// Define the setter function for d (path definitions)\n\t\t\tdSetter = function (fx) {\n\t\t\t\tvar elem = fx.elem,\n\t\t\t\t\tends;\n\t\t\n\t\t\t\t// Normally start and end should be set in state == 0, but sometimes,\n\t\t\t\t// for reasons unknown, this doesn't happen. Perhaps state == 0 is skipped\n\t\t\t\t// in these cases\n\t\t\t\tif (!fx.started) {\n\t\t\t\t\tends = pathAnim.init(elem, elem.d, elem.toD);\n\t\t\t\t\tfx.start = ends[0];\n\t\t\t\t\tfx.end = ends[1];\n\t\t\t\t\tfx.started = true;\n\t\t\t\t}\n\t\t\n\t\t\n\t\t\t\t// interpolate each value of the path\n\t\t\t\telem.attr('d', pathAnim.step(fx.start, fx.end, fx.pos, elem.toD));\n\t\t\t};\n\t\t\t\n\t\t\t// jQuery 1.8 style\n\t\t\tif (Tween) {\n\t\t\t\tpropHooks.d = {\n\t\t\t\t\tset: dSetter\n\t\t\t\t};\n\t\t\t// pre 1.8\n\t\t\t} else {\n\t\t\t\t// animate paths\n\t\t\t\tStep.d = dSetter;\n\t\t\t}\n\t\t\t\n\t\t\t/**\n\t\t\t * Utility for iterating over an array. Parameters are reversed compared to jQuery.\n\t\t\t * @param {Array} arr\n\t\t\t * @param {Function} fn\n\t\t\t */\n\t\t\tthis.each = Array.prototype.forEach ?\n\t\t\t\tfunction (arr, fn) { // modern browsers\n\t\t\t\t\treturn Array.prototype.forEach.call(arr, fn);\n\t\t\t\t\t\n\t\t\t\t} : \n\t\t\t\tfunction (arr, fn) { // legacy\n\t\t\t\t\tvar i = 0, \n\t\t\t\t\t\tlen = arr.length;\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tif (fn.call(arr[i], arr[i], i, arr) === false) {\n\t\t\t\t\t\t\treturn i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\n\t\t\t/**\n\t\t\t * Register Highcharts as a plugin in the respective framework\n\t\t\t */\n\t\t\t$.fn.highcharts = function () {\n\t\t\t\tvar constr = 'Chart', // default constructor\n\t\t\t\t\targs = arguments,\n\t\t\t\t\toptions,\n\t\t\t\t\tret,\n\t\t\t\t\tchart;\n\n\t\t\t\tif (isString(args[0])) {\n\t\t\t\t\tconstr = args[0];\n\t\t\t\t\targs = Array.prototype.slice.call(args, 1); \n\t\t\t\t}\n\t\t\t\toptions = args[0];\n\n\t\t\t\t// Create the chart\n\t\t\t\tif (options !== UNDEFINED) {\n\t\t\t\t\t/*jslint unused:false*/\n\t\t\t\t\toptions.chart = options.chart || {};\n\t\t\t\t\toptions.chart.renderTo = this[0];\n\t\t\t\t\tchart = new Highcharts[constr](options, args[1]);\n\t\t\t\t\tret = this;\n\t\t\t\t\t/*jslint unused:true*/\n\t\t\t\t}\n\n\t\t\t\t// When called without parameters or with the return argument, get a predefined chart\n\t\t\t\tif (options === UNDEFINED) {\n\t\t\t\t\tret = charts[attr(this[0], 'data-highcharts-chart')];\n\t\t\t\t}\t\n\n\t\t\t\treturn ret;\n\t\t\t};\n\n\t\t},\n\n\t\t\n\t\t/**\n\t\t * Downloads a script and executes a callback when done.\n\t\t * @param {String} scriptLocation\n\t\t * @param {Function} callback\n\t\t */\n\t\tgetScript: $.getScript,\n\t\t\n\t\t/**\n\t\t * Return the index of an item in an array, or -1 if not found\n\t\t */\n\t\tinArray: $.inArray,\n\t\t\n\t\t/**\n\t\t * A direct link to jQuery methods. MooTools and Prototype adapters must be implemented for each case of method.\n\t\t * @param {Object} elem The HTML element\n\t\t * @param {String} method Which method to run on the wrapped element\n\t\t */\n\t\tadapterRun: function (elem, method) {\n\t\t\treturn $(elem)[method]();\n\t\t},\n\t\n\t\t/**\n\t\t * Filter an array\n\t\t */\n\t\tgrep: $.grep,\n\t\n\t\t/**\n\t\t * Map an array\n\t\t * @param {Array} arr\n\t\t * @param {Function} fn\n\t\t */\n\t\tmap: function (arr, fn) {\n\t\t\t//return jQuery.map(arr, fn);\n\t\t\tvar results = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = arr.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tresults[i] = fn.call(arr[i], arr[i], i, arr);\n\t\t\t}\n\t\t\treturn results;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the position of an element relative to the top left of the page\n\t\t */\n\t\toffset: function (el) {\n\t\t\treturn $(el).offset();\n\t\t},\n\t\n\t\t/**\n\t\t * Add an event listener\n\t\t * @param {Object} el A HTML element or custom object\n\t\t * @param {String} event The event type\n\t\t * @param {Function} fn The event handler\n\t\t */\n\t\taddEvent: function (el, event, fn) {\n\t\t\t$(el).bind(event, fn);\n\t\t},\n\t\n\t\t/**\n\t\t * Remove event added with addEvent\n\t\t * @param {Object} el The object\n\t\t * @param {String} eventType The event type. Leave blank to remove all events.\n\t\t * @param {Function} handler The function to remove\n\t\t */\n\t\tremoveEvent: function (el, eventType, handler) {\n\t\t\t// workaround for jQuery issue with unbinding custom events:\n\t\t\t// http://forum.jQuery.com/topic/javascript-error-when-unbinding-a-custom-event-using-jQuery-1-4-2\n\t\t\tvar func = doc.removeEventListener ? 'removeEventListener' : 'detachEvent';\n\t\t\tif (doc[func] && el && !el[func]) {\n\t\t\t\tel[func] = function () {};\n\t\t\t}\n\t\n\t\t\t$(el).unbind(eventType, handler);\n\t\t},\n\t\n\t\t/**\n\t\t * Fire an event on a custom object\n\t\t * @param {Object} el\n\t\t * @param {String} type\n\t\t * @param {Object} eventArguments\n\t\t * @param {Function} defaultFunction\n\t\t */\n\t\tfireEvent: function (el, type, eventArguments, defaultFunction) {\n\t\t\tvar event = $.Event(type),\n\t\t\t\tdetachedType = 'detached' + type,\n\t\t\t\tdefaultPrevented;\n\t\n\t\t\t// Remove warnings in Chrome when accessing layerX and layerY. Although Highcharts\n\t\t\t// never uses these properties, Chrome includes them in the default click event and\n\t\t\t// raises the warning when they are copied over in the extend statement below.\n\t\t\t//\n\t\t\t// To avoid problems in IE (see #1010) where we cannot delete the properties and avoid\n\t\t\t// testing if they are there (warning in chrome) the only option is to test if running IE.\n\t\t\tif (!isIE && eventArguments) {\n\t\t\t\tdelete eventArguments.layerX;\n\t\t\t\tdelete eventArguments.layerY;\n\t\t\t}\n\t\n\t\t\textend(event, eventArguments);\n\t\n\t\t\t// Prevent jQuery from triggering the object method that is named the\n\t\t\t// same as the event. For example, if the event is 'select', jQuery\n\t\t\t// attempts calling el.select and it goes into a loop.\n\t\t\tif (el[type]) {\n\t\t\t\tel[detachedType] = el[type];\n\t\t\t\tel[type] = null;\n\t\t\t}\n\t\n\t\t\t// Wrap preventDefault and stopPropagation in try/catch blocks in\n\t\t\t// order to prevent JS errors when cancelling events on non-DOM\n\t\t\t// objects. #615.\n\t\t\t/*jslint unparam: true*/\n\t\t\t$.each(['preventDefault', 'stopPropagation'], function (i, fn) {\n\t\t\t\tvar base = event[fn];\n\t\t\t\tevent[fn] = function () {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbase.call(event);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (fn === 'preventDefault') {\n\t\t\t\t\t\t\tdefaultPrevented = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t});\n\t\t\t/*jslint unparam: false*/\n\t\n\t\t\t// trigger it\n\t\t\t$(el).trigger(event);\n\t\n\t\t\t// attach the method\n\t\t\tif (el[detachedType]) {\n\t\t\t\tel[type] = el[detachedType];\n\t\t\t\tel[detachedType] = null;\n\t\t\t}\n\t\n\t\t\tif (defaultFunction && !event.isDefaultPrevented() && !defaultPrevented) {\n\t\t\t\tdefaultFunction(event);\n\t\t\t}\n\t\t},\n\t\t\n\t\t/**\n\t\t * Extension method needed for MooTools\n\t\t */\n\t\twashMouseEvent: function (e) {\n\t\t\tvar ret = e.originalEvent || e;\n\t\t\t\n\t\t\t// computed by jQuery, needed by IE8\n\t\t\tif (ret.pageX === UNDEFINED) { // #1236\n\t\t\t\tret.pageX = e.pageX;\n\t\t\t\tret.pageY = e.pageY;\n\t\t\t}\n\t\t\t\n\t\t\treturn ret;\n\t\t},\n\t\n\t\t/**\n\t\t * Animate a HTML element or SVG element wrapper\n\t\t * @param {Object} el\n\t\t * @param {Object} params\n\t\t * @param {Object} options jQuery-like animation options: duration, easing, callback\n\t\t */\n\t\tanimate: function (el, params, options) {\n\t\t\tvar $el = $(el);\n\t\t\tif (!el.style) {\n\t\t\t\tel.style = {}; // #1881\n\t\t\t}\n\t\t\tif (params.d) {\n\t\t\t\tel.toD = params.d; // keep the array form for paths, used in $.fx.step.d\n\t\t\t\tparams.d = 1; // because in jQuery, animating to an array has a different meaning\n\t\t\t}\n\t\n\t\t\t$el.stop();\n\t\t\tif (params.opacity !== UNDEFINED && el.attr) {\n\t\t\t\tparams.opacity += 'px'; // force jQuery to use same logic as width and height (#2161)\n\t\t\t}\n\t\t\t$el.animate(params, options);\n\t\n\t\t},\n\t\t/**\n\t\t * Stop running animation\n\t\t */\n\t\tstop: function (el) {\n\t\t\t$(el).stop();\n\t\t}\n\t});\n}(win.jQuery));\n\n\n// check for a custom HighchartsAdapter defined prior to this file\nvar globalAdapter = win.HighchartsAdapter,\n\tadapter = globalAdapter || {};\n\t\n// Initialize the adapter\nif (globalAdapter) {\n\tglobalAdapter.init.call(globalAdapter, pathAnim);\n}\n\n\n// Utility functions. If the HighchartsAdapter is not defined, adapter is an empty object\n// and all the utility functions will be null. In that case they are populated by the\n// default adapters below.\nvar adapterRun = adapter.adapterRun,\n\tgetScript = adapter.getScript,\n\tinArray = adapter.inArray,\n\teach = adapter.each,\n\tgrep = adapter.grep,\n\toffset = adapter.offset,\n\tmap = adapter.map,\n\taddEvent = adapter.addEvent,\n\tremoveEvent = adapter.removeEvent,\n\tfireEvent = adapter.fireEvent,\n\twashMouseEvent = adapter.washMouseEvent,\n\tanimate = adapter.animate,\n\tstop = adapter.stop;\n\n\n\n/* ****************************************************************************\n * Handle the options                                                         *\n *****************************************************************************/\nvar\n\ndefaultLabelOptions = {\n\tenabled: true,\n\t// rotation: 0,\n\t// align: 'center',\n\tx: 0,\n\ty: 15,\n\t/*formatter: function () {\n\t\treturn this.value;\n\t},*/\n\tstyle: {\n\t\tcolor: '#666',\n\t\tcursor: 'default',\n\t\tfontSize: '11px',\n\t\tlineHeight: '14px'\n\t}\n};\n\ndefaultOptions = {\n\tcolors: ['#2f7ed8', '#0d233a', '#8bbc21', '#910000', '#1aadce', '#492970',\n\t\t'#f28f43', '#77a1e5', '#c42525', '#a6c96a'],\n\tsymbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'],\n\tlang: {\n\t\tloading: 'Loading...',\n\t\tmonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July',\n\t\t\t\t'August', 'September', 'October', 'November', 'December'],\n\t\tshortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n\t\tweekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n\t\tdecimalPoint: '.',\n\t\tnumericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'], // SI prefixes used in axis labels\n\t\tresetZoom: 'Reset zoom',\n\t\tresetZoomTitle: 'Reset zoom level 1:1',\n\t\tthousandsSep: ','\n\t},\n\tglobal: {\n\t\tuseUTC: true,\n\t\tcanvasToolsURL: 'http://code.highcharts.com/3.0.6/modules/canvas-tools.js',\n\t\tVMLRadialGradientURL: 'http://code.highcharts.com/3.0.6/gfx/vml-radial-gradient.png'\n\t},\n\tchart: {\n\t\t//animation: true,\n\t\t//alignTicks: false,\n\t\t//reflow: true,\n\t\t//className: null,\n\t\t//events: { load, selection },\n\t\t//margin: [null],\n\t\t//marginTop: null,\n\t\t//marginRight: null,\n\t\t//marginBottom: null,\n\t\t//marginLeft: null,\n\t\tborderColor: '#4572A7',\n\t\t//borderWidth: 0,\n\t\tborderRadius: 5,\n\t\tdefaultSeriesType: 'line',\n\t\tignoreHiddenSeries: true,\n\t\t//inverted: false,\n\t\t//shadow: false,\n\t\tspacing: [10, 10, 15, 10],\n\t\t//spacingTop: 10,\n\t\t//spacingRight: 10,\n\t\t//spacingBottom: 15,\n\t\t//spacingLeft: 10,\n\t\tstyle: {\n\t\t\tfontFamily: '\"Lucida Grande\", \"Lucida Sans Unicode\", Verdana, Arial, Helvetica, sans-serif', // default font\n\t\t\tfontSize: '12px'\n\t\t},\n\t\tbackgroundColor: '#FFFFFF',\n\t\t//plotBackgroundColor: null,\n\t\tplotBorderColor: '#C0C0C0',\n\t\t//plotBorderWidth: 0,\n\t\t//plotShadow: false,\n\t\t//zoomType: ''\n\t\tresetZoomButton: {\n\t\t\ttheme: {\n\t\t\t\tzIndex: 20\n\t\t\t},\n\t\t\tposition: {\n\t\t\t\talign: 'right',\n\t\t\t\tx: -10,\n\t\t\t\t//verticalAlign: 'top',\n\t\t\t\ty: 10\n\t\t\t}\n\t\t\t// relativeTo: 'plot'\n\t\t}\n\t},\n\ttitle: {\n\t\ttext: 'Chart title',\n\t\talign: 'center',\n\t\t// floating: false,\n\t\tmargin: 15,\n\t\t// x: 0,\n\t\t// verticalAlign: 'top',\n\t\t// y: null,\n\t\tstyle: {\n\t\t\tcolor: '#274b6d',//#3E576F',\n\t\t\tfontSize: '16px'\n\t\t}\n\n\t},\n\tsubtitle: {\n\t\ttext: '',\n\t\talign: 'center',\n\t\t// floating: false\n\t\t// x: 0,\n\t\t// verticalAlign: 'top',\n\t\t// y: null,\n\t\tstyle: {\n\t\t\tcolor: '#4d759e'\n\t\t}\n\t},\n\n\tplotOptions: {\n\t\tline: { // base series options\n\t\t\tallowPointSelect: false,\n\t\t\tshowCheckbox: false,\n\t\t\tanimation: {\n\t\t\t\tduration: 1000\n\t\t\t},\n\t\t\t//connectNulls: false,\n\t\t\t//cursor: 'default',\n\t\t\t//clip: true,\n\t\t\t//dashStyle: null,\n\t\t\t//enableMouseTracking: true,\n\t\t\tevents: {},\n\t\t\t//legendIndex: 0,\n\t\t\tlineWidth: 2,\n\t\t\t//shadow: false,\n\t\t\t// stacking: null,\n\t\t\tmarker: {\n\t\t\t\tenabled: true,\n\t\t\t\t//symbol: null,\n\t\t\t\tlineWidth: 0,\n\t\t\t\tradius: 4,\n\t\t\t\tlineColor: '#FFFFFF',\n\t\t\t\t//fillColor: null,\n\t\t\t\tstates: { // states for a single point\n\t\t\t\t\thover: {\n\t\t\t\t\t\tenabled: true\n\t\t\t\t\t\t//radius: base + 2\n\t\t\t\t\t},\n\t\t\t\t\tselect: {\n\t\t\t\t\t\tfillColor: '#FFFFFF',\n\t\t\t\t\t\tlineColor: '#000000',\n\t\t\t\t\t\tlineWidth: 2\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tpoint: {\n\t\t\t\tevents: {}\n\t\t\t},\n\t\t\tdataLabels: merge(defaultLabelOptions, {\n\t\t\t\talign: 'center',\n\t\t\t\tenabled: false,\n\t\t\t\tformatter: function () {\n\t\t\t\t\treturn this.y === null ? '' : numberFormat(this.y, -1);\n\t\t\t\t},\n\t\t\t\tverticalAlign: 'bottom', // above singular point\n\t\t\t\ty: 0\n\t\t\t\t// backgroundColor: undefined,\n\t\t\t\t// borderColor: undefined,\n\t\t\t\t// borderRadius: undefined,\n\t\t\t\t// borderWidth: undefined,\n\t\t\t\t// padding: 3,\n\t\t\t\t// shadow: false\n\t\t\t}),\n\t\t\tcropThreshold: 300, // draw points outside the plot area when the number of points is less than this\n\t\t\tpointRange: 0,\n\t\t\t//pointStart: 0,\n\t\t\t//pointInterval: 1,\n\t\t\tshowInLegend: true,\n\t\t\tstates: { // states for the entire series\n\t\t\t\thover: {\n\t\t\t\t\t//enabled: false,\n\t\t\t\t\t//lineWidth: base + 1,\n\t\t\t\t\tmarker: {\n\t\t\t\t\t\t// lineWidth: base + 1,\n\t\t\t\t\t\t// radius: base + 1\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tmarker: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tstickyTracking: true\n\t\t\t//tooltip: {\n\t\t\t\t//pointFormat: '<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y}</b>'\n\t\t\t\t//valueDecimals: null,\n\t\t\t\t//xDateFormat: '%A, %b %e, %Y',\n\t\t\t\t//valuePrefix: '',\n\t\t\t\t//ySuffix: ''\t\t\t\t\n\t\t\t//}\n\t\t\t// turboThreshold: 1000\n\t\t\t// zIndex: null\n\t\t}\n\t},\n\tlabels: {\n\t\t//items: [],\n\t\tstyle: {\n\t\t\t//font: defaultFont,\n\t\t\tposition: ABSOLUTE,\n\t\t\tcolor: '#3E576F'\n\t\t}\n\t},\n\tlegend: {\n\t\tenabled: true,\n\t\talign: 'center',\n\t\t//floating: false,\n\t\tlayout: 'horizontal',\n\t\tlabelFormatter: function () {\n\t\t\treturn this.name;\n\t\t},\n\t\tborderWidth: 1,\n\t\tborderColor: '#909090',\n\t\tborderRadius: 5,\n\t\tnavigation: {\n\t\t\t// animation: true,\n\t\t\tactiveColor: '#274b6d',\n\t\t\t// arrowSize: 12\n\t\t\tinactiveColor: '#CCC'\n\t\t\t// style: {} // text styles\n\t\t},\n\t\t// margin: 10,\n\t\t// reversed: false,\n\t\tshadow: false,\n\t\t// backgroundColor: null,\n\t\t/*style: {\n\t\t\tpadding: '5px'\n\t\t},*/\n\t\titemStyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#274b6d',\n\t\t\tfontSize: '12px'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\t//cursor: 'pointer', removed as of #601\n\t\t\tcolor: '#000'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#CCC'\n\t\t},\n\t\titemCheckboxStyle: {\n\t\t\tposition: ABSOLUTE,\n\t\t\twidth: '13px', // for IE precision\n\t\t\theight: '13px'\n\t\t},\n\t\t// itemWidth: undefined,\n\t\tsymbolWidth: 16,\n\t\tsymbolPadding: 5,\n\t\tverticalAlign: 'bottom',\n\t\t// width: undefined,\n\t\tx: 0,\n\t\ty: 0,\n\t\ttitle: {\n\t\t\t//text: null,\n\t\t\tstyle: {\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t}\t\t\t\n\t},\n\n\tloading: {\n\t\t// hideDuration: 100,\n\t\tlabelStyle: {\n\t\t\tfontWeight: 'bold',\n\t\t\tposition: RELATIVE,\n\t\t\ttop: '1em'\n\t\t},\n\t\t// showDuration: 0,\n\t\tstyle: {\n\t\t\tposition: ABSOLUTE,\n\t\t\tbackgroundColor: 'white',\n\t\t\topacity: 0.5,\n\t\t\ttextAlign: 'center'\n\t\t}\n\t},\n\n\ttooltip: {\n\t\tenabled: true,\n\t\tanimation: hasSVG,\n\t\t//crosshairs: null,\n\t\tbackgroundColor: 'rgba(255, 255, 255, .85)',\n\t\tborderWidth: 1,\n\t\tborderRadius: 3,\n\t\tdateTimeLabelFormats: { \n\t\t\tmillisecond: '%A, %b %e, %H:%M:%S.%L',\n\t\t\tsecond: '%A, %b %e, %H:%M:%S',\n\t\t\tminute: '%A, %b %e, %H:%M',\n\t\t\thour: '%A, %b %e, %H:%M',\n\t\t\tday: '%A, %b %e, %Y',\n\t\t\tweek: 'Week from %A, %b %e, %Y',\n\t\t\tmonth: '%B %Y',\n\t\t\tyear: '%Y'\n\t\t},\n\t\t//formatter: defaultFormatter,\n\t\theaderFormat: '<span style=\"font-size: 10px\">{point.key}</span><br/>',\n\t\tpointFormat: '<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y}</b><br/>',\n\t\tshadow: true,\n\t\t//shared: false,\n\t\tsnap: isTouchDevice ? 25 : 10,\n\t\tstyle: {\n\t\t\tcolor: '#333333',\n\t\t\tcursor: 'default',\n\t\t\tfontSize: '12px',\n\t\t\tpadding: '8px',\n\t\t\twhiteSpace: 'nowrap'\n\t\t}\n\t\t//xDateFormat: '%A, %b %e, %Y',\n\t\t//valueDecimals: null,\n\t\t//valuePrefix: '',\n\t\t//valueSuffix: ''\n\t},\n\n\tcredits: {\n\t\tenabled: true,\n\t\ttext: 'Highcharts.com',\n\t\thref: 'http://www.highcharts.com',\n\t\tposition: {\n\t\t\talign: 'right',\n\t\t\tx: -10,\n\t\t\tverticalAlign: 'bottom',\n\t\t\ty: -5\n\t\t},\n\t\tstyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#909090',\n\t\t\tfontSize: '9px'\n\t\t}\n\t}\n};\n\n\n\n\n// Series defaults\nvar defaultPlotOptions = defaultOptions.plotOptions,\n\tdefaultSeriesOptions = defaultPlotOptions.line;\n\n// set the default time methods\nsetTimeMethods();\n\n\n\n/**\n * Set the time methods globally based on the useUTC option. Time method can be either\n * local time or UTC (default).\n */\nfunction setTimeMethods() {\n\tvar useUTC = defaultOptions.global.useUTC,\n\t\tGET = useUTC ? 'getUTC' : 'get',\n\t\tSET = useUTC ? 'setUTC' : 'set';\n\n\tmakeTime = useUTC ? Date.UTC : function (year, month, date, hours, minutes, seconds) {\n\t\treturn new Date(\n\t\t\tyear,\n\t\t\tmonth,\n\t\t\tpick(date, 1),\n\t\t\tpick(hours, 0),\n\t\t\tpick(minutes, 0),\n\t\t\tpick(seconds, 0)\n\t\t).getTime();\n\t};\n\tgetMinutes =  GET + 'Minutes';\n\tgetHours =    GET + 'Hours';\n\tgetDay =      GET + 'Day';\n\tgetDate =     GET + 'Date';\n\tgetMonth =    GET + 'Month';\n\tgetFullYear = GET + 'FullYear';\n\tsetMinutes =  SET + 'Minutes';\n\tsetHours =    SET + 'Hours';\n\tsetDate =     SET + 'Date';\n\tsetMonth =    SET + 'Month';\n\tsetFullYear = SET + 'FullYear';\n\n}\n\n/**\n * Merge the default options with custom options and return the new options structure\n * @param {Object} options The new custom options\n */\nfunction setOptions(options) {\n\t\n\t// Pull out axis options and apply them to the respective default axis options \n\t/*defaultXAxisOptions = merge(defaultXAxisOptions, options.xAxis);\n\tdefaultYAxisOptions = merge(defaultYAxisOptions, options.yAxis);\n\toptions.xAxis = options.yAxis = UNDEFINED;*/\n\t\n\t// Merge in the default options\n\tdefaultOptions = merge(defaultOptions, options);\n\t\n\t// Apply UTC\n\tsetTimeMethods();\n\n\treturn defaultOptions;\n}\n\n/**\n * Get the updated default options. Merely exposing defaultOptions for outside modules\n * isn't enough because the setOptions method creates a new object.\n */\nfunction getOptions() {\n\treturn defaultOptions;\n}\n\n\n/**\n * Handle color operations. The object methods are chainable.\n * @param {String} input The input color in either rbga or hex format\n */\nvar Color = function (input) {\n\t// declare variables\n\tvar rgba = [], result, stops;\n\n\t/**\n\t * Parse the input color to rgba array\n\t * @param {String} input\n\t */\n\tfunction init(input) {\n\n\t\t// Gradients\n\t\tif (input && input.stops) {\n\t\t\tstops = map(input.stops, function (stop) {\n\t\t\t\treturn Color(stop[1]);\n\t\t\t});\n\n\t\t// Solid colors\n\t\t} else {\n\t\t\t// rgba\n\t\t\tresult = /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/.exec(input);\n\t\t\tif (result) {\n\t\t\t\trgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), parseFloat(result[4], 10)];\n\t\t\t} else { \n\t\t\t\t// hex\n\t\t\t\tresult = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(input);\n\t\t\t\tif (result) {\n\t\t\t\t\trgba = [pInt(result[1], 16), pInt(result[2], 16), pInt(result[3], 16), 1];\n\t\t\t\t} else {\n\t\t\t\t\t// rgb\n\t\t\t\t\tresult = /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(input);\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\trgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), 1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\t\t\n\n\t}\n\t/**\n\t * Return the color a specified format\n\t * @param {String} format\n\t */\n\tfunction get(format) {\n\t\tvar ret;\n\n\t\tif (stops) {\n\t\t\tret = merge(input);\n\t\t\tret.stops = [].concat(ret.stops);\n\t\t\teach(stops, function (stop, i) {\n\t\t\t\tret.stops[i] = [ret.stops[i][0], stop.get(format)];\n\t\t\t});\n\n\t\t// it's NaN if gradient colors on a column chart\n\t\t} else if (rgba && !isNaN(rgba[0])) {\n\t\t\tif (format === 'rgb') {\n\t\t\t\tret = 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')';\n\t\t\t} else if (format === 'a') {\n\t\t\t\tret = rgba[3];\n\t\t\t} else {\n\t\t\t\tret = 'rgba(' + rgba.join(',') + ')';\n\t\t\t}\n\t\t} else {\n\t\t\tret = input;\n\t\t}\n\t\treturn ret;\n\t}\n\n\t/**\n\t * Brighten the color\n\t * @param {Number} alpha\n\t */\n\tfunction brighten(alpha) {\n\t\tif (stops) {\n\t\t\teach(stops, function (stop) {\n\t\t\t\tstop.brighten(alpha);\n\t\t\t});\n\t\t\n\t\t} else if (isNumber(alpha) && alpha !== 0) {\n\t\t\tvar i;\n\t\t\tfor (i = 0; i < 3; i++) {\n\t\t\t\trgba[i] += pInt(alpha * 255);\n\n\t\t\t\tif (rgba[i] < 0) {\n\t\t\t\t\trgba[i] = 0;\n\t\t\t\t}\n\t\t\t\tif (rgba[i] > 255) {\n\t\t\t\t\trgba[i] = 255;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Set the color's opacity to a given alpha value\n\t * @param {Number} alpha\n\t */\n\tfunction setOpacity(alpha) {\n\t\trgba[3] = alpha;\n\t\treturn this;\n\t}\n\n\t// initialize: parse the input\n\tinit(input);\n\n\t// public methods\n\treturn {\n\t\tget: get,\n\t\tbrighten: brighten,\n\t\trgba: rgba,\n\t\tsetOpacity: setOpacity\n\t};\n};\n\n\n/**\n * A wrapper object for SVG elements\n */\nfunction SVGElement() {}\n\nSVGElement.prototype = {\n\t/**\n\t * Initialize the SVG renderer\n\t * @param {Object} renderer\n\t * @param {String} nodeName\n\t */\n\tinit: function (renderer, nodeName) {\n\t\tvar wrapper = this;\n\t\twrapper.element = nodeName === 'span' ?\n\t\t\tcreateElement(nodeName) :\n\t\t\tdoc.createElementNS(SVG_NS, nodeName);\n\t\twrapper.renderer = renderer;\n\t\t/**\n\t\t * A collection of attribute setters. These methods, if defined, are called right before a certain\n\t\t * attribute is set on an element wrapper. Returning false prevents the default attribute\n\t\t * setter to run. Returning a value causes the default setter to set that value. Used in\n\t\t * Renderer.label.\n\t\t */\n\t\twrapper.attrSetters = {};\n\t},\n\t/**\n\t * Default base for animation\n\t */\n\topacity: 1,\n\t/**\n\t * Animate a given attribute\n\t * @param {Object} params\n\t * @param {Number} options The same options as in jQuery animation\n\t * @param {Function} complete Function to perform at the end of animation\n\t */\n\tanimate: function (params, options, complete) {\n\t\tvar animOptions = pick(options, globalAnimation, true);\n\t\tstop(this); // stop regardless of animation actually running, or reverting to .attr (#607)\n\t\tif (animOptions) {\n\t\t\tanimOptions = merge(animOptions);\n\t\t\tif (complete) { // allows using a callback with the global animation without overwriting it\n\t\t\t\tanimOptions.complete = complete;\n\t\t\t}\n\t\t\tanimate(this, params, animOptions);\n\t\t} else {\n\t\t\tthis.attr(params);\n\t\t\tif (complete) {\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Set or get a given attribute\n\t * @param {Object|String} hash\n\t * @param {Mixed|Undefined} val\n\t */\n\tattr: function (hash, val) {\n\t\tvar wrapper = this,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\tresult,\n\t\t\ti,\n\t\t\tchild,\n\t\t\telement = wrapper.element,\n\t\t\tnodeName = element.nodeName.toLowerCase(), // Android2 requires lower for \"text\"\n\t\t\trenderer = wrapper.renderer,\n\t\t\tskipAttr,\n\t\t\ttitleNode,\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\tshadows = wrapper.shadows,\n\t\t\thasSetSymbolSize,\n\t\t\tdoTransform,\n\t\t\tret = wrapper;\n\n\t\t// single key-value pair\n\t\tif (isString(hash) && defined(val)) {\n\t\t\tkey = hash;\n\t\t\thash = {};\n\t\t\thash[key] = val;\n\t\t}\n\n\t\t// used as a getter: first argument is a string, second is undefined\n\t\tif (isString(hash)) {\n\t\t\tkey = hash;\n\t\t\tif (nodeName === 'circle') {\n\t\t\t\tkey = { x: 'cx', y: 'cy' }[key] || key;\n\t\t\t} else if (key === 'strokeWidth') {\n\t\t\t\tkey = 'stroke-width';\n\t\t\t}\n\t\t\tret = attr(element, key) || wrapper[key] || 0;\n\t\t\tif (key !== 'd' && key !== 'visibility' && key !== 'fill') { // 'd' is string in animation step\n\t\t\t\tret = parseFloat(ret);\n\t\t\t}\n\n\t\t// setter\n\t\t} else {\n\n\t\t\tfor (key in hash) {\n\t\t\t\tskipAttr = false; // reset\n\t\t\t\tvalue = hash[key];\n\n\t\t\t\t// check for a specific attribute setter\n\t\t\t\tresult = attrSetters[key] && attrSetters[key].call(wrapper, value, key);\n\n\t\t\t\tif (result !== false) {\n\t\t\t\t\tif (result !== UNDEFINED) {\n\t\t\t\t\t\tvalue = result; // the attribute setter has returned a new value to set\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// paths\n\t\t\t\t\tif (key === 'd') {\n\t\t\t\t\t\tif (value && value.join) { // join path\n\t\t\t\t\t\t\tvalue = value.join(' ');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (/(NaN| {2}|^$)/.test(value)) {\n\t\t\t\t\t\t\tvalue = 'M 0 0';\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//wrapper.d = value; // shortcut for animations\n\n\t\t\t\t\t// update child tspans x values\n\t\t\t\t\t} else if (key === 'x' && nodeName === 'text') {\n\t\t\t\t\t\tfor (i = 0; i < element.childNodes.length; i++) {\n\t\t\t\t\t\t\tchild = element.childNodes[i];\n\t\t\t\t\t\t\t// if the x values are equal, the tspan represents a linebreak\n\t\t\t\t\t\t\tif (attr(child, 'x') === attr(element, 'x')) {\n\t\t\t\t\t\t\t\t//child.setAttribute('x', value);\n\t\t\t\t\t\t\t\tattr(child, 'x', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (wrapper.rotation && (key === 'x' || key === 'y')) {\n\t\t\t\t\t\tdoTransform = true;\n\n\t\t\t\t\t// apply gradients\n\t\t\t\t\t} else if (key === 'fill') {\n\t\t\t\t\t\tvalue = renderer.color(value, element, key);\n\n\t\t\t\t\t// circle x and y\n\t\t\t\t\t} else if (nodeName === 'circle' && (key === 'x' || key === 'y')) {\n\t\t\t\t\t\tkey = { x: 'cx', y: 'cy' }[key] || key;\n\n\t\t\t\t\t// rectangle border radius\n\t\t\t\t\t} else if (nodeName === 'rect' && key === 'r') {\n\t\t\t\t\t\tattr(element, {\n\t\t\t\t\t\t\trx: value,\n\t\t\t\t\t\t\try: value\n\t\t\t\t\t\t});\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// translation and text rotation\n\t\t\t\t\t} else if (key === 'translateX' || key === 'translateY' || key === 'rotation' ||\n\t\t\t\t\t\t\tkey === 'verticalAlign' || key === 'scaleX' || key === 'scaleY') {\n\t\t\t\t\t\tdoTransform = true;\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// apply opacity as subnode (required by legacy WebKit and Batik)\n\t\t\t\t\t} else if (key === 'stroke') {\n\t\t\t\t\t\tvalue = renderer.color(value, element, key);\n\n\t\t\t\t\t// emulate VML's dashstyle implementation\n\t\t\t\t\t} else if (key === 'dashstyle') {\n\t\t\t\t\t\tkey = 'stroke-dasharray';\n\t\t\t\t\t\tvalue = value && value.toLowerCase();\n\t\t\t\t\t\tif (value === 'solid') {\n\t\t\t\t\t\t\tvalue = NONE;\n\t\t\t\t\t\t} else if (value) {\n\t\t\t\t\t\t\tvalue = value\n\t\t\t\t\t\t\t\t.replace('shortdashdotdot', '3,1,1,1,1,1,')\n\t\t\t\t\t\t\t\t.replace('shortdashdot', '3,1,1,1')\n\t\t\t\t\t\t\t\t.replace('shortdot', '1,1,')\n\t\t\t\t\t\t\t\t.replace('shortdash', '3,1,')\n\t\t\t\t\t\t\t\t.replace('longdash', '8,3,')\n\t\t\t\t\t\t\t\t.replace(/dot/g, '1,3,')\n\t\t\t\t\t\t\t\t.replace('dash', '4,3,')\n\t\t\t\t\t\t\t\t.replace(/,$/, '')\n\t\t\t\t\t\t\t\t.split(','); // ending comma\n\n\t\t\t\t\t\t\ti = value.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tvalue[i] = pInt(value[i]) * pick(hash['stroke-width'], wrapper['stroke-width']);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue = value.join(',');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// IE9/MooTools combo: MooTools returns objects instead of numbers and IE9 Beta 2\n\t\t\t\t\t// is unable to cast them. Test again with final IE9.\n\t\t\t\t\t} else if (key === 'width') {\n\t\t\t\t\t\tvalue = pInt(value);\n\n\t\t\t\t\t// Text alignment\n\t\t\t\t\t} else if (key === 'align') {\n\t\t\t\t\t\tkey = 'text-anchor';\n\t\t\t\t\t\tvalue = { left: 'start', center: 'middle', right: 'end' }[value];\n\n\t\t\t\t\t// Title requires a subnode, #431\n\t\t\t\t\t} else if (key === 'title') {\n\t\t\t\t\t\ttitleNode = element.getElementsByTagName('title')[0];\n\t\t\t\t\t\tif (!titleNode) {\n\t\t\t\t\t\t\ttitleNode = doc.createElementNS(SVG_NS, 'title');\n\t\t\t\t\t\t\telement.appendChild(titleNode);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitleNode.textContent = value;\n\t\t\t\t\t}\n\n\t\t\t\t\t// jQuery animate changes case\n\t\t\t\t\tif (key === 'strokeWidth') {\n\t\t\t\t\t\tkey = 'stroke-width';\n\t\t\t\t\t}\n\n\t\t\t\t\t// In Chrome/Win < 6 as well as Batik, the stroke attribute can't be set when the stroke-\n\t\t\t\t\t// width is 0. #1369\n\t\t\t\t\tif (key === 'stroke-width' || key === 'stroke') {\n\t\t\t\t\t\twrapper[key] = value;\n\t\t\t\t\t\t// Only apply the stroke attribute if the stroke width is defined and larger than 0\n\t\t\t\t\t\tif (wrapper.stroke && wrapper['stroke-width']) {\n\t\t\t\t\t\t\tattr(element, 'stroke', wrapper.stroke);\n\t\t\t\t\t\t\tattr(element, 'stroke-width', wrapper['stroke-width']);\n\t\t\t\t\t\t\twrapper.hasStroke = true;\n\t\t\t\t\t\t} else if (key === 'stroke-width' && value === 0 && wrapper.hasStroke) {\n\t\t\t\t\t\t\telement.removeAttribute('stroke');\n\t\t\t\t\t\t\twrapper.hasStroke = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// symbols\n\t\t\t\t\tif (wrapper.symbolName && /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(key)) {\n\n\n\t\t\t\t\t\tif (!hasSetSymbolSize) {\n\t\t\t\t\t\t\twrapper.symbolAttr(hash);\n\t\t\t\t\t\t\thasSetSymbolSize = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// let the shadow follow the main element\n\t\t\t\t\tif (shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(key)) {\n\t\t\t\t\t\ti = shadows.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tattr(\n\t\t\t\t\t\t\t\tshadows[i],\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tkey === 'height' ?\n\t\t\t\t\t\t\t\t\tmathMax(value - (shadows[i].cutHeight || 0), 0) :\n\t\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// validate heights\n\t\t\t\t\tif ((key === 'width' || key === 'height') && nodeName === 'rect' && value < 0) {\n\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Record for animation and quick access without polling the DOM\n\t\t\t\t\twrapper[key] = value;\n\n\n\t\t\t\t\tif (key === 'text') {\n\t\t\t\t\t\t// Delete bBox memo when the text changes\n\t\t\t\t\t\tif (value !== wrapper.textStr) {\n\t\t\t\t\t\t\tdelete wrapper.bBox;\n\t\t\t\t\t\t}\n\t\t\t\t\t\twrapper.textStr = value;\n\t\t\t\t\t\tif (wrapper.added) {\n\t\t\t\t\t\t\trenderer.buildText(wrapper);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!skipAttr) {\n\t\t\t\t\t\tattr(element, key, value);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Update transform. Do this outside the loop to prevent redundant updating for batch setting\n\t\t\t// of attributes.\n\t\t\tif (doTransform) {\n\t\t\t\twrapper.updateTransform();\n\t\t\t}\n\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\n\t/**\n\t * Add a class name to an element\n\t */\n\taddClass: function (className) {\n\t\tvar element = this.element,\n\t\t\tcurrentClassName = attr(element, 'class') || '';\n\n\t\tif (currentClassName.indexOf(className) === -1) {\n\t\t\tattr(element, 'class', currentClassName + ' ' + className);\n\t\t}\n\t\treturn this;\n\t},\n\t/* hasClass and removeClass are not (yet) needed\n\thasClass: function (className) {\n\t\treturn attr(this.element, 'class').indexOf(className) !== -1;\n\t},\n\tremoveClass: function (className) {\n\t\tattr(this.element, 'class', attr(this.element, 'class').replace(className, ''));\n\t\treturn this;\n\t},\n\t*/\n\n\t/**\n\t * If one of the symbol size affecting parameters are changed,\n\t * check all the others only once for each call to an element's\n\t * .attr() method\n\t * @param {Object} hash\n\t */\n\tsymbolAttr: function (hash) {\n\t\tvar wrapper = this;\n\n\t\teach(['x', 'y', 'r', 'start', 'end', 'width', 'height', 'innerR', 'anchorX', 'anchorY'], function (key) {\n\t\t\twrapper[key] = pick(hash[key], wrapper[key]);\n\t\t});\n\n\t\twrapper.attr({\n\t\t\td: wrapper.renderer.symbols[wrapper.symbolName](\n\t\t\t\twrapper.x,\n\t\t\t\twrapper.y,\n\t\t\t\twrapper.width,\n\t\t\t\twrapper.height,\n\t\t\t\twrapper\n\t\t\t)\n\t\t});\n\t},\n\n\t/**\n\t * Apply a clipping path to this object\n\t * @param {String} id\n\t */\n\tclip: function (clipRect) {\n\t\treturn this.attr('clip-path', clipRect ? 'url(' + this.renderer.url + '#' + clipRect.id + ')' : NONE);\n\t},\n\n\t/**\n\t * Calculate the coordinates needed for drawing a rectangle crisply and return the\n\t * calculated attributes\n\t * @param {Number} strokeWidth\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tcrisp: function (strokeWidth, x, y, width, height) {\n\n\t\tvar wrapper = this,\n\t\t\tkey,\n\t\t\tattribs = {},\n\t\t\tvalues = {},\n\t\t\tnormalizer;\n\n\t\tstrokeWidth = strokeWidth || wrapper.strokeWidth || (wrapper.attr && wrapper.attr('stroke-width')) || 0;\n\t\tnormalizer = mathRound(strokeWidth) % 2 / 2; // mathRound because strokeWidth can sometimes have roundoff errors\n\n\t\t// normalize for crisp edges\n\t\tvalues.x = mathFloor(x || wrapper.x || 0) + normalizer;\n\t\tvalues.y = mathFloor(y || wrapper.y || 0) + normalizer;\n\t\tvalues.width = mathFloor((width || wrapper.width || 0) - 2 * normalizer);\n\t\tvalues.height = mathFloor((height || wrapper.height || 0) - 2 * normalizer);\n\t\tvalues.strokeWidth = strokeWidth;\n\n\t\tfor (key in values) {\n\t\t\tif (wrapper[key] !== values[key]) { // only set attribute if changed\n\t\t\t\twrapper[key] = attribs[key] = values[key];\n\t\t\t}\n\t\t}\n\n\t\treturn attribs;\n\t},\n\n\t/**\n\t * Set styles for the element\n\t * @param {Object} styles\n\t */\n\tcss: function (styles) {\n\t\t/*jslint unparam: true*//* allow unused param a in the regexp function below */\n\t\tvar elemWrapper = this,\n\t\t\telem = elemWrapper.element,\n\t\t\ttextWidth = styles && styles.width && elem.nodeName.toLowerCase() === 'text',\n\t\t\tn,\n\t\t\tserializedCss = '',\n\t\t\thyphenate = function (a, b) { return '-' + b.toLowerCase(); };\n\t\t/*jslint unparam: false*/\n\n\t\t// convert legacy\n\t\tif (styles && styles.color) {\n\t\t\tstyles.fill = styles.color;\n\t\t}\n\n\t\t// Merge the new styles with the old ones\n\t\tstyles = extend(\n\t\t\telemWrapper.styles,\n\t\t\tstyles\n\t\t);\n\n\t\t// store object\n\t\telemWrapper.styles = styles;\n\n\n\t\t// Don't handle line wrap on canvas\n\t\tif (useCanVG && textWidth) {\n\t\t\tdelete styles.width;\n\t\t}\n\n\t\t// serialize and set style attribute\n\t\tif (isIE && !hasSVG) { // legacy IE doesn't support setting style attribute\n\t\t\tif (textWidth) {\n\t\t\t\tdelete styles.width;\n\t\t\t}\n\t\t\tcss(elemWrapper.element, styles);\n\t\t} else {\n\t\t\tfor (n in styles) {\n\t\t\t\tserializedCss += n.replace(/([A-Z])/g, hyphenate) + ':' + styles[n] + ';';\n\t\t\t}\n\t\t\tattr(elem, 'style', serializedCss); // #1881\n\t\t}\n\n\n\t\t// re-build text\n\t\tif (textWidth && elemWrapper.added) {\n\t\t\telemWrapper.renderer.buildText(elemWrapper);\n\t\t}\n\n\t\treturn elemWrapper;\n\t},\n\n\t/**\n\t * Add an event listener\n\t * @param {String} eventType\n\t * @param {Function} handler\n\t */\n\ton: function (eventType, handler) {\n\t\tvar svgElement = this,\n\t\t\telement = svgElement.element;\n\t\t\n\t\t// touch\n\t\tif (hasTouch && eventType === 'click') {\n\t\t\telement.ontouchstart = function (e) {\t\t\t\n\t\t\t\tsvgElement.touchEventFired = Date.now();\t\t\t\t\n\t\t\t\te.preventDefault();\n\t\t\t\thandler.call(element, e);\n\t\t\t};\n\t\t\telement.onclick = function (e) {\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\tif (userAgent.indexOf('Android') === -1 || Date.now() - (svgElement.touchEventFired || 0) > 1100) { // #2269\n\t\t\t\t\thandler.call(element, e);\n\t\t\t\t}\n\t\t\t};\t\t\t\n\t\t} else {\n\t\t\t// simplest possible event model for internal use\n\t\t\telement['on' + eventType] = handler;\n\t\t}\n\t\treturn this;\n\t},\n\n\t/**\n\t * Set the coordinates needed to draw a consistent radial gradient across\n\t * pie slices regardless of positioning inside the chart. The format is\n\t * [centerX, centerY, diameter] in pixels.\n\t */\n\tsetRadialReference: function (coordinates) {\n\t\tthis.element.radialReference = coordinates;\n\t\treturn this;\n\t},\n\n\t/**\n\t * Move an object and its children by x and y values\n\t * @param {Number} x\n\t * @param {Number} y\n\t */\n\ttranslate: function (x, y) {\n\t\treturn this.attr({\n\t\t\ttranslateX: x,\n\t\t\ttranslateY: y\n\t\t});\n\t},\n\n\t/**\n\t * Invert a group, rotate and flip\n\t */\n\tinvert: function () {\n\t\tvar wrapper = this;\n\t\twrapper.inverted = true;\n\t\twrapper.updateTransform();\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * Apply CSS to HTML elements. This is used in text within SVG rendering and\n\t * by the VML renderer\n\t */\n\thtmlCss: function (styles) {\n\t\tvar wrapper = this,\n\t\t\telement = wrapper.element,\n\t\t\ttextWidth = styles && element.tagName === 'SPAN' && styles.width;\n\n\t\tif (textWidth) {\n\t\t\tdelete styles.width;\n\t\t\twrapper.textWidth = textWidth;\n\t\t\twrapper.updateTransform();\n\t\t}\n\n\t\twrapper.styles = extend(wrapper.styles, styles);\n\t\tcss(wrapper.element, styles);\n\n\t\treturn wrapper;\n\t},\n\n\n\n\t/**\n\t * VML and useHTML method for calculating the bounding box based on offsets\n\t * @param {Boolean} refresh Whether to force a fresh value from the DOM or to\n\t * use the cached value\n\t *\n\t * @return {Object} A hash containing values for x, y, width and height\n\t */\n\n\thtmlGetBBox: function () {\n\t\tvar wrapper = this,\n\t\t\telement = wrapper.element,\n\t\t\tbBox = wrapper.bBox;\n\n\t\t// faking getBBox in exported SVG in legacy IE\n\t\tif (!bBox) {\n\t\t\t// faking getBBox in exported SVG in legacy IE (is this a duplicate of the fix for #1079?)\n\t\t\tif (element.nodeName === 'text') {\n\t\t\t\telement.style.position = ABSOLUTE;\n\t\t\t}\n\n\t\t\tbBox = wrapper.bBox = {\n\t\t\t\tx: element.offsetLeft,\n\t\t\t\ty: element.offsetTop,\n\t\t\t\twidth: element.offsetWidth,\n\t\t\t\theight: element.offsetHeight\n\t\t\t};\n\t\t}\n\n\t\treturn bBox;\n\t},\n\n\t/**\n\t * VML override private method to update elements based on internal\n\t * properties based on SVG transform\n\t */\n\thtmlUpdateTransform: function () {\n\t\t// aligning non added elements is expensive\n\t\tif (!this.added) {\n\t\t\tthis.alignOnAdd = true;\n\t\t\treturn;\n\t\t}\n\n\t\tvar wrapper = this,\n\t\t\trenderer = wrapper.renderer,\n\t\t\telem = wrapper.element,\n\t\t\ttranslateX = wrapper.translateX || 0,\n\t\t\ttranslateY = wrapper.translateY || 0,\n\t\t\tx = wrapper.x || 0,\n\t\t\ty = wrapper.y || 0,\n\t\t\talign = wrapper.textAlign || 'left',\n\t\t\talignCorrection = { left: 0, center: 0.5, right: 1 }[align],\n\t\t\tnonLeft = align && align !== 'left',\n\t\t\tshadows = wrapper.shadows;\n\n\t\t// apply translate\n\t\tcss(elem, {\n\t\t\tmarginLeft: translateX,\n\t\t\tmarginTop: translateY\n\t\t});\n\t\tif (shadows) { // used in labels/tooltip\n\t\t\teach(shadows, function (shadow) {\n\t\t\t\tcss(shadow, {\n\t\t\t\t\tmarginLeft: translateX + 1,\n\t\t\t\t\tmarginTop: translateY + 1\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// apply inversion\n\t\tif (wrapper.inverted) { // wrapper is a group\n\t\t\teach(elem.childNodes, function (child) {\n\t\t\t\trenderer.invertChild(child, elem);\n\t\t\t});\n\t\t}\n\n\t\tif (elem.tagName === 'SPAN') {\n\n\t\t\tvar width, height,\n\t\t\t\trotation = wrapper.rotation,\n\t\t\t\tbaseline,\n\t\t\t\tradians = 0,\n\t\t\t\tcostheta = 1,\n\t\t\t\tsintheta = 0,\n\t\t\t\tquad,\n\t\t\t\ttextWidth = pInt(wrapper.textWidth),\n\t\t\t\txCorr = wrapper.xCorr || 0,\n\t\t\t\tyCorr = wrapper.yCorr || 0,\n\t\t\t\tcurrentTextTransform = [rotation, align, elem.innerHTML, wrapper.textWidth].join(',');\n\n\t\t\tif (currentTextTransform !== wrapper.cTT) { // do the calculations and DOM access only if properties changed\n\n\t\t\t\tif (defined(rotation)) {\n\n\t\t\t\t\tradians = rotation * deg2rad; // deg to rad\n\t\t\t\t\tcostheta = mathCos(radians);\n\t\t\t\t\tsintheta = mathSin(radians);\n\n\t\t\t\t\twrapper.setSpanRotation(rotation, sintheta, costheta);\n\n\t\t\t\t}\n\n\t\t\t\twidth = pick(wrapper.elemWidth, elem.offsetWidth);\n\t\t\t\theight = pick(wrapper.elemHeight, elem.offsetHeight);\n\n\t\t\t\t// update textWidth\n\t\t\t\tif (width > textWidth && /[ \\-]/.test(elem.textContent || elem.innerText)) { // #983, #1254\n\t\t\t\t\tcss(elem, {\n\t\t\t\t\t\twidth: textWidth + PX,\n\t\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\t\twhiteSpace: 'normal'\n\t\t\t\t\t});\n\t\t\t\t\twidth = textWidth;\n\t\t\t\t}\n\n\t\t\t\t// correct x and y\n\t\t\t\tbaseline = renderer.fontMetrics(elem.style.fontSize).b;\n\t\t\t\txCorr = costheta < 0 && -width;\n\t\t\t\tyCorr = sintheta < 0 && -height;\n\n\t\t\t\t// correct for baseline and corners spilling out after rotation\n\t\t\t\tquad = costheta * sintheta < 0;\n\t\t\t\txCorr += sintheta * baseline * (quad ? 1 - alignCorrection : alignCorrection);\n\t\t\t\tyCorr -= costheta * baseline * (rotation ? (quad ? alignCorrection : 1 - alignCorrection) : 1);\n\n\t\t\t\t// correct for the length/height of the text\n\t\t\t\tif (nonLeft) {\n\t\t\t\t\txCorr -= width * alignCorrection * (costheta < 0 ? -1 : 1);\n\t\t\t\t\tif (rotation) {\n\t\t\t\t\t\tyCorr -= height * alignCorrection * (sintheta < 0 ? -1 : 1);\n\t\t\t\t\t}\n\t\t\t\t\tcss(elem, {\n\t\t\t\t\t\ttextAlign: align\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// record correction\n\t\t\t\twrapper.xCorr = xCorr;\n\t\t\t\twrapper.yCorr = yCorr;\n\t\t\t}\n\n\t\t\t// apply position with correction\n\t\t\tcss(elem, {\n\t\t\t\tleft: (x + xCorr) + PX,\n\t\t\t\ttop: (y + yCorr) + PX\n\t\t\t});\n\n\t\t\t// force reflow in webkit to apply the left and top on useHTML element (#1249)\n\t\t\tif (isWebKit) {\n\t\t\t\theight = elem.offsetHeight; // assigned to height for JSLint purpose\n\t\t\t}\n\n\t\t\t// record current text transform\n\t\t\twrapper.cTT = currentTextTransform;\n\t\t}\n\t},\n\n\t/**\n\t * Set the rotation of an individual HTML span\n\t */\n\tsetSpanRotation: function (rotation) {\n\t\tvar rotationStyle = {},\n\t\t\tcssTransformKey = isIE ? '-ms-transform' : isWebKit ? '-webkit-transform' : isFirefox ? 'MozTransform' : isOpera ? '-o-transform' : '';\n\n\t\trotationStyle[cssTransformKey] = rotationStyle.transform = 'rotate(' + rotation + 'deg)';\n\t\tcss(this.element, rotationStyle);\n\t},\n\n\t/**\n\t * Private method to update the transform attribute based on internal\n\t * properties\n\t */\n\tupdateTransform: function () {\n\t\tvar wrapper = this,\n\t\t\ttranslateX = wrapper.translateX || 0,\n\t\t\ttranslateY = wrapper.translateY || 0,\n\t\t\tscaleX = wrapper.scaleX,\n\t\t\tscaleY = wrapper.scaleY,\n\t\t\tinverted = wrapper.inverted,\n\t\t\trotation = wrapper.rotation,\n\t\t\ttransform;\n\n\t\t// flipping affects translate as adjustment for flipping around the group's axis\n\t\tif (inverted) {\n\t\t\ttranslateX += wrapper.attr('width');\n\t\t\ttranslateY += wrapper.attr('height');\n\t\t}\n\n\t\t// Apply translate. Nearly all transformed elements have translation, so instead\n\t\t// of checking for translate = 0, do it always (#1767, #1846).\n\t\ttransform = ['translate(' + translateX + ',' + translateY + ')'];\n\n\t\t// apply rotation\n\t\tif (inverted) {\n\t\t\ttransform.push('rotate(90) scale(-1,1)');\n\t\t} else if (rotation) { // text rotation\n\t\t\ttransform.push('rotate(' + rotation + ' ' + (wrapper.x || 0) + ' ' + (wrapper.y || 0) + ')');\n\t\t}\n\n\t\t// apply scale\n\t\tif (defined(scaleX) || defined(scaleY)) {\n\t\t\ttransform.push('scale(' + pick(scaleX, 1) + ' ' + pick(scaleY, 1) + ')');\n\t\t}\n\n\t\tif (transform.length) {\n\t\t\tattr(wrapper.element, 'transform', transform.join(' '));\n\t\t}\n\t},\n\t/**\n\t * Bring the element to the front\n\t */\n\ttoFront: function () {\n\t\tvar element = this.element;\n\t\telement.parentNode.appendChild(element);\n\t\treturn this;\n\t},\n\n\n\t/**\n\t * Break down alignment options like align, verticalAlign, x and y\n\t * to x and y relative to the chart.\n\t *\n\t * @param {Object} alignOptions\n\t * @param {Boolean} alignByTranslate\n\t * @param {String[Object} box The box to align to, needs a width and height. When the\n\t *        box is a string, it refers to an object in the Renderer. For example, when\n\t *        box is 'spacingBox', it refers to Renderer.spacingBox which holds width, height\n\t *        x and y properties.\n\t *\n\t */\n\talign: function (alignOptions, alignByTranslate, box) {\n\t\tvar align,\n\t\t\tvAlign,\n\t\t\tx,\n\t\t\ty,\n\t\t\tattribs = {},\n\t\t\talignTo,\n\t\t\trenderer = this.renderer,\n\t\t\talignedObjects = renderer.alignedObjects;\n\n\t\t// First call on instanciate\n\t\tif (alignOptions) {\n\t\t\tthis.alignOptions = alignOptions;\n\t\t\tthis.alignByTranslate = alignByTranslate;\n\t\t\tif (!box || isString(box)) { // boxes other than renderer handle this internally\n\t\t\t\tthis.alignTo = alignTo = box || 'renderer';\n\t\t\t\terase(alignedObjects, this); // prevent duplicates, like legendGroup after resize\n\t\t\t\talignedObjects.push(this);\n\t\t\t\tbox = null; // reassign it below\n\t\t\t}\n\n\t\t// When called on resize, no arguments are supplied\n\t\t} else {\n\t\t\talignOptions = this.alignOptions;\n\t\t\talignByTranslate = this.alignByTranslate;\n\t\t\talignTo = this.alignTo;\n\t\t}\n\n\t\tbox = pick(box, renderer[alignTo], renderer);\n\n\t\t// Assign variables\n\t\talign = alignOptions.align;\n\t\tvAlign = alignOptions.verticalAlign;\n\t\tx = (box.x || 0) + (alignOptions.x || 0); // default: left align\n\t\ty = (box.y || 0) + (alignOptions.y || 0); // default: top align\n\n\t\t// Align\n\t\tif (align === 'right' || align === 'center') {\n\t\t\tx += (box.width - (alignOptions.width || 0)) /\n\t\t\t\t\t{ right: 1, center: 2 }[align];\n\t\t}\n\t\tattribs[alignByTranslate ? 'translateX' : 'x'] = mathRound(x);\n\n\n\t\t// Vertical align\n\t\tif (vAlign === 'bottom' || vAlign === 'middle') {\n\t\t\ty += (box.height - (alignOptions.height || 0)) /\n\t\t\t\t\t({ bottom: 1, middle: 2 }[vAlign] || 1);\n\n\t\t}\n\t\tattribs[alignByTranslate ? 'translateY' : 'y'] = mathRound(y);\n\n\t\t// Animate only if already placed\n\t\tthis[this.placed ? 'animate' : 'attr'](attribs);\n\t\tthis.placed = true;\n\t\tthis.alignAttr = attribs;\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get the bounding box (width, height, x and y) for the element\n\t */\n\tgetBBox: function () {\n\t\tvar wrapper = this,\n\t\t\tbBox = wrapper.bBox,\n\t\t\trenderer = wrapper.renderer,\n\t\t\twidth,\n\t\t\theight,\n\t\t\trotation = wrapper.rotation,\n\t\t\telement = wrapper.element,\n\t\t\tstyles = wrapper.styles,\n\t\t\trad = rotation * deg2rad;\n\n\t\tif (!bBox) {\n\t\t\t// SVG elements\n\t\t\tif (element.namespaceURI === SVG_NS || renderer.forExport) {\n\t\t\t\ttry { // Fails in Firefox if the container has display: none.\n\n\t\t\t\t\tbBox = element.getBBox ?\n\t\t\t\t\t\t// SVG: use extend because IE9 is not allowed to change width and height in case\n\t\t\t\t\t\t// of rotation (below)\n\t\t\t\t\t\textend({}, element.getBBox()) :\n\t\t\t\t\t\t// Canvas renderer and legacy IE in export mode\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidth: element.offsetWidth,\n\t\t\t\t\t\t\theight: element.offsetHeight\n\t\t\t\t\t\t};\n\t\t\t\t} catch (e) {}\n\n\t\t\t\t// If the bBox is not set, the try-catch block above failed. The other condition\n\t\t\t\t// is for Opera that returns a width of -Infinity on hidden elements.\n\t\t\t\tif (!bBox || bBox.width < 0) {\n\t\t\t\t\tbBox = { width: 0, height: 0 };\n\t\t\t\t}\n\n\n\t\t\t// VML Renderer or useHTML within SVG\n\t\t\t} else {\n\n\t\t\t\tbBox = wrapper.htmlGetBBox();\n\n\t\t\t}\n\n\t\t\t// True SVG elements as well as HTML elements in modern browsers using the .useHTML option\n\t\t\t// need to compensated for rotation\n\t\t\tif (renderer.isSVG) {\n\t\t\t\twidth = bBox.width;\n\t\t\t\theight = bBox.height;\n\n\t\t\t\t// Workaround for wrong bounding box in IE9 and IE10 (#1101, #1505, #1669)\n\t\t\t\tif (isIE && styles && styles.fontSize === '11px' && height.toPrecision(3) === '22.7') {\n\t\t\t\t\tbBox.height = height = 14;\n\t\t\t\t}\n\n\t\t\t\t// Adjust for rotated text\n\t\t\t\tif (rotation) {\n\t\t\t\t\tbBox.width = mathAbs(height * mathSin(rad)) + mathAbs(width * mathCos(rad));\n\t\t\t\t\tbBox.height = mathAbs(height * mathCos(rad)) + mathAbs(width * mathSin(rad));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twrapper.bBox = bBox;\n\t\t}\n\t\treturn bBox;\n\t},\n\n\t/**\n\t * Show the element\n\t */\n\tshow: function () {\n\t\treturn this.attr({ visibility: VISIBLE });\n\t},\n\n\t/**\n\t * Hide the element\n\t */\n\thide: function () {\n\t\treturn this.attr({ visibility: HIDDEN });\n\t},\n\n\tfadeOut: function (duration) {\n\t\tvar elemWrapper = this;\n\t\telemWrapper.animate({\n\t\t\topacity: 0\n\t\t}, {\n\t\t\tduration: duration || 150,\n\t\t\tcomplete: function () {\n\t\t\t\telemWrapper.hide();\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Add the element\n\t * @param {Object|Undefined} parent Can be an element, an element wrapper or undefined\n\t *    to append the element to the renderer.box.\n\t */\n\tadd: function (parent) {\n\n\t\tvar renderer = this.renderer,\n\t\t\tparentWrapper = parent || renderer,\n\t\t\tparentNode = parentWrapper.element || renderer.box,\n\t\t\tchildNodes = parentNode.childNodes,\n\t\t\telement = this.element,\n\t\t\tzIndex = attr(element, 'zIndex'),\n\t\t\totherElement,\n\t\t\totherZIndex,\n\t\t\ti,\n\t\t\tinserted;\n\n\t\tif (parent) {\n\t\t\tthis.parentGroup = parent;\n\t\t}\n\n\t\t// mark as inverted\n\t\tthis.parentInverted = parent && parent.inverted;\n\n\t\t// build formatted text\n\t\tif (this.textStr !== undefined) {\n\t\t\trenderer.buildText(this);\n\t\t}\n\n\t\t// mark the container as having z indexed children\n\t\tif (zIndex) {\n\t\t\tparentWrapper.handleZ = true;\n\t\t\tzIndex = pInt(zIndex);\n\t\t}\n\n\t\t// insert according to this and other elements' zIndex\n\t\tif (parentWrapper.handleZ) { // this element or any of its siblings has a z index\n\t\t\tfor (i = 0; i < childNodes.length; i++) {\n\t\t\t\totherElement = childNodes[i];\n\t\t\t\totherZIndex = attr(otherElement, 'zIndex');\n\t\t\t\tif (otherElement !== element && (\n\t\t\t\t\t\t// insert before the first element with a higher zIndex\n\t\t\t\t\t\tpInt(otherZIndex) > zIndex ||\n\t\t\t\t\t\t// if no zIndex given, insert before the first element with a zIndex\n\t\t\t\t\t\t(!defined(zIndex) && defined(otherZIndex))\n\n\t\t\t\t\t\t)) {\n\t\t\t\t\tparentNode.insertBefore(element, otherElement);\n\t\t\t\t\tinserted = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// default: append at the end\n\t\tif (!inserted) {\n\t\t\tparentNode.appendChild(element);\n\t\t}\n\n\t\t// mark as added\n\t\tthis.added = true;\n\n\t\t// fire an event for internal hooks\n\t\tfireEvent(this, 'add');\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Removes a child either by removeChild or move to garbageBin.\n\t * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not.\n\t */\n\tsafeRemoveChild: function (element) {\n\t\tvar parentNode = element.parentNode;\n\t\tif (parentNode) {\n\t\t\tparentNode.removeChild(element);\n\t\t}\n\t},\n\n\t/**\n\t * Destroy the element and element wrapper\n\t */\n\tdestroy: function () {\n\t\tvar wrapper = this,\n\t\t\telement = wrapper.element || {},\n\t\t\tshadows = wrapper.shadows,\n\t\t\tparentToClean = wrapper.renderer.isSVG && element.nodeName === 'SPAN' && element.parentNode,\n\t\t\tgrandParent,\n\t\t\tkey,\n\t\t\ti;\n\n\t\t// remove events\n\t\telement.onclick = element.onmouseout = element.onmouseover = element.onmousemove = element.point = null;\n\t\tstop(wrapper); // stop running animations\n\n\t\tif (wrapper.clipPath) {\n\t\t\twrapper.clipPath = wrapper.clipPath.destroy();\n\t\t}\n\n\t\t// Destroy stops in case this is a gradient object\n\t\tif (wrapper.stops) {\n\t\t\tfor (i = 0; i < wrapper.stops.length; i++) {\n\t\t\t\twrapper.stops[i] = wrapper.stops[i].destroy();\n\t\t\t}\n\t\t\twrapper.stops = null;\n\t\t}\n\n\t\t// remove element\n\t\twrapper.safeRemoveChild(element);\n\n\t\t// destroy shadows\n\t\tif (shadows) {\n\t\t\teach(shadows, function (shadow) {\n\t\t\t\twrapper.safeRemoveChild(shadow);\n\t\t\t});\n\t\t}\n\n\t\t// In case of useHTML, clean up empty containers emulating SVG groups (#1960).\n\t\twhile (parentToClean && parentToClean.childNodes.length === 0) {\n\t\t\tgrandParent = parentToClean.parentNode;\n\t\t\twrapper.safeRemoveChild(parentToClean);\n\t\t\tparentToClean = grandParent;\n\t\t}\n\n\t\t// remove from alignObjects\n\t\tif (wrapper.alignTo) {\n\t\t\terase(wrapper.renderer.alignedObjects, wrapper);\n\t\t}\n\n\t\tfor (key in wrapper) {\n\t\t\tdelete wrapper[key];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Add a shadow to the element. Must be done after the element is added to the DOM\n\t * @param {Boolean|Object} shadowOptions\n\t */\n\tshadow: function (shadowOptions, group, cutOff) {\n\t\tvar shadows = [],\n\t\t\ti,\n\t\t\tshadow,\n\t\t\telement = this.element,\n\t\t\tstrokeWidth,\n\t\t\tshadowWidth,\n\t\t\tshadowElementOpacity,\n\n\t\t\t// compensate for inverted plot area\n\t\t\ttransform;\n\n\n\t\tif (shadowOptions) {\n\t\t\tshadowWidth = pick(shadowOptions.width, 3);\n\t\t\tshadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth;\n\t\t\ttransform = this.parentInverted ?\n\t\t\t\t'(-1,-1)' :\n\t\t\t\t'(' + pick(shadowOptions.offsetX, 1) + ', ' + pick(shadowOptions.offsetY, 1) + ')';\n\t\t\tfor (i = 1; i <= shadowWidth; i++) {\n\t\t\t\tshadow = element.cloneNode(0);\n\t\t\t\tstrokeWidth = (shadowWidth * 2) + 1 - (2 * i);\n\t\t\t\tattr(shadow, {\n\t\t\t\t\t'isShadow': 'true',\n\t\t\t\t\t'stroke': shadowOptions.color || 'black',\n\t\t\t\t\t'stroke-opacity': shadowElementOpacity * i,\n\t\t\t\t\t'stroke-width': strokeWidth,\n\t\t\t\t\t'transform': 'translate' + transform,\n\t\t\t\t\t'fill': NONE\n\t\t\t\t});\n\t\t\t\tif (cutOff) {\n\t\t\t\t\tattr(shadow, 'height', mathMax(attr(shadow, 'height') - strokeWidth, 0));\n\t\t\t\t\tshadow.cutHeight = strokeWidth;\n\t\t\t\t}\n\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.element.appendChild(shadow);\n\t\t\t\t} else {\n\t\t\t\t\telement.parentNode.insertBefore(shadow, element);\n\t\t\t\t}\n\n\t\t\t\tshadows.push(shadow);\n\t\t\t}\n\n\t\t\tthis.shadows = shadows;\n\t\t}\n\t\treturn this;\n\n\t}\n};\n\n\n/**\n * The default SVG renderer\n */\nvar SVGRenderer = function () {\n\tthis.init.apply(this, arguments);\n};\nSVGRenderer.prototype = {\n\tElement: SVGElement,\n\n\t/**\n\t * Initialize the SVGRenderer\n\t * @param {Object} container\n\t * @param {Number} width\n\t * @param {Number} height\n\t * @param {Boolean} forExport\n\t */\n\tinit: function (container, width, height, forExport) {\n\t\tvar renderer = this,\n\t\t\tloc = location,\n\t\t\tboxWrapper,\n\t\t\telement,\n\t\t\tdesc;\n\n\t\tboxWrapper = renderer.createElement('svg')\n\t\t\t.attr({\n\t\t\t\tversion: '1.1'\n\t\t\t});\n\t\telement = boxWrapper.element;\n\t\tcontainer.appendChild(element);\n\n\t\t// For browsers other than IE, add the namespace attribute (#1978)\n\t\tif (container.innerHTML.indexOf('xmlns') === -1) {\n\t\t\tattr(element, 'xmlns', SVG_NS);\n\t\t}\n\n\t\t// object properties\n\t\trenderer.isSVG = true;\n\t\trenderer.box = element;\n\t\trenderer.boxWrapper = boxWrapper;\n\t\trenderer.alignedObjects = [];\n\n\t\t// Page url used for internal references. #24, #672, #1070\n\t\trenderer.url = (isFirefox || isWebKit) && doc.getElementsByTagName('base').length ?\n\t\t\tloc.href\n\t\t\t\t.replace(/#.*?$/, '') // remove the hash\n\t\t\t\t.replace(/([\\('\\)])/g, '\\\\$1') // escape parantheses and quotes\n\t\t\t\t.replace(/ /g, '%20') : // replace spaces (needed for Safari only)\n\t\t\t'';\n\n\t\t// Add description\n\t\tdesc = this.createElement('desc').add();\n\t\tdesc.element.appendChild(doc.createTextNode('Created with ' + PRODUCT + ' ' + VERSION));\n\n\n\t\trenderer.defs = this.createElement('defs').add();\n\t\trenderer.forExport = forExport;\n\t\trenderer.gradients = {}; // Object where gradient SvgElements are stored\n\n\t\trenderer.setSize(width, height, false);\n\n\n\n\t\t// Issue 110 workaround:\n\t\t// In Firefox, if a div is positioned by percentage, its pixel position may land\n\t\t// between pixels. The container itself doesn't display this, but an SVG element\n\t\t// inside this container will be drawn at subpixel precision. In order to draw\n\t\t// sharp lines, this must be compensated for. This doesn't seem to work inside\n\t\t// iframes though (like in jsFiddle).\n\t\tvar subPixelFix, rect;\n\t\tif (isFirefox && container.getBoundingClientRect) {\n\t\t\trenderer.subPixelFix = subPixelFix = function () {\n\t\t\t\tcss(container, { left: 0, top: 0 });\n\t\t\t\trect = container.getBoundingClientRect();\n\t\t\t\tcss(container, {\n\t\t\t\t\tleft: (mathCeil(rect.left) - rect.left) + PX,\n\t\t\t\t\ttop: (mathCeil(rect.top) - rect.top) + PX\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t// run the fix now\n\t\t\tsubPixelFix();\n\n\t\t\t// run it on resize\n\t\t\taddEvent(win, 'resize', subPixelFix);\n\t\t}\n\t},\n\n\t/**\n\t * Detect whether the renderer is hidden. This happens when one of the parent elements\n\t * has display: none. #608.\n\t */\n\tisHidden: function () {\n\t\treturn !this.boxWrapper.getBBox().width;\n\t},\n\n\t/**\n\t * Destroys the renderer and its allocated members.\n\t */\n\tdestroy: function () {\n\t\tvar renderer = this,\n\t\t\trendererDefs = renderer.defs;\n\t\trenderer.box = null;\n\t\trenderer.boxWrapper = renderer.boxWrapper.destroy();\n\n\t\t// Call destroy on all gradient elements\n\t\tdestroyObjectProperties(renderer.gradients || {});\n\t\trenderer.gradients = null;\n\n\t\t// Defs are null in VMLRenderer\n\t\t// Otherwise, destroy them here.\n\t\tif (rendererDefs) {\n\t\t\trenderer.defs = rendererDefs.destroy();\n\t\t}\n\n\t\t// Remove sub pixel fix handler\n\t\t// We need to check that there is a handler, otherwise all functions that are registered for event 'resize' are removed\n\t\t// See issue #982\n\t\tif (renderer.subPixelFix) {\n\t\t\tremoveEvent(win, 'resize', renderer.subPixelFix);\n\t\t}\n\n\t\trenderer.alignedObjects = null;\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Create a wrapper for an SVG element\n\t * @param {Object} nodeName\n\t */\n\tcreateElement: function (nodeName) {\n\t\tvar wrapper = new this.Element();\n\t\twrapper.init(this, nodeName);\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * Dummy function for use in canvas renderer\n\t */\n\tdraw: function () {},\n\n\t/**\n\t * Parse a simple HTML string into SVG tspans\n\t *\n\t * @param {Object} textNode The parent text SVG node\n\t */\n\tbuildText: function (wrapper) {\n\t\tvar textNode = wrapper.element,\n\t\t\trenderer = this,\n\t\t\tforExport = renderer.forExport,\n\t\t\tlines = pick(wrapper.textStr, '').toString()\n\t\t\t\t.replace(/<(b|strong)>/g, '<span style=\"font-weight:bold\">')\n\t\t\t\t.replace(/<(i|em)>/g, '<span style=\"font-style:italic\">')\n\t\t\t\t.replace(/<a/g, '<span')\n\t\t\t\t.replace(/<\\/(b|strong|i|em|a)>/g, '</span>')\n\t\t\t\t.split(/<br.*?>/g),\n\t\t\tchildNodes = textNode.childNodes,\n\t\t\tstyleRegex = /style=\"([^\"]+)\"/,\n\t\t\threfRegex = /href=\"(http[^\"]+)\"/,\n\t\t\tparentX = attr(textNode, 'x'),\n\t\t\ttextStyles = wrapper.styles,\n\t\t\twidth = textStyles && textStyles.width && pInt(textStyles.width),\n\t\t\ttextLineHeight = textStyles && textStyles.lineHeight,\n\t\t\ti = childNodes.length;\n\n\t\t/// remove old text\n\t\twhile (i--) {\n\t\t\ttextNode.removeChild(childNodes[i]);\n\t\t}\n\n\t\tif (width && !wrapper.added) {\n\t\t\tthis.box.appendChild(textNode); // attach it to the DOM to read offset width\n\t\t}\n\n\t\t// remove empty line at end\n\t\tif (lines[lines.length - 1] === '') {\n\t\t\tlines.pop();\n\t\t}\n\n\t\t// build the lines\n\t\teach(lines, function (line, lineNo) {\n\t\t\tvar spans, spanNo = 0;\n\n\t\t\tline = line.replace(/<span/g, '|||<span').replace(/<\\/span>/g, '</span>|||');\n\t\t\tspans = line.split('|||');\n\n\t\t\teach(spans, function (span) {\n\t\t\t\tif (span !== '' || spans.length === 1) {\n\t\t\t\t\tvar attributes = {},\n\t\t\t\t\t\ttspan = doc.createElementNS(SVG_NS, 'tspan'),\n\t\t\t\t\t\tspanStyle; // #390\n\t\t\t\t\tif (styleRegex.test(span)) {\n\t\t\t\t\t\tspanStyle = span.match(styleRegex)[1].replace(/(;| |^)color([ :])/, '$1fill$2');\n\t\t\t\t\t\tattr(tspan, 'style', spanStyle);\n\t\t\t\t\t}\n\t\t\t\t\tif (hrefRegex.test(span) && !forExport) { // Not for export - #1529\n\t\t\t\t\t\tattr(tspan, 'onclick', 'location.href=\\\"' + span.match(hrefRegex)[1] + '\\\"');\n\t\t\t\t\t\tcss(tspan, { cursor: 'pointer' });\n\t\t\t\t\t}\n\n\t\t\t\t\tspan = (span.replace(/<(.|\\n)*?>/g, '') || ' ')\n\t\t\t\t\t\t.replace(/&lt;/g, '<')\n\t\t\t\t\t\t.replace(/&gt;/g, '>');\n\n\t\t\t\t\t// Nested tags aren't supported, and cause crash in Safari (#1596)\n\t\t\t\t\tif (span !== ' ') {\n\n\t\t\t\t\t\t// add the text node\n\t\t\t\t\t\ttspan.appendChild(doc.createTextNode(span));\n\n\t\t\t\t\t\tif (!spanNo) { // first span in a line, align it to the left\n\t\t\t\t\t\t\tattributes.x = parentX;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattributes.dx = 0; // #16\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// add attributes\n\t\t\t\t\t\tattr(tspan, attributes);\n\n\t\t\t\t\t\t// first span on subsequent line, add the line height\n\t\t\t\t\t\tif (!spanNo && lineNo) {\n\n\t\t\t\t\t\t\t// allow getting the right offset height in exporting in IE\n\t\t\t\t\t\t\tif (!hasSVG && forExport) {\n\t\t\t\t\t\t\t\tcss(tspan, { display: 'block' });\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Set the line height based on the font size of either\n\t\t\t\t\t\t\t// the text element or the tspan element\n\t\t\t\t\t\t\tattr(\n\t\t\t\t\t\t\t\ttspan,\n\t\t\t\t\t\t\t\t'dy',\n\t\t\t\t\t\t\t\ttextLineHeight || renderer.fontMetrics(\n\t\t\t\t\t\t\t\t\t/px$/.test(tspan.style.fontSize) ?\n\t\t\t\t\t\t\t\t\t\ttspan.style.fontSize :\n\t\t\t\t\t\t\t\t\t\ttextStyles.fontSize\n\t\t\t\t\t\t\t\t).h,\n\t\t\t\t\t\t\t\t// Safari 6.0.2 - too optimized for its own good (#1539)\n\t\t\t\t\t\t\t\t// TODO: revisit this with future versions of Safari\n\t\t\t\t\t\t\t\tisWebKit && tspan.offsetHeight\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Append it\n\t\t\t\t\t\ttextNode.appendChild(tspan);\n\n\t\t\t\t\t\tspanNo++;\n\n\t\t\t\t\t\t// check width and apply soft breaks\n\t\t\t\t\t\tif (width) {\n\t\t\t\t\t\t\tvar words = span.replace(/([^\\^])-/g, '$1- ').split(' '), // #1273\n\t\t\t\t\t\t\t\ttooLong,\n\t\t\t\t\t\t\t\tactualWidth,\n\t\t\t\t\t\t\t\tclipHeight = wrapper._clipHeight,\n\t\t\t\t\t\t\t\trest = [],\n\t\t\t\t\t\t\t\tdy = pInt(textLineHeight || 16),\n\t\t\t\t\t\t\t\tsoftLineNo = 1,\n\t\t\t\t\t\t\t\tbBox;\n\n\t\t\t\t\t\t\twhile (words.length || rest.length) {\n\t\t\t\t\t\t\t\tdelete wrapper.bBox; // delete cache\n\t\t\t\t\t\t\t\tbBox = wrapper.getBBox();\n\t\t\t\t\t\t\t\tactualWidth = bBox.width;\n\t\t\t\t\t\t\t\ttooLong = actualWidth > width;\n\t\t\t\t\t\t\t\tif (!tooLong || words.length === 1) { // new line needed\n\t\t\t\t\t\t\t\t\twords = rest;\n\t\t\t\t\t\t\t\t\trest = [];\n\t\t\t\t\t\t\t\t\tif (words.length) {\n\t\t\t\t\t\t\t\t\t\tsoftLineNo++;\n\n\t\t\t\t\t\t\t\t\t\tif (clipHeight && softLineNo * dy > clipHeight) {\n\t\t\t\t\t\t\t\t\t\t\twords = ['...'];\n\t\t\t\t\t\t\t\t\t\t\twrapper.attr('title', wrapper.textStr);\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\ttspan = doc.createElementNS(SVG_NS, 'tspan');\n\t\t\t\t\t\t\t\t\t\t\tattr(tspan, {\n\t\t\t\t\t\t\t\t\t\t\t\tdy: dy,\n\t\t\t\t\t\t\t\t\t\t\t\tx: parentX\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\tif (spanStyle) { // #390\n\t\t\t\t\t\t\t\t\t\t\t\tattr(tspan, 'style', spanStyle);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttextNode.appendChild(tspan);\n\n\t\t\t\t\t\t\t\t\t\t\tif (actualWidth > width) { // a single word is pressing it out\n\t\t\t\t\t\t\t\t\t\t\t\twidth = actualWidth;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else { // append to existing line tspan\n\t\t\t\t\t\t\t\t\ttspan.removeChild(tspan.firstChild);\n\t\t\t\t\t\t\t\t\trest.unshift(words.pop());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (words.length) {\n\t\t\t\t\t\t\t\t\ttspan.appendChild(doc.createTextNode(words.join(' ').replace(/- /g, '-')));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n\t * Create a button with preset states\n\t * @param {String} text\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Function} callback\n\t * @param {Object} normalState\n\t * @param {Object} hoverState\n\t * @param {Object} pressedState\n\t */\n\tbutton: function (text, x, y, callback, normalState, hoverState, pressedState, disabledState) {\n\t\tvar label = this.label(text, x, y, null, null, null, null, null, 'button'),\n\t\t\tcurState = 0,\n\t\t\tstateOptions,\n\t\t\tstateStyle,\n\t\t\tnormalStyle,\n\t\t\thoverStyle,\n\t\t\tpressedStyle,\n\t\t\tdisabledStyle,\n\t\t\tSTYLE = 'style',\n\t\t\tverticalGradient = { x1: 0, y1: 0, x2: 0, y2: 1 };\n\n\t\t// Normal state - prepare the attributes\n\t\tnormalState = merge({\n\t\t\t'stroke-width': 1,\n\t\t\tstroke: '#CCCCCC',\n\t\t\tfill: {\n\t\t\t\tlinearGradient: verticalGradient,\n\t\t\t\tstops: [\n\t\t\t\t\t[0, '#FEFEFE'],\n\t\t\t\t\t[1, '#F6F6F6']\n\t\t\t\t]\n\t\t\t},\n\t\t\tr: 2,\n\t\t\tpadding: 5,\n\t\t\tstyle: {\n\t\t\t\tcolor: 'black'\n\t\t\t}\n\t\t}, normalState);\n\t\tnormalStyle = normalState[STYLE];\n\t\tdelete normalState[STYLE];\n\n\t\t// Hover state\n\t\thoverState = merge(normalState, {\n\t\t\tstroke: '#68A',\n\t\t\tfill: {\n\t\t\t\tlinearGradient: verticalGradient,\n\t\t\t\tstops: [\n\t\t\t\t\t[0, '#FFF'],\n\t\t\t\t\t[1, '#ACF']\n\t\t\t\t]\n\t\t\t}\n\t\t}, hoverState);\n\t\thoverStyle = hoverState[STYLE];\n\t\tdelete hoverState[STYLE];\n\n\t\t// Pressed state\n\t\tpressedState = merge(normalState, {\n\t\t\tstroke: '#68A',\n\t\t\tfill: {\n\t\t\t\tlinearGradient: verticalGradient,\n\t\t\t\tstops: [\n\t\t\t\t\t[0, '#9BD'],\n\t\t\t\t\t[1, '#CDF']\n\t\t\t\t]\n\t\t\t}\n\t\t}, pressedState);\n\t\tpressedStyle = pressedState[STYLE];\n\t\tdelete pressedState[STYLE];\n\n\t\t// Disabled state\n\t\tdisabledState = merge(normalState, {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t}\n\t\t}, disabledState);\n\t\tdisabledStyle = disabledState[STYLE];\n\t\tdelete disabledState[STYLE];\n\n\t\t// Add the events. IE9 and IE10 need mouseover and mouseout to funciton (#667).\n\t\taddEvent(label.element, isIE ? 'mouseover' : 'mouseenter', function () {\n\t\t\tif (curState !== 3) {\n\t\t\t\tlabel.attr(hoverState)\n\t\t\t\t\t.css(hoverStyle);\n\t\t\t}\n\t\t});\n\t\taddEvent(label.element, isIE ? 'mouseout' : 'mouseleave', function () {\n\t\t\tif (curState !== 3) {\n\t\t\t\tstateOptions = [normalState, hoverState, pressedState][curState];\n\t\t\t\tstateStyle = [normalStyle, hoverStyle, pressedStyle][curState];\n\t\t\t\tlabel.attr(stateOptions)\n\t\t\t\t\t.css(stateStyle);\n\t\t\t}\n\t\t});\n\n\t\tlabel.setState = function (state) {\n\t\t\tlabel.state = curState = state;\n\t\t\tif (!state) {\n\t\t\t\tlabel.attr(normalState)\n\t\t\t\t\t.css(normalStyle);\n\t\t\t} else if (state === 2) {\n\t\t\t\tlabel.attr(pressedState)\n\t\t\t\t\t.css(pressedStyle);\n\t\t\t} else if (state === 3) {\n\t\t\t\tlabel.attr(disabledState)\n\t\t\t\t\t.css(disabledStyle);\n\t\t\t}\n\t\t};\n\n\t\treturn label\n\t\t\t.on('click', function () {\n\t\t\t\tif (curState !== 3) {\n\t\t\t\t\tcallback.call(label);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.attr(normalState)\n\t\t\t.css(extend({ cursor: 'default' }, normalStyle));\n\t},\n\n\t/**\n\t * Make a straight line crisper by not spilling out to neighbour pixels\n\t * @param {Array} points\n\t * @param {Number} width\n\t */\n\tcrispLine: function (points, width) {\n\t\t// points format: [M, 0, 0, L, 100, 0]\n\t\t// normalize to a crisp line\n\t\tif (points[1] === points[4]) {\n\t\t\t// Substract due to #1129. Now bottom and left axis gridlines behave the same.\n\t\t\tpoints[1] = points[4] = mathRound(points[1]) - (width % 2 / 2);\n\t\t}\n\t\tif (points[2] === points[5]) {\n\t\t\tpoints[2] = points[5] = mathRound(points[2]) + (width % 2 / 2);\n\t\t}\n\t\treturn points;\n\t},\n\n\n\t/**\n\t * Draw a path\n\t * @param {Array} path An SVG path in array form\n\t */\n\tpath: function (path) {\n\t\tvar attr = {\n\t\t\tfill: NONE\n\t\t};\n\t\tif (isArray(path)) {\n\t\t\tattr.d = path;\n\t\t} else if (isObject(path)) { // attributes\n\t\t\textend(attr, path);\n\t\t}\n\t\treturn this.createElement('path').attr(attr);\n\t},\n\n\t/**\n\t * Draw and return an SVG circle\n\t * @param {Number} x The x position\n\t * @param {Number} y The y position\n\t * @param {Number} r The radius\n\t */\n\tcircle: function (x, y, r) {\n\t\tvar attr = isObject(x) ?\n\t\t\tx :\n\t\t\t{\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\tr: r\n\t\t\t};\n\n\t\treturn this.createElement('circle').attr(attr);\n\t},\n\n\t/**\n\t * Draw and return an arc\n\t * @param {Number} x X position\n\t * @param {Number} y Y position\n\t * @param {Number} r Radius\n\t * @param {Number} innerR Inner radius like used in donut charts\n\t * @param {Number} start Starting angle\n\t * @param {Number} end Ending angle\n\t */\n\tarc: function (x, y, r, innerR, start, end) {\n\t\tvar arc;\n\n\t\tif (isObject(x)) {\n\t\t\ty = x.y;\n\t\t\tr = x.r;\n\t\t\tinnerR = x.innerR;\n\t\t\tstart = x.start;\n\t\t\tend = x.end;\n\t\t\tx = x.x;\n\t\t}\n\n\t\t// Arcs are defined as symbols for the ability to set\n\t\t// attributes in attr and animate\n\t\tarc = this.symbol('arc', x || 0, y || 0, r || 0, r || 0, {\n\t\t\tinnerR: innerR || 0,\n\t\t\tstart: start || 0,\n\t\t\tend: end || 0\n\t\t});\n\t\tarc.r = r; // #959\n\t\treturn arc;\n\t},\n\n\t/**\n\t * Draw and return a rectangle\n\t * @param {Number} x Left position\n\t * @param {Number} y Top position\n\t * @param {Number} width\n\t * @param {Number} height\n\t * @param {Number} r Border corner radius\n\t * @param {Number} strokeWidth A stroke width can be supplied to allow crisp drawing\n\t */\n\trect: function (x, y, width, height, r, strokeWidth) {\n\n\t\tr = isObject(x) ? x.r : r;\n\n\t\tvar wrapper = this.createElement('rect').attr({\n\t\t\t\trx: r,\n\t\t\t\try: r,\n\t\t\t\tfill: NONE\n\t\t\t});\n\t\treturn wrapper.attr(\n\t\t\t\tisObject(x) ?\n\t\t\t\t\tx :\n\t\t\t\t\t// do not crispify when an object is passed in (as in column charts)\n\t\t\t\t\twrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0))\n\t\t\t);\n\t},\n\n\t/**\n\t * Resize the box and re-align all aligned elements\n\t * @param {Object} width\n\t * @param {Object} height\n\t * @param {Boolean} animate\n\t *\n\t */\n\tsetSize: function (width, height, animate) {\n\t\tvar renderer = this,\n\t\t\talignedObjects = renderer.alignedObjects,\n\t\t\ti = alignedObjects.length;\n\n\t\trenderer.width = width;\n\t\trenderer.height = height;\n\n\t\trenderer.boxWrapper[pick(animate, true) ? 'animate' : 'attr']({\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t});\n\n\t\twhile (i--) {\n\t\t\talignedObjects[i].align();\n\t\t}\n\t},\n\n\t/**\n\t * Create a group\n\t * @param {String} name The group will be given a class name of 'highcharts-{name}'.\n\t *     This can be used for styling and scripting.\n\t */\n\tg: function (name) {\n\t\tvar elem = this.createElement('g');\n\t\treturn defined(name) ? elem.attr({ 'class': PREFIX + name }) : elem;\n\t},\n\n\t/**\n\t * Display an image\n\t * @param {String} src\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\timage: function (src, x, y, width, height) {\n\t\tvar attribs = {\n\t\t\t\tpreserveAspectRatio: NONE\n\t\t\t},\n\t\t\telemWrapper;\n\n\t\t// optional properties\n\t\tif (arguments.length > 1) {\n\t\t\textend(attribs, {\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t});\n\t\t}\n\n\t\telemWrapper = this.createElement('image').attr(attribs);\n\n\t\t// set the href in the xlink namespace\n\t\tif (elemWrapper.element.setAttributeNS) {\n\t\t\telemWrapper.element.setAttributeNS('http://www.w3.org/1999/xlink',\n\t\t\t\t'href', src);\n\t\t} else {\n\t\t\t// could be exporting in IE\n\t\t\t// using href throws \"not supported\" in ie7 and under, requries regex shim to fix later\n\t\t\telemWrapper.element.setAttribute('hc-svg-href', src);\n\t}\n\n\t\treturn elemWrapper;\n\t},\n\n\t/**\n\t * Draw a symbol out of pre-defined shape paths from the namespace 'symbol' object.\n\t *\n\t * @param {Object} symbol\n\t * @param {Object} x\n\t * @param {Object} y\n\t * @param {Object} radius\n\t * @param {Object} options\n\t */\n\tsymbol: function (symbol, x, y, width, height, options) {\n\n\t\tvar obj,\n\n\t\t\t// get the symbol definition function\n\t\t\tsymbolFn = this.symbols[symbol],\n\n\t\t\t// check if there's a path defined for this symbol\n\t\t\tpath = symbolFn && symbolFn(\n\t\t\t\tmathRound(x),\n\t\t\t\tmathRound(y),\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\toptions\n\t\t\t),\n\n\t\t\timageElement,\n\t\t\timageRegex = /^url\\((.*?)\\)$/,\n\t\t\timageSrc,\n\t\t\timageSize,\n\t\t\tcenterImage;\n\n\t\tif (path) {\n\n\t\t\tobj = this.path(path);\n\t\t\t// expando properties for use in animate and attr\n\t\t\textend(obj, {\n\t\t\t\tsymbolName: symbol,\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t});\n\t\t\tif (options) {\n\t\t\t\textend(obj, options);\n\t\t\t}\n\n\n\t\t// image symbols\n\t\t} else if (imageRegex.test(symbol)) {\n\n\t\t\t// On image load, set the size and position\n\t\t\tcenterImage = function (img, size) {\n\t\t\t\tif (img.element) { // it may be destroyed in the meantime (#1390)\n\t\t\t\t\timg.attr({\n\t\t\t\t\t\twidth: size[0],\n\t\t\t\t\t\theight: size[1]\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!img.alignByTranslate) { // #185\n\t\t\t\t\t\timg.translate(\n\t\t\t\t\t\t\tmathRound((width - size[0]) / 2), // #1378\n\t\t\t\t\t\t\tmathRound((height - size[1]) / 2)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\timageSrc = symbol.match(imageRegex)[1];\n\t\t\timageSize = symbolSizes[imageSrc];\n\n\t\t\t// Ireate the image synchronously, add attribs async\n\t\t\tobj = this.image(imageSrc)\n\t\t\t\t.attr({\n\t\t\t\t\tx: x,\n\t\t\t\t\ty: y\n\t\t\t\t});\n\t\t\tobj.isImg = true;\n\n\t\t\tif (imageSize) {\n\t\t\t\tcenterImage(obj, imageSize);\n\t\t\t} else {\n\t\t\t\t// Initialize image to be 0 size so export will still function if there's no cached sizes.\n\t\t\t\t//\n\t\t\t\tobj.attr({ width: 0, height: 0 });\n\n\t\t\t\t// Create a dummy JavaScript image to get the width and height. Due to a bug in IE < 8,\n\t\t\t\t// the created element must be assigned to a variable in order to load (#292).\n\t\t\t\timageElement = createElement('img', {\n\t\t\t\t\tonload: function () {\n\t\t\t\t\t\tcenterImage(obj, symbolSizes[imageSrc] = [this.width, this.height]);\n\t\t\t\t\t},\n\t\t\t\t\tsrc: imageSrc\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t/**\n\t * An extendable collection of functions for defining symbol paths.\n\t */\n\tsymbols: {\n\t\t'circle': function (x, y, w, h) {\n\t\t\tvar cpw = 0.166 * w;\n\t\t\treturn [\n\t\t\t\tM, x + w / 2, y,\n\t\t\t\t'C', x + w + cpw, y, x + w + cpw, y + h, x + w / 2, y + h,\n\t\t\t\t'C', x - cpw, y + h, x - cpw, y, x + w / 2, y,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\n\t\t'square': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x, y,\n\t\t\t\tL, x + w, y,\n\t\t\t\tx + w, y + h,\n\t\t\t\tx, y + h,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\n\t\t'triangle': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x + w / 2, y,\n\t\t\t\tL, x + w, y + h,\n\t\t\t\tx, y + h,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\n\t\t'triangle-down': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x, y,\n\t\t\t\tL, x + w, y,\n\t\t\t\tx + w / 2, y + h,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\t\t'diamond': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x + w / 2, y,\n\t\t\t\tL, x + w, y + h / 2,\n\t\t\t\tx + w / 2, y + h,\n\t\t\t\tx, y + h / 2,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\t\t'arc': function (x, y, w, h, options) {\n\t\t\tvar start = options.start,\n\t\t\t\tradius = options.r || w || h,\n\t\t\t\tend = options.end - 0.001, // to prevent cos and sin of start and end from becoming equal on 360 arcs (related: #1561)\n\t\t\t\tinnerRadius = options.innerR,\n\t\t\t\topen = options.open,\n\t\t\t\tcosStart = mathCos(start),\n\t\t\t\tsinStart = mathSin(start),\n\t\t\t\tcosEnd = mathCos(end),\n\t\t\t\tsinEnd = mathSin(end),\n\t\t\t\tlongArc = options.end - start < mathPI ? 0 : 1;\n\n\t\t\treturn [\n\t\t\t\tM,\n\t\t\t\tx + radius * cosStart,\n\t\t\t\ty + radius * sinStart,\n\t\t\t\t'A', // arcTo\n\t\t\t\tradius, // x radius\n\t\t\t\tradius, // y radius\n\t\t\t\t0, // slanting\n\t\t\t\tlongArc, // long or short arc\n\t\t\t\t1, // clockwise\n\t\t\t\tx + radius * cosEnd,\n\t\t\t\ty + radius * sinEnd,\n\t\t\t\topen ? M : L,\n\t\t\t\tx + innerRadius * cosEnd,\n\t\t\t\ty + innerRadius * sinEnd,\n\t\t\t\t'A', // arcTo\n\t\t\t\tinnerRadius, // x radius\n\t\t\t\tinnerRadius, // y radius\n\t\t\t\t0, // slanting\n\t\t\t\tlongArc, // long or short arc\n\t\t\t\t0, // clockwise\n\t\t\t\tx + innerRadius * cosStart,\n\t\t\t\ty + innerRadius * sinStart,\n\n\t\t\t\topen ? '' : 'Z' // close\n\t\t\t];\n\t\t}\n\t},\n\n\t/**\n\t * Define a clipping rectangle\n\t * @param {String} id\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tclipRect: function (x, y, width, height) {\n\t\tvar wrapper,\n\t\t\tid = PREFIX + idCounter++,\n\n\t\t\tclipPath = this.createElement('clipPath').attr({\n\t\t\t\tid: id\n\t\t\t}).add(this.defs);\n\n\t\twrapper = this.rect(x, y, width, height, 0).add(clipPath);\n\t\twrapper.id = id;\n\t\twrapper.clipPath = clipPath;\n\n\t\treturn wrapper;\n\t},\n\n\n\t/**\n\t * Take a color and return it if it's a string, make it a gradient if it's a\n\t * gradient configuration object. Prior to Highstock, an array was used to define\n\t * a linear gradient with pixel positions relative to the SVG. In newer versions\n\t * we change the coordinates to apply relative to the shape, using coordinates\n\t * 0-1 within the shape. To preserve backwards compatibility, linearGradient\n\t * in this definition is an object of x1, y1, x2 and y2.\n\t *\n\t * @param {Object} color The color or config object\n\t */\n\tcolor: function (color, elem, prop) {\n\t\tvar renderer = this,\n\t\t\tcolorObject,\n\t\t\tregexRgba = /^rgba/,\n\t\t\tgradName,\n\t\t\tgradAttr,\n\t\t\tgradients,\n\t\t\tgradientObject,\n\t\t\tstops,\n\t\t\tstopColor,\n\t\t\tstopOpacity,\n\t\t\tradialReference,\n\t\t\tn,\n\t\t\tid,\n\t\t\tkey = [];\n\n\t\t// Apply linear or radial gradients\n\t\tif (color && color.linearGradient) {\n\t\t\tgradName = 'linearGradient';\n\t\t} else if (color && color.radialGradient) {\n\t\t\tgradName = 'radialGradient';\n\t\t}\n\n\t\tif (gradName) {\n\t\t\tgradAttr = color[gradName];\n\t\t\tgradients = renderer.gradients;\n\t\t\tstops = color.stops;\n\t\t\tradialReference = elem.radialReference;\n\n\t\t\t// Keep < 2.2 kompatibility\n\t\t\tif (isArray(gradAttr)) {\n\t\t\t\tcolor[gradName] = gradAttr = {\n\t\t\t\t\tx1: gradAttr[0],\n\t\t\t\t\ty1: gradAttr[1],\n\t\t\t\t\tx2: gradAttr[2],\n\t\t\t\t\ty2: gradAttr[3],\n\t\t\t\t\tgradientUnits: 'userSpaceOnUse'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Correct the radial gradient for the radial reference system\n\t\t\tif (gradName === 'radialGradient' && radialReference && !defined(gradAttr.gradientUnits)) {\n\t\t\t\tgradAttr = merge(gradAttr, {\n\t\t\t\t\tcx: (radialReference[0] - radialReference[2] / 2) + gradAttr.cx * radialReference[2],\n\t\t\t\t\tcy: (radialReference[1] - radialReference[2] / 2) + gradAttr.cy * radialReference[2],\n\t\t\t\t\tr: gradAttr.r * radialReference[2],\n\t\t\t\t\tgradientUnits: 'userSpaceOnUse'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Build the unique key to detect whether we need to create a new element (#1282)\n\t\t\tfor (n in gradAttr) {\n\t\t\t\tif (n !== 'id') {\n\t\t\t\t\tkey.push(n, gradAttr[n]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (n in stops) {\n\t\t\t\tkey.push(stops[n]);\n\t\t\t}\n\t\t\tkey = key.join(',');\n\n\t\t\t// Check if a gradient object with the same config object is created within this renderer\n\t\t\tif (gradients[key]) {\n\t\t\t\tid = gradients[key].id;\n\n\t\t\t} else {\n\n\t\t\t\t// Set the id and create the element\n\t\t\t\tgradAttr.id = id = PREFIX + idCounter++;\n\t\t\t\tgradients[key] = gradientObject = renderer.createElement(gradName)\n\t\t\t\t\t.attr(gradAttr)\n\t\t\t\t\t.add(renderer.defs);\n\n\n\t\t\t\t// The gradient needs to keep a list of stops to be able to destroy them\n\t\t\t\tgradientObject.stops = [];\n\t\t\t\teach(stops, function (stop) {\n\t\t\t\t\tvar stopObject;\n\t\t\t\t\tif (regexRgba.test(stop[1])) {\n\t\t\t\t\t\tcolorObject = Color(stop[1]);\n\t\t\t\t\t\tstopColor = colorObject.get('rgb');\n\t\t\t\t\t\tstopOpacity = colorObject.get('a');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstopColor = stop[1];\n\t\t\t\t\t\tstopOpacity = 1;\n\t\t\t\t\t}\n\t\t\t\t\tstopObject = renderer.createElement('stop').attr({\n\t\t\t\t\t\toffset: stop[0],\n\t\t\t\t\t\t'stop-color': stopColor,\n\t\t\t\t\t\t'stop-opacity': stopOpacity\n\t\t\t\t\t}).add(gradientObject);\n\n\t\t\t\t\t// Add the stop element to the gradient\n\t\t\t\t\tgradientObject.stops.push(stopObject);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Return the reference to the gradient object\n\t\t\treturn 'url(' + renderer.url + '#' + id + ')';\n\n\t\t// Webkit and Batik can't show rgba.\n\t\t} else if (regexRgba.test(color)) {\n\t\t\tcolorObject = Color(color);\n\t\t\tattr(elem, prop + '-opacity', colorObject.get('a'));\n\n\t\t\treturn colorObject.get('rgb');\n\n\n\t\t} else {\n\t\t\t// Remove the opacity attribute added above. Does not throw if the attribute is not there.\n\t\t\telem.removeAttribute(prop + '-opacity');\n\n\t\t\treturn color;\n\t\t}\n\n\t},\n\n\n\t/**\n\t * Add text to the SVG object\n\t * @param {String} str\n\t * @param {Number} x Left position\n\t * @param {Number} y Top position\n\t * @param {Boolean} useHTML Use HTML to render the text\n\t */\n\ttext: function (str, x, y, useHTML) {\n\n\t\t// declare variables\n\t\tvar renderer = this,\n\t\t\tdefaultChartStyle = defaultOptions.chart.style,\n\t\t\tfakeSVG = useCanVG || (!hasSVG && renderer.forExport),\n\t\t\twrapper;\n\n\t\tif (useHTML && !renderer.forExport) {\n\t\t\treturn renderer.html(str, x, y);\n\t\t}\n\n\t\tx = mathRound(pick(x, 0));\n\t\ty = mathRound(pick(y, 0));\n\n\t\twrapper = renderer.createElement('text')\n\t\t\t.attr({\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\ttext: str\n\t\t\t})\n\t\t\t.css({\n\t\t\t\tfontFamily: defaultChartStyle.fontFamily,\n\t\t\t\tfontSize: defaultChartStyle.fontSize\n\t\t\t});\n\n\t\t// Prevent wrapping from creating false offsetWidths in export in legacy IE (#1079, #1063)\n\t\tif (fakeSVG) {\n\t\t\twrapper.css({\n\t\t\t\tposition: ABSOLUTE\n\t\t\t});\n\t\t}\n\n\t\twrapper.x = x;\n\t\twrapper.y = y;\n\t\treturn wrapper;\n\t},\n\n\n\t/**\n\t * Create HTML text node. This is used by the VML renderer as well as the SVG\n\t * renderer through the useHTML option.\n\t *\n\t * @param {String} str\n\t * @param {Number} x\n\t * @param {Number} y\n\t */\n\thtml: function (str, x, y) {\n\t\tvar defaultChartStyle = defaultOptions.chart.style,\n\t\t\twrapper = this.createElement('span'),\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\telement = wrapper.element,\n\t\t\trenderer = wrapper.renderer;\n\n\t\t// Text setter\n\t\tattrSetters.text = function (value) {\n\t\t\tif (value !== element.innerHTML) {\n\t\t\t\tdelete this.bBox;\n\t\t\t}\n\t\t\telement.innerHTML = value;\n\t\t\treturn false;\n\t\t};\n\n\t\t// Various setters which rely on update transform\n\t\tattrSetters.x = attrSetters.y = attrSetters.align = function (value, key) {\n\t\t\tif (key === 'align') {\n\t\t\t\tkey = 'textAlign'; // Do not overwrite the SVGElement.align method. Same as VML.\n\t\t\t}\n\t\t\twrapper[key] = value;\n\t\t\twrapper.htmlUpdateTransform();\n\t\t\treturn false;\n\t\t};\n\n\t\t// Set the default attributes\n\t\twrapper.attr({\n\t\t\t\ttext: str,\n\t\t\t\tx: mathRound(x),\n\t\t\t\ty: mathRound(y)\n\t\t\t})\n\t\t\t.css({\n\t\t\t\tposition: ABSOLUTE,\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tfontFamily: defaultChartStyle.fontFamily,\n\t\t\t\tfontSize: defaultChartStyle.fontSize\n\t\t\t});\n\n\t\t// Use the HTML specific .css method\n\t\twrapper.css = wrapper.htmlCss;\n\n\t\t// This is specific for HTML within SVG\n\t\tif (renderer.isSVG) {\n\t\t\twrapper.add = function (svgGroupWrapper) {\n\n\t\t\t\tvar htmlGroup,\n\t\t\t\t\tcontainer = renderer.box.parentNode,\n\t\t\t\t\tparentGroup,\n\t\t\t\t\tparents = [];\n\n\t\t\t\t// Create a mock group to hold the HTML elements\n\t\t\t\tif (svgGroupWrapper) {\n\t\t\t\t\thtmlGroup = svgGroupWrapper.div;\n\t\t\t\t\tif (!htmlGroup) {\n\n\t\t\t\t\t\t// Read the parent chain into an array and read from top down\n\t\t\t\t\t\tparentGroup = svgGroupWrapper;\n\t\t\t\t\t\twhile (parentGroup) {\n\n\t\t\t\t\t\t\tparents.push(parentGroup);\n\n\t\t\t\t\t\t\t// Move up to the next parent group\n\t\t\t\t\t\t\tparentGroup = parentGroup.parentGroup;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Ensure dynamically updating position when any parent is translated\n\t\t\t\t\t\teach(parents.reverse(), function (parentGroup) {\n\t\t\t\t\t\t\tvar htmlGroupStyle;\n\n\t\t\t\t\t\t\t// Create a HTML div and append it to the parent div to emulate\n\t\t\t\t\t\t\t// the SVG group structure\n\t\t\t\t\t\t\thtmlGroup = parentGroup.div = parentGroup.div || createElement(DIV, {\n\t\t\t\t\t\t\t\tclassName: attr(parentGroup.element, 'class')\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tposition: ABSOLUTE,\n\t\t\t\t\t\t\t\tleft: (parentGroup.translateX || 0) + PX,\n\t\t\t\t\t\t\t\ttop: (parentGroup.translateY || 0) + PX\n\t\t\t\t\t\t\t}, htmlGroup || container); // the top group is appended to container\n\n\t\t\t\t\t\t\t// Shortcut\n\t\t\t\t\t\t\thtmlGroupStyle = htmlGroup.style;\n\n\t\t\t\t\t\t\t// Set listeners to update the HTML div's position whenever the SVG group\n\t\t\t\t\t\t\t// position is changed\n\t\t\t\t\t\t\textend(parentGroup.attrSetters, {\n\t\t\t\t\t\t\t\ttranslateX: function (value) {\n\t\t\t\t\t\t\t\t\thtmlGroupStyle.left = value + PX;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttranslateY: function (value) {\n\t\t\t\t\t\t\t\t\thtmlGroupStyle.top = value + PX;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tvisibility: function (value, key) {\n\t\t\t\t\t\t\t\t\thtmlGroupStyle[key] = value;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thtmlGroup = container;\n\t\t\t\t}\n\n\t\t\t\thtmlGroup.appendChild(element);\n\n\t\t\t\t// Shared with VML:\n\t\t\t\twrapper.added = true;\n\t\t\t\tif (wrapper.alignOnAdd) {\n\t\t\t\t\twrapper.htmlUpdateTransform();\n\t\t\t\t}\n\n\t\t\t\treturn wrapper;\n\t\t\t};\n\t\t}\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * Utility to return the baseline offset and total line height from the font size\n\t */\n\tfontMetrics: function (fontSize) {\n\t\tfontSize = pInt(fontSize || 11);\n\n\t\t// Empirical values found by comparing font size and bounding box height.\n\t\t// Applies to the default font family. http://jsfiddle.net/highcharts/7xvn7/\n\t\tvar lineHeight = fontSize < 24 ? fontSize + 4 : mathRound(fontSize * 1.2),\n\t\t\tbaseline = mathRound(lineHeight * 0.8);\n\n\t\treturn {\n\t\t\th: lineHeight,\n\t\t\tb: baseline\n\t\t};\n\t},\n\n\t/**\n\t * Add a label, a text item that can hold a colored or gradient background\n\t * as well as a border and shadow.\n\t * @param {string} str\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {String} shape\n\t * @param {Number} anchorX In case the shape has a pointer, like a flag, this is the\n\t *    coordinates it should be pinned to\n\t * @param {Number} anchorY\n\t * @param {Boolean} baseline Whether to position the label relative to the text baseline,\n\t *    like renderer.text, or to the upper border of the rectangle.\n\t * @param {String} className Class name for the group\n\t */\n\tlabel: function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) {\n\n\t\tvar renderer = this,\n\t\t\twrapper = renderer.g(className),\n\t\t\ttext = renderer.text('', 0, 0, useHTML)\n\t\t\t\t.attr({\n\t\t\t\t\tzIndex: 1\n\t\t\t\t}),\n\t\t\t\t//.add(wrapper),\n\t\t\tbox,\n\t\t\tbBox,\n\t\t\talignFactor = 0,\n\t\t\tpadding = 3,\n\t\t\tpaddingLeft = 0,\n\t\t\twidth,\n\t\t\theight,\n\t\t\twrapperX,\n\t\t\twrapperY,\n\t\t\tcrispAdjust = 0,\n\t\t\tdeferredAttr = {},\n\t\t\tbaselineOffset,\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\tneedsBox;\n\n\t\t/**\n\t\t * This function runs after the label is added to the DOM (when the bounding box is\n\t\t * available), and after the text of the label is updated to detect the new bounding\n\t\t * box and reflect it in the border box.\n\t\t */\n\t\tfunction updateBoxSize() {\n\t\t\tvar boxX,\n\t\t\t\tboxY,\n\t\t\t\tstyle = text.element.style;\n\n\t\t\tbBox = (width === undefined || height === undefined || wrapper.styles.textAlign) &&\n\t\t\t\ttext.getBBox();\n\t\t\twrapper.width = (width || bBox.width || 0) + 2 * padding + paddingLeft;\n\t\t\twrapper.height = (height || bBox.height || 0) + 2 * padding;\n\n\t\t\t// update the label-scoped y offset\n\t\t\tbaselineOffset = padding + renderer.fontMetrics(style && style.fontSize).b;\n\n\t\t\tif (needsBox) {\n\n\t\t\t\t// create the border box if it is not already present\n\t\t\t\tif (!box) {\n\t\t\t\t\tboxX = mathRound(-alignFactor * padding);\n\t\t\t\t\tboxY = baseline ? -baselineOffset : 0;\n\n\t\t\t\t\twrapper.box = box = shape ?\n\t\t\t\t\t\trenderer.symbol(shape, boxX, boxY, wrapper.width, wrapper.height) :\n\t\t\t\t\t\trenderer.rect(boxX, boxY, wrapper.width, wrapper.height, 0, deferredAttr[STROKE_WIDTH]);\n\t\t\t\t\tbox.add(wrapper);\n\t\t\t\t}\n\n\t\t\t\t// apply the box attributes\n\t\t\t\tif (!box.isImg) { // #1630\n\t\t\t\t\tbox.attr(merge({\n\t\t\t\t\t\twidth: wrapper.width,\n\t\t\t\t\t\theight: wrapper.height\n\t\t\t\t\t}, deferredAttr));\n\t\t\t\t}\n\t\t\t\tdeferredAttr = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * This function runs after setting text or padding, but only if padding is changed\n\t\t */\n\t\tfunction updateTextPadding() {\n\t\t\tvar styles = wrapper.styles,\n\t\t\t\ttextAlign = styles && styles.textAlign,\n\t\t\t\tx = paddingLeft + padding * (1 - alignFactor),\n\t\t\t\ty;\n\n\t\t\t// determin y based on the baseline\n\t\t\ty = baseline ? 0 : baselineOffset;\n\n\t\t\t// compensate for alignment\n\t\t\tif (defined(width) && (textAlign === 'center' || textAlign === 'right')) {\n\t\t\t\tx += { center: 0.5, right: 1 }[textAlign] * (width - bBox.width);\n\t\t\t}\n\n\t\t\t// update if anything changed\n\t\t\tif (x !== text.x || y !== text.y) {\n\t\t\t\ttext.attr({\n\t\t\t\t\tx: x,\n\t\t\t\t\ty: y\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// record current values\n\t\t\ttext.x = x;\n\t\t\ttext.y = y;\n\t\t}\n\n\t\t/**\n\t\t * Set a box attribute, or defer it if the box is not yet created\n\t\t * @param {Object} key\n\t\t * @param {Object} value\n\t\t */\n\t\tfunction boxAttr(key, value) {\n\t\t\tif (box) {\n\t\t\t\tbox.attr(key, value);\n\t\t\t} else {\n\t\t\t\tdeferredAttr[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tfunction getSizeAfterAdd() {\n\t\t\ttext.add(wrapper);\n\t\t\twrapper.attr({\n\t\t\t\ttext: str, // alignment is available now\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t});\n\n\t\t\tif (box && defined(anchorX)) {\n\t\t\t\twrapper.attr({\n\t\t\t\t\tanchorX: anchorX,\n\t\t\t\t\tanchorY: anchorY\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * After the text element is added, get the desired size of the border box\n\t\t * and add it before the text in the DOM.\n\t\t */\n\t\taddEvent(wrapper, 'add', getSizeAfterAdd);\n\n\t\t/*\n\t\t * Add specific attribute setters.\n\t\t */\n\n\t\t// only change local variables\n\t\tattrSetters.width = function (value) {\n\t\t\twidth = value;\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.height = function (value) {\n\t\t\theight = value;\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.padding =  function (value) {\n\t\t\tif (defined(value) && value !== padding) {\n\t\t\t\tpadding = value;\n\t\t\t\tupdateTextPadding();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.paddingLeft =  function (value) {\n\t\t\tif (defined(value) && value !== paddingLeft) {\n\t\t\t\tpaddingLeft = value;\n\t\t\t\tupdateTextPadding();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\t// change local variable and set attribue as well\n\t\tattrSetters.align = function (value) {\n\t\t\talignFactor = { left: 0, center: 0.5, right: 1 }[value];\n\t\t\treturn false; // prevent setting text-anchor on the group\n\t\t};\n\n\t\t// apply these to the box and the text alike\n\t\tattrSetters.text = function (value, key) {\n\t\t\ttext.attr(key, value);\n\t\t\tupdateBoxSize();\n\t\t\tupdateTextPadding();\n\t\t\treturn false;\n\t\t};\n\n\t\t// apply these to the box but not to the text\n\t\tattrSetters[STROKE_WIDTH] = function (value, key) {\n\t\t\tneedsBox = true;\n\t\t\tcrispAdjust = value % 2 / 2;\n\t\t\tboxAttr(key, value);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.stroke = attrSetters.fill = attrSetters.r = function (value, key) {\n\t\t\tif (key === 'fill') {\n\t\t\t\tneedsBox = true;\n\t\t\t}\n\t\t\tboxAttr(key, value);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.anchorX = function (value, key) {\n\t\t\tanchorX = value;\n\t\t\tboxAttr(key, value + crispAdjust - wrapperX);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.anchorY = function (value, key) {\n\t\t\tanchorY = value;\n\t\t\tboxAttr(key, value - wrapperY);\n\t\t\treturn false;\n\t\t};\n\n\t\t// rename attributes\n\t\tattrSetters.x = function (value) {\n\t\t\twrapper.x = value; // for animation getter\n\t\t\tvalue -= alignFactor * ((width || bBox.width) + padding);\n\t\t\twrapperX = mathRound(value);\n\n\t\t\twrapper.attr('translateX', wrapperX);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.y = function (value) {\n\t\t\twrapperY = wrapper.y = mathRound(value);\n\t\t\twrapper.attr('translateY', wrapperY);\n\t\t\treturn false;\n\t\t};\n\n\t\t// Redirect certain methods to either the box or the text\n\t\tvar baseCss = wrapper.css;\n\t\treturn extend(wrapper, {\n\t\t\t/**\n\t\t\t * Pick up some properties and apply them to the text instead of the wrapper\n\t\t\t */\n\t\t\tcss: function (styles) {\n\t\t\t\tif (styles) {\n\t\t\t\t\tvar textStyles = {};\n\t\t\t\t\tstyles = merge(styles); // create a copy to avoid altering the original object (#537)\n\t\t\t\t\teach(['fontSize', 'fontWeight', 'fontFamily', 'color', 'lineHeight', 'width', 'textDecoration', 'textShadow'], function (prop) {\n\t\t\t\t\t\tif (styles[prop] !== UNDEFINED) {\n\t\t\t\t\t\t\ttextStyles[prop] = styles[prop];\n\t\t\t\t\t\t\tdelete styles[prop];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\ttext.css(textStyles);\n\t\t\t\t}\n\t\t\t\treturn baseCss.call(wrapper, styles);\n\t\t\t},\n\t\t\t/**\n\t\t\t * Return the bounding box of the box, not the group\n\t\t\t */\n\t\t\tgetBBox: function () {\n\t\t\t\treturn {\n\t\t\t\t\twidth: bBox.width + 2 * padding,\n\t\t\t\t\theight: bBox.height + 2 * padding,\n\t\t\t\t\tx: bBox.x - padding,\n\t\t\t\t\ty: bBox.y - padding\n\t\t\t\t};\n\t\t\t},\n\t\t\t/**\n\t\t\t * Apply the shadow to the box\n\t\t\t */\n\t\t\tshadow: function (b) {\n\t\t\t\tif (box) {\n\t\t\t\t\tbox.shadow(b);\n\t\t\t\t}\n\t\t\t\treturn wrapper;\n\t\t\t},\n\t\t\t/**\n\t\t\t * Destroy and release memory.\n\t\t\t */\n\t\t\tdestroy: function () {\n\t\t\t\tremoveEvent(wrapper, 'add', getSizeAfterAdd);\n\n\t\t\t\t// Added by button implementation\n\t\t\t\tremoveEvent(wrapper.element, 'mouseenter');\n\t\t\t\tremoveEvent(wrapper.element, 'mouseleave');\n\n\t\t\t\tif (text) {\n\t\t\t\t\ttext = text.destroy();\n\t\t\t\t}\n\t\t\t\tif (box) {\n\t\t\t\t\tbox = box.destroy();\n\t\t\t\t}\n\t\t\t\t// Call base implementation to destroy the rest\n\t\t\t\tSVGElement.prototype.destroy.call(wrapper);\n\n\t\t\t\t// Release local pointers (#1298)\n\t\t\t\twrapper = renderer = updateBoxSize = updateTextPadding = boxAttr = getSizeAfterAdd = null;\n\t\t\t}\n\t\t});\n\t}\n}; // end SVGRenderer\n\n\n// general renderer\nRenderer = SVGRenderer;\n\n\n/* ****************************************************************************\n *                                                                            *\n * START OF INTERNET EXPLORER <= 8 SPECIFIC CODE                              *\n *                                                                            *\n * For applications and websites that don't need IE support, like platform    *\n * targeted mobile apps and web apps, this code can be removed.               *\n *                                                                            *\n *****************************************************************************/\n\n/**\n * @constructor\n */\nvar VMLRenderer, VMLElement;\nif (!hasSVG && !useCanVG) {\n\n/**\n * The VML element wrapper.\n */\nHighcharts.VMLElement = VMLElement = {\n\n\t/**\n\t * Initialize a new VML element wrapper. It builds the markup as a string\n\t * to minimize DOM traffic.\n\t * @param {Object} renderer\n\t * @param {Object} nodeName\n\t */\n\tinit: function (renderer, nodeName) {\n\t\tvar wrapper = this,\n\t\t\tmarkup =  ['<', nodeName, ' filled=\"f\" stroked=\"f\"'],\n\t\t\tstyle = ['position: ', ABSOLUTE, ';'],\n\t\t\tisDiv = nodeName === DIV;\n\n\t\t// divs and shapes need size\n\t\tif (nodeName === 'shape' || isDiv) {\n\t\t\tstyle.push('left:0;top:0;width:1px;height:1px;');\n\t\t}\n\t\tstyle.push('visibility: ', isDiv ? HIDDEN : VISIBLE);\n\n\t\tmarkup.push(' style=\"', style.join(''), '\"/>');\n\n\t\t// create element with default attributes and style\n\t\tif (nodeName) {\n\t\t\tmarkup = isDiv || nodeName === 'span' || nodeName === 'img' ?\n\t\t\t\tmarkup.join('')\n\t\t\t\t: renderer.prepVML(markup);\n\t\t\twrapper.element = createElement(markup);\n\t\t}\n\n\t\twrapper.renderer = renderer;\n\t\twrapper.attrSetters = {};\n\t},\n\n\t/**\n\t * Add the node to the given parent\n\t * @param {Object} parent\n\t */\n\tadd: function (parent) {\n\t\tvar wrapper = this,\n\t\t\trenderer = wrapper.renderer,\n\t\t\telement = wrapper.element,\n\t\t\tbox = renderer.box,\n\t\t\tinverted = parent && parent.inverted,\n\n\t\t\t// get the parent node\n\t\t\tparentNode = parent ?\n\t\t\t\tparent.element || parent :\n\t\t\t\tbox;\n\n\n\t\t// if the parent group is inverted, apply inversion on all children\n\t\tif (inverted) { // only on groups\n\t\t\trenderer.invertChild(element, parentNode);\n\t\t}\n\n\t\t// append it\n\t\tparentNode.appendChild(element);\n\n\t\t// align text after adding to be able to read offset\n\t\twrapper.added = true;\n\t\tif (wrapper.alignOnAdd && !wrapper.deferUpdateTransform) {\n\t\t\twrapper.updateTransform();\n\t\t}\n\n\t\t// fire an event for internal hooks\n\t\tfireEvent(wrapper, 'add');\n\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * VML always uses htmlUpdateTransform\n\t */\n\tupdateTransform: SVGElement.prototype.htmlUpdateTransform,\n\n\t/**\n\t * Set the rotation of a span with oldIE's filter\n\t */\n\tsetSpanRotation: function (rotation, sintheta, costheta) {\n\t\t// Adjust for alignment and rotation. Rotation of useHTML content is not yet implemented\n\t\t// but it can probably be implemented for Firefox 3.5+ on user request. FF3.5+\n\t\t// has support for CSS3 transform. The getBBox method also needs to be updated\n\t\t// to compensate for the rotation, like it currently does for SVG.\n\t\t// Test case: http://highcharts.com/tests/?file=text-rotation\n\t\tcss(this.element, {\n\t\t\tfilter: rotation ? ['progid:DXImageTransform.Microsoft.Matrix(M11=', costheta,\n\t\t\t\t', M12=', -sintheta, ', M21=', sintheta, ', M22=', costheta,\n\t\t\t\t', sizingMethod=\\'auto expand\\')'].join('') : NONE\n\t\t});\n\t},\n\n\t/**\n\t * Converts a subset of an SVG path definition to its VML counterpart. Takes an array\n\t * as the parameter and returns a string.\n\t */\n\tpathToVML: function (value) {\n\t\t// convert paths\n\t\tvar i = value.length,\n\t\t\tpath = [],\n\t\t\tclockwise;\n\n\t\twhile (i--) {\n\n\t\t\t// Multiply by 10 to allow subpixel precision.\n\t\t\t// Substracting half a pixel seems to make the coordinates\n\t\t\t// align with SVG, but this hasn't been tested thoroughly\n\t\t\tif (isNumber(value[i])) {\n\t\t\t\tpath[i] = mathRound(value[i] * 10) - 5;\n\t\t\t} else if (value[i] === 'Z') { // close the path\n\t\t\t\tpath[i] = 'x';\n\t\t\t} else {\n\t\t\t\tpath[i] = value[i];\n\n\t\t\t\t// When the start X and end X coordinates of an arc are too close,\n\t\t\t\t// they are rounded to the same value above. In this case, substract 1 from the end X\n\t\t\t\t// position. #760, #1371.\n\t\t\t\tif (value.isArc && (value[i] === 'wa' || value[i] === 'at')) {\n\t\t\t\t\tclockwise = value[i] === 'wa' ? 1 : -1; // #1642\n\t\t\t\t\tif (path[i + 5] === path[i + 7]) {\n\t\t\t\t\t\tpath[i + 7] -= clockwise;\n\t\t\t\t\t}\n\t\t\t\t\t// Start and end Y (#1410)\n\t\t\t\t\tif (path[i + 6] === path[i + 8]) {\n\t\t\t\t\t\tpath[i + 8] -= clockwise;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Loop up again to handle path shortcuts (#2132)\n\t\t/*while (i++ < path.length) {\n\t\t\tif (path[i] === 'H') { // horizontal line to\n\t\t\t\tpath[i] = 'L';\n\t\t\t\tpath.splice(i + 2, 0, path[i - 1]);\n\t\t\t} else if (path[i] === 'V') { // vertical line to\n\t\t\t\tpath[i] = 'L';\n\t\t\t\tpath.splice(i + 1, 0, path[i - 2]);\n\t\t\t}\n\t\t}*/\n\t\treturn path.join(' ') || 'x';\n\t},\n\n\t/**\n\t * Get or set attributes\n\t */\n\tattr: function (hash, val) {\n\t\tvar wrapper = this,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\ti,\n\t\t\tresult,\n\t\t\telement = wrapper.element || {},\n\t\t\telemStyle = element.style,\n\t\t\tnodeName = element.nodeName,\n\t\t\trenderer = wrapper.renderer,\n\t\t\tsymbolName = wrapper.symbolName,\n\t\t\thasSetSymbolSize,\n\t\t\tshadows = wrapper.shadows,\n\t\t\tskipAttr,\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\tret = wrapper;\n\n\t\t// single key-value pair\n\t\tif (isString(hash) && defined(val)) {\n\t\t\tkey = hash;\n\t\t\thash = {};\n\t\t\thash[key] = val;\n\t\t}\n\n\t\t// used as a getter, val is undefined\n\t\tif (isString(hash)) {\n\t\t\tkey = hash;\n\t\t\tif (key === 'strokeWidth' || key === 'stroke-width') {\n\t\t\t\tret = wrapper.strokeweight;\n\t\t\t} else {\n\t\t\t\tret = wrapper[key];\n\t\t\t}\n\n\t\t// setter\n\t\t} else {\n\t\t\tfor (key in hash) {\n\t\t\t\tvalue = hash[key];\n\t\t\t\tskipAttr = false;\n\n\t\t\t\t// check for a specific attribute setter\n\t\t\t\tresult = attrSetters[key] && attrSetters[key].call(wrapper, value, key);\n\n\t\t\t\tif (result !== false && value !== null) { // #620\n\n\t\t\t\t\tif (result !== UNDEFINED) {\n\t\t\t\t\t\tvalue = result; // the attribute setter has returned a new value to set\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// prepare paths\n\t\t\t\t\t// symbols\n\t\t\t\t\tif (symbolName && /^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(key)) {\n\t\t\t\t\t\t// if one of the symbol size affecting parameters are changed,\n\t\t\t\t\t\t// check all the others only once for each call to an element's\n\t\t\t\t\t\t// .attr() method\n\t\t\t\t\t\tif (!hasSetSymbolSize) {\n\t\t\t\t\t\t\twrapper.symbolAttr(hash);\n\n\t\t\t\t\t\t\thasSetSymbolSize = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t} else if (key === 'd') {\n\t\t\t\t\t\tvalue = value || [];\n\t\t\t\t\t\twrapper.d = value.join(' '); // used in getter for animation\n\n\t\t\t\t\t\telement.path = value = wrapper.pathToVML(value);\n\n\t\t\t\t\t\t// update shadows\n\t\t\t\t\t\tif (shadows) {\n\t\t\t\t\t\t\ti = shadows.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tshadows[i].path = shadows[i].cutOff ? this.cutOffPath(value, shadows[i].cutOff) : value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// handle visibility\n\t\t\t\t\t} else if (key === 'visibility') {\n\n\t\t\t\t\t\t// let the shadow follow the main element\n\t\t\t\t\t\tif (shadows) {\n\t\t\t\t\t\t\ti = shadows.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tshadows[i].style[key] = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Instead of toggling the visibility CSS property, move the div out of the viewport.\n\t\t\t\t\t\t// This works around #61 and #586\n\t\t\t\t\t\tif (nodeName === 'DIV') {\n\t\t\t\t\t\t\tvalue = value === HIDDEN ? '-999em' : 0;\n\n\t\t\t\t\t\t\t// In order to redraw, IE7 needs the div to be visible when tucked away\n\t\t\t\t\t\t\t// outside the viewport. So the visibility is actually opposite of\n\t\t\t\t\t\t\t// the expected value. This applies to the tooltip only.\n\t\t\t\t\t\t\tif (!docMode8) {\n\t\t\t\t\t\t\t\telemStyle[key] = value ? VISIBLE : HIDDEN;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tkey = 'top';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telemStyle[key] = value;\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// directly mapped to css\n\t\t\t\t\t} else if (key === 'zIndex') {\n\n\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\telemStyle[key] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// x, y, width, height\n\t\t\t\t\t} else if (inArray(key, ['x', 'y', 'width', 'height']) !== -1) {\n\n\t\t\t\t\t\twrapper[key] = value; // used in getter\n\n\t\t\t\t\t\tif (key === 'x' || key === 'y') {\n\t\t\t\t\t\t\tkey = { x: 'left', y: 'top' }[key];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvalue = mathMax(0, value); // don't set width or height below zero (#311)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// clipping rectangle special\n\t\t\t\t\t\tif (wrapper.updateClipping) {\n\t\t\t\t\t\t\twrapper[key] = value; // the key is now 'left' or 'top' for 'x' and 'y'\n\t\t\t\t\t\t\twrapper.updateClipping();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// normal\n\t\t\t\t\t\t\telemStyle[key] = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// class name\n\t\t\t\t\t} else if (key === 'class' && nodeName === 'DIV') {\n\t\t\t\t\t\t// IE8 Standards mode has problems retrieving the className\n\t\t\t\t\t\telement.className = value;\n\n\t\t\t\t\t// stroke\n\t\t\t\t\t} else if (key === 'stroke') {\n\n\t\t\t\t\t\tvalue = renderer.color(value, element, key);\n\n\t\t\t\t\t\tkey = 'strokecolor';\n\n\t\t\t\t\t// stroke width\n\t\t\t\t\t} else if (key === 'stroke-width' || key === 'strokeWidth') {\n\t\t\t\t\t\telement.stroked = value ? true : false;\n\t\t\t\t\t\tkey = 'strokeweight';\n\t\t\t\t\t\twrapper[key] = value; // used in getter, issue #113\n\t\t\t\t\t\tif (isNumber(value)) {\n\t\t\t\t\t\t\tvalue += PX;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// dashStyle\n\t\t\t\t\t} else if (key === 'dashstyle') {\n\t\t\t\t\t\tvar strokeElem = element.getElementsByTagName('stroke')[0] ||\n\t\t\t\t\t\t\tcreateElement(renderer.prepVML(['<stroke/>']), null, null, element);\n\t\t\t\t\t\tstrokeElem[key] = value || 'solid';\n\t\t\t\t\t\twrapper.dashstyle = value; /* because changing stroke-width will change the dash length\n\t\t\t\t\t\t\tand cause an epileptic effect */\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// fill\n\t\t\t\t\t} else if (key === 'fill') {\n\n\t\t\t\t\t\tif (nodeName === 'SPAN') { // text color\n\t\t\t\t\t\t\telemStyle.color = value;\n\t\t\t\t\t\t} else if (nodeName !== 'IMG') { // #1336\n\t\t\t\t\t\t\telement.filled = value !== NONE ? true : false;\n\n\t\t\t\t\t\t\tvalue = renderer.color(value, element, key, wrapper);\n\n\t\t\t\t\t\t\tkey = 'fillcolor';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// opacity: don't bother - animation is too slow and filters introduce artifacts\n\t\t\t\t\t} else if (key === 'opacity') {\n\t\t\t\t\t\t/*css(element, {\n\t\t\t\t\t\t\topacity: value\n\t\t\t\t\t\t});*/\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// rotation on VML elements\n\t\t\t\t\t} else if (nodeName === 'shape' && key === 'rotation') {\n\n\t\t\t\t\t\twrapper[key] = element.style[key] = value; // style is for #1873\n\n\t\t\t\t\t\t// Correction for the 1x1 size of the shape container. Used in gauge needles.\n\t\t\t\t\t\telement.style.left = -mathRound(mathSin(value * deg2rad) + 1) + PX;\n\t\t\t\t\t\telement.style.top = mathRound(mathCos(value * deg2rad)) + PX;\n\n\t\t\t\t\t// translation for animation\n\t\t\t\t\t} else if (key === 'translateX' || key === 'translateY' || key === 'rotation') {\n\t\t\t\t\t\twrapper[key] = value;\n\t\t\t\t\t\twrapper.updateTransform();\n\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// text for rotated and non-rotated elements\n\t\t\t\t\t} else if (key === 'text') {\n\t\t\t\t\t\tthis.bBox = null;\n\t\t\t\t\t\telement.innerHTML = value;\n\t\t\t\t\t\tskipAttr = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif (!skipAttr) {\n\t\t\t\t\t\tif (docMode8) { // IE8 setAttribute bug\n\t\t\t\t\t\t\telement[key] = value;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattr(element, key, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Set the element's clipping to a predefined rectangle\n\t *\n\t * @param {String} id The id of the clip rectangle\n\t */\n\tclip: function (clipRect) {\n\t\tvar wrapper = this,\n\t\t\tclipMembers,\n\t\t\tcssRet;\n\n\t\tif (clipRect) {\n\t\t\tclipMembers = clipRect.members;\n\t\t\terase(clipMembers, wrapper); // Ensure unique list of elements (#1258)\n\t\t\tclipMembers.push(wrapper);\n\t\t\twrapper.destroyClip = function () {\n\t\t\t\terase(clipMembers, wrapper);\n\t\t\t};\n\t\t\tcssRet = clipRect.getCSS(wrapper);\n\n\t\t} else {\n\t\t\tif (wrapper.destroyClip) {\n\t\t\t\twrapper.destroyClip();\n\t\t\t}\n\t\t\tcssRet = { clip: docMode8 ? 'inherit' : 'rect(auto)' }; // #1214\n\t\t}\n\n\t\treturn wrapper.css(cssRet);\n\n\t},\n\n\t/**\n\t * Set styles for the element\n\t * @param {Object} styles\n\t */\n\tcss: SVGElement.prototype.htmlCss,\n\n\t/**\n\t * Removes a child either by removeChild or move to garbageBin.\n\t * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not.\n\t */\n\tsafeRemoveChild: function (element) {\n\t\t// discardElement will detach the node from its parent before attaching it\n\t\t// to the garbage bin. Therefore it is important that the node is attached and have parent.\n\t\tif (element.parentNode) {\n\t\t\tdiscardElement(element);\n\t\t}\n\t},\n\n\t/**\n\t * Extend element.destroy by removing it from the clip members array\n\t */\n\tdestroy: function () {\n\t\tif (this.destroyClip) {\n\t\t\tthis.destroyClip();\n\t\t}\n\n\t\treturn SVGElement.prototype.destroy.apply(this);\n\t},\n\n\t/**\n\t * Add an event listener. VML override for normalizing event parameters.\n\t * @param {String} eventType\n\t * @param {Function} handler\n\t */\n\ton: function (eventType, handler) {\n\t\t// simplest possible event model for internal use\n\t\tthis.element['on' + eventType] = function () {\n\t\t\tvar evt = win.event;\n\t\t\tevt.target = evt.srcElement;\n\t\t\thandler(evt);\n\t\t};\n\t\treturn this;\n\t},\n\n\t/**\n\t * In stacked columns, cut off the shadows so that they don't overlap\n\t */\n\tcutOffPath: function (path, length) {\n\n\t\tvar len;\n\n\t\tpath = path.split(/[ ,]/);\n\t\tlen = path.length;\n\n\t\tif (len === 9 || len === 11) {\n\t\t\tpath[len - 4] = path[len - 2] = pInt(path[len - 2]) - 10 * length;\n\t\t}\n\t\treturn path.join(' ');\n\t},\n\n\t/**\n\t * Apply a drop shadow by copying elements and giving them different strokes\n\t * @param {Boolean|Object} shadowOptions\n\t */\n\tshadow: function (shadowOptions, group, cutOff) {\n\t\tvar shadows = [],\n\t\t\ti,\n\t\t\telement = this.element,\n\t\t\trenderer = this.renderer,\n\t\t\tshadow,\n\t\t\telemStyle = element.style,\n\t\t\tmarkup,\n\t\t\tpath = element.path,\n\t\t\tstrokeWidth,\n\t\t\tmodifiedPath,\n\t\t\tshadowWidth,\n\t\t\tshadowElementOpacity;\n\n\t\t// some times empty paths are not strings\n\t\tif (path && typeof path.value !== 'string') {\n\t\t\tpath = 'x';\n\t\t}\n\t\tmodifiedPath = path;\n\n\t\tif (shadowOptions) {\n\t\t\tshadowWidth = pick(shadowOptions.width, 3);\n\t\t\tshadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth;\n\t\t\tfor (i = 1; i <= 3; i++) {\n\n\t\t\t\tstrokeWidth = (shadowWidth * 2) + 1 - (2 * i);\n\n\t\t\t\t// Cut off shadows for stacked column items\n\t\t\t\tif (cutOff) {\n\t\t\t\t\tmodifiedPath = this.cutOffPath(path.value, strokeWidth + 0.5);\n\t\t\t\t}\n\n\t\t\t\tmarkup = ['<shape isShadow=\"true\" strokeweight=\"', strokeWidth,\n\t\t\t\t\t'\" filled=\"false\" path=\"', modifiedPath,\n\t\t\t\t\t'\" coordsize=\"10 10\" style=\"', element.style.cssText, '\" />'];\n\n\t\t\t\tshadow = createElement(renderer.prepVML(markup),\n\t\t\t\t\tnull, {\n\t\t\t\t\t\tleft: pInt(elemStyle.left) + pick(shadowOptions.offsetX, 1),\n\t\t\t\t\t\ttop: pInt(elemStyle.top) + pick(shadowOptions.offsetY, 1)\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (cutOff) {\n\t\t\t\t\tshadow.cutOff = strokeWidth + 1;\n\t\t\t\t}\n\n\t\t\t\t// apply the opacity\n\t\t\t\tmarkup = ['<stroke color=\"', shadowOptions.color || 'black', '\" opacity=\"', shadowElementOpacity * i, '\"/>'];\n\t\t\t\tcreateElement(renderer.prepVML(markup), null, null, shadow);\n\n\n\t\t\t\t// insert it\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.element.appendChild(shadow);\n\t\t\t\t} else {\n\t\t\t\t\telement.parentNode.insertBefore(shadow, element);\n\t\t\t\t}\n\n\t\t\t\t// record it\n\t\t\t\tshadows.push(shadow);\n\n\t\t\t}\n\n\t\t\tthis.shadows = shadows;\n\t\t}\n\t\treturn this;\n\n\t}\n};\nVMLElement = extendClass(SVGElement, VMLElement);\n\n/**\n * The VML renderer\n */\nvar VMLRendererExtension = { // inherit SVGRenderer\n\n\tElement: VMLElement,\n\tisIE8: userAgent.indexOf('MSIE 8.0') > -1,\n\n\n\t/**\n\t * Initialize the VMLRenderer\n\t * @param {Object} container\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tinit: function (container, width, height) {\n\t\tvar renderer = this,\n\t\t\tboxWrapper,\n\t\t\tbox;\n\n\t\trenderer.alignedObjects = [];\n\n\t\tboxWrapper = renderer.createElement(DIV);\n\t\tbox = boxWrapper.element;\n\t\tbox.style.position = RELATIVE; // for freeform drawing using renderer directly\n\t\tcontainer.appendChild(boxWrapper.element);\n\n\n\t\t// generate the containing box\n\t\trenderer.isVML = true;\n\t\trenderer.box = box;\n\t\trenderer.boxWrapper = boxWrapper;\n\n\n\t\trenderer.setSize(width, height, false);\n\n\t\t// The only way to make IE6 and IE7 print is to use a global namespace. However,\n\t\t// with IE8 the only way to make the dynamic shapes visible in screen and print mode\n\t\t// seems to be to add the xmlns attribute and the behaviour style inline.\n\t\tif (!doc.namespaces.hcv) {\n\n\t\t\tdoc.namespaces.add('hcv', 'urn:schemas-microsoft-com:vml');\n\n\t\t\t// Setup default CSS (#2153)\n\t\t\t(doc.styleSheets.length ? doc.styleSheets[0] : doc.createStyleSheet()).cssText +=\n\t\t\t\t'hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke' +\n\t\t\t\t'{ behavior:url(#default#VML); display: inline-block; } ';\n\n\t\t}\n\t},\n\n\n\t/**\n\t * Detect whether the renderer is hidden. This happens when one of the parent elements\n\t * has display: none\n\t */\n\tisHidden: function () {\n\t\treturn !this.box.offsetWidth;\n\t},\n\n\t/**\n\t * Define a clipping rectangle. In VML it is accomplished by storing the values\n\t * for setting the CSS style to all associated members.\n\t *\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tclipRect: function (x, y, width, height) {\n\n\t\t// create a dummy element\n\t\tvar clipRect = this.createElement(),\n\t\t\tisObj = isObject(x);\n\n\t\t// mimic a rectangle with its style object for automatic updating in attr\n\t\treturn extend(clipRect, {\n\t\t\tmembers: [],\n\t\t\tleft: (isObj ? x.x : x) + 1,\n\t\t\ttop: (isObj ? x.y : y) + 1,\n\t\t\twidth: (isObj ? x.width : width) - 1,\n\t\t\theight: (isObj ? x.height : height) - 1,\n\t\t\tgetCSS: function (wrapper) {\n\t\t\t\tvar element = wrapper.element,\n\t\t\t\t\tnodeName = element.nodeName,\n\t\t\t\t\tisShape = nodeName === 'shape',\n\t\t\t\t\tinverted = wrapper.inverted,\n\t\t\t\t\trect = this,\n\t\t\t\t\ttop = rect.top - (isShape ? element.offsetTop : 0),\n\t\t\t\t\tleft = rect.left,\n\t\t\t\t\tright = left + rect.width,\n\t\t\t\t\tbottom = top + rect.height,\n\t\t\t\t\tret = {\n\t\t\t\t\t\tclip: 'rect(' +\n\t\t\t\t\t\t\tmathRound(inverted ? left : top) + 'px,' +\n\t\t\t\t\t\t\tmathRound(inverted ? bottom : right) + 'px,' +\n\t\t\t\t\t\t\tmathRound(inverted ? right : bottom) + 'px,' +\n\t\t\t\t\t\t\tmathRound(inverted ? top : left) + 'px)'\n\t\t\t\t\t};\n\n\t\t\t\t// issue 74 workaround\n\t\t\t\tif (!inverted && docMode8 && nodeName === 'DIV') {\n\t\t\t\t\textend(ret, {\n\t\t\t\t\t\twidth: right + PX,\n\t\t\t\t\t\theight: bottom + PX\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// used in attr and animation to update the clipping of all members\n\t\t\tupdateClipping: function () {\n\t\t\t\teach(clipRect.members, function (member) {\n\t\t\t\t\tmember.css(clipRect.getCSS(member));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t},\n\n\n\t/**\n\t * Take a color and return it if it's a string, make it a gradient if it's a\n\t * gradient configuration object, and apply opacity.\n\t *\n\t * @param {Object} color The color or config object\n\t */\n\tcolor: function (color, elem, prop, wrapper) {\n\t\tvar renderer = this,\n\t\t\tcolorObject,\n\t\t\tregexRgba = /^rgba/,\n\t\t\tmarkup,\n\t\t\tfillType,\n\t\t\tret = NONE;\n\n\t\t// Check for linear or radial gradient\n\t\tif (color && color.linearGradient) {\n\t\t\tfillType = 'gradient';\n\t\t} else if (color && color.radialGradient) {\n\t\t\tfillType = 'pattern';\n\t\t}\n\n\n\t\tif (fillType) {\n\n\t\t\tvar stopColor,\n\t\t\t\tstopOpacity,\n\t\t\t\tgradient = color.linearGradient || color.radialGradient,\n\t\t\t\tx1,\n\t\t\t\ty1,\n\t\t\t\tx2,\n\t\t\t\ty2,\n\t\t\t\topacity1,\n\t\t\t\topacity2,\n\t\t\t\tcolor1,\n\t\t\t\tcolor2,\n\t\t\t\tfillAttr = '',\n\t\t\t\tstops = color.stops,\n\t\t\t\tfirstStop,\n\t\t\t\tlastStop,\n\t\t\t\tcolors = [],\n\t\t\t\taddFillNode = function () {\n\t\t\t\t\t// Add the fill subnode. When colors attribute is used, the meanings of opacity and o:opacity2\n\t\t\t\t\t// are reversed.\n\t\t\t\t\tmarkup = ['<fill colors=\"' + colors.join(',') + '\" opacity=\"', opacity2, '\" o:opacity2=\"', opacity1,\n\t\t\t\t\t\t'\" type=\"', fillType, '\" ', fillAttr, 'focus=\"100%\" method=\"any\" />'];\n\t\t\t\t\tcreateElement(renderer.prepVML(markup), null, null, elem);\n\t\t\t\t};\n\n\t\t\t// Extend from 0 to 1\n\t\t\tfirstStop = stops[0];\n\t\t\tlastStop = stops[stops.length - 1];\n\t\t\tif (firstStop[0] > 0) {\n\t\t\t\tstops.unshift([\n\t\t\t\t\t0,\n\t\t\t\t\tfirstStop[1]\n\t\t\t\t]);\n\t\t\t}\n\t\t\tif (lastStop[0] < 1) {\n\t\t\t\tstops.push([\n\t\t\t\t\t1,\n\t\t\t\t\tlastStop[1]\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\t// Compute the stops\n\t\t\teach(stops, function (stop, i) {\n\t\t\t\tif (regexRgba.test(stop[1])) {\n\t\t\t\t\tcolorObject = Color(stop[1]);\n\t\t\t\t\tstopColor = colorObject.get('rgb');\n\t\t\t\t\tstopOpacity = colorObject.get('a');\n\t\t\t\t} else {\n\t\t\t\t\tstopColor = stop[1];\n\t\t\t\t\tstopOpacity = 1;\n\t\t\t\t}\n\n\t\t\t\t// Build the color attribute\n\t\t\t\tcolors.push((stop[0] * 100) + '% ' + stopColor);\n\n\t\t\t\t// Only start and end opacities are allowed, so we use the first and the last\n\t\t\t\tif (!i) {\n\t\t\t\t\topacity1 = stopOpacity;\n\t\t\t\t\tcolor2 = stopColor;\n\t\t\t\t} else {\n\t\t\t\t\topacity2 = stopOpacity;\n\t\t\t\t\tcolor1 = stopColor;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Apply the gradient to fills only.\n\t\t\tif (prop === 'fill') {\n\n\t\t\t\t// Handle linear gradient angle\n\t\t\t\tif (fillType === 'gradient') {\n\t\t\t\t\tx1 = gradient.x1 || gradient[0] || 0;\n\t\t\t\t\ty1 = gradient.y1 || gradient[1] || 0;\n\t\t\t\t\tx2 = gradient.x2 || gradient[2] || 0;\n\t\t\t\t\ty2 = gradient.y2 || gradient[3] || 0;\n\t\t\t\t\tfillAttr = 'angle=\"' + (90  - math.atan(\n\t\t\t\t\t\t(y2 - y1) / // y vector\n\t\t\t\t\t\t(x2 - x1) // x vector\n\t\t\t\t\t\t) * 180 / mathPI) + '\"';\n\n\t\t\t\t\taddFillNode();\n\n\t\t\t\t// Radial (circular) gradient\n\t\t\t\t} else {\n\n\t\t\t\t\tvar r = gradient.r,\n\t\t\t\t\t\tsizex = r * 2,\n\t\t\t\t\t\tsizey = r * 2,\n\t\t\t\t\t\tcx = gradient.cx,\n\t\t\t\t\t\tcy = gradient.cy,\n\t\t\t\t\t\tradialReference = elem.radialReference,\n\t\t\t\t\t\tbBox,\n\t\t\t\t\t\tapplyRadialGradient = function () {\n\t\t\t\t\t\t\tif (radialReference) {\n\t\t\t\t\t\t\t\tbBox = wrapper.getBBox();\n\t\t\t\t\t\t\t\tcx += (radialReference[0] - bBox.x) / bBox.width - 0.5;\n\t\t\t\t\t\t\t\tcy += (radialReference[1] - bBox.y) / bBox.height - 0.5;\n\t\t\t\t\t\t\t\tsizex *= radialReference[2] / bBox.width;\n\t\t\t\t\t\t\t\tsizey *= radialReference[2] / bBox.height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfillAttr = 'src=\"' + defaultOptions.global.VMLRadialGradientURL + '\" ' +\n\t\t\t\t\t\t\t\t'size=\"' + sizex + ',' + sizey + '\" ' +\n\t\t\t\t\t\t\t\t'origin=\"0.5,0.5\" ' +\n\t\t\t\t\t\t\t\t'position=\"' + cx + ',' + cy + '\" ' +\n\t\t\t\t\t\t\t\t'color2=\"' + color2 + '\" ';\n\n\t\t\t\t\t\t\taddFillNode();\n\t\t\t\t\t\t};\n\n\t\t\t\t\t// Apply radial gradient\n\t\t\t\t\tif (wrapper.added) {\n\t\t\t\t\t\tapplyRadialGradient();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// We need to know the bounding box to get the size and position right\n\t\t\t\t\t\taddEvent(wrapper, 'add', applyRadialGradient);\n\t\t\t\t\t}\n\n\t\t\t\t\t// The fill element's color attribute is broken in IE8 standards mode, so we\n\t\t\t\t\t// need to set the parent shape's fillcolor attribute instead.\n\t\t\t\t\tret = color1;\n\t\t\t\t}\n\n\t\t\t// Gradients are not supported for VML stroke, return the first color. #722.\n\t\t\t} else {\n\t\t\t\tret = stopColor;\n\t\t\t}\n\n\t\t// if the color is an rgba color, split it and add a fill node\n\t\t// to hold the opacity component\n\t\t} else if (regexRgba.test(color) && elem.tagName !== 'IMG') {\n\n\t\t\tcolorObject = Color(color);\n\n\t\t\tmarkup = ['<', prop, ' opacity=\"', colorObject.get('a'), '\"/>'];\n\t\t\tcreateElement(this.prepVML(markup), null, null, elem);\n\n\t\t\tret = colorObject.get('rgb');\n\n\n\t\t} else {\n\t\t\tvar propNodes = elem.getElementsByTagName(prop); // 'stroke' or 'fill' node\n\t\t\tif (propNodes.length) {\n\t\t\t\tpropNodes[0].opacity = 1;\n\t\t\t\tpropNodes[0].type = 'solid';\n\t\t\t}\n\t\t\tret = color;\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Take a VML string and prepare it for either IE8 or IE6/IE7.\n\t * @param {Array} markup A string array of the VML markup to prepare\n\t */\n\tprepVML: function (markup) {\n\t\tvar vmlStyle = 'display:inline-block;behavior:url(#default#VML);',\n\t\t\tisIE8 = this.isIE8;\n\n\t\tmarkup = markup.join('');\n\n\t\tif (isIE8) { // add xmlns and style inline\n\t\t\tmarkup = markup.replace('/>', ' xmlns=\"urn:schemas-microsoft-com:vml\" />');\n\t\t\tif (markup.indexOf('style=\"') === -1) {\n\t\t\t\tmarkup = markup.replace('/>', ' style=\"' + vmlStyle + '\" />');\n\t\t\t} else {\n\t\t\t\tmarkup = markup.replace('style=\"', 'style=\"' + vmlStyle);\n\t\t\t}\n\n\t\t} else { // add namespace\n\t\t\tmarkup = markup.replace('<', '<hcv:');\n\t\t}\n\n\t\treturn markup;\n\t},\n\n\t/**\n\t * Create rotated and aligned text\n\t * @param {String} str\n\t * @param {Number} x\n\t * @param {Number} y\n\t */\n\ttext: SVGRenderer.prototype.html,\n\n\t/**\n\t * Create and return a path element\n\t * @param {Array} path\n\t */\n\tpath: function (path) {\n\t\tvar attr = {\n\t\t\t// subpixel precision down to 0.1 (width and height = 1px)\n\t\t\tcoordsize: '10 10'\n\t\t};\n\t\tif (isArray(path)) {\n\t\t\tattr.d = path;\n\t\t} else if (isObject(path)) { // attributes\n\t\t\textend(attr, path);\n\t\t}\n\t\t// create the shape\n\t\treturn this.createElement('shape').attr(attr);\n\t},\n\n\t/**\n\t * Create and return a circle element. In VML circles are implemented as\n\t * shapes, which is faster than v:oval\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} r\n\t */\n\tcircle: function (x, y, r) {\n\t\tvar circle = this.symbol('circle');\n\t\tif (isObject(x)) {\n\t\t\tr = x.r;\n\t\t\ty = x.y;\n\t\t\tx = x.x;\n\t\t}\n\t\tcircle.isCircle = true; // Causes x and y to mean center (#1682)\n\t\tcircle.r = r;\n\t\treturn circle.attr({ x: x, y: y });\n\t},\n\n\t/**\n\t * Create a group using an outer div and an inner v:group to allow rotating\n\t * and flipping. A simple v:group would have problems with positioning\n\t * child HTML elements and CSS clip.\n\t *\n\t * @param {String} name The name of the group\n\t */\n\tg: function (name) {\n\t\tvar wrapper,\n\t\t\tattribs;\n\n\t\t// set the class name\n\t\tif (name) {\n\t\t\tattribs = { 'className': PREFIX + name, 'class': PREFIX + name };\n\t\t}\n\n\t\t// the div to hold HTML and clipping\n\t\twrapper = this.createElement(DIV).attr(attribs);\n\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * VML override to create a regular HTML image\n\t * @param {String} src\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\timage: function (src, x, y, width, height) {\n\t\tvar obj = this.createElement('img')\n\t\t\t.attr({ src: src });\n\n\t\tif (arguments.length > 1) {\n\t\t\tobj.attr({\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t});\n\t\t}\n\t\treturn obj;\n\t},\n\n\t/**\n\t * VML uses a shape for rect to overcome bugs and rotation problems\n\t */\n\trect: function (x, y, width, height, r, strokeWidth) {\n\n\t\tvar wrapper = this.symbol('rect');\n\t\twrapper.r = isObject(x) ? x.r : r;\n\n\t\t//return wrapper.attr(wrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0)));\n\t\treturn wrapper.attr(\n\t\t\t\tisObject(x) ?\n\t\t\t\t\tx :\n\t\t\t\t\t// do not crispify when an object is passed in (as in column charts)\n\t\t\t\t\twrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0))\n\t\t\t);\n\t},\n\n\t/**\n\t * In the VML renderer, each child of an inverted div (group) is inverted\n\t * @param {Object} element\n\t * @param {Object} parentNode\n\t */\n\tinvertChild: function (element, parentNode) {\n\t\tvar parentStyle = parentNode.style;\n\t\tcss(element, {\n\t\t\tflip: 'x',\n\t\t\tleft: pInt(parentStyle.width) - 1,\n\t\t\ttop: pInt(parentStyle.height) - 1,\n\t\t\trotation: -90\n\t\t});\n\t},\n\n\t/**\n\t * Symbol definitions that override the parent SVG renderer's symbols\n\t *\n\t */\n\tsymbols: {\n\t\t// VML specific arc function\n\t\tarc: function (x, y, w, h, options) {\n\t\t\tvar start = options.start,\n\t\t\t\tend = options.end,\n\t\t\t\tradius = options.r || w || h,\n\t\t\t\tinnerRadius = options.innerR,\n\t\t\t\tcosStart = mathCos(start),\n\t\t\t\tsinStart = mathSin(start),\n\t\t\t\tcosEnd = mathCos(end),\n\t\t\t\tsinEnd = mathSin(end),\n\t\t\t\tret;\n\n\t\t\tif (end - start === 0) { // no angle, don't show it.\n\t\t\t\treturn ['x'];\n\t\t\t}\n\n\t\t\tret = [\n\t\t\t\t'wa', // clockwise arc to\n\t\t\t\tx - radius, // left\n\t\t\t\ty - radius, // top\n\t\t\t\tx + radius, // right\n\t\t\t\ty + radius, // bottom\n\t\t\t\tx + radius * cosStart, // start x\n\t\t\t\ty + radius * sinStart, // start y\n\t\t\t\tx + radius * cosEnd, // end x\n\t\t\t\ty + radius * sinEnd  // end y\n\t\t\t];\n\n\t\t\tif (options.open && !innerRadius) {\n\t\t\t\tret.push(\n\t\t\t\t\t'e',\n\t\t\t\t\tM,\n\t\t\t\t\tx,// - innerRadius,\n\t\t\t\t\ty// - innerRadius\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.push(\n\t\t\t\t'at', // anti clockwise arc to\n\t\t\t\tx - innerRadius, // left\n\t\t\t\ty - innerRadius, // top\n\t\t\t\tx + innerRadius, // right\n\t\t\t\ty + innerRadius, // bottom\n\t\t\t\tx + innerRadius * cosEnd, // start x\n\t\t\t\ty + innerRadius * sinEnd, // start y\n\t\t\t\tx + innerRadius * cosStart, // end x\n\t\t\t\ty + innerRadius * sinStart, // end y\n\t\t\t\t'x', // finish path\n\t\t\t\t'e' // close\n\t\t\t);\n\n\t\t\tret.isArc = true;\n\t\t\treturn ret;\n\n\t\t},\n\t\t// Add circle symbol path. This performs significantly faster than v:oval.\n\t\tcircle: function (x, y, w, h, wrapper) {\n\n\t\t\tif (wrapper) {\n\t\t\t\tw = h = 2 * wrapper.r;\n\t\t\t}\n\n\t\t\t// Center correction, #1682\n\t\t\tif (wrapper && wrapper.isCircle) {\n\t\t\t\tx -= w / 2;\n\t\t\t\ty -= h / 2;\n\t\t\t}\n\n\t\t\t// Return the path\n\t\t\treturn [\n\t\t\t\t'wa', // clockwisearcto\n\t\t\t\tx, // left\n\t\t\t\ty, // top\n\t\t\t\tx + w, // right\n\t\t\t\ty + h, // bottom\n\t\t\t\tx + w, // start x\n\t\t\t\ty + h / 2,     // start y\n\t\t\t\tx + w, // end x\n\t\t\t\ty + h / 2,     // end y\n\t\t\t\t//'x', // finish path\n\t\t\t\t'e' // close\n\t\t\t];\n\t\t},\n\t\t/**\n\t\t * Add rectangle symbol path which eases rotation and omits arcsize problems\n\t\t * compared to the built-in VML roundrect shape\n\t\t *\n\t\t * @param {Number} left Left position\n\t\t * @param {Number} top Top position\n\t\t * @param {Number} r Border radius\n\t\t * @param {Object} options Width and height\n\t\t */\n\n\t\trect: function (left, top, width, height, options) {\n\n\t\t\tvar right = left + width,\n\t\t\t\tbottom = top + height,\n\t\t\t\tret,\n\t\t\t\tr;\n\n\t\t\t// No radius, return the more lightweight square\n\t\t\tif (!defined(options) || !options.r) {\n\t\t\t\tret = SVGRenderer.prototype.symbols.square.apply(0, arguments);\n\n\t\t\t// Has radius add arcs for the corners\n\t\t\t} else {\n\n\t\t\t\tr = mathMin(options.r, width, height);\n\t\t\t\tret = [\n\t\t\t\t\tM,\n\t\t\t\t\tleft + r, top,\n\n\t\t\t\t\tL,\n\t\t\t\t\tright - r, top,\n\t\t\t\t\t'wa',\n\t\t\t\t\tright - 2 * r, top,\n\t\t\t\t\tright, top + 2 * r,\n\t\t\t\t\tright - r, top,\n\t\t\t\t\tright, top + r,\n\n\t\t\t\t\tL,\n\t\t\t\t\tright, bottom - r,\n\t\t\t\t\t'wa',\n\t\t\t\t\tright - 2 * r, bottom - 2 * r,\n\t\t\t\t\tright, bottom,\n\t\t\t\t\tright, bottom - r,\n\t\t\t\t\tright - r, bottom,\n\n\t\t\t\t\tL,\n\t\t\t\t\tleft + r, bottom,\n\t\t\t\t\t'wa',\n\t\t\t\t\tleft, bottom - 2 * r,\n\t\t\t\t\tleft + 2 * r, bottom,\n\t\t\t\t\tleft + r, bottom,\n\t\t\t\t\tleft, bottom - r,\n\n\t\t\t\t\tL,\n\t\t\t\t\tleft, top + r,\n\t\t\t\t\t'wa',\n\t\t\t\t\tleft, top,\n\t\t\t\t\tleft + 2 * r, top + 2 * r,\n\t\t\t\t\tleft, top + r,\n\t\t\t\t\tleft + r, top,\n\n\n\t\t\t\t\t'x',\n\t\t\t\t\t'e'\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t}\n};\nHighcharts.VMLRenderer = VMLRenderer = function () {\n\tthis.init.apply(this, arguments);\n};\nVMLRenderer.prototype = merge(SVGRenderer.prototype, VMLRendererExtension);\n\n\t// general renderer\n\tRenderer = VMLRenderer;\n}\n\n/* ****************************************************************************\n *                                                                            *\n * END OF INTERNET EXPLORER <= 8 SPECIFIC CODE                                *\n *                                                                            *\n *****************************************************************************/\n/* ****************************************************************************\n *                                                                            *\n * START OF ANDROID < 3 SPECIFIC CODE. THIS CAN BE REMOVED IF YOU'RE NOT      *\n * TARGETING THAT SYSTEM.                                                     *\n *                                                                            *\n *****************************************************************************/\nvar CanVGRenderer,\n\tCanVGController;\n\nif (useCanVG) {\n\t/**\n\t * The CanVGRenderer is empty from start to keep the source footprint small.\n\t * When requested, the CanVGController downloads the rest of the source packaged\n\t * together with the canvg library.\n\t */\n\tHighcharts.CanVGRenderer = CanVGRenderer = function () {\n\t\t// Override the global SVG namespace to fake SVG/HTML that accepts CSS\n\t\tSVG_NS = 'http://www.w3.org/1999/xhtml';\n\t};\n\n\t/**\n\t * Start with an empty symbols object. This is needed when exporting is used (exporting.src.js will add a few symbols), but \n\t * the implementation from SvgRenderer will not be merged in until first render.\n\t */\n\tCanVGRenderer.prototype.symbols = {};\n\n\t/**\n\t * Handles on demand download of canvg rendering support.\n\t */\n\tCanVGController = (function () {\n\t\t// List of renderering calls\n\t\tvar deferredRenderCalls = [];\n\n\t\t/**\n\t\t * When downloaded, we are ready to draw deferred charts.\n\t\t */\n\t\tfunction drawDeferred() {\n\t\t\tvar callLength = deferredRenderCalls.length,\n\t\t\t\tcallIndex;\n\n\t\t\t// Draw all pending render calls\n\t\t\tfor (callIndex = 0; callIndex < callLength; callIndex++) {\n\t\t\t\tdeferredRenderCalls[callIndex]();\n\t\t\t}\n\t\t\t// Clear the list\n\t\t\tdeferredRenderCalls = [];\n\t\t}\n\n\t\treturn {\n\t\t\tpush: function (func, scriptLocation) {\n\t\t\t\t// Only get the script once\n\t\t\t\tif (deferredRenderCalls.length === 0) {\n\t\t\t\t\tgetScript(scriptLocation, drawDeferred);\n\t\t\t\t}\n\t\t\t\t// Register render call\n\t\t\t\tdeferredRenderCalls.push(func);\n\t\t\t}\n\t\t};\n\t}());\n\n\tRenderer = CanVGRenderer;\n} // end CanVGRenderer\n\n/* ****************************************************************************\n *                                                                            *\n * END OF ANDROID < 3 SPECIFIC CODE                                           *\n *                                                                            *\n *****************************************************************************/\n\n/**\n * The Tick class\n */\nfunction Tick(axis, pos, type, noLabel) {\n\tthis.axis = axis;\n\tthis.pos = pos;\n\tthis.type = type || '';\n\tthis.isNew = true;\n\n\tif (!type && !noLabel) {\n\t\tthis.addLabel();\n\t}\n}\n\nTick.prototype = {\n\t/**\n\t * Write the tick label\n\t */\n\taddLabel: function () {\n\t\tvar tick = this,\n\t\t\taxis = tick.axis,\n\t\t\toptions = axis.options,\n\t\t\tchart = axis.chart,\n\t\t\thoriz = axis.horiz,\n\t\t\tcategories = axis.categories,\n\t\t\tnames = axis.series[0] && axis.series[0].names,\n\t\t\tpos = tick.pos,\n\t\t\tlabelOptions = options.labels,\n\t\t\tstr,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\twidth = (horiz && categories &&\n\t\t\t\t!labelOptions.step && !labelOptions.staggerLines &&\n\t\t\t\t!labelOptions.rotation &&\n\t\t\t\tchart.plotWidth / tickPositions.length) ||\n\t\t\t\t(!horiz && (chart.margin[3] || chart.chartWidth * 0.33)), // #1580, #1931\n\t\t\tisFirst = pos === tickPositions[0],\n\t\t\tisLast = pos === tickPositions[tickPositions.length - 1],\n\t\t\tcss,\n\t\t\tattr,\n\t\t\tvalue = categories ?\n\t\t\t\tpick(categories[pos], names && names[pos], pos) : \n\t\t\t\tpos,\n\t\t\tlabel = tick.label,\n\t\t\ttickPositionInfo = tickPositions.info,\n\t\t\tdateTimeLabelFormat;\n\n\t\t// Set the datetime label format. If a higher rank is set for this position, use that. If not,\n\t\t// use the general format.\n\t\tif (axis.isDatetimeAxis && tickPositionInfo) {\n\t\t\tdateTimeLabelFormat = options.dateTimeLabelFormats[tickPositionInfo.higherRanks[pos] || tickPositionInfo.unitName];\n\t\t}\n\n\t\t// set properties for access in render method\n\t\ttick.isFirst = isFirst;\n\t\ttick.isLast = isLast;\n\n\t\t// get the string\n\t\tstr = axis.labelFormatter.call({\n\t\t\taxis: axis,\n\t\t\tchart: chart,\n\t\t\tisFirst: isFirst,\n\t\t\tisLast: isLast,\n\t\t\tdateTimeLabelFormat: dateTimeLabelFormat,\n\t\t\tvalue: axis.isLog ? correctFloat(lin2log(value)) : value\n\t\t});\n\n\t\t// prepare CSS\n\t\tcss = width && { width: mathMax(1, mathRound(width - 2 * (labelOptions.padding || 10))) + PX };\n\t\tcss = extend(css, labelOptions.style);\n\n\t\t// first call\n\t\tif (!defined(label)) {\n\t\t\tattr = {\n\t\t\t\talign: axis.labelAlign\n\t\t\t};\n\t\t\tif (isNumber(labelOptions.rotation)) {\n\t\t\t\tattr.rotation = labelOptions.rotation;\n\t\t\t}\n\t\t\tif (width && labelOptions.ellipsis) {\n\t\t\t\tattr._clipHeight = axis.len / tickPositions.length;\n\t\t\t}\n\n\t\t\ttick.label =\n\t\t\t\tdefined(str) && labelOptions.enabled ?\n\t\t\t\t\tchart.renderer.text(\n\t\t\t\t\t\t\tstr,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tlabelOptions.useHTML\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(attr)\n\t\t\t\t\t\t// without position absolute, IE export sometimes is wrong\n\t\t\t\t\t\t.css(css)\n\t\t\t\t\t\t.add(axis.labelGroup) :\n\t\t\t\t\tnull;\n\n\t\t// update\n\t\t} else if (label) {\n\t\t\tlabel.attr({\n\t\t\t\t\ttext: str\n\t\t\t\t})\n\t\t\t\t.css(css);\n\t\t}\n\t},\n\n\t/**\n\t * Get the offset height or width of the label\n\t */\n\tgetLabelSize: function () {\n\t\tvar label = this.label,\n\t\t\taxis = this.axis;\n\t\treturn label ?\n\t\t\t((this.labelBBox = label.getBBox()))[axis.horiz ? 'height' : 'width'] :\n\t\t\t0;\n\t},\n\n\t/**\n\t * Find how far the labels extend to the right and left of the tick's x position. Used for anti-collision\n\t * detection with overflow logic.\n\t */\n\tgetLabelSides: function () {\n\t\tvar bBox = this.labelBBox, // assume getLabelSize has run at this point\n\t\t\taxis = this.axis,\n\t\t\toptions = axis.options,\n\t\t\tlabelOptions = options.labels,\n\t\t\twidth = bBox.width,\n\t\t\tleftSide = width * { left: 0, center: 0.5, right: 1 }[axis.labelAlign] - labelOptions.x;\n\n\t\treturn [-leftSide, width - leftSide];\n\t},\n\n\t/**\n\t * Handle the label overflow by adjusting the labels to the left and right edge, or\n\t * hide them if they collide into the neighbour label.\n\t */\n\thandleOverflow: function (index, xy) {\n\t\tvar show = true,\n\t\t\taxis = this.axis,\n\t\t\tchart = axis.chart,\n\t\t\tisFirst = this.isFirst,\n\t\t\tisLast = this.isLast,\n\t\t\tx = xy.x,\n\t\t\treversed = axis.reversed,\n\t\t\ttickPositions = axis.tickPositions;\n\n\t\tif (isFirst || isLast) {\n\n\t\t\tvar sides = this.getLabelSides(),\n\t\t\t\tleftSide = sides[0],\n\t\t\t\trightSide = sides[1],\n\t\t\t\tplotLeft = chart.plotLeft,\n\t\t\t\tplotRight = plotLeft + axis.len,\n\t\t\t\tneighbour = axis.ticks[tickPositions[index + (isFirst ? 1 : -1)]],\n\t\t\t\tneighbourEdge = neighbour && neighbour.label.xy && neighbour.label.xy.x + neighbour.getLabelSides()[isFirst ? 0 : 1];\n\n\t\t\tif ((isFirst && !reversed) || (isLast && reversed)) {\n\t\t\t\t// Is the label spilling out to the left of the plot area?\n\t\t\t\tif (x + leftSide < plotLeft) {\n\n\t\t\t\t\t// Align it to plot left\n\t\t\t\t\tx = plotLeft - leftSide;\n\n\t\t\t\t\t// Hide it if it now overlaps the neighbour label\n\t\t\t\t\tif (neighbour && x + rightSide > neighbourEdge) {\n\t\t\t\t\t\tshow = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// Is the label spilling out to the right of the plot area?\n\t\t\t\tif (x + rightSide > plotRight) {\n\n\t\t\t\t\t// Align it to plot right\n\t\t\t\t\tx = plotRight - rightSide;\n\n\t\t\t\t\t// Hide it if it now overlaps the neighbour label\n\t\t\t\t\tif (neighbour && x + leftSide < neighbourEdge) {\n\t\t\t\t\t\tshow = false;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the modified x position of the label\n\t\t\txy.x = x;\n\t\t}\n\t\treturn show;\n\t},\n\n\t/**\n\t * Get the x and y position for ticks and labels\n\t */\n\tgetPosition: function (horiz, pos, tickmarkOffset, old) {\n\t\tvar axis = this.axis,\n\t\t\tchart = axis.chart,\n\t\t\tcHeight = (old && chart.oldChartHeight) || chart.chartHeight;\n\t\t\n\t\treturn {\n\t\t\tx: horiz ?\n\t\t\t\taxis.translate(pos + tickmarkOffset, null, null, old) + axis.transB :\n\t\t\t\taxis.left + axis.offset + (axis.opposite ? ((old && chart.oldChartWidth) || chart.chartWidth) - axis.right - axis.left : 0),\n\n\t\t\ty: horiz ?\n\t\t\t\tcHeight - axis.bottom + axis.offset - (axis.opposite ? axis.height : 0) :\n\t\t\t\tcHeight - axis.translate(pos + tickmarkOffset, null, null, old) - axis.transB\n\t\t};\n\t\t\n\t},\n\t\n\t/**\n\t * Get the x, y position of the tick label\n\t */\n\tgetLabelPosition: function (x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {\n\t\tvar axis = this.axis,\n\t\t\ttransA = axis.transA,\n\t\t\treversed = axis.reversed,\n\t\t\tstaggerLines = axis.staggerLines,\n\t\t\tbaseline = axis.chart.renderer.fontMetrics(labelOptions.style.fontSize).b,\n\t\t\trotation = labelOptions.rotation;\n\t\t\t\n\t\tx = x + labelOptions.x - (tickmarkOffset && horiz ?\n\t\t\ttickmarkOffset * transA * (reversed ? -1 : 1) : 0);\n\t\ty = y + labelOptions.y - (tickmarkOffset && !horiz ?\n\t\t\ttickmarkOffset * transA * (reversed ? 1 : -1) : 0);\n\n\t\t// Correct for rotation (#1764)\n\t\tif (rotation && axis.side === 2) {\n\t\t\ty -= baseline - baseline * mathCos(rotation * deg2rad);\n\t\t}\n\t\t\n\t\t// Vertically centered\n\t\tif (!defined(labelOptions.y) && !rotation) { // #1951\n\t\t\ty += baseline - label.getBBox().height / 2;\n\t\t}\n\t\t\n\t\t// Correct for staggered labels\n\t\tif (staggerLines) {\n\t\t\ty += (index / (step || 1) % staggerLines) * (axis.labelOffset / staggerLines);\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\t\n\t/**\n\t * Extendible method to return the path of the marker\n\t */\n\tgetMarkPath: function (x, y, tickLength, tickWidth, horiz, renderer) {\n\t\treturn renderer.crispLine([\n\t\t\t\tM,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tL,\n\t\t\t\tx + (horiz ? 0 : -tickLength),\n\t\t\t\ty + (horiz ? tickLength : 0)\n\t\t\t], tickWidth);\n\t},\n\n\t/**\n\t * Put everything in place\n\t *\n\t * @param index {Number}\n\t * @param old {Boolean} Use old coordinates to prepare an animation into new position\n\t */\n\trender: function (index, old, opacity) {\n\t\tvar tick = this,\n\t\t\taxis = tick.axis,\n\t\t\toptions = axis.options,\n\t\t\tchart = axis.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\thoriz = axis.horiz,\n\t\t\ttype = tick.type,\n\t\t\tlabel = tick.label,\n\t\t\tpos = tick.pos,\n\t\t\tlabelOptions = options.labels,\n\t\t\tgridLine = tick.gridLine,\n\t\t\tgridPrefix = type ? type + 'Grid' : 'grid',\n\t\t\ttickPrefix = type ? type + 'Tick' : 'tick',\n\t\t\tgridLineWidth = options[gridPrefix + 'LineWidth'],\n\t\t\tgridLineColor = options[gridPrefix + 'LineColor'],\n\t\t\tdashStyle = options[gridPrefix + 'LineDashStyle'],\n\t\t\ttickLength = options[tickPrefix + 'Length'],\n\t\t\ttickWidth = options[tickPrefix + 'Width'] || 0,\n\t\t\ttickColor = options[tickPrefix + 'Color'],\n\t\t\ttickPosition = options[tickPrefix + 'Position'],\n\t\t\tgridLinePath,\n\t\t\tmark = tick.mark,\n\t\t\tmarkPath,\n\t\t\tstep = labelOptions.step,\n\t\t\tattribs,\n\t\t\tshow = true,\n\t\t\ttickmarkOffset = axis.tickmarkOffset,\n\t\t\txy = tick.getPosition(horiz, pos, tickmarkOffset, old),\n\t\t\tx = xy.x,\n\t\t\ty = xy.y,\n\t\t\treverseCrisp = ((horiz && x === axis.pos + axis.len) || (!horiz && y === axis.pos)) ? -1 : 1, // #1480, #1687\n\t\t\tstaggerLines = axis.staggerLines;\n\n\t\tthis.isActive = true;\n\t\t\n\t\t// create the grid line\n\t\tif (gridLineWidth) {\n\t\t\tgridLinePath = axis.getPlotLinePath(pos + tickmarkOffset, gridLineWidth * reverseCrisp, old, true);\n\n\t\t\tif (gridLine === UNDEFINED) {\n\t\t\t\tattribs = {\n\t\t\t\t\tstroke: gridLineColor,\n\t\t\t\t\t'stroke-width': gridLineWidth\n\t\t\t\t};\n\t\t\t\tif (dashStyle) {\n\t\t\t\t\tattribs.dashstyle = dashStyle;\n\t\t\t\t}\n\t\t\t\tif (!type) {\n\t\t\t\t\tattribs.zIndex = 1;\n\t\t\t\t}\n\t\t\t\tif (old) {\n\t\t\t\t\tattribs.opacity = 0;\n\t\t\t\t}\n\t\t\t\ttick.gridLine = gridLine =\n\t\t\t\t\tgridLineWidth ?\n\t\t\t\t\t\trenderer.path(gridLinePath)\n\t\t\t\t\t\t\t.attr(attribs).add(axis.gridGroup) :\n\t\t\t\t\t\tnull;\n\t\t\t}\n\n\t\t\t// If the parameter 'old' is set, the current call will be followed\n\t\t\t// by another call, therefore do not do any animations this time\n\t\t\tif (!old && gridLine && gridLinePath) {\n\t\t\t\tgridLine[tick.isNew ? 'attr' : 'animate']({\n\t\t\t\t\td: gridLinePath,\n\t\t\t\t\topacity: opacity\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// create the tick mark\n\t\tif (tickWidth && tickLength) {\n\n\t\t\t// negate the length\n\t\t\tif (tickPosition === 'inside') {\n\t\t\t\ttickLength = -tickLength;\n\t\t\t}\n\t\t\tif (axis.opposite) {\n\t\t\t\ttickLength = -tickLength;\n\t\t\t}\n\n\t\t\tmarkPath = tick.getMarkPath(x, y, tickLength, tickWidth * reverseCrisp, horiz, renderer);\n\n\t\t\tif (mark) { // updating\n\t\t\t\tmark.animate({\n\t\t\t\t\td: markPath,\n\t\t\t\t\topacity: opacity\n\t\t\t\t});\n\t\t\t} else { // first time\n\t\t\t\ttick.mark = renderer.path(\n\t\t\t\t\tmarkPath\n\t\t\t\t).attr({\n\t\t\t\t\tstroke: tickColor,\n\t\t\t\t\t'stroke-width': tickWidth,\n\t\t\t\t\topacity: opacity\n\t\t\t\t}).add(axis.axisGroup);\n\t\t\t}\n\t\t}\n\n\t\t// the label is created on init - now move it into place\n\t\tif (label && !isNaN(x)) {\n\t\t\tlabel.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step);\n\n\t\t\t// Apply show first and show last. If the tick is both first and last, it is \n\t\t\t// a single centered tick, in which case we show the label anyway (#2100).\n\t\t\tif ((tick.isFirst && !tick.isLast && !pick(options.showFirstLabel, 1)) ||\n\t\t\t\t\t(tick.isLast && !tick.isFirst && !pick(options.showLastLabel, 1))) {\n\t\t\t\tshow = false;\n\n\t\t\t// Handle label overflow and show or hide accordingly\n\t\t\t} else if (!staggerLines && horiz && labelOptions.overflow === 'justify' && !tick.handleOverflow(index, xy)) {\n\t\t\t\tshow = false;\n\t\t\t}\n\n\t\t\t// apply step\n\t\t\tif (step && index % step) {\n\t\t\t\t// show those indices dividable by step\n\t\t\t\tshow = false;\n\t\t\t}\n\n\t\t\t// Set the new position, and show or hide\n\t\t\tif (show && !isNaN(xy.y)) {\n\t\t\t\txy.opacity = opacity;\n\t\t\t\tlabel[tick.isNew ? 'attr' : 'animate'](xy);\n\t\t\t\ttick.isNew = false;\n\t\t\t} else {\n\t\t\t\tlabel.attr('y', -9999); // #1338\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Destructor for the tick prototype\n\t */\n\tdestroy: function () {\n\t\tdestroyObjectProperties(this, this.axis);\n\t}\n};\n\n/**\n * The object wrapper for plot lines and plot bands\n * @param {Object} options\n */\nfunction PlotLineOrBand(axis, options) {\n\tthis.axis = axis;\n\n\tif (options) {\n\t\tthis.options = options;\n\t\tthis.id = options.id;\n\t}\n}\n\nPlotLineOrBand.prototype = {\n\t\n\t/**\n\t * Render the plot line or plot band. If it is already existing,\n\t * move it.\n\t */\n\trender: function () {\n\t\tvar plotLine = this,\n\t\t\taxis = plotLine.axis,\n\t\t\thoriz = axis.horiz,\n\t\t\thalfPointRange = (axis.pointRange || 0) / 2,\n\t\t\toptions = plotLine.options,\n\t\t\toptionsLabel = options.label,\n\t\t\tlabel = plotLine.label,\n\t\t\twidth = options.width,\n\t\t\tto = options.to,\n\t\t\tfrom = options.from,\n\t\t\tisBand = defined(from) && defined(to),\n\t\t\tvalue = options.value,\n\t\t\tdashStyle = options.dashStyle,\n\t\t\tsvgElem = plotLine.svgElem,\n\t\t\tpath = [],\n\t\t\taddEvent,\n\t\t\teventType,\n\t\t\txs,\n\t\t\tys,\n\t\t\tx,\n\t\t\ty,\n\t\t\tcolor = options.color,\n\t\t\tzIndex = options.zIndex,\n\t\t\tevents = options.events,\n\t\t\tattribs,\n\t\t\trenderer = axis.chart.renderer;\n\n\t\t// logarithmic conversion\n\t\tif (axis.isLog) {\n\t\t\tfrom = log2lin(from);\n\t\t\tto = log2lin(to);\n\t\t\tvalue = log2lin(value);\n\t\t}\n\n\t\t// plot line\n\t\tif (width) {\n\t\t\tpath = axis.getPlotLinePath(value, width);\n\t\t\tattribs = {\n\t\t\t\tstroke: color,\n\t\t\t\t'stroke-width': width\n\t\t\t};\n\t\t\tif (dashStyle) {\n\t\t\t\tattribs.dashstyle = dashStyle;\n\t\t\t}\n\t\t} else if (isBand) { // plot band\n\t\t\t\n\t\t\t// keep within plot area\n\t\t\tfrom = mathMax(from, axis.min - halfPointRange);\n\t\t\tto = mathMin(to, axis.max + halfPointRange);\n\t\t\t\n\t\t\tpath = axis.getPlotBandPath(from, to, options);\n\t\t\tattribs = {\n\t\t\t\tfill: color\n\t\t\t};\n\t\t\tif (options.borderWidth) {\n\t\t\t\tattribs.stroke = options.borderColor;\n\t\t\t\tattribs['stroke-width'] = options.borderWidth;\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t\t// zIndex\n\t\tif (defined(zIndex)) {\n\t\t\tattribs.zIndex = zIndex;\n\t\t}\n\n\t\t// common for lines and bands\n\t\tif (svgElem) {\n\t\t\tif (path) {\n\t\t\t\tsvgElem.animate({\n\t\t\t\t\td: path\n\t\t\t\t}, null, svgElem.onGetPath);\n\t\t\t} else {\n\t\t\t\tsvgElem.hide();\n\t\t\t\tsvgElem.onGetPath = function () {\n\t\t\t\t\tsvgElem.show();\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (path && path.length) {\n\t\t\tplotLine.svgElem = svgElem = renderer.path(path)\n\t\t\t\t.attr(attribs).add();\n\n\t\t\t// events\n\t\t\tif (events) {\n\t\t\t\taddEvent = function (eventType) {\n\t\t\t\t\tsvgElem.on(eventType, function (e) {\n\t\t\t\t\t\tevents[eventType].apply(plotLine, [e]);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tfor (eventType in events) {\n\t\t\t\t\taddEvent(eventType);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// the plot band/line label\n\t\tif (optionsLabel && defined(optionsLabel.text) && path && path.length && axis.width > 0 && axis.height > 0) {\n\t\t\t// apply defaults\n\t\t\toptionsLabel = merge({\n\t\t\t\talign: horiz && isBand && 'center',\n\t\t\t\tx: horiz ? !isBand && 4 : 10,\n\t\t\t\tverticalAlign : !horiz && isBand && 'middle',\n\t\t\t\ty: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4,\n\t\t\t\trotation: horiz && !isBand && 90\n\t\t\t}, optionsLabel);\n\n\t\t\t// add the SVG element\n\t\t\tif (!label) {\n\t\t\t\tplotLine.label = label = renderer.text(\n\t\t\t\t\t\toptionsLabel.text,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\toptionsLabel.useHTML\n\t\t\t\t\t)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\talign: optionsLabel.textAlign || optionsLabel.align,\n\t\t\t\t\t\trotation: optionsLabel.rotation,\n\t\t\t\t\t\tzIndex: zIndex\n\t\t\t\t\t})\n\t\t\t\t\t.css(optionsLabel.style)\n\t\t\t\t\t.add();\n\t\t\t}\n\n\t\t\t// get the bounding box and align the label\n\t\t\txs = [path[1], path[4], pick(path[6], path[1])];\n\t\t\tys = [path[2], path[5], pick(path[7], path[2])];\n\t\t\tx = arrayMin(xs);\n\t\t\ty = arrayMin(ys);\n\n\t\t\tlabel.align(optionsLabel, false, {\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: arrayMax(xs) - x,\n\t\t\t\theight: arrayMax(ys) - y\n\t\t\t});\n\t\t\tlabel.show();\n\n\t\t} else if (label) { // move out of sight\n\t\t\tlabel.hide();\n\t\t}\n\n\t\t// chainable\n\t\treturn plotLine;\n\t},\n\n\t/**\n\t * Remove the plot line or band\n\t */\n\tdestroy: function () {\n\t\t// remove it from the lookup\n\t\terase(this.axis.plotLinesAndBands, this);\n\t\t\n\t\tdelete this.axis;\n\t\tdestroyObjectProperties(this);\n\t}\n};\n/**\n * The class for stack items\n */\nfunction StackItem(axis, options, isNegative, x, stackOption, stacking) {\n\t\n\tvar inverted = axis.chart.inverted;\n\n\tthis.axis = axis;\n\n\t// Tells if the stack is negative\n\tthis.isNegative = isNegative;\n\n\t// Save the options to be able to style the label\n\tthis.options = options;\n\n\t// Save the x value to be able to position the label later\n\tthis.x = x;\n\n\t// Initialize total value\n\tthis.total = null;\n\n\t// This will keep each points' extremes stored by series.index\n\tthis.points = {};\n\n\t// Save the stack option on the series configuration object, and whether to treat it as percent\n\tthis.stack = stackOption;\n\tthis.percent = stacking === 'percent';\n\n\t// The align options and text align varies on whether the stack is negative and\n\t// if the chart is inverted or not.\n\t// First test the user supplied value, then use the dynamic.\n\tthis.alignOptions = {\n\t\talign: options.align || (inverted ? (isNegative ? 'left' : 'right') : 'center'),\n\t\tverticalAlign: options.verticalAlign || (inverted ? 'middle' : (isNegative ? 'bottom' : 'top')),\n\t\ty: pick(options.y, inverted ? 4 : (isNegative ? 14 : -6)),\n\t\tx: pick(options.x, inverted ? (isNegative ? -6 : 6) : 0)\n\t};\n\n\tthis.textAlign = options.textAlign || (inverted ? (isNegative ? 'right' : 'left') : 'center');\n}\n\nStackItem.prototype = {\n\tdestroy: function () {\n\t\tdestroyObjectProperties(this, this.axis);\n\t},\n\n\t/**\n\t * Renders the stack total label and adds it to the stack label group.\n\t */\n\trender: function (group) {\n\t\tvar options = this.options,\n\t\t\tformatOption = options.format,\n\t\t\tstr = formatOption ?\n\t\t\t\tformat(formatOption, this) : \n\t\t\t\toptions.formatter.call(this);  // format the text in the label\n\n\t\t// Change the text to reflect the new total and set visibility to hidden in case the serie is hidden\n\t\tif (this.label) {\n\t\t\tthis.label.attr({text: str, visibility: HIDDEN});\n\t\t// Create new label\n\t\t} else {\n\t\t\tthis.label =\n\t\t\t\tthis.axis.chart.renderer.text(str, 0, 0, options.useHTML)\t\t// dummy positions, actual position updated with setOffset method in columnseries\n\t\t\t\t\t.css(options.style)\t\t\t\t// apply style\n\t\t\t\t\t.attr({\n\t\t\t\t\t\talign: this.textAlign,\t\t\t\t// fix the text-anchor\n\t\t\t\t\t\trotation: options.rotation,\t// rotation\n\t\t\t\t\t\tvisibility: HIDDEN\t\t\t\t\t// hidden until setOffset is called\n\t\t\t\t\t})\t\t\t\t\n\t\t\t\t\t.add(group);\t\t\t\t\t\t\t// add to the labels-group\n\t\t}\n\t},\n\n\t/**\n\t * Sets the offset that the stack has from the x value and repositions the label.\n\t */\n\tsetOffset: function (xOffset, xWidth) {\n\t\tvar stackItem = this,\n\t\t\taxis = stackItem.axis,\n\t\t\tchart = axis.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tneg = this.isNegative,\t\t\t\t\t\t\t// special treatment is needed for negative stacks\n\t\t\ty = axis.translate(this.percent ? 100 : this.total, 0, 0, 0, 1), // stack value translated mapped to chart coordinates\n\t\t\tyZero = axis.translate(0),\t\t\t\t\t\t// stack origin\n\t\t\th = mathAbs(y - yZero),\t\t\t\t\t\t\t// stack height\n\t\t\tx = chart.xAxis[0].translate(this.x) + xOffset,\t// stack x position\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tstackBox = {\t// this is the box for the complete stack\n\t\t\t\tx: inverted ? (neg ? y : y - h) : x,\n\t\t\t\ty: inverted ? plotHeight - x - xWidth : (neg ? (plotHeight - y - h) : plotHeight - y),\n\t\t\t\twidth: inverted ? h : xWidth,\n\t\t\t\theight: inverted ? xWidth : h\n\t\t\t},\n\t\t\tlabel = this.label,\n\t\t\talignAttr;\n\t\t\n\t\tif (label) {\n\t\t\tlabel.align(this.alignOptions, null, stackBox);\t// align the label to the box\n\t\t\t\t\n\t\t\t// Set visibility (#678)\n\t\t\talignAttr = label.alignAttr;\n\t\t\tlabel.attr({ \n\t\t\t\tvisibility: this.options.crop === false || chart.isInsidePlot(alignAttr.x, alignAttr.y) ? \n\t\t\t\t\t(hasSVG ? 'inherit' : VISIBLE) : \n\t\t\t\t\tHIDDEN\n\t\t\t});\n\t\t}\n\t}\n};\n/**\n * Create a new axis object\n * @param {Object} chart\n * @param {Object} options\n */\nfunction Axis() {\n\tthis.init.apply(this, arguments);\n}\n\nAxis.prototype = {\n\t\n\t/**\n\t * Default options for the X axis - the Y axis has extended defaults \n\t */\n\tdefaultOptions: {\n\t\t// allowDecimals: null,\n\t\t// alternateGridColor: null,\n\t\t// categories: [],\n\t\tdateTimeLabelFormats: {\n\t\t\tmillisecond: '%H:%M:%S.%L',\n\t\t\tsecond: '%H:%M:%S',\n\t\t\tminute: '%H:%M',\n\t\t\thour: '%H:%M',\n\t\t\tday: '%e. %b',\n\t\t\tweek: '%e. %b',\n\t\t\tmonth: '%b \\'%y',\n\t\t\tyear: '%Y'\n\t\t},\n\t\tendOnTick: false,\n\t\tgridLineColor: '#C0C0C0',\n\t\t// gridLineDashStyle: 'solid',\n\t\t// gridLineWidth: 0,\n\t\t// reversed: false,\n\t\n\t\tlabels: defaultLabelOptions,\n\t\t\t// { step: null },\n\t\tlineColor: '#C0D0E0',\n\t\tlineWidth: 1,\n\t\t//linkedTo: null,\n\t\t//max: undefined,\n\t\t//min: undefined,\n\t\tminPadding: 0.01,\n\t\tmaxPadding: 0.01,\n\t\t//minRange: null,\n\t\tminorGridLineColor: '#E0E0E0',\n\t\t// minorGridLineDashStyle: null,\n\t\tminorGridLineWidth: 1,\n\t\tminorTickColor: '#A0A0A0',\n\t\t//minorTickInterval: null,\n\t\tminorTickLength: 2,\n\t\tminorTickPosition: 'outside', // inside or outside\n\t\t//minorTickWidth: 0,\n\t\t//opposite: false,\n\t\t//offset: 0,\n\t\t//plotBands: [{\n\t\t//\tevents: {},\n\t\t//\tzIndex: 1,\n\t\t//\tlabels: { align, x, verticalAlign, y, style, rotation, textAlign }\n\t\t//}],\n\t\t//plotLines: [{\n\t\t//\tevents: {}\n\t\t//  dashStyle: {}\n\t\t//\tzIndex:\n\t\t//\tlabels: { align, x, verticalAlign, y, style, rotation, textAlign }\n\t\t//}],\n\t\t//reversed: false,\n\t\t// showFirstLabel: true,\n\t\t// showLastLabel: true,\n\t\tstartOfWeek: 1,\n\t\tstartOnTick: false,\n\t\ttickColor: '#C0D0E0',\n\t\t//tickInterval: null,\n\t\ttickLength: 5,\n\t\ttickmarkPlacement: 'between', // on or between\n\t\ttickPixelInterval: 100,\n\t\ttickPosition: 'outside',\n\t\ttickWidth: 1,\n\t\ttitle: {\n\t\t\t//text: null,\n\t\t\talign: 'middle', // low, middle or high\n\t\t\t//margin: 0 for horizontal, 10 for vertical axes,\n\t\t\t//rotation: 0,\n\t\t\t//side: 'outside',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#4d759e',\n\t\t\t\t//font: defaultFont.replace('normal', 'bold')\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t\t//x: 0,\n\t\t\t//y: 0\n\t\t},\n\t\ttype: 'linear' // linear, logarithmic or datetime\n\t},\n\t\n\t/**\n\t * This options set extends the defaultOptions for Y axes\n\t */\n\tdefaultYAxisOptions: {\n\t\tendOnTick: true,\n\t\tgridLineWidth: 1,\n\t\ttickPixelInterval: 72,\n\t\tshowLastLabel: true,\n\t\tlabels: {\n\t\t\tx: -8,\n\t\t\ty: 3\n\t\t},\n\t\tlineWidth: 0,\n\t\tmaxPadding: 0.05,\n\t\tminPadding: 0.05,\n\t\tstartOnTick: true,\n\t\ttickWidth: 0,\n\t\ttitle: {\n\t\t\trotation: 270,\n\t\t\ttext: 'Values'\n\t\t},\n\t\tstackLabels: {\n\t\t\tenabled: false,\n\t\t\t//align: dynamic,\n\t\t\t//y: dynamic,\n\t\t\t//x: dynamic,\n\t\t\t//verticalAlign: dynamic,\n\t\t\t//textAlign: dynamic,\n\t\t\t//rotation: 0,\n\t\t\tformatter: function () {\n\t\t\t\treturn numberFormat(this.total, -1);\n\t\t\t},\n\t\t\tstyle: defaultLabelOptions.style\n\t\t}\n\t},\n\t\n\t/**\n\t * These options extend the defaultOptions for left axes\n\t */\n\tdefaultLeftAxisOptions: {\n\t\tlabels: {\n\t\t\tx: -8,\n\t\t\ty: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 270\n\t\t}\n\t},\n\t\n\t/**\n\t * These options extend the defaultOptions for right axes\n\t */\n\tdefaultRightAxisOptions: {\n\t\tlabels: {\n\t\t\tx: 8,\n\t\t\ty: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 90\n\t\t}\n\t},\n\t\n\t/**\n\t * These options extend the defaultOptions for bottom axes\n\t */\n\tdefaultBottomAxisOptions: {\n\t\tlabels: {\n\t\t\tx: 0,\n\t\t\ty: 14\n\t\t\t// overflow: undefined,\n\t\t\t// staggerLines: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 0\n\t\t}\n\t},\n\t/**\n\t * These options extend the defaultOptions for left axes\n\t */\n\tdefaultTopAxisOptions: {\n\t\tlabels: {\n\t\t\tx: 0,\n\t\t\ty: -5\n\t\t\t// overflow: undefined\n\t\t\t// staggerLines: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 0\n\t\t}\n\t},\n\t\n\t/**\n\t * Initialize the axis\n\t */\n\tinit: function (chart, userOptions) {\n\t\t\t\n\t\t\n\t\tvar isXAxis = userOptions.isX,\n\t\t\taxis = this;\n\t\n\t\t// Flag, is the axis horizontal\n\t\taxis.horiz = chart.inverted ? !isXAxis : isXAxis;\n\t\t\n\t\t// Flag, isXAxis\n\t\taxis.isXAxis = isXAxis;\n\t\taxis.xOrY = isXAxis ? 'x' : 'y';\n\t\n\t\n\t\taxis.opposite = userOptions.opposite; // needed in setOptions\n\t\taxis.side = axis.horiz ?\n\t\t\t\t(axis.opposite ? 0 : 2) : // top : bottom\n\t\t\t\t(axis.opposite ? 1 : 3);  // right : left\n\t\n\t\taxis.setOptions(userOptions);\n\t\t\n\t\n\t\tvar options = this.options,\n\t\t\ttype = options.type,\n\t\t\tisDatetimeAxis = type === 'datetime';\n\t\n\t\taxis.labelFormatter = options.labels.formatter || axis.defaultLabelFormatter; // can be overwritten by dynamic format\n\t\n\t\n\t\t// Flag, stagger lines or not\n\t\taxis.userOptions = userOptions;\n\t\n\t\t//axis.axisTitleMargin = UNDEFINED,// = options.title.margin,\n\t\taxis.minPixelPadding = 0;\n\t\t//axis.ignoreMinPadding = UNDEFINED; // can be set to true by a column or bar series\n\t\t//axis.ignoreMaxPadding = UNDEFINED;\n\t\n\t\taxis.chart = chart;\n\t\taxis.reversed = options.reversed;\n\t\taxis.zoomEnabled = options.zoomEnabled !== false;\n\t\n\t\t// Initial categories\n\t\taxis.categories = options.categories || type === 'category';\n\t\n\t\t// Elements\n\t\t//axis.axisGroup = UNDEFINED;\n\t\t//axis.gridGroup = UNDEFINED;\n\t\t//axis.axisTitle = UNDEFINED;\n\t\t//axis.axisLine = UNDEFINED;\n\t\n\t\t// Shorthand types\n\t\taxis.isLog = type === 'logarithmic';\n\t\taxis.isDatetimeAxis = isDatetimeAxis;\n\t\n\t\t// Flag, if axis is linked to another axis\n\t\taxis.isLinked = defined(options.linkedTo);\n\t\t// Linked axis.\n\t\t//axis.linkedParent = UNDEFINED;\t\n\t\t\n\t\t// Tick positions\n\t\t//axis.tickPositions = UNDEFINED; // array containing predefined positions\n\t\t// Tick intervals\n\t\t//axis.tickInterval = UNDEFINED;\n\t\t//axis.minorTickInterval = UNDEFINED;\n\t\t\n\t\taxis.tickmarkOffset = (axis.categories && options.tickmarkPlacement === 'between') ? 0.5 : 0;\n\t\n\t\t// Major ticks\n\t\taxis.ticks = {};\n\t\t// Minor ticks\n\t\taxis.minorTicks = {};\n\t\t//axis.tickAmount = UNDEFINED;\n\t\n\t\t// List of plotLines/Bands\n\t\taxis.plotLinesAndBands = [];\n\t\n\t\t// Alternate bands\n\t\taxis.alternateBands = {};\n\t\n\t\t// Axis metrics\n\t\t//axis.left = UNDEFINED;\n\t\t//axis.top = UNDEFINED;\n\t\t//axis.width = UNDEFINED;\n\t\t//axis.height = UNDEFINED;\n\t\t//axis.bottom = UNDEFINED;\n\t\t//axis.right = UNDEFINED;\n\t\t//axis.transA = UNDEFINED;\n\t\t//axis.transB = UNDEFINED;\n\t\t//axis.oldTransA = UNDEFINED;\n\t\taxis.len = 0;\n\t\t//axis.oldMin = UNDEFINED;\n\t\t//axis.oldMax = UNDEFINED;\n\t\t//axis.oldUserMin = UNDEFINED;\n\t\t//axis.oldUserMax = UNDEFINED;\n\t\t//axis.oldAxisLength = UNDEFINED;\n\t\taxis.minRange = axis.userMinRange = options.minRange || options.maxZoom;\n\t\taxis.range = options.range;\n\t\taxis.offset = options.offset || 0;\n\t\n\t\n\t\t// Dictionary for stacks\n\t\taxis.stacks = {};\n\t\taxis.oldStacks = {};\n\n\t\t// Dictionary for stacks max values\n\t\taxis.stackExtremes = {};\n\n\t\t// Min and max in the data\n\t\t//axis.dataMin = UNDEFINED,\n\t\t//axis.dataMax = UNDEFINED,\n\t\n\t\t// The axis range\n\t\taxis.max = null;\n\t\taxis.min = null;\n\t\n\t\t// User set min and max\n\t\t//axis.userMin = UNDEFINED,\n\t\t//axis.userMax = UNDEFINED,\n\n\t\t// Run Axis\n\t\t\n\t\tvar eventType,\n\t\t\tevents = axis.options.events;\n\n\t\t// Register\n\t\tif (inArray(axis, chart.axes) === -1) { // don't add it again on Axis.update()\n\t\t\tchart.axes.push(axis);\n\t\t\tchart[isXAxis ? 'xAxis' : 'yAxis'].push(axis);\n\t\t}\n\n\t\taxis.series = axis.series || []; // populated by Series\n\n\t\t// inverted charts have reversed xAxes as default\n\t\tif (chart.inverted && isXAxis && axis.reversed === UNDEFINED) {\n\t\t\taxis.reversed = true;\n\t\t}\n\n\t\taxis.removePlotBand = axis.removePlotBandOrLine;\n\t\taxis.removePlotLine = axis.removePlotBandOrLine;\n\n\n\t\t// register event listeners\n\t\tfor (eventType in events) {\n\t\t\taddEvent(axis, eventType, events[eventType]);\n\t\t}\n\n\t\t// extend logarithmic axis\n\t\tif (axis.isLog) {\n\t\t\taxis.val2lin = log2lin;\n\t\t\taxis.lin2val = lin2log;\n\t\t}\n\t},\n\t\n\t/**\n\t * Merge and set options\n\t */\n\tsetOptions: function (userOptions) {\n\t\tthis.options = merge(\n\t\t\tthis.defaultOptions,\n\t\t\tthis.isXAxis ? {} : this.defaultYAxisOptions,\n\t\t\t[this.defaultTopAxisOptions, this.defaultRightAxisOptions,\n\t\t\t\tthis.defaultBottomAxisOptions, this.defaultLeftAxisOptions][this.side],\n\t\t\tmerge(\n\t\t\t\tdefaultOptions[this.isXAxis ? 'xAxis' : 'yAxis'], // if set in setOptions (#1053)\n\t\t\t\tuserOptions\n\t\t\t)\n\t\t);\n\t},\n\n\t/**\n\t * Update the axis with a new options structure\n\t */\n\tupdate: function (newOptions, redraw) {\n\t\tvar chart = this.chart;\n\n\t\tnewOptions = chart.options[this.xOrY + 'Axis'][this.options.index] = merge(this.userOptions, newOptions);\n\n\t\tthis.destroy(true);\n\t\tthis._addedPlotLB = this.userMin = this.userMax = UNDEFINED; // #1611, #2306\n\n\t\tthis.init(chart, extend(newOptions, { events: UNDEFINED }));\n\n\t\tchart.isDirtyBox = true;\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw();\n\t\t}\n\t},\t\n\t\n\t/**\n     * Remove the axis from the chart\n     */\n\tremove: function (redraw) {\n\t\tvar chart = this.chart,\n\t\t\tkey = this.xOrY + 'Axis'; // xAxis or yAxis\n\n\t\t// Remove associated series\n\t\teach(this.series, function (series) {\n\t\t\tseries.remove(false);\n\t\t});\n\n\t\t// Remove the axis\n\t\terase(chart.axes, this);\n\t\terase(chart[key], this);\n\t\tchart.options[key].splice(this.options.index, 1);\n\t\teach(chart[key], function (axis, i) { // Re-index, #1706\n\t\t\taxis.options.index = i;\n\t\t});\n\t\tthis.destroy();\n\t\tchart.isDirtyBox = true;\n\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw();\n\t\t}\n\t},\n\t\n\t/** \n\t * The default label formatter. The context is a special config object for the label.\n\t */\n\tdefaultLabelFormatter: function () {\n\t\tvar axis = this.axis,\n\t\t\tvalue = this.value,\n\t\t\tcategories = axis.categories, \n\t\t\tdateTimeLabelFormat = this.dateTimeLabelFormat,\n\t\t\tnumericSymbols = defaultOptions.lang.numericSymbols,\n\t\t\ti = numericSymbols && numericSymbols.length,\n\t\t\tmulti,\n\t\t\tret,\n\t\t\tformatOption = axis.options.labels.format,\n\t\t\t\n\t\t\t// make sure the same symbol is added for all labels on a linear axis\n\t\t\tnumericSymbolDetector = axis.isLog ? value : axis.tickInterval;\n\n\t\tif (formatOption) {\n\t\t\tret = format(formatOption, this);\n\t\t\n\t\t} else if (categories) {\n\t\t\tret = value;\n\t\t\n\t\t} else if (dateTimeLabelFormat) { // datetime axis\n\t\t\tret = dateFormat(dateTimeLabelFormat, value);\n\t\t\n\t\t} else if (i && numericSymbolDetector >= 1000) {\n\t\t\t// Decide whether we should add a numeric symbol like k (thousands) or M (millions).\n\t\t\t// If we are to enable this in tooltip or other places as well, we can move this\n\t\t\t// logic to the numberFormatter and enable it by a parameter.\n\t\t\twhile (i-- && ret === UNDEFINED) {\n\t\t\t\tmulti = Math.pow(1000, i + 1);\n\t\t\t\tif (numericSymbolDetector >= multi && numericSymbols[i] !== null) {\n\t\t\t\t\tret = numberFormat(value / multi, -1) + numericSymbols[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (ret === UNDEFINED) {\n\t\t\tif (value >= 1000) { // add thousands separators\n\t\t\t\tret = numberFormat(value, 0);\n\n\t\t\t} else { // small numbers\n\t\t\t\tret = numberFormat(value, -1);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Get the minimum and maximum for the series of each axis\n\t */\n\tgetSeriesExtremes: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart;\n\n\t\taxis.hasVisibleSeries = false;\n\n\t\t// reset dataMin and dataMax in case we're redrawing\n\t\taxis.dataMin = axis.dataMax = null;\n\n\t\t// reset cached stacking extremes\n\t\taxis.stackExtremes = {};\n\n\t\taxis.buildStacks();\n\n\t\t// loop through this axis' series\n\t\teach(axis.series, function (series) {\n\n\t\t\tif (series.visible || !chart.options.chart.ignoreHiddenSeries) {\n\n\t\t\t\tvar seriesOptions = series.options,\n\t\t\t\t\txData,\n\t\t\t\t\tthreshold = seriesOptions.threshold,\n\t\t\t\t\tseriesDataMin,\n\t\t\t\t\tseriesDataMax;\n\n\t\t\t\taxis.hasVisibleSeries = true;\n\n\t\t\t\t// Validate threshold in logarithmic axes\n\t\t\t\tif (axis.isLog && threshold <= 0) {\n\t\t\t\t\tthreshold = null;\n\t\t\t\t}\n\n\t\t\t\t// Get dataMin and dataMax for X axes\n\t\t\t\tif (axis.isXAxis) {\n\t\t\t\t\txData = series.xData;\n\t\t\t\t\tif (xData.length) {\n\t\t\t\t\t\taxis.dataMin = mathMin(pick(axis.dataMin, xData[0]), arrayMin(xData));\n\t\t\t\t\t\taxis.dataMax = mathMax(pick(axis.dataMax, xData[0]), arrayMax(xData));\n\t\t\t\t\t}\n\n\t\t\t\t// Get dataMin and dataMax for Y axes, as well as handle stacking and processed data\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get this particular series extremes\n\t\t\t\t\tseries.getExtremes();\n\t\t\t\t\tseriesDataMax = series.dataMax;\n\t\t\t\t\tseriesDataMin = series.dataMin;\n\n\t\t\t\t\t// Get the dataMin and dataMax so far. If percentage is used, the min and max are\n\t\t\t\t\t// always 0 and 100. If seriesDataMin and seriesDataMax is null, then series\n\t\t\t\t\t// doesn't have active y data, we continue with nulls\n\t\t\t\t\tif (defined(seriesDataMin) && defined(seriesDataMax)) {\n\t\t\t\t\t\taxis.dataMin = mathMin(pick(axis.dataMin, seriesDataMin), seriesDataMin);\n\t\t\t\t\t\taxis.dataMax = mathMax(pick(axis.dataMax, seriesDataMax), seriesDataMax);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Adjust to threshold\n\t\t\t\t\tif (defined(threshold)) {\n\t\t\t\t\t\tif (axis.dataMin >= threshold) {\n\t\t\t\t\t\t\taxis.dataMin = threshold;\n\t\t\t\t\t\t\taxis.ignoreMinPadding = true;\n\t\t\t\t\t\t} else if (axis.dataMax < threshold) {\n\t\t\t\t\t\t\taxis.dataMax = threshold;\n\t\t\t\t\t\t\taxis.ignoreMaxPadding = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Translate from axis value to pixel position on the chart, or back\n\t *\n\t */\n\ttranslate: function (val, backwards, cvsCoord, old, handleLog, pointPlacement) {\n\t\tvar axis = this,\n\t\t\taxisLength = axis.len,\n\t\t\tsign = 1,\n\t\t\tcvsOffset = 0,\n\t\t\tlocalA = old ? axis.oldTransA : axis.transA,\n\t\t\tlocalMin = old ? axis.oldMin : axis.min,\n\t\t\treturnValue,\n\t\t\tminPixelPadding = axis.minPixelPadding,\n\t\t\tpostTranslate = (axis.options.ordinal || (axis.isLog && handleLog)) && axis.lin2val;\n\n\t\tif (!localA) {\n\t\t\tlocalA = axis.transA;\n\t\t}\n\n\t\t// In vertical axes, the canvas coordinates start from 0 at the top like in \n\t\t// SVG. \n\t\tif (cvsCoord) {\n\t\t\tsign *= -1; // canvas coordinates inverts the value\n\t\t\tcvsOffset = axisLength;\n\t\t}\n\n\t\t// Handle reversed axis\n\t\tif (axis.reversed) { \n\t\t\tsign *= -1;\n\t\t\tcvsOffset -= sign * axisLength;\n\t\t}\n\n\t\t// From pixels to value\n\t\tif (backwards) { // reverse translation\n\t\t\t\n\t\t\tval = val * sign + cvsOffset;\n\t\t\tval -= minPixelPadding;\n\t\t\treturnValue = val / localA + localMin; // from chart pixel to value\n\t\t\tif (postTranslate) { // log and ordinal axes\n\t\t\t\treturnValue = axis.lin2val(returnValue);\n\t\t\t}\n\n\t\t// From value to pixels\n\t\t} else {\n\t\t\tif (postTranslate) { // log and ordinal axes\n\t\t\t\tval = axis.val2lin(val);\n\t\t\t}\n\t\t\tif (pointPlacement === 'between') {\n\t\t\t\tpointPlacement = 0.5;\n\t\t\t}\n\t\t\treturnValue = sign * (val - localMin) * localA + cvsOffset + (sign * minPixelPadding) +\n\t\t\t\t(isNumber(pointPlacement) ? localA * pointPlacement * axis.pointRange : 0);\n\t\t}\n\n\t\treturn returnValue;\n\t},\n\n\t/**\n\t * Utility method to translate an axis value to pixel position. \n\t * @param {Number} value A value in terms of axis units\n\t * @param {Boolean} paneCoordinates Whether to return the pixel coordinate relative to the chart\n\t *        or just the axis/pane itself.\n\t */\n\ttoPixels: function (value, paneCoordinates) {\n\t\treturn this.translate(value, false, !this.horiz, null, true) + (paneCoordinates ? 0 : this.pos);\n\t},\n\n\t/*\n\t * Utility method to translate a pixel position in to an axis value\n\t * @param {Number} pixel The pixel value coordinate\n\t * @param {Boolean} paneCoordiantes Whether the input pixel is relative to the chart or just the\n\t *        axis/pane itself.\n\t */\n\ttoValue: function (pixel, paneCoordinates) {\n\t\treturn this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, null, true);\n\t},\n\n\t/**\n\t * Create the path for a plot line that goes from the given value on\n\t * this axis, across the plot to the opposite side\n\t * @param {Number} value\n\t * @param {Number} lineWidth Used for calculation crisp line\n\t * @param {Number] old Use old coordinates (for resizing and rescaling)\n\t */\n\tgetPlotLinePath: function (value, lineWidth, old, force) {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\taxisLeft = axis.left,\n\t\t\taxisTop = axis.top,\n\t\t\tx1,\n\t\t\ty1,\n\t\t\tx2,\n\t\t\ty2,\n\t\t\ttranslatedValue = axis.translate(value, null, null, old),\n\t\t\tcHeight = (old && chart.oldChartHeight) || chart.chartHeight,\n\t\t\tcWidth = (old && chart.oldChartWidth) || chart.chartWidth,\n\t\t\tskip,\n\t\t\ttransB = axis.transB;\n\n\t\tx1 = x2 = mathRound(translatedValue + transB);\n\t\ty1 = y2 = mathRound(cHeight - translatedValue - transB);\n\n\t\tif (isNaN(translatedValue)) { // no min or max\n\t\t\tskip = true;\n\n\t\t} else if (axis.horiz) {\n\t\t\ty1 = axisTop;\n\t\t\ty2 = cHeight - axis.bottom;\n\t\t\tif (x1 < axisLeft || x1 > axisLeft + axis.width) {\n\t\t\t\tskip = true;\n\t\t\t}\n\t\t} else {\n\t\t\tx1 = axisLeft;\n\t\t\tx2 = cWidth - axis.right;\n\n\t\t\tif (y1 < axisTop || y1 > axisTop + axis.height) {\n\t\t\t\tskip = true;\n\t\t\t}\n\t\t}\n\t\treturn skip && !force ?\n\t\t\tnull :\n\t\t\tchart.renderer.crispLine([M, x1, y1, L, x2, y2], lineWidth || 0);\n\t},\n\t\n\t/**\n\t * Create the path for a plot band\n\t */\n\tgetPlotBandPath: function (from, to) {\n\n\t\tvar toPath = this.getPlotLinePath(to),\n\t\t\tpath = this.getPlotLinePath(from);\n\t\t\t\n\t\tif (path && toPath) {\n\t\t\tpath.push(\n\t\t\t\ttoPath[4],\n\t\t\t\ttoPath[5],\n\t\t\t\ttoPath[1],\n\t\t\t\ttoPath[2]\n\t\t\t);\n\t\t} else { // outside the axis area\n\t\t\tpath = null;\n\t\t}\n\t\t\n\t\treturn path;\n\t},\n\t\n\t/**\n\t * Set the tick positions of a linear axis to round values like whole tens or every five.\n\t */\n\tgetLinearTickPositions: function (tickInterval, min, max) {\n\t\tvar pos,\n\t\t\tlastPos,\n\t\t\troundedMin = correctFloat(mathFloor(min / tickInterval) * tickInterval),\n\t\t\troundedMax = correctFloat(mathCeil(max / tickInterval) * tickInterval),\n\t\t\ttickPositions = [];\n\n\t\t// Populate the intermediate values\n\t\tpos = roundedMin;\n\t\twhile (pos <= roundedMax) {\n\n\t\t\t// Place the tick on the rounded value\n\t\t\ttickPositions.push(pos);\n\n\t\t\t// Always add the raw tickInterval, not the corrected one.\n\t\t\tpos = correctFloat(pos + tickInterval);\n\n\t\t\t// If the interval is not big enough in the current min - max range to actually increase\n\t\t\t// the loop variable, we need to break out to prevent endless loop. Issue #619\n\t\t\tif (pos === lastPos) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Record the last value\n\t\t\tlastPos = pos;\n\t\t}\n\t\treturn tickPositions;\n\t},\n\t\n\t/**\n\t * Set the tick positions of a logarithmic axis\n\t */\n\tgetLogTickPositions: function (interval, min, max, minor) {\n\t\tvar axis = this,\n\t\t\toptions = axis.options,\n\t\t\taxisLength = axis.len,\n\t\t\t// Since we use this method for both major and minor ticks,\n\t\t\t// use a local variable and return the result\n\t\t\tpositions = []; \n\t\t\n\t\t// Reset\n\t\tif (!minor) {\n\t\t\taxis._minorAutoInterval = null;\n\t\t}\n\t\t\n\t\t// First case: All ticks fall on whole logarithms: 1, 10, 100 etc.\n\t\tif (interval >= 0.5) {\n\t\t\tinterval = mathRound(interval);\n\t\t\tpositions = axis.getLinearTickPositions(interval, min, max);\n\t\t\t\n\t\t// Second case: We need intermediary ticks. For example \n\t\t// 1, 2, 4, 6, 8, 10, 20, 40 etc. \n\t\t} else if (interval >= 0.08) {\n\t\t\tvar roundedMin = mathFloor(min),\n\t\t\t\tintermediate,\n\t\t\t\ti,\n\t\t\t\tj,\n\t\t\t\tlen,\n\t\t\t\tpos,\n\t\t\t\tlastPos,\n\t\t\t\tbreak2;\n\t\t\t\t\n\t\t\tif (interval > 0.3) {\n\t\t\t\tintermediate = [1, 2, 4];\n\t\t\t} else if (interval > 0.15) { // 0.2 equals five minor ticks per 1, 10, 100 etc\n\t\t\t\tintermediate = [1, 2, 4, 6, 8];\n\t\t\t} else { // 0.1 equals ten minor ticks per 1, 10, 100 etc\n\t\t\t\tintermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n\t\t\t}\n\t\t\t\n\t\t\tfor (i = roundedMin; i < max + 1 && !break2; i++) {\n\t\t\t\tlen = intermediate.length;\n\t\t\t\tfor (j = 0; j < len && !break2; j++) {\n\t\t\t\t\tpos = log2lin(lin2log(i) * intermediate[j]);\n\t\t\t\t\t\n\t\t\t\t\tif (pos > min && (!minor || lastPos <= max)) { // #1670\n\t\t\t\t\t\tpositions.push(lastPos);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (lastPos > max) {\n\t\t\t\t\t\tbreak2 = true;\n\t\t\t\t\t}\n\t\t\t\t\tlastPos = pos;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t// Third case: We are so deep in between whole logarithmic values that\n\t\t// we might as well handle the tick positions like a linear axis. For\n\t\t// example 1.01, 1.02, 1.03, 1.04.\n\t\t} else {\n\t\t\tvar realMin = lin2log(min),\n\t\t\t\trealMax = lin2log(max),\n\t\t\t\ttickIntervalOption = options[minor ? 'minorTickInterval' : 'tickInterval'],\n\t\t\t\tfilteredTickIntervalOption = tickIntervalOption === 'auto' ? null : tickIntervalOption,\n\t\t\t\ttickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1),\n\t\t\t\ttotalPixelLength = minor ? axisLength / axis.tickPositions.length : axisLength;\n\t\t\t\n\t\t\tinterval = pick(\n\t\t\t\tfilteredTickIntervalOption,\n\t\t\t\taxis._minorAutoInterval,\n\t\t\t\t(realMax - realMin) * tickPixelIntervalOption / (totalPixelLength || 1)\n\t\t\t);\n\t\t\t\n\t\t\tinterval = normalizeTickInterval(\n\t\t\t\tinterval, \n\t\t\t\tnull, \n\t\t\t\tgetMagnitude(interval)\n\t\t\t);\n\t\t\t\n\t\t\tpositions = map(axis.getLinearTickPositions(\n\t\t\t\tinterval, \n\t\t\t\trealMin,\n\t\t\t\trealMax\t\n\t\t\t), log2lin);\n\t\t\t\n\t\t\tif (!minor) {\n\t\t\t\taxis._minorAutoInterval = interval / 5;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Set the axis-level tickInterval variable \n\t\tif (!minor) {\n\t\t\taxis.tickInterval = interval;\n\t\t}\n\t\treturn positions;\n\t},\n\n\t/**\n\t * Return the minor tick positions. For logarithmic axes, reuse the same logic\n\t * as for major ticks.\n\t */\n\tgetMinorTickPositions: function () {\n\t\tvar axis = this,\n\t\t\toptions = axis.options,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\tminorTickInterval = axis.minorTickInterval,\n\t\t\tminorTickPositions = [],\n\t\t\tpos,\n\t\t\ti,\n\t\t\tlen;\n\t\t\n\t\tif (axis.isLog) {\n\t\t\tlen = tickPositions.length;\n\t\t\tfor (i = 1; i < len; i++) {\n\t\t\t\tminorTickPositions = minorTickPositions.concat(\n\t\t\t\t\taxis.getLogTickPositions(minorTickInterval, tickPositions[i - 1], tickPositions[i], true)\n\t\t\t\t);\t\n\t\t\t}\n\t\t} else if (axis.isDatetimeAxis && options.minorTickInterval === 'auto') { // #1314\n\t\t\tminorTickPositions = minorTickPositions.concat(\n\t\t\t\tgetTimeTicks(\n\t\t\t\t\tnormalizeTimeTickInterval(minorTickInterval),\n\t\t\t\t\taxis.min,\n\t\t\t\t\taxis.max,\n\t\t\t\t\toptions.startOfWeek\n\t\t\t\t)\n\t\t\t);\n\t\t\tif (minorTickPositions[0] < axis.min) {\n\t\t\t\tminorTickPositions.shift();\n\t\t\t}\n\t\t} else {\t\t\t\n\t\t\tfor (pos = axis.min + (tickPositions[0] - axis.min) % minorTickInterval; pos <= axis.max; pos += minorTickInterval) {\n\t\t\t\tminorTickPositions.push(pos);\n\t\t\t}\n\t\t}\n\t\treturn minorTickPositions;\n\t},\n\n\t/**\n\t * Adjust the min and max for the minimum range. Keep in mind that the series data is \n\t * not yet processed, so we don't have information on data cropping and grouping, or \n\t * updated axis.pointRange or series.pointRange. The data can't be processed until\n\t * we have finally established min and max.\n\t */\n\tadjustForMinRange: function () {\n\t\tvar axis = this,\n\t\t\toptions = axis.options,\n\t\t\tmin = axis.min,\n\t\t\tmax = axis.max,\n\t\t\tzoomOffset,\n\t\t\tspaceAvailable = axis.dataMax - axis.dataMin >= axis.minRange,\n\t\t\tclosestDataRange,\n\t\t\ti,\n\t\t\tdistance,\n\t\t\txData,\n\t\t\tloopLength,\n\t\t\tminArgs,\n\t\t\tmaxArgs;\n\n\t\t// Set the automatic minimum range based on the closest point distance\n\t\tif (axis.isXAxis && axis.minRange === UNDEFINED && !axis.isLog) {\n\n\t\t\tif (defined(options.min) || defined(options.max)) {\n\t\t\t\taxis.minRange = null; // don't do this again\n\n\t\t\t} else {\n\n\t\t\t\t// Find the closest distance between raw data points, as opposed to\n\t\t\t\t// closestPointRange that applies to processed points (cropped and grouped)\n\t\t\t\teach(axis.series, function (series) {\n\t\t\t\t\txData = series.xData;\n\t\t\t\t\tloopLength = series.xIncrement ? 1 : xData.length - 1;\n\t\t\t\t\tfor (i = loopLength; i > 0; i--) {\n\t\t\t\t\t\tdistance = xData[i] - xData[i - 1];\n\t\t\t\t\t\tif (closestDataRange === UNDEFINED || distance < closestDataRange) {\n\t\t\t\t\t\t\tclosestDataRange = distance;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\taxis.minRange = mathMin(closestDataRange * 5, axis.dataMax - axis.dataMin);\n\t\t\t}\n\t\t}\n\n\t\t// if minRange is exceeded, adjust\n\t\tif (max - min < axis.minRange) {\n\t\t\tvar minRange = axis.minRange;\n\t\t\tzoomOffset = (minRange - max + min) / 2;\n\n\t\t\t// if min and max options have been set, don't go beyond it\n\t\t\tminArgs = [min - zoomOffset, pick(options.min, min - zoomOffset)];\n\t\t\tif (spaceAvailable) { // if space is available, stay within the data range\n\t\t\t\tminArgs[2] = axis.dataMin;\n\t\t\t}\n\t\t\tmin = arrayMax(minArgs);\n\n\t\t\tmaxArgs = [min + minRange, pick(options.max, min + minRange)];\n\t\t\tif (spaceAvailable) { // if space is availabe, stay within the data range\n\t\t\t\tmaxArgs[2] = axis.dataMax;\n\t\t\t}\n\n\t\t\tmax = arrayMin(maxArgs);\n\n\t\t\t// now if the max is adjusted, adjust the min back\n\t\t\tif (max - min < minRange) {\n\t\t\t\tminArgs[0] = max - minRange;\n\t\t\t\tminArgs[1] = pick(options.min, max - minRange);\n\t\t\t\tmin = arrayMax(minArgs);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Record modified extremes\n\t\taxis.min = min;\n\t\taxis.max = max;\n\t},\n\n\t/**\n\t * Update translation information\n\t */\n\tsetAxisTranslation: function (saveOld) {\n\t\tvar axis = this,\n\t\t\trange = axis.max - axis.min,\n\t\t\tpointRange = 0,\n\t\t\tclosestPointRange,\n\t\t\tminPointOffset = 0,\n\t\t\tpointRangePadding = 0,\n\t\t\tlinkedParent = axis.linkedParent,\n\t\t\tordinalCorrection,\n\t\t\ttransA = axis.transA;\n\n\t\t// adjust translation for padding\n\t\tif (axis.isXAxis) {\n\t\t\tif (linkedParent) {\n\t\t\t\tminPointOffset = linkedParent.minPointOffset;\n\t\t\t\tpointRangePadding = linkedParent.pointRangePadding;\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\teach(axis.series, function (series) {\n\t\t\t\t\tvar seriesPointRange = series.pointRange,\n\t\t\t\t\t\tpointPlacement = series.options.pointPlacement,\n\t\t\t\t\t\tseriesClosestPointRange = series.closestPointRange;\n\n\t\t\t\t\tif (seriesPointRange > range) { // #1446\n\t\t\t\t\t\tseriesPointRange = 0;\n\t\t\t\t\t}\n\t\t\t\t\tpointRange = mathMax(pointRange, seriesPointRange);\n\t\t\t\t\t\n\t\t\t\t\t// minPointOffset is the value padding to the left of the axis in order to make\n\t\t\t\t\t// room for points with a pointRange, typically columns. When the pointPlacement option\n\t\t\t\t\t// is 'between' or 'on', this padding does not apply.\n\t\t\t\t\tminPointOffset = mathMax(\n\t\t\t\t\t\tminPointOffset, \n\t\t\t\t\t\tisString(pointPlacement) ? 0 : seriesPointRange / 2\n\t\t\t\t\t);\n\t\t\t\t\t\n\t\t\t\t\t// Determine the total padding needed to the length of the axis to make room for the \n\t\t\t\t\t// pointRange. If the series' pointPlacement is 'on', no padding is added.\n\t\t\t\t\tpointRangePadding = mathMax(\n\t\t\t\t\t\tpointRangePadding,\n\t\t\t\t\t\tpointPlacement === 'on' ? 0 : seriesPointRange\n\t\t\t\t\t);\n\n\t\t\t\t\t// Set the closestPointRange\n\t\t\t\t\tif (!series.noSharedTooltip && defined(seriesClosestPointRange)) {\n\t\t\t\t\t\tclosestPointRange = defined(closestPointRange) ?\n\t\t\t\t\t\t\tmathMin(closestPointRange, seriesClosestPointRange) :\n\t\t\t\t\t\t\tseriesClosestPointRange;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t// Record minPointOffset and pointRangePadding\n\t\t\tordinalCorrection = axis.ordinalSlope && closestPointRange ? axis.ordinalSlope / closestPointRange : 1; // #988, #1853\n\t\t\taxis.minPointOffset = minPointOffset = minPointOffset * ordinalCorrection;\n\t\t\taxis.pointRangePadding = pointRangePadding = pointRangePadding * ordinalCorrection;\n\n\t\t\t// pointRange means the width reserved for each point, like in a column chart\n\t\t\taxis.pointRange = mathMin(pointRange, range);\n\n\t\t\t// closestPointRange means the closest distance between points. In columns\n\t\t\t// it is mostly equal to pointRange, but in lines pointRange is 0 while closestPointRange\n\t\t\t// is some other value\n\t\t\taxis.closestPointRange = closestPointRange;\n\t\t}\n\n\t\t// Secondary values\n\t\tif (saveOld) {\n\t\t\taxis.oldTransA = transA;\n\t\t}\n\t\taxis.translationSlope = axis.transA = transA = axis.len / ((range + pointRangePadding) || 1);\n\t\taxis.transB = axis.horiz ? axis.left : axis.bottom; // translation addend\n\t\taxis.minPixelPadding = transA * minPointOffset;\n\t},\n\n\t/**\n\t * Set the tick positions to round values and optionally extend the extremes\n\t * to the nearest tick\n\t */\n\tsetTickPositions: function (secondPass) {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\toptions = axis.options,\n\t\t\tisLog = axis.isLog,\n\t\t\tisDatetimeAxis = axis.isDatetimeAxis,\n\t\t\tisXAxis = axis.isXAxis,\n\t\t\tisLinked = axis.isLinked,\n\t\t\ttickPositioner = axis.options.tickPositioner,\n\t\t\tmaxPadding = options.maxPadding,\n\t\t\tminPadding = options.minPadding,\n\t\t\tlength,\n\t\t\tlinkedParentExtremes,\n\t\t\ttickIntervalOption = options.tickInterval,\n\t\t\tminTickIntervalOption = options.minTickInterval,\n\t\t\ttickPixelIntervalOption = options.tickPixelInterval,\n\t\t\ttickPositions,\n\t\t\tkeepTwoTicksOnly,\n\t\t\tcategories = axis.categories;\n\n\t\t// linked axis gets the extremes from the parent axis\n\t\tif (isLinked) {\n\t\t\taxis.linkedParent = chart[isXAxis ? 'xAxis' : 'yAxis'][options.linkedTo];\n\t\t\tlinkedParentExtremes = axis.linkedParent.getExtremes();\n\t\t\taxis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin);\n\t\t\taxis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax);\n\t\t\tif (options.type !== axis.linkedParent.options.type) {\n\t\t\t\terror(11, 1); // Can't link axes of different type\n\t\t\t}\n\t\t} else { // initial min and max from the extreme data values\n\t\t\taxis.min = pick(axis.userMin, options.min, axis.dataMin);\n\t\t\taxis.max = pick(axis.userMax, options.max, axis.dataMax);\n\t\t}\n\n\t\tif (isLog) {\n\t\t\tif (!secondPass && mathMin(axis.min, pick(axis.dataMin, axis.min)) <= 0) { // #978\n\t\t\t\terror(10, 1); // Can't plot negative values on log axis\n\t\t\t}\n\t\t\taxis.min = correctFloat(log2lin(axis.min)); // correctFloat cures #934\n\t\t\taxis.max = correctFloat(log2lin(axis.max));\n\t\t}\n\n\t\t// handle zoomed range\n\t\tif (axis.range) {\n\t\t\taxis.userMin = axis.min = mathMax(axis.min, axis.max - axis.range); // #618\n\t\t\taxis.userMax = axis.max;\n\t\t\tif (secondPass) {\n\t\t\t\taxis.range = null;  // don't use it when running setExtremes\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Hook for adjusting this.min and this.max. Used by bubble series.\n\t\tif (axis.beforePadding) {\n\t\t\taxis.beforePadding();\n\t\t}\n\n\t\t// adjust min and max for the minimum range\n\t\taxis.adjustForMinRange();\n\t\t\n\t\t// Pad the values to get clear of the chart's edges. To avoid tickInterval taking the padding\n\t\t// into account, we do this after computing tick interval (#1337).\n\t\tif (!categories && !axis.usePercentage && !isLinked && defined(axis.min) && defined(axis.max)) {\n\t\t\tlength = axis.max - axis.min;\n\t\t\tif (length) {\n\t\t\t\tif (!defined(options.min) && !defined(axis.userMin) && minPadding && (axis.dataMin < 0 || !axis.ignoreMinPadding)) {\n\t\t\t\t\taxis.min -= length * minPadding;\n\t\t\t\t}\n\t\t\t\tif (!defined(options.max) && !defined(axis.userMax)  && maxPadding && (axis.dataMax > 0 || !axis.ignoreMaxPadding)) {\n\t\t\t\t\taxis.max += length * maxPadding;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// get tickInterval\n\t\tif (axis.min === axis.max || axis.min === undefined || axis.max === undefined) {\n\t\t\taxis.tickInterval = 1;\n\t\t} else if (isLinked && !tickIntervalOption &&\n\t\t\t\ttickPixelIntervalOption === axis.linkedParent.options.tickPixelInterval) {\n\t\t\taxis.tickInterval = axis.linkedParent.tickInterval;\n\t\t} else {\n\t\t\taxis.tickInterval = pick(\n\t\t\t\ttickIntervalOption,\n\t\t\t\tcategories ? // for categoried axis, 1 is default, for linear axis use tickPix\n\t\t\t\t\t1 :\n\t\t\t\t\t// don't let it be more than the data range\n\t\t\t\t\t(axis.max - axis.min) * tickPixelIntervalOption / mathMax(axis.len, tickPixelIntervalOption)\n\t\t\t);\n\t\t\t// For squished axes, set only two ticks\n\t\t\tif (!defined(tickIntervalOption) && axis.len < tickPixelIntervalOption && !this.isRadial) {\n\t\t\t\tkeepTwoTicksOnly = true;\n\t\t\t\taxis.tickInterval /= 4; // tick extremes closer to the real values\n\t\t\t}\n\t\t}\n\n\t\t// Now we're finished detecting min and max, crop and group series data. This\n\t\t// is in turn needed in order to find tick positions in ordinal axes. \n\t\tif (isXAxis && !secondPass) {\n\t\t\teach(axis.series, function (series) {\n\t\t\t\tseries.processData(axis.min !== axis.oldMin || axis.max !== axis.oldMax);\n\t\t\t});\n\t\t}\n\n\t\t// set the translation factor used in translate function\n\t\taxis.setAxisTranslation(true);\n\n\t\t// hook for ordinal axes and radial axes\n\t\tif (axis.beforeSetTickPositions) {\n\t\t\taxis.beforeSetTickPositions();\n\t\t}\n\t\t\n\t\t// hook for extensions, used in Highstock ordinal axes\n\t\tif (axis.postProcessTickInterval) {\n\t\t\taxis.tickInterval = axis.postProcessTickInterval(axis.tickInterval);\n\t\t}\n\n\t\t// In column-like charts, don't cramp in more ticks than there are points (#1943)\n\t\tif (axis.pointRange) {\n\t\t\taxis.tickInterval = mathMax(axis.pointRange, axis.tickInterval);\n\t\t}\n\t\t\n\t\t// Before normalizing the tick interval, handle minimum tick interval. This applies only if tickInterval is not defined.\n\t\tif (!tickIntervalOption && axis.tickInterval < minTickIntervalOption) {\n\t\t\taxis.tickInterval = minTickIntervalOption;\n\t\t}\n\n\t\t// for linear axes, get magnitude and normalize the interval\n\t\tif (!isDatetimeAxis && !isLog) { // linear\n\t\t\tif (!tickIntervalOption) {\n\t\t\t\taxis.tickInterval = normalizeTickInterval(axis.tickInterval, null, getMagnitude(axis.tickInterval), options);\n\t\t\t}\n\t\t}\n\n\t\t// get minorTickInterval\n\t\taxis.minorTickInterval = options.minorTickInterval === 'auto' && axis.tickInterval ?\n\t\t\t\taxis.tickInterval / 5 : options.minorTickInterval;\n\n\t\t// find the tick positions\n\t\taxis.tickPositions = tickPositions = options.tickPositions ?\n\t\t\t[].concat(options.tickPositions) : // Work on a copy (#1565)\n\t\t\t(tickPositioner && tickPositioner.apply(axis, [axis.min, axis.max]));\n\t\tif (!tickPositions) {\n\t\t\t\n\t\t\t// Too many ticks\n\t\t\tif (!axis.ordinalPositions && (axis.max - axis.min) / axis.tickInterval > mathMax(2 * axis.len, 200)) {\n\t\t\t\terror(19, true);\n\t\t\t}\n\t\t\t\n\t\t\tif (isDatetimeAxis) {\n\t\t\t\ttickPositions = (axis.getNonLinearTimeTicks || getTimeTicks)(\n\t\t\t\t\tnormalizeTimeTickInterval(axis.tickInterval, options.units),\n\t\t\t\t\taxis.min,\n\t\t\t\t\taxis.max,\n\t\t\t\t\toptions.startOfWeek,\n\t\t\t\t\taxis.ordinalPositions,\n\t\t\t\t\taxis.closestPointRange,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t} else if (isLog) {\n\t\t\t\ttickPositions = axis.getLogTickPositions(axis.tickInterval, axis.min, axis.max);\n\t\t\t} else {\n\t\t\t\ttickPositions = axis.getLinearTickPositions(axis.tickInterval, axis.min, axis.max);\n\t\t\t}\n\t\t\tif (keepTwoTicksOnly) {\n\t\t\t\ttickPositions.splice(1, tickPositions.length - 2);\n\t\t\t}\n\n\t\t\taxis.tickPositions = tickPositions;\n\t\t}\n\n\t\tif (!isLinked) {\n\n\t\t\t// reset min/max or remove extremes based on start/end on tick\n\t\t\tvar roundedMin = tickPositions[0],\n\t\t\t\troundedMax = tickPositions[tickPositions.length - 1],\n\t\t\t\tminPointOffset = axis.minPointOffset || 0,\n\t\t\t\tsinglePad;\n\n\t\t\tif (options.startOnTick) {\n\t\t\t\taxis.min = roundedMin;\n\t\t\t} else if (axis.min - minPointOffset > roundedMin) {\n\t\t\t\ttickPositions.shift();\n\t\t\t}\n\n\t\t\tif (options.endOnTick) {\n\t\t\t\taxis.max = roundedMax;\n\t\t\t} else if (axis.max + minPointOffset < roundedMax) {\n\t\t\t\ttickPositions.pop();\n\t\t\t}\n\t\t\t\n\t\t\t// When there is only one point, or all points have the same value on this axis, then min\n\t\t\t// and max are equal and tickPositions.length is 1. In this case, add some padding\n\t\t\t// in order to center the point, but leave it with one tick. #1337.\n\t\t\tif (tickPositions.length === 1) {\n\t\t\t\tsinglePad = 0.001; // The lowest possible number to avoid extra padding on columns\n\t\t\t\taxis.min -= singlePad;\n\t\t\t\taxis.max += singlePad;\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Set the max ticks of either the x and y axis collection\n\t */\n\tsetMaxTicks: function () {\n\t\t\n\t\tvar chart = this.chart,\n\t\t\tmaxTicks = chart.maxTicks || {},\n\t\t\ttickPositions = this.tickPositions,\n\t\t\tkey = this._maxTicksKey = [this.xOrY, this.pos, this.len].join('-');\n\t\t\n\t\tif (!this.isLinked && !this.isDatetimeAxis && tickPositions && tickPositions.length > (maxTicks[key] || 0) && this.options.alignTicks !== false) {\n\t\t\tmaxTicks[key] = tickPositions.length;\n\t\t}\n\t\tchart.maxTicks = maxTicks;\n\t},\n\n\t/**\n\t * When using multiple axes, adjust the number of ticks to match the highest\n\t * number of ticks in that group\n\t */\n\tadjustTickAmount: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\tkey = axis._maxTicksKey,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\tmaxTicks = chart.maxTicks;\n\n\t\tif (maxTicks && maxTicks[key] && !axis.isDatetimeAxis && !axis.categories && !axis.isLinked && axis.options.alignTicks !== false) { // only apply to linear scale\n\t\t\tvar oldTickAmount = axis.tickAmount,\n\t\t\t\tcalculatedTickAmount = tickPositions.length,\n\t\t\t\ttickAmount;\n\n\t\t\t// set the axis-level tickAmount to use below\n\t\t\taxis.tickAmount = tickAmount = maxTicks[key];\n\n\t\t\tif (calculatedTickAmount < tickAmount) {\n\t\t\t\twhile (tickPositions.length < tickAmount) {\n\t\t\t\t\ttickPositions.push(correctFloat(\n\t\t\t\t\t\ttickPositions[tickPositions.length - 1] + axis.tickInterval\n\t\t\t\t\t));\n\t\t\t\t}\n\t\t\t\taxis.transA *= (calculatedTickAmount - 1) / (tickAmount - 1);\n\t\t\t\taxis.max = tickPositions[tickPositions.length - 1];\n\n\t\t\t}\n\t\t\tif (defined(oldTickAmount) && tickAmount !== oldTickAmount) {\n\t\t\t\taxis.isDirty = true;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set the scale based on data min and max, user set min and max or options\n\t *\n\t */\n\tsetScale: function () {\n\t\tvar axis = this,\n\t\t\tstacks = axis.stacks,\n\t\t\ttype,\n\t\t\ti,\n\t\t\tisDirtyData,\n\t\t\tisDirtyAxisLength;\n\n\t\taxis.oldMin = axis.min;\n\t\taxis.oldMax = axis.max;\n\t\taxis.oldAxisLength = axis.len;\n\n\t\t// set the new axisLength\n\t\taxis.setAxisSize();\n\t\t//axisLength = horiz ? axisWidth : axisHeight;\n\t\tisDirtyAxisLength = axis.len !== axis.oldAxisLength;\n\n\t\t// is there new data?\n\t\teach(axis.series, function (series) {\n\t\t\tif (series.isDirtyData || series.isDirty ||\n\t\t\t\t\tseries.xAxis.isDirty) { // when x axis is dirty, we need new data extremes for y as well\n\t\t\t\tisDirtyData = true;\n\t\t\t}\n\t\t});\n\n\t\t// do we really need to go through all this?\n\t\tif (isDirtyAxisLength || isDirtyData || axis.isLinked || axis.forceRedraw ||\n\t\t\taxis.userMin !== axis.oldUserMin || axis.userMax !== axis.oldUserMax) {\n\t\t\t\n\t\t\t// reset stacks\n\t\t\tif (!axis.isXAxis) {\n\t\t\t\tfor (type in stacks) {\n\t\t\t\t\tdelete stacks[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\taxis.forceRedraw = false;\n\n\t\t\t// get data extremes if needed\n\t\t\taxis.getSeriesExtremes();\n\n\t\t\t// get fixed positions based on tickInterval\n\t\t\taxis.setTickPositions();\n\n\t\t\t// record old values to decide whether a rescale is necessary later on (#540)\n\t\t\taxis.oldUserMin = axis.userMin;\n\t\t\taxis.oldUserMax = axis.userMax;\n\n\t\t\t// Mark as dirty if it is not already set to dirty and extremes have changed. #595.\n\t\t\tif (!axis.isDirty) {\n\t\t\t\taxis.isDirty = isDirtyAxisLength || axis.min !== axis.oldMin || axis.max !== axis.oldMax;\n\t\t\t}\n\t\t} else if (!axis.isXAxis) {\n\t\t\tif (axis.oldStacks) {\n\t\t\t\tstacks = axis.stacks = axis.oldStacks;\n\t\t\t}\n\n\t\t\t// reset stacks\n\t\t\tfor (type in stacks) {\n\t\t\t\tfor (i in stacks[type]) {\n\t\t\t\t\tstacks[type][i].cum = stacks[type][i].total;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Set the maximum tick amount\n\t\taxis.setMaxTicks();\n\t},\n\n\t/**\n\t * Set the extremes and optionally redraw\n\t * @param {Number} newMin\n\t * @param {Number} newMax\n\t * @param {Boolean} redraw\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t * @param {Object} eventArguments \n\t *\n\t */\n\tsetExtremes: function (newMin, newMax, redraw, animation, eventArguments) {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart;\n\n\t\tredraw = pick(redraw, true); // defaults to true\n\n\t\t// Extend the arguments with min and max\n\t\teventArguments = extend(eventArguments, {\n\t\t\tmin: newMin,\n\t\t\tmax: newMax\n\t\t});\n\n\t\t// Fire the event\n\t\tfireEvent(axis, 'setExtremes', eventArguments, function () { // the default event handler\n\n\t\t\taxis.userMin = newMin;\n\t\t\taxis.userMax = newMax;\n\t\t\taxis.eventArgs = eventArguments;\n\n\t\t\t// Mark for running afterSetExtremes\n\t\t\taxis.isDirtyExtremes = true;\n\n\t\t\t// redraw\n\t\t\tif (redraw) {\n\t\t\t\tchart.redraw(animation);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Overridable method for zooming chart. Pulled out in a separate method to allow overriding\n\t * in stock charts.\n\t */\n\tzoom: function (newMin, newMax) {\n\n\t\t// Prevent pinch zooming out of range. Check for defined is for #1946.\n\t\tif (!this.allowZoomOutside) {\n\t\t\tif (defined(this.dataMin) && newMin <= this.dataMin) {\n\t\t\t\tnewMin = UNDEFINED;\n\t\t\t}\n\t\t\tif (defined(this.dataMax) && newMax >= this.dataMax) {\n\t\t\t\tnewMax = UNDEFINED;\n\t\t\t}\n\t\t}\n\n\t\t// In full view, displaying the reset zoom button is not required\n\t\tthis.displayBtn = newMin !== UNDEFINED || newMax !== UNDEFINED;\n\t\t\n\t\t// Do it\n\t\tthis.setExtremes(\n\t\t\tnewMin,\n\t\t\tnewMax,\n\t\t\tfalse, \n\t\t\tUNDEFINED, \n\t\t\t{ trigger: 'zoom' }\n\t\t);\n\t\treturn true;\n\t},\n\t\n\t/**\n\t * Update the axis metrics\n\t */\n\tsetAxisSize: function () {\n\t\tvar chart = this.chart,\n\t\t\toptions = this.options,\n\t\t\toffsetLeft = options.offsetLeft || 0,\n\t\t\toffsetRight = options.offsetRight || 0,\n\t\t\thoriz = this.horiz,\n\t\t\twidth,\n\t\t\theight,\n\t\t\ttop,\n\t\t\tleft;\n\n\t\t// Expose basic values to use in Series object and navigator\n\t\tthis.left = left = pick(options.left, chart.plotLeft + offsetLeft);\n\t\tthis.top = top = pick(options.top, chart.plotTop);\n\t\tthis.width = width = pick(options.width, chart.plotWidth - offsetLeft + offsetRight);\n\t\tthis.height = height = pick(options.height, chart.plotHeight);\n\t\tthis.bottom = chart.chartHeight - height - top;\n\t\tthis.right = chart.chartWidth - width - left;\n\n\t\t// Direction agnostic properties\n\t\tthis.len = mathMax(horiz ? width : height, 0); // mathMax fixes #905\n\t\tthis.pos = horiz ? left : top; // distance from SVG origin\n\t},\n\n\t/**\n\t * Get the actual axis extremes\n\t */\n\tgetExtremes: function () {\n\t\tvar axis = this,\n\t\t\tisLog = axis.isLog;\n\n\t\treturn {\n\t\t\tmin: isLog ? correctFloat(lin2log(axis.min)) : axis.min,\n\t\t\tmax: isLog ? correctFloat(lin2log(axis.max)) : axis.max,\n\t\t\tdataMin: axis.dataMin,\n\t\t\tdataMax: axis.dataMax,\n\t\t\tuserMin: axis.userMin,\n\t\t\tuserMax: axis.userMax\n\t\t};\n\t},\n\n\t/**\n\t * Get the zero plane either based on zero or on the min or max value.\n\t * Used in bar and area plots\n\t */\n\tgetThreshold: function (threshold) {\n\t\tvar axis = this,\n\t\t\tisLog = axis.isLog;\n\n\t\tvar realMin = isLog ? lin2log(axis.min) : axis.min,\n\t\t\trealMax = isLog ? lin2log(axis.max) : axis.max;\n\t\t\n\t\tif (realMin > threshold || threshold === null) {\n\t\t\tthreshold = realMin;\n\t\t} else if (realMax < threshold) {\n\t\t\tthreshold = realMax;\n\t\t}\n\n\t\treturn axis.translate(threshold, 0, 1, 0, 1);\n\t},\n\n\taddPlotBand: function (options) {\n\t\tthis.addPlotBandOrLine(options, 'plotBands');\n\t},\n\t\n\taddPlotLine: function (options) {\n\t\tthis.addPlotBandOrLine(options, 'plotLines');\n\t},\n\n\t/**\n\t * Add a plot band or plot line after render time\n\t *\n\t * @param options {Object} The plotBand or plotLine configuration object\n\t */\n\taddPlotBandOrLine: function (options, coll) {\n\t\tvar obj = new PlotLineOrBand(this, options).render(),\n\t\t\tuserOptions = this.userOptions;\n\n\t\tif (obj) { // #2189\n\t\t\t// Add it to the user options for exporting and Axis.update\n\t\t\tif (coll) {\n\t\t\t\tuserOptions[coll] = userOptions[coll] || [];\n\t\t\t\tuserOptions[coll].push(options); \n\t\t\t}\n\t\t\tthis.plotLinesAndBands.push(obj); \n\t\t}\n\t\t\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Compute auto alignment for the axis label based on which side the axis is on \n\t * and the given rotation for the label\n\t */\n\tautoLabelAlign: function (rotation) {\n\t\tvar ret, \n\t\t\tangle = (pick(rotation, 0) - (this.side * 90) + 720) % 360;\n\n\t\tif (angle > 15 && angle < 165) {\n\t\t\tret = 'right';\n\t\t} else if (angle > 195 && angle < 345) {\n\t\t\tret = 'left';\n\t\t} else {\n\t\t\tret = 'center';\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Render the tick labels to a preliminary position to get their sizes\n\t */\n\tgetOffset: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = axis.options,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\tticks = axis.ticks,\n\t\t\thoriz = axis.horiz,\n\t\t\tside = axis.side,\n\t\t\tinvertedSide = chart.inverted ? [1, 0, 3, 2][side] : side,\n\t\t\thasData,\n\t\t\tshowAxis,\n\t\t\ttitleOffset = 0,\n\t\t\ttitleOffsetOption,\n\t\t\ttitleMargin = 0,\n\t\t\taxisTitleOptions = options.title,\n\t\t\tlabelOptions = options.labels,\n\t\t\tlabelOffset = 0, // reset\n\t\t\taxisOffset = chart.axisOffset,\n\t\t\tclipOffset = chart.clipOffset,\n\t\t\tdirectionFactor = [-1, 1, 1, -1][side],\n\t\t\tn,\n\t\t\ti,\n\t\t\tautoStaggerLines = 1,\n\t\t\tmaxStaggerLines = pick(labelOptions.maxStaggerLines, 5),\n\t\t\tsortedPositions,\n\t\t\tlastRight,\n\t\t\toverlap,\n\t\t\tpos,\n\t\t\tbBox,\n\t\t\tx,\n\t\t\tw,\n\t\t\tlineNo;\n\t\t\t\n\t\t// For reuse in Axis.render\n\t\taxis.hasData = hasData = (axis.hasVisibleSeries || (defined(axis.min) && defined(axis.max) && !!tickPositions));\n\t\taxis.showAxis = showAxis = hasData || pick(options.showEmpty, true);\n\n\t\t// Set/reset staggerLines\n\t\taxis.staggerLines = axis.horiz && labelOptions.staggerLines;\n\t\t\n\t\t// Create the axisGroup and gridGroup elements on first iteration\n\t\tif (!axis.axisGroup) {\n\t\t\taxis.gridGroup = renderer.g('grid')\n\t\t\t\t.attr({ zIndex: options.gridZIndex || 1 })\n\t\t\t\t.add();\n\t\t\taxis.axisGroup = renderer.g('axis')\n\t\t\t\t.attr({ zIndex: options.zIndex || 2 })\n\t\t\t\t.add();\n\t\t\taxis.labelGroup = renderer.g('axis-labels')\n\t\t\t\t.attr({ zIndex: labelOptions.zIndex || 7 })\n\t\t\t\t.add();\n\t\t}\n\n\t\tif (hasData || axis.isLinked) {\n\t\t\t\n\t\t\t// Set the explicit or automatic label alignment\n\t\t\taxis.labelAlign = pick(labelOptions.align || axis.autoLabelAlign(labelOptions.rotation));\n\n\t\t\teach(tickPositions, function (pos) {\n\t\t\t\tif (!ticks[pos]) {\n\t\t\t\t\tticks[pos] = new Tick(axis, pos);\n\t\t\t\t} else {\n\t\t\t\t\tticks[pos].addLabel(); // update labels depending on tick interval\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Handle automatic stagger lines\n\t\t\tif (axis.horiz && !axis.staggerLines && maxStaggerLines && !labelOptions.rotation) {\n\t\t\t\tsortedPositions = axis.reversed ? [].concat(tickPositions).reverse() : tickPositions;\n\t\t\t\twhile (autoStaggerLines < maxStaggerLines) {\n\t\t\t\t\tlastRight = [];\n\t\t\t\t\toverlap = false;\n\t\t\t\t\t\n\t\t\t\t\tfor (i = 0; i < sortedPositions.length; i++) {\n\t\t\t\t\t\tpos = sortedPositions[i];\n\t\t\t\t\t\tbBox = ticks[pos].label && ticks[pos].label.getBBox();\n\t\t\t\t\t\tw = bBox ? bBox.width : 0;\n\t\t\t\t\t\tlineNo = i % autoStaggerLines;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (w) {\n\t\t\t\t\t\t\tx = axis.translate(pos); // don't handle log\n\t\t\t\t\t\t\tif (lastRight[lineNo] !== UNDEFINED && x < lastRight[lineNo]) {\n\t\t\t\t\t\t\t\toverlap = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastRight[lineNo] = x + w;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (overlap) {\n\t\t\t\t\t\tautoStaggerLines++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (autoStaggerLines > 1) {\n\t\t\t\t\taxis.staggerLines = autoStaggerLines;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\teach(tickPositions, function (pos) {\n\t\t\t\t// left side must be align: right and right side must have align: left for labels\n\t\t\t\tif (side === 0 || side === 2 || { 1: 'left', 3: 'right' }[side] === axis.labelAlign) {\n\n\t\t\t\t\t// get the highest offset\n\t\t\t\t\tlabelOffset = mathMax(\n\t\t\t\t\t\tticks[pos].getLabelSize(),\n\t\t\t\t\t\tlabelOffset\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t});\n\t\t\tif (axis.staggerLines) {\n\t\t\t\tlabelOffset *= axis.staggerLines;\n\t\t\t\taxis.labelOffset = labelOffset;\n\t\t\t}\n\t\t\t\n\n\t\t} else { // doesn't have data\n\t\t\tfor (n in ticks) {\n\t\t\t\tticks[n].destroy();\n\t\t\t\tdelete ticks[n];\n\t\t\t}\n\t\t}\n\n\t\tif (axisTitleOptions && axisTitleOptions.text && axisTitleOptions.enabled !== false) { \n\t\t\tif (!axis.axisTitle) {\n\t\t\t\taxis.axisTitle = renderer.text(\n\t\t\t\t\taxisTitleOptions.text,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\taxisTitleOptions.useHTML\n\t\t\t\t)\n\t\t\t\t.attr({\n\t\t\t\t\tzIndex: 7,\n\t\t\t\t\trotation: axisTitleOptions.rotation || 0,\n\t\t\t\t\talign:\n\t\t\t\t\t\taxisTitleOptions.textAlign ||\n\t\t\t\t\t\t{ low: 'left', middle: 'center', high: 'right' }[axisTitleOptions.align]\n\t\t\t\t})\n\t\t\t\t.css(axisTitleOptions.style)\n\t\t\t\t.add(axis.axisGroup);\n\t\t\t\taxis.axisTitle.isNew = true;\n\t\t\t}\n\n\t\t\tif (showAxis) {\n\t\t\t\ttitleOffset = axis.axisTitle.getBBox()[horiz ? 'height' : 'width'];\n\t\t\t\ttitleMargin = pick(axisTitleOptions.margin, horiz ? 5 : 10);\n\t\t\t\ttitleOffsetOption = axisTitleOptions.offset;\n\t\t\t}\n\n\t\t\t// hide or show the title depending on whether showEmpty is set\n\t\t\taxis.axisTitle[showAxis ? 'show' : 'hide']();\n\t\t}\n\t\t\n\t\t// handle automatic or user set offset\n\t\taxis.offset = directionFactor * pick(options.offset, axisOffset[side]);\n\t\t\n\t\taxis.axisTitleMargin =\n\t\t\tpick(titleOffsetOption,\n\t\t\t\tlabelOffset + titleMargin +\n\t\t\t\t(side !== 2 && labelOffset && directionFactor * options.labels[horiz ? 'y' : 'x'])\n\t\t\t);\n\n\t\taxisOffset[side] = mathMax(\n\t\t\taxisOffset[side],\n\t\t\taxis.axisTitleMargin + titleOffset + directionFactor * axis.offset\n\t\t);\n\t\tclipOffset[invertedSide] = mathMax(clipOffset[invertedSide], mathFloor(options.lineWidth / 2) * 2);\n\t},\n\t\n\t/**\n\t * Get the path for the axis line\n\t */\n\tgetLinePath: function (lineWidth) {\n\t\tvar chart = this.chart,\n\t\t\topposite = this.opposite,\n\t\t\toffset = this.offset,\n\t\t\thoriz = this.horiz,\n\t\t\tlineLeft = this.left + (opposite ? this.width : 0) + offset,\n\t\t\tlineTop = chart.chartHeight - this.bottom - (opposite ? this.height : 0) + offset;\n\t\t\t\n\t\tif (opposite) {\n\t\t\tlineWidth *= -1; // crispify the other way - #1480, #1687\n\t\t}\n\n\t\treturn chart.renderer.crispLine([\n\t\t\t\tM,\n\t\t\t\thoriz ?\n\t\t\t\t\tthis.left :\n\t\t\t\t\tlineLeft,\n\t\t\t\thoriz ?\n\t\t\t\t\tlineTop :\n\t\t\t\t\tthis.top,\n\t\t\t\tL,\n\t\t\t\thoriz ?\n\t\t\t\t\tchart.chartWidth - this.right :\n\t\t\t\t\tlineLeft,\n\t\t\t\thoriz ?\n\t\t\t\t\tlineTop :\n\t\t\t\t\tchart.chartHeight - this.bottom\n\t\t\t], lineWidth);\n\t},\n\t\n\t/**\n\t * Position the title\n\t */\n\tgetTitlePosition: function () {\n\t\t// compute anchor points for each of the title align options\n\t\tvar horiz = this.horiz,\n\t\t\taxisLeft = this.left,\n\t\t\taxisTop = this.top,\n\t\t\taxisLength = this.len,\n\t\t\taxisTitleOptions = this.options.title,\t\t\t\n\t\t\tmargin = horiz ? axisLeft : axisTop,\n\t\t\topposite = this.opposite,\n\t\t\toffset = this.offset,\n\t\t\tfontSize = pInt(axisTitleOptions.style.fontSize || 12),\n\t\t\t\n\t\t\t// the position in the length direction of the axis\n\t\t\talongAxis = {\n\t\t\t\tlow: margin + (horiz ? 0 : axisLength),\n\t\t\t\tmiddle: margin + axisLength / 2,\n\t\t\t\thigh: margin + (horiz ? axisLength : 0)\n\t\t\t}[axisTitleOptions.align],\n\t\n\t\t\t// the position in the perpendicular direction of the axis\n\t\t\toffAxis = (horiz ? axisTop + this.height : axisLeft) +\n\t\t\t\t(horiz ? 1 : -1) * // horizontal axis reverses the margin\n\t\t\t\t(opposite ? -1 : 1) * // so does opposite axes\n\t\t\t\tthis.axisTitleMargin +\n\t\t\t\t(this.side === 2 ? fontSize : 0);\n\n\t\treturn {\n\t\t\tx: horiz ?\n\t\t\t\talongAxis :\n\t\t\t\toffAxis + (opposite ? this.width : 0) + offset +\n\t\t\t\t\t(axisTitleOptions.x || 0), // x\n\t\t\ty: horiz ?\n\t\t\t\toffAxis - (opposite ? this.height : 0) + offset :\n\t\t\t\talongAxis + (axisTitleOptions.y || 0) // y\n\t\t};\n\t},\n\t\n\t/**\n\t * Render the axis\n\t */\n\trender: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = axis.options,\n\t\t\tisLog = axis.isLog,\n\t\t\tisLinked = axis.isLinked,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\taxisTitle = axis.axisTitle,\n\t\t\tstacks = axis.stacks,\n\t\t\tticks = axis.ticks,\n\t\t\tminorTicks = axis.minorTicks,\n\t\t\talternateBands = axis.alternateBands,\n\t\t\tstackLabelOptions = options.stackLabels,\n\t\t\talternateGridColor = options.alternateGridColor,\n\t\t\ttickmarkOffset = axis.tickmarkOffset,\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tlinePath,\n\t\t\thasRendered = chart.hasRendered,\n\t\t\tslideInTicks = hasRendered && defined(axis.oldMin) && !isNaN(axis.oldMin),\n\t\t\thasData = axis.hasData,\n\t\t\tshowAxis = axis.showAxis,\n\t\t\tfrom,\n\t\t\tto;\n\n\t\t// Mark all elements inActive before we go over and mark the active ones\n\t\teach([ticks, minorTicks, alternateBands], function (coll) {\n\t\t\tvar pos;\n\t\t\tfor (pos in coll) {\n\t\t\t\tcoll[pos].isActive = false;\n\t\t\t}\n\t\t});\n\n\t\t// If the series has data draw the ticks. Else only the line and title\n\t\tif (hasData || isLinked) {\n\n\t\t\t// minor ticks\n\t\t\tif (axis.minorTickInterval && !axis.categories) {\n\t\t\t\teach(axis.getMinorTickPositions(), function (pos) {\n\t\t\t\t\tif (!minorTicks[pos]) {\n\t\t\t\t\t\tminorTicks[pos] = new Tick(axis, pos, 'minor');\n\t\t\t\t\t}\n\n\t\t\t\t\t// render new ticks in old position\n\t\t\t\t\tif (slideInTicks && minorTicks[pos].isNew) {\n\t\t\t\t\t\tminorTicks[pos].render(null, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tminorTicks[pos].render(null, false, 1);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Major ticks. Pull out the first item and render it last so that\n\t\t\t// we can get the position of the neighbour label. #808.\n\t\t\tif (tickPositions.length) { // #1300\n\t\t\t\teach(tickPositions.slice(1).concat([tickPositions[0]]), function (pos, i) {\n\t\n\t\t\t\t\t// Reorganize the indices\n\t\t\t\t\ti = (i === tickPositions.length - 1) ? 0 : i + 1;\n\t\n\t\t\t\t\t// linked axes need an extra check to find out if\n\t\t\t\t\tif (!isLinked || (pos >= axis.min && pos <= axis.max)) {\n\t\n\t\t\t\t\t\tif (!ticks[pos]) {\n\t\t\t\t\t\t\tticks[pos] = new Tick(axis, pos);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// render new ticks in old position\n\t\t\t\t\t\tif (slideInTicks && ticks[pos].isNew) {\n\t\t\t\t\t\t\tticks[pos].render(i, true);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tticks[pos].render(i, false, 1);\n\t\t\t\t\t}\n\t\n\t\t\t\t});\n\t\t\t\t// In a categorized axis, the tick marks are displayed between labels. So\n\t\t\t\t// we need to add a tick mark and grid line at the left edge of the X axis.\n\t\t\t\tif (tickmarkOffset && axis.min === 0) {\n\t\t\t\t\tif (!ticks[-1]) {\n\t\t\t\t\t\tticks[-1] = new Tick(axis, -1, null, true);\n\t\t\t\t\t}\n\t\t\t\t\tticks[-1].render(-1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\n\t\t\t// alternate grid color\n\t\t\tif (alternateGridColor) {\n\t\t\t\teach(tickPositions, function (pos, i) {\n\t\t\t\t\tif (i % 2 === 0 && pos < axis.max) {\n\t\t\t\t\t\tif (!alternateBands[pos]) {\n\t\t\t\t\t\t\talternateBands[pos] = new PlotLineOrBand(axis);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfrom = pos + tickmarkOffset; // #949\n\t\t\t\t\t\tto = tickPositions[i + 1] !== UNDEFINED ? tickPositions[i + 1] + tickmarkOffset : axis.max;\n\t\t\t\t\t\talternateBands[pos].options = {\n\t\t\t\t\t\t\tfrom: isLog ? lin2log(from) : from,\n\t\t\t\t\t\t\tto: isLog ? lin2log(to) : to,\n\t\t\t\t\t\t\tcolor: alternateGridColor\n\t\t\t\t\t\t};\n\t\t\t\t\t\talternateBands[pos].render();\n\t\t\t\t\t\talternateBands[pos].isActive = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// custom plot lines and bands\n\t\t\tif (!axis._addedPlotLB) { // only first time\n\t\t\t\teach((options.plotLines || []).concat(options.plotBands || []), function (plotLineOptions) {\n\t\t\t\t\taxis.addPlotBandOrLine(plotLineOptions);\n\t\t\t\t});\n\t\t\t\taxis._addedPlotLB = true;\n\t\t\t}\n\n\t\t} // end if hasData\n\n\t\t// Remove inactive ticks\n\t\teach([ticks, minorTicks, alternateBands], function (coll) {\n\t\t\tvar pos, \n\t\t\t\ti,\n\t\t\t\tforDestruction = [],\n\t\t\t\tdelay = globalAnimation ? globalAnimation.duration || 500 : 0,\n\t\t\t\tdestroyInactiveItems = function () {\n\t\t\t\t\ti = forDestruction.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t// When resizing rapidly, the same items may be destroyed in different timeouts,\n\t\t\t\t\t\t// or the may be reactivated\n\t\t\t\t\t\tif (coll[forDestruction[i]] && !coll[forDestruction[i]].isActive) {\n\t\t\t\t\t\t\tcoll[forDestruction[i]].destroy();\n\t\t\t\t\t\t\tdelete coll[forDestruction[i]];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t};\n\n\t\t\tfor (pos in coll) {\n\n\t\t\t\tif (!coll[pos].isActive) {\n\t\t\t\t\t// Render to zero opacity\n\t\t\t\t\tcoll[pos].render(pos, false, 0);\n\t\t\t\t\tcoll[pos].isActive = false;\n\t\t\t\t\tforDestruction.push(pos);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// When the objects are finished fading out, destroy them\n\t\t\tif (coll === alternateBands || !chart.hasRendered || !delay) {\n\t\t\t\tdestroyInactiveItems();\n\t\t\t} else if (delay) {\n\t\t\t\tsetTimeout(destroyInactiveItems, delay);\n\t\t\t}\n\t\t});\n\n\t\t// Static items. As the axis group is cleared on subsequent calls\n\t\t// to render, these items are added outside the group.\n\t\t// axis line\n\t\tif (lineWidth) {\n\t\t\tlinePath = axis.getLinePath(lineWidth);\n\t\t\tif (!axis.axisLine) {\n\t\t\t\taxis.axisLine = renderer.path(linePath)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tstroke: options.lineColor,\n\t\t\t\t\t\t'stroke-width': lineWidth,\n\t\t\t\t\t\tzIndex: 7\n\t\t\t\t\t})\n\t\t\t\t\t.add(axis.axisGroup);\n\t\t\t} else {\n\t\t\t\taxis.axisLine.animate({ d: linePath });\n\t\t\t}\n\n\t\t\t// show or hide the line depending on options.showEmpty\n\t\t\taxis.axisLine[showAxis ? 'show' : 'hide']();\n\t\t}\n\n\t\tif (axisTitle && showAxis) {\n\t\t\t\n\t\t\taxisTitle[axisTitle.isNew ? 'attr' : 'animate'](\n\t\t\t\taxis.getTitlePosition()\n\t\t\t);\n\t\t\taxisTitle.isNew = false;\n\t\t}\n\n\t\t// Stacked totals:\n\t\tif (stackLabelOptions && stackLabelOptions.enabled) {\n\t\t\tvar stackKey, oneStack, stackCategory,\n\t\t\t\tstackTotalGroup = axis.stackTotalGroup;\n\n\t\t\t// Create a separate group for the stack total labels\n\t\t\tif (!stackTotalGroup) {\n\t\t\t\taxis.stackTotalGroup = stackTotalGroup =\n\t\t\t\t\trenderer.g('stack-labels')\n\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\tvisibility: VISIBLE,\n\t\t\t\t\t\t\tzIndex: 6\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.add();\n\t\t\t}\n\n\t\t\t// plotLeft/Top will change when y axis gets wider so we need to translate the\n\t\t\t// stackTotalGroup at every render call. See bug #506 and #516\n\t\t\tstackTotalGroup.translate(chart.plotLeft, chart.plotTop);\n\n\t\t\t// Render each stack total\n\t\t\tfor (stackKey in stacks) {\n\t\t\t\toneStack = stacks[stackKey];\n\t\t\t\tfor (stackCategory in oneStack) {\n\t\t\t\t\toneStack[stackCategory].render(stackTotalGroup);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// End stacked totals\n\n\t\taxis.isDirty = false;\n\t},\n\n\t/**\n\t * Remove a plot band or plot line from the chart by id\n\t * @param {Object} id\n\t */\n\tremovePlotBandOrLine: function (id) {\n\t\tvar plotLinesAndBands = this.plotLinesAndBands,\n\t\t\toptions = this.options,\n\t\t\tuserOptions = this.userOptions,\n\t\t\ti = plotLinesAndBands.length;\n\t\twhile (i--) {\n\t\t\tif (plotLinesAndBands[i].id === id) {\n\t\t\t\tplotLinesAndBands[i].destroy();\n\t\t\t}\n\t\t}\n\t\teach([options.plotLines || [], userOptions.plotLines || [], options.plotBands || [], userOptions.plotBands || []], function (arr) {\n\t\t\ti = arr.length;\n\t\t\twhile (i--) {\n\t\t\t\tif (arr[i].id === id) {\n\t\t\t\t\terase(arr, arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t},\n\n\t/**\n\t * Update the axis title by options\n\t */\n\tsetTitle: function (newTitleOptions, redraw) {\n\t\tthis.update({ title: newTitleOptions }, redraw);\n\t},\n\n\t/**\n\t * Redraw the axis to reflect changes in the data or axis extremes\n\t */\n\tredraw: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\tpointer = chart.pointer;\n\n\t\t// hide tooltip and hover states\n\t\tif (pointer.reset) {\n\t\t\tpointer.reset(true);\n\t\t}\n\n\t\t// render the axis\n\t\taxis.render();\n\n\t\t// move plot lines and bands\n\t\teach(axis.plotLinesAndBands, function (plotLine) {\n\t\t\tplotLine.render();\n\t\t});\n\n\t\t// mark associated series as dirty and ready for redraw\n\t\teach(axis.series, function (series) {\n\t\t\tseries.isDirty = true;\n\t\t});\n\n\t},\n\n\t/**\n\t * Build the stacks from top down\n\t */\n\tbuildStacks: function () {\n\t\tvar series = this.series,\n\t\t\ti = series.length;\n\t\tif (!this.isXAxis) {\n\t\t\twhile (i--) {\n\t\t\t\tseries[i].setStackedPoints();\n\t\t\t}\n\t\t\t// Loop up again to compute percent stack\n\t\t\tif (this.usePercentage) {\n\t\t\t\tfor (i = 0; i < series.length; i++) {\n\t\t\t\t\tseries[i].setPercentStacks();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set new axis categories and optionally redraw\n\t * @param {Array} categories\n\t * @param {Boolean} redraw\n\t */\n\tsetCategories: function (categories, redraw) {\n\t\tthis.update({ categories: categories }, redraw);\n\t},\n\n\t/**\n\t * Destroys an Axis instance.\n\t */\n\tdestroy: function (keepEvents) {\n\t\tvar axis = this,\n\t\t\tstacks = axis.stacks,\n\t\t\tstackKey,\n\t\t\tplotLinesAndBands = axis.plotLinesAndBands,\n\t\t\ti;\n\n\t\t// Remove the events\n\t\tif (!keepEvents) {\n\t\t\tremoveEvent(axis);\n\t\t}\n\n\t\t// Destroy each stack total\n\t\tfor (stackKey in stacks) {\n\t\t\tdestroyObjectProperties(stacks[stackKey]);\n\n\t\t\tstacks[stackKey] = null;\n\t\t}\n\n\t\t// Destroy collections\n\t\teach([axis.ticks, axis.minorTicks, axis.alternateBands], function (coll) {\n\t\t\tdestroyObjectProperties(coll);\n\t\t});\n\t\ti = plotLinesAndBands.length;\n\t\twhile (i--) { // #1975\n\t\t\tplotLinesAndBands[i].destroy();\n\t\t}\n\n\t\t// Destroy local variables\n\t\teach(['stackTotalGroup', 'axisLine', 'axisGroup', 'gridGroup', 'labelGroup', 'axisTitle'], function (prop) {\n\t\t\tif (axis[prop]) {\n\t\t\t\taxis[prop] = axis[prop].destroy();\n\t\t\t}\n\t\t});\n\t}\n\n\t\n}; // end Axis\n\n/**\n * The tooltip object\n * @param {Object} chart The chart instance\n * @param {Object} options Tooltip options\n */\nfunction Tooltip() {\n\tthis.init.apply(this, arguments);\n}\n\nTooltip.prototype = {\n\n\tinit: function (chart, options) {\n\n\t\tvar borderWidth = options.borderWidth,\n\t\t\tstyle = options.style,\n\t\t\tpadding = pInt(style.padding);\n\n\t\t// Save the chart and options\n\t\tthis.chart = chart;\n\t\tthis.options = options;\n\n\t\t// Keep track of the current series\n\t\t//this.currentSeries = UNDEFINED;\n\n\t\t// List of crosshairs\n\t\tthis.crosshairs = [];\n\n\t\t// Current values of x and y when animating\n\t\tthis.now = { x: 0, y: 0 };\n\n\t\t// The tooltip is initially hidden\n\t\tthis.isHidden = true;\n\n\n\t\t// create the label\n\t\tthis.label = chart.renderer.label('', 0, 0, options.shape, null, null, options.useHTML, null, 'tooltip')\n\t\t\t.attr({\n\t\t\t\tpadding: padding,\n\t\t\t\tfill: options.backgroundColor,\n\t\t\t\t'stroke-width': borderWidth,\n\t\t\t\tr: options.borderRadius,\n\t\t\t\tzIndex: 8\n\t\t\t})\n\t\t\t.css(style)\n\t\t\t.css({ padding: 0 }) // Remove it from VML, the padding is applied as an attribute instead (#1117)\n\t\t\t.add()\n\t\t\t.attr({ y: -999 }); // #2301\n\n\t\t// When using canVG the shadow shows up as a gray circle\n\t\t// even if the tooltip is hidden.\n\t\tif (!useCanVG) {\n\t\t\tthis.label.shadow(options.shadow);\n\t\t}\n\n\t\t// Public property for getting the shared state.\n\t\tthis.shared = options.shared;\n\t},\n\n\t/**\n\t * Destroy the tooltip and its elements.\n\t */\n\tdestroy: function () {\n\t\teach(this.crosshairs, function (crosshair) {\n\t\t\tif (crosshair) {\n\t\t\t\tcrosshair.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// Destroy and clear local variables\n\t\tif (this.label) {\n\t\t\tthis.label = this.label.destroy();\n\t\t}\n\t\tclearTimeout(this.hideTimer);\n\t\tclearTimeout(this.tooltipTimeout);\n\t},\n\n\t/**\n\t * Provide a soft movement for the tooltip\n\t *\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @private\n\t */\n\tmove: function (x, y, anchorX, anchorY) {\n\t\tvar tooltip = this,\n\t\t\tnow = tooltip.now,\n\t\t\tanimate = tooltip.options.animation !== false && !tooltip.isHidden;\n\n\t\t// get intermediate values for animation\n\t\textend(now, {\n\t\t\tx: animate ? (2 * now.x + x) / 3 : x,\n\t\t\ty: animate ? (now.y + y) / 2 : y,\n\t\t\tanchorX: animate ? (2 * now.anchorX + anchorX) / 3 : anchorX,\n\t\t\tanchorY: animate ? (now.anchorY + anchorY) / 2 : anchorY\n\t\t});\n\n\t\t// move to the intermediate value\n\t\ttooltip.label.attr(now);\n\n\t\t\n\t\t// run on next tick of the mouse tracker\n\t\tif (animate && (mathAbs(x - now.x) > 1 || mathAbs(y - now.y) > 1)) {\n\t\t\n\t\t\t// never allow two timeouts\n\t\t\tclearTimeout(this.tooltipTimeout);\n\t\t\t\n\t\t\t// set the fixed interval ticking for the smooth tooltip\n\t\t\tthis.tooltipTimeout = setTimeout(function () {\n\t\t\t\t// The interval function may still be running during destroy, so check that the chart is really there before calling.\n\t\t\t\tif (tooltip) {\n\t\t\t\t\ttooltip.move(x, y, anchorX, anchorY);\n\t\t\t\t}\n\t\t\t}, 32);\n\t\t\t\n\t\t}\n\t},\n\n\t/**\n\t * Hide the tooltip\n\t */\n\thide: function () {\n\t\tvar tooltip = this,\n\t\t\thoverPoints;\n\t\t\n\t\tclearTimeout(this.hideTimer); // disallow duplicate timers (#1728, #1766)\n\t\tif (!this.isHidden) {\n\t\t\thoverPoints = this.chart.hoverPoints;\n\n\t\t\tthis.hideTimer = setTimeout(function () {\n\t\t\t\ttooltip.label.fadeOut();\n\t\t\t\ttooltip.isHidden = true;\n\t\t\t}, pick(this.options.hideDelay, 500));\n\n\t\t\t// hide previous hoverPoints and set new\n\t\t\tif (hoverPoints) {\n\t\t\t\teach(hoverPoints, function (point) {\n\t\t\t\t\tpoint.setState();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.chart.hoverPoints = null;\n\t\t}\n\t},\n\n\t/**\n\t * Hide the crosshairs\n\t */\n\thideCrosshairs: function () {\n\t\teach(this.crosshairs, function (crosshair) {\n\t\t\tif (crosshair) {\n\t\t\t\tcrosshair.hide();\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** \n\t * Extendable method to get the anchor position of the tooltip\n\t * from a point or set of points\n\t */\n\tgetAnchor: function (points, mouseEvent) {\n\t\tvar ret,\n\t\t\tchart = this.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotX = 0,\n\t\t\tplotY = 0,\n\t\t\tyAxis;\n\t\t\n\t\tpoints = splat(points);\n\t\t\n\t\t// Pie uses a special tooltipPos\n\t\tret = points[0].tooltipPos;\n\t\t\n\t\t// When tooltip follows mouse, relate the position to the mouse\n\t\tif (this.followPointer && mouseEvent) {\n\t\t\tif (mouseEvent.chartX === UNDEFINED) {\n\t\t\t\tmouseEvent = chart.pointer.normalize(mouseEvent);\n\t\t\t}\n\t\t\tret = [\n\t\t\t\tmouseEvent.chartX - chart.plotLeft,\n\t\t\t\tmouseEvent.chartY - plotTop\n\t\t\t];\n\t\t}\n\t\t// When shared, use the average position\n\t\tif (!ret) {\n\t\t\teach(points, function (point) {\n\t\t\t\tyAxis = point.series.yAxis;\n\t\t\t\tplotX += point.plotX;\n\t\t\t\tplotY += (point.plotLow ? (point.plotLow + point.plotHigh) / 2 : point.plotY) +\n\t\t\t\t\t(!inverted && yAxis ? yAxis.top - plotTop : 0); // #1151\n\t\t\t});\n\t\t\t\n\t\t\tplotX /= points.length;\n\t\t\tplotY /= points.length;\n\t\t\t\n\t\t\tret = [\n\t\t\t\tinverted ? chart.plotWidth - plotY : plotX,\n\t\t\t\tthis.shared && !inverted && points.length > 1 && mouseEvent ? \n\t\t\t\t\tmouseEvent.chartY - plotTop : // place shared tooltip next to the mouse (#424)\n\t\t\t\t\tinverted ? chart.plotHeight - plotX : plotY\n\t\t\t];\n\t\t}\n\n\t\treturn map(ret, mathRound);\n\t},\n\t\n\t/**\n\t * Place the tooltip in a chart without spilling over\n\t * and not covering the point it self.\n\t */\n\tgetPosition: function (boxWidth, boxHeight, point) {\n\t\t\n\t\t// Set up the variables\n\t\tvar chart = this.chart,\n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tdistance = pick(this.options.distance, 12),\n\t\t\tpointX = point.plotX,\n\t\t\tpointY = point.plotY,\n\t\t\tx = pointX + plotLeft + (chart.inverted ? distance : -boxWidth - distance),\n\t\t\ty = pointY - boxHeight + plotTop + 15, // 15 means the point is 15 pixels up from the bottom of the tooltip\n\t\t\talignedRight;\n\t\n\t\t// It is too far to the left, adjust it\n\t\tif (x < 7) {\n\t\t\tx = plotLeft + mathMax(pointX, 0) + distance;\n\t\t}\n\t\n\t\t// Test to see if the tooltip is too far to the right,\n\t\t// if it is, move it back to be inside and then up to not cover the point.\n\t\tif ((x + boxWidth) > (plotLeft + plotWidth)) {\n\t\t\tx -= (x + boxWidth) - (plotLeft + plotWidth);\n\t\t\ty = pointY - boxHeight + plotTop - distance;\n\t\t\talignedRight = true;\n\t\t}\n\t\n\t\t// If it is now above the plot area, align it to the top of the plot area\n\t\tif (y < plotTop + 5) {\n\t\t\ty = plotTop + 5;\n\t\n\t\t\t// If the tooltip is still covering the point, move it below instead\n\t\t\tif (alignedRight && pointY >= y && pointY <= (y + boxHeight)) {\n\t\t\t\ty = pointY + plotTop + distance; // below\n\t\t\t}\n\t\t} \n\t\n\t\t// Now if the tooltip is below the chart, move it up. It's better to cover the\n\t\t// point than to disappear outside the chart. #834.\n\t\tif (y + boxHeight > plotTop + plotHeight) {\n\t\t\ty = mathMax(plotTop, plotTop + plotHeight - boxHeight - distance); // below\n\t\t}\n\t\n\t\treturn {x: x, y: y};\n\t},\n\n\t/**\n\t * In case no user defined formatter is given, this will be used. Note that the context\n\t * here is an object holding point, series, x, y etc.\n\t */\n\tdefaultFormatter: function (tooltip) {\n\t\tvar items = this.points || splat(this),\n\t\t\tseries = items[0].series,\n\t\t\ts;\n\n\t\t// build the header\n\t\ts = [series.tooltipHeaderFormatter(items[0])];\n\n\t\t// build the values\n\t\teach(items, function (item) {\n\t\t\tseries = item.series;\n\t\t\ts.push((series.tooltipFormatter && series.tooltipFormatter(item)) ||\n\t\t\t\titem.point.tooltipFormatter(series.tooltipOptions.pointFormat));\n\t\t});\n\n\t\t// footer\n\t\ts.push(tooltip.options.footerFormat || '');\n\n\t\treturn s.join('');\n\t},\n\n\t/**\n\t * Refresh the tooltip's text and position.\n\t * @param {Object} point\n\t */\n\trefresh: function (point, mouseEvent) {\n\t\tvar tooltip = this,\n\t\t\tchart = tooltip.chart,\n\t\t\tlabel = tooltip.label,\n\t\t\toptions = tooltip.options,\n\t\t\tx,\n\t\t\ty,\n\t\t\tanchor,\n\t\t\ttextConfig = {},\n\t\t\ttext,\n\t\t\tpointConfig = [],\n\t\t\tformatter = options.formatter || tooltip.defaultFormatter,\n\t\t\thoverPoints = chart.hoverPoints,\n\t\t\tborderColor,\n\t\t\tcrosshairsOptions = options.crosshairs,\n\t\t\tshared = tooltip.shared,\n\t\t\tcurrentSeries;\n\t\t\t\n\t\tclearTimeout(this.hideTimer);\n\t\t\n\t\t// get the reference point coordinates (pie charts use tooltipPos)\n\t\ttooltip.followPointer = splat(point)[0].series.tooltipOptions.followPointer;\n\t\tanchor = tooltip.getAnchor(point, mouseEvent);\n\t\tx = anchor[0];\n\t\ty = anchor[1];\n\n\t\t// shared tooltip, array is sent over\n\t\tif (shared && !(point.series && point.series.noSharedTooltip)) {\n\t\t\t\n\t\t\t// hide previous hoverPoints and set new\n\t\t\t\n\t\t\tchart.hoverPoints = point;\n\t\t\tif (hoverPoints) {\n\t\t\t\teach(hoverPoints, function (point) {\n\t\t\t\t\tpoint.setState();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\teach(point, function (item) {\n\t\t\t\titem.setState(HOVER_STATE);\n\n\t\t\t\tpointConfig.push(item.getLabelConfig());\n\t\t\t});\n\n\t\t\ttextConfig = {\n\t\t\t\tx: point[0].category,\n\t\t\t\ty: point[0].y\n\t\t\t};\n\t\t\ttextConfig.points = pointConfig;\n\t\t\tpoint = point[0];\n\n\t\t// single point tooltip\n\t\t} else {\n\t\t\ttextConfig = point.getLabelConfig();\n\t\t}\n\t\ttext = formatter.call(textConfig, tooltip);\n\n\t\t// register the current series\n\t\tcurrentSeries = point.series;\n\n\t\t// update the inner HTML\n\t\tif (text === false) {\n\t\t\tthis.hide();\n\t\t} else {\n\n\t\t\t// show it\n\t\t\tif (tooltip.isHidden) {\n\t\t\t\tstop(label);\n\t\t\t\tlabel.attr('opacity', 1).show();\n\t\t\t}\n\n\t\t\t// update text\n\t\t\tlabel.attr({\n\t\t\t\ttext: text\n\t\t\t});\n\n\t\t\t// set the stroke color of the box\n\t\t\tborderColor = options.borderColor || point.color || currentSeries.color || '#606060';\n\t\t\tlabel.attr({\n\t\t\t\tstroke: borderColor\n\t\t\t});\n\t\t\t\n\t\t\ttooltip.updatePosition({ plotX: x, plotY: y });\n\t\t\n\t\t\tthis.isHidden = false;\n\t\t}\n\n\t\t// crosshairs\n\t\tif (crosshairsOptions) {\n\t\t\tcrosshairsOptions = splat(crosshairsOptions); // [x, y]\n\n\t\t\tvar path,\n\t\t\t\ti = crosshairsOptions.length,\n\t\t\t\tattribs,\n\t\t\t\taxis,\n\t\t\t\tval,\n\t\t\t\tseries;\n\n\t\t\twhile (i--) {\n\t\t\t\tseries = point.series;\n\t\t\t\taxis = series[i ? 'yAxis' : 'xAxis'];\n\t\t\t\tif (crosshairsOptions[i] && axis) {\n\t\t\t\t\tval = i ? pick(point.stackY, point.y) : point.x; // #814\n\t\t\t\t\tif (axis.isLog) { // #1671\n\t\t\t\t\t\tval = log2lin(val);\n\t\t\t\t\t}\n\t\t\t\t\tif (i === 1 && series.modifyValue) { // #1205, #2316\n\t\t\t\t\t\tval = series.modifyValue(val);\n\t\t\t\t\t}\n\n\t\t\t\t\tpath = axis.getPlotLinePath(\n\t\t\t\t\t\tval,\n\t\t\t\t\t\t1\n\t\t\t\t\t);\n\n\t\t\t\t\tif (tooltip.crosshairs[i]) {\n\t\t\t\t\t\ttooltip.crosshairs[i].attr({ d: path, visibility: VISIBLE });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattribs = {\n\t\t\t\t\t\t\t'stroke-width': crosshairsOptions[i].width || 1,\n\t\t\t\t\t\t\tstroke: crosshairsOptions[i].color || '#C0C0C0',\n\t\t\t\t\t\t\tzIndex: crosshairsOptions[i].zIndex || 2\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (crosshairsOptions[i].dashStyle) {\n\t\t\t\t\t\t\tattribs.dashstyle = crosshairsOptions[i].dashStyle;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttooltip.crosshairs[i] = chart.renderer.path(path)\n\t\t\t\t\t\t\t.attr(attribs)\n\t\t\t\t\t\t\t.add();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfireEvent(chart, 'tooltipRefresh', {\n\t\t\t\ttext: text,\n\t\t\t\tx: x + chart.plotLeft,\n\t\t\t\ty: y + chart.plotTop,\n\t\t\t\tborderColor: borderColor\n\t\t\t});\n\t},\n\t\n\t/**\n\t * Find the new position and perform the move\n\t */\n\tupdatePosition: function (point) {\n\t\tvar chart = this.chart,\n\t\t\tlabel = this.label, \n\t\t\tpos = (this.options.positioner || this.getPosition).call(\n\t\t\t\tthis,\n\t\t\t\tlabel.width,\n\t\t\t\tlabel.height,\n\t\t\t\tpoint\n\t\t\t);\n\n\t\t// do the move\n\t\tthis.move(\n\t\t\tmathRound(pos.x), \n\t\t\tmathRound(pos.y), \n\t\t\tpoint.plotX + chart.plotLeft, \n\t\t\tpoint.plotY + chart.plotTop\n\t\t);\n\t}\n};\n/**\n * The mouse tracker object. All methods starting with \"on\" are primary DOM event handlers. \n * Subsequent methods should be named differently from what they are doing.\n * @param {Object} chart The Chart instance\n * @param {Object} options The root options object\n */\nfunction Pointer(chart, options) {\n\tthis.init(chart, options);\n}\n\nPointer.prototype = {\n\t/**\n\t * Initialize Pointer\n\t */\n\tinit: function (chart, options) {\n\t\t\n\t\tvar chartOptions = options.chart,\n\t\t\tchartEvents = chartOptions.events,\n\t\t\tzoomType = useCanVG ? '' : chartOptions.zoomType,\n\t\t\tinverted = chart.inverted,\n\t\t\tzoomX,\n\t\t\tzoomY;\n\n\t\t// Store references\n\t\tthis.options = options;\n\t\tthis.chart = chart;\n\t\t\n\t\t// Zoom status\n\t\tthis.zoomX = zoomX = /x/.test(zoomType);\n\t\tthis.zoomY = zoomY = /y/.test(zoomType);\n\t\tthis.zoomHor = (zoomX && !inverted) || (zoomY && inverted);\n\t\tthis.zoomVert = (zoomY && !inverted) || (zoomX && inverted);\n\n\t\t// Do we need to handle click on a touch device?\n\t\tthis.runChartClick = chartEvents && !!chartEvents.click;\n\n\t\tthis.pinchDown = [];\n\t\tthis.lastValidTouch = {};\n\n\t\tif (options.tooltip.enabled) {\n\t\t\tchart.tooltip = new Tooltip(chart, options.tooltip);\n\t\t}\n\n\t\tthis.setDOMEvents();\n\t}, \n\n\t/**\n\t * Add crossbrowser support for chartX and chartY\n\t * @param {Object} e The event object in standard browsers\n\t */\n\tnormalize: function (e, chartPosition) {\n\t\tvar chartX,\n\t\t\tchartY,\n\t\t\tePos;\n\n\t\t// common IE normalizing\n\t\te = e || win.event;\n\t\tif (!e.target) {\n\t\t\te.target = e.srcElement;\n\t\t}\n\n\t\t// Framework specific normalizing (#1165)\n\t\te = washMouseEvent(e);\n\t\t\n\t\t// iOS\n\t\tePos = e.touches ? e.touches.item(0) : e;\n\n\t\t// Get mouse position\n\t\tif (!chartPosition) {\n\t\t\tthis.chartPosition = chartPosition = offset(this.chart.container);\n\t\t}\n\n\t\t// chartX and chartY\n\t\tif (ePos.pageX === UNDEFINED) { // IE < 9. #886.\n\t\t\tchartX = mathMax(e.x, e.clientX - chartPosition.left); // #2005, #2129: the second case is \n\t\t\t\t// for IE10 quirks mode within framesets\n\t\t\tchartY = e.y;\n\t\t} else {\n\t\t\tchartX = ePos.pageX - chartPosition.left;\n\t\t\tchartY = ePos.pageY - chartPosition.top;\n\t\t}\n\n\t\treturn extend(e, {\n\t\t\tchartX: mathRound(chartX),\n\t\t\tchartY: mathRound(chartY)\n\t\t});\n\t},\n\n\t/**\n\t * Get the click position in terms of axis values.\n\t *\n\t * @param {Object} e A pointer event\n\t */\n\tgetCoordinates: function (e) {\n\t\tvar coordinates = {\n\t\t\t\txAxis: [],\n\t\t\t\tyAxis: []\n\t\t\t};\n\n\t\teach(this.chart.axes, function (axis) {\n\t\t\tcoordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({\n\t\t\t\taxis: axis,\n\t\t\t\tvalue: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY'])\n\t\t\t});\n\t\t});\n\t\treturn coordinates;\n\t},\n\t\n\t/**\n\t * Return the index in the tooltipPoints array, corresponding to pixel position in \n\t * the plot area.\n\t */\n\tgetIndex: function (e) {\n\t\tvar chart = this.chart;\n\t\treturn chart.inverted ? \n\t\t\tchart.plotHeight + chart.plotTop - e.chartY : \n\t\t\te.chartX - chart.plotLeft;\n\t},\n\n\t/**\n\t * With line type charts with a single tracker, get the point closest to the mouse.\n\t * Run Point.onMouseOver and display tooltip for the point or points.\n\t */\n\trunPointActions: function (e) {\n\t\tvar pointer = this,\n\t\t\tchart = pointer.chart,\n\t\t\tseries = chart.series,\n\t\t\ttooltip = chart.tooltip,\n\t\t\tpoint,\n\t\t\tpoints,\n\t\t\thoverPoint = chart.hoverPoint,\n\t\t\thoverSeries = chart.hoverSeries,\n\t\t\ti,\n\t\t\tj,\n\t\t\tdistance = chart.chartWidth,\n\t\t\tindex = pointer.getIndex(e),\n\t\t\tanchor;\n\n\t\t// shared tooltip\n\t\tif (tooltip && pointer.options.tooltip.shared && !(hoverSeries && hoverSeries.noSharedTooltip)) {\n\t\t\tpoints = [];\n\n\t\t\t// loop over all series and find the ones with points closest to the mouse\n\t\t\ti = series.length;\n\t\t\tfor (j = 0; j < i; j++) {\n\t\t\t\tif (series[j].visible &&\n\t\t\t\t\t\tseries[j].options.enableMouseTracking !== false &&\n\t\t\t\t\t\t!series[j].noSharedTooltip && series[j].tooltipPoints.length) {\n\t\t\t\t\tpoint = series[j].tooltipPoints[index];\n\t\t\t\t\tif (point && point.series) { // not a dummy point, #1544\n\t\t\t\t\t\tpoint._dist = mathAbs(index - point.clientX);\n\t\t\t\t\t\tdistance = mathMin(distance, point._dist);\n\t\t\t\t\t\tpoints.push(point);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// remove furthest points\n\t\t\ti = points.length;\n\t\t\twhile (i--) {\n\t\t\t\tif (points[i]._dist > distance) {\n\t\t\t\t\tpoints.splice(i, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// refresh the tooltip if necessary\n\t\t\tif (points.length && (points[0].clientX !== pointer.hoverX)) {\n\t\t\t\ttooltip.refresh(points, e);\n\t\t\t\tpointer.hoverX = points[0].clientX;\n\t\t\t}\n\t\t}\n\n\t\t// separate tooltip and general mouse events\n\t\tif (hoverSeries && hoverSeries.tracker) { // only use for line-type series with common tracker\n\n\t\t\t// get the point\n\t\t\tpoint = hoverSeries.tooltipPoints[index];\n\n\t\t\t// a new point is hovered, refresh the tooltip\n\t\t\tif (point && point !== hoverPoint) {\n\n\t\t\t\t// trigger the events\n\t\t\t\tpoint.onMouseOver(e);\n\n\t\t\t}\n\t\t\t\n\t\t} else if (tooltip && tooltip.followPointer && !tooltip.isHidden) {\n\t\t\tanchor = tooltip.getAnchor([{}], e);\n\t\t\ttooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] });\n\t\t}\n\t},\n\n\n\n\t/**\n\t * Reset the tracking by hiding the tooltip, the hover series state and the hover point\n\t * \n\t * @param allowMove {Boolean} Instead of destroying the tooltip altogether, allow moving it if possible\n\t */\n\treset: function (allowMove) {\n\t\tvar pointer = this,\n\t\t\tchart = pointer.chart,\n\t\t\thoverSeries = chart.hoverSeries,\n\t\t\thoverPoint = chart.hoverPoint,\n\t\t\ttooltip = chart.tooltip,\n\t\t\ttooltipPoints = tooltip && tooltip.shared ? chart.hoverPoints : hoverPoint;\n\t\t\t\n\t\t// Narrow in allowMove\n\t\tallowMove = allowMove && tooltip && tooltipPoints;\n\t\t\t\n\t\t// Check if the points have moved outside the plot area, #1003\n\t\tif (allowMove && splat(tooltipPoints)[0].plotX === UNDEFINED) {\n\t\t\tallowMove = false;\n\t\t}\t\n\n\t\t// Just move the tooltip, #349\n\t\tif (allowMove) {\n\t\t\ttooltip.refresh(tooltipPoints);\n\n\t\t// Full reset\n\t\t} else {\n\n\t\t\tif (hoverPoint) {\n\t\t\t\thoverPoint.onMouseOut();\n\t\t\t}\n\n\t\t\tif (hoverSeries) {\n\t\t\t\thoverSeries.onMouseOut();\n\t\t\t}\n\n\t\t\tif (tooltip) {\n\t\t\t\ttooltip.hide();\n\t\t\t\ttooltip.hideCrosshairs();\n\t\t\t}\n\n\t\t\tpointer.hoverX = null;\n\n\t\t}\n\t},\n\n\t/**\n\t * Scale series groups to a certain scale and translation\n\t */\n\tscaleGroups: function (attribs, clip) {\n\n\t\tvar chart = this.chart,\n\t\t\tseriesAttribs;\n\n\t\t// Scale each series\n\t\teach(chart.series, function (series) {\n\t\t\tseriesAttribs = attribs || series.getPlotBox(); // #1701\n\t\t\tif (series.xAxis && series.xAxis.zoomEnabled) {\n\t\t\t\tseries.group.attr(seriesAttribs);\n\t\t\t\tif (series.markerGroup) {\n\t\t\t\t\tseries.markerGroup.attr(seriesAttribs);\n\t\t\t\t\tseries.markerGroup.clip(clip ? chart.clipRect : null);\n\t\t\t\t}\n\t\t\t\tif (series.dataLabelsGroup) {\n\t\t\t\t\tseries.dataLabelsGroup.attr(seriesAttribs);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t// Clip\n\t\tchart.clipRect.attr(clip || chart.clipBox);\n\t},\n\n\t/**\n\t * Run translation operations for each direction (horizontal and vertical) independently\n\t */\n\tpinchTranslateDirection: function (horiz, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) {\n\t\tvar chart = this.chart,\n\t\t\txy = horiz ? 'x' : 'y',\n\t\t\tXY = horiz ? 'X' : 'Y',\n\t\t\tsChartXY = 'chart' + XY,\n\t\t\twh = horiz ? 'width' : 'height',\n\t\t\tplotLeftTop = chart['plot' + (horiz ? 'Left' : 'Top')],\n\t\t\tselectionWH,\n\t\t\tselectionXY,\n\t\t\tclipXY,\n\t\t\tscale = 1,\n\t\t\tinverted = chart.inverted,\n\t\t\tbounds = chart.bounds[horiz ? 'h' : 'v'],\n\t\t\tsingleTouch = pinchDown.length === 1,\n\t\t\ttouch0Start = pinchDown[0][sChartXY],\n\t\t\ttouch0Now = touches[0][sChartXY],\n\t\t\ttouch1Start = !singleTouch && pinchDown[1][sChartXY],\n\t\t\ttouch1Now = !singleTouch && touches[1][sChartXY],\n\t\t\toutOfBounds,\n\t\t\ttransformScale,\n\t\t\tscaleKey,\n\t\t\tsetScale = function () {\n\t\t\t\tif (!singleTouch && mathAbs(touch0Start - touch1Start) > 20) { // Don't zoom if fingers are too close on this axis\n\t\t\t\t\tscale = mathAbs(touch0Now - touch1Now) / mathAbs(touch0Start - touch1Start);\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tclipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start;\n\t\t\t\tselectionWH = chart['plot' + (horiz ? 'Width' : 'Height')] / scale;\n\t\t\t};\n\n\t\t// Set the scale, first pass\n\t\tsetScale();\n\n\t\tselectionXY = clipXY; // the clip position (x or y) is altered if out of bounds, the selection position is not\n\n\t\t// Out of bounds\n\t\tif (selectionXY < bounds.min) {\n\t\t\tselectionXY = bounds.min;\n\t\t\toutOfBounds = true;\n\t\t} else if (selectionXY + selectionWH > bounds.max) {\n\t\t\tselectionXY = bounds.max - selectionWH;\n\t\t\toutOfBounds = true;\n\t\t}\n\t\t\n\t\t// Is the chart dragged off its bounds, determined by dataMin and dataMax?\n\t\tif (outOfBounds) {\n\n\t\t\t// Modify the touchNow position in order to create an elastic drag movement. This indicates\n\t\t\t// to the user that the chart is responsive but can't be dragged further.\n\t\t\ttouch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]);\n\t\t\tif (!singleTouch) {\n\t\t\t\ttouch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]);\n\t\t\t}\n\n\t\t\t// Set the scale, second pass to adapt to the modified touchNow positions\n\t\t\tsetScale();\n\n\t\t} else {\n\t\t\tlastValidTouch[xy] = [touch0Now, touch1Now];\n\t\t}\n\n\t\t\n\t\t// Set geometry for clipping, selection and transformation\n\t\tif (!inverted) { // TODO: implement clipping for inverted charts\n\t\t\tclip[xy] = clipXY - plotLeftTop;\n\t\t\tclip[wh] = selectionWH;\n\t\t}\n\t\tscaleKey = inverted ? (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY;\n\t\ttransformScale = inverted ? 1 / scale : scale;\n\n\t\tselectionMarker[wh] = selectionWH;\n\t\tselectionMarker[xy] = selectionXY;\n\t\ttransform[scaleKey] = scale;\n\t\ttransform['translate' + XY] = (transformScale * plotLeftTop) + (touch0Now - (transformScale * touch0Start));\n\t},\n\t\n\t/**\n\t * Handle touch events with two touches\n\t */\n\tpinch: function (e) {\n\n\t\tvar self = this,\n\t\t\tchart = self.chart,\n\t\t\tpinchDown = self.pinchDown,\n\t\t\tfollowTouchMove = chart.tooltip && chart.tooltip.options.followTouchMove,\n\t\t\ttouches = e.touches,\n\t\t\ttouchesLength = touches.length,\n\t\t\tlastValidTouch = self.lastValidTouch,\n\t\t\tzoomHor = self.zoomHor || self.pinchHor,\n\t\t\tzoomVert = self.zoomVert || self.pinchVert,\n\t\t\thasZoom = zoomHor || zoomVert,\n\t\t\tselectionMarker = self.selectionMarker,\n\t\t\ttransform = {},\n\t\t\tfireClickEvent = touchesLength === 1 && ((self.inClass(e.target, PREFIX + 'tracker') && \n\t\t\t\tchart.runTrackerClick) || chart.runChartClick),\n\t\t\tclip = {};\n\n\t\t// On touch devices, only proceed to trigger click if a handler is defined\n\t\tif ((hasZoom || followTouchMove) && !fireClickEvent) {\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\t// Normalize each touch\n\t\tmap(touches, function (e) {\n\t\t\treturn self.normalize(e);\n\t\t});\n\t\t\t\n\t\t// Register the touch start position\n\t\tif (e.type === 'touchstart') {\n\t\t\teach(touches, function (e, i) {\n\t\t\t\tpinchDown[i] = { chartX: e.chartX, chartY: e.chartY };\n\t\t\t});\n\t\t\tlastValidTouch.x = [pinchDown[0].chartX, pinchDown[1] && pinchDown[1].chartX];\n\t\t\tlastValidTouch.y = [pinchDown[0].chartY, pinchDown[1] && pinchDown[1].chartY];\n\n\t\t\t// Identify the data bounds in pixels\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\tif (axis.zoomEnabled) {\n\t\t\t\t\tvar bounds = chart.bounds[axis.horiz ? 'h' : 'v'],\n\t\t\t\t\t\tminPixelPadding = axis.minPixelPadding,\n\t\t\t\t\t\tmin = axis.toPixels(axis.dataMin),\n\t\t\t\t\t\tmax = axis.toPixels(axis.dataMax),\n\t\t\t\t\t\tabsMin = mathMin(min, max),\n\t\t\t\t\t\tabsMax = mathMax(min, max);\n\n\t\t\t\t\t// Store the bounds for use in the touchmove handler\n\t\t\t\t\tbounds.min = mathMin(axis.pos, absMin - minPixelPadding);\n\t\t\t\t\tbounds.max = mathMax(axis.pos + axis.len, absMax + minPixelPadding);\n\t\t\t\t}\n\t\t\t});\n\t\t\n\t\t// Event type is touchmove, handle panning and pinching\n\t\t} else if (pinchDown.length) { // can be 0 when releasing, if touchend fires first\n\t\t\t\n\n\t\t\t// Set the marker\n\t\t\tif (!selectionMarker) {\n\t\t\t\tself.selectionMarker = selectionMarker = extend({\n\t\t\t\t\tdestroy: noop\n\t\t\t\t}, chart.plotBox);\n\t\t\t}\n\n\t\t\t\n\n\t\t\tif (zoomHor) {\n\t\t\t\tself.pinchTranslateDirection(true, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch);\n\t\t\t}\n\t\t\tif (zoomVert) {\n\t\t\t\tself.pinchTranslateDirection(false, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch);\n\t\t\t}\n\n\t\t\tself.hasPinched = hasZoom;\n\n\t\t\t// Scale and translate the groups to provide visual feedback during pinching\n\t\t\tself.scaleGroups(transform, clip);\n\t\t\t\n\t\t\t// Optionally move the tooltip on touchmove\n\t\t\tif (!hasZoom && followTouchMove && touchesLength === 1) {\n\t\t\t\tthis.runPointActions(self.normalize(e));\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Start a drag operation\n\t */\n\tdragStart: function (e) {\n\t\tvar chart = this.chart;\n\n\t\t// Record the start position\n\t\tchart.mouseIsDown = e.type;\n\t\tchart.cancelClick = false;\n\t\tchart.mouseDownX = this.mouseDownX = e.chartX;\n\t\tchart.mouseDownY = this.mouseDownY = e.chartY;\n\t},\n\n\t/**\n\t * Perform a drag operation in response to a mousemove event while the mouse is down\n\t */\n\tdrag: function (e) {\n\n\t\tvar chart = this.chart,\n\t\t\tchartOptions = chart.options.chart,\n\t\t\tchartX = e.chartX,\n\t\t\tchartY = e.chartY,\n\t\t\tzoomHor = this.zoomHor,\n\t\t\tzoomVert = this.zoomVert,\n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tclickedInside,\n\t\t\tsize,\n\t\t\tmouseDownX = this.mouseDownX,\n\t\t\tmouseDownY = this.mouseDownY;\n\n\t\t// If the mouse is outside the plot area, adjust to cooordinates\n\t\t// inside to prevent the selection marker from going outside\n\t\tif (chartX < plotLeft) {\n\t\t\tchartX = plotLeft;\n\t\t} else if (chartX > plotLeft + plotWidth) {\n\t\t\tchartX = plotLeft + plotWidth;\n\t\t}\n\n\t\tif (chartY < plotTop) {\n\t\t\tchartY = plotTop;\n\t\t} else if (chartY > plotTop + plotHeight) {\n\t\t\tchartY = plotTop + plotHeight;\n\t\t}\n\t\t\n\t\t// determine if the mouse has moved more than 10px\n\t\tthis.hasDragged = Math.sqrt(\n\t\t\tMath.pow(mouseDownX - chartX, 2) +\n\t\t\tMath.pow(mouseDownY - chartY, 2)\n\t\t);\n\t\tif (this.hasDragged > 10) {\n\t\t\tclickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop);\n\n\t\t\t// make a selection\n\t\t\tif (chart.hasCartesianSeries && (this.zoomX || this.zoomY) && clickedInside) {\n\t\t\t\tif (!this.selectionMarker) {\n\t\t\t\t\tthis.selectionMarker = chart.renderer.rect(\n\t\t\t\t\t\tplotLeft,\n\t\t\t\t\t\tplotTop,\n\t\t\t\t\t\tzoomHor ? 1 : plotWidth,\n\t\t\t\t\t\tzoomVert ? 1 : plotHeight,\n\t\t\t\t\t\t0\n\t\t\t\t\t)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tfill: chartOptions.selectionMarkerFill || 'rgba(69,114,167,0.25)',\n\t\t\t\t\t\tzIndex: 7\n\t\t\t\t\t})\n\t\t\t\t\t.add();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// adjust the width of the selection marker\n\t\t\tif (this.selectionMarker && zoomHor) {\n\t\t\t\tsize = chartX - mouseDownX;\n\t\t\t\tthis.selectionMarker.attr({\n\t\t\t\t\twidth: mathAbs(size),\n\t\t\t\t\tx: (size > 0 ? 0 : size) + mouseDownX\n\t\t\t\t});\n\t\t\t}\n\t\t\t// adjust the height of the selection marker\n\t\t\tif (this.selectionMarker && zoomVert) {\n\t\t\t\tsize = chartY - mouseDownY;\n\t\t\t\tthis.selectionMarker.attr({\n\t\t\t\t\theight: mathAbs(size),\n\t\t\t\t\ty: (size > 0 ? 0 : size) + mouseDownY\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// panning\n\t\t\tif (clickedInside && !this.selectionMarker && chartOptions.panning) {\n\t\t\t\tchart.pan(e, chartOptions.panning);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * On mouse up or touch end across the entire document, drop the selection.\n\t */\n\tdrop: function (e) {\n\t\tvar chart = this.chart,\n\t\t\thasPinched = this.hasPinched;\n\n\t\tif (this.selectionMarker) {\n\t\t\tvar selectionData = {\n\t\t\t\t\txAxis: [],\n\t\t\t\t\tyAxis: [],\n\t\t\t\t\toriginalEvent: e.originalEvent || e\n\t\t\t\t},\n\t\t\t\tselectionBox = this.selectionMarker,\n\t\t\t\tselectionLeft = selectionBox.x,\n\t\t\t\tselectionTop = selectionBox.y,\n\t\t\t\trunZoom;\n\t\t\t// a selection has been made\n\t\t\tif (this.hasDragged || hasPinched) {\n\n\t\t\t\t// record each axis' min and max\n\t\t\t\teach(chart.axes, function (axis) {\n\t\t\t\t\tif (axis.zoomEnabled) {\n\t\t\t\t\t\tvar horiz = axis.horiz,\n\t\t\t\t\t\t\tselectionMin = axis.toValue((horiz ? selectionLeft : selectionTop)),\n\t\t\t\t\t\t\tselectionMax = axis.toValue((horiz ? selectionLeft + selectionBox.width : selectionTop + selectionBox.height));\n\n\t\t\t\t\t\tif (!isNaN(selectionMin) && !isNaN(selectionMax)) { // #859\n\t\t\t\t\t\t\tselectionData[axis.xOrY + 'Axis'].push({\n\t\t\t\t\t\t\t\taxis: axis,\n\t\t\t\t\t\t\t\tmin: mathMin(selectionMin, selectionMax), // for reversed axes,\n\t\t\t\t\t\t\t\tmax: mathMax(selectionMin, selectionMax)\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\trunZoom = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (runZoom) {\n\t\t\t\t\tfireEvent(chart, 'selection', selectionData, function (args) { \n\t\t\t\t\t\tchart.zoom(extend(args, hasPinched ? { animation: false } : null)); \n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tthis.selectionMarker = this.selectionMarker.destroy();\n\n\t\t\t// Reset scaling preview\n\t\t\tif (hasPinched) {\n\t\t\t\tthis.scaleGroups();\n\t\t\t}\n\t\t}\n\n\t\t// Reset all\n\t\tif (chart) { // it may be destroyed on mouse up - #877\n\t\t\tcss(chart.container, { cursor: chart._cursor });\n\t\t\tchart.cancelClick = this.hasDragged > 10; // #370\n\t\t\tchart.mouseIsDown = this.hasDragged = this.hasPinched = false;\n\t\t\tthis.pinchDown = [];\n\t\t}\n\t},\n\n\tonContainerMouseDown: function (e) {\n\n\t\te = this.normalize(e);\n\n\t\t// issue #295, dragging not always working in Firefox\n\t\tif (e.preventDefault) {\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\tthis.dragStart(e);\n\t},\n\n\t\n\n\tonDocumentMouseUp: function (e) {\n\t\tthis.drop(e);\n\t},\n\n\t/**\n\t * Special handler for mouse move that will hide the tooltip when the mouse leaves the plotarea.\n\t * Issue #149 workaround. The mouseleave event does not always fire. \n\t */\n\tonDocumentMouseMove: function (e) {\n\t\tvar chart = this.chart,\n\t\t\tchartPosition = this.chartPosition,\n\t\t\thoverSeries = chart.hoverSeries;\n\n\t\te = this.normalize(e, chartPosition);\n\n\t\t// If we're outside, hide the tooltip\n\t\tif (chartPosition && hoverSeries && !this.inClass(e.target, 'highcharts-tracker') &&\n\t\t\t\t!chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\t\t\tthis.reset();\n\t\t}\n\t},\n\n\t/**\n\t * When mouse leaves the container, hide the tooltip.\n\t */\n\tonContainerMouseLeave: function () {\n\t\tthis.reset();\n\t\tthis.chartPosition = null; // also reset the chart position, used in #149 fix\n\t},\n\n\t// The mousemove, touchmove and touchstart event handler\n\tonContainerMouseMove: function (e) {\n\n\t\tvar chart = this.chart;\n\n\t\t// normalize\n\t\te = this.normalize(e);\n\n\t\t// #295\n\t\te.returnValue = false;\n\t\t\n\t\t\n\t\tif (chart.mouseIsDown === 'mousedown') {\n\t\t\tthis.drag(e);\n\t\t} \n\t\t\n\t\t// Show the tooltip and run mouse over events (#977)\n\t\tif ((this.inClass(e.target, 'highcharts-tracker') || \n\t\t\t\tchart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) && !chart.openMenu) {\n\t\t\tthis.runPointActions(e);\n\t\t}\n\t},\n\n\t/**\n\t * Utility to detect whether an element has, or has a parent with, a specific\n\t * class name. Used on detection of tracker objects and on deciding whether\n\t * hovering the tooltip should cause the active series to mouse out.\n\t */\n\tinClass: function (element, className) {\n\t\tvar elemClassName;\n\t\twhile (element) {\n\t\t\telemClassName = attr(element, 'class');\n\t\t\tif (elemClassName) {\n\t\t\t\tif (elemClassName.indexOf(className) !== -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (elemClassName.indexOf(PREFIX + 'container') !== -1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telement = element.parentNode;\n\t\t}\t\t\n\t},\n\n\tonTrackerMouseOut: function (e) {\n\t\tvar series = this.chart.hoverSeries;\n\t\tif (series && !series.options.stickyTracking && !this.inClass(e.toElement || e.relatedTarget, PREFIX + 'tooltip')) {\n\t\t\tseries.onMouseOut();\n\t\t}\n\t},\n\n\tonContainerClick: function (e) {\n\t\tvar chart = this.chart,\n\t\t\thoverPoint = chart.hoverPoint, \n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tinverted = chart.inverted,\n\t\t\tchartPosition,\n\t\t\tplotX,\n\t\t\tplotY;\n\t\t\n\t\te = this.normalize(e);\n\t\te.cancelBubble = true; // IE specific\n\n\t\tif (!chart.cancelClick) {\n\t\t\t\n\t\t\t// On tracker click, fire the series and point events. #783, #1583\n\t\t\tif (hoverPoint && this.inClass(e.target, PREFIX + 'tracker')) {\n\t\t\t\tchartPosition = this.chartPosition;\n\t\t\t\tplotX = hoverPoint.plotX;\n\t\t\t\tplotY = hoverPoint.plotY;\n\n\t\t\t\t// add page position info\n\t\t\t\textend(hoverPoint, {\n\t\t\t\t\tpageX: chartPosition.left + plotLeft +\n\t\t\t\t\t\t(inverted ? chart.plotWidth - plotY : plotX),\n\t\t\t\t\tpageY: chartPosition.top + plotTop +\n\t\t\t\t\t\t(inverted ? chart.plotHeight - plotX : plotY)\n\t\t\t\t});\n\t\t\t\n\t\t\t\t// the series click event\n\t\t\t\tfireEvent(hoverPoint.series, 'click', extend(e, {\n\t\t\t\t\tpoint: hoverPoint\n\t\t\t\t}));\n\n\t\t\t\t// the point click event\n\t\t\t\tif (chart.hoverPoint) { // it may be destroyed (#1844)\n\t\t\t\t\thoverPoint.firePointEvent('click', e);\n\t\t\t\t}\n\n\t\t\t// When clicking outside a tracker, fire a chart event\n\t\t\t} else {\n\t\t\t\textend(e, this.getCoordinates(e));\n\n\t\t\t\t// fire a click event in the chart\n\t\t\t\tif (chart.isInsidePlot(e.chartX - plotLeft, e.chartY - plotTop)) {\n\t\t\t\t\tfireEvent(chart, 'click', e);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\t},\n\n\tonContainerTouchStart: function (e) {\n\t\tvar chart = this.chart;\n\n\t\tif (e.touches.length === 1) {\n\n\t\t\te = this.normalize(e);\n\n\t\t\tif (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\n\t\t\t\t// Prevent the click pseudo event from firing unless it is set in the options\n\t\t\t\t/*if (!chart.runChartClick) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}*/\n\t\t\t\n\t\t\t\t// Run mouse events and display tooltip etc\n\t\t\t\tthis.runPointActions(e);\n\n\t\t\t\tthis.pinch(e);\n\n\t\t\t} else {\n\t\t\t\t// Hide the tooltip on touching outside the plot area (#1203)\n\t\t\t\tthis.reset();\n\t\t\t}\n\n\t\t} else if (e.touches.length === 2) {\n\t\t\tthis.pinch(e);\n\t\t}\t\t\n\t},\n\n\tonContainerTouchMove: function (e) {\n\t\tif (e.touches.length === 1 || e.touches.length === 2) {\n\t\t\tthis.pinch(e);\n\t\t}\n\t},\n\n\tonDocumentTouchEnd: function (e) {\n\t\tthis.drop(e);\n\t},\n\n\t/**\n\t * Set the JS DOM events on the container and document. This method should contain\n\t * a one-to-one assignment between methods and their handlers. Any advanced logic should\n\t * be moved to the handler reflecting the event's name.\n\t */\n\tsetDOMEvents: function () {\n\n\t\tvar pointer = this,\n\t\t\tcontainer = pointer.chart.container,\n\t\t\tevents;\n\n\t\tthis._events = events = [\n\t\t\t[container, 'onmousedown', 'onContainerMouseDown'],\n\t\t\t[container, 'onmousemove', 'onContainerMouseMove'],\n\t\t\t[container, 'onclick', 'onContainerClick'],\n\t\t\t[container, 'mouseleave', 'onContainerMouseLeave'],\n\t\t\t[doc, 'mousemove', 'onDocumentMouseMove'],\n\t\t\t[doc, 'mouseup', 'onDocumentMouseUp']\n\t\t];\n\n\t\tif (hasTouch) {\n\t\t\tevents.push(\n\t\t\t\t[container, 'ontouchstart', 'onContainerTouchStart'],\n\t\t\t\t[container, 'ontouchmove', 'onContainerTouchMove'],\n\t\t\t\t[doc, 'touchend', 'onDocumentTouchEnd']\n\t\t\t);\n\t\t}\n\n\t\teach(events, function (eventConfig) {\n\n\t\t\t// First, create the callback function that in turn calls the method on Pointer\n\t\t\tpointer['_' + eventConfig[2]] = function (e) {\n\t\t\t\tpointer[eventConfig[2]](e);\n\t\t\t};\n\n\t\t\t// Now attach the function, either as a direct property or through addEvent\n\t\t\tif (eventConfig[1].indexOf('on') === 0) {\n\t\t\t\teventConfig[0][eventConfig[1]] = pointer['_' + eventConfig[2]];\n\t\t\t} else {\n\t\t\t\taddEvent(eventConfig[0], eventConfig[1], pointer['_' + eventConfig[2]]);\n\t\t\t}\n\t\t});\n\n\t\t\n\t},\n\n\t/**\n\t * Destroys the Pointer object and disconnects DOM events.\n\t */\n\tdestroy: function () {\n\t\tvar pointer = this;\n\n\t\t// Release all DOM events\n\t\teach(pointer._events, function (eventConfig) {\t\n\t\t\tif (eventConfig[1].indexOf('on') === 0) {\n\t\t\t\teventConfig[0][eventConfig[1]] = null; // delete breaks oldIE\n\t\t\t} else {\t\t\n\t\t\t\tremoveEvent(eventConfig[0], eventConfig[1], pointer['_' + eventConfig[2]]);\n\t\t\t}\n\t\t});\n\t\tdelete pointer._events;\n\n\t\t// memory and CPU leak\n\t\tclearInterval(pointer.tooltipTimeout);\n\t}\n};\n/**\n * The overview of the chart's series\n */\nfunction Legend(chart, options) {\n\tthis.init(chart, options);\n}\n\nLegend.prototype = {\n\t\n\t/**\n\t * Initialize the legend\n\t */\n\tinit: function (chart, options) {\n\t\t\n\t\tvar legend = this,\n\t\t\titemStyle = options.itemStyle,\n\t\t\tpadding = pick(options.padding, 8),\n\t\t\titemMarginTop = options.itemMarginTop || 0;\n\t\n\t\tthis.options = options;\n\n\t\tif (!options.enabled) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tlegend.baseline = pInt(itemStyle.fontSize) + 3 + itemMarginTop; // used in Series prototype\n\t\tlegend.itemStyle = itemStyle;\n\t\tlegend.itemHiddenStyle = merge(itemStyle, options.itemHiddenStyle);\n\t\tlegend.itemMarginTop = itemMarginTop;\n\t\tlegend.padding = padding;\n\t\tlegend.initialItemX = padding;\n\t\tlegend.initialItemY = padding - 5; // 5 is the number of pixels above the text\n\t\tlegend.maxItemWidth = 0;\n\t\tlegend.chart = chart;\n\t\tlegend.itemHeight = 0;\n\t\tlegend.lastLineHeight = 0;\n\n\t\t// Render it\n\t\tlegend.render();\n\n\t\t// move checkboxes\n\t\taddEvent(legend.chart, 'endResize', function () { \n\t\t\tlegend.positionCheckboxes();\n\t\t});\n\n\t},\n\n\t/**\n\t * Set the colors for the legend item\n\t * @param {Object} item A Series or Point instance\n\t * @param {Object} visible Dimmed or colored\n\t */\n\tcolorizeItem: function (item, visible) {\n\t\tvar legend = this,\n\t\t\toptions = legend.options,\n\t\t\tlegendItem = item.legendItem,\n\t\t\tlegendLine = item.legendLine,\n\t\t\tlegendSymbol = item.legendSymbol,\n\t\t\thiddenColor = legend.itemHiddenStyle.color,\n\t\t\ttextColor = visible ? options.itemStyle.color : hiddenColor,\n\t\t\tsymbolColor = visible ? item.color : hiddenColor,\n\t\t\tmarkerOptions = item.options && item.options.marker,\n\t\t\tsymbolAttr = {\n\t\t\t\tstroke: symbolColor,\n\t\t\t\tfill: symbolColor\n\t\t\t},\n\t\t\tkey,\n\t\t\tval;\n\t\t\n\t\tif (legendItem) {\n\t\t\tlegendItem.css({ fill: textColor, color: textColor }); // color for #1553, oldIE\n\t\t}\n\t\tif (legendLine) {\n\t\t\tlegendLine.attr({ stroke: symbolColor });\n\t\t}\n\t\t\n\t\tif (legendSymbol) {\n\t\t\t\n\t\t\t// Apply marker options\n\t\t\tif (markerOptions && legendSymbol.isMarker) { // #585\n\t\t\t\tmarkerOptions = item.convertAttribs(markerOptions);\n\t\t\t\tfor (key in markerOptions) {\n\t\t\t\t\tval = markerOptions[key];\n\t\t\t\t\tif (val !== UNDEFINED) {\n\t\t\t\t\t\tsymbolAttr[key] = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlegendSymbol.attr(symbolAttr);\n\t\t}\n\t},\n\n\t/**\n\t * Position the legend item\n\t * @param {Object} item A Series or Point instance\n\t */\n\tpositionItem: function (item) {\n\t\tvar legend = this,\n\t\t\toptions = legend.options,\n\t\t\tsymbolPadding = options.symbolPadding,\n\t\t\tltr = !options.rtl,\n\t\t\tlegendItemPos = item._legendItemPos,\n\t\t\titemX = legendItemPos[0],\n\t\t\titemY = legendItemPos[1],\n\t\t\tcheckbox = item.checkbox;\n\n\t\tif (item.legendGroup) {\n\t\t\titem.legendGroup.translate(\n\t\t\t\tltr ? itemX : legend.legendWidth - itemX - 2 * symbolPadding - 4,\n\t\t\t\titemY\n\t\t\t);\n\t\t}\n\n\t\tif (checkbox) {\n\t\t\tcheckbox.x = itemX;\n\t\t\tcheckbox.y = itemY;\n\t\t}\n\t},\n\n\t/**\n\t * Destroy a single legend item\n\t * @param {Object} item The series or point\n\t */\n\tdestroyItem: function (item) {\n\t\tvar checkbox = item.checkbox;\n\n\t\t// destroy SVG elements\n\t\teach(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function (key) {\n\t\t\tif (item[key]) {\n\t\t\t\titem[key] = item[key].destroy();\n\t\t\t}\n\t\t});\n\n\t\tif (checkbox) {\n\t\t\tdiscardElement(item.checkbox);\n\t\t}\n\t},\n\n\t/**\n\t * Destroys the legend.\n\t */\n\tdestroy: function () {\n\t\tvar legend = this,\n\t\t\tlegendGroup = legend.group,\n\t\t\tbox = legend.box;\n\n\t\tif (box) {\n\t\t\tlegend.box = box.destroy();\n\t\t}\n\n\t\tif (legendGroup) {\n\t\t\tlegend.group = legendGroup.destroy();\n\t\t}\n\t},\n\n\t/**\n\t * Position the checkboxes after the width is determined\n\t */\n\tpositionCheckboxes: function (scrollOffset) {\n\t\tvar alignAttr = this.group.alignAttr,\n\t\t\ttranslateY,\n\t\t\tclipHeight = this.clipHeight || this.legendHeight;\n\n\t\tif (alignAttr) {\n\t\t\ttranslateY = alignAttr.translateY;\n\t\t\teach(this.allItems, function (item) {\n\t\t\t\tvar checkbox = item.checkbox,\n\t\t\t\t\ttop;\n\t\t\t\t\n\t\t\t\tif (checkbox) {\n\t\t\t\t\ttop = (translateY + checkbox.y + (scrollOffset || 0) + 3);\n\t\t\t\t\tcss(checkbox, {\n\t\t\t\t\t\tleft: (alignAttr.translateX + item.legendItemWidth + checkbox.x - 20) + PX,\n\t\t\t\t\t\ttop: top + PX,\n\t\t\t\t\t\tdisplay: top > translateY - 6 && top < translateY + clipHeight - 6 ? '' : NONE\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Render the legend title on top of the legend\n\t */\n\trenderTitle: function () {\n\t\tvar options = this.options,\n\t\t\tpadding = this.padding,\n\t\t\ttitleOptions = options.title,\n\t\t\ttitleHeight = 0,\n\t\t\tbBox;\n\t\t\n\t\tif (titleOptions.text) {\n\t\t\tif (!this.title) {\n\t\t\t\tthis.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, null, null, null, null, null, 'legend-title')\n\t\t\t\t\t.attr({ zIndex: 1 })\n\t\t\t\t\t.css(titleOptions.style)\n\t\t\t\t\t.add(this.group);\n\t\t\t}\n\t\t\tbBox = this.title.getBBox();\n\t\t\ttitleHeight = bBox.height;\n\t\t\tthis.offsetWidth = bBox.width; // #1717\n\t\t\tthis.contentGroup.attr({ translateY: titleHeight });\n\t\t}\n\t\tthis.titleHeight = titleHeight;\n\t},\n\n\t/**\n\t * Render a single specific legend item\n\t * @param {Object} item A series or point\n\t */\n\trenderItem: function (item) {\n\t\tvar legend = this,\n\t\t\tchart = legend.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = legend.options,\n\t\t\thorizontal = options.layout === 'horizontal',\n\t\t\tsymbolWidth = options.symbolWidth,\n\t\t\tsymbolPadding = options.symbolPadding,\n\t\t\titemStyle = legend.itemStyle,\n\t\t\titemHiddenStyle = legend.itemHiddenStyle,\n\t\t\tpadding = legend.padding,\n\t\t\titemDistance = horizontal ? pick(options.itemDistance, 8) : 0,\n\t\t\tltr = !options.rtl,\n\t\t\titemHeight,\n\t\t\twidthOption = options.width,\n\t\t\titemMarginBottom = options.itemMarginBottom || 0,\n\t\t\titemMarginTop = legend.itemMarginTop,\n\t\t\tinitialItemX = legend.initialItemX,\n\t\t\tbBox,\n\t\t\titemWidth,\n\t\t\tli = item.legendItem,\n\t\t\tseries = item.series || item,\n\t\t\titemOptions = series.options,\n\t\t\tshowCheckbox = itemOptions.showCheckbox,\n\t\t\tuseHTML = options.useHTML;\n\n\t\tif (!li) { // generate it once, later move it\n\n\t\t\t// Generate the group box\n\t\t\t// A group to hold the symbol and text. Text is to be appended in Legend class.\n\t\t\titem.legendGroup = renderer.g('legend-item')\n\t\t\t\t.attr({ zIndex: 1 })\n\t\t\t\t.add(legend.scrollGroup);\n\n\t\t\t// Draw the legend symbol inside the group box\n\t\t\tseries.drawLegendSymbol(legend, item);\n\n\t\t\t// Generate the list item text and add it to the group\n\t\t\titem.legendItem = li = renderer.text(\n\t\t\t\t\toptions.labelFormat ? format(options.labelFormat, item) : options.labelFormatter.call(item),\n\t\t\t\t\tltr ? symbolWidth + symbolPadding : -symbolPadding,\n\t\t\t\t\tlegend.baseline,\n\t\t\t\t\tuseHTML\n\t\t\t\t)\n\t\t\t\t.css(merge(item.visible ? itemStyle : itemHiddenStyle)) // merge to prevent modifying original (#1021)\n\t\t\t\t.attr({\n\t\t\t\t\talign: ltr ? 'left' : 'right',\n\t\t\t\t\tzIndex: 2\n\t\t\t\t})\n\t\t\t\t.add(item.legendGroup);\n\n\t\t\t// Set the events on the item group, or in case of useHTML, the item itself (#1249)\n\t\t\t(useHTML ? li : item.legendGroup).on('mouseover', function () {\n\t\t\t\t\titem.setState(HOVER_STATE);\n\t\t\t\t\tli.css(legend.options.itemHoverStyle);\n\t\t\t\t})\n\t\t\t\t.on('mouseout', function () {\n\t\t\t\t\tli.css(item.visible ? itemStyle : itemHiddenStyle);\n\t\t\t\t\titem.setState();\n\t\t\t\t})\n\t\t\t\t.on('click', function (event) {\n\t\t\t\t\tvar strLegendItemClick = 'legendItemClick',\n\t\t\t\t\t\tfnLegendItemClick = function () {\n\t\t\t\t\t\t\titem.setVisible();\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t// Pass over the click/touch event. #4.\n\t\t\t\t\tevent = {\n\t\t\t\t\t\tbrowserEvent: event\n\t\t\t\t\t};\n\n\t\t\t\t\t// click the name or symbol\n\t\t\t\t\tif (item.firePointEvent) { // point\n\t\t\t\t\t\titem.firePointEvent(strLegendItemClick, event, fnLegendItemClick);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfireEvent(item, strLegendItemClick, event, fnLegendItemClick);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t// Colorize the items\n\t\t\tlegend.colorizeItem(item, item.visible);\n\n\t\t\t// add the HTML checkbox on top\n\t\t\tif (itemOptions && showCheckbox) {\n\t\t\t\titem.checkbox = createElement('input', {\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchecked: item.selected,\n\t\t\t\t\tdefaultChecked: item.selected // required by IE7\n\t\t\t\t}, options.itemCheckboxStyle, chart.container);\n\n\t\t\t\taddEvent(item.checkbox, 'click', function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\tfireEvent(item, 'checkboxClick', {\n\t\t\t\t\t\t\tchecked: target.checked\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\titem.select();\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// calculate the positions for the next line\n\t\tbBox = li.getBBox();\n\n\t\titemWidth = item.legendItemWidth =\n\t\t\toptions.itemWidth || symbolWidth + symbolPadding + bBox.width + itemDistance +\n\t\t\t(showCheckbox ? 20 : 0);\n\t\tlegend.itemHeight = itemHeight = bBox.height;\n\n\t\t// if the item exceeds the width, start a new line\n\t\tif (horizontal && legend.itemX - initialItemX + itemWidth >\n\t\t\t\t(widthOption || (chart.chartWidth - 2 * padding - initialItemX))) {\n\t\t\tlegend.itemX = initialItemX;\n\t\t\tlegend.itemY += itemMarginTop + legend.lastLineHeight + itemMarginBottom;\n\t\t\tlegend.lastLineHeight = 0; // reset for next line\n\t\t}\n\n\t\t// If the item exceeds the height, start a new column\n\t\t/*if (!horizontal && legend.itemY + options.y + itemHeight > chart.chartHeight - spacingTop - spacingBottom) {\n\t\t\tlegend.itemY = legend.initialItemY;\n\t\t\tlegend.itemX += legend.maxItemWidth;\n\t\t\tlegend.maxItemWidth = 0;\n\t\t}*/\n\n\t\t// Set the edge positions\n\t\tlegend.maxItemWidth = mathMax(legend.maxItemWidth, itemWidth);\n\t\tlegend.lastItemY = itemMarginTop + legend.itemY + itemMarginBottom;\n\t\tlegend.lastLineHeight = mathMax(itemHeight, legend.lastLineHeight); // #915\n\n\t\t// cache the position of the newly generated or reordered items\n\t\titem._legendItemPos = [legend.itemX, legend.itemY];\n\n\t\t// advance\n\t\tif (horizontal) {\n\t\t\tlegend.itemX += itemWidth;\n\n\t\t} else {\n\t\t\tlegend.itemY += itemMarginTop + itemHeight + itemMarginBottom;\n\t\t\tlegend.lastLineHeight = itemHeight;\n\t\t}\n\n\t\t// the width of the widest item\n\t\tlegend.offsetWidth = widthOption || mathMax(\n\t\t\t(horizontal ? legend.itemX - initialItemX - itemDistance : itemWidth) + padding,\n\t\t\tlegend.offsetWidth\n\t\t);\n\t},\n\n\t/**\n\t * Render the legend. This method can be called both before and after\n\t * chart.render. If called after, it will only rearrange items instead\n\t * of creating new ones.\n\t */\n\trender: function () {\n\t\tvar legend = this,\n\t\t\tchart = legend.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tlegendGroup = legend.group,\n\t\t\tallItems,\n\t\t\tdisplay,\n\t\t\tlegendWidth,\n\t\t\tlegendHeight,\n\t\t\tbox = legend.box,\n\t\t\toptions = legend.options,\n\t\t\tpadding = legend.padding,\n\t\t\tlegendBorderWidth = options.borderWidth,\n\t\t\tlegendBackgroundColor = options.backgroundColor;\n\n\t\tlegend.itemX = legend.initialItemX;\n\t\tlegend.itemY = legend.initialItemY;\n\t\tlegend.offsetWidth = 0;\n\t\tlegend.lastItemY = 0;\n\n\t\tif (!legendGroup) {\n\t\t\tlegend.group = legendGroup = renderer.g('legend')\n\t\t\t\t.attr({ zIndex: 7 }) \n\t\t\t\t.add();\n\t\t\tlegend.contentGroup = renderer.g()\n\t\t\t\t.attr({ zIndex: 1 }) // above background\n\t\t\t\t.add(legendGroup);\n\t\t\tlegend.scrollGroup = renderer.g()\n\t\t\t\t.add(legend.contentGroup);\n\t\t}\n\t\t\n\t\tlegend.renderTitle();\n\n\t\t// add each series or point\n\t\tallItems = [];\n\t\teach(chart.series, function (serie) {\n\t\t\tvar seriesOptions = serie.options;\n\n\t\t\tif (!seriesOptions.showInLegend || defined(seriesOptions.linkedTo)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// use points or series for the legend item depending on legendType\n\t\t\tallItems = allItems.concat(\n\t\t\t\t\tserie.legendItems ||\n\t\t\t\t\t(seriesOptions.legendType === 'point' ?\n\t\t\t\t\t\t\tserie.data :\n\t\t\t\t\t\t\tserie)\n\t\t\t);\n\t\t});\n\n\t\t// sort by legendIndex\n\t\tstableSort(allItems, function (a, b) {\n\t\t\treturn ((a.options && a.options.legendIndex) || 0) - ((b.options && b.options.legendIndex) || 0);\n\t\t});\n\n\t\t// reversed legend\n\t\tif (options.reversed) {\n\t\t\tallItems.reverse();\n\t\t}\n\n\t\tlegend.allItems = allItems;\n\t\tlegend.display = display = !!allItems.length;\n\n\t\t// render the items\n\t\teach(allItems, function (item) {\n\t\t\tlegend.renderItem(item); \n\t\t});\n\n\t\t// Draw the border\n\t\tlegendWidth = options.width || legend.offsetWidth;\n\t\tlegendHeight = legend.lastItemY + legend.lastLineHeight + legend.titleHeight;\n\t\t\n\t\t\n\t\tlegendHeight = legend.handleOverflow(legendHeight);\n\n\t\tif (legendBorderWidth || legendBackgroundColor) {\n\t\t\tlegendWidth += padding;\n\t\t\tlegendHeight += padding;\n\n\t\t\tif (!box) {\n\t\t\t\tlegend.box = box = renderer.rect(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tlegendWidth,\n\t\t\t\t\tlegendHeight,\n\t\t\t\t\toptions.borderRadius,\n\t\t\t\t\tlegendBorderWidth || 0\n\t\t\t\t).attr({\n\t\t\t\t\tstroke: options.borderColor,\n\t\t\t\t\t'stroke-width': legendBorderWidth || 0,\n\t\t\t\t\tfill: legendBackgroundColor || NONE\n\t\t\t\t})\n\t\t\t\t.add(legendGroup)\n\t\t\t\t.shadow(options.shadow);\n\t\t\t\tbox.isNew = true;\n\n\t\t\t} else if (legendWidth > 0 && legendHeight > 0) {\n\t\t\t\tbox[box.isNew ? 'attr' : 'animate'](\n\t\t\t\t\tbox.crisp(null, null, null, legendWidth, legendHeight)\n\t\t\t\t);\n\t\t\t\tbox.isNew = false;\n\t\t\t}\n\n\t\t\t// hide the border if no items\n\t\t\tbox[display ? 'show' : 'hide']();\n\t\t}\n\t\t\n\t\tlegend.legendWidth = legendWidth;\n\t\tlegend.legendHeight = legendHeight;\n\n\t\t// Now that the legend width and height are established, put the items in the \n\t\t// final position\n\t\teach(allItems, function (item) {\n\t\t\tlegend.positionItem(item);\n\t\t});\n\n\t\t// 1.x compatibility: positioning based on style\n\t\t/*var props = ['left', 'right', 'top', 'bottom'],\n\t\t\tprop,\n\t\t\ti = 4;\n\t\twhile (i--) {\n\t\t\tprop = props[i];\n\t\t\tif (options.style[prop] && options.style[prop] !== 'auto') {\n\t\t\t\toptions[i < 2 ? 'align' : 'verticalAlign'] = prop;\n\t\t\t\toptions[i < 2 ? 'x' : 'y'] = pInt(options.style[prop]) * (i % 2 ? -1 : 1);\n\t\t\t}\n\t\t}*/\n\n\t\tif (display) {\n\t\t\tlegendGroup.align(extend({\n\t\t\t\twidth: legendWidth,\n\t\t\t\theight: legendHeight\n\t\t\t}, options), true, 'spacingBox');\n\t\t}\n\n\t\tif (!chart.isResizing) {\n\t\t\tthis.positionCheckboxes();\n\t\t}\n\t},\n\t\n\t/**\n\t * Set up the overflow handling by adding navigation with up and down arrows below the\n\t * legend.\n\t */\n\thandleOverflow: function (legendHeight) {\n\t\tvar legend = this,\n\t\t\tchart = this.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tpageCount,\n\t\t\toptions = this.options,\n\t\t\toptionsY = options.y,\n\t\t\talignTop = options.verticalAlign === 'top',\n\t\t\tspaceHeight = chart.spacingBox.height + (alignTop ? -optionsY : optionsY) - this.padding,\n\t\t\tmaxHeight = options.maxHeight,\n\t\t\tclipHeight,\n\t\t\tclipRect = this.clipRect,\n\t\t\tnavOptions = options.navigation,\n\t\t\tanimation = pick(navOptions.animation, true),\n\t\t\tarrowSize = navOptions.arrowSize || 12,\n\t\t\tnav = this.nav;\n\t\t\t\n\t\t// Adjust the height\n\t\tif (options.layout === 'horizontal') {\n\t\t\tspaceHeight /= 2;\n\t\t}\n\t\tif (maxHeight) {\n\t\t\tspaceHeight = mathMin(spaceHeight, maxHeight);\n\t\t}\n\t\t\n\t\t// Reset the legend height and adjust the clipping rectangle\n\t\tif (legendHeight > spaceHeight && !options.useHTML) {\n\n\t\t\tthis.clipHeight = clipHeight = spaceHeight - 20 - this.titleHeight;\n\t\t\tthis.pageCount = pageCount = mathCeil(legendHeight / clipHeight);\n\t\t\tthis.currentPage = pick(this.currentPage, 1);\n\t\t\tthis.fullHeight = legendHeight;\n\t\t\t\n\t\t\t// Only apply clipping if needed. Clipping causes blurred legend in PDF export (#1787)\n\t\t\tif (!clipRect) {\n\t\t\t\tclipRect = legend.clipRect = renderer.clipRect(0, 0, 9999, 0);\n\t\t\t\tlegend.contentGroup.clip(clipRect);\n\t\t\t}\n\t\t\tclipRect.attr({\n\t\t\t\theight: clipHeight\n\t\t\t});\n\t\t\t\n\t\t\t// Add navigation elements\n\t\t\tif (!nav) {\n\t\t\t\tthis.nav = nav = renderer.g().attr({ zIndex: 1 }).add(this.group);\n\t\t\t\tthis.up = renderer.symbol('triangle', 0, 0, arrowSize, arrowSize)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tlegend.scroll(-1, animation);\n\t\t\t\t\t})\n\t\t\t\t\t.add(nav);\n\t\t\t\tthis.pager = renderer.text('', 15, 10)\n\t\t\t\t\t.css(navOptions.style)\n\t\t\t\t\t.add(nav);\n\t\t\t\tthis.down = renderer.symbol('triangle-down', 0, 0, arrowSize, arrowSize)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tlegend.scroll(1, animation);\n\t\t\t\t\t})\n\t\t\t\t\t.add(nav);\n\t\t\t}\n\t\t\t\n\t\t\t// Set initial position\n\t\t\tlegend.scroll(0);\n\t\t\t\n\t\t\tlegendHeight = spaceHeight;\n\t\t\t\n\t\t} else if (nav) {\n\t\t\tclipRect.attr({\n\t\t\t\theight: chart.chartHeight\n\t\t\t});\n\t\t\tnav.hide();\n\t\t\tthis.scrollGroup.attr({\n\t\t\t\ttranslateY: 1\n\t\t\t});\n\t\t\tthis.clipHeight = 0; // #1379\n\t\t}\n\t\t\n\t\treturn legendHeight;\n\t},\n\t\n\t/**\n\t * Scroll the legend by a number of pages\n\t * @param {Object} scrollBy\n\t * @param {Object} animation\n\t */\n\tscroll: function (scrollBy, animation) {\n\t\tvar pageCount = this.pageCount,\n\t\t\tcurrentPage = this.currentPage + scrollBy,\n\t\t\tclipHeight = this.clipHeight,\n\t\t\tnavOptions = this.options.navigation,\n\t\t\tactiveColor = navOptions.activeColor,\n\t\t\tinactiveColor = navOptions.inactiveColor,\n\t\t\tpager = this.pager,\n\t\t\tpadding = this.padding,\n\t\t\tscrollOffset;\n\t\t\n\t\t// When resizing while looking at the last page\n\t\tif (currentPage > pageCount) {\n\t\t\tcurrentPage = pageCount;\n\t\t}\n\t\t\n\t\tif (currentPage > 0) {\n\t\t\t\n\t\t\tif (animation !== UNDEFINED) {\n\t\t\t\tsetAnimation(animation, this.chart);\n\t\t\t}\n\t\t\t\n\t\t\tthis.nav.attr({\n\t\t\t\ttranslateX: padding,\n\t\t\t\ttranslateY: clipHeight + 7 + this.titleHeight,\n\t\t\t\tvisibility: VISIBLE\n\t\t\t});\n\t\t\tthis.up.attr({\n\t\t\t\t\tfill: currentPage === 1 ? inactiveColor : activeColor\n\t\t\t\t})\n\t\t\t\t.css({\n\t\t\t\t\tcursor: currentPage === 1 ? 'default' : 'pointer'\n\t\t\t\t});\n\t\t\tpager.attr({\n\t\t\t\ttext: currentPage + '/' + this.pageCount\n\t\t\t});\n\t\t\tthis.down.attr({\n\t\t\t\t\tx: 18 + this.pager.getBBox().width, // adjust to text width\n\t\t\t\t\tfill: currentPage === pageCount ? inactiveColor : activeColor\n\t\t\t\t})\n\t\t\t\t.css({\n\t\t\t\t\tcursor: currentPage === pageCount ? 'default' : 'pointer'\n\t\t\t\t});\n\t\t\t\n\t\t\tscrollOffset = -mathMin(clipHeight * (currentPage - 1), this.fullHeight - clipHeight + padding) + 1;\n\t\t\tthis.scrollGroup.animate({\n\t\t\t\ttranslateY: scrollOffset\n\t\t\t});\n\t\t\tpager.attr({\n\t\t\t\ttext: currentPage + '/' + pageCount\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tthis.currentPage = currentPage;\n\t\t\tthis.positionCheckboxes(scrollOffset);\n\t\t}\n\t\t\t\n\t}\n\t\n};\n\n// Workaround for #2030, horizontal legend items not displaying in IE11 Preview.\n// TODO: When IE11 is released, check again for this bug, and remove the fix\n// or make a better one.\nif (/Trident.*?11\\.0/.test(userAgent)) {\n\twrap(Legend.prototype, 'positionItem', function (proceed, item) {\n\t\tvar legend = this;\n\t\tsetTimeout(function () {\n\t\t\tproceed.call(legend, item);\n\t\t});\n\t});\n}\n\n/**\n * The chart class\n * @param {Object} options\n * @param {Function} callback Function to run when the chart has loaded\n */\nfunction Chart() {\n\tthis.init.apply(this, arguments);\n}\n\nChart.prototype = {\n\n\t/**\n\t * Initialize the chart\n\t */\n\tinit: function (userOptions, callback) {\n\n\t\t// Handle regular options\n\t\tvar options,\n\t\t\tseriesOptions = userOptions.series; // skip merging data points to increase performance\n\n\t\tuserOptions.series = null;\n\t\toptions = merge(defaultOptions, userOptions); // do the merge\n\t\toptions.series = userOptions.series = seriesOptions; // set back the series data\n\n\t\tvar optionsChart = options.chart;\n\t\t\n\t\t// Create margin & spacing array\n\t\tthis.margin = this.splashArray('margin', optionsChart);\n\t\tthis.spacing = this.splashArray('spacing', optionsChart);\n\n\t\tvar chartEvents = optionsChart.events;\n\n\t\t//this.runChartClick = chartEvents && !!chartEvents.click;\n\t\tthis.bounds = { h: {}, v: {} }; // Pixel data bounds for touch zoom\n\n\t\tthis.callback = callback;\n\t\tthis.isResizing = 0;\n\t\tthis.options = options;\n\t\t//chartTitleOptions = UNDEFINED;\n\t\t//chartSubtitleOptions = UNDEFINED;\n\n\t\tthis.axes = [];\n\t\tthis.series = [];\n\t\tthis.hasCartesianSeries = optionsChart.showAxes;\n\t\t//this.axisOffset = UNDEFINED;\n\t\t//this.maxTicks = UNDEFINED; // handle the greatest amount of ticks on grouped axes\n\t\t//this.inverted = UNDEFINED;\n\t\t//this.loadingShown = UNDEFINED;\n\t\t//this.container = UNDEFINED;\n\t\t//this.chartWidth = UNDEFINED;\n\t\t//this.chartHeight = UNDEFINED;\n\t\t//this.marginRight = UNDEFINED;\n\t\t//this.marginBottom = UNDEFINED;\n\t\t//this.containerWidth = UNDEFINED;\n\t\t//this.containerHeight = UNDEFINED;\n\t\t//this.oldChartWidth = UNDEFINED;\n\t\t//this.oldChartHeight = UNDEFINED;\n\n\t\t//this.renderTo = UNDEFINED;\n\t\t//this.renderToClone = UNDEFINED;\n\n\t\t//this.spacingBox = UNDEFINED\n\n\t\t//this.legend = UNDEFINED;\n\n\t\t// Elements\n\t\t//this.chartBackground = UNDEFINED;\n\t\t//this.plotBackground = UNDEFINED;\n\t\t//this.plotBGImage = UNDEFINED;\n\t\t//this.plotBorder = UNDEFINED;\n\t\t//this.loadingDiv = UNDEFINED;\n\t\t//this.loadingSpan = UNDEFINED;\n\n\t\tvar chart = this,\n\t\t\teventType;\n\n\t\t// Add the chart to the global lookup\n\t\tchart.index = charts.length;\n\t\tcharts.push(chart);\n\n\t\t// Set up auto resize\n\t\tif (optionsChart.reflow !== false) {\n\t\t\taddEvent(chart, 'load', function () {\n\t\t\t\tchart.initReflow();\n\t\t\t});\n\t\t}\n\n\t\t// Chart event handlers\n\t\tif (chartEvents) {\n\t\t\tfor (eventType in chartEvents) {\n\t\t\t\taddEvent(chart, eventType, chartEvents[eventType]);\n\t\t\t}\n\t\t}\n\n\t\tchart.xAxis = [];\n\t\tchart.yAxis = [];\n\n\t\t// Expose methods and variables\n\t\tchart.animation = useCanVG ? false : pick(optionsChart.animation, true);\n\t\tchart.pointCount = 0;\n\t\tchart.counters = new ChartCounters();\n\n\t\tchart.firstRender();\n\t},\n\n\t/**\n\t * Initialize an individual series, called internally before render time\n\t */\n\tinitSeries: function (options) {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\ttype = options.type || optionsChart.type || optionsChart.defaultSeriesType,\n\t\t\tseries,\n\t\t\tconstr = seriesTypes[type];\n\n\t\t// No such series type\n\t\tif (!constr) {\n\t\t\terror(17, true);\n\t\t}\n\n\t\tseries = new constr();\n\t\tseries.init(this, options);\n\t\treturn series;\n\t},\n\n\t/**\n\t * Add a series dynamically after  time\n\t *\n\t * @param {Object} options The config options\n\t * @param {Boolean} redraw Whether to redraw the chart after adding. Defaults to true.\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t *\n\t * @return {Object} series The newly created series object\n\t */\n\taddSeries: function (options, redraw, animation) {\n\t\tvar series,\n\t\t\tchart = this;\n\n\t\tif (options) {\n\t\t\tredraw = pick(redraw, true); // defaults to true\n\n\t\t\tfireEvent(chart, 'addSeries', { options: options }, function () {\n\t\t\t\tseries = chart.initSeries(options);\n\t\t\t\t\n\t\t\t\tchart.isDirtyLegend = true; // the series array is out of sync with the display\n\t\t\t\tchart.linkSeries();\n\t\t\t\tif (redraw) {\n\t\t\t\t\tchart.redraw(animation);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn series;\n\t},\n\n\t/**\n     * Add an axis to the chart\n     * @param {Object} options The axis option\n     * @param {Boolean} isX Whether it is an X axis or a value axis\n     */\n\taddAxis: function (options, isX, redraw, animation) {\n\t\tvar key = isX ? 'xAxis' : 'yAxis',\n\t\t\tchartOptions = this.options,\n\t\t\taxis;\n\n\t\t/*jslint unused: false*/\n\t\taxis = new Axis(this, merge(options, {\n\t\t\tindex: this[key].length,\n\t\t\tisX: isX\n\t\t}));\n\t\t/*jslint unused: true*/\n\n\t\t// Push the new axis options to the chart options\n\t\tchartOptions[key] = splat(chartOptions[key] || {});\n\t\tchartOptions[key].push(options);\n\n\t\tif (pick(redraw, true)) {\n\t\t\tthis.redraw(animation);\n\t\t}\n\t},\n\n\t/**\n\t * Check whether a given point is within the plot area\n\t *\n\t * @param {Number} plotX Pixel x relative to the plot area\n\t * @param {Number} plotY Pixel y relative to the plot area\n\t * @param {Boolean} inverted Whether the chart is inverted\n\t */\n\tisInsidePlot: function (plotX, plotY, inverted) {\n\t\tvar x = inverted ? plotY : plotX,\n\t\t\ty = inverted ? plotX : plotY;\n\t\t\t\n\t\treturn x >= 0 &&\n\t\t\tx <= this.plotWidth &&\n\t\t\ty >= 0 &&\n\t\t\ty <= this.plotHeight;\n\t},\n\n\t/**\n\t * Adjust all axes tick amounts\n\t */\n\tadjustTickAmounts: function () {\n\t\tif (this.options.chart.alignTicks !== false) {\n\t\t\teach(this.axes, function (axis) {\n\t\t\t\taxis.adjustTickAmount();\n\t\t\t});\n\t\t}\n\t\tthis.maxTicks = null;\n\t},\n\n\t/**\n\t * Redraw legend, axes or series based on updated data\n\t *\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\tredraw: function (animation) {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\tseries = chart.series,\n\t\t\tpointer = chart.pointer,\n\t\t\tlegend = chart.legend,\n\t\t\tredrawLegend = chart.isDirtyLegend,\n\t\t\thasStackedSeries,\n\t\t\thasDirtyStacks,\n\t\t\tisDirtyBox = chart.isDirtyBox, // todo: check if it has actually changed?\n\t\t\tseriesLength = series.length,\n\t\t\ti = seriesLength,\n\t\t\tserie,\n\t\t\trenderer = chart.renderer,\n\t\t\tisHiddenChart = renderer.isHidden(),\n\t\t\tafterRedraw = [];\n\t\t\t\n\t\tsetAnimation(animation, chart);\n\t\t\n\t\tif (isHiddenChart) {\n\t\t\tchart.cloneRenderTo();\n\t\t}\n\n\t\t// Adjust title layout (reflow multiline text)\n\t\tchart.layOutTitles();\n\n\t\t// link stacked series\n\t\twhile (i--) {\n\t\t\tserie = series[i];\n\n\t\t\tif (serie.options.stacking) {\n\t\t\t\thasStackedSeries = true;\n\t\t\t\t\n\t\t\t\tif (serie.isDirty) {\n\t\t\t\t\thasDirtyStacks = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (hasDirtyStacks) { // mark others as dirty\n\t\t\ti = seriesLength;\n\t\t\twhile (i--) {\n\t\t\t\tserie = series[i];\n\t\t\t\tif (serie.options.stacking) {\n\t\t\t\t\tserie.isDirty = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// handle updated data in the series\n\t\teach(series, function (serie) {\n\t\t\tif (serie.isDirty) { // prepare the data so axis can read it\n\t\t\t\tif (serie.options.legendType === 'point') {\n\t\t\t\t\tredrawLegend = true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// handle added or removed series\n\t\tif (redrawLegend && legend.options.enabled) { // series or pie points are added or removed\n\t\t\t// draw legend graphics\n\t\t\tlegend.render();\n\n\t\t\tchart.isDirtyLegend = false;\n\t\t}\n\n\t\t// reset stacks\n\t\tif (hasStackedSeries) {\n\t\t\tchart.getStacks();\n\t\t}\n\n\n\t\tif (chart.hasCartesianSeries) {\n\t\t\tif (!chart.isResizing) {\n\n\t\t\t\t// reset maxTicks\n\t\t\t\tchart.maxTicks = null;\n\n\t\t\t\t// set axes scales\n\t\t\t\teach(axes, function (axis) {\n\t\t\t\t\taxis.setScale();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tchart.adjustTickAmounts();\n\t\t\tchart.getMargins();\n\n\t\t\t// If one axis is dirty, all axes must be redrawn (#792, #2169)\n\t\t\teach(axes, function (axis) {\n\t\t\t\tif (axis.isDirty) {\n\t\t\t\t\tisDirtyBox = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// redraw axes\n\t\t\teach(axes, function (axis) {\n\t\t\t\t\n\t\t\t\t// Fire 'afterSetExtremes' only if extremes are set\n\t\t\t\tif (axis.isDirtyExtremes) { // #821\n\t\t\t\t\taxis.isDirtyExtremes = false;\n\t\t\t\t\tafterRedraw.push(function () { // prevent a recursive call to chart.redraw() (#1119)\n\t\t\t\t\t\tfireEvent(axis, 'afterSetExtremes', extend(axis.eventArgs, axis.getExtremes())); // #747, #751\n\t\t\t\t\t\tdelete axis.eventArgs;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (isDirtyBox || hasStackedSeries) {\n\t\t\t\t\taxis.redraw();\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t}\n\t\t// the plot areas size has changed\n\t\tif (isDirtyBox) {\n\t\t\tchart.drawChartBox();\n\t\t}\n\n\n\t\t// redraw affected series\n\t\teach(series, function (serie) {\n\t\t\tif (serie.isDirty && serie.visible &&\n\t\t\t\t\t(!serie.isCartesian || serie.xAxis)) { // issue #153\n\t\t\t\tserie.redraw();\n\t\t\t}\n\t\t});\n\n\t\t// move tooltip or reset\n\t\tif (pointer && pointer.reset) {\n\t\t\tpointer.reset(true);\n\t\t}\n\n\t\t// redraw if canvas\n\t\trenderer.draw();\n\n\t\t// fire the event\n\t\tfireEvent(chart, 'redraw'); // jQuery breaks this when calling it from addEvent. Overwrites chart.redraw\n\t\t\n\t\tif (isHiddenChart) {\n\t\t\tchart.cloneRenderTo(true);\n\t\t}\n\t\t\n\t\t// Fire callbacks that are put on hold until after the redraw\n\t\teach(afterRedraw, function (callback) {\n\t\t\tcallback.call();\n\t\t});\n\t},\n\n\n\n\t/**\n\t * Dim the chart and show a loading text or symbol\n\t * @param {String} str An optional text to show in the loading label instead of the default one\n\t */\n\tshowLoading: function (str) {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\tloadingDiv = chart.loadingDiv;\n\n\t\tvar loadingOptions = options.loading;\n\n\t\t// create the layer at the first call\n\t\tif (!loadingDiv) {\n\t\t\tchart.loadingDiv = loadingDiv = createElement(DIV, {\n\t\t\t\tclassName: PREFIX + 'loading'\n\t\t\t}, extend(loadingOptions.style, {\n\t\t\t\tzIndex: 10,\n\t\t\t\tdisplay: NONE\n\t\t\t}), chart.container);\n\n\t\t\tchart.loadingSpan = createElement(\n\t\t\t\t'span',\n\t\t\t\tnull,\n\t\t\t\tloadingOptions.labelStyle,\n\t\t\t\tloadingDiv\n\t\t\t);\n\n\t\t}\n\n\t\t// update text\n\t\tchart.loadingSpan.innerHTML = str || options.lang.loading;\n\n\t\t// show it\n\t\tif (!chart.loadingShown) {\n\t\t\tcss(loadingDiv, { \n\t\t\t\topacity: 0, \n\t\t\t\tdisplay: '',\n\t\t\t\tleft: chart.plotLeft + PX,\n\t\t\t\ttop: chart.plotTop + PX,\n\t\t\t\twidth: chart.plotWidth + PX,\n\t\t\t\theight: chart.plotHeight + PX\n\t\t\t});\n\t\t\tanimate(loadingDiv, {\n\t\t\t\topacity: loadingOptions.style.opacity\n\t\t\t}, {\n\t\t\t\tduration: loadingOptions.showDuration || 0\n\t\t\t});\n\t\t\tchart.loadingShown = true;\n\t\t}\n\t},\n\n\t/**\n\t * Hide the loading layer\n\t */\n\thideLoading: function () {\n\t\tvar options = this.options,\n\t\t\tloadingDiv = this.loadingDiv;\n\n\t\tif (loadingDiv) {\n\t\t\tanimate(loadingDiv, {\n\t\t\t\topacity: 0\n\t\t\t}, {\n\t\t\t\tduration: options.loading.hideDuration || 100,\n\t\t\t\tcomplete: function () {\n\t\t\t\t\tcss(loadingDiv, { display: NONE });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.loadingShown = false;\n\t},\n\n\t/**\n\t * Get an axis, series or point object by id.\n\t * @param id {String} The id as given in the configuration options\n\t */\n\tget: function (id) {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\tseries = chart.series;\n\n\t\tvar i,\n\t\t\tj,\n\t\t\tpoints;\n\n\t\t// search axes\n\t\tfor (i = 0; i < axes.length; i++) {\n\t\t\tif (axes[i].options.id === id) {\n\t\t\t\treturn axes[i];\n\t\t\t}\n\t\t}\n\n\t\t// search series\n\t\tfor (i = 0; i < series.length; i++) {\n\t\t\tif (series[i].options.id === id) {\n\t\t\t\treturn series[i];\n\t\t\t}\n\t\t}\n\n\t\t// search points\n\t\tfor (i = 0; i < series.length; i++) {\n\t\t\tpoints = series[i].points || [];\n\t\t\tfor (j = 0; j < points.length; j++) {\n\t\t\t\tif (points[j].id === id) {\n\t\t\t\t\treturn points[j];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t},\n\n\t/**\n\t * Create the Axis instances based on the config options\n\t */\n\tgetAxes: function () {\n\t\tvar chart = this,\n\t\t\toptions = this.options,\n\t\t\txAxisOptions = options.xAxis = splat(options.xAxis || {}),\n\t\t\tyAxisOptions = options.yAxis = splat(options.yAxis || {}),\n\t\t\toptionsArray,\n\t\t\taxis;\n\n\t\t// make sure the options are arrays and add some members\n\t\teach(xAxisOptions, function (axis, i) {\n\t\t\taxis.index = i;\n\t\t\taxis.isX = true;\n\t\t});\n\n\t\teach(yAxisOptions, function (axis, i) {\n\t\t\taxis.index = i;\n\t\t});\n\n\t\t// concatenate all axis options into one array\n\t\toptionsArray = xAxisOptions.concat(yAxisOptions);\n\n\t\teach(optionsArray, function (axisOptions) {\n\t\t\taxis = new Axis(chart, axisOptions);\n\t\t});\n\n\t\tchart.adjustTickAmounts();\n\t},\n\n\n\t/**\n\t * Get the currently selected points from all series\n\t */\n\tgetSelectedPoints: function () {\n\t\tvar points = [];\n\t\teach(this.series, function (serie) {\n\t\t\tpoints = points.concat(grep(serie.points || [], function (point) {\n\t\t\t\treturn point.selected;\n\t\t\t}));\n\t\t});\n\t\treturn points;\n\t},\n\n\t/**\n\t * Get the currently selected series\n\t */\n\tgetSelectedSeries: function () {\n\t\treturn grep(this.series, function (serie) {\n\t\t\treturn serie.selected;\n\t\t});\n\t},\n\n\t/**\n\t * Generate stacks for each series and calculate stacks total values\n\t */\n\tgetStacks: function () {\n\t\tvar chart = this;\n\n\t\t// reset stacks for each yAxis\n\t\teach(chart.yAxis, function (axis) {\n\t\t\tif (axis.stacks && axis.hasVisibleSeries) {\n\t\t\t\taxis.oldStacks = axis.stacks;\n\t\t\t}\n\t\t});\n\n\t\teach(chart.series, function (series) {\n\t\t\tif (series.options.stacking && (series.visible === true || chart.options.chart.ignoreHiddenSeries === false)) {\n\t\t\t\tseries.stackKey = series.type + pick(series.options.stack, '');\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Display the zoom button\n\t */\n\tshowResetZoom: function () {\n\t\tvar chart = this,\n\t\t\tlang = defaultOptions.lang,\n\t\t\tbtnOptions = chart.options.chart.resetZoomButton,\n\t\t\ttheme = btnOptions.theme,\n\t\t\tstates = theme.states,\n\t\t\talignTo = btnOptions.relativeTo === 'chart' ? null : 'plotBox';\n\t\t\t\n\t\tthis.resetZoomButton = chart.renderer.button(lang.resetZoom, null, null, function () { chart.zoomOut(); }, theme, states && states.hover)\n\t\t\t.attr({\n\t\t\t\talign: btnOptions.position.align,\n\t\t\t\ttitle: lang.resetZoomTitle\n\t\t\t})\n\t\t\t.add()\n\t\t\t.align(btnOptions.position, false, alignTo);\n\t\t\t\n\t},\n\n\t/**\n\t * Zoom out to 1:1\n\t */\n\tzoomOut: function () {\n\t\tvar chart = this;\n\t\tfireEvent(chart, 'selection', { resetSelection: true }, function () { \n\t\t\tchart.zoom();\n\t\t});\n\t},\n\n\t/**\n\t * Zoom into a given portion of the chart given by axis coordinates\n\t * @param {Object} event\n\t */\n\tzoom: function (event) {\n\t\tvar chart = this,\n\t\t\thasZoomed,\n\t\t\tpointer = chart.pointer,\n\t\t\tdisplayButton = false,\n\t\t\tresetZoomButton;\n\n\t\t// If zoom is called with no arguments, reset the axes\n\t\tif (!event || event.resetSelection) {\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\thasZoomed = axis.zoom();\n\t\t\t});\n\t\t} else { // else, zoom in on all axes\n\t\t\teach(event.xAxis.concat(event.yAxis), function (axisData) {\n\t\t\t\tvar axis = axisData.axis,\n\t\t\t\t\tisXAxis = axis.isXAxis;\n\n\t\t\t\t// don't zoom more than minRange\n\t\t\t\tif (pointer[isXAxis ? 'zoomX' : 'zoomY'] || pointer[isXAxis ? 'pinchX' : 'pinchY']) {\n\t\t\t\t\thasZoomed = axis.zoom(axisData.min, axisData.max);\n\t\t\t\t\tif (axis.displayBtn) {\n\t\t\t\t\t\tdisplayButton = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\t// Show or hide the Reset zoom button\n\t\tresetZoomButton = chart.resetZoomButton;\n\t\tif (displayButton && !resetZoomButton) {\n\t\t\tchart.showResetZoom();\n\t\t} else if (!displayButton && isObject(resetZoomButton)) {\n\t\t\tchart.resetZoomButton = resetZoomButton.destroy();\n\t\t}\n\t\t\n\n\t\t// Redraw\n\t\tif (hasZoomed) {\n\t\t\tchart.redraw(\n\t\t\t\tpick(chart.options.chart.animation, event && event.animation, chart.pointCount < 100) // animation\n\t\t\t);\n\t\t}\n\t},\n\n\t/**\n\t * Pan the chart by dragging the mouse across the pane. This function is called\n\t * on mouse move, and the distance to pan is computed from chartX compared to\n\t * the first chartX position in the dragging operation.\n\t */\n\tpan: function (e, panning) {\n\n\t\tvar chart = this,\n\t\t\thoverPoints = chart.hoverPoints,\n\t\t\tdoRedraw;\n\n\t\t// remove active points for shared tooltip\n\t\tif (hoverPoints) {\n\t\t\teach(hoverPoints, function (point) {\n\t\t\t\tpoint.setState();\n\t\t\t});\n\t\t}\n\n\t\teach(panning === 'xy' ? [1, 0] : [1], function (isX) { // xy is used in maps\n\t\t\tvar mousePos = e[isX ? 'chartX' : 'chartY'],\n\t\t\t\taxis = chart[isX ? 'xAxis' : 'yAxis'][0],\n\t\t\t\tstartPos = chart[isX ? 'mouseDownX' : 'mouseDownY'],\n\t\t\t\thalfPointRange = (axis.pointRange || 0) / 2,\n\t\t\t\textremes = axis.getExtremes(),\n\t\t\t\tnewMin = axis.toValue(startPos - mousePos, true) + halfPointRange,\n\t\t\t\tnewMax = axis.toValue(startPos + chart[isX ? 'plotWidth' : 'plotHeight'] - mousePos, true) - halfPointRange;\n\n\t\t\tif (axis.series.length && newMin > mathMin(extremes.dataMin, extremes.min) && newMax < mathMax(extremes.dataMax, extremes.max)) {\n\t\t\t\taxis.setExtremes(newMin, newMax, false, false, { trigger: 'pan' });\n\t\t\t\tdoRedraw = true;\n\t\t\t}\n\n\t\t\tchart[isX ? 'mouseDownX' : 'mouseDownY'] = mousePos; // set new reference for next run\n\t\t});\n\n\t\tif (doRedraw) {\n\t\t\tchart.redraw(false);\n\t\t}\n\t\tcss(chart.container, { cursor: 'move' });\n\t},\n\n\t/**\n\t * Show the title and subtitle of the chart\n\t *\n\t * @param titleOptions {Object} New title options\n\t * @param subtitleOptions {Object} New subtitle options\n\t *\n\t */\n\tsetTitle: function (titleOptions, subtitleOptions) {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\tchartTitleOptions,\n\t\t\tchartSubtitleOptions;\n\n\t\tchartTitleOptions = options.title = merge(options.title, titleOptions);\n\t\tchartSubtitleOptions = options.subtitle = merge(options.subtitle, subtitleOptions);\n\n\t\t// add title and subtitle\n\t\teach([\n\t\t\t['title', titleOptions, chartTitleOptions],\n\t\t\t['subtitle', subtitleOptions, chartSubtitleOptions]\n\t\t], function (arr) {\n\t\t\tvar name = arr[0],\n\t\t\t\ttitle = chart[name],\n\t\t\t\ttitleOptions = arr[1],\n\t\t\t\tchartTitleOptions = arr[2];\n\n\t\t\tif (title && titleOptions) {\n\t\t\t\tchart[name] = title = title.destroy(); // remove old\n\t\t\t}\n\t\t\t\n\t\t\tif (chartTitleOptions && chartTitleOptions.text && !title) {\n\t\t\t\tchart[name] = chart.renderer.text(\n\t\t\t\t\tchartTitleOptions.text,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tchartTitleOptions.useHTML\n\t\t\t\t)\n\t\t\t\t.attr({\n\t\t\t\t\talign: chartTitleOptions.align,\n\t\t\t\t\t'class': PREFIX + name,\n\t\t\t\t\tzIndex: chartTitleOptions.zIndex || 4\n\t\t\t\t})\n\t\t\t\t.css(chartTitleOptions.style)\n\t\t\t\t.add();\n\t\t\t}\t\n\t\t});\n\t\tchart.layOutTitles();\n\t},\n\n\t/**\n\t * Lay out the chart titles and cache the full offset height for use in getMargins\n\t */\n\tlayOutTitles: function () {\n\t\tvar titleOffset = 0,\n\t\t\ttitle = this.title,\n\t\t\tsubtitle = this.subtitle,\n\t\t\toptions = this.options,\n\t\t\ttitleOptions = options.title,\n\t\t\tsubtitleOptions = options.subtitle,\n\t\t\tautoWidth = this.spacingBox.width - 44; // 44 makes room for default context button\n\n\t\tif (title) {\n\t\t\ttitle\n\t\t\t\t.css({ width: (titleOptions.width || autoWidth) + PX })\n\t\t\t\t.align(extend({ y: 15 }, titleOptions), false, 'spacingBox');\n\t\t\t\n\t\t\tif (!titleOptions.floating && !titleOptions.verticalAlign) {\n\t\t\t\ttitleOffset = title.getBBox().height;\n\n\t\t\t\t// Adjust for browser consistency + backwards compat after #776 fix\n\t\t\t\tif (titleOffset >= 18 && titleOffset <= 25) {\n\t\t\t\t\ttitleOffset = 15; \n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (subtitle) {\n\t\t\tsubtitle\n\t\t\t\t.css({ width: (subtitleOptions.width || autoWidth) + PX })\n\t\t\t\t.align(extend({ y: titleOffset + titleOptions.margin }, subtitleOptions), false, 'spacingBox');\n\t\t\t\n\t\t\tif (!subtitleOptions.floating && !subtitleOptions.verticalAlign) {\n\t\t\t\ttitleOffset = mathCeil(titleOffset + subtitle.getBBox().height);\n\t\t\t}\n\t\t}\n\n\t\tthis.titleOffset = titleOffset; // used in getMargins\n\t},\n\n\t/**\n\t * Get chart width and height according to options and container size\n\t */\n\tgetChartSize: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\trenderTo = chart.renderToClone || chart.renderTo;\n\n\t\t// get inner width and height from jQuery (#824)\n\t\tchart.containerWidth = adapterRun(renderTo, 'width');\n\t\tchart.containerHeight = adapterRun(renderTo, 'height');\n\t\t\n\t\tchart.chartWidth = mathMax(0, optionsChart.width || chart.containerWidth || 600); // #1393, 1460\n\t\tchart.chartHeight = mathMax(0, pick(optionsChart.height,\n\t\t\t// the offsetHeight of an empty container is 0 in standard browsers, but 19 in IE7:\n\t\t\tchart.containerHeight > 19 ? chart.containerHeight : 400));\n\t},\n\n\t/**\n\t * Create a clone of the chart's renderTo div and place it outside the viewport to allow\n\t * size computation on chart.render and chart.redraw\n\t */\n\tcloneRenderTo: function (revert) {\n\t\tvar clone = this.renderToClone,\n\t\t\tcontainer = this.container;\n\t\t\n\t\t// Destroy the clone and bring the container back to the real renderTo div\n\t\tif (revert) {\n\t\t\tif (clone) {\n\t\t\t\tthis.renderTo.appendChild(container);\n\t\t\t\tdiscardElement(clone);\n\t\t\t\tdelete this.renderToClone;\n\t\t\t}\n\t\t\n\t\t// Set up the clone\n\t\t} else {\n\t\t\tif (container && container.parentNode === this.renderTo) {\n\t\t\t\tthis.renderTo.removeChild(container); // do not clone this\n\t\t\t}\n\t\t\tthis.renderToClone = clone = this.renderTo.cloneNode(0);\n\t\t\tcss(clone, {\n\t\t\t\tposition: ABSOLUTE,\n\t\t\t\ttop: '-9999px',\n\t\t\t\tdisplay: 'block' // #833\n\t\t\t});\n\t\t\tdoc.body.appendChild(clone);\n\t\t\tif (container) {\n\t\t\t\tclone.appendChild(container);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Get the containing element, determine the size and create the inner container\n\t * div to hold the chart\n\t */\n\tgetContainer: function () {\n\t\tvar chart = this,\n\t\t\tcontainer,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\tchartWidth,\n\t\t\tchartHeight,\n\t\t\trenderTo,\n\t\t\tindexAttrName = 'data-highcharts-chart',\n\t\t\toldChartIndex,\n\t\t\tcontainerId;\n\n\t\tchart.renderTo = renderTo = optionsChart.renderTo;\n\t\tcontainerId = PREFIX + idCounter++;\n\n\t\tif (isString(renderTo)) {\n\t\t\tchart.renderTo = renderTo = doc.getElementById(renderTo);\n\t\t}\n\t\t\n\t\t// Display an error if the renderTo is wrong\n\t\tif (!renderTo) {\n\t\t\terror(13, true);\n\t\t}\n\t\t\n\t\t// If the container already holds a chart, destroy it\n\t\toldChartIndex = pInt(attr(renderTo, indexAttrName));\n\t\tif (!isNaN(oldChartIndex) && charts[oldChartIndex]) {\n\t\t\tcharts[oldChartIndex].destroy();\n\t\t}\t\t\n\t\t\n\t\t// Make a reference to the chart from the div\n\t\tattr(renderTo, indexAttrName, chart.index);\n\n\t\t// remove previous chart\n\t\trenderTo.innerHTML = '';\n\n\t\t// If the container doesn't have an offsetWidth, it has or is a child of a node\n\t\t// that has display:none. We need to temporarily move it out to a visible\n\t\t// state to determine the size, else the legend and tooltips won't render\n\t\t// properly\n\t\tif (!renderTo.offsetWidth) {\n\t\t\tchart.cloneRenderTo();\n\t\t}\n\n\t\t// get the width and height\n\t\tchart.getChartSize();\n\t\tchartWidth = chart.chartWidth;\n\t\tchartHeight = chart.chartHeight;\n\n\t\t// create the inner container\n\t\tchart.container = container = createElement(DIV, {\n\t\t\t\tclassName: PREFIX + 'container' +\n\t\t\t\t\t(optionsChart.className ? ' ' + optionsChart.className : ''),\n\t\t\t\tid: containerId\n\t\t\t}, extend({\n\t\t\t\tposition: RELATIVE,\n\t\t\t\toverflow: HIDDEN, // needed for context menu (avoid scrollbars) and\n\t\t\t\t\t// content overflow in IE\n\t\t\t\twidth: chartWidth + PX,\n\t\t\t\theight: chartHeight + PX,\n\t\t\t\ttextAlign: 'left',\n\t\t\t\tlineHeight: 'normal', // #427\n\t\t\t\tzIndex: 0, // #1072\n\t\t\t\t'-webkit-tap-highlight-color': 'rgba(0,0,0,0)'\n\t\t\t}, optionsChart.style),\n\t\t\tchart.renderToClone || renderTo\n\t\t);\n\n\t\t// cache the cursor (#1650)\n\t\tchart._cursor = container.style.cursor;\n\n\t\tchart.renderer =\n\t\t\toptionsChart.forExport ? // force SVG, used for SVG export\n\t\t\t\tnew SVGRenderer(container, chartWidth, chartHeight, true) :\n\t\t\t\tnew Renderer(container, chartWidth, chartHeight);\n\n\t\tif (useCanVG) {\n\t\t\t// If we need canvg library, extend and configure the renderer\n\t\t\t// to get the tracker for translating mouse events\n\t\t\tchart.renderer.create(chart, container, chartWidth, chartHeight);\n\t\t}\n\t},\n\n\t/**\n\t * Calculate margins by rendering axis labels in a preliminary position. Title,\n\t * subtitle and legend have already been rendered at this stage, but will be\n\t * moved into their final positions\n\t */\n\tgetMargins: function () {\n\t\tvar chart = this,\n\t\t\tspacing = chart.spacing,\n\t\t\taxisOffset,\n\t\t\tlegend = chart.legend,\n\t\t\tmargin = chart.margin,\n\t\t\tlegendOptions = chart.options.legend,\n\t\t\tlegendMargin = pick(legendOptions.margin, 10),\n\t\t\tlegendX = legendOptions.x,\n\t\t\tlegendY = legendOptions.y,\n\t\t\talign = legendOptions.align,\n\t\t\tverticalAlign = legendOptions.verticalAlign,\n\t\t\ttitleOffset = chart.titleOffset;\n\n\t\tchart.resetMargins();\n\t\taxisOffset = chart.axisOffset;\n\n\t\t// Adjust for title and subtitle\n\t\tif (titleOffset && !defined(margin[0])) {\n\t\t\tchart.plotTop = mathMax(chart.plotTop, titleOffset + chart.options.title.margin + spacing[0]);\n\t\t}\n\t\t\n\t\t// Adjust for legend\n\t\tif (legend.display && !legendOptions.floating) {\n\t\t\tif (align === 'right') { // horizontal alignment handled first\n\t\t\t\tif (!defined(margin[1])) {\n\t\t\t\t\tchart.marginRight = mathMax(\n\t\t\t\t\t\tchart.marginRight,\n\t\t\t\t\t\tlegend.legendWidth - legendX + legendMargin + spacing[1]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (align === 'left') {\n\t\t\t\tif (!defined(margin[3])) {\n\t\t\t\t\tchart.plotLeft = mathMax(\n\t\t\t\t\t\tchart.plotLeft,\n\t\t\t\t\t\tlegend.legendWidth + legendX + legendMargin + spacing[3]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t} else if (verticalAlign === 'top') {\n\t\t\t\tif (!defined(margin[0])) {\n\t\t\t\t\tchart.plotTop = mathMax(\n\t\t\t\t\t\tchart.plotTop,\n\t\t\t\t\t\tlegend.legendHeight + legendY + legendMargin + spacing[0]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t} else if (verticalAlign === 'bottom') {\n\t\t\t\tif (!defined(margin[2])) {\n\t\t\t\t\tchart.marginBottom = mathMax(\n\t\t\t\t\t\tchart.marginBottom,\n\t\t\t\t\t\tlegend.legendHeight - legendY + legendMargin + spacing[2]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// adjust for scroller\n\t\tif (chart.extraBottomMargin) {\n\t\t\tchart.marginBottom += chart.extraBottomMargin;\n\t\t}\n\t\tif (chart.extraTopMargin) {\n\t\t\tchart.plotTop += chart.extraTopMargin;\n\t\t}\n\n\t\t// pre-render axes to get labels offset width\n\t\tif (chart.hasCartesianSeries) {\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\taxis.getOffset();\n\t\t\t});\n\t\t}\n\t\t\n\t\tif (!defined(margin[3])) {\n\t\t\tchart.plotLeft += axisOffset[3];\n\t\t}\n\t\tif (!defined(margin[0])) {\n\t\t\tchart.plotTop += axisOffset[0];\n\t\t}\n\t\tif (!defined(margin[2])) {\n\t\t\tchart.marginBottom += axisOffset[2];\n\t\t}\n\t\tif (!defined(margin[1])) {\n\t\t\tchart.marginRight += axisOffset[1];\n\t\t}\n\n\t\tchart.setChartSize();\n\n\t},\n\n\t/**\n\t * Add the event handlers necessary for auto resizing\n\t *\n\t */\n\tinitReflow: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\trenderTo = chart.renderTo,\n\t\t\treflowTimeout;\n\t\t\t\n\t\tfunction reflow(e) {\n\t\t\tvar width = optionsChart.width || adapterRun(renderTo, 'width'),\n\t\t\t\theight = optionsChart.height || adapterRun(renderTo, 'height'),\n\t\t\t\ttarget = e ? e.target : win; // #805 - MooTools doesn't supply e\n\t\t\t\t\n\t\t\t// Width and height checks for display:none. Target is doc in IE8 and Opera,\n\t\t\t// win in Firefox, Chrome and IE9.\n\t\t\tif (!chart.hasUserSize && width && height && (target === win || target === doc)) {\n\t\t\t\t\n\t\t\t\tif (width !== chart.containerWidth || height !== chart.containerHeight) {\n\t\t\t\t\tclearTimeout(reflowTimeout);\n\t\t\t\t\tchart.reflowTimeout = reflowTimeout = setTimeout(function () {\n\t\t\t\t\t\tif (chart.container) { // It may have been destroyed in the meantime (#1257)\n\t\t\t\t\t\t\tchart.setSize(width, height, false);\n\t\t\t\t\t\t\tchart.hasUserSize = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 100);\n\t\t\t\t}\n\t\t\t\tchart.containerWidth = width;\n\t\t\t\tchart.containerHeight = height;\n\t\t\t}\n\t\t}\n\t\tchart.reflow = reflow;\n\t\taddEvent(win, 'resize', reflow);\n\t\taddEvent(chart, 'destroy', function () {\n\t\t\tremoveEvent(win, 'resize', reflow);\n\t\t});\n\t},\n\n\t/**\n\t * Resize the chart to a given width and height\n\t * @param {Number} width\n\t * @param {Number} height\n\t * @param {Object|Boolean} animation\n\t */\n\tsetSize: function (width, height, animation) {\n\t\tvar chart = this,\n\t\t\tchartWidth,\n\t\t\tchartHeight,\n\t\t\tfireEndResize;\n\n\t\t// Handle the isResizing counter\n\t\tchart.isResizing += 1;\n\t\tfireEndResize = function () {\n\t\t\tif (chart) {\n\t\t\t\tfireEvent(chart, 'endResize', null, function () {\n\t\t\t\t\tchart.isResizing -= 1;\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t// set the animation for the current process\n\t\tsetAnimation(animation, chart);\n\n\t\tchart.oldChartHeight = chart.chartHeight;\n\t\tchart.oldChartWidth = chart.chartWidth;\n\t\tif (defined(width)) {\n\t\t\tchart.chartWidth = chartWidth = mathMax(0, mathRound(width));\n\t\t\tchart.hasUserSize = !!chartWidth;\n\t\t}\n\t\tif (defined(height)) {\n\t\t\tchart.chartHeight = chartHeight = mathMax(0, mathRound(height));\n\t\t}\n\n\t\tcss(chart.container, {\n\t\t\twidth: chartWidth + PX,\n\t\t\theight: chartHeight + PX\n\t\t});\n\t\tchart.setChartSize(true);\n\t\tchart.renderer.setSize(chartWidth, chartHeight, animation);\n\n\t\t// handle axes\n\t\tchart.maxTicks = null;\n\t\teach(chart.axes, function (axis) {\n\t\t\taxis.isDirty = true;\n\t\t\taxis.setScale();\n\t\t});\n\n\t\t// make sure non-cartesian series are also handled\n\t\teach(chart.series, function (serie) {\n\t\t\tserie.isDirty = true;\n\t\t});\n\n\t\tchart.isDirtyLegend = true; // force legend redraw\n\t\tchart.isDirtyBox = true; // force redraw of plot and chart border\n\n\t\tchart.getMargins();\n\n\t\tchart.redraw(animation);\n\n\n\t\tchart.oldChartHeight = null;\n\t\tfireEvent(chart, 'resize');\n\n\t\t// fire endResize and set isResizing back\n\t\t// If animation is disabled, fire without delay\n\t\tif (globalAnimation === false) {\n\t\t\tfireEndResize();\n\t\t} else { // else set a timeout with the animation duration\n\t\t\tsetTimeout(fireEndResize, (globalAnimation && globalAnimation.duration) || 500);\n\t\t}\n\t},\n\n\t/**\n\t * Set the public chart properties. This is done before and after the pre-render\n\t * to determine margin sizes\n\t */\n\tsetChartSize: function (skipAxes) {\n\t\tvar chart = this,\n\t\t\tinverted = chart.inverted,\n\t\t\trenderer = chart.renderer,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\tspacing = chart.spacing,\n\t\t\tclipOffset = chart.clipOffset,\n\t\t\tclipX,\n\t\t\tclipY,\n\t\t\tplotLeft,\n\t\t\tplotTop,\n\t\t\tplotWidth,\n\t\t\tplotHeight,\n\t\t\tplotBorderWidth;\n\n\t\tchart.plotLeft = plotLeft = mathRound(chart.plotLeft);\n\t\tchart.plotTop = plotTop = mathRound(chart.plotTop);\n\t\tchart.plotWidth = plotWidth = mathMax(0, mathRound(chartWidth - plotLeft - chart.marginRight));\n\t\tchart.plotHeight = plotHeight = mathMax(0, mathRound(chartHeight - plotTop - chart.marginBottom));\n\n\t\tchart.plotSizeX = inverted ? plotHeight : plotWidth;\n\t\tchart.plotSizeY = inverted ? plotWidth : plotHeight;\n\t\t\n\t\tchart.plotBorderWidth = optionsChart.plotBorderWidth || 0;\n\n\t\t// Set boxes used for alignment\n\t\tchart.spacingBox = renderer.spacingBox = {\n\t\t\tx: spacing[3],\n\t\t\ty: spacing[0],\n\t\t\twidth: chartWidth - spacing[3] - spacing[1],\n\t\t\theight: chartHeight - spacing[0] - spacing[2]\n\t\t};\n\t\tchart.plotBox = renderer.plotBox = {\n\t\t\tx: plotLeft,\n\t\t\ty: plotTop,\n\t\t\twidth: plotWidth,\n\t\t\theight: plotHeight\n\t\t};\n\n\t\tplotBorderWidth = 2 * mathFloor(chart.plotBorderWidth / 2);\n\t\tclipX = mathCeil(mathMax(plotBorderWidth, clipOffset[3]) / 2);\n\t\tclipY = mathCeil(mathMax(plotBorderWidth, clipOffset[0]) / 2);\n\t\tchart.clipBox = {\n\t\t\tx: clipX, \n\t\t\ty: clipY, \n\t\t\twidth: mathFloor(chart.plotSizeX - mathMax(plotBorderWidth, clipOffset[1]) / 2 - clipX), \n\t\t\theight: mathFloor(chart.plotSizeY - mathMax(plotBorderWidth, clipOffset[2]) / 2 - clipY)\n\t\t};\n\n\t\tif (!skipAxes) {\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\taxis.setAxisSize();\n\t\t\t\taxis.setAxisTranslation();\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Initial margins before auto size margins are applied\n\t */\n\tresetMargins: function () {\n\t\tvar chart = this,\n\t\t\tspacing = chart.spacing,\n\t\t\tmargin = chart.margin;\n\n\t\tchart.plotTop = pick(margin[0], spacing[0]);\n\t\tchart.marginRight = pick(margin[1], spacing[1]);\n\t\tchart.marginBottom = pick(margin[2], spacing[2]);\n\t\tchart.plotLeft = pick(margin[3], spacing[3]);\n\t\tchart.axisOffset = [0, 0, 0, 0]; // top, right, bottom, left\n\t\tchart.clipOffset = [0, 0, 0, 0];\n\t},\n\n\t/**\n\t * Draw the borders and backgrounds for chart and plot area\n\t */\n\tdrawChartBox: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\tchartBackground = chart.chartBackground,\n\t\t\tplotBackground = chart.plotBackground,\n\t\t\tplotBorder = chart.plotBorder,\n\t\t\tplotBGImage = chart.plotBGImage,\n\t\t\tchartBorderWidth = optionsChart.borderWidth || 0,\n\t\t\tchartBackgroundColor = optionsChart.backgroundColor,\n\t\t\tplotBackgroundColor = optionsChart.plotBackgroundColor,\n\t\t\tplotBackgroundImage = optionsChart.plotBackgroundImage,\n\t\t\tplotBorderWidth = optionsChart.plotBorderWidth || 0,\n\t\t\tmgn,\n\t\t\tbgAttr,\n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tplotBox = chart.plotBox,\n\t\t\tclipRect = chart.clipRect,\n\t\t\tclipBox = chart.clipBox;\n\n\t\t// Chart area\n\t\tmgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0);\n\n\t\tif (chartBorderWidth || chartBackgroundColor) {\n\t\t\tif (!chartBackground) {\n\t\t\t\t\n\t\t\t\tbgAttr = {\n\t\t\t\t\tfill: chartBackgroundColor || NONE\n\t\t\t\t};\n\t\t\t\tif (chartBorderWidth) { // #980\n\t\t\t\t\tbgAttr.stroke = optionsChart.borderColor;\n\t\t\t\t\tbgAttr['stroke-width'] = chartBorderWidth;\n\t\t\t\t}\n\t\t\t\tchart.chartBackground = renderer.rect(mgn / 2, mgn / 2, chartWidth - mgn, chartHeight - mgn,\n\t\t\t\t\t\toptionsChart.borderRadius, chartBorderWidth)\n\t\t\t\t\t.attr(bgAttr)\n\t\t\t\t\t.add()\n\t\t\t\t\t.shadow(optionsChart.shadow);\n\n\t\t\t} else { // resize\n\t\t\t\tchartBackground.animate(\n\t\t\t\t\tchartBackground.crisp(null, null, null, chartWidth - mgn, chartHeight - mgn)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\n\t\t// Plot background\n\t\tif (plotBackgroundColor) {\n\t\t\tif (!plotBackground) {\n\t\t\t\tchart.plotBackground = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tfill: plotBackgroundColor\n\t\t\t\t\t})\n\t\t\t\t\t.add()\n\t\t\t\t\t.shadow(optionsChart.plotShadow);\n\t\t\t} else {\n\t\t\t\tplotBackground.animate(plotBox);\n\t\t\t}\n\t\t}\n\t\tif (plotBackgroundImage) {\n\t\t\tif (!plotBGImage) {\n\t\t\t\tchart.plotBGImage = renderer.image(plotBackgroundImage, plotLeft, plotTop, plotWidth, plotHeight)\n\t\t\t\t\t.add();\n\t\t\t} else {\n\t\t\t\tplotBGImage.animate(plotBox);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Plot clip\n\t\tif (!clipRect) {\n\t\t\tchart.clipRect = renderer.clipRect(clipBox);\n\t\t} else {\n\t\t\tclipRect.animate({\n\t\t\t\twidth: clipBox.width,\n\t\t\t\theight: clipBox.height\n\t\t\t});\n\t\t}\n\n\t\t// Plot area border\n\t\tif (plotBorderWidth) {\n\t\t\tif (!plotBorder) {\n\t\t\t\tchart.plotBorder = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0, -plotBorderWidth)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tstroke: optionsChart.plotBorderColor,\n\t\t\t\t\t\t'stroke-width': plotBorderWidth,\n\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t})\n\t\t\t\t\t.add();\n\t\t\t} else {\n\t\t\t\tplotBorder.animate(\n\t\t\t\t\tplotBorder.crisp(null, plotLeft, plotTop, plotWidth, plotHeight)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// reset\n\t\tchart.isDirtyBox = false;\n\t},\n\n\t/**\n\t * Detect whether a certain chart property is needed based on inspecting its options\n\t * and series. This mainly applies to the chart.invert property, and in extensions to \n\t * the chart.angular and chart.polar properties.\n\t */\n\tpropFromSeries: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\tklass,\n\t\t\tseriesOptions = chart.options.series,\n\t\t\ti,\n\t\t\tvalue;\n\t\t\t\n\t\t\t\n\t\teach(['inverted', 'angular', 'polar'], function (key) {\n\t\t\t\n\t\t\t// The default series type's class\n\t\t\tklass = seriesTypes[optionsChart.type || optionsChart.defaultSeriesType];\n\t\t\t\n\t\t\t// Get the value from available chart-wide properties\n\t\t\tvalue = (\n\t\t\t\tchart[key] || // 1. it is set before\n\t\t\t\toptionsChart[key] || // 2. it is set in the options\n\t\t\t\t(klass && klass.prototype[key]) // 3. it's default series class requires it\n\t\t\t);\n\t\n\t\t\t// 4. Check if any the chart's series require it\n\t\t\ti = seriesOptions && seriesOptions.length;\n\t\t\twhile (!value && i--) {\n\t\t\t\tklass = seriesTypes[seriesOptions[i].type];\n\t\t\t\tif (klass && klass.prototype[key]) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Set the chart property\n\t\t\tchart[key] = value;\t\n\t\t});\n\t\t\n\t},\n\n\t/**\n\t * Link two or more series together. This is done initially from Chart.render,\n\t * and after Chart.addSeries and Series.remove.\n\t */\n\tlinkSeries: function () {\n\t\tvar chart = this,\n\t\t\tchartSeries = chart.series;\n\n\t\t// Reset links\n\t\teach(chartSeries, function (series) {\n\t\t\tseries.linkedSeries.length = 0;\n\t\t});\n\n\t\t// Apply new links\n\t\teach(chartSeries, function (series) {\n\t\t\tvar linkedTo = series.options.linkedTo;\n\t\t\tif (isString(linkedTo)) {\n\t\t\t\tif (linkedTo === ':previous') {\n\t\t\t\t\tlinkedTo = chart.series[series.index - 1];\n\t\t\t\t} else {\n\t\t\t\t\tlinkedTo = chart.get(linkedTo);\n\t\t\t\t}\n\t\t\t\tif (linkedTo) {\n\t\t\t\t\tlinkedTo.linkedSeries.push(series);\n\t\t\t\t\tseries.linkedParent = linkedTo;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Render all graphics for the chart\n\t */\n\trender: function () {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = chart.options;\n\n\t\tvar labels = options.labels,\n\t\t\tcredits = options.credits,\n\t\t\tcreditsHref;\n\n\t\t// Title\n\t\tchart.setTitle();\n\n\n\t\t// Legend\n\t\tchart.legend = new Legend(chart, options.legend);\n\n\t\tchart.getStacks(); // render stacks\n\n\t\t// Get margins by pre-rendering axes\n\t\t// set axes scales\n\t\teach(axes, function (axis) {\n\t\t\taxis.setScale();\n\t\t});\n\n\t\tchart.getMargins();\n\n\t\tchart.maxTicks = null; // reset for second pass\n\t\teach(axes, function (axis) {\n\t\t\taxis.setTickPositions(true); // update to reflect the new margins\n\t\t\taxis.setMaxTicks();\n\t\t});\n\t\tchart.adjustTickAmounts();\n\t\tchart.getMargins(); // second pass to check for new labels\n\n\n\t\t// Draw the borders and backgrounds\n\t\tchart.drawChartBox();\t\t\n\n\n\t\t// Axes\n\t\tif (chart.hasCartesianSeries) {\n\t\t\teach(axes, function (axis) {\n\t\t\t\taxis.render();\n\t\t\t});\n\t\t}\n\n\t\t// The series\n\t\tif (!chart.seriesGroup) {\n\t\t\tchart.seriesGroup = renderer.g('series-group')\n\t\t\t\t.attr({ zIndex: 3 })\n\t\t\t\t.add();\n\t\t}\n\t\teach(chart.series, function (serie) {\n\t\t\tserie.translate();\n\t\t\tserie.setTooltipPoints();\n\t\t\tserie.render();\n\t\t});\n\n\t\t// Labels\n\t\tif (labels.items) {\n\t\t\teach(labels.items, function (label) {\n\t\t\t\tvar style = extend(labels.style, label.style),\n\t\t\t\t\tx = pInt(style.left) + chart.plotLeft,\n\t\t\t\t\ty = pInt(style.top) + chart.plotTop + 12;\n\n\t\t\t\t// delete to prevent rewriting in IE\n\t\t\t\tdelete style.left;\n\t\t\t\tdelete style.top;\n\n\t\t\t\trenderer.text(\n\t\t\t\t\tlabel.html,\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t)\n\t\t\t\t.attr({ zIndex: 2 })\n\t\t\t\t.css(style)\n\t\t\t\t.add();\n\n\t\t\t});\n\t\t}\n\n\t\t// Credits\n\t\tif (credits.enabled && !chart.credits) {\n\t\t\tcreditsHref = credits.href;\n\t\t\tchart.credits = renderer.text(\n\t\t\t\tcredits.text,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t)\n\t\t\t.on('click', function () {\n\t\t\t\tif (creditsHref) {\n\t\t\t\t\tlocation.href = creditsHref;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.attr({\n\t\t\t\talign: credits.position.align,\n\t\t\t\tzIndex: 8\n\t\t\t})\n\t\t\t.css(credits.style)\n\t\t\t.add()\n\t\t\t.align(credits.position);\n\t\t}\n\n\t\t// Set flag\n\t\tchart.hasRendered = true;\n\n\t},\n\n\t/**\n\t * Clean up memory usage\n\t */\n\tdestroy: function () {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\tseries = chart.series,\n\t\t\tcontainer = chart.container,\n\t\t\ti,\n\t\t\tparentNode = container && container.parentNode;\n\t\t\t\n\t\t// fire the chart.destoy event\n\t\tfireEvent(chart, 'destroy');\n\t\t\n\t\t// Delete the chart from charts lookup array\n\t\tcharts[chart.index] = UNDEFINED;\n\t\tchart.renderTo.removeAttribute('data-highcharts-chart');\n\n\t\t// remove events\n\t\tremoveEvent(chart);\n\n\t\t// ==== Destroy collections:\n\t\t// Destroy axes\n\t\ti = axes.length;\n\t\twhile (i--) {\n\t\t\taxes[i] = axes[i].destroy();\n\t\t}\n\n\t\t// Destroy each series\n\t\ti = series.length;\n\t\twhile (i--) {\n\t\t\tseries[i] = series[i].destroy();\n\t\t}\n\n\t\t// ==== Destroy chart properties:\n\t\teach(['title', 'subtitle', 'chartBackground', 'plotBackground', 'plotBGImage', \n\t\t\t\t'plotBorder', 'seriesGroup', 'clipRect', 'credits', 'pointer', 'scroller', \n\t\t\t\t'rangeSelector', 'legend', 'resetZoomButton', 'tooltip', 'renderer'], function (name) {\n\t\t\tvar prop = chart[name];\n\n\t\t\tif (prop && prop.destroy) {\n\t\t\t\tchart[name] = prop.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// remove container and all SVG\n\t\tif (container) { // can break in IE when destroyed before finished loading\n\t\t\tcontainer.innerHTML = '';\n\t\t\tremoveEvent(container);\n\t\t\tif (parentNode) {\n\t\t\t\tdiscardElement(container);\n\t\t\t}\n\n\t\t}\n\n\t\t// clean it all up\n\t\tfor (i in chart) {\n\t\t\tdelete chart[i];\n\t\t}\n\n\t},\n\n\n\t/**\n\t * VML namespaces can't be added until after complete. Listening\n\t * for Perini's doScroll hack is not enough.\n\t */\n\tisReadyToRender: function () {\n\t\tvar chart = this;\n\n\t\t// Note: in spite of JSLint's complaints, win == win.top is required\n\t\t/*jslint eqeq: true*/\n\t\tif ((!hasSVG && (win == win.top && doc.readyState !== 'complete')) || (useCanVG && !win.canvg)) {\n\t\t/*jslint eqeq: false*/\n\t\t\tif (useCanVG) {\n\t\t\t\t// Delay rendering until canvg library is downloaded and ready\n\t\t\t\tCanVGController.push(function () { chart.firstRender(); }, chart.options.global.canvasToolsURL);\n\t\t\t} else {\n\t\t\t\tdoc.attachEvent('onreadystatechange', function () {\n\t\t\t\t\tdoc.detachEvent('onreadystatechange', chart.firstRender);\n\t\t\t\t\tif (doc.readyState === 'complete') {\n\t\t\t\t\t\tchart.firstRender();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t/**\n\t * Prepare for first rendering after all data are loaded\n\t */\n\tfirstRender: function () {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\tcallback = chart.callback;\n\n\t\t// Check whether the chart is ready to render\n\t\tif (!chart.isReadyToRender()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Create the container\n\t\tchart.getContainer();\n\n\t\t// Run an early event after the container and renderer are established\n\t\tfireEvent(chart, 'init');\n\n\t\t\n\t\tchart.resetMargins();\n\t\tchart.setChartSize();\n\n\t\t// Set the common chart properties (mainly invert) from the given series\n\t\tchart.propFromSeries();\n\n\t\t// get axes\n\t\tchart.getAxes();\n\n\t\t// Initialize the series\n\t\teach(options.series || [], function (serieOptions) {\n\t\t\tchart.initSeries(serieOptions);\n\t\t});\n\n\t\tchart.linkSeries();\n\n\t\t// Run an event after axes and series are initialized, but before render. At this stage,\n\t\t// the series data is indexed and cached in the xData and yData arrays, so we can access\n\t\t// those before rendering. Used in Highstock. \n\t\tfireEvent(chart, 'beforeRender'); \n\n\t\t// depends on inverted and on margins being set\n\t\tchart.pointer = new Pointer(chart, options);\n\n\t\tchart.render();\n\n\t\t// add canvas\n\t\tchart.renderer.draw();\n\t\t// run callbacks\n\t\tif (callback) {\n\t\t\tcallback.apply(chart, [chart]);\n\t\t}\n\t\teach(chart.callbacks, function (fn) {\n\t\t\tfn.apply(chart, [chart]);\n\t\t});\n\t\t\n\t\t\n\t\t// If the chart was rendered outside the top container, put it back in\n\t\tchart.cloneRenderTo(true);\n\n\t\tfireEvent(chart, 'load');\n\n\t},\n\n\t/**\n\t* Creates arrays for spacing and margin from given options.\n\t*/\n\tsplashArray: function (target, options) {\n\t\tvar oVar = options[target],\n\t\t\ttArray = isObject(oVar) ? oVar : [oVar, oVar, oVar, oVar];\n\n\t\treturn [pick(options[target + 'Top'], tArray[0]),\n\t\t\t\tpick(options[target + 'Right'], tArray[1]),\n\t\t\t\tpick(options[target + 'Bottom'], tArray[2]),\n\t\t\t\tpick(options[target + 'Left'], tArray[3])];\n\t}\n}; // end Chart\n\n// Hook for exporting module\nChart.prototype.callbacks = [];\n/**\n * The Point object and prototype. Inheritable and used as base for PiePoint\n */\nvar Point = function () {};\nPoint.prototype = {\n\n\t/**\n\t * Initialize the point\n\t * @param {Object} series The series object containing this point\n\t * @param {Object} options The data in either number, array or object format\n\t */\n\tinit: function (series, options, x) {\n\n\t\tvar point = this,\n\t\t\tcolors;\n\t\tpoint.series = series;\n\t\tpoint.applyOptions(options, x);\n\t\tpoint.pointAttr = {};\n\n\t\tif (series.options.colorByPoint) {\n\t\t\tcolors = series.options.colors || series.chart.options.colors;\n\t\t\tpoint.color = point.color || colors[series.colorCounter++];\n\t\t\t// loop back to zero\n\t\t\tif (series.colorCounter === colors.length) {\n\t\t\t\tseries.colorCounter = 0;\n\t\t\t}\n\t\t}\n\n\t\tseries.chart.pointCount++;\n\t\treturn point;\n\t},\n\t/**\n\t * Apply the options containing the x and y data and possible some extra properties.\n\t * This is called on point init or from point.update.\n\t *\n\t * @param {Object} options\n\t */\n\tapplyOptions: function (options, x) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tpointValKey = series.pointValKey;\n\n\t\toptions = Point.prototype.optionsToObject.call(this, options);\n\n\t\t// copy options directly to point\n\t\textend(point, options);\n\t\tpoint.options = point.options ? extend(point.options, options) : options;\n\t\t\t\n\t\t// For higher dimension series types. For instance, for ranges, point.y is mapped to point.low.\n\t\tif (pointValKey) {\n\t\t\tpoint.y = point[pointValKey];\n\t\t}\n\t\t\n\t\t// If no x is set by now, get auto incremented value. All points must have an\n\t\t// x value, however the y value can be null to create a gap in the series\n\t\tif (point.x === UNDEFINED && series) {\n\t\t\tpoint.x = x === UNDEFINED ? series.autoIncrement() : x;\n\t\t}\n\t\t\n\t\treturn point;\n\t},\n\n\t/**\n\t * Transform number or array configs into objects\n\t */\n\toptionsToObject: function (options) {\n\t\tvar ret,\n\t\t\tseries = this.series,\n\t\t\tpointArrayMap = series.pointArrayMap || ['y'],\n\t\t\tvalueCount = pointArrayMap.length,\n\t\t\tfirstItemType,\n\t\t\ti = 0,\n\t\t\tj = 0;\n\n\t\tif (typeof options === 'number' || options === null) {\n\t\t\tret = { y: options };\n\n\t\t} else if (isArray(options)) {\n\t\t\tret = {};\n\t\t\t// with leading x value\n\t\t\tif (options.length > valueCount) {\n\t\t\t\tfirstItemType = typeof options[0];\n\t\t\t\tif (firstItemType === 'string') {\n\t\t\t\t\tret.name = options[0];\n\t\t\t\t} else if (firstItemType === 'number') {\n\t\t\t\t\tret.x = options[0];\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\twhile (j < valueCount) {\n\t\t\t\tret[pointArrayMap[j++]] = options[i++];\n\t\t\t}\t\t\t\n\t\t} else if (typeof options === 'object') {\n\t\t\tret = options;\n\n\t\t\t// This is the fastest way to detect if there are individual point dataLabels that need \n\t\t\t// to be considered in drawDataLabels. These can only occur in object configs.\n\t\t\tif (options.dataLabels) {\n\t\t\t\tseries._hasPointLabels = true;\n\t\t\t}\n\n\t\t\t// Same approach as above for markers\n\t\t\tif (options.marker) {\n\t\t\t\tseries._hasPointMarkers = true;\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Destroy a point to clear memory. Its reference still stays in series.data.\n\t */\n\tdestroy: function () {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\thoverPoints = chart.hoverPoints,\n\t\t\tprop;\n\n\t\tchart.pointCount--;\n\n\t\tif (hoverPoints) {\n\t\t\tpoint.setState();\n\t\t\terase(hoverPoints, point);\n\t\t\tif (!hoverPoints.length) {\n\t\t\t\tchart.hoverPoints = null;\n\t\t\t}\n\n\t\t}\n\t\tif (point === chart.hoverPoint) {\n\t\t\tpoint.onMouseOut();\n\t\t}\n\t\t\n\t\t// remove all events\n\t\tif (point.graphic || point.dataLabel) { // removeEvent and destroyElements are performance expensive\n\t\t\tremoveEvent(point);\n\t\t\tpoint.destroyElements();\n\t\t}\n\n\t\tif (point.legendItem) { // pies have legend items\n\t\t\tchart.legend.destroyItem(point);\n\t\t}\n\n\t\tfor (prop in point) {\n\t\t\tpoint[prop] = null;\n\t\t}\n\n\n\t},\n\n\t/**\n\t * Destroy SVG elements associated with the point\n\t */\n\tdestroyElements: function () {\n\t\tvar point = this,\n\t\t\tprops = ['graphic', 'dataLabel', 'dataLabelUpper', 'group', 'connector', 'shadowGroup'],\n\t\t\tprop,\n\t\t\ti = 6;\n\t\twhile (i--) {\n\t\t\tprop = props[i];\n\t\t\tif (point[prop]) {\n\t\t\t\tpoint[prop] = point[prop].destroy();\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Return the configuration hash needed for the data label and tooltip formatters\n\t */\n\tgetLabelConfig: function () {\n\t\tvar point = this;\n\t\treturn {\n\t\t\tx: point.category,\n\t\t\ty: point.y,\n\t\t\tkey: point.name || point.category,\n\t\t\tseries: point.series,\n\t\t\tpoint: point,\n\t\t\tpercentage: point.percentage,\n\t\t\ttotal: point.total || point.stackTotal\n\t\t};\n\t},\n\n\t/**\n\t * Toggle the selection status of a point\n\t * @param {Boolean} selected Whether to select or unselect the point.\n\t * @param {Boolean} accumulate Whether to add to the previous selection. By default,\n\t *     this happens if the control key (Cmd on Mac) was pressed during clicking.\n\t */\n\tselect: function (selected, accumulate) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart;\n\n\t\tselected = pick(selected, !point.selected);\n\n\t\t// fire the event with the defalut handler\n\t\tpoint.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () {\n\t\t\tpoint.selected = point.options.selected = selected;\n\t\t\tseries.options.data[inArray(point, series.data)] = point.options;\n\t\t\t\n\t\t\tpoint.setState(selected && SELECT_STATE);\n\n\t\t\t// unselect all other points unless Ctrl or Cmd + click\n\t\t\tif (!accumulate) {\n\t\t\t\teach(chart.getSelectedPoints(), function (loopPoint) {\n\t\t\t\t\tif (loopPoint.selected && loopPoint !== point) {\n\t\t\t\t\t\tloopPoint.selected = loopPoint.options.selected = false;\n\t\t\t\t\t\tseries.options.data[inArray(loopPoint, series.data)] = loopPoint.options;\n\t\t\t\t\t\tloopPoint.setState(NORMAL_STATE);\n\t\t\t\t\t\tloopPoint.firePointEvent('unselect');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Runs on mouse over the point\n\t */\n\tonMouseOver: function (e) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\ttooltip = chart.tooltip,\n\t\t\thoverPoint = chart.hoverPoint;\n\n\t\t// set normal state to previous series\n\t\tif (hoverPoint && hoverPoint !== point) {\n\t\t\thoverPoint.onMouseOut();\n\t\t}\n\n\t\t// trigger the event\n\t\tpoint.firePointEvent('mouseOver');\n\n\t\t// update the tooltip\n\t\tif (tooltip && (!tooltip.shared || series.noSharedTooltip)) {\n\t\t\ttooltip.refresh(point, e);\n\t\t}\n\n\t\t// hover this\n\t\tpoint.setState(HOVER_STATE);\n\t\tchart.hoverPoint = point;\n\t},\n\t\n\t/**\n\t * Runs on mouse out from the point\n\t */\n\tonMouseOut: function () {\n\t\tvar chart = this.series.chart,\n\t\t\thoverPoints = chart.hoverPoints;\n\t\t\n\t\tif (!hoverPoints || inArray(this, hoverPoints) === -1) { // #887\n\t\t\tthis.firePointEvent('mouseOut');\n\t\n\t\t\tthis.setState();\n\t\t\tchart.hoverPoint = null;\n\t\t}\n\t},\n\n\t/**\n\t * Extendable method for formatting each point's tooltip line\n\t *\n\t * @return {String} A string to be concatenated in to the common tooltip text\n\t */\n\ttooltipFormatter: function (pointFormat) {\n\t\t\n\t\t// Insert options for valueDecimals, valuePrefix, and valueSuffix\n\t\tvar series = this.series,\n\t\t\tseriesTooltipOptions = series.tooltipOptions,\n\t\t\tvalueDecimals = pick(seriesTooltipOptions.valueDecimals, ''),\n\t\t\tvaluePrefix = seriesTooltipOptions.valuePrefix || '',\n\t\t\tvalueSuffix = seriesTooltipOptions.valueSuffix || '';\n\t\t\t\n\t\t// Loop over the point array map and replace unformatted values with sprintf formatting markup\n\t\teach(series.pointArrayMap || ['y'], function (key) {\n\t\t\tkey = '{point.' + key; // without the closing bracket\n\t\t\tif (valuePrefix || valueSuffix) {\n\t\t\t\tpointFormat = pointFormat.replace(key + '}', valuePrefix + key + '}' + valueSuffix);\n\t\t\t}\n\t\t\tpointFormat = pointFormat.replace(key + '}', key + ':,.' + valueDecimals + 'f}');\n\t\t});\n\t\t\n\t\treturn format(pointFormat, {\n\t\t\tpoint: this,\n\t\t\tseries: this.series\n\t\t});\n\t},\n\n\t/**\n\t * Update the point with new options (typically x/y data) and optionally redraw the series.\n\t *\n\t * @param {Object} options Point options as defined in the series.data array\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t *\n\t */\n\tupdate: function (options, redraw, animation) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tgraphic = point.graphic,\n\t\t\ti,\n\t\t\tdata = series.data,\n\t\t\tchart = series.chart,\n\t\t\tseriesOptions = series.options;\n\n\t\tredraw = pick(redraw, true);\n\n\t\t// fire the event with a default handler of doing the update\n\t\tpoint.firePointEvent('update', { options: options }, function () {\n\n\t\t\tpoint.applyOptions(options);\n\n\t\t\t// update visuals\n\t\t\tif (isObject(options)) {\n\t\t\t\tseries.getAttribs();\n\t\t\t\tif (graphic) {\n\t\t\t\t\tif (options.marker && options.marker.symbol) {\n\t\t\t\t\t\tpoint.graphic = graphic.destroy();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgraphic.attr(point.pointAttr[point.state || '']);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// record changes in the parallel arrays\n\t\t\ti = inArray(point, data);\n\t\t\tseries.xData[i] = point.x;\n\t\t\tseries.yData[i] = series.toYData ? series.toYData(point) : point.y;\n\t\t\tseries.zData[i] = point.z;\n\t\t\tseriesOptions.data[i] = point.options;\n\n\t\t\t// redraw\n\t\t\tseries.isDirty = series.isDirtyData = true;\n\t\t\tif (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320\n\t\t\t\tchart.isDirtyBox = true;\n\t\t\t}\n\t\t\t\n\t\t\tif (seriesOptions.legendType === 'point') { // #1831, #1885\n\t\t\t\tchart.legend.destroyItem(point);\n\t\t\t}\n\t\t\tif (redraw) {\n\t\t\t\tchart.redraw(animation);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Remove a point and optionally redraw the series and if necessary the axes\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\tremove: function (redraw, animation) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tpoints = series.points,\n\t\t\tchart = series.chart,\n\t\t\ti,\n\t\t\tdata = series.data;\n\n\t\tsetAnimation(animation, chart);\n\t\tredraw = pick(redraw, true);\n\n\t\t// fire the event with a default handler of removing the point\n\t\tpoint.firePointEvent('remove', null, function () {\n\n\t\t\t// splice all the parallel arrays\n\t\t\ti = inArray(point, data);\n\t\t\tif (data.length === points.length) {\n\t\t\t\tpoints.splice(i, 1);\t\t\t\n\t\t\t}\n\t\t\tdata.splice(i, 1);\n\t\t\tseries.options.data.splice(i, 1);\n\t\t\tseries.xData.splice(i, 1);\n\t\t\tseries.yData.splice(i, 1);\n\t\t\tseries.zData.splice(i, 1);\n\n\t\t\tpoint.destroy();\n\n\n\t\t\t// redraw\n\t\t\tseries.isDirty = true;\n\t\t\tseries.isDirtyData = true;\n\t\t\tif (redraw) {\n\t\t\t\tchart.redraw();\n\t\t\t}\n\t\t});\n\n\n\t},\n\n\t/**\n\t * Fire an event on the Point object. Must not be renamed to fireEvent, as this\n\t * causes a name clash in MooTools\n\t * @param {String} eventType\n\t * @param {Object} eventArgs Additional event arguments\n\t * @param {Function} defaultFunction Default event handler\n\t */\n\tfirePointEvent: function (eventType, eventArgs, defaultFunction) {\n\t\tvar point = this,\n\t\t\tseries = this.series,\n\t\t\tseriesOptions = series.options;\n\n\t\t// load event handlers on demand to save time on mouseover/out\n\t\tif (seriesOptions.point.events[eventType] || (point.options && point.options.events && point.options.events[eventType])) {\n\t\t\tthis.importEvents();\n\t\t}\n\n\t\t// add default handler if in selection mode\n\t\tif (eventType === 'click' && seriesOptions.allowPointSelect) {\n\t\t\tdefaultFunction = function (event) {\n\t\t\t\t// Control key is for Windows, meta (= Cmd key) for Mac, Shift for Opera\n\t\t\t\tpoint.select(null, event.ctrlKey || event.metaKey || event.shiftKey);\n\t\t\t};\n\t\t}\n\n\t\tfireEvent(this, eventType, eventArgs, defaultFunction);\n\t},\n\t/**\n\t * Import events from the series' and point's options. Only do it on\n\t * demand, to save processing time on hovering.\n\t */\n\timportEvents: function () {\n\t\tif (!this.hasImportedEvents) {\n\t\t\tvar point = this,\n\t\t\t\toptions = merge(point.series.options.point, point.options),\n\t\t\t\tevents = options.events,\n\t\t\t\teventType;\n\n\t\t\tpoint.events = events;\n\n\t\t\tfor (eventType in events) {\n\t\t\t\taddEvent(point, eventType, events[eventType]);\n\t\t\t}\n\t\t\tthis.hasImportedEvents = true;\n\n\t\t}\n\t},\n\n\t/**\n\t * Set the point's state\n\t * @param {String} state\n\t */\n\tsetState: function (state) {\n\t\tvar point = this,\n\t\t\tplotX = point.plotX,\n\t\t\tplotY = point.plotY,\n\t\t\tseries = point.series,\n\t\t\tstateOptions = series.options.states,\n\t\t\tmarkerOptions = defaultPlotOptions[series.type].marker && series.options.marker,\n\t\t\tnormalDisabled = markerOptions && !markerOptions.enabled,\n\t\t\tmarkerStateOptions = markerOptions && markerOptions.states[state],\n\t\t\tstateDisabled = markerStateOptions && markerStateOptions.enabled === false,\n\t\t\tstateMarkerGraphic = series.stateMarkerGraphic,\n\t\t\tpointMarker = point.marker || {},\n\t\t\tchart = series.chart,\n\t\t\tradius,\n\t\t\tnewSymbol,\n\t\t\tpointAttr = point.pointAttr;\n\n\t\tstate = state || NORMAL_STATE; // empty string\n\n\t\tif (\n\t\t\t\t// already has this state\n\t\t\t\tstate === point.state ||\n\t\t\t\t// selected points don't respond to hover\n\t\t\t\t(point.selected && state !== SELECT_STATE) ||\n\t\t\t\t// series' state options is disabled\n\t\t\t\t(stateOptions[state] && stateOptions[state].enabled === false) ||\n\t\t\t\t// point marker's state options is disabled\n\t\t\t\t(state && (stateDisabled || (normalDisabled && !markerStateOptions.enabled)))\n\n\t\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// apply hover styles to the existing point\n\t\tif (point.graphic) {\n\t\t\tradius = markerOptions && point.graphic.symbolName && pointAttr[state].r;\n\t\t\tpoint.graphic.attr(merge(\n\t\t\t\tpointAttr[state],\n\t\t\t\tradius ? { // new symbol attributes (#507, #612)\n\t\t\t\t\tx: plotX - radius,\n\t\t\t\t\ty: plotY - radius,\n\t\t\t\t\twidth: 2 * radius,\n\t\t\t\t\theight: 2 * radius\n\t\t\t\t} : {}\n\t\t\t));\n\t\t} else {\n\t\t\t// if a graphic is not applied to each point in the normal state, create a shared\n\t\t\t// graphic for the hover state\n\t\t\tif (state && markerStateOptions) {\n\t\t\t\tradius = markerStateOptions.radius;\n\t\t\t\tnewSymbol = pointMarker.symbol || series.symbol;\n\n\t\t\t\t// If the point has another symbol than the previous one, throw away the \n\t\t\t\t// state marker graphic and force a new one (#1459)\n\t\t\t\tif (stateMarkerGraphic && stateMarkerGraphic.currentSymbol !== newSymbol) {\t\t\t\t\n\t\t\t\t\tstateMarkerGraphic = stateMarkerGraphic.destroy();\n\t\t\t\t}\n\n\t\t\t\t// Add a new state marker graphic\n\t\t\t\tif (!stateMarkerGraphic) {\n\t\t\t\t\tseries.stateMarkerGraphic = stateMarkerGraphic = chart.renderer.symbol(\n\t\t\t\t\t\tnewSymbol,\n\t\t\t\t\t\tplotX - radius,\n\t\t\t\t\t\tplotY - radius,\n\t\t\t\t\t\t2 * radius,\n\t\t\t\t\t\t2 * radius\n\t\t\t\t\t)\n\t\t\t\t\t.attr(pointAttr[state])\n\t\t\t\t\t.add(series.markerGroup);\n\t\t\t\t\tstateMarkerGraphic.currentSymbol = newSymbol;\n\t\t\t\t\n\t\t\t\t// Move the existing graphic\n\t\t\t\t} else {\n\t\t\t\t\tstateMarkerGraphic.attr({ // #1054\n\t\t\t\t\t\tx: plotX - radius,\n\t\t\t\t\t\ty: plotY - radius\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (stateMarkerGraphic) {\n\t\t\t\tstateMarkerGraphic[state && chart.isInsidePlot(plotX, plotY) ? 'show' : 'hide']();\n\t\t\t}\n\t\t}\n\n\t\tpoint.state = state;\n\t}\n};\n\n/**\n * @classDescription The base function which all other series types inherit from. The data in the series is stored\n * in various arrays.\n *\n * - First, series.options.data contains all the original config options for\n * each point whether added by options or methods like series.addPoint.\n * - Next, series.data contains those values converted to points, but in case the series data length\n * exceeds the cropThreshold, or if the data is grouped, series.data doesn't contain all the points. It\n * only contains the points that have been created on demand.\n * - Then there's series.points that contains all currently visible point objects. In case of cropping,\n * the cropped-away points are not part of this array. The series.points array starts at series.cropStart\n * compared to series.data and series.options.data. If however the series data is grouped, these can't\n * be correlated one to one.\n * - series.xData and series.processedXData contain clean x values, equivalent to series.data and series.points.\n * - series.yData and series.processedYData contain clean x values, equivalent to series.data and series.points.\n *\n * @param {Object} chart\n * @param {Object} options\n */\nvar Series = function () {};\n\nSeries.prototype = {\n\n\tisCartesian: true,\n\ttype: 'line',\n\tpointClass: Point,\n\tsorted: true, // requires the data to be sorted\n\trequireSorting: true,\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tstroke: 'lineColor',\n\t\t'stroke-width': 'lineWidth',\n\t\tfill: 'fillColor',\n\t\tr: 'radius'\n\t},\n\tcolorCounter: 0,\n\tinit: function (chart, options) {\n\t\tvar series = this,\n\t\t\teventType,\n\t\t\tevents,\n\t\t\tchartSeries = chart.series;\n\n\t\tseries.chart = chart;\n\t\tseries.options = options = series.setOptions(options); // merge with plotOptions\n\t\tseries.linkedSeries = [];\n\n\t\t// bind the axes\n\t\tseries.bindAxes();\n\n\t\t// set some variables\n\t\textend(series, {\n\t\t\tname: options.name,\n\t\t\tstate: NORMAL_STATE,\n\t\t\tpointAttr: {},\n\t\t\tvisible: options.visible !== false, // true by default\n\t\t\tselected: options.selected === true // false by default\n\t\t});\n\t\t\n\t\t// special\n\t\tif (useCanVG) {\n\t\t\toptions.animation = false;\n\t\t}\n\n\t\t// register event listeners\n\t\tevents = options.events;\n\t\tfor (eventType in events) {\n\t\t\taddEvent(series, eventType, events[eventType]);\n\t\t}\n\t\tif (\n\t\t\t(events && events.click) ||\n\t\t\t(options.point && options.point.events && options.point.events.click) ||\n\t\t\toptions.allowPointSelect\n\t\t) {\n\t\t\tchart.runTrackerClick = true;\n\t\t}\n\n\t\tseries.getColor();\n\t\tseries.getSymbol();\n\n\t\t// set the data\n\t\tseries.setData(options.data, false);\n\t\t\n\t\t// Mark cartesian\n\t\tif (series.isCartesian) {\n\t\t\tchart.hasCartesianSeries = true;\n\t\t}\n\n\t\t// Register it in the chart\n\t\tchartSeries.push(series);\n\t\tseries._i = chartSeries.length - 1;\n\t\t\n\t\t// Sort series according to index option (#248, #1123)\n\t\tstableSort(chartSeries, function (a, b) {\n\t\t\treturn pick(a.options.index, a._i) - pick(b.options.index, a._i);\n\t\t});\n\t\teach(chartSeries, function (series, i) {\n\t\t\tseries.index = i;\n\t\t\tseries.name = series.name || 'Series ' + (i + 1);\n\t\t});\n\n\t},\n\t\n\t/**\n\t * Set the xAxis and yAxis properties of cartesian series, and register the series\n\t * in the axis.series array\n\t */\n\tbindAxes: function () {\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\taxisOptions;\n\t\t\t\n\t\tif (series.isCartesian) {\n\t\t\t\n\t\t\teach(['xAxis', 'yAxis'], function (AXIS) { // repeat for xAxis and yAxis\n\t\t\t\t\n\t\t\t\teach(chart[AXIS], function (axis) { // loop through the chart's axis objects\n\t\t\t\t\t\n\t\t\t\t\taxisOptions = axis.options;\n\t\t\t\t\t\n\t\t\t\t\t// apply if the series xAxis or yAxis option mathches the number of the \n\t\t\t\t\t// axis, or if undefined, use the first axis\n\t\t\t\t\tif ((seriesOptions[AXIS] === axisOptions.index) ||\n\t\t\t\t\t\t\t(seriesOptions[AXIS] !== UNDEFINED && seriesOptions[AXIS] === axisOptions.id) ||\n\t\t\t\t\t\t\t(seriesOptions[AXIS] === UNDEFINED && axisOptions.index === 0)) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// register this series in the axis.series lookup\n\t\t\t\t\t\taxis.series.push(series);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// set this series.xAxis or series.yAxis reference\n\t\t\t\t\t\tseries[AXIS] = axis;\n\t\t\t\t\t\t\n\t\t\t\t\t\t// mark dirty for redraw\n\t\t\t\t\t\taxis.isDirty = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// The series needs an X and an Y axis\n\t\t\t\tif (!series[AXIS]) {\n\t\t\t\t\terror(18, true);\n\t\t\t\t}\n\n\t\t\t});\n\t\t}\n\t},\n\n\n\t/**\n\t * Return an auto incremented x value based on the pointStart and pointInterval options.\n\t * This is only used if an x value is not given for the point that calls autoIncrement.\n\t */\n\tautoIncrement: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\txIncrement = series.xIncrement;\n\n\t\txIncrement = pick(xIncrement, options.pointStart, 0);\n\n\t\tseries.pointInterval = pick(series.pointInterval, options.pointInterval, 1);\n\n\t\tseries.xIncrement = xIncrement + series.pointInterval;\n\t\treturn xIncrement;\n\t},\n\n\t/**\n\t * Divide the series data into segments divided by null values.\n\t */\n\tgetSegments: function () {\n\t\tvar series = this,\n\t\t\tlastNull = -1,\n\t\t\tsegments = [],\n\t\t\ti,\n\t\t\tpoints = series.points,\n\t\t\tpointsLength = points.length;\n\n\t\tif (pointsLength) { // no action required for []\n\t\t\t\n\t\t\t// if connect nulls, just remove null points\n\t\t\tif (series.options.connectNulls) {\n\t\t\t\ti = pointsLength;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tif (points[i].y === null) {\n\t\t\t\t\t\tpoints.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (points.length) {\n\t\t\t\t\tsegments = [points];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t// else, split on null points\n\t\t\t} else {\n\t\t\t\teach(points, function (point, i) {\n\t\t\t\t\tif (point.y === null) {\n\t\t\t\t\t\tif (i > lastNull + 1) {\n\t\t\t\t\t\t\tsegments.push(points.slice(lastNull + 1, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastNull = i;\n\t\t\t\t\t} else if (i === pointsLength - 1) { // last value\n\t\t\t\t\t\tsegments.push(points.slice(lastNull + 1, i + 1));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t// register it\n\t\tseries.segments = segments;\n\t},\n\t\n\t/**\n\t * Set the series options by merging from the options tree\n\t * @param {Object} itemOptions\n\t */\n\tsetOptions: function (itemOptions) {\n\t\tvar chart = this.chart,\n\t\t\tchartOptions = chart.options,\n\t\t\tplotOptions = chartOptions.plotOptions,\n\t\t\ttypeOptions = plotOptions[this.type],\n\t\t\toptions;\n\n\t\tthis.userOptions = itemOptions;\n\n\t\toptions = merge(\n\t\t\ttypeOptions,\n\t\t\tplotOptions.series,\n\t\t\titemOptions\n\t\t);\n\t\t\n\t\t// the tooltip options are merged between global and series specific options\n\t\tthis.tooltipOptions = merge(chartOptions.tooltip, options.tooltip);\n\t\t\n\t\t// Delte marker object if not allowed (#1125)\n\t\tif (typeOptions.marker === null) {\n\t\t\tdelete options.marker;\n\t\t}\n\t\t\n\t\treturn options;\n\n\t},\n\t/**\n\t * Get the series' color\n\t */\n\tgetColor: function () {\n\t\tvar options = this.options,\n\t\t\tuserOptions = this.userOptions,\n\t\t\tdefaultColors = this.chart.options.colors,\n\t\t\tcounters = this.chart.counters,\n\t\t\tcolor,\n\t\t\tcolorIndex;\n\n\t\tcolor = options.color || defaultPlotOptions[this.type].color;\n\n\t\tif (!color && !options.colorByPoint) {\n\t\t\tif (defined(userOptions._colorIndex)) { // after Series.update()\n\t\t\t\tcolorIndex = userOptions._colorIndex;\n\t\t\t} else {\n\t\t\t\tuserOptions._colorIndex = counters.color;\n\t\t\t\tcolorIndex = counters.color++;\n\t\t\t}\n\t\t\tcolor = defaultColors[colorIndex];\n\t\t}\n\t\t\n\t\tthis.color = color;\n\t\tcounters.wrapColor(defaultColors.length);\n\t},\n\t/**\n\t * Get the series' symbol\n\t */\n\tgetSymbol: function () {\n\t\tvar series = this,\n\t\t\tuserOptions = series.userOptions,\n\t\t\tseriesMarkerOption = series.options.marker,\n\t\t\tchart = series.chart,\n\t\t\tdefaultSymbols = chart.options.symbols,\n\t\t\tcounters = chart.counters,\n\t\t\tsymbolIndex;\n\n\t\tseries.symbol = seriesMarkerOption.symbol;\n\t\tif (!series.symbol) {\n\t\t\tif (defined(userOptions._symbolIndex)) { // after Series.update()\n\t\t\t\tsymbolIndex = userOptions._symbolIndex;\n\t\t\t} else {\n\t\t\t\tuserOptions._symbolIndex = counters.symbol;\n\t\t\t\tsymbolIndex = counters.symbol++;\n\t\t\t}\n\t\t\tseries.symbol = defaultSymbols[symbolIndex];\n\t\t}\n\n\t\t// don't substract radius in image symbols (#604)\n\t\tif (/^url/.test(series.symbol)) {\n\t\t\tseriesMarkerOption.radius = 0;\n\t\t}\n\t\tcounters.wrapSymbol(defaultSymbols.length);\n\t},\n\n\t/**\n\t * Get the series' symbol in the legend. This method should be overridable to create custom \n\t * symbols through Highcharts.seriesTypes[type].prototype.drawLegendSymbols.\n\t * \n\t * @param {Object} legend The legend object\n\t */\n\tdrawLegendSymbol: function (legend) {\n\t\t\n\t\tvar options = this.options,\n\t\t\tmarkerOptions = options.marker,\n\t\t\tradius,\n\t\t\tlegendOptions = legend.options,\n\t\t\tlegendSymbol,\n\t\t\tsymbolWidth = legendOptions.symbolWidth,\n\t\t\trenderer = this.chart.renderer,\n\t\t\tlegendItemGroup = this.legendGroup,\n\t\t\tverticalCenter = legend.baseline - mathRound(renderer.fontMetrics(legendOptions.itemStyle.fontSize).b * 0.3),\n\t\t\tattr;\n\t\t\t\n\t\t// Draw the line\n\t\tif (options.lineWidth) {\n\t\t\tattr = {\n\t\t\t\t'stroke-width': options.lineWidth\n\t\t\t};\n\t\t\tif (options.dashStyle) {\n\t\t\t\tattr.dashstyle = options.dashStyle;\n\t\t\t}\n\t\t\tthis.legendLine = renderer.path([\n\t\t\t\tM,\n\t\t\t\t0,\n\t\t\t\tverticalCenter,\n\t\t\t\tL,\n\t\t\t\tsymbolWidth,\n\t\t\t\tverticalCenter\n\t\t\t])\n\t\t\t.attr(attr)\n\t\t\t.add(legendItemGroup);\n\t\t}\n\t\t\n\t\t// Draw the marker\n\t\tif (markerOptions && markerOptions.enabled) {\n\t\t\tradius = markerOptions.radius;\n\t\t\tthis.legendSymbol = legendSymbol = renderer.symbol(\n\t\t\t\tthis.symbol,\n\t\t\t\t(symbolWidth / 2) - radius,\n\t\t\t\tverticalCenter - radius,\n\t\t\t\t2 * radius,\n\t\t\t\t2 * radius\n\t\t\t)\n\t\t\t.add(legendItemGroup);\n\t\t\tlegendSymbol.isMarker = true;\n\t\t}\n\t},\n\n\t/**\n\t * Add a point dynamically after chart load time\n\t * @param {Object} options Point options as given in series.data\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean} shift If shift is true, a point is shifted off the start\n\t *    of the series as one is appended to the end.\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\taddPoint: function (options, redraw, shift, animation) {\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\tdata = series.data,\n\t\t\tgraph = series.graph,\n\t\t\tarea = series.area,\n\t\t\tchart = series.chart,\n\t\t\txData = series.xData,\n\t\t\tyData = series.yData,\n\t\t\tzData = series.zData,\n\t\t\tnames = series.names,\n\t\t\tcurrentShift = (graph && graph.shift) || 0,\n\t\t\tdataOptions = seriesOptions.data,\n\t\t\tpoint,\n\t\t\tisInTheMiddle,\n\t\t\tx,\n\t\t\ti;\n\n\t\tsetAnimation(animation, chart);\n\n\t\t// Make graph animate sideways\n\t\tif (shift) {\n\t\t\teach([graph, area, series.graphNeg, series.areaNeg], function (shape) {\n\t\t\t\tif (shape) {\n\t\t\t\t\tshape.shift = currentShift + 1;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (area) {\n\t\t\tarea.isArea = true; // needed in animation, both with and without shift\n\t\t}\n\t\t\n\t\t// Optional redraw, defaults to true\n\t\tredraw = pick(redraw, true);\n\n\t\t// Get options and push the point to xData, yData and series.options. In series.generatePoints\n\t\t// the Point instance will be created on demand and pushed to the series.data array.\n\t\tpoint = { series: series };\n\t\tseries.pointClass.prototype.applyOptions.apply(point, [options]);\n\t\tx = point.x;\n\n\t\t// Get the insertion point\n\t\ti = xData.length;\n\t\tif (series.requireSorting && x < xData[i - 1]) {\n\t\t\tisInTheMiddle = true;\n\t\t\twhile (i && xData[i - 1] > x) {\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\t\n\t\txData.splice(i, 0, x);\n\t\tyData.splice(i, 0, series.toYData ? series.toYData(point) : point.y);\n\t\tzData.splice(i, 0, point.z);\n\t\tif (names) {\n\t\t\tnames[x] = point.name;\n\t\t}\n\t\tdataOptions.splice(i, 0, options);\n\n\t\tif (isInTheMiddle) {\n\t\t\tseries.data.splice(i, 0, null);\n\t\t\tseries.processData();\n\t\t}\n\t\t\n\t\t// Generate points to be added to the legend (#1329) \n\t\tif (seriesOptions.legendType === 'point') {\n\t\t\tseries.generatePoints();\n\t\t}\n\n\t\t// Shift the first point off the parallel arrays\n\t\t// todo: consider series.removePoint(i) method\n\t\tif (shift) {\n\t\t\tif (data[0] && data[0].remove) {\n\t\t\t\tdata[0].remove(false);\n\t\t\t} else {\n\t\t\t\tdata.shift();\n\t\t\t\txData.shift();\n\t\t\t\tyData.shift();\n\t\t\t\tzData.shift();\n\t\t\t\tdataOptions.shift();\n\t\t\t}\n\t\t}\n\n\t\t// redraw\n\t\tseries.isDirty = true;\n\t\tseries.isDirtyData = true;\n\t\tif (redraw) {\n\t\t\tseries.getAttribs(); // #1937\n\t\t\tchart.redraw();\n\t\t}\n\t},\n\n\t/**\n\t * Replace the series data with a new set of data\n\t * @param {Object} data\n\t * @param {Object} redraw\n\t */\n\tsetData: function (data, redraw) {\n\t\tvar series = this,\n\t\t\toldData = series.points,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\tfirstPoint = null,\n\t\t\txAxis = series.xAxis,\n\t\t\tnames = xAxis && xAxis.categories && !xAxis.categories.length ? [] : null,\n\t\t\ti;\n\n\t\t// reset properties\n\t\tseries.xIncrement = null;\n\t\tseries.pointRange = xAxis && xAxis.categories ? 1 : options.pointRange;\n\n\t\tseries.colorCounter = 0; // for series with colorByPoint (#1547)\n\t\t\n\t\t// parallel arrays\n\t\tvar xData = [],\n\t\t\tyData = [],\n\t\t\tzData = [],\n\t\t\tdataLength = data ? data.length : [],\n\t\t\tturboThreshold = pick(options.turboThreshold, 1000),\n\t\t\tpt,\n\t\t\tpointArrayMap = series.pointArrayMap,\n\t\t\tvalueCount = pointArrayMap && pointArrayMap.length,\n\t\t\thasToYData = !!series.toYData;\n\n\t\t// In turbo mode, only one- or twodimensional arrays of numbers are allowed. The\n\t\t// first value is tested, and we assume that all the rest are defined the same\n\t\t// way. Although the 'for' loops are similar, they are repeated inside each\n\t\t// if-else conditional for max performance.\n\t\tif (turboThreshold && dataLength > turboThreshold) { \n\t\t\t\n\t\t\t// find the first non-null point\n\t\t\ti = 0;\n\t\t\twhile (firstPoint === null && i < dataLength) {\n\t\t\t\tfirstPoint = data[i];\n\t\t\t\ti++;\n\t\t\t}\n\t\t\n\t\t\n\t\t\tif (isNumber(firstPoint)) { // assume all points are numbers\n\t\t\t\tvar x = pick(options.pointStart, 0),\n\t\t\t\t\tpointInterval = pick(options.pointInterval, 1);\n\n\t\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\t\txData[i] = x;\n\t\t\t\t\tyData[i] = data[i];\n\t\t\t\t\tx += pointInterval;\n\t\t\t\t}\n\t\t\t\tseries.xIncrement = x;\n\t\t\t} else if (isArray(firstPoint)) { // assume all points are arrays\n\t\t\t\tif (valueCount) { // [x, low, high] or [x, o, h, l, c]\n\t\t\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\t\t\tpt = data[i];\n\t\t\t\t\t\txData[i] = pt[0];\n\t\t\t\t\t\tyData[i] = pt.slice(1, valueCount + 1);\n\t\t\t\t\t}\n\t\t\t\t} else { // [x, y]\n\t\t\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\t\t\tpt = data[i];\n\t\t\t\t\t\txData[i] = pt[0];\n\t\t\t\t\t\tyData[i] = pt[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terror(12); // Highcharts expects configs to be numbers or arrays in turbo mode\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\tif (data[i] !== UNDEFINED) { // stray commas in oldIE\n\t\t\t\t\tpt = { series: series };\n\t\t\t\t\tseries.pointClass.prototype.applyOptions.apply(pt, [data[i]]);\n\t\t\t\t\txData[i] = pt.x;\n\t\t\t\t\tyData[i] = hasToYData ? series.toYData(pt) : pt.y;\n\t\t\t\t\tzData[i] = pt.z;\n\t\t\t\t\tif (names && pt.name) {\n\t\t\t\t\t\tnames[pt.x] = pt.name; // #2046\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Forgetting to cast strings to numbers is a common caveat when handling CSV or JSON\t\t\n\t\tif (isString(yData[0])) {\n\t\t\terror(14, true);\n\t\t} \n\n\t\tseries.data = [];\n\t\tseries.options.data = data;\n\t\tseries.xData = xData;\n\t\tseries.yData = yData;\n\t\tseries.zData = zData;\n\t\tseries.names = names;\n\n\t\t// destroy old points\n\t\ti = (oldData && oldData.length) || 0;\n\t\twhile (i--) {\n\t\t\tif (oldData[i] && oldData[i].destroy) {\n\t\t\t\toldData[i].destroy();\n\t\t\t}\n\t\t}\n\n\t\t// reset minRange (#878)\n\t\tif (xAxis) {\n\t\t\txAxis.minRange = xAxis.userMinRange;\n\t\t}\n\n\t\t// redraw\n\t\tseries.isDirty = series.isDirtyData = chart.isDirtyBox = true;\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Remove a series and optionally redraw the chart\n\t *\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\n\tremove: function (redraw, animation) {\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\t\tredraw = pick(redraw, true);\n\n\t\tif (!series.isRemoving) {  /* prevent triggering native event in jQuery\n\t\t\t\t(calling the remove function from the remove event) */\n\t\t\tseries.isRemoving = true;\n\n\t\t\t// fire the event with a default handler of removing the point\n\t\t\tfireEvent(series, 'remove', null, function () {\n\n\n\t\t\t\t// destroy elements\n\t\t\t\tseries.destroy();\n\n\n\t\t\t\t// redraw\n\t\t\t\tchart.isDirtyLegend = chart.isDirtyBox = true;\n\t\t\t\tchart.linkSeries();\n\t\t\t\t\n\t\t\t\tif (redraw) {\n\t\t\t\t\tchart.redraw(animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t\tseries.isRemoving = false;\n\t},\n\n\t/**\n\t * Process the data by cropping away unused data points if the series is longer\n\t * than the crop threshold. This saves computing time for lage series.\n\t */\n\tprocessData: function (force) {\n\t\tvar series = this,\n\t\t\tprocessedXData = series.xData, // copied during slice operation below\n\t\t\tprocessedYData = series.yData,\n\t\t\tdataLength = processedXData.length,\n\t\t\tcroppedData,\n\t\t\tcropStart = 0,\n\t\t\tcropped,\n\t\t\tdistance,\n\t\t\tclosestPointRange,\n\t\t\txAxis = series.xAxis,\n\t\t\ti, // loop variable\n\t\t\toptions = series.options,\n\t\t\tcropThreshold = options.cropThreshold,\n\t\t\tisCartesian = series.isCartesian;\n\n\t\t// If the series data or axes haven't changed, don't go through this. Return false to pass\n\t\t// the message on to override methods like in data grouping. \n\t\tif (isCartesian && !series.isDirty && !xAxis.isDirty && !series.yAxis.isDirty && !force) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\n\t\t// optionally filter out points outside the plot area\n\t\tif (isCartesian && series.sorted && (!cropThreshold || dataLength > cropThreshold || series.forceCrop)) {\n\t\t\tvar min = xAxis.min,\n\t\t\t\tmax = xAxis.max;\n\n\t\t\t// it's outside current extremes\n\t\t\tif (processedXData[dataLength - 1] < min || processedXData[0] > max) {\n\t\t\t\tprocessedXData = [];\n\t\t\t\tprocessedYData = [];\n\t\t\t\n\t\t\t// only crop if it's actually spilling out\n\t\t\t} else if (processedXData[0] < min || processedXData[dataLength - 1] > max) {\n\t\t\t\tcroppedData = this.cropData(series.xData, series.yData, min, max);\n\t\t\t\tprocessedXData = croppedData.xData;\n\t\t\t\tprocessedYData = croppedData.yData;\n\t\t\t\tcropStart = croppedData.start;\n\t\t\t\tcropped = true;\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\t\t// Find the closest distance between processed points\n\t\tfor (i = processedXData.length - 1; i >= 0; i--) {\n\t\t\tdistance = processedXData[i] - processedXData[i - 1];\n\t\t\tif (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) {\n\t\t\t\tclosestPointRange = distance;\n\n\t\t\t// Unsorted data is not supported by the line tooltip, as well as data grouping and \n\t\t\t// navigation in Stock charts (#725) and width calculation of columns (#1900)\n\t\t\t} else if (distance < 0 && series.requireSorting) {\n\t\t\t\terror(15);\n\t\t\t}\n\t\t}\n\n\t\t// Record the properties\n\t\tseries.cropped = cropped; // undefined or true\n\t\tseries.cropStart = cropStart;\n\t\tseries.processedXData = processedXData;\n\t\tseries.processedYData = processedYData;\n\n\t\tif (options.pointRange === null) { // null means auto, as for columns, candlesticks and OHLC\n\t\t\tseries.pointRange = closestPointRange || 1;\n\t\t}\n\t\tseries.closestPointRange = closestPointRange;\n\t\t\n\t},\n\n\t/**\n\t * Iterate over xData and crop values between min and max. Returns object containing crop start/end\n\t * cropped xData with corresponding part of yData, dataMin and dataMax within the cropped range\n\t */\n\tcropData: function (xData, yData, min, max) {\n\t\tvar dataLength = xData.length,\n\t\t\tcropStart = 0,\n\t\t\tcropEnd = dataLength,\n\t\t\tcropShoulder = pick(this.cropShoulder, 1), // line-type series need one point outside\n\t\t\ti;\n\n\t\t// iterate up to find slice start\n\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\tif (xData[i] >= min) {\n\t\t\t\tcropStart = mathMax(0, i - cropShoulder);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// proceed to find slice end\n\t\tfor (; i < dataLength; i++) {\n\t\t\tif (xData[i] > max) {\n\t\t\t\tcropEnd = i + cropShoulder;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\txData: xData.slice(cropStart, cropEnd),\n\t\t\tyData: yData.slice(cropStart, cropEnd),\n\t\t\tstart: cropStart,\n\t\t\tend: cropEnd\n\t\t};\n\t},\n\n\n\t/**\n\t * Generate the data point after the data has been processed by cropping away\n\t * unused points and optionally grouped in Highcharts Stock.\n\t */\n\tgeneratePoints: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tdataOptions = options.data,\n\t\t\tdata = series.data,\n\t\t\tdataLength,\n\t\t\tprocessedXData = series.processedXData,\n\t\t\tprocessedYData = series.processedYData,\n\t\t\tpointClass = series.pointClass,\n\t\t\tprocessedDataLength = processedXData.length,\n\t\t\tcropStart = series.cropStart || 0,\n\t\t\tcursor,\n\t\t\thasGroupedData = series.hasGroupedData,\n\t\t\tpoint,\n\t\t\tpoints = [],\n\t\t\ti;\n\n\t\tif (!data && !hasGroupedData) {\n\t\t\tvar arr = [];\n\t\t\tarr.length = dataOptions.length;\n\t\t\tdata = series.data = arr;\n\t\t}\n\n\t\tfor (i = 0; i < processedDataLength; i++) {\n\t\t\tcursor = cropStart + i;\n\t\t\tif (!hasGroupedData) {\n\t\t\t\tif (data[cursor]) {\n\t\t\t\t\tpoint = data[cursor];\n\t\t\t\t} else if (dataOptions[cursor] !== UNDEFINED) { // #970\n\t\t\t\t\tdata[cursor] = point = (new pointClass()).init(series, dataOptions[cursor], processedXData[i]);\n\t\t\t\t}\n\t\t\t\tpoints[i] = point;\n\t\t\t} else {\n\t\t\t\t// splat the y data in case of ohlc data array\n\t\t\t\tpoints[i] = (new pointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i])));\n\t\t\t}\n\t\t}\n\n\t\t// Hide cropped-away points - this only runs when the number of points is above cropThreshold, or when\n\t\t// swithching view from non-grouped data to grouped data (#637)\t\n\t\tif (data && (processedDataLength !== (dataLength = data.length) || hasGroupedData)) {\n\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\tif (i === cropStart && !hasGroupedData) { // when has grouped data, clear all points\n\t\t\t\t\ti += processedDataLength;\n\t\t\t\t}\n\t\t\t\tif (data[i]) {\n\t\t\t\t\tdata[i].destroyElements();\n\t\t\t\t\tdata[i].plotX = UNDEFINED; // #1003\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tseries.data = data;\n\t\tseries.points = points;\n\t},\n\n\t/**\n\t * Adds series' points value to corresponding stack\n\t */\n\tsetStackedPoints: function () {\n\t\tif (!this.options.stacking || (this.visible !== true && this.chart.options.chart.ignoreHiddenSeries !== false)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar series = this,\n\t\t\txData = series.processedXData,\n\t\t\tyData = series.processedYData,\n\t\t\tstackedYData = [],\n\t\t\tyDataLength = yData.length,\n\t\t\tseriesOptions = series.options,\n\t\t\tthreshold = seriesOptions.threshold,\n\t\t\tstackOption = seriesOptions.stack,\n\t\t\tstacking = seriesOptions.stacking,\n\t\t\tstackKey = series.stackKey,\n\t\t\tnegKey = '-' + stackKey,\n\t\t\tnegStacks = series.negStacks,\n\t\t\tyAxis = series.yAxis,\n\t\t\tstacks = yAxis.stacks,\n\t\t\toldStacks = yAxis.oldStacks,\n\t\t\tisNegative,\n\t\t\tstack,\n\t\t\tother,\n\t\t\tkey,\n\t\t\ti,\n\t\t\tx,\n\t\t\ty;\n\n\t\t// loop over the non-null y values and read them into a local array\n\t\tfor (i = 0; i < yDataLength; i++) {\n\t\t\tx = xData[i];\n\t\t\ty = yData[i];\n\n\t\t\t// Read stacked values into a stack based on the x value,\n\t\t\t// the sign of y and the stack key. Stacking is also handled for null values (#739)\n\t\t\tisNegative = negStacks && y < threshold;\n\t\t\tkey = isNegative ? negKey : stackKey;\n\n\t\t\t// Create empty object for this stack if it doesn't exist yet\n\t\t\tif (!stacks[key]) {\n\t\t\t\tstacks[key] = {};\n\t\t\t}\n\n\t\t\t// Initialize StackItem for this x\n\t\t\tif (!stacks[key][x]) {\n\t\t\t\tif (oldStacks[key] && oldStacks[key][x]) {\n\t\t\t\t\tstacks[key][x] = oldStacks[key][x];\n\t\t\t\t\tstacks[key][x].total = null;\n\t\t\t\t} else {\n\t\t\t\t\tstacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, isNegative, x, stackOption, stacking);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the StackItem doesn't exist, create it first\n\t\t\tstack = stacks[key][x];\n\t\t\tstack.points[series.index] = [stack.cum || 0];\n\n\t\t\t// Add value to the stack total\n\t\t\tif (stacking === 'percent') {\n\t\t\t\t\n\t\t\t\t// Percent stacked column, totals are the same for the positive and negative stacks\n\t\t\t\tother = isNegative ? stackKey : negKey;\n\t\t\t\tif (negStacks && stacks[other] && stacks[other][x]) {\n\t\t\t\t\tother = stacks[other][x];\n\t\t\t\t\tstack.total = other.total = mathMax(other.total, stack.total) + mathAbs(y) || 0;\n\n\t\t\t\t// Percent stacked areas\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tstack.total += mathAbs(y) || 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstack.total += y || 0;\n\t\t\t}\n\n\t\t\tstack.cum = (stack.cum || 0) + (y || 0);\n\n\t\t\tstack.points[series.index].push(stack.cum);\n\t\t\tstackedYData[i] = stack.cum;\n\n\t\t}\n\n\t\tif (stacking === 'percent') {\n\t\t\tyAxis.usePercentage = true;\n\t\t}\n\n\t\tthis.stackedYData = stackedYData; // To be used in getExtremes\n\t\t\n\t\t// Reset old stacks\n\t\tyAxis.oldStacks = {};\n\t},\n\n\t/**\n\t * Iterate over all stacks and compute the absolute values to percent\n\t */\n\tsetPercentStacks: function () {\n\t\tvar series = this,\n\t\t\tstackKey = series.stackKey,\n\t\t\tstacks = series.yAxis.stacks;\n\t\t\n\t\teach([stackKey, '-' + stackKey], function (key) {\n\t\t\tvar i = series.xData.length,\n\t\t\t\tx,\n\t\t\t\tstack,\n\t\t\t\tpointExtremes,\n\t\t\t\ttotalFactor;\n\n\t\t\twhile (i--) {\n\t\t\t\tx = series.xData[i];\n\t\t\t\tstack = stacks[key] && stacks[key][x];\n\t\t\t\tpointExtremes = stack && stack.points[series.index];\n\t\t\t\tif (pointExtremes) {\n\t\t\t\t\ttotalFactor = stack.total ? 100 / stack.total : 0;\n\t\t\t\t\tpointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor); // Y bottom value\n\t\t\t\t\tpointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor); // Y value\n\t\t\t\t\tseries.stackedYData[i] = pointExtremes[1];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Calculate Y extremes for visible data\n\t */\n\tgetExtremes: function () {\n\t\tvar xAxis = this.xAxis,\n\t\t\tyAxis = this.yAxis,\n\t\t\txData = this.processedXData,\n\t\t\tyData = this.stackedYData || this.processedYData,\n\t\t\tyDataLength = yData.length,\n\t\t\tactiveYData = [],\n\t\t\tactiveCounter = 0,\n\t\t\txExtremes = xAxis.getExtremes(), // #2117, need to compensate for log X axis\n\t\t\txMin = xExtremes.min,\n\t\t\txMax = xExtremes.max,\n\t\t\tvalidValue,\n\t\t\twithinRange,\n\t\t\tdataMin,\n\t\t\tdataMax,\n\t\t\tx,\n\t\t\ty,\n\t\t\ti,\n\t\t\tj;\n\n\t\tfor (i = 0; i < yDataLength; i++) {\n\t\t\t\n\t\t\tx = xData[i];\n\t\t\ty = yData[i];\n\n\t\t\t// For points within the visible range, including the first point outside the\n\t\t\t// visible range, consider y extremes\n\t\t\tvalidValue = y !== null && y !== UNDEFINED && (!yAxis.isLog || (y.length || y > 0));\n\t\t\twithinRange = this.getExtremesFromAll || this.cropped || ((xData[i + 1] || x) >= xMin && \n\t\t\t\t(xData[i - 1] || x) <= xMax);\n\n\t\t\tif (validValue && withinRange) {\n\n\t\t\t\tj = y.length;\n\t\t\t\tif (j) { // array, like ohlc or range data\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\tif (y[j] !== null) {\n\t\t\t\t\t\t\tactiveYData[activeCounter++] = y[j];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tactiveYData[activeCounter++] = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.dataMin = pick(dataMin, arrayMin(activeYData));\n\t\tthis.dataMax = pick(dataMax, arrayMax(activeYData));\n\t},\n\n\t/**\n\t * Translate data points from raw data values to chart specific positioning data\n\t * needed later in drawPoints, drawGraph and drawTracker.\n\t */\n\ttranslate: function () {\n\t\tif (!this.processedXData) { // hidden series\n\t\t\tthis.processData();\n\t\t}\n\t\tthis.generatePoints();\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tstacking = options.stacking,\n\t\t\txAxis = series.xAxis,\n\t\t\tcategories = xAxis.categories,\n\t\t\tyAxis = series.yAxis,\n\t\t\tpoints = series.points,\n\t\t\tdataLength = points.length,\n\t\t\thasModifyValue = !!series.modifyValue,\n\t\t\ti,\n\t\t\tpointPlacement = options.pointPlacement,\n\t\t\tdynamicallyPlaced = pointPlacement === 'between' || isNumber(pointPlacement),\n\t\t\tthreshold = options.threshold;\n\n\t\t\n\t\t// Translate each point\n\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\tvar point = points[i],\n\t\t\t\txValue = point.x,\n\t\t\t\tyValue = point.y,\n\t\t\t\tyBottom = point.low,\n\t\t\t\tstack = yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey],\n\t\t\t\tpointStack,\n\t\t\t\tstackValues;\n\n\t\t\t// Discard disallowed y values for log axes\n\t\t\tif (yAxis.isLog && yValue <= 0) {\n\t\t\t\tpoint.y = yValue = null;\n\t\t\t}\n\t\t\t\n\t\t\t// Get the plotX translation\n\t\t\tpoint.plotX = xAxis.translate(xValue, 0, 0, 0, 1, pointPlacement, this.type === 'flags'); // Math.round fixes #591\n\t\t\t\n\n\t\t\t// Calculate the bottom y value for stacked series\n\t\t\tif (stacking && series.visible && stack && stack[xValue]) {\n\n\t\t\t\tpointStack = stack[xValue];\n\t\t\t\tstackValues = pointStack.points[series.index];\n\t\t\t\tyBottom = stackValues[0];\n\t\t\t\tyValue = stackValues[1];\n\n\t\t\t\tif (yBottom === 0) {\n\t\t\t\t\tyBottom = pick(threshold, yAxis.min);\n\t\t\t\t}\n\t\t\t\tif (yAxis.isLog && yBottom <= 0) { // #1200, #1232\n\t\t\t\t\tyBottom = null;\n\t\t\t\t}\n\n\t\t\t\tpoint.percentage = stacking === 'percent' && yValue;\n\t\t\t\tpoint.total = point.stackTotal = pointStack.total;\n\t\t\t\tpoint.stackY = yValue;\n\n\t\t\t\t// Place the stack label\n\t\t\t\tpointStack.setOffset(series.pointXOffset || 0, series.barW || 0);\n\t\t\t\t\n\t\t\t}\n\n\t\t\t// Set translated yBottom or remove it\n\t\t\tpoint.yBottom = defined(yBottom) ? \n\t\t\t\tyAxis.translate(yBottom, 0, 1, 0, 1) :\n\t\t\t\tnull;\n\t\t\t\t\n\t\t\t// general hook, used for Highstock compare mode\n\t\t\tif (hasModifyValue) {\n\t\t\t\tyValue = series.modifyValue(yValue, point);\n\t\t\t}\n\n\t\t\t// Set the the plotY value, reset it for redraws\n\t\t\tpoint.plotY = (typeof yValue === 'number' && yValue !== Infinity) ? \n\t\t\t\t//mathRound(yAxis.translate(yValue, 0, 1, 0, 1) * 10) / 10 : // Math.round fixes #591\n\t\t\t\tyAxis.translate(yValue, 0, 1, 0, 1) : \n\t\t\t\tUNDEFINED;\n\t\t\t\n\t\t\t// Set client related positions for mouse tracking\n\t\t\tpoint.clientX = dynamicallyPlaced ? xAxis.translate(xValue, 0, 0, 0, 1) : point.plotX; // #1514\n\t\t\t\t\n\t\t\tpoint.negative = point.y < (threshold || 0);\n\n\t\t\t// some API data\n\t\t\tpoint.category = categories && categories[point.x] !== UNDEFINED ?\n\t\t\t\tcategories[point.x] : point.x;\n\n\n\t\t}\n\n\t\t// now that we have the cropped data, build the segments\n\t\tseries.getSegments();\n\t},\n\t/**\n\t * Memoize tooltip texts and positions\n\t */\n\tsetTooltipPoints: function (renew) {\n\t\tvar series = this,\n\t\t\tpoints = [],\n\t\t\tpointsLength,\n\t\t\tlow,\n\t\t\thigh,\n\t\t\txAxis = series.xAxis,\n\t\t\txExtremes = xAxis && xAxis.getExtremes(),\n\t\t\taxisLength = xAxis ? (xAxis.tooltipLen || xAxis.len) : series.chart.plotSizeX, // tooltipLen and tooltipPosName used in polar\n\t\t\tpoint,\n\t\t\tpointX,\n\t\t\tnextPoint,\n\t\t\ti,\n\t\t\ttooltipPoints = []; // a lookup array for each pixel in the x dimension\n\n\t\t// don't waste resources if tracker is disabled\n\t\tif (series.options.enableMouseTracking === false) {\n\t\t\treturn;\n\t\t}\n\n\t\t// renew\n\t\tif (renew) {\n\t\t\tseries.tooltipPoints = null;\n\t\t}\n\n\t\t// concat segments to overcome null values\n\t\teach(series.segments || series.points, function (segment) {\n\t\t\tpoints = points.concat(segment);\n\t\t});\n\n\t\t// Reverse the points in case the X axis is reversed\n\t\tif (xAxis && xAxis.reversed) {\n\t\t\tpoints = points.reverse();\n\t\t}\n\n\t\t// Polar needs additional shaping\n\t\tif (series.orderTooltipPoints) {\n\t\t\tseries.orderTooltipPoints(points);\n\t\t}\n\n\t\t// Assign each pixel position to the nearest point\n\t\tpointsLength = points.length;\n\t\tfor (i = 0; i < pointsLength; i++) {\n\t\t\tpoint = points[i];\n\t\t\tpointX = point.x;\n\t\t\tif (pointX >= xExtremes.min && pointX <= xExtremes.max) { // #1149\n\t\t\t\tnextPoint = points[i + 1];\n\t\t\t\t\n\t\t\t\t// Set this range's low to the last range's high plus one\n\t\t\t\tlow = high === UNDEFINED ? 0 : high + 1;\n\t\t\t\t// Now find the new high\n\t\t\t\thigh = points[i + 1] ?\n\t\t\t\t\tmathMin(mathMax(0, mathFloor( // #2070\n\t\t\t\t\t\t(point.clientX + (nextPoint ? (nextPoint.wrappedClientX || nextPoint.clientX) : axisLength)) / 2\n\t\t\t\t\t)), axisLength) :\n\t\t\t\t\taxisLength;\n\n\t\t\t\twhile (low >= 0 && low <= high) {\n\t\t\t\t\ttooltipPoints[low++] = point;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tseries.tooltipPoints = tooltipPoints;\n\t},\n\n\t/**\n\t * Format the header of the tooltip\n\t */\n\ttooltipHeaderFormatter: function (point) {\n\t\tvar series = this,\n\t\t\ttooltipOptions = series.tooltipOptions,\n\t\t\txDateFormat = tooltipOptions.xDateFormat,\n\t\t\tdateTimeLabelFormats = tooltipOptions.dateTimeLabelFormats,\n\t\t\txAxis = series.xAxis,\n\t\t\tisDateTime = xAxis && xAxis.options.type === 'datetime',\n\t\t\theaderFormat = tooltipOptions.headerFormat,\n\t\t\tclosestPointRange = xAxis && xAxis.closestPointRange,\n\t\t\tn;\n\t\t\t\n\t\t// Guess the best date format based on the closest point distance (#568)\n\t\tif (isDateTime && !xDateFormat) {\n\t\t\tif (closestPointRange) {\n\t\t\t\tfor (n in timeUnits) {\n\t\t\t\t\tif (timeUnits[n] >= closestPointRange) {\n\t\t\t\t\t\txDateFormat = dateTimeLabelFormats[n];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txDateFormat = dateTimeLabelFormats.day;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Insert the header date format if any\n\t\tif (isDateTime && xDateFormat && isNumber(point.key)) {\n\t\t\theaderFormat = headerFormat.replace('{point.key}', '{point.key:' + xDateFormat + '}');\n\t\t}\n\t\t\n\t\treturn format(headerFormat, {\n\t\t\tpoint: point,\n\t\t\tseries: series\n\t\t});\n\t},\n\n\t/**\n\t * Series mouse over handler\n\t */\n\tonMouseOver: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\thoverSeries = chart.hoverSeries;\n\n\t\t// set normal state to previous series\n\t\tif (hoverSeries && hoverSeries !== series) {\n\t\t\thoverSeries.onMouseOut();\n\t\t}\n\n\t\t// trigger the event, but to save processing time,\n\t\t// only if defined\n\t\tif (series.options.events.mouseOver) {\n\t\t\tfireEvent(series, 'mouseOver');\n\t\t}\n\n\t\t// hover this\n\t\tseries.setState(HOVER_STATE);\n\t\tchart.hoverSeries = series;\n\t},\n\n\t/**\n\t * Series mouse out handler\n\t */\n\tonMouseOut: function () {\n\t\t// trigger the event only if listeners exist\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\ttooltip = chart.tooltip,\n\t\t\thoverPoint = chart.hoverPoint;\n\n\t\t// trigger mouse out on the point, which must be in this series\n\t\tif (hoverPoint) {\n\t\t\thoverPoint.onMouseOut();\n\t\t}\n\n\t\t// fire the mouse out event\n\t\tif (series && options.events.mouseOut) {\n\t\t\tfireEvent(series, 'mouseOut');\n\t\t}\n\n\n\t\t// hide the tooltip\n\t\tif (tooltip && !options.stickyTracking && (!tooltip.shared || series.noSharedTooltip)) {\n\t\t\ttooltip.hide();\n\t\t}\n\n\t\t// set normal state\n\t\tseries.setState();\n\t\tchart.hoverSeries = null;\n\t},\n\n\t/**\n\t * Animate in the series\n\t */\n\tanimate: function (init) {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tclipRect,\n\t\t\tmarkerClipRect,\n\t\t\tanimation = series.options.animation,\n\t\t\tclipBox = chart.clipBox,\n\t\t\tinverted = chart.inverted,\n\t\t\tsharedClipKey;\n\n\t\t// Animation option is set to true\n\t\tif (animation && !isObject(animation)) {\n\t\t\tanimation = defaultPlotOptions[series.type].animation;\n\t\t}\n\t\tsharedClipKey = '_sharedClip' + animation.duration + animation.easing;\n\n\t\t// Initialize the animation. Set up the clipping rectangle.\n\t\tif (init) { \n\t\t\t\n\t\t\t// If a clipping rectangle with the same properties is currently present in the chart, use that. \n\t\t\tclipRect = chart[sharedClipKey];\n\t\t\tmarkerClipRect = chart[sharedClipKey + 'm'];\n\t\t\tif (!clipRect) {\n\t\t\t\tchart[sharedClipKey] = clipRect = renderer.clipRect(\n\t\t\t\t\textend(clipBox, { width: 0 })\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\tchart[sharedClipKey + 'm'] = markerClipRect = renderer.clipRect(\n\t\t\t\t\t-99, // include the width of the first marker\n\t\t\t\t\tinverted ? -chart.plotLeft : -chart.plotTop, \n\t\t\t\t\t99,\n\t\t\t\t\tinverted ? chart.chartWidth : chart.chartHeight\n\t\t\t\t);\n\t\t\t}\n\t\t\tseries.group.clip(clipRect);\n\t\t\tseries.markerGroup.clip(markerClipRect);\n\t\t\tseries.sharedClipKey = sharedClipKey;\n\n\t\t// Run the animation\n\t\t} else { \n\t\t\tclipRect = chart[sharedClipKey];\n\t\t\tif (clipRect) {\n\t\t\t\tclipRect.animate({\n\t\t\t\t\twidth: chart.plotSizeX\n\t\t\t\t}, animation);\n\t\t\t\tchart[sharedClipKey + 'm'].animate({\n\t\t\t\t\twidth: chart.plotSizeX + 99\n\t\t\t\t}, animation);\n\t\t\t}\n\n\t\t\t// Delete this function to allow it only once\n\t\t\tseries.animate = null;\n\t\t\t\n\t\t\t// Call the afterAnimate function on animation complete (but don't overwrite the animation.complete option\n\t\t\t// which should be available to the user).\n\t\t\tseries.animationTimeout = setTimeout(function () {\n\t\t\t\tseries.afterAnimate();\n\t\t\t}, animation.duration);\n\t\t}\n\t},\n\t\n\t/**\n\t * This runs after animation to land on the final plot clipping\n\t */\n\tafterAnimate: function () {\n\t\tvar chart = this.chart,\n\t\t\tsharedClipKey = this.sharedClipKey,\n\t\t\tgroup = this.group;\n\t\t\t\n\t\tif (group && this.options.clip !== false) {\n\t\t\tgroup.clip(chart.clipRect);\n\t\t\tthis.markerGroup.clip(); // no clip\n\t\t}\n\t\t\n\t\t// Remove the shared clipping rectancgle when all series are shown\t\t\n\t\tsetTimeout(function () {\n\t\t\tif (sharedClipKey && chart[sharedClipKey]) {\n\t\t\t\tchart[sharedClipKey] = chart[sharedClipKey].destroy();\n\t\t\t\tchart[sharedClipKey + 'm'] = chart[sharedClipKey + 'm'].destroy();\n\t\t\t}\n\t\t}, 100);\n\t},\n\n\t/**\n\t * Draw the markers\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\tpointAttr,\n\t\t\tpoints = series.points,\n\t\t\tchart = series.chart,\n\t\t\tplotX,\n\t\t\tplotY,\n\t\t\ti,\n\t\t\tpoint,\n\t\t\tradius,\n\t\t\tsymbol,\n\t\t\tisImage,\n\t\t\tgraphic,\n\t\t\toptions = series.options,\n\t\t\tseriesMarkerOptions = options.marker,\n\t\t\tpointMarkerOptions,\n\t\t\tenabled,\n\t\t\tisInside,\n\t\t\tmarkerGroup = series.markerGroup;\n\n\t\tif (seriesMarkerOptions.enabled || series._hasPointMarkers) {\n\t\t\t\n\t\t\ti = points.length;\n\t\t\twhile (i--) {\n\t\t\t\tpoint = points[i];\n\t\t\t\tplotX = mathFloor(point.plotX); // #1843\n\t\t\t\tplotY = point.plotY;\n\t\t\t\tgraphic = point.graphic;\n\t\t\t\tpointMarkerOptions = point.marker || {};\n\t\t\t\tenabled = (seriesMarkerOptions.enabled && pointMarkerOptions.enabled === UNDEFINED) || pointMarkerOptions.enabled;\n\t\t\t\tisInside = chart.isInsidePlot(mathRound(plotX), plotY, chart.inverted); // #1858\n\t\t\t\t\n\t\t\t\t// only draw the point if y is defined\n\t\t\t\tif (enabled && plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) {\n\n\t\t\t\t\t// shortcuts\n\t\t\t\t\tpointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE];\n\t\t\t\t\tradius = pointAttr.r;\n\t\t\t\t\tsymbol = pick(pointMarkerOptions.symbol, series.symbol);\n\t\t\t\t\tisImage = symbol.indexOf('url') === 0;\n\n\t\t\t\t\tif (graphic) { // update\n\t\t\t\t\t\tgraphic\n\t\t\t\t\t\t\t.attr({ // Since the marker group isn't clipped, each individual marker must be toggled\n\t\t\t\t\t\t\t\tvisibility: isInside ? (hasSVG ? 'inherit' : VISIBLE) : HIDDEN\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.animate(extend({\n\t\t\t\t\t\t\t\tx: plotX - radius,\n\t\t\t\t\t\t\t\ty: plotY - radius\n\t\t\t\t\t\t\t}, graphic.symbolName ? { // don't apply to image symbols #507\n\t\t\t\t\t\t\t\twidth: 2 * radius,\n\t\t\t\t\t\t\t\theight: 2 * radius\n\t\t\t\t\t\t\t} : {}));\n\t\t\t\t\t} else if (isInside && (radius > 0 || isImage)) {\n\t\t\t\t\t\tpoint.graphic = graphic = chart.renderer.symbol(\n\t\t\t\t\t\t\tsymbol,\n\t\t\t\t\t\t\tplotX - radius,\n\t\t\t\t\t\t\tplotY - radius,\n\t\t\t\t\t\t\t2 * radius,\n\t\t\t\t\t\t\t2 * radius\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(pointAttr)\n\t\t\t\t\t\t.add(markerGroup);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else if (graphic) {\n\t\t\t\t\tpoint.graphic = graphic.destroy(); // #1269\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t},\n\n\t/**\n\t * Convert state properties from API naming conventions to SVG attributes\n\t *\n\t * @param {Object} options API options object\n\t * @param {Object} base1 SVG attribute object to inherit from\n\t * @param {Object} base2 Second level SVG attribute object to inherit from\n\t */\n\tconvertAttribs: function (options, base1, base2, base3) {\n\t\tvar conversion = this.pointAttrToOptions,\n\t\t\tattr,\n\t\t\toption,\n\t\t\tobj = {};\n\n\t\toptions = options || {};\n\t\tbase1 = base1 || {};\n\t\tbase2 = base2 || {};\n\t\tbase3 = base3 || {};\n\n\t\tfor (attr in conversion) {\n\t\t\toption = conversion[attr];\n\t\t\tobj[attr] = pick(options[option], base1[attr], base2[attr], base3[attr]);\n\t\t}\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Get the state attributes. Each series type has its own set of attributes\n\t * that are allowed to change on a point's state change. Series wide attributes are stored for\n\t * all series, and additionally point specific attributes are stored for all\n\t * points with individual marker options. If such options are not defined for the point,\n\t * a reference to the series wide attributes is stored in point.pointAttr.\n\t */\n\tgetAttribs: function () {\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\tnormalOptions = defaultPlotOptions[series.type].marker ? seriesOptions.marker : seriesOptions,\n\t\t\tstateOptions = normalOptions.states,\n\t\t\tstateOptionsHover = stateOptions[HOVER_STATE],\n\t\t\tpointStateOptionsHover,\n\t\t\tseriesColor = series.color,\n\t\t\tnormalDefaults = {\n\t\t\t\tstroke: seriesColor,\n\t\t\t\tfill: seriesColor\n\t\t\t},\n\t\t\tpoints = series.points || [], // #927\n\t\t\ti,\n\t\t\tpoint,\n\t\t\tseriesPointAttr = [],\n\t\t\tpointAttr,\n\t\t\tpointAttrToOptions = series.pointAttrToOptions,\n\t\t\thasPointSpecificOptions,\n\t\t\tnegativeColor = seriesOptions.negativeColor,\n\t\t\tdefaultLineColor = normalOptions.lineColor,\n\t\t\tkey;\n\n\t\t// series type specific modifications\n\t\tif (seriesOptions.marker) { // line, spline, area, areaspline, scatter\n\n\t\t\t// if no hover radius is given, default to normal radius + 2\n\t\t\tstateOptionsHover.radius = stateOptionsHover.radius || normalOptions.radius + 2;\n\t\t\tstateOptionsHover.lineWidth = stateOptionsHover.lineWidth || normalOptions.lineWidth + 1;\n\t\t\t\n\t\t} else { // column, bar, pie\n\n\t\t\t// if no hover color is given, brighten the normal color\n\t\t\tstateOptionsHover.color = stateOptionsHover.color ||\n\t\t\t\tColor(stateOptionsHover.color || seriesColor)\n\t\t\t\t\t.brighten(stateOptionsHover.brightness).get();\n\t\t}\n\n\t\t// general point attributes for the series normal state\n\t\tseriesPointAttr[NORMAL_STATE] = series.convertAttribs(normalOptions, normalDefaults);\n\n\t\t// HOVER_STATE and SELECT_STATE states inherit from normal state except the default radius\n\t\teach([HOVER_STATE, SELECT_STATE], function (state) {\n\t\t\tseriesPointAttr[state] =\n\t\t\t\t\tseries.convertAttribs(stateOptions[state], seriesPointAttr[NORMAL_STATE]);\n\t\t});\n\n\t\t// set it\n\t\tseries.pointAttr = seriesPointAttr;\n\n\n\t\t// Generate the point-specific attribute collections if specific point\n\t\t// options are given. If not, create a referance to the series wide point\n\t\t// attributes\n\t\ti = points.length;\n\t\twhile (i--) {\n\t\t\tpoint = points[i];\n\t\t\tnormalOptions = (point.options && point.options.marker) || point.options;\n\t\t\tif (normalOptions && normalOptions.enabled === false) {\n\t\t\t\tnormalOptions.radius = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif (point.negative && negativeColor) {\n\t\t\t\tpoint.color = point.fillColor = negativeColor;\n\t\t\t}\n\t\t\t\n\t\t\thasPointSpecificOptions = seriesOptions.colorByPoint || point.color; // #868\n\n\t\t\t// check if the point has specific visual options\n\t\t\tif (point.options) {\n\t\t\t\tfor (key in pointAttrToOptions) {\n\t\t\t\t\tif (defined(normalOptions[pointAttrToOptions[key]])) {\n\t\t\t\t\t\thasPointSpecificOptions = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// a specific marker config object is defined for the individual point:\n\t\t\t// create it's own attribute collection\n\t\t\tif (hasPointSpecificOptions) {\n\t\t\t\tnormalOptions = normalOptions || {};\n\t\t\t\tpointAttr = [];\n\t\t\t\tstateOptions = normalOptions.states || {}; // reassign for individual point\n\t\t\t\tpointStateOptionsHover = stateOptions[HOVER_STATE] = stateOptions[HOVER_STATE] || {};\n\n\t\t\t\t// Handle colors for column and pies\n\t\t\t\tif (!seriesOptions.marker) { // column, bar, point\n\t\t\t\t\t// if no hover color is given, brighten the normal color\n\t\t\t\t\tpointStateOptionsHover.color =\n\t\t\t\t\t\tColor(pointStateOptionsHover.color || point.color)\n\t\t\t\t\t\t\t.brighten(pointStateOptionsHover.brightness ||\n\t\t\t\t\t\t\t\tstateOptionsHover.brightness).get();\n\n\t\t\t\t}\n\n\t\t\t\t// normal point state inherits series wide normal state\n\t\t\t\tpointAttr[NORMAL_STATE] = series.convertAttribs(extend({\n\t\t\t\t\tcolor: point.color, // #868\n\t\t\t\t\tfillColor: point.color, // Individual point color or negative color markers (#2219)\n\t\t\t\t\tlineColor: defaultLineColor === null ? point.color : UNDEFINED // Bubbles take point color, line markers use white\n\t\t\t\t}, normalOptions), seriesPointAttr[NORMAL_STATE]);\n\n\t\t\t\t// inherit from point normal and series hover\n\t\t\t\tpointAttr[HOVER_STATE] = series.convertAttribs(\n\t\t\t\t\tstateOptions[HOVER_STATE],\n\t\t\t\t\tseriesPointAttr[HOVER_STATE],\n\t\t\t\t\tpointAttr[NORMAL_STATE]\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\t// inherit from point normal and series hover\n\t\t\t\tpointAttr[SELECT_STATE] = series.convertAttribs(\n\t\t\t\t\tstateOptions[SELECT_STATE],\n\t\t\t\t\tseriesPointAttr[SELECT_STATE],\n\t\t\t\t\tpointAttr[NORMAL_STATE]\n\t\t\t\t);\n\n\n\t\t\t// no marker config object is created: copy a reference to the series-wide\n\t\t\t// attribute collection\n\t\t\t} else {\n\t\t\t\tpointAttr = seriesPointAttr;\n\t\t\t}\n\n\t\t\tpoint.pointAttr = pointAttr;\n\n\t\t}\n\n\t},\n\t/**\n\t * Update the series with a new set of options\n\t */\n\tupdate: function (newOptions, redraw) {\n\t\tvar chart = this.chart,\n\t\t\t// must use user options when changing type because this.options is merged\n\t\t\t// in with type specific plotOptions\n\t\t\toldOptions = this.userOptions,\n\t\t\toldType = this.type,\n\t\t\tproto = seriesTypes[oldType].prototype,\n\t\t\tn;\n\n\t\t// Do the merge, with some forced options\n\t\tnewOptions = merge(oldOptions, {\n\t\t\tanimation: false,\n\t\t\tindex: this.index,\n\t\t\tpointStart: this.xData[0] // when updating after addPoint\n\t\t}, { data: this.options.data }, newOptions);\n\n\t\t// Destroy the series and reinsert methods from the type prototype\n\t\tthis.remove(false);\n\t\tfor (n in proto) { // Overwrite series-type specific methods (#2270)\n\t\t\tif (proto.hasOwnProperty(n)) {\n\t\t\t\tthis[n] = UNDEFINED;\n\t\t\t}\n\t\t}\n\t\textend(this, seriesTypes[newOptions.type || oldType].prototype);\n\t\t\n\n\t\tthis.init(chart, newOptions);\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Clear DOM objects and free up memory\n\t */\n\tdestroy: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tissue134 = /AppleWebKit\\/533/.test(userAgent),\n\t\t\tdestroy,\n\t\t\ti,\n\t\t\tdata = series.data || [],\n\t\t\tpoint,\n\t\t\tprop,\n\t\t\taxis;\n\n\t\t// add event hook\n\t\tfireEvent(series, 'destroy');\n\n\t\t// remove all events\n\t\tremoveEvent(series);\n\t\t\n\t\t// erase from axes\n\t\teach(['xAxis', 'yAxis'], function (AXIS) {\n\t\t\taxis = series[AXIS];\n\t\t\tif (axis) {\n\t\t\t\terase(axis.series, series);\n\t\t\t\taxis.isDirty = axis.forceRedraw = true;\n\t\t\t\taxis.stacks = {}; // Rebuild stacks when updating (#2229)\n\t\t\t}\n\t\t});\n\n\t\t// remove legend items\n\t\tif (series.legendItem) {\n\t\t\tseries.chart.legend.destroyItem(series);\n\t\t}\n\n\t\t// destroy all points with their elements\n\t\ti = data.length;\n\t\twhile (i--) {\n\t\t\tpoint = data[i];\n\t\t\tif (point && point.destroy) {\n\t\t\t\tpoint.destroy();\n\t\t\t}\n\t\t}\n\t\tseries.points = null;\n\n\t\t// Clear the animation timeout if we are destroying the series during initial animation\n\t\tclearTimeout(series.animationTimeout);\n\n\t\t// destroy all SVGElements associated to the series\n\t\teach(['area', 'graph', 'dataLabelsGroup', 'group', 'markerGroup', 'tracker',\n\t\t\t\t'graphNeg', 'areaNeg', 'posClip', 'negClip'], function (prop) {\n\t\t\tif (series[prop]) {\n\n\t\t\t\t// issue 134 workaround\n\t\t\t\tdestroy = issue134 && prop === 'group' ?\n\t\t\t\t\t'hide' :\n\t\t\t\t\t'destroy';\n\n\t\t\t\tseries[prop][destroy]();\n\t\t\t}\n\t\t});\n\n\t\t// remove from hoverSeries\n\t\tif (chart.hoverSeries === series) {\n\t\t\tchart.hoverSeries = null;\n\t\t}\n\t\terase(chart.series, series);\n\n\t\t// clear all members\n\t\tfor (prop in series) {\n\t\t\tdelete series[prop];\n\t\t}\n\t},\n\n\t/**\n\t * Draw the data labels\n\t */\n\tdrawDataLabels: function () {\n\t\t\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\toptions = seriesOptions.dataLabels,\n\t\t\tpoints = series.points,\n\t\t\tpointOptions,\n\t\t\tgeneralOptions,\n\t\t\tstr,\n\t\t\tdataLabelsGroup;\n\t\t\n\t\tif (options.enabled || series._hasPointLabels) {\n\t\t\t\t\t\t\n\t\t\t// Process default alignment of data labels for columns\n\t\t\tif (series.dlProcessOptions) {\n\t\t\t\tseries.dlProcessOptions(options);\n\t\t\t}\n\n\t\t\t// Create a separate group for the data labels to avoid rotation\n\t\t\tdataLabelsGroup = series.plotGroup(\n\t\t\t\t'dataLabelsGroup', \n\t\t\t\t'data-labels', \n\t\t\t\tseries.visible ? VISIBLE : HIDDEN, \n\t\t\t\toptions.zIndex || 6\n\t\t\t);\n\t\t\t\n\t\t\t// Make the labels for each point\n\t\t\tgeneralOptions = options;\n\t\t\teach(points, function (point) {\n\t\t\t\t\n\t\t\t\tvar enabled,\n\t\t\t\t\tdataLabel = point.dataLabel,\n\t\t\t\t\tlabelConfig,\n\t\t\t\t\tattr,\n\t\t\t\t\tname,\n\t\t\t\t\trotation,\n\t\t\t\t\tconnector = point.connector,\n\t\t\t\t\tisNew = true;\n\t\t\t\t\n\t\t\t\t// Determine if each data label is enabled\n\t\t\t\tpointOptions = point.options && point.options.dataLabels;\n\t\t\t\tenabled = pick(pointOptions && pointOptions.enabled, generalOptions.enabled); // #2282\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// If the point is outside the plot area, destroy it. #678, #820\n\t\t\t\tif (dataLabel && !enabled) {\n\t\t\t\t\tpoint.dataLabel = dataLabel.destroy();\n\t\t\t\t\n\t\t\t\t// Individual labels are disabled if the are explicitly disabled \n\t\t\t\t// in the point options, or if they fall outside the plot area.\n\t\t\t\t} else if (enabled) {\n\t\t\t\t\t\n\t\t\t\t\t// Create individual options structure that can be extended without \n\t\t\t\t\t// affecting others\n\t\t\t\t\toptions = merge(generalOptions, pointOptions);\n\n\t\t\t\t\trotation = options.rotation;\n\t\t\t\t\t\n\t\t\t\t\t// Get the string\n\t\t\t\t\tlabelConfig = point.getLabelConfig();\n\t\t\t\t\tstr = options.format ?\n\t\t\t\t\t\tformat(options.format, labelConfig) : \n\t\t\t\t\t\toptions.formatter.call(labelConfig, options);\n\t\t\t\t\t\n\t\t\t\t\t// Determine the color\n\t\t\t\t\toptions.style.color = pick(options.color, options.style.color, series.color, 'black');\n\t\n\t\t\t\t\t\n\t\t\t\t\t// update existing label\n\t\t\t\t\tif (dataLabel) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (defined(str)) {\n\t\t\t\t\t\t\tdataLabel\n\t\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\t\ttext: str\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tisNew = false;\n\t\t\t\t\t\t\n\t\t\t\t\t\t} else { // #1437 - the label is shown conditionally\n\t\t\t\t\t\t\tpoint.dataLabel = dataLabel = dataLabel.destroy();\n\t\t\t\t\t\t\tif (connector) {\n\t\t\t\t\t\t\t\tpoint.connector = connector.destroy();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t// create new label\n\t\t\t\t\t} else if (defined(str)) {\n\t\t\t\t\t\tattr = {\n\t\t\t\t\t\t\t//align: align,\n\t\t\t\t\t\t\tfill: options.backgroundColor,\n\t\t\t\t\t\t\tstroke: options.borderColor,\n\t\t\t\t\t\t\t'stroke-width': options.borderWidth,\n\t\t\t\t\t\t\tr: options.borderRadius || 0,\n\t\t\t\t\t\t\trotation: rotation,\n\t\t\t\t\t\t\tpadding: options.padding,\n\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t};\n\t\t\t\t\t\t// Remove unused attributes (#947)\n\t\t\t\t\t\tfor (name in attr) {\n\t\t\t\t\t\t\tif (attr[name] === UNDEFINED) {\n\t\t\t\t\t\t\t\tdelete attr[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tdataLabel = point.dataLabel = series.chart.renderer[rotation ? 'text' : 'label']( // labels don't support rotation\n\t\t\t\t\t\t\tstr,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t-999,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\toptions.useHTML\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(attr)\n\t\t\t\t\t\t.css(options.style)\n\t\t\t\t\t\t.add(dataLabelsGroup)\n\t\t\t\t\t\t.shadow(options.shadow);\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (dataLabel) {\n\t\t\t\t\t\t// Now the data label is created and placed at 0,0, so we need to align it\n\t\t\t\t\t\tseries.alignDataLabel(point, dataLabel, options, null, isNew);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Align each individual data label\n\t */\n\talignDataLabel: function (point, dataLabel, options, alignTo, isNew) {\n\t\tvar chart = this.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tplotX = pick(point.plotX, -999),\n\t\t\tplotY = pick(point.plotY, -999),\n\t\t\tbBox = dataLabel.getBBox(),\n\t\t\tvisible = this.visible && chart.isInsidePlot(point.plotX, point.plotY, inverted),\n\t\t\talignAttr; // the final position;\n\t\t\t\t\n\t\tif (visible) {\n\n\t\t\t// The alignment box is a singular point\n\t\t\talignTo = extend({\n\t\t\t\tx: inverted ? chart.plotWidth - plotY : plotX,\n\t\t\t\ty: mathRound(inverted ? chart.plotHeight - plotX : plotY),\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t}, alignTo);\n\t\t\t\n\t\t\t// Add the text size for alignment calculation\n\t\t\textend(options, {\n\t\t\t\twidth: bBox.width,\n\t\t\t\theight: bBox.height\n\t\t\t});\n\n\t\t\t// Allow a hook for changing alignment in the last moment, then do the alignment\n\t\t\tif (options.rotation) { // Fancy box alignment isn't supported for rotated text\n\t\t\t\talignAttr = {\n\t\t\t\t\talign: options.align,\n\t\t\t\t\tx: alignTo.x + options.x + alignTo.width / 2,\n\t\t\t\t\ty: alignTo.y + options.y + alignTo.height / 2\n\t\t\t\t};\n\t\t\t\tdataLabel[isNew ? 'attr' : 'animate'](alignAttr);\n\t\t\t} else {\n\t\t\t\tdataLabel.align(options, null, alignTo);\n\t\t\t\talignAttr = dataLabel.alignAttr;\n\n\t\t\t\t// Handle justify or crop\n\t\t\t\tif (pick(options.overflow, 'justify') === 'justify') { // docs: overflow: justify, also crop only applies when not justify\n\t\t\t\t\tthis.justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew);\n\t\t\t\t\n\t\t\t\t} else if (pick(options.crop, true)) {\n\t\t\t\t\t// Now check that the data label is within the plot area\n\t\t\t\t\tvisible = chart.isInsidePlot(alignAttr.x, alignAttr.y) && chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height);\n\t\t\t\t\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t}\n\n\t\t// Show or hide based on the final aligned position\n\t\tif (!visible) {\n\t\t\tdataLabel.attr({ y: -999 });\n\t\t}\n\t\t\t\t\n\t},\n\t\n\t/**\n\t * If data labels fall partly outside the plot area, align them back in, in a way that\n\t * doesn't hide the point.\n\t */\n\tjustifyDataLabel: function (dataLabel, options, alignAttr, bBox, alignTo, isNew) {\n\t\tvar chart = this.chart,\n\t\t\talign = options.align,\n\t\t\tverticalAlign = options.verticalAlign,\n\t\t\toff,\n\t\t\tjustified;\n\n\t\t// Off left\n\t\toff = alignAttr.x;\n\t\tif (off < 0) {\n\t\t\tif (align === 'right') {\n\t\t\t\toptions.align = 'left';\n\t\t\t} else {\n\t\t\t\toptions.x = -off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\n\t\t// Off right\n\t\toff = alignAttr.x + bBox.width;\n\t\tif (off > chart.plotWidth) {\n\t\t\tif (align === 'left') {\n\t\t\t\toptions.align = 'right';\n\t\t\t} else {\n\t\t\t\toptions.x = chart.plotWidth - off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\n\t\t// Off top\n\t\toff = alignAttr.y;\n\t\tif (off < 0) {\n\t\t\tif (verticalAlign === 'bottom') {\n\t\t\t\toptions.verticalAlign = 'top';\n\t\t\t} else {\n\t\t\t\toptions.y = -off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\n\t\t// Off bottom\n\t\toff = alignAttr.y + bBox.height;\n\t\tif (off > chart.plotHeight) {\n\t\t\tif (verticalAlign === 'top') {\n\t\t\t\toptions.verticalAlign = 'bottom';\n\t\t\t} else {\n\t\t\t\toptions.y = chart.plotHeight - off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\t\t\n\t\tif (justified) {\n\t\t\tdataLabel.placed = !isNew;\n\t\t\tdataLabel.align(options, null, alignTo);\n\t\t}\n\t},\n\t\n\t/**\n\t * Return the graph path of a segment\n\t */\n\tgetSegmentPath: function (segment) {\t\t\n\t\tvar series = this,\n\t\t\tsegmentPath = [],\n\t\t\tstep = series.options.step;\n\t\t\t\n\t\t// build the segment line\n\t\teach(segment, function (point, i) {\n\t\t\t\n\t\t\tvar plotX = point.plotX,\n\t\t\t\tplotY = point.plotY,\n\t\t\t\tlastPoint;\n\n\t\t\tif (series.getPointSpline) { // generate the spline as defined in the SplineSeries object\n\t\t\t\tsegmentPath.push.apply(segmentPath, series.getPointSpline(segment, point, i));\n\n\t\t\t} else {\n\n\t\t\t\t// moveTo or lineTo\n\t\t\t\tsegmentPath.push(i ? L : M);\n\n\t\t\t\t// step line?\n\t\t\t\tif (step && i) {\n\t\t\t\t\tlastPoint = segment[i - 1];\n\t\t\t\t\tif (step === 'right') {\n\t\t\t\t\t\tsegmentPath.push(\n\t\t\t\t\t\t\tlastPoint.plotX,\n\t\t\t\t\t\t\tplotY\n\t\t\t\t\t\t);\n\t\t\t\t\t\t\n\t\t\t\t\t} else if (step === 'center') {\n\t\t\t\t\t\tsegmentPath.push(\n\t\t\t\t\t\t\t(lastPoint.plotX + plotX) / 2,\n\t\t\t\t\t\t\tlastPoint.plotY,\n\t\t\t\t\t\t\t(lastPoint.plotX + plotX) / 2,\n\t\t\t\t\t\t\tplotY\n\t\t\t\t\t\t);\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsegmentPath.push(\n\t\t\t\t\t\t\tplotX,\n\t\t\t\t\t\t\tlastPoint.plotY\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// normal line to next point\n\t\t\t\tsegmentPath.push(\n\t\t\t\t\tpoint.plotX,\n\t\t\t\t\tpoint.plotY\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn segmentPath;\n\t},\n\n\t/**\n\t * Get the graph path\n\t */\n\tgetGraphPath: function () {\n\t\tvar series = this,\n\t\t\tgraphPath = [],\n\t\t\tsegmentPath,\n\t\t\tsinglePoints = []; // used in drawTracker\n\n\t\t// Divide into segments and build graph and area paths\n\t\teach(series.segments, function (segment) {\n\t\t\t\n\t\t\tsegmentPath = series.getSegmentPath(segment);\n\t\t\t\n\t\t\t// add the segment to the graph, or a single point for tracking\n\t\t\tif (segment.length > 1) {\n\t\t\t\tgraphPath = graphPath.concat(segmentPath);\n\t\t\t} else {\n\t\t\t\tsinglePoints.push(segment[0]);\n\t\t\t}\n\t\t});\n\n\t\t// Record it for use in drawGraph and drawTracker, and return graphPath\n\t\tseries.singlePoints = singlePoints;\n\t\tseries.graphPath = graphPath;\n\t\t\n\t\treturn graphPath;\n\t\t\n\t},\n\t\n\t/**\n\t * Draw the actual graph\n\t */\n\tdrawGraph: function () {\n\t\tvar series = this,\n\t\t\toptions = this.options,\n\t\t\tprops = [['graph', options.lineColor || this.color]],\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tdashStyle =  options.dashStyle,\n\t\t\tgraphPath = this.getGraphPath(),\n\t\t\tnegativeColor = options.negativeColor;\n\t\t\t\n\t\tif (negativeColor) {\n\t\t\tprops.push(['graphNeg', negativeColor]);\n\t\t}\n\t\t\n\t\t// draw the graph\n\t\teach(props, function (prop, i) {\n\t\t\tvar graphKey = prop[0],\n\t\t\t\tgraph = series[graphKey],\n\t\t\t\tattribs;\n\t\t\t\n\t\t\tif (graph) {\n\t\t\t\tstop(graph); // cancel running animations, #459\n\t\t\t\tgraph.animate({ d: graphPath });\n\t\n\t\t\t} else if (lineWidth && graphPath.length) { // #1487\n\t\t\t\tattribs = {\n\t\t\t\t\tstroke: prop[1],\n\t\t\t\t\t'stroke-width': lineWidth,\n\t\t\t\t\tzIndex: 1 // #1069\n\t\t\t\t};\n\t\t\t\tif (dashStyle) {\n\t\t\t\t\tattribs.dashstyle = dashStyle;\n\t\t\t\t} else {\n\t\t\t\t\tattribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round';\n\t\t\t\t}\n\n\t\t\t\tseries[graphKey] = series.chart.renderer.path(graphPath)\n\t\t\t\t\t.attr(attribs)\n\t\t\t\t\t.add(series.group)\n\t\t\t\t\t.shadow(!i && options.shadow);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Clip the graphs into the positive and negative coloured graphs\n\t */\n\tclipNeg: function () {\n\t\tvar options = this.options,\n\t\t\tchart = this.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tnegativeColor = options.negativeColor || options.negativeFillColor,\n\t\t\ttranslatedThreshold,\n\t\t\tposAttr,\n\t\t\tnegAttr,\n\t\t\tgraph = this.graph,\n\t\t\tarea = this.area,\n\t\t\tposClip = this.posClip,\n\t\t\tnegClip = this.negClip,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\tchartSizeMax = mathMax(chartWidth, chartHeight),\n\t\t\tyAxis = this.yAxis,\n\t\t\tabove,\n\t\t\tbelow;\n\t\t\n\t\tif (negativeColor && (graph || area)) {\n\t\t\ttranslatedThreshold = mathRound(yAxis.toPixels(options.threshold || 0, true));\n\t\t\tabove = {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: chartSizeMax,\n\t\t\t\theight: translatedThreshold\n\t\t\t};\n\t\t\tbelow = {\n\t\t\t\tx: 0,\n\t\t\t\ty: translatedThreshold,\n\t\t\t\twidth: chartSizeMax,\n\t\t\t\theight: chartSizeMax\n\t\t\t};\n\t\t\t\n\t\t\tif (chart.inverted) {\n\n\t\t\t\tabove.height = below.y = chart.plotWidth - translatedThreshold;\n\t\t\t\tif (renderer.isVML) {\n\t\t\t\t\tabove = {\n\t\t\t\t\t\tx: chart.plotWidth - translatedThreshold - chart.plotLeft,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: chartWidth,\n\t\t\t\t\t\theight: chartHeight\n\t\t\t\t\t};\n\t\t\t\t\tbelow = {\n\t\t\t\t\t\tx: translatedThreshold + chart.plotLeft - chartWidth,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: chart.plotLeft + translatedThreshold,\n\t\t\t\t\t\theight: chartWidth\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (yAxis.reversed) {\n\t\t\t\tposAttr = below;\n\t\t\t\tnegAttr = above;\n\t\t\t} else {\n\t\t\t\tposAttr = above;\n\t\t\t\tnegAttr = below;\n\t\t\t}\n\t\t\n\t\t\tif (posClip) { // update\n\t\t\t\tposClip.animate(posAttr);\n\t\t\t\tnegClip.animate(negAttr);\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tthis.posClip = posClip = renderer.clipRect(posAttr);\n\t\t\t\tthis.negClip = negClip = renderer.clipRect(negAttr);\n\t\t\t\t\n\t\t\t\tif (graph && this.graphNeg) {\n\t\t\t\t\tgraph.clip(posClip);\n\t\t\t\t\tthis.graphNeg.clip(negClip);\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (area) {\n\t\t\t\t\tarea.clip(posClip);\n\t\t\t\t\tthis.areaNeg.clip(negClip);\n\t\t\t\t} \n\t\t\t} \n\t\t}\t\n\t},\n\n\t/**\n\t * Initialize and perform group inversion on series.group and series.markerGroup\n\t */\n\tinvertGroups: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\n\t\t// Pie, go away (#1736)\n\t\tif (!series.xAxis) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// A fixed size is needed for inversion to work\n\t\tfunction setInvert() {\t\t\t\n\t\t\tvar size = {\n\t\t\t\twidth: series.yAxis.len,\n\t\t\t\theight: series.xAxis.len\n\t\t\t};\n\t\t\t\n\t\t\teach(['group', 'markerGroup'], function (groupName) {\n\t\t\t\tif (series[groupName]) {\n\t\t\t\t\tseries[groupName].attr(size).invert();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\taddEvent(chart, 'resize', setInvert); // do it on resize\n\t\taddEvent(series, 'destroy', function () {\n\t\t\tremoveEvent(chart, 'resize', setInvert);\n\t\t});\n\n\t\t// Do it now\n\t\tsetInvert(); // do it now\n\t\t\n\t\t// On subsequent render and redraw, just do setInvert without setting up events again\n\t\tseries.invertGroups = setInvert;\n\t},\n\t\n\t/**\n\t * General abstraction for creating plot groups like series.group, series.dataLabelsGroup and \n\t * series.markerGroup. On subsequent calls, the group will only be adjusted to the updated plot size.\n\t */\n\tplotGroup: function (prop, name, visibility, zIndex, parent) {\n\t\tvar group = this[prop],\n\t\t\tisNew = !group;\n\t\t\n\t\t// Generate it on first call\n\t\tif (isNew) {\t\n\t\t\tthis[prop] = group = this.chart.renderer.g(name)\n\t\t\t\t.attr({\n\t\t\t\t\tvisibility: visibility,\n\t\t\t\t\tzIndex: zIndex || 0.1 // IE8 needs this\n\t\t\t\t})\n\t\t\t\t.add(parent);\n\t\t}\n\t\t// Place it on first and subsequent (redraw) calls\n\t\tgroup[isNew ? 'attr' : 'animate'](this.getPlotBox());\n\t\treturn group;\t\t\n\t},\n\n\t/**\n\t * Get the translation and scale for the plot area of this series\n\t */\n\tgetPlotBox: function () {\n\t\treturn {\n\t\t\ttranslateX: this.xAxis ? this.xAxis.left : this.chart.plotLeft, \n\t\t\ttranslateY: this.yAxis ? this.yAxis.top : this.chart.plotTop,\n\t\t\tscaleX: 1, // #1623\n\t\t\tscaleY: 1\n\t\t};\n\t},\n\t\n\t/**\n\t * Render the graph and markers\n\t */\n\trender: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tgroup,\n\t\t\toptions = series.options,\n\t\t\tanimation = options.animation,\n\t\t\tdoAnimation = animation && !!series.animate && \n\t\t\t\tchart.renderer.isSVG, // this animation doesn't work in IE8 quirks when the group div is hidden,\n\t\t\t\t// and looks bad in other oldIE\n\t\t\tvisibility = series.visible ? VISIBLE : HIDDEN,\n\t\t\tzIndex = options.zIndex,\n\t\t\thasRendered = series.hasRendered,\n\t\t\tchartSeriesGroup = chart.seriesGroup;\n\t\t\n\t\t// the group\n\t\tgroup = series.plotGroup(\n\t\t\t'group', \n\t\t\t'series', \n\t\t\tvisibility, \n\t\t\tzIndex, \n\t\t\tchartSeriesGroup\n\t\t);\n\t\t\n\t\tseries.markerGroup = series.plotGroup(\n\t\t\t'markerGroup', \n\t\t\t'markers', \n\t\t\tvisibility, \n\t\t\tzIndex, \n\t\t\tchartSeriesGroup\n\t\t);\n\t\t\n\t\t// initiate the animation\n\t\tif (doAnimation) {\n\t\t\tseries.animate(true);\n\t\t}\n\n\t\t// cache attributes for shapes\n\t\tseries.getAttribs();\n\n\t\t// SVGRenderer needs to know this before drawing elements (#1089, #1795)\n\t\tgroup.inverted = series.isCartesian ? chart.inverted : false;\n\t\t\n\t\t// draw the graph if any\n\t\tif (series.drawGraph) {\n\t\t\tseries.drawGraph();\n\t\t\tseries.clipNeg();\n\t\t}\n\n\t\t// draw the data labels (inn pies they go before the points)\n\t\tseries.drawDataLabels();\n\t\t\n\t\t// draw the points\n\t\tseries.drawPoints();\n\n\n\t\t// draw the mouse tracking area\n\t\tif (series.options.enableMouseTracking !== false) {\n\t\t\tseries.drawTracker();\n\t\t}\n\t\t\n\t\t// Handle inverted series and tracker groups\n\t\tif (chart.inverted) {\n\t\t\tseries.invertGroups();\n\t\t}\n\t\t\n\t\t// Initial clipping, must be defined after inverting groups for VML\n\t\tif (options.clip !== false && !series.sharedClipKey && !hasRendered) {\n\t\t\tgroup.clip(chart.clipRect);\n\t\t}\n\n\t\t// Run the animation\n\t\tif (doAnimation) {\n\t\t\tseries.animate();\n\t\t} else if (!hasRendered) {\n\t\t\tseries.afterAnimate();\n\t\t}\n\n\t\tseries.isDirty = series.isDirtyData = false; // means data is in accordance with what you see\n\t\t// (See #322) series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see\n\t\tseries.hasRendered = true;\n\t},\n\t\n\t/**\n\t * Redraw the series after an update in the axes.\n\t */\n\tredraw: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\twasDirtyData = series.isDirtyData, // cache it here as it is set to false in render, but used after\n\t\t\tgroup = series.group,\n\t\t\txAxis = series.xAxis,\n\t\t\tyAxis = series.yAxis;\n\n\t\t// reposition on resize\n\t\tif (group) {\n\t\t\tif (chart.inverted) {\n\t\t\t\tgroup.attr({\n\t\t\t\t\twidth: chart.plotWidth,\n\t\t\t\t\theight: chart.plotHeight\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tgroup.animate({\n\t\t\t\ttranslateX: pick(xAxis && xAxis.left, chart.plotLeft),\n\t\t\t\ttranslateY: pick(yAxis && yAxis.top, chart.plotTop)\n\t\t\t});\n\t\t}\n\n\t\tseries.translate();\n\t\tseries.setTooltipPoints(true);\n\n\t\tseries.render();\n\t\tif (wasDirtyData) {\n\t\t\tfireEvent(series, 'updatedData');\n\t\t}\n\t},\n\n\t/**\n\t * Set the state of the graph\n\t */\n\tsetState: function (state) {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tgraph = series.graph,\n\t\t\tgraphNeg = series.graphNeg,\n\t\t\tstateOptions = options.states,\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tattribs;\n\n\t\tstate = state || NORMAL_STATE;\n\n\t\tif (series.state !== state) {\n\t\t\tseries.state = state;\n\n\t\t\tif (stateOptions[state] && stateOptions[state].enabled === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (state) {\n\t\t\t\tlineWidth = stateOptions[state].lineWidth || lineWidth + 1;\n\t\t\t}\n\n\t\t\tif (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML\n\t\t\t\tattribs = {\n\t\t\t\t\t'stroke-width': lineWidth\n\t\t\t\t};\n\t\t\t\t// use attr because animate will cause any other animation on the graph to stop\n\t\t\t\tgraph.attr(attribs);\n\t\t\t\tif (graphNeg) {\n\t\t\t\t\tgraphNeg.attr(attribs);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set the visibility of the graph\n\t *\n\t * @param vis {Boolean} True to show the series, false to hide. If UNDEFINED,\n\t *        the visibility is toggled.\n\t */\n\tsetVisible: function (vis, redraw) {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tlegendItem = series.legendItem,\n\t\t\tshowOrHide,\n\t\t\tignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries,\n\t\t\toldVisibility = series.visible;\n\n\t\t// if called without an argument, toggle visibility\n\t\tseries.visible = vis = series.userOptions.visible = vis === UNDEFINED ? !oldVisibility : vis;\n\t\tshowOrHide = vis ? 'show' : 'hide';\n\n\t\t// show or hide elements\n\t\teach(['group', 'dataLabelsGroup', 'markerGroup', 'tracker'], function (key) {\n\t\t\tif (series[key]) {\n\t\t\t\tseries[key][showOrHide]();\n\t\t\t}\n\t\t});\n\n\t\t\n\t\t// hide tooltip (#1361)\n\t\tif (chart.hoverSeries === series) {\n\t\t\tseries.onMouseOut();\n\t\t}\n\n\n\t\tif (legendItem) {\n\t\t\tchart.legend.colorizeItem(series, vis);\n\t\t}\n\n\n\t\t// rescale or adapt to resized chart\n\t\tseries.isDirty = true;\n\t\t// in a stack, all other series are affected\n\t\tif (series.options.stacking) {\n\t\t\teach(chart.series, function (otherSeries) {\n\t\t\t\tif (otherSeries.options.stacking && otherSeries.visible) {\n\t\t\t\t\totherSeries.isDirty = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// show or hide linked series\n\t\teach(series.linkedSeries, function (otherSeries) {\n\t\t\totherSeries.setVisible(vis, false);\n\t\t});\n\n\t\tif (ignoreHiddenSeries) {\n\t\t\tchart.isDirtyBox = true;\n\t\t}\n\t\tif (redraw !== false) {\n\t\t\tchart.redraw();\n\t\t}\n\n\t\tfireEvent(series, showOrHide);\n\t},\n\n\t/**\n\t * Show the graph\n\t */\n\tshow: function () {\n\t\tthis.setVisible(true);\n\t},\n\n\t/**\n\t * Hide the graph\n\t */\n\thide: function () {\n\t\tthis.setVisible(false);\n\t},\n\n\n\t/**\n\t * Set the selected state of the graph\n\t *\n\t * @param selected {Boolean} True to select the series, false to unselect. If\n\t *        UNDEFINED, the selection state is toggled.\n\t */\n\tselect: function (selected) {\n\t\tvar series = this;\n\t\t// if called without an argument, toggle\n\t\tseries.selected = selected = (selected === UNDEFINED) ? !series.selected : selected;\n\n\t\tif (series.checkbox) {\n\t\t\tseries.checkbox.checked = selected;\n\t\t}\n\n\t\tfireEvent(series, selected ? 'select' : 'unselect');\n\t},\n\n\t/**\n\t * Draw the tracker object that sits above all data labels and markers to\n\t * track mouse events on the graph or points. For the line type charts\n\t * the tracker uses the same graphPath, but with a greater stroke width\n\t * for better control.\n\t */\n\tdrawTracker: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\ttrackByArea = options.trackByArea,\n\t\t\ttrackerPath = [].concat(trackByArea ? series.areaPath : series.graphPath),\n\t\t\ttrackerPathLength = trackerPath.length,\n\t\t\tchart = series.chart,\n\t\t\tpointer = chart.pointer,\n\t\t\trenderer = chart.renderer,\n\t\t\tsnap = chart.options.tooltip.snap,\n\t\t\ttracker = series.tracker,\n\t\t\tcursor = options.cursor,\n\t\t\tcss = cursor && { cursor: cursor },\n\t\t\tsinglePoints = series.singlePoints,\n\t\t\tsinglePoint,\n\t\t\ti,\n\t\t\tonMouseOver = function () {\n\t\t\t\tif (chart.hoverSeries !== series) {\n\t\t\t\t\tseries.onMouseOver();\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Extend end points. A better way would be to use round linecaps,\n\t\t// but those are not clickable in VML.\n\t\tif (trackerPathLength && !trackByArea) {\n\t\t\ti = trackerPathLength + 1;\n\t\t\twhile (i--) {\n\t\t\t\tif (trackerPath[i] === M) { // extend left side\n\t\t\t\t\ttrackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L);\n\t\t\t\t}\n\t\t\t\tif ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side\n\t\t\t\t\ttrackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// handle single points\n\t\tfor (i = 0; i < singlePoints.length; i++) {\n\t\t\tsinglePoint = singlePoints[i];\n\t\t\ttrackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY,\n\t\t\t\tL, singlePoint.plotX + snap, singlePoint.plotY);\n\t\t}\n\t\t\n\t\t\n\n\t\t// draw the tracker\n\t\tif (tracker) {\n\t\t\ttracker.attr({ d: trackerPath });\n\n\t\t} else { // create\n\t\t\t\t\n\t\t\tseries.tracker = renderer.path(trackerPath)\n\t\t\t\t.attr({\n\t\t\t\t\t'stroke-linejoin': 'round', // #1225\n\t\t\t\t\tvisibility: series.visible ? VISIBLE : HIDDEN,\n\t\t\t\t\tstroke: TRACKER_FILL,\n\t\t\t\t\tfill: trackByArea ? TRACKER_FILL : NONE,\n\t\t\t\t\t'stroke-width' : options.lineWidth + (trackByArea ? 0 : 2 * snap),\n\t\t\t\t\tzIndex: 2\n\t\t\t\t})\n\t\t\t\t.add(series.group);\n\t\t\t\t\n\t\t\t// The tracker is added to the series group, which is clipped, but is covered \n\t\t\t// by the marker group. So the marker group also needs to capture events.\n\t\t\teach([series.tracker, series.markerGroup], function (tracker) {\n\t\t\t\ttracker.addClass(PREFIX + 'tracker')\n\t\t\t\t\t.on('mouseover', onMouseOver)\n\t\t\t\t\t.on('mouseout', function (e) { pointer.onTrackerMouseOut(e); })\n\t\t\t\t\t.css(css);\n\n\t\t\t\tif (hasTouch) {\n\t\t\t\t\ttracker.on('touchstart', onMouseOver);\n\t\t\t\t} \n\t\t\t});\n\t\t}\n\n\t}\n\n}; // end Series prototype\n\n\n/**\n * LineSeries object\n */\nvar LineSeries = extendClass(Series);\nseriesTypes.line = LineSeries;\n\n/**\n * Set the default options for area\n */\ndefaultPlotOptions.area = merge(defaultSeriesOptions, {\n\tthreshold: 0\n\t// trackByArea: false,\n\t// lineColor: null, // overrides color, but lets fillColor be unaltered\n\t// fillOpacity: 0.75,\n\t// fillColor: null\n});\n\n/**\n * AreaSeries object\n */\nvar AreaSeries = extendClass(Series, {\n\ttype: 'area',\n\t\n\t/**\n\t * For stacks, don't split segments on null values. Instead, draw null values with \n\t * no marker. Also insert dummy points for any X position that exists in other series\n\t * in the stack.\n\t */ \n\tgetSegments: function () {\n\t\tvar segments = [],\n\t\t\tsegment = [],\n\t\t\tkeys = [],\n\t\t\txAxis = this.xAxis,\n\t\t\tyAxis = this.yAxis,\n\t\t\tstack = yAxis.stacks[this.stackKey],\n\t\t\tpointMap = {},\n\t\t\tplotX,\n\t\t\tplotY,\n\t\t\tpoints = this.points,\n\t\t\tconnectNulls = this.options.connectNulls,\n\t\t\tval,\n\t\t\ti,\n\t\t\tx;\n\n\t\tif (this.options.stacking && !this.cropped) { // cropped causes artefacts in Stock, and perf issue\n\t\t\t// Create a map where we can quickly look up the points by their X value.\n\t\t\tfor (i = 0; i < points.length; i++) {\n\t\t\t\tpointMap[points[i].x] = points[i];\n\t\t\t}\n\n\t\t\t// Sort the keys (#1651)\n\t\t\tfor (x in stack) {\n\t\t\t\tkeys.push(+x);\n\t\t\t}\n\t\t\tkeys.sort(function (a, b) {\n\t\t\t\treturn a - b;\n\t\t\t});\n\n\t\t\teach(keys, function (x) {\n\t\t\t\tif (connectNulls && (!pointMap[x] || pointMap[x].y === null)) { // #1836\n\t\t\t\t\treturn;\n\n\t\t\t\t// The point exists, push it to the segment\n\t\t\t\t} else if (pointMap[x]) {\n\t\t\t\t\tsegment.push(pointMap[x]);\n\n\t\t\t\t// There is no point for this X value in this series, so we \n\t\t\t\t// insert a dummy point in order for the areas to be drawn\n\t\t\t\t// correctly.\n\t\t\t\t} else {\n\t\t\t\t\tplotX = xAxis.translate(x);\n\t\t\t\t\tval = stack[x].percent ? (stack[x].total ? stack[x].cum * 100 / stack[x].total : 0) : stack[x].cum; // #1991\n\t\t\t\t\tplotY = yAxis.toPixels(val, true);\n\t\t\t\t\tsegment.push({ \n\t\t\t\t\t\ty: null, \n\t\t\t\t\t\tplotX: plotX,\n\t\t\t\t\t\tclientX: plotX, \n\t\t\t\t\t\tplotY: plotY, \n\t\t\t\t\t\tyBottom: plotY,\n\t\t\t\t\t\tonMouseOver: noop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (segment.length) {\n\t\t\t\tsegments.push(segment);\n\t\t\t}\n\n\t\t} else {\n\t\t\tSeries.prototype.getSegments.call(this);\n\t\t\tsegments = this.segments;\n\t\t}\n\n\t\tthis.segments = segments;\n\t},\n\t\n\t/**\n\t * Extend the base Series getSegmentPath method by adding the path for the area.\n\t * This path is pushed to the series.areaPath property.\n\t */\n\tgetSegmentPath: function (segment) {\n\t\t\n\t\tvar segmentPath = Series.prototype.getSegmentPath.call(this, segment), // call base method\n\t\t\tareaSegmentPath = [].concat(segmentPath), // work on a copy for the area path\n\t\t\ti,\n\t\t\toptions = this.options,\n\t\t\tsegLength = segmentPath.length,\n\t\t\ttranslatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181\n\t\t\tyBottom;\n\t\t\n\t\tif (segLength === 3) { // for animation from 1 to two points\n\t\t\tareaSegmentPath.push(L, segmentPath[1], segmentPath[2]);\n\t\t}\n\t\tif (options.stacking && !this.closedStacks) {\n\t\t\t\n\t\t\t// Follow stack back. Todo: implement areaspline. A general solution could be to \n\t\t\t// reverse the entire graphPath of the previous series, though may be hard with\n\t\t\t// splines and with series with different extremes\n\t\t\tfor (i = segment.length - 1; i >= 0; i--) {\n\n\t\t\t\tyBottom = pick(segment[i].yBottom, translatedThreshold);\n\t\t\t\n\t\t\t\t// step line?\n\t\t\t\tif (i < segment.length - 1 && options.step) {\n\t\t\t\t\tareaSegmentPath.push(segment[i + 1].plotX, yBottom);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tareaSegmentPath.push(segment[i].plotX, yBottom);\n\t\t\t}\n\n\t\t} else { // follow zero line back\n\t\t\tthis.closeSegment(areaSegmentPath, segment, translatedThreshold);\n\t\t}\n\t\tthis.areaPath = this.areaPath.concat(areaSegmentPath);\n\t\treturn segmentPath;\n\t},\n\t\n\t/**\n\t * Extendable method to close the segment path of an area. This is overridden in polar \n\t * charts.\n\t */\n\tcloseSegment: function (path, segment, translatedThreshold) {\n\t\tpath.push(\n\t\t\tL,\n\t\t\tsegment[segment.length - 1].plotX,\n\t\t\ttranslatedThreshold,\n\t\t\tL,\n\t\t\tsegment[0].plotX,\n\t\t\ttranslatedThreshold\n\t\t);\n\t},\n\t\n\t/**\n\t * Draw the graph and the underlying area. This method calls the Series base\n\t * function and adds the area. The areaPath is calculated in the getSegmentPath\n\t * method called from Series.prototype.drawGraph.\n\t */\n\tdrawGraph: function () {\n\t\t\n\t\t// Define or reset areaPath\n\t\tthis.areaPath = [];\n\t\t\n\t\t// Call the base method\n\t\tSeries.prototype.drawGraph.apply(this);\n\t\t\n\t\t// Define local variables\n\t\tvar series = this,\n\t\t\tareaPath = this.areaPath,\n\t\t\toptions = this.options,\n\t\t\tnegativeColor = options.negativeColor,\n\t\t\tnegativeFillColor = options.negativeFillColor,\n\t\t\tprops = [['area', this.color, options.fillColor]]; // area name, main color, fill color\n\t\t\n\t\tif (negativeColor || negativeFillColor) {\n\t\t\tprops.push(['areaNeg', negativeColor, negativeFillColor]);\n\t\t}\n\t\t\n\t\teach(props, function (prop) {\n\t\t\tvar areaKey = prop[0],\n\t\t\t\tarea = series[areaKey];\n\t\t\t\t\n\t\t\t// Create or update the area\n\t\t\tif (area) { // update\n\t\t\t\tarea.animate({ d: areaPath });\n\t\n\t\t\t} else { // create\n\t\t\t\tseries[areaKey] = series.chart.renderer.path(areaPath)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tfill: pick(\n\t\t\t\t\t\t\tprop[2],\n\t\t\t\t\t\t\tColor(prop[1]).setOpacity(pick(options.fillOpacity, 0.75)).get()\n\t\t\t\t\t\t),\n\t\t\t\t\t\tzIndex: 0 // #1069\n\t\t\t\t\t}).add(series.group);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Get the series' symbol in the legend\n\t * \n\t * @param {Object} legend The legend object\n\t * @param {Object} item The series (this) or point\n\t */\n\tdrawLegendSymbol: function (legend, item) {\n\t\t\n\t\titem.legendSymbol = this.chart.renderer.rect(\n\t\t\t0,\n\t\t\tlegend.baseline - 11,\n\t\t\tlegend.options.symbolWidth,\n\t\t\t12,\n\t\t\t2\n\t\t).attr({\n\t\t\tzIndex: 3\n\t\t}).add(item.legendGroup);\t\t\n\t\t\n\t}\n});\n\nseriesTypes.area = AreaSeries;/**\n * Set the default options for spline\n */\ndefaultPlotOptions.spline = merge(defaultSeriesOptions);\n\n/**\n * SplineSeries object\n */\nvar SplineSeries = extendClass(Series, {\n\ttype: 'spline',\n\n\t/**\n\t * Get the spline segment from a given point's previous neighbour to the given point\n\t */\n\tgetPointSpline: function (segment, point, i) {\n\t\tvar smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc\n\t\t\tdenom = smoothing + 1,\n\t\t\tplotX = point.plotX,\n\t\t\tplotY = point.plotY,\n\t\t\tlastPoint = segment[i - 1],\n\t\t\tnextPoint = segment[i + 1],\n\t\t\tleftContX,\n\t\t\tleftContY,\n\t\t\trightContX,\n\t\t\trightContY,\n\t\t\tret;\n\n\t\t// find control points\n\t\tif (lastPoint && nextPoint) {\n\t\t\n\t\t\tvar lastX = lastPoint.plotX,\n\t\t\t\tlastY = lastPoint.plotY,\n\t\t\t\tnextX = nextPoint.plotX,\n\t\t\t\tnextY = nextPoint.plotY,\n\t\t\t\tcorrection;\n\n\t\t\tleftContX = (smoothing * plotX + lastX) / denom;\n\t\t\tleftContY = (smoothing * plotY + lastY) / denom;\n\t\t\trightContX = (smoothing * plotX + nextX) / denom;\n\t\t\trightContY = (smoothing * plotY + nextY) / denom;\n\n\t\t\t// have the two control points make a straight line through main point\n\t\t\tcorrection = ((rightContY - leftContY) * (rightContX - plotX)) /\n\t\t\t\t(rightContX - leftContX) + plotY - rightContY;\n\n\t\t\tleftContY += correction;\n\t\t\trightContY += correction;\n\n\t\t\t// to prevent false extremes, check that control points are between\n\t\t\t// neighbouring points' y values\n\t\t\tif (leftContY > lastY && leftContY > plotY) {\n\t\t\t\tleftContY = mathMax(lastY, plotY);\n\t\t\t\trightContY = 2 * plotY - leftContY; // mirror of left control point\n\t\t\t} else if (leftContY < lastY && leftContY < plotY) {\n\t\t\t\tleftContY = mathMin(lastY, plotY);\n\t\t\t\trightContY = 2 * plotY - leftContY;\n\t\t\t}\n\t\t\tif (rightContY > nextY && rightContY > plotY) {\n\t\t\t\trightContY = mathMax(nextY, plotY);\n\t\t\t\tleftContY = 2 * plotY - rightContY;\n\t\t\t} else if (rightContY < nextY && rightContY < plotY) {\n\t\t\t\trightContY = mathMin(nextY, plotY);\n\t\t\t\tleftContY = 2 * plotY - rightContY;\n\t\t\t}\n\n\t\t\t// record for drawing in next point\n\t\t\tpoint.rightContX = rightContX;\n\t\t\tpoint.rightContY = rightContY;\n\n\t\t}\n\t\t\n\t\t// Visualize control points for debugging\n\t\t/*\n\t\tif (leftContX) {\n\t\t\tthis.chart.renderer.circle(leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, 2)\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'red',\n\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\tfill: 'none'\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t\tthis.chart.renderer.path(['M', leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop,\n\t\t\t\t'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop])\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'red',\n\t\t\t\t\t'stroke-width': 1\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t\tthis.chart.renderer.circle(rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, 2)\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'green',\n\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\tfill: 'none'\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t\tthis.chart.renderer.path(['M', rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop,\n\t\t\t\t'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop])\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'green',\n\t\t\t\t\t'stroke-width': 1\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t}\n\t\t*/\n\n\t\t// moveTo or lineTo\n\t\tif (!i) {\n\t\t\tret = [M, plotX, plotY];\n\t\t} else { // curve from last point to this\n\t\t\tret = [\n\t\t\t\t'C',\n\t\t\t\tlastPoint.rightContX || lastPoint.plotX,\n\t\t\t\tlastPoint.rightContY || lastPoint.plotY,\n\t\t\t\tleftContX || plotX,\n\t\t\t\tleftContY || plotY,\n\t\t\t\tplotX,\n\t\t\t\tplotY\n\t\t\t];\n\t\t\tlastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later\n\t\t}\n\t\treturn ret;\n\t}\n});\nseriesTypes.spline = SplineSeries;\n\n/**\n * Set the default options for areaspline\n */\ndefaultPlotOptions.areaspline = merge(defaultPlotOptions.area);\n\n/**\n * AreaSplineSeries object\n */\nvar areaProto = AreaSeries.prototype,\n\tAreaSplineSeries = extendClass(SplineSeries, {\n\t\ttype: 'areaspline',\n\t\tclosedStacks: true, // instead of following the previous graph back, follow the threshold back\n\t\t\n\t\t// Mix in methods from the area series\n\t\tgetSegmentPath: areaProto.getSegmentPath,\n\t\tcloseSegment: areaProto.closeSegment,\n\t\tdrawGraph: areaProto.drawGraph,\n\t\tdrawLegendSymbol: areaProto.drawLegendSymbol\n\t});\nseriesTypes.areaspline = AreaSplineSeries;\n\n/**\n * Set the default options for column\n */\ndefaultPlotOptions.column = merge(defaultSeriesOptions, {\n\tborderColor: '#FFFFFF',\n\tborderWidth: 1,\n\tborderRadius: 0,\n\t//colorByPoint: undefined,\n\tgroupPadding: 0.2,\n\t//grouping: true,\n\tmarker: null, // point options are specified in the base options\n\tpointPadding: 0.1,\n\t//pointWidth: null,\n\tminPointLength: 0,\n\tcropThreshold: 50, // when there are more points, they will not animate out of the chart on xAxis.setExtremes\n\tpointRange: null, // null means auto, meaning 1 in a categorized axis and least distance between points if not categories\n\tstates: {\n\t\thover: {\n\t\t\tbrightness: 0.1,\n\t\t\tshadow: false\n\t\t},\n\t\tselect: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tborderColor: '#000000',\n\t\t\tshadow: false\n\t\t}\n\t},\n\tdataLabels: {\n\t\talign: null, // auto\n\t\tverticalAlign: null, // auto\n\t\ty: null\n\t},\n\tstickyTracking: false,\n\tthreshold: 0\n});\n\n/**\n * ColumnSeries object\n */\nvar ColumnSeries = extendClass(Series, {\n\ttype: 'column',\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tstroke: 'borderColor',\n\t\t'stroke-width': 'borderWidth',\n\t\tfill: 'color',\n\t\tr: 'borderRadius'\n\t},\n\tcropShoulder: 0,\n\ttrackerGroups: ['group', 'dataLabelsGroup'],\n\tnegStacks: true, // use separate negative stacks, unlike area stacks where a negative \n\t\t// point is substracted from previous (#1910)\n\t\n\t/**\n\t * Initialize the series\n\t */\n\tinit: function () {\n\t\tSeries.prototype.init.apply(this, arguments);\n\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\n\t\t// if the series is added dynamically, force redraw of other\n\t\t// series affected by a new column\n\t\tif (chart.hasRendered) {\n\t\t\teach(chart.series, function (otherSeries) {\n\t\t\t\tif (otherSeries.type === series.type) {\n\t\t\t\t\totherSeries.isDirty = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Return the width and x offset of the columns adjusted for grouping, groupPadding, pointPadding,\n\t * pointWidth etc. \n\t */\n\tgetColumnMetrics: function () {\n\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\txAxis = series.xAxis,\n\t\t\tyAxis = series.yAxis,\n\t\t\treversedXAxis = xAxis.reversed,\n\t\t\tstackKey,\n\t\t\tstackGroups = {},\n\t\t\tcolumnIndex,\n\t\t\tcolumnCount = 0;\n\n\t\t// Get the total number of column type series.\n\t\t// This is called on every series. Consider moving this logic to a\n\t\t// chart.orderStacks() function and call it on init, addSeries and removeSeries\n\t\tif (options.grouping === false) {\n\t\t\tcolumnCount = 1;\n\t\t} else {\n\t\t\teach(series.chart.series, function (otherSeries) {\n\t\t\t\tvar otherOptions = otherSeries.options,\n\t\t\t\t\totherYAxis = otherSeries.yAxis;\n\t\t\t\tif (otherSeries.type === series.type && otherSeries.visible &&\n\t\t\t\t\t\tyAxis.len === otherYAxis.len && yAxis.pos === otherYAxis.pos) {  // #642, #2086\n\t\t\t\t\tif (otherOptions.stacking) {\n\t\t\t\t\t\tstackKey = otherSeries.stackKey;\n\t\t\t\t\t\tif (stackGroups[stackKey] === UNDEFINED) {\n\t\t\t\t\t\t\tstackGroups[stackKey] = columnCount++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolumnIndex = stackGroups[stackKey];\n\t\t\t\t\t} else if (otherOptions.grouping !== false) { // #1162\n\t\t\t\t\t\tcolumnIndex = columnCount++;\n\t\t\t\t\t}\n\t\t\t\t\totherSeries.columnIndex = columnIndex;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar categoryWidth = mathMin(\n\t\t\t\tmathAbs(xAxis.transA) * (xAxis.ordinalSlope || options.pointRange || xAxis.closestPointRange || 1), \n\t\t\t\txAxis.len // #1535\n\t\t\t),\n\t\t\tgroupPadding = categoryWidth * options.groupPadding,\n\t\t\tgroupWidth = categoryWidth - 2 * groupPadding,\n\t\t\tpointOffsetWidth = groupWidth / columnCount,\n\t\t\toptionPointWidth = options.pointWidth,\n\t\t\tpointPadding = defined(optionPointWidth) ? (pointOffsetWidth - optionPointWidth) / 2 :\n\t\t\t\tpointOffsetWidth * options.pointPadding,\n\t\t\tpointWidth = pick(optionPointWidth, pointOffsetWidth - 2 * pointPadding), // exact point width, used in polar charts\n\t\t\tcolIndex = (reversedXAxis ? \n\t\t\t\tcolumnCount - (series.columnIndex || 0) : // #1251\n\t\t\t\tseries.columnIndex) || 0,\n\t\t\tpointXOffset = pointPadding + (groupPadding + colIndex *\n\t\t\t\tpointOffsetWidth - (categoryWidth / 2)) *\n\t\t\t\t(reversedXAxis ? -1 : 1);\n\n\t\t// Save it for reading in linked series (Error bars particularly)\n\t\treturn (series.columnMetrics = { \n\t\t\twidth: pointWidth, \n\t\t\toffset: pointXOffset \n\t\t});\n\t\t\t\n\t},\n\n\t/**\n\t * Translate each point to the plot area coordinate system and find shape positions\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\toptions = series.options,\n\t\t\tborderWidth = options.borderWidth,\n\t\t\tyAxis = series.yAxis,\n\t\t\tthreshold = options.threshold,\n\t\t\ttranslatedThreshold = series.translatedThreshold = yAxis.getThreshold(threshold),\n\t\t\tminPointLength = pick(options.minPointLength, 5),\n\t\t\tmetrics = series.getColumnMetrics(),\n\t\t\tpointWidth = metrics.width,\n\t\t\tseriesBarW = series.barW = mathCeil(mathMax(pointWidth, 1 + 2 * borderWidth)), // rounded and postprocessed for border width\n\t\t\tpointXOffset = series.pointXOffset = metrics.offset,\n\t\t\txCrisp = -(borderWidth % 2 ? 0.5 : 0),\n\t\t\tyCrisp = borderWidth % 2 ? 0.5 : 1;\n\n\t\tif (chart.renderer.isVML && chart.inverted) {\n\t\t\tyCrisp += 1;\n\t\t}\n\n\t\tSeries.prototype.translate.apply(series);\n\n\t\t// record the new values\n\t\teach(series.points, function (point) {\n\t\t\tvar yBottom = pick(point.yBottom, translatedThreshold),\n\t\t\t\tplotY = mathMin(mathMax(-999 - yBottom, point.plotY), yAxis.len + 999 + yBottom), // Don't draw too far outside plot area (#1303, #2241)\n\t\t\t\tbarX = point.plotX + pointXOffset,\n\t\t\t\tbarW = seriesBarW,\n\t\t\t\tbarY = mathMin(plotY, yBottom),\n\t\t\t\tright,\n\t\t\t\tbottom,\n\t\t\t\tfromTop,\n\t\t\t\tfromLeft,\n\t\t\t\tbarH = mathMax(plotY, yBottom) - barY;\n\n\t\t\t// Handle options.minPointLength\n\t\t\tif (mathAbs(barH) < minPointLength) {\n\t\t\t\tif (minPointLength) {\n\t\t\t\t\tbarH = minPointLength;\n\t\t\t\t\tbarY =\n\t\t\t\t\t\tmathRound(mathAbs(barY - translatedThreshold) > minPointLength ? // stacked\n\t\t\t\t\t\t\tyBottom - minPointLength : // keep position\n\t\t\t\t\t\t\ttranslatedThreshold - (yAxis.translate(point.y, 0, 1, 0, 1) <= translatedThreshold ? minPointLength : 0)); // use exact yAxis.translation (#1485)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Cache for access in polar\n\t\t\tpoint.barX = barX;\n\t\t\tpoint.pointWidth = pointWidth;\n\n\n\t\t\t// Round off to obtain crisp edges\n\t\t\tfromLeft = mathAbs(barX) < 0.5;\n\t\t\tright = mathRound(barX + barW) + xCrisp;\n\t\t\tbarX = mathRound(barX) + xCrisp;\n\t\t\tbarW = right - barX;\n\n\t\t\tfromTop = mathAbs(barY) < 0.5;\n\t\t\tbottom = mathRound(barY + barH) + yCrisp;\n\t\t\tbarY = mathRound(barY) + yCrisp;\n\t\t\tbarH = bottom - barY;\n\n\t\t\t// Top and left edges are exceptions\n\t\t\tif (fromLeft) {\n\t\t\t\tbarX += 1;\n\t\t\t\tbarW -= 1;\n\t\t\t}\n\t\t\tif (fromTop) {\n\t\t\t\tbarY -= 1;\n\t\t\t\tbarH += 1;\n\t\t\t}\n\n\t\t\t// Register shape type and arguments to be used in drawPoints\n\t\t\tpoint.shapeType = 'rect';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\tx: barX,\n\t\t\t\ty: barY,\n\t\t\t\twidth: barW,\n\t\t\t\theight: barH\n\t\t\t};\n\t\t});\n\n\t},\n\n\tgetSymbol: noop,\n\t\n\t/**\n\t * Use a solid rectangle like the area series types\n\t */\n\tdrawLegendSymbol: AreaSeries.prototype.drawLegendSymbol,\n\t\n\t\n\t/**\n\t * Columns have no graph\n\t */\n\tdrawGraph: noop,\n\n\t/**\n\t * Draw the columns. For bars, the series.group is rotated, so the same coordinates\n\t * apply for columns and bars. This method is inherited by scatter series.\n\t *\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\trenderer = series.chart.renderer,\n\t\t\tshapeArgs;\n\n\n\t\t// draw the columns\n\t\teach(series.points, function (point) {\n\t\t\tvar plotY = point.plotY,\n\t\t\t\tgraphic = point.graphic;\n\n\t\t\tif (plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) {\n\t\t\t\tshapeArgs = point.shapeArgs;\n\t\t\t\t\n\t\t\t\tif (graphic) { // update\n\t\t\t\t\tstop(graphic);\n\t\t\t\t\tgraphic.animate(merge(shapeArgs));\n\n\t\t\t\t} else {\n\t\t\t\t\tpoint.graphic = graphic = renderer[point.shapeType](shapeArgs)\n\t\t\t\t\t\t.attr(point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE])\n\t\t\t\t\t\t.add(series.group)\n\t\t\t\t\t\t.shadow(options.shadow, null, options.stacking && !options.borderRadius);\n\t\t\t\t}\n\n\t\t\t} else if (graphic) {\n\t\t\t\tpoint.graphic = graphic.destroy(); // #1269\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Add tracking event listener to the series group, so the point graphics\n\t * themselves act as trackers\n\t */\n\tdrawTracker: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tpointer = chart.pointer,\n\t\t\tcursor = series.options.cursor,\n\t\t\tcss = cursor && { cursor: cursor },\n\t\t\tonMouseOver = function (e) {\n\t\t\t\tvar target = e.target,\n\t\t\t\t\tpoint;\n\n\t\t\t\tif (chart.hoverSeries !== series) {\n\t\t\t\t\tseries.onMouseOver();\n\t\t\t\t}\n\t\t\t\twhile (target && !point) {\n\t\t\t\t\tpoint = target.point;\n\t\t\t\t\ttarget = target.parentNode;\n\t\t\t\t}\n\t\t\t\tif (point !== UNDEFINED && point !== chart.hoverPoint) { // undefined on graph in scatterchart\n\t\t\t\t\tpoint.onMouseOver(e);\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Add reference to the point\n\t\teach(series.points, function (point) {\n\t\t\tif (point.graphic) {\n\t\t\t\tpoint.graphic.element.point = point;\n\t\t\t}\n\t\t\tif (point.dataLabel) {\n\t\t\t\tpoint.dataLabel.element.point = point;\n\t\t\t}\n\t\t});\n\n\t\t// Add the event listeners, we need to do this only once\n\t\tif (!series._hasTracking) {\n\t\t\teach(series.trackerGroups, function (key) {\n\t\t\t\tif (series[key]) { // we don't always have dataLabelsGroup\n\t\t\t\t\tseries[key]\n\t\t\t\t\t\t.addClass(PREFIX + 'tracker')\n\t\t\t\t\t\t.on('mouseover', onMouseOver)\n\t\t\t\t\t\t.on('mouseout', function (e) { pointer.onTrackerMouseOut(e); })\n\t\t\t\t\t\t.css(css);\n\t\t\t\t\tif (hasTouch) {\n\t\t\t\t\t\tseries[key].on('touchstart', onMouseOver);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tseries._hasTracking = true;\n\t\t}\n\t},\n\t\n\t/** \n\t * Override the basic data label alignment by adjusting for the position of the column\n\t */\n\talignDataLabel: function (point, dataLabel, options,  alignTo, isNew) {\n\t\tvar chart = this.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tdlBox = point.dlBox || point.shapeArgs, // data label box for alignment\n\t\t\tbelow = point.below || (point.plotY > pick(this.translatedThreshold, chart.plotSizeY)),\n\t\t\tinside = pick(options.inside, !!this.options.stacking); // draw it inside the box?\n\t\t\n\t\t// Align to the column itself, or the top of it\n\t\tif (dlBox) { // Area range uses this method but not alignTo\n\t\t\talignTo = merge(dlBox);\n\t\t\tif (inverted) {\n\t\t\t\talignTo = {\n\t\t\t\t\tx: chart.plotWidth - alignTo.y - alignTo.height,\n\t\t\t\t\ty: chart.plotHeight - alignTo.x - alignTo.width,\n\t\t\t\t\twidth: alignTo.height,\n\t\t\t\t\theight: alignTo.width\n\t\t\t\t};\n\t\t\t}\n\t\t\t\t\n\t\t\t// Compute the alignment box\n\t\t\tif (!inside) {\n\t\t\t\tif (inverted) {\n\t\t\t\t\talignTo.x += below ? 0 : alignTo.width;\n\t\t\t\t\talignTo.width = 0;\n\t\t\t\t} else {\n\t\t\t\t\talignTo.y += below ? alignTo.height : 0;\n\t\t\t\t\talignTo.height = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// When alignment is undefined (typically columns and bars), display the individual \n\t\t// point below or above the point depending on the threshold\n\t\toptions.align = pick(\n\t\t\toptions.align, \n\t\t\t!inverted || inside ? 'center' : below ? 'right' : 'left'\n\t\t);\n\t\toptions.verticalAlign = pick(\n\t\t\toptions.verticalAlign, \n\t\t\tinverted || inside ? 'middle' : below ? 'top' : 'bottom'\n\t\t);\n\t\t\n\t\t// Call the parent method\n\t\tSeries.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n\t},\n\n\n\t/**\n\t * Animate the column heights one by one from zero\n\t * @param {Boolean} init Whether to initialize the animation or run it\n\t */\n\tanimate: function (init) {\n\t\tvar series = this,\n\t\t\tyAxis = this.yAxis,\n\t\t\toptions = series.options,\n\t\t\tinverted = this.chart.inverted,\n\t\t\tattr = {},\n\t\t\ttranslatedThreshold;\n\n\t\tif (hasSVG) { // VML is too slow anyway\n\t\t\tif (init) {\n\t\t\t\tattr.scaleY = 0.001;\n\t\t\t\ttranslatedThreshold = mathMin(yAxis.pos + yAxis.len, mathMax(yAxis.pos, yAxis.toPixels(options.threshold)));\n\t\t\t\tif (inverted) {\n\t\t\t\t\tattr.translateX = translatedThreshold - yAxis.len;\n\t\t\t\t} else {\n\t\t\t\t\tattr.translateY = translatedThreshold;\n\t\t\t\t}\n\t\t\t\tseries.group.attr(attr);\n\n\t\t\t} else { // run the animation\n\t\t\t\t\n\t\t\t\tattr.scaleY = 1;\n\t\t\t\tattr[inverted ? 'translateX' : 'translateY'] = yAxis.pos;\n\t\t\t\tseries.group.animate(attr, series.options.animation);\n\n\t\t\t\t// delete this function to allow it only once\n\t\t\t\tseries.animate = null;\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Remove this series from the chart\n\t */\n\tremove: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\n\t\t// column and bar series affects other series of the same type\n\t\t// as they are either stacked or grouped\n\t\tif (chart.hasRendered) {\n\t\t\teach(chart.series, function (otherSeries) {\n\t\t\t\tif (otherSeries.type === series.type) {\n\t\t\t\t\totherSeries.isDirty = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tSeries.prototype.remove.apply(series, arguments);\n\t}\n});\nseriesTypes.column = ColumnSeries;\n/**\n * Set the default options for bar\n */\ndefaultPlotOptions.bar = merge(defaultPlotOptions.column);\n/**\n * The Bar series class\n */\nvar BarSeries = extendClass(ColumnSeries, {\n\ttype: 'bar',\n\tinverted: true\n});\nseriesTypes.bar = BarSeries;\n\n/**\n * Set the default options for scatter\n */\ndefaultPlotOptions.scatter = merge(defaultSeriesOptions, {\n\tlineWidth: 0,\n\ttooltip: {\n\t\theaderFormat: '<span style=\"font-size: 10px; color:{series.color}\">{series.name}</span><br/>',\n\t\tpointFormat: 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>',\n\t\tfollowPointer: true\n\t},\n\tstickyTracking: false\n});\n\n/**\n * The scatter series class\n */\nvar ScatterSeries = extendClass(Series, {\n\ttype: 'scatter',\n\tsorted: false,\n\trequireSorting: false,\n\tnoSharedTooltip: true,\n\ttrackerGroups: ['markerGroup'],\n\n\tdrawTracker: ColumnSeries.prototype.drawTracker,\n\t\n\tsetTooltipPoints: noop\n});\nseriesTypes.scatter = ScatterSeries;\n\n/**\n * Set the default options for pie\n */\ndefaultPlotOptions.pie = merge(defaultSeriesOptions, {\n\tborderColor: '#FFFFFF',\n\tborderWidth: 1,\n\tcenter: [null, null],\n\tclip: false,\n\tcolorByPoint: true, // always true for pies\n\tdataLabels: {\n\t\t// align: null,\n\t\t// connectorWidth: 1,\n\t\t// connectorColor: point.color,\n\t\t// connectorPadding: 5,\n\t\tdistance: 30,\n\t\tenabled: true,\n\t\tformatter: function () {\n\t\t\treturn this.point.name;\n\t\t}\n\t\t// softConnector: true,\n\t\t//y: 0\n\t},\n\tignoreHiddenPoint: true,\n\t//innerSize: 0,\n\tlegendType: 'point',\n\tmarker: null, // point options are specified in the base options\n\tsize: null,\n\tshowInLegend: false,\n\tslicedOffset: 10,\n\tstates: {\n\t\thover: {\n\t\t\tbrightness: 0.1,\n\t\t\tshadow: false\n\t\t}\n\t},\n\tstickyTracking: false,\n\ttooltip: {\n\t\tfollowPointer: true\n\t}\n});\n\n/**\n * Extended point object for pies\n */\nvar PiePoint = extendClass(Point, {\n\t/**\n\t * Initiate the pie slice\n\t */\n\tinit: function () {\n\n\t\tPoint.prototype.init.apply(this, arguments);\n\n\t\tvar point = this,\n\t\t\ttoggleSlice;\n\n\t\t// Disallow negative values (#1530)\n\t\tif (point.y < 0) {\n\t\t\tpoint.y = null;\n\t\t}\n\n\t\t//visible: options.visible !== false,\n\t\textend(point, {\n\t\t\tvisible: point.visible !== false,\n\t\t\tname: pick(point.name, 'Slice')\n\t\t});\n\n\t\t// add event listener for select\n\t\ttoggleSlice = function (e) {\n\t\t\tpoint.slice(e.type === 'select');\n\t\t};\n\t\taddEvent(point, 'select', toggleSlice);\n\t\taddEvent(point, 'unselect', toggleSlice);\n\n\t\treturn point;\n\t},\n\n\t/**\n\t * Toggle the visibility of the pie slice\n\t * @param {Boolean} vis Whether to show the slice or not. If undefined, the\n\t *    visibility is toggled\n\t */\n\tsetVisible: function (vis) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\tmethod;\n\n\t\t// if called without an argument, toggle visibility\n\t\tpoint.visible = point.options.visible = vis = vis === UNDEFINED ? !point.visible : vis;\n\t\tseries.options.data[inArray(point, series.data)] = point.options; // update userOptions.data\n\t\t\n\t\tmethod = vis ? 'show' : 'hide';\n\n\t\t// Show and hide associated elements\n\t\teach(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function (key) {\n\t\t\tif (point[key]) {\n\t\t\t\tpoint[key][method]();\n\t\t\t}\n\t\t});\n\n\t\tif (point.legendItem) {\n\t\t\tchart.legend.colorizeItem(point, vis);\n\t\t}\n\t\t\n\t\t// Handle ignore hidden slices\n\t\tif (!series.isDirty && series.options.ignoreHiddenPoint) {\n\t\t\tseries.isDirty = true;\n\t\t\tchart.redraw();\n\t\t}\n\t},\n\n\t/**\n\t * Set or toggle whether the slice is cut out from the pie\n\t * @param {Boolean} sliced When undefined, the slice state is toggled\n\t * @param {Boolean} redraw Whether to redraw the chart. True by default.\n\t */\n\tslice: function (sliced, redraw, animation) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\ttranslation;\n\n\t\tsetAnimation(animation, chart);\n\n\t\t// redraw is true by default\n\t\tredraw = pick(redraw, true);\n\n\t\t// if called without an argument, toggle\n\t\tpoint.sliced = point.options.sliced = sliced = defined(sliced) ? sliced : !point.sliced;\n\t\tseries.options.data[inArray(point, series.data)] = point.options; // update userOptions.data\n\n\t\ttranslation = sliced ? point.slicedTranslation : {\n\t\t\ttranslateX: 0,\n\t\t\ttranslateY: 0\n\t\t};\n\n\t\tpoint.graphic.animate(translation);\n\t\t\n\t\tif (point.shadowGroup) {\n\t\t\tpoint.shadowGroup.animate(translation);\n\t\t}\n\n\t}\n});\n\n/**\n * The Pie series class\n */\nvar PieSeries = {\n\ttype: 'pie',\n\tisCartesian: false,\n\tpointClass: PiePoint,\n\trequireSorting: false,\n\tnoSharedTooltip: true,\n\ttrackerGroups: ['group', 'dataLabelsGroup'],\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tstroke: 'borderColor',\n\t\t'stroke-width': 'borderWidth',\n\t\tfill: 'color'\n\t},\n\n\t/**\n\t * Pies have one color each point\n\t */\n\tgetColor: noop,\n\n\t/**\n\t * Animate the pies in\n\t */\n\tanimate: function (init) {\n\t\tvar series = this,\n\t\t\tpoints = series.points,\n\t\t\tstartAngleRad = series.startAngleRad;\n\n\t\tif (!init) {\n\t\t\teach(points, function (point) {\n\t\t\t\tvar graphic = point.graphic,\n\t\t\t\t\targs = point.shapeArgs;\n\n\t\t\t\tif (graphic) {\n\t\t\t\t\t// start values\n\t\t\t\t\tgraphic.attr({\n\t\t\t\t\t\tr: series.center[3] / 2, // animate from inner radius (#779)\n\t\t\t\t\t\tstart: startAngleRad,\n\t\t\t\t\t\tend: startAngleRad\n\t\t\t\t\t});\n\n\t\t\t\t\t// animate\n\t\t\t\t\tgraphic.animate({\n\t\t\t\t\t\tr: args.r,\n\t\t\t\t\t\tstart: args.start,\n\t\t\t\t\t\tend: args.end\n\t\t\t\t\t}, series.options.animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// delete this function to allow it only once\n\t\t\tseries.animate = null;\n\t\t}\n\t},\n\n\t/**\n\t * Extend the basic setData method by running processData and generatePoints immediately,\n\t * in order to access the points from the legend.\n\t */\n\tsetData: function (data, redraw) {\n\t\tSeries.prototype.setData.call(this, data, false);\n\t\tthis.processData();\n\t\tthis.generatePoints();\n\t\tif (pick(redraw, true)) {\n\t\t\tthis.chart.redraw();\n\t\t} \n\t},\n\n\t/**\n\t * Extend the generatePoints method by adding total and percentage properties to each point\n\t */\n\tgeneratePoints: function () {\n\t\tvar i,\n\t\t\ttotal = 0,\n\t\t\tpoints,\n\t\t\tlen,\n\t\t\tpoint,\n\t\t\tignoreHiddenPoint = this.options.ignoreHiddenPoint;\n\n\t\tSeries.prototype.generatePoints.call(this);\n\n\t\t// Populate local vars\n\t\tpoints = this.points;\n\t\tlen = points.length;\n\t\t\n\t\t// Get the total sum\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tpoint = points[i];\n\t\t\ttotal += (ignoreHiddenPoint && !point.visible) ? 0 : point.y;\n\t\t}\n\t\tthis.total = total;\n\n\t\t// Set each point's properties\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tpoint = points[i];\n\t\t\tpoint.percentage = total > 0 ? (point.y / total) * 100 : 0;\n\t\t\tpoint.total = total;\n\t\t}\n\t\t\n\t},\n\t\n\t/**\n\t * Get the center of the pie based on the size and center options relative to the  \n\t * plot area. Borrowed by the polar and gauge series types.\n\t */\n\tgetCenter: function () {\n\t\t\n\t\tvar options = this.options,\n\t\t\tchart = this.chart,\n\t\t\tslicingRoom = 2 * (options.slicedOffset || 0),\n\t\t\thandleSlicingRoom,\n\t\t\tplotWidth = chart.plotWidth - 2 * slicingRoom,\n\t\t\tplotHeight = chart.plotHeight - 2 * slicingRoom,\n\t\t\tcenterOption = options.center,\n\t\t\tpositions = [pick(centerOption[0], '50%'), pick(centerOption[1], '50%'), options.size || '100%', options.innerSize || 0],\n\t\t\tsmallestSize = mathMin(plotWidth, plotHeight),\n\t\t\tisPercent;\n\t\t\n\t\treturn map(positions, function (length, i) {\n\t\t\tisPercent = /%$/.test(length);\n\t\t\thandleSlicingRoom = i < 2 || (i === 2 && isPercent);\n\t\t\treturn (isPercent ?\n\t\t\t\t// i == 0: centerX, relative to width\n\t\t\t\t// i == 1: centerY, relative to height\n\t\t\t\t// i == 2: size, relative to smallestSize\n\t\t\t\t// i == 4: innerSize, relative to smallestSize\n\t\t\t\t[plotWidth, plotHeight, smallestSize, smallestSize][i] *\n\t\t\t\t\tpInt(length) / 100 :\n\t\t\t\tlength) + (handleSlicingRoom ? slicingRoom : 0);\n\t\t});\n\t},\n\t\n\t/**\n\t * Do translation for pie slices\n\t */\n\ttranslate: function (positions) {\n\t\tthis.generatePoints();\n\t\t\n\t\tvar series = this,\n\t\t\tcumulative = 0,\n\t\t\tprecision = 1000, // issue #172\n\t\t\toptions = series.options,\n\t\t\tslicedOffset = options.slicedOffset,\n\t\t\tconnectorOffset = slicedOffset + options.borderWidth,\n\t\t\tstart,\n\t\t\tend,\n\t\t\tangle,\n\t\t\tstartAngle = options.startAngle || 0,\n\t\t\tstartAngleRad = series.startAngleRad = mathPI / 180 * (startAngle - 90),\n\t\t\tendAngleRad = series.endAngleRad = mathPI / 180 * ((options.endAngle || (startAngle + 360)) - 90), // docs\n\t\t\tcirc = endAngleRad - startAngleRad, //2 * mathPI,\n\t\t\tpoints = series.points,\n\t\t\tradiusX, // the x component of the radius vector for a given point\n\t\t\tradiusY,\n\t\t\tlabelDistance = options.dataLabels.distance,\n\t\t\tignoreHiddenPoint = options.ignoreHiddenPoint,\n\t\t\ti,\n\t\t\tlen = points.length,\n\t\t\tpoint;\n\n\t\t// Get positions - either an integer or a percentage string must be given.\n\t\t// If positions are passed as a parameter, we're in a recursive loop for adjusting\n\t\t// space for data labels.\n\t\tif (!positions) {\n\t\t\tseries.center = positions = series.getCenter();\n\t\t}\n\n\t\t// utility for getting the x value from a given y, used for anticollision logic in data labels\n\t\tseries.getX = function (y, left) {\n\n\t\t\tangle = math.asin((y - positions[1]) / (positions[2] / 2 + labelDistance));\n\n\t\t\treturn positions[0] +\n\t\t\t\t(left ? -1 : 1) *\n\t\t\t\t(mathCos(angle) * (positions[2] / 2 + labelDistance));\n\t\t};\n\n\t\t// Calculate the geometry for each point\n\t\tfor (i = 0; i < len; i++) {\n\t\t\t\n\t\t\tpoint = points[i];\n\t\t\t\n\t\t\t// set start and end angle\n\t\t\tstart = startAngleRad + (cumulative * circ);\n\t\t\tif (!ignoreHiddenPoint || point.visible) {\n\t\t\t\tcumulative += point.percentage / 100;\n\t\t\t}\n\t\t\tend = startAngleRad + (cumulative * circ);\n\n\t\t\t// set the shape\n\t\t\tpoint.shapeType = 'arc';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\tx: positions[0],\n\t\t\t\ty: positions[1],\n\t\t\t\tr: positions[2] / 2,\n\t\t\t\tinnerR: positions[3] / 2,\n\t\t\t\tstart: mathRound(start * precision) / precision,\n\t\t\t\tend: mathRound(end * precision) / precision\n\t\t\t};\n\n\t\t\t// center for the sliced out slice\n\t\t\tangle = (end + start) / 2;\n\t\t\tif (angle > 0.75 * circ) {\n\t\t\t\tangle -= 2 * mathPI;\n\t\t\t}\n\t\t\tpoint.slicedTranslation = {\n\t\t\t\ttranslateX: mathRound(mathCos(angle) * slicedOffset),\n\t\t\t\ttranslateY: mathRound(mathSin(angle) * slicedOffset)\n\t\t\t};\n\n\t\t\t// set the anchor point for tooltips\n\t\t\tradiusX = mathCos(angle) * positions[2] / 2;\n\t\t\tradiusY = mathSin(angle) * positions[2] / 2;\n\t\t\tpoint.tooltipPos = [\n\t\t\t\tpositions[0] + radiusX * 0.7,\n\t\t\t\tpositions[1] + radiusY * 0.7\n\t\t\t];\n\t\t\t\n\t\t\tpoint.half = angle < -mathPI / 2 || angle > mathPI / 2 ? 1 : 0;\n\t\t\tpoint.angle = angle;\n\n\t\t\t// set the anchor point for data labels\n\t\t\tconnectorOffset = mathMin(connectorOffset, labelDistance / 2); // #1678\n\t\t\tpoint.labelPos = [\n\t\t\t\tpositions[0] + radiusX + mathCos(angle) * labelDistance, // first break of connector\n\t\t\t\tpositions[1] + radiusY + mathSin(angle) * labelDistance, // a/a\n\t\t\t\tpositions[0] + radiusX + mathCos(angle) * connectorOffset, // second break, right outside pie\n\t\t\t\tpositions[1] + radiusY + mathSin(angle) * connectorOffset, // a/a\n\t\t\t\tpositions[0] + radiusX, // landing point for connector\n\t\t\t\tpositions[1] + radiusY, // a/a\n\t\t\t\tlabelDistance < 0 ? // alignment\n\t\t\t\t\t'center' :\n\t\t\t\t\tpoint.half ? 'right' : 'left', // alignment\n\t\t\t\tangle // center angle\n\t\t\t];\n\n\t\t}\n\t},\n\n\tsetTooltipPoints: noop,\n\tdrawGraph: null,\n\n\t/**\n\t * Draw the data points\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tgroupTranslation,\n\t\t\t//center,\n\t\t\tgraphic,\n\t\t\t//group,\n\t\t\tshadow = series.options.shadow,\n\t\t\tshadowGroup,\n\t\t\tshapeArgs;\n\n\t\tif (shadow && !series.shadowGroup) {\n\t\t\tseries.shadowGroup = renderer.g('shadow')\n\t\t\t\t.add(series.group);\n\t\t}\n\n\t\t// draw the slices\n\t\teach(series.points, function (point) {\n\t\t\tgraphic = point.graphic;\n\t\t\tshapeArgs = point.shapeArgs;\n\t\t\tshadowGroup = point.shadowGroup;\n\n\t\t\t// put the shadow behind all points\n\t\t\tif (shadow && !shadowGroup) {\n\t\t\t\tshadowGroup = point.shadowGroup = renderer.g('shadow')\n\t\t\t\t\t.add(series.shadowGroup);\n\t\t\t}\n\n\t\t\t// if the point is sliced, use special translation, else use plot area traslation\n\t\t\tgroupTranslation = point.sliced ? point.slicedTranslation : {\n\t\t\t\ttranslateX: 0,\n\t\t\t\ttranslateY: 0\n\t\t\t};\n\n\t\t\t//group.translate(groupTranslation[0], groupTranslation[1]);\n\t\t\tif (shadowGroup) {\n\t\t\t\tshadowGroup.attr(groupTranslation);\n\t\t\t}\n\n\t\t\t// draw the slice\n\t\t\tif (graphic) {\n\t\t\t\tgraphic.animate(extend(shapeArgs, groupTranslation));\n\t\t\t} else {\n\t\t\t\tpoint.graphic = graphic = renderer.arc(shapeArgs)\n\t\t\t\t\t.setRadialReference(series.center)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\tpoint.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE]\n\t\t\t\t\t)\n\t\t\t\t\t.attr({ 'stroke-linejoin': 'round' })\n\t\t\t\t\t.attr(groupTranslation)\n\t\t\t\t\t.add(series.group)\n\t\t\t\t\t.shadow(shadow, shadowGroup);\t\n\t\t\t}\n\n\t\t\t// detect point specific visibility\n\t\t\tif (point.visible === false) {\n\t\t\t\tpoint.setVisible(false);\n\t\t\t}\n\n\t\t});\n\n\t},\n\n\t/**\n\t * Utility for sorting data labels\n\t */\n\tsortByAngle: function (points, sign) {\n\t\tpoints.sort(function (a, b) {\n\t\t\treturn a.angle !== undefined && (b.angle - a.angle) * sign;\n\t\t});\n\t},\n\n\t/**\n\t * Override the base drawDataLabels method by pie specific functionality\n\t */\n\tdrawDataLabels: function () {\n\t\tvar series = this,\n\t\t\tdata = series.data,\n\t\t\tpoint,\n\t\t\tchart = series.chart,\n\t\t\toptions = series.options.dataLabels,\n\t\t\tconnectorPadding = pick(options.connectorPadding, 10),\n\t\t\tconnectorWidth = pick(options.connectorWidth, 1),\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tconnector,\n\t\t\tconnectorPath,\n\t\t\tsoftConnector = pick(options.softConnector, true),\n\t\t\tdistanceOption = options.distance,\n\t\t\tseriesCenter = series.center,\n\t\t\tradius = seriesCenter[2] / 2,\n\t\t\tcenterY = seriesCenter[1],\n\t\t\toutside = distanceOption > 0,\n\t\t\tdataLabel,\n\t\t\tdataLabelWidth,\n\t\t\tlabelPos,\n\t\t\tlabelHeight,\n\t\t\thalves = [// divide the points into right and left halves for anti collision\n\t\t\t\t[], // right\n\t\t\t\t[]  // left\n\t\t\t],\n\t\t\tx,\n\t\t\ty,\n\t\t\tvisibility,\n\t\t\trankArr,\n\t\t\ti,\n\t\t\tj,\n\t\t\toverflow = [0, 0, 0, 0], // top, right, bottom, left\n\t\t\tsort = function (a, b) {\n\t\t\t\treturn b.y - a.y;\n\t\t\t};\n\n\t\t// get out if not enabled\n\t\tif (!series.visible || (!options.enabled && !series._hasPointLabels)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// run parent method\n\t\tSeries.prototype.drawDataLabels.apply(series);\n\n\t\t// arrange points for detection collision\n\t\teach(data, function (point) {\n\t\t\tif (point.dataLabel) { // it may have been cancelled in the base method (#407)\n\t\t\t\thalves[point.half].push(point);\n\t\t\t}\n\t\t});\n\n\t\t// assume equal label heights\n\t\ti = 0;\n\t\twhile (!labelHeight && data[i]) { // #1569\n\t\t\tlabelHeight = data[i] && data[i].dataLabel && (data[i].dataLabel.getBBox().height || 21); // 21 is for #968\n\t\t\ti++;\n\t\t}\n\n\t\t/* Loop over the points in each half, starting from the top and bottom\n\t\t * of the pie to detect overlapping labels.\n\t\t */\n\t\ti = 2;\n\t\twhile (i--) {\n\n\t\t\tvar slots = [],\n\t\t\t\tslotsLength,\n\t\t\t\tusedSlots = [],\n\t\t\t\tpoints = halves[i],\n\t\t\t\tpos,\n\t\t\t\tlength = points.length,\n\t\t\t\tslotIndex;\n\t\t\t\t\n\t\t\t// Sort by angle\n\t\t\tseries.sortByAngle(points, i - 0.5);\n\n\t\t\t// Only do anti-collision when we are outside the pie and have connectors (#856)\n\t\t\tif (distanceOption > 0) {\n\t\t\t\t\n\t\t\t\t// build the slots\n\t\t\t\tfor (pos = centerY - radius - distanceOption; pos <= centerY + radius + distanceOption; pos += labelHeight) {\n\t\t\t\t\tslots.push(pos);\n\t\t\t\t\t\n\t\t\t\t\t// visualize the slot\n\t\t\t\t\t/*\n\t\t\t\t\tvar slotX = series.getX(pos, i) + chart.plotLeft - (i ? 100 : 0),\n\t\t\t\t\t\tslotY = pos + chart.plotTop;\n\t\t\t\t\tif (!isNaN(slotX)) {\n\t\t\t\t\t\tchart.renderer.rect(slotX, slotY - 7, 100, labelHeight, 1)\n\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\t\t\t\tstroke: 'silver'\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.add();\n\t\t\t\t\t\tchart.renderer.text('Slot '+ (slots.length - 1), slotX, slotY + 4)\n\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\tfill: 'silver'\n\t\t\t\t\t\t\t}).add();\n\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t}\n\t\t\t\tslotsLength = slots.length;\n\t\n\t\t\t\t// if there are more values than available slots, remove lowest values\n\t\t\t\tif (length > slotsLength) {\n\t\t\t\t\t// create an array for sorting and ranking the points within each quarter\n\t\t\t\t\trankArr = [].concat(points);\n\t\t\t\t\trankArr.sort(sort);\n\t\t\t\t\tj = length;\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\trankArr[j].rank = j;\n\t\t\t\t\t}\n\t\t\t\t\tj = length;\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\tif (points[j].rank >= slotsLength) {\n\t\t\t\t\t\t\tpoints.splice(j, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlength = points.length;\n\t\t\t\t}\n\t\n\t\t\t\t// The label goes to the nearest open slot, but not closer to the edge than\n\t\t\t\t// the label's index.\n\t\t\t\tfor (j = 0; j < length; j++) {\n\t\n\t\t\t\t\tpoint = points[j];\n\t\t\t\t\tlabelPos = point.labelPos;\n\t\n\t\t\t\t\tvar closest = 9999,\n\t\t\t\t\t\tdistance,\n\t\t\t\t\t\tslotI;\n\t\n\t\t\t\t\t// find the closest slot index\n\t\t\t\t\tfor (slotI = 0; slotI < slotsLength; slotI++) {\n\t\t\t\t\t\tdistance = mathAbs(slots[slotI] - labelPos[1]);\n\t\t\t\t\t\tif (distance < closest) {\n\t\t\t\t\t\t\tclosest = distance;\n\t\t\t\t\t\t\tslotIndex = slotI;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// if that slot index is closer to the edges of the slots, move it\n\t\t\t\t\t// to the closest appropriate slot\n\t\t\t\t\tif (slotIndex < j && slots[j] !== null) { // cluster at the top\n\t\t\t\t\t\tslotIndex = j;\n\t\t\t\t\t} else if (slotsLength  < length - j + slotIndex && slots[j] !== null) { // cluster at the bottom\n\t\t\t\t\t\tslotIndex = slotsLength - length + j;\n\t\t\t\t\t\twhile (slots[slotIndex] === null) { // make sure it is not taken\n\t\t\t\t\t\t\tslotIndex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Slot is taken, find next free slot below. In the next run, the next slice will find the\n\t\t\t\t\t\t// slot above these, because it is the closest one\n\t\t\t\t\t\twhile (slots[slotIndex] === null) { // make sure it is not taken\n\t\t\t\t\t\t\tslotIndex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tusedSlots.push({ i: slotIndex, y: slots[slotIndex] });\n\t\t\t\t\tslots[slotIndex] = null; // mark as taken\n\t\t\t\t}\n\t\t\t\t// sort them in order to fill in from the top\n\t\t\t\tusedSlots.sort(sort);\n\t\t\t}\n\n\t\t\t// now the used slots are sorted, fill them up sequentially\n\t\t\tfor (j = 0; j < length; j++) {\n\t\t\t\t\n\t\t\t\tvar slot, naturalY;\n\n\t\t\t\tpoint = points[j];\n\t\t\t\tlabelPos = point.labelPos;\n\t\t\t\tdataLabel = point.dataLabel;\n\t\t\t\tvisibility = point.visible === false ? HIDDEN : VISIBLE;\n\t\t\t\tnaturalY = labelPos[1];\n\t\t\t\t\n\t\t\t\tif (distanceOption > 0) {\n\t\t\t\t\tslot = usedSlots.pop();\n\t\t\t\t\tslotIndex = slot.i;\n\n\t\t\t\t\t// if the slot next to currrent slot is free, the y value is allowed\n\t\t\t\t\t// to fall back to the natural position\n\t\t\t\t\ty = slot.y;\n\t\t\t\t\tif ((naturalY > y && slots[slotIndex + 1] !== null) ||\n\t\t\t\t\t\t\t(naturalY < y &&  slots[slotIndex - 1] !== null)) {\n\t\t\t\t\t\ty = naturalY;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\ty = naturalY;\n\t\t\t\t}\n\n\t\t\t\t// get the x - use the natural x position for first and last slot, to prevent the top\n\t\t\t\t// and botton slice connectors from touching each other on either side\n\t\t\t\tx = options.justify ? \n\t\t\t\t\tseriesCenter[0] + (i ? -1 : 1) * (radius + distanceOption) :\n\t\t\t\t\tseries.getX(slotIndex === 0 || slotIndex === slots.length - 1 ? naturalY : y, i);\n\t\t\t\t\n\t\t\t\n\t\t\t\t// Record the placement and visibility\n\t\t\t\tdataLabel._attr = {\n\t\t\t\t\tvisibility: visibility,\n\t\t\t\t\talign: labelPos[6]\n\t\t\t\t};\n\t\t\t\tdataLabel._pos = {\n\t\t\t\t\tx: x + options.x +\n\t\t\t\t\t\t({ left: connectorPadding, right: -connectorPadding }[labelPos[6]] || 0),\n\t\t\t\t\ty: y + options.y - 10 // 10 is for the baseline (label vs text)\n\t\t\t\t};\n\t\t\t\tdataLabel.connX = x;\n\t\t\t\tdataLabel.connY = y;\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t// Detect overflowing data labels\n\t\t\t\tif (this.options.size === null) {\n\t\t\t\t\tdataLabelWidth = dataLabel.width;\n\t\t\t\t\t// Overflow left\n\t\t\t\t\tif (x - dataLabelWidth < connectorPadding) {\n\t\t\t\t\t\toverflow[3] = mathMax(mathRound(dataLabelWidth - x + connectorPadding), overflow[3]);\n\t\t\t\t\t\t\n\t\t\t\t\t// Overflow right\n\t\t\t\t\t} else if (x + dataLabelWidth > plotWidth - connectorPadding) {\n\t\t\t\t\t\toverflow[1] = mathMax(mathRound(x + dataLabelWidth - plotWidth + connectorPadding), overflow[1]);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Overflow top\n\t\t\t\t\tif (y - labelHeight / 2 < 0) {\n\t\t\t\t\t\toverflow[0] = mathMax(mathRound(-y + labelHeight / 2), overflow[0]);\n\t\t\t\t\t\t\n\t\t\t\t\t// Overflow left\n\t\t\t\t\t} else if (y + labelHeight / 2 > plotHeight) {\n\t\t\t\t\t\toverflow[2] = mathMax(mathRound(y + labelHeight / 2 - plotHeight), overflow[2]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} // for each point\n\t\t} // for each half\n\t\t\n\t\t// Do not apply the final placement and draw the connectors until we have verified\n\t\t// that labels are not spilling over. \n\t\tif (arrayMax(overflow) === 0 || this.verifyDataLabelOverflow(overflow)) {\n\t\t\t\n\t\t\t// Place the labels in the final position\n\t\t\tthis.placeDataLabels();\n\t\t\t\n\t\t\t// Draw the connectors\n\t\t\tif (outside && connectorWidth) {\n\t\t\t\teach(this.points, function (point) {\n\t\t\t\t\tconnector = point.connector;\n\t\t\t\t\tlabelPos = point.labelPos;\n\t\t\t\t\tdataLabel = point.dataLabel;\n\t\t\t\t\t\n\t\t\t\t\tif (dataLabel && dataLabel._pos) {\n\t\t\t\t\t\tvisibility = dataLabel._attr.visibility;\n\t\t\t\t\t\tx = dataLabel.connX;\n\t\t\t\t\t\ty = dataLabel.connY;\n\t\t\t\t\t\tconnectorPath = softConnector ? [\n\t\t\t\t\t\t\tM,\n\t\t\t\t\t\t\tx + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label\n\t\t\t\t\t\t\t'C',\n\t\t\t\t\t\t\tx, y, // first break, next to the label\n\t\t\t\t\t\t\t2 * labelPos[2] - labelPos[4], 2 * labelPos[3] - labelPos[5],\n\t\t\t\t\t\t\tlabelPos[2], labelPos[3], // second break\n\t\t\t\t\t\t\tL,\n\t\t\t\t\t\t\tlabelPos[4], labelPos[5] // base\n\t\t\t\t\t\t] : [\n\t\t\t\t\t\t\tM,\n\t\t\t\t\t\t\tx + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label\n\t\t\t\t\t\t\tL,\n\t\t\t\t\t\t\tlabelPos[2], labelPos[3], // second break\n\t\t\t\t\t\t\tL,\n\t\t\t\t\t\t\tlabelPos[4], labelPos[5] // base\n\t\t\t\t\t\t];\n\t\t\n\t\t\t\t\t\tif (connector) {\n\t\t\t\t\t\t\tconnector.animate({ d: connectorPath });\n\t\t\t\t\t\t\tconnector.attr('visibility', visibility);\n\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpoint.connector = connector = series.chart.renderer.path(connectorPath).attr({\n\t\t\t\t\t\t\t\t'stroke-width': connectorWidth,\n\t\t\t\t\t\t\t\tstroke: options.connectorColor || point.color || '#606060',\n\t\t\t\t\t\t\t\tvisibility: visibility\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.add(series.group);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (connector) {\n\t\t\t\t\t\tpoint.connector = connector.destroy();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\t\t\t\n\t\t}\n\t},\n\t\n\t/**\n\t * Verify whether the data labels are allowed to draw, or we should run more translation and data\n\t * label positioning to keep them inside the plot area. Returns true when data labels are ready \n\t * to draw.\n\t */\n\tverifyDataLabelOverflow: function (overflow) {\n\t\t\n\t\tvar center = this.center,\n\t\t\toptions = this.options,\n\t\t\tcenterOption = options.center,\n\t\t\tminSize = options.minSize || 80,\n\t\t\tnewSize = minSize,\n\t\t\tret;\n\t\t\t\n\t\t// Handle horizontal size and center\n\t\tif (centerOption[0] !== null) { // Fixed center\n\t\t\tnewSize = mathMax(center[2] - mathMax(overflow[1], overflow[3]), minSize);\n\t\t\t\n\t\t} else { // Auto center\n\t\t\tnewSize = mathMax(\n\t\t\t\tcenter[2] - overflow[1] - overflow[3], // horizontal overflow\t\t\t\t\t\n\t\t\t\tminSize\n\t\t\t);\n\t\t\tcenter[0] += (overflow[3] - overflow[1]) / 2; // horizontal center\n\t\t}\n\t\t\n\t\t// Handle vertical size and center\n\t\tif (centerOption[1] !== null) { // Fixed center\n\t\t\tnewSize = mathMax(mathMin(newSize, center[2] - mathMax(overflow[0], overflow[2])), minSize);\n\t\t\t\n\t\t} else { // Auto center\n\t\t\tnewSize = mathMax(\n\t\t\t\tmathMin(\n\t\t\t\t\tnewSize,\t\t\n\t\t\t\t\tcenter[2] - overflow[0] - overflow[2] // vertical overflow\n\t\t\t\t),\n\t\t\t\tminSize\n\t\t\t);\n\t\t\tcenter[1] += (overflow[0] - overflow[2]) / 2; // vertical center\n\t\t}\n\t\t\n\t\t// If the size must be decreased, we need to run translate and drawDataLabels again\n\t\tif (newSize < center[2]) {\n\t\t\tcenter[2] = newSize;\n\t\t\tthis.translate(center);\n\t\t\teach(this.points, function (point) {\n\t\t\t\tif (point.dataLabel) {\n\t\t\t\t\tpoint.dataLabel._pos = null; // reset\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.drawDataLabels();\n\t\t\t\n\t\t// Else, return true to indicate that the pie and its labels is within the plot area\n\t\t} else {\n\t\t\tret = true;\n\t\t}\n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Perform the final placement of the data labels after we have verified that they\n\t * fall within the plot area.\n\t */\n\tplaceDataLabels: function () {\n\t\teach(this.points, function (point) {\n\t\t\tvar dataLabel = point.dataLabel,\n\t\t\t\t_pos;\n\t\t\t\n\t\t\tif (dataLabel) {\n\t\t\t\t_pos = dataLabel._pos;\n\t\t\t\tif (_pos) {\n\t\t\t\t\tdataLabel.attr(dataLabel._attr);\t\t\t\n\t\t\t\t\tdataLabel[dataLabel.moved ? 'animate' : 'attr'](_pos);\n\t\t\t\t\tdataLabel.moved = true;\n\t\t\t\t} else if (dataLabel) {\n\t\t\t\t\tdataLabel.attr({ y: -999 });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\t\n\talignDataLabel: noop,\n\n\t/**\n\t * Draw point specific tracker objects. Inherit directly from column series.\n\t */\n\tdrawTracker: ColumnSeries.prototype.drawTracker,\n\n\t/**\n\t * Use a simple symbol from column prototype\n\t */\n\tdrawLegendSymbol: AreaSeries.prototype.drawLegendSymbol,\n\n\t/**\n\t * Pies don't have point marker symbols\n\t */\n\tgetSymbol: noop\n\n};\nPieSeries = extendClass(Series, PieSeries);\nseriesTypes.pie = PieSeries;\n\n\n// global variables\nextend(Highcharts, {\n\t\n\t// Constructors\n\tAxis: Axis,\n\tChart: Chart,\n\tColor: Color,\n\tLegend: Legend,\n\tPointer: Pointer,\n\tPoint: Point,\n\tTick: Tick,\n\tTooltip: Tooltip,\n\tRenderer: Renderer,\n\tSeries: Series,\n\tSVGElement: SVGElement,\n\tSVGRenderer: SVGRenderer,\n\t\n\t// Various\n\tarrayMin: arrayMin,\n\tarrayMax: arrayMax,\n\tcharts: charts,\n\tdateFormat: dateFormat,\n\tformat: format,\n\tpathAnim: pathAnim,\n\tgetOptions: getOptions,\n\thasBidiBug: hasBidiBug,\n\tisTouchDevice: isTouchDevice,\n\tnumberFormat: numberFormat,\n\tseriesTypes: seriesTypes,\n\tsetOptions: setOptions,\n\taddEvent: addEvent,\n\tremoveEvent: removeEvent,\n\tcreateElement: createElement,\n\tdiscardElement: discardElement,\n\tcss: css,\n\teach: each,\n\textend: extend,\n\tmap: map,\n\tmerge: merge,\n\tpick: pick,\n\tsplat: splat,\n\textendClass: extendClass,\n\tpInt: pInt,\n\twrap: wrap,\n\tsvg: hasSVG,\n\tcanvas: useCanVG,\n\tvml: !hasSVG && !useCanVG,\n\tproduct: PRODUCT,\n\tversion: VERSION\n});\n}());\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/annotations.js",
    "content": "(function(i,C){function m(a){return typeof a===\"number\"}function n(a){return a!==D&&a!==null}var D,p,r,s=i.Chart,t=i.extend,z=i.each;r=[\"path\",\"rect\",\"circle\"];p={top:0,left:0,center:0.5,middle:0.5,bottom:1,right:1};var u=C.inArray,A=i.merge,B=function(){this.init.apply(this,arguments)};B.prototype={init:function(a,d){var c=d.shape&&d.shape.type;this.chart=a;var b,f;f={xAxis:0,yAxis:0,title:{style:{},text:\"\",x:0,y:0},shape:{params:{stroke:\"#000000\",fill:\"transparent\",strokeWidth:2}}};b={circle:{params:{x:0,\ny:0}}};if(b[c])f.shape=A(f.shape,b[c]);this.options=A({},f,d)},render:function(a){var d=this.chart,c=this.chart.renderer,b=this.group,f=this.title,e=this.shape,h=this.options,i=h.title,l=h.shape;if(!b)b=this.group=c.g();if(!e&&l&&u(l.type,r)!==-1)e=this.shape=c[h.shape.type](l.params),e.add(b);if(!f&&i)f=this.title=c.label(i),f.add(b);b.add(d.annotations.group);this.linkObjects();a!==!1&&this.redraw()},redraw:function(){var a=this.options,d=this.chart,c=this.group,b=this.title,f=this.shape,e=this.linkedObject,\nh=d.xAxis[a.xAxis],v=d.yAxis[a.yAxis],l=a.width,w=a.height,x=p[a.anchorY],y=p[a.anchorX],j,o,g,q;if(e)j=e instanceof i.Point?\"point\":e instanceof i.Series?\"series\":null,j===\"point\"?(a.xValue=e.x,a.yValue=e.y,o=e.series):j===\"series\"&&(o=e),c.visibility!==o.group.visibility&&c.attr({visibility:o.group.visibility});e=n(a.xValue)?h.toPixels(a.xValue+h.minPointOffset)-h.minPixelPadding:a.x;j=n(a.yValue)?v.toPixels(a.yValue):a.y;if(!isNaN(e)&&!isNaN(j)&&m(e)&&m(j)){b&&(b.attr(a.title),b.css(a.title.style));\nif(f){b=t({},a.shape.params);if(a.units===\"values\"){for(g in b)u(g,[\"width\",\"x\"])>-1?b[g]=h.translate(b[g]):u(g,[\"height\",\"y\"])>-1&&(b[g]=v.translate(b[g]));b.width&&(b.width-=h.toPixels(0)-h.left);b.x&&(b.x+=h.minPixelPadding);if(a.shape.type===\"path\"){g=b.d;o=e;for(var r=j,s=g.length,k=0;k<s;)typeof g[k]===\"number\"&&typeof g[k+1]===\"number\"?(g[k]=h.toPixels(g[k])-o,g[k+1]=v.toPixels(g[k+1])-r,k+=2):k+=1}}a.shape.type===\"circle\"&&(b.x+=b.r,b.y+=b.r);f.attr(b)}c.bBox=null;if(!m(l))q=c.getBBox(),l=\nq.width;if(!m(w))q||(q=c.getBBox()),w=q.height;if(!m(y))y=p.center;if(!m(x))x=p.center;e-=l*y;j-=w*x;d.animation&&n(c.translateX)&&n(c.translateY)?c.animate({translateX:e,translateY:j}):c.translate(e,j)}},destroy:function(){var a=this,d=this.chart.annotations.allItems,c=d.indexOf(a);c>-1&&d.splice(c,1);z([\"title\",\"shape\",\"group\"],function(b){a[b]&&(a[b].destroy(),a[b]=null)});a.group=a.title=a.shape=a.chart=a.options=null},update:function(a,d){t(this.options,a);this.linkObjects();this.render(d)},\nlinkObjects:function(){var a=this.chart,d=this.linkedObject,c=d&&(d.id||d.options.id),b=this.options.linkedTo;if(n(b)){if(!n(d)||b!==c)this.linkedObject=a.get(b)}else this.linkedObject=null}};t(s.prototype,{annotations:{add:function(a,d){var c=this.allItems,b=this.chart,f,e;Object.prototype.toString.call(a)===\"[object Array]\"||(a=[a]);for(e=a.length;e--;)f=new B(b,a[e]),c.push(f),f.render(d)},redraw:function(){z(this.allItems,function(a){a.redraw()})}}});s.prototype.callbacks.push(function(a){var d=\na.options.annotations,c;c=a.renderer.g(\"annotations\");c.attr({zIndex:7});c.add();a.annotations.allItems=[];a.annotations.chart=a;a.annotations.group=c;Object.prototype.toString.call(d)===\"[object Array]\"&&d.length>0&&a.annotations.add(a.options.annotations);i.addEvent(a,\"redraw\",function(){a.annotations.redraw()})})})(Highcharts,HighchartsAdapter);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/annotations.src.js",
    "content": "(function (Highcharts, HighchartsAdapter) {\n\nvar UNDEFINED,\n\tALIGN_FACTOR,\n\tALLOWED_SHAPES,\n\tChart = Highcharts.Chart,\n\textend = Highcharts.extend,\n\teach = Highcharts.each;\n\nALLOWED_SHAPES = [\"path\", \"rect\", \"circle\"];\n\nALIGN_FACTOR = {\n\ttop: 0,\n\tleft: 0,\n\tcenter: 0.5,\n\tmiddle: 0.5,\n\tbottom: 1,\n\tright: 1\n};\n\n\n// Highcharts helper methods\nvar inArray = HighchartsAdapter.inArray,\n\tmerge = Highcharts.merge;\n\nfunction defaultOptions(shapeType) {\n\tvar shapeOptions,\n\t\toptions;\n\n\toptions = {\n\t\txAxis: 0,\n\t\tyAxis: 0,\n\t\ttitle: {\n\t\t\tstyle: {},\n\t\t\ttext: \"\",\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\tshape: {\n\t\t\tparams: {\n\t\t\t\tstroke: \"#000000\",\n\t\t\t\tfill: \"transparent\",\n\t\t\t\tstrokeWidth: 2\n\t\t\t}\n\t\t}\n\t};\n\n\tshapeOptions = {\n\t\tcircle: {\n\t\t\tparams: {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0\n\t\t\t}\n\t\t}\n\t};\n\n\tif (shapeOptions[shapeType]) {\n\t\toptions.shape = merge(options.shape, shapeOptions[shapeType]);\n\t}\n\n\treturn options;\n}\n\nfunction isArray(obj) {\n\treturn Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction isNumber(n) {\n\treturn typeof n === 'number';\n}\n\nfunction defined(obj) {\n\treturn obj !== UNDEFINED && obj !== null;\n}\n\nfunction translatePath(d, xAxis, yAxis, xOffset, yOffset) {\n\tvar len = d.length,\n\t\ti = 0;\n\n\twhile (i < len) {\n\t\tif (typeof d[i] === 'number' && typeof d[i + 1] === 'number') {\n\t\t\td[i] = xAxis.toPixels(d[i]) - xOffset;\n\t\t\td[i + 1] = yAxis.toPixels(d[i + 1]) - yOffset;\n\t\t\ti += 2;\n\t\t} else {\n\t\t\ti += 1;\n\t\t}\n\t}\n\n\treturn d;\n}\n\n\n// Define annotation prototype\nvar Annotation = function () {\n\tthis.init.apply(this, arguments);\n};\nAnnotation.prototype = {\n\t/* \n\t * Initialize the annotation\n\t */\n\tinit: function (chart, options) {\n\t\tvar shapeType = options.shape && options.shape.type;\n\n\t\tthis.chart = chart;\n\t\tthis.options = merge({}, defaultOptions(shapeType), options);\n\t},\n\n\t/*\n\t * Render the annotation\n\t */\n\trender: function (redraw) {\n\t\tvar annotation = this,\n\t\t\tchart = this.chart,\n\t\t\trenderer = annotation.chart.renderer,\n\t\t\tgroup = annotation.group,\n\t\t\ttitle = annotation.title,\n\t\t\tshape = annotation.shape,\n\t\t\toptions = annotation.options,\n\t\t\ttitleOptions = options.title,\n\t\t\tshapeOptions = options.shape;\n\n\t\tif (!group) {\n\t\t\tgroup = annotation.group = renderer.g();\n\t\t}\n\n\n\t\tif (!shape && shapeOptions && inArray(shapeOptions.type, ALLOWED_SHAPES) !== -1) {\n\t\t\tshape = annotation.shape = renderer[options.shape.type](shapeOptions.params);\n\t\t\tshape.add(group);\n\t\t}\n\n\t\tif (!title && titleOptions) {\n\t\t\ttitle = annotation.title = renderer.label(titleOptions);\n\t\t\ttitle.add(group);\n\t\t}\n\n\t\tgroup.add(chart.annotations.group);\n\n\t\t// link annotations to point or series\n\t\tannotation.linkObjects();\n\n\t\tif (redraw !== false) {\n\t\t\tannotation.redraw();\n\t\t}\n\t},\n\n\t/*\n\t * Redraw the annotation title or shape after options update\n\t */\n\tredraw: function () {\n\t\tvar options = this.options,\n\t\t\tchart = this.chart,\n\t\t\tgroup = this.group,\n\t\t\ttitle = this.title,\n\t\t\tshape = this.shape,\n\t\t\tlinkedTo = this.linkedObject,\n\t\t\txAxis = chart.xAxis[options.xAxis],\n\t\t\tyAxis = chart.yAxis[options.yAxis],\n\t\t\twidth = options.width,\n\t\t\theight = options.height,\n\t\t\tanchorY = ALIGN_FACTOR[options.anchorY],\n\t\t\tanchorX = ALIGN_FACTOR[options.anchorX],\n\t\t\tresetBBox = false,\n\t\t\tshapeParams,\n\t\t\tlinkType,\n\t\t\tseries,\n\t\t\tparam,\n\t\t\tbbox,\n\t\t\tx,\n\t\t\ty;\n\n\t\tif (linkedTo) {\n\t\t\tlinkType = (linkedTo instanceof Highcharts.Point) ? 'point' :\n\t\t\t\t\t\t(linkedTo instanceof Highcharts.Series) ? 'series' : null;\n\n\t\t\tif (linkType === 'point') {\n\t\t\t\toptions.xValue = linkedTo.x;\n\t\t\t\toptions.yValue = linkedTo.y;\n\t\t\t\tseries = linkedTo.series;\n\t\t\t} else if (linkType === 'series') {\n\t\t\t\tseries = linkedTo;\n\t\t\t}\n\n\t\t\tif (group.visibility !== series.group.visibility) {\n\t\t\t\tgroup.attr({\n\t\t\t\t\tvisibility: series.group.visibility\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\n\t\t// Based on given options find annotation pixel position\n\t\tx = (defined(options.xValue) ? xAxis.toPixels(options.xValue + xAxis.minPointOffset) - xAxis.minPixelPadding : options.x);\n\t\ty = defined(options.yValue) ? yAxis.toPixels(options.yValue) : options.y;\n\n\t\tif (isNaN(x) || isNaN(y) || !isNumber(x) || !isNumber(y)) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tif (title) {\n\t\t\ttitle.attr(options.title);\n\t\t\ttitle.css(options.title.style);\n\t\t\tresetBBox = true;\n\t\t}\n\n\t\tif (shape) {\n\t\t\tshapeParams = extend({}, options.shape.params);\n\n\t\t\tif (options.units === 'values') {\n\t\t\t\tfor (param in shapeParams) {\n\t\t\t\t\tif (inArray(param, ['width', 'x']) > -1) {\n\t\t\t\t\t\tshapeParams[param] = xAxis.translate(shapeParams[param]);\n\t\t\t\t\t} else if (inArray(param, ['height', 'y']) > -1) {\n\t\t\t\t\t\tshapeParams[param] = yAxis.translate(shapeParams[param]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (shapeParams.width) {\n\t\t\t\t\tshapeParams.width -= xAxis.toPixels(0) - xAxis.left;\n\t\t\t\t}\n\n\t\t\t\tif (shapeParams.x) {\n\t\t\t\t\tshapeParams.x += xAxis.minPixelPadding;\n\t\t\t\t}\n\n\t\t\t\tif (options.shape.type === 'path') {\n\t\t\t\t\ttranslatePath(shapeParams.d, xAxis, yAxis, x, y);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// move the center of the circle to shape x/y\n\t\t\tif (options.shape.type === 'circle') {\n\t\t\t\tshapeParams.x += shapeParams.r;\n\t\t\t\tshapeParams.y += shapeParams.r;\n\t\t\t}\n\n\t\t\tresetBBox = true;\n\t\t\tshape.attr(shapeParams);\n\t\t}\n\n\t\tgroup.bBox = null;\n\n\t\t// If annotation width or height is not defined in options use bounding box size\n\t\tif (!isNumber(width)) {\n\t\t\tbbox = group.getBBox();\n\t\t\twidth = bbox.width;\n\t\t}\n\n\t\tif (!isNumber(height)) {\n\t\t\t// get bbox only if it wasn't set before\n\t\t\tif (!bbox) {\n\t\t\t\tbbox = group.getBBox();\n\t\t\t}\n\n\t\t\theight = bbox.height;\n\t\t}\n\n\t\t// Calculate anchor point\n\t\tif (!isNumber(anchorX)) {\n\t\t\tanchorX = ALIGN_FACTOR.center;\n\t\t}\n\n\t\tif (!isNumber(anchorY)) {\n\t\t\tanchorY = ALIGN_FACTOR.center;\n\t\t}\n\n\t\t// Translate group according to its dimension and anchor point\n\t\tx = x - width * anchorX;\n\t\ty = y - height * anchorY;\n\n\t\tif (chart.animation && defined(group.translateX) && defined(group.translateY)) {\n\t\t\tgroup.animate({\n\t\t\t\ttranslateX: x,\n\t\t\t\ttranslateY: y\n\t\t\t});\n\t\t} else {\n\t\t\tgroup.translate(x, y);\n\t\t}\n\t},\n\n\t/*\n\t * Destroy the annotation\n\t */\n\tdestroy: function () {\n\t\tvar annotation = this,\n\t\t\tchart = this.chart,\n\t\t\tallItems = chart.annotations.allItems,\n\t\t\tindex = allItems.indexOf(annotation);\n\n\t\tif (index > -1) {\n\t\t\tallItems.splice(index, 1);\n\t\t}\n\n\t\teach(['title', 'shape', 'group'], function (element) {\n\t\t\tif (annotation[element]) {\n\t\t\t\tannotation[element].destroy();\n\t\t\t\tannotation[element] = null;\n\t\t\t}\n\t\t});\n\n\t\tannotation.group = annotation.title = annotation.shape = annotation.chart = annotation.options = null;\n\t},\n\n\t/*\n\t * Update the annotation with a given options\n\t */\n\tupdate: function (options, redraw) {\n\t\textend(this.options, options);\n\n\t\t// update link to point or series\n\t\tthis.linkObjects();\n\n\t\tthis.render(redraw);\n\t},\n\n\tlinkObjects: function () {\n\t\tvar annotation = this,\n\t\t\tchart = annotation.chart,\n\t\t\tlinkedTo = annotation.linkedObject,\n\t\t\tlinkedId = linkedTo && (linkedTo.id || linkedTo.options.id),\n\t\t\toptions = annotation.options,\n\t\t\tid = options.linkedTo;\n\n\t\tif (!defined(id)) {\n\t\t\tannotation.linkedObject = null;\n\t\t} else if (!defined(linkedTo) || id !== linkedId) {\n\t\t\tannotation.linkedObject = chart.get(id);\n\t\t}\n\t}\n};\n\n\n// Add annotations methods to chart prototype\nextend(Chart.prototype, {\n\tannotations: {\n\t\t/*\n\t\t * Unified method for adding annotations to the chart\n\t\t */\n\t\tadd: function (options, redraw) {\n\t\t\tvar annotations = this.allItems,\n\t\t\t\tchart = this.chart,\n\t\t\t\titem,\n\t\t\t\tlen;\n\n\t\t\tif (!isArray(options)) {\n\t\t\t\toptions = [options];\n\t\t\t}\n\n\t\t\tlen = options.length;\n\n\t\t\twhile (len--) {\n\t\t\t\titem = new Annotation(chart, options[len]);\n\t\t\t\tannotations.push(item);\n\t\t\t\titem.render(redraw);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Redraw all annotations, method used in chart events\n\t\t */\n\t\tredraw: function () {\n\t\t\teach(this.allItems, function (annotation) {\n\t\t\t\tannotation.redraw();\n\t\t\t});\n\t\t}\n\t}\n});\n\n\n// Initialize on chart load\nChart.prototype.callbacks.push(function (chart) {\n\tvar options = chart.options.annotations,\n\t\tgroup;\n\n\tgroup = chart.renderer.g(\"annotations\");\n\tgroup.attr({\n\t\tzIndex: 7\n\t});\n\tgroup.add();\n\n\t// initialize empty array for annotations\n\tchart.annotations.allItems = [];\n\n\t// link chart object to annotations\n\tchart.annotations.chart = chart;\n\n\t// link annotations group element to the chart\n\tchart.annotations.group = group;\n\n\tif (isArray(options) && options.length > 0) {\n\t\tchart.annotations.add(chart.options.annotations);\n\t}\n\n\t// update annotations after chart redraw\n\tHighcharts.addEvent(chart, 'redraw', function () {\n\t\tchart.annotations.redraw();\n\t});\n});\n}(Highcharts, HighchartsAdapter));\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/canvas-tools.js",
    "content": "/*\n A class to parse color values\n @author Stoyan Stefanov <sstoo@gmail.com>\n @link   http://www.phpied.com/rgb-color-parser-in-javascript/\n Use it if you like it\n\n canvg.js - Javascript SVG parser and renderer on Canvas\n MIT Licensed \n Gabe Lerner (gabelerner@gmail.com)\n http://code.google.com/p/canvg/\n\n Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/\n\n Highcharts JS v3.0.6 (2013-10-04)\n CanVGRenderer Extension module\n\n (c) 2011-2012 Torstein Hønsi, Erik Olsson\n\n License: www.highcharts.com/license\n*/\nfunction RGBColor(m){this.ok=!1;m.charAt(0)==\"#\"&&(m=m.substr(1,6));var m=m.replace(/ /g,\"\"),m=m.toLowerCase(),a={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",\ndarkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",\ngainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",\nlightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",\noldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",\nslategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"},c;for(c in a)m==c&&(m=a[c]);var d=[{re:/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(b){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}},{re:/^(\\w{2})(\\w{2})(\\w{2})$/,\nexample:[\"#00ff00\",\"336699\"],process:function(b){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}},{re:/^(\\w{1})(\\w{1})(\\w{1})$/,example:[\"#fb0\",\"f0f\"],process:function(b){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}}];for(c=0;c<d.length;c++){var b=d[c].process,k=d[c].re.exec(m);if(k)channels=b(k),this.r=channels[0],this.g=channels[1],this.b=channels[2],this.ok=!0}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r;this.g=this.g<0||isNaN(this.g)?0:\nthis.g>255?255:this.g;this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b;this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"};this.toHex=function(){var b=this.r.toString(16),a=this.g.toString(16),d=this.b.toString(16);b.length==1&&(b=\"0\"+b);a.length==1&&(a=\"0\"+a);d.length==1&&(d=\"0\"+d);return\"#\"+b+a+d};this.getHelpXML=function(){for(var b=[],k=0;k<d.length;k++)for(var c=d[k].example,j=0;j<c.length;j++)b[b.length]=c[j];for(var h in a)b[b.length]=h;c=document.createElement(\"ul\");\nc.setAttribute(\"id\",\"rgbcolor-examples\");for(k=0;k<b.length;k++)try{var l=document.createElement(\"li\"),o=new RGBColor(b[k]),n=document.createElement(\"div\");n.style.cssText=\"margin: 3px; border: 1px solid black; background:\"+o.toHex()+\"; color:\"+o.toHex();n.appendChild(document.createTextNode(\"test\"));var q=document.createTextNode(\" \"+b[k]+\" -> \"+o.toRGB()+\" -> \"+o.toHex());l.appendChild(n);l.appendChild(q);c.appendChild(l)}catch(p){}return c}}\nif(!window.console)window.console={},window.console.log=function(){},window.console.dir=function(){};if(!Array.prototype.indexOf)Array.prototype.indexOf=function(m){for(var a=0;a<this.length;a++)if(this[a]==m)return a;return-1};\n(function(){function m(){var a={FRAMERATE:30,MAX_VIRTUAL_PIXELS:3E4};a.init=function(c){a.Definitions={};a.Styles={};a.Animations=[];a.Images=[];a.ctx=c;a.ViewPort=new function(){this.viewPorts=[];this.Clear=function(){this.viewPorts=[]};this.SetCurrent=function(a,b){this.viewPorts.push({width:a,height:b})};this.RemoveCurrent=function(){this.viewPorts.pop()};this.Current=function(){return this.viewPorts[this.viewPorts.length-1]};this.width=function(){return this.Current().width};this.height=function(){return this.Current().height};\nthis.ComputeSize=function(a){return a!=null&&typeof a==\"number\"?a:a==\"x\"?this.width():a==\"y\"?this.height():Math.sqrt(Math.pow(this.width(),2)+Math.pow(this.height(),2))/Math.sqrt(2)}}};a.init();a.ImagesLoaded=function(){for(var c=0;c<a.Images.length;c++)if(!a.Images[c].loaded)return!1;return!0};a.trim=function(a){return a.replace(/^\\s+|\\s+$/g,\"\")};a.compressSpaces=function(a){return a.replace(/[\\s\\r\\t\\n]+/gm,\" \")};a.ajax=function(a){var d;return(d=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject(\"Microsoft.XMLHTTP\"))?\n(d.open(\"GET\",a,!1),d.send(null),d.responseText):null};a.parseXml=function(a){if(window.DOMParser)return(new DOMParser).parseFromString(a,\"text/xml\");else{var a=a.replace(/<!DOCTYPE svg[^>]*>/,\"\"),d=new ActiveXObject(\"Microsoft.XMLDOM\");d.async=\"false\";d.loadXML(a);return d}};a.Property=function(c,d){this.name=c;this.value=d;this.hasValue=function(){return this.value!=null&&this.value!==\"\"};this.numValue=function(){if(!this.hasValue())return 0;var b=parseFloat(this.value);(this.value+\"\").match(/%$/)&&\n(b/=100);return b};this.valueOrDefault=function(b){return this.hasValue()?this.value:b};this.numValueOrDefault=function(b){return this.hasValue()?this.numValue():b};var b=this;this.Color={addOpacity:function(d){var c=b.value;if(d!=null&&d!=\"\"){var f=new RGBColor(b.value);f.ok&&(c=\"rgba(\"+f.r+\", \"+f.g+\", \"+f.b+\", \"+d+\")\")}return new a.Property(b.name,c)}};this.Definition={getDefinition:function(){var d=b.value.replace(/^(url\\()?#([^\\)]+)\\)?$/,\"$2\");return a.Definitions[d]},isUrl:function(){return b.value.indexOf(\"url(\")==\n0},getFillStyle:function(b){var d=this.getDefinition();return d!=null&&d.createGradient?d.createGradient(a.ctx,b):d!=null&&d.createPattern?d.createPattern(a.ctx,b):null}};this.Length={DPI:function(){return 96},EM:function(b){var d=12,c=new a.Property(\"fontSize\",a.Font.Parse(a.ctx.font).fontSize);c.hasValue()&&(d=c.Length.toPixels(b));return d},toPixels:function(d){if(!b.hasValue())return 0;var c=b.value+\"\";return c.match(/em$/)?b.numValue()*this.EM(d):c.match(/ex$/)?b.numValue()*this.EM(d)/2:c.match(/px$/)?\nb.numValue():c.match(/pt$/)?b.numValue()*1.25:c.match(/pc$/)?b.numValue()*15:c.match(/cm$/)?b.numValue()*this.DPI(d)/2.54:c.match(/mm$/)?b.numValue()*this.DPI(d)/25.4:c.match(/in$/)?b.numValue()*this.DPI(d):c.match(/%$/)?b.numValue()*a.ViewPort.ComputeSize(d):b.numValue()}};this.Time={toMilliseconds:function(){if(!b.hasValue())return 0;var a=b.value+\"\";if(a.match(/s$/))return b.numValue()*1E3;a.match(/ms$/);return b.numValue()}};this.Angle={toRadians:function(){if(!b.hasValue())return 0;var a=b.value+\n\"\";return a.match(/deg$/)?b.numValue()*(Math.PI/180):a.match(/grad$/)?b.numValue()*(Math.PI/200):a.match(/rad$/)?b.numValue():b.numValue()*(Math.PI/180)}}};a.Font=new function(){this.Styles=[\"normal\",\"italic\",\"oblique\",\"inherit\"];this.Variants=[\"normal\",\"small-caps\",\"inherit\"];this.Weights=\"normal,bold,bolder,lighter,100,200,300,400,500,600,700,800,900,inherit\".split(\",\");this.CreateFont=function(d,b,c,e,f,g){g=g!=null?this.Parse(g):this.CreateFont(\"\",\"\",\"\",\"\",\"\",a.ctx.font);return{fontFamily:f||\ng.fontFamily,fontSize:e||g.fontSize,fontStyle:d||g.fontStyle,fontWeight:c||g.fontWeight,fontVariant:b||g.fontVariant,toString:function(){return[this.fontStyle,this.fontVariant,this.fontWeight,this.fontSize,this.fontFamily].join(\" \")}}};var c=this;this.Parse=function(d){for(var b={},d=a.trim(a.compressSpaces(d||\"\")).split(\" \"),k=!1,e=!1,f=!1,g=!1,j=\"\",h=0;h<d.length;h++)if(!e&&c.Styles.indexOf(d[h])!=-1){if(d[h]!=\"inherit\")b.fontStyle=d[h];e=!0}else if(!g&&c.Variants.indexOf(d[h])!=-1){if(d[h]!=\"inherit\")b.fontVariant=\nd[h];e=g=!0}else if(!f&&c.Weights.indexOf(d[h])!=-1){if(d[h]!=\"inherit\")b.fontWeight=d[h];e=g=f=!0}else if(k)d[h]!=\"inherit\"&&(j+=d[h]);else{if(d[h]!=\"inherit\")b.fontSize=d[h].split(\"/\")[0];e=g=f=k=!0}if(j!=\"\")b.fontFamily=j;return b}};a.ToNumberArray=function(c){for(var c=a.trim(a.compressSpaces((c||\"\").replace(/,/g,\" \"))).split(\" \"),d=0;d<c.length;d++)c[d]=parseFloat(c[d]);return c};a.Point=function(a,d){this.x=a;this.y=d;this.angleTo=function(b){return Math.atan2(b.y-this.y,b.x-this.x)};this.applyTransform=\nfunction(b){var a=this.x*b[1]+this.y*b[3]+b[5];this.x=this.x*b[0]+this.y*b[2]+b[4];this.y=a}};a.CreatePoint=function(c){c=a.ToNumberArray(c);return new a.Point(c[0],c[1])};a.CreatePath=function(c){for(var c=a.ToNumberArray(c),d=[],b=0;b<c.length;b+=2)d.push(new a.Point(c[b],c[b+1]));return d};a.BoundingBox=function(a,d,b,k){this.y2=this.x2=this.y1=this.x1=Number.NaN;this.x=function(){return this.x1};this.y=function(){return this.y1};this.width=function(){return this.x2-this.x1};this.height=function(){return this.y2-\nthis.y1};this.addPoint=function(b,a){if(b!=null){if(isNaN(this.x1)||isNaN(this.x2))this.x2=this.x1=b;if(b<this.x1)this.x1=b;if(b>this.x2)this.x2=b}if(a!=null){if(isNaN(this.y1)||isNaN(this.y2))this.y2=this.y1=a;if(a<this.y1)this.y1=a;if(a>this.y2)this.y2=a}};this.addX=function(b){this.addPoint(b,null)};this.addY=function(b){this.addPoint(null,b)};this.addBoundingBox=function(b){this.addPoint(b.x1,b.y1);this.addPoint(b.x2,b.y2)};this.addQuadraticCurve=function(b,a,d,c,k,l){d=b+2/3*(d-b);c=a+2/3*(c-\na);this.addBezierCurve(b,a,d,d+1/3*(k-b),c,c+1/3*(l-a),k,l)};this.addBezierCurve=function(b,a,d,c,k,l,o,n){var q=[b,a],p=[d,c],t=[k,l],m=[o,n];this.addPoint(q[0],q[1]);this.addPoint(m[0],m[1]);for(i=0;i<=1;i++)b=function(b){return Math.pow(1-b,3)*q[i]+3*Math.pow(1-b,2)*b*p[i]+3*(1-b)*Math.pow(b,2)*t[i]+Math.pow(b,3)*m[i]},a=6*q[i]-12*p[i]+6*t[i],d=-3*q[i]+9*p[i]-9*t[i]+3*m[i],c=3*p[i]-3*q[i],d==0?a!=0&&(a=-c/a,0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))):(c=Math.pow(a,2)-4*c*d,c<0||(k=\n(-a+Math.sqrt(c))/(2*d),0<k&&k<1&&(i==0&&this.addX(b(k)),i==1&&this.addY(b(k))),a=(-a-Math.sqrt(c))/(2*d),0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))))};this.isPointInBox=function(b,a){return this.x1<=b&&b<=this.x2&&this.y1<=a&&a<=this.y2};this.addPoint(a,d);this.addPoint(b,k)};a.Transform=function(c){var d=this;this.Type={};this.Type.translate=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.translate(this.p.x||0,this.p.y||0)};this.applyToPoint=function(b){b.applyTransform([1,\n0,0,1,this.p.x||0,this.p.y||0])}};this.Type.rotate=function(b){b=a.ToNumberArray(b);this.angle=new a.Property(\"angle\",b[0]);this.cx=b[1]||0;this.cy=b[2]||0;this.apply=function(b){b.translate(this.cx,this.cy);b.rotate(this.angle.Angle.toRadians());b.translate(-this.cx,-this.cy)};this.applyToPoint=function(b){var a=this.angle.Angle.toRadians();b.applyTransform([1,0,0,1,this.p.x||0,this.p.y||0]);b.applyTransform([Math.cos(a),Math.sin(a),-Math.sin(a),Math.cos(a),0,0]);b.applyTransform([1,0,0,1,-this.p.x||\n0,-this.p.y||0])}};this.Type.scale=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.scale(this.p.x||1,this.p.y||this.p.x||1)};this.applyToPoint=function(b){b.applyTransform([this.p.x||0,0,0,this.p.y||0,0,0])}};this.Type.matrix=function(b){this.m=a.ToNumberArray(b);this.apply=function(b){b.transform(this.m[0],this.m[1],this.m[2],this.m[3],this.m[4],this.m[5])};this.applyToPoint=function(b){b.applyTransform(this.m)}};this.Type.SkewBase=function(b){this.base=d.Type.matrix;this.base(b);this.angle=\nnew a.Property(\"angle\",b)};this.Type.SkewBase.prototype=new this.Type.matrix;this.Type.skewX=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,0,Math.tan(this.angle.Angle.toRadians()),1,0,0]};this.Type.skewX.prototype=new this.Type.SkewBase;this.Type.skewY=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,Math.tan(this.angle.Angle.toRadians()),0,1,0,0]};this.Type.skewY.prototype=new this.Type.SkewBase;this.transforms=[];this.apply=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].apply(b)};\nthis.applyToPoint=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].applyToPoint(b)};for(var c=a.trim(a.compressSpaces(c)).split(/\\s(?=[a-z])/),b=0;b<c.length;b++){var k=c[b].split(\"(\")[0],e=c[b].split(\"(\")[1].replace(\")\",\"\");this.transforms.push(new this.Type[k](e))}};a.AspectRatio=function(c,d,b,k,e,f,g,j,h,l){var d=a.compressSpaces(d),d=d.replace(/^defer\\s/,\"\"),o=d.split(\" \")[0]||\"xMidYMid\",d=d.split(\" \")[1]||\"meet\",n=b/k,q=e/f,p=Math.min(n,q),m=Math.max(n,q);d==\"meet\"&&(k*=\np,f*=p);d==\"slice\"&&(k*=m,f*=m);h=new a.Property(\"refX\",h);l=new a.Property(\"refY\",l);h.hasValue()&&l.hasValue()?c.translate(-p*h.Length.toPixels(\"x\"),-p*l.Length.toPixels(\"y\")):(o.match(/^xMid/)&&(d==\"meet\"&&p==q||d==\"slice\"&&m==q)&&c.translate(b/2-k/2,0),o.match(/YMid$/)&&(d==\"meet\"&&p==n||d==\"slice\"&&m==n)&&c.translate(0,e/2-f/2),o.match(/^xMax/)&&(d==\"meet\"&&p==q||d==\"slice\"&&m==q)&&c.translate(b-k,0),o.match(/YMax$/)&&(d==\"meet\"&&p==n||d==\"slice\"&&m==n)&&c.translate(0,e-f));o==\"none\"?c.scale(n,\nq):d==\"meet\"?c.scale(p,p):d==\"slice\"&&c.scale(m,m);c.translate(g==null?0:-g,j==null?0:-j)};a.Element={};a.Element.ElementBase=function(c){this.attributes={};this.styles={};this.children=[];this.attribute=function(b,d){var c=this.attributes[b];if(c!=null)return c;c=new a.Property(b,\"\");d==!0&&(this.attributes[b]=c);return c};this.style=function(b,d){var c=this.styles[b];if(c!=null)return c;c=this.attribute(b);if(c!=null&&c.hasValue())return c;c=this.parent;if(c!=null&&(c=c.style(b),c!=null&&c.hasValue()))return c;\nc=new a.Property(b,\"\");d==!0&&(this.styles[b]=c);return c};this.render=function(b){if(this.style(\"display\").value!=\"none\"&&this.attribute(\"visibility\").value!=\"hidden\"){b.save();this.setContext(b);if(this.attribute(\"mask\").hasValue()){var a=this.attribute(\"mask\").Definition.getDefinition();a!=null&&a.apply(b,this)}else this.style(\"filter\").hasValue()?(a=this.style(\"filter\").Definition.getDefinition(),a!=null&&a.apply(b,this)):this.renderChildren(b);this.clearContext(b);b.restore()}};this.setContext=\nfunction(){};this.clearContext=function(){};this.renderChildren=function(b){for(var a=0;a<this.children.length;a++)this.children[a].render(b)};this.addChild=function(b,d){var c=b;d&&(c=a.CreateElement(b));c.parent=this;this.children.push(c)};if(c!=null&&c.nodeType==1){for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1&&this.addChild(b,!0)}for(d=0;d<c.attributes.length;d++)b=c.attributes[d],this.attributes[b.nodeName]=new a.Property(b.nodeName,b.nodeValue);b=a.Styles[c.nodeName];\nif(b!=null)for(var k in b)this.styles[k]=b[k];if(this.attribute(\"class\").hasValue())for(var d=a.compressSpaces(this.attribute(\"class\").value).split(\" \"),e=0;e<d.length;e++){b=a.Styles[\".\"+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k];b=a.Styles[c.nodeName+\".\"+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k]}if(this.attribute(\"style\").hasValue()){b=this.attribute(\"style\").value.split(\";\");for(d=0;d<b.length;d++)a.trim(b[d])!=\"\"&&(c=b[d].split(\":\"),k=a.trim(c[0]),c=a.trim(c[1]),this.styles[k]=new a.Property(k,\nc))}this.attribute(\"id\").hasValue()&&a.Definitions[this.attribute(\"id\").value]==null&&(a.Definitions[this.attribute(\"id\").value]=this)}};a.Element.RenderedElementBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.setContext=function(d){if(this.style(\"fill\").Definition.isUrl()){var b=this.style(\"fill\").Definition.getFillStyle(this);if(b!=null)d.fillStyle=b}else if(this.style(\"fill\").hasValue())b=this.style(\"fill\"),this.style(\"fill-opacity\").hasValue()&&(b=b.Color.addOpacity(this.style(\"fill-opacity\").value)),\nd.fillStyle=b.value==\"none\"?\"rgba(0,0,0,0)\":b.value;if(this.style(\"stroke\").Definition.isUrl()){if(b=this.style(\"stroke\").Definition.getFillStyle(this),b!=null)d.strokeStyle=b}else if(this.style(\"stroke\").hasValue())b=this.style(\"stroke\"),this.style(\"stroke-opacity\").hasValue()&&(b=b.Color.addOpacity(this.style(\"stroke-opacity\").value)),d.strokeStyle=b.value==\"none\"?\"rgba(0,0,0,0)\":b.value;if(this.style(\"stroke-width\").hasValue())d.lineWidth=this.style(\"stroke-width\").Length.toPixels();if(this.style(\"stroke-linecap\").hasValue())d.lineCap=\nthis.style(\"stroke-linecap\").value;if(this.style(\"stroke-linejoin\").hasValue())d.lineJoin=this.style(\"stroke-linejoin\").value;if(this.style(\"stroke-miterlimit\").hasValue())d.miterLimit=this.style(\"stroke-miterlimit\").value;if(typeof d.font!=\"undefined\")d.font=a.Font.CreateFont(this.style(\"font-style\").value,this.style(\"font-variant\").value,this.style(\"font-weight\").value,this.style(\"font-size\").hasValue()?this.style(\"font-size\").Length.toPixels()+\"px\":\"\",this.style(\"font-family\").value).toString();\nthis.attribute(\"transform\").hasValue()&&(new a.Transform(this.attribute(\"transform\").value)).apply(d);this.attribute(\"clip-path\").hasValue()&&(b=this.attribute(\"clip-path\").Definition.getDefinition(),b!=null&&b.apply(d));if(this.style(\"opacity\").hasValue())d.globalAlpha=this.style(\"opacity\").numValue()}};a.Element.RenderedElementBase.prototype=new a.Element.ElementBase;a.Element.PathElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.path=function(d){d!=null&&d.beginPath();\nreturn new a.BoundingBox};this.renderChildren=function(d){this.path(d);a.Mouse.checkPath(this,d);d.fillStyle!=\"\"&&d.fill();d.strokeStyle!=\"\"&&d.stroke();var b=this.getMarkers();if(b!=null){if(this.style(\"marker-start\").Definition.isUrl()){var c=this.style(\"marker-start\").Definition.getDefinition();c.render(d,b[0][0],b[0][1])}if(this.style(\"marker-mid\").Definition.isUrl())for(var c=this.style(\"marker-mid\").Definition.getDefinition(),e=1;e<b.length-1;e++)c.render(d,b[e][0],b[e][1]);this.style(\"marker-end\").Definition.isUrl()&&\n(c=this.style(\"marker-end\").Definition.getDefinition(),c.render(d,b[b.length-1][0],b[b.length-1][1]))}};this.getBoundingBox=function(){return this.path()};this.getMarkers=function(){return null}};a.Element.PathElementBase.prototype=new a.Element.RenderedElementBase;a.Element.svg=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseClearContext=this.clearContext;this.clearContext=function(d){this.baseClearContext(d);a.ViewPort.RemoveCurrent()};this.baseSetContext=this.setContext;\nthis.setContext=function(d){d.strokeStyle=\"rgba(0,0,0,0)\";d.lineCap=\"butt\";d.lineJoin=\"miter\";d.miterLimit=4;this.baseSetContext(d);this.attribute(\"x\").hasValue()&&this.attribute(\"y\").hasValue()&&d.translate(this.attribute(\"x\").Length.toPixels(\"x\"),this.attribute(\"y\").Length.toPixels(\"y\"));var b=a.ViewPort.width(),c=a.ViewPort.height();if(typeof this.root==\"undefined\"&&this.attribute(\"width\").hasValue()&&this.attribute(\"height\").hasValue()){var b=this.attribute(\"width\").Length.toPixels(\"x\"),c=this.attribute(\"height\").Length.toPixels(\"y\"),\ne=0,f=0;this.attribute(\"refX\").hasValue()&&this.attribute(\"refY\").hasValue()&&(e=-this.attribute(\"refX\").Length.toPixels(\"x\"),f=-this.attribute(\"refY\").Length.toPixels(\"y\"));d.beginPath();d.moveTo(e,f);d.lineTo(b,f);d.lineTo(b,c);d.lineTo(e,c);d.closePath();d.clip()}a.ViewPort.SetCurrent(b,c);if(this.attribute(\"viewBox\").hasValue()){var e=a.ToNumberArray(this.attribute(\"viewBox\").value),f=e[0],g=e[1],b=e[2],c=e[3];a.AspectRatio(d,this.attribute(\"preserveAspectRatio\").value,a.ViewPort.width(),b,a.ViewPort.height(),\nc,f,g,this.attribute(\"refX\").value,this.attribute(\"refY\").value);a.ViewPort.RemoveCurrent();a.ViewPort.SetCurrent(e[2],e[3])}}};a.Element.svg.prototype=new a.Element.RenderedElementBase;a.Element.rect=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute(\"x\").Length.toPixels(\"x\"),c=this.attribute(\"y\").Length.toPixels(\"y\"),e=this.attribute(\"width\").Length.toPixels(\"x\"),f=this.attribute(\"height\").Length.toPixels(\"y\"),g=this.attribute(\"rx\").Length.toPixels(\"x\"),\nj=this.attribute(\"ry\").Length.toPixels(\"y\");this.attribute(\"rx\").hasValue()&&!this.attribute(\"ry\").hasValue()&&(j=g);this.attribute(\"ry\").hasValue()&&!this.attribute(\"rx\").hasValue()&&(g=j);d!=null&&(d.beginPath(),d.moveTo(b+g,c),d.lineTo(b+e-g,c),d.quadraticCurveTo(b+e,c,b+e,c+j),d.lineTo(b+e,c+f-j),d.quadraticCurveTo(b+e,c+f,b+e-g,c+f),d.lineTo(b+g,c+f),d.quadraticCurveTo(b,c+f,b,c+f-j),d.lineTo(b,c+j),d.quadraticCurveTo(b,c,b+g,c),d.closePath());return new a.BoundingBox(b,c,b+e,c+f)}};a.Element.rect.prototype=\nnew a.Element.PathElementBase;a.Element.circle=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute(\"cx\").Length.toPixels(\"x\"),c=this.attribute(\"cy\").Length.toPixels(\"y\"),e=this.attribute(\"r\").Length.toPixels();d!=null&&(d.beginPath(),d.arc(b,c,e,0,Math.PI*2,!0),d.closePath());return new a.BoundingBox(b-e,c-e,b+e,c+e)}};a.Element.circle.prototype=new a.Element.PathElementBase;a.Element.ellipse=function(c){this.base=a.Element.PathElementBase;this.base(c);\nthis.path=function(d){var b=4*((Math.sqrt(2)-1)/3),c=this.attribute(\"rx\").Length.toPixels(\"x\"),e=this.attribute(\"ry\").Length.toPixels(\"y\"),f=this.attribute(\"cx\").Length.toPixels(\"x\"),g=this.attribute(\"cy\").Length.toPixels(\"y\");d!=null&&(d.beginPath(),d.moveTo(f,g-e),d.bezierCurveTo(f+b*c,g-e,f+c,g-b*e,f+c,g),d.bezierCurveTo(f+c,g+b*e,f+b*c,g+e,f,g+e),d.bezierCurveTo(f-b*c,g+e,f-c,g+b*e,f-c,g),d.bezierCurveTo(f-c,g-b*e,f-b*c,g-e,f,g-e),d.closePath());return new a.BoundingBox(f-c,g-e,f+c,g+e)}};a.Element.ellipse.prototype=\nnew a.Element.PathElementBase;a.Element.line=function(c){this.base=a.Element.PathElementBase;this.base(c);this.getPoints=function(){return[new a.Point(this.attribute(\"x1\").Length.toPixels(\"x\"),this.attribute(\"y1\").Length.toPixels(\"y\")),new a.Point(this.attribute(\"x2\").Length.toPixels(\"x\"),this.attribute(\"y2\").Length.toPixels(\"y\"))]};this.path=function(d){var b=this.getPoints();d!=null&&(d.beginPath(),d.moveTo(b[0].x,b[0].y),d.lineTo(b[1].x,b[1].y));return new a.BoundingBox(b[0].x,b[0].y,b[1].x,b[1].y)};\nthis.getMarkers=function(){var a=this.getPoints(),b=a[0].angleTo(a[1]);return[[a[0],b],[a[1],b]]}};a.Element.line.prototype=new a.Element.PathElementBase;a.Element.polyline=function(c){this.base=a.Element.PathElementBase;this.base(c);this.points=a.CreatePath(this.attribute(\"points\").value);this.path=function(d){var b=new a.BoundingBox(this.points[0].x,this.points[0].y);d!=null&&(d.beginPath(),d.moveTo(this.points[0].x,this.points[0].y));for(var c=1;c<this.points.length;c++)b.addPoint(this.points[c].x,\nthis.points[c].y),d!=null&&d.lineTo(this.points[c].x,this.points[c].y);return b};this.getMarkers=function(){for(var a=[],b=0;b<this.points.length-1;b++)a.push([this.points[b],this.points[b].angleTo(this.points[b+1])]);a.push([this.points[this.points.length-1],a[a.length-1][1]]);return a}};a.Element.polyline.prototype=new a.Element.PathElementBase;a.Element.polygon=function(c){this.base=a.Element.polyline;this.base(c);this.basePath=this.path;this.path=function(a){var b=this.basePath(a);a!=null&&(a.lineTo(this.points[0].x,\nthis.points[0].y),a.closePath());return b}};a.Element.polygon.prototype=new a.Element.polyline;a.Element.path=function(c){this.base=a.Element.PathElementBase;this.base(c);c=this.attribute(\"d\").value;c=c.replace(/,/gm,\" \");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,\"$1 $2\");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,\"$1 $2\");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\\s])/gm,\"$1 $2\");c=c.replace(/([^\\s])([MmZzLlHhVvCcSsQqTtAa])/gm,\"$1 $2\");c=c.replace(/([0-9])([+\\-])/gm,\n\"$1 $2\");c=c.replace(/(\\.[0-9]*)(\\.)/gm,\"$1 $2\");c=c.replace(/([Aa](\\s+[0-9]+){3})\\s+([01])\\s*([01])/gm,\"$1 $3 $4 \");c=a.compressSpaces(c);c=a.trim(c);this.PathParser=new function(d){this.tokens=d.split(\" \");this.reset=function(){this.i=-1;this.previousCommand=this.command=\"\";this.start=new a.Point(0,0);this.control=new a.Point(0,0);this.current=new a.Point(0,0);this.points=[];this.angles=[]};this.isEnd=function(){return this.i>=this.tokens.length-1};this.isCommandOrEnd=function(){return this.isEnd()?\n!0:this.tokens[this.i+1].match(/^[A-Za-z]$/)!=null};this.isRelativeCommand=function(){return this.command==this.command.toLowerCase()};this.getToken=function(){this.i+=1;return this.tokens[this.i]};this.getScalar=function(){return parseFloat(this.getToken())};this.nextCommand=function(){this.previousCommand=this.command;this.command=this.getToken()};this.getPoint=function(){return this.makeAbsolute(new a.Point(this.getScalar(),this.getScalar()))};this.getAsControlPoint=function(){var b=this.getPoint();\nreturn this.control=b};this.getAsCurrentPoint=function(){var b=this.getPoint();return this.current=b};this.getReflectedControlPoint=function(){return this.previousCommand.toLowerCase()!=\"c\"&&this.previousCommand.toLowerCase()!=\"s\"?this.current:new a.Point(2*this.current.x-this.control.x,2*this.current.y-this.control.y)};this.makeAbsolute=function(b){if(this.isRelativeCommand())b.x=this.current.x+b.x,b.y=this.current.y+b.y;return b};this.addMarker=function(b,a,d){d!=null&&this.angles.length>0&&this.angles[this.angles.length-\n1]==null&&(this.angles[this.angles.length-1]=this.points[this.points.length-1].angleTo(d));this.addMarkerAngle(b,a==null?null:a.angleTo(b))};this.addMarkerAngle=function(b,a){this.points.push(b);this.angles.push(a)};this.getMarkerPoints=function(){return this.points};this.getMarkerAngles=function(){for(var b=0;b<this.angles.length;b++)if(this.angles[b]==null)for(var a=b+1;a<this.angles.length;a++)if(this.angles[a]!=null){this.angles[b]=this.angles[a];break}return this.angles}}(c);this.path=function(d){var b=\nthis.PathParser;b.reset();var c=new a.BoundingBox;for(d!=null&&d.beginPath();!b.isEnd();)switch(b.nextCommand(),b.command.toUpperCase()){case \"M\":var e=b.getAsCurrentPoint();b.addMarker(e);c.addPoint(e.x,e.y);d!=null&&d.moveTo(e.x,e.y);for(b.start=b.current;!b.isCommandOrEnd();)e=b.getAsCurrentPoint(),b.addMarker(e,b.start),c.addPoint(e.x,e.y),d!=null&&d.lineTo(e.x,e.y);break;case \"L\":for(;!b.isCommandOrEnd();){var f=b.current,e=b.getAsCurrentPoint();b.addMarker(e,f);c.addPoint(e.x,e.y);d!=null&&\nd.lineTo(e.x,e.y)}break;case \"H\":for(;!b.isCommandOrEnd();)e=new a.Point((b.isRelativeCommand()?b.current.x:0)+b.getScalar(),b.current.y),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case \"V\":for(;!b.isCommandOrEnd();)e=new a.Point(b.current.x,(b.isRelativeCommand()?b.current.y:0)+b.getScalar()),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case \"C\":for(;!b.isCommandOrEnd();){var g=\nb.current,f=b.getPoint(),j=b.getAsControlPoint(),e=b.getAsCurrentPoint();b.addMarker(e,j,f);c.addBezierCurve(g.x,g.y,f.x,f.y,j.x,j.y,e.x,e.y);d!=null&&d.bezierCurveTo(f.x,f.y,j.x,j.y,e.x,e.y)}break;case \"S\":for(;!b.isCommandOrEnd();)g=b.current,f=b.getReflectedControlPoint(),j=b.getAsControlPoint(),e=b.getAsCurrentPoint(),b.addMarker(e,j,f),c.addBezierCurve(g.x,g.y,f.x,f.y,j.x,j.y,e.x,e.y),d!=null&&d.bezierCurveTo(f.x,f.y,j.x,j.y,e.x,e.y);break;case \"Q\":for(;!b.isCommandOrEnd();)g=b.current,j=b.getAsControlPoint(),\ne=b.getAsCurrentPoint(),b.addMarker(e,j,j),c.addQuadraticCurve(g.x,g.y,j.x,j.y,e.x,e.y),d!=null&&d.quadraticCurveTo(j.x,j.y,e.x,e.y);break;case \"T\":for(;!b.isCommandOrEnd();)g=b.current,j=b.getReflectedControlPoint(),b.control=j,e=b.getAsCurrentPoint(),b.addMarker(e,j,j),c.addQuadraticCurve(g.x,g.y,j.x,j.y,e.x,e.y),d!=null&&d.quadraticCurveTo(j.x,j.y,e.x,e.y);break;case \"A\":for(;!b.isCommandOrEnd();){var g=b.current,h=b.getScalar(),l=b.getScalar(),f=b.getScalar()*(Math.PI/180),o=b.getScalar(),j=b.getScalar(),\ne=b.getAsCurrentPoint(),n=new a.Point(Math.cos(f)*(g.x-e.x)/2+Math.sin(f)*(g.y-e.y)/2,-Math.sin(f)*(g.x-e.x)/2+Math.cos(f)*(g.y-e.y)/2),q=Math.pow(n.x,2)/Math.pow(h,2)+Math.pow(n.y,2)/Math.pow(l,2);q>1&&(h*=Math.sqrt(q),l*=Math.sqrt(q));o=(o==j?-1:1)*Math.sqrt((Math.pow(h,2)*Math.pow(l,2)-Math.pow(h,2)*Math.pow(n.y,2)-Math.pow(l,2)*Math.pow(n.x,2))/(Math.pow(h,2)*Math.pow(n.y,2)+Math.pow(l,2)*Math.pow(n.x,2)));isNaN(o)&&(o=0);var p=new a.Point(o*h*n.y/l,o*-l*n.x/h),g=new a.Point((g.x+e.x)/2+Math.cos(f)*\np.x-Math.sin(f)*p.y,(g.y+e.y)/2+Math.sin(f)*p.x+Math.cos(f)*p.y),m=function(b,a){return(b[0]*a[0]+b[1]*a[1])/(Math.sqrt(Math.pow(b[0],2)+Math.pow(b[1],2))*Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)))},s=function(b,a){return(b[0]*a[1]<b[1]*a[0]?-1:1)*Math.acos(m(b,a))},o=s([1,0],[(n.x-p.x)/h,(n.y-p.y)/l]),q=[(n.x-p.x)/h,(n.y-p.y)/l],p=[(-n.x-p.x)/h,(-n.y-p.y)/l],n=s(q,p);if(m(q,p)<=-1)n=Math.PI;m(q,p)>=1&&(n=0);j==0&&n>0&&(n-=2*Math.PI);j==1&&n<0&&(n+=2*Math.PI);q=new a.Point(g.x-h*Math.cos((o+n)/\n2),g.y-l*Math.sin((o+n)/2));b.addMarkerAngle(q,(o+n)/2+(j==0?1:-1)*Math.PI/2);b.addMarkerAngle(e,n+(j==0?1:-1)*Math.PI/2);c.addPoint(e.x,e.y);d!=null&&(m=h>l?h:l,e=h>l?1:h/l,h=h>l?l/h:1,d.translate(g.x,g.y),d.rotate(f),d.scale(e,h),d.arc(0,0,m,o,o+n,1-j),d.scale(1/e,1/h),d.rotate(-f),d.translate(-g.x,-g.y))}break;case \"Z\":d!=null&&d.closePath(),b.current=b.start}return c};this.getMarkers=function(){for(var a=this.PathParser.getMarkerPoints(),b=this.PathParser.getMarkerAngles(),c=[],e=0;e<a.length;e++)c.push([a[e],\nb[e]]);return c}};a.Element.path.prototype=new a.Element.PathElementBase;a.Element.pattern=function(c){this.base=a.Element.ElementBase;this.base(c);this.createPattern=function(d){var b=new a.Element.svg;b.attributes.viewBox=new a.Property(\"viewBox\",this.attribute(\"viewBox\").value);b.attributes.x=new a.Property(\"x\",this.attribute(\"x\").value);b.attributes.y=new a.Property(\"y\",this.attribute(\"y\").value);b.attributes.width=new a.Property(\"width\",this.attribute(\"width\").value);b.attributes.height=new a.Property(\"height\",\nthis.attribute(\"height\").value);b.children=this.children;var c=document.createElement(\"canvas\");c.width=this.attribute(\"width\").Length.toPixels(\"x\");c.height=this.attribute(\"height\").Length.toPixels(\"y\");b.render(c.getContext(\"2d\"));return d.createPattern(c,\"repeat\")}};a.Element.pattern.prototype=new a.Element.ElementBase;a.Element.marker=function(c){this.base=a.Element.ElementBase;this.base(c);this.baseRender=this.render;this.render=function(d,b,c){d.translate(b.x,b.y);this.attribute(\"orient\").valueOrDefault(\"auto\")==\n\"auto\"&&d.rotate(c);this.attribute(\"markerUnits\").valueOrDefault(\"strokeWidth\")==\"strokeWidth\"&&d.scale(d.lineWidth,d.lineWidth);d.save();var e=new a.Element.svg;e.attributes.viewBox=new a.Property(\"viewBox\",this.attribute(\"viewBox\").value);e.attributes.refX=new a.Property(\"refX\",this.attribute(\"refX\").value);e.attributes.refY=new a.Property(\"refY\",this.attribute(\"refY\").value);e.attributes.width=new a.Property(\"width\",this.attribute(\"markerWidth\").value);e.attributes.height=new a.Property(\"height\",\nthis.attribute(\"markerHeight\").value);e.attributes.fill=new a.Property(\"fill\",this.attribute(\"fill\").valueOrDefault(\"black\"));e.attributes.stroke=new a.Property(\"stroke\",this.attribute(\"stroke\").valueOrDefault(\"none\"));e.children=this.children;e.render(d);d.restore();this.attribute(\"markerUnits\").valueOrDefault(\"strokeWidth\")==\"strokeWidth\"&&d.scale(1/d.lineWidth,1/d.lineWidth);this.attribute(\"orient\").valueOrDefault(\"auto\")==\"auto\"&&d.rotate(-c);d.translate(-b.x,-b.y)}};a.Element.marker.prototype=\nnew a.Element.ElementBase;a.Element.defs=function(c){this.base=a.Element.ElementBase;this.base(c);this.render=function(){}};a.Element.defs.prototype=new a.Element.ElementBase;a.Element.GradientBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.gradientUnits=this.attribute(\"gradientUnits\").valueOrDefault(\"objectBoundingBox\");this.stops=[];for(c=0;c<this.children.length;c++)this.stops.push(this.children[c]);this.getGradient=function(){};this.createGradient=function(d,b){var c=this;this.attribute(\"xlink:href\").hasValue()&&\n(c=this.attribute(\"xlink:href\").Definition.getDefinition());for(var e=this.getGradient(d,b),f=0;f<c.stops.length;f++)e.addColorStop(c.stops[f].offset,c.stops[f].color);if(this.attribute(\"gradientTransform\").hasValue()){c=a.ViewPort.viewPorts[0];f=new a.Element.rect;f.attributes.x=new a.Property(\"x\",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.y=new a.Property(\"y\",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.width=new a.Property(\"width\",a.MAX_VIRTUAL_PIXELS);f.attributes.height=new a.Property(\"height\",a.MAX_VIRTUAL_PIXELS);\nvar g=new a.Element.g;g.attributes.transform=new a.Property(\"transform\",this.attribute(\"gradientTransform\").value);g.children=[f];f=new a.Element.svg;f.attributes.x=new a.Property(\"x\",0);f.attributes.y=new a.Property(\"y\",0);f.attributes.width=new a.Property(\"width\",c.width);f.attributes.height=new a.Property(\"height\",c.height);f.children=[g];g=document.createElement(\"canvas\");g.width=c.width;g.height=c.height;c=g.getContext(\"2d\");c.fillStyle=e;f.render(c);return c.createPattern(g,\"no-repeat\")}return e}};\na.Element.GradientBase.prototype=new a.Element.ElementBase;a.Element.linearGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits==\"objectBoundingBox\"?c.x()+c.width()*this.attribute(\"x1\").numValue():this.attribute(\"x1\").Length.toPixels(\"x\"),f=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"y1\").numValue():this.attribute(\"y1\").Length.toPixels(\"y\"),g=this.gradientUnits==\"objectBoundingBox\"?\nc.x()+c.width()*this.attribute(\"x2\").numValue():this.attribute(\"x2\").Length.toPixels(\"x\"),c=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"y2\").numValue():this.attribute(\"y2\").Length.toPixels(\"y\");return a.createLinearGradient(e,f,g,c)}};a.Element.linearGradient.prototype=new a.Element.GradientBase;a.Element.radialGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits==\"objectBoundingBox\"?\nc.x()+c.width()*this.attribute(\"cx\").numValue():this.attribute(\"cx\").Length.toPixels(\"x\"),f=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"cy\").numValue():this.attribute(\"cy\").Length.toPixels(\"y\"),g=e,j=f;this.attribute(\"fx\").hasValue()&&(g=this.gradientUnits==\"objectBoundingBox\"?c.x()+c.width()*this.attribute(\"fx\").numValue():this.attribute(\"fx\").Length.toPixels(\"x\"));this.attribute(\"fy\").hasValue()&&(j=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"fy\").numValue():\nthis.attribute(\"fy\").Length.toPixels(\"y\"));c=this.gradientUnits==\"objectBoundingBox\"?(c.width()+c.height())/2*this.attribute(\"r\").numValue():this.attribute(\"r\").Length.toPixels();return a.createRadialGradient(g,j,0,e,f,c)}};a.Element.radialGradient.prototype=new a.Element.GradientBase;a.Element.stop=function(c){this.base=a.Element.ElementBase;this.base(c);this.offset=this.attribute(\"offset\").numValue();c=this.style(\"stop-color\");this.style(\"stop-opacity\").hasValue()&&(c=c.Color.addOpacity(this.style(\"stop-opacity\").value));\nthis.color=c.value};a.Element.stop.prototype=new a.Element.ElementBase;a.Element.AnimateBase=function(c){this.base=a.Element.ElementBase;this.base(c);a.Animations.push(this);this.duration=0;this.begin=this.attribute(\"begin\").Time.toMilliseconds();this.maxDuration=this.begin+this.attribute(\"dur\").Time.toMilliseconds();this.getProperty=function(){var a=this.attribute(\"attributeType\").value,b=this.attribute(\"attributeName\").value;return a==\"CSS\"?this.parent.style(b,!0):this.parent.attribute(b,!0)};this.initialValue=\nnull;this.removed=!1;this.calcValue=function(){return\"\"};this.update=function(a){if(this.initialValue==null)this.initialValue=this.getProperty().value;if(this.duration>this.maxDuration)if(this.attribute(\"repeatCount\").value==\"indefinite\")this.duration=0;else return this.attribute(\"fill\").valueOrDefault(\"remove\")==\"remove\"&&!this.removed?(this.removed=!0,this.getProperty().value=this.initialValue,!0):!1;this.duration+=a;a=!1;if(this.begin<this.duration)a=this.calcValue(),this.attribute(\"type\").hasValue()&&\n(a=this.attribute(\"type\").value+\"(\"+a+\")\"),this.getProperty().value=a,a=!0;return a};this.progress=function(){return(this.duration-this.begin)/(this.maxDuration-this.begin)}};a.Element.AnimateBase.prototype=new a.Element.ElementBase;a.Element.animate=function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=this.attribute(\"from\").numValue(),b=this.attribute(\"to\").numValue();return a+(b-a)*this.progress()}};a.Element.animate.prototype=new a.Element.AnimateBase;a.Element.animateColor=\nfunction(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=new RGBColor(this.attribute(\"from\").value),b=new RGBColor(this.attribute(\"to\").value);if(a.ok&&b.ok){var c=a.r+(b.r-a.r)*this.progress(),e=a.g+(b.g-a.g)*this.progress(),a=a.b+(b.b-a.b)*this.progress();return\"rgb(\"+parseInt(c,10)+\",\"+parseInt(e,10)+\",\"+parseInt(a,10)+\")\"}return this.attribute(\"from\").value}};a.Element.animateColor.prototype=new a.Element.AnimateBase;a.Element.animateTransform=function(c){this.base=\na.Element.animate;this.base(c)};a.Element.animateTransform.prototype=new a.Element.animate;a.Element.font=function(c){this.base=a.Element.ElementBase;this.base(c);this.horizAdvX=this.attribute(\"horiz-adv-x\").numValue();this.isArabic=this.isRTL=!1;this.missingGlyph=this.fontFace=null;this.glyphs=[];for(c=0;c<this.children.length;c++){var d=this.children[c];if(d.type==\"font-face\")this.fontFace=d,d.style(\"font-family\").hasValue()&&(a.Definitions[d.style(\"font-family\").value]=this);else if(d.type==\"missing-glyph\")this.missingGlyph=\nd;else if(d.type==\"glyph\")d.arabicForm!=\"\"?(this.isArabic=this.isRTL=!0,typeof this.glyphs[d.unicode]==\"undefined\"&&(this.glyphs[d.unicode]=[]),this.glyphs[d.unicode][d.arabicForm]=d):this.glyphs[d.unicode]=d}};a.Element.font.prototype=new a.Element.ElementBase;a.Element.fontface=function(c){this.base=a.Element.ElementBase;this.base(c);this.ascent=this.attribute(\"ascent\").value;this.descent=this.attribute(\"descent\").value;this.unitsPerEm=this.attribute(\"units-per-em\").numValue()};a.Element.fontface.prototype=\nnew a.Element.ElementBase;a.Element.missingglyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=0};a.Element.missingglyph.prototype=new a.Element.path;a.Element.glyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=this.attribute(\"horiz-adv-x\").numValue();this.unicode=this.attribute(\"unicode\").value;this.arabicForm=this.attribute(\"arabic-form\").value};a.Element.glyph.prototype=new a.Element.path;a.Element.text=function(c){this.base=a.Element.RenderedElementBase;\nthis.base(c);if(c!=null){this.children=[];for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1?this.addChild(b,!0):b.nodeType==3&&this.addChild(new a.Element.tspan(b),!1)}}this.baseSetContext=this.setContext;this.setContext=function(b){this.baseSetContext(b);if(this.style(\"dominant-baseline\").hasValue())b.textBaseline=this.style(\"dominant-baseline\").value;if(this.style(\"alignment-baseline\").hasValue())b.textBaseline=this.style(\"alignment-baseline\").value};this.renderChildren=\nfunction(b){for(var a=this.style(\"text-anchor\").valueOrDefault(\"start\"),c=this.attribute(\"x\").Length.toPixels(\"x\"),d=this.attribute(\"y\").Length.toPixels(\"y\"),j=0;j<this.children.length;j++){var h=this.children[j];h.attribute(\"x\").hasValue()?h.x=h.attribute(\"x\").Length.toPixels(\"x\"):(h.attribute(\"dx\").hasValue()&&(c+=h.attribute(\"dx\").Length.toPixels(\"x\")),h.x=c);c=h.measureText(b);if(a!=\"start\"&&(j==0||h.attribute(\"x\").hasValue())){for(var l=c,o=j+1;o<this.children.length;o++){var n=this.children[o];\nif(n.attribute(\"x\").hasValue())break;l+=n.measureText(b)}h.x-=a==\"end\"?l:l/2}c=h.x+c;h.attribute(\"y\").hasValue()?h.y=h.attribute(\"y\").Length.toPixels(\"y\"):(h.attribute(\"dy\").hasValue()&&(d+=h.attribute(\"dy\").Length.toPixels(\"y\")),h.y=d);d=h.y;h.render(b)}}};a.Element.text.prototype=new a.Element.RenderedElementBase;a.Element.TextElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getGlyph=function(a,b,c){var e=b[c],f=null;if(a.isArabic){var g=\"isolated\";if((c==0||b[c-\n1]==\" \")&&c<b.length-2&&b[c+1]!=\" \")g=\"terminal\";c>0&&b[c-1]!=\" \"&&c<b.length-2&&b[c+1]!=\" \"&&(g=\"medial\");if(c>0&&b[c-1]!=\" \"&&(c==b.length-1||b[c+1]==\" \"))g=\"initial\";typeof a.glyphs[e]!=\"undefined\"&&(f=a.glyphs[e][g],f==null&&a.glyphs[e].type==\"glyph\"&&(f=a.glyphs[e]))}else f=a.glyphs[e];if(f==null)f=a.missingGlyph;return f};this.renderChildren=function(c){var b=this.parent.style(\"font-family\").Definition.getDefinition();if(b!=null){var k=this.parent.style(\"font-size\").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize),\ne=this.parent.style(\"font-style\").valueOrDefault(a.Font.Parse(a.ctx.font).fontStyle),f=this.getText();b.isRTL&&(f=f.split(\"\").reverse().join(\"\"));for(var g=a.ToNumberArray(this.parent.attribute(\"dx\").value),j=0;j<f.length;j++){var h=this.getGlyph(b,f,j),l=k/b.fontFace.unitsPerEm;c.translate(this.x,this.y);c.scale(l,-l);var o=c.lineWidth;c.lineWidth=c.lineWidth*b.fontFace.unitsPerEm/k;e==\"italic\"&&c.transform(1,0,0.4,1,0,0);h.render(c);e==\"italic\"&&c.transform(1,0,-0.4,1,0,0);c.lineWidth=o;c.scale(1/\nl,-1/l);c.translate(-this.x,-this.y);this.x+=k*(h.horizAdvX||b.horizAdvX)/b.fontFace.unitsPerEm;typeof g[j]!=\"undefined\"&&!isNaN(g[j])&&(this.x+=g[j])}}else c.strokeStyle!=\"\"&&c.strokeText(a.compressSpaces(this.getText()),this.x,this.y),c.fillStyle!=\"\"&&c.fillText(a.compressSpaces(this.getText()),this.x,this.y)};this.getText=function(){};this.measureText=function(c){var b=this.parent.style(\"font-family\").Definition.getDefinition();if(b!=null){var c=this.parent.style(\"font-size\").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize),\nk=0,e=this.getText();b.isRTL&&(e=e.split(\"\").reverse().join(\"\"));for(var f=a.ToNumberArray(this.parent.attribute(\"dx\").value),g=0;g<e.length;g++){var j=this.getGlyph(b,e,g);k+=(j.horizAdvX||b.horizAdvX)*c/b.fontFace.unitsPerEm;typeof f[g]!=\"undefined\"&&!isNaN(f[g])&&(k+=f[g])}return k}b=a.compressSpaces(this.getText());if(!c.measureText)return b.length*10;c.save();this.setContext(c);b=c.measureText(b).width;c.restore();return b}};a.Element.TextElementBase.prototype=new a.Element.RenderedElementBase;\na.Element.tspan=function(c){this.base=a.Element.TextElementBase;this.base(c);this.text=c.nodeType==3?c.nodeValue:c.childNodes.length>0?c.childNodes[0].nodeValue:c.text;this.getText=function(){return this.text}};a.Element.tspan.prototype=new a.Element.TextElementBase;a.Element.tref=function(c){this.base=a.Element.TextElementBase;this.base(c);this.getText=function(){var a=this.attribute(\"xlink:href\").Definition.getDefinition();if(a!=null)return a.children[0].getText()}};a.Element.tref.prototype=new a.Element.TextElementBase;\na.Element.a=function(c){this.base=a.Element.TextElementBase;this.base(c);this.hasText=!0;for(var d=0;d<c.childNodes.length;d++)if(c.childNodes[d].nodeType!=3)this.hasText=!1;this.text=this.hasText?c.childNodes[0].nodeValue:\"\";this.getText=function(){return this.text};this.baseRenderChildren=this.renderChildren;this.renderChildren=function(b){if(this.hasText){this.baseRenderChildren(b);var c=new a.Property(\"fontSize\",a.Font.Parse(a.ctx.font).fontSize);a.Mouse.checkBoundingBox(this,new a.BoundingBox(this.x,\nthis.y-c.Length.toPixels(\"y\"),this.x+this.measureText(b),this.y))}else c=new a.Element.g,c.children=this.children,c.parent=this,c.render(b)};this.onclick=function(){window.open(this.attribute(\"xlink:href\").value)};this.onmousemove=function(){a.ctx.canvas.style.cursor=\"pointer\"}};a.Element.a.prototype=new a.Element.TextElementBase;a.Element.image=function(c){this.base=a.Element.RenderedElementBase;this.base(c);a.Images.push(this);this.img=document.createElement(\"img\");this.loaded=!1;var d=this;this.img.onload=\nfunction(){d.loaded=!0};this.img.src=this.attribute(\"xlink:href\").value;this.renderChildren=function(b){var c=this.attribute(\"x\").Length.toPixels(\"x\"),d=this.attribute(\"y\").Length.toPixels(\"y\"),f=this.attribute(\"width\").Length.toPixels(\"x\"),g=this.attribute(\"height\").Length.toPixels(\"y\");f==0||g==0||(b.save(),b.translate(c,d),a.AspectRatio(b,this.attribute(\"preserveAspectRatio\").value,f,this.img.width,g,this.img.height,0,0),b.drawImage(this.img,0,0),b.restore())}};a.Element.image.prototype=new a.Element.RenderedElementBase;\na.Element.g=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getBoundingBox=function(){for(var c=new a.BoundingBox,b=0;b<this.children.length;b++)c.addBoundingBox(this.children[b].getBoundingBox());return c}};a.Element.g.prototype=new a.Element.RenderedElementBase;a.Element.symbol=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(c){this.baseSetContext(c);if(this.attribute(\"viewBox\").hasValue()){var b=\na.ToNumberArray(this.attribute(\"viewBox\").value),k=b[0],e=b[1];width=b[2];height=b[3];a.AspectRatio(c,this.attribute(\"preserveAspectRatio\").value,this.attribute(\"width\").Length.toPixels(\"x\"),width,this.attribute(\"height\").Length.toPixels(\"y\"),height,k,e);a.ViewPort.SetCurrent(b[2],b[3])}}};a.Element.symbol.prototype=new a.Element.RenderedElementBase;a.Element.style=function(c){this.base=a.Element.ElementBase;this.base(c);for(var c=c.childNodes[0].nodeValue+(c.childNodes.length>1?c.childNodes[1].nodeValue:\n\"\"),c=c.replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*\\/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm,\"\"),c=a.compressSpaces(c),c=c.split(\"}\"),d=0;d<c.length;d++)if(a.trim(c[d])!=\"\")for(var b=c[d].split(\"{\"),k=b[0].split(\",\"),b=b[1].split(\";\"),e=0;e<k.length;e++){var f=a.trim(k[e]);if(f!=\"\"){for(var g={},j=0;j<b.length;j++){var h=b[j].indexOf(\":\"),l=b[j].substr(0,h),h=b[j].substr(h+1,b[j].length-h);l!=null&&h!=null&&(g[a.trim(l)]=new a.Property(a.trim(l),a.trim(h)))}a.Styles[f]=g;if(f==\"@font-face\"){f=g[\"font-family\"].value.replace(/\"/g,\n\"\");g=g.src.value.split(\",\");for(j=0;j<g.length;j++)if(g[j].indexOf('format(\"svg\")')>0){l=g[j].indexOf(\"url\");h=g[j].indexOf(\")\",l);l=g[j].substr(l+5,h-l-6);l=a.parseXml(a.ajax(l)).getElementsByTagName(\"font\");for(h=0;h<l.length;h++){var o=a.CreateElement(l[h]);a.Definitions[f]=o}}}}}};a.Element.style.prototype=new a.Element.ElementBase;a.Element.use=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(a){this.baseSetContext(a);\nthis.attribute(\"x\").hasValue()&&a.translate(this.attribute(\"x\").Length.toPixels(\"x\"),0);this.attribute(\"y\").hasValue()&&a.translate(0,this.attribute(\"y\").Length.toPixels(\"y\"))};this.getDefinition=function(){var a=this.attribute(\"xlink:href\").Definition.getDefinition();if(this.attribute(\"width\").hasValue())a.attribute(\"width\",!0).value=this.attribute(\"width\").value;if(this.attribute(\"height\").hasValue())a.attribute(\"height\",!0).value=this.attribute(\"height\").value;return a};this.path=function(a){var b=\nthis.getDefinition();b!=null&&b.path(a)};this.renderChildren=function(a){var b=this.getDefinition();b!=null&&b.render(a)}};a.Element.use.prototype=new a.Element.RenderedElementBase;a.Element.mask=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=this.attribute(\"x\").Length.toPixels(\"x\"),e=this.attribute(\"y\").Length.toPixels(\"y\"),f=this.attribute(\"width\").Length.toPixels(\"x\"),g=this.attribute(\"height\").Length.toPixels(\"y\"),j=b.attribute(\"mask\").value;b.attribute(\"mask\").value=\n\"\";var h=document.createElement(\"canvas\");h.width=c+f;h.height=e+g;var l=h.getContext(\"2d\");this.renderChildren(l);var o=document.createElement(\"canvas\");o.width=c+f;o.height=e+g;var n=o.getContext(\"2d\");b.render(n);n.globalCompositeOperation=\"destination-in\";n.fillStyle=l.createPattern(h,\"no-repeat\");n.fillRect(0,0,c+f,e+g);a.fillStyle=n.createPattern(o,\"no-repeat\");a.fillRect(0,0,c+f,e+g);b.attribute(\"mask\").value=j};this.render=function(){}};a.Element.mask.prototype=new a.Element.ElementBase;a.Element.clipPath=\nfunction(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a){for(var b=0;b<this.children.length;b++)this.children[b].path&&(this.children[b].path(a),a.clip())};this.render=function(){}};a.Element.clipPath.prototype=new a.Element.ElementBase;a.Element.filter=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=b.getBoundingBox(),e=this.attribute(\"x\").Length.toPixels(\"x\"),f=this.attribute(\"y\").Length.toPixels(\"y\");if(e==0||f==0)e=c.x1,f=c.y1;var g=\nthis.attribute(\"width\").Length.toPixels(\"x\"),j=this.attribute(\"height\").Length.toPixels(\"y\");if(g==0||j==0)g=c.width(),j=c.height();c=b.style(\"filter\").value;b.style(\"filter\").value=\"\";var h=0.2*g,l=0.2*j,o=document.createElement(\"canvas\");o.width=g+2*h;o.height=j+2*l;var n=o.getContext(\"2d\");n.translate(-e+h,-f+l);b.render(n);for(var q=0;q<this.children.length;q++)this.children[q].apply(n,0,0,g+2*h,j+2*l);a.drawImage(o,0,0,g+2*h,j+2*l,e-h,f-l,g+2*h,j+2*l);b.style(\"filter\",!0).value=c};this.render=\nfunction(){}};a.Element.filter.prototype=new a.Element.ElementBase;a.Element.feGaussianBlur=function(c){function d(a,c,d,f,g){for(var j=0;j<g;j++)for(var h=0;h<f;h++)for(var l=a[j*f*4+h*4+3]/255,o=0;o<4;o++){for(var n=d[0]*(l==0?255:a[j*f*4+h*4+o])*(l==0||o==3?1:l),q=1;q<d.length;q++){var p=Math.max(h-q,0),m=a[j*f*4+p*4+3]/255,p=Math.min(h+q,f-1),p=a[j*f*4+p*4+3]/255,s=d[q],r;m==0?r=255:(r=Math.max(h-q,0),r=a[j*f*4+r*4+o]);m=r*(m==0||o==3?1:m);p==0?r=255:(r=Math.min(h+q,f-1),r=a[j*f*4+r*4+o]);n+=\ns*(m+r*(p==0||o==3?1:p))}c[h*g*4+j*4+o]=n}}this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,c,e,f,g){var e=this.attribute(\"stdDeviation\").numValue(),c=a.getImageData(0,0,f,g),e=Math.max(e,0.01),j=Math.ceil(e*4)+1;mask=[];for(var h=0;h<j;h++)mask[h]=Math.exp(-0.5*(h/e)*(h/e));e=mask;j=0;for(h=1;h<e.length;h++)j+=Math.abs(e[h]);j=2*j+Math.abs(e[0]);for(h=0;h<e.length;h++)e[h]/=j;tmp=[];d(c.data,tmp,e,f,g);d(tmp,c.data,e,g,f);a.clearRect(0,0,f,g);a.putImageData(c,0,0)}};a.Element.filter.prototype=\nnew a.Element.feGaussianBlur;a.Element.title=function(){};a.Element.title.prototype=new a.Element.ElementBase;a.Element.desc=function(){};a.Element.desc.prototype=new a.Element.ElementBase;a.Element.MISSING=function(a){console.log(\"ERROR: Element '\"+a.nodeName+\"' not yet implemented.\")};a.Element.MISSING.prototype=new a.Element.ElementBase;a.CreateElement=function(c){var d=c.nodeName.replace(/^[^:]+:/,\"\"),d=d.replace(/\\-/g,\"\"),b=null,b=typeof a.Element[d]!=\"undefined\"?new a.Element[d](c):new a.Element.MISSING(c);\nb.type=c.nodeName;return b};a.load=function(c,d){a.loadXml(c,a.ajax(d))};a.loadXml=function(c,d){a.loadXmlDoc(c,a.parseXml(d))};a.loadXmlDoc=function(c,d){a.init(c);var b=function(a){for(var b=c.canvas;b;)a.x-=b.offsetLeft,a.y-=b.offsetTop,b=b.offsetParent;window.scrollX&&(a.x+=window.scrollX);window.scrollY&&(a.y+=window.scrollY);return a};if(a.opts.ignoreMouse!=!0)c.canvas.onclick=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onclick(c.x,c.y)},\nc.canvas.onmousemove=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onmousemove(c.x,c.y)};var k=a.CreateElement(d.documentElement),e=k.root=!0,f=function(){a.ViewPort.Clear();c.canvas.parentNode&&a.ViewPort.SetCurrent(c.canvas.parentNode.clientWidth,c.canvas.parentNode.clientHeight);if(a.opts.ignoreDimensions!=!0){if(k.style(\"width\").hasValue())c.canvas.width=k.style(\"width\").Length.toPixels(\"x\"),c.canvas.style.width=c.canvas.width+\"px\";if(k.style(\"height\").hasValue())c.canvas.height=\nk.style(\"height\").Length.toPixels(\"y\"),c.canvas.style.height=c.canvas.height+\"px\"}var b=c.canvas.clientWidth||c.canvas.width,d=c.canvas.clientHeight||c.canvas.height;a.ViewPort.SetCurrent(b,d);if(a.opts!=null&&a.opts.offsetX!=null)k.attribute(\"x\",!0).value=a.opts.offsetX;if(a.opts!=null&&a.opts.offsetY!=null)k.attribute(\"y\",!0).value=a.opts.offsetY;if(a.opts!=null&&a.opts.scaleWidth!=null&&a.opts.scaleHeight!=null){var f=1,g=1;k.attribute(\"width\").hasValue()&&(f=k.attribute(\"width\").Length.toPixels(\"x\")/\na.opts.scaleWidth);k.attribute(\"height\").hasValue()&&(g=k.attribute(\"height\").Length.toPixels(\"y\")/a.opts.scaleHeight);k.attribute(\"width\",!0).value=a.opts.scaleWidth;k.attribute(\"height\",!0).value=a.opts.scaleHeight;k.attribute(\"viewBox\",!0).value=\"0 0 \"+b*f+\" \"+d*g;k.attribute(\"preserveAspectRatio\",!0).value=\"none\"}a.opts.ignoreClear!=!0&&c.clearRect(0,0,b,d);k.render(c);e&&(e=!1,a.opts!=null&&typeof a.opts.renderCallback==\"function\"&&a.opts.renderCallback())},g=!0;a.ImagesLoaded()&&(g=!1,f());\na.intervalID=setInterval(function(){var b=!1;g&&a.ImagesLoaded()&&(g=!1,b=!0);a.opts.ignoreMouse!=!0&&(b|=a.Mouse.hasEvents());if(a.opts.ignoreAnimation!=!0)for(var c=0;c<a.Animations.length;c++)b|=a.Animations[c].update(1E3/a.FRAMERATE);a.opts!=null&&typeof a.opts.forceRedraw==\"function\"&&a.opts.forceRedraw()==!0&&(b=!0);b&&(f(),a.Mouse.runEvents())},1E3/a.FRAMERATE)};a.stop=function(){a.intervalID&&clearInterval(a.intervalID)};a.Mouse=new function(){this.events=[];this.hasEvents=function(){return this.events.length!=\n0};this.onclick=function(a,d){this.events.push({type:\"onclick\",x:a,y:d,run:function(a){if(a.onclick)a.onclick()}})};this.onmousemove=function(a,d){this.events.push({type:\"onmousemove\",x:a,y:d,run:function(a){if(a.onmousemove)a.onmousemove()}})};this.eventElements=[];this.checkPath=function(a,d){for(var b=0;b<this.events.length;b++){var k=this.events[b];d.isPointInPath&&d.isPointInPath(k.x,k.y)&&(this.eventElements[b]=a)}};this.checkBoundingBox=function(a,d){for(var b=0;b<this.events.length;b++){var k=\nthis.events[b];d.isPointInBox(k.x,k.y)&&(this.eventElements[b]=a)}};this.runEvents=function(){a.ctx.canvas.style.cursor=\"\";for(var c=0;c<this.events.length;c++)for(var d=this.events[c],b=this.eventElements[c];b;)d.run(b),b=b.parent;this.events=[];this.eventElements=[]}};return a}this.canvg=function(a,c,d){if(a==null&&c==null&&d==null)for(var c=document.getElementsByTagName(\"svg\"),b=0;b<c.length;b++){a=c[b];d=document.createElement(\"canvas\");d.width=a.clientWidth;d.height=a.clientHeight;a.parentNode.insertBefore(d,\na);a.parentNode.removeChild(a);var k=document.createElement(\"div\");k.appendChild(a);canvg(d,k.innerHTML)}else d=d||{},typeof a==\"string\"&&(a=document.getElementById(a)),a.svg==null?(b=m(),a.svg=b):(b=a.svg,b.stop()),b.opts=d,a=a.getContext(\"2d\"),typeof c.documentElement!=\"undefined\"?b.loadXmlDoc(a,c):c.substr(0,1)==\"<\"?b.loadXml(a,c):b.load(a,c)}})();\nif(CanvasRenderingContext2D)CanvasRenderingContext2D.prototype.drawSvg=function(m,a,c,d,b){canvg(this.canvas,m,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:a,offsetY:c,scaleWidth:d,scaleHeight:b})};\n(function(m){var a=m.css,c=m.CanVGRenderer,d=m.SVGRenderer,b=m.extend,k=m.merge,e=m.addEvent,f=m.createElement,g=m.discardElement;b(c.prototype,d.prototype);b(c.prototype,{create:function(a,b,c,d){this.setContainer(b,c,d);this.configure(a)},setContainer:function(a,b,c){var d=a.style,e=a.parentNode,g=d.left,d=d.top,k=a.offsetWidth,m=a.offsetHeight,s={visibility:\"hidden\",position:\"absolute\"};this.init.apply(this,[a,b,c]);this.canvas=f(\"canvas\",{width:k,height:m},{position:\"relative\",left:g,top:d},a);\nthis.ttLine=f(\"div\",null,s,e);this.ttDiv=f(\"div\",null,s,e);this.ttTimer=void 0;this.hiddenSvg=a=f(\"div\",{width:k,height:m},{visibility:\"hidden\",left:g,top:d},e);a.appendChild(this.box)},configure:function(b){var c=this,d=b.options.tooltip,f=d.borderWidth,g=c.ttDiv,m=d.style,p=c.ttLine,t=parseInt(m.padding,10),m=k(m,{padding:t+\"px\",\"background-color\":d.backgroundColor,\"border-style\":\"solid\",\"border-width\":f+\"px\",\"border-radius\":d.borderRadius+\"px\"});d.shadow&&(m=k(m,{\"box-shadow\":\"1px 1px 3px gray\",\n\"-webkit-box-shadow\":\"1px 1px 3px gray\"}));a(g,m);a(p,{\"border-left\":\"1px solid darkgray\"});e(b,\"tooltipRefresh\",function(d){var e=b.container,f=e.offsetLeft,e=e.offsetTop,k;g.innerHTML=d.text;k=b.tooltip.getPosition(g.offsetWidth,g.offsetHeight,{plotX:d.x,plotY:d.y});a(g,{visibility:\"visible\",left:k.x+\"px\",top:k.y+\"px\",\"border-color\":d.borderColor});a(p,{visibility:\"visible\",left:f+d.x+\"px\",top:e+b.plotTop+\"px\",height:b.plotHeight+\"px\"});c.ttTimer!==void 0&&clearTimeout(c.ttTimer);c.ttTimer=setTimeout(function(){a(g,\n{visibility:\"hidden\"});a(p,{visibility:\"hidden\"})},3E3)})},destroy:function(){g(this.canvas);this.ttTimer!==void 0&&clearTimeout(this.ttTimer);g(this.ttLine);g(this.ttDiv);g(this.hiddenSvg);return d.prototype.destroy.apply(this)},color:function(a,b,c){a&&a.linearGradient&&(a=a.stops[a.stops.length-1][1]);return d.prototype.color.call(this,a,b,c)},draw:function(){window.canvg(this.canvas,this.hiddenSvg.innerHTML)}})})(Highcharts);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/canvas-tools.src.js",
    "content": "/**\n * @license A class to parse color values\n * @author Stoyan Stefanov <sstoo@gmail.com>\n * @link   http://www.phpied.com/rgb-color-parser-in-javascript/\n * Use it if you like it\n *\n */\nfunction RGBColor(color_string)\n{\n    this.ok = false;\n\n    // strip any leading #\n    if (color_string.charAt(0) == '#') { // remove # if any\n        color_string = color_string.substr(1,6);\n    }\n\n    color_string = color_string.replace(/ /g,'');\n    color_string = color_string.toLowerCase();\n\n    // before getting into regexps, try simple matches\n    // and overwrite the input\n    var simple_colors = {\n        aliceblue: 'f0f8ff',\n        antiquewhite: 'faebd7',\n        aqua: '00ffff',\n        aquamarine: '7fffd4',\n        azure: 'f0ffff',\n        beige: 'f5f5dc',\n        bisque: 'ffe4c4',\n        black: '000000',\n        blanchedalmond: 'ffebcd',\n        blue: '0000ff',\n        blueviolet: '8a2be2',\n        brown: 'a52a2a',\n        burlywood: 'deb887',\n        cadetblue: '5f9ea0',\n        chartreuse: '7fff00',\n        chocolate: 'd2691e',\n        coral: 'ff7f50',\n        cornflowerblue: '6495ed',\n        cornsilk: 'fff8dc',\n        crimson: 'dc143c',\n        cyan: '00ffff',\n        darkblue: '00008b',\n        darkcyan: '008b8b',\n        darkgoldenrod: 'b8860b',\n        darkgray: 'a9a9a9',\n        darkgreen: '006400',\n        darkkhaki: 'bdb76b',\n        darkmagenta: '8b008b',\n        darkolivegreen: '556b2f',\n        darkorange: 'ff8c00',\n        darkorchid: '9932cc',\n        darkred: '8b0000',\n        darksalmon: 'e9967a',\n        darkseagreen: '8fbc8f',\n        darkslateblue: '483d8b',\n        darkslategray: '2f4f4f',\n        darkturquoise: '00ced1',\n        darkviolet: '9400d3',\n        deeppink: 'ff1493',\n        deepskyblue: '00bfff',\n        dimgray: '696969',\n        dodgerblue: '1e90ff',\n        feldspar: 'd19275',\n        firebrick: 'b22222',\n        floralwhite: 'fffaf0',\n        forestgreen: '228b22',\n        fuchsia: 'ff00ff',\n        gainsboro: 'dcdcdc',\n        ghostwhite: 'f8f8ff',\n        gold: 'ffd700',\n        goldenrod: 'daa520',\n        gray: '808080',\n        green: '008000',\n        greenyellow: 'adff2f',\n        honeydew: 'f0fff0',\n        hotpink: 'ff69b4',\n        indianred : 'cd5c5c',\n        indigo : '4b0082',\n        ivory: 'fffff0',\n        khaki: 'f0e68c',\n        lavender: 'e6e6fa',\n        lavenderblush: 'fff0f5',\n        lawngreen: '7cfc00',\n        lemonchiffon: 'fffacd',\n        lightblue: 'add8e6',\n        lightcoral: 'f08080',\n        lightcyan: 'e0ffff',\n        lightgoldenrodyellow: 'fafad2',\n        lightgrey: 'd3d3d3',\n        lightgreen: '90ee90',\n        lightpink: 'ffb6c1',\n        lightsalmon: 'ffa07a',\n        lightseagreen: '20b2aa',\n        lightskyblue: '87cefa',\n        lightslateblue: '8470ff',\n        lightslategray: '778899',\n        lightsteelblue: 'b0c4de',\n        lightyellow: 'ffffe0',\n        lime: '00ff00',\n        limegreen: '32cd32',\n        linen: 'faf0e6',\n        magenta: 'ff00ff',\n        maroon: '800000',\n        mediumaquamarine: '66cdaa',\n        mediumblue: '0000cd',\n        mediumorchid: 'ba55d3',\n        mediumpurple: '9370d8',\n        mediumseagreen: '3cb371',\n        mediumslateblue: '7b68ee',\n        mediumspringgreen: '00fa9a',\n        mediumturquoise: '48d1cc',\n        mediumvioletred: 'c71585',\n        midnightblue: '191970',\n        mintcream: 'f5fffa',\n        mistyrose: 'ffe4e1',\n        moccasin: 'ffe4b5',\n        navajowhite: 'ffdead',\n        navy: '000080',\n        oldlace: 'fdf5e6',\n        olive: '808000',\n        olivedrab: '6b8e23',\n        orange: 'ffa500',\n        orangered: 'ff4500',\n        orchid: 'da70d6',\n        palegoldenrod: 'eee8aa',\n        palegreen: '98fb98',\n        paleturquoise: 'afeeee',\n        palevioletred: 'd87093',\n        papayawhip: 'ffefd5',\n        peachpuff: 'ffdab9',\n        peru: 'cd853f',\n        pink: 'ffc0cb',\n        plum: 'dda0dd',\n        powderblue: 'b0e0e6',\n        purple: '800080',\n        red: 'ff0000',\n        rosybrown: 'bc8f8f',\n        royalblue: '4169e1',\n        saddlebrown: '8b4513',\n        salmon: 'fa8072',\n        sandybrown: 'f4a460',\n        seagreen: '2e8b57',\n        seashell: 'fff5ee',\n        sienna: 'a0522d',\n        silver: 'c0c0c0',\n        skyblue: '87ceeb',\n        slateblue: '6a5acd',\n        slategray: '708090',\n        snow: 'fffafa',\n        springgreen: '00ff7f',\n        steelblue: '4682b4',\n        tan: 'd2b48c',\n        teal: '008080',\n        thistle: 'd8bfd8',\n        tomato: 'ff6347',\n        turquoise: '40e0d0',\n        violet: 'ee82ee',\n        violetred: 'd02090',\n        wheat: 'f5deb3',\n        white: 'ffffff',\n        whitesmoke: 'f5f5f5',\n        yellow: 'ffff00',\n        yellowgreen: '9acd32'\n    };\n    for (var key in simple_colors) {\n        if (color_string == key) {\n            color_string = simple_colors[key];\n        }\n    }\n    // emd of simple type-in colors\n\n    // array of color definition objects\n    var color_defs = [\n        {\n            re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n            example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1]),\n                    parseInt(bits[2]),\n                    parseInt(bits[3])\n                ];\n            }\n        },\n        {\n            re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n            example: ['#00ff00', '336699'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1], 16),\n                    parseInt(bits[2], 16),\n                    parseInt(bits[3], 16)\n                ];\n            }\n        },\n        {\n            re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n            example: ['#fb0', 'f0f'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1] + bits[1], 16),\n                    parseInt(bits[2] + bits[2], 16),\n                    parseInt(bits[3] + bits[3], 16)\n                ];\n            }\n        }\n    ];\n\n    // search through the definitions to find a match\n    for (var i = 0; i < color_defs.length; i++) {\n        var re = color_defs[i].re;\n        var processor = color_defs[i].process;\n        var bits = re.exec(color_string);\n        if (bits) {\n            channels = processor(bits);\n            this.r = channels[0];\n            this.g = channels[1];\n            this.b = channels[2];\n            this.ok = true;\n        }\n\n    }\n\n    // validate/cleanup values\n    this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);\n    this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);\n    this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);\n\n    // some getters\n    this.toRGB = function () {\n        return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';\n    }\n    this.toHex = function () {\n        var r = this.r.toString(16);\n        var g = this.g.toString(16);\n        var b = this.b.toString(16);\n        if (r.length == 1) r = '0' + r;\n        if (g.length == 1) g = '0' + g;\n        if (b.length == 1) b = '0' + b;\n        return '#' + r + g + b;\n    }\n\n    // help\n    this.getHelpXML = function () {\n\n        var examples = new Array();\n        // add regexps\n        for (var i = 0; i < color_defs.length; i++) {\n            var example = color_defs[i].example;\n            for (var j = 0; j < example.length; j++) {\n                examples[examples.length] = example[j];\n            }\n        }\n        // add type-in colors\n        for (var sc in simple_colors) {\n            examples[examples.length] = sc;\n        }\n\n        var xml = document.createElement('ul');\n        xml.setAttribute('id', 'rgbcolor-examples');\n        for (var i = 0; i < examples.length; i++) {\n            try {\n                var list_item = document.createElement('li');\n                var list_color = new RGBColor(examples[i]);\n                var example_div = document.createElement('div');\n                example_div.style.cssText =\n                        'margin: 3px; '\n                        + 'border: 1px solid black; '\n                        + 'background:' + list_color.toHex() + '; '\n                        + 'color:' + list_color.toHex()\n                ;\n                example_div.appendChild(document.createTextNode('test'));\n                var list_item_value = document.createTextNode(\n                    ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()\n                );\n                list_item.appendChild(example_div);\n                list_item.appendChild(list_item_value);\n                xml.appendChild(list_item);\n\n            } catch(e){}\n        }\n        return xml;\n\n    }\n\n}\n\n/**\n * @license canvg.js - Javascript SVG parser and renderer on Canvas\n * MIT Licensed \n * Gabe Lerner (gabelerner@gmail.com)\n * http://code.google.com/p/canvg/\n *\n * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/\n *\n */\nif(!window.console) {\n\twindow.console = {};\n\twindow.console.log = function(str) {};\n\twindow.console.dir = function(str) {};\n}\n\nif(!Array.prototype.indexOf){\n\tArray.prototype.indexOf = function(obj){\n\t\tfor(var i=0; i<this.length; i++){\n\t\t\tif(this[i]==obj){\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n}\n\n(function(){\n\t// canvg(target, s)\n\t// empty parameters: replace all 'svg' elements on page with 'canvas' elements\n\t// target: canvas element or the id of a canvas element\n\t// s: svg string, url to svg file, or xml document\n\t// opts: optional hash of options\n\t//\t\t ignoreMouse: true => ignore mouse events\n\t//\t\t ignoreAnimation: true => ignore animations\n\t//\t\t ignoreDimensions: true => does not try to resize canvas\n\t//\t\t ignoreClear: true => does not clear canvas\n\t//\t\t offsetX: int => draws at a x offset\n\t//\t\t offsetY: int => draws at a y offset\n\t//\t\t scaleWidth: int => scales horizontally to width\n\t//\t\t scaleHeight: int => scales vertically to height\n\t//\t\t renderCallback: function => will call the function after the first render is completed\n\t//\t\t forceRedraw: function => will call the function on every frame, if it returns true, will redraw\n\tthis.canvg = function (target, s, opts) {\n\t\t// no parameters\n\t\tif (target == null && s == null && opts == null) {\n\t\t\tvar svgTags = document.getElementsByTagName('svg');\n\t\t\tfor (var i=0; i<svgTags.length; i++) {\n\t\t\t\tvar svgTag = svgTags[i];\n\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\tc.width = svgTag.clientWidth;\n\t\t\t\tc.height = svgTag.clientHeight;\n\t\t\t\tsvgTag.parentNode.insertBefore(c, svgTag);\n\t\t\t\tsvgTag.parentNode.removeChild(svgTag);\n\t\t\t\tvar div = document.createElement('div');\n\t\t\t\tdiv.appendChild(svgTag);\n\t\t\t\tcanvg(c, div.innerHTML);\n\t\t\t}\n\t\t\treturn;\n\t\t}\t\n\t\topts = opts || {};\n\t\n\t\tif (typeof target == 'string') {\n\t\t\ttarget = document.getElementById(target);\n\t\t}\n\t\t\n\t\t// reuse class per canvas\n\t\tvar svg;\n\t\tif (target.svg == null) {\n\t\t\tsvg = build();\n\t\t\ttarget.svg = svg;\n\t\t}\n\t\telse {\n\t\t\tsvg = target.svg;\n\t\t\tsvg.stop();\n\t\t}\n\t\tsvg.opts = opts;\n\t\t\n\t\tvar ctx = target.getContext('2d');\n\t\tif (typeof(s.documentElement) != 'undefined') {\n\t\t\t// load from xml doc\n\t\t\tsvg.loadXmlDoc(ctx, s);\n\t\t}\n\t\telse if (s.substr(0,1) == '<') {\n\t\t\t// load from xml string\n\t\t\tsvg.loadXml(ctx, s);\n\t\t}\n\t\telse {\n\t\t\t// load from url\n\t\t\tsvg.load(ctx, s);\n\t\t}\n\t}\n\n\tfunction build() {\n\t\tvar svg = { };\n\t\t\n\t\tsvg.FRAMERATE = 30;\n\t\tsvg.MAX_VIRTUAL_PIXELS = 30000;\n\t\t\n\t\t// globals\n\t\tsvg.init = function(ctx) {\n\t\t\tsvg.Definitions = {};\n\t\t\tsvg.Styles = {};\n\t\t\tsvg.Animations = [];\n\t\t\tsvg.Images = [];\n\t\t\tsvg.ctx = ctx;\n\t\t\tsvg.ViewPort = new (function () {\n\t\t\t\tthis.viewPorts = [];\n\t\t\t\tthis.Clear = function() { this.viewPorts = []; }\n\t\t\t\tthis.SetCurrent = function(width, height) { this.viewPorts.push({ width: width, height: height }); }\n\t\t\t\tthis.RemoveCurrent = function() { this.viewPorts.pop(); }\n\t\t\t\tthis.Current = function() { return this.viewPorts[this.viewPorts.length - 1]; }\n\t\t\t\tthis.width = function() { return this.Current().width; }\n\t\t\t\tthis.height = function() { return this.Current().height; }\n\t\t\t\tthis.ComputeSize = function(d) {\n\t\t\t\t\tif (d != null && typeof(d) == 'number') return d;\n\t\t\t\t\tif (d == 'x') return this.width();\n\t\t\t\t\tif (d == 'y') return this.height();\n\t\t\t\t\treturn Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2);\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tsvg.init();\n\t\t\n\t\t// images loaded\n\t\tsvg.ImagesLoaded = function() { \n\t\t\tfor (var i=0; i<svg.Images.length; i++) {\n\t\t\t\tif (!svg.Images[i].loaded) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t// trim\n\t\tsvg.trim = function(s) { return s.replace(/^\\s+|\\s+$/g, ''); }\n\t\t\n\t\t// compress spaces\n\t\tsvg.compressSpaces = function(s) { return s.replace(/[\\s\\r\\t\\n]+/gm,' '); }\n\t\t\n\t\t// ajax\n\t\tsvg.ajax = function(url) {\n\t\t\tvar AJAX;\n\t\t\tif(window.XMLHttpRequest){AJAX=new XMLHttpRequest();}\n\t\t\telse{AJAX=new ActiveXObject('Microsoft.XMLHTTP');}\n\t\t\tif(AJAX){\n\t\t\t   AJAX.open('GET',url,false);\n\t\t\t   AJAX.send(null);\n\t\t\t   return AJAX.responseText;\n\t\t\t}\n\t\t\treturn null;\n\t\t} \n\t\t\n\t\t// parse xml\n\t\tsvg.parseXml = function(xml) {\n\t\t\tif (window.DOMParser)\n\t\t\t{\n\t\t\t\tvar parser = new DOMParser();\n\t\t\t\treturn parser.parseFromString(xml, 'text/xml');\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\txml = xml.replace(/<!DOCTYPE svg[^>]*>/, '');\n\t\t\t\tvar xmlDoc = new ActiveXObject('Microsoft.XMLDOM');\n\t\t\t\txmlDoc.async = 'false';\n\t\t\t\txmlDoc.loadXML(xml); \n\t\t\t\treturn xmlDoc;\n\t\t\t}\t\t\n\t\t}\n\t\t\n\t\tsvg.Property = function(name, value) {\n\t\t\tthis.name = name;\n\t\t\tthis.value = value;\n\t\t\t\n\t\t\tthis.hasValue = function() {\n\t\t\t\treturn (this.value != null && this.value !== '');\n\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t// return the numerical value of the property\n\t\t\tthis.numValue = function() {\n\t\t\t\tif (!this.hasValue()) return 0;\n\t\t\t\t\n\t\t\t\tvar n = parseFloat(this.value);\n\t\t\t\tif ((this.value + '').match(/%$/)) {\n\t\t\t\t\tn = n / 100.0;\n\t\t\t\t}\n\t\t\t\treturn n;\n\t\t\t}\n\t\t\t\n\t\t\tthis.valueOrDefault = function(def) {\n\t\t\t\tif (this.hasValue()) return this.value;\n\t\t\t\treturn def;\n\t\t\t}\n\t\t\t\n\t\t\tthis.numValueOrDefault = function(def) {\n\t\t\t\tif (this.hasValue()) return this.numValue();\n\t\t\t\treturn def;\n\t\t\t}\n\t\t\t\n\t\t\t/* EXTENSIONS */\n\t\t\tvar that = this;\n\t\t\t\n\t\t\t// color extensions\n\t\t\tthis.Color = {\n\t\t\t\t// augment the current color value with the opacity\n\t\t\t\taddOpacity: function(opacity) {\n\t\t\t\t\tvar newValue = that.value;\n\t\t\t\t\tif (opacity != null && opacity != '') {\n\t\t\t\t\t\tvar color = new RGBColor(that.value);\n\t\t\t\t\t\tif (color.ok) {\n\t\t\t\t\t\t\tnewValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacity + ')';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn new svg.Property(that.name, newValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// definition extensions\n\t\t\tthis.Definition = {\n\t\t\t\t// get the definition from the definitions table\n\t\t\t\tgetDefinition: function() {\n\t\t\t\t\tvar name = that.value.replace(/^(url\\()?#([^\\)]+)\\)?$/, '$2');\n\t\t\t\t\treturn svg.Definitions[name];\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tisUrl: function() {\n\t\t\t\t\treturn that.value.indexOf('url(') == 0\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tgetFillStyle: function(e) {\n\t\t\t\t\tvar def = this.getDefinition();\n\t\t\t\t\t\n\t\t\t\t\t// gradient\n\t\t\t\t\tif (def != null && def.createGradient) {\n\t\t\t\t\t\treturn def.createGradient(svg.ctx, e);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// pattern\n\t\t\t\t\tif (def != null && def.createPattern) {\n\t\t\t\t\t\treturn def.createPattern(svg.ctx, e);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// length extensions\n\t\t\tthis.Length = {\n\t\t\t\tDPI: function(viewPort) {\n\t\t\t\t\treturn 96.0; // TODO: compute?\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tEM: function(viewPort) {\n\t\t\t\t\tvar em = 12;\n\t\t\t\t\t\n\t\t\t\t\tvar fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tif (fontSize.hasValue()) em = fontSize.Length.toPixels(viewPort);\n\t\t\t\t\t\n\t\t\t\t\treturn em;\n\t\t\t\t},\n\t\t\t\n\t\t\t\t// get the length as pixels\n\t\t\t\ttoPixels: function(viewPort) {\n\t\t\t\t\tif (!that.hasValue()) return 0;\n\t\t\t\t\tvar s = that.value+'';\n\t\t\t\t\tif (s.match(/em$/)) return that.numValue() * this.EM(viewPort);\n\t\t\t\t\tif (s.match(/ex$/)) return that.numValue() * this.EM(viewPort) / 2.0;\n\t\t\t\t\tif (s.match(/px$/)) return that.numValue();\n\t\t\t\t\tif (s.match(/pt$/)) return that.numValue() * 1.25;\n\t\t\t\t\tif (s.match(/pc$/)) return that.numValue() * 15;\n\t\t\t\t\tif (s.match(/cm$/)) return that.numValue() * this.DPI(viewPort) / 2.54;\n\t\t\t\t\tif (s.match(/mm$/)) return that.numValue() * this.DPI(viewPort) / 25.4;\n\t\t\t\t\tif (s.match(/in$/)) return that.numValue() * this.DPI(viewPort);\n\t\t\t\t\tif (s.match(/%$/)) return that.numValue() * svg.ViewPort.ComputeSize(viewPort);\n\t\t\t\t\treturn that.numValue();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// time extensions\n\t\t\tthis.Time = {\n\t\t\t\t// get the time as milliseconds\n\t\t\t\ttoMilliseconds: function() {\n\t\t\t\t\tif (!that.hasValue()) return 0;\n\t\t\t\t\tvar s = that.value+'';\n\t\t\t\t\tif (s.match(/s$/)) return that.numValue() * 1000;\n\t\t\t\t\tif (s.match(/ms$/)) return that.numValue();\n\t\t\t\t\treturn that.numValue();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// angle extensions\n\t\t\tthis.Angle = {\n\t\t\t\t// get the angle as radians\n\t\t\t\ttoRadians: function() {\n\t\t\t\t\tif (!that.hasValue()) return 0;\n\t\t\t\t\tvar s = that.value+'';\n\t\t\t\t\tif (s.match(/deg$/)) return that.numValue() * (Math.PI / 180.0);\n\t\t\t\t\tif (s.match(/grad$/)) return that.numValue() * (Math.PI / 200.0);\n\t\t\t\t\tif (s.match(/rad$/)) return that.numValue();\n\t\t\t\t\treturn that.numValue() * (Math.PI / 180.0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// fonts\n\t\tsvg.Font = new (function() {\n\t\t\tthis.Styles = ['normal','italic','oblique','inherit'];\n\t\t\tthis.Variants = ['normal','small-caps','inherit'];\n\t\t\tthis.Weights = ['normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900','inherit'];\n\t\t\t\n\t\t\tthis.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) { \n\t\t\t\tvar f = inherit != null ? this.Parse(inherit) : this.CreateFont('', '', '', '', '', svg.ctx.font);\n\t\t\t\treturn { \n\t\t\t\t\tfontFamily: fontFamily || f.fontFamily, \n\t\t\t\t\tfontSize: fontSize || f.fontSize, \n\t\t\t\t\tfontStyle: fontStyle || f.fontStyle, \n\t\t\t\t\tfontWeight: fontWeight || f.fontWeight, \n\t\t\t\t\tfontVariant: fontVariant || f.fontVariant,\n\t\t\t\t\ttoString: function () { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') } \n\t\t\t\t} \n\t\t\t}\n\t\t\t\n\t\t\tvar that = this;\n\t\t\tthis.Parse = function(s) {\n\t\t\t\tvar f = {};\n\t\t\t\tvar d = svg.trim(svg.compressSpaces(s || '')).split(' ');\n\t\t\t\tvar set = { fontSize: false, fontStyle: false, fontWeight: false, fontVariant: false }\n\t\t\t\tvar ff = '';\n\t\t\t\tfor (var i=0; i<d.length; i++) {\n\t\t\t\t\tif (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontStyle = d[i]; set.fontStyle = true; }\n\t\t\t\t\telse if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontVariant = d[i]; set.fontStyle = set.fontVariant = true;\t}\n\t\t\t\t\telse if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) {\tif (d[i] != 'inherit') f.fontWeight = d[i]; set.fontStyle = set.fontVariant = set.fontWeight = true; }\n\t\t\t\t\telse if (!set.fontSize) { if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; }\n\t\t\t\t\telse { if (d[i] != 'inherit') ff += d[i]; }\n\t\t\t\t} if (ff != '') f.fontFamily = ff;\n\t\t\t\treturn f;\n\t\t\t}\n\t\t});\n\t\t\n\t\t// points and paths\n\t\tsvg.ToNumberArray = function(s) {\n\t\t\tvar a = svg.trim(svg.compressSpaces((s || '').replace(/,/g, ' '))).split(' ');\n\t\t\tfor (var i=0; i<a.length; i++) {\n\t\t\t\ta[i] = parseFloat(a[i]);\n\t\t\t}\n\t\t\treturn a;\n\t\t}\t\t\n\t\tsvg.Point = function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\t\n\t\t\tthis.angleTo = function(p) {\n\t\t\t\treturn Math.atan2(p.y - this.y, p.x - this.x);\n\t\t\t}\n\t\t\t\n\t\t\tthis.applyTransform = function(v) {\n\t\t\t\tvar xp = this.x * v[0] + this.y * v[2] + v[4];\n\t\t\t\tvar yp = this.x * v[1] + this.y * v[3] + v[5];\n\t\t\t\tthis.x = xp;\n\t\t\t\tthis.y = yp;\n\t\t\t}\n\t\t}\n\t\tsvg.CreatePoint = function(s) {\n\t\t\tvar a = svg.ToNumberArray(s);\n\t\t\treturn new svg.Point(a[0], a[1]);\n\t\t}\n\t\tsvg.CreatePath = function(s) {\n\t\t\tvar a = svg.ToNumberArray(s);\n\t\t\tvar path = [];\n\t\t\tfor (var i=0; i<a.length; i+=2) {\n\t\t\t\tpath.push(new svg.Point(a[i], a[i+1]));\n\t\t\t}\n\t\t\treturn path;\n\t\t}\n\t\t\n\t\t// bounding box\n\t\tsvg.BoundingBox = function(x1, y1, x2, y2) { // pass in initial points if you want\n\t\t\tthis.x1 = Number.NaN;\n\t\t\tthis.y1 = Number.NaN;\n\t\t\tthis.x2 = Number.NaN;\n\t\t\tthis.y2 = Number.NaN;\n\t\t\t\n\t\t\tthis.x = function() { return this.x1; }\n\t\t\tthis.y = function() { return this.y1; }\n\t\t\tthis.width = function() { return this.x2 - this.x1; }\n\t\t\tthis.height = function() { return this.y2 - this.y1; }\n\t\t\t\n\t\t\tthis.addPoint = function(x, y) {\t\n\t\t\t\tif (x != null) {\n\t\t\t\t\tif (isNaN(this.x1) || isNaN(this.x2)) {\n\t\t\t\t\t\tthis.x1 = x;\n\t\t\t\t\t\tthis.x2 = x;\n\t\t\t\t\t}\n\t\t\t\t\tif (x < this.x1) this.x1 = x;\n\t\t\t\t\tif (x > this.x2) this.x2 = x;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif (y != null) {\n\t\t\t\t\tif (isNaN(this.y1) || isNaN(this.y2)) {\n\t\t\t\t\t\tthis.y1 = y;\n\t\t\t\t\t\tthis.y2 = y;\n\t\t\t\t\t}\n\t\t\t\t\tif (y < this.y1) this.y1 = y;\n\t\t\t\t\tif (y > this.y2) this.y2 = y;\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\tthis.addX = function(x) { this.addPoint(x, null); }\n\t\t\tthis.addY = function(y) { this.addPoint(null, y); }\n\t\t\t\n\t\t\tthis.addBoundingBox = function(bb) {\n\t\t\t\tthis.addPoint(bb.x1, bb.y1);\n\t\t\t\tthis.addPoint(bb.x2, bb.y2);\n\t\t\t}\n\t\t\t\n\t\t\tthis.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) {\n\t\t\t\tvar cp1x = p0x + 2/3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0)\n\t\t\t\tvar cp1y = p0y + 2/3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0)\n\t\t\t\tvar cp2x = cp1x + 1/3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0)\n\t\t\t\tvar cp2y = cp1y + 1/3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0)\n\t\t\t\tthis.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y,\tcp2y, p2x, p2y);\n\t\t\t}\n\t\t\t\n\t\t\tthis.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n\t\t\t\t// from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n\t\t\t\tvar p0 = [p0x, p0y], p1 = [p1x, p1y], p2 = [p2x, p2y], p3 = [p3x, p3y];\n\t\t\t\tthis.addPoint(p0[0], p0[1]);\n\t\t\t\tthis.addPoint(p3[0], p3[1]);\n\t\t\t\t\n\t\t\t\tfor (i=0; i<=1; i++) {\n\t\t\t\t\tvar f = function(t) { \n\t\t\t\t\t\treturn Math.pow(1-t, 3) * p0[i]\n\t\t\t\t\t\t+ 3 * Math.pow(1-t, 2) * t * p1[i]\n\t\t\t\t\t\t+ 3 * (1-t) * Math.pow(t, 2) * p2[i]\n\t\t\t\t\t\t+ Math.pow(t, 3) * p3[i];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n\t\t\t\t\tvar a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n\t\t\t\t\tvar c = 3 * p1[i] - 3 * p0[i];\n\t\t\t\t\t\n\t\t\t\t\tif (a == 0) {\n\t\t\t\t\t\tif (b == 0) continue;\n\t\t\t\t\t\tvar t = -c / b;\n\t\t\t\t\t\tif (0 < t && t < 1) {\n\t\t\t\t\t\t\tif (i == 0) this.addX(f(t));\n\t\t\t\t\t\t\tif (i == 1) this.addY(f(t));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar b2ac = Math.pow(b, 2) - 4 * c * a;\n\t\t\t\t\tif (b2ac < 0) continue;\n\t\t\t\t\tvar t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n\t\t\t\t\tif (0 < t1 && t1 < 1) {\n\t\t\t\t\t\tif (i == 0) this.addX(f(t1));\n\t\t\t\t\t\tif (i == 1) this.addY(f(t1));\n\t\t\t\t\t}\n\t\t\t\t\tvar t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n\t\t\t\t\tif (0 < t2 && t2 < 1) {\n\t\t\t\t\t\tif (i == 0) this.addX(f(t2));\n\t\t\t\t\t\tif (i == 1) this.addY(f(t2));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.isPointInBox = function(x, y) {\n\t\t\t\treturn (this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2);\n\t\t\t}\n\t\t\t\n\t\t\tthis.addPoint(x1, y1);\n\t\t\tthis.addPoint(x2, y2);\n\t\t}\n\t\t\n\t\t// transforms\n\t\tsvg.Transform = function(v) {\t\n\t\t\tvar that = this;\n\t\t\tthis.Type = {}\n\t\t\n\t\t\t// translate\n\t\t\tthis.Type.translate = function(s) {\n\t\t\t\tthis.p = svg.CreatePoint(s);\t\t\t\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.translate(this.p.x || 0.0, this.p.y || 0.0);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tp.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// rotate\n\t\t\tthis.Type.rotate = function(s) {\n\t\t\t\tvar a = svg.ToNumberArray(s);\n\t\t\t\tthis.angle = new svg.Property('angle', a[0]);\n\t\t\t\tthis.cx = a[1] || 0;\n\t\t\t\tthis.cy = a[2] || 0;\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.translate(this.cx, this.cy);\n\t\t\t\t\tctx.rotate(this.angle.Angle.toRadians());\n\t\t\t\t\tctx.translate(-this.cx, -this.cy);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tvar a = this.angle.Angle.toRadians();\n\t\t\t\t\tp.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]);\n\t\t\t\t\tp.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]);\n\t\t\t\t\tp.applyTransform([1, 0, 0, 1, -this.p.x || 0.0, -this.p.y || 0.0]);\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.Type.scale = function(s) {\n\t\t\t\tthis.p = svg.CreatePoint(s);\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.scale(this.p.x || 1.0, this.p.y || this.p.x || 1.0);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tp.applyTransform([this.p.x || 0.0, 0, 0, this.p.y || 0.0, 0, 0]);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.Type.matrix = function(s) {\n\t\t\t\tthis.m = svg.ToNumberArray(s);\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tp.applyTransform(this.m);\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.Type.SkewBase = function(s) {\n\t\t\t\tthis.base = that.Type.matrix;\n\t\t\t\tthis.base(s);\n\t\t\t\tthis.angle = new svg.Property('angle', s);\n\t\t\t}\n\t\t\tthis.Type.SkewBase.prototype = new this.Type.matrix;\n\t\t\t\n\t\t\tthis.Type.skewX = function(s) {\n\t\t\t\tthis.base = that.Type.SkewBase;\n\t\t\t\tthis.base(s);\n\t\t\t\tthis.m = [1, 0, Math.tan(this.angle.Angle.toRadians()), 1, 0, 0];\n\t\t\t}\n\t\t\tthis.Type.skewX.prototype = new this.Type.SkewBase;\n\t\t\t\n\t\t\tthis.Type.skewY = function(s) {\n\t\t\t\tthis.base = that.Type.SkewBase;\n\t\t\t\tthis.base(s);\n\t\t\t\tthis.m = [1, Math.tan(this.angle.Angle.toRadians()), 0, 1, 0, 0];\n\t\t\t}\n\t\t\tthis.Type.skewY.prototype = new this.Type.SkewBase;\n\t\t\n\t\t\tthis.transforms = [];\n\t\t\t\n\t\t\tthis.apply = function(ctx) {\n\t\t\t\tfor (var i=0; i<this.transforms.length; i++) {\n\t\t\t\t\tthis.transforms[i].apply(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\tfor (var i=0; i<this.transforms.length; i++) {\n\t\t\t\t\tthis.transforms[i].applyToPoint(p);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar data = svg.trim(svg.compressSpaces(v)).split(/\\s(?=[a-z])/);\n\t\t\tfor (var i=0; i<data.length; i++) {\n\t\t\t\tvar type = data[i].split('(')[0];\n\t\t\t\tvar s = data[i].split('(')[1].replace(')','');\n\t\t\t\tvar transform = new this.Type[type](s);\n\t\t\t\tthis.transforms.push(transform);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// aspect ratio\n\t\tsvg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) {\n\t\t\t// aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute\n\t\t\taspectRatio = svg.compressSpaces(aspectRatio);\n\t\t\taspectRatio = aspectRatio.replace(/^defer\\s/,''); // ignore defer\n\t\t\tvar align = aspectRatio.split(' ')[0] || 'xMidYMid';\n\t\t\tvar meetOrSlice = aspectRatio.split(' ')[1] || 'meet';\t\t\t\t\t\n\t\n\t\t\t// calculate scale\n\t\t\tvar scaleX = width / desiredWidth;\n\t\t\tvar scaleY = height / desiredHeight;\n\t\t\tvar scaleMin = Math.min(scaleX, scaleY);\n\t\t\tvar scaleMax = Math.max(scaleX, scaleY);\n\t\t\tif (meetOrSlice == 'meet') { desiredWidth *= scaleMin; desiredHeight *= scaleMin; }\n\t\t\tif (meetOrSlice == 'slice') { desiredWidth *= scaleMax; desiredHeight *= scaleMax; }\t\n\t\t\t\n\t\t\trefX = new svg.Property('refX', refX);\n\t\t\trefY = new svg.Property('refY', refY);\n\t\t\tif (refX.hasValue() && refY.hasValue()) {\t\t\t\t\n\t\t\t\tctx.translate(-scaleMin * refX.Length.toPixels('x'), -scaleMin * refY.Length.toPixels('y'));\n\t\t\t} \n\t\t\telse {\t\t\t\t\t\n\t\t\t\t// align\n\t\t\t\tif (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0); \n\t\t\t\tif (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0); \n\t\t\t\tif (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0); \n\t\t\t\tif (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight); \n\t\t\t}\n\t\t\t\n\t\t\t// scale\n\t\t\tif (align == 'none') ctx.scale(scaleX, scaleY);\n\t\t\telse if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin); \n\t\t\telse if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax); \t\n\t\t\t\n\t\t\t// translate\n\t\t\tctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY);\t\t\t\n\t\t}\n\t\t\n\t\t// elements\n\t\tsvg.Element = {}\n\t\t\n\t\tsvg.Element.ElementBase = function(node) {\t\n\t\t\tthis.attributes = {};\n\t\t\tthis.styles = {};\n\t\t\tthis.children = [];\n\t\t\t\n\t\t\t// get or create attribute\n\t\t\tthis.attribute = function(name, createIfNotExists) {\n\t\t\t\tvar a = this.attributes[name];\n\t\t\t\tif (a != null) return a;\n\t\t\t\t\t\t\t\n\t\t\t\ta = new svg.Property(name, '');\n\t\t\t\tif (createIfNotExists == true) this.attributes[name] = a;\n\t\t\t\treturn a;\n\t\t\t}\n\t\t\t\n\t\t\t// get or create style, crawls up node tree\n\t\t\tthis.style = function(name, createIfNotExists) {\n\t\t\t\tvar s = this.styles[name];\n\t\t\t\tif (s != null) return s;\n\t\t\t\t\n\t\t\t\tvar a = this.attribute(name);\n\t\t\t\tif (a != null && a.hasValue()) {\n\t\t\t\t\treturn a;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar p = this.parent;\n\t\t\t\tif (p != null) {\n\t\t\t\t\tvar ps = p.style(name);\n\t\t\t\t\tif (ps != null && ps.hasValue()) {\n\t\t\t\t\t\treturn ps;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\ts = new svg.Property(name, '');\n\t\t\t\tif (createIfNotExists == true) this.styles[name] = s;\n\t\t\t\treturn s;\n\t\t\t}\n\t\t\t\n\t\t\t// base render\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// don't render display=none\n\t\t\t\tif (this.style('display').value == 'none') return;\n\t\t\t\t\n\t\t\t\t// don't render visibility=hidden\n\t\t\t\tif (this.attribute('visibility').value == 'hidden') return;\n\t\t\t\n\t\t\t\tctx.save();\n\t\t\t\t\tthis.setContext(ctx);\n\t\t\t\t\t\t// mask\n\t\t\t\t\t\tif (this.attribute('mask').hasValue()) {\n\t\t\t\t\t\t\tvar mask = this.attribute('mask').Definition.getDefinition();\n\t\t\t\t\t\t\tif (mask != null) mask.apply(ctx, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (this.style('filter').hasValue()) {\n\t\t\t\t\t\t\tvar filter = this.style('filter').Definition.getDefinition();\n\t\t\t\t\t\t\tif (filter != null) filter.apply(ctx, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse this.renderChildren(ctx);\t\t\t\t\n\t\t\t\t\tthis.clearContext(ctx);\n\t\t\t\tctx.restore();\n\t\t\t}\n\t\t\t\n\t\t\t// base set context\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t}\n\t\t\t\n\t\t\t// base clear context\n\t\t\tthis.clearContext = function(ctx) {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\t// base render children\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tthis.children[i].render(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.addChild = function(childNode, create) {\n\t\t\t\tvar child = childNode;\n\t\t\t\tif (create) child = svg.CreateElement(childNode);\n\t\t\t\tchild.parent = this;\n\t\t\t\tthis.children.push(child);\t\t\t\n\t\t\t}\n\t\t\t\t\n\t\t\tif (node != null && node.nodeType == 1) { //ELEMENT_NODE\n\t\t\t\t// add children\n\t\t\t\tfor (var i=0; i<node.childNodes.length; i++) {\n\t\t\t\t\tvar childNode = node.childNodes[i];\n\t\t\t\t\tif (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// add attributes\n\t\t\t\tfor (var i=0; i<node.attributes.length; i++) {\n\t\t\t\t\tvar attribute = node.attributes[i];\n\t\t\t\t\tthis.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue);\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t// add tag styles\n\t\t\t\tvar styles = svg.Styles[node.nodeName];\n\t\t\t\tif (styles != null) {\n\t\t\t\t\tfor (var name in styles) {\n\t\t\t\t\t\tthis.styles[name] = styles[name];\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t// add class styles\n\t\t\t\tif (this.attribute('class').hasValue()) {\n\t\t\t\t\tvar classes = svg.compressSpaces(this.attribute('class').value).split(' ');\n\t\t\t\t\tfor (var j=0; j<classes.length; j++) {\n\t\t\t\t\t\tstyles = svg.Styles['.'+classes[j]];\n\t\t\t\t\t\tif (styles != null) {\n\t\t\t\t\t\t\tfor (var name in styles) {\n\t\t\t\t\t\t\t\tthis.styles[name] = styles[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyles = svg.Styles[node.nodeName+'.'+classes[j]];\n\t\t\t\t\t\tif (styles != null) {\n\t\t\t\t\t\t\tfor (var name in styles) {\n\t\t\t\t\t\t\t\tthis.styles[name] = styles[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// add inline styles\n\t\t\t\tif (this.attribute('style').hasValue()) {\n\t\t\t\t\tvar styles = this.attribute('style').value.split(';');\n\t\t\t\t\tfor (var i=0; i<styles.length; i++) {\n\t\t\t\t\t\tif (svg.trim(styles[i]) != '') {\n\t\t\t\t\t\t\tvar style = styles[i].split(':');\n\t\t\t\t\t\t\tvar name = svg.trim(style[0]);\n\t\t\t\t\t\t\tvar value = svg.trim(style[1]);\n\t\t\t\t\t\t\tthis.styles[name] = new svg.Property(name, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\t\n\n\t\t\t\t// add id\n\t\t\t\tif (this.attribute('id').hasValue()) {\n\t\t\t\t\tif (svg.Definitions[this.attribute('id').value] == null) {\n\t\t\t\t\t\tsvg.Definitions[this.attribute('id').value] = this;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tsvg.Element.RenderedElementBase = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\t// fill\n\t\t\t\tif (this.style('fill').Definition.isUrl()) {\n\t\t\t\t\tvar fs = this.style('fill').Definition.getFillStyle(this);\n\t\t\t\t\tif (fs != null) ctx.fillStyle = fs;\n\t\t\t\t}\n\t\t\t\telse if (this.style('fill').hasValue()) {\n\t\t\t\t\tvar fillStyle = this.style('fill');\n\t\t\t\t\tif (this.style('fill-opacity').hasValue()) fillStyle = fillStyle.Color.addOpacity(this.style('fill-opacity').value);\n\t\t\t\t\tctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value);\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t// stroke\n\t\t\t\tif (this.style('stroke').Definition.isUrl()) {\n\t\t\t\t\tvar fs = this.style('stroke').Definition.getFillStyle(this);\n\t\t\t\t\tif (fs != null) ctx.strokeStyle = fs;\n\t\t\t\t}\n\t\t\t\telse if (this.style('stroke').hasValue()) {\n\t\t\t\t\tvar strokeStyle = this.style('stroke');\n\t\t\t\t\tif (this.style('stroke-opacity').hasValue()) strokeStyle = strokeStyle.Color.addOpacity(this.style('stroke-opacity').value);\n\t\t\t\t\tctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value);\n\t\t\t\t}\n\t\t\t\tif (this.style('stroke-width').hasValue()) ctx.lineWidth = this.style('stroke-width').Length.toPixels();\n\t\t\t\tif (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value;\n\t\t\t\tif (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value;\n\t\t\t\tif (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value;\n\n\t\t\t\t// font\n\t\t\t\tif (typeof(ctx.font) != 'undefined') {\n\t\t\t\t\tctx.font = svg.Font.CreateFont( \n\t\t\t\t\t\tthis.style('font-style').value, \n\t\t\t\t\t\tthis.style('font-variant').value, \n\t\t\t\t\t\tthis.style('font-weight').value, \n\t\t\t\t\t\tthis.style('font-size').hasValue() ? this.style('font-size').Length.toPixels() + 'px' : '', \n\t\t\t\t\t\tthis.style('font-family').value).toString();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// transform\n\t\t\t\tif (this.attribute('transform').hasValue()) { \n\t\t\t\t\tvar transform = new svg.Transform(this.attribute('transform').value);\n\t\t\t\t\ttransform.apply(ctx);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// clip\n\t\t\t\tif (this.attribute('clip-path').hasValue()) {\n\t\t\t\t\tvar clip = this.attribute('clip-path').Definition.getDefinition();\n\t\t\t\t\tif (clip != null) clip.apply(ctx);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// opacity\n\t\t\t\tif (this.style('opacity').hasValue()) {\n\t\t\t\t\tctx.globalAlpha = this.style('opacity').numValue();\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t}\n\t\tsvg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase;\n\t\t\n\t\tsvg.Element.PathElementBase = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tif (ctx != null) ctx.beginPath();\n\t\t\t\treturn new svg.BoundingBox();\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tthis.path(ctx);\n\t\t\t\tsvg.Mouse.checkPath(this, ctx);\n\t\t\t\tif (ctx.fillStyle != '') ctx.fill();\n\t\t\t\tif (ctx.strokeStyle != '') ctx.stroke();\n\t\t\t\t\n\t\t\t\tvar markers = this.getMarkers();\n\t\t\t\tif (markers != null) {\n\t\t\t\t\tif (this.style('marker-start').Definition.isUrl()) {\n\t\t\t\t\t\tvar marker = this.style('marker-start').Definition.getDefinition();\n\t\t\t\t\t\tmarker.render(ctx, markers[0][0], markers[0][1]);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.style('marker-mid').Definition.isUrl()) {\n\t\t\t\t\t\tvar marker = this.style('marker-mid').Definition.getDefinition();\n\t\t\t\t\t\tfor (var i=1;i<markers.length-1;i++) {\n\t\t\t\t\t\t\tmarker.render(ctx, markers[i][0], markers[i][1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.style('marker-end').Definition.isUrl()) {\n\t\t\t\t\t\tvar marker = this.style('marker-end').Definition.getDefinition();\n\t\t\t\t\t\tmarker.render(ctx, markers[markers.length-1][0], markers[markers.length-1][1]);\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.getBoundingBox = function() {\n\t\t\t\treturn this.path();\n\t\t\t}\n\t\t\t\n\t\t\tthis.getMarkers = function() {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// svg element\n\t\tsvg.Element.svg = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseClearContext = this.clearContext;\n\t\t\tthis.clearContext = function(ctx) {\n\t\t\t\tthis.baseClearContext(ctx);\n\t\t\t\tsvg.ViewPort.RemoveCurrent();\n\t\t\t}\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\t// initial values\n\t\t\t\tctx.strokeStyle = 'rgba(0,0,0,0)';\n\t\t\t\tctx.lineCap = 'butt';\n\t\t\t\tctx.lineJoin = 'miter';\n\t\t\t\tctx.miterLimit = 4;\t\t\t\n\t\t\t\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\t\n\t\t\t\t// create new view port\n\t\t\t\tif (this.attribute('x').hasValue() && this.attribute('y').hasValue()) {\n\t\t\t\t\tctx.translate(this.attribute('x').Length.toPixels('x'), this.attribute('y').Length.toPixels('y'));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar width = svg.ViewPort.width();\n\t\t\t\tvar height = svg.ViewPort.height();\n\t\t\t\tif (typeof(this.root) == 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue()) {\n\t\t\t\t\twidth = this.attribute('width').Length.toPixels('x');\n\t\t\t\t\theight = this.attribute('height').Length.toPixels('y');\n\t\t\t\t\t\n\t\t\t\t\tvar x = 0;\n\t\t\t\t\tvar y = 0;\n\t\t\t\t\tif (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) {\n\t\t\t\t\t\tx = -this.attribute('refX').Length.toPixels('x');\n\t\t\t\t\t\ty = -this.attribute('refY').Length.toPixels('y');\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(x, y);\n\t\t\t\t\tctx.lineTo(width, y);\n\t\t\t\t\tctx.lineTo(width, height);\n\t\t\t\t\tctx.lineTo(x, height);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.clip();\n\t\t\t\t}\n\t\t\t\tsvg.ViewPort.SetCurrent(width, height);\t\n\t\t\t\t\t\t\n\t\t\t\t// viewbox\n\t\t\t\tif (this.attribute('viewBox').hasValue()) {\t\t\t\t\n\t\t\t\t\tvar viewBox = svg.ToNumberArray(this.attribute('viewBox').value);\n\t\t\t\t\tvar minX = viewBox[0];\n\t\t\t\t\tvar minY = viewBox[1];\n\t\t\t\t\twidth = viewBox[2];\n\t\t\t\t\theight = viewBox[3];\n\t\t\t\t\t\n\t\t\t\t\tsvg.AspectRatio(ctx,\n\t\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value, \n\t\t\t\t\t\t\t\t\tsvg.ViewPort.width(), \n\t\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\t\tsvg.ViewPort.height(),\n\t\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\t\tminX,\n\t\t\t\t\t\t\t\t\tminY,\n\t\t\t\t\t\t\t\t\tthis.attribute('refX').value,\n\t\t\t\t\t\t\t\t\tthis.attribute('refY').value);\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\tsvg.ViewPort.RemoveCurrent();\t\n\t\t\t\t\tsvg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);\t\t\t\t\t\t\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t}\n\t\tsvg.Element.svg.prototype = new svg.Element.RenderedElementBase;\n\n\t\t// rect element\n\t\tsvg.Element.rect = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\n\t\t\t\tvar rx = this.attribute('rx').Length.toPixels('x');\n\t\t\t\tvar ry = this.attribute('ry').Length.toPixels('y');\n\t\t\t\tif (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx;\n\t\t\t\tif (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry;\n\t\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(x + rx, y);\n\t\t\t\t\tctx.lineTo(x + width - rx, y);\n\t\t\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + ry)\n\t\t\t\t\tctx.lineTo(x + width, y + height - ry);\n\t\t\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height)\n\t\t\t\t\tctx.lineTo(x + rx, y + height);\n\t\t\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - ry)\n\t\t\t\t\tctx.lineTo(x, y + ry);\n\t\t\t\t\tctx.quadraticCurveTo(x, y, x + rx, y)\n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(x, y, x + width, y + height);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.rect.prototype = new svg.Element.PathElementBase;\n\t\t\n\t\t// circle element\n\t\tsvg.Element.circle = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar cx = this.attribute('cx').Length.toPixels('x');\n\t\t\t\tvar cy = this.attribute('cy').Length.toPixels('y');\n\t\t\t\tvar r = this.attribute('r').Length.toPixels();\n\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.arc(cx, cy, r, 0, Math.PI * 2, true); \n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.circle.prototype = new svg.Element.PathElementBase;\t\n\n\t\t// ellipse element\n\t\tsvg.Element.ellipse = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);\n\t\t\t\tvar rx = this.attribute('rx').Length.toPixels('x');\n\t\t\t\tvar ry = this.attribute('ry').Length.toPixels('y');\n\t\t\t\tvar cx = this.attribute('cx').Length.toPixels('x');\n\t\t\t\tvar cy = this.attribute('cy').Length.toPixels('y');\n\t\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(cx, cy - ry);\n\t\t\t\t\tctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry,  cx + rx, cy - (KAPPA * ry), cx + rx, cy);\n\t\t\t\t\tctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry);\n\t\t\t\t\tctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy);\n\t\t\t\t\tctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.ellipse.prototype = new svg.Element.PathElementBase;\t\t\t\n\t\t\n\t\t// line element\n\t\tsvg.Element.line = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getPoints = function() {\n\t\t\t\treturn [\n\t\t\t\t\tnew svg.Point(this.attribute('x1').Length.toPixels('x'), this.attribute('y1').Length.toPixels('y')),\n\t\t\t\t\tnew svg.Point(this.attribute('x2').Length.toPixels('x'), this.attribute('y2').Length.toPixels('y'))];\n\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar points = this.getPoints();\n\t\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(points[0].x, points[0].y);\n\t\t\t\t\tctx.lineTo(points[1].x, points[1].y);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y);\n\t\t\t}\n\t\t\t\n\t\t\tthis.getMarkers = function() {\n\t\t\t\tvar points = this.getPoints();\t\n\t\t\t\tvar a = points[0].angleTo(points[1]);\n\t\t\t\treturn [[points[0], a], [points[1], a]];\n\t\t\t}\n\t\t}\n\t\tsvg.Element.line.prototype = new svg.Element.PathElementBase;\t\t\n\t\t\t\t\n\t\t// polyline element\n\t\tsvg.Element.polyline = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.points = svg.CreatePath(this.attribute('points').value);\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar bb = new svg.BoundingBox(this.points[0].x, this.points[0].y);\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(this.points[0].x, this.points[0].y);\n\t\t\t\t}\n\t\t\t\tfor (var i=1; i<this.points.length; i++) {\n\t\t\t\t\tbb.addPoint(this.points[i].x, this.points[i].y);\n\t\t\t\t\tif (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y);\n\t\t\t\t}\n\t\t\t\treturn bb;\n\t\t\t}\n\t\t\t\n\t\t\tthis.getMarkers = function() {\n\t\t\t\tvar markers = [];\n\t\t\t\tfor (var i=0; i<this.points.length - 1; i++) {\n\t\t\t\t\tmarkers.push([this.points[i], this.points[i].angleTo(this.points[i+1])]);\n\t\t\t\t}\n\t\t\t\tmarkers.push([this.points[this.points.length-1], markers[markers.length-1][1]]);\n\t\t\t\treturn markers;\n\t\t\t}\t\t\t\n\t\t}\n\t\tsvg.Element.polyline.prototype = new svg.Element.PathElementBase;\t\t\t\t\n\t\t\t\t\n\t\t// polygon element\n\t\tsvg.Element.polygon = function(node) {\n\t\t\tthis.base = svg.Element.polyline;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.basePath = this.path;\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar bb = this.basePath(ctx);\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.lineTo(this.points[0].x, this.points[0].y);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\treturn bb;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.polygon.prototype = new svg.Element.polyline;\n\n\t\t// path element\n\t\tsvg.Element.path = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\t\t\n\t\t\tvar d = this.attribute('d').value;\n\t\t\t// TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF\n\t\t\td = d.replace(/,/gm,' '); // get rid of all commas\n\t\t\td = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands\n\t\t\td = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands\n\t\t\td = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\\s])/gm,'$1 $2'); // separate commands from points\n\t\t\td = d.replace(/([^\\s])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from points\n\t\t\td = d.replace(/([0-9])([+\\-])/gm,'$1 $2'); // separate digits when no comma\n\t\t\td = d.replace(/(\\.[0-9]*)(\\.)/gm,'$1 $2'); // separate digits when no comma\n\t\t\td = d.replace(/([Aa](\\s+[0-9]+){3})\\s+([01])\\s*([01])/gm,'$1 $3 $4 '); // shorthand elliptical arc path syntax\n\t\t\td = svg.compressSpaces(d); // compress multiple spaces\n\t\t\td = svg.trim(d);\n\t\t\tthis.PathParser = new (function(d) {\n\t\t\t\tthis.tokens = d.split(' ');\n\t\t\t\t\n\t\t\t\tthis.reset = function() {\n\t\t\t\t\tthis.i = -1;\n\t\t\t\t\tthis.command = '';\n\t\t\t\t\tthis.previousCommand = '';\n\t\t\t\t\tthis.start = new svg.Point(0, 0);\n\t\t\t\t\tthis.control = new svg.Point(0, 0);\n\t\t\t\t\tthis.current = new svg.Point(0, 0);\n\t\t\t\t\tthis.points = [];\n\t\t\t\t\tthis.angles = [];\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\tthis.isEnd = function() {\n\t\t\t\t\treturn this.i >= this.tokens.length - 1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.isCommandOrEnd = function() {\n\t\t\t\t\tif (this.isEnd()) return true;\n\t\t\t\t\treturn this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.isRelativeCommand = function() {\n\t\t\t\t\treturn this.command == this.command.toLowerCase();\n\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\tthis.getToken = function() {\n\t\t\t\t\tthis.i = this.i + 1;\n\t\t\t\t\treturn this.tokens[this.i];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getScalar = function() {\n\t\t\t\t\treturn parseFloat(this.getToken());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.nextCommand = function() {\n\t\t\t\t\tthis.previousCommand = this.command;\n\t\t\t\t\tthis.command = this.getToken();\n\t\t\t\t}\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.getPoint = function() {\n\t\t\t\t\tvar p = new svg.Point(this.getScalar(), this.getScalar());\n\t\t\t\t\treturn this.makeAbsolute(p);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getAsControlPoint = function() {\n\t\t\t\t\tvar p = this.getPoint();\n\t\t\t\t\tthis.control = p;\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getAsCurrentPoint = function() {\n\t\t\t\t\tvar p = this.getPoint();\n\t\t\t\t\tthis.current = p;\n\t\t\t\t\treturn p;\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getReflectedControlPoint = function() {\n\t\t\t\t\tif (this.previousCommand.toLowerCase() != 'c' && this.previousCommand.toLowerCase() != 's') {\n\t\t\t\t\t\treturn this.current;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// reflect point\n\t\t\t\t\tvar p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y);\t\t\t\t\t\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.makeAbsolute = function(p) {\n\t\t\t\t\tif (this.isRelativeCommand()) {\n\t\t\t\t\t\tp.x = this.current.x + p.x;\n\t\t\t\t\t\tp.y = this.current.y + p.y;\n\t\t\t\t\t}\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.addMarker = function(p, from, priorTo) {\n\t\t\t\t\t// if the last angle isn't filled in because we didn't have this point yet ...\n\t\t\t\t\tif (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length-1] == null) {\n\t\t\t\t\t\tthis.angles[this.angles.length-1] = this.points[this.points.length-1].angleTo(priorTo);\n\t\t\t\t\t}\n\t\t\t\t\tthis.addMarkerAngle(p, from == null ? null : from.angleTo(p));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.addMarkerAngle = function(p, a) {\n\t\t\t\t\tthis.points.push(p);\n\t\t\t\t\tthis.angles.push(a);\n\t\t\t\t}\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.getMarkerPoints = function() { return this.points; }\n\t\t\t\tthis.getMarkerAngles = function() {\n\t\t\t\t\tfor (var i=0; i<this.angles.length; i++) {\n\t\t\t\t\t\tif (this.angles[i] == null) {\n\t\t\t\t\t\t\tfor (var j=i+1; j<this.angles.length; j++) {\n\t\t\t\t\t\t\t\tif (this.angles[j] != null) {\n\t\t\t\t\t\t\t\t\tthis.angles[i] = this.angles[j];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this.angles;\n\t\t\t\t}\n\t\t\t})(d);\n\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar pp = this.PathParser;\n\t\t\t\tpp.reset();\n\n\t\t\t\tvar bb = new svg.BoundingBox();\n\t\t\t\tif (ctx != null) ctx.beginPath();\n\t\t\t\twhile (!pp.isEnd()) {\n\t\t\t\t\tpp.nextCommand();\n\t\t\t\t\tswitch (pp.command.toUpperCase()) {\n\t\t\t\t\tcase 'M':\n\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\n\t\t\t\t\t\tpp.addMarker(p);\n\t\t\t\t\t\tbb.addPoint(p.x, p.y);\n\t\t\t\t\t\tif (ctx != null) ctx.moveTo(p.x, p.y);\n\t\t\t\t\t\tpp.start = pp.current;\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(p, pp.start);\n\t\t\t\t\t\t\tbb.addPoint(p.x, p.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(p.x, p.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'L':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar c = pp.current;\n\t\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(p, c);\n\t\t\t\t\t\t\tbb.addPoint(p.x, p.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(p.x, p.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'H':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y);\n\t\t\t\t\t\t\tpp.addMarker(newP, pp.current);\n\t\t\t\t\t\t\tpp.current = newP;\n\t\t\t\t\t\t\tbb.addPoint(pp.current.x, pp.current.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'V':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar());\n\t\t\t\t\t\t\tpp.addMarker(newP, pp.current);\n\t\t\t\t\t\t\tpp.current = newP;\n\t\t\t\t\t\t\tbb.addPoint(pp.current.x, pp.current.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'C':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar p1 = pp.getPoint();\n\t\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, p1);\n\t\t\t\t\t\t\tbb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'S':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar p1 = pp.getReflectedControlPoint();\n\t\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, p1);\n\t\t\t\t\t\t\tbb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Q':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, cntrl);\n\t\t\t\t\t\t\tbb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'T':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar cntrl = pp.getReflectedControlPoint();\n\t\t\t\t\t\t\tpp.control = cntrl;\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, cntrl);\n\t\t\t\t\t\t\tbb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'A':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t    var curr = pp.current;\n\t\t\t\t\t\t\tvar rx = pp.getScalar();\n\t\t\t\t\t\t\tvar ry = pp.getScalar();\n\t\t\t\t\t\t\tvar xAxisRotation = pp.getScalar() * (Math.PI / 180.0);\n\t\t\t\t\t\t\tvar largeArcFlag = pp.getScalar();\n\t\t\t\t\t\t\tvar sweepFlag = pp.getScalar();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\n\t\t\t\t\t\t\t// Conversion from endpoint to center parameterization\n\t\t\t\t\t\t\t// http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n\t\t\t\t\t\t\t// x1', y1'\n\t\t\t\t\t\t\tvar currp = new svg.Point(\n\t\t\t\t\t\t\t\tMath.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0,\n\t\t\t\t\t\t\t\t-Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// adjust radii\n\t\t\t\t\t\t\tvar l = Math.pow(currp.x,2)/Math.pow(rx,2)+Math.pow(currp.y,2)/Math.pow(ry,2);\n\t\t\t\t\t\t\tif (l > 1) {\n\t\t\t\t\t\t\t\trx *= Math.sqrt(l);\n\t\t\t\t\t\t\t\try *= Math.sqrt(l);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// cx', cy'\n\t\t\t\t\t\t\tvar s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt(\n\t\t\t\t\t\t\t\t((Math.pow(rx,2)*Math.pow(ry,2))-(Math.pow(rx,2)*Math.pow(currp.y,2))-(Math.pow(ry,2)*Math.pow(currp.x,2))) /\n\t\t\t\t\t\t\t\t(Math.pow(rx,2)*Math.pow(currp.y,2)+Math.pow(ry,2)*Math.pow(currp.x,2))\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (isNaN(s)) s = 0;\n\t\t\t\t\t\t\tvar cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx);\n\t\t\t\t\t\t\t// cx, cy\n\t\t\t\t\t\t\tvar centp = new svg.Point(\n\t\t\t\t\t\t\t\t(curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y,\n\t\t\t\t\t\t\t\t(curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// vector magnitude\n\t\t\t\t\t\t\tvar m = function(v) { return Math.sqrt(Math.pow(v[0],2) + Math.pow(v[1],2)); }\n\t\t\t\t\t\t\t// ratio between two vectors\n\t\t\t\t\t\t\tvar r = function(u, v) { return (u[0]*v[0]+u[1]*v[1]) / (m(u)*m(v)) }\n\t\t\t\t\t\t\t// angle between two vectors\n\t\t\t\t\t\t\tvar a = function(u, v) { return (u[0]*v[1] < u[1]*v[0] ? -1 : 1) * Math.acos(r(u,v)); }\n\t\t\t\t\t\t\t// initial angle\n\t\t\t\t\t\t\tvar a1 = a([1,0], [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]);\n\t\t\t\t\t\t\t// angle delta\n\t\t\t\t\t\t\tvar u = [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry];\n\t\t\t\t\t\t\tvar v = [(-currp.x-cpp.x)/rx,(-currp.y-cpp.y)/ry];\n\t\t\t\t\t\t\tvar ad = a(u, v);\n\t\t\t\t\t\t\tif (r(u,v) <= -1) ad = Math.PI;\n\t\t\t\t\t\t\tif (r(u,v) >= 1) ad = 0;\n\n\t\t\t\t\t\t\tif (sweepFlag == 0 && ad > 0) ad = ad - 2 * Math.PI;\n\t\t\t\t\t\t\tif (sweepFlag == 1 && ad < 0) ad = ad + 2 * Math.PI;\n\n\t\t\t\t\t\t\t// for markers\n\t\t\t\t\t\t\tvar halfWay = new svg.Point(\n\t\t\t\t\t\t\t\tcentp.x - rx * Math.cos((a1 + ad) / 2),\n\t\t\t\t\t\t\t\tcentp.y - ry * Math.sin((a1 + ad) / 2)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tpp.addMarkerAngle(halfWay, (a1 + ad) / 2 + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2);\n\t\t\t\t\t\t\tpp.addMarkerAngle(cp, ad + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2);\n\n\t\t\t\t\t\t\tbb.addPoint(cp.x, cp.y); // TODO: this is too naive, make it better\n\t\t\t\t\t\t\tif (ctx != null) {\n\t\t\t\t\t\t\t\tvar r = rx > ry ? rx : ry;\n\t\t\t\t\t\t\t\tvar sx = rx > ry ? 1 : rx / ry;\n\t\t\t\t\t\t\t\tvar sy = rx > ry ? ry / rx : 1;\n\n\t\t\t\t\t\t\t\tctx.translate(centp.x, centp.y);\n\t\t\t\t\t\t\t\tctx.rotate(xAxisRotation);\n\t\t\t\t\t\t\t\tctx.scale(sx, sy);\n\t\t\t\t\t\t\t\tctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag);\n\t\t\t\t\t\t\t\tctx.scale(1/sx, 1/sy);\n\t\t\t\t\t\t\t\tctx.rotate(-xAxisRotation);\n\t\t\t\t\t\t\t\tctx.translate(-centp.x, -centp.y);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Z':\n\t\t\t\t\t\tif (ctx != null) ctx.closePath();\n\t\t\t\t\t\tpp.current = pp.start;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn bb;\n\t\t\t}\n\n\t\t\tthis.getMarkers = function() {\n\t\t\t\tvar points = this.PathParser.getMarkerPoints();\n\t\t\t\tvar angles = this.PathParser.getMarkerAngles();\n\t\t\t\t\n\t\t\t\tvar markers = [];\n\t\t\t\tfor (var i=0; i<points.length; i++) {\n\t\t\t\t\tmarkers.push([points[i], angles[i]]);\n\t\t\t\t}\n\t\t\t\treturn markers;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.path.prototype = new svg.Element.PathElementBase;\n\t\t\n\t\t// pattern element\n\t\tsvg.Element.pattern = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.createPattern = function(ctx, element) {\n\t\t\t\t// render me using a temporary svg element\n\t\t\t\tvar tempSvg = new svg.Element.svg();\n\t\t\t\ttempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);\n\t\t\t\ttempSvg.attributes['x'] = new svg.Property('x', this.attribute('x').value);\n\t\t\t\ttempSvg.attributes['y'] = new svg.Property('y', this.attribute('y').value);\n\t\t\t\ttempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value);\n\t\t\t\ttempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value);\n\t\t\t\ttempSvg.children = this.children;\n\t\t\t\t\n\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\tc.width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tc.height = this.attribute('height').Length.toPixels('y');\n\t\t\t\ttempSvg.render(c.getContext('2d'));\t\t\n\t\t\t\treturn ctx.createPattern(c, 'repeat');\n\t\t\t}\n\t\t}\n\t\tsvg.Element.pattern.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// marker element\n\t\tsvg.Element.marker = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseRender = this.render;\n\t\t\tthis.render = function(ctx, point, angle) {\n\t\t\t\tctx.translate(point.x, point.y);\n\t\t\t\tif (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle);\n\t\t\t\tif (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth);\n\t\t\t\tctx.save();\n\t\t\t\t\t\t\t\n\t\t\t\t// render me using a temporary svg element\n\t\t\t\tvar tempSvg = new svg.Element.svg();\n\t\t\t\ttempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);\n\t\t\t\ttempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value);\n\t\t\t\ttempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value);\n\t\t\t\ttempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value);\n\t\t\t\ttempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value);\n\t\t\t\ttempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black'));\n\t\t\t\ttempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none'));\n\t\t\t\ttempSvg.children = this.children;\n\t\t\t\ttempSvg.render(ctx);\n\t\t\t\t\n\t\t\t\tctx.restore();\n\t\t\t\tif (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1/ctx.lineWidth, 1/ctx.lineWidth);\n\t\t\t\tif (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle);\n\t\t\t\tctx.translate(-point.x, -point.y);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.marker.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// definitions element\n\t\tsvg.Element.defs = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NOOP\n\t\t\t}\n\t\t}\n\t\tsvg.Element.defs.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// base for gradients\n\t\tsvg.Element.GradientBase = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox');\n\t\t\t\n\t\t\tthis.stops = [];\t\t\t\n\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\tvar child = this.children[i];\n\t\t\t\tthis.stops.push(child);\n\t\t\t}\t\n\t\t\t\n\t\t\tthis.getGradient = function() {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t}\t\t\t\n\n\t\t\tthis.createGradient = function(ctx, element) {\n\t\t\t\tvar stopsContainer = this;\n\t\t\t\tif (this.attribute('xlink:href').hasValue()) {\n\t\t\t\t\tstopsContainer = this.attribute('xlink:href').Definition.getDefinition();\n\t\t\t\t}\n\t\t\t\n\t\t\t\tvar g = this.getGradient(ctx, element);\n\t\t\t\tfor (var i=0; i<stopsContainer.stops.length; i++) {\n\t\t\t\t\tg.addColorStop(stopsContainer.stops[i].offset, stopsContainer.stops[i].color);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (this.attribute('gradientTransform').hasValue()) {\n\t\t\t\t\t// render as transformed pattern on temporary canvas\n\t\t\t\t\tvar rootView = svg.ViewPort.viewPorts[0];\n\t\t\t\t\t\n\t\t\t\t\tvar rect = new svg.Element.rect();\n\t\t\t\t\trect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS/3.0);\n\t\t\t\t\trect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS/3.0);\n\t\t\t\t\trect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS);\n\t\t\t\t\trect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS);\n\t\t\t\t\t\n\t\t\t\t\tvar group = new svg.Element.g();\n\t\t\t\t\tgroup.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value);\n\t\t\t\t\tgroup.children = [ rect ];\n\t\t\t\t\t\n\t\t\t\t\tvar tempSvg = new svg.Element.svg();\n\t\t\t\t\ttempSvg.attributes['x'] = new svg.Property('x', 0);\n\t\t\t\t\ttempSvg.attributes['y'] = new svg.Property('y', 0);\n\t\t\t\t\ttempSvg.attributes['width'] = new svg.Property('width', rootView.width);\n\t\t\t\t\ttempSvg.attributes['height'] = new svg.Property('height', rootView.height);\n\t\t\t\t\ttempSvg.children = [ group ];\n\t\t\t\t\t\n\t\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\t\tc.width = rootView.width;\n\t\t\t\t\tc.height = rootView.height;\n\t\t\t\t\tvar tempCtx = c.getContext('2d');\n\t\t\t\t\ttempCtx.fillStyle = g;\n\t\t\t\t\ttempSvg.render(tempCtx);\t\t\n\t\t\t\t\treturn tempCtx.createPattern(c, 'no-repeat');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn g;\t\t\t\t\n\t\t\t}\n\t\t}\n\t\tsvg.Element.GradientBase.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// linear gradient element\n\t\tsvg.Element.linearGradient = function(node) {\n\t\t\tthis.base = svg.Element.GradientBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getGradient = function(ctx, element) {\n\t\t\t\tvar bb = element.getBoundingBox();\n\t\t\t\t\n\t\t\t\tvar x1 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('x1').numValue() \n\t\t\t\t\t: this.attribute('x1').Length.toPixels('x'));\n\t\t\t\tvar y1 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('y1').numValue()\n\t\t\t\t\t: this.attribute('y1').Length.toPixels('y'));\n\t\t\t\tvar x2 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('x2').numValue()\n\t\t\t\t\t: this.attribute('x2').Length.toPixels('x'));\n\t\t\t\tvar y2 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('y2').numValue()\n\t\t\t\t\t: this.attribute('y2').Length.toPixels('y'));\n\n\t\t\t\treturn ctx.createLinearGradient(x1, y1, x2, y2);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.linearGradient.prototype = new svg.Element.GradientBase;\n\t\t\n\t\t// radial gradient element\n\t\tsvg.Element.radialGradient = function(node) {\n\t\t\tthis.base = svg.Element.GradientBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getGradient = function(ctx, element) {\n\t\t\t\tvar bb = element.getBoundingBox();\n\t\t\t\t\n\t\t\t\tvar cx = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('cx').numValue() \n\t\t\t\t\t: this.attribute('cx').Length.toPixels('x'));\n\t\t\t\tvar cy = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('cy').numValue() \n\t\t\t\t\t: this.attribute('cy').Length.toPixels('y'));\n\t\t\t\t\n\t\t\t\tvar fx = cx;\n\t\t\t\tvar fy = cy;\n\t\t\t\tif (this.attribute('fx').hasValue()) {\n\t\t\t\t\tfx = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('fx').numValue() \n\t\t\t\t\t: this.attribute('fx').Length.toPixels('x'));\n\t\t\t\t}\n\t\t\t\tif (this.attribute('fy').hasValue()) {\n\t\t\t\t\tfy = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('fy').numValue() \n\t\t\t\t\t: this.attribute('fy').Length.toPixels('y'));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar r = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue()\n\t\t\t\t\t: this.attribute('r').Length.toPixels());\n\t\t\t\t\n\t\t\t\treturn ctx.createRadialGradient(fx, fy, 0, cx, cy, r);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.radialGradient.prototype = new svg.Element.GradientBase;\n\t\t\n\t\t// gradient stop element\n\t\tsvg.Element.stop = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.offset = this.attribute('offset').numValue();\n\t\t\t\n\t\t\tvar stopColor = this.style('stop-color');\n\t\t\tif (this.style('stop-opacity').hasValue()) stopColor = stopColor.Color.addOpacity(this.style('stop-opacity').value);\n\t\t\tthis.color = stopColor.value;\n\t\t}\n\t\tsvg.Element.stop.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// animation base element\n\t\tsvg.Element.AnimateBase = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tsvg.Animations.push(this);\n\t\t\t\n\t\t\tthis.duration = 0.0;\n\t\t\tthis.begin = this.attribute('begin').Time.toMilliseconds();\n\t\t\tthis.maxDuration = this.begin + this.attribute('dur').Time.toMilliseconds();\n\t\t\t\n\t\t\tthis.getProperty = function() {\n\t\t\t\tvar attributeType = this.attribute('attributeType').value;\n\t\t\t\tvar attributeName = this.attribute('attributeName').value;\n\t\t\t\t\n\t\t\t\tif (attributeType == 'CSS') {\n\t\t\t\t\treturn this.parent.style(attributeName, true);\n\t\t\t\t}\n\t\t\t\treturn this.parent.attribute(attributeName, true);\t\t\t\n\t\t\t};\n\t\t\t\n\t\t\tthis.initialValue = null;\n\t\t\tthis.removed = false;\t\t\t\n\n\t\t\tthis.calcValue = function() {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\t\n\t\t\tthis.update = function(delta) {\t\n\t\t\t\t// set initial value\n\t\t\t\tif (this.initialValue == null) {\n\t\t\t\t\tthis.initialValue = this.getProperty().value;\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// if we're past the end time\n\t\t\t\tif (this.duration > this.maxDuration) {\n\t\t\t\t\t// loop for indefinitely repeating animations\n\t\t\t\t\tif (this.attribute('repeatCount').value == 'indefinite') {\n\t\t\t\t\t\tthis.duration = 0.0\n\t\t\t\t\t}\n\t\t\t\t\telse if (this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed) {\n\t\t\t\t\t\tthis.removed = true;\n\t\t\t\t\t\tthis.getProperty().value = this.initialValue;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn false; // no updates made\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\n\t\t\t\tthis.duration = this.duration + delta;\n\t\t\t\n\t\t\t\t// if we're past the begin time\n\t\t\t\tvar updated = false;\n\t\t\t\tif (this.begin < this.duration) {\n\t\t\t\t\tvar newValue = this.calcValue(); // tween\n\t\t\t\t\t\n\t\t\t\t\tif (this.attribute('type').hasValue()) {\n\t\t\t\t\t\t// for transform, etc.\n\t\t\t\t\t\tvar type = this.attribute('type').value;\n\t\t\t\t\t\tnewValue = type + '(' + newValue + ')';\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.getProperty().value = newValue;\n\t\t\t\t\tupdated = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn updated;\n\t\t\t}\n\t\t\t\n\t\t\t// fraction of duration we've covered\n\t\t\tthis.progress = function() {\n\t\t\t\treturn ((this.duration - this.begin) / (this.maxDuration - this.begin));\n\t\t\t}\t\t\t\n\t\t}\n\t\tsvg.Element.AnimateBase.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// animate element\n\t\tsvg.Element.animate = function(node) {\n\t\t\tthis.base = svg.Element.AnimateBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.calcValue = function() {\n\t\t\t\tvar from = this.attribute('from').numValue();\n\t\t\t\tvar to = this.attribute('to').numValue();\n\t\t\t\t\n\t\t\t\t// tween value linearly\n\t\t\t\treturn from + (to - from) * this.progress(); \n\t\t\t};\n\t\t}\n\t\tsvg.Element.animate.prototype = new svg.Element.AnimateBase;\n\t\t\t\n\t\t// animate color element\n\t\tsvg.Element.animateColor = function(node) {\n\t\t\tthis.base = svg.Element.AnimateBase;\n\t\t\tthis.base(node);\n\n\t\t\tthis.calcValue = function() {\n\t\t\t\tvar from = new RGBColor(this.attribute('from').value);\n\t\t\t\tvar to = new RGBColor(this.attribute('to').value);\n\t\t\t\t\n\t\t\t\tif (from.ok && to.ok) {\n\t\t\t\t\t// tween color linearly\n\t\t\t\t\tvar r = from.r + (to.r - from.r) * this.progress();\n\t\t\t\t\tvar g = from.g + (to.g - from.g) * this.progress();\n\t\t\t\t\tvar b = from.b + (to.b - from.b) * this.progress();\n\t\t\t\t\treturn 'rgb('+parseInt(r,10)+','+parseInt(g,10)+','+parseInt(b,10)+')';\n\t\t\t\t}\n\t\t\t\treturn this.attribute('from').value;\n\t\t\t};\n\t\t}\n\t\tsvg.Element.animateColor.prototype = new svg.Element.AnimateBase;\n\t\t\n\t\t// animate transform element\n\t\tsvg.Element.animateTransform = function(node) {\n\t\t\tthis.base = svg.Element.animate;\n\t\t\tthis.base(node);\n\t\t}\n\t\tsvg.Element.animateTransform.prototype = new svg.Element.animate;\n\t\t\n\t\t// font element\n\t\tsvg.Element.font = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\n\t\t\tthis.horizAdvX = this.attribute('horiz-adv-x').numValue();\t\t\t\n\t\t\t\n\t\t\tthis.isRTL = false;\n\t\t\tthis.isArabic = false;\n\t\t\tthis.fontFace = null;\n\t\t\tthis.missingGlyph = null;\n\t\t\tthis.glyphs = [];\t\t\t\n\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\tvar child = this.children[i];\n\t\t\t\tif (child.type == 'font-face') {\n\t\t\t\t\tthis.fontFace = child;\n\t\t\t\t\tif (child.style('font-family').hasValue()) {\n\t\t\t\t\t\tsvg.Definitions[child.style('font-family').value] = this;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (child.type == 'missing-glyph') this.missingGlyph = child;\n\t\t\t\telse if (child.type == 'glyph') {\n\t\t\t\t\tif (child.arabicForm != '') {\n\t\t\t\t\t\tthis.isRTL = true;\n\t\t\t\t\t\tthis.isArabic = true;\n\t\t\t\t\t\tif (typeof(this.glyphs[child.unicode]) == 'undefined') this.glyphs[child.unicode] = [];\n\t\t\t\t\t\tthis.glyphs[child.unicode][child.arabicForm] = child;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.glyphs[child.unicode] = child;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t}\n\t\tsvg.Element.font.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// font-face element\n\t\tsvg.Element.fontface = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.ascent = this.attribute('ascent').value;\n\t\t\tthis.descent = this.attribute('descent').value;\n\t\t\tthis.unitsPerEm = this.attribute('units-per-em').numValue();\t\t\t\t\n\t\t}\n\t\tsvg.Element.fontface.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// missing-glyph element\n\t\tsvg.Element.missingglyph = function(node) {\n\t\t\tthis.base = svg.Element.path;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.horizAdvX = 0;\n\t\t}\n\t\tsvg.Element.missingglyph.prototype = new svg.Element.path;\n\t\t\n\t\t// glyph element\n\t\tsvg.Element.glyph = function(node) {\n\t\t\tthis.base = svg.Element.path;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.horizAdvX = this.attribute('horiz-adv-x').numValue();\n\t\t\tthis.unicode = this.attribute('unicode').value;\n\t\t\tthis.arabicForm = this.attribute('arabic-form').value;\n\t\t}\n\t\tsvg.Element.glyph.prototype = new svg.Element.path;\n\t\t\n\t\t// text element\n\t\tsvg.Element.text = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tif (node != null) {\n\t\t\t\t// add children\n\t\t\t\tthis.children = [];\n\t\t\t\tfor (var i=0; i<node.childNodes.length; i++) {\n\t\t\t\t\tvar childNode = node.childNodes[i];\n\t\t\t\t\tif (childNode.nodeType == 1) { // capture tspan and tref nodes\n\t\t\t\t\t\tthis.addChild(childNode, true);\n\t\t\t\t\t}\n\t\t\t\t\telse if (childNode.nodeType == 3) { // capture text\n\t\t\t\t\t\tthis.addChild(new svg.Element.tspan(childNode), false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\tif (this.style('dominant-baseline').hasValue()) ctx.textBaseline = this.style('dominant-baseline').value;\n\t\t\t\tif (this.style('alignment-baseline').hasValue()) ctx.textBaseline = this.style('alignment-baseline').value;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar textAnchor = this.style('text-anchor').valueOrDefault('start');\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tvar child = this.children[i];\n\t\t\t\t\n\t\t\t\t\tif (child.attribute('x').hasValue()) {\n\t\t\t\t\t\tchild.x = child.attribute('x').Length.toPixels('x');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (child.attribute('dx').hasValue()) x += child.attribute('dx').Length.toPixels('x');\n\t\t\t\t\t\tchild.x = x;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar childLength = child.measureText(ctx);\n\t\t\t\t\tif (textAnchor != 'start' && (i==0 || child.attribute('x').hasValue())) { // new group?\n\t\t\t\t\t\t// loop through rest of children\n\t\t\t\t\t\tvar groupLength = childLength;\n\t\t\t\t\t\tfor (var j=i+1; j<this.children.length; j++) {\n\t\t\t\t\t\t\tvar childInGroup = this.children[j];\n\t\t\t\t\t\t\tif (childInGroup.attribute('x').hasValue()) break; // new group\n\t\t\t\t\t\t\tgroupLength += childInGroup.measureText(ctx);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchild.x -= (textAnchor == 'end' ? groupLength : groupLength / 2.0);\n\t\t\t\t\t}\n\t\t\t\t\tx = child.x + childLength;\n\t\t\t\t\t\n\t\t\t\t\tif (child.attribute('y').hasValue()) {\n\t\t\t\t\t\tchild.y = child.attribute('y').Length.toPixels('y');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (child.attribute('dy').hasValue()) y += child.attribute('dy').Length.toPixels('y');\n\t\t\t\t\t\tchild.y = y;\n\t\t\t\t\t}\t\n\t\t\t\t\ty = child.y;\n\t\t\t\t\t\n\t\t\t\t\tchild.render(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsvg.Element.text.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// text base\n\t\tsvg.Element.TextElementBase = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getGlyph = function(font, text, i) {\n\t\t\t\tvar c = text[i];\n\t\t\t\tvar glyph = null;\n\t\t\t\tif (font.isArabic) {\n\t\t\t\t\tvar arabicForm = 'isolated';\n\t\t\t\t\tif ((i==0 || text[i-1]==' ') && i<text.length-2 && text[i+1]!=' ') arabicForm = 'terminal'; \n\t\t\t\t\tif (i>0 && text[i-1]!=' ' && i<text.length-2 && text[i+1]!=' ') arabicForm = 'medial';\n\t\t\t\t\tif (i>0 && text[i-1]!=' ' && (i == text.length-1 || text[i+1]==' ')) arabicForm = 'initial';\n\t\t\t\t\tif (typeof(font.glyphs[c]) != 'undefined') {\n\t\t\t\t\t\tglyph = font.glyphs[c][arabicForm];\n\t\t\t\t\t\tif (glyph == null && font.glyphs[c].type == 'glyph') glyph = font.glyphs[c];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tglyph = font.glyphs[c];\n\t\t\t\t}\n\t\t\t\tif (glyph == null) glyph = font.missingGlyph;\n\t\t\t\treturn glyph;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar customFont = this.parent.style('font-family').Definition.getDefinition();\n\t\t\t\tif (customFont != null) {\n\t\t\t\t\tvar fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tvar fontStyle = this.parent.style('font-style').valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle);\n\t\t\t\t\tvar text = this.getText();\n\t\t\t\t\tif (customFont.isRTL) text = text.split(\"\").reverse().join(\"\");\n\t\t\t\t\t\n\t\t\t\t\tvar dx = svg.ToNumberArray(this.parent.attribute('dx').value);\n\t\t\t\t\tfor (var i=0; i<text.length; i++) {\n\t\t\t\t\t\tvar glyph = this.getGlyph(customFont, text, i);\n\t\t\t\t\t\tvar scale = fontSize / customFont.fontFace.unitsPerEm;\n\t\t\t\t\t\tctx.translate(this.x, this.y);\n\t\t\t\t\t\tctx.scale(scale, -scale);\n\t\t\t\t\t\tvar lw = ctx.lineWidth;\n\t\t\t\t\t\tctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize;\n\t\t\t\t\t\tif (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0);\n\t\t\t\t\t\tglyph.render(ctx);\n\t\t\t\t\t\tif (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0);\n\t\t\t\t\t\tctx.lineWidth = lw;\n\t\t\t\t\t\tctx.scale(1/scale, -1/scale);\n\t\t\t\t\t\tctx.translate(-this.x, -this.y);\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm;\n\t\t\t\t\t\tif (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {\n\t\t\t\t\t\t\tthis.x += dx[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y);\n\t\t\t\tif (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y);\n\t\t\t}\n\t\t\t\n\t\t\tthis.getText = function() {\n\t\t\t\t// OVERRIDE ME\n\t\t\t}\n\t\t\t\n\t\t\tthis.measureText = function(ctx) {\n\t\t\t\tvar customFont = this.parent.style('font-family').Definition.getDefinition();\n\t\t\t\tif (customFont != null) {\n\t\t\t\t\tvar fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tvar measure = 0;\n\t\t\t\t\tvar text = this.getText();\n\t\t\t\t\tif (customFont.isRTL) text = text.split(\"\").reverse().join(\"\");\n\t\t\t\t\tvar dx = svg.ToNumberArray(this.parent.attribute('dx').value);\n\t\t\t\t\tfor (var i=0; i<text.length; i++) {\n\t\t\t\t\t\tvar glyph = this.getGlyph(customFont, text, i);\n\t\t\t\t\t\tmeasure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm;\n\t\t\t\t\t\tif (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {\n\t\t\t\t\t\t\tmeasure += dx[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn measure;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tvar textToMeasure = svg.compressSpaces(this.getText());\n\t\t\t\tif (!ctx.measureText) return textToMeasure.length * 10;\n\t\t\t\t\n\t\t\t\tctx.save();\n\t\t\t\tthis.setContext(ctx);\n\t\t\t\tvar width = ctx.measureText(textToMeasure).width;\n\t\t\t\tctx.restore();\n\t\t\t\treturn width;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// tspan \n\t\tsvg.Element.tspan = function(node) {\n\t\t\tthis.base = svg.Element.TextElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.text = node.nodeType == 3 ? node.nodeValue : // text\n\t\t\t\t\t\tnode.childNodes.length > 0 ? node.childNodes[0].nodeValue : // element\n\t\t\t\t\t\tnode.text;\n\t\t\tthis.getText = function() {\n\t\t\t\treturn this.text;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.tspan.prototype = new svg.Element.TextElementBase;\n\t\t\n\t\t// tref\n\t\tsvg.Element.tref = function(node) {\n\t\t\tthis.base = svg.Element.TextElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getText = function() {\n\t\t\t\tvar element = this.attribute('xlink:href').Definition.getDefinition();\n\t\t\t\tif (element != null) return element.children[0].getText();\n\t\t\t}\n\t\t}\n\t\tsvg.Element.tref.prototype = new svg.Element.TextElementBase;\t\t\n\t\t\n\t\t// a element\n\t\tsvg.Element.a = function(node) {\n\t\t\tthis.base = svg.Element.TextElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.hasText = true;\n\t\t\tfor (var i=0; i<node.childNodes.length; i++) {\n\t\t\t\tif (node.childNodes[i].nodeType != 3) this.hasText = false;\n\t\t\t}\n\t\t\t\n\t\t\t// this might contain text\n\t\t\tthis.text = this.hasText ? node.childNodes[0].nodeValue : '';\n\t\t\tthis.getText = function() {\n\t\t\t\treturn this.text;\n\t\t\t}\t\t\n\n\t\t\tthis.baseRenderChildren = this.renderChildren;\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tif (this.hasText) {\n\t\t\t\t\t// render as text element\n\t\t\t\t\tthis.baseRenderChildren(ctx);\n\t\t\t\t\tvar fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tsvg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.Length.toPixels('y'), this.x + this.measureText(ctx), this.y));\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// render as temporary group\n\t\t\t\t\tvar g = new svg.Element.g();\n\t\t\t\t\tg.children = this.children;\n\t\t\t\t\tg.parent = this;\n\t\t\t\t\tg.render(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.onclick = function() {\n\t\t\t\twindow.open(this.attribute('xlink:href').value);\n\t\t\t}\n\t\t\t\n\t\t\tthis.onmousemove = function() {\n\t\t\t\tsvg.ctx.canvas.style.cursor = 'pointer';\n\t\t\t}\n\t\t}\n\t\tsvg.Element.a.prototype = new svg.Element.TextElementBase;\t\t\n\t\t\n\t\t// image element\n\t\tsvg.Element.image = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tsvg.Images.push(this);\n\t\t\tthis.img = document.createElement('img');\n\t\t\tthis.loaded = false;\n\t\t\tvar that = this;\n\t\t\tthis.img.onload = function() { that.loaded = true; }\n\t\t\tthis.img.src = this.attribute('xlink:href').value;\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\t\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\t\t\t\n\t\t\t\tif (width == 0 || height == 0) return;\n\t\t\t\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(x, y);\n\t\t\t\tsvg.AspectRatio(ctx,\n\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value,\n\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\tthis.img.width,\n\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\tthis.img.height,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0);\t\n\t\t\t\tctx.drawImage(this.img, 0, 0);\t\t\t\n\t\t\t\tctx.restore();\n\t\t\t}\n\t\t}\n\t\tsvg.Element.image.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// group element\n\t\tsvg.Element.g = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getBoundingBox = function() {\n\t\t\t\tvar bb = new svg.BoundingBox();\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tbb.addBoundingBox(this.children[i].getBoundingBox());\n\t\t\t\t}\n\t\t\t\treturn bb;\n\t\t\t};\n\t\t}\n\t\tsvg.Element.g.prototype = new svg.Element.RenderedElementBase;\n\n\t\t// symbol element\n\t\tsvg.Element.symbol = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\t\t\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\t\n\t\t\t\t// viewbox\n\t\t\t\tif (this.attribute('viewBox').hasValue()) {\t\t\t\t\n\t\t\t\t\tvar viewBox = svg.ToNumberArray(this.attribute('viewBox').value);\n\t\t\t\t\tvar minX = viewBox[0];\n\t\t\t\t\tvar minY = viewBox[1];\n\t\t\t\t\twidth = viewBox[2];\n\t\t\t\t\theight = viewBox[3];\n\t\t\t\t\t\n\t\t\t\t\tsvg.AspectRatio(ctx,\n\t\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value, \n\t\t\t\t\t\t\t\t\tthis.attribute('width').Length.toPixels('x'),\n\t\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\t\tthis.attribute('height').Length.toPixels('y'),\n\t\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\t\tminX,\n\t\t\t\t\t\t\t\t\tminY);\n\n\t\t\t\t\tsvg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\t\tsvg.Element.symbol.prototype = new svg.Element.RenderedElementBase;\t\t\n\t\t\t\n\t\t// style element\n\t\tsvg.Element.style = function(node) { \n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\t// text, or spaces then CDATA\n\t\t\tvar css = node.childNodes[0].nodeValue + (node.childNodes.length > 1 ? node.childNodes[1].nodeValue : '');\n\t\t\tcss = css.replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*\\/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm, ''); // remove comments\n\t\t\tcss = svg.compressSpaces(css); // replace whitespace\n\t\t\tvar cssDefs = css.split('}');\n\t\t\tfor (var i=0; i<cssDefs.length; i++) {\n\t\t\t\tif (svg.trim(cssDefs[i]) != '') {\n\t\t\t\t\tvar cssDef = cssDefs[i].split('{');\n\t\t\t\t\tvar cssClasses = cssDef[0].split(',');\n\t\t\t\t\tvar cssProps = cssDef[1].split(';');\n\t\t\t\t\tfor (var j=0; j<cssClasses.length; j++) {\n\t\t\t\t\t\tvar cssClass = svg.trim(cssClasses[j]);\n\t\t\t\t\t\tif (cssClass != '') {\n\t\t\t\t\t\t\tvar props = {};\n\t\t\t\t\t\t\tfor (var k=0; k<cssProps.length; k++) {\n\t\t\t\t\t\t\t\tvar prop = cssProps[k].indexOf(':');\n\t\t\t\t\t\t\t\tvar name = cssProps[k].substr(0, prop);\n\t\t\t\t\t\t\t\tvar value = cssProps[k].substr(prop + 1, cssProps[k].length - prop);\n\t\t\t\t\t\t\t\tif (name != null && value != null) {\n\t\t\t\t\t\t\t\t\tprops[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsvg.Styles[cssClass] = props;\n\t\t\t\t\t\t\tif (cssClass == '@font-face') {\n\t\t\t\t\t\t\t\tvar fontFamily = props['font-family'].value.replace(/\"/g,'');\n\t\t\t\t\t\t\t\tvar srcs = props['src'].value.split(',');\n\t\t\t\t\t\t\t\tfor (var s=0; s<srcs.length; s++) {\n\t\t\t\t\t\t\t\t\tif (srcs[s].indexOf('format(\"svg\")') > 0) {\n\t\t\t\t\t\t\t\t\t\tvar urlStart = srcs[s].indexOf('url');\n\t\t\t\t\t\t\t\t\t\tvar urlEnd = srcs[s].indexOf(')', urlStart);\n\t\t\t\t\t\t\t\t\t\tvar url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6);\n\t\t\t\t\t\t\t\t\t\tvar doc = svg.parseXml(svg.ajax(url));\n\t\t\t\t\t\t\t\t\t\tvar fonts = doc.getElementsByTagName('font');\n\t\t\t\t\t\t\t\t\t\tfor (var f=0; f<fonts.length; f++) {\n\t\t\t\t\t\t\t\t\t\t\tvar font = svg.CreateElement(fonts[f]);\n\t\t\t\t\t\t\t\t\t\t\tsvg.Definitions[fontFamily] = font;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsvg.Element.style.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// use element \n\t\tsvg.Element.use = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\tif (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').Length.toPixels('x'), 0);\n\t\t\t\tif (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').Length.toPixels('y'));\n\t\t\t}\n\t\t\t\n\t\t\tthis.getDefinition = function() {\n\t\t\t\tvar element = this.attribute('xlink:href').Definition.getDefinition();\n\t\t\t\tif (this.attribute('width').hasValue()) element.attribute('width', true).value = this.attribute('width').value;\n\t\t\t\tif (this.attribute('height').hasValue()) element.attribute('height', true).value = this.attribute('height').value;\n\t\t\t\treturn element;\n\t\t\t}\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar element = this.getDefinition();\n\t\t\t\tif (element != null) element.path(ctx);\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar element = this.getDefinition();\n\t\t\t\tif (element != null) element.render(ctx);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.use.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// mask element\n\t\tsvg.Element.mask = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\t\t\t\n\t\t\tthis.apply = function(ctx, element) {\n\t\t\t\t// render as temp svg\t\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\n\t\t\t\t\n\t\t\t\t// temporarily remove mask to avoid recursion\n\t\t\t\tvar mask = element.attribute('mask').value;\n\t\t\t\telement.attribute('mask').value = '';\n\t\t\t\t\n\t\t\t\t\tvar cMask = document.createElement('canvas');\n\t\t\t\t\tcMask.width = x + width;\n\t\t\t\t\tcMask.height = y + height;\n\t\t\t\t\tvar maskCtx = cMask.getContext('2d');\n\t\t\t\t\tthis.renderChildren(maskCtx);\n\t\t\t\t\n\t\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\t\tc.width = x + width;\n\t\t\t\t\tc.height = y + height;\n\t\t\t\t\tvar tempCtx = c.getContext('2d');\n\t\t\t\t\telement.render(tempCtx);\n\t\t\t\t\ttempCtx.globalCompositeOperation = 'destination-in';\n\t\t\t\t\ttempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat');\n\t\t\t\t\ttempCtx.fillRect(0, 0, x + width, y + height);\n\t\t\t\t\t\n\t\t\t\t\tctx.fillStyle = tempCtx.createPattern(c, 'no-repeat');\n\t\t\t\t\tctx.fillRect(0, 0, x + width, y + height);\n\t\t\t\t\t\n\t\t\t\t// reassign mask\n\t\t\t\telement.attribute('mask').value = mask;\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NO RENDER\n\t\t\t}\n\t\t}\n\t\tsvg.Element.mask.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// clip element\n\t\tsvg.Element.clipPath = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.apply = function(ctx) {\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tif (this.children[i].path) {\n\t\t\t\t\t\tthis.children[i].path(ctx);\n\t\t\t\t\t\tctx.clip();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NO RENDER\n\t\t\t}\n\t\t}\n\t\tsvg.Element.clipPath.prototype = new svg.Element.ElementBase;\n\n\t\t// filters\n\t\tsvg.Element.filter = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\t\t\t\n\t\t\tthis.apply = function(ctx, element) {\n\t\t\t\t// render as temp svg\t\n\t\t\t\tvar bb = element.getBoundingBox();\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tif (x == 0 || y == 0) {\n\t\t\t\t\tx = bb.x1;\n\t\t\t\t\ty = bb.y1;\n\t\t\t\t}\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\n\t\t\t\tif (width == 0 || height == 0) {\n\t\t\t\t\twidth = bb.width();\n\t\t\t\t\theight = bb.height();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// temporarily remove filter to avoid recursion\n\t\t\t\tvar filter = element.style('filter').value;\n\t\t\t\telement.style('filter').value = '';\n\t\t\t\t\n\t\t\t\t// max filter distance\n\t\t\t\tvar extraPercent = .20;\n\t\t\t\tvar px = extraPercent * width;\n\t\t\t\tvar py = extraPercent * height;\n\t\t\t\t\n\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\tc.width = width + 2*px;\n\t\t\t\tc.height = height + 2*py;\n\t\t\t\tvar tempCtx = c.getContext('2d');\n\t\t\t\ttempCtx.translate(-x + px, -y + py);\n\t\t\t\telement.render(tempCtx);\n\t\t\t\n\t\t\t\t// apply filters\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tthis.children[i].apply(tempCtx, 0, 0, width + 2*px, height + 2*py);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// render on me\n\t\t\t\tctx.drawImage(c, 0, 0, width + 2*px, height + 2*py, x - px, y - py, width + 2*px, height + 2*py);\n\t\t\t\t\n\t\t\t\t// reassign filter\n\t\t\t\telement.style('filter', true).value = filter;\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NO RENDER\n\t\t\t}\t\t\n\t\t}\n\t\tsvg.Element.filter.prototype = new svg.Element.ElementBase;\n\t\t\n\t\tsvg.Element.feGaussianBlur = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tfunction make_fgauss(sigma) {\n\t\t\t\tsigma = Math.max(sigma, 0.01);\t\t\t      \n\t\t\t\tvar len = Math.ceil(sigma * 4.0) + 1;                     \n\t\t\t\tmask = [];                               \n\t\t\t\tfor (var i = 0; i < len; i++) {                             \n\t\t\t\t\tmask[i] = Math.exp(-0.5 * (i / sigma) * (i / sigma));                                           \n\t\t\t\t}                                                           \n\t\t\t\treturn mask; \n\t\t\t}\n\t\t\t\n\t\t\tfunction normalize(mask) {\n\t\t\t\tvar sum = 0;\n\t\t\t\tfor (var i = 1; i < mask.length; i++) {\n\t\t\t\t\tsum += Math.abs(mask[i]);\n\t\t\t\t}\n\t\t\t\tsum = 2 * sum + Math.abs(mask[0]);\n\t\t\t\tfor (var i = 0; i < mask.length; i++) {\n\t\t\t\t\tmask[i] /= sum;\n\t\t\t\t}\n\t\t\t\treturn mask;\n\t\t\t}\n\t\t\t\n\t\t\tfunction convolve_even(src, dst, mask, width, height) {\n\t\t\t  for (var y = 0; y < height; y++) {\n\t\t\t\tfor (var x = 0; x < width; x++) {\n\t\t\t\t  var a = imGet(src, x, y, width, height, 3)/255;\n\t\t\t\t  for (var rgba = 0; rgba < 4; rgba++) {\t\t\t\t\t  \n\t\t\t\t\t  var sum = mask[0] * (a==0?255:imGet(src, x, y, width, height, rgba)) * (a==0||rgba==3?1:a);\n\t\t\t\t\t  for (var i = 1; i < mask.length; i++) {\n\t\t\t\t\t\tvar a1 = imGet(src, Math.max(x-i,0), y, width, height, 3)/255;\n\t\t\t\t\t    var a2 = imGet(src, Math.min(x+i, width-1), y, width, height, 3)/255;\n\t\t\t\t\t\tsum += mask[i] * \n\t\t\t\t\t\t  ((a1==0?255:imGet(src, Math.max(x-i,0), y, width, height, rgba)) * (a1==0||rgba==3?1:a1) + \n\t\t\t\t\t\t   (a2==0?255:imGet(src, Math.min(x+i, width-1), y, width, height, rgba)) * (a2==0||rgba==3?1:a2));\n\t\t\t\t\t  }\n\t\t\t\t\t  imSet(dst, y, x, height, width, rgba, sum);\n\t\t\t\t  }\t\t\t  \n\t\t\t\t}\n\t\t\t  }\n\t\t\t}\t\t\n\n\t\t\tfunction imGet(img, x, y, width, height, rgba) {\n\t\t\t\treturn img[y*width*4 + x*4 + rgba];\n\t\t\t}\n\t\t\t\n\t\t\tfunction imSet(img, x, y, width, height, rgba, val) {\n\t\t\t\timg[y*width*4 + x*4 + rgba] = val;\n\t\t\t}\n\t\t\t\t\t\t\n\t\t\tfunction blur(ctx, width, height, sigma)\n\t\t\t{\n\t\t\t\tvar srcData = ctx.getImageData(0, 0, width, height);\n\t\t\t\tvar mask = make_fgauss(sigma);\n\t\t\t\tmask = normalize(mask);\n\t\t\t\ttmp = [];\n\t\t\t\tconvolve_even(srcData.data, tmp, mask, width, height);\n\t\t\t\tconvolve_even(tmp, srcData.data, mask, height, width);\n\t\t\t\tctx.clearRect(0, 0, width, height);\n\t\t\t\tctx.putImageData(srcData, 0, 0);\n\t\t\t}\t\t\t\n\t\t\n\t\t\tthis.apply = function(ctx, x, y, width, height) {\n\t\t\t\t// assuming x==0 && y==0 for now\n\t\t\t\tblur(ctx, width, height, this.attribute('stdDeviation').numValue());\n\t\t\t}\n\t\t}\n\t\tsvg.Element.filter.prototype = new svg.Element.feGaussianBlur;\n\t\t\n\t\t// title element, do nothing\n\t\tsvg.Element.title = function(node) {\n\t\t}\n\t\tsvg.Element.title.prototype = new svg.Element.ElementBase;\n\n\t\t// desc element, do nothing\n\t\tsvg.Element.desc = function(node) {\n\t\t}\n\t\tsvg.Element.desc.prototype = new svg.Element.ElementBase;\t\t\n\t\t\n\t\tsvg.Element.MISSING = function(node) {\n\t\t\tconsole.log('ERROR: Element \\'' + node.nodeName + '\\' not yet implemented.');\n\t\t}\n\t\tsvg.Element.MISSING.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// element factory\n\t\tsvg.CreateElement = function(node) {\t\n\t\t\tvar className = node.nodeName.replace(/^[^:]+:/,''); // remove namespace\n\t\t\tclassName = className.replace(/\\-/g,''); // remove dashes\n\t\t\tvar e = null;\n\t\t\tif (typeof(svg.Element[className]) != 'undefined') {\n\t\t\t\te = new svg.Element[className](node);\n\t\t\t}\n\t\t\telse {\n\t\t\t\te = new svg.Element.MISSING(node);\n\t\t\t}\n\n\t\t\te.type = node.nodeName;\n\t\t\treturn e;\n\t\t}\n\t\t\t\t\n\t\t// load from url\n\t\tsvg.load = function(ctx, url) {\n\t\t\tsvg.loadXml(ctx, svg.ajax(url));\n\t\t}\n\t\t\n\t\t// load from xml\n\t\tsvg.loadXml = function(ctx, xml) {\n\t\t\tsvg.loadXmlDoc(ctx, svg.parseXml(xml));\n\t\t}\n\t\t\n\t\tsvg.loadXmlDoc = function(ctx, dom) {\n\t\t\tsvg.init(ctx);\n\t\t\t\n\t\t\tvar mapXY = function(p) {\n\t\t\t\tvar e = ctx.canvas;\n\t\t\t\twhile (e) {\n\t\t\t\t\tp.x -= e.offsetLeft;\n\t\t\t\t\tp.y -= e.offsetTop;\n\t\t\t\t\te = e.offsetParent;\n\t\t\t\t}\n\t\t\t\tif (window.scrollX) p.x += window.scrollX;\n\t\t\t\tif (window.scrollY) p.y += window.scrollY;\n\t\t\t\treturn p;\n\t\t\t}\n\t\t\t\n\t\t\t// bind mouse\n\t\t\tif (svg.opts['ignoreMouse'] != true) {\n\t\t\t\tctx.canvas.onclick = function(e) {\n\t\t\t\t\tvar p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));\n\t\t\t\t\tsvg.Mouse.onclick(p.x, p.y);\n\t\t\t\t};\n\t\t\t\tctx.canvas.onmousemove = function(e) {\n\t\t\t\t\tvar p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));\n\t\t\t\t\tsvg.Mouse.onmousemove(p.x, p.y);\n\t\t\t\t};\n\t\t\t}\n\t\t\n\t\t\tvar e = svg.CreateElement(dom.documentElement);\n\t\t\te.root = true;\n\t\t\t\t\t\n\t\t\t// render loop\n\t\t\tvar isFirstRender = true;\n\t\t\tvar draw = function() {\n\t\t\t\tsvg.ViewPort.Clear();\n\t\t\t\tif (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight);\n\t\t\t\n\t\t\t\tif (svg.opts['ignoreDimensions'] != true) {\n\t\t\t\t\t// set canvas size\n\t\t\t\t\tif (e.style('width').hasValue()) {\n\t\t\t\t\t\tctx.canvas.width = e.style('width').Length.toPixels('x');\n\t\t\t\t\t\tctx.canvas.style.width = ctx.canvas.width + 'px';\n\t\t\t\t\t}\n\t\t\t\t\tif (e.style('height').hasValue()) {\n\t\t\t\t\t\tctx.canvas.height = e.style('height').Length.toPixels('y');\n\t\t\t\t\t\tctx.canvas.style.height = ctx.canvas.height + 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar cWidth = ctx.canvas.clientWidth || ctx.canvas.width;\n\t\t\t\tvar cHeight = ctx.canvas.clientHeight || ctx.canvas.height;\n\t\t\t\tsvg.ViewPort.SetCurrent(cWidth, cHeight);\t\t\n\t\t\t\t\n\t\t\t\tif (svg.opts != null && svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX'];\n\t\t\t\tif (svg.opts != null && svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY'];\n\t\t\t\tif (svg.opts != null && svg.opts['scaleWidth'] != null && svg.opts['scaleHeight'] != null) {\n\t\t\t\t\tvar xRatio = 1, yRatio = 1;\n\t\t\t\t\tif (e.attribute('width').hasValue()) xRatio = e.attribute('width').Length.toPixels('x') / svg.opts['scaleWidth'];\n\t\t\t\t\tif (e.attribute('height').hasValue()) yRatio = e.attribute('height').Length.toPixels('y') / svg.opts['scaleHeight'];\n\t\t\t\t\n\t\t\t\t\te.attribute('width', true).value = svg.opts['scaleWidth'];\n\t\t\t\t\te.attribute('height', true).value = svg.opts['scaleHeight'];\t\t\t\n\t\t\t\t\te.attribute('viewBox', true).value = '0 0 ' + (cWidth * xRatio) + ' ' + (cHeight * yRatio);\n\t\t\t\t\te.attribute('preserveAspectRatio', true).value = 'none';\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// clear and render\n\t\t\t\tif (svg.opts['ignoreClear'] != true) {\n\t\t\t\t\tctx.clearRect(0, 0, cWidth, cHeight);\n\t\t\t\t}\n\t\t\t\te.render(ctx);\n\t\t\t\tif (isFirstRender) {\n\t\t\t\t\tisFirstRender = false;\n\t\t\t\t\tif (svg.opts != null && typeof(svg.opts['renderCallback']) == 'function') svg.opts['renderCallback']();\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tvar waitingForImages = true;\n\t\t\tif (svg.ImagesLoaded()) {\n\t\t\t\twaitingForImages = false;\n\t\t\t\tdraw();\n\t\t\t}\n\t\t\tsvg.intervalID = setInterval(function() { \n\t\t\t\tvar needUpdate = false;\n\t\t\t\t\n\t\t\t\tif (waitingForImages && svg.ImagesLoaded()) {\n\t\t\t\t\twaitingForImages = false;\n\t\t\t\t\tneedUpdate = true;\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// need update from mouse events?\n\t\t\t\tif (svg.opts['ignoreMouse'] != true) {\n\t\t\t\t\tneedUpdate = needUpdate | svg.Mouse.hasEvents();\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// need update from animations?\n\t\t\t\tif (svg.opts['ignoreAnimation'] != true) {\n\t\t\t\t\tfor (var i=0; i<svg.Animations.length; i++) {\n\t\t\t\t\t\tneedUpdate = needUpdate | svg.Animations[i].update(1000 / svg.FRAMERATE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// need update from redraw?\n\t\t\t\tif (svg.opts != null && typeof(svg.opts['forceRedraw']) == 'function') {\n\t\t\t\t\tif (svg.opts['forceRedraw']() == true) needUpdate = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// render if needed\n\t\t\t\tif (needUpdate) {\n\t\t\t\t\tdraw();\t\t\t\t\n\t\t\t\t\tsvg.Mouse.runEvents(); // run and clear our events\n\t\t\t\t}\n\t\t\t}, 1000 / svg.FRAMERATE);\n\t\t}\n\t\t\n\t\tsvg.stop = function() {\n\t\t\tif (svg.intervalID) {\n\t\t\t\tclearInterval(svg.intervalID);\n\t\t\t}\n\t\t}\n\t\t\n\t\tsvg.Mouse = new (function() {\n\t\t\tthis.events = [];\n\t\t\tthis.hasEvents = function() { return this.events.length != 0; }\n\t\t\n\t\t\tthis.onclick = function(x, y) {\n\t\t\t\tthis.events.push({ type: 'onclick', x: x, y: y, \n\t\t\t\t\trun: function(e) { if (e.onclick) e.onclick(); }\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.onmousemove = function(x, y) {\n\t\t\t\tthis.events.push({ type: 'onmousemove', x: x, y: y,\n\t\t\t\t\trun: function(e) { if (e.onmousemove) e.onmousemove(); }\n\t\t\t\t});\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\tthis.eventElements = [];\n\t\t\t\n\t\t\tthis.checkPath = function(element, ctx) {\n\t\t\t\tfor (var i=0; i<this.events.length; i++) {\n\t\t\t\t\tvar e = this.events[i];\n\t\t\t\t\tif (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.checkBoundingBox = function(element, bb) {\n\t\t\t\tfor (var i=0; i<this.events.length; i++) {\n\t\t\t\t\tvar e = this.events[i];\n\t\t\t\t\tif (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element;\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.runEvents = function() {\n\t\t\t\tsvg.ctx.canvas.style.cursor = '';\n\t\t\t\t\n\t\t\t\tfor (var i=0; i<this.events.length; i++) {\n\t\t\t\t\tvar e = this.events[i];\n\t\t\t\t\tvar element = this.eventElements[i];\n\t\t\t\t\twhile (element) {\n\t\t\t\t\t\te.run(element);\n\t\t\t\t\t\telement = element.parent;\n\t\t\t\t\t}\n\t\t\t\t}\t\t\n\t\t\t\n\t\t\t\t// done running, clear\n\t\t\t\tthis.events = []; \n\t\t\t\tthis.eventElements = [];\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn svg;\n\t}\n})();\n\nif (CanvasRenderingContext2D) {\n\tCanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) {\n\t\tcanvg(this.canvas, s, { \n\t\t\tignoreMouse: true, \n\t\t\tignoreAnimation: true, \n\t\t\tignoreDimensions: true, \n\t\t\tignoreClear: true, \n\t\t\toffsetX: dx, \n\t\t\toffsetY: dy, \n\t\t\tscaleWidth: dw, \n\t\t\tscaleHeight: dh\n\t\t});\n\t}\n}/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * CanVGRenderer Extension module\n *\n * (c) 2011-2012 Torstein Hønsi, Erik Olsson\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts */\n\n(function (Highcharts) { // encapsulate\n\tvar UNDEFINED,\n\t\tDIV = 'div',\n\t\tABSOLUTE = 'absolute',\n\t\tRELATIVE = 'relative',\n\t\tHIDDEN = 'hidden',\n\t\tVISIBLE = 'visible',\n\t\tPX = 'px',\n\t\tcss = Highcharts.css,\n\t\tCanVGRenderer = Highcharts.CanVGRenderer,\n\t\tSVGRenderer = Highcharts.SVGRenderer,\n\t\textend = Highcharts.extend,\n\t\tmerge = Highcharts.merge,\n\t\taddEvent = Highcharts.addEvent,\n\t\tcreateElement = Highcharts.createElement,\n\t\tdiscardElement = Highcharts.discardElement;\n\n\t// Extend CanVG renderer on demand, inherit from SVGRenderer\n\textend(CanVGRenderer.prototype, SVGRenderer.prototype);\n\n\t// Add additional functionality:\n\textend(CanVGRenderer.prototype, {\n\t\tcreate: function (chart, container, chartWidth, chartHeight) {\n\t\t\tthis.setContainer(container, chartWidth, chartHeight);\n\t\t\tthis.configure(chart);\n\t\t},\n\t\tsetContainer: function (container, chartWidth, chartHeight) {\n\t\t\tvar containerStyle = container.style,\n\t\t\t\tcontainerParent = container.parentNode,\n\t\t\t\tcontainerLeft = containerStyle.left,\n\t\t\t\tcontainerTop = containerStyle.top,\n\t\t\t\tcontainerOffsetWidth = container.offsetWidth,\n\t\t\t\tcontainerOffsetHeight = container.offsetHeight,\n\t\t\t\tcanvas,\n\t\t\t\tinitialHiddenStyle = { visibility: HIDDEN, position: ABSOLUTE };\n\n\t\t\tthis.init.apply(this, [container, chartWidth, chartHeight]);\n\n\t\t\t// add the canvas above it\n\t\t\tcanvas = createElement('canvas', {\n\t\t\t\twidth: containerOffsetWidth,\n\t\t\t\theight: containerOffsetHeight\n\t\t\t}, {\n\t\t\t\tposition: RELATIVE,\n\t\t\t\tleft: containerLeft,\n\t\t\t\ttop: containerTop\n\t\t\t}, container);\n\t\t\tthis.canvas = canvas;\n\n\t\t\t// Create the tooltip line and div, they are placed as siblings to\n\t\t\t// the container (and as direct childs to the div specified in the html page)\n\t\t\tthis.ttLine = createElement(DIV, null, initialHiddenStyle, containerParent);\n\t\t\tthis.ttDiv = createElement(DIV, null, initialHiddenStyle, containerParent);\n\t\t\tthis.ttTimer = UNDEFINED;\n\n\t\t\t// Move away the svg node to a new div inside the container's parent so we can hide it.\n\t\t\tvar hiddenSvg = createElement(DIV, {\n\t\t\t\twidth: containerOffsetWidth,\n\t\t\t\theight: containerOffsetHeight\n\t\t\t}, {\n\t\t\t\tvisibility: HIDDEN,\n\t\t\t\tleft: containerLeft,\n\t\t\t\ttop: containerTop\n\t\t\t}, containerParent);\n\t\t\tthis.hiddenSvg = hiddenSvg;\n\t\t\thiddenSvg.appendChild(this.box);\n\t\t},\n\n\t\t/**\n\t\t * Configures the renderer with the chart. Attach a listener to the event tooltipRefresh.\n\t\t **/\n\t\tconfigure: function (chart) {\n\t\t\tvar renderer = this,\n\t\t\t\toptions = chart.options.tooltip,\n\t\t\t\tborderWidth = options.borderWidth,\n\t\t\t\ttooltipDiv = renderer.ttDiv,\n\t\t\t\ttooltipDivStyle = options.style,\n\t\t\t\ttooltipLine = renderer.ttLine,\n\t\t\t\tpadding = parseInt(tooltipDivStyle.padding, 10);\n\n\t\t\t// Add border styling from options to the style\n\t\t\ttooltipDivStyle = merge(tooltipDivStyle, {\n\t\t\t\tpadding: padding + PX,\n\t\t\t\t'background-color': options.backgroundColor,\n\t\t\t\t'border-style': 'solid',\n\t\t\t\t'border-width': borderWidth + PX,\n\t\t\t\t'border-radius': options.borderRadius + PX\n\t\t\t});\n\n\t\t\t// Optionally add shadow\n\t\t\tif (options.shadow) {\n\t\t\t\ttooltipDivStyle = merge(tooltipDivStyle, {\n\t\t\t\t\t'box-shadow': '1px 1px 3px gray', // w3c\n\t\t\t\t\t'-webkit-box-shadow': '1px 1px 3px gray' // webkit\n\t\t\t\t});\n\t\t\t}\n\t\t\tcss(tooltipDiv, tooltipDivStyle);\n\n\t\t\t// Set simple style on the line\n\t\t\tcss(tooltipLine, {\n\t\t\t\t'border-left': '1px solid darkgray'\n\t\t\t});\n\n\t\t\t// This event is triggered when a new tooltip should be shown\n\t\t\taddEvent(chart, 'tooltipRefresh', function (args) {\n\t\t\t\tvar chartContainer = chart.container,\n\t\t\t\t\toffsetLeft = chartContainer.offsetLeft,\n\t\t\t\t\toffsetTop = chartContainer.offsetTop,\n\t\t\t\t\tposition;\n\n\t\t\t\t// Set the content of the tooltip\n\t\t\t\ttooltipDiv.innerHTML = args.text;\n\n\t\t\t\t// Compute the best position for the tooltip based on the divs size and container size.\n\t\t\t\tposition = chart.tooltip.getPosition(tooltipDiv.offsetWidth, tooltipDiv.offsetHeight, {plotX: args.x, plotY: args.y});\n\n\t\t\t\tcss(tooltipDiv, {\n\t\t\t\t\tvisibility: VISIBLE,\n\t\t\t\t\tleft: position.x + PX,\n\t\t\t\t\ttop: position.y + PX,\n\t\t\t\t\t'border-color': args.borderColor\n\t\t\t\t});\n\n\t\t\t\t// Position the tooltip line\n\t\t\t\tcss(tooltipLine, {\n\t\t\t\t\tvisibility: VISIBLE,\n\t\t\t\t\tleft: offsetLeft + args.x + PX,\n\t\t\t\t\ttop: offsetTop + chart.plotTop + PX,\n\t\t\t\t\theight: chart.plotHeight  + PX\n\t\t\t\t});\n\n\t\t\t\t// This timeout hides the tooltip after 3 seconds\n\t\t\t\t// First clear any existing timer\n\t\t\t\tif (renderer.ttTimer !== UNDEFINED) {\n\t\t\t\t\tclearTimeout(renderer.ttTimer);\n\t\t\t\t}\n\n\t\t\t\t// Start a new timer that hides tooltip and line\n\t\t\t\trenderer.ttTimer = setTimeout(function () {\n\t\t\t\t\tcss(tooltipDiv, { visibility: HIDDEN });\n\t\t\t\t\tcss(tooltipLine, { visibility: HIDDEN });\n\t\t\t\t}, 3000);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Extend SVGRenderer.destroy to also destroy the elements added by CanVGRenderer.\n\t\t */\n\t\tdestroy: function () {\n\t\t\tvar renderer = this;\n\n\t\t\t// Remove the canvas\n\t\t\tdiscardElement(renderer.canvas);\n\n\t\t\t// Kill the timer\n\t\t\tif (renderer.ttTimer !== UNDEFINED) {\n\t\t\t\tclearTimeout(renderer.ttTimer);\n\t\t\t}\n\n\t\t\t// Remove the divs for tooltip and line\n\t\t\tdiscardElement(renderer.ttLine);\n\t\t\tdiscardElement(renderer.ttDiv);\n\t\t\tdiscardElement(renderer.hiddenSvg);\n\n\t\t\t// Continue with base class\n\t\t\treturn SVGRenderer.prototype.destroy.apply(renderer);\n\t\t},\n\n\t\t/**\n\t\t * Take a color and return it if it's a string, do not make it a gradient even if it is a\n\t\t * gradient. Currently canvg cannot render gradients (turns out black),\n\t\t * see: http://code.google.com/p/canvg/issues/detail?id=104\n\t\t *\n\t\t * @param {Object} color The color or config object\n\t\t */\n\t\tcolor: function (color, elem, prop) {\n\t\t\tif (color && color.linearGradient) {\n\t\t\t\t// Pick the end color and forward to base implementation\n\t\t\t\tcolor = color.stops[color.stops.length - 1][1];\n\t\t\t}\n\t\t\treturn SVGRenderer.prototype.color.call(this, color, elem, prop);\n\t\t},\n\n\t\t/**\n\t\t * Draws the SVG on the canvas or adds a draw invokation to the deferred list.\n\t\t */\n\t\tdraw: function () {\n\t\t\tvar renderer = this;\n\t\t\twindow.canvg(renderer.canvas, renderer.hiddenSvg.innerHTML);\n\t\t}\n\t});\n}(Highcharts));\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/data.js",
    "content": "/*\n Data plugin for Highcharts\n\n (c) 2012-2013 Torstein Hønsi\n Last revision 2013-06-07\n\n License: www.highcharts.com/license\n*/\n(function(h){var k=h.each,m=function(b,a){this.init(b,a)};h.extend(m.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.columns.length?this.dataFound():(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=b&&b.chart&&b.chart.type,c=[];k(b&&b.series||[],function(b){c.push((h.seriesTypes[b.type||a||\"line\"].prototype.pointArrayMap||[0]).length)});this.valueCount=\n{global:(h.seriesTypes[a||\"line\"].prototype.pointArrayMap||[0]).length,individual:c}},dataFound:function(){this.parseTypes();this.findHeaderRow();this.parsed();this.complete()},parseCSV:function(){var b=this,a=this.options,c=a.csv,d=this.columns,f=a.startRow||0,i=a.endRow||Number.MAX_VALUE,j=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g=0;c&&(c=c.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\").split(a.lineDelimiter||\"\\n\"),k(c,function(c,h){var n=b.trim(c),p=n.indexOf(\"#\")===0;h>=f&&h<=i&&!p&&n!==\"\"&&\n(n=c.split(a.itemDelimiter||\",\"),k(n,function(b,a){a>=j&&a<=e&&(d[a-j]||(d[a-j]=[]),d[a-j][g]=b)}),g+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,c=this.columns,d=b.startRow||0,f=b.endRow||Number.MAX_VALUE,i=b.startColumn||0,j=b.endColumn||Number.MAX_VALUE,e;a&&(typeof a===\"string\"&&(a=document.getElementById(a)),k(a.getElementsByTagName(\"tr\"),function(a,b){e=0;b>=d&&b<=f&&k(a.childNodes,function(a){if((a.tagName===\"TD\"||a.tagName===\"TH\")&&e>=i&&e<=j)c[e]||(c[e]=[]),\nc[e][b-d]=a.innerHTML,e+=1})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this,a=this.options,c=a.googleSpreadsheetKey,d=this.columns,f=a.startRow||0,i=a.endRow||Number.MAX_VALUE,j=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,h;c&&jQuery.getJSON(\"https://spreadsheets.google.com/feeds/cells/\"+c+\"/\"+(a.googleSpreadsheetWorksheet||\"od6\")+\"/public/values?alt=json-in-script&callback=?\",function(a){var a=a.feed.entry,c,k=a.length,m=0,o=0,l;for(l=0;l<k;l++)c=a[l],m=Math.max(m,c.gs$cell.col),\no=Math.max(o,c.gs$cell.row);for(l=0;l<m;l++)if(l>=j&&l<=e)d[l-j]=[],d[l-j].length=Math.min(o,i-f);for(l=0;l<k;l++)if(c=a[l],g=c.gs$cell.row-1,h=c.gs$cell.col-1,h>=j&&h<=e&&g>=f&&g<=i)d[h-j][g-f]=c.content.$t;b.dataFound()})},findHeaderRow:function(){k(this.columns,function(){});this.headerRow=0},trim:function(b){return typeof b===\"string\"?b.replace(/^\\s+|\\s+$/g,\"\"):b},parseTypes:function(){for(var b=this.columns,a=b.length,c,d,f,i;a--;)for(c=b[a].length;c--;)d=b[a][c],f=parseFloat(d),i=this.trim(d),\ni==f?(b[a][c]=f,f>31536E6?b[a].isDatetime=!0:b[a].isNumeric=!0):(d=this.parseDate(d),a===0&&typeof d===\"number\"&&!isNaN(d)?(b[a][c]=d,b[a].isDatetime=!0):b[a][c]=i===\"\"?null:i)},dateFormats:{\"YYYY-mm-dd\":{regex:\"^([0-9]{4})-([0-9]{2})-([0-9]{2})$\",parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}}},parseDate:function(b){var a=this.options.parseDate,c,d,f;a&&(c=a(b));if(typeof b===\"string\")for(d in this.dateFormats)a=this.dateFormats[d],(f=b.match(a.regex))&&(c=a.parser(f));return c},rowsToColumns:function(b){var a,\nc,d,f,i;if(b){i=[];c=b.length;for(a=0;a<c;a++){f=b[a].length;for(d=0;d<f;d++)i[d]||(i[d]=[]),i[d][a]=b[a][d]}}return i},parsed:function(){this.options.parsed&&this.options.parsed.call(this,this.columns)},complete:function(){var b=this.columns,a,c,d=this.options,f,i,j,e,g,k;if(d.complete){this.getColumnDistribution();b.length>1&&(a=b.shift(),this.headerRow===0&&a.shift(),a.isDatetime?c=\"datetime\":a.isNumeric||(c=\"category\"));for(e=0;e<b.length;e++)if(this.headerRow===0)b[e].name=b[e].shift();i=[];\nfor(e=0,k=0;e<b.length;k++){f=h.pick(this.valueCount.individual[k],this.valueCount.global);j=[];for(g=0;g<b[e].length;g++)j[g]=[a[g],b[e][g]!==void 0?b[e][g]:null],f>1&&j[g].push(b[e+1][g]!==void 0?b[e+1][g]:null),f>2&&j[g].push(b[e+2][g]!==void 0?b[e+2][g]:null),f>3&&j[g].push(b[e+3][g]!==void 0?b[e+3][g]:null),f>4&&j[g].push(b[e+4][g]!==void 0?b[e+4][g]:null);i[k]={name:b[e].name,data:j};e+=f}d.complete({xAxis:{type:c},series:i})}}});h.Data=m;h.data=function(b,a){return new m(b,a)};h.wrap(h.Chart.prototype,\n\"init\",function(b,a,c){var d=this;a&&a.data?h.data(h.extend(a.data,{complete:function(f){a.series&&k(a.series,function(b,c){a.series[c]=h.merge(b,f.series[c])});a=h.merge(f,a);b.call(d,a,c)}}),a):b.call(d,a,c)})})(Highcharts);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/data.src.js",
    "content": "/**\n * @license Data plugin for Highcharts\n *\n * (c) 2012-2013 Torstein Hønsi\n * Last revision 2013-06-07\n *\n * License: www.highcharts.com/license\n */\n\n/*\n * The Highcharts Data plugin is a utility to ease parsing of input sources like\n * CSV, HTML tables or grid views into basic configuration options for use \n * directly in the Highcharts constructor.\n *\n * Demo: http://jsfiddle.net/highcharts/SnLFj/\n *\n * --- OPTIONS ---\n *\n * - columns : Array<Array<Mixed>>\n * A two-dimensional array representing the input data on tabular form. This input can\n * be used when the data is already parsed, for example from a grid view component.\n * Each cell can be a string or number. If not switchRowsAndColumns is set, the columns\n * are interpreted as series. See also the rows option.\n *\n * - complete : Function(chartOptions)\n * The callback that is evaluated when the data is finished loading, optionally from an \n * external source, and parsed. The first argument passed is a finished chart options\n * object, containing series and an xAxis with categories if applicable. Thise options\n * can be extended with additional options and passed directly to the chart constructor.\n *\n * - csv : String\n * A comma delimited string to be parsed. Related options are startRow, endRow, startColumn\n * and endColumn to delimit what part of the table is used. The lineDelimiter and \n * itemDelimiter options define the CSV delimiter formats.\n * \n * - endColumn : Integer\n * In tabular input data, the first row (indexed by 0) to use. Defaults to the last \n * column containing data.\n *\n * - endRow : Integer\n * In tabular input data, the last row (indexed by 0) to use. Defaults to the last row\n * containing data.\n *\n * - googleSpreadsheetKey : String \n * A Google Spreadsheet key. See https://developers.google.com/gdata/samples/spreadsheet_sample\n * for general information on GS.\n *\n * - googleSpreadsheetWorksheet : String \n * The Google Spreadsheet worksheet. The available id's can be read from \n * https://spreadsheets.google.com/feeds/worksheets/{key}/public/basic\n *\n * - itemDelimiter : String\n * Item or cell delimiter for parsing CSV. Defaults to \",\".\n *\n * - lineDelimiter : String\n * Line delimiter for parsing CSV. Defaults to \"\\n\".\n *\n * - parsed : Function\n * A callback function to access the parsed columns, the two-dimentional input data\n * array directly, before they are interpreted into series data and categories.\n *\n * - parseDate : Function\n * A callback function to parse string representations of dates into JavaScript timestamps.\n * Return an integer on success.\n *\n * - rows : Array<Array<Mixed>>\n * The same as the columns input option, but defining rows intead of columns.\n *\n * - startColumn : Integer\n * In tabular input data, the first column (indexed by 0) to use. \n *\n * - startRow : Integer\n * In tabular input data, the first row (indexed by 0) to use.\n *\n * - table : String|HTMLElement\n * A HTML table or the id of such to be parsed as input data. Related options ara startRow,\n * endRow, startColumn and endColumn to delimit what part of the table is used.\n */\n\n// JSLint options:\n/*global jQuery */\n\n(function (Highcharts) {\t\n\t\n\t// Utilities\n\tvar each = Highcharts.each;\n\t\n\t\n\t// The Data constructor\n\tvar Data = function (dataOptions, chartOptions) {\n\t\tthis.init(dataOptions, chartOptions);\n\t};\n\t\n\t// Set the prototype properties\n\tHighcharts.extend(Data.prototype, {\n\t\t\n\t/**\n\t * Initialize the Data object with the given options\n\t */\n\tinit: function (options, chartOptions) {\n\t\tthis.options = options;\n\t\tthis.chartOptions = chartOptions;\n\t\tthis.columns = options.columns || this.rowsToColumns(options.rows) || [];\n\n\t\t// No need to parse or interpret anything\n\t\tif (this.columns.length) {\n\t\t\tthis.dataFound();\n\n\t\t// Parse and interpret\n\t\t} else {\n\n\t\t\t// Parse a CSV string if options.csv is given\n\t\t\tthis.parseCSV();\n\t\t\t\n\t\t\t// Parse a HTML table if options.table is given\n\t\t\tthis.parseTable();\n\n\t\t\t// Parse a Google Spreadsheet \n\t\t\tthis.parseGoogleSpreadsheet();\t\n\t\t}\n\n\t},\n\n\t/**\n\t * Get the column distribution. For example, a line series takes a single column for \n\t * Y values. A range series takes two columns for low and high values respectively,\n\t * and an OHLC series takes four columns.\n\t */\n\tgetColumnDistribution: function () {\n\t\tvar chartOptions = this.chartOptions,\n\t\t\tgetValueCount = function (type) {\n\t\t\t\treturn (Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap || [0]).length;\n\t\t\t},\n\t\t\tglobalType = chartOptions && chartOptions.chart && chartOptions.chart.type,\n\t\t\tindividualCounts = [];\n\n\t\teach((chartOptions && chartOptions.series) || [], function (series) {\n\t\t\tindividualCounts.push(getValueCount(series.type || globalType));\n\t\t});\n\n\t\tthis.valueCount = {\n\t\t\tglobal: getValueCount(globalType),\n\t\t\tindividual: individualCounts\n\t\t};\n\t},\n\n\n\tdataFound: function () {\n\t\t// Interpret the values into right types\n\t\tthis.parseTypes();\n\t\t\n\t\t// Use first row for series names?\n\t\tthis.findHeaderRow();\n\t\t\n\t\t// Handle columns if a handleColumns callback is given\n\t\tthis.parsed();\n\t\t\n\t\t// Complete if a complete callback is given\n\t\tthis.complete();\n\t\t\n\t},\n\t\n\t/**\n\t * Parse a CSV input string\n\t */\n\tparseCSV: function () {\n\t\tvar self = this,\n\t\t\toptions = this.options,\n\t\t\tcsv = options.csv,\n\t\t\tcolumns = this.columns,\n\t\t\tstartRow = options.startRow || 0,\n\t\t\tendRow = options.endRow || Number.MAX_VALUE,\n\t\t\tstartColumn = options.startColumn || 0,\n\t\t\tendColumn = options.endColumn || Number.MAX_VALUE,\n\t\t\tlines,\n\t\t\tactiveRowNo = 0;\n\t\t\t\n\t\tif (csv) {\n\t\t\t\n\t\t\tlines = csv\n\t\t\t\t.replace(/\\r\\n/g, \"\\n\") // Unix\n\t\t\t\t.replace(/\\r/g, \"\\n\") // Mac\n\t\t\t\t.split(options.lineDelimiter || \"\\n\");\n\t\t\t\n\t\t\teach(lines, function (line, rowNo) {\n\t\t\t\tvar trimmed = self.trim(line),\n\t\t\t\t\tisComment = trimmed.indexOf('#') === 0,\n\t\t\t\t\tisBlank = trimmed === '',\n\t\t\t\t\titems;\n\t\t\t\t\n\t\t\t\tif (rowNo >= startRow && rowNo <= endRow && !isComment && !isBlank) {\n\t\t\t\t\titems = line.split(options.itemDelimiter || ',');\n\t\t\t\t\teach(items, function (item, colNo) {\n\t\t\t\t\t\tif (colNo >= startColumn && colNo <= endColumn) {\n\t\t\t\t\t\t\tif (!columns[colNo - startColumn]) {\n\t\t\t\t\t\t\t\tcolumns[colNo - startColumn] = [];\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcolumns[colNo - startColumn][activeRowNo] = item;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tactiveRowNo += 1;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.dataFound();\n\t\t}\n\t},\n\t\n\t/**\n\t * Parse a HTML table\n\t */\n\tparseTable: function () {\n\t\tvar options = this.options,\n\t\t\ttable = options.table,\n\t\t\tcolumns = this.columns,\n\t\t\tstartRow = options.startRow || 0,\n\t\t\tendRow = options.endRow || Number.MAX_VALUE,\n\t\t\tstartColumn = options.startColumn || 0,\n\t\t\tendColumn = options.endColumn || Number.MAX_VALUE,\n\t\t\tcolNo;\n\t\t\t\n\t\tif (table) {\n\t\t\t\n\t\t\tif (typeof table === 'string') {\n\t\t\t\ttable = document.getElementById(table);\n\t\t\t}\n\t\t\t\n\t\t\teach(table.getElementsByTagName('tr'), function (tr, rowNo) {\n\t\t\t\tcolNo = 0; \n\t\t\t\tif (rowNo >= startRow && rowNo <= endRow) {\n\t\t\t\t\teach(tr.childNodes, function (item) {\n\t\t\t\t\t\tif ((item.tagName === 'TD' || item.tagName === 'TH') && colNo >= startColumn && colNo <= endColumn) {\n\t\t\t\t\t\t\tif (!columns[colNo]) {\n\t\t\t\t\t\t\t\tcolumns[colNo] = [];\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcolumns[colNo][rowNo - startRow] = item.innerHTML;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcolNo += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.dataFound(); // continue\n\t\t}\n\t},\n\n\t/**\n\t * TODO: \n\t * - switchRowsAndColumns\n\t */\n\tparseGoogleSpreadsheet: function () {\n\t\tvar self = this,\n\t\t\toptions = this.options,\n\t\t\tgoogleSpreadsheetKey = options.googleSpreadsheetKey,\n\t\t\tcolumns = this.columns,\n\t\t\tstartRow = options.startRow || 0,\n\t\t\tendRow = options.endRow || Number.MAX_VALUE,\n\t\t\tstartColumn = options.startColumn || 0,\n\t\t\tendColumn = options.endColumn || Number.MAX_VALUE,\n\t\t\tgr, // google row\n\t\t\tgc; // google column\n\n\t\tif (googleSpreadsheetKey) {\n\t\t\tjQuery.getJSON('https://spreadsheets.google.com/feeds/cells/' + \n\t\t\t\t  googleSpreadsheetKey + '/' + (options.googleSpreadsheetWorksheet || 'od6') +\n\t\t\t\t\t  '/public/values?alt=json-in-script&callback=?',\n\t\t\t\t\t  function (json) {\n\t\t\t\t\t\n\t\t\t\t// Prepare the data from the spreadsheat\n\t\t\t\tvar cells = json.feed.entry,\n\t\t\t\t\tcell,\n\t\t\t\t\tcellCount = cells.length,\n\t\t\t\t\tcolCount = 0,\n\t\t\t\t\trowCount = 0,\n\t\t\t\t\ti;\n\t\t\t\n\t\t\t\t// First, find the total number of columns and rows that \n\t\t\t\t// are actually filled with data\n\t\t\t\tfor (i = 0; i < cellCount; i++) {\n\t\t\t\t\tcell = cells[i];\n\t\t\t\t\tcolCount = Math.max(colCount, cell.gs$cell.col);\n\t\t\t\t\trowCount = Math.max(rowCount, cell.gs$cell.row);\t\t\t\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// Set up arrays containing the column data\n\t\t\t\tfor (i = 0; i < colCount; i++) {\n\t\t\t\t\tif (i >= startColumn && i <= endColumn) {\n\t\t\t\t\t\t// Create new columns with the length of either end-start or rowCount\n\t\t\t\t\t\tcolumns[i - startColumn] = [];\n\n\t\t\t\t\t\t// Setting the length to avoid jslint warning\n\t\t\t\t\t\tcolumns[i - startColumn].length = Math.min(rowCount, endRow - startRow);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Loop over the cells and assign the value to the right\n\t\t\t\t// place in the column arrays\n\t\t\t\tfor (i = 0; i < cellCount; i++) {\n\t\t\t\t\tcell = cells[i];\n\t\t\t\t\tgr = cell.gs$cell.row - 1; // rows start at 1\n\t\t\t\t\tgc = cell.gs$cell.col - 1; // columns start at 1\n\n\t\t\t\t\t// If both row and col falls inside start and end\n\t\t\t\t\t// set the transposed cell value in the newly created columns\n\t\t\t\t\tif (gc >= startColumn && gc <= endColumn &&\n\t\t\t\t\t\tgr >= startRow && gr <= endRow) {\n\t\t\t\t\t\tcolumns[gc - startColumn][gr - startRow] = cell.content.$t;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.dataFound();\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Find the header row. For now, we just check whether the first row contains\n\t * numbers or strings. Later we could loop down and find the first row with \n\t * numbers.\n\t */\n\tfindHeaderRow: function () {\n\t\tvar headerRow = 0;\n\t\teach(this.columns, function (column) {\n\t\t\tif (typeof column[0] !== 'string') {\n\t\t\t\theaderRow = null;\n\t\t\t}\n\t\t});\n\t\tthis.headerRow = 0;\t\t\t\n\t},\n\t\n\t/**\n\t * Trim a string from whitespace\n\t */\n\ttrim: function (str) {\n\t\treturn typeof str === 'string' ? str.replace(/^\\s+|\\s+$/g, '') : str;\n\t},\n\t\n\t/**\n\t * Parse numeric cells in to number types and date types in to true dates.\n\t * @param {Object} columns\n\t */\n\tparseTypes: function () {\n\t\tvar columns = this.columns,\n\t\t\tcol = columns.length, \n\t\t\trow,\n\t\t\tval,\n\t\t\tfloatVal,\n\t\t\ttrimVal,\n\t\t\tdateVal;\n\t\t\t\n\t\twhile (col--) {\n\t\t\trow = columns[col].length;\n\t\t\twhile (row--) {\n\t\t\t\tval = columns[col][row];\n\t\t\t\tfloatVal = parseFloat(val);\n\t\t\t\ttrimVal = this.trim(val);\n\n\t\t\t\t/*jslint eqeq: true*/\n\t\t\t\tif (trimVal == floatVal) { // is numeric\n\t\t\t\t/*jslint eqeq: false*/\n\t\t\t\t\tcolumns[col][row] = floatVal;\n\t\t\t\t\t\n\t\t\t\t\t// If the number is greater than milliseconds in a year, assume datetime\n\t\t\t\t\tif (floatVal > 365 * 24 * 3600 * 1000) {\n\t\t\t\t\t\tcolumns[col].isDatetime = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolumns[col].isNumeric = true;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t} else { // string, continue to determine if it is a date string or really a string\n\t\t\t\t\tdateVal = this.parseDate(val);\n\t\t\t\t\t\n\t\t\t\t\tif (col === 0 && typeof dateVal === 'number' && !isNaN(dateVal)) { // is date\n\t\t\t\t\t\tcolumns[col][row] = dateVal;\n\t\t\t\t\t\tcolumns[col].isDatetime = true;\n\t\t\t\t\t\n\t\t\t\t\t} else { // string\n\t\t\t\t\t\tcolumns[col][row] = trimVal === '' ? null : trimVal;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t},\n\t//*\n\tdateFormats: {\n\t\t'YYYY-mm-dd': {\n\t\t\tregex: '^([0-9]{4})-([0-9]{2})-([0-9]{2})$',\n\t\t\tparser: function (match) {\n\t\t\t\treturn Date.UTC(+match[1], match[2] - 1, +match[3]);\n\t\t\t}\n\t\t}\n\t},\n\t// */\n\t/**\n\t * Parse a date and return it as a number. Overridable through options.parseDate.\n\t */\n\tparseDate: function (val) {\n\t\tvar parseDate = this.options.parseDate,\n\t\t\tret,\n\t\t\tkey,\n\t\t\tformat,\n\t\t\tmatch;\n\n\t\tif (parseDate) {\n\t\t\tret = parseDate(val);\n\t\t}\n\t\t\t\n\t\tif (typeof val === 'string') {\n\t\t\tfor (key in this.dateFormats) {\n\t\t\t\tformat = this.dateFormats[key];\n\t\t\t\tmatch = val.match(format.regex);\n\t\t\t\tif (match) {\n\t\t\t\t\tret = format.parser(match);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Reorganize rows into columns\n\t */\n\trowsToColumns: function (rows) {\n\t\tvar row,\n\t\t\trowsLength,\n\t\t\tcol,\n\t\t\tcolsLength,\n\t\t\tcolumns;\n\n\t\tif (rows) {\n\t\t\tcolumns = [];\n\t\t\trowsLength = rows.length;\n\t\t\tfor (row = 0; row < rowsLength; row++) {\n\t\t\t\tcolsLength = rows[row].length;\n\t\t\t\tfor (col = 0; col < colsLength; col++) {\n\t\t\t\t\tif (!columns[col]) {\n\t\t\t\t\t\tcolumns[col] = [];\n\t\t\t\t\t}\n\t\t\t\t\tcolumns[col][row] = rows[row][col];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn columns;\n\t},\n\t\n\t/**\n\t * A hook for working directly on the parsed columns\n\t */\n\tparsed: function () {\n\t\tif (this.options.parsed) {\n\t\t\tthis.options.parsed.call(this, this.columns);\n\t\t}\n\t},\n\t\n\t/**\n\t * If a complete callback function is provided in the options, interpret the \n\t * columns into a Highcharts options object.\n\t */\n\tcomplete: function () {\n\t\t\n\t\tvar columns = this.columns,\n\t\t\tfirstCol,\n\t\t\ttype,\n\t\t\toptions = this.options,\n\t\t\tvalueCount,\n\t\t\tseries,\n\t\t\tdata,\n\t\t\ti,\n\t\t\tj,\n\t\t\tseriesIndex;\n\t\t\t\n\t\t\n\t\tif (options.complete) {\n\n\t\t\tthis.getColumnDistribution();\n\t\t\t\n\t\t\t// Use first column for X data or categories?\n\t\t\tif (columns.length > 1) {\n\t\t\t\tfirstCol = columns.shift();\n\t\t\t\tif (this.headerRow === 0) {\n\t\t\t\t\tfirstCol.shift(); // remove the first cell\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif (firstCol.isDatetime) {\n\t\t\t\t\ttype = 'datetime';\n\t\t\t\t} else if (!firstCol.isNumeric) {\n\t\t\t\t\ttype = 'category';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get the names and shift the top row\n\t\t\tfor (i = 0; i < columns.length; i++) {\n\t\t\t\tif (this.headerRow === 0) {\n\t\t\t\t\tcolumns[i].name = columns[i].shift();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Use the next columns for series\n\t\t\tseries = [];\n\t\t\tfor (i = 0, seriesIndex = 0; i < columns.length; seriesIndex++) {\n\n\t\t\t\t// This series' value count\n\t\t\t\tvalueCount = Highcharts.pick(this.valueCount.individual[seriesIndex], this.valueCount.global);\n\t\t\t\t\n\t\t\t\t// Iterate down the cells of each column and add data to the series\n\t\t\t\tdata = [];\n\t\t\t\tfor (j = 0; j < columns[i].length; j++) {\n\t\t\t\t\tdata[j] = [\n\t\t\t\t\t\tfirstCol[j], \n\t\t\t\t\t\tcolumns[i][j] !== undefined ? columns[i][j] : null\n\t\t\t\t\t];\n\t\t\t\t\tif (valueCount > 1) {\n\t\t\t\t\t\tdata[j].push(columns[i + 1][j] !== undefined ? columns[i + 1][j] : null);\n\t\t\t\t\t}\n\t\t\t\t\tif (valueCount > 2) {\n\t\t\t\t\t\tdata[j].push(columns[i + 2][j] !== undefined ? columns[i + 2][j] : null);\n\t\t\t\t\t}\n\t\t\t\t\tif (valueCount > 3) {\n\t\t\t\t\t\tdata[j].push(columns[i + 3][j] !== undefined ? columns[i + 3][j] : null);\n\t\t\t\t\t}\n\t\t\t\t\tif (valueCount > 4) {\n\t\t\t\t\t\tdata[j].push(columns[i + 4][j] !== undefined ? columns[i + 4][j] : null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add the series\n\t\t\t\tseries[seriesIndex] = {\n\t\t\t\t\tname: columns[i].name,\n\t\t\t\t\tdata: data\n\t\t\t\t};\n\n\t\t\t\ti += valueCount;\n\t\t\t}\n\t\t\t\n\t\t\t// Do the callback\n\t\t\toptions.complete({\n\t\t\t\txAxis: {\n\t\t\t\t\ttype: type\n\t\t\t\t},\n\t\t\t\tseries: series\n\t\t\t});\n\t\t}\n\t}\n\t});\n\t\n\t// Register the Data prototype and data function on Highcharts\n\tHighcharts.Data = Data;\n\tHighcharts.data = function (options, chartOptions) {\n\t\treturn new Data(options, chartOptions);\n\t};\n\n\t// Extend Chart.init so that the Chart constructor accepts a new configuration\n\t// option group, data.\n\tHighcharts.wrap(Highcharts.Chart.prototype, 'init', function (proceed, userOptions, callback) {\n\t\tvar chart = this;\n\n\t\tif (userOptions && userOptions.data) {\n\t\t\tHighcharts.data(Highcharts.extend(userOptions.data, {\n\t\t\t\tcomplete: function (dataOptions) {\n\t\t\t\t\t\n\t\t\t\t\t// Merge series configs\n\t\t\t\t\tif (userOptions.series) {\n\t\t\t\t\t\teach(userOptions.series, function (series, i) {\n\t\t\t\t\t\t\tuserOptions.series[i] = Highcharts.merge(series, dataOptions.series[i]);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Do the merge\n\t\t\t\t\tuserOptions = Highcharts.merge(dataOptions, userOptions);\n\n\t\t\t\t\tproceed.call(chart, userOptions, callback);\n\t\t\t\t}\n\t\t\t}), userOptions);\n\t\t} else {\n\t\t\tproceed.call(chart, userOptions, callback);\n\t\t}\n\t});\n\n}(Highcharts));\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/drilldown.js",
    "content": "(function(e){function q(b,a,c){return\"rgba(\"+[Math.round(b[0]+(a[0]-b[0])*c),Math.round(b[1]+(a[1]-b[1])*c),Math.round(b[2]+(a[2]-b[2])*c),b[3]+(a[3]-b[3])*c].join(\",\")+\")\"}var m=function(){},j=e.getOptions(),g=e.each,n=e.extend,o=e.wrap,h=e.Chart,i=e.seriesTypes,k=i.pie,l=i.column,r=HighchartsAdapter.fireEvent;n(j.lang,{drillUpText:\"◁ Back to {series.name}\"});j.drilldown={activeAxisLabelStyle:{cursor:\"pointer\",color:\"#039\",fontWeight:\"bold\",textDecoration:\"underline\"},activeDataLabelStyle:{cursor:\"pointer\",\ncolor:\"#039\",fontWeight:\"bold\",textDecoration:\"underline\"},animation:{duration:500},drillUpButton:{position:{align:\"right\",x:-10,y:10}}};e.SVGRenderer.prototype.Element.prototype.fadeIn=function(){this.attr({opacity:0.1,visibility:\"visible\"}).animate({opacity:1},{duration:250})};h.prototype.drilldownLevels=[];h.prototype.addSeriesAsDrilldown=function(b,a){var c=b.series,d=c.xAxis,f=c.yAxis,e;e=b.color||c.color;var g,a=n({color:e},a);g=HighchartsAdapter.inArray(this,c.points);this.drilldownLevels.push({seriesOptions:c.userOptions,\nshapeArgs:b.shapeArgs,bBox:b.graphic.getBBox(),color:e,newSeries:a,pointOptions:c.options.data[g],pointIndex:g,oldExtremes:{xMin:d&&d.userMin,xMax:d&&d.userMax,yMin:f&&f.userMin,yMax:f&&f.userMax}});e=this.addSeries(a,!1);if(d)d.oldPos=d.pos,d.userMin=d.userMax=null,f.userMin=f.userMax=null;if(c.type===e.type)e.animate=e.animateDrilldown||m,e.options.animation=!0;c.remove(!1);this.redraw();this.showDrillUpButton()};h.prototype.getDrilldownBackText=function(){return this.options.lang.drillUpText.replace(\"{series.name}\",\nthis.drilldownLevels[this.drilldownLevels.length-1].seriesOptions.name)};h.prototype.showDrillUpButton=function(){var b=this,a=this.getDrilldownBackText(),c=b.options.drilldown.drillUpButton;this.drillUpButton?this.drillUpButton.attr({text:a}).align():this.drillUpButton=this.renderer.button(a,null,null,function(){b.drillUp()}).attr(n({align:c.position.align,zIndex:9},c.theme)).add().align(c.position,!1,c.relativeTo||\"plotBox\")};h.prototype.drillUp=function(){var b=this.drilldownLevels.pop(),a=this.series[0],\nc=b.oldExtremes,d=this.addSeries(b.seriesOptions,!1);r(this,\"drillup\",{seriesOptions:b.seriesOptions});if(d.type===a.type)d.drilldownLevel=b,d.animate=d.animateDrillupTo||m,d.options.animation=!0,a.animateDrillupFrom&&a.animateDrillupFrom(b);a.remove(!1);d.xAxis&&(d.xAxis.setExtremes(c.xMin,c.xMax,!1),d.yAxis.setExtremes(c.yMin,c.yMax,!1));this.redraw();this.drilldownLevels.length===0?this.drillUpButton=this.drillUpButton.destroy():this.drillUpButton.attr({text:this.getDrilldownBackText()}).align()};\nk.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],c=this.chart.options.drilldown.animation,d=a.shapeArgs,f=d.start,s=(d.end-f)/this.points.length,h=e.Color(a.color).rgba;b||g(this.points,function(a,b){var g=e.Color(a.color).rgba;a.graphic.attr(e.merge(d,{start:f+b*s,end:f+(b+1)*s})).animate(a.shapeArgs,e.merge(c,{step:function(a,d){d.prop===\"start\"&&this.attr({fill:q(h,g,d.pos)})}}))})};k.prototype.animateDrillupTo=l.prototype.animateDrillupTo=\nfunction(b){if(!b){var a=this,c=a.drilldownLevel;g(this.points,function(a){a.graphic.hide();a.dataLabel&&a.dataLabel.hide();a.connector&&a.connector.hide()});setTimeout(function(){g(a.points,function(a,b){var e=b===c.pointIndex?\"show\":\"fadeIn\";a.graphic[e]();if(a.dataLabel)a.dataLabel[e]();if(a.connector)a.connector[e]()})},Math.max(this.chart.options.drilldown.animation.duration-50,0));this.animate=m}};l.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-\n1].shapeArgs,c=this.chart.options.drilldown.animation;b||(a.x+=this.xAxis.oldPos-this.xAxis.pos,g(this.points,function(b){b.graphic.attr(a).animate(b.shapeArgs,c)}))};l.prototype.animateDrillupFrom=k.prototype.animateDrillupFrom=function(b){var a=this.chart.options.drilldown.animation,c=this.group;delete this.group;g(this.points,function(d){var f=d.graphic,g=e.Color(d.color).rgba;delete d.graphic;f.animate(b.shapeArgs,e.merge(a,{step:function(a,c){c.prop===\"start\"&&this.attr({fill:q(g,e.Color(b.color).rgba,\nc.pos)})},complete:function(){f.destroy();c&&(c=c.destroy())}}))})};e.Point.prototype.doDrilldown=function(){for(var b=this.series.chart,a=b.options.drilldown,c=a.series.length,d;c--&&!d;)a.series[c].id===this.drilldown&&(d=a.series[c]);r(b,\"drilldown\",{point:this,seriesOptions:d});d&&b.addSeriesAsDrilldown(this,d)};o(e.Point.prototype,\"init\",function(b,a,c,d){var f=b.call(this,a,c,d),b=a.chart,a=(a=a.xAxis&&a.xAxis.ticks[d])&&a.label;if(f.drilldown){if(e.addEvent(f,\"click\",function(){f.doDrilldown()}),\na){if(!a._basicStyle)a._basicStyle=a.element.getAttribute(\"style\");a.addClass(\"highcharts-drilldown-axis-label\").css(b.options.drilldown.activeAxisLabelStyle).on(\"click\",function(){f.doDrilldown&&f.doDrilldown()})}}else a&&a._basicStyle&&a.element.setAttribute(\"style\",a._basicStyle);return f});o(e.Series.prototype,\"drawDataLabels\",function(b){var a=this.chart.options.drilldown.activeDataLabelStyle;b.call(this);g(this.points,function(b){if(b.drilldown&&b.dataLabel)b.dataLabel.attr({\"class\":\"highcharts-drilldown-data-label\"}).css(a).on(\"click\",\nfunction(){b.doDrilldown()})})});l.prototype.supportsDrilldown=!0;k.prototype.supportsDrilldown=!0;var p,j=function(b){b.call(this);g(this.points,function(a){a.drilldown&&a.graphic&&a.graphic.attr({\"class\":\"highcharts-drilldown-point\"}).css({cursor:\"pointer\"})})};for(p in i)i[p].prototype.supportsDrilldown&&o(i[p].prototype,\"drawTracker\",j)})(Highcharts);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/drilldown.src.js",
    "content": "/**\n * Highcharts Drilldown plugin\n * \n * Author: Torstein Honsi\n * Last revision: 2013-02-18\n * License: MIT License\n *\n * Demo: http://jsfiddle.net/highcharts/Vf3yT/\n */\n\n/*global HighchartsAdapter*/\n(function (H) {\n\n\t\"use strict\";\n\n\tvar noop = function () {},\n\t\tdefaultOptions = H.getOptions(),\n\t\teach = H.each,\n\t\textend = H.extend,\n\t\twrap = H.wrap,\n\t\tChart = H.Chart,\n\t\tseriesTypes = H.seriesTypes,\n\t\tPieSeries = seriesTypes.pie,\n\t\tColumnSeries = seriesTypes.column,\n\t\tfireEvent = HighchartsAdapter.fireEvent;\n\n\t// Utilities\n\tfunction tweenColors(startColor, endColor, pos) {\n\t\tvar rgba = [\n\t\t\t\tMath.round(startColor[0] + (endColor[0] - startColor[0]) * pos),\n\t\t\t\tMath.round(startColor[1] + (endColor[1] - startColor[1]) * pos),\n\t\t\t\tMath.round(startColor[2] + (endColor[2] - startColor[2]) * pos),\n\t\t\t\tstartColor[3] + (endColor[3] - startColor[3]) * pos\n\t\t\t];\n\t\treturn 'rgba(' + rgba.join(',') + ')';\n\t}\n\n\t// Add language\n\textend(defaultOptions.lang, {\n\t\tdrillUpText: '◁ Back to {series.name}'\n\t});\n\tdefaultOptions.drilldown = {\n\t\tactiveAxisLabelStyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#039',\n\t\t\tfontWeight: 'bold',\n\t\t\ttextDecoration: 'underline'\t\t\t\n\t\t},\n\t\tactiveDataLabelStyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#039',\n\t\t\tfontWeight: 'bold',\n\t\t\ttextDecoration: 'underline'\t\t\t\n\t\t},\n\t\tanimation: {\n\t\t\tduration: 500\n\t\t},\n\t\tdrillUpButton: {\n\t\t\tposition: { \n\t\t\t\talign: 'right',\n\t\t\t\tx: -10,\n\t\t\t\ty: 10\n\t\t\t}\n\t\t\t// relativeTo: 'plotBox'\n\t\t\t// theme\n\t\t}\n\t};\t\n\n\t/**\n\t * A general fadeIn method\n\t */\n\tH.SVGRenderer.prototype.Element.prototype.fadeIn = function () {\n\t\tthis\n\t\t.attr({\n\t\t\topacity: 0.1,\n\t\t\tvisibility: 'visible'\n\t\t})\n\t\t.animate({\n\t\t\topacity: 1\n\t\t}, {\n\t\t\tduration: 250\n\t\t});\n\t};\n\n\t// Extend the Chart prototype\n\tChart.prototype.drilldownLevels = [];\n\n\tChart.prototype.addSeriesAsDrilldown = function (point, ddOptions) {\n\t\tvar oldSeries = point.series,\n\t\t\txAxis = oldSeries.xAxis,\n\t\t\tyAxis = oldSeries.yAxis,\n\t\t\tnewSeries,\n\t\t\tcolor = point.color || oldSeries.color,\n\t\t\tpointIndex,\n\t\t\tlevel;\n\t\t\t\n\t\tddOptions = extend({\n\t\t\tcolor: color\n\t\t}, ddOptions);\n\t\tpointIndex = HighchartsAdapter.inArray(this, oldSeries.points);\n\t\tlevel = {\n\t\t\tseriesOptions: oldSeries.userOptions,\n\t\t\tshapeArgs: point.shapeArgs,\n\t\t\tbBox: point.graphic.getBBox(),\n\t\t\tcolor: color,\n\t\t\tnewSeries: ddOptions,\n\t\t\tpointOptions: oldSeries.options.data[pointIndex],\n\t\t\tpointIndex: pointIndex,\n\t\t\toldExtremes: {\n\t\t\t\txMin: xAxis && xAxis.userMin,\n\t\t\t\txMax: xAxis && xAxis.userMax,\n\t\t\t\tyMin: yAxis && yAxis.userMin,\n\t\t\t\tyMax: yAxis && yAxis.userMax\n\t\t\t}\n\t\t};\n\n\t\tthis.drilldownLevels.push(level);\n\n\t\tnewSeries = this.addSeries(ddOptions, false);\n\t\tif (xAxis) {\n\t\t\txAxis.oldPos = xAxis.pos;\n\t\t\txAxis.userMin = xAxis.userMax = null;\n\t\t\tyAxis.userMin = yAxis.userMax = null;\n\t\t}\n\n\t\t// Run fancy cross-animation on supported and equal types\n\t\tif (oldSeries.type === newSeries.type) {\n\t\t\tnewSeries.animate = newSeries.animateDrilldown || noop;\n\t\t\tnewSeries.options.animation = true;\n\t\t}\n\t\t\n\t\toldSeries.remove(false);\n\t\t\n\t\tthis.redraw();\n\t\tthis.showDrillUpButton();\n\t};\n\n\tChart.prototype.getDrilldownBackText = function () {\n\t\tvar lastLevel = this.drilldownLevels[this.drilldownLevels.length - 1];\n\n\t\treturn this.options.lang.drillUpText.replace('{series.name}', lastLevel.seriesOptions.name);\n\n\t};\n\n\tChart.prototype.showDrillUpButton = function () {\n\t\tvar chart = this,\n\t\t\tbackText = this.getDrilldownBackText(),\n\t\t\tbuttonOptions = chart.options.drilldown.drillUpButton;\n\t\t\t\n\n\t\tif (!this.drillUpButton) {\n\t\t\tthis.drillUpButton = this.renderer.button(\n\t\t\t\tbackText,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tfunction () {\n\t\t\t\t\tchart.drillUp(); \n\t\t\t\t}\n\t\t\t)\n\t\t\t.attr(extend({\n\t\t\t\talign: buttonOptions.position.align,\n\t\t\t\tzIndex: 9\n\t\t\t}, buttonOptions.theme))\n\t\t\t.add()\n\t\t\t.align(buttonOptions.position, false, buttonOptions.relativeTo || 'plotBox');\n\t\t} else {\n\t\t\tthis.drillUpButton.attr({\n\t\t\t\ttext: backText\n\t\t\t})\n\t\t\t.align();\n\t\t}\n\t};\n\n\tChart.prototype.drillUp = function () {\n\t\tvar chart = this,\n\t\t\tlevel = chart.drilldownLevels.pop(),\n\t\t\toldSeries = chart.series[0],\n\t\t\toldExtremes = level.oldExtremes,\n\t\t\tnewSeries = chart.addSeries(level.seriesOptions, false);\n\t\t\n\t\tfireEvent(chart, 'drillup', { seriesOptions: level.seriesOptions });\n\n\t\tif (newSeries.type === oldSeries.type) {\n\t\t\tnewSeries.drilldownLevel = level;\n\t\t\tnewSeries.animate = newSeries.animateDrillupTo || noop;\n\t\t\tnewSeries.options.animation = true;\n\n\t\t\tif (oldSeries.animateDrillupFrom) {\n\t\t\t\toldSeries.animateDrillupFrom(level);\n\t\t\t}\n\t\t}\n\n\t\toldSeries.remove(false);\n\n\t\t// Reset the zoom level of the upper series\n\t\tif (newSeries.xAxis) {\n\t\t\tnewSeries.xAxis.setExtremes(oldExtremes.xMin, oldExtremes.xMax, false);\n\t\t\tnewSeries.yAxis.setExtremes(oldExtremes.yMin, oldExtremes.yMax, false);\n\t\t}\n\n\n\t\tthis.redraw();\n\n\t\tif (this.drilldownLevels.length === 0) {\n\t\t\tthis.drillUpButton = this.drillUpButton.destroy();\n\t\t} else {\n\t\t\tthis.drillUpButton.attr({\n\t\t\t\ttext: this.getDrilldownBackText()\n\t\t\t})\n\t\t\t.align();\n\t\t}\n\t};\n\n\tPieSeries.prototype.animateDrilldown = function (init) {\n\t\tvar level = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1],\n\t\t\tanimationOptions = this.chart.options.drilldown.animation,\n\t\t\tanimateFrom = level.shapeArgs,\n\t\t\tstart = animateFrom.start,\n\t\t\tangle = animateFrom.end - start,\n\t\t\tstartAngle = angle / this.points.length,\n\t\t\tstartColor = H.Color(level.color).rgba;\n\n\t\tif (!init) {\n\t\t\teach(this.points, function (point, i) {\n\t\t\t\tvar endColor = H.Color(point.color).rgba;\n\n\t\t\t\t/*jslint unparam: true*/\n\t\t\t\tpoint.graphic\n\t\t\t\t\t.attr(H.merge(animateFrom, {\n\t\t\t\t\t\tstart: start + i * startAngle,\n\t\t\t\t\t\tend: start + (i + 1) * startAngle\n\t\t\t\t\t}))\n\t\t\t\t\t.animate(point.shapeArgs, H.merge(animationOptions, {\n\t\t\t\t\t\tstep: function (val, fx) {\n\t\t\t\t\t\t\tif (fx.prop === 'start') {\n\t\t\t\t\t\t\t\tthis.attr({\n\t\t\t\t\t\t\t\t\tfill: tweenColors(startColor, endColor, fx.pos)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t/*jslint unparam: false*/\n\t\t\t});\n\t\t}\n\t};\n\n\n\t/**\n\t * When drilling up, keep the upper series invisible until the lower series has\n\t * moved into place\n\t */\n\tPieSeries.prototype.animateDrillupTo = \n\t\t\tColumnSeries.prototype.animateDrillupTo = function (init) {\n\t\tif (!init) {\n\t\t\tvar newSeries = this,\n\t\t\t\tlevel = newSeries.drilldownLevel;\n\n\t\t\teach(this.points, function (point) {\n\t\t\t\tpoint.graphic.hide();\n\t\t\t\tif (point.dataLabel) {\n\t\t\t\t\tpoint.dataLabel.hide();\n\t\t\t\t}\n\t\t\t\tif (point.connector) {\n\t\t\t\t\tpoint.connector.hide();\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\t// Do dummy animation on first point to get to complete\n\t\t\tsetTimeout(function () {\n\t\t\t\teach(newSeries.points, function (point, i) {  \n\t\t\t\t\t// Fade in other points\t\t\t  \n\t\t\t\t\tvar verb = i === level.pointIndex ? 'show' : 'fadeIn';\n\t\t\t\t\tpoint.graphic[verb]();\n\t\t\t\t\tif (point.dataLabel) {\n\t\t\t\t\t\tpoint.dataLabel[verb]();\n\t\t\t\t\t}\n\t\t\t\t\tif (point.connector) {\n\t\t\t\t\t\tpoint.connector[verb]();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, Math.max(this.chart.options.drilldown.animation.duration - 50, 0));\n\n\t\t\t// Reset\n\t\t\tthis.animate = noop;\n\t\t}\n\n\t};\n\t\n\tColumnSeries.prototype.animateDrilldown = function (init) {\n\t\tvar animateFrom = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1].shapeArgs,\n\t\t\tanimationOptions = this.chart.options.drilldown.animation;\n\t\t\t\n\t\tif (!init) {\n\n\t\t\tanimateFrom.x += (this.xAxis.oldPos - this.xAxis.pos);\n\t\n\t\t\teach(this.points, function (point) {\n\t\t\t\tpoint.graphic\n\t\t\t\t\t.attr(animateFrom)\n\t\t\t\t\t.animate(point.shapeArgs, animationOptions);\n\t\t\t});\n\t\t}\n\t\t\n\t};\n\n\t/**\n\t * When drilling up, pull out the individual point graphics from the lower series\n\t * and animate them into the origin point in the upper series.\n\t */\n\tColumnSeries.prototype.animateDrillupFrom = \n\t\tPieSeries.prototype.animateDrillupFrom =\n\tfunction (level) {\n\t\tvar animationOptions = this.chart.options.drilldown.animation,\n\t\t\tgroup = this.group;\n\n\t\tdelete this.group;\n\t\teach(this.points, function (point) {\n\t\t\tvar graphic = point.graphic,\n\t\t\t\tstartColor = H.Color(point.color).rgba;\n\n\t\t\tdelete point.graphic;\n\n\t\t\t/*jslint unparam: true*/\n\t\t\tgraphic.animate(level.shapeArgs, H.merge(animationOptions, {\n\n\t\t\t\tstep: function (val, fx) {\n\t\t\t\t\tif (fx.prop === 'start') {\n\t\t\t\t\t\tthis.attr({\n\t\t\t\t\t\t\tfill: tweenColors(startColor, H.Color(level.color).rgba, fx.pos)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcomplete: function () {\n\t\t\t\t\tgraphic.destroy();\n\t\t\t\t\tif (group) {\n\t\t\t\t\t\tgroup = group.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\t\t\t/*jslint unparam: false*/\n\t\t});\n\t};\n\t\n\tH.Point.prototype.doDrilldown = function () {\n\t\tvar series = this.series,\n\t\t\tchart = series.chart,\n\t\t\tdrilldown = chart.options.drilldown,\n\t\t\ti = drilldown.series.length,\n\t\t\tseriesOptions;\n\t\t\n\t\twhile (i-- && !seriesOptions) {\n\t\t\tif (drilldown.series[i].id === this.drilldown) {\n\t\t\t\tseriesOptions = drilldown.series[i];\n\t\t\t}\n\t\t}\n\n\t\t// Fire the event. If seriesOptions is undefined, the implementer can check for \n\t\t// seriesOptions, and call addSeriesAsDrilldown async if necessary.\n\t\tfireEvent(chart, 'drilldown', { \n\t\t\tpoint: this,\n\t\t\tseriesOptions: seriesOptions\n\t\t});\n\t\t\n\t\tif (seriesOptions) {\n\t\t\tchart.addSeriesAsDrilldown(this, seriesOptions);\n\t\t}\n\n\t};\n\t\n\twrap(H.Point.prototype, 'init', function (proceed, series, options, x) {\n\t\tvar point = proceed.call(this, series, options, x),\n\t\t\tchart = series.chart,\n\t\t\ttick = series.xAxis && series.xAxis.ticks[x],\n\t\t\ttickLabel = tick && tick.label;\n\t\t\n\t\tif (point.drilldown) {\n\t\t\t\n\t\t\t// Add the click event to the point label\n\t\t\tH.addEvent(point, 'click', function () {\n\t\t\t\tpoint.doDrilldown();\n\t\t\t});\n\t\t\t\n\t\t\t// Make axis labels clickable\n\t\t\tif (tickLabel) {\n\t\t\t\tif (!tickLabel._basicStyle) {\n\t\t\t\t\ttickLabel._basicStyle = tickLabel.element.getAttribute('style');\n\t\t\t\t}\n\t\t\t\ttickLabel\n\t\t\t\t\t.addClass('highcharts-drilldown-axis-label')\n\t\t\t\t\t.css(chart.options.drilldown.activeAxisLabelStyle)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tif (point.doDrilldown) {\n\t\t\t\t\t\t\tpoint.doDrilldown();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t}\n\t\t} else if (tickLabel && tickLabel._basicStyle) {\n\t\t\ttickLabel.element.setAttribute('style', tickLabel._basicStyle);\n\t\t}\n\t\t\n\t\treturn point;\n\t});\n\n\twrap(H.Series.prototype, 'drawDataLabels', function (proceed) {\n\t\tvar css = this.chart.options.drilldown.activeDataLabelStyle;\n\n\t\tproceed.call(this);\n\n\t\teach(this.points, function (point) {\n\t\t\tif (point.drilldown && point.dataLabel) {\n\t\t\t\tpoint.dataLabel\n\t\t\t\t\t.attr({\n\t\t\t\t\t\t'class': 'highcharts-drilldown-data-label'\n\t\t\t\t\t})\n\t\t\t\t\t.css(css)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tpoint.doDrilldown();\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\t// Mark the trackers with a pointer \n\tColumnSeries.prototype.supportsDrilldown = true;\n\tPieSeries.prototype.supportsDrilldown = true;\n\tvar type, \n\t\tdrawTrackerWrapper = function (proceed) {\n\t\t\tproceed.call(this);\n\t\t\teach(this.points, function (point) {\n\t\t\t\tif (point.drilldown && point.graphic) {\n\t\t\t\t\tpoint.graphic\n\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t'class': 'highcharts-drilldown-point'\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.css({ cursor: 'pointer' });\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\tfor (type in seriesTypes) {\n\t\tif (seriesTypes[type].prototype.supportsDrilldown) {\n\t\t\twrap(seriesTypes[type].prototype, 'drawTracker', drawTrackerWrapper);\n\t\t}\n\t}\n\t\t\n}(Highcharts));\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/exporting.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Exporting module\n\n (c) 2010-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(f){var A=f.Chart,t=f.addEvent,C=f.removeEvent,k=f.createElement,n=f.discardElement,u=f.css,o=f.merge,r=f.each,p=f.extend,D=Math.max,j=document,B=window,E=f.isTouchDevice,F=f.Renderer.prototype.symbols,x=f.getOptions(),y;p(x.lang,{printChart:\"Print chart\",downloadPNG:\"Download PNG image\",downloadJPEG:\"Download JPEG image\",downloadPDF:\"Download PDF document\",downloadSVG:\"Download SVG vector image\",contextButtonTitle:\"Chart context menu\"});x.navigation={menuStyle:{border:\"1px solid #A0A0A0\",\nbackground:\"#FFFFFF\",padding:\"5px 0\"},menuItemStyle:{padding:\"0 10px\",background:\"none\",color:\"#303030\",fontSize:E?\"14px\":\"11px\"},menuItemHoverStyle:{background:\"#4572A5\",color:\"#FFFFFF\"},buttonOptions:{symbolFill:\"#E0E0E0\",symbolSize:14,symbolStroke:\"#666\",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:\"right\",buttonSpacing:3,height:22,theme:{fill:\"white\",stroke:\"none\"},verticalAlign:\"top\",width:24}};x.exporting={type:\"image/png\",url:\"http://export.highcharts.com/\",buttons:{contextButton:{menuClassName:\"highcharts-contextmenu\",\nsymbol:\"menu\",_titleKey:\"contextButtonTitle\",menuItems:[{textKey:\"printChart\",onclick:function(){this.print()}},{separator:!0},{textKey:\"downloadPNG\",onclick:function(){this.exportChart()}},{textKey:\"downloadJPEG\",onclick:function(){this.exportChart({type:\"image/jpeg\"})}},{textKey:\"downloadPDF\",onclick:function(){this.exportChart({type:\"application/pdf\"})}},{textKey:\"downloadSVG\",onclick:function(){this.exportChart({type:\"image/svg+xml\"})}}]}}};f.post=function(c,a){var d,b;b=k(\"form\",{method:\"post\",\naction:c,enctype:\"multipart/form-data\"},{display:\"none\"},j.body);for(d in a)k(\"input\",{type:\"hidden\",name:d,value:a[d]},null,b);b.submit();n(b)};p(A.prototype,{getSVG:function(c){var a=this,d,b,z,h,g=o(a.options,c);if(!j.createElementNS)j.createElementNS=function(a,b){return j.createElement(b)};c=k(\"div\",null,{position:\"absolute\",top:\"-9999em\",width:a.chartWidth+\"px\",height:a.chartHeight+\"px\"},j.body);b=a.renderTo.style.width;h=a.renderTo.style.height;b=g.exporting.sourceWidth||g.chart.width||/px$/.test(b)&&\nparseInt(b,10)||600;h=g.exporting.sourceHeight||g.chart.height||/px$/.test(h)&&parseInt(h,10)||400;p(g.chart,{animation:!1,renderTo:c,forExport:!0,width:b,height:h});g.exporting.enabled=!1;g.series=[];r(a.series,function(a){z=o(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});z.isInternal||g.series.push(z)});d=new f.Chart(g,a.callback);r([\"xAxis\",\"yAxis\"],function(b){r(a[b],function(a,c){var g=d[b][c],f=a.getExtremes(),h=f.userMin,f=f.userMax;g&&(h!==void 0||f!==void 0)&&g.setExtremes(h,\nf,!0,!1)})});b=d.container.innerHTML;g=null;d.destroy();n(c);b=b.replace(/zIndex=\"[^\"]+\"/g,\"\").replace(/isShadow=\"[^\"]+\"/g,\"\").replace(/symbolName=\"[^\"]+\"/g,\"\").replace(/jQuery[0-9]+=\"[^\"]+\"/g,\"\").replace(/url\\([^#]+#/g,\"url(#\").replace(/<svg /,'<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" ').replace(/ href=/g,\" xlink:href=\").replace(/\\n/,\" \").replace(/<\\/svg>.*?$/,\"</svg>\").replace(/&nbsp;/g,\" \").replace(/&shy;/g,\"­\").replace(/<IMG /g,\"<image \").replace(/height=([^\" ]+)/g,'height=\"$1\"').replace(/width=([^\" ]+)/g,\n'width=\"$1\"').replace(/hc-svg-href=\"([^\"]+)\">/g,'xlink:href=\"$1\"/>').replace(/id=([^\" >]+)/g,'id=\"$1\"').replace(/class=([^\" >]+)/g,'class=\"$1\"').replace(/ transform /g,\" \").replace(/:(path|rect)/g,\"$1\").replace(/style=\"([^\"]+)\"/g,function(a){return a.toLowerCase()});return b=b.replace(/(url\\(#highcharts-[0-9]+)&quot;/g,\"$1\").replace(/&quot;/g,\"'\")},exportChart:function(c,a){var c=c||{},d=this.options.exporting,d=this.getSVG(o({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:c.sourceWidth||\nd.sourceWidth,sourceHeight:c.sourceHeight||d.sourceHeight}})),c=o(this.options.exporting,c);f.post(c.url,{filename:c.filename||\"chart\",type:c.type,width:c.width||0,scale:c.scale||2,svg:d})},print:function(){var c=this,a=c.container,d=[],b=a.parentNode,f=j.body,h=f.childNodes;if(!c.isPrinting)c.isPrinting=!0,r(h,function(a,b){if(a.nodeType===1)d[b]=a.style.display,a.style.display=\"none\"}),f.appendChild(a),B.focus(),B.print(),setTimeout(function(){b.appendChild(a);r(h,function(a,b){if(a.nodeType===\n1)a.style.display=d[b]});c.isPrinting=!1},1E3)},contextMenu:function(c,a,d,b,f,h,g){var e=this,j=e.options.navigation,q=j.menuItemStyle,l=e.chartWidth,m=e.chartHeight,o=\"cache-\"+c,i=e[o],s=D(f,h),v,w,n;if(!i)e[o]=i=k(\"div\",{className:c},{position:\"absolute\",zIndex:1E3,padding:s+\"px\"},e.container),v=k(\"div\",null,p({MozBoxShadow:\"3px 3px 10px #888\",WebkitBoxShadow:\"3px 3px 10px #888\",boxShadow:\"3px 3px 10px #888\"},j.menuStyle),i),w=function(){u(i,{display:\"none\"});g&&g.setState(0);e.openMenu=!1},t(i,\n\"mouseleave\",function(){n=setTimeout(w,500)}),t(i,\"mouseenter\",function(){clearTimeout(n)}),t(document,\"mousedown\",function(a){e.pointer.inClass(a.target,c)||w()}),r(a,function(a){if(a){var b=a.separator?k(\"hr\",null,null,v):k(\"div\",{onmouseover:function(){u(this,j.menuItemHoverStyle)},onmouseout:function(){u(this,q)},onclick:function(){w();a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},p({cursor:\"pointer\"},q),v);e.exportDivElements.push(b)}}),e.exportDivElements.push(v,\ni),e.exportMenuWidth=i.offsetWidth,e.exportMenuHeight=i.offsetHeight;a={display:\"block\"};d+e.exportMenuWidth>l?a.right=l-d-f-s+\"px\":a.left=d-s+\"px\";b+h+e.exportMenuHeight>m&&g.alignOptions.verticalAlign!==\"top\"?a.bottom=m-b-s+\"px\":a.top=b+h-s+\"px\";u(i,a);e.openMenu=!0},addButton:function(c){var a=this,d=a.renderer,b=o(a.options.navigation.buttonOptions,c),j=b.onclick,h=b.menuItems,g,e,k={stroke:b.symbolStroke,fill:b.symbolFill},q=b.symbolSize||12;if(!a.btnCount)a.btnCount=0;if(!a.exportDivElements)a.exportDivElements=\n[],a.exportSVGElements=[];if(b.enabled!==!1){var l=b.theme,m=l.states,n=m&&m.hover,m=m&&m.select,i;delete l.states;j?i=function(){j.apply(a,arguments)}:h&&(i=function(){a.contextMenu(e.menuClassName,h,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});b.text&&b.symbol?l.paddingLeft=f.pick(l.paddingLeft,25):b.text||p(l,{width:b.width,height:b.height,padding:0});e=d.button(b.text,0,0,i,l,n,m).attr({title:a.options.lang[b._titleKey],\"stroke-linecap\":\"round\"});e.menuClassName=c.menuClassName||\n\"highcharts-menu-\"+a.btnCount++;b.symbol&&(g=d.symbol(b.symbol,b.symbolX-q/2,b.symbolY-q/2,q,q).attr(p(k,{\"stroke-width\":b.symbolStrokeWidth||1,zIndex:1})).add(e));e.add().align(p(b,{width:e.width,x:f.pick(b.x,y)}),!0,\"spacingBox\");y+=(e.width+b.buttonSpacing)*(b.align===\"right\"?-1:1);a.exportSVGElements.push(e,g)}},destroyExport:function(c){var c=c.target,a,d;for(a=0;a<c.exportSVGElements.length;a++)if(d=c.exportSVGElements[a])d.onclick=d.ontouchstart=null,c.exportSVGElements[a]=d.destroy();for(a=\n0;a<c.exportDivElements.length;a++)d=c.exportDivElements[a],C(d,\"mouseleave\"),c.exportDivElements[a]=d.onmouseout=d.onmouseover=d.ontouchstart=d.onclick=null,n(d)}});F.menu=function(c,a,d,b){return[\"M\",c,a+2.5,\"L\",c+d,a+2.5,\"M\",c,a+b/2+0.5,\"L\",c+d,a+b/2+0.5,\"M\",c,a+b-1.5,\"L\",c+d,a+b-1.5]};A.prototype.callbacks.push(function(c){var a,d=c.options.exporting,b=d.buttons;y=0;if(d.enabled!==!1){for(a in b)c.addButton(b[a]);t(c,\"destroy\",c.destroyExport)}})})(Highcharts);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/exporting.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Exporting module\n *\n * (c) 2010-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts, document, window, Math, setTimeout */\n\n(function (Highcharts) { // encapsulate\n\n// create shortcuts\nvar Chart = Highcharts.Chart,\n\taddEvent = Highcharts.addEvent,\n\tremoveEvent = Highcharts.removeEvent,\n\tcreateElement = Highcharts.createElement,\n\tdiscardElement = Highcharts.discardElement,\n\tcss = Highcharts.css,\n\tmerge = Highcharts.merge,\n\teach = Highcharts.each,\n\textend = Highcharts.extend,\n\tmath = Math,\n\tmathMax = math.max,\n\tdoc = document,\n\twin = window,\n\tisTouchDevice = Highcharts.isTouchDevice,\n\tM = 'M',\n\tL = 'L',\n\tDIV = 'div',\n\tHIDDEN = 'hidden',\n\tNONE = 'none',\n\tPREFIX = 'highcharts-',\n\tABSOLUTE = 'absolute',\n\tPX = 'px',\n\tUNDEFINED,\n\tsymbols = Highcharts.Renderer.prototype.symbols,\n\tdefaultOptions = Highcharts.getOptions(),\n\tbuttonOffset;\n\n\t// Add language\n\textend(defaultOptions.lang, {\n\t\tprintChart: 'Print chart',\n\t\tdownloadPNG: 'Download PNG image',\n\t\tdownloadJPEG: 'Download JPEG image',\n\t\tdownloadPDF: 'Download PDF document',\n\t\tdownloadSVG: 'Download SVG vector image',\n\t\tcontextButtonTitle: 'Chart context menu'\n\t});\n\n// Buttons and menus are collected in a separate config option set called 'navigation'.\n// This can be extended later to add control buttons like zoom and pan right click menus.\ndefaultOptions.navigation = {\n\tmenuStyle: {\n\t\tborder: '1px solid #A0A0A0',\n\t\tbackground: '#FFFFFF',\n\t\tpadding: '5px 0'\n\t},\n\tmenuItemStyle: {\n\t\tpadding: '0 10px',\n\t\tbackground: NONE,\n\t\tcolor: '#303030',\n\t\tfontSize: isTouchDevice ? '14px' : '11px'\n\t},\n\tmenuItemHoverStyle: {\n\t\tbackground: '#4572A5',\n\t\tcolor: '#FFFFFF'\n\t},\n\n\tbuttonOptions: {\n\t\tsymbolFill: '#E0E0E0',\n\t\tsymbolSize: 14,\n\t\tsymbolStroke: '#666',\n\t\tsymbolStrokeWidth: 3,\n\t\tsymbolX: 12.5,\n\t\tsymbolY: 10.5,\n\t\talign: 'right',\n\t\tbuttonSpacing: 3, \n\t\theight: 22,\n\t\t// text: null,\n\t\ttheme: {\n\t\t\tfill: 'white', // capture hover\n\t\t\tstroke: 'none'\n\t\t},\n\t\tverticalAlign: 'top',\n\t\twidth: 24\n\t}\n};\n\n\n\n// Add the export related options\ndefaultOptions.exporting = {\n\t//enabled: true,\n\t//filename: 'chart',\n\ttype: 'image/png',\n\turl: 'http://export.highcharts.com/',\n\t//width: undefined,\n\t//scale: 2\n\tbuttons: {\n\t\tcontextButton: {\n\t\t\tmenuClassName: PREFIX + 'contextmenu',\n\t\t\t//x: -10,\n\t\t\tsymbol: 'menu',\n\t\t\t_titleKey: 'contextButtonTitle',\n\t\t\tmenuItems: [{\n\t\t\t\ttextKey: 'printChart',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.print();\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tseparator: true\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadPNG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart();\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadJPEG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart({\n\t\t\t\t\t\ttype: 'image/jpeg'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadPDF',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart({\n\t\t\t\t\t\ttype: 'application/pdf'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadSVG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart({\n\t\t\t\t\t\ttype: 'image/svg+xml'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Enable this block to add \"View SVG\" to the dropdown menu\n\t\t\t/*\n\t\t\t,{\n\n\t\t\t\ttext: 'View SVG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tvar svg = this.getSVG()\n\t\t\t\t\t\t.replace(/</g, '\\n&lt;')\n\t\t\t\t\t\t.replace(/>/g, '&gt;');\n\n\t\t\t\t\tdoc.body.innerHTML = '<pre>' + svg + '</pre>';\n\t\t\t\t}\n\t\t\t} // */\n\t\t\t]\n\t\t}\n\t}\n};\n\n// Add the Highcharts.post utility\nHighcharts.post = function (url, data) {\n\tvar name,\n\t\tform;\n\t\n\t// create the form\n\tform = createElement('form', {\n\t\tmethod: 'post',\n\t\taction: url,\n\t\tenctype: 'multipart/form-data'\n\t}, {\n\t\tdisplay: NONE\n\t}, doc.body);\n\n\t// add the data\n\tfor (name in data) {\n\t\tcreateElement('input', {\n\t\t\ttype: HIDDEN,\n\t\t\tname: name,\n\t\t\tvalue: data[name]\n\t\t}, null, form);\n\t}\n\n\t// submit\n\tform.submit();\n\n\t// clean up\n\tdiscardElement(form);\n};\n\nextend(Chart.prototype, {\n\n\t/**\n\t * Return an SVG representation of the chart\n\t *\n\t * @param additionalOptions {Object} Additional chart options for the generated SVG representation\n\t */\n\tgetSVG: function (additionalOptions) {\n\t\tvar chart = this,\n\t\t\tchartCopy,\n\t\t\tsandbox,\n\t\t\tsvg,\n\t\t\tseriesOptions,\n\t\t\tsourceWidth,\n\t\t\tsourceHeight,\n\t\t\tcssWidth,\n\t\t\tcssHeight,\n\t\t\toptions = merge(chart.options, additionalOptions); // copy the options and add extra options\n\n\t\t// IE compatibility hack for generating SVG content that it doesn't really understand\n\t\tif (!doc.createElementNS) {\n\t\t\t/*jslint unparam: true*//* allow unused parameter ns in function below */\n\t\t\tdoc.createElementNS = function (ns, tagName) {\n\t\t\t\treturn doc.createElement(tagName);\n\t\t\t};\n\t\t\t/*jslint unparam: false*/\n\t\t}\n\n\t\t// create a sandbox where a new chart will be generated\n\t\tsandbox = createElement(DIV, null, {\n\t\t\tposition: ABSOLUTE,\n\t\t\ttop: '-9999em',\n\t\t\twidth: chart.chartWidth + PX,\n\t\t\theight: chart.chartHeight + PX\n\t\t}, doc.body);\n\t\t\n\t\t// get the source size\n\t\tcssWidth = chart.renderTo.style.width;\n\t\tcssHeight = chart.renderTo.style.height;\n\t\tsourceWidth = options.exporting.sourceWidth ||\n\t\t\toptions.chart.width ||\n\t\t\t(/px$/.test(cssWidth) && parseInt(cssWidth, 10)) ||\n\t\t\t600;\n\t\tsourceHeight = options.exporting.sourceHeight ||\n\t\t\toptions.chart.height ||\n\t\t\t(/px$/.test(cssHeight) && parseInt(cssHeight, 10)) ||\n\t\t\t400;\n\n\t\t// override some options\n\t\textend(options.chart, {\n\t\t\tanimation: false,\n\t\t\trenderTo: sandbox,\n\t\t\tforExport: true,\n\t\t\twidth: sourceWidth,\n\t\t\theight: sourceHeight\n\t\t});\n\t\toptions.exporting.enabled = false; // hide buttons in print\n\t\t\n\t\t// prepare for replicating the chart\n\t\toptions.series = [];\n\t\teach(chart.series, function (serie) {\n\t\t\tseriesOptions = merge(serie.options, {\n\t\t\t\tanimation: false, // turn off animation\n\t\t\t\tshowCheckbox: false,\n\t\t\t\tvisible: serie.visible\n\t\t\t});\n\n\t\t\tif (!seriesOptions.isInternal) { // used for the navigator series that has its own option set\n\t\t\t\toptions.series.push(seriesOptions);\n\t\t\t}\n\t\t});\n\n\t\t// generate the chart copy\n\t\tchartCopy = new Highcharts.Chart(options, chart.callback);\n\n\t\t// reflect axis extremes in the export\n\t\teach(['xAxis', 'yAxis'], function (axisType) {\n\t\t\teach(chart[axisType], function (axis, i) {\n\t\t\t\tvar axisCopy = chartCopy[axisType][i],\n\t\t\t\t\textremes = axis.getExtremes(),\n\t\t\t\t\tuserMin = extremes.userMin,\n\t\t\t\t\tuserMax = extremes.userMax;\n\n\t\t\t\tif (axisCopy && (userMin !== UNDEFINED || userMax !== UNDEFINED)) {\n\t\t\t\t\taxisCopy.setExtremes(userMin, userMax, true, false);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// get the SVG from the container's innerHTML\n\t\tsvg = chartCopy.container.innerHTML;\n\n\t\t// free up memory\n\t\toptions = null;\n\t\tchartCopy.destroy();\n\t\tdiscardElement(sandbox);\n\n\t\t// sanitize\n\t\tsvg = svg\n\t\t\t.replace(/zIndex=\"[^\"]+\"/g, '')\n\t\t\t.replace(/isShadow=\"[^\"]+\"/g, '')\n\t\t\t.replace(/symbolName=\"[^\"]+\"/g, '')\n\t\t\t.replace(/jQuery[0-9]+=\"[^\"]+\"/g, '')\n\t\t\t.replace(/url\\([^#]+#/g, 'url(#')\n\t\t\t.replace(/<svg /, '<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" ')\n\t\t\t.replace(/ href=/g, ' xlink:href=')\n\t\t\t.replace(/\\n/, ' ')\n\t\t\t.replace(/<\\/svg>.*?$/, '</svg>') // any HTML added to the container after the SVG (#894)\n\t\t\t/* This fails in IE < 8\n\t\t\t.replace(/([0-9]+)\\.([0-9]+)/g, function(s1, s2, s3) { // round off to save weight\n\t\t\t\treturn s2 +'.'+ s3[0];\n\t\t\t})*/\n\n\t\t\t// Replace HTML entities, issue #347\n\t\t\t.replace(/&nbsp;/g, '\\u00A0') // no-break space\n\t\t\t.replace(/&shy;/g,  '\\u00AD') // soft hyphen\n\n\t\t\t// IE specific\n\t\t\t.replace(/<IMG /g, '<image ')\n\t\t\t.replace(/height=([^\" ]+)/g, 'height=\"$1\"')\n\t\t\t.replace(/width=([^\" ]+)/g, 'width=\"$1\"')\n\t\t\t.replace(/hc-svg-href=\"([^\"]+)\">/g, 'xlink:href=\"$1\"/>')\n\t\t\t.replace(/id=([^\" >]+)/g, 'id=\"$1\"')\n\t\t\t.replace(/class=([^\" >]+)/g, 'class=\"$1\"')\n\t\t\t.replace(/ transform /g, ' ')\n\t\t\t.replace(/:(path|rect)/g, '$1')\n\t\t\t.replace(/style=\"([^\"]+)\"/g, function (s) {\n\t\t\t\treturn s.toLowerCase();\n\t\t\t});\n\n\t\t// IE9 beta bugs with innerHTML. Test again with final IE9.\n\t\tsvg = svg.replace(/(url\\(#highcharts-[0-9]+)&quot;/g, '$1')\n\t\t\t.replace(/&quot;/g, \"'\");\n\n\t\treturn svg;\n\t},\n\n\t/**\n\t * Submit the SVG representation of the chart to the server\n\t * @param {Object} options Exporting options. Possible members are url, type and width.\n\t * @param {Object} chartOptions Additional chart options for the SVG representation of the chart\n\t */\n\texportChart: function (options, chartOptions) {\n\t\toptions = options || {};\n\t\t\n\t\tvar chart = this,\n\t\t\tchartExportingOptions = chart.options.exporting,\n\t\t\tsvg = chart.getSVG(merge(\n\t\t\t\t{ chart: { borderRadius: 0 } },\n\t\t\t\tchartExportingOptions.chartOptions,\n\t\t\t\tchartOptions, \n\t\t\t\t{\n\t\t\t\t\texporting: {\n\t\t\t\t\t\tsourceWidth: options.sourceWidth || chartExportingOptions.sourceWidth,\n\t\t\t\t\t\tsourceHeight: options.sourceHeight || chartExportingOptions.sourceHeight\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t));\n\n\t\t// merge the options\n\t\toptions = merge(chart.options.exporting, options);\n\t\t\n\t\t// do the post\n\t\tHighcharts.post(options.url, {\n\t\t\tfilename: options.filename || 'chart',\n\t\t\ttype: options.type,\n\t\t\twidth: options.width || 0, // IE8 fails to post undefined correctly, so use 0\n\t\t\tscale: options.scale || 2,\n\t\t\tsvg: svg\n\t\t});\n\n\t},\n\t\n\t/**\n\t * Print the chart\n\t */\n\tprint: function () {\n\n\t\tvar chart = this,\n\t\t\tcontainer = chart.container,\n\t\t\torigDisplay = [],\n\t\t\torigParent = container.parentNode,\n\t\t\tbody = doc.body,\n\t\t\tchildNodes = body.childNodes;\n\n\t\tif (chart.isPrinting) { // block the button while in printing mode\n\t\t\treturn;\n\t\t}\n\n\t\tchart.isPrinting = true;\n\n\t\t// hide all body content\n\t\teach(childNodes, function (node, i) {\n\t\t\tif (node.nodeType === 1) {\n\t\t\t\torigDisplay[i] = node.style.display;\n\t\t\t\tnode.style.display = NONE;\n\t\t\t}\n\t\t});\n\n\t\t// pull out the chart\n\t\tbody.appendChild(container);\n\n\t\t// print\n\t\twin.focus(); // #1510\n\t\twin.print();\n\n\t\t// allow the browser to prepare before reverting\n\t\tsetTimeout(function () {\n\n\t\t\t// put the chart back in\n\t\t\torigParent.appendChild(container);\n\n\t\t\t// restore all body content\n\t\t\teach(childNodes, function (node, i) {\n\t\t\t\tif (node.nodeType === 1) {\n\t\t\t\t\tnode.style.display = origDisplay[i];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tchart.isPrinting = false;\n\n\t\t}, 1000);\n\n\t},\n\n\t/**\n\t * Display a popup menu for choosing the export type\n\t *\n\t * @param {String} className An identifier for the menu\n\t * @param {Array} items A collection with text and onclicks for the items\n\t * @param {Number} x The x position of the opener button\n\t * @param {Number} y The y position of the opener button\n\t * @param {Number} width The width of the opener button\n\t * @param {Number} height The height of the opener button\n\t */\n\tcontextMenu: function (className, items, x, y, width, height, button) {\n\t\tvar chart = this,\n\t\t\tnavOptions = chart.options.navigation,\n\t\t\tmenuItemStyle = navOptions.menuItemStyle,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\tcacheName = 'cache-' + className,\n\t\t\tmenu = chart[cacheName],\n\t\t\tmenuPadding = mathMax(width, height), // for mouse leave detection\n\t\t\tboxShadow = '3px 3px 10px #888',\n\t\t\tinnerMenu,\n\t\t\thide,\n\t\t\thideTimer,\n\t\t\tmenuStyle;\n\n\t\t// create the menu only the first time\n\t\tif (!menu) {\n\n\t\t\t// create a HTML element above the SVG\n\t\t\tchart[cacheName] = menu = createElement(DIV, {\n\t\t\t\tclassName: className\n\t\t\t}, {\n\t\t\t\tposition: ABSOLUTE,\n\t\t\t\tzIndex: 1000,\n\t\t\t\tpadding: menuPadding + PX\n\t\t\t}, chart.container);\n\n\t\t\tinnerMenu = createElement(DIV, null,\n\t\t\t\textend({\n\t\t\t\t\tMozBoxShadow: boxShadow,\n\t\t\t\t\tWebkitBoxShadow: boxShadow,\n\t\t\t\t\tboxShadow: boxShadow\n\t\t\t\t}, navOptions.menuStyle), menu);\n\n\t\t\t// hide on mouse out\n\t\t\thide = function () {\n\t\t\t\tcss(menu, { display: NONE });\n\t\t\t\tif (button) {\n\t\t\t\t\tbutton.setState(0);\n\t\t\t\t}\n\t\t\t\tchart.openMenu = false;\n\t\t\t};\n\n\t\t\t// Hide the menu some time after mouse leave (#1357)\n\t\t\taddEvent(menu, 'mouseleave', function () {\n\t\t\t\thideTimer = setTimeout(hide, 500);\n\t\t\t});\n\t\t\taddEvent(menu, 'mouseenter', function () {\n\t\t\t\tclearTimeout(hideTimer);\n\t\t\t});\n\t\t\t// Hide it on clicking or touching outside the menu (#2258)\n\t\t\taddEvent(document, 'mousedown', function (e) {\n\t\t\t\tif (!chart.pointer.inClass(e.target, className)) {\n\t\t\t\t\thide();\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\t// create the items\n\t\t\teach(items, function (item) {\n\t\t\t\tif (item) {\n\t\t\t\t\tvar element = item.separator ? \n\t\t\t\t\t\tcreateElement('hr', null, null, innerMenu) :\n\t\t\t\t\t\tcreateElement(DIV, {\n\t\t\t\t\t\t\tonmouseover: function () {\n\t\t\t\t\t\t\t\tcss(this, navOptions.menuItemHoverStyle);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonmouseout: function () {\n\t\t\t\t\t\t\t\tcss(this, menuItemStyle);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonclick: function () {\n\t\t\t\t\t\t\t\thide();\n\t\t\t\t\t\t\t\titem.onclick.apply(chart, arguments);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tinnerHTML: item.text || chart.options.lang[item.textKey]\n\t\t\t\t\t\t}, extend({\n\t\t\t\t\t\t\tcursor: 'pointer'\n\t\t\t\t\t\t}, menuItemStyle), innerMenu);\n\n\n\t\t\t\t\t// Keep references to menu divs to be able to destroy them\n\t\t\t\t\tchart.exportDivElements.push(element);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Keep references to menu and innerMenu div to be able to destroy them\n\t\t\tchart.exportDivElements.push(innerMenu, menu);\n\n\t\t\tchart.exportMenuWidth = menu.offsetWidth;\n\t\t\tchart.exportMenuHeight = menu.offsetHeight;\n\t\t}\n\n\t\tmenuStyle = { display: 'block' };\n\n\t\t// if outside right, right align it\n\t\tif (x + chart.exportMenuWidth > chartWidth) {\n\t\t\tmenuStyle.right = (chartWidth - x - width - menuPadding) + PX;\n\t\t} else {\n\t\t\tmenuStyle.left = (x - menuPadding) + PX;\n\t\t}\n\t\t// if outside bottom, bottom align it\n\t\tif (y + height + chart.exportMenuHeight > chartHeight && button.alignOptions.verticalAlign !== 'top') {\n\t\t\tmenuStyle.bottom = (chartHeight - y - menuPadding)  + PX;\n\t\t} else {\n\t\t\tmenuStyle.top = (y + height - menuPadding) + PX;\n\t\t}\n\n\t\tcss(menu, menuStyle);\n\t\tchart.openMenu = true;\n\t},\n\n\t/**\n\t * Add the export button to the chart\n\t */\n\taddButton: function (options) {\n\t\tvar chart = this,\n\t\t\trenderer = chart.renderer,\n\t\t\tbtnOptions = merge(chart.options.navigation.buttonOptions, options),\n\t\t\tonclick = btnOptions.onclick,\n\t\t\tmenuItems = btnOptions.menuItems,\n\t\t\tsymbol,\n\t\t\tbutton,\n\t\t\tsymbolAttr = {\n\t\t\t\tstroke: btnOptions.symbolStroke,\n\t\t\t\tfill: btnOptions.symbolFill\n\t\t\t},\n\t\t\tsymbolSize = btnOptions.symbolSize || 12;\n\t\tif (!chart.btnCount) {\n\t\t\tchart.btnCount = 0;\n\t\t}\n\n\t\t// Keeps references to the button elements\n\t\tif (!chart.exportDivElements) {\n\t\t\tchart.exportDivElements = [];\n\t\t\tchart.exportSVGElements = [];\n\t\t}\n\n\t\tif (btnOptions.enabled === false) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tvar attr = btnOptions.theme,\n\t\t\tstates = attr.states,\n\t\t\thover = states && states.hover,\n\t\t\tselect = states && states.select,\n\t\t\tcallback;\n\n\t\tdelete attr.states;\n\n\t\tif (onclick) {\n\t\t\tcallback = function () {\n\t\t\t\tonclick.apply(chart, arguments);\n\t\t\t};\n\n\t\t} else if (menuItems) {\n\t\t\tcallback = function () {\n\t\t\t\tchart.contextMenu(\n\t\t\t\t\tbutton.menuClassName, \n\t\t\t\t\tmenuItems, \n\t\t\t\t\tbutton.translateX, \n\t\t\t\t\tbutton.translateY, \n\t\t\t\t\tbutton.width, \n\t\t\t\t\tbutton.height,\n\t\t\t\t\tbutton\n\t\t\t\t);\n\t\t\t\tbutton.setState(2);\n\t\t\t};\n\t\t}\n\n\n\t\tif (btnOptions.text && btnOptions.symbol) {\n\t\t\tattr.paddingLeft = Highcharts.pick(attr.paddingLeft, 25);\n\t\t\n\t\t} else if (!btnOptions.text) {\n\t\t\textend(attr, {\n\t\t\t\twidth: btnOptions.width,\n\t\t\t\theight: btnOptions.height,\n\t\t\t\tpadding: 0\n\t\t\t});\n\t\t}\n\n\t\tbutton = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select)\n\t\t\t.attr({\n\t\t\t\ttitle: chart.options.lang[btnOptions._titleKey],\n\t\t\t\t'stroke-linecap': 'round'\n\t\t\t});\n\t\tbutton.menuClassName = options.menuClassName || PREFIX + 'menu-' + chart.btnCount++;\n\n\t\tif (btnOptions.symbol) {\n\t\t\tsymbol = renderer.symbol(\n\t\t\t\t\tbtnOptions.symbol,\n\t\t\t\t\tbtnOptions.symbolX - (symbolSize / 2),\n\t\t\t\t\tbtnOptions.symbolY - (symbolSize / 2),\n\t\t\t\t\tsymbolSize,\t\t\t\t\n\t\t\t\t\tsymbolSize\n\t\t\t\t)\n\t\t\t\t.attr(extend(symbolAttr, {\n\t\t\t\t\t'stroke-width': btnOptions.symbolStrokeWidth || 1,\n\t\t\t\t\tzIndex: 1\n\t\t\t\t})).add(button);\n\t\t}\n\n\t\tbutton.add()\n\t\t\t.align(extend(btnOptions, {\n\t\t\t\twidth: button.width,\n\t\t\t\tx: Highcharts.pick(btnOptions.x, buttonOffset) // #1654\n\t\t\t}), true, 'spacingBox');\n\n\t\tbuttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1);\n\n\t\tchart.exportSVGElements.push(button, symbol);\n\n\t},\n\n\t/**\n\t * Destroy the buttons.\n\t */\n\tdestroyExport: function (e) {\n\t\tvar chart = e.target,\n\t\t\ti,\n\t\t\telem;\n\n\t\t// Destroy the extra buttons added\n\t\tfor (i = 0; i < chart.exportSVGElements.length; i++) {\n\t\t\telem = chart.exportSVGElements[i];\n\t\t\t\n\t\t\t// Destroy and null the svg/vml elements\n\t\t\tif (elem) { // #1822\n\t\t\t\telem.onclick = elem.ontouchstart = null;\n\t\t\t\tchart.exportSVGElements[i] = elem.destroy();\n\t\t\t}\n\t\t}\n\n\t\t// Destroy the divs for the menu\n\t\tfor (i = 0; i < chart.exportDivElements.length; i++) {\n\t\t\telem = chart.exportDivElements[i];\n\n\t\t\t// Remove the event handler\n\t\t\tremoveEvent(elem, 'mouseleave');\n\n\t\t\t// Remove inline events\n\t\t\tchart.exportDivElements[i] = elem.onmouseout = elem.onmouseover = elem.ontouchstart = elem.onclick = null;\n\n\t\t\t// Destroy the div by moving to garbage bin\n\t\t\tdiscardElement(elem);\n\t\t}\n\t}\n});\n\n\nsymbols.menu = function (x, y, width, height) {\n\tvar arr = [\n\t\tM, x, y + 2.5,\n\t\tL, x + width, y + 2.5,\n\t\tM, x, y + height / 2 + 0.5,\n\t\tL, x + width, y + height / 2 + 0.5,\n\t\tM, x, y + height - 1.5,\n\t\tL, x + width, y + height - 1.5\n\t];\n\treturn arr;\n};\n\n// Add the buttons on chart load\nChart.prototype.callbacks.push(function (chart) {\n\tvar n,\n\t\texportingOptions = chart.options.exporting,\n\t\tbuttons = exportingOptions.buttons;\n\n\tbuttonOffset = 0;\n\n\tif (exportingOptions.enabled !== false) {\n\n\t\tfor (n in buttons) {\n\t\t\tchart.addButton(buttons[n]);\n\t\t}\n\n\t\t// Destroy the export elements at chart destroy\n\t\taddEvent(chart, 'destroy', chart.destroyExport);\n\t}\n\n});\n\n\n}(Highcharts));\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/funnel.js",
    "content": "/*\n \n Highcharts funnel module, Beta\n\n (c) 2010-2012 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(d){var u=d.getOptions().plotOptions,p=d.seriesTypes,D=d.merge,z=function(){},A=d.each;u.funnel=D(u.pie,{center:[\"50%\",\"50%\"],width:\"90%\",neckWidth:\"30%\",height:\"100%\",neckHeight:\"25%\",dataLabels:{connectorWidth:1,connectorColor:\"#606060\"},size:!0,states:{select:{color:\"#C0C0C0\",borderColor:\"#000000\",shadow:!1}}});p.funnel=d.extendClass(p.pie,{type:\"funnel\",animate:z,translate:function(){var a=function(k,a){return/%$/.test(k)?a*parseInt(k,10)/100:parseInt(k,10)},g=0,e=this.chart,f=e.plotWidth,\ne=e.plotHeight,h=0,c=this.options,C=c.center,b=a(C[0],f),d=a(C[0],e),p=a(c.width,f),i,q,j=a(c.height,e),r=a(c.neckWidth,f),s=a(c.neckHeight,e),v=j-s,a=this.data,w,x,u=c.dataLabels.position===\"left\"?1:0,y,m,B,n,l,t,o;this.getWidthAt=q=function(k){return k>j-s||j===s?r:r+(p-r)*((j-s-k)/(j-s))};this.getX=function(k,a){return b+(a?-1:1)*(q(k)/2+c.dataLabels.distance)};this.center=[b,d,j];this.centerX=b;A(a,function(a){g+=a.y});A(a,function(a){o=null;x=g?a.y/g:0;m=d-j/2+h*j;l=m+x*j;i=q(m);y=b-i/2;B=y+\ni;i=q(l);n=b-i/2;t=n+i;m>v?(y=n=b-r/2,B=t=b+r/2):l>v&&(o=l,i=q(v),n=b-i/2,t=n+i,l=v);w=[\"M\",y,m,\"L\",B,m,t,l];o&&w.push(t,o,n,o);w.push(n,l,\"Z\");a.shapeType=\"path\";a.shapeArgs={d:w};a.percentage=x*100;a.plotX=b;a.plotY=(m+(o||l))/2;a.tooltipPos=[b,a.plotY];a.slice=z;a.half=u;h+=x});this.setTooltipPoints()},drawPoints:function(){var a=this,g=a.options,e=a.chart.renderer;A(a.data,function(f){var h=f.graphic,c=f.shapeArgs;h?h.animate(c):f.graphic=e.path(c).attr({fill:f.color,stroke:g.borderColor,\"stroke-width\":g.borderWidth}).add(a.group)})},\nsortByAngle:z,drawDataLabels:function(){var a=this.data,g=this.options.dataLabels.distance,e,f,h,c=a.length,d,b;for(this.center[2]-=2*g;c--;)h=a[c],f=(e=h.half)?1:-1,b=h.plotY,d=this.getX(b,e),h.labelPos=[0,b,d+(g-5)*f,b,d+g*f,b,e?\"right\":\"left\",0];p.pie.prototype.drawDataLabels.call(this)}})})(Highcharts);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/funnel.src.js",
    "content": "/**\n * @license \n * Highcharts funnel module, Beta\n *\n * (c) 2010-2012 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n/*global Highcharts */\n(function (Highcharts) {\n\t\n'use strict';\n\n// create shortcuts\nvar defaultOptions = Highcharts.getOptions(),\n\tdefaultPlotOptions = defaultOptions.plotOptions,\n\tseriesTypes = Highcharts.seriesTypes,\n\tmerge = Highcharts.merge,\n\tnoop = function () {},\n\teach = Highcharts.each;\n\n// set default options\ndefaultPlotOptions.funnel = merge(defaultPlotOptions.pie, {\n\tcenter: ['50%', '50%'],\n\twidth: '90%',\n\tneckWidth: '30%',\n\theight: '100%',\n\tneckHeight: '25%',\n\n\tdataLabels: {\n\t\t//position: 'right',\n\t\tconnectorWidth: 1,\n\t\tconnectorColor: '#606060'\n\t},\n\tsize: true, // to avoid adapting to data label size in Pie.drawDataLabels\n\tstates: {\n\t\tselect: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tborderColor: '#000000',\n\t\t\tshadow: false\n\t\t}\n\t}\t\n});\n\n\nseriesTypes.funnel = Highcharts.extendClass(seriesTypes.pie, {\n\t\n\ttype: 'funnel',\n\tanimate: noop,\n\n\t/**\n\t * Overrides the pie translate method\n\t */\n\ttranslate: function () {\n\t\t\n\t\tvar \n\t\t\t// Get positions - either an integer or a percentage string must be given\n\t\t\tgetLength = function (length, relativeTo) {\n\t\t\t\treturn (/%$/).test(length) ?\n\t\t\t\t\trelativeTo * parseInt(length, 10) / 100 :\n\t\t\t\t\tparseInt(length, 10);\n\t\t\t},\n\t\t\t\n\t\t\tsum = 0,\n\t\t\tseries = this,\n\t\t\tchart = series.chart,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tcumulative = 0, // start at top\n\t\t\toptions = series.options,\n\t\t\tcenter = options.center,\n\t\t\tcenterX = getLength(center[0], plotWidth),\n\t\t\tcenterY = getLength(center[0], plotHeight),\n\t\t\twidth = getLength(options.width, plotWidth),\n\t\t\ttempWidth,\n\t\t\tgetWidthAt,\n\t\t\theight = getLength(options.height, plotHeight),\n\t\t\tneckWidth = getLength(options.neckWidth, plotWidth),\n\t\t\tneckHeight = getLength(options.neckHeight, plotHeight),\n\t\t\tneckY = height - neckHeight,\n\t\t\tdata = series.data,\n\t\t\tpath,\n\t\t\tfraction,\n\t\t\thalf = options.dataLabels.position === 'left' ? 1 : 0,\n\n\t\t\tx1, \n\t\t\ty1, \n\t\t\tx2, \n\t\t\tx3, \n\t\t\ty3, \n\t\t\tx4, \n\t\t\ty5;\n\n\t\t// Return the width at a specific y coordinate\n\t\tseries.getWidthAt = getWidthAt = function (y) {\n\t\t\treturn y > height - neckHeight || height === neckHeight ?\n\t\t\t\tneckWidth :\n\t\t\t\tneckWidth + (width - neckWidth) * ((height - neckHeight - y) / (height - neckHeight));\n\t\t};\n\t\tseries.getX = function (y, half) {\n\t\t\treturn centerX + (half ? -1 : 1) * ((getWidthAt(y) / 2) + options.dataLabels.distance);\n\t\t};\n\n\t\t// Expose\n\t\tseries.center = [centerX, centerY, height];\n\t\tseries.centerX = centerX;\n\n\t\t/*\n\t\t * Individual point coordinate naming:\n\t\t *\n\t\t * x1,y1 _________________ x2,y1\n\t\t *  \\                         /\n\t\t *   \\                       /\n\t\t *    \\                     /\n\t\t *     \\                   /\n\t\t *      \\                 /\n\t\t *     x3,y3 _________ x4,y3\n\t\t *\n\t\t * Additional for the base of the neck:\n\t\t *\n\t\t *       |               |\n\t\t *       |               |\n\t\t *       |               |\n\t\t *     x3,y5 _________ x4,y5\n\t\t */\n\n\n\n\n\t\t// get the total sum\n\t\teach(data, function (point) {\n\t\t\tsum += point.y;\n\t\t});\n\n\t\teach(data, function (point) {\n\t\t\t// set start and end positions\n\t\t\ty5 = null;\n\t\t\tfraction = sum ? point.y / sum : 0;\n\t\t\ty1 = centerY - height / 2 + cumulative * height;\n\t\t\ty3 = y1 + fraction * height;\n\t\t\t//tempWidth = neckWidth + (width - neckWidth) * ((height - neckHeight - y1) / (height - neckHeight));\n\t\t\ttempWidth = getWidthAt(y1);\n\t\t\tx1 = centerX - tempWidth / 2;\n\t\t\tx2 = x1 + tempWidth;\n\t\t\ttempWidth = getWidthAt(y3);\n\t\t\tx3 = centerX - tempWidth / 2;\n\t\t\tx4 = x3 + tempWidth;\n\n\t\t\t// the entire point is within the neck\n\t\t\tif (y1 > neckY) {\n\t\t\t\tx1 = x3 = centerX - neckWidth / 2;\n\t\t\t\tx2 = x4 = centerX + neckWidth / 2;\n\t\t\t\n\t\t\t// the base of the neck\n\t\t\t} else if (y3 > neckY) {\n\t\t\t\ty5 = y3;\n\n\t\t\t\ttempWidth = getWidthAt(neckY);\n\t\t\t\tx3 = centerX - tempWidth / 2;\n\t\t\t\tx4 = x3 + tempWidth;\n\n\t\t\t\ty3 = neckY;\n\t\t\t}\n\n\t\t\t// save the path\n\t\t\tpath = [\n\t\t\t\t'M',\n\t\t\t\tx1, y1,\n\t\t\t\t'L',\n\t\t\t\tx2, y1,\n\t\t\t\tx4, y3\n\t\t\t];\n\t\t\tif (y5) {\n\t\t\t\tpath.push(x4, y5, x3, y5);\n\t\t\t}\n\t\t\tpath.push(x3, y3, 'Z');\n\n\t\t\t// prepare for using shared dr\n\t\t\tpoint.shapeType = 'path';\n\t\t\tpoint.shapeArgs = { d: path };\n\n\n\t\t\t// for tooltips and data labels\n\t\t\tpoint.percentage = fraction * 100;\n\t\t\tpoint.plotX = centerX;\n\t\t\tpoint.plotY = (y1 + (y5 || y3)) / 2;\n\n\t\t\t// Placement of tooltips and data labels\n\t\t\tpoint.tooltipPos = [\n\t\t\t\tcenterX,\n\t\t\t\tpoint.plotY\n\t\t\t];\n\n\t\t\t// Slice is a noop on funnel points\n\t\t\tpoint.slice = noop;\n\t\t\t\n\t\t\t// Mimicking pie data label placement logic\n\t\t\tpoint.half = half;\n\n\t\t\tcumulative += fraction;\n\t\t});\n\n\n\t\tseries.setTooltipPoints();\n\t},\n\t/**\n\t * Draw a single point (wedge)\n\t * @param {Object} point The point object\n\t * @param {Object} color The color of the point\n\t * @param {Number} brightness The brightness relative to the color\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer;\n\n\t\teach(series.data, function (point) {\n\t\t\t\n\t\t\tvar graphic = point.graphic,\n\t\t\t\tshapeArgs = point.shapeArgs;\n\n\t\t\tif (!graphic) { // Create the shapes\n\t\t\t\tpoint.graphic = renderer.path(shapeArgs).\n\t\t\t\t\tattr({\n\t\t\t\t\t\tfill: point.color,\n\t\t\t\t\t\tstroke: options.borderColor,\n\t\t\t\t\t\t'stroke-width': options.borderWidth\n\t\t\t\t\t}).\n\t\t\t\t\tadd(series.group);\n\t\t\t\t\t\n\t\t\t} else { // Update the shapes\n\t\t\t\tgraphic.animate(shapeArgs);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Funnel items don't have angles (#2289)\n\t */\n\tsortByAngle: noop,\n\t\n\t/**\n\t * Extend the pie data label method\n\t */\n\tdrawDataLabels: function () {\n\t\tvar data = this.data,\n\t\t\tlabelDistance = this.options.dataLabels.distance,\n\t\t\tleftSide,\n\t\t\tsign,\n\t\t\tpoint,\n\t\t\ti = data.length,\n\t\t\tx,\n\t\t\ty;\n\t\t\n\t\t// In the original pie label anticollision logic, the slots are distributed\n\t\t// from one labelDistance above to one labelDistance below the pie. In funnels\n\t\t// we don't want this.\n\t\tthis.center[2] -= 2 * labelDistance;\n\t\t\n\t\t// Set the label position array for each point.\n\t\twhile (i--) {\n\t\t\tpoint = data[i];\n\t\t\tleftSide = point.half;\n\t\t\tsign = leftSide ? 1 : -1;\n\t\t\ty = point.plotY;\n\t\t\tx = this.getX(y, leftSide);\n\t\t\t\t\n\t\t\t// set the anchor point for data labels\n\t\t\tpoint.labelPos = [\n\t\t\t\t0, // first break of connector\n\t\t\t\ty, // a/a\n\t\t\t\tx + (labelDistance - 5) * sign, // second break, right outside point shape\n\t\t\t\ty, // a/a\n\t\t\t\tx + labelDistance * sign, // landing point for connector\n\t\t\t\ty, // a/a\n\t\t\t\tleftSide ? 'right' : 'left', // alignment\n\t\t\t\t0 // center angle\n\t\t\t];\n\t\t}\n\t\t\n\t\tseriesTypes.pie.prototype.drawDataLabels.call(this);\n\t}\n\n});\n\n\n}(Highcharts));\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/heatmap.js",
    "content": "(function(b){var k=b.seriesTypes,l=b.each;k.heatmap=b.extendClass(k.map,{colorKey:\"z\",useMapGeometry:!1,pointArrayMap:[\"y\",\"z\"],translate:function(){var c=this,b=c.options,i=Number.MAX_VALUE,j=Number.MIN_VALUE;c.generatePoints();l(c.data,function(a){var e=a.x,f=a.y,d=a.z,g=(b.colsize||1)/2,h=(b.rowsize||1)/2;a.path=[\"M\",e-g,f-h,\"L\",e+g,f-h,\"L\",e+g,f+h,\"L\",e-g,f+h,\"Z\"];a.shapeType=\"path\";a.shapeArgs={d:c.translatePath(a.path)};typeof d===\"number\"&&(d>j?j=d:d<i&&(i=d))});c.translateColors(i,j)},getBox:function(){}})})(Highcharts);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/heatmap.src.js",
    "content": "(function (Highcharts) {\n\tvar seriesTypes = Highcharts.seriesTypes,\n\t\teach = Highcharts.each;\n\t\n\tseriesTypes.heatmap = Highcharts.extendClass(seriesTypes.map, {\n\t\tcolorKey: 'z',\n\t\tuseMapGeometry: false,\n\t\tpointArrayMap: ['y', 'z'],\n\t\ttranslate: function () {\n\t\t\tvar series = this,\n\t\t\t\toptions = series.options,\n\t\t\t\tdataMin = Number.MAX_VALUE,\n\t\t\t\tdataMax = Number.MIN_VALUE;\n\n\t\t\tseries.generatePoints();\n\t\n\t\t\teach(series.data, function (point) {\n\t\t\t\tvar x = point.x,\n\t\t\t\t\ty = point.y,\n\t\t\t\t\tvalue = point.z,\n\t\t\t\t\txPad = (options.colsize || 1) / 2,\n\t\t\t\t\tyPad = (options.rowsize || 1) / 2;\n\n\t\t\t\tpoint.path = [\n\t\t\t\t\t'M', x - xPad, y - yPad,\n\t\t\t\t\t'L', x + xPad, y - yPad,\n\t\t\t\t\t'L', x + xPad, y + yPad,\n\t\t\t\t\t'L', x - xPad, y + yPad,\n\t\t\t\t\t'Z'\n\t\t\t\t];\n\t\t\t\t\n\t\t\t\tpoint.shapeType = 'path';\n\t\t\t\tpoint.shapeArgs = {\n\t\t\t\t\td: series.translatePath(point.path)\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (typeof value === 'number') {\n\t\t\t\t\tif (value > dataMax) {\n\t\t\t\t\t\tdataMax = value;\n\t\t\t\t\t} else if (value < dataMin) {\n\t\t\t\t\t\tdataMin = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tseries.translateColors(dataMin, dataMax);\n\t\t},\n\t\t\n\t\tgetBox: function () {}\n\t\t\t\n\t});\n\t\n}(Highcharts));\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/map.js",
    "content": "/*\n Map plugin v0.1 for Highcharts\n\n (c) 2011-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(g){function x(a,b,c){for(var d=4,e=[];d--;)e[d]=Math.round(b.rgba[d]+(a.rgba[d]-b.rgba[d])*(1-c));return\"rgba(\"+e.join(\",\")+\")\"}var r=g.Axis,y=g.Chart,s=g.Point,z=g.Pointer,l=g.each,v=g.extend,p=g.merge,n=g.pick,A=g.numberFormat,B=g.getOptions(),k=g.seriesTypes,q=B.plotOptions,t=g.wrap,u=g.Color,w=function(){};B.mapNavigation={buttonOptions:{align:\"right\",verticalAlign:\"bottom\",x:0,width:18,height:18,style:{fontSize:\"15px\",fontWeight:\"bold\",textAlign:\"center\"}},buttons:{zoomIn:{onclick:function(){this.mapZoom(0.5)},\ntext:\"+\",y:-32},zoomOut:{onclick:function(){this.mapZoom(2)},text:\"-\",y:0}}};g.splitPath=function(a){var b,a=a.replace(/([A-Za-z])/g,\" $1 \"),a=a.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\"),a=a.split(/[ ,]+/);for(b=0;b<a.length;b++)/[a-zA-Z]/.test(a[b])||(a[b]=parseFloat(a[b]));return a};g.maps={};t(r.prototype,\"getSeriesExtremes\",function(a){var b=this.isXAxis,c,d,e=[];l(this.series,function(a,b){if(a.useMapGeometry)e[b]=a.xData,a.xData=[]});a.call(this);c=n(this.dataMin,Number.MAX_VALUE);d=n(this.dataMax,\nNumber.MIN_VALUE);l(this.series,function(a,i){if(a.useMapGeometry)c=Math.min(c,a[b?\"minX\":\"minY\"]),d=Math.max(d,a[b?\"maxX\":\"maxY\"]),a.xData=e[i]});this.dataMin=c;this.dataMax=d});t(r.prototype,\"setAxisTranslation\",function(a){var b=this.chart,c=b.plotWidth/b.plotHeight,d=this.isXAxis,e=b.xAxis[0];a.call(this);if(b.options.chart.type===\"map\"&&!d&&e.transA!==void 0)this.transA=e.transA=Math.min(this.transA,e.transA),a=(e.max-e.min)/(this.max-this.min),e=a>c?this:e,c=(e.max-e.min)*e.transA,e.minPixelPadding=\n(e.len-c)/2});t(y.prototype,\"render\",function(a){var b=this,c=b.options.mapNavigation;a.call(b);b.renderMapNavigation();c.zoomOnDoubleClick&&g.addEvent(b.container,\"dblclick\",function(a){b.pointer.onContainerDblClick(a)});c.zoomOnMouseWheel&&g.addEvent(b.container,document.onmousewheel===void 0?\"DOMMouseScroll\":\"mousewheel\",function(a){b.pointer.onContainerMouseWheel(a)})});v(z.prototype,{onContainerDblClick:function(a){var b=this.chart,a=this.normalize(a);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-\nb.plotTop)&&b.mapZoom(0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY))},onContainerMouseWheel:function(a){var b=this.chart,c,a=this.normalize(a);c=a.detail||-(a.wheelDelta/120);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&b.mapZoom(c>0?2:0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY))}});t(z.prototype,\"init\",function(a,b,c){a.call(this,b,c);if(c.mapNavigation.enableTouchZoom)this.pinchX=this.pinchHor=this.pinchY=this.pinchVert=!0});v(y.prototype,{renderMapNavigation:function(){var a=\nthis,b=this.options.mapNavigation,c=b.buttons,d,e,f,i=function(){this.handler.call(a)};if(b.enableButtons)for(d in c)if(c.hasOwnProperty(d))f=p(b.buttonOptions,c[d]),e=a.renderer.button(f.text,0,0,i).attr({width:f.width,height:f.height}).css(f.style).add(),e.handler=f.onclick,e.align(v(f,{width:e.width,height:e.height}),null,\"spacingBox\")},fitToBox:function(a,b){l([[\"x\",\"width\"],[\"y\",\"height\"]],function(c){var d=c[0],c=c[1];a[d]+a[c]>b[d]+b[c]&&(a[c]>b[c]?(a[c]=b[c],a[d]=b[d]):a[d]=b[d]+b[c]-a[c]);\na[c]>b[c]&&(a[c]=b[c]);a[d]<b[d]&&(a[d]=b[d])});return a},mapZoom:function(a,b,c){if(!this.isMapZooming){var d=this,e=d.xAxis[0],f=e.max-e.min,i=n(b,e.min+f/2),b=f*a,f=d.yAxis[0],h=f.max-f.min,c=n(c,f.min+h/2);a*=h;i-=b/2;h=c-a/2;c=n(d.options.chart.animation,!0);b=d.fitToBox({x:i,y:h,width:b,height:a},{x:e.dataMin,y:f.dataMin,width:e.dataMax-e.dataMin,height:f.dataMax-f.dataMin});e.setExtremes(b.x,b.x+b.width,!1);f.setExtremes(b.y,b.y+b.height,!1);if(e=c?c.duration||500:0)d.isMapZooming=!0,setTimeout(function(){d.isMapZooming=\n!1},e);d.redraw()}}});q.map=p(q.scatter,{animation:!1,nullColor:\"#F8F8F8\",borderColor:\"silver\",borderWidth:1,marker:null,stickyTracking:!1,dataLabels:{verticalAlign:\"middle\"},turboThreshold:0,tooltip:{followPointer:!0,pointFormat:\"{point.name}: {point.y}<br/>\"},states:{normal:{animation:!0}}});r=g.extendClass(s,{applyOptions:function(a,b){var c=s.prototype.applyOptions.call(this,a,b);if(c.path&&typeof c.path===\"string\")c.path=c.options.path=g.splitPath(c.path);return c},onMouseOver:function(){clearTimeout(this.colorInterval);\ns.prototype.onMouseOver.call(this)},onMouseOut:function(){var a=this,b=+new Date,c=u(a.options.color),d=u(a.pointAttr.hover.fill),e=a.series.options.states.normal.animation,f=e&&(e.duration||500);if(f&&c.rgba.length===4&&d.rgba.length===4)delete a.pointAttr[\"\"].fill,clearTimeout(a.colorInterval),a.colorInterval=setInterval(function(){var e=(new Date-b)/f,h=a.graphic;e>1&&(e=1);h&&h.attr(\"fill\",x(d,c,e));e>=1&&clearTimeout(a.colorInterval)},13);s.prototype.onMouseOut.call(a)}});k.map=g.extendClass(k.scatter,\n{type:\"map\",pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\"},colorKey:\"y\",pointClass:r,trackerGroups:[\"group\",\"markerGroup\",\"dataLabelsGroup\"],getSymbol:w,supportsDrilldown:!0,getExtremesFromAll:!0,useMapGeometry:!0,init:function(a){var b=this,c=a.options.legend.valueDecimals,d=[],e,f,i,h,j,o,m;o=a.options.legend.layout===\"horizontal\";g.Series.prototype.init.apply(this,arguments);j=b.options.colorRange;if(h=b.options.valueRanges)l(h,function(a){f=a.from;i=a.to;e=\n\"\";f===void 0?e=\"< \":i===void 0&&(e=\"> \");f!==void 0&&(e+=A(f,c));f!==void 0&&i!==void 0&&(e+=\" - \");i!==void 0&&(e+=A(i,c));d.push(g.extend({chart:b.chart,name:e,options:{},drawLegendSymbol:k.area.prototype.drawLegendSymbol,visible:!0,setState:function(){},setVisible:function(){}},a))}),b.legendItems=d;else if(j)f=j.from,i=j.to,h=j.fromLabel,j=j.toLabel,m=o?[0,0,1,0]:[0,1,0,0],o||(o=h,h=j,j=o),o={linearGradient:{x1:m[0],y1:m[1],x2:m[2],y2:m[3]},stops:[[0,f],[1,i]]},d=[{chart:b.chart,options:{},fromLabel:h,\ntoLabel:j,color:o,drawLegendSymbol:this.drawLegendSymbolGradient,visible:!0,setState:function(){},setVisible:function(){}}],b.legendItems=d},drawLegendSymbol:k.area.prototype.drawLegendSymbol,drawLegendSymbolGradient:function(a,b){var c=a.options.symbolPadding,d=n(a.options.padding,8),e,f,i=this.chart.renderer.fontMetrics(a.options.itemStyle.fontSize).h,h=a.options.layout===\"horizontal\",j;j=n(a.options.rectangleLength,200);h?(e=-(c/2),f=0):(e=-j+a.baseline-c/2,f=d+i);b.fromText=this.chart.renderer.text(b.fromLabel,\nf,e).attr({zIndex:2}).add(b.legendGroup);f=b.fromText.getBBox();b.legendSymbol=this.chart.renderer.rect(h?f.x+f.width+c:f.x-i-c,f.y,h?j:i,h?i:j,2).attr({zIndex:1}).add(b.legendGroup);j=b.legendSymbol.getBBox();b.toText=this.chart.renderer.text(b.toLabel,j.x+j.width+c,h?e:j.y+j.height-c).attr({zIndex:2}).add(b.legendGroup);e=b.toText.getBBox();h?(a.offsetWidth=f.width+j.width+e.width+c*2+d,a.itemY=i+d):(a.offsetWidth=Math.max(f.width,e.width)+c+j.width+d,a.itemY=j.height+d,a.itemX=c)},getBox:function(a){var b=\nNumber.MIN_VALUE,c=Number.MAX_VALUE,d=Number.MIN_VALUE,e=Number.MAX_VALUE;l(a||this.options.data,function(a){for(var i=a.path,h=i.length,j=!1,g=Number.MIN_VALUE,m=Number.MAX_VALUE,k=Number.MIN_VALUE,l=Number.MAX_VALUE;h--;)typeof i[h]===\"number\"&&!isNaN(i[h])&&(j?(g=Math.max(g,i[h]),m=Math.min(m,i[h])):(k=Math.max(k,i[h]),l=Math.min(l,i[h])),j=!j);a._maxX=g;a._minX=m;a._maxY=k;a._minY=l;b=Math.max(b,g);c=Math.min(c,m);d=Math.max(d,k);e=Math.min(e,l)});this.minY=e;this.maxY=d;this.minX=c;this.maxX=\nb},translatePath:function(a){var b=!1,c=this.xAxis,d=this.yAxis,e,a=[].concat(a);for(e=a.length;e--;)typeof a[e]===\"number\"&&(a[e]=b?Math.round(c.translate(a[e])):Math.round(d.len-d.translate(a[e])),b=!b);return a},setData:function(){g.Series.prototype.setData.apply(this,arguments);this.getBox()},translate:function(){var a=this,b=Number.MAX_VALUE,c=Number.MIN_VALUE;a.generatePoints();l(a.data,function(d){d.shapeType=\"path\";d.shapeArgs={d:a.translatePath(d.path)};if(typeof d.y===\"number\")if(d.y>c)c=\nd.y;else if(d.y<b)b=d.y});a.translateColors(b,c)},translateColors:function(a,b){var c=this.options,d=c.valueRanges,e=c.colorRange,f=this.colorKey,i,h;e&&(i=u(e.from),h=u(e.to));l(this.data,function(g){var k=g[f],m,l,n;if(d)for(n=d.length;n--;){if(m=d[n],i=m.from,h=m.to,(i===void 0||k>=i)&&(h===void 0||k<=h)){l=m.color;break}}else e&&k!==void 0&&(m=1-(b-k)/(b-a),l=k===null?c.nullColor:x(i,h,m));if(l)g.color=null,g.options.color=l})},drawGraph:w,drawDataLabels:w,drawPoints:function(){var a=this.xAxis,\nb=this.yAxis,c=this.colorKey;l(this.data,function(a){a.plotY=1;if(a[c]===null)a[c]=0,a.isNull=!0});k.column.prototype.drawPoints.apply(this);l(this.data,function(d){var e=d.dataLabels,f=a.toPixels(d._minX,!0),g=a.toPixels(d._maxX,!0),h=b.toPixels(d._minY,!0),j=b.toPixels(d._maxY,!0);d.plotX=Math.round(f+(g-f)*n(e&&e.anchorX,0.5));d.plotY=Math.round(h+(j-h)*n(e&&e.anchorY,0.5));d.isNull&&(d[c]=null)});g.Series.prototype.drawDataLabels.call(this)},animateDrilldown:function(a){var b=this.chart.plotBox,\nc=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],d=c.bBox,e=this.chart.options.drilldown.animation;if(!a)a=Math.min(d.width/b.width,d.height/b.height),c.shapeArgs={scaleX:a,scaleY:a,translateX:d.x,translateY:d.y},l(this.points,function(a){a.graphic.attr(c.shapeArgs).animate({scaleX:1,scaleY:1,translateX:0,translateY:0},e)}),delete this.animate},animateDrillupFrom:function(a){k.column.prototype.animateDrillupFrom.call(this,a)},animateDrillupTo:function(a){k.column.prototype.animateDrillupTo.call(this,\na)}});q.mapline=p(q.map,{lineWidth:1,backgroundColor:\"none\"});k.mapline=g.extendClass(k.map,{type:\"mapline\",pointAttrToOptions:{stroke:\"color\",\"stroke-width\":\"lineWidth\",fill:\"backgroundColor\"},drawLegendSymbol:k.line.prototype.drawLegendSymbol});q.mappoint=p(q.scatter,{dataLabels:{enabled:!0,format:\"{point.name}\",color:\"black\",style:{textShadow:\"0 0 5px white\"}}});k.mappoint=g.extendClass(k.scatter,{type:\"mappoint\"});g.Map=function(a,b){var c={endOnTick:!1,gridLineWidth:0,labels:{enabled:!1},lineWidth:0,\nminPadding:0,maxPadding:0,startOnTick:!1,tickWidth:0,title:null},d;d=a.series;a.series=null;a=p({chart:{type:\"map\",panning:\"xy\"},xAxis:c,yAxis:p(c,{reversed:!0})},a,{chart:{inverted:!1}});a.series=d;return new g.Chart(a,b)}})(Highcharts);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/map.src.js",
    "content": "/**\n * @license Map plugin v0.1 for Highcharts\n *\n * (c) 2011-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n/* \n * See www.highcharts.com/studies/world-map.htm for use case.\n *\n * To do:\n * - Optimize long variable names and alias adapter methods and Highcharts namespace variables\n * - Zoom and pan GUI\n */\n(function (Highcharts) {\n\tvar UNDEFINED,\n\t\tAxis = Highcharts.Axis,\n\t\tChart = Highcharts.Chart,\n\t\tPoint = Highcharts.Point,\n\t\tPointer = Highcharts.Pointer,\n\t\teach = Highcharts.each,\n\t\textend = Highcharts.extend,\n\t\tmerge = Highcharts.merge,\n\t\tpick = Highcharts.pick,\n\t\tnumberFormat = Highcharts.numberFormat,\n\t\tdefaultOptions = Highcharts.getOptions(),\n\t\tseriesTypes = Highcharts.seriesTypes,\n\t\tplotOptions = defaultOptions.plotOptions,\n\t\twrap = Highcharts.wrap,\n\t\tColor = Highcharts.Color,\n\t\tnoop = function () {};\n\n\t\n\n\t/*\n\t * Return an intermediate color between two colors, according to pos where 0\n\t * is the from color and 1 is the to color\n\t */\n\tfunction tweenColors(from, to, pos) {\n\t\tvar i = 4,\n\t\t\trgba = [];\n\n\t\twhile (i--) {\n\t\t\trgba[i] = Math.round(\n\t\t\t\tto.rgba[i] + (from.rgba[i] - to.rgba[i]) * (1 - pos)\n\t\t\t);\n\t\t}\n\t\treturn 'rgba(' + rgba.join(',') + ')';\n\t}\n\n\t// Set the default map navigation options\n\tdefaultOptions.mapNavigation = {\n\t\tbuttonOptions: {\n\t\t\talign: 'right',\n\t\t\tverticalAlign: 'bottom',\n\t\t\tx: 0,\n\t\t\twidth: 18,\n\t\t\theight: 18,\n\t\t\tstyle: {\n\t\t\t\tfontSize: '15px',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\ttextAlign: 'center'\n\t\t\t}\n\t\t},\n\t\tbuttons: {\n\t\t\tzoomIn: {\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.mapZoom(0.5);\n\t\t\t\t},\n\t\t\t\ttext: '+',\n\t\t\t\ty: -32\n\t\t\t},\n\t\t\tzoomOut: {\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.mapZoom(2);\n\t\t\t\t},\n\t\t\t\ttext: '-',\n\t\t\t\ty: 0\n\t\t\t}\n\t\t}\n\t\t// enableButtons: false,\n\t\t// enableTouchZoom: false,\n\t\t// zoomOnDoubleClick: false,\n\t\t// zoomOnMouseWheel: false\n\n\t};\n\t\n\t/**\n\t * Utility for reading SVG paths directly.\n\t */\n\tHighcharts.splitPath = function (path) {\n\t\tvar i;\n\n\t\t// Move letters apart\n\t\tpath = path.replace(/([A-Za-z])/g, ' $1 ');\n\t\t// Trim\n\t\tpath = path.replace(/^\\s*/, \"\").replace(/\\s*$/, \"\");\n\t\t\n\t\t// Split on spaces and commas\n\t\tpath = path.split(/[ ,]+/);\n\t\t\n\t\t// Parse numbers\n\t\tfor (i = 0; i < path.length; i++) {\n\t\t\tif (!/[a-zA-Z]/.test(path[i])) {\n\t\t\t\tpath[i] = parseFloat(path[i]);\n\t\t\t}\n\t\t}\n\t\treturn path;\n\t};\n\n\t// A placeholder for map definitions\n\tHighcharts.maps = {};\n\t\n\t/**\n\t * Override to use the extreme coordinates from the SVG shape, not the\n\t * data values\n\t */\n\twrap(Axis.prototype, 'getSeriesExtremes', function (proceed) {\n\t\tvar isXAxis = this.isXAxis,\n\t\t\tdataMin,\n\t\t\tdataMax,\n\t\t\txData = [];\n\n\t\t// Remove the xData array and cache it locally so that the proceed method doesn't use it\n\t\teach(this.series, function (series, i) {\n\t\t\tif (series.useMapGeometry) {\n\t\t\t\txData[i] = series.xData;\n\t\t\t\tseries.xData = [];\n\t\t\t}\n\t\t});\n\n\t\t// Call base to reach normal cartesian series (like mappoint)\n\t\tproceed.call(this);\n\n\t\t// Run extremes logic for map and mapline\n\t\tdataMin = pick(this.dataMin, Number.MAX_VALUE);\n\t\tdataMax = pick(this.dataMax, Number.MIN_VALUE);\n\t\teach(this.series, function (series, i) {\n\t\t\tif (series.useMapGeometry) {\n\t\t\t\tdataMin = Math.min(dataMin, series[isXAxis ? 'minX' : 'minY']);\n\t\t\t\tdataMax = Math.max(dataMax, series[isXAxis ? 'maxX' : 'maxY']);\n\t\t\t\tseries.xData = xData[i]; // Reset xData array\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.dataMin = dataMin;\n\t\tthis.dataMax = dataMax;\n\t});\n\t\n\t/**\n\t * Override axis translation to make sure the aspect ratio is always kept\n\t */\n\twrap(Axis.prototype, 'setAxisTranslation', function (proceed) {\n\t\tvar chart = this.chart,\n\t\t\tmapRatio,\n\t\t\tplotRatio = chart.plotWidth / chart.plotHeight,\n\t\t\tisXAxis = this.isXAxis,\n\t\t\tadjustedAxisLength,\n\t\t\txAxis = chart.xAxis[0],\n\t\t\tpadAxis;\n\t\t\n\t\t// Run the parent method\n\t\tproceed.call(this);\n\t\t\n\t\t// On Y axis, handle both\n\t\tif (chart.options.chart.type === 'map' && !isXAxis && xAxis.transA !== UNDEFINED) {\n\t\t\t\n\t\t\t// Use the same translation for both axes\n\t\t\tthis.transA = xAxis.transA = Math.min(this.transA, xAxis.transA);\n\t\t\t\n\t\t\tmapRatio = (xAxis.max - xAxis.min) / (this.max - this.min);\n\t\t\t\n\t\t\t// What axis to pad to put the map in the middle\n\t\t\tpadAxis = mapRatio > plotRatio ? this : xAxis;\n\t\t\t\n\t\t\t// Pad it\n\t\t\tadjustedAxisLength = (padAxis.max - padAxis.min) * padAxis.transA;\n\t\t\tpadAxis.minPixelPadding = (padAxis.len - adjustedAxisLength) / 2;\n\t\t}\n\t});\n\n\n\t//--- Start zooming and panning features\n\n\twrap(Chart.prototype, 'render', function (proceed) {\n\t\tvar chart = this,\n\t\t\tmapNavigation = chart.options.mapNavigation;\n\n\t\tproceed.call(chart);\n\n\t\t// Render the plus and minus buttons\n\t\tchart.renderMapNavigation();\n\n\t\t// Add the double click event\n\t\tif (mapNavigation.zoomOnDoubleClick) {\n\t\t\tHighcharts.addEvent(chart.container, 'dblclick', function (e) {\n\t\t\t\tchart.pointer.onContainerDblClick(e);\n\t\t\t});\n\t\t}\n\n\t\t// Add the mousewheel event\n\t\tif (mapNavigation.zoomOnMouseWheel) {\n\t\t\tHighcharts.addEvent(chart.container, document.onmousewheel === undefined ? 'DOMMouseScroll' : 'mousewheel', function (e) {\n\t\t\t\tchart.pointer.onContainerMouseWheel(e);\n\t\t\t});\n\t\t}\n\t});\n\n\t// Extend the Pointer\n\textend(Pointer.prototype, {\n\n\t\t/**\n\t\t * The event handler for the doubleclick event\n\t\t */\n\t\tonContainerDblClick: function (e) {\n\t\t\tvar chart = this.chart;\n\n\t\t\te = this.normalize(e);\n\n\t\t\tif (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\t\t\t\tchart.mapZoom(\n\t\t\t\t\t0.5,\n\t\t\t\t\tchart.xAxis[0].toValue(e.chartX),\n\t\t\t\t\tchart.yAxis[0].toValue(e.chartY)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The event handler for the mouse scroll event\n\t\t */\n\t\tonContainerMouseWheel: function (e) {\n\t\t\tvar chart = this.chart,\n\t\t\t\tdelta;\n\n\t\t\te = this.normalize(e);\n\n\t\t\t// Firefox uses e.detail, WebKit and IE uses wheelDelta\n\t\t\tdelta = e.detail || -(e.wheelDelta / 120);\n\t\t\tif (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\t\t\t\tchart.mapZoom(\n\t\t\t\t\tdelta > 0 ? 2 : 0.5,\n\t\t\t\t\tchart.xAxis[0].toValue(e.chartX),\n\t\t\t\t\tchart.yAxis[0].toValue(e.chartY)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\t// Implement the pinchType option\n\twrap(Pointer.prototype, 'init', function (proceed, chart, options) {\n\n\t\tproceed.call(this, chart, options);\n\n\t\t// Pinch status\n\t\tif (options.mapNavigation.enableTouchZoom) {\n\t\t\tthis.pinchX = this.pinchHor = \n\t\t\t\tthis.pinchY = this.pinchVert = true;\n\t\t}\n\t});\n\n\t// Add events to the Chart object itself\n\textend(Chart.prototype, {\n\t\trenderMapNavigation: function () {\n\t\t\tvar chart = this,\n\t\t\t\toptions = this.options.mapNavigation,\n\t\t\t\tbuttons = options.buttons,\n\t\t\t\tn,\n\t\t\t\tbutton,\n\t\t\t\tbuttonOptions,\n\t\t\t\touterHandler = function () { \n\t\t\t\t\tthis.handler.call(chart); \n\t\t\t\t};\n\n\t\t\tif (options.enableButtons) {\n\t\t\t\tfor (n in buttons) {\n\t\t\t\t\tif (buttons.hasOwnProperty(n)) {\n\t\t\t\t\t\tbuttonOptions = merge(options.buttonOptions, buttons[n]);\n\n\t\t\t\t\t\tbutton = chart.renderer.button(buttonOptions.text, 0, 0, outerHandler)\n\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\twidth: buttonOptions.width,\n\t\t\t\t\t\t\t\theight: buttonOptions.height\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.css(buttonOptions.style)\n\t\t\t\t\t\t\t.add();\n\t\t\t\t\t\tbutton.handler = buttonOptions.onclick;\n\t\t\t\t\t\tbutton.align(extend(buttonOptions, { width: button.width, height: button.height }), null, 'spacingBox');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fit an inner box to an outer. If the inner box overflows left or right, align it to the sides of the\n\t\t * outer. If it overflows both sides, fit it within the outer. This is a pattern that occurs more places\n\t\t * in Highcharts, perhaps it should be elevated to a common utility function.\n\t\t */\n\t\tfitToBox: function (inner, outer) {\n\t\t\teach([['x', 'width'], ['y', 'height']], function (dim) {\n\t\t\t\tvar pos = dim[0],\n\t\t\t\t\tsize = dim[1];\n\t\t\t\tif (inner[pos] + inner[size] > outer[pos] + outer[size]) { // right overflow\n\t\t\t\t\tif (inner[size] > outer[size]) { // the general size is greater, fit fully to outer\n\t\t\t\t\t\tinner[size] = outer[size];\n\t\t\t\t\t\tinner[pos] = outer[pos];\n\t\t\t\t\t} else { // align right\n\t\t\t\t\t\tinner[pos] = outer[pos] + outer[size] - inner[size];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (inner[size] > outer[size]) {\n\t\t\t\t\tinner[size] = outer[size];\n\t\t\t\t}\n\t\t\t\tif (inner[pos] < outer[pos]) {\n\t\t\t\t\tinner[pos] = outer[pos];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\n\t\t\treturn inner;\n\t\t},\n\n\t\t/**\n\t\t * Zoom the map in or out by a certain amount. Less than 1 zooms in, greater than 1 zooms out.\n\t\t */\n\t\tmapZoom: function (howMuch, centerXArg, centerYArg) {\n\n\t\t\tif (this.isMapZooming) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar chart = this,\n\t\t\t\txAxis = chart.xAxis[0],\n\t\t\t\txRange = xAxis.max - xAxis.min,\n\t\t\t\tcenterX = pick(centerXArg, xAxis.min + xRange / 2),\n\t\t\t\tnewXRange = xRange * howMuch,\n\t\t\t\tyAxis = chart.yAxis[0],\n\t\t\t\tyRange = yAxis.max - yAxis.min,\n\t\t\t\tcenterY = pick(centerYArg, yAxis.min + yRange / 2),\n\t\t\t\tnewYRange = yRange * howMuch,\n\t\t\t\tnewXMin = centerX - newXRange / 2,\n\t\t\t\tnewYMin = centerY - newYRange / 2,\n\t\t\t\tanimation = pick(chart.options.chart.animation, true),\n\t\t\t\tdelay,\n\t\t\t\tnewExt = chart.fitToBox({\n\t\t\t\t\tx: newXMin,\n\t\t\t\t\ty: newYMin,\n\t\t\t\t\twidth: newXRange,\n\t\t\t\t\theight: newYRange\n\t\t\t\t}, {\n\t\t\t\t\tx: xAxis.dataMin,\n\t\t\t\t\ty: yAxis.dataMin,\n\t\t\t\t\twidth: xAxis.dataMax - xAxis.dataMin,\n\t\t\t\t\theight: yAxis.dataMax - yAxis.dataMin\n\t\t\t\t});\n\n\t\t\txAxis.setExtremes(newExt.x, newExt.x + newExt.width, false);\n\t\t\tyAxis.setExtremes(newExt.y, newExt.y + newExt.height, false);\n\n\t\t\t// Prevent zooming until this one is finished animating\n\t\t\tdelay = animation ? animation.duration || 500 : 0;\n\t\t\tif (delay) {\n\t\t\t\tchart.isMapZooming = true;\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tchart.isMapZooming = false;\n\t\t\t\t}, delay);\n\t\t\t}\n\n\t\t\tchart.redraw();\n\t\t}\n\t});\n\t\n\t/**\n\t * Extend the default options with map options\n\t */\n\tplotOptions.map = merge(plotOptions.scatter, {\n\t\tanimation: false, // makes the complex shapes slow\n\t\tnullColor: '#F8F8F8',\n\t\tborderColor: 'silver',\n\t\tborderWidth: 1,\n\t\tmarker: null,\n\t\tstickyTracking: false,\n\t\tdataLabels: {\n\t\t\tverticalAlign: 'middle'\n\t\t},\n\t\tturboThreshold: 0,\n\t\ttooltip: {\n\t\t\tfollowPointer: true,\n\t\t\tpointFormat: '{point.name}: {point.y}<br/>'\n\t\t},\n\t\tstates: {\n\t\t\tnormal: {\n\t\t\t\tanimation: true\n\t\t\t}\n\t\t}\n\t});\n\n\tvar MapAreaPoint = Highcharts.extendClass(Point, {\n\t\t/**\n\t\t * Extend the Point object to split paths\n\t\t */\n\t\tapplyOptions: function (options, x) {\n\n\t\t\tvar point = Point.prototype.applyOptions.call(this, options, x);\n\n\t\t\tif (point.path && typeof point.path === 'string') {\n\t\t\t\tpoint.path = point.options.path = Highcharts.splitPath(point.path);\n\t\t\t}\n\n\t\t\treturn point;\n\t\t},\n\t\t/**\n\t\t * Stop the fade-out \n\t\t */\n\t\tonMouseOver: function () {\n\t\t\tclearTimeout(this.colorInterval);\n\t\t\tPoint.prototype.onMouseOver.call(this);\n\t\t},\n\t\t/**\n\t\t * Custom animation for tweening out the colors. Animation reduces blinking when hovering\n\t\t * over islands and coast lines. We run a custom implementation of animation becuase we\n\t\t * need to be able to run this independently from other animations like zoom redraw. Also,\n\t\t * adding color animation to the adapters would introduce almost the same amount of code.\n\t\t */\n\t\tonMouseOut: function () {\n\t\t\tvar point = this,\n\t\t\t\tstart = +new Date(),\n\t\t\t\tnormalColor = Color(point.options.color),\n\t\t\t\thoverColor = Color(point.pointAttr.hover.fill),\n\t\t\t\tanimation = point.series.options.states.normal.animation,\n\t\t\t\tduration = animation && (animation.duration || 500);\n\n\t\t\tif (duration && normalColor.rgba.length === 4 && hoverColor.rgba.length === 4) {\n\t\t\t\tdelete point.pointAttr[''].fill; // avoid resetting it in Point.setState\n\n\t\t\t\tclearTimeout(point.colorInterval);\n\t\t\t\tpoint.colorInterval = setInterval(function () {\n\t\t\t\t\tvar pos = (new Date() - start) / duration,\n\t\t\t\t\t\tgraphic = point.graphic;\n\t\t\t\t\tif (pos > 1) {\n\t\t\t\t\t\tpos = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (graphic) {\n\t\t\t\t\t\tgraphic.attr('fill', tweenColors(hoverColor, normalColor, pos));\n\t\t\t\t\t}\n\t\t\t\t\tif (pos >= 1) {\n\t\t\t\t\t\tclearTimeout(point.colorInterval);\n\t\t\t\t\t}\n\t\t\t\t}, 13);\n\t\t\t}\n\t\t\tPoint.prototype.onMouseOut.call(point);\n\t\t}\n\t});\n\n\t/**\n\t * Add the series type\n\t */\n\tseriesTypes.map = Highcharts.extendClass(seriesTypes.scatter, {\n\t\ttype: 'map',\n\t\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\t\tstroke: 'borderColor',\n\t\t\t'stroke-width': 'borderWidth',\n\t\t\tfill: 'color'\n\t\t},\n\t\tcolorKey: 'y',\n\t\tpointClass: MapAreaPoint,\n\t\ttrackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'],\n\t\tgetSymbol: noop,\n\t\tsupportsDrilldown: true,\n\t\tgetExtremesFromAll: true,\n\t\tuseMapGeometry: true, // get axis extremes from paths, not values\n\t\tinit: function (chart) {\n\t\t\tvar series = this,\n\t\t\t\tvalueDecimals = chart.options.legend.valueDecimals,\n\t\t\t\tlegendItems = [],\n\t\t\t\tname,\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t\tfromLabel,\n\t\t\t\ttoLabel,\n\t\t\t\tcolorRange,\n\t\t\t\tvalueRanges,\n\t\t\t\tgradientColor,\n\t\t\t\tgrad,\n\t\t\t\ttmpLabel,\n\t\t\t\thorizontal = chart.options.legend.layout === 'horizontal';\n\n\t\t\t\n\t\t\tHighcharts.Series.prototype.init.apply(this, arguments);\n\t\t\tcolorRange = series.options.colorRange;\n\t\t\tvalueRanges = series.options.valueRanges;\n\n\t\t\tif (valueRanges) {\n\t\t\t\teach(valueRanges, function (range) {\n\t\t\t\t\tfrom = range.from;\n\t\t\t\t\tto = range.to;\n\t\t\t\t\t\n\t\t\t\t\t// Assemble the default name. This can be overridden by legend.options.labelFormatter\n\t\t\t\t\tname = '';\n\t\t\t\t\tif (from === UNDEFINED) {\n\t\t\t\t\t\tname = '< ';\n\t\t\t\t\t} else if (to === UNDEFINED) {\n\t\t\t\t\t\tname = '> ';\n\t\t\t\t\t}\n\t\t\t\t\tif (from !== UNDEFINED) {\n\t\t\t\t\t\tname += numberFormat(from, valueDecimals);\n\t\t\t\t\t}\n\t\t\t\t\tif (from !== UNDEFINED && to !== UNDEFINED) {\n\t\t\t\t\t\tname += ' - ';\n\t\t\t\t\t}\n\t\t\t\t\tif (to !== UNDEFINED) {\n\t\t\t\t\t\tname += numberFormat(to, valueDecimals);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Add a mock object to the legend items\n\t\t\t\t\tlegendItems.push(Highcharts.extend({\n\t\t\t\t\t\tchart: series.chart,\n\t\t\t\t\t\tname: name,\n\t\t\t\t\t\toptions: {},\n\t\t\t\t\t\tdrawLegendSymbol: seriesTypes.area.prototype.drawLegendSymbol,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tsetState: function () {},\n\t\t\t\t\t\tsetVisible: function () {}\n\t\t\t\t\t}, range));\n\t\t\t\t});\n\t\t\t\tseries.legendItems = legendItems;\n\n\t\t\t} else if (colorRange) {\n\n\t\t\t\tfrom = colorRange.from;\n\t\t\t\tto = colorRange.to;\n\t\t\t\tfromLabel = colorRange.fromLabel;\n\t\t\t\ttoLabel = colorRange.toLabel;\n\n\t\t\t\t// Flips linearGradient variables and label text.\n\t\t\t\tgrad = horizontal ? [0, 0, 1, 0] : [0, 1, 0, 0]; \n\t\t\t\tif (!horizontal) {\n\t\t\t\t\ttmpLabel = fromLabel;\n\t\t\t\t\tfromLabel = toLabel;\n\t\t\t\t\ttoLabel = tmpLabel;\n\t\t\t\t} \n\n\t\t\t\t// Creates color gradient.\n\t\t\t\tgradientColor = {\n\t\t\t\t\tlinearGradient: { x1: grad[0], y1: grad[1], x2: grad[2], y2: grad[3] },\n\t\t\t\t\tstops: \n\t\t\t\t\t[\n\t\t\t\t\t\t[0, from],\n\t\t\t\t\t\t[1, to]\n\t\t\t\t\t]\n\t\t\t\t};\n\n\t\t\t\t// Add a mock object to the legend items.\n\t\t\t\tlegendItems = [{\n\t\t\t\t\tchart: series.chart,\n\t\t\t\t\toptions: {},\n\t\t\t\t\tfromLabel: fromLabel,\n\t\t\t\t\ttoLabel: toLabel,\n\t\t\t\t\tcolor: gradientColor,\n\t\t\t\t\tdrawLegendSymbol: this.drawLegendSymbolGradient,\n\t\t\t\t\tvisible: true,\n\t\t\t\t\tsetState: function () {},\n\t\t\t\t\tsetVisible: function () {}\n\t\t\t\t}];\n\n\t\t\t\tseries.legendItems = legendItems;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * If neither valueRanges nor colorRanges are defined, use basic area symbol.\n\t\t */\n\t\tdrawLegendSymbol: seriesTypes.area.prototype.drawLegendSymbol,\n\n\t\t/**\n\t\t * Gets the series' symbol in the legend and extended legend with more information.\n\t\t * \n\t\t * @param {Object} legend The legend object\n\t\t * @param {Object} item The series (this) or point\n\t\t */\n\t\tdrawLegendSymbolGradient: function (legend, item) {\n\t\t\tvar spacing = legend.options.symbolPadding,\n\t\t\t\tpadding = pick(legend.options.padding, 8),\n\t\t\t\tpositionY,\n\t\t\t\tpositionX,\n\t\t\t\tgradientSize = this.chart.renderer.fontMetrics(legend.options.itemStyle.fontSize).h,\n\t\t\t\thorizontal = legend.options.layout === 'horizontal',\n\t\t\t\tbox1,\n\t\t\t\tbox2,\n\t\t\t\tbox3,\n\t\t\t\trectangleLength = pick(legend.options.rectangleLength, 200);\n\n\t\t\t// Set local variables based on option.\n\t\t\tif (horizontal) {\n\t\t\t\tpositionY = -(spacing / 2);\n\t\t\t\tpositionX = 0;\n\t\t\t} else {\n\t\t\t\tpositionY = -rectangleLength + legend.baseline - (spacing / 2);\n\t\t\t\tpositionX = padding + gradientSize;\n\t\t\t}\n\n\t\t\t// Creates the from text.\n\t\t\titem.fromText = this.chart.renderer.text(\n\t\t\t\t\titem.fromLabel,\t// Text.\n\t\t\t\t\tpositionX,\t\t// Lower left x.\n\t\t\t\t\tpositionY\t\t// Lower left y.\n\t\t\t\t).attr({\n\t\t\t\t\tzIndex: 2\n\t\t\t\t}).add(item.legendGroup);\n\t\t\tbox1 = item.fromText.getBBox();\n\n\t\t\t// Creates legend symbol.\n\t\t\t// Ternary changes variables based on option.\n\t\t\titem.legendSymbol = this.chart.renderer.rect(\n\t\t\t\thorizontal ? box1.x + box1.width + spacing : box1.x - gradientSize - spacing,\t\t// Upper left x.\n\t\t\t\tbox1.y,\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Upper left y.\n\t\t\t\thorizontal ? rectangleLength : gradientSize,\t\t\t\t\t\t\t\t\t\t\t// Width.\n\t\t\t\thorizontal ? gradientSize : rectangleLength,\t\t\t\t\t\t\t\t\t\t// Height.\n\t\t\t\t2\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Corner radius.\n\t\t\t).attr({\n\t\t\t\tzIndex: 1\n\t\t\t}).add(item.legendGroup);\n\t\t\tbox2 = item.legendSymbol.getBBox();\n\n\t\t\t// Creates the to text.\n\t\t\t// Vertical coordinate changed based on option.\n\t\t\titem.toText = this.chart.renderer.text(\n\t\t\t\t\titem.toLabel,\n\t\t\t\t\tbox2.x + box2.width + spacing,\n\t\t\t\t\thorizontal ? positionY : box2.y + box2.height - spacing\n\t\t\t\t).attr({\n\t\t\t\t\tzIndex: 2\n\t\t\t\t}).add(item.legendGroup);\n\t\t\tbox3 = item.toText.getBBox();\n\n\t\t\t// Changes legend box settings based on option.\n\t\t\tif (horizontal) {\n\t\t\t\tlegend.offsetWidth = box1.width + box2.width + box3.width + (spacing * 2) + padding;\n\t\t\t\tlegend.itemY = gradientSize + padding;\n\t\t\t} else {\n\t\t\t\tlegend.offsetWidth = Math.max(box1.width, box3.width) + (spacing) + box2.width + padding;\n\t\t\t\tlegend.itemY = box2.height + padding;\n\t\t\t\tlegend.itemX = spacing;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get the bounding box of all paths in the map combined.\n\t\t */\n\t\tgetBox: function (paths) {\n\t\t\tvar maxX = Number.MIN_VALUE, \n\t\t\t\tminX =  Number.MAX_VALUE, \n\t\t\t\tmaxY = Number.MIN_VALUE, \n\t\t\t\tminY =  Number.MAX_VALUE;\n\t\t\t\n\t\t\t\n\t\t\t// Find the bounding box\n\t\t\teach(paths || this.options.data, function (point) {\n\t\t\t\tvar path = point.path,\n\t\t\t\t\ti = path.length,\n\t\t\t\t\teven = false, // while loop reads from the end\n\t\t\t\t\tpointMaxX = Number.MIN_VALUE, \n\t\t\t\t\tpointMinX =  Number.MAX_VALUE, \n\t\t\t\t\tpointMaxY = Number.MIN_VALUE, \n\t\t\t\t\tpointMinY =  Number.MAX_VALUE;\n\t\t\t\t\t\n\t\t\t\twhile (i--) {\n\t\t\t\t\tif (typeof path[i] === 'number' && !isNaN(path[i])) {\n\t\t\t\t\t\tif (even) { // even = x\n\t\t\t\t\t\t\tpointMaxX = Math.max(pointMaxX, path[i]);\n\t\t\t\t\t\t\tpointMinX = Math.min(pointMinX, path[i]);\n\t\t\t\t\t\t} else { // odd = Y\n\t\t\t\t\t\t\tpointMaxY = Math.max(pointMaxY, path[i]);\n\t\t\t\t\t\t\tpointMinY = Math.min(pointMinY, path[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\teven = !even;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Cache point bounding box for use to position data labels\n\t\t\t\tpoint._maxX = pointMaxX;\n\t\t\t\tpoint._minX = pointMinX;\n\t\t\t\tpoint._maxY = pointMaxY;\n\t\t\t\tpoint._minY = pointMinY;\n\n\t\t\t\tmaxX = Math.max(maxX, pointMaxX);\n\t\t\t\tminX = Math.min(minX, pointMinX);\n\t\t\t\tmaxY = Math.max(maxY, pointMaxY);\n\t\t\t\tminY = Math.min(minY, pointMinY);\n\t\t\t});\n\t\t\tthis.minY = minY;\n\t\t\tthis.maxY = maxY;\n\t\t\tthis.minX = minX;\n\t\t\tthis.maxX = maxX;\n\t\t\t\n\t\t},\n\t\t\n\t\t\n\t\t\n\t\t/**\n\t\t * Translate the path so that it automatically fits into the plot area box\n\t\t * @param {Object} path\n\t\t */\n\t\ttranslatePath: function (path) {\n\t\t\t\n\t\t\tvar series = this,\n\t\t\t\teven = false, // while loop reads from the end\n\t\t\t\txAxis = series.xAxis,\n\t\t\t\tyAxis = series.yAxis,\n\t\t\t\ti;\n\t\t\t\t\n\t\t\t// Preserve the original\n\t\t\tpath = [].concat(path);\n\t\t\t\t\n\t\t\t// Do the translation\n\t\t\ti = path.length;\n\t\t\twhile (i--) {\n\t\t\t\tif (typeof path[i] === 'number') {\n\t\t\t\t\tif (even) { // even = x\n\t\t\t\t\t\tpath[i] = Math.round(xAxis.translate(path[i]));\n\t\t\t\t\t} else { // odd = Y\n\t\t\t\t\t\tpath[i] = Math.round(yAxis.len - yAxis.translate(path[i]));\n\t\t\t\t\t}\n\t\t\t\t\teven = !even;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn path;\n\t\t},\n\t\t\n\t\tsetData: function () {\n\t\t\tHighcharts.Series.prototype.setData.apply(this, arguments);\n\t\t\tthis.getBox();\n\t\t},\n\t\t\n\t\t/**\n\t\t * Add the path option for data points. Find the max value for color calculation.\n\t\t */\n\t\ttranslate: function () {\n\t\t\tvar series = this,\n\t\t\t\tdataMin = Number.MAX_VALUE,\n\t\t\t\tdataMax = Number.MIN_VALUE;\n\t\n\t\t\tseries.generatePoints();\n\t\n\t\t\teach(series.data, function (point) {\n\t\t\t\t\n\t\t\t\tpoint.shapeType = 'path';\n\t\t\t\tpoint.shapeArgs = {\n\t\t\t\t\td: series.translatePath(point.path)\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// TODO: do point colors in drawPoints instead of point.init\n\t\t\t\tif (typeof point.y === 'number') {\n\t\t\t\t\tif (point.y > dataMax) {\n\t\t\t\t\t\tdataMax = point.y;\n\t\t\t\t\t} else if (point.y < dataMin) {\n\t\t\t\t\t\tdataMin = point.y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tseries.translateColors(dataMin, dataMax);\n\t\t},\n\t\t\n\t\t/**\n\t\t * In choropleth maps, the color is a result of the value, so this needs translation too\n\t\t */\n\t\ttranslateColors: function (dataMin, dataMax) {\n\t\t\t\n\t\t\tvar seriesOptions = this.options,\n\t\t\t\tvalueRanges = seriesOptions.valueRanges,\n\t\t\t\tcolorRange = seriesOptions.colorRange,\n\t\t\t\tcolorKey = this.colorKey,\n\t\t\t\tfrom,\n\t\t\t\tto;\n\n\t\t\tif (colorRange) {\n\t\t\t\tfrom = Color(colorRange.from);\n\t\t\t\tto = Color(colorRange.to);\n\t\t\t}\n\t\t\t\n\t\t\teach(this.data, function (point) {\n\t\t\t\tvar value = point[colorKey],\n\t\t\t\t\trange,\n\t\t\t\t\tcolor,\n\t\t\t\t\ti,\n\t\t\t\t\tpos;\n\n\t\t\t\tif (valueRanges) {\n\t\t\t\t\ti = valueRanges.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\trange = valueRanges[i];\n\t\t\t\t\t\tfrom = range.from;\n\t\t\t\t\t\tto = range.to;\n\t\t\t\t\t\tif ((from === UNDEFINED || value >= from) && (to === UNDEFINED || value <= to)) {\n\t\t\t\t\t\t\tcolor = range.color;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t} else if (colorRange && value !== undefined) {\n\n\t\t\t\t\tpos = 1 - ((dataMax - value) / (dataMax - dataMin));\n\t\t\t\t\tcolor = value === null ? seriesOptions.nullColor : tweenColors(from, to, pos);\n\t\t\t\t}\n\n\t\t\t\tif (color) {\n\t\t\t\t\tpoint.color = null; // reset from previous drilldowns, use of the same data options\n\t\t\t\t\tpoint.options.color = color;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t\n\t\tdrawGraph: noop,\n\t\t\n\t\t/**\n\t\t * We need the points' bounding boxes in order to draw the data labels, so \n\t\t * we skip it now and call if from drawPoints instead.\n\t\t */\n\t\tdrawDataLabels: noop,\n\t\t\n\t\t/** \n\t\t * Use the drawPoints method of column, that is able to handle simple shapeArgs.\n\t\t * Extend it by assigning the tooltip position.\n\t\t */\n\t\tdrawPoints: function () {\n\t\t\tvar series = this,\n\t\t\t\txAxis = series.xAxis,\n\t\t\t\tyAxis = series.yAxis,\n\t\t\t\tcolorKey = series.colorKey;\n\t\t\t\n\t\t\t// Make points pass test in drawing\n\t\t\teach(series.data, function (point) {\n\t\t\t\tpoint.plotY = 1; // pass null test in column.drawPoints\n\t\t\t\tif (point[colorKey] === null) {\n\t\t\t\t\tpoint[colorKey] = 0;\n\t\t\t\t\tpoint.isNull = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t// Draw them\n\t\t\tseriesTypes.column.prototype.drawPoints.apply(series);\n\t\t\t\n\t\t\teach(series.data, function (point) {\n\n\t\t\t\tvar dataLabels = point.dataLabels,\n\t\t\t\t\tminX = xAxis.toPixels(point._minX, true),\n\t\t\t\t\tmaxX = xAxis.toPixels(point._maxX, true),\n\t\t\t\t\tminY = yAxis.toPixels(point._minY, true),\n\t\t\t\t\tmaxY = yAxis.toPixels(point._maxY, true);\n\n\t\t\t\tpoint.plotX = Math.round(minX + (maxX - minX) * pick(dataLabels && dataLabels.anchorX, 0.5));\n\t\t\t\tpoint.plotY = Math.round(minY + (maxY - minY) * pick(dataLabels && dataLabels.anchorY, 0.5)); \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// Reset escaped null points\n\t\t\t\tif (point.isNull) {\n\t\t\t\t\tpoint[colorKey] = null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Now draw the data labels\n\t\t\tHighcharts.Series.prototype.drawDataLabels.call(series);\n\t\t\t\n\t\t},\n\n\t\t/**\n\t\t * Animate in the new series from the clicked point in the old series.\n\t\t * Depends on the drilldown.js module\n\t\t */\n\t\tanimateDrilldown: function (init) {\n\t\t\tvar toBox = this.chart.plotBox,\n\t\t\t\tlevel = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1],\n\t\t\t\tfromBox = level.bBox,\n\t\t\t\tanimationOptions = this.chart.options.drilldown.animation,\n\t\t\t\tscale;\n\t\t\t\t\n\t\t\tif (!init) {\n\n\t\t\t\tscale = Math.min(fromBox.width / toBox.width, fromBox.height / toBox.height);\n\t\t\t\tlevel.shapeArgs = {\n\t\t\t\t\tscaleX: scale,\n\t\t\t\t\tscaleY: scale,\n\t\t\t\t\ttranslateX: fromBox.x,\n\t\t\t\t\ttranslateY: fromBox.y\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// TODO: Animate this.group instead\n\t\t\t\teach(this.points, function (point) {\n\n\t\t\t\t\tpoint.graphic\n\t\t\t\t\t\t.attr(level.shapeArgs)\n\t\t\t\t\t\t.animate({\n\t\t\t\t\t\t\tscaleX: 1,\n\t\t\t\t\t\t\tscaleY: 1,\n\t\t\t\t\t\t\ttranslateX: 0,\n\t\t\t\t\t\t\ttranslateY: 0\n\t\t\t\t\t\t}, animationOptions);\n\n\t\t\t\t});\n\n\t\t\t\tdelete this.animate;\n\t\t\t}\n\t\t\t\n\t\t},\n\n\t\t/**\n\t\t * When drilling up, pull out the individual point graphics from the lower series\n\t\t * and animate them into the origin point in the upper series.\n\t\t */\n\t\tanimateDrillupFrom: function (level) {\n\t\t\tseriesTypes.column.prototype.animateDrillupFrom.call(this, level);\n\t\t},\n\n\n\t\t/**\n\t\t * When drilling up, keep the upper series invisible until the lower series has\n\t\t * moved into place\n\t\t */\n\t\tanimateDrillupTo: function (init) {\n\t\t\tseriesTypes.column.prototype.animateDrillupTo.call(this, init);\n\t\t}\n\t});\n\n\n\t// The mapline series type\n\tplotOptions.mapline = merge(plotOptions.map, {\n\t\tlineWidth: 1,\n\t\tbackgroundColor: 'none'\n\t});\n\tseriesTypes.mapline = Highcharts.extendClass(seriesTypes.map, {\n\t\ttype: 'mapline',\n\t\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\t\tstroke: 'color',\n\t\t\t'stroke-width': 'lineWidth',\n\t\t\tfill: 'backgroundColor'\n\t\t},\n\t\tdrawLegendSymbol: seriesTypes.line.prototype.drawLegendSymbol\n\t});\n\n\t// The mappoint series type\n\tplotOptions.mappoint = merge(plotOptions.scatter, {\n\t\tdataLabels: {\n\t\t\tenabled: true,\n\t\t\tformat: '{point.name}',\n\t\t\tcolor: 'black',\n\t\t\tstyle: {\n\t\t\t\ttextShadow: '0 0 5px white'\n\t\t\t}\n\t\t}\n\t});\n\tseriesTypes.mappoint = Highcharts.extendClass(seriesTypes.scatter, {\n\t\ttype: 'mappoint'\n\t});\n\t\n\n\t\n\t/**\n\t * A wrapper for Chart with all the default values for a Map\n\t */\n\tHighcharts.Map = function (options, callback) {\n\t\t\n\t\tvar hiddenAxis = {\n\t\t\t\tendOnTick: false,\n\t\t\t\tgridLineWidth: 0,\n\t\t\t\tlabels: {\n\t\t\t\t\tenabled: false\n\t\t\t\t},\n\t\t\t\tlineWidth: 0,\n\t\t\t\tminPadding: 0,\n\t\t\t\tmaxPadding: 0,\n\t\t\t\tstartOnTick: false,\n\t\t\t\ttickWidth: 0,\n\t\t\t\ttitle: null\n\t\t\t},\n\t\t\tseriesOptions;\n\t\t\n\t\t// Don't merge the data\n\t\tseriesOptions = options.series;\n\t\toptions.series = null;\n\t\t\n\t\toptions = merge({\n\t\t\tchart: {\n\t\t\t\ttype: 'map',\n\t\t\t\tpanning: 'xy'\n\t\t\t},\n\t\t\txAxis: hiddenAxis,\n\t\t\tyAxis: merge(hiddenAxis, { reversed: true })\t\n\t\t},\n\t\toptions, // user's options\n\t\n\t\t{ // forced options\n\t\t\tchart: {\n\t\t\t\tinverted: false\n\t\t\t}\n\t\t});\n\t\n\t\toptions.series = seriesOptions;\n\t\n\t\n\t\treturn new Highcharts.Chart(options, callback);\n\t};\n}(Highcharts));\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/no-data-to-display.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Plugin for displaying a message when there is no data visible in chart.\n\n (c) 2010-2013 Highsoft AS\n Author: Øystein Moseng\n\n License: www.highcharts.com/license\n*/\n(function(c){function f(){return!!this.points.length}function g(){this.hasData()?this.hideNoData():this.showNoData()}var d=c.seriesTypes,e=c.Chart.prototype,h=c.getOptions(),i=c.extend;i(h.lang,{noData:\"No data to display\"});h.noData={position:{x:0,y:0,align:\"center\",verticalAlign:\"middle\"},attr:{},style:{fontWeight:\"bold\",fontSize:\"12px\",color:\"#60606a\"}};d.pie.prototype.hasData=f;if(d.gauge)d.gauge.prototype.hasData=f;if(d.waterfall)d.waterfall.prototype.hasData=f;c.Series.prototype.hasData=function(){return this.dataMax!==\nvoid 0&&this.dataMin!==void 0};e.showNoData=function(a){var b=this.options,a=a||b.lang.noData,b=b.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(a,0,0,null,null,null,null,null,\"no-data\").attr(b.attr).css(b.style).add(),this.noDataLabel.align(i(this.noDataLabel.getBBox(),b.position),!1,\"plotBox\")};e.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};e.hasData=function(){for(var a=this.series,b=a.length;b--;)if(a[b].hasData()&&!a[b].options.isInternal)return!0;\nreturn!1};e.callbacks.push(function(a){c.addEvent(a,\"load\",g);c.addEvent(a,\"redraw\",g)})})(Highcharts);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/modules/no-data-to-display.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Plugin for displaying a message when there is no data visible in chart.\n *\n * (c) 2010-2013 Highsoft AS\n * Author: Øystein Moseng\n *\n * License: www.highcharts.com/license\n */\n\n(function (H) { // docs\n\t\n\tvar seriesTypes = H.seriesTypes,\n\t\tchartPrototype = H.Chart.prototype,\n\t\tdefaultOptions = H.getOptions(),\n\t\textend = H.extend;\n\n\t// Add language option\n\textend(defaultOptions.lang, {\n\t\tnoData: 'No data to display'\n\t});\n\t\n\t// Add default display options for message\n\tdefaultOptions.noData = {\n\t\tposition: {\n\t\t\tx: 0,\n\t\t\ty: 0,\t\t\t\n\t\t\talign: 'center',\n\t\t\tverticalAlign: 'middle'\n\t\t},\n\t\tattr: {\t\t\t\t\t\t\n\t\t},\n\t\tstyle: {\t\n\t\t\tfontWeight: 'bold',\t\t\n\t\t\tfontSize: '12px',\n\t\t\tcolor: '#60606a'\t\t\n\t\t}\n\t};\n\n\t/**\n\t * Define hasData functions for series. These return true if there are data points on this series within the plot area\n\t */\t\n\tfunction hasDataPie() {\n\t\treturn !!this.points.length; /* != 0 */\n\t}\n\n\tseriesTypes.pie.prototype.hasData = hasDataPie;\n\n\tif (seriesTypes.gauge) {\n\t\tseriesTypes.gauge.prototype.hasData = hasDataPie;\n\t}\n\n\tif (seriesTypes.waterfall) {\n\t\tseriesTypes.waterfall.prototype.hasData = hasDataPie;\n\t}\n\n\tH.Series.prototype.hasData = function () {\n\t\treturn this.dataMax !== undefined && this.dataMin !== undefined;\n\t};\n\t\n\t/**\n\t * Display a no-data message.\n\t *\n\t * @param {String} str An optional message to show in place of the default one \n\t */\n\tchartPrototype.showNoData = function (str) {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\ttext = str || options.lang.noData,\n\t\t\tnoDataOptions = options.noData;\n\n\t\tif (!chart.noDataLabel) {\n\t\t\tchart.noDataLabel = chart.renderer.label(text, 0, 0, null, null, null, null, null, 'no-data')\n\t\t\t\t.attr(noDataOptions.attr)\n\t\t\t\t.css(noDataOptions.style)\n\t\t\t\t.add();\n\t\t\tchart.noDataLabel.align(extend(chart.noDataLabel.getBBox(), noDataOptions.position), false, 'plotBox');\n\t\t}\n\t};\n\n\t/**\n\t * Hide no-data message\t\n\t */\t\n\tchartPrototype.hideNoData = function () {\n\t\tvar chart = this;\n\t\tif (chart.noDataLabel) {\n\t\t\tchart.noDataLabel = chart.noDataLabel.destroy();\n\t\t}\n\t};\n\n\t/**\n\t * Returns true if there are data points within the plot area now\n\t */\t\n\tchartPrototype.hasData = function () {\n\t\tvar chart = this,\n\t\t\tseries = chart.series,\n\t\t\ti = series.length;\n\n\t\twhile (i--) {\n\t\t\tif (series[i].hasData() && !series[i].options.isInternal) { \n\t\t\t\treturn true;\n\t\t\t}\t\n\t\t}\n\n\t\treturn false;\n\t};\n\n\t/**\n\t * Show no-data message if there is no data in sight. Otherwise, hide it.\n\t */\n\tfunction handleNoData() {\n\t\tvar chart = this;\n\t\tif (chart.hasData()) {\n\t\t\tchart.hideNoData();\n\t\t} else {\n\t\t\tchart.showNoData();\n\t\t}\n\t}\n\n\t/**\n\t * Add event listener to handle automatic display of no-data message\n\t */\n\tchartPrototype.callbacks.push(function (chart) {\n\t\tH.addEvent(chart, 'load', handleNoData);\n\t\tH.addEvent(chart, 'redraw', handleNoData);\n\t});\n\n}(Highcharts));\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/themes/dark-blue.js",
    "content": "/**\n * Dark blue theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(48, 48, 96)'],\n\t\t\t\t[1, 'rgb(0, 0, 0)']\n\t\t\t]\n\t\t},\n\t\tborderColor: '#000000',\n\t\tborderWidth: 2,\n\t\tclassName: 'dark-container',\n\t\tplotBackgroundColor: 'rgba(255, 255, 255, .1)',\n\t\tplotBorderColor: '#CCCCCC',\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tfont: 'bold 16px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#666666',\n\t\t\tfont: 'bold 12px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineColor: '#333333',\n\t\tgridLineWidth: 1,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\ttickColor: '#A0A0A0',\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\tgridLineColor: '#333333',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\tminorTickInterval: null,\n\t\ttickColor: '#A0A0A0',\n\t\ttickWidth: 1,\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\ttooltip: {\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.75)',\n\t\tstyle: {\n\t\t\tcolor: '#F0F0F0'\n\t\t}\n\t},\n\ttoolbar: {\n\t\titemStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\tplotOptions: {\n\t\tline: {\n\t\t\tdataLabels: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t},\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tspline: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tscatter: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tcandlestick: {\n\t\t\tlineColor: 'white'\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: '#A0A0A0'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#FFF'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#444'\n\t\t}\n\t},\n\tcredits: {\n\t\tstyle: {\n\t\t\tcolor: '#666'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\tsymbolStroke: '#DDDDDD',\n\t\t\thoverSymbolStroke: '#FFFFFF',\n\t\t\ttheme: {\n\t\t\t\tfill: {\n\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\tstops: [\n\t\t\t\t\t\t[0.4, '#606060'],\n\t\t\t\t\t\t[0.6, '#333333']\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tstroke: '#000000'\n\t\t\t}\n\t\t}\n\t},\n\n\t// scroll charts\n\trangeSelector: {\n\t\tbuttonTheme: {\n\t\t\tfill: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\t\tstroke: '#000000',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t},\n\t\t\tstates: {\n\t\t\t\thover: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.4, '#BBB'],\n\t\t\t\t\t\t\t[0.6, '#888']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'white'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.1, '#000'],\n\t\t\t\t\t\t\t[0.3, '#333']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'yellow'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinputStyle: {\n\t\t\tbackgroundColor: '#333',\n\t\t\tcolor: 'silver'\n\t\t},\n\t\tlabelStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\n\tnavigator: {\n\t\thandles: {\n\t\t\tbackgroundColor: '#666',\n\t\t\tborderColor: '#AAA'\n\t\t},\n\t\toutlineColor: '#CCC',\n\t\tmaskFill: 'rgba(16, 16, 16, 0.5)',\n\t\tseries: {\n\t\t\tcolor: '#7798BF',\n\t\t\tlineColor: '#A6C7ED'\n\t\t}\n\t},\n\n\tscrollbar: {\n\t\tbarBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbarBorderColor: '#CCC',\n\t\tbuttonArrowColor: '#CCC',\n\t\tbuttonBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbuttonBorderColor: '#CCC',\n\t\trifleColor: '#FFF',\n\t\ttrackBackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#000'],\n\t\t\t\t[1, '#333']\n\t\t\t]\n\t\t},\n\t\ttrackBorderColor: '#666'\n\t},\n\n\t// special colors for some of the\n\tlegendBackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\tlegendBackgroundColorSolid: 'rgb(35, 35, 70)',\n\tdataLabelsColor: '#444',\n\ttextColor: '#C0C0C0',\n\tmaskColor: 'rgba(255,255,255,0.3)'\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/themes/dark-green.js",
    "content": "/**\n * Dark blue theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: [0, 0, 250, 500],\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(48, 96, 48)'],\n\t\t\t\t[1, 'rgb(0, 0, 0)']\n\t\t\t]\n\t\t},\n\t\tborderColor: '#000000',\n\t\tborderWidth: 2,\n\t\tclassName: 'dark-container',\n\t\tplotBackgroundColor: 'rgba(255, 255, 255, .1)',\n\t\tplotBorderColor: '#CCCCCC',\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tfont: 'bold 16px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#666666',\n\t\t\tfont: 'bold 12px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineColor: '#333333',\n\t\tgridLineWidth: 1,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\ttickColor: '#A0A0A0',\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\tgridLineColor: '#333333',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\tminorTickInterval: null,\n\t\ttickColor: '#A0A0A0',\n\t\ttickWidth: 1,\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\ttooltip: {\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.75)',\n\t\tstyle: {\n\t\t\tcolor: '#F0F0F0'\n\t\t}\n\t},\n\ttoolbar: {\n\t\titemStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\tplotOptions: {\n\t\tline: {\n\t\t\tdataLabels: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t},\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tspline: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tscatter: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tcandlestick: {\n\t\t\tlineColor: 'white'\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: '#A0A0A0'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#FFF'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#444'\n\t\t}\n\t},\n\tcredits: {\n\t\tstyle: {\n\t\t\tcolor: '#666'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\tsymbolStroke: '#DDDDDD',\n\t\t\thoverSymbolStroke: '#FFFFFF',\n\t\t\ttheme: {\n\t\t\t\tfill: {\n\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\tstops: [\n\t\t\t\t\t\t[0.4, '#606060'],\n\t\t\t\t\t\t[0.6, '#333333']\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tstroke: '#000000'\n\t\t\t}\n\t\t}\n\t},\n\n\t// scroll charts\n\trangeSelector: {\n\t\tbuttonTheme: {\n\t\t\tfill: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\t\tstroke: '#000000',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t},\n\t\t\tstates: {\n\t\t\t\thover: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.4, '#BBB'],\n\t\t\t\t\t\t\t[0.6, '#888']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'white'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.1, '#000'],\n\t\t\t\t\t\t\t[0.3, '#333']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'yellow'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinputStyle: {\n\t\t\tbackgroundColor: '#333',\n\t\t\tcolor: 'silver'\n\t\t},\n\t\tlabelStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\n\tnavigator: {\n\t\thandles: {\n\t\t\tbackgroundColor: '#666',\n\t\t\tborderColor: '#AAA'\n\t\t},\n\t\toutlineColor: '#CCC',\n\t\tmaskFill: 'rgba(16, 16, 16, 0.5)',\n\t\tseries: {\n\t\t\tcolor: '#7798BF',\n\t\t\tlineColor: '#A6C7ED'\n\t\t}\n\t},\n\n\tscrollbar: {\n\t\tbarBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbarBorderColor: '#CCC',\n\t\tbuttonArrowColor: '#CCC',\n\t\tbuttonBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbuttonBorderColor: '#CCC',\n\t\trifleColor: '#FFF',\n\t\ttrackBackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#000'],\n\t\t\t\t[1, '#333']\n\t\t\t]\n\t\t},\n\t\ttrackBorderColor: '#666'\n\t},\n\n\t// special colors for some of the\n\tlegendBackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\tlegendBackgroundColorSolid: 'rgb(35, 35, 70)',\n\tdataLabelsColor: '#444',\n\ttextColor: '#C0C0C0',\n\tmaskColor: 'rgba(255,255,255,0.3)'\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/themes/gray.js",
    "content": "/**\n * Gray theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#7798BF\", \"#55BF3B\", \"#DF5353\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(96, 96, 96)'],\n\t\t\t\t[1, 'rgb(16, 16, 16)']\n\t\t\t]\n\t\t},\n\t\tborderWidth: 0,\n\t\tborderRadius: 15,\n\t\tplotBackgroundColor: null,\n\t\tplotShadow: false,\n\t\tplotBorderWidth: 0\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#FFF',\n\t\t\tfont: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#DDD',\n\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineWidth: 0,\n\t\tlineColor: '#999',\n\t\ttickColor: '#999',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#999',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#AAA',\n\t\t\t\tfont: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\talternateGridColor: null,\n\t\tminorTickInterval: null,\n\t\tgridLineColor: 'rgba(255, 255, 255, .1)',\n\t\tminorGridLineColor: 'rgba(255,255,255,0.07)',\n\t\tlineWidth: 0,\n\t\ttickWidth: 0,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#999',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#AAA',\n\t\t\t\tfont: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tcolor: '#CCC'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#FFF'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#333'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\ttooltip: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgba(96, 96, 96, .8)'],\n\t\t\t\t[1, 'rgba(16, 16, 16, .8)']\n\t\t\t]\n\t\t},\n\t\tborderWidth: 0,\n\t\tstyle: {\n\t\t\tcolor: '#FFF'\n\t\t}\n\t},\n\n\n\tplotOptions: {\n\t\tseries: {\n\t\t\tshadow: true\n\t\t},\n\t\tline: {\n\t\t\tdataLabels: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t},\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tspline: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tscatter: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tcandlestick: {\n\t\t\tlineColor: 'white'\n\t\t}\n\t},\n\n\ttoolbar: {\n\t\titemStyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\tsymbolStroke: '#DDDDDD',\n\t\t\thoverSymbolStroke: '#FFFFFF',\n\t\t\ttheme: {\n\t\t\t\tfill: {\n\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\tstops: [\n\t\t\t\t\t\t[0.4, '#606060'],\n\t\t\t\t\t\t[0.6, '#333333']\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tstroke: '#000000'\n\t\t\t}\n\t\t}\n\t},\n\n\t// scroll charts\n\trangeSelector: {\n\t\tbuttonTheme: {\n\t\t\tfill: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\t\tstroke: '#000000',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t},\n\t\t\tstates: {\n\t\t\t\thover: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.4, '#BBB'],\n\t\t\t\t\t\t\t[0.6, '#888']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'white'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.1, '#000'],\n\t\t\t\t\t\t\t[0.3, '#333']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'yellow'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinputStyle: {\n\t\t\tbackgroundColor: '#333',\n\t\t\tcolor: 'silver'\n\t\t},\n\t\tlabelStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\n\tnavigator: {\n\t\thandles: {\n\t\t\tbackgroundColor: '#666',\n\t\t\tborderColor: '#AAA'\n\t\t},\n\t\toutlineColor: '#CCC',\n\t\tmaskFill: 'rgba(16, 16, 16, 0.5)',\n\t\tseries: {\n\t\t\tcolor: '#7798BF',\n\t\t\tlineColor: '#A6C7ED'\n\t\t}\n\t},\n\n\tscrollbar: {\n\t\tbarBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbarBorderColor: '#CCC',\n\t\tbuttonArrowColor: '#CCC',\n\t\tbuttonBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbuttonBorderColor: '#CCC',\n\t\trifleColor: '#FFF',\n\t\ttrackBackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#000'],\n\t\t\t\t[1, '#333']\n\t\t\t]\n\t\t},\n\t\ttrackBorderColor: '#666'\n\t},\n\n\t// special colors for some of the demo examples\n\tlegendBackgroundColor: 'rgba(48, 48, 48, 0.8)',\n\tlegendBackgroundColorSolid: 'rgb(70, 70, 70)',\n\tdataLabelsColor: '#444',\n\ttextColor: '#E0E0E0',\n\tmaskColor: 'rgba(255,255,255,0.3)'\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/themes/grid.js",
    "content": "/**\n * Grid theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(255, 255, 255)'],\n\t\t\t\t[1, 'rgb(240, 240, 255)']\n\t\t\t]\n\t\t},\n\t\tborderWidth: 2,\n\t\tplotBackgroundColor: 'rgba(255, 255, 255, .9)',\n\t\tplotShadow: true,\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#000',\n\t\t\tfont: 'bold 16px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#666666',\n\t\t\tfont: 'bold 12px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineWidth: 1,\n\t\tlineColor: '#000',\n\t\ttickColor: '#000',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#000',\n\t\t\t\tfont: '11px Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#333',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\tminorTickInterval: 'auto',\n\t\tlineColor: '#000',\n\t\tlineWidth: 1,\n\t\ttickWidth: 1,\n\t\ttickColor: '#000',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#000',\n\t\t\t\tfont: '11px Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#333',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: 'black'\n\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#039'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: 'gray'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#99b'\n\t\t}\n\t},\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\ttheme: {\n\t\t\t\tstroke: '#CCCCCC'\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/highcharts/themes/skies.js",
    "content": "/**\n * Skies theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#514F78\", \"#42A07B\", \"#9B5E4A\", \"#72727F\", \"#1F949A\", \"#82914E\", \"#86777F\", \"#42A07B\"],\n\tchart: {\n\t\tclassName: 'skies',\n\t\tborderWidth: 0,\n\t\tplotShadow: true,\n\t\tplotBackgroundImage: 'http://www.highcharts.com/demo/gfx/skies.jpg',\n\t\tplotBackgroundColor: {\n\t\t\tlinearGradient: [0, 0, 250, 500],\n\t\t\tstops: [\n\t\t\t\t[0, 'rgba(255, 255, 255, 1)'],\n\t\t\t\t[1, 'rgba(255, 255, 255, 0)']\n\t\t\t]\n\t\t},\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#3E576F',\n\t\t\tfont: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#6D869F',\n\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineWidth: 0,\n\t\tlineColor: '#C0D0E0',\n\t\ttickColor: '#C0D0E0',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\talternateGridColor: 'rgba(255, 255, 255, .5)',\n\t\tlineColor: '#C0D0E0',\n\t\ttickColor: '#C0D0E0',\n\t\ttickWidth: 1,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: '#3E576F'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: 'black'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#3E576F'\n\t\t}\n\t}\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/jquery-1.10.2.js",
    "content": "/*!\n * jQuery JavaScript Library v1.10.2\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03T13:48Z\n */\n(function( window, undefined ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\"use strict\";\nvar\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// Support: IE<10\n\t// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`\n\tcore_strundefined = typeof undefined,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tlocation = window.location,\n\tdocument = window.document,\n\tdocElem = document.documentElement,\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {},\n\n\t// List of deleted data cache ids, so we can reuse them\n\tcore_deletedIds = [],\n\n\tcore_version = \"1.10.2\",\n\n\t// Save a reference to some core methods\n\tcore_concat = core_deletedIds.concat,\n\tcore_push = core_deletedIds.push,\n\tcore_slice = core_deletedIds.slice,\n\tcore_indexOf = core_deletedIds.indexOf,\n\tcore_toString = class2type.toString,\n\tcore_hasOwn = class2type.hasOwnProperty,\n\tcore_trim = core_version.trim,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n\n\t// Used for splitting on whitespace\n\tcore_rnotwhite = /\\S+/g,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t},\n\n\t// The ready event handler\n\tcompleted = function( event ) {\n\n\t\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\n\t\t\tdetach();\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\t// Clean-up method for dom ready events\n\tdetach = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\t\t\twindow.removeEventListener( \"load\", completed, false );\n\n\t\t} else {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\t\twindow.detachEvent( \"onload\", completed );\n\t\t}\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: core_version,\n\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn core_slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( core_version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn String( obj );\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( jQuery.support.ownLast ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn core_hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, keepScripts ) {\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\t\tcontext = context || document;\n\n\t\tvar parsed = rsingleTag.exec( data ),\n\t\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif ( parsed ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\t\tif ( scripts ) {\n\t\t\tjQuery( scripts ).remove();\n\t\t}\n\t\treturn jQuery.merge( [], parsed.childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\tif ( data === null ) {\n\t\t\treturn data;\n\t\t}\n\n\t\tif ( typeof data === \"string\" ) {\n\n\t\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\t\tdata = jQuery.trim( data );\n\n\t\t\tif ( data ) {\n\t\t\t\t// Make sure the incoming data is actual JSON\n\t\t\t\t// Logic borrowed from http://json.org/json2.js\n\t\t\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\t\t\treturn ( new Function( \"return \" + data ) )();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcore_push.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn core_concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\t\tvar i = 0,\n\t\t\tlength = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif ( jQuery.type( key ) === \"object\" ) {\n\t\t\tchainable = true;\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t\t}\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\tchainable = true;\n\n\t\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif ( raw ) {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\n\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations.\n\t// Note: this method belongs to the css module but it's needed here for the support module.\n\t// If support gets modularized, this method should be moved back to the css module.\n\tswap: function( elem, options, callback, args ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.apply( elem, args || [] );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || type !== \"function\" &&\n\t\t( length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj );\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n/*!\n * Sizzle CSS Selector Engine v1.10.2\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03\n */\n(function( window, undefined ) {\n\nvar i,\n\tsupport,\n\tcachedruns,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcompile,\n\toutermostContext,\n\tsortInput,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\thasDuplicate = false,\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:([*^$|!~]?=)\" + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments quoted,\n\t//   then not containing pseudos/brackets,\n\t//   then attribute selectors/non-parenthetical expressions,\n\t//   then anything else\n\t// These preferences are here to reduce the number of selectors\n\t//   needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes.replace( 3, 8 ) + \")*)|.*)\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trsibling = new RegExp( whitespace + \"*[+~]\" ),\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\t// BMP codepoint\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && context.parentNode || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key += \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect xml\n * @param {Element|Object} elem An element or a document\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar doc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent.attachEvent && parent !== parent.top ) {\n\t\tparent.attachEvent( \"onbeforeunload\", function() {\n\t\t\tsetDocument();\n\t\t});\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = assert(function( div ) {\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Support: Opera 10-12/IE8\n\t\t\t// ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type attribute is restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"t\", \"\" );\n\n\t\t\tif ( div.querySelectorAll(\"[t^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );\n\n\t\tif ( compare ) {\n\t\t\t// Disconnected nodes\n\t\t\tif ( compare & 1 ||\n\t\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\tif ( a === doc || contains(preferredDoc, a) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === doc || contains(preferredDoc, b) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\t// Maintain original order\n\t\t\t\treturn sortInput ?\n\t\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t\t0;\n\t\t\t}\n\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t}\n\n\t\t// Not directly comparable, sort on existence of method\n\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\t} else if ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [elem] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val === undefined ?\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull :\n\t\tval;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( ; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (see #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[5] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] && match[4] !== undefined ) {\n\t\t\t\tmatch[2] = match[4];\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t//   not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t//   Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || elem.nodeType === 3 || elem.nodeType === 4 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === elem.type );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( tokens = [] );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar data, cache, outerCache,\n\t\t\t\tdirkey = dirruns + \" \" + doneName;\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {\n\t\t\t\t\t\t\tif ( (data = cache[1]) === true || data === cachedruns ) {\n\t\t\t\t\t\t\t\treturn data === true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcache = outerCache[ dir ] = [ dirkey ];\n\t\t\t\t\t\t\tcache[1] = matcher( elem, context, xml ) || cachedruns;\n\t\t\t\t\t\t\tif ( cache[1] === true ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\t// A counter to specify which element is currently being matched\n\tvar matcherCachedRuns = 0,\n\t\tbySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = matcherCachedRuns;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\tcachedruns = ++matcherCachedRuns;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\t}\n\treturn cached;\n};\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector );\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn (val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\telem[ name ] === true ? name.toLowerCase() : null;\n\t\t}\n\t});\n}\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = core_slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n\t\t\t\t\tif( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\njQuery.support = (function( support ) {\n\n\tvar all, a, input, select, fragment, opt, eventName, isSupported, i,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Setup\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// Finish early in limited (non-browser) environments\n\tall = div.getElementsByTagName(\"*\") || [];\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\tif ( !a || !a.style || !all.length ) {\n\t\treturn support;\n\t}\n\n\t// First batch of tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\n\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName(\"tbody\").length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName(\"link\").length;\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute(\"style\") );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute(\"href\") === \"/a\";\n\n\t// Make sure that element opacity exists\n\t// (IE uses filter instead)\n\t// Use a regex to work around a WebKit issue. See #5145\n\tsupport.opacity = /^0.5/.test( a.style.opacity );\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!a.style.cssFloat;\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement(\"form\").enctype;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone = document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Will be defined later\n\tsupport.inlineBlockNeedsLayout = false;\n\tsupport.shrinkWrapBlocks = false;\n\tsupport.pixelPosition = false;\n\tsupport.deleteExpando = true;\n\tsupport.noCloneEvent = true;\n\tsupport.reliableMarginRight = true;\n\tsupport.boxSizingReliable = true;\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<9\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement(\"input\");\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"checked\", \"t\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( input );\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\n\tif ( div.attachEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\n\t\tdiv.cloneNode( true ).click();\n\t}\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)\n\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\tfor ( i in { submit: true, change: true, focusin: true }) {\n\t\tdiv.setAttribute( eventName = \"on\" + i, \"t\" );\n\n\t\tsupport[ i + \"Bubbles\" ] = eventName in window || div.attributes[ eventName ].expando === false;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t// Support: IE<9\n\t// Iteration over object's inherited properties before its own.\n\tfor ( i in jQuery( support ) ) {\n\t\tbreak;\n\t}\n\tsupport.ownLast = i !== \"0\";\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, marginDiv, tds,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\";\n\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE8\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Support: IE8\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior.\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\n\t\t// Workaround failing boxSizing test due to offsetWidth returning wrong value\n\t\t// with some non-1 values of body zoom, ticket #13543\n\t\tjQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {\n\t\t\tsupport.boxSizing = div.offsetWidth === 4;\n\t\t});\n\n\t\t// Use window.getComputedStyle because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = div.appendChild( document.createElement(\"div\") );\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== core_strundefined ) {\n\t\t\t// Support: IE<8\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Support: IE6\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.innerHTML = \"<div></div>\";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tif ( support.inlineBlockNeedsLayout ) {\n\t\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t\t// Support: IE<8\n\t\t\t\tbody.style.zoom = 1;\n\t\t\t}\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\t// Null elements to avoid leaks in IE\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tall = select = fragment = opt = a = input = null;\n\n\treturn support;\n})({});\n\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ){\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, null\n\t} else {\n\t\tcache[ id ] = null;\n\t}\n}\n\njQuery.extend({\n\tcache: {},\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"applet\": true,\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\t// Do not set data on non-element because it will not be cleared (#8335).\n\t\tif ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar attrs, name,\n\t\t\tdata = null,\n\t\t\ti = 0,\n\t\t\telem = this[0];\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattrs = elem.attributes;\n\t\t\t\t\tfor ( ; i < attrs.length; i++ ) {\n\t\t\t\t\t\tname = attrs[i].name;\n\n\t\t\t\t\t\tif ( name.indexOf(\"data-\") === 0 ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each(function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t}) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar nodeHook, boolHook,\n\trclass = /[\\t\\r\\n\\f]/g,\n\trreturn = /\\r/g,\n\trfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tgetSetInput = jQuery.support.input;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = jQuery.trim( cur );\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( core_rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === core_strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar ret, hooks, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Use proper attribute retrieval(#6932, #12072)\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\telem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === core_strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( core_rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t} else {\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;\n\n\tjQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar fn = jQuery.expr.attrHandle[ name ],\n\t\t\t\tret = isXML ?\n\t\t\t\t\tundefined :\n\t\t\t\t\t/* jshint eqeqeq: false */\n\t\t\t\t\t(jQuery.expr.attrHandle[ name ] = undefined) !=\n\t\t\t\t\t\tgetter( elem, name, isXML ) ?\n\n\t\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\t\tnull;\n\t\t\tjQuery.expr.attrHandle[ name ] = fn;\n\t\t\treturn ret;\n\t\t} :\n\t\tfunction( elem, name, isXML ) {\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t};\n});\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\treturn name === \"value\" || value === elem.getAttribute( name ) ?\n\t\t\t\tvalue :\n\t\t\t\tundefined;\n\t\t}\n\t};\n\tjQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =\n\t\t// Some attributes are constructed with empty-string values when not defined\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\t(ret = elem.getAttributeNode( name )) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t};\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn ret && ret.specified ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !jQuery.support.hrefNormalized ) {\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !jQuery.support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = core_hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = core_hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, ret, handleObj, matched, j,\n\t\t\thandlerQueue = [],\n\t\t\targs = core_slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar sel, handleObj, matches, i,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Chrome 23+, Safari?\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Even when returnValue equals to undefined Firefox will still show alert\n\t\t\t\tif ( event.result !== undefined ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === core_strundefined ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar type, origFn;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\nvar isSimple = /^.[^:#\\[\\.,]*$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\trneedsContext = jQuery.expr.match.needsContext,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tret = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tcur = ret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( jQuery.unique(all) );\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.unique( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tvar elem = elems[ 0 ];\n\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\t\treturn elem.nodeType === 1;\n\t\t\t}));\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\tmanipulation_rcheckableType = /^(?:checkbox|radio)$/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\tparam: [ 1, \"<object>\", \"</object>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\n\t\t_default: jQuery.support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\"  ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar\n\t\t\t// Snapshot the DOM in case .domManip sweeps something relevant into its fragment\n\t\t\targs = jQuery.map( this, function( elem ) {\n\t\t\t\treturn [ elem.nextSibling, elem.parentNode ];\n\t\t\t}),\n\t\t\ti = 0;\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\tvar next = args[ i++ ],\n\t\t\t\tparent = args[ i++ ];\n\n\t\t\tif ( parent ) {\n\t\t\t\t// Don't use the snapshot next if it has moved (#13810)\n\t\t\t\tif ( next && next.parentNode !== parent ) {\n\t\t\t\t\tnext = this.nextSibling;\n\t\t\t\t}\n\t\t\t\tjQuery( this ).remove();\n\t\t\t\tparent.insertBefore( elem, next );\n\t\t\t}\n\t\t// Allow new content to include elements from the context set\n\t\t}, true );\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn i ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback, allowIntersection ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = core_concat.apply( [], args );\n\n\t\tvar first, node, hasScripts,\n\t\t\tscripts, doc, fragment,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction || !( l <= 1 || typeof value !== \"string\" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[0] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback, allowIntersection );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[i], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Hope ajax is available...\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\t\tfragment = first = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (jQuery.find.attr( elem, \"type\" ) !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[1];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && manipulation_rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone(true);\n\t\t\tjQuery( insert[i] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tcore_push.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n// Used in buildFragment, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( manipulation_rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar j, elem, contains,\n\t\t\ttmp, tag, tbody, wrap,\n\t\t\tl = elems.length,\n\n\t\t\t// Ensure a safe fragment\n\t\t\tsafe = createSafeFragment( context ),\n\n\t\t\tnodes = [],\n\t\t\ti = 0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\twrap[1] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t\t0;\n\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\t\ttmp = safe.lastChild;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from fragment\n\t\tif ( tmp ) {\n\t\t\tsafe.removeChild( tmp );\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t\t}\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttmp = null;\n\n\t\treturn safe;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== core_strundefined ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcore_deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_evalUrl: function( url ) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\t\t\t\"throws\": true\n\t\t});\n\t}\n});\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\nvar iframe, getStyles, curCSS,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = { BODY: \"block\" },\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction isHidden( elem, el ) {\n\t// isHidden might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\n\t\t\tif ( !values[ index ] ) {\n\t\t\t\thidden = isHidden( elem );\n\n\t\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\tvar len, styles,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !jQuery.support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\n// NOTE: we've included the \"window\" in window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar width, minWidth, maxWidth,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\n\t\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar left, rs, rsLeft,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\t\t\tret = computed ? computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe ||\n\t\t\t\tjQuery(\"<iframe frameborder='0' width='0' height='0'/>\")\n\t\t\t\t.css( \"cssText\", \"display:block !important\" )\n\t\t\t).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;\n\t\t\tdoc.write(\"<!doctype html><html><body>\");\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\n\n// Called ONLY from within css_defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\t\tdisplay = jQuery.css( elem[0], \"display\" );\n\telem.remove();\n\treturn display;\n}\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, \"display\" ) ) ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\n// These hooks cannot be added until DOM ready because the support test\n// for it is not run until after DOM ready\njQuery(function() {\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// getComputedStyle returns percent when specified for top/left/bottom/right\n\t// rather than make the css module depend on the offset module, we just check for it here\n\tif ( !jQuery.support.pixelPosition && jQuery.fn.position ) {\n\t\tjQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\t\t\tjQuery.cssHooks[ prop ] = {\n\t\t\t\tget: function( elem, computed ) {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\t\t\tcomputed;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\t// Support: Opera <= 12.12\n\t\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||\n\t\t\t(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\tvar type = this.type;\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !manipulation_rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n//Serialize an array of form elements or a set of\n//key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\tajax_nonce = jQuery.now(),\n\n\tajax_rquery = /\\?/,\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat(\"*\");\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, response, type,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = url.slice( off, url.length );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ){\n\tjQuery.fn[ type ] = function( fn ){\n\t\treturn this.on( type, fn );\n\t};\n});\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( core_rnotwhite ) || [\"\"];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + ajax_nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ajax_nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery(\"head\")[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement(\"script\");\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( ajax_nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( ajax_rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\nvar xhrCallbacks, xhrSupported,\n\txhrId = 0,\n\t// #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject && function() {\n\t\t// Abort all pending requests\n\t\tvar key;\n\t\tfor ( key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t};\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\nxhrSupported = jQuery.ajaxSettings.xhr();\njQuery.support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = jQuery.support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar handle, i,\n\t\t\t\t\t\txhr = s.xhr();\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( err ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, responseHeaders, statusText, responses;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occurred\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\n\t\t\t\t\t\t\t\t\t// When requesting binary data, IE6-9 will throw an exception\n\t\t\t\t\t\t\t\t\t// on any attempt to access responseText (#11426)\n\t\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( !s.async ) {\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\tsetTimeout( callback );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\nvar fxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + core_pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t}]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tif ( jQuery.css( elem, \"display\" ) === \"inline\" &&\n\t\t\t\tjQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !jQuery.support.shrinkWrapBlocks ) {\n\t\t\tanim.always(function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth? 1 : 0;\n\tfor( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p*Math.PI ) / 2;\n\t}\n};\n\njQuery.timers = [];\njQuery.fx = Tween.prototype.init;\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tif ( timer() && jQuery.timers.push( timer ) ) {\n\t\tjQuery.fx.start();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\njQuery.fn.offset = function( options ) {\n\tif ( arguments.length ) {\n\t\treturn options === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t}\n\n\tvar docElem, win,\n\t\tbox = { top: 0, left: 0 },\n\t\telem = this[ 0 ],\n\t\tdoc = elem && elem.ownerDocument;\n\n\tif ( !doc ) {\n\t\treturn;\n\t}\n\n\tdocElem = doc.documentElement;\n\n\t// Make sure it's not a disconnected DOM node\n\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\treturn box;\n\t}\n\n\t// If we don't have gBCR, just use 0,0 rather than error\n\t// BlackBerry 5, iOS 3 (original iPhone)\n\tif ( typeof elem.getBoundingClientRect !== core_strundefined ) {\n\t\tbox = elem.getBoundingClientRect();\n\t}\n\twin = getWindow( doc );\n\treturn {\n\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\n\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t};\n};\n\njQuery.offset = {\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top  += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true)\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\") === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn jQuery.access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn jQuery.access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n// Limit scope pollution from any deprecated API\n// (function() {\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n// })();\nif ( typeof module === \"object\" && module && typeof module.exports === \"object\" ) {\n\t// Expose jQuery as module.exports in loaders that implement the Node\n\t// module pattern (including browserify). Do not create the global, since\n\t// the user will be storing it themselves locally, and globals are frowned\n\t// upon in the Node module world.\n\tmodule.exports = jQuery;\n} else {\n\t// Otherwise expose jQuery to the global object as usual\n\twindow.jQuery = window.$ = jQuery;\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( \"jquery\", [], function () { return jQuery; } );\n\t}\n}\n\n})( window );\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/video-js/video-js.css",
    "content": "/*!\nVideo.js Default Styles (http://videojs.com)\nVersion 4.3.0\nCreate your own skin at http://designer.videojs.com\n*/\n/* SKIN\n================================================================================\nThe main class name for all skin-specific styles. To make your own skin,\nreplace all occurances of 'vjs-default-skin' with a new name. Then add your new\nskin name to your video tag instead of the default skin.\ne.g. <video class=\"video-js my-skin-name\">\n*/\n.vjs-default-skin {\n  color: #cccccc;\n}\n/* Custom Icon Font\n--------------------------------------------------------------------------------\nThe control icons are from a custom font. Each icon corresponds to a character\n(e.g. \"\\e001\"). Font icons allow for easy scaling and coloring of icons.\n*/\n@font-face {\n  font-family: 'VideoJS';\n  src: url('font/vjs.eot');\n  src: url('font/vjs.eot?#iefix') format('embedded-opentype'), url('font/vjs.woff') format('woff'), url('font/vjs.ttf') format('truetype');\n  font-weight: normal;\n  font-style: normal;\n}\n/* Base UI Component Classes\n--------------------------------------------------------------------------------\n*/\n/* Slider - used for Volume bar and Seek bar */\n.vjs-default-skin .vjs-slider {\n  /* Replace browser focus hightlight with handle highlight */\n  outline: 0;\n  position: relative;\n  cursor: pointer;\n  padding: 0;\n  /* background-color-with-alpha */\n  background-color: #333333;\n  background-color: rgba(51, 51, 51, 0.9);\n}\n.vjs-default-skin .vjs-slider:focus {\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 2em #ffffff;\n  -moz-box-shadow: 0 0 2em #ffffff;\n  box-shadow: 0 0 2em #ffffff;\n}\n.vjs-default-skin .vjs-slider-handle {\n  position: absolute;\n  /* Needed for IE6 */\n  left: 0;\n  top: 0;\n}\n.vjs-default-skin .vjs-slider-handle:before {\n  content: \"\\e009\";\n  font-family: VideoJS;\n  font-size: 1em;\n  line-height: 1;\n  text-align: center;\n  text-shadow: 0em 0em 1em #fff;\n  position: absolute;\n  top: 0;\n  left: 0;\n  /* Rotate the square icon to make a diamond */\n  /* transform */\n  -webkit-transform: rotate(-45deg);\n  -moz-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n  -o-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n/* Control Bar\n--------------------------------------------------------------------------------\nThe default control bar that is a container for most of the controls.\n*/\n.vjs-default-skin .vjs-control-bar {\n  /* Start hidden */\n  display: none;\n  position: absolute;\n  /* Place control bar at the bottom of the player box/video.\n     If you want more margin below the control bar, add more height. */\n  bottom: 0;\n  /* Use left/right to stretch to 100% width of player div */\n  left: 0;\n  right: 0;\n  /* Height includes any margin you want above or below control items */\n  height: 3.0em;\n  /* background-color-with-alpha */\n  background-color: #07141e;\n  background-color: rgba(7, 20, 30, 0.7);\n}\n/* Show the control bar only once the video has started playing */\n.vjs-default-skin.vjs-has-started .vjs-control-bar {\n  display: block;\n  /* Visibility needed to make sure things hide in older browsers too. */\n\n  visibility: visible;\n  opacity: 1;\n  /* transition */\n  -webkit-transition: visibility 0.1s, opacity 0.1s;\n  -moz-transition: visibility 0.1s, opacity 0.1s;\n  -o-transition: visibility 0.1s, opacity 0.1s;\n  transition: visibility 0.1s, opacity 0.1s;\n}\n/* Hide the control bar when the video is playing and the user is inactive  */\n.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {\n  display: block;\n  visibility: hidden;\n  opacity: 0;\n  /* transition */\n  -webkit-transition: visibility 1s, opacity 1s;\n  -moz-transition: visibility 1s, opacity 1s;\n  -o-transition: visibility 1s, opacity 1s;\n  transition: visibility 1s, opacity 1s;\n}\n.vjs-default-skin.vjs-controls-disabled .vjs-control-bar {\n  display: none;\n}\n.vjs-default-skin.vjs-using-native-controls .vjs-control-bar {\n  display: none;\n}\n/* IE8 is flakey with fonts, and you have to change the actual content to force\nfonts to show/hide properly.\n  - \"\\9\" IE8 hack didn't work for this\n  - Found in XP IE8 from http://modern.ie. Does not show up in \"IE8 mode\" in IE9\n*/\n@media \\0screen {\n  .vjs-default-skin.vjs-user-inactive.vjs-playing .vjs-control-bar :before {\n    content: \"\";\n  }\n}\n/* General styles for individual controls. */\n.vjs-default-skin .vjs-control {\n  outline: none;\n  position: relative;\n  float: left;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n  height: 3.0em;\n  width: 4em;\n}\n/* FontAwsome button icons */\n.vjs-default-skin .vjs-control:before {\n  font-family: VideoJS;\n  font-size: 1.5em;\n  line-height: 2;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);\n}\n/* Replacement for focus outline */\n.vjs-default-skin .vjs-control:focus:before,\n.vjs-default-skin .vjs-control:hover:before {\n  text-shadow: 0em 0em 1em #ffffff;\n}\n.vjs-default-skin .vjs-control:focus {\n  /*  outline: 0; */\n  /* keyboard-only users cannot see the focus on several of the UI elements when\n  this is set to 0 */\n\n}\n/* Hide control text visually, but have it available for screenreaders */\n.vjs-default-skin .vjs-control-text {\n  /* hide-visually */\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n/* Play/Pause\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-play-control {\n  width: 5em;\n  cursor: pointer;\n}\n.vjs-default-skin .vjs-play-control:before {\n  content: \"\\e001\";\n}\n.vjs-default-skin.vjs-playing .vjs-play-control:before {\n  content: \"\\e002\";\n}\n/* Volume/Mute\n-------------------------------------------------------------------------------- */\n.vjs-default-skin .vjs-mute-control,\n.vjs-default-skin .vjs-volume-menu-button {\n  cursor: pointer;\n  float: right;\n}\n.vjs-default-skin .vjs-mute-control:before,\n.vjs-default-skin .vjs-volume-menu-button:before {\n  content: \"\\e006\";\n}\n.vjs-default-skin .vjs-mute-control.vjs-vol-0:before,\n.vjs-default-skin .vjs-volume-menu-button.vjs-vol-0:before {\n  content: \"\\e003\";\n}\n.vjs-default-skin .vjs-mute-control.vjs-vol-1:before,\n.vjs-default-skin .vjs-volume-menu-button.vjs-vol-1:before {\n  content: \"\\e004\";\n}\n.vjs-default-skin .vjs-mute-control.vjs-vol-2:before,\n.vjs-default-skin .vjs-volume-menu-button.vjs-vol-2:before {\n  content: \"\\e005\";\n}\n.vjs-default-skin .vjs-volume-control {\n  width: 5em;\n  float: right;\n}\n.vjs-default-skin .vjs-volume-bar {\n  width: 5em;\n  height: 0.6em;\n  margin: 1.1em auto 0;\n}\n.vjs-default-skin .vjs-volume-menu-button .vjs-menu-content {\n  height: 2.9em;\n}\n.vjs-default-skin .vjs-volume-level {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 0.5em;\n  background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat;\n}\n.vjs-default-skin .vjs-volume-bar .vjs-volume-handle {\n  width: 0.5em;\n  height: 0.5em;\n}\n.vjs-default-skin .vjs-volume-handle:before {\n  font-size: 0.9em;\n  top: -0.2em;\n  left: -0.2em;\n  width: 1em;\n  height: 1em;\n}\n.vjs-default-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content {\n  width: 6em;\n  left: -4em;\n}\n/* Progress\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-progress-control {\n  position: absolute;\n  left: 0;\n  right: 0;\n  width: auto;\n  font-size: 0.3em;\n  height: 1em;\n  /* Set above the rest of the controls. */\n  top: -1em;\n  /* Shrink the bar slower than it grows. */\n  /* transition */\n  -webkit-transition: all 0.4s;\n  -moz-transition: all 0.4s;\n  -o-transition: all 0.4s;\n  transition: all 0.4s;\n}\n/* On hover, make the progress bar grow to something that's more clickable.\n    This simply changes the overall font for the progress bar, and this\n    updates both the em-based widths and heights, as wells as the icon font */\n.vjs-default-skin:hover .vjs-progress-control {\n  font-size: .9em;\n  /* Even though we're not changing the top/height, we need to include them in\n      the transition so they're handled correctly. */\n\n  /* transition */\n  -webkit-transition: all 0.2s;\n  -moz-transition: all 0.2s;\n  -o-transition: all 0.2s;\n  transition: all 0.2s;\n}\n/* Box containing play and load progresses. Also acts as seek scrubber. */\n.vjs-default-skin .vjs-progress-holder {\n  height: 100%;\n}\n/* Progress Bars */\n.vjs-default-skin .vjs-progress-holder .vjs-play-progress,\n.vjs-default-skin .vjs-progress-holder .vjs-load-progress {\n  position: absolute;\n  display: block;\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  /* Needed for IE6 */\n  left: 0;\n  top: 0;\n}\n.vjs-default-skin .vjs-play-progress {\n  /*\n    Using a data URI to create the white diagonal lines with a transparent\n      background. Surprisingly works in IE8.\n      Created using http://www.patternify.com\n    Changing the first color value will change the bar color.\n    Also using a paralax effect to make the lines move backwards.\n      The -50% left position makes that happen.\n  */\n\n  background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat;\n}\n.vjs-default-skin .vjs-load-progress {\n  background: #646464 /* IE8- Fallback */;\n  background: rgba(255, 255, 255, 0.4);\n}\n.vjs-default-skin .vjs-seek-handle {\n  width: 1.5em;\n  height: 100%;\n}\n.vjs-default-skin .vjs-seek-handle:before {\n  padding-top: 0.1em /* Minor adjustment */;\n}\n/* Time Display\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-time-controls {\n  font-size: 1em;\n  /* Align vertically by making the line height the same as the control bar */\n  line-height: 3em;\n}\n.vjs-default-skin .vjs-current-time {\n  float: left;\n}\n.vjs-default-skin .vjs-duration {\n  float: left;\n}\n/* Remaining time is in the HTML, but not included in default design */\n.vjs-default-skin .vjs-remaining-time {\n  display: none;\n  float: left;\n}\n.vjs-time-divider {\n  float: left;\n  line-height: 3em;\n}\n/* Fullscreen\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-fullscreen-control {\n  width: 3.8em;\n  cursor: pointer;\n  float: right;\n}\n.vjs-default-skin .vjs-fullscreen-control:before {\n  content: \"\\e000\";\n}\n/* Switch to the exit icon when the player is in fullscreen */\n.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control:before {\n  content: \"\\e00b\";\n}\n/* Big Play Button (play button at start)\n--------------------------------------------------------------------------------\nPositioning of the play button in the center or other corners can be done more\neasily in the skin designer. http://designer.videojs.com/\n*/\n.vjs-default-skin .vjs-big-play-button {\n  left: 0.5em;\n  top: 0.5em;\n  font-size: 3em;\n  display: block;\n  z-index: 2;\n  position: absolute;\n  width: 4em;\n  height: 2.6em;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  opacity: 1;\n  /* Need a slightly gray bg so it can be seen on black backgrounds */\n  /* background-color-with-alpha */\n  background-color: #07141e;\n  background-color: rgba(7, 20, 30, 0.7);\n  border: 0.1em solid #3b4249;\n  /* border-radius */\n  -webkit-border-radius: 0.8em;\n  -moz-border-radius: 0.8em;\n  border-radius: 0.8em;\n  /* box-shadow */\n  -webkit-box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);\n  -moz-box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);\n  box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);\n  /* transition */\n  -webkit-transition: all 0.4s;\n  -moz-transition: all 0.4s;\n  -o-transition: all 0.4s;\n  transition: all 0.4s;\n}\n/* Optionally center */\n.vjs-default-skin.vjs-big-play-centered .vjs-big-play-button {\n  /* Center it horizontally */\n  left: 50%;\n  margin-left: -2.1em;\n  /* Center it vertically */\n  top: 50%;\n  margin-top: -1.4000000000000001em;\n}\n/* Hide if controls are disabled */\n.vjs-default-skin.vjs-controls-disabled .vjs-big-play-button {\n  display: none;\n}\n/* Hide when video starts playing */\n.vjs-default-skin.vjs-has-started .vjs-big-play-button {\n  display: none;\n}\n/* Hide on mobile devices. Remove when we stop using native controls\n    by default on mobile  */\n.vjs-default-skin.vjs-using-native-controls .vjs-big-play-button {\n  display: none;\n}\n.vjs-default-skin:hover .vjs-big-play-button,\n.vjs-default-skin .vjs-big-play-button:focus {\n  outline: 0;\n  border-color: #fff;\n  /* IE8 needs a non-glow hover state */\n  background-color: #505050;\n  background-color: rgba(50, 50, 50, 0.75);\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 3em #ffffff;\n  -moz-box-shadow: 0 0 3em #ffffff;\n  box-shadow: 0 0 3em #ffffff;\n  /* transition */\n  -webkit-transition: all 0s;\n  -moz-transition: all 0s;\n  -o-transition: all 0s;\n  transition: all 0s;\n}\n.vjs-default-skin .vjs-big-play-button:before {\n  content: \"\\e001\";\n  font-family: VideoJS;\n  /* In order to center the play icon vertically we need to set the line height\n     to the same as the button height */\n\n  line-height: 2.6em;\n  text-shadow: 0.05em 0.05em 0.1em #000;\n  text-align: center /* Needed for IE8 */;\n  position: absolute;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n/* Loading Spinner\n--------------------------------------------------------------------------------\n*/\n.vjs-loading-spinner {\n  display: none;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  font-size: 4em;\n  line-height: 1;\n  width: 1em;\n  height: 1em;\n  margin-left: -0.5em;\n  margin-top: -0.5em;\n  opacity: 0.75;\n  /* animation */\n  -webkit-animation: spin 1.5s infinite linear;\n  -moz-animation: spin 1.5s infinite linear;\n  -o-animation: spin 1.5s infinite linear;\n  animation: spin 1.5s infinite linear;\n}\n.vjs-default-skin .vjs-loading-spinner:before {\n  content: \"\\e01e\";\n  font-family: VideoJS;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 1em;\n  height: 1em;\n  text-align: center;\n  text-shadow: 0em 0em 0.1em #000;\n}\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n  }\n  100% {\n    -moz-transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n  }\n}\n@-o-keyframes spin {\n  0% {\n    -o-transform: rotate(0deg);\n  }\n  100% {\n    -o-transform: rotate(359deg);\n  }\n}\n@keyframes spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(359deg);\n  }\n}\n/* Menu Buttons (Captions/Subtitles/etc.)\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-menu-button {\n  float: right;\n  cursor: pointer;\n}\n.vjs-default-skin .vjs-menu {\n  display: none;\n  position: absolute;\n  bottom: 0;\n  left: 0em;\n  /* (Width of vjs-menu - width of button) / 2 */\n\n  width: 0em;\n  height: 0em;\n  margin-bottom: 3em;\n  border-left: 2em solid transparent;\n  border-right: 2em solid transparent;\n  border-top: 1.55em solid #000000;\n  /* Same width top as ul bottom */\n\n  border-top-color: rgba(7, 40, 50, 0.5);\n  /* Same as ul background */\n\n}\n/* Button Pop-up Menu */\n.vjs-default-skin .vjs-menu-button .vjs-menu .vjs-menu-content {\n  display: block;\n  padding: 0;\n  margin: 0;\n  position: absolute;\n  width: 10em;\n  bottom: 1.5em;\n  /* Same bottom as vjs-menu border-top */\n\n  max-height: 15em;\n  overflow: auto;\n  left: -5em;\n  /* Width of menu - width of button / 2 */\n\n  /* background-color-with-alpha */\n  background-color: #07141e;\n  background-color: rgba(7, 20, 30, 0.7);\n  /* box-shadow */\n  -webkit-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);\n  -moz-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);\n  box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);\n}\n.vjs-default-skin .vjs-menu-button:hover .vjs-menu {\n  display: block;\n}\n.vjs-default-skin .vjs-menu-button ul li {\n  list-style: none;\n  margin: 0;\n  padding: 0.3em 0 0.3em 0;\n  line-height: 1.4em;\n  font-size: 1.2em;\n  text-align: center;\n  text-transform: lowercase;\n}\n.vjs-default-skin .vjs-menu-button ul li.vjs-selected {\n  background-color: #000;\n}\n.vjs-default-skin .vjs-menu-button ul li:focus,\n.vjs-default-skin .vjs-menu-button ul li:hover,\n.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus,\n.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover {\n  outline: 0;\n  color: #111;\n  /* background-color-with-alpha */\n  background-color: #ffffff;\n  background-color: rgba(255, 255, 255, 0.75);\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 1em #ffffff;\n  -moz-box-shadow: 0 0 1em #ffffff;\n  box-shadow: 0 0 1em #ffffff;\n}\n.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title {\n  text-align: center;\n  text-transform: uppercase;\n  font-size: 1em;\n  line-height: 2em;\n  padding: 0;\n  margin: 0 0 0.3em 0;\n  font-weight: bold;\n  cursor: default;\n}\n/* Subtitles Button */\n.vjs-default-skin .vjs-subtitles-button:before {\n  content: \"\\e00c\";\n}\n/* Captions Button */\n.vjs-default-skin .vjs-captions-button:before {\n  content: \"\\e008\";\n}\n/* Replacement for focus outline */\n.vjs-default-skin .vjs-captions-button:focus .vjs-control-content:before,\n.vjs-default-skin .vjs-captions-button:hover .vjs-control-content:before {\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 1em #ffffff;\n  -moz-box-shadow: 0 0 1em #ffffff;\n  box-shadow: 0 0 1em #ffffff;\n}\n/*\nREQUIRED STYLES (be careful overriding)\n================================================================================\nWhen loading the player, the video tag is replaced with a DIV,\nthat will hold the video tag or object tag for other playback methods.\nThe div contains the video playback element (Flash or HTML5) and controls,\nand sets the width and height of the video.\n\n** If you want to add some kind of border/padding (e.g. a frame), or special\npositioning, use another containing element. Otherwise you risk messing up\ncontrol positioning and full window mode. **\n*/\n.video-js {\n  background-color: #000;\n  position: relative;\n  padding: 0;\n  /* Start with 10px for base font size so other dimensions can be em based and\n     easily calculable. */\n\n  font-size: 10px;\n  /* Allow poster to be vertially aligned. */\n\n  vertical-align: middle;\n  /*  display: table-cell; */\n  /*This works in Safari but not Firefox.*/\n\n  /* Provide some basic defaults for fonts */\n\n  font-weight: normal;\n  font-style: normal;\n  /* Avoiding helvetica: issue #376 */\n\n  font-family: Arial, sans-serif;\n  /* Turn off user selection (text highlighting) by default.\n     The majority of player components will not be text blocks.\n     Text areas will need to turn user selection back on. */\n\n  /* user-select */\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n/* Playback technology elements expand to the width/height of the containing div\n    <video> or <object> */\n.video-js .vjs-tech {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n/* Fix for Firefox 9 fullscreen (only if it is enabled). Not needed when\n   checking fullScreenEnabled. */\n.video-js:-moz-full-screen {\n  position: absolute;\n}\n/* Fullscreen Styles */\nbody.vjs-full-window {\n  padding: 0;\n  margin: 0;\n  height: 100%;\n  /* Fix for IE6 full-window. http://www.cssplay.co.uk/layouts/fixed.html */\n  overflow-y: auto;\n}\n.video-js.vjs-fullscreen {\n  position: fixed;\n  overflow: hidden;\n  z-index: 1000;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  width: 100% !important;\n  height: 100% !important;\n  /* IE6 full-window (underscore hack) */\n  _position: absolute;\n}\n.video-js:-webkit-full-screen {\n  width: 100% !important;\n  height: 100% !important;\n}\n.video-js.vjs-fullscreen.vjs-user-inactive {\n  cursor: none;\n}\n/* Poster Styles */\n.vjs-poster {\n  background-repeat: no-repeat;\n  background-position: 50% 50%;\n  background-size: contain;\n  cursor: pointer;\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.vjs-poster img {\n  display: block;\n  margin: 0 auto;\n  max-height: 100%;\n  padding: 0;\n  width: 100%;\n}\n/* Hide the poster when native controls are used otherwise it covers them */\n.video-js.vjs-using-native-controls .vjs-poster {\n  display: none;\n}\n/* Text Track Styles */\n/* Overall track holder for both captions and subtitles */\n.video-js .vjs-text-track-display {\n  text-align: center;\n  position: absolute;\n  bottom: 4em;\n  /* Leave padding on left and right */\n  left: 1em;\n  right: 1em;\n}\n/* Individual tracks */\n.video-js .vjs-text-track {\n  display: none;\n  font-size: 1.4em;\n  text-align: center;\n  margin-bottom: 0.1em;\n  /* Transparent black background, or fallback to all black (oldIE) */\n  /* background-color-with-alpha */\n  background-color: #000000;\n  background-color: rgba(0, 0, 0, 0.5);\n}\n.video-js .vjs-subtitles {\n  color: #ffffff /* Subtitles are white */;\n}\n.video-js .vjs-captions {\n  color: #ffcc66 /* Captions are yellow */;\n}\n.vjs-tt-cue {\n  display: block;\n}\n/* Hide disabled or unsupported controls */\n.vjs-default-skin .vjs-hidden {\n  display: none;\n}\n.vjs-lock-showing {\n  display: block !important;\n  opacity: 1;\n  visibility: visible;\n}\n/* -----------------------------------------------------------------------------\nThe original source of this file lives at\nhttps://github.com/videojs/video.js/blob/master/src/css/video-js.less */\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/video-js/video.dev.js",
    "content": "/**\n * @fileoverview Main function src.\n */\n\n// HTML5 Shiv. Must be in <head> to support older browsers.\ndocument.createElement('video');\ndocument.createElement('audio');\ndocument.createElement('track');\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n *\n * **ALIASES** videojs, _V_ (deprecated)\n *\n * The `vjs` function can be used to initialize or retrieve a player.\n *\n *     var myPlayer = vjs('my_video_id');\n *\n * @param  {String|Element} id      Video element or video element ID\n * @param  {Object=} options        Optional options object for config/settings\n * @param  {Function=} ready        Optional ready callback\n * @return {vjs.Player}             A player instance\n * @namespace\n */\nvar vjs = function(id, options, ready){\n  var tag; // Element of ID\n\n  // Allow for element or ID to be passed in\n  // String ID\n  if (typeof id === 'string') {\n\n    // Adjust for jQuery ID syntax\n    if (id.indexOf('#') === 0) {\n      id = id.slice(1);\n    }\n\n    // If a player instance has already been created for this ID return it.\n    if (vjs.players[id]) {\n      return vjs.players[id];\n\n    // Otherwise get element for ID\n    } else {\n      tag = vjs.el(id);\n    }\n\n  // ID is a media element\n  } else {\n    tag = id;\n  }\n\n  // Check for a useable element\n  if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n    throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n  }\n\n  // Element may have a player attr referring to an already created player instance.\n  // If not, set up a new player and return the instance.\n  return tag['player'] || new vjs.Player(tag, options, ready);\n};\n\n// Extended name, also available externally, window.videojs\nvar videojs = vjs;\nwindow.videojs = window.vjs = vjs;\n\n// CDN Version. Used to target right flash swf.\nvjs.CDN_VERSION = '4.3';\nvjs.ACCESS_PROTOCOL = ('https:' == document.location.protocol ? 'https://' : 'http://');\n\n/**\n * Global Player instance options, surfaced from vjs.Player.prototype.options_\n * vjs.options = vjs.Player.prototype.options_\n * All options should use string keys so they avoid\n * renaming by closure compiler\n * @type {Object}\n */\nvjs.options = {\n  // Default order of fallback technology\n  'techOrder': ['html5','flash'],\n  // techOrder: ['flash','html5'],\n\n  'html5': {},\n  'flash': {},\n\n  // Default of web browser is 300x150. Should rely on source width/height.\n  'width': 300,\n  'height': 150,\n  // defaultVolume: 0.85,\n  'defaultVolume': 0.00, // The freakin seaguls are driving me crazy!\n\n  // Included control sets\n  'children': {\n    'mediaLoader': {},\n    'posterImage': {},\n    'textTrackDisplay': {},\n    'loadingSpinner': {},\n    'bigPlayButton': {},\n    'controlBar': {}\n  },\n\n  // Default message to show when a video cannot be played.\n  'notSupportedMessage': 'Sorry, no compatible source and playback ' +\n      'technology were found for this video. Try using another browser ' +\n      'like <a href=\"http://bit.ly/ccMUEC\">Chrome</a> or download the ' +\n      'latest <a href=\"http://adobe.ly/mwfN1\">Adobe Flash Player</a>.'\n};\n\n// Set CDN Version of swf\n// The added (+) blocks the replace from changing this 4.3 string\nif (vjs.CDN_VERSION !== 'GENERATED'+'_CDN_VSN') {\n  videojs.options['flash']['swf'] = vjs.ACCESS_PROTOCOL + 'vjs.zencdn.net/'+vjs.CDN_VERSION+'/video-js.swf';\n}\n\n/**\n * Global player list\n * @type {Object}\n */\nvjs.players = {};\n/**\n * Core Object/Class for objects that use inheritance + contstructors\n *\n * To create a class that can be subclassed itself, extend the CoreObject class.\n *\n *     var Animal = CoreObject.extend();\n *     var Horse = Animal.extend();\n *\n * The constructor can be defined through the init property of an object argument.\n *\n *     var Animal = CoreObject.extend({\n *       init: function(name, sound){\n *         this.name = name;\n *       }\n *     });\n *\n * Other methods and properties can be added the same way, or directly to the\n * prototype.\n *\n *    var Animal = CoreObject.extend({\n *       init: function(name){\n *         this.name = name;\n *       },\n *       getName: function(){\n *         return this.name;\n *       },\n *       sound: '...'\n *    });\n *\n *    Animal.prototype.makeSound = function(){\n *      alert(this.sound);\n *    };\n *\n * To create an instance of a class, use the create method.\n *\n *    var fluffy = Animal.create('Fluffy');\n *    fluffy.getName(); // -> Fluffy\n *\n * Methods and properties can be overridden in subclasses.\n *\n *     var Horse = Animal.extend({\n *       sound: 'Neighhhhh!'\n *     });\n *\n *     var horsey = Horse.create('Horsey');\n *     horsey.getName(); // -> Horsey\n *     horsey.makeSound(); // -> Alert: Neighhhhh!\n *\n * @class\n * @constructor\n */\nvjs.CoreObject = vjs['CoreObject'] = function(){};\n// Manually exporting vjs['CoreObject'] here for Closure Compiler\n// because of the use of the extend/create class methods\n// If we didn't do this, those functions would get flattend to something like\n// `a = ...` and `this.prototype` would refer to the global object instead of\n// CoreObject\n\n/**\n * Create a new object that inherits from this Object\n *\n *     var Animal = CoreObject.extend();\n *     var Horse = Animal.extend();\n *\n * @param {Object} props Functions and properties to be applied to the\n *                       new object's prototype\n * @return {vjs.CoreObject} An object that inherits from CoreObject\n * @this {*}\n */\nvjs.CoreObject.extend = function(props){\n  var init, subObj;\n\n  props = props || {};\n  // Set up the constructor using the supplied init method\n  // or using the init of the parent object\n  // Make sure to check the unobfuscated version for external libs\n  init = props['init'] || props.init || this.prototype['init'] || this.prototype.init || function(){};\n  // In Resig's simple class inheritance (previously used) the constructor\n  //  is a function that calls `this.init.apply(arguments)`\n  // However that would prevent us from using `ParentObject.call(this);`\n  //  in a Child constuctor because the `this` in `this.init`\n  //  would still refer to the Child and cause an inifinite loop.\n  // We would instead have to do\n  //    `ParentObject.prototype.init.apply(this, argumnents);`\n  //  Bleh. We're not creating a _super() function, so it's good to keep\n  //  the parent constructor reference simple.\n  subObj = function(){\n    init.apply(this, arguments);\n  };\n\n  // Inherit from this object's prototype\n  subObj.prototype = vjs.obj.create(this.prototype);\n  // Reset the constructor property for subObj otherwise\n  // instances of subObj would have the constructor of the parent Object\n  subObj.prototype.constructor = subObj;\n\n  // Make the class extendable\n  subObj.extend = vjs.CoreObject.extend;\n  // Make a function for creating instances\n  subObj.create = vjs.CoreObject.create;\n\n  // Extend subObj's prototype with functions and other properties from props\n  for (var name in props) {\n    if (props.hasOwnProperty(name)) {\n      subObj.prototype[name] = props[name];\n    }\n  }\n\n  return subObj;\n};\n\n/**\n * Create a new instace of this Object class\n *\n *     var myAnimal = Animal.create();\n *\n * @return {vjs.CoreObject} An instance of a CoreObject subclass\n * @this {*}\n */\nvjs.CoreObject.create = function(){\n  // Create a new object that inherits from this object's prototype\n  var inst = vjs.obj.create(this.prototype);\n\n  // Apply this constructor function to the new object\n  this.apply(inst, arguments);\n\n  // Return the new object\n  return inst;\n};\n/**\n * @fileoverview Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n * @param  {Element|Object}   elem Element or object to bind listeners to\n * @param  {String}   type Type of event to bind to.\n * @param  {Function} fn   Event listener.\n * @private\n */\nvjs.on = function(elem, type, fn){\n  var data = vjs.getData(elem);\n\n  // We need a place to store all our handler data\n  if (!data.handlers) data.handlers = {};\n\n  if (!data.handlers[type]) data.handlers[type] = [];\n\n  if (!fn.guid) fn.guid = vjs.guid++;\n\n  data.handlers[type].push(fn);\n\n  if (!data.dispatcher) {\n    data.disabled = false;\n\n    data.dispatcher = function (event){\n\n      if (data.disabled) return;\n      event = vjs.fixEvent(event);\n\n      var handlers = data.handlers[event.type];\n\n      if (handlers) {\n        // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n        var handlersCopy = handlers.slice(0);\n\n        for (var m = 0, n = handlersCopy.length; m < n; m++) {\n          if (event.isImmediatePropagationStopped()) {\n            break;\n          } else {\n            handlersCopy[m].call(elem, event);\n          }\n        }\n      }\n    };\n  }\n\n  if (data.handlers[type].length == 1) {\n    if (document.addEventListener) {\n      elem.addEventListener(type, data.dispatcher, false);\n    } else if (document.attachEvent) {\n      elem.attachEvent('on' + type, data.dispatcher);\n    }\n  }\n};\n\n/**\n * Removes event listeners from an element\n * @param  {Element|Object}   elem Object to remove listeners from\n * @param  {String=}   type Type of listener to remove. Don't include to remove all events from element.\n * @param  {Function} fn   Specific listener to remove. Don't incldue to remove listeners for an event type.\n * @private\n */\nvjs.off = function(elem, type, fn) {\n  // Don't want to add a cache object through getData if not needed\n  if (!vjs.hasData(elem)) return;\n\n  var data = vjs.getData(elem);\n\n  // If no events exist, nothing to unbind\n  if (!data.handlers) { return; }\n\n  // Utility function\n  var removeType = function(t){\n     data.handlers[t] = [];\n     vjs.cleanUpEvents(elem,t);\n  };\n\n  // Are we removing all bound events?\n  if (!type) {\n    for (var t in data.handlers) removeType(t);\n    return;\n  }\n\n  var handlers = data.handlers[type];\n\n  // If no handlers exist, nothing to unbind\n  if (!handlers) return;\n\n  // If no listener was provided, remove all listeners for type\n  if (!fn) {\n    removeType(type);\n    return;\n  }\n\n  // We're only removing a single handler\n  if (fn.guid) {\n    for (var n = 0; n < handlers.length; n++) {\n      if (handlers[n].guid === fn.guid) {\n        handlers.splice(n--, 1);\n      }\n    }\n  }\n\n  vjs.cleanUpEvents(elem, type);\n};\n\n/**\n * Clean up the listener cache and dispatchers\n * @param  {Element|Object} elem Element to clean up\n * @param  {String} type Type of event to clean up\n * @private\n */\nvjs.cleanUpEvents = function(elem, type) {\n  var data = vjs.getData(elem);\n\n  // Remove the events of a particular type if there are none left\n  if (data.handlers[type].length === 0) {\n    delete data.handlers[type];\n    // data.handlers[type] = null;\n    // Setting to null was causing an error with data.handlers\n\n    // Remove the meta-handler from the element\n    if (document.removeEventListener) {\n      elem.removeEventListener(type, data.dispatcher, false);\n    } else if (document.detachEvent) {\n      elem.detachEvent('on' + type, data.dispatcher);\n    }\n  }\n\n  // Remove the events object if there are no types left\n  if (vjs.isEmpty(data.handlers)) {\n    delete data.handlers;\n    delete data.dispatcher;\n    delete data.disabled;\n\n    // data.handlers = null;\n    // data.dispatcher = null;\n    // data.disabled = null;\n  }\n\n  // Finally remove the expando if there is no data left\n  if (vjs.isEmpty(data)) {\n    vjs.removeData(elem);\n  }\n};\n\n/**\n * Fix a native event to have standard property values\n * @param  {Object} event Event object to fix\n * @return {Object}\n * @private\n */\nvjs.fixEvent = function(event) {\n\n  function returnTrue() { return true; }\n  function returnFalse() { return false; }\n\n  // Test if fixing up is needed\n  // Used to check if !event.stopPropagation instead of isPropagationStopped\n  // But native events return true for stopPropagation, but don't have\n  // other expected methods like isPropagationStopped. Seems to be a problem\n  // with the Javascript Ninja code. So we're just overriding all events now.\n  if (!event || !event.isPropagationStopped) {\n    var old = event || window.event;\n\n    event = {};\n    // Clone the old object so that we can modify the values event = {};\n    // IE8 Doesn't like when you mess with native event properties\n    // Firefox returns false for event.hasOwnProperty('type') and other props\n    //  which makes copying more difficult.\n    // TODO: Probably best to create a whitelist of event props\n    for (var key in old) {\n      // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n      if (key !== 'layerX' && key !== 'layerY') {\n        event[key] = old[key];\n      }\n    }\n\n    // The event occurred on this element\n    if (!event.target) {\n      event.target = event.srcElement || document;\n    }\n\n    // Handle which other element the event is related to\n    event.relatedTarget = event.fromElement === event.target ?\n      event.toElement :\n      event.fromElement;\n\n    // Stop the default browser action\n    event.preventDefault = function () {\n      if (old.preventDefault) {\n        old.preventDefault();\n      }\n      event.returnValue = false;\n      event.isDefaultPrevented = returnTrue;\n    };\n\n    event.isDefaultPrevented = returnFalse;\n\n    // Stop the event from bubbling\n    event.stopPropagation = function () {\n      if (old.stopPropagation) {\n        old.stopPropagation();\n      }\n      event.cancelBubble = true;\n      event.isPropagationStopped = returnTrue;\n    };\n\n    event.isPropagationStopped = returnFalse;\n\n    // Stop the event from bubbling and executing other handlers\n    event.stopImmediatePropagation = function () {\n      if (old.stopImmediatePropagation) {\n        old.stopImmediatePropagation();\n      }\n      event.isImmediatePropagationStopped = returnTrue;\n      event.stopPropagation();\n    };\n\n    event.isImmediatePropagationStopped = returnFalse;\n\n    // Handle mouse position\n    if (event.clientX != null) {\n      var doc = document.documentElement, body = document.body;\n\n      event.pageX = event.clientX +\n        (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n        (doc && doc.clientLeft || body && body.clientLeft || 0);\n      event.pageY = event.clientY +\n        (doc && doc.scrollTop || body && body.scrollTop || 0) -\n        (doc && doc.clientTop || body && body.clientTop || 0);\n    }\n\n    // Handle key presses\n    event.which = event.charCode || event.keyCode;\n\n    // Fix button for mouse clicks:\n    // 0 == left; 1 == middle; 2 == right\n    if (event.button != null) {\n      event.button = (event.button & 1 ? 0 :\n        (event.button & 4 ? 1 :\n          (event.button & 2 ? 2 : 0)));\n    }\n  }\n\n  // Returns fixed-up instance\n  return event;\n};\n\n/**\n * Trigger an event for an element\n * @param  {Element|Object} elem  Element to trigger an event on\n * @param  {String} event Type of event to trigger\n * @private\n */\nvjs.trigger = function(elem, event) {\n  // Fetches element data and a reference to the parent (for bubbling).\n  // Don't want to add a data object to cache for every parent,\n  // so checking hasData first.\n  var elemData = (vjs.hasData(elem)) ? vjs.getData(elem) : {};\n  var parent = elem.parentNode || elem.ownerDocument;\n      // type = event.type || event,\n      // handler;\n\n  // If an event name was passed as a string, creates an event out of it\n  if (typeof event === 'string') {\n    event = { type:event, target:elem };\n  }\n  // Normalizes the event properties.\n  event = vjs.fixEvent(event);\n\n  // If the passed element has a dispatcher, executes the established handlers.\n  if (elemData.dispatcher) {\n    elemData.dispatcher.call(elem, event);\n  }\n\n  // Unless explicitly stopped or the event does not bubble (e.g. media events)\n    // recursively calls this function to bubble the event up the DOM.\n    if (parent && !event.isPropagationStopped() && event.bubbles !== false) {\n    vjs.trigger(parent, event);\n\n  // If at the top of the DOM, triggers the default action unless disabled.\n  } else if (!parent && !event.isDefaultPrevented()) {\n    var targetData = vjs.getData(event.target);\n\n    // Checks if the target has a default action for this event.\n    if (event.target[event.type]) {\n      // Temporarily disables event dispatching on the target as we have already executed the handler.\n      targetData.disabled = true;\n      // Executes the default action.\n      if (typeof event.target[event.type] === 'function') {\n        event.target[event.type]();\n      }\n      // Re-enables event dispatching.\n      targetData.disabled = false;\n    }\n  }\n\n  // Inform the triggerer if the default was prevented by returning false\n  return !event.isDefaultPrevented();\n  /* Original version of js ninja events wasn't complete.\n   * We've since updated to the latest version, but keeping this around\n   * for now just in case.\n   */\n  // // Added in attion to book. Book code was broke.\n  // event = typeof event === 'object' ?\n  //   event[vjs.expando] ?\n  //     event :\n  //     new vjs.Event(type, event) :\n  //   new vjs.Event(type);\n\n  // event.type = type;\n  // if (handler) {\n  //   handler.call(elem, event);\n  // }\n\n  // // Clean up the event in case it is being reused\n  // event.result = undefined;\n  // event.target = elem;\n};\n\n/**\n * Trigger a listener only once for an event\n * @param  {Element|Object}   elem Element or object to\n * @param  {String}   type\n * @param  {Function} fn\n * @private\n */\nvjs.one = function(elem, type, fn) {\n  var func = function(){\n    vjs.off(elem, type, func);\n    fn.apply(this, arguments);\n  };\n  func.guid = fn.guid = fn.guid || vjs.guid++;\n  vjs.on(elem, type, func);\n};\nvar hasOwnProp = Object.prototype.hasOwnProperty;\n\n/**\n * Creates an element and applies properties.\n * @param  {String=} tagName    Name of tag to be created.\n * @param  {Object=} properties Element properties to be applied.\n * @return {Element}\n * @private\n */\nvjs.createEl = function(tagName, properties){\n  var el, propName;\n\n  el = document.createElement(tagName || 'div');\n\n  for (propName in properties){\n    if (hasOwnProp.call(properties, propName)) {\n      //el[propName] = properties[propName];\n      // Not remembering why we were checking for dash\n      // but using setAttribute means you have to use getAttribute\n\n      // The check for dash checks for the aria-* attributes, like aria-label, aria-valuemin.\n      // The additional check for \"role\" is because the default method for adding attributes does not\n      // add the attribute \"role\". My guess is because it's not a valid attribute in some namespaces, although\n      // browsers handle the attribute just fine. The W3C allows for aria-* attributes to be used in pre-HTML5 docs.\n      // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem.\n\n       if (propName.indexOf('aria-') !== -1 || propName=='role') {\n         el.setAttribute(propName, properties[propName]);\n       } else {\n         el[propName] = properties[propName];\n       }\n    }\n  }\n  return el;\n};\n\n/**\n * Uppercase the first letter of a string\n * @param  {String} string String to be uppercased\n * @return {String}\n * @private\n */\nvjs.capitalize = function(string){\n  return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n/**\n * Object functions container\n * @type {Object}\n * @private\n */\nvjs.obj = {};\n\n/**\n * Object.create shim for prototypal inheritance\n *\n * https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create\n *\n * @function\n * @param  {Object}   obj Object to use as prototype\n * @private\n */\n vjs.obj.create = Object.create || function(obj){\n  //Create a new function called 'F' which is just an empty object.\n  function F() {}\n\n  //the prototype of the 'F' function should point to the\n  //parameter of the anonymous function.\n  F.prototype = obj;\n\n  //create a new constructor function based off of the 'F' function.\n  return new F();\n};\n\n/**\n * Loop through each property in an object and call a function\n * whose arguments are (key,value)\n * @param  {Object}   obj Object of properties\n * @param  {Function} fn  Function to be called on each property.\n * @this {*}\n * @private\n */\nvjs.obj.each = function(obj, fn, context){\n  for (var key in obj) {\n    if (hasOwnProp.call(obj, key)) {\n      fn.call(context || this, key, obj[key]);\n    }\n  }\n};\n\n/**\n * Merge two objects together and return the original.\n * @param  {Object} obj1\n * @param  {Object} obj2\n * @return {Object}\n * @private\n */\nvjs.obj.merge = function(obj1, obj2){\n  if (!obj2) { return obj1; }\n  for (var key in obj2){\n    if (hasOwnProp.call(obj2, key)) {\n      obj1[key] = obj2[key];\n    }\n  }\n  return obj1;\n};\n\n/**\n * Merge two objects, and merge any properties that are objects\n * instead of just overwriting one. Uses to merge options hashes\n * where deeper default settings are important.\n * @param  {Object} obj1 Object to override\n * @param  {Object} obj2 Overriding object\n * @return {Object}      New object. Obj1 and Obj2 will be untouched.\n * @private\n */\nvjs.obj.deepMerge = function(obj1, obj2){\n  var key, val1, val2;\n\n  // make a copy of obj1 so we're not ovewriting original values.\n  // like prototype.options_ and all sub options objects\n  obj1 = vjs.obj.copy(obj1);\n\n  for (key in obj2){\n    if (hasOwnProp.call(obj2, key)) {\n      val1 = obj1[key];\n      val2 = obj2[key];\n\n      // Check if both properties are pure objects and do a deep merge if so\n      if (vjs.obj.isPlain(val1) && vjs.obj.isPlain(val2)) {\n        obj1[key] = vjs.obj.deepMerge(val1, val2);\n      } else {\n        obj1[key] = obj2[key];\n      }\n    }\n  }\n  return obj1;\n};\n\n/**\n * Make a copy of the supplied object\n * @param  {Object} obj Object to copy\n * @return {Object}     Copy of object\n * @private\n */\nvjs.obj.copy = function(obj){\n  return vjs.obj.merge({}, obj);\n};\n\n/**\n * Check if an object is plain, and not a dom node or any object sub-instance\n * @param  {Object} obj Object to check\n * @return {Boolean}     True if plain, false otherwise\n * @private\n */\nvjs.obj.isPlain = function(obj){\n  return !!obj\n    && typeof obj === 'object'\n    && obj.toString() === '[object Object]'\n    && obj.constructor === Object;\n};\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n   It also stores a unique id on the function so it can be easily removed from events\n * @param  {*}   context The object to bind as scope\n * @param  {Function} fn      The function to be bound to a scope\n * @param  {Number=}   uid     An optional unique ID for the function to be set\n * @return {Function}\n * @private\n */\nvjs.bind = function(context, fn, uid) {\n  // Make sure the function has a unique ID\n  if (!fn.guid) { fn.guid = vjs.guid++; }\n\n  // Create the new function that changes the context\n  var ret = function() {\n    return fn.apply(context, arguments);\n  };\n\n  // Allow for the ability to individualize this function\n  // Needed in the case where multiple objects might share the same prototype\n  // IF both items add an event listener with the same function, then you try to remove just one\n  // it will remove both because they both have the same guid.\n  // when using this, you need to use the bind method when you remove the listener as well.\n  // currently used in text tracks\n  ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n  return ret;\n};\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listneres are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n * @type {Object}\n * @private\n */\nvjs.cache = {};\n\n/**\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nvjs.guid = 1;\n\n/**\n * Unique attribute name to store an element's guid in\n * @type {String}\n * @constant\n * @private\n */\nvjs.expando = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n * @param  {Element} el Element to store data for.\n * @return {Object}\n * @private\n */\nvjs.getData = function(el){\n  var id = el[vjs.expando];\n  if (!id) {\n    id = el[vjs.expando] = vjs.guid++;\n    vjs.cache[id] = {};\n  }\n  return vjs.cache[id];\n};\n\n/**\n * Returns the cache object where data for an element is stored\n * @param  {Element} el Element to store data for.\n * @return {Object}\n * @private\n */\nvjs.hasData = function(el){\n  var id = el[vjs.expando];\n  return !(!id || vjs.isEmpty(vjs.cache[id]));\n};\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n * @param  {Element} el Remove data for an element\n * @private\n */\nvjs.removeData = function(el){\n  var id = el[vjs.expando];\n  if (!id) { return; }\n  // Remove all stored data\n  // Changed to = null\n  // http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/\n  // vjs.cache[id] = null;\n  delete vjs.cache[id];\n\n  // Remove the expando property from the DOM node\n  try {\n    delete el[vjs.expando];\n  } catch(e) {\n    if (el.removeAttribute) {\n      el.removeAttribute(vjs.expando);\n    } else {\n      // IE doesn't appear to support removeAttribute on the document element\n      el[vjs.expando] = null;\n    }\n  }\n};\n\n/**\n * Check if an object is empty\n * @param  {Object}  obj The object to check for emptiness\n * @return {Boolean}\n * @private\n */\nvjs.isEmpty = function(obj) {\n  for (var prop in obj) {\n    // Inlude null properties as empty.\n    if (obj[prop] !== null) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Add a CSS class name to an element\n * @param {Element} element    Element to add class name to\n * @param {String} classToAdd Classname to add\n * @private\n */\nvjs.addClass = function(element, classToAdd){\n  if ((' '+element.className+' ').indexOf(' '+classToAdd+' ') == -1) {\n    element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n  }\n};\n\n/**\n * Remove a CSS class name from an element\n * @param {Element} element    Element to remove from class name\n * @param {String} classToAdd Classname to remove\n * @private\n */\nvjs.removeClass = function(element, classToRemove){\n  var classNames, i;\n\n  if (element.className.indexOf(classToRemove) == -1) { return; }\n\n  classNames = element.className.split(' ');\n\n  // no arr.indexOf in ie8, and we don't want to add a big shim\n  for (i = classNames.length - 1; i >= 0; i--) {\n    if (classNames[i] === classToRemove) {\n      classNames.splice(i,1);\n    }\n  }\n\n  element.className = classNames.join(' ');\n};\n\n/**\n * Element for testing browser HTML5 video capabilities\n * @type {Element}\n * @constant\n * @private\n */\nvjs.TEST_VID = vjs.createEl('video');\n\n/**\n * Useragent for browser testing.\n * @type {String}\n * @constant\n * @private\n */\nvjs.USER_AGENT = navigator.userAgent;\n\n/**\n * Device is an iPhone\n * @type {Boolean}\n * @constant\n * @private\n */\nvjs.IS_IPHONE = (/iPhone/i).test(vjs.USER_AGENT);\nvjs.IS_IPAD = (/iPad/i).test(vjs.USER_AGENT);\nvjs.IS_IPOD = (/iPod/i).test(vjs.USER_AGENT);\nvjs.IS_IOS = vjs.IS_IPHONE || vjs.IS_IPAD || vjs.IS_IPOD;\n\nvjs.IOS_VERSION = (function(){\n  var match = vjs.USER_AGENT.match(/OS (\\d+)_/i);\n  if (match && match[1]) { return match[1]; }\n})();\n\nvjs.IS_ANDROID = (/Android/i).test(vjs.USER_AGENT);\nvjs.ANDROID_VERSION = (function() {\n  // This matches Android Major.Minor.Patch versions\n  // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n  var match = vjs.USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n    major,\n    minor;\n\n  if (!match) {\n    return null;\n  }\n\n  major = match[1] && parseFloat(match[1]);\n  minor = match[2] && parseFloat(match[2]);\n\n  if (major && minor) {\n    return parseFloat(match[1] + '.' + match[2]);\n  } else if (major) {\n    return major;\n  } else {\n    return null;\n  }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nvjs.IS_OLD_ANDROID = vjs.IS_ANDROID && (/webkit/i).test(vjs.USER_AGENT) && vjs.ANDROID_VERSION < 2.3;\n\nvjs.IS_FIREFOX = (/Firefox/i).test(vjs.USER_AGENT);\nvjs.IS_CHROME = (/Chrome/i).test(vjs.USER_AGENT);\n\nvjs.TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributs are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n * @param  {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n */\nvjs.getAttributeValues = function(tag){\n  var obj, knownBooleans, attrs, attrName, attrVal;\n\n  obj = {};\n\n  // known boolean attributes\n  // we can check for matching boolean properties, but older browsers\n  // won't know about HTML5 boolean attributes that we still read from\n  knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n  if (tag && tag.attributes && tag.attributes.length > 0) {\n    attrs = tag.attributes;\n\n    for (var i = attrs.length - 1; i >= 0; i--) {\n      attrName = attrs[i].name;\n      attrVal = attrs[i].value;\n\n      // check for known booleans\n      // the matching element property will return a value for typeof\n      if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n        // the value of an included boolean attribute is typically an empty\n        // string ('') which would equal false if we just check for a false value.\n        // we also don't want support bad code like autoplay='false'\n        attrVal = (attrVal !== null) ? true : false;\n      }\n\n      obj[attrName] = attrVal;\n    }\n  }\n\n  return obj;\n};\n\n/**\n * Get the computed style value for an element\n * From http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/\n * @param  {Element} el        Element to get style value for\n * @param  {String} strCssRule Style name\n * @return {String}            Style value\n * @private\n */\nvjs.getComputedDimension = function(el, strCssRule){\n  var strValue = '';\n  if(document.defaultView && document.defaultView.getComputedStyle){\n    strValue = document.defaultView.getComputedStyle(el, '').getPropertyValue(strCssRule);\n\n  } else if(el.currentStyle){\n    // IE8 Width/Height support\n    strValue = el['client'+strCssRule.substr(0,1).toUpperCase() + strCssRule.substr(1)] + 'px';\n  }\n  return strValue;\n};\n\n/**\n * Insert an element as the first child node of another\n * @param  {Element} child   Element to insert\n * @param  {[type]} parent Element to insert child into\n * @private\n */\nvjs.insertFirst = function(child, parent){\n  if (parent.firstChild) {\n    parent.insertBefore(child, parent.firstChild);\n  } else {\n    parent.appendChild(child);\n  }\n};\n\n/**\n * Object to hold browser support information\n * @type {Object}\n * @private\n */\nvjs.support = {};\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n * @param  {String} id  Element ID\n * @return {Element}    Element with supplied ID\n * @private\n */\nvjs.el = function(id){\n  if (id.indexOf('#') === 0) {\n    id = id.slice(1);\n  }\n\n  return document.getElementById(id);\n};\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n * @param  {Number} seconds Number of seconds to be turned into a string\n * @param  {Number} guide   Number (in seconds) to model the string after\n * @return {String}         Time formatted as H:MM:SS or M:SS\n * @private\n */\nvjs.formatTime = function(seconds, guide) {\n  // Default to using seconds as guide\n  guide = guide || seconds;\n  var s = Math.floor(seconds % 60),\n      m = Math.floor(seconds / 60 % 60),\n      h = Math.floor(seconds / 3600),\n      gm = Math.floor(guide / 60 % 60),\n      gh = Math.floor(guide / 3600);\n\n  // handle invalid times\n  if (isNaN(seconds) || seconds === Infinity) {\n    // '-' is false for all relational operators (e.g. <, >=) so this setting\n    // will add the minimum number of fields specified by the guide\n    h = m = s = '-';\n  }\n\n  // Check if we need to show hours\n  h = (h > 0 || gh > 0) ? h + ':' : '';\n\n  // If hours are showing, we may need to add a leading zero.\n  // Always show at least one digit of minutes.\n  m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n  // Check if leading zero is need for seconds\n  s = (s < 10) ? '0' + s : s;\n\n  return h + m + s;\n};\n\n// Attempt to block the ability to select text while dragging controls\nvjs.blockTextSelection = function(){\n  document.body.focus();\n  document.onselectstart = function () { return false; };\n};\n// Turn off text selection blocking\nvjs.unblockTextSelection = function(){ document.onselectstart = function () { return true; }; };\n\n/**\n * Trim whitespace from the ends of a string.\n * @param  {String} string String to trim\n * @return {String}        Trimmed string\n * @private\n */\nvjs.trim = function(str){\n  return (str+'').replace(/^\\s+|\\s+$/g, '');\n};\n\n/**\n * Should round off a number to a decimal place\n * @param  {Number} num Number to round\n * @param  {Number} dec Number of decimal places to round to\n * @return {Number}     Rounded number\n * @private\n */\nvjs.round = function(num, dec) {\n  if (!dec) { dec = 0; }\n  return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);\n};\n\n/**\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n * @param  {Number} start Start time in seconds\n * @param  {Number} end   End time in seconds\n * @return {Object}       Fake TimeRange object\n * @private\n */\nvjs.createTimeRange = function(start, end){\n  return {\n    length: 1,\n    start: function() { return start; },\n    end: function() { return end; }\n  };\n};\n\n/**\n * Simple http request for retrieving external files (e.g. text tracks)\n * @param  {String} url           URL of resource\n * @param  {Function=} onSuccess  Success callback\n * @param  {Function=} onError    Error callback\n * @private\n */\nvjs.get = function(url, onSuccess, onError){\n  var local, request;\n\n  if (typeof XMLHttpRequest === 'undefined') {\n    window.XMLHttpRequest = function () {\n      try { return new window.ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (e) {}\n      try { return new window.ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (f) {}\n      try { return new window.ActiveXObject('Msxml2.XMLHTTP'); } catch (g) {}\n      throw new Error('This browser does not support XMLHttpRequest.');\n    };\n  }\n\n  request = new XMLHttpRequest();\n  try {\n    request.open('GET', url);\n  } catch(e) {\n    onError(e);\n  }\n\n  local = (url.indexOf('file:') === 0 || (window.location.href.indexOf('file:') === 0 && url.indexOf('http') === -1));\n\n  request.onreadystatechange = function() {\n    if (request.readyState === 4) {\n      if (request.status === 200 || local && request.status === 0) {\n        onSuccess(request.responseText);\n      } else {\n        if (onError) {\n          onError();\n        }\n      }\n    }\n  };\n\n  try {\n    request.send();\n  } catch(e) {\n    if (onError) {\n      onError(e);\n    }\n  }\n};\n\n/**\n * Add to local storage (may removeable)\n * @private\n */\nvjs.setLocalStorage = function(key, value){\n  try {\n    // IE was throwing errors referencing the var anywhere without this\n    var localStorage = window.localStorage || false;\n    if (!localStorage) { return; }\n    localStorage[key] = value;\n  } catch(e) {\n    if (e.code == 22 || e.code == 1014) { // Webkit == 22 / Firefox == 1014\n      vjs.log('LocalStorage Full (VideoJS)', e);\n    } else {\n      if (e.code == 18) {\n        vjs.log('LocalStorage not allowed (VideoJS)', e);\n      } else {\n        vjs.log('LocalStorage Error (VideoJS)', e);\n      }\n    }\n  }\n};\n\n/**\n * Get abosolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n * @param  {String} url URL to make absolute\n * @return {String}     Absolute URL\n * @private\n */\nvjs.getAbsoluteURL = function(url){\n\n  // Check if absolute URL\n  if (!url.match(/^https?:\\/\\//)) {\n    // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n    url = vjs.createEl('div', {\n      innerHTML: '<a href=\"'+url+'\">x</a>'\n    }).firstChild.href;\n  }\n\n  return url;\n};\n\n// usage: log('inside coolFunc',this,arguments);\n// http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/\nvjs.log = function(){\n  vjs.log.history = vjs.log.history || [];   // store logs to an array for reference\n  vjs.log.history.push(arguments);\n  if(window.console){\n    window.console.log(Array.prototype.slice.call(arguments));\n  }\n};\n\n// Offset Left\n// getBoundingClientRect technique from John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\nvjs.findPosition = function(el) {\n    var box, docEl, body, clientLeft, scrollLeft, left, clientTop, scrollTop, top;\n\n    if (el.getBoundingClientRect && el.parentNode) {\n      box = el.getBoundingClientRect();\n    }\n\n    if (!box) {\n      return {\n        left: 0,\n        top: 0\n      };\n    }\n\n    docEl = document.documentElement;\n    body = document.body;\n\n    clientLeft = docEl.clientLeft || body.clientLeft || 0;\n    scrollLeft = window.pageXOffset || body.scrollLeft;\n    left = box.left + scrollLeft - clientLeft;\n\n    clientTop = docEl.clientTop || body.clientTop || 0;\n    scrollTop = window.pageYOffset || body.scrollTop;\n    top = box.top + scrollTop - clientTop;\n\n    return {\n      left: left,\n      top: top\n    };\n};\n/**\n * @fileoverview Player Component - Base class for all UI objects\n *\n */\n\n/**\n * Base UI Component class\n *\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n *\n *     // adding a button to the player\n *     var button = player.addChild('button');\n *     button.el(); // -> button element\n *\n *     <div class=\"video-js\">\n *       <div class=\"vjs-button\">Button</div>\n *     </div>\n *\n * Components are also event emitters.\n *\n *     button.on('click', function(){\n *       console.log('Button Clicked!');\n *     });\n *\n *     button.trigger('customevent');\n *\n * @param {Object} player  Main Player\n * @param {Object=} options\n * @class\n * @constructor\n * @extends vjs.CoreObject\n */\nvjs.Component = vjs.CoreObject.extend({\n  /**\n   * the constructor funciton for the class\n   *\n   * @constructor\n   */\n  init: function(player, options, ready){\n    this.player_ = player;\n\n    // Make a copy of prototype.options_ to protect against overriding global defaults\n    this.options_ = vjs.obj.copy(this.options_);\n\n    // Updated options with supplied options\n    options = this.options(options);\n\n    // Get ID from options, element, or create using player ID and unique ID\n    this.id_ = options['id'] || ((options['el'] && options['el']['id']) ? options['el']['id'] : player.id() + '_component_' + vjs.guid++ );\n\n    this.name_ = options['name'] || null;\n\n    // Create element if one wasn't provided in options\n    this.el_ = options['el'] || this.createEl();\n\n    this.children_ = [];\n    this.childIndex_ = {};\n    this.childNameIndex_ = {};\n\n    // Add any child components in options\n    this.initChildren();\n\n    this.ready(ready);\n    // Don't want to trigger ready here or it will before init is actually\n    // finished for all children that run this constructor\n  }\n});\n\n/**\n * Dispose of the component and all child components\n */\nvjs.Component.prototype.dispose = function(){\n  this.trigger('dispose');\n\n  // Dispose all children.\n  if (this.children_) {\n    for (var i = this.children_.length - 1; i >= 0; i--) {\n      if (this.children_[i].dispose) {\n        this.children_[i].dispose();\n      }\n    }\n  }\n\n  // Delete child references\n  this.children_ = null;\n  this.childIndex_ = null;\n  this.childNameIndex_ = null;\n\n  // Remove all event listeners.\n  this.off();\n\n  // Remove element from DOM\n  if (this.el_.parentNode) {\n    this.el_.parentNode.removeChild(this.el_);\n  }\n\n  vjs.removeData(this.el_);\n  this.el_ = null;\n};\n\n/**\n * Reference to main player instance\n *\n * @type {vjs.Player}\n * @private\n */\nvjs.Component.prototype.player_ = true;\n\n/**\n * Return the component's player\n *\n * @return {vjs.Player}\n */\nvjs.Component.prototype.player = function(){\n  return this.player_;\n};\n\n/**\n * The component's options object\n *\n * @type {Object}\n * @private\n */\nvjs.Component.prototype.options_;\n\n/**\n * Deep merge of options objects\n *\n * Whenever a property is an object on both options objects\n * the two properties will be merged using vjs.obj.deepMerge.\n *\n * This is used for merging options for child components. We\n * want it to be easy to override individual options on a child\n * component without having to rewrite all the other default options.\n *\n *     Parent.prototype.options_ = {\n *       children: {\n *         'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n *         'childTwo': {},\n *         'childThree': {}\n *       }\n *     }\n *     newOptions = {\n *       children: {\n *         'childOne': { 'foo': 'baz', 'abc': '123' }\n *         'childTwo': null,\n *         'childFour': {}\n *       }\n *     }\n *\n *     this.options(newOptions);\n *\n * RESULT\n *\n *     {\n *       children: {\n *         'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n *         'childTwo': null, // Disabled. Won't be initialized.\n *         'childThree': {},\n *         'childFour': {}\n *       }\n *     }\n *\n * @param  {Object} obj Object whose values will be overwritten\n * @return {Object}     NEW merged object. Does not return obj1.\n */\nvjs.Component.prototype.options = function(obj){\n  if (obj === undefined) return this.options_;\n\n  return this.options_ = vjs.obj.deepMerge(this.options_, obj);\n};\n\n/**\n * The DOM element for the component\n *\n * @type {Element}\n * @private\n */\nvjs.Component.prototype.el_;\n\n/**\n * Create the component's DOM element\n *\n * @param  {String=} tagName  Element's node type. e.g. 'div'\n * @param  {Object=} attributes An object of element attributes that should be set on the element\n * @return {Element}\n */\nvjs.Component.prototype.createEl = function(tagName, attributes){\n  return vjs.createEl(tagName, attributes);\n};\n\n/**\n * Get the component's DOM element\n *\n *     var domEl = myComponent.el();\n *\n * @return {Element}\n */\nvjs.Component.prototype.el = function(){\n  return this.el_;\n};\n\n/**\n * An optional element where, if defined, children will be inserted instead of\n * directly in `el_`\n *\n * @type {Element}\n * @private\n */\nvjs.Component.prototype.contentEl_;\n\n/**\n * Return the component's DOM element for embedding content.\n * Will either be el_ or a new element defined in createEl.\n *\n * @return {Element}\n */\nvjs.Component.prototype.contentEl = function(){\n  return this.contentEl_ || this.el_;\n};\n\n/**\n * The ID for the component\n *\n * @type {String}\n * @private\n */\nvjs.Component.prototype.id_;\n\n/**\n * Get the component's ID\n *\n *     var id = myComponent.id();\n *\n * @return {String}\n */\nvjs.Component.prototype.id = function(){\n  return this.id_;\n};\n\n/**\n * The name for the component. Often used to reference the component.\n *\n * @type {String}\n * @private\n */\nvjs.Component.prototype.name_;\n\n/**\n * Get the component's name. The name is often used to reference the component.\n *\n *     var name = myComponent.name();\n *\n * @return {String}\n */\nvjs.Component.prototype.name = function(){\n  return this.name_;\n};\n\n/**\n * Array of child components\n *\n * @type {Array}\n * @private\n */\nvjs.Component.prototype.children_;\n\n/**\n * Get an array of all child components\n *\n *     var kids = myComponent.children();\n *\n * @return {Array} The children\n */\nvjs.Component.prototype.children = function(){\n  return this.children_;\n};\n\n/**\n * Object of child components by ID\n *\n * @type {Object}\n * @private\n */\nvjs.Component.prototype.childIndex_;\n\n/**\n * Returns a child component with the provided ID\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.getChildById = function(id){\n  return this.childIndex_[id];\n};\n\n/**\n * Object of child components by name\n *\n * @type {Object}\n * @private\n */\nvjs.Component.prototype.childNameIndex_;\n\n/**\n * Returns a child component with the provided ID\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.getChild = function(name){\n  return this.childNameIndex_[name];\n};\n\n/**\n * Adds a child component inside this component\n *\n *     myComponent.el();\n *     // -> <div class='my-component'></div>\n *     myComonent.children();\n *     // [empty array]\n *\n *     var myButton = myComponent.addChild('MyButton');\n *     // -> <div class='my-component'><div class=\"my-button\">myButton<div></div>\n *     // -> myButton === myComonent.children()[0];\n *\n * Pass in options for child constructors and options for children of the child\n *\n *    var myButton = myComponent.addChild('MyButton', {\n *      text: 'Press Me',\n *      children: {\n *        buttonChildExample: {\n *          buttonChildOption: true\n *        }\n *      }\n *    });\n *\n * @param {String|vjs.Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {vjs.Component} The child component (created by this process if a string was used)\n * @suppress {accessControls|checkRegExp|checkTypes|checkVars|const|constantProperty|deprecated|duplicate|es5Strict|fileoverviewTags|globalThis|invalidCasts|missingProperties|nonStandardJsDocs|strictModuleDepCheck|undefinedNames|undefinedVars|unknownDefines|uselessCode|visibility}\n */\nvjs.Component.prototype.addChild = function(child, options){\n  var component, componentClass, componentName, componentId;\n\n  // If string, create new component with options\n  if (typeof child === 'string') {\n\n    componentName = child;\n\n    // Make sure options is at least an empty object to protect against errors\n    options = options || {};\n\n    // Assume name of set is a lowercased name of the UI Class (PlayButton, etc.)\n    componentClass = options['componentClass'] || vjs.capitalize(componentName);\n\n    // Set name through options\n    options['name'] = componentName;\n\n    // Create a new object & element for this controls set\n    // If there's no .player_, this is a player\n    // Closure Compiler throws an 'incomplete alias' warning if we use the vjs variable directly.\n    // Every class should be exported, so this should never be a problem here.\n    component = new window['videojs'][componentClass](this.player_ || this, options);\n\n  // child is a component instance\n  } else {\n    component = child;\n  }\n\n  this.children_.push(component);\n\n  if (typeof component.id === 'function') {\n    this.childIndex_[component.id()] = component;\n  }\n\n  // If a name wasn't used to create the component, check if we can use the\n  // name function of the component\n  componentName = componentName || (component.name && component.name());\n\n  if (componentName) {\n    this.childNameIndex_[componentName] = component;\n  }\n\n  // Add the UI object's element to the container div (box)\n  // Having an element is not required\n  if (typeof component['el'] === 'function' && component['el']()) {\n    this.contentEl().appendChild(component['el']());\n  }\n\n  // Return so it can stored on parent object if desired.\n  return component;\n};\n\n/**\n * Remove a child component from this component's list of children, and the\n * child component's element from this component's element\n *\n * @param  {vjs.Component} component Component to remove\n */\nvjs.Component.prototype.removeChild = function(component){\n  if (typeof component === 'string') {\n    component = this.getChild(component);\n  }\n\n  if (!component || !this.children_) return;\n\n  var childFound = false;\n  for (var i = this.children_.length - 1; i >= 0; i--) {\n    if (this.children_[i] === component) {\n      childFound = true;\n      this.children_.splice(i,1);\n      break;\n    }\n  }\n\n  if (!childFound) return;\n\n  this.childIndex_[component.id] = null;\n  this.childNameIndex_[component.name] = null;\n\n  var compEl = component.el();\n  if (compEl && compEl.parentNode === this.contentEl()) {\n    this.contentEl().removeChild(component.el());\n  }\n};\n\n/**\n * Add and initialize default child components from options\n *\n *     // when an instance of MyComponent is created, all children in options\n *     // will be added to the instance by their name strings and options\n *     MyComponent.prototype.options_.children = {\n *       myChildComponent: {\n *         myChildOption: true\n *       }\n *     }\n */\nvjs.Component.prototype.initChildren = function(){\n  var options = this.options_;\n\n  if (options && options['children']) {\n    var self = this;\n\n    // Loop through components and add them to the player\n    vjs.obj.each(options['children'], function(name, opts){\n      // Allow for disabling default components\n      // e.g. vjs.options['children']['posterImage'] = false\n      if (opts === false) return;\n\n      // Allow waiting to add components until a specific event is called\n      var tempAdd = function(){\n        // Set property name on player. Could cause conflicts with other prop names, but it's worth making refs easy.\n        self[name] = self.addChild(name, opts);\n      };\n\n      if (opts['loadEvent']) {\n        // this.one(opts.loadEvent, tempAdd)\n      } else {\n        tempAdd();\n      }\n    });\n  }\n};\n\n/**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n */\nvjs.Component.prototype.buildCSSClass = function(){\n    // Child classes can include a function that does:\n    // return 'CLASS NAME' + this._super();\n    return '';\n};\n\n/* Events\n============================================================================= */\n\n/**\n * Add an event listener to this component's element\n *\n *     var myFunc = function(){\n *       var myPlayer = this;\n *       // Do something when the event is fired\n *     };\n *\n *     myPlayer.on(\"eventName\", myFunc);\n *\n * The context will be the component.\n *\n * @param  {String}   type The event type e.g. 'click'\n * @param  {Function} fn   The event listener\n * @return {vjs.Component} self\n */\nvjs.Component.prototype.on = function(type, fn){\n  vjs.on(this.el_, type, vjs.bind(this, fn));\n  return this;\n};\n\n/**\n * Remove an event listener from the component's element\n *\n *     myComponent.off(\"eventName\", myFunc);\n *\n * @param  {String=}   type Event type. Without type it will remove all listeners.\n * @param  {Function=} fn   Event listener. Without fn it will remove all listeners for a type.\n * @return {vjs.Component}\n */\nvjs.Component.prototype.off = function(type, fn){\n  vjs.off(this.el_, type, fn);\n  return this;\n};\n\n/**\n * Add an event listener to be triggered only once and then removed\n *\n * @param  {String}   type Event type\n * @param  {Function} fn   Event listener\n * @return {vjs.Component}\n */\nvjs.Component.prototype.one = function(type, fn) {\n  vjs.one(this.el_, type, vjs.bind(this, fn));\n  return this;\n};\n\n/**\n * Trigger an event on an element\n *\n *     myComponent.trigger('eventName');\n *\n * @param  {String}       type  The event type to trigger, e.g. 'click'\n * @param  {Event|Object} event The event object to be passed to the listener\n * @return {vjs.Component}      self\n */\nvjs.Component.prototype.trigger = function(type, event){\n  vjs.trigger(this.el_, type, event);\n  return this;\n};\n\n/* Ready\n================================================================================ */\n/**\n * Is the component loaded\n * This can mean different things depending on the component.\n *\n * @private\n * @type {Boolean}\n */\nvjs.Component.prototype.isReady_;\n\n/**\n * Trigger ready as soon as initialization is finished\n *\n * Allows for delaying ready. Override on a sub class prototype.\n * If you set this.isReadyOnInitFinish_ it will affect all components.\n * Specially used when waiting for the Flash player to asynchrnously load.\n *\n * @type {Boolean}\n * @private\n */\nvjs.Component.prototype.isReadyOnInitFinish_ = true;\n\n/**\n * List of ready listeners\n *\n * @type {Array}\n * @private\n */\nvjs.Component.prototype.readyQueue_;\n\n/**\n * Bind a listener to the component's ready state\n *\n * Different from event listeners in that if the ready event has already happend\n * it will trigger the function immediately.\n *\n * @param  {Function} fn Ready listener\n * @return {vjs.Component}\n */\nvjs.Component.prototype.ready = function(fn){\n  if (fn) {\n    if (this.isReady_) {\n      fn.call(this);\n    } else {\n      if (this.readyQueue_ === undefined) {\n        this.readyQueue_ = [];\n      }\n      this.readyQueue_.push(fn);\n    }\n  }\n  return this;\n};\n\n/**\n * Trigger the ready listeners\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.triggerReady = function(){\n  this.isReady_ = true;\n\n  var readyQueue = this.readyQueue_;\n\n  if (readyQueue && readyQueue.length > 0) {\n\n    for (var i = 0, j = readyQueue.length; i < j; i++) {\n      readyQueue[i].call(this);\n    }\n\n    // Reset Ready Queue\n    this.readyQueue_ = [];\n\n    // Allow for using event listeners also, in case you want to do something everytime a source is ready.\n    this.trigger('ready');\n  }\n};\n\n/* Display\n============================================================================= */\n\n/**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {vjs.Component}\n */\nvjs.Component.prototype.addClass = function(classToAdd){\n  vjs.addClass(this.el_, classToAdd);\n  return this;\n};\n\n/**\n * Remove a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {vjs.Component}\n */\nvjs.Component.prototype.removeClass = function(classToRemove){\n  vjs.removeClass(this.el_, classToRemove);\n  return this;\n};\n\n/**\n * Show the component element if hidden\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.show = function(){\n  this.el_.style.display = 'block';\n  return this;\n};\n\n/**\n * Hide the component element if hidden\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.hide = function(){\n  this.el_.style.display = 'none';\n  return this;\n};\n\n/**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {vjs.Component}\n * @private\n */\nvjs.Component.prototype.lockShowing = function(){\n  this.addClass('vjs-lock-showing');\n  return this;\n};\n\n/**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {vjs.Component}\n * @private\n */\nvjs.Component.prototype.unlockShowing = function(){\n  this.removeClass('vjs-lock-showing');\n  return this;\n};\n\n/**\n * Disable component by making it unshowable\n */\nvjs.Component.prototype.disable = function(){\n  this.hide();\n  this.show = function(){};\n};\n\n/**\n * Set or get the width of the component (CSS values)\n *\n * Video tag width/height only work in pixels. No percents.\n * But allowing limited percents use. e.g. width() will return number+%, not computed width\n *\n * @param  {Number|String=} num   Optional width number\n * @param  {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {vjs.Component} Returns 'this' if width was set\n * @return {Number|String} Returns the width if nothing was set\n */\nvjs.Component.prototype.width = function(num, skipListeners){\n  return this.dimension('width', num, skipListeners);\n};\n\n/**\n * Get or set the height of the component (CSS values)\n *\n * @param  {Number|String=} num     New component height\n * @param  {Boolean=} skipListeners Skip the resize event trigger\n * @return {vjs.Component} The component if the height was set\n * @return {Number|String} The height if it wasn't set\n */\nvjs.Component.prototype.height = function(num, skipListeners){\n  return this.dimension('height', num, skipListeners);\n};\n\n/**\n * Set both width and height at the same time\n *\n * @param  {Number|String} width\n * @param  {Number|String} height\n * @return {vjs.Component} The component\n */\nvjs.Component.prototype.dimensions = function(width, height){\n  // Skip resize listeners on width for optimization\n  return this.width(width, true).height(height);\n};\n\n/**\n * Get or set width or height\n *\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n *\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param  {String} widthOrHeight  'width' or 'height'\n * @param  {Number|String=} num     New dimension\n * @param  {Boolean=} skipListeners Skip resize event trigger\n * @return {vjs.Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n */\nvjs.Component.prototype.dimension = function(widthOrHeight, num, skipListeners){\n  if (num !== undefined) {\n\n    // Check if using css width/height (% or px) and adjust\n    if ((''+num).indexOf('%') !== -1 || (''+num).indexOf('px') !== -1) {\n      this.el_.style[widthOrHeight] = num;\n    } else if (num === 'auto') {\n      this.el_.style[widthOrHeight] = '';\n    } else {\n      this.el_.style[widthOrHeight] = num+'px';\n    }\n\n    // skipListeners allows us to avoid triggering the resize event when setting both width and height\n    if (!skipListeners) { this.trigger('resize'); }\n\n    // Return component\n    return this;\n  }\n\n  // Not setting a value, so getting it\n  // Make sure element exists\n  if (!this.el_) return 0;\n\n  // Get dimension value from style\n  var val = this.el_.style[widthOrHeight];\n  var pxIndex = val.indexOf('px');\n  if (pxIndex !== -1) {\n    // Return the pixel value with no 'px'\n    return parseInt(val.slice(0,pxIndex), 10);\n\n  // No px so using % or no style was set, so falling back to offsetWidth/height\n  // If component has display:none, offset will return 0\n  // TODO: handle display:none and no dimension style using px\n  } else {\n\n    return parseInt(this.el_['offset'+vjs.capitalize(widthOrHeight)], 10);\n\n    // ComputedStyle version.\n    // Only difference is if the element is hidden it will return\n    // the percent value (e.g. '100%'')\n    // instead of zero like offsetWidth returns.\n    // var val = vjs.getComputedStyleValue(this.el_, widthOrHeight);\n    // var pxIndex = val.indexOf('px');\n\n    // if (pxIndex !== -1) {\n    //   return val.slice(0, pxIndex);\n    // } else {\n    //   return val;\n    // }\n  }\n};\n\n/**\n * Fired when the width and/or height of the component changes\n * @event resize\n */\nvjs.Component.prototype.onResize;\n\n/**\n * Emit 'tap' events when touch events are supported\n *\n * This is used to support toggling the controls through a tap on the video.\n *\n * We're requireing them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n * @private\n */\nvjs.Component.prototype.emitTapEvents = function(){\n  var touchStart, touchTime, couldBeTap, noTap;\n\n  // Track the start time so we can determine how long the touch lasted\n  touchStart = 0;\n\n  this.on('touchstart', function(event) {\n    // Record start time so we can detect a tap vs. \"touch and hold\"\n    touchStart = new Date().getTime();\n    // Reset couldBeTap tracking\n    couldBeTap = true;\n  });\n\n  noTap = function(){\n    couldBeTap = false;\n  };\n  // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n  this.on('touchmove', noTap);\n  this.on('touchleave', noTap);\n  this.on('touchcancel', noTap);\n\n  // When the touch ends, measure how long it took and trigger the appropriate\n  // event\n  this.on('touchend', function() {\n    // Proceed only if the touchmove/leave/cancel event didn't happen\n    if (couldBeTap === true) {\n      // Measure how long the touch lasted\n      touchTime = new Date().getTime() - touchStart;\n      // The touch needs to be quick in order to consider it a tap\n      if (touchTime < 250) {\n        this.trigger('tap');\n        // It may be good to copy the touchend event object and change the\n        // type to tap, if the other event properties aren't exact after\n        // vjs.fixEvent runs (e.g. event.target)\n      }\n    }\n  });\n};\n/* Button - Base class for all buttons\n================================================================================ */\n/**\n * Base class for all buttons\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.Button = vjs.Component.extend({\n  /**\n   * @constructor\n   * @inheritDoc\n   */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    var touchstart = false;\n    this.on('touchstart', function(event) {\n      // Stop click and other mouse events from triggering also\n      event.preventDefault();\n      touchstart = true;\n    });\n    this.on('touchmove', function() {\n      touchstart = false;\n    });\n    var self = this;\n    this.on('touchend', function(event) {\n      if (touchstart) {\n        self.onClick(event);\n      }\n      event.preventDefault();\n    });\n\n    this.on('click', this.onClick);\n    this.on('focus', this.onFocus);\n    this.on('blur', this.onBlur);\n  }\n});\n\nvjs.Button.prototype.createEl = function(type, props){\n  // Add standard Aria and Tabindex info\n  props = vjs.obj.merge({\n    className: this.buildCSSClass(),\n    innerHTML: '<div class=\"vjs-control-content\"><span class=\"vjs-control-text\">' + (this.buttonText || 'Need Text') + '</span></div>',\n    role: 'button',\n    'aria-live': 'polite', // let the screen reader user know that the text of the button may change\n    tabIndex: 0\n  }, props);\n\n  return vjs.Component.prototype.createEl.call(this, type, props);\n};\n\nvjs.Button.prototype.buildCSSClass = function(){\n  // TODO: Change vjs-control to vjs-button?\n  return 'vjs-control ' + vjs.Component.prototype.buildCSSClass.call(this);\n};\n\n  // Click - Override with specific functionality for button\nvjs.Button.prototype.onClick = function(){};\n\n  // Focus - Add keyboard functionality to element\nvjs.Button.prototype.onFocus = function(){\n  vjs.on(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n\n  // KeyPress (document level) - Trigger click when keys are pressed\nvjs.Button.prototype.onKeyPress = function(event){\n  // Check for space bar (32) or enter (13) keys\n  if (event.which == 32 || event.which == 13) {\n    event.preventDefault();\n    this.onClick();\n  }\n};\n\n// Blur - Remove keyboard triggers\nvjs.Button.prototype.onBlur = function(){\n  vjs.off(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n/* Slider\n================================================================================ */\n/**\n * The base functionality for sliders like the volume bar and seek bar\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.Slider = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    // Set property names to bar and handle to match with the child Slider class is looking for\n    this.bar = this.getChild(this.options_['barName']);\n    this.handle = this.getChild(this.options_['handleName']);\n\n    player.on(this.playerEvent, vjs.bind(this, this.update));\n\n    this.on('mousedown', this.onMouseDown);\n    this.on('touchstart', this.onMouseDown);\n    this.on('focus', this.onFocus);\n    this.on('blur', this.onBlur);\n    this.on('click', this.onClick);\n\n    this.player_.on('controlsvisible', vjs.bind(this, this.update));\n\n    // This is actually to fix the volume handle position. http://twitter.com/#!/gerritvanaaken/status/159046254519787520\n    // this.player_.one('timeupdate', vjs.bind(this, this.update));\n\n    player.ready(vjs.bind(this, this.update));\n\n    this.boundEvents = {};\n  }\n});\n\nvjs.Slider.prototype.createEl = function(type, props) {\n  props = props || {};\n  // Add the slider element class to all sub classes\n  props.className = props.className + ' vjs-slider';\n  props = vjs.obj.merge({\n    role: 'slider',\n    'aria-valuenow': 0,\n    'aria-valuemin': 0,\n    'aria-valuemax': 100,\n    tabIndex: 0\n  }, props);\n\n  return vjs.Component.prototype.createEl.call(this, type, props);\n};\n\nvjs.Slider.prototype.onMouseDown = function(event){\n  event.preventDefault();\n  vjs.blockTextSelection();\n\n  this.boundEvents.move = vjs.bind(this, this.onMouseMove);\n  this.boundEvents.end = vjs.bind(this, this.onMouseUp);\n\n  vjs.on(document, 'mousemove', this.boundEvents.move);\n  vjs.on(document, 'mouseup', this.boundEvents.end);\n  vjs.on(document, 'touchmove', this.boundEvents.move);\n  vjs.on(document, 'touchend', this.boundEvents.end);\n\n  this.onMouseMove(event);\n};\n\nvjs.Slider.prototype.onMouseUp = function() {\n  vjs.unblockTextSelection();\n  vjs.off(document, 'mousemove', this.boundEvents.move, false);\n  vjs.off(document, 'mouseup', this.boundEvents.end, false);\n  vjs.off(document, 'touchmove', this.boundEvents.move, false);\n  vjs.off(document, 'touchend', this.boundEvents.end, false);\n\n  this.update();\n};\n\nvjs.Slider.prototype.update = function(){\n  // In VolumeBar init we have a setTimeout for update that pops and update to the end of the\n  // execution stack. The player is destroyed before then update will cause an error\n  if (!this.el_) return;\n\n  // If scrubbing, we could use a cached value to make the handle keep up with the user's mouse.\n  // On HTML5 browsers scrubbing is really smooth, but some flash players are slow, so we might want to utilize this later.\n  // var progress =  (this.player_.scrubbing) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration();\n\n  var barProgress,\n      progress = this.getPercent(),\n      handle = this.handle,\n      bar = this.bar;\n\n  // Protect against no duration and other division issues\n  if (isNaN(progress)) { progress = 0; }\n\n  barProgress = progress;\n\n  // If there is a handle, we need to account for the handle in our calculation for progress bar\n  // so that it doesn't fall short of or extend past the handle.\n  if (handle) {\n\n    var box = this.el_,\n        boxWidth = box.offsetWidth,\n\n        handleWidth = handle.el().offsetWidth,\n\n        // The width of the handle in percent of the containing box\n        // In IE, widths may not be ready yet causing NaN\n        handlePercent = (handleWidth) ? handleWidth / boxWidth : 0,\n\n        // Get the adjusted size of the box, considering that the handle's center never touches the left or right side.\n        // There is a margin of half the handle's width on both sides.\n        boxAdjustedPercent = 1 - handlePercent,\n\n        // Adjust the progress that we'll use to set widths to the new adjusted box width\n        adjustedProgress = progress * boxAdjustedPercent;\n\n    // The bar does reach the left side, so we need to account for this in the bar's width\n    barProgress = adjustedProgress + (handlePercent / 2);\n\n    // Move the handle from the left based on the adjected progress\n    handle.el().style.left = vjs.round(adjustedProgress * 100, 2) + '%';\n  }\n\n  // Set the new bar width\n  bar.el().style.width = vjs.round(barProgress * 100, 2) + '%';\n};\n\nvjs.Slider.prototype.calculateDistance = function(event){\n  var el, box, boxX, boxY, boxW, boxH, handle, pageX, pageY;\n\n  el = this.el_;\n  box = vjs.findPosition(el);\n  boxW = boxH = el.offsetWidth;\n  handle = this.handle;\n\n  if (this.options_.vertical) {\n    boxY = box.top;\n\n    if (event.changedTouches) {\n      pageY = event.changedTouches[0].pageY;\n    } else {\n      pageY = event.pageY;\n    }\n\n    if (handle) {\n      var handleH = handle.el().offsetHeight;\n      // Adjusted X and Width, so handle doesn't go outside the bar\n      boxY = boxY + (handleH / 2);\n      boxH = boxH - handleH;\n    }\n\n    // Percent that the click is through the adjusted area\n    return Math.max(0, Math.min(1, ((boxY - pageY) + boxH) / boxH));\n\n  } else {\n    boxX = box.left;\n\n    if (event.changedTouches) {\n      pageX = event.changedTouches[0].pageX;\n    } else {\n      pageX = event.pageX;\n    }\n\n    if (handle) {\n      var handleW = handle.el().offsetWidth;\n\n      // Adjusted X and Width, so handle doesn't go outside the bar\n      boxX = boxX + (handleW / 2);\n      boxW = boxW - handleW;\n    }\n\n    // Percent that the click is through the adjusted area\n    return Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n  }\n};\n\nvjs.Slider.prototype.onFocus = function(){\n  vjs.on(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n\nvjs.Slider.prototype.onKeyPress = function(event){\n  if (event.which == 37) { // Left Arrow\n    event.preventDefault();\n    this.stepBack();\n  } else if (event.which == 39) { // Right Arrow\n    event.preventDefault();\n    this.stepForward();\n  }\n};\n\nvjs.Slider.prototype.onBlur = function(){\n  vjs.off(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n\n/**\n * Listener for click events on slider, used to prevent clicks\n *   from bubbling up to parent elements like button menus.\n * @param  {Object} event Event object\n */\nvjs.Slider.prototype.onClick = function(event){\n  event.stopImmediatePropagation();\n  event.preventDefault();\n};\n\n/**\n * SeekBar Behavior includes play progress bar, and seek handle\n * Needed so it can determine seek position based on handle position/size\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.SliderHandle = vjs.Component.extend();\n\n/**\n * Default value of the slider\n *\n * @type {Number}\n * @private\n */\nvjs.SliderHandle.prototype.defaultValue = 0;\n\n/** @inheritDoc */\nvjs.SliderHandle.prototype.createEl = function(type, props) {\n  props = props || {};\n  // Add the slider element class to all sub classes\n  props.className = props.className + ' vjs-slider-handle';\n  props = vjs.obj.merge({\n    innerHTML: '<span class=\"vjs-control-text\">'+this.defaultValue+'</span>'\n  }, props);\n\n  return vjs.Component.prototype.createEl.call(this, 'div', props);\n};\n/* Menu\n================================================================================ */\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.Menu = vjs.Component.extend();\n\n/**\n * Add a menu item to the menu\n * @param {Object|String} component Component or component type to add\n */\nvjs.Menu.prototype.addItem = function(component){\n  this.addChild(component);\n  component.on('click', vjs.bind(this, function(){\n    this.unlockShowing();\n  }));\n};\n\n/** @inheritDoc */\nvjs.Menu.prototype.createEl = function(){\n  var contentElType = this.options().contentElType || 'ul';\n  this.contentEl_ = vjs.createEl(contentElType, {\n    className: 'vjs-menu-content'\n  });\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    append: this.contentEl_,\n    className: 'vjs-menu'\n  });\n  el.appendChild(this.contentEl_);\n\n  // Prevent clicks from bubbling up. Needed for Menu Buttons,\n  // where a click on the parent is significant\n  vjs.on(el, 'click', function(event){\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  });\n\n  return el;\n};\n\n/**\n * The component for a menu item. `<li>`\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.MenuItem = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n    this.selected(options['selected']);\n  }\n});\n\n/** @inheritDoc */\nvjs.MenuItem.prototype.createEl = function(type, props){\n  return vjs.Button.prototype.createEl.call(this, 'li', vjs.obj.merge({\n    className: 'vjs-menu-item',\n    innerHTML: this.options_['label']\n  }, props));\n};\n\n/**\n * Handle a click on the menu item, and set it to selected\n */\nvjs.MenuItem.prototype.onClick = function(){\n  this.selected(true);\n};\n\n/**\n * Set this menu item as selected or not\n * @param  {Boolean} selected\n */\nvjs.MenuItem.prototype.selected = function(selected){\n  if (selected) {\n    this.addClass('vjs-selected');\n    this.el_.setAttribute('aria-selected',true);\n  } else {\n    this.removeClass('vjs-selected');\n    this.el_.setAttribute('aria-selected',false);\n  }\n};\n\n\n/**\n * A button class with a popup menu\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.MenuButton = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    this.menu = this.createMenu();\n\n    // Add list to element\n    this.addChild(this.menu);\n\n    // Automatically hide empty menu buttons\n    if (this.items && this.items.length === 0) {\n      this.hide();\n    }\n\n    this.on('keyup', this.onKeyPress);\n    this.el_.setAttribute('aria-haspopup', true);\n    this.el_.setAttribute('role', 'button');\n  }\n});\n\n/**\n * Track the state of the menu button\n * @type {Boolean}\n * @private\n */\nvjs.MenuButton.prototype.buttonPressed_ = false;\n\nvjs.MenuButton.prototype.createMenu = function(){\n  var menu = new vjs.Menu(this.player_);\n\n  // Add a title list item to the top\n  if (this.options().title) {\n    menu.el().appendChild(vjs.createEl('li', {\n      className: 'vjs-menu-title',\n      innerHTML: vjs.capitalize(this.kind_),\n      tabindex: -1\n    }));\n  }\n\n  this.items = this['createItems']();\n\n  if (this.items) {\n    // Add menu items to the menu\n    for (var i = 0; i < this.items.length; i++) {\n      menu.addItem(this.items[i]);\n    }\n  }\n\n  return menu;\n};\n\n/**\n * Create the list of menu items. Specific to each subclass.\n */\nvjs.MenuButton.prototype.createItems = function(){};\n\n/** @inheritDoc */\nvjs.MenuButton.prototype.buildCSSClass = function(){\n  return this.className + ' vjs-menu-button ' + vjs.Button.prototype.buildCSSClass.call(this);\n};\n\n// Focus - Add keyboard functionality to element\n// This function is not needed anymore. Instead, the keyboard functionality is handled by\n// treating the button as triggering a submenu. When the button is pressed, the submenu\n// appears. Pressing the button again makes the submenu disappear.\nvjs.MenuButton.prototype.onFocus = function(){};\n// Can't turn off list display that we turned on with focus, because list would go away.\nvjs.MenuButton.prototype.onBlur = function(){};\n\nvjs.MenuButton.prototype.onClick = function(){\n  // When you click the button it adds focus, which will show the menu indefinitely.\n  // So we'll remove focus when the mouse leaves the button.\n  // Focus is needed for tab navigation.\n  this.one('mouseout', vjs.bind(this, function(){\n    this.menu.unlockShowing();\n    this.el_.blur();\n  }));\n  if (this.buttonPressed_){\n    this.unpressButton();\n  } else {\n    this.pressButton();\n  }\n};\n\nvjs.MenuButton.prototype.onKeyPress = function(event){\n  event.preventDefault();\n\n  // Check for space bar (32) or enter (13) keys\n  if (event.which == 32 || event.which == 13) {\n    if (this.buttonPressed_){\n      this.unpressButton();\n    } else {\n      this.pressButton();\n    }\n  // Check for escape (27) key\n  } else if (event.which == 27){\n    if (this.buttonPressed_){\n      this.unpressButton();\n    }\n  }\n};\n\nvjs.MenuButton.prototype.pressButton = function(){\n  this.buttonPressed_ = true;\n  this.menu.lockShowing();\n  this.el_.setAttribute('aria-pressed', true);\n  if (this.items && this.items.length > 0) {\n    this.items[0].el().focus(); // set the focus to the title of the submenu\n  }\n};\n\nvjs.MenuButton.prototype.unpressButton = function(){\n  this.buttonPressed_ = false;\n  this.menu.unlockShowing();\n  this.el_.setAttribute('aria-pressed', false);\n};\n\n/**\n * An instance of the `vjs.Player` class is created when any of the Video.js setup methods are used to initialize a video.\n *\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n *\n * In the follwing example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n *\n * ```html\n * <video id=\"example_video_1\" data-setup='{}' controls>\n *   <source src=\"my-source.mp4\" type=\"video/mp4\">\n * </video>\n * ```\n *\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @class\n * @extends vjs.Component\n */\nvjs.Player = vjs.Component.extend({\n\n  /**\n   * player's constructor function\n   *\n   * @constructs\n   * @method init\n   * @param {Element} tag        The original video tag used for configuring options\n   * @param {Object=} options    Player options\n   * @param {Function=} ready    Ready callback function\n   */\n  init: function(tag, options, ready){\n    this.tag = tag; // Store the original tag used to set options\n\n    // Set Options\n    // The options argument overrides options set in the video tag\n    // which overrides globally set options.\n    // This latter part coincides with the load order\n    // (tag must exist before Player)\n    options = vjs.obj.merge(this.getTagSettings(tag), options);\n\n    // Cache for video property values.\n    this.cache_ = {};\n\n    // Set poster\n    this.poster_ = options['poster'];\n    // Set controls\n    this.controls_ = options['controls'];\n    // Original tag settings stored in options\n    // now remove immediately so native controls don't flash.\n    // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n    tag.controls = false;\n\n    // Run base component initializing with new options.\n    // Builds the element through createEl()\n    // Inits and embeds any child components in opts\n    vjs.Component.call(this, this, options, ready);\n\n    // Update controls className. Can't do this when the controls are initially\n    // set because the element doesn't exist yet.\n    if (this.controls()) {\n      this.addClass('vjs-controls-enabled');\n    } else {\n      this.addClass('vjs-controls-disabled');\n    }\n\n    // TODO: Make this smarter. Toggle user state between touching/mousing\n    // using events, since devices can have both touch and mouse events.\n    // if (vjs.TOUCH_ENABLED) {\n    //   this.addClass('vjs-touch-enabled');\n    // }\n\n    // Firstplay event implimentation. Not sold on the event yet.\n    // Could probably just check currentTime==0?\n    this.one('play', function(e){\n      var fpEvent = { type: 'firstplay', target: this.el_ };\n      // Using vjs.trigger so we can check if default was prevented\n      var keepGoing = vjs.trigger(this.el_, fpEvent);\n\n      if (!keepGoing) {\n        e.preventDefault();\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n      }\n    });\n\n    this.on('ended', this.onEnded);\n    this.on('play', this.onPlay);\n    this.on('firstplay', this.onFirstPlay);\n    this.on('pause', this.onPause);\n    this.on('progress', this.onProgress);\n    this.on('durationchange', this.onDurationChange);\n    this.on('error', this.onError);\n    this.on('fullscreenchange', this.onFullscreenChange);\n\n    // Make player easily findable by ID\n    vjs.players[this.id_] = this;\n\n    if (options['plugins']) {\n      vjs.obj.each(options['plugins'], function(key, val){\n        this[key](val);\n      }, this);\n    }\n\n    this.listenForUserActivity();\n  }\n});\n\n/**\n * Player instance options, surfaced using vjs.options\n * vjs.options = vjs.Player.prototype.options_\n * Make changes in vjs.options, not here.\n * All options should use string keys so they avoid\n * renaming by closure compiler\n * @type {Object}\n * @private\n */\nvjs.Player.prototype.options_ = vjs.options;\n\n/**\n * Destroys the video player and does any necessary cleanup\n *\n *     myPlayer.dispose();\n *\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n */\nvjs.Player.prototype.dispose = function(){\n  this.trigger('dispose');\n  // prevent dispose from being called twice\n  this.off('dispose');\n\n  // Kill reference to this player\n  vjs.players[this.id_] = null;\n  if (this.tag && this.tag['player']) { this.tag['player'] = null; }\n  if (this.el_ && this.el_['player']) { this.el_['player'] = null; }\n\n  // Ensure that tracking progress and time progress will stop and plater deleted\n  this.stopTrackingProgress();\n  this.stopTrackingCurrentTime();\n\n  if (this.tech) { this.tech.dispose(); }\n\n  // Component dispose\n  vjs.Component.prototype.dispose.call(this);\n};\n\nvjs.Player.prototype.getTagSettings = function(tag){\n  var options = {\n    'sources': [],\n    'tracks': []\n  };\n\n  vjs.obj.merge(options, vjs.getAttributeValues(tag));\n\n  // Get tag children settings\n  if (tag.hasChildNodes()) {\n    var children, child, childName, i, j;\n\n    children = tag.childNodes;\n\n    for (i=0,j=children.length; i<j; i++) {\n      child = children[i];\n      // Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/\n      childName = child.nodeName.toLowerCase();\n      if (childName === 'source') {\n        options['sources'].push(vjs.getAttributeValues(child));\n      } else if (childName === 'track') {\n        options['tracks'].push(vjs.getAttributeValues(child));\n      }\n    }\n  }\n\n  return options;\n};\n\nvjs.Player.prototype.createEl = function(){\n  var el = this.el_ = vjs.Component.prototype.createEl.call(this, 'div');\n  var tag = this.tag;\n\n  // Remove width/height attrs from tag so CSS can make it 100% width/height\n  tag.removeAttribute('width');\n  tag.removeAttribute('height');\n  // Empty video tag tracks so the built-in player doesn't use them also.\n  // This may not be fast enough to stop HTML5 browsers from reading the tags\n  // so we'll need to turn off any default tracks if we're manually doing\n  // captions and subtitles. videoElement.textTracks\n  if (tag.hasChildNodes()) {\n    var nodes, nodesLength, i, node, nodeName, removeNodes;\n\n    nodes = tag.childNodes;\n    nodesLength = nodes.length;\n    removeNodes = [];\n\n    while (nodesLength--) {\n      node = nodes[nodesLength];\n      nodeName = node.nodeName.toLowerCase();\n      if (nodeName === 'track') {\n        removeNodes.push(node);\n      }\n    }\n\n    for (i=0; i<removeNodes.length; i++) {\n      tag.removeChild(removeNodes[i]);\n    }\n  }\n\n  // Make sure tag ID exists\n  tag.id = tag.id || 'vjs_video_' + vjs.guid++;\n\n  // Give video tag ID and class to player div\n  // ID will now reference player box, not the video tag\n  el.id = tag.id;\n  el.className = tag.className;\n\n  // Update tag id/class for use as HTML5 playback tech\n  // Might think we should do this after embedding in container so .vjs-tech class\n  // doesn't flash 100% width/height, but class only applies with .video-js parent\n  tag.id += '_html5_api';\n  tag.className = 'vjs-tech';\n\n  // Make player findable on elements\n  tag['player'] = el['player'] = this;\n  // Default state of video is paused\n  this.addClass('vjs-paused');\n\n  // Make box use width/height of tag, or rely on default implementation\n  // Enforce with CSS since width/height attrs don't work on divs\n  this.width(this.options_['width'], true); // (true) Skip resize listener on load\n  this.height(this.options_['height'], true);\n\n  // Wrap video tag in div (el/box) container\n  if (tag.parentNode) {\n    tag.parentNode.insertBefore(el, tag);\n  }\n  vjs.insertFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n\n  return el;\n};\n\n// /* Media Technology (tech)\n// ================================================================================ */\n// Load/Create an instance of playback technlogy including element and API methods\n// And append playback element in player div.\nvjs.Player.prototype.loadTech = function(techName, source){\n\n  // Pause and remove current playback technology\n  if (this.tech) {\n    this.unloadTech();\n\n  // if this is the first time loading, HTML5 tag will exist but won't be initialized\n  // so we need to remove it if we're not loading HTML5\n  } else if (techName !== 'Html5' && this.tag) {\n    vjs.Html5.disposeMediaElement(this.tag);\n    this.tag = null;\n  }\n\n  this.techName = techName;\n\n  // Turn off API access because we're loading a new tech that might load asynchronously\n  this.isReady_ = false;\n\n  var techReady = function(){\n    this.player_.triggerReady();\n\n    // Manually track progress in cases where the browser/flash player doesn't report it.\n    if (!this.features['progressEvents']) {\n      this.player_.manualProgressOn();\n    }\n\n    // Manually track timeudpates in cases where the browser/flash player doesn't report it.\n    if (!this.features['timeupdateEvents']) {\n      this.player_.manualTimeUpdatesOn();\n    }\n  };\n\n  // Grab tech-specific options from player options and add source and parent element to use.\n  var techOptions = vjs.obj.merge({ 'source': source, 'parentEl': this.el_ }, this.options_[techName.toLowerCase()]);\n\n  if (source) {\n    if (source.src == this.cache_.src && this.cache_.currentTime > 0) {\n      techOptions['startTime'] = this.cache_.currentTime;\n    }\n\n    this.cache_.src = source.src;\n  }\n\n  // Initialize tech instance\n  this.tech = new window['videojs'][techName](this, techOptions);\n\n  this.tech.ready(techReady);\n};\n\nvjs.Player.prototype.unloadTech = function(){\n  this.isReady_ = false;\n  this.tech.dispose();\n\n  // Turn off any manual progress or timeupdate tracking\n  if (this.manualProgress) { this.manualProgressOff(); }\n\n  if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }\n\n  this.tech = false;\n};\n\n// There's many issues around changing the size of a Flash (or other plugin) object.\n// First is a plugin reload issue in Firefox that has been around for 11 years: https://bugzilla.mozilla.org/show_bug.cgi?id=90268\n// Then with the new fullscreen API, Mozilla and webkit browsers will reload the flash object after going to fullscreen.\n// To get around this, we're unloading the tech, caching source and currentTime values, and reloading the tech once the plugin is resized.\n// reloadTech: function(betweenFn){\n//   vjs.log('unloadingTech')\n//   this.unloadTech();\n//   vjs.log('unloadedTech')\n//   if (betweenFn) { betweenFn.call(); }\n//   vjs.log('LoadingTech')\n//   this.loadTech(this.techName, { src: this.cache_.src })\n//   vjs.log('loadedTech')\n// },\n\n/* Fallbacks for unsupported event types\n================================================================================ */\n// Manually trigger progress events based on changes to the buffered amount\n// Many flash players and older HTML5 browsers don't send progress or progress-like events\nvjs.Player.prototype.manualProgressOn = function(){\n  this.manualProgress = true;\n\n  // Trigger progress watching when a source begins loading\n  this.trackProgress();\n\n  // Watch for a native progress event call on the tech element\n  // In HTML5, some older versions don't support the progress event\n  // So we're assuming they don't, and turning off manual progress if they do.\n  // As opposed to doing user agent detection\n  this.tech.one('progress', function(){\n\n    // Update known progress support for this playback technology\n    this.features['progressEvents'] = true;\n\n    // Turn off manual progress tracking\n    this.player_.manualProgressOff();\n  });\n};\n\nvjs.Player.prototype.manualProgressOff = function(){\n  this.manualProgress = false;\n  this.stopTrackingProgress();\n};\n\nvjs.Player.prototype.trackProgress = function(){\n\n  this.progressInterval = setInterval(vjs.bind(this, function(){\n    // Don't trigger unless buffered amount is greater than last time\n    // log(this.cache_.bufferEnd, this.buffered().end(0), this.duration())\n    /* TODO: update for multiple buffered regions */\n    if (this.cache_.bufferEnd < this.buffered().end(0)) {\n      this.trigger('progress');\n    } else if (this.bufferedPercent() == 1) {\n      this.stopTrackingProgress();\n      this.trigger('progress'); // Last update\n    }\n  }), 500);\n};\nvjs.Player.prototype.stopTrackingProgress = function(){ clearInterval(this.progressInterval); };\n\n/*! Time Tracking -------------------------------------------------------------- */\nvjs.Player.prototype.manualTimeUpdatesOn = function(){\n  this.manualTimeUpdates = true;\n\n  this.on('play', this.trackCurrentTime);\n  this.on('pause', this.stopTrackingCurrentTime);\n  // timeupdate is also called by .currentTime whenever current time is set\n\n  // Watch for native timeupdate event\n  this.tech.one('timeupdate', function(){\n    // Update known progress support for this playback technology\n    this.features['timeupdateEvents'] = true;\n    // Turn off manual progress tracking\n    this.player_.manualTimeUpdatesOff();\n  });\n};\n\nvjs.Player.prototype.manualTimeUpdatesOff = function(){\n  this.manualTimeUpdates = false;\n  this.stopTrackingCurrentTime();\n  this.off('play', this.trackCurrentTime);\n  this.off('pause', this.stopTrackingCurrentTime);\n};\n\nvjs.Player.prototype.trackCurrentTime = function(){\n  if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }\n  this.currentTimeInterval = setInterval(vjs.bind(this, function(){\n    this.trigger('timeupdate');\n  }), 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n};\n\n// Turn off play progress tracking (when paused or dragging)\nvjs.Player.prototype.stopTrackingCurrentTime = function(){ clearInterval(this.currentTimeInterval); };\n\n// /* Player event handlers (how the player reacts to certain events)\n// ================================================================================ */\n\n/**\n * Fired when the user agent begins looking for media data\n * @event loadstart\n */\nvjs.Player.prototype.onLoadStart;\n\n/**\n * Fired when the player has initial duration and dimension information\n * @event loadedmetadata\n */\nvjs.Player.prototype.onLoadedMetaData;\n\n/**\n * Fired when the player has downloaded data at the current playback position\n * @event loadeddata\n */\nvjs.Player.prototype.onLoadedData;\n\n/**\n * Fired when the player has finished downloading the source data\n * @event loadedalldata\n */\nvjs.Player.prototype.onLoadedAllData;\n\n/**\n * Fired whenever the media begins or resumes playback\n * @event play\n */\nvjs.Player.prototype.onPlay = function(){\n  vjs.removeClass(this.el_, 'vjs-paused');\n  vjs.addClass(this.el_, 'vjs-playing');\n};\n\n/**\n * Fired the first time a video is played\n *\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @event firstplay\n */\nvjs.Player.prototype.onFirstPlay = function(){\n    //If the first starttime attribute is specified\n    //then we will start at the given offset in seconds\n    if(this.options_['starttime']){\n      this.currentTime(this.options_['starttime']);\n    }\n\n    this.addClass('vjs-has-started');\n};\n\n/**\n * Fired whenever the media has been paused\n * @event pause\n */\nvjs.Player.prototype.onPause = function(){\n  vjs.removeClass(this.el_, 'vjs-playing');\n  vjs.addClass(this.el_, 'vjs-paused');\n};\n\n/**\n * Fired when the current playback position has changed\n *\n * During playback this is fired every 15-250 milliseconds, depnding on the\n * playback technology in use.\n * @event timeupdate\n */\nvjs.Player.prototype.onTimeUpdate;\n\n/**\n * Fired while the user agent is downloading media data\n * @event progress\n */\nvjs.Player.prototype.onProgress = function(){\n  // Add custom event for when source is finished downloading.\n  if (this.bufferedPercent() == 1) {\n    this.trigger('loadedalldata');\n  }\n};\n\n/**\n * Fired when the end of the media resource is reached (currentTime == duration)\n * @event ended\n */\nvjs.Player.prototype.onEnded = function(){\n  if (this.options_['loop']) {\n    this.currentTime(0);\n    this.play();\n  }\n};\n\n/**\n * Fired when the duration of the media resource is first known or changed\n * @event durationchange\n */\nvjs.Player.prototype.onDurationChange = function(){\n  // Allows for cacheing value instead of asking player each time.\n  this.duration(this.techGet('duration'));\n};\n\n/**\n * Fired when the volume changes\n * @event volumechange\n */\nvjs.Player.prototype.onVolumeChange;\n\n/**\n * Fired when the player switches in or out of fullscreen mode\n * @event fullscreenchange\n */\nvjs.Player.prototype.onFullscreenChange = function() {\n  if (this.isFullScreen) {\n    this.addClass('vjs-fullscreen');\n  } else {\n    this.removeClass('vjs-fullscreen');\n  }\n};\n\n/**\n * Fired when there is an error in playback\n * @event error\n */\nvjs.Player.prototype.onError = function(e) {\n  vjs.log('Video Error', e);\n};\n\n// /* Player API\n// ================================================================================ */\n\n/**\n * Object for cached values.\n * @private\n */\nvjs.Player.prototype.cache_;\n\nvjs.Player.prototype.getCache = function(){\n  return this.cache_;\n};\n\n// Pass values to the playback tech\nvjs.Player.prototype.techCall = function(method, arg){\n  // If it's not ready yet, call method when it is\n  if (this.tech && !this.tech.isReady_) {\n    this.tech.ready(function(){\n      this[method](arg);\n    });\n\n  // Otherwise call method now\n  } else {\n    try {\n      this.tech[method](arg);\n    } catch(e) {\n      vjs.log(e);\n      throw e;\n    }\n  }\n};\n\n// Get calls can't wait for the tech, and sometimes don't need to.\nvjs.Player.prototype.techGet = function(method){\n\n  if (this.tech && this.tech.isReady_) {\n\n    // Flash likes to die and reload when you hide or reposition it.\n    // In these cases the object methods go away and we get errors.\n    // When that happens we'll catch the errors and inform tech that it's not ready any more.\n    try {\n      return this.tech[method]();\n    } catch(e) {\n      // When building additional tech libs, an expected method may not be defined yet\n      if (this.tech[method] === undefined) {\n        vjs.log('Video.js: ' + method + ' method not defined for '+this.techName+' playback technology.', e);\n      } else {\n        // When a method isn't available on the object it throws a TypeError\n        if (e.name == 'TypeError') {\n          vjs.log('Video.js: ' + method + ' unavailable on '+this.techName+' playback technology element.', e);\n          this.tech.isReady_ = false;\n        } else {\n          vjs.log(e);\n        }\n      }\n      throw e;\n    }\n  }\n\n  return;\n};\n\n/**\n * start media playback\n *\n *     myPlayer.play();\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.play = function(){\n  this.techCall('play');\n  return this;\n};\n\n/**\n * Pause the video playback\n *\n *     myPlayer.pause();\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.pause = function(){\n  this.techCall('pause');\n  return this;\n};\n\n/**\n * Check if the player is paused\n *\n *     var isPaused = myPlayer.paused();\n *     var isPlaying = !myPlayer.paused();\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n */\nvjs.Player.prototype.paused = function(){\n  // The initial state of paused should be true (in Safari it's actually false)\n  return (this.techGet('paused') === false) ? false : true;\n};\n\n/**\n * Get or set the current time (in seconds)\n *\n *     // get\n *     var whereYouAt = myPlayer.currentTime();\n *\n *     // set\n *     myPlayer.currentTime(120); // 2 minutes into the video\n *\n * @param  {Number|String=} seconds The time to seek to\n * @return {Number}        The time in seconds, when not setting\n * @return {vjs.Player}    self, when the current time is set\n */\nvjs.Player.prototype.currentTime = function(seconds){\n  if (seconds !== undefined) {\n\n    // cache the last set value for smoother scrubbing\n    this.cache_.lastSetCurrentTime = seconds;\n\n    this.techCall('setCurrentTime', seconds);\n\n    // improve the accuracy of manual timeupdates\n    if (this.manualTimeUpdates) { this.trigger('timeupdate'); }\n\n    return this;\n  }\n\n  // cache last currentTime and return\n  // default to 0 seconds\n  return this.cache_.currentTime = (this.techGet('currentTime') || 0);\n};\n\n/**\n * Get the length in time of the video in seconds\n *\n *     var lengthOfVideo = myPlayer.duration();\n *\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @return {Number} The duration of the video in seconds\n */\nvjs.Player.prototype.duration = function(seconds){\n  if (seconds !== undefined) {\n\n    // cache the last set value for optimiized scrubbing (esp. Flash)\n    this.cache_.duration = parseFloat(seconds);\n\n    return this;\n  }\n\n  if (this.cache_.duration === undefined) {\n    this.onDurationChange();\n  }\n\n  return this.cache_.duration;\n};\n\n// Calculates how much time is left. Not in spec, but useful.\nvjs.Player.prototype.remainingTime = function(){\n  return this.duration() - this.currentTime();\n};\n\n// http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n// Buffered returns a timerange object.\n// Kind of like an array of portions of the video that have been downloaded.\n// So far no browsers return more than one range (portion)\n\n/**\n * Get a TimeRange object with the times of the video that have been downloaded\n *\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n *\n *     // Number of different ranges of time have been buffered. Usually 1.\n *     numberOfRanges = bufferedTimeRange.length,\n *\n *     // Time in seconds when the first range starts. Usually 0.\n *     firstRangeStart = bufferedTimeRange.start(0),\n *\n *     // Time in seconds when the first range ends\n *     firstRangeEnd = bufferedTimeRange.end(0),\n *\n *     // Length in seconds of the first time range\n *     firstRangeLength = firstRangeEnd - firstRangeStart;\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n */\nvjs.Player.prototype.buffered = function(){\n  var buffered = this.techGet('buffered'),\n      start = 0,\n      buflast = buffered.length - 1,\n      // Default end to 0 and store in values\n      end = this.cache_.bufferEnd = this.cache_.bufferEnd || 0;\n\n  if (buffered && buflast >= 0 && buffered.end(buflast) !== end) {\n    end = buffered.end(buflast);\n    // Storing values allows them be overridden by setBufferedFromProgress\n    this.cache_.bufferEnd = end;\n  }\n\n  return vjs.createTimeRange(start, end);\n};\n\n/**\n * Get the percent (as a decimal) of the video that's been downloaded\n *\n *     var howMuchIsDownloaded = myPlayer.bufferedPercent();\n *\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n */\nvjs.Player.prototype.bufferedPercent = function(){\n  return (this.duration()) ? this.buffered().end(0) / this.duration() : 0;\n};\n\n/**\n * Get or set the current volume of the media\n *\n *     // get\n *     var howLoudIsIt = myPlayer.volume();\n *\n *     // set\n *     myPlayer.volume(0.5); // Set volume to half\n *\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param  {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number}                  The current volume, when getting\n * @return {vjs.Player}              self, when setting\n */\nvjs.Player.prototype.volume = function(percentAsDecimal){\n  var vol;\n\n  if (percentAsDecimal !== undefined) {\n    vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n    this.cache_.volume = vol;\n    this.techCall('setVolume', vol);\n    vjs.setLocalStorage('volume', vol);\n    return this;\n  }\n\n  // Default to 1 when returning current volume.\n  vol = parseFloat(this.techGet('volume'));\n  return (isNaN(vol)) ? 1 : vol;\n};\n\n\n/**\n * Get the current muted state, or turn mute on or off\n *\n *     // get\n *     var isVolumeMuted = myPlayer.muted();\n *\n *     // set\n *     myPlayer.muted(true); // mute the volume\n *\n * @param  {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not, when getting\n * @return {vjs.Player} self, when setting mute\n */\nvjs.Player.prototype.muted = function(muted){\n  if (muted !== undefined) {\n    this.techCall('setMuted', muted);\n    return this;\n  }\n  return this.techGet('muted') || false; // Default to false\n};\n\n// Check if current tech can support native fullscreen (e.g. with built in controls lik iOS, so not our flash swf)\nvjs.Player.prototype.supportsFullScreen = function(){ return this.techGet('supportsFullScreen') || false; };\n\n/**\n * Increase the size of the video to full screen\n *\n *     myPlayer.requestFullScreen();\n *\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.requestFullScreen = function(){\n  var requestFullScreen = vjs.support.requestFullScreen;\n  this.isFullScreen = true;\n\n  if (requestFullScreen) {\n    // the browser supports going fullscreen at the element level so we can\n    // take the controls fullscreen as well as the video\n\n    // Trigger fullscreenchange event after change\n    // We have to specifically add this each time, and remove\n    // when cancelling fullscreen. Otherwise if there's multiple\n    // players on a page, they would all be reacting to the same fullscreen\n    // events\n    vjs.on(document, requestFullScreen.eventName, vjs.bind(this, function(e){\n      this.isFullScreen = document[requestFullScreen.isFullScreen];\n\n      // If cancelling fullscreen, remove event listener.\n      if (this.isFullScreen === false) {\n        vjs.off(document, requestFullScreen.eventName, arguments.callee);\n      }\n\n      this.trigger('fullscreenchange');\n    }));\n\n    this.el_[requestFullScreen.requestFn]();\n\n  } else if (this.tech.supportsFullScreen()) {\n    // we can't take the video.js controls fullscreen but we can go fullscreen\n    // with native controls\n    this.techCall('enterFullScreen');\n  } else {\n    // fullscreen isn't supported so we'll just stretch the video element to\n    // fill the viewport\n    this.enterFullWindow();\n    this.trigger('fullscreenchange');\n  }\n\n  return this;\n};\n\n/**\n * Return the video to its normal size after having been in full screen mode\n *\n *     myPlayer.cancelFullScreen();\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.cancelFullScreen = function(){\n  var requestFullScreen = vjs.support.requestFullScreen;\n  this.isFullScreen = false;\n\n  // Check for browser element fullscreen support\n  if (requestFullScreen) {\n    document[requestFullScreen.cancelFn]();\n  } else if (this.tech.supportsFullScreen()) {\n   this.techCall('exitFullScreen');\n  } else {\n   this.exitFullWindow();\n   this.trigger('fullscreenchange');\n  }\n\n  return this;\n};\n\n// When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\nvjs.Player.prototype.enterFullWindow = function(){\n  this.isFullWindow = true;\n\n  // Storing original doc overflow value to return to when fullscreen is off\n  this.docOrigOverflow = document.documentElement.style.overflow;\n\n  // Add listener for esc key to exit fullscreen\n  vjs.on(document, 'keydown', vjs.bind(this, this.fullWindowOnEscKey));\n\n  // Hide any scroll bars\n  document.documentElement.style.overflow = 'hidden';\n\n  // Apply fullscreen styles\n  vjs.addClass(document.body, 'vjs-full-window');\n\n  this.trigger('enterFullWindow');\n};\nvjs.Player.prototype.fullWindowOnEscKey = function(event){\n  if (event.keyCode === 27) {\n    if (this.isFullScreen === true) {\n      this.cancelFullScreen();\n    } else {\n      this.exitFullWindow();\n    }\n  }\n};\n\nvjs.Player.prototype.exitFullWindow = function(){\n  this.isFullWindow = false;\n  vjs.off(document, 'keydown', this.fullWindowOnEscKey);\n\n  // Unhide scroll bars.\n  document.documentElement.style.overflow = this.docOrigOverflow;\n\n  // Remove fullscreen styles\n  vjs.removeClass(document.body, 'vjs-full-window');\n\n  // Resize the box, controller, and poster to original sizes\n  // this.positionAll();\n  this.trigger('exitFullWindow');\n};\n\nvjs.Player.prototype.selectSource = function(sources){\n\n  // Loop through each playback technology in the options order\n  for (var i=0,j=this.options_['techOrder'];i<j.length;i++) {\n    var techName = vjs.capitalize(j[i]),\n        tech = window['videojs'][techName];\n\n    // Check if the browser supports this technology\n    if (tech.isSupported()) {\n      // Loop through each source object\n      for (var a=0,b=sources;a<b.length;a++) {\n        var source = b[a];\n\n        // Check if source can be played with this technology\n        if (tech['canPlaySource'](source)) {\n          return { source: source, tech: techName };\n        }\n      }\n    }\n  }\n\n  return false;\n};\n\n/**\n * The source function updates the video source\n *\n * There are three types of variables you can pass as the argument.\n *\n * **URL String**: A URL to the the video file. Use this method if you are sure\n * the current playback technology (HTML5/Flash) can support the source you\n * provide. Currently only MP4 files can be used in both HTML5 and Flash.\n *\n *     myPlayer.src(\"http://www.example.com/path/to/video.mp4\");\n *\n * **Source Object (or element):** A javascript object containing information\n * about the source file. Use this method if you want the player to determine if\n * it can support the file using the type information.\n *\n *     myPlayer.src({ type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" });\n *\n * **Array of Source Objects:** To provide multiple versions of the source so\n * that it can be played using HTML5 across browsers you can use an array of\n * source objects. Video.js will detect which version is supported and load that\n * file.\n *\n *     myPlayer.src([\n *       { type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" },\n *       { type: \"video/webm\", src: \"http://www.example.com/path/to/video.webm\" },\n *       { type: \"video/ogg\", src: \"http://www.example.com/path/to/video.ogv\" }\n *     ]);\n *\n * @param  {String|Object|Array=} source The source URL, object, or array of sources\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.src = function(source){\n  // Case: Array of source objects to choose from and pick the best to play\n  if (source instanceof Array) {\n\n    var sourceTech = this.selectSource(source),\n        techName;\n\n    if (sourceTech) {\n        source = sourceTech.source;\n        techName = sourceTech.tech;\n\n      // If this technology is already loaded, set source\n      if (techName == this.techName) {\n        this.src(source); // Passing the source object\n      // Otherwise load this technology with chosen source\n      } else {\n        this.loadTech(techName, source);\n      }\n    } else {\n      this.el_.appendChild(vjs.createEl('p', {\n        innerHTML: this.options()['notSupportedMessage']\n      }));\n    }\n\n  // Case: Source object { src: '', type: '' ... }\n  } else if (source instanceof Object) {\n\n    if (window['videojs'][this.techName]['canPlaySource'](source)) {\n      this.src(source.src);\n    } else {\n      // Send through tech loop to check for a compatible technology.\n      this.src([source]);\n    }\n\n  // Case: URL String (http://myvideo...)\n  } else {\n    // Cache for getting last set source\n    this.cache_.src = source;\n\n    if (!this.isReady_) {\n      this.ready(function(){\n        this.src(source);\n      });\n    } else {\n      this.techCall('src', source);\n      if (this.options_['preload'] == 'auto') {\n        this.load();\n      }\n      if (this.options_['autoplay']) {\n        this.play();\n      }\n    }\n  }\n  return this;\n};\n\n// Begin loading the src data\n// http://dev.w3.org/html5/spec/video.html#dom-media-load\nvjs.Player.prototype.load = function(){\n  this.techCall('load');\n  return this;\n};\n\n// http://dev.w3.org/html5/spec/video.html#dom-media-currentsrc\nvjs.Player.prototype.currentSrc = function(){\n  return this.techGet('currentSrc') || this.cache_.src || '';\n};\n\n// Attributes/Options\nvjs.Player.prototype.preload = function(value){\n  if (value !== undefined) {\n    this.techCall('setPreload', value);\n    this.options_['preload'] = value;\n    return this;\n  }\n  return this.techGet('preload');\n};\nvjs.Player.prototype.autoplay = function(value){\n  if (value !== undefined) {\n    this.techCall('setAutoplay', value);\n    this.options_['autoplay'] = value;\n    return this;\n  }\n  return this.techGet('autoplay', value);\n};\nvjs.Player.prototype.loop = function(value){\n  if (value !== undefined) {\n    this.techCall('setLoop', value);\n    this.options_['loop'] = value;\n    return this;\n  }\n  return this.techGet('loop');\n};\n\n/**\n * the url of the poster image source\n * @type {String}\n * @private\n */\nvjs.Player.prototype.poster_;\n\n/**\n * get or set the poster image source url\n *\n * ##### EXAMPLE:\n *\n *     // getting\n *     var currentPoster = myPlayer.poster();\n *\n *     // setting\n *     myPlayer.poster('http://example.com/myImage.jpg');\n *\n * @param  {String=} [src] Poster image source URL\n * @return {String} poster URL when getting\n * @return {vjs.Player} self when setting\n */\nvjs.Player.prototype.poster = function(src){\n  if (src !== undefined) {\n    this.poster_ = src;\n    return this;\n  }\n  return this.poster_;\n};\n\n/**\n * Whether or not the controls are showing\n * @type {Boolean}\n * @private\n */\nvjs.Player.prototype.controls_;\n\n/**\n * Get or set whether or not the controls are showing.\n * @param  {Boolean} controls Set controls to showing or not\n * @return {Boolean}    Controls are showing\n */\nvjs.Player.prototype.controls = function(bool){\n  if (bool !== undefined) {\n    bool = !!bool; // force boolean\n    // Don't trigger a change event unless it actually changed\n    if (this.controls_ !== bool) {\n      this.controls_ = bool;\n      if (bool) {\n        this.removeClass('vjs-controls-disabled');\n        this.addClass('vjs-controls-enabled');\n        this.trigger('controlsenabled');\n      } else {\n        this.removeClass('vjs-controls-enabled');\n        this.addClass('vjs-controls-disabled');\n        this.trigger('controlsdisabled');\n      }\n    }\n    return this;\n  }\n  return this.controls_;\n};\n\nvjs.Player.prototype.usingNativeControls_;\n\n/**\n * Toggle native controls on/off. Native controls are the controls built into\n * devices (e.g. default iPhone controls), Flash, or other techs\n * (e.g. Vimeo Controls)\n *\n * **This should only be set by the current tech, because only the tech knows\n * if it can support native controls**\n *\n * @param  {Boolean} bool    True signals that native controls are on\n * @return {vjs.Player}      Returns the player\n * @private\n */\nvjs.Player.prototype.usingNativeControls = function(bool){\n  if (bool !== undefined) {\n    bool = !!bool; // force boolean\n    // Don't trigger a change event unless it actually changed\n    if (this.usingNativeControls_ !== bool) {\n      this.usingNativeControls_ = bool;\n      if (bool) {\n        this.addClass('vjs-using-native-controls');\n\n        /**\n         * player is using the native device controls\n         *\n         * @event usingnativecontrols\n         * @memberof vjs.Player\n         * @instance\n         * @private\n         */\n        this.trigger('usingnativecontrols');\n      } else {\n        this.removeClass('vjs-using-native-controls');\n\n        /**\n         * player is using the custom HTML controls\n         *\n         * @event usingcustomcontrols\n         * @memberof vjs.Player\n         * @instance\n         * @private\n         */\n        this.trigger('usingcustomcontrols');\n      }\n    }\n    return this;\n  }\n  return this.usingNativeControls_;\n};\n\nvjs.Player.prototype.error = function(){ return this.techGet('error'); };\nvjs.Player.prototype.ended = function(){ return this.techGet('ended'); };\nvjs.Player.prototype.seeking = function(){ return this.techGet('seeking'); };\n\n// When the player is first initialized, trigger activity so components\n// like the control bar show themselves if needed\nvjs.Player.prototype.userActivity_ = true;\nvjs.Player.prototype.reportUserActivity = function(event){\n  this.userActivity_ = true;\n};\n\nvjs.Player.prototype.userActive_ = true;\nvjs.Player.prototype.userActive = function(bool){\n  if (bool !== undefined) {\n    bool = !!bool;\n    if (bool !== this.userActive_) {\n      this.userActive_ = bool;\n      if (bool) {\n        // If the user was inactive and is now active we want to reset the\n        // inactivity timer\n        this.userActivity_ = true;\n        this.removeClass('vjs-user-inactive');\n        this.addClass('vjs-user-active');\n        this.trigger('useractive');\n      } else {\n        // We're switching the state to inactive manually, so erase any other\n        // activity\n        this.userActivity_ = false;\n\n        // Chrome/Safari/IE have bugs where when you change the cursor it can\n        // trigger a mousemove event. This causes an issue when you're hiding\n        // the cursor when the user is inactive, and a mousemove signals user\n        // activity. Making it impossible to go into inactive mode. Specifically\n        // this happens in fullscreen when we really need to hide the cursor.\n        //\n        // When this gets resolved in ALL browsers it can be removed\n        // https://code.google.com/p/chromium/issues/detail?id=103041\n        this.tech.one('mousemove', function(e){\n          e.stopPropagation();\n          e.preventDefault();\n        });\n        this.removeClass('vjs-user-active');\n        this.addClass('vjs-user-inactive');\n        this.trigger('userinactive');\n      }\n    }\n    return this;\n  }\n  return this.userActive_;\n};\n\nvjs.Player.prototype.listenForUserActivity = function(){\n  var onMouseActivity, onMouseDown, mouseInProgress, onMouseUp,\n      activityCheck, inactivityTimeout;\n\n  onMouseActivity = this.reportUserActivity;\n\n  onMouseDown = function() {\n    onMouseActivity();\n    // For as long as the they are touching the device or have their mouse down,\n    // we consider them active even if they're not moving their finger or mouse.\n    // So we want to continue to update that they are active\n    clearInterval(mouseInProgress);\n    // Setting userActivity=true now and setting the interval to the same time\n    // as the activityCheck interval (250) should ensure we never miss the\n    // next activityCheck\n    mouseInProgress = setInterval(vjs.bind(this, onMouseActivity), 250);\n  };\n\n  onMouseUp = function(event) {\n    onMouseActivity();\n    // Stop the interval that maintains activity if the mouse/touch is down\n    clearInterval(mouseInProgress);\n  };\n\n  // Any mouse movement will be considered user activity\n  this.on('mousedown', onMouseDown);\n  this.on('mousemove', onMouseActivity);\n  this.on('mouseup', onMouseUp);\n\n  // Listen for keyboard navigation\n  // Shouldn't need to use inProgress interval because of key repeat\n  this.on('keydown', onMouseActivity);\n  this.on('keyup', onMouseActivity);\n\n  // Consider any touch events that bubble up to be activity\n  // Certain touches on the tech will be blocked from bubbling because they\n  // toggle controls\n  this.on('touchstart', onMouseDown);\n  this.on('touchmove', onMouseActivity);\n  this.on('touchend', onMouseUp);\n  this.on('touchcancel', onMouseUp);\n\n  // Run an interval every 250 milliseconds instead of stuffing everything into\n  // the mousemove/touchmove function itself, to prevent performance degradation.\n  // `this.reportUserActivity` simply sets this.userActivity_ to true, which\n  // then gets picked up by this loop\n  // http://ejohn.org/blog/learning-from-twitter/\n  activityCheck = setInterval(vjs.bind(this, function() {\n    // Check to see if mouse/touch activity has happened\n    if (this.userActivity_) {\n      // Reset the activity tracker\n      this.userActivity_ = false;\n\n      // If the user state was inactive, set the state to active\n      this.userActive(true);\n\n      // Clear any existing inactivity timeout to start the timer over\n      clearTimeout(inactivityTimeout);\n\n      // In X seconds, if no more activity has occurred the user will be\n      // considered inactive\n      inactivityTimeout = setTimeout(vjs.bind(this, function() {\n        // Protect against the case where the inactivityTimeout can trigger just\n        // before the next user activity is picked up by the activityCheck loop\n        // causing a flicker\n        if (!this.userActivity_) {\n          this.userActive(false);\n        }\n      }), 2000);\n    }\n  }), 250);\n\n  // Clean up the intervals when we kill the player\n  this.on('dispose', function(){\n    clearInterval(activityCheck);\n    clearTimeout(inactivityTimeout);\n  });\n};\n\n// Methods to add support for\n// networkState: function(){ return this.techCall('networkState'); },\n// readyState: function(){ return this.techCall('readyState'); },\n// seeking: function(){ return this.techCall('seeking'); },\n// initialTime: function(){ return this.techCall('initialTime'); },\n// startOffsetTime: function(){ return this.techCall('startOffsetTime'); },\n// played: function(){ return this.techCall('played'); },\n// seekable: function(){ return this.techCall('seekable'); },\n// videoTracks: function(){ return this.techCall('videoTracks'); },\n// audioTracks: function(){ return this.techCall('audioTracks'); },\n// videoWidth: function(){ return this.techCall('videoWidth'); },\n// videoHeight: function(){ return this.techCall('videoHeight'); },\n// defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); },\n// playbackRate: function(){ return this.techCall('playbackRate'); },\n// mediaGroup: function(){ return this.techCall('mediaGroup'); },\n// controller: function(){ return this.techCall('controller'); },\n// defaultMuted: function(){ return this.techCall('defaultMuted'); }\n\n// TODO\n// currentSrcList: the array of sources including other formats and bitrates\n// playList: array of source lists in order of playback\n\n// RequestFullscreen API\n(function(){\n  var prefix, requestFS, div;\n\n  div = document.createElement('div');\n\n  requestFS = {};\n\n  // Current W3C Spec\n  // http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#api\n  // Mozilla Draft: https://wiki.mozilla.org/Gecko:FullScreenAPI#fullscreenchange_event\n  // New: https://dvcs.w3.org/hg/fullscreen/raw-file/529a67b8d9f3/Overview.html\n  if (div.cancelFullscreen !== undefined) {\n    requestFS.requestFn = 'requestFullscreen';\n    requestFS.cancelFn = 'exitFullscreen';\n    requestFS.eventName = 'fullscreenchange';\n    requestFS.isFullScreen = 'fullScreen';\n\n  // Webkit (Chrome/Safari) and Mozilla (Firefox) have working implementations\n  // that use prefixes and vary slightly from the new W3C spec. Specifically,\n  // using 'exit' instead of 'cancel', and lowercasing the 'S' in Fullscreen.\n  // Other browsers don't have any hints of which version they might follow yet,\n  // so not going to try to predict by looping through all prefixes.\n  } else {\n\n    if (document.mozCancelFullScreen) {\n      prefix = 'moz';\n      requestFS.isFullScreen = prefix + 'FullScreen';\n    } else {\n      prefix = 'webkit';\n      requestFS.isFullScreen = prefix + 'IsFullScreen';\n    }\n\n    if (div[prefix + 'RequestFullScreen']) {\n      requestFS.requestFn = prefix + 'RequestFullScreen';\n      requestFS.cancelFn = prefix + 'CancelFullScreen';\n    }\n    requestFS.eventName = prefix + 'fullscreenchange';\n  }\n\n  if (document[requestFS.cancelFn]) {\n    vjs.support.requestFullScreen = requestFS;\n  }\n\n})();\n\n\n/**\n * Container of main controls\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n * @extends vjs.Component\n */\nvjs.ControlBar = vjs.Component.extend();\n\nvjs.ControlBar.prototype.options_ = {\n  loadEvent: 'play',\n  children: {\n    'playToggle': {},\n    'currentTimeDisplay': {},\n    'timeDivider': {},\n    'durationDisplay': {},\n    'remainingTimeDisplay': {},\n    'progressControl': {},\n    'fullscreenToggle': {},\n    'volumeControl': {},\n    'muteToggle': {}\n    // 'volumeMenuButton': {}\n  }\n};\n\nvjs.ControlBar.prototype.createEl = function(){\n  return vjs.createEl('div', {\n    className: 'vjs-control-bar'\n  });\n};\n/**\n * Button to toggle between play and pause\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.PlayToggle = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    player.on('play', vjs.bind(this, this.onPlay));\n    player.on('pause', vjs.bind(this, this.onPause));\n  }\n});\n\nvjs.PlayToggle.prototype.buttonText = 'Play';\n\nvjs.PlayToggle.prototype.buildCSSClass = function(){\n  return 'vjs-play-control ' + vjs.Button.prototype.buildCSSClass.call(this);\n};\n\n// OnClick - Toggle between play and pause\nvjs.PlayToggle.prototype.onClick = function(){\n  if (this.player_.paused()) {\n    this.player_.play();\n  } else {\n    this.player_.pause();\n  }\n};\n\n  // OnPlay - Add the vjs-playing class to the element so it can change appearance\nvjs.PlayToggle.prototype.onPlay = function(){\n  vjs.removeClass(this.el_, 'vjs-paused');\n  vjs.addClass(this.el_, 'vjs-playing');\n  this.el_.children[0].children[0].innerHTML = 'Pause'; // change the button text to \"Pause\"\n};\n\n  // OnPause - Add the vjs-paused class to the element so it can change appearance\nvjs.PlayToggle.prototype.onPause = function(){\n  vjs.removeClass(this.el_, 'vjs-playing');\n  vjs.addClass(this.el_, 'vjs-paused');\n  this.el_.children[0].children[0].innerHTML = 'Play'; // change the button text to \"Play\"\n};\n/**\n * Displays the current time\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.CurrentTimeDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('timeupdate', vjs.bind(this, this.updateContent));\n  }\n});\n\nvjs.CurrentTimeDisplay.prototype.createEl = function(){\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-current-time vjs-time-controls vjs-control'\n  });\n\n  this.content = vjs.createEl('div', {\n    className: 'vjs-current-time-display',\n    innerHTML: '<span class=\"vjs-control-text\">Current Time </span>' + '0:00', // label the current time for screen reader users\n    'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n  });\n\n  el.appendChild(vjs.createEl('div').appendChild(this.content));\n  return el;\n};\n\nvjs.CurrentTimeDisplay.prototype.updateContent = function(){\n  // Allows for smooth scrubbing, when player can't keep up.\n  var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n  this.content.innerHTML = '<span class=\"vjs-control-text\">Current Time </span>' + vjs.formatTime(time, this.player_.duration());\n};\n\n/**\n * Displays the duration\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.DurationDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('timeupdate', vjs.bind(this, this.updateContent)); // this might need to be changes to 'durationchange' instead of 'timeupdate' eventually, however the durationchange event fires before this.player_.duration() is set, so the value cannot be written out using this method. Once the order of durationchange and this.player_.duration() being set is figured out, this can be updated.\n  }\n});\n\nvjs.DurationDisplay.prototype.createEl = function(){\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-duration vjs-time-controls vjs-control'\n  });\n\n  this.content = vjs.createEl('div', {\n    className: 'vjs-duration-display',\n    innerHTML: '<span class=\"vjs-control-text\">Duration Time </span>' + '0:00', // label the duration time for screen reader users\n    'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n  });\n\n  el.appendChild(vjs.createEl('div').appendChild(this.content));\n  return el;\n};\n\nvjs.DurationDisplay.prototype.updateContent = function(){\n  var duration = this.player_.duration();\n  if (duration) {\n      this.content.innerHTML = '<span class=\"vjs-control-text\">Duration Time </span>' + vjs.formatTime(duration); // label the duration time for screen reader users\n  }\n};\n\n/**\n * The separator between the current time and duration\n *\n * Can be hidden if it's not needed in the design.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.TimeDivider = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.TimeDivider.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-time-divider',\n    innerHTML: '<div><span>/</span></div>'\n  });\n};\n\n/**\n * Displays the time left in the video\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.RemainingTimeDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('timeupdate', vjs.bind(this, this.updateContent));\n  }\n});\n\nvjs.RemainingTimeDisplay.prototype.createEl = function(){\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-remaining-time vjs-time-controls vjs-control'\n  });\n\n  this.content = vjs.createEl('div', {\n    className: 'vjs-remaining-time-display',\n    innerHTML: '<span class=\"vjs-control-text\">Remaining Time </span>' + '-0:00', // label the remaining time for screen reader users\n    'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n  });\n\n  el.appendChild(vjs.createEl('div').appendChild(this.content));\n  return el;\n};\n\nvjs.RemainingTimeDisplay.prototype.updateContent = function(){\n  if (this.player_.duration()) {\n    this.content.innerHTML = '<span class=\"vjs-control-text\">Remaining Time </span>' + '-'+ vjs.formatTime(this.player_.remainingTime());\n  }\n\n  // Allows for smooth scrubbing, when player can't keep up.\n  // var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n  // this.content.innerHTML = vjs.formatTime(time, this.player_.duration());\n};\n/**\n * Toggle fullscreen video\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @extends vjs.Button\n */\nvjs.FullscreenToggle = vjs.Button.extend({\n  /**\n   * @constructor\n   * @memberof vjs.FullscreenToggle\n   * @instance\n   */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n  }\n});\n\nvjs.FullscreenToggle.prototype.buttonText = 'Fullscreen';\n\nvjs.FullscreenToggle.prototype.buildCSSClass = function(){\n  return 'vjs-fullscreen-control ' + vjs.Button.prototype.buildCSSClass.call(this);\n};\n\nvjs.FullscreenToggle.prototype.onClick = function(){\n  if (!this.player_.isFullScreen) {\n    this.player_.requestFullScreen();\n    this.el_.children[0].children[0].innerHTML = 'Non-Fullscreen'; // change the button text to \"Non-Fullscreen\"\n  } else {\n    this.player_.cancelFullScreen();\n    this.el_.children[0].children[0].innerHTML = 'Fullscreen'; // change the button to \"Fullscreen\"\n  }\n};\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.ProgressControl = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.ProgressControl.prototype.options_ = {\n  children: {\n    'seekBar': {}\n  }\n};\n\nvjs.ProgressControl.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-progress-control vjs-control'\n  });\n};\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.SeekBar = vjs.Slider.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Slider.call(this, player, options);\n    player.on('timeupdate', vjs.bind(this, this.updateARIAAttributes));\n    player.ready(vjs.bind(this, this.updateARIAAttributes));\n  }\n});\n\nvjs.SeekBar.prototype.options_ = {\n  children: {\n    'loadProgressBar': {},\n    'playProgressBar': {},\n    'seekHandle': {}\n  },\n  'barName': 'playProgressBar',\n  'handleName': 'seekHandle'\n};\n\nvjs.SeekBar.prototype.playerEvent = 'timeupdate';\n\nvjs.SeekBar.prototype.createEl = function(){\n  return vjs.Slider.prototype.createEl.call(this, 'div', {\n    className: 'vjs-progress-holder',\n    'aria-label': 'video progress bar'\n  });\n};\n\nvjs.SeekBar.prototype.updateARIAAttributes = function(){\n    // Allows for smooth scrubbing, when player can't keep up.\n    var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    this.el_.setAttribute('aria-valuenow',vjs.round(this.getPercent()*100, 2)); // machine readable value of progress bar (percentage complete)\n    this.el_.setAttribute('aria-valuetext',vjs.formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n};\n\nvjs.SeekBar.prototype.getPercent = function(){\n  var currentTime;\n  // Flash RTMP provider will not report the correct time\n  // immediately after a seek. This isn't noticeable if you're\n  // seeking while the video is playing, but it is if you seek\n  // while the video is paused.\n  if (this.player_.techName === 'Flash' && this.player_.seeking()) {\n    var cache = this.player_.getCache();\n    if (cache.lastSetCurrentTime) {\n      currentTime = cache.lastSetCurrentTime;\n    }\n    else {\n      currentTime = this.player_.currentTime();\n    }\n  }\n  else {\n    currentTime = this.player_.currentTime();\n  }\n\n  return currentTime / this.player_.duration();\n};\n\nvjs.SeekBar.prototype.onMouseDown = function(event){\n  vjs.Slider.prototype.onMouseDown.call(this, event);\n\n  this.player_.scrubbing = true;\n\n  this.videoWasPlaying = !this.player_.paused();\n  this.player_.pause();\n};\n\nvjs.SeekBar.prototype.onMouseMove = function(event){\n  var newTime = this.calculateDistance(event) * this.player_.duration();\n\n  // Don't let video end while scrubbing.\n  if (newTime == this.player_.duration()) { newTime = newTime - 0.1; }\n\n  // Set new time (tell player to seek to new time)\n  this.player_.currentTime(newTime);\n};\n\nvjs.SeekBar.prototype.onMouseUp = function(event){\n    debugger\n  vjs.Slider.prototype.onMouseUp.call(this, event);\n\n  this.player_.scrubbing = false;\n  if (this.videoWasPlaying) {\n      debugger\n    this.player_.play();\n  }\n};\n\nvjs.SeekBar.prototype.stepForward = function(){\n  this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n};\n\nvjs.SeekBar.prototype.stepBack = function(){\n  this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n};\n\n\n/**\n * Shows load progress\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.LoadProgressBar = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n    player.on('progress', vjs.bind(this, this.update));\n  }\n});\n\nvjs.LoadProgressBar.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-load-progress',\n    innerHTML: '<span class=\"vjs-control-text\">Loaded: 0%</span>'\n  });\n};\n\nvjs.LoadProgressBar.prototype.update = function(){\n  if (this.el_.style) { this.el_.style.width = vjs.round(this.player_.bufferedPercent() * 100, 2) + '%'; }\n};\n\n\n/**\n * Shows play progress\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.PlayProgressBar = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.PlayProgressBar.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-play-progress',\n    innerHTML: '<span class=\"vjs-control-text\">Progress: 0%</span>'\n  });\n};\n\n/**\n * The Seek Handle shows the current position of the playhead during playback,\n * and can be dragged to adjust the playhead.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.SeekHandle = vjs.SliderHandle.extend();\n\n/**\n * The default value for the handle content, which may be read by screen readers\n *\n * @type {String}\n * @private\n */\nvjs.SeekHandle.prototype.defaultValue = '00:00';\n\n/** @inheritDoc */\nvjs.SeekHandle.prototype.createEl = function(){\n  return vjs.SliderHandle.prototype.createEl.call(this, 'div', {\n    className: 'vjs-seek-handle'\n  });\n};\n/**\n * The component for controlling the volume level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.VolumeControl = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    // hide volume controls when they're not supported by the current tech\n    if (player.tech && player.tech.features && player.tech.features['volumeControl'] === false) {\n      this.addClass('vjs-hidden');\n    }\n    player.on('loadstart', vjs.bind(this, function(){\n      if (player.tech.features && player.tech.features['volumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }));\n  }\n});\n\nvjs.VolumeControl.prototype.options_ = {\n  children: {\n    'volumeBar': {}\n  }\n};\n\nvjs.VolumeControl.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-control vjs-control'\n  });\n};\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.VolumeBar = vjs.Slider.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Slider.call(this, player, options);\n    player.on('volumechange', vjs.bind(this, this.updateARIAAttributes));\n    player.ready(vjs.bind(this, this.updateARIAAttributes));\n    setTimeout(vjs.bind(this, this.update), 0); // update when elements is in DOM\n  }\n});\n\nvjs.VolumeBar.prototype.updateARIAAttributes = function(){\n  // Current value of volume bar as a percentage\n  this.el_.setAttribute('aria-valuenow',vjs.round(this.player_.volume()*100, 2));\n  this.el_.setAttribute('aria-valuetext',vjs.round(this.player_.volume()*100, 2)+'%');\n};\n\nvjs.VolumeBar.prototype.options_ = {\n  children: {\n    'volumeLevel': {},\n    'volumeHandle': {}\n  },\n  'barName': 'volumeLevel',\n  'handleName': 'volumeHandle'\n};\n\nvjs.VolumeBar.prototype.playerEvent = 'volumechange';\n\nvjs.VolumeBar.prototype.createEl = function(){\n  return vjs.Slider.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-bar',\n    'aria-label': 'volume level'\n  });\n};\n\nvjs.VolumeBar.prototype.onMouseMove = function(event) {\n  if (this.player_.muted()) {\n    this.player_.muted(false);\n  }\n\n  this.player_.volume(this.calculateDistance(event));\n};\n\nvjs.VolumeBar.prototype.getPercent = function(){\n  if (this.player_.muted()) {\n    return 0;\n  } else {\n    return this.player_.volume();\n  }\n};\n\nvjs.VolumeBar.prototype.stepForward = function(){\n  this.player_.volume(this.player_.volume() + 0.1);\n};\n\nvjs.VolumeBar.prototype.stepBack = function(){\n  this.player_.volume(this.player_.volume() - 0.1);\n};\n\n/**\n * Shows volume level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.VolumeLevel = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.VolumeLevel.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-level',\n    innerHTML: '<span class=\"vjs-control-text\"></span>'\n  });\n};\n\n/**\n * The volume handle can be dragged to adjust the volume level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\n vjs.VolumeHandle = vjs.SliderHandle.extend();\n\n vjs.VolumeHandle.prototype.defaultValue = '00:00';\n\n /** @inheritDoc */\n vjs.VolumeHandle.prototype.createEl = function(){\n   return vjs.SliderHandle.prototype.createEl.call(this, 'div', {\n     className: 'vjs-volume-handle'\n   });\n };\n/**\n * A button component for muting the audio\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.MuteToggle = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    player.on('volumechange', vjs.bind(this, this.update));\n\n    // hide mute toggle if the current tech doesn't support volume control\n    if (player.tech && player.tech.features && player.tech.features['volumeControl'] === false) {\n      this.addClass('vjs-hidden');\n    }\n    player.on('loadstart', vjs.bind(this, function(){\n      if (player.tech.features && player.tech.features['volumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }));\n  }\n});\n\nvjs.MuteToggle.prototype.createEl = function(){\n  return vjs.Button.prototype.createEl.call(this, 'div', {\n    className: 'vjs-mute-control vjs-control',\n    innerHTML: '<div><span class=\"vjs-control-text\">Mute</span></div>'\n  });\n};\n\nvjs.MuteToggle.prototype.onClick = function(){\n  this.player_.muted( this.player_.muted() ? false : true );\n};\n\nvjs.MuteToggle.prototype.update = function(){\n  var vol = this.player_.volume(),\n      level = 3;\n\n  if (vol === 0 || this.player_.muted()) {\n    level = 0;\n  } else if (vol < 0.33) {\n    level = 1;\n  } else if (vol < 0.67) {\n    level = 2;\n  }\n\n  // Don't rewrite the button text if the actual text doesn't change.\n  // This causes unnecessary and confusing information for screen reader users.\n  // This check is needed because this function gets called every time the volume level is changed.\n  if(this.player_.muted()){\n      if(this.el_.children[0].children[0].innerHTML!='Unmute'){\n          this.el_.children[0].children[0].innerHTML = 'Unmute'; // change the button text to \"Unmute\"\n      }\n  } else {\n      if(this.el_.children[0].children[0].innerHTML!='Mute'){\n          this.el_.children[0].children[0].innerHTML = 'Mute'; // change the button text to \"Mute\"\n      }\n  }\n\n  /* TODO improve muted icon classes */\n  for (var i = 0; i < 4; i++) {\n    vjs.removeClass(this.el_, 'vjs-vol-'+i);\n  }\n  vjs.addClass(this.el_, 'vjs-vol-'+level);\n};\n/**\n * Menu button with a popup for showing the volume slider.\n * @constructor\n */\nvjs.VolumeMenuButton = vjs.MenuButton.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.MenuButton.call(this, player, options);\n\n    // Same listeners as MuteToggle\n    player.on('volumechange', vjs.bind(this, this.update));\n\n    // hide mute toggle if the current tech doesn't support volume control\n    if (player.tech && player.tech.features && player.tech.features.volumeControl === false) {\n      this.addClass('vjs-hidden');\n    }\n    player.on('loadstart', vjs.bind(this, function(){\n      if (player.tech.features && player.tech.features.volumeControl === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }));\n    this.addClass('vjs-menu-button');\n  }\n});\n\nvjs.VolumeMenuButton.prototype.createMenu = function(){\n  var menu = new vjs.Menu(this.player_, {\n    contentElType: 'div'\n  });\n  var vc = new vjs.VolumeBar(this.player_, vjs.obj.merge({vertical: true}, this.options_.volumeBar));\n  menu.addChild(vc);\n  return menu;\n};\n\nvjs.VolumeMenuButton.prototype.onClick = function(){\n  vjs.MuteToggle.prototype.onClick.call(this);\n  vjs.MenuButton.prototype.onClick.call(this);\n};\n\nvjs.VolumeMenuButton.prototype.createEl = function(){\n  return vjs.Button.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-menu-button vjs-menu-button vjs-control',\n    innerHTML: '<div><span class=\"vjs-control-text\">Mute</span></div>'\n  });\n};\nvjs.VolumeMenuButton.prototype.update = vjs.MuteToggle.prototype.update;\n/* Poster Image\n================================================================================ */\n/**\n * The component that handles showing the poster image.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.PosterImage = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    if (!player.poster() || !player.controls()) {\n      this.hide();\n    }\n\n    player.on('play', vjs.bind(this, this.hide));\n  }\n});\n\nvjs.PosterImage.prototype.createEl = function(){\n  var el = vjs.createEl('div', {\n        className: 'vjs-poster',\n\n        // Don't want poster to be tabbable.\n        tabIndex: -1\n      }),\n      poster = this.player_.poster();\n\n  if (poster) {\n    if ('backgroundSize' in el.style) {\n      el.style.backgroundImage = 'url(\"' + poster + '\")';\n    } else {\n      el.appendChild(vjs.createEl('img', { src: poster }));\n    }\n  }\n\n  return el;\n};\n\nvjs.PosterImage.prototype.onClick = function(){\n  // Only accept clicks when controls are enabled\n  if (this.player().controls()) {\n    this.player_.play();\n  }\n};\n/* Loading Spinner\n================================================================================ */\n/**\n * Loading spinner for waiting events\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.LoadingSpinner = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('canplay', vjs.bind(this, this.hide));\n    player.on('canplaythrough', vjs.bind(this, this.hide));\n    player.on('playing', vjs.bind(this, this.hide));\n    player.on('seeked', vjs.bind(this, this.hide));\n\n    player.on('seeking', vjs.bind(this, this.show));\n\n    // in some browsers seeking does not trigger the 'playing' event,\n    // so we also need to trap 'seeked' if we are going to set a\n    // 'seeking' event\n    player.on('seeked', vjs.bind(this, this.hide));\n\n    player.on('error', vjs.bind(this, this.show));\n\n    // Not showing spinner on stalled any more. Browsers may stall and then not trigger any events that would remove the spinner.\n    // Checked in Chrome 16 and Safari 5.1.2. http://help.videojs.com/discussions/problems/883-why-is-the-download-progress-showing\n    // player.on('stalled', vjs.bind(this, this.show));\n\n    player.on('waiting', vjs.bind(this, this.show));\n  }\n});\n\nvjs.LoadingSpinner.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-loading-spinner'\n  });\n};\n/* Big Play Button\n================================================================================ */\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.BigPlayButton = vjs.Button.extend();\n\nvjs.BigPlayButton.prototype.createEl = function(){\n  return vjs.Button.prototype.createEl.call(this, 'div', {\n    className: 'vjs-big-play-button',\n    innerHTML: '<span aria-hidden=\"true\"></span>',\n    'aria-label': 'play video'\n  });\n};\n\nvjs.BigPlayButton.prototype.onClick = function(){\n  this.player_.play();\n};\n/**\n * @fileoverview Media Technology Controller - Base class for media playback\n * technology controllers like Flash and HTML5\n */\n\n/**\n * Base class for media (HTML5 Video, Flash) controllers\n * @param {vjs.Player|Object} player  Central player instance\n * @param {Object=} options Options object\n * @constructor\n */\nvjs.MediaTechController = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.Component.call(this, player, options, ready);\n\n    this.initControlsListeners();\n  }\n});\n\n/**\n * Set up click and touch listeners for the playback element\n * On desktops, a click on the video itself will toggle playback,\n * on a mobile device a click on the video toggles controls.\n * (toggling controls is done by toggling the user state between active and\n * inactive)\n *\n * A tap can signal that a user has become active, or has become inactive\n * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n * quick tap should hide them again (signaling the user is in an inactive\n * viewing state)\n *\n * In addition to this, we still want the user to be considered inactive after\n * a few seconds of inactivity.\n *\n * Note: the only part of iOS interaction we can't mimic with this setup\n * is a touch and hold on the video element counting as activity in order to\n * keep the controls showing, but that shouldn't be an issue. A touch and hold on\n * any controls will still keep the user active\n */\nvjs.MediaTechController.prototype.initControlsListeners = function(){\n  var player, tech, activateControls, deactivateControls;\n\n  tech = this;\n  player = this.player();\n\n  var activateControls = function(){\n    if (player.controls() && !player.usingNativeControls()) {\n      tech.addControlsListeners();\n    }\n  };\n\n  deactivateControls = vjs.bind(tech, tech.removeControlsListeners);\n\n  // Set up event listeners once the tech is ready and has an element to apply\n  // listeners to\n  this.ready(activateControls);\n  player.on('controlsenabled', activateControls);\n  player.on('controlsdisabled', deactivateControls);\n};\n\nvjs.MediaTechController.prototype.addControlsListeners = function(){\n  var preventBubble, userWasActive;\n\n  // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n  // trigger mousedown/up.\n  // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n  // Any touch events are set to block the mousedown event from happening\n  this.on('mousedown', this.onClick);\n\n  // We need to block touch events on the video element from bubbling up,\n  // otherwise they'll signal activity prematurely. The specific use case is\n  // when the video is playing and the controls have faded out. In this case\n  // only a tap (fast touch) should toggle the user active state and turn the\n  // controls back on. A touch and move or touch and hold should not trigger\n  // the controls (per iOS as an example at least)\n  //\n  // We always want to stop propagation on touchstart because touchstart\n  // at the player level starts the touchInProgress interval. We can still\n  // report activity on the other events, but won't let them bubble for\n  // consistency. We don't want to bubble a touchend without a touchstart.\n  this.on('touchstart', function(event) {\n    // Stop the mouse events from also happening\n    event.preventDefault();\n    event.stopPropagation();\n    // Record if the user was active now so we don't have to keep polling it\n    userWasActive = this.player_.userActive();\n  });\n\n  preventBubble = function(event){\n    event.stopPropagation();\n    if (userWasActive) {\n      this.player_.reportUserActivity();\n    }\n  };\n\n  // Treat all touch events the same for consistency\n  this.on('touchmove', preventBubble);\n  this.on('touchleave', preventBubble);\n  this.on('touchcancel', preventBubble);\n  this.on('touchend', preventBubble);\n\n  // Turn on component tap events\n  this.emitTapEvents();\n\n  // The tap listener needs to come after the touchend listener because the tap\n  // listener cancels out any reportedUserActivity when setting userActive(false)\n  this.on('tap', this.onTap);\n};\n\n/**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n */\nvjs.MediaTechController.prototype.removeControlsListeners = function(){\n  // We don't want to just use `this.off()` because there might be other needed\n  // listeners added by techs that extend this.\n  this.off('tap');\n  this.off('touchstart');\n  this.off('touchmove');\n  this.off('touchleave');\n  this.off('touchcancel');\n  this.off('touchend');\n  this.off('click');\n  this.off('mousedown');\n};\n\n/**\n * Handle a click on the media element. By default will play/pause the media.\n */\nvjs.MediaTechController.prototype.onClick = function(event){\n  // We're using mousedown to detect clicks thanks to Flash, but mousedown\n  // will also be triggered with right-clicks, so we need to prevent that\n  if (event.button !== 0) return;\n\n  // When controls are disabled a click should not toggle playback because\n  // the click is considered a control\n  if (this.player().controls()) {\n    if (this.player().paused()) {\n      this.player().play();\n    } else {\n      this.player().pause();\n    }\n  }\n};\n\n/**\n * Handle a tap on the media element. By default it will toggle the user\n * activity state, which hides and shows the controls.\n */\n\nvjs.MediaTechController.prototype.onTap = function(){\n  this.player().userActive(!this.player().userActive());\n};\n\nvjs.MediaTechController.prototype.features = {\n  'volumeControl': true,\n\n  // Resizing plugins using request fullscreen reloads the plugin\n  'fullscreenResize': false,\n\n  // Optional events that we can manually mimic with timers\n  // currently not triggered by video-js-swf\n  'progressEvents': false,\n  'timeupdateEvents': false\n};\n\nvjs.media = {};\n\n/**\n * List of default API methods for any MediaTechController\n * @type {String}\n */\nvjs.media.ApiMethods = 'play,pause,paused,currentTime,setCurrentTime,duration,buffered,volume,setVolume,muted,setMuted,width,height,supportsFullScreen,enterFullScreen,src,load,currentSrc,preload,setPreload,autoplay,setAutoplay,loop,setLoop,error,networkState,readyState,seeking,initialTime,startOffsetTime,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks,defaultPlaybackRate,playbackRate,mediaGroup,controller,controls,defaultMuted'.split(',');\n// Create placeholder methods for each that warn when a method isn't supported by the current playback technology\n\nfunction createMethod(methodName){\n  return function(){\n    throw new Error('The \"'+methodName+'\" method is not available on the playback technology\\'s API');\n  };\n}\n\nfor (var i = vjs.media.ApiMethods.length - 1; i >= 0; i--) {\n  var methodName = vjs.media.ApiMethods[i];\n  vjs.MediaTechController.prototype[vjs.media.ApiMethods[i]] = createMethod(methodName);\n}\n/**\n * @fileoverview HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @param {Function=} ready\n * @constructor\n */\nvjs.Html5 = vjs.MediaTechController.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    // volume cannot be changed from 1 on iOS\n    this.features['volumeControl'] = vjs.Html5.canControlVolume();\n\n    // In iOS, if you move a video element in the DOM, it breaks video playback.\n    this.features['movingMediaElementInDOM'] = !vjs.IS_IOS;\n\n    // HTML video is able to automatically resize when going to fullscreen\n    this.features['fullscreenResize'] = true;\n\n    vjs.MediaTechController.call(this, player, options, ready);\n\n    var source = options['source'];\n\n    // If the element source is already set, we may have missed the loadstart event, and want to trigger it.\n    // We don't want to set the source again and interrupt playback.\n    if (source && this.el_.currentSrc === source.src && this.el_.networkState > 0) {\n      player.trigger('loadstart');\n\n    // Otherwise set the source if one was provided.\n    } else if (source) {\n      this.el_.src = source.src;\n    }\n\n    // Determine if native controls should be used\n    // Our goal should be to get the custom controls on mobile solid everywhere\n    // so we can remove this all together. Right now this will block custom\n    // controls on touch enabled laptops like the Chrome Pixel\n    if (vjs.TOUCH_ENABLED && player.options()['nativeControlsForTouch'] !== false) {\n      this.useNativeControls();\n    }\n\n    // Chrome and Safari both have issues with autoplay.\n    // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n    // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n    // This fixes both issues. Need to wait for API, so it updates displays correctly\n    player.ready(function(){\n      if (this.tag && this.options_['autoplay'] && this.paused()) {\n        delete this.tag['poster']; // Chrome Fix. Fixed in Chrome v16.\n        this.play();\n      }\n    });\n\n    this.setupTriggers();\n    this.triggerReady();\n  }\n});\n\nvjs.Html5.prototype.dispose = function(){\n  vjs.MediaTechController.prototype.dispose.call(this);\n};\n\nvjs.Html5.prototype.createEl = function(){\n  var player = this.player_,\n      // If possible, reuse original tag for HTML5 playback technology element\n      el = player.tag,\n      newEl,\n      clone;\n\n  // Check if this browser supports moving the element into the box.\n  // On the iPhone video will break if you move the element,\n  // So we have to create a brand new element.\n  if (!el || this.features['movingMediaElementInDOM'] === false) {\n\n    // If the original tag is still there, clone and remove it.\n    if (el) {\n      clone = el.cloneNode(false);\n      vjs.Html5.disposeMediaElement(el);\n      el = clone;\n      player.tag = null;\n    } else {\n      el = vjs.createEl('video', {\n        id:player.id() + '_html5_api',\n        className:'vjs-tech'\n      });\n    }\n    // associate the player with the new tag\n    el['player'] = player;\n\n    vjs.insertFirst(el, player.el());\n  }\n\n  // Update specific tag settings, in case they were overridden\n  var attrs = ['autoplay','preload','loop','muted'];\n  for (var i = attrs.length - 1; i >= 0; i--) {\n    var attr = attrs[i];\n    if (player.options_[attr] !== null) {\n      el[attr] = player.options_[attr];\n    }\n  }\n\n  return el;\n  // jenniisawesome = true;\n};\n\n// Make video events trigger player events\n// May seem verbose here, but makes other APIs possible.\nvjs.Html5.prototype.setupTriggers = function(){\n  for (var i = vjs.Html5.Events.length - 1; i >= 0; i--) {\n    vjs.on(this.el_, vjs.Html5.Events[i], vjs.bind(this.player_, this.eventHandler));\n  }\n};\n// Triggers removed using this.off when disposed\n\nvjs.Html5.prototype.eventHandler = function(e){\n  this.trigger(e);\n\n  // No need for media events to bubble up.\n  e.stopPropagation();\n};\n\nvjs.Html5.prototype.useNativeControls = function(){\n  var tech, player, controlsOn, controlsOff, cleanUp;\n\n  tech = this;\n  player = this.player();\n\n  // If the player controls are enabled turn on the native controls\n  tech.setControls(player.controls());\n\n  // Update the native controls when player controls state is updated\n  controlsOn = function(){\n    tech.setControls(true);\n  };\n  controlsOff = function(){\n    tech.setControls(false);\n  };\n  player.on('controlsenabled', controlsOn);\n  player.on('controlsdisabled', controlsOff);\n\n  // Clean up when not using native controls anymore\n  cleanUp = function(){\n    player.off('controlsenabled', controlsOn);\n    player.off('controlsdisabled', controlsOff);\n  };\n  tech.on('dispose', cleanUp);\n  player.on('usingcustomcontrols', cleanUp);\n\n  // Update the state of the player to using native controls\n  player.usingNativeControls(true);\n};\n\n\nvjs.Html5.prototype.play = function(){ this.el_.play(); };\nvjs.Html5.prototype.pause = function(){ this.el_.pause(); };\nvjs.Html5.prototype.paused = function(){ return this.el_.paused; };\n\nvjs.Html5.prototype.currentTime = function(){ return this.el_.currentTime; };\nvjs.Html5.prototype.setCurrentTime = function(seconds){\n  try {\n    this.el_.currentTime = seconds;\n  } catch(e) {\n    vjs.log(e, 'Video is not ready. (Video.js)');\n    // this.warning(VideoJS.warnings.videoNotReady);\n  }\n};\n\nvjs.Html5.prototype.duration = function(){ return this.el_.duration || 0; };\nvjs.Html5.prototype.buffered = function(){ return this.el_.buffered; };\n\nvjs.Html5.prototype.volume = function(){ return this.el_.volume; };\nvjs.Html5.prototype.setVolume = function(percentAsDecimal){ this.el_.volume = percentAsDecimal; };\nvjs.Html5.prototype.muted = function(){ return this.el_.muted; };\nvjs.Html5.prototype.setMuted = function(muted){ this.el_.muted = muted; };\n\nvjs.Html5.prototype.width = function(){ return this.el_.offsetWidth; };\nvjs.Html5.prototype.height = function(){ return this.el_.offsetHeight; };\n\nvjs.Html5.prototype.supportsFullScreen = function(){\n  if (typeof this.el_.webkitEnterFullScreen == 'function') {\n\n    // Seems to be broken in Chromium/Chrome && Safari in Leopard\n    if (/Android/.test(vjs.USER_AGENT) || !/Chrome|Mac OS X 10.5/.test(vjs.USER_AGENT)) {\n      return true;\n    }\n  }\n  return false;\n};\n\nvjs.Html5.prototype.enterFullScreen = function(){\n  var video = this.el_;\n  if (video.paused && video.networkState <= video.HAVE_METADATA) {\n    // attempt to prime the video element for programmatic access\n    // this isn't necessary on the desktop but shouldn't hurt\n    this.el_.play();\n\n    // playing and pausing synchronously during the transition to fullscreen\n    // can get iOS ~6.1 devices into a play/pause loop\n    setTimeout(function(){\n      video.pause();\n      video.webkitEnterFullScreen();\n    }, 0);\n  } else {\n    video.webkitEnterFullScreen();\n  }\n};\nvjs.Html5.prototype.exitFullScreen = function(){\n  this.el_.webkitExitFullScreen();\n};\nvjs.Html5.prototype.src = function(src){ this.el_.src = src; };\nvjs.Html5.prototype.load = function(){ this.el_.load(); };\nvjs.Html5.prototype.currentSrc = function(){ return this.el_.currentSrc; };\n\nvjs.Html5.prototype.preload = function(){ return this.el_.preload; };\nvjs.Html5.prototype.setPreload = function(val){ this.el_.preload = val; };\n\nvjs.Html5.prototype.autoplay = function(){ return this.el_.autoplay; };\nvjs.Html5.prototype.setAutoplay = function(val){ this.el_.autoplay = val; };\n\nvjs.Html5.prototype.controls = function(){ return this.el_.controls; }\nvjs.Html5.prototype.setControls = function(val){ this.el_.controls = !!val; }\n\nvjs.Html5.prototype.loop = function(){ return this.el_.loop; };\nvjs.Html5.prototype.setLoop = function(val){ this.el_.loop = val; };\n\nvjs.Html5.prototype.error = function(){ return this.el_.error; };\nvjs.Html5.prototype.seeking = function(){ return this.el_.seeking; };\nvjs.Html5.prototype.ended = function(){ return this.el_.ended; };\nvjs.Html5.prototype.defaultMuted = function(){ return this.el_.defaultMuted; };\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\nvjs.Html5.isSupported = function(){\n  return !!vjs.TEST_VID.canPlayType;\n};\n\nvjs.Html5.canPlaySource = function(srcObj){\n  // IE9 on Windows 7 without MediaPlayer throws an error here\n  // https://github.com/videojs/video.js/issues/519\n  try {\n    return !!vjs.TEST_VID.canPlayType(srcObj.type);\n  } catch(e) {\n    return '';\n  }\n  // TODO: Check Type\n  // If no Type, check ext\n  // Check Media Type\n};\n\nvjs.Html5.canControlVolume = function(){\n  var volume =  vjs.TEST_VID.volume;\n  vjs.TEST_VID.volume = (volume / 2) + 0.1;\n  return volume !== vjs.TEST_VID.volume;\n};\n\n// List of all HTML5 events (various uses).\nvjs.Html5.Events = 'loadstart,suspend,abort,error,emptied,stalled,loadedmetadata,loadeddata,canplay,canplaythrough,playing,waiting,seeking,seeked,ended,durationchange,timeupdate,progress,play,pause,ratechange,volumechange'.split(',');\n\nvjs.Html5.disposeMediaElement = function(el){\n  if (!el) { return; }\n\n  el['player'] = null;\n\n  if (el.parentNode) {\n    el.parentNode.removeChild(el);\n  }\n\n  // remove any child track or source nodes to prevent their loading\n  while(el.hasChildNodes()) {\n    el.removeChild(el.firstChild);\n  }\n\n  // remove any src reference. not setting `src=''` because that causes a warning\n  // in firefox\n  el.removeAttribute('src');\n\n  // force the media element to update its loading state by calling load()\n  if (typeof el.load === 'function') {\n    el.load();\n  }\n};\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\n\n  // Override Android 2.2 and less canPlayType method which is broken\nif (vjs.IS_OLD_ANDROID) {\n  document.createElement('video').constructor.prototype.canPlayType = function(type){\n    return (type && type.toLowerCase().indexOf('video/mp4') != -1) ? 'maybe' : '';\n  };\n}\n/**\n * @fileoverview VideoJS-SWF - Custom Flash Player with HTML5-ish API\n * https://github.com/zencoder/video-js-swf\n * Not using setupTriggers. Using global onEvent func to distribute events\n */\n\n/**\n * Flash Media Controller - Wrapper for fallback SWF API\n *\n * @param {vjs.Player} player\n * @param {Object=} options\n * @param {Function=} ready\n * @constructor\n */\nvjs.Flash = vjs.MediaTechController.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.MediaTechController.call(this, player, options, ready);\n\n    var source = options['source'],\n\n        // Which element to embed in\n        parentEl = options['parentEl'],\n\n        // Create a temporary element to be replaced by swf object\n        placeHolder = this.el_ = vjs.createEl('div', { id: player.id() + '_temp_flash' }),\n\n        // Generate ID for swf object\n        objId = player.id()+'_flash_api',\n\n        // Store player options in local var for optimization\n        // TODO: switch to using player methods instead of options\n        // e.g. player.autoplay();\n        playerOptions = player.options_,\n\n        // Merge default flashvars with ones passed in to init\n        flashVars = vjs.obj.merge({\n\n          // SWF Callback Functions\n          'readyFunction': 'videojs.Flash.onReady',\n          'eventProxyFunction': 'videojs.Flash.onEvent',\n          'errorEventProxyFunction': 'videojs.Flash.onError',\n\n          // Player Settings\n          'autoplay': playerOptions.autoplay,\n          'preload': playerOptions.preload,\n          'loop': playerOptions.loop,\n          'muted': playerOptions.muted\n\n        }, options['flashVars']),\n\n        // Merge default parames with ones passed in\n        params = vjs.obj.merge({\n          'wmode': 'opaque', // Opaque is needed to overlay controls, but can affect playback performance\n          'bgcolor': '#000000' // Using bgcolor prevents a white flash when the object is loading\n        }, options['params']),\n\n        // Merge default attributes with ones passed in\n        attributes = vjs.obj.merge({\n          'id': objId,\n          'name': objId, // Both ID and Name needed or swf to identifty itself\n          'class': 'vjs-tech'\n        }, options['attributes'])\n    ;\n\n    // If source was supplied pass as a flash var.\n    if (source) {\n      if (source.type && vjs.Flash.isStreamingType(source.type)) {\n        var parts = vjs.Flash.streamToParts(source.src);\n        flashVars['rtmpConnection'] = encodeURIComponent(parts.connection);\n        flashVars['rtmpStream'] = encodeURIComponent(parts.stream);\n      }\n      else {\n        flashVars['src'] = encodeURIComponent(vjs.getAbsoluteURL(source.src));\n      }\n    }\n\n    // Add placeholder to player div\n    vjs.insertFirst(placeHolder, parentEl);\n\n    // Having issues with Flash reloading on certain page actions (hide/resize/fullscreen) in certain browsers\n    // This allows resetting the playhead when we catch the reload\n    if (options['startTime']) {\n      this.ready(function(){\n        this.load();\n        this.play();\n        this.currentTime(options['startTime']);\n      });\n    }\n\n    // Flash iFrame Mode\n    // In web browsers there are multiple instances where changing the parent element or visibility of a plugin causes the plugin to reload.\n    // - Firefox just about always. https://bugzilla.mozilla.org/show_bug.cgi?id=90268 (might be fixed by version 13)\n    // - Webkit when hiding the plugin\n    // - Webkit and Firefox when using requestFullScreen on a parent element\n    // Loading the flash plugin into a dynamically generated iFrame gets around most of these issues.\n    // Issues that remain include hiding the element and requestFullScreen in Firefox specifically\n\n    // There's on particularly annoying issue with this method which is that Firefox throws a security error on an offsite Flash object loaded into a dynamically created iFrame.\n    // Even though the iframe was inserted into a page on the web, Firefox + Flash considers it a local app trying to access an internet file.\n    // I tried mulitple ways of setting the iframe src attribute but couldn't find a src that worked well. Tried a real/fake source, in/out of domain.\n    // Also tried a method from stackoverflow that caused a security error in all browsers. http://stackoverflow.com/questions/2486901/how-to-set-document-domain-for-a-dynamically-generated-iframe\n    // In the end the solution I found to work was setting the iframe window.location.href right before doing a document.write of the Flash object.\n    // The only downside of this it seems to trigger another http request to the original page (no matter what's put in the href). Not sure why that is.\n\n    // NOTE (2012-01-29): Cannot get Firefox to load the remote hosted SWF into a dynamically created iFrame\n    // Firefox 9 throws a security error, unleess you call location.href right before doc.write.\n    //    Not sure why that even works, but it causes the browser to look like it's continuously trying to load the page.\n    // Firefox 3.6 keeps calling the iframe onload function anytime I write to it, causing an endless loop.\n\n    if (options['iFrameMode'] === true && !vjs.IS_FIREFOX) {\n\n      // Create iFrame with vjs-tech class so it's 100% width/height\n      var iFrm = vjs.createEl('iframe', {\n        'id': objId + '_iframe',\n        'name': objId + '_iframe',\n        'className': 'vjs-tech',\n        'scrolling': 'no',\n        'marginWidth': 0,\n        'marginHeight': 0,\n        'frameBorder': 0\n      });\n\n      // Update ready function names in flash vars for iframe window\n      flashVars['readyFunction'] = 'ready';\n      flashVars['eventProxyFunction'] = 'events';\n      flashVars['errorEventProxyFunction'] = 'errors';\n\n      // Tried multiple methods to get this to work in all browsers\n\n      // Tried embedding the flash object in the page first, and then adding a place holder to the iframe, then replacing the placeholder with the page object.\n      // The goal here was to try to load the swf URL in the parent page first and hope that got around the firefox security error\n      // var newObj = vjs.Flash.embed(options['swf'], placeHolder, flashVars, params, attributes);\n      // (in onload)\n      //  var temp = vjs.createEl('a', { id:'asdf', innerHTML: 'asdf' } );\n      //  iDoc.body.appendChild(temp);\n\n      // Tried embedding the flash object through javascript in the iframe source.\n      // This works in webkit but still triggers the firefox security error\n      // iFrm.src = 'javascript: document.write('\"+vjs.Flash.getEmbedCode(options['swf'], flashVars, params, attributes)+\"');\";\n\n      // Tried an actual local iframe just to make sure that works, but it kills the easiness of the CDN version if you require the user to host an iframe\n      // We should add an option to host the iframe locally though, because it could help a lot of issues.\n      // iFrm.src = \"iframe.html\";\n\n      // Wait until iFrame has loaded to write into it.\n      vjs.on(iFrm, 'load', vjs.bind(this, function(){\n\n        var iDoc,\n            iWin = iFrm.contentWindow;\n\n        // The one working method I found was to use the iframe's document.write() to create the swf object\n        // This got around the security issue in all browsers except firefox.\n        // I did find a hack where if I call the iframe's window.location.href='', it would get around the security error\n        // However, the main page would look like it was loading indefinitely (URL bar loading spinner would never stop)\n        // Plus Firefox 3.6 didn't work no matter what I tried.\n        // if (vjs.USER_AGENT.match('Firefox')) {\n        //   iWin.location.href = '';\n        // }\n\n        // Get the iFrame's document depending on what the browser supports\n        iDoc = iFrm.contentDocument ? iFrm.contentDocument : iFrm.contentWindow.document;\n\n        // Tried ensuring both document domains were the same, but they already were, so that wasn't the issue.\n        // Even tried adding /. that was mentioned in a browser security writeup\n        // document.domain = document.domain+'/.';\n        // iDoc.domain = document.domain+'/.';\n\n        // Tried adding the object to the iframe doc's innerHTML. Security error in all browsers.\n        // iDoc.body.innerHTML = swfObjectHTML;\n\n        // Tried appending the object to the iframe doc's body. Security error in all browsers.\n        // iDoc.body.appendChild(swfObject);\n\n        // Using document.write actually got around the security error that browsers were throwing.\n        // Again, it's a dynamically generated (same domain) iframe, loading an external Flash swf.\n        // Not sure why that's a security issue, but apparently it is.\n        iDoc.write(vjs.Flash.getEmbedCode(options['swf'], flashVars, params, attributes));\n\n        // Setting variables on the window needs to come after the doc write because otherwise they can get reset in some browsers\n        // So far no issues with swf ready event being called before it's set on the window.\n        iWin['player'] = this.player_;\n\n        // Create swf ready function for iFrame window\n        iWin['ready'] = vjs.bind(this.player_, function(currSwf){\n          var el = iDoc.getElementById(currSwf),\n              player = this,\n              tech = player.tech;\n\n          // Update reference to playback technology element\n          tech.el_ = el;\n\n          // Make sure swf is actually ready. Sometimes the API isn't actually yet.\n          vjs.Flash.checkReady(tech);\n        });\n\n        // Create event listener for all swf events\n        iWin['events'] = vjs.bind(this.player_, function(swfID, eventName){\n          var player = this;\n          if (player && player.techName === 'flash') {\n            player.trigger(eventName);\n          }\n        });\n\n        // Create error listener for all swf errors\n        iWin['errors'] = vjs.bind(this.player_, function(swfID, eventName){\n          vjs.log('Flash Error', eventName);\n        });\n\n      }));\n\n      // Replace placeholder with iFrame (it will load now)\n      placeHolder.parentNode.replaceChild(iFrm, placeHolder);\n\n    // If not using iFrame mode, embed as normal object\n    } else {\n      vjs.Flash.embed(options['swf'], placeHolder, flashVars, params, attributes);\n    }\n  }\n});\n\nvjs.Flash.prototype.dispose = function(){\n  vjs.MediaTechController.prototype.dispose.call(this);\n};\n\nvjs.Flash.prototype.play = function(){\n  this.el_.vjs_play();\n};\n\nvjs.Flash.prototype.pause = function(){\n  this.el_.vjs_pause();\n};\n\nvjs.Flash.prototype.src = function(src){\n  if (vjs.Flash.isStreamingSrc(src)) {\n    src = vjs.Flash.streamToParts(src);\n    this.setRtmpConnection(src.connection);\n    this.setRtmpStream(src.stream);\n  }\n  else {\n    // Make sure source URL is abosolute.\n    src = vjs.getAbsoluteURL(src);\n    this.el_.vjs_src(src);\n  }\n\n  // Currently the SWF doesn't autoplay if you load a source later.\n  // e.g. Load player w/ no source, wait 2s, set src.\n  if (this.player_.autoplay()) {\n    var tech = this;\n    setTimeout(function(){ tech.play(); }, 0);\n  }\n};\n\nvjs.Flash.prototype.currentSrc = function(){\n  var src = this.el_.vjs_getProperty('currentSrc');\n  // no src, check and see if RTMP\n  if (src == null) {\n    var connection = this.rtmpConnection(),\n        stream = this.rtmpStream();\n\n    if (connection && stream) {\n      src = vjs.Flash.streamFromParts(connection, stream);\n    }\n  }\n  return src;\n};\n\nvjs.Flash.prototype.load = function(){\n  this.el_.vjs_load();\n};\n\nvjs.Flash.prototype.poster = function(){\n  this.el_.vjs_getProperty('poster');\n};\n\nvjs.Flash.prototype.buffered = function(){\n  return vjs.createTimeRange(0, this.el_.vjs_getProperty('buffered'));\n};\n\nvjs.Flash.prototype.supportsFullScreen = function(){\n  return false; // Flash does not allow fullscreen through javascript\n};\n\nvjs.Flash.prototype.enterFullScreen = function(){\n  return false;\n};\n\n\n// Create setters and getters for attributes\nvar api = vjs.Flash.prototype,\n    readWrite = 'rtmpConnection,rtmpStream,preload,currentTime,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(','),\n    readOnly = 'error,currentSrc,networkState,readyState,seeking,initialTime,duration,startOffsetTime,paused,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks'.split(',');\n    // Overridden: buffered\n\n/**\n * @this {*}\n * @private\n */\nvar createSetter = function(attr){\n  var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n  api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n};\n\n/**\n * @this {*}\n * @private\n */\nvar createGetter = function(attr){\n  api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n};\n\n(function(){\n  var i;\n  // Create getter and setters for all read/write attributes\n  for (i = 0; i < readWrite.length; i++) {\n    createGetter(readWrite[i]);\n    createSetter(readWrite[i]);\n  }\n\n  // Create getters for read-only attributes\n  for (i = 0; i < readOnly.length; i++) {\n    createGetter(readOnly[i]);\n  }\n})();\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nvjs.Flash.isSupported = function(){\n  return vjs.Flash.version()[0] >= 10;\n  // return swfobject.hasFlashPlayerVersion('10');\n};\n\nvjs.Flash.canPlaySource = function(srcObj){\n  var type;\n\n  if (!srcObj.type) {\n    return '';\n  }\n\n  type = srcObj.type.replace(/;.*/,'').toLowerCase();\n  if (type in vjs.Flash.formats || type in vjs.Flash.streamingFormats) {\n    return 'maybe';\n  }\n};\n\nvjs.Flash.formats = {\n  'video/flv': 'FLV',\n  'video/x-flv': 'FLV',\n  'video/mp4': 'MP4',\n  'video/m4v': 'MP4'\n};\n\nvjs.Flash.streamingFormats = {\n  'rtmp/mp4': 'MP4',\n  'rtmp/flv': 'FLV'\n};\n\nvjs.Flash['onReady'] = function(currSwf){\n  var el = vjs.el(currSwf);\n\n  // Get player from box\n  // On firefox reloads, el might already have a player\n  var player = el['player'] || el.parentNode['player'],\n      tech = player.tech;\n\n  // Reference player on tech element\n  el['player'] = player;\n\n  // Update reference to playback technology element\n  tech.el_ = el;\n\n  vjs.Flash.checkReady(tech);\n};\n\n// The SWF isn't alwasy ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nvjs.Flash.checkReady = function(tech){\n\n  // Check if API property exists\n  if (tech.el().vjs_getProperty) {\n\n    // If so, tell tech it's ready\n    tech.triggerReady();\n\n  // Otherwise wait longer.\n  } else {\n\n    setTimeout(function(){\n      vjs.Flash.checkReady(tech);\n    }, 50);\n\n  }\n};\n\n// Trigger events from the swf on the player\nvjs.Flash['onEvent'] = function(swfID, eventName){\n  var player = vjs.el(swfID)['player'];\n  player.trigger(eventName);\n};\n\n// Log errors from the swf\nvjs.Flash['onError'] = function(swfID, err){\n  var player = vjs.el(swfID)['player'];\n  player.trigger('error');\n  vjs.log('Flash Error', err, swfID);\n};\n\n// Flash Version Check\nvjs.Flash.version = function(){\n  var version = '0,0,0';\n\n  // IE\n  try {\n    version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n  // other browsers\n  } catch(e) {\n    try {\n      if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n        version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n      }\n    } catch(err) {}\n  }\n  return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nvjs.Flash.embed = function(swf, placeHolder, flashVars, params, attributes){\n  var code = vjs.Flash.getEmbedCode(swf, flashVars, params, attributes),\n\n      // Get element by embedding code and retrieving created element\n      obj = vjs.createEl('div', { innerHTML: code }).childNodes[0],\n\n      par = placeHolder.parentNode\n  ;\n\n  placeHolder.parentNode.replaceChild(obj, placeHolder);\n\n  // IE6 seems to have an issue where it won't initialize the swf object after injecting it.\n  // This is a dumb fix\n  var newObj = par.childNodes[0];\n  setTimeout(function(){\n    newObj.style.display = 'block';\n  }, 1000);\n\n  return obj;\n\n};\n\nvjs.Flash.getEmbedCode = function(swf, flashVars, params, attributes){\n\n  var objTag = '<object type=\"application/x-shockwave-flash\"',\n      flashVarsString = '',\n      paramsString = '',\n      attrsString = '';\n\n  // Convert flash vars to string\n  if (flashVars) {\n    vjs.obj.each(flashVars, function(key, val){\n      flashVarsString += (key + '=' + val + '&amp;');\n    });\n  }\n\n  // Add swf, flashVars, and other default params\n  params = vjs.obj.merge({\n    'movie': swf,\n    'flashvars': flashVarsString,\n    'allowScriptAccess': 'always', // Required to talk to swf\n    'allowNetworking': 'all' // All should be default, but having security issues.\n  }, params);\n\n  // Create param tags string\n  vjs.obj.each(params, function(key, val){\n    paramsString += '<param name=\"'+key+'\" value=\"'+val+'\" />';\n  });\n\n  attributes = vjs.obj.merge({\n    // Add swf to attributes (need both for IE and Others to work)\n    'data': swf,\n\n    // Default to 100% width/height\n    'width': '100%',\n    'height': '100%'\n\n  }, attributes);\n\n  // Create Attributes string\n  vjs.obj.each(attributes, function(key, val){\n    attrsString += (key + '=\"' + val + '\" ');\n  });\n\n  return objTag + attrsString + '>' + paramsString + '</object>';\n};\n\nvjs.Flash.streamFromParts = function(connection, stream) {\n  return connection + '&' + stream;\n};\n\nvjs.Flash.streamToParts = function(src) {\n  var parts = {\n    connection: '',\n    stream: ''\n  };\n\n  if (! src) {\n    return parts;\n  }\n\n  // Look for the normal URL separator we expect, '&'.\n  // If found, we split the URL into two pieces around the\n  // first '&'.\n  var connEnd = src.indexOf('&');\n  var streamBegin;\n  if (connEnd !== -1) {\n    streamBegin = connEnd + 1;\n  }\n  else {\n    // If there's not a '&', we use the last '/' as the delimiter.\n    connEnd = streamBegin = src.lastIndexOf('/') + 1;\n    if (connEnd === 0) {\n      // really, there's not a '/'?\n      connEnd = streamBegin = src.length;\n    }\n  }\n  parts.connection = src.substring(0, connEnd);\n  parts.stream = src.substring(streamBegin, src.length);\n\n  return parts;\n};\n\nvjs.Flash.isStreamingType = function(srcType) {\n  return srcType in vjs.Flash.streamingFormats;\n};\n\n// RTMP has four variations, any string starting\n// with one of these protocols should be valid\nvjs.Flash.RTMP_RE = /^rtmp[set]?:\\/\\//i;\n\nvjs.Flash.isStreamingSrc = function(src) {\n  return vjs.Flash.RTMP_RE.test(src);\n};\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @constructor\n */\nvjs.MediaLoader = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.Component.call(this, player, options, ready);\n\n    // If there are no sources when the player is initialized,\n    // load the first supported playback technology.\n    if (!player.options_['sources'] || player.options_['sources'].length === 0) {\n      for (var i=0,j=player.options_['techOrder']; i<j.length; i++) {\n        var techName = vjs.capitalize(j[i]),\n            tech = window['videojs'][techName];\n\n        // Check if the browser supports this technology\n        if (tech && tech.isSupported()) {\n          player.loadTech(techName);\n          break;\n        }\n      }\n    } else {\n      // // Loop through playback technologies (HTML5, Flash) and check for support.\n      // // Then load the best source.\n      // // A few assumptions here:\n      // //   All playback technologies respect preload false.\n      player.src(player.options_['sources']);\n    }\n  }\n});\n/**\n * @fileoverview Text Tracks\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impared\n * Subtitles - text displayed over the video for those who don't understand langauge in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n// Player Additions - Functions add to the player object for easier access to tracks\n\n/**\n * List of associated text tracks\n * @type {Array}\n * @private\n */\nvjs.Player.prototype.textTracks_;\n\n/**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n * @return {Array}           Array of track objects\n * @private\n */\nvjs.Player.prototype.textTracks = function(){\n  this.textTracks_ = this.textTracks_ || [];\n  return this.textTracks_;\n};\n\n/**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n * @param {String}  kind        Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label       Optional label\n * @param {String=} language    Optional language\n * @param {Object=} options     Additional track options, like src\n * @private\n */\nvjs.Player.prototype.addTextTrack = function(kind, label, language, options){\n  var tracks = this.textTracks_ = this.textTracks_ || [];\n  options = options || {};\n\n  options['kind'] = kind;\n  options['label'] = label;\n  options['language'] = language;\n\n  // HTML5 Spec says default to subtitles.\n  // Uppercase first letter to match class names\n  var Kind = vjs.capitalize(kind || 'subtitles');\n\n  // Create correct texttrack class. CaptionsTrack, etc.\n  var track = new window['videojs'][Kind + 'Track'](this, options);\n\n  tracks.push(track);\n\n  // If track.dflt() is set, start showing immediately\n  // TODO: Add a process to deterime the best track to show for the specific kind\n  // Incase there are mulitple defaulted tracks of the same kind\n  // Or the user has a set preference of a specific language that should override the default\n  // if (track.dflt()) {\n  //   this.ready(vjs.bind(track, track.show));\n  // }\n\n  return track;\n};\n\n/**\n * Add an array of text tracks. captions, subtitles, chapters, descriptions\n * Track objects will be stored in the player.textTracks() array\n * @param {Array} trackList Array of track elements or objects (fake track elements)\n * @private\n */\nvjs.Player.prototype.addTextTracks = function(trackList){\n  var trackObj;\n\n  for (var i = 0; i < trackList.length; i++) {\n    trackObj = trackList[i];\n    this.addTextTrack(trackObj['kind'], trackObj['label'], trackObj['language'], trackObj);\n  }\n\n  return this;\n};\n\n// Show a text track\n// disableSameKind: disable all other tracks of the same kind. Value should be a track kind (captions, etc.)\nvjs.Player.prototype.showTextTrack = function(id, disableSameKind){\n  var tracks = this.textTracks_,\n      i = 0,\n      j = tracks.length,\n      track, showTrack, kind;\n\n  // Find Track with same ID\n  for (;i<j;i++) {\n    track = tracks[i];\n    if (track.id() === id) {\n      track.show();\n      showTrack = track;\n\n    // Disable tracks of the same kind\n    } else if (disableSameKind && track.kind() == disableSameKind && track.mode() > 0) {\n      track.disable();\n    }\n  }\n\n  // Get track kind from shown track or disableSameKind\n  kind = (showTrack) ? showTrack.kind() : ((disableSameKind) ? disableSameKind : false);\n\n  // Trigger trackchange event, captionstrackchange, subtitlestrackchange, etc.\n  if (kind) {\n    this.trigger(kind+'trackchange');\n  }\n\n  return this;\n};\n\n/**\n * The base class for all text tracks\n *\n * Handles the parsing, hiding, and showing of text track cues\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.TextTrack = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    // Apply track info to track object\n    // Options will often be a track element\n\n    // Build ID if one doesn't exist\n    this.id_ = options['id'] || ('vjs_' + options['kind'] + '_' + options['language'] + '_' + vjs.guid++);\n    this.src_ = options['src'];\n    // 'default' is a reserved keyword in js so we use an abbreviated version\n    this.dflt_ = options['default'] || options['dflt'];\n    this.title_ = options['title'];\n    this.language_ = options['srclang'];\n    this.label_ = options['label'];\n    this.cues_ = [];\n    this.activeCues_ = [];\n    this.readyState_ = 0;\n    this.mode_ = 0;\n\n    this.player_.on('fullscreenchange', vjs.bind(this, this.adjustFontSize));\n  }\n});\n\n/**\n * Track kind value. Captions, subtitles, etc.\n * @private\n */\nvjs.TextTrack.prototype.kind_;\n\n/**\n * Get the track kind value\n * @return {String}\n */\nvjs.TextTrack.prototype.kind = function(){\n  return this.kind_;\n};\n\n/**\n * Track src value\n * @private\n */\nvjs.TextTrack.prototype.src_;\n\n/**\n * Get the track src value\n * @return {String}\n */\nvjs.TextTrack.prototype.src = function(){\n  return this.src_;\n};\n\n/**\n * Track default value\n * If default is used, subtitles/captions to start showing\n * @private\n */\nvjs.TextTrack.prototype.dflt_;\n\n/**\n * Get the track default value. ('default' is a reserved keyword)\n * @return {Boolean}\n */\nvjs.TextTrack.prototype.dflt = function(){\n  return this.dflt_;\n};\n\n/**\n * Track title value\n * @private\n */\nvjs.TextTrack.prototype.title_;\n\n/**\n * Get the track title value\n * @return {String}\n */\nvjs.TextTrack.prototype.title = function(){\n  return this.title_;\n};\n\n/**\n * Language - two letter string to represent track language, e.g. 'en' for English\n * Spec def: readonly attribute DOMString language;\n * @private\n */\nvjs.TextTrack.prototype.language_;\n\n/**\n * Get the track language value\n * @return {String}\n */\nvjs.TextTrack.prototype.language = function(){\n  return this.language_;\n};\n\n/**\n * Track label e.g. 'English'\n * Spec def: readonly attribute DOMString label;\n * @private\n */\nvjs.TextTrack.prototype.label_;\n\n/**\n * Get the track label value\n * @return {String}\n */\nvjs.TextTrack.prototype.label = function(){\n  return this.label_;\n};\n\n/**\n * All cues of the track. Cues have a startTime, endTime, text, and other properties.\n * Spec def: readonly attribute TextTrackCueList cues;\n * @private\n */\nvjs.TextTrack.prototype.cues_;\n\n/**\n * Get the track cues\n * @return {Array}\n */\nvjs.TextTrack.prototype.cues = function(){\n  return this.cues_;\n};\n\n/**\n * ActiveCues is all cues that are currently showing\n * Spec def: readonly attribute TextTrackCueList activeCues;\n * @private\n */\nvjs.TextTrack.prototype.activeCues_;\n\n/**\n * Get the track active cues\n * @return {Array}\n */\nvjs.TextTrack.prototype.activeCues = function(){\n  return this.activeCues_;\n};\n\n/**\n * ReadyState describes if the text file has been loaded\n * const unsigned short NONE = 0;\n * const unsigned short LOADING = 1;\n * const unsigned short LOADED = 2;\n * const unsigned short ERROR = 3;\n * readonly attribute unsigned short readyState;\n * @private\n */\nvjs.TextTrack.prototype.readyState_;\n\n/**\n * Get the track readyState\n * @return {Number}\n */\nvjs.TextTrack.prototype.readyState = function(){\n  return this.readyState_;\n};\n\n/**\n * Mode describes if the track is showing, hidden, or disabled\n * const unsigned short OFF = 0;\n * const unsigned short HIDDEN = 1; (still triggering cuechange events, but not visible)\n * const unsigned short SHOWING = 2;\n * attribute unsigned short mode;\n * @private\n */\nvjs.TextTrack.prototype.mode_;\n\n/**\n * Get the track mode\n * @return {Number}\n */\nvjs.TextTrack.prototype.mode = function(){\n  return this.mode_;\n};\n\n/**\n * Change the font size of the text track to make it larger when playing in fullscreen mode\n * and restore it to its normal size when not in fullscreen mode.\n */\nvjs.TextTrack.prototype.adjustFontSize = function(){\n    if (this.player_.isFullScreen) {\n        // Scale the font by the same factor as increasing the video width to the full screen window width.\n        // Additionally, multiply that factor by 1.4, which is the default font size for\n        // the caption track (from the CSS)\n        this.el_.style.fontSize = screen.width / this.player_.width() * 1.4 * 100 + '%';\n    } else {\n        // Change the font size of the text track back to its original non-fullscreen size\n        this.el_.style.fontSize = '';\n    }\n};\n\n/**\n * Create basic div to hold cue text\n * @return {Element}\n */\nvjs.TextTrack.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-' + this.kind_ + ' vjs-text-track'\n  });\n};\n\n/**\n * Show: Mode Showing (2)\n * Indicates that the text track is active. If no attempt has yet been made to obtain the track's cues, the user agent will perform such an attempt momentarily.\n * The user agent is maintaining a list of which cues are active, and events are being fired accordingly.\n * In addition, for text tracks whose kind is subtitles or captions, the cues are being displayed over the video as appropriate;\n * for text tracks whose kind is descriptions, the user agent is making the cues available to the user in a non-visual fashion;\n * and for text tracks whose kind is chapters, the user agent is making available to the user a mechanism by which the user can navigate to any point in the media resource by selecting a cue.\n * The showing by default state is used in conjunction with the default attribute on track elements to indicate that the text track was enabled due to that attribute.\n * This allows the user agent to override the state if a later track is discovered that is more appropriate per the user's preferences.\n */\nvjs.TextTrack.prototype.show = function(){\n  this.activate();\n\n  this.mode_ = 2;\n\n  // Show element.\n  vjs.Component.prototype.show.call(this);\n};\n\n/**\n * Hide: Mode Hidden (1)\n * Indicates that the text track is active, but that the user agent is not actively displaying the cues.\n * If no attempt has yet been made to obtain the track's cues, the user agent will perform such an attempt momentarily.\n * The user agent is maintaining a list of which cues are active, and events are being fired accordingly.\n */\nvjs.TextTrack.prototype.hide = function(){\n  // When hidden, cues are still triggered. Disable to stop triggering.\n  this.activate();\n\n  this.mode_ = 1;\n\n  // Hide element.\n  vjs.Component.prototype.hide.call(this);\n};\n\n/**\n * Disable: Mode Off/Disable (0)\n * Indicates that the text track is not active. Other than for the purposes of exposing the track in the DOM, the user agent is ignoring the text track.\n * No cues are active, no events are fired, and the user agent will not attempt to obtain the track's cues.\n */\nvjs.TextTrack.prototype.disable = function(){\n  // If showing, hide.\n  if (this.mode_ == 2) { this.hide(); }\n\n  // Stop triggering cues\n  this.deactivate();\n\n  // Switch Mode to Off\n  this.mode_ = 0;\n};\n\n/**\n * Turn on cue tracking. Tracks that are showing OR hidden are active.\n */\nvjs.TextTrack.prototype.activate = function(){\n  // Load text file if it hasn't been yet.\n  if (this.readyState_ === 0) { this.load(); }\n\n  // Only activate if not already active.\n  if (this.mode_ === 0) {\n    // Update current cue on timeupdate\n    // Using unique ID for bind function so other tracks don't remove listener\n    this.player_.on('timeupdate', vjs.bind(this, this.update, this.id_));\n\n    // Reset cue time on media end\n    this.player_.on('ended', vjs.bind(this, this.reset, this.id_));\n\n    // Add to display\n    if (this.kind_ === 'captions' || this.kind_ === 'subtitles') {\n      this.player_.getChild('textTrackDisplay').addChild(this);\n    }\n  }\n};\n\n/**\n * Turn off cue tracking.\n */\nvjs.TextTrack.prototype.deactivate = function(){\n  // Using unique ID for bind function so other tracks don't remove listener\n  this.player_.off('timeupdate', vjs.bind(this, this.update, this.id_));\n  this.player_.off('ended', vjs.bind(this, this.reset, this.id_));\n  this.reset(); // Reset\n\n  // Remove from display\n  this.player_.getChild('textTrackDisplay').removeChild(this);\n};\n\n// A readiness state\n// One of the following:\n//\n// Not loaded\n// Indicates that the text track is known to exist (e.g. it has been declared with a track element), but its cues have not been obtained.\n//\n// Loading\n// Indicates that the text track is loading and there have been no fatal errors encountered so far. Further cues might still be added to the track.\n//\n// Loaded\n// Indicates that the text track has been loaded with no fatal errors. No new cues will be added to the track except if the text track corresponds to a MutableTextTrack object.\n//\n// Failed to load\n// Indicates that the text track was enabled, but when the user agent attempted to obtain it, this failed in some way (e.g. URL could not be resolved, network error, unknown text track format). Some or all of the cues are likely missing and will not be obtained.\nvjs.TextTrack.prototype.load = function(){\n\n  // Only load if not loaded yet.\n  if (this.readyState_ === 0) {\n    this.readyState_ = 1;\n    vjs.get(this.src_, vjs.bind(this, this.parseCues), vjs.bind(this, this.onError));\n  }\n\n};\n\nvjs.TextTrack.prototype.onError = function(err){\n  this.error = err;\n  this.readyState_ = 3;\n  this.trigger('error');\n};\n\n// Parse the WebVTT text format for cue times.\n// TODO: Separate parser into own class so alternative timed text formats can be used. (TTML, DFXP)\nvjs.TextTrack.prototype.parseCues = function(srcContent) {\n  var cue, time, text,\n      lines = srcContent.split('\\n'),\n      line = '', id;\n\n  for (var i=1, j=lines.length; i<j; i++) {\n    // Line 0 should be 'WEBVTT', so skipping i=0\n\n    line = vjs.trim(lines[i]); // Trim whitespace and linebreaks\n\n    if (line) { // Loop until a line with content\n\n      // First line could be an optional cue ID\n      // Check if line has the time separator\n      if (line.indexOf('-->') == -1) {\n        id = line;\n        // Advance to next line for timing.\n        line = vjs.trim(lines[++i]);\n      } else {\n        id = this.cues_.length;\n      }\n\n      // First line - Number\n      cue = {\n        id: id, // Cue Number\n        index: this.cues_.length // Position in Array\n      };\n\n      // Timing line\n      time = line.split(' --> ');\n      cue.startTime = this.parseCueTime(time[0]);\n      cue.endTime = this.parseCueTime(time[1]);\n\n      // Additional lines - Cue Text\n      text = [];\n\n      // Loop until a blank line or end of lines\n      // Assumeing trim('') returns false for blank lines\n      while (lines[++i] && (line = vjs.trim(lines[i]))) {\n        text.push(line);\n      }\n\n      cue.text = text.join('<br/>');\n\n      // Add this cue\n      this.cues_.push(cue);\n    }\n  }\n\n  this.readyState_ = 2;\n  this.trigger('loaded');\n};\n\n\nvjs.TextTrack.prototype.parseCueTime = function(timeText) {\n  var parts = timeText.split(':'),\n      time = 0,\n      hours, minutes, other, seconds, ms;\n\n  // Check if optional hours place is included\n  // 00:00:00.000 vs. 00:00.000\n  if (parts.length == 3) {\n    hours = parts[0];\n    minutes = parts[1];\n    other = parts[2];\n  } else {\n    hours = 0;\n    minutes = parts[0];\n    other = parts[1];\n  }\n\n  // Break other (seconds, milliseconds, and flags) by spaces\n  // TODO: Make additional cue layout settings work with flags\n  other = other.split(/\\s+/);\n  // Remove seconds. Seconds is the first part before any spaces.\n  seconds = other.splice(0,1)[0];\n  // Could use either . or , for decimal\n  seconds = seconds.split(/\\.|,/);\n  // Get milliseconds\n  ms = parseFloat(seconds[1]);\n  seconds = seconds[0];\n\n  // hours => seconds\n  time += parseFloat(hours) * 3600;\n  // minutes => seconds\n  time += parseFloat(minutes) * 60;\n  // Add seconds\n  time += parseFloat(seconds);\n  // Add milliseconds\n  if (ms) { time += ms/1000; }\n\n  return time;\n};\n\n// Update active cues whenever timeupdate events are triggered on the player.\nvjs.TextTrack.prototype.update = function(){\n  if (this.cues_.length > 0) {\n\n    // Get curent player time\n    var time = this.player_.currentTime();\n\n    // Check if the new time is outside the time box created by the the last update.\n    if (this.prevChange === undefined || time < this.prevChange || this.nextChange <= time) {\n      var cues = this.cues_,\n\n          // Create a new time box for this state.\n          newNextChange = this.player_.duration(), // Start at beginning of the timeline\n          newPrevChange = 0, // Start at end\n\n          reverse = false, // Set the direction of the loop through the cues. Optimized the cue check.\n          newCues = [], // Store new active cues.\n\n          // Store where in the loop the current active cues are, to provide a smart starting point for the next loop.\n          firstActiveIndex, lastActiveIndex,\n          cue, i; // Loop vars\n\n      // Check if time is going forwards or backwards (scrubbing/rewinding)\n      // If we know the direction we can optimize the starting position and direction of the loop through the cues array.\n      if (time >= this.nextChange || this.nextChange === undefined) { // NextChange should happen\n        // Forwards, so start at the index of the first active cue and loop forward\n        i = (this.firstActiveIndex !== undefined) ? this.firstActiveIndex : 0;\n      } else {\n        // Backwards, so start at the index of the last active cue and loop backward\n        reverse = true;\n        i = (this.lastActiveIndex !== undefined) ? this.lastActiveIndex : cues.length - 1;\n      }\n\n      while (true) { // Loop until broken\n        cue = cues[i];\n\n        // Cue ended at this point\n        if (cue.endTime <= time) {\n          newPrevChange = Math.max(newPrevChange, cue.endTime);\n\n          if (cue.active) {\n            cue.active = false;\n          }\n\n          // No earlier cues should have an active start time.\n          // Nevermind. Assume first cue could have a duration the same as the video.\n          // In that case we need to loop all the way back to the beginning.\n          // if (reverse && cue.startTime) { break; }\n\n        // Cue hasn't started\n        } else if (time < cue.startTime) {\n          newNextChange = Math.min(newNextChange, cue.startTime);\n\n          if (cue.active) {\n            cue.active = false;\n          }\n\n          // No later cues should have an active start time.\n          if (!reverse) { break; }\n\n        // Cue is current\n        } else {\n\n          if (reverse) {\n            // Add cue to front of array to keep in time order\n            newCues.splice(0,0,cue);\n\n            // If in reverse, the first current cue is our lastActiveCue\n            if (lastActiveIndex === undefined) { lastActiveIndex = i; }\n            firstActiveIndex = i;\n          } else {\n            // Add cue to end of array\n            newCues.push(cue);\n\n            // If forward, the first current cue is our firstActiveIndex\n            if (firstActiveIndex === undefined) { firstActiveIndex = i; }\n            lastActiveIndex = i;\n          }\n\n          newNextChange = Math.min(newNextChange, cue.endTime);\n          newPrevChange = Math.max(newPrevChange, cue.startTime);\n\n          cue.active = true;\n        }\n\n        if (reverse) {\n          // Reverse down the array of cues, break if at first\n          if (i === 0) { break; } else { i--; }\n        } else {\n          // Walk up the array fo cues, break if at last\n          if (i === cues.length - 1) { break; } else { i++; }\n        }\n\n      }\n\n      this.activeCues_ = newCues;\n      this.nextChange = newNextChange;\n      this.prevChange = newPrevChange;\n      this.firstActiveIndex = firstActiveIndex;\n      this.lastActiveIndex = lastActiveIndex;\n\n      this.updateDisplay();\n\n      this.trigger('cuechange');\n    }\n  }\n};\n\n// Add cue HTML to display\nvjs.TextTrack.prototype.updateDisplay = function(){\n  var cues = this.activeCues_,\n      html = '',\n      i=0,j=cues.length;\n\n  for (;i<j;i++) {\n    html += '<span class=\"vjs-tt-cue\">'+cues[i].text+'</span>';\n  }\n\n  this.el_.innerHTML = html;\n};\n\n// Set all loop helper values back\nvjs.TextTrack.prototype.reset = function(){\n  this.nextChange = 0;\n  this.prevChange = this.player_.duration();\n  this.firstActiveIndex = 0;\n  this.lastActiveIndex = 0;\n};\n\n// Create specific track types\n/**\n * The track component for managing the hiding and showing of captions\n *\n * @constructor\n */\nvjs.CaptionsTrack = vjs.TextTrack.extend();\nvjs.CaptionsTrack.prototype.kind_ = 'captions';\n// Exporting here because Track creation requires the track kind\n// to be available on global object. e.g. new window['videojs'][Kind + 'Track']\n\n/**\n * The track component for managing the hiding and showing of subtitles\n *\n * @constructor\n */\nvjs.SubtitlesTrack = vjs.TextTrack.extend();\nvjs.SubtitlesTrack.prototype.kind_ = 'subtitles';\n\n/**\n * The track component for managing the hiding and showing of chapters\n *\n * @constructor\n */\nvjs.ChaptersTrack = vjs.TextTrack.extend();\nvjs.ChaptersTrack.prototype.kind_ = 'chapters';\n\n\n/* Text Track Display\n============================================================================= */\n// Global container for both subtitle and captions text. Simple div container.\n\n/**\n * The component for displaying text track cues\n *\n * @constructor\n */\nvjs.TextTrackDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.Component.call(this, player, options, ready);\n\n    // This used to be called during player init, but was causing an error\n    // if a track should show by default and the display hadn't loaded yet.\n    // Should probably be moved to an external track loader when we support\n    // tracks that don't need a display.\n    if (player.options_['tracks'] && player.options_['tracks'].length > 0) {\n      this.player_.addTextTracks(player.options_['tracks']);\n    }\n  }\n});\n\nvjs.TextTrackDisplay.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-text-track-display'\n  });\n};\n\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @constructor\n */\nvjs.TextTrackMenuItem = vjs.MenuItem.extend({\n  /** @constructor */\n  init: function(player, options){\n    var track = this.track = options['track'];\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = track.label();\n    options['selected'] = track.dflt();\n    vjs.MenuItem.call(this, player, options);\n\n    this.player_.on(track.kind() + 'trackchange', vjs.bind(this, this.update));\n  }\n});\n\nvjs.TextTrackMenuItem.prototype.onClick = function(){\n  vjs.MenuItem.prototype.onClick.call(this);\n  this.player_.showTextTrack(this.track.id_, this.track.kind());\n};\n\nvjs.TextTrackMenuItem.prototype.update = function(){\n  this.selected(this.track.mode() == 2);\n};\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @constructor\n */\nvjs.OffTextTrackMenuItem = vjs.TextTrackMenuItem.extend({\n  /** @constructor */\n  init: function(player, options){\n    // Create pseudo track info\n    // Requires options['kind']\n    options['track'] = {\n      kind: function() { return options['kind']; },\n      player: player,\n      label: function(){ return options['kind'] + ' off'; },\n      dflt: function(){ return false; },\n      mode: function(){ return false; }\n    };\n    vjs.TextTrackMenuItem.call(this, player, options);\n    this.selected(true);\n  }\n});\n\nvjs.OffTextTrackMenuItem.prototype.onClick = function(){\n  vjs.TextTrackMenuItem.prototype.onClick.call(this);\n  this.player_.showTextTrack(this.track.id_, this.track.kind());\n};\n\nvjs.OffTextTrackMenuItem.prototype.update = function(){\n  var tracks = this.player_.textTracks(),\n      i=0, j=tracks.length, track,\n      off = true;\n\n  for (;i<j;i++) {\n    track = tracks[i];\n    if (track.kind() == this.track.kind() && track.mode() == 2) {\n      off = false;\n    }\n  }\n\n  this.selected(off);\n};\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @constructor\n */\nvjs.TextTrackButton = vjs.MenuButton.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.MenuButton.call(this, player, options);\n\n    if (this.items.length <= 1) {\n      this.hide();\n    }\n  }\n});\n\n// vjs.TextTrackButton.prototype.buttonPressed = false;\n\n// vjs.TextTrackButton.prototype.createMenu = function(){\n//   var menu = new vjs.Menu(this.player_);\n\n//   // Add a title list item to the top\n//   // menu.el().appendChild(vjs.createEl('li', {\n//   //   className: 'vjs-menu-title',\n//   //   innerHTML: vjs.capitalize(this.kind_),\n//   //   tabindex: -1\n//   // }));\n\n//   this.items = this.createItems();\n\n//   // Add menu items to the menu\n//   for (var i = 0; i < this.items.length; i++) {\n//     menu.addItem(this.items[i]);\n//   }\n\n//   // Add list to element\n//   this.addChild(menu);\n\n//   return menu;\n// };\n\n// Create a menu item for each text track\nvjs.TextTrackButton.prototype.createItems = function(){\n  var items = [], track;\n\n  // Add an OFF menu item to turn all tracks off\n  items.push(new vjs.OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n  for (var i = 0; i < this.player_.textTracks().length; i++) {\n    track = this.player_.textTracks()[i];\n    if (track.kind() === this.kind_) {\n      items.push(new vjs.TextTrackMenuItem(this.player_, {\n        'track': track\n      }));\n    }\n  }\n\n  return items;\n};\n\n/**\n * The button component for toggling and selecting captions\n *\n * @constructor\n */\nvjs.CaptionsButton = vjs.TextTrackButton.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.TextTrackButton.call(this, player, options, ready);\n    this.el_.setAttribute('aria-label','Captions Menu');\n  }\n});\nvjs.CaptionsButton.prototype.kind_ = 'captions';\nvjs.CaptionsButton.prototype.buttonText = 'Captions';\nvjs.CaptionsButton.prototype.className = 'vjs-captions-button';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @constructor\n */\nvjs.SubtitlesButton = vjs.TextTrackButton.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.TextTrackButton.call(this, player, options, ready);\n    this.el_.setAttribute('aria-label','Subtitles Menu');\n  }\n});\nvjs.SubtitlesButton.prototype.kind_ = 'subtitles';\nvjs.SubtitlesButton.prototype.buttonText = 'Subtitles';\nvjs.SubtitlesButton.prototype.className = 'vjs-subtitles-button';\n\n// Chapters act much differently than other text tracks\n// Cues are navigation vs. other tracks of alternative languages\n/**\n * The button component for toggling and selecting chapters\n *\n * @constructor\n */\nvjs.ChaptersButton = vjs.TextTrackButton.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.TextTrackButton.call(this, player, options, ready);\n    this.el_.setAttribute('aria-label','Chapters Menu');\n  }\n});\nvjs.ChaptersButton.prototype.kind_ = 'chapters';\nvjs.ChaptersButton.prototype.buttonText = 'Chapters';\nvjs.ChaptersButton.prototype.className = 'vjs-chapters-button';\n\n// Create a menu item for each text track\nvjs.ChaptersButton.prototype.createItems = function(){\n  var items = [], track;\n\n  for (var i = 0; i < this.player_.textTracks().length; i++) {\n    track = this.player_.textTracks()[i];\n    if (track.kind() === this.kind_) {\n      items.push(new vjs.TextTrackMenuItem(this.player_, {\n        'track': track\n      }));\n    }\n  }\n\n  return items;\n};\n\nvjs.ChaptersButton.prototype.createMenu = function(){\n  var tracks = this.player_.textTracks(),\n      i = 0,\n      j = tracks.length,\n      track, chaptersTrack,\n      items = this.items = [];\n\n  for (;i<j;i++) {\n    track = tracks[i];\n    if (track.kind() == this.kind_ && track.dflt()) {\n      if (track.readyState() < 2) {\n        this.chaptersTrack = track;\n        track.on('loaded', vjs.bind(this, this.createMenu));\n        return;\n      } else {\n        chaptersTrack = track;\n        break;\n      }\n    }\n  }\n\n  var menu = this.menu = new vjs.Menu(this.player_);\n\n  menu.el_.appendChild(vjs.createEl('li', {\n    className: 'vjs-menu-title',\n    innerHTML: vjs.capitalize(this.kind_),\n    tabindex: -1\n  }));\n\n  if (chaptersTrack) {\n    var cues = chaptersTrack.cues_, cue, mi;\n    i = 0;\n    j = cues.length;\n\n    for (;i<j;i++) {\n      cue = cues[i];\n\n      mi = new vjs.ChaptersTrackMenuItem(this.player_, {\n        'track': chaptersTrack,\n        'cue': cue\n      });\n\n      items.push(mi);\n\n      menu.addChild(mi);\n    }\n  }\n\n  if (this.items.length > 0) {\n    this.show();\n  }\n\n  return menu;\n};\n\n\n/**\n * @constructor\n */\nvjs.ChaptersTrackMenuItem = vjs.MenuItem.extend({\n  /** @constructor */\n  init: function(player, options){\n    var track = this.track = options['track'],\n        cue = this.cue = options['cue'],\n        currentTime = player.currentTime();\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = cue.text;\n    options['selected'] = (cue.startTime <= currentTime && currentTime < cue.endTime);\n    vjs.MenuItem.call(this, player, options);\n\n    track.on('cuechange', vjs.bind(this, this.update));\n  }\n});\n\nvjs.ChaptersTrackMenuItem.prototype.onClick = function(){\n  vjs.MenuItem.prototype.onClick.call(this);\n  this.player_.currentTime(this.cue.startTime);\n  this.update(this.cue.startTime);\n};\n\nvjs.ChaptersTrackMenuItem.prototype.update = function(){\n  var cue = this.cue,\n      currentTime = this.player_.currentTime();\n\n  // vjs.log(currentTime, cue.startTime);\n  this.selected(cue.startTime <= currentTime && currentTime < cue.endTime);\n};\n\n// Add Buttons to controlBar\nvjs.obj.merge(vjs.ControlBar.prototype.options_['children'], {\n  'subtitlesButton': {},\n  'captionsButton': {},\n  'chaptersButton': {}\n});\n\n// vjs.Cue = vjs.Component.extend({\n//   /** @constructor */\n//   init: function(player, options){\n//     vjs.Component.call(this, player, options);\n//   }\n// });\n/**\n * @fileoverview Add JSON support\n * @suppress {undefinedVars}\n * (Compiler doesn't like JSON not being declared)\n */\n\n/**\n * Javascript JSON implementation\n * (Parse Method Only)\n * https://github.com/douglascrockford/JSON-js/blob/master/json2.js\n * Only using for parse method when parsing data-setup attribute JSON.\n * @suppress {undefinedVars}\n * @namespace\n * @private\n */\nvjs.JSON;\n\nif (typeof window.JSON !== 'undefined' && window.JSON.parse === 'function') {\n  vjs.JSON = window.JSON;\n\n} else {\n  vjs.JSON = {};\n\n  var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n  /**\n   * parse the json\n   *\n   * @memberof vjs.JSON\n   * @return {Object|Array} The parsed JSON\n   */\n  vjs.JSON.parse = function (text, reviver) {\n      var j;\n\n      function walk(holder, key) {\n          var k, v, value = holder[key];\n          if (value && typeof value === 'object') {\n              for (k in value) {\n                  if (Object.prototype.hasOwnProperty.call(value, k)) {\n                      v = walk(value, k);\n                      if (v !== undefined) {\n                          value[k] = v;\n                      } else {\n                          delete value[k];\n                      }\n                  }\n              }\n          }\n          return reviver.call(holder, key, value);\n      }\n      text = String(text);\n      cx.lastIndex = 0;\n      if (cx.test(text)) {\n          text = text.replace(cx, function (a) {\n              return '\\\\u' +\n                  ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n          });\n      }\n\n      if (/^[\\],:{}\\s]*$/\n              .test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')\n                  .replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']')\n                  .replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''))) {\n\n          j = eval('(' + text + ')');\n\n          return typeof reviver === 'function' ?\n              walk({'': j}, '') : j;\n      }\n\n      throw new SyntaxError('JSON.parse(): invalid or malformed JSON data');\n  };\n}\n/**\n * @fileoverview Functions for automatically setting up a player\n * based on the data-setup attribute of the video tag\n */\n\n// Automatically set up any tags that have a data-setup attribute\nvjs.autoSetup = function(){\n  var options, vid, player,\n      vids = document.getElementsByTagName('video');\n\n  // Check if any media elements exist\n  if (vids && vids.length > 0) {\n\n    for (var i=0,j=vids.length; i<j; i++) {\n      vid = vids[i];\n\n      // Check if element exists, has getAttribute func.\n      // IE seems to consider typeof el.getAttribute == 'object' instead of 'function' like expected, at least when loading the player immediately.\n      if (vid && vid.getAttribute) {\n\n        // Make sure this player hasn't already been set up.\n        if (vid['player'] === undefined) {\n          options = vid.getAttribute('data-setup');\n\n          // Check if data-setup attr exists.\n          // We only auto-setup if they've added the data-setup attr.\n          if (options !== null) {\n\n            // Parse options JSON\n            // If empty string, make it a parsable json object.\n            options = vjs.JSON.parse(options || '{}');\n\n            // Create new video.js instance.\n            player = videojs(vid, options);\n          }\n        }\n\n      // If getAttribute isn't defined, we need to wait for the DOM.\n      } else {\n        vjs.autoSetupTimeout(1);\n        break;\n      }\n    }\n\n  // No videos were found, so keep looping unless page is finisehd loading.\n  } else if (!vjs.windowLoaded) {\n    vjs.autoSetupTimeout(1);\n  }\n};\n\n// Pause to let the DOM keep processing\nvjs.autoSetupTimeout = function(wait){\n  setTimeout(vjs.autoSetup, wait);\n};\n\nif (document.readyState === 'complete') {\n  vjs.windowLoaded = true;\n} else {\n  vjs.one(window, 'load', function(){\n    vjs.windowLoaded = true;\n  });\n}\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nvjs.autoSetupTimeout(1);\n/**\n * the method for registering a video.js plugin\n *\n * @param  {String} name The name of the plugin\n * @param  {Function} init The function that is run when the player inits\n */\nvjs.plugin = function(name, init){\n  vjs.Player.prototype[name] = init;\n};\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/video-js/video.js",
    "content": "/*! Video.js v4.3.0 Copyright 2013 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */ (function() {var b=void 0,f=!0,h=null,l=!1;function m(){return function(){}}function p(a){return function(){return this[a]}}function s(a){return function(){return a}}var t;document.createElement(\"video\");document.createElement(\"audio\");document.createElement(\"track\");function u(a,c,d){if(\"string\"===typeof a){0===a.indexOf(\"#\")&&(a=a.slice(1));if(u.xa[a])return u.xa[a];a=u.w(a)}if(!a||!a.nodeName)throw new TypeError(\"The element or ID supplied is not valid. (videojs)\");return a.player||new u.s(a,c,d)}var v=u;\nwindow.Td=window.Ud=u;u.Tb=\"4.3\";u.Fc=\"https:\"==document.location.protocol?\"https://\":\"http://\";u.options={techOrder:[\"html5\",\"flash\"],html5:{},flash:{},width:300,height:150,defaultVolume:0,children:{mediaLoader:{},posterImage:{},textTrackDisplay:{},loadingSpinner:{},bigPlayButton:{},controlBar:{}},notSupportedMessage:'Sorry, no compatible source and playback technology were found for this video. Try using another browser like <a href=\"http://bit.ly/ccMUEC\">Chrome</a> or download the latest <a href=\"http://adobe.ly/mwfN1\">Adobe Flash Player</a>.'};\n\"GENERATED_CDN_VSN\"!==u.Tb&&(v.options.flash.swf=u.Fc+\"vjs.zencdn.net/\"+u.Tb+\"/video-js.swf\");u.xa={};u.la=u.CoreObject=m();u.la.extend=function(a){var c,d;a=a||{};c=a.init||a.i||this.prototype.init||this.prototype.i||m();d=function(){c.apply(this,arguments)};d.prototype=u.k.create(this.prototype);d.prototype.constructor=d;d.extend=u.la.extend;d.create=u.la.create;for(var e in a)a.hasOwnProperty(e)&&(d.prototype[e]=a[e]);return d};\nu.la.create=function(){var a=u.k.create(this.prototype);this.apply(a,arguments);return a};u.d=function(a,c,d){var e=u.getData(a);e.z||(e.z={});e.z[c]||(e.z[c]=[]);d.t||(d.t=u.t++);e.z[c].push(d);e.W||(e.disabled=l,e.W=function(c){if(!e.disabled){c=u.kc(c);var d=e.z[c.type];if(d)for(var d=d.slice(0),k=0,q=d.length;k<q&&!c.pc();k++)d[k].call(a,c)}});1==e.z[c].length&&(document.addEventListener?a.addEventListener(c,e.W,l):document.attachEvent&&a.attachEvent(\"on\"+c,e.W))};\nu.o=function(a,c,d){if(u.oc(a)){var e=u.getData(a);if(e.z)if(c){var g=e.z[c];if(g){if(d){if(d.t)for(e=0;e<g.length;e++)g[e].t===d.t&&g.splice(e--,1)}else e.z[c]=[];u.gc(a,c)}}else for(g in e.z)c=g,e.z[c]=[],u.gc(a,c)}};u.gc=function(a,c){var d=u.getData(a);0===d.z[c].length&&(delete d.z[c],document.removeEventListener?a.removeEventListener(c,d.W,l):document.detachEvent&&a.detachEvent(\"on\"+c,d.W));u.Bb(d.z)&&(delete d.z,delete d.W,delete d.disabled);u.Bb(d)&&u.vc(a)};\nu.kc=function(a){function c(){return f}function d(){return l}if(!a||!a.Cb){var e=a||window.event;a={};for(var g in e)\"layerX\"!==g&&\"layerY\"!==g&&(a[g]=e[g]);a.target||(a.target=a.srcElement||document);a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;a.preventDefault=function(){e.preventDefault&&e.preventDefault();a.returnValue=l;a.Ab=c};a.Ab=d;a.stopPropagation=function(){e.stopPropagation&&e.stopPropagation();a.cancelBubble=f;a.Cb=c};a.Cb=d;a.stopImmediatePropagation=function(){e.stopImmediatePropagation&&\ne.stopImmediatePropagation();a.pc=c;a.stopPropagation()};a.pc=d;if(a.clientX!=h){g=document.documentElement;var j=document.body;a.pageX=a.clientX+(g&&g.scrollLeft||j&&j.scrollLeft||0)-(g&&g.clientLeft||j&&j.clientLeft||0);a.pageY=a.clientY+(g&&g.scrollTop||j&&j.scrollTop||0)-(g&&g.clientTop||j&&j.clientTop||0)}a.which=a.charCode||a.keyCode;a.button!=h&&(a.button=a.button&1?0:a.button&4?1:a.button&2?2:0)}return a};\nu.j=function(a,c){var d=u.oc(a)?u.getData(a):{},e=a.parentNode||a.ownerDocument;\"string\"===typeof c&&(c={type:c,target:a});c=u.kc(c);d.W&&d.W.call(a,c);if(e&&!c.Cb()&&c.bubbles!==l)u.j(e,c);else if(!e&&!c.Ab()&&(d=u.getData(c.target),c.target[c.type])){d.disabled=f;if(\"function\"===typeof c.target[c.type])c.target[c.type]();d.disabled=l}return!c.Ab()};u.U=function(a,c,d){function e(){u.o(a,c,e);d.apply(this,arguments)}e.t=d.t=d.t||u.t++;u.d(a,c,e)};var w=Object.prototype.hasOwnProperty;\nu.e=function(a,c){var d,e;d=document.createElement(a||\"div\");for(e in c)w.call(c,e)&&(-1!==e.indexOf(\"aria-\")||\"role\"==e?d.setAttribute(e,c[e]):d[e]=c[e]);return d};u.$=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};u.k={};u.k.create=Object.create||function(a){function c(){}c.prototype=a;return new c};u.k.ua=function(a,c,d){for(var e in a)w.call(a,e)&&c.call(d||this,e,a[e])};u.k.B=function(a,c){if(!c)return a;for(var d in c)w.call(c,d)&&(a[d]=c[d]);return a};\nu.k.ic=function(a,c){var d,e,g;a=u.k.copy(a);for(d in c)w.call(c,d)&&(e=a[d],g=c[d],a[d]=u.k.qc(e)&&u.k.qc(g)?u.k.ic(e,g):c[d]);return a};u.k.copy=function(a){return u.k.B({},a)};u.k.qc=function(a){return!!a&&\"object\"===typeof a&&\"[object Object]\"===a.toString()&&a.constructor===Object};u.bind=function(a,c,d){function e(){return c.apply(a,arguments)}c.t||(c.t=u.t++);e.t=d?d+\"_\"+c.t:c.t;return e};u.ra={};u.t=1;u.expando=\"vdata\"+(new Date).getTime();\nu.getData=function(a){var c=a[u.expando];c||(c=a[u.expando]=u.t++,u.ra[c]={});return u.ra[c]};u.oc=function(a){a=a[u.expando];return!(!a||u.Bb(u.ra[a]))};u.vc=function(a){var c=a[u.expando];if(c){delete u.ra[c];try{delete a[u.expando]}catch(d){a.removeAttribute?a.removeAttribute(u.expando):a[u.expando]=h}}};u.Bb=function(a){for(var c in a)if(a[c]!==h)return l;return f};u.n=function(a,c){-1==(\" \"+a.className+\" \").indexOf(\" \"+c+\" \")&&(a.className=\"\"===a.className?c:a.className+\" \"+c)};\nu.u=function(a,c){var d,e;if(-1!=a.className.indexOf(c)){d=a.className.split(\" \");for(e=d.length-1;0<=e;e--)d[e]===c&&d.splice(e,1);a.className=d.join(\" \")}};u.na=u.e(\"video\");u.F=navigator.userAgent;u.Mc=/iPhone/i.test(u.F);u.Lc=/iPad/i.test(u.F);u.Nc=/iPod/i.test(u.F);u.Kc=u.Mc||u.Lc||u.Nc;var aa=u,x;var y=u.F.match(/OS (\\d+)_/i);x=y&&y[1]?y[1]:b;aa.Fd=x;u.Ic=/Android/i.test(u.F);var ba=u,z;var A=u.F.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),B,C;\nA?(B=A[1]&&parseFloat(A[1]),C=A[2]&&parseFloat(A[2]),z=B&&C?parseFloat(A[1]+\".\"+A[2]):B?B:h):z=h;ba.Gc=z;u.Oc=u.Ic&&/webkit/i.test(u.F)&&2.3>u.Gc;u.Jc=/Firefox/i.test(u.F);u.Gd=/Chrome/i.test(u.F);u.ac=!!(\"ontouchstart\"in window||window.Hc&&document instanceof window.Hc);\nu.xb=function(a){var c,d,e,g;c={};if(a&&a.attributes&&0<a.attributes.length){d=a.attributes;for(var j=d.length-1;0<=j;j--){e=d[j].name;g=d[j].value;if(\"boolean\"===typeof a[e]||-1!==\",autoplay,controls,loop,muted,default,\".indexOf(\",\"+e+\",\"))g=g!==h?f:l;c[e]=g}}return c};\nu.Kd=function(a,c){var d=\"\";document.defaultView&&document.defaultView.getComputedStyle?d=document.defaultView.getComputedStyle(a,\"\").getPropertyValue(c):a.currentStyle&&(d=a[\"client\"+c.substr(0,1).toUpperCase()+c.substr(1)]+\"px\");return d};u.zb=function(a,c){c.firstChild?c.insertBefore(a,c.firstChild):c.appendChild(a)};u.Pb={};u.w=function(a){0===a.indexOf(\"#\")&&(a=a.slice(1));return document.getElementById(a)};\nu.La=function(a,c){c=c||a;var d=Math.floor(a%60),e=Math.floor(a/60%60),g=Math.floor(a/3600),j=Math.floor(c/60%60),k=Math.floor(c/3600);if(isNaN(a)||Infinity===a)g=e=d=\"-\";g=0<g||0<k?g+\":\":\"\";return g+(((g||10<=j)&&10>e?\"0\"+e:e)+\":\")+(10>d?\"0\"+d:d)};u.Tc=function(){document.body.focus();document.onselectstart=s(l)};u.Bd=function(){document.onselectstart=s(f)};u.trim=function(a){return(a+\"\").replace(/^\\s+|\\s+$/g,\"\")};u.round=function(a,c){c||(c=0);return Math.round(a*Math.pow(10,c))/Math.pow(10,c)};\nu.tb=function(a,c){return{length:1,start:function(){return a},end:function(){return c}}};\nu.get=function(a,c,d){var e,g;\"undefined\"===typeof XMLHttpRequest&&(window.XMLHttpRequest=function(){try{return new window.ActiveXObject(\"Msxml2.XMLHTTP.6.0\")}catch(a){}try{return new window.ActiveXObject(\"Msxml2.XMLHTTP.3.0\")}catch(c){}try{return new window.ActiveXObject(\"Msxml2.XMLHTTP\")}catch(d){}throw Error(\"This browser does not support XMLHttpRequest.\");});g=new XMLHttpRequest;try{g.open(\"GET\",a)}catch(j){d(j)}e=0===a.indexOf(\"file:\")||0===window.location.href.indexOf(\"file:\")&&-1===a.indexOf(\"http\");\ng.onreadystatechange=function(){4===g.readyState&&(200===g.status||e&&0===g.status?c(g.responseText):d&&d())};try{g.send()}catch(k){d&&d(k)}};u.td=function(a){try{var c=window.localStorage||l;c&&(c.volume=a)}catch(d){22==d.code||1014==d.code?u.log(\"LocalStorage Full (VideoJS)\",d):18==d.code?u.log(\"LocalStorage not allowed (VideoJS)\",d):u.log(\"LocalStorage Error (VideoJS)\",d)}};u.mc=function(a){a.match(/^https?:\\/\\//)||(a=u.e(\"div\",{innerHTML:'<a href=\"'+a+'\">x</a>'}).firstChild.href);return a};\nu.log=function(){u.log.history=u.log.history||[];u.log.history.push(arguments);window.console&&window.console.log(Array.prototype.slice.call(arguments))};u.ad=function(a){var c,d;a.getBoundingClientRect&&a.parentNode&&(c=a.getBoundingClientRect());if(!c)return{left:0,top:0};a=document.documentElement;d=document.body;return{left:c.left+(window.pageXOffset||d.scrollLeft)-(a.clientLeft||d.clientLeft||0),top:c.top+(window.pageYOffset||d.scrollTop)-(a.clientTop||d.clientTop||0)}};\nu.c=u.la.extend({i:function(a,c,d){this.b=a;this.g=u.k.copy(this.g);c=this.options(c);this.Q=c.id||(c.el&&c.el.id?c.el.id:a.id()+\"_component_\"+u.t++);this.gd=c.name||h;this.a=c.el||this.e();this.G=[];this.qb={};this.V={};if((a=this.g)&&a.children){var e=this;u.k.ua(a.children,function(a,c){c!==l&&!c.loadEvent&&(e[a]=e.Z(a,c))})}this.L(d)}});t=u.c.prototype;\nt.D=function(){this.j(\"dispose\");if(this.G)for(var a=this.G.length-1;0<=a;a--)this.G[a].D&&this.G[a].D();this.V=this.qb=this.G=h;this.o();this.a.parentNode&&this.a.parentNode.removeChild(this.a);u.vc(this.a);this.a=h};t.b=f;t.K=p(\"b\");t.options=function(a){return a===b?this.g:this.g=u.k.ic(this.g,a)};t.e=function(a,c){return u.e(a,c)};t.w=p(\"a\");t.id=p(\"Q\");t.name=p(\"gd\");t.children=p(\"G\");\nt.Z=function(a,c){var d,e;\"string\"===typeof a?(e=a,c=c||{},d=c.componentClass||u.$(e),c.name=e,d=new window.videojs[d](this.b||this,c)):d=a;this.G.push(d);\"function\"===typeof d.id&&(this.qb[d.id()]=d);(e=e||d.name&&d.name())&&(this.V[e]=d);\"function\"===typeof d.el&&d.el()&&(this.sa||this.a).appendChild(d.el());return d};\nt.removeChild=function(a){\"string\"===typeof a&&(a=this.V[a]);if(a&&this.G){for(var c=l,d=this.G.length-1;0<=d;d--)if(this.G[d]===a){c=f;this.G.splice(d,1);break}c&&(this.qb[a.id]=h,this.V[a.name]=h,(c=a.w())&&c.parentNode===(this.sa||this.a)&&(this.sa||this.a).removeChild(a.w()))}};t.T=s(\"\");t.d=function(a,c){u.d(this.a,a,u.bind(this,c));return this};t.o=function(a,c){u.o(this.a,a,c);return this};t.U=function(a,c){u.U(this.a,a,u.bind(this,c));return this};t.j=function(a,c){u.j(this.a,a,c);return this};\nt.L=function(a){a&&(this.aa?a.call(this):(this.Sa===b&&(this.Sa=[]),this.Sa.push(a)));return this};t.Ua=function(){this.aa=f;var a=this.Sa;if(a&&0<a.length){for(var c=0,d=a.length;c<d;c++)a[c].call(this);this.Sa=[];this.j(\"ready\")}};t.n=function(a){u.n(this.a,a);return this};t.u=function(a){u.u(this.a,a);return this};t.show=function(){this.a.style.display=\"block\";return this};t.C=function(){this.a.style.display=\"none\";return this};function D(a){a.u(\"vjs-lock-showing\")}\nt.disable=function(){this.C();this.show=m()};t.width=function(a,c){return E(this,\"width\",a,c)};t.height=function(a,c){return E(this,\"height\",a,c)};t.Xc=function(a,c){return this.width(a,f).height(c)};function E(a,c,d,e){if(d!==b)return a.a.style[c]=-1!==(\"\"+d).indexOf(\"%\")||-1!==(\"\"+d).indexOf(\"px\")?d:\"auto\"===d?\"\":d+\"px\",e||a.j(\"resize\"),a;if(!a.a)return 0;d=a.a.style[c];e=d.indexOf(\"px\");return-1!==e?parseInt(d.slice(0,e),10):parseInt(a.a[\"offset\"+u.$(c)],10)}\nu.q=u.c.extend({i:function(a,c){u.c.call(this,a,c);var d=l;this.d(\"touchstart\",function(a){a.preventDefault();d=f});this.d(\"touchmove\",function(){d=l});var e=this;this.d(\"touchend\",function(a){d&&e.p(a);a.preventDefault()});this.d(\"click\",this.p);this.d(\"focus\",this.Oa);this.d(\"blur\",this.Na)}});t=u.q.prototype;\nt.e=function(a,c){c=u.k.B({className:this.T(),innerHTML:'<div class=\"vjs-control-content\"><span class=\"vjs-control-text\">'+(this.qa||\"Need Text\")+\"</span></div>\",qd:\"button\",\"aria-live\":\"polite\",tabIndex:0},c);return u.c.prototype.e.call(this,a,c)};t.T=function(){return\"vjs-control \"+u.c.prototype.T.call(this)};t.p=m();t.Oa=function(){u.d(document,\"keyup\",u.bind(this,this.ba))};t.ba=function(a){if(32==a.which||13==a.which)a.preventDefault(),this.p()};\nt.Na=function(){u.o(document,\"keyup\",u.bind(this,this.ba))};u.O=u.c.extend({i:function(a,c){u.c.call(this,a,c);this.Sc=this.V[this.g.barName];this.handle=this.V[this.g.handleName];a.d(this.tc,u.bind(this,this.update));this.d(\"mousedown\",this.Pa);this.d(\"touchstart\",this.Pa);this.d(\"focus\",this.Oa);this.d(\"blur\",this.Na);this.d(\"click\",this.p);this.b.d(\"controlsvisible\",u.bind(this,this.update));a.L(u.bind(this,this.update));this.P={}}});t=u.O.prototype;\nt.e=function(a,c){c=c||{};c.className+=\" vjs-slider\";c=u.k.B({qd:\"slider\",\"aria-valuenow\":0,\"aria-valuemin\":0,\"aria-valuemax\":100,tabIndex:0},c);return u.c.prototype.e.call(this,a,c)};t.Pa=function(a){a.preventDefault();u.Tc();this.P.move=u.bind(this,this.Hb);this.P.end=u.bind(this,this.Ib);u.d(document,\"mousemove\",this.P.move);u.d(document,\"mouseup\",this.P.end);u.d(document,\"touchmove\",this.P.move);u.d(document,\"touchend\",this.P.end);this.Hb(a)};\nt.Ib=function(){u.Bd();u.o(document,\"mousemove\",this.P.move,l);u.o(document,\"mouseup\",this.P.end,l);u.o(document,\"touchmove\",this.P.move,l);u.o(document,\"touchend\",this.P.end,l);this.update()};t.update=function(){if(this.a){var a,c=this.yb(),d=this.handle,e=this.Sc;isNaN(c)&&(c=0);a=c;if(d){a=this.a.offsetWidth;var g=d.w().offsetWidth;a=g?g/a:0;c*=1-a;a=c+a/2;d.w().style.left=u.round(100*c,2)+\"%\"}e.w().style.width=u.round(100*a,2)+\"%\"}};\nfunction F(a,c){var d,e,g,j;d=a.a;e=u.ad(d);j=g=d.offsetWidth;d=a.handle;if(a.g.Cd)return j=e.top,e=c.changedTouches?c.changedTouches[0].pageY:c.pageY,d&&(d=d.w().offsetHeight,j+=d/2,g-=d),Math.max(0,Math.min(1,(j-e+g)/g));g=e.left;e=c.changedTouches?c.changedTouches[0].pageX:c.pageX;d&&(d=d.w().offsetWidth,g+=d/2,j-=d);return Math.max(0,Math.min(1,(e-g)/j))}t.Oa=function(){u.d(document,\"keyup\",u.bind(this,this.ba))};\nt.ba=function(a){37==a.which?(a.preventDefault(),this.yc()):39==a.which&&(a.preventDefault(),this.zc())};t.Na=function(){u.o(document,\"keyup\",u.bind(this,this.ba))};t.p=function(a){a.stopImmediatePropagation();a.preventDefault()};u.ea=u.c.extend();u.ea.prototype.defaultValue=0;u.ea.prototype.e=function(a,c){c=c||{};c.className+=\" vjs-slider-handle\";c=u.k.B({innerHTML:'<span class=\"vjs-control-text\">'+this.defaultValue+\"</span>\"},c);return u.c.prototype.e.call(this,\"div\",c)};u.ma=u.c.extend();\nfunction ca(a,c){a.Z(c);c.d(\"click\",u.bind(a,function(){D(this)}))}u.ma.prototype.e=function(){var a=this.options().Vc||\"ul\";this.sa=u.e(a,{className:\"vjs-menu-content\"});a=u.c.prototype.e.call(this,\"div\",{append:this.sa,className:\"vjs-menu\"});a.appendChild(this.sa);u.d(a,\"click\",function(a){a.preventDefault();a.stopImmediatePropagation()});return a};u.N=u.q.extend({i:function(a,c){u.q.call(this,a,c);this.selected(c.selected)}});\nu.N.prototype.e=function(a,c){return u.q.prototype.e.call(this,\"li\",u.k.B({className:\"vjs-menu-item\",innerHTML:this.g.label},c))};u.N.prototype.p=function(){this.selected(f)};u.N.prototype.selected=function(a){a?(this.n(\"vjs-selected\"),this.a.setAttribute(\"aria-selected\",f)):(this.u(\"vjs-selected\"),this.a.setAttribute(\"aria-selected\",l))};\nu.R=u.q.extend({i:function(a,c){u.q.call(this,a,c);this.wa=this.Ka();this.Z(this.wa);this.I&&0===this.I.length&&this.C();this.d(\"keyup\",this.ba);this.a.setAttribute(\"aria-haspopup\",f);this.a.setAttribute(\"role\",\"button\")}});t=u.R.prototype;t.pa=l;t.Ka=function(){var a=new u.ma(this.b);this.options().title&&a.w().appendChild(u.e(\"li\",{className:\"vjs-menu-title\",innerHTML:u.$(this.A),zd:-1}));if(this.I=this.createItems())for(var c=0;c<this.I.length;c++)ca(a,this.I[c]);return a};t.ta=m();\nt.T=function(){return this.className+\" vjs-menu-button \"+u.q.prototype.T.call(this)};t.Oa=m();t.Na=m();t.p=function(){this.U(\"mouseout\",u.bind(this,function(){D(this.wa);this.a.blur()}));this.pa?G(this):H(this)};t.ba=function(a){a.preventDefault();32==a.which||13==a.which?this.pa?G(this):H(this):27==a.which&&this.pa&&G(this)};function H(a){a.pa=f;a.wa.n(\"vjs-lock-showing\");a.a.setAttribute(\"aria-pressed\",f);a.I&&0<a.I.length&&a.I[0].w().focus()}\nfunction G(a){a.pa=l;D(a.wa);a.a.setAttribute(\"aria-pressed\",l)}\nu.s=u.c.extend({i:function(a,c,d){this.M=a;c=u.k.B(da(a),c);this.v={};this.uc=c.poster;this.sb=c.controls;a.controls=l;u.c.call(this,this,c,d);this.controls()?this.n(\"vjs-controls-enabled\"):this.n(\"vjs-controls-disabled\");this.U(\"play\",function(a){u.j(this.a,{type:\"firstplay\",target:this.a})||(a.preventDefault(),a.stopPropagation(),a.stopImmediatePropagation())});this.d(\"ended\",this.hd);this.d(\"play\",this.Kb);this.d(\"firstplay\",this.jd);this.d(\"pause\",this.Jb);this.d(\"progress\",this.ld);this.d(\"durationchange\",\nthis.sc);this.d(\"error\",this.Gb);this.d(\"fullscreenchange\",this.kd);u.xa[this.Q]=this;c.plugins&&u.k.ua(c.plugins,function(a,c){this[a](c)},this);var e,g,j,k;e=this.Mb;a=function(){e();clearInterval(g);g=setInterval(u.bind(this,e),250)};c=function(){e();clearInterval(g)};this.d(\"mousedown\",a);this.d(\"mousemove\",e);this.d(\"mouseup\",c);this.d(\"keydown\",e);this.d(\"keyup\",e);this.d(\"touchstart\",a);this.d(\"touchmove\",e);this.d(\"touchend\",c);this.d(\"touchcancel\",c);j=setInterval(u.bind(this,function(){this.ka&&\n(this.ka=l,this.ja(f),clearTimeout(k),k=setTimeout(u.bind(this,function(){this.ka||this.ja(l)}),2E3))}),250);this.d(\"dispose\",function(){clearInterval(j);clearTimeout(k)})}});t=u.s.prototype;t.g=u.options;t.D=function(){this.j(\"dispose\");this.o(\"dispose\");u.xa[this.Q]=h;this.M&&this.M.player&&(this.M.player=h);this.a&&this.a.player&&(this.a.player=h);clearInterval(this.Ra);this.za();this.h&&this.h.D();u.c.prototype.D.call(this)};\nfunction da(a){var c={sources:[],tracks:[]};u.k.B(c,u.xb(a));if(a.hasChildNodes()){var d,e,g,j;a=a.childNodes;g=0;for(j=a.length;g<j;g++)d=a[g],e=d.nodeName.toLowerCase(),\"source\"===e?c.sources.push(u.xb(d)):\"track\"===e&&c.tracks.push(u.xb(d))}return c}\nt.e=function(){var a=this.a=u.c.prototype.e.call(this,\"div\"),c=this.M;c.removeAttribute(\"width\");c.removeAttribute(\"height\");if(c.hasChildNodes()){var d,e,g,j,k;d=c.childNodes;e=d.length;for(k=[];e--;)g=d[e],j=g.nodeName.toLowerCase(),\"track\"===j&&k.push(g);for(d=0;d<k.length;d++)c.removeChild(k[d])}c.id=c.id||\"vjs_video_\"+u.t++;a.id=c.id;a.className=c.className;c.id+=\"_html5_api\";c.className=\"vjs-tech\";c.player=a.player=this;this.n(\"vjs-paused\");this.width(this.g.width,f);this.height(this.g.height,\nf);c.parentNode&&c.parentNode.insertBefore(a,c);u.zb(c,a);return a};\nfunction I(a,c,d){a.h?(a.aa=l,a.h.D(),a.Eb&&(a.Eb=l,clearInterval(a.Ra)),a.Fb&&J(a),a.h=l):\"Html5\"!==c&&a.M&&(u.l.jc(a.M),a.M=h);a.ia=c;a.aa=l;var e=u.k.B({source:d,parentEl:a.a},a.g[c.toLowerCase()]);d&&(d.src==a.v.src&&0<a.v.currentTime&&(e.startTime=a.v.currentTime),a.v.src=d.src);a.h=new window.videojs[c](a,e);a.h.L(function(){this.b.Ua();if(!this.m.progressEvents){var a=this.b;a.Eb=f;a.Ra=setInterval(u.bind(a,function(){this.v.lb<this.buffered().end(0)?this.j(\"progress\"):1==this.Ja()&&(clearInterval(this.Ra),\nthis.j(\"progress\"))}),500);a.h.U(\"progress\",function(){this.m.progressEvents=f;var a=this.b;a.Eb=l;clearInterval(a.Ra)})}this.m.timeupdateEvents||(a=this.b,a.Fb=f,a.d(\"play\",a.Cc),a.d(\"pause\",a.za),a.h.U(\"timeupdate\",function(){this.m.timeupdateEvents=f;J(this.b)}))})}function J(a){a.Fb=l;a.za();a.o(\"play\",a.Cc);a.o(\"pause\",a.za)}t.Cc=function(){this.hc&&this.za();this.hc=setInterval(u.bind(this,function(){this.j(\"timeupdate\")}),250)};t.za=function(){clearInterval(this.hc)};\nt.Kb=function(){u.u(this.a,\"vjs-paused\");u.n(this.a,\"vjs-playing\")};t.jd=function(){this.g.starttime&&this.currentTime(this.g.starttime);this.n(\"vjs-has-started\")};t.Jb=function(){u.u(this.a,\"vjs-playing\");u.n(this.a,\"vjs-paused\")};t.ld=function(){1==this.Ja()&&this.j(\"loadedalldata\")};t.hd=function(){this.g.loop&&(this.currentTime(0),this.play())};t.sc=function(){this.duration(K(this,\"duration\"))};t.kd=function(){this.H?this.n(\"vjs-fullscreen\"):this.u(\"vjs-fullscreen\")};\nt.Gb=function(a){u.log(\"Video Error\",a)};function L(a,c,d){if(a.h&&!a.h.aa)a.h.L(function(){this[c](d)});else try{a.h[c](d)}catch(e){throw u.log(e),e;}}function K(a,c){if(a.h&&a.h.aa)try{return a.h[c]()}catch(d){throw a.h[c]===b?u.log(\"Video.js: \"+c+\" method not defined for \"+a.ia+\" playback technology.\",d):\"TypeError\"==d.name?(u.log(\"Video.js: \"+c+\" unavailable on \"+a.ia+\" playback technology element.\",d),a.h.aa=l):u.log(d),d;}}t.play=function(){L(this,\"play\");return this};\nt.pause=function(){L(this,\"pause\");return this};t.paused=function(){return K(this,\"paused\")===l?l:f};t.currentTime=function(a){return a!==b?(this.v.rc=a,L(this,\"setCurrentTime\",a),this.Fb&&this.j(\"timeupdate\"),this):this.v.currentTime=K(this,\"currentTime\")||0};t.duration=function(a){if(a!==b)return this.v.duration=parseFloat(a),this;this.v.duration===b&&this.sc();return this.v.duration};\nt.buffered=function(){var a=K(this,\"buffered\"),c=a.length-1,d=this.v.lb=this.v.lb||0;a&&(0<=c&&a.end(c)!==d)&&(d=a.end(c),this.v.lb=d);return u.tb(0,d)};t.Ja=function(){return this.duration()?this.buffered().end(0)/this.duration():0};t.volume=function(a){if(a!==b)return a=Math.max(0,Math.min(1,parseFloat(a))),this.v.volume=a,L(this,\"setVolume\",a),u.td(a),this;a=parseFloat(K(this,\"volume\"));return isNaN(a)?1:a};t.muted=function(a){return a!==b?(L(this,\"setMuted\",a),this):K(this,\"muted\")||l};\nt.Ta=function(){return K(this,\"supportsFullScreen\")||l};\nt.ya=function(){var a=u.Pb.ya;this.H=f;a?(u.d(document,a.vb,u.bind(this,function(c){this.H=document[a.H];this.H===l&&u.o(document,a.vb,arguments.callee);this.j(\"fullscreenchange\")})),this.a[a.wc]()):this.h.Ta()?L(this,\"enterFullScreen\"):(this.cd=f,this.Yc=document.documentElement.style.overflow,u.d(document,\"keydown\",u.bind(this,this.lc)),document.documentElement.style.overflow=\"hidden\",u.n(document.body,\"vjs-full-window\"),this.j(\"enterFullWindow\"),this.j(\"fullscreenchange\"));return this};\nt.ob=function(){var a=u.Pb.ya;this.H=l;if(a)document[a.nb]();else this.h.Ta()?L(this,\"exitFullScreen\"):(M(this),this.j(\"fullscreenchange\"));return this};t.lc=function(a){27===a.keyCode&&(this.H===f?this.ob():M(this))};function M(a){a.cd=l;u.o(document,\"keydown\",a.lc);document.documentElement.style.overflow=a.Yc;u.u(document.body,\"vjs-full-window\");a.j(\"exitFullWindow\")}\nt.src=function(a){if(a instanceof Array){var c;a:{c=a;for(var d=0,e=this.g.techOrder;d<e.length;d++){var g=u.$(e[d]),j=window.videojs[g];if(j.isSupported())for(var k=0,q=c;k<q.length;k++){var n=q[k];if(j.canPlaySource(n)){c={source:n,h:g};break a}}}c=l}c?(a=c.source,c=c.h,c==this.ia?this.src(a):I(this,c,a)):this.a.appendChild(u.e(\"p\",{innerHTML:this.options().notSupportedMessage}))}else a instanceof Object?window.videojs[this.ia].canPlaySource(a)?this.src(a.src):this.src([a]):(this.v.src=a,this.aa?\n(L(this,\"src\",a),\"auto\"==this.g.preload&&this.load(),this.g.autoplay&&this.play()):this.L(function(){this.src(a)}));return this};t.load=function(){L(this,\"load\");return this};t.currentSrc=function(){return K(this,\"currentSrc\")||this.v.src||\"\"};t.Qa=function(a){return a!==b?(L(this,\"setPreload\",a),this.g.preload=a,this):K(this,\"preload\")};t.autoplay=function(a){return a!==b?(L(this,\"setAutoplay\",a),this.g.autoplay=a,this):K(this,\"autoplay\")};\nt.loop=function(a){return a!==b?(L(this,\"setLoop\",a),this.g.loop=a,this):K(this,\"loop\")};t.poster=function(a){return a!==b?(this.uc=a,this):this.uc};t.controls=function(a){return a!==b?(a=!!a,this.sb!==a&&((this.sb=a)?(this.u(\"vjs-controls-disabled\"),this.n(\"vjs-controls-enabled\"),this.j(\"controlsenabled\")):(this.u(\"vjs-controls-enabled\"),this.n(\"vjs-controls-disabled\"),this.j(\"controlsdisabled\"))),this):this.sb};u.s.prototype.Sb;t=u.s.prototype;\nt.Rb=function(a){return a!==b?(a=!!a,this.Sb!==a&&((this.Sb=a)?(this.n(\"vjs-using-native-controls\"),this.j(\"usingnativecontrols\")):(this.u(\"vjs-using-native-controls\"),this.j(\"usingcustomcontrols\"))),this):this.Sb};t.error=function(){return K(this,\"error\")};t.seeking=function(){return K(this,\"seeking\")};t.ka=f;t.Mb=function(){this.ka=f};t.Qb=f;\nt.ja=function(a){return a!==b?(a=!!a,a!==this.Qb&&((this.Qb=a)?(this.ka=f,this.u(\"vjs-user-inactive\"),this.n(\"vjs-user-active\"),this.j(\"useractive\")):(this.ka=l,this.h.U(\"mousemove\",function(a){a.stopPropagation();a.preventDefault()}),this.u(\"vjs-user-active\"),this.n(\"vjs-user-inactive\"),this.j(\"userinactive\"))),this):this.Qb};var N,O,P;P=document.createElement(\"div\");O={};\nP.Hd!==b?(O.wc=\"requestFullscreen\",O.nb=\"exitFullscreen\",O.vb=\"fullscreenchange\",O.H=\"fullScreen\"):(document.mozCancelFullScreen?(N=\"moz\",O.H=N+\"FullScreen\"):(N=\"webkit\",O.H=N+\"IsFullScreen\"),P[N+\"RequestFullScreen\"]&&(O.wc=N+\"RequestFullScreen\",O.nb=N+\"CancelFullScreen\"),O.vb=N+\"fullscreenchange\");document[O.nb]&&(u.Pb.ya=O);u.Fa=u.c.extend();\nu.Fa.prototype.g={Md:\"play\",children:{playToggle:{},currentTimeDisplay:{},timeDivider:{},durationDisplay:{},remainingTimeDisplay:{},progressControl:{},fullscreenToggle:{},volumeControl:{},muteToggle:{}}};u.Fa.prototype.e=function(){return u.e(\"div\",{className:\"vjs-control-bar\"})};u.Yb=u.q.extend({i:function(a,c){u.q.call(this,a,c);a.d(\"play\",u.bind(this,this.Kb));a.d(\"pause\",u.bind(this,this.Jb))}});t=u.Yb.prototype;t.qa=\"Play\";t.T=function(){return\"vjs-play-control \"+u.q.prototype.T.call(this)};\nt.p=function(){this.b.paused()?this.b.play():this.b.pause()};t.Kb=function(){u.u(this.a,\"vjs-paused\");u.n(this.a,\"vjs-playing\");this.a.children[0].children[0].innerHTML=\"Pause\"};t.Jb=function(){u.u(this.a,\"vjs-playing\");u.n(this.a,\"vjs-paused\");this.a.children[0].children[0].innerHTML=\"Play\"};u.Ya=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ca))}});\nu.Ya.prototype.e=function(){var a=u.c.prototype.e.call(this,\"div\",{className:\"vjs-current-time vjs-time-controls vjs-control\"});this.content=u.e(\"div\",{className:\"vjs-current-time-display\",innerHTML:'<span class=\"vjs-control-text\">Current Time </span>0:00',\"aria-live\":\"off\"});a.appendChild(u.e(\"div\").appendChild(this.content));return a};\nu.Ya.prototype.Ca=function(){var a=this.b.Nb?this.b.v.currentTime:this.b.currentTime();this.content.innerHTML='<span class=\"vjs-control-text\">Current Time </span>'+u.La(a,this.b.duration())};u.Za=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ca))}});\nu.Za.prototype.e=function(){var a=u.c.prototype.e.call(this,\"div\",{className:\"vjs-duration vjs-time-controls vjs-control\"});this.content=u.e(\"div\",{className:\"vjs-duration-display\",innerHTML:'<span class=\"vjs-control-text\">Duration Time </span>0:00',\"aria-live\":\"off\"});a.appendChild(u.e(\"div\").appendChild(this.content));return a};u.Za.prototype.Ca=function(){var a=this.b.duration();a&&(this.content.innerHTML='<span class=\"vjs-control-text\">Duration Time </span>'+u.La(a))};\nu.cc=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.cc.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-time-divider\",innerHTML:\"<div><span>/</span></div>\"})};u.fb=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ca))}});\nu.fb.prototype.e=function(){var a=u.c.prototype.e.call(this,\"div\",{className:\"vjs-remaining-time vjs-time-controls vjs-control\"});this.content=u.e(\"div\",{className:\"vjs-remaining-time-display\",innerHTML:'<span class=\"vjs-control-text\">Remaining Time </span>-0:00',\"aria-live\":\"off\"});a.appendChild(u.e(\"div\").appendChild(this.content));return a};u.fb.prototype.Ca=function(){this.b.duration()&&(this.content.innerHTML='<span class=\"vjs-control-text\">Remaining Time </span>-'+u.La(this.b.duration()-this.b.currentTime()))};\nu.Ga=u.q.extend({i:function(a,c){u.q.call(this,a,c)}});u.Ga.prototype.qa=\"Fullscreen\";u.Ga.prototype.T=function(){return\"vjs-fullscreen-control \"+u.q.prototype.T.call(this)};u.Ga.prototype.p=function(){this.b.H?(this.b.ob(),this.a.children[0].children[0].innerHTML=\"Fullscreen\"):(this.b.ya(),this.a.children[0].children[0].innerHTML=\"Non-Fullscreen\")};u.eb=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.eb.prototype.g={children:{seekBar:{}}};\nu.eb.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-progress-control vjs-control\"})};u.Zb=u.O.extend({i:function(a,c){u.O.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ba));a.L(u.bind(this,this.Ba))}});t=u.Zb.prototype;t.g={children:{loadProgressBar:{},playProgressBar:{},seekHandle:{}},barName:\"playProgressBar\",handleName:\"seekHandle\"};t.tc=\"timeupdate\";t.e=function(){return u.O.prototype.e.call(this,\"div\",{className:\"vjs-progress-holder\",\"aria-label\":\"video progress bar\"})};\nt.Ba=function(){var a=this.b.Nb?this.b.v.currentTime:this.b.currentTime();this.a.setAttribute(\"aria-valuenow\",u.round(100*this.yb(),2));this.a.setAttribute(\"aria-valuetext\",u.La(a,this.b.duration()))};t.yb=function(){var a;\"Flash\"===this.b.ia&&this.b.seeking()?(a=this.b.v,a=a.rc?a.rc:this.b.currentTime()):a=this.b.currentTime();return a/this.b.duration()};t.Pa=function(a){u.O.prototype.Pa.call(this,a);this.b.Nb=f;this.Dd=!this.b.paused();this.b.pause()};\nt.Hb=function(a){a=F(this,a)*this.b.duration();a==this.b.duration()&&(a-=0.1);this.b.currentTime(a)};t.Ib=function(a){u.O.prototype.Ib.call(this,a);this.b.Nb=l;this.Dd&&this.b.play()};t.zc=function(){this.b.currentTime(this.b.currentTime()+5)};t.yc=function(){this.b.currentTime(this.b.currentTime()-5)};u.ab=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"progress\",u.bind(this,this.update))}});u.ab.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-load-progress\",innerHTML:'<span class=\"vjs-control-text\">Loaded: 0%</span>'})};\nu.ab.prototype.update=function(){this.a.style&&(this.a.style.width=u.round(100*this.b.Ja(),2)+\"%\")};u.Xb=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.Xb.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-play-progress\",innerHTML:'<span class=\"vjs-control-text\">Progress: 0%</span>'})};u.gb=u.ea.extend();u.gb.prototype.defaultValue=\"00:00\";u.gb.prototype.e=function(){return u.ea.prototype.e.call(this,\"div\",{className:\"vjs-seek-handle\"})};\nu.ib=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.h&&(a.h.m&&a.h.m.volumeControl===l)&&this.n(\"vjs-hidden\");a.d(\"loadstart\",u.bind(this,function(){a.h.m&&a.h.m.volumeControl===l?this.n(\"vjs-hidden\"):this.u(\"vjs-hidden\")}))}});u.ib.prototype.g={children:{volumeBar:{}}};u.ib.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-volume-control vjs-control\"})};\nu.hb=u.O.extend({i:function(a,c){u.O.call(this,a,c);a.d(\"volumechange\",u.bind(this,this.Ba));a.L(u.bind(this,this.Ba));setTimeout(u.bind(this,this.update),0)}});t=u.hb.prototype;t.Ba=function(){this.a.setAttribute(\"aria-valuenow\",u.round(100*this.b.volume(),2));this.a.setAttribute(\"aria-valuetext\",u.round(100*this.b.volume(),2)+\"%\")};t.g={children:{volumeLevel:{},volumeHandle:{}},barName:\"volumeLevel\",handleName:\"volumeHandle\"};t.tc=\"volumechange\";\nt.e=function(){return u.O.prototype.e.call(this,\"div\",{className:\"vjs-volume-bar\",\"aria-label\":\"volume level\"})};t.Hb=function(a){this.b.muted()&&this.b.muted(l);this.b.volume(F(this,a))};t.yb=function(){return this.b.muted()?0:this.b.volume()};t.zc=function(){this.b.volume(this.b.volume()+0.1)};t.yc=function(){this.b.volume(this.b.volume()-0.1)};u.dc=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});\nu.dc.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-volume-level\",innerHTML:'<span class=\"vjs-control-text\"></span>'})};u.jb=u.ea.extend();u.jb.prototype.defaultValue=\"00:00\";u.jb.prototype.e=function(){return u.ea.prototype.e.call(this,\"div\",{className:\"vjs-volume-handle\"})};\nu.da=u.q.extend({i:function(a,c){u.q.call(this,a,c);a.d(\"volumechange\",u.bind(this,this.update));a.h&&(a.h.m&&a.h.m.volumeControl===l)&&this.n(\"vjs-hidden\");a.d(\"loadstart\",u.bind(this,function(){a.h.m&&a.h.m.volumeControl===l?this.n(\"vjs-hidden\"):this.u(\"vjs-hidden\")}))}});u.da.prototype.e=function(){return u.q.prototype.e.call(this,\"div\",{className:\"vjs-mute-control vjs-control\",innerHTML:'<div><span class=\"vjs-control-text\">Mute</span></div>'})};\nu.da.prototype.p=function(){this.b.muted(this.b.muted()?l:f)};u.da.prototype.update=function(){var a=this.b.volume(),c=3;0===a||this.b.muted()?c=0:0.33>a?c=1:0.67>a&&(c=2);this.b.muted()?\"Unmute\"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML=\"Unmute\"):\"Mute\"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML=\"Mute\");for(a=0;4>a;a++)u.u(this.a,\"vjs-vol-\"+a);u.n(this.a,\"vjs-vol-\"+c)};\nu.oa=u.R.extend({i:function(a,c){u.R.call(this,a,c);a.d(\"volumechange\",u.bind(this,this.update));a.h&&(a.h.m&&a.h.m.Dc===l)&&this.n(\"vjs-hidden\");a.d(\"loadstart\",u.bind(this,function(){a.h.m&&a.h.m.Dc===l?this.n(\"vjs-hidden\"):this.u(\"vjs-hidden\")}));this.n(\"vjs-menu-button\")}});u.oa.prototype.Ka=function(){var a=new u.ma(this.b,{Vc:\"div\"}),c=new u.hb(this.b,u.k.B({Cd:f},this.g.Vd));a.Z(c);return a};u.oa.prototype.p=function(){u.da.prototype.p.call(this);u.R.prototype.p.call(this)};\nu.oa.prototype.e=function(){return u.q.prototype.e.call(this,\"div\",{className:\"vjs-volume-menu-button vjs-menu-button vjs-control\",innerHTML:'<div><span class=\"vjs-control-text\">Mute</span></div>'})};u.oa.prototype.update=u.da.prototype.update;u.cb=u.q.extend({i:function(a,c){u.q.call(this,a,c);(!a.poster()||!a.controls())&&this.C();a.d(\"play\",u.bind(this,this.C))}});\nu.cb.prototype.e=function(){var a=u.e(\"div\",{className:\"vjs-poster\",tabIndex:-1}),c=this.b.poster();c&&(\"backgroundSize\"in a.style?a.style.backgroundImage='url(\"'+c+'\")':a.appendChild(u.e(\"img\",{src:c})));return a};u.cb.prototype.p=function(){this.K().controls()&&this.b.play()};\nu.Wb=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"canplay\",u.bind(this,this.C));a.d(\"canplaythrough\",u.bind(this,this.C));a.d(\"playing\",u.bind(this,this.C));a.d(\"seeked\",u.bind(this,this.C));a.d(\"seeking\",u.bind(this,this.show));a.d(\"seeked\",u.bind(this,this.C));a.d(\"error\",u.bind(this,this.show));a.d(\"waiting\",u.bind(this,this.show))}});u.Wb.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-loading-spinner\"})};u.Wa=u.q.extend();\nu.Wa.prototype.e=function(){return u.q.prototype.e.call(this,\"div\",{className:\"vjs-big-play-button\",innerHTML:'<span aria-hidden=\"true\"></span>',\"aria-label\":\"play video\"})};u.Wa.prototype.p=function(){this.b.play()};\nu.r=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);var e,g;g=this;e=this.K();a=function(){if(e.controls()&&!e.Rb()){var a,c;g.d(\"mousedown\",g.p);g.d(\"touchstart\",function(a){a.preventDefault();a.stopPropagation();c=this.b.ja()});a=function(a){a.stopPropagation();c&&this.b.Mb()};g.d(\"touchmove\",a);g.d(\"touchleave\",a);g.d(\"touchcancel\",a);g.d(\"touchend\",a);var d,n,r;d=0;g.d(\"touchstart\",function(){d=(new Date).getTime();r=f});a=function(){r=l};g.d(\"touchmove\",a);g.d(\"touchleave\",a);g.d(\"touchcancel\",\na);g.d(\"touchend\",function(){r===f&&(n=(new Date).getTime()-d,250>n&&this.j(\"tap\"))});g.d(\"tap\",g.md)}};c=u.bind(g,g.pd);this.L(a);e.d(\"controlsenabled\",a);e.d(\"controlsdisabled\",c)}});u.r.prototype.pd=function(){this.o(\"tap\");this.o(\"touchstart\");this.o(\"touchmove\");this.o(\"touchleave\");this.o(\"touchcancel\");this.o(\"touchend\");this.o(\"click\");this.o(\"mousedown\")};u.r.prototype.p=function(a){0===a.button&&this.K().controls()&&(this.K().paused()?this.K().play():this.K().pause())};\nu.r.prototype.md=function(){this.K().ja(!this.K().ja())};u.r.prototype.m={volumeControl:f,fullscreenResize:l,progressEvents:l,timeupdateEvents:l};u.media={};u.media.Va=\"play pause paused currentTime setCurrentTime duration buffered volume setVolume muted setMuted width height supportsFullScreen enterFullScreen src load currentSrc preload setPreload autoplay setAutoplay loop setLoop error networkState readyState seeking initialTime startOffsetTime played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks defaultPlaybackRate playbackRate mediaGroup controller controls defaultMuted\".split(\" \");\nfunction ea(){var a=u.media.Va[i];return function(){throw Error('The \"'+a+\"\\\" method is not available on the playback technology's API\");}}for(var i=u.media.Va.length-1;0<=i;i--)u.r.prototype[u.media.Va[i]]=ea();\nu.l=u.r.extend({i:function(a,c,d){this.m.volumeControl=u.l.Uc();this.m.movingMediaElementInDOM=!u.Kc;this.m.fullscreenResize=f;u.r.call(this,a,c,d);(c=c.source)&&this.a.currentSrc===c.src&&0<this.a.networkState?a.j(\"loadstart\"):c&&(this.a.src=c.src);if(u.ac&&a.options().nativeControlsForTouch!==l){var e,g,j,k;e=this;g=this.K();c=g.controls();e.a.controls=!!c;j=function(){e.a.controls=f};k=function(){e.a.controls=l};g.d(\"controlsenabled\",j);g.d(\"controlsdisabled\",k);c=function(){g.o(\"controlsenabled\",\nj);g.o(\"controlsdisabled\",k)};e.d(\"dispose\",c);g.d(\"usingcustomcontrols\",c);g.Rb(f)}a.L(function(){this.M&&(this.g.autoplay&&this.paused())&&(delete this.M.poster,this.play())});for(a=u.l.$a.length-1;0<=a;a--)u.d(this.a,u.l.$a[a],u.bind(this.b,this.$c));this.Ua()}});t=u.l.prototype;t.D=function(){u.r.prototype.D.call(this)};\nt.e=function(){var a=this.b,c=a.M,d;if(!c||this.m.movingMediaElementInDOM===l)c?(d=c.cloneNode(l),u.l.jc(c),c=d,a.M=h):c=u.e(\"video\",{id:a.id()+\"_html5_api\",className:\"vjs-tech\"}),c.player=a,u.zb(c,a.w());d=[\"autoplay\",\"preload\",\"loop\",\"muted\"];for(var e=d.length-1;0<=e;e--){var g=d[e];a.g[g]!==h&&(c[g]=a.g[g])}return c};t.$c=function(a){this.j(a);a.stopPropagation()};t.play=function(){this.a.play()};t.pause=function(){this.a.pause()};t.paused=function(){return this.a.paused};t.currentTime=function(){return this.a.currentTime};\nt.sd=function(a){try{this.a.currentTime=a}catch(c){u.log(c,\"Video is not ready. (Video.js)\")}};t.duration=function(){return this.a.duration||0};t.buffered=function(){return this.a.buffered};t.volume=function(){return this.a.volume};t.xd=function(a){this.a.volume=a};t.muted=function(){return this.a.muted};t.vd=function(a){this.a.muted=a};t.width=function(){return this.a.offsetWidth};t.height=function(){return this.a.offsetHeight};\nt.Ta=function(){return\"function\"==typeof this.a.webkitEnterFullScreen&&(/Android/.test(u.F)||!/Chrome|Mac OS X 10.5/.test(u.F))?f:l};t.src=function(a){this.a.src=a};t.load=function(){this.a.load()};t.currentSrc=function(){return this.a.currentSrc};t.Qa=function(){return this.a.Qa};t.wd=function(a){this.a.Qa=a};t.autoplay=function(){return this.a.autoplay};t.rd=function(a){this.a.autoplay=a};t.controls=function(){return this.a.controls};t.loop=function(){return this.a.loop};\nt.ud=function(a){this.a.loop=a};t.error=function(){return this.a.error};t.seeking=function(){return this.a.seeking};u.l.isSupported=function(){return!!u.na.canPlayType};u.l.mb=function(a){try{return!!u.na.canPlayType(a.type)}catch(c){return\"\"}};u.l.Uc=function(){var a=u.na.volume;u.na.volume=a/2+0.1;return a!==u.na.volume};u.l.$a=\"loadstart suspend abort error emptied stalled loadedmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate progress play pause ratechange volumechange\".split(\" \");\nu.l.jc=function(a){if(a){a.player=h;for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute(\"src\");\"function\"===typeof a.load&&a.load()}};u.Oc&&(document.createElement(\"video\").constructor.prototype.canPlayType=function(a){return a&&-1!=a.toLowerCase().indexOf(\"video/mp4\")?\"maybe\":\"\"});\nu.f=u.r.extend({i:function(a,c,d){u.r.call(this,a,c,d);var e=c.source;d=c.parentEl;var g=this.a=u.e(\"div\",{id:a.id()+\"_temp_flash\"}),j=a.id()+\"_flash_api\";a=a.g;var k=u.k.B({readyFunction:\"videojs.Flash.onReady\",eventProxyFunction:\"videojs.Flash.onEvent\",errorEventProxyFunction:\"videojs.Flash.onError\",autoplay:a.autoplay,preload:a.Qa,loop:a.loop,muted:a.muted},c.flashVars),q=u.k.B({wmode:\"opaque\",bgcolor:\"#000000\"},c.params),n=u.k.B({id:j,name:j,\"class\":\"vjs-tech\"},c.attributes);e&&(e.type&&u.f.ed(e.type)?\n(a=u.f.Ac(e.src),k.rtmpConnection=encodeURIComponent(a.rb),k.rtmpStream=encodeURIComponent(a.Ob)):k.src=encodeURIComponent(u.mc(e.src)));u.zb(g,d);c.startTime&&this.L(function(){this.load();this.play();this.currentTime(c.startTime)});if(c.iFrameMode===f&&!u.Jc){var r=u.e(\"iframe\",{id:j+\"_iframe\",name:j+\"_iframe\",className:\"vjs-tech\",scrolling:\"no\",marginWidth:0,marginHeight:0,frameBorder:0});k.readyFunction=\"ready\";k.eventProxyFunction=\"events\";k.errorEventProxyFunction=\"errors\";u.d(r,\"load\",u.bind(this,\nfunction(){var a,d=r.contentWindow;a=r.contentDocument?r.contentDocument:r.contentWindow.document;a.write(u.f.nc(c.swf,k,q,n));d.player=this.b;d.ready=u.bind(this.b,function(c){var d=this.h;d.a=a.getElementById(c);u.f.pb(d)});d.events=u.bind(this.b,function(a,c){this&&\"flash\"===this.ia&&this.j(c)});d.errors=u.bind(this.b,function(a,c){u.log(\"Flash Error\",c)})}));g.parentNode.replaceChild(r,g)}else u.f.Zc(c.swf,g,k,q,n)}});t=u.f.prototype;t.D=function(){u.r.prototype.D.call(this)};t.play=function(){this.a.vjs_play()};\nt.pause=function(){this.a.vjs_pause()};t.src=function(a){u.f.dd(a)?(a=u.f.Ac(a),this.Qd(a.rb),this.Rd(a.Ob)):(a=u.mc(a),this.a.vjs_src(a));if(this.b.autoplay()){var c=this;setTimeout(function(){c.play()},0)}};t.currentSrc=function(){var a=this.a.vjs_getProperty(\"currentSrc\");if(a==h){var c=this.Od(),d=this.Pd();c&&d&&(a=u.f.yd(c,d))}return a};t.load=function(){this.a.vjs_load()};t.poster=function(){this.a.vjs_getProperty(\"poster\")};t.buffered=function(){return u.tb(0,this.a.vjs_getProperty(\"buffered\"))};\nt.Ta=s(l);var Q=u.f.prototype,R=\"rtmpConnection rtmpStream preload currentTime defaultPlaybackRate playbackRate autoplay loop mediaGroup controller controls volume muted defaultMuted\".split(\" \"),S=\"error currentSrc networkState readyState seeking initialTime duration startOffsetTime paused played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks\".split(\" \");\nfunction fa(){var a=R[T],c=a.charAt(0).toUpperCase()+a.slice(1);Q[\"set\"+c]=function(c){return this.a.vjs_setProperty(a,c)}}function U(a){Q[a]=function(){return this.a.vjs_getProperty(a)}}var T;for(T=0;T<R.length;T++)U(R[T]),fa();for(T=0;T<S.length;T++)U(S[T]);u.f.isSupported=function(){return 10<=u.f.version()[0]};u.f.mb=function(a){if(!a.type)return\"\";a=a.type.replace(/;.*/,\"\").toLowerCase();if(a in u.f.bd||a in u.f.Bc)return\"maybe\"};\nu.f.bd={\"video/flv\":\"FLV\",\"video/x-flv\":\"FLV\",\"video/mp4\":\"MP4\",\"video/m4v\":\"MP4\"};u.f.Bc={\"rtmp/mp4\":\"MP4\",\"rtmp/flv\":\"FLV\"};u.f.onReady=function(a){a=u.w(a);var c=a.player||a.parentNode.player,d=c.h;a.player=c;d.a=a;u.f.pb(d)};u.f.pb=function(a){a.w().vjs_getProperty?a.Ua():setTimeout(function(){u.f.pb(a)},50)};u.f.onEvent=function(a,c){u.w(a).player.j(c)};u.f.onError=function(a,c){u.w(a).player.j(\"error\");u.log(\"Flash Error\",c,a)};\nu.f.version=function(){var a=\"0,0,0\";try{a=(new window.ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\")).GetVariable(\"$version\").replace(/\\D+/g,\",\").match(/^,?(.+),?$/)[1]}catch(c){try{navigator.mimeTypes[\"application/x-shockwave-flash\"].enabledPlugin&&(a=(navigator.plugins[\"Shockwave Flash 2.0\"]||navigator.plugins[\"Shockwave Flash\"]).description.replace(/\\D+/g,\",\").match(/^,?(.+),?$/)[1])}catch(d){}}return a.split(\",\")};\nu.f.Zc=function(a,c,d,e,g){a=u.f.nc(a,d,e,g);a=u.e(\"div\",{innerHTML:a}).childNodes[0];d=c.parentNode;c.parentNode.replaceChild(a,c);var j=d.childNodes[0];setTimeout(function(){j.style.display=\"block\"},1E3)};\nu.f.nc=function(a,c,d,e){var g=\"\",j=\"\",k=\"\";c&&u.k.ua(c,function(a,c){g+=a+\"=\"+c+\"&amp;\"});d=u.k.B({movie:a,flashvars:g,allowScriptAccess:\"always\",allowNetworking:\"all\"},d);u.k.ua(d,function(a,c){j+='<param name=\"'+a+'\" value=\"'+c+'\" />'});e=u.k.B({data:a,width:\"100%\",height:\"100%\"},e);u.k.ua(e,function(a,c){k+=a+'=\"'+c+'\" '});return'<object type=\"application/x-shockwave-flash\"'+k+\">\"+j+\"</object>\"};u.f.yd=function(a,c){return a+\"&\"+c};\nu.f.Ac=function(a){var c={rb:\"\",Ob:\"\"};if(!a)return c;var d=a.indexOf(\"&\"),e;-1!==d?e=d+1:(d=e=a.lastIndexOf(\"/\")+1,0===d&&(d=e=a.length));c.rb=a.substring(0,d);c.Ob=a.substring(e,a.length);return c};u.f.ed=function(a){return a in u.f.Bc};u.f.Qc=/^rtmp[set]?:\\/\\//i;u.f.dd=function(a){return u.f.Qc.test(a)};\nu.Pc=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);if(!a.g.sources||0===a.g.sources.length){c=0;for(d=a.g.techOrder;c<d.length;c++){var e=u.$(d[c]),g=window.videojs[e];if(g&&g.isSupported()){I(a,e);break}}}else a.src(a.g.sources)}});function V(a){a.Aa=a.Aa||[];return a.Aa}function W(a,c,d){for(var e=a.Aa,g=0,j=e.length,k,q;g<j;g++)k=e[g],k.id()===c?(k.show(),q=k):d&&(k.J()==d&&0<k.mode())&&k.disable();(c=q?q.J():d?d:l)&&a.j(c+\"trackchange\")}\nu.X=u.c.extend({i:function(a,c){u.c.call(this,a,c);this.Q=c.id||\"vjs_\"+c.kind+\"_\"+c.language+\"_\"+u.t++;this.xc=c.src;this.Wc=c[\"default\"]||c.dflt;this.Ad=c.title;this.Ld=c.srclang;this.fd=c.label;this.fa=[];this.ec=[];this.ga=this.ha=0;this.b.d(\"fullscreenchange\",u.bind(this,this.Rc))}});t=u.X.prototype;t.J=p(\"A\");t.src=p(\"xc\");t.ub=p(\"Wc\");t.title=p(\"Ad\");t.label=p(\"fd\");t.readyState=p(\"ha\");t.mode=p(\"ga\");t.Rc=function(){this.a.style.fontSize=this.b.H?140*(screen.width/this.b.width())+\"%\":\"\"};\nt.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-\"+this.A+\" vjs-text-track\"})};t.show=function(){X(this);this.ga=2;u.c.prototype.show.call(this)};t.C=function(){X(this);this.ga=1;u.c.prototype.C.call(this)};t.disable=function(){2==this.ga&&this.C();this.b.o(\"timeupdate\",u.bind(this,this.update,this.Q));this.b.o(\"ended\",u.bind(this,this.reset,this.Q));this.reset();this.b.V.textTrackDisplay.removeChild(this);this.ga=0};\nfunction X(a){0===a.ha&&a.load();0===a.ga&&(a.b.d(\"timeupdate\",u.bind(a,a.update,a.Q)),a.b.d(\"ended\",u.bind(a,a.reset,a.Q)),(\"captions\"===a.A||\"subtitles\"===a.A)&&a.b.V.textTrackDisplay.Z(a))}t.load=function(){0===this.ha&&(this.ha=1,u.get(this.xc,u.bind(this,this.nd),u.bind(this,this.Gb)))};t.Gb=function(a){this.error=a;this.ha=3;this.j(\"error\")};\nt.nd=function(a){var c,d;a=a.split(\"\\n\");for(var e=\"\",g=1,j=a.length;g<j;g++)if(e=u.trim(a[g])){-1==e.indexOf(\"--\\x3e\")?(c=e,e=u.trim(a[++g])):c=this.fa.length;c={id:c,index:this.fa.length};d=e.split(\" --\\x3e \");c.startTime=Y(d[0]);c.va=Y(d[1]);for(d=[];a[++g]&&(e=u.trim(a[g]));)d.push(e);c.text=d.join(\"<br/>\");this.fa.push(c)}this.ha=2;this.j(\"loaded\")};\nfunction Y(a){var c=a.split(\":\");a=0;var d,e,g;3==c.length?(d=c[0],e=c[1],c=c[2]):(d=0,e=c[0],c=c[1]);c=c.split(/\\s+/);c=c.splice(0,1)[0];c=c.split(/\\.|,/);g=parseFloat(c[1]);c=c[0];a+=3600*parseFloat(d);a+=60*parseFloat(e);a+=parseFloat(c);g&&(a+=g/1E3);return a}\nt.update=function(){if(0<this.fa.length){var a=this.b.currentTime();if(this.Lb===b||a<this.Lb||this.Ma<=a){var c=this.fa,d=this.b.duration(),e=0,g=l,j=[],k,q,n,r;a>=this.Ma||this.Ma===b?r=this.wb!==b?this.wb:0:(g=f,r=this.Db!==b?this.Db:c.length-1);for(;;){n=c[r];if(n.va<=a)e=Math.max(e,n.va),n.Ia&&(n.Ia=l);else if(a<n.startTime){if(d=Math.min(d,n.startTime),n.Ia&&(n.Ia=l),!g)break}else g?(j.splice(0,0,n),q===b&&(q=r),k=r):(j.push(n),k===b&&(k=r),q=r),d=Math.min(d,n.va),e=Math.max(e,n.startTime),\nn.Ia=f;if(g)if(0===r)break;else r--;else if(r===c.length-1)break;else r++}this.ec=j;this.Ma=d;this.Lb=e;this.wb=k;this.Db=q;a=this.ec;c=\"\";d=0;for(e=a.length;d<e;d++)c+='<span class=\"vjs-tt-cue\">'+a[d].text+\"</span>\";this.a.innerHTML=c;this.j(\"cuechange\")}}};t.reset=function(){this.Ma=0;this.Lb=this.b.duration();this.Db=this.wb=0};u.Ub=u.X.extend();u.Ub.prototype.A=\"captions\";u.$b=u.X.extend();u.$b.prototype.A=\"subtitles\";u.Vb=u.X.extend();u.Vb.prototype.A=\"chapters\";\nu.bc=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);if(a.g.tracks&&0<a.g.tracks.length){c=this.b;a=a.g.tracks;var e;for(d=0;d<a.length;d++){e=a[d];var g=c,j=e.kind,k=e.label,q=e.language,n=e;e=g.Aa=g.Aa||[];n=n||{};n.kind=j;n.label=k;n.language=q;j=u.$(j||\"subtitles\");g=new window.videojs[j+\"Track\"](g,n);e.push(g)}}}});u.bc.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-text-track-display\"})};\nu.Y=u.N.extend({i:function(a,c){var d=this.ca=c.track;c.label=d.label();c.selected=d.ub();u.N.call(this,a,c);this.b.d(d.J()+\"trackchange\",u.bind(this,this.update))}});u.Y.prototype.p=function(){u.N.prototype.p.call(this);W(this.b,this.ca.Q,this.ca.J())};u.Y.prototype.update=function(){this.selected(2==this.ca.mode())};u.bb=u.Y.extend({i:function(a,c){c.track={J:function(){return c.kind},K:a,label:function(){return c.kind+\" off\"},ub:s(l),mode:s(l)};u.Y.call(this,a,c);this.selected(f)}});\nu.bb.prototype.p=function(){u.Y.prototype.p.call(this);W(this.b,this.ca.Q,this.ca.J())};u.bb.prototype.update=function(){for(var a=V(this.b),c=0,d=a.length,e,g=f;c<d;c++)e=a[c],e.J()==this.ca.J()&&2==e.mode()&&(g=l);this.selected(g)};u.S=u.R.extend({i:function(a,c){u.R.call(this,a,c);1>=this.I.length&&this.C()}});u.S.prototype.ta=function(){var a=[],c;a.push(new u.bb(this.b,{kind:this.A}));for(var d=0;d<V(this.b).length;d++)c=V(this.b)[d],c.J()===this.A&&a.push(new u.Y(this.b,{track:c}));return a};\nu.Da=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute(\"aria-label\",\"Captions Menu\")}});u.Da.prototype.A=\"captions\";u.Da.prototype.qa=\"Captions\";u.Da.prototype.className=\"vjs-captions-button\";u.Ha=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute(\"aria-label\",\"Subtitles Menu\")}});u.Ha.prototype.A=\"subtitles\";u.Ha.prototype.qa=\"Subtitles\";u.Ha.prototype.className=\"vjs-subtitles-button\";\nu.Ea=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute(\"aria-label\",\"Chapters Menu\")}});t=u.Ea.prototype;t.A=\"chapters\";t.qa=\"Chapters\";t.className=\"vjs-chapters-button\";t.ta=function(){for(var a=[],c,d=0;d<V(this.b).length;d++)c=V(this.b)[d],c.J()===this.A&&a.push(new u.Y(this.b,{track:c}));return a};\nt.Ka=function(){for(var a=V(this.b),c=0,d=a.length,e,g,j=this.I=[];c<d;c++)if(e=a[c],e.J()==this.A&&e.ub()){if(2>e.readyState()){this.Id=e;e.d(\"loaded\",u.bind(this,this.Ka));return}g=e;break}a=this.wa=new u.ma(this.b);a.a.appendChild(u.e(\"li\",{className:\"vjs-menu-title\",innerHTML:u.$(this.A),zd:-1}));if(g){e=g.fa;for(var k,c=0,d=e.length;c<d;c++)k=e[c],k=new u.Xa(this.b,{track:g,cue:k}),j.push(k),a.Z(k)}0<this.I.length&&this.show();return a};\nu.Xa=u.N.extend({i:function(a,c){var d=this.ca=c.track,e=this.cue=c.cue,g=a.currentTime();c.label=e.text;c.selected=e.startTime<=g&&g<e.va;u.N.call(this,a,c);d.d(\"cuechange\",u.bind(this,this.update))}});u.Xa.prototype.p=function(){u.N.prototype.p.call(this);this.b.currentTime(this.cue.startTime);this.update(this.cue.startTime)};u.Xa.prototype.update=function(){var a=this.cue,c=this.b.currentTime();this.selected(a.startTime<=c&&c<a.va)};\nu.k.B(u.Fa.prototype.g.children,{subtitlesButton:{},captionsButton:{},chaptersButton:{}});\nif(\"undefined\"!==typeof window.JSON&&\"function\"===window.JSON.parse)u.JSON=window.JSON;else{u.JSON={};var Z=/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;u.JSON.parse=function(a,c){function d(a,e){var k,q,n=a[e];if(n&&\"object\"===typeof n)for(k in n)Object.prototype.hasOwnProperty.call(n,k)&&(q=d(n,k),q!==b?n[k]=q:delete n[k]);return c.call(a,e,n)}var e;a=String(a);Z.lastIndex=0;Z.test(a)&&(a=a.replace(Z,function(a){return\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)}));\nif(/^[\\],:{}\\s]*$/.test(a.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g,\"\")))return e=eval(\"(\"+a+\")\"),\"function\"===typeof c?d({\"\":e},\"\"):e;throw new SyntaxError(\"JSON.parse(): invalid or malformed JSON data\");}}\nu.fc=function(){var a,c,d=document.getElementsByTagName(\"video\");if(d&&0<d.length)for(var e=0,g=d.length;e<g;e++)if((c=d[e])&&c.getAttribute)c.player===b&&(a=c.getAttribute(\"data-setup\"),a!==h&&(a=u.JSON.parse(a||\"{}\"),v(c,a)));else{u.kb();break}else u.Ec||u.kb()};u.kb=function(){setTimeout(u.fc,1)};\"complete\"===document.readyState?u.Ec=f:u.U(window,\"load\",function(){u.Ec=f});u.kb();u.od=function(a,c){u.s.prototype[a]=c};var ga=this;ga.Ed=f;function $(a,c){var d=a.split(\".\"),e=ga;!(d[0]in e)&&e.execScript&&e.execScript(\"var \"+d[0]);for(var g;d.length&&(g=d.shift());)!d.length&&c!==b?e[g]=c:e=e[g]?e[g]:e[g]={}};$(\"videojs\",u);$(\"_V_\",u);$(\"videojs.options\",u.options);$(\"videojs.players\",u.xa);$(\"videojs.TOUCH_ENABLED\",u.ac);$(\"videojs.cache\",u.ra);$(\"videojs.Component\",u.c);u.c.prototype.player=u.c.prototype.K;u.c.prototype.dispose=u.c.prototype.D;u.c.prototype.createEl=u.c.prototype.e;u.c.prototype.el=u.c.prototype.w;u.c.prototype.addChild=u.c.prototype.Z;u.c.prototype.children=u.c.prototype.children;u.c.prototype.on=u.c.prototype.d;u.c.prototype.off=u.c.prototype.o;u.c.prototype.one=u.c.prototype.U;\nu.c.prototype.trigger=u.c.prototype.j;u.c.prototype.triggerReady=u.c.prototype.Ua;u.c.prototype.show=u.c.prototype.show;u.c.prototype.hide=u.c.prototype.C;u.c.prototype.width=u.c.prototype.width;u.c.prototype.height=u.c.prototype.height;u.c.prototype.dimensions=u.c.prototype.Xc;u.c.prototype.ready=u.c.prototype.L;u.c.prototype.addClass=u.c.prototype.n;u.c.prototype.removeClass=u.c.prototype.u;$(\"videojs.Player\",u.s);u.s.prototype.dispose=u.s.prototype.D;u.s.prototype.requestFullScreen=u.s.prototype.ya;\nu.s.prototype.cancelFullScreen=u.s.prototype.ob;u.s.prototype.bufferedPercent=u.s.prototype.Ja;u.s.prototype.usingNativeControls=u.s.prototype.Rb;u.s.prototype.reportUserActivity=u.s.prototype.Mb;u.s.prototype.userActive=u.s.prototype.ja;$(\"videojs.MediaLoader\",u.Pc);$(\"videojs.TextTrackDisplay\",u.bc);$(\"videojs.ControlBar\",u.Fa);$(\"videojs.Button\",u.q);$(\"videojs.PlayToggle\",u.Yb);$(\"videojs.FullscreenToggle\",u.Ga);$(\"videojs.BigPlayButton\",u.Wa);$(\"videojs.LoadingSpinner\",u.Wb);\n$(\"videojs.CurrentTimeDisplay\",u.Ya);$(\"videojs.DurationDisplay\",u.Za);$(\"videojs.TimeDivider\",u.cc);$(\"videojs.RemainingTimeDisplay\",u.fb);$(\"videojs.Slider\",u.O);$(\"videojs.ProgressControl\",u.eb);$(\"videojs.SeekBar\",u.Zb);$(\"videojs.LoadProgressBar\",u.ab);$(\"videojs.PlayProgressBar\",u.Xb);$(\"videojs.SeekHandle\",u.gb);$(\"videojs.VolumeControl\",u.ib);$(\"videojs.VolumeBar\",u.hb);$(\"videojs.VolumeLevel\",u.dc);$(\"videojs.VolumeMenuButton\",u.oa);$(\"videojs.VolumeHandle\",u.jb);$(\"videojs.MuteToggle\",u.da);\n$(\"videojs.PosterImage\",u.cb);$(\"videojs.Menu\",u.ma);$(\"videojs.MenuItem\",u.N);$(\"videojs.MenuButton\",u.R);u.R.prototype.createItems=u.R.prototype.ta;u.S.prototype.createItems=u.S.prototype.ta;u.Ea.prototype.createItems=u.Ea.prototype.ta;$(\"videojs.SubtitlesButton\",u.Ha);$(\"videojs.CaptionsButton\",u.Da);$(\"videojs.ChaptersButton\",u.Ea);$(\"videojs.MediaTechController\",u.r);u.r.prototype.features=u.r.prototype.m;u.r.prototype.m.volumeControl=u.r.prototype.m.Dc;u.r.prototype.m.fullscreenResize=u.r.prototype.m.Jd;\nu.r.prototype.m.progressEvents=u.r.prototype.m.Nd;u.r.prototype.m.timeupdateEvents=u.r.prototype.m.Sd;$(\"videojs.Html5\",u.l);u.l.Events=u.l.$a;u.l.isSupported=u.l.isSupported;u.l.canPlaySource=u.l.mb;u.l.prototype.setCurrentTime=u.l.prototype.sd;u.l.prototype.setVolume=u.l.prototype.xd;u.l.prototype.setMuted=u.l.prototype.vd;u.l.prototype.setPreload=u.l.prototype.wd;u.l.prototype.setAutoplay=u.l.prototype.rd;u.l.prototype.setLoop=u.l.prototype.ud;$(\"videojs.Flash\",u.f);u.f.isSupported=u.f.isSupported;\nu.f.canPlaySource=u.f.mb;u.f.onReady=u.f.onReady;$(\"videojs.TextTrack\",u.X);u.X.prototype.label=u.X.prototype.label;$(\"videojs.CaptionsTrack\",u.Ub);$(\"videojs.SubtitlesTrack\",u.$b);$(\"videojs.ChaptersTrack\",u.Vb);$(\"videojs.autoSetup\",u.fc);$(\"videojs.plugin\",u.od);$(\"videojs.createTimeRange\",u.tb);})();\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/webuploader/webuploader.css",
    "content": ".webuploader-container {\n\tposition: relative;\n}\n.webuploader-element-invisible {\n\tposition: absolute !important;\n\tclip: rect(1px 1px 1px 1px); /* IE6, IE7 */\n    clip: rect(1px,1px,1px,1px);\n}\n.webuploader-pick {\n\tposition: relative;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tbackground: #00b7ee;\n\tpadding: 10px 15px;\n\tcolor: #fff;\n\ttext-align: center;\n\tborder-radius: 3px;\n\toverflow: hidden;\n}\n.webuploader-pick-hover {\n\tbackground: #00a2d4;\n}\n\n.webuploader-pick-disable {\n\topacity: 0.6;\n\tpointer-events:none;\n}\n\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/webuploader/webuploader.custom.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: true,\n    \n            // 是否允许放大。\n            allowMagnify: true\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: false,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n            'make-thumb': 'makeThumb',\n            'before-send-file': 'compressImage'\n        }, {\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             *\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function() {\n                    cb( true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            compressImage: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 300 * 1024,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( opts.width, opts.height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destory = this.destory;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    lable = $( document.createElement('label') ),\n                    input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler;\n    \n                input.attr( 'type', 'file' );\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                lable.on( 'click', function() {\n                    input.trigger('click');\n                });\n    \n                lable.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( lable );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                input.on( 'change', function( e ) {\n                    var fn = arguments.callee,\n                        clone;\n    \n                    me.files = e.target.files;\n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', fn )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                });\n    \n                lable.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger('complete');\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, 'image/jpeg',\n                                opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        canvas.getContext('2d').drawImage( img, x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                            iw * vertSquashRatio, ih * vertSquashRatio,\n                            x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * 这个方式性能不行，但是可以解决android里面的toDataUrl的bug\n     * android里面toDataUrl('image/jpege')得到的结果却是png.\n     *\n     * 所以这里没辙，只能借助这个工具\n     * @fileOverview jpeg encoder\n     */\n    define('runtime/html5/jpegencoder',[], function( require, exports, module ) {\n    \n        /*\n          Copyright (c) 2008, Adobe Systems Incorporated\n          All rights reserved.\n    \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are\n          met:\n    \n          * Redistributions of source code must retain the above copyright notice,\n            this list of conditions and the following disclaimer.\n    \n          * Redistributions in binary form must reproduce the above copyright\n            notice, this list of conditions and the following disclaimer in the\n            documentation and/or other materials provided with the distribution.\n    \n          * Neither the name of Adobe Systems Incorporated nor the names of its\n            contributors may be used to endorse or promote products derived from\n            this software without specific prior written permission.\n    \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n          IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n          THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n          PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n          CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n          EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n          PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n          PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n          LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n          NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n          SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n        /*\n        JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n    \n        Basic GUI blocking jpeg encoder\n        */\n    \n        function JPEGEncoder(quality) {\n          var self = this;\n            var fround = Math.round;\n            var ffloor = Math.floor;\n            var YTable = new Array(64);\n            var UVTable = new Array(64);\n            var fdtbl_Y = new Array(64);\n            var fdtbl_UV = new Array(64);\n            var YDC_HT;\n            var UVDC_HT;\n            var YAC_HT;\n            var UVAC_HT;\n    \n            var bitcode = new Array(65535);\n            var category = new Array(65535);\n            var outputfDCTQuant = new Array(64);\n            var DU = new Array(64);\n            var byteout = [];\n            var bytenew = 0;\n            var bytepos = 7;\n    \n            var YDU = new Array(64);\n            var UDU = new Array(64);\n            var VDU = new Array(64);\n            var clt = new Array(256);\n            var RGB_YUV_TABLE = new Array(2048);\n            var currentQuality;\n    \n            var ZigZag = [\n                     0, 1, 5, 6,14,15,27,28,\n                     2, 4, 7,13,16,26,29,42,\n                     3, 8,12,17,25,30,41,43,\n                     9,11,18,24,31,40,44,53,\n                    10,19,23,32,39,45,52,54,\n                    20,22,33,38,46,51,55,60,\n                    21,34,37,47,50,56,59,61,\n                    35,36,48,49,57,58,62,63\n                ];\n    \n            var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n            var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n            var std_ac_luminance_values = [\n                    0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n                    0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n                    0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n                    0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n                    0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n                    0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n                    0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n                    0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n                    0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n                    0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n                    0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n                    0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n                    0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n                    0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n                    0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n                    0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n                    0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n                    0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n                    0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n                    0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n            var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n            var std_ac_chrominance_values = [\n                    0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n                    0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n                    0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n                    0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n                    0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n                    0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n                    0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n                    0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n                    0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n                    0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n                    0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n                    0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n                    0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n                    0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n                    0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n                    0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n                    0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n                    0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n                    0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n                    0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            function initQuantTables(sf){\n                    var YQT = [\n                        16, 11, 10, 16, 24, 40, 51, 61,\n                        12, 12, 14, 19, 26, 58, 60, 55,\n                        14, 13, 16, 24, 40, 57, 69, 56,\n                        14, 17, 22, 29, 51, 87, 80, 62,\n                        18, 22, 37, 56, 68,109,103, 77,\n                        24, 35, 55, 64, 81,104,113, 92,\n                        49, 64, 78, 87,103,121,120,101,\n                        72, 92, 95, 98,112,100,103, 99\n                    ];\n    \n                    for (var i = 0; i < 64; i++) {\n                        var t = ffloor((YQT[i]*sf+50)/100);\n                        if (t < 1) {\n                            t = 1;\n                        } else if (t > 255) {\n                            t = 255;\n                        }\n                        YTable[ZigZag[i]] = t;\n                    }\n                    var UVQT = [\n                        17, 18, 24, 47, 99, 99, 99, 99,\n                        18, 21, 26, 66, 99, 99, 99, 99,\n                        24, 26, 56, 99, 99, 99, 99, 99,\n                        47, 66, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99\n                    ];\n                    for (var j = 0; j < 64; j++) {\n                        var u = ffloor((UVQT[j]*sf+50)/100);\n                        if (u < 1) {\n                            u = 1;\n                        } else if (u > 255) {\n                            u = 255;\n                        }\n                        UVTable[ZigZag[j]] = u;\n                    }\n                    var aasf = [\n                        1.0, 1.387039845, 1.306562965, 1.175875602,\n                        1.0, 0.785694958, 0.541196100, 0.275899379\n                    ];\n                    var k = 0;\n                    for (var row = 0; row < 8; row++)\n                    {\n                        for (var col = 0; col < 8; col++)\n                        {\n                            fdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            k++;\n                        }\n                    }\n                }\n    \n                function computeHuffmanTbl(nrcodes, std_table){\n                    var codevalue = 0;\n                    var pos_in_table = 0;\n                    var HT = new Array();\n                    for (var k = 1; k <= 16; k++) {\n                        for (var j = 1; j <= nrcodes[k]; j++) {\n                            HT[std_table[pos_in_table]] = [];\n                            HT[std_table[pos_in_table]][0] = codevalue;\n                            HT[std_table[pos_in_table]][1] = k;\n                            pos_in_table++;\n                            codevalue++;\n                        }\n                        codevalue*=2;\n                    }\n                    return HT;\n                }\n    \n                function initHuffmanTbl()\n                {\n                    YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n                    UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n                    YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n                    UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n                }\n    \n                function initCategoryNumber()\n                {\n                    var nrlower = 1;\n                    var nrupper = 2;\n                    for (var cat = 1; cat <= 15; cat++) {\n                        //Positive numbers\n                        for (var nr = nrlower; nr<nrupper; nr++) {\n                            category[32767+nr] = cat;\n                            bitcode[32767+nr] = [];\n                            bitcode[32767+nr][1] = cat;\n                            bitcode[32767+nr][0] = nr;\n                        }\n                        //Negative numbers\n                        for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n                            category[32767+nrneg] = cat;\n                            bitcode[32767+nrneg] = [];\n                            bitcode[32767+nrneg][1] = cat;\n                            bitcode[32767+nrneg][0] = nrupper-1+nrneg;\n                        }\n                        nrlower <<= 1;\n                        nrupper <<= 1;\n                    }\n                }\n    \n                function initRGBYUVTable() {\n                    for(var i = 0; i < 256;i++) {\n                        RGB_YUV_TABLE[i]            =  19595 * i;\n                        RGB_YUV_TABLE[(i+ 256)>>0]  =  38470 * i;\n                        RGB_YUV_TABLE[(i+ 512)>>0]  =   7471 * i + 0x8000;\n                        RGB_YUV_TABLE[(i+ 768)>>0]  = -11059 * i;\n                        RGB_YUV_TABLE[(i+1024)>>0]  = -21709 * i;\n                        RGB_YUV_TABLE[(i+1280)>>0]  =  32768 * i + 0x807FFF;\n                        RGB_YUV_TABLE[(i+1536)>>0]  = -27439 * i;\n                        RGB_YUV_TABLE[(i+1792)>>0]  = - 5329 * i;\n                    }\n                }\n    \n                // IO functions\n                function writeBits(bs)\n                {\n                    var value = bs[0];\n                    var posval = bs[1]-1;\n                    while ( posval >= 0 ) {\n                        if (value & (1 << posval) ) {\n                            bytenew |= (1 << bytepos);\n                        }\n                        posval--;\n                        bytepos--;\n                        if (bytepos < 0) {\n                            if (bytenew == 0xFF) {\n                                writeByte(0xFF);\n                                writeByte(0);\n                            }\n                            else {\n                                writeByte(bytenew);\n                            }\n                            bytepos=7;\n                            bytenew=0;\n                        }\n                    }\n                }\n    \n                function writeByte(value)\n                {\n                    byteout.push(clt[value]); // write char directly instead of converting later\n                }\n    \n                function writeWord(value)\n                {\n                    writeByte((value>>8)&0xFF);\n                    writeByte((value   )&0xFF);\n                }\n    \n                // DCT & quantization core\n                function fDCTQuant(data, fdtbl)\n                {\n                    var d0, d1, d2, d3, d4, d5, d6, d7;\n                    /* Pass 1: process rows. */\n                    var dataOff=0;\n                    var i;\n                    var I8 = 8;\n                    var I64 = 64;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff+1];\n                        d2 = data[dataOff+2];\n                        d3 = data[dataOff+3];\n                        d4 = data[dataOff+4];\n                        d5 = data[dataOff+5];\n                        d6 = data[dataOff+6];\n                        d7 = data[dataOff+7];\n    \n                        var tmp0 = d0 + d7;\n                        var tmp7 = d0 - d7;\n                        var tmp1 = d1 + d6;\n                        var tmp6 = d1 - d6;\n                        var tmp2 = d2 + d5;\n                        var tmp5 = d2 - d5;\n                        var tmp3 = d3 + d4;\n                        var tmp4 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10 = tmp0 + tmp3;    /* phase 2 */\n                        var tmp13 = tmp0 - tmp3;\n                        var tmp11 = tmp1 + tmp2;\n                        var tmp12 = tmp1 - tmp2;\n    \n                        data[dataOff] = tmp10 + tmp11; /* phase 3 */\n                        data[dataOff+4] = tmp10 - tmp11;\n    \n                        var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n                        data[dataOff+2] = tmp13 + z1; /* phase 5 */\n                        data[dataOff+6] = tmp13 - z1;\n    \n                        /* Odd part */\n                        tmp10 = tmp4 + tmp5; /* phase 2 */\n                        tmp11 = tmp5 + tmp6;\n                        tmp12 = tmp6 + tmp7;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n                        var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n                        var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n                        var z3 = tmp11 * 0.707106781; /* c4 */\n    \n                        var z11 = tmp7 + z3;    /* phase 5 */\n                        var z13 = tmp7 - z3;\n    \n                        data[dataOff+5] = z13 + z2; /* phase 6 */\n                        data[dataOff+3] = z13 - z2;\n                        data[dataOff+1] = z11 + z4;\n                        data[dataOff+7] = z11 - z4;\n    \n                        dataOff += 8; /* advance pointer to next row */\n                    }\n    \n                    /* Pass 2: process columns. */\n                    dataOff = 0;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff + 8];\n                        d2 = data[dataOff + 16];\n                        d3 = data[dataOff + 24];\n                        d4 = data[dataOff + 32];\n                        d5 = data[dataOff + 40];\n                        d6 = data[dataOff + 48];\n                        d7 = data[dataOff + 56];\n    \n                        var tmp0p2 = d0 + d7;\n                        var tmp7p2 = d0 - d7;\n                        var tmp1p2 = d1 + d6;\n                        var tmp6p2 = d1 - d6;\n                        var tmp2p2 = d2 + d5;\n                        var tmp5p2 = d2 - d5;\n                        var tmp3p2 = d3 + d4;\n                        var tmp4p2 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10p2 = tmp0p2 + tmp3p2;  /* phase 2 */\n                        var tmp13p2 = tmp0p2 - tmp3p2;\n                        var tmp11p2 = tmp1p2 + tmp2p2;\n                        var tmp12p2 = tmp1p2 - tmp2p2;\n    \n                        data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n                        data[dataOff+32] = tmp10p2 - tmp11p2;\n    \n                        var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n                        data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n                        data[dataOff+48] = tmp13p2 - z1p2;\n    \n                        /* Odd part */\n                        tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n                        tmp11p2 = tmp5p2 + tmp6p2;\n                        tmp12p2 = tmp6p2 + tmp7p2;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n                        var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n                        var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n                        var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n    \n                        var z11p2 = tmp7p2 + z3p2;  /* phase 5 */\n                        var z13p2 = tmp7p2 - z3p2;\n    \n                        data[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n                        data[dataOff+24] = z13p2 - z2p2;\n                        data[dataOff+ 8] = z11p2 + z4p2;\n                        data[dataOff+56] = z11p2 - z4p2;\n    \n                        dataOff++; /* advance pointer to next column */\n                    }\n    \n                    // Quantize/descale the coefficients\n                    var fDCTQuant;\n                    for (i=0; i<I64; ++i)\n                    {\n                        // Apply the quantization and scaling factor & Round to nearest integer\n                        fDCTQuant = data[i]*fdtbl[i];\n                        outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n                        //outputfDCTQuant[i] = fround(fDCTQuant);\n    \n                    }\n                    return outputfDCTQuant;\n                }\n    \n                function writeAPP0()\n                {\n                    writeWord(0xFFE0); // marker\n                    writeWord(16); // length\n                    writeByte(0x4A); // J\n                    writeByte(0x46); // F\n                    writeByte(0x49); // I\n                    writeByte(0x46); // F\n                    writeByte(0); // = \"JFIF\",'\\0'\n                    writeByte(1); // versionhi\n                    writeByte(1); // versionlo\n                    writeByte(0); // xyunits\n                    writeWord(1); // xdensity\n                    writeWord(1); // ydensity\n                    writeByte(0); // thumbnwidth\n                    writeByte(0); // thumbnheight\n                }\n    \n                function writeSOF0(width, height)\n                {\n                    writeWord(0xFFC0); // marker\n                    writeWord(17);   // length, truecolor YUV JPG\n                    writeByte(8);    // precision\n                    writeWord(height);\n                    writeWord(width);\n                    writeByte(3);    // nrofcomponents\n                    writeByte(1);    // IdY\n                    writeByte(0x11); // HVY\n                    writeByte(0);    // QTY\n                    writeByte(2);    // IdU\n                    writeByte(0x11); // HVU\n                    writeByte(1);    // QTU\n                    writeByte(3);    // IdV\n                    writeByte(0x11); // HVV\n                    writeByte(1);    // QTV\n                }\n    \n                function writeDQT()\n                {\n                    writeWord(0xFFDB); // marker\n                    writeWord(132);    // length\n                    writeByte(0);\n                    for (var i=0; i<64; i++) {\n                        writeByte(YTable[i]);\n                    }\n                    writeByte(1);\n                    for (var j=0; j<64; j++) {\n                        writeByte(UVTable[j]);\n                    }\n                }\n    \n                function writeDHT()\n                {\n                    writeWord(0xFFC4); // marker\n                    writeWord(0x01A2); // length\n    \n                    writeByte(0); // HTYDCinfo\n                    for (var i=0; i<16; i++) {\n                        writeByte(std_dc_luminance_nrcodes[i+1]);\n                    }\n                    for (var j=0; j<=11; j++) {\n                        writeByte(std_dc_luminance_values[j]);\n                    }\n    \n                    writeByte(0x10); // HTYACinfo\n                    for (var k=0; k<16; k++) {\n                        writeByte(std_ac_luminance_nrcodes[k+1]);\n                    }\n                    for (var l=0; l<=161; l++) {\n                        writeByte(std_ac_luminance_values[l]);\n                    }\n    \n                    writeByte(1); // HTUDCinfo\n                    for (var m=0; m<16; m++) {\n                        writeByte(std_dc_chrominance_nrcodes[m+1]);\n                    }\n                    for (var n=0; n<=11; n++) {\n                        writeByte(std_dc_chrominance_values[n]);\n                    }\n    \n                    writeByte(0x11); // HTUACinfo\n                    for (var o=0; o<16; o++) {\n                        writeByte(std_ac_chrominance_nrcodes[o+1]);\n                    }\n                    for (var p=0; p<=161; p++) {\n                        writeByte(std_ac_chrominance_values[p]);\n                    }\n                }\n    \n                function writeSOS()\n                {\n                    writeWord(0xFFDA); // marker\n                    writeWord(12); // length\n                    writeByte(3); // nrofcomponents\n                    writeByte(1); // IdY\n                    writeByte(0); // HTY\n                    writeByte(2); // IdU\n                    writeByte(0x11); // HTU\n                    writeByte(3); // IdV\n                    writeByte(0x11); // HTV\n                    writeByte(0); // Ss\n                    writeByte(0x3f); // Se\n                    writeByte(0); // Bf\n                }\n    \n                function processDU(CDU, fdtbl, DC, HTDC, HTAC){\n                    var EOB = HTAC[0x00];\n                    var M16zeroes = HTAC[0xF0];\n                    var pos;\n                    var I16 = 16;\n                    var I63 = 63;\n                    var I64 = 64;\n                    var DU_DCT = fDCTQuant(CDU, fdtbl);\n                    //ZigZag reorder\n                    for (var j=0;j<I64;++j) {\n                        DU[ZigZag[j]]=DU_DCT[j];\n                    }\n                    var Diff = DU[0] - DC; DC = DU[0];\n                    //Encode DC\n                    if (Diff==0) {\n                        writeBits(HTDC[0]); // Diff might be 0\n                    } else {\n                        pos = 32767+Diff;\n                        writeBits(HTDC[category[pos]]);\n                        writeBits(bitcode[pos]);\n                    }\n                    //Encode ACs\n                    var end0pos = 63; // was const... which is crazy\n                    for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n                    //end0pos = first element in reverse order !=0\n                    if ( end0pos == 0) {\n                        writeBits(EOB);\n                        return DC;\n                    }\n                    var i = 1;\n                    var lng;\n                    while ( i <= end0pos ) {\n                        var startpos = i;\n                        for (; (DU[i]==0) && (i<=end0pos); ++i) {}\n                        var nrzeroes = i-startpos;\n                        if ( nrzeroes >= I16 ) {\n                            lng = nrzeroes>>4;\n                            for (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n                                writeBits(M16zeroes);\n                            nrzeroes = nrzeroes&0xF;\n                        }\n                        pos = 32767+DU[i];\n                        writeBits(HTAC[(nrzeroes<<4)+category[pos]]);\n                        writeBits(bitcode[pos]);\n                        i++;\n                    }\n                    if ( end0pos != I63 ) {\n                        writeBits(EOB);\n                    }\n                    return DC;\n                }\n    \n                function initCharLookupTable(){\n                    var sfcc = String.fromCharCode;\n                    for(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n                        clt[i] = sfcc(i);\n                    }\n                }\n    \n                this.encode = function(image,quality) // image data object\n                {\n                    // var time_start = new Date().getTime();\n    \n                    if(quality) setQuality(quality);\n    \n                    // Initialize bit writer\n                    byteout = new Array();\n                    bytenew=0;\n                    bytepos=7;\n    \n                    // Add JPEG headers\n                    writeWord(0xFFD8); // SOI\n                    writeAPP0();\n                    writeDQT();\n                    writeSOF0(image.width,image.height);\n                    writeDHT();\n                    writeSOS();\n    \n    \n                    // Encode 8x8 macroblocks\n                    var DCY=0;\n                    var DCU=0;\n                    var DCV=0;\n    \n                    bytenew=0;\n                    bytepos=7;\n    \n    \n                    this.encode.displayName = \"_encode_\";\n    \n                    var imageData = image.data;\n                    var width = image.width;\n                    var height = image.height;\n    \n                    var quadWidth = width*4;\n                    var tripleWidth = width*3;\n    \n                    var x, y = 0;\n                    var r, g, b;\n                    var start,p, col,row,pos;\n                    while(y < height){\n                        x = 0;\n                        while(x < quadWidth){\n                        start = quadWidth * y + x;\n                        p = start;\n                        col = -1;\n                        row = 0;\n    \n                        for(pos=0; pos < 64; pos++){\n                            row = pos >> 3;// /8\n                            col = ( pos & 7 ) * 4; // %8\n                            p = start + ( row * quadWidth ) + col;\n    \n                            if(y+row >= height){ // padding bottom\n                                p-= (quadWidth*(y+1+row-height));\n                            }\n    \n                            if(x+col >= quadWidth){ // padding right\n                                p-= ((x+col) - quadWidth +4)\n                            }\n    \n                            r = imageData[ p++ ];\n                            g = imageData[ p++ ];\n                            b = imageData[ p++ ];\n    \n    \n                            /* // calculate YUV values dynamically\n                            YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n                            UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n                            VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n                            */\n    \n                            // use lookup table (slightly faster)\n                            YDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n                            UDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n                            VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n    \n                        }\n    \n                        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n                        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n                        x+=32;\n                        }\n                        y+=8;\n                    }\n    \n    \n                    ////////////////////////////////////////////////////////////////\n    \n                    // Do the bit alignment of the EOI marker\n                    if ( bytepos >= 0 ) {\n                        var fillbits = [];\n                        fillbits[1] = bytepos+1;\n                        fillbits[0] = (1<<(bytepos+1))-1;\n                        writeBits(fillbits);\n                    }\n    \n                    writeWord(0xFFD9); //EOI\n    \n                    var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n    \n                    byteout = [];\n    \n                    // benchmarking\n                    // var duration = new Date().getTime() - time_start;\n                    // console.log('Encoding time: '+ currentQuality + 'ms');\n                    //\n    \n                    return jpegDataUri\n            }\n    \n            function setQuality(quality){\n                if (quality <= 0) {\n                    quality = 1;\n                }\n                if (quality > 100) {\n                    quality = 100;\n                }\n    \n                if(currentQuality == quality) return // don't recalc if unchanged\n    \n                var sf = 0;\n                if (quality < 50) {\n                    sf = Math.floor(5000 / quality);\n                } else {\n                    sf = Math.floor(200 - quality*2);\n                }\n    \n                initQuantTables(sf);\n                currentQuality = quality;\n                // console.log('Quality set to: '+quality +'%');\n            }\n    \n            function init(){\n                // var time_start = new Date().getTime();\n                if(!quality) quality = 50;\n                // Create tables\n                initCharLookupTable()\n                initHuffmanTbl();\n                initCategoryNumber();\n                initRGBYUVTable();\n    \n                setQuality(quality);\n                // var duration = new Date().getTime() - time_start;\n                // console.log('Initialization '+ duration + 'ms');\n            }\n    \n            init();\n    \n        };\n    \n        JPEGEncoder.encode = function( data, quality ) {\n            var encoder = new JPEGEncoder( quality );\n    \n            return encoder.encode( data );\n        }\n    \n        return JPEGEncoder;\n    });\n    /**\n     * @fileOverview Fix android canvas.toDataUrl bug.\n     */\n    define('runtime/html5/androidpatch',[\n        'runtime/html5/util',\n        'runtime/html5/jpegencoder',\n        'base'\n    ], function( Util, encoder, Base ) {\n        var origin = Util.canvasToDataUrl,\n            supportJpeg;\n    \n        Util.canvasToDataUrl = function( canvas, type, quality ) {\n            var ctx, w, h, fragement, parts;\n    \n            // 非android手机直接跳过。\n            if ( !Base.os.android ) {\n                return origin.apply( null, arguments );\n            }\n    \n            // 检测是否canvas支持jpeg导出，根据数据格式来判断。\n            // JPEG 前两位分别是：255, 216\n            if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) {\n                fragement = origin.apply( null, arguments );\n    \n                parts = fragement.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    fragement = atob( parts[ 1 ] );\n                } else {\n                    fragement = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                fragement = fragement.substring( 0, 2 );\n    \n                supportJpeg = fragement.charCodeAt( 0 ) === 255 &&\n                        fragement.charCodeAt( 1 ) === 216;\n            }\n    \n            // 只有在android环境下才修复\n            if ( type === 'image/jpeg' && !supportJpeg ) {\n                w = canvas.width;\n                h = canvas.height;\n                ctx = canvas.getContext('2d');\n    \n                return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality );\n            }\n    \n            return origin.apply( null, arguments );\n        };\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    define('webuploader',[\n        'base',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'runtime/html5/blob',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/image',\n        'runtime/html5/androidpatch',\n        'runtime/html5/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/webuploader/webuploader.flashonly.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: true,\n    \n            // 是否允许放大。\n            allowMagnify: true\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: false,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n            'make-thumb': 'makeThumb',\n            'before-send-file': 'compressImage'\n        }, {\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             *\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function() {\n                    cb( true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            compressImage: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 300 * 1024,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( opts.width, opts.height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            init: function() {\n                var me = this;\n                $.each( validators, function() {\n                    this.call( me.owner );\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileNumLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileSizeLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {int} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destory = this.destory,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * @fileOverview 图片压缩\n     */\n    define('runtime/flash/image',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n    \n        return FlashRuntime.register( 'Image', {\n            // init: function( options ) {\n            //     var owner = this.owner;\n    \n            //     this.flashExec( 'Image', 'init', options );\n            //     owner.on( 'load', function() {\n            //         debugger;\n            //     });\n            // },\n    \n            loadFromBlob: function( blob ) {\n                var owner = this.owner;\n    \n                owner.info() && this.flashExec( 'Image', 'info', owner.info() );\n                owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() );\n    \n                this.flashExec( 'Image', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    return me.trigger( 'progress', e.loaded / e.total );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        err = '';\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                    } else if ( status >= 500 && status < 600 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 只有flash实现的文件版本。\n     */\n    define('preset/flashonly',[\n        'base',\n    \n        // widgets\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/image',\n        'runtime/flash/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/flashonly'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/webuploader/webuploader.html5only.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.disconnectRuntime();\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.exec('destroy');\n                this.disconnectRuntime();\n                this.off();\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: true,\n    \n            // 是否允许放大。\n            allowMagnify: true\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: false,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n            'make-thumb': 'makeThumb',\n            'before-send-file': 'compressImage'\n        }, {\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             *\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function() {\n                    cb( true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            compressImage: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 300 * 1024,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( opts.width, opts.height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            init: function() {\n                var me = this;\n                $.each( validators, function() {\n                    this.call( me.owner );\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileNumLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileSizeLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {int} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destory = this.destory;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/dnd',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        var $ = Base.$,\n            prefix = 'webuploader-dnd-';\n    \n        return Html5Runtime.register( 'DragAndDrop', {\n            init: function() {\n                var elem = this.elem = this.options.container;\n    \n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\n                this.dndOver = false;\n    \n                elem.on( 'dragenter', this.dragEnterHandler );\n                elem.on( 'dragover', this.dragOverHandler );\n                elem.on( 'dragleave', this.dragLeaveHandler );\n                elem.on( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).on( 'dragover', this.dragOverHandler );\n                    $( document ).on( 'drop', this.dropHandler );\n                }\n            },\n    \n            _dragEnterHandler: function( e ) {\n                var me = this,\n                    denied = me._denied || false,\n                    items;\n    \n                e = e.originalEvent || e;\n    \n                if ( !me.dndOver ) {\n                    me.dndOver = true;\n    \n                    // 注意只有 chrome 支持。\n                    items = e.dataTransfer.items;\n    \n                    if ( items && items.length ) {\n                        me._denied = denied = !me.trigger( 'accept', items );\n                    }\n    \n                    me.elem.addClass( prefix + 'over' );\n                    me.elem[ denied ? 'addClass' :\n                            'removeClass' ]( prefix + 'denied' );\n                }\n    \n    \n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\n    \n                return false;\n            },\n    \n            _dragOverHandler: function( e ) {\n                // 只处理框内的。\n                var parentElem = this.elem.parent().get( 0 );\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                clearTimeout( this._leaveTimer );\n                this._dragEnterHandler.call( this, e );\n    \n                return false;\n            },\n    \n            _dragLeaveHandler: function() {\n                var me = this,\n                    handler;\n    \n                handler = function() {\n                    me.dndOver = false;\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\n                };\n    \n                clearTimeout( me._leaveTimer );\n                me._leaveTimer = setTimeout( handler, 100 );\n                return false;\n            },\n    \n            _dropHandler: function( e ) {\n                var me = this,\n                    ruid = me.getRuid(),\n                    parentElem = me.elem.parent().get( 0 );\n    \n                // 只处理框内的。\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                me._getTansferFiles( e, function( results ) {\n                    me.trigger( 'drop', $.map( results, function( file ) {\n                        return new File( ruid, file );\n                    }) );\n                });\n    \n                me.dndOver = false;\n                me.elem.removeClass( prefix + 'over' );\n                return false;\n            },\n    \n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\n            _getTansferFiles: function( e, callback ) {\n                var results  = [],\n                    promises = [],\n                    items, files, dataTransfer, file, item, i, len, canAccessFolder;\n    \n                e = e.originalEvent || e;\n    \n                dataTransfer = e.dataTransfer;\n                items = dataTransfer.items;\n                files = dataTransfer.files;\n    \n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\n    \n                for ( i = 0, len = files.length; i < len; i++ ) {\n                    file = files[ i ];\n                    item = items && items[ i ];\n    \n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\n    \n                        promises.push( this._traverseDirectoryTree(\n                                item.webkitGetAsEntry(), results ) );\n                    } else {\n                        results.push( file );\n                    }\n                }\n    \n                Base.when.apply( Base, promises ).done(function() {\n    \n                    if ( !results.length ) {\n                        return;\n                    }\n    \n                    callback( results );\n                });\n            },\n    \n            _traverseDirectoryTree: function( entry, results ) {\n                var deferred = Base.Deferred(),\n                    me = this;\n    \n                if ( entry.isFile ) {\n                    entry.file(function( file ) {\n                        results.push( file );\n                        deferred.resolve();\n                    });\n                } else if ( entry.isDirectory ) {\n                    entry.createReader().readEntries(function( entries ) {\n                        var len = entries.length,\n                            promises = [],\n                            arr = [],    // 为了保证顺序。\n                            i;\n    \n                        for ( i = 0; i < len; i++ ) {\n                            promises.push( me._traverseDirectoryTree(\n                                    entries[ i ], arr ) );\n                        }\n    \n                        Base.when.apply( Base, promises ).then(function() {\n                            results.push.apply( results, arr );\n                            deferred.resolve();\n                        }, deferred.reject );\n                    });\n                }\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                var elem = this.elem;\n    \n                elem.off( 'dragenter', this.dragEnterHandler );\n                elem.off( 'dragover', this.dragEnterHandler );\n                elem.off( 'dragleave', this.dragLeaveHandler );\n                elem.off( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).off( 'dragover', this.dragOverHandler );\n                    $( document ).off( 'drop', this.dropHandler );\n                }\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/filepaste',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        return Html5Runtime.register( 'FilePaste', {\n            init: function() {\n                var opts = this.options,\n                    elem = this.elem = opts.container,\n                    accept = '.*',\n                    arr, i, len, item;\n    \n                // accetp的mimeTypes中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].mimeTypes;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = arr.join(',');\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\n                    }\n                }\n                this.accept = accept = new RegExp( accept, 'i' );\n                this.hander = Base.bindFn( this._pasteHander, this );\n                elem.on( 'paste', this.hander );\n            },\n    \n            _pasteHander: function( e ) {\n                var allowed = [],\n                    ruid = this.getRuid(),\n                    items, item, blob, i, len;\n    \n                e = e.originalEvent || e;\n                items = e.clipboardData.items;\n    \n                for ( i = 0, len = items.length; i < len; i++ ) {\n                    item = items[ i ];\n    \n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\n                        continue;\n                    }\n    \n                    allowed.push( new File( ruid, blob ) );\n                }\n    \n                if ( allowed.length ) {\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.trigger( 'paste', allowed );\n                }\n            },\n    \n            destroy: function() {\n                this.elem.off( 'paste', this.hander );\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    lable = $( document.createElement('label') ),\n                    input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler;\n    \n                input.attr( 'type', 'file' );\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                lable.on( 'click', function() {\n                    input.trigger('click');\n                });\n    \n                lable.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( lable );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                input.on( 'change', function( e ) {\n                    var fn = arguments.callee,\n                        clone;\n    \n                    me.files = e.target.files;\n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', fn )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                });\n    \n                lable.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger('complete');\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, 'image/jpeg',\n                                opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        canvas.getContext('2d').drawImage( img, x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                            iw * vertSquashRatio, ih * vertSquashRatio,\n                            x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview 只有html5实现的文件版本。\n     */\n    define('preset/html5only',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/image',\n        'runtime/html5/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/html5only'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/webuploader/webuploader.min.bak.js",
    "content": "/* WebUploader 0.1.2 */!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}},j=b(a,f,e);i(j),\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j:\"function\"==typeof define&&define.amd?define([],j):(c=a.WebUploader,a.WebUploader=j,a.WebUploader.noConflict=function(){a.WebUploader=c})}(this,function(a,b,c){return b(\"dollar-third\",[],function(){return a.jQuery||a.Zepto}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"0.1.2\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",getDimension:\"get-dimension\",addButton:\"add-btn\",getRuntimeType:\"get-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return{successNum:a.numOfSuccess,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1?!1:!0},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.parentNode.removeChild(this.__container),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/dnd\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},d.options,a),a.container=e(a.container),a.container.length&&c.call(this,\"DragAndDrop\")}var e=a.$;return d.options={accept:null,disableGlobalDnd:!1},a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})},destroy:function(){this.disconnectRuntime()}}),b.installTo(d.prototype),d}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return 1===a.nodeType&&b?!0:\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g={},h=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):g},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[];return e.each(h,function(c,d){b.push(new d(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,h,i,j,k=0,l=this._widgets,m=l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],h=f.invoke(b,d),h!==g&&(a.isPromise(h)?o.push(h):n.push(h));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return setTimeout(function(){b.resolve.apply(b,c)},1),b.promise()})[j](e||a.noop)):n[0]}}),b.register=d.register=function(b,c){var f,g={init:\"init\"};return 1===arguments.length?(c=b,c.responseMap=g):c.responseMap=e.extend(g,b),f=a.inherits(d,c),h.push(f),f},d}),b(\"widgets/filednd\",[\"base\",\"uploader\",\"lib/dnd\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.options.dnd=\"\",b.register({init:function(b){if(b.dnd&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{disableGlobalDnd:b.disableGlobalDnd,container:b.dnd,accept:b.accept});return e=new c(h),e.once(\"ready\",g.resolve),e.on(\"drop\",function(a){f.request(\"add-file\",[a])}),e.on(\"accept\",function(a){return f.owner.trigger(\"dndAccept\",a)}),e.init(),g.promise()}}})}),b(\"lib/filepaste\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},a),a.container=e(a.container||document.body),c.call(this,\"FilePaste\")}var e=a.$;return a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})},destroy:function(){this.exec(\"destroy\"),this.disconnectRuntime(),this.off()}}),b.installTo(d.prototype),d}),b(\"widgets/filepaste\",[\"base\",\"uploader\",\"lib/filepaste\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.register({init:function(b){if(b.paste&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{container:b.paste,accept:b.accept});return e=new c(h),e.once(\"ready\",g.resolve),e.on(\"paste\",function(a){f.owner.request(\"add-file\",[a])}),e.init(),g.promise()}}})}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,b.call(d,\"Blob\"),this.uid=c.uid||this.uid,this.type=c.type||\"\",this.size=c.size||0,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;b.apply(this,arguments),this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&this.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(this.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),!this.type&&~\"jpg,jpeg,png,gif,bmp\".indexOf(f)&&(this.type=\"image/\"+(\"jpg\"===f?\"jpeg\":f)),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||(new Date).toLocaleString()}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\"},b.inherits(c,{constructor:e,init:function(){var b=this,c=b.options,e=c.button;e.addClass(\"webuploader-pick\"),b.on(\"all\",function(a){var g;switch(a){case\"mouseenter\":e.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":e.removeClass(\"webuploader-pick-hover\");break;case\"change\":g=b.exec(\"getFiles\"),b.trigger(\"select\",f.map(g,function(a){return a=new d(b.getRuid(),a),a._refer=c.container,a}),c.container)}}),b.connectRuntime(c,function(){b.refresh(),b.exec(\"init\",c),b.trigger(\"ready\")}),f(a).on(\"resize\",function(){b.refresh()})},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b.outerWidth?b.outerWidth():b.width(),d=b.outerHeight?b.outerHeight():b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){this.runtime&&(this.exec(\"destroy\"),this.disconnectRuntime())}}),e}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({\"add-btn\":\"addButton\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\"},{init:function(a){return this.pickers=[],a.pick&&this.addButton(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addButton:function(b){var e,f,g,h=this,i=h.options,j=i.accept;if(b)return g=a.Deferred(),d.isPlainObject(b)||(b={id:b}),e=d.extend({},b,{accept:d.isPlainObject(j)?[j]:j,swf:i.swf,runtimeOrder:i.runtimeOrder}),f=new c(e),f.once(\"ready\",g.resolve),f.on(\"select\",function(a){h.owner.request(\"add-file\",[a])}),f.init(),this.pickers.push(f),g.promise()},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})}})}),b(\"lib/image\",[\"base\",\"runtime/client\",\"lib/blob\"],function(a,b,c){function d(a){this.options=e.extend({},d.options,a),b.call(this,\"Image\"),this.on(\"load\",function(){this._info=this.exec(\"info\"),this._meta=this.exec(\"meta\")})}var e=a.$;return d.options={quality:90,crop:!1,preserveHeaders:!0,allowMagnify:!0},a.inherits(b,{constructor:d,info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},loadFromBlob:function(a){var b=this,c=a.getRuid();this.connectRuntime(c,function(){b.exec(\"init\",b.options),b.exec(\"loadFromBlob\",a)})},resize:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"resize\"].concat(b))},getAsDataUrl:function(a){return this.exec(\"getAsDataUrl\",a)},getAsBlob:function(a){var b=this.exec(\"getAsBlob\",a);return new c(this.getRuid(),b)}}),d}),b(\"widgets/image\",[\"base\",\"uploader\",\"lib/image\",\"widgets/widget\"],function(a,b,c){var d,e=a.$;return d=function(a){var b=0,c=[],d=function(){for(var d;c.length&&a>b;)d=c.shift(),b+=d[0],d[1]()};return function(a,e,f){c.push([e,f]),a.once(\"destroy\",function(){b-=e,setTimeout(d,1)}),setTimeout(d,1)}}(5242880),e.extend(b.options,{thumb:{width:110,height:110,quality:70,allowMagnify:!0,crop:!0,preserveHeaders:!1,type:\"image/jpeg\"},compress:{width:1600,height:1600,quality:90,allowMagnify:!1,crop:!1,preserveHeaders:!0}}),b.register({\"make-thumb\":\"makeThumb\",\"before-send-file\":\"compressImage\"},{makeThumb:function(a,b,f,g){var h,i;return a=this.request(\"get-file\",a),a.type.match(/^image/)?(h=e.extend({},this.options.thumb),e.isPlainObject(f)&&(h=e.extend(h,f),f=null),f=f||h.width,g=g||h.height,i=new c(h),i.once(\"load\",function(){a._info=a._info||i.info(),a._meta=a._meta||i.meta(),i.resize(f,g)}),i.once(\"complete\",function(){b(!1,i.getAsDataUrl(h.type)),i.destroy()}),i.once(\"error\",function(){b(!0),i.destroy()}),void d(i,a.source.size,function(){a._info&&i.info(a._info),a._meta&&i.meta(a._meta),i.loadFromBlob(a.source)})):void b(!0)},compressImage:function(b){var d,f,g=this.options.compress||this.options.resize,h=g&&g.compressSize||307200;return b=this.request(\"get-file\",b),!g||!~\"image/jpeg,image/jpg\".indexOf(b.type)||b.size<h||b._compressed?void 0:(g=e.extend({},g),f=a.Deferred(),d=new c(g),f.always(function(){d.destroy(),d=null}),d.once(\"error\",f.reject),d.once(\"load\",function(){b._info=b._info||d.info(),b._meta=b._meta||d.meta(),d.resize(g.width,g.height)}),d.once(\"complete\",function(){var a,c;try{a=d.getAsBlob(g.type),c=b.size,a.size<c&&(b.source=a,b.size=a.size,b.trigger(\"resize\",a.size,c)),b._compressed=!0,f.resolve()}catch(e){f.resolve()}}),b._info&&d.info(b._info),b._meta&&d.meta(b._meta),d.loadFromBlob(b.source),f.promise())}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destory:function(){delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)})),a.setStatus(f.QUEUED)},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({\"sort-files\":\"sortFiles\",\"add-file\":\"addFiles\",\"get-file\":\"getFile\",\"fetch-file\":\"fetchFile\",\"get-stats\":\"getStats\",\"get-files\":\"getFiles\",\"remove-file\":\"removeFile\",retry:\"retry\",reset:\"reset\",\"accept-file\":\"acceptFile\"},{init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||a.size<6||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFiles:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),b.owner.trigger(\"filesQueued\",a),b.options.auto&&b.request(\"start-upload\")},getStats:function(){return this.stats},removeFile:function(a){var b=this;a=a.id?a:b.queue.getFile(a),a.setStatus(i.CANCELLED),b.owner.trigger(\"fileDequeued\",a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.queue=new c,this.stats=this.queue.stats}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({\"predict-runtime-type\":\"predictRuntmeType\"},{init:function(){if(!this.predictRuntmeType())throw Error(\"Runtime Error\")},predictRuntmeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){for(var c,d=[],e=a.source,f=e.size,g=b?Math.ceil(f/b):1,h=0,i=0;g>i;)c=Math.min(b,f-h),d.push({file:a,start:h,end:b?h+c:f,total:f,chunks:g,chunk:i++}),h+=c;return a.blocks=d.concat(),a.remaning=d.length,{file:a,has:function(){return!!d.length},fetch:function(){return d.shift()}}}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,threads:3,formData:null}),b.register({\"start-upload\":\"start\",\"stop-upload\":\"stop\",\"skip-file\":\"skipFile\",\"is-in-progress\":\"isInProgress\"},{init:function(){var b=this.owner;this.runing=!1,this.pool=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},start:function(){var b=this;f.each(b.request(\"get-files\",h.INVALID),function(){b.request(\"remove-file\",this)}),b.runing||(b.runing=!0,f.each(b.pool,function(a,c){var d=c.file;d.getStatus()===h.INTERRUPT&&(d.setStatus(h.PROGRESS),b._trigged=!1,c.transport&&c.transport.send())}),b._trigged=!1,b.owner.trigger(\"startUpload\"),a.nextTick(b.__tick))},stop:function(a){var b=this;b.runing!==!1&&(b.runing=!1,a&&f.each(b.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),b.owner.trigger(\"stopUpload\"))},isInProgress:function(){return!!this.runing},getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d.getStats().numOfQueue||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_nextBlock:function(){var a,b,c=this,d=c._act,f=c.options;return d&&d.has()&&d.file.getStatus()===h.PROGRESS?(f.prepareNextFile&&!c.pending.length&&c._prepareNextFile(),d.fetch()):c.runing?(!c.pending.length&&c.getStats().numOfQueue&&c._prepareNextFile(),a=c.pending.shift(),b=function(a){return a?(d=e(a,f.chunked?f.chunkSize:0),c._act=d,d.fetch()):null},g(a)?a[a.pipe?\"pipe\":\"then\"](b):b(a)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.QUEUED?(b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),c):b._finishFile(c)}),a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),c=d.request(\"before-send\",b,function(){e.getStatus()===h.PROGRESS?d._doSend(b):(d._popBlock(b),a.nextTick(d.__tick))}),c.fail(function(){1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d._popBlock(b),a.nextTick(d.__tick))})},_doSend:function(b){var c,e,g=this,i=g.owner,j=g.options,k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){var c=0,d=0;c=b.percentage=a,b.chunks>1&&(f.each(k.blocks,function(a,b){d+=(b.percentage||0)*(b.end-b.start)}),c=d/k.size),i.trigger(\"uploadProgress\",k,c||0)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){b.retried=b.retried||0,b.chunks>1&&~\"http,abort\".indexOf(a)&&b.retried<j.chunkRetry?(b.retried++,l.send()):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)}).always(function(){d.trigger(\"uploadComplete\",a)})}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({init:function(){var a=this;e.each(f,function(){this.call(a.owner)})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=b.fileNumLimit>>0,e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),c>=d?!1:!0}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"uploadFinished\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=b.fileSizeLimit>>0,e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),b?!1:!0}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"uploadFinished\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));return d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}))}),d}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destory;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destory=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;return d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/dnd\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){var d=a.$,e=\"webuploader-dnd-\";return b.register(\"DragAndDrop\",{init:function(){var b=this.elem=this.options.container;this.dragEnterHandler=a.bindFn(this._dragEnterHandler,this),this.dragOverHandler=a.bindFn(this._dragOverHandler,this),this.dragLeaveHandler=a.bindFn(this._dragLeaveHandler,this),this.dropHandler=a.bindFn(this._dropHandler,this),this.dndOver=!1,b.on(\"dragenter\",this.dragEnterHandler),b.on(\"dragover\",this.dragOverHandler),b.on(\"dragleave\",this.dragLeaveHandler),b.on(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).on(\"dragover\",this.dragOverHandler),d(document).on(\"drop\",this.dropHandler))\n},_dragEnterHandler:function(a){var b,c=this,d=c._denied||!1;return a=a.originalEvent||a,c.dndOver||(c.dndOver=!0,b=a.dataTransfer.items,b&&b.length&&(c._denied=d=!c.trigger(\"accept\",b)),c.elem.addClass(e+\"over\"),c.elem[d?\"addClass\":\"removeClass\"](e+\"denied\")),a.dataTransfer.dropEffect=d?\"none\":\"copy\",!1},_dragOverHandler:function(a){var b=this.elem.parent().get(0);return b&&!d.contains(b,a.currentTarget)?!1:(clearTimeout(this._leaveTimer),this._dragEnterHandler.call(this,a),!1)},_dragLeaveHandler:function(){var a,b=this;return a=function(){b.dndOver=!1,b.elem.removeClass(e+\"over \"+e+\"denied\")},clearTimeout(b._leaveTimer),b._leaveTimer=setTimeout(a,100),!1},_dropHandler:function(a){var b=this,f=b.getRuid(),g=b.elem.parent().get(0);return g&&!d.contains(g,a.currentTarget)?!1:(b._getTansferFiles(a,function(a){b.trigger(\"drop\",d.map(a,function(a){return new c(f,a)}))}),b.dndOver=!1,b.elem.removeClass(e+\"over\"),!1)},_getTansferFiles:function(b,c){var d,e,f,g,h,i,j,k,l=[],m=[];for(b=b.originalEvent||b,f=b.dataTransfer,d=f.items,e=f.files,k=!(!d||!d[0].webkitGetAsEntry),i=0,j=e.length;j>i;i++)g=e[i],h=d&&d[i],k&&h.webkitGetAsEntry().isDirectory?m.push(this._traverseDirectoryTree(h.webkitGetAsEntry(),l)):l.push(g);a.when.apply(a,m).done(function(){l.length&&c(l)})},_traverseDirectoryTree:function(b,c){var d=a.Deferred(),e=this;return b.isFile?b.file(function(a){c.push(a),d.resolve()}):b.isDirectory&&b.createReader().readEntries(function(b){var f,g=b.length,h=[],i=[];for(f=0;g>f;f++)h.push(e._traverseDirectoryTree(b[f],i));a.when.apply(a,h).then(function(){c.push.apply(c,i),d.resolve()},d.reject)}),d.promise()},destroy:function(){var a=this.elem;a.off(\"dragenter\",this.dragEnterHandler),a.off(\"dragover\",this.dragEnterHandler),a.off(\"dragleave\",this.dragLeaveHandler),a.off(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).off(\"dragover\",this.dragOverHandler),d(document).off(\"drop\",this.dropHandler))}})}),b(\"runtime/html5/filepaste\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){return b.register(\"FilePaste\",{init:function(){var b,c,d,e,f=this.options,g=this.elem=f.container,h=\".*\";if(f.accept){for(b=[],c=0,d=f.accept.length;d>c;c++)e=f.accept[c].mimeTypes,e&&b.push(e);b.length&&(h=b.join(\",\"),h=h.replace(/,/g,\"|\").replace(/\\*/g,\".*\"))}this.accept=h=new RegExp(h,\"i\"),this.hander=a.bindFn(this._pasteHander,this),g.on(\"paste\",this.hander)},_pasteHander:function(a){var b,d,e,f,g,h=[],i=this.getRuid();for(a=a.originalEvent||a,b=a.clipboardData.items,f=0,g=b.length;g>f;f++)d=b[f],\"file\"===d.kind&&(e=d.getAsFile())&&h.push(new c(i,e));h.length&&(a.preventDefault(),a.stopPropagation(),this.trigger(\"paste\",h))},destroy:function(){this.elem.off(\"paste\",this.hander)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f=this.getRuntime().getContainer(),g=this,h=g.owner,i=g.options,j=c(document.createElement(\"label\")),k=c(document.createElement(\"input\"));if(k.attr(\"type\",\"file\"),k.attr(\"name\",i.name),k.addClass(\"webuploader-element-invisible\"),j.on(\"click\",function(){k.trigger(\"click\")}),j.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),i.multiple&&k.attr(\"multiple\",\"multiple\"),i.accept&&i.accept.length>0){for(a=[],b=0,d=i.accept.length;d>b;b++)a.push(i.accept[b].mimeTypes);k.attr(\"accept\",a.join(\",\"))}f.append(k),f.append(j),e=function(a){h.trigger(a.type)},k.on(\"change\",function(a){var b,d=arguments.callee;g.files=a.target.files,b=this.cloneNode(!0),this.parentNode.replaceChild(b,this),k.off(),k=c(b).on(\"change\",d).on(\"mouseenter mouseleave\",e),h.trigger(\"change\")}),j.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){}})}),b(\"runtime/html5/util\",[\"base\"],function(b){var c=a.createObjectURL&&a||a.URL&&URL.revokeObjectURL&&URL||a.webkitURL,d=b.noop,e=d;return c&&(d=function(){return c.createObjectURL.apply(c,arguments)},e=function(){return c.revokeObjectURL.apply(c,arguments)}),{createObjectURL:d,revokeObjectURL:e,dataURL2Blob:function(a){var b,c,d,e,f,g;for(g=a.split(\",\"),b=~g[0].indexOf(\"base64\")?atob(g[1]):decodeURIComponent(g[1]),d=new ArrayBuffer(b.length),c=new Uint8Array(d),e=0;e<b.length;e++)c[e]=b.charCodeAt(e);return f=g[0].split(\":\")[1].split(\";\")[0],this.arrayBufferToBlob(d,f)},dataURL2ArrayBuffer:function(a){var b,c,d,e;for(e=a.split(\",\"),b=~e[0].indexOf(\"base64\")?atob(e[1]):decodeURIComponent(e[1]),c=new Uint8Array(b.length),d=0;d<b.length;d++)c[d]=b.charCodeAt(d);return c.buffer},arrayBufferToBlob:function(b,c){var d,e=a.BlobBuilder||a.WebKitBlobBuilder;return e?(d=new e,d.append(b),d.getBlob(c)):new Blob([b],c?{type:c}:{})},canvasToDataUrl:function(a,b,c){return a.toDataURL(b,c/100)},parseMeta:function(a,b){b(!1,{})},updateImageHead:function(a){return a}}}),b(\"runtime/html5/imagemeta\",[\"runtime/html5/util\"],function(a){var b;return b={parsers:{65505:[]},maxMetaDataSize:262144,parse:function(a,b){var c=this,d=new FileReader;d.onload=function(){b(!1,c._parse(this.result)),d=d.onload=d.onerror=null},d.onerror=function(a){b(a.message),d=d.onload=d.onerror=null},a=a.slice(0,c.maxMetaDataSize),d.readAsArrayBuffer(a.getSource())},_parse:function(a,c){if(!(a.byteLength<6)){var d,e,f,g,h=new DataView(a),i=2,j=h.byteLength-4,k=i,l={};if(65496===h.getUint16(0)){for(;j>i&&(d=h.getUint16(i),d>=65504&&65519>=d||65534===d)&&(e=h.getUint16(i+2)+2,!(i+e>h.byteLength));){if(f=b.parsers[d],!c&&f)for(g=0;g<f.length;g+=1)f[g].call(b,h,i,e,l);i+=e,k=i}k>6&&(l.imageHead=a.slice?a.slice(2,k):new Uint8Array(a).subarray(2,k))}return l}},updateImageHead:function(a,b){var c,d,e,f=this._parse(a,!0);return e=2,f.imageHead&&(e=2+f.imageHead.byteLength),d=a.slice?a.slice(e):new Uint8Array(a).subarray(e),c=new Uint8Array(b.byteLength+2+d.byteLength),c[0]=255,c[1]=216,c.set(new Uint8Array(b),2),c.set(new Uint8Array(d),b.byteLength+2),c.buffer}},a.parseMeta=function(){return b.parse.apply(b,arguments)},a.updateImageHead=function(){return b.updateImageHead.apply(b,arguments)},b}),b(\"runtime/html5/imagemeta/exif\",[\"base\",\"runtime/html5/imagemeta\"],function(a,b){var c={};return c.ExifMap=function(){return this},c.ExifMap.prototype.map={Orientation:274},c.ExifMap.prototype.get=function(a){return this[a]||this[this.map[a]]},c.exifTagTypes={1:{getValue:function(a,b){return a.getUint8(b)},size:1},2:{getValue:function(a,b){return String.fromCharCode(a.getUint8(b))},size:1,ascii:!0},3:{getValue:function(a,b,c){return a.getUint16(b,c)},size:2},4:{getValue:function(a,b,c){return a.getUint32(b,c)},size:4},5:{getValue:function(a,b,c){return a.getUint32(b,c)/a.getUint32(b+4,c)},size:8},9:{getValue:function(a,b,c){return a.getInt32(b,c)},size:4},10:{getValue:function(a,b,c){return a.getInt32(b,c)/a.getInt32(b+4,c)},size:8}},c.exifTagTypes[7]=c.exifTagTypes[1],c.getExifValue=function(b,d,e,f,g,h){var i,j,k,l,m,n,o=c.exifTagTypes[f];if(!o)return void a.log(\"Invalid Exif data: Invalid tag type.\");if(i=o.size*g,j=i>4?d+b.getUint32(e+8,h):e+8,j+i>b.byteLength)return void a.log(\"Invalid Exif data: Invalid data offset.\");if(1===g)return o.getValue(b,j,h);for(k=[],l=0;g>l;l+=1)k[l]=o.getValue(b,j+l*o.size,h);if(o.ascii){for(m=\"\",l=0;l<k.length&&(n=k[l],\"\\x00\"!==n);l+=1)m+=n;return m}return k},c.parseExifTag=function(a,b,d,e,f){var g=a.getUint16(d,e);f.exif[g]=c.getExifValue(a,b,d,a.getUint16(d+2,e),a.getUint32(d+4,e),e)},c.parseExifTags=function(b,c,d,e,f){var g,h,i;if(d+6>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory offset.\");if(g=b.getUint16(d,e),h=d+2+12*g,h+4>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory size.\");for(i=0;g>i;i+=1)this.parseExifTag(b,c,d+2+12*i,e,f);return b.getUint32(h,e)},c.parseExifData=function(b,d,e,f){var g,h,i=d+10;if(1165519206===b.getUint32(d+4)){if(i+8>b.byteLength)return void a.log(\"Invalid Exif data: Invalid segment size.\");if(0!==b.getUint16(d+8))return void a.log(\"Invalid Exif data: Missing byte alignment offset.\");switch(b.getUint16(i)){case 18761:g=!0;break;case 19789:g=!1;break;default:return void a.log(\"Invalid Exif data: Invalid byte alignment marker.\")}if(42!==b.getUint16(i+2,g))return void a.log(\"Invalid Exif data: Missing TIFF marker.\");h=b.getUint32(i+4,g),f.exif=new c.ExifMap,h=c.parseExifTags(b,i,i+h,g,f)}},b.parsers[65505].push(c.parseExifData),c}),b(\"runtime/html5/jpegencoder\",[],function(){function a(a){function b(a){for(var b=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],c=0;64>c;c++){var d=y((b[c]*a+50)/100);1>d?d=1:d>255&&(d=255),z[P[c]]=d}for(var e=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],f=0;64>f;f++){var g=y((e[f]*a+50)/100);1>g?g=1:g>255&&(g=255),A[P[f]]=g}for(var h=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],i=0,j=0;8>j;j++)for(var k=0;8>k;k++)B[i]=1/(z[P[i]]*h[j]*h[k]*8),C[i]=1/(A[P[i]]*h[j]*h[k]*8),i++}function c(a,b){for(var c=0,d=0,e=new Array,f=1;16>=f;f++){for(var g=1;g<=a[f];g++)e[b[d]]=[],e[b[d]][0]=c,e[b[d]][1]=f,d++,c++;c*=2}return e}function d(){t=c(Q,R),u=c(U,V),v=c(S,T),w=c(W,X)}function e(){for(var a=1,b=2,c=1;15>=c;c++){for(var d=a;b>d;d++)E[32767+d]=c,D[32767+d]=[],D[32767+d][1]=c,D[32767+d][0]=d;for(var e=-(b-1);-a>=e;e++)E[32767+e]=c,D[32767+e]=[],D[32767+e][1]=c,D[32767+e][0]=b-1+e;a<<=1,b<<=1}}function f(){for(var a=0;256>a;a++)O[a]=19595*a,O[a+256>>0]=38470*a,O[a+512>>0]=7471*a+32768,O[a+768>>0]=-11059*a,O[a+1024>>0]=-21709*a,O[a+1280>>0]=32768*a+8421375,O[a+1536>>0]=-27439*a,O[a+1792>>0]=-5329*a}function g(a){for(var b=a[0],c=a[1]-1;c>=0;)b&1<<c&&(I|=1<<J),c--,J--,0>J&&(255==I?(h(255),h(0)):h(I),J=7,I=0)}function h(a){H.push(N[a])}function i(a){h(a>>8&255),h(255&a)}function j(a,b){var c,d,e,f,g,h,i,j,k,l=0,m=8,n=64;for(k=0;m>k;++k){c=a[l],d=a[l+1],e=a[l+2],f=a[l+3],g=a[l+4],h=a[l+5],i=a[l+6],j=a[l+7];var o=c+j,p=c-j,q=d+i,r=d-i,s=e+h,t=e-h,u=f+g,v=f-g,w=o+u,x=o-u,y=q+s,z=q-s;a[l]=w+y,a[l+4]=w-y;var A=.707106781*(z+x);a[l+2]=x+A,a[l+6]=x-A,w=v+t,y=t+r,z=r+p;var B=.382683433*(w-z),C=.5411961*w+B,D=1.306562965*z+B,E=.707106781*y,G=p+E,H=p-E;a[l+5]=H+C,a[l+3]=H-C,a[l+1]=G+D,a[l+7]=G-D,l+=8}for(l=0,k=0;m>k;++k){c=a[l],d=a[l+8],e=a[l+16],f=a[l+24],g=a[l+32],h=a[l+40],i=a[l+48],j=a[l+56];var I=c+j,J=c-j,K=d+i,L=d-i,M=e+h,N=e-h,O=f+g,P=f-g,Q=I+O,R=I-O,S=K+M,T=K-M;a[l]=Q+S,a[l+32]=Q-S;var U=.707106781*(T+R);a[l+16]=R+U,a[l+48]=R-U,Q=P+N,S=N+L,T=L+J;var V=.382683433*(Q-T),W=.5411961*Q+V,X=1.306562965*T+V,Y=.707106781*S,Z=J+Y,$=J-Y;a[l+40]=$+W,a[l+24]=$-W,a[l+8]=Z+X,a[l+56]=Z-X,l++}var _;for(k=0;n>k;++k)_=a[k]*b[k],F[k]=_>0?_+.5|0:_-.5|0;return F}function k(){i(65504),i(16),h(74),h(70),h(73),h(70),h(0),h(1),h(1),h(0),i(1),i(1),h(0),h(0)}function l(a,b){i(65472),i(17),h(8),i(b),i(a),h(3),h(1),h(17),h(0),h(2),h(17),h(1),h(3),h(17),h(1)}function m(){i(65499),i(132),h(0);for(var a=0;64>a;a++)h(z[a]);h(1);for(var b=0;64>b;b++)h(A[b])}function n(){i(65476),i(418),h(0);for(var a=0;16>a;a++)h(Q[a+1]);for(var b=0;11>=b;b++)h(R[b]);h(16);for(var c=0;16>c;c++)h(S[c+1]);for(var d=0;161>=d;d++)h(T[d]);h(1);for(var e=0;16>e;e++)h(U[e+1]);for(var f=0;11>=f;f++)h(V[f]);h(17);for(var g=0;16>g;g++)h(W[g+1]);for(var j=0;161>=j;j++)h(X[j])}function o(){i(65498),i(12),h(3),h(1),h(0),h(2),h(17),h(3),h(17),h(0),h(63),h(0)}function p(a,b,c,d,e){for(var f,h=e[0],i=e[240],k=16,l=63,m=64,n=j(a,b),o=0;m>o;++o)G[P[o]]=n[o];var p=G[0]-c;c=G[0],0==p?g(d[0]):(f=32767+p,g(d[E[f]]),g(D[f]));for(var q=63;q>0&&0==G[q];q--);if(0==q)return g(h),c;for(var r,s=1;q>=s;){for(var t=s;0==G[s]&&q>=s;++s);var u=s-t;if(u>=k){r=u>>4;for(var v=1;r>=v;++v)g(i);u=15&u}f=32767+G[s],g(e[(u<<4)+E[f]]),g(D[f]),s++}return q!=l&&g(h),c}function q(){for(var a=String.fromCharCode,b=0;256>b;b++)N[b]=a(b)}function r(a){if(0>=a&&(a=1),a>100&&(a=100),x!=a){var c=0;c=Math.floor(50>a?5e3/a:200-2*a),b(c),x=a}}function s(){a||(a=50),q(),d(),e(),f(),r(a)}var t,u,v,w,x,y=(Math.round,Math.floor),z=new Array(64),A=new Array(64),B=new Array(64),C=new Array(64),D=new Array(65535),E=new Array(65535),F=new Array(64),G=new Array(64),H=[],I=0,J=7,K=new Array(64),L=new Array(64),M=new Array(64),N=new Array(256),O=new Array(2048),P=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Q=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],R=[0,1,2,3,4,5,6,7,8,9,10,11],S=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],T=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],U=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],V=[0,1,2,3,4,5,6,7,8,9,10,11],W=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],X=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(a,b){b&&r(b),H=new Array,I=0,J=7,i(65496),k(),m(),l(a.width,a.height),n(),o();var c=0,d=0,e=0;I=0,J=7,this.encode.displayName=\"_encode_\";for(var f,h,j,q,s,x,y,z,A,D=a.data,E=a.width,F=a.height,G=4*E,N=0;F>N;){for(f=0;G>f;){for(s=G*N+f,x=s,y=-1,z=0,A=0;64>A;A++)z=A>>3,y=4*(7&A),x=s+z*G+y,N+z>=F&&(x-=G*(N+1+z-F)),f+y>=G&&(x-=f+y-G+4),h=D[x++],j=D[x++],q=D[x++],K[A]=(O[h]+O[j+256>>0]+O[q+512>>0]>>16)-128,L[A]=(O[h+768>>0]+O[j+1024>>0]+O[q+1280>>0]>>16)-128,M[A]=(O[h+1280>>0]+O[j+1536>>0]+O[q+1792>>0]>>16)-128;c=p(K,B,c,t,v),d=p(L,C,d,u,w),e=p(M,C,e,u,w),f+=32}N+=8}if(J>=0){var P=[];P[1]=J+1,P[0]=(1<<J+1)-1,g(P)}i(65497);var Q=\"data:image/jpeg;base64,\"+btoa(H.join(\"\"));return H=[],Q},s()}return a.encode=function(b,c){var d=new a(c);return d.encode(b)},a}),b(\"runtime/html5/androidpatch\",[\"runtime/html5/util\",\"runtime/html5/jpegencoder\",\"base\"],function(a,b,c){var d,e=a.canvasToDataUrl;a.canvasToDataUrl=function(a,f,g){var h,i,j,k,l;return c.os.android?(\"image/jpeg\"===f&&\"undefined\"==typeof d&&(k=e.apply(null,arguments),l=k.split(\",\"),k=~l[0].indexOf(\"base64\")?atob(l[1]):decodeURIComponent(l[1]),k=k.substring(0,2),d=255===k.charCodeAt(0)&&216===k.charCodeAt(1)),\"image/jpeg\"!==f||d?e.apply(null,arguments):(i=a.width,j=a.height,h=a.getContext(\"2d\"),b.encode(h.getImageData(0,0,i,j),g))):e.apply(null,arguments)}}),b(\"runtime/html5/image\",[\"base\",\"runtime/html5/runtime\",\"runtime/html5/util\"],function(a,b,c){var d=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\";return b.register(\"Image\",{modified:!1,init:function(){var a=this,b=new Image;b.onload=function(){a._info={type:a.type,width:this.width,height:this.height},a._metas||\"image/jpeg\"!==a.type?a.owner.trigger(\"load\"):c.parseMeta(a._blob,function(b,c){a._metas=c,a.owner.trigger(\"load\")})},b.onerror=function(){a.owner.trigger(\"error\")},a._img=b},loadFromBlob:function(a){var b=this,d=b._img;b._blob=a,b.type=a.type,d.src=c.createObjectURL(a.getSource()),b.owner.once(\"load\",function(){c.revokeObjectURL(d.src)})},resize:function(a,b){var c=this._canvas||(this._canvas=document.createElement(\"canvas\"));this._resize(this._img,c,a,b),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\")},getAsBlob:function(a){var b,d=this._blob,e=this.options;if(a=a||this.type,this.modified||this.type!==a){if(b=this._canvas,\"image/jpeg\"===a){if(d=c.canvasToDataUrl(b,\"image/jpeg\",e.quality),e.preserveHeaders&&this._metas&&this._metas.imageHead)return d=c.dataURL2ArrayBuffer(d),d=c.updateImageHead(d,this._metas.imageHead),d=c.arrayBufferToBlob(d,a)}else d=c.canvasToDataUrl(b,a);d=c.dataURL2Blob(d)}return d},getAsDataUrl:function(a){var b=this.options;return a=a||this.type,\"image/jpeg\"===a?c.canvasToDataUrl(this._canvas,a,b.quality):this._canvas.toDataURL(a)},getOrientation:function(){return this._metas&&this._metas.exif&&this._metas.exif.get(\"Orientation\")||1},info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},destroy:function(){var a=this._canvas;this._img.onload=null,a&&(a.getContext(\"2d\").clearRect(0,0,a.width,a.height),a.width=a.height=0,this._canvas=null),this._img.src=d,this._img=this._blob=null},_resize:function(a,b,c,d){var e,f,g,h,i,j=this.options,k=a.width,l=a.height,m=this.getOrientation();~[5,6,7,8].indexOf(m)&&(c^=d,d^=c,c^=d),e=Math[j.crop?\"max\":\"min\"](c/k,d/l),j.allowMagnify||(e=Math.min(1,e)),f=k*e,g=l*e,j.crop?(b.width=c,b.height=d):(b.width=f,b.height=g),h=(b.width-f)/2,i=(b.height-g)/2,j.preserveHeaders||this._rotate2Orientaion(b,m),this._renderImageToCanvas(b,a,h,i,f,g)},_rotate2Orientaion:function(a,b){var c=a.width,d=a.height,e=a.getContext(\"2d\");switch(b){case 5:case 6:case 7:case 8:a.width=d,a.height=c}switch(b){case 2:e.translate(c,0),e.scale(-1,1);break;case 3:e.translate(c,d),e.rotate(Math.PI);break;case 4:e.translate(0,d),e.scale(1,-1);break;case 5:e.rotate(.5*Math.PI),e.scale(1,-1);break;case 6:e.rotate(.5*Math.PI),e.translate(0,-d);break;case 7:e.rotate(.5*Math.PI),e.translate(c,-d),e.scale(-1,1);break;case 8:e.rotate(-.5*Math.PI),e.translate(-c,0)}},_renderImageToCanvas:function(){function b(a,b,c){var d,e,f,g=document.createElement(\"canvas\"),h=g.getContext(\"2d\"),i=0,j=c,k=c;for(g.width=1,g.height=c,h.drawImage(a,0,0),d=h.getImageData(0,0,1,c).data;k>i;)e=d[4*(k-1)+3],0===e?j=k:i=k,k=j+i>>1;return f=k/c,0===f?1:f}function c(a){var b,c,d=a.naturalWidth,e=a.naturalHeight;return d*e>1048576?(b=document.createElement(\"canvas\"),b.width=b.height=1,c=b.getContext(\"2d\"),c.drawImage(a,-d+1,0),0===c.getImageData(0,0,1,1).data[3]):!1}return a.os.ios?a.os.ios>=7?function(a,c,d,e,f,g){var h=c.naturalWidth,i=c.naturalHeight,j=b(c,h,i);return a.getContext(\"2d\").drawImage(c,0,0,h*j,i*j,d,e,f,g)}:function(a,d,e,f,g,h){var i,j,k,l,m,n,o,p=d.naturalWidth,q=d.naturalHeight,r=a.getContext(\"2d\"),s=c(d),t=\"image/jpeg\"===this.type,u=1024,v=0,w=0;for(s&&(p/=2,q/=2),r.save(),i=document.createElement(\"canvas\"),i.width=i.height=u,j=i.getContext(\"2d\"),k=t?b(d,p,q):1,l=Math.ceil(u*g/p),m=Math.ceil(u*h/q/k);q>v;){for(n=0,o=0;p>n;)j.clearRect(0,0,u,u),j.drawImage(d,-n,-v),r.drawImage(i,0,0,u,u,e+o,f+w,l,m),n+=u,o+=l;v+=u,w+=m}r.restore(),i=j=null}:function(a,b,c,d,e,f){a.getContext(\"2d\").drawImage(b,c,d,e,f)}}()})}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData),c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){return 4===b.readyState?(b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status,b.status>=200&&b.status<300?(a._response=b.responseText,a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a.trigger(\"error\",\"server\")):a.trigger(\"error\",a._status?\"http\":\"abort\")):void 0},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"runtime/flash/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a;try{a=navigator.plugins[\"Shockwave Flash\"],a=a.description}catch(b){try{a=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\").GetVariable(\"$version\")}catch(c){a=\"0.0\"}}return a=a.match(/\\d+/g),parseFloat(a[0]+\".\"+a[1],10)}function f(){function d(a,b){var c,d,e=a.type||a;c=e.split(\"::\"),d=c[0],e=c[1],\"Ready\"===e&&d===j.uid?j.trigger(\"ready\"):f[d]&&f[d].trigger(e.toLowerCase(),a,b)}var e={},f={},g=this.destory,j=this,k=b.guid(\"webuploader_\");c.apply(j,arguments),j.type=h,j.exec=function(a,c){var d,g=this,h=g.uid,k=b.slice(arguments,2);return f[h]=g,i[a]&&(e[h]||(e[h]=new i[a](g,j)),d=e[h],d[c])?d[c].apply(d,k):j.flashExec.apply(g,arguments)},a[k]=function(){var a=arguments;setTimeout(function(){d.apply(null,a)},1)},this.jsreciver=k,this.destory=function(){return g&&g.apply(this,arguments)},this.flashExec=function(a,c){var d=j.getFlash(),e=b.slice(arguments,2);return d.exec(this.uid,a,c,e)}}var g=b.$,h=\"flash\",i={};return b.inherits(c,{constructor:f,init:function(){var a,c=this.getContainer(),d=this.options;c.css({position:\"absolute\",top:\"-8px\",left:\"-8px\",width:\"9px\",height:\"9px\",overflow:\"hidden\"}),a='<object id=\"'+this.uid+'\" type=\"application/x-shockwave-flash\" data=\"'+d.swf+'\" ',b.browser.ie&&(a+='classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" '),a+='width=\"100%\" height=\"100%\" style=\"outline:0\"><param name=\"movie\" value=\"'+d.swf+'\" /><param name=\"flashvars\" value=\"uid='+this.uid+\"&jsreciver=\"+this.jsreciver+'\" /><param name=\"wmode\" value=\"transparent\" /><param name=\"allowscriptaccess\" value=\"always\" /></object>',c.html(a)},getFlash:function(){return this._flash?this._flash:(this._flash=g(\"#\"+this.uid).get(0),this._flash)}}),f.register=function(a,c){return c=i[a]=b.inherits(d,g.extend({flashExec:function(){var a=this.owner,b=this.getRuntime();return b.flashExec.apply(a,arguments)}},c))},e()>=11.4&&c.addRuntime(h,f),f}),b(\"runtime/flash/filepicker\",[\"base\",\"runtime/flash/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(a){var b,d,e=c.extend({},a);for(b=e.accept&&e.accept.length,d=0;b>d;d++)e.accept[d].title||(e.accept[d].title=\"Files\");delete e.button,delete e.container,this.flashExec(\"FilePicker\",\"init\",e)},destroy:function(){}})}),b(\"runtime/flash/image\",[\"runtime/flash/runtime\"],function(a){return a.register(\"Image\",{loadFromBlob:function(a){var b=this.owner;b.info()&&this.flashExec(\"Image\",\"info\",b.info()),b.meta()&&this.flashExec(\"Image\",\"meta\",b.meta()),this.flashExec(\"Image\",\"loadFromBlob\",a.uid)}})}),b(\"runtime/flash/transport\",[\"base\",\"runtime/flash/runtime\",\"runtime/client\"],function(a,b,c){var d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null,this._responseJson=null},send:function(){var a,b=this.owner,c=this.options,e=this._initAjax(),f=b._blob,g=c.server;e.connectRuntime(f.ruid),c.sendAsBinary?(g+=(/\\?/.test(g)?\"&\":\"?\")+d.param(b._formData),a=f.uid):(d.each(b._formData,function(a,b){e.exec(\"append\",a,b)}),e.exec(\"appendBlob\",c.fileVal,f.uid,c.filename||b._formData.name||\"\")),this._setRequestHeader(e,c.headers),e.exec(\"send\",{method:c.method,url:g},a)},getStatus:function(){return this._status},getResponse:function(){return this._response},getResponseAsJson:function(){return this._responseJson},abort:function(){var a=this._xhr;a&&(a.exec(\"abort\"),a.destroy(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var a=this,b=new c(\"XMLHttpRequest\");return b.on(\"uploadprogress progress\",function(b){return a.trigger(\"progress\",b.loaded/b.total)}),b.on(\"load\",function(){var c=b.exec(\"getStatus\"),d=\"\";return b.off(),a._xhr=null,c>=200&&300>c?(a._response=b.exec(\"getResponse\"),a._responseJson=b.exec(\"getResponseAsJson\")):c>=500&&600>c?(a._response=b.exec(\"getResponse\"),a._responseJson=b.exec(\"getResponseAsJson\"),d=\"server\"):d=\"http\",b.destroy(),b=null,d?a.trigger(\"error\",d):a.trigger(\"load\")}),b.on(\"error\",function(){b.off(),a._xhr=null,a.trigger(\"error\",\"http\")}),a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.exec(\"setRequestHeader\",b,c)})}})}),b(\"preset/all\",[\"base\",\"widgets/filednd\",\"widgets/filepaste\",\"widgets/filepicker\",\"widgets/image\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"runtime/html5/blob\",\"runtime/html5/dnd\",\"runtime/html5/filepaste\",\"runtime/html5/filepicker\",\"runtime/html5/imagemeta/exif\",\"runtime/html5/androidpatch\",\"runtime/html5/image\",\"runtime/html5/transport\",\"runtime/flash/filepicker\",\"runtime/flash/image\",\"runtime/flash/transport\"],function(a){return a}),b(\"webuploader\",[\"preset/all\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/webuploader/webuploader.withoutimage.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.disconnectRuntime();\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.exec('destroy');\n                this.disconnectRuntime();\n                this.off();\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            init: function() {\n                var me = this;\n                $.each( validators, function() {\n                    this.call( me.owner );\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileNumLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileSizeLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {int} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destory = this.destory;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/dnd',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        var $ = Base.$,\n            prefix = 'webuploader-dnd-';\n    \n        return Html5Runtime.register( 'DragAndDrop', {\n            init: function() {\n                var elem = this.elem = this.options.container;\n    \n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\n                this.dndOver = false;\n    \n                elem.on( 'dragenter', this.dragEnterHandler );\n                elem.on( 'dragover', this.dragOverHandler );\n                elem.on( 'dragleave', this.dragLeaveHandler );\n                elem.on( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).on( 'dragover', this.dragOverHandler );\n                    $( document ).on( 'drop', this.dropHandler );\n                }\n            },\n    \n            _dragEnterHandler: function( e ) {\n                var me = this,\n                    denied = me._denied || false,\n                    items;\n    \n                e = e.originalEvent || e;\n    \n                if ( !me.dndOver ) {\n                    me.dndOver = true;\n    \n                    // 注意只有 chrome 支持。\n                    items = e.dataTransfer.items;\n    \n                    if ( items && items.length ) {\n                        me._denied = denied = !me.trigger( 'accept', items );\n                    }\n    \n                    me.elem.addClass( prefix + 'over' );\n                    me.elem[ denied ? 'addClass' :\n                            'removeClass' ]( prefix + 'denied' );\n                }\n    \n    \n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\n    \n                return false;\n            },\n    \n            _dragOverHandler: function( e ) {\n                // 只处理框内的。\n                var parentElem = this.elem.parent().get( 0 );\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                clearTimeout( this._leaveTimer );\n                this._dragEnterHandler.call( this, e );\n    \n                return false;\n            },\n    \n            _dragLeaveHandler: function() {\n                var me = this,\n                    handler;\n    \n                handler = function() {\n                    me.dndOver = false;\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\n                };\n    \n                clearTimeout( me._leaveTimer );\n                me._leaveTimer = setTimeout( handler, 100 );\n                return false;\n            },\n    \n            _dropHandler: function( e ) {\n                var me = this,\n                    ruid = me.getRuid(),\n                    parentElem = me.elem.parent().get( 0 );\n    \n                // 只处理框内的。\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                me._getTansferFiles( e, function( results ) {\n                    me.trigger( 'drop', $.map( results, function( file ) {\n                        return new File( ruid, file );\n                    }) );\n                });\n    \n                me.dndOver = false;\n                me.elem.removeClass( prefix + 'over' );\n                return false;\n            },\n    \n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\n            _getTansferFiles: function( e, callback ) {\n                var results  = [],\n                    promises = [],\n                    items, files, dataTransfer, file, item, i, len, canAccessFolder;\n    \n                e = e.originalEvent || e;\n    \n                dataTransfer = e.dataTransfer;\n                items = dataTransfer.items;\n                files = dataTransfer.files;\n    \n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\n    \n                for ( i = 0, len = files.length; i < len; i++ ) {\n                    file = files[ i ];\n                    item = items && items[ i ];\n    \n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\n    \n                        promises.push( this._traverseDirectoryTree(\n                                item.webkitGetAsEntry(), results ) );\n                    } else {\n                        results.push( file );\n                    }\n                }\n    \n                Base.when.apply( Base, promises ).done(function() {\n    \n                    if ( !results.length ) {\n                        return;\n                    }\n    \n                    callback( results );\n                });\n            },\n    \n            _traverseDirectoryTree: function( entry, results ) {\n                var deferred = Base.Deferred(),\n                    me = this;\n    \n                if ( entry.isFile ) {\n                    entry.file(function( file ) {\n                        results.push( file );\n                        deferred.resolve();\n                    });\n                } else if ( entry.isDirectory ) {\n                    entry.createReader().readEntries(function( entries ) {\n                        var len = entries.length,\n                            promises = [],\n                            arr = [],    // 为了保证顺序。\n                            i;\n    \n                        for ( i = 0; i < len; i++ ) {\n                            promises.push( me._traverseDirectoryTree(\n                                    entries[ i ], arr ) );\n                        }\n    \n                        Base.when.apply( Base, promises ).then(function() {\n                            results.push.apply( results, arr );\n                            deferred.resolve();\n                        }, deferred.reject );\n                    });\n                }\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                var elem = this.elem;\n    \n                elem.off( 'dragenter', this.dragEnterHandler );\n                elem.off( 'dragover', this.dragEnterHandler );\n                elem.off( 'dragleave', this.dragLeaveHandler );\n                elem.off( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).off( 'dragover', this.dragOverHandler );\n                    $( document ).off( 'drop', this.dropHandler );\n                }\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/filepaste',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        return Html5Runtime.register( 'FilePaste', {\n            init: function() {\n                var opts = this.options,\n                    elem = this.elem = opts.container,\n                    accept = '.*',\n                    arr, i, len, item;\n    \n                // accetp的mimeTypes中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].mimeTypes;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = arr.join(',');\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\n                    }\n                }\n                this.accept = accept = new RegExp( accept, 'i' );\n                this.hander = Base.bindFn( this._pasteHander, this );\n                elem.on( 'paste', this.hander );\n            },\n    \n            _pasteHander: function( e ) {\n                var allowed = [],\n                    ruid = this.getRuid(),\n                    items, item, blob, i, len;\n    \n                e = e.originalEvent || e;\n                items = e.clipboardData.items;\n    \n                for ( i = 0, len = items.length; i < len; i++ ) {\n                    item = items[ i ];\n    \n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\n                        continue;\n                    }\n    \n                    allowed.push( new File( ruid, blob ) );\n                }\n    \n                if ( allowed.length ) {\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.trigger( 'paste', allowed );\n                }\n            },\n    \n            destroy: function() {\n                this.elem.off( 'paste', this.hander );\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    lable = $( document.createElement('label') ),\n                    input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler;\n    \n                input.attr( 'type', 'file' );\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                lable.on( 'click', function() {\n                    input.trigger('click');\n                });\n    \n                lable.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( lable );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                input.on( 'change', function( e ) {\n                    var fn = arguments.callee,\n                        clone;\n    \n                    me.files = e.target.files;\n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', fn )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                });\n    \n                lable.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destory = this.destory,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    return me.trigger( 'progress', e.loaded / e.total );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        err = '';\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                    } else if ( status >= 500 && status < 600 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 没有图像处理的版本。\n     */\n    define('preset/withoutimage',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/transport',\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/withoutimage'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "api/static/libs/js/UEditor/third-party/zeroclipboard/ZeroClipboard.js",
    "content": "/*!\n* ZeroClipboard\n* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n* Copyright (c) 2014 Jon Rohan, James M. Greene\n* Licensed MIT\n* http://zeroclipboard.org/\n* v2.0.0-beta.5\n*/\n(function(window) {\n  \"use strict\";\n  var _currentElement;\n  var _flashState = {\n    bridge: null,\n    version: \"0.0.0\",\n    pluginType: \"unknown\",\n    disabled: null,\n    outdated: null,\n    unavailable: null,\n    deactivated: null,\n    overdue: null,\n    ready: null\n  };\n  var _clipData = {};\n  var _clipDataFormatMap = null;\n  var _clientIdCounter = 0;\n  var _clientMeta = {};\n  var _elementIdCounter = 0;\n  var _elementMeta = {};\n  var _swfPath = function() {\n    var i, jsDir, tmpJsPath, jsPath, swfPath = \"ZeroClipboard.swf\";\n    if (!(document.currentScript && (jsPath = document.currentScript.src))) {\n      var scripts = document.getElementsByTagName(\"script\");\n      if (\"readyState\" in scripts[0]) {\n        for (i = scripts.length; i--; ) {\n          if (scripts[i].readyState === \"interactive\" && (jsPath = scripts[i].src)) {\n            break;\n          }\n        }\n      } else if (document.readyState === \"loading\") {\n        jsPath = scripts[scripts.length - 1].src;\n      } else {\n        for (i = scripts.length; i--; ) {\n          tmpJsPath = scripts[i].src;\n          if (!tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n          tmpJsPath = tmpJsPath.split(\"#\")[0].split(\"?\")[0];\n          tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\"/\") + 1);\n          if (jsDir == null) {\n            jsDir = tmpJsPath;\n          } else if (jsDir !== tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n        }\n        if (jsDir !== null) {\n          jsPath = jsDir;\n        }\n      }\n    }\n    if (jsPath) {\n      jsPath = jsPath.split(\"#\")[0].split(\"?\")[0];\n      swfPath = jsPath.slice(0, jsPath.lastIndexOf(\"/\") + 1) + swfPath;\n    }\n    return swfPath;\n  }();\n  var _camelizeCssPropName = function() {\n    var matcherRegex = /\\-([a-z])/g, replacerFn = function(match, group) {\n      return group.toUpperCase();\n    };\n    return function(prop) {\n      return prop.replace(matcherRegex, replacerFn);\n    };\n  }();\n  var _getStyle = function(el, prop) {\n    var value, camelProp, tagName;\n    if (window.getComputedStyle) {\n      value = window.getComputedStyle(el, null).getPropertyValue(prop);\n    } else {\n      camelProp = _camelizeCssPropName(prop);\n      if (el.currentStyle) {\n        value = el.currentStyle[camelProp];\n      } else {\n        value = el.style[camelProp];\n      }\n    }\n    if (prop === \"cursor\") {\n      if (!value || value === \"auto\") {\n        tagName = el.tagName.toLowerCase();\n        if (tagName === \"a\") {\n          return \"pointer\";\n        }\n      }\n    }\n    return value;\n  };\n  var _elementMouseOver = function(event) {\n    if (!event) {\n      event = window.event;\n    }\n    var target;\n    if (this !== window) {\n      target = this;\n    } else if (event.target) {\n      target = event.target;\n    } else if (event.srcElement) {\n      target = event.srcElement;\n    }\n    ZeroClipboard.activate(target);\n  };\n  var _addEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.addEventListener) {\n      element.addEventListener(method, func, false);\n    } else if (element.attachEvent) {\n      element.attachEvent(\"on\" + method, func);\n    }\n  };\n  var _removeEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.removeEventListener) {\n      element.removeEventListener(method, func, false);\n    } else if (element.detachEvent) {\n      element.detachEvent(\"on\" + method, func);\n    }\n  };\n  var _addClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (!element.classList.contains(value)) {\n        element.classList.add(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\") {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1) {\n        if (!element.className) {\n          element.className = value;\n        } else {\n          var className = \" \" + element.className + \" \", setClass = element.className;\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n              setClass += \" \" + classNames[c];\n            }\n          }\n          element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n        }\n      }\n    }\n    return element;\n  };\n  var _removeClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (element.classList.contains(value)) {\n        element.classList.remove(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\" || value === undefined) {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1 && element.className) {\n        if (value) {\n          var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            className = className.replace(\" \" + classNames[c] + \" \", \" \");\n          }\n          element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n        } else {\n          element.className = \"\";\n        }\n      }\n    }\n    return element;\n  };\n  var _getZoomFactor = function() {\n    var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n    if (typeof document.body.getBoundingClientRect === \"function\") {\n      rect = document.body.getBoundingClientRect();\n      physicalWidth = rect.right - rect.left;\n      logicalWidth = document.body.offsetWidth;\n      zoomFactor = Math.round(physicalWidth / logicalWidth * 100) / 100;\n    }\n    return zoomFactor;\n  };\n  var _getDOMObjectPosition = function(obj, defaultZIndex) {\n    var info = {\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0,\n      zIndex: _getSafeZIndex(defaultZIndex) - 1\n    };\n    if (obj.getBoundingClientRect) {\n      var rect = obj.getBoundingClientRect();\n      var pageXOffset, pageYOffset, zoomFactor;\n      if (\"pageXOffset\" in window && \"pageYOffset\" in window) {\n        pageXOffset = window.pageXOffset;\n        pageYOffset = window.pageYOffset;\n      } else {\n        zoomFactor = _getZoomFactor();\n        pageXOffset = Math.round(document.documentElement.scrollLeft / zoomFactor);\n        pageYOffset = Math.round(document.documentElement.scrollTop / zoomFactor);\n      }\n      var leftBorderWidth = document.documentElement.clientLeft || 0;\n      var topBorderWidth = document.documentElement.clientTop || 0;\n      info.left = rect.left + pageXOffset - leftBorderWidth;\n      info.top = rect.top + pageYOffset - topBorderWidth;\n      info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n      info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n    }\n    return info;\n  };\n  var _cacheBust = function(path, options) {\n    var cacheBust = options == null || options && options.cacheBust === true;\n    if (cacheBust) {\n      return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + new Date().getTime();\n    } else {\n      return \"\";\n    }\n  };\n  var _vars = function(options) {\n    var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n    if (options.trustedDomains) {\n      if (typeof options.trustedDomains === \"string\") {\n        domains = [ options.trustedDomains ];\n      } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n        domains = options.trustedDomains;\n      }\n    }\n    if (domains && domains.length) {\n      for (i = 0, len = domains.length; i < len; i++) {\n        if (domains.hasOwnProperty(i) && domains[i] && typeof domains[i] === \"string\") {\n          domain = _extractDomain(domains[i]);\n          if (!domain) {\n            continue;\n          }\n          if (domain === \"*\") {\n            trustedOriginsExpanded = [ domain ];\n            break;\n          }\n          trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, window.location.protocol + \"//\" + domain ]);\n        }\n      }\n    }\n    if (trustedOriginsExpanded.length) {\n      str += \"trustedOrigins=\" + encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n    }\n    if (options.forceEnhancedClipboard === true) {\n      str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n    }\n    return str;\n  };\n  var _inArray = function(elem, array, fromIndex) {\n    if (typeof array.indexOf === \"function\") {\n      return array.indexOf(elem, fromIndex);\n    }\n    var i, len = array.length;\n    if (typeof fromIndex === \"undefined\") {\n      fromIndex = 0;\n    } else if (fromIndex < 0) {\n      fromIndex = len + fromIndex;\n    }\n    for (i = fromIndex; i < len; i++) {\n      if (array.hasOwnProperty(i) && array[i] === elem) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var _prepClip = function(elements) {\n    if (typeof elements === \"string\") {\n      throw new TypeError(\"ZeroClipboard doesn't accept query strings.\");\n    }\n    return typeof elements.length !== \"number\" ? [ elements ] : elements;\n  };\n  var _dispatchCallback = function(func, context, args, async) {\n    if (async) {\n      window.setTimeout(function() {\n        func.apply(context, args);\n      }, 0);\n    } else {\n      func.apply(context, args);\n    }\n  };\n  var _getSafeZIndex = function(val) {\n    var zIndex, tmp;\n    if (val) {\n      if (typeof val === \"number\" && val > 0) {\n        zIndex = val;\n      } else if (typeof val === \"string\" && (tmp = parseInt(val, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    if (!zIndex) {\n      if (typeof _globalConfig.zIndex === \"number\" && _globalConfig.zIndex > 0) {\n        zIndex = _globalConfig.zIndex;\n      } else if (typeof _globalConfig.zIndex === \"string\" && (tmp = parseInt(_globalConfig.zIndex, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    return zIndex || 0;\n  };\n  var _extend = function() {\n    var i, len, arg, prop, src, copy, target = arguments[0] || {};\n    for (i = 1, len = arguments.length; i < len; i++) {\n      if ((arg = arguments[i]) != null) {\n        for (prop in arg) {\n          if (arg.hasOwnProperty(prop)) {\n            src = target[prop];\n            copy = arg[prop];\n            if (target === copy) {\n              continue;\n            }\n            if (copy !== undefined) {\n              target[prop] = copy;\n            }\n          }\n        }\n      }\n    }\n    return target;\n  };\n  var _extractDomain = function(originOrUrl) {\n    if (originOrUrl == null || originOrUrl === \"\") {\n      return null;\n    }\n    originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n    if (originOrUrl === \"\") {\n      return null;\n    }\n    var protocolIndex = originOrUrl.indexOf(\"//\");\n    originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n    var pathIndex = originOrUrl.indexOf(\"/\");\n    originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n    if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n      return null;\n    }\n    return originOrUrl || null;\n  };\n  var _determineScriptAccess = function() {\n    var _extractAllDomains = function(origins, resultsArray) {\n      var i, len, tmp;\n      if (origins == null || resultsArray[0] === \"*\") {\n        return;\n      }\n      if (typeof origins === \"string\") {\n        origins = [ origins ];\n      }\n      if (!(typeof origins === \"object\" && typeof origins.length === \"number\")) {\n        return;\n      }\n      for (i = 0, len = origins.length; i < len; i++) {\n        if (origins.hasOwnProperty(i) && (tmp = _extractDomain(origins[i]))) {\n          if (tmp === \"*\") {\n            resultsArray.length = 0;\n            resultsArray.push(\"*\");\n            break;\n          }\n          if (_inArray(tmp, resultsArray) === -1) {\n            resultsArray.push(tmp);\n          }\n        }\n      }\n    };\n    return function(currentDomain, configOptions) {\n      var swfDomain = _extractDomain(configOptions.swfPath);\n      if (swfDomain === null) {\n        swfDomain = currentDomain;\n      }\n      var trustedDomains = [];\n      _extractAllDomains(configOptions.trustedOrigins, trustedDomains);\n      _extractAllDomains(configOptions.trustedDomains, trustedDomains);\n      var len = trustedDomains.length;\n      if (len > 0) {\n        if (len === 1 && trustedDomains[0] === \"*\") {\n          return \"always\";\n        }\n        if (_inArray(currentDomain, trustedDomains) !== -1) {\n          if (len === 1 && currentDomain === swfDomain) {\n            return \"sameDomain\";\n          }\n          return \"always\";\n        }\n      }\n      return \"never\";\n    };\n  }();\n  var _objectKeys = function(obj) {\n    if (obj == null) {\n      return [];\n    }\n    if (Object.keys) {\n      return Object.keys(obj);\n    }\n    var keys = [];\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        keys.push(prop);\n      }\n    }\n    return keys;\n  };\n  var _deleteOwnProperties = function(obj) {\n    if (obj) {\n      for (var prop in obj) {\n        if (obj.hasOwnProperty(prop)) {\n          delete obj[prop];\n        }\n      }\n    }\n    return obj;\n  };\n  var _safeActiveElement = function() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n    return null;\n  };\n  var _pick = function(obj, keys) {\n    var newObj = {};\n    for (var i = 0, len = keys.length; i < len; i++) {\n      if (keys[i] in obj) {\n        newObj[keys[i]] = obj[keys[i]];\n      }\n    }\n    return newObj;\n  };\n  var _omit = function(obj, keys) {\n    var newObj = {};\n    for (var prop in obj) {\n      if (_inArray(prop, keys) === -1) {\n        newObj[prop] = obj[prop];\n      }\n    }\n    return newObj;\n  };\n  var _mapClipDataToFlash = function(clipData) {\n    var newClipData = {}, formatMap = {};\n    if (!(typeof clipData === \"object\" && clipData)) {\n      return;\n    }\n    for (var dataFormat in clipData) {\n      if (dataFormat && clipData.hasOwnProperty(dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n        switch (dataFormat.toLowerCase()) {\n         case \"text/plain\":\n         case \"text\":\n         case \"air:text\":\n         case \"flash:text\":\n          newClipData.text = clipData[dataFormat];\n          formatMap.text = dataFormat;\n          break;\n\n         case \"text/html\":\n         case \"html\":\n         case \"air:html\":\n         case \"flash:html\":\n          newClipData.html = clipData[dataFormat];\n          formatMap.html = dataFormat;\n          break;\n\n         case \"application/rtf\":\n         case \"text/rtf\":\n         case \"rtf\":\n         case \"richtext\":\n         case \"air:rtf\":\n         case \"flash:rtf\":\n          newClipData.rtf = clipData[dataFormat];\n          formatMap.rtf = dataFormat;\n          break;\n\n         default:\n          break;\n        }\n      }\n    }\n    return {\n      data: newClipData,\n      formatMap: formatMap\n    };\n  };\n  var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n    if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n      return clipResults;\n    }\n    var newResults = {};\n    for (var prop in clipResults) {\n      if (clipResults.hasOwnProperty(prop)) {\n        if (prop !== \"success\" && prop !== \"data\") {\n          newResults[prop] = clipResults[prop];\n          continue;\n        }\n        newResults[prop] = {};\n        var tmpHash = clipResults[prop];\n        for (var dataFormat in tmpHash) {\n          if (dataFormat && tmpHash.hasOwnProperty(dataFormat) && formatMap.hasOwnProperty(dataFormat)) {\n            newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n          }\n        }\n      }\n    }\n    return newResults;\n  };\n  var _args = function(arraySlice) {\n    return function(args) {\n      return arraySlice.call(args, 0);\n    };\n  }(window.Array.prototype.slice);\n  var _detectFlashSupport = function() {\n    var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n    function parseFlashVersion(desc) {\n      var matches = desc.match(/[\\d]+/g);\n      matches.length = 3;\n      return matches.join(\".\");\n    }\n    function isPepperFlash(flashPlayerFileName) {\n      return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n    }\n    function inspectPlugin(plugin) {\n      if (plugin) {\n        hasFlash = true;\n        if (plugin.version) {\n          flashVersion = parseFlashVersion(plugin.version);\n        }\n        if (!flashVersion && plugin.description) {\n          flashVersion = parseFlashVersion(plugin.description);\n        }\n        if (plugin.filename) {\n          isPPAPI = isPepperFlash(plugin.filename);\n        }\n      }\n    }\n    if (navigator.plugins && navigator.plugins.length) {\n      plugin = navigator.plugins[\"Shockwave Flash\"];\n      inspectPlugin(plugin);\n      if (navigator.plugins[\"Shockwave Flash 2.0\"]) {\n        hasFlash = true;\n        flashVersion = \"2.0.0.11\";\n      }\n    } else if (navigator.mimeTypes && navigator.mimeTypes.length) {\n      mimeType = navigator.mimeTypes[\"application/x-shockwave-flash\"];\n      plugin = mimeType && mimeType.enabledPlugin;\n      inspectPlugin(plugin);\n    } else if (typeof ActiveXObject !== \"undefined\") {\n      isActiveX = true;\n      try {\n        ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n        hasFlash = true;\n        flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n      } catch (e1) {\n        try {\n          ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n          hasFlash = true;\n          flashVersion = \"6.0.21\";\n        } catch (e2) {\n          try {\n            ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n            hasFlash = true;\n            flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n          } catch (e3) {\n            isActiveX = false;\n          }\n        }\n      }\n    }\n    _flashState.disabled = hasFlash !== true;\n    _flashState.outdated = flashVersion && parseFloat(flashVersion) < 11;\n    _flashState.version = flashVersion || \"0.0.0\";\n    _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n  };\n  _detectFlashSupport();\n  var ZeroClipboard = function(elements) {\n    if (!(this instanceof ZeroClipboard)) {\n      return new ZeroClipboard(elements);\n    }\n    this.id = \"\" + _clientIdCounter++;\n    _clientMeta[this.id] = {\n      instance: this,\n      elements: [],\n      handlers: {}\n    };\n    if (elements) {\n      this.clip(elements);\n    }\n    if (typeof _flashState.ready !== \"boolean\") {\n      _flashState.ready = false;\n    }\n    if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n      var _client = this;\n      var maxWait = _globalConfig.flashLoadTimeout;\n      if (typeof maxWait === \"number\" && maxWait >= 0) {\n        setTimeout(function() {\n          if (typeof _flashState.deactivated !== \"boolean\") {\n            _flashState.deactivated = true;\n          }\n          if (_flashState.deactivated === true) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-deactivated\",\n              client: _client\n            });\n          }\n        }, maxWait);\n      }\n      _flashState.overdue = false;\n      _bridge();\n    }\n  };\n  ZeroClipboard.prototype.setText = function(text) {\n    ZeroClipboard.setData(\"text/plain\", text);\n    return this;\n  };\n  ZeroClipboard.prototype.setHtml = function(html) {\n    ZeroClipboard.setData(\"text/html\", html);\n    return this;\n  };\n  ZeroClipboard.prototype.setRichText = function(richText) {\n    ZeroClipboard.setData(\"application/rtf\", richText);\n    return this;\n  };\n  ZeroClipboard.prototype.setData = function() {\n    ZeroClipboard.setData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.clearData = function() {\n    ZeroClipboard.clearData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.setSize = function(width, height) {\n    _setSize(width, height);\n    return this;\n  };\n  var _setHandCursor = function(enabled) {\n    if (_flashState.ready === true && _flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n      _flashState.bridge.setHandCursor(enabled);\n    } else {\n      _flashState.ready = false;\n    }\n  };\n  ZeroClipboard.prototype.destroy = function() {\n    this.unclip();\n    this.off();\n    delete _clientMeta[this.id];\n  };\n  var _getAllClients = function() {\n    var i, len, client, clients = [], clientIds = _objectKeys(_clientMeta);\n    for (i = 0, len = clientIds.length; i < len; i++) {\n      client = _clientMeta[clientIds[i]].instance;\n      if (client && client instanceof ZeroClipboard) {\n        clients.push(client);\n      }\n    }\n    return clients;\n  };\n  ZeroClipboard.version = \"2.0.0-beta.5\";\n  var _globalConfig = {\n    swfPath: _swfPath,\n    trustedDomains: window.location.host ? [ window.location.host ] : [],\n    cacheBust: true,\n    forceHandCursor: false,\n    forceEnhancedClipboard: false,\n    zIndex: 999999999,\n    debug: false,\n    title: null,\n    autoActivate: true,\n    flashLoadTimeout: 3e4\n  };\n  ZeroClipboard.isFlashUnusable = function() {\n    return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n  };\n  ZeroClipboard.config = function(options) {\n    if (typeof options === \"object\" && options !== null) {\n      _extend(_globalConfig, options);\n    }\n    if (typeof options === \"string\" && options) {\n      if (_globalConfig.hasOwnProperty(options)) {\n        return _globalConfig[options];\n      }\n      return;\n    }\n    var copy = {};\n    for (var prop in _globalConfig) {\n      if (_globalConfig.hasOwnProperty(prop)) {\n        if (typeof _globalConfig[prop] === \"object\" && _globalConfig[prop] !== null) {\n          if (\"length\" in _globalConfig[prop]) {\n            copy[prop] = _globalConfig[prop].slice(0);\n          } else {\n            copy[prop] = _extend({}, _globalConfig[prop]);\n          }\n        } else {\n          copy[prop] = _globalConfig[prop];\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.destroy = function() {\n    ZeroClipboard.deactivate();\n    for (var clientId in _clientMeta) {\n      if (_clientMeta.hasOwnProperty(clientId) && _clientMeta[clientId]) {\n        var client = _clientMeta[clientId].instance;\n        if (client && typeof client.destroy === \"function\") {\n          client.destroy();\n        }\n      }\n    }\n    var flashBridge = _flashState.bridge;\n    if (flashBridge) {\n      var htmlBridge = _getHtmlBridge(flashBridge);\n      if (htmlBridge) {\n        if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n          flashBridge.style.display = \"none\";\n          (function removeSwfFromIE() {\n            if (flashBridge.readyState === 4) {\n              for (var prop in flashBridge) {\n                if (typeof flashBridge[prop] === \"function\") {\n                  flashBridge[prop] = null;\n                }\n              }\n              flashBridge.parentNode.removeChild(flashBridge);\n              if (htmlBridge.parentNode) {\n                htmlBridge.parentNode.removeChild(htmlBridge);\n              }\n            } else {\n              setTimeout(removeSwfFromIE, 10);\n            }\n          })();\n        } else {\n          flashBridge.parentNode.removeChild(flashBridge);\n          if (htmlBridge.parentNode) {\n            htmlBridge.parentNode.removeChild(htmlBridge);\n          }\n        }\n      }\n      _flashState.ready = null;\n      _flashState.bridge = null;\n      _flashState.deactivated = null;\n    }\n    ZeroClipboard.clearData();\n  };\n  ZeroClipboard.activate = function(element) {\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n    }\n    _currentElement = element;\n    _addClass(element, _globalConfig.hoverClass);\n    _reposition();\n    var newTitle = _globalConfig.title || element.getAttribute(\"title\");\n    if (newTitle) {\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.setAttribute(\"title\", newTitle);\n      }\n    }\n    var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n    _setHandCursor(useHandCursor);\n  };\n  ZeroClipboard.deactivate = function() {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.removeAttribute(\"title\");\n      htmlBridge.style.left = \"0px\";\n      htmlBridge.style.top = \"-9999px\";\n      _setSize(1, 1);\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      _currentElement = null;\n    }\n  };\n  ZeroClipboard.state = function() {\n    return {\n      browser: _pick(window.navigator, [ \"userAgent\", \"platform\", \"appName\" ]),\n      flash: _omit(_flashState, [ \"bridge\" ]),\n      zeroclipboard: {\n        version: ZeroClipboard.version,\n        config: ZeroClipboard.config()\n      }\n    };\n  };\n  ZeroClipboard.setData = function(format, data) {\n    var dataObj;\n    if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n      dataObj = format;\n      ZeroClipboard.clearData();\n    } else if (typeof format === \"string\" && format) {\n      dataObj = {};\n      dataObj[format] = data;\n    } else {\n      return;\n    }\n    for (var dataFormat in dataObj) {\n      if (dataFormat && dataObj.hasOwnProperty(dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n        _clipData[dataFormat] = dataObj[dataFormat];\n      }\n    }\n  };\n  ZeroClipboard.clearData = function(format) {\n    if (typeof format === \"undefined\") {\n      _deleteOwnProperties(_clipData);\n      _clipDataFormatMap = null;\n    } else if (typeof format === \"string\" && _clipData.hasOwnProperty(format)) {\n      delete _clipData[format];\n    }\n  };\n  var _bridge = function() {\n    var flashBridge, len;\n    var container = document.getElementById(\"global-zeroclipboard-html-bridge\");\n    if (!container) {\n      var allowScriptAccess = _determineScriptAccess(window.location.host, _globalConfig);\n      var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n      var flashvars = _vars(_globalConfig);\n      var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n      container = _createHtmlBridge();\n      var divToBeReplaced = document.createElement(\"div\");\n      container.appendChild(divToBeReplaced);\n      document.body.appendChild(container);\n      var tmpDiv = document.createElement(\"div\");\n      var oldIE = _flashState.pluginType === \"activex\";\n      tmpDiv.innerHTML = '<object id=\"global-zeroclipboard-flash-bridge\" name=\"global-zeroclipboard-flash-bridge\" ' + 'width=\"100%\" height=\"100%\" ' + (oldIE ? 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\"' : 'type=\"application/x-shockwave-flash\" data=\"' + swfUrl + '\"') + \">\" + (oldIE ? '<param name=\"movie\" value=\"' + swfUrl + '\"/>' : \"\") + '<param name=\"allowScriptAccess\" value=\"' + allowScriptAccess + '\"/>' + '<param name=\"allowNetworking\" value=\"' + allowNetworking + '\"/>' + '<param name=\"menu\" value=\"false\"/>' + '<param name=\"wmode\" value=\"transparent\"/>' + '<param name=\"flashvars\" value=\"' + flashvars + '\"/>' + \"</object>\";\n      flashBridge = tmpDiv.firstChild;\n      tmpDiv = null;\n      flashBridge.ZeroClipboard = ZeroClipboard;\n      container.replaceChild(flashBridge, divToBeReplaced);\n    }\n    if (!flashBridge) {\n      flashBridge = document[\"global-zeroclipboard-flash-bridge\"];\n      if (flashBridge && (len = flashBridge.length)) {\n        flashBridge = flashBridge[len - 1];\n      }\n      if (!flashBridge) {\n        flashBridge = container.firstChild;\n      }\n    }\n    _flashState.bridge = flashBridge || null;\n  };\n  var _createHtmlBridge = function() {\n    var container = document.createElement(\"div\");\n    container.id = \"global-zeroclipboard-html-bridge\";\n    container.className = \"global-zeroclipboard-container\";\n    container.style.position = \"absolute\";\n    container.style.left = \"0px\";\n    container.style.top = \"-9999px\";\n    container.style.width = \"1px\";\n    container.style.height = \"1px\";\n    container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n    return container;\n  };\n  var _getHtmlBridge = function(flashBridge) {\n    var htmlBridge = flashBridge && flashBridge.parentNode;\n    while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n      htmlBridge = htmlBridge.parentNode;\n    }\n    return htmlBridge || null;\n  };\n  var _reposition = function() {\n    if (_currentElement) {\n      var pos = _getDOMObjectPosition(_currentElement, _globalConfig.zIndex);\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.style.top = pos.top + \"px\";\n        htmlBridge.style.left = pos.left + \"px\";\n        htmlBridge.style.width = pos.width + \"px\";\n        htmlBridge.style.height = pos.height + \"px\";\n        htmlBridge.style.zIndex = pos.zIndex + 1;\n      }\n      _setSize(pos.width, pos.height);\n    }\n  };\n  var _setSize = function(width, height) {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.style.width = width + \"px\";\n      htmlBridge.style.height = height + \"px\";\n    }\n  };\n  ZeroClipboard.emit = function(event) {\n    var eventType, eventObj, performCallbackAsync, clients, i, len, eventCopy, returnVal, tmp;\n    if (typeof event === \"string\" && event) {\n      eventType = event;\n    }\n    if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n      eventType = event.type;\n      eventObj = event;\n    }\n    if (!eventType) {\n      return;\n    }\n    event = _createEvent(eventType, eventObj);\n    _preprocessEvent(event);\n    if (event.type === \"ready\" && _flashState.overdue === true) {\n      return ZeroClipboard.emit({\n        type: \"error\",\n        name: \"flash-overdue\"\n      });\n    }\n    performCallbackAsync = !/^(before)?copy$/.test(event.type);\n    if (event.client) {\n      _dispatchClientCallbacks.call(event.client, event, performCallbackAsync);\n    } else {\n      clients = event.target && event.target !== window && _globalConfig.autoActivate === true ? _getAllClientsClippedToElement(event.target) : _getAllClients();\n      for (i = 0, len = clients.length; i < len; i++) {\n        eventCopy = _extend({}, event, {\n          client: clients[i]\n        });\n        _dispatchClientCallbacks.call(clients[i], eventCopy, performCallbackAsync);\n      }\n    }\n    if (event.type === \"copy\") {\n      tmp = _mapClipDataToFlash(_clipData);\n      returnVal = tmp.data;\n      _clipDataFormatMap = tmp.formatMap;\n    }\n    return returnVal;\n  };\n  var _dispatchClientCallbacks = function(event, async) {\n    var handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type];\n    if (handlers && handlers.length) {\n      var i, len, func, context, originalContext = this;\n      for (i = 0, len = handlers.length; i < len; i++) {\n        func = handlers[i];\n        context = originalContext;\n        if (typeof func === \"string\" && typeof window[func] === \"function\") {\n          func = window[func];\n        }\n        if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n          context = func;\n          func = func.handleEvent;\n        }\n        if (typeof func === \"function\") {\n          _dispatchCallback(func, context, [ event ], async);\n        }\n      }\n    }\n    return this;\n  };\n  var _eventMessages = {\n    ready: \"Flash communication is established\",\n    error: {\n      \"flash-disabled\": \"Flash is disabled or not installed\",\n      \"flash-outdated\": \"Flash is too outdated to support ZeroClipboard\",\n      \"flash-unavailable\": \"Flash is unable to communicate bidirectionally with JavaScript\",\n      \"flash-deactivated\": \"Flash is too outdated for your browser and/or is configured as click-to-activate\",\n      \"flash-overdue\": \"Flash communication was established but NOT within the acceptable time limit\"\n    }\n  };\n  var _createEvent = function(eventType, event) {\n    if (!(eventType || event && event.type)) {\n      return;\n    }\n    event = event || {};\n    eventType = (eventType || event.type).toLowerCase();\n    _extend(event, {\n      type: eventType,\n      target: event.target || _currentElement || null,\n      relatedTarget: event.relatedTarget || null,\n      currentTarget: _flashState && _flashState.bridge || null\n    });\n    var msg = _eventMessages[event.type];\n    if (event.type === \"error\" && event.name && msg) {\n      msg = msg[event.name];\n    }\n    if (msg) {\n      event.message = msg;\n    }\n    if (event.type === \"ready\") {\n      _extend(event, {\n        target: null,\n        version: _flashState.version\n      });\n    }\n    if (event.type === \"error\") {\n      event.target = null;\n      if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          version: _flashState.version,\n          minimumVersion: \"11.0.0\"\n        });\n      }\n    }\n    if (event.type === \"copy\") {\n      event.clipboardData = {\n        setData: ZeroClipboard.setData,\n        clearData: ZeroClipboard.clearData\n      };\n    }\n    if (event.type === \"aftercopy\") {\n      event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n    }\n    if (event.target && !event.relatedTarget) {\n      event.relatedTarget = _getRelatedTarget(event.target);\n    }\n    return event;\n  };\n  var _getRelatedTarget = function(targetEl) {\n    var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n    return relatedTargetId ? document.getElementById(relatedTargetId) : null;\n  };\n  var _preprocessEvent = function(event) {\n    var element = event.target || _currentElement;\n    switch (event.type) {\n     case \"error\":\n      if (_inArray(event.name, [ \"flash-disabled\", \"flash-outdated\", \"flash-deactivated\", \"flash-overdue\" ])) {\n        _extend(_flashState, {\n          disabled: event.name === \"flash-disabled\",\n          outdated: event.name === \"flash-outdated\",\n          unavailable: event.name === \"flash-unavailable\",\n          deactivated: event.name === \"flash-deactivated\",\n          overdue: event.name === \"flash-overdue\",\n          ready: false\n        });\n      }\n      break;\n\n     case \"ready\":\n      var wasDeactivated = _flashState.deactivated === true;\n      _extend(_flashState, {\n        disabled: false,\n        outdated: false,\n        unavailable: false,\n        deactivated: false,\n        overdue: wasDeactivated,\n        ready: !wasDeactivated\n      });\n      break;\n\n     case \"copy\":\n      var textContent, htmlContent, targetEl = event.relatedTarget;\n      if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n        if (htmlContent !== textContent) {\n          event.clipboardData.setData(\"text/html\", htmlContent);\n        }\n      } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n      }\n      break;\n\n     case \"aftercopy\":\n      ZeroClipboard.clearData();\n      if (element && element !== _safeActiveElement() && element.focus) {\n        element.focus();\n      }\n      break;\n\n     case \"mouseover\":\n      _addClass(element, _globalConfig.hoverClass);\n      break;\n\n     case \"mouseout\":\n      if (_globalConfig.autoActivate === true) {\n        ZeroClipboard.deactivate();\n      }\n      break;\n\n     case \"mousedown\":\n      _addClass(element, _globalConfig.activeClass);\n      break;\n\n     case \"mouseup\":\n      _removeClass(element, _globalConfig.activeClass);\n      break;\n    }\n  };\n  ZeroClipboard.prototype.on = function(eventName, func) {\n    var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (typeof eventName === \"string\" && eventName) {\n      events = eventName.toLowerCase().split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.on(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].replace(/^on/, \"\");\n        added[eventName] = true;\n        if (!handlers[eventName]) {\n          handlers[eventName] = [];\n        }\n        handlers[eventName].push(func);\n      }\n      if (added.ready && _flashState.ready) {\n        ZeroClipboard.emit({\n          type: \"ready\",\n          client: this\n        });\n      }\n      if (added.error) {\n        var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n        for (i = 0, len = errorTypes.length; i < len; i++) {\n          if (_flashState[errorTypes[i]]) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-\" + errorTypes[i],\n              client: this\n            });\n            break;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.off = function(eventName, func) {\n    var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (arguments.length === 0) {\n      events = _objectKeys(handlers);\n    } else if (typeof eventName === \"string\" && eventName) {\n      events = eventName.split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.off(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].toLowerCase().replace(/^on/, \"\");\n        perEventHandlers = handlers[eventName];\n        if (perEventHandlers && perEventHandlers.length) {\n          if (func) {\n            foundIndex = _inArray(func, perEventHandlers);\n            while (foundIndex !== -1) {\n              perEventHandlers.splice(foundIndex, 1);\n              foundIndex = _inArray(func, perEventHandlers, foundIndex);\n            }\n          } else {\n            handlers[eventName].length = 0;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.handlers = function(eventName) {\n    var prop, copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (handlers) {\n      if (typeof eventName === \"string\" && eventName) {\n        return handlers[eventName] ? handlers[eventName].slice(0) : null;\n      }\n      copy = {};\n      for (prop in handlers) {\n        if (handlers.hasOwnProperty(prop) && handlers[prop]) {\n          copy[prop] = handlers[prop].slice(0);\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.prototype.clip = function(elements) {\n    elements = _prepClip(elements);\n    for (var i = 0; i < elements.length; i++) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        if (!elements[i].zcClippingId) {\n          elements[i].zcClippingId = \"zcClippingId_\" + _elementIdCounter++;\n          _elementMeta[elements[i].zcClippingId] = [ this.id ];\n          if (_globalConfig.autoActivate === true) {\n            _addEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n          }\n        } else if (_inArray(this.id, _elementMeta[elements[i].zcClippingId]) === -1) {\n          _elementMeta[elements[i].zcClippingId].push(this.id);\n        }\n        var clippedElements = _clientMeta[this.id].elements;\n        if (_inArray(elements[i], clippedElements) === -1) {\n          clippedElements.push(elements[i]);\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.unclip = function(elements) {\n    var meta = _clientMeta[this.id];\n    if (!meta) {\n      return this;\n    }\n    var clippedElements = meta.elements;\n    var arrayIndex;\n    if (typeof elements === \"undefined\") {\n      elements = clippedElements.slice(0);\n    } else {\n      elements = _prepClip(elements);\n    }\n    for (var i = elements.length; i--; ) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        arrayIndex = 0;\n        while ((arrayIndex = _inArray(elements[i], clippedElements, arrayIndex)) !== -1) {\n          clippedElements.splice(arrayIndex, 1);\n        }\n        var clientIds = _elementMeta[elements[i].zcClippingId];\n        if (clientIds) {\n          arrayIndex = 0;\n          while ((arrayIndex = _inArray(this.id, clientIds, arrayIndex)) !== -1) {\n            clientIds.splice(arrayIndex, 1);\n          }\n          if (clientIds.length === 0) {\n            if (_globalConfig.autoActivate === true) {\n              _removeEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n            }\n            delete elements[i].zcClippingId;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.elements = function() {\n    var meta = _clientMeta[this.id];\n    return meta && meta.elements ? meta.elements.slice(0) : [];\n  };\n  var _getAllClientsClippedToElement = function(element) {\n    var elementMetaId, clientIds, i, len, client, clients = [];\n    if (element && element.nodeType === 1 && (elementMetaId = element.zcClippingId) && _elementMeta.hasOwnProperty(elementMetaId)) {\n      clientIds = _elementMeta[elementMetaId];\n      if (clientIds && clientIds.length) {\n        for (i = 0, len = clientIds.length; i < len; i++) {\n          client = _clientMeta[clientIds[i]].instance;\n          if (client && client instanceof ZeroClipboard) {\n            clients.push(client);\n          }\n        }\n      }\n    }\n    return clients;\n  };\n  _globalConfig.hoverClass = \"zeroclipboard-is-hover\";\n  _globalConfig.activeClass = \"zeroclipboard-is-active\";\n  if (typeof define === \"function\" && define.amd) {\n    define(function() {\n      return ZeroClipboard;\n    });\n  } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n    module.exports = ZeroClipboard;\n  } else {\n    window.ZeroClipboard = ZeroClipboard;\n  }\n})(function() {\n  return this;\n}());"
  },
  {
    "path": "api/static/libs/js/UEditor/ueditor.all.min.bak.js",
    "content": "/*!\n * ueditor\n * version: 2.0.0\n * build: Wed Jan 17 2024 13:54:21 GMT+0800 (中国标准时间)\n */!function(){function getListener(a,b,c){var d;return b=b.toLowerCase(),(d=a.__allListeners||c&&(a.__allListeners={}))&&(d[b]||c&&(d[b]=[]))}function getDomNode(a,b,c,d,e,f){var g,h=d&&a[b];for(!h&&(h=a[c]);!h&&(g=(g||a).parentNode);){if(\"BODY\"==g.tagName||f&&!f(g))return null;h=g[c]}return h&&e&&!e(h)?getDomNode(h,b,c,!1,e):h}UEDITOR_CONFIG=window.UEDITOR_CONFIG||{};var baidu=window.baidu||{};window.baidu=baidu,window.UE=baidu.editor={plugins:{},commands:{},instants:{},I18N:{},_customizeUI:{},version:\"1.5.0\"};var dom=UE.dom={},browser=UE.browser=function(){var a=navigator.userAgent.toLowerCase(),b=window.opera,c={ie:/(msie\\s|trident.*rv:)([\\w.]+)/i.test(a),opera:!!b&&b.version,webkit:a.indexOf(\" applewebkit/\")>-1,mac:a.indexOf(\"macintosh\")>-1,quirks:\"BackCompat\"==document.compatMode};c.gecko=\"Gecko\"==navigator.product&&!c.webkit&&!c.opera&&!c.ie;var d=0;if(c.ie){var e=a.match(/(?:msie\\s([\\w.]+))/),f=a.match(/(?:trident.*rv:([\\w.]+))/);d=e&&f&&e[1]&&f[1]?Math.max(1*e[1],1*f[1]):e&&e[1]?1*e[1]:f&&f[1]?1*f[1]:0,c.ie11Compat=11==document.documentMode,c.ie9Compat=9==document.documentMode,c.ie8=!!document.documentMode,c.ie8Compat=8==document.documentMode,c.ie7Compat=7==d&&!document.documentMode||7==document.documentMode,c.ie6Compat=d<7||c.quirks,c.ie9above=d>8,c.ie9below=d<9,c.ie11above=d>10,c.ie11below=d<11}if(c.gecko){var g=a.match(/rv:([\\d\\.]+)/);g&&(g=g[1].split(\".\"),d=1e4*g[0]+100*(g[1]||0)+1*(g[2]||0))}return/chrome\\/(\\d+\\.\\d)/i.test(a)&&(c.chrome=+RegExp.$1),/(\\d+\\.\\d)?(?:\\.\\d)?\\s+safari\\/?(\\d+\\.\\d+)?/i.test(a)&&!/chrome/i.test(a)&&(c.safari=+(RegExp.$1||RegExp.$2)),c.opera&&(d=parseFloat(b.version())),c.webkit&&(d=parseFloat(a.match(/ applewebkit\\/(\\d+)/)[1])),c.version=d,c.isCompatible=!c.mobile&&(c.ie&&d>=6||c.gecko&&d>=10801||c.opera&&d>=9.5||c.air&&d>=1||c.webkit&&d>=522||!1),c}(),ie=browser.ie,webkit=browser.webkit,gecko=browser.gecko,opera=browser.opera,utils=UE.utils={each:function(a,b,c){if(null!=a)if(a.length===+a.length){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a)===!1)return!1}else for(var f in a)if(a.hasOwnProperty(f)&&b.call(c,a[f],f,a)===!1)return!1},makeInstance:function(a){var b=new Function;return b.prototype=a,a=new b,b.prototype=null,a},extend:function(a,b,c){if(b)for(var d in b)c&&a.hasOwnProperty(d)||(a[d]=b[d]);return a},extend2:function(a){for(var b=arguments,c=1;c<b.length;c++){var d=b[c];for(var e in d)a.hasOwnProperty(e)||(a[e]=d[e])}return a},inherits:function(a,b){var c=a.prototype,d=utils.makeInstance(b.prototype);return utils.extend(d,c,!0),a.prototype=d,d.constructor=a},bind:function(a,b){return function(){return a.apply(b,arguments)}},defer:function(a,b,c){var d;return function(){c&&clearTimeout(d),d=setTimeout(a,b)}},indexOf:function(a,b,c){var d=-1;return c=this.isNumber(c)?c:0,this.each(a,function(a,e){if(e>=c&&a===b)return d=e,!1}),d},removeItem:function(a,b){for(var c=0,d=a.length;c<d;c++)a[c]===b&&(a.splice(c,1),c--)},trim:function(a){return a.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g,\"\")},listToMap:function(a){if(!a)return{};a=utils.isArray(a)?a:a.split(\",\");for(var b,c=0,d={};b=a[c++];)d[b.toUpperCase()]=d[b]=1;return d},unhtml:function(a,b){return a?a.replace(b||/[&<\">'](?:(amp|lt|ldquo|rdquo|quot|gt|#39|nbsp|#\\d+);)?/g,function(a,b){return b?a:{\"<\":\"&lt;\",\"&\":\"&amp;\",'\"':\"&quot;\",\"“\":\"&ldquo;\",\"”\":\"&rdquo;\",\">\":\"&gt;\",\"'\":\"&#39;\"}[a]}):\"\"},html:function(a){return a?a.replace(/&((g|l|quo|ldquo|rdquo)t|amp|#39|nbsp);/g,function(a){return{\"&lt;\":\"<\",\"&amp;\":\"&\",\"&quot;\":'\"',\"&ldquo;\":\"“\",\"&rdquo;\":\"”\",\"&gt;\":\">\",\"&#39;\":\"'\",\"&nbsp;\":\" \"}[a]}):\"\"},cssStyleToDomStyle:function(){var a=document.createElement(\"div\").style,b={\"float\":void 0!=a.cssFloat?\"cssFloat\":void 0!=a.styleFloat?\"styleFloat\":\"float\"};return function(a){return b[a]||(b[a]=a.toLowerCase().replace(/-./g,function(a){return a.charAt(1).toUpperCase()}))}}(),loadFile:function(){function a(a,c){try{for(var d,e=0;d=b[e++];)if(d.doc===a&&d.url==(c.src||c.href))return d}catch(f){return null}}var b=[];return function(c,d,e){var f=a(c,d);if(f)return void(f.ready?e&&e():f.funs.push(e));if(b.push({doc:c,url:d.src||d.href,funs:[e]}),!c.body){var g=[];for(var h in d)\"tag\"!=h&&g.push(h+'=\"'+d[h]+'\"');return void c.write(\"<\"+d.tag+\" \"+g.join(\" \")+\" ></\"+d.tag+\">\")}if(!d.id||!c.getElementById(d.id)){var i=c.createElement(d.tag);delete d.tag;for(var h in d)i.setAttribute(h,d[h]);i.onload=i.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){if(f=a(c,d),f.funs.length>0){f.ready=1;for(var b;b=f.funs.pop();)b()}i.onload=i.onreadystatechange=null}},i.onerror=function(){throw Error(\"The load \"+(d.href||d.src)+\" fails,check the url settings of file ueditor.config.js \")},c.getElementsByTagName(\"head\")[0].appendChild(i)}}}(),isEmptyObject:function(a){if(null==a)return!0;if(this.isArray(a)||this.isString(a))return 0===a.length;for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},fixColor:function(a,b){if(/color/i.test(a)&&/rgba?/.test(b)){var c=b.split(\",\");if(c.length>3)return\"\";b=\"#\";for(var d,e=0;d=c[e++];)d=parseInt(d.replace(/[^\\d]/gi,\"\"),10).toString(16),b+=1==d.length?\"0\"+d:d;b=b.toUpperCase()}return b},optCss:function(a){function b(a,b){if(!a)return\"\";var c=a.top,d=a.bottom,e=a.left,f=a.right,g=\"\";if(c&&e&&d&&f)g+=\";\"+b+\":\"+(c==d&&d==e&&e==f?c:c==d&&e==f?c+\" \"+e:e==f?c+\" \"+e+\" \"+d:c+\" \"+f+\" \"+d+\" \"+e)+\";\";else for(var h in a)g+=\";\"+b+\"-\"+h+\":\"+a[h]+\";\";return g}var c,d;return a=a.replace(/(padding|margin|border)\\-([^:]+):([^;]+);?/gi,function(a,b,e,f){if(1==f.split(\" \").length)switch(b){case\"padding\":return!c&&(c={}),c[e]=f,\"\";case\"margin\":return!d&&(d={}),d[e]=f,\"\";case\"border\":return\"initial\"==f?\"\":a}return a}),a+=b(c,\"padding\")+b(d,\"margin\"),a.replace(/^[ \\n\\r\\t;]*|[ \\n\\r\\t]*$/,\"\").replace(/;([ \\n\\r\\t]+)|\\1;/g,\";\").replace(/(&((l|g)t|quot|#39))?;{2,}/g,function(a,b){return b?b+\";;\":\";\"})},clone:function(a,b){var c;b=b||{};for(var d in a)a.hasOwnProperty(d)&&(c=a[d],\"object\"==typeof c?(b[d]=utils.isArray(c)?[]:{},utils.clone(a[d],b[d])):b[d]=c);return b},transUnitToPx:function(a){if(!/(pt|cm)/.test(a))return a;var b;switch(a.replace(/([\\d.]+)(\\w+)/,function(c,d,e){a=d,b=e}),b){case\"cm\":a=25*parseFloat(a);break;case\"pt\":a=Math.round(96*parseFloat(a)/72)}return a+(a?\"px\":\"\")},domReady:function(){function a(a){a.isReady=!0;for(var c;c=b.pop();c());}var b=[];return function(c,d){d=d||window;var e=d.document;c&&b.push(c),\"complete\"===e.readyState?a(e):(e.isReady&&a(e),browser.ie&&11!=browser.version?(!function(){if(!e.isReady){try{e.documentElement.doScroll(\"left\")}catch(b){return void setTimeout(arguments.callee,0)}a(e)}}(),d.attachEvent(\"onload\",function(){a(e)})):(e.addEventListener(\"DOMContentLoaded\",function(){e.removeEventListener(\"DOMContentLoaded\",arguments.callee,!1),a(e)},!1),d.addEventListener(\"load\",function(){a(e)},!1)))}}(),cssRule:browser.ie&&11!=browser.version?function(a,b,c){var d,e;if(void 0===b||b&&b.nodeType&&9==b.nodeType){if(c=b&&b.nodeType&&9==b.nodeType?b:c||document,d=c.indexList||(c.indexList={}),e=d[a],void 0!==e)return c.styleSheets[e].cssText}else{if(c=c||document,d=c.indexList||(c.indexList={}),e=d[a],\"\"===b)return void 0!==e&&(c.styleSheets[e].cssText=\"\",delete d[a],!0);void 0!==e?sheetStyle=c.styleSheets[e]:(sheetStyle=c.createStyleSheet(\"\",e=c.styleSheets.length),d[a]=e),sheetStyle.cssText=b}}:function(a,b,c){var d;return void 0===b||b&&b.nodeType&&9==b.nodeType?(c=b&&b.nodeType&&9==b.nodeType?b:c||document,d=c.getElementById(a),d?d.innerHTML:void 0):(c=c||document,d=c.getElementById(a),\"\"===b?!!d&&(d.parentNode.removeChild(d),!0):void(d?d.innerHTML=b:(d=c.createElement(\"style\"),d.id=a,d.innerHTML=b,c.getElementsByTagName(\"head\")[0].appendChild(d))))},sort:function(a,b){b=b||function(a,b){return a.localeCompare(b)};for(var c=0,d=a.length;c<d;c++)for(var e=c,f=a.length;e<f;e++)if(b(a[c],a[e])>0){var g=a[c];a[c]=a[e],a[e]=g}return a},serializeParam:function(a){var b=[];for(var c in a)if(\"method\"!=c&&\"timeout\"!=c&&\"async\"!=c)if(\"function\"!=(typeof a[c]).toLowerCase()&&\"object\"!=(typeof a[c]).toLowerCase())b.push(encodeURIComponent(c)+\"=\"+encodeURIComponent(a[c]));else if(utils.isArray(a[c]))for(var d=0;d<a[c].length;d++)b.push(encodeURIComponent(c)+\"[]=\"+encodeURIComponent(a[c][d]));return b.join(\"&\")},formatUrl:function(a){var b=a.replace(/&&/g,\"&\");return b=b.replace(/\\?&/g,\"?\"),b=b.replace(/&$/g,\"\"),b=b.replace(/&#/g,\"#\"),b=b.replace(/&+/g,\"&\")},isCrossDomainUrl:function(a){var b=document.createElement(\"a\");return b.href=a,browser.ie&&(b.href=b.href),!(b.protocol==location.protocol&&b.hostname==location.hostname&&(b.port==location.port||\"80\"==b.port&&\"\"==location.port||\"\"==b.port&&\"80\"==location.port))},clearEmptyAttrs:function(a){for(var b in a)\"\"===a[b]&&delete a[b];return a},str2json:function(a){return utils.isString(a)?window.JSON?JSON.parse(a):new Function(\"return \"+utils.trim(a||\"\"))():null},json2str:function(){function a(a){return/[\"\\\\\\x00-\\x1f]/.test(a)&&(a=a.replace(/[\"\\\\\\x00-\\x1f]/g,function(a){var b=e[a];return b?b:(b=a.charCodeAt(),\"\\\\u00\"+Math.floor(b/16).toString(16)+(b%16).toString(16))})),'\"'+a+'\"'}function b(a){var b,c,d,e=[\"[\"],f=a.length;for(c=0;c<f;c++)switch(d=a[c],typeof d){case\"undefined\":case\"function\":case\"unknown\":break;default:b&&e.push(\",\"),e.push(utils.json2str(d)),b=1}return e.push(\"]\"),e.join(\"\")}function c(a){return a<10?\"0\"+a:a}function d(a){return'\"'+a.getFullYear()+\"-\"+c(a.getMonth()+1)+\"-\"+c(a.getDate())+\"T\"+c(a.getHours())+\":\"+c(a.getMinutes())+\":\"+c(a.getSeconds())+'\"'}if(window.JSON)return JSON.stringify;var e={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"};return function(c){switch(typeof c){case\"undefined\":return\"undefined\";case\"number\":return isFinite(c)?String(c):\"null\";case\"string\":return a(c);case\"boolean\":return String(c);default:if(null===c)return\"null\";if(utils.isArray(c))return b(c);if(utils.isDate(c))return d(c);var e,f,g=[\"{\"],h=utils.json2str;for(var i in c)if(Object.prototype.hasOwnProperty.call(c,i))switch(f=c[i],typeof f){case\"undefined\":case\"unknown\":case\"function\":break;default:e&&g.push(\",\"),e=1,g.push(h(i)+\":\"+h(f))}return g.push(\"}\"),g.join(\"\")}}}()};utils.each([\"String\",\"Function\",\"Array\",\"Number\",\"RegExp\",\"Object\",\"Date\"],function(a){UE.utils[\"is\"+a]=function(b){return Object.prototype.toString.apply(b)==\"[object \"+a+\"]\"}});var EventBase=UE.EventBase=function(){};EventBase.prototype={addListener:function(a,b){a=utils.trim(a).split(/\\s+/);for(var c,d=0;c=a[d++];)getListener(this,c,!0).push(b)},on:function(a,b){return this.addListener(a,b)},off:function(a,b){return this.removeListener(a,b)},trigger:function(){return this.fireEvent.apply(this,arguments)},removeListener:function(a,b){a=utils.trim(a).split(/\\s+/);for(var c,d=0;c=a[d++];)utils.removeItem(getListener(this,c)||[],b)},fireEvent:function(){var a=arguments[0];a=utils.trim(a).split(\" \");for(var b,c=0;b=a[c++];){var d,e,f,g=getListener(this,b);if(g)for(f=g.length;f--;)if(g[f]){if(e=g[f].apply(this,arguments),e===!0)return e;void 0!==e&&(d=e)}(e=this[\"on\"+b.toLowerCase()])&&(d=e.apply(this,arguments))}return d}};var dtd=dom.dtd=function(){function a(a){for(var b in a)a[b.toUpperCase()]=a[b];return a}var b=utils.extend2,c=a({isindex:1,fieldset:1}),d=a({input:1,button:1,select:1,textarea:1,label:1}),e=b(a({a:1}),d),f=b({iframe:1},e),g=a({hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1}),h=a({ins:1,del:1,script:1,style:1}),i=b(a({mark:1,b:1,acronym:1,bdo:1,\"var\":1,\"#\":1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1}),h),j=b(a({sub:1,img:1,embed:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1}),i),k=b(a({p:1}),j),l=b(a({iframe:1}),j,d),m=a({img:1,embed:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,\"#\":1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,\"var\":1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1}),n=b(a({a:0}),l),o=a({tr:1}),p=a({\"#\":1}),q=b(a({param:1}),m),r=b(a({form:1}),c,f,g,k),s=a({li:1,ol:1,ul:1}),t=a({style:1,script:1}),u=a({base:1,link:1,meta:1,title:1}),v=b(u,t),w=a({head:1,body:1}),x=a({html:1}),y=a({address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1}),z=a({area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1});return a({$nonBodyContent:b(x,w,u),$block:y,$inline:n,$inlineWithA:b(a({a:1}),n),$body:b(a({script:1,style:1}),y),$cdata:a({script:1,style:1}),$empty:z,$nonChild:a({iframe:1,textarea:1}),$listItem:a({dd:1,dt:1,li:1}),$list:a({ul:1,ol:1,dl:1}),$isNotEmpty:a({table:1,ul:1,ol:1,dl:1,iframe:1,area:1,base:1,col:1,hr:1,img:1,embed:1,input:1,textarea:1,link:1,meta:1,param:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1}),$removeEmpty:a({a:1,abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,\"var\":1}),$removeEmptyBlock:a({p:1,div:1}),$tableContent:a({caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1,table:1}),$notTransContent:a({pre:1,script:1,style:1,textarea:1}),html:w,head:v,style:p,script:p,body:r,base:{},link:{},meta:{},title:p,col:{},tr:a({td:1,th:1}),img:{},embed:{},colgroup:a({thead:1,col:1,tbody:1,tr:1,tfoot:1}),noscript:r,td:r,br:{},th:r,center:r,kbd:n,button:b(k,g),basefont:{},h5:n,h4:n,samp:n,h6:n,ol:s,h1:n,h3:n,option:p,h2:n,form:b(c,f,g,k),select:a({optgroup:1,option:1}),font:n,ins:n,menu:s,abbr:n,label:n,table:a({thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1}),code:n,tfoot:o,cite:n,li:r,input:{},iframe:r,strong:n,textarea:p,noframes:r,big:n,small:n,span:a({\"#\":1,br:1,b:1,strong:1,u:1,i:1,em:1,sub:1,sup:1,strike:1,span:1}),hr:n,dt:n,sub:n,optgroup:a({option:1}),param:{},bdo:n,\"var\":n,div:r,object:q,sup:n,dd:r,strike:n,area:{},dir:s,map:b(a({area:1,form:1,p:1}),c,h,g),applet:q,dl:a({dt:1,dd:1}),del:n,isindex:{},fieldset:b(a({legend:1}),m),thead:o,ul:s,acronym:n,b:n,a:b(a({a:1}),l),blockquote:b(a({td:1,tr:1,tbody:1,li:1}),r),caption:n,i:n,u:n,tbody:o,s:n,address:b(f,k),tt:n,legend:n,q:n,pre:b(i,e),p:b(a({a:1}),n),em:n,dfn:n,mark:n})}(),attrFix=ie&&browser.version<9?{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\"}:{tabindex:\"tabIndex\",readonly:\"readOnly\"},styleBlock=utils.listToMap([\"-webkit-box\",\"-moz-box\",\"block\",\"list-item\",\"table\",\"table-row-group\",\"table-header-group\",\"table-footer-group\",\"table-row\",\"table-column-group\",\"table-column\",\"table-cell\",\"table-caption\"]),domUtils=dom.domUtils={NODE_ELEMENT:1,NODE_DOCUMENT:9,NODE_TEXT:3,NODE_COMMENT:8,NODE_DOCUMENT_FRAGMENT:11,POSITION_IDENTICAL:0,POSITION_DISCONNECTED:1,POSITION_FOLLOWING:2,POSITION_PRECEDING:4,POSITION_IS_CONTAINED:8,POSITION_CONTAINS:16,fillChar:ie&&\"6\"==browser.version?\"\\ufeff\":\"​\",keys:{8:1,46:1,16:1,17:1,18:1,37:1,38:1,39:1,40:1,13:1},getPosition:function(a,b){if(a===b)return 0;var c,d=[a],e=[b];for(c=a;c=c.parentNode;){if(c===b)return 10;d.push(c)}for(c=b;c=c.parentNode;){if(c===a)return 20;e.push(c)}if(d.reverse(),e.reverse(),d[0]!==e[0])return 1;for(var f=-1;f++,d[f]===e[f];);for(a=d[f],b=e[f];a=a.nextSibling;)if(a===b)return 4;return 2},getNodeIndex:function(a,b){for(var c=a,d=0;c=c.previousSibling;)b&&3==c.nodeType?c.nodeType!=c.nextSibling.nodeType&&d++:d++;return d},inDoc:function(a,b){return 10==domUtils.getPosition(a,b)},findParent:function(a,b,c){if(a&&!domUtils.isBody(a))for(a=c?a:a.parentNode;a;){if(!b||b(a)||domUtils.isBody(a))return b&&!b(a)&&domUtils.isBody(a)?null:a;a=a.parentNode}return null},findParentByTagName:function(a,b,c,d){return b=utils.listToMap(utils.isArray(b)?b:[b]),domUtils.findParent(a,function(a){return b[a.tagName]&&!(d&&d(a))},c)},findParents:function(a,b,c,d){for(var e=b&&(c&&c(a)||!c)?[a]:[];a=domUtils.findParent(a,c);)e.push(a);return d?e:e.reverse()},insertAfter:function(a,b){return a.nextSibling?a.parentNode.insertBefore(b,a.nextSibling):a.parentNode.appendChild(b)},remove:function(a,b){var c,d=a.parentNode;if(d){if(b&&a.hasChildNodes())for(;c=a.firstChild;)d.insertBefore(c,a);d.removeChild(a)}return a},getNextDomNode:function(a,b,c,d){return getDomNode(a,\"firstChild\",\"nextSibling\",b,c,d)},getPreDomNode:function(a,b,c,d){return getDomNode(a,\"lastChild\",\"previousSibling\",b,c,d)},isBookmarkNode:function(a){return 1==a.nodeType&&a.id&&/^_baidu_bookmark_/i.test(a.id)},getWindow:function(a){var b=a.ownerDocument||a;return b.defaultView||b.parentWindow},getCommonAncestor:function(a,b){if(a===b)return a;for(var c=[a],d=[b],e=a,f=-1;e=e.parentNode;){if(e===b)return e;c.push(e)}for(e=b;e=e.parentNode;){if(e===a)return e;d.push(e)}for(c.reverse(),d.reverse();f++,c[f]===d[f];);return 0==f?null:c[f-1]},clearEmptySibling:function(a,b,c){function d(a,b){for(var c;a&&!domUtils.isBookmarkNode(a)&&(domUtils.isEmptyInlineElement(a)||!new RegExp(\"[^\\t\\n\\r\"+domUtils.fillChar+\"]\").test(a.nodeValue));)c=a[b],domUtils.remove(a),a=c}!b&&d(a.nextSibling,\"nextSibling\"),!c&&d(a.previousSibling,\"previousSibling\")},split:function(a,b){var c=a.ownerDocument;if(browser.ie&&b==a.nodeValue.length){var d=c.createTextNode(\"\");return domUtils.insertAfter(a,d)}var e=a.splitText(b);if(browser.ie8){var f=c.createTextNode(\"\");domUtils.insertAfter(e,f),domUtils.remove(f)}return e},isWhitespace:function(a){return!new RegExp(\"[^ \\t\\n\\r\"+domUtils.fillChar+\"]\").test(a.nodeValue)},getXY:function(a){for(var b=0,c=0;a.offsetParent;)c+=a.offsetTop,b+=a.offsetLeft,a=a.offsetParent;return{x:b,y:c}},on:function(a,b,c){var d=utils.isArray(b)?b:utils.trim(b).split(/\\s+/),e=d.length;if(e)for(;e--;)if(b=d[e],a.addEventListener)a.addEventListener(b,c,!1);else{c._d||(c._d={els:[]});var f=b+c.toString(),g=utils.indexOf(c._d.els,a);c._d[f]&&g!=-1||(g==-1&&c._d.els.push(a),c._d[f]||(c._d[f]=function(a){return c.call(a.srcElement,a||window.event)}),a.attachEvent(\"on\"+b,c._d[f]))}a=null},un:function(a,b,c){var d=utils.isArray(b)?b:utils.trim(b).split(/\\s+/),e=d.length;if(e)for(;e--;)if(b=d[e],a.removeEventListener)a.removeEventListener(b,c,!1);else{var f=b+c.toString();try{a.detachEvent(\"on\"+b,c._d?c._d[f]:c)}catch(g){}if(c._d&&c._d[f]){var h=utils.indexOf(c._d.els,a);h!=-1&&c._d.els.splice(h,1),0==c._d.els.length&&delete c._d[f]}}},isSameElement:function(a,b){if(a.tagName!=b.tagName)return!1;var c=a.attributes,d=b.attributes;if(!ie&&c.length!=d.length)return!1;for(var e,f,g=0,h=0,i=0;e=c[i++];){if(\"style\"==e.nodeName){if(e.specified&&g++,domUtils.isSameStyle(a,b))continue;return!1}if(ie){if(!e.specified)continue;g++,f=d.getNamedItem(e.nodeName)}else f=b.attributes[e.nodeName];if(!f.specified||e.nodeValue!=f.nodeValue)return!1}if(ie){for(i=0;f=d[i++];)f.specified&&h++;if(g!=h)return!1}return!0},isSameStyle:function(a,b){var c=a.style.cssText.replace(/( ?; ?)/g,\";\").replace(/( ?: ?)/g,\":\"),d=b.style.cssText.replace(/( ?; ?)/g,\";\").replace(/( ?: ?)/g,\":\");if(browser.opera){if(c=a.style,d=b.style,c.length!=d.length)return!1;for(var e in c)if(!/^(\\d+|csstext)$/i.test(e)&&c[e]!=d[e])return!1;return!0}if(!c||!d)return c==d;if(c=c.split(\";\"),d=d.split(\";\"),c.length!=d.length)return!1;for(var f,g=0;f=c[g++];)if(utils.indexOf(d,f)==-1)return!1;return!0},isBlockElm:function(a){return 1==a.nodeType&&(dtd.$block[a.tagName]||styleBlock[domUtils.getComputedStyle(a,\"display\")])&&!dtd.$nonChild[a.tagName]},isBody:function(a){return a&&1==a.nodeType&&\"body\"==a.tagName.toLowerCase()},breakParent:function(a,b){var c,d,e,f=a,g=a;do{for(f=f.parentNode,d?(c=f.cloneNode(!1),c.appendChild(d),d=c,c=f.cloneNode(!1),c.appendChild(e),e=c):(d=f.cloneNode(!1),e=d.cloneNode(!1));c=g.previousSibling;)d.insertBefore(c,d.firstChild);for(;c=g.nextSibling;)e.appendChild(c);g=f}while(b!==f);return c=b.parentNode,c.insertBefore(d,b),c.insertBefore(e,b),c.insertBefore(a,e),domUtils.remove(b),a},isEmptyInlineElement:function(a){if(1!=a.nodeType||!dtd.$removeEmpty[a.tagName])return 0;for(a=a.firstChild;a;){if(domUtils.isBookmarkNode(a))return 0;if(1==a.nodeType&&!domUtils.isEmptyInlineElement(a)||3==a.nodeType&&!domUtils.isWhitespace(a))return 0;a=a.nextSibling}return 1},trimWhiteTextNode:function(a){function b(b){for(var c;(c=a[b])&&3==c.nodeType&&domUtils.isWhitespace(c);)a.removeChild(c)}b(\"firstChild\"),b(\"lastChild\")},mergeChild:function(a,b,c){for(var d,e=domUtils.getElementsByTagName(a,a.tagName.toLowerCase()),f=0;d=e[f++];)if(d.parentNode&&!domUtils.isBookmarkNode(d))if(\"span\"!=d.tagName.toLowerCase())domUtils.isSameElement(a,d)&&domUtils.remove(d,!0);else{if(a===d.parentNode&&(domUtils.trimWhiteTextNode(a),1==a.childNodes.length)){a.style.cssText=d.style.cssText+\";\"+a.style.cssText,domUtils.remove(d,!0);continue}if(d.style.cssText=a.style.cssText+\";\"+d.style.cssText,c){var g=c.style;if(g){g=g.split(\";\");for(var h,i=0;h=g[i++];)d.style[utils.cssStyleToDomStyle(h.split(\":\")[0])]=h.split(\":\")[1]}}domUtils.isSameStyle(d,a)&&domUtils.remove(d,!0)}},getElementsByTagName:function(a,b,c){if(c&&utils.isString(c)){var d=c;c=function(a){return domUtils.hasClass(a,d)}}b=utils.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var e,f=[],g=0;e=b[g++];)for(var h,i=a.getElementsByTagName(e),j=0;h=i[j++];)c&&!c(h)||f.push(h);return f},mergeToParent:function(a){for(var b=a.parentNode;b&&dtd.$removeEmpty[b.tagName];){if(b.tagName==a.tagName||\"A\"==b.tagName){if(domUtils.trimWhiteTextNode(b),\"SPAN\"==b.tagName&&!domUtils.isSameStyle(b,a)||\"A\"==b.tagName&&\"SPAN\"==a.tagName){if(b.childNodes.length>1||b!==a.parentNode){a.style.cssText=b.style.cssText+\";\"+a.style.cssText,b=b.parentNode;continue}b.style.cssText+=\";\"+a.style.cssText,\"A\"==b.tagName&&(b.style.textDecoration=\"underline\")}if(\"A\"!=b.tagName){b===a.parentNode&&domUtils.remove(a,!0);break}}b=b.parentNode}},mergeSibling:function(a,b,c){function d(a,b,c){var d;if((d=c[a])&&!domUtils.isBookmarkNode(d)&&1==d.nodeType&&domUtils.isSameElement(c,d)){for(;d.firstChild;)\"firstChild\"==b?c.insertBefore(d.lastChild,c.firstChild):c.appendChild(d.firstChild);domUtils.remove(d)}}!b&&d(\"previousSibling\",\"firstChild\",a),!c&&d(\"nextSibling\",\"lastChild\",a)},unSelectable:ie&&browser.ie9below||browser.opera?function(a){a.onselectstart=function(){return!1},a.onclick=a.onkeyup=a.onkeydown=function(){return!1},a.unselectable=\"on\",a.setAttribute(\"unselectable\",\"on\");for(var b,c=0;b=a.all[c++];)switch(b.tagName.toLowerCase()){case\"iframe\":case\"textarea\":case\"input\":case\"select\":break;default:b.unselectable=\"on\",a.setAttribute(\"unselectable\",\"on\")}}:function(a){a.style.MozUserSelect=a.style.webkitUserSelect=a.style.msUserSelect=a.style.KhtmlUserSelect=\"none\"},removeAttributes:function(a,b){b=utils.isArray(b)?b:utils.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0;c=b[d++];){switch(c=attrFix[c]||c){case\"className\":a[c]=\"\";break;case\"style\":a.style.cssText=\"\";var e=a.getAttributeNode(\"style\");!browser.ie&&e&&a.removeAttributeNode(e)}a.removeAttribute(c)}},createElement:function(a,b,c){return domUtils.setAttributes(a.createElement(b),c)},setAttributes:function(a,b){for(var c in b)if(b.hasOwnProperty(c)){var d=b[c];switch(c){case\"class\":a.className=d;break;case\"style\":a.style.cssText=a.style.cssText+\";\"+d;break;case\"innerHTML\":a[c]=d;break;case\"value\":a.value=d;break;default:a.setAttribute(attrFix[c]||c,d)}}return a},getComputedStyle:function(a,b){var c=\"width height top left\";if(c.indexOf(b)>-1)return a[\"offset\"+b.replace(/^\\w/,function(a){return a.toUpperCase()})]+\"px\";if(3==a.nodeType&&(a=a.parentNode),browser.ie&&browser.version<9&&\"font-size\"==b&&!a.style.fontSize&&!dtd.$empty[a.tagName]&&!dtd.$nonChild[a.tagName]){var d=a.ownerDocument.createElement(\"span\");d.style.cssText=\"padding:0;border:0;font-family:simsun;\",d.innerHTML=\".\",a.appendChild(d);var e=d.offsetHeight;return a.removeChild(d),d=null,e+\"px\"}try{var f=domUtils.getStyle(a,b)||(window.getComputedStyle?domUtils.getWindow(a).getComputedStyle(a,\"\").getPropertyValue(b):(a.currentStyle||a.style)[utils.cssStyleToDomStyle(b)])}catch(g){return\"\"}return utils.transUnitToPx(utils.fixColor(b,f))},removeClasses:function(a,b){b=utils.isArray(b)?b:utils.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)e=e.replace(new RegExp(\"\\\\b\"+c+\"\\\\b\"),\"\");e=utils.trim(e).replace(/[ ]{2,}/g,\" \"),e?a.className=e:domUtils.removeAttributes(a,[\"class\"])},addClass:function(a,b){if(a){b=utils.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)new RegExp(\"\\\\b\"+c+\"\\\\b\").test(e)||(e+=\" \"+c);a.className=utils.trim(e)}},hasClass:function(a,b){if(utils.isRegExp(b))return b.test(a.className);b=utils.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)if(!new RegExp(\"\\\\b\"+c+\"\\\\b\",\"i\").test(e))return!1;return d-1==b.length},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},removeStyle:function(a,b){browser.ie?(\"color\"==b&&(b=\"(^|;)\"+b),a.style.cssText=a.style.cssText.replace(new RegExp(b+\"[^:]*:[^;]+;?\",\"ig\"),\"\")):a.style.removeProperty?a.style.removeProperty(b):a.style.removeAttribute(utils.cssStyleToDomStyle(b)),a.style.cssText||domUtils.removeAttributes(a,[\"style\"])},getStyle:function(a,b){var c=a.style[utils.cssStyleToDomStyle(b)];return utils.fixColor(b,c)},setStyle:function(a,b,c){a.style[utils.cssStyleToDomStyle(b)]=c,utils.trim(a.style.cssText)||this.removeAttributes(a,\"style\")},setStyles:function(a,b){for(var c in b)b.hasOwnProperty(c)&&domUtils.setStyle(a,c,b[c])},removeDirtyAttr:function(a){for(var b,c=0,d=a.getElementsByTagName(\"*\");b=d[c++];)b.removeAttribute(\"_moz_dirty\");a.removeAttribute(\"_moz_dirty\")},getChildCount:function(a,b){var c=0,d=a.firstChild;for(b=b||function(){return 1};d;)b(d)&&c++,d=d.nextSibling;return c},isEmptyNode:function(a){return!a.firstChild||0==domUtils.getChildCount(a,function(a){return!domUtils.isBr(a)&&!domUtils.isBookmarkNode(a)&&!domUtils.isWhitespace(a)})},clearSelectedArr:function(a){for(var b;b=a.pop();)domUtils.removeAttributes(b,[\"class\"])},scrollToView:function(a,b,c){var d=function(){var a=b.document,c=\"CSS1Compat\"==a.compatMode;return{width:(c?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(c?a.documentElement.clientHeight:a.body.clientHeight)||0}},e=function(a){if(\"pageXOffset\"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};var b=a.document;return{x:b.documentElement.scrollLeft||b.body.scrollLeft||0,y:b.documentElement.scrollTop||b.body.scrollTop||0}},f=d().height,g=f*-1+c;g+=a.offsetHeight||0;var h=domUtils.getXY(a);g+=h.y;var i=e(b).y;(g>i||g<i-f)&&b.scrollTo(0,g+(g<0?-20:20))},isBr:function(a){return 1==a.nodeType&&\"BR\"==a.tagName},isFillChar:function(a,b){if(3!=a.nodeType)return!1;var c=a.nodeValue;return b?new RegExp(\"^\"+domUtils.fillChar).test(c):!c.replace(new RegExp(domUtils.fillChar,\"g\"),\"\").length},isStartInblock:function(a){var b,c=a.cloneRange(),d=0,e=c.startContainer;if(1==e.nodeType&&e.childNodes[c.startOffset]){e=e.childNodes[c.startOffset];for(var f=e.previousSibling;f&&domUtils.isFillChar(f);)e=f,f=f.previousSibling}for(this.isFillChar(e,!0)&&1==c.startOffset&&(c.setStartBefore(e),e=c.startContainer);e&&domUtils.isFillChar(e);)b=e,e=e.previousSibling;for(b&&(c.setStartBefore(b),e=c.startContainer),1==e.nodeType&&domUtils.isEmptyNode(e)&&1==c.startOffset&&c.setStart(e,0).collapse(!0);!c.startOffset;){if(e=c.startContainer,domUtils.isBlockElm(e)||domUtils.isBody(e)){d=1;break}var g,f=c.startContainer.previousSibling;if(f){for(;f&&domUtils.isFillChar(f);)g=f,f=f.previousSibling;g?c.setStartBefore(g):c.setStartBefore(c.startContainer)}else c.setStartBefore(c.startContainer)}return d&&!domUtils.isBody(c.startContainer)?1:0},isEmptyBlock:function(a,b){if(1!=a.nodeType)return 0;if(b=b||new RegExp(\"[  \\t\\r\\n\"+domUtils.fillChar+\"]\",\"g\"),a[browser.ie?\"innerText\":\"textContent\"].replace(b,\"\").length>0)return 0;for(var c in dtd.$isNotEmpty)if(a.getElementsByTagName(c).length)return 0;return 1},setViewportOffset:function(a,b){var c=0|parseInt(a.style.left),d=0|parseInt(a.style.top),e=a.getBoundingClientRect(),f=b.left-e.left,g=b.top-e.top;f&&(a.style.left=c+f+\"px\"),g&&(a.style.top=d+g+\"px\")},fillNode:function(a,b){var c=browser.ie?a.createTextNode(domUtils.fillChar):a.createElement(\"br\");b.innerHTML=\"\",b.appendChild(c)},moveChild:function(a,b,c){for(;a.firstChild;)c&&b.firstChild?b.insertBefore(a.lastChild,b.firstChild):b.appendChild(a.firstChild)},hasNoAttributes:function(a){return browser.ie?/^<\\w+\\s*?>/.test(a.outerHTML):0==a.attributes.length},isCustomeNode:function(a){return 1==a.nodeType&&a.getAttribute(\"_ue_custom_node_\")},isTagNode:function(a,b){return 1==a.nodeType&&new RegExp(\"\\\\b\"+a.tagName+\"\\\\b\",\"i\").test(b)},filterNodeList:function(a,b,c){var d=[];if(!utils.isFunction(b)){var e=b;b=function(a){return utils.indexOf(utils.isArray(e)?e:e.split(\" \"),a.tagName.toLowerCase())!=-1}}return utils.each(a,function(a){b(a)&&d.push(a)}),0==d.length?null:1!=d.length&&c?d:d[0]},isInNodeEndBoundary:function(a,b){var c=a.startContainer;if(3==c.nodeType&&a.startOffset!=c.nodeValue.length)return 0;if(1==c.nodeType&&a.startOffset!=c.childNodes.length)return 0;for(;c!==b;){if(c.nextSibling)return 0;c=c.parentNode}return 1},isBoundaryNode:function(a,b){for(var c;!domUtils.isBody(a);)if(c=a,a=a.parentNode,c!==a[b])return!1;return!0},fillHtml:browser.ie11below?\"&nbsp;\":\"<br/>\"},fillCharReg=new RegExp(domUtils.fillChar,\"g\");!function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer===a.endContainer&&a.startOffset==a.endOffset}function b(a){return!a.collapsed&&1==a.startContainer.nodeType&&a.startContainer===a.endContainer&&a.endOffset-a.startOffset==1}function c(b,c,d,e){return 1==c.nodeType&&(dtd.$empty[c.tagName]||dtd.$nonChild[c.tagName])&&(d=domUtils.getNodeIndex(c)+(b?0:1),c=c.parentNode),b?(e.startContainer=c,e.startOffset=d,e.endContainer||e.collapse(!0)):(e.endContainer=c,e.endOffset=d,e.startContainer||e.collapse(!1)),a(e),e}function d(a,b){var c,d,e=a.startContainer,f=a.endContainer,g=a.startOffset,h=a.endOffset,i=a.document,j=i.createDocumentFragment();if(1==e.nodeType&&(e=e.childNodes[g]||(c=e.appendChild(i.createTextNode(\"\")))),1==f.nodeType&&(f=f.childNodes[h]||(d=f.appendChild(i.createTextNode(\"\")))),e===f&&3==e.nodeType)return j.appendChild(i.createTextNode(e.substringData(g,h-g))),b&&(e.deleteData(g,h-g),a.collapse(!0)),j;for(var k,l,m=j,n=domUtils.findParents(e,!0),o=domUtils.findParents(f,!0),p=0;n[p]==o[p];)p++;for(var q,r=p;q=n[r];r++){for(k=q.nextSibling,q==e?c||(3==a.startContainer.nodeType?(m.appendChild(i.createTextNode(e.nodeValue.slice(g))),b&&e.deleteData(g,e.nodeValue.length-g)):m.appendChild(b?e:e.cloneNode(!0))):(l=q.cloneNode(!1),m.appendChild(l));k&&k!==f&&k!==o[r];)q=k.nextSibling,m.appendChild(b?k:k.cloneNode(!0)),k=q;m=l}m=j,n[p]||(m.appendChild(n[p-1].cloneNode(!1)),m=m.firstChild);for(var s,r=p;s=o[r];r++){if(k=s.previousSibling,s==f?d||3!=a.endContainer.nodeType||(m.appendChild(i.createTextNode(f.substringData(0,h))),b&&f.deleteData(0,h)):(l=s.cloneNode(!1),m.appendChild(l)),r!=p||!n[p])for(;k&&k!==e;)s=k.previousSibling,m.insertBefore(b?k:k.cloneNode(!0),m.firstChild),k=s;m=l}return b&&a.setStartBefore(o[p]?n[p]?o[p]:n[p-1]:o[p-1]).collapse(!0),c&&domUtils.remove(c),d&&domUtils.remove(d),j}function e(a,b){try{if(g&&domUtils.inDoc(g,a))if(g.nodeValue.replace(fillCharReg,\"\").length)g.nodeValue=g.nodeValue.replace(fillCharReg,\"\");else{var c=g.parentNode;for(domUtils.remove(g);c&&domUtils.isEmptyInlineElement(c)&&(browser.safari?!(domUtils.getPosition(c,b)&domUtils.POSITION_CONTAINS):!c.contains(b));)g=c.parentNode,domUtils.remove(c),c=g}}catch(d){}}function f(a,b){var c;for(a=a[b];a&&domUtils.isFillChar(a);)c=a[b],\ndomUtils.remove(a),a=c}var g,h=0,i=domUtils.fillChar,j=dom.Range=function(a){var b=this;b.startContainer=b.startOffset=b.endContainer=b.endOffset=null,b.document=a,b.collapsed=!0};j.prototype={cloneContents:function(){return this.collapsed?null:d(this,0)},deleteContents:function(){var a;return this.collapsed||d(this,1),browser.webkit&&(a=this.startContainer,3!=a.nodeType||a.nodeValue.length||(this.setStartBefore(a).collapse(!0),domUtils.remove(a))),this},extractContents:function(){return this.collapsed?null:d(this,2)},setStart:function(a,b){return c(!0,a,b,this)},setEnd:function(a,b){return c(!1,a,b,this)},setStartAfter:function(a){return this.setStart(a.parentNode,domUtils.getNodeIndex(a)+1)},setStartBefore:function(a){return this.setStart(a.parentNode,domUtils.getNodeIndex(a))},setEndAfter:function(a){return this.setEnd(a.parentNode,domUtils.getNodeIndex(a)+1)},setEndBefore:function(a){return this.setEnd(a.parentNode,domUtils.getNodeIndex(a))},setStartAtFirst:function(a){return this.setStart(a,0)},setStartAtLast:function(a){return this.setStart(a,3==a.nodeType?a.nodeValue.length:a.childNodes.length)},setEndAtFirst:function(a){return this.setEnd(a,0)},setEndAtLast:function(a){return this.setEnd(a,3==a.nodeType?a.nodeValue.length:a.childNodes.length)},selectNode:function(a){return this.setStartBefore(a).setEndAfter(a)},selectNodeContents:function(a){return this.setStart(a,0).setEndAtLast(a)},cloneRange:function(){var a=this;return new j(a.document).setStart(a.startContainer,a.startOffset).setEnd(a.endContainer,a.endOffset)},collapse:function(a){var b=this;return a?(b.endContainer=b.startContainer,b.endOffset=b.startOffset):(b.startContainer=b.endContainer,b.startOffset=b.endOffset),b.collapsed=!0,b},shrinkBoundary:function(a){function b(a){return 1==a.nodeType&&!domUtils.isBookmarkNode(a)&&!dtd.$empty[a.tagName]&&!dtd.$nonChild[a.tagName]}for(var c,d=this,e=d.collapsed;1==d.startContainer.nodeType&&(c=d.startContainer.childNodes[d.startOffset])&&b(c);)d.setStart(c,0);if(e)return d.collapse(!0);if(!a)for(;1==d.endContainer.nodeType&&d.endOffset>0&&(c=d.endContainer.childNodes[d.endOffset-1])&&b(c);)d.setEnd(c,c.childNodes.length);return d},getCommonAncestor:function(a,c){var d=this,e=d.startContainer,f=d.endContainer;return e===f?a&&b(this)&&(e=e.childNodes[d.startOffset],1==e.nodeType)?e:c&&3==e.nodeType?e.parentNode:e:domUtils.getCommonAncestor(e,f)},trimBoundary:function(a){this.txtToElmBoundary();var b=this.startContainer,c=this.startOffset,d=this.collapsed,e=this.endContainer;if(3==b.nodeType){if(0==c)this.setStartBefore(b);else if(c>=b.nodeValue.length)this.setStartAfter(b);else{var f=domUtils.split(b,c);b===e?this.setEnd(f,this.endOffset-c):b.parentNode===e&&(this.endOffset+=1),this.setStartBefore(f)}if(d)return this.collapse(!0)}return a||(c=this.endOffset,e=this.endContainer,3==e.nodeType&&(0==c?this.setEndBefore(e):(c<e.nodeValue.length&&domUtils.split(e,c),this.setEndAfter(e)))),this},txtToElmBoundary:function(a){function b(a,b){var c=a[b+\"Container\"],d=a[b+\"Offset\"];3==c.nodeType&&(d?d>=c.nodeValue.length&&a[\"set\"+b.replace(/(\\w)/,function(a){return a.toUpperCase()})+\"After\"](c):a[\"set\"+b.replace(/(\\w)/,function(a){return a.toUpperCase()})+\"Before\"](c))}return!a&&this.collapsed||(b(this,\"start\"),b(this,\"end\")),this},insertNode:function(a){var b=a,c=1;11==a.nodeType&&(b=a.firstChild,c=a.childNodes.length),this.trimBoundary(!0);var d=this.startContainer,e=this.startOffset,f=d.childNodes[e];return f?d.insertBefore(a,f):d.appendChild(a),b.parentNode===this.endContainer&&(this.endOffset=this.endOffset+c),this.setStartBefore(b)},setCursor:function(a,b){return this.collapse(!a).select(b)},createBookmark:function(a,b){var c,d=this.document.createElement(\"span\");return d.style.cssText=\"display:none;line-height:0px;\",d.appendChild(this.document.createTextNode(\"‍\")),d.id=\"_baidu_bookmark_start_\"+(b?\"\":h++),this.collapsed||(c=d.cloneNode(!0),c.id=\"_baidu_bookmark_end_\"+(b?\"\":h++)),this.insertNode(d),c&&this.collapse().insertNode(c).setEndBefore(c),this.setStartAfter(d),{start:a?d.id:d,end:c?a?c.id:c:null,id:a}},moveToBookmark:function(a){var b=a.id?this.document.getElementById(a.start):a.start,c=a.end&&a.id?this.document.getElementById(a.end):a.end;return this.setStartBefore(b),domUtils.remove(b),c?(this.setEndBefore(c),domUtils.remove(c)):this.collapse(!0),this},enlarge:function(a,b){var c,d,e=domUtils.isBody,f=this.document.createTextNode(\"\");if(a){for(d=this.startContainer,1==d.nodeType?d.childNodes[this.startOffset]?c=d=d.childNodes[this.startOffset]:(d.appendChild(f),c=d=f):c=d;;){if(domUtils.isBlockElm(d)){for(d=c;(c=d.previousSibling)&&!domUtils.isBlockElm(c);)d=c;this.setStartBefore(d);break}c=d,d=d.parentNode}for(d=this.endContainer,1==d.nodeType?((c=d.childNodes[this.endOffset])?d.insertBefore(f,c):d.appendChild(f),c=d=f):c=d;;){if(domUtils.isBlockElm(d)){for(d=c;(c=d.nextSibling)&&!domUtils.isBlockElm(c);)d=c;this.setEndAfter(d);break}c=d,d=d.parentNode}f.parentNode===this.endContainer&&this.endOffset--,domUtils.remove(f)}if(!this.collapsed){for(;!(0!=this.startOffset||b&&b(this.startContainer)||e(this.startContainer));)this.setStartBefore(this.startContainer);for(;!(this.endOffset!=(1==this.endContainer.nodeType?this.endContainer.childNodes.length:this.endContainer.nodeValue.length)||b&&b(this.endContainer)||e(this.endContainer));)this.setEndAfter(this.endContainer)}return this},enlargeToBlockElm:function(a){for(;!domUtils.isBlockElm(this.startContainer);)this.setStartBefore(this.startContainer);if(!a)for(;!domUtils.isBlockElm(this.endContainer);)this.setEndAfter(this.endContainer);return this},adjustmentBoundary:function(){if(!this.collapsed){for(;!domUtils.isBody(this.startContainer)&&this.startOffset==this.startContainer[3==this.startContainer.nodeType?\"nodeValue\":\"childNodes\"].length&&this.startContainer[3==this.startContainer.nodeType?\"nodeValue\":\"childNodes\"].length;)this.setStartAfter(this.startContainer);for(;!domUtils.isBody(this.endContainer)&&!this.endOffset&&this.endContainer[3==this.endContainer.nodeType?\"nodeValue\":\"childNodes\"].length;)this.setEndBefore(this.endContainer)}return this},applyInlineStyle:function(a,b,c){if(this.collapsed)return this;this.trimBoundary().enlarge(!1,function(a){return 1==a.nodeType&&domUtils.isBlockElm(a)}).adjustmentBoundary();for(var d,e,f=this.createBookmark(),g=f.end,h=function(a){return 1==a.nodeType?\"br\"!=a.tagName.toLowerCase():!domUtils.isWhitespace(a)},i=domUtils.getNextDomNode(f.start,!1,h),j=this.cloneRange();i&&domUtils.getPosition(i,g)&domUtils.POSITION_PRECEDING;)if(3==i.nodeType||dtd[a][i.tagName]){for(j.setStartBefore(i),d=i;d&&(3==d.nodeType||dtd[a][d.tagName])&&d!==g;)e=d,d=domUtils.getNextDomNode(d,1==d.nodeType,null,function(b){return dtd[a][b.tagName]});var k,l=j.setEndAfter(e).extractContents();if(c&&c.length>0){var m,n;n=m=c[0].cloneNode(!1);for(var o,p=1;o=c[p++];)m.appendChild(o.cloneNode(!1)),m=m.firstChild;k=m}else k=j.document.createElement(a);b&&domUtils.setAttributes(k,b),k.appendChild(l),\"SPAN\"==k.tagName&&b&&b.style&&utils.each(k.getElementsByTagName(\"span\"),function(a){a.style.cssText=a.style.cssText+\";\"+b.style}),j.insertNode(c?n:k);var q;if(\"span\"==a&&b.style&&/text\\-decoration/.test(b.style)&&(q=domUtils.findParentByTagName(k,\"a\",!0))?(domUtils.setAttributes(q,b),domUtils.remove(k,!0),k=q):(domUtils.mergeSibling(k),domUtils.clearEmptySibling(k)),domUtils.mergeChild(k,b),i=domUtils.getNextDomNode(k,!1,h),domUtils.mergeToParent(k),d===g)break}else i=domUtils.getNextDomNode(i,!0,h);return this.moveToBookmark(f)},removeInlineStyle:function(a){if(this.collapsed)return this;a=utils.isArray(a)?a:[a],this.shrinkBoundary().adjustmentBoundary();for(var b=this.startContainer,c=this.endContainer;;){if(1==b.nodeType){if(utils.indexOf(a,b.tagName.toLowerCase())>-1)break;if(\"body\"==b.tagName.toLowerCase()){b=null;break}}b=b.parentNode}for(;;){if(1==c.nodeType){if(utils.indexOf(a,c.tagName.toLowerCase())>-1)break;if(\"body\"==c.tagName.toLowerCase()){c=null;break}}c=c.parentNode}var d,e,f=this.createBookmark();b&&(e=this.cloneRange().setEndBefore(f.start).setStartBefore(b),d=e.extractContents(),e.insertNode(d),domUtils.clearEmptySibling(b,!0),b.parentNode.insertBefore(f.start,b)),c&&(e=this.cloneRange().setStartAfter(f.end).setEndAfter(c),d=e.extractContents(),e.insertNode(d),domUtils.clearEmptySibling(c,!1,!0),c.parentNode.insertBefore(f.end,c.nextSibling));for(var g,h=domUtils.getNextDomNode(f.start,!1,function(a){return 1==a.nodeType});h&&h!==f.end;)g=domUtils.getNextDomNode(h,!0,function(a){return 1==a.nodeType}),utils.indexOf(a,h.tagName.toLowerCase())>-1&&domUtils.remove(h,!0),h=g;return this.moveToBookmark(f)},getClosedNode:function(){var a;if(!this.collapsed){var c=this.cloneRange().adjustmentBoundary().shrinkBoundary();if(b(c)){var d=c.startContainer.childNodes[c.startOffset];d&&1==d.nodeType&&(dtd.$empty[d.tagName]||dtd.$nonChild[d.tagName])&&(a=d)}}return a},select:browser.ie?function(a,b){var c;this.collapsed||this.shrinkBoundary();var d=this.getClosedNode();if(d&&!b){try{c=this.document.body.createControlRange(),c.addElement(d),c.select()}catch(h){}return this}var j,k=this.createBookmark(),l=k.start;if(c=this.document.body.createTextRange(),c.moveToElementText(l),c.moveStart(\"character\",1),this.collapsed){if(!a&&3!=this.startContainer.nodeType){var m=this.document.createTextNode(i),n=this.document.createElement(\"span\");n.appendChild(this.document.createTextNode(i)),l.parentNode.insertBefore(n,l),l.parentNode.insertBefore(m,l),e(this.document,m),g=m,f(n,\"previousSibling\"),f(l,\"nextSibling\"),c.moveStart(\"character\",-1),c.collapse(!0)}}else{var o=this.document.body.createTextRange();j=k.end,o.moveToElementText(j),c.setEndPoint(\"EndToEnd\",o)}this.moveToBookmark(k),n&&domUtils.remove(n);try{c.select()}catch(h){}return this}:function(a){function b(a){function b(b,c,d){3==b.nodeType&&b.nodeValue.length<c&&(a[d+\"Offset\"]=b.nodeValue.length)}b(a.startContainer,a.startOffset,\"start\"),b(a.endContainer,a.endOffset,\"end\")}var c,d=domUtils.getWindow(this.document),h=d.getSelection();if(browser.gecko?this.document.body.focus():d.focus(),h){if(h.removeAllRanges(),this.collapsed&&!a){var j=this.startContainer,k=j;1==j.nodeType&&(k=j.childNodes[this.startOffset]),3==j.nodeType&&this.startOffset||(k?k.previousSibling&&3==k.previousSibling.nodeType:j.lastChild&&3==j.lastChild.nodeType)||(c=this.document.createTextNode(i),this.insertNode(c),e(this.document,c),f(c,\"previousSibling\"),f(c,\"nextSibling\"),g=c,this.setStart(c,browser.webkit?1:0).collapse(!0))}var l=this.document.createRange();if(this.collapsed&&browser.opera&&1==this.startContainer.nodeType){var k=this.startContainer.childNodes[this.startOffset];if(k){for(;k&&domUtils.isBlockElm(k)&&1==k.nodeType&&k.childNodes[0];)k=k.childNodes[0];k&&this.setStartBefore(k).collapse(!0)}else k=this.startContainer.lastChild,k&&domUtils.isBr(k)&&this.setStartBefore(k).collapse(!0)}b(this),l.setStart(this.startContainer,this.startOffset),l.setEnd(this.endContainer,this.endOffset),h.addRange(l)}return this},scrollToView:function(a,b){a=a?window:domUtils.getWindow(this.document);var c=this,d=c.document.createElement(\"span\");return d.innerHTML=\"&nbsp;\",c.cloneRange().insertNode(d),domUtils.scrollToView(d,a,b),domUtils.remove(d),c},inFillChar:function(){var a=this.startContainer;return!(!this.collapsed||3!=a.nodeType||a.nodeValue.replace(new RegExp(\"^\"+domUtils.fillChar),\"\").length+1!=a.nodeValue.length)},createAddress:function(a,b){function c(a){for(var c,d=a?e.startContainer:e.endContainer,f=domUtils.findParents(d,!0,function(a){return!domUtils.isBody(a)}),g=[],h=0;c=f[h++];)g.push(domUtils.getNodeIndex(c,b));var i=0;if(b)if(3==d.nodeType){for(var j=d.previousSibling;j&&3==j.nodeType;)i+=j.nodeValue.replace(fillCharReg,\"\").length,j=j.previousSibling;i+=a?e.startOffset:e.endOffset}else if(d=d.childNodes[a?e.startOffset:e.endOffset])i=domUtils.getNodeIndex(d,b);else{d=a?e.startContainer:e.endContainer;for(var k=d.firstChild;k;)if(domUtils.isFillChar(k))k=k.nextSibling;else if(i++,3==k.nodeType)for(;k&&3==k.nodeType;)k=k.nextSibling;else k=k.nextSibling}else i=a?domUtils.isFillChar(d)?0:e.startOffset:e.endOffset;return i<0&&(i=0),g.push(i),g}var d={},e=this;return d.startAddress=c(!0),a||(d.endAddress=e.collapsed?[].concat(d.startAddress):c()),d},moveToAddress:function(a,b){function c(a,b){for(var c,e,f,g=d.document.body,h=0,i=a.length;h<i;h++)if(f=a[h],c=g,g=g.childNodes[f],!g){e=f;break}b?g?d.setStartBefore(g):d.setStart(c,e):g?d.setEndBefore(g):d.setEnd(c,e)}var d=this;return c(a.startAddress,!0),!b&&a.endAddress&&c(a.endAddress),d},equals:function(a){for(var b in this)if(this.hasOwnProperty(b)&&this[b]!==a[b])return!1;return!0},traversal:function(a,b){if(this.collapsed)return this;for(var c=this.createBookmark(),d=c.end,e=domUtils.getNextDomNode(c.start,!1,b);e&&e!==d&&domUtils.getPosition(e,d)&domUtils.POSITION_PRECEDING;){var f=domUtils.getNextDomNode(e,!1,b);a(e),e=f}return this.moveToBookmark(c)}}}(),function(){function a(a,b){var c=domUtils.getNodeIndex;a=a.duplicate(),a.collapse(b);var d=a.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e,f,g=d.children,h=a.duplicate(),i=0,j=g.length-1,k=-1;i<=j;){k=Math.floor((i+j)/2),e=g[k],h.moveToElementText(e);var l=h.compareEndPoints(\"StartToStart\",a);if(l>0)j=k-1;else{if(!(l<0))return{container:d,offset:c(e)};i=k+1}}if(k==-1){if(h.moveToElementText(d),h.setEndPoint(\"StartToStart\",a),f=h.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length,g=d.childNodes,!f)return e=g[g.length-1],{container:e,offset:e.nodeValue.length};for(var m=g.length;f>0;)f-=g[--m].nodeValue.length;return{container:g[m],offset:-f}}if(h.collapse(l>0),h.setEndPoint(l>0?\"StartToStart\":\"EndToStart\",a),f=h.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length,!f)return dtd.$empty[e.tagName]||dtd.$nonChild[e.tagName]?{container:d,offset:c(e)+(l>0?0:1)}:{container:e,offset:l>0?0:e.childNodes.length};for(;f>0;)try{var n=e;e=e[l>0?\"previousSibling\":\"nextSibling\"],f-=e.nodeValue.length}catch(o){return{container:d,offset:c(n)}}return{container:e,offset:l>0?-f:e.nodeValue.length+f}}function b(b,c){if(b.item)c.selectNode(b.item(0));else{var d=a(b,!0);c.setStart(d.container,d.offset),0!=b.compareEndPoints(\"StartToEnd\",b)&&(d=a(b,!1),c.setEnd(d.container,d.offset))}return c}function c(a){var b;try{b=a.getNative().createRange()}catch(c){return null}var d=b.item?b.item(0):b.parentElement();return(d.ownerDocument||d)===a.document?b:null}var d=dom.Selection=function(a){var b,d=this;d.document=a,browser.ie9below&&(b=domUtils.getWindow(a).frameElement,domUtils.on(b,\"beforedeactivate\",function(){d._bakIERange=d.getIERange()}),domUtils.on(b,\"activate\",function(){try{!c(d)&&d._bakIERange&&d._bakIERange.select()}catch(a){}d._bakIERange=null})),b=a=null};d.prototype={rangeInBody:function(a,b){var c=browser.ie9below||b?a.item?a.item():a.parentElement():a.startContainer;return c===this.document.body||domUtils.inDoc(c,this.document)},getNative:function(){var a=this.document;try{return a?browser.ie9below?a.selection:domUtils.getWindow(a).getSelection():null}catch(b){return null}},getIERange:function(){var a=c(this);return!a&&this._bakIERange?this._bakIERange:a},cache:function(){this.clear(),this._cachedRange=this.getRange(),this._cachedStartElement=this.getStart(),this._cachedStartElementPath=this.getStartElementPath()},getStartElementPath:function(){if(this._cachedStartElementPath)return this._cachedStartElementPath;var a=this.getStart();return a?domUtils.findParents(a,!0,null,!0):[]},clear:function(){this._cachedStartElementPath=this._cachedRange=this._cachedStartElement=null},isFocus:function(){try{if(browser.ie9below){var a=c(this);return!(!a||!this.rangeInBody(a))}return!!this.getNative().rangeCount}catch(b){return!1}},getRange:function(){function a(a){for(var b=c.document.body.firstChild,d=a.collapsed;b&&b.firstChild;)a.setStart(b,0),b=b.firstChild;a.startContainer||a.setStart(c.document.body,0),d&&a.collapse(!0)}var c=this;if(null!=c._cachedRange)return this._cachedRange;var d=new baidu.editor.dom.Range(c.document);if(browser.ie9below){var e=c.getIERange();if(e)try{b(e,d)}catch(f){a(d)}else a(d)}else{var g=c.getNative();if(g&&g.rangeCount){var h=g.getRangeAt(0),i=g.getRangeAt(g.rangeCount-1);d.setStart(h.startContainer,h.startOffset).setEnd(i.endContainer,i.endOffset),d.collapsed&&domUtils.isBody(d.startContainer)&&!d.startOffset&&a(d)}else{if(this._bakRange&&domUtils.inDoc(this._bakRange.startContainer,this.document))return this._bakRange;a(d)}}return this._bakRange=d},getStart:function(){if(this._cachedStartElement)return this._cachedStartElement;var a,b,c,d,e=browser.ie9below?this.getIERange():this.getRange();if(browser.ie9below){if(!e)return this.document.body.firstChild;if(e.item)return e.item(0);for(a=e.duplicate(),a.text.length>0&&a.moveStart(\"character\",1),a.collapse(1),b=a.parentElement(),d=c=e.parentElement();c=c.parentNode;)if(c==b){b=d;break}}else if(e.shrinkBoundary(),b=e.startContainer,1==b.nodeType&&b.hasChildNodes()&&(b=b.childNodes[Math.min(b.childNodes.length-1,e.startOffset)]),3==b.nodeType)return b.parentNode;return b},getText:function(){var a,b;return this.isFocus()&&(a=this.getNative())?(b=browser.ie9below?a.createRange():a.getRangeAt(0),browser.ie9below?b.text:b.toString()):\"\"},clearRange:function(){this.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]()}}}(),function(){function a(a,b){var c;if(b.options.textarea)if(utils.isString(b.options.textarea)){for(var d,e=0,f=domUtils.getElementsByTagName(a,\"textarea\");d=f[e++];)if(d.id==\"ueditor_textarea_\"+b.options.textarea){c=d;break}}else c=b.textarea;c||(a.appendChild(c=domUtils.createElement(document,\"textarea\",{name:b.options.textarea,id:\"ueditor_textarea_\"+b.options.textarea,style:\"display:none\"})),b.textarea=c),!c.getAttribute(\"name\")&&c.setAttribute(\"name\",b.options.textarea),c.value=b.hasContents()?b.options.allHtmlEnabled?b.getAllHtml():b.getContent(null,null,!0):\"\"}function b(a){for(var b in a)return b}function c(a){a.langIsReady=!0,a.fireEvent(\"langReady\")}var d,e=0,f=UE.Editor=function(a){var d=this;d.uid=e++,EventBase.call(d),d.commands={},d.options=utils.extend(utils.clone(a||{}),UEDITOR_CONFIG,!0),d.shortcutkeys={},d.inputRules=[],d.outputRules=[],d.setOpt(f.defaultOptions(d)),d.loadServerConfig(),utils.isEmptyObject(UE.I18N)?utils.loadFile(document,{src:d.options.langPath+d.options.lang+\"/\"+d.options.lang+\".js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){UE.plugin.load(d),c(d)}):(d.options.lang=b(UE.I18N),UE.plugin.load(d),c(d)),UE.instants[\"ueditorInstant\"+d.uid]=d};f.prototype={registerCommand:function(a,b){this.commands[a]=b},ready:function(a){var b=this;a&&(b.isReady?a.apply(b):b.addListener(\"ready\",a))},setOpt:function(a,b){var c={};utils.isString(a)?c[a]=b:c=a,utils.extend(this.options,c,!0)},getOpt:function(a){return this.options[a]},destroy:function(){var a=this;a.fireEvent(\"destroy\");var b=a.container.parentNode,c=a.textarea;c?c.style.display=\"\":(c=document.createElement(\"textarea\"),b.parentNode.insertBefore(c,b)),c.style.width=a.iframe.offsetWidth+\"px\",c.style.height=a.iframe.offsetHeight+\"px\",c.value=a.getContent(),c.id=a.key,b.innerHTML=\"\",domUtils.remove(b);var d=a.key;for(var e in a)a.hasOwnProperty(e)&&delete this[e];UE.delEditor(d)},render:function(a){var b=this,c=b.options,d=function(b){return parseInt(domUtils.getComputedStyle(a,b))};if(utils.isString(a)&&(a=document.getElementById(a)),a){c.initialFrameWidth?c.minFrameWidth=c.initialFrameWidth:c.minFrameWidth=c.initialFrameWidth=a.offsetWidth,c.initialFrameHeight?c.minFrameHeight=c.initialFrameHeight:c.initialFrameHeight=c.minFrameHeight=a.offsetHeight,a.style.width=/%$/.test(c.initialFrameWidth)?\"100%\":c.initialFrameWidth-d(\"padding-left\")-d(\"padding-right\")+\"px\",a.style.height=/%$/.test(c.initialFrameHeight)?\"100%\":c.initialFrameHeight-d(\"padding-top\")-d(\"padding-bottom\")+\"px\",a.style.zIndex=c.zIndex;var e=(ie&&browser.version<9?\"\":\"<!DOCTYPE html>\")+\"<html xmlns='http://www.w3.org/1999/xhtml' class='view' ><head><style type='text/css'>.view{padding:0;word-wrap:break-word;cursor:text;height:90%;}\\nbody{margin:8px;font-family:sans-serif;font-size:16px;}p{margin:5px 0;}</style>\"+(c.iframeCssUrl?\"<link rel='stylesheet' type='text/css' href='\"+utils.unhtml(c.iframeCssUrl)+\"'/>\":\"\")+(c.initialStyle?\"<style>\"+c.initialStyle+\"</style>\":\"\")+\"</head><body class='view' ></body><script type='text/javascript' \"+(ie?\"defer='defer'\":\"\")+\" id='_initialScript'>setTimeout(function(){editor = window.parent.UE.instants['ueditorInstant\"+b.uid+\"'];editor._setup(document);},0);var _tmpScript = document.getElementById('_initialScript');_tmpScript.parentNode.removeChild(_tmpScript);</script>\"+(c.iframeJsUrl?\"<script type='text/javascript' src='\"+utils.unhtml(c.iframeJsUrl)+\"'></script>\":\"\")+\"</html>\";a.appendChild(domUtils.createElement(document,\"iframe\",{id:\"ueditor_\"+b.uid,width:\"100%\",height:\"100%\",frameborder:\"0\",src:\"javascript:void(function(){document.open();\"+(c.customDomain&&document.domain!=location.hostname?'document.domain=\"'+document.domain+'\";':\"\")+'document.write(\"'+e+'\");document.close();}())'})),a.style.overflow=\"hidden\",setTimeout(function(){/%$/.test(c.initialFrameWidth)&&(c.minFrameWidth=c.initialFrameWidth=a.offsetWidth),/%$/.test(c.initialFrameHeight)&&(c.minFrameHeight=c.initialFrameHeight=a.offsetHeight,a.style.height=c.initialFrameHeight+\"px\")})}},_setup:function(b){var c=this,d=c.options;ie?(b.body.disabled=!0,b.body.contentEditable=!0,b.body.disabled=!1):b.body.contentEditable=!0,b.body.spellcheck=!1,c.document=b,c.window=b.defaultView||b.parentWindow,c.iframe=c.window.frameElement,c.body=b.body,c.selection=new dom.Selection(b);var e;browser.gecko&&(e=this.selection.getNative())&&e.removeAllRanges(),this._initEvents();for(var f=this.iframe.parentNode;!domUtils.isBody(f);f=f.parentNode)if(\"FORM\"==f.tagName){c.form=f,c.options.autoSyncData?domUtils.on(c.window,\"blur\",function(){a(f,c)}):domUtils.on(f,\"submit\",function(){a(this,c)});break}if(d.initialContent)if(d.autoClearinitialContent){var g=c.execCommand;c.execCommand=function(){return c.fireEvent(\"firstBeforeExecCommand\"),g.apply(c,arguments)},this._setDefaultContent(d.initialContent)}else this.setContent(d.initialContent,!1,!0);domUtils.isEmptyNode(c.body)&&(c.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\"),d.focus&&setTimeout(function(){c.focus(c.options.focusInEnd),!c.options.autoClearinitialContent&&c._selectionChange()},0),c.container||(c.container=this.iframe.parentNode),d.fullscreen&&c.ui&&c.ui.setFullScreen(!0);try{c.document.execCommand(\"2D-position\",!1,!1)}catch(h){}try{c.document.execCommand(\"enableInlineTableEditing\",!1,!1)}catch(h){}try{c.document.execCommand(\"enableObjectResizing\",!1,!1)}catch(h){}c._bindshortcutKeys(),c.isReady=1,c.fireEvent(\"ready\"),d.onready&&d.onready.call(c),browser.ie9below||domUtils.on(c.window,[\"blur\",\"focus\"],function(a){if(\"blur\"==a.type){c._bakRange=c.selection.getRange();try{c._bakNativeRange=c.selection.getNative().getRangeAt(0),c.selection.getNative().removeAllRanges()}catch(a){c._bakNativeRange=null}}else try{c._bakRange&&c._bakRange.select()}catch(a){}}),browser.gecko&&browser.version<=10902&&(c.body.contentEditable=!1,setTimeout(function(){c.body.contentEditable=!0},100),setInterval(function(){c.body.style.height=c.iframe.offsetHeight-20+\"px\"},100)),!d.isShow&&c.setHide(),d.readonly&&c.setDisabled()},sync:function(b){var c=this,d=b?document.getElementById(b):domUtils.findParent(c.iframe.parentNode,function(a){return\"FORM\"==a.tagName},!0);d&&a(d,c)},setHeight:function(a,b){a!==parseInt(this.iframe.parentNode.style.height)&&(this.iframe.parentNode.style.height=a+\"px\"),!b&&(this.options.minFrameHeight=this.options.initialFrameHeight=a),this.body.style.height=a+\"px\",!b&&this.trigger(\"setHeight\")},addshortcutkey:function(a,b){var c={};b?c[a]=b:c=a,utils.extend(this.shortcutkeys,c)},_bindshortcutKeys:function(){var a=this,b=this.shortcutkeys;a.addListener(\"keydown\",function(c,d){var e=d.keyCode||d.which;for(var f in b)for(var g,h=b[f].split(\",\"),i=0;g=h[i++];){g=g.split(\":\");var j=g[0],k=g[1];(/^(ctrl)(\\+shift)?\\+(\\d+)$/.test(j.toLowerCase())||/^(\\d+)$/.test(j))&&((\"ctrl\"==RegExp.$1?d.ctrlKey||d.metaKey:0)&&(\"\"!=RegExp.$2?d[RegExp.$2.slice(1)+\"Key\"]:1)&&e==RegExp.$3||e==RegExp.$1)&&(a.queryCommandState(f,k)!=-1&&a.execCommand(f,k),domUtils.preventDefault(d))}})},getContent:function(a,b,c,d,e){var f=this;if(a&&utils.isFunction(a)&&(b=a,a=\"\"),b?!b():!this.hasContents())return\"\";f.fireEvent(\"beforegetcontent\");var g=UE.htmlparser(f.body.innerHTML,d);return f.filterOutputRule(g),f.fireEvent(\"aftergetcontent\",a,g),g.toHtml(e)},getAllHtml:function(){var a=this,b=[];if(a.fireEvent(\"getAllHtml\",b),browser.ie&&browser.version>8){var c=\"\";utils.each(a.document.styleSheets,function(a){c+=a.href?'<link rel=\"stylesheet\" type=\"text/css\" href=\"'+a.href+'\" />':\"<style>\"+a.cssText+\"</style>\"}),utils.each(a.document.getElementsByTagName(\"script\"),function(a){c+=a.outerHTML})}return\"<html><head>\"+(a.options.charset?'<meta http-equiv=\"Content-Type\" content=\"text/html; charset='+a.options.charset+'\"/>':\"\")+(c||a.document.getElementsByTagName(\"head\")[0].innerHTML)+b.join(\"\\n\")+\"</head><body \"+(ie&&browser.version<9?'class=\"view\"':\"\")+\">\"+a.getContent(null,null,!0)+\"</body></html>\"},getPlainTxt:function(){var a=new RegExp(domUtils.fillChar,\"g\"),b=this.body.innerHTML.replace(/[\\n\\r]/g,\"\");return b=b.replace(/<(p|div)[^>]*>(<br\\/?>|&nbsp;)<\\/\\1>/gi,\"\\n\").replace(/<br\\/?>/gi,\"\\n\").replace(/<[^>/]+>/g,\"\").replace(/(\\n)?<\\/([^>]+)>/g,function(a,b,c){return dtd.$block[c]?\"\\n\":b?b:\"\"}),b.replace(a,\"\").replace(/\\u00a0/g,\" \").replace(/&nbsp;/g,\" \")},getContentTxt:function(){var a=new RegExp(domUtils.fillChar,\"g\");return this.body[browser.ie?\"innerText\":\"textContent\"].replace(a,\"\").replace(/\\u00a0/g,\" \")},setContent:function(b,c,d){function e(a){return\"DIV\"==a.tagName&&a.getAttribute(\"cdata_tag\")}var f=this;f.fireEvent(\"beforesetcontent\",b);var g=UE.htmlparser(b);if(f.filterInputRule(g),b=g.toHtml(),f.body.innerHTML=(c?f.body.innerHTML:\"\")+b,\"p\"==f.options.enterTag){var h,i=this.body.firstChild;if(!i||1==i.nodeType&&(dtd.$cdata[i.tagName]||e(i)||domUtils.isCustomeNode(i))&&i===this.body.lastChild)this.body.innerHTML=\"<p>\"+(browser.ie?\"&nbsp;\":\"<br/>\")+\"</p>\"+this.body.innerHTML;else for(var j=f.document.createElement(\"p\");i;){for(;i&&(3==i.nodeType||1==i.nodeType&&dtd.p[i.tagName]&&!dtd.$cdata[i.tagName]);)h=i.nextSibling,j.appendChild(i),i=h;if(j.firstChild){if(!i){f.body.appendChild(j);break}i.parentNode.insertBefore(j,i),j=f.document.createElement(\"p\")}i=i.nextSibling}}f.fireEvent(\"aftersetcontent\"),f.fireEvent(\"contentchange\"),!d&&f._selectionChange(),f._bakRange=f._bakIERange=f._bakNativeRange=null;var k;browser.gecko&&(k=this.selection.getNative())&&k.removeAllRanges(),f.options.autoSyncData&&f.form&&a(f.form,f)},focus:function(a){try{var b=this,c=b.selection.getRange();if(a){var d=b.body.lastChild;d&&1==d.nodeType&&!dtd.$empty[d.tagName]&&(domUtils.isEmptyBlock(d)?c.setStartAtFirst(d):c.setStartAtLast(d),c.collapse(!0)),c.setCursor(!0)}else{if(!c.collapsed&&domUtils.isBody(c.startContainer)&&0==c.startOffset){var d=b.body.firstChild;d&&1==d.nodeType&&!dtd.$empty[d.tagName]&&c.setStartAtFirst(d).collapse(!0)}c.select(!0)}this.fireEvent(\"focus selectionchange\")}catch(e){}},isFocus:function(){return this.selection.isFocus()},blur:function(){var a=this.selection.getNative();if(a.empty&&browser.ie){var b=document.body.createTextRange();b.moveToElementText(document.body),b.collapse(!0),b.select(),a.empty()}else a.removeAllRanges()},_initEvents:function(){var a=this,b=a.document,c=a.window;a._proxyDomEvent=utils.bind(a._proxyDomEvent,a),domUtils.on(b,[\"click\",\"contextmenu\",\"mousedown\",\"keydown\",\"keyup\",\"keypress\",\"mouseup\",\"mouseover\",\"mouseout\",\"selectstart\"],a._proxyDomEvent),domUtils.on(c,[\"focus\",\"blur\"],a._proxyDomEvent),domUtils.on(a.body,\"drop\",function(b){browser.gecko&&b.stopPropagation&&b.stopPropagation(),a.fireEvent(\"contentchange\")}),domUtils.on(b,[\"mouseup\",\"keydown\"],function(b){\"keydown\"==b.type&&(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)||2!=b.button&&a._selectionChange(250,b)})},_proxyDomEvent:function(a){return this.fireEvent(\"before\"+a.type.replace(/^on/,\"\").toLowerCase())!==!1&&(this.fireEvent(a.type.replace(/^on/,\"\"),a)!==!1&&this.fireEvent(\"after\"+a.type.replace(/^on/,\"\").toLowerCase()))},_selectionChange:function(a,b){var c,e,f=this,g=!1;if(browser.ie&&browser.version<9&&b&&\"mouseup\"==b.type){var h=this.selection.getRange();h.collapsed||(g=!0,c=b.clientX,e=b.clientY)}clearTimeout(d),d=setTimeout(function(){if(f.selection&&f.selection.getNative()){var a;if(g&&\"None\"==f.selection.getNative().type){a=f.document.body.createTextRange();try{a.moveToPoint(c,e)}catch(d){a=null}}var h;a&&(h=f.selection.getIERange,f.selection.getIERange=function(){return a}),f.selection.cache(),h&&(f.selection.getIERange=h),f.selection._cachedRange&&f.selection._cachedStartElement&&(f.fireEvent(\"beforeselectionchange\"),f.fireEvent(\"selectionchange\",!!b),f.fireEvent(\"afterselectionchange\"),f.selection.clear())}},a||50)},_callCmdFn:function(a,b){var c,d,e=b[0].toLowerCase();return c=this.commands[e]||UE.commands[e],d=c&&c[a],c&&d||\"queryCommandState\"!=a?d?d.apply(this,b):void 0:0},execCommand:function(a){a=a.toLowerCase();var b,c=this,d=c.commands[a]||UE.commands[a];return d&&d.execCommand?(d.notNeedUndo||c.__hasEnterExecCommand?(b=this._callCmdFn(\"execCommand\",arguments),!c.__hasEnterExecCommand&&!d.ignoreContentChange&&!c._ignoreContentChange&&c.fireEvent(\"contentchange\")):(c.__hasEnterExecCommand=!0,c.queryCommandState.apply(c,arguments)!=-1&&(c.fireEvent(\"saveScene\"),c.fireEvent.apply(c,[\"beforeexeccommand\",a].concat(arguments)),b=this._callCmdFn(\"execCommand\",arguments),c.fireEvent.apply(c,[\"afterexeccommand\",a].concat(arguments)),c.fireEvent(\"saveScene\")),c.__hasEnterExecCommand=!1),!c.__hasEnterExecCommand&&!d.ignoreContentChange&&!c._ignoreContentChange&&c._selectionChange(),b):null},queryCommandState:function(a){return this._callCmdFn(\"queryCommandState\",arguments)},queryCommandValue:function(a){return this._callCmdFn(\"queryCommandValue\",arguments)},hasContents:function(a){if(a)for(var b,c=0;b=a[c++];)if(this.document.getElementsByTagName(b).length>0)return!0;if(!domUtils.isEmptyBlock(this.body))return!0;for(a=[\"div\"],c=0;b=a[c++];)for(var d,e=domUtils.getElementsByTagName(this.document,b),f=0;d=e[f++];)if(domUtils.isCustomeNode(d))return!0;return!1},reset:function(){this.fireEvent(\"reset\")},setEnabled:function(){var a,b=this;if(\"false\"==b.body.contentEditable){b.body.contentEditable=!0,a=b.selection.getRange();try{a.moveToBookmark(b.lastBk),delete b.lastBk}catch(c){a.setStartAtFirst(b.body).collapse(!0)}a.select(!0),b.bkqueryCommandState&&(b.queryCommandState=b.bkqueryCommandState,delete b.bkqueryCommandState),b.bkqueryCommandValue&&(b.queryCommandValue=b.bkqueryCommandValue,delete b.bkqueryCommandValue),b.fireEvent(\"selectionchange\")}},enable:function(){return this.setEnabled()},setDisabled:function(a){var b=this;a=a?utils.isArray(a)?a:[a]:[],\"true\"==b.body.contentEditable&&(b.lastBk||(b.lastBk=b.selection.getRange().createBookmark(!0)),b.body.contentEditable=!1,b.bkqueryCommandState=b.queryCommandState,b.bkqueryCommandValue=b.queryCommandValue,b.queryCommandState=function(c){return utils.indexOf(a,c)!=-1?b.bkqueryCommandState.apply(b,arguments):-1},b.queryCommandValue=function(c){return utils.indexOf(a,c)!=-1?b.bkqueryCommandValue.apply(b,arguments):null},b.fireEvent(\"selectionchange\"))},disable:function(a){return this.setDisabled(a)},_setDefaultContent:function(){function a(){var b=this;b.document.getElementById(\"initContent\")&&(b.body.innerHTML=\"<p>\"+(ie?\"\":\"<br/>\")+\"</p>\",b.removeListener(\"firstBeforeExecCommand focus\",a),setTimeout(function(){b.focus(),b._selectionChange()},0))}return function(b){var c=this;c.body.innerHTML='<p id=\"initContent\">'+b+\"</p>\",c.addListener(\"firstBeforeExecCommand focus\",a)}}(),setShow:function(){var a=this,b=a.selection.getRange();if(\"none\"==a.container.style.display){try{b.moveToBookmark(a.lastBk),\ndelete a.lastBk}catch(c){b.setStartAtFirst(a.body).collapse(!0)}setTimeout(function(){b.select(!0)},100),a.container.style.display=\"\"}},show:function(){return this.setShow()},setHide:function(){var a=this;a.lastBk||(a.lastBk=a.selection.getRange().createBookmark(!0)),a.container.style.display=\"none\"},hide:function(){return this.setHide()},getLang:function(a){var b=UE.I18N[this.options.lang];if(!b)throw Error(\"not import language file\");a=(a||\"\").split(\".\");for(var c,d=0;(c=a[d++])&&(b=b[c],b););return b},getContentLength:function(a,b){var c=this.getContent(!1,!1,!0).length;if(a){b=(b||[]).concat([\"hr\",\"img\",\"iframe\"]),c=this.getContentTxt().replace(/[\\t\\r\\n]+/g,\"\").length;for(var d,e=0;d=b[e++];)c+=this.document.getElementsByTagName(d).length}return c},addInputRule:function(a){this.inputRules.push(a)},filterInputRule:function(a){for(var b,c=0;b=this.inputRules[c++];)b.call(this,a)},addOutputRule:function(a){this.outputRules.push(a)},filterOutputRule:function(a){for(var b,c=0;b=this.outputRules[c++];)b.call(this,a)},getActionUrl:function(a){var b=this.getOpt(a)||a,c=this.getOpt(\"imageUrl\"),d=this.getOpt(\"serverUrl\");return!d&&c&&(d=c.replace(/^(.*[\\/]).+([\\.].+)$/,\"$1controller$2\")),d?(d=d+(d.indexOf(\"?\")==-1?\"?\":\"&\")+\"action=\"+(b||\"\"),utils.formatUrl(d)):\"\"}},utils.inherits(f,EventBase)}(),UE.Editor.defaultOptions=function(a){var b=a.options.UEDITOR_HOME_URL;return{isShow:!0,initialContent:\"\",initialStyle:\"\",autoClearinitialContent:!1,iframeCssUrl:b+\"themes/iframe.css\",textarea:\"editorValue\",focus:!1,focusInEnd:!0,autoClearEmptyNode:!0,fullscreen:!1,readonly:!1,zIndex:999,imagePopup:!0,enterTag:\"p\",customDomain:!1,lang:\"zh-cn\",langPath:b+\"lang/\",theme:\"default\",themePath:b+\"themes/\",allHtmlEnabled:!1,scaleEnabled:!1,tableNativeEditInFF:!1,autoSyncData:!0,fileNameFormat:\"{time}{rand:6}\"}},function(){UE.Editor.prototype.loadServerConfig=function(){function showErrorMsg(a){console&&console.error(a)}var me=this;setTimeout(function(){try{me.options.imageUrl&&me.setOpt(\"serverUrl\",me.options.imageUrl.replace(/^(.*[\\/]).+([\\.].+)$/,\"$1controller$2\"));var configUrl=me.getActionUrl(\"config\"),isJsonp=utils.isCrossDomainUrl(configUrl);me._serverConfigLoaded=!1,configUrl&&UE.ajax.request(configUrl,{method:\"GET\",dataType:isJsonp?\"jsonp\":\"\",onsuccess:function(r){try{var config=isJsonp?r:eval(\"(\"+r.responseText+\")\");utils.extend(me.options,config),me.fireEvent(\"serverConfigLoaded\"),me._serverConfigLoaded=!0}catch(e){showErrorMsg(me.getLang(\"loadconfigFormatError\"))}},onerror:function(){showErrorMsg(me.getLang(\"loadconfigHttpError\"))}})}catch(e){showErrorMsg(me.getLang(\"loadconfigError\"))}})},UE.Editor.prototype.isServerConfigLoaded=function(){var a=this;return a._serverConfigLoaded||!1},UE.Editor.prototype.afterConfigReady=function(a){if(a&&utils.isFunction(a)){var b=this,c=function(){a.apply(b,arguments),b.removeListener(\"serverConfigLoaded\",c)};b.isServerConfigLoaded()?a.call(b,\"serverConfigLoaded\"):b.addListener(\"serverConfigLoaded\",c)}}}(),UE.ajax=function(){function a(a){var b=[];for(var c in a)if(\"method\"!=c&&\"timeout\"!=c&&\"async\"!=c&&\"dataType\"!=c&&\"callback\"!=c&&void 0!=a[c]&&null!=a[c])if(\"function\"!=(typeof a[c]).toLowerCase()&&\"object\"!=(typeof a[c]).toLowerCase())b.push(encodeURIComponent(c)+\"=\"+encodeURIComponent(a[c]));else if(utils.isArray(a[c]))for(var d=0;d<a[c].length;d++)b.push(encodeURIComponent(c)+\"[]=\"+encodeURIComponent(a[c][d]));return b.join(\"&\")}function b(b,c){var d=f(),e=!1,g={method:\"POST\",timeout:5e3,async:!0,data:{},onsuccess:function(){},onerror:function(){}};if(\"object\"==typeof b&&(c=b,b=c.url),d&&b){var h=c?utils.extend(g,c):g,i=a(h);utils.isEmptyObject(h.data)||(i+=(i?\"&\":\"\")+a(h.data));var j=setTimeout(function(){4!=d.readyState&&(e=!0,d.abort(),clearTimeout(j))},h.timeout),k=h.method.toUpperCase(),l=b+(b.indexOf(\"?\")==-1?\"?\":\"&\")+(\"POST\"==k?\"\":i+\"&noCache=\"+ +new Date);d.open(k,l,h.async),d.onreadystatechange=function(){4==d.readyState&&(e||200!=d.status?h.onerror(d):h.onsuccess(d))},\"POST\"==k?(d.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\"),d.send(i)):d.send(null)}}function c(b,c){function d(a,b,c){a.setAttribute(\"type\",\"text/javascript\"),a.setAttribute(\"defer\",\"defer\"),c&&a.setAttribute(\"charset\",c),a.setAttribute(\"src\",b),document.getElementsByTagName(\"head\")[0].appendChild(a)}function e(a){return function(){try{if(a)k.onerror&&k.onerror();else try{clearTimeout(g),i.apply(window,arguments)}catch(b){}}catch(c){k.onerror&&k.onerror.call(window,c)}finally{k.oncomplete&&k.oncomplete.apply(window,arguments),j.parentNode&&j.parentNode.removeChild(j),window[f]=null;try{delete window[f]}catch(b){}}}}var f,g,h,i=c.onsuccess||function(){},j=document.createElement(\"SCRIPT\"),k=c||{},l=k.charset,m=k.jsonp||\"callback\",n=k.timeOut||0,o=new RegExp(\"(\\\\?|&)\"+m+\"=([^&]*)\");utils.isFunction(i)?(f=\"bd__editor__\"+Math.floor(2147483648*Math.random()).toString(36),window[f]=e(0)):utils.isString(i)?f=i:(h=o.exec(b))&&(f=h[2]),b=b.replace(o,\"$1\"+m+\"=\"+f),b.search(o)<0&&(b+=(b.indexOf(\"?\")<0?\"?\":\"&\")+m+\"=\"+f);var p=a(c);utils.isEmptyObject(c.data)||(p+=(p?\"&\":\"\")+a(c.data)),p&&(b=b.replace(/\\?/,\"?\"+p+\"&\")),j.onerror=e(1),n&&(g=setTimeout(e(1),n)),d(j,b,l)}var d=\"XMLHttpRequest()\";try{new ActiveXObject(\"Msxml2.XMLHTTP\"),d=\"ActiveXObject('Msxml2.XMLHTTP')\"}catch(e){try{new ActiveXObject(\"Microsoft.XMLHTTP\"),d=\"ActiveXObject('Microsoft.XMLHTTP')\"}catch(e){}}var f=new Function(\"return new \"+d);return{request:function(a,d){d&&\"jsonp\"==d.dataType?c(a,d):b(a,d)},getJSONP:function(a,b,d){var e={data:b,oncomplete:d};c(a,e)}}}();var filterWord=UE.filterWord=function(){function a(a){return/(class=\"?Mso|style=\"[^\"]*\\bmso\\-|w:WordDocument|<(v|o):|lang=)/gi.test(a)}function b(a){return a=a.replace(/[\\d.]+\\w+/g,function(a){return utils.transUnitToPx(a)})}function c(a){return a.replace(/[\\t\\r\\n]+/g,\" \").replace(/<!--[\\s\\S]*?-->/gi,\"\").replace(/<v:shape [^>]*>[\\s\\S]*?.<\\/v:shape>/gi,function(a){if(browser.opera)return\"\";try{if(/Bitmap/i.test(a))return\"\";var c=a.match(/width:([ \\d.]*p[tx])/i)[1],d=a.match(/height:([ \\d.]*p[tx])/i)[1],e=a.match(/src=\\s*\"([^\"]*)\"/i)[1];return'<img width=\"'+b(c)+'\" height=\"'+b(d)+'\" src=\"'+e+'\" />'}catch(f){return\"\"}}).replace(/<\\/?div[^>]*>/g,\"\").replace(/v:\\w+=([\"']?)[^'\"]+\\1/g,\"\").replace(/<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|xml|meta|link|style|\\w+:\\w+)(?=[\\s\\/>]))[^>]*>/gi,\"\").replace(/<p [^>]*class=\"?MsoHeading\"?[^>]*>(.*?)<\\/p>/gi,\"<p><strong>$1</strong></p>\").replace(/\\s+(class|lang|align)\\s*=\\s*(['\"]?)([\\w-]+)\\2/gi,function(a,b,c,d){return\"class\"==b&&\"MsoListParagraph\"==d?a:\"\"}).replace(/<(font|span)[^>]*>(\\s*)<\\/\\1>/gi,function(a,b,c){return c.replace(/[\\t\\r\\n ]+/g,\" \")}).replace(/(<[a-z][^>]*)\\sstyle=([\"'])([^\\2]*?)\\2/gi,function(a,c,d,e){for(var f,g=[],h=e.replace(/^\\s+|\\s+$/,\"\").replace(/&#39;/g,\"'\").replace(/&quot;/gi,\"'\").replace(/[\\d.]+(cm|pt)/g,function(a){return utils.transUnitToPx(a)}).split(/;\\s*/g),i=0;f=h[i];i++){var j,k,l=f.split(\":\");if(2==l.length){if(j=l[0].toLowerCase(),k=l[1].toLowerCase(),/^(background)\\w*/.test(j)&&0==k.replace(/(initial|\\s)/g,\"\").length||/^(margin)\\w*/.test(j)&&/^0\\w+$/.test(k))continue;switch(j){case\"mso-padding-alt\":case\"mso-padding-top-alt\":case\"mso-padding-right-alt\":case\"mso-padding-bottom-alt\":case\"mso-padding-left-alt\":case\"mso-margin-alt\":case\"mso-margin-top-alt\":case\"mso-margin-right-alt\":case\"mso-margin-bottom-alt\":case\"mso-margin-left-alt\":case\"mso-height\":case\"mso-width\":case\"mso-vertical-align-alt\":/<table/.test(c)||(g[i]=j.replace(/^mso-|-alt$/g,\"\")+\":\"+b(k));continue;case\"horiz-align\":g[i]=\"text-align:\"+k;continue;case\"vert-align\":g[i]=\"vertical-align:\"+k;continue;case\"font-color\":case\"mso-foreground\":g[i]=\"color:\"+k;continue;case\"mso-background\":case\"mso-highlight\":g[i]=\"background:\"+k;continue;case\"mso-default-height\":g[i]=\"min-height:\"+b(k);continue;case\"mso-default-width\":g[i]=\"min-width:\"+b(k);continue;case\"mso-padding-between-alt\":g[i]=\"border-collapse:separate;border-spacing:\"+b(k);continue;case\"text-line-through\":\"single\"!=k&&\"double\"!=k||(g[i]=\"text-decoration:line-through\");continue;case\"mso-zero-height\":\"yes\"==k&&(g[i]=\"display:none\");continue;case\"margin\":if(!/[1-9]/.test(k))continue}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?:decor|trans)|top-bar|version|vnd|word-break)/.test(j)||/text\\-indent|padding|margin/.test(j)&&/\\-[\\d.]+/.test(k))continue;g[i]=j+\":\"+l[1]}}return c+(g.length?' style=\"'+g.join(\";\").replace(/;{2,}/g,\";\")+'\"':\"\")})}return function(b){return a(b)?c(b):b}}();!function(){function a(a,b,c){return a.push(n),b+(c?1:-1)}function b(a,b){for(var c=0;c<b;c++)a.push(m)}function c(g,h,i,j){switch(g.type){case\"root\":for(var k,l=0;k=g.children[l++];)i&&\"element\"==k.type&&!dtd.$inlineWithA[k.tagName]&&l>1&&(a(h,j,!0),b(h,j)),c(k,h,i,j);break;case\"text\":d(g,h);break;case\"element\":e(g,h,i,j);break;case\"comment\":f(g,h,i)}return h}function d(a,b){\"pre\"==a.parentNode.tagName?b.push(a.data):b.push(l[a.parentNode.tagName]?utils.html(a.data):a.data.replace(/[ ]{2}/g,\" &nbsp;\"))}function e(d,e,f,g){var h=\"\";if(d.attrs){h=[];var i=d.attrs;for(var j in i)h.push(j+(void 0!==i[j]?'=\"'+(k[j]?utils.html(i[j]).replace(/[\"]/g,function(a){return\"&quot;\"}):utils.unhtml(i[j]))+'\"':\"\"));h=h.join(\" \")}if(e.push(\"<\"+d.tagName+(h?\" \"+h:\"\")+(dtd.$empty[d.tagName]?\"/\":\"\")+\">\"),f&&!dtd.$inlineWithA[d.tagName]&&\"pre\"!=d.tagName&&d.children&&d.children.length&&(g=a(e,g,!0),b(e,g)),d.children&&d.children.length)for(var l,m=0;l=d.children[m++];)f&&\"element\"==l.type&&!dtd.$inlineWithA[l.tagName]&&m>1&&(a(e,g),b(e,g)),c(l,e,f,g);dtd.$empty[d.tagName]||(f&&!dtd.$inlineWithA[d.tagName]&&\"pre\"!=d.tagName&&d.children&&d.children.length&&(g=a(e,g),b(e,g)),e.push(\"</\"+d.tagName+\">\"))}function f(a,b){b.push(\"<!--\"+a.data+\"-->\")}function g(a,b){var c;if(\"element\"==a.type&&a.getAttr(\"id\")==b)return a;if(a.children&&a.children.length)for(var d,e=0;d=a.children[e++];)if(c=g(d,b))return c}function h(a,b,c){if(\"element\"==a.type&&a.tagName==b&&c.push(a),a.children&&a.children.length)for(var d,e=0;d=a.children[e++];)h(d,b,c)}function i(a,b){if(a.children&&a.children.length)for(var c,d=0;c=a.children[d];)i(c,b),c.parentNode&&(c.children&&c.children.length&&b(c),c.parentNode&&d++);else b(a)}var j=UE.uNode=function(a){this.type=a.type,this.data=a.data,this.tagName=a.tagName,this.parentNode=a.parentNode,this.attrs=a.attrs||{},this.children=a.children},k={href:1,src:1,_src:1,_href:1,cdata_data:1},l={style:1,script:1},m=\"    \",n=\"\\n\";j.createElement=function(a){return/[<>]/.test(a)?UE.htmlparser(a).children[0]:new j({type:\"element\",children:[],tagName:a})},j.createText=function(a,b){return new UE.uNode({type:\"text\",data:b?a:utils.unhtml(a||\"\")})},j.prototype={toHtml:function(a){var b=[];return c(this,b,a,0),b.join(\"\")},innerHTML:function(a){if(\"element\"!=this.type||dtd.$empty[this.tagName])return this;if(utils.isString(a)){if(this.children)for(var b,c=0;b=this.children[c++];)b.parentNode=null;this.children=[];for(var b,d=UE.htmlparser(a),c=0;b=d.children[c++];)this.children.push(b),b.parentNode=this;return this}var d=new UE.uNode({type:\"root\",children:this.children});return d.toHtml()},innerText:function(a,b){if(\"element\"!=this.type||dtd.$empty[this.tagName])return this;if(a){if(this.children)for(var c,d=0;c=this.children[d++];)c.parentNode=null;return this.children=[],this.appendChild(j.createText(a,b)),this}return this.toHtml().replace(/<[^>]+>/g,\"\")},getData:function(){return\"element\"==this.type?\"\":this.data},firstChild:function(){return this.children?this.children[0]:null},lastChild:function(){return this.children?this.children[this.children.length-1]:null},previousSibling:function(){for(var a,b=this.parentNode,c=0;a=b.children[c];c++)if(a===this)return 0==c?null:b.children[c-1]},nextSibling:function(){for(var a,b=this.parentNode,c=0;a=b.children[c++];)if(a===this)return b.children[c]},replaceChild:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c,d=0;c=this.children[d];d++)if(c===b)return this.children.splice(d,1,a),b.parentNode=null,a.parentNode=this,a}},appendChild:function(a){if(\"root\"==this.type||\"element\"==this.type&&!dtd.$empty[this.tagName]){this.children||(this.children=[]),a.parentNode&&a.parentNode.removeChild(a);for(var b,c=0;b=this.children[c];c++)if(b===a){this.children.splice(c,1);break}return this.children.push(a),a.parentNode=this,a}},insertBefore:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c,d=0;c=this.children[d];d++)if(c===b)return this.children.splice(d,0,a),a.parentNode=this,a}},insertAfter:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c,d=0;c=this.children[d];d++)if(c===b)return this.children.splice(d+1,0,a),a.parentNode=this,a}},removeChild:function(a,b){if(this.children)for(var c,d=0;c=this.children[d];d++)if(c===a){if(this.children.splice(d,1),c.parentNode=null,b&&c.children&&c.children.length)for(var e,f=0;e=c.children[f];f++)this.children.splice(d+f,0,e),e.parentNode=this;return c}},getAttr:function(a){return this.attrs&&this.attrs[a.toLowerCase()]},setAttr:function(a,b){if(!a)return void delete this.attrs;if(this.attrs||(this.attrs={}),utils.isObject(a))for(var c in a)a[c]?this.attrs[c.toLowerCase()]=a[c]:delete this.attrs[c];else b?this.attrs[a.toLowerCase()]=b:delete this.attrs[a]},getIndex:function(){for(var a,b=this.parentNode,c=0;a=b.children[c];c++)if(a===this)return c;return-1},getNodeById:function(a){var b;if(this.children&&this.children.length)for(var c,d=0;c=this.children[d++];)if(b=g(c,a))return b},getNodesByTagName:function(a){a=utils.trim(a).replace(/[ ]{2,}/g,\" \").split(\" \");var b=[],c=this;return utils.each(a,function(a){if(c.children&&c.children.length)for(var d,e=0;d=c.children[e++];)h(d,a,b)}),b},getStyle:function(a){var b=this.getAttr(\"style\");if(!b)return\"\";var c=new RegExp(\"(^|;)\\\\s*\"+a+\":([^;]+)\",\"i\"),d=b.match(c);return d&&d[0]?d[2]:\"\"},setStyle:function(a,b){function c(a,b){var c=new RegExp(\"(^|;)\\\\s*\"+a+\":([^;]+;?)\",\"gi\");d=d.replace(c,\"$1\"),b&&(d=a+\":\"+utils.unhtml(b)+\";\"+d)}var d=this.getAttr(\"style\");if(d||(d=\"\"),utils.isObject(a))for(var e in a)c(e,a[e]);else c(a,b);this.setAttr(\"style\",utils.trim(d))},traversal:function(a){return this.children&&this.children.length&&i(this,a),this}}}();var htmlparser=UE.htmlparser=function(a,b){function c(a,b){if(m[a.tagName]){var c=k.createElement(m[a.tagName]);a.appendChild(c),c.appendChild(k.createText(b)),a=c}else a.appendChild(k.createText(b))}function d(a,b,c){var e;if(e=l[b]){for(var f,h=a;\"root\"!=h.type;){if(utils.isArray(e)?utils.indexOf(e,h.tagName)!=-1:e==h.tagName){a=h,f=!0;break}h=h.parentNode}f||(a=d(a,utils.isArray(e)?e[0]:e))}var i=new k({parentNode:a,type:\"element\",tagName:b.toLowerCase(),children:dtd.$empty[b]?null:[]});if(c){for(var m,n={};m=g.exec(c);)n[m[1].toLowerCase()]=j[m[1].toLowerCase()]?m[2]||m[3]||m[4]:utils.unhtml(m[2]||m[3]||m[4]);i.attrs=n}return a.children.push(i),dtd.$empty[b]?a:i}function e(a,b){a.children.push(new k({type:\"comment\",data:b,parentNode:a}))}var f=/<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\/\\s>]+)((?:\\s+[\\w\\-:.]+(?:\\s*=\\s*?(?:(?:\"[^\"]*\")|(?:'[^']*')|[^\\s\"'\\/>]+))?)*)[\\S\\s]*?(\\/?)>))/g,g=/([\\w\\-:.]+)(?:(?:\\s*=\\s*(?:(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s>]+)))|(?=\\s|$))/g,h={b:1,code:1,i:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,span:1,sub:1,img:1,sup:1,font:1,big:1,small:1,iframe:1,a:1,br:1,pre:1};a=a.replace(new RegExp(domUtils.fillChar,\"g\"),\"\"),b||(a=a.replace(new RegExp(\"[\\\\r\\\\t\\\\n\"+(b?\"\":\" \")+\"]*</?(\\\\w+)\\\\s*(?:[^>]*)>[\\\\r\\\\t\\\\n\"+(b?\"\":\" \")+\"]*\",\"g\"),function(a,c){return c&&h[c.toLowerCase()]?a.replace(/(^[\\n\\r]+)|([\\n\\r]+$)/g,\"\"):a.replace(new RegExp(\"^[\\\\r\\\\n\"+(b?\"\":\" \")+\"]+\"),\"\").replace(new RegExp(\"[\\\\r\\\\n\"+(b?\"\":\" \")+\"]+$\"),\"\")}));for(var i,j={href:1,src:1},k=UE.uNode,l={td:\"tr\",tr:[\"tbody\",\"thead\",\"tfoot\"],tbody:\"table\",th:\"tr\",thead:\"table\",tfoot:\"table\",caption:\"table\",li:[\"ul\",\"ol\"],dt:\"dl\",dd:\"dl\",option:\"select\"},m={ol:\"li\",ul:\"li\"},n=0,o=0,p=new k({type:\"root\",children:[]}),q=p;i=f.exec(a);){n=i.index;try{if(n>o&&c(q,a.slice(o,n)),i[3])dtd.$cdata[q.tagName]?c(q,i[0]):q=d(q,i[3].toLowerCase(),i[4]);else if(i[1]){if(\"root\"!=q.type)if(dtd.$cdata[q.tagName]&&!dtd.$cdata[i[1]])c(q,i[0]);else{for(var r=q;\"element\"==q.type&&q.tagName!=i[1].toLowerCase();)if(q=q.parentNode,\"root\"==q.type)throw q=r,\"break\";q=q.parentNode}}else i[2]&&e(q,i[2])}catch(s){}o=f.lastIndex}return o<a.length&&c(q,a.slice(o)),p},filterNode=UE.filterNode=function(){function a(b,c){switch(b.type){case\"text\":break;case\"element\":var d;if(d=c[b.tagName])if(\"-\"===d)b.parentNode.removeChild(b);else if(utils.isFunction(d)){var e=b.parentNode,f=b.getIndex();if(d(b),b.parentNode){if(b.children)for(var g,h=0;g=b.children[h];)a(g,c),g.parentNode&&h++}else for(var g,h=f;g=e.children[h];)a(g,c),g.parentNode&&h++}else{var i=d.$;if(i&&b.attrs){var j,k={};for(var l in i){if(j=b.getAttr(l),\"style\"==l&&utils.isArray(i[l])){var m=[];utils.each(i[l],function(a){var c;(c=b.getStyle(a))&&m.push(a+\":\"+c)}),j=m.join(\";\")}j&&(k[l]=j)}b.attrs=k}if(b.children)for(var g,h=0;g=b.children[h];)a(g,c),g.parentNode&&h++}else if(dtd.$cdata[b.tagName])b.parentNode.removeChild(b);else{var e=b.parentNode,f=b.getIndex();b.parentNode.removeChild(b,!0);for(var g,h=f;g=e.children[h];)a(g,c),g.parentNode&&h++}break;case\"comment\":b.parentNode.removeChild(b)}}return function(b,c){if(utils.isEmptyObject(c))return b;var d;(d=c[\"-\"])&&utils.each(d.split(\" \"),function(a){c[a]=\"-\"});for(var e,f=0;e=b.children[f];)a(e,c),e.parentNode&&f++;return b}}();UE.plugin=function(){var a={};return{register:function(b,c,d,e){d&&utils.isFunction(d)&&(e=d,d=null),a[b]={optionName:d||b,execFn:c,afterDisabled:e}},load:function(b){utils.each(a,function(a){var c=a.execFn.call(b);b.options[a.optionName]!==!1?c&&utils.each(c,function(a,c){switch(c.toLowerCase()){case\"shortcutkey\":b.addshortcutkey(a);break;case\"bindevents\":utils.each(a,function(a,c){b.addListener(c,a)});break;case\"bindmultievents\":utils.each(utils.isArray(a)?a:[a],function(a){var c=utils.trim(a.type).split(/\\s+/);utils.each(c,function(c){b.addListener(c,a.handler)})});break;case\"commands\":utils.each(a,function(a,c){b.commands[c]=a});break;case\"outputrule\":b.addOutputRule(a);break;case\"inputrule\":b.addInputRule(a);break;case\"defaultoptions\":b.setOpt(a)}}):a.afterDisabled&&a.afterDisabled.call(b)}),utils.each(UE.plugins,function(a){a.call(b)})},run:function(b,c){var d=a[b];d&&d.exeFn.call(c)}}}();var keymap=UE.keymap={Backspace:8,Tab:9,Enter:13,Shift:16,Control:17,Alt:18,CapsLock:20,Esc:27,Spacebar:32,PageUp:33,PageDown:34,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Insert:45,Del:46,NumLock:144,Cmd:91,\"=\":187,\"-\":189,b:66,i:73,z:90,y:89,v:86,x:88,s:83,n:78},LocalStorage=UE.LocalStorage=function(){function a(){var a=document.createElement(\"div\");return a.style.display=\"none\",a.addBehavior?(a.addBehavior(\"#default#userdata\"),{getItem:function(b){var d=null;try{document.body.appendChild(a),a.load(c),d=a.getAttribute(b),document.body.removeChild(a)}catch(e){}return d},setItem:function(b,d){document.body.appendChild(a),a.setAttribute(b,d),a.save(c),document.body.removeChild(a)},removeItem:function(b){document.body.appendChild(a),a.removeAttribute(b),a.save(c),document.body.removeChild(a)}}):null}var b=window.localStorage||a()||null,c=\"localStorage\";return{saveLocalData:function(a,c){return!(!b||!c)&&(b.setItem(a,c),!0)},getLocalData:function(a){return b?b.getItem(a):null},removeItem:function(a){b&&b.removeItem(a)}}}();!function(){var a=\"ueditor_preference\";UE.Editor.prototype.setPreferences=function(b,c){var d={};utils.isString(b)?d[b]=c:d=b;var e=LocalStorage.getLocalData(a);e&&(e=utils.str2json(e))?utils.extend(e,d):e=d,e&&LocalStorage.saveLocalData(a,utils.json2str(e))},UE.Editor.prototype.getPreferences=function(b){var c=LocalStorage.getLocalData(a);return c&&(c=utils.str2json(c))?b?c[b]:c:null},UE.Editor.prototype.removePreferences=function(b){var c=LocalStorage.getLocalData(a);c&&(c=utils.str2json(c))&&(c[b]=void 0,delete c[b]),c&&LocalStorage.saveLocalData(a,utils.json2str(c))}}(),UE.plugins.defaultfilter=function(){var a=this;a.setOpt({allowDivTransToP:!0,disabledTableInTable:!0,rgb2Hex:!0}),a.addInputRule(function(b){function c(a){for(;a&&\"element\"==a.type;){if(\"td\"==a.tagName)return!0;a=a.parentNode}return!1}var d,e=this.options.allowDivTransToP;b.traversal(function(b){if(\"element\"==b.type){if(!dtd.$cdata[b.tagName]&&a.options.autoClearEmptyNode&&dtd.$inline[b.tagName]&&!dtd.$empty[b.tagName]&&(!b.attrs||utils.isEmptyObject(b.attrs)))return void(b.firstChild()?\"span\"!=b.tagName||b.attrs&&!utils.isEmptyObject(b.attrs)||b.parentNode.removeChild(b,!0):b.parentNode.removeChild(b));switch(b.tagName){case\"style\":case\"script\":b.setAttr({cdata_tag:b.tagName,cdata_data:b.innerHTML()||\"\",_ue_custom_node_:\"true\"}),b.tagName=\"div\",b.innerHTML(\"\");break;case\"a\":(d=b.getAttr(\"href\"))&&b.setAttr(\"_href\",d);break;case\"img\":if((d=b.getAttr(\"src\"))&&/^data:/.test(d)){b.parentNode.removeChild(b);break}b.setAttr(\"_src\",b.getAttr(\"src\"));break;case\"span\":browser.webkit&&(d=b.getStyle(\"white-space\"))&&/nowrap|normal/.test(d)&&(b.setStyle(\"white-space\",\"\"),a.options.autoClearEmptyNode&&utils.isEmptyObject(b.attrs)&&b.parentNode.removeChild(b,!0)),d=b.getAttr(\"id\"),d&&/^_baidu_bookmark_/i.test(d)&&b.parentNode.removeChild(b);break;case\"p\":(d=b.getAttr(\"align\"))&&(b.setAttr(\"align\"),b.setStyle(\"text-align\",d)),utils.each(b.children,function(a){if(\"element\"==a.type&&\"p\"==a.tagName){var c=a.nextSibling();b.parentNode.insertAfter(a,b);for(var d=a;c;){var e=c.nextSibling();b.parentNode.insertAfter(c,d),d=c,c=e}return!1}}),b.firstChild()||b.innerHTML(browser.ie?\"&nbsp;\":\"<br/>\");break;case\"div\":if(b.getAttr(\"cdata_tag\"))break;if(d=b.getAttr(\"class\"),d&&/^line number\\d+/.test(d))break;if(!e)break;for(var f,g=UE.uNode.createElement(\"p\");f=b.firstChild();)\"text\"!=f.type&&UE.dom.dtd.$block[f.tagName]?g.firstChild()?(b.parentNode.insertBefore(g,b),g=UE.uNode.createElement(\"p\")):b.parentNode.insertBefore(f,b):g.appendChild(f);g.firstChild()&&b.parentNode.insertBefore(g,b),b.parentNode.removeChild(b);break;case\"dl\":b.tagName=\"ul\";break;case\"dt\":case\"dd\":b.tagName=\"li\";break;case\"li\":var h=b.getAttr(\"class\");h&&/list\\-/.test(h)||b.setAttr();var i=b.getNodesByTagName(\"ol ul\");UE.utils.each(i,function(a){b.parentNode.insertAfter(a,b)});break;case\"td\":case\"th\":case\"caption\":b.children&&b.children.length||b.appendChild(browser.ie11below?UE.uNode.createText(\" \"):UE.uNode.createElement(\"br\"));break;case\"table\":a.options.disabledTableInTable&&c(b)&&(b.parentNode.insertBefore(UE.uNode.createText(b.innerText()),b),b.parentNode.removeChild(b))}}})}),a.addOutputRule(function(b){var c;b.traversal(function(b){if(\"element\"==b.type){if(a.options.autoClearEmptyNode&&dtd.$inline[b.tagName]&&!dtd.$empty[b.tagName]&&(!b.attrs||utils.isEmptyObject(b.attrs)))return void(b.firstChild()?\"span\"!=b.tagName||b.attrs&&!utils.isEmptyObject(b.attrs)||b.parentNode.removeChild(b,!0):b.parentNode.removeChild(b));switch(b.tagName){case\"div\":(c=b.getAttr(\"cdata_tag\"))&&(b.tagName=c,b.appendChild(UE.uNode.createText(b.getAttr(\"cdata_data\"))),b.setAttr({cdata_tag:\"\",cdata_data:\"\",_ue_custom_node_:\"\"}));break;case\"a\":(c=b.getAttr(\"_href\"))&&b.setAttr({href:utils.html(c),_href:\"\"});break;case\"span\":if(c=b.getAttr(\"id\"),c&&/^_baidu_bookmark_/i.test(c)&&b.parentNode.removeChild(b),a.getOpt(\"rgb2Hex\")){var d=b.getAttr(\"style\");d&&b.setAttr(\"style\",d.replace(/rgba?\\(([\\d,\\s]+)\\)/g,function(a,b){var c=b.split(\",\");if(c.length>3)return\"\";b=\"#\";for(var d,e=0;d=c[e++];)d=parseInt(d.replace(/[^\\d]/gi,\"\"),10).toString(16),b+=1==d.length?\"0\"+d:d;return b.toUpperCase()}))}break;case\"img\":(c=b.getAttr(\"_src\"))&&b.setAttr({src:b.getAttr(\"_src\"),_src:\"\"})}}})})},UE.commands.inserthtml={execCommand:function(a,b,c){var d,e,f=this;if(b&&f.fireEvent(\"beforeinserthtml\",b)!==!0){if(d=f.selection.getRange(),e=d.document.createElement(\"div\"),e.style.display=\"inline\",!c){var g=UE.htmlparser(b);f.options.filterRules&&UE.filterNode(g,f.options.filterRules),f.filterInputRule(g),b=g.toHtml()}if(e.innerHTML=utils.trim(b),!d.collapsed){var h=d.startContainer;if(domUtils.isFillChar(h)&&d.setStartBefore(h),h=d.endContainer,domUtils.isFillChar(h)&&d.setEndAfter(h),d.txtToElmBoundary(),d.endContainer&&1==d.endContainer.nodeType&&(h=d.endContainer.childNodes[d.endOffset],h&&domUtils.isBr(h)&&d.setEndAfter(h)),0==d.startOffset&&(h=d.startContainer,domUtils.isBoundaryNode(h,\"firstChild\")&&(h=d.endContainer,d.endOffset==(3==h.nodeType?h.nodeValue.length:h.childNodes.length)&&domUtils.isBoundaryNode(h,\"lastChild\")&&(f.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\",d.setStart(f.body.firstChild,0).collapse(!0)))),!d.collapsed&&d.deleteContents(),1==d.startContainer.nodeType){var i,j=d.startContainer.childNodes[d.startOffset];if(j&&domUtils.isBlockElm(j)&&(i=j.previousSibling)&&domUtils.isBlockElm(i)){for(d.setEnd(i,i.childNodes.length).collapse();j.firstChild;)i.appendChild(j.firstChild);domUtils.remove(j)}}}var j,k,i,l,m,n=0;d.inFillChar()&&(j=d.startContainer,domUtils.isFillChar(j)?(d.setStartBefore(j).collapse(!0),domUtils.remove(j)):domUtils.isFillChar(j,!0)&&(j.nodeValue=j.nodeValue.replace(fillCharReg,\"\"),d.startOffset--,d.collapsed&&d.collapse(!0)));var o=domUtils.findParentByTagName(d.startContainer,\"li\",!0);if(o){for(var p,q;j=e.firstChild;){for(;j&&(3==j.nodeType||!domUtils.isBlockElm(j)||\"HR\"==j.tagName);)p=j.nextSibling,d.insertNode(j).collapse(),q=j,j=p;if(j)if(/^(ol|ul)$/i.test(j.tagName)){for(;j.firstChild;)q=j.firstChild,domUtils.insertAfter(o,j.firstChild),o=o.nextSibling;domUtils.remove(j)}else{var r;p=j.nextSibling,r=f.document.createElement(\"li\"),domUtils.insertAfter(o,r),r.appendChild(j),q=j,j=p,o=r}}o=domUtils.findParentByTagName(d.startContainer,\"li\",!0),domUtils.isEmptyBlock(o)&&domUtils.remove(o),q&&d.setStartAfter(q).collapse(!0).select(!0)}else{for(;j=e.firstChild;){if(n){for(var s=f.document.createElement(\"p\");j&&(3==j.nodeType||!dtd.$block[j.tagName]);)m=j.nextSibling,s.appendChild(j),j=m;s.firstChild&&(j=s)}if(d.insertNode(j),m=j.nextSibling,!n&&j.nodeType==domUtils.NODE_ELEMENT&&domUtils.isBlockElm(j)&&(k=domUtils.findParent(j,function(a){return domUtils.isBlockElm(a)}),k&&\"body\"!=k.tagName.toLowerCase()&&(!dtd[k.tagName][j.nodeName]||j.parentNode!==k))){if(dtd[k.tagName][j.nodeName])for(l=j.parentNode;l!==k;)i=l,l=l.parentNode;else i=k;domUtils.breakParent(j,i||l);var i=j.previousSibling;domUtils.trimWhiteTextNode(i),i.childNodes.length||domUtils.remove(i),!browser.ie&&(p=j.nextSibling)&&domUtils.isBlockElm(p)&&p.lastChild&&!domUtils.isBr(p.lastChild)&&p.appendChild(f.document.createElement(\"br\")),n=1}var p=j.nextSibling;if(!e.firstChild&&p&&domUtils.isBlockElm(p)){d.setStart(p,0).collapse(!0);break}d.setEndAfter(j).collapse()}if(j=d.startContainer,m&&domUtils.isBr(m)&&domUtils.remove(m),domUtils.isBlockElm(j)&&domUtils.isEmptyNode(j))if(m=j.nextSibling)domUtils.remove(j),1==m.nodeType&&dtd.$block[m.tagName]&&d.setStart(m,0).collapse(!0).shrinkBoundary();else try{j.innerHTML=browser.ie?domUtils.fillChar:\"<br/>\"}catch(t){d.setStartBefore(j),domUtils.remove(j)}try{d.select(!0)}catch(t){}}setTimeout(function(){d=f.selection.getRange(),d.scrollToView(f.autoHeightEnabled,f.autoHeightEnabled?domUtils.getXY(f.iframe).y:0),f.fireEvent(\"afterinserthtml\",b)},200)}}},UE.plugins.autotypeset=function(){function a(a,b){return a&&3!=a.nodeType?domUtils.isBr(a)?1:a&&a.parentNode&&l[a.tagName.toLowerCase()]?g&&g.contains(a)||a.getAttribute(\"pagebreak\")?0:b?!domUtils.isEmptyBlock(a):domUtils.isEmptyBlock(a,new RegExp(\"[\\\\s\"+domUtils.fillChar+\"]\",\"g\")):void 0:0}function b(a){a.style.cssText||(domUtils.removeAttributes(a,[\"style\"]),\"span\"==a.tagName.toLowerCase()&&domUtils.hasNoAttributes(a)&&domUtils.remove(a,!0))}function c(c,f){var h,l=this;if(f){if(!i.pasteFilter)return;h=l.document.createElement(\"div\"),h.innerHTML=f.html}else h=l.document.body;for(var m,n=domUtils.getElementsByTagName(h,\"*\"),o=0;m=n[o++];)if(l.fireEvent(\"excludeNodeinautotype\",m)!==!0){if(i.clearFontSize&&m.style.fontSize&&(domUtils.removeStyle(m,\"font-size\"),b(m)),i.clearFontFamily&&m.style.fontFamily&&(domUtils.removeStyle(m,\"font-family\"),b(m)),a(m)){if(i.mergeEmptyline)for(var p,q=m.nextSibling,r=domUtils.isBr(m);a(q)&&(p=q,q=p.nextSibling,!r||q&&(!q||domUtils.isBr(q)));)domUtils.remove(p);if(i.removeEmptyline&&domUtils.inDoc(m,h)&&!k[m.parentNode.tagName.toLowerCase()]){if(domUtils.isBr(m)&&(q=m.nextSibling,q&&!domUtils.isBr(q)))continue;domUtils.remove(m);continue}}if(a(m,!0)&&\"SPAN\"!=m.tagName&&(i.indent&&(m.style.textIndent=i.indentValue),i.textAlign&&(m.style.textAlign=i.textAlign)),i.removeClass&&m.className&&!j[m.className.toLowerCase()]){if(g&&g.contains(m))continue;domUtils.removeAttributes(m,[\"class\"])}if(i.imageBlockLine&&\"img\"==m.tagName.toLowerCase()&&!m.getAttribute(\"emotion\"))if(f){var s=m;switch(i.imageBlockLine){case\"left\":case\"right\":case\"none\":for(var p,t,q,u=s.parentNode;dtd.$inline[u.tagName]||\"A\"==u.tagName;)u=u.parentNode;if(p=u,\"P\"==p.tagName&&\"center\"==domUtils.getStyle(p,\"text-align\")&&!domUtils.isBody(p)&&1==domUtils.getChildCount(p,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)}))if(t=p.previousSibling,q=p.nextSibling,t&&q&&1==t.nodeType&&1==q.nodeType&&t.tagName==q.tagName&&domUtils.isBlockElm(t)){for(t.appendChild(p.firstChild);q.firstChild;)t.appendChild(q.firstChild);domUtils.remove(p),domUtils.remove(q)}else domUtils.setStyle(p,\"text-align\",\"\");domUtils.setStyle(s,\"float\",i.imageBlockLine);break;case\"center\":if(\"center\"!=l.queryCommandValue(\"imagefloat\")){for(u=s.parentNode,domUtils.setStyle(s,\"float\",\"none\"),p=s;u&&1==domUtils.getChildCount(u,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)})&&(dtd.$inline[u.tagName]||\"A\"==u.tagName);)p=u,u=u.parentNode;var v=l.document.createElement(\"p\");domUtils.setAttributes(v,{style:\"text-align:center\"}),p.parentNode.insertBefore(v,p),v.appendChild(p),domUtils.setStyle(p,\"float\",\"\")}}}else{var w=l.selection.getRange();w.selectNode(m).select(),l.execCommand(\"imagefloat\",i.imageBlockLine)}i.removeEmptyNode&&i.removeTagNames[m.tagName.toLowerCase()]&&domUtils.hasNoAttributes(m)&&domUtils.isEmptyBlock(m)&&domUtils.remove(m)}if(i.tobdc){var x=UE.htmlparser(h.innerHTML);x.traversal(function(a){\"text\"==a.type&&(a.data=e(a.data))}),h.innerHTML=x.toHtml()}if(i.bdc2sb){var x=UE.htmlparser(h.innerHTML);x.traversal(function(a){\"text\"==a.type&&(a.data=d(a.data))}),h.innerHTML=x.toHtml()}f&&(f.html=h.innerHTML)}function d(a){for(var b=\"\",c=0;c<a.length;c++){var d=a.charCodeAt(c);b+=d>=65281&&d<=65373?String.fromCharCode(a.charCodeAt(c)-65248):12288==d?String.fromCharCode(a.charCodeAt(c)-12288+32):a.charAt(c)}return b}function e(a){a=utils.html(a);for(var b=\"\",c=0;c<a.length;c++)b+=32==a.charCodeAt(c)?String.fromCharCode(12288):a.charCodeAt(c)<127?String.fromCharCode(a.charCodeAt(c)+65248):a.charAt(c);return b}function f(){var a=h.getPreferences(\"autotypeset\");utils.extend(h.options.autotypeset,a)}this.setOpt({autotypeset:{mergeEmptyline:!0,removeClass:!0,removeEmptyline:!1,textAlign:\"left\",imageBlockLine:\"center\",pasteFilter:!1,clearFontSize:!1,clearFontFamily:!1,removeEmptyNode:!1,removeTagNames:utils.extend({div:1},dtd.$removeEmpty),indent:!1,indentValue:\"2em\",bdc2sb:!1,tobdc:!1}});var g,h=this,i=h.options.autotypeset,j={selectTdClass:1,pagebreak:1,anchorclass:1},k={li:1},l={div:1,p:1,blockquote:1,center:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,span:1};i&&(f(),i.pasteFilter&&h.addListener(\"beforepaste\",c),h.commands.autotypeset={execCommand:function(){h.removeListener(\"beforepaste\",c),i.pasteFilter&&h.addListener(\"beforepaste\",c),c.call(h)}})},UE.plugin.register(\"autosubmit\",function(){return{shortcutkey:{autosubmit:\"ctrl+13\"},commands:{autosubmit:{execCommand:function(){var a=this,b=domUtils.findParentByTagName(a.iframe,\"form\",!1);if(b){if(a.fireEvent(\"beforesubmit\")===!1)return;a.sync(),b.submit()}}}}}}),UE.plugin.register(\"background\",function(){function a(a){var b={},c=a.split(\";\");return utils.each(c,function(a){var c=a.indexOf(\":\"),d=utils.trim(a.substr(0,c)).toLowerCase();\nd&&(b[d]=utils.trim(a.substr(c+1)||\"\"))}),b}function b(a){if(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c+\":\"+a[c]+\"; \");utils.cssRule(e,b.length?\"body{\"+b.join(\"\")+\"}\":\"\",d.document)}else utils.cssRule(e,\"\",d.document)}var c,d=this,e=\"editor_background\",f=new RegExp(\"body[\\\\s]*\\\\{(.+)\\\\}\",\"i\"),g=d.hasContents;return d.hasContents=function(){return!!d.queryCommandValue(\"background\")||g.apply(d,arguments)},{bindEvents:{getAllHtml:function(a,b){var c=this.body,e=domUtils.getComputedStyle(c,\"background-image\"),f=\"\";f=e.indexOf(d.options.imagePath)>0?e.substring(e.indexOf(d.options.imagePath),e.length-1).replace(/\"|\\(|\\)/gi,\"\"):\"none\"!=e?e.replace(/url\\(\"?|\"?\\)/gi,\"\"):\"\";var g='<style type=\"text/css\">body{',h={\"background-color\":domUtils.getComputedStyle(c,\"background-color\")||\"#ffffff\",\"background-image\":f?\"url(\"+f+\")\":\"\",\"background-repeat\":domUtils.getComputedStyle(c,\"background-repeat\")||\"\",\"background-position\":browser.ie?domUtils.getComputedStyle(c,\"background-position-x\")+\" \"+domUtils.getComputedStyle(c,\"background-position-y\"):domUtils.getComputedStyle(c,\"background-position\"),height:domUtils.getComputedStyle(c,\"height\")};for(var i in h)h.hasOwnProperty(i)&&(g+=i+\":\"+h[i]+\"; \");g+=\"}</style> \",b.push(g)},aftersetcontent:function(){0==c&&b()}},inputRule:function(d){c=!1,utils.each(d.getNodesByTagName(\"p\"),function(d){var e=d.getAttr(\"data-background\");e&&(c=!0,b(a(e)),d.parentNode.removeChild(d))})},outputRule:function(a){var b=this,c=(utils.cssRule(e,b.document)||\"\").replace(/[\\n\\r]+/g,\"\").match(f);c&&a.appendChild(UE.uNode.createElement('<p style=\"display:none;\" data-background=\"'+utils.trim(c[1].replace(/\"/g,\"\").replace(/[\\s]+/g,\" \"))+'\"><br/></p>'))},commands:{background:{execCommand:function(a,c){b(c)},queryCommandValue:function(){var b=this,c=(utils.cssRule(e,b.document)||\"\").replace(/[\\n\\r]+/g,\"\").match(f);return c?a(c[1]):null},notNeedUndo:!0}}}}),UE.commands.imagefloat={execCommand:function(a,b){var c=this,d=c.selection.getRange();if(!d.collapsed){var e=d.getClosedNode();if(e&&\"IMG\"==e.tagName)switch(b){case\"left\":case\"right\":case\"none\":for(var f,g,h,i=e.parentNode;dtd.$inline[i.tagName]||\"A\"==i.tagName;)i=i.parentNode;if(f=i,\"P\"==f.tagName&&\"center\"==domUtils.getStyle(f,\"text-align\")){if(!domUtils.isBody(f)&&1==domUtils.getChildCount(f,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)}))if(g=f.previousSibling,h=f.nextSibling,g&&h&&1==g.nodeType&&1==h.nodeType&&g.tagName==h.tagName&&domUtils.isBlockElm(g)){for(g.appendChild(f.firstChild);h.firstChild;)g.appendChild(h.firstChild);domUtils.remove(f),domUtils.remove(h)}else domUtils.setStyle(f,\"text-align\",\"\");d.selectNode(e).select()}domUtils.setStyle(e,\"float\",\"none\"==b?\"\":b),\"none\"==b&&domUtils.removeAttributes(e,\"align\");break;case\"center\":if(\"center\"!=c.queryCommandValue(\"imagefloat\")){for(i=e.parentNode,domUtils.setStyle(e,\"float\",\"\"),domUtils.removeAttributes(e,\"align\"),f=e;i&&1==domUtils.getChildCount(i,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)})&&(dtd.$inline[i.tagName]||\"A\"==i.tagName);)f=i,i=i.parentNode;d.setStartBefore(f).setCursor(!1),i=c.document.createElement(\"div\"),i.appendChild(f),domUtils.setStyle(f,\"float\",\"\"),c.execCommand(\"insertHtml\",'<p id=\"_img_parent_tmp\" style=\"text-align:center\">'+i.innerHTML+\"</p>\"),f=c.document.getElementById(\"_img_parent_tmp\"),f.removeAttribute(\"id\"),f=f.firstChild,d.selectNode(f).select(),h=f.parentNode.nextSibling,h&&domUtils.isEmptyNode(h)&&domUtils.remove(h)}}}},queryCommandValue:function(){var a,b,c=this.selection.getRange();return c.collapsed?\"none\":(a=c.getClosedNode(),a&&1==a.nodeType&&\"IMG\"==a.tagName?(b=domUtils.getComputedStyle(a,\"float\")||a.getAttribute(\"align\"),\"none\"==b&&(b=\"center\"==domUtils.getComputedStyle(a.parentNode,\"text-align\")?\"center\":b),{left:1,right:1,center:1}[b]?b:\"none\"):\"none\")},queryCommandState:function(){var a,b=this.selection.getRange();return b.collapsed?-1:(a=b.getClosedNode(),a&&1==a.nodeType&&\"IMG\"==a.tagName?0:-1)}},UE.commands.insertimage={execCommand:function(a,b){if(b=utils.isArray(b)?b:[b],b.length){var c=this,d=c.selection.getRange(),e=d.getClosedNode();if(c.fireEvent(\"beforeinsertimage\",b)!==!0){if(!e||!/img/i.test(e.tagName)||\"edui-faked-video\"==e.className&&e.className.indexOf(\"edui-upload-video\")==-1||e.getAttribute(\"word_img\")){var f,g=[],h=\"\";if(f=b[0],1==b.length)h='<img src=\"'+f.src+'\" '+(f._src?' _src=\"'+f._src+'\" ':\"\")+(f.width?'width=\"'+f.width+'\" ':\"\")+(f.height?' height=\"'+f.height+'\" ':\"\")+(\"left\"==f.floatStyle||\"right\"==f.floatStyle?' style=\"float:'+f.floatStyle+';\"':\"\")+(f.title&&\"\"!=f.title?' title=\"'+f.title+'\"':\"\")+(f.border&&\"0\"!=f.border?' border=\"'+f.border+'\"':\"\")+(f.alt&&\"\"!=f.alt?' alt=\"'+f.alt+'\"':\"\")+(f.hspace&&\"0\"!=f.hspace?' hspace = \"'+f.hspace+'\"':\"\")+(f.vspace&&\"0\"!=f.vspace?' vspace = \"'+f.vspace+'\"':\"\")+\"/>\",\"center\"==f.floatStyle&&(h='<p style=\"text-align: center\">'+h+\"</p>\"),g.push(h);else for(var i=0;f=b[i++];)h=\"<p \"+(\"center\"==f.floatStyle?'style=\"text-align: center\" ':\"\")+'><img src=\"'+f.src+'\" '+(f.width?'width=\"'+f.width+'\" ':\"\")+(f._src?' _src=\"'+f._src+'\" ':\"\")+(f.height?' height=\"'+f.height+'\" ':\"\")+' style=\"'+(f.floatStyle&&\"center\"!=f.floatStyle?\"float:\"+f.floatStyle+\";\":\"\")+(f.border||\"\")+'\" '+(f.title?' title=\"'+f.title+'\"':\"\")+\" /></p>\",g.push(h);c.execCommand(\"insertHtml\",g.join(\"\"))}else{var j=b.shift(),k=j.floatStyle;delete j.floatStyle,domUtils.setAttributes(e,j),c.execCommand(\"imagefloat\",k),b.length>0&&(d.setStartAfter(e).setCursor(!1,!0),c.execCommand(\"insertimage\",b))}c.fireEvent(\"afterinsertimage\",b)}}}},UE.plugins.justify=function(){var a=domUtils.isBlockElm,b={left:1,right:1,center:1,justify:1},c=function(b,c){var d=b.createBookmark(),e=function(a){return 1==a.nodeType?\"br\"!=a.tagName.toLowerCase()&&!domUtils.isBookmarkNode(a):!domUtils.isWhitespace(a)};b.enlarge(!0);for(var f,g=b.createBookmark(),h=domUtils.getNextDomNode(g.start,!1,e),i=b.cloneRange();h&&!(domUtils.getPosition(h,g.end)&domUtils.POSITION_FOLLOWING);)if(3!=h.nodeType&&a(h))h=domUtils.getNextDomNode(h,!0,e);else{for(i.setStartBefore(h);h&&h!==g.end&&!a(h);)f=h,h=domUtils.getNextDomNode(h,!1,null,function(b){return!a(b)});i.setEndAfter(f);var j=i.getCommonAncestor();if(!domUtils.isBody(j)&&a(j))domUtils.setStyles(j,utils.isString(c)?{\"text-align\":c}:c),h=j;else{var k=b.document.createElement(\"p\");domUtils.setStyles(k,utils.isString(c)?{\"text-align\":c}:c);var l=i.extractContents();k.appendChild(l),i.insertNode(k),h=k}h=domUtils.getNextDomNode(h,!1,e)}return b.moveToBookmark(g).moveToBookmark(d)};UE.commands.justify={execCommand:function(a,b){var d,e=this.selection.getRange();return e.collapsed&&(d=this.document.createTextNode(\"p\"),e.insertNode(d)),c(e,b),d&&(e.setStartBefore(d).collapse(!0),domUtils.remove(d)),e.select(),!0},queryCommandValue:function(){var a=this.selection.getStart(),c=domUtils.getComputedStyle(a,\"text-align\");return b[c]?c:\"left\"},queryCommandState:function(){var a=this.selection.getStart(),b=a&&domUtils.findParentByTagName(a,[\"td\",\"th\",\"caption\"],!0);return b?-1:0}}},UE.plugins.font=function(){function a(a){for(var b;(b=a.parentNode)&&\"SPAN\"==b.tagName&&1==domUtils.getChildCount(b,function(a){return!domUtils.isBookmarkNode(a)&&!domUtils.isBr(a)});)b.style.cssText+=a.style.cssText,domUtils.remove(a,!0),a=b}function b(a,b,c){if(g[b]&&(a.adjustmentBoundary(),!a.collapsed&&1==a.startContainer.nodeType)){var d=a.startContainer.childNodes[a.startOffset];if(d&&domUtils.isTagNode(d,\"span\")){var e=a.createBookmark();utils.each(domUtils.getElementsByTagName(d,\"span\"),function(a){a.parentNode&&!domUtils.isBookmarkNode(a)&&(\"backcolor\"==b&&domUtils.getComputedStyle(a,\"background-color\").toLowerCase()===c||(domUtils.removeStyle(a,g[b]),0==a.style.cssText.replace(/^\\s+$/,\"\").length&&domUtils.remove(a,!0)))}),a.moveToBookmark(e)}}}function c(c,d,e){var f,g=c.collapsed,h=c.createBookmark();if(g)for(f=h.start.parentNode;dtd.$inline[f.tagName];)f=f.parentNode;else f=domUtils.getCommonAncestor(h.start,h.end);utils.each(domUtils.getElementsByTagName(f,\"span\"),function(b){if(b.parentNode&&!domUtils.isBookmarkNode(b)){if(/\\s*border\\s*:\\s*none;?\\s*/i.test(b.style.cssText))return void(/^\\s*border\\s*:\\s*none;?\\s*$/.test(b.style.cssText)?domUtils.remove(b,!0):domUtils.removeStyle(b,\"border\"));if(/border/i.test(b.style.cssText)&&\"SPAN\"==b.parentNode.tagName&&/border/i.test(b.parentNode.style.cssText)&&(b.style.cssText=b.style.cssText.replace(/border[^:]*:[^;]+;?/gi,\"\")),\"fontborder\"!=d||\"none\"!=e)for(var c=b.nextSibling;c&&1==c.nodeType&&\"SPAN\"==c.tagName;)if(domUtils.isBookmarkNode(c)&&\"fontborder\"==d)b.appendChild(c),c=b.nextSibling;else{if(c.style.cssText==b.style.cssText&&(domUtils.moveChild(c,b),domUtils.remove(c)),b.nextSibling===c)break;c=b.nextSibling}if(a(b),browser.ie&&browser.version>8){var f=domUtils.findParent(b,function(a){return\"SPAN\"==a.tagName&&/background-color/.test(a.style.cssText)});f&&!/background-color/.test(b.style.cssText)&&(b.style.backgroundColor=f.style.backgroundColor)}}}),c.moveToBookmark(h),b(c,d,e)}var d=this,e={forecolor:\"color\",backcolor:\"background-color\",fontsize:\"font-size\",fontfamily:\"font-family\",underline:\"text-decoration\",strikethrough:\"text-decoration\",fontborder:\"border\"},f={underline:1,strikethrough:1,fontborder:1},g={forecolor:\"color\",backcolor:\"background-color\",fontsize:\"font-size\",fontfamily:\"font-family\"};d.setOpt({fontfamily:[{name:\"songti\",val:\"宋体,SimSun\"},{name:\"yahei\",val:\"微软雅黑,Microsoft YaHei\"},{name:\"kaiti\",val:\"楷体,楷体_GB2312, SimKai\"},{name:\"heiti\",val:\"黑体, SimHei\"},{name:\"lishu\",val:\"隶书, SimLi\"},{name:\"andaleMono\",val:\"andale mono\"},{name:\"arial\",val:\"arial, helvetica,sans-serif\"},{name:\"arialBlack\",val:\"arial black,avant garde\"},{name:\"comicSansMs\",val:\"comic sans ms\"},{name:\"impact\",val:\"impact,chicago\"},{name:\"timesNewRoman\",val:\"times new roman\"}],fontsize:[10,11,12,14,16,18,20,24,36]}),d.addInputRule(function(a){utils.each(a.getNodesByTagName(\"u s del font strike\"),function(a){if(\"font\"==a.tagName){var b=[];for(var c in a.attrs)switch(c){case\"size\":b.push(\"font-size:\"+({1:\"10\",2:\"12\",3:\"16\",4:\"18\",5:\"24\",6:\"32\",7:\"48\"}[a.attrs[c]]||a.attrs[c])+\"px\");break;case\"color\":b.push(\"color:\"+a.attrs[c]);break;case\"face\":b.push(\"font-family:\"+a.attrs[c]);break;case\"style\":b.push(a.attrs[c])}a.attrs={style:b.join(\";\")}}else{var d=\"u\"==a.tagName?\"underline\":\"line-through\";a.attrs={style:(a.getAttr(\"style\")||\"\")+\"text-decoration:\"+d+\";\"}}a.tagName=\"span\"})});for(var h in e)!function(a,b){UE.commands[a]={execCommand:function(d,e){e=e||(this.queryCommandState(d)?\"none\":\"underline\"==d?\"underline\":\"fontborder\"==d?\"1px solid #000\":\"line-through\");var g,h=this,i=this.selection.getRange();if(\"default\"==e)i.collapsed&&(g=h.document.createTextNode(\"font\"),i.insertNode(g).select()),h.execCommand(\"removeFormat\",\"span,a\",b),g&&(i.setStartBefore(g).collapse(!0),domUtils.remove(g)),c(i,d,e),i.select();else if(i.collapsed){var j=domUtils.findParentByTagName(i.startContainer,\"span\",!0);if(g=h.document.createTextNode(\"font\"),!j||j.children.length||j[browser.ie?\"innerText\":\"textContent\"].replace(fillCharReg,\"\").length){if(i.insertNode(g),i.selectNode(g).select(),j=i.document.createElement(\"span\"),f[a]){if(domUtils.findParentByTagName(g,\"a\",!0))return i.setStartBefore(g).setCursor(),void domUtils.remove(g);h.execCommand(\"removeFormat\",\"span,a\",b)}if(j.style.cssText=b+\":\"+e,g.parentNode.insertBefore(j,g),!browser.ie||browser.ie&&9==browser.version)for(var k=j.parentNode;!domUtils.isBlockElm(k);)\"SPAN\"==k.tagName&&(j.style.cssText=k.style.cssText+\";\"+j.style.cssText),k=k.parentNode;opera?setTimeout(function(){i.setStart(j,0).collapse(!0),c(i,d,e),i.select()}):(i.setStart(j,0).collapse(!0),c(i,d,e),i.select())}else i.insertNode(g),f[a]&&(i.selectNode(g).select(),h.execCommand(\"removeFormat\",\"span,a\",b,null),j=domUtils.findParentByTagName(g,\"span\",!0),i.setStartBefore(g)),j&&(j.style.cssText+=\";\"+b+\":\"+e),i.collapse(!0).select();domUtils.remove(g)}else f[a]&&h.queryCommandValue(a)&&h.execCommand(\"removeFormat\",\"span,a\",b),i=h.selection.getRange(),i.applyInlineStyle(\"span\",{style:b+\":\"+e}),c(i,d,e),i.select();return!0},queryCommandValue:function(a){var c=this.selection.getStart();if(\"underline\"==a||\"strikethrough\"==a){for(var d,e=c;e&&!domUtils.isBlockElm(e)&&!domUtils.isBody(e);){if(1==e.nodeType&&(d=domUtils.getComputedStyle(e,b),\"none\"!=d))return d;e=e.parentNode}return\"none\"}if(\"fontborder\"==a){for(var f,g=c;g&&dtd.$inline[g.tagName];){if((f=domUtils.getComputedStyle(g,\"border\"))&&/1px/.test(f)&&/solid/.test(f))return f;g=g.parentNode}return\"\"}if(\"FontSize\"==a){var h=domUtils.getComputedStyle(c,b),g=/^([\\d\\.]+)(\\w+)$/.exec(h);return g?Math.floor(g[1])+g[2]:h}return domUtils.getComputedStyle(c,b)},queryCommandState:function(a){if(!f[a])return 0;var b=this.queryCommandValue(a);return\"fontborder\"==a?/1px/.test(b)&&/solid/.test(b):\"underline\"==a?/underline/.test(b):/line\\-through/.test(b)}}}(h,e[h])},UE.plugins.link=function(){function a(a){var b=a.startContainer,c=a.endContainer;(b=domUtils.findParentByTagName(b,\"a\",!0))&&a.setStartBefore(b),(c=domUtils.findParentByTagName(c,\"a\",!0))&&a.setEndAfter(c)}function b(b,c,d){var e=b.cloneRange(),f=d.queryCommandValue(\"link\");a(b=b.adjustmentBoundary());var g=b.startContainer;if(1==g.nodeType&&f&&(g=g.childNodes[b.startOffset],g&&1==g.nodeType&&\"A\"==g.tagName&&/^(?:https?|ftp|file)\\s*:\\s*\\/\\//.test(g[browser.ie?\"innerText\":\"textContent\"])&&(g[browser.ie?\"innerText\":\"textContent\"]=utils.html(c.textValue||c.href))),e.collapsed&&!f||(b.removeInlineStyle(\"a\"),e=b.cloneRange()),e.collapsed){var h=b.document.createElement(\"a\"),i=\"\";c.textValue?(i=utils.html(c.textValue),delete c.textValue):i=utils.html(c.href),domUtils.setAttributes(h,c),g=domUtils.findParentByTagName(e.startContainer,\"a\",!0),g&&domUtils.isInNodeEndBoundary(e,g)&&b.setStartAfter(g).collapse(!0),h[browser.ie?\"innerText\":\"textContent\"]=i,b.insertNode(h).selectNode(h)}else b.applyInlineStyle(\"a\",c)}UE.commands.unlink={execCommand:function(){var b,c=this.selection.getRange();c.collapsed&&!domUtils.findParentByTagName(c.startContainer,\"a\",!0)||(b=c.createBookmark(),a(c),c.removeInlineStyle(\"a\").moveToBookmark(b).select())},queryCommandState:function(){return!this.highlight&&this.queryCommandValue(\"link\")?0:-1}},UE.commands.link={execCommand:function(a,c){var d;c._href&&(c._href=utils.unhtml(c._href,/[<\">]/g)),c.href&&(c.href=utils.unhtml(c.href,/[<\">]/g)),c.textValue&&(c.textValue=utils.unhtml(c.textValue,/[<\">]/g)),b(d=this.selection.getRange(),c,this),d.collapse().select(!0)},queryCommandValue:function(){var a,b=this.selection.getRange();if(!b.collapsed){b.shrinkBoundary();var c=3!=b.startContainer.nodeType&&b.startContainer.childNodes[b.startOffset]?b.startContainer.childNodes[b.startOffset]:b.startContainer,d=3==b.endContainer.nodeType||0==b.endOffset?b.endContainer:b.endContainer.childNodes[b.endOffset-1],e=b.getCommonAncestor();if(a=domUtils.findParentByTagName(e,\"a\",!0),!a&&1==e.nodeType)for(var f,g,h,i=e.getElementsByTagName(\"a\"),j=0;h=i[j++];)if(f=domUtils.getPosition(h,c),g=domUtils.getPosition(h,d),(f&domUtils.POSITION_FOLLOWING||f&domUtils.POSITION_CONTAINS)&&(g&domUtils.POSITION_PRECEDING||g&domUtils.POSITION_CONTAINS)){a=h;break}return a}if(a=b.startContainer,a=1==a.nodeType?a:a.parentNode,a&&(a=domUtils.findParentByTagName(a,\"a\",!0))&&!domUtils.isInNodeEndBoundary(b,a))return a},queryCommandState:function(){var a=this.selection.getRange().getClosedNode(),b=a&&(\"edui-faked-video\"==a.className||a.className.indexOf(\"edui-upload-video\")!=-1);return b?-1:0}}},UE.plugins.insertframe=function(){function a(){b._iframe&&delete b._iframe}var b=this;b.addListener(\"selectionchange\",function(){a()})},UE.commands.scrawl={queryCommandState:function(){return browser.ie&&browser.version<=8?-1:0}},UE.plugins.removeformat=function(){var a=this;a.setOpt({removeFormatTags:\"b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var\",removeFormatAttributes:\"class,style,lang,width,height,align,hspace,valign\"}),a.commands.removeformat={execCommand:function(a,b,c,d,e){function f(a){if(3==a.nodeType||\"span\"!=a.tagName.toLowerCase())return 0;if(browser.ie){var b=a.attributes;if(b.length){for(var c=0,d=b.length;c<d;c++)if(b[c].specified)return 0;return 1}}return!a.attributes.length}function g(a){var b=a.createBookmark();if(a.collapsed&&a.enlarge(!0),!e){var d=domUtils.findParentByTagName(a.startContainer,\"a\",!0);d&&a.setStartBefore(d),d=domUtils.findParentByTagName(a.endContainer,\"a\",!0),d&&a.setEndAfter(d)}for(h=a.createBookmark(),p=h.start;(i=p.parentNode)&&!domUtils.isBlockElm(i);)domUtils.breakParent(p,i),domUtils.clearEmptySibling(p);if(h.end){for(p=h.end;(i=p.parentNode)&&!domUtils.isBlockElm(i);)domUtils.breakParent(p,i),domUtils.clearEmptySibling(p);for(var g,l=domUtils.getNextDomNode(h.start,!1,m);l&&l!=h.end;)g=domUtils.getNextDomNode(l,!0,m),dtd.$empty[l.tagName.toLowerCase()]||domUtils.isBookmarkNode(l)||(j.test(l.tagName)?c?(domUtils.removeStyle(l,c),f(l)&&\"text-decoration\"!=c&&domUtils.remove(l,!0)):domUtils.remove(l,!0):dtd.$tableContent[l.tagName]||dtd.$list[l.tagName]||(domUtils.removeAttributes(l,k),f(l)&&domUtils.remove(l,!0))),l=g}var n=h.start.parentNode;!domUtils.isBlockElm(n)||dtd.$tableContent[n.tagName]||dtd.$list[n.tagName]||domUtils.removeAttributes(n,k),n=h.end.parentNode,h.end&&domUtils.isBlockElm(n)&&!dtd.$tableContent[n.tagName]&&!dtd.$list[n.tagName]&&domUtils.removeAttributes(n,k),a.moveToBookmark(h).moveToBookmark(b);for(var o,p=a.startContainer,q=a.collapsed;1==p.nodeType&&domUtils.isEmptyNode(p)&&dtd.$removeEmpty[p.tagName];)o=p.parentNode,a.setStartBefore(p),a.startContainer===a.endContainer&&a.endOffset--,domUtils.remove(p),p=o;if(!q)for(p=a.endContainer;1==p.nodeType&&domUtils.isEmptyNode(p)&&dtd.$removeEmpty[p.tagName];)o=p.parentNode,a.setEndBefore(p),domUtils.remove(p),p=o}var h,i,j=new RegExp(\"^(?:\"+(b||this.options.removeFormatTags).replace(/,/g,\"|\")+\")$\",\"i\"),k=c?[]:(d||this.options.removeFormatAttributes).split(\",\"),l=new dom.Range(this.document),m=function(a){return 1==a.nodeType};l=this.selection.getRange(),g(l),l.select()}}},UE.plugins.blockquote=function(){function a(a){return domUtils.filterNodeList(a.selection.getStartElementPath(),\"blockquote\")}var b=this;b.commands.blockquote={execCommand:function(b,c){var d=this.selection.getRange(),e=a(this),f=dtd.blockquote,g=d.createBookmark();if(e){var h=d.startContainer,i=domUtils.isBlockElm(h)?h:domUtils.findParent(h,function(a){return domUtils.isBlockElm(a)}),j=d.endContainer,k=domUtils.isBlockElm(j)?j:domUtils.findParent(j,function(a){return domUtils.isBlockElm(a)});i=domUtils.findParentByTagName(i,\"li\",!0)||i,k=domUtils.findParentByTagName(k,\"li\",!0)||k,\"LI\"==i.tagName||\"TD\"==i.tagName||i===e||domUtils.isBody(i)?domUtils.remove(e,!0):domUtils.breakParent(i,e),i!==k&&(e=domUtils.findParentByTagName(k,\"blockquote\"),e&&(\"LI\"==k.tagName||\"TD\"==k.tagName||domUtils.isBody(k)?e.parentNode&&domUtils.remove(e,!0):domUtils.breakParent(k,e)));for(var l,m=domUtils.getElementsByTagName(this.document,\"blockquote\"),n=0;l=m[n++];)l.childNodes.length?domUtils.getPosition(l,i)&domUtils.POSITION_FOLLOWING&&domUtils.getPosition(l,k)&domUtils.POSITION_PRECEDING&&domUtils.remove(l,!0):domUtils.remove(l)}else{for(var o=d.cloneRange(),p=1==o.startContainer.nodeType?o.startContainer:o.startContainer.parentNode,q=p,r=1;;){if(domUtils.isBody(p)){q!==p?d.collapsed?(o.selectNode(q),r=0):o.setStartBefore(q):o.setStart(p,0);break}if(!f[p.tagName]){d.collapsed?o.selectNode(q):o.setStartBefore(q);break}q=p,p=p.parentNode}if(r)for(q=p=p=1==o.endContainer.nodeType?o.endContainer:o.endContainer.parentNode;;){if(domUtils.isBody(p)){q!==p?o.setEndAfter(q):o.setEnd(p,p.childNodes.length);break}if(!f[p.tagName]){o.setEndAfter(q);break}q=p,p=p.parentNode}p=d.document.createElement(\"blockquote\"),domUtils.setAttributes(p,c),p.appendChild(o.extractContents()),o.insertNode(p);for(var s,t=domUtils.getElementsByTagName(p,\"blockquote\"),n=0;s=t[n++];)s.parentNode&&domUtils.remove(s,!0)}d.moveToBookmark(g).select()},queryCommandState:function(){return a(this)?1:0}}},UE.commands.touppercase=UE.commands.tolowercase={execCommand:function(a){var b=this,c=b.selection.getRange();if(c.collapsed)return c;for(var d=c.createBookmark(),e=d.end,f=function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)},g=domUtils.getNextDomNode(d.start,!1,f);g&&domUtils.getPosition(g,e)&domUtils.POSITION_PRECEDING&&(3==g.nodeType&&(g.nodeValue=g.nodeValue[\"touppercase\"==a?\"toUpperCase\":\"toLowerCase\"]()),g=domUtils.getNextDomNode(g,!0,f),g!==e););c.moveToBookmark(d).select()}},UE.commands.indent={execCommand:function(){var a=this,b=a.queryCommandState(\"indent\")?\"0em\":a.options.indentValue||\"2em\";a.execCommand(\"Paragraph\",\"p\",{style:\"text-indent:\"+b})},queryCommandState:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),\"p h1 h2 h3 h4 h5 h6\");return a&&a.style.textIndent&&parseInt(a.style.textIndent)?1:0}},UE.commands.print={execCommand:function(){this.window.print()},notNeedUndo:1},UE.commands.preview={execCommand:function(){var a=window.open(\"\",\"_blank\",\"\"),b=a.document;b.open(),b.write('<!DOCTYPE html><html><head><meta charset=\"utf-8\"/><script src=\"'+this.options.UEDITOR_HOME_URL+\"ueditor.parse.js\\\"></script><script>setTimeout(function(){uParse('div',{rootPath: '\"+this.options.UEDITOR_HOME_URL+\"'})},300)</script></head><body><div>\"+this.getContent(null,null,!0)+\"</div></body></html>\"),b.close()},notNeedUndo:1},UE.plugins.selectall=function(){var a=this;a.commands.selectall={execCommand:function(){var a=this,b=a.body,c=a.selection.getRange();c.selectNodeContents(b),domUtils.isEmptyBlock(b)&&(browser.opera&&b.firstChild&&1==b.firstChild.nodeType&&c.setStartAtFirst(b.firstChild),c.collapse(!0)),c.select(!0)},notNeedUndo:1},a.addshortcutkey({selectAll:\"ctrl+65\"})},UE.plugins.paragraph=function(){var a=this,b=domUtils.isBlockElm,c=[\"TD\",\"LI\",\"PRE\"],d=function(a,d,e,f){var g,h=a.createBookmark(),i=function(a){return 1==a.nodeType?\"br\"!=a.tagName.toLowerCase()&&!domUtils.isBookmarkNode(a):!domUtils.isWhitespace(a)};a.enlarge(!0);for(var j,k=a.createBookmark(),l=domUtils.getNextDomNode(k.start,!1,i),m=a.cloneRange();l&&!(domUtils.getPosition(l,k.end)&domUtils.POSITION_FOLLOWING);)if(3!=l.nodeType&&b(l))l=domUtils.getNextDomNode(l,!0,i);else{for(m.setStartBefore(l);l&&l!==k.end&&!b(l);)j=l,l=domUtils.getNextDomNode(l,!1,null,function(a){return!b(a)});m.setEndAfter(j),g=a.document.createElement(d),e&&(domUtils.setAttributes(g,e),f&&\"customstyle\"==f&&e.style&&(g.style.cssText=e.style)),g.appendChild(m.extractContents()),domUtils.isEmptyNode(g)&&domUtils.fillChar(a.document,g),m.insertNode(g);var n=g.parentNode;b(n)&&!domUtils.isBody(g.parentNode)&&utils.indexOf(c,n.tagName)==-1&&(f&&\"customstyle\"==f||(n.getAttribute(\"dir\")&&g.setAttribute(\"dir\",n.getAttribute(\"dir\")),n.style.cssText&&(g.style.cssText=n.style.cssText+\";\"+g.style.cssText),n.style.textAlign&&!g.style.textAlign&&(g.style.textAlign=n.style.textAlign),n.style.textIndent&&!g.style.textIndent&&(g.style.textIndent=n.style.textIndent),n.style.padding&&!g.style.padding&&(g.style.padding=n.style.padding)),e&&/h\\d/i.test(n.tagName)&&!/h\\d/i.test(g.tagName)?(domUtils.setAttributes(n,e),f&&\"customstyle\"==f&&e.style&&(n.style.cssText=e.style),domUtils.remove(g.parentNode,!0),g=n):domUtils.remove(g.parentNode,!0)),l=utils.indexOf(c,n.tagName)!=-1?n:g,l=domUtils.getNextDomNode(l,!1,i)}return a.moveToBookmark(k).moveToBookmark(h)};a.setOpt(\"paragraph\",{p:\"\",h1:\"\",h2:\"\",h3:\"\",h4:\"\",h5:\"\",h6:\"\"}),a.commands.paragraph={execCommand:function(a,b,c,e){var f=this.selection.getRange();if(f.collapsed){var g=this.document.createTextNode(\"p\");if(f.insertNode(g),browser.ie){var h=g.previousSibling;h&&domUtils.isWhitespace(h)&&domUtils.remove(h),h=g.nextSibling,h&&domUtils.isWhitespace(h)&&domUtils.remove(h)}}if(f=d(f,b,c,e),g&&(f.setStartBefore(g).collapse(!0),pN=g.parentNode,domUtils.remove(g),domUtils.isBlockElm(pN)&&domUtils.isEmptyNode(pN)&&domUtils.fillNode(this.document,pN)),browser.gecko&&f.collapsed&&1==f.startContainer.nodeType){var i=f.startContainer.childNodes[f.startOffset];i&&1==i.nodeType&&i.tagName.toLowerCase()==b&&f.setStart(i,0).collapse(!0)}return f.select(),!0},queryCommandValue:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),\"p h1 h2 h3 h4 h5 h6\");return a?a.tagName.toLowerCase():\"\"}}},function(){var a=domUtils.isBlockElm,b=function(a){return domUtils.filterNodeList(a.selection.getStartElementPath(),function(a){return a&&1==a.nodeType&&a.getAttribute(\"dir\")})},c=function(c,d,e){var f,g=function(a){return 1==a.nodeType?!domUtils.isBookmarkNode(a):!domUtils.isWhitespace(a)},h=b(d);if(h&&c.collapsed)return h.setAttribute(\"dir\",e),c;f=c.createBookmark(),c.enlarge(!0);for(var i,j=c.createBookmark(),k=domUtils.getNextDomNode(j.start,!1,g),l=c.cloneRange();k&&!(domUtils.getPosition(k,j.end)&domUtils.POSITION_FOLLOWING);)if(3!=k.nodeType&&a(k))k=domUtils.getNextDomNode(k,!0,g);else{for(l.setStartBefore(k);k&&k!==j.end&&!a(k);)i=k,k=domUtils.getNextDomNode(k,!1,null,function(b){return!a(b)});l.setEndAfter(i);var m=l.getCommonAncestor();if(!domUtils.isBody(m)&&a(m))m.setAttribute(\"dir\",e),k=m;else{var n=c.document.createElement(\"p\");n.setAttribute(\"dir\",e);var o=l.extractContents();n.appendChild(o),l.insertNode(n),k=n}k=domUtils.getNextDomNode(k,!1,g)}return c.moveToBookmark(j).moveToBookmark(f)};UE.commands.directionality={execCommand:function(a,b){var d=this.selection.getRange();if(d.collapsed){var e=this.document.createTextNode(\"d\");d.insertNode(e)}return c(d,this,b),e&&(d.setStartBefore(e).collapse(!0),domUtils.remove(e)),d.select(),!0},queryCommandValue:function(){var a=b(this);return a?a.getAttribute(\"dir\"):\"ltr\"}}}(),UE.plugins.horizontal=function(){var a=this;a.commands.horizontal={execCommand:function(a){var b=this;if(b.queryCommandState(a)!==-1){b.execCommand(\"insertHtml\",\"<hr>\");var c=b.selection.getRange(),d=c.startContainer;if(1==d.nodeType&&!d.childNodes[c.startOffset]){var e;(e=d.childNodes[c.startOffset-1])&&1==e.nodeType&&\"HR\"==e.tagName&&(\"p\"==b.options.enterTag?(e=b.document.createElement(\"p\"),c.insertNode(e),c.setStart(e,0).setCursor()):(e=b.document.createElement(\"br\"),c.insertNode(e),c.setStartBefore(e).setCursor()))}return!0}},queryCommandState:function(){return domUtils.filterNodeList(this.selection.getStartElementPath(),\"table\")?-1:0}},a.addListener(\"delkeydown\",function(a,b){var c=this.selection.getRange();if(c.txtToElmBoundary(!0),domUtils.isStartInblock(c)){var d=c.startContainer,e=d.previousSibling;if(e&&domUtils.isTagNode(e,\"hr\"))return domUtils.remove(e),c.select(),domUtils.preventDefault(b),!0}})},UE.commands.time=UE.commands.date={execCommand:function(a,b){function c(a,b){var c=(\"0\"+a.getHours()).slice(-2),d=(\"0\"+a.getMinutes()).slice(-2),e=(\"0\"+a.getSeconds()).slice(-2);return b=b||\"hh:ii:ss\",b.replace(/hh/gi,c).replace(/ii/gi,d).replace(/ss/gi,e)}function d(a,b){var c=(\"000\"+a.getFullYear()).slice(-4),d=c.slice(-2),e=(\"0\"+(a.getMonth()+1)).slice(-2),f=(\"0\"+a.getDate()).slice(-2);return b=b||\"yyyy-mm-dd\",b.replace(/yyyy/gi,c).replace(/yy/gi,d).replace(/mm/gi,e).replace(/dd/gi,f)}var e=new Date;this.execCommand(\"insertHtml\",\"time\"==a?c(e,b):d(e,b))}},UE.plugins.rowspacing=function(){var a=this;a.setOpt({rowspacingtop:[\"5\",\"10\",\"15\",\"20\",\"25\"],rowspacingbottom:[\"5\",\"10\",\"15\",\"20\",\"25\"]}),a.commands.rowspacing={execCommand:function(a,b,c){return this.execCommand(\"paragraph\",\"p\",{style:\"margin-\"+c+\":\"+b+\"px\"}),!0},queryCommandValue:function(a,b){var c,d=domUtils.filterNodeList(this.selection.getStartElementPath(),function(a){return domUtils.isBlockElm(a)});return d?(c=domUtils.getComputedStyle(d,\"margin-\"+b).replace(/[^\\d]/g,\"\"),c?c:0):0}}},UE.plugins.lineheight=function(){var a=this;a.setOpt({lineheight:[\"1\",\"1.5\",\"1.75\",\"2\",\"3\",\"4\",\"5\"]}),a.commands.lineheight={execCommand:function(a,b){return this.execCommand(\"paragraph\",\"p\",{style:\"line-height:\"+(\"1\"==b?\"normal\":b+\"em\")}),!0},queryCommandValue:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),function(a){return domUtils.isBlockElm(a)});if(a){var b=domUtils.getComputedStyle(a,\"line-height\");return\"normal\"==b?1:b.replace(/[^\\d.]*/gi,\"\")}}}},UE.plugins.insertcode=function(){var a=this;a.ready(function(){utils.cssRule(\"pre\",\"pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;}\",a.document)}),a.setOpt(\"insertcode\",{as3:\"ActionScript3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"Css\",cf:\"CodeFunction\",\"c#\":\"C#\",delphi:\"Delphi\",diff:\"Diff\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"Html\",java:\"Java\",jfx:\"JavaFx\",js:\"Javascript\",pl:\"Perl\",php:\"Php\",plain:\"Plain Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"Sql\",vb:\"Vb\",xml:\"Xml\"}),a.commands.insertcode={execCommand:function(a,b){var c=this,d=c.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,\"pre\",!0);if(e)e.className=\"brush:\"+b+\";toolbar:false;\";else{var f=\"\";if(d.collapsed)f=browser.ie&&browser.ie11below?browser.version<=8?\"&nbsp;\":\"\":\"<br/>\";else{var g=d.extractContents(),h=c.document.createElement(\"div\");h.appendChild(g),utils.each(UE.filterNode(UE.htmlparser(h.innerHTML.replace(/[\\r\\t]/g,\"\")),c.options.filterTxtRules).children,function(a){if(browser.ie&&browser.ie11below&&browser.version>8)\"element\"==a.type?\"br\"==a.tagName?f+=\"\\n\":dtd.$empty[a.tagName]||(utils.each(a.children,function(b){\"element\"==b.type?\"br\"==b.tagName?f+=\"\\n\":dtd.$empty[a.tagName]||(f+=b.innerText()):f+=b.data}),/\\n$/.test(f)||(f+=\"\\n\")):f+=a.data+\"\\n\",!a.nextSibling()&&/\\n$/.test(f)&&(f=f.replace(/\\n$/,\"\"));else if(browser.ie&&browser.ie11below)\"element\"==a.type?\"br\"==a.tagName?f+=\"<br>\":dtd.$empty[a.tagName]||(utils.each(a.children,function(b){\"element\"==b.type?\"br\"==b.tagName?f+=\"<br>\":dtd.$empty[a.tagName]||(f+=b.innerText()):f+=b.data}),/br>$/.test(f)||(f+=\"<br>\")):f+=a.data+\"<br>\",!a.nextSibling()&&/<br>$/.test(f)&&(f=f.replace(/<br>$/,\"\"));else if(f+=\"element\"==a.type?dtd.$empty[a.tagName]?\"\":a.innerText():a.data,!/br\\/?\\s*>$/.test(f)){if(!a.nextSibling())return;f+=\"<br>\"}})}c.execCommand(\"inserthtml\",'<pre id=\"coder\"class=\"brush:'+b+';toolbar:false\">'+f+\"</pre>\",!0),e=c.document.getElementById(\"coder\"),domUtils.removeAttributes(e,\"id\");var i=e.previousSibling;i&&(3==i.nodeType&&1==i.nodeValue.length&&browser.ie&&6==browser.version||domUtils.isEmptyBlock(i))&&domUtils.remove(i);var d=c.selection.getRange();domUtils.isEmptyBlock(e)?d.setStart(e,0).setCursor(!1,!0):d.selectNodeContents(e).select()}},queryCommandValue:function(){var a=this.selection.getStartElementPath(),b=\"\";return utils.each(a,function(a){if(\"PRE\"==a.nodeName){var c=a.className.match(/brush:([^;]+)/);return b=c&&c[1]?c[1]:\"\",!1}}),b}},a.addInputRule(function(a){utils.each(a.getNodesByTagName(\"pre\"),function(a){var b=a.getNodesByTagName(\"br\");if(b.length)return void(browser.ie&&browser.ie11below&&browser.version>8&&utils.each(b,function(a){var b=UE.uNode.createText(\"\\n\");a.parentNode.insertBefore(b,a),a.parentNode.removeChild(a)}));if(!(browser.ie&&browser.ie11below&&browser.version>8)){var c=a.innerText().split(/\\n/);a.innerHTML(\"\"),utils.each(c,function(b){b.length&&a.appendChild(UE.uNode.createText(b)),a.appendChild(UE.uNode.createElement(\"br\"))})}})}),a.addOutputRule(function(a){utils.each(a.getNodesByTagName(\"pre\"),function(a){var b=\"\";utils.each(a.children,function(a){b+=\"text\"==a.type?a.data.replace(/[ ]/g,\"&nbsp;\").replace(/\\n$/,\"\"):\"br\"==a.tagName?\"\\n\":dtd.$empty[a.tagName]?a.innerText():\"\"}),a.innerText(b.replace(/(&nbsp;|\\n)+$/,\"\"))})}),a.notNeedCodeQuery={help:1,undo:1,redo:1,source:1,print:1,searchreplace:1,fullscreen:1,preview:1,insertparagraph:1,elementpath:1,insertcode:1,inserthtml:1,selectall:1};a.queryCommandState;a.queryCommandState=function(a){var b=this;return!b.notNeedCodeQuery[a.toLowerCase()]&&b.selection&&b.queryCommandValue(\"insertcode\")?-1:UE.Editor.prototype.queryCommandState.apply(this,arguments)},a.addListener(\"beforeenterkeydown\",function(){var b=a.selection.getRange(),c=domUtils.findParentByTagName(b.startContainer,\"pre\",!0);if(c){if(a.fireEvent(\"saveScene\"),\nb.collapsed||b.deleteContents(),!browser.ie||browser.ie9above){var c,d=a.document.createElement(\"br\");b.insertNode(d).setStartAfter(d).collapse(!0);var e=d.nextSibling;e||browser.ie&&!(browser.version>10)?b.setStartAfter(d):b.insertNode(d.cloneNode(!1)),c=d.previousSibling;for(var f;c;)if(f=c,c=c.previousSibling,!c||\"BR\"==c.nodeName){c=f;break}if(c){for(var g=\"\";c&&\"BR\"!=c.nodeName&&new RegExp(\"^[\\\\s\"+domUtils.fillChar+\"]*$\").test(c.nodeValue);)g+=c.nodeValue,c=c.nextSibling;if(\"BR\"!=c.nodeName){var h=c.nodeValue.match(new RegExp(\"^([\\\\s\"+domUtils.fillChar+\"]+)\"));h&&h[1]&&(g+=h[1])}g&&(g=a.document.createTextNode(g),b.insertNode(g).setStartAfter(g))}b.collapse(!0).select(!0)}else if(browser.version>8){var i=a.document.createTextNode(\"\\n\"),j=b.startContainer;if(0==b.startOffset){var k=j.previousSibling;if(k){b.insertNode(i);var l=a.document.createTextNode(\" \");b.setStartAfter(i).insertNode(l).setStart(l,0).collapse(!0).select(!0)}}else{b.insertNode(i).setStartAfter(i);var l=a.document.createTextNode(\" \");j=b.startContainer.childNodes[b.startOffset],j&&!/^\\n/.test(j.nodeValue)&&b.setStartBefore(i),b.insertNode(l).setStart(l,0).collapse(!0).select(!0)}}else{var d=a.document.createElement(\"br\");b.insertNode(d),b.insertNode(a.document.createTextNode(domUtils.fillChar)),b.setStartAfter(d),c=d.previousSibling;for(var f;c;)if(f=c,c=c.previousSibling,!c||\"BR\"==c.nodeName){c=f;break}if(c){for(var g=\"\";c&&\"BR\"!=c.nodeName&&new RegExp(\"^[ \"+domUtils.fillChar+\"]*$\").test(c.nodeValue);)g+=c.nodeValue,c=c.nextSibling;if(\"BR\"!=c.nodeName){var h=c.nodeValue.match(new RegExp(\"^([ \"+domUtils.fillChar+\"]+)\"));h&&h[1]&&(g+=h[1])}g=a.document.createTextNode(g),b.insertNode(g).setStartAfter(g)}b.collapse(!0).select()}return a.fireEvent(\"saveScene\"),!0}}),a.addListener(\"tabkeydown\",function(b,c){var d=a.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,\"pre\",!0);if(e){if(a.fireEvent(\"saveScene\"),c.shiftKey);else if(d.collapsed){var f=a.document.createTextNode(\"    \");d.insertNode(f).setStartAfter(f).collapse(!0).select(!0)}else{for(var g=d.createBookmark(),h=g.start.previousSibling;h;){if(e.firstChild===h&&!domUtils.isBr(h)){e.insertBefore(a.document.createTextNode(\"    \"),h);break}if(domUtils.isBr(h)){e.insertBefore(a.document.createTextNode(\"    \"),h.nextSibling);break}h=h.previousSibling}var i=g.end;for(h=g.start.nextSibling,e.firstChild===g.start&&e.insertBefore(a.document.createTextNode(\"    \"),h.nextSibling);h&&h!==i;){if(domUtils.isBr(h)&&h.nextSibling){if(h.nextSibling===i)break;e.insertBefore(a.document.createTextNode(\"    \"),h.nextSibling)}h=h.nextSibling}d.moveToBookmark(g).select()}return a.fireEvent(\"saveScene\"),!0}}),a.addListener(\"beforeinserthtml\",function(a,b){var c=this,d=c.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,\"pre\",!0);if(e){d.collapsed||d.deleteContents();var f=\"\";if(browser.ie&&browser.version>8){utils.each(UE.filterNode(UE.htmlparser(b),c.options.filterTxtRules).children,function(a){\"element\"==a.type?\"br\"==a.tagName?f+=\"\\n\":dtd.$empty[a.tagName]||(utils.each(a.children,function(b){\"element\"==b.type?\"br\"==b.tagName?f+=\"\\n\":dtd.$empty[a.tagName]||(f+=b.innerText()):f+=b.data}),/\\n$/.test(f)||(f+=\"\\n\")):f+=a.data+\"\\n\",!a.nextSibling()&&/\\n$/.test(f)&&(f=f.replace(/\\n$/,\"\"))});var g=c.document.createTextNode(utils.html(f.replace(/&nbsp;/g,\" \")));d.insertNode(g).selectNode(g).select()}else{var h=c.document.createDocumentFragment();utils.each(UE.filterNode(UE.htmlparser(b),c.options.filterTxtRules).children,function(a){\"element\"==a.type?\"br\"==a.tagName?h.appendChild(c.document.createElement(\"br\")):dtd.$empty[a.tagName]||(utils.each(a.children,function(b){\"element\"==b.type?\"br\"==b.tagName?h.appendChild(c.document.createElement(\"br\")):dtd.$empty[a.tagName]||h.appendChild(c.document.createTextNode(utils.html(b.innerText().replace(/&nbsp;/g,\" \")))):h.appendChild(c.document.createTextNode(utils.html(b.data.replace(/&nbsp;/g,\" \"))))}),\"BR\"!=h.lastChild.nodeName&&h.appendChild(c.document.createElement(\"br\"))):h.appendChild(c.document.createTextNode(utils.html(a.data.replace(/&nbsp;/g,\" \")))),a.nextSibling()||\"BR\"!=h.lastChild.nodeName||h.removeChild(h.lastChild)}),d.insertNode(h).select()}return!0}}),a.addListener(\"keydown\",function(a,b){var c=this,d=b.keyCode||b.which;if(40==d){var e,f=c.selection.getRange(),g=f.startContainer;if(f.collapsed&&(e=domUtils.findParentByTagName(f.startContainer,\"pre\",!0))&&!e.nextSibling){for(var h=e.lastChild;h&&\"BR\"==h.nodeName;)h=h.previousSibling;(h===g||f.startContainer===e&&f.startOffset==e.childNodes.length)&&(c.execCommand(\"insertparagraph\"),domUtils.preventDefault(b))}}}),a.addListener(\"delkeydown\",function(b,c){var d=this.selection.getRange();d.txtToElmBoundary(!0);var e=d.startContainer;if(domUtils.isTagNode(e,\"pre\")&&d.collapsed&&domUtils.isStartInblock(d)){var f=a.document.createElement(\"p\");return domUtils.fillNode(a.document,f),e.parentNode.insertBefore(f,e),domUtils.remove(e),d.setStart(f,0).setCursor(!1,!0),domUtils.preventDefault(c),!0}})},UE.commands.cleardoc={execCommand:function(a){var b=this,c=b.options.enterTag,d=b.selection.getRange();\"br\"==c?(b.body.innerHTML=\"<br/>\",d.setStart(b.body,0).setCursor()):(b.body.innerHTML=\"<p>\"+(ie?\"\":\"<br/>\")+\"</p>\",d.setStart(b.body.firstChild,0).setCursor(!1,!0)),setTimeout(function(){b.fireEvent(\"clearDoc\")},0)}},UE.plugin.register(\"anchor\",function(){return{bindEvents:{ready:function(){utils.cssRule(\"anchor\",\".anchorclass{background: url('\"+this.options.themePath+this.options.theme+\"/images/anchor.gif') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}\",this.document)}},outputRule:function(a){utils.each(a.getNodesByTagName(\"img\"),function(a){var b;(b=a.getAttr(\"anchorname\"))&&(a.tagName=\"a\",a.setAttr({anchorname:\"\",name:b,\"class\":\"\"}))})},inputRule:function(a){utils.each(a.getNodesByTagName(\"a\"),function(a){var b;if((b=a.getAttr(\"name\"))&&!a.getAttr(\"href\")){if(/^\\_Toc\\d+$/.test(b))return void a.parentNode.removeChild(a);a.tagName=\"img\",a.setAttr({anchorname:a.getAttr(\"name\"),\"class\":\"anchorclass\"}),a.setAttr(\"name\")}})},commands:{anchor:{execCommand:function(a,b){var c=this.selection.getRange(),d=c.getClosedNode();if(d&&d.getAttribute(\"anchorname\"))b?d.setAttribute(\"anchorname\",b):(c.setStartBefore(d).setCursor(),domUtils.remove(d));else if(b){var e=this.document.createElement(\"img\");c.collapse(!0),domUtils.setAttributes(e,{anchorname:b,\"class\":\"anchorclass\"}),c.insertNode(e).setStartAfter(e).setCursor(!1,!0)}}}}}}),UE.plugins.wordcount=function(){var a=this;a.setOpt(\"wordCount\",!0),a.addListener(\"contentchange\",function(){a.fireEvent(\"wordcount\")});var b;a.addListener(\"ready\",function(){var a=this;domUtils.on(a.body,\"keyup\",function(c){var d=c.keyCode||c.which,e={16:1,18:1,20:1,37:1,38:1,39:1,40:1};d in e||(clearTimeout(b),b=setTimeout(function(){a.fireEvent(\"wordcount\")},200))})})},UE.plugins.pagebreak=function(){function a(a){if(domUtils.isEmptyBlock(a)){for(var b,d=a.firstChild;d&&1==d.nodeType&&domUtils.isEmptyBlock(d);)b=d,d=d.firstChild;!b&&(b=a),domUtils.fillNode(c.document,b)}}function b(a){return a&&1==a.nodeType&&\"HR\"==a.tagName&&\"pagebreak\"==a.className}var c=this,d=[\"td\"];c.setOpt(\"pageBreakTag\",\"_ueditor_page_break_tag_\"),c.ready(function(){utils.cssRule(\"pagebreak\",\".pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}\",c.document)}),c.addInputRule(function(a){a.traversal(function(a){if(\"text\"==a.type&&a.data==c.options.pageBreakTag){var b=UE.uNode.createElement('<hr class=\"pagebreak\" noshade=\"noshade\" size=\"5\" style=\"-webkit-user-select: none;\">');a.parentNode.insertBefore(b,a),a.parentNode.removeChild(a)}})}),c.addOutputRule(function(a){utils.each(a.getNodesByTagName(\"hr\"),function(a){if(\"pagebreak\"==a.getAttr(\"class\")){var b=UE.uNode.createText(c.options.pageBreakTag);a.parentNode.insertBefore(b,a),a.parentNode.removeChild(a)}})}),c.commands.pagebreak={execCommand:function(){var e=c.selection.getRange(),f=c.document.createElement(\"hr\");domUtils.setAttributes(f,{\"class\":\"pagebreak\",noshade:\"noshade\",size:\"5\"}),domUtils.unSelectable(f);var g,h=domUtils.findParentByTagName(e.startContainer,d,!0),i=[];if(h)switch(h.tagName){case\"TD\":if(g=h.parentNode,g.previousSibling)g.parentNode.insertBefore(f,g),i=domUtils.findParents(f);else{var j=domUtils.findParentByTagName(g,\"table\");j.parentNode.insertBefore(f,j),i=domUtils.findParents(f,!0)}g=i[1],f!==g&&domUtils.breakParent(f,g),c.fireEvent(\"afteradjusttable\",c.document)}else{if(!e.collapsed){e.deleteContents();for(var k=e.startContainer;!domUtils.isBody(k)&&domUtils.isBlockElm(k)&&domUtils.isEmptyNode(k);)e.setStartBefore(k).collapse(!0),domUtils.remove(k),k=e.startContainer}e.insertNode(f);for(var l,g=f.parentNode;!domUtils.isBody(g);)domUtils.breakParent(f,g),l=f.nextSibling,l&&domUtils.isEmptyBlock(l)&&domUtils.remove(l),g=f.parentNode;l=f.nextSibling;var m=f.previousSibling;if(b(m)?domUtils.remove(m):m&&a(m),l)b(l)?domUtils.remove(l):a(l),e.setEndAfter(f).collapse(!1);else{var n=c.document.createElement(\"p\");f.parentNode.appendChild(n),domUtils.fillNode(c.document,n),e.setStart(n,0).collapse(!0)}e.select(!0)}}}},UE.plugin.register(\"wordimage\",function(){var a=this,b=[];return{commands:{wordimage:{execCommand:function(){for(var b,c=domUtils.getElementsByTagName(a.body,\"img\"),d=[],e=0;b=c[e++];){var f=b.getAttribute(\"word_img\");f&&d.push(f)}return d},queryCommandState:function(){b=domUtils.getElementsByTagName(a.body,\"img\");for(var c,d=0;c=b[d++];)if(c.getAttribute(\"word_img\"))return 1;return-1},notNeedUndo:!0}},inputRule:function(b){utils.each(b.getNodesByTagName(\"img\"),function(b){var c=b.attrs,d=parseInt(c.width)<128||parseInt(c.height)<43,e=a.options,f=e.UEDITOR_HOME_URL+\"themes/default/images/spacer.gif\";c.src&&/^(?:(file:\\/+))/.test(c.src)&&b.setAttr({width:c.width,height:c.height,alt:c.alt,word_img:c.src,src:f,style:\"background:url(\"+(d?e.themePath+e.theme+\"/images/word.gif\":e.langPath+e.lang+\"/images/localimage.png\")+\") no-repeat center center;border:1px solid #ddd\"})})}}}),UE.plugins.dragdrop=function(){var a=this;a.ready(function(){domUtils.on(this.body,\"dragend\",function(){var b=a.selection.getRange(),c=b.getClosedNode()||a.selection.getStart();if(c&&\"IMG\"==c.tagName){for(var d,e=c.previousSibling;(d=c.nextSibling)&&1==d.nodeType&&\"SPAN\"==d.tagName&&!d.firstChild;)domUtils.remove(d);(!e||1!=e.nodeType||domUtils.isEmptyBlock(e))&&e||d&&(!d||domUtils.isEmptyBlock(d))||(e&&\"P\"==e.tagName&&!domUtils.isEmptyBlock(e)?(e.appendChild(c),domUtils.moveChild(d,e),domUtils.remove(d)):d&&\"P\"==d.tagName&&!domUtils.isEmptyBlock(d)&&d.insertBefore(c,d.firstChild),e&&\"P\"==e.tagName&&domUtils.isEmptyBlock(e)&&domUtils.remove(e),d&&\"P\"==d.tagName&&domUtils.isEmptyBlock(d)&&domUtils.remove(d),b.selectNode(c).select(),a.fireEvent(\"saveScene\"))}})}),a.addListener(\"keyup\",function(b,c){var d=c.keyCode||c.which;if(13==d){var e,f=a.selection.getRange();(e=domUtils.findParentByTagName(f.startContainer,\"p\",!0))&&\"center\"==domUtils.getComputedStyle(e,\"text-align\")&&domUtils.removeStyle(e,\"text-align\")}})},UE.plugins.undo=function(){function a(a,b){if(a.length!=b.length)return 0;for(var c=0,d=a.length;c<d;c++)if(a[c]!=b[c])return 0;return 1}function b(b,c){return b.collapsed!=c.collapsed?0:a(b.startAddress,c.startAddress)&&a(b.endAddress,c.endAddress)?1:0}function c(){this.list=[],this.index=0,this.hasUndo=!1,this.hasRedo=!1,this.undo=function(){if(this.hasUndo){if(!this.list[this.index-1]&&1==this.list.length)return void this.reset();for(;this.list[this.index].content==this.list[this.index-1].content;)if(this.index--,0==this.index)return this.restore(0);this.restore(--this.index)}},this.redo=function(){if(this.hasRedo){for(;this.list[this.index].content==this.list[this.index+1].content;)if(this.index++,this.index==this.list.length-1)return this.restore(this.index);this.restore(++this.index)}},this.restore=function(){var a=this.editor,b=this.list[this.index],c=UE.htmlparser(b.content.replace(h,\"\"));a.options.autoClearEmptyNode=!1,a.filterInputRule(c),a.options.autoClearEmptyNode=j,a.document.body.innerHTML=c.toHtml(),a.fireEvent(\"afterscencerestore\"),browser.ie&&utils.each(domUtils.getElementsByTagName(a.document,\"td th caption p\"),function(b){domUtils.isEmptyNode(b)&&domUtils.fillNode(a.document,b)});try{var d=new dom.Range(a.document).moveToAddress(b.address);d.select(i[d.startContainer.nodeName.toLowerCase()])}catch(e){}this.update(),this.clearKey(),a.fireEvent(\"reset\",!0)},this.getScene=function(){var a=this.editor,b=a.selection.getRange(),c=b.createAddress(!1,!0);a.fireEvent(\"beforegetscene\");var d=UE.htmlparser(a.body.innerHTML);a.options.autoClearEmptyNode=!1,a.filterOutputRule(d),a.options.autoClearEmptyNode=j;var e=d.toHtml();return a.fireEvent(\"aftergetscene\"),{address:c,content:e}},this.save=function(a,c){clearTimeout(d);var g=this.getScene(c),h=this.list[this.index];h&&h.content!=g.content&&e.trigger(\"contentchange\"),h&&h.content==g.content&&(a?1:b(h.address,g.address))||(this.list=this.list.slice(0,this.index+1),this.list.push(g),this.list.length>f&&this.list.shift(),this.index=this.list.length-1,this.clearKey(),this.update())},this.update=function(){this.hasRedo=!!this.list[this.index+1],this.hasUndo=!!this.list[this.index-1]},this.reset=function(){this.list=[],this.index=0,this.hasUndo=!1,this.hasRedo=!1,this.clearKey()},this.clearKey=function(){m=0,k=null}}var d,e=this,f=e.options.maxUndoCount||20,g=e.options.maxInputCount||20,h=new RegExp(domUtils.fillChar+\"|</hr>\",\"gi\"),i={ol:1,ul:1,table:1,tbody:1,tr:1,body:1},j=e.options.autoClearEmptyNode;e.undoManger=new c,e.undoManger.editor=e,e.addListener(\"saveScene\",function(){var a=Array.prototype.splice.call(arguments,1);this.undoManger.save.apply(this.undoManger,a)}),e.addListener(\"reset\",function(a,b){b||this.undoManger.reset()}),e.commands.redo=e.commands.undo={execCommand:function(a){this.undoManger[a]()},queryCommandState:function(a){return this.undoManger[\"has\"+(\"undo\"==a.toLowerCase()?\"Undo\":\"Redo\")]?0:-1},notNeedUndo:1};var k,l={16:1,17:1,18:1,37:1,38:1,39:1,40:1},m=0,n=!1;e.addListener(\"ready\",function(){domUtils.on(this.body,\"compositionstart\",function(){n=!0}),domUtils.on(this.body,\"compositionend\",function(){n=!1})}),e.addshortcutkey({Undo:\"ctrl+90\",Redo:\"ctrl+89\"});var o=!0;e.addListener(\"keydown\",function(a,b){function c(a){a.undoManger.save(!1,!0),a.fireEvent(\"selectionchange\")}var e=this,f=b.keyCode||b.which;if(!(l[f]||b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)){if(n)return;if(!e.selection.getRange().collapsed)return e.undoManger.save(!1,!0),void(o=!1);0==e.undoManger.list.length&&e.undoManger.save(!0),clearTimeout(d),d=setTimeout(function(){if(n)var a=setInterval(function(){n||(c(e),clearInterval(a))},300);else c(e)},200),k=f,m++,m>=g&&c(e)}}),e.addListener(\"keyup\",function(a,b){var c=b.keyCode||b.which;if(!(l[c]||b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)){if(n)return;o||(this.undoManger.save(!1,!0),o=!0)}}),e.stopCmdUndo=function(){e.__hasEnterExecCommand=!0},e.startCmdUndo=function(){e.__hasEnterExecCommand=!1}},UE.plugin.register(\"copy\",function(){function a(){ZeroClipboard.config({debug:!1,swfPath:b.options.UEDITOR_HOME_URL+\"third-party/zeroclipboard/ZeroClipboard.swf\"});var a=b.zeroclipboard=new ZeroClipboard;a.on(\"copy\",function(a){var c=a.client,d=b.selection.getRange(),e=document.createElement(\"div\");e.appendChild(d.cloneContents()),c.setText(e.innerText||e.textContent),c.setHtml(e.innerHTML),d.select()}),a.on(\"mouseover mouseout\",function(a){var b=a.target;b&&(\"mouseover\"==a.type?domUtils.addClass(b,\"edui-state-hover\"):\"mouseout\"==a.type&&domUtils.removeClasses(b,\"edui-state-hover\"))}),a.on(\"wrongflash noflash\",function(){ZeroClipboard.destroy()}),b.fireEvent(\"zeroclipboardready\",a)}var b=this;return{bindEvents:{ready:function(){browser.ie||(window.ZeroClipboard?a():utils.loadFile(document,{src:b.options.UEDITOR_HOME_URL+\"third-party/zeroclipboard/ZeroClipboard.js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){a()}))}},commands:{copy:{execCommand:function(a){b.document.execCommand(\"copy\")||alert(b.getLang(\"copymsg\"))}}}}}),UE.plugins.paste=function(){function a(a){var b=this.document;if(!b.getElementById(\"baidu_pastebin\")){var c=this.selection.getRange(),d=c.createBookmark(),e=b.createElement(\"div\");e.id=\"baidu_pastebin\",browser.webkit&&e.appendChild(b.createTextNode(domUtils.fillChar+domUtils.fillChar)),b.body.appendChild(e),d.start.style.display=\"\",e.style.cssText=\"position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:\"+domUtils.getXY(d.start).y+\"px\",c.selectNodeContents(e).select(!0),setTimeout(function(){if(browser.webkit)for(var f,g=0,h=b.querySelectorAll(\"#baidu_pastebin\");f=h[g++];){if(!domUtils.isEmptyNode(f)){e=f;break}domUtils.remove(f)}try{e.parentNode.removeChild(e)}catch(i){}c.moveToBookmark(d).select(!0),a(e)},0)}}function b(a){return a.replace(/<(\\/?)([\\w\\-]+)([^>]*)>/gi,function(a,b,c,d){return c=c.toLowerCase(),{img:1}[c]?a:(d=d.replace(/([\\w\\-]*?)\\s*=\\s*((\"([^\"]*)\")|('([^']*)')|([^\\s>]+))/gi,function(a,b,c){return{src:1,href:1,name:1}[b.toLowerCase()]?b+\"=\"+c+\" \":\"\"}),{span:1,div:1}[c]?\"\":\"<\"+b+c+\" \"+utils.trim(d)+\">\")})}function c(a){var c;if(a.firstChild){for(var h,i=domUtils.getElementsByTagName(a,\"span\"),j=0;h=i[j++];)\"_baidu_cut_start\"!=h.id&&\"_baidu_cut_end\"!=h.id||domUtils.remove(h);if(browser.webkit){for(var k,l=a.querySelectorAll(\"div br\"),j=0;k=l[j++];){var m=k.parentNode;\"DIV\"==m.tagName&&1==m.childNodes.length&&(m.innerHTML=\"<p><br/></p>\",domUtils.remove(m))}for(var n,o=a.querySelectorAll(\"#baidu_pastebin\"),j=0;n=o[j++];){var p=d.document.createElement(\"p\");for(n.parentNode.insertBefore(p,n);n.firstChild;)p.appendChild(n.firstChild);domUtils.remove(n)}for(var q,r=a.querySelectorAll(\"meta\"),j=0;q=r[j++];)domUtils.remove(q);var l=a.querySelectorAll(\"br\");for(j=0;q=l[j++];)/^apple-/i.test(q.className)&&domUtils.remove(q)}if(browser.gecko){var s=a.querySelectorAll(\"[_moz_dirty]\");for(j=0;q=s[j++];)q.removeAttribute(\"_moz_dirty\")}if(!browser.ie)for(var q,t=a.querySelectorAll(\"span.Apple-style-span\"),j=0;q=t[j++];)domUtils.remove(q,!0);c=a.innerHTML,c=UE.filterWord(c);var u=UE.htmlparser(c);if(d.options.filterRules&&UE.filterNode(u,d.options.filterRules),d.filterInputRule(u),browser.webkit){var v=u.lastChild();v&&\"element\"==v.type&&\"br\"==v.tagName&&u.removeChild(v),utils.each(d.body.querySelectorAll(\"div\"),function(a){domUtils.isEmptyBlock(a)&&domUtils.remove(a,!0)})}if(c={html:u.toHtml()},d.fireEvent(\"beforepaste\",c,u),!c.html)return;u=UE.htmlparser(c.html,!0),1===d.queryCommandState(\"pasteplain\")?d.execCommand(\"insertHtml\",UE.filterNode(u,d.options.filterTxtRules).toHtml(),!0):(UE.filterNode(u,d.options.filterTxtRules),e=u.toHtml(),f=c.html,g=d.selection.getRange().createAddress(!0),d.execCommand(\"insertHtml\",d.getOpt(\"retainOnlyLabelPasted\")===!0?b(f):f,!0)),d.fireEvent(\"afterpaste\",c)}}var d=this;d.setOpt({retainOnlyLabelPasted:!1});var e,f,g;d.addListener(\"pasteTransfer\",function(a,c){if(g&&e&&f&&e!=f){var h=d.selection.getRange();if(h.moveToAddress(g,!0),!h.collapsed){for(;!domUtils.isBody(h.startContainer);){var i=h.startContainer;if(1==i.nodeType){if(i=i.childNodes[h.startOffset],!i){h.setStartBefore(h.startContainer);continue}var j=i.previousSibling;j&&3==j.nodeType&&new RegExp(\"^[\\n\\r\\t \"+domUtils.fillChar+\"]*$\").test(j.nodeValue)&&h.setStartBefore(j)}if(0!=h.startOffset)break;h.setStartBefore(h.startContainer)}for(;!domUtils.isBody(h.endContainer);){var k=h.endContainer;if(1==k.nodeType){if(k=k.childNodes[h.endOffset],!k){h.setEndAfter(h.endContainer);continue}var l=k.nextSibling;l&&3==l.nodeType&&new RegExp(\"^[\\n\\r\\t\"+domUtils.fillChar+\"]*$\").test(l.nodeValue)&&h.setEndAfter(l)}if(h.endOffset!=h.endContainer[3==h.endContainer.nodeType?\"nodeValue\":\"childNodes\"].length)break;h.setEndAfter(h.endContainer)}}h.deleteContents(),h.select(!0),d.__hasEnterExecCommand=!0;var m=f;2===c?m=b(m):c&&(m=e),d.execCommand(\"inserthtml\",m,!0),d.__hasEnterExecCommand=!1;for(var n=d.selection.getRange();!domUtils.isBody(n.startContainer)&&!n.startOffset&&n.startContainer[3==n.startContainer.nodeType?\"nodeValue\":\"childNodes\"].length;)n.setStartBefore(n.startContainer);var o=n.createAddress(!0);g.endAddress=o.startAddress}}),d.addListener(\"ready\",function(){domUtils.on(d.body,\"cut\",function(){var a=d.selection.getRange();!a.collapsed&&d.undoManger&&d.undoManger.save()}),domUtils.on(d.body,browser.ie||browser.opera?\"keydown\":\"paste\",function(b){(!browser.ie&&!browser.opera||(b.ctrlKey||b.metaKey)&&\"86\"==b.keyCode)&&a.call(d,function(a){c(a)})})}),d.commands.paste={execCommand:function(b){browser.ie?(a.call(d,function(a){c(a)}),d.document.execCommand(\"paste\")):alert(d.getLang(\"pastemsg\"))}}},UE.plugins.pasteplain=function(){var a=this;a.setOpt({pasteplain:!1,filterTxtRules:function(){function a(a){a.tagName=\"p\",a.setStyle()}function b(a){a.parentNode.removeChild(a,!0)}return{\"-\":\"script style object iframe embed input select\",p:{$:{}},br:{$:{}},div:function(a){for(var b,c=UE.uNode.createElement(\"p\");b=a.firstChild();)\"text\"!=b.type&&UE.dom.dtd.$block[b.tagName]?c.firstChild()?(a.parentNode.insertBefore(c,a),c=UE.uNode.createElement(\"p\")):a.parentNode.insertBefore(b,a):c.appendChild(b);c.firstChild()&&a.parentNode.insertBefore(c,a),a.parentNode.removeChild(a)},ol:b,ul:b,dl:b,dt:b,dd:b,li:b,caption:a,th:a,tr:a,h1:a,h2:a,h3:a,h4:a,h5:a,h6:a,td:function(a){var b=!!a.innerText();b&&a.parentNode.insertAfter(UE.uNode.createText(\" &nbsp; &nbsp;\"),a),a.parentNode.removeChild(a,a.innerText())}}}()});var b=a.options.pasteplain;a.commands.pasteplain={queryCommandState:function(){return b?1:0},execCommand:function(){b=0|!b},notNeedUndo:1}},UE.plugins.list=function(){function a(a){var b=[];for(var c in a)b.push(c);return b}function b(a){var b=a.className;return domUtils.hasClass(a,/custom_/)?b.match(/custom_(\\w+)/)[1]:domUtils.getStyle(a,\"list-style-type\")}function c(a,c){utils.each(domUtils.getElementsByTagName(a,\"ol ul\"),function(f){if(domUtils.inDoc(f,a)){var g=f.parentNode;if(g.tagName==f.tagName){var h=b(f)||(\"OL\"==f.tagName?\"decimal\":\"disc\"),i=b(g)||(\"OL\"==g.tagName?\"decimal\":\"disc\");if(h==i){var l=utils.indexOf(k[f.tagName],h);l=l+1==k[f.tagName].length?0:l+1,e(f,k[f.tagName][l])}}var m=0,n=2;domUtils.hasClass(f,/custom_/)?/[ou]l/i.test(g.tagName)&&domUtils.hasClass(g,/custom_/)||(n=1):/[ou]l/i.test(g.tagName)&&domUtils.hasClass(g,/custom_/)&&(n=3);var o=domUtils.getStyle(f,\"list-style-type\");o&&(f.style.cssText=\"list-style-type:\"+o),f.className=utils.trim(f.className.replace(/list-paddingleft-\\w+/,\"\"))+\" list-paddingleft-\"+n,utils.each(domUtils.getElementsByTagName(f,\"li\"),function(a){if(a.style.cssText&&(a.style.cssText=\"\"),!a.firstChild)return void domUtils.remove(a);if(a.parentNode===f){if(m++,domUtils.hasClass(f,/custom_/)){var c=1,d=b(f);if(\"OL\"==f.tagName){if(d)switch(d){case\"cn\":case\"cn1\":case\"cn2\":m>10&&(m%10==0||m>10&&m<20)?c=2:m>20&&(c=3);break;case\"num2\":m>9&&(c=2)}a.className=\"list-\"+j[d]+m+\" list-\"+d+\"-paddingleft-\"+c}else a.className=\"list-\"+j[d]+\" list-\"+d+\"-paddingleft\"}else a.className=a.className.replace(/list-[\\w\\-]+/gi,\"\");var e=a.getAttribute(\"class\");null===e||e.replace(/\\s/g,\"\")||domUtils.removeAttributes(a,\"class\")}}),!c&&d(f,f.tagName.toLowerCase(),b(f)||domUtils.getStyle(f,\"list-style-type\"),!0)}})}function d(a,d,e,f){var g=a.nextSibling;g&&1==g.nodeType&&g.tagName.toLowerCase()==d&&(b(g)||domUtils.getStyle(g,\"list-style-type\")||(\"ol\"==d?\"decimal\":\"disc\"))==e&&(domUtils.moveChild(g,a),0==g.childNodes.length&&domUtils.remove(g)),g&&domUtils.isFillChar(g)&&domUtils.remove(g);var h=a.previousSibling;h&&1==h.nodeType&&h.tagName.toLowerCase()==d&&(b(h)||domUtils.getStyle(h,\"list-style-type\")||(\"ol\"==d?\"decimal\":\"disc\"))==e&&domUtils.moveChild(a,h),h&&domUtils.isFillChar(h)&&domUtils.remove(h),!f&&domUtils.isEmptyBlock(a)&&domUtils.remove(a),b(a)&&c(a.ownerDocument,!0)}function e(a,b){j[b]&&(a.className=\"custom_\"+b);try{domUtils.setStyle(a,\"list-style-type\",b)}catch(c){}}function f(a){var b=a.previousSibling;b&&domUtils.isEmptyBlock(b)&&domUtils.remove(b),b=a.nextSibling,b&&domUtils.isEmptyBlock(b)&&domUtils.remove(b)}function g(a){for(;a&&!domUtils.isBody(a);){if(\"TABLE\"==a.nodeName)return null;if(\"LI\"==a.nodeName)return a;a=a.parentNode}}var h=this,i={TD:1,PRE:1,BLOCKQUOTE:1},j={cn:\"cn-1-\",cn1:\"cn-2-\",cn2:\"cn-3-\",num:\"num-1-\",num1:\"num-2-\",num2:\"num-3-\",dash:\"dash\",dot:\"dot\"};h.setOpt({autoTransWordToList:!1,insertorderedlist:{num:\"\",num1:\"\",num2:\"\",cn:\"\",cn1:\"\",cn2:\"\",decimal:\"\",\"lower-alpha\":\"\",\"lower-roman\":\"\",\"upper-alpha\":\"\",\"upper-roman\":\"\"},insertunorderedlist:{circle:\"\",disc:\"\",square:\"\",dash:\"\",dot:\"\"},listDefaultPaddingLeft:\"30\",listiconpath:\"http://bs.baidu.com/listicon/\",maxListLevel:-1,disablePInList:!1});var k={OL:a(h.options.insertorderedlist),UL:a(h.options.insertunorderedlist)},l=h.options.listiconpath;for(var m in j)h.options.insertorderedlist.hasOwnProperty(m)||h.options.insertunorderedlist.hasOwnProperty(m)||delete j[m];h.ready(function(){var a=[];for(var b in j){if(\"dash\"==b||\"dot\"==b)a.push(\"li.list-\"+j[b]+\"{background-image:url(\"+l+j[b]+\".gif)}\"),a.push(\"ul.custom_\"+b+\"{list-style:none;}ul.custom_\"+b+\" li{background-position:0 3px;background-repeat:no-repeat}\");else{for(var c=0;c<99;c++)a.push(\"li.list-\"+j[b]+c+\"{background-image:url(\"+l+\"list-\"+j[b]+c+\".gif)}\");a.push(\"ol.custom_\"+b+\"{list-style:none;}ol.custom_\"+b+\" li{background-position:0 3px;background-repeat:no-repeat}\")}switch(b){case\"cn\":a.push(\"li.list-\"+b+\"-paddingleft-1{padding-left:25px}\"),a.push(\"li.list-\"+b+\"-paddingleft-2{padding-left:40px}\"),a.push(\"li.list-\"+b+\"-paddingleft-3{padding-left:55px}\");break;case\"cn1\":a.push(\"li.list-\"+b+\"-paddingleft-1{padding-left:30px}\"),a.push(\"li.list-\"+b+\"-paddingleft-2{padding-left:40px}\"),a.push(\"li.list-\"+b+\"-paddingleft-3{padding-left:55px}\");break;case\"cn2\":a.push(\"li.list-\"+b+\"-paddingleft-1{padding-left:40px}\"),a.push(\"li.list-\"+b+\"-paddingleft-2{padding-left:55px}\"),a.push(\"li.list-\"+b+\"-paddingleft-3{padding-left:68px}\");break;case\"num\":case\"num1\":a.push(\"li.list-\"+b+\"-paddingleft-1{padding-left:25px}\");break;case\"num2\":a.push(\"li.list-\"+b+\"-paddingleft-1{padding-left:35px}\"),a.push(\"li.list-\"+b+\"-paddingleft-2{padding-left:40px}\");break;case\"dash\":a.push(\"li.list-\"+b+\"-paddingleft{padding-left:35px}\");break;case\"dot\":a.push(\"li.list-\"+b+\"-paddingleft{padding-left:20px}\")}}a.push(\".list-paddingleft-1{padding-left:0}\"),a.push(\".list-paddingleft-2{padding-left:\"+h.options.listDefaultPaddingLeft+\"px}\"),a.push(\".list-paddingleft-3{padding-left:\"+2*h.options.listDefaultPaddingLeft+\"px}\"),utils.cssRule(\"list\",\"ol,ul{margin:0;pading:0;\"+(browser.ie?\"\":\"width:95%\")+\"}li{clear:both;}\"+a.join(\"\\n\"),h.document)}),h.ready(function(){domUtils.on(h.body,\"cut\",function(){setTimeout(function(){var a,b=h.selection.getRange();if(!b.collapsed&&(a=domUtils.findParentByTagName(b.startContainer,\"li\",!0))&&!a.nextSibling&&domUtils.isEmptyBlock(a)){var c,d=a.parentNode;if(c=d.previousSibling)domUtils.remove(d),b.setStartAtLast(c).collapse(!0),b.select(!0);else if(c=d.nextSibling)domUtils.remove(d),b.setStartAtFirst(c).collapse(!0),b.select(!0);else{var e=h.document.createElement(\"p\");domUtils.fillNode(h.document,e),d.parentNode.insertBefore(e,d),domUtils.remove(d),b.setStart(e,0).collapse(!0),b.select(!0)}}})})}),h.addListener(\"beforepaste\",function(a,c){var d,e=this,f=e.selection.getRange(),g=UE.htmlparser(c.html,!0);if(d=domUtils.findParentByTagName(f.startContainer,\"li\",!0)){var h=d.parentNode,i=\"OL\"==h.tagName?\"ul\":\"ol\";utils.each(g.getNodesByTagName(i),function(c){if(c.tagName=h.tagName,c.setAttr(),c.parentNode===g)a=b(h)||(\"OL\"==h.tagName?\"decimal\":\"disc\");else{var d=c.parentNode.getAttr(\"class\");a=d&&/custom_/.test(d)?d.match(/custom_(\\w+)/)[1]:c.parentNode.getStyle(\"list-style-type\"),a||(a=\"OL\"==h.tagName?\"decimal\":\"disc\")}var e=utils.indexOf(k[h.tagName],a);c.parentNode!==g&&(e=e+1==k[h.tagName].length?0:e+1);var f=k[h.tagName][e];j[f]?c.setAttr(\"class\",\"custom_\"+f):c.setStyle(\"list-style-type\",f)})}c.html=g.toHtml()}),h.getOpt(\"disablePInList\")===!0&&h.addOutputRule(function(a){utils.each(a.getNodesByTagName(\"li\"),function(a){var b=[],c=0;utils.each(a.children,function(d){if(\"p\"==d.tagName){for(var e;e=d.children.pop();)b.splice(c,0,e),e.parentNode=a,lastNode=e;if(e=b[b.length-1],!e||\"element\"!=e.type||\"br\"!=e.tagName){var f=UE.uNode.createElement(\"br\");f.parentNode=a,b.push(f)}c=b.length}}),b.length&&(a.children=b)})}),h.addInputRule(function(a){function b(a,b){var e=b.firstChild();if(e&&\"element\"==e.type&&\"span\"==e.tagName&&/Wingdings|Symbol/.test(e.getStyle(\"font-family\"))){for(var f in d)if(d[f]==e.data)return f;return\"disc\"}for(var f in c)if(c[f].test(a))return f}if(utils.each(a.getNodesByTagName(\"li\"),function(a){for(var b,c=UE.uNode.createElement(\"p\"),d=0;b=a.children[d];)\"text\"==b.type||dtd.p[b.tagName]?c.appendChild(b):c.firstChild()?(a.insertBefore(c,b),c=UE.uNode.createElement(\"p\"),d+=2):d++;(c.firstChild()&&!c.parentNode||!a.firstChild())&&a.appendChild(c),c.firstChild()||c.innerHTML(browser.ie?\"&nbsp;\":\"<br/>\");var e=a.firstChild(),f=e.lastChild();f&&\"text\"==f.type&&/^\\s*$/.test(f.data)&&e.removeChild(f)}),h.options.autoTransWordToList){var c={num1:/^\\d+\\)/,decimal:/^\\d+\\./,\"lower-alpha\":/^[a-z]+\\)/,\"upper-alpha\":/^[A-Z]+\\./,cn:/^[\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+[\\u3001]/,cn2:/^\\([\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+\\)/},d={square:\"n\"};utils.each(a.getNodesByTagName(\"p\"),function(a){function d(a,b,d){if(\"ol\"==a.tagName)if(browser.ie){var e=b.firstChild();\"element\"==e.type&&\"span\"==e.tagName&&c[d].test(e.innerText())&&b.removeChild(e)}else b.innerHTML(b.innerHTML().replace(c[d],\"\"));else b.removeChild(b.firstChild());var f=UE.uNode.createElement(\"li\");f.appendChild(b),a.appendChild(f)}if(\"MsoListParagraph\"==a.getAttr(\"class\")){a.setStyle(\"margin\",\"\"),a.setStyle(\"margin-left\",\"\"),a.setAttr(\"class\",\"\");var e,f=a,g=a;if(\"li\"!=a.parentNode.tagName&&(e=b(a.innerText(),a))){var i=UE.uNode.createElement(h.options.insertorderedlist.hasOwnProperty(e)?\"ol\":\"ul\");for(j[e]?i.setAttr(\"class\",\"custom_\"+e):i.setStyle(\"list-style-type\",e);a&&\"li\"!=a.parentNode.tagName&&b(a.innerText(),a);)f=a.nextSibling(),f||a.parentNode.insertBefore(i,a),d(i,a,e),a=f;!i.parentNode&&a&&a.parentNode&&a.parentNode.insertBefore(i,a)}var k=g.firstChild();k&&\"element\"==k.type&&\"span\"==k.tagName&&/^\\s*(&nbsp;)+\\s*$/.test(k.innerText())&&k.parentNode.removeChild(k)}})}}),h.addListener(\"contentchange\",function(){c(h.document)}),h.addListener(\"keydown\",function(a,b){function c(){b.preventDefault?b.preventDefault():b.returnValue=!1,h.fireEvent(\"contentchange\"),h.undoManger&&h.undoManger.save()}function d(a,b){for(;a&&!domUtils.isBody(a);){if(b(a))return null;if(1==a.nodeType&&/[ou]l/i.test(a.tagName))return a;a=a.parentNode}return null}var e=b.keyCode||b.which;if(13==e&&!b.shiftKey){var g=h.selection.getRange(),i=domUtils.findParent(g.startContainer,function(a){return domUtils.isBlockElm(a)},!0),j=domUtils.findParentByTagName(g.startContainer,\"li\",!0);if(i&&\"PRE\"!=i.tagName&&!j){var k=i.innerHTML.replace(new RegExp(domUtils.fillChar,\"g\"),\"\");/^\\s*1\\s*\\.[^\\d]/.test(k)&&(i.innerHTML=k.replace(/^\\s*1\\s*\\./,\"\"),g.setStartAtLast(i).collapse(!0).select(),h.__hasEnterExecCommand=!0,h.execCommand(\"insertorderedlist\"),h.__hasEnterExecCommand=!1)}var l=h.selection.getRange(),m=d(l.startContainer,function(a){return\"TABLE\"==a.tagName}),n=l.collapsed?m:d(l.endContainer,function(a){return\"TABLE\"==a.tagName});if(m&&n&&m===n){if(!l.collapsed){if(m=domUtils.findParentByTagName(l.startContainer,\"li\",!0),n=domUtils.findParentByTagName(l.endContainer,\"li\",!0),!m||!n||m!==n){var o=l.cloneRange(),p=o.collapse(!1).createBookmark();l.deleteContents(),o.moveToBookmark(p);var j=domUtils.findParentByTagName(o.startContainer,\"li\",!0);return f(j),o.select(),void c()}if(l.deleteContents(),j=domUtils.findParentByTagName(l.startContainer,\"li\",!0),j&&domUtils.isEmptyBlock(j))return v=j.previousSibling,next=j.nextSibling,s=h.document.createElement(\"p\"),\ndomUtils.fillNode(h.document,s),q=j.parentNode,v&&next?(l.setStart(next,0).collapse(!0).select(!0),domUtils.remove(j)):((v||next)&&v?j.parentNode.parentNode.insertBefore(s,q.nextSibling):q.parentNode.insertBefore(s,q),domUtils.remove(j),q.firstChild||domUtils.remove(q),l.setStart(s,0).setCursor()),void c()}if(j=domUtils.findParentByTagName(l.startContainer,\"li\",!0)){if(domUtils.isEmptyBlock(j)){p=l.createBookmark();var q=j.parentNode;if(j!==q.lastChild?(domUtils.breakParent(j,q),f(j)):(q.parentNode.insertBefore(j,q.nextSibling),domUtils.isEmptyNode(q)&&domUtils.remove(q)),!dtd.$list[j.parentNode.tagName])if(domUtils.isBlockElm(j.firstChild))domUtils.remove(j,!0);else{for(s=h.document.createElement(\"p\"),j.parentNode.insertBefore(s,j);j.firstChild;)s.appendChild(j.firstChild);domUtils.remove(j)}l.moveToBookmark(p).select()}else{var r=j.firstChild;if(!r||!domUtils.isBlockElm(r)){var s=h.document.createElement(\"p\");for(!j.firstChild&&domUtils.fillNode(h.document,s);j.firstChild;)s.appendChild(j.firstChild);j.appendChild(s),r=s}var t=h.document.createElement(\"span\");l.insertNode(t),domUtils.breakParent(t,j);var u=t.nextSibling;r=u.firstChild,r||(s=h.document.createElement(\"p\"),domUtils.fillNode(h.document,s),u.appendChild(s),r=s),domUtils.isEmptyNode(r)&&(r.innerHTML=\"\",domUtils.fillNode(h.document,r)),l.setStart(r,0).collapse(!0).shrinkBoundary().select(),domUtils.remove(t);var v=u.previousSibling;v&&domUtils.isEmptyBlock(v)&&(v.innerHTML=\"<p></p>\",domUtils.fillNode(h.document,v.firstChild))}c()}}}if(8==e&&(l=h.selection.getRange(),l.collapsed&&domUtils.isStartInblock(l)&&(o=l.cloneRange().trimBoundary(),j=domUtils.findParentByTagName(l.startContainer,\"li\",!0),j&&domUtils.isStartInblock(o)))){if(m=domUtils.findParentByTagName(l.startContainer,\"p\",!0),m&&m!==j.firstChild){var q=domUtils.findParentByTagName(m,[\"ol\",\"ul\"]);return domUtils.breakParent(m,q),f(m),h.fireEvent(\"contentchange\"),l.setStart(m,0).setCursor(!1,!0),h.fireEvent(\"saveScene\"),void domUtils.preventDefault(b)}if(j&&(v=j.previousSibling)){if(46==e&&j.childNodes.length)return;if(dtd.$list[v.tagName]&&(v=v.lastChild),h.undoManger&&h.undoManger.save(),r=j.firstChild,domUtils.isBlockElm(r))if(domUtils.isEmptyNode(r))for(v.appendChild(r),l.setStart(r,0).setCursor(!1,!0);j.firstChild;)v.appendChild(j.firstChild);else t=h.document.createElement(\"span\"),l.insertNode(t),domUtils.isEmptyBlock(v)&&(v.innerHTML=\"\"),domUtils.moveChild(j,v),l.setStartBefore(t).collapse(!0).select(!0),domUtils.remove(t);else if(domUtils.isEmptyNode(j)){var s=h.document.createElement(\"p\");v.appendChild(s),l.setStart(s,0).setCursor()}else for(l.setEnd(v,v.childNodes.length).collapse().select(!0);j.firstChild;)v.appendChild(j.firstChild);return domUtils.remove(j),h.fireEvent(\"contentchange\"),h.fireEvent(\"saveScene\"),void domUtils.preventDefault(b)}if(j&&!j.previousSibling){var q=j.parentNode,p=l.createBookmark();if(domUtils.isTagNode(q.parentNode,\"ol ul\"))q.parentNode.insertBefore(j,q),domUtils.isEmptyNode(q)&&domUtils.remove(q);else{for(;j.firstChild;)q.parentNode.insertBefore(j.firstChild,q);domUtils.remove(j),domUtils.isEmptyNode(q)&&domUtils.remove(q)}return l.moveToBookmark(p).setCursor(!1,!0),h.fireEvent(\"contentchange\"),h.fireEvent(\"saveScene\"),void domUtils.preventDefault(b)}}}),h.addListener(\"keyup\",function(a,c){var e=c.keyCode||c.which;if(8==e){var f,g=h.selection.getRange();(f=domUtils.findParentByTagName(g.startContainer,[\"ol\",\"ul\"],!0))&&d(f,f.tagName.toLowerCase(),b(f)||domUtils.getComputedStyle(f,\"list-style-type\"),!0)}}),h.addListener(\"tabkeydown\",function(){function a(a){if(h.options.maxListLevel!=-1){for(var b=a.parentNode,c=0;/[ou]l/i.test(b.tagName);)c++,b=b.parentNode;if(c>=h.options.maxListLevel)return!0}}var c=h.selection.getRange(),f=domUtils.findParentByTagName(c.startContainer,\"li\",!0);if(f){var g;if(!c.collapsed){h.fireEvent(\"saveScene\"),g=c.createBookmark();for(var i,j,l=0,m=domUtils.findParents(f);j=m[l++];)if(domUtils.isTagNode(j,\"ol ul\")){i=j;break}var n=f;if(g.end)for(;n&&!(domUtils.getPosition(n,g.end)&domUtils.POSITION_FOLLOWING);)if(a(n))n=domUtils.getNextDomNode(n,!1,null,function(a){return a!==i});else{var o=n.parentNode,p=h.document.createElement(o.tagName),q=utils.indexOf(k[p.tagName],b(o)||domUtils.getComputedStyle(o,\"list-style-type\")),r=q+1==k[p.tagName].length?0:q+1,s=k[p.tagName][r];for(e(p,s),o.insertBefore(p,n);n&&!(domUtils.getPosition(n,g.end)&domUtils.POSITION_FOLLOWING);){if(f=n.nextSibling,p.appendChild(n),!f||domUtils.isTagNode(f,\"ol ul\")){if(f)for(;(f=f.firstChild)&&\"LI\"!=f.tagName;);else f=domUtils.getNextDomNode(n,!1,null,function(a){return a!==i});break}n=f}d(p,p.tagName.toLowerCase(),s),n=f}return h.fireEvent(\"contentchange\"),c.moveToBookmark(g).select(),!0}if(a(f))return!0;var o=f.parentNode,p=h.document.createElement(o.tagName),q=utils.indexOf(k[p.tagName],b(o)||domUtils.getComputedStyle(o,\"list-style-type\"));q=q+1==k[p.tagName].length?0:q+1;var s=k[p.tagName][q];if(e(p,s),domUtils.isStartInblock(c))return h.fireEvent(\"saveScene\"),g=c.createBookmark(),o.insertBefore(p,f),p.appendChild(f),d(p,p.tagName.toLowerCase(),s),h.fireEvent(\"contentchange\"),c.moveToBookmark(g).select(!0),!0}}),h.commands.insertorderedlist=h.commands.insertunorderedlist={execCommand:function(a,c){c||(c=\"insertorderedlist\"==a.toLowerCase()?\"decimal\":\"disc\");var f=this,h=this.selection.getRange(),j=function(a){return 1==a.nodeType?\"br\"!=a.tagName.toLowerCase():!domUtils.isWhitespace(a)},k=\"insertorderedlist\"==a.toLowerCase()?\"ol\":\"ul\",l=f.document.createDocumentFragment();h.adjustmentBoundary().shrinkBoundary();var m,n,o,p,q=h.createBookmark(!0),r=g(f.document.getElementById(q.start)),s=0,t=g(f.document.getElementById(q.end)),u=0;if(r||t){if(r&&(m=r.parentNode),q.end||(t=r),t&&(n=t.parentNode),m===n){for(;r!==t;){if(p=r,r=r.nextSibling,!domUtils.isBlockElm(p.firstChild)){for(var v=f.document.createElement(\"p\");p.firstChild;)v.appendChild(p.firstChild);p.appendChild(v)}l.appendChild(p)}if(p=f.document.createElement(\"span\"),m.insertBefore(p,t),!domUtils.isBlockElm(t.firstChild)){for(v=f.document.createElement(\"p\");t.firstChild;)v.appendChild(t.firstChild);t.appendChild(v)}l.appendChild(t),domUtils.breakParent(p,m),domUtils.isEmptyNode(p.previousSibling)&&domUtils.remove(p.previousSibling),domUtils.isEmptyNode(p.nextSibling)&&domUtils.remove(p.nextSibling);var w=b(m)||domUtils.getComputedStyle(m,\"list-style-type\")||(\"insertorderedlist\"==a.toLowerCase()?\"decimal\":\"disc\");if(m.tagName.toLowerCase()==k&&w==c){for(var x,y=0,z=f.document.createDocumentFragment();x=l.firstChild;)if(domUtils.isTagNode(x,\"ol ul\"))z.appendChild(x);else for(;x.firstChild;)z.appendChild(x.firstChild),domUtils.remove(x);p.parentNode.insertBefore(z,p)}else o=f.document.createElement(k),e(o,c),o.appendChild(l),p.parentNode.insertBefore(o,p);return domUtils.remove(p),o&&d(o,k,c),void h.moveToBookmark(q).select()}if(r){for(;r;){if(p=r.nextSibling,domUtils.isTagNode(r,\"ol ul\"))l.appendChild(r);else{for(var A=f.document.createDocumentFragment(),B=0;r.firstChild;)domUtils.isBlockElm(r.firstChild)&&(B=1),A.appendChild(r.firstChild);if(B)l.appendChild(A);else{var C=f.document.createElement(\"p\");C.appendChild(A),l.appendChild(C)}domUtils.remove(r)}r=p}m.parentNode.insertBefore(l,m.nextSibling),domUtils.isEmptyNode(m)?(h.setStartBefore(m),domUtils.remove(m)):h.setStartAfter(m),s=1}if(t&&domUtils.inDoc(n,f.document)){for(r=n.firstChild;r&&r!==t;){if(p=r.nextSibling,domUtils.isTagNode(r,\"ol ul\"))l.appendChild(r);else{for(A=f.document.createDocumentFragment(),B=0;r.firstChild;)domUtils.isBlockElm(r.firstChild)&&(B=1),A.appendChild(r.firstChild);B?l.appendChild(A):(C=f.document.createElement(\"p\"),C.appendChild(A),l.appendChild(C)),domUtils.remove(r)}r=p}var D=domUtils.createElement(f.document,\"div\",{tmpDiv:1});domUtils.moveChild(t,D),l.appendChild(D),domUtils.remove(t),n.parentNode.insertBefore(l,n),h.setEndBefore(n),domUtils.isEmptyNode(n)&&domUtils.remove(n),u=1}}s||h.setStartBefore(f.document.getElementById(q.start)),q.end&&!u&&h.setEndAfter(f.document.getElementById(q.end)),h.enlarge(!0,function(a){return i[a.tagName]}),l=f.document.createDocumentFragment();for(var E,F=h.createBookmark(),G=domUtils.getNextDomNode(F.start,!1,j),H=h.cloneRange(),I=domUtils.isBlockElm;G&&G!==F.end&&domUtils.getPosition(G,F.end)&domUtils.POSITION_PRECEDING;)if(3==G.nodeType||dtd.li[G.tagName]){if(1==G.nodeType&&dtd.$list[G.tagName]){for(;G.firstChild;)l.appendChild(G.firstChild);E=domUtils.getNextDomNode(G,!1,j),domUtils.remove(G),G=E;continue}for(E=G,H.setStartBefore(G);G&&G!==F.end&&(!I(G)||domUtils.isBookmarkNode(G));)E=G,G=domUtils.getNextDomNode(G,!1,null,function(a){return!i[a.tagName]});G&&I(G)&&(p=domUtils.getNextDomNode(E,!1,j),p&&domUtils.isBookmarkNode(p)&&(G=domUtils.getNextDomNode(p,!1,j),E=p)),H.setEndAfter(E),G=domUtils.getNextDomNode(E,!1,j);var J=h.document.createElement(\"li\");if(J.appendChild(H.extractContents()),domUtils.isEmptyNode(J)){for(var E=h.document.createElement(\"p\");J.firstChild;)E.appendChild(J.firstChild);J.appendChild(E)}l.appendChild(J)}else G=domUtils.getNextDomNode(G,!0,j);h.moveToBookmark(F).collapse(!0),o=f.document.createElement(k),e(o,c),o.appendChild(l),h.insertNode(o),d(o,k,c);for(var x,y=0,K=domUtils.getElementsByTagName(o,\"div\");x=K[y++];)x.getAttribute(\"tmpDiv\")&&domUtils.remove(x,!0);h.moveToBookmark(q).select()},queryCommandState:function(a){for(var b,c=\"insertorderedlist\"==a.toLowerCase()?\"ol\":\"ul\",d=this.selection.getStartElementPath(),e=0;b=d[e++];){if(\"TABLE\"==b.nodeName)return 0;if(c==b.nodeName.toLowerCase())return 1}return 0},queryCommandValue:function(a){for(var c,d,e=\"insertorderedlist\"==a.toLowerCase()?\"ol\":\"ul\",f=this.selection.getStartElementPath(),g=0;d=f[g++];){if(\"TABLE\"==d.nodeName){c=null;break}if(e==d.nodeName.toLowerCase()){c=d;break}}return c?b(c)||domUtils.getComputedStyle(c,\"list-style-type\"):null}}},function(){var a={textarea:function(a,b){var c=b.ownerDocument.createElement(\"textarea\");return c.style.cssText=\"position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;\",browser.ie&&browser.version<8&&(c.style.width=b.offsetWidth+\"px\",c.style.height=b.offsetHeight+\"px\",b.onresize=function(){c.style.width=b.offsetWidth+\"px\",c.style.height=b.offsetHeight+\"px\"}),b.appendChild(c),{setContent:function(a){c.value=a},getContent:function(){return c.value},select:function(){var a;browser.ie?(a=c.createTextRange(),a.collapse(!0),a.select()):(c.setSelectionRange(0,0),c.focus())},dispose:function(){b.removeChild(c),b.onresize=null,c=null,b=null},focus:function(){c.focus()},blur:function(){c.blur()}}},codemirror:function(a,b){var c=window.CodeMirror(b,{mode:\"text/html\",tabMode:\"indent\",lineNumbers:!0,lineWrapping:!0}),d=c.getWrapperElement();return d.style.cssText='position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,\"Courier new\",monospace;font-size:13px;',c.getScrollerElement().style.cssText=\"position:absolute;left:0;top:0;width:100%;height:100%;\",c.refresh(),{getCodeMirror:function(){return c},setContent:function(a){c.setValue(a)},getContent:function(){return c.getValue()},select:function(){c.focus()},dispose:function(){b.removeChild(d),d=null,c=null},focus:function(){c.focus()},blur:function(){c.setOption(\"readOnly\",!0),c.setOption(\"readOnly\",!1)}}}};UE.plugins.source=function(){function b(b){return a[\"codemirror\"==h.sourceEditor&&window.CodeMirror?\"codemirror\":\"textarea\"](g,b)}var c,d,e,f,g=this,h=this.options,i=!1;h.sourceEditor=browser.ie?\"textarea\":h.sourceEditor||\"codemirror\",g.setOpt({sourceEditorFirst:!1});var j,k,l;g.commands.source={execCommand:function(){if(i=!i){l=g.selection.getRange().createAddress(!1,!0),g.undoManger&&g.undoManger.save(!0),browser.gecko&&(g.body.contentEditable=!1),j=g.iframe.style.cssText,g.iframe.style.cssText+=\"position:absolute;left:-32768px;top:-32768px;\",g.fireEvent(\"beforegetcontent\");var a=UE.htmlparser(g.body.innerHTML);g.filterOutputRule(a),a.traversal(function(a){if(\"element\"==a.type)switch(a.tagName){case\"td\":case\"th\":case\"caption\":a.children&&1==a.children.length&&\"br\"==a.firstChild().tagName&&a.removeChild(a.firstChild());break;case\"pre\":a.innerText(a.innerText().replace(/&nbsp;/g,\" \"))}}),g.fireEvent(\"aftergetcontent\");var h=a.toHtml(!0);c=b(g.iframe.parentNode),c.setContent(h),d=g.setContent,g.setContent=function(a){var b=UE.htmlparser(a);g.filterInputRule(b),a=b.toHtml(),c.setContent(a)},setTimeout(function(){c.select(),g.addListener(\"fullscreenchanged\",function(){try{c.getCodeMirror().refresh()}catch(a){}})}),k=g.getContent,g.getContent=function(){return c.getContent()||\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\"},e=g.focus,f=g.blur,g.focus=function(){c.focus()},g.blur=function(){f.call(g),c.blur()}}else{g.iframe.style.cssText=j;var m=c.getContent()||\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";m=m.replace(new RegExp(\"[\\\\r\\\\t\\\\n ]*</?(\\\\w+)\\\\s*(?:[^>]*)>\",\"g\"),function(a,b){return b&&!dtd.$inlineWithA[b.toLowerCase()]?a.replace(/(^[\\n\\r\\t ]*)|([\\n\\r\\t ]*$)/g,\"\"):a.replace(/(^[\\n\\r\\t]*)|([\\n\\r\\t]*$)/g,\"\")}),g.setContent=d,g.setContent(m),c.dispose(),c=null,g.getContent=k,g.focus=e,g.blur=f;var n=g.body.firstChild;if(n||(g.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\",n=g.body.firstChild),g.undoManger&&g.undoManger.save(!0),browser.gecko){var o=document.createElement(\"input\");o.style.cssText=\"position:absolute;left:0;top:-32768px\",document.body.appendChild(o),g.body.contentEditable=!1,setTimeout(function(){domUtils.setViewportOffset(o,{left:-32768,top:0}),o.focus(),setTimeout(function(){g.body.contentEditable=!0,g.selection.getRange().moveToAddress(l).select(!0),domUtils.remove(o)})})}else try{g.selection.getRange().moveToAddress(l).select(!0)}catch(p){}}this.fireEvent(\"sourcemodechanged\",i)},queryCommandState:function(){return 0|i},notNeedUndo:1};var m=g.queryCommandState;g.queryCommandState=function(a){return a=a.toLowerCase(),i?a in{source:1,fullscreen:1}?1:-1:m.apply(this,arguments)},\"codemirror\"==h.sourceEditor&&g.addListener(\"ready\",function(){utils.loadFile(document,{src:h.codeMirrorJsUrl||h.UEDITOR_HOME_URL+\"third-party/codemirror/codemirror.js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){h.sourceEditorFirst&&setTimeout(function(){g.execCommand(\"source\")},0)}),utils.loadFile(document,{tag:\"link\",rel:\"stylesheet\",type:\"text/css\",href:h.codeMirrorCssUrl||h.UEDITOR_HOME_URL+\"third-party/codemirror/codemirror.css\"})})}}(),UE.plugins.enterkey=function(){var a,b=this,c=b.options.enterTag;b.addListener(\"keyup\",function(c,d){var e=d.keyCode||d.which;if(13==e){var f,g=b.selection.getRange(),h=g.startContainer;if(browser.ie)b.fireEvent(\"saveScene\",!0,!0);else{if(/h\\d/i.test(a)){if(browser.gecko){var i=domUtils.findParentByTagName(h,[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"caption\",\"table\"],!0);i||(b.document.execCommand(\"formatBlock\",!1,\"<p>\"),f=1)}else if(1==h.nodeType){var j,k=b.document.createTextNode(\"\");if(g.insertNode(k),j=domUtils.findParentByTagName(k,\"div\",!0)){for(var l=b.document.createElement(\"p\");j.firstChild;)l.appendChild(j.firstChild);j.parentNode.insertBefore(l,j),domUtils.remove(j),g.setStartBefore(k).setCursor(),f=1}domUtils.remove(k)}b.undoManger&&f&&b.undoManger.save()}browser.opera&&g.select()}}}),b.addListener(\"keydown\",function(d,e){var f=e.keyCode||e.which;if(13==f){if(b.fireEvent(\"beforeenterkeydown\"))return void domUtils.preventDefault(e);b.fireEvent(\"saveScene\",!0,!0),a=\"\";var g=b.selection.getRange();if(!g.collapsed){var h=g.startContainer,i=g.endContainer,j=domUtils.findParentByTagName(h,\"td\",!0),k=domUtils.findParentByTagName(i,\"td\",!0);if(j&&k&&j!==k||!j&&k||j&&!k)return void(e.preventDefault?e.preventDefault():e.returnValue=!1)}if(\"p\"==c)browser.ie||(h=domUtils.findParentByTagName(g.startContainer,[\"ol\",\"ul\",\"p\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"caption\"],!0),h||browser.opera?(a=h.tagName,\"p\"==h.tagName.toLowerCase()&&browser.gecko&&domUtils.removeDirtyAttr(h)):(b.document.execCommand(\"formatBlock\",!1,\"<p>\"),browser.gecko&&(g=b.selection.getRange(),h=domUtils.findParentByTagName(g.startContainer,\"p\",!0),h&&domUtils.removeDirtyAttr(h))));else if(e.preventDefault?e.preventDefault():e.returnValue=!1,g.collapsed){m=g.document.createElement(\"br\"),g.insertNode(m);var l=m.parentNode;l.lastChild===m?(m.parentNode.insertBefore(m.cloneNode(!0),m),g.setStartBefore(m)):g.setStartAfter(m),g.setCursor()}else if(g.deleteContents(),h=g.startContainer,1==h.nodeType&&(h=h.childNodes[g.startOffset])){for(;1==h.nodeType;){if(dtd.$empty[h.tagName])return g.setStartBefore(h).setCursor(),b.undoManger&&b.undoManger.save(),!1;if(!h.firstChild){var m=g.document.createElement(\"br\");return h.appendChild(m),g.setStart(h,0).setCursor(),b.undoManger&&b.undoManger.save(),!1}h=h.firstChild}h===g.startContainer.childNodes[g.startOffset]?(m=g.document.createElement(\"br\"),g.insertNode(m).setCursor()):g.setStart(h,0).setCursor()}else m=g.document.createElement(\"br\"),g.insertNode(m).setStartAfter(m).setCursor()}})},UE.plugins.keystrokes=function(){var a=this,b=!0;a.addListener(\"keydown\",function(c,d){var e=d.keyCode||d.which,f=a.selection.getRange();if(!f.collapsed&&!(d.ctrlKey||d.shiftKey||d.altKey||d.metaKey)&&(e>=65&&e<=90||e>=48&&e<=57||e>=96&&e<=111||{13:1,8:1,46:1}[e])){var g=f.startContainer;if(domUtils.isFillChar(g)&&f.setStartBefore(g),g=f.endContainer,domUtils.isFillChar(g)&&f.setEndAfter(g),f.txtToElmBoundary(),f.endContainer&&1==f.endContainer.nodeType&&(g=f.endContainer.childNodes[f.endOffset],g&&domUtils.isBr(g)&&f.setEndAfter(g)),0==f.startOffset&&(g=f.startContainer,domUtils.isBoundaryNode(g,\"firstChild\")&&(g=f.endContainer,f.endOffset==(3==g.nodeType?g.nodeValue.length:g.childNodes.length)&&domUtils.isBoundaryNode(g,\"lastChild\"))))return a.fireEvent(\"saveScene\"),a.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\",f.setStart(a.body.firstChild,0).setCursor(!1,!0),void a._selectionChange()}if(e==keymap.Backspace){if(f=a.selection.getRange(),b=f.collapsed,a.fireEvent(\"delkeydown\",d))return;var h,i;if(f.collapsed&&f.inFillChar()&&(h=f.startContainer,domUtils.isFillChar(h)?(f.setStartBefore(h).shrinkBoundary(!0).collapse(!0),domUtils.remove(h)):(h.nodeValue=h.nodeValue.replace(new RegExp(\"^\"+domUtils.fillChar),\"\"),f.startOffset--,f.collapse(!0).select(!0))),h=f.getClosedNode())return a.fireEvent(\"saveScene\"),f.setStartBefore(h),domUtils.remove(h),f.setCursor(),a.fireEvent(\"saveScene\"),void domUtils.preventDefault(d);if(!browser.ie&&(h=domUtils.findParentByTagName(f.startContainer,\"table\",!0),i=domUtils.findParentByTagName(f.endContainer,\"table\",!0),h&&!i||!h&&i||h!==i))return void d.preventDefault()}if(e==keymap.Tab){var j={ol:1,ul:1,table:1};if(a.fireEvent(\"tabkeydown\",d))return void domUtils.preventDefault(d);var k=a.selection.getRange();a.fireEvent(\"saveScene\");for(var l=0,m=\"\",n=a.options.tabSize||4,o=a.options.tabNode||\"&nbsp;\";l<n;l++)m+=o;var p=a.document.createElement(\"span\");if(p.innerHTML=m+domUtils.fillChar,k.collapsed)k.insertNode(p.cloneNode(!0).firstChild).setCursor(!0);else{var q=function(a){return domUtils.isBlockElm(a)&&!j[a.tagName.toLowerCase()]};if(h=domUtils.findParent(k.startContainer,q,!0),i=domUtils.findParent(k.endContainer,q,!0),h&&i&&h===i)k.deleteContents(),k.insertNode(p.cloneNode(!0).firstChild).setCursor(!0);else{var r=k.createBookmark();k.enlarge(!0);for(var s=k.createBookmark(),t=domUtils.getNextDomNode(s.start,!1,q);t&&!(domUtils.getPosition(t,s.end)&domUtils.POSITION_FOLLOWING);)t.insertBefore(p.cloneNode(!0).firstChild,t.firstChild),t=domUtils.getNextDomNode(t,!1,q);k.moveToBookmark(s).moveToBookmark(r).select()}}domUtils.preventDefault(d)}if(browser.gecko&&46==e&&(k=a.selection.getRange(),k.collapsed&&(h=k.startContainer,domUtils.isEmptyBlock(h)))){for(var u=h.parentNode;1==domUtils.getChildCount(u)&&!domUtils.isBody(u);)h=u,u=u.parentNode;return void(h===u.lastChild&&d.preventDefault())}browser.chrome&&a.on(\"keydown\",function(a,b){var c=b.keyCode||b.which;if((b.metaKey&&b.altKey||b.ctrlKey&&b.shiftKey)&&73==c)return!0})}),a.addListener(\"keyup\",function(a,c){var d,e=c.keyCode||c.which,f=this;if(e==keymap.Backspace){if(f.fireEvent(\"delkeyup\"))return;if(d=f.selection.getRange(),d.collapsed){var g,h=[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"];if((g=domUtils.findParentByTagName(d.startContainer,h,!0))&&domUtils.isEmptyBlock(g)){var i=g.previousSibling;if(i&&\"TABLE\"!=i.nodeName)return domUtils.remove(g),void d.setStartAtLast(i).setCursor(!1,!0);var j=g.nextSibling;if(j&&\"TABLE\"!=j.nodeName)return domUtils.remove(g),void d.setStartAtFirst(j).setCursor(!1,!0)}if(domUtils.isBody(d.startContainer)){var g=domUtils.createElement(f.document,\"p\",{innerHTML:browser.ie?domUtils.fillChar:\"<br/>\"});d.insertNode(g).setStart(g,0).setCursor(!1,!0)}}if(!b&&(3==d.startContainer.nodeType||1==d.startContainer.nodeType&&domUtils.isEmptyBlock(d.startContainer)))if(browser.ie){var k=d.document.createElement(\"span\");d.insertNode(k).setStartBefore(k).collapse(!0),d.select(),domUtils.remove(k)}else d.select()}})},UE.plugins.fiximgclick=function(){function a(){this.editor=null,this.resizer=null,this.cover=null,this.doc=document,this.prePos={x:0,y:0},this.startPos={x:0,y:0}}var b=!1;return function(){var c=[[0,0,-1,-1],[0,0,0,-1],[0,0,1,-1],[0,0,-1,0],[0,0,1,0],[0,0,-1,1],[0,0,0,1],[0,0,1,1]];a.prototype={init:function(a){var b=this;b.editor=a,b.startPos=this.prePos={x:0,y:0},b.dragId=-1;var c=[],d=b.cover=document.createElement(\"div\"),e=b.resizer=document.createElement(\"div\");for(d.id=b.editor.ui.id+\"_imagescale_cover\",d.style.cssText=\"position:absolute;display:none;z-index:\"+b.editor.options.zIndex+\";filter:alpha(opacity=0); opacity:0;background:#CCC;\",domUtils.on(d,\"mousedown click\",function(){b.hide()}),i=0;i<8;i++)c.push('<span class=\"edui-editor-imagescale-hand'+i+'\"></span>');e.id=b.editor.ui.id+\"_imagescale\",e.className=\"edui-editor-imagescale\",e.innerHTML=c.join(\"\"),e.style.cssText+=\";display:none;border:1px solid #3b77ff;z-index:\"+b.editor.options.zIndex+\";\",b.editor.ui.getDom().appendChild(d),b.editor.ui.getDom().appendChild(e),b.initStyle(),b.initEvents()},initStyle:function(){utils.cssRule(\"imagescale\",\".edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}.edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}.edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}\")},initEvents:function(){var a=this;a.startPos.x=a.startPos.y=0,a.isDraging=!1},_eventHandler:function(a){var c=this;switch(a.type){case\"mousedown\":var d,d=a.target||a.srcElement;d.className.indexOf(\"edui-editor-imagescale-hand\")!=-1&&c.dragId==-1&&(c.dragId=d.className.slice(-1),c.startPos.x=c.prePos.x=a.clientX,c.startPos.y=c.prePos.y=a.clientY,domUtils.on(c.doc,\"mousemove\",c.proxy(c._eventHandler,c)));break;case\"mousemove\":c.dragId!=-1&&(c.updateContainerStyle(c.dragId,{x:a.clientX-c.prePos.x,y:a.clientY-c.prePos.y}),c.prePos.x=a.clientX,c.prePos.y=a.clientY,b=!0,c.updateTargetElement());break;case\"mouseup\":c.dragId!=-1&&(c.updateContainerStyle(c.dragId,{x:a.clientX-c.prePos.x,y:a.clientY-c.prePos.y}),c.updateTargetElement(),c.target.parentNode&&c.attachTo(c.target),c.dragId=-1),domUtils.un(c.doc,\"mousemove\",c.proxy(c._eventHandler,c)),b&&(b=!1,c.editor.fireEvent(\"contentchange\"))}},updateTargetElement:function(){var a=this;domUtils.setStyles(a.target,{width:a.resizer.style.width,height:a.resizer.style.height}),a.target.width=parseInt(a.resizer.style.width),a.target.height=parseInt(a.resizer.style.height),a.attachTo(a.target)},updateContainerStyle:function(a,b){var d,e=this,f=e.resizer;0!=c[a][0]&&(d=parseInt(f.style.left)+b.x,f.style.left=e._validScaledProp(\"left\",d)+\"px\"),0!=c[a][1]&&(d=parseInt(f.style.top)+b.y,f.style.top=e._validScaledProp(\"top\",d)+\"px\"),0!=c[a][2]&&(d=f.clientWidth+c[a][2]*b.x,f.style.width=e._validScaledProp(\"width\",d)+\"px\"),0!=c[a][3]&&(d=f.clientHeight+c[a][3]*b.y,f.style.height=e._validScaledProp(\"height\",d)+\"px\")},_validScaledProp:function(a,b){var c=this.resizer,d=document;switch(b=isNaN(b)?0:b,a){case\"left\":return b<0?0:b+c.clientWidth>d.clientWidth?d.clientWidth-c.clientWidth:b;case\"top\":return b<0?0:b+c.clientHeight>d.clientHeight?d.clientHeight-c.clientHeight:b;case\"width\":return b<=0?1:b+c.offsetLeft>d.clientWidth?d.clientWidth-c.offsetLeft:b;case\"height\":return b<=0?1:b+c.offsetTop>d.clientHeight?d.clientHeight-c.offsetTop:b}},hideCover:function(){this.cover.style.display=\"none\"},showCover:function(){var a=this,b=domUtils.getXY(a.editor.ui.getDom()),c=domUtils.getXY(a.editor.iframe);domUtils.setStyles(a.cover,{width:a.editor.iframe.offsetWidth+\"px\",height:a.editor.iframe.offsetHeight+\"px\",top:c.y-b.y+\"px\",left:c.x-b.x+\"px\",position:\"absolute\",display:\"\"})},show:function(a){var b=this;b.resizer.style.display=\"block\",a&&b.attachTo(a),domUtils.on(this.resizer,\"mousedown\",b.proxy(b._eventHandler,b)),domUtils.on(b.doc,\"mouseup\",b.proxy(b._eventHandler,b)),b.showCover(),b.editor.fireEvent(\"afterscaleshow\",b),b.editor.fireEvent(\"saveScene\")},hide:function(){var a=this;a.hideCover(),a.resizer.style.display=\"none\",domUtils.un(a.resizer,\"mousedown\",a.proxy(a._eventHandler,a)),domUtils.un(a.doc,\"mouseup\",a.proxy(a._eventHandler,a)),a.editor.fireEvent(\"afterscalehide\",a)},proxy:function(a,b){return function(c){return a.apply(b||this,arguments)}},attachTo:function(a){var b=this,c=b.target=a,d=this.resizer,e=domUtils.getXY(c),f=domUtils.getXY(b.editor.iframe),g=domUtils.getXY(d.parentNode);domUtils.setStyles(d,{width:c.width+\"px\",height:c.height+\"px\",left:f.x+e.x-b.editor.document.body.scrollLeft-g.x-parseInt(d.style.borderLeftWidth)+\"px\",top:f.y+e.y-b.editor.document.body.scrollTop-g.y-parseInt(d.style.borderTopWidth)+\"px\"})}}}(),function(){var b,c=this;c.setOpt(\"imageScaleEnabled\",!0),!browser.ie&&c.options.imageScaleEnabled&&c.addListener(\"click\",function(d,e){var f=c.selection.getRange(),g=f.getClosedNode();if(g&&\"IMG\"==g.tagName&&\"false\"!=c.body.contentEditable){if(g.className.indexOf(\"edui-faked-music\")!=-1||g.getAttribute(\"anchorname\")||domUtils.hasClass(g,\"loadingclass\")||domUtils.hasClass(g,\"loaderrorclass\"))return;if(!b){b=new a,b.init(c),c.ui.getDom().appendChild(b.resizer);var h,i=function(a){b.hide(),b.target&&c.selection.getRange().selectNode(b.target).select()},j=function(a){var b=a.target||a.srcElement;!b||void 0!==b.className&&b.className.indexOf(\"edui-editor-imagescale\")!=-1||i(a)};c.addListener(\"afterscaleshow\",function(a){c.addListener(\"beforekeydown\",i),c.addListener(\"beforemousedown\",j),domUtils.on(document,\"keydown\",i),domUtils.on(document,\"mousedown\",j),c.selection.getNative().removeAllRanges()}),c.addListener(\"afterscalehide\",function(a){c.removeListener(\"beforekeydown\",i),c.removeListener(\"beforemousedown\",j),domUtils.un(document,\"keydown\",i),domUtils.un(document,\"mousedown\",j);var d=b.target;d.parentNode&&c.selection.getRange().selectNode(d).select()}),domUtils.on(b.resizer,\"mousedown\",function(a){c.selection.getNative().removeAllRanges();var d=a.target||a.srcElement;d&&d.className.indexOf(\"edui-editor-imagescale-hand\")==-1&&(h=setTimeout(function(){b.hide(),b.target&&c.selection.getRange().selectNode(d).select()},200))}),domUtils.on(b.resizer,\"mouseup\",function(a){var b=a.target||a.srcElement;b&&b.className.indexOf(\"edui-editor-imagescale-hand\")==-1&&clearTimeout(h)})}b.show(g)}else b&&\"none\"!=b.resizer.style.display&&b.hide()}),browser.webkit&&c.addListener(\"click\",function(a,b){if(\"IMG\"==b.target.tagName&&\"false\"!=c.body.contentEditable){var d=new dom.Range(c.document);d.selectNode(b.target).select()}})}}(),UE.plugin.register(\"autolink\",function(){var a=0;return browser.ie?{}:{bindEvents:{reset:function(){a=0},keydown:function(a,b){var c=this,d=b.keyCode||b.which;if(32==d||13==d){for(var e,f,g=c.selection.getNative(),h=g.getRangeAt(0).cloneRange(),i=h.startContainer;1==i.nodeType&&h.startOffset>0&&(i=h.startContainer.childNodes[h.startOffset-1]);)h.setStart(i,1==i.nodeType?i.childNodes.length:i.nodeValue.length),h.collapse(!0),i=h.startContainer;do{if(0==h.startOffset){for(i=h.startContainer.previousSibling;i&&1==i.nodeType;)i=i.lastChild;if(!i||domUtils.isFillChar(i))break;e=i.nodeValue.length}else i=h.startContainer,e=h.startOffset;h.setStart(i,e-1),f=h.toString().charCodeAt(0)}while(160!=f&&32!=f);if(h.toString().replace(new RegExp(domUtils.fillChar,\"g\"),\"\").match(/(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i)){for(;h.toString().length&&!/^(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i.test(h.toString());)try{h.setStart(h.startContainer,h.startOffset+1)}catch(j){for(var i=h.startContainer;!(next=i.nextSibling);){if(domUtils.isBody(i))return;i=i.parentNode}h.setStart(next,0)}if(domUtils.findParentByTagName(h.startContainer,\"a\",!0))return;var k,l=c.document.createElement(\"a\"),m=c.document.createTextNode(\" \");c.undoManger&&c.undoManger.save(),l.appendChild(h.extractContents()),l.href=l.innerHTML=l.innerHTML.replace(/<[^>]+>/g,\"\"),k=l.getAttribute(\"href\").replace(new RegExp(domUtils.fillChar,\"g\"),\"\"),k=/^(?:https?:\\/\\/)/gi.test(k)?k:\"http://\"+k,l.setAttribute(\"_src\",utils.html(k)),l.href=utils.html(k),h.insertNode(l),l.parentNode.insertBefore(m,l.nextSibling),h.setStart(m,0),h.collapse(!0),g.removeAllRanges(),g.addRange(h),c.undoManger&&c.undoManger.save()}}}}}},function(){function a(a){if(3==a.nodeType)return null;if(\"A\"==a.nodeName)return a;for(var b=a.lastChild;b;){if(\"A\"==b.nodeName)return b;if(3==b.nodeType){if(domUtils.isWhitespace(b)){b=b.previousSibling;continue}return null}b=b.lastChild}}var b={37:1,38:1,39:1,40:1,13:1,32:1};browser.ie&&this.addListener(\"keyup\",function(c,d){var e=this,f=d.keyCode;if(b[f]){var g=e.selection.getRange(),h=g.startContainer;if(13==f){for(;h&&!domUtils.isBody(h)&&!domUtils.isBlockElm(h);)h=h.parentNode;if(h&&!domUtils.isBody(h)&&\"P\"==h.nodeName){var i=h.previousSibling;if(i&&1==i.nodeType){var i=a(i);i&&!i.getAttribute(\"_href\")&&domUtils.remove(i,!0)}}}else if(32==f)3==h.nodeType&&/^\\s$/.test(h.nodeValue)&&(h=h.previousSibling,h&&\"A\"==h.nodeName&&!h.getAttribute(\"_href\")&&domUtils.remove(h,!0));else if(h=domUtils.findParentByTagName(h,\"a\",!0),h&&!h.getAttribute(\"_href\")){var j=g.createBookmark();domUtils.remove(h,!0),g.moveToBookmark(j).select(!0)}}})}),UE.plugins.autoheight=function(){function a(){var a=this;clearTimeout(f),g||(!a.queryCommandState||a.queryCommandState&&1!=a.queryCommandState(\"source\"))&&(f=setTimeout(function(){for(var b=a.body.lastChild;b&&1!=b.nodeType;)b=b.previousSibling;b&&1==b.nodeType&&(b.style.clear=\"both\",e=Math.max(domUtils.getXY(b).y+b.offsetHeight+25,Math.max(i.minFrameHeight,i.initialFrameHeight)),e!=h&&(e!==parseInt(a.iframe.parentNode.style.height)&&(a.iframe.parentNode.style.height=e+\"px\"),a.body.style.height=e+\"px\",h=e),domUtils.removeStyle(b,\"clear\"))},50))}function b(){c.window&&(null===j?j=c.window.scrollY:0==c.window.scrollY&&0!=j&&(c.window.scrollTo(0,0),j=null))}var c=this;if(c.autoHeightEnabled=c.options.autoHeightEnabled!==!1,c.autoHeightEnabled){var d,e,f,g,h=0,i=c.options;c.addListener(\"fullscreenchanged\",function(a,b){g=b}),c.addListener(\"destroy\",function(){domUtils.un(c.window,\"scroll\",b),\nc.removeListener(\"contentchange afterinserthtml keyup mouseup\",a)}),c.enableAutoHeight=function(){var b=this;if(b.autoHeightEnabled){var c=b.document;b.autoHeightEnabled=!0,d=c.body.style.overflowY,c.body.style.overflowY=\"hidden\",b.addListener(\"contentchange afterinserthtml keyup mouseup\",a),setTimeout(function(){a.call(b)},browser.gecko?100:0),b.fireEvent(\"autoheightchanged\",b.autoHeightEnabled)}},c.disableAutoHeight=function(){c.body.style.overflowY=d||\"\",c.removeListener(\"contentchange\",a),c.removeListener(\"keyup\",a),c.removeListener(\"mouseup\",a),c.autoHeightEnabled=!1,c.fireEvent(\"autoheightchanged\",c.autoHeightEnabled)},c.on(\"setHeight\",function(){c.disableAutoHeight()}),c.addListener(\"ready\",function(){c.enableAutoHeight();var d;domUtils.on(browser.ie?c.body:c.document,browser.webkit?\"dragover\":\"drop\",function(){clearTimeout(d),d=setTimeout(function(){a.call(c)},100)}),domUtils.on(c.window,\"scroll\",b)});var j}},UE.plugins.autofloat=function(){function a(){return UE.ui?1:(alert(g.autofloatMsg),0)}function b(){var a=document.body.style;a.backgroundImage='url(\"about:blank\")',a.backgroundAttachment=\"fixed\"}function c(){var a=domUtils.getXY(k),b=domUtils.getComputedStyle(k,\"position\"),c=domUtils.getComputedStyle(k,\"left\");k.style.width=k.offsetWidth+\"px\",k.style.zIndex=1*f.options.zIndex+1,k.parentNode.insertBefore(q,k),o||p&&browser.ie?(\"absolute\"!=k.style.position&&(k.style.position=\"absolute\"),k.style.top=(document.body.scrollTop||document.documentElement.scrollTop)-l+i+\"px\"):(browser.ie7Compat&&r&&(r=!1,k.style.left=domUtils.getXY(k).x-document.documentElement.getBoundingClientRect().left+2+\"px\"),\"fixed\"!=k.style.position&&(k.style.position=\"fixed\",k.style.top=i+\"px\",(\"absolute\"==b||\"relative\"==b)&&parseFloat(c)&&(k.style.left=a.x+\"px\")))}function d(){r=!0,q.parentNode&&q.parentNode.removeChild(q),k.style.cssText=j}function e(){var a=m(f.container),b=f.options.toolbarTopOffset||0;a.top<0&&a.bottom-k.offsetHeight>b?c():d()}var f=this,g=f.getLang();f.setOpt({topOffset:0});var h=f.options.autoFloatEnabled!==!1,i=f.options.topOffset;if(h){var j,k,l,m,n=UE.ui.uiUtils,o=browser.ie&&browser.version<=6,p=browser.quirks,q=document.createElement(\"div\"),r=!0,s=utils.defer(function(){e()},browser.ie?200:100,!0);f.addListener(\"destroy\",function(){domUtils.un(window,[\"scroll\",\"resize\"],e),f.removeListener(\"keydown\",s)}),f.addListener(\"ready\",function(){if(a(f)){if(!f.ui)return;m=n.getClientRect,k=f.ui.getDom(\"toolbarbox\"),l=m(k).top,j=k.style.cssText,q.style.height=k.offsetHeight+\"px\",o&&b(),domUtils.on(window,[\"scroll\",\"resize\"],e),f.addListener(\"keydown\",s),f.addListener(\"beforefullscreenchange\",function(a,b){b&&d()}),f.addListener(\"fullscreenchanged\",function(a,b){b||e()}),f.addListener(\"sourcemodechanged\",function(a,b){setTimeout(function(){e()},0)}),f.addListener(\"clearDoc\",function(){setTimeout(function(){e()},0)})}})}},UE.plugins.video=function(){function a(a,b,d,e,f,g,h){var i;switch(h){case\"image\":i=\"<img \"+(e?'id=\"'+e+'\"':\"\")+' width=\"'+b+'\" height=\"'+d+'\" _url=\"'+a+'\" class=\"'+g.replace(/\\bvideo-js\\b/,\"\")+'\" src=\"'+c.options.UEDITOR_HOME_URL+'themes/default/images/spacer.gif\" style=\"background:url('+c.options.UEDITOR_HOME_URL+\"themes/default/images/videologo.gif) no-repeat center center; border:1px solid gray;\"+(f?\"float:\"+f+\";\":\"\")+'\" />';break;case\"embed\":i='<embed type=\"application/x-shockwave-flash\" class=\"'+g+'\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" src=\"'+utils.html(a)+'\" width=\"'+b+'\" height=\"'+d+'\"'+(f?' style=\"float:'+f+'\"':\"\")+' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >';break;case\"video\":var j=a.substr(a.lastIndexOf(\".\")+1);\"ogv\"==j&&(j=\"ogg\"),i=\"<video\"+(e?' id=\"'+e+'\"':\"\")+' class=\"'+g+' video-js\" '+(f?' style=\"float:'+f+'\"':\"\")+' controls preload=\"none\" width=\"'+b+'\" height=\"'+d+'\" src=\"'+a+'\" data-setup=\"{}\"><source src=\"'+a+'\" type=\"video/'+j+'\" /></video>'}return i}function b(b,c){utils.each(b.getNodesByTagName(c?\"img\":\"embed video\"),function(b){var d=b.getAttr(\"class\");if(d&&d.indexOf(\"edui-faked-video\")!=-1){var e=a(c?b.getAttr(\"_url\"):b.getAttr(\"src\"),b.getAttr(\"width\"),b.getAttr(\"height\"),null,b.getStyle(\"float\")||\"\",d,c?\"embed\":\"image\");b.parentNode.replaceChild(UE.uNode.createElement(e),b)}if(d&&d.indexOf(\"edui-upload-video\")!=-1){var e=a(c?b.getAttr(\"_url\"):b.getAttr(\"src\"),b.getAttr(\"width\"),b.getAttr(\"height\"),null,b.getStyle(\"float\")||\"\",d,c?\"video\":\"image\");b.parentNode.replaceChild(UE.uNode.createElement(e),b)}})}var c=this;c.addOutputRule(function(a){b(a,!0)}),c.addInputRule(function(a){b(a)}),c.commands.insertvideo={execCommand:function(b,d,e){if(d=utils.isArray(d)?d:[d],c.fireEvent(\"beforeinsertvideo\",d)!==!0){for(var f,g,h=[],i=\"tmpVedio\",j=0,k=d.length;j<k;j++)g=d[j],f=\"upload\"==e?\"edui-upload-video video-js vjs-default-skin\":\"edui-faked-video\",h.push(a(g.url,g.width||420,g.height||280,i+j,null,f,\"image\"));c.execCommand(\"inserthtml\",h.join(\"\"),!0);for(var l=this.selection.getRange(),j=0,k=d.length;j<k;j++){var m=this.document.getElementById(\"tmpVedio\"+j);domUtils.removeAttributes(m,\"id\"),l.selectNode(m).select(),c.execCommand(\"imagefloat\",d[j].align)}c.fireEvent(\"afterinsertvideo\",d)}},queryCommandState:function(){var a=c.selection.getRange().getClosedNode(),b=a&&(\"edui-faked-video\"==a.className||a.className.indexOf(\"edui-upload-video\")!=-1);return b?1:0}}},function(){function a(a){}var b=UE.UETable=function(a){this.table=a,this.indexTable=[],this.selectedTds=[],this.cellsRange={},this.update(a)};b.removeSelectedClass=function(a){utils.each(a,function(a){domUtils.removeClasses(a,\"selectTdClass\")})},b.addSelectedClass=function(a){utils.each(a,function(a){domUtils.addClass(a,\"selectTdClass\")})},b.isEmptyBlock=function(a){var b=new RegExp(domUtils.fillChar,\"g\");if(a[browser.ie?\"innerText\":\"textContent\"].replace(/^\\s*$/,\"\").replace(b,\"\").length>0)return 0;for(var c in dtd.$isNotEmpty)if(dtd.$isNotEmpty.hasOwnProperty(c)&&a.getElementsByTagName(c).length)return 0;return 1},b.getWidth=function(a){return a?parseInt(domUtils.getComputedStyle(a,\"width\"),10):0},b.getTableCellAlignState=function(a){!utils.isArray(a)&&(a=[a]);var b={},c=[\"align\",\"valign\"],d=null,e=!0;return utils.each(a,function(a){return utils.each(c,function(c){if(d=a.getAttribute(c),!b[c]&&d)b[c]=d;else if(!b[c]||d!==b[c])return e=!1,!1}),e}),e?b:null},b.getTableItemsByRange=function(a){var b=a.selection.getStart();b&&b.id&&0===b.id.indexOf(\"_baidu_bookmark_start_\")&&b.nextSibling&&(b=b.nextSibling);var c=b&&domUtils.findParentByTagName(b,[\"td\",\"th\"],!0),d=c&&c.parentNode,e=d&&domUtils.findParentByTagName(d,[\"table\"]),f=e&&e.getElementsByTagName(\"caption\")[0];return{cell:c,tr:d,table:e,caption:f}},b.getUETableBySelected=function(a){var c=b.getTableItemsByRange(a).table;return c&&c.ueTable&&c.ueTable.selectedTds.length?c.ueTable:null},b.getDefaultValue=function(a,b){var c,d,e,f,g={thin:\"0px\",medium:\"1px\",thick:\"2px\"};if(b)return h=b.getElementsByTagName(\"td\")[0],f=domUtils.getComputedStyle(b,\"border-left-width\"),c=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,\"padding-left\"),d=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,\"border-left-width\"),e=parseInt(g[f]||f,10),{tableBorder:c,tdPadding:d,tdBorder:e};b=a.document.createElement(\"table\"),b.insertRow(0).insertCell(0).innerHTML=\"xxx\",a.body.appendChild(b);var h=b.getElementsByTagName(\"td\")[0];return f=domUtils.getComputedStyle(b,\"border-left-width\"),c=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,\"padding-left\"),d=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,\"border-left-width\"),e=parseInt(g[f]||f,10),domUtils.remove(b),{tableBorder:c,tdPadding:d,tdBorder:e}},b.getUETable=function(a){var c=a.tagName.toLowerCase();return a=\"td\"==c||\"th\"==c||\"caption\"==c?domUtils.findParentByTagName(a,\"table\",!0):a,a.ueTable||(a.ueTable=new b(a)),a.ueTable},b.cloneCell=function(a,b,c){if(!a||utils.isString(a))return this.table.ownerDocument.createElement(a||\"td\");var d=domUtils.hasClass(a,\"selectTdClass\");d&&domUtils.removeClasses(a,\"selectTdClass\");var e=a.cloneNode(!0);return b&&(e.rowSpan=e.colSpan=1),!c&&domUtils.removeAttributes(e,\"width height\"),!c&&domUtils.removeAttributes(e,\"style\"),e.style.borderLeftStyle=\"\",e.style.borderTopStyle=\"\",e.style.borderLeftColor=a.style.borderRightColor,e.style.borderLeftWidth=a.style.borderRightWidth,e.style.borderTopColor=a.style.borderBottomColor,e.style.borderTopWidth=a.style.borderBottomWidth,d&&domUtils.addClass(a,\"selectTdClass\"),e},b.prototype={getMaxRows:function(){for(var a,b=this.table.rows,c=1,d=0;a=b[d];d++){for(var e,f=1,g=0;e=a.cells[g++];)f=Math.max(e.rowSpan||1,f);c=Math.max(f+d,c)}return c},getMaxCols:function(){for(var a,b=this.table.rows,c=0,d={},e=0;a=b[e];e++){for(var f,g=0,h=0;f=a.cells[h++];)if(g+=f.colSpan||1,f.rowSpan&&f.rowSpan>1)for(var i=1;i<f.rowSpan;i++)d[\"row_\"+(e+i)]?d[\"row_\"+(e+i)]++:d[\"row_\"+(e+i)]=f.colSpan||1;g+=d[\"row_\"+e]||0,c=Math.max(g,c)}return c},getCellColIndex:function(a){},getHSideCell:function(b,c){try{var d,e,f=this.getCellInfo(b),g=this.selectedTds.length,h=this.cellsRange;return!c&&(g?!h.beginColIndex:!f.colIndex)||c&&(g?h.endColIndex==this.colsNum-1:f.colIndex==this.colsNum-1)?null:(d=g?h.beginRowIndex:f.rowIndex,e=c?g?h.endColIndex+1:f.colIndex+1:g?h.beginColIndex-1:f.colIndex<1?0:f.colIndex-1,this.getCell(this.indexTable[d][e].rowIndex,this.indexTable[d][e].cellIndex))}catch(i){a(i)}},getTabNextCell:function(a,b){var c,d=this.getCellInfo(a),e=b||d.rowIndex,f=d.colIndex+1+(d.colSpan-1);try{c=this.getCell(this.indexTable[e][f].rowIndex,this.indexTable[e][f].cellIndex)}catch(g){try{e=1*e+1,f=0,c=this.getCell(this.indexTable[e][f].rowIndex,this.indexTable[e][f].cellIndex)}catch(g){}}return c},getVSideCell:function(b,c,d){try{var e,f,g=this.getCellInfo(b),h=this.selectedTds.length&&!d,i=this.cellsRange;return!c&&0==g.rowIndex||c&&(h?i.endRowIndex==this.rowsNum-1:g.rowIndex+g.rowSpan>this.rowsNum-1)?null:(e=c?h?i.endRowIndex+1:g.rowIndex+g.rowSpan:h?i.beginRowIndex-1:g.rowIndex-1,f=h?i.beginColIndex:g.colIndex,this.getCell(this.indexTable[e][f].rowIndex,this.indexTable[e][f].cellIndex))}catch(j){a(j)}},getSameEndPosCells:function(b,c){try{for(var d=\"x\"===c.toLowerCase(),e=domUtils.getXY(b)[d?\"x\":\"y\"]+b[\"offset\"+(d?\"Width\":\"Height\")],f=this.table.rows,g=null,h=[],i=0;i<this.rowsNum;i++){g=f[i].cells;for(var j,k=0;j=g[k++];){var l=domUtils.getXY(j)[d?\"x\":\"y\"]+j[\"offset\"+(d?\"Width\":\"Height\")];if(l>e&&d)break;if((b==j||e==l)&&(1==j[d?\"colSpan\":\"rowSpan\"]&&h.push(j),d))break}}return h}catch(m){a(m)}},setCellContent:function(a,b){a.innerHTML=b||(browser.ie?domUtils.fillChar:\"<br />\")},cloneCell:b.cloneCell,getSameStartPosXCells:function(b){try{for(var c,d=domUtils.getXY(b).x+b.offsetWidth,e=this.table.rows,f=[],g=0;g<this.rowsNum;g++){c=e[g].cells;for(var h,i=0;h=c[i++];){var j=domUtils.getXY(h).x;if(j>d)break;if(j==d&&1==h.colSpan){f.push(h);break}}}return f}catch(k){a(k)}},update:function(a){this.table=a||this.table,this.selectedTds=[],this.cellsRange={},this.indexTable=[];for(var b=this.table.rows,c=this.getMaxRows(),d=c-b.length,e=this.getMaxCols();d--;)this.table.insertRow(b.length);this.rowsNum=c,this.colsNum=e;for(var f=0,g=b.length;f<g;f++)this.indexTable[f]=new Array(e);for(var h,i=0;h=b[i];i++)for(var j,k=0,l=h.cells;j=l[k];k++){j.rowSpan>c&&(j.rowSpan=c);for(var m=k,n=j.rowSpan||1,o=j.colSpan||1;this.indexTable[i][m];)m++;for(var p=0;p<n;p++)for(var q=0;q<o;q++)this.indexTable[i+p][m+q]={rowIndex:i,cellIndex:k,colIndex:m,rowSpan:n,colSpan:o}}for(p=0;p<c;p++)for(q=0;q<e;q++)void 0===this.indexTable[p][q]&&(h=b[p],j=h.cells[h.cells.length-1],j=j?j.cloneNode(!0):this.table.ownerDocument.createElement(\"td\"),this.setCellContent(j),1!==j.colSpan&&(j.colSpan=1),1!==j.rowSpan&&(j.rowSpan=1),h.appendChild(j),this.indexTable[p][q]={rowIndex:p,cellIndex:j.cellIndex,colIndex:q,rowSpan:1,colSpan:1});var r=domUtils.getElementsByTagName(this.table,\"td\"),s=[];if(utils.each(r,function(a){domUtils.hasClass(a,\"selectTdClass\")&&s.push(a)}),s.length){var t=s[0],u=s[s.length-1],v=this.getCellInfo(t),w=this.getCellInfo(u);this.selectedTds=s,this.cellsRange={beginRowIndex:v.rowIndex,beginColIndex:v.colIndex,endRowIndex:w.rowIndex+w.rowSpan-1,endColIndex:w.colIndex+w.colSpan-1}}if(!domUtils.hasClass(this.table.rows[0],\"firstRow\")){domUtils.addClass(this.table.rows[0],\"firstRow\");for(var f=1;f<this.table.rows.length;f++)domUtils.removeClasses(this.table.rows[f],\"firstRow\")}},getCellInfo:function(a){if(a)for(var b=a.cellIndex,c=a.parentNode.rowIndex,d=this.indexTable[c],e=this.colsNum,f=b;f<e;f++){var g=d[f];if(g.rowIndex===c&&g.cellIndex===b)return g}},getCell:function(a,b){return a<this.rowsNum&&this.table.rows[a].cells[b]||null},deleteCell:function(a,b){b=\"number\"==typeof b?b:a.parentNode.rowIndex;var c=this.table.rows[b];c.deleteCell(a.cellIndex)},getCellsRange:function(a,b){function c(a,b,e,f){var g,h,i,j=a,k=b,l=e,m=f;if(a>0)for(h=b;h<f;h++)g=d.indexTable[a][h],i=g.rowIndex,i<a&&(j=Math.min(i,j));if(f<d.colsNum)for(i=a;i<e;i++)g=d.indexTable[i][f],h=g.colIndex+g.colSpan-1,h>f&&(m=Math.max(h,m));if(e<d.rowsNum)for(h=b;h<f;h++)g=d.indexTable[e][h],i=g.rowIndex+g.rowSpan-1,i>e&&(l=Math.max(i,l));if(b>0)for(i=a;i<e;i++)g=d.indexTable[i][b],h=g.colIndex,h<b&&(k=Math.min(g.colIndex,k));return j!=a||k!=b||l!=e||m!=f?c(j,k,l,m):{beginRowIndex:a,beginColIndex:b,endRowIndex:e,endColIndex:f}}try{var d=this,e=d.getCellInfo(a);if(a===b)return{beginRowIndex:e.rowIndex,beginColIndex:e.colIndex,endRowIndex:e.rowIndex+e.rowSpan-1,endColIndex:e.colIndex+e.colSpan-1};var f=d.getCellInfo(b),g=Math.min(e.rowIndex,f.rowIndex),h=Math.min(e.colIndex,f.colIndex),i=Math.max(e.rowIndex+e.rowSpan-1,f.rowIndex+f.rowSpan-1),j=Math.max(e.colIndex+e.colSpan-1,f.colIndex+f.colSpan-1);return c(g,h,i,j)}catch(k){}},getCells:function(a){this.clearSelected();for(var b,c,d,e=a.beginRowIndex,f=a.beginColIndex,g=a.endRowIndex,h=a.endColIndex,i={},j=[],k=e;k<=g;k++)for(var l=f;l<=h;l++){b=this.indexTable[k][l],c=b.rowIndex,d=b.colIndex;var m=c+\"|\"+d;if(!i[m]){if(i[m]=1,c<k||d<l||c+b.rowSpan-1>g||d+b.colSpan-1>h)return null;j.push(this.getCell(c,b.cellIndex))}}return j},clearSelected:function(){b.removeSelectedClass(this.selectedTds),this.selectedTds=[],this.cellsRange={}},setSelected:function(a){var c=this.getCells(a);b.addSelectedClass(c),this.selectedTds=c,this.cellsRange=a},isFullRow:function(){var a=this.cellsRange;return a.endColIndex-a.beginColIndex+1==this.colsNum},isFullCol:function(){var a=this.cellsRange,b=this.table,c=b.getElementsByTagName(\"th\"),d=a.endRowIndex-a.beginRowIndex+1;return c.length?d==this.rowsNum||d==this.rowsNum-1:d==this.rowsNum},getNextCell:function(b,c,d){try{var e,f,g=this.getCellInfo(b),h=this.selectedTds.length&&!d,i=this.cellsRange;return!c&&0==g.rowIndex||c&&(h?i.endRowIndex==this.rowsNum-1:g.rowIndex+g.rowSpan>this.rowsNum-1)?null:(e=c?h?i.endRowIndex+1:g.rowIndex+g.rowSpan:h?i.beginRowIndex-1:g.rowIndex-1,f=h?i.beginColIndex:g.colIndex,this.getCell(this.indexTable[e][f].rowIndex,this.indexTable[e][f].cellIndex))}catch(j){a(j)}},getPreviewCell:function(b,c){try{var d,e,f=this.getCellInfo(b),g=this.selectedTds.length,h=this.cellsRange;return!c&&(g?!h.beginColIndex:!f.colIndex)||c&&(g?h.endColIndex==this.colsNum-1:f.rowIndex>this.colsNum-1)?null:(d=c?g?h.beginRowIndex:f.rowIndex<1?0:f.rowIndex-1:g?h.beginRowIndex:f.rowIndex,e=c?g?h.endColIndex+1:f.colIndex:g?h.beginColIndex-1:f.colIndex<1?0:f.colIndex-1,this.getCell(this.indexTable[d][e].rowIndex,this.indexTable[d][e].cellIndex))}catch(i){a(i)}},moveContent:function(a,c){if(!b.isEmptyBlock(c)){if(b.isEmptyBlock(a))return void(a.innerHTML=c.innerHTML);var d=a.lastChild;for(3!=d.nodeType&&dtd.$block[d.tagName]||a.appendChild(a.ownerDocument.createElement(\"br\"));d=c.firstChild;)a.appendChild(d)}},mergeRight:function(a){var b=this.getCellInfo(a),c=b.colIndex+b.colSpan,d=this.indexTable[b.rowIndex][c],e=this.getCell(d.rowIndex,d.cellIndex);a.colSpan=b.colSpan+d.colSpan,a.removeAttribute(\"width\"),this.moveContent(a,e),this.deleteCell(e,d.rowIndex),this.update()},mergeDown:function(a){var b=this.getCellInfo(a),c=b.rowIndex+b.rowSpan,d=this.indexTable[c][b.colIndex],e=this.getCell(d.rowIndex,d.cellIndex);a.rowSpan=b.rowSpan+d.rowSpan,a.removeAttribute(\"height\"),this.moveContent(a,e),this.deleteCell(e,d.rowIndex),this.update()},mergeRange:function(){for(var a,b=this.cellsRange,c=this.getCell(b.beginRowIndex,this.indexTable[b.beginRowIndex][b.beginColIndex].cellIndex),d=this.getCells(b),e=0;a=d[e++];)a!==c&&(this.moveContent(c,a),this.deleteCell(a));if(c.rowSpan=b.endRowIndex-b.beginRowIndex+1,c.rowSpan>1&&c.removeAttribute(\"height\"),c.colSpan=b.endColIndex-b.beginColIndex+1,c.colSpan>1&&c.removeAttribute(\"width\"),c.rowSpan==this.rowsNum&&1!=c.colSpan&&(c.colSpan=1),c.colSpan==this.colsNum&&1!=c.rowSpan){var f=c.parentNode.rowIndex;if(this.table.deleteRow)for(var e=f+1,g=f+1,h=c.rowSpan;e<h;e++)this.table.deleteRow(g);else for(var e=0,h=c.rowSpan-1;e<h;e++){var i=this.table.rows[f+1];i.parentNode.removeChild(i)}c.rowSpan=1}this.update()},insertRow:function(a,b){function c(a,b,c){if(0==a){var d=c.nextSibling||c.previousSibling,e=d.cells[a];\"TH\"==e.tagName&&(e=b.ownerDocument.createElement(\"th\"),e.appendChild(b.firstChild),c.insertBefore(e,b),domUtils.remove(b))}else if(\"TH\"==b.tagName){var f=b.ownerDocument.createElement(\"td\");f.appendChild(b.firstChild),c.insertBefore(f,b),domUtils.remove(b)}}var d,e=this.colsNum,f=this.table,g=f.insertRow(a),h=null,i=\"string\"==typeof b&&\"TH\"==b.toUpperCase();if(0==a||a==this.rowsNum){for(var j=0;j<e;j++)d=this.cloneCell(b,!0),this.setCellContent(d),d.getAttribute(\"vAlign\")&&d.setAttribute(\"vAlign\",d.getAttribute(\"vAlign\")),g.appendChild(d),i||c(j,d,g);i&&(h=f.createTHead(),h.insertBefore(g,h.firstChild))}else{var k=this.indexTable[a];for(j=0;j<e;j++){var l=k[j];l.rowIndex<a?(d=this.getCell(l.rowIndex,l.cellIndex),d.rowSpan=l.rowSpan+1):(d=this.cloneCell(b,!0),this.setCellContent(d),g.appendChild(d)),i||c(j,d,g)}}return this.update(),g},deleteRow:function(a){for(var b=this.table.rows[a],c=this.indexTable[a],d=this.colsNum,e=0,f=0;f<d;){var g=c[f],h=this.getCell(g.rowIndex,g.cellIndex);if(h.rowSpan>1&&g.rowIndex==a){var i=h.cloneNode(!0);i.rowSpan=h.rowSpan-1,i.innerHTML=\"\",h.rowSpan=1;var j,k=a+1,l=this.table.rows[k],m=this.getPreviewMergedCellsNum(k,f)-e;m<f?(j=f-m-1,domUtils.insertAfter(l.cells[j],i)):l.cells.length&&l.insertBefore(i,l.cells[0]),e+=1}f+=h.colSpan||1}var n=[],o={};for(f=0;f<d;f++){var p=c[f].rowIndex,q=c[f].cellIndex,r=p+\"_\"+q;o[r]||(o[r]=1,h=this.getCell(p,q),n.push(h))}var s=[];utils.each(n,function(a){1==a.rowSpan?a.parentNode.removeChild(a):s.push(a)}),utils.each(s,function(a){a.rowSpan--}),b.parentNode.removeChild(b),this.update()},insertCol:function(a,b,c){function d(a,b,c){if(0==a){var d=b.nextSibling||b.previousSibling;\"TH\"==d.tagName&&(d=b.ownerDocument.createElement(\"th\"),d.appendChild(b.firstChild),c.insertBefore(d,b),domUtils.remove(b))}else if(\"TH\"==b.tagName){var e=b.ownerDocument.createElement(\"td\");e.appendChild(b.firstChild),c.insertBefore(e,b),domUtils.remove(b)}}var e,f,g,h=this.rowsNum,i=0,j=parseInt((this.table.offsetWidth-20*(this.colsNum+1)-(this.colsNum+1))/(this.colsNum+1),10),k=\"string\"==typeof b&&\"TH\"==b.toUpperCase();if(0==a||a==this.colsNum)for(;i<h;i++)e=this.table.rows[i],g=e.cells[0==a?a:e.cells.length],f=this.cloneCell(b,!0),this.setCellContent(f),f.setAttribute(\"vAlign\",f.getAttribute(\"vAlign\")),g&&f.setAttribute(\"width\",g.getAttribute(\"width\")),a?domUtils.insertAfter(e.cells[e.cells.length-1],f):e.insertBefore(f,e.cells[0]),k||d(i,f,e);else for(;i<h;i++){var l=this.indexTable[i][a];l.colIndex<a?(f=this.getCell(l.rowIndex,l.cellIndex),f.colSpan=l.colSpan+1):(e=this.table.rows[i],g=e.cells[l.cellIndex],f=this.cloneCell(b,!0),this.setCellContent(f),f.setAttribute(\"vAlign\",f.getAttribute(\"vAlign\")),g&&f.setAttribute(\"width\",g.getAttribute(\"width\")),g?e.insertBefore(f,g):e.appendChild(f)),k||d(i,f,e)}this.update(),this.updateWidth(j,c||{tdPadding:10,tdBorder:1})},updateWidth:function(a,c){var d=this.table,e=b.getWidth(d)-2*c.tdPadding-c.tdBorder+a;if(e<d.ownerDocument.body.offsetWidth)return void d.setAttribute(\"width\",e);var f=domUtils.getElementsByTagName(this.table,\"td th\");utils.each(f,function(b){b.setAttribute(\"width\",a)})},deleteCol:function(a){for(var b=this.indexTable,c=this.table.rows,d=this.table.getAttribute(\"width\"),e=0,f=this.rowsNum,g={},h=0;h<f;){var i=b[h],j=i[a],k=j.rowIndex+\"_\"+j.colIndex;if(!g[k]){g[k]=1;var l=this.getCell(j.rowIndex,j.cellIndex);e||(e=l&&parseInt(l.offsetWidth/l.colSpan,10).toFixed(0)),l.colSpan>1?l.colSpan--:c[h].deleteCell(j.cellIndex),h+=j.rowSpan||1}}this.table.setAttribute(\"width\",d-e),this.update()},splitToCells:function(a){var b=this,c=this.splitToRows(a);utils.each(c,function(a){b.splitToCols(a)})},splitToRows:function(a){var b=this.getCellInfo(a),c=b.rowIndex,d=b.colIndex,e=[];a.rowSpan=1,e.push(a);for(var f=c,g=c+b.rowSpan;f<g;f++)if(f!=c){var h=this.table.rows[f],i=h.insertCell(d-this.getPreviewMergedCellsNum(f,d));i.colSpan=b.colSpan,this.setCellContent(i),i.setAttribute(\"vAlign\",a.getAttribute(\"vAlign\")),i.setAttribute(\"align\",a.getAttribute(\"align\")),a.style.cssText&&(i.style.cssText=a.style.cssText),e.push(i)}return this.update(),e},getPreviewMergedCellsNum:function(a,b){for(var c=this.indexTable[a],d=0,e=0;e<b;){var f=c[e].colSpan,g=c[e].rowIndex;d+=f-(g==a?1:0),e+=f}return d},splitToCols:function(a){var b=(a.offsetWidth/a.colSpan-22).toFixed(0),c=this.getCellInfo(a),d=c.rowIndex,e=c.colIndex,f=[];a.colSpan=1,a.setAttribute(\"width\",b),f.push(a);for(var g=e,h=e+c.colSpan;g<h;g++)if(g!=e){var i=this.table.rows[d],j=i.insertCell(this.indexTable[d][g].cellIndex+1);if(j.rowSpan=c.rowSpan,this.setCellContent(j),j.setAttribute(\"vAlign\",a.getAttribute(\"vAlign\")),j.setAttribute(\"align\",a.getAttribute(\"align\")),j.setAttribute(\"width\",b),a.style.cssText&&(j.style.cssText=a.style.cssText),\"TH\"==a.tagName){var k=a.ownerDocument.createElement(\"th\");k.appendChild(j.firstChild),k.setAttribute(\"vAlign\",a.getAttribute(\"vAlign\")),k.rowSpan=j.rowSpan,i.insertBefore(k,j),domUtils.remove(j)}f.push(j)}return this.update(),f},isLastCell:function(a,b,c){b=b||this.rowsNum,c=c||this.colsNum;var d=this.getCellInfo(a);return d.rowIndex+d.rowSpan==b&&d.colIndex+d.colSpan==c},getLastCell:function(a){a=a||this.table.getElementsByTagName(\"td\");var b,c=(this.getCellInfo(a[0]),this),d=a[0],e=d.parentNode,f=0,g=0;return utils.each(a,function(a){a.parentNode==e&&(g+=a.colSpan||1),f+=a.rowSpan*a.colSpan||1}),b=f/g,utils.each(a,function(a){if(c.isLastCell(a,b,g))return d=a,!1}),d},selectRow:function(a){var b=this.indexTable[a],c=this.getCell(b[0].rowIndex,b[0].cellIndex),d=this.getCell(b[this.colsNum-1].rowIndex,b[this.colsNum-1].cellIndex),e=this.getCellsRange(c,d);this.setSelected(e)},selectTable:function(){var a=this.table.getElementsByTagName(\"td\"),b=this.getCellsRange(a[0],a[a.length-1]);this.setSelected(b)},setBackground:function(a,b){if(\"string\"==typeof b)utils.each(a,function(a){a.style.backgroundColor=b});else if(\"object\"==typeof b){b=utils.extend({repeat:!0,colorList:[\"#ddd\",\"#fff\"]},b);for(var c,d=this.getCellInfo(a[0]).rowIndex,e=0,f=b.colorList,g=function(a,b,c){return a[b]?a[b]:c?a[b%a.length]:\"\"},h=0;c=a[h++];){var i=this.getCellInfo(c);c.style.backgroundColor=g(f,d+e==i.rowIndex?e:++e,b.repeat)}}},removeBackground:function(a){utils.each(a,function(a){a.style.backgroundColor=\"\"})}}}(),function(){function a(a,c){var d=domUtils.getElementsByTagName(a,\"td th\");utils.each(d,function(a){a.removeAttribute(\"width\")}),a.setAttribute(\"width\",b(c,!0,g(c,a)));var e=[];setTimeout(function(){utils.each(d,function(a){1==a.colSpan&&e.push(a.offsetWidth)}),utils.each(d,function(a,b){1==a.colSpan&&a.setAttribute(\"width\",e[b]+\"\")})},0)}function b(a,b,c){var d=a.body;return d.offsetWidth-(b?2*parseInt(domUtils.getComputedStyle(d,\"margin-left\"),10):0)-2*c.tableBorder-(a.options.offsetWidth||0)}function c(a){var b=e(a).cell;if(b){var c=h(b);return c.selectedTds.length?c.selectedTds:[b]}return[]}var d=UE.UETable,e=function(a){return d.getTableItemsByRange(a)},f=function(a){return d.getUETableBySelected(a)},g=function(a,b){return d.getDefaultValue(a,b)},h=function(a){return d.getUETable(a)};UE.commands.inserttable={queryCommandState:function(){return e(this).table?-1:0},execCommand:function(a,b){function c(a,b){for(var c=[],d=a.numRows,e=a.numCols,f=0;f<d;f++){c.push(\"<tr\"+(0==f?' class=\"firstRow\"':\"\")+\">\");for(var g=0;g<e;g++)c.push('<td width=\"'+b+'\"  vAlign=\"'+a.tdvalign+'\" >'+(browser.ie&&browser.version<11?domUtils.fillChar:\"<br/>\")+\"</td>\");c.push(\"</tr>\")}return\"<table><tbody>\"+c.join(\"\")+\"</tbody></table>\"}b||(b=utils.extend({},{numCols:this.options.defaultCols,numRows:this.options.defaultRows,tdvalign:this.options.tdvalign}));var d=this,e=this.selection.getRange(),f=e.startContainer,h=domUtils.findParent(f,function(a){return domUtils.isBlockElm(a)},!0)||d.body,i=g(d),j=h.offsetWidth,k=Math.floor(j/b.numCols-2*i.tdPadding-i.tdBorder);!b.tdvalign&&(b.tdvalign=d.options.tdvalign),d.execCommand(\"inserthtml\",c(b,k))}},UE.commands.insertparagraphbeforetable={queryCommandState:function(){return e(this).cell?0:-1},execCommand:function(){var a=e(this).table;if(a){var b=this.document.createElement(\"p\");b.innerHTML=browser.ie?\"&nbsp;\":\"<br />\",a.parentNode.insertBefore(b,a),this.selection.getRange().setStart(b,0).setCursor()}}},UE.commands.deletetable={queryCommandState:function(){var a=this.selection.getRange();return domUtils.findParentByTagName(a.startContainer,\"table\",!0)?0:-1},execCommand:function(a,b){var c=this.selection.getRange();if(b=b||domUtils.findParentByTagName(c.startContainer,\"table\",!0)){var d=b.nextSibling;d||(d=domUtils.createElement(this.document,\"p\",{innerHTML:browser.ie?domUtils.fillChar:\"<br/>\"}),b.parentNode.insertBefore(d,b)),domUtils.remove(b),c=this.selection.getRange(),3==d.nodeType?c.setStartBefore(d):c.setStart(d,0),c.setCursor(!1,!0),this.fireEvent(\"tablehasdeleted\")}}},UE.commands.cellalign={queryCommandState:function(){return c(this).length?0:-1},execCommand:function(a,b){var d=c(this);if(d.length)for(var e,f=0;e=d[f++];)e.setAttribute(\"align\",b)}},UE.commands.cellvalign={queryCommandState:function(){return c(this).length?0:-1},execCommand:function(a,b){var d=c(this);if(d.length)for(var e,f=0;e=d[f++];)e.setAttribute(\"vAlign\",b)}},UE.commands.insertcaption={queryCommandState:function(){var a=e(this).table;return a&&0==a.getElementsByTagName(\"caption\").length?1:-1},execCommand:function(){var a=e(this).table;if(a){var b=this.document.createElement(\"caption\");b.innerHTML=browser.ie?domUtils.fillChar:\"<br/>\",a.insertBefore(b,a.firstChild);var c=this.selection.getRange();c.setStart(b,0).setCursor()}}},UE.commands.deletecaption={queryCommandState:function(){var a=this.selection.getRange(),b=domUtils.findParentByTagName(a.startContainer,\"table\");return b?0==b.getElementsByTagName(\"caption\").length?-1:1:-1},execCommand:function(){var a=this.selection.getRange(),b=domUtils.findParentByTagName(a.startContainer,\"table\");if(b){domUtils.remove(b.getElementsByTagName(\"caption\")[0]);var c=this.selection.getRange();c.setStart(b.rows[0].cells[0],0).setCursor()}}},UE.commands.inserttitle={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[0];return\"th\"!=b.cells[b.cells.length-1].tagName.toLowerCase()?0:-1}return-1},execCommand:function(){var a=e(this).table;a&&h(a).insertRow(0,\"th\");var b=a.getElementsByTagName(\"th\")[0];this.selection.getRange().setStart(b,0).setCursor(!1,!0)}},UE.commands.deletetitle={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[0];return\"th\"==b.cells[b.cells.length-1].tagName.toLowerCase()?0:-1}return-1},execCommand:function(){var a=e(this).table;a&&domUtils.remove(a.rows[0]);var b=a.getElementsByTagName(\"td\")[0];this.selection.getRange().setStart(b,0).setCursor(!1,!0)}},UE.commands.inserttitlecol={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[a.rows.length-1];return b.getElementsByTagName(\"th\").length?-1:0}return-1},execCommand:function(b){var c=e(this).table;c&&h(c).insertCol(0,\"th\"),a(c,this);var d=c.getElementsByTagName(\"th\")[0];this.selection.getRange().setStart(d,0).setCursor(!1,!0)}},UE.commands.deletetitlecol={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[a.rows.length-1];return b.getElementsByTagName(\"th\").length?0:-1}return-1},execCommand:function(){var b=e(this).table;if(b)for(var c=0;c<b.rows.length;c++)domUtils.remove(b.rows[c].children[0]);a(b,this);var d=b.getElementsByTagName(\"td\")[0];this.selection.getRange().setStart(d,0).setCursor(!1,!0)}},UE.commands.mergeright={queryCommandState:function(a){var b=e(this),c=b.table,d=b.cell;if(!c||!d)return-1;var f=h(c);if(f.selectedTds.length)return-1;var g=f.getCellInfo(d),i=g.colIndex+g.colSpan;if(i>=f.colsNum)return-1;var j=f.indexTable[g.rowIndex][i],k=c.rows[j.rowIndex].cells[j.cellIndex];return k&&d.tagName==k.tagName&&j.rowIndex==g.rowIndex&&j.rowSpan==g.rowSpan?0:-1},execCommand:function(a){var b=this.selection.getRange(),c=b.createBookmark(!0),d=e(this).cell,f=h(d);f.mergeRight(d),b.moveToBookmark(c).select()}},UE.commands.mergedown={queryCommandState:function(a){var b=e(this),c=b.table,d=b.cell;if(!c||!d)return-1;var f=h(c);if(f.selectedTds.length)return-1;var g=f.getCellInfo(d),i=g.rowIndex+g.rowSpan;if(i>=f.rowsNum)return-1;var j=f.indexTable[i][g.colIndex],k=c.rows[j.rowIndex].cells[j.cellIndex];return k&&d.tagName==k.tagName&&j.colIndex==g.colIndex&&j.colSpan==g.colSpan?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.mergeDown(c),a.moveToBookmark(b).select()}},UE.commands.mergecells={queryCommandState:function(){return f(this)?0:-1},execCommand:function(){var a=f(this);if(a&&a.selectedTds.length){var b=a.selectedTds[0];a.mergeRange();var c=this.selection.getRange();domUtils.isEmptyBlock(b)?c.setStart(b,0).collapse(!0):c.selectNodeContents(b),c.select()}}},UE.commands.insertrow={queryCommandState:function(){var a=e(this),b=a.cell;return b&&(\"TD\"==b.tagName||\"TH\"==b.tagName&&a.tr!==a.table.rows[0])&&h(a.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this),d=c.cell,f=c.table,g=h(f),i=g.getCellInfo(d);if(g.selectedTds.length)for(var j=g.cellsRange,k=0,l=j.endRowIndex-j.beginRowIndex+1;k<l;k++)g.insertRow(j.beginRowIndex,d);else g.insertRow(i.rowIndex,d);a.moveToBookmark(b).select(),\"enabled\"===f.getAttribute(\"interlaced\")&&this.fireEvent(\"interlacetable\",f)}},UE.commands.insertrownext={queryCommandState:function(){var a=e(this),b=a.cell;return b&&\"TD\"==b.tagName&&h(a.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this),d=c.cell,f=c.table,g=h(f),i=g.getCellInfo(d);if(g.selectedTds.length)for(var j=g.cellsRange,k=0,l=j.endRowIndex-j.beginRowIndex+1;k<l;k++)g.insertRow(j.endRowIndex+1,d);else g.insertRow(i.rowIndex+i.rowSpan,d);a.moveToBookmark(b).select(),\"enabled\"===f.getAttribute(\"interlaced\")&&this.fireEvent(\"interlacetable\",f)}},UE.commands.deleterow={queryCommandState:function(){var a=e(this);return a.cell?0:-1},execCommand:function(){var a=e(this).cell,b=h(a),c=b.cellsRange,d=b.getCellInfo(a),f=b.getVSideCell(a),g=b.getVSideCell(a,!0),i=this.selection.getRange();if(utils.isEmptyObject(c))b.deleteRow(d.rowIndex);else for(var j=c.beginRowIndex;j<c.endRowIndex+1;j++)b.deleteRow(c.beginRowIndex);var k=b.table;if(k.getElementsByTagName(\"td\").length)if(1==d.rowSpan||d.rowSpan==c.endRowIndex-c.beginRowIndex+1)(g||f)&&i.selectNodeContents(g||f).setCursor(!1,!0);else{var l=b.getCell(d.rowIndex,b.indexTable[d.rowIndex][d.colIndex].cellIndex);l&&i.selectNodeContents(l).setCursor(!1,!0)}else{var m=k.nextSibling;domUtils.remove(k),m&&i.setStart(m,0).setCursor(!1,!0)}\"enabled\"===k.getAttribute(\"interlaced\")&&this.fireEvent(\"interlacetable\",k)}},UE.commands.insertcol={queryCommandState:function(a){var b=e(this),c=b.cell;return c&&(\"TD\"==c.tagName||\"TH\"==c.tagName&&c!==b.tr.cells[0])&&h(b.table).colsNum<this.options.maxColNum?0:-1;\n},execCommand:function(a){var b=this.selection.getRange(),c=b.createBookmark(!0);if(this.queryCommandState(a)!=-1){var d=e(this).cell,f=h(d),g=f.getCellInfo(d);if(f.selectedTds.length)for(var i=f.cellsRange,j=0,k=i.endColIndex-i.beginColIndex+1;j<k;j++)f.insertCol(i.beginColIndex,d);else f.insertCol(g.colIndex,d);b.moveToBookmark(c).select(!0)}}},UE.commands.insertcolnext={queryCommandState:function(){var a=e(this),b=a.cell;return b&&h(a.table).colsNum<this.options.maxColNum?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c),f=d.getCellInfo(c);if(d.selectedTds.length)for(var g=d.cellsRange,i=0,j=g.endColIndex-g.beginColIndex+1;i<j;i++)d.insertCol(g.endColIndex+1,c);else d.insertCol(f.colIndex+f.colSpan,c);a.moveToBookmark(b).select()}},UE.commands.deletecol={queryCommandState:function(){var a=e(this);return a.cell?0:-1},execCommand:function(){var a=e(this).cell,b=h(a),c=b.cellsRange,d=b.getCellInfo(a),f=b.getHSideCell(a),g=b.getHSideCell(a,!0);if(utils.isEmptyObject(c))b.deleteCol(d.colIndex);else for(var i=c.beginColIndex;i<c.endColIndex+1;i++)b.deleteCol(c.beginColIndex);var j=b.table,k=this.selection.getRange();if(j.getElementsByTagName(\"td\").length)domUtils.inDoc(a,this.document)?k.setStart(a,0).setCursor(!1,!0):g&&domUtils.inDoc(g,this.document)?k.selectNodeContents(g).setCursor(!1,!0):f&&domUtils.inDoc(f,this.document)&&k.selectNodeContents(f).setCursor(!0,!0);else{var l=j.nextSibling;domUtils.remove(j),l&&k.setStart(l,0).setCursor(!1,!0)}}},UE.commands.splittocells={queryCommandState:function(){var a=e(this),b=a.cell;if(!b)return-1;var c=h(a.table);return c.selectedTds.length>0?-1:b&&(b.colSpan>1||b.rowSpan>1)?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.splitToCells(c),a.moveToBookmark(b).select()}},UE.commands.splittorows={queryCommandState:function(){var a=e(this),b=a.cell;if(!b)return-1;var c=h(a.table);return c.selectedTds.length>0?-1:b&&b.rowSpan>1?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.splitToRows(c),a.moveToBookmark(b).select()}},UE.commands.splittocols={queryCommandState:function(){var a=e(this),b=a.cell;if(!b)return-1;var c=h(a.table);return c.selectedTds.length>0?-1:b&&b.colSpan>1?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.splitToCols(c),a.moveToBookmark(b).select()}},UE.commands.adaptbytext=UE.commands.adaptbywindow={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(b){var c=e(this),d=c.table;if(d)if(\"adaptbywindow\"==b)a(d,this);else{var f=domUtils.getElementsByTagName(d,\"td th\");utils.each(f,function(a){a.removeAttribute(\"width\")}),d.removeAttribute(\"width\")}}},UE.commands.averagedistributecol={queryCommandState:function(){var a=f(this);return a&&(a.isFullRow()||a.isFullCol())?0:-1},execCommand:function(a){function b(){var a,b=e.table,c=0,f=0,h=g(d,b);if(e.isFullRow())c=b.offsetWidth,f=e.colsNum;else for(var i,j=e.cellsRange.beginColIndex,k=e.cellsRange.endColIndex,l=j;l<=k;)i=e.selectedTds[l],c+=i.offsetWidth,l+=i.colSpan,f+=1;return a=Math.ceil(c/f)-2*h.tdBorder-2*h.tdPadding}function c(a){utils.each(domUtils.getElementsByTagName(e.table,\"th\"),function(a){a.setAttribute(\"width\",\"\")});var b=e.isFullRow()?domUtils.getElementsByTagName(e.table,\"td\"):e.selectedTds;utils.each(b,function(b){1==b.colSpan&&b.setAttribute(\"width\",a)})}var d=this,e=f(d);e&&e.selectedTds.length&&c(b())}},UE.commands.averagedistributerow={queryCommandState:function(){var a=f(this);return a?a.selectedTds&&/th/gi.test(a.selectedTds[0].tagName)?-1:a.isFullRow()||a.isFullCol()?0:-1:-1},execCommand:function(a){function b(){var a,b,c=0,f=e.table,h=g(d,f),i=parseInt(domUtils.getComputedStyle(f.getElementsByTagName(\"td\")[0],\"padding-top\"));if(e.isFullCol()){var j,k,l=domUtils.getElementsByTagName(f,\"caption\"),m=domUtils.getElementsByTagName(f,\"th\");l.length>0&&(j=l[0].offsetHeight),m.length>0&&(k=m[0].offsetHeight),c=f.offsetHeight-(j||0)-(k||0),b=0==m.length?e.rowsNum:e.rowsNum-1}else{for(var n=e.cellsRange.beginRowIndex,o=e.cellsRange.endRowIndex,p=0,q=domUtils.getElementsByTagName(f,\"tr\"),r=n;r<=o;r++)c+=q[r].offsetHeight,p+=1;b=p}return a=browser.ie&&browser.version<9?Math.ceil(c/b):Math.ceil(c/b)-2*h.tdBorder-2*i}function c(a){var b=e.isFullCol()?domUtils.getElementsByTagName(e.table,\"td\"):e.selectedTds;utils.each(b,function(b){1==b.rowSpan&&b.setAttribute(\"height\",a)})}var d=this,e=f(d);e&&e.selectedTds.length&&c(b())}},UE.commands.cellalignment={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(a,b){var c=this,d=f(c);if(d)utils.each(d.selectedTds,function(a){domUtils.setAttributes(a,b)});else{var e=c.selection.getStart(),g=e&&domUtils.findParentByTagName(e,[\"td\",\"th\",\"caption\"],!0);/caption/gi.test(g.tagName)?(g.style.textAlign=b.align,g.style.verticalAlign=b.vAlign):domUtils.setAttributes(g,b),c.selection.getRange().setCursor(!0)}},queryCommandValue:function(a){var b=e(this).cell;if(b||(b=c(this)[0]),b){var d=UE.UETable.getUETable(b).selectedTds;return!d.length&&(d=b),UE.UETable.getTableCellAlignState(d)}return null}},UE.commands.tablealignment={queryCommandState:function(){return browser.ie&&browser.version<8?-1:e(this).table?0:-1},execCommand:function(a,b){var c=this,d=c.selection.getStart(),e=d&&domUtils.findParentByTagName(d,[\"table\"],!0);e&&e.setAttribute(\"align\",b)}},UE.commands.edittable={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(a,b){var c=this.selection.getRange(),d=domUtils.findParentByTagName(c.startContainer,\"table\");if(d){var e=domUtils.getElementsByTagName(d,\"td\").concat(domUtils.getElementsByTagName(d,\"th\"),domUtils.getElementsByTagName(d,\"caption\"));utils.each(e,function(a){a.style.borderColor=b})}}},UE.commands.edittd={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(a,b){var c=this,d=f(c);if(d)utils.each(d.selectedTds,function(a){a.style.backgroundColor=b});else{var e=c.selection.getStart(),g=e&&domUtils.findParentByTagName(e,[\"td\",\"th\",\"caption\"],!0);g&&(g.style.backgroundColor=b)}}},UE.commands.settablebackground={queryCommandState:function(){return c(this).length>1?0:-1},execCommand:function(a,b){var d,e;d=c(this),e=h(d[0]),e.setBackground(d,b)}},UE.commands.cleartablebackground={queryCommandState:function(){var a=c(this);if(!a.length)return-1;for(var b,d=0;b=a[d++];)if(\"\"!==b.style.backgroundColor)return 0;return-1},execCommand:function(){var a=c(this),b=h(a[0]);b.removeBackground(a)}},UE.commands.interlacetable=UE.commands.uninterlacetable={queryCommandState:function(a){var b=e(this).table;if(!b)return-1;var c=b.getAttribute(\"interlaced\");return\"interlacetable\"==a?\"enabled\"===c?-1:0:c&&\"disabled\"!==c?0:-1},execCommand:function(a,b){var c=e(this).table;\"interlacetable\"==a?(c.setAttribute(\"interlaced\",\"enabled\"),this.fireEvent(\"interlacetable\",c,b)):(c.setAttribute(\"interlaced\",\"disabled\"),this.fireEvent(\"uninterlacetable\",c))}},UE.commands.setbordervisible={queryCommandState:function(a){var b=e(this).table;return b?0:-1},execCommand:function(){var a=e(this).table;utils.each(domUtils.getElementsByTagName(a,\"td\"),function(a){a.style.borderWidth=\"1px\",a.style.borderStyle=\"solid\"})}}}(),UE.plugins.table=function(){function a(a){}function b(a,b){c(a,\"width\",!0),c(a,\"height\",!0)}function c(a,b,c){a.style[b]&&(c&&a.setAttribute(b,parseInt(a.style[b],10)),a.style[b]=\"\")}function d(a){if(\"TD\"==a.tagName||\"TH\"==a.tagName)return a;var b;return(b=domUtils.findParentByTagName(a,\"td\",!0)||domUtils.findParentByTagName(a,\"th\",!0))?b:null}function e(a){var b=new RegExp(domUtils.fillChar,\"g\");if(a[browser.ie?\"innerText\":\"textContent\"].replace(/^\\s*$/,\"\").replace(b,\"\").length>0)return 0;for(var c in dtd.$isNotEmpty)if(a.getElementsByTagName(c).length)return 0;return 1}function f(a){return a.pageX||a.pageY?{x:a.pageX,y:a.pageY}:{x:a.clientX+N.document.body.scrollLeft-N.document.body.clientLeft,y:a.clientY+N.document.body.scrollTop-N.document.body.clientTop}}function g(b){if(!A())try{var c,e=d(b.target||b.srcElement);if(R&&(N.body.style.webkitUserSelect=\"none\",(Math.abs(V.x-b.clientX)>T||Math.abs(V.y-b.clientY)>T)&&(t(),R=!1,U=0,v(b))),ca&&ha)return U=0,N.body.style.webkitUserSelect=\"none\",N.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"](),c=f(b),m(N,!0,ca,c,e),void(\"h\"==ca?ga.style.left=k(ha,b)+\"px\":\"v\"==ca&&(ga.style.top=l(ha,b)+\"px\"));if(e){if(N.fireEvent(\"excludetable\",e)===!0)return;c=f(b);var g=n(e,c),i=domUtils.findParentByTagName(e,\"table\",!0);if(j(i,e,b,!0)){if(N.fireEvent(\"excludetable\",i)===!0)return;N.body.style.cursor=\"url(\"+N.options.cursorpath+\"h.png),pointer\"}else if(j(i,e,b)){if(N.fireEvent(\"excludetable\",i)===!0)return;N.body.style.cursor=\"url(\"+N.options.cursorpath+\"v.png),pointer\"}else{N.body.style.cursor=\"text\";/\\d/.test(g)&&(g=g.replace(/\\d/,\"\"),e=Y(e).getPreviewCell(e,\"v\"==g)),m(N,!!e&&!!g,e?g:\"\",c,e)}}else h(!1,i,N)}catch(o){a(o)}}function h(a,b,c){if(a)i(b,c);else{if(fa)return;la=setTimeout(function(){!fa&&ea&&ea.parentNode&&ea.parentNode.removeChild(ea)},2e3)}}function i(a,b){function c(c,d){clearTimeout(g),g=setTimeout(function(){b.fireEvent(\"tableClicked\",a,d)},300)}function d(c){clearTimeout(g);var d=Y(a),e=a.rows[0].cells[0],f=d.getLastCell(),h=d.getCellsRange(e,f);b.selection.getRange().setStart(e,0).setCursor(!1,!0),d.setSelected(h)}var e=domUtils.getXY(a),f=a.ownerDocument;if(ea&&ea.parentNode)return ea;ea=f.createElement(\"div\"),ea.contentEditable=!1,ea.innerHTML=\"\",ea.style.cssText=\"width:15px;height:15px;background-image:url(\"+b.options.UEDITOR_HOME_URL+\"dialogs/table/dragicon.png);position: absolute;cursor:move;top:\"+(e.y-15)+\"px;left:\"+e.x+\"px;\",domUtils.unSelectable(ea),ea.onmouseover=function(a){fa=!0},ea.onmouseout=function(a){fa=!1},domUtils.on(ea,\"click\",function(a,b){c(b,this)}),domUtils.on(ea,\"dblclick\",function(a,b){d(b)}),domUtils.on(ea,\"dragstart\",function(a,b){domUtils.preventDefault(b)});var g;f.body.appendChild(ea)}function j(a,b,c,d){var e=f(c),g=n(b,e);if(d){var h=a.getElementsByTagName(\"caption\")[0],i=h?h.offsetHeight:0;return\"v1\"==g&&e.y-domUtils.getXY(a).y-i<8}return\"h1\"==g&&e.x-domUtils.getXY(a).x<8}function k(a,b){var c=Y(a);if(c){var d=c.getSameEndPosCells(a,\"x\")[0],e=c.getSameStartPosXCells(a)[0],g=f(b).x,h=(d?domUtils.getXY(d).x:domUtils.getXY(c.table).x)+20,i=e?domUtils.getXY(e).x+e.offsetWidth-20:N.body.offsetWidth+5||parseInt(domUtils.getComputedStyle(N.body,\"width\"),10);return h+=Q,i-=Q,g<h?h:g>i?i:g}}function l(b,c){try{var d=domUtils.getXY(b).y,e=f(c).y;return e<d?d:e}catch(g){a(g)}}function m(b,c,d,e,f){try{b.body.style.cursor=\"h\"==d?\"col-resize\":\"v\"==d?\"row-resize\":\"text\",browser.ie&&(!d||ia||Z(b)?I(b):(H(b,b.document),J(d,f))),da=c}catch(g){a(g)}}function n(a,b){var c=domUtils.getXY(a);return c?c.x+a.offsetWidth-b.x<S?\"h\":b.x-c.x<S?\"h1\":c.y+a.offsetHeight-b.y<S?\"v\":b.y-c.y<S?\"v1\":\"\":\"\"}function o(a,b){if(!A())if(V={x:b.clientX,y:b.clientY},2==b.button){var c=Z(N),d=!1;if(c){var e=M(N,b);utils.each(c.selectedTds,function(a){a===e&&(d=!0)}),d?(e=c.selectedTds[0],setTimeout(function(){N.selection.getRange().setStart(e,0).setCursor(!1,!0)},0)):(_(domUtils.getElementsByTagName(N.body,\"th td\")),c.clearSelected())}}else q(b)}function p(a){U=0,a=a||N.window.event;var b=d(a.target||a.srcElement);if(b){var c;if(c=n(b,f(a))){if(I(N),\"h1\"==c)if(c=\"h\",j(domUtils.findParentByTagName(b,\"table\"),b,a))N.execCommand(\"adaptbywindow\");else if(b=Y(b).getPreviewCell(b)){var e=N.selection.getRange();e.selectNodeContents(b).setCursor(!0,!0)}if(\"h\"==c){var g=Y(b),h=g.table,i=C(b,h,!0);i=s(i,\"left\"),g.width=g.offsetWidth;var k=[],l=[];utils.each(i,function(a){k.push(a.offsetWidth)}),utils.each(i,function(a){a.removeAttribute(\"width\")}),window.setTimeout(function(){var a=!0;utils.each(i,function(b,c){var d=b.offsetWidth;return d>k[c]?(a=!1,!1):void l.push(d)});var b=a?l:k;utils.each(i,function(a,c){a.width=b[c]-G()})},0)}}}}function q(a){if(_(domUtils.getElementsByTagName(N.body,\"td th\")),utils.each(N.document.getElementsByTagName(\"table\"),function(a){a.ueTable=null}),aa=M(N,a)){var b=domUtils.findParentByTagName(aa,\"table\",!0);ut=Y(b),ut&&ut.clearSelected(),da?r(a):(N.document.body.style.webkitUserSelect=\"\",ia=!0,N.addListener(\"mouseover\",x))}}function r(a){browser.ie&&(a=u(a)),t(),R=!0,O=setTimeout(function(){v(a)},W)}function s(a,b){for(var c=[],d=null,e=0,f=a.length;e<f;e++)d=a[e][b],d&&c.push(d);return c}function t(){O&&clearTimeout(O),O=null}function u(a){var b=[\"pageX\",\"pageY\",\"clientX\",\"clientY\",\"srcElement\",\"target\"],c={};if(a)for(var d,e,f=0;d=b[f];f++)e=a[d],e&&(c[d]=e);return c}function v(a){if(R=!1,aa=a.target||a.srcElement){var b=n(aa,f(a));/\\d/.test(b)&&(b=b.replace(/\\d/,\"\"),aa=Y(aa).getPreviewCell(aa,\"v\"==b)),I(N),H(N,N.document),N.fireEvent(\"saveScene\"),J(b,aa),ia=!0,ca=b,ha=aa}}function w(a,b){if(!A()){if(t(),R=!1,da&&(U=++U%3,V={x:b.clientX,y:b.clientY},P=setTimeout(function(){U>0&&U--},W),2===U))return U=0,void p(b);if(2!=b.button){var c=this,d=c.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,\"table\",!0),f=domUtils.findParentByTagName(d.endContainer,\"table\",!0);if((e||f)&&(e===f?(e=domUtils.findParentByTagName(d.startContainer,[\"td\",\"th\",\"caption\"],!0),f=domUtils.findParentByTagName(d.endContainer,[\"td\",\"th\",\"caption\"],!0),e!==f&&c.selection.clearRange()):c.selection.clearRange()),ia=!1,c.document.body.style.webkitUserSelect=\"\",ca&&ha&&(c.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"](),U=0,ga=c.document.getElementById(\"ue_tableDragLine\"))){var g=domUtils.getXY(ha),h=domUtils.getXY(ga);switch(ca){case\"h\":z(ha,h.x-g.x);break;case\"v\":B(ha,h.y-g.y-ha.offsetHeight)}return ca=\"\",ha=null,I(c),void c.fireEvent(\"saveScene\")}if(aa){var i=Y(aa),j=i?i.selectedTds[0]:null;if(j)d=new dom.Range(c.document),domUtils.isEmptyBlock(j)?d.setStart(j,0).setCursor(!1,!0):d.selectNodeContents(j).shrinkBoundary().setCursor(!1,!0);else if(d=c.selection.getRange().shrinkBoundary(),!d.collapsed){var e=domUtils.findParentByTagName(d.startContainer,[\"td\",\"th\"],!0),f=domUtils.findParentByTagName(d.endContainer,[\"td\",\"th\"],!0);(e&&!f||!e&&f||e&&f&&e!==f)&&d.setCursor(!1,!0)}aa=null,c.removeListener(\"mouseover\",x)}else{var k=domUtils.findParentByTagName(b.target||b.srcElement,\"td\",!0);if(k||(k=domUtils.findParentByTagName(b.target||b.srcElement,\"th\",!0)),k&&(\"TD\"==k.tagName||\"TH\"==k.tagName)){if(c.fireEvent(\"excludetable\",k)===!0)return;d=new dom.Range(c.document),d.setStart(k,0).setCursor(!1,!0)}}c._selectionChange(250,b)}}}function x(a,b){if(!A()){var c=this,d=b.target||b.srcElement;if(ba=domUtils.findParentByTagName(d,\"td\",!0)||domUtils.findParentByTagName(d,\"th\",!0),aa&&ba&&(\"TD\"==aa.tagName&&\"TD\"==ba.tagName||\"TH\"==aa.tagName&&\"TH\"==ba.tagName)&&domUtils.findParentByTagName(aa,\"table\")==domUtils.findParentByTagName(ba,\"table\")){var e=Y(ba);if(aa!=ba){c.document.body.style.webkitUserSelect=\"none\",c.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();var f=e.getCellsRange(aa,ba);e.setSelected(f)}else c.document.body.style.webkitUserSelect=\"\",e.clearSelected()}b.preventDefault?b.preventDefault():b.returnValue=!1}}function y(a,b,c){var d=parseInt(domUtils.getComputedStyle(a,\"line-height\"),10),e=c+b;b=e<d?d:e,a.style.height&&(a.style.height=\"\"),1==a.rowSpan?a.setAttribute(\"height\",b):a.removeAttribute&&a.removeAttribute(\"height\")}function z(a,b){var c=Y(a);if(c){var d=c.table,e=C(a,d);if(d.style.width=\"\",d.removeAttribute(\"width\"),b=D(b,a,e),a.nextSibling){utils.each(e,function(a){a.left.width=+a.left.width+b,a.right&&(a.right.width=+a.right.width-b)})}else utils.each(e,function(a){a.left.width-=-b})}}function A(){return\"false\"===N.body.contentEditable}function B(a,b){if(!(Math.abs(b)<10)){var c=Y(a);if(c)for(var d,e=c.getSameEndPosCells(a,\"y\"),f=e[0]?e[0].offsetHeight:0,g=0;d=e[g++];)y(d,b,f)}}function C(a,b,c){if(b||(b=domUtils.findParentByTagName(a,\"table\")),!b)return null;for(var d=(domUtils.getNodeIndex(a),a),e=b.rows,f=0;d;)1===d.nodeType&&(f+=d.colSpan||1),d=d.previousSibling;d=null;var g=[];return utils.each(e,function(a){var b=a.cells,d=0;utils.each(b,function(a){return d+=a.colSpan||1,d===f?(g.push({left:a,right:a.nextSibling||null}),!1):d>f?(c&&g.push({left:a}),!1):void 0})}),g}function D(a,b,c){if(a-=G(),a<0)return 0;a-=E(b);var d=a<0?\"left\":\"right\";return a=Math.abs(a),utils.each(c,function(b){var c=b[d];c&&(a=Math.min(a,E(c)-Q))}),a=a<0?0:a,\"left\"===d?-a:a}function E(a){var b=0,b=a.offsetWidth-G();a.nextSibling||(b-=F(a)),b=b<0?0:b;try{a.width=b}catch(c){}return b}function F(a){if(tab=domUtils.findParentByTagName(a,\"table\",!1),void 0===tab.offsetVal){var b=a.previousSibling;b?tab.offsetVal=a.offsetWidth-b.offsetWidth===X.borderWidth?X.borderWidth:0:tab.offsetVal=0}return tab.offsetVal}function G(){if(void 0===X.tabcellSpace){var a=N.document.createElement(\"table\"),b=N.document.createElement(\"tbody\"),c=N.document.createElement(\"tr\"),d=N.document.createElement(\"td\"),e=null;d.style.cssText=\"border: 0;\",d.width=1,c.appendChild(d),c.appendChild(e=d.cloneNode(!1)),b.appendChild(c),a.appendChild(b),a.style.cssText=\"visibility: hidden;\",N.body.appendChild(a),X.paddingSpace=d.offsetWidth-1;var f=a.offsetWidth;d.style.cssText=\"\",e.style.cssText=\"\",X.borderWidth=(a.offsetWidth-f)/3,X.tabcellSpace=X.paddingSpace+X.borderWidth,N.body.removeChild(a)}return G=function(){return X.tabcellSpace},X.tabcellSpace}function H(a,b){ia||(ga=a.document.createElement(\"div\"),domUtils.setAttributes(ga,{id:\"ue_tableDragLine\",unselectable:\"on\",contenteditable:!1,onresizestart:\"return false\",ondragstart:\"return false\",onselectstart:\"return false\",style:\"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)\"}),a.body.appendChild(ga))}function I(a){if(!ia)for(var b;b=a.document.getElementById(\"ue_tableDragLine\");)domUtils.remove(b)}function J(a,b){if(b){var c,d=domUtils.findParentByTagName(b,\"table\"),e=d.getElementsByTagName(\"caption\"),f=d.offsetWidth,g=d.offsetHeight-(e.length>0?e[0].offsetHeight:0),h=domUtils.getXY(d),i=domUtils.getXY(b);switch(a){case\"h\":c=\"height:\"+g+\"px;top:\"+(h.y+(e.length>0?e[0].offsetHeight:0))+\"px;left:\"+(i.x+b.offsetWidth),ga.style.cssText=c+\"px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)\";break;case\"v\":c=\"width:\"+f+\"px;left:\"+h.x+\"px;top:\"+(i.y+b.offsetHeight),ga.style.cssText=c+\"px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)\"}}}function K(a,b){for(var c,d,e=domUtils.getElementsByTagName(a.body,\"table\"),f=0;d=e[f++];){var g=domUtils.getElementsByTagName(d,\"td\");g[0]&&(b?(c=g[0].style.borderColor.replace(/\\s/g,\"\"),/(#ffffff)|(rgb\\(255,255,255\\))/gi.test(c)&&domUtils.addClass(d,\"noBorderTable\")):domUtils.removeClasses(d,\"noBorderTable\"))}}function L(a,b,c){var d=a.body;return d.offsetWidth-(b?2*parseInt(domUtils.getComputedStyle(d,\"margin-left\"),10):0)-2*c.tableBorder-(a.options.offsetWidth||0)}function M(a,b){var c=domUtils.findParentByTagName(b.target||b.srcElement,[\"td\",\"th\"],!0),d=null;if(!c)return null;if(d=n(c,f(b)),!c)return null;if(\"h1\"===d&&c.previousSibling){var e=domUtils.getXY(c),g=c.offsetWidth;Math.abs(e.x+g-b.clientX)>g/3&&(c=c.previousSibling)}else if(\"v1\"===d&&c.parentNode.previousSibling){var e=domUtils.getXY(c),h=c.offsetHeight;Math.abs(e.y+h-b.clientY)>h/3&&(c=c.parentNode.previousSibling.firstChild)}return c&&a.fireEvent(\"excludetable\",c)!==!0?c:null}var N=this,O=null,P=null,Q=5,R=!1,S=5,T=10,U=0,V=null,W=360,X=UE.UETable,Y=function(a){return X.getUETable(a)},Z=function(a){return X.getUETableBySelected(a)},$=function(a,b){return X.getDefaultValue(a,b)},_=function(a){return X.removeSelectedClass(a)};N.ready(function(){var a=this,b=a.selection.getText;a.selection.getText=function(){var c=Z(a);if(c){var d=\"\";return utils.each(c.selectedTds,function(a){d+=a[browser.ie?\"innerText\":\"textContent\"]}),d}return b.call(a.selection)}});var aa=null,ba=null,ca=\"\",da=!1,ea=null,fa=!1,ga=null,ha=null,ia=!1,ja=!0;N.setOpt({maxColNum:20,maxRowNum:100,defaultCols:5,defaultRows:5,tdvalign:\"top\",cursorpath:N.options.UEDITOR_HOME_URL+\"themes/default/images/cursor_\",tableDragable:!1,classList:[\"ue-table-interlace-color-single\",\"ue-table-interlace-color-double\"]}),N.getUETable=Y;var ka={deletetable:1,inserttable:1,cellvalign:1,insertcaption:1,deletecaption:1,inserttitle:1,deletetitle:1,mergeright:1,mergedown:1,mergecells:1,insertrow:1,insertrownext:1,deleterow:1,insertcol:1,insertcolnext:1,deletecol:1,splittocells:1,splittorows:1,splittocols:1,adaptbytext:1,adaptbywindow:1,adaptbycustomer:1,insertparagraph:1,insertparagraphbeforetable:1,averagedistributecol:1,averagedistributerow:1};N.ready(function(){utils.cssRule(\"table\",\".selectTdClass{background-color:#edf5fa !important}table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}table{margin-bottom:10px;border-collapse:collapse;display:table;}td,th{padding: 5px 10px;border: 1px solid #DDD;}caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}th{border-top:1px solid #BBB;background-color:#F7F7F7;}table tr.firstRow th{border-top-width:2px;}.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }td p{margin:0;padding:0;}\",N.document);var a,c,f;N.addListener(\"keydown\",function(b,d){var g=this,h=d.keyCode||d.which;if(8==h){var i=Z(g);i&&i.selectedTds.length&&(i.isFullCol()?g.execCommand(\"deletecol\"):i.isFullRow()?g.execCommand(\"deleterow\"):g.fireEvent(\"delcells\"),domUtils.preventDefault(d));var j=domUtils.findParentByTagName(g.selection.getStart(),\"caption\",!0),k=g.selection.getRange();if(k.collapsed&&j&&e(j)){g.fireEvent(\"saveScene\");var l=j.parentNode;domUtils.remove(j),l&&k.setStart(l.rows[0].cells[0],0).setCursor(!1,!0),g.fireEvent(\"saveScene\")}}if(46==h&&(i=Z(g))){g.fireEvent(\"saveScene\");for(var m,n=0;m=i.selectedTds[n++];)domUtils.fillNode(g.document,m);g.fireEvent(\"saveScene\"),domUtils.preventDefault(d)}if(13==h){var o=g.selection.getRange(),j=domUtils.findParentByTagName(o.startContainer,\"caption\",!0);if(j){var l=domUtils.findParentByTagName(j,\"table\");return o.collapsed?j&&o.setStart(l.rows[0].cells[0],0).setCursor(!1,!0):(o.deleteContents(),g.fireEvent(\"saveScene\")),void domUtils.preventDefault(d)}if(o.collapsed){var l=domUtils.findParentByTagName(o.startContainer,\"table\");if(l){var p=l.rows[0].cells[0],q=domUtils.findParentByTagName(g.selection.getStart(),[\"td\",\"th\"],!0),r=l.previousSibling;if(p===q&&(!r||1==r.nodeType&&\"TABLE\"==r.tagName)&&domUtils.isStartInblock(o)){var s=domUtils.findParent(g.selection.getStart(),function(a){return domUtils.isBlockElm(a)},!0);s&&(/t(h|d)/i.test(s.tagName)||s===q.firstChild)&&(g.execCommand(\"insertparagraphbeforetable\"),domUtils.preventDefault(d))}}}}if((d.ctrlKey||d.metaKey)&&\"67\"==d.keyCode){a=null;var i=Z(g);if(i){var t=i.selectedTds;c=i.isFullCol(),f=i.isFullRow(),a=[[i.cloneCell(t[0],null,!0)]];for(var m,n=1;m=t[n];n++)m.parentNode!==t[n-1].parentNode?a.push([i.cloneCell(m,null,!0)]):a[a.length-1].push(i.cloneCell(m,null,!0))}}}),N.addListener(\"tablehasdeleted\",function(){m(this,!1,\"\",null),ea&&domUtils.remove(ea)}),N.addListener(\"beforepaste\",function(d,g){var h=this,i=h.selection.getRange();if(domUtils.findParentByTagName(i.startContainer,\"caption\",!0)){var j=h.document.createElement(\"div\");return j.innerHTML=g.html,void(g.html=j[browser.ie9below?\"innerText\":\"textContent\"])}var k=Z(h);if(a){h.fireEvent(\"saveScene\");var l,m,i=h.selection.getRange(),n=domUtils.findParentByTagName(i.startContainer,[\"td\",\"th\"],!0);if(n){var o=Y(n);if(f){var p=o.getCellInfo(n).rowIndex;\"TH\"==n.tagName&&p++;for(var q,r=0;q=a[r++];){for(var s,t=o.insertRow(p++,\"td\"),u=0;s=q[u];u++){var v=t.cells[u];v||(v=t.insertCell(u)),v.innerHTML=s.innerHTML,s.getAttribute(\"width\")&&v.setAttribute(\"width\",s.getAttribute(\"width\")),s.getAttribute(\"vAlign\")&&v.setAttribute(\"vAlign\",s.getAttribute(\"vAlign\")),s.getAttribute(\"align\")&&v.setAttribute(\"align\",s.getAttribute(\"align\")),s.style.cssText&&(v.style.cssText=s.style.cssText)}for(var s,u=0;(s=t.cells[u])&&q[u];u++)s.innerHTML=q[u].innerHTML,q[u].getAttribute(\"width\")&&s.setAttribute(\"width\",q[u].getAttribute(\"width\")),q[u].getAttribute(\"vAlign\")&&s.setAttribute(\"vAlign\",q[u].getAttribute(\"vAlign\")),q[u].getAttribute(\"align\")&&s.setAttribute(\"align\",q[u].getAttribute(\"align\")),q[u].style.cssText&&(s.style.cssText=q[u].style.cssText)}}else{if(c){y=o.getCellInfo(n);for(var s,w=0,u=0,q=a[0];s=q[u++];)w+=s.colSpan||1;for(h.__hasEnterExecCommand=!0,r=0;r<w;r++)h.execCommand(\"insertcol\");h.__hasEnterExecCommand=!1,n=o.table.rows[0].cells[y.cellIndex],\"TH\"==n.tagName&&(n=o.table.rows[1].cells[y.cellIndex])}for(var q,r=0;q=a[r++];){l=n;for(var s,u=0;s=q[u++];)if(n)n.innerHTML=s.innerHTML,s.getAttribute(\"width\")&&n.setAttribute(\"width\",s.getAttribute(\"width\")),s.getAttribute(\"vAlign\")&&n.setAttribute(\"vAlign\",s.getAttribute(\"vAlign\")),s.getAttribute(\"align\")&&n.setAttribute(\"align\",s.getAttribute(\"align\")),s.style.cssText&&(n.style.cssText=s.style.cssText),m=n,n=n.nextSibling;else{var x=s.cloneNode(!0);domUtils.removeAttributes(x,[\"class\",\"rowSpan\",\"colSpan\"]),m.parentNode.appendChild(x)}if(n=o.getNextCell(l,!0,!0),!a[r])break;if(!n){var y=o.getCellInfo(l);o.table.insertRow(o.table.rows.length),o.update(),n=o.getVSideCell(l,!0)}}}o.update()}else{k=h.document.createElement(\"table\");for(var q,r=0;q=a[r++];){for(var s,t=k.insertRow(k.rows.length),u=0;s=q[u++];)x=X.cloneCell(s,null,!0),domUtils.removeAttributes(x,[\"class\"]),t.appendChild(x);2==u&&x.rowSpan>1&&(x.rowSpan=1)}var z=$(h),A=h.body.offsetWidth-(ja?2*parseInt(domUtils.getComputedStyle(h.body,\"margin-left\"),10):0)-2*z.tableBorder-(h.options.offsetWidth||0);h.execCommand(\"insertHTML\",\"<table  \"+(c&&f?'width=\"'+A+'\"':\"\")+\">\"+k.innerHTML.replace(/>\\s*</g,\"><\").replace(/\\bth\\b/gi,\"td\")+\"</table>\")}return h.fireEvent(\"contentchange\"),h.fireEvent(\"saveScene\"),g.html=\"\",!0}var B,j=h.document.createElement(\"div\");j.innerHTML=g.html,B=j.getElementsByTagName(\"table\"),domUtils.findParentByTagName(h.selection.getStart(),\"table\")?(utils.each(B,function(a){domUtils.remove(a)}),domUtils.findParentByTagName(h.selection.getStart(),\"caption\",!0)&&(j.innerHTML=j[browser.ie?\"innerText\":\"textContent\"])):utils.each(B,function(a){b(a,!0),domUtils.removeAttributes(a,[\"style\",\"border\"]),utils.each(domUtils.getElementsByTagName(a,\"td\"),function(a){e(a)&&domUtils.fillNode(h.document,a),b(a,!0)})}),g.html=j.innerHTML}),N.addListener(\"afterpaste\",function(){utils.each(domUtils.getElementsByTagName(N.body,\"table\"),function(a){if(a.offsetWidth>N.body.offsetWidth){var b=$(N,a);a.style.width=N.body.offsetWidth-(ja?2*parseInt(domUtils.getComputedStyle(N.body,\"margin-left\"),10):0)-2*b.tableBorder-(N.options.offsetWidth||0)+\"px\"}})}),N.addListener(\"blur\",function(){a=null});var i;N.addListener(\"keydown\",function(){clearTimeout(i),i=setTimeout(function(){var a=N.selection.getRange(),b=domUtils.findParentByTagName(a.startContainer,[\"th\",\"td\"],!0);if(b){var c=b.parentNode.parentNode.parentNode;c.offsetWidth>c.getAttribute(\"width\")&&(b.style.wordBreak=\"break-all\")}},100)}),N.addListener(\"selectionchange\",function(){m(N,!1,\"\",null)}),N.addListener(\"contentchange\",function(){var a=this;if(I(a),!Z(a)){var b=a.selection.getRange(),c=b.startContainer;c=domUtils.findParentByTagName(c,[\"td\",\"th\"],!0),utils.each(domUtils.getElementsByTagName(a.document,\"table\"),function(b){a.fireEvent(\"excludetable\",b)!==!0&&(b.ueTable=new X(b),b.onmouseover=function(){a.fireEvent(\"tablemouseover\",b)},b.onmousemove=function(){a.fireEvent(\"tablemousemove\",b),a.options.tableDragable&&h(!0,this,a),utils.defer(function(){a.fireEvent(\"contentchange\",50)},!0)},b.onmouseout=function(){a.fireEvent(\"tablemouseout\",b),m(a,!1,\"\",null),I(a)},b.onclick=function(b){b=a.window.event||b;var c=d(b.target||b.srcElement);if(c){var e,f=Y(c),g=f.table,h=f.getCellInfo(c),i=a.selection.getRange();if(j(g,c,b,!0)){var k=f.getCell(f.indexTable[f.rowsNum-1][h.colIndex].rowIndex,f.indexTable[f.rowsNum-1][h.colIndex].cellIndex);return void(b.shiftKey&&f.selectedTds.length?f.selectedTds[0]!==k?(e=f.getCellsRange(f.selectedTds[0],k),f.setSelected(e)):i&&i.selectNodeContents(k).select():c!==k?(e=f.getCellsRange(c,k),f.setSelected(e)):i&&i.selectNodeContents(k).select())}if(j(g,c,b)){var l=f.getCell(f.indexTable[h.rowIndex][f.colsNum-1].rowIndex,f.indexTable[h.rowIndex][f.colsNum-1].cellIndex);b.shiftKey&&f.selectedTds.length?f.selectedTds[0]!==l?(e=f.getCellsRange(f.selectedTds[0],l),f.setSelected(e)):i&&i.selectNodeContents(l).select():c!==l?(e=f.getCellsRange(c,l),f.setSelected(e)):i&&i.selectNodeContents(l).select()}}})}),K(a,!0)}}),domUtils.on(N.document,\"mousemove\",g),domUtils.on(N.document,\"mouseout\",function(a){var b=a.target||a.srcElement;\"TABLE\"==b.tagName&&m(N,!1,\"\",null)}),N.addListener(\"interlacetable\",function(a,b,c){if(b)for(var d=this,e=b.rows,f=e.length,g=function(a,b,c){return a[b]?a[b]:c?a[b%a.length]:\"\"},h=0;h<f;h++)e[h].className=g(c||d.options.classList,h,!0)}),N.addListener(\"uninterlacetable\",function(a,b){if(b)for(var c=this,d=b.rows,e=c.options.classList,f=d.length,g=0;g<f;g++)domUtils.removeClasses(d[g],e)}),N.addListener(\"mousedown\",o),N.addListener(\"mouseup\",w),domUtils.on(N.body,\"dragstart\",function(a){w.call(N,\"dragstart\",a)}),N.addOutputRule(function(a){utils.each(a.getNodesByTagName(\"div\"),function(a){\"ue_tableDragLine\"==a.getAttr(\"id\")&&a.parentNode.removeChild(a)})});var k=0;N.addListener(\"mousedown\",function(){k=0}),N.addListener(\"tabkeydown\",function(){var a=this.selection.getRange(),b=a.getCommonAncestor(!0,!0),c=domUtils.findParentByTagName(b,\"table\");if(c){if(domUtils.findParentByTagName(b,\"caption\",!0)){var d=domUtils.getElementsByTagName(c,\"th td\");d&&d.length&&a.setStart(d[0],0).setCursor(!1,!0)}else{var d=domUtils.findParentByTagName(b,[\"td\",\"th\"],!0),f=Y(d);k=d.rowSpan>1?k:f.getCellInfo(d).rowIndex;var g=f.getTabNextCell(d,k);g?e(g)?a.setStart(g,0).setCursor(!1,!0):a.selectNodeContents(g).select():(N.fireEvent(\"saveScene\"),N.__hasEnterExecCommand=!0,this.execCommand(\"insertrownext\"),N.__hasEnterExecCommand=!1,a=this.selection.getRange(),a.setStart(c.rows[c.rows.length-1].cells[0],0).setCursor(),N.fireEvent(\"saveScene\"))}return!0}}),browser.ie&&N.addListener(\"selectionchange\",function(){m(this,!1,\"\",null)}),N.addListener(\"keydown\",function(a,b){var c=this,d=b.keyCode||b.which;if(8!=d&&46!=d){var e=!(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey);e&&_(domUtils.getElementsByTagName(c.body,\"td\"));var f=Z(c);f&&e&&f.clearSelected()}}),N.addListener(\"beforegetcontent\",function(){K(this,!1),browser.ie&&utils.each(this.document.getElementsByTagName(\"caption\"),function(a){domUtils.isEmptyNode(a)&&(a.innerHTML=\"&nbsp;\")})}),N.addListener(\"aftergetcontent\",function(){K(this,!0)}),N.addListener(\"getAllHtml\",function(){_(N.document.getElementsByTagName(\"td\"))}),N.addListener(\"fullscreenchanged\",function(a,b){if(!b){var c=this.body.offsetWidth/document.body.offsetWidth,d=domUtils.getElementsByTagName(this.body,\"table\");utils.each(d,function(a){if(a.offsetWidth<N.body.offsetWidth)return!1;var b=domUtils.getElementsByTagName(a,\"td\"),d=[];utils.each(b,function(a){d.push(a.offsetWidth)});for(var e,f=0;e=b[f];f++)e.setAttribute(\"width\",Math.floor(d[f]*c));a.setAttribute(\"width\",Math.floor(L(N,ja,$(N))))})}});var l=N.execCommand;N.execCommand=function(a,b){var c=this;a=a.toLowerCase();var d,f,g=Z(c),h=new dom.Range(c.document),i=c.commands[a]||UE.commands[a];if(i){if(!g||ka[a]||i.notNeedUndo||c.__hasEnterExecCommand)f=l.apply(c,arguments);else{c.__hasEnterExecCommand=!0,c.fireEvent(\"beforeexeccommand\",a),d=g.selectedTds;for(var j,k,m,n=-2,o=-2,p=0;m=d[p];p++)e(m)?h.setStart(m,0).setCursor(!1,!0):h.selectNode(m).select(!0),k=c.queryCommandState(a),j=c.queryCommandValue(a),k!=-1&&(n===k&&o===j||(c._ignoreContentChange=!0,f=l.apply(c,arguments),c._ignoreContentChange=!1),\nn=c.queryCommandState(a),o=c.queryCommandValue(a),domUtils.isEmptyBlock(m)&&domUtils.fillNode(c.document,m));h.setStart(d[0],0).shrinkBoundary(!0).setCursor(!1,!0),c.fireEvent(\"contentchange\"),c.fireEvent(\"afterexeccommand\",a),c.__hasEnterExecCommand=!1,c._selectionChange()}return f}}});var la},UE.UETable.prototype.sortTable=function(a,b){var c=this.table,d=c.rows,e=[],f=\"TH\"===d[0].cells[0].tagName,g=0;if(this.selectedTds.length){for(var h=this.cellsRange,i=h.endRowIndex+1,j=h.beginRowIndex;j<i;j++)e[j]=d[j];e.splice(0,h.beginRowIndex),g=h.endRowIndex+1===this.rowsNum?0:h.endRowIndex+1}else for(var j=0,i=d.length;j<i;j++)e[j]=d[j];var k={reversecurrent:function(a,b){return 1},orderbyasc:function(a,b){var c=a.innerText||a.textContent,d=b.innerText||b.textContent;return c.localeCompare(d)},reversebyasc:function(a,b){var c=a.innerHTML,d=b.innerHTML;return d.localeCompare(c)},orderbynum:function(a,b){var c=a[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/),d=b[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/);return c&&(c=+c[0]),d&&(d=+d[0]),(c||0)-(d||0)},reversebynum:function(a,b){var c=a[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/),d=b[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/);return c&&(c=+c[0]),d&&(d=+d[0]),(d||0)-(c||0)}};c.setAttribute(\"data-sort-type\",b&&\"string\"==typeof b&&k[b]?b:\"\"),f&&e.splice(0,1),e=utils.sort(e,function(c,d){var e;return e=b&&\"function\"==typeof b?b.call(this,c.cells[a],d.cells[a]):b&&\"number\"==typeof b?1:b&&\"string\"==typeof b&&k[b]?k[b].call(this,c.cells[a],d.cells[a]):k.orderbyasc.call(this,c.cells[a],d.cells[a])});for(var l=c.ownerDocument.createDocumentFragment(),m=0,i=e.length;m<i;m++)l.appendChild(e[m]);var n=c.getElementsByTagName(\"tbody\")[0];g?n.insertBefore(l,d[g-h.endRowIndex+h.beginRowIndex-1]):n.appendChild(l)},UE.plugins.tablesort=function(){var a=this,b=UE.UETable,c=function(a){return b.getUETable(a)},d=function(a){return b.getTableItemsByRange(a)};a.ready(function(){utils.cssRule(\"tablesort\",\"table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;   background-image:url(\"+a.options.themePath+a.options.theme+\"/images/sortable.png);}\",a.document),a.addListener(\"afterexeccommand\",function(a,b){\"mergeright\"!=b&&\"mergedown\"!=b&&\"mergecells\"!=b||this.execCommand(\"disablesort\")})}),UE.commands.sorttable={queryCommandState:function(){var a=this,b=d(a);if(!b.cell)return-1;for(var c,e=b.table,f=e.getElementsByTagName(\"td\"),g=0;c=f[g++];)if(1!=c.rowSpan||1!=c.colSpan)return-1;return 0},execCommand:function(a,b){var e=this,f=e.selection.getRange(),g=f.createBookmark(!0),h=d(e),i=h.cell,j=c(h.table),k=j.getCellInfo(i);j.sortTable(k.cellIndex,b),f.moveToBookmark(g);try{f.select()}catch(l){}}},UE.commands.enablesort=UE.commands.disablesort={queryCommandState:function(a){var b=d(this).table;if(b&&\"enablesort\"==a)for(var c=domUtils.getElementsByTagName(b,\"th td\"),e=0;e<c.length;e++)if(c[e].getAttribute(\"colspan\")>1||c[e].getAttribute(\"rowspan\")>1)return-1;return b?\"enablesort\"==a^\"sortEnabled\"!=b.getAttribute(\"data-sort\")?-1:0:-1},execCommand:function(a){var b=d(this).table;b.setAttribute(\"data-sort\",\"enablesort\"==a?\"sortEnabled\":\"sortDisabled\"),\"enablesort\"==a?domUtils.addClass(b,\"sortEnabled\"):domUtils.removeClasses(b,\"sortEnabled\")}}},UE.plugins.contextmenu=function(){var a=this;if(a.setOpt(\"enableContextMenu\",a.getOpt(\"enableContextMenu\")||!0),a.getOpt(\"enableContextMenu\")!==!1){var b,c=a.getLang(\"contextMenu\"),d=a.options.contextMenu||[{label:c.selectall,cmdName:\"selectall\"},{label:c.cleardoc,cmdName:\"cleardoc\",exec:function(){confirm(c.confirmclear)&&this.execCommand(\"cleardoc\")}},\"-\",{label:c.unlink,cmdName:\"unlink\"},\"-\",{group:c.paragraph,icon:\"justifyjustify\",subMenu:[{label:c.justifyleft,cmdName:\"justify\",value:\"left\"},{label:c.justifyright,cmdName:\"justify\",value:\"right\"},{label:c.justifycenter,cmdName:\"justify\",value:\"center\"},{label:c.justifyjustify,cmdName:\"justify\",value:\"justify\"}]},\"-\",{group:c.table,icon:\"table\",subMenu:[{label:c.inserttable,cmdName:\"inserttable\"},{label:c.deletetable,cmdName:\"deletetable\"},\"-\",{label:c.deleterow,cmdName:\"deleterow\"},{label:c.deletecol,cmdName:\"deletecol\"},{label:c.insertcol,cmdName:\"insertcol\"},{label:c.insertcolnext,cmdName:\"insertcolnext\"},{label:c.insertrow,cmdName:\"insertrow\"},{label:c.insertrownext,cmdName:\"insertrownext\"},\"-\",{label:c.insertcaption,cmdName:\"insertcaption\"},{label:c.deletecaption,cmdName:\"deletecaption\"},{label:c.inserttitle,cmdName:\"inserttitle\"},{label:c.deletetitle,cmdName:\"deletetitle\"},{label:c.inserttitlecol,cmdName:\"inserttitlecol\"},{label:c.deletetitlecol,cmdName:\"deletetitlecol\"},\"-\",{label:c.mergecells,cmdName:\"mergecells\"},{label:c.mergeright,cmdName:\"mergeright\"},{label:c.mergedown,cmdName:\"mergedown\"},\"-\",{label:c.splittorows,cmdName:\"splittorows\"},{label:c.splittocols,cmdName:\"splittocols\"},{label:c.splittocells,cmdName:\"splittocells\"},\"-\",{label:c.averageDiseRow,cmdName:\"averagedistributerow\"},{label:c.averageDisCol,cmdName:\"averagedistributecol\"},\"-\",{label:c.edittd,cmdName:\"edittd\",exec:function(){UE.ui.edittd&&new UE.ui.edittd(this),this.getDialog(\"edittd\").open()}},{label:c.edittable,cmdName:\"edittable\",exec:function(){UE.ui.edittable&&new UE.ui.edittable(this),this.getDialog(\"edittable\").open()}},{label:c.setbordervisible,cmdName:\"setbordervisible\"}]},{group:c.tablesort,icon:\"tablesort\",subMenu:[{label:c.enablesort,cmdName:\"enablesort\"},{label:c.disablesort,cmdName:\"disablesort\"},\"-\",{label:c.reversecurrent,cmdName:\"sorttable\",value:\"reversecurrent\"},{label:c.orderbyasc,cmdName:\"sorttable\",value:\"orderbyasc\"},{label:c.reversebyasc,cmdName:\"sorttable\",value:\"reversebyasc\"},{label:c.orderbynum,cmdName:\"sorttable\",value:\"orderbynum\"},{label:c.reversebynum,cmdName:\"sorttable\",value:\"reversebynum\"}]},{group:c.borderbk,icon:\"borderBack\",subMenu:[{label:c.setcolor,cmdName:\"interlacetable\",exec:function(){this.execCommand(\"interlacetable\")}},{label:c.unsetcolor,cmdName:\"uninterlacetable\",exec:function(){this.execCommand(\"uninterlacetable\")}},{label:c.setbackground,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:!0,colorList:[\"#bbb\",\"#ccc\"]})}},{label:c.unsetbackground,cmdName:\"cleartablebackground\",exec:function(){this.execCommand(\"cleartablebackground\")}},{label:c.redandblue,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:!0,colorList:[\"red\",\"blue\"]})}},{label:c.threecolorgradient,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:!0,colorList:[\"#aaa\",\"#bbb\",\"#ccc\"]})}}]},{group:c.aligntd,icon:\"aligntd\",subMenu:[{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"bottom\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"bottom\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"bottom\"}}]},{group:c.aligntable,icon:\"aligntable\",subMenu:[{cmdName:\"tablealignment\",className:\"left\",label:c.tableleft,value:\"left\"},{cmdName:\"tablealignment\",className:\"center\",label:c.tablecenter,value:\"center\"},{cmdName:\"tablealignment\",className:\"right\",label:c.tableright,value:\"right\"}]},\"-\",{label:c.insertparagraphbefore,cmdName:\"insertparagraph\",value:!0},{label:c.insertparagraphafter,cmdName:\"insertparagraph\"},{label:c.copy,cmdName:\"copy\"},{label:c.paste,cmdName:\"paste\"}];if(d.length){var e=UE.ui.uiUtils;a.addListener(\"contextmenu\",function(f,g){var h=e.getViewportOffsetByEvent(g);a.fireEvent(\"beforeselectionchange\"),b&&b.destroy();for(var i,j=0,k=[];i=d[j];j++){var l;!function(b){function d(){switch(b.icon){case\"table\":return a.getLang(\"contextMenu.table\");case\"justifyjustify\":return a.getLang(\"contextMenu.paragraph\");case\"aligntd\":return a.getLang(\"contextMenu.aligntd\");case\"aligntable\":return a.getLang(\"contextMenu.aligntable\");case\"tablesort\":return c.tablesort;case\"borderBack\":return c.borderbk;default:return\"\"}}if(\"-\"==b)(l=k[k.length-1])&&\"-\"!==l&&k.push(\"-\");else if(b.hasOwnProperty(\"group\")){for(var e,f=0,g=[];e=b.subMenu[f];f++)!function(b){\"-\"==b?(l=g[g.length-1])&&\"-\"!==l?g.push(\"-\"):g.splice(g.length-1):(a.commands[b.cmdName]||UE.commands[b.cmdName]||b.query)&&(b.query?b.query():a.queryCommandState(b.cmdName))>-1&&g.push({label:b.label||a.getLang(\"contextMenu.\"+b.cmdName+(b.value||\"\"))||\"\",className:\"edui-for-\"+b.cmdName+(b.className?\" edui-for-\"+b.cmdName+\"-\"+b.className:\"\"),onclick:b.exec?function(){b.exec.call(a)}:function(){a.execCommand(b.cmdName,b.value)}})}(e);g.length&&k.push({label:d(),className:\"edui-for-\"+b.icon,subMenu:{items:g,editor:a}})}else(a.commands[b.cmdName]||UE.commands[b.cmdName]||b.query)&&(b.query?b.query.call(a):a.queryCommandState(b.cmdName))>-1&&k.push({label:b.label||a.getLang(\"contextMenu.\"+b.cmdName),className:\"edui-for-\"+(b.icon?b.icon:b.cmdName+(b.value||\"\")),onclick:b.exec?function(){b.exec.call(a)}:function(){a.execCommand(b.cmdName,b.value)}})}(i)}if(\"-\"==k[k.length-1]&&k.pop(),b=new UE.ui.Menu({items:k,className:\"edui-contextmenu\",editor:a}),b.render(),b.showAt(h),a.fireEvent(\"aftershowcontextmenu\",b),domUtils.preventDefault(g),browser.ie){var m;try{m=a.selection.getNative().createRange()}catch(n){return}if(m.item){var o=new dom.Range(a.document);o.selectNode(m.item(0)).select(!0,!0)}}}),a.addListener(\"aftershowcontextmenu\",function(b,c){if(a.zeroclipboard){var d=c.items;for(var e in d)\"edui-for-copy\"==d[e].className&&a.zeroclipboard.clip(d[e].getDom())}})}}},UE.plugins.shortcutmenu=function(){var a,b=this,c=b.options.shortcutMenu||[];c.length&&(b.addListener(\"contextmenu mouseup\",function(b,d){var e=this,f={type:b,target:d.target||d.srcElement,screenX:d.screenX,screenY:d.screenY,clientX:d.clientX,clientY:d.clientY};if(setTimeout(function(){var d=e.selection.getRange();d.collapsed!==!1&&\"contextmenu\"!=b||(a||(a=new baidu.editor.ui.ShortCutMenu({editor:e,items:c,theme:e.options.theme,className:\"edui-shortcutmenu\"}),a.render(),e.fireEvent(\"afterrendershortcutmenu\",a)),a.show(f,!!UE.plugins.contextmenu))}),\"contextmenu\"==b&&(domUtils.preventDefault(d),browser.ie9below)){var g;try{g=e.selection.getNative().createRange()}catch(d){return}if(g.item){var h=new dom.Range(e.document);h.selectNode(g.item(0)).select(!0,!0)}}}),b.addListener(\"keydown\",function(b){\"keydown\"==b&&a&&!a.isHidden&&a.hide()}))},UE.plugins.basestyle=function(){var a={bold:[\"strong\",\"b\"],italic:[\"em\",\"i\"],subscript:[\"sub\"],superscript:[\"sup\"]},b=function(a,b){return domUtils.filterNodeList(a.selection.getStartElementPath(),b)},c=this;c.addshortcutkey({Bold:\"ctrl+66\",Italic:\"ctrl+73\",Underline:\"ctrl+85\"}),c.addInputRule(function(a){utils.each(a.getNodesByTagName(\"b i\"),function(a){switch(a.tagName){case\"b\":a.tagName=\"strong\";break;case\"i\":a.tagName=\"em\"}})});for(var d in a)!function(a,d){c.commands[a]={execCommand:function(a){var e=c.selection.getRange(),f=b(this,d);if(e.collapsed){if(f){var g=c.document.createTextNode(\"\");e.insertNode(g).removeInlineStyle(d),e.setStartBefore(g),domUtils.remove(g)}else{var h=e.document.createElement(d[0]);\"superscript\"!=a&&\"subscript\"!=a||(g=c.document.createTextNode(\"\"),e.insertNode(g).removeInlineStyle([\"sub\",\"sup\"]).setStartBefore(g).collapse(!0)),e.insertNode(h).setStart(h,0)}e.collapse(!0)}else\"superscript\"!=a&&\"subscript\"!=a||f&&f.tagName.toLowerCase()==a||e.removeInlineStyle([\"sub\",\"sup\"]),f?e.removeInlineStyle(d):e.applyInlineStyle(d[0]);e.select()},queryCommandState:function(){return b(this,d)?1:0}}}(d,a[d])},UE.plugins.elementpath=function(){var a,b,c=this;c.setOpt(\"elementPathEnabled\",!0),c.options.elementPathEnabled&&(c.commands.elementpath={execCommand:function(d,e){var f=b[e],g=c.selection.getRange();a=1*e,g.selectNode(f).select()},queryCommandValue:function(){var c=[].concat(this.selection.getStartElementPath()).reverse(),d=[];b=c;for(var e,f=0;e=c[f];f++)if(3!=e.nodeType){var g=e.tagName.toLowerCase();if(\"img\"==g&&e.getAttribute(\"anchorname\")&&(g=\"anchor\"),d[f]=g,a==f){a=-1;break}}return d}})},UE.plugins.formatmatch=function(){function a(f,g){function h(a){return m&&a.selectNode(m),a.applyInlineStyle(d[d.length-1].tagName,null,d)}if(browser.webkit)var i=\"IMG\"==g.target.tagName?g.target:null;c.undoManger&&c.undoManger.save();var j=c.selection.getRange(),k=i||j.getClosedNode();if(b&&k&&\"IMG\"==k.tagName)k.style.cssText+=\";float:\"+(b.style.cssFloat||b.style.styleFloat||\"none\")+\";display:\"+(b.style.display||\"inline\"),b=null;else if(!b){var l=j.collapsed;if(l){var m=c.document.createTextNode(\"match\");j.insertNode(m).select()}c.__hasEnterExecCommand=!0;var n=c.options.removeFormatAttributes;c.options.removeFormatAttributes=\"\",c.execCommand(\"removeformat\"),c.options.removeFormatAttributes=n,c.__hasEnterExecCommand=!1,j=c.selection.getRange(),d.length&&h(j),m&&j.setStartBefore(m).collapse(!0),j.select(),m&&domUtils.remove(m)}c.undoManger&&c.undoManger.save(),c.removeListener(\"mouseup\",a),e=0}var b,c=this,d=[],e=0;c.addListener(\"reset\",function(){d=[],e=0}),c.commands.formatmatch={execCommand:function(f){if(e)return e=0,d=[],void c.removeListener(\"mouseup\",a);var g=c.selection.getRange();if(b=g.getClosedNode(),!b||\"IMG\"!=b.tagName){g.collapse(!0).shrinkBoundary();var h=g.startContainer;d=domUtils.findParents(h,!0,function(a){return!domUtils.isBlockElm(a)&&1==a.nodeType});for(var i,j=0;i=d[j];j++)if(\"A\"==i.tagName){d.splice(j,1);break}}c.addListener(\"mouseup\",a),e=1},queryCommandState:function(){return e},notNeedUndo:1}},UE.plugin.register(\"searchreplace\",function(){function a(a){var b=3==a.nodeType?a.nodeValue:a[browser.ie?\"innerText\":\"textContent\"];return b.replace(domUtils.fillChar,\"\")}function b(a,b,c){var d,e=b.searchStr,f=new RegExp(e,\"g\"+(b.casesensitive?\"\":\"i\"));if(b.dir==-1){if(a=a.substr(0,c),a=a.split(\"\").reverse().join(\"\"),e=e.split(\"\").reverse().join(\"\"),d=f.exec(a))return c-d.index-e.length}else if(a=a.substr(c),d=f.exec(a))return d.index+c;return-1}function c(c,d,e){var f,g,i=e.all||1==e.dir?\"getNextDomNode\":\"getPreDomNode\";domUtils.isBody(c)&&(c=c.firstChild);for(var j=1;c;){if(f=a(c),g=b(f,e,d),j=0,g!=-1)return{node:c,index:g};for(c=domUtils[i](c);c&&h[c.nodeName.toLowerCase()];)c=domUtils[i](c,!0);c&&(d=e.dir==-1?a(c).length:0)}}function d(b,c,e){for(var f,g=0,h=b.firstChild,i=0;h;){if(3==h.nodeType){if(i=a(h).replace(/(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\"\").length,g+=i,g>=c)return{node:h,index:i-(g-c)}}else if(!dtd.$empty[h.tagName]&&(i=a(h).replace(/(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\"\").length,g+=i,g>=c&&(f=d(h,i-(g-c),e))))return f;h=domUtils.getNextDomNode(h)}}function e(b,e){var g,h=i||b.selection.getRange(),j=e.searchStr,k=b.document.createElement(\"span\");if(k.innerHTML=\"$$ueditor_searchreplace_key$$\",h.shrinkBoundary(!0),!h.collapsed){h.select();var l=b.selection.getText();if(new RegExp(\"^\"+e.searchStr+\"$\",e.casesensitive?\"\":\"i\").test(l)){if(void 0!=e.replaceStr)return f(h,e.replaceStr),h.select(),!0;h.collapse(e.dir==-1)}}h.insertNode(k),h.enlargeToBlockElm(!0),g=h.startContainer;var m=a(g).indexOf(\"$$ueditor_searchreplace_key$$\");h.setStartBefore(k),domUtils.remove(k);var n=c(g,m,e);if(n){var o=d(n.node,n.index,j),p=d(n.node,n.index+j.length,j);return h.setStart(o.node,o.index).setEnd(p.node,p.index),void 0!==e.replaceStr&&f(h,e.replaceStr),h.select(),!0}h.setCursor()}function f(a,b){b=g.document.createTextNode(b),a.deleteContents().insertNode(b)}var g=this,h={table:1,tbody:1,tr:1,ol:1,ul:1},i=null;return{commands:{searchreplace:{execCommand:function(a,b){utils.extend(b,{all:!1,casesensitive:!1,dir:1},!0);var c=0;if(b.all){i=null;var d=g.selection.getRange(),f=g.body.firstChild;for(f&&1==f.nodeType?(d.setStart(f,0),d.shrinkBoundary(!0)):3==f.nodeType&&d.setStartBefore(f),d.collapse(!0).select(!0),void 0!==b.replaceStr&&g.fireEvent(\"saveScene\");e(this,b);)c++,i=g.selection.getRange(),i.collapse(b.dir==-1);c&&g.fireEvent(\"saveScene\")}else void 0!==b.replaceStr&&g.fireEvent(\"saveScene\"),e(this,b)&&(c++,i=g.selection.getRange(),i.collapse(b.dir==-1)),c&&g.fireEvent(\"saveScene\");return c},notNeedUndo:1}},bindEvents:{clearlastSearchResult:function(){i=null}}}}),UE.plugins.customstyle=function(){var a=this;a.setOpt({customstyle:[{tag:\"h1\",name:\"tc\",style:\"font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;\"},{tag:\"h1\",name:\"tl\",style:\"font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;margin:0 0 10px 0;\"},{tag:\"span\",name:\"im\",style:\"font-size:16px;font-style:italic;font-weight:bold;line-height:18px;\"},{tag:\"span\",name:\"hi\",style:\"font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;\"}]}),a.commands.customstyle={execCommand:function(a,b){var c,d,e=this,f=b.tag,g=domUtils.findParent(e.selection.getStart(),function(a){return a.getAttribute(\"label\")},!0),h={};for(var i in b)void 0!==b[i]&&(h[i]=b[i]);if(delete h.tag,g&&g.getAttribute(\"label\")==b.label){if(c=this.selection.getRange(),d=c.createBookmark(),c.collapsed)if(dtd.$block[g.tagName]){var j=e.document.createElement(\"p\");domUtils.moveChild(g,j),g.parentNode.insertBefore(j,g),domUtils.remove(g)}else domUtils.remove(g,!0);else{var k=domUtils.getCommonAncestor(d.start,d.end),l=domUtils.getElementsByTagName(k,f);new RegExp(f,\"i\").test(k.tagName)&&l.push(k);for(var m,n=0;m=l[n++];)if(m.getAttribute(\"label\")==b.label){var o=domUtils.getPosition(m,d.start),p=domUtils.getPosition(m,d.end);if((o&domUtils.POSITION_FOLLOWING||o&domUtils.POSITION_CONTAINS)&&(p&domUtils.POSITION_PRECEDING||p&domUtils.POSITION_CONTAINS)&&dtd.$block[f]){var j=e.document.createElement(\"p\");domUtils.moveChild(m,j),m.parentNode.insertBefore(j,m)}domUtils.remove(m,!0)}g=domUtils.findParent(k,function(a){return a.getAttribute(\"label\")==b.label},!0),g&&domUtils.remove(g,!0)}c.moveToBookmark(d).select()}else if(dtd.$block[f]){if(this.execCommand(\"paragraph\",f,h,\"customstyle\"),c=e.selection.getRange(),!c.collapsed){c.collapse(),g=domUtils.findParent(e.selection.getStart(),function(a){return a.getAttribute(\"label\")==b.label},!0);var q=e.document.createElement(\"p\");domUtils.insertAfter(g,q),domUtils.fillNode(e.document,q),c.setStart(q,0).setCursor()}}else{if(c=e.selection.getRange(),c.collapsed)return g=e.document.createElement(f),domUtils.setAttributes(g,h),void c.insertNode(g).setStart(g,0).setCursor();d=c.createBookmark(),c.applyInlineStyle(f,h).moveToBookmark(d).select()}},queryCommandValue:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),function(a){return a.getAttribute(\"label\")});return a?a.getAttribute(\"label\"):\"\"}},a.addListener(\"keyup\",function(b,c){var d=c.keyCode||c.which;if(32==d||13==d){var e=a.selection.getRange();if(e.collapsed){var f=domUtils.findParent(a.selection.getStart(),function(a){return a.getAttribute(\"label\")},!0);if(f&&dtd.$block[f.tagName]&&domUtils.isEmptyNode(f)){var g=a.document.createElement(\"p\");domUtils.insertAfter(f,g),domUtils.fillNode(a.document,g),domUtils.remove(f),e.setStart(g,0).setCursor()}}}})},UE.plugins.catchremoteimage=function(){var me=this,ajax=UE.ajax;me.options.catchRemoteImageEnable!==!1&&(me.setOpt({catchRemoteImageEnable:!1}),me.addListener(\"afterpaste\",function(){me.fireEvent(\"catchRemoteImage\")}),me.addListener(\"catchRemoteImage\",function(){function catchremoteimage(a,b){var c=utils.serializeParam(me.queryCommandValue(\"serverparam\"))||\"\",d=utils.formatUrl(catcherActionUrl+(catcherActionUrl.indexOf(\"?\")==-1?\"?\":\"&\")+c),e=utils.isCrossDomainUrl(d),f={method:\"POST\",dataType:e?\"jsonp\":\"\",timeout:6e4,onsuccess:b.success,onerror:b.error};f[catcherFieldName]=a,ajax.request(d,f)}for(var catcherLocalDomain=me.getOpt(\"catcherLocalDomain\"),catcherActionUrl=me.getActionUrl(me.getOpt(\"catcherActionName\")),catcherUrlPrefix=me.getOpt(\"catcherUrlPrefix\"),catcherFieldName=me.getOpt(\"catcherFieldName\"),remoteImages=[],loadingIMG=me.options.themePath+me.options.theme+\"/images/spacer.gif\",imgs=me.document.querySelectorAll('[style*=\"url\"],img'),test=function(a,b){if(a.indexOf(location.host)!=-1||/(^\\.)|(^\\/)/.test(a))return!0;if(b)for(var c,d=0;c=b[d++];)if(a.indexOf(c)!==-1)return!0;return!1},i=0,ci;ci=imgs[i++];)if(!ci.getAttribute(\"word_img\"))if(\"IMG\"==ci.nodeName){var src=ci.getAttribute(\"_src\")||ci.src||\"\";/^(https?|ftp):/i.test(src)&&!test(src,catcherLocalDomain)&&(remoteImages.push(src),domUtils.setAttributes(ci,{\"class\":\"loadingclass\",_src:src,src:loadingIMG}))}else{var backgroundImageurl=ci.style.cssText.replace(/.*\\s?url\\([\\'\\\"]?/,\"\").replace(/[\\'\\\"]?\\).*/,\"\");/^(https?|ftp):/i.test(backgroundImageurl)&&!test(backgroundImageurl,catcherLocalDomain)&&(remoteImages.push(backgroundImageurl),ci.style.cssText=ci.style.cssText.replace(backgroundImageurl,loadingIMG),domUtils.setAttributes(ci,{\"data-background\":backgroundImageurl}))}remoteImages.length&&catchremoteimage(remoteImages,{success:function(r){try{var info=void 0!==r.state?r:eval(\"(\"+r.responseText+\")\")}catch(e){return}var i,j,ci,cj,oldSrc,newSrc,list=info.list,catchFailList=[],catchSuccessList=[],failIMG=me.options.themePath+me.options.theme+\"/images/img-cracked.png\";for(i=0;ci=imgs[i++];)for(oldSrc=ci.getAttribute(\"_src\")||ci.src||\"\",oldBgIMG=ci.getAttribute(\"data-background\")||\"\",j=0;cj=list[j++];){if(oldSrc==cj.source&&\"SUCCESS\"==cj.state){newSrc=catcherUrlPrefix+cj.url,domUtils.removeClasses(ci,\"loadingclass\"),domUtils.setAttributes(ci,{src:newSrc,_src:newSrc,\"data-catchResult\":\"img_catchSuccess\"}),catchSuccessList.push(ci);break}if(oldSrc==cj.source&&\"FAIL\"==cj.state){domUtils.removeClasses(ci,\"loadingclass\"),domUtils.setAttributes(ci,{src:failIMG,_src:failIMG,\"data-catchResult\":\"img_catchFail\"}),catchFailList.push(ci);break}if(oldBgIMG==cj.source&&\"SUCCESS\"==cj.state){newBgIMG=catcherUrlPrefix+cj.url,ci.style.cssText=ci.style.cssText.replace(loadingIMG,newBgIMG),domUtils.removeAttributes(ci,\"data-background\"),domUtils.setAttributes(ci,{\"data-catchResult\":\"img_catchSuccess\"}),catchSuccessList.push(ci);break}if(oldBgIMG==cj.source&&\"FAIL\"==cj.state){ci.style.cssText=ci.style.cssText.replace(loadingIMG,failIMG),domUtils.removeAttributes(ci,\"data-background\"),domUtils.setAttributes(ci,{\"data-catchResult\":\"img_catchFail\"}),catchFailList.push(ci);break}}me.fireEvent(\"catchremotesuccess\",catchSuccessList,catchFailList)},error:function(){me.fireEvent(\"catchremoteerror\")}})}))},UE.plugin.register(\"snapscreen\",function(){function getLocation(a){var b,c=document.createElement(\"a\"),d=utils.serializeParam(me.queryCommandValue(\"serverparam\"))||\"\";return c.href=a,browser.ie&&(c.href=c.href),b=c.search,d&&(b=b+(b.indexOf(\"?\")==-1?\"?\":\"&\")+d,b=b.replace(/[&]+/gi,\"&\")),{port:c.port,hostname:c.hostname,path:c.pathname+b||+c.hash}}var me=this,snapplugin;return{commands:{snapscreen:{execCommand:function(cmd){function onSuccess(rs){try{if(rs=eval(\"(\"+rs+\")\"),\"SUCCESS\"==rs.state){var opt=me.options;me.execCommand(\"insertimage\",{src:opt.snapscreenUrlPrefix+rs.url,_src:opt.snapscreenUrlPrefix+rs.url,alt:rs.title||\"\",floatStyle:opt.snapscreenImgAlign})}else alert(rs.state)}catch(e){alert(lang.callBackErrorMsg)}}var url,local,res,lang=me.getLang(\"snapScreen_plugin\");if(!snapplugin){var container=me.container,doc=me.container.ownerDocument||me.container.document;snapplugin=doc.createElement(\"object\");try{snapplugin.type=\"application/x-pluginbaidusnap\"}catch(e){return}snapplugin.style.cssText=\"position:absolute;left:-9999px;width:0;height:0;\",snapplugin.setAttribute(\"width\",\"0\"),snapplugin.setAttribute(\"height\",\"0\"),container.appendChild(snapplugin)}url=me.getActionUrl(me.getOpt(\"snapscreenActionName\")),local=getLocation(url),setTimeout(function(){try{res=snapplugin.saveSnapshot(local.hostname,local.path,local.port)}catch(a){return void me.ui._dialogs.snapscreenDialog.open()}onSuccess(res)},50)},queryCommandState:function(){return navigator.userAgent.indexOf(\"Windows\",0)!=-1?0:-1}}}}}),UE.commands.insertparagraph={execCommand:function(a,b){for(var c,d=this,e=d.selection.getRange(),f=e.startContainer;f&&!domUtils.isBody(f);)c=f,f=f.parentNode;if(c){var g=d.document.createElement(\"p\");b?c.parentNode.insertBefore(g,c):c.parentNode.insertBefore(g,c.nextSibling),domUtils.fillNode(d.document,g),e.setStart(g,0).setCursor(!1,!0)}}},UE.plugin.register(\"webapp\",function(){function a(a,c){return c?'<iframe class=\"edui-faked-webapp\" title=\"'+a.title+'\" '+(a.align&&!a.cssfloat?'align=\"'+a.align+'\"':\"\")+(a.cssfloat?'style=\"float:'+a.cssfloat+'\"':\"\")+'width=\"'+a.width+'\" height=\"'+a.height+'\"  scrolling=\"no\" frameborder=\"0\" src=\"'+a.url+'\" logo_url = \"'+a.logo+'\"></iframe>':'<img title=\"'+a.title+'\" width=\"'+a.width+'\" height=\"'+a.height+'\" src=\"'+b.options.UEDITOR_HOME_URL+'themes/default/images/spacer.gif\" _logo_url=\"'+a.logo+'\" style=\"background:url('+a.logo+') no-repeat center center; border:1px solid gray;\" class=\"edui-faked-webapp\" _url=\"'+a.url+'\" '+(a.align&&!a.cssfloat?'align=\"'+a.align+'\"':\"\")+(a.cssfloat?'style=\"float:'+a.cssfloat+'\"':\"\")+\"/>\"}var b=this;return{outputRule:function(b){utils.each(b.getNodesByTagName(\"img\"),function(b){var c;if(\"edui-faked-webapp\"==b.getAttr(\"class\")){c=a({title:b.getAttr(\"title\"),width:b.getAttr(\"width\"),height:b.getAttr(\"height\"),align:b.getAttr(\"align\"),cssfloat:b.getStyle(\"float\"),url:b.getAttr(\"_url\"),logo:b.getAttr(\"_logo_url\")},!0);var d=UE.uNode.createElement(c);b.parentNode.replaceChild(d,b)}})},inputRule:function(b){utils.each(b.getNodesByTagName(\"iframe\"),function(b){if(\"edui-faked-webapp\"==b.getAttr(\"class\")){var c=UE.uNode.createElement(a({title:b.getAttr(\"title\"),width:b.getAttr(\"width\"),height:b.getAttr(\"height\"),align:b.getAttr(\"align\"),cssfloat:b.getStyle(\"float\"),url:b.getAttr(\"src\"),logo:b.getAttr(\"logo_url\")}));b.parentNode.replaceChild(c,b)}})},commands:{webapp:{execCommand:function(b,c){var d=this,e=a(utils.extend(c,{align:\"none\"}),!1);d.execCommand(\"inserthtml\",e)},queryCommandState:function(){var a=this,b=a.selection.getRange().getClosedNode(),c=b&&\"edui-faked-webapp\"==b.className;return c?1:0}}}}}),UE.plugins.template=function(){UE.commands.template={execCommand:function(a,b){b.html&&this.execCommand(\"inserthtml\",b.html)}},this.addListener(\"click\",function(a,b){var c=b.target||b.srcElement,d=this.selection.getRange(),e=domUtils.findParent(c,function(a){if(a.className&&domUtils.hasClass(a,\"ue_t\"))return a},!0);e&&d.selectNode(e).shrinkBoundary().select()}),this.addListener(\"keydown\",function(a,b){var c=this.selection.getRange();if(!c.collapsed&&!(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)){var d=domUtils.findParent(c.startContainer,function(a){if(a.className&&domUtils.hasClass(a,\"ue_t\"))return a},!0);d&&domUtils.removeClasses(d,[\"ue_t\"])}})},UE.plugin.register(\"music\",function(){function a(a,c,d,e,f,g){return g?'<embed type=\"application/x-shockwave-flash\" class=\"edui-faked-music\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" src=\"'+a+'\" width=\"'+c+'\" height=\"'+d+'\" '+(e&&!f?'align=\"'+e+'\"':\"\")+(f?'style=\"float:'+f+'\"':\"\")+' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >':\"<img \"+(e&&!f?'align=\"'+e+'\"':\"\")+(f?'style=\"float:'+f+'\"':\"\")+' width=\"'+c+'\" height=\"'+d+'\" _url=\"'+a+'\" class=\"edui-faked-music\" src=\"'+b.options.langPath+b.options.lang+'/images/music.png\" />'}var b=this;return{outputRule:function(b){utils.each(b.getNodesByTagName(\"img\"),function(b){var c;if(\"edui-faked-music\"==b.getAttr(\"class\")){var d=b.getStyle(\"float\"),e=b.getAttr(\"align\");c=a(b.getAttr(\"_url\"),b.getAttr(\"width\"),b.getAttr(\"height\"),e,d,!0);var f=UE.uNode.createElement(c);b.parentNode.replaceChild(f,b)}})},inputRule:function(b){utils.each(b.getNodesByTagName(\"embed\"),function(b){if(\"edui-faked-music\"==b.getAttr(\"class\")){var c=b.getStyle(\"float\"),d=b.getAttr(\"align\");html=a(b.getAttr(\"src\"),b.getAttr(\"width\"),b.getAttr(\"height\"),d,c,!1);var e=UE.uNode.createElement(html);b.parentNode.replaceChild(e,b)}})},commands:{music:{execCommand:function(b,c){var d=this,e=a(c.url,c.width||400,c.height||95,\"none\",!1);d.execCommand(\"inserthtml\",e)},queryCommandState:function(){var a=this,b=a.selection.getRange().getClosedNode(),c=b&&\"edui-faked-music\"==b.className;return c?1:0}}}}}),UE.plugin.register(\"autoupload\",function(){function a(a,b){var c,d,e,f,g,h,i,j,k=b,l=/image\\/\\w+/i.test(a.type)?\"image\":\"file\",m=\"loading_\"+(+new Date).toString(36);if(c=k.getOpt(l+\"FieldName\"),d=k.getOpt(l+\"UrlPrefix\"),e=k.getOpt(l+\"MaxSize\"),f=k.getOpt(l+\"AllowFiles\"),g=k.getActionUrl(k.getOpt(l+\"ActionName\")),i=function(a){var b=k.document.getElementById(m);b&&domUtils.remove(b),k.fireEvent(\"showmessage\",{id:m,content:a,type:\"error\",timeout:4e3})},\"image\"==l?(h='<img class=\"loadingclass\" id=\"'+m+'\" src=\"'+k.options.themePath+k.options.theme+'/images/spacer.gif\">',j=function(a){var b=d+a.url,c=k.document.getElementById(m);c&&(domUtils.removeClasses(c,\"loadingclass\"),c.setAttribute(\"src\",b),c.setAttribute(\"_src\",b),c.setAttribute(\"alt\",a.original||\"\"),c.removeAttribute(\"id\"),k.trigger(\"contentchange\",c))}):(h='<p><img class=\"loadingclass\" id=\"'+m+'\" src=\"'+k.options.themePath+k.options.theme+'/images/spacer.gif\"></p>',j=function(a){var b=d+a.url,c=k.document.getElementById(m),e=k.selection.getRange(),f=e.createBookmark();e.selectNode(c).select(),k.execCommand(\"insertfile\",{url:b}),e.moveToBookmark(f).select()}),k.execCommand(\"inserthtml\",h),!k.getOpt(l+\"ActionName\"))return void i(k.getLang(\"autoupload.errorLoadConfig\"));if(a.size>e)return void i(k.getLang(\"autoupload.exceedSizeError\"));var n=a.name?a.name.substr(a.name.lastIndexOf(\".\")):\"\";if(n&&\"image\"!=l||f&&(f.join(\"\")+\".\").indexOf(n.toLowerCase()+\".\")==-1)return void i(k.getLang(\"autoupload.exceedTypeError\"));var o=new XMLHttpRequest,p=new FormData,q=utils.serializeParam(k.queryCommandValue(\"serverparam\"))||\"\",r=utils.formatUrl(g+(g.indexOf(\"?\")==-1?\"?\":\"&\")+q);p.append(c,a,a.name||\"blob.\"+a.type.substr(\"image/\".length)),p.append(\"type\",\"ajax\"),o.open(\"post\",r,!0),o.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),o.addEventListener(\"load\",function(a){try{var b=new Function(\"return \"+utils.trim(a.target.response))();\"SUCCESS\"==b.state&&b.url?j(b):i(b.state)}catch(c){i(k.getLang(\"autoupload.loadError\"))}}),o.send(p)}function b(a){return a.clipboardData&&a.clipboardData.items&&1==a.clipboardData.items.length&&/^image\\//.test(a.clipboardData.items[0].type)?a.clipboardData.items:null}function c(a){return a.dataTransfer&&a.dataTransfer.files?a.dataTransfer.files:null}return{outputRule:function(a){utils.each(a.getNodesByTagName(\"img\"),function(a){/\\b(loaderrorclass)|(bloaderrorclass)\\b/.test(a.getAttr(\"class\"))&&a.parentNode.removeChild(a)}),utils.each(a.getNodesByTagName(\"p\"),function(a){/\\bloadpara\\b/.test(a.getAttr(\"class\"))&&a.parentNode.removeChild(a)})},bindEvents:{defaultOptions:{enableDragUpload:!0,enablePasteUpload:!0},ready:function(d){var e=this;if(window.FormData&&window.FileReader){var f=function(d){var f,g=!1;if(f=\"paste\"==d.type?b(d):c(d)){for(var h,i=f.length;i--;)h=f[i],h.getAsFile&&(h=h.getAsFile()),h&&h.size>0&&(a(h,e),g=!0);g&&d.preventDefault()}};e.getOpt(\"enablePasteUpload\")!==!1&&domUtils.on(e.body,\"paste \",f),e.getOpt(\"enableDragUpload\")!==!1?(domUtils.on(e.body,\"drop\",f),domUtils.on(e.body,\"dragover\",function(a){\"Files\"==a.dataTransfer.types[0]&&a.preventDefault()})):browser.gecko&&domUtils.on(e.body,\"drop\",function(a){c(a)&&a.preventDefault()}),utils.cssRule(\"loading\",\".loadingclass{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-left:1px;height: 22px;width: 22px;}\\n.loaderrorclass{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\",this.document);\n}}}}}),UE.plugin.register(\"autosave\",function(){function a(a){var f;if(!(new Date-c<d)){if(!a.hasContents())return void(e&&b.removePreferences(e));c=new Date,a._saveFlag=null,f=b.body.innerHTML,a.fireEvent(\"beforeautosave\",{content:f})!==!1&&(b.setPreferences(e,f),a.fireEvent(\"afterautosave\",{content:f}))}}var b=this,c=new Date,d=20,e=null;return{defaultOptions:{saveInterval:500,enableAutoSave:!0},bindEvents:{ready:function(){var a=\"-drafts-data\",c=null;c=b.key?b.key+a:(b.container.parentNode.id||\"ue-common\")+a,e=(location.protocol+location.host+location.pathname).replace(/[.:\\/]/g,\"_\")+c},contentchange:function(){b.getOpt(\"enableAutoSave\")&&e&&(b._saveFlag&&window.clearTimeout(b._saveFlag),b.options.saveInterval>0?b._saveFlag=window.setTimeout(function(){a(b)},b.options.saveInterval):a(b))}},commands:{clearlocaldata:{execCommand:function(a,c){e&&b.getPreferences(e)&&b.removePreferences(e)},notNeedUndo:!0,ignoreContentChange:!0},getlocaldata:{execCommand:function(a,c){return e?b.getPreferences(e)||\"\":\"\"},notNeedUndo:!0,ignoreContentChange:!0},drafts:{execCommand:function(a,c){e&&(b.body.innerHTML=b.getPreferences(e)||\"<p>\"+domUtils.fillHtml+\"</p>\",b.focus(!0))},queryCommandState:function(){return e?null===b.getPreferences(e)?-1:0:-1},notNeedUndo:!0,ignoreContentChange:!0}}}}),UE.plugin.register(\"charts\",function(){function a(a){var b=null,c=0;if(a.rows.length<2)return!1;if(a.rows[0].cells.length<2)return!1;b=a.rows[0].cells,c=b.length;for(var d,e=0;d=b[e];e++)if(\"th\"!==d.tagName.toLowerCase())return!1;for(var f,e=1;f=a.rows[e];e++){if(f.cells.length!=c)return!1;if(\"th\"!==f.cells[0].tagName.toLowerCase())return!1;for(var d,g=1;d=f.cells[g];g++){var h=utils.trim(d.innerText||d.textContent||\"\");if(h=h.replace(new RegExp(UE.dom.domUtils.fillChar,\"g\"),\"\").replace(/^\\s+|\\s+$/g,\"\"),!/^\\d*\\.?\\d+$/.test(h))return!1}}return!0}var b=this;return{bindEvents:{chartserror:function(){}},commands:{charts:{execCommand:function(c,d){var e=domUtils.findParentByTagName(this.selection.getRange().startContainer,\"table\",!0),f=[],g={};if(!e)return!1;if(!a(e))return b.fireEvent(\"chartserror\"),!1;g.title=d.title||\"\",g.subTitle=d.subTitle||\"\",g.xTitle=d.xTitle||\"\",g.yTitle=d.yTitle||\"\",g.suffix=d.suffix||\"\",g.tip=d.tip||\"\",g.dataFormat=d.tableDataFormat||\"\",g.chartType=d.chartType||0;for(var h in g)g.hasOwnProperty(h)&&f.push(h+\":\"+g[h]);e.setAttribute(\"data-chart\",f.join(\";\")),domUtils.addClass(e,\"edui-charts-table\")},queryCommandState:function(b,c){var d=domUtils.findParentByTagName(this.selection.getRange().startContainer,\"table\",!0);return d&&a(d)?0:-1}}},inputRule:function(a){utils.each(a.getNodesByTagName(\"table\"),function(a){void 0!==a.getAttr(\"data-chart\")&&a.setAttr(\"style\")})},outputRule:function(a){utils.each(a.getNodesByTagName(\"table\"),function(a){void 0!==a.getAttr(\"data-chart\")&&a.setAttr(\"style\",\"display: none;\")})}}}),UE.plugin.register(\"section\",function(){function a(a){this.tag=\"\",this.level=-1,this.dom=null,this.nextSection=null,this.previousSection=null,this.parentSection=null,this.startAddress=[],this.endAddress=[],this.children=[]}function b(b){var c=new a;return utils.extend(c,b)}function c(a,b){for(var c=b,d=0;d<a.length;d++){if(!c.childNodes)return null;c=c.childNodes[a[d]]}return c}var d=this;return{bindMultiEvents:{type:\"aftersetcontent afterscencerestore\",handler:function(){d.fireEvent(\"updateSections\")}},bindEvents:{ready:function(){d.fireEvent(\"updateSections\"),domUtils.on(d.body,\"drop paste\",function(){d.fireEvent(\"updateSections\")})},afterexeccommand:function(a,b){\"paragraph\"==b&&d.fireEvent(\"updateSections\")},keyup:function(a,b){var c=this,d=c.selection.getRange();if(1!=d.collapsed)c.fireEvent(\"updateSections\");else{var e=b.keyCode||b.which;13!=e&&8!=e&&46!=e||c.fireEvent(\"updateSections\")}}},commands:{getsections:{execCommand:function(a,c){function d(a){for(var b=0;b<f.length;b++)if(f[b](a))return b;return-1}function e(a,c){for(var f,g,i,k=null,l=a.childNodes,m=0,n=l.length;m<n;m++)if(i=l[m],f=d(i),f>=0){var o=h.selection.getRange().selectNode(i).createAddress(!0).startAddress,p=b({tag:i.tagName,title:i.innerText||i.textContent||\"\",level:f,dom:i,startAddress:utils.clone(o,[]),endAddress:utils.clone(o,[]),children:[]});for(j.nextSection=p,p.previousSection=j,g=j;f<=g.level;)g=g.parentSection;p.parentSection=g,g.children.push(p),k=j=p}else 1===i.nodeType&&e(i,c),k&&k.endAddress[k.endAddress.length-1]++}for(var f=c||[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"],g=0;g<f.length;g++)\"string\"==typeof f[g]?f[g]=function(a){return function(b){return b.tagName==a.toUpperCase()}}(f[g]):\"function\"!=typeof f[g]&&(f[g]=function(a){return null});var h=this,i=b({level:-1,title:\"root\"}),j=i;return e(h.body,i),i},notNeedUndo:!0},movesection:{execCommand:function(a,b,d,e){function f(a,b,c){for(var d=!1,e=!1,f=0;f<a.length&&!(f>=c.length);f++){if(c[f]>a[f]){d=!0;break}if(c[f]<a[f])break}for(var f=0;f<b.length&&!(f>=c.length);f++){if(c[f]<a[f]){e=!0;break}if(c[f]>a[f])break}return d&&e}var g,h,i=this;if(b&&d&&d.level!=-1&&(g=e?d.endAddress:d.startAddress,h=c(g,i.body),g&&h&&!f(b.startAddress,b.endAddress,g))){var j,k,l=c(b.startAddress,i.body),m=c(b.endAddress,i.body);if(e)for(j=m;j&&!(domUtils.getPosition(l,j)&domUtils.POSITION_FOLLOWING)&&(k=j.previousSibling,domUtils.insertAfter(h,j),j!=l);)j=k;else for(j=l;j&&!(domUtils.getPosition(j,m)&domUtils.POSITION_FOLLOWING)&&(k=j.nextSibling,h.parentNode.insertBefore(j,h),j!=m);)j=k;i.fireEvent(\"updateSections\")}}},deletesection:{execCommand:function(a,b,c){function d(a){for(var b=e.body,c=0;c<a.length;c++){if(!b.childNodes)return null;b=b.childNodes[a[c]]}return b}var e=this;if(b){var f,g=d(b.startAddress),h=d(b.endAddress),i=g;if(c)domUtils.remove(i);else for(;i&&domUtils.inDoc(h,e.document)&&!(domUtils.getPosition(i,h)&domUtils.POSITION_FOLLOWING);)f=i.nextSibling,domUtils.remove(i),i=f;e.fireEvent(\"updateSections\")}}},selectsection:{execCommand:function(a,b){if(!b&&!b.dom)return!1;var c=this,d=c.selection.getRange(),e={startAddress:utils.clone(b.startAddress,[]),endAddress:utils.clone(b.endAddress,[])};return e.endAddress[e.endAddress.length-1]++,d.moveToAddress(e).select().scrollToView(),!0},notNeedUndo:!0},scrolltosection:{execCommand:function(a,b){if(!b&&!b.dom)return!1;var c=this,d=c.selection.getRange(),e={startAddress:b.startAddress,endAddress:b.endAddress};return e.endAddress[e.endAddress.length-1]++,d.moveToAddress(e).scrollToView(),!0},notNeedUndo:!0}}}}),UE.plugin.register(\"simpleupload\",function(){function a(){var a=b.offsetWidth||20,e=b.offsetHeight||20,f=document.createElement(\"iframe\"),g=\"display:block;width:\"+a+\"px;height:\"+e+\"px;overflow:hidden;border:0;margin:0;padding:0;position:absolute;top:0;left:0;filter:alpha(opacity=0);-moz-opacity:0;-khtml-opacity: 0;opacity: 0;cursor:pointer;\";domUtils.on(f,\"load\",function(){var b,h,i,j=(+new Date).toString(36);h=f.contentDocument||f.contentWindow.document,i=h.body,b=h.createElement(\"div\"),b.innerHTML='<form id=\"edui_form_'+j+'\" target=\"edui_iframe_'+j+'\" method=\"POST\" enctype=\"multipart/form-data\" action=\"'+c.getOpt(\"serverUrl\")+'\" style=\"'+g+'\"><input id=\"edui_input_'+j+'\" type=\"file\" accept=\"image/*\" name=\"'+c.options.imageFieldName+'\" style=\"'+g+'\"></form><iframe id=\"edui_iframe_'+j+'\" name=\"edui_iframe_'+j+'\" style=\"display:none;width:0;height:0;border:0;margin:0;padding:0;position:absolute;\"></iframe>',b.className=\"edui-\"+c.options.theme,b.id=c.ui.id+\"_iframeupload\",i.style.cssText=g,i.style.width=a+\"px\",i.style.height=e+\"px\",i.appendChild(b),i.parentNode&&(i.parentNode.style.width=a+\"px\",i.parentNode.style.height=a+\"px\");var k=h.getElementById(\"edui_form_\"+j),l=h.getElementById(\"edui_input_\"+j),m=h.getElementById(\"edui_iframe_\"+j);domUtils.on(l,\"change\",function(){function a(){try{var e,f,g,h=(m.contentDocument||m.contentWindow.document).body,i=h.innerText||h.textContent||\"\";f=new Function(\"return \"+i)(),e=c.options.imageUrlPrefix+f.url,\"SUCCESS\"==f.state&&f.url?(g=c.document.getElementById(d),domUtils.removeClasses(g,\"loadingclass\"),g.setAttribute(\"src\",e),g.setAttribute(\"_src\",e),g.setAttribute(\"alt\",f.original||\"\"),g.removeAttribute(\"id\"),c.fireEvent(\"contentchange\")):b&&b(f.state)}catch(j){b&&b(c.getLang(\"simpleupload.loadError\"))}k.reset(),domUtils.un(m,\"load\",a)}function b(a){if(d){var b=c.document.getElementById(d);b&&domUtils.remove(b),c.fireEvent(\"showmessage\",{id:d,content:a,type:\"error\",timeout:4e3})}}if(l.value){var d=\"loading_\"+(+new Date).toString(36),e=utils.serializeParam(c.queryCommandValue(\"serverparam\"))||\"\",f=c.getActionUrl(c.getOpt(\"imageActionName\")),g=c.getOpt(\"imageAllowFiles\");if(c.focus(),c.execCommand(\"inserthtml\",'<img class=\"loadingclass\" id=\"'+d+'\" src=\"'+c.options.themePath+c.options.theme+'/images/spacer.gif\">'),!c.getOpt(\"imageActionName\"))return void errorHandler(c.getLang(\"autoupload.errorLoadConfig\"));var h=l.value,i=h?h.substr(h.lastIndexOf(\".\")):\"\";if(!i||g&&(g.join(\"\")+\".\").indexOf(i.toLowerCase()+\".\")==-1)return void b(c.getLang(\"simpleupload.exceedTypeError\"));domUtils.on(m,\"load\",a),k.action=utils.formatUrl(f+(f.indexOf(\"?\")==-1?\"?\":\"&\")+e),k.submit()}});var n;c.addListener(\"selectionchange\",function(){clearTimeout(n),n=setTimeout(function(){var a=c.queryCommandState(\"simpleupload\");a==-1?l.disabled=\"disabled\":l.disabled=!1},400)}),d=!0}),f.style.cssText=g,b.appendChild(f)}var b,c=this,d=!1;return{bindEvents:{ready:function(){utils.cssRule(\"loading\",\".loadingclass{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\\n.loaderrorclass{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\",this.document)},simpleuploadbtnready:function(d,e){b=e,c.afterConfigReady(a)}},outputRule:function(a){utils.each(a.getNodesByTagName(\"img\"),function(a){/\\b(loaderrorclass)|(bloaderrorclass)\\b/.test(a.getAttr(\"class\"))&&a.parentNode.removeChild(a)})},commands:{simpleupload:{queryCommandState:function(){return d?0:-1}}}}}),UE.plugin.register(\"serverparam\",function(){var a={};return{commands:{serverparam:{execCommand:function(b,c,d){void 0===c||null===c?a={}:utils.isString(c)?void 0===d||null===d?delete a[c]:a[c]=d:utils.isObject(c)?utils.extend(a,c,!1):utils.isFunction(c)&&utils.extend(a,c(),!1)},queryCommandValue:function(){return a||{}}}}}}),UE.plugin.register(\"insertfile\",function(){function a(a){var b=a.substr(a.lastIndexOf(\".\")+1).toLowerCase(),c={rar:\"icon_rar.gif\",zip:\"icon_rar.gif\",tar:\"icon_rar.gif\",gz:\"icon_rar.gif\",bz2:\"icon_rar.gif\",doc:\"icon_doc.gif\",docx:\"icon_doc.gif\",pdf:\"icon_pdf.gif\",mp3:\"icon_mp3.gif\",xls:\"icon_xls.gif\",chm:\"icon_chm.gif\",ppt:\"icon_ppt.gif\",pptx:\"icon_ppt.gif\",avi:\"icon_mv.gif\",rmvb:\"icon_mv.gif\",wmv:\"icon_mv.gif\",flv:\"icon_mv.gif\",swf:\"icon_mv.gif\",rm:\"icon_mv.gif\",exe:\"icon_exe.gif\",psd:\"icon_psd.gif\",txt:\"icon_txt.gif\",jpg:\"icon_jpg.gif\",png:\"icon_jpg.gif\",jpeg:\"icon_jpg.gif\",gif:\"icon_jpg.gif\",ico:\"icon_jpg.gif\",bmp:\"icon_jpg.gif\"};return c[b]?c[b]:c.txt}var b=this;return{commands:{insertfile:{execCommand:function(c,d){if(d=utils.isArray(d)?d:[d],b.fireEvent(\"beforeinsertfile\",d)!==!0){var e,f,g,h,i=\"\",j=b.getOpt(\"UEDITOR_HOME_URL\"),k=j+(\"/\"==j.substr(j.length-1)?\"\":\"/\")+\"dialogs/attachment/fileTypeImages/\";for(e=0;e<d.length;e++)f=d[e],g=k+a(f.url),h=f.title||f.url.substr(f.url.lastIndexOf(\"/\")+1),i+='<p style=\"line-height: 16px;\"><img style=\"vertical-align: middle; margin-right: 2px;\" src=\"'+g+'\" _src=\"'+g+'\" /><a style=\"font-size:12px; color:#0066cc;\" href=\"'+f.url+'\" title=\"'+h+'\">'+h+\"</a></p>\";b.execCommand(\"insertHtml\",i),b.fireEvent(\"afterinsertfile\",d)}}}}}});var baidu=baidu||{};baidu.editor=baidu.editor||{},UE.ui=baidu.editor.ui={},function(){function a(){var a=document.getElementById(\"edui_fixedlayer\");i.setViewportOffset(a,{left:0,top:0})}function b(b){d.on(window,\"scroll\",a),d.on(window,\"resize\",baidu.editor.utils.defer(a,0,!0))}var c=baidu.editor.browser,d=baidu.editor.dom.domUtils,e=\"$EDITORUI\",f=window[e]={},g=\"ID\"+e,h=0,i=baidu.editor.ui.uiUtils={uid:function(a){return a?a[g]||(a[g]=++h):++h},hook:function(a,b){var c;return a&&a._callbacks?c=a:(c=function(){var b;a&&(b=a.apply(this,arguments));for(var d=c._callbacks,e=d.length;e--;){var f=d[e].apply(this,arguments);void 0===b&&(b=f)}return b},c._callbacks=[]),c._callbacks.push(b),c},createElementByHtml:function(a){var b=document.createElement(\"div\");return b.innerHTML=a,b=b.firstChild,b.parentNode.removeChild(b),b},getViewportElement:function(){return c.ie&&c.quirks?document.body:document.documentElement},getClientRect:function(a){var b;try{b=a.getBoundingClientRect()}catch(c){b={left:0,top:0,height:0,width:0}}for(var e,f={left:Math.round(b.left),top:Math.round(b.top),height:Math.round(b.bottom-b.top),width:Math.round(b.right-b.left)};(e=a.ownerDocument)!==document&&(a=d.getWindow(e).frameElement);)b=a.getBoundingClientRect(),f.left+=b.left,f.top+=b.top;return f.bottom=f.top+f.height,f.right=f.left+f.width,f},getViewportRect:function(){var a=i.getViewportElement(),b=0|(window.innerWidth||a.clientWidth),c=0|(window.innerHeight||a.clientHeight);return{left:0,top:0,height:c,width:b,bottom:c,right:b}},setViewportOffset:function(a,b){var c=i.getFixedLayer();a.parentNode===c?(a.style.left=b.left+\"px\",a.style.top=b.top+\"px\"):d.setViewportOffset(a,b)},getEventOffset:function(a){var b=a.target||a.srcElement,c=i.getClientRect(b),d=i.getViewportOffsetByEvent(a);return{left:d.left-c.left,top:d.top-c.top}},getViewportOffsetByEvent:function(a){var b=a.target||a.srcElement,c=d.getWindow(b).frameElement,e={left:a.clientX,top:a.clientY};if(c&&b.ownerDocument!==document){var f=i.getClientRect(c);e.left+=f.left,e.top+=f.top}return e},setGlobal:function(a,b){return f[a]=b,e+'[\"'+a+'\"]'},unsetGlobal:function(a){delete f[a]},copyAttributes:function(a,b){for(var e=b.attributes,f=e.length;f--;){var g=e[f];\"style\"==g.nodeName||\"class\"==g.nodeName||c.ie&&!g.specified||a.setAttribute(g.nodeName,g.nodeValue)}b.className&&d.addClass(a,b.className),b.style.cssText&&(a.style.cssText+=\";\"+b.style.cssText)},removeStyle:function(a,b){if(a.style.removeProperty)a.style.removeProperty(b);else{if(!a.style.removeAttribute)throw\"\";a.style.removeAttribute(b)}},contains:function(a,b){return a&&b&&a!==b&&(a.contains?a.contains(b):16&a.compareDocumentPosition(b))},startDrag:function(a,b,c){function d(a){var c=a.clientX-g,d=a.clientY-h;b.ondragmove(c,d,a),a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function e(a){c.removeEventListener(\"mousemove\",d,!0),c.removeEventListener(\"mouseup\",e,!0),window.removeEventListener(\"mouseup\",e,!0),b.ondragstop()}function f(){i.releaseCapture(),i.detachEvent(\"onmousemove\",d),i.detachEvent(\"onmouseup\",f),i.detachEvent(\"onlosecaptrue\",f),b.ondragstop()}var c=c||document,g=a.clientX,h=a.clientY;if(c.addEventListener)c.addEventListener(\"mousemove\",d,!0),c.addEventListener(\"mouseup\",e,!0),window.addEventListener(\"mouseup\",e,!0),a.preventDefault();else{var i=a.srcElement;i.setCapture(),i.attachEvent(\"onmousemove\",d),i.attachEvent(\"onmouseup\",f),i.attachEvent(\"onlosecaptrue\",f),a.returnValue=!1}b.ondragstart()},getFixedLayer:function(){var d=document.getElementById(\"edui_fixedlayer\");return null==d&&(d=document.createElement(\"div\"),d.id=\"edui_fixedlayer\",document.body.appendChild(d),c.ie&&c.version<=8?(d.style.position=\"absolute\",b(),setTimeout(a)):d.style.position=\"fixed\",d.style.left=\"0\",d.style.top=\"0\",d.style.width=\"0\",d.style.height=\"0\"),d},makeUnselectable:function(a){if(c.opera||c.ie&&c.version<9){if(a.unselectable=\"on\",a.hasChildNodes())for(var b=0;b<a.childNodes.length;b++)1==a.childNodes[b].nodeType&&i.makeUnselectable(a.childNodes[b])}else void 0!==a.style.MozUserSelect?a.style.MozUserSelect=\"none\":void 0!==a.style.WebkitUserSelect?a.style.WebkitUserSelect=\"none\":void 0!==a.style.KhtmlUserSelect&&(a.style.KhtmlUserSelect=\"none\")}}}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.EventBase,d=baidu.editor.ui.UIBase=function(){};d.prototype={className:\"\",uiName:\"\",initOptions:function(a){var c=this;for(var d in a)c[d]=a[d];this.id=this.id||\"edui\"+b.uid()},initUIBase:function(){this._globalKey=a.unhtml(b.setGlobal(this.id,this))},render:function(a){for(var c,d=this.renderHtml(),e=b.createElementByHtml(d),f=domUtils.getElementsByTagName(e,\"*\"),g=\"edui-\"+(this.theme||this.editor.options.theme),h=document.getElementById(\"edui_fixedlayer\"),i=0;c=f[i++];)domUtils.addClass(c,g);domUtils.addClass(e,g),h&&(h.className=\"\",domUtils.addClass(h,g));var j=this.getDom();null!=j?(j.parentNode.replaceChild(e,j),b.copyAttributes(e,j)):(\"string\"==typeof a&&(a=document.getElementById(a)),a=a||b.getFixedLayer(),domUtils.addClass(a,g),a.appendChild(e)),this.postRender()},getDom:function(a){return a?document.getElementById(this.id+\"_\"+a):document.getElementById(this.id)},postRender:function(){this.fireEvent(\"postrender\")},getHtmlTpl:function(){return\"\"},formatHtml:function(a){var b=\"edui-\"+this.uiName;return a.replace(/##/g,this.id).replace(/%%-/g,this.uiName?b+\"-\":\"\").replace(/%%/g,(this.uiName?b:\"\")+\" \"+this.className).replace(/\\$\\$/g,this._globalKey)},renderHtml:function(){return this.formatHtml(this.getHtmlTpl())},dispose:function(){var a=this.getDom();a&&baidu.editor.dom.domUtils.remove(a),b.unsetGlobal(this.id)}},a.inherits(d,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.Separator=function(a){this.initOptions(a),this.initSeparator()};c.prototype={uiName:\"separator\",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\"></div>'}},a.inherits(c,b)}(),function(){var a=baidu.editor.utils,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.uiUtils,e=baidu.editor.ui.Mask=function(a){this.initOptions(a),this.initUIBase()};e.prototype={getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-mask %%\" onclick=\"return $$._onClick(event, this);\" onmousedown=\"return $$._onMouseDown(event, this);\"></div>'},postRender:function(){var a=this;b.on(window,\"resize\",function(){setTimeout(function(){a.isHidden()||a._fill()})})},show:function(a){this._fill(),this.getDom().style.display=\"\",this.getDom().style.zIndex=a},hide:function(){this.getDom().style.display=\"none\",this.getDom().style.zIndex=\"\"},isHidden:function(){return\"none\"==this.getDom().style.display},_onMouseDown:function(){return!1},_onClick:function(a,b){this.fireEvent(\"click\",a,b)},_fill:function(){var a=this.getDom(),b=d.getViewportRect();a.style.width=b.width+\"px\",a.style.height=b.height+\"px\"}},a.inherits(e,c)}(),function(){function a(a,b){for(var c=0;c<g.length;c++){var d=g[c];if(!d.isHidden()&&d.queryAutoHide(b)!==!1){if(a&&/scroll/gi.test(a.type)&&\"edui-wordpastepop\"==d.className)return;d.hide()}}g.length&&d.editor.fireEvent(\"afterhidepop\")}var b=baidu.editor.utils,c=baidu.editor.ui.uiUtils,d=baidu.editor.dom.domUtils,e=baidu.editor.ui.UIBase,f=baidu.editor.ui.Popup=function(a){this.initOptions(a),this.initPopup()},g=[];f.postHide=a;var h=[\"edui-anchor-topleft\",\"edui-anchor-topright\",\"edui-anchor-bottomleft\",\"edui-anchor-bottomright\"];f.prototype={SHADOW_RADIUS:5,content:null,_hidden:!1,autoRender:!0,canSideLeft:!0,canSideUp:!0,initPopup:function(){this.initUIBase(),g.push(this)},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-popup %%\" onmousedown=\"return false;\"> <div id=\"##_body\" class=\"edui-popup-body\"> <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe> <div class=\"edui-shadow\"></div> <div id=\"##_content\" class=\"edui-popup-content\">'+this.getContentHtmlTpl()+\"  </div> </div></div>\"},getContentHtmlTpl:function(){return this.content?\"string\"==typeof this.content?this.content:this.content.renderHtml():\"\"},_UIBase_postRender:e.prototype.postRender,postRender:function(){if(this.content instanceof e&&this.content.postRender(),this.captureWheel&&!this.captured){this.captured=!0;var a=(document.documentElement.clientHeight||document.body.clientHeight)-80,b=this.getDom().offsetHeight,f=c.getClientRect(this.combox.getDom()).top,g=this.getDom(\"content\"),h=this.getDom(\"body\").getElementsByTagName(\"iframe\"),i=this;for(h.length&&(h=h[0]);f+b>a;)b-=30;g.style.height=b+\"px\",h&&(h.style.height=b+\"px\"),window.XMLHttpRequest?d.on(g,\"onmousewheel\"in document.body?\"mousewheel\":\"DOMMouseScroll\",function(a){a.preventDefault?a.preventDefault():a.returnValue=!1,a.wheelDelta?g.scrollTop-=a.wheelDelta/120*60:g.scrollTop-=a.detail/-3*60}):d.on(this.getDom(),\"mousewheel\",function(a){a.returnValue=!1,i.getDom(\"content\").scrollTop-=a.wheelDelta/120*60})}this.fireEvent(\"postRenderAfter\"),this.hide(!0),this._UIBase_postRender()},_doAutoRender:function(){!this.getDom()&&this.autoRender&&this.render()},mesureSize:function(){var a=this.getDom(\"content\");return c.getClientRect(a)},fitSize:function(){if(this.captureWheel&&this.sized)return this.__size;this.sized=!0;var a=this.getDom(\"body\");a.style.width=\"\",a.style.height=\"\";var b=this.mesureSize();if(this.captureWheel){a.style.width=-(-20-b.width)+\"px\";var c=parseInt(this.getDom(\"content\").style.height,10);!window.isNaN(c)&&(b.height=c)}else a.style.width=b.width+\"px\";return a.style.height=b.height+\"px\",this.__size=b,this.captureWheel&&(this.getDom(\"content\").style.overflow=\"auto\"),b},showAnchor:function(a,b){this.showAnchorRect(c.getClientRect(a),b)},showAnchorRect:function(a,b,e){this._doAutoRender();var f=c.getViewportRect();this.getDom().style.visibility=\"hidden\",this._show();var g,i,j,k,l=this.fitSize();b?(g=this.canSideLeft&&a.right+l.width>f.right&&a.left>l.width,i=this.canSideUp&&a.top+l.height>f.bottom&&a.bottom>l.height,j=g?a.left-l.width:a.right,k=i?a.bottom-l.height:a.top):(g=this.canSideLeft&&a.right+l.width>f.right&&a.left>l.width,i=this.canSideUp&&a.top+l.height>f.bottom&&a.bottom>l.height,j=g?a.right-l.width:a.left,k=i?a.top-l.height:a.bottom);var m=this.getDom();c.setViewportOffset(m,{left:j,top:k}),d.removeClasses(m,h),m.className+=\" \"+h[2*(i?1:0)+(g?1:0)],this.editor&&(m.style.zIndex=1*this.editor.container.style.zIndex+10,baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=m.style.zIndex-1),this.getDom().style.visibility=\"visible\"},showAt:function(a){var b=a.left,c=a.top,d={left:b,top:c,right:b,bottom:c,height:0,width:0};this.showAnchorRect(d,!1,!0)},_show:function(){if(this._hidden){var a=this.getDom();a.style.display=\"\",this._hidden=!1,this.fireEvent(\"show\")}},isHidden:function(){return this._hidden},show:function(){this._doAutoRender(),this._show()},hide:function(a){!this._hidden&&this.getDom()&&(this.getDom().style.display=\"none\",this._hidden=!0,a||this.fireEvent(\"hide\"))},queryAutoHide:function(a){return!a||!c.contains(this.getDom(),a)}},b.inherits(f,e),d.on(document,\"mousedown\",function(b){var c=b.target||b.srcElement;a(b,c)}),d.on(window,\"scroll\",function(b,c){a(b,c)})}(),function(){function a(a,b){for(var c='<div id=\"##\" class=\"edui-colorpicker %%\"><div class=\"edui-colorpicker-topbar edui-clearfix\"><div unselectable=\"on\" id=\"##_preview\" class=\"edui-colorpicker-preview\"></div><div unselectable=\"on\" class=\"edui-colorpicker-nocolor\" onclick=\"$$._onPickNoColor(event, this);\">'+a+'</div></div><table  class=\"edui-box\" style=\"border-collapse: collapse;\" onmouseover=\"$$._onTableOver(event, this);\" onmouseout=\"$$._onTableOut(event, this);\" onclick=\"return $$._onTableClick(event, this);\" cellspacing=\"0\" cellpadding=\"0\"><tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;padding-top: 2px\"><td colspan=\"10\">'+b.getLang(\"themeColor\")+'</td> </tr><tr class=\"edui-colorpicker-tablefirstrow\" >',d=0;d<e.length;d++)d&&d%10===0&&(c+=\"</tr>\"+(60==d?'<tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;\"><td colspan=\"10\">'+b.getLang(\"standardColor\")+\"</td></tr>\":\"\")+\"<tr\"+(60==d?' class=\"edui-colorpicker-tablefirstrow\"':\"\")+\">\"),c+=d<70?'<td style=\"padding: 0 2px;\"><a hidefocus title=\"'+e[d]+'\" onclick=\"return false;\" href=\"javascript:\" unselectable=\"on\" class=\"edui-box edui-colorpicker-colorcell\" data-color=\"#'+e[d]+'\" style=\"background-color:#'+e[d]+\";border:solid #ccc;\"+(d<10||d>=60?\"border-width:1px;\":d>=10&&d<20?\"border-width:1px 1px 0 1px;\":\"border-width:0 1px 0 1px;\")+'\"></a></td>':\"\";return c+=\"</tr></table></div>\"}var b=baidu.editor.utils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.ColorPicker=function(a){this.initOptions(a),this.noColorText=this.noColorText||this.editor.getLang(\"clearColor\"),this.initUIBase()};d.prototype={getHtmlTpl:function(){return a(this.noColorText,this.editor)},_onTableClick:function(a){var b=a.target||a.srcElement,c=b.getAttribute(\"data-color\");c&&this.fireEvent(\"pickcolor\",c)},_onTableOver:function(a){var b=a.target||a.srcElement,c=b.getAttribute(\"data-color\");c&&(this.getDom(\"preview\").style.backgroundColor=c)},_onTableOut:function(){this.getDom(\"preview\").style.backgroundColor=\"\"},_onPickNoColor:function(){this.fireEvent(\"picknocolor\")}},b.inherits(d,c);var e=\"ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,d8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,\".split(\",\")}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.TablePicker=function(a){this.initOptions(a),this.initTablePicker()};d.prototype={defaultNumRows:10,defaultNumCols:10,maxNumRows:20,maxNumCols:20,numRows:10,numCols:10,lengthOfCellSide:22,initTablePicker:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-tablepicker %%\"><div class=\"edui-tablepicker-body\"><div class=\"edui-infoarea\"><span id=\"##_label\" class=\"edui-label\"></span></div><div class=\"edui-pickarea\" onmousemove=\"$$._onMouseMove(event, this);\" onmouseover=\"$$._onMouseOver(event, this);\" onmouseout=\"$$._onMouseOut(event, this);\" onclick=\"$$._onClick(event, this);\"><div id=\"##_overlay\" class=\"edui-overlay\"></div></div></div></div>'},_UIBase_render:c.prototype.render,render:function(a){this._UIBase_render(a),this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_row\")+\" x 0\"+this.editor.getLang(\"t_col\")},_track:function(a,b){var c=this.getDom(\"overlay\").style,d=this.lengthOfCellSide;c.width=a*d+\"px\",c.height=b*d+\"px\";var e=this.getDom(\"label\");e.innerHTML=a+this.editor.getLang(\"t_col\")+\" x \"+b+this.editor.getLang(\"t_row\"),this.numCols=a,this.numRows=b},_onMouseOver:function(a,c){var d=a.relatedTarget||a.fromElement;b.contains(c,d)||c===d||(this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_col\")+\" x 0\"+this.editor.getLang(\"t_row\"),this.getDom(\"overlay\").style.visibility=\"\")},_onMouseOut:function(a,c){var d=a.relatedTarget||a.toElement;b.contains(c,d)||c===d||(this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_col\")+\" x 0\"+this.editor.getLang(\"t_row\"),this.getDom(\"overlay\").style.visibility=\"hidden\")},_onMouseMove:function(a,c){var d=(this.getDom(\"overlay\").style,b.getEventOffset(a)),e=this.lengthOfCellSide,f=Math.ceil(d.left/e),g=Math.ceil(d.top/e);this._track(f,g)},_onClick:function(){this.fireEvent(\"picktable\",this.numCols,this.numRows)}},a.inherits(d,c)}(),function(){var a=baidu.editor.browser,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.uiUtils,d='onmousedown=\"$$.Stateful_onMouseDown(event, this);\" onmouseup=\"$$.Stateful_onMouseUp(event, this);\"'+(a.ie?' onmouseenter=\"$$.Stateful_onMouseEnter(event, this);\" onmouseleave=\"$$.Stateful_onMouseLeave(event, this);\"':' onmouseover=\"$$.Stateful_onMouseOver(event, this);\" onmouseout=\"$$.Stateful_onMouseOut(event, this);\"');baidu.editor.ui.Stateful={alwalysHoverable:!1,target:null,Stateful_init:function(){this._Stateful_dGetHtmlTpl=this.getHtmlTpl,this.getHtmlTpl=this.Stateful_getHtmlTpl},Stateful_getHtmlTpl:function(){var a=this._Stateful_dGetHtmlTpl();return a.replace(/stateful/g,function(){return d})},Stateful_onMouseEnter:function(a,b){this.target=b,this.isDisabled()&&!this.alwalysHoverable||(this.addState(\"hover\"),this.fireEvent(\"over\"))},Stateful_onMouseLeave:function(a,b){this.isDisabled()&&!this.alwalysHoverable||(this.removeState(\"hover\"),this.removeState(\"active\"),this.fireEvent(\"out\"))},Stateful_onMouseOver:function(a,b){var d=a.relatedTarget;c.contains(b,d)||b===d||this.Stateful_onMouseEnter(a,b)},Stateful_onMouseOut:function(a,b){var d=a.relatedTarget;c.contains(b,d)||b===d||this.Stateful_onMouseLeave(a,b)},Stateful_onMouseDown:function(a,b){this.isDisabled()||this.addState(\"active\")},Stateful_onMouseUp:function(a,b){this.isDisabled()||this.removeState(\"active\")},Stateful_postRender:function(){this.disabled&&!this.hasState(\"disabled\")&&this.addState(\"disabled\")},hasState:function(a){return b.hasClass(this.getStateDom(),\"edui-state-\"+a)},addState:function(a){this.hasState(a)||(this.getStateDom().className+=\" edui-state-\"+a)},removeState:function(a){this.hasState(a)&&b.removeClasses(this.getStateDom(),[\"edui-state-\"+a])},getStateDom:function(){return this.getDom(\"state\")},isChecked:function(){return this.hasState(\"checked\")},setChecked:function(a){!this.isDisabled()&&a?this.addState(\"checked\"):this.removeState(\"checked\")},isDisabled:function(){return this.hasState(\"disabled\")},setDisabled:function(a){a?(this.removeState(\"hover\"),this.removeState(\"checked\"),this.removeState(\"active\"),this.addState(\"disabled\")):this.removeState(\"disabled\")}}}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.Stateful,d=baidu.editor.ui.Button=function(a){if(a.name){var b=a.name,c=a.cssRules;a.className||(a.className=\"edui-for-\"+b),a.cssRules=\".edui-\"+(a.theme||\"default\")+\" .edui-toolbar .edui-button.edui-for-\"+b+\" .edui-icon {\"+c+\"}\"}this.initOptions(a),this.initButton()};d.prototype={uiName:\"button\",label:\"\",title:\"\",showIcon:!0,showText:!0,cssRules:\"\",initButton:function(){this.initUIBase(),this.Stateful_init(),this.cssRules&&a.cssRule(\"edui-customize-\"+this.name+\"-style\",this.cssRules)},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\"><div id=\"##_state\" stateful><div class=\"%%-wrap\"><div id=\"##_body\" unselectable=\"on\" '+(this.title?'title=\"'+this.title+'\"':\"\")+' class=\"%%-body\" onmousedown=\"return $$._onMouseDown(event, this);\" onclick=\"return $$._onClick(event, this);\">'+(this.showIcon?'<div class=\"edui-box edui-icon\"></div>':\"\")+(this.showText?'<div class=\"edui-box edui-label\">'+this.label+\"</div>\":\"\")+\"</div></div></div></div>\"},postRender:function(){this.Stateful_postRender(),this.setDisabled(this.disabled)},_onMouseDown:function(a){var b=a.target||a.srcElement,c=b&&b.tagName&&b.tagName.toLowerCase();if(\"input\"==c||\"object\"==c||\"object\"==c)return!1},_onClick:function(){this.isDisabled()||this.fireEvent(\"click\")},setTitle:function(a){var b=this.getDom(\"label\");b.innerHTML=a}},a.inherits(d,b),a.extend(d.prototype,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=(baidu.editor.dom.domUtils,baidu.editor.ui.UIBase),d=baidu.editor.ui.Stateful,e=baidu.editor.ui.SplitButton=function(a){this.initOptions(a),this.initSplitButton()};e.prototype={popup:null,uiName:\"splitbutton\",title:\"\",initSplitButton:function(){this.initUIBase(),this.Stateful_init();if(null!=this.popup){var a=this.popup;this.popup=null,this.setPopup(a)}},_UIBase_postRender:c.prototype.postRender,postRender:function(){this.Stateful_postRender(),this._UIBase_postRender()},setPopup:function(c){this.popup!==c&&(null!=this.popup&&this.popup.dispose(),c.addListener(\"show\",a.bind(this._onPopupShow,this)),c.addListener(\"hide\",a.bind(this._onPopupHide,this)),c.addListener(\"postrender\",a.bind(function(){c.getDom(\"body\").appendChild(b.createElementByHtml('<div id=\"'+this.popup.id+'_bordereraser\" class=\"edui-bordereraser edui-background\" style=\"width:'+(b.getClientRect(this.getDom()).width+20)+'px\"></div>')),\nc.getDom().className+=\" \"+this.className},this)),this.popup=c)},_onPopupShow:function(){this.addState(\"opened\")},_onPopupHide:function(){this.removeState(\"opened\")},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\"><div '+(this.title?'title=\"'+this.title+'\"':\"\")+' id=\"##_state\" stateful><div class=\"%%-body\"><div id=\"##_button_body\" class=\"edui-box edui-button-body\" onclick=\"$$._onButtonClick(event, this);\"><div class=\"edui-box edui-icon\"></div></div><div class=\"edui-box edui-splitborder\"></div><div class=\"edui-box edui-arrow\" onclick=\"$$._onArrowClick();\"></div></div></div></div>'},showPopup:function(){var a=b.getClientRect(this.getDom());a.top-=this.popup.SHADOW_RADIUS,a.height+=this.popup.SHADOW_RADIUS,this.popup.showAnchorRect(a)},_onArrowClick:function(a,b){this.isDisabled()||this.showPopup()},_onButtonClick:function(){this.isDisabled()||this.fireEvent(\"buttonclick\")}},a.inherits(e,c),a.extend(e.prototype,d,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.ColorPicker,d=baidu.editor.ui.Popup,e=baidu.editor.ui.SplitButton,f=baidu.editor.ui.ColorButton=function(a){this.initOptions(a),this.initColorButton()};f.prototype={initColorButton:function(){var a=this;this.popup=new d({content:new c({noColorText:a.editor.getLang(\"clearColor\"),editor:a.editor,onpickcolor:function(b,c){a._onPickColor(c)},onpicknocolor:function(b,c){a._onPickNoColor(c)}}),editor:a.editor}),this.initSplitButton()},_SplitButton_postRender:e.prototype.postRender,postRender:function(){this._SplitButton_postRender(),this.getDom(\"button_body\").appendChild(b.createElementByHtml('<div id=\"'+this.id+'_colorlump\" class=\"edui-colorlump\"></div>')),this.getDom().className+=\" edui-colorbutton\"},setColor:function(a){this.getDom(\"colorlump\").style.backgroundColor=a,this.color=a},_onPickColor:function(a){this.fireEvent(\"pickcolor\",a)!==!1&&(this.setColor(a),this.popup.hide())},_onPickNoColor:function(a){this.fireEvent(\"picknocolor\")!==!1&&this.popup.hide()}},a.inherits(f,e)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Popup,c=baidu.editor.ui.TablePicker,d=baidu.editor.ui.SplitButton,e=baidu.editor.ui.TableButton=function(a){this.initOptions(a),this.initTableButton()};e.prototype={initTableButton:function(){var a=this;this.popup=new b({content:new c({editor:a.editor,onpicktable:function(b,c,d){a._onPickTable(c,d)}}),editor:a.editor}),this.initSplitButton()},_onPickTable:function(a,b){this.fireEvent(\"picktable\",a,b)!==!1&&this.popup.hide()}},a.inherits(e,d)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.AutoTypeSetPicker=function(a){this.initOptions(a),this.initAutoTypeSetPicker()};c.prototype={initAutoTypeSetPicker:function(){this.initUIBase()},getHtmlTpl:function(){var a=this.editor,b=a.options.autotypeset,c=a.getLang(\"autoTypeSet\"),d=\"textAlignValue\"+a.uid,e=\"imageBlockLineValue\"+a.uid,f=\"symbolConverValue\"+a.uid;return'<div id=\"##\" class=\"edui-autotypesetpicker %%\"><div class=\"edui-autotypesetpicker-body\"><table ><tr><td nowrap><input type=\"checkbox\" name=\"mergeEmptyline\" '+(b.mergeEmptyline?\"checked\":\"\")+\">\"+c.mergeLine+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"removeEmptyline\" '+(b.removeEmptyline?\"checked\":\"\")+\">\"+c.delLine+'</td></tr><tr><td nowrap><input type=\"checkbox\" name=\"removeClass\" '+(b.removeClass?\"checked\":\"\")+\">\"+c.removeFormat+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"indent\" '+(b.indent?\"checked\":\"\")+\">\"+c.indent+'</td></tr><tr><td nowrap><input type=\"checkbox\" name=\"textAlign\" '+(b.textAlign?\"checked\":\"\")+\">\"+c.alignment+'</td><td colspan=\"2\" id=\"'+d+'\"><input type=\"radio\" name=\"'+d+'\" value=\"left\" '+(b.textAlign&&\"left\"==b.textAlign?\"checked\":\"\")+\">\"+a.getLang(\"justifyleft\")+'<input type=\"radio\" name=\"'+d+'\" value=\"center\" '+(b.textAlign&&\"center\"==b.textAlign?\"checked\":\"\")+\">\"+a.getLang(\"justifycenter\")+'<input type=\"radio\" name=\"'+d+'\" value=\"right\" '+(b.textAlign&&\"right\"==b.textAlign?\"checked\":\"\")+\">\"+a.getLang(\"justifyright\")+'</td></tr><tr><td nowrap><input type=\"checkbox\" name=\"imageBlockLine\" '+(b.imageBlockLine?\"checked\":\"\")+\">\"+c.imageFloat+'</td><td nowrap id=\"'+e+'\"><input type=\"radio\" name=\"'+e+'\" value=\"none\" '+(b.imageBlockLine&&\"none\"==b.imageBlockLine?\"checked\":\"\")+\">\"+a.getLang(\"default\")+'<input type=\"radio\" name=\"'+e+'\" value=\"left\" '+(b.imageBlockLine&&\"left\"==b.imageBlockLine?\"checked\":\"\")+\">\"+a.getLang(\"justifyleft\")+'<input type=\"radio\" name=\"'+e+'\" value=\"center\" '+(b.imageBlockLine&&\"center\"==b.imageBlockLine?\"checked\":\"\")+\">\"+a.getLang(\"justifycenter\")+'<input type=\"radio\" name=\"'+e+'\" value=\"right\" '+(b.imageBlockLine&&\"right\"==b.imageBlockLine?\"checked\":\"\")+\">\"+a.getLang(\"justifyright\")+'</td></tr><tr><td nowrap><input type=\"checkbox\" name=\"clearFontSize\" '+(b.clearFontSize?\"checked\":\"\")+\">\"+c.removeFontsize+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"clearFontFamily\" '+(b.clearFontFamily?\"checked\":\"\")+\">\"+c.removeFontFamily+'</td></tr><tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"removeEmptyNode\" '+(b.removeEmptyNode?\"checked\":\"\")+\">\"+c.removeHtml+'</td></tr><tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"pasteFilter\" '+(b.pasteFilter?\"checked\":\"\")+\">\"+c.pasteFilter+'</td></tr><tr><td nowrap><input type=\"checkbox\" name=\"symbolConver\" '+(b.bdc2sb||b.tobdc?\"checked\":\"\")+\">\"+c.symbol+'</td><td id=\"'+f+'\"><input type=\"radio\" name=\"bdc\" value=\"bdc2sb\" '+(b.bdc2sb?\"checked\":\"\")+\">\"+c.bdc2sb+'<input type=\"radio\" name=\"bdc\" value=\"tobdc\" '+(b.tobdc?\"checked\":\"\")+\">\"+c.tobdc+'</td><td nowrap align=\"right\"><button >'+c.run+\"</button></td></tr></table></div></div>\"},_UIBase_render:b.prototype.render},a.inherits(c,b)}(),function(){function a(a){for(var c,d={},e=a.getDom(),f=a.editor.uid,g=null,h=null,i=domUtils.getElementsByTagName(e,\"input\"),j=i.length-1;c=i[j--];)if(g=c.getAttribute(\"type\"),\"checkbox\"==g)if(h=c.getAttribute(\"name\"),d[h]&&delete d[h],c.checked){var k=document.getElementById(h+\"Value\"+f);if(k){if(/input/gi.test(k.tagName))d[h]=k.value;else for(var l,m=k.getElementsByTagName(\"input\"),n=m.length-1;l=m[n--];)if(l.checked){d[h]=l.value;break}}else d[h]=!0}else d[h]=!1;else d[c.getAttribute(\"value\")]=c.checked;for(var o,p=domUtils.getElementsByTagName(e,\"select\"),j=0;o=p[j++];){var q=o.getAttribute(\"name\");d[q]=d[q]?o.value:\"\"}b.extend(a.editor.options.autotypeset,d),a.editor.setPreferences(\"autotypeset\",d)}var b=baidu.editor.utils,c=baidu.editor.ui.Popup,d=baidu.editor.ui.AutoTypeSetPicker,e=baidu.editor.ui.SplitButton,f=baidu.editor.ui.AutoTypeSetButton=function(a){this.initOptions(a),this.initAutoTypeSetButton()};f.prototype={initAutoTypeSetButton:function(){var b=this;this.popup=new c({content:new d({editor:b.editor}),editor:b.editor,hide:function(){!this._hidden&&this.getDom()&&(a(this),this.getDom().style.display=\"none\",this._hidden=!0,this.fireEvent(\"hide\"))}});var e=0;this.popup.addListener(\"postRenderAfter\",function(){var c=this;if(!e){var d=this.getDom(),f=d.getElementsByTagName(\"button\")[0];f.onclick=function(){a(c),b.editor.execCommand(\"autotypeset\"),c.hide()},domUtils.on(d,\"click\",function(d){var e=d.target||d.srcElement,f=b.editor.uid;if(e&&\"INPUT\"==e.tagName){if(\"imageBlockLine\"==e.name||\"textAlign\"==e.name||\"symbolConver\"==e.name)for(var g=e.checked,h=document.getElementById(e.name+\"Value\"+f),i=h.getElementsByTagName(\"input\"),j={imageBlockLine:\"none\",textAlign:\"left\",symbolConver:\"tobdc\"},k=0;k<i.length;k++)g?i[k].value==j[e.name]&&(i[k].checked=\"checked\"):i[k].checked=!1;if(e.name==\"imageBlockLineValue\"+f||e.name==\"textAlignValue\"+f||\"bdc\"==e.name){var l=e.parentNode.previousSibling.getElementsByTagName(\"input\");l&&(l[0].checked=!0)}a(c)}}),e=1}}),this.initSplitButton()}},b.inherits(f,e)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Popup,c=baidu.editor.ui.Stateful,d=baidu.editor.ui.UIBase,e=baidu.editor.ui.CellAlignPicker=function(a){this.initOptions(a),this.initSelected(),this.initCellAlignPicker()};e.prototype={initSelected:function(){var a={valign:{top:0,middle:1,bottom:2},align:{left:0,center:1,right:2},count:3};this.selected&&(this.selectedIndex=a.valign[this.selected.valign]*a.count+a.align[this.selected.align])},initCellAlignPicker:function(){this.initUIBase(),this.Stateful_init()},getHtmlTpl:function(){for(var a=[\"left\",\"center\",\"right\"],b=9,c=null,d=-1,e=[],f=0;f<b;f++)c=this.selectedIndex===f?' class=\"edui-cellalign-selected\" ':\"\",d=f%3,0===d&&e.push(\"<tr>\"),e.push('<td index=\"'+f+'\" '+c+' stateful><div class=\"edui-icon edui-'+a[d]+'\"></div></td>'),2===d&&e.push(\"</tr>\");return'<div id=\"##\" class=\"edui-cellalignpicker %%\"><div class=\"edui-cellalignpicker-body\"><table onclick=\"$$._onClick(event);\">'+e.join(\"\")+\"</table></div></div>\"},getStateDom:function(){return this.target},_onClick:function(a){var c=a.target||a.srcElement;/icon/.test(c.className)&&(this.items[c.parentNode.getAttribute(\"index\")].onclick(),b.postHide(a))},_UIBase_render:d.prototype.render},a.inherits(e,d),a.extend(e.prototype,c,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Stateful,c=baidu.editor.ui.uiUtils,d=baidu.editor.ui.UIBase,e=baidu.editor.ui.PastePicker=function(a){this.initOptions(a),this.initPastePicker()};e.prototype={initPastePicker:function(){this.initUIBase(),this.Stateful_init()},getHtmlTpl:function(){return'<div class=\"edui-pasteicon\" onclick=\"$$._onClick(this)\"></div><div class=\"edui-pastecontainer\"><div class=\"edui-title\">'+this.editor.getLang(\"pasteOpt\")+'</div><div class=\"edui-button\"><div title=\"'+this.editor.getLang(\"pasteSourceFormat\")+'\" onclick=\"$$.format(false)\" stateful><div class=\"edui-richtxticon\"></div></div><div title=\"'+this.editor.getLang(\"tagFormat\")+'\" onclick=\"$$.format(2)\" stateful><div class=\"edui-tagicon\"></div></div><div title=\"'+this.editor.getLang(\"pasteTextFormat\")+'\" onclick=\"$$.format(true)\" stateful><div class=\"edui-plaintxticon\"></div></div></div></div></div>'},getStateDom:function(){return this.target},format:function(a){this.editor.ui._isTransfer=!0,this.editor.fireEvent(\"pasteTransfer\",a)},_onClick:function(a){var b=domUtils.getNextDomNode(a),d=c.getViewportRect().height,e=c.getClientRect(b);e.top+e.height>d?b.style.top=-e.height-a.offsetHeight+\"px\":b.style.top=\"\",/hidden/gi.test(domUtils.getComputedStyle(b,\"visibility\"))?(b.style.visibility=\"visible\",domUtils.addClass(a,\"edui-state-opened\")):(b.style.visibility=\"hidden\",domUtils.removeClasses(a,\"edui-state-opened\"))},_UIBase_render:d.prototype.render},a.inherits(e,d),a.extend(e.prototype,b,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.Toolbar=function(a){this.initOptions(a),this.initToolbar()};d.prototype={items:null,initToolbar:function(){this.items=this.items||[],this.initUIBase()},add:function(a,b){void 0===b?this.items.push(a):this.items.splice(b,0,a)},getHtmlTpl:function(){for(var a=[],b=0;b<this.items.length;b++)a[b]=this.items[b].renderHtml();return'<div id=\"##\" class=\"edui-toolbar %%\" onselectstart=\"return false;\" onmousedown=\"return $$._onMouseDown(event, this);\">'+a.join(\"\")+\"</div>\"},postRender:function(){for(var a=this.getDom(),c=0;c<this.items.length;c++)this.items[c].postRender();b.makeUnselectable(a)},_onMouseDown:function(a){var b=a.target||a.srcElement,c=b&&b.tagName&&b.tagName.toLowerCase();if(\"input\"==c||\"object\"==c||\"object\"==c)return!1}},a.inherits(d,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.uiUtils,d=baidu.editor.ui.UIBase,e=baidu.editor.ui.Popup,f=baidu.editor.ui.Stateful,g=baidu.editor.ui.CellAlignPicker,h=baidu.editor.ui.Menu=function(a){this.initOptions(a),this.initMenu()},i={renderHtml:function(){return'<div class=\"edui-menuitem edui-menuseparator\"><div class=\"edui-menuseparator-inner\"></div></div>'},postRender:function(){},queryAutoHide:function(){return!0}};h.prototype={items:null,uiName:\"menu\",initMenu:function(){this.items=this.items||[],this.initPopup(),this.initItems()},initItems:function(){for(var a=0;a<this.items.length;a++){var b=this.items[a];\"-\"==b?this.items[a]=this.getSeparator():b instanceof j||(b.editor=this.editor,b.theme=this.editor.options.theme,this.items[a]=this.createItem(b))}},getSeparator:function(){return i},createItem:function(a){return a.menu=this,new j(a)},_Popup_getContentHtmlTpl:e.prototype.getContentHtmlTpl,getContentHtmlTpl:function(){if(0==this.items.length)return this._Popup_getContentHtmlTpl();for(var a=[],b=0;b<this.items.length;b++){var c=this.items[b];a[b]=c.renderHtml()}return'<div class=\"%%-body\">'+a.join(\"\")+\"</div>\"},_Popup_postRender:e.prototype.postRender,postRender:function(){for(var a=this,d=0;d<this.items.length;d++){var e=this.items[d];e.ownerMenu=this,e.postRender()}b.on(this.getDom(),\"mouseover\",function(b){b=b||event;var d=b.relatedTarget||b.fromElement,e=a.getDom();c.contains(e,d)||e===d||a.fireEvent(\"over\")}),this._Popup_postRender()},queryAutoHide:function(a){if(a){if(c.contains(this.getDom(),a))return!1;for(var b=0;b<this.items.length;b++){var d=this.items[b];if(d.queryAutoHide(a)===!1)return!1}}},clearItems:function(){for(var a=0;a<this.items.length;a++){var b=this.items[a];clearTimeout(b._showingTimer),clearTimeout(b._closingTimer),b.subMenu&&b.subMenu.destroy()}this.items=[]},destroy:function(){this.getDom()&&b.remove(this.getDom()),this.clearItems()},dispose:function(){this.destroy()}},a.inherits(h,e);var j=baidu.editor.ui.MenuItem=function(a){if(this.initOptions(a),this.initUIBase(),this.Stateful_init(),this.subMenu&&!(this.subMenu instanceof h))if(a.className&&a.className.indexOf(\"aligntd\")!=-1){var c=this;this.subMenu.selected=this.editor.queryCommandValue(\"cellalignment\"),this.subMenu=new e({content:new g(this.subMenu),parentMenu:c,editor:c.editor,destroy:function(){this.getDom()&&b.remove(this.getDom())}}),this.subMenu.addListener(\"postRenderAfter\",function(){b.on(this.getDom(),\"mouseover\",function(){c.addState(\"opened\")})})}else this.subMenu=new h(this.subMenu)};j.prototype={label:\"\",subMenu:null,ownerMenu:null,uiName:\"menuitem\",alwalysHoverable:!0,getHtmlTpl:function(){return'<div id=\"##\" class=\"%%\" stateful onclick=\"$$._onClick(event, this);\"><div class=\"%%-body\">'+this.renderLabelHtml()+\"</div></div>\"},postRender:function(){var a=this;this.addListener(\"over\",function(){a.ownerMenu.fireEvent(\"submenuover\",a),a.subMenu&&a.delayShowSubMenu()}),this.subMenu&&(this.getDom().className+=\" edui-hassubmenu\",this.subMenu.render(),this.addListener(\"out\",function(){a.delayHideSubMenu()}),this.subMenu.addListener(\"over\",function(){clearTimeout(a._closingTimer),a._closingTimer=null,a.addState(\"opened\")}),this.ownerMenu.addListener(\"hide\",function(){a.hideSubMenu()}),this.ownerMenu.addListener(\"submenuover\",function(b,c){c!==a&&a.delayHideSubMenu()}),this.subMenu._bakQueryAutoHide=this.subMenu.queryAutoHide,this.subMenu.queryAutoHide=function(b){return(!b||!c.contains(a.getDom(),b))&&this._bakQueryAutoHide(b)}),this.getDom().style.tabIndex=\"-1\",c.makeUnselectable(this.getDom()),this.Stateful_postRender()},delayShowSubMenu:function(){var a=this;a.isDisabled()||(a.addState(\"opened\"),clearTimeout(a._showingTimer),clearTimeout(a._closingTimer),a._closingTimer=null,a._showingTimer=setTimeout(function(){a.showSubMenu()},250))},delayHideSubMenu:function(){var a=this;a.isDisabled()||(a.removeState(\"opened\"),clearTimeout(a._showingTimer),a._closingTimer||(a._closingTimer=setTimeout(function(){a.hasState(\"opened\")||a.hideSubMenu(),a._closingTimer=null},400)))},renderLabelHtml:function(){return'<div class=\"edui-arrow\"></div><div class=\"edui-box edui-icon\"></div><div class=\"edui-box edui-label %%-label\">'+(this.label||\"\")+\"</div>\"},getStateDom:function(){return this.getDom()},queryAutoHide:function(a){if(this.subMenu&&this.hasState(\"opened\"))return this.subMenu.queryAutoHide(a)},_onClick:function(a,b){this.hasState(\"disabled\")||this.fireEvent(\"click\",a,b)!==!1&&(this.subMenu?this.showSubMenu():e.postHide(a))},showSubMenu:function(){var a=c.getClientRect(this.getDom());a.right-=5,a.left+=2,a.width-=7,a.top-=4,a.bottom+=4,a.height+=8,this.subMenu.showAnchorRect(a,!0,!0)},hideSubMenu:function(){this.subMenu.hide()}},a.inherits(j,d),a.extend(j.prototype,f,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.Menu,d=baidu.editor.ui.SplitButton,e=baidu.editor.ui.Combox=function(a){this.initOptions(a),this.initCombox()};e.prototype={uiName:\"combox\",onbuttonclick:function(){this.showPopup()},initCombox:function(){var a=this;this.items=this.items||[];for(var b=0;b<this.items.length;b++){var d=this.items[b];d.uiName=\"listitem\",d.index=b,d.onclick=function(){a.selectByIndex(this.index)}}this.popup=new c({items:this.items,uiName:\"list\",editor:this.editor,captureWheel:!0,combox:this}),this.initSplitButton()},_SplitButton_postRender:d.prototype.postRender,postRender:function(){this._SplitButton_postRender(),this.setLabel(this.label||\"\"),this.setValue(this.initValue||\"\")},showPopup:function(){var a=b.getClientRect(this.getDom());a.top+=1,a.bottom-=1,a.height-=2,this.popup.showAnchorRect(a)},getValue:function(){return this.value},setValue:function(a){var b=this.indexByValue(a);b!=-1?(this.selectedIndex=b,this.setLabel(this.items[b].label),this.value=this.items[b].value):(this.selectedIndex=-1,this.setLabel(this.getLabelForUnknowValue(a)),this.value=a)},setLabel:function(a){this.getDom(\"button_body\").innerHTML=a,this.label=a},getLabelForUnknowValue:function(a){return a},indexByValue:function(a){for(var b=0;b<this.items.length;b++)if(a==this.items[b].value)return b;return-1},getItem:function(a){return this.items[a]},selectByIndex:function(a){a<this.items.length&&this.fireEvent(\"select\",a)!==!1&&(this.selectedIndex=a,this.value=this.items[a].value,this.setLabel(this.items[a].label))}},a.inherits(e,d)}(),function(){var a,b,c,d=baidu.editor.utils,e=baidu.editor.dom.domUtils,f=baidu.editor.ui.uiUtils,g=baidu.editor.ui.Mask,h=baidu.editor.ui.UIBase,i=baidu.editor.ui.Button,j=baidu.editor.ui.Dialog=function(a){if(a.name){var b=a.name,c=a.cssRules;a.className||(a.className=\"edui-for-\"+b),c&&(a.cssRules=\".edui-for-\"+b+\" .edui-dialog-content  {\"+c+\"}\")}this.initOptions(d.extend({autoReset:!0,draggable:!0,onok:function(){},oncancel:function(){},onclose:function(a,b){return b?this.onok():this.oncancel()},holdScroll:!1},a)),this.initDialog()};j.prototype={draggable:!1,uiName:\"dialog\",initDialog:function(){var e=this,f=this.editor.options.theme;if(this.cssRules&&(this.cssRules=\".edui-\"+f+\" \"+this.cssRules,d.cssRule(\"edui-customize-\"+this.name+\"-style\",this.cssRules)),this.initUIBase(),this.modalMask=a||(a=new g({className:\"edui-dialog-modalmask\",theme:f,onclick:function(){c&&c.close(!1)}})),this.dragMask=b||(b=new g({className:\"edui-dialog-dragmask\",theme:f})),this.closeButton=new i({className:\"edui-dialog-closebutton\",title:e.closeDialog,theme:f,onclick:function(){e.close(!1)}}),this.fullscreen&&this.initResizeEvent(),this.buttons)for(var h=0;h<this.buttons.length;h++)this.buttons[h]instanceof i||(this.buttons[h]=new i(d.extend(this.buttons[h],{editor:this.editor},!0)))},initResizeEvent:function(){var a=this;e.on(window,\"resize\",function(){a._hidden||void 0===a._hidden||(a.__resizeTimer&&window.clearTimeout(a.__resizeTimer),a.__resizeTimer=window.setTimeout(function(){a.__resizeTimer=null;var b=a.getDom(),c=a.getDom(\"content\"),d=UE.ui.uiUtils.getClientRect(b),e=UE.ui.uiUtils.getClientRect(c),g=f.getViewportRect();c.style.width=g.width-d.width+e.width+\"px\",c.style.height=g.height-d.height+e.height+\"px\",b.style.width=g.width+\"px\",b.style.height=g.height+\"px\",a.fireEvent(\"resize\")},100))})},fitSize:function(){var a=this.getDom(\"body\"),b=this.mesureSize();return a.style.width=b.width+\"px\",a.style.height=b.height+\"px\",b},safeSetOffset:function(a){var b=this,c=b.getDom(),d=f.getViewportRect(),e=f.getClientRect(c),g=a.left;g+e.width>d.right&&(g=d.right-e.width);var h=a.top;h+e.height>d.bottom&&(h=d.bottom-e.height),c.style.left=Math.max(g,0)+\"px\",c.style.top=Math.max(h,0)+\"px\"},showAtCenter:function(){var a=f.getViewportRect();if(this.fullscreen){var b=this.getDom(),c=this.getDom(\"content\");b.style.display=\"block\";var d=UE.ui.uiUtils.getClientRect(b),g=UE.ui.uiUtils.getClientRect(c);b.style.left=\"-100000px\",c.style.width=a.width-d.width+g.width+\"px\",c.style.height=a.height-d.height+g.height+\"px\",b.style.width=a.width+\"px\",b.style.height=a.height+\"px\",b.style.left=0,this._originalContext={html:{overflowX:document.documentElement.style.overflowX,overflowY:document.documentElement.style.overflowY},body:{overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY}},document.documentElement.style.overflowX=\"hidden\",document.documentElement.style.overflowY=\"hidden\",document.body.style.overflowX=\"hidden\",document.body.style.overflowY=\"hidden\"}else{this.getDom().style.display=\"\";var h=this.fitSize(),i=0|this.getDom(\"titlebar\").offsetHeight,j=a.width/2-h.width/2,k=a.height/2-(h.height-i)/2-i,l=this.getDom();this.safeSetOffset({left:Math.max(0|j,0),top:Math.max(0|k,0)}),e.hasClass(l,\"edui-state-centered\")||(l.className+=\" edui-state-centered\")}this._show()},getContentHtml:function(){var a=\"\";return\"string\"==typeof this.content?a=this.content:this.iframeUrl&&(a='<span id=\"'+this.id+'_contmask\" class=\"dialogcontmask\"></span><iframe id=\"'+this.id+'_iframe\" class=\"%%-iframe\" height=\"100%\" width=\"100%\" frameborder=\"0\" src=\"'+this.iframeUrl+'\"></iframe>'),a},getHtmlTpl:function(){var a=\"\";if(this.buttons){for(var b=[],c=0;c<this.buttons.length;c++)b[c]=this.buttons[c].renderHtml();a='<div class=\"%%-foot\"><div id=\"##_buttons\" class=\"%%-buttons\">'+b.join(\"\")+\"</div></div>\"}return'<div id=\"##\" class=\"%%\"><div '+(this.fullscreen?'class=\"%%-wrap edui-dialog-fullscreen-flag\"':'class=\"%%\"')+'><div id=\"##_body\" class=\"%%-body\"><div class=\"%%-shadow\"></div><div id=\"##_titlebar\" class=\"%%-titlebar\"><div class=\"%%-draghandle\" onmousedown=\"$$._onTitlebarMouseDown(event, this);\"><span class=\"%%-caption\">'+(this.title||\"\")+\"</span></div>\"+this.closeButton.renderHtml()+'</div><div id=\"##_content\" class=\"%%-content\">'+(this.autoReset?\"\":this.getContentHtml())+\"</div>\"+a+\"</div></div></div>\"},postRender:function(){this.modalMask.getDom()||(this.modalMask.render(),this.modalMask.hide()),this.dragMask.getDom()||(this.dragMask.render(),this.dragMask.hide());var a=this;if(this.addListener(\"show\",function(){a.modalMask.show(this.getDom().style.zIndex-2)}),this.addListener(\"hide\",function(){a.modalMask.hide()}),this.buttons)for(var b=0;b<this.buttons.length;b++)this.buttons[b].postRender();e.on(window,\"resize\",function(){setTimeout(function(){a.isHidden()||a.safeSetOffset(f.getClientRect(a.getDom()))})}),this._hide()},mesureSize:function(){var a=this.getDom(\"body\"),b=f.getClientRect(this.getDom(\"content\")).width,c=a.style;return c.width=b,f.getClientRect(a)},_onTitlebarMouseDown:function(a,b){if(this.draggable){var c,d=(f.getViewportRect(),this);f.startDrag(a,{ondragstart:function(){c=f.getClientRect(d.getDom()),d.getDom(\"contmask\").style.visibility=\"visible\",d.dragMask.show(d.getDom().style.zIndex-1)},ondragmove:function(a,b){var e=c.left+a,f=c.top+b;d.safeSetOffset({left:e,top:f})},ondragstop:function(){d.getDom(\"contmask\").style.visibility=\"hidden\",e.removeClasses(d.getDom(),[\"edui-state-centered\"]),d.dragMask.hide()}})}},reset:function(){this.getDom(\"content\").innerHTML=this.getContentHtml(),this.fireEvent(\"dialogafterreset\")},_show:function(){this._hidden&&(this.getDom().style.display=\"\",this.editor.container.style.zIndex&&(this.getDom().style.zIndex=1*this.editor.container.style.zIndex+10),this._hidden=!1,this.fireEvent(\"show\"),baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=this.getDom().style.zIndex-4)},isHidden:function(){return this._hidden},_hide:function(){if(!this._hidden){var a=this.getDom();a.style.display=\"none\",a.style.zIndex=\"\",a.style.width=\"\",a.style.height=\"\",this._hidden=!0,this.fireEvent(\"hide\")}},open:function(){if(this.autoReset)try{this.reset()}catch(a){this.render(),this.open()}if(this.showAtCenter(),this.iframeUrl)try{this.getDom(\"iframe\").focus()}catch(b){}c=this},_onCloseButtonClick:function(a,b){this.close(!1)},close:function(a){if(this.fireEvent(\"close\",a)!==!1){this.fullscreen&&(document.documentElement.style.overflowX=this._originalContext.html.overflowX,document.documentElement.style.overflowY=this._originalContext.html.overflowY,document.body.style.overflowX=this._originalContext.body.overflowX,document.body.style.overflowY=this._originalContext.body.overflowY,delete this._originalContext),this._hide();var b=this.getDom(\"content\"),c=this.getDom(\"iframe\");if(b&&c){var d=c.contentDocument||c.contentWindow.document;d&&(d.body.innerHTML=\"\"),e.remove(b)}}}},d.inherits(j,h)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Menu,c=baidu.editor.ui.SplitButton,d=baidu.editor.ui.MenuButton=function(a){this.initOptions(a),this.initMenuButton()};d.prototype={initMenuButton:function(){var a=this;this.uiName=\"menubutton\",this.popup=new b({items:a.items,className:a.className,editor:a.editor}),this.popup.addListener(\"show\",function(){for(var b=this,c=0;c<b.items.length;c++)b.items[c].removeState(\"checked\"),b.items[c].value==a._value&&(b.items[c].addState(\"checked\"),this.value=a._value)}),this.initSplitButton()},setValue:function(a){this._value=a}},a.inherits(d,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Popup,c=baidu.editor.ui.SplitButton,d=baidu.editor.ui.MultiMenuPop=function(a){this.initOptions(a),this.initMultiMenu()};d.prototype={initMultiMenu:function(){var a=this;this.popup=new b({content:\"\",editor:a.editor,iframe_rendered:!1,onshow:function(){this.iframe_rendered||(this.iframe_rendered=!0,this.getDom(\"content\").innerHTML='<iframe id=\"'+a.id+'_iframe\" src=\"'+a.iframeUrl+'\" frameborder=\"0\"></iframe>',a.editor.container.style.zIndex&&(this.getDom().style.zIndex=1*a.editor.container.style.zIndex+1))}}),this.onbuttonclick=function(){this.showPopup()},this.initSplitButton()}},a.inherits(d,c)}(),function(){function a(a){var b=a.target||a.srcElement,c=g.findParent(b,function(a){return g.hasClass(a,\"edui-shortcutmenu\")||g.hasClass(a,\"edui-popup\")},!0);if(!c)for(var d,e=0;d=h[e++];)d.hide()}var b,c=baidu.editor.ui,d=c.UIBase,e=c.uiUtils,f=baidu.editor.utils,g=baidu.editor.dom.domUtils,h=[],i=!1,j=c.ShortCutMenu=function(a){this.initOptions(a),this.initShortCutMenu()};j.postHide=a,j.prototype={isHidden:!0,SPACE:5,initShortCutMenu:function(){this.items=this.items||[],this.initUIBase(),this.initItems(),this.initEvent(),h.push(this)},initEvent:function(){var a=this,c=a.editor.document;g.on(c,\"mousemove\",function(c){if(a.isHidden===!1){if(a.getSubMenuMark()||\"contextmenu\"==a.eventType)return;var d=!0,e=a.getDom(),f=e.offsetWidth,g=e.offsetHeight,h=f/2+a.SPACE,i=g/2,j=Math.abs(c.screenX-a.left),k=Math.abs(c.screenY-a.top);clearTimeout(b),b=setTimeout(function(){k>0&&k<i?a.setOpacity(e,\"1\"):k>i&&k<i+70?(a.setOpacity(e,\"0.5\"),d=!1):k>i+70&&k<i+140&&a.hide(),d&&j>0&&j<h?a.setOpacity(e,\"1\"):j>h&&j<h+70?a.setOpacity(e,\"0.5\"):j>h+70&&j<h+140&&a.hide()})}}),browser.chrome&&g.on(c,\"mouseout\",function(b){var c=b.relatedTarget||b.toElement;null!=c&&\"HTML\"!=c.tagName||a.hide()}),a.editor.addListener(\"afterhidepop\",function(){a.isHidden||(i=!0)})},initItems:function(){if(f.isArray(this.items))for(var a=0,b=this.items.length;a<b;a++){var d=this.items[a].toLowerCase();c[d]&&(this.items[a]=new c[d](this.editor),this.items[a].className+=\" edui-shortcutsubmenu \")}},setOpacity:function(a,b){browser.ie&&browser.version<9?a.style.filter=\"alpha(opacity = \"+100*parseFloat(b)+\");\":a.style.opacity=b},getSubMenuMark:function(){i=!1;for(var a,b=e.getFixedLayer(),c=g.getElementsByTagName(b,\"div\",function(a){return g.hasClass(a,\"edui-shortcutsubmenu edui-popup\")}),d=0;a=c[d++];)\"none\"!=a.style.display&&(i=!0);return i},show:function(a,b){function c(a){a.left<0&&(a.left=0),a.top<0&&(a.top=0),i.style.cssText=\"position:absolute;left:\"+a.left+\"px;top:\"+a.top+\"px;\"}function d(a){a.tagName||(a=a.getDom()),h.left=parseInt(a.style.left),h.top=parseInt(a.style.top),h.top-=i.offsetHeight+15,c(h)}var f=this,h={},i=this.getDom(),j=e.getFixedLayer();if(f.eventType=a.type,i.style.cssText=\"display:block;left:-9999px\",\"contextmenu\"==a.type&&b){var k=g.getElementsByTagName(j,\"div\",\"edui-contextmenu\")[0];k?d(k):f.editor.addListener(\"aftershowcontextmenu\",function(a,b){d(b)})}else h=e.getViewportOffsetByEvent(a),h.top-=i.offsetHeight+f.SPACE,h.left+=f.SPACE+20,c(h),f.setOpacity(i,.2);f.isHidden=!1,f.left=a.screenX+i.offsetWidth/2-f.SPACE,f.top=a.screenY-i.offsetHeight/2-f.SPACE,f.editor&&(i.style.zIndex=1*f.editor.container.style.zIndex+10,j.style.zIndex=i.style.zIndex-1)},hide:function(){this.getDom()&&(this.getDom().style.display=\"none\"),this.isHidden=!0},postRender:function(){if(f.isArray(this.items))for(var a,b=0;a=this.items[b++];)a.postRender()},getHtmlTpl:function(){var a;if(f.isArray(this.items)){a=[];for(var b=0;b<this.items.length;b++)a[b]=this.items[b].renderHtml();a=a.join(\"\")}else a=this.items;return'<div id=\"##\" class=\"%% edui-toolbar\" data-src=\"shortcutmenu\" onmousedown=\"return false;\" onselectstart=\"return false;\" >'+a+\"</div>\"}},f.inherits(j,d),g.on(document,\"mousedown\",function(b){a(b)}),g.on(window,\"scroll\",function(b){a(b)})}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.Breakline=function(a){this.initOptions(a),this.initSeparator()};c.prototype={uiName:\"Breakline\",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return\"<br/>\"}},a.inherits(c,b)}(),function(){var a=baidu.editor.utils,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.Message=function(a){this.initOptions(a),this.initMessage()};d.prototype={initMessage:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-message %%\"> <div id=\"##_closer\" class=\"edui-message-closer\">×</div> <div id=\"##_body\" class=\"edui-message-body edui-message-type-info\"> <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe> <div class=\"edui-shadow\"></div> <div id=\"##_content\" class=\"edui-message-content\">  </div> </div></div>'},reset:function(a){var b=this;a.keepshow||(clearTimeout(this.timer),b.timer=setTimeout(function(){b.hide()},a.timeout||4e3)),void 0!==a.content&&b.setContent(a.content),void 0!==a.type&&b.setType(a.type),b.show()},postRender:function(){var a=this,c=this.getDom(\"closer\");c&&b.on(c,\"click\",function(){a.hide()})},setContent:function(a){this.getDom(\"content\").innerHTML=a},setType:function(a){a=a||\"info\";var b=this.getDom(\"body\");b.className=b.className.replace(/edui-message-type-[\\w-]+/,\"edui-message-type-\"+a)},getContent:function(){return this.getDom(\"content\").innerHTML},getType:function(){var a=this.getDom(\"body\").match(/edui-message-type-([\\w-]+)/);return a?a[1]:\"\"},show:function(){this.getDom().style.display=\"block\"},hide:function(){var a=this.getDom();a&&(a.style.display=\"none\",a.parentNode&&a.parentNode.removeChild(a))}},a.inherits(d,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui,c=b.Dialog;b.buttons={},b.Dialog=function(a){var b=new c(a);return b.addListener(\"hide\",function(){if(b.editor){var a=b.editor;try{if(browser.gecko){var c=a.window.scrollY,d=a.window.scrollX;a.body.focus(),a.window.scrollTo(d,c)}else a.focus()}catch(e){}}}),b};for(var d,e={anchor:\"~/dialogs/anchor/anchor.html\",insertimage:\"~/dialogs/image/image.html\",link:\"~/dialogs/link/link.html\",spechars:\"~/dialogs/spechars/spechars.html\",searchreplace:\"~/dialogs/searchreplace/searchreplace.html\",map:\"~/dialogs/map/map.html\",gmap:\"~/dialogs/gmap/gmap.html\",insertvideo:\"~/dialogs/video/video.html\",help:\"~/dialogs/help/help.html\",preview:\"~/dialogs/preview/preview.html\",emotion:\"~/dialogs/emotion/emotion.html\",wordimage:\"~/dialogs/wordimage/wordimage.html\",attachment:\"~/dialogs/attachment/attachment.html\",insertframe:\"~/dialogs/insertframe/insertframe.html\",edittip:\"~/dialogs/table/edittip.html\",edittable:\"~/dialogs/table/edittable.html\",edittd:\"~/dialogs/table/edittd.html\",webapp:\"~/dialogs/webapp/webapp.html\",snapscreen:\"~/dialogs/snapscreen/snapscreen.html\",\nscrawl:\"~/dialogs/scrawl/scrawl.html\",music:\"~/dialogs/music/music.html\",template:\"~/dialogs/template/template.html\",background:\"~/dialogs/background/background.html\",charts:\"~/dialogs/charts/charts.html\"},f=[\"undo\",\"redo\",\"formatmatch\",\"bold\",\"italic\",\"underline\",\"fontborder\",\"touppercase\",\"tolowercase\",\"strikethrough\",\"subscript\",\"superscript\",\"source\",\"indent\",\"outdent\",\"blockquote\",\"pasteplain\",\"pagebreak\",\"selectall\",\"print\",\"horizontal\",\"removeformat\",\"time\",\"date\",\"unlink\",\"insertparagraphbeforetable\",\"insertrow\",\"insertcol\",\"mergeright\",\"mergedown\",\"deleterow\",\"deletecol\",\"splittorows\",\"splittocols\",\"splittocells\",\"mergecells\",\"deletetable\",\"drafts\"],g=0;d=f[g++];)d=d.toLowerCase(),b[d]=function(a){return function(c){var d=new b.Button({className:\"edui-for-\"+a,title:c.options.labelMap[a]||c.getLang(\"labelMap.\"+a)||\"\",onclick:function(){c.execCommand(a)},theme:c.options.theme,showText:!1});return b.buttons[a]=d,c.addListener(\"selectionchange\",function(b,e,f){var g=c.queryCommandState(a);g==-1?(d.setDisabled(!0),d.setChecked(!1)):f||(d.setDisabled(!1),d.setChecked(g))}),d}}(d);b.cleardoc=function(a){var c=new b.Button({className:\"edui-for-cleardoc\",title:a.options.labelMap.cleardoc||a.getLang(\"labelMap.cleardoc\")||\"\",theme:a.options.theme,onclick:function(){confirm(a.getLang(\"confirmClear\"))&&a.execCommand(\"cleardoc\")}});return b.buttons.cleardoc=c,a.addListener(\"selectionchange\",function(){c.setDisabled(a.queryCommandState(\"cleardoc\")==-1)}),c};var h={justify:[\"left\",\"right\",\"center\",\"justify\"],imagefloat:[\"none\",\"left\",\"center\",\"right\"],directionality:[\"ltr\",\"rtl\"]};for(var i in h)!function(a,c){for(var d,e=0;d=c[e++];)!function(c){b[a.replace(\"float\",\"\")+c]=function(d){var e=new b.Button({className:\"edui-for-\"+a.replace(\"float\",\"\")+c,title:d.options.labelMap[a.replace(\"float\",\"\")+c]||d.getLang(\"labelMap.\"+a.replace(\"float\",\"\")+c)||\"\",theme:d.options.theme,onclick:function(){d.execCommand(a,c)}});return b.buttons[a]=e,d.addListener(\"selectionchange\",function(b,f,g){e.setDisabled(d.queryCommandState(a)==-1),e.setChecked(d.queryCommandValue(a)==c&&!g)}),e}}(d)}(i,h[i]);for(var d,g=0;d=[\"backcolor\",\"forecolor\"][g++];)b[d]=function(a){return function(c){var d=new b.ColorButton({className:\"edui-for-\"+a,color:\"default\",title:c.options.labelMap[a]||c.getLang(\"labelMap.\"+a)||\"\",editor:c,onpickcolor:function(b,d){c.execCommand(a,d)},onpicknocolor:function(){c.execCommand(a,\"default\"),this.setColor(\"transparent\"),this.color=\"default\"},onbuttonclick:function(){c.execCommand(a,this.color)}});return b.buttons[a]=d,c.addListener(\"selectionchange\",function(){d.setDisabled(c.queryCommandState(a)==-1)}),d}}(d);var j={noOk:[\"searchreplace\",\"help\",\"spechars\",\"webapp\",\"preview\"],ok:[\"attachment\",\"anchor\",\"link\",\"insertimage\",\"map\",\"gmap\",\"insertframe\",\"wordimage\",\"insertvideo\",\"insertframe\",\"edittip\",\"edittable\",\"edittd\",\"scrawl\",\"template\",\"music\",\"background\",\"charts\"]};for(var i in j)!function(c,d){for(var f,g=0;f=d[g++];)browser.opera&&\"searchreplace\"===f||!function(d){b[d]=function(f,g,h){g=g||(f.options.iframeUrlMap||{})[d]||e[d],h=f.options.labelMap[d]||f.getLang(\"labelMap.\"+d)||\"\";var i;g&&(i=new b.Dialog(a.extend({iframeUrl:f.ui.mapUrl(g),editor:f,className:\"edui-for-\"+d,title:h,holdScroll:\"insertimage\"===d,fullscreen:/charts|preview/.test(d),closeDialog:f.getLang(\"closeDialog\")},\"ok\"==c?{buttons:[{className:\"edui-okbutton\",label:f.getLang(\"ok\"),editor:f,onclick:function(){i.close(!0)}},{className:\"edui-cancelbutton\",label:f.getLang(\"cancel\"),editor:f,onclick:function(){i.close(!1)}}]}:{})),f.ui._dialogs[d+\"Dialog\"]=i);var j=new b.Button({className:\"edui-for-\"+d,title:h,onclick:function(){if(i)switch(d){case\"wordimage\":var a=f.execCommand(\"wordimage\");a&&a.length&&(i.render(),i.open());break;case\"scrawl\":f.queryCommandState(\"scrawl\")!=-1&&(i.render(),i.open());break;default:i.render(),i.open()}},theme:f.options.theme,disabled:\"scrawl\"==d&&f.queryCommandState(\"scrawl\")==-1||\"charts\"==d});return b.buttons[d]=j,f.addListener(\"selectionchange\",function(){var a={edittable:1};if(!(d in a)){var b=f.queryCommandState(d);j.getDom()&&(j.setDisabled(b==-1),j.setChecked(b))}}),j}}(f.toLowerCase())}(i,j[i]);b.snapscreen=function(a,c,d){d=a.options.labelMap.snapscreen||a.getLang(\"labelMap.snapscreen\")||\"\";var f=new b.Button({className:\"edui-for-snapscreen\",title:d,onclick:function(){a.execCommand(\"snapscreen\")},theme:a.options.theme});if(b.buttons.snapscreen=f,c=c||(a.options.iframeUrlMap||{}).snapscreen||e.snapscreen){var g=new b.Dialog({iframeUrl:a.ui.mapUrl(c),editor:a,className:\"edui-for-snapscreen\",title:d,buttons:[{className:\"edui-okbutton\",label:a.getLang(\"ok\"),editor:a,onclick:function(){g.close(!0)}},{className:\"edui-cancelbutton\",label:a.getLang(\"cancel\"),editor:a,onclick:function(){g.close(!1)}}]});g.render(),a.ui._dialogs.snapscreenDialog=g}return a.addListener(\"selectionchange\",function(){f.setDisabled(a.queryCommandState(\"snapscreen\")==-1)}),f},b.insertcode=function(c,d,e){d=c.options.insertcode||[],e=c.options.labelMap.insertcode||c.getLang(\"labelMap.insertcode\")||\"\";var f=[];a.each(d,function(a,b){f.push({label:a,value:b,theme:c.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" >'+(this.label||\"\")+\"</div>\"}})});var g=new b.Combox({editor:c,items:f,onselect:function(a,b){c.execCommand(\"insertcode\",this.items[b].value)},onbuttonclick:function(){this.showPopup()},title:e,initValue:e,className:\"edui-for-insertcode\",indexByValue:function(a){if(a)for(var b,c=0;b=this.items[c];c++)if(b.value.indexOf(a)!=-1)return c;return-1}});return b.buttons.insertcode=g,c.addListener(\"selectionchange\",function(a,b,d){if(!d){var f=c.queryCommandState(\"insertcode\");if(f==-1)g.setDisabled(!0);else{g.setDisabled(!1);var h=c.queryCommandValue(\"insertcode\");if(!h)return void g.setValue(e);h&&(h=h.replace(/['\"]/g,\"\").split(\",\")[0]),g.setValue(h)}}}),g},b.fontfamily=function(c,d,e){if(d=c.options.fontfamily||[],e=c.options.labelMap.fontfamily||c.getLang(\"labelMap.fontfamily\")||\"\",d.length){for(var f,g=0,h=[];f=d[g];g++){var i=c.getLang(\"fontfamily\")[f.name]||\"\";!function(b,d){h.push({label:b,value:d,theme:c.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" style=\"font-family:'+a.unhtml(this.value)+'\">'+(this.label||\"\")+\"</div>\"}})}(f.label||i,f.val)}var j=new b.Combox({editor:c,items:h,onselect:function(a,b){c.execCommand(\"FontFamily\",this.items[b].value)},onbuttonclick:function(){this.showPopup()},title:e,initValue:e,className:\"edui-for-fontfamily\",indexByValue:function(a){if(a)for(var b,c=0;b=this.items[c];c++)if(b.value.indexOf(a)!=-1)return c;return-1}});return b.buttons.fontfamily=j,c.addListener(\"selectionchange\",function(a,b,d){if(!d){var e=c.queryCommandState(\"FontFamily\");if(e==-1)j.setDisabled(!0);else{j.setDisabled(!1);var f=c.queryCommandValue(\"FontFamily\");f&&(f=f.replace(/['\"]/g,\"\").split(\",\")[0]),j.setValue(f)}}}),j}},b.fontsize=function(a,c,d){if(d=a.options.labelMap.fontsize||a.getLang(\"labelMap.fontsize\")||\"\",c=c||a.options.fontsize||[],c.length){for(var e=[],f=0;f<c.length;f++){var g=c[f]+\"px\";e.push({label:g,value:g,theme:a.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" style=\"line-height:1;font-size:'+this.value+'\">'+(this.label||\"\")+\"</div>\"}})}var h=new b.Combox({editor:a,items:e,title:d,initValue:d,onselect:function(b,c){a.execCommand(\"FontSize\",this.items[c].value)},onbuttonclick:function(){this.showPopup()},className:\"edui-for-fontsize\"});return b.buttons.fontsize=h,a.addListener(\"selectionchange\",function(b,c,d){if(!d){var e=a.queryCommandState(\"FontSize\");e==-1?h.setDisabled(!0):(h.setDisabled(!1),h.setValue(a.queryCommandValue(\"FontSize\")))}}),h}},b.paragraph=function(c,d,e){if(e=c.options.labelMap.paragraph||c.getLang(\"labelMap.paragraph\")||\"\",d=c.options.paragraph||[],!a.isEmptyObject(d)){var f=[];for(var g in d)f.push({value:g,label:d[g]||c.getLang(\"paragraph\")[g],theme:c.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\"><span class=\"edui-for-'+this.value+'\">'+(this.label||\"\")+\"</span></div>\"}});var h=new b.Combox({editor:c,items:f,title:e,initValue:e,className:\"edui-for-paragraph\",onselect:function(a,b){c.execCommand(\"Paragraph\",this.items[b].value)},onbuttonclick:function(){this.showPopup()}});return b.buttons.paragraph=h,c.addListener(\"selectionchange\",function(a,b,d){if(!d){var e=c.queryCommandState(\"Paragraph\");if(e==-1)h.setDisabled(!0);else{h.setDisabled(!1);var f=c.queryCommandValue(\"Paragraph\"),g=h.indexByValue(f);g!=-1?h.setValue(f):h.setValue(h.initValue)}}}),h}},b.customstyle=function(a){var c=a.options.customstyle||[],d=a.options.labelMap.customstyle||a.getLang(\"labelMap.customstyle\")||\"\";if(c.length){for(var e,f=a.getLang(\"customstyle\"),g=0,h=[];e=c[g++];)!function(b){var c={};c.label=b.label?b.label:f[b.name],c.style=b.style,c.className=b.className,c.tag=b.tag,h.push({label:c.label,value:c,theme:a.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\"><'+c.tag+\" \"+(c.className?' class=\"'+c.className+'\"':\"\")+(c.style?' style=\"'+c.style+'\"':\"\")+\">\"+c.label+\"</\"+c.tag+\"></div>\"}})}(e);var i=new b.Combox({editor:a,items:h,title:d,initValue:d,className:\"edui-for-customstyle\",onselect:function(b,c){a.execCommand(\"customstyle\",this.items[c].value)},onbuttonclick:function(){this.showPopup()},indexByValue:function(a){for(var b,c=0;b=this.items[c++];)if(b.label==a)return c-1;return-1}});return b.buttons.customstyle=i,a.addListener(\"selectionchange\",function(b,c,d){if(!d){var e=a.queryCommandState(\"customstyle\");if(e==-1)i.setDisabled(!0);else{i.setDisabled(!1);var f=a.queryCommandValue(\"customstyle\"),g=i.indexByValue(f);g!=-1?i.setValue(f):i.setValue(i.initValue)}}}),i}},b.inserttable=function(a,c,d){d=a.options.labelMap.inserttable||a.getLang(\"labelMap.inserttable\")||\"\";var e=new b.TableButton({editor:a,title:d,className:\"edui-for-inserttable\",onpicktable:function(b,c,d){a.execCommand(\"InsertTable\",{numRows:d,numCols:c,border:1})},onbuttonclick:function(){this.showPopup()}});return b.buttons.inserttable=e,a.addListener(\"selectionchange\",function(){e.setDisabled(a.queryCommandState(\"inserttable\")==-1)}),e},b.lineheight=function(a){var c=a.options.lineheight||[];if(c.length){for(var d,e=0,f=[];d=c[e++];)f.push({label:d,value:d,theme:a.options.theme,onclick:function(){a.execCommand(\"lineheight\",this.value)}});var g=new b.MenuButton({editor:a,className:\"edui-for-lineheight\",title:a.options.labelMap.lineheight||a.getLang(\"labelMap.lineheight\")||\"\",items:f,onbuttonclick:function(){var b=a.queryCommandValue(\"LineHeight\")||this.value;a.execCommand(\"LineHeight\",b)}});return b.buttons.lineheight=g,a.addListener(\"selectionchange\",function(){var b=a.queryCommandState(\"LineHeight\");if(b==-1)g.setDisabled(!0);else{g.setDisabled(!1);var c=a.queryCommandValue(\"LineHeight\");c&&g.setValue((c+\"\").replace(/cm/,\"\")),g.setChecked(b)}}),g}};for(var k,l=[\"top\",\"bottom\"],m=0;k=l[m++];)!function(a){b[\"rowspacing\"+a]=function(c){var d=c.options[\"rowspacing\"+a]||[];if(!d.length)return null;for(var e,f=0,g=[];e=d[f++];)g.push({label:e,value:e,theme:c.options.theme,onclick:function(){c.execCommand(\"rowspacing\",this.value,a)}});var h=new b.MenuButton({editor:c,className:\"edui-for-rowspacing\"+a,title:c.options.labelMap[\"rowspacing\"+a]||c.getLang(\"labelMap.rowspacing\"+a)||\"\",items:g,onbuttonclick:function(){var b=c.queryCommandValue(\"rowspacing\",a)||this.value;c.execCommand(\"rowspacing\",b,a)}});return b.buttons[a]=h,c.addListener(\"selectionchange\",function(){var b=c.queryCommandState(\"rowspacing\",a);if(b==-1)h.setDisabled(!0);else{h.setDisabled(!1);var d=c.queryCommandValue(\"rowspacing\",a);d&&h.setValue((d+\"\").replace(/%/,\"\")),h.setChecked(b)}}),h}}(k);for(var n,o=[\"insertorderedlist\",\"insertunorderedlist\"],p=0;n=o[p++];)!function(a){b[a]=function(c){var d=c.options[a],e=function(){c.execCommand(a,this.value)},f=[];for(var g in d)f.push({label:d[g]||c.getLang()[a][g]||\"\",value:g,theme:c.options.theme,onclick:e});var h=new b.MenuButton({editor:c,className:\"edui-for-\"+a,title:c.getLang(\"labelMap.\"+a)||\"\",items:f,onbuttonclick:function(){var b=c.queryCommandValue(a)||this.value;c.execCommand(a,b)}});return b.buttons[a]=h,c.addListener(\"selectionchange\",function(){var b=c.queryCommandState(a);if(b==-1)h.setDisabled(!0);else{h.setDisabled(!1);var d=c.queryCommandValue(a);h.setValue(d),h.setChecked(b)}}),h}}(n);b.fullscreen=function(a,c){c=a.options.labelMap.fullscreen||a.getLang(\"labelMap.fullscreen\")||\"\";var d=new b.Button({className:\"edui-for-fullscreen\",title:c,theme:a.options.theme,onclick:function(){a.ui&&a.ui.setFullScreen(!a.ui.isFullScreen()),this.setChecked(a.ui.isFullScreen())}});return b.buttons.fullscreen=d,a.addListener(\"selectionchange\",function(){var b=a.queryCommandState(\"fullscreen\");d.setDisabled(b==-1),d.setChecked(a.ui.isFullScreen())}),d},b.emotion=function(a,c){var d=\"emotion\",f=new b.MultiMenuPop({title:a.options.labelMap[d]||a.getLang(\"labelMap.\"+d)||\"\",editor:a,className:\"edui-for-\"+d,iframeUrl:a.ui.mapUrl(c||(a.options.iframeUrlMap||{})[d]||e[d])});return b.buttons[d]=f,a.addListener(\"selectionchange\",function(){f.setDisabled(a.queryCommandState(d)==-1)}),f},b.autotypeset=function(a){var c=new b.AutoTypeSetButton({editor:a,title:a.options.labelMap.autotypeset||a.getLang(\"labelMap.autotypeset\")||\"\",className:\"edui-for-autotypeset\",onbuttonclick:function(){a.execCommand(\"autotypeset\")}});return b.buttons.autotypeset=c,a.addListener(\"selectionchange\",function(){c.setDisabled(a.queryCommandState(\"autotypeset\")==-1)}),c},b.simpleupload=function(a){var c=\"simpleupload\",d=new b.Button({className:\"edui-for-\"+c,title:a.options.labelMap[c]||a.getLang(\"labelMap.\"+c)||\"\",onclick:function(){},theme:a.options.theme,showText:!1});return b.buttons[c]=d,a.addListener(\"ready\",function(){var b=d.getDom(\"body\"),c=b.children[0];a.fireEvent(\"simpleuploadbtnready\",c)}),a.addListener(\"selectionchange\",function(b,e,f){var g=a.queryCommandState(c);g==-1?(d.setDisabled(!0),d.setChecked(!1)):f||(d.setDisabled(!1),d.setChecked(g))}),d}}(),function(){function a(a){this.initOptions(a),this.initEditorUI()}var b=baidu.editor.utils,c=baidu.editor.ui.uiUtils,d=baidu.editor.ui.UIBase,e=baidu.editor.dom.domUtils,f=[];a.prototype={uiName:\"editor\",initEditorUI:function(){function a(a,b){a.setOpt({wordCount:!0,maximumWords:1e4,wordCountMsg:a.options.wordCountMsg||a.getLang(\"wordCountMsg\"),wordOverFlowMsg:a.options.wordOverFlowMsg||a.getLang(\"wordOverFlowMsg\")});var c=a.options,d=c.maximumWords,e=c.wordCountMsg,f=c.wordOverFlowMsg,g=b.getDom(\"wordcount\");if(c.wordCount){var h=a.getContentLength(!0);h>d?(g.innerHTML=f,a.fireEvent(\"wordcountoverflow\")):g.innerHTML=e.replace(\"{#leave}\",d-h).replace(\"{#count}\",h)}}this.editor.ui=this,this._dialogs={},this.initUIBase(),this._initToolbars();var b=this.editor,c=this;b.addListener(\"ready\",function(){function d(){a(b,c),e.un(b.document,\"click\",arguments.callee)}b.getDialog=function(a){return b.ui._dialogs[a+\"Dialog\"]},e.on(b.window,\"scroll\",function(a){baidu.editor.ui.Popup.postHide(a)}),b.ui._actualFrameWidth=b.options.initialFrameWidth,UE.browser.ie&&6===UE.browser.version&&b.container.ownerDocument.execCommand(\"BackgroundImageCache\",!1,!0),b.options.elementPathEnabled&&(b.ui.getDom(\"elementpath\").innerHTML='<div class=\"edui-editor-breadcrumb\">'+b.getLang(\"elementPathTip\")+\":</div>\"),b.options.wordCount&&(e.on(b.document,\"click\",d),b.ui.getDom(\"wordcount\").innerHTML=b.getLang(\"wordCountTip\")),b.ui._scale(),b.options.scaleEnabled?(b.autoHeightEnabled&&b.disableAutoHeight(),c.enableScale()):c.disableScale(),b.options.elementPathEnabled||b.options.wordCount||b.options.scaleEnabled||(b.ui.getDom(\"elementpath\").style.display=\"none\",b.ui.getDom(\"wordcount\").style.display=\"none\",b.ui.getDom(\"scale\").style.display=\"none\"),b.selection.isFocus()&&b.fireEvent(\"selectionchange\",!1,!0)}),b.addListener(\"mousedown\",function(a,b){var c=b.target||b.srcElement;baidu.editor.ui.Popup.postHide(b,c),baidu.editor.ui.ShortCutMenu.postHide(b)}),b.addListener(\"delcells\",function(){UE.ui.edittip&&new UE.ui.edittip(b),b.getDialog(\"edittip\").open()});var d,f,g=!1;b.addListener(\"afterpaste\",function(){b.queryCommandState(\"pasteplain\")||(baidu.editor.ui.PastePicker&&(d=new baidu.editor.ui.Popup({content:new baidu.editor.ui.PastePicker({editor:b}),editor:b,className:\"edui-wordpastepop\"}),d.render()),g=!0)}),b.addListener(\"afterinserthtml\",function(){clearTimeout(f),f=setTimeout(function(){if(d&&(g||b.ui._isTransfer)){if(d.isHidden()){var a=e.createElement(b.document,\"span\",{style:\"line-height:0px;\",innerHTML:\"\\ufeff\"}),c=b.selection.getRange();c.insertNode(a);var f=getDomNode(a,\"firstChild\",\"previousSibling\");f&&d.showAnchor(3==f.nodeType?f.parentNode:f),e.remove(a)}else d.show();delete b.ui._isTransfer,g=!1}},200)}),b.addListener(\"contextmenu\",function(a,b){baidu.editor.ui.Popup.postHide(b)}),b.addListener(\"keydown\",function(a,b){d&&d.dispose(b);var c=b.keyCode||b.which;b.altKey&&90==c&&UE.ui.buttons.fullscreen.onclick()}),b.addListener(\"wordcount\",function(b){a(this,c)}),b.addListener(\"selectionchange\",function(){b.options.elementPathEnabled&&c[(b.queryCommandState(\"elementpath\")==-1?\"dis\":\"en\")+\"ableElementPath\"](),b.options.scaleEnabled&&c[(b.queryCommandState(\"scale\")==-1?\"dis\":\"en\")+\"ableScale\"]()});var h=new baidu.editor.ui.Popup({editor:b,content:\"\",className:\"edui-bubble\",_onEditButtonClick:function(){this.hide(),b.ui._dialogs.linkDialog.open()},_onImgEditButtonClick:function(a){this.hide(),b.ui._dialogs[a]&&b.ui._dialogs[a].open()},_onImgSetFloat:function(a){this.hide(),b.execCommand(\"imagefloat\",a)},_setIframeAlign:function(a){var b=h.anchorEl,c=b.cloneNode(!0);switch(a){case-2:c.setAttribute(\"align\",\"\");break;case-1:c.setAttribute(\"align\",\"left\");break;case 1:c.setAttribute(\"align\",\"right\")}b.parentNode.insertBefore(c,b),e.remove(b),h.anchorEl=c,h.showAnchor(h.anchorEl)},_updateIframe:function(){var a=b._iframe=h.anchorEl;e.hasClass(a,\"ueditor_baidumap\")?(b.selection.getRange().selectNode(a).select(),b.ui._dialogs.mapDialog.open(),h.hide()):(b.ui._dialogs.insertframeDialog.open(),h.hide())},_onRemoveButtonClick:function(a){b.execCommand(a),this.hide()},queryAutoHide:function(a){return a&&a.ownerDocument==b.document&&(\"img\"==a.tagName.toLowerCase()||e.findParentByTagName(a,\"a\",!0))?a!==h.anchorEl:baidu.editor.ui.Popup.prototype.queryAutoHide.call(this,a)}});h.render(),b.options.imagePopup&&(b.addListener(\"mouseover\",function(a,c){c=c||window.event;var d=c.target||c.srcElement;if(b.ui._dialogs.insertframeDialog&&/iframe/gi.test(d.tagName)){var e=h.formatHtml(\"<nobr>\"+b.getLang(\"property\")+': <span onclick=$$._setIframeAlign(-2) class=\"edui-clickable\">'+b.getLang(\"default\")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(-1) class=\"edui-clickable\">'+b.getLang(\"justifyleft\")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(1) class=\"edui-clickable\">'+b.getLang(\"justifyright\")+'</span>&nbsp;&nbsp; <span onclick=\"$$._updateIframe( this);\" class=\"edui-clickable\">'+b.getLang(\"modify\")+\"</span></nobr>\");e?(h.getDom(\"content\").innerHTML=e,h.anchorEl=d,h.showAnchor(h.anchorEl)):h.hide()}}),b.addListener(\"selectionchange\",function(a,c){if(c){var d=\"\",f=\"\",g=b.selection.getRange().getClosedNode(),i=b.ui._dialogs;if(g&&\"IMG\"==g.tagName){var j=\"insertimageDialog\";if(g.className.indexOf(\"edui-faked-video\")==-1&&g.className.indexOf(\"edui-upload-video\")==-1||(j=\"insertvideoDialog\"),g.className.indexOf(\"edui-faked-webapp\")!=-1&&(j=\"webappDialog\"),g.src.indexOf(\"http://api.map.baidu.com\")!=-1&&(j=\"mapDialog\"),g.className.indexOf(\"edui-faked-music\")!=-1&&(j=\"musicDialog\"),g.src.indexOf(\"http://maps.google.com/maps/api/staticmap\")!=-1&&(j=\"gmapDialog\"),g.getAttribute(\"anchorname\")&&(j=\"anchorDialog\",d=h.formatHtml(\"<nobr>\"+b.getLang(\"property\")+': <span onclick=$$._onImgEditButtonClick(\"anchorDialog\") class=\"edui-clickable\">'+b.getLang(\"modify\")+\"</span>&nbsp;&nbsp;<span onclick=$$._onRemoveButtonClick('anchor') class=\\\"edui-clickable\\\">\"+b.getLang(\"delete\")+\"</span></nobr>\")),g.getAttribute(\"word_img\")&&(b.word_img=[g.getAttribute(\"word_img\")],j=\"wordimageDialog\"),(e.hasClass(g,\"loadingclass\")||e.hasClass(g,\"loaderrorclass\"))&&(j=\"\"),!i[j])return;f=\"<nobr>\"+b.getLang(\"property\")+': <span onclick=$$._onImgSetFloat(\"none\") class=\"edui-clickable\">'+b.getLang(\"default\")+'</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat(\"left\") class=\"edui-clickable\">'+b.getLang(\"justifyleft\")+'</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat(\"right\") class=\"edui-clickable\">'+b.getLang(\"justifyright\")+'</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat(\"center\") class=\"edui-clickable\">'+b.getLang(\"justifycenter\")+\"</span>&nbsp;&nbsp;<span onclick=\\\"$$._onImgEditButtonClick('\"+j+'\\');\" class=\"edui-clickable\">'+b.getLang(\"modify\")+\"</span></nobr>\",!d&&(d=h.formatHtml(f))}if(b.ui._dialogs.linkDialog){var k,l=b.queryCommandValue(\"link\");if(l&&(k=l.getAttribute(\"_href\")||l.getAttribute(\"href\",2))){var m=k;k.length>30&&(m=k.substring(0,20)+\"...\"),d&&(d+='<div style=\"height:5px;\"></div>'),d+=h.formatHtml(\"<nobr>\"+b.getLang(\"anthorMsg\")+': <a target=\"_blank\" href=\"'+k+'\" title=\"'+k+'\" >'+m+'</a> <span class=\"edui-clickable\" onclick=\"$$._onEditButtonClick();\">'+b.getLang(\"modify\")+'</span> <span class=\"edui-clickable\" onclick=\"$$._onRemoveButtonClick(\\'unlink\\');\"> '+b.getLang(\"clear\")+\"</span></nobr>\"),h.showAnchor(l)}}d?(h.getDom(\"content\").innerHTML=d,h.anchorEl=g||l,h.showAnchor(h.anchorEl)):h.hide()}}))},_initToolbars:function(){for(var a=this.editor,c=this.toolbars||[],d=[],e=[],f=0;f<c.length;f++){for(var g=c[f],h=new baidu.editor.ui.Toolbar({theme:a.options.theme}),i=0;i<g.length;i++){var j=g[i],k=null;if(\"string\"==typeof j){j=j.toLowerCase(),\"|\"==j&&(j=\"Separator\"),\"||\"==j&&(j=\"Breakline\");var l=baidu.editor.ui[j];if(l)if(b.isFunction(l))k=new baidu.editor.ui[j](a);else{if(l.id&&l.id!=a.key)continue;var m=l.execFn.call(a,a,j);if(m){if(void 0===l.index){h.add(m);continue}e.push({index:l.index,itemUI:m})}}if(\"fullscreen\"==j){d&&d[0]?d[0].items.splice(0,0,k):k&&h.items.splice(0,0,k);continue}}else k=j;k&&k.id&&h.add(k)}d[f]=h}b.each(e,function(a){h.add(a.itemUI,a.index)}),this.toolbars=d},getHtmlTpl:function(){return'<div id=\"##\" class=\"%%\"><div id=\"##_toolbarbox\" class=\"%%-toolbarbox\">'+(this.toolbars.length?'<div id=\"##_toolbarboxouter\" class=\"%%-toolbarboxouter\"><div class=\"%%-toolbarboxinner\">'+this.renderToolbarBoxHtml()+\"</div></div>\":\"\")+'<div id=\"##_toolbarmsg\" class=\"%%-toolbarmsg\" style=\"display:none;\"><div id = \"##_upload_dialog\" class=\"%%-toolbarmsg-upload\" onclick=\"$$.showWordImageDialog();\">'+this.editor.getLang(\"clickToUpload\")+'</div><div class=\"%%-toolbarmsg-close\" onclick=\"$$.hideToolbarMsg();\">x</div><div id=\"##_toolbarmsg_label\" class=\"%%-toolbarmsg-label\"></div><div style=\"height:0;overflow:hidden;clear:both;\"></div></div><div id=\"##_message_holder\" class=\"%%-messageholder\"></div></div><div id=\"##_iframeholder\" class=\"%%-iframeholder\"></div><div id=\"##_bottombar\" class=\"%%-bottomContainer\"><table><tr><td id=\"##_elementpath\" class=\"%%-bottombar\"></td><td id=\"##_wordcount\" class=\"%%-wordcount\"></td><td id=\"##_scale\" class=\"%%-scale\"><div class=\"%%-icon\"></div></td></tr></table></div><div id=\"##_scalelayer\"></div></div>'},showWordImageDialog:function(){this._dialogs.wordimageDialog.open()},renderToolbarBoxHtml:function(){for(var a=[],b=0;b<this.toolbars.length;b++)a.push(this.toolbars[b].renderHtml());return a.join(\"\")},setFullScreen:function(a){var b=this.editor,c=b.container.parentNode.parentNode;if(this._fullscreen!=a){if(this._fullscreen=a,this.editor.fireEvent(\"beforefullscreenchange\",a),baidu.editor.browser.gecko)var d=b.selection.getRange().createBookmark();if(a){for(;\"BODY\"!=c.tagName;){var e=baidu.editor.dom.domUtils.getComputedStyle(c,\"position\");f.push(e),c.style.position=\"static\",c=c.parentNode}this._bakHtmlOverflow=document.documentElement.style.overflow,this._bakBodyOverflow=document.body.style.overflow,this._bakAutoHeight=this.editor.autoHeightEnabled,this._bakScrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop),this._bakEditorContaninerWidth=b.iframe.parentNode.offsetWidth,this._bakAutoHeight&&(b.autoHeightEnabled=!1,this.editor.disableAutoHeight()),document.documentElement.style.overflow=\"hidden\",window.scrollTo(0,window.scrollY),this._bakCssText=this.getDom().style.cssText,this._bakCssText1=this.getDom(\"iframeholder\").style.cssText,b.iframe.parentNode.style.width=\"\",this._updateFullScreen()}else{for(;\"BODY\"!=c.tagName;)c.style.position=f.shift(),c=c.parentNode;this.getDom().style.cssText=this._bakCssText,this.getDom(\"iframeholder\").style.cssText=this._bakCssText1,this._bakAutoHeight&&(b.autoHeightEnabled=!0,this.editor.enableAutoHeight()),document.documentElement.style.overflow=this._bakHtmlOverflow,document.body.style.overflow=this._bakBodyOverflow,b.iframe.parentNode.style.width=this._bakEditorContaninerWidth+\"px\",window.scrollTo(0,this._bakScrollTop)}if(browser.gecko&&\"true\"===b.body.contentEditable){var g=document.createElement(\"input\");document.body.appendChild(g),b.body.contentEditable=!1,setTimeout(function(){g.focus(),setTimeout(function(){b.body.contentEditable=!0,b.fireEvent(\"fullscreenchanged\",a),b.selection.getRange().moveToBookmark(d).select(!0),baidu.editor.dom.domUtils.remove(g),a&&window.scroll(0,0)},0)},0)}\"true\"===b.body.contentEditable&&(this.editor.fireEvent(\"fullscreenchanged\",a),this.triggerLayout())}},_updateFullScreen:function(){if(this._fullscreen){var a=c.getViewportRect();if(this.getDom().style.cssText=\"border:0;position:absolute;left:0;top:\"+(this.editor.options.topOffset||0)+\"px;width:\"+a.width+\"px;height:\"+a.height+\"px;z-index:\"+(1*this.getDom().style.zIndex+100),c.setViewportOffset(this.getDom(),{left:0,top:this.editor.options.topOffset||0}),this.editor.setHeight(a.height-this.getDom(\"toolbarbox\").offsetHeight-this.getDom(\"bottombar\").offsetHeight-(this.editor.options.topOffset||0),!0),browser.gecko)try{window.onresize()}catch(b){}}},_updateElementPath:function(){var a,b=this.getDom(\"elementpath\");if(this.elementPathEnabled&&(a=this.editor.queryCommandValue(\"elementpath\"))){for(var c,d=[],e=0;c=a[e];e++)d[e]=this.formatHtml('<span unselectable=\"on\" onclick=\"$$.editor.execCommand(&quot;elementpath&quot;, &quot;'+e+'&quot;);\">'+c+\"</span>\");b.innerHTML='<div class=\"edui-editor-breadcrumb\" onmousedown=\"return false;\">'+this.editor.getLang(\"elementPathTip\")+\": \"+d.join(\" &gt; \")+\"</div>\"}else b.style.display=\"none\"},disableElementPath:function(){var a=this.getDom(\"elementpath\");a.innerHTML=\"\",a.style.display=\"none\",this.elementPathEnabled=!1},enableElementPath:function(){var a=this.getDom(\"elementpath\");a.style.display=\"\",this.elementPathEnabled=!0,this._updateElementPath()},_scale:function(){function a(){o=e.getXY(h),p||(p=g.options.minFrameHeight+j.offsetHeight+k.offsetHeight),m.style.cssText=\"position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:\"+h.offsetWidth+\"px;height:\"+h.offsetHeight+\"px;z-index:\"+(g.options.zIndex+1),e.on(f,\"mousemove\",b),e.on(i,\"mouseup\",c),e.on(f,\"mouseup\",c)}function b(a){d();var b=a||window.event;r=b.pageX||f.documentElement.scrollLeft+b.clientX,s=b.pageY||f.documentElement.scrollTop+b.clientY,t=r-o.x,u=s-o.y,t>=q&&(n=!0,m.style.width=t+\"px\"),u>=p&&(n=!0,m.style.height=u+\"px\")}function c(){n&&(n=!1,g.ui._actualFrameWidth=m.offsetWidth-2,h.style.width=g.ui._actualFrameWidth+\"px\",g.setHeight(m.offsetHeight-k.offsetHeight-j.offsetHeight-2,!0)),m&&(m.style.display=\"none\"),d(),e.un(f,\"mousemove\",b),e.un(i,\"mouseup\",c),e.un(f,\"mouseup\",c)}function d(){browser.ie?f.selection.clear():window.getSelection().removeAllRanges()}var f=document,g=this.editor,h=g.container,i=g.document,j=this.getDom(\"toolbarbox\"),k=this.getDom(\"bottombar\"),l=this.getDom(\"scale\"),m=this.getDom(\"scalelayer\"),n=!1,o=null,p=0,q=g.options.minFrameWidth,r=0,s=0,t=0,u=0,v=this;this.editor.addListener(\"fullscreenchanged\",function(a,b){if(b)v.disableScale();else if(v.editor.options.scaleEnabled){v.enableScale();var c=v.editor.document.createElement(\"span\");v.editor.body.appendChild(c),v.editor.body.style.height=Math.max(e.getXY(c).y,v.editor.iframe.offsetHeight-20)+\"px\",e.remove(c)}}),this.enableScale=function(){1!=g.queryCommandState(\"source\")&&(l.style.display=\"\",this.scaleEnabled=!0,e.on(l,\"mousedown\",a))},this.disableScale=function(){l.style.display=\"none\",this.scaleEnabled=!1,e.un(l,\"mousedown\",a)}},isFullScreen:function(){return this._fullscreen},postRender:function(){d.prototype.postRender.call(this);for(var a=0;a<this.toolbars.length;a++)this.toolbars[a].postRender();var b,c=this,e=baidu.editor.dom.domUtils,f=function(){clearTimeout(b),b=setTimeout(function(){c._updateFullScreen()})};e.on(window,\"resize\",f),c.addListener(\"destroy\",function(){e.un(window,\"resize\",f),clearTimeout(b)})},showToolbarMsg:function(a,b){if(this.getDom(\"toolbarmsg_label\").innerHTML=a,this.getDom(\"toolbarmsg\").style.display=\"\",!b){var c=this.getDom(\"upload_dialog\");c.style.display=\"none\"}},hideToolbarMsg:function(){this.getDom(\"toolbarmsg\").style.display=\"none\"},mapUrl:function(a){return a?a.replace(\"~/\",this.editor.options.UEDITOR_HOME_URL||\"\"):\"\"},triggerLayout:function(){var a=this.getDom();\"1\"==a.style.zoom?a.style.zoom=\"100%\":a.style.zoom=\"1\"}},b.inherits(a,baidu.editor.ui.UIBase);var g={};UE.ui.Editor=function(c){var d=new UE.Editor(c);d.options.editor=d,b.loadFile(document,{href:d.options.themePath+d.options.theme+\"/css/ueditor.css\",tag:\"link\",type:\"text/css\",rel:\"stylesheet\"});var f=d.render;return d.render=function(c){c.constructor===String&&(d.key=c,g[c]=d),b.domReady(function(){function b(){if(d.setOpt({labelMap:d.options.labelMap||d.getLang(\"labelMap\")}),new a(d.options),c&&(c.constructor===String&&(c=document.getElementById(c)),c&&c.getAttribute(\"name\")&&(d.options.textarea=c.getAttribute(\"name\")),c&&/script|textarea/gi.test(c.tagName))){var b=document.createElement(\"div\");c.parentNode.insertBefore(b,c);var g=c.value||c.innerHTML;d.options.initialContent=/^[\\t\\r\\n ]*$/.test(g)?d.options.initialContent:g.replace(/>[\\n\\r\\t]+([ ]{4})+/g,\">\").replace(/[\\n\\r\\t]+([ ]{4})+</g,\"<\").replace(/>[\\n\\r\\t]+</g,\"><\"),c.className&&(b.className=c.className),c.style.cssText&&(b.style.cssText=c.style.cssText),/textarea/i.test(c.tagName)?(d.textarea=c,d.textarea.style.display=\"none\"):c.parentNode.removeChild(c),c.id&&(b.id=c.id,e.removeAttributes(c,\"id\")),c=b,c.innerHTML=\"\"}e.addClass(c,\"edui-\"+d.options.theme),d.ui.render(c);var h=d.options;d.container=d.ui.getDom();for(var i,j=e.findParents(c,!0),k=[],l=0;i=j[l];l++)k[l]=i.style.display,i.style.display=\"block\";if(h.initialFrameWidth)h.minFrameWidth=h.initialFrameWidth;else{h.minFrameWidth=h.initialFrameWidth=c.offsetWidth;var m=c.style.width;/%$/.test(m)&&(h.initialFrameWidth=m)}h.initialFrameHeight?h.minFrameHeight=h.initialFrameHeight:h.initialFrameHeight=h.minFrameHeight=c.offsetHeight;for(var i,l=0;i=j[l];l++)i.style.display=k[l];c.style.height&&(c.style.height=\"\"),d.container.style.width=h.initialFrameWidth+(/%$/.test(h.initialFrameWidth)?\"\":\"px\"),d.container.style.zIndex=h.zIndex,f.call(d,d.ui.getDom(\"iframeholder\")),d.fireEvent(\"afteruiready\")}d.langIsReady?b():d.addListener(\"langReady\",b)})},d},UE.getEditor=function(a,b){var c=g[a];return c||(c=g[a]=new UE.ui.Editor(b),c.render(a)),c},UE.delEditor=function(a){var b;(b=g[a])&&(b.key&&b.destroy(),delete g[a])},UE.registerUI=function(a,c,d,e){b.each(a.split(/\\s+/),function(a){baidu.editor.ui[a]={id:e,execFn:c,index:d}})}}(),UE.registerUI(\"message\",function(a){function b(){if(c&&g.ui){var a=g.ui.getDom(\"toolbarbox\");a&&(c.style.top=a.offsetHeight+3+\"px\"),c.style.zIndex=Math.max(g.options.zIndex,g.iframe.style.zIndex)+1}}var c,d=baidu.editor.ui,e=d.Message,f=[],g=a;g.setOpt(\"enableMessageShow\",!0),g.getOpt(\"enableMessageShow\")!==!1&&(g.addListener(\"ready\",function(){c=document.getElementById(g.ui.id+\"_message_holder\"),b(),setTimeout(function(){b()},500)}),g.addListener(\"showmessage\",function(a,d){d=utils.isString(d)?{content:d}:d;var h=new e({timeout:d.timeout,type:d.type,\ncontent:d.content,keepshow:d.keepshow,editor:g}),i=d.id||\"msg_\"+(+new Date).toString(36);return h.render(c),f[i]=h,h.reset(d),b(),i}),g.addListener(\"updatemessage\",function(a,b,d){d=utils.isString(d)?{content:d}:d;var e=f[b];e.render(c),e&&e.reset(d)}),g.addListener(\"hidemessage\",function(a,b){var c=f[b];c&&c.hide()}))}),UE.registerUI(\"autosave\",function(a){var b=null,c=null;a.on(\"afterautosave\",function(){clearTimeout(b),b=setTimeout(function(){c&&a.trigger(\"hidemessage\",c),c=a.trigger(\"showmessage\",{content:a.getLang(\"autosave.success\"),timeout:2e3})},2e3)})})}();"
  },
  {
    "path": "api/static/libs/js/UEditor/ueditor.config.js",
    "content": "/**\n * ueditor完整配置项\n * 可以在这里配置整个编辑器的特性\n */\n/**************************提示********************************\n * 所有被注释的配置项均为UEditor默认值。\n * 修改默认配置请首先确保已经完全明确该参数的真实用途。\n * 主要有两种修改方案，一种是取消此处注释，然后修改成对应参数；另一种是在实例化编辑器时传入对应参数。\n * 当升级编辑器时，可直接使用旧版配置文件替换新版配置文件,不用担心旧版配置文件中因缺少新功能所需的参数而导致脚本报错。\n **************************提示********************************/\n\n;(function () {\n  /**\n   * 编辑器资源文件根路径。它所表示的含义是：以编辑器实例化页面为当前路径，指向编辑器资源文件（即dialog等文件夹）的路径。\n   * 鉴于很多同学在使用编辑器的时候出现的种种路径问题，此处强烈建议大家使用\"相对于网站根目录的相对路径\"进行配置。\n   * \"相对于网站根目录的相对路径\"也就是以斜杠开头的形如\"/myProject/ueditor/\"这样的路径。\n   * 如果站点中有多个不在同一层级的页面需要实例化编辑器，且引用了同一UEditor的时候，此处的URL可能不适用于每个页面的编辑器。\n   * 因此，UEditor提供了针对不同页面的编辑器可单独配置的根路径，具体来说，在需要实例化编辑器的页面最顶部写上如下代码即可。当然，需要令此处的URL等于对应的配置。\n   * window.UEDITOR_HOME_URL = \"/xxxx/xxxx/\";\n   */\n  // window.UEDITOR_HOME_URL =\n  //   window.UEDITOR_HOME_URL || '/public/static/libs/UEditor/'\n  var URL = window.UEDITOR_HOME_URL || getUEBasePath()\n\n  /**\n   * 配置项主体。注意，此处所有涉及到路径的配置别遗漏URL变量。\n   */\n  window.UEDITOR_CONFIG = {\n    //为编辑器实例添加一个路径，这个不能被注释\n    UEDITOR_HOME_URL: URL,\n\n    // 服务器统一请求接口路径\n    // serverUrl: URL + 'php/controller.php',\n    serverUrl: 'https://ibosapp.oss-cn-hangzhou.aliyuncs.com/',\n\n    //工具栏上的所有的功能按钮和下拉框，可以在new编辑器的实例时选择自己需要的重新定义\n    toolbars: [\n      [\n        'fullscreen',\n        // 'source',\n        // '|',\n        'undo',\n        'redo',\n        '|',\n        'bold',\n        'italic',\n        'underline',\n        'fontborder',\n        'strikethrough',\n        'superscript',\n        'subscript',\n        'removeformat',\n        'formatmatch',\n        'autotypeset',\n        'blockquote',\n        'pasteplain',\n        '|',\n        'forecolor',\n        'backcolor',\n        'insertorderedlist',\n        'insertunorderedlist',\n        'selectall',\n        'cleardoc',\n        '|',\n        'rowspacingtop',\n        'rowspacingbottom',\n        'lineheight',\n        '|',\n        'customstyle',\n        'paragraph',\n        'fontfamily',\n        'fontsize',\n        '|',\n        'directionalityltr',\n        'directionalityrtl',\n        'indent',\n        '|',\n        'justifyleft',\n        'justifycenter',\n        'justifyright',\n        'justifyjustify',\n        '|',\n        'touppercase',\n        'tolowercase',\n        '|',\n        'link',\n        'unlink',\n        'insertimage',\n        'insertvideo',\n        // 'simpleupload',\n        // 'music',\n        // 'attachment',\n        // 'anchor',\n        '|',\n        'imagenone',\n        'imageleft',\n        'imageright',\n        'imagecenter',\n        // '|',\n        // 'insertframe',\n        // 'pagebreak',\n        // 'template',\n        // 'background',\n        // 'insertcode',\n        // 'webapp',\n        // 'emotion',\n        // 'scrawl',\n        // 'map',\n        // 'gmap',\n        '|',\n        'horizontal',\n        'date',\n        'time',\n        'spechars',\n        // 'snapscreen',\n        // 'wordimage',\n        '|',\n        'inserttable',\n        'deletetable',\n        'insertparagraphbeforetable',\n        'insertrow',\n        'deleterow',\n        'insertcol',\n        'deletecol',\n        'mergecells',\n        'mergeright',\n        'mergedown',\n        'splittocells',\n        'splittorows',\n        'splittocols',\n        // 'charts',\n        // '|',\n        // 'print',\n        // 'searchreplace',\n        // 'help',\n        // 'preview',\n        // 'drafts',\n      ],\n    ],\n    //当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置，否则以配置值为准\n    //,labelMap:{\n    //    'anchor':'', 'undo':''\n    //}\n\n    //语言配置项,默认是zh-cn。有需要的话也可以使用如下这样的方式来自动多语言切换，当然，前提条件是lang文件夹下存在对应的语言文件：\n    //lang值也可以通过自动获取 (navigator.language||navigator.browserLanguage ||navigator.userLanguage).toLowerCase()\n    //,lang:\"zh-cn\"\n    //,langPath:URL +\"lang/\"\n\n    //主题配置项,默认是default。有需要的话也可以使用如下这样的方式来自动多主题切换，当然，前提条件是themes文件夹下存在对应的主题文件：\n    //现有如下皮肤:default\n    //,theme:'default'\n    //,themePath:URL +\"themes/\"\n\n    zIndex: 999, //编辑器层级的基数,默认是900\n\n    //针对getAllHtml方法，会在对应的head标签中增加该编码设置。\n    //,charset:\"utf-8\"\n\n    //若实例化编辑器的页面手动修改的domain，此处需要设置为true\n    //,customDomain:false\n\n    //常用配置项目\n    //,isShow : true    //默认显示编辑器\n\n    //,textarea:'editorValue' // 提交表单时，服务器获取编辑器提交内容的所用的参数，多实例时可以给容器name属性，会将name给定的值最为每个实例的键值，不用每次实例化的时候都设置这个值\n\n    //,initialContent:'欢迎使用ueditor!'    //初始化编辑器的内容,也可以通过textarea/script给值，看官网例子\n\n    //,autoClearinitialContent:true //是否自动清除编辑器初始内容，注意：如果focus属性设置为true,这个也为真，那么编辑器一上来就会触发导致初始化的内容看不到了\n\n    //,focus:false //初始化时，是否让编辑器获得焦点true或false\n\n    //如果自定义，最好给p标签如下的行高，要不输入中文时，会有跳动感\n    //,initialStyle:'p{line-height:1em}'//编辑器层级的基数,可以用来改变字体等\n\n    //,iframeJsUrl: '' //给编辑区域的iframe引入一个js文件\n    //,iframeCssUrl: URL + '/themes/iframe.css' //给编辑区域的iframe引入一个css文件\n\n    //indentValue\n    //首行缩进距离,默认是2em\n    //,indentValue:'2em'\n\n    //,initialFrameWidth:1000  //初始化编辑器宽度,默认1000\n    //,initialFrameHeight:320  //初始化编辑器高度,默认320\n\n    //,readonly : false //编辑器初始化结束后,编辑区域是否是只读的，默认是false\n\n    //,autoClearEmptyNode : true //getContent时，是否删除空的inlineElement节点（包括嵌套的情况）\n\n    //启用自动保存\n    //,enableAutoSave: true\n    //自动保存间隔时间， 单位ms\n    //,saveInterval: 500\n\n    //启用拖放上传\n    //,enableDragUpload: true\n    //启用粘贴上传\n    //,enablePasteUpload: true\n\n    //启用图片拉伸缩放\n    //,imageScaleEnabled: true\n\n    //,fullscreen : false //是否开启初始化时即全屏，默认关闭\n\n    //,imagePopup:true      //图片操作的浮层开关，默认打开\n\n    //,autoSyncData:true //自动同步编辑器要提交的数据\n    //,emotionLocalization:false //是否开启表情本地化，默认关闭。若要开启请确保emotion文件夹下包含官网提供的images表情文件夹\n\n    //粘贴只保留标签，去除标签所有属性\n    //,retainOnlyLabelPasted: false\n\n    //,pasteplain:false  //是否默认为纯文本粘贴。false为不使用纯文本粘贴，true为使用纯文本粘贴\n    //纯文本粘贴模式下的过滤规则\n    //'filterTxtRules' : function(){\n    //    function transP(node){\n    //        node.tagName = 'p';\n    //        node.setStyle();\n    //    }\n    //    return {\n    //        //直接删除及其字节点内容\n    //        '-' : 'script style object iframe embed input select',\n    //        'p': {$:{}},\n    //        'br':{$:{}},\n    //        'div':{'$':{}},\n    //        'li':{'$':{}},\n    //        'caption':transP,\n    //        'th':transP,\n    //        'tr':transP,\n    //        'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP,\n    //        'td':function(node){\n    //            //没有内容的td直接删掉\n    //            var txt = !!node.innerText();\n    //            if(txt){\n    //                node.parentNode.insertAfter(UE.uNode.createText(' &nbsp; &nbsp;'),node);\n    //            }\n    //            node.parentNode.removeChild(node,node.innerText())\n    //        }\n    //    }\n    //}()\n\n    //,allHtmlEnabled:false //提交到后台的数据是否包含整个html字符串\n\n    //insertorderedlist\n    //有序列表的下拉配置,值留空时支持多语言自动识别，若配置值，则以此值为准\n    //,'insertorderedlist':{\n    //      //自定的样式\n    //        'num':'1,2,3...',\n    //        'num1':'1),2),3)...',\n    //        'num2':'(1),(2),(3)...',\n    //        'cn':'一,二,三....',\n    //        'cn1':'一),二),三)....',\n    //        'cn2':'(一),(二),(三)....',\n    //     //系统自带\n    //     'decimal' : '' ,         //'1,2,3...'\n    //     'lower-alpha' : '' ,    // 'a,b,c...'\n    //     'lower-roman' : '' ,    //'i,ii,iii...'\n    //     'upper-alpha' : '' , lang   //'A,B,C'\n    //     'upper-roman' : ''      //'I,II,III...'\n    //}\n\n    //insertunorderedlist\n    //无序列表的下拉配置，值留空时支持多语言自动识别，若配置值，则以此值为准\n    //,insertunorderedlist : { //自定的样式\n    //    'dash' :'— 破折号', //-破折号\n    //    'dot':' 。 小圆圈', //系统自带\n    //    'circle' : '',  // '○ 小圆圈'\n    //    'disc' : '',    // '● 小圆点'\n    //    'square' : ''   //'■ 小方块'\n    //}\n    //,listDefaultPaddingLeft : '30'//默认的左边缩进的基数倍\n    //,listiconpath : 'http://bs.baidu.com/listicon/'//自定义标号的路径\n    //,maxListLevel : 3 //限制可以tab的级数, 设置-1为不限制\n\n    //,autoTransWordToList:false  //禁止word中粘贴进来的列表自动变成列表标签\n\n    //fontfamily\n    //字体设置 label留空支持多语言自动切换，若配置，则以配置值为准\n    //,'fontfamily':[\n    //    { label:'',name:'songti',val:'宋体,SimSun'},\n    //    { label:'',name:'kaiti',val:'楷体,楷体_GB2312, SimKai'},\n    //    { label:'',name:'yahei',val:'微软雅黑,Microsoft YaHei'},\n    //    { label:'',name:'heiti',val:'黑体, SimHei'},\n    //    { label:'',name:'lishu',val:'隶书, SimLi'},\n    //    { label:'',name:'andaleMono',val:'andale mono'},\n    //    { label:'',name:'arial',val:'arial, helvetica,sans-serif'},\n    //    { label:'',name:'arialBlack',val:'arial black,avant garde'},\n    //    { label:'',name:'comicSansMs',val:'comic sans ms'},\n    //    { label:'',name:'impact',val:'impact,chicago'},\n    //    { label:'',name:'timesNewRoman',val:'times new roman'}\n    //]\n\n    //fontsize\n    //字号\n    //,'fontsize':[10, 11, 12, 14, 16, 18, 20, 24, 36]\n\n    //paragraph\n    //段落格式 值留空时支持多语言自动识别，若配置，则以配置值为准\n    //,'paragraph':{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''}\n\n    //rowspacingtop\n    //段间距 值和显示的名字相同\n    //,'rowspacingtop':['5', '10', '15', '20', '25']\n\n    //rowspacingBottom\n    //段间距 值和显示的名字相同\n    //,'rowspacingbottom':['5', '10', '15', '20', '25']\n\n    //lineheight\n    //行内间距 值和显示的名字相同\n    //,'lineheight':['1', '1.5','1.75','2', '3', '4', '5']\n\n    //customstyle\n    //自定义样式，不支持国际化，此处配置值即可最后显示值\n    //block的元素是依据设置段落的逻辑设置的，inline的元素依据BIU的逻辑设置\n    //尽量使用一些常用的标签\n    //参数说明\n    //tag 使用的标签名字\n    //label 显示的名字也是用来标识不同类型的标识符，注意这个值每个要不同，\n    //style 添加的样式\n    //每一个对象就是一个自定义的样式\n    //,'customstyle':[\n    //    {tag:'h1', name:'tc', label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;'},\n    //    {tag:'h1', name:'tl',label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;margin:0 0 10px 0;'},\n    //    {tag:'span',name:'im', label:'', style:'font-style:italic;font-weight:bold'},\n    //    {tag:'span',name:'hi', label:'', style:'font-style:italic;font-weight:bold;color:rgb(51, 153, 204)'}\n    //]\n\n    //打开右键菜单功能\n    //,enableContextMenu: true\n    //右键菜单的内容，可以参考plugins/contextmenu.js里边的默认菜单的例子，label留空支持国际化，否则以此配置为准\n    //,contextMenu:[\n    //    {\n    //        label:'',       //显示的名称\n    //        cmdName:'selectall',//执行的command命令，当点击这个右键菜单时\n    //        //exec可选，有了exec就会在点击时执行这个function，优先级高于cmdName\n    //        exec:function () {\n    //            //this是当前编辑器的实例\n    //            //this.ui._dialogs['inserttableDialog'].open();\n    //        }\n    //    }\n    //]\n\n    //快捷菜单\n    //,shortcutMenu:[\"fontfamily\", \"fontsize\", \"bold\", \"italic\", \"underline\", \"forecolor\", \"backcolor\", \"insertorderedlist\", \"insertunorderedlist\"]\n\n    //elementPathEnabled\n    //是否启用元素路径，默认是显示\n    //,elementPathEnabled : true\n\n    //wordCount\n    //,wordCount:true          //是否开启字数统计\n    //,maximumWords:10000       //允许的最大字符数\n    //字数统计提示，{#count}代表当前字数，{#leave}代表还可以输入多少字符数,留空支持多语言自动切换，否则按此配置显示\n    //,wordCountMsg:''   //当前已输入 {#count} 个字符，您还可以输入{#leave} 个字符\n    //超出字数限制提示  留空支持多语言自动切换，否则按此配置显示\n    //,wordOverFlowMsg:''    //<span style=\"color:red;\">你输入的字符个数已经超出最大允许值，服务器可能会拒绝保存！</span>\n\n    //tab\n    //点击tab键时移动的距离,tabSize倍数，tabNode什么字符做为单位\n    //,tabSize:4\n    //,tabNode:'&nbsp;'\n\n    //removeFormat\n    //清除格式时可以删除的标签和属性\n    //removeForamtTags标签\n    //,removeFormatTags:'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var'\n    //removeFormatAttributes属性\n    //,removeFormatAttributes:'class,style,lang,width,height,align,hspace,valign'\n\n    //undo\n    //可以最多回退的次数,默认20\n    //,maxUndoCount:20\n    //当输入的字符数超过该值时，保存一次现场\n    //,maxInputCount:1\n\n    //autoHeightEnabled\n    // 是否自动长高,默认true\n    //,autoHeightEnabled:true\n\n    //scaleEnabled\n    //是否可以拉伸长高,默认true(当开启时，自动长高失效)\n    //,scaleEnabled:false\n    //,minFrameWidth:800    //编辑器拖动时最小宽度,默认800\n    //,minFrameHeight:220  //编辑器拖动时最小高度,默认220\n\n    //autoFloatEnabled\n    //是否保持toolbar的位置不动,默认true\n    //,autoFloatEnabled:true\n    //浮动时工具栏距离浏览器顶部的高度，用于某些具有固定头部的页面\n    //,topOffset:30\n    //编辑器底部距离工具栏高度(如果参数大于等于编辑器高度，则设置无效)\n    //,toolbarTopOffset:400\n\n    //设置远程图片是否抓取到本地保存\n    //,catchRemoteImageEnable: true //设置是否抓取远程图片\n\n    //pageBreakTag\n    //分页标识符,默认是_ueditor_page_break_tag_\n    //,pageBreakTag:'_ueditor_page_break_tag_'\n\n    //autotypeset\n    //自动排版参数\n    //,autotypeset: {\n    //    mergeEmptyline: true,           //合并空行\n    //    removeClass: true,              //去掉冗余的class\n    //    removeEmptyline: false,         //去掉空行\n    //    textAlign:\"left\",               //段落的排版方式，可以是 left,right,center,justify 去掉这个属性表示不执行排版\n    //    imageBlockLine: 'center',       //图片的浮动方式，独占一行剧中,左右浮动，默认: center,left,right,none 去掉这个属性表示不执行排版\n    //    pasteFilter: false,             //根据规则过滤没事粘贴进来的内容\n    //    clearFontSize: false,           //去掉所有的内嵌字号，使用编辑器默认的字号\n    //    clearFontFamily: false,         //去掉所有的内嵌字体，使用编辑器默认的字体\n    //    removeEmptyNode: false,         // 去掉空节点\n    //    //可以去掉的标签\n    //    removeTagNames: {标签名字:1},\n    //    indent: false,                  // 行首缩进\n    //    indentValue : '2em',            //行首缩进的大小\n    //    bdc2sb: false,\n    //    tobdc: false\n    //}\n\n    //tableDragable\n    //表格是否可以拖拽\n    //,tableDragable: true\n\n    //sourceEditor\n    //源码的查看方式,codemirror 是代码高亮，textarea是文本框,默认是codemirror\n    //注意默认codemirror只能在ie8+和非ie中使用\n    //,sourceEditor:\"codemirror\"\n    //如果sourceEditor是codemirror，还用配置一下两个参数\n    //codeMirrorJsUrl js加载的路径，默认是 URL + \"third-party/codemirror/codemirror.js\"\n    //,codeMirrorJsUrl:URL + \"third-party/codemirror/codemirror.js\"\n    //codeMirrorCssUrl css加载的路径，默认是 URL + \"third-party/codemirror/codemirror.css\"\n    //,codeMirrorCssUrl:URL + \"third-party/codemirror/codemirror.css\"\n    //编辑器初始化完成后是否进入源码模式，默认为否。\n    //,sourceEditorFirst:false\n\n    //iframeUrlMap\n    //dialog内容的路径 ～会被替换成URL,垓属性一旦打开，将覆盖所有的dialog的默认路径\n    //,iframeUrlMap:{\n    //    'anchor':'~/dialogs/anchor/anchor.html',\n    //}\n\n    //allowLinkProtocol 允许的链接地址，有这些前缀的链接地址不会自动添加http\n    //, allowLinkProtocols: ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:', 'git:', 'svn:']\n\n    //webAppKey 百度应用的APIkey，每个站长必须首先去百度官网注册一个key后方能正常使用app功能，注册介绍，http://app.baidu.com/static/cms/getapikey.html\n    //, webAppKey: \"\"\n\n    //默认过滤规则相关配置项目\n    //,disabledTableInTable:true  //禁止表格嵌套\n    //,allowDivTransToP:true      //允许进入编辑器的div标签自动变成p标签\n    //,rgb2Hex:true               //默认产出的数据中的color自动从rgb格式变成16进制格式\n    // xss 过滤是否开启,inserthtml等操作\n    // xssFilterRules: true,\n    //input xss过滤\n    // inputXssFilter: true,\n    //output xss过滤\n    // outputXssFilter: true,\n    // xss过滤白名单 名单来源: https://raw.githubusercontent.com/leizongmin/js-xss/master/lib/default.js\n    // whiteList: {\n    //   a: ['target', 'href', 'title', 'class', 'style'],\n    //   abbr: ['title', 'class', 'style'],\n    //   address: ['class', 'style'],\n    //   area: ['shape', 'coords', 'href', 'alt'],\n    //   article: [],\n    //   aside: [],\n    //   audio: [\n    //     'autoplay',\n    //     'controls',\n    //     'loop',\n    //     'preload',\n    //     'src',\n    //     'class',\n    //     'style',\n    //   ],\n    //   b: ['class', 'style'],\n    //   bdi: ['dir'],\n    //   bdo: ['dir'],\n    //   big: [],\n    //   blockquote: ['cite', 'class', 'style'],\n    //   br: [],\n    //   caption: ['class', 'style'],\n    //   center: [],\n    //   cite: [],\n    //   code: ['class', 'style'],\n    //   col: ['align', 'valign', 'span', 'width', 'class', 'style'],\n    //   colgroup: ['align', 'valign', 'span', 'width', 'class', 'style'],\n    //   dd: ['class', 'style'],\n    //   del: ['datetime'],\n    //   details: ['open'],\n    //   div: ['class', 'style'],\n    //   dl: ['class', 'style'],\n    //   dt: ['class', 'style'],\n    //   em: ['class', 'style'],\n    //   font: ['color', 'size', 'face'],\n    //   footer: [],\n    //   h1: ['class', 'style'],\n    //   h2: ['class', 'style'],\n    //   h3: ['class', 'style'],\n    //   h4: ['class', 'style'],\n    //   h5: ['class', 'style'],\n    //   h6: ['class', 'style'],\n    //   header: [],\n    //   hr: [],\n    //   i: ['class', 'style'],\n    //   img: [\n    //     'src',\n    //     'alt',\n    //     'title',\n    //     'width',\n    //     'height',\n    //     'id',\n    //     '_src',\n    //     'loadingclass',\n    //     'class',\n    //     'data-latex',\n    //   ],\n    //   ins: ['datetime'],\n    //   li: ['class', 'style'],\n    //   mark: [],\n    //   nav: [],\n    //   ol: ['class', 'style'],\n    //   p: ['class', 'style'],\n    //   pre: ['class', 'style'],\n    //   s: [],\n    //   section: ['class', 'style'],\n    //   small: [],\n    //   span: ['class', 'style'],\n    //   sub: ['class', 'style'],\n    //   sup: ['class', 'style'],\n    //   strong: ['class', 'style'],\n    //   table: ['width', 'border', 'align', 'valign', 'class', 'style'],\n    //   tbody: ['align', 'valign', 'class', 'style'],\n    //   td: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],\n    //   tfoot: ['align', 'valign', 'class', 'style'],\n    //   th: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],\n    //   thead: ['align', 'valign', 'class', 'style'],\n    //   tr: ['rowspan', 'align', 'valign', 'class', 'style'],\n    //   tt: [],\n    //   u: [],\n    //   ul: ['class', 'style'],\n    //   video: [\n    //     'autoplay',\n    //     'controls',\n    //     'loop',\n    //     'preload',\n    //     'src',\n    //     'height',\n    //     'width',\n    //     'class',\n    //     'style',\n    //   ],\n    // },\n\n    /* 上传图片配置项 */\n    imageActionName: 'uploadimage' /* 执行上传图片的action名称 */,\n    imageFieldName: 'file' /* 提交的图片表单名称 */,\n    imageMaxSize: 10 * 1024 * 1024 /* 上传大小限制，单位B */,\n    imageAllowFiles: [\n      '.png',\n      '.jpg',\n      '.jpeg',\n      '.gif',\n      '.bmp',\n    ] /* 上传图片格式显示 */,\n    imageCompressEnable: true /* 是否压缩图片,默认是true */,\n    imageCompressBorder: 1600 /* 图片压缩最长边限制 */,\n    imageInsertAlign: 'none' /* 插入的图片浮动方式 */,\n    // imageUrlPrefix: 'http://192.168.1.6:9090/' /* 图片访问路径前缀 */,\n    imageUrlPrefix: '' /* 图片访问路径前缀 */,\n    imagePathFormat:\n      '/img/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */\n    /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */\n    /* {time} 会替换成时间戳 */\n    /* {yyyy} 会替换成四位年份 */\n    /* {yy} 会替换成两位年份 */\n    /* {mm} 会替换成两位月份 */\n    /* {dd} 会替换成两位日期 */\n    /* {hh} 会替换成两位小时 */\n    /* {ii} 会替换成两位分钟 */\n    /* {ss} 会替换成两位秒 */\n    /* 非法字符 \\ : * ? \" < > | */\n    /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */\n\n    /* 涂鸦图片上传配置项 */\n    scrawlActionName: 'uploadscrawl' /* 执行上传涂鸦的action名称 */,\n    scrawlFieldName: 'file' /* 提交的图片表单名称 */,\n    scrawlPathFormat:\n      '/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    scrawlMaxSize: 2048000 /* 上传大小限制，单位B */,\n    scrawlUrlPrefix: '' /* 图片访问路径前缀 */,\n    scrawlInsertAlign: 'none',\n\n    /* 截图工具上传 */\n    snapscreenActionName: 'uploadimage' /* 执行上传截图的action名称 */,\n    snapscreenPathFormat:\n      '/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    snapscreenUrlPrefix: '' /* 图片访问路径前缀 */,\n    snapscreenInsertAlign: 'none' /* 插入的图片浮动方式 */,\n\n    /* 抓取远程图片配置 */\n    catcherLocalDomain: ['127.0.0.1', 'localhost', 'img.baidu.com'],\n    catcherActionName: 'catchimage' /* 执行抓取远程图片的action名称 */,\n    catcherFieldName: 'source' /* 提交的图片列表表单名称 */,\n    catcherPathFormat:\n      '/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    catcherUrlPrefix: '' /* 图片访问路径前缀 */,\n    catcherMaxSize: 2048000 /* 上传大小限制，单位B */,\n    catcherAllowFiles: [\n      '.png',\n      '.jpg',\n      '.jpeg',\n      '.gif',\n      '.bmp',\n    ] /* 抓取图片格式显示 */,\n\n    /* 上传视频配置 */\n    videoActionName: 'uploadvideo' /* 执行上传视频的action名称 */,\n    videoFieldName: 'file' /* 提交的视频表单名称 */,\n    videoPathFormat:\n      '/ueditor/php/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    videoUrlPrefix: '' /* 视频访问路径前缀 */,\n    videoMaxSize: 10 * 1024 * 1024 /* 上传大小限制，单位B，默认100MB */,\n    videoAllowFiles: [\n      '.flv',\n      '.swf',\n      '.mkv',\n      '.avi',\n      '.rm',\n      '.rmvb',\n      '.mpeg',\n      '.mpg',\n      '.ogg',\n      '.ogv',\n      '.mov',\n      '.wmv',\n      '.mp4',\n      '.webm',\n      '.mp3',\n      '.wav',\n      '.mid',\n    ] /* 上传视频格式显示 */,\n\n    /* 上传文件配置 */\n    fileActionName: 'uploadfile' /* controller里,执行上传视频的action名称 */,\n    fileFieldName: 'file' /* 提交的文件表单名称 */,\n    filePathFormat:\n      '/ueditor/php/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    fileUrlPrefix: '' /* 文件访问路径前缀 */,\n    fileMaxSize: 50 * 1024 * 1024 /* 上传大小限制，单位B，默认50MB */,\n    fileAllowFiles: [\n      '.png',\n      '.jpg',\n      '.jpeg',\n      '.gif',\n      '.bmp',\n      '.flv',\n      '.swf',\n      '.mkv',\n      '.avi',\n      '.rm',\n      '.rmvb',\n      '.mpeg',\n      '.mpg',\n      '.ogg',\n      '.ogv',\n      '.mov',\n      '.wmv',\n      '.mp4',\n      '.webm',\n      '.mp3',\n      '.wav',\n      '.mid',\n      '.rar',\n      '.zip',\n      '.tar',\n      '.gz',\n      '.7z',\n      '.bz2',\n      '.cab',\n      '.iso',\n      '.doc',\n      '.docx',\n      '.xls',\n      '.xlsx',\n      '.ppt',\n      '.pptx',\n      '.pdf',\n      '.txt',\n      '.md',\n      '.xml',\n    ] /* 上传文件格式显示 */,\n\n    /* 列出指定目录下的图片 */\n    imageManagerActionName: 'listimage' /* 执行图片管理的action名称 */,\n    imageManagerListPath:\n      '/ueditor/php/upload/image/' /* 指定要列出图片的目录 */,\n    imageManagerListSize: 20 /* 每次列出文件数量 */,\n    imageManagerUrlPrefix: '' /* 图片访问路径前缀 */,\n    imageManagerInsertAlign: 'none' /* 插入的图片浮动方式 */,\n    imageManagerAllowFiles: [\n      '.png',\n      '.jpg',\n      '.jpeg',\n      '.gif',\n      '.bmp',\n    ] /* 列出的文件类型 */,\n\n    /* 列出指定目录下的文件 */\n    fileManagerActionName: 'listfile' /* 执行文件管理的action名称 */,\n    fileManagerListPath: '/ueditor/php/upload/file/' /* 指定要列出文件的目录 */,\n    fileManagerUrlPrefix: '' /* 文件访问路径前缀 */,\n    fileManagerListSize: 20 /* 每次列出文件数量 */,\n    fileManagerAllowFiles: [\n      '.png',\n      '.jpg',\n      '.jpeg',\n      '.gif',\n      '.bmp',\n      '.flv',\n      '.swf',\n      '.mkv',\n      '.avi',\n      '.rm',\n      '.rmvb',\n      '.mpeg',\n      '.mpg',\n      '.ogg',\n      '.ogv',\n      '.mov',\n      '.wmv',\n      '.mp4',\n      '.webm',\n      '.mp3',\n      '.wav',\n      '.mid',\n      '.rar',\n      '.zip',\n      '.tar',\n      '.gz',\n      '.7z',\n      '.bz2',\n      '.cab',\n      '.iso',\n      '.doc',\n      '.docx',\n      '.xls',\n      '.xlsx',\n      '.ppt',\n      '.pptx',\n      '.pdf',\n      '.txt',\n      '.md',\n      '.xml',\n    ] /* 列出的文件类型 */,\n  }\n\n  function getUEBasePath(docUrl, confUrl) {\n    return getBasePath(\n      docUrl || self.document.URL || self.location.href,\n      confUrl || getConfigFilePath()\n    )\n  }\n\n  function getConfigFilePath() {\n    var configPath = document.getElementsByTagName('script')\n\n    return configPath[configPath.length - 1].src\n  }\n\n  function getBasePath(docUrl, confUrl) {\n    var basePath = confUrl\n\n    if (/^(\\/|\\\\\\\\)/.test(confUrl)) {\n      basePath =\n        /^.+?\\w(\\/|\\\\\\\\)/.exec(docUrl)[0] + confUrl.replace(/^(\\/|\\\\\\\\)/, '')\n    } else if (!/^[a-z]+:/i.test(confUrl)) {\n      docUrl = docUrl\n        .split('#')[0]\n        .split('?')[0]\n        .replace(/[^\\\\\\/]+$/, '')\n\n      basePath = docUrl + '' + confUrl\n    }\n\n    return optimizationPath(basePath)\n  }\n\n  function optimizationPath(path) {\n    var protocol = /^[a-z]+:\\/\\//.exec(path)[0],\n      tmp = null,\n      res = []\n\n    path = path.replace(protocol, '').split('?')[0].split('#')[0]\n\n    path = path.replace(/\\\\/g, '/').split(/\\//)\n\n    path[path.length - 1] = ''\n\n    while (path.length) {\n      if ((tmp = path.shift()) === '..') {\n        res.pop()\n      } else if (tmp !== '.') {\n        res.push(tmp)\n      }\n    }\n\n    return protocol + res.join('/')\n  }\n\n  window.UE = {\n    getUEBasePath: getUEBasePath,\n  }\n})()\n"
  },
  {
    "path": "api/static/libs/js/UEditor/ueditor.parse.js",
    "content": "/*!\n * ueditor parse\n * version: 2.0.0\n * build: Wed Jan 17 2024 13:54:20 GMT+0800 (中国标准时间)\n */\n\n(function(){\n\n(function() {\n  UE = window.UE || {};\n  var isIE = !!window.ActiveXObject;\n  //定义utils工具\n  var utils = {\n    removeLastbs: function(url) {\n      return url.replace(/\\/$/, \"\");\n    },\n    extend: function(t, s) {\n      var a = arguments,\n        notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false,\n        len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length;\n      for (var i = 1; i < len; i++) {\n        var x = a[i];\n        for (var k in x) {\n          if (!notCover || !t.hasOwnProperty(k)) {\n            t[k] = x[k];\n          }\n        }\n      }\n      return t;\n    },\n    isIE: isIE,\n    cssRule: isIE\n      ? function(key, style, doc) {\n          var indexList, index;\n          doc = doc || document;\n          if (doc.indexList) {\n            indexList = doc.indexList;\n          } else {\n            indexList = doc.indexList = {};\n          }\n          var sheetStyle;\n          if (!indexList[key]) {\n            if (style === undefined) {\n              return \"\";\n            }\n            sheetStyle = doc.createStyleSheet(\n              \"\",\n              (index = doc.styleSheets.length)\n            );\n            indexList[key] = index;\n          } else {\n            sheetStyle = doc.styleSheets[indexList[key]];\n          }\n          if (style === undefined) {\n            return sheetStyle.cssText;\n          }\n          sheetStyle.cssText = sheetStyle.cssText + \"\\n\" + (style || \"\");\n        }\n      : function(key, style, doc) {\n          doc = doc || document;\n          var head = doc.getElementsByTagName(\"head\")[0],\n            node;\n          if (!(node = doc.getElementById(key))) {\n            if (style === undefined) {\n              return \"\";\n            }\n            node = doc.createElement(\"style\");\n            node.id = key;\n            head.appendChild(node);\n          }\n          if (style === undefined) {\n            return node.innerHTML;\n          }\n          if (style !== \"\") {\n            node.innerHTML = node.innerHTML + \"\\n\" + style;\n          } else {\n            head.removeChild(node);\n          }\n        },\n    domReady: function(onready) {\n      var doc = window.document;\n      if (doc.readyState === \"complete\") {\n        onready();\n      } else {\n        if (isIE) {\n          (function() {\n            if (doc.isReady) return;\n            try {\n              doc.documentElement.doScroll(\"left\");\n            } catch (error) {\n              setTimeout(arguments.callee, 0);\n              return;\n            }\n            onready();\n          })();\n          window.attachEvent(\"onload\", function() {\n            onready();\n          });\n        } else {\n          doc.addEventListener(\n            \"DOMContentLoaded\",\n            function() {\n              doc.removeEventListener(\n                \"DOMContentLoaded\",\n                arguments.callee,\n                false\n              );\n              onready();\n            },\n            false\n          );\n          window.addEventListener(\n            \"load\",\n            function() {\n              onready();\n            },\n            false\n          );\n        }\n      }\n    },\n    each: function(obj, iterator, context) {\n      if (obj == null) return;\n      if (obj.length === +obj.length) {\n        for (var i = 0, l = obj.length; i < l; i++) {\n          if (iterator.call(context, obj[i], i, obj) === false) return false;\n        }\n      } else {\n        for (var key in obj) {\n          if (obj.hasOwnProperty(key)) {\n            if (iterator.call(context, obj[key], key, obj) === false)\n              return false;\n          }\n        }\n      }\n    },\n    inArray: function(arr, item) {\n      var index = -1;\n      this.each(arr, function(v, i) {\n        if (v === item) {\n          index = i;\n          return false;\n        }\n      });\n      return index;\n    },\n    pushItem: function(arr, item) {\n      if (this.inArray(arr, item) == -1) {\n        arr.push(item);\n      }\n    },\n    trim: function(str) {\n      return str.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g, \"\");\n    },\n    indexOf: function(array, item, start) {\n      var index = -1;\n      start = this.isNumber(start) ? start : 0;\n      this.each(array, function(v, i) {\n        if (i >= start && v === item) {\n          index = i;\n          return false;\n        }\n      });\n      return index;\n    },\n    hasClass: function(element, className) {\n      className = className\n        .replace(/(^[ ]+)|([ ]+$)/g, \"\")\n        .replace(/[ ]{2,}/g, \" \")\n        .split(\" \");\n      for (var i = 0, ci, cls = element.className; (ci = className[i++]); ) {\n        if (!new RegExp(\"\\\\b\" + ci + \"\\\\b\", \"i\").test(cls)) {\n          return false;\n        }\n      }\n      return i - 1 == className.length;\n    },\n    addClass: function(elm, classNames) {\n      if (!elm) return;\n      classNames = this.trim(classNames).replace(/[ ]{2,}/g, \" \").split(\" \");\n      for (var i = 0, ci, cls = elm.className; (ci = classNames[i++]); ) {\n        if (!new RegExp(\"\\\\b\" + ci + \"\\\\b\").test(cls)) {\n          cls += \" \" + ci;\n        }\n      }\n      elm.className = utils.trim(cls);\n    },\n    removeClass: function(elm, classNames) {\n      classNames = this.isArray(classNames)\n        ? classNames\n        : this.trim(classNames).replace(/[ ]{2,}/g, \" \").split(\" \");\n      for (var i = 0, ci, cls = elm.className; (ci = classNames[i++]); ) {\n        cls = cls.replace(new RegExp(\"\\\\b\" + ci + \"\\\\b\"), \"\");\n      }\n      cls = this.trim(cls).replace(/[ ]{2,}/g, \" \");\n      elm.className = cls;\n      !cls && elm.removeAttribute(\"className\");\n    },\n    on: function(element, type, handler) {\n      var types = this.isArray(type) ? type : type.split(/\\s+/),\n        k = types.length;\n      if (k)\n        while (k--) {\n          type = types[k];\n          if (element.addEventListener) {\n            element.addEventListener(type, handler, false);\n          } else {\n            if (!handler._d) {\n              handler._d = {\n                els: []\n              };\n            }\n            var key = type + handler.toString(),\n              index = utils.indexOf(handler._d.els, element);\n            if (!handler._d[key] || index == -1) {\n              if (index == -1) {\n                handler._d.els.push(element);\n              }\n              if (!handler._d[key]) {\n                handler._d[key] = function(evt) {\n                  return handler.call(evt.srcElement, evt || window.event);\n                };\n              }\n\n              element.attachEvent(\"on\" + type, handler._d[key]);\n            }\n          }\n        }\n      element = null;\n    },\n    off: function(element, type, handler) {\n      var types = this.isArray(type) ? type : type.split(/\\s+/),\n        k = types.length;\n      if (k)\n        while (k--) {\n          type = types[k];\n          if (element.removeEventListener) {\n            element.removeEventListener(type, handler, false);\n          } else {\n            var key = type + handler.toString();\n            try {\n              element.detachEvent(\n                \"on\" + type,\n                handler._d ? handler._d[key] : handler\n              );\n            } catch (e) {}\n            if (handler._d && handler._d[key]) {\n              var index = utils.indexOf(handler._d.els, element);\n              if (index != -1) {\n                handler._d.els.splice(index, 1);\n              }\n              handler._d.els.length == 0 && delete handler._d[key];\n            }\n          }\n        }\n    },\n    loadFile: (function() {\n      var tmpList = [];\n      function getItem(doc, obj) {\n        try {\n          for (var i = 0, ci; (ci = tmpList[i++]); ) {\n            if (ci.doc === doc && ci.url == (obj.src || obj.href)) {\n              return ci;\n            }\n          }\n        } catch (e) {\n          return null;\n        }\n      }\n      return function(doc, obj, fn) {\n        var item = getItem(doc, obj);\n        if (item) {\n          if (item.ready) {\n            fn && fn();\n          } else {\n            item.funs.push(fn);\n          }\n          return;\n        }\n        tmpList.push({\n          doc: doc,\n          url: obj.src || obj.href,\n          funs: [fn]\n        });\n        if (!doc.body) {\n          var html = [];\n          for (var p in obj) {\n            if (p == \"tag\") continue;\n            html.push(p + '=\"' + obj[p] + '\"');\n          }\n          doc.write(\n            \"<\" + obj.tag + \" \" + html.join(\" \") + \" ></\" + obj.tag + \">\"\n          );\n          return;\n        }\n        if (obj.id && doc.getElementById(obj.id)) {\n          return;\n        }\n        var element = doc.createElement(obj.tag);\n        delete obj.tag;\n        for (var p in obj) {\n          element.setAttribute(p, obj[p]);\n        }\n        element.onload = element.onreadystatechange = function() {\n          if (!this.readyState || /loaded|complete/.test(this.readyState)) {\n            item = getItem(doc, obj);\n            if (item.funs.length > 0) {\n              item.ready = 1;\n              for (var fi; (fi = item.funs.pop()); ) {\n                fi();\n              }\n            }\n            element.onload = element.onreadystatechange = null;\n          }\n        };\n        element.onerror = function() {\n          throw Error(\n            \"The load \" + (obj.href || obj.src) + \" fails,check the url\"\n          );\n        };\n        doc.getElementsByTagName(\"head\")[0].appendChild(element);\n      };\n    })()\n  };\n  utils.each(\n    [\"String\", \"Function\", \"Array\", \"Number\", \"RegExp\", \"Object\", \"Boolean\"],\n    function(v) {\n      utils[\"is\" + v] = function(obj) {\n        return Object.prototype.toString.apply(obj) == \"[object \" + v + \"]\";\n      };\n    }\n  );\n  var parselist = {};\n  UE.parse = {\n    register: function(parseName, fn) {\n      parselist[parseName] = fn;\n    },\n    load: function(opt) {\n      utils.each(parselist, function(v) {\n        v.call(opt, utils);\n      });\n    }\n  };\n  uParse = function(selector, opt) {\n    utils.domReady(function() {\n      var contents;\n      if (document.querySelectorAll) {\n        contents = document.querySelectorAll(selector);\n      } else {\n        if (/^#/.test(selector)) {\n          contents = [document.getElementById(selector.replace(/^#/, \"\"))];\n        } else if (/^\\./.test(selector)) {\n          var contents = [];\n          utils.each(document.getElementsByTagName(\"*\"), function(node) {\n            if (\n              node.className &&\n              new RegExp(\"\\\\b\" + selector.replace(/^\\./, \"\") + \"\\\\b\", \"i\").test(\n                node.className\n              )\n            ) {\n              contents.push(node);\n            }\n          });\n        } else {\n          contents = document.getElementsByTagName(selector);\n        }\n      }\n      utils.each(contents, function(v) {\n        UE.parse.load(utils.extend({ root: v, selector: selector }, opt));\n      });\n    });\n  };\n})();\n\nUE.parse.register(\"insertcode\", function(utils) {\n  var pres = this.root.getElementsByTagName(\"pre\");\n  if (pres.length) {\n    if (typeof XRegExp == \"undefined\") {\n      var jsurl, cssurl;\n      if (this.rootPath !== undefined) {\n        jsurl =\n          utils.removeLastbs(this.rootPath) +\n          \"/third-party/SyntaxHighlighter/shCore.js\";\n        cssurl =\n          utils.removeLastbs(this.rootPath) +\n          \"/third-party/SyntaxHighlighter/shCoreDefault.css\";\n      } else {\n        jsurl = this.highlightJsUrl;\n        cssurl = this.highlightCssUrl;\n      }\n      utils.loadFile(document, {\n        id: \"syntaxhighlighter_css\",\n        tag: \"link\",\n        rel: \"stylesheet\",\n        type: \"text/css\",\n        href: cssurl\n      });\n      utils.loadFile(\n        document,\n        {\n          id: \"syntaxhighlighter_js\",\n          src: jsurl,\n          tag: \"script\",\n          type: \"text/javascript\",\n          defer: \"defer\"\n        },\n        function() {\n          utils.each(pres, function(pi) {\n            if (pi && /brush/i.test(pi.className)) {\n              SyntaxHighlighter.highlight(pi);\n            }\n          });\n        }\n      );\n    } else {\n      utils.each(pres, function(pi) {\n        if (pi && /brush/i.test(pi.className)) {\n          SyntaxHighlighter.highlight(pi);\n        }\n      });\n    }\n  }\n});\n\nUE.parse.register(\"table\", function(utils) {\n  var me = this,\n    root = this.root,\n    tables = root.getElementsByTagName(\"table\");\n  if (tables.length) {\n    var selector = this.selector;\n    //追加默认的表格样式\n    utils.cssRule(\n      \"table\",\n      selector +\n        \" table.noBorderTable td,\" +\n        selector +\n        \" table.noBorderTable th,\" +\n        selector +\n        \" table.noBorderTable caption{border:1px dashed #ddd !important}\" +\n        selector +\n        \" table.sortEnabled tr.firstRow th,\" +\n        selector +\n        \" table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;\" +\n        \"background-position: center right; background-image:url(\" +\n        this.rootPath +\n        \"themes/default/images/sortable.png);}\" +\n        selector +\n        \" table.sortEnabled tr.firstRow th:hover,\" +\n        selector +\n        \" table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}\" +\n        selector +\n        \" table{margin-bottom:10px;border-collapse:collapse;display:table;}\" +\n        selector +\n        \" td,\" +\n        selector +\n        \" th{padding: 5px 10px;border: 1px solid #DDD;}\" +\n        selector +\n        \" caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}\" +\n        selector +\n        \" th{border-top:1px solid #BBB;background:#F7F7F7;}\" +\n        selector +\n        \" table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}\" +\n        selector +\n        \" tr.ue-table-interlace-color-single td{ background: #fcfcfc; }\" +\n        selector +\n        \" tr.ue-table-interlace-color-double td{ background: #f7faff; }\" +\n        selector +\n        \" td p{margin:0;padding:0;width:auto;height:auto;}\",\n      document\n    );\n    //填充空的单元格\n\n    utils.each(\"td th caption\".split(\" \"), function(tag) {\n      var cells = root.getElementsByTagName(tag);\n      cells.length &&\n        utils.each(cells, function(node) {\n          if (!node.firstChild) {\n            node.innerHTML = \"&nbsp;\";\n          }\n        });\n    });\n\n    //表格可排序\n    var tables = root.getElementsByTagName(\"table\");\n    utils.each(tables, function(table) {\n      if (/\\bsortEnabled\\b/.test(table.className)) {\n        utils.on(table, \"click\", function(e) {\n          var target = e.target || e.srcElement,\n            cell = findParentByTagName(target, [\"td\", \"th\"]);\n          var table = findParentByTagName(target, \"table\"),\n            colIndex = utils.indexOf(table.rows[0].cells, cell),\n            sortType = table.getAttribute(\"data-sort-type\");\n          if (colIndex != -1) {\n            sortTable(table, colIndex, me.tableSortCompareFn || sortType);\n            updateTable(table);\n          }\n        });\n      }\n    });\n\n    //按照标签名查找父节点\n    function findParentByTagName(target, tagNames) {\n      var i,\n        current = target;\n      tagNames = utils.isArray(tagNames) ? tagNames : [tagNames];\n      while (current) {\n        for (i = 0; i < tagNames.length; i++) {\n          if (current.tagName == tagNames[i].toUpperCase()) return current;\n        }\n        current = current.parentNode;\n      }\n      return null;\n    }\n    //表格排序\n    function sortTable(table, sortByCellIndex, compareFn) {\n      var rows = table.rows,\n        trArray = [],\n        flag = rows[0].cells[0].tagName === \"TH\",\n        lastRowIndex = 0;\n\n      for (var i = 0, len = rows.length; i < len; i++) {\n        trArray[i] = rows[i];\n      }\n\n      var Fn = {\n        reversecurrent: function(td1, td2) {\n          return 1;\n        },\n        orderbyasc: function(td1, td2) {\n          var value1 = td1.innerText || td1.textContent,\n            value2 = td2.innerText || td2.textContent;\n          return value1.localeCompare(value2);\n        },\n        reversebyasc: function(td1, td2) {\n          var value1 = td1.innerHTML,\n            value2 = td2.innerHTML;\n          return value2.localeCompare(value1);\n        },\n        orderbynum: function(td1, td2) {\n          var value1 = td1[utils.isIE ? \"innerText\" : \"textContent\"].match(\n            /\\d+/\n          ),\n            value2 = td2[utils.isIE ? \"innerText\" : \"textContent\"].match(/\\d+/);\n          if (value1) value1 = +value1[0];\n          if (value2) value2 = +value2[0];\n          return (value1 || 0) - (value2 || 0);\n        },\n        reversebynum: function(td1, td2) {\n          var value1 = td1[utils.isIE ? \"innerText\" : \"textContent\"].match(\n            /\\d+/\n          ),\n            value2 = td2[utils.isIE ? \"innerText\" : \"textContent\"].match(/\\d+/);\n          if (value1) value1 = +value1[0];\n          if (value2) value2 = +value2[0];\n          return (value2 || 0) - (value1 || 0);\n        }\n      };\n\n      //对表格设置排序的标记data-sort-type\n      table.setAttribute(\n        \"data-sort-type\",\n        compareFn && typeof compareFn === \"string\" && Fn[compareFn]\n          ? compareFn\n          : \"\"\n      );\n\n      //th不参与排序\n      flag && trArray.splice(0, 1);\n      trArray = sort(trArray, function(tr1, tr2) {\n        var result;\n        if (compareFn && typeof compareFn === \"function\") {\n          result = compareFn.call(\n            this,\n            tr1.cells[sortByCellIndex],\n            tr2.cells[sortByCellIndex]\n          );\n        } else if (compareFn && typeof compareFn === \"number\") {\n          result = 1;\n        } else if (\n          compareFn &&\n          typeof compareFn === \"string\" &&\n          Fn[compareFn]\n        ) {\n          result = Fn[compareFn].call(\n            this,\n            tr1.cells[sortByCellIndex],\n            tr2.cells[sortByCellIndex]\n          );\n        } else {\n          result = Fn[\"orderbyasc\"].call(\n            this,\n            tr1.cells[sortByCellIndex],\n            tr2.cells[sortByCellIndex]\n          );\n        }\n        return result;\n      });\n      var fragment = table.ownerDocument.createDocumentFragment();\n      for (var j = 0, len = trArray.length; j < len; j++) {\n        fragment.appendChild(trArray[j]);\n      }\n      var tbody = table.getElementsByTagName(\"tbody\")[0];\n      if (!lastRowIndex) {\n        tbody.appendChild(fragment);\n      } else {\n        tbody.insertBefore(\n          fragment,\n          rows[lastRowIndex - range.endRowIndex + range.beginRowIndex - 1]\n        );\n      }\n    }\n    //冒泡排序\n    function sort(array, compareFn) {\n      compareFn =\n        compareFn ||\n        function(item1, item2) {\n          return item1.localeCompare(item2);\n        };\n      for (var i = 0, len = array.length; i < len; i++) {\n        for (var j = i, length = array.length; j < length; j++) {\n          if (compareFn(array[i], array[j]) > 0) {\n            var t = array[i];\n            array[i] = array[j];\n            array[j] = t;\n          }\n        }\n      }\n      return array;\n    }\n    //更新表格\n    function updateTable(table) {\n      //给第一行设置firstRow的样式名称,在排序图标的样式上使用到\n      if (!utils.hasClass(table.rows[0], \"firstRow\")) {\n        for (var i = 1; i < table.rows.length; i++) {\n          utils.removeClass(table.rows[i], \"firstRow\");\n        }\n        utils.addClass(table.rows[0], \"firstRow\");\n      }\n    }\n  }\n});\n\nUE.parse.register(\"charts\", function(utils) {\n  utils.cssRule(\n    \"chartsContainerHeight\",\n    \".edui-chart-container { height:\" +\n      (this.chartContainerHeight || 300) +\n      \"px}\"\n  );\n  var resourceRoot = this.rootPath,\n    containers = this.root,\n    sources = null;\n\n  //不存在指定的根路径， 则直接退出\n  if (!resourceRoot) {\n    return;\n  }\n\n  if ((sources = parseSources())) {\n    loadResources();\n  }\n\n  function parseSources() {\n    if (!containers) {\n      return null;\n    }\n\n    return extractChartData(containers);\n  }\n\n  /**\n     * 提取数据\n     */\n  function extractChartData(rootNode) {\n    var data = [],\n      tables = rootNode.getElementsByTagName(\"table\");\n\n    for (var i = 0, tableNode; (tableNode = tables[i]); i++) {\n      if (tableNode.getAttribute(\"data-chart\") !== null) {\n        data.push(formatData(tableNode));\n      }\n    }\n\n    return data.length ? data : null;\n  }\n\n  function formatData(tableNode) {\n    var meta = tableNode.getAttribute(\"data-chart\"),\n      metaConfig = {},\n      data = [];\n\n    //提取table数据\n    for (var i = 0, row; (row = tableNode.rows[i]); i++) {\n      var rowData = [];\n\n      for (var j = 0, cell; (cell = row.cells[j]); j++) {\n        var value = cell.innerText || cell.textContent || \"\";\n        rowData.push(cell.tagName == \"TH\" ? value : value | 0);\n      }\n\n      data.push(rowData);\n    }\n\n    //解析元信息\n    meta = meta.split(\";\");\n    for (var i = 0, metaData; (metaData = meta[i]); i++) {\n      metaData = metaData.split(\":\");\n      metaConfig[metaData[0]] = metaData[1];\n    }\n\n    return {\n      table: tableNode,\n      meta: metaConfig,\n      data: data\n    };\n  }\n\n  //加载资源\n  function loadResources() {\n    loadJQuery();\n  }\n\n  function loadJQuery() {\n    //不存在jquery， 则加载jquery\n    if (!window.jQuery) {\n      utils.loadFile(\n        document,\n        {\n          src: resourceRoot + \"/third-party/jquery-1.10.2.min.js\",\n          tag: \"script\",\n          type: \"text/javascript\",\n          defer: \"defer\"\n        },\n        function() {\n          loadHighcharts();\n        }\n      );\n    } else {\n      loadHighcharts();\n    }\n  }\n\n  function loadHighcharts() {\n    //不存在Highcharts， 则加载Highcharts\n    if (!window.Highcharts) {\n      utils.loadFile(\n        document,\n        {\n          src: resourceRoot + \"/third-party/highcharts/highcharts.js\",\n          tag: \"script\",\n          type: \"text/javascript\",\n          defer: \"defer\"\n        },\n        function() {\n          loadTypeConfig();\n        }\n      );\n    } else {\n      loadTypeConfig();\n    }\n  }\n\n  //加载图表差异化配置文件\n  function loadTypeConfig() {\n    utils.loadFile(\n      document,\n      {\n        src: resourceRoot + \"/dialogs/charts/chart.config.js\",\n        tag: \"script\",\n        type: \"text/javascript\",\n        defer: \"defer\"\n      },\n      function() {\n        render();\n      }\n    );\n  }\n\n  //渲染图表\n  function render() {\n    var config = null,\n      chartConfig = null,\n      container = null;\n\n    for (var i = 0, len = sources.length; i < len; i++) {\n      config = sources[i];\n\n      chartConfig = analysisConfig(config);\n\n      container = createContainer(config.table);\n\n      renderChart(container, typeConfig[config.meta.chartType], chartConfig);\n    }\n  }\n\n  /**\n     * 渲染图表\n     * @param container 图表容器节点对象\n     * @param typeConfig 图表类型配置\n     * @param config 图表通用配置\n     * */\n  function renderChart(container, typeConfig, config) {\n    $(container).highcharts(\n      $.extend({}, typeConfig, {\n        credits: {\n          enabled: false\n        },\n        exporting: {\n          enabled: false\n        },\n        title: {\n          text: config.title,\n          x: -20 //center\n        },\n        subtitle: {\n          text: config.subTitle,\n          x: -20\n        },\n        xAxis: {\n          title: {\n            text: config.xTitle\n          },\n          categories: config.categories\n        },\n        yAxis: {\n          title: {\n            text: config.yTitle\n          },\n          plotLines: [\n            {\n              value: 0,\n              width: 1,\n              color: \"#808080\"\n            }\n          ]\n        },\n        tooltip: {\n          enabled: true,\n          valueSuffix: config.suffix\n        },\n        legend: {\n          layout: \"vertical\",\n          align: \"right\",\n          verticalAlign: \"middle\",\n          borderWidth: 1\n        },\n        series: config.series\n      })\n    );\n  }\n\n  /**\n     * 创建图表的容器\n     * 新创建的容器会替换掉对应的table对象\n     * */\n  function createContainer(tableNode) {\n    var container = document.createElement(\"div\");\n    container.className = \"edui-chart-container\";\n\n    tableNode.parentNode.replaceChild(container, tableNode);\n\n    return container;\n  }\n\n  //根据config解析出正确的类别和图表数据信息\n  function analysisConfig(config) {\n    var series = [],\n      //数据类别\n      categories = [],\n      result = [],\n      data = config.data,\n      meta = config.meta;\n\n    //数据对齐方式为相反的方式， 需要反转数据\n    if (meta.dataFormat != \"1\") {\n      for (var i = 0, len = data.length; i < len; i++) {\n        for (var j = 0, jlen = data[i].length; j < jlen; j++) {\n          if (!result[j]) {\n            result[j] = [];\n          }\n\n          result[j][i] = data[i][j];\n        }\n      }\n\n      data = result;\n    }\n\n    result = {};\n\n    //普通图表\n    if (meta.chartType != typeConfig.length - 1) {\n      categories = data[0].slice(1);\n\n      for (var i = 1, curData; (curData = data[i]); i++) {\n        series.push({\n          name: curData[0],\n          data: curData.slice(1)\n        });\n      }\n\n      result.series = series;\n      result.categories = categories;\n      result.title = meta.title;\n      result.subTitle = meta.subTitle;\n      result.xTitle = meta.xTitle;\n      result.yTitle = meta.yTitle;\n      result.suffix = meta.suffix;\n    } else {\n      var curData = [];\n\n      for (var i = 1, len = data[0].length; i < len; i++) {\n        curData.push([data[0][i], data[1][i] | 0]);\n      }\n\n      //饼图\n      series[0] = {\n        type: \"pie\",\n        name: meta.tip,\n        data: curData\n      };\n\n      result.series = series;\n      result.title = meta.title;\n      result.suffix = meta.suffix;\n    }\n\n    return result;\n  }\n});\n\nUE.parse.register(\"background\", function(utils) {\n  var me = this,\n    root = me.root,\n    p = root.getElementsByTagName(\"p\"),\n    styles;\n\n  for (var i = 0, ci; (ci = p[i++]); ) {\n    styles = ci.getAttribute(\"data-background\");\n    if (styles) {\n      ci.parentNode.removeChild(ci);\n    }\n  }\n\n  //追加默认的表格样式\n  styles &&\n    utils.cssRule(\n      \"ueditor_background\",\n      me.selector + \"{\" + styles + \"}\",\n      document\n    );\n});\n\nUE.parse.register(\"list\", function(utils) {\n  var customCss = [],\n    customStyle = {\n      cn: \"cn-1-\",\n      cn1: \"cn-2-\",\n      cn2: \"cn-3-\",\n      num: \"num-1-\",\n      num1: \"num-2-\",\n      num2: \"num-3-\",\n      dash: \"dash\",\n      dot: \"dot\"\n    };\n\n  utils.extend(this, {\n    liiconpath: \"http://bs.baidu.com/listicon/\",\n    listDefaultPaddingLeft: \"20\"\n  });\n\n  var root = this.root,\n    ols = root.getElementsByTagName(\"ol\"),\n    uls = root.getElementsByTagName(\"ul\"),\n    selector = this.selector;\n\n  if (ols.length) {\n    applyStyle.call(this, ols);\n  }\n\n  if (uls.length) {\n    applyStyle.call(this, uls);\n  }\n\n  if (ols.length || uls.length) {\n    customCss.push(selector + \" .list-paddingleft-1{padding-left:0}\");\n    customCss.push(\n      selector +\n        \" .list-paddingleft-2{padding-left:\" +\n        this.listDefaultPaddingLeft +\n        \"px}\"\n    );\n    customCss.push(\n      selector +\n        \" .list-paddingleft-3{padding-left:\" +\n        this.listDefaultPaddingLeft * 2 +\n        \"px}\"\n    );\n\n    utils.cssRule(\n      \"list\",\n      selector +\n        \" ol,\" +\n        selector +\n        \" ul{margin:0;padding:0;}\\n\" +\n        selector +\n        \" li{clear:both;}\\n\" +\n        customCss.join(\"\\n\"),\n      document\n    );\n  }\n  function applyStyle(nodes) {\n    var T = this;\n    utils.each(nodes, function(list) {\n      if (list.className && /custom_/i.test(list.className)) {\n        var listStyle = list.className.match(/custom_(\\w+)/)[1];\n        if (listStyle == \"dash\" || listStyle == \"dot\") {\n          utils.pushItem(\n            customCss,\n            selector +\n              \" li.list-\" +\n              customStyle[listStyle] +\n              \"{background-image:url(\" +\n              T.liiconpath +\n              customStyle[listStyle] +\n              \".gif)}\"\n          );\n          utils.pushItem(\n            customCss,\n            selector +\n              \" ul.custom_\" +\n              listStyle +\n              \"{list-style:none;} \" +\n              selector +\n              \" ul.custom_\" +\n              listStyle +\n              \" li{background-position:0 3px;background-repeat:no-repeat}\"\n          );\n        } else {\n          var index = 1;\n          utils.each(list.childNodes, function(li) {\n            if (li.tagName == \"LI\") {\n              utils.pushItem(\n                customCss,\n                selector +\n                  \" li.list-\" +\n                  customStyle[listStyle] +\n                  index +\n                  \"{background-image:url(\" +\n                  T.liiconpath +\n                  \"list-\" +\n                  customStyle[listStyle] +\n                  index +\n                  \".gif)}\"\n              );\n              index++;\n            }\n          });\n          utils.pushItem(\n            customCss,\n            selector +\n              \" ol.custom_\" +\n              listStyle +\n              \"{list-style:none;}\" +\n              selector +\n              \" ol.custom_\" +\n              listStyle +\n              \" li{background-position:0 3px;background-repeat:no-repeat}\"\n          );\n        }\n        switch (listStyle) {\n          case \"cn\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-1{padding-left:25px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-2{padding-left:40px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-3{padding-left:55px}\"\n            );\n            break;\n          case \"cn1\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-1{padding-left:30px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-2{padding-left:40px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-3{padding-left:55px}\"\n            );\n            break;\n          case \"cn2\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-1{padding-left:40px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-2{padding-left:55px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-3{padding-left:68px}\"\n            );\n            break;\n          case \"num\":\n          case \"num1\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-1{padding-left:25px}\"\n            );\n            break;\n          case \"num2\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-1{padding-left:35px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-2{padding-left:40px}\"\n            );\n            break;\n          case \"dash\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft{padding-left:35px}\"\n            );\n            break;\n          case \"dot\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft{padding-left:20px}\"\n            );\n        }\n      }\n    });\n  }\n});\n\nUE.parse.register(\"vedio\", function(utils) {\n  var video = this.root.getElementsByTagName(\"video\"),\n    audio = this.root.getElementsByTagName(\"audio\");\n\n  document.createElement(\"video\");\n  document.createElement(\"audio\");\n  if (video.length || audio.length) {\n    var sourcePath = utils.removeLastbs(this.rootPath),\n      jsurl = sourcePath + \"/third-party/video-js/video.js\",\n      cssurl = sourcePath + \"/third-party/video-js/video-js.min.css\",\n      swfUrl = sourcePath + \"/third-party/video-js/video-js.swf\";\n\n    if (window.videojs) {\n      videojs.autoSetup();\n    } else {\n      utils.loadFile(document, {\n        id: \"video_css\",\n        tag: \"link\",\n        rel: \"stylesheet\",\n        type: \"text/css\",\n        href: cssurl\n      });\n      utils.loadFile(\n        document,\n        {\n          id: \"video_js\",\n          src: jsurl,\n          tag: \"script\",\n          type: \"text/javascript\"\n        },\n        function() {\n          videojs.options.flash.swf = swfUrl;\n          videojs.autoSetup();\n        }\n      );\n    }\n  }\n});\n\n\n})();\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/content-theme/ant-design.css",
    "content": "/*!\n * Vditor - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\n.vditor-reset {\n    color: rgba(0, 0, 0, .85);\n    font-size: 14px;\n    line-height: 2;\n}\n\n.vditor-reset img {\n    max-width: calc(100% - 32px);\n}\n\n.vditor-reset p > img {\n    margin: 34px 0;\n    box-shadow: 0 8px 20px rgba(143, 168, 191, 0.35);\n}\n\n.vditor-reset h1 {\n    margin-bottom: 20px;\n    color: rgba(0, 0, 0, .85);\n    font-weight: 500;\n    font-size: 30px;\n    font-family: Avenir, -apple-system, BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji, sans-serif;\n    line-height: 38px\n}\n\n.vditor-reset h2 {\n    font-size: 24px;\n    line-height: 32px;\n}\n\n.vditor-reset h2,\n.vditor-reset h3,\n.vditor-reset h4,\n.vditor-reset h5,\n.vditor-reset h6 {\n    clear: both;\n    margin: 1.6em 0 .6em;\n    color: rgba(0, 0, 0, .85);\n    font-weight: 500;\n    font-family: Avenir, -apple-system, BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji, sans-serif\n}\n\n.vditor-reset h3 {\n    font-size: 18px;\n}\n\n.vditor-reset h4 {\n    font-size: 16px;\n}\n\n.vditor-reset h5 {\n    font-size: 14px;\n}\n\n.vditor-reset h6 {\n    font-size: 12px;\n}\n\n.vditor-reset hr {\n    clear: both;\n    height: 1px;\n    margin: 56px 0;\n    background: #f0f0f0;\n    border: 0;\n}\n\n.vditor-reset p,\n.vditor-reset pre {\n    margin: 1em 0;\n}\n\n.vditor-reset ul > li {\n    margin-left: 20px;\n    padding-left: 4px;\n    list-style-type: circle;\n}\n\n.vditor-reset ol > li {\n    margin-left: 20px;\n    padding-left: 4px;\n    list-style-type: decimal;\n}\n\n.vditor-reset ul > li > p,\n.vditor-reset ol > li > p {\n    margin: 0.2em 0;\n}\n\n.vditor-reset code {\n    margin: 0 1px;\n    padding: .2em .4em;\n    font-size: .9em;\n    border-radius: 3px;\n    border: 1px solid #f0f0f0;\n    font-family: sfmono-regular, Consolas, liberation mono, Menlo, Courier, monospace;\n}\n\n.vditor-reset code:not(.hljs):not(.highlight-chroma) {\n    background: #f2f4f5;\n    color: rgba(0, 0, 0, .65);\n}\n\n.vditor-reset pre {\n    font-family: sfmono-regular, Consolas, liberation mono, Menlo, Courier, monospace;\n    border-radius: 2px;\n}\n\n.vditor-reset .language-abc svg,\n.vditor-reset .language-abc path {\n    fill: currentColor;\n    color: rgba(0, 0, 0, .85);\n}\n\n.vditor-reset .language-graphviz polygon {\n    fill: transparent;\n}\n\n.vditor-reset strong,\n.vditor-reset b {\n    font-weight: 500;\n}\n\n.vditor-reset > table {\n    width: 100%;\n    margin: 8px 0 16px;\n    direction: ltr;\n    empty-cells: show;\n    border: 1px solid #f0f0f0;\n    border-collapse: collapse;\n    border-spacing: 0\n}\n\n.vditor-reset > table th {\n    color: #5c6b77;\n    font-weight: 500;\n    white-space: nowrap;\n    background: rgba(0, 0, 0, .02)\n}\n\n.vditor-reset > table th, .vditor-reset > table td {\n    padding: 16px 24px;\n    text-align: left;\n    border: 1px solid #f0f0f0\n}\n\n.vditor-reset blockquote {\n    margin: 1em 0;\n    padding-left: .8em;\n    color: rgba(0, 0, 0, .45);\n    font-size: 90%;\n    border-left: 4px solid #f0f0f0\n}\n\n.vditor-reset blockquote p {\n    margin: 0;\n}\n\n.vditor-reset .vditor-anchor {\n    margin-left: 8px;\n    opacity: 0;\n    transition: opacity 0.3s;\n}\n\n.vditor-reset h1:hover .vditor-anchor,\n.vditor-reset h2:hover .vditor-anchor,\n.vditor-reset h3:hover .vditor-anchor,\n.vditor-reset h4:hover .vditor-anchor,\n.vditor-reset h5:hover .vditor-anchor,\n.vditor-reset h6:hover .vditor-anchor {\n    display: inline-block;\n    opacity: 1;\n}\n\n.vditor-reset > br,\n.vditor-reset > p > br {\n    clear: both;\n}\n\n.vditor-reset a, .vditor-ir__link {\n    color: #1890ff;\n    text-decoration: none;\n    outline: none;\n    cursor: pointer;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/content-theme/dark.css",
    "content": "/*!\n * Vditor - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n.vditor-reset {\n    color: #d1d5da;\n}\n\n.vditor-reset a, .vditor-ir__link {\n    color: #4285f4;\n}\n\n.vditor-reset h1, .vditor-reset h2 {\n    padding-bottom: 0.3em;\n    border-bottom: 1px solid #d1d5da\n}\n\n.vditor-reset hr {\n    background-color: #d1d5da\n}\n\n.vditor-reset blockquote {\n    padding: 0 1em;\n    color: #b9b9b9;\n    border-left: .25em solid #d1d5da\n}\n\n.vditor-reset iframe {\n    border: 1px solid #141414\n}\n\n.vditor-reset table tr {\n    background-color: #2f363d\n}\n\n.vditor-reset table td, .vditor-reset table th {\n    border: 1px solid #dfe2e5\n}\n\n.vditor-reset table tbody tr:nth-child(2n) {\n    background-color: #24292e\n}\n\n.vditor-reset code:not(.hljs):not(.highlight-chroma) {\n    background-color: rgba(66, 133, 244, .36);\n}\n\n.vditor-reset .language-abc svg,\n.vditor-reset .language-abc path {\n    fill: currentColor;\n    color: #d1d5da;\n}\n\n.language-graphviz polygon {\n    fill: rgba(66, 133, 244, .36);\n}\n\n.vditor-reset kbd {\n    color: #d1d5da;\n    background-color: #2f363d;\n    border: 1px solid #141414;\n    box-shadow: inset 0 -1px 0 #141414\n}\n\n.vditor-copy svg {\n    color: #b9b9b9\n}\n\n.vditor-speech {\n    background-color: #1d2125;\n    border: 1px solid #141414;\n    color: #b9b9b9\n}\n\n.vditor-speech--current, .vditor-speech:hover {\n    color: #fff\n}\n\n.vditor-linkcard a {\n    background-color: #1d2125;\n}\n\n.vditor-linkcard a:visited .vditor-linkcard__abstract {\n    color: hsla(0, 0%, 72.5%, .36)\n}\n\n.vditor-linkcard__title {\n    color: #d1d5da\n}\n\n.vditor-linkcard__abstract {\n    color: #b9b9b9\n}\n\n.vditor-linkcard__site {\n    color: #fff\n}\n\n.vditor-linkcard__image {\n    background-color: hsla(0, 0%, 72.5%, .36)\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/content-theme/light.css",
    "content": "/*!\n * Vditor - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n.vditor-reset h1, .vditor-reset h2 {\n    padding-bottom: 0.3em;\n    border-bottom: 1px solid #eaecef;\n}\n\n.vditor-reset hr {\n    background-color: #eaecef;\n}\n\n.vditor-reset blockquote {\n    color: #6a737d;\n    border-left: .25em solid #eaecef\n}\n\n.vditor-reset iframe {\n    border: 1px solid #d1d5da\n}\n\n.vditor-reset table tr {\n    border-top: 1px solid #c6cbd1;\n    background-color: #fafbfc\n}\n\n.vditor-reset table td, .vditor-reset table th {\n    border: 1px solid #dfe2e5\n}\n\n.vditor-reset table tbody tr:nth-child(2n) {\n    background-color: #fff\n}\n\n.vditor-reset code:not(.hljs):not(.highlight-chroma) {\n    background-color: rgba(27, 31, 35, .05);\n}\n\n.vditor-reset kbd {\n    color: #24292e;\n    background-color: #fafbfc;\n    border: solid 1px #d1d5da;\n    box-shadow: inset 0 -1px 0 #d1d5da;\n}\n\n.vditor-speech {\n    background-color: #f6f8fa;\n    border: 1px solid #d1d5da;\n    color: #586069;\n}\n\n.vditor-speech--current, .vditor-speech:hover {\n    color: #4285f4;\n}\n\n.vditor-linkcard a {\n    background-color: #f6f8fa;\n}\n\n.vditor-linkcard a:visited .vditor-linkcard__abstract {\n    color: rgba(88, 96, 105, 0.36);\n}\n\n.vditor-linkcard__title {\n    color: #24292e;\n}\n\n.vditor-linkcard__abstract {\n    color: #586069;\n}\n\n.vditor-linkcard__site {\n    color: #4285f4;\n}\n\n.vditor-linkcard__image {\n    background-color: rgba(88, 96, 105, 0.36);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/content-theme/wechat.css",
    "content": "/*!\n * Vditor - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n.vditor-reset {\n    font-family: \"mp-quote\", -apple-system-font, BlinkMacSystemFont, \"Helvetica Neue\", \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei UI\", \"Microsoft YaHei\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", \"Segoe UI Symbol\", \"Android Emoji\", \"EmojiSymbols\";\n    color: rgb(62, 62, 62);\n}\n\n.vditor-reset a, .vditor-ir__link {\n    color: #576b95;\n}\n\n.vditor-reset h1 {\n    font-weight: 400;\n    text-align: center;\n    color: rgb(26, 173, 25);\n    font-size: 24px;\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAYAAABYBvyLAAAAGElEQVQImWNkXs/wn4GKgImahjEwMDAAAA6aAbVUOzXRAAAAAElFTkSuQmCC);\n    background-repeat: no-repeat;\n    background-position: center bottom;\n}\n\n.vditor-reset h2 {\n    font-weight: 400;\n    text-align: center;\n    font-size: 20px;\n}\n\n.vditor-reset h3,\n.vditor-reset h4,\n.vditor-reset h5,\n.vditor-reset h6 {\n    font-weight: 400;\n}\n\n.vditor-reset hr {\n    border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n    transform-origin: 0 0;\n    transform: scale(1, 0.5);\n    height: 0;\n}\n\n.vditor-reset blockquote {\n    padding: 4px 0 0 10px;\n    border-left: 3px solid #dbdbdb;\n    color: #9a9a9a;\n    line-height: 1.6;\n    font-size: 15px;\n    margin: 1em 0;\n}\n\n.vditor-reset code {\n    font-size: 14px;\n    border: 1px solid #f0f0f0;\n    border-radius: 2px;\n}\n\n.vditor-reset code:not(.hljs):not(.highlight-chroma) {\n    background-color: rgba(0, 0, 0, 0.03);\n    color: #333;\n}\n\n.vditor-reset .language-abc svg,\n.vditor-reset .language-abc path {\n    fill: currentColor;\n    color: rgb(62, 62, 62);\n}\n\n.vditor-reset .language-graphviz polygon {\n    fill: transparent;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/css/content-theme/ant-design.css",
    "content": "/*!\n * Vditor - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\n.vditor-reset {\n    color: rgba(0, 0, 0, .85);\n    font-size: 14px;\n    line-height: 2;\n}\n\n.vditor-reset img {\n    max-width: calc(100% - 32px);\n}\n\n.vditor-reset p > img {\n    margin: 34px 0;\n    box-shadow: 0 8px 20px rgba(143, 168, 191, 0.35);\n}\n\n.vditor-reset h1 {\n    margin-bottom: 20px;\n    color: rgba(0, 0, 0, .85);\n    font-weight: 500;\n    font-size: 30px;\n    font-family: Avenir, -apple-system, BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji, sans-serif;\n    line-height: 38px\n}\n\n.vditor-reset h2 {\n    font-size: 24px;\n    line-height: 32px;\n}\n\n.vditor-reset h2,\n.vditor-reset h3,\n.vditor-reset h4,\n.vditor-reset h5,\n.vditor-reset h6 {\n    clear: both;\n    margin: 1.6em 0 .6em;\n    color: rgba(0, 0, 0, .85);\n    font-weight: 500;\n    font-family: Avenir, -apple-system, BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji, sans-serif\n}\n\n.vditor-reset h3 {\n    font-size: 18px;\n}\n\n.vditor-reset h4 {\n    font-size: 16px;\n}\n\n.vditor-reset h5 {\n    font-size: 14px;\n}\n\n.vditor-reset h6 {\n    font-size: 12px;\n}\n\n.vditor-reset hr {\n    clear: both;\n    height: 1px;\n    margin: 56px 0;\n    background: #f0f0f0;\n    border: 0;\n}\n\n.vditor-reset p,\n.vditor-reset pre {\n    margin: 1em 0;\n}\n\n.vditor-reset ul > li {\n    margin-left: 20px;\n    padding-left: 4px;\n    list-style-type: circle;\n}\n\n.vditor-reset ol > li {\n    margin-left: 20px;\n    padding-left: 4px;\n    list-style-type: decimal;\n}\n\n.vditor-reset ul > li > p,\n.vditor-reset ol > li > p {\n    margin: 0.2em 0;\n}\n\n.vditor-reset code {\n    margin: 0 1px;\n    padding: .2em .4em;\n    font-size: .9em;\n    border-radius: 3px;\n    border: 1px solid #f0f0f0;\n    font-family: sfmono-regular, Consolas, liberation mono, Menlo, Courier, monospace;\n}\n\n.vditor-reset code:not(.hljs):not(.highlight-chroma) {\n    background: #f2f4f5;\n    color: rgba(0, 0, 0, .65);\n}\n\n.vditor-reset pre {\n    font-family: sfmono-regular, Consolas, liberation mono, Menlo, Courier, monospace;\n    border-radius: 2px;\n}\n\n.vditor-reset .language-abc svg,\n.vditor-reset .language-abc path {\n    fill: currentColor;\n    color: rgba(0, 0, 0, .85);\n}\n\n.vditor-reset .language-graphviz polygon {\n    fill: transparent;\n}\n\n.vditor-reset strong,\n.vditor-reset b {\n    font-weight: 500;\n}\n\n.vditor-reset > table {\n    width: 100%;\n    margin: 8px 0 16px;\n    direction: ltr;\n    empty-cells: show;\n    border: 1px solid #f0f0f0;\n    border-collapse: collapse;\n    border-spacing: 0\n}\n\n.vditor-reset > table th {\n    color: #5c6b77;\n    font-weight: 500;\n    white-space: nowrap;\n    background: rgba(0, 0, 0, .02)\n}\n\n.vditor-reset > table th, .vditor-reset > table td {\n    padding: 16px 24px;\n    text-align: left;\n    border: 1px solid #f0f0f0\n}\n\n.vditor-reset blockquote {\n    margin: 1em 0;\n    padding-left: .8em;\n    color: rgba(0, 0, 0, .45);\n    font-size: 90%;\n    border-left: 4px solid #f0f0f0\n}\n\n.vditor-reset blockquote p {\n    margin: 0;\n}\n\n.vditor-reset .vditor-anchor {\n    margin-left: 8px;\n    opacity: 0;\n    transition: opacity 0.3s;\n}\n\n.vditor-reset h1:hover .vditor-anchor,\n.vditor-reset h2:hover .vditor-anchor,\n.vditor-reset h3:hover .vditor-anchor,\n.vditor-reset h4:hover .vditor-anchor,\n.vditor-reset h5:hover .vditor-anchor,\n.vditor-reset h6:hover .vditor-anchor {\n    display: inline-block;\n    opacity: 1;\n}\n\n.vditor-reset > br,\n.vditor-reset > p > br {\n    clear: both;\n}\n\n.vditor-reset a, .vditor-ir__link {\n    color: #1890ff;\n    text-decoration: none;\n    outline: none;\n    cursor: pointer;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/css/content-theme/dark.css",
    "content": "/*!\n * Vditor - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n.vditor-reset {\n    color: #d1d5da;\n}\n\n.vditor-reset a, .vditor-ir__link {\n    color: #4285f4;\n}\n\n.vditor-reset h1, .vditor-reset h2 {\n    padding-bottom: 0.3em;\n    border-bottom: 1px solid #d1d5da\n}\n\n.vditor-reset hr {\n    background-color: #d1d5da\n}\n\n.vditor-reset blockquote {\n    padding: 0 1em;\n    color: #b9b9b9;\n    border-left: .25em solid #d1d5da\n}\n\n.vditor-reset iframe {\n    border: 1px solid #141414\n}\n\n.vditor-reset table tr {\n    background-color: #2f363d\n}\n\n.vditor-reset table td, .vditor-reset table th {\n    border: 1px solid #dfe2e5\n}\n\n.vditor-reset table tbody tr:nth-child(2n) {\n    background-color: #24292e\n}\n\n.vditor-reset code:not(.hljs):not(.highlight-chroma) {\n    background-color: rgba(66, 133, 244, .36);\n}\n\n.vditor-reset .language-abc svg,\n.vditor-reset .language-abc path {\n    fill: currentColor;\n    color: #d1d5da;\n}\n\n.language-graphviz polygon {\n    fill: rgba(66, 133, 244, .36);\n}\n\n.vditor-reset kbd {\n    color: #d1d5da;\n    background-color: #2f363d;\n    border: 1px solid #141414;\n    box-shadow: inset 0 -1px 0 #141414\n}\n\n.vditor-copy svg {\n    color: #b9b9b9\n}\n\n.vditor-speech {\n    background-color: #1d2125;\n    border: 1px solid #141414;\n    color: #b9b9b9\n}\n\n.vditor-speech--current, .vditor-speech:hover {\n    color: #fff\n}\n\n.vditor-linkcard a {\n    background-color: #1d2125;\n}\n\n.vditor-linkcard a:visited .vditor-linkcard__abstract {\n    color: hsla(0, 0%, 72.5%, .36)\n}\n\n.vditor-linkcard__title {\n    color: #d1d5da\n}\n\n.vditor-linkcard__abstract {\n    color: #b9b9b9\n}\n\n.vditor-linkcard__site {\n    color: #fff\n}\n\n.vditor-linkcard__image {\n    background-color: hsla(0, 0%, 72.5%, .36)\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/css/content-theme/light.css",
    "content": "/*!\n * Vditor - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n.vditor-reset h1, .vditor-reset h2 {\n    padding-bottom: 0.3em;\n    border-bottom: 1px solid #eaecef;\n}\n\n.vditor-reset hr {\n    background-color: #eaecef;\n}\n\n.vditor-reset blockquote {\n    color: #6a737d;\n    border-left: .25em solid #eaecef\n}\n\n.vditor-reset iframe {\n    border: 1px solid #d1d5da\n}\n\n.vditor-reset table tr {\n    border-top: 1px solid #c6cbd1;\n    background-color: #fafbfc\n}\n\n.vditor-reset table td, .vditor-reset table th {\n    border: 1px solid #dfe2e5\n}\n\n.vditor-reset table tbody tr:nth-child(2n) {\n    background-color: #fff\n}\n\n.vditor-reset code:not(.hljs):not(.highlight-chroma) {\n    background-color: rgba(27, 31, 35, .05);\n}\n\n.vditor-reset kbd {\n    color: #24292e;\n    background-color: #fafbfc;\n    border: solid 1px #d1d5da;\n    box-shadow: inset 0 -1px 0 #d1d5da;\n}\n\n.vditor-speech {\n    background-color: #f6f8fa;\n    border: 1px solid #d1d5da;\n    color: #586069;\n}\n\n.vditor-speech--current, .vditor-speech:hover {\n    color: #4285f4;\n}\n\n.vditor-linkcard a {\n    background-color: #f6f8fa;\n}\n\n.vditor-linkcard a:visited .vditor-linkcard__abstract {\n    color: rgba(88, 96, 105, 0.36);\n}\n\n.vditor-linkcard__title {\n    color: #24292e;\n}\n\n.vditor-linkcard__abstract {\n    color: #586069;\n}\n\n.vditor-linkcard__site {\n    color: #4285f4;\n}\n\n.vditor-linkcard__image {\n    background-color: rgba(88, 96, 105, 0.36);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/css/content-theme/wechat.css",
    "content": "/*!\n * Vditor - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n.vditor-reset {\n    font-family: \"mp-quote\", -apple-system-font, BlinkMacSystemFont, \"Helvetica Neue\", \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei UI\", \"Microsoft YaHei\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", \"Segoe UI Symbol\", \"Android Emoji\", \"EmojiSymbols\";\n    color: rgb(62, 62, 62);\n}\n\n.vditor-reset a, .vditor-ir__link {\n    color: #576b95;\n}\n\n.vditor-reset h1 {\n    font-weight: 400;\n    text-align: center;\n    color: rgb(26, 173, 25);\n    font-size: 24px;\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAYAAABYBvyLAAAAGElEQVQImWNkXs/wn4GKgImahjEwMDAAAA6aAbVUOzXRAAAAAElFTkSuQmCC);\n    background-repeat: no-repeat;\n    background-position: center bottom;\n}\n\n.vditor-reset h2 {\n    font-weight: 400;\n    text-align: center;\n    font-size: 20px;\n}\n\n.vditor-reset h3,\n.vditor-reset h4,\n.vditor-reset h5,\n.vditor-reset h6 {\n    font-weight: 400;\n}\n\n.vditor-reset hr {\n    border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n    transform-origin: 0 0;\n    transform: scale(1, 0.5);\n    height: 0;\n}\n\n.vditor-reset blockquote {\n    padding: 4px 0 0 10px;\n    border-left: 3px solid #dbdbdb;\n    color: #9a9a9a;\n    line-height: 1.6;\n    font-size: 15px;\n    margin: 1em 0;\n}\n\n.vditor-reset code {\n    font-size: 14px;\n    border: 1px solid #f0f0f0;\n    border-radius: 2px;\n}\n\n.vditor-reset code:not(.hljs):not(.highlight-chroma) {\n    background-color: rgba(0, 0, 0, 0.03);\n    color: #333;\n}\n\n.vditor-reset .language-abc svg,\n.vditor-reset .language-abc path {\n    fill: currentColor;\n    color: rgb(62, 62, 62);\n}\n\n.vditor-reset .language-graphviz polygon {\n    fill: transparent;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/index.css",
    "content": "/*!\n * Vditor v3.11.0 - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n/*!\n * Vditor v3.11.0 - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n.vditor {\n  --border-color: #d1d5da;\n  --second-color: rgba(88, 96, 105, 0.36);\n  --panel-background-color: #fff;\n  --panel-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n  --toolbar-background-color: #F6F8FA;\n  --toolbar-icon-color: #1D1E1F;\n  --toolbar-icon-hover-color: #4285f4;\n  --toolbar-height: 35px;\n  --toolbar-divider-margin-top: 8px;\n  --toolbar-item-hover-background-color: #EEF0F2;\n  --textarea-background-color: #fafbfc;\n  --textarea-text-color: #24292e;\n  --resize-icon-color: var(--toolbar-icon-color);\n  --resize-background-color: var(--toolbar-background-color);\n  --resize-hover-icon-color: var(--panel-background-color);\n  --resize-hover-background-color: var(--toolbar-icon-hover-color);\n  --count-background-color: rgba(27, 31, 35, 0.05);\n  --heading-border-color: #eaecef;\n  --blockquote-color: #6a737d;\n  --ir-heading-color: #660e7a;\n  --ir-title-color: #808080;\n  --ir-bi-color: #0033b3;\n  --ir-link-color: #008000;\n  --ir-bracket-color: #0000ff;\n  --ir-paren-color: #008000;\n}\n.vditor--dark {\n  --border-color: #141414;\n  --second-color: rgba(185, 185, 185, 0.36);\n  --panel-background-color: #24292e;\n  --panel-shadow: 0 1px 2px rgba(255, 255, 255, 0.2);\n  --toolbar-background-color: #1d2125;\n  --toolbar-icon-color: #b9b9b9;\n  --toolbar-icon-hover-color: #fff;\n  --textarea-background-color: #2f363d;\n  --textarea-text-color: #d1d5da;\n  --resize-icon-color: var(--border-color);\n  --resize-background-color: var(--second-color);\n  --resize-hover-icon-color: var(--toolbar-icon-hover-color);\n  --resize-hover-background-color: rgba(185, 185, 185, 0.86);\n  --count-background-color: rgba(66, 133, 244, 0.36);\n  --heading-border-color: var(--textarea-text-color);\n  --blockquote-color: var(--toolbar-icon-color);\n  --ir-heading-color: #9876aa;\n  --ir-title-color: #808080;\n  --ir-bi-color: #cc7832;\n  --ir-link-color: #ffc66d;\n  --ir-bracket-color: #287bde;\n  --ir-paren-color: #6a8759;\n}\n/**\n * tool tip.\n *\n * @author <a href=\"http://vanessa.b3log.org\">Liyuan Li</a>\n * @version 0.1.0.0, Jan 25, 2019\n */\n@keyframes tooltip-appear {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n.vditor-tooltipped {\n  position: relative;\n  cursor: pointer;\n}\n.vditor-tooltipped:not([data-type=\"edit-mode\"])::after {\n  position: absolute;\n  z-index: 1000000;\n  display: none;\n  padding: 5px 8px;\n  font-size: 11px;\n  font-weight: normal;\n  -webkit-font-smoothing: subpixel-antialiased;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-wrap: break-word;\n  white-space: pre;\n  pointer-events: none;\n  content: attr(aria-label);\n  background: #3b3e43;\n  border-radius: 3px;\n  line-height: 16px;\n  opacity: 0;\n}\n.vditor-tooltipped:not([data-type=\"edit-mode\"]):before {\n  position: absolute;\n  z-index: 1000001;\n  display: none;\n  width: 0;\n  height: 0;\n  color: #3b3e43;\n  pointer-events: none;\n  content: \"\";\n  border: 5px solid transparent;\n  opacity: 0;\n}\n.vditor-tooltipped--hover::before,\n.vditor-tooltipped--hover::after,\n.vditor-tooltipped:hover::before,\n.vditor-tooltipped:hover::after,\n.vditor-tooltipped:active::before,\n.vditor-tooltipped:active::after,\n.vditor-tooltipped:focus::before,\n.vditor-tooltipped:focus::after {\n  display: inline-block;\n  text-decoration: none;\n  animation-name: tooltip-appear;\n  animation-duration: 0.15s;\n  animation-fill-mode: forwards;\n  animation-timing-function: ease-in;\n}\n.vditor-tooltipped__s::after,\n.vditor-tooltipped__se::after,\n.vditor-tooltipped__sw::after {\n  top: 100%;\n  right: 50%;\n  margin-top: 5px;\n}\n.vditor-tooltipped__s::before,\n.vditor-tooltipped__se::before,\n.vditor-tooltipped__sw::before {\n  top: auto;\n  right: 50%;\n  bottom: -5px;\n  margin-right: -5px;\n  border-bottom-color: #3b3e43;\n}\n.vditor-tooltipped__se::after {\n  right: auto;\n  left: 50%;\n  margin-left: -15px;\n}\n.vditor-tooltipped__sw::after {\n  margin-right: -15px;\n}\n.vditor-tooltipped__n::after,\n.vditor-tooltipped__ne::after,\n.vditor-tooltipped__nw::after {\n  right: 50%;\n  bottom: 100%;\n  margin-bottom: 5px;\n}\n.vditor-tooltipped__n::before,\n.vditor-tooltipped__ne::before,\n.vditor-tooltipped__nw::before {\n  top: -5px;\n  right: 50%;\n  bottom: auto;\n  margin-right: -5px;\n  border-top-color: #3b3e43;\n}\n.vditor-tooltipped__ne::after {\n  right: auto;\n  left: 50%;\n  margin-left: -15px;\n}\n.vditor-tooltipped__nw::after {\n  margin-right: -15px;\n}\n.vditor-tooltipped__s::after,\n.vditor-tooltipped__n::after {\n  transform: translateX(50%);\n}\n.vditor-tooltipped__w::after {\n  right: 100%;\n  bottom: 50%;\n  margin-right: 5px;\n  transform: translateY(50%);\n}\n.vditor-tooltipped__w::before {\n  top: 50%;\n  bottom: 50%;\n  left: -5px;\n  margin-top: -5px;\n  border-left-color: #3b3e43;\n}\n.vditor-tooltipped__e::after {\n  bottom: 50%;\n  left: 100%;\n  margin-left: 5px;\n  transform: translateY(50%);\n}\n.vditor-tooltipped__e::before {\n  top: 50%;\n  right: -5px;\n  bottom: 50%;\n  margin-top: -5px;\n  border-right-color: #3b3e43;\n}\n@media screen and (max-width: 520px) {\n  .vditor-tooltipped:before,\n  .vditor-tooltipped:after {\n    content: none;\n  }\n}\n/**\n * panel.\n *\n * @author <a href=\"http://vanessa.b3log.org\">Liyuan Li</a>\n * @version 1.0.0.0, Jan 22, 2020\n */\n@keyframes scale-in {\n  0% {\n    opacity: 0;\n    transform: scale(0.5);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n.vditor-panel {\n  background-color: var(--panel-background-color);\n  position: absolute;\n  box-shadow: var(--panel-shadow);\n  border-radius: 3px;\n  padding: 5px;\n  z-index: 3;\n  font-size: 14px;\n  display: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  max-width: 320px;\n  min-width: 80px;\n  animation-duration: 0.15s;\n  animation-name: scale-in;\n  animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5);\n  color: var(--toolbar-icon-color);\n}\n.vditor-panel--none {\n  padding: 0;\n  animation: none;\n  min-width: auto;\n  max-width: none;\n  white-space: nowrap;\n  opacity: 0.86;\n}\n.vditor-panel--arrow:before {\n  position: absolute;\n  width: 0;\n  height: 0;\n  pointer-events: none;\n  content: \" \";\n  border: 7px solid transparent;\n  top: -14px;\n  left: 5px;\n  border-bottom-color: var(--panel-background-color);\n}\n.vditor-panel--left {\n  right: 0;\n}\n.vditor-panel--left.vditor-panel--arrow:before {\n  right: 5px;\n  left: auto;\n}\n.vditor-input {\n  border: 0;\n  padding: 3px 5px;\n  background-color: var(--panel-background-color);\n  font-size: 12px;\n  color: var(--textarea-text-color);\n}\n.vditor-input:focus {\n  background-color: var(--toolbar-background-color);\n  outline: none;\n}\n.vditor-icon {\n  color: var(--toolbar-icon-color);\n  cursor: pointer;\n  float: left;\n  padding: 4px 5px;\n  height: 21px;\n  width: 23px;\n  background-color: transparent;\n  border: 0;\n  box-sizing: border-box;\n}\n.vditor-icon:hover,\n.vditor-icon--current {\n  color: var(--toolbar-icon-hover-color);\n  background-color: transparent;\n}\n.vditor-icon:focus {\n  outline: none;\n}\n.vditor-icon svg {\n  height: 13px !important;\n  width: 13px !important;\n  float: left;\n  fill: currentColor;\n  pointer-events: none;\n}\n.vditor-toolbar {\n  background-color: var(--toolbar-background-color);\n  border-bottom: 1px solid var(--border-color);\n  padding: 0 5px;\n  line-height: 1;\n  display: flex;\n  align-items: center;\n}\n.vditor-toolbar--pin {\n  position: sticky;\n  top: 0;\n  z-index: 1;\n}\n.vditor-toolbar--hide {\n  transition: all 0.15s ease-in-out;\n  height: 5px;\n  overflow: hidden;\n}\n.vditor-toolbar--hide:hover {\n  background-color: var(--toolbar-background-color);\n  height: auto;\n  overflow: visible;\n}\n.vditor-toolbar__item {\n  position: relative;\n  padding: 8px 0;\n}\n.vditor-toolbar__item .vditor-tooltipped {\n  color: var(--toolbar-icon-color);\n  border: 0;\n  background-color: transparent;\n  padding: 0 8px;\n  height: 24px;\n  box-sizing: border-box;\n  font-size: 12px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 4px;\n}\n.vditor-toolbar__item .vditor-tooltipped:focus {\n  outline: none;\n  cursor: pointer;\n}\n.vditor-toolbar__item .vditor-tooltipped:hover {\n  cursor: pointer;\n  background-color: var(--toolbar-item-hover-background-color);\n}\n.vditor-toolbar__item svg {\n  fill: currentColor;\n  display: inline-block;\n  stroke-width: 0;\n  stroke: currentColor;\n  width: 16px;\n  height: 16px;\n}\n.vditor-toolbar__item input {\n  position: absolute;\n  width: 25px;\n  height: var(--toolbar-height);\n  top: 0;\n  left: 0;\n  cursor: pointer;\n  opacity: 0.001;\n  overflow: hidden;\n}\n.vditor-toolbar__divider {\n  float: left;\n  height: calc(var(--toolbar-height) - (var(--toolbar-divider-margin-top) * 2));\n  border-left: 1px solid #E6E8EB;\n  margin: var(--toolbar-divider-margin-top) 8px;\n}\n.vditor-toolbar__line {\n  height: 1px;\n  border-top: 1px solid #E6E8EB;\n}\n.vditor-toolbar__br {\n  width: 100%;\n  padding: 0 !important;\n  height: 0 !important;\n}\n.vditor-menu--current {\n  color: var(--toolbar-icon-hover-color) !important;\n}\n.vditor-menu--disabled {\n  color: var(--second-color) !important;\n  cursor: not-allowed !important;\n}\n.vditor-emojis {\n  display: inline-block;\n  overflow: auto;\n}\n.vditor-emojis::-webkit-scrollbar {\n  display: none;\n}\n.vditor-emojis__tip {\n  flex: 1;\n  min-width: 1px;\n  width: 200px;\n  margin-right: 10px;\n  color: var(--toolbar-icon-color);\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.vditor-emojis__tail {\n  margin-top: 5px;\n  font-size: 12px;\n  color: var(--toolbar-icon-color);\n  display: flex;\n}\n.vditor-emojis__tail a {\n  text-decoration: none;\n  color: var(--toolbar-icon-color);\n}\n.vditor-emojis__tail a:hover {\n  color: var(--toolbar-icon-hover-color);\n}\n.vditor-emojis button {\n  cursor: pointer;\n  border-radius: 3px;\n  float: left;\n  height: 30px;\n  width: 30px;\n  text-align: center;\n  line-height: 26px;\n  padding: 3px;\n  box-sizing: border-box;\n  font-size: 16px;\n  transition: all 0.15s ease-in-out;\n  border: 0;\n  margin: 0;\n  background-color: transparent;\n  overflow: hidden;\n}\n.vditor-emojis button:focus {\n  outline: none;\n}\n.vditor-emojis button:hover .vditor-emojis__icon {\n  display: inline-block;\n  transform: scale(1.2);\n}\n.vditor-emojis img {\n  height: 20px;\n  width: 20px;\n  float: left;\n  margin: 3px 0 0 3px;\n}\n@media screen and (max-width: 520px) {\n  .vditor-toolbar__item {\n    padding: 0 12px;\n  }\n  .vditor-panel--left.vditor-panel--arrow:before {\n    right: 17px;\n  }\n}\n@keyframes slideInDown {\n  from {\n    transform: translate3d(0, -100%, 0);\n    visibility: visible;\n  }\n  to {\n    transform: translate3d(0, 0, 0);\n  }\n}\n.vditor {\n  display: flex;\n  flex-direction: column;\n  border: 1px solid var(--border-color);\n  border-radius: 3px;\n  box-sizing: border-box;\n  font-family: \"Helvetica Neue\", \"Luxi Sans\", \"DejaVu Sans\", \"Hiragino Sans GB\", \"Microsoft Yahei\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", \"Segoe UI Symbol\", \"Android Emoji\", \"EmojiSymbols\";\n}\n.vditor-fullscreen-wrapper {\n  position: fixed !important;\n  top: 0;\n  left: 0;\n  width: 100% !important;\n  height: 100vh !important;\n  z-index: 9999;\n  border-radius: 0;\n  padding: 16px;\n  background: rgba(0, 0, 0, 0.25);\n  box-sizing: border-box;\n}\n.vditor--fullscreen {\n  width: 100% !important;\n  height: 100% !important;\n  border-radius: 0;\n  position: relative !important;\n}\n.vditor-content {\n  display: flex;\n  min-height: 60px;\n  flex: 1;\n  min-width: 1px;\n  position: relative;\n}\n.vditor-preview {\n  flex: 1;\n  min-width: 1px;\n  overflow: auto;\n  margin-left: -1px;\n  border-left: 1px solid var(--border-color);\n  box-sizing: border-box;\n  border-radius: 0 0 3px 0;\n  background-color: var(--textarea-background-color);\n}\n.vditor-preview::-webkit-scrollbar {\n  display: none;\n}\n.vditor-preview__action {\n  text-align: center;\n  padding: 10px;\n  background-color: var(--toolbar-background-color);\n}\n.vditor-preview__action button {\n  background-color: var(--toolbar-background-color);\n  color: var(--toolbar-icon-color);\n  line-height: 20px;\n  border: 0;\n  margin: 0 10px;\n  cursor: pointer;\n  padding: 0 7px;\n  font-size: 12px;\n}\n.vditor-preview__action button.vditor-preview__action--current,\n.vditor-preview__action button:hover {\n  color: var(--toolbar-icon-hover-color);\n  background-color: var(--toolbar-background-color);\n}\n.vditor-preview__action button:focus {\n  outline: none;\n}\n.vditor-preview__action button svg {\n  fill: currentColor;\n  height: 15px;\n  width: 15px;\n  vertical-align: middle;\n}\n.vditor-preview > .vditor-reset {\n  padding: 10px;\n  margin: 0 auto;\n}\n.vditor-preview img:not(.emoji) {\n  cursor: pointer;\n}\n.vditor-devtools {\n  display: none;\n  background-color: var(--textarea-background-color);\n  overflow: auto;\n  flex: 1;\n  min-width: 1px;\n  box-shadow: inset 1px 0 var(--border-color);\n  box-sizing: border-box;\n  border-radius: 0 0 3px 0;\n  padding: 10px;\n}\n.vditor-counter {\n  padding: 3px;\n  color: var(--toolbar-icon-color);\n  background-color: var(--count-background-color);\n  border-radius: 3px;\n  font-size: 12px;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  position: absolute;\n  right: 8px;\n}\n.vditor-counter--error {\n  color: #d23f31;\n  background-color: rgba(210, 63, 49, 0.1);\n}\n.vditor-resize {\n  padding: 3px 0;\n  cursor: row-resize;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  position: absolute;\n  width: 100%;\n}\n.vditor-resize--top {\n  top: -3px;\n}\n.vditor-resize--bottom {\n  bottom: -3px;\n}\n.vditor-resize > div {\n  height: 3px;\n  background-color: var(--resize-background-color);\n  transition: all 0.15s ease-in-out;\n}\n.vditor-resize:hover > div,\n.vditor-resize--selected > div {\n  background-color: var(--resize-hover-background-color);\n}\n.vditor-resize:hover svg,\n.vditor-resize--selected svg {\n  color: var(--resize-hover-icon-color);\n}\n.vditor-resize svg {\n  fill: currentColor;\n  stroke-width: 0;\n  stroke: currentColor;\n  width: 13px;\n  height: 3px;\n  display: block;\n  margin: 0 auto;\n  color: var(--resize-icon-color);\n}\n.vditor-upload {\n  position: absolute;\n  height: 3px;\n  left: 0;\n  top: -2px;\n  transition: all 0.15s ease-in-out;\n  background-color: #4285f4;\n}\n.vditor-tip {\n  position: absolute;\n  font-size: 12px;\n  top: 10px;\n  animation-duration: 0.15s;\n  animation-fill-mode: both;\n  left: 50%;\n  z-index: 5;\n}\n.vditor-tip--show {\n  display: block;\n  animation-name: slideInDown;\n}\n.vditor-tip__content {\n  text-align: left;\n  display: inline-block;\n  line-height: 16px;\n  padding: 3px 10px;\n  border-radius: 3px;\n  background: var(--toolbar-background-color);\n  position: relative;\n  margin-left: -50%;\n  color: var(--toolbar-icon-color);\n  max-width: 100%;\n  box-shadow: var(--panel-shadow);\n}\n.vditor-tip__content ul {\n  margin: 2px 0;\n  padding: 0 0 0 18px;\n}\n.vditor-tip__content a {\n  color: #4285f4;\n}\n.vditor-tip__close {\n  position: absolute;\n  color: var(--toolbar-icon-color);\n  top: -7px;\n  right: -15px;\n  font-weight: bold;\n  cursor: pointer;\n}\n.vditor-tip__close:hover {\n  color: var(--toolbar-icon-hover-color);\n}\n.vditor-img {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  display: flex;\n  flex-direction: column;\n  z-index: 99999;\n}\n.vditor-img__bar {\n  border-bottom: 1px solid var(--border-color);\n  background-color: var(--toolbar-background-color);\n  text-align: center;\n  height: 36px;\n  box-sizing: border-box;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n.vditor-img__btn {\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n  margin-left: 24px;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  color: var(--toolbar-icon-color);\n}\n.vditor-img__btn:hover {\n  color: var(--toolbar-icon-hover-color);\n}\n.vditor-img__btn svg {\n  height: 14px;\n  width: 14px;\n  margin-right: 8px;\n  fill: currentColor;\n}\n.vditor-img__img {\n  flex: 1;\n  background-color: var(--textarea-background-color);\n  overflow: auto;\n  cursor: zoom-out;\n}\n.vditor-img__img img {\n  max-width: none;\n}\n.vditor-hint {\n  background-color: var(--panel-background-color);\n  position: absolute;\n  box-shadow: var(--panel-shadow);\n  border-radius: 3px;\n  padding: 5px 4px;\n  z-index: 4;\n  line-height: 20px;\n  list-style: none;\n  font-size: 12px;\n  margin: 0;\n  max-width: 250px;\n  min-width: 190px;\n  display: none;\n}\n.vditor-hint .vditor-hint {\n  margin-top: -31px;\n  left: 100%;\n  right: auto;\n}\n.vditor-hint .vditor-hint.vditor-panel--left {\n  right: 100%;\n  left: auto;\n}\n.vditor-hint button {\n  color: var(--toolbar-icon-color);\n  display: block;\n  padding: 0 12px;\n  height: 36px;\n  border: 0;\n  border-radius: 0;\n  line-height: 36px;\n  width: 100%;\n  box-sizing: border-box;\n  text-align: left;\n  margin: 0;\n  background-color: transparent;\n  cursor: pointer;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  border-radius: 4px;\n}\n.vditor-hint button:focus {\n  outline: none;\n}\n.vditor-hint--current,\n.vditor-hint button:not(.vditor-menu--disabled):hover {\n  background-color: #F7F7F7 !important;\n}\n.vditor-hint__emoji {\n  font-size: 16px;\n  float: left;\n  margin-right: 3px;\n}\n.vditor-hint img {\n  height: 20px;\n  width: 20px;\n  float: left;\n  margin-right: 3px;\n}\n.vditor-reset {\n  color: #24292e;\n  font-variant-ligatures: no-common-ligatures;\n  font-family: \"Helvetica Neue\", \"Luxi Sans\", \"DejaVu Sans\", \"Hiragino Sans GB\", \"Microsoft Yahei\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", \"Segoe UI Symbol\", \"Android Emoji\", \"EmojiSymbols\";\n  word-wrap: break-word;\n  overflow: auto;\n  line-height: 1.5;\n  font-size: 16px;\n  word-break: break-word;\n}\n.vditor-reset--anchor {\n  padding-left: 20px;\n}\n.vditor-reset--error {\n  color: #d23f31;\n  font-size: 12px;\n  display: block;\n  line-height: 16px;\n}\n.vditor-reset ul ul ul {\n  list-style-type: square;\n}\n.vditor-reset ul ul {\n  list-style-type: circle;\n}\n.vditor-reset ul {\n  list-style-type: disc;\n}\n.vditor-reset ul,\n.vditor-reset ol {\n  padding-left: 2em;\n  margin-top: 0;\n  margin-bottom: 16px;\n}\n.vditor-reset li + li {\n  margin-top: 0.25em;\n}\n.vditor-reset li p {\n  margin-top: 16px;\n}\n.vditor-reset audio {\n  max-width: 100%;\n}\n.vditor-reset audio:focus {\n  outline: none;\n}\n.vditor-reset video {\n  max-height: 90vh;\n  max-width: 100%;\n}\n.vditor-reset img {\n  max-width: 100%;\n  display: inline;\n}\n.vditor-reset img.emoji {\n  cursor: auto;\n  max-width: 20px;\n  vertical-align: sub;\n}\n.vditor-reset h1,\n.vditor-reset h2,\n.vditor-reset h3,\n.vditor-reset h4,\n.vditor-reset h5,\n.vditor-reset h6 {\n  margin-top: 24px;\n  margin-bottom: 16px;\n  font-weight: 600;\n  line-height: 1.25;\n}\n.vditor-reset h1:hover .vditor-anchor svg,\n.vditor-reset h2:hover .vditor-anchor svg,\n.vditor-reset h3:hover .vditor-anchor svg,\n.vditor-reset h4:hover .vditor-anchor svg,\n.vditor-reset h5:hover .vditor-anchor svg,\n.vditor-reset h6:hover .vditor-anchor svg {\n  visibility: visible;\n}\n.vditor-reset h1 {\n  font-size: 1.75em;\n}\n.vditor-reset h2 {\n  font-size: 1.55em;\n}\n.vditor-reset h3 {\n  font-size: 1.38em;\n}\n.vditor-reset h4 {\n  font-size: 1.25em;\n}\n.vditor-reset h5 {\n  font-size: 1.13em;\n}\n.vditor-reset h6 {\n  font-size: 1em;\n}\n.vditor-reset hr {\n  height: 2px;\n  padding: 0;\n  margin: 24px 0;\n  background-color: #eaecef;\n  border: 0;\n}\n.vditor-reset p {\n  margin-top: 0;\n  margin-bottom: 16px;\n}\n.vditor-reset blockquote {\n  padding: 0 1em;\n  color: #6a737d;\n  border-left: 0.25em solid #eaecef;\n  margin: 0 0 16px 0;\n}\n.vditor-reset blockquote > :first-child {\n  margin-top: 0;\n}\n.vditor-reset blockquote > :last-child {\n  margin-bottom: 0;\n}\n.vditor-reset ins > iframe {\n  border: 0;\n}\n.vditor-reset iframe {\n  border: 1px solid #d1d5da;\n  max-width: 100%;\n  box-sizing: border-box;\n}\n.vditor-reset iframe.iframe__video {\n  min-width: 80%;\n  min-height: 36vh;\n}\n.vditor-reset table {\n  border-collapse: collapse;\n  empty-cells: show;\n  margin-bottom: 16px;\n  overflow: auto;\n  border-spacing: 0;\n  display: block;\n  word-break: keep-all;\n  width: 100%;\n}\n.vditor-reset table tr {\n  background-color: #fafbfc;\n  border-top: 1px solid #c6cbd1;\n}\n.vditor-reset table td,\n.vditor-reset table th {\n  padding: 6px 13px;\n  border: 1px solid #dfe2e5;\n  word-break: normal;\n  white-space: nowrap;\n}\n.vditor-reset table td:first-child::after,\n.vditor-reset table th:first-child::after {\n  content: \"\";\n  display: inline-block;\n  vertical-align: top;\n  min-height: 24px;\n}\n.vditor-reset table th {\n  font-weight: 600;\n}\n.vditor-reset table tbody tr:nth-child(2n) {\n  background-color: #fff;\n}\n.vditor-reset code:not(.hljs):not(.highlight-chroma) {\n  padding: 0.2em 0.4em;\n  margin: 0;\n  font-size: 85%;\n  border-radius: 3px;\n  font-family: mononoki, Consolas, \"Liberation Mono\", Menlo, Courier, monospace, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", \"Segoe UI Symbol\", \"Android Emoji\", \"EmojiSymbols\";\n  word-break: break-word;\n  background-size: 20px 20px;\n  white-space: pre-wrap;\n}\n.vditor-reset pre {\n  margin: 1em 0;\n}\n.vditor-reset pre > code {\n  margin: 0;\n  font-size: 85%;\n  padding: 0.5em;\n  border-radius: 5px;\n  display: block;\n  overflow: auto;\n  white-space: pre;\n  font-family: mononoki, Consolas, \"Liberation Mono\", Menlo, Courier, monospace, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", \"Segoe UI Symbol\", \"Android Emoji\", \"EmojiSymbols\";\n  background-size: 20px 20px;\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8AgMAAABHkjHhAAAACVBMVEWAgIBaWlo+Pj7rTFvWAAAAA3RSTlMHCAw+VhR4AAAA+klEQVQoz4WSMW7EQAhFPxKWNh2FCx+HkaZI6RRb5DYbyVfIJXLKDCFoMbaTKSw/8ZnPAPjaH2xgZcUNUDADD7D9LtDBCLZ45fbkvo/30K8yeI64pPwl6znd/3n/Oe93P3ho9qeh72btTFzqkz0rsJle8Zr81OLEwZ1dv/713uWqvu2pl+k0fy7MWtj9r/tN5q/02z89qa/L4Dc2LvM93kezPfXlME/O86EbY/V9GB9ePX8G1/6W+/9h1dq/HGfTfzT3j/xNo7522Bfnqe5jO/fvhVthlfk434v3iO9zG/UOphyPeinPl1J8Gtaa7xPTa/Dk+RIs4deMvwGvcGsmsCvJ0AAAAABJRU5ErkJggg==);\n  word-break: initial;\n  word-wrap: normal;\n}\n.vditor-reset pre:hover div.vditor-copy {\n  display: block;\n}\n.vditor-reset .language-math,\n.vditor-reset .language-echarts,\n.vditor-reset .language-mindmap,\n.vditor-reset .language-plantuml,\n.vditor-reset .language-mermaid,\n.vditor-reset .language-smiles,\n.vditor-reset .language-markmap,\n.vditor-reset .language-abc,\n.vditor-reset .language-flowchart,\n.vditor-reset .language-graphviz {\n  margin-bottom: 16px;\n}\n.vditor-reset .language-math mjx-container:focus {\n  outline: none;\n  cursor: context-menu;\n}\n.vditor-reset .language-math .katex-display > .katex > .katex-html > .tag {\n  display: inline-block;\n  font-size: 1.21rem;\n  right: 2px;\n}\n.vditor-reset .language-echarts,\n.vditor-reset .language-mindmap {\n  overflow: hidden;\n  height: 420px;\n}\n.vditor-reset .language-mermaid,\n.vditor-reset .language-markmap,\n.vditor-reset .language-flowchart,\n.vditor-reset .language-graphviz {\n  text-align: center;\n}\n.vditor-reset .language-graphviz parsererror {\n  overflow: auto;\n}\n.vditor-reset kbd {\n  display: inline-block;\n  padding: 3px 5px;\n  font: 11px Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n  line-height: 10px;\n  color: #24292e;\n  vertical-align: middle;\n  background-color: #fafbfc;\n  border: solid 1px #d1d5da;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 #d1d5da;\n}\n.vditor-reset summary {\n  cursor: pointer;\n}\n.vditor-reset summary:focus {\n  outline: none;\n}\n.vditor-reset svg {\n  height: auto;\n  width: auto;\n  stroke-width: initial;\n}\n.vditor-reset p:last-child,\n.vditor-reset blockquote:last-child,\n.vditor-reset pre:last-child,\n.vditor-reset ul:last-child,\n.vditor-reset ol:last-child,\n.vditor-reset hr:last-child {\n  margin-bottom: 0;\n}\n.vditor-comment {\n  border-bottom: 2px solid #f8e6ab;\n}\n.vditor-comment--focus,\n.vditor-comment--hover {\n  background-color: #faf1d1;\n  border-bottom: 2px solid #ffc60a;\n}\n.vditor-comment--focus .vditor-comment,\n.vditor-comment--hover .vditor-comment {\n  border-bottom: 2px solid #ffc60a;\n}\n.vditor-task {\n  list-style: none !important;\n  word-break: break-all;\n}\n.vditor-task input {\n  margin: 0 0.2em 0.25em -1.6em;\n  font-size: 12px;\n  vertical-align: middle;\n}\n.vditor-copy {\n  position: relative;\n  display: none;\n  z-index: 1;\n}\n.vditor-copy textarea {\n  position: absolute;\n  left: -100000px;\n  height: 10px;\n}\n.vditor-copy span {\n  cursor: pointer;\n  position: absolute;\n  right: 15px;\n  top: 0.5em;\n}\n.vditor-copy svg {\n  color: #586069;\n  height: 14px;\n  width: 14px !important;\n  display: block;\n  fill: currentColor;\n}\n.vditor-linenumber {\n  padding-left: 4em !important;\n  position: relative;\n}\n.vditor-linenumber__rows {\n  position: absolute;\n  pointer-events: none;\n  top: 1em;\n  left: 0;\n  width: 3em;\n  /* works for line-numbers below 1000 lines */\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n  counter-reset: linenumber;\n}\n.vditor-linenumber__rows > span {\n  pointer-events: none;\n  display: block;\n}\n.vditor-linenumber__rows > span::before {\n  counter-increment: linenumber;\n  content: counter(linenumber);\n  color: rgba(158, 150, 150, 0.38);\n  display: block;\n  padding-right: 1em;\n  text-align: right;\n}\n.vditor-speech {\n  position: absolute;\n  display: none;\n  background-color: #f6f8fa;\n  border: 1px solid #d1d5da;\n  border-radius: 3px;\n  padding: 3px;\n  cursor: pointer;\n  color: #586069;\n}\n.vditor-speech:hover,\n.vditor-speech--current {\n  color: #4285f4;\n}\n.vditor-speech svg {\n  height: 14px;\n  width: 14px;\n  fill: currentColor;\n  display: block;\n  stroke-width: 0;\n  stroke: currentColor;\n}\n.vditor-anchor {\n  margin-left: 5px;\n}\n.vditor-anchor--left {\n  float: left;\n  padding-right: 4px;\n  margin-left: -20px;\n}\n.vditor-anchor svg {\n  visibility: hidden;\n}\n.vditor-anchor:hover svg {\n  visibility: visible;\n}\n.vditor-anchor:focus {\n  outline: none;\n}\n.vditor-linkcard {\n  margin: 31px auto 16px;\n  transition: all 0.15s ease-in-out;\n  cursor: pointer;\n  max-width: 768px;\n  padding: 0 10px;\n}\n.vditor-linkcard a {\n  border-radius: 3px;\n  background-color: #f6f8fa;\n  overflow: hidden;\n  max-height: 250px;\n  display: flex;\n  text-decoration: none;\n  flex-wrap: wrap-reverse;\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n}\n.vditor-linkcard a:hover {\n  box-shadow: 0 0 3px rgba(0, 0, 0, 0.13), 0 3px 6px rgba(0, 0, 0, 0.26);\n  text-decoration: none;\n}\n.vditor-linkcard a:visited .vditor-linkcard__abstract {\n  color: rgba(88, 96, 105, 0.36);\n}\n.vditor-linkcard__info {\n  padding: 10px;\n  min-width: 200px;\n  box-sizing: border-box;\n  flex: 1;\n}\n.vditor-linkcard__title {\n  font-size: 14px;\n  font-weight: 400;\n  color: #24292e;\n  display: flex;\n  align-items: center;\n}\n.vditor-linkcard__title img {\n  cursor: pointer;\n  height: 20px;\n  width: 20px;\n  border-radius: 3px;\n  flex-shrink: 0;\n  margin-right: 5px;\n}\n.vditor-linkcard__abstract {\n  word-wrap: break-word;\n  word-break: break-all;\n  -webkit-line-clamp: 2;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  -webkit-box-orient: vertical;\n  display: -webkit-box;\n  font-size: 13px;\n  color: #586069;\n  margin: 5px 0;\n}\n.vditor-linkcard__site {\n  font-size: 12px;\n  color: #4285f4;\n}\n.vditor-linkcard__image {\n  background-size: cover;\n  background-repeat: no-repeat;\n  background-position: center center;\n  max-width: 250px;\n  min-width: 126px;\n  cursor: pointer;\n  background-color: rgba(88, 96, 105, 0.36);\n}\n.vditor-footnotes__goto-ref {\n  text-decoration: none;\n}\n.vditor-toc {\n  margin-bottom: 16px;\n  -webkit-user-select: text;\n     -moz-user-select: text;\n          user-select: text;\n  color: #4285f4;\n}\n.vditor-toc .vditor-outline__action {\n  display: none;\n}\n.vditor-toc ul {\n  list-style: none !important;\n  padding-left: 1em;\n}\n.vditor-toc > ul {\n  padding-left: 0;\n}\n.vditor-toc span {\n  cursor: pointer;\n}\n.vditor-toc li > span > svg {\n  width: 0;\n  height: 0;\n}\n.vditor-outline {\n  width: 250px;\n  border-right: 1px solid var(--border-color);\n  background-color: var(--panel-background-color);\n  display: none;\n  overflow: auto;\n}\n.vditor-outline--right {\n  border-right: 0;\n  border-left: 1px solid var(--border-color);\n}\n.vditor-outline::-webkit-scrollbar {\n  display: none;\n}\n.vditor-outline ul {\n  list-style: none !important;\n  padding-left: 1em;\n  margin: 0;\n}\n.vditor-outline__content > ul {\n  padding-left: 0;\n}\n.vditor-outline li > span {\n  display: flex;\n  align-items: center;\n  padding: 5px 10px;\n  cursor: pointer;\n  color: var(--textarea-text-color);\n}\n.vditor-outline li > span > svg {\n  height: 10px;\n  width: 10px;\n  flex-shrink: 0;\n}\n.vditor-outline li > span:hover {\n  color: var(--toolbar-icon-hover-color);\n}\n.vditor-outline li > span > span {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.vditor-outline__title {\n  border-bottom: 1px dashed var(--border-color);\n  padding: 5px 10px;\n  color: var(--toolbar-icon-color);\n  font-size: 12px;\n}\n.vditor-outline__action {\n  transition: all 0.15s ease-in-out;\n  fill: currentColor;\n  margin-right: 5px;\n  flex-shrink: 0;\n}\n.vditor-outline__action--close {\n  transform: rotate(-90deg);\n}\n.vditor-wysiwyg {\n  box-sizing: border-box;\n  flex: 1;\n  position: relative;\n  width: 100%;\n  min-width: 1px;\n}\n.vditor-wysiwyg pre.vditor-reset {\n  background-color: var(--panel-background-color);\n  margin: 0;\n  white-space: pre-wrap;\n  height: 100%;\n  box-sizing: border-box;\n}\n.vditor-wysiwyg pre.vditor-reset[contenteditable=\"false\"] {\n  opacity: 0.3;\n  cursor: not-allowed;\n}\n.vditor-wysiwyg pre.vditor-reset:empty::before {\n  content: attr(placeholder);\n  color: var(--second-color);\n}\n.vditor-wysiwyg pre.vditor-reset:focus {\n  outline: none;\n  background-color: var(--textarea-background-color);\n}\n.vditor-wysiwyg pre.vditor-reset:after {\n  content: \"\";\n  height: var(--editor-bottom);\n  display: block;\n}\n.vditor-wysiwyg blockquote:empty::before,\n.vditor-wysiwyg pre > code:empty::before,\n.vditor-wysiwyg p:empty::before,\n.vditor-wysiwyg h1:empty::after,\n.vditor-wysiwyg h2:empty::after,\n.vditor-wysiwyg h3:empty::after,\n.vditor-wysiwyg h4:empty::after,\n.vditor-wysiwyg h5:empty::after,\n.vditor-wysiwyg h6:empty::after {\n  content: ' ';\n}\n.vditor-wysiwyg code[data-marker=\"`\"] {\n  padding-left: 0 !important;\n  padding-right: 0 !important;\n}\n.vditor-wysiwyg__block pre:first-child {\n  margin-bottom: -1em;\n}\n.vditor-wysiwyg__block pre:first-child code {\n  color: var(--textarea-text-color);\n  height: auto;\n  text-align: left;\n}\n.vditor-wysiwyg__block pre:last-child {\n  margin-bottom: 1em;\n}\n.vditor-wysiwyg__preview {\n  cursor: pointer;\n  white-space: initial;\n  min-height: 27px;\n}\n.vditor-wysiwyg > .vditor-reset > h1:before,\n.vditor-wysiwyg > .vditor-reset > h2:before,\n.vditor-wysiwyg > .vditor-reset > h3:before,\n.vditor-wysiwyg > .vditor-reset > h4:before,\n.vditor-wysiwyg > .vditor-reset > h5:before,\n.vditor-wysiwyg > .vditor-reset > h6:before,\n.vditor-wysiwyg div.vditor-wysiwyg__block:before,\n.vditor-wysiwyg div[data-type=\"link-ref-defs-block\"]:before,\n.vditor-wysiwyg div[data-type=\"footnotes-block\"]:before,\n.vditor-wysiwyg .vditor-toc:before {\n  float: left;\n  padding-right: 4px;\n  margin-left: -29px;\n  content: 'H1';\n  font-size: 0.85rem;\n  font-weight: normal;\n  color: var(--second-color);\n}\n.vditor-wysiwyg > .vditor-reset > h2:before {\n  content: 'H2';\n}\n.vditor-wysiwyg > .vditor-reset > h3:before {\n  content: 'H3';\n}\n.vditor-wysiwyg > .vditor-reset > h4:before {\n  content: 'H4';\n}\n.vditor-wysiwyg > .vditor-reset > h5:before {\n  content: 'H5';\n}\n.vditor-wysiwyg > .vditor-reset > h6:before {\n  content: 'H6';\n}\n.vditor-wysiwyg div[data-type=\"link-ref-defs-block\"]:before {\n  content: '\"A\"';\n}\n.vditor-wysiwyg div[data-type=\"footnotes-block\"]:before {\n  content: '^F';\n}\n.vditor-wysiwyg div.vditor-wysiwyg__block:before {\n  content: \"</>\";\n}\n.vditor-wysiwyg div.vditor-wysiwyg__block[data-type=\"yaml-front-matter\"]:before {\n  content: \"F\";\n}\n.vditor-wysiwyg div.vditor-wysiwyg__block[data-type=\"math-block\"]:before {\n  content: \"$$\";\n}\n.vditor-wysiwyg .vditor-toc:before {\n  content: \"ToC\";\n}\n.vditor-wysiwyg hr {\n  display: inline-block;\n  margin: 12px 0;\n  width: 100%;\n}\n.vditor-wysiwyg details {\n  white-space: initial;\n}\n.vditor-wysiwyg a {\n  cursor: pointer;\n  color: #2563EB;\n}\n.vditor-wysiwyg span[data-type=\"backslash\"] > span {\n  display: none;\n  color: var(--second-color);\n}\n.vditor-wysiwyg span[data-type=\"link-ref\"],\n.vditor-wysiwyg sup[data-type=\"footnotes-ref\"] {\n  color: #4285f4;\n}\n.vditor-wysiwyg span[data-type=\"toc-h\"] {\n  color: #4285f4;\n  text-decoration: underline;\n}\n.vditor-wysiwyg div[data-type=\"footnotes-block\"] {\n  border-top: 2px solid var(--heading-border-color);\n  padding-top: 24px;\n  margin-top: 24px;\n}\n.vditor-wysiwyg div[data-type=\"link-ref-defs-block\"] {\n  color: var(--blockquote-color);\n}\n@media screen and (max-width: 520px) {\n  .vditor-wysiwyg h1:before,\n  .vditor-wysiwyg h2:before,\n  .vditor-wysiwyg h3:before,\n  .vditor-wysiwyg h4:before,\n  .vditor-wysiwyg h5:before,\n  .vditor-wysiwyg h6:before,\n  .vditor-wysiwyg div.vditor-wysiwyg__block:before,\n  .vditor-wysiwyg div[data-type=\"link-ref-defs-block\"]:before,\n  .vditor-wysiwyg div[data-type=\"footnotes-block\"]:before,\n  .vditor-wysiwyg .vditor-toc:before {\n    content: none;\n  }\n}\n.vditor-ir {\n  box-sizing: border-box;\n  flex: 1;\n  min-width: 1px;\n  position: relative;\n  width: 100%;\n}\n.vditor-ir__node[data-type=\"code-block\"]:before,\n.vditor-ir__node[data-type=\"code-block\"]:after,\n.vditor-ir__node[data-type=\"yaml-front-matter\"]:before,\n.vditor-ir__node[data-type=\"yaml-front-matter\"]:after,\n.vditor-ir__node[data-type=\"math-block\"]:before,\n.vditor-ir__node[data-type=\"math-block\"]:after {\n  content: ' ';\n  color: var(--second-color);\n}\n.vditor-ir__node:not(.vditor-ir__node--expand) .vditor-ir__marker {\n  padding: 0 !important;\n}\n.vditor-ir__node:not(.vditor-ir__node--expand)[data-type=\"a\"] {\n  cursor: pointer;\n}\n.vditor-ir__node[data-type=\"link-ref\"],\n.vditor-ir__node[data-type=\"footnotes-ref\"] {\n  color: #4285f4;\n}\n.vditor-ir__node[data-type=\"html-block\"] {\n  margin-bottom: 1em;\n}\n.vditor-ir__node .vditor-ir__marker {\n  width: 0;\n  overflow: hidden;\n  display: inline-block;\n  height: 0;\n  transition: all 0.15s ease-in-out;\n}\n.vditor-ir__node--hidden .vditor-ir__marker {\n  visibility: hidden;\n}\n.vditor-ir__node--expand .vditor-ir__marker {\n  color: var(--second-color);\n  display: inline;\n  height: auto;\n  width: auto;\n}\n.vditor-ir__node--expand .vditor-ir__marker--hide {\n  display: none;\n}\n.vditor-ir__node--expand .vditor-ir__marker--heading {\n  color: var(--ir-heading-color);\n}\n.vditor-ir__node--expand .vditor-ir__marker--bi {\n  color: var(--ir-bi-color);\n}\n.vditor-ir__node--expand .vditor-ir__marker--link {\n  color: var(--ir-link-color);\n}\n.vditor-ir__node--expand .vditor-ir__marker--title {\n  color: var(--ir-title-color);\n}\n.vditor-ir__node--expand .vditor-ir__marker--bracket {\n  color: var(--ir-bracket-color);\n  text-decoration: underline;\n}\n.vditor-ir__node--expand .vditor-ir__marker--paren {\n  color: var(--ir-paren-color);\n}\n.vditor-ir__node--expand .vditor-ir__marker--info {\n  color: var(--ir-heading-color);\n}\n.vditor-ir__node--expand .vditor-ir__marker--pre code {\n  color: var(--textarea-text-color);\n  height: auto;\n  text-align: left;\n}\n.vditor-ir__node--expand[data-type=\"code-block\"]:before,\n.vditor-ir__node--expand[data-type=\"code-block\"]:after {\n  content: '```';\n}\n.vditor-ir__node--expand[data-type=\"yaml-front-matter\"]:before,\n.vditor-ir__node--expand[data-type=\"yaml-front-matter\"]:after {\n  content: '---';\n}\n.vditor-ir__node--expand[data-type=\"math-block\"]:before,\n.vditor-ir__node--expand[data-type=\"math-block\"]:after {\n  content: '$$';\n}\n.vditor-ir__node span[data-type=\"code-block-open-marker\"],\n.vditor-ir__node span[data-type=\"code-block-close-marker\"],\n.vditor-ir__node span[data-type=\"yaml-front-matter-open-marker\"],\n.vditor-ir__node span[data-type=\"yaml-front-matter-close-marker\"],\n.vditor-ir__node span[data-type=\"math-block-open-marker\"],\n.vditor-ir__node span[data-type=\"math-block-close-marker\"] {\n  display: none;\n}\n.vditor-ir__preview {\n  cursor: pointer;\n  white-space: initial;\n  min-height: 27px;\n}\n.vditor-ir__link {\n  color: var(--ir-bracket-color);\n  text-decoration: underline;\n}\n.vditor-ir pre.vditor-reset {\n  background-color: var(--panel-background-color);\n  margin: 0;\n  white-space: pre-wrap;\n  height: 100%;\n  box-sizing: border-box;\n}\n.vditor-ir pre.vditor-reset[contenteditable=\"false\"] {\n  opacity: 0.3;\n  cursor: not-allowed;\n}\n.vditor-ir pre.vditor-reset:empty::before {\n  content: attr(placeholder);\n  color: var(--second-color);\n}\n.vditor-ir pre.vditor-reset:focus {\n  outline: none;\n  background-color: var(--textarea-background-color);\n}\n.vditor-ir pre.vditor-reset:after {\n  content: \"\";\n  height: var(--editor-bottom);\n  display: block;\n}\n.vditor-ir pre.vditor-reset pre {\n  margin: 0;\n}\n.vditor-ir hr {\n  display: inline-block;\n  margin: 12px 0;\n  width: 100%;\n}\n.vditor-ir blockquote:empty::before,\n.vditor-ir pre > code:empty::before,\n.vditor-ir p:empty::before,\n.vditor-ir h1:empty::after,\n.vditor-ir h2:empty::after,\n.vditor-ir h3:empty::after,\n.vditor-ir h4:empty::after,\n.vditor-ir h5:empty::after,\n.vditor-ir h6:empty::after {\n  content: ' ';\n}\n.vditor-ir .vditor-reset > h1:before,\n.vditor-ir .vditor-reset > h2:before,\n.vditor-ir .vditor-reset > h3:before,\n.vditor-ir .vditor-reset > h4:before,\n.vditor-ir .vditor-reset > h5:before,\n.vditor-ir .vditor-reset > h6:before,\n.vditor-ir div[data-type=\"link-ref-defs-block\"]:before,\n.vditor-ir div[data-type=\"footnotes-block\"]:before,\n.vditor-ir .vditor-toc:before {\n  float: left;\n  padding-right: 4px;\n  margin-left: -29px;\n  content: 'H1';\n  font-size: 0.85rem;\n  font-weight: normal;\n  color: var(--second-color);\n}\n.vditor-ir .vditor-reset > h2:before {\n  content: 'H2';\n}\n.vditor-ir .vditor-reset > h3:before {\n  content: 'H3';\n}\n.vditor-ir .vditor-reset > h4:before {\n  content: 'H4';\n}\n.vditor-ir .vditor-reset > h5:before {\n  content: 'H5';\n}\n.vditor-ir .vditor-reset > h6:before {\n  content: 'H6';\n}\n.vditor-ir div[data-type=\"link-ref-defs-block\"] {\n  color: var(--blockquote-color);\n}\n.vditor-ir div[data-type=\"link-ref-defs-block\"]:before {\n  content: '\"A\"';\n}\n.vditor-ir div[data-type=\"footnotes-block\"] {\n  border-top: 2px solid var(--heading-border-color);\n  padding-top: 24px;\n  margin-top: 24px;\n}\n.vditor-ir div[data-type=\"footnotes-block\"]:before {\n  content: '^F';\n}\n.vditor-ir div[data-type=\"footnotes-block\"] > div[data-type=\"footnotes-def\"] > ul,\n.vditor-ir div[data-type=\"footnotes-block\"] > div[data-type=\"footnotes-def\"] > ol,\n.vditor-ir div[data-type=\"footnotes-block\"] > div[data-type=\"footnotes-def\"] > p,\n.vditor-ir div[data-type=\"footnotes-block\"] > div[data-type=\"footnotes-def\"] > blockquote,\n.vditor-ir div[data-type=\"footnotes-block\"] > div[data-type=\"footnotes-def\"] > pre,\n.vditor-ir div[data-type=\"footnotes-block\"] > div[data-type=\"footnotes-def\"] > table,\n.vditor-ir div[data-type=\"footnotes-block\"] > div[data-type=\"footnotes-def\"] > hr {\n  margin-left: 8px;\n}\n.vditor-ir .vditor-toc:before {\n  content: \"ToC\";\n}\n.vditor-ir .vditor-toc span[data-type=\"toc-h\"] {\n  color: #4285f4;\n  text-decoration: underline;\n}\n@media screen and (max-width: 520px) {\n  .vditor-ir h1:before,\n  .vditor-ir h2:before,\n  .vditor-ir h3:before,\n  .vditor-ir h4:before,\n  .vditor-ir h5:before,\n  .vditor-ir h6:before,\n  .vditor-ir div[data-type=\"link-ref-defs-block\"]:before,\n  .vditor-ir div[data-type=\"footnotes-block\"]:before,\n  .vditor-ir .vditor-toc:before {\n    content: none;\n  }\n}\n.vditor-sv {\n  font-family: \"Helvetica Neue\", \"Luxi Sans\", \"DejaVu Sans\", \"Hiragino Sans GB\", \"Microsoft Yahei\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", \"Segoe UI Symbol\", \"Android Emoji\", \"EmojiSymbols\";\n  margin: 0 1px 0 0;\n  overflow: auto;\n  width: 100%;\n  flex: 1;\n  min-width: 1px;\n  border: 0;\n  resize: none;\n  padding: 10px 9px 10px 10px;\n  box-sizing: border-box;\n  background-color: var(--panel-background-color);\n  outline: 0 none;\n  font-size: 16px;\n  line-height: 22px;\n  color: var(--textarea-text-color);\n  border-radius: 0 0 3px 3px;\n  font-variant-ligatures: no-common-ligatures;\n  white-space: pre-wrap;\n  word-break: break-word;\n  word-wrap: break-word;\n}\n.vditor-sv[contenteditable=\"false\"] {\n  opacity: 0.3;\n  cursor: not-allowed;\n}\n.vditor-sv:empty::before {\n  content: attr(placeholder);\n  color: var(--second-color);\n}\n.vditor-sv:focus {\n  background-color: var(--textarea-background-color);\n}\n.vditor-sv:after {\n  content: \"\";\n  height: var(--editor-bottom);\n  display: block;\n}\n.vditor-sv span[data-type=\"newline\"] + span[data-type=\"text\"]:empty {\n  display: inherit;\n}\n.vditor-sv .sup {\n  vertical-align: super;\n  font-size: smaller;\n}\n.vditor-sv .strong {\n  font-weight: bold;\n}\n.vditor-sv .em {\n  font-style: italic;\n}\n.vditor-sv .s {\n  text-decoration: line-through;\n}\n.vditor-sv .mark:not(.vditor-sv__marker) {\n  background-color: yellow;\n  color: black;\n}\n.vditor-sv .h1 {\n  font-size: 1.75em;\n  line-height: 44px;\n}\n.vditor-sv .h2 {\n  font-size: 1.55em;\n  line-height: 38px;\n}\n.vditor-sv .h3 {\n  font-size: 1.38em;\n  line-height: 27px;\n}\n.vditor-sv .h4 {\n  font-size: 1.25em;\n  line-height: 25px;\n}\n.vditor-sv .h5 {\n  font-size: 1.13em;\n}\n.vditor-sv .h6 {\n  font-size: 1em;\n}\n.vditor-sv__marker {\n  color: var(--second-color);\n}\n.vditor-sv__marker--heading {\n  color: var(--ir-heading-color);\n}\n.vditor-sv__marker--bi {\n  color: var(--ir-bi-color);\n}\n.vditor-sv__marker--link {\n  color: var(--ir-link-color);\n}\n.vditor-sv__marker--title {\n  color: var(--ir-title-color);\n}\n.vditor-sv__marker--bracket {\n  color: var(--ir-bracket-color);\n}\n.vditor-sv__marker--paren {\n  color: var(--ir-paren-color);\n}\n.vditor-sv__marker--info {\n  color: var(--ir-heading-color);\n}\n.vditor-sv__marker--strong {\n  font-weight: bold;\n}\n\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/index.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport \"./assets/less/index.less\";\nimport VditorMethod from \"./method\";\ndeclare class Vditor extends VditorMethod {\n    readonly version: string;\n    vditor: IVditor;\n    /**\n     * @param id 要挂载 Vditor 的元素或者元素 ID。\n     * @param options Vditor 参数\n     */\n    constructor(id: string | HTMLElement, options?: IOptions);\n    private showErrorTip;\n    updateToolbarConfig(options: IToolbarConfig): void;\n    /** 设置主题 */\n    setTheme(theme: \"dark\" | \"classic\", contentTheme?: string, codeTheme?: string, contentThemePath?: string): void;\n    /** 获取 Markdown 内容 */\n    getValue(): string;\n    /** 获取编辑器当前编辑模式 */\n    getCurrentMode(): \"sv\" | \"wysiwyg\" | \"ir\";\n    /** 聚焦到编辑器 */\n    focus(): void;\n    /** 让编辑器失焦 */\n    blur(): void;\n    /** 禁用编辑器 */\n    disabled(): void;\n    /** 解除编辑器禁用 */\n    enable(): void;\n    /** 返回选中的字符串 */\n    getSelection(): string;\n    /** 设置预览区域内容 */\n    renderPreview(value?: string): void;\n    /** 获取焦点位置 */\n    getCursorPosition(): {\n        left: number;\n        top: number;\n    };\n    /** 上传是否还在进行中 */\n    isUploading(): boolean;\n    /** 清除缓存 */\n    clearCache(): void;\n    /** 禁用缓存 */\n    disabledCache(): void;\n    /** 启用缓存 */\n    enableCache(): void;\n    /** HTML 转 md */\n    html2md(value: string): string;\n    /** markdown 转 JSON 输出 */\n    exportJSON(value: string): string;\n    /** 获取 HTML */\n    getHTML(): string;\n    /** 消息提示。time 为 0 将一直显示 */\n    tip(text: string, time?: number): void;\n    setEditMode(type: string, mode?: 'both' | 'editor'): void;\n    /** 设置预览模式 */\n    setPreviewMode(mode: \"both\" | \"editor\"): void;\n    /** 删除选中内容 */\n    deleteValue(): void;\n    /** 更新选中内容 */\n    updateValue(value: string): void;\n    /** 在焦点处插入内容，并默认进行 Markdown 渲染 */\n    insertValue(value: string, render?: boolean): void;\n    /** 在焦点处插入 Markdown */\n    insertMD(md: string): void;\n    /** 设置编辑器内容 */\n    setValue(markdown: string, clearStack?: boolean): void;\n    /** 空块 */\n    insertEmptyBlock(position: InsertPosition): void;\n    /** 清空 undo & redo 栈 */\n    clearStack(): void;\n    /** 销毁编辑器 */\n    destroy(): void;\n    /** 获取评论 ID */\n    getCommentIds(): ICommentsData[];\n    /** 高亮评论 */\n    hlCommentIds(ids: string[]): void;\n    /** 取消评论高亮 */\n    unHlCommentIds(ids: string[]): void;\n    /** 删除评论 */\n    removeCommentIds(removeIds: string[]): void;\n    private init;\n}\nexport default Vditor;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/index.js",
    "content": "/*!\n * Vditor v3.11.0 - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vditor\"] = factory();\n\telse\n\t\troot[\"Vditor\"] = factory();\n})(this, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 10:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   T: () => (/* binding */ addStyle)\n/* harmony export */ });\nvar addStyle = function (url, id) {\n    if (!document.getElementById(id)) {\n        var styleElement = document.createElement(\"link\");\n        styleElement.id = id;\n        styleElement.rel = \"stylesheet\";\n        styleElement.type = \"text/css\";\n        styleElement.href = url;\n        document.getElementsByTagName(\"head\")[0].appendChild(styleElement);\n    }\n};\n\n\n/***/ }),\n\n/***/ 13:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   l: () => (/* binding */ mediaRender)\n/* harmony export */ });\n/* harmony import */ var _util_function__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(138);\n\nvar videoRender = function (element, url) {\n    element.insertAdjacentHTML(\"afterend\", \"<video controls=\\\"controls\\\" src=\\\"\".concat(url, \"\\\"></video>\"));\n    element.remove();\n};\nvar audioRender = function (element, url) {\n    element.insertAdjacentHTML(\"afterend\", \"<audio controls=\\\"controls\\\" src=\\\"\".concat(url, \"\\\"></audio>\"));\n    element.remove();\n};\nvar iframeRender = function (element, url) {\n    var youtubeMatch = url.match(/\\/\\/(?:www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))([\\w|-]{11})(?:(?:[\\?&]t=)(\\S+))?/);\n    var youkuMatch = url.match(/\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/);\n    var qqMatch = url.match(/\\/\\/v\\.qq\\.com\\/x\\/cover\\/.*\\/([^\\/]+)\\.html\\??.*/);\n    var coubMatch = url.match(/(?:www\\.|\\/\\/)coub\\.com\\/view\\/(\\w+)/);\n    var facebookMatch = url.match(/(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/);\n    var dailymotionMatch = url.match(/.+dailymotion.com\\/(video|hub)\\/(\\w+)\\?/);\n    var bilibiliMatch = url.match(/(?:www\\.|\\/\\/)bilibili\\.com\\/video\\/(\\w+)/);\n    var tedMatch = url.match(/(?:www\\.|\\/\\/)ted\\.com\\/talks\\/(\\w+)/);\n    if (youtubeMatch && youtubeMatch[1].length === 11) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\" src=\\\"//www.youtube.com/embed/\".concat(youtubeMatch[1] +\n            (youtubeMatch[2] ? \"?start=\" + youtubeMatch[2] : \"\"), \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (youkuMatch && youkuMatch[1]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\" src=\\\"//player.youku.com/embed/\".concat(youkuMatch[1], \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (qqMatch && qqMatch[1]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\" src=\\\"https://v.qq.com/txp/iframe/player.html?vid=\".concat(qqMatch[1], \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (coubMatch && coubMatch[1]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\"\\n src=\\\"//coub.com/embed/\".concat(coubMatch[1], \"?muted=false&autostart=false&originalSize=true&startWithHD=true\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (facebookMatch && facebookMatch[0]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\"\\n src=\\\"https://www.facebook.com/plugins/video.php?href=\".concat(encodeURIComponent(facebookMatch[0]), \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (dailymotionMatch && dailymotionMatch[2]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\"\\n src=\\\"https://www.dailymotion.com/embed/video/\".concat(dailymotionMatch[2], \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (url.indexOf(\"bilibili.com\") > -1 && (url.indexOf(\"bvid=\") > -1 || (bilibiliMatch && bilibiliMatch[1]))) {\n        var params_1 = {\n            bvid: (0,_util_function__WEBPACK_IMPORTED_MODULE_0__/* .getSearch */ .TK)(\"bvid\", url) || (bilibiliMatch && bilibiliMatch[1]),\n            page: \"1\",\n            high_quality: \"1\",\n            as_wide: \"1\",\n            allowfullscreen: \"true\",\n            autoplay: \"0\"\n        };\n        new URL(url.startsWith(\"http\") ? url : \"https:\" + url).search.split(\"&\").forEach(function (item, index) {\n            if (!item) {\n                return;\n            }\n            if (index === 0) {\n                item = item.substr(1);\n            }\n            var keyValue = item.split(\"=\");\n            params_1[keyValue[0]] = keyValue[1];\n        });\n        var src_1 = \"https://player.bilibili.com/player.html?\";\n        var keys_1 = Object.keys(params_1);\n        keys_1.forEach(function (key, index) {\n            src_1 += \"\".concat(key, \"=\").concat(params_1[key]);\n            if (index < keys_1.length - 1) {\n                src_1 += \"&\";\n            }\n        });\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\" src=\\\"\".concat(src_1, \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (tedMatch && tedMatch[1]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\" src=\\\"//embed.ted.com/talks/\".concat(tedMatch[1], \"\\\"></iframe>\"));\n        element.remove();\n    }\n};\nvar mediaRender = function (element) {\n    if (!element) {\n        return;\n    }\n    element.querySelectorAll(\"a\").forEach(function (aElement) {\n        var url = aElement.getAttribute(\"href\");\n        if (!url) {\n            return;\n        }\n        if (url.match(/^.+.(mp4|m4v|ogg|ogv|webm)$/)) {\n            videoRender(aElement, url);\n        }\n        else if (url.match(/^.+.(mp3|wav|flac)$/)) {\n            audioRender(aElement, url);\n        }\n        else {\n            iframeRender(aElement, url);\n        }\n    });\n};\n\n\n/***/ }),\n\n/***/ 138:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Ee: () => (/* binding */ genUUID),\n/* harmony export */   TK: () => (/* binding */ getSearch),\n/* harmony export */   kY: () => (/* binding */ looseJsonParse)\n/* harmony export */ });\nvar genUUID = function () { return ([1e7].toString() + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) {\n    return (parseInt(c, 10) ^ (window.crypto.getRandomValues(new Uint32Array(1))[0] & (15 >> (parseInt(c, 10) / 4)))).toString(16);\n}); };\nvar getSearch = function (key, link) {\n    if (link === void 0) { link = window.location.search; }\n    var params = link.substring(link.indexOf(\"?\"));\n    var hashIndex = params.indexOf(\"#\");\n    // REF https://developer.mozilla.org/zh-CN/docs/Web/API/URLSearchParams\n    var urlSearchParams = new URLSearchParams(params.substring(0, hashIndex >= 0 ? hashIndex : undefined));\n    return urlSearchParams.get(key);\n};\nvar looseJsonParse = function (text) {\n    return Function(\"\\\"use strict\\\";return (\".concat(text, \")\"))();\n};\n\n\n/***/ }),\n\n/***/ 145:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Ab: () => (/* binding */ hasTopClosestByTag),\n/* harmony export */   KJ: () => (/* binding */ hasClosestByClassName),\n/* harmony export */   KR: () => (/* binding */ getTopList),\n/* harmony export */   Rp: () => (/* binding */ getLastNode),\n/* harmony export */   Th: () => (/* binding */ hasClosestByAttribute),\n/* harmony export */   XW: () => (/* binding */ hasTopClosestByClassName),\n/* harmony export */   _Y: () => (/* binding */ hasClosestByMatchTag),\n/* harmony export */   pt: () => (/* binding */ hasClosestBlock)\n/* harmony export */ });\n/* unused harmony export hasTopClosestByAttribute */\n/* harmony import */ var _hasClosestByHeadings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(667);\n\nvar hasTopClosestByClassName = function (element, className) {\n    var closest = hasClosestByClassName(element, className);\n    var parentClosest = false;\n    var findTop = false;\n    while (closest && !closest.classList.contains(\"vditor-reset\") && !findTop) {\n        parentClosest = hasClosestByClassName(closest.parentElement, className);\n        if (parentClosest) {\n            closest = parentClosest;\n        }\n        else {\n            findTop = true;\n        }\n    }\n    return closest || false;\n};\nvar hasTopClosestByAttribute = function (element, attr, value) {\n    var closest = hasClosestByAttribute(element, attr, value);\n    var parentClosest = false;\n    var findTop = false;\n    while (closest && !closest.classList.contains(\"vditor-reset\") && !findTop) {\n        parentClosest = hasClosestByAttribute(closest.parentElement, attr, value);\n        if (parentClosest) {\n            closest = parentClosest;\n        }\n        else {\n            findTop = true;\n        }\n    }\n    return closest || false;\n};\nvar hasTopClosestByTag = function (element, nodeName) {\n    var closest = (0,_hasClosestByHeadings__WEBPACK_IMPORTED_MODULE_0__/* .hasClosestByTag */ .f)(element, nodeName);\n    var parentClosest = false;\n    var findTop = false;\n    while (closest && !closest.classList.contains(\"vditor-reset\") && !findTop) {\n        parentClosest = (0,_hasClosestByHeadings__WEBPACK_IMPORTED_MODULE_0__/* .hasClosestByTag */ .f)(closest.parentElement, nodeName);\n        if (parentClosest) {\n            closest = parentClosest;\n        }\n        else {\n            findTop = true;\n        }\n    }\n    return closest || false;\n};\nvar getTopList = function (element) {\n    var topUlElement = hasTopClosestByTag(element, \"UL\");\n    var topOlElement = hasTopClosestByTag(element, \"OL\");\n    var topListElement = topUlElement;\n    if (topOlElement && (!topUlElement || (topUlElement && topOlElement.contains(topUlElement)))) {\n        topListElement = topOlElement;\n    }\n    return topListElement;\n};\nvar hasClosestByAttribute = function (element, attr, value) {\n    if (!element) {\n        return false;\n    }\n    if (element.nodeType === 3) {\n        element = element.parentElement;\n    }\n    var e = element;\n    var isClosest = false;\n    while (e && !isClosest && !e.classList.contains(\"vditor-reset\")) {\n        if (e.getAttribute(attr) === value) {\n            isClosest = true;\n        }\n        else {\n            e = e.parentElement;\n        }\n    }\n    return isClosest && e;\n};\nvar hasClosestBlock = function (element) {\n    if (!element) {\n        return false;\n    }\n    if (element.nodeType === 3) {\n        element = element.parentElement;\n    }\n    var e = element;\n    var isClosest = false;\n    var blockElement = hasClosestByAttribute(element, \"data-block\", \"0\");\n    if (blockElement) {\n        return blockElement;\n    }\n    while (e && !isClosest && !e.classList.contains(\"vditor-reset\")) {\n        if (e.tagName === \"H1\" ||\n            e.tagName === \"H2\" ||\n            e.tagName === \"H3\" ||\n            e.tagName === \"H4\" ||\n            e.tagName === \"H5\" ||\n            e.tagName === \"H6\" ||\n            e.tagName === \"P\" ||\n            e.tagName === \"BLOCKQUOTE\" ||\n            e.tagName === \"OL\" ||\n            e.tagName === \"UL\") {\n            isClosest = true;\n        }\n        else {\n            e = e.parentElement;\n        }\n    }\n    return isClosest && e;\n};\nvar hasClosestByMatchTag = function (element, nodeName) {\n    if (!element) {\n        return false;\n    }\n    if (element.nodeType === 3) {\n        element = element.parentElement;\n    }\n    var e = element;\n    var isClosest = false;\n    while (e && !isClosest && !e.classList.contains(\"vditor-reset\")) {\n        if (e.nodeName === nodeName) {\n            isClosest = true;\n        }\n        else {\n            e = e.parentElement;\n        }\n    }\n    return isClosest && e;\n};\nvar hasClosestByClassName = function (element, className) {\n    if (!element) {\n        return false;\n    }\n    if (element.nodeType === 3) {\n        element = element.parentElement;\n    }\n    var e = element;\n    var isClosest = false;\n    while (e && !isClosest && !e.classList.contains(\"vditor-reset\")) {\n        if (e.classList.contains(className)) {\n            isClosest = true;\n        }\n        else {\n            e = e.parentElement;\n        }\n    }\n    return isClosest && e;\n};\nvar getLastNode = function (node) {\n    while (node && node.lastChild) {\n        node = node.lastChild;\n    }\n    return node;\n};\n\n\n/***/ }),\n\n/***/ 270:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": () => (/* binding */ method)\n});\n\n// EXTERNAL MODULE: ./src/ts/markdown/abcRender.ts\nvar abcRender = __webpack_require__(449);\n// EXTERNAL MODULE: ./src/ts/markdown/adapterRender.ts\nvar adapterRender = __webpack_require__(794);\n// EXTERNAL MODULE: ./src/ts/markdown/chartRender.ts\nvar chartRender = __webpack_require__(801);\n// EXTERNAL MODULE: ./src/ts/markdown/codeRender.ts\nvar codeRender = __webpack_require__(756);\n// EXTERNAL MODULE: ./src/ts/markdown/flowchartRender.ts\nvar flowchartRender = __webpack_require__(889);\n// EXTERNAL MODULE: ./src/ts/markdown/graphvizRender.ts\nvar graphvizRender = __webpack_require__(516);\n// EXTERNAL MODULE: ./src/ts/markdown/highlightRender.ts\nvar highlightRender = __webpack_require__(625);\n;// ./src/ts/markdown/lazyLoadImageRender.ts\nvar lazyLoadImageRender = function (element) {\n    if (element === void 0) { element = document; }\n    var loadImg = function (it) {\n        var testImage = document.createElement(\"img\");\n        testImage.src = it.getAttribute(\"data-src\");\n        testImage.addEventListener(\"load\", function () {\n            if (!it.getAttribute(\"style\") && !it.getAttribute(\"class\") &&\n                !it.getAttribute(\"width\") && !it.getAttribute(\"height\")) {\n                if (testImage.naturalHeight > testImage.naturalWidth &&\n                    testImage.naturalWidth / testImage.naturalHeight <\n                        document.querySelector(\".vditor-reset\").clientWidth / (window.innerHeight - 40) &&\n                    testImage.naturalHeight > (window.innerHeight - 40)) {\n                    it.style.height = (window.innerHeight - 40) + \"px\";\n                }\n            }\n            it.src = testImage.src;\n        });\n        it.removeAttribute(\"data-src\");\n    };\n    if (!(\"IntersectionObserver\" in window)) {\n        element.querySelectorAll(\"img\").forEach(function (imgElement) {\n            if (imgElement.getAttribute(\"data-src\")) {\n                loadImg(imgElement);\n            }\n        });\n        return false;\n    }\n    if (window.vditorImageIntersectionObserver) {\n        window.vditorImageIntersectionObserver.disconnect();\n        element.querySelectorAll(\"img\").forEach(function (imgElement) {\n            window.vditorImageIntersectionObserver.observe(imgElement);\n        });\n    }\n    else {\n        window.vditorImageIntersectionObserver = new IntersectionObserver(function (entries) {\n            entries.forEach(function (entrie) {\n                if ((typeof entrie.isIntersecting === \"undefined\"\n                    ? entrie.intersectionRatio !== 0\n                    : entrie.isIntersecting)\n                    && entrie.target.getAttribute(\"data-src\")) {\n                    loadImg(entrie.target);\n                }\n            });\n        });\n        element.querySelectorAll(\"img\").forEach(function (imgElement) {\n            window.vditorImageIntersectionObserver.observe(imgElement);\n        });\n    }\n};\n\n// EXTERNAL MODULE: ./src/ts/markdown/mathRender.ts\nvar mathRender = __webpack_require__(947);\n// EXTERNAL MODULE: ./src/ts/markdown/mediaRender.ts\nvar mediaRender = __webpack_require__(13);\n// EXTERNAL MODULE: ./src/ts/markdown/mermaidRender.ts\nvar mermaidRender = __webpack_require__(998);\n// EXTERNAL MODULE: ./src/ts/markdown/SMILESRender.ts\nvar SMILESRender = __webpack_require__(292);\n// EXTERNAL MODULE: ./src/ts/markdown/markmapRender.ts\nvar markmapRender = __webpack_require__(316);\n// EXTERNAL MODULE: ./src/ts/markdown/mindmapRender.ts\nvar mindmapRender = __webpack_require__(883);\n// EXTERNAL MODULE: ./src/ts/markdown/outlineRender.ts\nvar outlineRender = __webpack_require__(691);\n// EXTERNAL MODULE: ./src/ts/markdown/plantumlRender.ts\nvar plantumlRender = __webpack_require__(816);\n// EXTERNAL MODULE: ./src/ts/constants.ts\nvar constants = __webpack_require__(842);\n// EXTERNAL MODULE: ./src/ts/ui/setContentTheme.ts\nvar setContentTheme = __webpack_require__(860);\n// EXTERNAL MODULE: ./src/ts/util/addScript.ts\nvar addScript = __webpack_require__(444);\n// EXTERNAL MODULE: ./src/ts/util/hasClosest.ts\nvar hasClosest = __webpack_require__(145);\n// EXTERNAL MODULE: ./src/ts/util/merge.ts\nvar merge = __webpack_require__(600);\n;// ./src/ts/markdown/anchorRender.ts\nvar anchorRender = function (type) {\n    document.querySelectorAll(\".vditor-anchor\").forEach(function (anchor) {\n        if (type === 1) {\n            anchor.classList.add(\"vditor-anchor--left\");\n        }\n        anchor.onclick = function () {\n            var id = anchor.getAttribute(\"href\").substr(1);\n            var top = document.getElementById(\"vditorAnchor-\" + id).offsetTop;\n            document.querySelector(\"html\").scrollTop = top;\n        };\n    });\n    window.onhashchange = function () {\n        var element = document.getElementById(\"vditorAnchor-\" + decodeURIComponent(window.location.hash.substr(1)));\n        if (element) {\n            document.querySelector(\"html\").scrollTop = element.offsetTop;\n        }\n    };\n};\n\n// EXTERNAL MODULE: ./src/ts/markdown/setLute.ts\nvar setLute = __webpack_require__(329);\n// EXTERNAL MODULE: ./src/ts/util/selection.ts\nvar selection = __webpack_require__(782);\n;// ./src/ts/markdown/speechRender.ts\n\nvar speechRender = function (element, lang) {\n    if (lang === void 0) { lang = \"zh_CN\"; }\n    if (typeof speechSynthesis === \"undefined\" || typeof SpeechSynthesisUtterance === \"undefined\") {\n        return;\n    }\n    var getVoice = function () {\n        var voices = speechSynthesis.getVoices();\n        var currentVoice;\n        var defaultVoice;\n        voices.forEach(function (item) {\n            if (item.lang === lang.replace(\"_\", \"-\")) {\n                currentVoice = item;\n            }\n            if (item.default) {\n                defaultVoice = item;\n            }\n        });\n        if (!currentVoice) {\n            currentVoice = defaultVoice;\n        }\n        return currentVoice;\n    };\n    var playSVG = '<svg><use xlink:href=\"#vditor-icon-play\"></use></svg>';\n    var pauseSVG = '<svg><use xlink:href=\"#vditor-icon-pause\"></use></svg>';\n    if (!document.getElementById(\"vditorIconScript\")) {\n        playSVG = '<svg viewBox=\"0 0 32 32\"><path d=\"M3.436 0l25.128 16-25.128 16v-32z\"></path></svg>';\n        pauseSVG = '<svg viewBox=\"0 0 32 32\"><path d=\"M20.617 0h9.128v32h-9.128v-32zM2.255 32v-32h9.128v32h-9.128z\"></path></svg>';\n    }\n    var speechDom = document.querySelector(\".vditor-speech\");\n    if (!speechDom) {\n        speechDom = document.createElement(\"button\");\n        speechDom.className = \"vditor-speech\";\n        element.insertAdjacentElement(\"beforeend\", speechDom);\n        if (speechSynthesis.onvoiceschanged !== undefined) {\n            speechSynthesis.onvoiceschanged = getVoice;\n        }\n    }\n    var voice = getVoice();\n    var utterThis = new SpeechSynthesisUtterance();\n    utterThis.voice = voice;\n    utterThis.onend = utterThis.onerror = function () {\n        speechDom.style.display = \"none\";\n        speechSynthesis.cancel();\n        speechDom.classList.remove(\"vditor-speech--current\");\n        speechDom.innerHTML = playSVG;\n    };\n    element.addEventListener(window.ontouchstart !== undefined ? \"touchend\" : \"click\", function (event) {\n        var target = event.target;\n        if (target.classList.contains(\"vditor-speech\") || target.parentElement.classList.contains(\"vditor-speech\")) {\n            if (!speechDom.classList.contains(\"vditor-speech--current\")) {\n                utterThis.text = speechDom.getAttribute(\"data-text\");\n                speechSynthesis.speak(utterThis);\n                speechDom.classList.add(\"vditor-speech--current\");\n                speechDom.innerHTML = pauseSVG;\n            }\n            else {\n                if (speechSynthesis.speaking) {\n                    if (speechSynthesis.paused) {\n                        speechSynthesis.resume();\n                        speechDom.innerHTML = pauseSVG;\n                    }\n                    else {\n                        speechSynthesis.pause();\n                        speechDom.innerHTML = playSVG;\n                    }\n                }\n            }\n            (0,selection/* setSelectionFocus */.jl)(window.vditorSpeechRange);\n            element.focus();\n            return;\n        }\n        speechDom.style.display = \"none\";\n        speechSynthesis.cancel();\n        speechDom.classList.remove(\"vditor-speech--current\");\n        speechDom.innerHTML = playSVG;\n        if (getSelection().rangeCount === 0) {\n            return;\n        }\n        var range = getSelection().getRangeAt(0);\n        var text = range.toString().trim();\n        if (!text) {\n            return;\n        }\n        window.vditorSpeechRange = range.cloneRange();\n        var rect = range.getBoundingClientRect();\n        speechDom.innerHTML = playSVG;\n        speechDom.style.display = \"block\";\n        speechDom.style.top = (rect.top + rect.height + document.querySelector(\"html\").scrollTop - 20) + \"px\";\n        if (window.ontouchstart !== undefined) {\n            speechDom.style.left = (event.changedTouches[event.changedTouches.length - 1].pageX + 2) + \"px\";\n        }\n        else {\n            speechDom.style.left = (event.clientX + 2) + \"px\";\n        }\n        speechDom.setAttribute(\"data-text\", text);\n    });\n};\n\n;// ./src/ts/markdown/previewRender.ts\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar mergeOptions = function (options) {\n    var _a;\n    var defaultOption = {\n        anchor: 0,\n        cdn: constants/* Constants */.Y.CDN,\n        customEmoji: {},\n        emojiPath: \"\".concat(constants/* Constants */.Y.CDN, \"/dist/images/emoji\"),\n        hljs: constants/* Constants */.Y.HLJS_OPTIONS,\n        icon: \"ant\",\n        lang: \"zh_CN\",\n        markdown: constants/* Constants */.Y.MARKDOWN_OPTIONS,\n        math: constants/* Constants */.Y.MATH_OPTIONS,\n        mode: \"light\",\n        speech: {\n            enable: false,\n        },\n        render: {\n            media: {\n                enable: true,\n            }\n        },\n        loading: false,\n        theme: constants/* Constants */.Y.THEME_OPTIONS,\n    };\n    if (options.cdn) {\n        if (!((_a = options.theme) === null || _a === void 0 ? void 0 : _a.path)) {\n            defaultOption.theme.path = \"\".concat(options.cdn, \"/dist/css/content-theme\");\n        }\n        if (!options.emojiPath) {\n            defaultOption.emojiPath = \"\".concat(options.cdn, \"/dist/images/emoji\");\n        }\n    }\n    return (0,merge/* merge */.h)(defaultOption, options);\n};\nvar md2html = function (mdText, options) {\n    var mergedOptions = mergeOptions(options);\n    return (0,addScript/* addScript */.Z)(\"\".concat(mergedOptions.cdn, \"/dist/js/lute/lute.min.js\"), \"vditorLuteScript\").then(function () {\n        var lute = (0,setLute/* setLute */.X)({\n            autoSpace: mergedOptions.markdown.autoSpace,\n            gfmAutoLink: mergedOptions.markdown.gfmAutoLink,\n            codeBlockPreview: mergedOptions.markdown.codeBlockPreview,\n            emojiSite: mergedOptions.emojiPath,\n            emojis: mergedOptions.customEmoji,\n            fixTermTypo: mergedOptions.markdown.fixTermTypo,\n            footnotes: mergedOptions.markdown.footnotes,\n            headingAnchor: mergedOptions.anchor !== 0,\n            inlineMathDigit: mergedOptions.math.inlineDigit,\n            lazyLoadImage: mergedOptions.lazyLoadImage,\n            linkBase: mergedOptions.markdown.linkBase,\n            linkPrefix: mergedOptions.markdown.linkPrefix,\n            listStyle: mergedOptions.markdown.listStyle,\n            mark: mergedOptions.markdown.mark,\n            mathBlockPreview: mergedOptions.markdown.mathBlockPreview,\n            paragraphBeginningSpace: mergedOptions.markdown.paragraphBeginningSpace,\n            sanitize: mergedOptions.markdown.sanitize,\n            toc: mergedOptions.markdown.toc,\n        });\n        if (options === null || options === void 0 ? void 0 : options.renderers) {\n            lute.SetJSRenderers({\n                renderers: {\n                    Md2HTML: options.renderers,\n                },\n            });\n        }\n        lute.SetHeadingID(true);\n        return lute.Md2HTML(mdText);\n    });\n};\nvar previewRender = function (previewElement, markdown, options) { return __awaiter(void 0, void 0, void 0, function () {\n    var mergedOptions, html, children, i18nScriptPrefix, i18nScriptID_1;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                mergedOptions = mergeOptions(options);\n                return [4 /*yield*/, md2html(markdown, mergedOptions)];\n            case 1:\n                html = _a.sent();\n                if (mergedOptions.transform) {\n                    html = mergedOptions.transform(html);\n                }\n                children = previewElement.children;\n                // 如果children 还有子节点，则用子节点\n                if (children.length > 0) {\n                    previewElement = children[0];\n                }\n                previewElement.innerHTML = html;\n                previewElement.classList.add(\"vditor-reset\");\n                if (!!mergedOptions.i18n) return [3 /*break*/, 5];\n                if (!![\"en_US\", \"fr_FR\", \"pt_BR\", \"ja_JP\", \"ko_KR\", \"ru_RU\", \"sv_SE\", \"zh_CN\", \"zh_TW\"].includes(mergedOptions.lang)) return [3 /*break*/, 2];\n                throw new Error(\"options.lang error, see https://ld246.com/article/1549638745630#options\");\n            case 2:\n                i18nScriptPrefix = \"vditorI18nScript\";\n                i18nScriptID_1 = i18nScriptPrefix + mergedOptions.lang;\n                document.querySelectorAll(\"head script[id^=\\\"\".concat(i18nScriptPrefix, \"\\\"]\")).forEach(function (el) {\n                    if (el.id !== i18nScriptID_1) {\n                        document.head.removeChild(el);\n                    }\n                });\n                return [4 /*yield*/, (0,addScript/* addScript */.Z)(\"\".concat(mergedOptions.cdn, \"/dist/js/i18n/\").concat(mergedOptions.lang, \".js\"), i18nScriptID_1)];\n            case 3:\n                _a.sent();\n                _a.label = 4;\n            case 4: return [3 /*break*/, 6];\n            case 5:\n                window.VditorI18n = mergedOptions.i18n;\n                _a.label = 6;\n            case 6:\n                if (!mergedOptions.icon) return [3 /*break*/, 8];\n                return [4 /*yield*/, (0,addScript/* addScript */.Z)(\"\".concat(mergedOptions.cdn, \"/dist/js/icons/\").concat(mergedOptions.icon, \".js\"), \"vditorIconScript\")];\n            case 7:\n                _a.sent();\n                _a.label = 8;\n            case 8:\n                (0,setContentTheme/* setContentTheme */.H)(mergedOptions.theme.current, mergedOptions.theme.path);\n                if (mergedOptions.anchor === 1) {\n                    previewElement.classList.add(\"vditor-reset--anchor\");\n                }\n                (0,codeRender/* codeRender */.o)(previewElement, mergedOptions.hljs);\n                (0,highlightRender/* highlightRender */.$)(mergedOptions.hljs, previewElement, mergedOptions.cdn);\n                (0,mathRender/* mathRender */.T)(previewElement, {\n                    cdn: mergedOptions.cdn,\n                    math: mergedOptions.math,\n                });\n                (0,mermaidRender/* mermaidRender */.e)(previewElement, mergedOptions.cdn, mergedOptions.mode);\n                (0,SMILESRender/* SMILESRender */.Y)(previewElement, mergedOptions.cdn, mergedOptions.mode);\n                (0,markmapRender/* markmapRender */.K)(previewElement, mergedOptions.cdn);\n                (0,flowchartRender/* flowchartRender */.D)(previewElement, mergedOptions.cdn);\n                (0,graphvizRender/* graphvizRender */.m)(previewElement, mergedOptions.cdn);\n                (0,chartRender/* chartRender */.v)(previewElement, mergedOptions.cdn, mergedOptions.mode);\n                (0,mindmapRender/* mindmapRender */.l)(previewElement, mergedOptions.cdn, mergedOptions.mode);\n                (0,plantumlRender/* plantumlRender */.M)(previewElement, mergedOptions.cdn);\n                (0,abcRender/* abcRender */.$)(previewElement, mergedOptions.cdn);\n                if (mergedOptions.render.media.enable) {\n                    (0,mediaRender/* mediaRender */.l)(previewElement);\n                }\n                if (mergedOptions.speech.enable) {\n                    speechRender(previewElement);\n                }\n                if (mergedOptions.anchor !== 0) {\n                    anchorRender(mergedOptions.anchor);\n                }\n                if (mergedOptions.after) {\n                    mergedOptions.after();\n                }\n                if (mergedOptions.lazyLoadImage) {\n                    lazyLoadImageRender(previewElement);\n                }\n                previewElement.addEventListener(\"click\", function (event) {\n                    var spanElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(event.target, \"SPAN\");\n                    if (spanElement && (0,hasClosest/* hasClosestByClassName */.KJ)(spanElement, \"vditor-toc\")) {\n                        var headingElement = previewElement.querySelector(\"#\" + spanElement.getAttribute(\"data-target-id\"));\n                        if (headingElement) {\n                            window.scrollTo(window.scrollX, headingElement.offsetTop);\n                        }\n                        return;\n                    }\n                });\n                return [2 /*return*/];\n        }\n    });\n}); };\n\n// EXTERNAL MODULE: ./src/ts/preview/image.ts\nvar preview_image = __webpack_require__(649);\n// EXTERNAL MODULE: ./src/ts/ui/setCodeTheme.ts\nvar setCodeTheme = __webpack_require__(854);\n;// ./src/method.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Vditor = /** @class */ (function () {\n    function Vditor() {\n    }\n    /** 点击图片放大 */\n    Vditor.adapterRender = adapterRender;\n    /** 点击图片放大 */\n    Vditor.previewImage = preview_image/* previewImage */.o;\n    /** 为 element 中的代码块添加复制按钮 */\n    Vditor.codeRender = codeRender/* codeRender */.o;\n    /** 对 graphviz 进行渲染 */\n    Vditor.graphvizRender = graphvizRender/* graphvizRender */.m;\n    /** 为 element 中的代码块进行高亮渲染 */\n    Vditor.highlightRender = highlightRender/* highlightRender */.$;\n    /** 对数学公式进行渲染 */\n    Vditor.mathRender = mathRender/* mathRender */.T;\n    /** 流程图/时序图/甘特图渲染 */\n    Vditor.mermaidRender = mermaidRender/* mermaidRender */.e;\n    /** 化学物质结构渲染 */\n    Vditor.SMILESRender = SMILESRender/* SMILESRender */.Y;\n    /** 支持 markdown 的思维导图 */\n    Vditor.markmapRender = markmapRender/* markmapRender */.K;\n    /** flowchart.js 渲染 */\n    Vditor.flowchartRender = flowchartRender/* flowchartRender */.D;\n    /** 图表渲染 */\n    Vditor.chartRender = chartRender/* chartRender */.v;\n    /** 五线谱渲染 */\n    Vditor.abcRender = abcRender/* abcRender */.$;\n    /** 脑图渲染 */\n    Vditor.mindmapRender = mindmapRender/* mindmapRender */.l;\n    /** plantuml渲染 */\n    Vditor.plantumlRender = plantumlRender/* plantumlRender */.M;\n    /** 大纲渲染 */\n    Vditor.outlineRender = outlineRender/* outlineRender */.N;\n    /** 为[特定链接](https://github.com/Vanessa219/vditor/issues/7)分别渲染为视频、音频、嵌入的 iframe */\n    Vditor.mediaRender = mediaRender/* mediaRender */.l;\n    /** 对选中的文字进行阅读 */\n    Vditor.speechRender = speechRender;\n    /** 对图片进行懒加载 */\n    Vditor.lazyLoadImageRender = lazyLoadImageRender;\n    /** Markdown 文本转换为 HTML，该方法需使用[异步编程](https://ld246.com/article/1546828434083?r=Vaness) */\n    Vditor.md2html = md2html;\n    /** 页面 Markdown 文章渲染 */\n    Vditor.preview = previewRender;\n    /** 设置代码主题 */\n    Vditor.setCodeTheme = setCodeTheme/* setCodeTheme */.h;\n    /** 设置内容主题 */\n    Vditor.setContentTheme = setContentTheme/* setContentTheme */.H;\n    return Vditor;\n}());\n/* harmony default export */ const method = (Vditor);\n\n\n/***/ }),\n\n/***/ 292:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Y: () => (/* binding */ SMILESRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n/* harmony import */ var _util_function__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(138);\n\n\n\n\nvar SMILESRender = function (element, cdn, theme) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var SMILESElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.SMILESRenderAdapter.getElements(element);\n    if (SMILESElements.length > 0) {\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/smiles-drawer/smiles-drawer.min.js?v=2.1.7\"), \"vditorAbcjsScript\").then(function () {\n            var sd = new SmiDrawer({}, {});\n            SMILESElements.forEach(function (item) {\n                var code = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.SMILESRenderAdapter.getCode(item).trim();\n                if (item.getAttribute(\"data-processed\") === \"true\" || code.trim() === \"\") {\n                    return;\n                }\n                var id = \"smiles\" + (0,_util_function__WEBPACK_IMPORTED_MODULE_3__/* .genUUID */ .Ee)();\n                item.innerHTML = \"<svg id=\\\"\".concat(id, \"\\\"></svg>\");\n                sd.draw(code, '#' + id, theme === \"dark\" ? \"dark\" : undefined);\n                item.setAttribute(\"data-processed\", \"true\");\n            });\n        });\n    }\n};\n\n\n/***/ }),\n\n/***/ 316:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   K: () => (/* binding */ markmapRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar enabled = {};\nvar transform = function (transformer, content) {\n    var result = transformer.transform(content);\n    var keys = Object.keys(result.features).filter(function (key) { return !enabled[key]; });\n    keys.forEach(function (key) {\n        enabled[key] = true;\n    });\n    var _a = transformer.getAssets(keys), styles = _a.styles, scripts = _a.scripts;\n    var markmap = window.markmap;\n    if (styles)\n        markmap.loadCSS(styles);\n    if (scripts)\n        markmap.loadJS(scripts);\n    return result;\n};\nvar init = function (el, code) {\n    var _a = window.markmap, Transformer = _a.Transformer, Markmap = _a.Markmap, deriveOptions = _a.deriveOptions, globalCSS = _a.globalCSS;\n    var transformer = new Transformer();\n    el.innerHTML = '<svg style=\"width:100%\"></svg>';\n    var svg = el.firstChild;\n    var mm = Markmap.create(svg, null);\n    var _b = transform(transformer, code), root = _b.root, frontmatter = _b.frontmatter;\n    var markmapOptions = frontmatter === null || frontmatter === void 0 ? void 0 : frontmatter.markmap;\n    var frontmatterOptions = deriveOptions(markmapOptions);\n    mm.setData(root, frontmatterOptions);\n    mm.fit();\n};\nvar markmapRender = function (element, cdn) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var markmapElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.markmapRenderAdapter.getElements(element);\n    if (markmapElements.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/markmap/markmap.min.js\"), \"vditorMarkerScript\").then(function () {\n        markmapElements.forEach(function (item) {\n            var code = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.markmapRenderAdapter.getCode(item);\n            if (item.getAttribute(\"data-processed\") === \"true\" || code.trim() === \"\") {\n                return;\n            }\n            var render = document.createElement(\"div\");\n            render.className = \"language-markmap\";\n            item.parentNode.appendChild(render);\n            init(render, code);\n            if (item.parentNode.childNodes[0].nodeName == \"CODE\") {\n                item.parentNode.removeChild(item.parentNode.childNodes[0]);\n            }\n        });\n    });\n};\n\n\n/***/ }),\n\n/***/ 329:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   X: () => (/* binding */ setLute)\n/* harmony export */ });\nvar setLute = function (options) {\n    var lute = Lute.New();\n    lute.PutEmojis(options.emojis);\n    lute.SetEmojiSite(options.emojiSite);\n    lute.SetHeadingAnchor(options.headingAnchor);\n    lute.SetInlineMathAllowDigitAfterOpenMarker(options.inlineMathDigit);\n    lute.SetAutoSpace(options.autoSpace);\n    lute.SetToC(options.toc);\n    lute.SetFootnotes(options.footnotes);\n    lute.SetFixTermTypo(options.fixTermTypo);\n    lute.SetVditorCodeBlockPreview(options.codeBlockPreview);\n    lute.SetVditorMathBlockPreview(options.mathBlockPreview);\n    lute.SetSanitize(options.sanitize);\n    lute.SetChineseParagraphBeginningSpace(options.paragraphBeginningSpace);\n    lute.SetRenderListStyle(options.listStyle);\n    lute.SetLinkBase(options.linkBase);\n    lute.SetLinkPrefix(options.linkPrefix);\n    lute.SetMark(options.mark);\n    lute.SetGFMAutoLink(options.gfmAutoLink);\n    if (options.lazyLoadImage) {\n        lute.SetImageLazyLoading(options.lazyLoadImage);\n    }\n    return lute;\n};\n\n\n/***/ }),\n\n/***/ 444:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   U: () => (/* binding */ addScriptSync),\n/* harmony export */   Z: () => (/* binding */ addScript)\n/* harmony export */ });\nvar addScriptSync = function (path, id) {\n    if (document.getElementById(id)) {\n        return false;\n    }\n    var xhrObj = new XMLHttpRequest();\n    xhrObj.open(\"GET\", path, false);\n    xhrObj.setRequestHeader(\"Accept\", \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01\");\n    xhrObj.send(\"\");\n    var scriptElement = document.createElement(\"script\");\n    scriptElement.type = \"text/javascript\";\n    scriptElement.text = xhrObj.responseText;\n    scriptElement.id = id;\n    document.head.appendChild(scriptElement);\n};\nvar addScript = function (path, id) {\n    return new Promise(function (resolve, reject) {\n        if (document.getElementById(id)) {\n            // 脚本加载后再次调用直接返回\n            resolve(true);\n            return false;\n        }\n        var scriptElement = document.createElement(\"script\");\n        scriptElement.src = path;\n        scriptElement.async = true;\n        // 循环调用时 Chrome 不会重复请求 js\n        document.head.appendChild(scriptElement);\n        scriptElement.onerror = function (event) {\n            reject(event);\n        };\n        scriptElement.onload = function () {\n            if (document.getElementById(id)) {\n                // 循环调用需清除 DOM 中的 script 标签\n                scriptElement.remove();\n                resolve(true);\n                return false;\n            }\n            scriptElement.id = id;\n            resolve(true);\n        };\n    });\n};\n\n\n/***/ }),\n\n/***/ 449:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   $: () => (/* binding */ abcRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar abcRender = function (element, cdn) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var abcElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.abcRenderAdapter.getElements(element);\n    if (abcElements.length > 0) {\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/abcjs/abcjs_basic.min.js\"), \"vditorAbcjsScript\").then(function () {\n            abcElements.forEach(function (item) {\n                if (item.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                    item.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                    return;\n                }\n                if (item.getAttribute(\"data-processed\") === \"true\") {\n                    return;\n                }\n                ABCJS.renderAbc(item, _adapterRender__WEBPACK_IMPORTED_MODULE_1__.abcRenderAdapter.getCode(item).trim());\n                item.style.overflowX = \"auto\";\n                item.setAttribute(\"data-processed\", \"true\");\n            });\n        });\n    }\n};\n\n\n/***/ }),\n\n/***/ 516:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   m: () => (/* binding */ graphvizRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar graphvizRender = function (element, cdn) {\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var graphvizElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.graphvizRenderAdapter.getElements(element);\n    if (graphvizElements.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/graphviz/viz.js\"), \"vditorGraphVizScript\").then(function () {\n        graphvizElements.forEach(function (e) {\n            var code = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.graphvizRenderAdapter.getCode(e);\n            if (e.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                e.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                return;\n            }\n            if (e.getAttribute(\"data-processed\") === \"true\" || code.trim() === \"\") {\n                return;\n            }\n            try {\n                var blob = new Blob([\"importScripts('\".concat(document.getElementById(\"vditorGraphVizScript\").src.replace(\"viz.js\", \"full.render.js\"), \"');\")], { type: \"application/javascript\" });\n                var url = window.URL || window.webkitURL;\n                var blobUrl = url.createObjectURL(blob);\n                var worker = new Worker(blobUrl);\n                new Viz({ worker: worker })\n                    .renderSVGElement(code).then(function (result) {\n                    e.innerHTML = result.outerHTML;\n                }).catch(function (error) {\n                    e.innerHTML = \"graphviz render error: <br>\".concat(error);\n                    e.className = \"vditor-reset--error\";\n                });\n            }\n            catch (e) {\n                console.error(\"graphviz error\", e);\n            }\n            e.setAttribute(\"data-processed\", \"true\");\n        });\n    });\n};\n\n\n/***/ }),\n\n/***/ 594:\n/***/ ((module) => {\n\n/**\n * Diff Match and Patch\n * Copyright 2018 The diff-match-patch Authors.\n * https://github.com/google/diff-match-patch\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author fraser@google.com (Neil Fraser)\n */\n\n/**\n * Class containing the diff, match and patch methods.\n * @constructor\n */\nvar diff_match_patch = function () {\n  // Defaults.\n  // Redefine these in your program to override the defaults.\n\n  // Number of seconds to map a diff before giving up (0 for infinity).\n  this.Diff_Timeout = 1.0;\n  // Cost of an empty edit operation in terms of edit characters.\n  this.Diff_EditCost = 4;\n  // At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n  this.Match_Threshold = 0.5;\n  // How far to search for a match (0 = exact location, 1000+ = broad match).\n  // A match this many characters away from the expected location will add\n  // 1.0 to the score (0.0 is a perfect match).\n  this.Match_Distance = 1000;\n  // When deleting a large block of text (over ~64 characters), how close do\n  // the contents have to be to match the expected contents. (0.0 = perfection,\n  // 1.0 = very loose).  Note that Match_Threshold controls how closely the\n  // end points of a delete need to match.\n  this.Patch_DeleteThreshold = 0.5;\n  // Chunk size for context length.\n  this.Patch_Margin = 4;\n\n  // The number of bits in an int.\n  this.Match_MaxBits = 32;\n};\n\n//  DIFF FUNCTIONS\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Class representing one diff tuple.\n * ~Attempts to look like a two-element array (which is what this used to be).~\n * Constructor returns an actual two-element array, to allow destructing @JackuB\n * See https://github.com/JackuB/diff-match-patch/issues/14 for details\n * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.\n * @param {string} text Text to be deleted, inserted, or retained.\n * @constructor\n */\ndiff_match_patch.Diff = function (op, text) {\n  return [op, text];\n};\n\n/**\n * Find the differences between two texts.  Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean=} opt_checklines Optional speedup flag. If present and false,\n *     then don't run a line-level diff first to identify the changed areas.\n *     Defaults to true, which does a faster, slightly less optimal diff.\n * @param {number=} opt_deadline Optional time when the diff should be complete\n *     by.  Used internally for recursive calls.  Users should set DiffTimeout\n *     instead.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_main = function (text1, text2, opt_checklines, opt_deadline) {\n  // Set a deadline by which time the diff must be complete.\n  if (typeof opt_deadline == 'undefined') {\n    if (this.Diff_Timeout <= 0) {\n      opt_deadline = Number.MAX_VALUE;\n    } else {\n      opt_deadline = new Date().getTime() + this.Diff_Timeout * 1000;\n    }\n  }\n  var deadline = opt_deadline;\n\n  // Check for null inputs.\n  if (text1 == null || text2 == null) {\n    throw new Error('Null input. (diff_main)');\n  }\n\n  // Check for equality (speedup).\n  if (text1 == text2) {\n    if (text1) {\n      return [new diff_match_patch.Diff(DIFF_EQUAL, text1)];\n    }\n    return [];\n  }\n  if (typeof opt_checklines == 'undefined') {\n    opt_checklines = true;\n  }\n  var checklines = opt_checklines;\n\n  // Trim off common prefix (speedup).\n  var commonlength = this.diff_commonPrefix(text1, text2);\n  var commonprefix = text1.substring(0, commonlength);\n  text1 = text1.substring(commonlength);\n  text2 = text2.substring(commonlength);\n\n  // Trim off common suffix (speedup).\n  commonlength = this.diff_commonSuffix(text1, text2);\n  var commonsuffix = text1.substring(text1.length - commonlength);\n  text1 = text1.substring(0, text1.length - commonlength);\n  text2 = text2.substring(0, text2.length - commonlength);\n\n  // Compute the diff on the middle block.\n  var diffs = this.diff_compute_(text1, text2, checklines, deadline);\n\n  // Restore the prefix and suffix.\n  if (commonprefix) {\n    diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, commonprefix));\n  }\n  if (commonsuffix) {\n    diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, commonsuffix));\n  }\n  this.diff_cleanupMerge(diffs);\n  return diffs;\n};\n\n/**\n * Find the differences between two texts.  Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} checklines Speedup flag.  If false, then don't run a\n *     line-level diff first to identify the changed areas.\n *     If true, then run a faster, slightly less optimal diff.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_compute_ = function (text1, text2, checklines, deadline) {\n  var diffs;\n  if (!text1) {\n    // Just add some text (speedup).\n    return [new diff_match_patch.Diff(DIFF_INSERT, text2)];\n  }\n  if (!text2) {\n    // Just delete some text (speedup).\n    return [new diff_match_patch.Diff(DIFF_DELETE, text1)];\n  }\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  var i = longtext.indexOf(shorttext);\n  if (i != -1) {\n    // Shorter text is inside the longer text (speedup).\n    diffs = [new diff_match_patch.Diff(DIFF_INSERT, longtext.substring(0, i)), new diff_match_patch.Diff(DIFF_EQUAL, shorttext), new diff_match_patch.Diff(DIFF_INSERT, longtext.substring(i + shorttext.length))];\n    // Swap insertions for deletions if diff is reversed.\n    if (text1.length > text2.length) {\n      diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n    }\n    return diffs;\n  }\n  if (shorttext.length == 1) {\n    // Single character string.\n    // After the previous speedup, the character can't be an equality.\n    return [new diff_match_patch.Diff(DIFF_DELETE, text1), new diff_match_patch.Diff(DIFF_INSERT, text2)];\n  }\n\n  // Check to see if the problem can be split in two.\n  var hm = this.diff_halfMatch_(text1, text2);\n  if (hm) {\n    // A half-match was found, sort out the return data.\n    var text1_a = hm[0];\n    var text1_b = hm[1];\n    var text2_a = hm[2];\n    var text2_b = hm[3];\n    var mid_common = hm[4];\n    // Send both pairs off for separate processing.\n    var diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline);\n    var diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline);\n    // Merge the results.\n    return diffs_a.concat([new diff_match_patch.Diff(DIFF_EQUAL, mid_common)], diffs_b);\n  }\n  if (checklines && text1.length > 100 && text2.length > 100) {\n    return this.diff_lineMode_(text1, text2, deadline);\n  }\n  return this.diff_bisect_(text1, text2, deadline);\n};\n\n/**\n * Do a quick line-level diff on both strings, then rediff the parts for\n * greater accuracy.\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_lineMode_ = function (text1, text2, deadline) {\n  // Scan the text on a line-by-line basis first.\n  var a = this.diff_linesToChars_(text1, text2);\n  text1 = a.chars1;\n  text2 = a.chars2;\n  var linearray = a.lineArray;\n  var diffs = this.diff_main(text1, text2, false, deadline);\n\n  // Convert the diff back to original text.\n  this.diff_charsToLines_(diffs, linearray);\n  // Eliminate freak matches (e.g. blank lines)\n  this.diff_cleanupSemantic(diffs);\n\n  // Rediff any replacement blocks, this time character-by-character.\n  // Add a dummy entry at the end.\n  diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = '';\n  var text_insert = '';\n  while (pointer < diffs.length) {\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        break;\n      case DIFF_EQUAL:\n        // Upon reaching an equality, check for prior redundancies.\n        if (count_delete >= 1 && count_insert >= 1) {\n          // Delete the offending records and add the merged ones.\n          diffs.splice(pointer - count_delete - count_insert, count_delete + count_insert);\n          pointer = pointer - count_delete - count_insert;\n          var subDiff = this.diff_main(text_delete, text_insert, false, deadline);\n          for (var j = subDiff.length - 1; j >= 0; j--) {\n            diffs.splice(pointer, 0, subDiff[j]);\n          }\n          pointer = pointer + subDiff.length;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = '';\n        text_insert = '';\n        break;\n    }\n    pointer++;\n  }\n  diffs.pop(); // Remove the dummy entry at the end.\n\n  return diffs;\n};\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisect_ = function (text1, text2, deadline) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  var max_d = Math.ceil((text1_length + text2_length) / 2);\n  var v_offset = max_d;\n  var v_length = 2 * max_d;\n  var v1 = new Array(v_length);\n  var v2 = new Array(v_length);\n  // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n  // integers and undefined.\n  for (var x = 0; x < v_length; x++) {\n    v1[x] = -1;\n    v2[x] = -1;\n  }\n  v1[v_offset + 1] = 0;\n  v2[v_offset + 1] = 0;\n  var delta = text1_length - text2_length;\n  // If the total number of characters is odd, then the front path will collide\n  // with the reverse path.\n  var front = delta % 2 != 0;\n  // Offsets for start and end of k loop.\n  // Prevents mapping of space beyond the grid.\n  var k1start = 0;\n  var k1end = 0;\n  var k2start = 0;\n  var k2end = 0;\n  for (var d = 0; d < max_d; d++) {\n    // Bail out if deadline is reached.\n    if (new Date().getTime() > deadline) {\n      break;\n    }\n\n    // Walk the front path one step.\n    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n      var k1_offset = v_offset + k1;\n      var x1;\n      if (k1 == -d || k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1]) {\n        x1 = v1[k1_offset + 1];\n      } else {\n        x1 = v1[k1_offset - 1] + 1;\n      }\n      var y1 = x1 - k1;\n      while (x1 < text1_length && y1 < text2_length && text1.charAt(x1) == text2.charAt(y1)) {\n        x1++;\n        y1++;\n      }\n      v1[k1_offset] = x1;\n      if (x1 > text1_length) {\n        // Ran off the right of the graph.\n        k1end += 2;\n      } else if (y1 > text2_length) {\n        // Ran off the bottom of the graph.\n        k1start += 2;\n      } else if (front) {\n        var k2_offset = v_offset + delta - k1;\n        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n          // Mirror x2 onto top-left coordinate system.\n          var x2 = text1_length - v2[k2_offset];\n          if (x1 >= x2) {\n            // Overlap detected.\n            return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n          }\n        }\n      }\n    }\n\n    // Walk the reverse path one step.\n    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n      var k2_offset = v_offset + k2;\n      var x2;\n      if (k2 == -d || k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1]) {\n        x2 = v2[k2_offset + 1];\n      } else {\n        x2 = v2[k2_offset - 1] + 1;\n      }\n      var y2 = x2 - k2;\n      while (x2 < text1_length && y2 < text2_length && text1.charAt(text1_length - x2 - 1) == text2.charAt(text2_length - y2 - 1)) {\n        x2++;\n        y2++;\n      }\n      v2[k2_offset] = x2;\n      if (x2 > text1_length) {\n        // Ran off the left of the graph.\n        k2end += 2;\n      } else if (y2 > text2_length) {\n        // Ran off the top of the graph.\n        k2start += 2;\n      } else if (!front) {\n        var k1_offset = v_offset + delta - k2;\n        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n          var x1 = v1[k1_offset];\n          var y1 = v_offset + x1 - k1_offset;\n          // Mirror x2 onto top-left coordinate system.\n          x2 = text1_length - x2;\n          if (x1 >= x2) {\n            // Overlap detected.\n            return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n          }\n        }\n      }\n    }\n  }\n  // Diff took too long and hit the deadline or\n  // number of diffs equals number of characters, no commonality at all.\n  return [new diff_match_patch.Diff(DIFF_DELETE, text1), new diff_match_patch.Diff(DIFF_INSERT, text2)];\n};\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisectSplit_ = function (text1, text2, x, y, deadline) {\n  var text1a = text1.substring(0, x);\n  var text2a = text2.substring(0, y);\n  var text1b = text1.substring(x);\n  var text2b = text2.substring(y);\n\n  // Compute both diffs serially.\n  var diffs = this.diff_main(text1a, text2a, false, deadline);\n  var diffsb = this.diff_main(text1b, text2b, false, deadline);\n  return diffs.concat(diffsb);\n};\n\n/**\n * Split two texts into an array of strings.  Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}\n *     An object containing the encoded text1, the encoded text2 and\n *     the array of unique strings.\n *     The zeroth element of the array of unique strings is intentionally blank.\n * @private\n */\ndiff_match_patch.prototype.diff_linesToChars_ = function (text1, text2) {\n  var lineArray = []; // e.g. lineArray[4] == 'Hello\\n'\n  var lineHash = {}; // e.g. lineHash['Hello\\n'] == 4\n\n  // '\\x00' is a valid character, but various debuggers don't like it.\n  // So we'll insert a junk entry to avoid generating a null character.\n  lineArray[0] = '';\n\n  /**\n   * Split a text into an array of strings.  Reduce the texts to a string of\n   * hashes where each Unicode character represents one line.\n   * Modifies linearray and linehash through being a closure.\n   * @param {string} text String to encode.\n   * @return {string} Encoded string.\n   * @private\n   */\n  function diff_linesToCharsMunge_(text) {\n    var chars = '';\n    // Walk the text, pulling out a substring for each line.\n    // text.split('\\n') would would temporarily double our memory footprint.\n    // Modifying text would create many large strings to garbage collect.\n    var lineStart = 0;\n    var lineEnd = -1;\n    // Keeping our own length variable is faster than looking it up.\n    var lineArrayLength = lineArray.length;\n    while (lineEnd < text.length - 1) {\n      lineEnd = text.indexOf('\\n', lineStart);\n      if (lineEnd == -1) {\n        lineEnd = text.length - 1;\n      }\n      var line = text.substring(lineStart, lineEnd + 1);\n      if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== undefined) {\n        chars += String.fromCharCode(lineHash[line]);\n      } else {\n        if (lineArrayLength == maxLines) {\n          // Bail out at 65535 because\n          // String.fromCharCode(65536) == String.fromCharCode(0)\n          line = text.substring(lineStart);\n          lineEnd = text.length;\n        }\n        chars += String.fromCharCode(lineArrayLength);\n        lineHash[line] = lineArrayLength;\n        lineArray[lineArrayLength++] = line;\n      }\n      lineStart = lineEnd + 1;\n    }\n    return chars;\n  }\n  // Allocate 2/3rds of the space for text1, the rest for text2.\n  var maxLines = 40000;\n  var chars1 = diff_linesToCharsMunge_(text1);\n  maxLines = 65535;\n  var chars2 = diff_linesToCharsMunge_(text2);\n  return {\n    chars1: chars1,\n    chars2: chars2,\n    lineArray: lineArray\n  };\n};\n\n/**\n * Rehydrate the text in a diff from a string of line hashes to real lines of\n * text.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {!Array.<string>} lineArray Array of unique strings.\n * @private\n */\ndiff_match_patch.prototype.diff_charsToLines_ = function (diffs, lineArray) {\n  for (var i = 0; i < diffs.length; i++) {\n    var chars = diffs[i][1];\n    var text = [];\n    for (var j = 0; j < chars.length; j++) {\n      text[j] = lineArray[chars.charCodeAt(j)];\n    }\n    diffs[i][1] = text.join('');\n  }\n};\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n *     string.\n */\ndiff_match_patch.prototype.diff_commonPrefix = function (text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerstart = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) {\n      pointermin = pointermid;\n      pointerstart = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\ndiff_match_patch.prototype.diff_commonSuffix = function (text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 || text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerend = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n      pointermin = pointermid;\n      pointerend = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n *     string and the start of the second string.\n * @private\n */\ndiff_match_patch.prototype.diff_commonOverlap_ = function (text1, text2) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  // Eliminate the null case.\n  if (text1_length == 0 || text2_length == 0) {\n    return 0;\n  }\n  // Truncate the longer string.\n  if (text1_length > text2_length) {\n    text1 = text1.substring(text1_length - text2_length);\n  } else if (text1_length < text2_length) {\n    text2 = text2.substring(0, text1_length);\n  }\n  var text_length = Math.min(text1_length, text2_length);\n  // Quick check for the worst case.\n  if (text1 == text2) {\n    return text_length;\n  }\n\n  // Start by looking for a single character match\n  // and increase length until no match is found.\n  // Performance analysis: https://neil.fraser.name/news/2010/11/04/\n  var best = 0;\n  var length = 1;\n  while (true) {\n    var pattern = text1.substring(text_length - length);\n    var found = text2.indexOf(pattern);\n    if (found == -1) {\n      return best;\n    }\n    length += found;\n    if (found == 0 || text1.substring(text_length - length) == text2.substring(0, length)) {\n      best = length;\n      length++;\n    }\n  }\n};\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n *     text1, the suffix of text1, the prefix of text2, the suffix of\n *     text2 and the common middle.  Or null if there was no match.\n * @private\n */\ndiff_match_patch.prototype.diff_halfMatch_ = function (text1, text2) {\n  if (this.Diff_Timeout <= 0) {\n    // Don't risk returning a non-optimal diff if we have unlimited time.\n    return null;\n  }\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n    return null; // Pointless.\n  }\n  var dmp = this; // 'this' becomes 'window' in a closure.\n\n  /**\n   * Does a substring of shorttext exist within longtext such that the substring\n   * is at least half the length of longtext?\n   * Closure, but does not reference any external variables.\n   * @param {string} longtext Longer string.\n   * @param {string} shorttext Shorter string.\n   * @param {number} i Start index of quarter length substring within longtext.\n   * @return {Array.<string>} Five element Array, containing the prefix of\n   *     longtext, the suffix of longtext, the prefix of shorttext, the suffix\n   *     of shorttext and the common middle.  Or null if there was no match.\n   * @private\n   */\n  function diff_halfMatchI_(longtext, shorttext, i) {\n    // Start with a 1/4 length substring at position i as a seed.\n    var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n    var j = -1;\n    var best_common = '';\n    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n    while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n      var prefixLength = dmp.diff_commonPrefix(longtext.substring(i), shorttext.substring(j));\n      var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i), shorttext.substring(0, j));\n      if (best_common.length < suffixLength + prefixLength) {\n        best_common = shorttext.substring(j - suffixLength, j) + shorttext.substring(j, j + prefixLength);\n        best_longtext_a = longtext.substring(0, i - suffixLength);\n        best_longtext_b = longtext.substring(i + prefixLength);\n        best_shorttext_a = shorttext.substring(0, j - suffixLength);\n        best_shorttext_b = shorttext.substring(j + prefixLength);\n      }\n    }\n    if (best_common.length * 2 >= longtext.length) {\n      return [best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b, best_common];\n    } else {\n      return null;\n    }\n  }\n\n  // First check if the second quarter is the seed for a half-match.\n  var hm1 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 4));\n  // Check again based on the third quarter.\n  var hm2 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 2));\n  var hm;\n  if (!hm1 && !hm2) {\n    return null;\n  } else if (!hm2) {\n    hm = hm1;\n  } else if (!hm1) {\n    hm = hm2;\n  } else {\n    // Both matched.  Select the longest.\n    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n  }\n\n  // A half-match was found, sort out the return data.\n  var text1_a, text1_b, text2_a, text2_b;\n  if (text1.length > text2.length) {\n    text1_a = hm[0];\n    text1_b = hm[1];\n    text2_a = hm[2];\n    text2_b = hm[3];\n  } else {\n    text2_a = hm[0];\n    text2_b = hm[1];\n    text1_a = hm[2];\n    text1_b = hm[3];\n  }\n  var mid_common = hm[4];\n  return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemantic = function (diffs) {\n  var changes = false;\n  var equalities = []; // Stack of indices where equalities are found.\n  var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n  /** @type {?string} */\n  var lastEquality = null;\n  // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n  var pointer = 0; // Index of current position.\n  // Number of characters that changed prior to the equality.\n  var length_insertions1 = 0;\n  var length_deletions1 = 0;\n  // Number of characters that changed after the equality.\n  var length_insertions2 = 0;\n  var length_deletions2 = 0;\n  while (pointer < diffs.length) {\n    if (diffs[pointer][0] == DIFF_EQUAL) {\n      // Equality found.\n      equalities[equalitiesLength++] = pointer;\n      length_insertions1 = length_insertions2;\n      length_deletions1 = length_deletions2;\n      length_insertions2 = 0;\n      length_deletions2 = 0;\n      lastEquality = diffs[pointer][1];\n    } else {\n      // An insertion or deletion.\n      if (diffs[pointer][0] == DIFF_INSERT) {\n        length_insertions2 += diffs[pointer][1].length;\n      } else {\n        length_deletions2 += diffs[pointer][1].length;\n      }\n      // Eliminate an equality that is smaller or equal to the edits on both\n      // sides of it.\n      if (lastEquality && lastEquality.length <= Math.max(length_insertions1, length_deletions1) && lastEquality.length <= Math.max(length_insertions2, length_deletions2)) {\n        // Duplicate record.\n        diffs.splice(equalities[equalitiesLength - 1], 0, new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n        // Change second copy to insert.\n        diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n        // Throw away the equality we just deleted.\n        equalitiesLength--;\n        // Throw away the previous equality (it needs to be reevaluated).\n        equalitiesLength--;\n        pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n        length_insertions1 = 0; // Reset the counters.\n        length_deletions1 = 0;\n        length_insertions2 = 0;\n        length_deletions2 = 0;\n        lastEquality = null;\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n\n  // Normalize the diff.\n  if (changes) {\n    this.diff_cleanupMerge(diffs);\n  }\n  this.diff_cleanupSemanticLossless(diffs);\n\n  // Find any overlaps between deletions and insertions.\n  // e.g: <del>abcxxx</del><ins>xxxdef</ins>\n  //   -> <del>abc</del>xxx<ins>def</ins>\n  // e.g: <del>xxxabc</del><ins>defxxx</ins>\n  //   -> <ins>def</ins>xxx<del>abc</del>\n  // Only extract an overlap if it is as big as the edit ahead or behind it.\n  pointer = 1;\n  while (pointer < diffs.length) {\n    if (diffs[pointer - 1][0] == DIFF_DELETE && diffs[pointer][0] == DIFF_INSERT) {\n      var deletion = diffs[pointer - 1][1];\n      var insertion = diffs[pointer][1];\n      var overlap_length1 = this.diff_commonOverlap_(deletion, insertion);\n      var overlap_length2 = this.diff_commonOverlap_(insertion, deletion);\n      if (overlap_length1 >= overlap_length2) {\n        if (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) {\n          // Overlap found.  Insert an equality and trim the surrounding edits.\n          diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL, insertion.substring(0, overlap_length1)));\n          diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlap_length1);\n          diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n          pointer++;\n        }\n      } else {\n        if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) {\n          // Reverse overlap found.\n          // Insert an equality and swap and trim the surrounding edits.\n          diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL, deletion.substring(0, overlap_length2)));\n          diffs[pointer - 1][0] = DIFF_INSERT;\n          diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlap_length2);\n          diffs[pointer + 1][0] = DIFF_DELETE;\n          diffs[pointer + 1][1] = deletion.substring(overlap_length2);\n          pointer++;\n        }\n      }\n      pointer++;\n    }\n    pointer++;\n  }\n};\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemanticLossless = function (diffs) {\n  /**\n   * Given two strings, compute a score representing whether the internal\n   * boundary falls on logical boundaries.\n   * Scores range from 6 (best) to 0 (worst).\n   * Closure, but does not reference any external variables.\n   * @param {string} one First string.\n   * @param {string} two Second string.\n   * @return {number} The score.\n   * @private\n   */\n  function diff_cleanupSemanticScore_(one, two) {\n    if (!one || !two) {\n      // Edges are the best.\n      return 6;\n    }\n\n    // Each port of this function behaves slightly differently due to\n    // subtle differences in each language's definition of things like\n    // 'whitespace'.  Since this function's purpose is largely cosmetic,\n    // the choice has been made to use each language's native features\n    // rather than force total conformity.\n    var char1 = one.charAt(one.length - 1);\n    var char2 = two.charAt(0);\n    var nonAlphaNumeric1 = char1.match(diff_match_patch.nonAlphaNumericRegex_);\n    var nonAlphaNumeric2 = char2.match(diff_match_patch.nonAlphaNumericRegex_);\n    var whitespace1 = nonAlphaNumeric1 && char1.match(diff_match_patch.whitespaceRegex_);\n    var whitespace2 = nonAlphaNumeric2 && char2.match(diff_match_patch.whitespaceRegex_);\n    var lineBreak1 = whitespace1 && char1.match(diff_match_patch.linebreakRegex_);\n    var lineBreak2 = whitespace2 && char2.match(diff_match_patch.linebreakRegex_);\n    var blankLine1 = lineBreak1 && one.match(diff_match_patch.blanklineEndRegex_);\n    var blankLine2 = lineBreak2 && two.match(diff_match_patch.blanklineStartRegex_);\n    if (blankLine1 || blankLine2) {\n      // Five points for blank lines.\n      return 5;\n    } else if (lineBreak1 || lineBreak2) {\n      // Four points for line breaks.\n      return 4;\n    } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n      // Three points for end of sentences.\n      return 3;\n    } else if (whitespace1 || whitespace2) {\n      // Two points for whitespace.\n      return 2;\n    } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n      // One point for non-alphanumeric.\n      return 1;\n    }\n    return 0;\n  }\n  var pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) {\n      // This is a single edit surrounded by equalities.\n      var equality1 = diffs[pointer - 1][1];\n      var edit = diffs[pointer][1];\n      var equality2 = diffs[pointer + 1][1];\n\n      // First, shift the edit as far left as possible.\n      var commonOffset = this.diff_commonSuffix(equality1, edit);\n      if (commonOffset) {\n        var commonString = edit.substring(edit.length - commonOffset);\n        equality1 = equality1.substring(0, equality1.length - commonOffset);\n        edit = commonString + edit.substring(0, edit.length - commonOffset);\n        equality2 = commonString + equality2;\n      }\n\n      // Second, step character by character right, looking for the best fit.\n      var bestEquality1 = equality1;\n      var bestEdit = edit;\n      var bestEquality2 = equality2;\n      var bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);\n      while (edit.charAt(0) === equality2.charAt(0)) {\n        equality1 += edit.charAt(0);\n        edit = edit.substring(1) + equality2.charAt(0);\n        equality2 = equality2.substring(1);\n        var score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);\n        // The >= encourages trailing rather than leading whitespace on edits.\n        if (score >= bestScore) {\n          bestScore = score;\n          bestEquality1 = equality1;\n          bestEdit = edit;\n          bestEquality2 = equality2;\n        }\n      }\n      if (diffs[pointer - 1][1] != bestEquality1) {\n        // We have an improvement, save it back to the diff.\n        if (bestEquality1) {\n          diffs[pointer - 1][1] = bestEquality1;\n        } else {\n          diffs.splice(pointer - 1, 1);\n          pointer--;\n        }\n        diffs[pointer][1] = bestEdit;\n        if (bestEquality2) {\n          diffs[pointer + 1][1] = bestEquality2;\n        } else {\n          diffs.splice(pointer + 1, 1);\n          pointer--;\n        }\n      }\n    }\n    pointer++;\n  }\n};\n\n// Define some regex patterns for matching boundaries.\ndiff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\ndiff_match_patch.whitespaceRegex_ = /\\s/;\ndiff_match_patch.linebreakRegex_ = /[\\r\\n]/;\ndiff_match_patch.blanklineEndRegex_ = /\\n\\r?\\n$/;\ndiff_match_patch.blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Reduce the number of edits by eliminating operationally trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupEfficiency = function (diffs) {\n  var changes = false;\n  var equalities = []; // Stack of indices where equalities are found.\n  var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n  /** @type {?string} */\n  var lastEquality = null;\n  // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n  var pointer = 0; // Index of current position.\n  // Is there an insertion operation before the last equality.\n  var pre_ins = false;\n  // Is there a deletion operation before the last equality.\n  var pre_del = false;\n  // Is there an insertion operation after the last equality.\n  var post_ins = false;\n  // Is there a deletion operation after the last equality.\n  var post_del = false;\n  while (pointer < diffs.length) {\n    if (diffs[pointer][0] == DIFF_EQUAL) {\n      // Equality found.\n      if (diffs[pointer][1].length < this.Diff_EditCost && (post_ins || post_del)) {\n        // Candidate found.\n        equalities[equalitiesLength++] = pointer;\n        pre_ins = post_ins;\n        pre_del = post_del;\n        lastEquality = diffs[pointer][1];\n      } else {\n        // Not a candidate, and can never become one.\n        equalitiesLength = 0;\n        lastEquality = null;\n      }\n      post_ins = post_del = false;\n    } else {\n      // An insertion or deletion.\n      if (diffs[pointer][0] == DIFF_DELETE) {\n        post_del = true;\n      } else {\n        post_ins = true;\n      }\n      /*\n       * Five types to be split:\n       * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>\n       * <ins>A</ins>X<ins>C</ins><del>D</del>\n       * <ins>A</ins><del>B</del>X<ins>C</ins>\n       * <ins>A</del>X<ins>C</ins><del>D</del>\n       * <ins>A</ins><del>B</del>X<del>C</del>\n       */\n      if (lastEquality && (pre_ins && pre_del && post_ins && post_del || lastEquality.length < this.Diff_EditCost / 2 && pre_ins + pre_del + post_ins + post_del == 3)) {\n        // Duplicate record.\n        diffs.splice(equalities[equalitiesLength - 1], 0, new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n        // Change second copy to insert.\n        diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n        equalitiesLength--; // Throw away the equality we just deleted;\n        lastEquality = null;\n        if (pre_ins && pre_del) {\n          // No changes made which could affect previous entry, keep going.\n          post_ins = post_del = true;\n          equalitiesLength = 0;\n        } else {\n          equalitiesLength--; // Throw away the previous equality.\n          pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n          post_ins = post_del = false;\n        }\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n  if (changes) {\n    this.diff_cleanupMerge(diffs);\n  }\n};\n\n/**\n * Reorder and merge like edit sections.  Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupMerge = function (diffs) {\n  // Add a dummy entry at the end.\n  diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = '';\n  var text_insert = '';\n  var commonlength;\n  while (pointer < diffs.length) {\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_EQUAL:\n        // Upon reaching an equality, check for prior redundancies.\n        if (count_delete + count_insert > 1) {\n          if (count_delete !== 0 && count_insert !== 0) {\n            // Factor out any common prefixies.\n            commonlength = this.diff_commonPrefix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              if (pointer - count_delete - count_insert > 0 && diffs[pointer - count_delete - count_insert - 1][0] == DIFF_EQUAL) {\n                diffs[pointer - count_delete - count_insert - 1][1] += text_insert.substring(0, commonlength);\n              } else {\n                diffs.splice(0, 0, new diff_match_patch.Diff(DIFF_EQUAL, text_insert.substring(0, commonlength)));\n                pointer++;\n              }\n              text_insert = text_insert.substring(commonlength);\n              text_delete = text_delete.substring(commonlength);\n            }\n            // Factor out any common suffixies.\n            commonlength = this.diff_commonSuffix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1];\n              text_insert = text_insert.substring(0, text_insert.length - commonlength);\n              text_delete = text_delete.substring(0, text_delete.length - commonlength);\n            }\n          }\n          // Delete the offending records and add the merged ones.\n          pointer -= count_delete + count_insert;\n          diffs.splice(pointer, count_delete + count_insert);\n          if (text_delete.length) {\n            diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_DELETE, text_delete));\n            pointer++;\n          }\n          if (text_insert.length) {\n            diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_INSERT, text_insert));\n            pointer++;\n          }\n          pointer++;\n        } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n          // Merge this equality with the previous one.\n          diffs[pointer - 1][1] += diffs[pointer][1];\n          diffs.splice(pointer, 1);\n        } else {\n          pointer++;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = '';\n        text_insert = '';\n        break;\n    }\n  }\n  if (diffs[diffs.length - 1][1] === '') {\n    diffs.pop(); // Remove the dummy entry at the end.\n  }\n\n  // Second pass: look for single edits surrounded on both sides by equalities\n  // which can be shifted sideways to eliminate an equality.\n  // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n  var changes = false;\n  pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) {\n      // This is a single edit surrounded by equalities.\n      if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n        // Shift the edit over the previous equality.\n        diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length);\n        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n        diffs.splice(pointer - 1, 1);\n        changes = true;\n      } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) {\n        // Shift the edit over the next equality.\n        diffs[pointer - 1][1] += diffs[pointer + 1][1];\n        diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];\n        diffs.splice(pointer + 1, 1);\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n  // If shifts were made, the diff needs reordering and another shift sweep.\n  if (changes) {\n    this.diff_cleanupMerge(diffs);\n  }\n};\n\n/**\n * loc is a location in text1, compute and return the equivalent location in\n * text2.\n * e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {number} loc Location within text1.\n * @return {number} Location within text2.\n */\ndiff_match_patch.prototype.diff_xIndex = function (diffs, loc) {\n  var chars1 = 0;\n  var chars2 = 0;\n  var last_chars1 = 0;\n  var last_chars2 = 0;\n  var x;\n  for (x = 0; x < diffs.length; x++) {\n    if (diffs[x][0] !== DIFF_INSERT) {\n      // Equality or deletion.\n      chars1 += diffs[x][1].length;\n    }\n    if (diffs[x][0] !== DIFF_DELETE) {\n      // Equality or insertion.\n      chars2 += diffs[x][1].length;\n    }\n    if (chars1 > loc) {\n      // Overshot the location.\n      break;\n    }\n    last_chars1 = chars1;\n    last_chars2 = chars2;\n  }\n  // Was the location was deleted?\n  if (diffs.length != x && diffs[x][0] === DIFF_DELETE) {\n    return last_chars2;\n  }\n  // Add the remaining character length.\n  return last_chars2 + (loc - last_chars1);\n};\n\n/**\n * Convert a diff array into a pretty HTML report.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} HTML representation.\n */\ndiff_match_patch.prototype.diff_prettyHtml = function (diffs) {\n  var html = [];\n  var pattern_amp = /&/g;\n  var pattern_lt = /</g;\n  var pattern_gt = />/g;\n  var pattern_para = /\\n/g;\n  for (var x = 0; x < diffs.length; x++) {\n    var op = diffs[x][0]; // Operation (insert, delete, equal)\n    var data = diffs[x][1]; // Text of change.\n    var text = data.replace(pattern_amp, '&amp;').replace(pattern_lt, '&lt;').replace(pattern_gt, '&gt;').replace(pattern_para, '&para;<br>');\n    switch (op) {\n      case DIFF_INSERT:\n        html[x] = '<ins style=\"background:#e6ffe6;\">' + text + '</ins>';\n        break;\n      case DIFF_DELETE:\n        html[x] = '<del style=\"background:#ffe6e6;\">' + text + '</del>';\n        break;\n      case DIFF_EQUAL:\n        html[x] = '<span>' + text + '</span>';\n        break;\n    }\n  }\n  return html.join('');\n};\n\n/**\n * Compute and return the source text (all equalities and deletions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Source text.\n */\ndiff_match_patch.prototype.diff_text1 = function (diffs) {\n  var text = [];\n  for (var x = 0; x < diffs.length; x++) {\n    if (diffs[x][0] !== DIFF_INSERT) {\n      text[x] = diffs[x][1];\n    }\n  }\n  return text.join('');\n};\n\n/**\n * Compute and return the destination text (all equalities and insertions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Destination text.\n */\ndiff_match_patch.prototype.diff_text2 = function (diffs) {\n  var text = [];\n  for (var x = 0; x < diffs.length; x++) {\n    if (diffs[x][0] !== DIFF_DELETE) {\n      text[x] = diffs[x][1];\n    }\n  }\n  return text.join('');\n};\n\n/**\n * Compute the Levenshtein distance; the number of inserted, deleted or\n * substituted characters.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {number} Number of changes.\n */\ndiff_match_patch.prototype.diff_levenshtein = function (diffs) {\n  var levenshtein = 0;\n  var insertions = 0;\n  var deletions = 0;\n  for (var x = 0; x < diffs.length; x++) {\n    var op = diffs[x][0];\n    var data = diffs[x][1];\n    switch (op) {\n      case DIFF_INSERT:\n        insertions += data.length;\n        break;\n      case DIFF_DELETE:\n        deletions += data.length;\n        break;\n      case DIFF_EQUAL:\n        // A deletion and an insertion is one substitution.\n        levenshtein += Math.max(insertions, deletions);\n        insertions = 0;\n        deletions = 0;\n        break;\n    }\n  }\n  levenshtein += Math.max(insertions, deletions);\n  return levenshtein;\n};\n\n/**\n * Crush the diff into an encoded string which describes the operations\n * required to transform text1 into text2.\n * E.g. =3\\t-2\\t+ing  -> Keep 3 chars, delete 2 chars, insert 'ing'.\n * Operations are tab-separated.  Inserted text is escaped using %xx notation.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Delta text.\n */\ndiff_match_patch.prototype.diff_toDelta = function (diffs) {\n  var text = [];\n  for (var x = 0; x < diffs.length; x++) {\n    switch (diffs[x][0]) {\n      case DIFF_INSERT:\n        text[x] = '+' + encodeURI(diffs[x][1]);\n        break;\n      case DIFF_DELETE:\n        text[x] = '-' + diffs[x][1].length;\n        break;\n      case DIFF_EQUAL:\n        text[x] = '=' + diffs[x][1].length;\n        break;\n    }\n  }\n  return text.join('\\t').replace(/%20/g, ' ');\n};\n\n/**\n * Given the original text1, and an encoded string which describes the\n * operations required to transform text1 into text2, compute the full diff.\n * @param {string} text1 Source string for the diff.\n * @param {string} delta Delta text.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.diff_fromDelta = function (text1, delta) {\n  var diffs = [];\n  var diffsLength = 0; // Keeping our own length var is faster in JS.\n  var pointer = 0; // Cursor in text1\n  var tokens = delta.split(/\\t/g);\n  for (var x = 0; x < tokens.length; x++) {\n    // Each token begins with a one character parameter which specifies the\n    // operation of this token (delete, insert, equality).\n    var param = tokens[x].substring(1);\n    switch (tokens[x].charAt(0)) {\n      case '+':\n        try {\n          diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_INSERT, decodeURI(param));\n        } catch (ex) {\n          // Malformed URI sequence.\n          throw new Error('Illegal escape in diff_fromDelta: ' + param);\n        }\n        break;\n      case '-':\n      // Fall through.\n      case '=':\n        var n = parseInt(param, 10);\n        if (isNaN(n) || n < 0) {\n          throw new Error('Invalid number in diff_fromDelta: ' + param);\n        }\n        var text = text1.substring(pointer, pointer += n);\n        if (tokens[x].charAt(0) == '=') {\n          diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_EQUAL, text);\n        } else {\n          diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_DELETE, text);\n        }\n        break;\n      default:\n        // Blank tokens are ok (from a trailing \\t).\n        // Anything else is an error.\n        if (tokens[x]) {\n          throw new Error('Invalid diff operation in diff_fromDelta: ' + tokens[x]);\n        }\n    }\n  }\n  if (pointer != text1.length) {\n    throw new Error('Delta length (' + pointer + ') does not equal source text length (' + text1.length + ').');\n  }\n  return diffs;\n};\n\n//  MATCH FUNCTIONS\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc'.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n */\ndiff_match_patch.prototype.match_main = function (text, pattern, loc) {\n  // Check for null inputs.\n  if (text == null || pattern == null || loc == null) {\n    throw new Error('Null input. (match_main)');\n  }\n  loc = Math.max(0, Math.min(loc, text.length));\n  if (text == pattern) {\n    // Shortcut (potentially not guaranteed by the algorithm)\n    return 0;\n  } else if (!text.length) {\n    // Nothing to match.\n    return -1;\n  } else if (text.substring(loc, loc + pattern.length) == pattern) {\n    // Perfect match at the perfect spot!  (Includes case of null pattern)\n    return loc;\n  } else {\n    // Do a fuzzy compare.\n    return this.match_bitap_(text, pattern, loc);\n  }\n};\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc' using the\n * Bitap algorithm.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n * @private\n */\ndiff_match_patch.prototype.match_bitap_ = function (text, pattern, loc) {\n  if (pattern.length > this.Match_MaxBits) {\n    throw new Error('Pattern too long for this browser.');\n  }\n\n  // Initialise the alphabet.\n  var s = this.match_alphabet_(pattern);\n  var dmp = this; // 'this' becomes 'window' in a closure.\n\n  /**\n   * Compute and return the score for a match with e errors and x location.\n   * Accesses loc and pattern through being a closure.\n   * @param {number} e Number of errors in match.\n   * @param {number} x Location of match.\n   * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n   * @private\n   */\n  function match_bitapScore_(e, x) {\n    var accuracy = e / pattern.length;\n    var proximity = Math.abs(loc - x);\n    if (!dmp.Match_Distance) {\n      // Dodge divide by zero error.\n      return proximity ? 1.0 : accuracy;\n    }\n    return accuracy + proximity / dmp.Match_Distance;\n  }\n\n  // Highest score beyond which we give up.\n  var score_threshold = this.Match_Threshold;\n  // Is there a nearby exact match? (speedup)\n  var best_loc = text.indexOf(pattern, loc);\n  if (best_loc != -1) {\n    score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n    // What about in the other direction? (speedup)\n    best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n    if (best_loc != -1) {\n      score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n    }\n  }\n\n  // Initialise the bit arrays.\n  var matchmask = 1 << pattern.length - 1;\n  best_loc = -1;\n  var bin_min, bin_mid;\n  var bin_max = pattern.length + text.length;\n  var last_rd;\n  for (var d = 0; d < pattern.length; d++) {\n    // Scan for the best match; each iteration allows for one more error.\n    // Run a binary search to determine how far from 'loc' we can stray at this\n    // error level.\n    bin_min = 0;\n    bin_mid = bin_max;\n    while (bin_min < bin_mid) {\n      if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n        bin_min = bin_mid;\n      } else {\n        bin_max = bin_mid;\n      }\n      bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n    }\n    // Use the result from this iteration as the maximum for the next.\n    bin_max = bin_mid;\n    var start = Math.max(1, loc - bin_mid + 1);\n    var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n    var rd = Array(finish + 2);\n    rd[finish + 1] = (1 << d) - 1;\n    for (var j = finish; j >= start; j--) {\n      // The alphabet (s) is a sparse hash, so the following line generates\n      // warnings.\n      var charMatch = s[text.charAt(j - 1)];\n      if (d === 0) {\n        // First pass: exact match.\n        rd[j] = (rd[j + 1] << 1 | 1) & charMatch;\n      } else {\n        // Subsequent passes: fuzzy match.\n        rd[j] = (rd[j + 1] << 1 | 1) & charMatch | ((last_rd[j + 1] | last_rd[j]) << 1 | 1) | last_rd[j + 1];\n      }\n      if (rd[j] & matchmask) {\n        var score = match_bitapScore_(d, j - 1);\n        // This match will almost certainly be better than any existing match.\n        // But check anyway.\n        if (score <= score_threshold) {\n          // Told you so.\n          score_threshold = score;\n          best_loc = j - 1;\n          if (best_loc > loc) {\n            // When passing loc, don't exceed our current distance from loc.\n            start = Math.max(1, 2 * loc - best_loc);\n          } else {\n            // Already passed loc, downhill from here on in.\n            break;\n          }\n        }\n      }\n    }\n    // No hope for a (better) match at greater error levels.\n    if (match_bitapScore_(d + 1, loc) > score_threshold) {\n      break;\n    }\n    last_rd = rd;\n  }\n  return best_loc;\n};\n\n/**\n * Initialise the alphabet for the Bitap algorithm.\n * @param {string} pattern The text to encode.\n * @return {!Object} Hash of character locations.\n * @private\n */\ndiff_match_patch.prototype.match_alphabet_ = function (pattern) {\n  var s = {};\n  for (var i = 0; i < pattern.length; i++) {\n    s[pattern.charAt(i)] = 0;\n  }\n  for (var i = 0; i < pattern.length; i++) {\n    s[pattern.charAt(i)] |= 1 << pattern.length - i - 1;\n  }\n  return s;\n};\n\n//  PATCH FUNCTIONS\n\n/**\n * Increase the context until it is unique,\n * but don't let the pattern expand beyond Match_MaxBits.\n * @param {!diff_match_patch.patch_obj} patch The patch to grow.\n * @param {string} text Source text.\n * @private\n */\ndiff_match_patch.prototype.patch_addContext_ = function (patch, text) {\n  if (text.length == 0) {\n    return;\n  }\n  if (patch.start2 === null) {\n    throw Error('patch not initialized');\n  }\n  var pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n  var padding = 0;\n\n  // Look for the first and last matches of pattern in text.  If two different\n  // matches are found, increase the pattern length.\n  while (text.indexOf(pattern) != text.lastIndexOf(pattern) && pattern.length < this.Match_MaxBits - this.Patch_Margin - this.Patch_Margin) {\n    padding += this.Patch_Margin;\n    pattern = text.substring(patch.start2 - padding, patch.start2 + patch.length1 + padding);\n  }\n  // Add one chunk for good luck.\n  padding += this.Patch_Margin;\n\n  // Add the prefix.\n  var prefix = text.substring(patch.start2 - padding, patch.start2);\n  if (prefix) {\n    patch.diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, prefix));\n  }\n  // Add the suffix.\n  var suffix = text.substring(patch.start2 + patch.length1, patch.start2 + patch.length1 + padding);\n  if (suffix) {\n    patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, suffix));\n  }\n\n  // Roll back the start points.\n  patch.start1 -= prefix.length;\n  patch.start2 -= prefix.length;\n  // Extend the lengths.\n  patch.length1 += prefix.length + suffix.length;\n  patch.length2 += prefix.length + suffix.length;\n};\n\n/**\n * Compute a list of patches to turn text1 into text2.\n * Use diffs if provided, otherwise compute it ourselves.\n * There are four ways to call this function, depending on what data is\n * available to the caller:\n * Method 1:\n * a = text1, b = text2\n * Method 2:\n * a = diffs\n * Method 3 (optimal):\n * a = text1, b = diffs\n * Method 4 (deprecated, use method 3):\n * a = text1, b = text2, c = diffs\n *\n * @param {string|!Array.<!diff_match_patch.Diff>} a text1 (methods 1,3,4) or\n * Array of diff tuples for text1 to text2 (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>=} opt_b text2 (methods 1,4) or\n * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>=} opt_c Array of diff tuples\n * for text1 to text2 (method 4) or undefined (methods 1,2,3).\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_make = function (a, opt_b, opt_c) {\n  var text1, diffs;\n  if (typeof a == 'string' && typeof opt_b == 'string' && typeof opt_c == 'undefined') {\n    // Method 1: text1, text2\n    // Compute diffs from text1 and text2.\n    text1 = /** @type {string} */a;\n    diffs = this.diff_main(text1, /** @type {string} */opt_b, true);\n    if (diffs.length > 2) {\n      this.diff_cleanupSemantic(diffs);\n      this.diff_cleanupEfficiency(diffs);\n    }\n  } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' && typeof opt_c == 'undefined') {\n    // Method 2: diffs\n    // Compute text1 from diffs.\n    diffs = /** @type {!Array.<!diff_match_patch.Diff>} */a;\n    text1 = this.diff_text1(diffs);\n  } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' && typeof opt_c == 'undefined') {\n    // Method 3: text1, diffs\n    text1 = /** @type {string} */a;\n    diffs = /** @type {!Array.<!diff_match_patch.Diff>} */opt_b;\n  } else if (typeof a == 'string' && typeof opt_b == 'string' && opt_c && typeof opt_c == 'object') {\n    // Method 4: text1, text2, diffs\n    // text2 is not used.\n    text1 = /** @type {string} */a;\n    diffs = /** @type {!Array.<!diff_match_patch.Diff>} */opt_c;\n  } else {\n    throw new Error('Unknown call format to patch_make.');\n  }\n  if (diffs.length === 0) {\n    return []; // Get rid of the null case.\n  }\n  var patches = [];\n  var patch = new diff_match_patch.patch_obj();\n  var patchDiffLength = 0; // Keeping our own length var is faster in JS.\n  var char_count1 = 0; // Number of characters into the text1 string.\n  var char_count2 = 0; // Number of characters into the text2 string.\n  // Start with text1 (prepatch_text) and apply the diffs until we arrive at\n  // text2 (postpatch_text).  We recreate the patches one by one to determine\n  // context info.\n  var prepatch_text = text1;\n  var postpatch_text = text1;\n  for (var x = 0; x < diffs.length; x++) {\n    var diff_type = diffs[x][0];\n    var diff_text = diffs[x][1];\n    if (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n      // A new patch starts here.\n      patch.start1 = char_count1;\n      patch.start2 = char_count2;\n    }\n    switch (diff_type) {\n      case DIFF_INSERT:\n        patch.diffs[patchDiffLength++] = diffs[x];\n        patch.length2 += diff_text.length;\n        postpatch_text = postpatch_text.substring(0, char_count2) + diff_text + postpatch_text.substring(char_count2);\n        break;\n      case DIFF_DELETE:\n        patch.length1 += diff_text.length;\n        patch.diffs[patchDiffLength++] = diffs[x];\n        postpatch_text = postpatch_text.substring(0, char_count2) + postpatch_text.substring(char_count2 + diff_text.length);\n        break;\n      case DIFF_EQUAL:\n        if (diff_text.length <= 2 * this.Patch_Margin && patchDiffLength && diffs.length != x + 1) {\n          // Small equality inside a patch.\n          patch.diffs[patchDiffLength++] = diffs[x];\n          patch.length1 += diff_text.length;\n          patch.length2 += diff_text.length;\n        } else if (diff_text.length >= 2 * this.Patch_Margin) {\n          // Time for a new patch.\n          if (patchDiffLength) {\n            this.patch_addContext_(patch, prepatch_text);\n            patches.push(patch);\n            patch = new diff_match_patch.patch_obj();\n            patchDiffLength = 0;\n            // Unlike Unidiff, our patch lists have a rolling context.\n            // https://github.com/google/diff-match-patch/wiki/Unidiff\n            // Update prepatch text & pos to reflect the application of the\n            // just completed patch.\n            prepatch_text = postpatch_text;\n            char_count1 = char_count2;\n          }\n        }\n        break;\n    }\n\n    // Update the current character count.\n    if (diff_type !== DIFF_INSERT) {\n      char_count1 += diff_text.length;\n    }\n    if (diff_type !== DIFF_DELETE) {\n      char_count2 += diff_text.length;\n    }\n  }\n  // Pick up the leftover patch if not empty.\n  if (patchDiffLength) {\n    this.patch_addContext_(patch, prepatch_text);\n    patches.push(patch);\n  }\n  return patches;\n};\n\n/**\n * Given an array of patches, return another array that is identical.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_deepCopy = function (patches) {\n  // Making deep copies is hard in JavaScript.\n  var patchesCopy = [];\n  for (var x = 0; x < patches.length; x++) {\n    var patch = patches[x];\n    var patchCopy = new diff_match_patch.patch_obj();\n    patchCopy.diffs = [];\n    for (var y = 0; y < patch.diffs.length; y++) {\n      patchCopy.diffs[y] = new diff_match_patch.Diff(patch.diffs[y][0], patch.diffs[y][1]);\n    }\n    patchCopy.start1 = patch.start1;\n    patchCopy.start2 = patch.start2;\n    patchCopy.length1 = patch.length1;\n    patchCopy.length2 = patch.length2;\n    patchesCopy[x] = patchCopy;\n  }\n  return patchesCopy;\n};\n\n/**\n * Merge a set of patches onto the text.  Return a patched text, as well\n * as a list of true/false values indicating which patches were applied.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @param {string} text Old text.\n * @return {!Array.<string|!Array.<boolean>>} Two element Array, containing the\n *      new text and an array of boolean values.\n */\ndiff_match_patch.prototype.patch_apply = function (patches, text) {\n  if (patches.length == 0) {\n    return [text, []];\n  }\n\n  // Deep copy the patches so that no changes are made to originals.\n  patches = this.patch_deepCopy(patches);\n  var nullPadding = this.patch_addPadding(patches);\n  text = nullPadding + text + nullPadding;\n  this.patch_splitMax(patches);\n  // delta keeps track of the offset between the expected and actual location\n  // of the previous patch.  If there are patches expected at positions 10 and\n  // 20, but the first patch was found at 12, delta is 2 and the second patch\n  // has an effective expected position of 22.\n  var delta = 0;\n  var results = [];\n  for (var x = 0; x < patches.length; x++) {\n    var expected_loc = patches[x].start2 + delta;\n    var text1 = this.diff_text1(patches[x].diffs);\n    var start_loc;\n    var end_loc = -1;\n    if (text1.length > this.Match_MaxBits) {\n      // patch_splitMax will only provide an oversized pattern in the case of\n      // a monster delete.\n      start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits), expected_loc);\n      if (start_loc != -1) {\n        end_loc = this.match_main(text, text1.substring(text1.length - this.Match_MaxBits), expected_loc + text1.length - this.Match_MaxBits);\n        if (end_loc == -1 || start_loc >= end_loc) {\n          // Can't find valid trailing context.  Drop this patch.\n          start_loc = -1;\n        }\n      }\n    } else {\n      start_loc = this.match_main(text, text1, expected_loc);\n    }\n    if (start_loc == -1) {\n      // No match found.  :(\n      results[x] = false;\n      // Subtract the delta for this failed patch from subsequent patches.\n      delta -= patches[x].length2 - patches[x].length1;\n    } else {\n      // Found a match.  :)\n      results[x] = true;\n      delta = start_loc - expected_loc;\n      var text2;\n      if (end_loc == -1) {\n        text2 = text.substring(start_loc, start_loc + text1.length);\n      } else {\n        text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n      }\n      if (text1 == text2) {\n        // Perfect match, just shove the replacement text in.\n        text = text.substring(0, start_loc) + this.diff_text2(patches[x].diffs) + text.substring(start_loc + text1.length);\n      } else {\n        // Imperfect match.  Run a diff to get a framework of equivalent\n        // indices.\n        var diffs = this.diff_main(text1, text2, false);\n        if (text1.length > this.Match_MaxBits && this.diff_levenshtein(diffs) / text1.length > this.Patch_DeleteThreshold) {\n          // The end points match, but the content is unacceptably bad.\n          results[x] = false;\n        } else {\n          this.diff_cleanupSemanticLossless(diffs);\n          var index1 = 0;\n          var index2;\n          for (var y = 0; y < patches[x].diffs.length; y++) {\n            var mod = patches[x].diffs[y];\n            if (mod[0] !== DIFF_EQUAL) {\n              index2 = this.diff_xIndex(diffs, index1);\n            }\n            if (mod[0] === DIFF_INSERT) {\n              // Insertion\n              text = text.substring(0, start_loc + index2) + mod[1] + text.substring(start_loc + index2);\n            } else if (mod[0] === DIFF_DELETE) {\n              // Deletion\n              text = text.substring(0, start_loc + index2) + text.substring(start_loc + this.diff_xIndex(diffs, index1 + mod[1].length));\n            }\n            if (mod[0] !== DIFF_DELETE) {\n              index1 += mod[1].length;\n            }\n          }\n        }\n      }\n    }\n  }\n  // Strip the padding off.\n  text = text.substring(nullPadding.length, text.length - nullPadding.length);\n  return [text, results];\n};\n\n/**\n * Add some padding on text start and end so that edges can match something.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} The padding string added to each side.\n */\ndiff_match_patch.prototype.patch_addPadding = function (patches) {\n  var paddingLength = this.Patch_Margin;\n  var nullPadding = '';\n  for (var x = 1; x <= paddingLength; x++) {\n    nullPadding += String.fromCharCode(x);\n  }\n\n  // Bump all the patches forward.\n  for (var x = 0; x < patches.length; x++) {\n    patches[x].start1 += paddingLength;\n    patches[x].start2 += paddingLength;\n  }\n\n  // Add some padding on start of first diff.\n  var patch = patches[0];\n  var diffs = patch.diffs;\n  if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n    // Add nullPadding equality.\n    diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n    patch.start1 -= paddingLength; // Should be 0.\n    patch.start2 -= paddingLength; // Should be 0.\n    patch.length1 += paddingLength;\n    patch.length2 += paddingLength;\n  } else if (paddingLength > diffs[0][1].length) {\n    // Grow first equality.\n    var extraLength = paddingLength - diffs[0][1].length;\n    diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n    patch.start1 -= extraLength;\n    patch.start2 -= extraLength;\n    patch.length1 += extraLength;\n    patch.length2 += extraLength;\n  }\n\n  // Add some padding on end of last diff.\n  patch = patches[patches.length - 1];\n  diffs = patch.diffs;\n  if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n    // Add nullPadding equality.\n    diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n    patch.length1 += paddingLength;\n    patch.length2 += paddingLength;\n  } else if (paddingLength > diffs[diffs.length - 1][1].length) {\n    // Grow last equality.\n    var extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n    diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n    patch.length1 += extraLength;\n    patch.length2 += extraLength;\n  }\n  return nullPadding;\n};\n\n/**\n * Look through the patches and break up any which are longer than the maximum\n * limit of the match algorithm.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_splitMax = function (patches) {\n  var patch_size = this.Match_MaxBits;\n  for (var x = 0; x < patches.length; x++) {\n    if (patches[x].length1 <= patch_size) {\n      continue;\n    }\n    var bigpatch = patches[x];\n    // Remove the big old patch.\n    patches.splice(x--, 1);\n    var start1 = bigpatch.start1;\n    var start2 = bigpatch.start2;\n    var precontext = '';\n    while (bigpatch.diffs.length !== 0) {\n      // Create one of several smaller patches.\n      var patch = new diff_match_patch.patch_obj();\n      var empty = true;\n      patch.start1 = start1 - precontext.length;\n      patch.start2 = start2 - precontext.length;\n      if (precontext !== '') {\n        patch.length1 = patch.length2 = precontext.length;\n        patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, precontext));\n      }\n      while (bigpatch.diffs.length !== 0 && patch.length1 < patch_size - this.Patch_Margin) {\n        var diff_type = bigpatch.diffs[0][0];\n        var diff_text = bigpatch.diffs[0][1];\n        if (diff_type === DIFF_INSERT) {\n          // Insertions are harmless.\n          patch.length2 += diff_text.length;\n          start2 += diff_text.length;\n          patch.diffs.push(bigpatch.diffs.shift());\n          empty = false;\n        } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 && patch.diffs[0][0] == DIFF_EQUAL && diff_text.length > 2 * patch_size) {\n          // This is a large deletion.  Let it pass in one chunk.\n          patch.length1 += diff_text.length;\n          start1 += diff_text.length;\n          empty = false;\n          patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n          bigpatch.diffs.shift();\n        } else {\n          // Deletion or equality.  Only take as much as we can stomach.\n          diff_text = diff_text.substring(0, patch_size - patch.length1 - this.Patch_Margin);\n          patch.length1 += diff_text.length;\n          start1 += diff_text.length;\n          if (diff_type === DIFF_EQUAL) {\n            patch.length2 += diff_text.length;\n            start2 += diff_text.length;\n          } else {\n            empty = false;\n          }\n          patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n          if (diff_text == bigpatch.diffs[0][1]) {\n            bigpatch.diffs.shift();\n          } else {\n            bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diff_text.length);\n          }\n        }\n      }\n      // Compute the head context for the next patch.\n      precontext = this.diff_text2(patch.diffs);\n      precontext = precontext.substring(precontext.length - this.Patch_Margin);\n      // Append the end context for this patch.\n      var postcontext = this.diff_text1(bigpatch.diffs).substring(0, this.Patch_Margin);\n      if (postcontext !== '') {\n        patch.length1 += postcontext.length;\n        patch.length2 += postcontext.length;\n        if (patch.diffs.length !== 0 && patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) {\n          patch.diffs[patch.diffs.length - 1][1] += postcontext;\n        } else {\n          patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, postcontext));\n        }\n      }\n      if (!empty) {\n        patches.splice(++x, 0, patch);\n      }\n    }\n  }\n};\n\n/**\n * Take a list of patches and return a textual representation.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} Text representation of patches.\n */\ndiff_match_patch.prototype.patch_toText = function (patches) {\n  var text = [];\n  for (var x = 0; x < patches.length; x++) {\n    text[x] = patches[x];\n  }\n  return text.join('');\n};\n\n/**\n * Parse a textual representation of patches and return a list of Patch objects.\n * @param {string} textline Text representation of patches.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.patch_fromText = function (textline) {\n  var patches = [];\n  if (!textline) {\n    return patches;\n  }\n  var text = textline.split('\\n');\n  var textPointer = 0;\n  var patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\n  while (textPointer < text.length) {\n    var m = text[textPointer].match(patchHeader);\n    if (!m) {\n      throw new Error('Invalid patch string: ' + text[textPointer]);\n    }\n    var patch = new diff_match_patch.patch_obj();\n    patches.push(patch);\n    patch.start1 = parseInt(m[1], 10);\n    if (m[2] === '') {\n      patch.start1--;\n      patch.length1 = 1;\n    } else if (m[2] == '0') {\n      patch.length1 = 0;\n    } else {\n      patch.start1--;\n      patch.length1 = parseInt(m[2], 10);\n    }\n    patch.start2 = parseInt(m[3], 10);\n    if (m[4] === '') {\n      patch.start2--;\n      patch.length2 = 1;\n    } else if (m[4] == '0') {\n      patch.length2 = 0;\n    } else {\n      patch.start2--;\n      patch.length2 = parseInt(m[4], 10);\n    }\n    textPointer++;\n    while (textPointer < text.length) {\n      var sign = text[textPointer].charAt(0);\n      try {\n        var line = decodeURI(text[textPointer].substring(1));\n      } catch (ex) {\n        // Malformed URI sequence.\n        throw new Error('Illegal escape in patch_fromText: ' + line);\n      }\n      if (sign == '-') {\n        // Deletion.\n        patch.diffs.push(new diff_match_patch.Diff(DIFF_DELETE, line));\n      } else if (sign == '+') {\n        // Insertion.\n        patch.diffs.push(new diff_match_patch.Diff(DIFF_INSERT, line));\n      } else if (sign == ' ') {\n        // Minor equality.\n        patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, line));\n      } else if (sign == '@') {\n        // Start of next patch.\n        break;\n      } else if (sign === '') {\n        // Blank line?  Whatever.\n      } else {\n        // WTF?\n        throw new Error('Invalid patch mode \"' + sign + '\" in: ' + line);\n      }\n      textPointer++;\n    }\n  }\n  return patches;\n};\n\n/**\n * Class representing one patch operation.\n * @constructor\n */\ndiff_match_patch.patch_obj = function () {\n  /** @type {!Array.<!diff_match_patch.Diff>} */\n  this.diffs = [];\n  /** @type {?number} */\n  this.start1 = null;\n  /** @type {?number} */\n  this.start2 = null;\n  /** @type {number} */\n  this.length1 = 0;\n  /** @type {number} */\n  this.length2 = 0;\n};\n\n/**\n * Emulate GNU diff's format.\n * Header: @@ -382,8 +481,9 @@\n * Indices are printed as 1-based, not 0-based.\n * @return {string} The GNU diff string.\n */\ndiff_match_patch.patch_obj.prototype.toString = function () {\n  var coords1, coords2;\n  if (this.length1 === 0) {\n    coords1 = this.start1 + ',0';\n  } else if (this.length1 == 1) {\n    coords1 = this.start1 + 1;\n  } else {\n    coords1 = this.start1 + 1 + ',' + this.length1;\n  }\n  if (this.length2 === 0) {\n    coords2 = this.start2 + ',0';\n  } else if (this.length2 == 1) {\n    coords2 = this.start2 + 1;\n  } else {\n    coords2 = this.start2 + 1 + ',' + this.length2;\n  }\n  var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\\n'];\n  var op;\n  // Escape the body of the patch with %xx notation.\n  for (var x = 0; x < this.diffs.length; x++) {\n    switch (this.diffs[x][0]) {\n      case DIFF_INSERT:\n        op = '+';\n        break;\n      case DIFF_DELETE:\n        op = '-';\n        break;\n      case DIFF_EQUAL:\n        op = ' ';\n        break;\n    }\n    text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\\n';\n  }\n  return text.join('').replace(/%20/g, ' ');\n};\n\n// The following export code was added by @ForbesLindesay\nmodule.exports = diff_match_patch;\nmodule.exports.diff_match_patch = diff_match_patch;\nmodule.exports.DIFF_DELETE = DIFF_DELETE;\nmodule.exports.DIFF_INSERT = DIFF_INSERT;\nmodule.exports.DIFF_EQUAL = DIFF_EQUAL;\n\n/***/ }),\n\n/***/ 600:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   h: () => (/* binding */ merge)\n/* harmony export */ });\nvar merge = function () {\n    var options = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        options[_i] = arguments[_i];\n    }\n    var target = {};\n    var merger = function (obj) {\n        for (var prop in obj) {\n            if (obj.hasOwnProperty(prop)) {\n                if (Object.prototype.toString.call(obj[prop]) === \"[object Object]\") {\n                    target[prop] = merge(target[prop], obj[prop]);\n                }\n                else {\n                    target[prop] = obj[prop];\n                }\n            }\n        }\n    };\n    for (var i = 0; i < options.length; i++) {\n        merger(options[i]);\n    }\n    return target;\n};\n\n\n/***/ }),\n\n/***/ 625:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   $: () => (/* binding */ highlightRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _util_addStyle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10);\n\n\n\nvar highlightRender = function (hljsOption, element, cdn) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var style = hljsOption.style;\n    if (!_constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CODE_THEME.includes(style)) {\n        style = \"github\";\n    }\n    var vditorHljsStyle = document.getElementById(\"vditorHljsStyle\");\n    var href = \"\".concat(cdn, \"/dist/js/highlight.js/styles/\").concat(style, \".min.css\");\n    if (vditorHljsStyle && vditorHljsStyle.getAttribute('href') !== href) {\n        vditorHljsStyle.remove();\n    }\n    (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_1__/* .addStyle */ .T)(\"\".concat(cdn, \"/dist/js/highlight.js/styles/\").concat(style, \".min.css\"), \"vditorHljsStyle\");\n    if (hljsOption.enable === false) {\n        return;\n    }\n    var codes = element.querySelectorAll(\"pre > code\");\n    if (codes.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/highlight.js/highlight.min.js?v=11.7.0\"), \"vditorHljsScript\").then(function () {\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/highlight.js/third-languages.js?v=1.0.1\"), \"vditorHljsThirdScript\").then(function () {\n            element.querySelectorAll(\"pre > code\").forEach(function (block) {\n                // ir & wysiwyg 区域不渲染\n                if (block.parentElement.classList.contains(\"vditor-ir__marker--pre\") ||\n                    block.parentElement.classList.contains(\"vditor-wysiwyg__pre\")) {\n                    return;\n                }\n                if (block.classList.contains(\"language-mermaid\") || block.classList.contains(\"language-flowchart\") ||\n                    block.classList.contains(\"language-echarts\") || block.classList.contains(\"language-mindmap\") ||\n                    block.classList.contains(\"language-plantuml\") || block.classList.contains(\"language-smiles\") ||\n                    block.classList.contains(\"language-abc\") || block.classList.contains(\"language-graphviz\") ||\n                    block.classList.contains(\"language-math\")) {\n                    return;\n                }\n                if (hljsOption.defaultLang !== \"\" && block.className.indexOf(\"language-\") === -1) {\n                    block.classList.add(\"language-\" + hljsOption.defaultLang);\n                }\n                var language = block.className.replace(\"language-\", \"\");\n                if (!window.hljs.getLanguage(language)) {\n                    language = \"plaintext\";\n                }\n                block.innerHTML = window.hljs.highlight(block.textContent, {\n                    language: language,\n                    ignoreIllegals: true\n                }).value;\n                block.classList.add(\"hljs\");\n                if (!hljsOption.lineNumber) {\n                    return;\n                }\n                block.classList.add(\"vditor-linenumber\");\n                var linenNumberTemp = block.querySelector(\".vditor-linenumber__temp\");\n                if (!linenNumberTemp) {\n                    linenNumberTemp = document.createElement(\"div\");\n                    linenNumberTemp.className = \"vditor-linenumber__temp\";\n                    block.insertAdjacentElement(\"beforeend\", linenNumberTemp);\n                }\n                var whiteSpace = getComputedStyle(block).whiteSpace;\n                var isSoftWrap = false;\n                if (whiteSpace === \"pre-wrap\" || whiteSpace === \"pre-line\") {\n                    isSoftWrap = true;\n                }\n                var lineNumberHTML = \"\";\n                var lineList = block.textContent.split(/\\r\\n|\\r|\\n/g);\n                lineList.pop();\n                lineList.map(function (line) {\n                    var lineHeight = \"\";\n                    if (isSoftWrap) {\n                        linenNumberTemp.textContent = line || \"\\n\";\n                        lineHeight = \" style=\\\"height:\".concat(linenNumberTemp.getBoundingClientRect().height, \"px\\\"\");\n                    }\n                    lineNumberHTML += \"<span\".concat(lineHeight, \"></span>\");\n                });\n                linenNumberTemp.style.display = \"none\";\n                lineNumberHTML = \"<span class=\\\"vditor-linenumber__rows\\\">\".concat(lineNumberHTML, \"</span>\");\n                block.insertAdjacentHTML(\"beforeend\", lineNumberHTML);\n            });\n        });\n    });\n};\n\n\n/***/ }),\n\n/***/ 649:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   o: () => (/* binding */ previewImage)\n/* harmony export */ });\nvar previewImage = function (oldImgElement, lang, theme) {\n    if (lang === void 0) { lang = \"zh_CN\"; }\n    if (theme === void 0) { theme = \"classic\"; }\n    var oldImgRect = oldImgElement.getBoundingClientRect();\n    var height = 36;\n    document.body.insertAdjacentHTML(\"beforeend\", \"<div class=\\\"vditor vditor-img\".concat(theme === \"dark\" ? \" vditor--dark\" : \"\", \"\\\">\\n    <div class=\\\"vditor-img__bar\\\">\\n      <span class=\\\"vditor-img__btn\\\" data-deg=\\\"0\\\">\\n        <svg><use xlink:href=\\\"#vditor-icon-redo\\\"></use></svg>\\n        \").concat(window.VditorI18n.spin, \"\\n      </span>\\n      <span class=\\\"vditor-img__btn\\\"  onclick=\\\"this.parentElement.parentElement.outerHTML = '';document.body.style.overflow = ''\\\">\\n        <svg><use xlink:href=\\\"#vditor-icon-close\\\"></use></svg>\\n        \").concat(window.VditorI18n.close, \"\\n      </span>\\n    </div>\\n    <div class=\\\"vditor-img__img\\\" onclick=\\\"this.parentElement.outerHTML = '';document.body.style.overflow = ''\\\">\\n      <img style=\\\"width: \").concat(oldImgElement.width, \"px;height:\").concat(oldImgElement.height, \"px;transform: translate3d(\").concat(oldImgRect.left, \"px, \").concat(oldImgRect.top - height, \"px, 0)\\\" src=\\\"\").concat(oldImgElement.getAttribute(\"src\"), \"\\\">\\n    </div>\\n</div>\"));\n    document.body.style.overflow = \"hidden\";\n    // 图片从原始位置移动到预览正中间的动画效果\n    var imgElement = document.querySelector(\".vditor-img img\");\n    var translate3d = \"translate3d(\".concat(Math.max(0, window.innerWidth - oldImgElement.naturalWidth) / 2, \"px, \").concat(Math.max(0, window.innerHeight - height - oldImgElement.naturalHeight) / 2, \"px, 0)\");\n    setTimeout(function () {\n        imgElement.setAttribute(\"style\", \"transition: transform .3s ease-in-out;transform: \".concat(translate3d));\n        setTimeout(function () {\n            imgElement.parentElement.scrollTo((imgElement.parentElement.scrollWidth - imgElement.parentElement.clientWidth) / 2, (imgElement.parentElement.scrollHeight - imgElement.parentElement.clientHeight) / 2);\n        }, 400);\n    });\n    // 旋转\n    var btnElement = document.querySelector(\".vditor-img__btn\");\n    btnElement.addEventListener(\"click\", function () {\n        var deg = parseInt(btnElement.getAttribute(\"data-deg\"), 10) + 90;\n        if ((deg / 90) % 2 === 1 && oldImgElement.naturalWidth > imgElement.parentElement.clientHeight) {\n            imgElement.style.transform = \"translate3d(\".concat(Math.max(0, window.innerWidth - oldImgElement.naturalWidth) / 2, \"px, \").concat(oldImgElement.naturalWidth / 2 - oldImgElement.naturalHeight / 2, \"px, 0) rotateZ(\").concat(deg, \"deg)\");\n        }\n        else {\n            imgElement.style.transform = \"\".concat(translate3d, \" rotateZ(\").concat(deg, \"deg)\");\n        }\n        btnElement.setAttribute(\"data-deg\", deg.toString());\n        setTimeout(function () {\n            imgElement.parentElement.scrollTo((imgElement.parentElement.scrollWidth - imgElement.parentElement.clientWidth) / 2, (imgElement.parentElement.scrollHeight - imgElement.parentElement.clientHeight) / 2);\n        }, 400);\n    });\n};\n\n\n/***/ }),\n\n/***/ 667:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   c: () => (/* binding */ hasClosestByHeadings),\n/* harmony export */   f: () => (/* binding */ hasClosestByTag)\n/* harmony export */ });\n// NOTE: 减少 method.ts 打包，故从 hasClosest.ts 中拆分\nvar hasClosestByTag = function (element, nodeName) {\n    if (!element) {\n        return false;\n    }\n    if (element.nodeType === 3) {\n        element = element.parentElement;\n    }\n    var e = element;\n    var isClosest = false;\n    while (e && !isClosest && !e.classList.contains(\"vditor-reset\")) {\n        if (e.nodeName.indexOf(nodeName) === 0) {\n            isClosest = true;\n        }\n        else {\n            e = e.parentElement;\n        }\n    }\n    return isClosest && e;\n};\nvar hasClosestByHeadings = function (element) {\n    var headingElement = hasClosestByTag(element, \"H\");\n    if (headingElement && headingElement.tagName.length === 2 && headingElement.tagName !== \"HR\") {\n        return headingElement;\n    }\n    return false;\n};\n\n\n/***/ }),\n\n/***/ 691:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   N: () => (/* binding */ outlineRender)\n/* harmony export */ });\n/* harmony import */ var _util_hasClosestByHeadings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(667);\n/* harmony import */ var _mathRender__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(947);\n\n\nvar outlineRender = function (contentElement, targetElement, vditor) {\n    var wrapperElement = contentElement;\n    if (contentElement.children.length > 0) {\n        var firstElementChild = contentElement.children[0];\n        if (firstElementChild.classList.contains('vditor-reset')) {\n            contentElement = firstElementChild;\n        }\n    }\n    var tocHTML = \"\";\n    var ids = [];\n    Array.from(contentElement.children).forEach(function (item, index) {\n        if ((0,_util_hasClosestByHeadings__WEBPACK_IMPORTED_MODULE_1__/* .hasClosestByHeadings */ .c)(item)) {\n            if (vditor) {\n                var lastIndex = item.id.lastIndexOf(\"_\");\n                item.id = item.id.substring(0, lastIndex === -1 ? undefined : lastIndex) + \"_\" + index;\n            }\n            ids.push(item.id);\n            tocHTML += item.outerHTML.replace(\"<wbr>\", \"\");\n        }\n    });\n    if (tocHTML === \"\") {\n        targetElement.innerHTML = \"\";\n        return \"\";\n    }\n    var tempElement = document.createElement(\"div\");\n    if (vditor) {\n        vditor.lute.SetToC(true);\n        if (vditor.currentMode === \"wysiwyg\" && !vditor.preview.element.contains(contentElement)) {\n            tempElement.innerHTML = vditor.lute.SpinVditorDOM(\"<p>[ToC]</p>\" + tocHTML);\n        }\n        else if (vditor.currentMode === \"ir\" && !vditor.preview.element.contains(contentElement)) {\n            tempElement.innerHTML = vditor.lute.SpinVditorIRDOM(\"<p>[ToC]</p>\" + tocHTML);\n        }\n        else {\n            tempElement.innerHTML = vditor.lute.HTML2VditorDOM(\"<p>[ToC]</p>\" + tocHTML);\n        }\n        vditor.lute.SetToC(vditor.options.preview.markdown.toc);\n    }\n    else {\n        targetElement.classList.add(\"vditor-outline\");\n        var lute = Lute.New();\n        lute.SetToC(true);\n        tempElement.innerHTML = lute.HTML2VditorDOM(\"<p>[ToC]</p>\" + tocHTML);\n    }\n    var headingsElement = tempElement.firstElementChild.querySelectorAll(\"li > span[data-target-id]\");\n    headingsElement.forEach(function (item, index) {\n        if (item.nextElementSibling && item.nextElementSibling.tagName === \"UL\") {\n            var iconHTML = \"<svg class='vditor-outline__action'><use xlink:href='#vditor-icon-down'></use></svg>\";\n            if (!document.getElementById(\"vditorIconScript\")) {\n                iconHTML = '<svg class=\"vditor-outline__action\" viewBox=\"0 0 32 32\"><path d=\"M3.76 6.12l12.24 12.213 12.24-12.213 3.76 3.76-16 16-16-16 3.76-3.76z\"></path></svg>';\n            }\n            item.innerHTML = \"\".concat(iconHTML, \"<span>\").concat(item.innerHTML, \"</span>\");\n        }\n        else {\n            item.innerHTML = \"<svg></svg><span>\".concat(item.innerHTML, \"</span>\");\n        }\n        item.setAttribute(\"data-target-id\", ids[index]);\n    });\n    tocHTML = tempElement.firstElementChild.innerHTML;\n    if (headingsElement.length === 0) {\n        targetElement.innerHTML = \"\";\n        return tocHTML;\n    }\n    targetElement.innerHTML = tocHTML;\n    if (vditor) {\n        (0,_mathRender__WEBPACK_IMPORTED_MODULE_0__/* .mathRender */ .T)(targetElement, {\n            cdn: vditor.options.cdn,\n            math: vditor.options.preview.math,\n        });\n    }\n    targetElement.firstElementChild.addEventListener(\"click\", function (event) {\n        var target = event.target;\n        while (target && !target.isEqualNode(targetElement)) {\n            if (target.classList.contains(\"vditor-outline__action\")) {\n                if (target.classList.contains(\"vditor-outline__action--close\")) {\n                    target.classList.remove(\"vditor-outline__action--close\");\n                    target.parentElement.nextElementSibling.setAttribute(\"style\", \"display:block\");\n                }\n                else {\n                    target.classList.add(\"vditor-outline__action--close\");\n                    target.parentElement.nextElementSibling.setAttribute(\"style\", \"display:none\");\n                }\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n            }\n            else if (target.getAttribute(\"data-target-id\")) {\n                event.preventDefault();\n                event.stopPropagation();\n                var idElement = document.getElementById(target.getAttribute(\"data-target-id\"));\n                if (!idElement) {\n                    return;\n                }\n                if (vditor) {\n                    if (vditor.options.height === \"auto\") {\n                        var windowScrollY = idElement.offsetTop + vditor.element.offsetTop;\n                        if (!vditor.options.toolbarConfig.pin) {\n                            windowScrollY += vditor.toolbar.element.offsetHeight;\n                        }\n                        window.scrollTo(window.scrollX, windowScrollY);\n                    }\n                    else {\n                        if (vditor.element.offsetTop < window.scrollY) {\n                            window.scrollTo(window.scrollX, vditor.element.offsetTop);\n                        }\n                        if (vditor.preview.element.contains(contentElement)) {\n                            contentElement.parentElement.scrollTop = idElement.offsetTop;\n                        }\n                        else {\n                            contentElement.scrollTop = idElement.offsetTop;\n                        }\n                    }\n                }\n                else {\n                    // 判断contentElement是否可滚动\n                    var isContentScrollable = wrapperElement.scrollHeight > wrapperElement.clientHeight;\n                    if (isContentScrollable) {\n                        // 如果wrapperElement可滚动，使用其scrollTop属性\n                        wrapperElement.scrollTop = idElement.offsetTop;\n                    }\n                    else {\n                        // 如果wrapperElement不可滚动，使用window.scrollTo\n                        window.scrollTo(window.scrollX, idElement.offsetTop);\n                    }\n                }\n                break;\n            }\n            target = target.parentElement;\n        }\n    });\n    return tocHTML;\n};\n\n\n/***/ }),\n\n/***/ 756:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   o: () => (/* binding */ codeRender)\n/* harmony export */ });\n/* harmony import */ var _util_code160to32__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(930);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n\n\nvar codeRender = function (element, option) {\n    Array.from(element.querySelectorAll(\"pre > code\")).filter(function (e, index) {\n        if (e.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n            e.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n            return false;\n        }\n        if (e.classList.contains(\"language-mermaid\") || e.classList.contains(\"language-flowchart\") ||\n            e.classList.contains(\"language-echarts\") || e.classList.contains(\"language-mindmap\") ||\n            e.classList.contains(\"language-plantuml\") || e.classList.contains(\"language-markmap\") ||\n            e.classList.contains(\"language-abc\") || e.classList.contains(\"language-graphviz\") ||\n            e.classList.contains(\"language-math\") || e.classList.contains(\"language-smiles\")) {\n            return false;\n        }\n        if (e.style.maxHeight.indexOf(\"px\") > -1) {\n            return false;\n        }\n        // 避免预览区在渲染后由于代码块过多产生性能问题 https://github.com/b3log/vditor/issues/67\n        if (element.classList.contains(\"vditor-preview\") && index > 5) {\n            return false;\n        }\n        return true;\n    }).forEach(function (e) {\n        var _a, _b, _c;\n        var codeText = e.innerText;\n        if (e.classList.contains(\"highlight-chroma\")) {\n            var codeElement = e.cloneNode(true);\n            codeElement.querySelectorAll(\".highlight-ln\").forEach(function (item) {\n                item.remove();\n            });\n            codeText = codeElement.innerText;\n        }\n        else if (codeText.endsWith(\"\\n\")) {\n            codeText = codeText.substr(0, codeText.length - 1);\n        }\n        var iconHTML = '<svg><use xlink:href=\"#vditor-icon-copy\"></use></svg>';\n        if (!document.getElementById(\"vditorIconScript\")) {\n            iconHTML = '<svg viewBox=\"0 0 32 32\"><path d=\"M22.545-0h-17.455c-1.6 0-2.909 1.309-2.909 2.909v20.364h2.909v-20.364h17.455v-2.909zM26.909 5.818h-16c-1.6 0-2.909 1.309-2.909 2.909v20.364c0 1.6 1.309 2.909 2.909 2.909h16c1.6 0 2.909-1.309 2.909-2.909v-20.364c0-1.6-1.309-2.909-2.909-2.909zM26.909 29.091h-16v-20.364h16v20.364z\"></path></svg>';\n        }\n        var divElement = document.createElement(\"div\");\n        divElement.className = \"vditor-copy\";\n        divElement.innerHTML = \"<span aria-label=\\\"\".concat(((_a = window.VditorI18n) === null || _a === void 0 ? void 0 : _a.copy) || \"复制\", \"\\\"\\nonmouseover=\\\"this.setAttribute('aria-label', '\").concat(((_b = window.VditorI18n) === null || _b === void 0 ? void 0 : _b.copy) || \"复制\", \"')\\\"\\nclass=\\\"vditor-tooltipped vditor-tooltipped__w\\\"\\nonclick=\\\"event.stopPropagation();this.previousElementSibling.select();document.execCommand('copy');this.setAttribute('aria-label', '\").concat(((_c = window.VditorI18n) === null || _c === void 0 ? void 0 : _c.copied) || \"已复制\", \"');this.previousElementSibling.blur()\\\">\").concat(iconHTML, \"</span>\");\n        var textarea = document.createElement(\"textarea\");\n        textarea.value = (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_1__/* .code160to32 */ .p)(codeText);\n        divElement.insertAdjacentElement(\"afterbegin\", textarea);\n        if (option && option.renderMenu) {\n            option.renderMenu(e, divElement);\n        }\n        e.before(divElement);\n        e.style.maxHeight = (window.outerHeight - 40) + \"px\";\n        // https://github.com/Vanessa219/vditor/issues/1356\n        e.insertAdjacentHTML(\"afterend\", \"<span style=\\\"position: absolute\\\">\".concat(_constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.ZWSP, \"</span>\"));\n    });\n};\n\n\n/***/ }),\n\n/***/ 782:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Co: () => (/* binding */ selectIsEditor),\n/* harmony export */   ED: () => (/* binding */ getSelectPosition),\n/* harmony export */   Ey: () => (/* binding */ getCursorPosition),\n/* harmony export */   Fm: () => (/* binding */ setSelectionByPosition),\n/* harmony export */   RN: () => (/* binding */ getEditorRange),\n/* harmony export */   Z2: () => (/* binding */ insertHTML),\n/* harmony export */   ir: () => (/* binding */ setRangeByWbr),\n/* harmony export */   jl: () => (/* binding */ setSelectionFocus)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _compatibility__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(912);\n/* harmony import */ var _hasClosest__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(145);\n\n\n\nvar getEditorRange = function (vditor) {\n    var range;\n    var element = vditor[vditor.currentMode].element;\n    if (getSelection().rangeCount > 0) {\n        range = getSelection().getRangeAt(0);\n        if (element.isEqualNode(range.startContainer) || element.contains(range.startContainer)) {\n            return range;\n        }\n    }\n    if (vditor[vditor.currentMode].range) {\n        return vditor[vditor.currentMode].range;\n    }\n    element.focus();\n    range = element.ownerDocument.createRange();\n    range.setStart(element, 0);\n    range.collapse(true);\n    return range;\n};\nvar getCursorPosition = function (editor) {\n    var range = window.getSelection().getRangeAt(0);\n    if (!editor.contains(range.startContainer) && !(0,_hasClosest__WEBPACK_IMPORTED_MODULE_1__/* .hasClosestByClassName */ .KJ)(range.startContainer, \"vditor-panel--none\")) {\n        return {\n            left: 0,\n            top: 0,\n        };\n    }\n    var parentRect = editor.parentElement.getBoundingClientRect();\n    var cursorRect;\n    if (range.getClientRects().length === 0) {\n        if (range.startContainer.nodeType === 3) {\n            // 空行时，会出现没有 br 的情况，需要根据父元素 <p> 获取位置信息\n            var parent_1 = range.startContainer.parentElement;\n            if (parent_1 && parent_1.getClientRects().length > 0) {\n                cursorRect = parent_1.getClientRects()[0];\n            }\n            else {\n                return {\n                    left: 0,\n                    top: 0,\n                };\n            }\n        }\n        else {\n            var children = range.startContainer.children;\n            if (children[range.startOffset] &&\n                children[range.startOffset].getClientRects().length > 0) {\n                // markdown 模式回车\n                cursorRect = children[range.startOffset].getClientRects()[0];\n            }\n            else if (range.startContainer.childNodes.length > 0) {\n                // in table or code block\n                var cloneRange = range.cloneRange();\n                range.selectNode(range.startContainer.childNodes[Math.max(0, range.startOffset - 1)]);\n                cursorRect = range.getClientRects()[0];\n                range.setEnd(cloneRange.endContainer, cloneRange.endOffset);\n                range.setStart(cloneRange.startContainer, cloneRange.startOffset);\n            }\n            else {\n                cursorRect = range.startContainer.getClientRects()[0];\n            }\n            if (!cursorRect) {\n                var parentElement = range.startContainer.childNodes[range.startOffset];\n                while (!parentElement.getClientRects ||\n                    (parentElement.getClientRects && parentElement.getClientRects().length === 0)) {\n                    parentElement = parentElement.parentElement;\n                }\n                cursorRect = parentElement.getClientRects()[0];\n            }\n        }\n    }\n    else {\n        cursorRect = range.getClientRects()[0];\n    }\n    return {\n        left: cursorRect.left - parentRect.left,\n        top: cursorRect.top - parentRect.top,\n    };\n};\nvar selectIsEditor = function (editor, range) {\n    if (!range) {\n        if (getSelection().rangeCount === 0) {\n            return false;\n        }\n        else {\n            range = getSelection().getRangeAt(0);\n        }\n    }\n    var container = range.commonAncestorContainer;\n    return editor.isEqualNode(container) || editor.contains(container);\n};\nvar setSelectionFocus = function (range) {\n    var selection = window.getSelection();\n    selection.removeAllRanges();\n    selection.addRange(range);\n};\nvar getSelectPosition = function (selectElement, editorElement, range) {\n    var position = {\n        end: 0,\n        start: 0,\n    };\n    if (!range) {\n        if (getSelection().rangeCount === 0) {\n            return position;\n        }\n        range = window.getSelection().getRangeAt(0);\n    }\n    if (selectIsEditor(editorElement, range)) {\n        var preSelectionRange = range.cloneRange();\n        if (selectElement.childNodes[0] && selectElement.childNodes[0].childNodes[0]) {\n            preSelectionRange.setStart(selectElement.childNodes[0].childNodes[0], 0);\n        }\n        else {\n            preSelectionRange.selectNodeContents(selectElement);\n        }\n        preSelectionRange.setEnd(range.startContainer, range.startOffset);\n        position.start = preSelectionRange.toString().length;\n        position.end = position.start + range.toString().length;\n    }\n    return position;\n};\nvar setSelectionByPosition = function (start, end, editor) {\n    var charIndex = 0;\n    var line = 0;\n    var pNode = editor.childNodes[line];\n    var foundStart = false;\n    var stop = false;\n    start = Math.max(0, start);\n    end = Math.max(0, end);\n    var range = editor.ownerDocument.createRange();\n    range.setStart(pNode || editor, 0);\n    range.collapse(true);\n    while (!stop && pNode) {\n        var nextCharIndex = charIndex + pNode.textContent.length;\n        if (!foundStart && start >= charIndex && start <= nextCharIndex) {\n            if (start === 0) {\n                range.setStart(pNode, 0);\n            }\n            else {\n                if (pNode.childNodes[0].nodeType === 3) {\n                    range.setStart(pNode.childNodes[0], start - charIndex);\n                }\n                else if (pNode.nextSibling) {\n                    range.setStartBefore(pNode.nextSibling);\n                }\n                else {\n                    range.setStartAfter(pNode);\n                }\n            }\n            foundStart = true;\n            if (start === end) {\n                stop = true;\n                break;\n            }\n        }\n        if (foundStart && end >= charIndex && end <= nextCharIndex) {\n            if (end === 0) {\n                range.setEnd(pNode, 0);\n            }\n            else {\n                if (pNode.childNodes[0].nodeType === 3) {\n                    range.setEnd(pNode.childNodes[0], end - charIndex);\n                }\n                else if (pNode.nextSibling) {\n                    range.setEndBefore(pNode.nextSibling);\n                }\n                else {\n                    range.setEndAfter(pNode);\n                }\n            }\n            stop = true;\n        }\n        charIndex = nextCharIndex;\n        pNode = editor.childNodes[++line];\n    }\n    if (!stop && editor.childNodes[line - 1]) {\n        range.setStartBefore(editor.childNodes[line - 1]);\n    }\n    setSelectionFocus(range);\n    return range;\n};\nvar setRangeByWbr = function (element, range) {\n    var wbrElement = element.querySelector(\"wbr\");\n    if (!wbrElement) {\n        return;\n    }\n    if (!wbrElement.previousElementSibling) {\n        if (wbrElement.previousSibling) {\n            // text<wbr>\n            range.setStart(wbrElement.previousSibling, wbrElement.previousSibling.textContent.length);\n        }\n        else if (wbrElement.nextSibling) {\n            if (wbrElement.nextSibling.nodeType === 3) {\n                // <wbr>text\n                range.setStart(wbrElement.nextSibling, 0);\n            }\n            else {\n                // <wbr><br> https://github.com/Vanessa219/vditor/issues/400\n                range.setStartBefore(wbrElement.nextSibling);\n            }\n        }\n        else {\n            // 内容为空\n            range.setStart(wbrElement.parentElement, 0);\n        }\n    }\n    else {\n        if (wbrElement.previousElementSibling.isSameNode(wbrElement.previousSibling)) {\n            if (wbrElement.previousElementSibling.lastChild) {\n                // <em>text</em><wbr>\n                range.setStartBefore(wbrElement);\n                range.collapse(true);\n                setSelectionFocus(range);\n                // fix Chrome set range bug: **c**\n                if ((0,_compatibility__WEBPACK_IMPORTED_MODULE_2__/* .isChrome */ .H8)() && (wbrElement.previousElementSibling.tagName === \"EM\" ||\n                    wbrElement.previousElementSibling.tagName === \"STRONG\" ||\n                    wbrElement.previousElementSibling.tagName === \"S\")) {\n                    range.insertNode(document.createTextNode(_constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.ZWSP));\n                    range.collapse(false);\n                }\n                wbrElement.remove();\n                return;\n            }\n            else {\n                // <br><wbr>\n                range.setStartAfter(wbrElement.previousElementSibling);\n            }\n        }\n        else {\n            // <em>text</em>text<wbr>\n            range.setStart(wbrElement.previousSibling, wbrElement.previousSibling.textContent.length);\n        }\n    }\n    range.collapse(true);\n    wbrElement.remove();\n    setSelectionFocus(range);\n};\nvar insertHTML = function (html, vditor) {\n    // 使用 lute 方法会添加 p 元素，只有一个 p 元素的时候进行删除\n    var tempElement = document.createElement(\"div\");\n    tempElement.innerHTML = html;\n    var tempBlockElement = tempElement.querySelectorAll(\"p\");\n    if (tempBlockElement.length === 1 && !tempBlockElement[0].previousSibling && !tempBlockElement[0].nextSibling &&\n        vditor[vditor.currentMode].element.children.length > 0 && tempElement.firstElementChild.tagName === \"P\") {\n        html = tempBlockElement[0].innerHTML.trim();\n    }\n    var pasteElement = document.createElement(\"div\");\n    pasteElement.innerHTML = html;\n    var range = getEditorRange(vditor);\n    if (range.toString() !== \"\") {\n        vditor[vditor.currentMode].preventInput = true;\n        document.execCommand(\"delete\", false, \"\");\n    }\n    // 客户想让粘贴的内容在当前光标位置插入，而不是在光标后面插入，所以注释掉\n    // if (pasteElement.firstElementChild &&\n    //     pasteElement.firstElementChild.getAttribute(\"data-block\") === \"0\") {\n    //     // 粘贴内容为块元素时，应在下一段落中插入\n    //     pasteElement.lastElementChild.insertAdjacentHTML(\"beforeend\", \"<wbr>\");\n    //     const blockElement = hasClosestBlock(range.startContainer);\n    //     if (!blockElement) {\n    //         vditor[vditor.currentMode].element.insertAdjacentHTML(\"beforeend\", pasteElement.innerHTML);\n    //     } else {\n    //         blockElement.insertAdjacentHTML(\"afterend\", pasteElement.innerHTML);\n    //     }\n    //     setRangeByWbr(vditor[vditor.currentMode].element, range);\n    // } else {\n    var pasteTemplate = document.createElement(\"template\");\n    pasteTemplate.innerHTML = html;\n    range.insertNode(pasteTemplate.content.cloneNode(true));\n    range.collapse(false);\n    setSelectionFocus(range);\n    // }\n};\n\n\n/***/ }),\n\n/***/ 794:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SMILESRenderAdapter: () => (/* binding */ SMILESRenderAdapter),\n/* harmony export */   abcRenderAdapter: () => (/* binding */ abcRenderAdapter),\n/* harmony export */   chartRenderAdapter: () => (/* binding */ chartRenderAdapter),\n/* harmony export */   flowchartRenderAdapter: () => (/* binding */ flowchartRenderAdapter),\n/* harmony export */   graphvizRenderAdapter: () => (/* binding */ graphvizRenderAdapter),\n/* harmony export */   markmapRenderAdapter: () => (/* binding */ markmapRenderAdapter),\n/* harmony export */   mathRenderAdapter: () => (/* binding */ mathRenderAdapter),\n/* harmony export */   mermaidRenderAdapter: () => (/* binding */ mermaidRenderAdapter),\n/* harmony export */   mindmapRenderAdapter: () => (/* binding */ mindmapRenderAdapter),\n/* harmony export */   plantumlRenderAdapter: () => (/* binding */ plantumlRenderAdapter)\n/* harmony export */ });\nvar mathRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (element) { return element.querySelectorAll(\".language-math\"); },\n};\nvar SMILESRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (element) { return element.querySelectorAll(\".language-smiles\"); },\n};\nvar mermaidRenderAdapter = {\n    /** 不仅要返回code，并且需要将 code 设置为 el 的 innerHTML */\n    getCode: function (el) { return el.textContent; },\n    getElements: function (element) { return element.querySelectorAll(\".language-mermaid\"); },\n};\nvar markmapRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (element) { return element.querySelectorAll(\".language-markmap\"); },\n};\nvar mindmapRenderAdapter = {\n    getCode: function (el) { return el.getAttribute(\"data-code\"); },\n    getElements: function (el) { return el.querySelectorAll(\".language-mindmap\"); },\n};\nvar chartRenderAdapter = {\n    getCode: function (el) { return el.innerText; },\n    getElements: function (el) { return el.querySelectorAll(\".language-echarts\"); },\n};\nvar abcRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (el) { return el.querySelectorAll(\".language-abc\"); },\n};\nvar graphvizRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (el) { return el.querySelectorAll(\".language-graphviz\"); },\n};\nvar flowchartRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (el) { return el.querySelectorAll(\".language-flowchart\"); },\n};\nvar plantumlRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (el) { return el.querySelectorAll(\".language-plantuml\"); },\n};\n\n\n/***/ }),\n\n/***/ 801:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   v: () => (/* binding */ chartRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n/* harmony import */ var _util_function__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(138);\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n\n\n\n\nvar chartRender = function (element, cdn, theme) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var echartsElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.chartRenderAdapter.getElements(element);\n    if (echartsElements.length > 0) {\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/echarts/echarts.min.js?v=5.5.1\"), \"vditorEchartsScript\").then(function () {\n            echartsElements.forEach(function (e) { return __awaiter(void 0, void 0, void 0, function () {\n                var text, option, error_1;\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (e.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                                e.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                                return [2 /*return*/];\n                            }\n                            text = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.chartRenderAdapter.getCode(e).trim();\n                            if (!text) {\n                                return [2 /*return*/];\n                            }\n                            _a.label = 1;\n                        case 1:\n                            _a.trys.push([1, 3, , 4]);\n                            if (e.getAttribute(\"data-processed\") === \"true\") {\n                                return [2 /*return*/];\n                            }\n                            return [4 /*yield*/, (0,_util_function__WEBPACK_IMPORTED_MODULE_3__/* .looseJsonParse */ .kY)(text)];\n                        case 2:\n                            option = _a.sent();\n                            echarts.init(e, theme === \"dark\" ? \"dark\" : undefined).setOption(option);\n                            e.setAttribute(\"data-processed\", \"true\");\n                            return [3 /*break*/, 4];\n                        case 3:\n                            error_1 = _a.sent();\n                            e.className = \"vditor-reset--error\";\n                            e.innerHTML = \"echarts render error: <br>\".concat(error_1);\n                            return [3 /*break*/, 4];\n                        case 4: return [2 /*return*/];\n                    }\n                });\n            }); });\n        });\n    }\n};\n\n\n/***/ }),\n\n/***/ 816:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   M: () => (/* binding */ plantumlRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar plantumlRender = function (element, cdn) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var plantumlElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.plantumlRenderAdapter.getElements(element);\n    if (plantumlElements.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/plantuml/plantuml-encoder.min.js\"), \"vditorPlantumlScript\").then(function () {\n        plantumlElements.forEach(function (e) {\n            if (e.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                e.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                return;\n            }\n            var text = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.plantumlRenderAdapter.getCode(e).trim();\n            if (!text) {\n                return;\n            }\n            try {\n                e.innerHTML = \"<object type=\\\"image/svg+xml\\\" data=\\\"https://www.plantuml.com/plantuml/svg/~1\".concat(plantumlEncoder.encode(text), \"\\\"/>\");\n            }\n            catch (error) {\n                e.className = \"vditor-reset--error\";\n                e.innerHTML = \"plantuml render error: <br>\".concat(error);\n            }\n        });\n    });\n};\n\n\n/***/ }),\n\n/***/ 842:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Y: () => (/* binding */ Constants),\n/* harmony export */   g: () => (/* binding */ _VDITOR_VERSION)\n/* harmony export */ });\nvar _VDITOR_VERSION = \"3.11.0\";\n\nvar Constants = /** @class */ (function () {\n    function Constants() {\n    }\n    Constants.ZWSP = \"\\u200b\";\n    Constants.DROP_EDITOR = \"application/editor\";\n    Constants.MOBILE_WIDTH = 520;\n    Constants.CLASS_MENU_DISABLED = \"vditor-menu--disabled\";\n    Constants.EDIT_TOOLBARS = [\"emoji\", \"headings\", \"bold\", \"italic\", \"strike\", \"link\", \"list\",\n        \"ordered-list\", \"outdent\", \"indent\", \"check\", \"line\", \"quote\", \"code\", \"inline-code\", \"insert-after\",\n        \"insert-before\", \"upload\", \"record\", \"table\", 'echarts', 'math', 'mermaid', 'mermaid', 'mindmap', 'mermaid-sequence', 'mermaid-gantt'];\n    Constants.CODE_THEME = [\"a11y-dark\", \"agate\", \"an-old-hope\", \"androidstudio\",\n        \"arta\", \"atom-one-dark\", \"atom-one-dark-reasonable\", \"base16/3024\", \"base16/apathy\", \"base16/apprentice\", \"base16/ashes\", \"base16/atelier-cave\", \"base16/atelier-dune\",\n        \"base16/atelier-estuary\", \"base16/atelier-forest\", \"base16/atelier-heath\", \"base16/atelier-lakeside\", \"base16/atelier-plateau\", \"base16/atelier-savanna\", \"base16/atelier-seaside\", \"base16/atelier-sulphurpool\",\n        \"base16/atlas\", \"base16/bespin\", \"base16/black-metal\", \"base16/black-metal-bathory\", \"base16/black-metal-burzum\", \"base16/black-metal-dark-funeral\", \"base16/black-metal-gorgoroth\", \"base16/black-metal-immortal\", \"base16/black-metal-khold\", \"base16/black-metal-marduk\", \"base16/black-metal-mayhem\", \"base16/black-metal-nile\", \"base16/black-metal-venom\", \"base16/brewer\", \"base16/bright\", \"base16/brogrammer\",\n        \"base16/brush-trees-dark\", \"base16/chalk\", \"base16/circus\", \"base16/classic-dark\", \"base16/codeschool\", \"base16/colors\", \"base16/danqing\", \"base16/darcula\", \"base16/dark-violet\",\n        \"base16/darkmoss\", \"base16/darktooth\", \"base16/decaf\", \"base16/default-dark\", \"base16/dracula\", \"base16/edge-dark\", \"base16/eighties\", \"base16/embers\", \"base16/equilibrium-dark\",\n        \"base16/equilibrium-gray-dark\", \"base16/espresso\", \"base16/eva\", \"base16/eva-dim\", \"base16/flat\", \"base16/framer\", \"base16/gigavolt\", \"base16/google-dark\", \"base16/grayscale-dark\", \"base16/green-screen\", \"base16/gruvbox-dark-hard\", \"base16/gruvbox-dark-medium\",\n        \"base16/gruvbox-dark-pale\", \"base16/gruvbox-dark-soft\", \"base16/hardcore\", \"base16/harmonic16-dark\", \"base16/heetch-dark\", \"base16/helios\", \"base16/hopscotch\", \"base16/horizon-dark\", \"base16/humanoid-dark\", \"base16/ia-dark\", \"base16/icy-dark\", \"base16/ir-black\", \"base16/isotope\",\n        \"base16/kimber\", \"base16/london-tube\", \"base16/macintosh\", \"base16/marrakesh\", \"base16/materia\", \"base16/material\", \"base16/material-darker\", \"base16/material-palenight\", \"base16/material-vivid\",\n        \"base16/mellow-purple\", \"base16/mocha\", \"base16/monokai\", \"base16/nebula\", \"base16/nord\", \"base16/nova\", \"base16/ocean\", \"base16/oceanicnext\", \"base16/onedark\", \"base16/outrun-dark\",\n        \"base16/papercolor-dark\", \"base16/paraiso\", \"base16/pasque\", \"base16/phd\", \"base16/pico\", \"base16/pop\", \"base16/porple\", \"base16/qualia\", \"base16/railscasts\", \"base16/rebecca\",\n        \"base16/ros-pine\", \"base16/ros-pine-moon\", \"base16/sandcastle\", \"base16/seti-ui\", \"base16/silk-dark\", \"base16/snazzy\", \"base16/solar-flare\", \"base16/solarized-dark\", \"base16/spacemacs\", \"base16/summercamp\", \"base16/summerfruit-dark\",\n        \"base16/synth-midnight-terminal-dark\", \"base16/tango\", \"base16/tender\", \"base16/tomorrow-night\", \"base16/twilight\", \"base16/unikitty-dark\", \"base16/vulcan\",\n        \"base16/windows-10\", \"base16/windows-95\", \"base16/windows-high-contrast\", \"base16/windows-nt\", \"base16/woodland\", \"base16/xcode-dusk\", \"base16/zenburn\", \"codepen-embed\", \"dark\",\n        \"devibeans\", \"far\", \"felipec\", \"github-dark\", \"github-dark-dimmed\", \"gml\", \"gradient-dark\", \"hybrid\", \"ir-black\", \"isbl-editor-dark\", \"kimbie-dark\", \"lioshi\",\n        \"monokai\", \"monokai-sublime\", \"night-owl\", \"nnfx-dark\", \"nord\", \"obsidian\", \"panda-syntax-dark\", \"paraiso-dark\", \"pojoaque\", \"qtcreator-dark\", \"rainbow\", \"shades-of-purple\", \"srcery\", \"stackoverflow-dark\",\n        \"sunburst\", \"tomorrow-night-blue\", \"tomorrow-night-bright\", \"tokyo-night-dark\", \"vs2015\", \"xt256\",\n        \"ant-design\",\n        \"a11y-light\", \"arduino-light\", \"ascetic\", \"atom-one-light\", \"base16/atelier-cave-light\",\n        \"base16/atelier-dune-light\", \"base16/atelier-estuary-light\", \"base16/atelier-forest-light\", \"base16/atelier-heath-light\",\n        \"base16/atelier-lakeside-light\", \"base16/atelier-plateau-light\", \"base16/atelier-savanna-light\", \"base16/atelier-seaside-light\", \"base16/atelier-sulphurpool-light\", \"base16/brush-trees\",\n        \"base16/classic-light\", \"base16/cupcake\", \"base16/cupertino\", \"base16/default-light\", \"base16/dirtysea\", \"base16/edge-light\", \"base16/equilibrium-gray-light\", \"base16/equilibrium-light\",\n        \"base16/fruit-soda\", \"base16/github\", \"base16/google-light\", \"base16/grayscale-light\", \"base16/gruvbox-light-hard\", \"base16/gruvbox-light-medium\", \"base16/gruvbox-light-soft\",\n        \"base16/harmonic16-light\", \"base16/heetch-light\", \"base16/humanoid-light\", \"base16/horizon-light\", \"base16/ia-light\", \"base16/material-lighter\", \"base16/mexico-light\",\n        \"base16/one-light\", \"base16/papercolor-light\", \"base16/ros-pine-dawn\", \"base16/sagelight\", \"base16/shapeshifter\",\n        \"base16/silk-light\", \"base16/solar-flare-light\", \"base16/solarized-light\", \"base16/summerfruit-light\", \"base16/synth-midnight-terminal-light\", \"base16/tomorrow\",\n        \"base16/unikitty-light\", \"base16/windows-10-light\", \"base16/windows-95-light\", \"base16/windows-high-contrast-light\", \"brown-paper\", \"base16/windows-nt-light\",\n        \"color-brewer\", \"docco\", \"foundation\", \"github\", \"googlecode\", \"gradient-light\", \"grayscale\", \"idea\", \"intellij-light\", \"isbl-editor-light\", \"kimbie-light\",\n        \"lightfair\", \"magula\", \"mono-blue\", \"nnfx-light\", \"panda-syntax-light\", \"paraiso-light\", \"purebasic\", \"qtcreator-light\", \"routeros\", \"school-book\",\n        \"stackoverflow-light\", \"tokyo-night-light\", \"vs\", \"xcode\", \"default\"];\n    // public static readonly ALIAS_CODE_LANGUAGES: string[] = [\n    //     // 自定义\n    //     \"abc\", \"plantuml\", \"mermaid\", \"flowchart\", \"echarts\", \"mindmap\", \"graphviz\", \"math\", \"markmap\", \"smiles\",\n    //     // 别名\n    //     \"js\", \"ts\", \"html\", \"toml\", \"c#\", \"bat\"\n    // ];\n    Constants.ALIAS_CODE_LANGUAGES = [\n        // 自定义\n        \"mermaid\", \"echarts\", \"mindmap\", \"graphviz\", \"math\", \"markmap\",\n        // 别名\n        \"js\", \"ts\", \"html\", \"toml\", \"c#\", \"bat\"\n    ];\n    Constants.CDN = \"https://unpkg.com/vditor@\".concat(\"3.11.0\");\n    Constants.MARKDOWN_OPTIONS = {\n        autoSpace: false,\n        gfmAutoLink: true,\n        codeBlockPreview: true,\n        fixTermTypo: false,\n        footnotes: true,\n        linkBase: \"\",\n        linkPrefix: \"\",\n        listStyle: false,\n        mark: false,\n        mathBlockPreview: true,\n        paragraphBeginningSpace: false,\n        sanitize: true,\n        toc: false,\n    };\n    Constants.HLJS_OPTIONS = {\n        enable: true,\n        lineNumber: false,\n        defaultLang: \"\",\n        style: \"github\",\n    };\n    Constants.MATH_OPTIONS = {\n        engine: \"KaTeX\",\n        inlineDigit: false,\n        macros: {},\n    };\n    Constants.THEME_OPTIONS = {\n        current: \"light\",\n        list: {\n            \"ant-design\": \"Ant Design\",\n            \"dark\": \"Dark\",\n            \"light\": \"Light\",\n            \"wechat\": \"WeChat\",\n        },\n        path: \"\".concat(Constants.CDN, \"/dist/css/content-theme\"),\n    };\n    return Constants;\n}());\n\n\n\n/***/ }),\n\n/***/ 854:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   h: () => (/* binding */ setCodeTheme)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addStyle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10);\n\n\nvar setCodeTheme = function (codeTheme, cdn) {\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    if (!_constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CODE_THEME.includes(codeTheme)) {\n        codeTheme = \"github\";\n    }\n    var vditorHljsStyle = document.getElementById(\"vditorHljsStyle\");\n    var href = \"\".concat(cdn, \"/dist/js/highlight.js/styles/\").concat(codeTheme, \".min.css\");\n    if (!vditorHljsStyle) {\n        (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_1__/* .addStyle */ .T)(href, \"vditorHljsStyle\");\n    }\n    else if (vditorHljsStyle.getAttribute('href') !== href) {\n        vditorHljsStyle.remove();\n        (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_1__/* .addStyle */ .T)(href, \"vditorHljsStyle\");\n    }\n};\n\n\n/***/ }),\n\n/***/ 860:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   H: () => (/* binding */ setContentTheme)\n/* harmony export */ });\n/* harmony import */ var _util_addStyle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10);\n\nvar setContentTheme = function (contentTheme, path) {\n    if (!contentTheme || !path) {\n        return;\n    }\n    var vditorContentTheme = document.getElementById(\"vditorContentTheme\");\n    var cssPath = \"\".concat(path, \"/\").concat(contentTheme, \".css\");\n    if (!vditorContentTheme) {\n        (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_0__/* .addStyle */ .T)(cssPath, \"vditorContentTheme\");\n    }\n    else if (vditorContentTheme.getAttribute(\"href\") !== cssPath) {\n        vditorContentTheme.remove();\n        (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_0__/* .addStyle */ .T)(cssPath, \"vditorContentTheme\");\n    }\n};\n\n\n/***/ }),\n\n/***/ 883:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   l: () => (/* binding */ mindmapRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar mindmapRender = function (element, cdn, theme) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var mindmapElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.mindmapRenderAdapter.getElements(element);\n    if (mindmapElements.length > 0) {\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/echarts/echarts.min.js?v=5.5.1\"), \"vditorEchartsScript\").then(function () {\n            mindmapElements.forEach(function (e) {\n                if (e.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                    e.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                    return;\n                }\n                var text = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.mindmapRenderAdapter.getCode(e);\n                if (!text) {\n                    return;\n                }\n                try {\n                    if (e.getAttribute(\"data-processed\") === \"true\") {\n                        return;\n                    }\n                    echarts.init(e, theme === \"dark\" ? \"dark\" : undefined).setOption({\n                        series: [\n                            {\n                                data: [JSON.parse(decodeURIComponent(text))],\n                                initialTreeDepth: -1,\n                                itemStyle: {\n                                    borderWidth: 0,\n                                    color: \"#4285f4\",\n                                },\n                                label: {\n                                    backgroundColor: \"#f6f8fa\",\n                                    borderColor: \"#d1d5da\",\n                                    borderRadius: 5,\n                                    borderWidth: 0.5,\n                                    color: \"#586069\",\n                                    lineHeight: 20,\n                                    offset: [-5, 0],\n                                    padding: [0, 5],\n                                    position: \"insideRight\",\n                                },\n                                lineStyle: {\n                                    color: \"#d1d5da\",\n                                    width: 1,\n                                },\n                                roam: true,\n                                symbol: function (value, params) {\n                                    var _a;\n                                    if ((_a = params === null || params === void 0 ? void 0 : params.data) === null || _a === void 0 ? void 0 : _a.children) {\n                                        return \"circle\";\n                                    }\n                                    else {\n                                        return \"path://\";\n                                    }\n                                },\n                                type: \"tree\",\n                            },\n                        ],\n                        tooltip: {\n                            trigger: \"item\",\n                            triggerOn: \"mousemove\",\n                        },\n                    });\n                    e.setAttribute(\"data-processed\", \"true\");\n                }\n                catch (error) {\n                    e.className = \"vditor-reset--error\";\n                    e.innerHTML = \"mindmap render error: <br>\".concat(error);\n                }\n            });\n        });\n    }\n};\n\n\n/***/ }),\n\n/***/ 889:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   D: () => (/* binding */ flowchartRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar flowchartRender = function (element, cdn) {\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var flowchartElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.flowchartRenderAdapter.getElements(element);\n    if (flowchartElements.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/flowchart.js/flowchart.min.js\"), \"vditorFlowchartScript\").then(function () {\n        flowchartElements.forEach(function (item) {\n            if (item.getAttribute(\"data-processed\") === \"true\") {\n                return;\n            }\n            var flowchartObj = flowchart.parse(_adapterRender__WEBPACK_IMPORTED_MODULE_1__.flowchartRenderAdapter.getCode(item));\n            item.innerHTML = \"\";\n            flowchartObj.drawSVG(item);\n            item.setAttribute(\"data-processed\", \"true\");\n        });\n    });\n};\n\n\n/***/ }),\n\n/***/ 912:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   D: () => (/* binding */ accessLocalStorage),\n/* harmony export */   H8: () => (/* binding */ isChrome),\n/* harmony export */   _0: () => (/* binding */ isCtrl),\n/* harmony export */   fG: () => (/* binding */ updateHotkeyTip),\n/* harmony export */   gm: () => (/* binding */ isFirefox),\n/* harmony export */   nr: () => (/* binding */ isSafari),\n/* harmony export */   y3: () => (/* binding */ getEventName)\n/* harmony export */ });\nvar isSafari = function () {\n    return navigator.userAgent.indexOf(\"Safari\") > -1 && navigator.userAgent.indexOf(\"Chrome\") === -1;\n};\nvar isFirefox = function () {\n    return navigator.userAgent.toLowerCase().indexOf(\"firefox\") > -1;\n};\nvar accessLocalStorage = function () {\n    try {\n        return typeof localStorage !== \"undefined\";\n    }\n    catch (e) {\n        return false;\n    }\n};\n// 用户 iPhone 点击延迟/需要双击的处理\nvar getEventName = function () {\n    if (navigator.userAgent.indexOf(\"iPhone\") > -1) {\n        return \"touchstart\";\n    }\n    else {\n        return \"click\";\n    }\n};\n// 区别 mac 上的 ctrl 和 meta\nvar isCtrl = function (event) {\n    if (navigator.platform.toUpperCase().indexOf(\"MAC\") >= 0) {\n        // mac\n        if (event.metaKey && !event.ctrlKey) {\n            return true;\n        }\n        return false;\n    }\n    else {\n        if (!event.metaKey && event.ctrlKey) {\n            return true;\n        }\n        return false;\n    }\n};\n// Mac，Windows 快捷键展示\nvar updateHotkeyTip = function (hotkey) {\n    if (/Mac/.test(navigator.platform) || navigator.platform === \"iPhone\") {\n        if (hotkey.indexOf(\"⇧\") > -1 && isFirefox()) {\n            // Mac Firefox 按下 shift 后，key 同 windows 系统\n            hotkey = hotkey.replace(\";\", \":\").replace(\"=\", \"+\").replace(\"-\", \"_\");\n        }\n    }\n    else {\n        if (hotkey.startsWith(\"⌘\")) {\n            hotkey = hotkey.replace(\"⌘\", \"⌘+\");\n        }\n        else if (hotkey.startsWith(\"⌥\") && hotkey.substr(1, 1) !== \"⌘\") {\n            hotkey = hotkey.replace(\"⌥\", \"⌥+\");\n        }\n        else {\n            hotkey = hotkey.replace(\"⇧⌘\", \"⌘+⇧+\").replace(\"⌥⌘\", \"⌥+⌘+\");\n        }\n        hotkey = hotkey.replace(\"⌘\", \"Ctrl\").replace(\"⇧\", \"Shift\")\n            .replace(\"⌥\", \"Alt\");\n        if (hotkey.indexOf(\"Shift\") > -1) {\n            hotkey = hotkey.replace(\";\", \":\").replace(\"=\", \"+\").replace(\"-\", \"_\");\n        }\n    }\n    return hotkey;\n};\nvar isChrome = function () {\n    return /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n};\n\n\n/***/ }),\n\n/***/ 930:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   p: () => (/* binding */ code160to32)\n/* harmony export */ });\nvar code160to32 = function (text) {\n    // 非打断空格转换为空格\n    return text.replace(/\\u00a0/g, \" \");\n};\n\n\n/***/ }),\n\n/***/ 947:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   T: () => (/* binding */ mathRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(444);\n/* harmony import */ var _util_addStyle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10);\n/* harmony import */ var _util_code160to32__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(930);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\n\n\nvar mathRender = function (element, options) {\n    if (element === void 0) { element = document; }\n    var mathElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.mathRenderAdapter.getElements(element);\n    if (mathElements.length === 0) {\n        return;\n    }\n    var defaultOptions = {\n        cdn: _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN,\n        math: {\n            engine: \"KaTeX\",\n            inlineDigit: false,\n            macros: {},\n        },\n    };\n    if (options && options.math) {\n        options.math =\n            Object.assign({}, defaultOptions.math, options.math);\n    }\n    options = Object.assign({}, defaultOptions, options);\n    if (options.math.engine === \"KaTeX\") {\n        (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_2__/* .addStyle */ .T)(\"\".concat(options.cdn, \"/dist/js/katex/katex.min.css?v=0.16.9\"), \"vditorKatexStyle\");\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_3__/* .addScript */ .Z)(\"\".concat(options.cdn, \"/dist/js/katex/katex.min.js?v=0.16.9\"), \"vditorKatexScript\").then(function () {\n            (0,_util_addScript__WEBPACK_IMPORTED_MODULE_3__/* .addScript */ .Z)(\"\".concat(options.cdn, \"/dist/js/katex/mhchem.min.js?v=0.16.9\"), \"vditorKatexChemScript\").then(function () {\n                mathElements.forEach(function (mathElement) {\n                    if (mathElement.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                        mathElement.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                        return;\n                    }\n                    if (mathElement.getAttribute(\"data-math\")) {\n                        return;\n                    }\n                    var math = (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_4__/* .code160to32 */ .p)(_adapterRender__WEBPACK_IMPORTED_MODULE_1__.mathRenderAdapter.getCode(mathElement));\n                    mathElement.setAttribute(\"data-math\", math);\n                    try {\n                        mathElement.innerHTML = katex.renderToString(math, {\n                            displayMode: mathElement.tagName === \"DIV\",\n                            output: \"html\",\n                            macros: options.math.macros,\n                        });\n                    }\n                    catch (e) {\n                        mathElement.innerHTML = e.message;\n                        mathElement.className = \"language-math vditor-reset--error\";\n                    }\n                    mathElement.addEventListener(\"copy\", function (event) {\n                        event.stopPropagation();\n                        event.preventDefault();\n                        var vditorMathElement = event.currentTarget.closest(\".language-math\");\n                        event.clipboardData.setData(\"text/html\", vditorMathElement.innerHTML);\n                        event.clipboardData.setData(\"text/plain\", vditorMathElement.getAttribute(\"data-math\"));\n                    });\n                });\n            });\n        });\n    }\n    else if (options.math.engine === \"MathJax\") {\n        var chainAsync_1 = function (fns) {\n            if (fns.length === 0) {\n                return;\n            }\n            var curr = 0;\n            var last = fns[fns.length - 1];\n            var next = function () {\n                var fn = fns[curr++];\n                fn === last ? fn() : fn(next);\n            };\n            next();\n        };\n        if (!window.MathJax) {\n            window.MathJax = {\n                loader: {\n                    paths: { mathjax: \"\".concat(options.cdn, \"/dist/js/mathjax\") },\n                },\n                startup: {\n                    typeset: false,\n                },\n                tex: {\n                    macros: options.math.macros,\n                },\n            };\n            // https://github.com/Vanessa219/vditor/issues/1453\n            Object.assign(window.MathJax, options.math.mathJaxOptions);\n        }\n        // 循环加载会抛异常\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_3__/* .addScriptSync */ .U)(\"\".concat(options.cdn, \"/dist/js/mathjax/tex-mml-chtml.js\"), \"protyleMathJaxScript\");\n        var renderMath_1 = function (mathElement, next) {\n            var math = (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_4__/* .code160to32 */ .p)(mathElement.textContent).trim();\n            var mathOptions = window.MathJax.getMetricsFor(mathElement);\n            mathOptions.display = mathElement.tagName === \"DIV\";\n            window.MathJax.tex2chtmlPromise(math, mathOptions).then(function (node) {\n                mathElement.innerHTML = \"\";\n                mathElement.setAttribute(\"data-math\", math);\n                mathElement.append(node);\n                window.MathJax.startup.document.clear();\n                window.MathJax.startup.document.updateDocument();\n                var errorTextElement = node.querySelector('[data-mml-node=\"merror\"]');\n                if (errorTextElement && errorTextElement.textContent.trim() !== \"\") {\n                    mathElement.innerHTML = errorTextElement.textContent.trim();\n                    mathElement.className = \"vditor-reset--error\";\n                }\n                if (next) {\n                    next();\n                }\n            });\n        };\n        window.MathJax.startup.promise.then(function () {\n            var chains = [];\n            var _loop_1 = function (i) {\n                var mathElement = mathElements[i];\n                if (!mathElement.parentElement.classList.contains(\"vditor-wysiwyg__pre\") &&\n                    !mathElement.parentElement.classList.contains(\"vditor-ir__marker--pre\") &&\n                    !mathElement.getAttribute(\"data-math\") && (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_4__/* .code160to32 */ .p)(mathElement.textContent).trim()) {\n                    chains.push(function (next) {\n                        if (i === mathElements.length - 1) {\n                            renderMath_1(mathElement);\n                        }\n                        else {\n                            renderMath_1(mathElement, next);\n                        }\n                    });\n                }\n            };\n            for (var i = 0; i < mathElements.length; i++) {\n                _loop_1(i);\n            }\n            chainAsync_1(chains);\n        });\n    }\n};\n\n\n/***/ }),\n\n/***/ 998:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   e: () => (/* binding */ mermaidRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n/* harmony import */ var _util_function__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(138);\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n\n\n\n\nvar mermaidRender = function (element, cdn, theme) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var mermaidElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.mermaidRenderAdapter.getElements(element);\n    if (mermaidElements.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/mermaid/mermaid.min.js?v=11.6.0\"), \"vditorMermaidScript\").then(function () {\n        var config = {\n            securityLevel: \"loose\",\n            altFontFamily: \"sans-serif\",\n            fontFamily: \"sans-serif\",\n            startOnLoad: false,\n            flowchart: {\n                htmlLabels: true,\n                useMaxWidth: !0\n            },\n            sequence: {\n                useMaxWidth: true,\n                diagramMarginX: 8,\n                diagramMarginY: 8,\n                boxMargin: 8,\n                showSequenceNumbers: true // Mermaid 时序图增加序号 https://github.com/siyuan-note/siyuan/pull/6992 https://mermaid.js.org/syntax/sequenceDiagram.html#sequencenumbers\n            },\n            gantt: {\n                leftPadding: 75,\n                rightPadding: 20\n            }\n        };\n        if (theme === \"dark\") {\n            config.theme = \"dark\";\n        }\n        mermaid.initialize(config);\n        mermaidElements.forEach(function (item) { return __awaiter(void 0, void 0, void 0, function () {\n            var code, id, mermaidData, e_1, errorElement;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        code = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.mermaidRenderAdapter.getCode(item);\n                        if (item.getAttribute(\"data-processed\") === \"true\" || code.trim() === \"\") {\n                            return [2 /*return*/];\n                        }\n                        id = \"mermaid\" + (0,_util_function__WEBPACK_IMPORTED_MODULE_3__/* .genUUID */ .Ee)();\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, mermaid.render(id, item.textContent)];\n                    case 2:\n                        mermaidData = _a.sent();\n                        item.innerHTML = mermaidData.svg;\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_1 = _a.sent();\n                        errorElement = document.querySelector(\"#\" + id);\n                        item.innerHTML = \"\".concat(errorElement.outerHTML, \"<br>\\n<div style=\\\"text-align: left\\\"><small>\").concat(e_1.message.replace(/\\n/, \"<br>\"), \"</small></div>\");\n                        errorElement.parentElement.remove();\n                        return [3 /*break*/, 4];\n                    case 4:\n                        item.setAttribute(\"data-processed\", \"true\");\n                        return [2 /*return*/];\n                }\n            });\n        }); });\n    });\n};\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.\n(() => {\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": () => (/* binding */ src)\n});\n\n// EXTERNAL MODULE: ./src/method.ts + 4 modules\nvar method = __webpack_require__(270);\n// EXTERNAL MODULE: ./src/ts/constants.ts\nvar constants = __webpack_require__(842);\n// EXTERNAL MODULE: ./src/ts/util/code160to32.ts\nvar code160to32 = __webpack_require__(930);\n;// ./src/ts/markdown/getMarkdown.ts\n\nvar getMarkdown = function (vditor) {\n    if (vditor.currentMode === \"sv\") {\n        return (0,code160to32/* code160to32 */.p)(\"\".concat(vditor.sv.element.textContent, \"\\n\").replace(/\\n\\n$/, \"\\n\"));\n    }\n    else if (vditor.currentMode === \"wysiwyg\") {\n        return vditor.lute.VditorDOM2Md(vditor.wysiwyg.element.innerHTML);\n    }\n    else if (vditor.currentMode === \"ir\") {\n        return vditor.lute.VditorIRDOM2Md(vditor.ir.element.innerHTML);\n    }\n    return \"\";\n};\n\n// EXTERNAL MODULE: ./src/ts/util/addScript.ts\nvar addScript = __webpack_require__(444);\n;// ./src/ts/devtools/index.ts\n\n\nvar DevTools = /** @class */ (function () {\n    function DevTools() {\n        this.element = document.createElement(\"div\");\n        this.element.className = \"vditor-devtools\";\n        this.element.innerHTML = '<div class=\"vditor-reset--error\"></div><div style=\"height: 100%;\"></div>';\n    }\n    DevTools.prototype.renderEchart = function (vditor) {\n        var _this = this;\n        if (vditor.devtools.element.style.display !== \"block\") {\n            return;\n        }\n        (0,addScript/* addScript */.Z)(\"\".concat(vditor.options.cdn, \"/dist/js/echarts/echarts.min.js?v=5.5.1\"), \"vditorEchartsScript\").then(function () {\n            if (!_this.ASTChart) {\n                _this.ASTChart = echarts.init(vditor.devtools.element.lastElementChild);\n            }\n            try {\n                _this.element.lastElementChild.style.display = \"block\";\n                _this.element.firstElementChild.innerHTML = \"\";\n                _this.ASTChart.setOption({\n                    series: [\n                        {\n                            data: JSON.parse(vditor.lute.RenderEChartsJSON(getMarkdown(vditor))),\n                            initialTreeDepth: -1,\n                            label: {\n                                align: \"left\",\n                                backgroundColor: \"rgba(68, 77, 86, .68)\",\n                                borderRadius: 3,\n                                color: \"#d1d5da\",\n                                fontSize: 12,\n                                lineHeight: 12,\n                                offset: [9, 12],\n                                padding: [2, 4, 2, 4],\n                                position: \"top\",\n                                verticalAlign: \"middle\",\n                            },\n                            lineStyle: {\n                                color: \"#4285f4\",\n                                type: \"curve\",\n                                width: 1,\n                            },\n                            orient: \"vertical\",\n                            roam: true,\n                            type: \"tree\",\n                        },\n                    ],\n                    toolbox: {\n                        bottom: 25,\n                        emphasis: {\n                            iconStyle: {\n                                color: \"#4285f4\",\n                            },\n                        },\n                        feature: {\n                            restore: {\n                                show: true,\n                            },\n                            saveAsImage: {\n                                show: true,\n                            },\n                        },\n                        right: 15,\n                        show: true,\n                    },\n                });\n                _this.ASTChart.resize();\n            }\n            catch (e) {\n                _this.element.lastElementChild.style.display = \"none\";\n                _this.element.firstElementChild.innerHTML = e;\n            }\n        });\n    };\n    return DevTools;\n}());\n\n\n// EXTERNAL MODULE: ./src/ts/util/compatibility.ts\nvar compatibility = __webpack_require__(912);\n;// ./src/ts/toolbar/setToolbar.ts\n\n\nvar removeCurrentToolbar = function (toolbar, names) {\n    names.forEach(function (name) {\n        if (!toolbar[name]) {\n            return;\n        }\n        var itemElement = toolbar[name].children[0];\n        if (itemElement && itemElement.classList.contains(\"vditor-menu--current\")) {\n            itemElement.classList.remove(\"vditor-menu--current\");\n        }\n    });\n};\nvar setCurrentToolbar = function (toolbar, names) {\n    names.forEach(function (name) {\n        if (!toolbar[name]) {\n            return;\n        }\n        var itemElement = toolbar[name].children[0];\n        if (itemElement && !itemElement.classList.contains(\"vditor-menu--current\")) {\n            itemElement.classList.add(\"vditor-menu--current\");\n        }\n    });\n};\nvar enableToolbar = function (toolbar, names) {\n    names.forEach(function (name) {\n        if (!toolbar[name]) {\n            return;\n        }\n        var itemElement = toolbar[name].children[0];\n        if (itemElement && itemElement.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n            itemElement.classList.remove(constants/* Constants */.Y.CLASS_MENU_DISABLED);\n        }\n    });\n};\nvar disableToolbar = function (toolbar, names) {\n    names.forEach(function (name) {\n        if (!toolbar[name]) {\n            return;\n        }\n        var itemElement = toolbar[name].children[0];\n        if (itemElement && !itemElement.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n            itemElement.classList.add(constants/* Constants */.Y.CLASS_MENU_DISABLED);\n        }\n    });\n};\nvar hideToolbar = function (toolbar, names) {\n    names.forEach(function (name) {\n        if (!toolbar[name]) {\n            return;\n        }\n        if (toolbar[name]) {\n            toolbar[name].style.display = \"none\";\n        }\n    });\n};\nvar showToolbar = function (toolbar, names) {\n    names.forEach(function (name) {\n        if (!toolbar[name]) {\n            return;\n        }\n        if (toolbar[name]) {\n            toolbar[name].style.display = \"block\";\n        }\n    });\n};\n// \"subToolbar\", \"hint\", \"popover\"\nvar hidePanel = function (vditor, panels, exceptElement) {\n    if (panels.includes(\"subToolbar\")) {\n        vditor.toolbar.element.querySelectorAll(\".vditor-hint\").forEach(function (item) {\n            if (exceptElement && item.isEqualNode(exceptElement)) {\n                return;\n            }\n            item.style.display = \"none\";\n        });\n        if (vditor.toolbar.elements.emoji) {\n            vditor.toolbar.elements.emoji.lastElementChild.style.display = \"none\";\n        }\n    }\n    if (panels.includes(\"hint\")) {\n        vditor.hint.element.style.display = \"none\";\n    }\n    if (vditor.wysiwyg.popover && panels.includes(\"popover\")) {\n        vditor.wysiwyg.popover.style.display = \"none\";\n    }\n};\nvar toggleSubMenu = function (vditor, panelElement, actionBtn, level) {\n    actionBtn.addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        if (actionBtn.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n            return;\n        }\n        vditor.toolbar.element.querySelectorAll(\".vditor-hint--current\").forEach(function (item) {\n            item.classList.remove(\"vditor-hint--current\");\n        });\n        if (panelElement.style.display === \"block\") {\n            panelElement.style.display = \"none\";\n        }\n        else {\n            hidePanel(vditor, [\"subToolbar\", \"hint\", \"popover\"], actionBtn.parentElement.parentElement);\n            if (!actionBtn.classList.contains(\"vditor-tooltipped\")) {\n                actionBtn.classList.add(\"vditor-hint--current\");\n            }\n            panelElement.style.display = \"block\";\n            if (vditor.toolbar.element.getBoundingClientRect().right - actionBtn.getBoundingClientRect().right < 250) {\n                panelElement.classList.add(\"vditor-panel--left\");\n            }\n            else {\n                panelElement.classList.remove(\"vditor-panel--left\");\n            }\n        }\n    });\n};\n\n// EXTERNAL MODULE: ./src/ts/util/hasClosest.ts\nvar hasClosest = __webpack_require__(145);\n// EXTERNAL MODULE: ./src/ts/util/hasClosestByHeadings.ts\nvar hasClosestByHeadings = __webpack_require__(667);\n;// ./src/ts/util/log.ts\nvar log = function (method, content, type, print) {\n    if (print) {\n        // @ts-ignore\n        console.log(\"\".concat(method, \" - \").concat(type, \": \").concat(content));\n    }\n};\n\n// EXTERNAL MODULE: ./src/ts/markdown/abcRender.ts\nvar abcRender = __webpack_require__(449);\n// EXTERNAL MODULE: ./src/ts/markdown/chartRender.ts\nvar chartRender = __webpack_require__(801);\n// EXTERNAL MODULE: ./src/ts/markdown/codeRender.ts\nvar codeRender = __webpack_require__(756);\n// EXTERNAL MODULE: ./src/ts/markdown/flowchartRender.ts\nvar flowchartRender = __webpack_require__(889);\n// EXTERNAL MODULE: ./src/ts/markdown/graphvizRender.ts\nvar graphvizRender = __webpack_require__(516);\n// EXTERNAL MODULE: ./src/ts/markdown/highlightRender.ts\nvar highlightRender = __webpack_require__(625);\n// EXTERNAL MODULE: ./src/ts/markdown/mathRender.ts\nvar mathRender = __webpack_require__(947);\n// EXTERNAL MODULE: ./src/ts/markdown/mermaidRender.ts\nvar mermaidRender = __webpack_require__(998);\n// EXTERNAL MODULE: ./src/ts/markdown/markmapRender.ts\nvar markmapRender = __webpack_require__(316);\n// EXTERNAL MODULE: ./src/ts/markdown/mindmapRender.ts\nvar mindmapRender = __webpack_require__(883);\n// EXTERNAL MODULE: ./src/ts/markdown/plantumlRender.ts\nvar plantumlRender = __webpack_require__(816);\n// EXTERNAL MODULE: ./src/ts/markdown/SMILESRender.ts\nvar SMILESRender = __webpack_require__(292);\n;// ./src/ts/util/processCode.ts\n\n\n\n\n\n\n\n\n\n\n\n\nvar processPasteCode = function (html, text, type) {\n    if (type === void 0) { type = \"sv\"; }\n    var tempElement = document.createElement(\"div\");\n    tempElement.innerHTML = html;\n    var isCode = false;\n    if (tempElement.childElementCount === 1 &&\n        tempElement.lastElementChild.style.fontFamily.indexOf(\"monospace\") > -1) {\n        // VS Code\n        isCode = true;\n    }\n    var pres = tempElement.querySelectorAll(\"pre\");\n    if (tempElement.childElementCount === 1 && pres.length === 1\n        && pres[0].className !== \"vditor-wysiwyg\"\n        && pres[0].className !== \"vditor-sv\") {\n        // IDE\n        isCode = true;\n    }\n    if (html.indexOf('\\n<p class=\"p1\">') === 0) {\n        // Xcode\n        isCode = true;\n    }\n    if (tempElement.childElementCount === 1 && tempElement.firstElementChild.tagName === \"TABLE\" &&\n        tempElement.querySelector(\".line-number\") && tempElement.querySelector(\".line-content\")) {\n        // 网页源码\n        isCode = true;\n    }\n    if (isCode) {\n        var code = text || html;\n        if (/\\n/.test(code) || pres.length === 1) {\n            if (type === \"wysiwyg\") {\n                return \"<div class=\\\"vditor-wysiwyg__block\\\" data-block=\\\"0\\\" data-type=\\\"code-block\\\"><pre><code>\".concat(code.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\"), \"<wbr></code></pre></div>\");\n            }\n            return \"\\n```\\n\" + code.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\") + \"\\n```\";\n        }\n        else {\n            if (type === \"wysiwyg\") {\n                return \"<code>\".concat(code.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\"), \"</code><wbr>\");\n            }\n            return \"`\".concat(code, \"`\");\n        }\n    }\n    return false;\n};\nvar processCodeRender = function (previewPanel, vditor) {\n    if (!previewPanel) {\n        return;\n    }\n    if (previewPanel.parentElement.getAttribute(\"data-type\") === \"html-block\") {\n        previewPanel.setAttribute(\"data-render\", \"1\");\n        return;\n    }\n    var language = previewPanel.firstElementChild.className.replace(\"language-\", \"\");\n    if (language === \"abc\") {\n        (0,abcRender/* abcRender */.$)(previewPanel, vditor.options.cdn);\n    }\n    else if (language === \"mermaid\") {\n        (0,mermaidRender/* mermaidRender */.e)(previewPanel, vditor.options.cdn, vditor.options.theme);\n    }\n    else if (language === \"smiles\") {\n        (0,SMILESRender/* SMILESRender */.Y)(previewPanel, vditor.options.cdn, vditor.options.theme);\n    }\n    else if (language === \"markmap\") {\n        (0,markmapRender/* markmapRender */.K)(previewPanel, vditor.options.cdn);\n    }\n    else if (language === \"flowchart\") {\n        (0,flowchartRender/* flowchartRender */.D)(previewPanel, vditor.options.cdn);\n    }\n    else if (language === \"echarts\") {\n        (0,chartRender/* chartRender */.v)(previewPanel, vditor.options.cdn, vditor.options.theme);\n    }\n    else if (language === \"mindmap\") {\n        (0,mindmapRender/* mindmapRender */.l)(previewPanel, vditor.options.cdn, vditor.options.theme);\n    }\n    else if (language === \"plantuml\") {\n        (0,plantumlRender/* plantumlRender */.M)(previewPanel, vditor.options.cdn);\n    }\n    else if (language === \"graphviz\") {\n        (0,graphvizRender/* graphvizRender */.m)(previewPanel, vditor.options.cdn);\n    }\n    else if (language === \"math\") {\n        (0,mathRender/* mathRender */.T)(previewPanel, { cdn: vditor.options.cdn, math: vditor.options.preview.math });\n    }\n    else {\n        var cRender = vditor.options.customRenders.find(function (item) {\n            if (item.language === language) {\n                item.render(previewPanel, vditor);\n                return true;\n            }\n        });\n        if (!cRender) {\n            (0,highlightRender/* highlightRender */.$)(Object.assign({}, vditor.options.preview.hljs), previewPanel, vditor.options.cdn);\n            (0,codeRender/* codeRender */.o)(previewPanel, vditor.options.preview.hljs);\n        }\n    }\n    previewPanel.setAttribute(\"data-render\", \"1\");\n};\n\n// EXTERNAL MODULE: ./src/ts/util/selection.ts\nvar selection = __webpack_require__(782);\n;// ./src/ts/util/toc.ts\n\n\n\n\nvar renderToc = function (vditor) {\n    if (vditor.currentMode === \"sv\") {\n        return;\n    }\n    var editorElement = vditor[vditor.currentMode].element;\n    var tocHTML = vditor.outline.render(vditor);\n    if (tocHTML === \"\") {\n        tocHTML = \"[ToC]\";\n    }\n    editorElement.querySelectorAll('[data-type=\"toc-block\"]').forEach(function (item) {\n        item.innerHTML = tocHTML;\n        (0,mathRender/* mathRender */.T)(item, {\n            cdn: vditor.options.cdn,\n            math: vditor.options.preview.math,\n        });\n    });\n};\nvar clickToc = function (event, vditor) {\n    var spanElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(event.target, \"SPAN\");\n    if (spanElement && (0,hasClosest/* hasClosestByClassName */.KJ)(spanElement, \"vditor-toc\")) {\n        var headingElement = vditor[vditor.currentMode].element.querySelector(\"#\" + spanElement.getAttribute(\"data-target-id\"));\n        if (headingElement) {\n            if (vditor.options.height === \"auto\") {\n                var windowScrollY = headingElement.offsetTop + vditor.element.offsetTop;\n                if (!vditor.options.toolbarConfig.pin) {\n                    windowScrollY += vditor.toolbar.element.offsetHeight;\n                }\n                window.scrollTo(window.scrollX, windowScrollY);\n            }\n            else {\n                if (vditor.element.offsetTop < window.scrollY) {\n                    window.scrollTo(window.scrollX, vditor.element.offsetTop);\n                }\n                vditor[vditor.currentMode].element.scrollTop = headingElement.offsetTop;\n            }\n        }\n        return;\n    }\n};\nvar keydownToc = function (blockElement, vditor, event, range) {\n    // toc 前无元素，插入空块\n    if (blockElement.previousElementSibling &&\n        blockElement.previousElementSibling.classList.contains(\"vditor-toc\")) {\n        if (event.key === \"Backspace\" &&\n            (0,selection/* getSelectPosition */.ED)(blockElement, vditor[vditor.currentMode].element, range).start === 0) {\n            blockElement.previousElementSibling.remove();\n            execAfterRender(vditor);\n            return true;\n        }\n        if (insertBeforeBlock(vditor, event, range, blockElement, blockElement.previousElementSibling)) {\n            return true;\n        }\n    }\n    // toc 后无元素，插入空块\n    if (blockElement.nextElementSibling &&\n        blockElement.nextElementSibling.classList.contains(\"vditor-toc\")) {\n        if (event.key === \"Delete\" &&\n            (0,selection/* getSelectPosition */.ED)(blockElement, vditor[vditor.currentMode].element, range).start\n                >= blockElement.textContent.trimRight().length) {\n            blockElement.nextElementSibling.remove();\n            execAfterRender(vditor);\n            return true;\n        }\n        if (insertAfterBlock(vditor, event, range, blockElement, blockElement.nextElementSibling)) {\n            return true;\n        }\n    }\n    // toc 删除\n    if (event.key === \"Backspace\" || event.key === \"Delete\") {\n        var tocElement = (0,hasClosest/* hasClosestByClassName */.KJ)(range.startContainer, \"vditor-toc\");\n        if (tocElement) {\n            tocElement.remove();\n            execAfterRender(vditor);\n            return true;\n        }\n    }\n};\n\n;// ./src/ts/ir/input.ts\n\n\n\n\n\n\n\n\n\n\nvar input = function (vditor, range, ignoreSpace, event) {\n    if (ignoreSpace === void 0) { ignoreSpace = false; }\n    var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);\n    // 前后可以输入空格\n    if (blockElement && !ignoreSpace && blockElement.getAttribute(\"data-type\") !== \"code-block\") {\n        if ((isHrMD(blockElement.innerHTML) && blockElement.previousElementSibling) ||\n            isHeadingMD(blockElement.innerHTML)) {\n            return;\n        }\n        // 前后空格处理\n        var startOffset = (0,selection/* getSelectPosition */.ED)(blockElement, vditor.ir.element, range).start;\n        // 开始可以输入空格\n        var startSpace = true;\n        for (var i = startOffset - 1; \n        // 软换行后有空格\n        i > blockElement.textContent.substr(0, startOffset).lastIndexOf(\"\\n\"); i--) {\n            if (blockElement.textContent.charAt(i) !== \" \" &&\n                // 多个 tab 前删除不形成代码块 https://github.com/Vanessa219/vditor/issues/162 1\n                blockElement.textContent.charAt(i) !== \"\\t\") {\n                startSpace = false;\n                break;\n            }\n        }\n        if (startOffset === 0) {\n            startSpace = false;\n        }\n        // 结尾可以输入空格\n        var endSpace = true;\n        for (var i = startOffset - 1; i < blockElement.textContent.length; i++) {\n            if (blockElement.textContent.charAt(i) !== \" \" && blockElement.textContent.charAt(i) !== \"\\n\") {\n                endSpace = false;\n                break;\n            }\n        }\n        if (startSpace) {\n            if (typeof vditor.options.input === \"function\") {\n                vditor.options.input(getMarkdown(vditor));\n            }\n            return;\n        }\n        // https://github.com/Vanessa219/vditor/issues/729\n        if (endSpace && /^#{1,6} $/.test(blockElement.textContent)) {\n            endSpace = false;\n        }\n        if (endSpace) {\n            var markerElement = (0,hasClosest/* hasClosestByClassName */.KJ)(range.startContainer, \"vditor-ir__marker\");\n            if (markerElement) {\n                // inline marker space https://github.com/Vanessa219/vditor/issues/239\n            }\n            else {\n                var previousNode = range.startContainer.previousSibling;\n                if (previousNode && previousNode.nodeType !== 3 && previousNode.classList.contains(\"vditor-ir__node--expand\")) {\n                    // FireFox https://github.com/Vanessa219/vditor/issues/239\n                    previousNode.classList.remove(\"vditor-ir__node--expand\");\n                }\n                if (typeof vditor.options.input === \"function\") {\n                    vditor.options.input(getMarkdown(vditor));\n                }\n                return;\n            }\n        }\n    }\n    vditor.ir.element.querySelectorAll(\".vditor-ir__node--expand\").forEach(function (item) {\n        item.classList.remove(\"vditor-ir__node--expand\");\n    });\n    if (!blockElement) {\n        // 使用顶级块元素，应使用 innerHTML\n        blockElement = vditor.ir.element;\n    }\n    // document.exeComment insertHTML 会插入 wbr\n    if (!blockElement.querySelector(\"wbr\")) {\n        var previewRenderElement = (0,hasClosest/* hasClosestByClassName */.KJ)(range.startContainer, \"vditor-ir__preview\");\n        if (previewRenderElement) {\n            previewRenderElement.previousElementSibling.insertAdjacentHTML(\"beforeend\", \"<wbr>\");\n        }\n        else {\n            range.insertNode(document.createElement(\"wbr\"));\n        }\n    }\n    // 清除浏览器自带的样式\n    blockElement.querySelectorAll(\"[style]\").forEach(function (item) {\n        item.removeAttribute(\"style\");\n    });\n    if (blockElement.getAttribute(\"data-type\") === \"link-ref-defs-block\") {\n        // 修改链接引用\n        blockElement = vditor.ir.element;\n    }\n    var isIRElement = blockElement.isEqualNode(vditor.ir.element);\n    var footnoteElement = (0,hasClosest/* hasClosestByAttribute */.Th)(blockElement, \"data-type\", \"footnotes-block\");\n    var html = \"\";\n    if (!isIRElement) {\n        var blockquoteElement = (0,hasClosestByHeadings/* hasClosestByTag */.f)(range.startContainer, \"BLOCKQUOTE\");\n        // 列表需要到最顶层\n        var topListElement = (0,hasClosest/* getTopList */.KR)(range.startContainer);\n        if (topListElement) {\n            blockElement = topListElement;\n        }\n        // 应到引用层，否则 > --- 会解析为 front-matter；列表中有 blockquote 则解析 blockquote；blockquote 中有列表则解析列表\n        if (blockquoteElement && (!topListElement || (topListElement && !blockquoteElement.contains(topListElement)))) {\n            blockElement = blockquoteElement;\n        }\n        // 修改脚注\n        if (footnoteElement) {\n            blockElement = footnoteElement;\n        }\n        html = blockElement.outerHTML;\n        if (blockElement.tagName === \"UL\" || blockElement.tagName === \"OL\") {\n            // 如果为列表的话，需要把上下的列表都重绘\n            var listPrevElement = blockElement.previousElementSibling;\n            var listNextElement = blockElement.nextElementSibling;\n            if (listPrevElement && (listPrevElement.tagName === \"UL\" || listPrevElement.tagName === \"OL\")) {\n                html = listPrevElement.outerHTML + html;\n                listPrevElement.remove();\n            }\n            if (listNextElement && (listNextElement.tagName === \"UL\" || listNextElement.tagName === \"OL\")) {\n                html = html + listNextElement.outerHTML;\n                listNextElement.remove();\n            }\n            // firefox 列表回车不会产生新的 list item https://github.com/Vanessa219/vditor/issues/194\n            html = html.replace(\"<div><wbr><br></div>\", \"<li><p><wbr><br></p></li>\");\n        }\n        else if (blockElement.previousElementSibling &&\n            blockElement.previousElementSibling.textContent.replace(constants/* Constants */.Y.ZWSP, \"\") !== \"\" &&\n            event && event.inputType === \"insertParagraph\") {\n            // 换行时需要处理上一段落\n            html = blockElement.previousElementSibling.outerHTML + html;\n            blockElement.previousElementSibling.remove();\n        }\n        if (!blockElement.innerText.startsWith(\"```\")) {\n            // 添加链接引用\n            vditor.ir.element.querySelectorAll(\"[data-type='link-ref-defs-block']\").forEach(function (item) {\n                if (item && !blockElement.isEqualNode(item)) {\n                    html += item.outerHTML;\n                    item.remove();\n                }\n            });\n            // 添加脚注\n            vditor.ir.element.querySelectorAll(\"[data-type='footnotes-block']\").forEach(function (item) {\n                if (item && !blockElement.isEqualNode(item)) {\n                    html += item.outerHTML;\n                    item.remove();\n                }\n            });\n        }\n    }\n    else {\n        html = blockElement.innerHTML;\n    }\n    log(\"SpinVditorIRDOM\", html, \"argument\", vditor.options.debugger);\n    html = vditor.lute.SpinVditorIRDOM(html);\n    log(\"SpinVditorIRDOM\", html, \"result\", vditor.options.debugger);\n    if (isIRElement) {\n        blockElement.innerHTML = html;\n    }\n    else {\n        blockElement.outerHTML = html;\n        // 更新正文中的 tip\n        if (footnoteElement) {\n            var footnoteItemElement = (0,hasClosest/* hasClosestByAttribute */.Th)(vditor.ir.element.querySelector(\"wbr\"), \"data-type\", \"footnotes-def\");\n            if (footnoteItemElement) {\n                var footnoteItemText = footnoteItemElement.textContent;\n                var marker = footnoteItemText.substring(1, footnoteItemText.indexOf(\"]:\"));\n                var footnoteRefElement = vditor.ir.element.querySelector(\"sup[data-type=\\\"footnotes-ref\\\"][data-footnotes-label=\\\"\".concat(marker, \"\\\"]\"));\n                if (footnoteRefElement) {\n                    footnoteRefElement.setAttribute(\"aria-label\", footnoteItemText.substr(marker.length + 3).trim().substr(0, 24));\n                }\n            }\n        }\n    }\n    //  linkref 合并及添加\n    var firstLinkRefDefElement;\n    var allLinkRefDefsElement = vditor.ir.element.querySelectorAll(\"[data-type='link-ref-defs-block']\");\n    allLinkRefDefsElement.forEach(function (item, index) {\n        if (index === 0) {\n            firstLinkRefDefElement = item;\n        }\n        else {\n            firstLinkRefDefElement.insertAdjacentHTML(\"beforeend\", item.innerHTML);\n            item.remove();\n        }\n    });\n    if (allLinkRefDefsElement.length > 0) {\n        vditor.ir.element.insertAdjacentElement(\"beforeend\", allLinkRefDefsElement[0]);\n    }\n    // 脚注合并后添加的末尾\n    var firstFootnoteElement;\n    var allFootnoteElement = vditor.ir.element.querySelectorAll(\"[data-type='footnotes-block']\");\n    allFootnoteElement.forEach(function (item, index) {\n        if (index === 0) {\n            firstFootnoteElement = item;\n        }\n        else {\n            firstFootnoteElement.insertAdjacentHTML(\"beforeend\", item.innerHTML);\n            item.remove();\n        }\n    });\n    if (allFootnoteElement.length > 0) {\n        vditor.ir.element.insertAdjacentElement(\"beforeend\", allFootnoteElement[0]);\n    }\n    (0,selection/* setRangeByWbr */.ir)(vditor.ir.element, range);\n    vditor.ir.element.querySelectorAll(\".vditor-ir__preview[data-render='2']\").forEach(function (item) {\n        processCodeRender(item, vditor);\n    });\n    renderToc(vditor);\n    process_processAfterRender(vditor, {\n        enableAddUndoStack: true,\n        enableHint: true,\n        enableInput: true,\n    });\n};\n\n;// ./src/ts/util/hotKey.ts\n\n// 是否匹配 ⇧⌘[] / ⌘[] / ⌥[] / ⌥⌘[] / ⇧Tab / []\nvar matchHotKey = function (hotKey, event) {\n    if (hotKey === \"\") {\n        return false;\n    }\n    // []\n    if (hotKey.indexOf(\"⇧\") === -1 && hotKey.indexOf(\"⌘\") === -1 && hotKey.indexOf(\"⌥\") === -1) {\n        if (!(0,compatibility/* isCtrl */._0)(event) && !event.altKey && !event.shiftKey && event.code === hotKey) {\n            return true;\n        }\n        return false;\n    }\n    // 是否匹配 ⇧Tab\n    if (hotKey === \"⇧Tab\") {\n        if (!(0,compatibility/* isCtrl */._0)(event) && !event.altKey && event.shiftKey && event.code === \"Tab\") {\n            return true;\n        }\n        return false;\n    }\n    var hotKeys = hotKey.split(\"\");\n    if (hotKey.startsWith(\"⌥\")) {\n        // 是否匹配 ⌥[] / ⌥⌘[]\n        var keyCode = hotKeys.length === 3 ? hotKeys[2] : hotKeys[1];\n        if ((hotKeys.length === 3 ? (0,compatibility/* isCtrl */._0)(event) : !(0,compatibility/* isCtrl */._0)(event)) && event.altKey && !event.shiftKey &&\n            event.code === (/^[0-9]$/.test(keyCode) ? \"Digit\" : \"Key\") + keyCode) {\n            return true;\n        }\n        return false;\n    }\n    // 是否匹配 ⇧⌘[] / ⌘[]\n    if (hotKey === \"⌘Enter\") {\n        hotKeys = [\"⌘\", \"Enter\"];\n    }\n    var hasShift = hotKeys.length > 2 && (hotKeys[0] === \"⇧\");\n    var key = (hasShift ? hotKeys[2] : hotKeys[1]);\n    if (hasShift && ((0,compatibility/* isFirefox */.gm)() || !/Mac/.test(navigator.platform))) {\n        if (key === \"-\") {\n            key = \"_\";\n        }\n        else if (key === \"=\") {\n            key = \"+\";\n        }\n    }\n    if ((0,compatibility/* isCtrl */._0)(event) && event.key.toLowerCase() === key.toLowerCase() && !event.altKey\n        && ((!hasShift && !event.shiftKey) || (hasShift && event.shiftKey))) {\n        return true;\n    }\n    return false;\n};\n\n;// ./src/ts/ir/expandMarker.ts\n\n\nvar nextIsNode = function (range) {\n    var startContainer = range.startContainer;\n    if (startContainer.nodeType === 3 && startContainer.nodeValue.length !== range.startOffset) {\n        return false;\n    }\n    var nextNode = startContainer.nextSibling;\n    while (nextNode && nextNode.textContent === \"\") {\n        nextNode = nextNode.nextSibling;\n    }\n    if (!nextNode) {\n        // *em*|**string**\n        var markerElement = (0,hasClosest/* hasClosestByClassName */.KJ)(startContainer, \"vditor-ir__marker\");\n        if (markerElement && !markerElement.nextSibling) {\n            var parentNextNode = startContainer.parentElement.parentElement.nextSibling;\n            if (parentNextNode && parentNextNode.nodeType !== 3 &&\n                parentNextNode.classList.contains(\"vditor-ir__node\")) {\n                return parentNextNode;\n            }\n        }\n        return false;\n    }\n    else if (nextNode && nextNode.nodeType !== 3 && nextNode.classList.contains(\"vditor-ir__node\") &&\n        !nextNode.getAttribute(\"data-block\")) {\n        // test|*em*\n        return nextNode;\n    }\n    return false;\n};\nvar previousIsNode = function (range) {\n    var startContainer = range.startContainer;\n    var previousNode = startContainer.previousSibling;\n    if (startContainer.nodeType === 3 && range.startOffset === 0 && previousNode && previousNode.nodeType !== 3 &&\n        // *em*|text\n        previousNode.classList.contains(\"vditor-ir__node\") && !previousNode.getAttribute(\"data-block\")) {\n        return previousNode;\n    }\n    return false;\n};\nvar expandMarker = function (range, vditor) {\n    vditor.ir.element.querySelectorAll(\".vditor-ir__node--expand\").forEach(function (item) {\n        item.classList.remove(\"vditor-ir__node--expand\");\n    });\n    var nodeElement = (0,hasClosest/* hasTopClosestByClassName */.XW)(range.startContainer, \"vditor-ir__node\");\n    var nodeElementEnd = !range.collapsed && (0,hasClosest/* hasTopClosestByClassName */.XW)(range.endContainer, \"vditor-ir__node\");\n    // 选中文本为同一个 nodeElement 内时，需要展开\n    if (!range.collapsed && (!nodeElement || nodeElement !== nodeElementEnd)) {\n        return;\n    }\n    if (nodeElement) {\n        nodeElement.classList.add(\"vditor-ir__node--expand\");\n        nodeElement.classList.remove(\"vditor-ir__node--hidden\");\n        // https://github.com/Vanessa219/vditor/issues/615 safari中光标位置跳动\n        (0,selection/* setSelectionFocus */.jl)(range);\n    }\n    var nextNode = nextIsNode(range);\n    if (nextNode) {\n        nextNode.classList.add(\"vditor-ir__node--expand\");\n        nextNode.classList.remove(\"vditor-ir__node--hidden\");\n        return;\n    }\n    var previousNode = previousIsNode(range);\n    if (previousNode) {\n        previousNode.classList.add(\"vditor-ir__node--expand\");\n        previousNode.classList.remove(\"vditor-ir__node--hidden\");\n        return;\n    }\n};\n\n;// ./src/ts/ir/processKeydown.ts\n\n\n\n\n\n\n\n\n\n\n\nvar processKeydown = function (vditor, event) {\n    vditor.ir.composingLock = event.isComposing;\n    if (event.isComposing) {\n        return false;\n    }\n    // 添加第一次记录 undo 的光标\n    if (event.key.indexOf(\"Arrow\") === -1 && event.key !== \"Meta\" && event.key !== \"Control\" && event.key !== \"Alt\" &&\n        event.key !== \"Shift\" && event.key !== \"CapsLock\" && event.key !== \"Escape\" && !/^F\\d{1,2}$/.test(event.key)) {\n        vditor.undo.recordFirstPosition(vditor, event);\n    }\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    var startContainer = range.startContainer;\n    if (!fixGSKeyBackspace(event, vditor, startContainer)) {\n        return false;\n    }\n    fixCJKPosition(range, vditor, event);\n    fixHR(range);\n    // 仅处理以下快捷键操作\n    if (event.key !== \"Enter\" && event.key !== \"Tab\" && event.key !== \"Backspace\" && event.key.indexOf(\"Arrow\") === -1\n        && !(0,compatibility/* isCtrl */._0)(event) && event.key !== \"Escape\" && event.key !== \"Delete\") {\n        return false;\n    }\n    // 斜体、粗体、内联代码块中换行\n    var newlineElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-newline\", \"1\");\n    if (!(0,compatibility/* isCtrl */._0)(event) && !event.altKey && !event.shiftKey && event.key === \"Enter\" && newlineElement\n        && range.startOffset < newlineElement.textContent.length) {\n        var beforeMarkerElement = newlineElement.previousElementSibling;\n        if (beforeMarkerElement) {\n            range.insertNode(document.createTextNode(beforeMarkerElement.textContent));\n            range.collapse(false);\n        }\n        var afterMarkerElement = newlineElement.nextSibling;\n        if (afterMarkerElement) {\n            range.insertNode(document.createTextNode(afterMarkerElement.textContent));\n            range.collapse(true);\n        }\n    }\n    var pElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"P\");\n    // md 处理\n    if (fixMarkdown(event, vditor, pElement, range)) {\n        return true;\n    }\n    // li\n    if (fixList(range, vditor, pElement, event)) {\n        return true;\n    }\n    // blockquote\n    if (fixBlockquote(vditor, range, event, pElement)) {\n        return true;\n    }\n    // 代码块\n    var preRenderElement = (0,hasClosest/* hasClosestByClassName */.KJ)(startContainer, \"vditor-ir__marker--pre\");\n    if (preRenderElement && preRenderElement.tagName === \"PRE\") {\n        var codeRenderElement = preRenderElement.firstChild;\n        if (fixCodeBlock(vditor, event, preRenderElement, range)) {\n            return true;\n        }\n        // 数学公式上无元素，按上或左将添加新块\n        if ((codeRenderElement.getAttribute(\"data-type\") === \"math-block\"\n            || codeRenderElement.getAttribute(\"data-type\") === \"html-block\") &&\n            insertBeforeBlock(vditor, event, range, codeRenderElement, preRenderElement.parentElement)) {\n            return true;\n        }\n        // 代码块下无元素或者为代码块/table 元素，添加空块\n        if (insertAfterBlock(vditor, event, range, codeRenderElement, preRenderElement.parentElement)) {\n            return true;\n        }\n    }\n    // 代码块语言\n    var preBeforeElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"code-block-info\");\n    if (preBeforeElement) {\n        if (event.key === \"Enter\" || event.key === \"Tab\") {\n            range.selectNodeContents(preBeforeElement.nextElementSibling.firstChild);\n            range.collapse(true);\n            event.preventDefault();\n            hidePanel(vditor, [\"hint\"]);\n            return true;\n        }\n        if (event.key === \"Backspace\") {\n            var start = (0,selection/* getSelectPosition */.ED)(preBeforeElement, vditor.ir.element).start;\n            if (start === 1) { // 删除零宽空格\n                range.setStart(startContainer, 0);\n            }\n            if (start === 2) { // 删除时清空自动补全语言\n                vditor.hint.recentLanguage = \"\";\n            }\n        }\n        if (insertBeforeBlock(vditor, event, range, preBeforeElement, preBeforeElement.parentElement)) {\n            // 上无元素，按上或左将添加新块\n            hidePanel(vditor, [\"hint\"]);\n            return true;\n        }\n    }\n    // table\n    var cellElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TD\") ||\n        (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TH\");\n    if (event.key.indexOf(\"Arrow\") > -1 && cellElement) {\n        var tableElement = isFirstCell(cellElement);\n        if (tableElement && insertBeforeBlock(vditor, event, range, cellElement, tableElement)) {\n            return true;\n        }\n        var table2Element = isLastCell(cellElement);\n        if (table2Element && insertAfterBlock(vditor, event, range, cellElement, table2Element)) {\n            return true;\n        }\n    }\n    if (fixTable(vditor, event, range)) {\n        return true;\n    }\n    // task list\n    if (fixTask(vditor, range, event)) {\n        return true;\n    }\n    // tab\n    if (fixTab(vditor, range, event)) {\n        return true;\n    }\n    var headingElement = (0,hasClosestByHeadings/* hasClosestByHeadings */.c)(startContainer);\n    if (headingElement) {\n        // enter++: 标题变大\n        if (matchHotKey(\"⌘=\", event)) {\n            var headingMarkerElement = headingElement.querySelector(\".vditor-ir__marker--heading\");\n            if (headingMarkerElement && headingMarkerElement.textContent.trim().length > 1) {\n                process_processHeading(vditor, headingMarkerElement.textContent.substr(1));\n            }\n            event.preventDefault();\n            return true;\n        }\n        // enter++: 标题变小\n        if (matchHotKey(\"⌘-\", event)) {\n            var headingMarkerElement = headingElement.querySelector(\".vditor-ir__marker--heading\");\n            if (headingMarkerElement && headingMarkerElement.textContent.trim().length < 6) {\n                process_processHeading(vditor, headingMarkerElement.textContent.trim() + \"# \");\n            }\n            event.preventDefault();\n            return true;\n        }\n    }\n    var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(startContainer);\n    if (event.key === \"Backspace\" && !(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey && range.toString() === \"\") {\n        if (fixDelete(vditor, range, event, pElement)) {\n            return true;\n        }\n        if (blockElement && blockElement.previousElementSibling\n            && blockElement.tagName !== \"UL\" && blockElement.tagName !== \"OL\"\n            && (blockElement.previousElementSibling.getAttribute(\"data-type\") === \"code-block\" ||\n                blockElement.previousElementSibling.getAttribute(\"data-type\") === \"math-block\")) {\n            var rangeStart = (0,selection/* getSelectPosition */.ED)(blockElement, vditor.ir.element, range).start;\n            if (rangeStart === 0 || (rangeStart === 1 && blockElement.innerText.startsWith(constants/* Constants */.Y.ZWSP))) {\n                // 当前块删除后光标落于代码渲染块上，当前块会被删除，因此需要阻止事件，不能和 keyup 中的代码块处理合并\n                range.selectNodeContents(blockElement.previousElementSibling.querySelector(\".vditor-ir__marker--pre code\"));\n                range.collapse(false);\n                expandMarker(range, vditor);\n                if (blockElement.textContent.trim().replace(constants/* Constants */.Y.ZWSP, \"\") === \"\") {\n                    // 当前块为空且不是最后一个时，需要删除\n                    blockElement.remove();\n                    process_processAfterRender(vditor);\n                }\n                event.preventDefault();\n                return true;\n            }\n        }\n        // 光标位于标题前，marker 后\n        if (headingElement) {\n            var headingLength = headingElement.firstElementChild.textContent.length;\n            if ((0,selection/* getSelectPosition */.ED)(headingElement, vditor.ir.element).start === headingLength && headingLength !== 0) {\n                range.setStart(headingElement.firstElementChild.firstChild, headingLength - 1);\n                range.collapse(true);\n                (0,selection/* setSelectionFocus */.jl)(range);\n            }\n        }\n    }\n    if ((event.key === \"ArrowUp\" || event.key === \"ArrowDown\") && blockElement) {\n        // https://github.com/Vanessa219/vditor/issues/358\n        blockElement.querySelectorAll(\".vditor-ir__node\").forEach(function (item) {\n            if (!item.contains(startContainer)) {\n                item.classList.add(\"vditor-ir__node--hidden\");\n            }\n        });\n        if (fixFirefoxArrowUpTable(event, blockElement, range)) {\n            return true;\n        }\n    }\n    fixCursorDownInlineMath(range, event.key);\n    if (blockElement && keydownToc(blockElement, vditor, event, range)) {\n        event.preventDefault();\n        return true;\n    }\n    return false;\n};\n\n// EXTERNAL MODULE: ./src/ts/preview/image.ts\nvar preview_image = __webpack_require__(649);\n;// ./src/ts/sv/combineFootnote.ts\n/**\n * 合并脚注\n * @param elements vditor.sv.element\n * @param afterCombine 每个脚注块合并完成后的回调, param: root为合并后的脚注块\n */\nvar combineFootnote = function (elements, afterCombine) {\n    elements.querySelectorAll(\"[data-type=footnotes-link]\").forEach(function (el) {\n        var root = el.parentElement;\n        var footnote = root.nextSibling;\n        // 寻找所有该脚注的块\n        while (footnote) {\n            if (footnote.textContent.startsWith(\"    \")) {\n                // 解析到四个空格，加入到root并继续解析\n                var thisNode = footnote;\n                thisNode.childNodes.forEach(function (node) {\n                    root.append(node.cloneNode(true));\n                });\n                footnote = footnote.nextSibling;\n                thisNode.remove();\n            }\n            else {\n                // 非空格停止解析\n                break;\n            }\n        }\n        afterCombine && afterCombine(root);\n    });\n};\n\n;// ./src/ts/sv/inputEvent.ts\n\n\n\n\n\nvar inputEvent = function (vditor, event) {\n    var _a;\n    var range = getSelection().getRangeAt(0).cloneRange();\n    var startContainer = range.startContainer;\n    if (range.startContainer.nodeType !== 3 && range.startContainer.tagName === \"DIV\") {\n        startContainer = range.startContainer.childNodes[range.startOffset - 1];\n    }\n    var blockElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-block\", \"0\");\n    // 不调用 lute 解析\n    if (blockElement && event && (event.inputType === \"deleteContentBackward\" || event.data === \" \")) {\n        // 开始可以输入空格\n        var startOffset = (0,selection/* getSelectPosition */.ED)(blockElement, vditor.sv.element, range).start;\n        var startSpace = true;\n        for (var i = startOffset - 1; \n        // 软换行后有空格\n        i > blockElement.textContent.substr(0, startOffset).lastIndexOf(\"\\n\"); i--) {\n            if (blockElement.textContent.charAt(i) !== \" \" &&\n                // 多个 tab 前删除不形成代码块 https://github.com/Vanessa219/vditor/issues/162 1\n                blockElement.textContent.charAt(i) !== \"\\t\") {\n                startSpace = false;\n                break;\n            }\n        }\n        if (startOffset === 0) {\n            startSpace = false;\n        }\n        if (startSpace) {\n            processAfterRender(vditor);\n            return;\n        }\n        if (event.inputType === \"deleteContentBackward\") {\n            // https://github.com/Vanessa219/vditor/issues/584 代码块 marker 删除\n            var codeBlockMarkerElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"code-block-open-marker\") ||\n                (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"code-block-close-marker\");\n            if (codeBlockMarkerElement) {\n                if (codeBlockMarkerElement.getAttribute(\"data-type\") === \"code-block-close-marker\") {\n                    var openMarkerElement = getSideByType(startContainer, \"code-block-open-marker\");\n                    if (openMarkerElement) {\n                        openMarkerElement.textContent = codeBlockMarkerElement.textContent;\n                        processAfterRender(vditor);\n                        return;\n                    }\n                }\n                if (codeBlockMarkerElement.getAttribute(\"data-type\") === \"code-block-open-marker\") {\n                    var openMarkerElement = getSideByType(startContainer, \"code-block-close-marker\", false);\n                    if (openMarkerElement) {\n                        openMarkerElement.textContent = codeBlockMarkerElement.textContent;\n                        processAfterRender(vditor);\n                        return;\n                    }\n                }\n            }\n            // https://github.com/Vanessa219/vditor/issues/877 数学公式输入删除生成节点\n            var mathBlockMarkerElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"math-block-open-marker\");\n            if (mathBlockMarkerElement) {\n                var mathBlockCloseElement = mathBlockMarkerElement.nextElementSibling.nextElementSibling;\n                if (mathBlockCloseElement && mathBlockCloseElement.getAttribute(\"data-type\") === \"math-block-close-marker\") {\n                    mathBlockCloseElement.remove();\n                    processAfterRender(vditor);\n                }\n                return;\n            }\n            blockElement.querySelectorAll('[data-type=\"code-block-open-marker\"]').forEach(function (item) {\n                if (item.textContent.length === 1) {\n                    item.remove();\n                }\n            });\n            blockElement.querySelectorAll('[data-type=\"code-block-close-marker\"]').forEach(function (item) {\n                if (item.textContent.length === 1) {\n                    item.remove();\n                }\n            });\n            // 标题删除\n            var headingElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"heading-marker\");\n            if (headingElement && headingElement.textContent.indexOf(\"#\") === -1) {\n                processAfterRender(vditor);\n                return;\n            }\n        }\n        // 删除或空格不解析，否则会 format 回去\n        if ((event.data === \" \" || event.inputType === \"deleteContentBackward\") &&\n            ((0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"padding\") // 场景：b 前进行删除 [> 1. a\\n>   b]\n                || (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"li-marker\") // 场景：删除最后一个字符 [* 1\\n* ]\n                || (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"task-marker\") // 场景：删除最后一个字符 [* [ ] ]\n                || (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"blockquote-marker\") // 场景：删除最后一个字符 [> ]\n            )) {\n            processAfterRender(vditor);\n            return;\n        }\n    }\n    if (blockElement && blockElement.textContent.trimRight() === \"$$\") {\n        // 内联数学公式\n        processAfterRender(vditor);\n        return;\n    }\n    if (!blockElement) {\n        blockElement = vditor.sv.element;\n    }\n    if (((_a = blockElement.firstElementChild) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-type\")) === \"link-ref-defs-block\") {\n        // 修改链接引用\n        blockElement = vditor.sv.element;\n    }\n    if ((0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"footnotes-link\")) {\n        // 修改脚注角标\n        blockElement = vditor.sv.element;\n    }\n    // 添加光标位置\n    if (blockElement.textContent.indexOf(Lute.Caret) === -1) {\n        // 点击工具栏会插入 Caret\n        range.insertNode(document.createTextNode(Lute.Caret));\n    }\n    // 清除浏览器自带的样式\n    blockElement.querySelectorAll(\"[style]\").forEach(function (item) {\n        item.removeAttribute(\"style\");\n    });\n    blockElement.querySelectorAll(\"font\").forEach(function (item) {\n        item.outerHTML = item.innerHTML;\n    });\n    var html = blockElement.textContent;\n    var isSVElement = blockElement.isEqualNode(vditor.sv.element);\n    if (isSVElement) {\n        html = blockElement.textContent;\n    }\n    else {\n        // 添加前一个块元素\n        if (blockElement.previousElementSibling) {\n            html = blockElement.previousElementSibling.textContent + html;\n            blockElement.previousElementSibling.remove();\n        }\n        if (blockElement.previousElementSibling && html.indexOf(\"---\\n\") === 0) {\n            // 确认 yaml-front 是否为首行\n            html = blockElement.previousElementSibling.textContent + html;\n            blockElement.previousElementSibling.remove();\n        }\n        // 添加链接引用\n        var footnotes_1 = \"\";\n        vditor.sv.element.querySelectorAll(\"[data-type='link-ref-defs-block']\").forEach(function (item, index) {\n            if (item && !blockElement.isEqualNode(item.parentElement)) {\n                footnotes_1 += item.parentElement.textContent + \"\\n\";\n                item.parentElement.remove();\n            }\n        });\n        // 添加脚注到文章头，便于lute处理\n        vditor.sv.element.querySelectorAll(\"[data-type='footnotes-link']\").forEach(function (item, index) {\n            if (item && !blockElement.isEqualNode(item.parentElement)) {\n                footnotes_1 += item.parentElement.textContent + \"\\n\";\n                item.parentElement.remove();\n            }\n        });\n        html = footnotes_1 + html;\n    }\n    html = processSpinVditorSVDOM(html, vditor);\n    if (isSVElement) {\n        blockElement.innerHTML = html;\n    }\n    else {\n        blockElement.outerHTML = html;\n    }\n    vditor.sv.element.querySelectorAll(\"[data-type='link-ref-defs-block']\").forEach(function (item) {\n        vditor.sv.element.insertAdjacentElement(\"beforeend\", item.parentElement);\n    });\n    // 合并脚注\n    combineFootnote(vditor.sv.element, function (root) {\n        vditor.sv.element.insertAdjacentElement(\"beforeend\", root);\n    });\n    (0,selection/* setRangeByWbr */.ir)(vditor.sv.element, range);\n    scrollCenter(vditor);\n    processAfterRender(vditor, {\n        enableAddUndoStack: true,\n        enableHint: true,\n        enableInput: true,\n    });\n};\n\n;// ./src/ts/sv/processKeydown.ts\n\n\n\n\n\n\n\nvar processKeydown_processKeydown = function (vditor, event) {\n    var _a, _b, _c, _d, _e;\n    vditor.sv.composingLock = event.isComposing;\n    if (event.isComposing) {\n        return false;\n    }\n    if (event.key.indexOf(\"Arrow\") === -1 && event.key !== \"Meta\" && event.key !== \"Control\" && event.key !== \"Alt\" &&\n        event.key !== \"Shift\" && event.key !== \"CapsLock\" && event.key !== \"Escape\" && !/^F\\d{1,2}$/.test(event.key)) {\n        vditor.undo.recordFirstPosition(vditor, event);\n    }\n    // 仅处理以下快捷键操作\n    if (event.key !== \"Enter\" && event.key !== \"Tab\" && event.key !== \"Backspace\" && event.key.indexOf(\"Arrow\") === -1\n        && !(0,compatibility/* isCtrl */._0)(event) && event.key !== \"Escape\") {\n        return false;\n    }\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    var startContainer = range.startContainer;\n    if (range.startContainer.nodeType !== 3 && range.startContainer.tagName === \"DIV\") {\n        startContainer = range.startContainer.childNodes[range.startOffset - 1];\n    }\n    var textElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"text\");\n    // blockquote\n    var blockquoteMarkerElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"blockquote-marker\");\n    if (!blockquoteMarkerElement && range.startOffset === 0 && textElement && textElement.previousElementSibling &&\n        textElement.previousElementSibling.getAttribute(\"data-type\") === \"blockquote-marker\") {\n        blockquoteMarkerElement = textElement.previousElementSibling;\n    }\n    // 回车逐个删除 blockquote marker 标记\n    if (blockquoteMarkerElement) {\n        if (event.key === \"Enter\" && !(0,compatibility/* isCtrl */._0)(event) && !event.altKey &&\n            blockquoteMarkerElement.nextElementSibling.textContent.trim() === \"\" &&\n            (0,selection/* getSelectPosition */.ED)(blockquoteMarkerElement, vditor.sv.element, range).start ===\n                blockquoteMarkerElement.textContent.length) {\n            if (((_a = blockquoteMarkerElement.previousElementSibling) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-type\")) === \"padding\") {\n                // 列表中存在多行 BQ 时，标记回车需跳出列表\n                blockquoteMarkerElement.previousElementSibling.setAttribute(\"data-action\", \"enter-remove\");\n            }\n            blockquoteMarkerElement.remove();\n            processAfterRender(vditor);\n            event.preventDefault();\n            return true;\n        }\n    }\n    // list item\n    var listMarkerElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"li-marker\");\n    var taskMarkerElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"task-marker\");\n    var listLastMarkerElement = listMarkerElement;\n    if (!listLastMarkerElement) {\n        if (taskMarkerElement && taskMarkerElement.nextElementSibling.getAttribute(\"data-type\") !== \"task-marker\") {\n            listLastMarkerElement = taskMarkerElement;\n        }\n    }\n    if (!listLastMarkerElement && range.startOffset === 0 && textElement && textElement.previousElementSibling &&\n        (textElement.previousElementSibling.getAttribute(\"data-type\") === \"li-marker\" ||\n            textElement.previousElementSibling.getAttribute(\"data-type\") === \"task-marker\")) {\n        listLastMarkerElement = textElement.previousElementSibling;\n    }\n    if (listLastMarkerElement) {\n        var startIndex = (0,selection/* getSelectPosition */.ED)(listLastMarkerElement, vditor.sv.element, range).start;\n        var isTask = listLastMarkerElement.getAttribute(\"data-type\") === \"task-marker\";\n        var listFirstMarkerElement = listLastMarkerElement;\n        if (isTask) {\n            listFirstMarkerElement = listLastMarkerElement.previousElementSibling.previousElementSibling\n                .previousElementSibling;\n        }\n        if (startIndex === listLastMarkerElement.textContent.length) {\n            // 回车清空列表标记符\n            if (event.key === \"Enter\" && !(0,compatibility/* isCtrl */._0)(event) && !event.altKey && !event.shiftKey &&\n                listLastMarkerElement.nextElementSibling.textContent.trim() === \"\") {\n                if (((_b = listFirstMarkerElement.previousElementSibling) === null || _b === void 0 ? void 0 : _b.getAttribute(\"data-type\")) === \"padding\") {\n                    listFirstMarkerElement.previousElementSibling.remove();\n                    inputEvent(vditor);\n                }\n                else {\n                    if (isTask) {\n                        listFirstMarkerElement.remove();\n                        listLastMarkerElement.previousElementSibling.previousElementSibling.remove();\n                        listLastMarkerElement.previousElementSibling.remove();\n                    }\n                    listLastMarkerElement.nextElementSibling.remove();\n                    listLastMarkerElement.remove();\n                    processAfterRender(vditor);\n                }\n                event.preventDefault();\n                return true;\n            }\n            // 第一个 marker 后 tab 进行缩进\n            if (event.key === \"Tab\") {\n                if (event.shiftKey) {\n                    if (listFirstMarkerElement.previousElementSibling.getAttribute(\"data-type\") === \"padding\") {\n                        listFirstMarkerElement.previousElementSibling.remove();\n                    }\n                }\n                else {\n                    listFirstMarkerElement.insertAdjacentHTML(\"beforebegin\", \"<span data-type=\\\"padding\\\">\".concat(listFirstMarkerElement.textContent.replace(/\\S/g, \" \"), \"</span>\"));\n                }\n                if (/^\\d/.test(listFirstMarkerElement.textContent)) {\n                    listFirstMarkerElement.textContent = listFirstMarkerElement.textContent.replace(/^\\d{1,}/, \"1\");\n                    range.selectNodeContents(listLastMarkerElement.firstChild);\n                    range.collapse(false);\n                }\n                inputEvent(vditor);\n                event.preventDefault();\n                return true;\n            }\n        }\n    }\n    // tab\n    if (fixTab(vditor, range, event)) {\n        return true;\n    }\n    var blockElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-block\", \"0\");\n    var spanElement = (0,hasClosestByHeadings/* hasClosestByTag */.f)(startContainer, \"SPAN\");\n    // 回车\n    if (event.key === \"Enter\" && !(0,compatibility/* isCtrl */._0)(event) && !event.altKey && !event.shiftKey && blockElement) {\n        var isFirst = false;\n        var newLineMatch = blockElement.textContent.match(/^\\n+/);\n        if ((0,selection/* getSelectPosition */.ED)(blockElement, vditor.sv.element).start <= (newLineMatch ? newLineMatch[0].length : 0)) {\n            // 允许段落开始换行\n            isFirst = true;\n        }\n        var newLineText = \"\\n\";\n        if (spanElement) {\n            if (((_c = spanElement.previousElementSibling) === null || _c === void 0 ? void 0 : _c.getAttribute(\"data-action\")) === \"enter-remove\") {\n                // https://github.com/Vanessa219/vditor/issues/596\n                spanElement.previousElementSibling.remove();\n                processAfterRender(vditor);\n                event.preventDefault();\n                return true;\n            }\n            else {\n                newLineText += processPreviousMarkers(spanElement);\n            }\n        }\n        range.insertNode(document.createTextNode(newLineText));\n        range.collapse(false);\n        if (blockElement && blockElement.textContent.trim() !== \"\" && !isFirst) {\n            inputEvent(vditor);\n        }\n        else {\n            processAfterRender(vditor);\n        }\n        event.preventDefault();\n        return true;\n    }\n    // 删除后光标前有 newline 的处理\n    if (event.key === \"Backspace\" && !(0,compatibility/* isCtrl */._0)(event) && !event.altKey && !event.shiftKey) {\n        if (spanElement && ((_d = spanElement.previousElementSibling) === null || _d === void 0 ? void 0 : _d.getAttribute(\"data-type\")) === \"newline\" &&\n            (0,selection/* getSelectPosition */.ED)(spanElement, vditor.sv.element, range).start === 1 &&\n            // 飘号的处理需在 inputEvent 中，否则上下飘号对不齐\n            spanElement.getAttribute(\"data-type\").indexOf(\"code-block-\") === -1) {\n            // 光标在每一行的第一个字符后\n            range.setStart(spanElement, 0);\n            range.extractContents();\n            if (spanElement.textContent.trim() !== \"\") {\n                inputEvent(vditor);\n            }\n            else {\n                processAfterRender(vditor);\n            }\n            event.preventDefault();\n            return true;\n        }\n        // 每一段第一个字符前\n        if (blockElement && (0,selection/* getSelectPosition */.ED)(blockElement, vditor.sv.element, range).start === 0 &&\n            blockElement.previousElementSibling) {\n            range.extractContents();\n            var previousLastElement = blockElement.previousElementSibling.lastElementChild;\n            // table 中，newline 可能存在多个，需要逐个删除\n            while (previousLastElement.getAttribute(\"data-type\") === \"newline\") {\n                previousLastElement.remove();\n                previousLastElement = blockElement.previousElementSibling.lastElementChild;\n            }\n            // 场景：末尾无法删除 [```\\ntext\\n```\\n\\n]\n            if (previousLastElement.getAttribute(\"data-type\") !== \"newline\") {\n                previousLastElement.insertAdjacentHTML(\"afterend\", blockElement.innerHTML);\n                blockElement.remove();\n            }\n            if (blockElement.textContent.trim() !== \"\" && !((_e = blockElement.previousElementSibling) === null || _e === void 0 ? void 0 : _e.querySelector('[data-type=\"code-block-open-marker\"]'))) {\n                inputEvent(vditor);\n            }\n            else {\n                if (previousLastElement.getAttribute(\"data-type\") !== \"newline\") {\n                    // https://github.com/Vanessa219/vditor/issues/597\n                    range.selectNodeContents(previousLastElement.lastChild);\n                    range.collapse(false);\n                }\n                processAfterRender(vditor);\n            }\n            event.preventDefault();\n            return true;\n        }\n    }\n    return false;\n};\n\n// EXTERNAL MODULE: ./src/ts/ui/setContentTheme.ts\nvar setContentTheme = __webpack_require__(860);\n;// ./src/ts/ui/setTheme.ts\nvar setTheme = function (vditor) {\n    if (vditor.options.theme === \"dark\") {\n        vditor.element.classList.add(\"vditor--dark\");\n    }\n    else {\n        vditor.element.classList.remove(\"vditor--dark\");\n    }\n};\n\n;// ./src/ts/ui/initUI.ts\n\n\n\n\n\n\nvar initUI = function (vditor) {\n    vditor.element.innerHTML = \"\";\n    vditor.element.classList.add(\"vditor\");\n    // 支持 RTL\n    if (vditor.options.rtl) {\n        vditor.element.setAttribute(\"dir\", \"rtl\");\n    }\n    setTheme(vditor);\n    (0,setContentTheme/* setContentTheme */.H)(vditor.options.preview.theme.current, vditor.options.preview.theme.path);\n    if (typeof vditor.options.height === \"number\") {\n        vditor.element.style.height = vditor.options.height + \"px\";\n    }\n    else {\n        vditor.element.style.height = vditor.options.height;\n    }\n    if (typeof vditor.options.minHeight === \"number\") {\n        vditor.element.style.minHeight = vditor.options.minHeight + \"px\";\n    }\n    if (typeof vditor.options.width === \"number\") {\n        vditor.element.style.width = vditor.options.width + \"px\";\n    }\n    else {\n        vditor.element.style.width = vditor.options.width;\n    }\n    vditor.element.appendChild(vditor.toolbar.element);\n    var contentElement = document.createElement(\"div\");\n    contentElement.className = \"vditor-content\";\n    if (vditor.options.outline.position === \"left\") {\n        contentElement.appendChild(vditor.outline.element);\n    }\n    contentElement.appendChild(vditor.wysiwyg.element.parentElement);\n    contentElement.appendChild(vditor.sv.element);\n    contentElement.appendChild(vditor.ir.element.parentElement);\n    contentElement.appendChild(vditor.preview.element);\n    if (vditor.toolbar.elements.devtools) {\n        contentElement.appendChild(vditor.devtools.element);\n    }\n    if (vditor.options.outline.position === \"right\") {\n        vditor.outline.element.classList.add(\"vditor-outline--right\");\n        contentElement.appendChild(vditor.outline.element);\n    }\n    if (vditor.upload) {\n        contentElement.appendChild(vditor.upload.element);\n    }\n    if (vditor.options.resize.enable) {\n        contentElement.appendChild(vditor.resize.element);\n    }\n    contentElement.appendChild(vditor.hint.element);\n    contentElement.appendChild(vditor.tip.element);\n    vditor.element.appendChild(contentElement);\n    contentElement.addEventListener(\"click\", function () {\n        hidePanel(vditor, [\"subToolbar\"]);\n    });\n    if (vditor.toolbar.elements.export) {\n        // for export pdf\n        vditor.element.insertAdjacentHTML(\"beforeend\", '<iframe id=\"vditorExportIframe\" style=\"width: 100%;height: 0;border: 0\"></iframe>');\n    }\n    setEditMode(vditor, vditor.options.mode, afterRender(vditor));\n    document.execCommand(\"DefaultParagraphSeparator\", false, \"p\");\n    if (navigator.userAgent.indexOf(\"iPhone\") > -1 && typeof window.visualViewport !== \"undefined\") {\n        // https://github.com/Vanessa219/vditor/issues/379\n        var pendingUpdate_1 = false;\n        var viewportHandler = function (event) {\n            if (pendingUpdate_1) {\n                return;\n            }\n            pendingUpdate_1 = true;\n            requestAnimationFrame(function () {\n                pendingUpdate_1 = false;\n                var layoutViewport = vditor.toolbar.element;\n                layoutViewport.style.transform = \"none\";\n                if (layoutViewport.getBoundingClientRect().top < 0) {\n                    layoutViewport.style.transform = \"translate(0, \".concat(-layoutViewport.getBoundingClientRect().top, \"px)\");\n                }\n            });\n        };\n        window.visualViewport.addEventListener(\"scroll\", viewportHandler);\n        window.visualViewport.addEventListener(\"resize\", viewportHandler);\n    }\n};\nvar setPadding = function (vditor) {\n    //  resize时 设置 padding\n    var minPadding = window.innerWidth <= constants/* Constants */.Y.MOBILE_WIDTH ? 10 : 35;\n    if (vditor.wysiwyg.element.parentElement.style.display !== \"none\") {\n        var padding = (vditor.wysiwyg.element.parentElement.clientWidth\n            - vditor.options.preview.maxWidth) / 2;\n        vditor.wysiwyg.element.style.padding = \"10px \".concat(Math.min(Math.max(minPadding, 30), Math.max(padding, 30), 100), \"px\");\n    }\n    if (vditor.ir.element.parentElement.style.display !== \"none\") {\n        var padding = (vditor.ir.element.parentElement.clientWidth\n            - vditor.options.preview.maxWidth) / 2;\n        vditor.ir.element.style.padding = \"10px \".concat(Math.max(minPadding, padding), \"px\");\n    }\n    //   if (vditor.preview.element.style.display !== \"block\") {\n    //     vditor.toolbar.element.style.paddingLeft = Math.max(5,\n    //       parseInt(vditor[vditor.currentMode].element.style.paddingLeft || \"0\", 10) +\n    //       (vditor.options.outline.position === \"left\" ? vditor.outline.element.offsetWidth : 0)) + \"px\";\n    //   } else {\n    //     vditor.toolbar.element.style.paddingLeft = (5 +\n    //       (vditor.options.outline.position === \"left\" ? vditor.outline.element.offsetWidth : 0)) + \"px\";\n    //   }\n};\nvar setTypewriterPosition = function (vditor) {\n    if (!vditor.options.typewriterMode) {\n        return;\n    }\n    var height = window.innerHeight;\n    if (typeof vditor.options.height === \"number\") {\n        height = vditor.options.height;\n        if (typeof vditor.options.minHeight === \"number\") {\n            height = Math.max(height, vditor.options.minHeight);\n        }\n        height = Math.min(window.innerHeight, height);\n    }\n    else {\n        height = vditor.element.clientHeight;\n    }\n    if (vditor.element.classList.contains(\"vditor--fullscreen\")) {\n        height = window.innerHeight;\n    }\n    // 由于 Firefox padding-bottom bug，只能使用 :after\n    vditor[vditor.currentMode].element.style.setProperty(\"--editor-bottom\", ((height - vditor.toolbar.element.offsetHeight) / 2) + \"px\");\n};\nvar resizeCb;\nfunction UIUnbindListener() {\n    window.removeEventListener(\"resize\", resizeCb);\n}\nvar afterRender = function (vditor) {\n    setTypewriterPosition(vditor);\n    UIUnbindListener();\n    window.addEventListener(\"resize\", resizeCb = function () {\n        setPadding(vditor);\n        setTypewriterPosition(vditor);\n    });\n    // set default value\n    var initValue = (0,compatibility/* accessLocalStorage */.D)() && localStorage.getItem(vditor.options.cache.id);\n    if (!vditor.options.cache.enable || !initValue) {\n        if (vditor.options.value) {\n            initValue = vditor.options.value;\n        }\n        else if (vditor.originalInnerHTML) {\n            initValue = vditor.lute.HTML2Md(vditor.originalInnerHTML);\n        }\n        else if (!vditor.options.cache.enable) {\n            initValue = \"\";\n        }\n    }\n    return initValue || \"\";\n};\n\n;// ./src/ts/ir/highlightToolbarIR.ts\n\n\n\n\n\nvar highlightToolbarIR = function (vditor) {\n    clearTimeout(vditor[vditor.currentMode].hlToolbarTimeoutId);\n    vditor[vditor.currentMode].hlToolbarTimeoutId = window.setTimeout(function () {\n        if (vditor[vditor.currentMode].element.getAttribute(\"contenteditable\") === \"false\") {\n            return;\n        }\n        if (!(0,selection/* selectIsEditor */.Co)(vditor[vditor.currentMode].element)) {\n            return;\n        }\n        removeCurrentToolbar(vditor.toolbar.elements, constants/* Constants */.Y.EDIT_TOOLBARS);\n        enableToolbar(vditor.toolbar.elements, constants/* Constants */.Y.EDIT_TOOLBARS);\n        var range = (0,selection/* getEditorRange */.RN)(vditor);\n        var typeElement = range.startContainer;\n        if (range.startContainer.nodeType === 3) {\n            typeElement = range.startContainer.parentElement;\n        }\n        if (typeElement.classList.contains(\"vditor-reset\")) {\n            typeElement = typeElement.childNodes[range.startOffset];\n        }\n        var headingElement = vditor.currentMode === \"sv\" ?\n            (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"heading\") : (0,hasClosestByHeadings/* hasClosestByHeadings */.c)(typeElement);\n        if (headingElement) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"headings\"]);\n        }\n        var quoteElement = vditor.currentMode === \"sv\" ? (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"blockquote\") :\n            (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"BLOCKQUOTE\");\n        if (quoteElement) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"quote\"]);\n        }\n        var strongElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"strong\");\n        if (strongElement) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"bold\"]);\n        }\n        var emElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"em\");\n        if (emElement) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"italic\"]);\n        }\n        var sElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"s\");\n        if (sElement) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"strike\"]);\n        }\n        var aElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"a\");\n        if (aElement) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"link\"]);\n        }\n        var liElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"LI\");\n        if (liElement) {\n            if (liElement.classList.contains(\"vditor-task\")) {\n                setCurrentToolbar(vditor.toolbar.elements, [\"check\"]);\n            }\n            else if (liElement.parentElement.tagName === \"OL\") {\n                setCurrentToolbar(vditor.toolbar.elements, [\"ordered-list\"]);\n            }\n            else if (liElement.parentElement.tagName === \"UL\") {\n                setCurrentToolbar(vditor.toolbar.elements, [\"list\"]);\n            }\n            enableToolbar(vditor.toolbar.elements, [\"outdent\", \"indent\"]);\n        }\n        else {\n            disableToolbar(vditor.toolbar.elements, [\"outdent\", \"indent\"]);\n        }\n        var codeBlockElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"code-block\");\n        if (codeBlockElement) {\n            disableToolbar(vditor.toolbar.elements, [\"headings\", \"bold\", \"italic\", \"strike\", \"line\", \"quote\",\n                \"list\", \"ordered-list\", \"check\", \"code\", \"inline-code\", \"upload\", \"link\", \"table\", \"record\", 'echarts', 'math', 'mermaid', 'mermaid', 'mindmap', 'mermaid-sequence', 'mermaid-gantt']);\n            setCurrentToolbar(vditor.toolbar.elements, [\"code\"]);\n        }\n        var codeElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"code\");\n        if (codeElement) {\n            disableToolbar(vditor.toolbar.elements, [\"headings\", \"bold\", \"italic\", \"strike\", \"line\", \"quote\",\n                \"list\", \"ordered-list\", \"check\", \"code\", \"upload\", \"link\", \"table\", \"record\", 'echarts', 'math', 'mermaid', 'mermaid', 'mindmap', 'mermaid-sequence', 'mermaid-gantt']);\n            setCurrentToolbar(vditor.toolbar.elements, [\"inline-code\"]);\n        }\n        var tableElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"table\");\n        if (tableElement) {\n            disableToolbar(vditor.toolbar.elements, [\"headings\", \"list\", \"ordered-list\", \"check\", \"line\",\n                \"quote\", \"code\", \"table\", 'echarts', 'math', 'mermaid', 'mermaid', 'mindmap', 'mermaid-sequence', 'mermaid-gantt']);\n        }\n    }, 200);\n};\n\n;// ./src/ts/wysiwyg/afterRenderEvent.ts\n\n\nvar afterRenderEvent = function (vditor, options) {\n    if (options === void 0) { options = {\n        enableAddUndoStack: true,\n        enableHint: false,\n        enableInput: true,\n    }; }\n    if (options.enableHint) {\n        vditor.hint.render(vditor);\n    }\n    clearTimeout(vditor.wysiwyg.afterRenderTimeoutId);\n    vditor.wysiwyg.afterRenderTimeoutId = window.setTimeout(function () {\n        if (vditor.wysiwyg.composingLock) {\n            return;\n        }\n        var text = getMarkdown(vditor);\n        if (typeof vditor.options.input === \"function\" && options.enableInput) {\n            vditor.options.input(text);\n        }\n        if (vditor.options.counter.enable) {\n            vditor.counter.render(vditor, text);\n        }\n        if (vditor.options.cache.enable && (0,compatibility/* accessLocalStorage */.D)()) {\n            localStorage.setItem(vditor.options.cache.id, text);\n            if (vditor.options.cache.after) {\n                vditor.options.cache.after(text);\n            }\n        }\n        if (vditor.devtools) {\n            vditor.devtools.renderEchart(vditor);\n        }\n        if (options.enableAddUndoStack) {\n            vditor.undo.addToUndoStack(vditor);\n        }\n    }, vditor.options.undoDelay);\n};\n\n;// ./src/ts/wysiwyg/inlineTag.ts\n\n\nvar previoueIsEmptyA = function (node) {\n    var previousNode = node.previousSibling;\n    while (previousNode) {\n        if (previousNode.nodeType !== 3 && previousNode.tagName === \"A\" && !previousNode.previousSibling\n            && previousNode.innerHTML.replace(constants/* Constants */.Y.ZWSP, \"\") === \"\" && previousNode.nextSibling) {\n            return previousNode;\n        }\n        previousNode = previousNode.previousSibling;\n    }\n    return false;\n};\nvar nextIsCode = function (range) {\n    var nextNode = range.startContainer.nextSibling;\n    while (nextNode && nextNode.textContent === \"\") {\n        nextNode = nextNode.nextSibling;\n    }\n    if (nextNode && nextNode.nodeType !== 3 && (nextNode.tagName === \"CODE\" ||\n        nextNode.getAttribute(\"data-type\") === \"math-inline\" ||\n        nextNode.getAttribute(\"data-type\") === \"html-entity\" ||\n        nextNode.getAttribute(\"data-type\") === \"html-inline\")) {\n        return true;\n    }\n    return false;\n};\nvar getNextHTML = function (node) {\n    var html = \"\";\n    var nextNode = node.nextSibling;\n    while (nextNode) {\n        if (nextNode.nodeType === 3) {\n            html += nextNode.textContent;\n        }\n        else {\n            html += nextNode.outerHTML;\n        }\n        nextNode = nextNode.nextSibling;\n    }\n    return html;\n};\nvar getPreviousHTML = function (node) {\n    var html = \"\";\n    var previousNode = node.previousSibling;\n    while (previousNode) {\n        if (previousNode.nodeType === 3) {\n            html = previousNode.textContent + html;\n        }\n        else {\n            html = previousNode.outerHTML + html;\n        }\n        previousNode = previousNode.previousSibling;\n    }\n    return html;\n};\nvar getRenderElementNextNode = function (blockCodeElement) {\n    var nextNode = blockCodeElement;\n    while (nextNode && !nextNode.nextSibling) {\n        nextNode = nextNode.parentElement;\n    }\n    return nextNode.nextSibling;\n};\nvar splitElement = function (range) {\n    var previousHTML = getPreviousHTML(range.startContainer);\n    var nextHTML = getNextHTML(range.startContainer);\n    var text = range.startContainer.textContent;\n    var offset = range.startOffset;\n    var beforeHTML = \"\";\n    var afterHTML = \"\";\n    if (text.substr(0, offset) !== \"\" && text.substr(0, offset) !== constants/* Constants */.Y.ZWSP || previousHTML) {\n        beforeHTML = \"\".concat(previousHTML).concat(text.substr(0, offset));\n    }\n    if (text.substr(offset) !== \"\" && text.substr(offset) !== constants/* Constants */.Y.ZWSP || nextHTML) {\n        afterHTML = \"\".concat(text.substr(offset)).concat(nextHTML);\n    }\n    return {\n        afterHTML: afterHTML,\n        beforeHTML: beforeHTML,\n    };\n};\nvar modifyPre = function (vditor, range) {\n    // 没有被块元素包裹\n    Array.from(vditor.wysiwyg.element.childNodes).find(function (node) {\n        if (node.nodeType === 3) {\n            var pElement = document.createElement(\"p\");\n            pElement.setAttribute(\"data-block\", \"0\");\n            pElement.textContent = node.textContent;\n            // 为空按下 tab 且 tab = '    ' 时，range.startContainer 不为 node\n            var cloneRangeOffset = range.startContainer.nodeType === 3 ? range.startOffset : node.textContent.length;\n            node.parentNode.insertBefore(pElement, node);\n            node.remove();\n            range.setStart(pElement.firstChild, Math.min(pElement.firstChild.textContent.length, cloneRangeOffset));\n            range.collapse(true);\n            (0,selection/* setSelectionFocus */.jl)(range);\n            return true;\n        }\n        else if (!node.getAttribute(\"data-block\")) {\n            if (node.tagName === \"P\") {\n                node.remove();\n            }\n            else {\n                if (node.tagName === \"DIV\") {\n                    range.insertNode(document.createElement(\"wbr\"));\n                    // firefox 列表换行产生 div\n                    node.outerHTML = \"<p data-block=\\\"0\\\">\".concat(node.innerHTML, \"</p>\");\n                }\n                else {\n                    if (node.tagName === \"BR\") {\n                        // firefox 空换行产生 BR\n                        node.outerHTML = \"<p data-block=\\\"0\\\">\".concat(node.outerHTML, \"<wbr></p>\");\n                    }\n                    else {\n                        range.insertNode(document.createElement(\"wbr\"));\n                        node.outerHTML = \"<p data-block=\\\"0\\\">\".concat(node.outerHTML, \"</p>\");\n                    }\n                }\n                (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n                range = getSelection().getRangeAt(0);\n            }\n            return true;\n        }\n    });\n};\n\n;// ./src/ts/wysiwyg/setHeading.ts\n\n\n\nvar setHeading = function (vditor, tagName) {\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);\n    if (!blockElement) {\n        blockElement = range.startContainer.childNodes[range.startOffset];\n    }\n    if (!blockElement && vditor.wysiwyg.element.children.length === 0) {\n        blockElement = vditor.wysiwyg.element;\n    }\n    if (blockElement && !blockElement.classList.contains(\"vditor-wysiwyg__block\")) {\n        range.insertNode(document.createElement(\"wbr\"));\n        // Firefox 需要 trim https://github.com/Vanessa219/vditor/issues/207\n        if (blockElement.innerHTML.trim() === \"<wbr>\") {\n            // Firefox 光标对不齐 https://github.com/Vanessa219/vditor/issues/199 1\n            blockElement.innerHTML = \"<wbr><br>\";\n        }\n        if (blockElement.tagName === \"BLOCKQUOTE\" || blockElement.classList.contains(\"vditor-reset\")) {\n            blockElement.innerHTML = \"<\".concat(tagName, \" data-block=\\\"0\\\">\").concat(blockElement.innerHTML.trim(), \"</\").concat(tagName, \">\");\n        }\n        else {\n            blockElement.outerHTML = \"<\".concat(tagName, \" data-block=\\\"0\\\">\").concat(blockElement.innerHTML.trim(), \"</\").concat(tagName, \">\");\n        }\n        (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n        renderToc(vditor);\n    }\n};\nvar removeHeading = function (vditor) {\n    var range = getSelection().getRangeAt(0);\n    var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);\n    if (!blockElement) {\n        blockElement = range.startContainer.childNodes[range.startOffset];\n    }\n    if (blockElement) {\n        range.insertNode(document.createElement(\"wbr\"));\n        blockElement.outerHTML = \"<p data-block=\\\"0\\\">\".concat(blockElement.innerHTML, \"</p>\");\n        (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n    }\n    vditor.wysiwyg.popover.style.display = \"none\";\n};\n\n;// ./src/ts/wysiwyg/showCode.ts\n\n\nvar showCode = function (previewElement, vditor, first) {\n    if (first === void 0) { first = true; }\n    var previousElement = previewElement.previousElementSibling;\n    var range = previousElement.ownerDocument.createRange();\n    if (previousElement.tagName === \"CODE\") {\n        previousElement.style.display = \"inline-block\";\n        if (first) {\n            range.setStart(previousElement.firstChild, 1);\n        }\n        else {\n            range.selectNodeContents(previousElement);\n        }\n    }\n    else {\n        previousElement.style.display = \"block\";\n        if (!previousElement.firstChild.firstChild) {\n            previousElement.firstChild.appendChild(document.createTextNode(\"\"));\n        }\n        range.selectNodeContents(previousElement.firstChild);\n    }\n    if (first) {\n        range.collapse(true);\n    }\n    else {\n        range.collapse(false);\n    }\n    (0,selection/* setSelectionFocus */.jl)(range);\n    if (previewElement.firstElementChild.classList.contains(\"language-mindmap\")) {\n        return;\n    }\n    scrollCenter(vditor);\n};\n\n;// ./src/ts/wysiwyg/processKeydown.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar wysiwyg_processKeydown_processKeydown = function (vditor, event) {\n    // Chrome firefox 触发 compositionend 机制不一致 https://github.com/Vanessa219/vditor/issues/188\n    vditor.wysiwyg.composingLock = event.isComposing;\n    if (event.isComposing) {\n        return false;\n    }\n    // 添加第一次记录 undo 的光标\n    if (event.key.indexOf(\"Arrow\") === -1 && event.key !== \"Meta\" && event.key !== \"Control\" && event.key !== \"Alt\" &&\n        event.key !== \"Shift\" && event.key !== \"CapsLock\" && event.key !== \"Escape\" && !/^F\\d{1,2}$/.test(event.key)) {\n        vditor.undo.recordFirstPosition(vditor, event);\n    }\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    var startContainer = range.startContainer;\n    if (!fixGSKeyBackspace(event, vditor, startContainer)) {\n        return false;\n    }\n    fixCJKPosition(range, vditor, event);\n    fixHR(range);\n    // 仅处理以下快捷键操作\n    if (event.key !== \"Enter\" && event.key !== \"Tab\" && event.key !== \"Backspace\" && event.key.indexOf(\"Arrow\") === -1\n        && !(0,compatibility/* isCtrl */._0)(event) && event.key !== \"Escape\" && event.key !== \"Delete\") {\n        return false;\n    }\n    var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(startContainer);\n    var pElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"P\");\n    // md 处理\n    if (fixMarkdown(event, vditor, pElement, range)) {\n        return true;\n    }\n    // li\n    if (fixList(range, vditor, pElement, event)) {\n        return true;\n    }\n    // table\n    if (fixTable(vditor, event, range)) {\n        return true;\n    }\n    // code render\n    var codeRenderElement = (0,hasClosest/* hasClosestByClassName */.KJ)(startContainer, \"vditor-wysiwyg__block\");\n    if (codeRenderElement) {\n        // esc: 退出编辑，仅展示渲染\n        if (event.key === \"Escape\" && codeRenderElement.children.length === 2) {\n            vditor.wysiwyg.popover.style.display = \"none\";\n            codeRenderElement.firstElementChild.style.display = \"none\";\n            vditor.wysiwyg.element.blur();\n            event.preventDefault();\n            return true;\n        }\n        // alt+enter: 代码块切换到语言 https://github.com/Vanessa219/vditor/issues/54\n        if (!(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && event.altKey && event.key === \"Enter\" &&\n            codeRenderElement.getAttribute(\"data-type\") === \"code-block\") {\n            var inputElemment = vditor.wysiwyg.popover.querySelector(\".vditor-input\");\n            inputElemment.focus();\n            inputElemment.select();\n            event.preventDefault();\n            return true;\n        }\n        if (codeRenderElement.getAttribute(\"data-block\") === \"0\") {\n            if (fixCodeBlock(vditor, event, codeRenderElement.firstElementChild, range)) {\n                return true;\n            }\n            if (insertAfterBlock(vditor, event, range, codeRenderElement.firstElementChild, codeRenderElement)) {\n                return true;\n            }\n            if (codeRenderElement.getAttribute(\"data-type\") !== \"yaml-front-matter\" &&\n                insertBeforeBlock(vditor, event, range, codeRenderElement.firstElementChild, codeRenderElement)) {\n                return true;\n            }\n        }\n    }\n    // blockquote\n    if (fixBlockquote(vditor, range, event, pElement)) {\n        return true;\n    }\n    // 顶层 blockquote\n    var topBQElement = (0,hasClosest/* hasTopClosestByTag */.Ab)(startContainer, \"BLOCKQUOTE\");\n    if (topBQElement) {\n        if (!event.shiftKey && event.altKey && event.key === \"Enter\") {\n            if (!(0,compatibility/* isCtrl */._0)(event)) {\n                // alt+enter: 跳出多层 blockquote 嵌套之后 https://github.com/Vanessa219/vditor/issues/51\n                range.setStartAfter(topBQElement);\n            }\n            else {\n                // ctrl+alt+enter: 跳出多层 blockquote 嵌套之前\n                range.setStartBefore(topBQElement);\n            }\n            (0,selection/* setSelectionFocus */.jl)(range);\n            var node = document.createElement(\"p\");\n            node.setAttribute(\"data-block\", \"0\");\n            node.innerHTML = \"\\n\";\n            range.insertNode(node);\n            range.collapse(true);\n            (0,selection/* setSelectionFocus */.jl)(range);\n            afterRenderEvent(vditor);\n            scrollCenter(vditor);\n            event.preventDefault();\n            return true;\n        }\n    }\n    // h1-h6\n    var headingElement = (0,hasClosestByHeadings/* hasClosestByHeadings */.c)(startContainer);\n    if (headingElement) {\n        if (headingElement.tagName === \"H6\" && startContainer.textContent.length === range.startOffset &&\n            !(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey && event.key === \"Enter\") {\n            // enter: H6 回车解析问题 https://github.com/Vanessa219/vditor/issues/48\n            var pTempElement = document.createElement(\"p\");\n            pTempElement.textContent = \"\\n\";\n            pTempElement.setAttribute(\"data-block\", \"0\");\n            startContainer.parentElement.insertAdjacentElement(\"afterend\", pTempElement);\n            range.setStart(pTempElement, 0);\n            (0,selection/* setSelectionFocus */.jl)(range);\n            afterRenderEvent(vditor);\n            scrollCenter(vditor);\n            event.preventDefault();\n            return true;\n        }\n        // enter++: 标题变大\n        if (matchHotKey(\"⌘=\", event)) {\n            var index = parseInt(headingElement.tagName.substr(1), 10) - 1;\n            if (index > 0) {\n                setHeading(vditor, \"h\".concat(index));\n                afterRenderEvent(vditor);\n            }\n            event.preventDefault();\n            return true;\n        }\n        // enter++: 标题变小\n        if (matchHotKey(\"⌘-\", event)) {\n            var index = parseInt(headingElement.tagName.substr(1), 10) + 1;\n            if (index < 7) {\n                setHeading(vditor, \"h\".concat(index));\n                afterRenderEvent(vditor);\n            }\n            event.preventDefault();\n            return true;\n        }\n        if (event.key === \"Backspace\" && !(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey\n            && headingElement.textContent.length === 1) {\n            // 删除后变为空\n            removeHeading(vditor);\n        }\n    }\n    // task list\n    if (fixTask(vditor, range, event)) {\n        return true;\n    }\n    // alt+enter\n    if (event.altKey && event.key === \"Enter\" && !(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey) {\n        // 切换到链接、链接引用、脚注引用弹出的输入框中\n        var aElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"A\");\n        var linRefElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"link-ref\");\n        var footnoteRefElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"footnotes-ref\");\n        if (aElement || linRefElement || footnoteRefElement ||\n            (headingElement && headingElement.tagName.length === 2)) {\n            var inputElement = vditor.wysiwyg.popover.querySelector(\"input\");\n            inputElement.focus();\n            inputElement.select();\n        }\n    }\n    // 删除有子工具栏的块\n    if (removeBlockElement(vditor, event)) {\n        return true;\n    }\n    // 对有子工具栏的块上移\n    if (matchHotKey(\"⇧⌘U\", event)) {\n        var itemElement = vditor.wysiwyg.popover.querySelector('[data-type=\"up\"]');\n        if (itemElement) {\n            itemElement.click();\n            event.preventDefault();\n            return true;\n        }\n    }\n    // 对有子工具栏的块下移\n    if (matchHotKey(\"⇧⌘D\", event)) {\n        var itemElement = vditor.wysiwyg.popover.querySelector('[data-type=\"down\"]');\n        if (itemElement) {\n            itemElement.click();\n            event.preventDefault();\n            return true;\n        }\n    }\n    if (fixTab(vditor, range, event)) {\n        return true;\n    }\n    // shift+enter：软换行，但 table/hr/heading 处理、cell 内换行、block render 换行处理单独写在上面，li & p 使用浏览器默认\n    if (!(0,compatibility/* isCtrl */._0)(event) && event.shiftKey && !event.altKey && event.key === \"Enter\" &&\n        startContainer.parentElement.tagName !== \"LI\" && startContainer.parentElement.tagName !== \"P\") {\n        if ([\"STRONG\", \"STRIKE\", \"S\", \"I\", \"EM\", \"B\"].includes(startContainer.parentElement.tagName)) {\n            // 行内元素软换行需继续 https://github.com/Vanessa219/vditor/issues/170\n            range.insertNode(document.createTextNode(\"\\n\" + constants/* Constants */.Y.ZWSP));\n        }\n        else {\n            range.insertNode(document.createTextNode(\"\\n\"));\n        }\n        range.collapse(false);\n        (0,selection/* setSelectionFocus */.jl)(range);\n        afterRenderEvent(vditor);\n        scrollCenter(vditor);\n        event.preventDefault();\n        return true;\n    }\n    // 删除\n    if (event.key === \"Backspace\" && !(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey && range.toString() === \"\") {\n        if (fixDelete(vditor, range, event, pElement)) {\n            return true;\n        }\n        if (blockElement) {\n            if (blockElement.previousElementSibling\n                && blockElement.previousElementSibling.classList.contains(\"vditor-wysiwyg__block\")\n                && blockElement.previousElementSibling.getAttribute(\"data-block\") === \"0\"\n                // https://github.com/Vanessa219/vditor/issues/946\n                && blockElement.tagName !== \"UL\" && blockElement.tagName !== \"OL\") {\n                var rangeStart = (0,selection/* getSelectPosition */.ED)(blockElement, vditor.wysiwyg.element, range).start;\n                if ((rangeStart === 0 && range.startOffset === 0) || // https://github.com/Vanessa219/vditor/issues/894\n                    (rangeStart === 1 && blockElement.innerText.startsWith(constants/* Constants */.Y.ZWSP))) {\n                    // 当前块删除后光标落于代码渲染块上，当前块会被删除，因此需要阻止事件，不能和 keyup 中的代码块处理合并\n                    showCode(blockElement.previousElementSibling.lastElementChild, vditor, false);\n                    if (blockElement.innerHTML.trim().replace(constants/* Constants */.Y.ZWSP, \"\") === \"\") {\n                        // 当前块为空且不是最后一个时，需要删除\n                        blockElement.remove();\n                        afterRenderEvent(vditor);\n                    }\n                    event.preventDefault();\n                    return true;\n                }\n            }\n            var rangeStartOffset = range.startOffset;\n            if (range.toString() === \"\" && startContainer.nodeType === 3 &&\n                startContainer.textContent.charAt(rangeStartOffset - 2) === \"\\n\" &&\n                startContainer.textContent.charAt(rangeStartOffset - 1) !== constants/* Constants */.Y.ZWSP\n                && [\"STRONG\", \"STRIKE\", \"S\", \"I\", \"EM\", \"B\"].includes(startContainer.parentElement.tagName)) {\n                // 保持行内元素软换行需继续的一致性\n                startContainer.textContent = startContainer.textContent.substring(0, rangeStartOffset - 1) +\n                    constants/* Constants */.Y.ZWSP;\n                range.setStart(startContainer, rangeStartOffset);\n                range.collapse(true);\n                afterRenderEvent(vditor);\n                event.preventDefault();\n                return true;\n            }\n            // inline code、math、html 行前零宽字符后进行删除\n            if (startContainer.textContent === constants/* Constants */.Y.ZWSP && range.startOffset === 1\n                && !startContainer.previousSibling && nextIsCode(range)) {\n                startContainer.textContent = \"\";\n                // 不能返回，其前面为代码渲染块时需进行以下处理：修正光标位于 inline math/html 前，按下删除按钮 code 中内容会被删除\n            }\n            // 修正光标位于 inline math/html, html-entity 前，按下删除按钮 code 中内容会被删除, 不能返回，还需要进行后续处理\n            blockElement.querySelectorAll(\"span.vditor-wysiwyg__block[data-type='math-inline']\").forEach(function (item) {\n                item.firstElementChild.style.display = \"inline\";\n                item.lastElementChild.style.display = \"none\";\n            });\n            blockElement.querySelectorAll(\"span.vditor-wysiwyg__block[data-type='html-entity']\").forEach(function (item) {\n                item.firstElementChild.style.display = \"inline\";\n                item.lastElementChild.style.display = \"none\";\n            });\n        }\n    }\n    if ((0,compatibility/* isFirefox */.gm)() && range.startOffset === 1 && startContainer.textContent.indexOf(constants/* Constants */.Y.ZWSP) > -1 &&\n        startContainer.previousSibling && startContainer.previousSibling.nodeType !== 3 &&\n        startContainer.previousSibling.tagName === \"CODE\" &&\n        (event.key === \"Backspace\" || event.key === \"ArrowLeft\")) {\n        // https://github.com/Vanessa219/vditor/issues/410\n        range.selectNodeContents(startContainer.previousSibling);\n        range.collapse(false);\n        event.preventDefault();\n        return true;\n    }\n    if (fixFirefoxArrowUpTable(event, blockElement, range)) {\n        event.preventDefault();\n        return true;\n    }\n    fixCursorDownInlineMath(range, event.key);\n    if (event.key === \"ArrowDown\") {\n        // 光标位于内联数学公式前，按下键无作用\n        var nextElement = startContainer.nextSibling;\n        if (nextElement && nextElement.nodeType !== 3 && nextElement.getAttribute(\"data-type\") === \"math-inline\") {\n            range.setStartAfter(nextElement);\n        }\n    }\n    if (blockElement && keydownToc(blockElement, vditor, event, range)) {\n        event.preventDefault();\n        return true;\n    }\n    return false;\n};\nvar removeBlockElement = function (vditor, event) {\n    // 删除有子工具栏的块\n    if (matchHotKey(\"⇧⌘X\", event)) {\n        var itemElement = vditor.wysiwyg.popover.querySelector('[data-type=\"remove\"]');\n        if (itemElement) {\n            itemElement.click();\n        }\n        event.preventDefault();\n        return true;\n    }\n};\n\n;// ./src/ts/wysiwyg/highlightToolbarWYSIWYG.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar highlightToolbarWYSIWYG = function (vditor) {\n    clearTimeout(vditor.wysiwyg.hlToolbarTimeoutId);\n    vditor.wysiwyg.hlToolbarTimeoutId = window.setTimeout(function () {\n        if (vditor.wysiwyg.element.getAttribute(\"contenteditable\") === \"false\") {\n            return;\n        }\n        if (!(0,selection/* selectIsEditor */.Co)(vditor.wysiwyg.element)) {\n            return;\n        }\n        removeCurrentToolbar(vditor.toolbar.elements, constants/* Constants */.Y.EDIT_TOOLBARS);\n        enableToolbar(vditor.toolbar.elements, constants/* Constants */.Y.EDIT_TOOLBARS);\n        var range = getSelection().getRangeAt(0);\n        var typeElement = range.startContainer;\n        if (range.startContainer.nodeType === 3) {\n            typeElement = range.startContainer.parentElement;\n        }\n        else {\n            typeElement = typeElement.childNodes[range.startOffset >= typeElement.childNodes.length\n                ? typeElement.childNodes.length - 1\n                : range.startOffset];\n        }\n        var footnotesElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"footnotes-block\");\n        if (footnotesElement) {\n            vditor.wysiwyg.popover.innerHTML = \"\";\n            genClose(footnotesElement, vditor);\n            setPopoverPosition(vditor, footnotesElement);\n            return;\n        }\n        // 工具栏高亮和禁用\n        var liElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"LI\");\n        if (liElement) {\n            if (liElement.classList.contains(\"vditor-task\")) {\n                setCurrentToolbar(vditor.toolbar.elements, [\"check\"]);\n            }\n            else if (liElement.parentElement.tagName === \"OL\") {\n                setCurrentToolbar(vditor.toolbar.elements, [\"ordered-list\"]);\n            }\n            else if (liElement.parentElement.tagName === \"UL\") {\n                setCurrentToolbar(vditor.toolbar.elements, [\"list\"]);\n            }\n            enableToolbar(vditor.toolbar.elements, [\"outdent\", \"indent\"]);\n        }\n        else {\n            disableToolbar(vditor.toolbar.elements, [\"outdent\", \"indent\"]);\n        }\n        if ((0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"BLOCKQUOTE\")) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"quote\"]);\n        }\n        if ((0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"B\") ||\n            (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"STRONG\")) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"bold\"]);\n        }\n        if ((0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"I\") ||\n            (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"EM\")) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"italic\"]);\n        }\n        if ((0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"STRIKE\") ||\n            (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"S\")) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"strike\"]);\n        }\n        // comments\n        vditor.wysiwyg.element\n            .querySelectorAll(\".vditor-comment--focus\")\n            .forEach(function (item) {\n            item.classList.remove(\"vditor-comment--focus\");\n        });\n        var commentElement = (0,hasClosest/* hasClosestByClassName */.KJ)(typeElement, \"vditor-comment\");\n        if (commentElement) {\n            var ids_1 = commentElement.getAttribute(\"data-cmtids\").split(\" \");\n            if (ids_1.length > 1 && commentElement.nextSibling.isSameNode(commentElement.nextElementSibling)) {\n                var nextIds_1 = commentElement.nextElementSibling\n                    .getAttribute(\"data-cmtids\")\n                    .split(\" \");\n                ids_1.find(function (id) {\n                    if (nextIds_1.includes(id)) {\n                        ids_1 = [id];\n                        return true;\n                    }\n                });\n            }\n            vditor.wysiwyg.element\n                .querySelectorAll(\".vditor-comment\")\n                .forEach(function (item) {\n                if (item.getAttribute(\"data-cmtids\").indexOf(ids_1[0]) > -1) {\n                    item.classList.add(\"vditor-comment--focus\");\n                }\n            });\n        }\n        var aElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"A\");\n        if (aElement) {\n            setCurrentToolbar(vditor.toolbar.elements, [\"link\"]);\n        }\n        var tableElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"TABLE\");\n        var headingElement = (0,hasClosestByHeadings/* hasClosestByHeadings */.c)(typeElement);\n        if ((0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"CODE\")) {\n            if ((0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"PRE\")) {\n                disableToolbar(vditor.toolbar.elements, [\n                    \"headings\",\n                    \"bold\",\n                    \"italic\",\n                    \"strike\",\n                    \"line\",\n                    \"quote\",\n                    \"list\",\n                    \"ordered-list\",\n                    \"check\",\n                    \"code\",\n                    \"inline-code\",\n                    \"upload\",\n                    \"link\",\n                    \"table\",\n                    \"record\",\n                    \"echarts\",\n                    \"math\",\n                    \"mermaid\",\n                    \"mindmap\",\n                    \"mermaid-sequence\",\n                    \"mermaid-gantt\",\n                ]);\n                setCurrentToolbar(vditor.toolbar.elements, [\"code\"]);\n            }\n            else {\n                disableToolbar(vditor.toolbar.elements, [\n                    \"headings\",\n                    \"bold\",\n                    \"italic\",\n                    \"strike\",\n                    \"line\",\n                    \"quote\",\n                    \"list\",\n                    \"ordered-list\",\n                    \"check\",\n                    \"code\",\n                    \"upload\",\n                    \"link\",\n                    \"table\",\n                    \"record\",\n                    \"echarts\",\n                    \"math\",\n                    \"mermaid\",\n                    \"mindmap\",\n                    \"mermaid-sequence\",\n                    \"mermaid-gantt\",\n                ]);\n                setCurrentToolbar(vditor.toolbar.elements, [\"inline-code\"]);\n            }\n        }\n        else if (headingElement) {\n            disableToolbar(vditor.toolbar.elements, [\"bold\"]);\n            setCurrentToolbar(vditor.toolbar.elements, [\"headings\"]);\n        }\n        else if (tableElement) {\n            disableToolbar(vditor.toolbar.elements, [\"table\"]);\n        }\n        // toc popover\n        var tocElement = (0,hasClosest/* hasClosestByClassName */.KJ)(typeElement, \"vditor-toc\");\n        if (tocElement) {\n            vditor.wysiwyg.popover.innerHTML = \"\";\n            genClose(tocElement, vditor);\n            setPopoverPosition(vditor, tocElement);\n            return;\n        }\n        // quote popover\n        var blockquoteElement = (0,hasClosestByHeadings/* hasClosestByTag */.f)(typeElement, \"BLOCKQUOTE\");\n        if (blockquoteElement) {\n            vditor.wysiwyg.popover.innerHTML = \"\";\n            genUp(range, blockquoteElement, vditor);\n            genDown(range, blockquoteElement, vditor);\n            genClose(blockquoteElement, vditor);\n            setPopoverPosition(vditor, blockquoteElement);\n        }\n        // list item popover\n        if (liElement) {\n            vditor.wysiwyg.popover.innerHTML = \"\";\n            genUp(range, liElement, vditor);\n            genDown(range, liElement, vditor);\n            genClose(liElement, vditor);\n            setPopoverPosition(vditor, liElement);\n        }\n        // table popover\n        if (tableElement) {\n            var lang = vditor.options.lang;\n            var options = vditor.options;\n            vditor.wysiwyg.popover.innerHTML = \"\";\n            var updateTable_1 = function () {\n                var oldRow = tableElement.rows.length;\n                var oldColumn = tableElement.rows[0].cells.length;\n                var row = parseInt(input_1.value, 10) || oldRow;\n                var column = parseInt(input2_1.value, 10) || oldColumn;\n                if (row === oldRow && oldColumn === column) {\n                    return;\n                }\n                if (oldColumn !== column) {\n                    var columnDiff = column - oldColumn;\n                    for (var i = 0; i < tableElement.rows.length; i++) {\n                        if (columnDiff > 0) {\n                            for (var j = 0; j < columnDiff; j++) {\n                                if (i === 0) {\n                                    tableElement.rows[i].lastElementChild.insertAdjacentHTML(\"afterend\", \"<th> </th>\");\n                                }\n                                else {\n                                    tableElement.rows[i].lastElementChild.insertAdjacentHTML(\"afterend\", \"<td> </td>\");\n                                }\n                            }\n                        }\n                        else {\n                            for (var k = oldColumn - 1; k >= column; k--) {\n                                tableElement.rows[i].cells[k].remove();\n                            }\n                        }\n                    }\n                }\n                if (oldRow !== row) {\n                    var rowDiff = row - oldRow;\n                    if (rowDiff > 0) {\n                        var rowHTML = \"<tr>\";\n                        for (var m = 0; m < column; m++) {\n                            rowHTML += \"<td> </td>\";\n                        }\n                        for (var l = 0; l < rowDiff; l++) {\n                            if (tableElement.querySelector(\"tbody\")) {\n                                tableElement\n                                    .querySelector(\"tbody\")\n                                    .insertAdjacentHTML(\"beforeend\", rowHTML);\n                            }\n                            else {\n                                tableElement\n                                    .querySelector(\"thead\")\n                                    .insertAdjacentHTML(\"afterend\", rowHTML + \"</tr>\");\n                            }\n                        }\n                    }\n                    else {\n                        for (var m = oldRow - 1; m >= row; m--) {\n                            tableElement.rows[m].remove();\n                            if (tableElement.rows.length === 1) {\n                                tableElement.querySelector(\"tbody\").remove();\n                            }\n                        }\n                    }\n                }\n                if (typeof vditor.options.input === \"function\") {\n                    vditor.options.input(getMarkdown(vditor));\n                }\n            };\n            var setAlign_1 = function (type) {\n                setTableAlign(tableElement, type);\n                if (type === \"right\") {\n                    left_1.classList.remove(\"vditor-icon--current\");\n                    center_1.classList.remove(\"vditor-icon--current\");\n                    right_1.classList.add(\"vditor-icon--current\");\n                }\n                else if (type === \"center\") {\n                    left_1.classList.remove(\"vditor-icon--current\");\n                    right_1.classList.remove(\"vditor-icon--current\");\n                    center_1.classList.add(\"vditor-icon--current\");\n                }\n                else {\n                    center_1.classList.remove(\"vditor-icon--current\");\n                    right_1.classList.remove(\"vditor-icon--current\");\n                    left_1.classList.add(\"vditor-icon--current\");\n                }\n                (0,selection/* setSelectionFocus */.jl)(range);\n                afterRenderEvent(vditor);\n            };\n            var td = (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"TD\");\n            var th = (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"TH\");\n            var alignType = \"left\";\n            if (td) {\n                alignType = td.getAttribute(\"align\") || \"left\";\n            }\n            else if (th) {\n                alignType = th.getAttribute(\"align\") || \"center\";\n            }\n            var left_1 = document.createElement(\"button\");\n            left_1.setAttribute(\"type\", \"button\");\n            left_1.setAttribute(\"aria-label\", window.VditorI18n.alignLeft + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⇧⌘L\") + \">\");\n            left_1.setAttribute(\"data-type\", \"left\");\n            left_1.innerHTML =\n                '<svg><use xlink:href=\"#vditor-icon-align-left\"></use></svg>';\n            left_1.className =\n                \"vditor-icon vditor-tooltipped vditor-tooltipped__n\" +\n                    (alignType === \"left\" ? \" vditor-icon--current\" : \"\");\n            left_1.onclick = function () {\n                setAlign_1(\"left\");\n            };\n            var center_1 = document.createElement(\"button\");\n            center_1.setAttribute(\"type\", \"button\");\n            center_1.setAttribute(\"aria-label\", window.VditorI18n.alignCenter + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⇧⌘C\") + \">\");\n            center_1.setAttribute(\"data-type\", \"center\");\n            center_1.innerHTML =\n                '<svg><use xlink:href=\"#vditor-icon-align-center\"></use></svg>';\n            center_1.className =\n                \"vditor-icon vditor-tooltipped vditor-tooltipped__n\" +\n                    (alignType === \"center\" ? \" vditor-icon--current\" : \"\");\n            center_1.onclick = function () {\n                setAlign_1(\"center\");\n            };\n            var right_1 = document.createElement(\"button\");\n            right_1.setAttribute(\"type\", \"button\");\n            right_1.setAttribute(\"aria-label\", window.VditorI18n.alignRight + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⇧⌘R\") + \">\");\n            right_1.setAttribute(\"data-type\", \"right\");\n            right_1.innerHTML =\n                '<svg><use xlink:href=\"#vditor-icon-align-right\"></use></svg>';\n            right_1.className =\n                \"vditor-icon vditor-tooltipped vditor-tooltipped__n\" +\n                    (alignType === \"right\" ? \" vditor-icon--current\" : \"\");\n            right_1.onclick = function () {\n                setAlign_1(\"right\");\n            };\n            var insertRowElement = document.createElement(\"button\");\n            insertRowElement.setAttribute(\"type\", \"button\");\n            insertRowElement.setAttribute(\"aria-label\", window.VditorI18n.insertRowBelow + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⌘=\") + \">\");\n            insertRowElement.setAttribute(\"data-type\", \"insertRow\");\n            insertRowElement.innerHTML =\n                '<svg><use xlink:href=\"#vditor-icon-insert-row\"></use></svg>';\n            insertRowElement.className =\n                \"vditor-icon vditor-tooltipped vditor-tooltipped__n\";\n            insertRowElement.onclick = function () {\n                var startContainer = getSelection().getRangeAt(0)\n                    .startContainer;\n                var cellElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TD\") ||\n                    (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TH\");\n                if (cellElement) {\n                    insertRow(vditor, range, cellElement);\n                }\n            };\n            var insertRowBElement = document.createElement(\"button\");\n            insertRowBElement.setAttribute(\"type\", \"button\");\n            insertRowBElement.setAttribute(\"aria-label\", window.VditorI18n.insertRowAbove + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⇧⌘F\") + \">\");\n            insertRowBElement.setAttribute(\"data-type\", \"insertRow\");\n            insertRowBElement.innerHTML =\n                '<svg><use xlink:href=\"#vditor-icon-insert-rowb\"></use></svg>';\n            insertRowBElement.className =\n                \"vditor-icon vditor-tooltipped vditor-tooltipped__n\";\n            insertRowBElement.onclick = function () {\n                var startContainer = getSelection().getRangeAt(0)\n                    .startContainer;\n                var cellElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TD\") ||\n                    (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TH\");\n                if (cellElement) {\n                    insertRowAbove(vditor, range, cellElement);\n                }\n            };\n            var insertColumnElement = document.createElement(\"button\");\n            insertColumnElement.setAttribute(\"type\", \"button\");\n            insertColumnElement.setAttribute(\"aria-label\", window.VditorI18n.insertColumnRight + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⇧⌘=\") + \">\");\n            insertColumnElement.setAttribute(\"data-type\", \"insertColumn\");\n            insertColumnElement.innerHTML =\n                '<svg><use xlink:href=\"#vditor-icon-insert-column\"></use></svg>';\n            insertColumnElement.className =\n                \"vditor-icon vditor-tooltipped vditor-tooltipped__n\";\n            insertColumnElement.onclick = function () {\n                var startContainer = getSelection().getRangeAt(0)\n                    .startContainer;\n                var cellElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TD\") ||\n                    (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TH\");\n                if (cellElement) {\n                    insertColumn(vditor, tableElement, cellElement);\n                }\n            };\n            var insertColumnBElement = document.createElement(\"button\");\n            insertColumnBElement.setAttribute(\"type\", \"button\");\n            insertColumnBElement.setAttribute(\"aria-label\", window.VditorI18n.insertColumnLeft + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⇧⌘G\") + \">\");\n            insertColumnBElement.setAttribute(\"data-type\", \"insertColumn\");\n            insertColumnBElement.innerHTML =\n                '<svg><use xlink:href=\"#vditor-icon-insert-columnb\"></use></svg>';\n            insertColumnBElement.className =\n                \"vditor-icon vditor-tooltipped vditor-tooltipped__n\";\n            insertColumnBElement.onclick = function () {\n                var startContainer = getSelection().getRangeAt(0)\n                    .startContainer;\n                var cellElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TD\") ||\n                    (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TH\");\n                if (cellElement) {\n                    insertColumn(vditor, tableElement, cellElement, \"beforebegin\");\n                }\n            };\n            var deleteRowElement = document.createElement(\"button\");\n            deleteRowElement.setAttribute(\"type\", \"button\");\n            deleteRowElement.setAttribute(\"aria-label\", window.VditorI18n[\"delete-row\"] + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⌘-\") + \">\");\n            deleteRowElement.setAttribute(\"data-type\", \"deleteRow\");\n            deleteRowElement.innerHTML =\n                '<svg><use xlink:href=\"#vditor-icon-delete-row\"></use></svg>';\n            deleteRowElement.className =\n                \"vditor-icon vditor-tooltipped vditor-tooltipped__n\";\n            deleteRowElement.onclick = function () {\n                var startContainer = getSelection().getRangeAt(0)\n                    .startContainer;\n                var cellElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TD\") ||\n                    (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TH\");\n                if (cellElement) {\n                    deleteRow(vditor, range, cellElement);\n                }\n            };\n            var deleteColumnElement = document.createElement(\"button\");\n            deleteColumnElement.setAttribute(\"type\", \"button\");\n            deleteColumnElement.setAttribute(\"aria-label\", window.VditorI18n[\"delete-column\"] + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⇧⌘-\") + \">\");\n            deleteColumnElement.setAttribute(\"data-type\", \"deleteColumn\");\n            deleteColumnElement.innerHTML =\n                '<svg><use xlink:href=\"#vditor-icon-delete-column\"></use></svg>';\n            deleteColumnElement.className =\n                \"vditor-icon vditor-tooltipped vditor-tooltipped__n\";\n            deleteColumnElement.onclick = function () {\n                var startContainer = getSelection().getRangeAt(0)\n                    .startContainer;\n                var cellElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TD\") ||\n                    (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TH\");\n                if (cellElement) {\n                    deleteColumn(vditor, range, tableElement, cellElement);\n                }\n            };\n            var inputWrap = document.createElement(\"span\");\n            inputWrap.setAttribute(\"aria-label\", window.VditorI18n.row);\n            inputWrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n            var input_1 = document.createElement(\"input\");\n            inputWrap.appendChild(input_1);\n            input_1.type = \"number\";\n            input_1.min = \"1\";\n            input_1.className = \"vditor-input\";\n            input_1.style.width = \"42px\";\n            input_1.style.textAlign = \"center\";\n            input_1.setAttribute(\"placeholder\", window.VditorI18n.row);\n            input_1.value = tableElement.rows.length.toString();\n            input_1.oninput = function () {\n                updateTable_1();\n            };\n            input_1.onkeydown = function (event) {\n                if (event.isComposing) {\n                    return;\n                }\n                if (event.key === \"Tab\") {\n                    input2_1.focus();\n                    input2_1.select();\n                    event.preventDefault();\n                    return;\n                }\n                if (removeBlockElement(vditor, event)) {\n                    return;\n                }\n                if (focusToElement(event, range)) {\n                    return;\n                }\n            };\n            var input2Wrap = document.createElement(\"span\");\n            input2Wrap.setAttribute(\"aria-label\", window.VditorI18n.column);\n            input2Wrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n            var input2_1 = document.createElement(\"input\");\n            input2Wrap.appendChild(input2_1);\n            input2_1.type = \"number\";\n            input2_1.min = \"1\";\n            input2_1.className = \"vditor-input\";\n            input2_1.style.width = \"42px\";\n            input2_1.style.textAlign = \"center\";\n            input2_1.setAttribute(\"placeholder\", window.VditorI18n.column);\n            input2_1.value = tableElement.rows[0].cells.length.toString();\n            input2_1.oninput = function () {\n                updateTable_1();\n            };\n            input2_1.onkeydown = function (event) {\n                if (event.isComposing) {\n                    return;\n                }\n                if (event.key === \"Tab\") {\n                    input_1.focus();\n                    input_1.select();\n                    event.preventDefault();\n                    return;\n                }\n                if (removeBlockElement(vditor, event)) {\n                    return;\n                }\n                if (focusToElement(event, range)) {\n                    return;\n                }\n            };\n            genUp(range, tableElement, vditor);\n            genDown(range, tableElement, vditor);\n            genClose(tableElement, vditor);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", left_1);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", center_1);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", right_1);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", insertRowBElement);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", insertRowElement);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", insertColumnBElement);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", insertColumnElement);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", deleteRowElement);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", deleteColumnElement);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", inputWrap);\n            vditor.wysiwyg.popover.insertAdjacentHTML(\"beforeend\", \" x \");\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", input2Wrap);\n            setPopoverPosition(vditor, tableElement);\n        }\n        // link ref popover\n        var linkRefElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"link-ref\");\n        if (linkRefElement) {\n            genLinkRefPopover(vditor, linkRefElement, range);\n        }\n        // footnote popover\n        var footnotesRefElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-type\", \"footnotes-ref\");\n        if (footnotesRefElement) {\n            var lang = vditor.options.lang;\n            var options = vditor.options;\n            vditor.wysiwyg.popover.innerHTML = \"\";\n            var inputWrap = document.createElement(\"span\");\n            inputWrap.setAttribute(\"aria-label\", window.VditorI18n.footnoteRef + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⌥Enter\") + \">\");\n            inputWrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n            var input_2 = document.createElement(\"input\");\n            inputWrap.appendChild(input_2);\n            input_2.className = \"vditor-input\";\n            input_2.setAttribute(\"placeholder\", window.VditorI18n.footnoteRef + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⌥Enter\") + \">\");\n            input_2.style.width = \"120px\";\n            input_2.value = footnotesRefElement.getAttribute(\"data-footnotes-label\");\n            input_2.oninput = function () {\n                if (input_2.value.trim() !== \"\") {\n                    footnotesRefElement.setAttribute(\"data-footnotes-label\", input_2.value);\n                }\n                if (typeof vditor.options.input === \"function\") {\n                    vditor.options.input(getMarkdown(vditor));\n                }\n            };\n            input_2.onkeydown = function (event) {\n                if (event.isComposing) {\n                    return;\n                }\n                if (removeBlockElement(vditor, event)) {\n                    return;\n                }\n                if (focusToElement(event, range)) {\n                    return;\n                }\n            };\n            genClose(footnotesRefElement, vditor);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", inputWrap);\n            setPopoverPosition(vditor, footnotesRefElement);\n        }\n        // block popover: math-inline, math-block, html-block, html-inline, code-block, html-entity\n        var blockRenderElement = (0,hasClosest/* hasClosestByClassName */.KJ)(typeElement, \"vditor-wysiwyg__block\");\n        var isBlock = blockRenderElement ? blockRenderElement.getAttribute(\"data-type\").indexOf(\"block\") > -1 : false;\n        vditor.wysiwyg.element\n            .querySelectorAll(\".vditor-wysiwyg__preview\")\n            .forEach(function (itemElement) {\n            if (!blockRenderElement || (blockRenderElement && isBlock && !blockRenderElement.contains(itemElement))) {\n                var previousElement = itemElement.previousElementSibling;\n                previousElement.style.display = \"none\";\n            }\n        });\n        if (blockRenderElement && isBlock) {\n            vditor.wysiwyg.popover.innerHTML = \"\";\n            genUp(range, blockRenderElement, vditor);\n            genDown(range, blockRenderElement, vditor);\n            genClose(blockRenderElement, vditor);\n            if (blockRenderElement.getAttribute(\"data-type\") === \"code-block\") {\n                var languageWrap = document.createElement(\"span\");\n                languageWrap.setAttribute(\"aria-label\", window.VditorI18n.language + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⌥Enter\") + \">\");\n                languageWrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n                var language_1 = document.createElement(\"input\");\n                languageWrap.appendChild(language_1);\n                var codeElement_1 = blockRenderElement.firstElementChild.firstElementChild;\n                language_1.className = \"vditor-input\";\n                language_1.setAttribute(\"placeholder\", window.VditorI18n.language + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⌥Enter\") + \">\");\n                language_1.value =\n                    codeElement_1.className.indexOf(\"language-\") > -1\n                        ? codeElement_1.className.split(\"-\")[1].split(\" \")[0]\n                        : \"\";\n                language_1.oninput = function (e) {\n                    if (language_1.value.trim() !== \"\") {\n                        codeElement_1.className = \"language-\".concat(language_1.value);\n                    }\n                    else {\n                        codeElement_1.className = \"\";\n                        vditor.hint.recentLanguage = \"\";\n                    }\n                    if (blockRenderElement.lastElementChild.classList.contains(\"vditor-wysiwyg__preview\")) {\n                        blockRenderElement.lastElementChild.innerHTML =\n                            blockRenderElement.firstElementChild.innerHTML;\n                        processCodeRender(blockRenderElement.lastElementChild, vditor);\n                    }\n                    afterRenderEvent(vditor);\n                    // 当鼠标点选语言时，触发自定义input事件\n                    if (e.detail === 1) {\n                        // 选择语言后，输入焦点切换到代码输入框\n                        range.setStart(codeElement_1.firstChild, 0);\n                        range.collapse(true);\n                        (0,selection/* setSelectionFocus */.jl)(range);\n                    }\n                };\n                language_1.onkeydown = function (event) {\n                    if (event.isComposing) {\n                        return;\n                    }\n                    if (removeBlockElement(vditor, event)) {\n                        return;\n                    }\n                    if (event.key === \"Escape\" &&\n                        vditor.hint.element.style.display === \"block\") {\n                        vditor.hint.element.style.display = \"none\";\n                        event.preventDefault();\n                        return;\n                    }\n                    vditor.hint.select(event, vditor);\n                    focusToElement(event, range);\n                };\n                language_1.onkeyup = function (event) {\n                    var _a, _b;\n                    if (event.isComposing ||\n                        event.key === \"Enter\" ||\n                        event.key === \"ArrowUp\" ||\n                        event.key === \"Escape\" ||\n                        event.key === \"ArrowDown\") {\n                        return;\n                    }\n                    var matchLangData = [];\n                    var key = language_1.value.substring(0, language_1.selectionStart);\n                    (vditor.options.preview.hljs.langs || constants/* Constants */.Y.ALIAS_CODE_LANGUAGES.concat(((_b = (_a = window.hljs) === null || _a === void 0 ? void 0 : _a.listLanguages()) !== null && _b !== void 0 ? _b : []).sort())).forEach(function (keyName) {\n                        if (keyName.indexOf(key.toLowerCase()) > -1) {\n                            matchLangData.push({\n                                html: keyName,\n                                value: keyName,\n                            });\n                        }\n                    });\n                    vditor.hint.genHTML(matchLangData, key, vditor);\n                    event.preventDefault();\n                };\n                vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", languageWrap);\n            }\n            setPopoverPosition(vditor, blockRenderElement);\n        }\n        else {\n            blockRenderElement = undefined;\n        }\n        if (headingElement) {\n            vditor.wysiwyg.popover.innerHTML = \"\";\n            var inputWrap = document.createElement(\"span\");\n            inputWrap.setAttribute(\"aria-label\", \"ID\" + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⌥Enter\") + \">\");\n            inputWrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n            var input_3 = document.createElement(\"input\");\n            inputWrap.appendChild(input_3);\n            input_3.className = \"vditor-input\";\n            input_3.setAttribute(\"placeholder\", \"ID\" + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⌥Enter\") + \">\");\n            input_3.style.width = \"120px\";\n            input_3.value = headingElement.getAttribute(\"data-id\") || \"\";\n            input_3.oninput = function () {\n                headingElement.setAttribute(\"data-id\", input_3.value);\n                if (typeof vditor.options.input === \"function\") {\n                    vditor.options.input(getMarkdown(vditor));\n                }\n            };\n            input_3.onkeydown = function (event) {\n                if (event.isComposing) {\n                    return;\n                }\n                if (removeBlockElement(vditor, event)) {\n                    return;\n                }\n                if (focusToElement(event, range)) {\n                    return;\n                }\n            };\n            genUp(range, headingElement, vditor);\n            genDown(range, headingElement, vditor);\n            genClose(headingElement, vditor);\n            vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", inputWrap);\n            setPopoverPosition(vditor, headingElement);\n        }\n        // a popover\n        if (aElement) {\n            genAPopover(vditor, aElement, range);\n        }\n        if (!blockquoteElement &&\n            !liElement &&\n            !tableElement &&\n            !blockRenderElement &&\n            !aElement &&\n            !linkRefElement &&\n            !footnotesRefElement &&\n            !headingElement &&\n            !tocElement) {\n            var blockElement = (0,hasClosest/* hasClosestByAttribute */.Th)(typeElement, \"data-block\", \"0\");\n            if (blockElement &&\n                blockElement.parentElement.isEqualNode(vditor.wysiwyg.element)) {\n                vditor.wysiwyg.popover.innerHTML = \"\";\n                genUp(range, blockElement, vditor);\n                genDown(range, blockElement, vditor);\n                genClose(blockElement, vditor);\n                setPopoverPosition(vditor, blockElement);\n            }\n            else {\n                vditor.wysiwyg.popover.style.display = \"none\";\n            }\n        }\n        // 反斜杠特殊处理\n        vditor.wysiwyg.element\n            .querySelectorAll('span[data-type=\"backslash\"] > span')\n            .forEach(function (item) {\n            item.style.display = \"none\";\n        });\n        var backslashElement = (0,hasClosest/* hasClosestByAttribute */.Th)(range.startContainer, \"data-type\", \"backslash\");\n        if (backslashElement) {\n            backslashElement.querySelector(\"span\").style.display = \"inline\";\n        }\n    }, 200);\n};\nvar setPopoverPosition = function (vditor, element) {\n    var targetElement = element;\n    var tableElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(element, \"TABLE\");\n    if (tableElement) {\n        targetElement = tableElement;\n    }\n    vditor.wysiwyg.popover.style.left = \"0\";\n    vditor.wysiwyg.popover.style.display = \"block\";\n    vditor.wysiwyg.popover.style.top =\n        Math.max(-8, targetElement.offsetTop - 21 - vditor.wysiwyg.element.scrollTop) + \"px\";\n    vditor.wysiwyg.popover.style.left =\n        Math.min(targetElement.offsetLeft, vditor.wysiwyg.element.clientWidth - vditor.wysiwyg.popover.clientWidth) + \"px\";\n    vditor.wysiwyg.popover.setAttribute(\"data-top\", (targetElement.offsetTop - 21).toString());\n};\nvar genLinkRefPopover = function (vditor, linkRefElement, range) {\n    if (range === void 0) { range = getSelection().getRangeAt(0); }\n    vditor.wysiwyg.popover.innerHTML = \"\";\n    var updateLinkRef = function () {\n        if (input.value.trim() !== \"\") {\n            if (linkRefElement.tagName === \"IMG\") {\n                linkRefElement.setAttribute(\"alt\", input.value);\n            }\n            else {\n                linkRefElement.textContent = input.value;\n            }\n        }\n        // data-link-label\n        if (input1.value.trim() !== \"\") {\n            linkRefElement.setAttribute(\"data-link-label\", input1.value);\n        }\n        if (typeof vditor.options.input === \"function\") {\n            vditor.options.input(getMarkdown(vditor));\n        }\n    };\n    var inputWrap = document.createElement(\"span\");\n    inputWrap.setAttribute(\"aria-label\", window.VditorI18n.textIsNotEmpty);\n    inputWrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n    var input = document.createElement(\"input\");\n    inputWrap.appendChild(input);\n    input.className = \"vditor-input\";\n    input.setAttribute(\"placeholder\", window.VditorI18n.textIsNotEmpty);\n    input.style.width = \"120px\";\n    input.value =\n        linkRefElement.getAttribute(\"alt\") || linkRefElement.textContent;\n    input.oninput = function () {\n        updateLinkRef();\n    };\n    input.onkeydown = function (event) {\n        if (removeBlockElement(vditor, event)) {\n            return;\n        }\n        if (focusToElement(event, range)) {\n            return;\n        }\n        linkHotkey(vditor, linkRefElement, event, input1);\n    };\n    var input1Wrap = document.createElement(\"span\");\n    input1Wrap.setAttribute(\"aria-label\", window.VditorI18n.linkRef);\n    input1Wrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n    var input1 = document.createElement(\"input\");\n    input1Wrap.appendChild(input1);\n    input1.className = \"vditor-input\";\n    input1.setAttribute(\"placeholder\", window.VditorI18n.linkRef);\n    input1.value = linkRefElement.getAttribute(\"data-link-label\");\n    input1.oninput = function () {\n        updateLinkRef();\n    };\n    input1.onkeydown = function (event) {\n        if (removeBlockElement(vditor, event)) {\n            return;\n        }\n        if (focusToElement(event, range)) {\n            return;\n        }\n        linkHotkey(vditor, linkRefElement, event, input);\n    };\n    genClose(linkRefElement, vditor);\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", inputWrap);\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", input1Wrap);\n    setPopoverPosition(vditor, linkRefElement);\n};\nvar genUp = function (range, element, vditor) {\n    var previousElement = element.previousElementSibling;\n    if (!previousElement ||\n        (!element.parentElement.isEqualNode(vditor.wysiwyg.element) &&\n            element.tagName !== \"LI\")) {\n        return;\n    }\n    var upElement = document.createElement(\"button\");\n    upElement.setAttribute(\"type\", \"button\");\n    upElement.setAttribute(\"data-type\", \"up\");\n    upElement.setAttribute(\"aria-label\", window.VditorI18n.up + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⇧⌘U\") + \">\");\n    upElement.innerHTML = '<svg><use xlink:href=\"#vditor-icon-up\"></use></svg>';\n    upElement.className = \"vditor-icon vditor-tooltipped vditor-tooltipped__n\";\n    upElement.onclick = function () {\n        range.insertNode(document.createElement(\"wbr\"));\n        previousElement.insertAdjacentElement(\"beforebegin\", element);\n        (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n        afterRenderEvent(vditor);\n        highlightToolbarWYSIWYG(vditor);\n        scrollCenter(vditor);\n    };\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", upElement);\n};\nvar genDown = function (range, element, vditor) {\n    var nextElement = element.nextElementSibling;\n    if (!nextElement ||\n        (!element.parentElement.isEqualNode(vditor.wysiwyg.element) &&\n            element.tagName !== \"LI\")) {\n        return;\n    }\n    var downElement = document.createElement(\"button\");\n    downElement.setAttribute(\"type\", \"button\");\n    downElement.setAttribute(\"data-type\", \"down\");\n    downElement.setAttribute(\"aria-label\", window.VditorI18n.down + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⇧⌘D\") + \">\");\n    downElement.innerHTML =\n        '<svg><use xlink:href=\"#vditor-icon-down\"></use></svg>';\n    downElement.className =\n        \"vditor-icon vditor-tooltipped vditor-tooltipped__n\";\n    downElement.onclick = function () {\n        range.insertNode(document.createElement(\"wbr\"));\n        nextElement.insertAdjacentElement(\"afterend\", element);\n        (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n        afterRenderEvent(vditor);\n        highlightToolbarWYSIWYG(vditor);\n        scrollCenter(vditor);\n    };\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", downElement);\n};\nvar genClose = function (element, vditor) {\n    var close = document.createElement(\"button\");\n    close.setAttribute(\"type\", \"button\");\n    close.setAttribute(\"data-type\", \"remove\");\n    close.setAttribute(\"aria-label\", window.VditorI18n.remove + \"<\" + (0,compatibility/* updateHotkeyTip */.fG)(\"⇧⌘X\") + \">\");\n    close.innerHTML =\n        '<svg><use xlink:href=\"#vditor-icon-trashcan\"></use></svg>';\n    close.className = \"vditor-icon vditor-tooltipped vditor-tooltipped__n\";\n    close.onclick = function () {\n        var range = (0,selection/* getEditorRange */.RN)(vditor);\n        range.setStartAfter(element);\n        (0,selection/* setSelectionFocus */.jl)(range);\n        element.remove();\n        afterRenderEvent(vditor);\n        highlightToolbarWYSIWYG(vditor);\n        if ([\"H1\", \"H2\", \"H3\", \"H4\", \"H5\", \"H6\"].includes(element.tagName)) {\n            renderToc(vditor);\n        }\n    };\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", close);\n};\nvar linkHotkey = function (vditor, element, event, nextInputElement) {\n    if (event.isComposing) {\n        return;\n    }\n    if (event.key === \"Tab\") {\n        nextInputElement.focus();\n        nextInputElement.select();\n        event.preventDefault();\n        return;\n    }\n    if (!(0,compatibility/* isCtrl */._0)(event) &&\n        !event.shiftKey &&\n        event.altKey &&\n        event.key === \"Enter\") {\n        var range = (0,selection/* getEditorRange */.RN)(vditor);\n        // firefox 不会打断 link https://github.com/Vanessa219/vditor/issues/193\n        element.insertAdjacentHTML(\"afterend\", constants/* Constants */.Y.ZWSP);\n        range.setStartAfter(element.nextSibling);\n        range.collapse(true);\n        (0,selection/* setSelectionFocus */.jl)(range);\n        event.preventDefault();\n    }\n};\nvar genAPopover = function (vditor, aElement, range) {\n    vditor.wysiwyg.popover.innerHTML = \"\";\n    var updateA = function () {\n        if (input.value.trim() !== \"\") {\n            aElement.innerHTML = input.value;\n        }\n        aElement.setAttribute(\"href\", input1.value);\n        aElement.setAttribute(\"title\", input2.value);\n        afterRenderEvent(vditor);\n    };\n    aElement.querySelectorAll(\"[data-marker]\").forEach(function (item) {\n        item.removeAttribute(\"data-marker\");\n    });\n    var inputWrap = document.createElement(\"span\");\n    inputWrap.setAttribute(\"aria-label\", window.VditorI18n.textIsNotEmpty);\n    inputWrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n    var input = document.createElement(\"input\");\n    inputWrap.appendChild(input);\n    input.className = \"vditor-input\";\n    input.setAttribute(\"placeholder\", window.VditorI18n.textIsNotEmpty);\n    input.style.width = \"120px\";\n    input.value = aElement.innerHTML || \"\";\n    input.oninput = function () {\n        updateA();\n    };\n    input.onkeydown = function (event) {\n        if (removeBlockElement(vditor, event)) {\n            return;\n        }\n        if (focusToElement(event, range)) {\n            return;\n        }\n        linkHotkey(vditor, aElement, event, input1);\n    };\n    var input1Wrap = document.createElement(\"span\");\n    input1Wrap.setAttribute(\"aria-label\", window.VditorI18n.link);\n    input1Wrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n    var input1 = document.createElement(\"input\");\n    input1Wrap.appendChild(input1);\n    input1.className = \"vditor-input\";\n    input1.setAttribute(\"placeholder\", window.VditorI18n.link);\n    input1.value = aElement.getAttribute(\"href\") || \"\";\n    input1.oninput = function () {\n        updateA();\n    };\n    input1.onkeydown = function (event) {\n        if (removeBlockElement(vditor, event)) {\n            return;\n        }\n        if (focusToElement(event, range)) {\n            return;\n        }\n        linkHotkey(vditor, aElement, event, input2);\n    };\n    var input2Wrap = document.createElement(\"span\");\n    input2Wrap.setAttribute(\"aria-label\", window.VditorI18n.tooltipText);\n    input2Wrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n    var input2 = document.createElement(\"input\");\n    input2Wrap.appendChild(input2);\n    input2.className = \"vditor-input\";\n    input2.setAttribute(\"placeholder\", window.VditorI18n.tooltipText);\n    input2.style.width = \"60px\";\n    input2.value = aElement.getAttribute(\"title\") || \"\";\n    input2.oninput = function () {\n        updateA();\n    };\n    input2.onkeydown = function (event) {\n        if (removeBlockElement(vditor, event)) {\n            return;\n        }\n        if (focusToElement(event, range)) {\n            return;\n        }\n        linkHotkey(vditor, aElement, event, input);\n    };\n    genClose(aElement, vditor);\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", inputWrap);\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", input1Wrap);\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", input2Wrap);\n    setPopoverPosition(vditor, aElement);\n};\nvar genImagePopover = function (event, vditor) {\n    var imgElement = event.target;\n    vditor.wysiwyg.popover.innerHTML = \"\";\n    var updateImg = function () {\n        imgElement.setAttribute(\"src\", inputElement.value);\n        imgElement.setAttribute(\"alt\", alt.value);\n        imgElement.setAttribute(\"title\", title.value);\n        if (typeof vditor.options.input === \"function\") {\n            vditor.options.input(getMarkdown(vditor));\n        }\n    };\n    var inputWrap = document.createElement(\"span\");\n    inputWrap.setAttribute(\"aria-label\", window.VditorI18n.imageURL);\n    inputWrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n    var inputElement = document.createElement(\"input\");\n    inputWrap.appendChild(inputElement);\n    inputElement.className = \"vditor-input\";\n    inputElement.setAttribute(\"placeholder\", window.VditorI18n.imageURL);\n    inputElement.value = imgElement.getAttribute(\"src\") || \"\";\n    inputElement.oninput = function () {\n        updateImg();\n    };\n    inputElement.onkeydown = function (elementEvent) {\n        removeBlockElement(vditor, elementEvent);\n    };\n    var altWrap = document.createElement(\"span\");\n    altWrap.setAttribute(\"aria-label\", window.VditorI18n.alternateText);\n    altWrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n    var alt = document.createElement(\"input\");\n    altWrap.appendChild(alt);\n    alt.className = \"vditor-input\";\n    alt.setAttribute(\"placeholder\", window.VditorI18n.alternateText);\n    alt.style.width = \"52px\";\n    alt.value = imgElement.getAttribute(\"alt\") || \"\";\n    alt.oninput = function () {\n        updateImg();\n    };\n    alt.onkeydown = function (elementEvent) {\n        removeBlockElement(vditor, elementEvent);\n    };\n    var titleWrap = document.createElement(\"span\");\n    titleWrap.setAttribute(\"aria-label\", window.VditorI18n.title);\n    titleWrap.className = \"vditor-tooltipped vditor-tooltipped__n\";\n    var title = document.createElement(\"input\");\n    titleWrap.appendChild(title);\n    title.className = \"vditor-input\";\n    title.setAttribute(\"placeholder\", window.VditorI18n.title);\n    title.value = imgElement.getAttribute(\"title\") || \"\";\n    title.oninput = function () {\n        updateImg();\n    };\n    title.onkeydown = function (elementEvent) {\n        removeBlockElement(vditor, elementEvent);\n    };\n    genClose(imgElement, vditor);\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", inputWrap);\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", altWrap);\n    vditor.wysiwyg.popover.insertAdjacentElement(\"beforeend\", titleWrap);\n    setPopoverPosition(vditor, imgElement);\n};\nvar focusToElement = function (event, range) {\n    if ((!(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && event.key === \"Enter\") || event.key === \"Escape\") {\n        if (range) {\n            (0,selection/* setSelectionFocus */.jl)(range);\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        return true;\n    }\n};\n\n;// ./src/ts/util/highlightToolbar.ts\n\n\nvar highlightToolbar = function (vditor) {\n    if (vditor.currentMode === \"wysiwyg\") {\n        highlightToolbarWYSIWYG(vditor);\n    }\n    else if (vditor.currentMode === \"ir\") {\n        highlightToolbarIR(vditor);\n    }\n};\n\n;// ./src/ts/wysiwyg/renderDomByMd.ts\n\n\nvar renderDomByMd = function (vditor, md, options) {\n    if (options === void 0) { options = {\n        enableAddUndoStack: true,\n        enableHint: false,\n        enableInput: true,\n    }; }\n    var editorElement = vditor.wysiwyg.element;\n    var res = md.split(\"\\n\").reduce(function (result, item) {\n        var trimmedItem = item.trim();\n        var isTable = trimmedItem.startsWith(\"|\");\n        if (isTable) {\n            if (result.startIndex === -1) {\n                result.startIndex = result.data.length;\n            }\n            // 改进列数计算，考虑转义字符 - 使用兼容性更好的方法\n            var columnCount = 0;\n            for (var i = 0; i < trimmedItem.length; i++) {\n                if (trimmedItem[i] === '|' && (i === 0 || trimmedItem[i - 1] !== '\\\\')) {\n                    columnCount++;\n                }\n            }\n            columnCount = Math.max(0, columnCount - 1); // 减去1因为表格行以|开头\n            result.headerColumns = Math.max(columnCount, result.headerColumns);\n            result.isTable = true;\n        }\n        else if (!isTable && result.isTable) {\n            result.data.splice(result.startIndex + 1, 1, Array(result.headerColumns).fill(\"| --- \").join(\"\") + \"|\");\n            result.data.push(\"\");\n            result.isTable = false;\n            result.startIndex = -1;\n            result.headerColumns = 0;\n        }\n        else {\n            result.data.push(\"\");\n        }\n        result.data.push(item);\n        return result;\n    }, { data: [], isTable: false, startIndex: -1, headerColumns: 0 });\n    if (res.isTable) {\n        res.data.splice(res.startIndex + 1, 1, Array(res.headerColumns).fill(\"| --- \").join(\"\") + \"|\");\n        res.data.push(\"\");\n    }\n    editorElement.innerHTML = vditor.lute.Md2VditorDOM(res.data.join('\\n'));\n    editorElement.querySelectorAll(\".vditor-wysiwyg__preview[data-render='2']\").forEach(function (item) {\n        processCodeRender(item, vditor);\n        item.previousElementSibling.setAttribute(\"style\", \"display:none\");\n    });\n    afterRenderEvent(vditor, options);\n};\n\n;// ./src/ts/wysiwyg/toolbarEvent.ts\n\n\n\n\n\n\n\n\n\nvar cancelBES = function (range, vditor, commandName) {\n    var element = range.startContainer.parentElement;\n    var jump = false;\n    var lastTagName = \"\";\n    var lastEndTagName = \"\";\n    var splitHTML = splitElement(range);\n    var lastBeforeHTML = splitHTML.beforeHTML;\n    var lastAfterHTML = splitHTML.afterHTML;\n    while (element && !jump) {\n        var tagName = element.tagName;\n        if (tagName === \"STRIKE\") {\n            tagName = \"S\";\n        }\n        if (tagName === \"I\") {\n            tagName = \"EM\";\n        }\n        if (tagName === \"B\") {\n            tagName = \"STRONG\";\n        }\n        if (tagName === \"S\" || tagName === \"STRONG\" || tagName === \"EM\") {\n            var insertHTML = \"\";\n            var previousHTML = \"\";\n            var nextHTML = \"\";\n            if (element.parentElement.getAttribute(\"data-block\") !== \"0\") {\n                previousHTML = getPreviousHTML(element);\n                nextHTML = getNextHTML(element);\n            }\n            if (lastBeforeHTML || previousHTML) {\n                insertHTML = \"\".concat(previousHTML, \"<\").concat(tagName, \">\").concat(lastBeforeHTML, \"</\").concat(tagName, \">\");\n                lastBeforeHTML = insertHTML;\n            }\n            if ((commandName === \"bold\" && tagName === \"STRONG\") ||\n                (commandName === \"italic\" && tagName === \"EM\") ||\n                (commandName === \"strikeThrough\" && tagName === \"S\")) {\n                // 取消\n                insertHTML += \"\".concat(lastTagName).concat(constants/* Constants */.Y.ZWSP, \"<wbr>\").concat(lastEndTagName);\n                jump = true;\n            }\n            if (lastAfterHTML || nextHTML) {\n                lastAfterHTML = \"<\".concat(tagName, \">\").concat(lastAfterHTML, \"</\").concat(tagName, \">\").concat(nextHTML);\n                insertHTML += lastAfterHTML;\n            }\n            if (element.parentElement.getAttribute(\"data-block\") !== \"0\") {\n                element = element.parentElement;\n                element.innerHTML = insertHTML;\n            }\n            else {\n                element.outerHTML = insertHTML;\n                element = element.parentElement;\n            }\n            lastTagName = \"<\".concat(tagName, \">\") + lastTagName;\n            lastEndTagName = \"</\".concat(tagName, \">\") + lastEndTagName;\n        }\n        else {\n            jump = true;\n        }\n    }\n    (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n};\nvar toolbarEvent = function (vditor, actionBtn, event, options) {\n    if (vditor.wysiwyg.composingLock // Mac Chrome 中韩文结束会出发此事件，导致重复末尾字符 https://github.com/Vanessa219/vditor/issues/188\n        && event instanceof CustomEvent // 点击按钮应忽略输入法 https://github.com/Vanessa219/vditor/issues/473\n    ) {\n        return;\n    }\n    var useHighlight = true;\n    var useRender = true;\n    if (vditor.wysiwyg.element.querySelector(\"wbr\")) {\n        vditor.wysiwyg.element.querySelector(\"wbr\").remove();\n    }\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    var commandName = actionBtn.getAttribute(\"data-type\");\n    // 移除\n    if (actionBtn.classList.contains(\"vditor-menu--current\")) {\n        if (commandName === \"strike\") {\n            commandName = \"strikeThrough\";\n        }\n        if (commandName === \"quote\") {\n            var quoteElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.startContainer, \"BLOCKQUOTE\");\n            if (!quoteElement) {\n                quoteElement = range.startContainer.childNodes[range.startOffset];\n            }\n            if (quoteElement) {\n                useHighlight = false;\n                actionBtn.classList.remove(\"vditor-menu--current\");\n                range.insertNode(document.createElement(\"wbr\"));\n                quoteElement.outerHTML = quoteElement.innerHTML.trim() === \"\" ?\n                    \"<p data-block=\\\"0\\\">\".concat(quoteElement.innerHTML, \"</p>\") : quoteElement.innerHTML;\n                (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n            }\n        }\n        else if (commandName === \"inline-code\") {\n            var inlineCodeElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.startContainer, \"CODE\");\n            if (!inlineCodeElement) {\n                inlineCodeElement = range.startContainer.childNodes[range.startOffset];\n            }\n            if (inlineCodeElement) {\n                inlineCodeElement.outerHTML = inlineCodeElement.innerHTML.replace(constants/* Constants */.Y.ZWSP, \"\") + \"<wbr>\";\n                (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n            }\n        }\n        else if (commandName === \"link\") {\n            if (!range.collapsed) {\n                document.execCommand(\"unlink\", false, \"\");\n            }\n            else {\n                range.selectNode(range.startContainer.parentElement);\n                document.execCommand(\"unlink\", false, \"\");\n            }\n        }\n        else if (commandName === \"check\" || commandName === \"list\" || commandName === \"ordered-list\") {\n            listToggle(vditor, range, commandName);\n            (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n            useHighlight = false;\n            actionBtn.classList.remove(\"vditor-menu--current\");\n        }\n        else {\n            // bold, italic, strike\n            useHighlight = false;\n            actionBtn.classList.remove(\"vditor-menu--current\");\n            if (range.toString() === \"\") {\n                cancelBES(range, vditor, commandName);\n            }\n            else {\n                document.execCommand(commandName, false, \"\");\n            }\n        }\n    }\n    else {\n        // 添加\n        if (vditor.wysiwyg.element.childNodes.length === 0) {\n            vditor.wysiwyg.element.innerHTML = '<p data-block=\"0\"><wbr></p>';\n            (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n        }\n        var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);\n        if (commandName === \"quote\") {\n            if (!blockElement) {\n                blockElement = range.startContainer.childNodes[range.startOffset];\n            }\n            if (blockElement) {\n                useHighlight = false;\n                actionBtn.classList.add(\"vditor-menu--current\");\n                range.insertNode(document.createElement(\"wbr\"));\n                var liElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.startContainer, \"LI\");\n                // li 中软换行\n                if (liElement && blockElement.contains(liElement)) {\n                    liElement.innerHTML = \"<blockquote data-block=\\\"0\\\">\".concat(liElement.innerHTML, \"</blockquote>\");\n                }\n                else {\n                    blockElement.outerHTML = \"<blockquote data-block=\\\"0\\\">\".concat(blockElement.outerHTML, \"</blockquote>\");\n                }\n                (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n            }\n        }\n        else if (commandName === \"check\" || commandName === \"list\" || commandName === \"ordered-list\") {\n            listToggle(vditor, range, commandName, false);\n            (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n            useHighlight = false;\n            removeCurrentToolbar(vditor.toolbar.elements, [\"check\", \"list\", \"ordered-list\"]);\n            actionBtn.classList.add(\"vditor-menu--current\");\n        }\n        else if (commandName === \"inline-code\") {\n            if (range.toString() === \"\") {\n                var node = document.createElement(\"code\");\n                node.textContent = constants/* Constants */.Y.ZWSP;\n                range.insertNode(node);\n                range.setStart(node.firstChild, 1);\n                range.collapse(true);\n                (0,selection/* setSelectionFocus */.jl)(range);\n            }\n            else if (range.startContainer.nodeType === 3) {\n                var node = document.createElement(\"code\");\n                range.surroundContents(node);\n                range.insertNode(node);\n                (0,selection/* setSelectionFocus */.jl)(range);\n            }\n            actionBtn.classList.add(\"vditor-menu--current\");\n        }\n        else if (commandName === \"code\") {\n            var node = document.createElement(\"div\");\n            node.className = \"vditor-wysiwyg__block\";\n            node.setAttribute(\"data-type\", \"code-block\");\n            node.setAttribute(\"data-block\", \"0\");\n            node.setAttribute(\"data-marker\", \"```\");\n            if (range.toString() === \"\") {\n                node.innerHTML = \"<pre><code><wbr>\\n</code></pre>\";\n            }\n            else {\n                node.innerHTML = \"<pre><code>\".concat(range.toString(), \"<wbr></code></pre>\");\n                range.deleteContents();\n            }\n            range.insertNode(node);\n            if (blockElement) {\n                blockElement.outerHTML = vditor.lute.SpinVditorDOM(blockElement.outerHTML);\n            }\n            (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n            vditor.wysiwyg.element.querySelectorAll(\".vditor-wysiwyg__preview[data-render='2']\").forEach(function (item) {\n                processCodeRender(item, vditor);\n            });\n            actionBtn.classList.add(\"vditor-menu--disabled\");\n        }\n        else if (commandName === \"link\") {\n            if (range.toString() === \"\") {\n                var aElement = document.createElement(\"a\");\n                aElement.innerText = constants/* Constants */.Y.ZWSP;\n                range.insertNode(aElement);\n                range.setStart(aElement.firstChild, 1);\n                range.collapse(true);\n                genAPopover(vditor, aElement, range);\n                var textInputElement = vditor.wysiwyg.popover.querySelector(\"input\");\n                textInputElement.value = \"\";\n                textInputElement.focus();\n                useRender = false;\n            }\n            else {\n                var node = document.createElement(\"a\");\n                node.setAttribute(\"href\", \"\");\n                node.innerHTML = range.toString();\n                range.surroundContents(node);\n                range.insertNode(node);\n                (0,selection/* setSelectionFocus */.jl)(range);\n                genAPopover(vditor, node, range);\n                var textInputElements = vditor.wysiwyg.popover.querySelectorAll(\"input\");\n                textInputElements[0].value = node.innerText;\n                textInputElements[1].focus();\n            }\n            useHighlight = false;\n            actionBtn.classList.add(\"vditor-menu--current\");\n        }\n        else if (commandName === \"table\") {\n            var tableHTML_1 = \"<table data-block=\\\"0\\\"><thead><tr><th>col1<wbr></th><th>col2</th><th>col3</th></tr></thead><tbody><tr><td> </td><td> </td><td> </td></tr><tr><td> </td><td> </td><td> </td></tr></tbody></table>\";\n            if (range.toString().trim() === \"\") {\n                if (blockElement && blockElement.innerHTML.trim().replace(constants/* Constants */.Y.ZWSP, \"\") === \"\") {\n                    blockElement.outerHTML = tableHTML_1;\n                }\n                else {\n                    document.execCommand(\"insertHTML\", false, tableHTML_1);\n                }\n                range.selectNode(vditor.wysiwyg.element.querySelector(\"wbr\").previousSibling);\n                vditor.wysiwyg.element.querySelector(\"wbr\").remove();\n                (0,selection/* setSelectionFocus */.jl)(range);\n            }\n            else {\n                tableHTML_1 = \"<table data-block=\\\"0\\\"><thead><tr>\";\n                var tableText = range.toString().split(\"\\n\");\n                var delimiter_1 = tableText[0].split(\",\").length > tableText[0].split(\"\\t\").length ? \",\" : \"\\t\";\n                tableText.forEach(function (rows, index) {\n                    if (index === 0) {\n                        rows.split(delimiter_1).forEach(function (header, subIndex) {\n                            if (subIndex === 0) {\n                                tableHTML_1 += \"<th>\".concat(header, \"<wbr></th>\");\n                            }\n                            else {\n                                tableHTML_1 += \"<th>\".concat(header, \"</th>\");\n                            }\n                        });\n                        tableHTML_1 += \"</tr></thead>\";\n                    }\n                    else {\n                        if (index === 1) {\n                            tableHTML_1 += \"<tbody><tr>\";\n                        }\n                        else {\n                            tableHTML_1 += \"<tr>\";\n                        }\n                        rows.split(delimiter_1).forEach(function (cell) {\n                            tableHTML_1 += \"<td>\".concat(cell, \"</td>\");\n                        });\n                        tableHTML_1 += \"</tr>\";\n                    }\n                });\n                tableHTML_1 += \"</tbody></table>\";\n                document.execCommand(\"insertHTML\", false, tableHTML_1);\n                (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n            }\n            useHighlight = false;\n            actionBtn.classList.add(\"vditor-menu--disabled\");\n        }\n        else if (commandName === \"line\") {\n            if (blockElement) {\n                var hrHTML = '<hr data-block=\"0\"><p data-block=\"0\"><wbr>\\n</p>';\n                if (blockElement.innerHTML.trim() === \"\") {\n                    blockElement.outerHTML = hrHTML;\n                }\n                else {\n                    blockElement.insertAdjacentHTML(\"afterend\", hrHTML);\n                }\n                (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n            }\n        }\n        else if (['echarts', 'math', 'mermaid', 'mindmap', 'mermaid-sequence', 'mermaid-gantt'].includes(commandName)) {\n            var node = document.createElement(\"div\");\n            node.className = \"vditor-wysiwyg__block\";\n            var isMath = commandName === 'math';\n            node.setAttribute(\"data-type\", isMath ? \"math-block\" : 'code-block');\n            node.setAttribute(\"data-block\", \"0\");\n            if (!isMath) {\n                node.setAttribute(\"data-marker\", '```');\n            }\n            if (range.toString() === \"\") {\n                node.innerHTML = \"<pre><code \".concat(isMath ? 'data-type=\"math-block\"' : '', \">\").concat(options.example, \"<wbr>\\n</code></pre>\");\n            }\n            else {\n                node.innerHTML = \"<pre><code \".concat(isMath ? 'data-type=\"math-block\"' : '', \">\").concat(range.toString(), \"<wbr></code></pre>\");\n                range.deleteContents();\n            }\n            range.insertNode(node);\n            if (blockElement) {\n                blockElement.outerHTML = vditor.lute.SpinVditorDOM(blockElement.outerHTML);\n            }\n            setTimeout(function () {\n                var inputElement = vditor.wysiwyg.popover.querySelector(\"input\");\n                if (!inputElement || !options.type)\n                    return;\n                inputElement.value = options.type;\n                var inputEvent = new Event(\"input\", {\n                    bubbles: true,\n                    cancelable: false,\n                });\n                inputElement.dispatchEvent(inputEvent);\n            }, 600);\n            (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n            vditor.wysiwyg.element.querySelectorAll(\".vditor-wysiwyg__preview[data-render='2']\").forEach(function (item) {\n                console.log(item);\n                processCodeRender(item, vditor);\n            });\n            actionBtn.classList.add(\"vditor-menu--disabled\");\n        }\n        else {\n            // bold, italic, strike\n            useHighlight = false;\n            actionBtn.classList.add(\"vditor-menu--current\");\n            if (commandName === \"strike\") {\n                commandName = \"strikeThrough\";\n            }\n            if (range.toString() === \"\" && (commandName === \"bold\" || commandName === \"italic\" || commandName === \"strikeThrough\")) {\n                var tagName = \"strong\";\n                if (commandName === \"italic\") {\n                    tagName = \"em\";\n                }\n                else if (commandName === \"strikeThrough\") {\n                    tagName = \"s\";\n                }\n                var node = document.createElement(tagName);\n                node.textContent = constants/* Constants */.Y.ZWSP;\n                range.insertNode(node);\n                if (node.previousSibling && node.previousSibling.textContent === constants/* Constants */.Y.ZWSP) {\n                    // 移除多层嵌套中的 zwsp\n                    node.previousSibling.textContent = \"\";\n                }\n                range.setStart(node.firstChild, 1);\n                range.collapse(true);\n                (0,selection/* setSelectionFocus */.jl)(range);\n            }\n            else {\n                document.execCommand(commandName, false, \"\");\n            }\n        }\n    }\n    if (useHighlight) {\n        highlightToolbarWYSIWYG(vditor);\n    }\n    if (useRender) {\n        afterRenderEvent(vditor);\n    }\n};\n\n;// ./src/ts/toolbar/MenuItem.ts\n\n\n\n\n\n\nvar MenuItem = /** @class */ (function () {\n    function MenuItem(vditor, menuItem) {\n        var _a;\n        var _this = this;\n        this.element = document.createElement(\"div\");\n        if (menuItem.className) {\n            (_a = this.element.classList).add.apply(_a, menuItem.className.split(\" \"));\n        }\n        var hotkey = menuItem.hotkey ? \" <\".concat((0,compatibility/* updateHotkeyTip */.fG)(menuItem.hotkey), \">\") : \"\";\n        if (menuItem.level === 2) {\n            hotkey = menuItem.hotkey ? \" &lt;\".concat((0,compatibility/* updateHotkeyTip */.fG)(menuItem.hotkey), \"&gt;\") : \"\";\n        }\n        var nameText = window.VditorI18n[menuItem.name];\n        var tip = menuItem.tip ? menuItem.tip + hotkey : \"\".concat(nameText).concat(hotkey);\n        var tagName = \"button\";\n        if (menuItem.level === 2) {\n            this.element.innerHTML = \"<\".concat(tagName, \" data-type=\\\"\").concat(menuItem.name, \"\\\" style=\\\"display:flex; align-items: center; gap: 8px;\\\">\\n            \").concat(menuItem.icon, \"\\n            <span>\").concat(nameText, \"</span>\\n            </\").concat(tagName, \">\");\n        }\n        else {\n            this.element.classList.add(\"vditor-toolbar__item\");\n            var iconElement = document.createElement(tagName);\n            iconElement.setAttribute(\"data-type\", menuItem.name);\n            iconElement.style.cssText = 'display:flex; align-items: center; gap: 4px;';\n            iconElement.className = \"vditor-tooltipped vditor-tooltipped__\".concat(menuItem.tipPosition);\n            iconElement.setAttribute(\"aria-label\", tip);\n            if (menuItem.toolbar) {\n                iconElement.innerHTML = \"\\n                \".concat(menuItem.icon, \"\\n                <span>\").concat(nameText, \"</span>\\n                 <svg style=\\\"width: 10px; height: 10px;\\\"><use xlink:href=\\\"#vditor-icon-caret-down\\\"></use></svg>\\n                \");\n            }\n            else {\n                iconElement.innerHTML = \"\".concat(menuItem.icon);\n            }\n            this.element.appendChild(iconElement);\n        }\n        if (!menuItem.prefix && !menuItem.example) {\n            return;\n        }\n        this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            if (_this.element.firstElementChild.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                return;\n            }\n            if (vditor.currentMode === \"wysiwyg\") {\n                toolbarEvent(vditor, _this.element.children[0], event, menuItem);\n            }\n            else if (vditor.currentMode === \"ir\") {\n                process_processToolbar(vditor, _this.element.children[0], menuItem.prefix || \"\", menuItem.suffix || \"\", menuItem);\n            }\n            else {\n                processToolbar(vditor, _this.element.children[0], menuItem.prefix || \"\", menuItem.suffix || \"\", menuItem);\n            }\n        });\n    }\n    return MenuItem;\n}());\n\n\n;// ./src/ts/toolbar/EditMode.ts\nvar __extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar setEditMode = function (vditor, type, event, mode) {\n    var markdownText;\n    if (typeof event !== \"string\") {\n        hidePanel(vditor, [\"subToolbar\", \"hint\"]);\n        event.preventDefault();\n        markdownText = getMarkdown(vditor);\n    }\n    else {\n        markdownText = event;\n    }\n    var preview = mode || vditor.options.preview.mode;\n    if (vditor.currentMode === type && preview === vditor.options.preview.mode && typeof event !== \"string\") {\n        return;\n    }\n    if (vditor.devtools) {\n        vditor.devtools.renderEchart(vditor);\n    }\n    if ((preview === \"both\") && type === \"sv\") {\n        vditor.options.preview.mode = 'both';\n        vditor.preview.element.style.display = \"block\";\n    }\n    else {\n        vditor.options.preview.mode = 'editor';\n        vditor.preview.element.style.display = \"none\";\n    }\n    enableToolbar(vditor.toolbar.elements, constants/* Constants */.Y.EDIT_TOOLBARS);\n    removeCurrentToolbar(vditor.toolbar.elements, constants/* Constants */.Y.EDIT_TOOLBARS);\n    disableToolbar(vditor.toolbar.elements, [\"outdent\", \"indent\"]);\n    if (type === \"ir\") {\n        hideToolbar(vditor.toolbar.elements, [\"both\"]);\n        showToolbar(vditor.toolbar.elements, [\"outdent\", \"indent\", \"outline\", \"insert-before\", \"insert-after\"]);\n        vditor.sv.element.style.display = \"none\";\n        vditor.wysiwyg.element.parentElement.style.display = \"none\";\n        vditor.ir.element.parentElement.style.display = \"block\";\n        vditor.lute.SetVditorIR(true);\n        vditor.lute.SetVditorWYSIWYG(false);\n        vditor.lute.SetVditorSV(false);\n        vditor.currentMode = \"ir\";\n        vditor.ir.element.innerHTML = vditor.lute.Md2VditorIRDOM(markdownText);\n        process_processAfterRender(vditor, {\n            enableAddUndoStack: true,\n            enableHint: false,\n            enableInput: false,\n        });\n        setPadding(vditor);\n        vditor.ir.element.querySelectorAll(\".vditor-ir__preview[data-render='2']\").forEach(function (item) {\n            processCodeRender(item, vditor);\n        });\n        vditor.ir.element.querySelectorAll(\".vditor-toc\").forEach(function (item) {\n            (0,mathRender/* mathRender */.T)(item, {\n                cdn: vditor.options.cdn,\n                math: vditor.options.preview.math,\n            });\n        });\n    }\n    else if (type === \"wysiwyg\") {\n        hideToolbar(vditor.toolbar.elements, [\"both\"]);\n        showToolbar(vditor.toolbar.elements, [\"outdent\", \"indent\", \"outline\", \"insert-before\", \"insert-after\"]);\n        vditor.sv.element.style.display = \"none\";\n        vditor.wysiwyg.element.parentElement.style.display = \"block\";\n        vditor.ir.element.parentElement.style.display = \"none\";\n        vditor.lute.SetVditorIR(false);\n        vditor.lute.SetVditorWYSIWYG(true);\n        vditor.lute.SetVditorSV(false);\n        vditor.currentMode = \"wysiwyg\";\n        setPadding(vditor);\n        renderDomByMd(vditor, markdownText, {\n            enableAddUndoStack: true,\n            enableHint: false,\n            enableInput: false,\n        });\n        vditor.wysiwyg.element.querySelectorAll(\".vditor-toc\").forEach(function (item) {\n            (0,mathRender/* mathRender */.T)(item, {\n                cdn: vditor.options.cdn,\n                math: vditor.options.preview.math,\n            });\n        });\n        vditor.wysiwyg.popover.style.display = \"none\";\n    }\n    else if (type === \"sv\") {\n        showToolbar(vditor.toolbar.elements, [\"both\"]);\n        hideToolbar(vditor.toolbar.elements, [\"outdent\", \"indent\", \"outline\", \"insert-before\", \"insert-after\"]);\n        vditor.wysiwyg.element.parentElement.style.display = \"none\";\n        vditor.ir.element.parentElement.style.display = \"none\";\n        if (vditor.options.preview.mode === \"both\") {\n            vditor.sv.element.style.display = \"block\";\n        }\n        else if (vditor.options.preview.mode === \"editor\") {\n            vditor.sv.element.style.display = \"block\";\n        }\n        vditor.lute.SetVditorIR(false);\n        vditor.lute.SetVditorWYSIWYG(false);\n        vditor.lute.SetVditorSV(true);\n        vditor.currentMode = \"sv\";\n        var svHTML = processSpinVditorSVDOM(markdownText, vditor);\n        if (svHTML === \"<div data-block='0'></div>\") {\n            // https://github.com/Vanessa219/vditor/issues/654 SV 模式 Placeholder 显示问题\n            svHTML = \"\";\n        }\n        vditor.sv.element.innerHTML = svHTML;\n        combineFootnote(vditor.sv.element);\n        processAfterRender(vditor, {\n            enableAddUndoStack: true,\n            enableHint: false,\n            enableInput: false,\n        });\n        setPadding(vditor);\n    }\n    vditor.undo.resetIcon(vditor);\n    if (typeof event !== \"string\") {\n        // 初始化不 focus\n        vditor[vditor.currentMode].element.focus();\n        highlightToolbar(vditor);\n    }\n    renderToc(vditor);\n    setTypewriterPosition(vditor);\n    if (vditor.toolbar.elements[\"edit-mode\"]) {\n        vditor.toolbar.elements[\"edit-mode\"].querySelectorAll(\"button\").forEach(function (item) {\n            item.classList.remove(\"vditor-menu--current\");\n        });\n        var parent_1 = vditor.toolbar.elements[\"edit-mode\"].querySelector(\"button[data-mode=\\\"\".concat(vditor.currentMode, \"\\\"]\"));\n        var child = vditor.toolbar.elements[\"edit-mode\"].querySelector(\"button[data-mode=\\\"\".concat(vditor.currentMode, \"\\\"][data-preview=\\\"\").concat(preview, \"\\\"]\"));\n        if (child) {\n            child.classList.add(\"vditor-menu--current\");\n        }\n        else {\n            parent_1.classList.remove(\"vditor-menu--current\");\n        }\n        var key = vditor.currentMode + '_' + vditor.options.preview.mode;\n        var element = vditor.toolbar.elements[\"edit-mode\"].querySelector('.vditor-tooltipped');\n        if (element) {\n            element.innerHTML = \"\\n                <svg><use xlink:href=\\\"#vditor-icon-\".concat(key, \"\\\"></use></svg>\\n                <span>\").concat(window.VditorI18n[key], \"</span>\\n                <svg style=\\\"width: 10px; height: 10px;\\\"><use xlink:href=\\\"#vditor-icon-caret-down\\\"></use></svg>\\n            \");\n        }\n        // console.log(\n    }\n    vditor.outline.toggle(vditor, vditor.currentMode !== \"sv\" && vditor.options.outline.enable, typeof event !== \"string\");\n};\nvar EditMode = /** @class */ (function (_super) {\n    __extends(EditMode, _super);\n    function EditMode(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        var panelElement = document.createElement(\"div\");\n        panelElement.className = \"vditor-hint\";\n        panelElement.innerHTML = \"\\n<button data-mode=\\\"wysiwyg\\\" data-preview=\\\"both\\\" style=\\\"display:flex; align-items: center; gap: 8px;\\\">\\n    <svg><use xlink:href=\\\"#vditor-icon-wysiwyg_both\\\"></use></svg>\\n    <span>\".concat(window.VditorI18n.wysiwyg_both, \"</span>\\n</button>\\n<button data-mode=\\\"sv\\\" data-preview=\\\"both\\\" style=\\\"display:flex; align-items: center; gap: 8px;\\\">\\n    <svg><use xlink:href=\\\"#vditor-icon-sv_both\\\"></use></svg>\\n    <span>\").concat(window.VditorI18n.sv_both, \"</span>\\n</button>\\n<button data-mode=\\\"sv\\\" data-preview=\\\"editor\\\" style=\\\"display:flex; align-items: center; gap: 8px;\\\">\\n    <svg><use xlink:href=\\\"#vditor-icon-sv_none\\\"></use></svg>\\n    <span>\").concat(window.VditorI18n.sv_none, \"</span>\\n</button>\\n\");\n        var key = vditor.currentMode + '_' + vditor.options.preview.mode;\n        _this.element.innerHTML = \"<button class=\\\"vditor-tooltipped\\\" data-type=\\\"\".concat(menuItem.name, \"\\\" style=\\\"display:flex; align-items: center; gap: 4px;\\\">\\n            <svg><use xlink:href=\\\"#vditor-icon-\").concat(key, \"\\\"></use></svg>\\n            <span>\").concat(window.VditorI18n[key], \"</span>\\n            <svg style=\\\"width: 10px; height: 10px;\\\"><use xlink:href=\\\"#vditor-icon-caret-down\\\"></use></svg>\\n            </button>\");\n        _this.element.appendChild(panelElement);\n        _this._bindEvent(vditor, panelElement, menuItem);\n        return _this;\n    }\n    EditMode.prototype._bindEvent = function (vditor, panelElement, menuItem) {\n        var actionBtn = this.element.children[0];\n        toggleSubMenu(vditor, panelElement, actionBtn, menuItem.level);\n        panelElement.children.item(0).addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            // wysiwyg\n            setEditMode(vditor, \"wysiwyg\", event);\n            event.preventDefault();\n            event.stopPropagation();\n        });\n        // panelElement.children.item(1).addEventListener(getEventName(), (event: Event) => {\n        //     // ir\n        //     setEditMode(vditor, \"ir\", event);\n        //     event.preventDefault();\n        //     event.stopPropagation();\n        // });\n        panelElement.children.item(1).addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            // markdown\n            setEditMode(vditor, \"sv\", event, 'both');\n            event.preventDefault();\n            event.stopPropagation();\n        });\n        panelElement.children.item(2).addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            // markdown\n            setEditMode(vditor, \"sv\", event, 'editor');\n            event.preventDefault();\n            event.stopPropagation();\n        });\n    };\n    return EditMode;\n}(MenuItem));\n\n\n;// ./src/ts/util/getSelectText.ts\n\nvar getSelectText = function (editor, range) {\n    if ((0,selection/* selectIsEditor */.Co)(editor, range)) {\n        return getSelection().toString();\n    }\n    return \"\";\n};\n\n;// ./src/ts/util/editorCommonEvent.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar focusEvent = function (vditor, editorElement) {\n    editorElement.addEventListener(\"focus\", function () {\n        if (vditor.options.focus) {\n            vditor.options.focus(getMarkdown(vditor));\n        }\n        hidePanel(vditor, [\"subToolbar\", \"hint\"]);\n    });\n};\nvar dblclickEvent = function (vditor, editorElement) {\n    editorElement.addEventListener(\"dblclick\", function (event) {\n        if (event.target.tagName === \"IMG\") {\n            if (vditor.options.image.preview) {\n                vditor.options.image.preview(event.target);\n            }\n            else if (vditor.options.image.isPreview) {\n                (0,preview_image/* previewImage */.o)(event.target, vditor.options.lang, vditor.options.theme);\n            }\n        }\n    });\n};\nvar blurEvent = function (vditor, editorElement) {\n    editorElement.addEventListener(\"blur\", function (event) {\n        if (vditor.currentMode === \"ir\") {\n            var expandElement = vditor.ir.element.querySelector(\".vditor-ir__node--expand\");\n            if (expandElement) {\n                expandElement.classList.remove(\"vditor-ir__node--expand\");\n            }\n        }\n        else if (vditor.currentMode === \"wysiwyg\" &&\n            !vditor.wysiwyg.selectPopover.contains(event.relatedTarget)) {\n            vditor.wysiwyg.hideComment();\n        }\n        vditor[vditor.currentMode].range = (0,selection/* getEditorRange */.RN)(vditor);\n        if (vditor.options.blur) {\n            vditor.options.blur(getMarkdown(vditor));\n        }\n    });\n};\nvar dropEvent = function (vditor, editorElement) {\n    editorElement.addEventListener(\"dragstart\", function (event) {\n        // 选中编辑器中的文字进行拖拽\n        event.dataTransfer.setData(constants/* Constants */.Y.DROP_EDITOR, constants/* Constants */.Y.DROP_EDITOR);\n    });\n    editorElement.addEventListener(\"drop\", function (event) {\n        if (event.dataTransfer.getData(constants/* Constants */.Y.DROP_EDITOR)) {\n            // 编辑器内选中文字拖拽\n            execAfterRender(vditor);\n        }\n        else if (event.dataTransfer.types.includes(\"Files\") || event.dataTransfer.types.includes(\"text/html\")) {\n            // 外部文件拖入编辑器中或者编辑器内选中文字拖拽\n            paste(vditor, event, {\n                pasteCode: function (code) {\n                    document.execCommand(\"insertHTML\", false, code);\n                },\n            });\n        }\n    });\n};\nvar copyEvent = function (vditor, editorElement, copy) {\n    editorElement.addEventListener(\"copy\", function (event) { return copy(event, vditor); });\n};\nvar cutEvent = function (vditor, editorElement, copy) {\n    editorElement.addEventListener(\"cut\", function (event) {\n        copy(event, vditor);\n        // 获取 comment\n        if (vditor.options.comment.enable && vditor.currentMode === \"wysiwyg\") {\n            vditor.wysiwyg.getComments(vditor);\n        }\n        document.execCommand(\"delete\");\n    });\n};\nvar scrollCenter = function (vditor) {\n    if (vditor.currentMode === \"wysiwyg\" && vditor.options.comment.enable) {\n        vditor.options.comment.adjustTop(vditor.wysiwyg.getComments(vditor, true));\n    }\n    if (!vditor.options.typewriterMode) {\n        return;\n    }\n    var editorElement = vditor[vditor.currentMode].element;\n    var cursorTop = (0,selection/* getCursorPosition */.Ey)(editorElement).top;\n    if (vditor.options.height === \"auto\" && !vditor.element.classList.contains(\"vditor--fullscreen\")) {\n        window.scrollTo(window.scrollX, cursorTop + vditor.element.offsetTop + vditor.toolbar.element.offsetHeight - window.innerHeight / 2 + 10);\n    }\n    if (vditor.options.height !== \"auto\" || vditor.element.classList.contains(\"vditor--fullscreen\")) {\n        editorElement.scrollTop = cursorTop + editorElement.scrollTop - editorElement.clientHeight / 2 + 10;\n    }\n};\nvar hotkeyEvent = function (vditor, editorElement) {\n    editorElement.addEventListener(\"keydown\", function (event) {\n        if (!event.isComposing && vditor.options.keydown) {\n            vditor.options.keydown(event);\n        }\n        // hint: 上下选择\n        if ((vditor.options.hint.extend.length > 1 || vditor.toolbar.elements.emoji) &&\n            vditor.hint.select(event, vditor)) {\n            return;\n        }\n        // 重置 comment\n        if (vditor.options.comment.enable && vditor.currentMode === \"wysiwyg\" &&\n            (event.key === \"Backspace\" || matchHotKey(\"⌘X\", event))) {\n            vditor.wysiwyg.getComments(vditor);\n        }\n        if (vditor.currentMode === \"sv\") {\n            if (processKeydown_processKeydown(vditor, event)) {\n                return;\n            }\n        }\n        else if (vditor.currentMode === \"wysiwyg\") {\n            if (wysiwyg_processKeydown_processKeydown(vditor, event)) {\n                return;\n            }\n        }\n        else if (vditor.currentMode === \"ir\") {\n            if (processKeydown(vditor, event)) {\n                return;\n            }\n        }\n        if (vditor.options.ctrlEnter && matchHotKey(\"⌘Enter\", event)) {\n            vditor.options.ctrlEnter(getMarkdown(vditor));\n            event.preventDefault();\n            return;\n        }\n        // undo\n        if (matchHotKey(\"⌘Z\", event) && !vditor.toolbar.elements.undo) {\n            vditor.undo.undo(vditor);\n            event.preventDefault();\n            return;\n        }\n        // redo\n        if (matchHotKey(\"⌘Y\", event) && !vditor.toolbar.elements.redo) {\n            vditor.undo.redo(vditor);\n            event.preventDefault();\n            return;\n        }\n        // esc\n        if (event.key === \"Escape\") {\n            if (vditor.hint.element.style.display === \"block\") {\n                vditor.hint.element.style.display = \"none\";\n            }\n            else if (vditor.options.esc && !event.isComposing) {\n                vditor.options.esc(getMarkdown(vditor));\n            }\n            event.preventDefault();\n            return;\n        }\n        // h1 - h6 hotkey\n        if ((0,compatibility/* isCtrl */._0)(event) && event.altKey && !event.shiftKey && /^Digit[1-6]$/.test(event.code)) {\n            if (vditor.currentMode === \"wysiwyg\") {\n                var tagName = event.code.replace(\"Digit\", \"H\");\n                if ((0,hasClosest/* hasClosestByMatchTag */._Y)(getSelection().getRangeAt(0).startContainer, tagName)) {\n                    removeHeading(vditor);\n                }\n                else {\n                    setHeading(vditor, tagName);\n                }\n                afterRenderEvent(vditor);\n            }\n            else if (vditor.currentMode === \"sv\") {\n                processHeading(vditor, \"#\".repeat(parseInt(event.code.replace(\"Digit\", \"\"), 10)) + \" \");\n            }\n            else if (vditor.currentMode === \"ir\") {\n                process_processHeading(vditor, \"#\".repeat(parseInt(event.code.replace(\"Digit\", \"\"), 10)) + \" \");\n            }\n            event.preventDefault();\n            return true;\n        }\n        // toggle edit mode\n        if ((0,compatibility/* isCtrl */._0)(event) && event.altKey && !event.shiftKey && /^Digit[7-9]$/.test(event.code)) {\n            if (event.code === \"Digit7\") {\n                setEditMode(vditor, \"wysiwyg\", event);\n            }\n            else if (event.code === \"Digit8\") {\n                setEditMode(vditor, \"ir\", event);\n            }\n            else if (event.code === \"Digit9\") {\n                setEditMode(vditor, \"sv\", event);\n            }\n            return true;\n        }\n        // toolbar action\n        vditor.options.toolbar.find(function (menuItem) {\n            if (!menuItem.hotkey || menuItem.toolbar) {\n                if (menuItem.toolbar) {\n                    var sub = menuItem.toolbar.find(function (subMenuItem) {\n                        if (!subMenuItem.hotkey) {\n                            return false;\n                        }\n                        if (matchHotKey(subMenuItem.hotkey, event)) {\n                            vditor.toolbar.elements[subMenuItem.name].children[0]\n                                .dispatchEvent(new CustomEvent((0,compatibility/* getEventName */.y3)()));\n                            event.preventDefault();\n                            return true;\n                        }\n                    });\n                    return sub ? true : false;\n                }\n                return false;\n            }\n            if (matchHotKey(menuItem.hotkey, event)) {\n                vditor.toolbar.elements[menuItem.name].children[0].dispatchEvent(new CustomEvent((0,compatibility/* getEventName */.y3)()));\n                event.preventDefault();\n                return true;\n            }\n        });\n    });\n};\nvar selectEvent = function (vditor, editorElement) {\n    editorElement.addEventListener(\"selectstart\", function (event) {\n        editorElement.onmouseup = function () {\n            setTimeout(function () {\n                var selectText = getSelectText(vditor[vditor.currentMode].element);\n                if (selectText.trim()) {\n                    if (vditor.currentMode === \"wysiwyg\" && vditor.options.comment.enable) {\n                        if (!(0,hasClosest/* hasClosestByAttribute */.Th)(event.target, \"data-type\", \"footnotes-block\") &&\n                            !(0,hasClosest/* hasClosestByAttribute */.Th)(event.target, \"data-type\", \"link-ref-defs-block\")) {\n                            vditor.wysiwyg.showComment();\n                        }\n                        else {\n                            vditor.wysiwyg.hideComment();\n                        }\n                    }\n                    if (vditor.options.select) {\n                        vditor.options.select(selectText);\n                    }\n                }\n                else {\n                    if (vditor.currentMode === \"wysiwyg\" && vditor.options.comment.enable) {\n                        vditor.wysiwyg.hideComment();\n                    }\n                    if (typeof vditor.options.unSelect === 'function') {\n                        vditor.options.unSelect();\n                    }\n                }\n            });\n        };\n    });\n};\n\n;// ./src/ts/sv/process.ts\n\n\n\n\n\n\n\n\n\nvar processPaste = function (vditor, text) {\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    range.extractContents();\n    range.insertNode(document.createTextNode(Lute.Caret));\n    range.insertNode(document.createTextNode(text));\n    var blockElement = (0,hasClosest/* hasClosestByAttribute */.Th)(range.startContainer, \"data-block\", \"0\");\n    if (!blockElement) {\n        blockElement = vditor.sv.element;\n    }\n    var spinHTML = vditor.lute.SpinVditorSVDOM(blockElement.textContent);\n    spinHTML = \"<div data-block='0'>\" +\n        spinHTML.replace(/<span data-type=\"newline\"><br \\/><span style=\"display: none\">\\n<\\/span><\\/span><span data-type=\"newline\"><br \\/><span style=\"display: none\">\\n<\\/span><\\/span></g, '<span data-type=\"newline\"><br /><span style=\"display: none\">\\n</span></span><span data-type=\"newline\"><br /><span style=\"display: none\">\\n</span></span></div><div data-block=\"0\"><') +\n        \"</div>\";\n    if (blockElement.isEqualNode(vditor.sv.element)) {\n        blockElement.innerHTML = spinHTML;\n    }\n    else {\n        blockElement.outerHTML = spinHTML;\n    }\n    combineFootnote(vditor.sv.element);\n    (0,selection/* setRangeByWbr */.ir)(vditor.sv.element, range);\n    scrollCenter(vditor);\n};\nvar getSideByType = function (spanNode, type, isPrevious) {\n    if (isPrevious === void 0) { isPrevious = true; }\n    var sideElement = spanNode;\n    if (sideElement.nodeType === 3) {\n        sideElement = sideElement.parentElement;\n    }\n    while (sideElement) {\n        if (sideElement.getAttribute(\"data-type\") === type) {\n            return sideElement;\n        }\n        if (isPrevious) {\n            sideElement = sideElement.previousElementSibling;\n        }\n        else {\n            sideElement = sideElement.nextElementSibling;\n        }\n    }\n    return false;\n};\nvar processSpinVditorSVDOM = function (html, vditor) {\n    log(\"SpinVditorSVDOM\", html, \"argument\", vditor.options.debugger);\n    var spinHTML = vditor.lute.SpinVditorSVDOM(html);\n    html = \"<div data-block='0'>\" +\n        spinHTML.replace(/<span data-type=\"newline\"><br \\/><span style=\"display: none\">\\n<\\/span><\\/span><span data-type=\"newline\"><br \\/><span style=\"display: none\">\\n<\\/span><\\/span></g, '<span data-type=\"newline\"><br /><span style=\"display: none\">\\n</span></span><span data-type=\"newline\"><br /><span style=\"display: none\">\\n</span></span></div><div data-block=\"0\"><') +\n        \"</div>\";\n    log(\"SpinVditorSVDOM\", html, \"result\", vditor.options.debugger);\n    return html;\n};\nvar processPreviousMarkers = function (spanElement) {\n    var spanType = spanElement.getAttribute(\"data-type\");\n    var previousElement = spanElement.previousElementSibling;\n    // 有内容的子列表/标题，在其 marker 后换行\n    var markerText = (spanType && spanType !== \"text\" && spanType !== \"table\" && spanType !== \"heading-marker\" &&\n        spanType !== \"newline\" && spanType !== \"yaml-front-matter-open-marker\" && spanType !== \"yaml-front-matter-close-marker\"\n        && spanType !== \"code-block-info\" && spanType !== \"code-block-close-marker\" && spanType !== \"code-block-open-marker\") ?\n        spanElement.textContent : \"\";\n    var hasNL = false;\n    if (spanType === \"newline\") {\n        hasNL = true;\n    }\n    while (previousElement && !hasNL) {\n        var previousType = previousElement.getAttribute(\"data-type\");\n        if (previousType === \"li-marker\" || previousType === \"blockquote-marker\" || previousType === \"task-marker\" ||\n            previousType === \"padding\") {\n            var previousText = previousElement.textContent;\n            if (previousType === \"li-marker\" &&\n                (spanType === \"code-block-open-marker\" || spanType === \"code-block-info\")) {\n                // https://github.com/Vanessa219/vditor/issues/586\n                markerText = previousText.replace(/\\S/g, \" \") + markerText;\n            }\n            else if (spanType === \"code-block-close-marker\" &&\n                previousElement.nextElementSibling.isSameNode(spanElement)) {\n                // https://github.com/Vanessa219/vditor/issues/594\n                var openMarker = getSideByType(spanElement, \"code-block-open-marker\");\n                if (openMarker && openMarker.previousElementSibling) {\n                    previousElement = openMarker.previousElementSibling;\n                    markerText = previousText + markerText;\n                }\n            }\n            else {\n                markerText = previousText + markerText;\n            }\n        }\n        else if (previousType === \"newline\") {\n            hasNL = true;\n        }\n        previousElement = previousElement.previousElementSibling;\n    }\n    return markerText;\n};\nvar processAfterRender = function (vditor, options) {\n    if (options === void 0) { options = {\n        enableAddUndoStack: true,\n        enableHint: false,\n        enableInput: true,\n    }; }\n    if (options.enableHint) {\n        vditor.hint.render(vditor);\n    }\n    vditor.preview.render(vditor);\n    var text = getMarkdown(vditor);\n    if (typeof vditor.options.input === \"function\" && options.enableInput) {\n        vditor.options.input(text);\n    }\n    if (vditor.options.counter.enable) {\n        vditor.counter.render(vditor, text);\n    }\n    if (vditor.options.cache.enable && (0,compatibility/* accessLocalStorage */.D)()) {\n        localStorage.setItem(vditor.options.cache.id, text);\n        if (vditor.options.cache.after) {\n            vditor.options.cache.after(text);\n        }\n    }\n    if (vditor.devtools) {\n        vditor.devtools.renderEchart(vditor);\n    }\n    clearTimeout(vditor.sv.processTimeoutId);\n    vditor.sv.processTimeoutId = window.setTimeout(function () {\n        if (options.enableAddUndoStack && !vditor.sv.composingLock) {\n            vditor.undo.addToUndoStack(vditor);\n        }\n    }, vditor.options.undoDelay);\n};\nvar processHeading = function (vditor, value) {\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    var headingElement = (0,hasClosestByHeadings/* hasClosestByTag */.f)(range.startContainer, \"SPAN\");\n    if (headingElement && headingElement.textContent.trim() !== \"\") {\n        value = \"\\n\" + value;\n    }\n    range.collapse(true);\n    document.execCommand(\"insertHTML\", false, value);\n};\nvar processToolbar = function (vditor, actionBtn, prefix, suffix, options) {\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    var commandName = actionBtn.getAttribute(\"data-type\");\n    // 添加\n    if (vditor.sv.element.childNodes.length === 0) {\n        vditor.sv.element.innerHTML = \"<span data-type=\\\"p\\\" data-block=\\\"0\\\"><span data-type=\\\"text\\\"><wbr></span></span><span data-type=\\\"newline\\\"><br><span style=\\\"display: none\\\">\\n</span></span>\";\n        (0,selection/* setRangeByWbr */.ir)(vditor.sv.element, range);\n    }\n    var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);\n    var spanElement = (0,hasClosestByHeadings/* hasClosestByTag */.f)(range.startContainer, \"SPAN\");\n    if (!blockElement) {\n        return;\n    }\n    if (commandName === \"link\") {\n        var html = void 0;\n        if (range.toString() === \"\") {\n            html = \"\".concat(prefix).concat(Lute.Caret).concat(suffix);\n        }\n        else {\n            html = \"\".concat(prefix).concat(range.toString()).concat(suffix.replace(\")\", Lute.Caret + \")\"));\n        }\n        document.execCommand(\"insertHTML\", false, html);\n        return;\n    }\n    else if (commandName === \"italic\" || commandName === \"bold\" || commandName === \"strike\" ||\n        commandName === \"inline-code\" || commandName === \"code\" || commandName === \"table\" || commandName === \"line\") {\n        var html = void 0;\n        // https://github.com/Vanessa219/vditor/issues/563 代码块不需要后面的 ```\n        if (range.toString() === \"\") {\n            html = \"\".concat(prefix).concat(Lute.Caret).concat(commandName === \"code\" ? \"\" : suffix);\n        }\n        else {\n            html = \"\".concat(prefix).concat(range.toString()).concat(Lute.Caret).concat(commandName === \"code\" ? \"\" : suffix);\n        }\n        if (commandName === \"table\" || (commandName === \"code\" && spanElement && spanElement.textContent !== \"\")) {\n            html = \"\\n\\n\" + html;\n        }\n        else if (commandName === \"line\") {\n            html = \"\\n\\n\".concat(prefix, \"\\n\").concat(Lute.Caret);\n        }\n        document.execCommand(\"insertHTML\", false, html);\n        return;\n    }\n    else if (['echarts', 'math', 'mermaid', 'mindmap', 'mermaid-sequence', 'mermaid-gantt'].includes(commandName)) {\n        var html = void 0;\n        prefix = '```' + options.type;\n        // https://github.com/Vanessa219/vditor/issues/563 代码块不需要后面的 ```\n        if (range.toString() === \"\") {\n            html = \"\".concat(prefix, \"\\n\").concat(options.example).concat(Lute.Caret);\n        }\n        else {\n            html = \"\".concat(prefix, \"\\n\").concat(range.toString()).concat(Lute.Caret);\n        }\n        if (commandName === \"table\" || (commandName === \"code\" && spanElement && spanElement.textContent !== \"\")) {\n            html = \"\\n\\n\" + html;\n        }\n        else if (commandName === \"line\") {\n            html = \"\\n\\n\".concat(prefix, \"\\n\").concat(Lute.Caret);\n        }\n        document.execCommand(\"insertHTML\", false, html);\n        return;\n    }\n    else if (commandName === \"check\" || commandName === \"list\" || commandName === \"ordered-list\" ||\n        commandName === \"quote\") {\n        if (spanElement) {\n            var marker = \"* \";\n            if (commandName === \"check\") {\n                marker = \"* [ ] \";\n            }\n            else if (commandName === \"ordered-list\") {\n                marker = \"1. \";\n            }\n            else if (commandName === \"quote\") {\n                marker = \"> \";\n            }\n            var newLine = getSideByType(spanElement, \"newline\");\n            if (newLine) {\n                newLine.insertAdjacentText(\"afterend\", marker);\n            }\n            else {\n                blockElement.insertAdjacentText(\"afterbegin\", marker);\n            }\n            inputEvent(vditor);\n            return;\n        }\n    }\n    (0,selection/* setRangeByWbr */.ir)(vditor.sv.element, range);\n    processAfterRender(vditor);\n};\n\n;// ./src/ts/upload/getElement.ts\nvar getElement = function (vditor) {\n    switch (vditor.currentMode) {\n        case \"ir\":\n            return vditor.ir.element;\n        case \"wysiwyg\":\n            return vditor.wysiwyg.element;\n        case \"sv\":\n            return vditor.sv.element;\n    }\n};\n\n;// ./src/ts/upload/setHeaders.ts\nvar setHeaders = function (vditor, xhr) {\n    if (vditor.options.upload.setHeaders) {\n        vditor.options.upload.headers = vditor.options.upload.setHeaders();\n    }\n    if (vditor.options.upload.headers) {\n        Object.keys(vditor.options.upload.headers).forEach(function (key) {\n            xhr.setRequestHeader(key, vditor.options.upload.headers[key]);\n        });\n    }\n};\n\n;// ./src/ts/upload/index.ts\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n\n\n\nvar Upload = /** @class */ (function () {\n    function Upload() {\n        this.isUploading = false;\n        this.element = document.createElement(\"div\");\n        this.element.className = \"vditor-upload\";\n    }\n    return Upload;\n}());\nvar validateFile = function (vditor, files, name) {\n    vditor.tip.hide();\n    var uploadFileList = [];\n    var errorTip = \"\";\n    var uploadingStr = \"\";\n    var lang = vditor.options.lang;\n    var options = vditor.options;\n    var _loop_1 = function (iMax, i) {\n        var file = files[i];\n        var validate = true;\n        if (!file.name) {\n            errorTip += \"<li>\".concat(window.VditorI18n.nameEmpty, \"</li>\");\n            validate = false;\n        }\n        if (file.size > vditor.options[name].max) {\n            errorTip += \"<li>\".concat(file.name, \" \").concat(window.VditorI18n.over, \" \").concat(vditor.options[name].max / 1024 / 1024, \"M</li>\");\n            validate = false;\n        }\n        var lastIndex = file.name.lastIndexOf(\".\");\n        var fileExt = file.name.substr(lastIndex);\n        var filename = vditor.options[name].filename(file.name.substr(0, lastIndex)) + fileExt;\n        if (vditor.options[name].accept) {\n            var isAccept = vditor.options[name].accept.split(\",\").some(function (item) {\n                var type = item.trim();\n                if (type.indexOf(\".\") === 0) {\n                    if (fileExt.toLowerCase() === type.toLowerCase()) {\n                        return true;\n                    }\n                }\n                else {\n                    if (file.type.split(\"/\")[0] === type.split(\"/\")[0]) {\n                        return true;\n                    }\n                }\n                return false;\n            });\n            if (!isAccept) {\n                errorTip += \"<li>\".concat(file.name, \" \").concat(window.VditorI18n.fileTypeError, \"</li>\");\n                validate = false;\n            }\n        }\n        if (validate) {\n            uploadFileList.push(file);\n            uploadingStr += \"<li>\".concat(filename, \" \").concat(window.VditorI18n.uploading, \" <a class=\\\"vditorCancelUpload\\\" href=\\\"javascript:void(0)\\\">\").concat(window.VditorI18n.cancelUpload, \"</a></li>\");\n        }\n    };\n    for (var iMax = files.length, i = 0; i < iMax; i++) {\n        _loop_1(iMax, i);\n    }\n    vditor.tip.show(\"<ul>\".concat(errorTip).concat(uploadingStr, \"</ul>\"));\n    if (vditor.options[name].cancel) {\n        var vditorCancelUploadElement = vditor.tip.element.querySelector(\".vditorCancelUpload\");\n        if (vditorCancelUploadElement) {\n            vditorCancelUploadElement.addEventListener(\"click\", function () {\n                vditor.options[name].cancel(uploadFileList);\n                vditor.tip.hide();\n                vditor.upload.isUploading = false;\n            });\n        }\n    }\n    return uploadFileList;\n};\nvar genUploadedLabel = function (responseText, vditor, name) {\n    var editorElement = getElement(vditor);\n    editorElement.focus();\n    var response = JSON.parse(responseText);\n    var errorTip = \"\";\n    if (response.code === 1) {\n        errorTip = \"\".concat(response.msg);\n    }\n    if (response.data.errFiles && response.data.errFiles.length > 0) {\n        errorTip = \"<ul><li>\".concat(errorTip, \"</li>\");\n        response.data.errFiles.forEach(function (data) {\n            var lastIndex = data.lastIndexOf(\".\");\n            var filename = vditor.options[name].filename(data.substr(0, lastIndex)) + data.substr(lastIndex);\n            errorTip += \"<li>\".concat(filename, \" \").concat(window.VditorI18n.uploadError, \"</li>\");\n        });\n        errorTip += \"</ul>\";\n    }\n    if (errorTip) {\n        vditor.tip.show(errorTip);\n    }\n    else {\n        vditor.tip.hide();\n    }\n    var succFileText = \"\";\n    Object.keys(response.data.succMap).forEach(function (key) {\n        var path = response.data.succMap[key];\n        var lastIndex = key.lastIndexOf(\".\");\n        var type = key.substr(lastIndex);\n        var filename = vditor.options[name].filename(key.substr(0, lastIndex)) + type;\n        type = type.toLowerCase();\n        if (type.indexOf(\".wav\") === 0 || type.indexOf(\".mp3\") === 0 || type.indexOf(\".ogg\") === 0) {\n            if (vditor.currentMode === \"wysiwyg\") {\n                succFileText += \"<div class=\\\"vditor-wysiwyg__block\\\" data-type=\\\"html-block\\\"\\n data-block=\\\"0\\\"><pre><code>&lt;audio controls=\\\"controls\\\" src=\\\"\".concat(path, \"\\\"&gt;&lt;/audio&gt;</code></pre><pre class=\\\"vditor-wysiwyg__preview\\\" data-render=\\\"1\\\"><audio controls=\\\"controls\\\" src=\\\"\").concat(path, \"\\\"></audio></pre></div>\\n\");\n            }\n            else if (vditor.currentMode === \"ir\") {\n                succFileText += \"<audio controls=\\\"controls\\\" src=\\\"\".concat(path, \"\\\"></audio>\\n\");\n            }\n            else {\n                succFileText += \"[\".concat(filename, \"](\").concat(path, \")\\n\");\n            }\n        }\n        else if (type.indexOf(\".apng\") === 0\n            || type.indexOf(\".bmp\") === 0\n            || type.indexOf(\".gif\") === 0\n            || type.indexOf(\".ico\") === 0 || type.indexOf(\".cur\") === 0\n            || type.indexOf(\".jpg\") === 0 || type.indexOf(\".jpeg\") === 0 || type.indexOf(\".jfif\") === 0 || type.indexOf(\".pjp\") === 0 || type.indexOf(\".pjpeg\") === 0\n            || type.indexOf(\".png\") === 0\n            || type.indexOf(\".svg\") === 0\n            || type.indexOf(\".webp\") === 0) {\n            if (vditor.currentMode === \"wysiwyg\") {\n                succFileText += \"<img alt=\\\"\".concat(filename, \"\\\" src=\\\"\").concat(path, \"\\\">\\n\");\n            }\n            else {\n                succFileText += \"![\".concat(filename, \"](\").concat(path, \")\\n\");\n            }\n        }\n        else {\n            if (vditor.currentMode === \"wysiwyg\") {\n                succFileText += \"<a href=\\\"\".concat(path, \"\\\">\").concat(filename, \"</a>\\n\");\n            }\n            else {\n                succFileText += \"[\".concat(filename, \"](\").concat(path, \")\\n\");\n            }\n        }\n    });\n    (0,selection/* setSelectionFocus */.jl)(vditor[name].range);\n    document.execCommand(\"insertHTML\", false, succFileText);\n    vditor[name].range = getSelection().getRangeAt(0).cloneRange();\n};\nvar uploadFiles = function (vditor, files, element) { return __awaiter(void 0, void 0, void 0, function () {\n    var fileList, filesMax, i, fileItem, isValidate, isValidate, editorElement, validateResult, formData, extraData, _i, _a, key, i, iMax, xhr;\n    return __generator(this, function (_b) {\n        switch (_b.label) {\n            case 0:\n                fileList = [];\n                filesMax = vditor.options.upload.multiple === true ? files.length : 1;\n                for (i = 0; i < filesMax; i++) {\n                    fileItem = files[i];\n                    if (fileItem instanceof DataTransferItem) {\n                        fileItem = fileItem.getAsFile();\n                    }\n                    fileList.push(fileItem);\n                }\n                if (!vditor.options.upload.handler) return [3 /*break*/, 2];\n                return [4 /*yield*/, vditor.options.upload.handler(fileList)];\n            case 1:\n                isValidate = _b.sent();\n                if (element) {\n                    element.value = \"\";\n                }\n                if (typeof isValidate === \"string\") {\n                    vditor.tip.show(isValidate);\n                    return [2 /*return*/];\n                }\n                return [2 /*return*/];\n            case 2:\n                if (!vditor.options.upload.url || !vditor.upload) {\n                    if (element) {\n                        element.value = \"\";\n                    }\n                    vditor.tip.show(\"please config: options.upload.url\");\n                    return [2 /*return*/];\n                }\n                if (!vditor.options.upload.file) return [3 /*break*/, 4];\n                return [4 /*yield*/, vditor.options.upload.file(fileList)];\n            case 3:\n                fileList = _b.sent();\n                _b.label = 4;\n            case 4:\n                if (vditor.options.upload.validate) {\n                    isValidate = vditor.options.upload.validate(fileList);\n                    if (typeof isValidate === \"string\") {\n                        vditor.tip.show(isValidate);\n                        return [2 /*return*/];\n                    }\n                }\n                editorElement = getElement(vditor);\n                vditor.upload.range = (0,selection/* getEditorRange */.RN)(vditor);\n                validateResult = validateFile(vditor, fileList, 'upload');\n                if (validateResult.length === 0) {\n                    if (element) {\n                        element.value = \"\";\n                    }\n                    return [2 /*return*/];\n                }\n                formData = new FormData();\n                extraData = vditor.options.upload.extraData;\n                for (_i = 0, _a = Object.keys(extraData); _i < _a.length; _i++) {\n                    key = _a[_i];\n                    formData.append(key, extraData[key]);\n                }\n                for (i = 0, iMax = validateResult.length; i < iMax; i++) {\n                    formData.append(vditor.options.upload.fieldName, validateResult[i]);\n                }\n                xhr = new XMLHttpRequest();\n                xhr.open(\"POST\", vditor.options.upload.url);\n                if (vditor.options.upload.token) {\n                    xhr.setRequestHeader(\"X-Upload-Token\", vditor.options.upload.token);\n                }\n                if (vditor.options.upload.withCredentials) {\n                    xhr.withCredentials = true;\n                }\n                setHeaders(vditor, xhr);\n                vditor.upload.isUploading = true;\n                editorElement.setAttribute(\"contenteditable\", \"false\");\n                xhr.onreadystatechange = function () {\n                    if (xhr.readyState === XMLHttpRequest.DONE) {\n                        vditor.upload.isUploading = false;\n                        editorElement.setAttribute(\"contenteditable\", \"true\");\n                        if (xhr.status >= 200 && xhr.status < 300) {\n                            if (vditor.options.upload.success) {\n                                vditor.options.upload.success(editorElement, xhr.responseText);\n                            }\n                            else {\n                                var responseText = xhr.responseText;\n                                if (vditor.options.upload.format) {\n                                    responseText = vditor.options.upload.format(files, xhr.responseText);\n                                }\n                                genUploadedLabel(responseText, vditor, 'upload');\n                            }\n                        }\n                        else {\n                            if (vditor.options.upload.error) {\n                                vditor.options.upload.error(xhr.responseText);\n                            }\n                            else {\n                                vditor.tip.show(xhr.responseText);\n                            }\n                        }\n                        if (element) {\n                            element.value = \"\";\n                        }\n                        vditor.upload.element.style.display = \"none\";\n                    }\n                };\n                xhr.upload.onprogress = function (event) {\n                    if (!event.lengthComputable) {\n                        return;\n                    }\n                    var progress = event.loaded / event.total * 100;\n                    vditor.upload.element.style.display = \"block\";\n                    var progressBar = vditor.upload.element;\n                    progressBar.style.width = progress + \"%\";\n                };\n                xhr.send(formData);\n                return [2 /*return*/];\n        }\n    });\n}); };\nvar uploadImage = function (vditor, files, element) { return __awaiter(void 0, void 0, void 0, function () {\n    var fileList, filesMax, i, fileItem, isValidate, isValidate, editorElement, validateResult, formData, extraData, _i, _a, key, i, iMax, xhr;\n    return __generator(this, function (_b) {\n        switch (_b.label) {\n            case 0:\n                fileList = [];\n                filesMax = vditor.options.image.multiple === true ? files.length : 1;\n                for (i = 0; i < filesMax; i++) {\n                    fileItem = files[i];\n                    if (fileItem instanceof DataTransferItem) {\n                        fileItem = fileItem.getAsFile();\n                    }\n                    fileList.push(fileItem);\n                }\n                if (!vditor.options.image.handler) return [3 /*break*/, 2];\n                return [4 /*yield*/, vditor.options.image.handler(fileList)];\n            case 1:\n                isValidate = _b.sent();\n                if (element) {\n                    element.value = \"\";\n                }\n                if (typeof isValidate === \"string\") {\n                    vditor.tip.show(isValidate);\n                    return [2 /*return*/];\n                }\n                return [2 /*return*/];\n            case 2:\n                if (!vditor.options.image.url || !vditor.image) {\n                    if (element) {\n                        element.value = \"\";\n                    }\n                    vditor.tip.show(\"please config: options.image.url\");\n                    return [2 /*return*/];\n                }\n                if (!vditor.options.image.file) return [3 /*break*/, 4];\n                return [4 /*yield*/, vditor.options.image.file(fileList)];\n            case 3:\n                fileList = _b.sent();\n                _b.label = 4;\n            case 4:\n                if (vditor.options.image.validate) {\n                    isValidate = vditor.options.image.validate(fileList);\n                    if (typeof isValidate === \"string\") {\n                        vditor.tip.show(isValidate);\n                        return [2 /*return*/];\n                    }\n                }\n                editorElement = getElement(vditor);\n                vditor.image.range = (0,selection/* getEditorRange */.RN)(vditor);\n                validateResult = validateFile(vditor, fileList, 'image');\n                if (validateResult.length === 0) {\n                    if (element) {\n                        element.value = \"\";\n                    }\n                    return [2 /*return*/];\n                }\n                formData = new FormData();\n                extraData = vditor.options.image.extraData;\n                for (_i = 0, _a = Object.keys(extraData); _i < _a.length; _i++) {\n                    key = _a[_i];\n                    formData.append(key, extraData[key]);\n                }\n                for (i = 0, iMax = validateResult.length; i < iMax; i++) {\n                    formData.append(vditor.options.image.fieldName, validateResult[i]);\n                }\n                xhr = new XMLHttpRequest();\n                xhr.open(\"POST\", vditor.options.image.url);\n                if (vditor.options.image.token) {\n                    xhr.setRequestHeader(\"X-Upload-Token\", vditor.options.image.token);\n                }\n                if (vditor.options.image.withCredentials) {\n                    xhr.withCredentials = true;\n                }\n                setHeaders(vditor, xhr);\n                vditor.image.isUploading = true;\n                editorElement.setAttribute(\"contenteditable\", \"false\");\n                xhr.onreadystatechange = function () {\n                    if (xhr.readyState === XMLHttpRequest.DONE) {\n                        vditor.image.isUploading = false;\n                        editorElement.setAttribute(\"contenteditable\", \"true\");\n                        if (xhr.status >= 200 && xhr.status < 300) {\n                            if (vditor.options.image.success) {\n                                vditor.options.image.success(editorElement, xhr.responseText);\n                            }\n                            else {\n                                var responseText = xhr.responseText;\n                                if (vditor.options.image.format) {\n                                    responseText = vditor.options.image.format(files, xhr.responseText);\n                                }\n                                genUploadedLabel(responseText, vditor, 'image');\n                            }\n                        }\n                        else {\n                            if (vditor.options.image.error) {\n                                vditor.options.image.error(xhr.responseText);\n                            }\n                            else {\n                                vditor.tip.show(xhr.responseText);\n                            }\n                        }\n                        if (element) {\n                            element.value = \"\";\n                        }\n                        vditor.image.element.style.display = \"none\";\n                    }\n                };\n                xhr.upload.onprogress = function (event) {\n                    if (!event.lengthComputable) {\n                        return;\n                    }\n                    var progress = event.loaded / event.total * 100;\n                    vditor.image.element.style.display = \"block\";\n                    var progressBar = vditor.image.element;\n                    progressBar.style.width = progress + \"%\";\n                };\n                xhr.send(formData);\n                return [2 /*return*/];\n        }\n    });\n}); };\nvar uploadVideo = function (vditor, files, element) { return __awaiter(void 0, void 0, void 0, function () {\n    var fileList, filesMax, i, fileItem, isValidate, isValidate, editorElement, validateResult, formData, extraData, _i, _a, key, i, iMax, xhr;\n    return __generator(this, function (_b) {\n        switch (_b.label) {\n            case 0:\n                fileList = [];\n                filesMax = vditor.options.video.multiple === true ? files.length : 1;\n                for (i = 0; i < filesMax; i++) {\n                    fileItem = files[i];\n                    if (fileItem instanceof DataTransferItem) {\n                        fileItem = fileItem.getAsFile();\n                    }\n                    fileList.push(fileItem);\n                }\n                if (!vditor.options.video.handler) return [3 /*break*/, 2];\n                return [4 /*yield*/, vditor.options.video.handler(fileList)];\n            case 1:\n                isValidate = _b.sent();\n                if (element) {\n                    element.value = \"\";\n                }\n                if (typeof isValidate === \"string\") {\n                    vditor.tip.show(isValidate);\n                    return [2 /*return*/];\n                }\n                return [2 /*return*/];\n            case 2:\n                if (!vditor.options.video.url || !vditor.video) {\n                    if (element) {\n                        element.value = \"\";\n                    }\n                    vditor.tip.show(\"please config: options.video.url\");\n                    return [2 /*return*/];\n                }\n                if (!vditor.options.video.file) return [3 /*break*/, 4];\n                return [4 /*yield*/, vditor.options.video.file(fileList)];\n            case 3:\n                fileList = _b.sent();\n                _b.label = 4;\n            case 4:\n                if (vditor.options.video.validate) {\n                    isValidate = vditor.options.video.validate(fileList);\n                    if (typeof isValidate === \"string\") {\n                        vditor.tip.show(isValidate);\n                        return [2 /*return*/];\n                    }\n                }\n                editorElement = getElement(vditor);\n                vditor.video.range = (0,selection/* getEditorRange */.RN)(vditor);\n                validateResult = validateFile(vditor, fileList, 'video');\n                if (validateResult.length === 0) {\n                    if (element) {\n                        element.value = \"\";\n                    }\n                    return [2 /*return*/];\n                }\n                formData = new FormData();\n                extraData = vditor.options.video.extraData;\n                for (_i = 0, _a = Object.keys(extraData); _i < _a.length; _i++) {\n                    key = _a[_i];\n                    formData.append(key, extraData[key]);\n                }\n                for (i = 0, iMax = validateResult.length; i < iMax; i++) {\n                    formData.append(vditor.options.video.fieldName, validateResult[i]);\n                }\n                xhr = new XMLHttpRequest();\n                xhr.open(\"POST\", vditor.options.video.url);\n                if (vditor.options.video.token) {\n                    xhr.setRequestHeader(\"X-Upload-Token\", vditor.options.video.token);\n                }\n                if (vditor.options.video.withCredentials) {\n                    xhr.withCredentials = true;\n                }\n                setHeaders(vditor, xhr);\n                vditor.video.isUploading = true;\n                editorElement.setAttribute(\"contenteditable\", \"false\");\n                xhr.onreadystatechange = function () {\n                    if (xhr.readyState === XMLHttpRequest.DONE) {\n                        vditor.video.isUploading = false;\n                        editorElement.setAttribute(\"contenteditable\", \"true\");\n                        if (xhr.status >= 200 && xhr.status < 300) {\n                            if (vditor.options.video.success) {\n                                vditor.options.video.success(editorElement, xhr.responseText);\n                            }\n                            else {\n                                var responseText = xhr.responseText;\n                                if (vditor.options.video.format) {\n                                    responseText = vditor.options.video.format(files, xhr.responseText);\n                                }\n                                genUploadedLabel(responseText, vditor, 'video');\n                            }\n                        }\n                        else {\n                            if (vditor.options.video.error) {\n                                vditor.options.video.error(xhr.responseText);\n                            }\n                            else {\n                                vditor.tip.show(xhr.responseText);\n                            }\n                        }\n                        if (element) {\n                            element.value = \"\";\n                        }\n                        vditor.video.element.style.display = \"none\";\n                    }\n                };\n                xhr.upload.onprogress = function (event) {\n                    if (!event.lengthComputable) {\n                        return;\n                    }\n                    var progress = event.loaded / event.total * 100;\n                    vditor.video.element.style.display = \"block\";\n                    var progressBar = vditor.video.element;\n                    progressBar.style.width = progress + \"%\";\n                };\n                xhr.send(formData);\n                return [2 /*return*/];\n        }\n    });\n}); };\n\n\n;// ./src/ts/wysiwyg/input.ts\n\n\n\n\n\n\n\n\nvar input_input = function (vditor, range, event) {\n    var _a;\n    var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);\n    if (!blockElement) {\n        // 使用顶级块元素，应使用 innerHTML\n        blockElement = vditor.wysiwyg.element;\n    }\n    if (event && event.inputType !== \"formatItalic\"\n        && event.inputType !== \"deleteByDrag\"\n        && event.inputType !== \"insertFromDrop\"\n        && event.inputType !== \"formatBold\"\n        && event.inputType !== \"formatRemove\"\n        && event.inputType !== \"formatStrikeThrough\"\n        && event.inputType !== \"insertUnorderedList\"\n        && event.inputType !== \"insertOrderedList\"\n        && event.inputType !== \"formatOutdent\"\n        && event.inputType !== \"formatIndent\"\n        && event.inputType !== \"\" // document.execCommand('unlink', false)\n        || !event) {\n        var previousAEmptyElement = previoueIsEmptyA(range.startContainer);\n        if (previousAEmptyElement) {\n            // 链接结尾回车不应该复制到下一行 https://github.com/Vanessa219/vditor/issues/163\n            previousAEmptyElement.remove();\n        }\n        // 保存光标\n        vditor.wysiwyg.element.querySelectorAll(\"wbr\").forEach(function (wbr) {\n            wbr.remove();\n        });\n        range.insertNode(document.createElement(\"wbr\"));\n        // 在行首进行删除，后面的元素会带有样式，需清除\n        blockElement.querySelectorAll(\"[style]\").forEach(function (item) {\n            item.removeAttribute(\"style\");\n        });\n        // 移除空评论\n        blockElement.querySelectorAll(\".vditor-comment\").forEach(function (item) {\n            if (item.textContent.trim() === \"\") {\n                item.classList.remove(\"vditor-comment\", \"vditor-comment--focus\");\n                item.removeAttribute(\"data-cmtids\");\n            }\n        });\n        //  在有评论的行首换行后，该行的前一段会带有评论标识\n        (_a = blockElement.previousElementSibling) === null || _a === void 0 ? void 0 : _a.querySelectorAll(\".vditor-comment\").forEach(function (item) {\n            if (item.textContent.trim() === \"\") {\n                item.classList.remove(\"vditor-comment\", \"vditor-comment--focus\");\n                item.removeAttribute(\"data-cmtids\");\n            }\n        });\n        var html_1 = \"\";\n        if (blockElement.getAttribute(\"data-type\") === \"link-ref-defs-block\") {\n            // 修改链接引用\n            blockElement = vditor.wysiwyg.element;\n        }\n        var isWYSIWYGElement = blockElement.isEqualNode(vditor.wysiwyg.element);\n        var footnoteElement = (0,hasClosest/* hasClosestByAttribute */.Th)(blockElement, \"data-type\", \"footnotes-block\");\n        if (!isWYSIWYGElement) {\n            // 列表需要到最顶层\n            var topListElement = (0,hasClosest/* getTopList */.KR)(range.startContainer);\n            if (topListElement && !footnoteElement) {\n                var blockquoteElement = (0,hasClosestByHeadings/* hasClosestByTag */.f)(range.startContainer, \"BLOCKQUOTE\");\n                if (blockquoteElement) {\n                    // li 中有 blockquote 就只渲染 blockquote\n                    blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer) || blockElement;\n                }\n                else {\n                    blockElement = topListElement;\n                }\n            }\n            // 修改脚注\n            if (footnoteElement) {\n                blockElement = footnoteElement;\n            }\n            html_1 = blockElement.outerHTML;\n            if (blockElement.tagName === \"UL\" || blockElement.tagName === \"OL\") {\n                // 如果为列表的话，需要把上下的列表都重绘\n                var listPrevElement = blockElement.previousElementSibling;\n                var listNextElement = blockElement.nextElementSibling;\n                if (listPrevElement && (listPrevElement.tagName === \"UL\" || listPrevElement.tagName === \"OL\")) {\n                    html_1 = listPrevElement.outerHTML + html_1;\n                    listPrevElement.remove();\n                }\n                if (listNextElement && (listNextElement.tagName === \"UL\" || listNextElement.tagName === \"OL\")) {\n                    html_1 = html_1 + listNextElement.outerHTML;\n                    listNextElement.remove();\n                }\n                // firefox 列表回车不会产生新的 list item https://github.com/Vanessa219/vditor/issues/194\n                html_1 = html_1.replace(\"<div><wbr><br></div>\", \"<li><p><wbr><br></p></li>\");\n            }\n            if (!blockElement.innerText.startsWith(\"```\")) {\n                // 添加链接引用\n                vditor.wysiwyg.element.querySelectorAll(\"[data-type='link-ref-defs-block']\").forEach(function (item) {\n                    if (item && !blockElement.isEqualNode(item)) {\n                        html_1 += item.outerHTML;\n                        item.remove();\n                    }\n                });\n                // 添加脚注\n                vditor.wysiwyg.element.querySelectorAll(\"[data-type='footnotes-block']\").forEach(function (item) {\n                    if (item && !blockElement.isEqualNode(item)) {\n                        html_1 += item.outerHTML;\n                        item.remove();\n                    }\n                });\n            }\n        }\n        else {\n            html_1 = blockElement.innerHTML;\n        }\n        // 合并多个 em， strong，s。以防止多个相同元素在一起时不满足 commonmark 规范，出现标记符\n        html_1 = html_1.replace(/<\\/(strong|b)><strong data-marker=\"\\W{2}\">/g, \"\")\n            .replace(/<\\/(em|i)><em data-marker=\"\\W{1}\">/g, \"\")\n            .replace(/<\\/(s|strike)><s data-marker=\"~{1,2}\">/g, \"\");\n        if (html_1 === '<p data-block=\"0\">```<wbr></p>' && vditor.hint.recentLanguage) {\n            html_1 = '<p data-block=\"0\">```<wbr></p>'.replace(\"```\", \"```\" + vditor.hint.recentLanguage);\n        }\n        log(\"SpinVditorDOM\", html_1, \"argument\", vditor.options.debugger);\n        html_1 = vditor.lute.SpinVditorDOM(html_1);\n        log(\"SpinVditorDOM\", html_1, \"result\", vditor.options.debugger);\n        if (isWYSIWYGElement) {\n            blockElement.innerHTML = html_1;\n        }\n        else {\n            blockElement.outerHTML = html_1;\n            if (footnoteElement) {\n                // 更新正文中的 tip\n                var footnoteItemElement = (0,hasClosest/* hasTopClosestByTag */.Ab)(vditor.wysiwyg.element.querySelector(\"wbr\"), \"LI\");\n                if (footnoteItemElement) {\n                    var footnoteRefElement = vditor.wysiwyg.element.querySelector(\"sup[data-type=\\\"footnotes-ref\\\"][data-footnotes-label=\\\"\".concat(footnoteItemElement.getAttribute(\"data-marker\"), \"\\\"]\"));\n                    if (footnoteRefElement) {\n                        footnoteRefElement.setAttribute(\"aria-label\", footnoteItemElement.textContent.trim().substr(0, 24));\n                    }\n                }\n            }\n        }\n        var firstLinkRefDefElement_1;\n        var allLinkRefDefsElement = vditor.wysiwyg.element.querySelectorAll(\"[data-type='link-ref-defs-block']\");\n        allLinkRefDefsElement.forEach(function (item, index) {\n            if (index === 0) {\n                firstLinkRefDefElement_1 = item;\n            }\n            else {\n                firstLinkRefDefElement_1.insertAdjacentHTML(\"beforeend\", item.innerHTML);\n                item.remove();\n            }\n        });\n        if (allLinkRefDefsElement.length > 0) {\n            vditor.wysiwyg.element.insertAdjacentElement(\"beforeend\", allLinkRefDefsElement[0]);\n        }\n        // 脚注合并后添加的末尾\n        var firstFootnoteElement_1;\n        var allFootnoteElement = vditor.wysiwyg.element.querySelectorAll(\"[data-type='footnotes-block']\");\n        allFootnoteElement.forEach(function (item, index) {\n            if (index === 0) {\n                firstFootnoteElement_1 = item;\n            }\n            else {\n                firstFootnoteElement_1.insertAdjacentHTML(\"beforeend\", item.innerHTML);\n                item.remove();\n            }\n        });\n        if (allFootnoteElement.length > 0) {\n            vditor.wysiwyg.element.insertAdjacentElement(\"beforeend\", allFootnoteElement[0]);\n        }\n        // 设置光标\n        (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n        vditor.wysiwyg.element.querySelectorAll(\".vditor-wysiwyg__preview[data-render='2']\")\n            .forEach(function (item) {\n            processCodeRender(item, vditor);\n        });\n        if (event && (event.inputType === \"deleteContentBackward\" || event.inputType === \"deleteContentForward\") &&\n            vditor.options.comment.enable) {\n            vditor.wysiwyg.triggerRemoveComment(vditor);\n            vditor.options.comment.adjustTop(vditor.wysiwyg.getComments(vditor, true));\n        }\n    }\n    renderToc(vditor);\n    afterRenderEvent(vditor, {\n        enableAddUndoStack: true,\n        enableHint: true,\n        enableInput: true,\n    });\n};\n\n;// ./src/ts/util/fixBrowserBehavior.ts\nvar __makeTemplateObject = (undefined && undefined.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar fixBrowserBehavior_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar fixBrowserBehavior_generator = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// https://github.com/Vanessa219/vditor/issues/508 软键盘无法删除空块\nvar fixGSKeyBackspace = function (event, vditor, startContainer) {\n    if (event.keyCode === 229 && event.code === \"\" && event.key === \"Unidentified\" && vditor.currentMode !== \"sv\") {\n        var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(startContainer);\n        // 移动端的标点符号都显示为 299，因此需限定为空删除的条件\n        if (blockElement && blockElement.textContent.trim() === \"\") {\n            vditor[vditor.currentMode].composingLock = true;\n            return false;\n        }\n    }\n    return true;\n};\n// https://github.com/Vanessa219/vditor/issues/361 代码块后输入中文\nvar fixCJKPosition = function (range, vditor, event) {\n    if (event.key === \"Enter\" || event.key === \"Tab\" || event.key === \"Backspace\" || event.key.indexOf(\"Arrow\") > -1\n        || (0,compatibility/* isCtrl */._0)(event) || event.key === \"Escape\" || event.shiftKey || event.altKey) {\n        return;\n    }\n    var pLiElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.startContainer, \"P\") ||\n        (0,hasClosest/* hasClosestByMatchTag */._Y)(range.startContainer, \"LI\");\n    if (pLiElement && (0,selection/* getSelectPosition */.ED)(pLiElement, vditor[vditor.currentMode].element, range).start === 0) {\n        // https://github.com/Vanessa219/vditor/issues/1289 WKWebView切换输入法产生六分之一空格，造成光标错位\n        if (pLiElement.nodeValue) {\n            pLiElement.nodeValue = pLiElement.nodeValue.replace(/\\u2006/g, '');\n        }\n        var zwspNode = document.createTextNode(constants/* Constants */.Y.ZWSP);\n        range.insertNode(zwspNode);\n        range.setStartAfter(zwspNode);\n    }\n};\n// https://github.com/Vanessa219/vditor/issues/381 光标在内联数学公式中无法向下移动\nvar fixCursorDownInlineMath = function (range, key) {\n    if (key === \"ArrowDown\" || key === \"ArrowUp\") {\n        var inlineElement = (0,hasClosest/* hasClosestByAttribute */.Th)(range.startContainer, \"data-type\", \"math-inline\") ||\n            (0,hasClosest/* hasClosestByAttribute */.Th)(range.startContainer, \"data-type\", \"html-entity\") ||\n            (0,hasClosest/* hasClosestByAttribute */.Th)(range.startContainer, \"data-type\", \"html-inline\");\n        if (inlineElement) {\n            if (key === \"ArrowDown\") {\n                range.setStartAfter(inlineElement.parentElement);\n            }\n            if (key === \"ArrowUp\") {\n                range.setStartBefore(inlineElement.parentElement);\n            }\n        }\n    }\n};\nvar insertEmptyBlock = function (vditor, position) {\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);\n    if (blockElement) {\n        blockElement.insertAdjacentHTML(position, \"<p data-block=\\\"0\\\">\".concat(constants/* Constants */.Y.ZWSP, \"<wbr>\\n</p>\"));\n        (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n        highlightToolbar(vditor);\n        execAfterRender(vditor);\n    }\n};\nvar isFirstCell = function (cellElement) {\n    var tableElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(cellElement, \"TABLE\");\n    if (tableElement && tableElement.rows[0].cells[0].isSameNode(cellElement)) {\n        return tableElement;\n    }\n    return false;\n};\nvar isLastCell = function (cellElement) {\n    var tableElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(cellElement, \"TABLE\");\n    if (tableElement && tableElement.lastElementChild.lastElementChild.lastElementChild.isSameNode(cellElement)) {\n        return tableElement;\n    }\n    return false;\n};\n// 光标设置到前一个表格中\nvar goPreviousCell = function (cellElement, range, isSelected) {\n    if (isSelected === void 0) { isSelected = true; }\n    var previousElement = cellElement.previousElementSibling;\n    if (!previousElement) {\n        if (cellElement.parentElement.previousElementSibling) {\n            previousElement = cellElement.parentElement.previousElementSibling.lastElementChild;\n        }\n        else if (cellElement.parentElement.parentElement.tagName === \"TBODY\" &&\n            cellElement.parentElement.parentElement.previousElementSibling) {\n            previousElement = cellElement.parentElement\n                .parentElement.previousElementSibling.lastElementChild.lastElementChild;\n        }\n        else {\n            previousElement = null;\n        }\n    }\n    if (previousElement) {\n        range.selectNodeContents(previousElement);\n        if (!isSelected) {\n            range.collapse(false);\n        }\n        (0,selection/* setSelectionFocus */.jl)(range);\n    }\n    return previousElement;\n};\nvar insertAfterBlock = function (vditor, event, range, element, blockElement) {\n    var position = (0,selection/* getSelectPosition */.ED)(element, vditor[vditor.currentMode].element, range);\n    if ((event.key === \"ArrowDown\" && element.textContent.trimRight().substr(position.start).indexOf(\"\\n\") === -1) ||\n        (event.key === \"ArrowRight\" && position.start >= element.textContent.trimRight().length)) {\n        var nextElement = blockElement.nextElementSibling;\n        if (!nextElement ||\n            (nextElement && (nextElement.tagName === \"TABLE\" || nextElement.getAttribute(\"data-type\")))) {\n            blockElement.insertAdjacentHTML(\"afterend\", \"<p data-block=\\\"0\\\">\".concat(constants/* Constants */.Y.ZWSP, \"<wbr></p>\"));\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n        }\n        else {\n            range.selectNodeContents(nextElement);\n            range.collapse(true);\n            (0,selection/* setSelectionFocus */.jl)(range);\n        }\n        event.preventDefault();\n        return true;\n    }\n    return false;\n};\nvar insertBeforeBlock = function (vditor, event, range, element, blockElement) {\n    var position = (0,selection/* getSelectPosition */.ED)(element, vditor[vditor.currentMode].element, range);\n    if ((event.key === \"ArrowUp\" && element.textContent.substr(0, position.start).indexOf(\"\\n\") === -1) ||\n        ((event.key === \"ArrowLeft\" || (event.key === \"Backspace\" && range.toString() === \"\")) &&\n            position.start === 0)) {\n        var previousElement = blockElement.previousElementSibling;\n        // table || code\n        if (!previousElement ||\n            (previousElement && (previousElement.tagName === \"TABLE\" || previousElement.getAttribute(\"data-type\")))) {\n            blockElement.insertAdjacentHTML(\"beforebegin\", \"<p data-block=\\\"0\\\">\".concat(constants/* Constants */.Y.ZWSP, \"<wbr></p>\"));\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n        }\n        else {\n            range.selectNodeContents(previousElement);\n            range.collapse(false);\n            (0,selection/* setSelectionFocus */.jl)(range);\n        }\n        event.preventDefault();\n        return true;\n    }\n    return false;\n};\nvar listToggle = function (vditor, range, type, cancel) {\n    if (cancel === void 0) { cancel = true; }\n    var itemElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.startContainer, \"LI\");\n    vditor[vditor.currentMode].element.querySelectorAll(\"wbr\").forEach(function (wbr) {\n        wbr.remove();\n    });\n    range.insertNode(document.createElement(\"wbr\"));\n    if (cancel && itemElement) {\n        // 取消\n        var pHTML = \"\";\n        for (var i = 0; i < itemElement.parentElement.childElementCount; i++) {\n            var inputElement = itemElement.parentElement.children[i].querySelector(\"input\");\n            if (inputElement) {\n                inputElement.remove();\n            }\n            pHTML += \"<p data-block=\\\"0\\\">\".concat(itemElement.parentElement.children[i].innerHTML.trimLeft(), \"</p>\");\n        }\n        itemElement.parentElement.insertAdjacentHTML(\"beforebegin\", pHTML);\n        itemElement.parentElement.remove();\n    }\n    else {\n        if (!itemElement) {\n            // 添加\n            var blockElement = (0,hasClosest/* hasClosestByAttribute */.Th)(range.startContainer, \"data-block\", \"0\");\n            if (!blockElement) {\n                vditor[vditor.currentMode].element.querySelector(\"wbr\").remove();\n                blockElement = vditor[vditor.currentMode].element.querySelector(\"p\");\n                blockElement.innerHTML = \"<wbr>\";\n            }\n            if (type === \"check\") {\n                blockElement.insertAdjacentHTML(\"beforebegin\", \"<ul data-block=\\\"0\\\"><li class=\\\"vditor-task\\\"><input type=\\\"checkbox\\\" /> \".concat(blockElement.innerHTML, \"</li></ul>\"));\n                blockElement.remove();\n            }\n            else if (type === \"list\") {\n                blockElement.insertAdjacentHTML(\"beforebegin\", \"<ul data-block=\\\"0\\\"><li>\".concat(blockElement.innerHTML, \"</li></ul>\"));\n                blockElement.remove();\n            }\n            else if (type === \"ordered-list\") {\n                blockElement.insertAdjacentHTML(\"beforebegin\", \"<ol data-block=\\\"0\\\"><li>\".concat(blockElement.innerHTML, \"</li></ol>\"));\n                blockElement.remove();\n            }\n        }\n        else {\n            // 切换\n            if (type === \"check\") {\n                itemElement.parentElement.querySelectorAll(\"li\").forEach(function (item) {\n                    item.insertAdjacentHTML(\"afterbegin\", \"<input type=\\\"checkbox\\\" />\".concat(item.textContent.indexOf(\" \") === 0 ? \"\" : \" \"));\n                    item.classList.add(\"vditor-task\");\n                });\n            }\n            else {\n                if (itemElement.querySelector(\"input\")) {\n                    itemElement.parentElement.querySelectorAll(\"li\").forEach(function (item) {\n                        item.querySelector(\"input\").remove();\n                        item.classList.remove(\"vditor-task\");\n                    });\n                }\n                var element = void 0;\n                if (type === \"list\") {\n                    element = document.createElement(\"ul\");\n                    element.setAttribute(\"data-marker\", \"*\");\n                }\n                else {\n                    element = document.createElement(\"ol\");\n                    element.setAttribute(\"data-marker\", \"1.\");\n                }\n                element.setAttribute(\"data-block\", \"0\");\n                element.setAttribute(\"data-tight\", itemElement.parentElement.getAttribute(\"data-tight\"));\n                element.innerHTML = itemElement.parentElement.innerHTML;\n                itemElement.parentElement.parentNode.replaceChild(element, itemElement.parentElement);\n            }\n        }\n    }\n};\nvar listIndent = function (vditor, liElement, range) {\n    var previousElement = liElement.previousElementSibling;\n    if (liElement && previousElement) {\n        var liElements_1 = [liElement];\n        Array.from(range.cloneContents().children).forEach(function (item, index) {\n            if (item.nodeType !== 3 && liElement && item.textContent.trim() !== \"\"\n                && liElement.getAttribute(\"data-node-id\") === item.getAttribute(\"data-node-id\")) {\n                if (index !== 0) {\n                    liElements_1.push(liElement);\n                }\n                liElement = liElement.nextElementSibling;\n            }\n        });\n        vditor[vditor.currentMode].element.querySelectorAll(\"wbr\").forEach(function (wbr) {\n            wbr.remove();\n        });\n        range.insertNode(document.createElement(\"wbr\"));\n        var liParentElement = previousElement.parentElement;\n        var liHTML_1 = \"\";\n        liElements_1.forEach(function (item) {\n            var marker = item.getAttribute(\"data-marker\");\n            if (marker.length !== 1) {\n                marker = \"1\".concat(marker.slice(-1));\n            }\n            liHTML_1 += \"<li data-node-id=\\\"\".concat(item.getAttribute(\"data-node-id\"), \"\\\" data-marker=\\\"\").concat(marker, \"\\\">\").concat(item.innerHTML, \"</li>\");\n            item.remove();\n        });\n        previousElement.insertAdjacentHTML(\"beforeend\", \"<\".concat(liParentElement.tagName, \" data-block=\\\"0\\\">\").concat(liHTML_1, \"</\").concat(liParentElement.tagName, \">\"));\n        if (vditor.currentMode === \"wysiwyg\") {\n            liParentElement.outerHTML = vditor.lute.SpinVditorDOM(liParentElement.outerHTML);\n        }\n        else {\n            liParentElement.outerHTML = vditor.lute.SpinVditorIRDOM(liParentElement.outerHTML);\n        }\n        (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n        var tempTopListElement = (0,hasClosest/* getTopList */.KR)(range.startContainer);\n        if (tempTopListElement) {\n            tempTopListElement.querySelectorAll(\".vditor-\".concat(vditor.currentMode, \"__preview[data-render='2']\"))\n                .forEach(function (item) {\n                processCodeRender(item, vditor);\n                if (vditor.currentMode === \"wysiwyg\") {\n                    item.previousElementSibling.setAttribute(\"style\", \"display:none\");\n                }\n            });\n        }\n        execAfterRender(vditor);\n        highlightToolbar(vditor);\n    }\n    else {\n        vditor[vditor.currentMode].element.focus();\n    }\n};\nvar listOutdent = function (vditor, liElement, range, topListElement) {\n    var liParentLiElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(liElement.parentElement, \"LI\");\n    if (liParentLiElement) {\n        vditor[vditor.currentMode].element.querySelectorAll(\"wbr\").forEach(function (wbr) {\n            wbr.remove();\n        });\n        range.insertNode(document.createElement(\"wbr\"));\n        var liParentElement = liElement.parentElement;\n        var liParentAfterElement = liParentElement.cloneNode();\n        var liElements_2 = [liElement];\n        Array.from(range.cloneContents().children).forEach(function (item, index) {\n            if (item.nodeType !== 3 && liElement && item.textContent.trim() !== \"\" &&\n                liElement.getAttribute(\"data-node-id\") === item.getAttribute(\"data-node-id\")) {\n                if (index !== 0) {\n                    liElements_2.push(liElement);\n                }\n                liElement = liElement.nextElementSibling;\n            }\n        });\n        var isMatch_1 = false;\n        var afterHTML_1 = \"\";\n        liParentElement.querySelectorAll(\"li\").forEach(function (item) {\n            if (isMatch_1) {\n                afterHTML_1 += item.outerHTML;\n                if (!item.nextElementSibling && !item.previousElementSibling) {\n                    item.parentElement.remove();\n                }\n                else {\n                    item.remove();\n                }\n            }\n            if (item.isSameNode(liElements_2[liElements_2.length - 1])) {\n                isMatch_1 = true;\n            }\n        });\n        liElements_2.reverse().forEach(function (item) {\n            liParentLiElement.insertAdjacentElement(\"afterend\", item);\n        });\n        if (afterHTML_1) {\n            liParentAfterElement.innerHTML = afterHTML_1;\n            liElements_2[0].insertAdjacentElement(\"beforeend\", liParentAfterElement);\n        }\n        if (vditor.currentMode === \"wysiwyg\") {\n            topListElement.outerHTML = vditor.lute.SpinVditorDOM(topListElement.outerHTML);\n        }\n        else {\n            topListElement.outerHTML = vditor.lute.SpinVditorIRDOM(topListElement.outerHTML);\n        }\n        (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n        var tempTopListElement = (0,hasClosest/* getTopList */.KR)(range.startContainer);\n        if (tempTopListElement) {\n            tempTopListElement.querySelectorAll(\".vditor-\".concat(vditor.currentMode, \"__preview[data-render='2']\"))\n                .forEach(function (item) {\n                processCodeRender(item, vditor);\n                if (vditor.currentMode === \"wysiwyg\") {\n                    item.previousElementSibling.setAttribute(\"style\", \"display:none\");\n                }\n            });\n        }\n        execAfterRender(vditor);\n        highlightToolbar(vditor);\n    }\n    else {\n        vditor[vditor.currentMode].element.focus();\n    }\n};\nvar setTableAlign = function (tableElement, type) {\n    var cell = getSelection().getRangeAt(0).startContainer.parentElement;\n    var columnCnt = tableElement.rows[0].cells.length;\n    var rowCnt = tableElement.rows.length;\n    var currentColumn = 0;\n    for (var i = 0; i < rowCnt; i++) {\n        for (var j = 0; j < columnCnt; j++) {\n            if (tableElement.rows[i].cells[j].isSameNode(cell)) {\n                currentColumn = j;\n                break;\n            }\n        }\n    }\n    for (var k = 0; k < rowCnt; k++) {\n        tableElement.rows[k].cells[currentColumn].setAttribute(\"align\", type);\n    }\n};\nvar isHrMD = function (text) {\n    // - _ *\n    var marker = text.trimRight().split(\"\\n\").pop();\n    if (marker === \"\") {\n        return false;\n    }\n    if (marker.replace(/ |-/g, \"\") === \"\"\n        || marker.replace(/ |_/g, \"\") === \"\"\n        || marker.replace(/ |\\*/g, \"\") === \"\") {\n        if (marker.replace(/ /g, \"\").length > 2) {\n            if (marker.indexOf(\"-\") > -1 && marker.trimLeft().indexOf(\" \") === -1\n                && text.trimRight().split(\"\\n\").length > 1) {\n                // 满足 heading\n                return false;\n            }\n            if (marker.indexOf(\"    \") === 0 || marker.indexOf(\"\\t\") === 0) {\n                // 代码块\n                return false;\n            }\n            return true;\n        }\n        return false;\n    }\n    return false;\n};\nvar isHeadingMD = function (text) {\n    // - =\n    var textArray = text.trimRight().split(\"\\n\");\n    text = textArray.pop();\n    if (text.indexOf(\"    \") === 0 || text.indexOf(\"\\t\") === 0) {\n        return false;\n    }\n    text = text.trimLeft();\n    if (text === \"\" || textArray.length === 0) {\n        return false;\n    }\n    if (text.replace(/-/g, \"\") === \"\"\n        || text.replace(/=/g, \"\") === \"\") {\n        return true;\n    }\n    return false;\n};\nvar execAfterRender = function (vditor, options) {\n    if (options === void 0) { options = {\n        enableAddUndoStack: true,\n        enableHint: false,\n        enableInput: true,\n    }; }\n    if (vditor.currentMode === \"wysiwyg\") {\n        afterRenderEvent(vditor, options);\n    }\n    else if (vditor.currentMode === \"ir\") {\n        process_processAfterRender(vditor, options);\n    }\n    else if (vditor.currentMode === \"sv\") {\n        processAfterRender(vditor, options);\n    }\n};\nvar fixList = function (range, vditor, pElement, event) {\n    var _a;\n    var startContainer = range.startContainer;\n    var liElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"LI\");\n    if (liElement) {\n        if (!(0,compatibility/* isCtrl */._0)(event) && !event.altKey && event.key === \"Enter\" &&\n            // fix li 中有多个 P 时，在第一个 P 中换行会在下方生成新的 li\n            (!event.shiftKey && pElement && liElement.contains(pElement) && pElement.nextElementSibling)) {\n            if (liElement && !liElement.textContent.endsWith(\"\\n\")) {\n                // li 结尾需 \\n\n                liElement.insertAdjacentText(\"beforeend\", \"\\n\");\n            }\n            range.insertNode(document.createTextNode(\"\\n\\n\"));\n            range.collapse(false);\n            execAfterRender(vditor);\n            event.preventDefault();\n            return true;\n        }\n        if (!(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey && event.key === \"Backspace\" &&\n            !liElement.previousElementSibling && range.toString() === \"\" &&\n            (0,selection/* getSelectPosition */.ED)(liElement, vditor[vditor.currentMode].element, range).start === 0) {\n            // 光标位于点和第一个字符中间时，无法删除 li 元素\n            if (liElement.nextElementSibling) {\n                liElement.parentElement.insertAdjacentHTML(\"beforebegin\", \"<p data-block=\\\"0\\\"><wbr>\".concat(liElement.innerHTML, \"</p>\"));\n                liElement.remove();\n            }\n            else {\n                liElement.parentElement.outerHTML = \"<p data-block=\\\"0\\\"><wbr>\".concat(liElement.innerHTML, \"</p>\");\n            }\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n            execAfterRender(vditor);\n            event.preventDefault();\n            return true;\n        }\n        // 空列表删除后与上一级段落对齐\n        if (!(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey && event.key === \"Backspace\" &&\n            liElement.textContent.trim().replace(constants/* Constants */.Y.ZWSP, \"\") === \"\" &&\n            range.toString() === \"\" && ((_a = liElement.previousElementSibling) === null || _a === void 0 ? void 0 : _a.tagName) === \"LI\") {\n            liElement.previousElementSibling.insertAdjacentText(\"beforeend\", \"\\n\\n\");\n            range.selectNodeContents(liElement.previousElementSibling);\n            range.collapse(false);\n            liElement.remove();\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n            execAfterRender(vditor);\n            event.preventDefault();\n            return true;\n        }\n        if (!(0,compatibility/* isCtrl */._0)(event) && !event.altKey && event.key === \"Tab\") {\n            // 光标位于第一/零字符时，tab 用于列表的缩进\n            var isFirst = false;\n            if (range.startOffset === 0\n                && ((startContainer.nodeType === 3 && !startContainer.previousSibling)\n                    || (startContainer.nodeType !== 3 && startContainer.nodeName === \"LI\"))) {\n                // 有序/无序列表\n                isFirst = true;\n            }\n            else if (liElement.classList.contains(\"vditor-task\") && range.startOffset === 1\n                && startContainer.previousSibling.nodeType !== 3\n                && startContainer.previousSibling.tagName === \"INPUT\") {\n                // 任务列表\n                isFirst = true;\n            }\n            if (isFirst || range.toString() !== \"\") {\n                if (event.shiftKey) {\n                    listOutdent(vditor, liElement, range, liElement.parentElement);\n                }\n                else {\n                    listIndent(vditor, liElement, range);\n                }\n                event.preventDefault();\n                return true;\n            }\n        }\n    }\n    return false;\n};\n// tab 处理: block code render, table, 列表第一个字符中的 tab 处理单独写在上面\nvar fixTab = function (vditor, range, event) {\n    if (vditor.options.tab && event.key === \"Tab\") {\n        if (event.shiftKey) {\n            // TODO shift+tab\n        }\n        else {\n            if (range.toString() === \"\") {\n                range.insertNode(document.createTextNode(vditor.options.tab));\n                range.collapse(false);\n            }\n            else {\n                range.extractContents();\n                range.insertNode(document.createTextNode(vditor.options.tab));\n                range.collapse(false);\n            }\n        }\n        (0,selection/* setSelectionFocus */.jl)(range);\n        execAfterRender(vditor);\n        event.preventDefault();\n        return true;\n    }\n};\nvar fixMarkdown = function (event, vditor, pElement, range) {\n    if (!pElement) {\n        return;\n    }\n    if (!(0,compatibility/* isCtrl */._0)(event) && !event.altKey && event.key === \"Enter\") {\n        var pText = String.raw(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\", \"\"], [\"\", \"\"])), pElement.textContent).replace(/\\\\\\|/g, \"\").trim();\n        var pTextList = pText.split(\"|\");\n        if (pText.startsWith(\"|\") && pText.endsWith(\"|\") && pTextList.length > 3) {\n            // table 自动完成\n            var tableHeaderMD = pTextList.map(function () { return \"---\"; }).join(\"|\");\n            tableHeaderMD =\n                pElement.textContent + \"\\n\" + tableHeaderMD.substring(3, tableHeaderMD.length - 3) + \"\\n|<wbr>\";\n            pElement.outerHTML = vditor.lute.SpinVditorDOM(tableHeaderMD);\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n            execAfterRender(vditor);\n            scrollCenter(vditor);\n            event.preventDefault();\n            return true;\n        }\n        // hr 渲染\n        if (isHrMD(pElement.innerHTML) && pElement.previousElementSibling) {\n            // 软换行后 hr 前有内容\n            var pInnerHTML = \"\";\n            var innerHTMLList = pElement.innerHTML.trimRight().split(\"\\n\");\n            if (innerHTMLList.length > 1) {\n                innerHTMLList.pop();\n                pInnerHTML = \"<p data-block=\\\"0\\\">\".concat(innerHTMLList.join(\"\\n\"), \"</p>\");\n            }\n            pElement.insertAdjacentHTML(\"afterend\", \"\".concat(pInnerHTML, \"<hr data-block=\\\"0\\\"><p data-block=\\\"0\\\"><wbr>\\n</p>\"));\n            pElement.remove();\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n            execAfterRender(vditor);\n            scrollCenter(vditor);\n            event.preventDefault();\n            return true;\n        }\n        if (isHeadingMD(pElement.innerHTML)) {\n            // heading 渲染\n            if (vditor.currentMode === \"wysiwyg\") {\n                pElement.outerHTML = vditor.lute.SpinVditorDOM(pElement.innerHTML + '<p data-block=\"0\"><wbr>\\n</p>');\n            }\n            else {\n                pElement.outerHTML = vditor.lute.SpinVditorIRDOM(pElement.innerHTML + '<p data-block=\"0\"><wbr>\\n</p>');\n            }\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n            execAfterRender(vditor);\n            scrollCenter(vditor);\n            event.preventDefault();\n            return true;\n        }\n    }\n    // 软换行会被切割 https://github.com/Vanessa219/vditor/issues/220\n    if (range.collapsed && pElement.previousElementSibling && event.key === \"Backspace\" &&\n        !(0,compatibility/* isCtrl */._0)(event) && !event.altKey && !event.shiftKey &&\n        pElement.textContent.trimRight().split(\"\\n\").length > 1 &&\n        (0,selection/* getSelectPosition */.ED)(pElement, vditor[vditor.currentMode].element, range).start === 0) {\n        var lastElement = (0,hasClosest/* getLastNode */.Rp)(pElement.previousElementSibling);\n        if (!lastElement.textContent.endsWith(\"\\n\")) {\n            lastElement.textContent = lastElement.textContent + \"\\n\";\n        }\n        lastElement.parentElement.insertAdjacentHTML(\"beforeend\", \"<wbr>\".concat(pElement.innerHTML));\n        pElement.remove();\n        (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n        return false;\n    }\n    return false;\n};\nvar insertRow = function (vditor, range, cellElement) {\n    var rowHTML = \"\";\n    for (var m = 0; m < cellElement.parentElement.childElementCount; m++) {\n        rowHTML += \"<td align=\\\"\".concat(cellElement.parentElement.children[m].getAttribute(\"align\"), \"\\\"> </td>\");\n    }\n    if (cellElement.tagName === \"TH\") {\n        cellElement.parentElement.parentElement.insertAdjacentHTML(\"afterend\", \"<tbody><tr>\".concat(rowHTML, \"</tr></tbody>\"));\n    }\n    else {\n        cellElement.parentElement.insertAdjacentHTML(\"afterend\", \"<tr>\".concat(rowHTML, \"</tr>\"));\n    }\n    execAfterRender(vditor);\n};\nvar insertRowAbove = function (vditor, range, cellElement) {\n    var rowHTML = \"\";\n    for (var m = 0; m < cellElement.parentElement.childElementCount; m++) {\n        if (cellElement.tagName === \"TH\") {\n            rowHTML += \"<th align=\\\"\".concat(cellElement.parentElement.children[m].getAttribute(\"align\"), \"\\\"> </th>\");\n        }\n        else {\n            rowHTML += \"<td align=\\\"\".concat(cellElement.parentElement.children[m].getAttribute(\"align\"), \"\\\"> </td>\");\n        }\n    }\n    if (cellElement.tagName === \"TH\") {\n        cellElement.parentElement.parentElement.insertAdjacentHTML(\"beforebegin\", \"<thead><tr>\".concat(rowHTML, \"</tr></thead>\"));\n        range.insertNode(document.createElement(\"wbr\"));\n        var theadHTML = cellElement.parentElement.innerHTML.replace(/<th>/g, \"<td>\").replace(/<\\/th>/g, \"</td>\");\n        cellElement.parentElement.parentElement.nextElementSibling.insertAdjacentHTML(\"afterbegin\", theadHTML);\n        cellElement.parentElement.parentElement.remove();\n        (0,selection/* setRangeByWbr */.ir)(vditor.ir.element, range);\n    }\n    else {\n        cellElement.parentElement.insertAdjacentHTML(\"beforebegin\", \"<tr>\".concat(rowHTML, \"</tr>\"));\n    }\n    execAfterRender(vditor);\n};\nvar insertColumn = function (vditor, tableElement, cellElement, type) {\n    if (type === void 0) { type = \"afterend\"; }\n    var index = 0;\n    var previousElement = cellElement.previousElementSibling;\n    while (previousElement) {\n        index++;\n        previousElement = previousElement.previousElementSibling;\n    }\n    for (var i = 0; i < tableElement.rows.length; i++) {\n        if (i === 0) {\n            tableElement.rows[i].cells[index].insertAdjacentHTML(type, \"<th> </th>\");\n        }\n        else {\n            tableElement.rows[i].cells[index].insertAdjacentHTML(type, \"<td> </td>\");\n        }\n    }\n    execAfterRender(vditor);\n};\nvar deleteRow = function (vditor, range, cellElement) {\n    if (cellElement.tagName === \"TD\") {\n        var tbodyElement = cellElement.parentElement.parentElement;\n        if (cellElement.parentElement.previousElementSibling) {\n            range.selectNodeContents(cellElement.parentElement.previousElementSibling.lastElementChild);\n        }\n        else {\n            range.selectNodeContents(tbodyElement.previousElementSibling.lastElementChild.lastElementChild);\n        }\n        if (tbodyElement.childElementCount === 1) {\n            tbodyElement.remove();\n        }\n        else {\n            cellElement.parentElement.remove();\n        }\n        range.collapse(false);\n        (0,selection/* setSelectionFocus */.jl)(range);\n        execAfterRender(vditor);\n    }\n};\nvar deleteColumn = function (vditor, range, tableElement, cellElement) {\n    var index = 0;\n    var previousElement = cellElement.previousElementSibling;\n    while (previousElement) {\n        index++;\n        previousElement = previousElement.previousElementSibling;\n    }\n    if (cellElement.previousElementSibling || cellElement.nextElementSibling) {\n        range.selectNodeContents(cellElement.previousElementSibling || cellElement.nextElementSibling);\n        range.collapse(true);\n    }\n    for (var i = 0; i < tableElement.rows.length; i++) {\n        var cells = tableElement.rows[i].cells;\n        if (cells.length === 1) {\n            tableElement.remove();\n            highlightToolbar(vditor);\n            break;\n        }\n        cells[index].remove();\n    }\n    (0,selection/* setSelectionFocus */.jl)(range);\n    execAfterRender(vditor);\n};\nvar fixTable = function (vditor, event, range) {\n    var startContainer = range.startContainer;\n    var cellElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TD\") ||\n        (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"TH\");\n    if (cellElement) {\n        // 换行或软换行：在 cell 中添加 br\n        if (!(0,compatibility/* isCtrl */._0)(event) && !event.altKey && event.key === \"Enter\") {\n            if (!cellElement.lastElementChild ||\n                (cellElement.lastElementChild && (!cellElement.lastElementChild.isSameNode(cellElement.lastChild) ||\n                    cellElement.lastElementChild.tagName !== \"BR\"))) {\n                cellElement.insertAdjacentHTML(\"beforeend\", \"<br>\");\n            }\n            var brElement = document.createElement(\"br\");\n            range.insertNode(brElement);\n            range.setStartAfter(brElement);\n            execAfterRender(vditor);\n            scrollCenter(vditor);\n            event.preventDefault();\n            return true;\n        }\n        // tab：光标移向下一个 cell\n        if (event.key === \"Tab\") {\n            if (event.shiftKey) {\n                // shift + tab 光标移动到前一个 cell\n                goPreviousCell(cellElement, range);\n                event.preventDefault();\n                return true;\n            }\n            var nextElement = cellElement.nextElementSibling;\n            if (!nextElement) {\n                if (cellElement.parentElement.nextElementSibling) {\n                    nextElement = cellElement.parentElement.nextElementSibling.firstElementChild;\n                }\n                else if (cellElement.parentElement.parentElement.tagName === \"THEAD\" &&\n                    cellElement.parentElement.parentElement.nextElementSibling) {\n                    nextElement =\n                        cellElement.parentElement.parentElement.nextElementSibling.firstElementChild.firstElementChild;\n                }\n                else {\n                    nextElement = null;\n                }\n            }\n            if (nextElement) {\n                range.selectNodeContents(nextElement);\n                (0,selection/* setSelectionFocus */.jl)(range);\n            }\n            event.preventDefault();\n            return true;\n        }\n        var tableElement = cellElement.parentElement.parentElement.parentElement;\n        if (event.key === \"ArrowUp\") {\n            event.preventDefault();\n            if (cellElement.tagName === \"TH\") {\n                if (tableElement.previousElementSibling) {\n                    range.selectNodeContents(tableElement.previousElementSibling);\n                    range.collapse(false);\n                    (0,selection/* setSelectionFocus */.jl)(range);\n                }\n                else {\n                    insertEmptyBlock(vditor, \"beforebegin\");\n                }\n                return true;\n            }\n            var m = 0;\n            var trElement = cellElement.parentElement;\n            for (; m < trElement.cells.length; m++) {\n                if (trElement.cells[m].isSameNode(cellElement)) {\n                    break;\n                }\n            }\n            var previousElement = trElement.previousElementSibling;\n            if (!previousElement) {\n                previousElement = trElement.parentElement.previousElementSibling.firstChild;\n            }\n            range.selectNodeContents(previousElement.cells[m]);\n            range.collapse(false);\n            (0,selection/* setSelectionFocus */.jl)(range);\n            return true;\n        }\n        if (event.key === \"ArrowDown\") {\n            event.preventDefault();\n            var trElement = cellElement.parentElement;\n            if (!trElement.nextElementSibling && cellElement.tagName === \"TD\") {\n                if (tableElement.nextElementSibling) {\n                    range.selectNodeContents(tableElement.nextElementSibling);\n                    range.collapse(true);\n                    (0,selection/* setSelectionFocus */.jl)(range);\n                }\n                else {\n                    insertEmptyBlock(vditor, \"afterend\");\n                }\n                return true;\n            }\n            var m = 0;\n            for (; m < trElement.cells.length; m++) {\n                if (trElement.cells[m].isSameNode(cellElement)) {\n                    break;\n                }\n            }\n            var nextElement = trElement.nextElementSibling;\n            if (!nextElement) {\n                nextElement = trElement.parentElement.nextElementSibling.firstChild;\n            }\n            range.selectNodeContents(nextElement.cells[m]);\n            range.collapse(true);\n            (0,selection/* setSelectionFocus */.jl)(range);\n            return true;\n        }\n        // focus row input, only wysiwyg\n        if (vditor.currentMode === \"wysiwyg\" &&\n            !(0,compatibility/* isCtrl */._0)(event) && event.key === \"Enter\" && !event.shiftKey && event.altKey) {\n            var inputElement = vditor.wysiwyg.popover.querySelector(\".vditor-input\");\n            inputElement.focus();\n            inputElement.select();\n            event.preventDefault();\n            return true;\n        }\n        // Backspace：光标移动到前一个 cell\n        if (!(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey && event.key === \"Backspace\"\n            && range.startOffset === 0 && range.toString() === \"\") {\n            var previousCellElement = goPreviousCell(cellElement, range, false);\n            if (!previousCellElement && tableElement) {\n                if (tableElement.textContent.trim() === \"\") {\n                    tableElement.outerHTML = \"<p data-block=\\\"0\\\"><wbr>\\n</p>\";\n                    (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n                }\n                else {\n                    range.setStartBefore(tableElement);\n                    range.collapse(true);\n                }\n                execAfterRender(vditor);\n            }\n            event.preventDefault();\n            return true;\n        }\n        // 上方新添加一行\n        if (matchHotKey(\"⇧⌘F\", event)) {\n            insertRowAbove(vditor, range, cellElement);\n            event.preventDefault();\n            return true;\n        }\n        // 下方新添加一行 https://github.com/Vanessa219/vditor/issues/46\n        if (matchHotKey(\"⌘=\", event)) {\n            insertRow(vditor, range, cellElement);\n            event.preventDefault();\n            return true;\n        }\n        // 左方新添加一列\n        if (matchHotKey(\"⇧⌘G\", event)) {\n            insertColumn(vditor, tableElement, cellElement, \"beforebegin\");\n            event.preventDefault();\n            return true;\n        }\n        // 后方新添加一列\n        if (matchHotKey(\"⇧⌘=\", event)) {\n            insertColumn(vditor, tableElement, cellElement);\n            event.preventDefault();\n            return true;\n        }\n        // 删除当前行\n        if (matchHotKey(\"⌘-\", event)) {\n            deleteRow(vditor, range, cellElement);\n            event.preventDefault();\n            return true;\n        }\n        // 删除当前列\n        if (matchHotKey(\"⇧⌘-\", event)) {\n            deleteColumn(vditor, range, tableElement, cellElement);\n            event.preventDefault();\n            return true;\n        }\n        // 剧左\n        if (matchHotKey(\"⇧⌘L\", event)) {\n            if (vditor.currentMode === \"ir\") {\n                setTableAlign(tableElement, \"left\");\n                execAfterRender(vditor);\n                event.preventDefault();\n                return true;\n            }\n            else {\n                var itemElement = vditor.wysiwyg.popover.querySelector('[data-type=\"left\"]');\n                if (itemElement) {\n                    itemElement.click();\n                    event.preventDefault();\n                    return true;\n                }\n            }\n        }\n        // 剧中\n        if (matchHotKey(\"⇧⌘C\", event)) {\n            if (vditor.currentMode === \"ir\") {\n                setTableAlign(tableElement, \"center\");\n                execAfterRender(vditor);\n                event.preventDefault();\n                return true;\n            }\n            else {\n                var itemElement = vditor.wysiwyg.popover.querySelector('[data-type=\"center\"]');\n                if (itemElement) {\n                    itemElement.click();\n                    event.preventDefault();\n                    return true;\n                }\n            }\n        }\n        // 剧右\n        if (matchHotKey(\"⇧⌘R\", event)) {\n            if (vditor.currentMode === \"ir\") {\n                setTableAlign(tableElement, \"right\");\n                execAfterRender(vditor);\n                event.preventDefault();\n                return true;\n            }\n            else {\n                var itemElement = vditor.wysiwyg.popover.querySelector('[data-type=\"right\"]');\n                if (itemElement) {\n                    itemElement.click();\n                    event.preventDefault();\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n};\nvar fixCodeBlock = function (vditor, event, codeRenderElement, range) {\n    // 行级代码块中 command + a，近对当前代码块进行全选\n    if (codeRenderElement.tagName === \"PRE\" && matchHotKey(\"⌘A\", event)) {\n        range.selectNodeContents(codeRenderElement.firstElementChild);\n        event.preventDefault();\n        return true;\n    }\n    // tab\n    // TODO shift + tab, shift and 选中文字\n    if (vditor.options.tab && event.key === \"Tab\" && !event.shiftKey && range.toString() === \"\") {\n        range.insertNode(document.createTextNode(vditor.options.tab));\n        range.collapse(false);\n        execAfterRender(vditor);\n        event.preventDefault();\n        return true;\n    }\n    // Backspace: 光标位于第零个字符，仅删除代码块标签\n    if (event.key === \"Backspace\" && !(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey) {\n        var codePosition = (0,selection/* getSelectPosition */.ED)(codeRenderElement, vditor[vditor.currentMode].element, range);\n        if ((codePosition.start === 0 ||\n            (codePosition.start === 1 && codeRenderElement.innerText === \"\\n\")) // 空代码块，光标在 \\n 后\n            && range.toString() === \"\") {\n            codeRenderElement.parentElement.outerHTML =\n                \"<p data-block=\\\"0\\\"><wbr>\".concat(codeRenderElement.firstElementChild.innerHTML, \"</p>\");\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n            execAfterRender(vditor);\n            event.preventDefault();\n            return true;\n        }\n    }\n    // 换行\n    if (!(0,compatibility/* isCtrl */._0)(event) && !event.altKey && event.key === \"Enter\") {\n        if (!codeRenderElement.firstElementChild.textContent.endsWith(\"\\n\")) {\n            codeRenderElement.firstElementChild.insertAdjacentText(\"beforeend\", \"\\n\");\n        }\n        range.extractContents();\n        range.insertNode(document.createTextNode(\"\\n\"));\n        range.collapse(false);\n        (0,selection/* setSelectionFocus */.jl)(range);\n        if (!(0,compatibility/* isFirefox */.gm)()) {\n            if (vditor.currentMode === \"wysiwyg\") {\n                input_input(vditor, range);\n            }\n            else {\n                input(vditor, range);\n            }\n        }\n        scrollCenter(vditor);\n        event.preventDefault();\n        return true;\n    }\n    return false;\n};\nvar fixBlockquote = function (vditor, range, event, pElement) {\n    var startContainer = range.startContainer;\n    var blockquoteElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"BLOCKQUOTE\");\n    if (blockquoteElement && range.toString() === \"\") {\n        if (event.key === \"Backspace\" && !(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey &&\n            (0,selection/* getSelectPosition */.ED)(blockquoteElement, vditor[vditor.currentMode].element, range).start === 0) {\n            // Backspace: 光标位于引用中的第零个字符，仅删除引用标签\n            range.insertNode(document.createElement(\"wbr\"));\n            blockquoteElement.outerHTML = blockquoteElement.innerHTML;\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n            execAfterRender(vditor);\n            event.preventDefault();\n            return true;\n        }\n        if (pElement && event.key === \"Enter\" && !(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey\n            && pElement.parentElement.tagName === \"BLOCKQUOTE\") {\n            // Enter: 空行回车应逐层跳出\n            var isEmpty = false;\n            if (pElement.innerHTML.replace(constants/* Constants */.Y.ZWSP, \"\") === \"\\n\" ||\n                pElement.innerHTML.replace(constants/* Constants */.Y.ZWSP, \"\") === \"\") {\n                // 空 P\n                isEmpty = true;\n                pElement.remove();\n            }\n            else if (pElement.innerHTML.endsWith(\"\\n\\n\") &&\n                (0,selection/* getSelectPosition */.ED)(pElement, vditor[vditor.currentMode].element, range).start ===\n                    pElement.textContent.length - 1) {\n                // 软换行\n                pElement.innerHTML = pElement.innerHTML.substr(0, pElement.innerHTML.length - 2);\n                isEmpty = true;\n            }\n            if (isEmpty) {\n                // 需添加零宽字符，否则的话无法记录 undo\n                blockquoteElement.insertAdjacentHTML(\"afterend\", \"<p data-block=\\\"0\\\">\".concat(constants/* Constants */.Y.ZWSP, \"<wbr>\\n</p>\"));\n                (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n                execAfterRender(vditor);\n                event.preventDefault();\n                return true;\n            }\n        }\n        var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(startContainer);\n        if (vditor.currentMode === \"wysiwyg\" && blockElement && matchHotKey(\"⇧⌘;\", event)) {\n            // 插入 blockquote\n            range.insertNode(document.createElement(\"wbr\"));\n            blockElement.outerHTML = \"<blockquote data-block=\\\"0\\\">\".concat(blockElement.outerHTML, \"</blockquote>\");\n            (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n            afterRenderEvent(vditor);\n            event.preventDefault();\n            return true;\n        }\n        if (insertAfterBlock(vditor, event, range, blockquoteElement, blockquoteElement)) {\n            return true;\n        }\n        if (insertBeforeBlock(vditor, event, range, blockquoteElement, blockquoteElement)) {\n            return true;\n        }\n    }\n    return false;\n};\nvar fixTask = function (vditor, range, event) {\n    var startContainer = range.startContainer;\n    var taskItemElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(startContainer, \"LI\");\n    if (taskItemElement && taskItemElement.classList.contains(\"vditor-task\")) {\n        if (matchHotKey(\"⇧⌘J\", event)) {\n            // ctrl + shift: toggle checked\n            var inputElement = taskItemElement.firstElementChild;\n            if (inputElement.checked) {\n                inputElement.removeAttribute(\"checked\");\n            }\n            else {\n                inputElement.setAttribute(\"checked\", \"checked\");\n            }\n            execAfterRender(vditor);\n            event.preventDefault();\n            return true;\n        }\n        // Backspace: 在选择框前进行删除\n        if (event.key === \"Backspace\" && !(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey && range.toString() === \"\"\n            && range.startOffset === 1\n            && ((startContainer.nodeType === 3 && startContainer.previousSibling &&\n                startContainer.previousSibling.tagName === \"INPUT\")\n                || startContainer.nodeType !== 3)) {\n            var previousElement = taskItemElement.previousElementSibling;\n            taskItemElement.querySelector(\"input\").remove();\n            if (previousElement) {\n                var lastNode = (0,hasClosest/* getLastNode */.Rp)(previousElement);\n                lastNode.parentElement.insertAdjacentHTML(\"beforeend\", \"<wbr>\" + taskItemElement.innerHTML.trim());\n                taskItemElement.remove();\n            }\n            else {\n                taskItemElement.parentElement.insertAdjacentHTML(\"beforebegin\", \"<p data-block=\\\"0\\\"><wbr>\".concat(taskItemElement.innerHTML.trim() || \"\\n\", \"</p>\"));\n                if (taskItemElement.nextElementSibling) {\n                    taskItemElement.remove();\n                }\n                else {\n                    taskItemElement.parentElement.remove();\n                }\n            }\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n            execAfterRender(vditor);\n            event.preventDefault();\n            return true;\n        }\n        if (event.key === \"Enter\" && !(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey) {\n            if (taskItemElement.textContent.trim() === \"\") {\n                // 当前任务列表无文字\n                if ((0,hasClosest/* hasClosestByClassName */.KJ)(taskItemElement.parentElement, \"vditor-task\")) {\n                    // 为子元素时，需进行反向缩进\n                    var topListElement = (0,hasClosest/* getTopList */.KR)(startContainer);\n                    if (topListElement) {\n                        listOutdent(vditor, taskItemElement, range, topListElement);\n                    }\n                }\n                else {\n                    // 仅有一级任务列表\n                    if (taskItemElement.nextElementSibling) {\n                        // 任务列表下方还有元素，需要使用用段落隔断\n                        var afterHTML_2 = \"\";\n                        var beforeHTML_1 = \"\";\n                        var isAfter_1 = false;\n                        Array.from(taskItemElement.parentElement.children).forEach(function (taskItem) {\n                            if (taskItemElement.isSameNode(taskItem)) {\n                                isAfter_1 = true;\n                            }\n                            else {\n                                if (isAfter_1) {\n                                    afterHTML_2 += taskItem.outerHTML;\n                                }\n                                else {\n                                    beforeHTML_1 += taskItem.outerHTML;\n                                }\n                            }\n                        });\n                        var parentTagName = taskItemElement.parentElement.tagName;\n                        var dataMarker = taskItemElement.parentElement.tagName === \"OL\" ? \"\" : \" data-marker=\\\"\".concat(taskItemElement.parentElement.getAttribute(\"data-marker\"), \"\\\"\");\n                        var startAttribute = \"\";\n                        if (beforeHTML_1) {\n                            startAttribute = taskItemElement.parentElement.tagName === \"UL\" ? \"\" : \" start=\\\"1\\\"\";\n                            beforeHTML_1 = \"<\".concat(parentTagName, \" data-tight=\\\"true\\\"\").concat(dataMarker, \" data-block=\\\"0\\\">\").concat(beforeHTML_1, \"</\").concat(parentTagName, \">\");\n                        }\n                        // <p data-block=\"0\">\\n<wbr></p> => <p data-block=\"0\"><wbr>\\n</p>\n                        // https://github.com/Vanessa219/vditor/issues/430\n                        taskItemElement.parentElement.outerHTML = \"\".concat(beforeHTML_1, \"<p data-block=\\\"0\\\"><wbr>\\n</p><\").concat(parentTagName, \"\\n data-tight=\\\"true\\\"\").concat(dataMarker, \" data-block=\\\"0\\\"\").concat(startAttribute, \">\").concat(afterHTML_2, \"</\").concat(parentTagName, \">\");\n                    }\n                    else {\n                        // 任务列表下方无任务列表元素\n                        taskItemElement.parentElement.insertAdjacentHTML(\"afterend\", \"<p data-block=\\\"0\\\"><wbr>\\n</p>\");\n                        if (taskItemElement.parentElement.querySelectorAll(\"li\").length === 1) {\n                            // 任务列表仅有一项时，使用 p 元素替换\n                            taskItemElement.parentElement.remove();\n                        }\n                        else {\n                            // 任务列表有多项时，当前任务列表位于最后一项，移除该任务列表\n                            taskItemElement.remove();\n                        }\n                    }\n                }\n            }\n            else if (startContainer.nodeType !== 3 && range.startOffset === 0 &&\n                startContainer.firstChild.tagName === \"INPUT\") {\n                // 光标位于 input 之前\n                range.setStart(startContainer.childNodes[1], 1);\n            }\n            else {\n                // 当前任务列表有文字，光标后的文字需添加到新任务列表中\n                range.setEndAfter(taskItemElement.lastChild);\n                taskItemElement.insertAdjacentHTML(\"afterend\", \"<li class=\\\"vditor-task\\\" data-marker=\\\"\".concat(taskItemElement.getAttribute(\"data-marker\"), \"\\\"><input type=\\\"checkbox\\\"> <wbr></li>\"));\n                document.querySelector(\"wbr\").after(range.extractContents());\n            }\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n            execAfterRender(vditor);\n            scrollCenter(vditor);\n            event.preventDefault();\n            return true;\n        }\n    }\n    return false;\n};\nvar fixDelete = function (vditor, range, event, pElement) {\n    if (range.startContainer.nodeType !== 3) {\n        // 光标位于 hr 前，hr 前有内容\n        var rangeElement = range.startContainer.children[range.startOffset];\n        if (rangeElement && rangeElement.tagName === \"HR\") {\n            range.selectNodeContents(rangeElement.previousElementSibling);\n            range.collapse(false);\n            event.preventDefault();\n            return true;\n        }\n    }\n    if (pElement) {\n        var previousElement = pElement.previousElementSibling;\n        if (previousElement && (0,selection/* getSelectPosition */.ED)(pElement, vditor[vditor.currentMode].element, range).start === 0 &&\n            (((0,compatibility/* isFirefox */.gm)() && previousElement.tagName === \"HR\") || previousElement.tagName === \"TABLE\")) {\n            if (previousElement.tagName === \"TABLE\") {\n                // table 后删除 https://github.com/Vanessa219/vditor/issues/243\n                var lastCellElement = previousElement.lastElementChild.lastElementChild.lastElementChild;\n                lastCellElement.innerHTML =\n                    lastCellElement.innerHTML.trimLeft() + \"<wbr>\" + pElement.textContent.trim();\n                pElement.remove();\n            }\n            else {\n                // 光标位于 hr 后进行删除\n                previousElement.remove();\n            }\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n            execAfterRender(vditor);\n            event.preventDefault();\n            return true;\n        }\n    }\n    return false;\n};\nvar fixHR = function (range) {\n    if ((0,compatibility/* isFirefox */.gm)() && range.startContainer.nodeType !== 3 &&\n        range.startContainer.tagName === \"HR\") {\n        range.setStartBefore(range.startContainer);\n    }\n};\n// firefox https://github.com/Vanessa219/vditor/issues/407\nvar fixFirefoxArrowUpTable = function (event, blockElement, range) {\n    var _a, _b;\n    if (!(0,compatibility/* isFirefox */.gm)()) {\n        return false;\n    }\n    if (event.key === \"ArrowUp\" && blockElement && ((_a = blockElement.previousElementSibling) === null || _a === void 0 ? void 0 : _a.tagName) === \"TABLE\") {\n        var tableElement = blockElement.previousElementSibling;\n        range.selectNodeContents(tableElement.rows[tableElement.rows.length - 1].lastElementChild);\n        range.collapse(false);\n        event.preventDefault();\n        return true;\n    }\n    if (event.key === \"ArrowDown\" && blockElement && ((_b = blockElement.nextElementSibling) === null || _b === void 0 ? void 0 : _b.tagName) === \"TABLE\") {\n        range.selectNodeContents(blockElement.nextElementSibling.rows[0].cells[0]);\n        range.collapse(true);\n        event.preventDefault();\n        return true;\n    }\n    return false;\n};\nvar paste = function (vditor, event, callback) { return fixBrowserBehavior_awaiter(void 0, void 0, void 0, function () {\n    var textHTML, textPlain, files, renderers, renderLinkDest, doc, height, code, codeElement, position, tempElement, fileReader_1, file_1, range, blockElement, range;\n    var _a;\n    return fixBrowserBehavior_generator(this, function (_b) {\n        switch (_b.label) {\n            case 0:\n                if (vditor[vditor.currentMode].element.getAttribute(\"contenteditable\") !== \"true\") {\n                    return [2 /*return*/];\n                }\n                event.stopPropagation();\n                event.preventDefault();\n                if (\"clipboardData\" in event) {\n                    textHTML = event.clipboardData.getData(\"text/html\");\n                    textPlain = event.clipboardData.getData(\"text/plain\");\n                    files = event.clipboardData.files;\n                }\n                else {\n                    textHTML = event.dataTransfer.getData(\"text/html\");\n                    textPlain = event.dataTransfer.getData(\"text/plain\");\n                    if (event.dataTransfer.types.includes(\"Files\")) {\n                        files = event.dataTransfer.items;\n                    }\n                }\n                renderers = {};\n                renderLinkDest = function (node, entering) {\n                    if (!entering) {\n                        return [\"\", Lute.WalkContinue];\n                    }\n                    if (vditor.options.upload.renderLinkDest) {\n                        return vditor.options.upload.renderLinkDest(vditor, node, entering);\n                    }\n                    var src = node.TokensStr();\n                    if (node.__internal_object__.Parent.Type === 34 && src && src.indexOf(\"file://\") === -1 &&\n                        vditor.options.upload.linkToImgUrl) {\n                        var xhr_1 = new XMLHttpRequest();\n                        xhr_1.open(\"POST\", vditor.options.upload.linkToImgUrl);\n                        if (vditor.options.upload.token) {\n                            xhr_1.setRequestHeader(\"X-Upload-Token\", vditor.options.upload.token);\n                        }\n                        if (vditor.options.upload.withCredentials) {\n                            xhr_1.withCredentials = true;\n                        }\n                        setHeaders(vditor, xhr_1);\n                        xhr_1.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\");\n                        xhr_1.onreadystatechange = function () {\n                            if (xhr_1.readyState === XMLHttpRequest.DONE) {\n                                if (xhr_1.status === 200) {\n                                    var responseText = xhr_1.responseText;\n                                    if (vditor.options.upload.linkToImgFormat) {\n                                        responseText = vditor.options.upload.linkToImgFormat(xhr_1.responseText);\n                                    }\n                                    var responseJSON_1 = JSON.parse(responseText);\n                                    if (responseJSON_1.code !== 0) {\n                                        vditor.tip.show(responseJSON_1.msg);\n                                        return;\n                                    }\n                                    var original_1 = responseJSON_1.data.originalURL;\n                                    if (vditor.currentMode === \"sv\") {\n                                        vditor.sv.element.querySelectorAll(\".vditor-sv__marker--link\")\n                                            .forEach(function (item) {\n                                            if (item.textContent === original_1) {\n                                                item.textContent = responseJSON_1.data.url;\n                                            }\n                                        });\n                                    }\n                                    else {\n                                        var imgElement = vditor[vditor.currentMode].element.querySelector(\"img[src=\\\"\".concat(original_1, \"\\\"]\"));\n                                        imgElement.src = responseJSON_1.data.url;\n                                        if (vditor.currentMode === \"ir\") {\n                                            imgElement.previousElementSibling.previousElementSibling.innerHTML =\n                                                responseJSON_1.data.url;\n                                        }\n                                    }\n                                    execAfterRender(vditor);\n                                }\n                                else {\n                                    vditor.tip.show(xhr_1.responseText);\n                                }\n                                if (vditor.options.upload.linkToImgCallback) {\n                                    vditor.options.upload.linkToImgCallback(xhr_1.responseText);\n                                }\n                            }\n                        };\n                        xhr_1.send(JSON.stringify({ url: src }));\n                    }\n                    if (vditor.currentMode === \"ir\") {\n                        return [\"<span class=\\\"vditor-ir__marker vditor-ir__marker--link\\\">\".concat(Lute.EscapeHTMLStr(src), \"</span>\"), Lute.WalkContinue];\n                    }\n                    else if (vditor.currentMode === \"wysiwyg\") {\n                        return [\"\", Lute.WalkContinue];\n                    }\n                    else {\n                        return [\"<span class=\\\"vditor-sv__marker--link\\\">\".concat(Lute.EscapeHTMLStr(src), \"</span>\"), Lute.WalkContinue];\n                    }\n                };\n                // 浏览器地址栏拷贝处理\n                if (textHTML.replace(/&amp;/g, \"&\").replace(/<(|\\/)(html|body|meta)[^>]*?>/ig, \"\").trim() ===\n                    \"<a href=\\\"\".concat(textPlain, \"\\\">\").concat(textPlain, \"</a>\") ||\n                    textHTML.replace(/&amp;/g, \"&\").replace(/<(|\\/)(html|body|meta)[^>]*?>/ig, \"\").trim() ===\n                        \"<!--StartFragment--><a href=\\\"\".concat(textPlain, \"\\\">\").concat(textPlain, \"</a><!--EndFragment-->\")) {\n                    textHTML = \"\";\n                }\n                doc = new DOMParser().parseFromString(textHTML, \"text/html\");\n                if (doc.body) {\n                    textHTML = doc.body.innerHTML;\n                }\n                textHTML = Lute.Sanitize(textHTML);\n                vditor.wysiwyg.getComments(vditor);\n                height = vditor[vditor.currentMode].element.scrollHeight;\n                code = processPasteCode(textHTML, textPlain, vditor.currentMode);\n                codeElement = vditor.currentMode === \"sv\" ?\n                    (0,hasClosest/* hasClosestByAttribute */.Th)(event.target, \"data-type\", \"code-block\") :\n                    (0,hasClosest/* hasClosestByMatchTag */._Y)(event.target, \"CODE\");\n                if (!codeElement) return [3 /*break*/, 1];\n                // 粘贴在代码位置\n                if (vditor.currentMode === \"sv\") {\n                    document.execCommand(\"insertHTML\", false, textPlain.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\"));\n                }\n                else {\n                    position = (0,selection/* getSelectPosition */.ED)(event.target, vditor[vditor.currentMode].element);\n                    if (codeElement.parentElement.tagName !== \"PRE\") {\n                        // https://github.com/Vanessa219/vditor/issues/463\n                        textPlain += constants/* Constants */.Y.ZWSP;\n                    }\n                    codeElement.textContent = codeElement.textContent.substring(0, position.start)\n                        + textPlain + codeElement.textContent.substring(position.end);\n                    (0,selection/* setSelectionByPosition */.Fm)(position.start + textPlain.length, position.start + textPlain.length, codeElement.parentElement);\n                    if ((_a = codeElement.parentElement) === null || _a === void 0 ? void 0 : _a.nextElementSibling.classList.contains(\"vditor-\".concat(vditor.currentMode, \"__preview\"))) {\n                        codeElement.parentElement.nextElementSibling.innerHTML = codeElement.outerHTML;\n                        processCodeRender(codeElement.parentElement.nextElementSibling, vditor);\n                    }\n                }\n                return [3 /*break*/, 8];\n            case 1:\n                if (!code) return [3 /*break*/, 2];\n                callback.pasteCode(code);\n                return [3 /*break*/, 8];\n            case 2:\n                if (!(textHTML.trim() !== \"\")) return [3 /*break*/, 3];\n                tempElement = document.createElement(\"div\");\n                tempElement.innerHTML = textHTML;\n                tempElement.querySelectorAll(\"[style]\").forEach(function (e) {\n                    e.removeAttribute(\"style\");\n                });\n                tempElement.querySelectorAll(\".vditor-copy\").forEach(function (e) {\n                    e.remove();\n                });\n                if (vditor.currentMode === \"ir\") {\n                    renderers.HTML2VditorIRDOM = { renderLinkDest: renderLinkDest };\n                    vditor.lute.SetJSRenderers({ renderers: renderers });\n                    (0,selection/* insertHTML */.Z2)(vditor.lute.HTML2VditorIRDOM(tempElement.innerHTML), vditor);\n                }\n                else if (vditor.currentMode === \"wysiwyg\") {\n                    renderers.HTML2VditorDOM = { renderLinkDest: renderLinkDest };\n                    vditor.lute.SetJSRenderers({ renderers: renderers });\n                    (0,selection/* insertHTML */.Z2)(vditor.lute.HTML2VditorDOM(tempElement.innerHTML), vditor);\n                }\n                else {\n                    renderers.Md2VditorSVDOM = { renderLinkDest: renderLinkDest };\n                    vditor.lute.SetJSRenderers({ renderers: renderers });\n                    processPaste(vditor, vditor.lute.HTML2Md(tempElement.innerHTML).trimRight());\n                }\n                vditor.outline.render(vditor);\n                return [3 /*break*/, 8];\n            case 3:\n                if (!(files.length > 0)) return [3 /*break*/, 7];\n                if (!(vditor.options.upload.url || vditor.options.upload.handler)) return [3 /*break*/, 5];\n                return [4 /*yield*/, uploadFiles(vditor, files)];\n            case 4:\n                _b.sent();\n                return [3 /*break*/, 6];\n            case 5:\n                fileReader_1 = new FileReader();\n                if (\"clipboardData\" in event) {\n                    files = event.clipboardData.files;\n                    file_1 = files[0];\n                }\n                else if (event.dataTransfer.types.includes(\"Files\")) {\n                    files = event.dataTransfer.items;\n                    file_1 = files[0].getAsFile();\n                }\n                if (file_1 && file_1.type.startsWith(\"image\")) {\n                    fileReader_1.readAsDataURL(file_1);\n                    fileReader_1.onload = function () {\n                        var imgHTML = '';\n                        if (vditor.currentMode === \"wysiwyg\") {\n                            imgHTML += \"<img alt=\\\"\".concat(file_1.name, \"\\\" src=\\\"\").concat(fileReader_1.result.toString(), \"\\\">\\n\");\n                        }\n                        else {\n                            imgHTML += \"![\".concat(file_1.name, \"](\").concat(fileReader_1.result.toString(), \")\\n\");\n                        }\n                        document.execCommand(\"insertHTML\", false, imgHTML);\n                    };\n                }\n                _b.label = 6;\n            case 6: return [3 /*break*/, 8];\n            case 7:\n                if (textPlain.trim() !== \"\" && files.length === 0) {\n                    range = (0,selection/* getEditorRange */.RN)(vditor);\n                    if (range.toString() !== \"\" && vditor.lute.IsValidLinkDest(textPlain)) {\n                        textPlain = \"[\".concat(range.toString(), \"](\").concat(textPlain, \")\");\n                    }\n                    if (vditor.currentMode === \"ir\") {\n                        renderers.Md2VditorIRDOM = { renderLinkDest: renderLinkDest };\n                        vditor.lute.SetJSRenderers({ renderers: renderers });\n                        (0,selection/* insertHTML */.Z2)(vditor.lute.Md2VditorIRDOM(textPlain), vditor);\n                    }\n                    else if (vditor.currentMode === \"wysiwyg\") {\n                        renderers.Md2VditorDOM = { renderLinkDest: renderLinkDest };\n                        vditor.lute.SetJSRenderers({ renderers: renderers });\n                        (0,selection/* insertHTML */.Z2)(vditor.lute.Md2VditorDOM(textPlain), vditor);\n                    }\n                    else {\n                        renderers.Md2VditorSVDOM = { renderLinkDest: renderLinkDest };\n                        vditor.lute.SetJSRenderers({ renderers: renderers });\n                        processPaste(vditor, textPlain);\n                    }\n                    vditor.outline.render(vditor);\n                }\n                _b.label = 8;\n            case 8:\n                if (vditor.currentMode !== \"sv\") {\n                    blockElement = (0,hasClosest/* hasClosestBlock */.pt)((0,selection/* getEditorRange */.RN)(vditor).startContainer);\n                    if (blockElement) {\n                        range = (0,selection/* getEditorRange */.RN)(vditor);\n                        vditor[vditor.currentMode].element.querySelectorAll(\"wbr\").forEach(function (wbr) {\n                            wbr.remove();\n                        });\n                        range.insertNode(document.createElement(\"wbr\"));\n                        if (vditor.currentMode === \"wysiwyg\") {\n                            blockElement.outerHTML = vditor.lute.SpinVditorDOM(blockElement.outerHTML);\n                        }\n                        else {\n                            blockElement.outerHTML = vditor.lute.SpinVditorIRDOM(blockElement.outerHTML);\n                        }\n                        (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, range);\n                    }\n                    vditor[vditor.currentMode].element.querySelectorAll(\".vditor-\".concat(vditor.currentMode, \"__preview[data-render='2']\"))\n                        .forEach(function (item) {\n                        processCodeRender(item, vditor);\n                    });\n                }\n                vditor.wysiwyg.triggerRemoveComment(vditor);\n                execAfterRender(vditor);\n                if (vditor[vditor.currentMode].element.scrollHeight - height >\n                    Math.min(vditor[vditor.currentMode].element.clientHeight, window.innerHeight) / 2) {\n                    scrollCenter(vditor);\n                }\n                return [2 /*return*/];\n        }\n    });\n}); };\nvar templateObject_1;\n\n;// ./src/ts/ir/process.ts\n\n\n\n\n\n\n\n\n\nvar processHint = function (vditor) {\n    var _a, _b;\n    vditor.hint.render(vditor);\n    var startContainer = (0,selection/* getEditorRange */.RN)(vditor).startContainer;\n    // 代码块语言提示\n    var preBeforeElement = (0,hasClosest/* hasClosestByAttribute */.Th)(startContainer, \"data-type\", \"code-block-info\");\n    if (preBeforeElement) {\n        if (preBeforeElement.textContent.replace(constants/* Constants */.Y.ZWSP, \"\") === \"\" && vditor.hint.recentLanguage) {\n            preBeforeElement.textContent = constants/* Constants */.Y.ZWSP + vditor.hint.recentLanguage;\n            var range = (0,selection/* getEditorRange */.RN)(vditor);\n            range.selectNodeContents(preBeforeElement);\n        }\n        else {\n            var matchLangData_1 = [];\n            var key_1 = preBeforeElement.textContent.substring(0, (0,selection/* getSelectPosition */.ED)(preBeforeElement, vditor.ir.element).start)\n                .replace(constants/* Constants */.Y.ZWSP, \"\");\n            (vditor.options.preview.hljs.langs || constants/* Constants */.Y.ALIAS_CODE_LANGUAGES.concat(((_b = (_a = window.hljs) === null || _a === void 0 ? void 0 : _a.listLanguages()) !== null && _b !== void 0 ? _b : []).sort())).forEach(function (keyName) {\n                if (keyName.indexOf(key_1.toLowerCase()) > -1) {\n                    matchLangData_1.push({\n                        html: keyName,\n                        value: keyName,\n                    });\n                }\n            });\n            vditor.hint.genHTML(matchLangData_1, key_1, vditor);\n        }\n    }\n};\nvar process_processAfterRender = function (vditor, options) {\n    if (options === void 0) { options = {\n        enableAddUndoStack: true,\n        enableHint: false,\n        enableInput: true,\n    }; }\n    if (options.enableHint) {\n        processHint(vditor);\n    }\n    clearTimeout(vditor.ir.processTimeoutId);\n    vditor.ir.processTimeoutId = window.setTimeout(function () {\n        if (vditor.ir.composingLock) {\n            return;\n        }\n        var text = getMarkdown(vditor);\n        if (typeof vditor.options.input === \"function\" && options.enableInput) {\n            vditor.options.input(text);\n        }\n        if (vditor.options.counter.enable) {\n            vditor.counter.render(vditor, text);\n        }\n        if (vditor.options.cache.enable && (0,compatibility/* accessLocalStorage */.D)()) {\n            localStorage.setItem(vditor.options.cache.id, text);\n            if (vditor.options.cache.after) {\n                vditor.options.cache.after(text);\n            }\n        }\n        if (vditor.devtools) {\n            vditor.devtools.renderEchart(vditor);\n        }\n        if (options.enableAddUndoStack) {\n            vditor.undo.addToUndoStack(vditor);\n        }\n    }, vditor.options.undoDelay);\n};\nvar process_processHeading = function (vditor, value) {\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    var headingElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer) || range.startContainer;\n    if (headingElement) {\n        var headingMarkerElement = headingElement.querySelector(\".vditor-ir__marker--heading\");\n        if (headingMarkerElement) {\n            headingMarkerElement.innerHTML = value;\n        }\n        else {\n            headingElement.insertAdjacentText(\"afterbegin\", value);\n            range.selectNodeContents(headingElement);\n            range.collapse(false);\n        }\n        input(vditor, range.cloneRange());\n        highlightToolbarIR(vditor);\n    }\n};\nvar removeInline = function (range, vditor, type) {\n    var inlineElement = (0,hasClosest/* hasClosestByAttribute */.Th)(range.startContainer, \"data-type\", type);\n    if (inlineElement) {\n        inlineElement.firstElementChild.remove();\n        inlineElement.lastElementChild.remove();\n        range.insertNode(document.createElement(\"wbr\"));\n        var tempElement = document.createElement(\"div\");\n        tempElement.innerHTML = vditor.lute.SpinVditorIRDOM(inlineElement.outerHTML);\n        inlineElement.outerHTML = tempElement.firstElementChild.innerHTML.trim();\n    }\n};\nvar process_processToolbar = function (vditor, actionBtn, prefix, suffix, options) {\n    var range = (0,selection/* getEditorRange */.RN)(vditor);\n    var commandName = actionBtn.getAttribute(\"data-type\");\n    var typeElement = range.startContainer;\n    if (typeElement.nodeType === 3) {\n        typeElement = typeElement.parentElement;\n    }\n    var useHighlight = true;\n    // 移除\n    if (actionBtn.classList.contains(\"vditor-menu--current\")) {\n        if (commandName === \"quote\") {\n            var quoteElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(typeElement, \"BLOCKQUOTE\");\n            if (quoteElement) {\n                range.insertNode(document.createElement(\"wbr\"));\n                quoteElement.outerHTML = quoteElement.innerHTML.trim() === \"\" ?\n                    \"<p data-block=\\\"0\\\">\".concat(quoteElement.innerHTML, \"</p>\") : quoteElement.innerHTML;\n            }\n        }\n        else if (commandName === \"link\") {\n            var aElement = (0,hasClosest/* hasClosestByAttribute */.Th)(range.startContainer, \"data-type\", \"a\");\n            if (aElement) {\n                var aTextElement = (0,hasClosest/* hasClosestByClassName */.KJ)(range.startContainer, \"vditor-ir__link\");\n                if (aTextElement) {\n                    range.insertNode(document.createElement(\"wbr\"));\n                    aElement.outerHTML = aTextElement.innerHTML;\n                }\n                else {\n                    aElement.outerHTML = aElement.querySelector(\".vditor-ir__link\").innerHTML + \"<wbr>\";\n                }\n            }\n        }\n        else if (commandName === \"italic\") {\n            removeInline(range, vditor, \"em\");\n        }\n        else if (commandName === \"bold\") {\n            removeInline(range, vditor, \"strong\");\n        }\n        else if (commandName === \"strike\") {\n            removeInline(range, vditor, \"s\");\n        }\n        else if (commandName === \"inline-code\") {\n            removeInline(range, vditor, \"code\");\n        }\n        else if (commandName === \"check\" || commandName === \"list\" || commandName === \"ordered-list\") {\n            listToggle(vditor, range, commandName);\n            useHighlight = false;\n            actionBtn.classList.remove(\"vditor-menu--current\");\n        }\n    }\n    else {\n        // 添加\n        if (vditor.ir.element.childNodes.length === 0) {\n            vditor.ir.element.innerHTML = '<p data-block=\"0\"><wbr></p>';\n            (0,selection/* setRangeByWbr */.ir)(vditor.ir.element, range);\n        }\n        var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);\n        if (commandName === \"line\") {\n            if (blockElement) {\n                var hrHTML = '<hr data-block=\"0\"><p data-block=\"0\"><wbr>\\n</p>';\n                if (blockElement.innerHTML.trim() === \"\") {\n                    blockElement.outerHTML = hrHTML;\n                }\n                else {\n                    blockElement.insertAdjacentHTML(\"afterend\", hrHTML);\n                }\n            }\n        }\n        else if (commandName === \"quote\") {\n            if (blockElement) {\n                range.insertNode(document.createElement(\"wbr\"));\n                blockElement.outerHTML = \"<blockquote data-block=\\\"0\\\">\".concat(blockElement.outerHTML, \"</blockquote>\");\n                useHighlight = false;\n                actionBtn.classList.add(\"vditor-menu--current\");\n            }\n        }\n        else if (commandName === \"link\") {\n            var html = void 0;\n            if (range.toString() === \"\") {\n                html = \"\".concat(prefix, \"<wbr>\").concat(suffix);\n            }\n            else {\n                html = \"\".concat(prefix).concat(range.toString()).concat(suffix.replace(\")\", \"<wbr>)\"));\n            }\n            document.execCommand(\"insertHTML\", false, html);\n            useHighlight = false;\n            actionBtn.classList.add(\"vditor-menu--current\");\n        }\n        else if (commandName === \"italic\" || commandName === \"bold\" || commandName === \"strike\"\n            || commandName === \"inline-code\" || commandName === \"code\" || commandName === \"table\") {\n            var html = void 0;\n            if (range.toString() === \"\") {\n                html = \"\".concat(prefix, \"<wbr>\").concat(suffix);\n            }\n            else {\n                if (commandName === \"code\") {\n                    html = \"\".concat(prefix, \"\\n\").concat(range.toString(), \"<wbr>\").concat(suffix);\n                }\n                else if (commandName === \"table\") {\n                    html = \"\".concat(prefix).concat(range.toString(), \"<wbr>\").concat(suffix);\n                }\n                else {\n                    html = \"\".concat(prefix).concat(range.toString()).concat(suffix, \"<wbr>\");\n                }\n                range.deleteContents();\n            }\n            if (commandName === \"table\" || commandName === \"code\") {\n                html = \"\\n\" + html + \"\\n\\n\";\n            }\n            console.log(html);\n            var spanElement = document.createElement(\"span\");\n            spanElement.innerHTML = html;\n            range.insertNode(spanElement);\n            input(vditor, range);\n            if (commandName === \"table\") {\n                range.selectNodeContents(getSelection().getRangeAt(0).startContainer.parentElement);\n                (0,selection/* setSelectionFocus */.jl)(range);\n            }\n        }\n        else if (['echarts', 'math', 'mermaid', 'mindmap', 'mermaid-sequence', 'mermaid-gantt'].includes(commandName)) {\n            prefix = '```' + options.type;\n            suffix = '\\n```';\n            var html = void 0;\n            if (range.toString() === \"\") {\n                html = \"\".concat(prefix, \"\\n\").concat(options.example, \"<wbr>\").concat(suffix);\n            }\n            else {\n                html = \"\".concat(prefix, \"\\n\").concat(range.toString(), \"<wbr>\").concat(suffix);\n                range.deleteContents();\n            }\n            html = \"\\n\" + html + \"\\n\\n\";\n            var spanElement = document.createElement(\"span\");\n            spanElement.innerHTML = html;\n            range.insertNode(spanElement);\n            input(vditor, range);\n        }\n        else if (commandName === \"check\" || commandName === \"list\" || commandName === \"ordered-list\") {\n            listToggle(vditor, range, commandName, false);\n            useHighlight = false;\n            removeCurrentToolbar(vditor.toolbar.elements, [\"check\", \"list\", \"ordered-list\"]);\n            actionBtn.classList.add(\"vditor-menu--current\");\n        }\n    }\n    (0,selection/* setRangeByWbr */.ir)(vditor.ir.element, range);\n    process_processAfterRender(vditor);\n    if (useHighlight) {\n        highlightToolbarIR(vditor);\n    }\n};\n\n;// ./src/ts/hint/index.ts\nvar hint_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar hint_generator = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n\n\n\n\n\n\n\n\nvar Hint = /** @class */ (function () {\n    function Hint(hintExtends) {\n        var _this = this;\n        this.splitChar = \"\";\n        this.lastIndex = -1;\n        this.fillEmoji = function (element, vditor) {\n            _this.element.style.display = \"none\";\n            var value = decodeURIComponent(element.getAttribute(\"data-value\"));\n            var range = window.getSelection().getRangeAt(0);\n            // 代码提示\n            if (vditor.currentMode === \"ir\") {\n                var preBeforeElement = (0,hasClosest/* hasClosestByAttribute */.Th)(range.startContainer, \"data-type\", \"code-block-info\");\n                if (preBeforeElement) {\n                    preBeforeElement.textContent = constants/* Constants */.Y.ZWSP + value.trimRight();\n                    range.selectNodeContents(preBeforeElement);\n                    range.collapse(false);\n                    process_processAfterRender(vditor);\n                    preBeforeElement.parentElement.querySelectorAll(\"code\").forEach(function (item) {\n                        item.className = \"language-\" + value.trimRight();\n                    });\n                    processCodeRender(preBeforeElement.parentElement.querySelector(\".vditor-ir__preview\"), vditor);\n                    _this.recentLanguage = value.trimRight();\n                    return;\n                }\n            }\n            if (vditor.currentMode === \"wysiwyg\" && range.startContainer.nodeType !== 3) {\n                var startContainer = range.startContainer;\n                var inputElement = void 0;\n                if (startContainer.classList.contains(\"vditor-input\")) {\n                    inputElement = startContainer;\n                }\n                else {\n                    inputElement = startContainer.firstElementChild;\n                }\n                if (inputElement && inputElement.classList.contains(\"vditor-input\")) {\n                    inputElement.value = value.trimRight();\n                    range.selectNodeContents(inputElement);\n                    range.collapse(false);\n                    // {detail: 1}用于标识这个自定义事件是在编程语言选择后触发的\n                    // 用于在鼠标选择语言后，自动聚焦到代码输入框\n                    inputElement.dispatchEvent(new CustomEvent(\"input\", { detail: 1 }));\n                    _this.recentLanguage = value.trimRight();\n                    return;\n                }\n            }\n            range.setStart(range.startContainer, _this.lastIndex);\n            range.deleteContents();\n            if (vditor.options.hint.parse) {\n                if (vditor.currentMode === \"sv\") {\n                    (0,selection/* insertHTML */.Z2)(vditor.lute.SpinVditorSVDOM(value), vditor);\n                }\n                else if (vditor.currentMode === \"wysiwyg\") {\n                    (0,selection/* insertHTML */.Z2)(vditor.lute.SpinVditorDOM(value), vditor);\n                }\n                else {\n                    (0,selection/* insertHTML */.Z2)(vditor.lute.SpinVditorIRDOM(value), vditor);\n                }\n            }\n            else {\n                (0,selection/* insertHTML */.Z2)(value, vditor);\n            }\n            if (_this.splitChar === \":\" && value.indexOf(\":\") > -1 && vditor.currentMode !== \"sv\") {\n                range.insertNode(document.createTextNode(\" \"));\n            }\n            range.collapse(false);\n            (0,selection/* setSelectionFocus */.jl)(range);\n            if (vditor.currentMode === \"wysiwyg\") {\n                var preElement = (0,hasClosest/* hasClosestByClassName */.KJ)(range.startContainer, \"vditor-wysiwyg__block\");\n                if (preElement && preElement.lastElementChild.classList.contains(\"vditor-wysiwyg__preview\")) {\n                    preElement.lastElementChild.innerHTML = preElement.firstElementChild.innerHTML;\n                    processCodeRender(preElement.lastElementChild, vditor);\n                }\n            }\n            else if (vditor.currentMode === \"ir\") {\n                var preElement = (0,hasClosest/* hasClosestByClassName */.KJ)(range.startContainer, \"vditor-ir__marker--pre\");\n                if (preElement && preElement.nextElementSibling.classList.contains(\"vditor-ir__preview\")) {\n                    preElement.nextElementSibling.innerHTML = preElement.innerHTML;\n                    processCodeRender(preElement.nextElementSibling, vditor);\n                }\n            }\n            execAfterRender(vditor);\n        };\n        this.timeId = -1;\n        this.element = document.createElement(\"div\");\n        this.element.className = \"vditor-hint\";\n        this.recentLanguage = \"\";\n        hintExtends.push({ key: \":\" });\n    }\n    Hint.prototype.render = function (vditor) {\n        var _this = this;\n        if (!window.getSelection().focusNode) {\n            return;\n        }\n        var currentLineValue;\n        var range = getSelection().getRangeAt(0);\n        currentLineValue = range.startContainer.textContent.substring(0, range.startOffset) || \"\";\n        var key = this.getKey(currentLineValue, vditor.options.hint.extend);\n        if (typeof key === \"undefined\") {\n            this.element.style.display = \"none\";\n            clearTimeout(this.timeId);\n        }\n        else {\n            if (this.splitChar === \":\") {\n                var emojiHint_1 = key === \"\" ? vditor.options.hint.emoji : vditor.lute.GetEmojis();\n                var matchEmojiData_1 = [];\n                Object.keys(emojiHint_1).forEach(function (keyName) {\n                    if (keyName.indexOf(key.toLowerCase()) === 0) {\n                        if (emojiHint_1[keyName].indexOf(\".\") > -1) {\n                            matchEmojiData_1.push({\n                                html: \"<img src=\\\"\".concat(emojiHint_1[keyName], \"\\\" title=\\\":\").concat(keyName, \":\\\"/> :\").concat(keyName, \":\"),\n                                value: \":\".concat(keyName, \":\"),\n                            });\n                        }\n                        else {\n                            matchEmojiData_1.push({\n                                html: \"<span class=\\\"vditor-hint__emoji\\\">\".concat(emojiHint_1[keyName], \"</span>\").concat(keyName),\n                                value: emojiHint_1[keyName],\n                            });\n                        }\n                    }\n                });\n                this.genHTML(matchEmojiData_1, key, vditor);\n            }\n            else {\n                vditor.options.hint.extend.forEach(function (item) {\n                    if (item.key === _this.splitChar) {\n                        clearTimeout(_this.timeId);\n                        _this.timeId = window.setTimeout(function () { return hint_awaiter(_this, void 0, void 0, function () {\n                            var _a;\n                            return hint_generator(this, function (_b) {\n                                switch (_b.label) {\n                                    case 0:\n                                        _a = this.genHTML;\n                                        return [4 /*yield*/, item.hint(key)];\n                                    case 1:\n                                        _a.apply(this, [_b.sent(), key, vditor]);\n                                        return [2 /*return*/];\n                                }\n                            });\n                        }); }, vditor.options.hint.delay);\n                    }\n                });\n            }\n        }\n    };\n    Hint.prototype.genHTML = function (data, key, vditor) {\n        var _this = this;\n        if (data.length === 0) {\n            this.element.style.display = \"none\";\n            return;\n        }\n        var editorElement = vditor[vditor.currentMode].element;\n        var textareaPosition = (0,selection/* getCursorPosition */.Ey)(editorElement);\n        var x = textareaPosition.left +\n            (vditor.options.outline.position === \"left\" ? vditor.outline.element.offsetWidth : 0);\n        var y = textareaPosition.top;\n        var hintsHTML = \"\";\n        data.forEach(function (hintData, i) {\n            if (i > 7) {\n                return;\n            }\n            // process high light\n            var html = hintData.html;\n            if (key !== \"\") {\n                var lastIndex = html.lastIndexOf(\">\") + 1;\n                var replaceHtml = html.substr(lastIndex);\n                var replaceIndex = replaceHtml.toLowerCase().indexOf(key.toLowerCase());\n                if (replaceIndex > -1) {\n                    replaceHtml = replaceHtml.substring(0, replaceIndex) + \"<b>\" +\n                        replaceHtml.substring(replaceIndex, replaceIndex + key.length) + \"</b>\" +\n                        replaceHtml.substring(replaceIndex + key.length);\n                    html = html.substr(0, lastIndex) + replaceHtml;\n                }\n            }\n            hintsHTML += \"<button type=\\\"button\\\" data-value=\\\"\".concat(encodeURIComponent(hintData.value), \" \\\"\\n\").concat(i === 0 ? \"class='vditor-hint--current'\" : \"\", \"> \").concat(html, \"</button>\");\n        });\n        this.element.innerHTML = hintsHTML;\n        var lineHeight = parseInt(document.defaultView.getComputedStyle(editorElement, null)\n            .getPropertyValue(\"line-height\"), 10);\n        this.element.style.top = \"\".concat(y + (lineHeight || 22), \"px\");\n        this.element.style.left = \"\".concat(x, \"px\");\n        this.element.style.display = \"block\";\n        this.element.style.right = \"auto\";\n        this.element.querySelectorAll(\"button\").forEach(function (element) {\n            element.addEventListener(\"click\", function (event) {\n                _this.fillEmoji(element, vditor);\n                event.preventDefault();\n            });\n        });\n        // hint 展现在上部\n        if (this.element.getBoundingClientRect().bottom > window.innerHeight) {\n            this.element.style.top = \"\".concat(y - this.element.offsetHeight, \"px\");\n        }\n        if (this.element.getBoundingClientRect().right > window.innerWidth) {\n            this.element.style.left = \"auto\";\n            this.element.style.right = \"0\";\n        }\n    };\n    Hint.prototype.select = function (event, vditor) {\n        if (this.element.querySelectorAll(\"button\").length === 0 ||\n            this.element.style.display === \"none\") {\n            return false;\n        }\n        var currentHintElement = this.element.querySelector(\".vditor-hint--current\");\n        if (event.key === \"ArrowDown\") {\n            event.preventDefault();\n            event.stopPropagation();\n            currentHintElement.removeAttribute(\"class\");\n            if (!currentHintElement.nextElementSibling) {\n                this.element.children[0].className = \"vditor-hint--current\";\n            }\n            else {\n                currentHintElement.nextElementSibling.className = \"vditor-hint--current\";\n            }\n            return true;\n        }\n        else if (event.key === \"ArrowUp\") {\n            event.preventDefault();\n            event.stopPropagation();\n            currentHintElement.removeAttribute(\"class\");\n            if (!currentHintElement.previousElementSibling) {\n                var length_1 = this.element.children.length;\n                this.element.children[length_1 - 1].className = \"vditor-hint--current\";\n            }\n            else {\n                currentHintElement.previousElementSibling.className = \"vditor-hint--current\";\n            }\n            return true;\n        }\n        else if (!(0,compatibility/* isCtrl */._0)(event) && !event.shiftKey && !event.altKey && event.key === \"Enter\" && !event.isComposing) {\n            event.preventDefault();\n            event.stopPropagation();\n            this.fillEmoji(currentHintElement, vditor);\n            return true;\n        }\n        return false;\n    };\n    Hint.prototype.getKey = function (currentLineValue, extend) {\n        var _this = this;\n        this.lastIndex = -1;\n        this.splitChar = \"\";\n        extend.forEach(function (item) {\n            var currentLastIndex = currentLineValue.lastIndexOf(item.key);\n            if (_this.lastIndex < currentLastIndex) {\n                _this.splitChar = item.key;\n                _this.lastIndex = currentLastIndex;\n            }\n        });\n        var key;\n        if (this.lastIndex === -1) {\n            return key;\n        }\n        var lineArray = currentLineValue.split(this.splitChar);\n        var lastItem = lineArray[lineArray.length - 1];\n        var maxLength = 32;\n        if (lineArray.length > 1 && lastItem.trim() === lastItem) {\n            if (lineArray.length === 2 && lineArray[0] === \"\" && lineArray[1].length < maxLength) {\n                key = lineArray[1];\n            }\n            else {\n                var preChar = lineArray[lineArray.length - 2].slice(-1);\n                if ((0,code160to32/* code160to32 */.p)(preChar) === \" \" && lastItem.length < maxLength) {\n                    key = lastItem;\n                }\n            }\n        }\n        return key;\n    };\n    return Hint;\n}());\n\n\n;// ./src/ts/ir/index.ts\n\n\n\n\n\n\n\n\n\n\n\n\nvar IR = /** @class */ (function () {\n    function IR(vditor) {\n        this.composingLock = false;\n        var divElement = document.createElement(\"div\");\n        divElement.className = \"vditor-ir\";\n        divElement.innerHTML = \"<pre class=\\\"vditor-reset\\\" placeholder=\\\"\".concat(vditor.options.placeholder, \"\\\"\\n contenteditable=\\\"true\\\" spellcheck=\\\"false\\\"></pre>\");\n        this.element = divElement.firstElementChild;\n        this.bindEvent(vditor);\n        focusEvent(vditor, this.element);\n        dblclickEvent(vditor, this.element);\n        blurEvent(vditor, this.element);\n        hotkeyEvent(vditor, this.element);\n        selectEvent(vditor, this.element);\n        dropEvent(vditor, this.element);\n        copyEvent(vditor, this.element, this.copy);\n        cutEvent(vditor, this.element, this.copy);\n    }\n    IR.prototype.copy = function (event, vditor) {\n        var range = getSelection().getRangeAt(0);\n        if (range.toString() === \"\") {\n            return;\n        }\n        event.stopPropagation();\n        event.preventDefault();\n        var tempElement = document.createElement(\"div\");\n        tempElement.appendChild(range.cloneContents());\n        event.clipboardData.setData(\"text/plain\", vditor.lute.VditorIRDOM2Md(tempElement.innerHTML).trim());\n        event.clipboardData.setData(\"text/html\", \"\");\n    };\n    IR.prototype.bindEvent = function (vditor) {\n        var _this = this;\n        this.element.addEventListener(\"paste\", function (event) {\n            paste(vditor, event, {\n                pasteCode: function (code) {\n                    document.execCommand(\"insertHTML\", false, code);\n                },\n            });\n        });\n        this.element.addEventListener(\"scroll\", function () {\n            hidePanel(vditor, [\"hint\"]);\n        });\n        this.element.addEventListener(\"compositionstart\", function (event) {\n            _this.composingLock = true;\n        });\n        this.element.addEventListener(\"compositionend\", function (event) {\n            if (!(0,compatibility/* isFirefox */.gm)()) {\n                input(vditor, getSelection().getRangeAt(0).cloneRange());\n            }\n            _this.composingLock = false;\n        });\n        this.element.addEventListener(\"input\", function (event) {\n            if (event.inputType === \"deleteByDrag\" || event.inputType === \"insertFromDrop\") {\n                // https://github.com/Vanessa219/vditor/issues/801 编辑器内容拖拽问题\n                return;\n            }\n            if (_this.preventInput) {\n                _this.preventInput = false;\n                process_processAfterRender(vditor, {\n                    enableAddUndoStack: true,\n                    enableHint: true,\n                    enableInput: true,\n                });\n                return;\n            }\n            if (_this.composingLock || event.data === \"‘\" || event.data === \"“\" || event.data === \"《\") {\n                return;\n            }\n            input(vditor, getSelection().getRangeAt(0).cloneRange(), false, event);\n        });\n        this.element.addEventListener(\"click\", function (event) {\n            if (event.target.tagName === \"INPUT\") {\n                if (event.target.checked) {\n                    event.target.setAttribute(\"checked\", \"checked\");\n                }\n                else {\n                    event.target.removeAttribute(\"checked\");\n                }\n                _this.preventInput = true;\n                process_processAfterRender(vditor);\n                return;\n            }\n            var range = (0,selection/* getEditorRange */.RN)(vditor);\n            // 点击后光标落于预览区\n            var previewElement = (0,hasClosest/* hasClosestByClassName */.KJ)(event.target, \"vditor-ir__preview\");\n            if (!previewElement) {\n                previewElement = (0,hasClosest/* hasClosestByClassName */.KJ)(range.startContainer, \"vditor-ir__preview\");\n            }\n            if (previewElement) {\n                if (previewElement.previousElementSibling.firstElementChild) {\n                    range.selectNodeContents(previewElement.previousElementSibling.firstElementChild);\n                }\n                else {\n                    // 行内数学公式\n                    range.selectNodeContents(previewElement.previousElementSibling);\n                }\n                range.collapse(true);\n                (0,selection/* setSelectionFocus */.jl)(range);\n                scrollCenter(vditor);\n            }\n            // 点击图片光标选中图片地址\n            if (event.target.tagName === \"IMG\") {\n                var linkElement = event.target.parentElement.querySelector(\".vditor-ir__marker--link\");\n                if (linkElement) {\n                    range.selectNode(linkElement);\n                    (0,selection/* setSelectionFocus */.jl)(range);\n                }\n            }\n            // 打开链接\n            var aElement = (0,hasClosest/* hasClosestByAttribute */.Th)(event.target, \"data-type\", \"a\");\n            if (aElement && (!aElement.classList.contains(\"vditor-ir__node--expand\"))) {\n                if (vditor.options.link.click) {\n                    vditor.options.link.click(aElement.querySelector(\":scope > .vditor-ir__marker--link\"));\n                }\n                else if (vditor.options.link.isOpen) {\n                    window.open(aElement.querySelector(\":scope > .vditor-ir__marker--link\").textContent);\n                }\n                return;\n            }\n            if (event.target.isEqualNode(_this.element) && _this.element.lastElementChild && range.collapsed) {\n                var lastRect = _this.element.lastElementChild.getBoundingClientRect();\n                if (event.y > lastRect.top + lastRect.height) {\n                    if (_this.element.lastElementChild.tagName === \"P\" &&\n                        _this.element.lastElementChild.textContent.trim().replace(constants/* Constants */.Y.ZWSP, \"\") === \"\") {\n                        range.selectNodeContents(_this.element.lastElementChild);\n                        range.collapse(false);\n                    }\n                    else {\n                        _this.element.insertAdjacentHTML(\"beforeend\", \"<p data-block=\\\"0\\\">\".concat(constants/* Constants */.Y.ZWSP, \"<wbr></p>\"));\n                        (0,selection/* setRangeByWbr */.ir)(_this.element, range);\n                    }\n                }\n            }\n            if (range.toString() === \"\") {\n                expandMarker(range, vditor);\n            }\n            else {\n                // https://github.com/Vanessa219/vditor/pull/681 当点击选中区域时 eventTarget 与 range 不一致，需延迟等待 range 发生变化\n                setTimeout(function () {\n                    expandMarker((0,selection/* getEditorRange */.RN)(vditor), vditor);\n                });\n            }\n            clickToc(event, vditor);\n            highlightToolbarIR(vditor);\n        });\n        this.element.addEventListener(\"keyup\", function (event) {\n            if (event.isComposing || (0,compatibility/* isCtrl */._0)(event)) {\n                return;\n            }\n            if (event.key === \"Enter\") {\n                scrollCenter(vditor);\n            }\n            highlightToolbarIR(vditor);\n            if ((event.key === \"Backspace\" || event.key === \"Delete\") &&\n                vditor.ir.element.innerHTML !== \"\" && vditor.ir.element.childNodes.length === 1 &&\n                vditor.ir.element.firstElementChild && vditor.ir.element.firstElementChild.tagName === \"P\"\n                && vditor.ir.element.firstElementChild.childElementCount === 0\n                && (vditor.ir.element.textContent === \"\" || vditor.ir.element.textContent === \"\\n\")) {\n                // 为空时显示 placeholder\n                vditor.ir.element.innerHTML = \"\";\n                return;\n            }\n            var range = (0,selection/* getEditorRange */.RN)(vditor);\n            if (event.key === \"Backspace\") {\n                // firefox headings https://github.com/Vanessa219/vditor/issues/211\n                if ((0,compatibility/* isFirefox */.gm)() && range.startContainer.textContent === \"\\n\" && range.startOffset === 1) {\n                    range.startContainer.textContent = \"\";\n                    expandMarker(range, vditor);\n                }\n                // 数学公式前是空块，空块前是 table，在空块前删除，数学公式会多一个 br\n                _this.element.querySelectorAll(\".language-math\").forEach(function (item) {\n                    var brElement = item.querySelector(\"br\");\n                    if (brElement) {\n                        brElement.remove();\n                    }\n                });\n            }\n            else if (event.key.indexOf(\"Arrow\") > -1) {\n                if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") {\n                    processHint(vditor);\n                }\n                expandMarker(range, vditor);\n            }\n            else if (event.keyCode === 229 && event.code === \"\" && event.key === \"Unidentified\") {\n                // https://github.com/Vanessa219/vditor/issues/508 IR 删除到节点需展开\n                expandMarker(range, vditor);\n            }\n            var previewRenderElement = (0,hasClosest/* hasClosestByClassName */.KJ)(range.startContainer, \"vditor-ir__preview\");\n            if (previewRenderElement) {\n                if (event.key === \"ArrowUp\" || event.key === \"ArrowLeft\") {\n                    if (previewRenderElement.previousElementSibling.firstElementChild) {\n                        range.selectNodeContents(previewRenderElement.previousElementSibling.firstElementChild);\n                    }\n                    else {\n                        // 行内数学公式/html entity\n                        range.selectNodeContents(previewRenderElement.previousElementSibling);\n                    }\n                    range.collapse(false);\n                    event.preventDefault();\n                    return true;\n                }\n                if (previewRenderElement.tagName === \"SPAN\" &&\n                    (event.key === \"ArrowDown\" || event.key === \"ArrowRight\")) {\n                    if (previewRenderElement.parentElement.getAttribute(\"data-type\") === \"html-entity\") {\n                        // html entity\n                        previewRenderElement.parentElement.insertAdjacentText(\"afterend\", constants/* Constants */.Y.ZWSP);\n                        range.setStart(previewRenderElement.parentElement.nextSibling, 1);\n                    }\n                    else {\n                        range.selectNodeContents(previewRenderElement.parentElement.lastElementChild);\n                    }\n                    range.collapse(false);\n                    event.preventDefault();\n                    return true;\n                }\n            }\n        });\n    };\n    return IR;\n}());\n\n\n;// ./src/ts/markdown/getHTML.ts\n\nvar getHTML = function (vditor) {\n    if (vditor.currentMode === \"sv\") {\n        return vditor.lute.Md2HTML(getMarkdown(vditor));\n    }\n    else if (vditor.currentMode === \"wysiwyg\") {\n        return vditor.lute.VditorDOM2HTML(vditor.wysiwyg.element.innerHTML);\n    }\n    else if (vditor.currentMode === \"ir\") {\n        return vditor.lute.VditorIRDOM2HTML(vditor.ir.element.innerHTML);\n    }\n};\n\n// EXTERNAL MODULE: ./src/ts/markdown/setLute.ts\nvar setLute = __webpack_require__(329);\n// EXTERNAL MODULE: ./src/ts/markdown/outlineRender.ts\nvar outlineRender = __webpack_require__(691);\n;// ./src/ts/outline/index.ts\n\n\n\n\nvar Outline = /** @class */ (function () {\n    function Outline(outlineLabel) {\n        this.element = document.createElement(\"div\");\n        this.element.className = \"vditor-outline\";\n        this.element.innerHTML = \"<div class=\\\"vditor-outline__title\\\">\".concat(outlineLabel, \"</div>\\n<div class=\\\"vditor-outline__content\\\"></div>\");\n    }\n    Outline.prototype.render = function (vditor) {\n        var html = \"\";\n        if (vditor.preview.element.style.display === \"block\") {\n            html = (0,outlineRender/* outlineRender */.N)(vditor.preview.previewElement, this.element.lastElementChild, vditor);\n        }\n        else {\n            html = (0,outlineRender/* outlineRender */.N)(vditor[vditor.currentMode].element, this.element.lastElementChild, vditor);\n        }\n        return html;\n    };\n    Outline.prototype.toggle = function (vditor, show, focus) {\n        var _a;\n        if (show === void 0) { show = true; }\n        if (focus === void 0) { focus = true; }\n        var btnElement = (_a = vditor.toolbar.elements.outline) === null || _a === void 0 ? void 0 : _a.firstElementChild;\n        if (show && window.innerWidth >= constants/* Constants */.Y.MOBILE_WIDTH) {\n            this.element.style.display = \"block\";\n            this.render(vditor);\n            btnElement === null || btnElement === void 0 ? void 0 : btnElement.classList.add(\"vditor-menu--current\");\n        }\n        else {\n            this.element.style.display = \"none\";\n            btnElement === null || btnElement === void 0 ? void 0 : btnElement.classList.remove(\"vditor-menu--current\");\n        }\n        if (focus && getSelection().rangeCount > 0) {\n            var range = getSelection().getRangeAt(0);\n            if (vditor[vditor.currentMode].element.contains(range.startContainer)) {\n                (0,selection/* setSelectionFocus */.jl)(range);\n            }\n        }\n        setPadding(vditor);\n    };\n    return Outline;\n}());\n\n\n// EXTERNAL MODULE: ./src/ts/markdown/mediaRender.ts\nvar mediaRender = __webpack_require__(13);\n;// ./src/ts/preview/index.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Preview = /** @class */ (function () {\n    function Preview(vditor) {\n        var _this = this;\n        this.element = document.createElement(\"div\");\n        this.element.className = \"vditor-preview\";\n        this.previewElement = document.createElement(\"div\");\n        this.previewElement.className = \"vditor-reset\";\n        if (vditor.options.classes.preview) {\n            this.previewElement.classList.add(vditor.options.classes.preview);\n        }\n        this.previewElement.style.maxWidth = vditor.options.preview.maxWidth + \"px\";\n        this.previewElement.addEventListener(\"copy\", function (event) {\n            if (event.target.tagName === \"TEXTAREA\") {\n                // https://github.com/Vanessa219/vditor/issues/901\n                return;\n            }\n            var tempElement = document.createElement(\"div\");\n            tempElement.className = \"vditor-reset\";\n            tempElement.appendChild(getSelection().getRangeAt(0).cloneContents());\n            _this.copyToX(vditor, tempElement, \"default\");\n            event.preventDefault();\n        });\n        this.previewElement.addEventListener(\"click\", function (event) {\n            var spanElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(event.target, \"SPAN\");\n            if (spanElement && (0,hasClosest/* hasClosestByClassName */.KJ)(spanElement, \"vditor-toc\")) {\n                var headingElement = _this.previewElement.querySelector(\"#\" + spanElement.getAttribute(\"data-target-id\"));\n                if (headingElement) {\n                    _this.element.scrollTop = headingElement.offsetTop;\n                }\n                return;\n            }\n            if (event.target.tagName === \"A\") {\n                if (vditor.options.link.click) {\n                    vditor.options.link.click(event.target);\n                }\n                else if (vditor.options.link.isOpen) {\n                    window.open(event.target.getAttribute(\"href\"));\n                }\n                event.preventDefault();\n                return;\n            }\n            if (event.target.tagName === \"IMG\") {\n                if (vditor.options.image.preview) {\n                    vditor.options.image.preview(event.target);\n                }\n                else if (vditor.options.image.isPreview) {\n                    (0,preview_image/* previewImage */.o)(event.target, vditor.options.lang, vditor.options.theme);\n                }\n            }\n        });\n        this.element.appendChild(this.previewElement);\n        var actions = vditor.options.preview.actions;\n        if (actions.length === 0) {\n            return;\n        }\n        var actionElement = document.createElement(\"div\");\n        actionElement.className = \"vditor-preview__action\";\n        var actionHtml = [];\n        for (var i = 0; i < actions.length; i++) {\n            var action = actions[i];\n            if (typeof action === \"object\") {\n                actionHtml.push(\"<button type=\\\"button\\\" data-type=\\\"\".concat(action.key, \"\\\" class=\\\"\").concat(action.className, \"\\\"\").concat(action.tooltip ? \" aria-label=\\\"\".concat(action.tooltip, \"\\\"\") : \"\", \"\\\">\").concat(action.text, \"</button>\"));\n                continue;\n            }\n            switch (action) {\n                case \"desktop\":\n                    actionHtml.push(\"<button type=\\\"button\\\" class=\\\"vditor-preview__action--current\\\" data-type=\\\"desktop\\\">Desktop</button>\");\n                    break;\n                case \"tablet\":\n                    actionHtml.push(\"<button type=\\\"button\\\" data-type=\\\"tablet\\\">Tablet</button>\");\n                    break;\n                case \"mobile\":\n                    actionHtml.push(\"<button type=\\\"button\\\" data-type=\\\"mobile\\\">Mobile/Wechat</button>\");\n                    break;\n                case \"mp-wechat\":\n                    actionHtml.push(\"<button type=\\\"button\\\" data-type=\\\"mp-wechat\\\" class=\\\"vditor-tooltipped vditor-tooltipped__w\\\" aria-label=\\\"\\u590D\\u5236\\u5230\\u516C\\u4F17\\u53F7\\\"><svg><use xlink:href=\\\"#vditor-icon-mp-wechat\\\"></use></svg></button>\");\n                    break;\n                case \"zhihu\":\n                    actionHtml.push(\"<button type=\\\"button\\\" data-type=\\\"zhihu\\\" class=\\\"vditor-tooltipped vditor-tooltipped__w\\\" aria-label=\\\"\\u590D\\u5236\\u5230\\u77E5\\u4E4E\\\"><svg><use xlink:href=\\\"#vditor-icon-zhihu\\\"></use></svg></button>\");\n                    break;\n            }\n        }\n        actionElement.innerHTML = actionHtml.join(\"\");\n        actionElement.addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            var btn = (0,hasClosestByHeadings/* hasClosestByTag */.f)(event.target, \"BUTTON\");\n            if (!btn) {\n                return;\n            }\n            var type = btn.getAttribute(\"data-type\");\n            var actionCustom = actions.find(function (w) { return (w === null || w === void 0 ? void 0 : w.key) === type; });\n            if (actionCustom) {\n                actionCustom.click(type);\n                return;\n            }\n            if (type === \"mp-wechat\" || type === \"zhihu\") {\n                _this.copyToX(vditor, _this.previewElement.cloneNode(true), type);\n                return;\n            }\n            if (type === \"desktop\") {\n                _this.previewElement.style.width = \"auto\";\n            }\n            else if (type === \"tablet\") {\n                _this.previewElement.style.width = \"780px\";\n            }\n            else {\n                _this.previewElement.style.width = \"360px\";\n            }\n            if (_this.previewElement.scrollWidth > _this.previewElement.parentElement.clientWidth) {\n                _this.previewElement.style.width = \"auto\";\n            }\n            _this.render(vditor);\n            actionElement.querySelectorAll(\"button\").forEach(function (item) {\n                item.classList.remove(\"vditor-preview__action--current\");\n            });\n            btn.classList.add(\"vditor-preview__action--current\");\n        });\n        this.element.insertBefore(actionElement, this.previewElement);\n    }\n    Preview.prototype.render = function (vditor, value) {\n        var _this = this;\n        clearTimeout(this.mdTimeoutId);\n        if (this.element.style.display === \"none\") {\n            if (this.element.getAttribute(\"data-type\") === \"renderPerformance\") {\n                vditor.tip.hide();\n            }\n            return;\n        }\n        if (value) {\n            this.previewElement.innerHTML = value;\n            return;\n        }\n        if (getMarkdown(vditor)\n            .replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\") === \"\") {\n            this.previewElement.innerHTML = \"\";\n            return;\n        }\n        var renderStartTime = new Date().getTime();\n        var markdownText = getMarkdown(vditor);\n        this.mdTimeoutId = window.setTimeout(function () {\n            if (vditor.options.preview.url) {\n                var xhr_1 = new XMLHttpRequest();\n                xhr_1.open(\"POST\", vditor.options.preview.url);\n                xhr_1.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\n                xhr_1.onreadystatechange = function () {\n                    if (xhr_1.readyState === XMLHttpRequest.DONE) {\n                        if (xhr_1.status === 200) {\n                            var responseJSON = JSON.parse(xhr_1.responseText);\n                            if (responseJSON.code !== 0) {\n                                vditor.tip.show(responseJSON.msg);\n                                return;\n                            }\n                            if (vditor.options.preview.transform) {\n                                responseJSON.data = vditor.options.preview.transform(responseJSON.data);\n                            }\n                            _this.previewElement.innerHTML = responseJSON.data;\n                            _this.afterRender(vditor, renderStartTime);\n                        }\n                        else {\n                            var html = vditor.lute.Md2HTML(markdownText);\n                            if (vditor.options.preview.transform) {\n                                html = vditor.options.preview.transform(html);\n                            }\n                            _this.previewElement.innerHTML = html;\n                            _this.afterRender(vditor, renderStartTime);\n                        }\n                    }\n                };\n                xhr_1.send(JSON.stringify({ markdownText: markdownText }));\n            }\n            else {\n                var html = vditor.lute.Md2HTML(markdownText);\n                if (vditor.options.preview.transform) {\n                    html = vditor.options.preview.transform(html);\n                }\n                _this.previewElement.innerHTML = html;\n                _this.afterRender(vditor, renderStartTime);\n            }\n        }, vditor.options.preview.delay);\n    };\n    Preview.prototype.afterRender = function (vditor, startTime) {\n        if (vditor.options.preview.parse) {\n            vditor.options.preview.parse(this.element);\n        }\n        var time = (new Date().getTime() - startTime);\n        if ((new Date().getTime() - startTime) > 2600) {\n            // https://github.com/b3log/vditor/issues/67\n            vditor.tip.show(window.VditorI18n.performanceTip.replace(\"${x}\", time.toString()));\n            vditor.preview.element.setAttribute(\"data-type\", \"renderPerformance\");\n        }\n        else if (vditor.preview.element.getAttribute(\"data-type\") === \"renderPerformance\") {\n            vditor.tip.hide();\n            vditor.preview.element.removeAttribute(\"data-type\");\n        }\n        var cmtFocusElement = vditor.preview.element.querySelector(\".vditor-comment--focus\");\n        if (cmtFocusElement) {\n            cmtFocusElement.classList.remove(\"vditor-comment--focus\");\n        }\n        (0,codeRender/* codeRender */.o)(vditor.preview.previewElement, vditor.options.preview.hljs);\n        (0,highlightRender/* highlightRender */.$)(vditor.options.preview.hljs, vditor.preview.previewElement, vditor.options.cdn);\n        (0,mermaidRender/* mermaidRender */.e)(vditor.preview.previewElement, vditor.options.cdn, vditor.options.theme);\n        (0,markmapRender/* markmapRender */.K)(vditor.preview.previewElement, vditor.options.cdn);\n        (0,SMILESRender/* SMILESRender */.Y)(vditor.preview.previewElement, vditor.options.cdn, vditor.options.theme);\n        (0,flowchartRender/* flowchartRender */.D)(vditor.preview.previewElement, vditor.options.cdn);\n        (0,graphvizRender/* graphvizRender */.m)(vditor.preview.previewElement, vditor.options.cdn);\n        (0,chartRender/* chartRender */.v)(vditor.preview.previewElement, vditor.options.cdn, vditor.options.theme);\n        (0,mindmapRender/* mindmapRender */.l)(vditor.preview.previewElement, vditor.options.cdn, vditor.options.theme);\n        (0,plantumlRender/* plantumlRender */.M)(vditor.preview.previewElement, vditor.options.cdn);\n        (0,abcRender/* abcRender */.$)(vditor.preview.previewElement, vditor.options.cdn);\n        if (vditor.options.preview.render.media.enable) {\n            (0,mediaRender/* mediaRender */.l)(vditor.preview.previewElement);\n        }\n        vditor.options.customRenders.forEach(function (item) {\n            item.render(vditor.preview.previewElement, vditor);\n        });\n        // toc render\n        var editorElement = vditor.preview.element;\n        var tocHTML = vditor.outline.render(vditor);\n        if (tocHTML === \"\") {\n            tocHTML = \"[ToC]\";\n        }\n        editorElement.querySelectorAll('[data-type=\"toc-block\"]').forEach(function (item) {\n            item.innerHTML = tocHTML;\n            (0,mathRender/* mathRender */.T)(item, {\n                cdn: vditor.options.cdn,\n                math: vditor.options.preview.math,\n            });\n        });\n        (0,mathRender/* mathRender */.T)(vditor.preview.previewElement, {\n            cdn: vditor.options.cdn,\n            math: vditor.options.preview.math,\n        });\n    };\n    Preview.prototype.copyToX = function (vditor, copyElement, type) {\n        if (type === void 0) { type = \"mp-wechat\"; }\n        // fix math render\n        if (type !== \"zhihu\") {\n            copyElement.querySelectorAll(\".katex-html .base\").forEach(function (item) {\n                item.style.display = \"initial\";\n            });\n        }\n        else {\n            copyElement.querySelectorAll(\".language-math\").forEach(function (item) {\n                item.outerHTML = \"<img class=\\\"Formula-image\\\" data-eeimg=\\\"true\\\" src=\\\"//www.zhihu.com/equation?tex=\\\" alt=\\\"\".concat(item.getAttribute(\"data-math\"), \"\\\\\\\" style=\\\"display: block; margin: 0 auto; max-width: 100%;\\\">\");\n            });\n        }\n        // 防止背景色被粘贴到公众号中\n        copyElement.style.backgroundColor = \"#fff\";\n        // 代码背景\n        copyElement.querySelectorAll(\"code\").forEach(function (item) {\n            item.style.backgroundImage = \"none\";\n        });\n        this.element.append(copyElement);\n        var range = copyElement.ownerDocument.createRange();\n        range.selectNode(copyElement);\n        (0,selection/* setSelectionFocus */.jl)(range);\n        document.execCommand(\"copy\");\n        copyElement.remove();\n        vditor.tip.show(['zhihu', 'mp-wechat'].includes(type) ? \"\\u5DF2\\u590D\\u5236\\uFF0C\\u53EF\\u5230\".concat(type === \"zhihu\" ? \"知乎\" : \"微信公众号平台\", \"\\u8FDB\\u884C\\u7C98\\u8D34\") : \"\\u5DF2\\u590D\\u5236\\u5230\\u526A\\u5207\\u677F\");\n    };\n    return Preview;\n}());\n\n\n;// ./src/ts/resize/index.ts\nvar Resize = /** @class */ (function () {\n    function Resize(vditor) {\n        this.element = document.createElement(\"div\");\n        this.element.className = \"vditor-resize vditor-resize--\".concat(vditor.options.resize.position);\n        this.element.innerHTML = \"<div><svg><use xlink:href=\\\"#vditor-icon-resize\\\"></use></svg></div>\";\n        this.bindEvent(vditor);\n    }\n    Resize.prototype.bindEvent = function (vditor) {\n        var _this = this;\n        this.element.addEventListener(\"mousedown\", function (event) {\n            var documentSelf = document;\n            var y = event.clientY;\n            var height = vditor.element.offsetHeight;\n            var minHeight = 63 + vditor.element.querySelector(\".vditor-toolbar\").clientHeight;\n            documentSelf.ondragstart = function () { return false; };\n            if (window.captureEvents) {\n                window.captureEvents();\n            }\n            _this.element.classList.add(\"vditor-resize--selected\");\n            documentSelf.onmousemove = function (moveEvent) {\n                if (vditor.options.resize.position === \"top\") {\n                    vditor.element.style.height = Math.max(minHeight, height + (y - moveEvent.clientY)) + \"px\";\n                }\n                else {\n                    vditor.element.style.height = Math.max(minHeight, height + (moveEvent.clientY - y)) + \"px\";\n                }\n                if (vditor.options.typewriterMode) {\n                    vditor.sv.element.style.paddingBottom =\n                        vditor.sv.element.parentElement.offsetHeight / 2 + \"px\";\n                }\n            };\n            documentSelf.onmouseup = function () {\n                if (vditor.options.resize.after) {\n                    vditor.options.resize.after(vditor.element.offsetHeight - height);\n                }\n                if (window.captureEvents) {\n                    window.captureEvents();\n                }\n                documentSelf.onmousemove = null;\n                documentSelf.onmouseup = null;\n                documentSelf.ondragstart = null;\n                documentSelf.onselectstart = null;\n                documentSelf.onselect = null;\n                _this.element.classList.remove(\"vditor-resize--selected\");\n            };\n        });\n    };\n    return Resize;\n}());\n\n\n;// ./src/ts/sv/index.ts\n\n\n\n\n\n\nvar Editor = /** @class */ (function () {\n    function Editor(vditor) {\n        this.composingLock = false;\n        this.element = document.createElement(\"pre\");\n        this.element.className = \"vditor-sv vditor-reset\";\n        this.element.setAttribute(\"placeholder\", vditor.options.placeholder);\n        this.element.setAttribute(\"contenteditable\", \"true\");\n        this.element.setAttribute(\"spellcheck\", \"false\");\n        this.bindEvent(vditor);\n        focusEvent(vditor, this.element);\n        blurEvent(vditor, this.element);\n        hotkeyEvent(vditor, this.element);\n        selectEvent(vditor, this.element);\n        dropEvent(vditor, this.element);\n        copyEvent(vditor, this.element, this.copy);\n        cutEvent(vditor, this.element, this.copy);\n    }\n    Editor.prototype.copy = function (event, vditor) {\n        event.stopPropagation();\n        event.preventDefault();\n        event.clipboardData.setData(\"text/plain\", getSelectText(vditor[vditor.currentMode].element));\n    };\n    Editor.prototype.bindEvent = function (vditor) {\n        var _this = this;\n        this.element.addEventListener(\"paste\", function (event) {\n            paste(vditor, event, {\n                pasteCode: function (code) {\n                    document.execCommand(\"insertHTML\", false, code);\n                },\n            });\n        });\n        this.element.addEventListener(\"scroll\", function () {\n            if (vditor.preview.element.style.display !== \"block\") {\n                return;\n            }\n            var textScrollTop = _this.element.scrollTop;\n            var textHeight = _this.element.clientHeight;\n            var textScrollHeight = _this.element.scrollHeight - parseFloat(_this.element.style.paddingBottom || \"0\");\n            var preview = vditor.preview.element;\n            if ((textScrollTop / textHeight > 0.5)) {\n                preview.scrollTop = (textScrollTop + textHeight) *\n                    preview.scrollHeight / textScrollHeight - textHeight;\n            }\n            else {\n                preview.scrollTop = textScrollTop *\n                    preview.scrollHeight / textScrollHeight;\n            }\n        });\n        this.element.addEventListener(\"compositionstart\", function (event) {\n            _this.composingLock = true;\n        });\n        this.element.addEventListener(\"compositionend\", function (event) {\n            if (!(0,compatibility/* isFirefox */.gm)()) {\n                inputEvent(vditor, event);\n            }\n            _this.composingLock = false;\n        });\n        this.element.addEventListener(\"input\", function (event) {\n            if (event.inputType === \"deleteByDrag\" || event.inputType === \"insertFromDrop\") {\n                // https://github.com/Vanessa219/vditor/issues/801 编辑器内容拖拽问题\n                return;\n            }\n            if (_this.composingLock || event.data === \"‘\" || event.data === \"“\" || event.data === \"《\") {\n                return;\n            }\n            if (_this.preventInput) {\n                _this.preventInput = false;\n                processAfterRender(vditor, {\n                    enableAddUndoStack: true,\n                    enableHint: true,\n                    enableInput: true,\n                });\n                return;\n            }\n            inputEvent(vditor, event);\n        });\n        this.element.addEventListener(\"keyup\", function (event) {\n            if (event.isComposing || (0,compatibility/* isCtrl */._0)(event)) {\n                return;\n            }\n            if ((event.key === \"Backspace\" || event.key === \"Delete\") &&\n                vditor.sv.element.innerHTML !== \"\" && vditor.sv.element.childNodes.length === 1 &&\n                vditor.sv.element.firstElementChild && vditor.sv.element.firstElementChild.tagName === \"DIV\"\n                && vditor.sv.element.firstElementChild.childElementCount === 2\n                && (vditor.sv.element.firstElementChild.textContent === \"\" || vditor.sv.element.textContent === \"\\n\")) {\n                // 为空时显示 placeholder\n                vditor.sv.element.innerHTML = \"\";\n                return;\n            }\n            if (event.key === \"Enter\") {\n                scrollCenter(vditor);\n            }\n        });\n    };\n    return Editor;\n}());\n\n\n;// ./src/ts/tip/index.ts\nvar Tip = /** @class */ (function () {\n    function Tip() {\n        this.element = document.createElement(\"div\");\n        this.element.className = \"vditor-tip\";\n    }\n    Tip.prototype.show = function (text, time) {\n        var _this = this;\n        if (time === void 0) { time = 6000; }\n        this.element.className = \"vditor-tip vditor-tip--show\";\n        if (time === 0) {\n            this.element.innerHTML = \"<div class=\\\"vditor-tip__content\\\">\".concat(text, \"\\n<div class=\\\"vditor-tip__close\\\">X</div></div>\");\n            this.element.querySelector(\".vditor-tip__close\").addEventListener(\"click\", function () {\n                _this.hide();\n            });\n        }\n        else {\n            this.element.innerHTML = \"<div class=\\\"vditor-tip__content\\\">\".concat(text, \"</div>\");\n            setTimeout(function () {\n                _this.hide();\n            }, time);\n        }\n        // 需在动画结束后才能确定位置\n        this.element.removeAttribute(\"style\");\n        setTimeout(function () {\n            var rect = _this.element.getBoundingClientRect();\n            if (rect.top < 46) {\n                _this.element.style.position = \"fixed\";\n                _this.element.style.top = \"46px\";\n            }\n        }, 150);\n    };\n    Tip.prototype.hide = function () {\n        this.element.className = \"vditor-messageElementtip\";\n        this.element.innerHTML = \"\";\n    };\n    return Tip;\n}());\n\n\n;// ./src/ts/ui/setPreviewMode.ts\n\n\nvar setPreviewMode = function (mode, vditor) {\n    if (vditor.options.preview.mode === mode) {\n        return;\n    }\n    vditor.options.preview.mode = mode;\n    switch (mode) {\n        case \"both\":\n            vditor.sv.element.style.display = \"block\";\n            vditor.preview.element.style.display = \"block\";\n            vditor.preview.render(vditor);\n            setCurrentToolbar(vditor.toolbar.elements, [\"both\"]);\n            break;\n        case \"editor\":\n            vditor.sv.element.style.display = \"block\";\n            vditor.preview.element.style.display = \"none\";\n            removeCurrentToolbar(vditor.toolbar.elements, [\"both\"]);\n            break;\n        default:\n            break;\n    }\n    if (vditor.devtools) {\n        vditor.devtools.renderEchart(vditor);\n    }\n};\n\n;// ./src/ts/toolbar/Both.ts\nvar Both_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar Both = /** @class */ (function (_super) {\n    Both_extends(Both, _super);\n    function Both(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        if (vditor.options.preview.mode === \"both\") {\n            _this.element.children[0].classList.add(\"vditor-menu--current\");\n        }\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            var btnElement = _this.element.firstElementChild;\n            if (btnElement.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                return;\n            }\n            event.preventDefault();\n            if (vditor.currentMode !== \"sv\") {\n                return;\n            }\n            if (vditor.options.preview.mode === \"both\") {\n                setPreviewMode(\"editor\", vditor);\n            }\n            else {\n                setPreviewMode(\"both\", vditor);\n            }\n        });\n        return _this;\n    }\n    return Both;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Br.ts\nvar Br = /** @class */ (function () {\n    function Br() {\n        this.element = document.createElement(\"div\");\n        this.element.className = \"vditor-toolbar__br\";\n    }\n    return Br;\n}());\n\n\n// EXTERNAL MODULE: ./src/ts/ui/setCodeTheme.ts\nvar setCodeTheme = __webpack_require__(854);\n;// ./src/ts/toolbar/CodeTheme.ts\nvar CodeTheme_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\nvar CodeTheme = /** @class */ (function (_super) {\n    CodeTheme_extends(CodeTheme, _super);\n    function CodeTheme(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        var actionBtn = _this.element.children[0];\n        var panelElement = document.createElement(\"div\");\n        panelElement.className = \"vditor-hint\".concat(menuItem.level === 2 ? \"\" : \" vditor-panel--arrow\");\n        var innerHTML = \"\";\n        constants/* Constants */.Y.CODE_THEME.forEach(function (theme) {\n            innerHTML += \"<button>\".concat(theme, \"</button>\");\n        });\n        panelElement.innerHTML =\n            \"<div style=\\\"overflow: auto;max-height:\".concat(window.innerHeight / 2, \"px\\\">\").concat(innerHTML, \"</div>\");\n        panelElement.addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            if (event.target.tagName === \"BUTTON\") {\n                hidePanel(vditor, [\"subToolbar\"]);\n                vditor.options.preview.hljs.style = event.target.textContent;\n                (0,setCodeTheme/* setCodeTheme */.h)(event.target.textContent, vditor.options.cdn);\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        });\n        _this.element.appendChild(panelElement);\n        toggleSubMenu(vditor, panelElement, actionBtn, menuItem.level);\n        return _this;\n    }\n    return CodeTheme;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/ContentTheme.ts\nvar ContentTheme_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar ContentTheme = /** @class */ (function (_super) {\n    ContentTheme_extends(ContentTheme, _super);\n    function ContentTheme(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        var actionBtn = _this.element.children[0];\n        var panelElement = document.createElement(\"div\");\n        panelElement.className = \"vditor-hint\".concat(menuItem.level === 2 ? \"\" : \" vditor-panel--arrow\");\n        var innerHTML = \"\";\n        Object.keys(vditor.options.preview.theme.list).forEach(function (key) {\n            innerHTML += \"<button data-type=\\\"\".concat(key, \"\\\">\").concat(vditor.options.preview.theme.list[key], \"</button>\");\n        });\n        panelElement.innerHTML =\n            \"<div style=\\\"overflow: auto;max-height:\".concat(window.innerHeight / 2, \"px\\\">\").concat(innerHTML, \"</div>\");\n        panelElement.addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            if (event.target.tagName === \"BUTTON\") {\n                hidePanel(vditor, [\"subToolbar\"]);\n                vditor.options.preview.theme.current = event.target.getAttribute(\"data-type\");\n                (0,setContentTheme/* setContentTheme */.H)(vditor.options.preview.theme.current, vditor.options.preview.theme.path);\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        });\n        _this.element.appendChild(panelElement);\n        toggleSubMenu(vditor, panelElement, actionBtn, menuItem.level);\n        return _this;\n    }\n    return ContentTheme;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Counter.ts\nvar Counter = /** @class */ (function () {\n    function Counter(vditor) {\n        this.element = document.createElement(\"span\");\n        this.element.className = \"vditor-counter vditor-tooltipped vditor-tooltipped__nw\";\n        this.render(vditor, \"\");\n    }\n    Counter.prototype.render = function (vditor, mdText) {\n        var length = mdText.endsWith(\"\\n\") ? mdText.length - 1 : mdText.length;\n        if (vditor.options.counter.type === \"text\" && vditor[vditor.currentMode]) {\n            var tempElement = vditor[vditor.currentMode].element.cloneNode(true);\n            tempElement.querySelectorAll(\".vditor-wysiwyg__preview\").forEach(function (item) {\n                item.remove();\n            });\n            length = tempElement.textContent.length;\n        }\n        if (typeof vditor.options.counter.max === \"number\") {\n            if (length > vditor.options.counter.max) {\n                this.element.className = \"vditor-counter vditor-counter--error\";\n            }\n            else {\n                this.element.className = \"vditor-counter\";\n            }\n            this.element.innerHTML = \"\".concat(length, \"/\").concat(vditor.options.counter.max);\n        }\n        else {\n            this.element.innerHTML = \"\".concat(length);\n        }\n        this.element.setAttribute(\"aria-label\", vditor.options.counter.type);\n        if (vditor.options.counter.after) {\n            vditor.options.counter.after(length, {\n                enable: vditor.options.counter.enable,\n                max: vditor.options.counter.max,\n                type: vditor.options.counter.type,\n            });\n        }\n    };\n    return Counter;\n}());\n\n\n;// ./src/ts/toolbar/Custom.ts\nvar Custom_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\nvar Custom = /** @class */ (function (_super) {\n    Custom_extends(Custom, _super);\n    function Custom(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this.element.children[0].innerHTML = menuItem.icon;\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            if (event.currentTarget.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                return;\n            }\n            menuItem.click(event, vditor);\n        });\n        return _this;\n    }\n    return Custom;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Devtools.ts\nvar Devtools_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar Devtools = /** @class */ (function (_super) {\n    Devtools_extends(Devtools, _super);\n    function Devtools(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this.element.firstElementChild.addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            var btnElement = _this.element.firstElementChild;\n            if (btnElement.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                return;\n            }\n            event.preventDefault();\n            if (btnElement.classList.contains(\"vditor-menu--current\")) {\n                btnElement.classList.remove(\"vditor-menu--current\");\n                vditor.devtools.element.style.display = \"none\";\n                setPadding(vditor);\n            }\n            else {\n                btnElement.classList.add(\"vditor-menu--current\");\n                vditor.devtools.element.style.display = \"block\";\n                setPadding(vditor);\n                vditor.devtools.renderEchart(vditor);\n            }\n        });\n        return _this;\n    }\n    return Devtools;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Divider.ts\nvar Divider = /** @class */ (function () {\n    function Divider(type) {\n        this.element = document.createElement(\"div\");\n        if (type === 'vertical') {\n            this.element.className = \"vditor-toolbar__divider\";\n        }\n        else {\n            this.element.className = \"vditor-toolbar__line\";\n        }\n    }\n    return Divider;\n}());\n\n\n;// ./src/ts/toolbar/Emoji.ts\nvar Emoji_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\n\n\nvar Emoji = /** @class */ (function (_super) {\n    Emoji_extends(Emoji, _super);\n    function Emoji(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        var panelElement = document.createElement(\"div\");\n        panelElement.className = \"vditor-panel vditor-panel--arrow\";\n        var commonEmojiHTML = \"\";\n        Object.keys(vditor.options.hint.emoji).forEach(function (key) {\n            var emojiValue = vditor.options.hint.emoji[key];\n            if (emojiValue.indexOf(\".\") > -1) {\n                commonEmojiHTML += \"<button data-value=\\\":\".concat(key, \": \\\" data-key=\\\":\").concat(key, \":\\\"><img\\ndata-value=\\\":\").concat(key, \": \\\" data-key=\\\":\").concat(key, \":\\\" class=\\\"vditor-emojis__icon\\\" src=\\\"\").concat(emojiValue, \"\\\"/></button>\");\n            }\n            else {\n                commonEmojiHTML += \"<button data-value=\\\"\".concat(emojiValue, \" \\\"\\n data-key=\\\"\").concat(key, \"\\\"><span class=\\\"vditor-emojis__icon\\\">\").concat(emojiValue, \"</span></button>\");\n            }\n        });\n        panelElement.innerHTML = \"<div class=\\\"vditor-emojis\\\" style=\\\"max-height: \".concat(vditor.options.height === \"auto\" ? \"auto\" : vditor.options.height - 80, \"px\\\">\").concat(commonEmojiHTML, \"</div><div class=\\\"vditor-emojis__tail\\\">\\n    <span class=\\\"vditor-emojis__tip\\\"></span><span>\").concat(vditor.options.hint.emojiTail || \"\", \"</span>\\n</div>\");\n        _this.element.appendChild(panelElement);\n        toggleSubMenu(vditor, panelElement, _this.element.firstElementChild, menuItem.level);\n        _this.bindEvent(vditor);\n        return _this;\n    }\n    Emoji.prototype.bindEvent = function (vditor) {\n        var _this = this;\n        this.element.lastElementChild.addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            var btnElement = (0,hasClosestByHeadings/* hasClosestByTag */.f)(event.target, \"BUTTON\");\n            if (btnElement) {\n                event.preventDefault();\n                var value = btnElement.getAttribute(\"data-value\");\n                var range = (0,selection/* getEditorRange */.RN)(vditor);\n                var html = value;\n                if (vditor.currentMode === \"wysiwyg\") {\n                    html = vditor.lute.SpinVditorDOM(value);\n                }\n                else if (vditor.currentMode === \"ir\") {\n                    html = vditor.lute.SpinVditorIRDOM(value);\n                }\n                if (value.indexOf(\":\") > -1 && vditor.currentMode !== \"sv\") {\n                    var tempElement = document.createElement(\"div\");\n                    tempElement.innerHTML = html;\n                    html = tempElement.firstElementChild.firstElementChild.outerHTML + \" \";\n                    (0,selection/* insertHTML */.Z2)(html, vditor);\n                }\n                else {\n                    range.extractContents();\n                    range.insertNode(document.createTextNode(value));\n                    if (!(0,hasClosest/* hasClosestBlock */.pt)(range.startContainer)) {\n                        modifyPre(vditor, range);\n                    }\n                }\n                range.collapse(false);\n                (0,selection/* setSelectionFocus */.jl)(range);\n                _this.element.lastElementChild.style.display = \"none\";\n                execAfterRender(vditor);\n            }\n        });\n        this.element.lastElementChild.addEventListener(\"mouseover\", function (event) {\n            var btnElement = (0,hasClosestByHeadings/* hasClosestByTag */.f)(event.target, \"BUTTON\");\n            if (btnElement) {\n                _this.element.querySelector(\".vditor-emojis__tip\").innerHTML = btnElement.getAttribute(\"data-key\");\n            }\n        });\n    };\n    return Emoji;\n}(MenuItem));\n\n\n;// ./src/ts/export/index.ts\n\n\nvar download = function (vditor, content, filename) {\n    var aElement = document.createElement(\"a\");\n    if (\"download\" in aElement) {\n        aElement.download = filename;\n        aElement.style.display = \"none\";\n        aElement.href = URL.createObjectURL(new Blob([content]));\n        document.body.appendChild(aElement);\n        aElement.click();\n        aElement.remove();\n    }\n    else {\n        vditor.tip.show(window.VditorI18n.downloadTip, 0);\n    }\n};\nvar exportMarkdown = function (vditor) {\n    var content = getMarkdown(vditor);\n    download(vditor, content, content.substr(0, 10) + \".md\");\n};\nvar exportPDF = function (vditor) {\n    vditor.tip.show(window.VditorI18n.generate, 3800);\n    var iframe = document.querySelector(\"#vditorExportIframe\");\n    iframe.contentDocument.open();\n    iframe.contentDocument.write(\"<link rel=\\\"stylesheet\\\" href=\\\"\".concat(vditor.options.cdn, \"/dist/index.css\\\"/>\\n<script src=\\\"\").concat(vditor.options.cdn, \"/dist/method.min.js\\\"></script>\\n<div id=\\\"preview\\\" style=\\\"width: 800px\\\"></div>\\n<script>\\nwindow.addEventListener(\\\"message\\\", (e) => {\\n  if(!e.data) {\\n    return;\\n  }\\n  Vditor.preview(document.getElementById('preview'), e.data, {\\n    cdn: \\\"\").concat(vditor.options.cdn, \"\\\",\\n    markdown: {\\n      theme: \").concat(JSON.stringify(vditor.options.preview.theme), \"\\n    },\\n    hljs: {\\n      style: \\\"\").concat(vditor.options.preview.hljs.style, \"\\\"\\n    }\\n  });\\n  setTimeout(() => {\\n        window.print();\\n    }, 3600);\\n}, false);\\n</script>\"));\n    iframe.contentDocument.close();\n    setTimeout(function () {\n        iframe.contentWindow.postMessage(getMarkdown(vditor), \"*\");\n    }, 200);\n};\nvar exportHTML = function (vditor) {\n    var content = getHTML(vditor);\n    var html = \"<html><head><link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"\".concat(vditor.options.cdn, \"/dist/index.css\\\"/>\\n<script src=\\\"\").concat(vditor.options.cdn, \"/dist/js/i18n/\").concat(vditor.options.lang, \".js\\\"></script>\\n<script src=\\\"\").concat(vditor.options.cdn, \"/dist/method.min.js\\\"></script></head>\\n<body><div class=\\\"vditor-reset\\\" id=\\\"preview\\\">\").concat(content, \"</div>\\n<script>\\n    const previewElement = document.getElementById('preview')\\n    Vditor.setContentTheme('\").concat(vditor.options.preview.theme.current, \"', '\").concat(vditor.options.preview.theme.path, \"');\\n    Vditor.codeRender(previewElement);\\n    Vditor.highlightRender(\").concat(JSON.stringify(vditor.options.preview.hljs), \", previewElement, '\").concat(vditor.options.cdn, \"');\\n    Vditor.mathRender(previewElement, {\\n        cdn: '\").concat(vditor.options.cdn, \"',\\n        math: \").concat(JSON.stringify(vditor.options.preview.math), \",\\n    });\\n    Vditor.mermaidRender(previewElement, '\").concat(vditor.options.cdn, \"', '\").concat(vditor.options.theme, \"');\\n    Vditor.SMILESRender(previewElement, '\").concat(vditor.options.cdn, \"', '\").concat(vditor.options.theme, \"');\\n    Vditor.markmapRender(previewElement, '\").concat(vditor.options.cdn, \"');\\n    Vditor.flowchartRender(previewElement, '\").concat(vditor.options.cdn, \"');\\n    Vditor.graphvizRender(previewElement, '\").concat(vditor.options.cdn, \"');\\n    Vditor.chartRender(previewElement, '\").concat(vditor.options.cdn, \"', '\").concat(vditor.options.theme, \"');\\n    Vditor.mindmapRender(previewElement, '\").concat(vditor.options.cdn, \"', '\").concat(vditor.options.theme, \"');\\n    Vditor.abcRender(previewElement, '\").concat(vditor.options.cdn, \"');\\n    \").concat(vditor.options.preview.render.media.enable ? 'Vditor.mediaRender(previewElement);' : \"\", \"\\n    Vditor.speechRender(previewElement);\\n</script>\\n<script src=\\\"\").concat(vditor.options.cdn, \"/dist/js/icons/\").concat(vditor.options.icon, \".js\\\"></script></body></html>\");\n    download(vditor, html, content.substr(0, 10) + \".html\");\n};\n\n;// ./src/ts/toolbar/Export.ts\nvar Export_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar Export = /** @class */ (function (_super) {\n    Export_extends(Export, _super);\n    function Export(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        var actionBtn = _this.element.children[0];\n        var panelElement = document.createElement(\"div\");\n        panelElement.className = \"vditor-hint\".concat(menuItem.level === 2 ? \"\" : \" vditor-panel--arrow\");\n        panelElement.innerHTML = \"<button data-type=\\\"markdown\\\">Markdown</button>\\n<button data-type=\\\"pdf\\\">PDF</button>\\n<button data-type=\\\"html\\\">HTML</button>\";\n        panelElement.addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            var btnElement = event.target;\n            if (btnElement.tagName === \"BUTTON\") {\n                switch (btnElement.getAttribute(\"data-type\")) {\n                    case \"markdown\":\n                        exportMarkdown(vditor);\n                        break;\n                    case \"pdf\":\n                        exportPDF(vditor);\n                        break;\n                    case \"html\":\n                        exportHTML(vditor);\n                        break;\n                    default:\n                        break;\n                }\n                hidePanel(vditor, [\"subToolbar\"]);\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        });\n        _this.element.appendChild(panelElement);\n        toggleSubMenu(vditor, panelElement, actionBtn, menuItem.level);\n        return _this;\n    }\n    return Export;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Fullscreen.ts\nvar Fullscreen_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\nvar Fullscreen = /** @class */ (function (_super) {\n    Fullscreen_extends(Fullscreen, _super);\n    function Fullscreen(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this.originalParent = null;\n        _this.fullscreenWrapper = null;\n        _this._bindEvent(vditor, menuItem);\n        return _this;\n    }\n    Fullscreen.prototype._bindEvent = function (vditor, menuItem) {\n        this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            if (vditor.element.className.includes(\"vditor--fullscreen\")) {\n                // 退出全屏\n                if (!menuItem.level) {\n                    this.innerHTML = menuItem.icon;\n                }\n                // 恢复原始位置\n                if (this.fullscreenWrapper && this.originalParent) {\n                    this.originalParent.appendChild(vditor.element);\n                    this.fullscreenWrapper.remove();\n                    this.fullscreenWrapper = null;\n                    this.originalParent = null;\n                }\n                document.body.style.overflow = \"\";\n                vditor.element.classList.remove(\"vditor--fullscreen\");\n                Object.keys(vditor.toolbar.elements).forEach(function (key) {\n                    var svgElement = vditor.toolbar.elements[key].firstChild;\n                    if (svgElement) {\n                        svgElement.className = svgElement.className.replace(\"__s\", \"__n\");\n                        vditor.options.toolbar.forEach(function (item) {\n                            if (typeof item !== \"string\" && item.tipPosition && item.name === svgElement.dataset.type) {\n                                svgElement.className = \"vditor-tooltipped vditor-tooltipped__\".concat(item.tipPosition);\n                            }\n                        });\n                    }\n                });\n                if (vditor.counter) {\n                    vditor.counter.element.className = vditor.counter.element.className.replace(\"__s\", \"__n\");\n                }\n            }\n            else {\n                // 进入全屏\n                if (!menuItem.level) {\n                    this.innerHTML = '<svg><use xlink:href=\"#vditor-icon-contract\"></use></svg>';\n                }\n                // 创建全屏包装器并移动到body下\n                this.originalParent = vditor.element.parentElement;\n                this.fullscreenWrapper = document.createElement('div');\n                this.fullscreenWrapper.className = 'vditor-fullscreen-wrapper';\n                document.body.appendChild(this.fullscreenWrapper);\n                this.fullscreenWrapper.appendChild(vditor.element);\n                document.body.style.overflow = \"hidden\";\n                vditor.element.classList.add(\"vditor--fullscreen\");\n                Object.keys(vditor.toolbar.elements).forEach(function (key) {\n                    var svgElement = vditor.toolbar.elements[key].firstChild;\n                    if (svgElement) {\n                        svgElement.className = svgElement.className.replace(\"__n\", \"__s\");\n                    }\n                });\n                if (vditor.counter) {\n                    vditor.counter.element.className = vditor.counter.element.className.replace(\"__n\", \"__s\");\n                }\n            }\n            if (vditor.devtools) {\n                vditor.devtools.renderEchart(vditor);\n            }\n            if (menuItem.click) {\n                menuItem.click(event, vditor);\n            }\n            setPadding(vditor);\n            setTypewriterPosition(vditor);\n        });\n    };\n    return Fullscreen;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Headings.ts\nvar Headings_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\n\n\nvar Headings = /** @class */ (function (_super) {\n    Headings_extends(Headings, _super);\n    function Headings(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        var panelElement = document.createElement(\"div\");\n        panelElement.className = \"vditor-hint vditor-panel--arrow\";\n        panelElement.innerHTML = \"<button data-tag=\\\"h1\\\" data-value=\\\"# \\\">\".concat(window.VditorI18n.heading1, \"</button>\\n<button data-tag=\\\"h2\\\" data-value=\\\"## \\\">\").concat(window.VditorI18n.heading2, \"</button>\\n<button data-tag=\\\"h3\\\" data-value=\\\"### \\\">\").concat(window.VditorI18n.heading3, \"</button>\\n<button data-tag=\\\"h4\\\" data-value=\\\"#### \\\">\").concat(window.VditorI18n.heading4, \"</button>\\n<button data-tag=\\\"h5\\\" data-value=\\\"##### \\\">\").concat(window.VditorI18n.heading5, \"</button>\\n<button data-tag=\\\"h6\\\" data-value=\\\"###### \\\">\").concat(window.VditorI18n.heading6, \"</button>\");\n        _this.element.appendChild(panelElement);\n        _this._bindEvent(vditor, panelElement);\n        return _this;\n    }\n    Headings.prototype._bindEvent = function (vditor, panelElement) {\n        var actionBtn = this.element.children[0];\n        actionBtn.addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            // https://github.com/Vanessa219/vditor/issues/1391\n            clearTimeout(vditor.wysiwyg.afterRenderTimeoutId);\n            clearTimeout(vditor.ir.processTimeoutId);\n            clearTimeout(vditor.sv.processTimeoutId);\n            if (actionBtn.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                return;\n            }\n            actionBtn.blur();\n            if (actionBtn.classList.contains(\"vditor-menu--current\")) {\n                if (vditor.currentMode === \"wysiwyg\") {\n                    removeHeading(vditor);\n                    afterRenderEvent(vditor);\n                }\n                else if (vditor.currentMode === \"ir\") {\n                    process_processHeading(vditor, \"\");\n                }\n                actionBtn.classList.remove(\"vditor-menu--current\");\n            }\n            else {\n                hidePanel(vditor, [\"subToolbar\"]);\n                panelElement.style.display = \"block\";\n            }\n        });\n        for (var i = 0; i < 6; i++) {\n            panelElement.children.item(i).addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n                event.preventDefault();\n                if (vditor.currentMode === \"wysiwyg\") {\n                    setHeading(vditor, event.target.getAttribute(\"data-tag\"));\n                    afterRenderEvent(vditor);\n                    actionBtn.classList.add(\"vditor-menu--current\");\n                }\n                else if (vditor.currentMode === \"ir\") {\n                    process_processHeading(vditor, event.target.getAttribute(\"data-value\"));\n                    actionBtn.classList.add(\"vditor-menu--current\");\n                }\n                else {\n                    processHeading(vditor, event.target.getAttribute(\"data-value\"));\n                }\n                panelElement.style.display = \"none\";\n            });\n        }\n    };\n    return Headings;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Help.ts\nvar Help_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\nvar Help = /** @class */ (function (_super) {\n    Help_extends(Help, _super);\n    function Help(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            vditor.tip.show(\"<div style=\\\"margin-bottom:14px;font-size: 14px;line-height: 22px;min-width:300px;max-width: 360px;display: flex;\\\">\\n<div style=\\\"margin-top: 14px;flex: 1\\\">\\n    <div>Markdown \\u4F7F\\u7528\\u6307\\u5357</div>\\n    <ul style=\\\"list-style: none\\\">\\n        <li><a href=\\\"https://ld246.com/article/1583308420519\\\" target=\\\"_blank\\\">\\u8BED\\u6CD5\\u901F\\u67E5\\u624B\\u518C</a></li>\\n        <li><a href=\\\"https://ld246.com/article/1583129520165\\\" target=\\\"_blank\\\">\\u57FA\\u7840\\u8BED\\u6CD5</a></li>\\n        <li><a href=\\\"https://ld246.com/article/1583305480675\\\" target=\\\"_blank\\\">\\u6269\\u5C55\\u8BED\\u6CD5</a></li>\\n        <li><a href=\\\"https://ld246.com/article/1582778815353\\\" target=\\\"_blank\\\">\\u952E\\u76D8\\u5FEB\\u6377\\u952E</a></li>\\n    </ul>\\n</div>\\n<div style=\\\"margin-top: 14px;flex: 1\\\">\\n    <div>Vditor \\u652F\\u6301</div>\\n    <ul style=\\\"list-style: none\\\">\\n        <li><a href=\\\"https://github.com/Vanessa219/vditor/issues\\\" target=\\\"_blank\\\">Issues</a></li>\\n        <li><a href=\\\"https://ld246.com/tag/vditor\\\" target=\\\"_blank\\\">\\u5B98\\u65B9\\u8BA8\\u8BBA\\u533A</a></li>\\n        <li><a href=\\\"https://ld246.com/article/1549638745630\\\" target=\\\"_blank\\\">\\u5F00\\u53D1\\u624B\\u518C</a></li>\\n        <li><a href=\\\"https://ld246.com/guide/markdown\\\" target=\\\"_blank\\\">\\u6F14\\u793A\\u5730\\u5740</a></li>\\n    </ul>\\n</div></div>\", 0);\n        });\n        return _this;\n    }\n    return Help;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Indent.ts\nvar Indent_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\nvar Indent = /** @class */ (function (_super) {\n    Indent_extends(Indent, _super);\n    function Indent(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            if (_this.element.firstElementChild.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED) ||\n                vditor.currentMode === \"sv\") {\n                return;\n            }\n            var range = (0,selection/* getEditorRange */.RN)(vditor);\n            var liElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.startContainer, \"LI\");\n            if (liElement) {\n                listIndent(vditor, liElement, range);\n            }\n        });\n        return _this;\n    }\n    return Indent;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Info.ts\nvar Info_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\nvar Info = /** @class */ (function (_super) {\n    Info_extends(Info, _super);\n    function Info(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            vditor.tip.show(\"<div style=\\\"max-width: 520px; font-size: 14px;line-height: 22px;margin-bottom: 14px;\\\">\\n<p style=\\\"text-align: center;margin: 14px 0\\\">\\n    <em>\\u4E0B\\u4E00\\u4EE3\\u7684 Markdown \\u7F16\\u8F91\\u5668\\uFF0C\\u4E3A\\u672A\\u6765\\u800C\\u6784\\u5EFA</em>\\n</p>\\n<div style=\\\"display: flex;margin-bottom: 14px;flex-wrap: wrap;align-items: center\\\">\\n    <img src=\\\"https://unpkg.com/vditor/dist/images/logo.png\\\" style=\\\"margin: 0 auto;height: 68px\\\"/>\\n    <div>&nbsp;&nbsp;</div>\\n    <div style=\\\"flex: 1;min-width: 250px\\\">\\n        Vditor \\u662F\\u4E00\\u6B3E\\u6D4F\\u89C8\\u5668\\u7AEF\\u7684 Markdown \\u7F16\\u8F91\\u5668\\uFF0C\\u652F\\u6301\\u6240\\u89C1\\u5373\\u6240\\u5F97\\u3001\\u5373\\u65F6\\u6E32\\u67D3\\uFF08\\u7C7B\\u4F3C Typora\\uFF09\\u548C\\u5206\\u5C4F\\u9884\\u89C8\\u6A21\\u5F0F\\u3002\\n        \\u5B83\\u4F7F\\u7528 TypeScript \\u5B9E\\u73B0\\uFF0C\\u652F\\u6301\\u539F\\u751F JavaScript \\u4EE5\\u53CA Vue\\u3001React\\u3001Angular \\u548C Svelte \\u7B49\\u6846\\u67B6\\u3002\\n    </div>\\n</div>\\n<div style=\\\"display: flex;flex-wrap: wrap;\\\">\\n    <ul style=\\\"list-style: none;flex: 1;min-width:148px\\\">\\n        <li>\\n        \\u9879\\u76EE\\u5730\\u5740\\uFF1A<a href=\\\"https://b3log.org/vditor\\\" target=\\\"_blank\\\">b3log.org/vditor</a>\\n        </li>\\n        <li>\\n        \\u5F00\\u6E90\\u534F\\u8BAE\\uFF1AMIT\\n        </li>\\n    </ul>\\n    <ul style=\\\"list-style: none;margin-right: 18px\\\">\\n        <li>\\n        \\u7EC4\\u4EF6\\u7248\\u672C\\uFF1AVditor v\".concat(constants/* VDITOR_VERSION */.g, \" / Lute v\").concat(Lute.Version, \"\\n        </li>\\n        <li>\\n        \\u8D5E\\u52A9\\u6350\\u8D60\\uFF1A<a href=\\\"https://ld246.com/sponsor\\\" target=\\\"_blank\\\">https://ld246.com/sponsor</a>\\n        </li>\\n    </ul>\\n</div>\\n</div>\"), 0);\n        });\n        return _this;\n    }\n    return Info;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/InsertAfter.ts\nvar InsertAfter_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar InsertAfter = /** @class */ (function (_super) {\n    InsertAfter_extends(InsertAfter, _super);\n    function InsertAfter(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            if (_this.element.firstElementChild.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED) ||\n                vditor.currentMode === \"sv\") {\n                return;\n            }\n            insertEmptyBlock(vditor, \"afterend\");\n        });\n        return _this;\n    }\n    return InsertAfter;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/InsertBefore.ts\nvar InsertBefore_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar InsertBefore = /** @class */ (function (_super) {\n    InsertBefore_extends(InsertBefore, _super);\n    function InsertBefore(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            if (_this.element.firstElementChild.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED) ||\n                vditor.currentMode === \"sv\") {\n                return;\n            }\n            insertEmptyBlock(vditor, \"beforebegin\");\n        });\n        return _this;\n    }\n    return InsertBefore;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Outdent.ts\nvar Outdent_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\nvar Outdent = /** @class */ (function (_super) {\n    Outdent_extends(Outdent, _super);\n    function Outdent(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            if (_this.element.firstElementChild.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED) ||\n                vditor.currentMode === \"sv\") {\n                return;\n            }\n            var range = (0,selection/* getEditorRange */.RN)(vditor);\n            var liElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.startContainer, \"LI\");\n            if (liElement) {\n                listOutdent(vditor, liElement, range, liElement.parentElement);\n            }\n        });\n        return _this;\n    }\n    return Outdent;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Outline.ts\nvar Outline_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\nvar Outline_Outline = /** @class */ (function (_super) {\n    Outline_extends(Outline, _super);\n    function Outline(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        if (vditor.options.outline) {\n            _this.element.firstElementChild.classList.add(\"vditor-menu--current\");\n        }\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            var btnElement = vditor.toolbar.elements.outline.firstElementChild;\n            if (btnElement.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                return;\n            }\n            vditor.options.outline.enable = !_this.element.firstElementChild.classList.contains(\"vditor-menu--current\");\n            vditor.outline.toggle(vditor, vditor.options.outline.enable);\n        });\n        return _this;\n    }\n    return Outline;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Preview.ts\nvar Preview_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\nvar Preview_Preview = /** @class */ (function (_super) {\n    Preview_extends(Preview, _super);\n    function Preview(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this._bindEvent(vditor);\n        return _this;\n    }\n    Preview.prototype._bindEvent = function (vditor) {\n        var _this = this;\n        this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            var btnElement = _this.element.firstElementChild;\n            if (btnElement.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                return;\n            }\n            var toolbars = constants/* Constants */.Y.EDIT_TOOLBARS.concat([\"both\", \"edit-mode\", \"devtools\"]);\n            if (btnElement.classList.contains(\"vditor-menu--current\")) {\n                btnElement.classList.remove(\"vditor-menu--current\");\n                if (vditor.currentMode === \"sv\") {\n                    vditor.sv.element.style.display = \"block\";\n                    if (vditor.options.preview.mode === \"both\") {\n                        vditor.preview.element.style.display = \"block\";\n                    }\n                    else {\n                        vditor.preview.element.style.display = \"none\";\n                    }\n                }\n                else {\n                    vditor[vditor.currentMode].element.parentElement.style.display = \"block\";\n                    vditor.preview.element.style.display = \"none\";\n                }\n                enableToolbar(vditor.toolbar.elements, toolbars);\n                vditor.outline.render(vditor);\n            }\n            else {\n                disableToolbar(vditor.toolbar.elements, toolbars);\n                vditor.preview.element.style.display = \"block\";\n                if (vditor.currentMode === \"sv\") {\n                    vditor.sv.element.style.display = \"none\";\n                }\n                else {\n                    vditor[vditor.currentMode].element.parentElement.style.display = \"none\";\n                }\n                vditor.preview.render(vditor);\n                btnElement.classList.add(\"vditor-menu--current\");\n                hidePanel(vditor, [\"subToolbar\", \"hint\", \"popover\"]);\n                setTimeout(function () {\n                    vditor.outline.render(vditor);\n                }, vditor.options.preview.delay + 10);\n            }\n            setPadding(vditor);\n        });\n    };\n    return Preview;\n}(MenuItem));\n\n\n;// ./src/ts/util/RecordMedia.ts\nvar RecordMedia = /** @class */ (function () {\n    function RecordMedia(e) {\n        this.SAMPLE_RATE = 5000; // 44100 suggested by demos;\n        this.isRecording = false;\n        this.readyFlag = false;\n        this.leftChannel = [];\n        this.rightChannel = [];\n        this.recordingLength = 0;\n        var context;\n        // creates the audio context\n        if (typeof AudioContext !== \"undefined\") {\n            context = new AudioContext();\n        }\n        else if (webkitAudioContext) {\n            context = new webkitAudioContext();\n        }\n        else {\n            return;\n        }\n        this.DEFAULT_SAMPLE_RATE = context.sampleRate;\n        // creates a gain node\n        var volume = context.createGain();\n        // creates an audio node from the microphone incoming stream\n        var audioInput = context.createMediaStreamSource(e);\n        // connect the stream to the gain node\n        audioInput.connect(volume);\n        /* From the spec: The size of the buffer controls how frequently the audioprocess event is\n         dispatched and how many sample-frames need to be processed each call.\n         Lower values for buffer size will result in a lower (better) latency.\n         Higher values will be necessary to avoid audio breakup and glitches */\n        this.recorder = context.createScriptProcessor(2048, 2, 1);\n        // The onaudioprocess event needs to be defined externally, so make sure it is not set:\n        this.recorder.onaudioprocess = null;\n        // we connect the recorder\n        volume.connect(this.recorder);\n        this.recorder.connect(context.destination);\n        this.readyFlag = true;\n    }\n    // Publicly accessible methods:\n    RecordMedia.prototype.cloneChannelData = function (leftChannelData, rightChannelData) {\n        this.leftChannel.push(new Float32Array(leftChannelData));\n        this.rightChannel.push(new Float32Array(rightChannelData));\n        this.recordingLength += 2048;\n    };\n    RecordMedia.prototype.startRecordingNewWavFile = function () {\n        if (this.readyFlag) {\n            this.isRecording = true;\n            this.leftChannel.length = this.rightChannel.length = 0;\n            this.recordingLength = 0;\n        }\n    };\n    RecordMedia.prototype.stopRecording = function () {\n        this.isRecording = false;\n    };\n    RecordMedia.prototype.buildWavFileBlob = function () {\n        // we flat the left and right channels down\n        var leftBuffer = this.mergeBuffers(this.leftChannel);\n        var rightBuffer = this.mergeBuffers(this.rightChannel);\n        // Interleave the left and right channels together:\n        var interleaved = new Float32Array(leftBuffer.length);\n        for (var i = 0; i < leftBuffer.length; ++i) {\n            interleaved[i] = 0.5 * (leftBuffer[i] + rightBuffer[i]);\n        }\n        // Downsample the audio data if necessary:\n        if (this.DEFAULT_SAMPLE_RATE > this.SAMPLE_RATE) {\n            interleaved = this.downSampleBuffer(interleaved, this.SAMPLE_RATE);\n        }\n        var totalByteCount = (44 + interleaved.length * 2);\n        var buffer = new ArrayBuffer(totalByteCount);\n        var view = new DataView(buffer);\n        // Build the RIFF chunk descriptor:\n        this.writeUTFBytes(view, 0, \"RIFF\");\n        view.setUint32(4, totalByteCount, true);\n        this.writeUTFBytes(view, 8, \"WAVE\");\n        // Build the FMT sub-chunk:\n        this.writeUTFBytes(view, 12, \"fmt \"); // subchunk1 ID is format\n        view.setUint32(16, 16, true); // The sub-chunk size is 16.\n        view.setUint16(20, 1, true); // The audio format is 1.\n        view.setUint16(22, 1, true); // Number of interleaved channels.\n        view.setUint32(24, this.SAMPLE_RATE, true); // Sample rate.\n        view.setUint32(28, this.SAMPLE_RATE * 2, true); // Byte rate.\n        view.setUint16(32, 2, true); // Block align\n        view.setUint16(34, 16, true); // Bits per sample.\n        // Build the data sub-chunk:\n        var subChunk2ByteCount = interleaved.length * 2;\n        this.writeUTFBytes(view, 36, \"data\");\n        view.setUint32(40, subChunk2ByteCount, true);\n        // Write the PCM samples to the view:\n        var lng = interleaved.length;\n        var index = 44;\n        var volume = 1;\n        for (var j = 0; j < lng; j++) {\n            view.setInt16(index, interleaved[j] * (0x7FFF * volume), true);\n            index += 2;\n        }\n        return new Blob([view], { type: \"audio/wav\" });\n    };\n    RecordMedia.prototype.downSampleBuffer = function (buffer, rate) {\n        if (rate === this.DEFAULT_SAMPLE_RATE) {\n            return buffer;\n        }\n        if (rate > this.DEFAULT_SAMPLE_RATE) {\n            // throw \"downsampling rate show be smaller than original sample rate\";\n            return buffer;\n        }\n        var sampleRateRatio = this.DEFAULT_SAMPLE_RATE / rate;\n        var newLength = Math.round(buffer.length / sampleRateRatio);\n        var result = new Float32Array(newLength);\n        var offsetResult = 0;\n        var offsetBuffer = 0;\n        while (offsetResult < result.length) {\n            var nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);\n            var accum = 0;\n            var count = 0;\n            for (var i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {\n                accum += buffer[i];\n                count++;\n            }\n            result[offsetResult] = accum / count;\n            offsetResult++;\n            offsetBuffer = nextOffsetBuffer;\n        }\n        return result;\n    };\n    RecordMedia.prototype.mergeBuffers = function (desiredChannelBuffer) {\n        var result = new Float32Array(this.recordingLength);\n        var offset = 0;\n        var lng = desiredChannelBuffer.length;\n        for (var i = 0; i < lng; ++i) {\n            var buffer = desiredChannelBuffer[i];\n            result.set(buffer, offset);\n            offset += buffer.length;\n        }\n        return result;\n    };\n    RecordMedia.prototype.writeUTFBytes = function (view, offset, value) {\n        var lng = value.length;\n        for (var i = 0; i < lng; i++) {\n            view.setUint8(offset + i, value.charCodeAt(i));\n        }\n    };\n    return RecordMedia;\n}());\n\n\n;// ./src/ts/toolbar/Record.ts\nvar Record_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\nvar Record = /** @class */ (function (_super) {\n    Record_extends(Record, _super);\n    function Record(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this._bindEvent(vditor);\n        return _this;\n    }\n    Record.prototype._bindEvent = function (vditor) {\n        var _this = this;\n        var mediaRecorder;\n        this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            if (_this.element.firstElementChild.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                return;\n            }\n            var editorElement = vditor[vditor.currentMode].element;\n            if (!mediaRecorder) {\n                navigator.mediaDevices.getUserMedia({ audio: true }).then(function (mediaStream) {\n                    mediaRecorder = new RecordMedia(mediaStream);\n                    mediaRecorder.recorder.onaudioprocess = function (e) {\n                        // Do nothing if not recording:\n                        if (!mediaRecorder.isRecording) {\n                            return;\n                        }\n                        // Copy the data from the input buffers;\n                        var left = e.inputBuffer.getChannelData(0);\n                        var right = e.inputBuffer.getChannelData(1);\n                        mediaRecorder.cloneChannelData(left, right);\n                    };\n                    mediaRecorder.startRecordingNewWavFile();\n                    vditor.tip.show(window.VditorI18n.recording);\n                    editorElement.setAttribute(\"contenteditable\", \"false\");\n                    _this.element.children[0].classList.add(\"vditor-menu--current\");\n                }).catch(function () {\n                    vditor.tip.show(window.VditorI18n[\"record-tip\"]);\n                });\n                return;\n            }\n            if (mediaRecorder.isRecording) {\n                mediaRecorder.stopRecording();\n                vditor.tip.hide();\n                var file = new File([mediaRecorder.buildWavFileBlob()], \"record\".concat((new Date()).getTime(), \".wav\"), { type: \"video/webm\" });\n                uploadFiles(vditor, [file]);\n                _this.element.children[0].classList.remove(\"vditor-menu--current\");\n            }\n            else {\n                vditor.tip.show(window.VditorI18n.recording);\n                editorElement.setAttribute(\"contenteditable\", \"false\");\n                mediaRecorder.startRecordingNewWavFile();\n                _this.element.children[0].classList.add(\"vditor-menu--current\");\n            }\n        });\n    };\n    return Record;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Redo.ts\nvar Redo_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar Redo = /** @class */ (function (_super) {\n    Redo_extends(Redo, _super);\n    function Redo(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        disableToolbar({ redo: _this.element }, [\"redo\"]);\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            if (_this.element.firstElementChild.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                return;\n            }\n            vditor.undo.redo(vditor);\n        });\n        return _this;\n    }\n    return Redo;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Undo.ts\nvar Undo_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar Undo = /** @class */ (function (_super) {\n    Undo_extends(Undo, _super);\n    function Undo(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        disableToolbar({ undo: _this.element }, [\"undo\"]);\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            if (_this.element.firstElementChild.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                return;\n            }\n            vditor.undo.undo(vditor);\n        });\n        return _this;\n    }\n    return Undo;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Upload.ts\nvar Upload_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar Upload_Upload = /** @class */ (function (_super) {\n    Upload_extends(Upload, _super);\n    function Upload(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        var inputHTML = '<input style=\"position: absolute; inset: 0; width: 100%\" type=\"file\"';\n        var name = menuItem.name;\n        var options = vditor.options[name] || {};\n        if (!options)\n            return _this;\n        if (options.multiple) {\n            inputHTML += ' multiple=\"multiple\"';\n        }\n        if (options.accept) {\n            inputHTML += \" accept=\\\"\".concat(options.accept, \"\\\"\");\n        }\n        _this.element.children[0].innerHTML = \"<div style=\\\"position: relative; align-items: center; display: flex; width: 100%; gap: 8px;\\\">\".concat((menuItem.icon || '<svg><use xlink:href=\"#vditor-icon-upload\"></use></svg>'), \" \").concat(window.VditorI18n[name]).concat(inputHTML, \"></div>\");\n        _this._bindEvent(vditor, menuItem);\n        return _this;\n    }\n    Upload.prototype._bindEvent = function (vditor, menuItem) {\n        var _this = this;\n        this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            if (_this.element.firstElementChild.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                event.stopPropagation();\n                event.preventDefault();\n                return;\n            }\n        });\n        this.element.querySelector(\"input\").addEventListener(\"change\", function (event) {\n            if (_this.element.firstElementChild.classList.contains(constants/* Constants */.Y.CLASS_MENU_DISABLED)) {\n                event.stopPropagation();\n                event.preventDefault();\n                return;\n            }\n            if (event.target.files.length === 0) {\n                return;\n            }\n            if (menuItem.name === 'image') {\n                uploadImage(vditor, event.target.files, event.target);\n            }\n            else if (menuItem.name === 'video') {\n                uploadVideo(vditor, event.target.files, event.target);\n            }\n            else {\n                uploadFiles(vditor, event.target.files, event.target);\n            }\n        });\n    };\n    return Upload;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/Copy.ts\nvar Copy_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\nvar Copy = /** @class */ (function (_super) {\n    Copy_extends(Copy, _super);\n    function Copy(vditor, menuItem) {\n        var _this = _super.call(this, vditor, menuItem) || this;\n        _this.element.children[0].addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n            event.preventDefault();\n            var value = getMarkdown(vditor);\n            try {\n                var input = document.createElement('textarea');\n                input.setAttribute('readonly', 'readonly');\n                input.value = value;\n                document.body.appendChild(input);\n                input.select();\n                if (document.execCommand('copy'))\n                    document.execCommand('copy');\n                document.body.removeChild(input);\n                vditor.tip.show(\"复制成功\");\n            }\n            catch (err) {\n                console.error(\"复制失败:\", err);\n                vditor.tip.show(\"复制失败\");\n            }\n        });\n        return _this;\n    }\n    return Copy;\n}(MenuItem));\n\n\n;// ./src/ts/toolbar/index.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Toolbar = /** @class */ (function () {\n    function Toolbar(vditor) {\n        var _this = this;\n        var options = vditor.options;\n        this.elements = {};\n        this.element = document.createElement(\"div\");\n        this.element.className = \"vditor-toolbar\";\n        options.toolbar.forEach(function (menuItem, i) {\n            var itemElement = _this.genItem(vditor, menuItem, i);\n            _this.element.appendChild(itemElement);\n            if (menuItem.toolbar) {\n                var panelElement_1 = document.createElement(\"div\");\n                panelElement_1.className = \"vditor-hint vditor-panel--arrow\";\n                panelElement_1.addEventListener((0,compatibility/* getEventName */.y3)(), function (event) {\n                    panelElement_1.style.display = \"none\";\n                });\n                menuItem.toolbar.forEach(function (subMenuItem, subI) {\n                    subMenuItem.level = 2;\n                    panelElement_1.appendChild(_this.genItem(vditor, subMenuItem, i + subI));\n                });\n                itemElement.appendChild(panelElement_1);\n                toggleSubMenu(vditor, panelElement_1, itemElement.children[0], 2);\n            }\n        });\n        if (vditor.options.toolbarConfig.hide) {\n            this.element.classList.add(\"vditor-toolbar--hide\");\n        }\n        if (vditor.options.toolbarConfig.pin) {\n            this.element.classList.add(\"vditor-toolbar--pin\");\n        }\n        if (vditor.options.counter.enable) {\n            vditor.counter = new Counter(vditor);\n            this.element.appendChild(vditor.counter.element);\n        }\n    }\n    Toolbar.prototype.updateConfig = function (vditor, options) {\n        vditor.options.toolbarConfig = Object.assign({\n            hide: false,\n            pin: false,\n        }, options);\n        if (vditor.options.toolbarConfig.hide) {\n            this.element.classList.add(\"vditor-toolbar--hide\");\n        }\n        else {\n            this.element.classList.remove(\"vditor-toolbar--hide\");\n        }\n        if (vditor.options.toolbarConfig.pin) {\n            this.element.classList.add(\"vditor-toolbar--pin\");\n        }\n        else {\n            this.element.classList.remove(\"vditor-toolbar--pin\");\n        }\n    };\n    Toolbar.prototype.genItem = function (vditor, menuItem, index) {\n        var menuItemObj;\n        switch (menuItem.name) {\n            case \"bold\":\n            case \"italic\":\n            case \"more\":\n            case \"insert\":\n            case \"strike\":\n            case \"line\":\n            case \"quote\":\n            case \"list\":\n            case \"ordered-list\":\n            case \"check\":\n            case \"code\":\n            case \"inline-code\":\n            case \"link\":\n            case \"table\":\n            case \"echarts\":\n            case \"math\":\n            case \"mermaid\":\n            case \"mindmap\":\n            case \"mermaid-sequence\":\n            case \"mermaid-gantt\":\n                menuItemObj = new MenuItem(vditor, menuItem);\n                break;\n            case \"emoji\":\n                menuItemObj = new Emoji(vditor, menuItem);\n                break;\n            case \"headings\":\n                menuItemObj = new Headings(vditor, menuItem);\n                break;\n            case \"|\":\n                menuItemObj = new Divider('vertical');\n                break;\n            case \"-\":\n                menuItemObj = new Divider('horizontal');\n                break;\n            case \"br\":\n                menuItemObj = new Br();\n                break;\n            case \"undo\":\n                menuItemObj = new Undo(vditor, menuItem);\n                break;\n            case \"redo\":\n                menuItemObj = new Redo(vditor, menuItem);\n                break;\n            case \"help\":\n                menuItemObj = new Help(vditor, menuItem);\n                break;\n            case \"both\":\n                menuItemObj = new Both(vditor, menuItem);\n                break;\n            case \"preview\":\n                menuItemObj = new Preview_Preview(vditor, menuItem);\n                break;\n            case \"fullscreen\":\n                menuItemObj = new Fullscreen(vditor, menuItem);\n                break;\n            case \"image\":\n            case \"video\":\n            case \"upload\":\n                menuItemObj = new Upload_Upload(vditor, menuItem);\n                break;\n            case \"record\":\n                menuItemObj = new Record(vditor, menuItem);\n                break;\n            case \"info\":\n                menuItemObj = new Info(vditor, menuItem);\n                break;\n            case \"edit-mode\":\n                menuItemObj = new EditMode(vditor, menuItem);\n                break;\n            case \"devtools\":\n                menuItemObj = new Devtools(vditor, menuItem);\n                break;\n            case \"outdent\":\n                menuItemObj = new Outdent(vditor, menuItem);\n                break;\n            case \"indent\":\n                menuItemObj = new Indent(vditor, menuItem);\n                break;\n            case \"outline\":\n                menuItemObj = new Outline_Outline(vditor, menuItem);\n                break;\n            case \"insert-after\":\n                menuItemObj = new InsertAfter(vditor, menuItem);\n                break;\n            case \"insert-before\":\n                menuItemObj = new InsertBefore(vditor, menuItem);\n                break;\n            case \"code-theme\":\n                menuItemObj = new CodeTheme(vditor, menuItem);\n                break;\n            case \"content-theme\":\n                menuItemObj = new ContentTheme(vditor, menuItem);\n                break;\n            case \"export\":\n                menuItemObj = new Export(vditor, menuItem);\n                break;\n            case \"copy\":\n                menuItemObj = new Copy(vditor, menuItem);\n                break;\n            default:\n                menuItemObj = new Custom(vditor, menuItem);\n                break;\n        }\n        if (!menuItemObj) {\n            return;\n        }\n        var key = menuItem.name;\n        if (key === \"br\" || key === \"|\") {\n            key = key + index;\n        }\n        this.elements[key] = menuItemObj.element;\n        return menuItemObj.element;\n    };\n    return Toolbar;\n}());\n\n\n// EXTERNAL MODULE: ./node_modules/.store/diff-match-patch@1.0.5/node_modules/diff-match-patch/index.js\nvar diff_match_patch = __webpack_require__(594);\n;// ./src/ts/undo/index.ts\n\n\n\n\n\n\n\n\n\nvar undo_Undo = /** @class */ (function () {\n    function Undo() {\n        this.stackSize = 50;\n        this.resetStack();\n        // @ts-ignore\n        this.dmp = new diff_match_patch();\n    }\n    Undo.prototype.clearStack = function (vditor) {\n        this.resetStack();\n        this.resetIcon(vditor);\n    };\n    Undo.prototype.resetIcon = function (vditor) {\n        if (!vditor.toolbar) {\n            return;\n        }\n        if (this[vditor.currentMode].undoStack.length > 1) {\n            enableToolbar(vditor.toolbar.elements, [\"undo\"]);\n        }\n        else {\n            disableToolbar(vditor.toolbar.elements, [\"undo\"]);\n        }\n        if (this[vditor.currentMode].redoStack.length !== 0) {\n            enableToolbar(vditor.toolbar.elements, [\"redo\"]);\n        }\n        else {\n            disableToolbar(vditor.toolbar.elements, [\"redo\"]);\n        }\n    };\n    Undo.prototype.undo = function (vditor) {\n        if (vditor[vditor.currentMode].element.getAttribute(\"contenteditable\") === \"false\") {\n            return;\n        }\n        if (this[vditor.currentMode].undoStack.length < 2) {\n            return;\n        }\n        var state = this[vditor.currentMode].undoStack.pop();\n        if (!state) {\n            return;\n        }\n        this[vditor.currentMode].redoStack.push(state);\n        this.renderDiff(state, vditor);\n        this[vditor.currentMode].hasUndo = true;\n        // undo 操作后，需要关闭 hint\n        hidePanel(vditor, [\"hint\"]);\n    };\n    Undo.prototype.redo = function (vditor) {\n        if (vditor[vditor.currentMode].element.getAttribute(\"contenteditable\") === \"false\") {\n            return;\n        }\n        var state = this[vditor.currentMode].redoStack.pop();\n        if (!state) {\n            return;\n        }\n        this[vditor.currentMode].undoStack.push(state);\n        this.renderDiff(state, vditor, true);\n    };\n    Undo.prototype.recordFirstPosition = function (vditor, event) {\n        if (getSelection().rangeCount === 0) {\n            return;\n        }\n        if (this[vditor.currentMode].undoStack.length !== 1 || this[vditor.currentMode].undoStack[0].length === 0 ||\n            this[vditor.currentMode].redoStack.length > 0) {\n            return;\n        }\n        if ((0,compatibility/* isFirefox */.gm)() && event.key === \"Backspace\") {\n            // Firefox 第一次删除无效\n            return;\n        }\n        if ((0,compatibility/* isSafari */.nr)()) {\n            // Safari keydown 在 input 之后，不需要重复记录历史\n            return;\n        }\n        var text = this.addCaret(vditor);\n        if (text.replace(\"<wbr>\", \"\").replace(\" vditor-ir__node--expand\", \"\")\n            !== this[vditor.currentMode].undoStack[0][0].diffs[0][1].replace(\"<wbr>\", \"\")) {\n            // 当还不没有存入 undo 栈时，按下 ctrl 后会覆盖 lastText\n            return;\n        }\n        this[vditor.currentMode].undoStack[0][0].diffs[0][1] = text;\n        this[vditor.currentMode].lastText = text;\n        // 不能添加 setSelectionFocus(cloneRange); 否则 windows chrome 首次输入会烂\n    };\n    Undo.prototype.addToUndoStack = function (vditor) {\n        // afterRenderEvent.ts 已经 debounce\n        var text = this.addCaret(vditor, true);\n        var diff = this.dmp.diff_main(text, this[vditor.currentMode].lastText, true);\n        var patchList = this.dmp.patch_make(text, this[vditor.currentMode].lastText, diff);\n        if (patchList.length === 0 && this[vditor.currentMode].undoStack.length > 0) {\n            return;\n        }\n        this[vditor.currentMode].lastText = text;\n        this[vditor.currentMode].undoStack.push(patchList);\n        if (this[vditor.currentMode].undoStack.length > this.stackSize) {\n            this[vditor.currentMode].undoStack.shift();\n        }\n        if (this[vditor.currentMode].hasUndo) {\n            this[vditor.currentMode].redoStack = [];\n            this[vditor.currentMode].hasUndo = false;\n            disableToolbar(vditor.toolbar.elements, [\"redo\"]);\n        }\n        if (this[vditor.currentMode].undoStack.length > 1) {\n            enableToolbar(vditor.toolbar.elements, [\"undo\"]);\n        }\n    };\n    Undo.prototype.renderDiff = function (state, vditor, isRedo) {\n        if (isRedo === void 0) { isRedo = false; }\n        var text;\n        if (isRedo) {\n            var redoPatchList = this.dmp.patch_deepCopy(state).reverse();\n            redoPatchList.forEach(function (patch) {\n                patch.diffs.forEach(function (diff) {\n                    diff[0] = -diff[0];\n                });\n            });\n            text = this.dmp.patch_apply(redoPatchList, this[vditor.currentMode].lastText)[0];\n        }\n        else {\n            text = this.dmp.patch_apply(state, this[vditor.currentMode].lastText)[0];\n        }\n        this[vditor.currentMode].lastText = text;\n        vditor[vditor.currentMode].element.innerHTML = text;\n        if (vditor.currentMode !== \"sv\") {\n            vditor[vditor.currentMode].element.querySelectorAll(\".vditor-\".concat(vditor.currentMode, \"__preview\"))\n                .forEach(function (blockElement) {\n                if (blockElement.parentElement.querySelector(\".language-echarts\")) {\n                    if (vditor.currentMode === \"ir\") {\n                        blockElement.parentElement.outerHTML = vditor.lute.SpinVditorIRDOM(blockElement.parentElement.outerHTML);\n                    }\n                    else {\n                        blockElement.parentElement.outerHTML = vditor.lute.SpinVditorDOM(blockElement.parentElement.outerHTML);\n                    }\n                }\n            });\n            vditor[vditor.currentMode].element.querySelectorAll(\".vditor-\".concat(vditor.currentMode, \"__preview[data-render='2']\"))\n                .forEach(function (blockElement) {\n                processCodeRender(blockElement, vditor);\n            });\n        }\n        if (!vditor[vditor.currentMode].element.querySelector(\"wbr\")) {\n            // Safari 第一次输入没有光标，需手动定位到结尾\n            var range = getSelection().getRangeAt(0);\n            range.setEndBefore(vditor[vditor.currentMode].element);\n            range.collapse(false);\n        }\n        else {\n            (0,selection/* setRangeByWbr */.ir)(vditor[vditor.currentMode].element, vditor[vditor.currentMode].element.ownerDocument.createRange());\n            scrollCenter(vditor);\n        }\n        renderToc(vditor);\n        execAfterRender(vditor, {\n            enableAddUndoStack: false,\n            enableHint: false,\n            enableInput: true,\n        });\n        highlightToolbar(vditor);\n        vditor[vditor.currentMode].element.querySelectorAll(\".vditor-\".concat(vditor.currentMode, \"__preview[data-render='2']\"))\n            .forEach(function (item) {\n            processCodeRender(item, vditor);\n        });\n        if (this[vditor.currentMode].undoStack.length > 1) {\n            enableToolbar(vditor.toolbar.elements, [\"undo\"]);\n        }\n        else {\n            disableToolbar(vditor.toolbar.elements, [\"undo\"]);\n        }\n        if (this[vditor.currentMode].redoStack.length !== 0) {\n            enableToolbar(vditor.toolbar.elements, [\"redo\"]);\n        }\n        else {\n            disableToolbar(vditor.toolbar.elements, [\"redo\"]);\n        }\n    };\n    Undo.prototype.resetStack = function () {\n        this.ir = {\n            hasUndo: false,\n            lastText: \"\",\n            redoStack: [],\n            undoStack: [],\n        };\n        this.sv = {\n            hasUndo: false,\n            lastText: \"\",\n            redoStack: [],\n            undoStack: [],\n        };\n        this.wysiwyg = {\n            hasUndo: false,\n            lastText: \"\",\n            redoStack: [],\n            undoStack: [],\n        };\n    };\n    Undo.prototype.addCaret = function (vditor, setFocus) {\n        if (setFocus === void 0) { setFocus = false; }\n        var cloneRange;\n        if (getSelection().rangeCount !== 0 && !vditor[vditor.currentMode].element.querySelector(\"wbr\")) {\n            var range = getSelection().getRangeAt(0);\n            if (vditor[vditor.currentMode].element.contains(range.startContainer)) {\n                cloneRange = range.cloneRange();\n                var wbrElement = document.createElement(\"span\");\n                wbrElement.className = \"vditor-wbr\";\n                range.insertNode(wbrElement);\n            }\n        }\n        // 移除数学公式、echart 渲染 https://github.com/Vanessa219/vditor/issues/1738\n        var cloneElement = vditor[vditor.currentMode].element.cloneNode(true);\n        cloneElement.querySelectorAll(\".vditor-\".concat(vditor.currentMode, \"__preview[data-render='1']\"))\n            .forEach(function (item) {\n            if (!item.firstElementChild) {\n                return;\n            }\n            if (item.firstElementChild.classList.contains(\"language-echarts\") ||\n                item.firstElementChild.classList.contains(\"language-plantuml\") ||\n                item.firstElementChild.classList.contains(\"language-mindmap\")) {\n                item.firstElementChild.removeAttribute(\"_echarts_instance_\");\n                item.firstElementChild.removeAttribute(\"data-processed\");\n                item.firstElementChild.innerHTML = item.previousElementSibling.firstElementChild.innerHTML;\n                item.setAttribute(\"data-render\", \"2\");\n            }\n            else if (item.firstElementChild.classList.contains(\"language-math\")) {\n                item.setAttribute(\"data-render\", \"2\");\n                item.firstElementChild.textContent = item.firstElementChild.getAttribute(\"data-math\");\n                item.firstElementChild.removeAttribute(\"data-math\");\n            }\n        });\n        var text = cloneElement.innerHTML;\n        vditor[vditor.currentMode].element.querySelectorAll(\".vditor-wbr\").forEach(function (item) {\n            item.remove();\n            // 使用 item.outerHTML = \"\" 会产生 https://github.com/Vanessa219/vditor/pull/686;\n        });\n        if (setFocus && cloneRange) {\n            (0,selection/* setSelectionFocus */.jl)(cloneRange);\n        }\n        return text.replace('<span class=\"vditor-wbr\"></span>', \"<wbr>\");\n    };\n    return Undo;\n}());\n\n\n// EXTERNAL MODULE: ./src/ts/util/merge.ts\nvar merge = __webpack_require__(600);\n;// ./src/ts/util/Options.ts\n\n\nvar Options = /** @class */ (function () {\n    function Options(options) {\n        this.defaultOptions = {\n            rtl: false,\n            after: undefined,\n            cache: {\n                enable: true,\n            },\n            cdn: constants/* Constants */.Y.CDN,\n            classes: {\n                preview: \"\",\n            },\n            comment: {\n                enable: false,\n            },\n            counter: {\n                enable: false,\n                type: \"markdown\",\n            },\n            customRenders: [],\n            debugger: false,\n            fullscreen: {\n                index: 90,\n            },\n            height: \"auto\",\n            hint: {\n                delay: 200,\n                emoji: {\n                    \"+1\": \"👍\",\n                    \"-1\": \"👎\",\n                    \"confused\": \"😕\",\n                    \"eyes\": \"👀️\",\n                    \"heart\": \"❤️\",\n                    \"rocket\": \"🚀️\",\n                    \"smile\": \"😄\",\n                    \"tada\": \"🎉️\",\n                },\n                emojiPath: \"\".concat(constants/* Constants */.Y.CDN, \"/dist/images/emoji\"),\n                extend: [],\n                parse: true,\n            },\n            icon: \"ant\",\n            lang: \"zh_CN\",\n            mode: \"ir\",\n            outline: {\n                enable: false,\n                position: \"left\",\n            },\n            placeholder: \"\",\n            preview: {\n                actions: [\"desktop\", \"tablet\", \"mobile\", \"mp-wechat\", \"zhihu\"],\n                delay: 1000,\n                hljs: constants/* Constants */.Y.HLJS_OPTIONS,\n                markdown: constants/* Constants */.Y.MARKDOWN_OPTIONS,\n                math: constants/* Constants */.Y.MATH_OPTIONS,\n                maxWidth: 800,\n                mode: \"both\",\n                theme: constants/* Constants */.Y.THEME_OPTIONS,\n                render: {\n                    media: {\n                        enable: true,\n                    }\n                }\n            },\n            link: {\n                isOpen: true,\n            },\n            resize: {\n                enable: false,\n                position: \"bottom\",\n            },\n            theme: \"classic\",\n            toolbar: [\n                \"emoji\",\n                \"headings\",\n                \"bold\",\n                \"italic\",\n                \"strike\",\n                \"link\",\n                \"|\",\n                \"list\",\n                \"ordered-list\",\n                \"check\",\n                \"outdent\",\n                \"indent\",\n                \"|\",\n                \"quote\",\n                \"line\",\n                \"code\",\n                \"inline-code\",\n                \"insert-before\",\n                \"insert-after\",\n                \"|\",\n                \"upload\",\n                \"record\",\n                \"table\",\n                \"|\",\n                \"undo\",\n                \"redo\",\n                \"|\",\n                \"fullscreen\",\n                \"edit-mode\",\n                {\n                    name: \"more\",\n                    toolbar: [\n                        \"both\",\n                        \"code-theme\",\n                        \"content-theme\",\n                        \"export\",\n                        \"outline\",\n                        \"preview\",\n                        \"devtools\",\n                        \"info\",\n                        \"help\",\n                    ],\n                },\n            ],\n            toolbarConfig: {\n                hide: false,\n                pin: false,\n            },\n            typewriterMode: false,\n            undoDelay: 800,\n            upload: {\n                extraData: {},\n                fieldName: \"file[]\",\n                filename: function (name) { return name.replace(/\\W/g, \"\"); },\n                linkToImgUrl: \"\",\n                max: 10 * 1024 * 1024,\n                multiple: true,\n                url: \"\",\n                withCredentials: false,\n            },\n            image: {\n                isPreview: true,\n                extraData: {},\n                fieldName: \"file[]\",\n                filename: function (name) { return name.replace(/\\W/g, \"\"); },\n                linkToImgUrl: \"\",\n                max: 10 * 1024 * 1024,\n                multiple: true,\n                url: \"\",\n                withCredentials: false,\n            },\n            video: {\n                extraData: {},\n                fieldName: \"file[]\",\n                filename: function (name) { return name.replace(/\\W/g, \"\"); },\n                linkToImgUrl: \"\",\n                max: 10 * 1024 * 1024,\n                multiple: true,\n                url: \"\",\n                withCredentials: false,\n            },\n            value: \"\",\n            width: \"auto\",\n        };\n        this.options = options;\n    }\n    Options.prototype.merge = function () {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n        if (this.options) {\n            if (this.options.toolbar) {\n                this.options.toolbar = this.mergeToolbar(this.options.toolbar);\n            }\n            else {\n                this.options.toolbar = this.mergeToolbar(this.defaultOptions.toolbar);\n            }\n            if ((_b = (_a = this.options.preview) === null || _a === void 0 ? void 0 : _a.theme) === null || _b === void 0 ? void 0 : _b.list) {\n                this.defaultOptions.preview.theme.list = this.options.preview.theme.list;\n            }\n            if ((_e = (_d = (_c = this.options.preview) === null || _c === void 0 ? void 0 : _c.render) === null || _d === void 0 ? void 0 : _d.media) === null || _e === void 0 ? void 0 : _e.enable) {\n                this.defaultOptions.preview.render.media.enable = this.options.preview.render.media.enable;\n            }\n            if ((_f = this.options.hint) === null || _f === void 0 ? void 0 : _f.emoji) {\n                this.defaultOptions.hint.emoji = this.options.hint.emoji;\n            }\n            if (this.options.comment) {\n                this.defaultOptions.comment = this.options.comment;\n            }\n            if (this.options.cdn) {\n                if (!((_h = (_g = this.options.preview) === null || _g === void 0 ? void 0 : _g.theme) === null || _h === void 0 ? void 0 : _h.path)) {\n                    this.defaultOptions.preview.theme.path = \"\".concat(this.options.cdn, \"/dist/css/content-theme\");\n                }\n                if (!((_j = this.options.hint) === null || _j === void 0 ? void 0 : _j.emojiPath)) {\n                    this.defaultOptions.hint.emojiPath = \"\".concat(this.options.cdn, \"/dist/images/emoji\");\n                }\n            }\n        }\n        var mergedOptions = (0,merge/* merge */.h)(this.defaultOptions, this.options);\n        if (mergedOptions.cache.enable && !mergedOptions.cache.id) {\n            throw new Error(\"need options.cache.id, see https://ld246.com/article/1549638745630#options\");\n        }\n        return mergedOptions;\n    };\n    Options.prototype.mergeToolbar = function (toolbar) {\n        var _this = this;\n        var toolbarItem = [\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-export\"></use></svg>',\n                name: \"export\",\n                tipPosition: \"ne\",\n            },\n            {\n                hotkey: \"⌘E\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-emoji\"></use></svg>',\n                name: \"emoji\",\n                tipPosition: \"ne\",\n            },\n            {\n                hotkey: \"⌘H\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-headings\"></use></svg>',\n                name: \"headings\",\n                tipPosition: \"ne\",\n            },\n            {\n                hotkey: \"⌘B\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-bold\"></use></svg>',\n                name: \"bold\",\n                prefix: \"**\",\n                suffix: \"**\",\n                tipPosition: \"ne\",\n            },\n            {\n                hotkey: \"⌘I\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-italic\"></use></svg>',\n                name: \"italic\",\n                prefix: \"*\",\n                suffix: \"*\",\n                tipPosition: \"ne\",\n            },\n            {\n                hotkey: \"⌘D\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-strike\"></use></svg>',\n                name: \"strike\",\n                prefix: \"~~\",\n                suffix: \"~~\",\n                tipPosition: \"ne\",\n            },\n            {\n                hotkey: \"⌘K\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-link\"></use></svg>',\n                name: \"link\",\n                prefix: \"[\",\n                suffix: \"](https://)\",\n                tipPosition: \"n\",\n            },\n            {\n                name: \"|\",\n            },\n            {\n                name: \"-\",\n            },\n            {\n                hotkey: \"⌘L\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-list\"></use></svg>',\n                name: \"list\",\n                prefix: \"* \",\n                tipPosition: \"n\",\n            },\n            {\n                hotkey: \"⌘O\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-ordered-list\"></use></svg>',\n                name: \"ordered-list\",\n                prefix: \"1. \",\n                tipPosition: \"n\",\n            },\n            {\n                hotkey: \"⌘J\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-check\"></use></svg>',\n                name: \"check\",\n                prefix: \"* [ ] \",\n                tipPosition: \"n\",\n            },\n            {\n                hotkey: \"⇧⌘I\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-outdent\"></use></svg>',\n                name: \"outdent\",\n                tipPosition: \"n\",\n            },\n            {\n                hotkey: \"⇧⌘O\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-indent\"></use></svg>',\n                name: \"indent\",\n                tipPosition: \"n\",\n            },\n            {\n                name: \"|\",\n            },\n            {\n                hotkey: \"⌘;\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-quote\"></use></svg>',\n                name: \"quote\",\n                prefix: \"> \",\n                tipPosition: \"n\",\n            },\n            {\n                hotkey: \"⇧⌘H\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-line\"></use></svg>',\n                name: \"line\",\n                prefix: \"---\",\n                tipPosition: \"n\",\n            },\n            {\n                hotkey: \"⌘U\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-code\"></use></svg>',\n                name: \"code\",\n                prefix: \"```\",\n                suffix: \"\\n```\",\n                tipPosition: \"n\",\n            },\n            {\n                hotkey: \"⌘G\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-inline-code\"></use></svg>',\n                name: \"inline-code\",\n                prefix: \"`\",\n                suffix: \"`\",\n                tipPosition: \"n\",\n            },\n            {\n                hotkey: \"⇧⌘B\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-before\"></use></svg>',\n                name: \"insert-before\",\n                tipPosition: \"n\",\n            },\n            {\n                hotkey: \"⇧⌘E\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-after\"></use></svg>',\n                name: \"insert-after\",\n                tipPosition: \"n\",\n            },\n            {\n                name: \"|\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-upload\"></use></svg>',\n                name: \"upload\",\n                tipPosition: \"n\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-video\"></use></svg>',\n                name: \"video\",\n                tipPosition: \"n\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-record\"></use></svg>',\n                name: \"record\",\n                tipPosition: \"n\",\n            },\n            {\n                hotkey: \"⌘M\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-table\"></use></svg>',\n                name: \"table\",\n                prefix: \"| col1\",\n                suffix: \" | col2 | col3 |\\n| --- | --- | --- |\\n|  |  |  |\\n|  |  |  |\",\n                tipPosition: \"n\",\n            },\n            {\n                name: \"|\",\n            },\n            {\n                hotkey: \"⌘Z\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-undo\"></use></svg>',\n                name: \"undo\",\n                tipPosition: \"nw\",\n            },\n            {\n                hotkey: \"⌘Y\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-redo\"></use></svg>',\n                name: \"redo\",\n                tipPosition: \"nw\",\n            },\n            {\n                name: \"|\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-more\"></use></svg>',\n                name: \"more\",\n                tipPosition: \"e\",\n            },\n            {\n                hotkey: \"⌘'\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-fullscreen\"></use></svg>',\n                name: \"fullscreen\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-edit\"></use></svg>',\n                name: \"edit-mode\",\n                tipPosition: \"nw\",\n            },\n            {\n                hotkey: \"⌘P\",\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-both\"></use></svg>',\n                name: \"both\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-preview\"></use></svg>',\n                name: \"preview\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-align-center\"></use></svg>',\n                name: \"outline\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-theme\"></use></svg>',\n                name: \"content-theme\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-code-theme\"></use></svg>',\n                name: \"code-theme\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-bug\"></use></svg>',\n                name: \"devtools\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-info\"></use></svg>',\n                name: \"info\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-help\"></use></svg>',\n                name: \"help\",\n                tipPosition: \"nw\",\n            },\n            {\n                name: \"br\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-insert\"></use></svg>',\n                name: \"insert\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-copy\"></use></svg>',\n                name: \"copy\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-image\"></use></svg>',\n                name: \"image\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-echarts\"></use></svg>',\n                name: \"echarts\",\n                type: 'echarts',\n                example: \"{\\n  \\\"title\\\": { \\\"text\\\": \\\"\\u7F51\\u7AD9\\u8BBF\\u95EE\\u7EDF\\u8BA1\\\" },\\n  \\\"tooltip\\\": { \\\"trigger\\\": \\\"axis\\\" },\\n  \\\"legend\\\": { \\\"data\\\": [\\\"\\u8BBF\\u95EE\\u91CF\\\", \\\"\\u7528\\u6237\\u6570\\\", \\\"\\u65B0\\u589E\\u7528\\u6237\\\"] },\\n  \\\"xAxis\\\": [{\\n      \\\"type\\\": \\\"category\\\",\\n      \\\"data\\\": [\\\"\\u5468\\u4E00\\\",\\\"\\u5468\\u4E8C\\\",\\\"\\u5468\\u4E09\\\",\\\"\\u5468\\u56DB\\\",\\\"\\u5468\\u4E94\\\",\\\"\\u5468\\u516D\\\",\\\"\\u5468\\u65E5\\\"],\\n      \\\"axisTick\\\": { \\\"show\\\": false },\\n      \\\"axisLine\\\": { \\\"show\\\": true }\\n  }],\\n  \\\"yAxis\\\": [{ \\\"type\\\": \\\"value\\\", \\\"name\\\": \\\"\\u8BBF\\u95EE\\u91CF\\\" }],\\n  \\\"series\\\": [\\n    {\\n      \\\"name\\\": \\\"\\u8BBF\\u95EE\\u91CF\\\", \\\"type\\\": \\\"line\\\", \\\"smooth\\\": true, \\\"itemStyle\\\": { \\\"color\\\": \\\"#d23f31\\\" },\\n      \\\"data\\\": [120, 132, 101, 134, 90, 230, 210]\\n    },\\n    {\\n      \\\"name\\\": \\\"\\u7528\\u6237\\u6570\\\", \\\"type\\\": \\\"line\\\", \\\"smooth\\\": true, \\\"itemStyle\\\": { \\\"color\\\": \\\"#f1e05a\\\" },\\n      \\\"data\\\": [220, 182, 191, 234, 290, 330, 310]\\n    },\\n    {\\n      \\\"name\\\": \\\"\\u65B0\\u589E\\u7528\\u6237\\\", \\\"type\\\": \\\"bar\\\", \\\"itemStyle\\\": { \\\"color\\\": \\\"#4285f4\\\" },\\n      \\\"data\\\": [45, 52, 38, 54, 65, 63, 50]\\n    }\\n  ]\\n}\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-math\"></use></svg>',\n                name: \"math\",\n                type: 'math',\n                example: \"f(x) = \\\\frac{1}{\\\\sigma\\\\sqrt{2\\\\pi}}e^{-\\\\frac{1}{2}(\\\\frac{x-\\\\mu}{\\\\sigma})^2}\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-mindmap\"></use></svg>',\n                name: \"mindmap\",\n                type: 'mindmap',\n                example: \"- \\u9879\\u76EE\\u7BA1\\u7406\\n- \\u9700\\u6C42\\u5206\\u6790\\n  - \\u7528\\u6237\\u9700\\u6C42\\u6536\\u96C6\\n  - \\u529F\\u80FD\\u9700\\u6C42\\u5206\\u6790\\n- \\u5F00\\u53D1\\u9636\\u6BB5\\n  - \\u524D\\u7AEF\\u5F00\\u53D1\\n    - UI\\u8BBE\\u8BA1\\n    - \\u4EA4\\u4E92\\u5B9E\\u73B0\\n  - \\u540E\\u7AEF\\u5F00\\u53D1\\n    - \\u6570\\u636E\\u5E93\\u8BBE\\u8BA1\\n    - API\\u5B9E\\u73B0\\n- \\u6D4B\\u8BD5\\u9636\\u6BB5\\n  - \\u5355\\u5143\\u6D4B\\u8BD5\\n  - \\u96C6\\u6210\\u6D4B\\u8BD5\\n\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-flowchart\"></use></svg>',\n                name: \"mermaid\",\n                type: 'mermaid',\n                example: \"\\ngraph TD\\n    A[\\u5F00\\u59CB] --> B{\\u662F\\u5426\\u767B\\u5F55?}\\n    B -->|\\u662F| C[\\u663E\\u793A\\u4E3B\\u9875]\\n    B -->|\\u5426| D[\\u663E\\u793A\\u767B\\u5F55\\u9875]\\n    D --> E[\\u7528\\u6237\\u8F93\\u5165]\\n    E --> F{\\u9A8C\\u8BC1\\u901A\\u8FC7?}\\n    F -->|\\u662F| C\\n    F -->|\\u5426| D\\n\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-gantt\"></use></svg>',\n                name: \"mermaid-gantt\",\n                type: 'mermaid',\n                example: \"\\ngantt\\n    title \\u9879\\u76EE\\u5F00\\u53D1\\u8BA1\\u5212\\n    dateFormat  YYYY-MM-DD\\n    section \\u89C4\\u5212\\u9636\\u6BB5\\n    \\u9700\\u6C42\\u5206\\u6790     :a1, 2023-01-01, 7d\\n    \\u6982\\u8981\\u8BBE\\u8BA1     :a2, after a1, 5d\\n    section \\u5F00\\u53D1\\u9636\\u6BB5\\n    \\u8BE6\\u7EC6\\u8BBE\\u8BA1     :a3, after a2, 10d\\n    \\u7F16\\u7801\\u5B9E\\u73B0     :a4, after a3, 15d\\n    section \\u6D4B\\u8BD5\\u9636\\u6BB5\\n    \\u5355\\u5143\\u6D4B\\u8BD5     :a5, after a4, 5d\\n    \\u7CFB\\u7EDF\\u6D4B\\u8BD5     :a6, after a5, 10d\\n\",\n                tipPosition: \"nw\",\n            },\n            {\n                icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><use xlink:href=\"#vditor-icon-sequence\"></use></svg>',\n                name: \"mermaid-sequence\",\n                type: 'mermaid',\n                example: \"\\nsequenceDiagram\\n    participant \\u7528\\u6237\\n    participant \\u524D\\u7AEF\\n    participant \\u670D\\u52A1\\u5668\\n    participant \\u6570\\u636E\\u5E93\\n\\n    \\u7528\\u6237->>\\u524D\\u7AEF: \\u70B9\\u51FB\\u767B\\u5F55\\u6309\\u94AE\\n    \\u524D\\u7AEF->>\\u670D\\u52A1\\u5668: \\u53D1\\u9001\\u767B\\u5F55\\u8BF7\\u6C42\\n    \\u670D\\u52A1\\u5668->>\\u6570\\u636E\\u5E93: \\u67E5\\u8BE2\\u7528\\u6237\\u4FE1\\u606F\\n    \\u6570\\u636E\\u5E93-->>\\u670D\\u52A1\\u5668: \\u8FD4\\u56DE\\u7528\\u6237\\u6570\\u636E\\n    \\u670D\\u52A1\\u5668-->>\\u524D\\u7AEF: \\u8FD4\\u56DE\\u767B\\u5F55\\u7ED3\\u679C\\n    \\u524D\\u7AEF-->>\\u7528\\u6237: \\u663E\\u793A\\u767B\\u5F55\\u6210\\u529F/\\u5931\\u8D25\\n\",\n                tipPosition: \"nw\",\n            }\n        ];\n        var toolbarResult = [];\n        toolbar.forEach(function (menuItem) {\n            var currentMenuItem = menuItem;\n            toolbarItem.forEach(function (defaultMenuItem) {\n                if (typeof menuItem === \"string\" &&\n                    defaultMenuItem.name === menuItem) {\n                    currentMenuItem = defaultMenuItem;\n                }\n                if (typeof menuItem === \"object\" &&\n                    defaultMenuItem.name === menuItem.name) {\n                    currentMenuItem = Object.assign({}, defaultMenuItem, menuItem);\n                }\n            });\n            if (menuItem.toolbar) {\n                currentMenuItem.toolbar = _this.mergeToolbar(menuItem.toolbar);\n            }\n            toolbarResult.push(currentMenuItem);\n        });\n        return toolbarResult;\n    };\n    return Options;\n}());\n\n\n;// ./src/ts/wysiwyg/index.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar WYSIWYG = /** @class */ (function () {\n    function WYSIWYG(vditor) {\n        var _this = this;\n        this.composingLock = false;\n        this.commentIds = [];\n        var divElement = document.createElement(\"div\");\n        divElement.className = \"vditor-wysiwyg\";\n        divElement.innerHTML = \"<pre class=\\\"vditor-reset\\\" placeholder=\\\"\".concat(vditor.options.placeholder, \"\\\"\\n contenteditable=\\\"true\\\" spellcheck=\\\"false\\\"></pre>\\n<div class=\\\"vditor-panel vditor-panel--none\\\"></div>\\n<div class=\\\"vditor-panel vditor-panel--none\\\">\\n    <button type=\\\"button\\\" aria-label=\\\"\").concat(window.VditorI18n.comment, \"\\\" class=\\\"vditor-icon vditor-tooltipped vditor-tooltipped__n\\\">\\n        <svg><use xlink:href=\\\"#vditor-icon-comment\\\"></use></svg>\\n    </button>\\n</div>\");\n        this.element = divElement.firstElementChild;\n        this.popover = divElement.firstElementChild.nextElementSibling;\n        this.selectPopover = divElement.lastElementChild;\n        this.bindEvent(vditor);\n        focusEvent(vditor, this.element);\n        dblclickEvent(vditor, this.element);\n        blurEvent(vditor, this.element);\n        hotkeyEvent(vditor, this.element);\n        selectEvent(vditor, this.element);\n        dropEvent(vditor, this.element);\n        copyEvent(vditor, this.element, this.copy);\n        cutEvent(vditor, this.element, this.copy);\n        if (vditor.options.comment.enable) {\n            this.selectPopover.querySelector(\"button\").onclick = function () {\n                var id = Lute.NewNodeID();\n                var range = getSelection().getRangeAt(0);\n                var rangeClone = range.cloneRange();\n                var contents = range.extractContents();\n                var blockStartElement;\n                var blockEndElement;\n                var removeStart = false;\n                var removeEnd = false;\n                contents.childNodes.forEach(function (item, index) {\n                    var wrap = false;\n                    if (item.nodeType === 3) {\n                        wrap = true;\n                    }\n                    else if (!item.classList.contains(\"vditor-comment\")) {\n                        wrap = true;\n                    }\n                    else if (item.classList.contains(\"vditor-comment\")) {\n                        item.setAttribute(\"data-cmtids\", item.getAttribute(\"data-cmtids\") + \" \" + id);\n                    }\n                    if (wrap) {\n                        if (item.nodeType !== 3 && item.getAttribute(\"data-block\") === \"0\"\n                            && index === 0 && rangeClone.startOffset > 0) {\n                            item.innerHTML =\n                                \"<span class=\\\"vditor-comment\\\" data-cmtids=\\\"\".concat(id, \"\\\">\").concat(item.innerHTML, \"</span>\");\n                            blockStartElement = item;\n                        }\n                        else if (item.nodeType !== 3 && item.getAttribute(\"data-block\") === \"0\"\n                            && index === contents.childNodes.length - 1\n                            && rangeClone.endOffset < rangeClone.endContainer.textContent.length) {\n                            item.innerHTML =\n                                \"<span class=\\\"vditor-comment\\\" data-cmtids=\\\"\".concat(id, \"\\\">\").concat(item.innerHTML, \"</span>\");\n                            blockEndElement = item;\n                        }\n                        else if (item.nodeType !== 3 && item.getAttribute(\"data-block\") === \"0\") {\n                            if (index === 0) {\n                                removeStart = true;\n                            }\n                            else if (index === contents.childNodes.length - 1) {\n                                removeEnd = true;\n                            }\n                            item.innerHTML =\n                                \"<span class=\\\"vditor-comment\\\" data-cmtids=\\\"\".concat(id, \"\\\">\").concat(item.innerHTML, \"</span>\");\n                        }\n                        else {\n                            var commentElement = document.createElement(\"span\");\n                            commentElement.classList.add(\"vditor-comment\");\n                            commentElement.setAttribute(\"data-cmtids\", id);\n                            item.parentNode.insertBefore(commentElement, item);\n                            commentElement.appendChild(item);\n                        }\n                    }\n                });\n                var startElement = (0,hasClosest/* hasClosestBlock */.pt)(rangeClone.startContainer);\n                if (startElement) {\n                    if (blockStartElement) {\n                        startElement.insertAdjacentHTML(\"beforeend\", blockStartElement.innerHTML);\n                        blockStartElement.remove();\n                    }\n                    else if (startElement.textContent.trim().replace(constants/* Constants */.Y.ZWSP, \"\") === \"\" && removeStart) {\n                        startElement.remove();\n                    }\n                }\n                var endElement = (0,hasClosest/* hasClosestBlock */.pt)(rangeClone.endContainer);\n                if (endElement) {\n                    if (blockEndElement) {\n                        endElement.insertAdjacentHTML(\"afterbegin\", blockEndElement.innerHTML);\n                        blockEndElement.remove();\n                    }\n                    else if (endElement.textContent.trim().replace(constants/* Constants */.Y.ZWSP, \"\") === \"\" && removeEnd) {\n                        endElement.remove();\n                    }\n                }\n                range.insertNode(contents);\n                vditor.options.comment.add(id, range.toString(), _this.getComments(vditor, true));\n                afterRenderEvent(vditor, {\n                    enableAddUndoStack: true,\n                    enableHint: false,\n                    enableInput: false,\n                });\n                _this.hideComment();\n            };\n        }\n    }\n    WYSIWYG.prototype.getComments = function (vditor, getData) {\n        var _this = this;\n        if (getData === void 0) { getData = false; }\n        if (vditor.currentMode === \"wysiwyg\" && vditor.options.comment.enable) {\n            this.commentIds = [];\n            this.element.querySelectorAll(\".vditor-comment\").forEach(function (item) {\n                _this.commentIds =\n                    _this.commentIds.concat(item.getAttribute(\"data-cmtids\").split(\" \"));\n            });\n            this.commentIds = Array.from(new Set(this.commentIds));\n            var comments_1 = [];\n            if (getData) {\n                this.commentIds.forEach(function (id) {\n                    comments_1.push({\n                        id: id,\n                        top: _this.element.querySelector(\".vditor-comment[data-cmtids=\\\"\".concat(id, \"\\\"]\")).offsetTop,\n                    });\n                });\n                return comments_1;\n            }\n        }\n        else {\n            return [];\n        }\n    };\n    WYSIWYG.prototype.triggerRemoveComment = function (vditor) {\n        var difference = function (a, b) {\n            var s = new Set(b);\n            return a.filter(function (x) { return !s.has(x); });\n        };\n        if (vditor.currentMode === \"wysiwyg\" && vditor.options.comment.enable && vditor.wysiwyg.commentIds.length > 0) {\n            var oldIds = JSON.parse(JSON.stringify(this.commentIds));\n            this.getComments(vditor);\n            var removedIds = difference(oldIds, this.commentIds);\n            if (removedIds.length > 0) {\n                vditor.options.comment.remove(removedIds);\n            }\n        }\n    };\n    WYSIWYG.prototype.showComment = function () {\n        var position = (0,selection/* getCursorPosition */.Ey)(this.element);\n        this.selectPopover.setAttribute(\"style\", \"left:\".concat(position.left, \"px;display:block;top:\").concat(Math.max(-8, position.top - 21), \"px\"));\n    };\n    WYSIWYG.prototype.hideComment = function () {\n        this.selectPopover.setAttribute(\"style\", \"display:none\");\n    };\n    WYSIWYG.prototype.unbindListener = function () {\n        window.removeEventListener(\"scroll\", this.scrollListener);\n    };\n    WYSIWYG.prototype.copy = function (event, vditor) {\n        var range = getSelection().getRangeAt(0);\n        if (range.toString() === \"\") {\n            return;\n        }\n        event.stopPropagation();\n        event.preventDefault();\n        var codeElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.startContainer, \"CODE\");\n        var codeEndElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.endContainer, \"CODE\");\n        if (codeElement && codeEndElement && codeEndElement.isSameNode(codeElement)) {\n            var codeText = \"\";\n            if (codeElement.parentElement.tagName === \"PRE\") {\n                codeText = range.toString();\n            }\n            else {\n                codeText = \"`\" + range.toString() + \"`\";\n            }\n            event.clipboardData.setData(\"text/plain\", codeText);\n            event.clipboardData.setData(\"text/html\", \"\");\n            return;\n        }\n        var aElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.startContainer, \"A\");\n        var aEndElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(range.endContainer, \"A\");\n        if (aElement && aEndElement && aEndElement.isSameNode(aElement)) {\n            var aTitle = aElement.getAttribute(\"title\") || \"\";\n            if (aTitle) {\n                aTitle = \" \\\"\".concat(aTitle, \"\\\"\");\n            }\n            event.clipboardData.setData(\"text/plain\", \"[\".concat(range.toString(), \"](\").concat(aElement.getAttribute(\"href\")).concat(aTitle, \")\"));\n            event.clipboardData.setData(\"text/html\", \"\");\n            return;\n        }\n        var tempElement = document.createElement(\"div\");\n        tempElement.appendChild(range.cloneContents());\n        event.clipboardData.setData(\"text/plain\", vditor.lute.VditorDOM2Md(tempElement.innerHTML).trim());\n        event.clipboardData.setData(\"text/html\", \"\");\n    };\n    WYSIWYG.prototype.bindEvent = function (vditor) {\n        var _this = this;\n        this.unbindListener();\n        window.addEventListener(\"scroll\", this.scrollListener = function () {\n            hidePanel(vditor, [\"hint\"]);\n            if (_this.popover.style.display !== \"block\" || _this.selectPopover.style.display !== \"block\") {\n                return;\n            }\n            var top = parseInt(_this.popover.getAttribute(\"data-top\"), 10);\n            if (vditor.options.height !== \"auto\") {\n                if (vditor.options.toolbarConfig.pin && vditor.toolbar.element.getBoundingClientRect().top === 0) {\n                    var popoverTop = Math.max(window.scrollY - vditor.element.offsetTop - 8, Math.min(top - vditor.wysiwyg.element.scrollTop, _this.element.clientHeight - 21)) + \"px\";\n                    if (_this.popover.style.display === \"block\") {\n                        _this.popover.style.top = popoverTop;\n                    }\n                    if (_this.selectPopover.style.display === \"block\") {\n                        _this.selectPopover.style.top = popoverTop;\n                    }\n                }\n                return;\n            }\n            else if (!vditor.options.toolbarConfig.pin) {\n                return;\n            }\n            var popoverTop1 = Math.max(top, (window.scrollY - vditor.element.offsetTop - 8)) + \"px\";\n            if (_this.popover.style.display === \"block\") {\n                _this.popover.style.top = popoverTop1;\n            }\n            if (_this.selectPopover.style.display === \"block\") {\n                _this.selectPopover.style.top = popoverTop1;\n            }\n        });\n        this.element.addEventListener(\"scroll\", function () {\n            hidePanel(vditor, [\"hint\"]);\n            if (vditor.options.comment && vditor.options.comment.enable && vditor.options.comment.scroll) {\n                vditor.options.comment.scroll(vditor.wysiwyg.element.scrollTop);\n            }\n            if (_this.popover.style.display !== \"block\") {\n                return;\n            }\n            var top = parseInt(_this.popover.getAttribute(\"data-top\"), 10) - vditor.wysiwyg.element.scrollTop;\n            var max = -8;\n            if (vditor.options.toolbarConfig.pin && vditor.toolbar.element.getBoundingClientRect().top === 0) {\n                max = window.scrollY - vditor.element.offsetTop + max;\n            }\n            var topPx = Math.max(max, Math.min(top, _this.element.clientHeight - 21)) + \"px\";\n            _this.popover.style.top = topPx;\n            _this.selectPopover.style.top = topPx;\n        });\n        this.element.addEventListener(\"paste\", function (event) {\n            paste(vditor, event, {\n                pasteCode: function (code) {\n                    var range = (0,selection/* getEditorRange */.RN)(vditor);\n                    var node = document.createElement(\"template\");\n                    node.innerHTML = code;\n                    range.insertNode(node.content.cloneNode(true));\n                    var blockElement = (0,hasClosest/* hasClosestByAttribute */.Th)(range.startContainer, \"data-block\", \"0\");\n                    if (blockElement) {\n                        blockElement.outerHTML = vditor.lute.SpinVditorDOM(blockElement.outerHTML);\n                    }\n                    else {\n                        vditor.wysiwyg.element.innerHTML = vditor.lute.SpinVditorDOM(vditor.wysiwyg.element.innerHTML);\n                    }\n                    (0,selection/* setRangeByWbr */.ir)(vditor.wysiwyg.element, range);\n                },\n            });\n        });\n        // 中文处理\n        this.element.addEventListener(\"compositionstart\", function () {\n            _this.composingLock = true;\n        });\n        this.element.addEventListener(\"compositionend\", function (event) {\n            var headingElement = (0,hasClosestByHeadings/* hasClosestByHeadings */.c)(getSelection().getRangeAt(0).startContainer);\n            if (headingElement && headingElement.textContent === \"\") {\n                // heading 为空删除 https://github.com/Vanessa219/vditor/issues/150\n                renderToc(vditor);\n                return;\n            }\n            if (!(0,compatibility/* isFirefox */.gm)()) {\n                input_input(vditor, getSelection().getRangeAt(0).cloneRange(), event);\n            }\n            _this.composingLock = false;\n        });\n        this.element.addEventListener(\"input\", function (event) {\n            if (event.inputType === \"deleteByDrag\" || event.inputType === \"insertFromDrop\") {\n                // https://github.com/Vanessa219/vditor/issues/801 编辑器内容拖拽问题\n                return;\n            }\n            if (_this.preventInput) {\n                _this.preventInput = false;\n                afterRenderEvent(vditor);\n                return;\n            }\n            if (_this.composingLock || event.data === \"‘\" || event.data === \"“\" || event.data === \"《\") {\n                afterRenderEvent(vditor);\n                return;\n            }\n            var range = getSelection().getRangeAt(0);\n            var blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);\n            if (!blockElement) {\n                // 没有被块元素包裹\n                modifyPre(vditor, range);\n                blockElement = (0,hasClosest/* hasClosestBlock */.pt)(range.startContainer);\n            }\n            if (!blockElement) {\n                return;\n            }\n            // 前后空格处理\n            var startOffset = (0,selection/* getSelectPosition */.ED)(blockElement, vditor.wysiwyg.element, range).start;\n            // 开始可以输入空格\n            var startSpace = true;\n            for (var i = startOffset - 1; i > blockElement.textContent.substr(0, startOffset).lastIndexOf(\"\\n\"); i--) {\n                if (blockElement.textContent.charAt(i) !== \" \" &&\n                    // 多个 tab 前删除不形成代码块 https://github.com/Vanessa219/vditor/issues/162 1\n                    blockElement.textContent.charAt(i) !== \"\\t\") {\n                    startSpace = false;\n                    break;\n                }\n            }\n            if (startOffset === 0) {\n                startSpace = false;\n            }\n            // 结尾可以输入空格\n            var endSpace = true;\n            for (var i = startOffset - 1; i < blockElement.textContent.length; i++) {\n                if (blockElement.textContent.charAt(i) !== \" \" && blockElement.textContent.charAt(i) !== \"\\n\") {\n                    endSpace = false;\n                    break;\n                }\n            }\n            // https://github.com/Vanessa219/vditor/issues/729\n            if (endSpace && /^#{1,6} $/.test(blockElement.textContent)) {\n                endSpace = false;\n            }\n            var headingElement = (0,hasClosestByHeadings/* hasClosestByHeadings */.c)(getSelection().getRangeAt(0).startContainer);\n            if (headingElement && headingElement.textContent === \"\") {\n                // heading 为空删除 https://github.com/Vanessa219/vditor/issues/150\n                renderToc(vditor);\n                headingElement.remove();\n            }\n            if ((startSpace && blockElement.getAttribute(\"data-type\") !== \"code-block\")\n                || endSpace || isHeadingMD(blockElement.innerHTML) ||\n                (isHrMD(blockElement.innerHTML) && blockElement.previousElementSibling)) {\n                if (typeof vditor.options.input === \"function\") {\n                    vditor.options.input(getMarkdown(vditor));\n                }\n                return;\n            }\n            // https://github.com/Vanessa219/vditor/issues/1565\n            if (event.inputType === \"insertParagraph\" && _this.element.innerHTML === '<p><br></p><p><br></p>') {\n                blockElement.previousElementSibling.remove();\n            }\n            input_input(vditor, range, event);\n        });\n        this.element.addEventListener(\"click\", function (event) {\n            if (event.target.tagName === \"INPUT\") {\n                var checkElement = event.target;\n                if (checkElement.checked) {\n                    checkElement.setAttribute(\"checked\", \"checked\");\n                }\n                else {\n                    checkElement.removeAttribute(\"checked\");\n                }\n                _this.preventInput = true;\n                if (getSelection().rangeCount > 0) {\n                    (0,selection/* setSelectionFocus */.jl)(getSelection().getRangeAt(0));\n                }\n                afterRenderEvent(vditor);\n                return;\n            }\n            if (event.target.tagName === \"IMG\" &&\n                // plantuml 图片渲染不进行提示\n                !event.target.parentElement.classList.contains(\"vditor-wysiwyg__preview\")) {\n                if (event.target.getAttribute(\"data-type\") === \"link-ref\") {\n                    genLinkRefPopover(vditor, event.target);\n                }\n                else {\n                    genImagePopover(event, vditor);\n                }\n                return;\n            }\n            // 打开链接\n            var a = (0,hasClosest/* hasClosestByMatchTag */._Y)(event.target, \"A\");\n            if (a) {\n                if (vditor.options.link.click) {\n                    vditor.options.link.click(a);\n                }\n                else if (vditor.options.link.isOpen) {\n                    window.open(a.getAttribute(\"href\"));\n                }\n                event.preventDefault();\n                return;\n            }\n            var range = (0,selection/* getEditorRange */.RN)(vditor);\n            if (event.target.isEqualNode(_this.element) && _this.element.lastElementChild && range.collapsed) {\n                var lastRect = _this.element.lastElementChild.getBoundingClientRect();\n                if (event.y > lastRect.top + lastRect.height) {\n                    if (_this.element.lastElementChild.tagName === \"P\" &&\n                        _this.element.lastElementChild.textContent.trim().replace(constants/* Constants */.Y.ZWSP, \"\") === \"\") {\n                        range.selectNodeContents(_this.element.lastElementChild);\n                        range.collapse(false);\n                    }\n                    else {\n                        _this.element.insertAdjacentHTML(\"beforeend\", \"<p data-block=\\\"0\\\">\".concat(constants/* Constants */.Y.ZWSP, \"<wbr></p>\"));\n                        (0,selection/* setRangeByWbr */.ir)(_this.element, range);\n                    }\n                }\n            }\n            highlightToolbarWYSIWYG(vditor);\n            // 点击后光标落于预览区，需展开代码块\n            var previewElement = (0,hasClosest/* hasClosestByClassName */.KJ)(event.target, \"vditor-wysiwyg__preview\");\n            if (!previewElement) {\n                previewElement =\n                    (0,hasClosest/* hasClosestByClassName */.KJ)((0,selection/* getEditorRange */.RN)(vditor).startContainer, \"vditor-wysiwyg__preview\");\n            }\n            if (previewElement) {\n                showCode(previewElement, vditor);\n            }\n            clickToc(event, vditor);\n        });\n        this.element.addEventListener(\"keyup\", function (event) {\n            if (event.isComposing || (0,compatibility/* isCtrl */._0)(event)) {\n                return;\n            }\n            // 除 md 处理、cell 内换行、table 添加新行/列、代码块语言切换、block render 换行、跳出/逐层跳出 blockquote、h6 换行、\n            // 任务列表换行、软换行外需在换行时调整文档位置\n            if (event.key === \"Enter\") {\n                scrollCenter(vditor);\n            }\n            if ((event.key === \"Backspace\" || event.key === \"Delete\") &&\n                vditor.wysiwyg.element.innerHTML !== \"\" && vditor.wysiwyg.element.childNodes.length === 1 &&\n                vditor.wysiwyg.element.firstElementChild && vditor.wysiwyg.element.firstElementChild.tagName === \"P\"\n                && vditor.wysiwyg.element.firstElementChild.childElementCount === 0\n                && (vditor.wysiwyg.element.textContent === \"\" || vditor.wysiwyg.element.textContent === \"\\n\")) {\n                // 为空时显示 placeholder\n                vditor.wysiwyg.element.innerHTML = \"\";\n            }\n            var range = (0,selection/* getEditorRange */.RN)(vditor);\n            if (event.key === \"Backspace\") {\n                // firefox headings https://github.com/Vanessa219/vditor/issues/211\n                if ((0,compatibility/* isFirefox */.gm)() && range.startContainer.textContent === \"\\n\" && range.startOffset === 1) {\n                    range.startContainer.textContent = \"\";\n                }\n            }\n            // 没有被块元素包裹\n            modifyPre(vditor, range);\n            highlightToolbarWYSIWYG(vditor);\n            if (event.key !== \"ArrowDown\" && event.key !== \"ArrowRight\" && event.key !== \"Backspace\"\n                && event.key !== \"ArrowLeft\" && event.key !== \"ArrowUp\") {\n                return;\n            }\n            if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") {\n                vditor.hint.render(vditor);\n            }\n            // 上下左右，删除遇到块预览的处理\n            var previewElement = (0,hasClosest/* hasClosestByClassName */.KJ)(range.startContainer, \"vditor-wysiwyg__preview\");\n            if (!previewElement && range.startContainer.nodeType !== 3 && range.startOffset > 0) {\n                // table 前删除遇到代码块\n                var blockRenderElement = range.startContainer;\n                if (blockRenderElement.classList.contains(\"vditor-wysiwyg__block\")) {\n                    previewElement = blockRenderElement.lastElementChild;\n                }\n            }\n            if (!previewElement) {\n                return;\n            }\n            var previousElement = previewElement.previousElementSibling;\n            if (previousElement.style.display === \"none\") {\n                if (event.key === \"ArrowDown\" || event.key === \"ArrowRight\") {\n                    showCode(previewElement, vditor);\n                }\n                else {\n                    showCode(previewElement, vditor, false);\n                }\n                return;\n            }\n            var codeElement = previewElement.previousElementSibling;\n            if (codeElement.tagName === \"PRE\") {\n                codeElement = codeElement.firstElementChild;\n            }\n            if (event.key === \"ArrowDown\" || event.key === \"ArrowRight\") {\n                var blockRenderElement = previewElement.parentElement;\n                var nextNode = getRenderElementNextNode(blockRenderElement);\n                if (nextNode && nextNode.nodeType !== 3) {\n                    // 下一节点依旧为代码渲染块\n                    var nextRenderElement = nextNode.querySelector(\".vditor-wysiwyg__preview\");\n                    if (nextRenderElement) {\n                        showCode(nextRenderElement, vditor);\n                        return;\n                    }\n                }\n                // 跳过渲染块，光标移动到下一个节点\n                if (nextNode.nodeType === 3) {\n                    // inline\n                    while (nextNode.textContent.length === 0 && nextNode.nextSibling) {\n                        // https://github.com/Vanessa219/vditor/issues/100 2\n                        nextNode = nextNode.nextSibling;\n                    }\n                    range.setStart(nextNode, 1);\n                }\n                else {\n                    // block\n                    range.setStart(nextNode.firstChild, 0);\n                }\n            }\n            else {\n                range.selectNodeContents(codeElement);\n                range.collapse(false);\n            }\n        });\n    };\n    return WYSIWYG;\n}());\n\n\n;// ./src/index.ts\nvar src_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Vditor = /** @class */ (function (_super) {\n    src_extends(Vditor, _super);\n    /**\n     * @param id 要挂载 Vditor 的元素或者元素 ID。\n     * @param options Vditor 参数\n     */\n    function Vditor(id, options) {\n        var _this = _super.call(this) || this;\n        _this.version = constants/* VDITOR_VERSION */.g;\n        if (typeof id === \"string\") {\n            if (!options) {\n                options = {\n                    cache: {\n                        id: \"vditor\".concat(id),\n                    },\n                };\n            }\n            else if (!options.cache) {\n                options.cache = { id: \"vditor\".concat(id) };\n            }\n            else if (!options.cache.id) {\n                options.cache.id = \"vditor\".concat(id);\n            }\n            if (!document.getElementById(id)) {\n                _this.showErrorTip(\"Failed to get element by id: \".concat(id));\n                return _this;\n            }\n            id = document.getElementById(id);\n        }\n        var getOptions = new Options(options);\n        var mergedOptions = getOptions.merge();\n        // 支持自定义国际化\n        if (!mergedOptions.i18n) {\n            if (![\"en_US\", \"fr_FR\", \"pt_BR\", \"ja_JP\", \"ko_KR\", \"ru_RU\", \"sv_SE\", \"zh_CN\", \"zh_TW\"].includes(mergedOptions.lang)) {\n                throw new Error(\"options.lang error, see https://ld246.com/article/1549638745630#options\");\n            }\n            else {\n                var i18nScriptPrefix = \"vditorI18nScript\";\n                var i18nScriptID_1 = i18nScriptPrefix + mergedOptions.lang;\n                document.querySelectorAll(\"head script[id^=\\\"\".concat(i18nScriptPrefix, \"\\\"]\")).forEach(function (el) {\n                    if (el.id !== i18nScriptID_1) {\n                        document.head.removeChild(el);\n                    }\n                });\n                (0,addScript/* addScript */.Z)(\"\".concat(mergedOptions.cdn, \"/dist/js/i18n/\").concat(mergedOptions.lang, \".js\"), i18nScriptID_1).then(function () {\n                    _this.init(id, mergedOptions);\n                }).catch(function (error) {\n                    _this.showErrorTip(\"GET \".concat(mergedOptions.cdn, \"/dist/js/i18n/\").concat(mergedOptions.lang, \".js net::ERR_ABORTED 404 (Not Found)\"));\n                });\n            }\n        }\n        else {\n            window.VditorI18n = mergedOptions.i18n;\n            _this.init(id, mergedOptions);\n        }\n        return _this;\n    }\n    Vditor.prototype.showErrorTip = function (error) {\n        var tip = new Tip();\n        document.body.appendChild(tip.element);\n        tip.show(error, 0);\n    };\n    Vditor.prototype.updateToolbarConfig = function (options) {\n        this.vditor.toolbar.updateConfig(this.vditor, options);\n    };\n    /** 设置主题 */\n    Vditor.prototype.setTheme = function (theme, contentTheme, codeTheme, contentThemePath) {\n        this.vditor.options.theme = theme;\n        setTheme(this.vditor);\n        if (contentTheme) {\n            this.vditor.options.preview.theme.current = contentTheme;\n            (0,setContentTheme/* setContentTheme */.H)(contentTheme, contentThemePath || this.vditor.options.preview.theme.path);\n        }\n        if (codeTheme) {\n            this.vditor.options.preview.hljs.style = codeTheme;\n            (0,setCodeTheme/* setCodeTheme */.h)(codeTheme, this.vditor.options.cdn);\n        }\n    };\n    /** 获取 Markdown 内容 */\n    Vditor.prototype.getValue = function () {\n        return getMarkdown(this.vditor);\n    };\n    /** 获取编辑器当前编辑模式 */\n    Vditor.prototype.getCurrentMode = function () {\n        return this.vditor.currentMode;\n    };\n    /** 聚焦到编辑器 */\n    Vditor.prototype.focus = function () {\n        if (this.vditor.currentMode === \"sv\") {\n            this.vditor.sv.element.focus();\n        }\n        else if (this.vditor.currentMode === \"wysiwyg\") {\n            this.vditor.wysiwyg.element.focus();\n        }\n        else if (this.vditor.currentMode === \"ir\") {\n            this.vditor.ir.element.focus();\n        }\n    };\n    /** 让编辑器失焦 */\n    Vditor.prototype.blur = function () {\n        if (this.vditor.currentMode === \"sv\") {\n            this.vditor.sv.element.blur();\n        }\n        else if (this.vditor.currentMode === \"wysiwyg\") {\n            this.vditor.wysiwyg.element.blur();\n        }\n        else if (this.vditor.currentMode === \"ir\") {\n            this.vditor.ir.element.blur();\n        }\n    };\n    /** 禁用编辑器 */\n    Vditor.prototype.disabled = function () {\n        hidePanel(this.vditor, [\"subToolbar\", \"hint\", \"popover\"]);\n        disableToolbar(this.vditor.toolbar.elements, constants/* Constants */.Y.EDIT_TOOLBARS.concat([\"undo\", \"redo\", \"fullscreen\", \"edit-mode\"]));\n        this.vditor[this.vditor.currentMode].element.setAttribute(\"contenteditable\", \"false\");\n    };\n    /** 解除编辑器禁用 */\n    Vditor.prototype.enable = function () {\n        enableToolbar(this.vditor.toolbar.elements, constants/* Constants */.Y.EDIT_TOOLBARS.concat([\"undo\", \"redo\", \"fullscreen\", \"edit-mode\"]));\n        this.vditor.undo.resetIcon(this.vditor);\n        this.vditor[this.vditor.currentMode].element.setAttribute(\"contenteditable\", \"true\");\n    };\n    /** 返回选中的字符串 */\n    Vditor.prototype.getSelection = function () {\n        if (this.vditor.currentMode === \"wysiwyg\") {\n            return getSelectText(this.vditor.wysiwyg.element);\n        }\n        else if (this.vditor.currentMode === \"sv\") {\n            return getSelectText(this.vditor.sv.element);\n        }\n        else if (this.vditor.currentMode === \"ir\") {\n            return getSelectText(this.vditor.ir.element);\n        }\n    };\n    /** 设置预览区域内容 */\n    Vditor.prototype.renderPreview = function (value) {\n        this.vditor.preview.render(this.vditor, value);\n    };\n    /** 获取焦点位置 */\n    Vditor.prototype.getCursorPosition = function () {\n        return (0,selection/* getCursorPosition */.Ey)(this.vditor[this.vditor.currentMode].element);\n    };\n    /** 上传是否还在进行中 */\n    Vditor.prototype.isUploading = function () {\n        return this.vditor.upload.isUploading;\n    };\n    /** 清除缓存 */\n    Vditor.prototype.clearCache = function () {\n        if (this.vditor.options.cache.enable && (0,compatibility/* accessLocalStorage */.D)()) {\n            localStorage.removeItem(this.vditor.options.cache.id);\n        }\n    };\n    /** 禁用缓存 */\n    Vditor.prototype.disabledCache = function () {\n        this.vditor.options.cache.enable = false;\n    };\n    /** 启用缓存 */\n    Vditor.prototype.enableCache = function () {\n        if (!this.vditor.options.cache.id) {\n            throw new Error(\"need options.cache.id, see https://ld246.com/article/1549638745630#options\");\n        }\n        this.vditor.options.cache.enable = true;\n    };\n    /** HTML 转 md */\n    Vditor.prototype.html2md = function (value) {\n        return this.vditor.lute.HTML2Md(value);\n    };\n    /** markdown 转 JSON 输出 */\n    Vditor.prototype.exportJSON = function (value) {\n        return this.vditor.lute.RenderJSON(value);\n    };\n    /** 获取 HTML */\n    Vditor.prototype.getHTML = function () {\n        return getHTML(this.vditor);\n    };\n    /** 消息提示。time 为 0 将一直显示 */\n    Vditor.prototype.tip = function (text, time) {\n        this.vditor.tip.show(text, time);\n    };\n    Vditor.prototype.setEditMode = function (type, mode) {\n        setEditMode(this.vditor, type, { preventDefault: function () { } }, mode);\n    };\n    /** 设置预览模式 */\n    Vditor.prototype.setPreviewMode = function (mode) {\n        setPreviewMode(mode, this.vditor);\n    };\n    /** 删除选中内容 */\n    Vditor.prototype.deleteValue = function () {\n        if (window.getSelection().isCollapsed) {\n            return;\n        }\n        document.execCommand(\"delete\", false);\n    };\n    /** 更新选中内容 */\n    Vditor.prototype.updateValue = function (value) {\n        document.execCommand(\"insertHTML\", false, value);\n    };\n    /** 在焦点处插入内容，并默认进行 Markdown 渲染 */\n    Vditor.prototype.insertValue = function (value, render) {\n        if (render === void 0) { render = true; }\n        var range = (0,selection/* getEditorRange */.RN)(this.vditor);\n        range.collapse(true);\n        // https://github.com/Vanessa219/vditor/issues/716\n        // https://github.com/Vanessa219/vditor/issues/917\n        var tmpElement = document.createElement(\"template\");\n        tmpElement.innerHTML = value;\n        range.insertNode(tmpElement.content.cloneNode(true));\n        range.collapse(false);\n        if (this.vditor.currentMode === \"sv\") {\n            this.vditor.sv.preventInput = true;\n            if (render) {\n                inputEvent(this.vditor);\n            }\n        }\n        else if (this.vditor.currentMode === \"wysiwyg\") {\n            // 由于 https://github.com/Vanessa219/vditor/issues/1566 不能使用 this.vditor.wysiwyg.preventInput = true;\n            if (render) {\n                input_input(this.vditor, getSelection().getRangeAt(0));\n            }\n        }\n        else if (this.vditor.currentMode === \"ir\") {\n            this.vditor.ir.preventInput = true;\n            if (render) {\n                input(this.vditor, getSelection().getRangeAt(0), true);\n            }\n        }\n    };\n    /** 在焦点处插入 Markdown */\n    Vditor.prototype.insertMD = function (md) {\n        // https://github.com/Vanessa219/vditor/issues/1640\n        if (this.vditor.currentMode === \"ir\") {\n            (0,selection/* insertHTML */.Z2)(this.vditor.lute.Md2VditorIRDOM(md), this.vditor);\n        }\n        else if (this.vditor.currentMode === \"wysiwyg\") {\n            (0,selection/* insertHTML */.Z2)(this.vditor.lute.Md2VditorDOM(md), this.vditor);\n        }\n        else {\n            processPaste(this.vditor, md);\n        }\n        this.vditor.outline.render(this.vditor);\n        execAfterRender(this.vditor);\n    };\n    /** 设置编辑器内容 */\n    Vditor.prototype.setValue = function (markdown, clearStack) {\n        var _this = this;\n        if (clearStack === void 0) { clearStack = false; }\n        if (this.vditor.currentMode === \"sv\") {\n            this.vditor.sv.element.innerHTML = \"<div data-block='0'>\".concat(this.vditor.lute.SpinVditorSVDOM(markdown), \"</div>\");\n            processAfterRender(this.vditor, {\n                enableAddUndoStack: true,\n                enableHint: false,\n                enableInput: false,\n            });\n        }\n        else if (this.vditor.currentMode === \"wysiwyg\") {\n            renderDomByMd(this.vditor, markdown, {\n                enableAddUndoStack: true,\n                enableHint: false,\n                enableInput: false,\n            });\n        }\n        else {\n            this.vditor.ir.element.innerHTML = this.vditor.lute.Md2VditorIRDOM(markdown);\n            this.vditor.ir.element\n                .querySelectorAll(\".vditor-ir__preview[data-render='2']\")\n                .forEach(function (item) {\n                processCodeRender(item, _this.vditor);\n            });\n            process_processAfterRender(this.vditor, {\n                enableAddUndoStack: true,\n                enableHint: false,\n                enableInput: false,\n            });\n        }\n        this.vditor.outline.render(this.vditor);\n        if (!markdown) {\n            hidePanel(this.vditor, [\"emoji\", \"headings\", \"submenu\", \"hint\"]);\n            if (this.vditor.wysiwyg.popover) {\n                this.vditor.wysiwyg.popover.style.display = \"none\";\n            }\n            this.clearCache();\n        }\n        if (clearStack) {\n            this.clearStack();\n        }\n    };\n    /** 空块 */\n    Vditor.prototype.insertEmptyBlock = function (position) {\n        insertEmptyBlock(this.vditor, position);\n    };\n    /** 清空 undo & redo 栈 */\n    Vditor.prototype.clearStack = function () {\n        this.vditor.undo.clearStack(this.vditor);\n        this.vditor.undo.addToUndoStack(this.vditor);\n    };\n    /** 销毁编辑器 */\n    Vditor.prototype.destroy = function () {\n        this.vditor.element.innerHTML = this.vditor.originalInnerHTML;\n        this.vditor.element.classList.remove(\"vditor\");\n        this.vditor.element.removeAttribute(\"style\");\n        var iconScript = document.getElementById(\"vditorIconScript\");\n        if (iconScript) {\n            iconScript.remove();\n        }\n        this.clearCache();\n        UIUnbindListener();\n        this.vditor.wysiwyg.unbindListener();\n        this.vditor.options.after = undefined;\n    };\n    /** 获取评论 ID */\n    Vditor.prototype.getCommentIds = function () {\n        if (this.vditor.currentMode !== \"wysiwyg\") {\n            return [];\n        }\n        return this.vditor.wysiwyg.getComments(this.vditor, true);\n    };\n    /** 高亮评论 */\n    Vditor.prototype.hlCommentIds = function (ids) {\n        if (this.vditor.currentMode !== \"wysiwyg\") {\n            return;\n        }\n        var hlItem = function (item) {\n            item.classList.remove(\"vditor-comment--hover\");\n            ids.forEach(function (id) {\n                if (item.getAttribute(\"data-cmtids\").indexOf(id) > -1) {\n                    item.classList.add(\"vditor-comment--hover\");\n                }\n            });\n        };\n        this.vditor.wysiwyg.element\n            .querySelectorAll(\".vditor-comment\")\n            .forEach(function (item) {\n            hlItem(item);\n        });\n        if (this.vditor.preview.element.style.display !== \"none\") {\n            this.vditor.preview.element\n                .querySelectorAll(\".vditor-comment\")\n                .forEach(function (item) {\n                hlItem(item);\n            });\n        }\n    };\n    /** 取消评论高亮 */\n    Vditor.prototype.unHlCommentIds = function (ids) {\n        if (this.vditor.currentMode !== \"wysiwyg\") {\n            return;\n        }\n        var unHlItem = function (item) {\n            ids.forEach(function (id) {\n                if (item.getAttribute(\"data-cmtids\").indexOf(id) > -1) {\n                    item.classList.remove(\"vditor-comment--hover\");\n                }\n            });\n        };\n        this.vditor.wysiwyg.element\n            .querySelectorAll(\".vditor-comment\")\n            .forEach(function (item) {\n            unHlItem(item);\n        });\n        if (this.vditor.preview.element.style.display !== \"none\") {\n            this.vditor.preview.element\n                .querySelectorAll(\".vditor-comment\")\n                .forEach(function (item) {\n                unHlItem(item);\n            });\n        }\n    };\n    /** 删除评论 */\n    Vditor.prototype.removeCommentIds = function (removeIds) {\n        var _this = this;\n        if (this.vditor.currentMode !== \"wysiwyg\") {\n            return;\n        }\n        var removeItem = function (item, removeId) {\n            var ids = item.getAttribute(\"data-cmtids\").split(\" \");\n            ids.find(function (id, index) {\n                if (id === removeId) {\n                    ids.splice(index, 1);\n                    return true;\n                }\n            });\n            if (ids.length === 0) {\n                item.outerHTML = item.innerHTML;\n                (0,selection/* getEditorRange */.RN)(_this.vditor).collapse(true);\n            }\n            else {\n                item.setAttribute(\"data-cmtids\", ids.join(\" \"));\n            }\n        };\n        removeIds.forEach(function (removeId) {\n            _this.vditor.wysiwyg.element\n                .querySelectorAll(\".vditor-comment\")\n                .forEach(function (item) {\n                removeItem(item, removeId);\n            });\n            if (_this.vditor.preview.element.style.display !== \"none\") {\n                _this.vditor.preview.element\n                    .querySelectorAll(\".vditor-comment\")\n                    .forEach(function (item) {\n                    removeItem(item, removeId);\n                });\n            }\n        });\n        afterRenderEvent(this.vditor, {\n            enableAddUndoStack: true,\n            enableHint: false,\n            enableInput: false,\n        });\n    };\n    Vditor.prototype.init = function (id, mergedOptions) {\n        var _this = this;\n        this.vditor = {\n            currentMode: mergedOptions.mode,\n            element: id,\n            hint: new Hint(mergedOptions.hint.extend),\n            lute: undefined,\n            options: mergedOptions,\n            originalInnerHTML: id.innerHTML,\n            outline: new Outline(window.VditorI18n.outline),\n            tip: new Tip(),\n        };\n        this.vditor.sv = new Editor(this.vditor);\n        this.vditor.undo = new undo_Undo();\n        this.vditor.wysiwyg = new WYSIWYG(this.vditor);\n        this.vditor.ir = new IR(this.vditor);\n        this.vditor.toolbar = new Toolbar(this.vditor);\n        if (mergedOptions.resize.enable) {\n            this.vditor.resize = new Resize(this.vditor);\n        }\n        if (this.vditor.toolbar.elements.devtools) {\n            this.vditor.devtools = new DevTools();\n        }\n        if (mergedOptions.upload.url || mergedOptions.upload.handler) {\n            this.vditor.upload = new Upload();\n        }\n        if (mergedOptions.image.url || mergedOptions.image.handler) {\n            this.vditor.image = new Upload();\n        }\n        if (mergedOptions.video.url || mergedOptions.video.handler) {\n            this.vditor.video = new Upload();\n        }\n        (0,addScript/* addScript */.Z)(mergedOptions._lutePath ||\n            \"\".concat(mergedOptions.cdn, \"/dist/js/lute/lute.min.js\"), \"vditorLuteScript\").then(function () {\n            _this.vditor.lute = (0,setLute/* setLute */.X)({\n                autoSpace: _this.vditor.options.preview.markdown.autoSpace,\n                gfmAutoLink: _this.vditor.options.preview.markdown.gfmAutoLink,\n                codeBlockPreview: _this.vditor.options.preview.markdown\n                    .codeBlockPreview,\n                emojiSite: _this.vditor.options.hint.emojiPath,\n                emojis: _this.vditor.options.hint.emoji,\n                fixTermTypo: _this.vditor.options.preview.markdown.fixTermTypo,\n                footnotes: _this.vditor.options.preview.markdown.footnotes,\n                headingAnchor: false,\n                inlineMathDigit: _this.vditor.options.preview.math.inlineDigit,\n                linkBase: _this.vditor.options.preview.markdown.linkBase,\n                linkPrefix: _this.vditor.options.preview.markdown.linkPrefix,\n                listStyle: _this.vditor.options.preview.markdown.listStyle,\n                mark: _this.vditor.options.preview.markdown.mark,\n                mathBlockPreview: _this.vditor.options.preview.markdown\n                    .mathBlockPreview,\n                paragraphBeginningSpace: _this.vditor.options.preview.markdown\n                    .paragraphBeginningSpace,\n                sanitize: _this.vditor.options.preview.markdown.sanitize,\n                toc: _this.vditor.options.preview.markdown.toc,\n            });\n            _this.vditor.preview = new Preview(_this.vditor);\n            initUI(_this.vditor);\n            if (mergedOptions.after) {\n                mergedOptions.after();\n            }\n            if (mergedOptions.icon) {\n                // 防止初始化 2 个编辑器时加载 2 次\n                (0,addScript/* addScriptSync */.U)(\"\".concat(mergedOptions.cdn, \"/dist/js/icons/\").concat(mergedOptions.icon, \".js\"), \"vditorIconScript\");\n            }\n        });\n    };\n    return Vditor;\n}(method[\"default\"]));\n/* harmony default export */ const src = (Vditor);\n\n})();\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/graphviz/full.render.js",
    "content": "/*\nViz.js 2.1.2 (Graphviz 2.40.1, Expat 2.2.5, Emscripten 1.37.36)\n*/\n(function(global) {\n  var Module = function(Module) {\n    Module = Module || {};\n  var Module=typeof Module!==\"undefined\"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module[\"arguments\"]=[];Module[\"thisProgram\"]=\"./this.program\";Module[\"quit\"]=(function(status,toThrow){throw toThrow});Module[\"preRun\"]=[];Module[\"postRun\"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module[\"ENVIRONMENT\"]){if(Module[\"ENVIRONMENT\"]===\"WEB\"){ENVIRONMENT_IS_WEB=true}else if(Module[\"ENVIRONMENT\"]===\"WORKER\"){ENVIRONMENT_IS_WORKER=true}else if(Module[\"ENVIRONMENT\"]===\"NODE\"){ENVIRONMENT_IS_NODE=true}else if(Module[\"ENVIRONMENT\"]===\"SHELL\"){ENVIRONMENT_IS_SHELL=true}else{throw new Error(\"Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.\")}}else{ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof require===\"function\"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module[\"read\"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);ret=nodeFS[\"readFileSync\"](filename)}return binary?ret:ret.toString()};Module[\"readBinary\"]=function readBinary(filename){var ret=Module[\"read\"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){Module[\"thisProgram\"]=process[\"argv\"][1].replace(/\\\\/g,\"/\")}Module[\"arguments\"]=process[\"argv\"].slice(2);if(typeof module!==\"undefined\"){module[\"exports\"]=Module}process[\"on\"](\"uncaughtException\",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process[\"on\"](\"unhandledRejection\",(function(reason,p){process[\"exit\"](1)}));Module[\"inspect\"]=(function(){return\"[Emscripten Module object]\"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){Module[\"read\"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module[\"readBinary\"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){Module[\"arguments\"]=scriptArgs}else if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}if(typeof quit===\"function\"){Module[\"quit\"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module[\"read\"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module[\"readBinary\"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module[\"readAsync\"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}Module[\"setWindowTitle\"]=(function(title){document.title=title})}Module[\"print\"]=typeof console!==\"undefined\"?console.log.bind(console):typeof print!==\"undefined\"?print:null;Module[\"printErr\"]=typeof printErr!==\"undefined\"?printErr:typeof console!==\"undefined\"&&console.warn.bind(console)||Module[\"print\"];Module.print=Module[\"print\"];Module.printErr=Module[\"printErr\"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args))}else{return Module[\"dynCall_\"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}var JSfuncs={\"stackSave\":(function(){stackSave()}),\"stackRestore\":(function(){stackRestore()}),\"arrayToC\":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),\"stringToC\":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={\"string\":JSfuncs[\"stringToC\"],\"array\":JSfuncs[\"arrayToC\"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);if(returnType===\"string\")ret=Pointer_stringify(ret);if(stack!==0){stackRestore(stack)}return ret}function setValue(ptr,value,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":HEAP8[ptr>>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab===\"number\"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types===\"string\"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc===\"function\"?_malloc:staticAlloc,stackAlloc,staticAlloc,dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType===\"i8\"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];type=singleType||types[i];if(type===0){i++;continue}if(type==\"i64\")type=\"i32\";setValue(ret+i,curr,type);if(previousType!==type){typeSize=getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}function Pointer_stringify(ptr,length){if(length===0||!ptr)return\"\";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret=\"\";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str=\"\";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\\w\\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+\" [\"+y+\"]\"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return\"(no stack trace available)\"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module[\"extraStackTrace\"])js+=\"\\n\"+Module[\"extraStackTrace\"]();return demangleAll(js)}var PAGE_SIZE=16384;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module[\"HEAP8\"]=HEAP8=new Int8Array(buffer);Module[\"HEAP16\"]=HEAP16=new Int16Array(buffer);Module[\"HEAP32\"]=HEAP32=new Int32Array(buffer);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buffer);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buffer);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buffer);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buffer);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort(\"Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value \"+TOTAL_MEMORY+\", (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 \")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module[\"TOTAL_STACK\"]||5242880;var TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)Module.printErr(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+TOTAL_MEMORY+\"! (TOTAL_STACK=\"+TOTAL_STACK+\")\");if(Module[\"buffer\"]){buffer=Module[\"buffer\"]}else{{buffer=new ArrayBuffer(TOTAL_MEMORY)}Module[\"buffer\"]=buffer}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY}HEAP32[0]=1668509029;HEAP16[1]=25459;if(HEAPU8[2]!==115||HEAPU8[3]!==99)throw\"Runtime error: expected the system to be little-endian!\";function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}if(!Math[\"imul\"]||Math[\"imul\"](4294967295,5)!==-5)Math[\"imul\"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math[\"imul\"];if(!Math[\"clz32\"])Math[\"clz32\"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math[\"clz32\"];if(!Math[\"trunc\"])Math[\"trunc\"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math[\"trunc\"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var ASM_CONSTS=[(function($0,$1){var path=Pointer_stringify($0);var data=Pointer_stringify($1);FS.createPath(\"/\",PATH.dirname(path));FS.writeFile(PATH.join(\"/\",path),data)})];function _emscripten_asm_const_iii(code,a0,a1){return ASM_CONSTS[code](a0,a1)}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+194160;__ATINIT__.push();memoryInitializer=\"data:application/octet-stream;base64,AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAIMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkACEAAAAAAAAAAAAAAAABBAoC8AAAgAAAABAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICWQAAAAAAAgJZABJDDAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUkAAAAAAAABSQAAgAwIAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAABCQAAAAAAAAEJAAAAAAAAgg0AAAAAAAMCIQAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAAEJAAAAAAAAAQkAAAAAAACCDQAAAAAAAwIhAAAAAAAAAUkAAAAAAAABSQACwwQAAAAAAAAAAAAAAEEBANgAAkwAAAAEAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAEAACAAAAAAAAAAAAABBAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYQAAAAAAAAFhAALDBAAAAAAAAAAAAAAAAABw6AAAQAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAABYQEAgPgMAAAAAAAAAAAAAEEAkOwAAegAAAAEAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAAAAAAAAAUkAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSQAAAAAAAAFJA////////73/////////vf////////+//////////7/8AAAAAAAD4PzMzMzMzM9M/PAAAAAAAAACamZmZmZmpPwEAAAAAAAAAAQAAAAAAAAAAAAAAAADwPwEAAAAAAAAAAgAAAAAAAAAAAAAAAADwPwIAAAAAAAAAAwAAAAAAAAAAAAAAAADgPwMAAAAAAAAABAAAAAAAAAAAAAAAAADwPwQAAAAAAAAABQAAAAAAAAAzMzMzMzPzPwUAAAAAAAAABgAAAAAAAACamZmZmZnpPwYAAAAAAAAABwAAAAAAAAAAAAAAAADwPwcAAAAAAAAACAAAAAAAAAAAAAAAAADgPwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAMzMzMzMz078AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgEZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAmpmZmZmZ2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzPjPwAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAexSuR+F65L8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAEAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqQVQAAAQAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAAgGZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgGZAmpmZmZmZ2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAgGZAexSuR+F65L8AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAgEZAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAQAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAAAAQAAAAAAAAAAAAAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP1ioNc07TtU/JXUCmggb2j8AAAAAAADgPwAAAAAAAOA/LNSa5h2n6j9q3nGKjuToP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAAOA/XdxGA3gL4j8AAAAAAADQP1ioNc07TtU/AAAAAAAA0D/TvOMUHcnRPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/07zjFB3J0T/TvOMUHcnRP13cRgN4C+I/XdxGA3gL4j9d3EYDeAviPw1xrIvbaNw/ZF3cRgN47T/Sb18HzhnnPxB6Nqs+V+U/EHo2qz5X5T/Sb18HzhnnP3gLJCh+jOM/tRX7y+7J4T/Sb18HzhnnP9JvXwfOGec/WKg1zTtO1T+IhVrTvOPYP9JvXwfOGec/eAskKH6M4z/EQq1p3nHsP9JvXwfOGec/0m9fB84Z5z+1FfvL7snhP9JvXwfOGec/EHo2qz5X5T+1FfvL7snhP3gLJCh+jOM/0m9fB84Z5z/Sb18HzhnnP4Y41sVtNO4/0m9fB84Z5z/Sb18HzhnnP3gLJCh+jOM/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/pgpGJXUC3j8AAAAAAADgP1ioNc07TtU/DXGsi9to3D8AAAAAAADgPw1xrIvbaNw/AAAAAAAA4D8NcayL22jcP1ioNc07TtU/AAAAAAAA4D8AAAAAAADgP9O84xQdydE/07zjFB3J0T8AAAAAAADgP9O84xQdydE/at5xio7k6D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgP1ioNc07TtU/iIVa07zj2D/TvOMUHcnRPwAAAAAAAOA/AAAAAAAA4D/Sb18HzhnnPwAAAAAAAOA/AAAAAAAA4D8NcayL22jcP/RsVn2utt4/ETY8vVKWyT/0bFZ9rrbePzsBTYQNT+E/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D9YqDXNO07VPwAAAAAAAOA/AAAAAAAA4D8+6Nms+lzFPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/gnNGlPYGxz8NcayL22jcPwAAAAAAAOA/WKg1zTtO1T9YqDXNO07VP7UV+8vuyeE/tRX7y+7J4T8AAAAAAADQPwAAAAAAAOA/AAAAAAAA4D8AAAAAAADgPwAAAAAAANA/AAAAAAAA0D8H8BZIUPzcP6K0N/jCZNY/WKg1zTtO1T8NcayL22jcPw1xrIvbaNw/AAAAAAAA4D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA0D8NcayL22jcPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VPwAAAAAAANA/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/AAAAAAAA8D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQP8RCrWnecew/AAAAAAAA0D9/2T15WKjRPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/eAskKH6M4z/Sb18HzhnnP8RCrWnecew/E/JBz2bV0z8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/EHo2qz5X5T8AAAAAAADQPwAAAAAAANA/AAAAAAAA0D/TvOMUHcnRPwAAAAAAANA/AAAAAAAA0D/TvOMUHcnRPwAAAAAAAOA/0m9fB84Z5z8AAAAAAADgPwAAAAAAANA/AAAAAAAA0D8AAAAAAADQPwAAAAAAANA/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z9R2ht8YTLjP1HaG3xhMuM/UdobfGEy4z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP/RsVn2uttY/tRX7y+7J4T+1FfvL7snhP8RCrWnecew/EHo2qz5X5T/129eBc0bMP1ioNc07TtU/WKg1zTtO1T+IhVrTvOPYPwFNhA1Pr+I/07zjFB3J0T9YqDXNO07VP9O84xQdydE/07zjFB3J0T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhP9O84xQdydE/07zjFB3J0T8BTYQNT6/iPwFNhA1Pr+I/AU2EDU+v4j+1FfvL7snhP8xdS8gHPfA/EHo2qz5X5T8QejarPlflP9JvXwfOGec/0m9fB84Z5z8QejarPlflP3gLJCh+jOM/at5xio7k6D/Sb18HzhnnP9O84xQdydE/AAAAAAAA4D8QejarPlflP7UV+8vuyeE/LNSa5h2n6j/Sb18HzhnnP2recYqO5Og/EHo2qz5X5T9q3nGKjuToP9JvXwfOGec/EHo2qz5X5T94CyQofozjP9JvXwfOGec/EHo2qz5X5T+GONbFbTTuPxB6Nqs+V+U/EHo2qz5X5T94CyQofozjP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP6YKRiV1At4/tRX7y+7J4T9Iv30dOGfMP7UV+8vuyeE/tRX7y+7J4T8AAAAAAADgP7UV+8vuyeE/tRX7y+7J4T/TvOMUHcnRP7UV+8vuyeE/tRX7y+7J4T9Iv30dOGfMP0i/fR04Z8w/AAAAAAAA4D9Iv30dOGfMPyzUmuYdp+o/tRX7y+7J4T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T9YqDXNO07VPwAAAAAAAOA/07zjFB3J0T+1FfvL7snhPwAAAAAAAOA/0m9fB84Z5z8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8Cmggbnl7VP+C+DpwzotA/ApoIG55e1T8BTYQNT6/iP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/WKg1zTtO1T+1FfvL7snhP7UV+8vuyeE/PujZrPpcxT+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T+1FfvL7snhPx04Z0Rpb8g/WKg1zTtO1T+1FfvL7snhP1ioNc07TtU/WKg1zTtO1T8AAAAAAADgPwAAAAAAAOA/07zjFB3J0T+1FfvL7snhP7UV+8vuyeE/tRX7y+7J4T/TvOMUHcnRP9O84xQdydE/5x2n6Egu4T+itDf4wmTWP0i/fR04Z8w/WKg1zTtO1T9YqDXNO07VP7UV+8vuyeE/AAAAAAAA8D8AAAAAAADwP9O84xQdydE/eAskKH6M4z/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VP1ioNc07TtU/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T/TvOMUHcnRP1ioNc07TtU/WKg1zTtO1T9YqDXNO07VPwAAAAAAAPA/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T8AAAAAAADwP9O84xQdydE/6pWyDHGs1z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP7UV+8vuyeE/at5xio7k6D8AAAAAAADwP5jdk4eFWtc/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP8RCrWnecew/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP9O84xQdydE/SL99HThnzD94CyQofozjP4Y41sVtNO4/eAskKH6M4z/TvOMUHcnRP9O84xQdydE/07zjFB3J0T/TvOMUHcnRP1GgT+RJ0g5AtMh2vp86NcA6It+l1CXVv/OCPkeaLoo/n+V5cHfW+b9+/RAbLJzmP5bs2AjE68w/zc6idyrg0D+w479AECDtv62h1F5E29g/O6F85lGWdj/TbnD5eoR7P4HMzqJ3KuS/0a3X9KCgyD9q3zcZsD+EP77KkBle/4Q/HJYGflTDxL+lSSno9uIjQKnZA63AkME/CMSQQZNpiT/6RJ4kXTPQvwHwmTYtwl4/DZx9L8+Ulz+JtfgUAOOJP+WpWEY0y7G/jwDJz6Fnpr9ctcb7zLSIP02kj1Q6s5A/5scEoWHWoL/HaWccE/eCvyp/a+UtcFy/5FdiVAiadT/R8YdVcgS3P5XUCWgiPDPAZCMQr+t3EMCnIarwZ3jHP9r/AGvVrsE/TihEwCFU97+qSIWxhSD1P51oVyHlJ/Y/TS7GwDqOzT9Zayi1F9HcvwM/qmG/J8w/pkdTPZl/2j+2gTtQpzyuP1FM3gAz37m/9XaV/9oLpj/UpTW8D/aUPx+tILws3JA/KCzxgLLJI0AjWuFMAoq3P0ijZVGWKX8/u7SG98Gekz8XqHtTR32gvyErruBtlIs/M3PchNYetb+geISJ9fyPP2k1JO6x9JG/uM0zel6/aj+SPq2iPzTNv36w58ZPPpi/ByObUC3HpD8+GMJ7WLmRvy18fa1LjcY/AAAAQPsh+T8AAAAALUR0PgAAAICYRvg8AAAAYFHMeDsAAACAgxvwOQAAAEAgJXo4AAAAgCKC4zYAAAAAHfNpNQAAAAAAAPC/VAQBAOgqAAADAAAAEC0AAAMAAADoLwAAAwAAALAwAAADAAAAADIAAAMAAAB4NQAAAwAAALQ4AAADAAAAxC4AAAMAAAB8OQAAAwAAAIQ6AAADAAAAED8AAAMAAAA0PQAAAAAAANQsAAAAAAAAwC8AAAAAAAAQMAAAAAAAANgxAAAAAAAAKDIAAAAAAACMOAAAAAAAAGAuAAAAAAAAVDkAAAAAAABcOgAAAAAAAOg+AAAAAAAADD0AAAQAAAA4PwAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAAzQIAEM0CACDNAgAwzQIAQM0CAFDNAgBgzQIAcM0CABDNAgAQzQIAUM0CAFDNAgAfAAAAPwAAAH8AAAAAAAAA0HkBAAEAAACoKwAAaAAAAAQAAABtCAEAAQAAACAsAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAUBAAEAAAAAAAAA4AAAAAAAAAAQBQEAAQAAAAAAAADgAAAAAQAAABcFAQABAAAAAAAAAKgAAAACAAAAIQUBAAEAAAAAAAAA4AAAAAMAAAArBQEAAQAAAAAAAADgAAAABAAAADkFAQABAAAAAAAAAOAAAAAFAAAAQwUBAAEAAAAAAAAA4AAAAAYAAABQBQEAAQAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA/////wAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcggBAAEAAADELQAAGAEAAAEAAAB3CAEAAQAAAMQtAAAYAQAAAgAAAH0IAQABAAAAxC0AABgBAAADAAAAhggBAAEAAADELQAAGAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAIAQABAAAAAAAAAHABAAABAAAAmggBAAEAAAAAAAAAcAEAAAIAAAClCAEAAQAAAAAAAAA4AQAAAwAAALMIAQABAAAAAAAAADgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAkAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAwAAAANAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAYAAAACAAAAAgAAAAcAAAACAAAAAAAAAFgMAgBd9QEA7vYBAC79AQAlBAIAZAgCAOQLAgD1CwIAAAAAAPoIAQABAAAAKC8AAKgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+CAEAAQAAAAAAAADIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgkBAAEAAAA4MAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAD4KAQABAAAAAAAAACACAAACAAAASAoBAAEAAAAAAAAAWAIAAAAAAABRCgEAAQAAAAAAAABYAgAAAwAAAFoKAQABAAAAAAAAAFgCAAAAAAAAZAoBAAEAAAAAAAAAIAIAAAMAAABwCgEAAQAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAASAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAVAAAAFgAAABcAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAMAAAAJAAAAAwAAAAMAAAAKAAAABAAAAAAAAABYDAIAXfUBAC79AQDu9gEAZAgCACUEAgD1CwIA5AsCAAAAAAAAAAAALQwBAP////88MQAAkAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMAQD/////AAAAALACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWgQEAAQAAAFAyAADoAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGQAAABoAAAAAAAAABAAAAAAAAAAbAAAAHAAAAB0AAAAeAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAgAAAAIQAAACIAAAACAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAMAAAABQAAAAQAAAANAAAABQAAAAMAAAAtEAEAOxABAFEQAQDr7QIAXxABAG4QAQBzEAEAkRABAOvtAgCjEAEA0xABAOvtAgDxEAEAGREBACcRAQBWEQEAihEBAJsRAQDAEQEA4xEBAOkRAQAFEgEAIhIBAD0SAQBeEgEAeBIBAJoSAQC5EgEA3xIBAPcSAQAXEwEANBMBAFgTAQBkEwEA6+0CAG8TAQCVEwEAuRMBAN8TAQDr7QIAFRQBAC0UAQA6FAEAaRQBAGQTAQDr7QIAdhQBAH8UAQCgFAEA2xQBACYVAQB6FQEAnBUBALEVAQDIFQEA3hUBAPYVAQDr7QIADBYBACcWAQBLFgEAbxYBAJQWAQDr7QIAtRYBAM8WAQDhFgEA7hYBAPsWAQAPFwEAHhcBACYXAQA7FwEASRcBAIcXAQCSFwEAZBMBAOvtAgCYFwEApBcBALMXAQDjEQEA6+0CAMYXAQDvFwEADRgBAB0YAQAuGAEANRgBAEQYAQBUGAEAmBgBAJ8YAQDjEQEA6+0CAKkYAQDVGAEA4BgBAOkYAQDyGAEAAxkBABQZAQAoGQEAZBMBAOvtAgA0GQEARBkBAFIZAQBgGQEAbRkBAHoZAQCQGQEAmRkBAKgZAQC1GQEAxhkBAGQTAQDr7QIA0RkBAPAZAQDr7QIAAhoBABEaAQBBGgEASxoBAFgaAQBlGgEAchoBAH8aAQCCGgEA6+0CAIYaAQDr7QIAqRoBANoaAQAJGwEAIBsBADsbAQBWGwEAZBMBAOvtAgByGwEA6+0CAJobAQCmGwEAuRsBAMwbAQDhGwEA9hsBAPobAQDjEQEA6+0CAAYcAQDr7QIAFhwBACQcAQAwHAEAPRwBAF0cAQBzHAEA6+0CAIccAQDQHAEAFh0BAEYdAQB5HQEAgB0BAKcdAQDOHQEA6+0CANMdAQAAAAAAAAAAAJFHAQABAAAAAAAAAAgDAAABAAAARx4BAAEAAAAAAAAACAMAAAIAAACKRwEAAQAAAAAAAABAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAACQAAAAlAAAABgAAACYAAAAnAAAAKAAAACkAAAAqAAAAAAAAAAAAAAAAAAAAAAAAACsAAAAsAAAALQAAAC4AAAAEAAAALwAAAAAAAAAAAAAADgAAAAAAAAAPAAAABwAAAAUAAAAQAAAABgAAAAAAAAB19AEAf/QBABExAQDE9AEA//QBACH1AQAn9QEAWAwCAE71AQBd9QEAevUBAIX1AQCn9QEA3fUBABP2AQBO9gEAhPYBAKb2AQC19gEA5vYBAO72AQDXJAEA4CQBAAv3AQDpJAEAVfcBAPIkAQBf9wEA+yQBAGn3AQC49wEA8/cBAAclAQAu+AEAOfgBAH74AQCM+AEA1vgBAOT4AQDy+AEA/fgBAC75AQBu+QEAdvkBAH75AQC5+QEA7/kBAPv5AQAWMQEAB/oBABH6AQAc+gEAOfoBAG/6AQAu/QEAUP0BAFz9AQAbAAIATAACAHgAAgCuAAIAuwACAN0AAgD/AAIACAECAFIBAgBcAQIAoQECANcBAgDiAQIAZwICAHwCAgAPJQEAhgICAJACAgDGAgIABgMCABQDAgBoAwIAdwMCAIYDAgDVAwIAHjEBABUEAgAfBAIAJQQCAFEEAgB4BAIAiQQCAJQEAgDZBAIAHgUCAC0FAgA9BQIATwUCAF8FAgBvBQIAfAUCAIYFAgC8BQIAxQUCAAUGAgAYBgIAIzEBACAGAgBWBgIAfQYCALMGAgDaBgIA6AYCAB4HAgBoBwIAsgcCAL0HAgDzBwIA+AcCABUIAgAyCAIAPQgCAGQIAgB8CAIAsggCAOgIAgD0CAIAGwkCACYJAgBXCQIAiAkCABA8AQCvCQIA2wkCABEKAgBHCgIAUQoCAG4KAgCuCgIA5AoCACkxAQD8CgIAKAsCAE8LAgCFCwIAwgsCAOQLAgDqCwIA9QsCABwMAgAAAAAA2YEBAAEAAADINQAAeAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhIAQABAAAAAAAAAJgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAABIAAAAIAAAABgAAABMAAAAHAAAAAAAAAAAAAABFJgEAAQAAANw4AADQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASCYBAAEAAAAAAAAA8AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAA1AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAADcAAAAAAAAAAAAAABQAAAAAAAAAFQAAAAkAAAAHAAAAFgAAAAgAAAAAAAAAETEBAFgMAgBd9QEAFjEBAG/6AQAu/QEAHjEBAFEEAgAFBgIAIzEBAD0IAgBkCAIAEDwBACkxAQDkCwIA9QsCAAAAAAAuMQEAAQAAAKQ5AAAoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjEBAAEAAAAAAAAASAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAA5AAAAOgAAAAoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQQAAAEIAAABDAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAGAAAAAsAAAAIAAAAGQAAAAkAAAAAAAAAxPQBAKY6AQBYDAIAXfUBAHr1AQCxOgEAtzoBAMI6AQDJOgEAhfUBAN31AQDROgEA1zoBAOI6AQCE9gEApvYBAO72AQDpOgEAVfcBAGn3AQDz9wEA8zoBAH74AQCM+AEA1vgBAP46AQDk+AEABjsBAA87AQAdOwEAJzsBALn5AQAwOwEA+/kBABz6AQA5+gEANjsBAID6AQCr+gEA1PoBAPf6AQAg+wEAQ/sBAGz7AQCP+wEAuPsBANv7AQAE/AEAJ/wBAFD8AQBz/AEAnPwBAL/8AQDo/AEAC/0BAC79AQA9OwEAUP0BAEk7AQB4AAIA3QACAKEBAgBWOwEAhgMCAGM7AQAVBAIAJQQCAG07AQBRBAIAeAQCAIkEAgB8OwEAjjsBAJQEAgAeBQIALQUCAD0FAgBPBQIAXwUCAJ47AQCpOwEAtDsBAG8FAgAFBgIACgYCALk7AQDCOwEAyzsBANs7AQDiOwEAVgYCAH0GAgCzBgIA6AYCAPgHAgAVCAIA6jsBAGQIAgDxOwEA9AgCAPo7AQAmCQIAAjwBAIgJAgAQPAEArwkCANsJAgAXPAEAbgoCAK4KAgAhPAEA5AoCAPwKAgBPCwIAKzwBADk8AQCFCwIAjAsCAMILAgDkCwIA9QsCABwMAgAAAAAASzwBAAEAAACsOgAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE88AQABAAAAAAAAAKAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEUAAAAAAAAAAAAAAEYAAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAABsAAAAMAAAACQAAABwAAAAKAAAAAAAAAEFCAADelQEAQUkAALiVAQBBUgAAi5UBAEFYAADzlQEAQiAAAC+YAQBCSQAAQJgBAENCAAB4lgEAQ08AAGaWAQBDWAAAhZYBAEggAACplgEASEIAALOWAQBISQAAP5cBAEhYAADClgEASGIAAPOWAQBIaQAAJpcBAEhyAADYlgEASHgAAAmXAQBJIAAAUZgBAEtCAAAKlgEAS0kAAFKWAQBLUgAAPpYBAEtYAAArlgEATkIAAFGXAQBOSQAAmJcBAE5SAACwlwEATlgAAHyXAQBQQQAAEZgBAFBCAADNlwEAUEkAAAGYAQBQWAAA7ZcBAFIgAAAImgEAUyAAACCYAQBaRAAAjpgBAAAAAAAAAAAAAQAAAAAAAAD+RgEA/////1w9AADYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkcBAP////8AAAAA+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAApHAQABAAAAIEMAAAAAAAAQAAAAEkcBAAEAAAAgQwAAAAAAABEAAAAaRwEAAQAAACBDAAAAAAAAEQAAACNHAQABAAAAIEMAAAAAAAARAAAAK0cBAAEAAAAgQwAAAAAAABMAAAAzRwEAAQAAACRDAAAAAAAAFAAAADtHAQABAAAAJEMAAAAAAAAVAAAAQ0cBAAEAAAAkQwAAAAAAABUAAABMRwEAAQAAACRDAAAAAAAAFQAAAFRHAQABAAAAJEMAAAAAAAAWAAAAXEcBAAEAAAAoQwAAAAAAABcAAABlRwEAAQAAAChDAAAAAAAAGAAAAG5HAQABAAAAKEMAAAAAAAAYAAAAeEcBAAEAAAAoQwAAAAAAABgAAACBRwEAAQAAAChDAAAAAAAAGQAAAIpHAQABAAAALEMAAAAAAAAZAAAAkUcBAAEAAAAsQwAAAAAAABoAAACXRwEAAQAAADBDAAAAAAAACgAAAKBHAQABAAAANEMAAAAAAAALAAAAqEcBAAEAAAA0QwAAAAAAAAwAAACwRwEAAQAAADRDAAAAAAAADAAAALlHAQABAAAANEMAAAAAAAAMAAAAwUcBAAEAAAA0QwAAAAAAAA4AAADJRwEAAQAAADRDAAAAAAAADgAAANBHAQABAAAANEMAAAAAAAANAAAA2EcBAAEAAAA0QwAAAAAAAAUAAADgRwEAAQAAADRDAAAAAAAABgAAAOhHAQABAAAANEMAAAAAAAAHAAAA8EcBAAEAAAA0QwAAAAAAAAcAAAD5RwEAAQAAADRDAAAAAAAABwAAAAFIAQABAAAANEMAAAAAAAAJAAAACUgBAAEAAAA0QwAAAAAAAAkAAAAQSAEAAQAAADRDAAAAAAAACAAAABhIAQABAAAANEMAAAAAAAAAAAAAIEgBAAEAAAA4QwAAAAAAAAEAAAApSAEAAQAAADhDAAAAAAAAAgAAADJIAQABAAAAOEMAAAAAAAACAAAAPEgBAAEAAAA4QwAAAAAAAAIAAABFSAEAAQAAADhDAAAAAAAABAAAAE5IAQABAAAAOEMAAAAAAAAEAAAAVkgBAAEAAAA4QwAAAAAAAAMAAABfSAEAAQAAADhDAAAAAAAAEgAAAGhIAQABAAAAIEMAAAAAAAAbAAAAcEgBAAEAAAA8QwAAAAAAABwAAAB4SAEAAQAAADxDAAAAAAAAHQAAAIBIAQABAAAAPEMAAAAAAAAdAAAAiUgBAAEAAAA8QwAAAAAAAB0AAACRSAEAAQAAADxDAAAAAAAAHgAAAJlIAQABAAAAQEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAAARMAQBMQwAAAQAAAGhDAAAAAAAAAAAAAEgAAABJAAAAAQAAAAAAAADQeQEAAAAAAFxDAABkQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAgAAAAQAAAAYAQAAMAEAALAAAAApVAEALlQBADJUAQA5VAEAPVQBAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAAAAAAdAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAyWQEAKEQAAAEAAAB4RAAAAAAAAAAAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABLAAAAUwAAAEsAAABUAAAAVQAAAFYAAABXAAAAAAAAAD9ZAQAAAAAAOEQAACDPAgABAAAARVkBAAAAAABARAAAIM8CAAMAAABJWQEAAAAAAEhEAAAgzwIABAAAAE9ZAQAAAAAAUEQAACDPAgAFAAAAVVkBAAAAAABoRAAAIM8CAAYAAABfWQEAAAAAAHBEAAAgzwIABwAAAGVZAQAAAAAAWEQAACDPAgAHAAAAaVkBAAAAAABYRAAAIM8CAAcAAABuWQEAAAAAAGBEAAAgzwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMAAAAAAAAAABAAAAIAAAAAEAAAAAAAAAAAAAAAAAAAADAAAABAAAAAAAAAAAAAAA6+0CAAAAAAATBgIAAQAAAHRkAQAHAAAAOGQBAAMAAAC8GQIABQAAAHxkAQAPAAAAvoEBAAgAAAC+gQEAEAAAAIRkAQAEAAAAhGQBABEAAACJZAEABQAAAIlkAQACAAAAj2QBAAYAAACWZAEABAAAAKJkAQAHAAAAqmQBAAcAAAC6ZAEABQAAAMBkAQAIAAAA12QBAAgAAADAZAEACQAAAOBkAQAHAAAA6GQBAAoAAAACZQEABwAAAAplAQALAAAAJGUBAAYAAAArZQEADAAAAEllAQAJAAAAK2UBAA0AAABTZQEACAAAAFxlAQAOAAAAfWUBAAgAAACGZQEAEgAAAKdlAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAAAACAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAADAAAAIQAAAAQAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAEAAAAIgAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAQAAAACBHAAAwRwAABgAAAAQAAAA8RwAABgAAAAgAAAAGAAAABAAAAERHAAAABAAACAAAAP////8AAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAIAAAAAAAAAAAAAAABgAAAAAAAAAHAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAABgAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAACAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAACAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAACQAAAAAAAAAHAAAAAAAAAAkAAAALAAAACAAAAAoAAADISAAATEgAALBIAAABAAAAAQAAAAoAAAAWAAAACwAAAFgAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAANAAAAAAAAAAcAAAAAAAAABwAAAAIAAAAFAAAACAAAAAAAAAAAAAAABgAAAAMAAAAOAAAACwAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA8AAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAABAAAAAAAAAABwAAAAAAAAAIAAAACAAAAAAAAAAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA/////wAAAAAAAAAAJwAAAAAAAAAAAAAABwAAAAAAAAABAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAMAAAABAAAAAQAAAAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAQAAAAQAAAAFAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAABgAAAAEAAAABAAAABwAAAAgAAAAJAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAEAAAABAAAACwAAAAEAAAAMAAAAAQAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAATAAAAEwAAABMAAAATAAAAFwAAABgAAAAZAAAAEwAAABoAAAAbAAAAHAAAAB0AAAATAAAAEwAAABMAAAATAAAAEwAAAAEAAAAeAAAAAQAAAAEAAAATAAAAAQAAAB8AAAAgAAAAIQAAACIAAAAjAAAAEwAAACQAAAAlAAAAJgAAABMAAAATAAAAEwAAABMAAAAnAAAAKAAAACkAAAATAAAAKgAAACsAAAAsAAAALQAAABMAAAATAAAAEwAAABMAAAATAAAAAQAAAAEAAAABAAAAAQAAAAEAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAAC4AAAATAAAAEwAAABMAAAAvAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAAwAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAAAAAAAABAAAAAQAAAAIAAAADAAAAAQAAAAQAAAABAAAABQAAAAEAAAAGAAAABwAAAAcAAAABAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAMAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAACAAAAAb6cBAFCnAQAWcAEAfKcBAHSnAQCCpwEAAAAAABx0AQAldAEALHQBADp0AQBBdAEAmKcBAEh0AQBPdAEAAQAAAAgAAAD/////AAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAO11AQAIAAAAAwAAAPZ1AQD6dQEACwAAAAYAAADWgQEABnYBAAIAAAABAAAACXYBAA12AQAEAAAAAgAAABJ2AQAWdgEABAAAAAQAAAAbdgEAIHYBAAUAAAAFAAAAJnYBACp2AQAEAAAABwAAAC92AQAzdgEABQAAAAkAAAA5dgEAPXYBAAQAAAAKAAAAQnYBAEd2AQAEAAAADAAAAEx2AQAQewEAAAAAAAEAAAAYewEAAQAAAAAAAACjpgEAAQAAAAEAAAATBgIAAAAAAAAAAAAAAAAAAAAAAAAAAAD5eQEAMQAAAAAAAAAAAAAA0aEBABAAAAA7EgIAgAAAAPJ5AQBAAAAAPJQBABAAAAD0eQEAQAAAAAAAAAAAAAAAwHkBAAEAAADHeQEAAgAAAMx5AQADAAAA+poBAAQAAABekQEABQAAANB5AQAGAAAAEwYCAAgAAADUeQEAIQAAANh5AQAiAAAA3HkBACIAAADgeQEAAQAAAOV5AQAHAAAA63kBACcAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAP////8AAAAAKQAAAAAAAAAAAAAAAAAAAAAAAAArfwEAMn8BAAAAAADTgQEA1oEBANmBAQAAAAAAAAAAAAEAAAACAAAA/////5aBAQCcgQEAEwYCAAAAAABkAAAAZQAAAGYAAABkAAAACAAAAAgAAAAAAAAAAAAAACoAAAARAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAACQAAACsAAAARAAAAAAAAAAAAAAAAAAAACAAAAP////8AAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAA+poBAPhUAACABgAAAAAAACeRAQD4VAAAsAYAAAAAAAAAmgEA+FQAAOAGAAAAAAAAL5EBAPhUAADgBgAAAAAAADSRAQD4VAAAEAcAAAAAAAA7kQEAEFUAABAHAAAAAAAAQZEBAPhUAABABwAAAAAAAEWRAQD4VAAAcAcAAAAAAAATBgIA+FQAAKAHAAAAAAAATpEBAPhUAACgBwAAAAAAAFiRAQD4VAAAUAYAAAAAAABekQEA+FQAANAHAAAAAAAAZpEBAPhUAAAACAAAAAAAAHCRAQD4VAAAMAgAAAAAAAB+kQEA+FQAAGAIAAAAAAAAhJEBAPhUAACQCAAAAAAAAI2RAQD4VAAAwAgAAAAAAACVkQEA+FQAAPAIAAAAAAAAnpEBAPhUAAAgCQAAAAAAAKaRAQD4VAAAUAkAAAAAAACrkQEA+FQAAIAJAAAAAAAAr5EBAPhUAACwCQAAAAAAALaRAQD4VAAA4AkAAAAAAAC8kQEA+FQAABAKAAAAAAAAxpEBAChVAABACgAAAAAAAM+RAQD4VAAAgAYAAAAAAADUkQEA+FQAAIAGAAAAAAAA3pEBAPhUAABwCgAAAAAAAOWRAQD4VAAAoAoAAAAAAADykQEA+FQAANAKAAAAAAAAAJIBAPhUAAAACwAAAAAAAA6SAQD4VAAAMAsAAAAAAAAakgEA+FQAAGALAAAAAAAAJ5IBAPhUAACQCwAAAAAAADCSAQD4VAAAwAsAAAAAAAA6kgEA+FQAAPALAAAAAAAAQ5IBAPhUAAAgDAAAAAAAAEuSAQD4VAAAUAwAAAAAAABTkgEA+FQAAIAMAAAAAAAAXJIBAPhUAACwDAAAAAAAAGCSAQD4VAAA4AwAAAAAAABrkgEA+FQAABANAAAAAAAAb5IBAPhUAABADQAAAAAAAHmSAQD4VAAAcA0AAAAAAACCkgEA+FQAAKANAAAAAAAAipIBAPhUAADQDQAAAAAAAJeSAQD4VAAAAA4AAAAAAACjkgEA+FQAADAOAAAAAAAArpIBAPhUAABgDgAAAAAAAL6SAQD4VAAAkA4AAAAAAADMkgEA+FQAAMAOAAAAAAAA25IBAPhUAADwDgAAAAAAAOWSAQD4VAAAIA8AAAAAAADukgEA+FQAAFAPAAAAAAAA+JIBAPhUAACADwAAAAAAAAKTAQD4VAAAsA8AAAAAAAAJkwEA+FQAAOAPAAAAAAAAEJMBAPhUAAAQEAAAAAAAABqTAQBAVQAAAAAAAAAAAAAhkwEAQFUAAAAAAAAAAAAAA5EBAFhVAAAAAAAAAAAAACmTAQBwVQAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAFoAAAAXAAAABAAAAAIAAAAMAAAAWwAAAFoAAAAXAAAABQAAAAAAAAANAAAAWQAAAFoAAAAXAAAABAAAAAIAAAAMAAAAXAAAAF0AAAAYAAAABgAAAAMAAAAOAAAAXgAAAF8AAAAXAAAABwAAAAAAAAAPAAAAWQAAAFoAAAAXAAAACAAAAAIAAAAMAAAAEAAAABEAAAASAAAAEwAAACuUAQAylAEAAAAAADqUAQA8lAEAdRICAD6UAQAMAAAABAAAAAYAAAACAAAAAwAAAAEAAAAJAAAACAAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAACLlQEAm5UBAKiVAQAAAAAAAAAAAAQAAACtlQEAAAAAAAAAAAC4lQEAm5UBAKiVAQAAAAAAz5UBAAUAAACtlQEAAAAAANeVAQDelQEAm5UBAO6VAQAAAAAAAAAAAAYAAACtlQEAGaYBAAAAAADzlQEAm5UBAO6VAQAAAAAAz5UBAAcAAACtlQEAGaYBANeVAQAKlgEAF5YBAO6VAQAAAAAAAAAAAAoAAAAllgEAGaYBAAAAAAArlgEAF5YBAO6VAQAAAAAA15UBAAsAAAAllgEAGaYBANeVAQA+lgEAF5YBAEyWAQAAAAAAAAAAAAgAAAAllgEAAAAAAAAAAABSlgEAF5YBAEyWAQAAAAAA15UBAAkAAAAllgEAAAAAANeVAQBmlgEAZpYBAAAAAAAAAAAAAAAAAAwAAABulgEAAAAAAAAAAAB4lgEAZpYBABmmAQAAAAAAAAAAAA4AAABulgEAGaYBAAAAAACFlgEAZpYBABmmAQAAAAAAz5UBAA8AAABulgEAGaYBANeVAQCZlgEAZpYBAAAAAAAAAAAAz5UBAA0AAABulgEAAAAAANeVAQCplgEAqZYBAAAAAAAAAAAAAAAAABAAAACtlQEAAAAAAAAAAACzlgEAqZYBABmmAQAAAAAAAAAAABIAAACtlQEAGaYBAAAAAADClgEAqZYBABmmAQAAAAAAz5UBABMAAACtlQEAGaYBANeVAQDYlgEAqZYBAAAAAADplgEAAAAAABQAAACtlQEAAAAAAAAAAADzlgEAqZYBABmmAQDplgEAAAAAABYAAACtlQEAGaYBAAAAAAAJlwEAqZYBABmmAQDplgEAz5UBABcAAACtlQEAGaYBANeVAQAmlwEAqZYBAAAAAADplgEAz5UBABUAAACtlQEAAAAAANeVAQA/lwEAqZYBAAAAAAAAAAAAz5UBABEAAACtlQEAAAAAANeVAQBRlwEAZ5cBABmmAQAAAAAAAAAAABoAAAAllgEAGaYBAAAAAAB8lwEAZ5cBABmmAQAAAAAA15UBABsAAAAllgEAGaYBANeVAQCYlwEAZ5cBAAAAAAAAAAAA15UBABkAAAAllgEAAAAAANeVAQCwlwEAZ5cBAMeXAQAAAAAAAAAAABgAAAAllgEAAAAAAAAAAADNlwEA25cBABmmAQAAAAAAAAAAAB4AAAAllgEAGaYBAAAAAADtlwEA25cBABmmAQAAAAAA15UBAB8AAAAllgEAGaYBANeVAQABmAEA25cBAAAAAAAAAAAA15UBAB0AAAAllgEAAAAAANeVAQARmAEA25cBAMeXAQAAAAAAAAAAABwAAAAllgEAAAAAAAAAAAAgmAEAIJgBAAAAAAAAAAAAAAAAACAAAAAnmAEAAAAAAAAAAAAvmAEAOpgBABmmAQAAAAAAAAAAAAIAAAAllgEAGaYBAAAAAABAmAEAOpgBABmmAQAAAAAA15UBAAMAAAAllgEAGaYBANeVAQBRmAEAOpgBAAAAAAAAAAAA15UBAAEAAAAllgEAAAAAANeVAQAImgEAOpgBAAAAAAAAAAAAAAAAAAAAAAAllgEAAAAAAAAAAABemAEAeJgBAIeYAQAAAAAA15UBACEAAAAllgEAAAAAANeVAQCOmAEAm5gBAAAAAAAAAAAAAAAAACIAAAAnmAEAAAAAAAAAAAAIAAAABAAAAAAAAAAKAAAALQAAABIAAAAAAAAAAAAAAAAAAAAIAAAA/////wAAAAAAAAAALgAAAAAAAAAAAAAAAAAAAAAAAAA3mwEAxgAAAD2bAQDBAAAARJsBAMIAAABKmwEAwAAAAFGbAQCRAwAAV5sBAMUAAABdmwEAwwAAAGSbAQDEAAAAaZsBAJIDAABumwEAxwAAAHWbAQCnAwAAeZsBACEgAACAmwEAlAMAAIabAQDQAAAAipsBAMkAAACRmwEAygAAAJebAQDIAAAAnpsBAJUDAACmmwEAlwMAAKqbAQDLAAAAr5sBAJMDAAC1mwEAzQAAALybAQDOAAAAwpsBAMwAAADJmwEAmQMAAM6bAQDPAAAA05sBAJoDAADZmwEAmwMAAOCbAQCcAwAA45sBANEAAADqmwEAnQMAAO2bAQBSAQAA85sBANMAAAD6mwEA1AAAAACcAQDSAAAAB5wBAKkDAAANnAEAnwMAABWcAQDYAAAAHJwBANUAAAAjnAEA1gAAACicAQCmAwAALJwBAKADAAAvnAEAMyAAADWcAQCoAwAAOZwBAKEDAAA9nAEAYAEAAEScAQCjAwAASpwBAN4AAABQnAEApAMAAFScAQCYAwAAWpwBANoAAABhnAEA2wAAAGecAQDZAAAAbpwBAKUDAAB2nAEA3AAAAHucAQCeAwAAfpwBAN0AAACFnAEAeAEAAIqcAQCWAwAAj5wBAOEAAACWnAEA4gAAAJycAQC0AAAAopwBAOYAAAConAEA4AAAAK+cAQA1IQAAt5wBALEDAAC9nAEAJgAAAMGcAQAnIgAAxZwBACAiAADJnAEA5QAAAM+cAQBIIgAA1ZwBAOMAAADcnAEA5AAAAOGcAQAeIAAA55wBALIDAADsnAEApgAAAPOcAQAiIAAA+JwBACkiAAD8nAEA5wAAAAOdAQC4AAAACZ0BAKIAAAAOnQEAxwMAABKdAQDGAgAAF50BAGMmAAAdnQEARSIAACKdAQCpAAAAJ50BALUhAAAtnQEAKiIAADGdAQCkAAAAOJ0BANMhAAA9nQEAICAAAESdAQCTIQAASZ0BALAAAABNnQEAtAMAAFOdAQBmJgAAWZ0BAPcAAABgnQEA6QAAAGedAQDqAAAAbZ0BAOgAAAB0nQEABSIAAHqdAQADIAAAf50BAAIgAACEnQEAtQMAAIydAQBhIgAAkp0BALcDAACWnQEA8AAAAJqdAQDrAAAAn50BAKwgAACknQEAAyIAAKqdAQCSAQAAr50BAAAiAAC2nQEAvQAAAL2dAQC8AAAAxJ0BAL4AAADLnQEARCAAANGdAQCzAwAA150BAGUiAADanQEAPgAAAN2dAQDUIQAA4p0BAJQhAADnnQEAZSYAAO6dAQAmIAAA9Z0BAO0AAAD8nQEA7gAAAAKeAQChAAAACJ4BAOwAAAAPngEAESEAABWeAQAeIgAAG54BACsiAAAfngEAuQMAACSeAQC/AAAAK54BAAgiAAAwngEA7wAAADWeAQC6AwAAO54BANAhAABAngEAuwMAAEeeAQApIwAATJ4BAKsAAABSngEAkCEAAFeeAQAIIwAAXZ4BABwgAABjngEAZCIAAGaeAQAKIwAAbZ4BABciAAB0ngEAyiUAAHieAQAOIAAAfJ4BADkgAACDngEAGCAAAImeAQA8AAAAjJ4BAK8AAACRngEAFCAAAJeeAQC1AAAAnZ4BALcAAAA8pwEAEiIAAKSeAQC8AwAAp54BAAciAACtngEAoAAAALKeAQATIAAAuJ4BAGAiAAC7ngEACyIAAL6eAQCsAAAAwp4BAAkiAADIngEAhCIAAM2eAQDxAAAA1J4BAL0DAADXngEA8wAAAN6eAQD0AAAA5J4BAFMBAADqngEA8gAAAPGeAQA+IAAA954BAMkDAAD9ngEAvwMAAAWfAQCVIgAAC58BACgiAAAOnwEAqgAAABOfAQC6AAAAGJ8BAPgAAAAfnwEA9QAAACafAQCXIgAALZ8BAPYAAAAynwEAtgAAADefAQACIgAAPJ8BADAgAABDnwEApSIAAEifAQDGAwAATJ8BAMADAABPnwEA1gMAAFOfAQCxAAAAWp8BAKMAAABgnwEAMiAAAGafAQAPIgAAa58BAB0iAABwnwEAyAMAAHSfAQAiAAAAeZ8BANIhAAB+nwEAGiIAAISfAQAqIwAAiZ8BALsAAACPnwEAkiEAAJSfAQAJIwAAmp8BAB0gAACgnwEAHCEAAKWfAQCuAAAAqZ8BAAsjAACwnwEAwQMAALSfAQAPIAAAuJ8BADogAAC/nwEAGSAAAMWfAQAaIAAAy58BAGEBAADSnwEAxSIAANefAQCnAAAA3J8BAK0AAADgnwEAwwMAAOafAQDCAwAA7Z8BADwiAADxnwEAYCYAAPifAQCCIgAA/J8BAIYiAAABoAEAESIAAAWgAQCDIgAACaABALkAAAAOoAEAsgAAABOgAQCzAAAAGKABAIciAAAdoAEA3wAAACOgAQDEAwAAJ6ABADQiAAAuoAEAuAMAADSgAQDRAwAAPaABAAkgAABEoAEA/gAAAEqgAQDcAgAAUKABANcAAABWoAEAIiEAAFygAQDRIQAAYaABAPoAAABooAEAkSEAAG2gAQD7AAAAc6ABAPkAAAB6oAEAqAAAAH6gAQDSAwAAhKABAMUDAACMoAEA/AAAAJGgAQAYIQAAmKABAL4DAACboAEA/QAAAKKgAQClAAAApqABAP8AAACroAEAtgMAALCgAQANIAAAtKABAAwgAAAHAAAACAAAAAEBAAAIAAAACAAAAAAAAAAAAAAALwAAABMAAAAAAAAAAAAAAAAAAAAIAAAAEAAAAAAAAAAAAAAAMAAAABQAAAAAAAAAAAAAAAAAAAD8pgEACQAAAP6mAQAKAAAAA6cBAAoAAAALpwEACwAAABGnAQALAAAAGqcBAAwAAAAdpwEADAAAACOnAQANAAAAKKcBAA0AAAAwpwEADgAAADWnAQAOAAAAPKcBAA8AAABCpwEADwAAAE6nAQAQAAAAYAAAADEAAAAyAAAAFAAAADMAAABhAAAANAAAABUAAAA1AAAACAAAAAQAAAD/////AAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAmagBAFVdyX/Jf/8ApKgBALst1L6u1P8Ar6gBABR3/f3Ahv8AuqgBAFVdyX/Jf/8AxagBALst1L6u1P8A0KgBABR3/f3Ahv8A26gBACpm////mf8A5qgBAFVdyX/Jf/8A8agBALst1L6u1P8A/KgBABR3/f3Ahv8AB6kBACpm////mf8AEqkBAJetsDhssP8AHakBAFVdyX/Jf/8AKKkBALst1L6u1P8AM6kBABR3/f3Ahv8APqkBACpm////mf8ASakBAJetsDhssP8AVKkBAOj88PACf/8AX6kBAFVdyX/Jf/8AaqkBALst1L6u1P8AdakBABR3/f3Ahv8AgKkBACpm////mf8Ai6kBAJetsDhssP8AlqkBAOj88PACf/8AoakBABHgv79bF/8ArKkBAFVdyX/Jf/8At6kBALst1L6u1P8AwqkBABR3/f3Ahv8AzakBACpm////mf8A2KkBAJetsDhssP8A46kBAOj88PACf/8A7qkBABHgv79bF/8A+akBAAAAZmZmZv8ABKoBAJMZ997r9/8ADqoBAI5L4Z7K4f8AGKoBAJG8vTGCvf8AIqoBAJ8Q/+/z//8ALKoBAI8u573X5/8ANqoBAI9/1muu1v8AQKoBAJPQtSFxtf8ASqoBAJ8Q/+/z//8AVKoBAI8u573X5/8AXqoBAI9/1muu1v8AaKoBAJG8vTGCvf8AcqoBAJXxnAhRnP8AfKoBAJ8Q/+/z//8AhqoBAJQr78bb7/8AkKoBAI5L4Z7K4f8AmqoBAI9/1muu1v8ApKoBAJG8vTGCvf8ArqoBAJXxnAhRnP8AuKoBAJ8Q/+/z//8AwqoBAJQr78bb7/8AzKoBAI5L4Z7K4f8A1qoBAI9/1muu1v8A4KoBAJCpxkKSxv8A6qoBAJPQtSFxtf8A9KoBAJfxlAhFlP8A/qoBAJQI//f7//8ACKsBAJMZ997r9/8AEqsBAJQr78bb7/8AHKsBAI5L4Z7K4f8AJqsBAI9/1muu1v8AMKsBAJCpxkKSxv8AOqsBAJPQtSFxtf8ARKsBAJfxlAhFlP8ATqsBAJQI//f7//8AWKsBAJMZ997r9/8AYqsBAJQr78bb7/8AbKsBAI5L4Z7K4f8AdqsBAI9/1muu1v8AgKsBAJCpxkKSxv8AiqsBAJPQtSFxtf8AlKsBAJXxnAhRnP8AnqsBAJjrawgwa/8AqKsBABfvVFQwBf8AsqsBAHf/PAA8MP8AvasBABfsjIxRCv8Ax6sBABjCv7+BLf8A0asBAB1w39/Cff8A26sBAB409vbow/8A5asBAHkm6sfq5f8A76sBAHhfzYDNwf8A+asBAHyllzWXj/8AA6wBAHz8ZgFmXv8ADawBABfvVFQwBf8AF6wBAHz8ZgFmXv8AIqwBAHf/PAA8MP8ALawBABfsjIxRCv8AN6wBABjCv7+BLf8AQawBAB1w39/Cff8AS6wBAB409vbow/8AVawBAAAA9fX19f8AX6wBAHkm6sfq5f8AaawBAHhfzYDNwf8Ac6wBAHyllzWXj/8AfawBAByH2NizZf8AhqwBAAAA9fX19f8Aj6wBAHt/tFq0rP8AmKwBABXXpqZhGv8AoawBAB1w39/Cff8AqqwBAHhfzYDNwf8As6wBAHn9hQGFcf8AvKwBABXXpqZhGv8AxawBAB1w39/Cff8AzqwBAAAA9fX19f8A16wBAHhfzYDNwf8A4KwBAHn9hQGFcf8A6awBABfsjIxRCv8A8qwBAByH2NizZf8A+6wBAB409vbow/8ABK0BAHkm6sfq5f8ADa0BAHt/tFq0rP8AFq0BAHz8ZgFmXv8AH60BABfsjIxRCv8AKK0BAByH2NizZf8AMa0BAB409vbow/8AOq0BAAAA9fX19f8AQ60BAHkm6sfq5f8ATK0BAHt/tFq0rP8AVa0BAHz8ZgFmXv8AXq0BABfsjIxRCv8AZ60BABjCv7+BLf8AcK0BAB1w39/Cff8Aea0BAB409vbow/8Agq0BAHkm6sfq5f8Ai60BAHhfzYDNwf8AlK0BAHyllzWXj/8Ana0BAHz8ZgFmXv8Apq0BABfsjIxRCv8Ar60BABjCv7+BLf8AuK0BAB1w39/Cff8Awa0BAB409vbow/8Ayq0BAAAA9fX19f8A060BAHkm6sfq5f8A3K0BAHhfzYDNwf8A5a0BAHyllzWXj/8A7q0BAHz8ZgFmXv8A960BAIcU+eX1+f8AAK4BAHVK2JnYyf8ACa4BAGe5oiyiX/8AEq4BAIgO++34+/8AG64BAH824rLi4v8AJK4BAHF4wmbCpP8ALa4BAGK+iyOLRf8ANq4BAIgO++34+/8AP64BAH824rLi4v8ASK4BAHF4wmbCpP8AUa4BAGe5oiyiX/8AWq4BAGb/bQBtLP8AY64BAIgO++34+/8AbK4BAHci7Mzs5v8Ada4BAHVK2JnYyf8Afq4BAHF4wmbCpP8Ah64BAGe5oiyiX/8AkK4BAGb/bQBtLP8Ama4BAIgO++34+/8Aoq4BAHci7Mzs5v8Aq64BAHVK2JnYyf8AtK4BAHF4wmbCpP8Ava4BAGmfrkGudv8Axq4BAGK+iyOLRf8Az64BAGb/WABYJP8A2K4BAIYG/ff8/f8A4a4BAIcU+eX1+f8A6q4BAHci7Mzs5v8A864BAHVK2JnYyf8A/K4BAHF4wmbCpP8ABa8BAGmfrkGudv8ADq8BAGK+iyOLRf8AF68BAGb/WABYJP8AIK8BAIYG/ff8/f8AKa8BAIcU+eX1+f8AMq8BAHci7Mzs5v8AO68BAHVK2JnYyf8ARK8BAHF4wmbCpP8ATa8BAGmfrkGudv8AVq8BAGK+iyOLRf8AX68BAGb/bQBtLP8AaK8BAGX/RABEG/8Aca8BAJAU9ODs9P8Aeq8BAJRG2p682v8Ag68BAMR7p4hWp/8AjK8BAIgO++34+/8Ala8BAJI147PN4/8Anq8BAKJKxoyWxv8Ap68BAMqVnYhBnf8AsK8BAIgO++34+/8Aua8BAJI147PN4/8Awq8BAKJKxoyWxv8Ay68BAMR7p4hWp/8A1K8BANbhgYEPfP8A3a8BAIgO++34+/8A5q8BAJQr5r/T5v8A768BAJRG2p682v8A+K8BAKJKxoyWxv8AAbABAMR7p4hWp/8ACrABANbhgYEPfP8AE7ABAIgO++34+/8AHLABAJQr5r/T5v8AJbABAJRG2p682v8ALrABAKJKxoyWxv8AN7ABAL5ksYxrsf8AQLABAMqVnYhBnf8ASbABANX8bm4Ba/8AUrABAIYG/ff8/f8AW7ABAJAU9ODs9P8AZLABAJQr5r/T5v8AbbABAJRG2p682v8AdrABAKJKxoyWxv8Af7ABAL5ksYxrsf8AiLABAMqVnYhBnf8AkbABANX8bm4Ba/8AmrABAIYG/ff8/f8Ao7ABAJAU9ODs9P8ArLABAJQr5r/T5v8AtbABAJRG2p682v8AvrABAKJKxoyWxv8Ax7ABAL5ksYxrsf8A0LABAMqVnYhBnf8A2bABANbhgYEPfP8A4rABANX/TU0AS/8A67ABAHLTnhued/8A9bABABL82dlfAv8A/7ABAK1fs3Vws/8ACbEBAHLTnhued/8AE7EBABL82dlfAv8AHbEBAK1fs3Vws/8AJ7EBAOnR5+cpiv8AMbEBAHLTnhued/8AO7EBABL82dlfAv8ARbEBAK1fs3Vws/8AT7EBAOnR5+cpiv8AWbEBAD7QpmamHv8AY7EBAHLTnhued/8AbbEBABL82dlfAv8Ad7EBAK1fs3Vws/8AgbEBAOnR5+cpiv8Ai7EBAD7QpmamHv8AlbEBAB/85uarAv8An7EBAHLTnhued/8AqbEBABL82dlfAv8As7EBAK1fs3Vws/8AvbEBAOnR5+cpiv8Ax7EBAD7QpmamHv8A0bEBAB/85uarAv8A27EBABvSpqZ2Hf8A5bEBAHLTnhued/8A77EBABL82dlfAv8A+bEBAK1fs3Vws/8AA7IBAOnR5+cpiv8ADbIBAD7QpmamHv8AF7IBAB/85uarAv8AIbIBABvSpqZ2Hf8AK7IBAAAAZmZmZv8ANbIBAEwZ8+Dz2/8APrIBAF893ajdtf8AR7IBAIyqykOiyv8AULIBAEER+fD56P8AWbIBAFcu5LrkvP8AYrIBAHtlzHvMxP8Aa7IBAI3FviuMvv8AdLIBAEER+fD56P8AfbIBAFcu5LrkvP8AhrIBAHtlzHvMxP8Aj7IBAIyqykOiyv8AmLIBAJHzrAhorP8AobIBAEER+fD56P8AqrIBAE0p68zrxf8As7IBAF893ajdtf8AvLIBAHtlzHvMxP8AxbIBAIyqykOiyv8AzrIBAJHzrAhorP8A17IBAEER+fD56P8A4LIBAE0p68zrxf8A6bIBAF893ajdtf8A8rIBAHtlzHvMxP8A+7IBAImg006z0/8ABLMBAI3FviuMvv8ADbMBAJPynghYnv8AFrMBADwM/Pf88P8AH7MBAEwZ8+Dz2/8AKLMBAE0p68zrxf8AMbMBAF893ajdtf8AOrMBAHtlzHvMxP8AQ7MBAImg006z0/8ATLMBAI3FviuMvv8AVbMBAJPynghYnv8AXrMBADwM/Pf88P8AZ7MBAEwZ8+Dz2/8AcLMBAE0p68zrxf8AebMBAF893ajdtf8AgrMBAHtlzHvMxP8Ai7MBAImg006z0/8AlLMBAI3FviuMvv8AnbMBAJHzrAhorP8AprMBAJbvgQhAgf8Ar7MBAEoV9eX14P8AurMBAFBI2aHZm/8AxbMBAGKyozGjVP8A0LMBAEkP+O346f8A27MBAE425Lrks/8A5rMBAFZoxHTEdv8A8bMBAGK+iyOLRf8A/LMBAEkP+O346f8AB7QBAE425Lrks/8AErQBAFZoxHTEdv8AHbQBAGKyozGjVP8AKLQBAGb/bQBtLP8AM7QBAEkP+O346f8APrQBAE0s6cfpwP8ASbQBAFBI2aHZm/8AVLQBAFZoxHTEdv8AX7QBAGKyozGjVP8AarQBAGb/bQBtLP8AdbQBAEkP+O346f8AgLQBAE0s6cfpwP8Ai7QBAFBI2aHZm/8AlrQBAFZoxHTEdv8AobQBAGCeq0GrXf8ArLQBAGK+iyOLRf8At7QBAGz/WgBaMv8AwrQBAEgH/Pf89f8AzbQBAEoV9eX14P8A2LQBAE0s6cfpwP8A47QBAFBI2aHZm/8A7rQBAFZoxHTEdv8A+bQBAGCeq0GrXf8ABLUBAGK+iyOLRf8AD7UBAGz/WgBaMv8AGrUBAEgH/Pf89f8AJbUBAEoV9eX14P8AMLUBAE0s6cfpwP8AO7UBAFBI2aHZm/8ARrUBAFZoxHTEdv8AUbUBAGCeq0GrXf8AXLUBAGK+iyOLRf8AZ7UBAGb/bQBtLP8AcrUBAGX/RABEG/8AfbUBAAAA8PDw8P8Ah7UBAAAAvb29vf8AkbUBAAAAY2NjY/8Am7UBAAAA9/f39/8ApbUBAAAAzMzMzP8Ar7UBAAAAlpaWlv8AubUBAAAAUlJSUv8Aw7UBAAAA9/f39/8AzbUBAAAAzMzMzP8A17UBAAAAlpaWlv8A4bUBAAAAY2NjY/8A67UBAAAAJSUlJf8A9bUBAAAA9/f39/8A/7UBAAAA2dnZ2f8ACbYBAAAAvb29vf8AE7YBAAAAlpaWlv8AHbYBAAAAY2NjY/8AJ7YBAAAAJSUlJf8AMbYBAAAA9/f39/8AO7YBAAAA2dnZ2f8ARbYBAAAAvb29vf8AT7YBAAAAlpaWlv8AWbYBAAAAc3Nzc/8AY7YBAAAAUlJSUv8AbbYBAAAAJSUlJf8Ad7YBAAAA//////8AgbYBAAAA8PDw8P8Ai7YBAAAA2dnZ2f8AlbYBAAAAvb29vf8An7YBAAAAlpaWlv8AqbYBAAAAc3Nzc/8As7YBAAAAUlJSUv8AvbYBAAAAJSUlJf8Ax7YBAAAA//////8A0bYBAAAA8PDw8P8A27YBAAAA2dnZ2f8A5bYBAAAAvb29vf8A77YBAAAAlpaWlv8A+bYBAAAAc3Nzc/8AA7cBAAAAUlJSUv8ADbcBAAAAJSUlJf8AF7cBAAAAAAAAAP8AIbcBABUw/v7mzv8ALbcBABOT/f2ua/8AObcBAA7w5uZVDf8ARbcBABMg/v7t3v8AUbcBABR4/f2+hf8AXbcBABHC/f2NPP8AabcBAA392dlHAf8AdbcBABMg/v7t3v8AgbcBABR4/f2+hf8AjbcBABHC/f2NPP8AmbcBAA7w5uZVDf8ApbcBAA36pqY2A/8AsbcBABMg/v7t3v8AvbcBABVb/f3Qov8AybcBABOT/f2ua/8A1bcBABHC/f2NPP8A4bcBAA7w5uZVDf8A7bcBAA36pqY2A/8A+bcBABMg/v7t3v8ABbgBABVb/f3Qov8AEbgBABOT/f2ua/8AHbgBABHC/f2NPP8AKbgBABDq8fFpE/8ANbgBAA392dlIAf8AQbgBAAz3jIwtBP8ATbgBABUU///16/8AWbgBABUw/v7mzv8AZbgBABVb/f3Qov8AcbgBABOT/f2ua/8AfbgBABHC/f2NPP8AibgBABDq8fFpE/8AlbgBAA392dlIAf8AobgBAAz3jIwtBP8ArbgBABUU///16/8AubgBABUw/v7mzv8AxbgBABVb/f3Qov8A0bgBABOT/f2ua/8A3bgBABHC/f2NPP8A6bgBABDq8fFpE/8A9bgBAA392dlIAf8AAbkBAA36pqY2A/8ADbkBAAz2f38nBP8AGbkBABk2/v7oyP8AIrkBABN5/f27hP8AK7kBAAXF4+NKM/8ANLkBABol/v7w2f8APbkBABhz/f3Miv8ARrkBAA2k/PyNWf8AT7kBAAPa19cwH/8AWLkBABol/v7w2f8AYbkBABhz/f3Miv8AarkBAA2k/PyNWf8Ac7kBAAXF4+NKM/8AfLkBAAD/s7MAAP8AhbkBABol/v7w2f8AjrkBABhf/f3Unv8Al7kBABN5/f27hP8AoLkBAA2k/PyNWf8AqbkBAAXF4+NKM/8AsrkBAAD/s7MAAP8Au7kBABol/v7w2f8AxLkBABhf/f3Unv8AzbkBABN5/f27hP8A1rkBAA2k/PyNWf8A37kBAAey7+9lSP8A6LkBAAPa19cwH/8A8bkBAAD/mZkAAP8A+rkBABgS///37P8AA7oBABk2/v7oyP8ADLoBABhf/f3Unv8AFboBABN5/f27hP8AHroBAA2k/PyNWf8AJ7oBAAey7+9lSP8AMLoBAAPa19cwH/8AOboBAAD/mZkAAP8AQroBABgS///37P8AS7oBABk2/v7oyP8AVLoBABhf/f3Unv8AXboBABN5/f27hP8AZroBAA2k/PyNWf8Ab7oBAAey7+9lSP8AeLoBAAPa19cwH/8AgboBAAD/s7MAAP8AiroBAAD/f38AAP8Ak7oBAI5E46bO4/8An7oBAL6Zmmo9mv8ArLoBAJDTtB94tP8AuLoBAEFh37Lfiv8AxLoBAFK4oDOgLP8A0LoBAABj+/uamf8A3LoBAP7h4+MaHP8A6LoBABeP/f2/b/8A9LoBABX///9/AP8AALsBAMYq1sqy1v8ADLsBAI5E46bO4/8AGLsBAL6Zmmo9mv8AJbsBACpm////mf8AMrsBAJDTtB94tP8APrsBAEFh37Lfiv8ASrsBAFK4oDOgLP8AVrsBAABj+/uamf8AYrsBAP7h4+MaHP8AbrsBABeP/f2/b/8AersBABX///9/AP8AhrsBAMYq1sqy1v8AkrsBAI5E46bO4/8AnrsBAL6Zmmo9mv8Aq7sBACpm////mf8AuLsBAA/FsbFZKP8AxbsBAJDTtB94tP8A0bsBAEFh37Lfiv8A3bsBAFK4oDOgLP8A6bsBAABj+/uamf8A9bsBAP7h4+MaHP8AAbwBABeP/f2/b/8ADbwBABX///9/AP8AGbwBAMYq1sqy1v8AJbwBAI5E46bO4/8AMLwBAJDTtB94tP8AO7wBAEFh37Lfiv8ARrwBAI5E46bO4/8AUbwBAJDTtB94tP8AXLwBAEFh37Lfiv8AZ7wBAFK4oDOgLP8AcrwBAI5E46bO4/8AfbwBAJDTtB94tP8AiLwBAEFh37Lfiv8Ak7wBAFK4oDOgLP8AnrwBAABj+/uamf8AqbwBAI5E46bO4/8AtLwBAJDTtB94tP8Av7wBAEFh37Lfiv8AyrwBAFK4oDOgLP8A1bwBAABj+/uamf8A4LwBAP7h4+MaHP8A67wBAI5E46bO4/8A9rwBAJDTtB94tP8AAb0BAEFh37Lfiv8ADL0BAFK4oDOgLP8AF70BAABj+/uamf8AIr0BAP7h4+MaHP8ALb0BABeP/f2/b/8AOL0BAI5E46bO4/8AQ70BAJDTtB94tP8ATr0BAEFh37Lfiv8AWb0BAFK4oDOgLP8AZL0BAABj+/uamf8Ab70BAP7h4+MaHP8Aer0BABeP/f2/b/8Ahb0BABX///9/AP8AkL0BAI5E46bO4/8Am70BAJDTtB94tP8Apr0BAEFh37Lfiv8Asb0BAFK4oDOgLP8AvL0BAABj+/uamf8Ax70BAP7h4+MaHP8A0r0BABeP/f2/b/8A3b0BABX///9/AP8A6L0BAMYq1sqy1v8A870BAANO+/u0rv8A/70BAJI147PN4/8AC74BAE0p68zrxf8AF74BAANO+/u0rv8AI74BAJI147PN4/8AL74BAE0p68zrxf8AO74BAMob5N7L5P8AR74BAANO+/u0rv8AU74BAJI147PN4/8AX74BAE0p68zrxf8Aa74BAMob5N7L5P8Ad74BABhY/v7Zpv8Ag74BAANO+/u0rv8Aj74BAJI147PN4/8Am74BAE0p68zrxf8Ap74BAMob5N7L5P8As74BABhY/v7Zpv8Av74BACoy////zP8Ay74BAANO+/u0rv8A174BAJI147PN4/8A474BAE0p68zrxf8A774BAMob5N7L5P8A+74BABhY/v7Zpv8AB78BACoy////zP8AE78BABws5eXYvf8AH78BAANO+/u0rv8AK78BAJI147PN4/8AN78BAE0p68zrxf8AQ78BAMob5N7L5P8AT78BABhY/v7Zpv8AW78BACoy////zP8AZ78BABws5eXYvf8Ac78BAOkj/f3a7P8Af78BAANO+/u0rv8Ai78BAJI147PN4/8Al78BAE0p68zrxf8Ao78BAMob5N7L5P8Ar78BABhY/v7Zpv8Au78BACoy////zP8Ax78BABws5eXYvf8A078BAOkj/f3a7P8A378BAAAA8vLy8v8A678BAGw14rPizf8A978BABFR/f3NrP8AA8ABAJsf6MvV6P8AD8ABAGw14rPizf8AG8ABABFR/f3NrP8AJ8ABAJsf6MvV6P8AM8ABAOQr9PTK5P8AP8ABAGw14rPizf8AS8ABABFR/f3NrP8AV8ABAJsf6MvV6P8AY8ABAOQr9PTK5P8Ab8ABADgt9eb1yf8Ae8ABAGw14rPizf8Ah8ABABFR/f3NrP8Ak8ABAJsf6MvV6P8An8ABAOQr9PTK5P8Aq8ABADgt9eb1yf8At8ABACNR///yrv8Aw8ABAGw14rPizf8Az8ABABFR/f3NrP8A28ABAJsf6MvV6P8A58ABAOQr9PTK5P8A88ABADgt9eb1yf8A/8ABACNR///yrv8AC8EBABkn8fHizP8AF8EBAGw14rPizf8AI8EBABFR/f3NrP8AL8EBAJsf6MvV6P8AO8EBAOQr9PTK5P8AR8EBADgt9eb1yf8AU8EBACNR///yrv8AX8EBABkn8fHizP8Aa8EBAAAAzMzMzP8Ad8EBAOb9jo4BUv8AgcEBAE2/ZCdkGf8AjMEBAObcxcUbff8AlsEBAOh23t53rv8AoMEBAOU+8fG22v8AqsEBAOkd/f3g7/8AtMEBADsm9eb10P8AvsEBAD1n4bjhhv8AyMEBAD+mvH+8Qf8A0sEBAETFkk2SIf8A3MEBAOb9jo4BUv8A5sEBAETFkk2SIf8A8cEBAE2/ZCdkGf8A/MEBAObcxcUbff8ABsIBAOh23t53rv8AEMIBAOU+8fG22v8AGsIBAOkd/f3g7/8AJMIBAAAA9/f39/8ALsIBADsm9eb10P8AOMIBAD1n4bjhhv8AQsIBAD+mvH+8Qf8ATMIBAOdM6emjyf8AVcIBAAAA9/f39/8AXsIBAD+B16HXav8AZ8IBAOTc0NAci/8AcMIBAOU+8fG22v8AecIBAD1n4bjhhv8AgsIBAEjGrE2sJv8Ai8IBAOTc0NAci/8AlMIBAOU+8fG22v8AncIBAAAA9/f39/8ApsIBAD1n4bjhhv8Ar8IBAEjGrE2sJv8AuMIBAObcxcUbff8AwcIBAOdM6emjyf8AysIBAOkd/f3g7/8A08IBADsm9eb10P8A3MIBAD+B16HXav8A5cIBAETFkk2SIf8A7sIBAObcxcUbff8A98IBAOdM6emjyf8AAMMBAOkd/f3g7/8ACcMBAAAA9/f39/8AEsMBADsm9eb10P8AG8MBAD+B16HXav8AJMMBAETFkk2SIf8ALcMBAObcxcUbff8ANsMBAOh23t53rv8AP8MBAOU+8fG22v8ASMMBAOkd/f3g7/8AUcMBADsm9eb10P8AWsMBAD1n4bjhhv8AY8MBAD+mvH+8Qf8AbMMBAETFkk2SIf8AdcMBAObcxcUbff8AfsMBAOh23t53rv8Ah8MBAOU+8fG22v8AkMMBAOkd/f3g7/8AmcMBAAAA9/f39/8AosMBADsm9eb10P8Aq8MBAD1n4bjhhv8AtMMBAD+mvH+8Qf8AvcMBAETFkk2SIf8AxsMBAM7/S0AAS/8A0MMBAGX/RABEG/8A28MBAM6tg3Yqg/8A5cMBAMdXq5lwq/8A78MBAMczz8Klz/8A+cMBANIV6OfU6P8AA8QBAEwe8Nnw0/8ADcQBAFBE26bboP8AF8QBAFh7rlquYf8AIcQBAGHFeBt4N/8AK8QBAM7/S0AAS/8ANcQBAGHFeBt4N/8AQMQBAGX/RABEG/8AS8QBAM6tg3Yqg/8AVcQBAMdXq5lwq/8AX8QBAMczz8Klz/8AacQBANIV6OfU6P8Ac8QBAAAA9/f39/8AfcQBAEwe8Nnw0/8Ah8QBAFBE26bboP8AkcQBAFh7rlquYf8Am8QBAMRGw6+Nw/8ApMQBAAAA9/f39/8ArcQBAFJav3+/e/8AtsQBAMmolHsylP8Av8QBAMczz8Klz/8AyMQBAFBE26bboP8A0cQBAGb/iACIN/8A2sQBAMmolHsylP8A48QBAMczz8Klz/8A7MQBAAAA9/f39/8A9cQBAFBE26bboP8A/sQBAGb/iACIN/8AB8UBAM6tg3Yqg/8AEMUBAMRGw6+Nw/8AGcUBANIV6OfU6P8AIsUBAEwe8Nnw0/8AK8UBAFJav3+/e/8ANMUBAGHFeBt4N/8APcUBAM6tg3Yqg/8ARsUBAMRGw6+Nw/8AT8UBANIV6OfU6P8AWMUBAAAA9/f39/8AYcUBAEwe8Nnw0/8AasUBAFJav3+/e/8Ac8UBAGHFeBt4N/8AfMUBAM6tg3Yqg/8AhcUBAMdXq5lwq/8AjsUBAMczz8Klz/8Al8UBANIV6OfU6P8AoMUBAEwe8Nnw0/8AqcUBAFBE26bboP8AssUBAFh7rlquYf8Au8UBAGHFeBt4N/8AxMUBAM6tg3Yqg/8AzcUBAMdXq5lwq/8A1sUBAMczz8Klz/8A38UBANIV6OfU6P8A6MUBAAAA9/f39/8A8cUBAEwe8Nnw0/8A+sUBAFBE26bboP8AA8YBAFh7rlquYf8ADMYBAGHFeBt4N/8AFcYBAL0L8uzn8v8AHsYBAJc926a92/8AJ8YBAI3FviuMvv8AMMYBALkI9vHu9v8AOcYBAJso4b3J4f8AQsYBAJFwz3Spz/8AS8YBAI/3sAVwsP8AVMYBALkI9vHu9v8AXcYBAJso4b3J4f8AZsYBAJFwz3Spz/8Ab8YBAI3FviuMvv8AeMYBAI/3jQRajf8AgcYBALkI9vHu9v8AisYBAKgY5tDR5v8Ak8YBAJc926a92/8AnMYBAJFwz3Spz/8ApcYBAI3FviuMvv8ArsYBAI/3jQRajf8At8YBALkI9vHu9v8AwMYBAKgY5tDR5v8AycYBAJc926a92/8A0sYBAJFwz3Spz/8A28YBAI63wDaQwP8A5MYBAI/3sAVwsP8A7cYBAI/4ewNOe/8A9sYBAOkI///3+/8A/8YBAL0L8uzn8v8ACMcBAKgY5tDR5v8AEccBAJc926a92/8AGscBAJFwz3Spz/8AI8cBAI63wDaQwP8ALMcBAI/3sAVwsP8ANccBAI/4ewNOe/8APscBAOkI///3+/8AR8cBAL0L8uzn8v8AUMcBAKgY5tDR5v8AWccBAJc926a92/8AYscBAJFwz3Spz/8Aa8cBAI63wDaQwP8AdMcBAI/3sAVwsP8AfccBAI/3jQRajf8AhscBAI/5WAI4WP8Aj8cBAMgO8Ozi8P8AmscBAJc926a92/8ApccBAILQmRyQmf8AsMcBAM8I9/bv9/8Au8cBAJso4b3J4f8AxscBAI+Az2epz/8A0ccBAIL7igKBiv8A3McBAM8I9/bv9/8A58cBAJso4b3J4f8A8scBAI+Az2epz/8A/ccBAILQmRyQmf8ACMgBAHf8bAFsWf8AE8gBAM8I9/bv9/8AHsgBAKgY5tDR5v8AKcgBAJc926a92/8ANMgBAI+Az2epz/8AP8gBAILQmRyQmf8ASsgBAHf8bAFsWf8AVcgBAM8I9/bv9/8AYMgBAKgY5tDR5v8Aa8gBAJc926a92/8AdsgBAI+Az2epz/8AgcgBAI63wDaQwP8AjMgBAIL7igKBiv8Al8gBAHb8ZAFkUP8AosgBAOkI///3+/8ArcgBAMgO8Ozi8P8AuMgBAKgY5tDR5v8Aw8gBAJc926a92/8AzsgBAI+Az2epz/8A2cgBAI63wDaQwP8A5MgBAIL7igKBiv8A78gBAHb8ZAFkUP8A+sgBAOkI///3+/8ABckBAMgO8Ozi8P8AEMkBAKgY5tDR5v8AG8kBAJc926a92/8AJskBAI+Az2epz/8AMckBAI63wDaQwP8APMkBAIL7igKBiv8AR8kBAHf8bAFsWf8AUskBAHX7RgFGNv8AXckBABLuf387CP8AZ8kBAMP/Sy0AS/8AcskBABT2s7NYBv8AfMkBABbo4OCCFP8AhskBABeb/f24Y/8AkMkBABhI/v7gtv8AmskBAKUU69ja6/8ApMkBALEv0rKr0v8ArskBALNUrIBzrP8AuMkBAL21iFQniP8AwskBABLuf387CP8AzMkBAL21iFQniP8A18kBAMP/Sy0AS/8A4skBABT2s7NYBv8A7MkBABbo4OCCFP8A9skBABeb/f24Y/8AAMoBABhI/v7gtv8ACsoBAAAA9/f39/8AFMoBAKUU69ja6/8AHsoBALEv0rKr0v8AKMoBALNUrIBzrP8AMsoBABe78fGjQP8AO8oBAAAA9/f39/8ARMoBALJFw5mOw/8ATcoBABH95uZhAf8AVsoBABeb/f24Y/8AX8oBALEv0rKr0v8AaMoBALmbmV48mf8AccoBABH95uZhAf8AesoBABeb/f24Y/8Ag8oBAAAA9/f39/8AjMoBALEv0rKr0v8AlcoBALmbmV48mf8AnsoBABT2s7NYBv8Ap8oBABe78fGjQP8AsMoBABhI/v7gtv8AucoBAKUU69ja6/8AwsoBALJFw5mOw/8Ay8oBAL21iFQniP8A1MoBABT2s7NYBv8A3coBABe78fGjQP8A5soBABhI/v7gtv8A78oBAAAA9/f39/8A+MoBAKUU69ja6/8AAcsBALJFw5mOw/8ACssBAL21iFQniP8AE8sBABT2s7NYBv8AHMsBABbo4OCCFP8AJcsBABeb/f24Y/8ALssBABhI/v7gtv8AN8sBAKUU69ja6/8AQMsBALEv0rKr0v8AScsBALNUrIBzrP8AUssBAL21iFQniP8AW8sBABT2s7NYBv8AZMsBABbo4OCCFP8AbcsBABeb/f24Y/8AdssBABhI/v7gtv8Af8sBAAAA9/f39/8AiMsBAKUU69ja6/8AkcsBALEv0rKr0v8AmssBALNUrIBzrP8Ao8sBAL21iFQniP8ArMsBALwO7+fh7/8AtcsBANZDycmUx/8AvssBAOre3d0cd/8Ax8sBALkI9vHu9v8A0MsBANMp2Ne12P8A2csBAOSL399lsP8A4ssBAO/ozs4SVv8A68sBALkI9vHu9v8A9MsBANMp2Ne12P8A/csBAOSL399lsP8ABswBAOre3d0cd/8AD8wBAOz/mJgAQ/8AGMwBALkI9vHu9v8AIcwBAMwm2tS52v8AKswBANZDycmUx/8AM8wBAOSL399lsP8APMwBAOre3d0cd/8ARcwBAOz/mJgAQ/8ATswBALkI9vHu9v8AV8wBAMwm2tS52v8AYMwBANZDycmUx/8AacwBAOSL399lsP8AcswBAOnR5+cpiv8Ae8wBAO/ozs4SVv8AhMwBAOz/kZEAP/8AjcwBAMMF+ff0+f8AlswBALwO7+fh7/8An8wBAMwm2tS52v8AqMwBANZDycmUx/8AscwBAOSL399lsP8AuswBAOnR5+cpiv8Aw8wBAO/ozs4SVv8AzMwBAOz/kZEAP/8A1cwBAMMF+ff0+f8A3swBALwO7+fh7/8A58wBAMwm2tS52v8A8MwBANZDycmUx/8A+cwBAOSL399lsP8AAs0BAOnR5+cpiv8AC80BAO/ozs4SVv8AFM0BAOz/mJgAQ/8AHc0BAPL/Z2cAH/8AJs0BALQI9e/t9f8AMs0BAKgl3Ly93P8APs0BALBksXVrsf8ASs0BALYH9/Lw9/8AVs0BAK0c4svJ4v8AYs0BAK06yJ6ayP8Abs0BALaAo2pRo/8Aes0BALYH9/Lw9/8Ahs0BAK0c4svJ4v8Aks0BAK06yJ6ayP8Ans0BALBksXVrsf8Aqs0BALy5j1Qnj/8Ats0BALYH9/Lw9/8Aws0BAKoS69ra6/8Azs0BAKgl3Ly93P8A2s0BAK06yJ6ayP8A5s0BALBksXVrsf8A8s0BALy5j1Qnj/8A/s0BALYH9/Lw9/8ACs4BAKoS69ra6/8AFs4BAKgl3Ly93P8AIs4BAK06yJ6ayP8ALs4BAKxTuoB9uv8AOs4BALaAo2pRo/8ARs4BAL7YhkoUhv8AUs4BAL8C/fz7/f8AXs4BALQI9e/t9f8Aas4BAKoS69ra6/8Ads4BAKgl3Ly93P8Ags4BAK06yJ6ayP8Ajs4BAKxTuoB9uv8Ams4BALaAo2pRo/8Aps4BAL7YhkoUhv8Ass4BAL8C/fz7/f8Avs4BALQI9e/t9f8Ays4BAKoS69ra6/8A1s4BAKgl3Ly93P8A4s4BAK06yJ6ayP8A7s4BAKxTuoB9uv8A+s4BALaAo2pRo/8ABs8BALy5j1Qnj/8AEs8BAL//fT8Aff8AHs8BAPL/Z2cAH/8AKM8BAJbxYQUwYf8AM88BAPncsrIYK/8APc8BAAWj1tZgTf8AR88BAA139PSlgv8AUc8BAA82/f3bx/8AW88BAI4g8NHl8P8AZc8BAI1X3pLF3v8Ab88BAI+nw0OTw/8Aec8BAJTOrCFmrP8Ag88BAPL/Z2cAH/8Ajc8BAJTOrCFmrP8AmM8BAJbxYQUwYf8Ao88BAPncsrIYK/8Arc8BAAWj1tZgTf8At88BAA139PSlgv8Awc8BAA82/f3bx/8Ay88BAAAA9/f39/8A1c8BAI4g8NHl8P8A388BAI1X3pLF3v8A6c8BAI+nw0OTw/8A888BAAyW7++KYv8A/M8BAAAA9/f39/8ABdABAI+Az2epz/8ADtABAPj/ysoAIP8AF9ABAA139PSlgv8AINABAI1X3pLF3v8AKdABAI/3sAVxsP8AMtABAPj/ysoAIP8AO9ABAA139PSlgv8ARNABAAAA9/f39/8ATdABAI1X3pLF3v8AVtABAI/3sAVxsP8AX9ABAPncsrIYK/8AaNABAAyW7++KYv8AcdABAA82/f3bx/8AetABAI4g8NHl8P8Ag9ABAI+Az2epz/8AjNABAJTOrCFmrP8AldABAPncsrIYK/8AntABAAyW7++KYv8Ap9ABAA82/f3bx/8AsNABAAAA9/f39/8AudABAI4g8NHl8P8AwtABAI+Az2epz/8Ay9ABAJTOrCFmrP8A1NABAPncsrIYK/8A3dABAAWj1tZgTf8A5tABAA139PSlgv8A79ABAA82/f3bx/8A+NABAI4g8NHl8P8AAdEBAI1X3pLF3v8ACtEBAI+nw0OTw/8AE9EBAJTOrCFmrP8AHNEBAPncsrIYK/8AJdEBAAWj1tZgTf8ALtEBAA139PSlgv8AN9EBAA82/f3bx/8AQNEBAAAA9/f39/8ASdEBAI4g8NHl8P8AUtEBAI1X3pLF3v8AW9EBAI+nw0OTw/8AZNEBAJTOrCFmrP8AbdEBAPL/Z2cAH/8Ad9EBAAAAGhoaGv8AgtEBAPncsrIYK/8AjNEBAAWj1tZgTf8AltEBAA139PSlgv8AoNEBAA82/f3bx/8AqtEBAAAA4ODg4P8AtNEBAAAAurq6uv8AvtEBAAAAh4eHh/8AyNEBAAAATU1NTf8A0tEBAPL/Z2cAH/8A3NEBAAAATU1NTf8A59EBAAAAGhoaGv8A8tEBAPncsrIYK/8A/NEBAAWj1tZgTf8ABtIBAA139PSlgv8AENIBAA82/f3bx/8AGtIBAAAA//////8AJNIBAAAA4ODg4P8ALtIBAAAAurq6uv8AONIBAAAAh4eHh/8AQtIBAAyW7++KYv8AS9IBAAAA//////8AVNIBAAAAmZmZmf8AXdIBAPj/ysoAIP8AZtIBAA139PSlgv8Ab9IBAAAAurq6uv8AeNIBAAAAQEBAQP8AgdIBAPj/ysoAIP8AitIBAA139PSlgv8Ak9IBAAAA//////8AnNIBAAAAurq6uv8ApdIBAAAAQEBAQP8ArtIBAPncsrIYK/8At9IBAAyW7++KYv8AwNIBAA82/f3bx/8AydIBAAAA4ODg4P8A0tIBAAAAmZmZmf8A29IBAAAATU1NTf8A5NIBAPncsrIYK/8A7dIBAAyW7++KYv8A9tIBAA82/f3bx/8A/9IBAAAA//////8ACNMBAAAA4ODg4P8AEdMBAAAAmZmZmf8AGtMBAAAATU1NTf8AI9MBAPncsrIYK/8ALNMBAAWj1tZgTf8ANdMBAA139PSlgv8APtMBAA82/f3bx/8AR9MBAAAA4ODg4P8AUNMBAAAAurq6uv8AWdMBAAAAh4eHh/8AYtMBAAAATU1NTf8Aa9MBAPncsrIYK/8AdNMBAAWj1tZgTf8AfdMBAA139PSlgv8AhtMBAA82/f3bx/8Aj9MBAAAA//////8AmNMBAAAA4ODg4P8AodMBAAAAurq6uv8AqtMBAAAAh4eHh/8As9MBAAAATU1NTf8AvNMBAAMg/f3g3f8AxdMBAPRc+vqftf8AztMBAOPcxcUbiv8A19MBAA0c/v7r4v8A4NMBAPxI+/u0uf8A6dMBAO6T9/doof8A8tMBAOD9rq4Bfv8A+9MBAA0c/v7r4v8ABNQBAPxI+/u0uf8ADdQBAO6T9/doof8AFtQBAOPcxcUbiv8AH9QBANX8enoBd/8AKNQBAA0c/v7r4v8AMdQBAAM8/PzFwP8AOtQBAPRc+vqftf8AQ9QBAO6T9/doof8ATNQBAOPcxcUbiv8AVdQBANX8enoBd/8AXtQBAA0c/v7r4v8AZ9QBAAM8/PzFwP8AcNQBAPRc+vqftf8AedQBAO6T9/doof8AgtQBAObD3d00l/8Ai9QBAOD9rq4Bfv8AlNQBANX8enoBd/8AndQBAA4M///38/8AptQBAAMg/f3g3f8Ar9QBAAM8/PzFwP8AuNQBAPRc+vqftf8AwdQBAO6T9/doof8AytQBAObD3d00l/8A09QBAOD9rq4Bfv8A3NQBANX8enoBd/8A5dQBAA4M///38/8A7tQBAAMg/f3g3f8A99QBAAM8/PzFwP8AANUBAPRc+vqftf8ACdUBAO6T9/doof8AEtUBAObD3d00l/8AG9UBAOD9rq4Bfv8AJNUBANX8enoBd/8ALdUBAMf/akkAav8ANtUBAPX/paUAJv8AQtUBAKerlTE2lf8AT9UBAALQ19cwJ/8AW9UBAAq49PRtQ/8AZ9UBABSd/f2uYf8Ac9UBAB5u/v7gkP8Af9UBAIgY+ODz+P8Ai9UBAIpD6avZ6f8Al9UBAI9x0XSt0f8Ao9UBAJedtEV1tP8Ar9UBAPX/paUAJv8Au9UBAJedtEV1tP8AyNUBAKerlTE2lf8A1dUBAALQ19cwJ/8A4dUBAAq49PRtQ/8A7dUBABSd/f2uYf8A+dUBAB5u/v7gkP8ABdYBACpA////v/8AEdYBAIgY+ODz+P8AHdYBAIpD6avZ6f8AKdYBAI9x0XSt0f8ANdYBAA2k/PyNWf8AQNYBACpA////v/8AS9YBAI9W25G/2/8AVtYBAP7h19cZHP8AYdYBABSd/f2uYf8AbNYBAIpD6avZ6f8Ad9YBAJHBtix7tv8AgtYBAP7h19cZHP8AjdYBABSd/f2uYf8AmNYBACpA////v/8Ao9YBAIpD6avZ6f8ArtYBAJHBtix7tv8AudYBAALQ19cwJ/8AxNYBAA2k/PyNWf8Az9YBAB5u/v7gkP8A2tYBAIgY+ODz+P8A5dYBAI9W25G/2/8A8NYBAJedtEV1tP8A+9YBAALQ19cwJ/8ABtcBAA2k/PyNWf8AEdcBAB5u/v7gkP8AHNcBACpA////v/8AJ9cBAIgY+ODz+P8AMtcBAI9W25G/2/8APdcBAJedtEV1tP8ASNcBAALQ19cwJ/8AU9cBAAq49PRtQ/8AXtcBABSd/f2uYf8AadcBAB5u/v7gkP8AdNcBAIgY+ODz+P8Af9cBAIpD6avZ6f8AitcBAI9x0XSt0f8AldcBAJedtEV1tP8AoNcBAALQ19cwJ/8Aq9cBAAq49PRtQ/8AttcBABSd/f2uYf8AwdcBAB5u/v7gkP8AzNcBACpA////v/8A19cBAIgY+ODz+P8A4tcBAIpD6avZ6f8A7dcBAI9x0XSt0f8A+NcBAJedtEV1tP8AA9gBAPX/paUAJv8AD9gBAGv/aABoN/8AHNgBAALQ19cwJ/8AKNgBAAq49PRtQ/8ANNgBABSd/f2uYf8AQNgBAB9z/v7gi/8ATNgBADNq79nvi/8AWNgBAD6C2abZav8AZNgBAFN5vWa9Y/8AcNgBAGfTmBqYUP8AfNgBAPX/paUAJv8AiNgBAGfTmBqYUP8AldgBAGv/aABoN/8AotgBAALQ19cwJ/8ArtgBAAq49PRtQ/8AutgBABSd/f2uYf8AxtgBAB9z/v7gi/8A0tgBACpA////v/8A3tgBADNq79nvi/8A6tgBAD6C2abZav8A9tgBAFN5vWa9Y/8AAtkBAA2k/PyNWf8ADdkBACpA////v/8AGNkBAEKIz5HPYP8AI9kBAP7h19cZHP8ALtkBABSd/f2uYf8AOdkBAD6C2abZav8ARNkBAGLSlhqWQf8AT9kBAP7h19cZHP8AWtkBABSd/f2uYf8AZdkBACpA////v/8AcNkBAD6C2abZav8Ae9kBAGLSlhqWQf8AhtkBAALQ19cwJ/8AkdkBAA2k/PyNWf8AnNkBAB9z/v7gi/8Ap9kBADNq79nvi/8AstkBAEKIz5HPYP8AvdkBAGfTmBqYUP8AyNkBAALQ19cwJ/8A09kBAA2k/PyNWf8A3tkBAB9z/v7gi/8A6dkBACpA////v/8A9NkBADNq79nvi/8A/9kBAEKIz5HPYP8ACtoBAGfTmBqYUP8AFdoBAALQ19cwJ/8AINoBAAq49PRtQ/8AK9oBABSd/f2uYf8ANtoBAB9z/v7gi/8AQdoBADNq79nvi/8ATNoBAD6C2abZav8AV9oBAFN5vWa9Y/8AYtoBAGfTmBqYUP8AbdoBAALQ19cwJ/8AeNoBAAq49PRtQ/8Ag9oBABSd/f2uYf8AjtoBAB9z/v7gi/8AmdoBACpA////v/8ApNoBADNq79nvi/8Ar9oBAD6C2abZav8AutoBAFN5vWa9Y/8AxdoBAGfTmBqYUP8A0NoBAA0s/v7g0v8A2doBAAmL/PyScv8A4toBAAHT3t4tJv8A69oBAA0l/v7l2f8A9NoBAAts/Pyukf8A/doBAAez+/tqSv8ABtsBAP3gy8sYHf8AD9sBAA0l/v7l2f8AGNsBAAts/Pyukf8AIdsBAAez+/tqSv8AKtsBAAHT3t4tJv8AM9sBAP3npaUPFf8APNsBAA0l/v7l2f8ARdsBAAxc/Py7of8ATtsBAAmL/PyScv8AV9sBAAez+/tqSv8AYNsBAAHT3t4tJv8AadsBAP3npaUPFf8ActsBAA0l/v7l2f8Ae9sBAAxc/Py7of8AhNsBAAmL/PyScv8AjdsBAAez+/tqSv8AltsBAAPQ7+87LP8An9sBAP3gy8sYHf8AqNsBAPv/mZkADf8AsdsBAA4P///18P8AutsBAA0s/v7g0v8Aw9sBAAxc/Py7of8AzNsBAAmL/PyScv8A1dsBAAez+/tqSv8A3tsBAAPQ7+87LP8A59sBAP3gy8sYHf8A8NsBAPv/mZkADf8A+dsBAA4P///18P8AAtwBAA0s/v7g0v8AC9wBAAxc/Py7of8AFNwBAAmL/PyScv8AHdwBAAez+/tqSv8AJtwBAAPQ7+87LP8AL9wBAP3gy8sYHf8AONwBAP3npaUPFf8AQdwBAPn/Z2cADf8AStwBAP7h5OQaHP8AU9wBAJKyuDd+uP8AXNwBAFOTr02vSv8AZdwBAP7h5OQaHP8AbtwBAJKyuDd+uP8Ad9wBAFOTr02vSv8AgNwBAM+Eo5hOo/8AidwBAP7h5OQaHP8AktwBAJKyuDd+uP8Am9wBAFOTr02vSv8ApNwBAM+Eo5hOo/8ArdwBABX///9/AP8AttwBAP7h5OQaHP8Av9wBAJKyuDd+uP8AyNwBAFOTr02vSv8A0dwBAM+Eo5hOo/8A2twBABX///9/AP8A49wBACrM////M/8A7NwBAP7h5OQaHP8A9dwBAJKyuDd+uP8A/twBAFOTr02vSv8AB90BAM+Eo5hOo/8AEN0BABX///9/AP8AGd0BACrM////M/8AIt0BAA/BpqZWKP8AK90BAP7h5OQaHP8ANN0BAJKyuDd+uP8APd0BAFOTr02vSv8ARt0BAM+Eo5hOo/8AT90BABX///9/AP8AWN0BACrM////M/8AYd0BAA/BpqZWKP8Aat0BAOh59/eBv/8Ac90BAP7h5OQaHP8AfN0BAJKyuDd+uP8Ahd0BAFOTr02vSv8Ajt0BAM+Eo5hOo/8Al90BABX///9/AP8AoN0BACrM////M/8Aqd0BAA/BpqZWKP8Ast0BAOh59/eBv/8Au90BAAAAmZmZmf8AxN0BAHJ4wmbCpf8Azd0BAAub/PyNYv8A1t0BAJxNy42gy/8A390BAHJ4wmbCpf8A6N0BAAub/PyNYv8A8d0BAJxNy42gy/8A+t0BAORm5+eKw/8AA94BAHJ4wmbCpf8ADN4BAAub/PyNYv8AFd4BAJxNy42gy/8AHt4BAORm5+eKw/8AJ94BADqb2KbYVP8AMN4BAHJ4wmbCpf8AOd4BAAub/PyNYv8AQt4BAJxNy42gy/8AS94BAORm5+eKw/8AVN4BADqb2KbYVP8AXd4BACLQ///ZL/8AZt4BAHJ4wmbCpf8Ab94BAAub/PyNYv8AeN4BAJxNy42gy/8Agd4BAORm5+eKw/8Ait4BADqb2KbYVP8Ak94BACLQ///ZL/8AnN4BABla5eXElP8Apd4BAHJ4wmbCpf8Art4BAAub/PyNYv8At94BAJxNy42gy/8AwN4BAORm5+eKw/8Ayd4BADqb2KbYVP8A0t4BACLQ///ZL/8A294BABla5eXElP8A5N4BAAAAs7Ozs/8A7d4BAHhU043Tx/8A994BANNSvbyAvf8AAt8BACpM////s/8ADN8BAK8l2r662v8AFt8BAASL+/uAcv8AIN8BAJBk04Cx0/8AKt8BABac/f20Yv8ANN8BADqG3rPeaf8APt8BAOkv/PzN5f8ASN8BAAAA2dnZ2f8AUt8BAHhU043Tx/8AXN8BANNSvbyAvf8AZ98BAE0p68zrxf8Act8BACpM////s/8AfN8BAK8l2r662v8Aht8BAASL+/uAcv8AkN8BAJBk04Cx0/8Amt8BABac/f20Yv8ApN8BADqG3rPeaf8Art8BAOkv/PzN5f8AuN8BAAAA2dnZ2f8Awt8BAHhU043Tx/8AzN8BANNSvbyAvf8A198BAE0p68zrxf8A4t8BACWQ///tb/8A7d8BACpM////s/8A998BAK8l2r662v8AAeABAASL+/uAcv8AC+ABAJBk04Cx0/8AFeABABac/f20Yv8AH+ABADqG3rPeaf8AKeABAOkv/PzN5f8AM+ABAAAA2dnZ2f8APeABAHhU043Tx/8ARuABACpM////s/8AT+ABAK8l2r662v8AWOABAHhU043Tx/8AYeABACpM////s/8AauABAK8l2r662v8Ac+ABAASL+/uAcv8AfOABAHhU043Tx/8AheABACpM////s/8AjuABAK8l2r662v8Al+ABAASL+/uAcv8AoOABAJBk04Cx0/8AqeABAHhU043Tx/8AsuABACpM////s/8Au+ABAK8l2r662v8AxOABAASL+/uAcv8AzeABAJBk04Cx0/8A1uABABac/f20Yv8A3+ABAHhU043Tx/8A6OABACpM////s/8A8eABAK8l2r662v8A+uABAASL+/uAcv8AA+EBAJBk04Cx0/8ADOEBABac/f20Yv8AFeEBADqG3rPeaf8AHuEBAHhU043Tx/8AJ+EBACpM////s/8AMOEBAK8l2r662v8AOeEBAASL+/uAcv8AQuEBAJBk04Cx0/8AS+EBABac/f20Yv8AVOEBADqG3rPeaf8AXeEBAOkv/PzN5f8AZuEBAHhU043Tx/8Ab+EBACpM////s/8AeOEBAK8l2r662v8AgeEBAASL+/uAcv8AiuEBAJBk04Cx0/8Ak+EBABac/f20Yv8AnOEBADqG3rPeaf8ApeEBAOkv/PzN5f8AruEBAAAA2dnZ2f8At+EBAO39np4BQv8AxeEBALGCol5Pov8A1OEBAPq01dU+T/8A4uEBAAq49PRtQ/8A8OEBABSd/f2uYf8A/uEBAB9z/v7gi/8ADOIBADFg9eb1mP8AGuIBAE9B3avdpP8AKOIBAHJ4wmbCpf8ANuIBAI+7vTKIvf8AROIBAO39np4BQv8AUuIBAI+7vTKIvf8AYeIBALGCol5Pov8AcOIBAPq01dU+T/8AfuIBAAq49PRtQ/8AjOIBABSd/f2uYf8AmuIBAB9z/v7gi/8AqOIBACpA////v/8AtuIBADFg9eb1mP8AxOIBAE9B3avdpP8A0uIBAHJ4wmbCpf8A4OIBAA2k/PyNWf8A7eIBACpA////v/8A+uIBAFFN1ZnVlP8AB+MBAP7h19cZHP8AFOMBABSd/f2uYf8AIeMBAE9B3avdpP8ALuMBAI/EuiuDuv8AO+MBAP7h19cZHP8ASOMBABSd/f2uYf8AVeMBACpA////v/8AYuMBAE9B3avdpP8Ab+MBAI/EuiuDuv8AfOMBAPq01dU+T/8AieMBAA2k/PyNWf8AluMBAB9z/v7gi/8Ao+MBADFg9eb1mP8AsOMBAFFN1ZnVlP8AveMBAI+7vTKIvf8AyuMBAPq01dU+T/8A1+MBAA2k/PyNWf8A5OMBAB9z/v7gi/8A8eMBACpA////v/8A/uMBADFg9eb1mP8AC+QBAFFN1ZnVlP8AGOQBAI+7vTKIvf8AJeQBAPq01dU+T/8AMuQBAAq49PRtQ/8AP+QBABSd/f2uYf8ATOQBAB9z/v7gi/8AWeQBADFg9eb1mP8AZuQBAE9B3avdpP8Ac+QBAHJ4wmbCpf8AgOQBAI+7vTKIvf8AjeQBAPq01dU+T/8AmuQBAAq49PRtQ/8Ap+QBABSd/f2uYf8AtOQBAB9z/v7gi/8AweQBACpA////v/8AzuQBADFg9eb1mP8A2+QBAE9B3avdpP8A6OQBAHJ4wmbCpf8A9eQBAI+7vTKIvf8AAuUBAJMP//D4//8AEeUBABgj+vrr1/8AI+UBAH///wD///8ALeUBAHGA/3//1P8APeUBAH8P//D///8ASOUBACoa9fX13P8AU+UBABc6///kxP8AX+UBAAAAAAAAAP8AauUBABkx///rzf8AfuUBAKr//wAA//8AiOUBAMDO4oor4v8AmOUBAAC+paUqKv8Ao+UBABdj3t64h/8AsuUBAIBnoF+eoP8AweUBAD///3//AP8A0eUBABHa0tJpHv8A4OUBAAuv//9/UP8A6+UBAJqT7WSV7f8A/+UBACEi///43P8ADeYBAPbn3NwUPP8AGuYBAH///wD///8AJOYBAKr/iwAAi/8AMuYBAH//iwCLi/8AQOYBAB7vuLiGC/8AU+YBAAAAqampqf8AYeYBAFX/ZABkAP8AcOYBAAAAqampqf8AfuYBACduvb23a/8AjeYBANT/i4sAi/8AnuYBADqOa1VrL/8AsuYBABf///+MAP8AwuYBAMbAzJkyzP8A0uYBAAD/i4sAAP8A3+YBAAp56emWev8A7+YBAFU9vI+8j/8AAecBAK+Pi0g9i/8AFOcBAH9nTy9PT/8AJ+cBAH9nTy9PT/8AOucBAID/0QDO0f8ATecBAMf/05QA0/8AXecBAOjr//8Uk/8Aa+cBAIr//wC///8AfOcBAAAAaWlpaf8AiecBAAAAaWlpaf8AlucBAJTh/x6Q//8ApucBAADOsrIiIv8AtecBABwP///68P8AxucBAFXAiyKLIv8A1+cBANT///8A//8A5OcBAAAA3Nzc3P8A8+cBAKoH//j4//8AA+gBACP////XAP8ADegBAB7Z2tqlIP8AHOgBAAAAgICAgP8AJugBAFX/gACAAP8AMegBADvQ/63/L/8AQugBAAAAgICAgP8ATOgBAFUP//D/8P8AWugBAOmW//9ptP8AZ+gBAACMzc1cXP8AdugBAML/gksAgv8AgugBACoP////8P8AjegBACZq8PDmjP8AmOgBAKoU+ubm+v8ApugBAPAP///w9f8AuegBAED//Hz8AP8AyOgBACYx///6zf8A2ugBAIk/5q3Y5v8A6egBAAB38PCAgP8A+egBAH8f/+D///8ACOkBACoo+vr60v8AIukBAAAA09PT0/8AMekBAFVk7pDukP8AQekBAAAA09PT0/8AUOkBAPhJ//+2wf8AX+kBAAyE//+gev8AcOkBAH3RsiCyqv8Ag+kBAI91+ofO+v8AlekBAJQ4mXeImf8AqekBAJQ4mXeImf8AvekBAJc03rDE3v8A0ekBACof////4P8A4ukBAFX//wD/AP8A7OkBAFXAzTLNMv8A++kBABUU+vrw5v8ABuoBANT///8A//8AE+oBAAD/gIAAAP8AH+oBAHGAzWbNqv8ANeoBAKr/zQAAzf8AReoBAMyY07pV0/8AV+oBALd825Nw2/8AaeoBAGepszyzcf8AfeoBALCP7nto7v8AkuoBAG//+gD6mv8AqeoBAH2n0UjRzP8AvuoBAOTkx8cVhf8A0+oBAKrGcBkZcP8A5eoBAGoJ//X/+v8A9OoBAAQe///k4f8AA+sBABpJ///ktf8AEesBABlR///erf8AIusBAKr/gAAAgP8ALOsBABsX/f315v8AOesBACr/gICAAP8AROsBADjAjmuOI/8AU+sBABv///+lAP8AX+sBAAv///9FAP8AbusBANZ72tpw1v8AeusBACZI7u7oqv8AjesBAFVk+5j7mP8AnOsBAH9D7q/u7v8Ar+sBAPF829twk/8AwusBABop///v1f8A0usBABRG///auf8A4esBABSwzc2FP/8A6+sBAPc////Ay/8A9esBANRG3d2g3f8A/+sBAIQ75rDg5v8AD+wBANT/gIAAgP8AG+wBAAD///8AAP8AJOwBAAA9vLyPj/8AM+wBAJ+14UFp4f8AQuwBABHci4tFE/8AU+wBAASK+vqAcv8AX+wBABOa9PSkYP8Ab+wBAGeqiy6LV/8AfewBABEQ///17v8Ai+wBAA23oKBSLf8Al+wBAAAAwMDAwP8Ao+wBAIts64fO6/8AsOwBAK+PzWpazf8Av+wBAJQ4kHCAkP8AzuwBAJQ4kHCAkP8A3ewBAAAF///6+v8A5+wBAGr//wD/f/8A+OwBAJKbtEaCtP8AB+0BABhU0tK0jP8AEO0BAH//gACAgP8AGu0BANQd2Ni/2P8AJ+0BAAa4//9jR/8AM+0BAHu24EDg0P8AQu0BANRz7u6C7v8ATu0BABtE9fXes/8AWe0BAAAA//////8AZO0BAAAA9fX19f8AdO0BACr/////AP8AgO0BADjAzZrNMv8Ake0BAC1D/Pf8uf8Amu0BAERb3a3djv8Ao+0BAGKyozGjVP8ArO0BACoy////zP8Ate0BAD5V5sLmmf8Avu0BAFVkxnjGef8Ax+0BAGO7hCOEQ/8A0O0BACoy////zP8A2e0BAD5V5sLmmf8A4u0BAFVkxnjGef8A6+0BAGKyozGjVP8A9O0BAGv/aABoN/8A/e0BACoy////zP8ABu4BADdR8Nnwo/8AD+4BAERb3a3djv8AGO4BAFVkxnjGef8AIe4BAGKyozGjVP8AKu4BAGv/aABoN/8AM+4BACoy////zP8APO4BADdR8Nnwo/8ARe4BAERb3a3djv8ATu4BAFVkxnjGef8AV+4BAGCeq0GrXf8AYO4BAGO7hCOEQ/8Aae4BAGz/WgBaMv8Acu4BACoZ////5f8Ae+4BAC1D/Pf8uf8AhO4BADdR8Nnwo/8Aje4BAERb3a3djv8Alu4BAFVkxnjGef8An+4BAGCeq0GrXf8AqO4BAGO7hCOEQ/8Ase4BAGz/WgBaMv8Auu4BACoZ////5f8Aw+4BAC1D/Pf8uf8AzO4BADdR8Nnwo/8A1e4BAERb3a3djv8A3u4BAFVkxnjGef8A5+4BAGCeq0GrXf8A8O4BAGO7hCOEQ/8A+e4BAGv/aABoN/8AAu8BAG7/RQBFKf8AC+8BADFJ+O34sf8AFu8BAHVhzX/Nu/8AIe8BAJDCuCx/uP8ALO8BACoy////zP8AN+8BAGNC2qHatP8AQu8BAISqxEG2xP8ATe8BAJbLqCJeqP8AWO8BACoy////zP8AY+8BAGNC2qHatP8Abu8BAISqxEG2xP8Aee8BAJDCuCx/uP8AhO8BAKS/lCU0lP8Aj+8BACoy////zP8Amu8BAEU66cfptP8Ape8BAHVhzX/Nu/8AsO8BAISqxEG2xP8Au+8BAJDCuCx/uP8Axu8BAKS/lCU0lP8A0e8BACoy////zP8A3O8BAEU66cfptP8A5+8BAHVhzX/Nu/8A8u8BAISqxEG2xP8A/e8BAIvYwB2RwP8ACPABAJbLqCJeqP8AE/ABAJ7nhAwshP8AHvABACom////2f8AKfABADFJ+O34sf8ANPABAEU66cfptP8AP/ABAHVhzX/Nu/8ASvABAISqxEG2xP8AVfABAIvYwB2RwP8AYPABAJbLqCJeqP8Aa/ABAJ7nhAwshP8AdvABACom////2f8AgfABADFJ+O34sf8AjPABAEU66cfptP8Al/ABAHVhzX/Nu/8AovABAISqxEG2xP8ArfABAIvYwB2RwP8AuPABAJbLqCJeqP8Aw/ABAKS/lCU0lP8AzvABAJ7nWAgdWP8A2fABACVC///3vP8A5PABAByv/v7ET/8A7/ABABDu2dlfDv8A+vABACoq////1P8ABfEBABxw/v7Zjv8AEPEBABbV/v6ZKf8AG/EBAA/8zMxMAv8AJvEBACoq////1P8AMfEBABxw/v7Zjv8APPEBABbV/v6ZKf8AR/EBABDu2dlfDv8AUvEBAA34mZk0BP8AXfEBACoq////1P8AaPEBAB9t/v7jkf8Ac/EBAByv/v7ET/8AfvEBABbV/v6ZKf8AifEBABDu2dlfDv8AlPEBAA34mZk0BP8An/EBACoq////1P8AqvEBAB9t/v7jkf8AtfEBAByv/v7ET/8AwPEBABbV/v6ZKf8Ay/EBABLp7OxwFP8A1vEBAA/8zMxMAv8A4fEBAAz3jIwtBP8A7PEBACoZ////5f8A9/EBACVC///3vP8AAvIBAB9t/v7jkf8ADfIBAByv/v7ET/8AGPIBABbV/v6ZKf8AI/IBABLp7OxwFP8ALvIBAA/8zMxMAv8AOfIBAAz3jIwtBP8ARPIBACoZ////5f8AT/IBACVC///3vP8AWvIBAB9t/v7jkf8AZfIBAByv/v7ET/8AcPIBABbV/v6ZKf8Ae/IBABLp7OxwFP8AhvIBAA/8zMxMAv8AkfIBAA34mZk0BP8AnPIBAA3wZmYlBv8Ap/IBACJf///toP8AsvIBABiy/v6yTP8AvfIBAAXd8PA7IP8AyPIBACpN////sv8A0/IBAB2i/v7MXP8A3vIBABHC/f2NPP8A6fIBAP7h4+MaHP8A9PIBACpN////sv8A//IBAB2i/v7MXP8ACvMBABHC/f2NPP8AFfMBAAXd8PA7IP8AIPMBAPb/vb0AJv8AK/MBACpN////sv8ANvMBAB6I/v7Zdv8AQfMBABiy/v6yTP8ATPMBABHC/f2NPP8AV/MBAAXd8PA7IP8AYvMBAPb/vb0AJv8AbfMBACpN////sv8AePMBAB6I/v7Zdv8Ag/MBABiy/v6yTP8AjvMBABHC/f2NPP8AmfMBAAfU/PxOKv8ApPMBAP7h4+MaHP8Ar/MBAPX/sbEAJv8AuvMBACoy////zP8AxfMBACJf///toP8A0PMBAB6I/v7Zdv8A2/MBABiy/v6yTP8A5vMBABHC/f2NPP8A8fMBAAfU/PxOKv8A/PMBAP7h4+MaHP8AB/QBAPX/sbEAJv8AEvQBACoy////zP8AHfQBACJf///toP8AKPQBAB6I/v7Zdv8AM/QBABiy/v6yTP8APvQBABHC/f2NPP8ASfQBAAfU/PxOKv8AVPQBAP7h4+MaHP8AX/QBAPb/vb0AJv8AavQBAPL/gIAAJv8AdfQBAJMP//D4//8Af/QBABgj+vrr1/8AjPQBABck///v2/8AmvQBABck7u7fzP8AqPQBABckzc3AsP8AtvQBABgii4uDeP8AxPQBAHGA/3//1P8Az/QBAHGA/3//1P8A2/QBAHGA7nbuxv8A5/QBAHGAzWbNqv8A8/QBAHGAi0WLdP8A//QBAH8P//D///8ABfUBAH8P//D///8ADPUBAH8P7uDu7v8AE/UBAH8OzcHNzf8AGvUBAH8Oi4OLi/8AIfUBACoa9fX13P8AJ/UBABc6///kxP8ALvUBABc6///kxP8ANvUBABc67u7Vt/8APvUBABY6zc23nv8ARvUBABc6i4t9a/8AWAwCAAAAAAAAAP8ATvUBABkx///rzf8AXfUBAKr//wAA//8AYvUBAKr//wAA//8AaPUBAKr/7gAA7v8AbvUBAKr/zQAAzf8AdPUBAKr/iwAAi/8AevUBAMDO4oor4v8AhfUBAAC+paUqKv8Ai/UBAAC///9AQP8AkvUBAAC/7u47O/8AmfUBAAC/zc0zM/8AoPUBAAC+i4sjI/8Ap/UBABdj3t64h/8AsfUBABdk///Tm/8AvPUBABdj7u7Fkf8Ax/UBABdjzc2qff8A0vUBABdji4tzVf8A3fUBAIBnoF+eoP8A5/UBAINn/5j1//8A8vUBAINm7o7l7v8A/fUBAINnzXrFzf8ACPYBAINmi1OGi/8AE/YBAD///3//AP8AHvYBAD///3//AP8AKvYBAD//7nbuAP8ANvYBAD//zWbNAP8AQvYBAD//i0WLAP8ATvYBABHa0tJpHv8AWPYBABHb//9/JP8AY/YBABHb7u52If8AbvYBABHazc1mHf8AefYBABHci4tFE/8AhPYBAAuv//9/UP8AivYBAAep//9yVv8AkfYBAAap7u5qUP8AmPYBAAapzc1bRf8An/YBAAaoi4s+L/8ApvYBAJqT7WSV7f8AtfYBACEi///43P8AvvYBACEi///43P8AyPYBACIj7u7ozf8A0vYBACIizc3Isf8A3PYBACMii4uIeP8A5vYBAPbn3NwUPP8A7vYBAH///wD///8A8/YBAH///wD///8A+fYBAH//7gDu7v8A//YBAH//zQDNzf8ABfcBAH//iwCLi/8AC/cBAB7vuLiGC/8AGfcBAB7w//+5D/8AKPcBAB7w7u6tDv8AN/cBAB7wzc2VDP8ARvcBAB7wi4tlCP8AVfcBAFX/ZABkAP8AX/cBACduvb23a/8AafcBADqOa1VrL/8AePcBADqP/8r/cP8AiPcBADqP7rzuaP8AmPcBADqPzaLNWv8AqPcBADqPi26LPf8AuPcBABf///+MAP8Aw/cBABX///9/AP8Az/cBABX/7u52AP8A2/cBABX/zc1mAP8A5/cBABX/i4tFAP8A8/cBAMbAzJkyzP8A/vcBAMbB/78+//8ACvgBAMbA7rI67v8AFvgBAMbAzZoyzf8AIvgBAMbAi2gii/8ALvgBAAp56emWev8AOfgBAFU9vI+8j/8ARvgBAFU+/8H/wf8AVPgBAFU+7rTutP8AYvgBAFU+zZvNm/8AcPgBAFU+i2mLaf8AfvgBAK+Pi0g9i/8AjPgBAH9nTy9PT/8AmvgBAH9o/5f///8AqfgBAH9n7o3u7v8AuPgBAH9ozXnNzf8Ax/gBAH9oi1KLi/8A1vgBAH9nTy9PT/8A5PgBAID/0QDO0f8A8vgBAMf/05QA0/8A/fgBAOjr//8Uk/8ABvkBAOjr//8Uk/8AEPkBAOjr7u4Sif8AGvkBAOjrzc0Qdv8AJPkBAOfsi4sKUP8ALvkBAIr//wC///8AOvkBAIr//wC///8AR/kBAIr/7gCy7v8AVPkBAIr/zQCazf8AYfkBAIr/iwBoi/8AbvkBAAAAaWlpaf8AdvkBAAAAaWlpaf8AfvkBAJTh/x6Q//8AifkBAJTh/x6Q//8AlfkBAJTh7hyG7v8AofkBAJThzRh0zf8ArfkBAJThixBOi/8AufkBAADOsrIiIv8Aw/kBAADP//8wMP8AzvkBAADP7u4sLP8A2fkBAADPzc0mJv8A5PkBAADPi4saGv8A7/kBABwP///68P8A+/kBAFXAiyKLIv8AB/oBAAAA3Nzc3P8AEfoBAKoH//j4//8AHPoBACP////XAP8AIfoBACP////XAP8AJ/oBACP/7u7JAP8ALfoBACP/zc2tAP8AM/oBACP/i4t1AP8AOfoBAB7Z2tqlIP8AQ/oBAB7a///BJf8ATvoBAB7a7u60Iv8AWfoBAB7azc2bHf8AZPoBAB7ai4tpFP8Ab/oBAAAAwMDAwP8AdPoBAAAAAAAAAP8AevoBAAAAAwMDA/8AgPoBAAAAGhoaGv8Ah/oBAAAA//////8Aj/oBAAAAHBwcHP8AlvoBAAAAHx8fH/8AnfoBAAAAISEhIf8ApPoBAAAAJCQkJP8Aq/oBAAAAJiYmJv8AsvoBAAAAKSkpKf8AufoBAAAAKysrK/8AwPoBAAAALi4uLv8Ax/oBAAAAMDAwMP8AzvoBAAAABQUFBf8A1PoBAAAAMzMzM/8A2/oBAAAANjY2Nv8A4voBAAAAODg4OP8A6foBAAAAOzs7O/8A8PoBAAAAPT09Pf8A9/oBAAAAQEBAQP8A/voBAAAAQkJCQv8ABfsBAAAARUVFRf8ADPsBAAAAR0dHR/8AE/sBAAAASkpKSv8AGvsBAAAACAgICP8AIPsBAAAATU1NTf8AJ/sBAAAAT09PT/8ALvsBAAAAUlJSUv8ANfsBAAAAVFRUVP8APPsBAAAAV1dXV/8AQ/sBAAAAWVlZWf8ASvsBAAAAXFxcXP8AUfsBAAAAXl5eXv8AWPsBAAAAYWFhYf8AX/sBAAAAY2NjY/8AZvsBAAAACgoKCv8AbPsBAAAAZmZmZv8Ac/sBAAAAaWlpaf8AevsBAAAAa2tra/8AgfsBAAAAbm5ubv8AiPsBAAAAcHBwcP8Aj/sBAAAAc3Nzc/8AlvsBAAAAdXV1df8AnfsBAAAAeHh4eP8ApPsBAAAAenp6ev8Aq/sBAAAAfX19ff8AsvsBAAAADQ0NDf8AuPsBAAAAf39/f/8Av/sBAAAAgoKCgv8AxvsBAAAAhYWFhf8AzfsBAAAAh4eHh/8A1PsBAAAAioqKiv8A2/sBAAAAjIyMjP8A4vsBAAAAj4+Pj/8A6fsBAAAAkZGRkf8A8PsBAAAAlJSUlP8A9/sBAAAAlpaWlv8A/vsBAAAADw8PD/8ABPwBAAAAmZmZmf8AC/wBAAAAnJycnP8AEvwBAAAAnp6env8AGfwBAAAAoaGhof8AIPwBAAAAo6Ojo/8AJ/wBAAAApqampv8ALvwBAAAAqKioqP8ANfwBAAAAq6urq/8APPwBAAAAra2trf8AQ/wBAAAAsLCwsP8ASvwBAAAAEhISEv8AUPwBAAAAs7Ozs/8AV/wBAAAAtbW1tf8AXvwBAAAAuLi4uP8AZfwBAAAAurq6uv8AbPwBAAAAvb29vf8Ac/wBAAAAv7+/v/8AevwBAAAAwsLCwv8AgfwBAAAAxMTExP8AiPwBAAAAx8fHx/8Aj/wBAAAAycnJyf8AlvwBAAAAFBQUFP8AnPwBAAAAzMzMzP8Ao/wBAAAAz8/Pz/8AqvwBAAAA0dHR0f8AsfwBAAAA1NTU1P8AuPwBAAAA1tbW1v8Av/wBAAAA2dnZ2f8AxvwBAAAA29vb2/8AzfwBAAAA3t7e3v8A1PwBAAAA4ODg4P8A2/wBAAAA4+Pj4/8A4vwBAAAAFxcXF/8A6PwBAAAA5eXl5f8A7/wBAAAA6Ojo6P8A9vwBAAAA6+vr6/8A/fwBAAAA7e3t7f8ABP0BAAAA8PDw8P8AC/0BAAAA8vLy8v8AEv0BAAAA9fX19f8AGf0BAAAA9/f39/8AIP0BAAAA+vr6+v8AJ/0BAAAA/Pz8/P8ALv0BAFX//wD/AP8ANP0BAFX//wD/AP8AO/0BAFX/7gDuAP8AQv0BAFX/zQDNAP8ASf0BAFX/iwCLAP8AUP0BADvQ/63/L/8AXP0BAAAAwMDAwP8AYf0BAAAAAAAAAP8AZ/0BAAAAAwMDA/8Abf0BAAAAGhoaGv8AdP0BAAAA//////8AfP0BAAAAHBwcHP8Ag/0BAAAAHx8fH/8Aiv0BAAAAISEhIf8Akf0BAAAAJCQkJP8AmP0BAAAAJiYmJv8An/0BAAAAKSkpKf8Apv0BAAAAKysrK/8Arf0BAAAALi4uLv8AtP0BAAAAMDAwMP8Au/0BAAAABQUFBf8Awf0BAAAAMzMzM/8AyP0BAAAANjY2Nv8Az/0BAAAAODg4OP8A1v0BAAAAOzs7O/8A3f0BAAAAPT09Pf8A5P0BAAAAQEBAQP8A6/0BAAAAQkJCQv8A8v0BAAAARUVFRf8A+f0BAAAAR0dHR/8AAP4BAAAASkpKSv8AB/4BAAAACAgICP8ADf4BAAAATU1NTf8AFP4BAAAAT09PT/8AG/4BAAAAUlJSUv8AIv4BAAAAVFRUVP8AKf4BAAAAV1dXV/8AMP4BAAAAWVlZWf8AN/4BAAAAXFxcXP8APv4BAAAAXl5eXv8ARf4BAAAAYWFhYf8ATP4BAAAAY2NjY/8AU/4BAAAACgoKCv8AWf4BAAAAZmZmZv8AYP4BAAAAaWlpaf8AZ/4BAAAAa2tra/8Abv4BAAAAbm5ubv8Adf4BAAAAcHBwcP8AfP4BAAAAc3Nzc/8Ag/4BAAAAdXV1df8Aiv4BAAAAeHh4eP8Akf4BAAAAenp6ev8AmP4BAAAAfX19ff8An/4BAAAADQ0NDf8Apf4BAAAAf39/f/8ArP4BAAAAgoKCgv8As/4BAAAAhYWFhf8Auv4BAAAAh4eHh/8Awf4BAAAAioqKiv8AyP4BAAAAjIyMjP8Az/4BAAAAj4+Pj/8A1v4BAAAAkZGRkf8A3f4BAAAAlJSUlP8A5P4BAAAAlpaWlv8A6/4BAAAADw8PD/8A8f4BAAAAmZmZmf8A+P4BAAAAnJycnP8A//4BAAAAnp6env8ABv8BAAAAoaGhof8ADf8BAAAAo6Ojo/8AFP8BAAAApqampv8AG/8BAAAAqKioqP8AIv8BAAAAq6urq/8AKf8BAAAAra2trf8AMP8BAAAAsLCwsP8AN/8BAAAAEhISEv8APf8BAAAAs7Ozs/8ARP8BAAAAtbW1tf8AS/8BAAAAuLi4uP8AUv8BAAAAurq6uv8AWf8BAAAAvb29vf8AYP8BAAAAv7+/v/8AZ/8BAAAAwsLCwv8Abv8BAAAAxMTExP8Adf8BAAAAx8fHx/8AfP8BAAAAycnJyf8Ag/8BAAAAFBQUFP8Aif8BAAAAzMzMzP8AkP8BAAAAz8/Pz/8Al/8BAAAA0dHR0f8Anv8BAAAA1NTU1P8Apf8BAAAA1tbW1v8ArP8BAAAA2dnZ2f8As/8BAAAA29vb2/8Auv8BAAAA3t7e3v8Awf8BAAAA4ODg4P8AyP8BAAAA4+Pj4/8Az/8BAAAAFxcXF/8A1f8BAAAA5eXl5f8A3P8BAAAA6Ojo6P8A4/8BAAAA6+vr6/8A6v8BAAAA7e3t7f8A8f8BAAAA8PDw8P8A+P8BAAAA8vLy8v8A//8BAAAA9fX19f8ABgACAAAA9/f39/8ADQACAAAA+vr6+v8AFAACAAAA/Pz8/P8AGwACAFUP//D/8P8AJAACAFUP//D/8P8ALgACAFUP7uDu4P8AOAACAFUOzcHNwf8AQgACAFUOi4OLg/8ATAACAOmW//9ptP8AVAACAOqR//9utP8AXQACAOuN7u5qp/8AZgACAOyHzc1gkP8AbwACAOqUi4s6Yv8AeAACAACMzc1cXP8AggACAACU//9qav8AjQACAACU7u5jY/8AmAACAACVzc1VVf8AowACAACUi4s6Ov8ArgACAML/gksAgv8AtQACACoA/////gAAuwACACoP////8P8AwQACACoP////8P8AyAACACoP7u7u4P8AzwACACoOzc3Nwf8A1gACACoOi4uLg/8A3QACACZq8PDmjP8A4wACACdw///2j/8A6gACACdw7u7mhf8A8QACACdvzc3Gc/8A+AACACdvi4uGTv8A/wACAKoU+ubm+v8ACAECAPAP///w9f8AFgECAPAP///w9f8AJQECAO8P7u7g5f8ANAECAPAOzc3Bxf8AQwECAO8Oi4uDhv8AUgECAED//Hz8AP8AXAECACYx///6zf8AaQECACYx///6zf8AdwECACUy7u7pv/8AhQECACYxzc3Jpf8AkwECACcxi4uJcP8AoQECAIk/5q3Y5v8AqwECAIpA/7/v//8AtgECAIpA7rLf7v8AwQECAIo/zZrAzf8AzAECAIlAi2iDi/8A1wECAAB38PCAgP8A4gECAH8f/+D///8A7AECAH8f/+D///8A9wECAH8f7tHu7v8AAgICAH8fzbTNzf8ADQICAH8fi3qLi/8AGAICACNz7u7dgv8AJwICACN0///si/8ANwICACNz7u7cgv8ARwICACNzzc2+cP8AVwICACNzi4uBTP8AZwICACoo+vr60v8AfAICAAAA09PT0/8AhgICAAAA09PT0/8AkAICAPhJ//+2wf8AmgICAPlR//+uuf8ApQICAPhR7u6irf8AsAICAPlQzc2Mlf8AuwICAPlQi4tfZf8AxgICAAyE//+gev8A0gICAAyE//+gev8A3wICAAuE7u6Vcv8A7AICAAyFzc2BYv8A+QICAAyFi4tXQv8ABgMCAH3RsiCyqv8AFAMCAI91+ofO+v8AIQMCAI9P/7Di//8ALwMCAI9P7qTT7v8APQMCAI5PzY22zf8ASwMCAI9Oi2B7i/8AWQMCAK+P/4Rw//8AaAMCAJQ4mXeImf8AdwMCAJQ4mXeImf8AhgMCAJc03rDE3v8AlQMCAJc1/8rh//8ApQMCAJc17rzS7v8AtQMCAJc1zaK1zf8AxQMCAJY1i257i/8A1QMCACof////4P8A4QMCACof////4P8A7gMCACof7u7u0f8A+wMCACofzc3NtP8ACAQCACofi4uLev8AFQQCAFXAzTLNMv8AHwQCABUU+vrw5v8AJQQCANT///8A//8ALQQCANT///8A//8ANgQCANT/7u4A7v8APwQCANT/zc0Azf8ASAQCANT/i4sAi/8AUQQCAO+5sLAwYP8AWAQCAOTL//80s/8AYAQCAOTL7u4wp/8AaAQCAOTMzc0pkP8AcAQCAOTLi4scYv8AeAQCAHGAzWbNqv8AiQQCAKr/zQAAzf8AlAQCAMyY07pV0/8AoQQCAMuZ/+Bm//8ArwQCAMuZ7tFf7v8AvQQCAMuZzbRSzf8AywQCAMuai3o3i/8A2QQCALd825Nw2/8A5gQCALd9/6uC//8A9AQCALd97p957v8AAgUCALd9zYlozf8AEAUCALd8i11Hi/8AHgUCAGepszyzcf8ALQUCALCP7nto7v8APQUCAG//+gD6mv8ATwUCAH2n0UjRzP8AXwUCAOTkx8cVhf8AbwUCAKrGcBkZcP8AfAUCAGoJ//X/+v8AhgUCAAQe///k4f8AkAUCAAQe///k4f8AmwUCAAQe7u7V0v8ApgUCAAMdzc23tf8AsQUCAAUdi4t9e/8AvAUCABpJ///ktf8AxQUCABlR///erf8A0QUCABlR///erf8A3gUCABlS7u7Pof8A6wUCABlSzc2zi/8A+AUCABlSi4t5Xv8ABQYCAKr/gAAAgP8ACgYCAKr/gAAAgP8AEwYCACoA/////gAAGAYCABsX/f315v8AIAYCADjAjmuOI/8AKgYCADjB/8D/Pv8ANQYCADjA7rPuOv8AQAYCADjAzZrNMv8ASwYCADjAi2mLIv8AVgYCABv///+lAP8AXQYCABv///+lAP8AZQYCABv/7u6aAP8AbQYCABv/zc2FAP8AdQYCABv/i4taAP8AfQYCAAv///9FAP8AhwYCAAv///9FAP8AkgYCAAv/7u5AAP8AnQYCAAv/zc03AP8AqAYCAAv/i4slAP8AswYCANZ72tpw1v8AugYCANZ8//+D+v8AwgYCANZ87u566f8AygYCANZ8zc1pyf8A0gYCANV8i4tHif8A2gYCACZI7u7oqv8A6AYCAFVk+5j7mP8A8gYCAFVl/5r/mv8A/QYCAFVk7pDukP8ACAcCAFVkzXzNfP8AEwcCAFVki1SLVP8AHgcCAH9D7q/u7v8ALAcCAH9E/7v///8AOwcCAH9E7q7u7v8ASgcCAH9EzZbNzf8AWQcCAH9Di2aLi/8AaAcCAPF829twk/8AdgcCAPF9//+Cq/8AhQcCAPF97u55n/8AlAcCAPF9zc1oif8AowcCAPF8i4tHXf8AsgcCABop///v1f8AvQcCABRG///auf8AxwcCABRG///auf8A0gcCABNF7u7Lrf8A3QcCABNFzc2vlf8A6AcCABRFi4t3Zf8A8wcCABSwzc2FP/8A+AcCAPc////Ay/8A/QcCAPVJ//+1xf8AAwgCAPVJ7u6puP8ACQgCAPVKzc2Rnv8ADwgCAPVJi4tjbP8AFQgCANRG3d2g3f8AGggCANRE//+7//8AIAgCANRE7u6u7v8AJggCANREzc2Wzf8ALAgCANRDi4tmi/8AMggCAIQ75rDg5v8APQgCAMTd8KAg8P8ARAgCAL/P/5sw//8ATAgCAMDP7pEs7v8AVAgCAMDPzX0mzf8AXAgCAMDPi1Uai/8AZAgCAAD///8AAP8AaAgCAAD///8AAP8AbQgCAAD/7u4AAP8AcggCAAD/zc0AAP8AdwgCAAD/i4sAAP8AfAgCAAA9vLyPj/8AhggCAAA+///Bwf8AkQgCAAA+7u60tP8AnAgCAAA+zc2bm/8ApwgCAAA+i4tpaf8AsggCAJ+14UFp4f8AvAgCAJ+3/0h2//8AxwgCAJ+37kNu7v8A0ggCAJ+2zTpfzf8A3QgCAJ+3iydAi/8A6AgCABHci4tFE/8A9AgCAASK+vqAcv8A+wgCAAmW//+Maf8AAwkCAAmW7u6CYv8ACwkCAAmWzc1wVP8AEwkCAAmWi4tMOf8AGwkCABOa9PSkYP8AJgkCAGeqiy6LV/8ALwkCAGer/1T/n/8AOQkCAGer7k7ulP8AQwkCAGerzUPNgP8ATQkCAGeqiy6LV/8AVwkCABEQ///17v8AYAkCABEQ///17v8AagkCABIR7u7l3v8AdAkCABIRzc3Fv/8AfgkCABIQi4uGgv8AiAkCAA23oKBSLf8AjwkCAA24//+CR/8AlwkCAA247u55Qv8AnwkCAA24zc1oOf8ApwkCAA25i4tHJv8ArwkCAIts64fO6/8AtwkCAJB4/4fO//8AwAkCAJB47n7A7v8AyQkCAJB4zWymzf8A0gkCAJF3i0pwi/8A2wkCAK+PzWpazf8A5QkCAK+Q/4Nv//8A8AkCAK+Q7npn7v8A+wkCAK+QzWlZzf8ABgoCAK+Qi0c8i/8AEQoCAJQ4kHCAkP8AGwoCAJU4/8bi//8AJgoCAJU47rnT7v8AMQoCAJQ5zZ+2zf8APAoCAJU4i2x7i/8ARwoCAJQ4kHCAkP8AUQoCAAAF///6+v8AVgoCAAAF///6+v8AXAoCAAAF7u7p6f8AYgoCAAAEzc3Jyf8AaAoCAAADi4uJif8AbgoCAGr//wD/f/8AegoCAGr//wD/f/8AhwoCAGr/7gDudv8AlAoCAGr/zQDNZv8AoQoCAGr/iwCLRf8ArgoCAJKbtEaCtP8AuAoCAJKc/2O4//8AwwoCAJKc7lys7v8AzgoCAJKczU+Uzf8A2QoCAJObizZki/8A5AoCABhU0tK0jP8A6AoCABSw//+lT/8A7QoCABSw7u6aSf8A8goCABSwzc2FP/8A9woCABSwi4taK/8A/AoCANQd2Ni/2P8ABAsCANQe///h//8ADQsCANQe7u7S7v8AFgsCANQdzc21zf8AHwsCANQdi4t7i/8AKAsCAAa4//9jR/8ALwsCAAa4//9jR/8ANwsCAAa47u5cQv8APwsCAAa4zc1POf8ARwsCAAa5i4s2Jv8AmQwCACoA/////gAATwsCAHu24EDg0P8AWQsCAIH//wD1//8AZAsCAIH/7gDl7v8AbwsCAIH/zQDFzf8AegsCAIH/iwCGi/8AhQsCANRz7u6C7v8AjAsCAOPX0NAgkP8AlgsCAOvB//8+lv8AoQsCAOvA7u46jP8ArAsCAOvAzc0yeP8AtwsCAOvAi4siUv8AwgsCABtE9fXes/8AyAsCABtF///nuv8AzwsCABtE7u7Yrv8A1gsCABtEzc26lv8A3QsCABtDi4t+Zv8A5AsCAAAA//////8A6gsCAAAA9fX19f8A9QsCACr/////AP8A/AsCACr/////AP8ABAwCACr/7u7uAP8ADAwCACr/zc3NAP8AFAwCACr/i4uLAP8AHAwCADjAzZrNMv8AkBACAHUgAgCsDAIArgwCALAMAgCyDAIAtAwCALYMAgC4DAIAugwCALwMAgC/DAIAwgwCAMUMAgDIDAIAywwCAM4MAgDRDAIA1AwCANcMAgDaDAIAAAAAAAQAAAAEAAAACwAAADYAAAAWAAAAAAAAAAAAAAAAAAAACAAAABAAAAAYAAAAAAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAACAAAABAAAAAYAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAADcAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAvBkCAAkAAADCGQIACgAAAMsZAgALAAAADRoCAAwAAAATGgIADQAAABgaAgAOAAAAyxkCAA8AAACgGgIAEAAAAKcaAgARAAAArxoCABIAAAC2GgIAEwAAAMIaAgAUAAAADRoCABUAAADOGgIAFgAAANYaAgAXAAAA4BoCABgAAADuGgIAGQAAAPUaAgAaAAAA+hoCABsAAAD9GgIAHAAAAAIbAgAdAAAAChsCAB4AAAAQGwIAHwAAABYbAgAgAAAAHRsCACEAAAAjGwIAIQAAACsbAgAiAAAAMhsCACMAAADLGQIAJAAAAKcaAgARAAAArxoCABIAAAApHQIAJQAAALYaAgATAAAAwhoCABQAAAANGgIAFQAAADQdAgAmAAAA1hoCABcAAADgGgIAGAAAAO4aAgAZAAAA9RoCABoAAAD6GgIAGwAAAP0aAgAcAAAAPB0CACcAAAAKGwIAHgAAABAbAgAfAAAAFhsCACAAAAAdGwIAIQAAACMbAgAhAAAAKxsCACIAAAAyGwIAIwAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAABAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkWEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcFhwcHBwcHBwcHBwWHBocHBYcHBwcHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////////////AAAAAAAAAAT+//+H/v//BwAAAAAAAAAA//9/////f//////////zf/79//////9///////////8P4P////8x/P///wAAAAAAAAD//////////////wEA+AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDX///7/////39/VP3/DwD+3////////////t//////AwD///////+fGf///88/AwAAAAAAAP7///9/Av7///9/AAAAAAAAAAAA////BwcAAAAAAP7//wf+BwAAAAD+//////////98/38vAGAAAADg////////IwAAAP8DAAAA4J/5///9xQMAAACwAwADAOCH+f///W0DAAAAXgAAHADgr/v///3tIwAAAAABAAAA4J/5///9zSMAAACwAwAAAODHPdYYx78DAAAAAAAAAADg3/3///3vAwAAAAADAAAA4N/9///97wMAAABAAwAAAODf/f///f8DAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA/v////9/DQA/AAAAAAAAAJYl8P6ubA0gHwAAAAAAAAAAAAAAAAAAAP/+////AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////z8A/////38A7doHAAAAAFABUDGCq2IsAAAAAEAAyYD1BwAAAAAIAQL/////////////////////////D///////////////A///Pz//////Pz//qv///z/////////fX9wfzw//H9wfAAAAAEBMAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAACAAAAA/gMAAP7///////////8fAP7/////////////B+D/////HwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8/AAAAAAAAAAAAAAD//////////////////////////w8AAAAAAAAAAAAAAAAAAAAAYP8H/v//h/7//wcAAAAAAACAAP//f////3//////AAAAAAAAAP//////////////AQD4AwADAAAAAAD//////////z8AAAADAAAAwNf///v/////f39U/f8PAP7f///////////+3/////97AP///////58Z////zz8DAAAAAAAA/v///38C/v///38A/v/7//+7FgD///8HBwAAAAAA/v//B///BwD/A////////////3z/f+///z3/A+7////////z/z8e/8//AADun/n///3F0585gLDP/wMA5If5///9bdOHOQBewP8fAO6v+////e3zvzsAAMH/AADun/n///3N8485wLDD/wAA7Mc91hjHv8PHPYAAgP8AAO7f/f///e/D3z1gAMP/AADs3/3///3vw989YEDD/wAA7N/9///9/8PPPYAAw/8AAAAAAAAAAAAAAAAAAAAAAAD+/////3//B/9//wMAAAAAliXw/q5s/ztfP/8DAAAAAAAAAAP/A6DC//7///8D/v/fD7/+/z/+AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/HwIAAACgAAAA/v8+AP7///////////8fZv7/////////////dxkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAABgAAAAcAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAVAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkWEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBgYGBgYGBgYGBgYGBgYGBgcHBwcHAAAAAAAAAAAAAQErAAAALAAAAC0AAAAuAAAALwAAAC0AAAAwAAAAMQAAADIAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAKAAAACkAAAAgAAAAKgAAAAwAAAAZAAAAIQAAAAYAAAAHAAAAAQAAAAEAAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFhICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQYGBgYGBgYGBgYGBgYGBgYHBwcHBwAAAAAAAAAAAAEBKwAAACwAAAAtAAAALgAAAC8AAAAtAAAAMAAAADEAAAAyAAAAmNwAAPjlAABw5AAAZOcAAGTnAADQ6AAAcOQAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAACAAAAAUAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkWEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAMwAAADQAAAApAAAANQAAAA0AAAAaAAAAKgAAAAkAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFhICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADYAAAA3AAAAMgAAADgAAAAOAAAAGwAAADMAAAALAAAADAAAAAIAAAAAAQAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwWHBwcHBwcHBwcHBYcGhwcFhwcHBwcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP2BAQCoJwIAgYIBALEnAgC4JwIAwScCABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAABgAAAAcAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAVAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkXEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBgYGBgYGBgYGBgYGBgYGBgcHBwcHAAAAAAAAAAAAAQErAAAALAAAAC0AAAAuAAAALwAAAC0AAAAwAAAAMQAAADIAAADc6wAASO0AALTuAAAg8AAAIPAAAIzxAAC07gAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACgAAAApAAAAIAAAACoAAAAMAAAAGQAAACEAAAAEAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRcSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwWHBwcHBwcHBwcHBYcGhwcFhwcHBwcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAoAAAAKQAAACAAAAAqAAAADAAAABkAAAAhAAAACAAAAAUAAAABAAAAAQAAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkXEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAKAAAACkAAAAgAAAAKgAAAAwAAAAZAAAAIQAAAAYAAAAHAAAAAQAAAAEAAAAAAAAAAAAAAAAVCgAACQAAAAAAAAAAAAAAAAAAAAAAABUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFxICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQYGBgYGBgYGBgYGBgYGBgYHBwcHBwAAAAAAAAAAAAEBKwAAACwAAAAtAAAALgAAAC8AAAAtAAAAMAAAADEAAAAyAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAADMAAAA0AAAAKQAAADUAAAANAAAAGgAAACoAAAAJAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAFQoAAAkAAAAAAAAAAAAAAAAAAAAAAAAVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRcSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwWHBwcHBwcHBwcHBYcGhwcFhwcHBwcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAA2AAAANwAAADIAAAA4AAAADgAAABsAAAAzAAAACwAAAAwAAAACAAAAAAEAAAAAAAAAAAAAABUKAAAJAAAAAAAAAAAAAAAAAAAAAAAAFRAMExweAw0fICEiIxsaERkZGRkZGRkZGRkXEgIOCw8cGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYUHAQcFhwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhwkHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcFhwcHBwcHBwcHBwWHBocHBYcHBwcHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYcFhYWFhYWFhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTKAIAWSgCAFwoAgBiKAIA/CcCAGkoAgByKAIAeigCADTzAAAUAAAAQy5VVEYtOAAAAAAAAAAAAAAAAADeEgSVAAAAAP///////////////wIAAMADAADABAAAwAUAAMAGAADABwAAwAgAAMAJAADACgAAwAsAAMAMAADADQAAwA4AAMAPAADAEAAAwBEAAMASAADAEwAAwBQAAMAVAADAFgAAwBcAAMAYAADAGQAAwBoAAMAbAADAHAAAwB0AAMAeAADAHwAAwAAAALMBAADDAgAAwwMAAMMEAADDBQAAwwYAAMMHAADDCAAAwwkAAMMKAADDCwAAwwwAAMMNAADTDgAAww8AAMMAAAy7AQAMwwIADMMDAAzDBAAM0xj0AAAJAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAEAAAAPTtAgAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmPQAAAUAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAQAAAA/PECAAAEAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAr/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACY9AAAHPUAAAUAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAQAAAABPYCAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJDcAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAAEAAAABgAAAIP5ogBETm4A/CkVANFXJwDdNPUAYtvAADyZlQBBkEMAY1H+ALveqwC3YcUAOm4kANJNQgBJBuAACeouAByS0QDrHf4AKbEcAOg+pwD1NYIARLsuAJzphAC0JnAAQX5fANaROQBTgzkAnPQ5AItfhAAo+b0A+B87AN7/lwAPmAUAES/vAApaiwBtH20Az342AAnLJwBGT7cAnmY/AC3qXwC6J3UA5evHAD178QD3OQcAklKKAPtr6gAfsV8ACF2NADADVgB7/EYA8KtrACC8zwA29JoA46kdAF5hkQAIG+YAhZllAKAUXwCNQGgAgNj/ACdzTQAGBjEAylYVAMmocwB74mAAa4zAACAAAAAJAAAACgAAAA0AAAALAAAADAAAAIUAAAAAIAAAASAAAAIgAAADIAAABCAAAAUgAAAGIAAACCAAAAkgAAAKIAAAKCAAACkgAABfIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QVfcIkA/wkvD3QAAADzSwIAbgAAAPVLAgByAAAA90sCAGYAAAD5SwIAYQAAAPtLAgBlAAAA/UsCAHcAAAD/SwIAVwAAAAxMAgBzAAAAGkwCAFMAAAAmTAIAZAAAADNMAgBEAAAAP0wCAAAAAAAAAAAAAAAAAAAABAAEABsAGwAgACAAIwAhAAoAAgAWAAkAIQAhACEAFQAcAAEAFAAUABQAFAAUABQAFAAIAAQABQAbAAIAFwAbACAAHwAeAB0ACQATAAAAFQASABUAAwAHABUAFQAUABQAFAAUABQAFAAUABQACAAEAAUABQAGABsAGgAYABkAIAAHABUAFAAUABQAFAAUABQACwAUAA0AFAAMABQAFAAUAA4AFAAUABQAEAAUAA8AFAARAAAAAAAAAK4ALgAvADMANQAwADcAqgDbANsA2wDbAAAAPQCHADcANwDbANsAAAAoADUALgAyAC8AYgAAAAAARwAAAAAA2wBRAAAA2wDbANsAAADbAIQAVQDbAIIA2wAAAIEA2wAAAD4AQgBBAEgARABSAFsAAAAAAF4AXwDbAAAA2wDbANsAAAAAAHsASQBXAFIAWgBaAF0AAABfAAAAXwAAAGUAXQBfAAAAXQBuAGoAAABpAAAAbgAAANsAkwCaAKEAqACrAHAAsQC4AL8AxgDNANMAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAQABwADAAQABQAFAAYABgAIAAcABwARABYAEgARABIACAAIAA8ADwAXAA8AGAAPABkAGgAaAB4AFgA0AB4ABQAyAAYAIgAiADMAFwAYADUAGQAaABoAKgA2ACoANAA3ADIARQA7ADwAMwA7ADwARgA1AEcASABMADYAIgBJAEoANwBFAE4AUABiAFEAUgBUAEYARwBVAEgATABWAEkASgBYAFoATgBEAFAAUQBSAFQAOAAvACwAVQApAFYAGwAQAFgAWgBdAF0AXQBdAF0AXQBdAF4AXgBeAF4AXgBeAF4AXwBfAF8AXwBfAF8AXwBgAAkAYABgAGAAYABgAGEAYQBjAAIAYwBjAGMAYwBjAGQAAABkAAAAZABkAGQAZQAAAGUAZQBlAGUAZQBmAGYAAABmAGYAZgBmAGcAAABnAGcAZwBnAGgAAABoAGgAaABoAGgAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAAAFwAAQBdAF0AXgBeAF8AXwBcAFwAXABcAFwAYABcAFwAXABhAFwAXABiAGIAYgBiAGIAYgBiAGMAZABlAGYAZgBcAFwAZwBcAFwAXABgAFwAXABhAFwAYQBcAGgAYQBcAGIAYgBiAGIAYgBiAGIAYgBjAGQAZQBlAFwAZgBcAFwAXABnAGgAYQBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAAABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAAAAoACwAMAA0ADgAKAA8AEAARABIAEwAKABQAFQAVABUAFgAXABUAGAAVABUAGQAVABUAFQAaABUAFQAKABUAFQAVABYAFwAYABUAFQAZABUAFQAVABoAFQAVABUAFQAbAAwADAAkAB4AHgAgACEAIAAhACQAJQAmAC0AMgAvAC4AKgAlACYAKAApADMAKgA0ACsANQA2ADcAPAAyAEcAPQAiAEUAIgA/AEAARgAzADQASAA1ADYANwAvAEkAKgBHAEoARQBMAFwAPABGAFwAPQBNAEgATgBPAFIASQBBAFAAUQBKAEwAUwBUADEAVQBWAFcATQBOAFgATwBSAFkAUABRAFoAWwBTAEQAVABVAFYAVwBLAEQALABYACwAWQA4ACwAWgBbAB0AHQAdAB0AHQAdAB0AHwAfAB8AHwAfAB8AHwAjACMAIwAjACMAIwAjACcAXAAnACcAJwAnACcAMAAwADkAHAA5ADkAOQA5ADkAOgBcADoAXAA6ADoAOgA7AFwAOwA7ADsAOwA7AD4APgBcAD4APgA+AD4AQgBcAEIAQgBCAEIAQwBcAEMAQwBDAEMAQwAJAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAAgArv/RAAoArv+u/wsArv+u/67/rv+u/67/rv+u/wUA0QCu/9EA0QDRANEA0QDRANEA0QCu//v/rv8OAOz/rv+u/67/rv/RANEA0QDRANEADQAlAAwAQgAQAFAAEwBtAHsAFACYAA8ApgDDAK7/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/xcArv93AK7/BwAuAK7/JgCu/xcAEQAjAK7/DQCu/67/rv+u/zoArv+u/zUArv+u/67/KACu/wcArv87AEUArv9IAK7/rv+u/67/rv+u/67//P/oAPb///8aAAAAJwABADIArv+u/wIAJAADAC8Arv+u/67/rv+u//7/lACu/wkAGwCu/7z/rv+u/6//rv+u/67/rv+u/67/rv8AAAAAAABt5uzeBQALAEkAMQFTAH8BMAFpAHgB/wCBAVMCggGDAYQBhQGGAVQChwGIAYkBVgKKAVcCiwGMAY4B3QGPAVkCkAFbApEBkgGTAWAClAFjApYBaQKXAWgCmAGZAZwBbwKdAXICnwF1AqYBgAKnAagBqQGDAqwBrQGuAYgCrwGwAbEBigKyAYsCtwGSArgBuQG8Ab0BxAHGAcQBxQHFAcYBxwHJAccByAHIAckBygHMAcoBywHLAcwB8QHzAfEB8gHyAfMB9AH1AfYBlQH3Ab8BIAKeAYYDrAOIA60DiQOuA4oDrwOMA8wDjgPNA48DzgOZA0UDmQO+H6MDwgP3A/gD+gP7A2Aemx6eHt8AWR9RH1sfUx9dH1UfXx9XH7wfsx/MH8Mf7B/lH/wf8x86AmUsOwI8Aj0CmgE+AmYsQQJCAkMCgAFEAokCRQKMAvQDuAP5A/ID/QN7A/4DfAP/A30DwATPBCYhyQMqIWsAKyHlADIhTiGDIYQhYCxhLGIsawJjLH0dZCx9Am0sUQJuLHECbyxQAnAsUgJyLHMsdSx2LH4sPwJ/LEAC8izzLH2neR2Lp4ynjadlAqqnZgLHECctzRAtLXYDdwOcA7UAkgPQA5gD0QOmA9UDoAPWA5oD8AOhA/EDlQP1A88D1wMAAAAAQQAgGsAAIB8AAQEvMgEBBTkBAQ9KAQEteQEBBXADAQORAyARowMgCQAEUBAQBCAgYAQBIYoEATXBBAEN0AQBPxQFARMxBTAmoAEBBbMBAQPNAQEP3gEBEfgBASciAgER2AMBFwAeAZWgHgFfCB/4CBgf+AYoH/gIOB/4CEgf+AZoH/gIiB/4CJgf+AioH/gIuB/4AroftgLIH6oE2B/4AtofnALoH/gC6h+QAvgfgAL6H4ICRgIBCRAFAQNgIRAQACwwL2csAQWALAFj6ywBA0CmAS2ApgEXIqcBDTKnAT15pwEDfqcBCZCnAQOgpwEJIf8gGgAAAAB7IHZhciBwYXRoID0gUG9pbnRlcl9zdHJpbmdpZnkoJDApOyB2YXIgZGF0YSA9IFBvaW50ZXJfc3RyaW5naWZ5KCQxKTsgRlMuY3JlYXRlUGF0aCgiLyIsIFBBVEguZGlybmFtZShwYXRoKSk7IEZTLndyaXRlRmlsZShQQVRILmpvaW4oIi8iLCBwYXRoKSwgZGF0YSk7IH0AY29yZQB4ZG90dmVyc2lvbgAxLjcAMS40ADEuMgBfbGRyYXdfAF9oZHJhd18AX3RkcmF3XwBfaGxkcmF3XwBfdGxkcmF3XwB4ZG90IHZlcnNpb24gIiVzIiB0b28gbG9uZwAgJWQgACUuMDJmACVzJWQgLQAjJTAyeCUwMnglMDJ4JTAyeABzZXRsaW5ld2lkdGgoACUuM2YAUyAAQyAAMiAARSAAZSAARiAAdCAldSAAVCAAZG90OmRvdABndjpkb3QAY2Fub246ZG90AHBsYWluOmRvdABwbGFpbi1leHQ6ZG90AHhkb3Q6eGRvdAB4ZG90MS4yOnhkb3QAeGRvdDEuNDp4ZG90AEkgACJfc3ViZ3JhcGhfY250IjogJWQAIl9ndmlkIjogJWQAImVkZ2VzIjogWwoAIl9ndmlkIjogJWQsCgAidGFpbCI6ICVkLAoAImhlYWQiOiAlZAAib2JqZWN0cyI6IFsKACJub2RlcyI6IFsKACJuYW1lIjogIiVzIgBcIgBcLwBcYgBcZgBcbgBccgBcdAAic3ViZ3JhcGhzIjogWwoAIiVzIjogACIlcyIAQ291bGQgbm90IHBhcnNlIHhkb3QgIiVzIgoAWwoAIm9wIjogIiVjIiwKACJyZWN0IjogWyUuMDNmLCUuMDNmLCUuMDNmLCUuMDNmXQoAIm9wIjogIkwiLAoAIm9wIjogIlQiLAoAInB0IjogWyUuMDNmLCUuMDNmXSwKACJhbGlnbiI6ICIlYyIsCgAid2lkdGgiOiAlLjAzZiwKACJ0ZXh0IjogIiVzIgoAImdyYWQiOiAibm9uZSIsCgAiY29sb3IiOiAiJXMiCgAiZ3JhZCI6ICJsaW5lYXIiLAoAImdyYWQiOiAicmFkaWFsIiwKACJvcCI6ICJGIiwKACJzaXplIjogJS4wM2YsCgAiZmFjZSI6ICIlcyIKACJvcCI6ICJTIiwKACJzdHlsZSI6ICIlcyIKACJvcCI6ICJ0IiwKACJmb250Y2hhciI6ICVkCgAicDAiOiBbJS4wM2YsJS4wM2YsJS4wM2ZdLAoAInAxIjogWyUuMDNmLCUuMDNmLCUuMDNmXSwKACJzdG9wcyI6IFsAeyJmcmFjIjogJS4wM2YsICJjb2xvciI6ICIlcyJ9AF0KACJwMCI6IFslLjAzZiwlLjAzZl0sCgAicDEiOiBbJS4wM2YsJS4wM2ZdLAoAInBvaW50cyI6IFsAWyUuMDNmLCUuMDNmXQBkcmF3XwBsZHJhd18AaGRyYXdfAHRkcmF3XwBobGRyYXdfAHRsZHJhd18AImRpcmVjdGVkIjogJXMsCgAic3RyaWN0IjogJXMARHVwbGljYXRlIGNsdXN0ZXIgbmFtZSAiJXMiCgB4ZG90AGpzb24AanNvbjAAZG90X2pzb24AeGRvdF9qc29uAGpzb246anNvbgBqc29uMDpqc29uAGRvdF9qc29uOmpzb24AeGRvdF9qc29uOmpzb24AbiA+PSA0AGd2cmVuZGVyX2NvcmVfZmlnLmMAZmlnX2JlemllcgBmaWdfcmVzb2x2ZV9jb2xvcgBmaWcAZmlnOmZpZwBtYXAAcmVjdCAlcyAlZCwlZCAlZCwlZAoAY2lyY2xlICVzICVkLCVkLCVkCgBwb2x5ICVzACAlZCwlZABndnJlbmRlcl9jb3JlX21hcC5jAG1hcF9vdXRwdXRfc2hhcGUAcmVjdGFuZ2xlICglZCwlZCkgKCVkLCVkKSAlcyAlcwoAPGFyZWEgc2hhcGU9ImNpcmNsZSIAPGFyZWEgc2hhcGU9InJlY3QiADxhcmVhIHNoYXBlPSJwb2x5IgAgaHJlZj0iACB0aXRsZT0iACBhbHQ9IiIAIGNvb3Jkcz0iACVkLCVkLCVkACVkLCVkLCVkLCVkACVkLCVkACwlZCwlZAAiPgoAPC9tYXA+CgBiYXNlIHJlZmVyZXIKAGRlZmF1bHQgADxtYXAgaWQ9IgAiIG5hbWU9IgBpc21hcDptYXAAY21hcDptYXAAaW1hcDptYXAAY21hcHg6bWFwAGltYXBfbnA6bWFwAGNtYXB4X25wOm1hcAAjICVzCgAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkICVkICVkCgAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkCgAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlLjNmICVkICUuNGYgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQKACVkICVkICMlMDJ4JTAyeCUwMngKAGd2cmVuZGVyX2NvcmVfbXAuYwBtcF9yZXNvbHZlX2NvbG9yACVkICVkICVkICVkICVkICVkICUuMWYgJS40ZiAlZCAlLjFmICUuMWYgJWQgJWQgJXNcMDAxCgAjIGVuZCBvZiBGSUcgZmlsZQoAI0ZJRyAzLjIKACMgR2VuZXJhdGVkIGJ5ICVzIHZlcnNpb24gJXMgKCVzKQoAIyBUaXRsZTogJXMKACMgUGFnZXM6ICVkCgBQb3J0cmFpdAoAQ2VudGVyCgBJbmNoZXMKAExldHRlcgoAMTAwLjAwCgBTaW5nbGUKAC0yCgAxMjAwACAyCgBtcABtcDptcAAgXSAgJWQgdHJ1ZSAlcwoAIF0gICVkIGZhbHNlICVzCgAgc2V0bGluZXdpZHRoCgAlcyAAc2V0aHNiACUuNWcgJS41ZyAlLjVnICVzY29sb3IKACUgAG5ld3BhdGggACBtb3ZldG8KACBsaW5ldG8KAHN0cm9rZQoAIGN1cnZldG8KAGNsb3NlcGF0aCBmaWxsCgBjbG9zZXBhdGggc3Ryb2tlCgAgZWxsaXBzZV9wYXRoIGZpbGwKACBlbGxpcHNlX3BhdGggc3Ryb2tlCgAgLyVzIHNldF9mb250CgAgbW92ZXRvIAAgJXMgYWxpZ25lZHRleHQKAFsgL1JlY3QgWyAAIF0KACAgL0JvcmRlciBbIDAgMCAwIF0KICAvQWN0aW9uIDw8IC9TdWJ0eXBlIC9VUkkgL1VSSSAlcyA+PgogIC9TdWJ0eXBlIC9MaW5rCi9BTk4gcGRmbWFyawoAZ3NhdmUKACUlICVzCgAwIDAgMCBlZGdlY29sb3IKAGVuZHBhZ2UKc2hvd3BhZ2UKZ3Jlc3RvcmUKACUlUGFnZVRyYWlsZXIKACUlJSVFbmRQYWdlOiAlZAoAJSUlJVBhZ2U6ICVkICVkCgAlJSUlUGFnZUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoATGFuZHNjYXBlAFBvcnRyYWl0ACUlJSVQYWdlT3JpZW50YXRpb246ICVzCgA8PCAvUGFnZVNpemUgWyVkICVkXSA+PiBzZXRwYWdlZGV2aWNlCgAlZCAlZCAlZCBiZWdpbnBhZ2UKAGdzYXZlCiVkICVkICVkICVkIGJveHByaW0gY2xpcCBuZXdwYXRoCgAlZyAlZyBzZXRfc2NhbGUgJWQgcm90YXRlICVnICVnIHRyYW5zbGF0ZQoAY2FudmFzIHNpemUgKCVkLCVkKSBleGNlZWRzIFBERiBsaW1pdCAoJWQpCgkoc3VnZ2VzdCBzZXR0aW5nIGEgYm91bmRpbmcgYm94IHNpemUsIHNlZSBkb3QoMSkpCgBbIC9Dcm9wQm94IFslZCAlZCAlZCAlZF0gL1BBR0VTIHBkZm1hcmsKACVkICVkIHNldGxheWVyCgAlJSUlVGl0bGU6ICVzCgAlJVBhZ2VzOiAoYXRlbmQpCgAlJVBhZ2VzOiAxCgAlJUJvdW5kaW5nQm94OiAoYXRlbmQpCgAlJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkCgAlJUVuZENvbW1lbnRzCnNhdmUKAHNldHVwTGF0aW4xCgBbIHtDYXRhbG9nfSA8PCAvVVJJIDw8IC9CYXNlICVzID4+ID4+Ci9QVVQgcGRmbWFyawoAJSVCZWdpblByb2xvZwAvRG90RGljdCAyMDAgZGljdCBkZWYARG90RGljdCBiZWdpbgAvc2V0dXBMYXRpbjEgewBtYXJrAC9FbmNvZGluZ1ZlY3RvciAyNTYgYXJyYXkgZGVmACBFbmNvZGluZ1ZlY3RvciAwAElTT0xhdGluMUVuY29kaW5nIDAgMjU1IGdldGludGVydmFsIHB1dGludGVydmFsAEVuY29kaW5nVmVjdG9yIDQ1IC9oeXBoZW4gcHV0ACUgU2V0IHVwIElTTyBMYXRpbiAxIGNoYXJhY3RlciBlbmNvZGluZwAvc3Rhcm5ldElTTyB7ACAgICAgICAgZHVwIGR1cCBmaW5kZm9udCBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4AICAgICAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9eyBwb3AgcG9wIH0gaWZlbHNlACAgICAgICAgfSBmb3JhbGwAICAgICAgICAvRW5jb2RpbmcgRW5jb2RpbmdWZWN0b3IgZGVmACAgICAgICAgY3VycmVudGRpY3QgZW5kIGRlZmluZWZvbnQAfSBkZWYAL1RpbWVzLVJvbWFuIHN0YXJuZXRJU08gZGVmAC9UaW1lcy1JdGFsaWMgc3Rhcm5ldElTTyBkZWYAL1RpbWVzLUJvbGQgc3Rhcm5ldElTTyBkZWYAL1RpbWVzLUJvbGRJdGFsaWMgc3Rhcm5ldElTTyBkZWYAL0hlbHZldGljYSBzdGFybmV0SVNPIGRlZgAvSGVsdmV0aWNhLU9ibGlxdWUgc3Rhcm5ldElTTyBkZWYAL0hlbHZldGljYS1Cb2xkIHN0YXJuZXRJU08gZGVmAC9IZWx2ZXRpY2EtQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYAL0NvdXJpZXIgc3Rhcm5ldElTTyBkZWYAL0NvdXJpZXItT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgAvQ291cmllci1Cb2xkIHN0YXJuZXRJU08gZGVmAC9Db3VyaWVyLUJvbGRPYmxpcXVlIHN0YXJuZXRJU08gZGVmAGNsZWFydG9tYXJrAH0gYmluZCBkZWYAJSVCZWdpblJlc291cmNlOiBwcm9jc2V0IGdyYXBodml6IDAgMAAvY29vcmQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgAvZGVmYXVsdC1mb250LWZhbWlseSAvVGltZXMtUm9tYW4gZGVmAC9jb29yZGZvbnQgY29vcmQtZm9udC1mYW1pbHkgZmluZGZvbnQgOCBzY2FsZWZvbnQgZGVmAC9JbnZTY2FsZUZhY3RvciAxLjAgZGVmAC9zZXRfc2NhbGUgewAgICAgICAgZHVwIDEgZXhjaCBkaXYgL0ludlNjYWxlRmFjdG9yIGV4Y2ggZGVmACAgICAgICBzY2FsZQAlIHN0eWxlcwAvc29saWQgeyBbXSAwIHNldGRhc2ggfSBiaW5kIGRlZgAvZGFzaGVkIHsgWzkgSW52U2NhbGVGYWN0b3IgbXVsIGR1cCBdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmAC9kb3R0ZWQgeyBbMSBJbnZTY2FsZUZhY3RvciBtdWwgNiBJbnZTY2FsZUZhY3RvciBtdWxdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmAC9pbnZpcyB7L2ZpbGwge25ld3BhdGh9IGRlZiAvc3Ryb2tlIHtuZXdwYXRofSBkZWYgL3Nob3cge3BvcCBuZXdwYXRofSBkZWZ9IGJpbmQgZGVmAC9ib2xkIHsgMiBzZXRsaW5ld2lkdGggfSBiaW5kIGRlZgAvZmlsbGVkIHsgfSBiaW5kIGRlZgAvdW5maWxsZWQgeyB9IGJpbmQgZGVmAC9yb3VuZGVkIHsgfSBiaW5kIGRlZgAvZGlhZ29uYWxzIHsgfSBiaW5kIGRlZgAvdGFwZXJlZCB7IH0gYmluZCBkZWYAJSBob29rcyBmb3Igc2V0dGluZyBjb2xvciAAL25vZGVjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYAL2VkZ2Vjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYAL2dyYXBoY29sb3IgeyBzZXRoc2Jjb2xvciB9IGJpbmQgZGVmAC9ub3Bjb2xvciB7cG9wIHBvcCBwb3B9IGJpbmQgZGVmAC9iZWdpbnBhZ2UgewklIGkgaiBucGFnZXMACS9ucGFnZXMgZXhjaCBkZWYACS9qIGV4Y2ggZGVmAAkvaSBleGNoIGRlZgAJL3N0ciAxMCBzdHJpbmcgZGVmAAlucGFnZXMgMSBndCB7AAkJZ3NhdmUACQkJY29vcmRmb250IHNldGZvbnQACQkJMCAwIG1vdmV0bwAJCQkoXCgpIHNob3cgaSBzdHIgY3ZzIHNob3cgKCwpIHNob3cgaiBzdHIgY3ZzIHNob3cgKFwpKSBzaG93AAkJZ3Jlc3RvcmUACX0gaWYAL3NldF9mb250IHsACWZpbmRmb250IGV4Y2gACXNjYWxlZm9udCBzZXRmb250ACUgZHJhdyB0ZXh0IGZpdHRlZCB0byBpdHMgZXhwZWN0ZWQgd2lkdGgAL2FsaWduZWR0ZXh0IHsJCQklIHdpZHRoIHRleHQACS90ZXh0IGV4Y2ggZGVmAAkvd2lkdGggZXhjaCBkZWYACWdzYXZlAAkJd2lkdGggMCBndCB7AAkJCVtdIDAgc2V0ZGFzaAAJCQl0ZXh0IHN0cmluZ3dpZHRoIHBvcCB3aWR0aCBleGNoIHN1YiB0ZXh0IGxlbmd0aCBkaXYgMCB0ZXh0IGFzaG93AAkJfSBpZgAJZ3Jlc3RvcmUAL2JveHByaW0gewkJCQklIHhjb3JuZXIgeWNvcm5lciB4c2l6ZSB5c2l6ZQAJCTQgMiByb2xsAAkJbW92ZXRvAAkJMiBjb3B5AAkJZXhjaCAwIHJsaW5ldG8ACQkwIGV4Y2ggcmxpbmV0bwAJCXBvcCBuZWcgMCBybGluZXRvAAkJY2xvc2VwYXRoAC9lbGxpcHNlX3BhdGggewAJL3J5IGV4Y2ggZGVmAAkvcnggZXhjaCBkZWYACS95IGV4Y2ggZGVmAAkveCBleGNoIGRlZgAJbWF0cml4IGN1cnJlbnRtYXRyaXgACW5ld3BhdGgACXggeSB0cmFuc2xhdGUACXJ4IHJ5IHNjYWxlAAkwIDAgMSAwIDM2MCBhcmMACXNldG1hdHJpeAAvZW5kcGFnZSB7IHNob3dwYWdlIH0gYmluZCBkZWYAL3Nob3dwYWdlIHsgfSBkZWYAL2xheWVyY29sb3JzZXEACVsJJSBsYXllciBjb2xvciBzZXF1ZW5jZSAtIGRhcmtlc3QgdG8gbGlnaHRlc3QACQlbMCAwIDBdAAkJWy4yIC44IC44XQAJCVsuNCAuOCAuOF0ACQlbLjYgLjggLjhdAAkJWy44IC44IC44XQAJXQBkZWYAL2xheWVybGVuIGxheWVyY29sb3JzZXEgbGVuZ3RoIGRlZgAvc2V0bGF5ZXIgey9tYXhsYXllciBleGNoIGRlZiAvY3VybGF5ZXIgZXhjaCBkZWYACWxheWVyY29sb3JzZXEgY3VybGF5ZXIgMSBzdWIgbGF5ZXJsZW4gbW9kIGdldAAJYWxvYWQgcG9wIHNldGhzYmNvbG9yAAkvbm9kZWNvbG9yIHtub3Bjb2xvcn0gZGVmAAkvZWRnZWNvbG9yIHtub3Bjb2xvcn0gZGVmAAkvZ3JhcGhjb2xvciB7bm9wY29sb3J9IGRlZgAvb25sYXllciB7IGN1cmxheWVyIG5lIHtpbnZpc30gaWYgfSBkZWYAL29ubGF5ZXJzIHsACS9teXVwcGVyIGV4Y2ggZGVmAAkvbXlsb3dlciBleGNoIGRlZgAJY3VybGF5ZXIgbXlsb3dlciBsdAAJY3VybGF5ZXIgbXl1cHBlciBndAAJb3IACXtpbnZpc30gaWYAL2N1cmxheWVyIDAgZGVmACUlRW5kUmVzb3VyY2UAJSVFbmRQcm9sb2cAJSVCZWdpblNldHVwADE0IGRlZmF1bHQtZm9udC1mYW1pbHkgc2V0X2ZvbnQAJSAvYXJyb3dsZW5ndGggMTAgZGVmACUgL2Fycm93d2lkdGggNSBkZWYAJSBtYWtlIHN1cmUgcGRmbWFyayBpcyBoYXJtbGVzcyBmb3IgUFMtaW50ZXJwcmV0ZXJzIG90aGVyIHRoYW4gRGlzdGlsbGVyAC9wZGZtYXJrIHdoZXJlIHtwb3B9IHt1c2VyZGljdCAvcGRmbWFyayAvY2xlYXJ0b21hcmsgbG9hZCBwdXR9IGlmZWxzZQAlIG1ha2UgJzw8JyBhbmQgJz4+JyBzYWZlIG9uIFBTIExldmVsIDEgZGV2aWNlcwAvbGFuZ3VhZ2VsZXZlbCB3aGVyZSB7cG9wIGxhbmd1YWdlbGV2ZWx9ezF9IGlmZWxzZQAyIGx0IHsAICAgIHVzZXJkaWN0ICg8PCkgY3ZuIChbKSBjdm4gbG9hZCBwdXQAICAgIHVzZXJkaWN0ICg+PikgY3ZuIChbKSBjdm4gbG9hZCBwdXQAfSBpZgAlJUVuZFNldHVwACUlVHJhaWxlcgoAJSUlJVBhZ2VzOiAlZAoAZW5kCnJlc3RvcmUKACUlRU9GCgAlIVBTLUFkb2JlLTMuMAAgRVBTRi0zLjAKACUlJSVDcmVhdG9yOiAlcyB2ZXJzaW9uICVzICglcykKAHBzMjpwcwA8IS0tIAA8cG9seWxpbmUAIHBvaW50cz0iACIvPgoAIGZpbGw9IgB1cmwoI2xfJWQpAHVybCgjcl8lZCkAIiBmaWxsLW9wYWNpdHk9IiVmACIgc3Ryb2tlPSIAIiBzdHJva2Utd2lkdGg9IgAiIHN0cm9rZS1kYXNoYXJyYXk9IiVzADUsMgAxLDUAIiBzdHJva2Utb3BhY2l0eT0iJWYAZ3ZyZW5kZXJfY29yZV9zdmcuYwBzdmdfcHJpbnRfY29sb3IAPHBhdGgAIGlkPSIAX3AiIAAgZD0iACVjADxkZWZzPgo8cmFkaWFsR3JhZGllbnQgaWQ9InJfJWQiIGN4PSI1MCUlIiBjeT0iNTAlJSIgcj0iNzUlJSIgZng9IiVkJSUiIGZ5PSIlZCUlIj4KADxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6ADtzdG9wLW9wYWNpdHk6ADEuADsiLz4KADxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6ADsiLz4KPC9yYWRpYWxHcmFkaWVudD4KPC9kZWZzPgoAPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0ibF8lZCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIAB4MT0iACIgeTE9IgAiIHgyPSIAIiB5Mj0iACIgPgoAPHN0b3Agb2Zmc2V0PSIlLjAzZiIgc3R5bGU9InN0b3AtY29sb3I6ADsiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgoAPHBvbHlnb24APGVsbGlwc2UAIGN4PSIAIiBjeT0iACIgcng9IgAiIHJ5PSIAPHRleHQAIHRleHQtYW5jaG9yPSJzdGFydCIAIHRleHQtYW5jaG9yPSJlbmQiACB0ZXh0LWFuY2hvcj0ibWlkZGxlIgAgeD0iACIgeT0iACBmb250LWZhbWlseT0iJXMALCVzACBmb250LXdlaWdodD0iJXMiACBmb250LXN0cmV0Y2g9IiVzIgAgZm9udC1zdHlsZT0iJXMiACBmb250LWZhbWlseT0iJXMiACBmb250LXdlaWdodD0iYm9sZCIAIGZvbnQtc3R5bGU9Iml0YWxpYyIAIHRleHQtZGVjb3JhdGlvbj0iACVzb3ZlcmxpbmUAJXNsaW5lLXRocm91Z2gAIGJhc2VsaW5lLXNoaWZ0PSJzdXBlciIAIGJhc2VsaW5lLXNoaWZ0PSJzdWIiACBmb250LXNpemU9IiUuMmYiACBmaWxsPSIlcyIAIGZpbGw9IiMlMDJ4JTAyeCUwMngiAHN2Z190ZXh0c3BhbgA+ADx0ZXh0UGF0aCB4bGluazpocmVmPSIjJXNfcCIgc3RhcnRPZmZzZXQ9IjUwJSUiPgA8dHNwYW4geD0iMCIgZHk9IgAiPgA8L3RzcGFuPjwvdGV4dFBhdGg+ADwvdGV4dD4KADwvZz4KADxnACBpZD0iYV8AIHhsaW5rOmhyZWY9IgAgeGxpbms6dGl0bGU9IgAgdGFyZ2V0PSIAPHRpdGxlPgA8L3RpdGxlPgoAPGcgaWQ9IgBfJXMAIiBjbGFzcz0iJXMAY2xhc3MAIHRyYW5zZm9ybT0ic2NhbGUoACkgcm90YXRlKCVkKSB0cmFuc2xhdGUoACkiPgoAPC9zdmc+CgA8IS0tACBQYWdlczogJWQgLS0+CgA8c3ZnIHdpZHRoPSIlZHB0IiBoZWlnaHQ9IiVkcHQiCgAgdmlld0JveD0iJS4yZiAlLjJmICUuMmYgJS4yZiIAIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIAIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KAHN0eWxlc2hlZXQAPD94bWwtc3R5bGVzaGVldCBocmVmPSIAIiB0eXBlPSJ0ZXh0L2NzcyI/PgoAPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIgoAICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgoAPCEtLSBHZW5lcmF0ZWQgYnkgAGRhcmtibHVlAGRhcmtjeWFuAGRhcmtncmF5AGRhcmtncmV5AGRhcmttYWdlbnRhAGRhcmtyZWQAbGlnaHRncmVlbgAjIAAgY3JlYXRlIGxpbmUgACAtZmlsbCAAIC1kYXNoIDUAIC1kYXNoIDIAZ3ZyZW5kZXJfY29yZV90ay5jAHRrZ2VuX3ByaW50X3RhZ3MAZ3JhcGggbGFiZWwAIC10YWdzIHslZCVzJXB9AHRrZ2VuX3ByaW50X2NvbG9yACRjACAtd2lkdGggACAtc21vb3RoIGJlemllciAAIGNyZWF0ZSBwb2x5Z29uIAAgLW91dGxpbmUgACBjcmVhdGUgb3ZhbCAAIGNyZWF0ZSB0ZXh0IAAgLXRleHQgewB9ACAtZm9udCB7ACAlZH0AIC1hbmNob3IgdwAgLWFuY2hvciBlACMAIFRpdGxlOiAAIFBhZ2VzOiAlZAoAIyBHZW5lcmF0ZWQgYnkgACkKAHRrAHRrOnRrACAgICAgIDwhLS0gACAtLT4KAEVycm9yIGR1cmluZyBjb252ZXJzaW9uIHRvICJVVEYtOCIuICBRdWl0aW5nLgoAIDx2OnNoYXBlIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgACB3aWR0aDogJWQ7IGhlaWdodDogJWQiIGZpbGxlZD0iZmFsc2UiPgA8djpwYXRoIHY9IgAgbSAAJS4wZiwlLjBmIAAgbCAAIGUgACIvPgA8L3Y6c2hhcGU+CgA8djpzdHJva2UgY29sb3I9IgAiIHdlaWdodD0iJS4wZnB0ACIgZGFzaHN0eWxlPSJkYXNoACIgZGFzaHN0eWxlPSJkb3QAIiAvPgAjJTAyeCUwMnglMDJ4AGd2cmVuZGVyX2NvcmVfdm1sLmMAdm1sX3ByaW50X2NvbG9yACB3aWR0aDogJWQ7IGhlaWdodDogJWQiACA+ADx2OnBhdGggIHY9IgAvPjwvdjpzaGFwZT4KAG0gACVzJS4wZiwlLjBmIABjIAAgZmlsbGVkPSJ0cnVlIiBmaWxsY29sb3I9IgAiIAAgZmlsbGVkPSJmYWxzZSIgACUuMGYgJS4wZiAAbCAAeCBlICIvPgAgIDx2Om92YWwgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOwAgbGVmdDogJS4yZjsgdG9wOiAlLjJmOwAgd2lkdGg6ICUuMmY7IGhlaWdodDogJS4yZiIAPC92Om92YWw+CgA8djpyZWN0IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgACBzdHJva2VkPSJmYWxzZSIgZmlsbGVkPSJmYWxzZSI+CgA8djp0ZXh0Ym94IGluc2V0PSIwLDAsMCwwIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHYtdGV4dC13cmFwcGluZzonZmFsc2UnO3BhZGRpbmc6JzAnOwBmb250LWZhbWlseTogJyVzJzsAZm9udC13ZWlnaHQ6ICVzOwBmb250LXN0cmV0Y2g6ICVzOwBmb250LXN0eWxlOiAlczsAIGZvbnQtc2l6ZTogJS4yZnB0OwBjb2xvcjolczsAY29sb3I6IyUwMnglMDJ4JTAyeDsAdm1sX3RleHRzcGFuACI+PGNlbnRlcj4APC9jZW50ZXI+PC92OnRleHRib3g+CgA8L3Y6cmVjdD4KADwvYT4KADxhACBocmVmPSIlcyIAIHRpdGxlPSIlcyIAIHRhcmdldD0iJXMiAD4KADwvdjpncm91cD4KADwvRElWPgoAPERJViBpZD0nX1ZNTDJfJyBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7dmlzaWJpbGl0eTpoaWRkZW4iPgoAPCEtLSBpbnNlcnQgYW55IG90aGVyIGh0bWwgY29udGVudCBoZXJlIC0tPgoAPERJViBpZD0nX25vdFZNTDFfJyBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7Ij4KADwhLS0gdGhpcyBzaG91bGQgb25seSBkaXNwbGF5IG9uIE5PTi1JRSBicm93c2VycyAtLT4KADxIMj5Tb3JyeSwgdGhpcyBkaWFncmFtIHdpbGwgb25seSBkaXNwbGF5IGNvcnJlY3RseSBvbiBJbnRlcm5ldCBFeHBsb3JlciA1IChhbmQgdXApIGJyb3dzZXJzLjwvSDI+CgA8RElWIGlkPSdfbm90Vk1MMl8nIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiPgoAPCEtLSBpbnNlcnQgYW55IG90aGVyIE5PTi1JRSBodG1sIGNvbnRlbnQgaGVyZSAtLT4KADwvQk9EWT4KPC9IVE1MPgoAPEhFQUQ+ADxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KADxUSVRMRT4APC9USVRMRT4APCEtLSBQYWdlczogJWQgLS0+CgAgICA8U0NSSVBUIExBTkdVQUdFPSdKYXZhc2NyaXB0Jz4KACAgIGZ1bmN0aW9uIGJyb3dzZXJjaGVjaygpCgAgICB7CgAgICAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudAoAICAgICAgdmFyIG1zaWUgPSB1YS5pbmRleE9mICggJ01TSUUgJyApCgAgICAgICB2YXIgaWV2ZXJzOwoAICAgICAgdmFyIGl0ZW07CgAgICAgICB2YXIgVk1MeWVzPW5ldyBBcnJheSgnX1ZNTDFfJywnX1ZNTDJfJyk7CgAgICAgICB2YXIgVk1Mbm89bmV3IEFycmF5KCdfbm90Vk1MMV8nLCdfbm90Vk1MMl8nKTsKACAgICAgIGlmICggbXNpZSA+IDAgKXsgICAgICAvLyBJZiBJbnRlcm5ldCBFeHBsb3JlciwgcmV0dXJuIHZlcnNpb24gbnVtYmVyCgAgICAgICAgICBpZXZlcnM9IHBhcnNlSW50ICh1YS5zdWJzdHJpbmcgKG1zaWUrNSwgdWEuaW5kZXhPZiAoJy4nLCBtc2llICkpKQoAICAgICAgfQoAICAgICAgaWYgKGlldmVycz49NSl7CgAgICAgICAgZm9yICh4IGluIFZNTHllcyl7CgAgICAgICAgICBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVk1MeWVzW3hdKTsKACAgICAgICAgIGlmIChpdGVtKSB7CgAgICAgICAgICAgIGl0ZW0uc3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7CgAgICAgICAgICB9CgAgICAgICAgfQoAICAgICAgIGZvciAoeCBpbiBWTUxubyl7CgAgICAgICAgICBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVk1Mbm9beF0pOwoAICAgICAgICAgICBpdGVtLnN0eWxlLnZpc2liaWxpdHk9J2hpZGRlbic7CgAgICAgIH1lbHNlewoAICAgICB9CgAgICB9CgAgICA8L1NDUklQVD4KADwvSEVBRD4APEJPRFkgb25sb2FkPSdicm93c2VyY2hlY2soKTsnPgoAPERJViBpZD0nX1ZNTDFfJyBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IGRpc3BsYXk6aW5saW5lOyB2aXNpYmlsaXR5OmhpZGRlbgAgd2lkdGg6ICVkcHQ7IGhlaWdodDogJWRwdCI+CgA8U1RZTEU+CgB2XDoqIHsgYmVoYXZpb3I6IHVybCgjZGVmYXVsdCNWTUwpO2Rpc3BsYXk6aW5saW5lLWJsb2NrfQoAPC9TVFlMRT4KADx4bWw6bmFtZXNwYWNlIG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIgcHJlZml4PSJ2IiAvPgoAIDx2Omdyb3VwIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgACB3aWR0aDogJWRwdDsgaGVpZ2h0OiAlZHB0IgAgY29vcmRvcmlnaW49IjAsMCIgY29vcmRzaXplPSIlZCwlZCIgPgA8SFRNTD4KAAo8IS0tIEdlbmVyYXRlZCBieSAAIHZlcnNpb24gACAoACkKLS0+CgBhcXVhAGZ1Y2hzaWEAbGltZQBvbGl2ZQB0ZWFsAHZtbAB2bWw6dm1sAC8vKioqIGNvbW1lbnQ6ICVzCgAvLyoqKiBwb2x5bGluZQoAc2NhbGUgICAgPCU5LjNmLCAlOS4zZiwgJTkuM2Y+CgByb3RhdGUgICA8JTkuM2YsICU5LjNmLCAlOS4zZj4KAHRyYW5zbGF0ZTwlOS4zZiwgJTkuM2YsICU5LjNmPgoAc3BoZXJlX3N3ZWVwIHsKICAgICVzCiAgICAlZCwKAGxpbmVhcl9zcGxpbmUAPCU5LjNmLCAlOS4zZiwgJTkuM2Y+LCAlLjNmCgAlcyAgICAlcwAgICAgdG9sZXJhbmNlIDAuMDEKICAgICVzICAgICVzICAgICVzICAgICVzfQoAJXMlcwAlcyB0cmFuc21pdCAlLjNmAFJlZABHcmVlbgBCbHVlAHJnYjwlOS4zZiwgJTkuM2YsICU5LjNmPiB0cmFuc21pdCAlLjNmAG9vcHMsIGludGVybmFsIGVycm9yOiB1bmhhbmRsZWQgY29sb3IgdHlwZT0lZCAlcwoAZ3ZyZW5kZXJfY29yZV9wb3YuYwBwb3ZfY29sb3JfYXNfc3RyAHBpZ21lbnQgeyBjb2xvciAlcyB9CgBwb3YgcmVuZGVyZXI6ZWwgLSAlcwoALy8qKiogYmV6aWVyCgBiX3NwbGluZQAgICAgICAgIHRvbGVyYW5jZSAwLjAxCiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAC8vKioqIHBvbHlnb24KACAgICB0b2xlcmFuY2UgMC4xCiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAHBvbHlnb24geyAlZCwKADwlOS4zZiwgJTkuM2YsICU5LjNmPgAlcwogICAgJXMACiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAC8vKioqIGVsbGlwc2UKAHRvcnVzIHsgJS4zZiwgJS4zZgogICAgJXMgICAgJXMgICAgJXMgICAgJXN9CgBzcGhlcmUgezwlOS4zZiwgJTkuM2YsICU5LjNmPiwgMS4wCiAgICAlcyAgICAlcyAgICAlcyAgICAlc30KAC8vKioqIHRleHRzcGFuOiAlcywgZm9udHNpemUgPSAlLjNmLCBmb250bmFtZSA9ICVzCgBzY2FsZSAlLjNmCgB0ZXh0IHsKICAgIHR0ZiAiJXMiLAogICAgIiVzIiwgJS4zZiwgJS4zZgogICAgJXMgICAgJXMgICAgJXMgICAgJXMgICAgJXN9CgAgICAgbm9fc2hhZG93CgAvLyoqKiBlbmRfZWRnZQoALy8qKiogYmVnaW5fZWRnZQoALy8qKiogZW5kX25vZGUKAC8vKioqIGJlZ2luX25vZGU6ICVzCgAvLyoqKiBlbmRfY2x1c3RlcgoALy8qKiogYmVnaW5fY2x1c3RlcgoALy8qKiogZW5kX3BhZ2UKAC8vKioqIGJlZ2luX3BhZ2UKAC8vKioqIGVuZF9sYXllcgoALy8qKiogYmVnaW5fbGF5ZXI6ICVzLCAlZC8lZAoALy8qKiogZW5kX2dyYXBoCgAvLyoqKiBiZWdpbl9ncmFwaCAlcwoAY2FtZXJhIHsgbG9jYXRpb24gPCUuM2YgLCAlLjNmICwgJS4zZj4KICAgICAgICAgbG9va19hdCAgPCUuM2YgLCAlLjNmICwgJS4zZj4KICAgICAgICAgcmlnaHQgeCAqIGltYWdlX3dpZHRoIC8gaW1hZ2VfaGVpZ2h0CiAgICAgICAgIGFuZ2xlICUuM2YKfQoALy9za3kKcGxhbmUgeyA8MCwgMSwgMD4sIDEgaG9sbG93CiAgICB0ZXh0dXJlIHsKICAgICAgICBwaWdtZW50IHsgYm96byB0dXJidWxlbmNlIDAuOTUKICAgICAgICAgICAgY29sb3JfbWFwIHsKICAgICAgICAgICAgICAgIFswLjAwIHJnYiA8MC4wNSwgMC4yMCwgMC41MD5dCiAgICAgICAgICAgICAgICBbMC41MCByZ2IgPDAuMDUsIDAuMjAsIDAuNTA+XQogICAgICAgICAgICAgICAgWzAuNzUgcmdiIDwxLjAwLCAxLjAwLCAxLjAwPl0KICAgICAgICAgICAgICAgIFswLjc1IHJnYiA8MC4yNSwgMC4yNSwgMC4yNT5dCiAgICAgICAgICAgICAgICBbMS4wMCByZ2IgPDAuNTAsIDAuNTAsIDAuNTA+XQogICAgICAgICAgICB9CiAgICAgICAgICAgIHNjYWxlIDwxLjAwLCAxLjAwLCAxLjUwPiAqIDIuNTAKICAgICAgICAgICAgdHJhbnNsYXRlIDwwLjAwLCAwLjAwLCAwLjAwPgogICAgICAgIH0KICAgICAgICBmaW5pc2ggeyBhbWJpZW50IDEgZGlmZnVzZSAwIH0KICAgIH0KICAgIHNjYWxlIDEwMDAwCn0KLy9taXN0CmZvZyB7IGZvZ190eXBlIDIKICAgIGRpc3RhbmNlIDUwCiAgICBjb2xvciByZ2IgPDEuMDAsIDEuMDAsIDEuMDA+ICogMC43NQogICAgZm9nX29mZnNldCAwLjEwCiAgICBmb2dfYWx0IDEuNTAKICAgIHR1cmJ1bGVuY2UgMS43NQp9Ci8vZ25kCnBsYW5lIHsgPDAuMDAsIDEuMDAsIDAuMDA+LCAwCiAgICB0ZXh0dXJlIHsKICAgICAgICBwaWdtZW50eyBjb2xvciByZ2IgPDAuMjUsIDAuNDUsIDAuMDA+IH0KICAgICAgICBub3JtYWwgeyBidW1wcyAwLjc1IHNjYWxlIDAuMDEgfQogICAgICAgIGZpbmlzaCB7IHBob25nIDAuMTAgfQogICAgfQp9CgBsaWdodF9zb3VyY2UgeyA8MTUwMCwzMDAwLC0yNTAwPiBjb2xvciBXaGl0ZSB9CgAjdmVyc2lvbiAzLjY7CgBnbG9iYWxfc2V0dGluZ3MgeyBhc3N1bWVkX2dhbW1hIDEuMCB9CgAjZGVmYXVsdCB7IGZpbmlzaCB7IGFtYmllbnQgMC4xIGRpZmZ1c2UgMC45IH0gfQoAI2luY2x1ZGUgImNvbG9ycy5pbmMiCiNpbmNsdWRlICJ0ZXh0dXJlcy5pbmMiCiNpbmNsdWRlICJzaGFwZXMuaW5jIgoAI2RlY2xhcmUgJXMgPSAlczsKAEJsYWNrAFdoaXRlAGJha2Vyc2Nob2MAYnJhc3MAYnJpZ2h0Z29sZABicm9uemUAYnJvbnplMgBjbGVhcgBjb29sY29wcGVyAGNvcHBlcgBkYXJrYnJvd24AZGFya3B1cnBsZQBkYXJrdGFuAGRhcmt3b29kAGRrZ3JlZW5jb3BwZXIAZHVzdHlyb3NlAGZlbGRzcGFyAGZsZXNoAGdyYXkwNQBncmVlbmNvcHBlcgBodW50ZXJzZ3JlZW4AbGlnaHRfcHVycGxlAGxpZ2h0d29vZABtYW5kYXJpbm9yYW5nZQBtZWRpdW1mb3Jlc3RncmVlbgBtZWRpdW1nb2xkZW5yb2QAbWVkaXVtd29vZABtZWRfcHVycGxlAG1pY2EAbmVvbmJsdWUAbmVvbnBpbmsAbmV3bWlkbmlnaHRibHVlAG5ld3RhbgBvbGRnb2xkAHF1YXJ0egByaWNoYmx1ZQBzY2FybGV0AHNlbWlTd2VldENob2MAc2lsdmVyAHNwaWN5cGluawBzdW1tZXJza3kAdmVyeWRhcmticm93bgB2ZXJ5X2xpZ2h0X3B1cnBsZQBwb3YAcG92OnBvdgAlcyAlcwoALlwiIAAgJWQgJWQAICVzCgAgJWQAZmlsbCAAZWxsaXBzZSBhdHRycyVkICVzd2lkICUuNWYgaHQgJS41ZiBhdCAoJS41ZiwlLjVmKTsKAC5mdCAlcwoALnBzICVkKlxuKFNGdS8lLjBmdQoAIiVzIiBhdCAoJS41ZiwlLjVmKTsKACUwM28AJXMlcyBpcyBub3QgYSB0cm9mZiBmb250CgBkb3QgcGljIHBsdWdpbjogAFIAXQouUEUKAC5QUyAlLjVmICUuNWYKACVzIHRvIGNoYW5nZSBkcmF3aW5nIHNpemUsIG11bHRpcGx5IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9uIHRoZSAuUFMgbGluZSBhYm92ZSBhbmQgdGhlIG51bWJlciBvbiB0aGUgdHdvIGxpbmVzIGJlbG93IChyb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpIGJ5IGEgc2NhbGUgZmFjdG9yCgAubnIgU0YgJS4wZgpzY2FsZXRoaWNrbmVzcyA9ICUuMGYKACVzIGRvbid0IGNoYW5nZSBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgaW4gdGhpcyBkcmF3aW5nCgAlcyBub24tZmF0YWwgcnVuLXRpbWUgcGljIHZlcnNpb24gZGV0ZXJtaW5hdGlvbiwgdmVyc2lvbiAyCgBib3hyYWQ9Mi4wICVzIHdpbGwgYmUgcmVzZXQgdG8gMC4wIGJ5IGdwaWMgb25seQoAc2NhbGU9MS4wICVzIHJlcXVpcmVkIGZvciBjb21wYXJpc29ucwoAJXMgYm94cmFkIGlzIG5vdyAwLjAgaW4gZ3BpYywgZWxzZSBpdCByZW1haW5zIDIuMAoAJXMgZGFzaHdpZCBpcyAwLjEgaW4gMTB0aCBFZGl0aW9uLCAwLjA1IGluIERXQiAyIGFuZCBpbiBncGljCgAlcyBmaWxsdmFsIGlzIDAuMyBpbiAxMHRoIEVkaXRpb24gKGZpbGwgMCBtZWFucyBibGFjayksIDAuNSBpbiBncGljIChmaWxsIDAgbWVhbnMgd2hpdGUpLCB1bmRlZmluZWQgaW4gRFdCIDIKACVzIGZpbGwgaGFzIG5vIG1lYW5pbmcgaW4gRFdCIDIsIGdwaWMgY2FuIHVzZSBmaWxsIG9yIGZpbGxlZCwgMTB0aCBFZGl0aW9uIHVzZXMgZmlsbCBvbmx5CgAlcyBEV0IgMiBkb2Vzbid0IHVzZSBmaWxsIGFuZCBkb2Vzbid0IGRlZmluZSBmaWxsdmFsCgAlcyByZXNldCB3b3JrcyBpbiBncGljIGFuZCAxMHRoIGVkaXRpb24sIGJ1dCBpc24ndCBkZWZpbmVkIGluIERXQiAyCgAlcyBEV0IgMiBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zCgBpZiBib3hyYWQgPiAxLjAgJiYgZGFzaHdpZCA8IDAuMDc1IHRoZW4gWAoJZmlsbHZhbCA9IDE7CglkZWZpbmUgZmlsbCBZIFk7CglkZWZpbmUgc29saWQgWSBZOwoJZGVmaW5lIHJlc2V0IFkgc2NhbGU9MS4wIFk7ClgKAHJlc2V0ICVzIHNldCB0byBrbm93biBzdGF0ZQoAJXMgR05VIHBpYyB2cy4gMTB0aCBFZGl0aW9uIGRcKGUndGVudGUKAGlmIGZpbGx2YWwgPiAwLjQgdGhlbiBYCglkZWZpbmUgc2V0ZmlsbHZhbCBZIGZpbGx2YWwgPSAxIC0gWTsKCWRlZmluZSBib2xkIFkgdGhpY2tuZXNzIDIgWTsKAAklcyBpZiB5b3UgdXNlIGdwaWMgYW5kIGl0IGJhcmZzIG9uIGVuY291bnRlcmluZyAic29saWQiLAoACSVzCWluc3RhbGwgYSBtb3JlIHJlY2VudCB2ZXJzaW9uIG9mIGdwaWMgb3Igc3dpdGNoIHRvIERXQiBvciAxMHRoIEVkaXRpb24gcGljOwoACSVzCXNvcnJ5LCB0aGUgZ3JvZmYgZm9sa3MgY2hhbmdlZCBncGljOyBzZW5kIGFueSBjb21wbGFpbnQgdG8gdGhlbTsKAFggZWxzZSBaCglkZWZpbmUgc2V0ZmlsbHZhbCBZIGZpbGx2YWwgPSBZOwoJZGVmaW5lIGJvbGQgWSBZOwoJZGVmaW5lIGZpbGxlZCBZIGZpbGwgWTsKWgoAJXMgYXJyb3doZWFkIGhhcyBubyBtZWFuaW5nIGluIERXQiAyLCBhcnJvd2hlYWQgPSA3IG1ha2VzIGZpbGxlZCBhcnJvd2hlYWRzIGluIGdwaWMgYW5kIGluIDEwdGggRWRpdGlvbgoAJXMgYXJyb3doZWFkIGlzIHVuZGVmaW5lZCBpbiBEV0IgMiwgaW5pdGlhbGx5IDEgaW4gZ3BpYywgMiBpbiAxMHRoIEVkaXRpb24KAGFycm93aGVhZCA9IDcgJXMgbm90IHVzZWQgYnkgZ3JhcGh2aXoKACVzIEdOVSBwaWMgc3VwcG9ydHMgYSBib3hyYWQgdmFyaWFibGUgdG8gZHJhdyBib3hlcyB3aXRoIHJvdW5kZWQgY29ybmVyczsgRFdCIGFuZCAxMHRoIEVkLiBkbyBub3QKAGJveHJhZCA9IDAgJXMgbm8gcm91bmRlZCBjb3JuZXJzIGluIGdyYXBodml6CgAlcyBHTlUgcGljIHN1cHBvcnRzIGEgbGluZXRoaWNrIHZhcmlhYmxlIHRvIHNldCBsaW5lIHRoaWNrbmVzczsgRFdCIGFuZCAxMHRoIEVkLiBkbyBub3QKAGxpbmV0aGljayA9IDA7IG9sZGxpbmV0aGljayA9IGxpbmV0aGljawoAJXMgLlBTIHcvbyBhcmdzIGNhdXNlcyBHTlUgcGljIHRvIHNjYWxlIGRyYXdpbmcgdG8gZml0IDguNXgxMSBwYXBlcjsgRFdCIGRvZXMgbm90CgAlcyBtYXhwc2h0IGFuZCBtYXhwc3dpZCBoYXZlIG5vIG1lYW5pbmcgaW4gRFdCIDIuMCwgc2V0IHBhZ2UgYm91bmRhcmllcyBpbiBncGljIGFuZCBpbiAxMHRoIEVkaXRpb24KACVzIG1heHBzaHQgYW5kIG1heHBzd2lkIGFyZSBwcmVkZWZpbmVkIHRvIDExLjAgYW5kIDguNSBpbiBncGljCgBtYXhwc2h0ID0gJWYKbWF4cHN3aWQgPSAlZgoARG90OiBbCgBkZWZpbmUgYXR0cnMwICUlICUlOyBkZWZpbmUgdW5maWxsZWQgJSUgJSU7IGRlZmluZSByb3VuZGVkICUlICUlOyBkZWZpbmUgZGlhZ29uYWxzICUlICUlCgAlcyVzIHVuc3VwcG9ydGVkCgByb3RhdGlvbgAlcyByZXN0b3JlIHBvaW50IHNpemUgYW5kIGZvbnQKLnBzIFxuKC5TCi5mdCBcbihERgoAJXMgQ3JlYXRvcjogJXMgdmVyc2lvbiAlcyAoJXMpCgAlcyBUaXRsZTogJXMKACVzIHNhdmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoubnIgLlMgXG4oLnMKLm5yIERGIFxuKC5mCgBwaWMAcGljOnBpYwBwbmc6c3ZnAGdpZjpzdmcAanBlZzpzdmcAanBlOnN2ZwBqcGc6c3ZnAHBuZzpmaWcAZ2lmOmZpZwBqcGVnOmZpZwBqcGU6ZmlnAGpwZzpmaWcAcG5nOnZybWwAZ2lmOnZybWwAanBlZzp2cm1sAGpwZTp2cm1sAGpwZzp2cm1sAGVwczpwcwBwczpwcwAobGliKTpwcwBwbmc6bWFwAGdpZjptYXAAanBlZzptYXAAanBlOm1hcABqcGc6bWFwAHBzOm1hcABlcHM6bWFwAHN2ZzptYXAAcG5nOmRvdABnaWY6ZG90AGpwZWc6ZG90AGpwZTpkb3QAanBnOmRvdABwczpkb3QAZXBzOmRvdABzdmc6ZG90AHBuZzp4ZG90AGdpZjp4ZG90AGpwZWc6eGRvdABqcGU6eGRvdABqcGc6eGRvdABwczp4ZG90AGVwczp4ZG90AHN2Zzp4ZG90AHN2ZzpzdmcAcG5nOnZtbABnaWY6dm1sAGpwZWc6dm1sAGpwZTp2bWwAanBnOnZtbABnaWY6dGsAaW1hZ2UgY3JlYXRlIHBob3RvICJwaG90b18lcyIgLWZpbGUgIiVzIgoAJGMgY3JlYXRlIGltYWdlICUuMmYgJS4yZiAtaW1hZ2UgInBob3RvXyVzIgoAPHY6aW1hZ2Ugc3JjPSIlcyIgc3R5bGU9IiBwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6JS4yZjsgaGVpZ2h0OiUuMmY7IGxlZnQ6JS4yZiA7IHRvcDolLjJmIgAgLz4KAGd2bG9hZGltYWdlX2NvcmUuYwBjb3JlX2xvYWRpbWFnZV9wc2xpYgBbIAAlZyAlZyAAXSAgJWQgdHJ1ZSAlcwoAXSAgJWQgZmFsc2UgJXMKAGNvcmVfbG9hZGltYWdlX3BzAGdzYXZlICVnICVnIHRyYW5zbGF0ZSBuZXdwYXRoCgB1c2VyX3NoYXBlXyVkCgBncmVzdG9yZQoAY29yZV9sb2FkaW1hZ2VfdnJtbABTaGFwZSB7CgAgIGFwcGVhcmFuY2UgQXBwZWFyYW5jZSB7CgAgICAgbWF0ZXJpYWwgTWF0ZXJpYWwgewoAICAgICAgYW1iaWVudEludGVuc2l0eSAwLjMzCgAgICAgICAgIGRpZmZ1c2VDb2xvciAxIDEgMQoAICAgIH0KACAgICB0ZXh0dXJlIEltYWdlVGV4dHVyZSB7IHVybCAiJXMiIH0KACAgfQoAY29yZV9sb2FkaW1hZ2VfZmlnACVkICVkICVkICVkICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQgJWQgJWQKICVkICVzCgAgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQKAGNvcmVfbG9hZGltYWdlX3N2ZwA8aW1hZ2UgeGxpbms6aHJlZj0iACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCIgeD0iJWciIHk9IiVnIgAgdHJhbnNmb3JtPSJyb3RhdGUoJWQgJWcgJWcpIgAiIHdpZHRoPSIlZ3B4IiBoZWlnaHQ9IiVncHgiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIG1lZXQiIHg9IiVnIiB5PSIlZyIALz4KAGRvdF9sYXlvdXQAcGhhc2UAZG90IGRvZXMgbm90IHN1cHBvcnQgdGhlIGFzcGVjdCBhdHRyaWJ1dGUgZm9yIGRpc2Nvbm5lY3RlZCBncmFwaHMgb3IgZ3JhcGhzIHdpdGggY2x1c3RlcnMKAGNvbXBvdW5kAHYgPT0gbgBkb3Rpbml0LmMAcmVtb3ZlX2Zyb21fcmFuawBvcmRlcgBlZGdlIGxhYmVscyB3aXRoIHNwbGluZXM9Y3VydmVkIG5vdCBzdXBwb3J0ZWQgaW4gZG90IC0gdXNlIHhsYWJlbHMKAEVEX2xhYmVsKGZlKQBkb3RzcGxpbmVzLmMAX2RvdF9zcGxpbmVzAGZsYXQgZWRnZSBiZXR3ZWVuIGFkamFjZW50IG5vZGVzIG9uZSBvZiB3aGljaCBoYXMgYSByZWNvcmQgc2hhcGUgLSByZXBsYWNlIHJlY29yZHMgd2l0aCBIVE1MLWxpa2UgbGFiZWxzCgAgIEVkZ2UgJXMgJXMgJXMKAHh4eAAxMDAwMAB7JXN9AGF1eGcAbGFiZWxfZmxvYXQAZml4ZWQAKGwgPSBFRF9sYWJlbChmZSkpAHNldEVkZ2VMYWJlbFBvcwBlICE9IE5VTEwAZmFzdGdyLmMAZGVsZXRlX2Zhc3RfZWRnZQBuICE9IE5EX25leHQobikAZmFzdF9ub2RlAHUgIT0gdgBmYXN0X25vZGVhcHAATkRfbmV4dCh2KSA9PSBOVUxMAGZpbmRfZmFzdF9ub2RlKGcsIG4pAGRlbGV0ZV9mYXN0X25vZGUAZGVsZXRlX2ZsYXRfZWRnZQBtZXJnZV9vbmV3YXkgZ2xpdGNoCgBtZXJnZV9vbmV3YXkAc2FmZV9kZWxldGVfZmFzdF9lZGdlAGxnAGNvbXAAY250ID09IHN6AG1pbmNyb3NzLmMAZml4TGFiZWxPcmRlcgByZW1pbmNyb3NzAG1pbmNyb3NzICVzOiAlZCBjcm9zc2luZ3MsICUuMmYgc2Vjcy4KAHYAbmVpZ2hib3IAKHJ2ID09IDApIHx8IChORF9vcmRlcihydiktTkRfb3JkZXIodikpKmRpciA+IDAAY29uc3RyYWluaW5nX2ZsYXRfZWRnZShnLHYsZSkgPT0gRkFMU0UAZmxhdF9yZW9yZGVyAE5EX3JhbmsodikgPT0gcgBwb3N0b3JkZXIAZmxhdGluZGV4KGFnaGVhZChlKSkgPCBNLT5ucm93cwBmbGF0X3NlYXJjaABmbGF0aW5kZXgoYWd0YWlsKGUpKSA8IE0tPm5jb2xzAG91dABvcmRlcmluZyAnJXMnIG5vdCByZWNvZ25pemVkLgoAb3JkZXJpbmcgJyVzJyBub3QgcmVjb2duaXplZCBmb3Igbm9kZSAnJXMnLgoAbWVyZ2UyOiBncmFwaCAlcywgcmFuayAlZCBoYXMgb25seSAlZCA8ICVkIG5vZGVzCgBtaW5jcm9zczogcGFzcyAlZCBpdGVyICVkIHRyeWluZyAlZCBjdXJfY3Jvc3MgJWQgYmVzdF9jcm9zcyAlZAoATkRfb3JkZXIodikgPCBORF9vcmRlcih3KQBiYWxhbmNlAHRyYW5zcG9zZV9zdGVwAHN1cnByaXNlCgBpbnN0YWxsX2luX3JhbmssIGxpbmUgJWQ6ICVzICVzIHJhbmsgJWQgaSA9ICVkIGFuID0gMAoAR0RfcmFuayhnKVtyXS5uIDw9IEdEX3JhbmsoZylbcl0uYW4AaW5zdGFsbF9pbl9yYW5rAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogTkRfb3JkZXIoJXMpIFslZF0gPiBHRF9yYW5rKFJvb3QpWyVkXS5hbiBbJWRdCgBpbnN0YWxsX2luX3JhbmssIGxpbmUgJWQ6IHJhbmsgJWQgbm90IGluIHJhbmsgcmFuZ2UgWyVkLCVkXQoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiBHRF9yYW5rKGcpWyVkXS52ICsgTkRfb3JkZXIoJXMpIFslZF0gPiBHRF9yYW5rKGcpWyVkXS5hdiArIEdEX3JhbmsoUm9vdClbJWRdLmFuIFslZF0KAF9uZXdfcmFuawBtY2xpbWl0AHJhbmsoZywgMiwgbnNpdGVyMihnKSkgPT0gMABwb3NpdGlvbi5jAGRvdF9wb3NpdGlvbgBBUj0lMC40bGYJIEFyZWE9ICUwLjRsZgkARHVtbXk9JWQKAEdvaW5nIHRvIGFwcGx5IGFub3RoZXIgZXhwYW5zaW9uLgoAbmV4dCNpdGVyPSVkCgBocABjb25uZWN0R3JhcGgARWRnZSBsZW5ndGggJWYgbGFyZ2VyIHRoYW4gbWF4aW11bSAldSBhbGxvd2VkLgpDaGVjayBmb3Igb3ZlcndpZGUgbm9kZShzKS4KAG5zbGltaXQAY29udGFpbl9ub2RlcyBjbHVzdCAlcyByYW5rICVkIG1pc3Npbmcgbm9kZQoAbnNsaW1pdDEAbmV3cmFuawBNYXhyYW5rID0gJWQsIG1pbnJhbmsgPSAlZAoAbGVhZGVyICE9IE5VTEwAcmFuay5jAGNsdXN0ZXJfbGVhZGVyAChORF9VRl9zaXplKG4pIDw9IDEpIHx8IChuID09IGxlYWRlcikAYWdoZWFkKGUpID09IFVGX2ZpbmQoYWdoZWFkKGUpKQBtaW5tYXhfZWRnZXMAYWd0YWlsKGUpID09IFVGX2ZpbmQoYWd0YWlsKGUpKQByYW5rAHNhbWUAbWluAHNvdXJjZQBtYXgAc2luawBsZXZlbCBhc3NpZ25tZW50IGNvbnN0cmFpbnRzAGxldmVsIGdyYXBoIHJlYwB/cm9vdAB/dG9wAH9ib3QAY29tcGFjdABfd2Vha18lZAByYW5raW5nOiBmYWlsdXJlIHRvIGNyZWF0ZSBzdHJvbmcgY29uc3RyYWludCBlZGdlIGJldHdlZW4gbm9kZXMgJXMgYW5kICVzCgAlcyBoYXMgdW5yZWNvZ25pemVkIHJhbms9JXMAbGV2ZWwgZWRnZSByZWMAbGV2ZWwgbm9kZSByZWMAc2FtZWhlYWQAc2FtZXRhaWwAdG9vIG1hbnkgKD4gJWQpIHNhbWV7aGVhZCx0YWlsfSBncm91cHMgZm9yIG5vZGUgJXMKAGNvbWJpQVIgPSAlbGYKACVsZiwlZAB0aGUgYXNwZWN0IGF0dHJpYnV0ZSBoYXMgYmVlbiBkaXNhYmxlZCBkdWUgdG8gaW1wbGVtZW50YXRpb24gZmxhd3MgLSBhdHRyaWJ1dGUgaWdub3JlZC4KAEVEX3RvX3ZpcnQoZSkgPT0gTlVMTABjbGFzczIuYwBtZXJnZV9jaGFpbgBFRF90b192aXJ0KG9yaWcpID09IE5VTEwAbWFrZV9jaGFpbgBFRF90b192aXJ0KG9yaWcpICE9IE5VTEwATkRfcmFuayhmcm9tKSA8IE5EX3JhbmsodG8pAGNsdXN0ZXIuYwBtYXBfcGF0aAAlcyB3YXMgYWxyZWFkeSBpbiBhIHJhbmtzZXQsIGRlbGV0ZWQgZnJvbSBjbHVzdGVyICVzCgBsaGVhZABsdGFpbAAlcyAtPiAlczogc3BsaW5lIHNpemUgPiAxIG5vdCBzdXBwb3J0ZWQKACVzIC0+ICVzOiBoZWFkIG5vdCBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgAlcyAtPiAlczogdGFpbCBpcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgBiZXotPnNmbGFnAGNvbXBvdW5kLmMAbWFrZUNvbXBvdW5kRWRnZQBiZXotPmVmbGFnACVzIC0+ICVzOiB0YWlsIG5vdCBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgAlcyAtPiAlczogaGVhZCBpcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgBzZWdtZW50IFslcywlc10gZG9lcyBub3QgaW50ZXJzZWN0IGJveCBsbD0lcyx1cj0lcwoAYm94SW50ZXJzZWN0ZgAoJS41ZywlLjVnKQBjbHVzdGVyIG5hbWVkICVzIG5vdCBmb3VuZAoAY29uY2VudHJhdGU9dHJ1ZSBtYXkgbm90IHdvcmsgY29ycmVjdGx5LgoAcmVidWlsdGRfdmxpc3RzOiByYW5rIGxlYWQgJXMgbm90IGluIG9yZGVyICVkIG9mIHJhbmsgJWQKAGRlZ2VuZXJhdGUgY29uY2VudHJhdGVkIHJhbmsgJXMsJWQKAE5EX2luKHJpZ2h0KS5zaXplICsgTkRfb3V0KHJpZ2h0KS5zaXplID09IDAAY29uYy5jAG1lcmdldmlydHVhbABkb3Q6IE91dCBvZiBtZW1vcnkKAE5EX291dCh2KS5zaXplID09IDIAZmxhdC5jAHNldGJvdW5kcwBHRF9taW5yYW5rKGcpID09IDAAYWJvbWluYXRpb24AbmVhdG9fbGF5b3V0AG5lYXRvAGZkcAB0d29waQBjaXJjbwBwYXRjaHdvcmsAb3NhZ2UAbm9wAG5vcDEAbm9wMgAlbGYsJWxmLCVsZiVjAG5vZGUgJXMsIHBvc2l0aW9uICVzLCBleHBlY3RlZCB0d28gZG91YmxlcwoAbm90cmFuc2xhdGUAbm9kZSAlcyBpbiBncmFwaCAlcyBoYXMgbm8gcG9zaXRpb24KAHMsJWxmLCVsZiVuACBlLCVsZiwlbGYlbgBwb3MgYXR0cmlidXRlIGZvciBlZGdlICglcywlcykgZG9lc24ndCBoYXZlIDNuKzEgcG9pbnRzCgAlbGYsJWxmJW4Ac3ludGF4IGVycm9yIGluIHBvcyBhdHRyaWJ1dGUgZm9yIGVkZ2UgKCVzLCVzKQoAJWxmLCVsZiwlbGYsJWxmAHN0YXJ0AHNlbGYAcmFuZG9tAG5vZGUgcG9zaXRpb25zIGFyZSBpZ25vcmVkIHVubGVzcyBzdGFydD1yYW5kb20KAGFzIHJlcXVpcmVkIGJ5IHRoZSAtbiBmbGFnCgBfbmVhdG9fY2MAZ3JhcGggJXMgaXMgZGlzY29ubmVjdGVkLiBIZW5jZSwgdGhlIGNpcmN1aXQgbW9kZWwKAEFsdGVybmF0aXZlbHksIGNvbnNpZGVyIHJ1bm5pbmcgbmVhdG8gdXNpbmcgLUdwYWNrPXRydWUgb3IgZGVjb21wb3NpbmcKAHRoZSBncmFwaCBpbnRvIGNvbm5lY3RlZCBjb21wb25lbnRzLgoAU29sdmluZyBtb2RlbCAlZCBpdGVyYXRpb25zICVkIHRvbCAlZgoATkRfaWQobnApID09IGkAbmVhdG9pbml0LmMAbWFrZUdyYXBoRGF0YQBmIDwgZ3JhcGhbal0ubmVkZ2VzAGRmc0N5Y2xlAG1vZGVsICVkIHNtYXJ0X2luaXQgJWQgc3RyZXNzd3QgJWQgaXRlcmF0aW9ucyAlZCB0b2wgJWYKAGNvbnZlcnQgZ3JhcGg6IABtYWpvcml6YXRpb24KACVkIG5vZGVzICUuMmYgc2VjCgBsZXZlbHNnYXAAbGF5b3V0IGFib3J0ZWQKAHN0cmVzc3d0ACVzIGF0dHJpYnV0ZSB2YWx1ZSBtdXN0IGJlIDEgb3IgMiAtIGlnbm9yaW5nCgBtb2RlbABjaXJjdWl0AHN1YnNldABzaG9ydHBhdGgAbWRzAGVkZ2VzIGluIGdyYXBoICVzIGhhdmUgbm8gbGVuIGF0dHJpYnV0ZS4gSGVuY2UsIHRoZSBtZHMgbW9kZWwKAGlzIGluYXBwcm9wcmlhdGUuIFJldmVydGluZyB0byB0aGUgc2hvcnRlc3QgcGF0aCBtb2RlbC4KAFVua25vd24gdmFsdWUgJXMgZm9yIGF0dHJpYnV0ZSAibW9kZWwiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAbW9kZQBLSwBtYWpvcgBoaWVyAElsbGVnYWwgdmFsdWUgJXMgZm9yIGF0dHJpYnV0ZSAibW9kZSIgaW4gZ3JhcGggJXMgLSBpZ25vcmVkCgBkaW1lbgBtYWtlU3BsaW5lOiBmYWlsZWQgdG8gbWFrZSBzcGxpbmUgZWRnZSAoJXMsJXMpCgBzcGxpbmUgJXMgJXMKAGIgPT0gbgBuZWF0b3NwbGluZXMuYwBtYWtlX2JhcnJpZXJzAHRoZSBib3VuZGluZyBib3hlcyBvZiBzb21lIG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHNvbWUgbm9kZXMgd2l0aCBtYXJnaW4gKCUuMDJmLCUuMDJmKSB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBwb2x5bGluZXMAbGluZSBzZWdtZW50cwBvcnRob2dvbmFsIGxpbmVzAENyZWF0aW5nIGVkZ2VzIHVzaW5nICVzCgBwb2x5bGluZSAlcyAlcwoAbWRzTW9kZWw6IGRlbHRhID0gJWYKAFNldHRpbmcgdXAgc3RyZXNzIGZ1bmN0aW9uAFNvbHZpbmcgbW9kZWw6IAAKZmluYWwgZSA9ICVmICVkIGl0ZXJhdGlvbnMgJS4yZiBzZWMKAERhbXBpbmcAZGVmYXVsdGRpc3QAIGluICVzIC0gc2V0dGluZyB0byAlLjAyZgoAYmFkIGVkZ2UgbGVuICIlcyIAU2V0dGluZyBpbml0aWFsIHBvc2l0aW9ucwoAc3RhcnQ9JXMgbm90IHN1cHBvcnRlZCB3aXRoIG1vZGU9c2VsZiAtIGlnbm9yZWQKAFNldHRpbmcgdXAgc3ByaW5nIG1vZGVsOiAAJS4yZiBzZWMKAApmaW5hbCBlID0gJWYAIQAgJWQlcyBpdGVyYXRpb25zICUuMmYgc2VjCgBNYXguIGl0ZXJhdGlvbnMgKCVkKSByZWFjaGVkIG9uIGdyYXBoICVzCgAlcyAlLjNmCgAlLjNmIABORF9oZWFwaW5kZXgodikgPCAwAHN0dWZmLmMAbmVhdG9fZW5xdWV1ZQBDYWxjdWxhdGluZyBzaG9ydGVzdCBwYXRoczogAHNwZWNpZmllZCByb290IG5vZGUgIiVzIiB3YXMgbm90IGZvdW5kLgBVc2luZyBkZWZhdWx0IGNhbGN1bGF0aW9uIGZvciByb290IG5vZGUKAHJlcG9zaXRpb24gJXMKACVzIDogJWYgJWYKACVzIDogJWYgJWYgJWYgJWYKACAgAEdyYXBoICVzIGhhcyBhcnJheSBwYWNraW5nIHdpdGggdXNlciB2YWx1ZXMgYnV0IG5vICJzb3J0diIgYXR0cmlidXRlcyBhcmUgZGVmaW5lZC4AbGVuAHBpbgBXYXJuaW5nOiBub2RlICVzLCBwb3NpdGlvbiAlcywgZXhwZWN0ZWQgdHdvIGZsb2F0cwoAY29vcmRzAGRpbQBsYXlvdXQgJXMKAGVuZCAlcwoAaWR4ID09IHN6AGxheW91dC5jAGV4cGFuZENsdXN0ZXIAaSA9PSBkZWcAZ2V0RWRnZUxpc3QAX2RnXyVkAGRlcml2ZSBncmFwaCAlcyBvZiAlcwoAbm9kZSAiJXMiIGlzIGNvbnRhaW5lZCBpbiB0d28gbm9uLWNvbXBhcmFibGUgY2x1c3RlcnMgIiVzIiBhbmQgIiVzIgoAX3BvcnRfJXNfJXNfJXNfJWxkAF9wb3J0XyVzXyglZClfKCVkKV8lbGQAJWxmLCVsZiwlbGYsJWxmJWMAZ3JhcGggJXMsIGNvb3JkICVzLCBleHBlY3RlZCBmb3VyIGRvdWJsZXMKAHNwbGluZXMgYW5kIGNsdXN0ZXIgZWRnZXMgbm90IHN1cHBvcnRlZCAtIHVzaW5nIGxpbmUgc2VnbWVudHMKAG1heGl0ZXIASwBUMABmZHAgZG9lcyBub3Qgc3VwcG9ydCBzdGFydD1zZWxmIC0gaWdub3JpbmcKAHhMYXlvdXQgADk6cHJpc20AdHJpZXMgPSAlZCwgbW9kZSA9ICVzCgBkZXJpdmVkAGluZm8Abm9ybWFsaXplAG92ZXJsYXAAT3ZlcmxhcCB2YWx1ZSAiJXMiIHVuc3VwcG9ydGVkIC0gaWdub3JlZAoAVW5yZWNvZ25pemVkIG92ZXJsYXAgdmFsdWUgIiVzIiAtIHVzaW5nIGZhbHNlCgBWb3Jvbm9pAG92ZXJsYXA6ICVzIHZhbHVlICVkIHNjYWxpbmcgJS4wNGYKAG92ZXJsYXBfc2NhbGluZwB2b3Jvbm9pAHNjYWxpbmcAdnBzYwBpcHNlcABvc2NhbGUAb2xkIHNjYWxpbmcAc2NhbGV4eQB4IGFuZCB5IHNjYWxpbmcAb3J0aG8Ab3J0aG9nb25hbCBjb25zdHJhaW50cwBvcnRob195eABvcnRob3h5AHh5IG9ydGhvZ29uYWwgY29uc3RyYWludHMAb3J0aG95eAB5eCBvcnRob2dvbmFsIGNvbnN0cmFpbnRzAHBvcnRobwBwc2V1ZG8tb3J0aG9nb25hbCBjb25zdHJhaW50cwBwb3J0aG9feXgAcG9ydGhveHkAeHkgcHNldWRvLW9ydGhvZ29uYWwgY29uc3RyYWludHMAcG9ydGhveXgAeXggcHNldWRvLW9ydGhvZ29uYWwgY29uc3RyYWludHMAcHJpc20AQWRqdXN0aW5nICVzIHVzaW5nICVzCgBVbmhhbmRsZWQgYWRqdXN0IG9wdGlvbiAlcwoATnVtYmVyIG9mIGl0ZXJhdGlvbnMgPSAlZAoATnVtYmVyIG9mIGluY3JlYXNlcyA9ICVkCgBvdmVybGFwIFslZF0gOiAlZAoAdm9yb19tYXJnaW4Ac2VwAGVzZXAATm9kZSBzZXBhcmF0aW9uOiBhZGQ9JWQgKCVmLCVmKQoAJWYsJWYAc2NhbGUgPSAoJS4wM2YsJS4wM2YpCgBFZGdlIHNlcGFyYXRpb246IGFkZD0lZCAoJWYsJWYpCgBDYWxjdWxhdGluZyBjaXJjdWl0IG1vZGVsAGNvbmp1Z2F0ZV9ncmFkaWVudDogdW5leHBlY3RlZCBsZW5ndGggMCB2ZWN0b3IKAENhbGN1bGF0aW5nIHN1YnNldCBtb2RlbABncmFwaCBpcyBkaXNjb25uZWN0ZWQuIEhlbmNlLCB0aGUgY2lyY3VpdCBtb2RlbAoAaXMgdW5kZWZpbmVkLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBDYWxjdWxhdGluZyBNRFMgbW9kZWwAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHMAOiAlLjJmIHNlYwoAU2V0dGluZyBpbml0aWFsIHBvc2l0aW9ucwA6ICUuMmYgc2VjAGNnAGRlbHRhIDw9IDB4RkZGRgBjb25zdHJhaW50LmMAbWtOQ29uc3RyYWludEcAdmcAY29tcHJlc3MgJWcgCgBzY2FsZSBieSAlZywlZyAKAGJlc3Rjb3N0IDwgSFVHRV9WQUwAY29tcHV0ZVNjYWxlWFkAdHJ5aW5nIHRvIGRlbGV0ZSBhIG5vbi1saW5lCgAKaW50ZXJzZWN0aW9uIGF0ICUuM2YgJS4zZgoAc2VnIyVkIDogKCUuM2YsICUuM2YpICglLjNmLCAlLjNmKQoAbWFrZUFkZFBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAbWFrZVBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAeCE9TlVMTABzbWFydF9pbmlfeC5jAElNRFNfZ2l2ZW5fZGltAGlsbC1jb25kaXRpb25lZAByb290ID0gJXMgbWF4IHN0ZXBzIHRvIHJvb3QgPSAlZAoAdHdvcGk6IHVzZSBvZiB3ZWlnaHQ9MCBjcmVhdGVzIGRpc2Nvbm5lY3RlZCBjb21wb25lbnQuCgBSYW5rIHNlcGFyYXRpb24gPSAAJS4wM2xmIABhcmVhAGluc2V0ACVzIGNvb3JkICUuNWcgJS41ZyBodCAlZiB3aWR0aCAlZgoAJS4wM2YAcmVjICVmICVmICVmICVmCgAlZiAtICVmICVmICVmICVmID0gJWYgKCVmICVmICVmICVmKQoAdHJ5aW5nIHRvIGFkZCB0byByZWN0IHslZiArLy0gJWYsICVmICsvLSAlZn0KAHRvdGFsIGFkZGVkIHNvIGZhciA9ICVkCgBhZGRpbmcgJWQgaXRlbXMsIHRvdGFsIGFyZWEgPSAlZiwgdyA9ICVmLCBhcmVhL3c9JWYKAGNvbXBvdW5kRWRnZXM6IGNvdWxkIG5vdCBjb25zdHJ1Y3Qgb2JzdGFjbGVzIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAGNvbXBvdW5kRWRnZXM6IG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHBhY2sgdmFsdWUgJWQgaXMgc21hbGxlciB0aGFuIGVzZXAgKCUuMDNmLCUuMDNmKQoAc2VwIHZhbHVlICglLjAzZiwlLjAzZikgaXMgc21hbGxlciB0aGFuIGVzZXAgKCUuMDNmLCUuMDNmKQoAY2Mlc18lZABjYyVzKyVkAGNfY250ID09IDAAY29tcC5jAGZpbmRDQ29tcABncmlkKCVkLCVkKTogJXMKAG9uZWJsb2NrAG1pbmRpc3QAYXJ0aWN1bGF0aW9uX3BvcwByb290AHJvb3QgPSAlcwoAX2Jsb2NrXyVkAHMtPnN6ID4gMABibG9ja3RyZWUuYwBwb3AAYWN0dWFsAG5vZGVsaXN0LmMAaW5zZXJ0Tm9kZWxpc3QAX3NwYW5fJWQAX2Nsb25lXyVkAGlwAGRlZ2xpc3QuYwByZW1vdmVEZWdsaXN0AEVycm9yAFdhcm5pbmcAJXM6IAB1c2Vyb3V0OiBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5CgBfQUdfc3RyZGF0YQBfQUdfZGF0YWRpY3QAYWdkaWN0b2Y6IHVua25vd24ga2luZCAlZAoAJWMlbGQAbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQBhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABfQUdfcGVuZGluZwBhZ3JlY29yZF9jYWxsYmFjayBvZiBhIGJhZCBvYmplY3QAcGVuZCBkaWN0b2YgYSBiYWQgb2JqZWN0AG1vdmUgdG8gZnJvbnQgbG9jayBpbmNvbnNpc3RlbmN5AFxcAGZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kACVzCgBmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkAGZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3cAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIGFhZ19nZXRfbmV4dF9idWZmZXIoKQBpbnB1dABzeW50YXggYW1iaWd1aXR5IC0gYmFkbHkgZGVsaW1pdGVkIG51bWJlciAnACcgaW4gbGluZSAlZCBvZiAAIHNwbGl0cyBpbnRvIHR3byB0b2tlbnMKACVzAGxpbmUAJWQgJTFbIl0lbgBvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gYWFnX2NyZWF0ZV9idWZmZXIoKQBvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gYWFnZW5zdXJlX2J1ZmZlcl9zdGFjaygpADogACBpbiBsaW5lICVkACBuZWFyICcAIHNjYW5uaW5nIGEgcXVvdGVkIHN0cmluZyAobWlzc2luZyBlbmRxdW90ZT8gbG9uZ2VyIHRoYW4gJWQ/KQAKU3RyaW5nIHN0YXJ0aW5nOiIAIHNjYW5uaW5nIGEgSFRNTCBzdHJpbmcgKG1pc3NpbmcgJz4nPyBiYWQgbmVzdGluZz8gbG9uZ2VyIHRoYW4gJWQ/KQAKU3RyaW5nIHN0YXJ0aW5nOjwAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmbGV4IHNjYW5uZXIgcHVzaC1iYWNrIG92ZXJmbG93ACIiAHN0cmljdABsaW5lbGVuZ3RoADsKACBba2V5PQBdACBbACwKAD0AXyVsZF9TVVNQRUNUAGRpAHN0cmljdCAAewoAXTsKABLu7hQJA+7+7u7uAe7u7gHu7gr+7hMZFe4TAe7u7u4LEe7u7u7u7u7u7gHu7hYJAQEdDxfu7hoXG+7uHO7u7u4BGfvu7u4B7hDu7h7u7u7uAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcRAgICAgICAgICAgICAhIQAhMCAhYCAgICAgICAgICAgICAgICAgICAgICAgICAhQCFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICDgIPAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgECAwQFBgcICQoLDA0LAwQFDwcDDA0GDA0ODA0aFRYAAQADBw4GDwgMDRITKhARCRAvMBEyFxMNFBIuEhRBEzITLEAqQhksQkYiDA0OIw8JEBEKEBHJEBEtRUb8AQb2Dwf2JAIQES8wNk1OKCY7PCo2MTk9Py86QNhEMD4lN0M1Sys4SUwAAwkAAAABDgILDAgjJCU2Oz0ADRASGxYcEicyIhczHjwGBzUFDxEUGCkAEykAAAAAADcVKB0eACEmNB8wPhksABsAIBoqACs6Li8AMTg5LQACAgEAAwMBAAEAAQEBAAIBAQACAgMBAQAABQABAwEDBQMBAQEBAgABAAQCAAIBAQMCAQADAgEAAQEAAQEBAwAYGRkZGhscHB0dHh4fHyAgISEiIiMkJCYnJSUoKCkpKSoqKysrLCwtLS4vLzAxMTIzNDY1Nzc3ODg4OTk6Ou7u/+7u7u7u7h8g7gDv7u7uDO7u7ggN7u7u+O7u7u7u7vXu/wMIBCEFCxITJxQVFikyQRcYGRosMzRCR0gbShwdLh5PHyBrZXkAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAJXM6JXMAQ291bGQgbm90IG9wZW4gIiVzIiBmb3Igd3JpdGluZyA6ICVzCgBObyBsaWJ6IHN1cHBvcnQuCgAuJWQAbm9uYW1lLmd2AGd2d3JpdGVfbm9feiBwcm9ibGVtICVkCgBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlCgBObyBsaWJ6IHN1cHBvcnQKAGd2cHJpbnRmOiAlcwoALTk5OTk5OTk5OTk5OTk5OS45OQBncmFwaHZpegAyLjQwLjEAMjAxNjEyMjUuMDMwNAByZW5kZXIAbGF5b3V0AGRldmljZQBsb2FkaW1hZ2UAZHluYW1pYyBsb2FkaW5nIG5vdCBhdmFpbGFibGUKAFVzaW5nICVzOiAlczolcwoAZ3Z1c2Vyc2hhcGUuYwBndnVzZXJzaGFwZV9maW5kAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAEZpbGVuYW1lICIlcyIgaXMgdW5zYWZlCgAlcyB3aGlsZSBvcGVuaW5nICVzCgB1cy0+ZgBndnVzZXJzaGFwZV9vcGVuACIlcyIgd2FzIG5vdCBmb3VuZCBhcyBhIGZpbGUgb3IgYXMgYSBzaGFwZSBsaWJyYXJ5IG1lbWJlcgoAL01lZGlhQm94AChbYS16XVthLXpBLVpdKik9IihbXiJdKikiAGNhbm5vdCBjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiAlcwAlbGYlMnMAcHQAdmlld0JveAAlbGYgJWxmICVsZiAlbGYAaW4AcHgAcGMAIgBjbQBtbQAlJUJvdW5kaW5nQm94OgAB0NHS09TV1tfY2QA8c3ZnAFdFQlAAd2VicAAobGliKQCJUE5HDQoaCgBwbmcAJSFQUy1BZG9iZS0AQk0AYm1wAEdJRjgAZ2lmAP/Y/+AAanBlZwAlUERGLQBwZGYAxdDTxgBlcHMAPD94bWwAeG1sAFJJRkYAcmlmZgAAAAEAAGljbwBMYXlvdXQgdHlwZTogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoAJWQgJWQgJWQgJWQATGF5b3V0IHdhcyBub3QgZG9uZQoAZmFpbHVyZSBtYWxsb2MnaW5nIGZvciByZXN1bHQgc3RyaW5nAGdjOiBPdXQgb2YgbWVtb3J5CgBfY2NfAG9yaWcAb3AAY2NvbXBzLmMAbWFwQ2x1c3QAY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AKCU0bGQpICU3bGQgbm9kZXMgJTdsZCBlZGdlcwoAICAgICAgICU3ZCBub2RlcyAlN2QgZWRnZXMgJTdsZCBjb21wb25lbnRzICVzCgBkZwBFcnJvcjogbm9kZSAiJXMiIGJlbG9uZ3MgdG8gdHdvIG5vbi1uZXN0ZWQgY2x1c3RlcnMgIiVzIiBhbmQgIiVzIgoAc29ydHYAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBhcnJheSBwYWNraW5nOiAlcyAlZCByb3dzICVkIGNvbHVtbnMKAGJiWyVzXSAlLjVnICUuNWcgJS41ZyAlLjVnCgBzdGVwIHNpemUgPSAlZAoAcG9zWyVkXSAlZCAlZAoAY2MgKCVkIGNlbGxzKSBhdCAoJWQsJWQpICglZCwlZCkKAGNjICglZCBjZWxscykgYXQgKCVkLCVkKQoAJXMgbm8uIGNlbGxzICVkIFcgJWQgSCAlZAoAICAlZCAlZCBjZWxsCgBsaWJwYWNrOiBkaXNjID0gJWYgKCA8IDApCgBQYWNraW5nOiBjb21wdXRlIGdyaWQgc2l6ZQoAYSAlZiBiICVmIGMgJWYgZCAlZiByICVmCgByb290ICVkICglZikgJWQgKCVmKQoAIHIxICVmIHIyICVmCgBwaW5mbwBwYWNrLmMAZ2V0UGFja0luZm8AICBtYXJnaW4gJWQKAHBhY2ttb2RlAHBhcnNlUGFja01vZGVJbmZvAGFycmF5AGFzcGVjdAAlZgBwYWNrIGluZm86CgAgIG1vZGUgICAlcwoAICBhc3BlY3QgJWYKACAgc2l6ZSAgICVkCgAgIGZsYWdzICAlZAoAdW5kZWZpbmVkAHBhY2sAQXJyb3cgdHlwZSAiJXMiIHVua25vd24gLSBpZ25vcmluZwoAbm9ybWFsAGNyb3cAdGVlAGRvdABpbnYAdmVlAHBlbgBtcHR5AGN1cnZlAGljdXJ2ZQBsAGhhbGYAaW52ZW1wdHkAX2JhY2tncm91bmQAX2RyYXdfAENvdWxkIG5vdCBwYXJzZSAiX2JhY2tncm91bmQiIGF0dHJpYnV0ZSBpbiBncmFwaCAlcwoAICAiJXMiCgBubyBtZW1vcnkgZnJvbSB6bWFsbG9jKCkKAG9iagBlbWl0LmMAcG9wX29ial9zdGF0ZQBjbHVzdAAlbGQAcGFnZSVkLCVkXwBUb3RhbCBzaXplID4gMSBpbiAiJXMiIGNvbG9yIHNwZWMgAElsbGVnYWwgbGVuZ3RoIHZhbHVlIGluICIlcyIgY29sb3IgYXR0cmlidXRlIABsbnJjb2xvcnNjaGVtZQBlbWl0X2VkZ2VfbGFiZWwAJXMtJXMAZm9yd2FyZABiYWNrACAtPiAAIC0tIABpbiBlZGdlICVzJXMlcwoAbGFiZWxhbGlnbmVkAGVkZ2VocmVmAGVkZ2VVUkwAbGFiZWxocmVmAGxhYmVsVVJMAHRhaWxocmVmAHRhaWxVUkwAaGVhZGhyZWYAaGVhZFVSTABlZGdldGFyZ2V0AGxhYmVsdGFyZ2V0AHRhaWx0YXJnZXQAaGVhZHRhcmdldABlZGdldG9vbHRpcABsYWJlbHRvb2x0aXAAdGFpbHRvb2x0aXAAaGVhZHRvb2x0aXAAAW5lc3Rpbmcgbm90IGFsbG93ZWQgaW4gc3R5bGU6ICVzCgB1bm1hdGNoZWQgJyknIGluIHN0eWxlOiAlcwoAdHJ1bmNhdGluZyBzdHlsZSAnJXMnCgB1bm1hdGNoZWQgJygnIGluIHN0eWxlOiAlcwoAYWxsAGluIGNsdXN0ZXIgJXMKAE1vcmUgdGhhbiAyIGNvbG9ycyBzcGVjaWZpZWQgZm9yIGEgZ3JhZGllbnQgLSBpZ25vcmluZyByZW1haW5pbmcKAGdyYWRpZW50IHBlbiBjb2xvcnMgbm90IHlldCBzdXBwb3J0ZWQuCgBJbWFnZXMgdW5zdXBwb3J0ZWQgaW4gImJhY2tncm91bmQiIGF0dHJpYnV0ZQoAbGF5ZXJzIG5vdCBzdXBwb3J0ZWQgaW4gJXMgb3V0cHV0CgBMYXlvdXQgd2FzIG5vdCBkb25lLiAgTWlzc2luZyBsYXlvdXQgcGx1Z2lucz8gCgBndlJlbmRlckpvYnMgJXM6ICUuMmYgc2Vjcy4KAGxheW91dCB3YXMgbm90IGRvbmUKAHJlbmRlcmVyIGZvciAlcyBpcyB1bmF2YWlsYWJsZQoAcGFnZWRpcj0lcyBpZ25vcmVkCgB2aWV3cG9ydAAlbGYsJWxmLCVsZiwnJVteJ10nACVsZiwlbGYsJWxmLCVbXixdJXMAJWxmLCVsZiwlbGYsJWxmLCVsZgBvdXRwdXRvcmRlcgBvZGVzZmlyc3QAZGdlc2ZpcnN0AGxheWVycwBsYXllcnNlbGVjdABUaGUgbGF5ZXJzZWxlY3QgYXR0cmlidXRlICIlcyIgZG9lcyBub3QgbWF0Y2ggYW55IGxheWVyIHNwZWNpZmVkIGJ5IHRoZSBsYXllcnMgYXR0cmlidXRlIC0gaWdub3JlZC4KAGxheWVyc2VwADoJIABsYXllcmxpc3RzZXAALABUaGUgY2hhcmFjdGVyICclYycgYXBwZWFycyBpbiBib3RoIHRoZSBsYXllcnNlcCBhbmQgbGF5ZXJsaXN0c2VwIGF0dHJpYnV0ZXMgLSBsYXllcmxpc3RzZXAgaWdub3JlZC4KAHBhZABCTABwYWdlZGlyAHNvbGlkAABzZXRsaW5ld2lkdGgAMQAAc3BsLT5zaXplID4gMABpbml0X3NwbGluZXNfYmIAYnouc2l6ZSA+IDAAYmV6aWVyX2JiAGJ6LnNpemUgJSAzID09IDEAJWxmAGZvbnRwYXRoAERPVEZPTlRQQVRIAEdERk9OVFBBVEgAaW1hZ2VwYXRoAHF1YW50dW0AcmFua2RpcgBMUgBCVABSTABub2Rlc2VwAHJhbmtzZXAAZXF1YWxseQBzaG93Ym94ZXMAZm9udG5hbWVzAHNpemUAcGFnZQBjZW50ZXIAcm90YXRlAG9yaWVudGF0aW9uAGxhbmRzY2FwZQBjbHVzdGVycmFuawBjb25jZW50cmF0ZQBkcGkAcmVzb2x1dGlvbgBvcmRlcmluZwBmaWxsY29sb3IAZm9udHNpemUAZm9udG5hbWUAZm9udGNvbG9yAHhsYWJlbABwZW53aWR0aABwZXJpcGhlcmllcwBza2V3AGRpc3RvcnRpb24Abm9qdXN0aWZ5AGxheWVyAGdyb3VwAGNvbW1lbnQAdmVydGljZXMAegB3ZWlnaHQAbGFiZWxmbG9hdABkaXIAYXJyb3doZWFkAGFycm93dGFpbABoZWFkbGFiZWwAdGFpbGxhYmVsAGxhYmVsZm9udHNpemUAbGFiZWxmb250bmFtZQBsYWJlbGZvbnRjb2xvcgBsYWJlbGRpc3RhbmNlAGxhYmVsYW5nbGUAbWlubGVuAGRlY29yYXRlAGFycm93c2l6ZQBjb25zdHJhaW50AHRhaWxjbGlwAGhlYWRjbGlwAGxhYmVsanVzdABsb2NhbABnbG9iYWwAJWxmLCVsZiVjACVsZiVjAHJhdGlvAGF1dG8AY29tcHJlc3MAZXhwYW5kAGZpbGwAZ2QAcHMAc3ZnAGNoYXJzZXQAdXRmLTgAbGF0aW4tMQBsYXRpbjEAbDEASVNPLTg4NTktMQBJU09fODg1OS0xAElTTzg4NTktMQBJU08tSVItMTAwAGJpZy01AGJpZzUAdXRmOABVbnN1cHBvcnRlZCBjaGFyc2V0ICIlcyIgLSBhc3N1bWluZyB1dGYtOAoAVW5zdXBwb3J0ZWQgY2hhcnNldCB2YWx1ZSAlZAoAVVRGLTgAQklHLTUAaW4gbGFiZWwgb2YgZ3JhcGggJXMKAGluIGxhYmVsIG9mIG5vZGUgJXMKAGluIGxhYmVsIG9mIGVkZ2UgJXMgJXMgJXMKAGtpbmQgPT0gTFRfTk9ORQBsYWJlbHMuYwBtYWtlX2xhYmVsAFxMAFxHAFxFAFxIAFxUACYjMTM7ACYjMTA7ACZxdW90OwAmIzE2MDsAJmFtcDsAJmd0OwAmIzM5OwAmIzQ1OwAmbHQ7ACVzICVkIG5vZGVzICVkIGVkZ2VzIG1heGl0ZXI9JWQgYmFsYW5jZT0lZAoAbmV0d29yayBzaW1wbGV4OiAAJWQgACVzJWQgbm9kZXMgJWQgZWRnZXMgJWQgaXRlciAlLjJmIHNlYwoAdXBkYXRlOiBtaXNtYXRjaGVkIGxjYSBpbiB0cmVldXBkYXRlcwoAVHJlZV9lZGdlLnNpemUgPT0gTl9ub2RlcyAtIDEAbnMuYwBmZWFzaWJsZV90cmVlACFUUkVFX0VER0UoZSkAbWVyZ2VfdHJlZXMAKHIwLT5oZWFwX2luZGV4ID4gLTEpIHx8IChyMS0+aGVhcF9pbmRleCA+IC0xKQBTVHNldFVuaW9uAHItPmhlYXBfaW5kZXggPj0gMABhZGRfdHJlZV9lZGdlOiBtaXNzaW5nIHRyZWUgZWRnZQoAYWRkX3RyZWVfZWRnZTogZW1wdHkgb3V0ZWRnZSBsaXN0CgBhZGRfdHJlZV9lZGdlOiBlbXB0eSBpbmVkZ2UgbGlzdAoAdHJvdWJsZSBpbiBpbml0X3JhbmsKAAklcyAlZAoAc2VhcmNoc2l6ZQBncmFwaCAAIABub2RlIABzdG9wCgAlLjVnAHBvcwByZWN0cwB4bHAAbHAAaGVhZF9scAB0YWlsX2xwAGx3aWR0aABsaGVpZ2h0AGJiACUuNWcsJS41ZywlLjVnACwlLjVnACUuNWcsJS41ZwBzYW1wbGVwb2ludHMAJS41ZyAlLjVnAHMsJS41ZywlLjVnIABlLCUuNWcsJS41ZyAAJS41ZywlLjVnLCUuNWcsJS41ZwAlLjJmACUuNWcsJS41ZywlLjVnLCUuNWcgAC9wYXRoYm94IHsKICAgIC9YIGV4Y2ggbmVnICUuNWcgc3ViIGRlZgogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC94IGV4Y2ggbmVnICUuNWcgc3ViIGRlZgogICAgL3kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgoAL3BhdGhib3ggewogICAgL1kgZXhjaCAlLjVnIHN1YiBkZWYKICAgIC9YIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveSBleGNoICUuNWcgc3ViIGRlZgogICAgL3ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIG5ld3BhdGggeCB5IG1vdmV0bwogICAgWCB5IGxpbmV0bwogICAgWCBZIGxpbmV0bwogICAgeCBZIGxpbmV0bwogICAgY2xvc2VwYXRoIHN0cm9rZQogfSBkZWYKL2RiZ3N0YXJ0IHsgZ3NhdmUgJS41ZyAlLjVnIHRyYW5zbGF0ZSB9IGRlZgovYXJyb3dsZW5ndGggMTAgZGVmCi9hcnJvd3dpZHRoIGFycm93bGVuZ3RoIDIgZGl2IGRlZgovYXJyb3doZWFkIHsKICAgIGdzYXZlCiAgICByb3RhdGUKICAgIGN1cnJlbnRwb2ludAogICAgbmV3cGF0aAogICAgbW92ZXRvCiAgICBhcnJvd2xlbmd0aCBhcnJvd3dpZHRoIDIgZGl2IHJsaW5ldG8KICAgIDAgYXJyb3d3aWR0aCBuZWcgcmxpbmV0bwogICAgY2xvc2VwYXRoIGZpbGwKICAgIGdyZXN0b3JlCn0gYmluZCBkZWYKL21ha2VhcnJvdyB7CiAgICBjdXJyZW50cG9pbnQgZXhjaCBwb3Agc3ViIGV4Y2ggY3VycmVudHBvaW50IHBvcCBzdWIgYXRhbgogICAgYXJyb3doZWFkCn0gYmluZCBkZWYKL3BvaW50IHsgICAgbmV3cGF0aCAgICAyIDAgMzYwIGFyYyBmaWxsfSBkZWYvbWFrZXZlYyB7CiAgICAvWSBleGNoIGRlZgogICAgL1ggZXhjaCBkZWYKICAgIC95IGV4Y2ggZGVmCiAgICAveCBleGNoIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIFkgbGluZXRvIHN0cm9rZQogICAgWCBZIG1vdmV0bwogICAgeCB5IG1ha2VhcnJvdwp9IGRlZgoAbG9zdCAlcyAlcyBlZGdlCgBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIGxhYmVsICVzAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggdGFpbCBsYWJlbCAlcwBubyBwb3NpdGlvbiBmb3IgZWRnZSB3aXRoIGhlYWQgbGFiZWwgJXMAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCB4bGFiZWwgJXMAZm9yY2VsYWJlbHMAJWQgb3V0IG9mICVkIGxhYmVscyBwb3NpdGlvbmVkLgoAJWQgb3V0IG9mICVkIGV4dGVyaW9yIGxhYmVscyBwb3NpdGlvbmVkLgoAJWQgb2JqcyAlZCB4bGFiZWxzIGZvcmNlPSVkIGJiPSglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKQoAb2JqZWN0cwoAIFslZF0gKCUuMDJmLCUuMDJmKSAoJS4wMmYsJS4wMmYpICVwICIlcyIKAHhsYWJlbHMKACBbJWRdICVwIHNldCAlZCAoJS4wMmYsJS4wMmYpICglLjAyZiwlLjAyZikgJXMKAHNoYXBlZmlsZSBub3Qgc2V0IG9yIG5vdCBmb3VuZCBmb3IgZXBzZiBub2RlICVzCgBjb3VsZG4ndCBvcGVuIGVwc2YgZmlsZSAlcwoAJSUlJUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAByZWFkAEJvdW5kaW5nQm94IG5vdCBmb3VuZCBpbiBlcHNmIGZpbGUgJXMKAGNhbid0IGZpbmQgbGlicmFyeSBmaWxlICVzCgBjYW4ndCBvcGVuIGxpYnJhcnkgZmlsZSAlcwoARU9GAEJFR0lOAEVORABUUkFJTEVSAC91c2VyX3NoYXBlXyVkIHsKACUlQmVnaW5Eb2N1bWVudDoKACUlRW5kRG9jdW1lbnQKAH0gYmluZCBkZWYKAFVURi04IGlucHV0IHVzZXMgbm9uLUxhdGluMSBjaGFyYWN0ZXJzIHdoaWNoIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgUG9zdFNjcmlwdCBkcml2ZXIKAGNhbm5vdCByZS1hbGxvY2F0ZSBwcwoAcm91dGVzcGxpbmVzaW5pdDogY2Fubm90IGFsbG9jYXRlIHBzCgByb3V0ZXNwbGluZXM6ICVkIGVkZ2VzLCAlZCBib3hlcyAlLjJmIHNlYwoAaW4gcm91dGVzcGxpbmVzLCBjYW5ub3QgZmluZCBOT1JNQUwgZWRnZQoAaW4gcm91dGVzcGxpbmVzLCBpbGxlZ2FsIHZhbHVlcyBvZiBwcmV2ICVkIGFuZCBuZXh0ICVkLCBsaW5lICVkCgBpbiByb3V0ZXNwbGluZXMsIGVkZ2UgaXMgYSBsb29wIGF0ICVzCgBpbiByb3V0ZXNwbGluZXMsIFBzaG9ydGVzdHBhdGggZmFpbGVkCgBpbiByb3V0ZXNwbGluZXMsIFByb3V0ZXNwbGluZSBmYWlsZWQKAFVuYWJsZSB0byByZWNsYWltIGJveCBzcGFjZSBpbiBzcGxpbmUgcm91dGluZyBmb3IgZWRnZSAiJXMiIC0+ICIlcyIuIFNvbWV0aGluZyBpcyBwcm9iYWJseSBzZXJpb3VzbHkgd3JvbmcuCgBpbiBjaGVja3BhdGgsIGJveCAwIGhhcyBMTCBjb29yZCA+IFVSIGNvb3JkCgBpbiBjaGVja3BhdGgsIGJveCAlZCBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAaW4gY2hlY2twYXRoLCBib3hlcyAlZCBhbmQgJWQgZG9uJ3QgdG91Y2gKAGluIGNoZWNrcGF0aCwgc3RhcnQgcG9ydCBub3QgaW4gZmlyc3QgYm94CgBpbiBjaGVja3BhdGgsIGVuZCBwb3J0IG5vdCBpbiBsYXN0IGJveAoAJWQgYm94ZXM6CgAlZCAoJS41ZywgJS41ZyksICglLjVnLCAlLjVnKQoAY29uc3RyYWluZWQAbm90IGNvbnN0cmFpbmVkAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgBzaWRlcyA9PSA0AHNoYXBlcy5jAHJvdW5kX2Nvcm5lcnMAYmFkIGxhYmVsIGZvcm1hdCAlcwoAXE4AbWFyZ2luACVsZiwlbGYAcmVndWxhcgBjdXN0b20Ac2hhcGVmaWxlADxuaWw+AE5vIG9yIGltcHJvcGVyIHNoYXBlZmlsZT0iJXMiIGZvciBub2RlICIlcyIKAE5vIG9yIGltcHJvcGVyIGltYWdlPSIlcyIgZm9yIG5vZGUgIiVzIgoAbGFiZWxsb2MAbm9kZSAnJXMnLCBncmFwaCAnJXMnIHNpemUgdG9vIHNtYWxsIGZvciBsYWJlbAoAZXBzZgB1c2luZyAlcyBmb3IgdW5rbm93biBzaGFwZSAlcwoAcG9seWdvbgBvdmFsAGNpcmNsZQBwb2ludABlZ2cAdHJpYW5nbGUAcGxhaW50ZXh0AHBsYWluAGRpYW1vbmQAdHJhcGV6aXVtAHBhcmFsbGVsb2dyYW0AaG91c2UAcGVudGFnb24AaGV4YWdvbgBzZXB0YWdvbgBvY3RhZ29uAG5vdGUAdGFiAGZvbGRlcgBib3gzZABjb21wb25lbnQAY3lsaW5kZXIAcmVjdAByZWN0YW5nbGUAc3F1YXJlAGRvdWJsZWNpcmNsZQBkb3VibGVvY3RhZ29uAHRyaXBsZW9jdGFnb24AaW52dHJpYW5nbGUAaW52dHJhcGV6aXVtAGludmhvdXNlAHVuZGVybGluZQBNZGlhbW9uZABNc3F1YXJlAE1jaXJjbGUAcHJvbW90ZXIAY2RzAHRlcm1pbmF0b3IAdXRyAGluc3VsYXRvcgByaWJvc2l0ZQBybmFzdGFiAHByb3RlYXNlc2l0ZQBwcm90ZWluc3RhYgBwcmltZXJzaXRlAHJlc3RyaWN0aW9uc2l0ZQBmaXZlcG92ZXJoYW5nAHRocmVlcG92ZXJoYW5nAG5vdmVyaGFuZwBhc3NlbWJseQBzaWduYXR1cmUAcnByb21vdGVyAGxhcnJvdwByYXJyb3cAbHByb21vdGVyAHJlY29yZABNcmVjb3JkAHN0YXIAIzgwODA4MAAjZmNmY2ZjACMzMDMwMzAAI2U4ZThlOAAjZTBlMGUwACNmMGYwZjAAIzEwMTAxMAAjZjhmOGY4AGluIG5vZGUgJXMKAHJvdW5kZWQAZGlhZ29uYWxzAHJhZGlhbABzdHJpcGVkAHdlZGdlZABfAG5vZGUgJXMsIHBvcnQgJXMsIHVucmVjb2duaXplZCBjb21wYXNzIHBvaW50ICclcycgLSBpZ25vcmVkCgBub2RlICVzLCBwb3J0ICVzIHVucmVjb2duaXplZAoAJS41ZyAlLjVnIHRyYW5zbGF0ZSBuZXdwYXRoIHVzZXJfc2hhcGVfJWQKAGludmlzAABmaWxsZWQAAHMAZQB3AHNwbGluZXMuYwBiZWdpbnBhdGgAUC0+ZW5kLnRoZXRhIDwgMiAqIE1fUEkAZW5kcGF0aABtYWtlU2VsZkVkZ2UAZ2V0c3BsaW5lcG9pbnRzOiBubyBzcGxpbmUgcG9pbnRzIGF2YWlsYWJsZSBmb3IgZWRnZSAoJXMsJXMpCgBwb2x5bGluZU1pZHBvaW50AHNwYW4tPmZvbnQAdGV4dHNwYW4uYwB0ZXh0c3Bhbl9zaXplAGZvbnQtPm5hbWUAZm9udG5hbWU6ICIlcyIgcmVzb2x2ZWQgdG86ICVzCgBmb250bmFtZTogdW5hYmxlIHRvIHJlc29sdmUgIiVzIgoAY291cgBhcmlhbABoZWx2ZXRpY2EAW2ludGVybmFsIHRpbWVzXQBbaW50ZXJuYWwgY291cmllcl0AW2ludGVybmFsIGFyaWFsXQBBdmFudEdhcmRlLUJvb2sAVVJXIEdvdGhpYyBMAGJvb2sAc2Fucy1TZXJpZgBBdmFudEdhcmRlLUJvb2tPYmxpcXVlAG9ibGlxdWUAaXRhbGljAEF2YW50R2FyZGUtRGVtaQBkZW1pAEF2YW50R2FyZGUtRGVtaU9ibGlxdWUAQm9va21hbi1EZW1pAFVSVyBCb29rbWFuIEwAc2VyaWYAQm9va21hbi1EZW1pSXRhbGljAEJvb2ttYW4tTGlnaHQAbGlnaHQAQm9va21hbi1MaWdodEl0YWxpYwBDb3VyaWVyAG1vbm9zcGFjZQBDb3VyaWVyLUJvbGQAQ291cmllci1Cb2xkT2JsaXF1ZQBDb3VyaWVyLU9ibGlxdWUASGVsdmV0aWNhAEhlbHZldGljYS1Cb2xkAEhlbHZldGljYS1Cb2xkT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93AGNvbmRlbnNlZABIZWx2ZXRpY2EtTmFycm93LUJvbGQASGVsdmV0aWNhLU5hcnJvdy1Cb2xkT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93LU9ibGlxdWUASGVsdmV0aWNhLU9ibGlxdWUATmV3Q2VudHVyeVNjaGxiay1Cb2xkAENlbnR1cnkgU2Nob29sYm9vayBMAE5ld0NlbnR1cnlTY2hsYmstQm9sZEl0YWxpYwBOZXdDZW50dXJ5U2NobGJrLUl0YWxpYwBOZXdDZW50dXJ5U2NobGJrLVJvbWFuAHJvbWFuAFBhbGF0aW5vLUJvbGQAUGFsYXRpbm8gTGlub3R5cGUAUGFsYXRpbm8tQm9sZEl0YWxpYwBQYWxhdGluby1JdGFsaWMAUGFsYXRpbm8tUm9tYW4AU3ltYm9sAGZhbnRhc3kAVGltZXMtQm9sZABUaW1lcwBUaW1lcy1Cb2xkSXRhbGljAFRpbWVzLUl0YWxpYwBaYXBmQ2hhbmNlcnktTWVkaXVtSXRhbGljAFVSVyBDaGFuY2VyeSBMAG1lZGl1bQBaYXBmRGluZ2JhdHMARGluZ2JhdHMAaW5wdXRzY2FsZQBubwB0cnVlAHllcwB1dGlscy5jAHUgPT0gVUZfZmluZCh1KQBVRl9zZXRuYW1lAAFmaWxlIGxvYWRpbmcgaXMgZGlzYWJsZWQgYmVjYXVzZSB0aGUgZW52aXJvbm1lbnQgY29udGFpbnMgU0VSVkVSX05BTUU9IiVzIgphbmQgdGhlIEdWX0ZJTEVfUEFUSCB2YXJpYWJsZSBpcyB1bnNldCBvciBlbXB0eS4KAFBhdGggcHJvdmlkZWQgdG8gZmlsZTogIiVzIiBoYXMgYmVlbiBpZ25vcmVkIGJlY2F1c2UgZmlsZXMgYXJlIG9ubHkgcGVybWl0dGVkIHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBkaXJlY3RvcmllcyBpbiAiJXMiIHdoZW4gcnVubmluZyBpbiBhbiBodHRwIHNlcnZlci4KACVzJXMlcwAvADoAZWxsaXBzZQBUaW1lcy1Sb21hbgBjbHVzdGVyAF9fY2x1c3Rlcm5vZGVzAGNsdXN0ZXIgY3ljbGUgJXMgLS0gJXMgbm90IHN1cHBvcnRlZAoAdGFpbCBjbHVzdGVyICVzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAGhlYWQgY2x1c3RlciAlcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgB0YWlsIG5vZGUgJXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAaGVhZCBub2RlICVzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAF9fAGxhYmVsAHNoYXBlAGJveABUd28gY2x1c3RlcnMgbmFtZWQgJXMgLSB0aGUgc2Vjb25kIHdpbGwgYmUgaWdub3JlZAoAbWFwTgBBRWxpZwBBYWN1dGUAQWNpcmMAQWdyYXZlAEFscGhhAEFyaW5nAEF0aWxkZQBBdW1sAEJldGEAQ2NlZGlsAENoaQBEYWdnZXIARGVsdGEARVRIAEVhY3V0ZQBFY2lyYwBFZ3JhdmUARXBzaWxvbgBFdGEARXVtbABHYW1tYQBJYWN1dGUASWNpcmMASWdyYXZlAElvdGEASXVtbABLYXBwYQBMYW1iZGEATXUATnRpbGRlAE51AE9FbGlnAE9hY3V0ZQBPY2lyYwBPZ3JhdmUAT21lZ2EAT21pY3JvbgBPc2xhc2gAT3RpbGRlAE91bWwAUGhpAFBpAFByaW1lAFBzaQBSaG8AU2Nhcm9uAFNpZ21hAFRIT1JOAFRhdQBUaGV0YQBVYWN1dGUAVWNpcmMAVWdyYXZlAFVwc2lsb24AVXVtbABYaQBZYWN1dGUAWXVtbABaZXRhAGFhY3V0ZQBhY2lyYwBhY3V0ZQBhZWxpZwBhZ3JhdmUAYWxlZnN5bQBhbHBoYQBhbXAAYW5kAGFuZwBhcmluZwBhc3ltcABhdGlsZGUAYXVtbABiZHF1bwBiZXRhAGJydmJhcgBidWxsAGNhcABjY2VkaWwAY2VkaWwAY2VudABjaGkAY2lyYwBjbHVicwBjb25nAGNvcHkAY3JhcnIAY3VwAGN1cnJlbgBkQXJyAGRhZ2dlcgBkYXJyAGRlZwBkZWx0YQBkaWFtcwBkaXZpZGUAZWFjdXRlAGVjaXJjAGVncmF2ZQBlbXB0eQBlbXNwAGVuc3AAZXBzaWxvbgBlcXVpdgBldGEAZXRoAGV1bWwAZXVybwBleGlzdABmbm9mAGZvcmFsbABmcmFjMTIAZnJhYzE0AGZyYWMzNABmcmFzbABnYW1tYQBnZQBndABoQXJyAGhhcnIAaGVhcnRzAGhlbGxpcABpYWN1dGUAaWNpcmMAaWV4Y2wAaWdyYXZlAGltYWdlAGluZmluAGludABpb3RhAGlxdWVzdABpc2luAGl1bWwAa2FwcGEAbEFycgBsYW1iZGEAbGFuZwBsYXF1bwBsYXJyAGxjZWlsAGxkcXVvAGxlAGxmbG9vcgBsb3dhc3QAbG96AGxybQBsc2FxdW8AbHNxdW8AbHQAbWFjcgBtZGFzaABtaWNybwBtaWRkb3QAbXUAbmFibGEAbmJzcABuZGFzaABuZQBuaQBub3QAbm90aW4AbnN1YgBudGlsZGUAbnUAb2FjdXRlAG9jaXJjAG9lbGlnAG9ncmF2ZQBvbGluZQBvbWVnYQBvbWljcm9uAG9wbHVzAG9yAG9yZGYAb3JkbQBvc2xhc2gAb3RpbGRlAG90aW1lcwBvdW1sAHBhcmEAcGFydABwZXJtaWwAcGVycABwaGkAcGkAcGl2AHBsdXNtbgBwb3VuZABwcmltZQBwcm9kAHByb3AAcHNpAHF1b3QAckFycgByYWRpYwByYW5nAHJhcXVvAHJhcnIAcmNlaWwAcmRxdW8AcmVhbAByZWcAcmZsb29yAHJobwBybG0AcnNhcXVvAHJzcXVvAHNicXVvAHNjYXJvbgBzZG90AHNlY3QAc2h5AHNpZ21hAHNpZ21hZgBzaW0Ac3BhZGVzAHN1YgBzdWJlAHN1bQBzdXAAc3VwMQBzdXAyAHN1cDMAc3VwZQBzemxpZwB0YXUAdGhlcmU0AHRoZXRhAHRoZXRhc3ltAHRoaW5zcAB0aG9ybgB0aWxkZQB0aW1lcwB0cmFkZQB1QXJyAHVhY3V0ZQB1YXJyAHVjaXJjAHVncmF2ZQB1bWwAdXBzaWgAdXBzaWxvbgB1dW1sAHdlaWVycAB4aQB5YWN1dGUAeWVuAHl1bWwAemV0YQB6d2oAenduagBVVEY4IGNvZGVzID4gNCBieXRlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgKGdyYXBoICVzKSAtIHRyZWF0ZWQgYXMgTGF0aW4tMS4gUGVyaGFwcyAiLUdjaGFyc2V0PWxhdGluMSIgaXMgbmVlZGVkPwoASW52YWxpZCAlZC1ieXRlIFVURjggZm91bmQgaW4gaW5wdXQgb2YgZ3JhcGggJXMgLSB0cmVhdGVkIGFzIExhdGluLTEuIFBlcmhhcHMgIi1HY2hhcnNldD1sYXRpbjEiIGlzIG5lZWRlZD8KAGJ6LnNpemUAb3ZlcmxhcF9iZXppZXIAdXJ2ZWQAb21wb3VuZABhbHNlAGluZQBvbmUAbwBydGhvAG9seWxpbmUAcGxpbmUAcnVlAGVzAFVua25vd24gInNwbGluZXMiIHZhbHVlOiAiJXMiIC0gaWdub3JlZAoAc3BsaW5lcwBvZGIAT3J0aG9nb25hbCBlZGdlcyBkbyBub3QgY3VycmVudGx5IGhhbmRsZSBlZGdlIGxhYmVscy4gVHJ5IHVzaW5nIHhsYWJlbHMuCgBvcnRobyAlcyAlcwoAY2hhbmkAb3J0aG8uYwBjaGFuU2VhcmNoAGNwACUlIVBTLUFkb2JlLTIuMAolJSUlQm91bmRpbmdCb3g6IChhdGVuZCkKL3BvaW50IHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgbmV3cGF0aAogIFggWSAzIDAgMzYwIGFyYyBmaWxsCn0gZGVmCi9jZWxsIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIHN0cm9rZQp9IGRlZgovbm9kZSB7CiAvdSBleGNoIGRlZgogL3IgZXhjaCBkZWYKIC9kIGV4Y2ggZGVmCiAvbCBleGNoIGRlZgogbmV3cGF0aCBsIGQgbW92ZXRvCiByIGQgbGluZXRvIHIgdSBsaW5ldG8gbCB1IGxpbmV0bwogY2xvc2VwYXRoIGZpbGwKfSBkZWYKCgAlZCAlZCB0cmFuc2xhdGUKADAuOCAwLjggMC44IHNldHJnYmNvbG9yCgBzaG93cGFnZQolJSUlVHJhaWxlcgolJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkCgBuZXdwYXRoICVkICVkIG1vdmV0bwoAJWQgJWQgbGluZXRvCgAlZCAlZCBsaW5ldG8gc3Ryb2tlCgBjaGFubmVsICVkICglZiwlZikKACAtPgoAICAgICAAKCglZiwlZiksKCVmLCVmKSkgJXMgJXMAQl9SSUdIVABCX0RPV04AQl9MRUZUAEJfVVAAQl9OT0RFAHNlZwBuZXh0X3NlZwBkZWNpZGVfcG9pbnQAaW5jb21wYXJhYmxlIHNlZ21lbnRzICEhIC0tIEFib3J0aW5nCgBzMS0+Y29tbV9jb29yZD09czItPmNvbW1fY29vcmQAaXNfcGFyYWxsZWwAZ3JhcGggRyB7CgAgbm9kZVtzaGFwZT1wb2ludF0KACAgJWQgW3Bvcz0iJWQsJWQiXQoAICAlZCAtLSAlZFtsZW49IiVmIl0KAH0KAGNvbG9yICVzACVzIGlzIG5vdCBhIGtub3duIGNvbG9yLgoAZXJyb3IgaW4gY29seGxhdGUoKQoAc29saWQAaW52aXNpYmxlAGJvbGQAc2V0bGluZXdpZHRoAGZpbGxlZAB1bmZpbGxlZAB0YXBlcmVkAGd2cmVuZGVyX3NldF9zdHlsZTogdW5zdXBwb3J0ZWQgc3R5bGUgJXMgLSBpZ25vcmluZwoAZ3ZyZW5kZXIuYwBndnJlbmRlcl91c2Vyc2hhcGUAbmFtZQBuYW1lWzBdAGJvdGgAam9iAGd2bG9hZGltYWdlLmMAZ3Zsb2FkaW1hZ2UAdXMAdXMtPm5hbWUAdXMtPm5hbWVbMF0ATm8gbG9hZGltYWdlIHBsdWdpbiBmb3IgIiVzIgoAUQBMZWZ0AEtQX0xlZnQAUmlnaHQAS1BfUmlnaHQAVXAAS1BfVXAARG93bgBLUF9Eb3duAHBsdXMAS1BfQWRkAG1pbnVzAEtQX1N1YnRyYWN0AEYAZWRnZQB0YWlscG9ydABoZWFkcG9ydABrZXkAVVJMAG5vZGUAZGlncmFwaABncmFwaABzdWJncmFwaABfTFRYX2xpYnJhcnkAdGV4dGxheW91dABvYmpwLT5sYmwAeGxhYmVscy5jAHhsYWRqdXN0AHhsaW50ZXJzZWN0aW9ucwBscCAhPSBjbHAAZ2V0aW50cnN4aQBvYmpwMS0+c3oueCA9PSAwICYmIG9ianAxLT5zei55ID09IDAAbGJsZW5jbG9zaW5nAHZwAHhsaGR4dW5sb2FkAHNpemU9PWZyZWVkAHJlY3QuYm91bmRhcnlbMl0gPCBJTlRfTUFYAG9ianBscG1rcwByZWN0LmJvdW5kYXJ5WzNdIDwgSU5UX01BWABvdXQgb2YgbWVtb3J5CgAjJTJ4JTJ4JTJ4JTJ4ACVsZiVsZiVsZgAvYWNjZW50My8xAC9hY2NlbnQzLzIAL2FjY2VudDMvMwAvYWNjZW50NC8xAC9hY2NlbnQ0LzIAL2FjY2VudDQvMwAvYWNjZW50NC80AC9hY2NlbnQ1LzEAL2FjY2VudDUvMgAvYWNjZW50NS8zAC9hY2NlbnQ1LzQAL2FjY2VudDUvNQAvYWNjZW50Ni8xAC9hY2NlbnQ2LzIAL2FjY2VudDYvMwAvYWNjZW50Ni80AC9hY2NlbnQ2LzUAL2FjY2VudDYvNgAvYWNjZW50Ny8xAC9hY2NlbnQ3LzIAL2FjY2VudDcvMwAvYWNjZW50Ny80AC9hY2NlbnQ3LzUAL2FjY2VudDcvNgAvYWNjZW50Ny83AC9hY2NlbnQ4LzEAL2FjY2VudDgvMgAvYWNjZW50OC8zAC9hY2NlbnQ4LzQAL2FjY2VudDgvNQAvYWNjZW50OC82AC9hY2NlbnQ4LzcAL2FjY2VudDgvOAAvYmx1ZXMzLzEAL2JsdWVzMy8yAC9ibHVlczMvMwAvYmx1ZXM0LzEAL2JsdWVzNC8yAC9ibHVlczQvMwAvYmx1ZXM0LzQAL2JsdWVzNS8xAC9ibHVlczUvMgAvYmx1ZXM1LzMAL2JsdWVzNS80AC9ibHVlczUvNQAvYmx1ZXM2LzEAL2JsdWVzNi8yAC9ibHVlczYvMwAvYmx1ZXM2LzQAL2JsdWVzNi81AC9ibHVlczYvNgAvYmx1ZXM3LzEAL2JsdWVzNy8yAC9ibHVlczcvMwAvYmx1ZXM3LzQAL2JsdWVzNy81AC9ibHVlczcvNgAvYmx1ZXM3LzcAL2JsdWVzOC8xAC9ibHVlczgvMgAvYmx1ZXM4LzMAL2JsdWVzOC80AC9ibHVlczgvNQAvYmx1ZXM4LzYAL2JsdWVzOC83AC9ibHVlczgvOAAvYmx1ZXM5LzEAL2JsdWVzOS8yAC9ibHVlczkvMwAvYmx1ZXM5LzQAL2JsdWVzOS81AC9ibHVlczkvNgAvYmx1ZXM5LzcAL2JsdWVzOS84AC9ibHVlczkvOQAvYnJiZzEwLzEAL2JyYmcxMC8xMAAvYnJiZzEwLzIAL2JyYmcxMC8zAC9icmJnMTAvNAAvYnJiZzEwLzUAL2JyYmcxMC82AC9icmJnMTAvNwAvYnJiZzEwLzgAL2JyYmcxMC85AC9icmJnMTEvMQAvYnJiZzExLzEwAC9icmJnMTEvMTEAL2JyYmcxMS8yAC9icmJnMTEvMwAvYnJiZzExLzQAL2JyYmcxMS81AC9icmJnMTEvNgAvYnJiZzExLzcAL2JyYmcxMS84AC9icmJnMTEvOQAvYnJiZzMvMQAvYnJiZzMvMgAvYnJiZzMvMwAvYnJiZzQvMQAvYnJiZzQvMgAvYnJiZzQvMwAvYnJiZzQvNAAvYnJiZzUvMQAvYnJiZzUvMgAvYnJiZzUvMwAvYnJiZzUvNAAvYnJiZzUvNQAvYnJiZzYvMQAvYnJiZzYvMgAvYnJiZzYvMwAvYnJiZzYvNAAvYnJiZzYvNQAvYnJiZzYvNgAvYnJiZzcvMQAvYnJiZzcvMgAvYnJiZzcvMwAvYnJiZzcvNAAvYnJiZzcvNQAvYnJiZzcvNgAvYnJiZzcvNwAvYnJiZzgvMQAvYnJiZzgvMgAvYnJiZzgvMwAvYnJiZzgvNAAvYnJiZzgvNQAvYnJiZzgvNgAvYnJiZzgvNwAvYnJiZzgvOAAvYnJiZzkvMQAvYnJiZzkvMgAvYnJiZzkvMwAvYnJiZzkvNAAvYnJiZzkvNQAvYnJiZzkvNgAvYnJiZzkvNwAvYnJiZzkvOAAvYnJiZzkvOQAvYnVnbjMvMQAvYnVnbjMvMgAvYnVnbjMvMwAvYnVnbjQvMQAvYnVnbjQvMgAvYnVnbjQvMwAvYnVnbjQvNAAvYnVnbjUvMQAvYnVnbjUvMgAvYnVnbjUvMwAvYnVnbjUvNAAvYnVnbjUvNQAvYnVnbjYvMQAvYnVnbjYvMgAvYnVnbjYvMwAvYnVnbjYvNAAvYnVnbjYvNQAvYnVnbjYvNgAvYnVnbjcvMQAvYnVnbjcvMgAvYnVnbjcvMwAvYnVnbjcvNAAvYnVnbjcvNQAvYnVnbjcvNgAvYnVnbjcvNwAvYnVnbjgvMQAvYnVnbjgvMgAvYnVnbjgvMwAvYnVnbjgvNAAvYnVnbjgvNQAvYnVnbjgvNgAvYnVnbjgvNwAvYnVnbjgvOAAvYnVnbjkvMQAvYnVnbjkvMgAvYnVnbjkvMwAvYnVnbjkvNAAvYnVnbjkvNQAvYnVnbjkvNgAvYnVnbjkvNwAvYnVnbjkvOAAvYnVnbjkvOQAvYnVwdTMvMQAvYnVwdTMvMgAvYnVwdTMvMwAvYnVwdTQvMQAvYnVwdTQvMgAvYnVwdTQvMwAvYnVwdTQvNAAvYnVwdTUvMQAvYnVwdTUvMgAvYnVwdTUvMwAvYnVwdTUvNAAvYnVwdTUvNQAvYnVwdTYvMQAvYnVwdTYvMgAvYnVwdTYvMwAvYnVwdTYvNAAvYnVwdTYvNQAvYnVwdTYvNgAvYnVwdTcvMQAvYnVwdTcvMgAvYnVwdTcvMwAvYnVwdTcvNAAvYnVwdTcvNQAvYnVwdTcvNgAvYnVwdTcvNwAvYnVwdTgvMQAvYnVwdTgvMgAvYnVwdTgvMwAvYnVwdTgvNAAvYnVwdTgvNQAvYnVwdTgvNgAvYnVwdTgvNwAvYnVwdTgvOAAvYnVwdTkvMQAvYnVwdTkvMgAvYnVwdTkvMwAvYnVwdTkvNAAvYnVwdTkvNQAvYnVwdTkvNgAvYnVwdTkvNwAvYnVwdTkvOAAvYnVwdTkvOQAvZGFyazIzLzEAL2RhcmsyMy8yAC9kYXJrMjMvMwAvZGFyazI0LzEAL2RhcmsyNC8yAC9kYXJrMjQvMwAvZGFyazI0LzQAL2RhcmsyNS8xAC9kYXJrMjUvMgAvZGFyazI1LzMAL2RhcmsyNS80AC9kYXJrMjUvNQAvZGFyazI2LzEAL2RhcmsyNi8yAC9kYXJrMjYvMwAvZGFyazI2LzQAL2RhcmsyNi81AC9kYXJrMjYvNgAvZGFyazI3LzEAL2RhcmsyNy8yAC9kYXJrMjcvMwAvZGFyazI3LzQAL2RhcmsyNy81AC9kYXJrMjcvNgAvZGFyazI3LzcAL2RhcmsyOC8xAC9kYXJrMjgvMgAvZGFyazI4LzMAL2RhcmsyOC80AC9kYXJrMjgvNQAvZGFyazI4LzYAL2RhcmsyOC83AC9kYXJrMjgvOAAvZ25idTMvMQAvZ25idTMvMgAvZ25idTMvMwAvZ25idTQvMQAvZ25idTQvMgAvZ25idTQvMwAvZ25idTQvNAAvZ25idTUvMQAvZ25idTUvMgAvZ25idTUvMwAvZ25idTUvNAAvZ25idTUvNQAvZ25idTYvMQAvZ25idTYvMgAvZ25idTYvMwAvZ25idTYvNAAvZ25idTYvNQAvZ25idTYvNgAvZ25idTcvMQAvZ25idTcvMgAvZ25idTcvMwAvZ25idTcvNAAvZ25idTcvNQAvZ25idTcvNgAvZ25idTcvNwAvZ25idTgvMQAvZ25idTgvMgAvZ25idTgvMwAvZ25idTgvNAAvZ25idTgvNQAvZ25idTgvNgAvZ25idTgvNwAvZ25idTgvOAAvZ25idTkvMQAvZ25idTkvMgAvZ25idTkvMwAvZ25idTkvNAAvZ25idTkvNQAvZ25idTkvNgAvZ25idTkvNwAvZ25idTkvOAAvZ25idTkvOQAvZ3JlZW5zMy8xAC9ncmVlbnMzLzIAL2dyZWVuczMvMwAvZ3JlZW5zNC8xAC9ncmVlbnM0LzIAL2dyZWVuczQvMwAvZ3JlZW5zNC80AC9ncmVlbnM1LzEAL2dyZWVuczUvMgAvZ3JlZW5zNS8zAC9ncmVlbnM1LzQAL2dyZWVuczUvNQAvZ3JlZW5zNi8xAC9ncmVlbnM2LzIAL2dyZWVuczYvMwAvZ3JlZW5zNi80AC9ncmVlbnM2LzUAL2dyZWVuczYvNgAvZ3JlZW5zNy8xAC9ncmVlbnM3LzIAL2dyZWVuczcvMwAvZ3JlZW5zNy80AC9ncmVlbnM3LzUAL2dyZWVuczcvNgAvZ3JlZW5zNy83AC9ncmVlbnM4LzEAL2dyZWVuczgvMgAvZ3JlZW5zOC8zAC9ncmVlbnM4LzQAL2dyZWVuczgvNQAvZ3JlZW5zOC82AC9ncmVlbnM4LzcAL2dyZWVuczgvOAAvZ3JlZW5zOS8xAC9ncmVlbnM5LzIAL2dyZWVuczkvMwAvZ3JlZW5zOS80AC9ncmVlbnM5LzUAL2dyZWVuczkvNgAvZ3JlZW5zOS83AC9ncmVlbnM5LzgAL2dyZWVuczkvOQAvZ3JleXMzLzEAL2dyZXlzMy8yAC9ncmV5czMvMwAvZ3JleXM0LzEAL2dyZXlzNC8yAC9ncmV5czQvMwAvZ3JleXM0LzQAL2dyZXlzNS8xAC9ncmV5czUvMgAvZ3JleXM1LzMAL2dyZXlzNS80AC9ncmV5czUvNQAvZ3JleXM2LzEAL2dyZXlzNi8yAC9ncmV5czYvMwAvZ3JleXM2LzQAL2dyZXlzNi81AC9ncmV5czYvNgAvZ3JleXM3LzEAL2dyZXlzNy8yAC9ncmV5czcvMwAvZ3JleXM3LzQAL2dyZXlzNy81AC9ncmV5czcvNgAvZ3JleXM3LzcAL2dyZXlzOC8xAC9ncmV5czgvMgAvZ3JleXM4LzMAL2dyZXlzOC80AC9ncmV5czgvNQAvZ3JleXM4LzYAL2dyZXlzOC83AC9ncmV5czgvOAAvZ3JleXM5LzEAL2dyZXlzOS8yAC9ncmV5czkvMwAvZ3JleXM5LzQAL2dyZXlzOS81AC9ncmV5czkvNgAvZ3JleXM5LzcAL2dyZXlzOS84AC9ncmV5czkvOQAvb3JhbmdlczMvMQAvb3JhbmdlczMvMgAvb3JhbmdlczMvMwAvb3JhbmdlczQvMQAvb3JhbmdlczQvMgAvb3JhbmdlczQvMwAvb3JhbmdlczQvNAAvb3JhbmdlczUvMQAvb3JhbmdlczUvMgAvb3JhbmdlczUvMwAvb3JhbmdlczUvNAAvb3JhbmdlczUvNQAvb3JhbmdlczYvMQAvb3JhbmdlczYvMgAvb3JhbmdlczYvMwAvb3JhbmdlczYvNAAvb3JhbmdlczYvNQAvb3JhbmdlczYvNgAvb3JhbmdlczcvMQAvb3JhbmdlczcvMgAvb3JhbmdlczcvMwAvb3JhbmdlczcvNAAvb3JhbmdlczcvNQAvb3JhbmdlczcvNgAvb3JhbmdlczcvNwAvb3JhbmdlczgvMQAvb3JhbmdlczgvMgAvb3JhbmdlczgvMwAvb3JhbmdlczgvNAAvb3JhbmdlczgvNQAvb3JhbmdlczgvNgAvb3JhbmdlczgvNwAvb3JhbmdlczgvOAAvb3JhbmdlczkvMQAvb3JhbmdlczkvMgAvb3JhbmdlczkvMwAvb3JhbmdlczkvNAAvb3JhbmdlczkvNQAvb3JhbmdlczkvNgAvb3JhbmdlczkvNwAvb3JhbmdlczkvOAAvb3JhbmdlczkvOQAvb3JyZDMvMQAvb3JyZDMvMgAvb3JyZDMvMwAvb3JyZDQvMQAvb3JyZDQvMgAvb3JyZDQvMwAvb3JyZDQvNAAvb3JyZDUvMQAvb3JyZDUvMgAvb3JyZDUvMwAvb3JyZDUvNAAvb3JyZDUvNQAvb3JyZDYvMQAvb3JyZDYvMgAvb3JyZDYvMwAvb3JyZDYvNAAvb3JyZDYvNQAvb3JyZDYvNgAvb3JyZDcvMQAvb3JyZDcvMgAvb3JyZDcvMwAvb3JyZDcvNAAvb3JyZDcvNQAvb3JyZDcvNgAvb3JyZDcvNwAvb3JyZDgvMQAvb3JyZDgvMgAvb3JyZDgvMwAvb3JyZDgvNAAvb3JyZDgvNQAvb3JyZDgvNgAvb3JyZDgvNwAvb3JyZDgvOAAvb3JyZDkvMQAvb3JyZDkvMgAvb3JyZDkvMwAvb3JyZDkvNAAvb3JyZDkvNQAvb3JyZDkvNgAvb3JyZDkvNwAvb3JyZDkvOAAvb3JyZDkvOQAvcGFpcmVkMTAvMQAvcGFpcmVkMTAvMTAAL3BhaXJlZDEwLzIAL3BhaXJlZDEwLzMAL3BhaXJlZDEwLzQAL3BhaXJlZDEwLzUAL3BhaXJlZDEwLzYAL3BhaXJlZDEwLzcAL3BhaXJlZDEwLzgAL3BhaXJlZDEwLzkAL3BhaXJlZDExLzEAL3BhaXJlZDExLzEwAC9wYWlyZWQxMS8xMQAvcGFpcmVkMTEvMgAvcGFpcmVkMTEvMwAvcGFpcmVkMTEvNAAvcGFpcmVkMTEvNQAvcGFpcmVkMTEvNgAvcGFpcmVkMTEvNwAvcGFpcmVkMTEvOAAvcGFpcmVkMTEvOQAvcGFpcmVkMTIvMQAvcGFpcmVkMTIvMTAAL3BhaXJlZDEyLzExAC9wYWlyZWQxMi8xMgAvcGFpcmVkMTIvMgAvcGFpcmVkMTIvMwAvcGFpcmVkMTIvNAAvcGFpcmVkMTIvNQAvcGFpcmVkMTIvNgAvcGFpcmVkMTIvNwAvcGFpcmVkMTIvOAAvcGFpcmVkMTIvOQAvcGFpcmVkMy8xAC9wYWlyZWQzLzIAL3BhaXJlZDMvMwAvcGFpcmVkNC8xAC9wYWlyZWQ0LzIAL3BhaXJlZDQvMwAvcGFpcmVkNC80AC9wYWlyZWQ1LzEAL3BhaXJlZDUvMgAvcGFpcmVkNS8zAC9wYWlyZWQ1LzQAL3BhaXJlZDUvNQAvcGFpcmVkNi8xAC9wYWlyZWQ2LzIAL3BhaXJlZDYvMwAvcGFpcmVkNi80AC9wYWlyZWQ2LzUAL3BhaXJlZDYvNgAvcGFpcmVkNy8xAC9wYWlyZWQ3LzIAL3BhaXJlZDcvMwAvcGFpcmVkNy80AC9wYWlyZWQ3LzUAL3BhaXJlZDcvNgAvcGFpcmVkNy83AC9wYWlyZWQ4LzEAL3BhaXJlZDgvMgAvcGFpcmVkOC8zAC9wYWlyZWQ4LzQAL3BhaXJlZDgvNQAvcGFpcmVkOC82AC9wYWlyZWQ4LzcAL3BhaXJlZDgvOAAvcGFpcmVkOS8xAC9wYWlyZWQ5LzIAL3BhaXJlZDkvMwAvcGFpcmVkOS80AC9wYWlyZWQ5LzUAL3BhaXJlZDkvNgAvcGFpcmVkOS83AC9wYWlyZWQ5LzgAL3BhaXJlZDkvOQAvcGFzdGVsMTMvMQAvcGFzdGVsMTMvMgAvcGFzdGVsMTMvMwAvcGFzdGVsMTQvMQAvcGFzdGVsMTQvMgAvcGFzdGVsMTQvMwAvcGFzdGVsMTQvNAAvcGFzdGVsMTUvMQAvcGFzdGVsMTUvMgAvcGFzdGVsMTUvMwAvcGFzdGVsMTUvNAAvcGFzdGVsMTUvNQAvcGFzdGVsMTYvMQAvcGFzdGVsMTYvMgAvcGFzdGVsMTYvMwAvcGFzdGVsMTYvNAAvcGFzdGVsMTYvNQAvcGFzdGVsMTYvNgAvcGFzdGVsMTcvMQAvcGFzdGVsMTcvMgAvcGFzdGVsMTcvMwAvcGFzdGVsMTcvNAAvcGFzdGVsMTcvNQAvcGFzdGVsMTcvNgAvcGFzdGVsMTcvNwAvcGFzdGVsMTgvMQAvcGFzdGVsMTgvMgAvcGFzdGVsMTgvMwAvcGFzdGVsMTgvNAAvcGFzdGVsMTgvNQAvcGFzdGVsMTgvNgAvcGFzdGVsMTgvNwAvcGFzdGVsMTgvOAAvcGFzdGVsMTkvMQAvcGFzdGVsMTkvMgAvcGFzdGVsMTkvMwAvcGFzdGVsMTkvNAAvcGFzdGVsMTkvNQAvcGFzdGVsMTkvNgAvcGFzdGVsMTkvNwAvcGFzdGVsMTkvOAAvcGFzdGVsMTkvOQAvcGFzdGVsMjMvMQAvcGFzdGVsMjMvMgAvcGFzdGVsMjMvMwAvcGFzdGVsMjQvMQAvcGFzdGVsMjQvMgAvcGFzdGVsMjQvMwAvcGFzdGVsMjQvNAAvcGFzdGVsMjUvMQAvcGFzdGVsMjUvMgAvcGFzdGVsMjUvMwAvcGFzdGVsMjUvNAAvcGFzdGVsMjUvNQAvcGFzdGVsMjYvMQAvcGFzdGVsMjYvMgAvcGFzdGVsMjYvMwAvcGFzdGVsMjYvNAAvcGFzdGVsMjYvNQAvcGFzdGVsMjYvNgAvcGFzdGVsMjcvMQAvcGFzdGVsMjcvMgAvcGFzdGVsMjcvMwAvcGFzdGVsMjcvNAAvcGFzdGVsMjcvNQAvcGFzdGVsMjcvNgAvcGFzdGVsMjcvNwAvcGFzdGVsMjgvMQAvcGFzdGVsMjgvMgAvcGFzdGVsMjgvMwAvcGFzdGVsMjgvNAAvcGFzdGVsMjgvNQAvcGFzdGVsMjgvNgAvcGFzdGVsMjgvNwAvcGFzdGVsMjgvOAAvcGl5ZzEwLzEAL3BpeWcxMC8xMAAvcGl5ZzEwLzIAL3BpeWcxMC8zAC9waXlnMTAvNAAvcGl5ZzEwLzUAL3BpeWcxMC82AC9waXlnMTAvNwAvcGl5ZzEwLzgAL3BpeWcxMC85AC9waXlnMTEvMQAvcGl5ZzExLzEwAC9waXlnMTEvMTEAL3BpeWcxMS8yAC9waXlnMTEvMwAvcGl5ZzExLzQAL3BpeWcxMS81AC9waXlnMTEvNgAvcGl5ZzExLzcAL3BpeWcxMS84AC9waXlnMTEvOQAvcGl5ZzMvMQAvcGl5ZzMvMgAvcGl5ZzMvMwAvcGl5ZzQvMQAvcGl5ZzQvMgAvcGl5ZzQvMwAvcGl5ZzQvNAAvcGl5ZzUvMQAvcGl5ZzUvMgAvcGl5ZzUvMwAvcGl5ZzUvNAAvcGl5ZzUvNQAvcGl5ZzYvMQAvcGl5ZzYvMgAvcGl5ZzYvMwAvcGl5ZzYvNAAvcGl5ZzYvNQAvcGl5ZzYvNgAvcGl5ZzcvMQAvcGl5ZzcvMgAvcGl5ZzcvMwAvcGl5ZzcvNAAvcGl5ZzcvNQAvcGl5ZzcvNgAvcGl5ZzcvNwAvcGl5ZzgvMQAvcGl5ZzgvMgAvcGl5ZzgvMwAvcGl5ZzgvNAAvcGl5ZzgvNQAvcGl5ZzgvNgAvcGl5ZzgvNwAvcGl5ZzgvOAAvcGl5ZzkvMQAvcGl5ZzkvMgAvcGl5ZzkvMwAvcGl5ZzkvNAAvcGl5ZzkvNQAvcGl5ZzkvNgAvcGl5ZzkvNwAvcGl5ZzkvOAAvcGl5ZzkvOQAvcHJnbjEwLzEAL3ByZ24xMC8xMAAvcHJnbjEwLzIAL3ByZ24xMC8zAC9wcmduMTAvNAAvcHJnbjEwLzUAL3ByZ24xMC82AC9wcmduMTAvNwAvcHJnbjEwLzgAL3ByZ24xMC85AC9wcmduMTEvMQAvcHJnbjExLzEwAC9wcmduMTEvMTEAL3ByZ24xMS8yAC9wcmduMTEvMwAvcHJnbjExLzQAL3ByZ24xMS81AC9wcmduMTEvNgAvcHJnbjExLzcAL3ByZ24xMS84AC9wcmduMTEvOQAvcHJnbjMvMQAvcHJnbjMvMgAvcHJnbjMvMwAvcHJnbjQvMQAvcHJnbjQvMgAvcHJnbjQvMwAvcHJnbjQvNAAvcHJnbjUvMQAvcHJnbjUvMgAvcHJnbjUvMwAvcHJnbjUvNAAvcHJnbjUvNQAvcHJnbjYvMQAvcHJnbjYvMgAvcHJnbjYvMwAvcHJnbjYvNAAvcHJnbjYvNQAvcHJnbjYvNgAvcHJnbjcvMQAvcHJnbjcvMgAvcHJnbjcvMwAvcHJnbjcvNAAvcHJnbjcvNQAvcHJnbjcvNgAvcHJnbjcvNwAvcHJnbjgvMQAvcHJnbjgvMgAvcHJnbjgvMwAvcHJnbjgvNAAvcHJnbjgvNQAvcHJnbjgvNgAvcHJnbjgvNwAvcHJnbjgvOAAvcHJnbjkvMQAvcHJnbjkvMgAvcHJnbjkvMwAvcHJnbjkvNAAvcHJnbjkvNQAvcHJnbjkvNgAvcHJnbjkvNwAvcHJnbjkvOAAvcHJnbjkvOQAvcHVidTMvMQAvcHVidTMvMgAvcHVidTMvMwAvcHVidTQvMQAvcHVidTQvMgAvcHVidTQvMwAvcHVidTQvNAAvcHVidTUvMQAvcHVidTUvMgAvcHVidTUvMwAvcHVidTUvNAAvcHVidTUvNQAvcHVidTYvMQAvcHVidTYvMgAvcHVidTYvMwAvcHVidTYvNAAvcHVidTYvNQAvcHVidTYvNgAvcHVidTcvMQAvcHVidTcvMgAvcHVidTcvMwAvcHVidTcvNAAvcHVidTcvNQAvcHVidTcvNgAvcHVidTcvNwAvcHVidTgvMQAvcHVidTgvMgAvcHVidTgvMwAvcHVidTgvNAAvcHVidTgvNQAvcHVidTgvNgAvcHVidTgvNwAvcHVidTgvOAAvcHVidTkvMQAvcHVidTkvMgAvcHVidTkvMwAvcHVidTkvNAAvcHVidTkvNQAvcHVidTkvNgAvcHVidTkvNwAvcHVidTkvOAAvcHVidTkvOQAvcHVidWduMy8xAC9wdWJ1Z24zLzIAL3B1YnVnbjMvMwAvcHVidWduNC8xAC9wdWJ1Z240LzIAL3B1YnVnbjQvMwAvcHVidWduNC80AC9wdWJ1Z241LzEAL3B1YnVnbjUvMgAvcHVidWduNS8zAC9wdWJ1Z241LzQAL3B1YnVnbjUvNQAvcHVidWduNi8xAC9wdWJ1Z242LzIAL3B1YnVnbjYvMwAvcHVidWduNi80AC9wdWJ1Z242LzUAL3B1YnVnbjYvNgAvcHVidWduNy8xAC9wdWJ1Z243LzIAL3B1YnVnbjcvMwAvcHVidWduNy80AC9wdWJ1Z243LzUAL3B1YnVnbjcvNgAvcHVidWduNy83AC9wdWJ1Z244LzEAL3B1YnVnbjgvMgAvcHVidWduOC8zAC9wdWJ1Z244LzQAL3B1YnVnbjgvNQAvcHVidWduOC82AC9wdWJ1Z244LzcAL3B1YnVnbjgvOAAvcHVidWduOS8xAC9wdWJ1Z245LzIAL3B1YnVnbjkvMwAvcHVidWduOS80AC9wdWJ1Z245LzUAL3B1YnVnbjkvNgAvcHVidWduOS83AC9wdWJ1Z245LzgAL3B1YnVnbjkvOQAvcHVvcjEwLzEAL3B1b3IxMC8xMAAvcHVvcjEwLzIAL3B1b3IxMC8zAC9wdW9yMTAvNAAvcHVvcjEwLzUAL3B1b3IxMC82AC9wdW9yMTAvNwAvcHVvcjEwLzgAL3B1b3IxMC85AC9wdW9yMTEvMQAvcHVvcjExLzEwAC9wdW9yMTEvMTEAL3B1b3IxMS8yAC9wdW9yMTEvMwAvcHVvcjExLzQAL3B1b3IxMS81AC9wdW9yMTEvNgAvcHVvcjExLzcAL3B1b3IxMS84AC9wdW9yMTEvOQAvcHVvcjMvMQAvcHVvcjMvMgAvcHVvcjMvMwAvcHVvcjQvMQAvcHVvcjQvMgAvcHVvcjQvMwAvcHVvcjQvNAAvcHVvcjUvMQAvcHVvcjUvMgAvcHVvcjUvMwAvcHVvcjUvNAAvcHVvcjUvNQAvcHVvcjYvMQAvcHVvcjYvMgAvcHVvcjYvMwAvcHVvcjYvNAAvcHVvcjYvNQAvcHVvcjYvNgAvcHVvcjcvMQAvcHVvcjcvMgAvcHVvcjcvMwAvcHVvcjcvNAAvcHVvcjcvNQAvcHVvcjcvNgAvcHVvcjcvNwAvcHVvcjgvMQAvcHVvcjgvMgAvcHVvcjgvMwAvcHVvcjgvNAAvcHVvcjgvNQAvcHVvcjgvNgAvcHVvcjgvNwAvcHVvcjgvOAAvcHVvcjkvMQAvcHVvcjkvMgAvcHVvcjkvMwAvcHVvcjkvNAAvcHVvcjkvNQAvcHVvcjkvNgAvcHVvcjkvNwAvcHVvcjkvOAAvcHVvcjkvOQAvcHVyZDMvMQAvcHVyZDMvMgAvcHVyZDMvMwAvcHVyZDQvMQAvcHVyZDQvMgAvcHVyZDQvMwAvcHVyZDQvNAAvcHVyZDUvMQAvcHVyZDUvMgAvcHVyZDUvMwAvcHVyZDUvNAAvcHVyZDUvNQAvcHVyZDYvMQAvcHVyZDYvMgAvcHVyZDYvMwAvcHVyZDYvNAAvcHVyZDYvNQAvcHVyZDYvNgAvcHVyZDcvMQAvcHVyZDcvMgAvcHVyZDcvMwAvcHVyZDcvNAAvcHVyZDcvNQAvcHVyZDcvNgAvcHVyZDcvNwAvcHVyZDgvMQAvcHVyZDgvMgAvcHVyZDgvMwAvcHVyZDgvNAAvcHVyZDgvNQAvcHVyZDgvNgAvcHVyZDgvNwAvcHVyZDgvOAAvcHVyZDkvMQAvcHVyZDkvMgAvcHVyZDkvMwAvcHVyZDkvNAAvcHVyZDkvNQAvcHVyZDkvNgAvcHVyZDkvNwAvcHVyZDkvOAAvcHVyZDkvOQAvcHVycGxlczMvMQAvcHVycGxlczMvMgAvcHVycGxlczMvMwAvcHVycGxlczQvMQAvcHVycGxlczQvMgAvcHVycGxlczQvMwAvcHVycGxlczQvNAAvcHVycGxlczUvMQAvcHVycGxlczUvMgAvcHVycGxlczUvMwAvcHVycGxlczUvNAAvcHVycGxlczUvNQAvcHVycGxlczYvMQAvcHVycGxlczYvMgAvcHVycGxlczYvMwAvcHVycGxlczYvNAAvcHVycGxlczYvNQAvcHVycGxlczYvNgAvcHVycGxlczcvMQAvcHVycGxlczcvMgAvcHVycGxlczcvMwAvcHVycGxlczcvNAAvcHVycGxlczcvNQAvcHVycGxlczcvNgAvcHVycGxlczcvNwAvcHVycGxlczgvMQAvcHVycGxlczgvMgAvcHVycGxlczgvMwAvcHVycGxlczgvNAAvcHVycGxlczgvNQAvcHVycGxlczgvNgAvcHVycGxlczgvNwAvcHVycGxlczgvOAAvcHVycGxlczkvMQAvcHVycGxlczkvMgAvcHVycGxlczkvMwAvcHVycGxlczkvNAAvcHVycGxlczkvNQAvcHVycGxlczkvNgAvcHVycGxlczkvNwAvcHVycGxlczkvOAAvcHVycGxlczkvOQAvcmRidTEwLzEAL3JkYnUxMC8xMAAvcmRidTEwLzIAL3JkYnUxMC8zAC9yZGJ1MTAvNAAvcmRidTEwLzUAL3JkYnUxMC82AC9yZGJ1MTAvNwAvcmRidTEwLzgAL3JkYnUxMC85AC9yZGJ1MTEvMQAvcmRidTExLzEwAC9yZGJ1MTEvMTEAL3JkYnUxMS8yAC9yZGJ1MTEvMwAvcmRidTExLzQAL3JkYnUxMS81AC9yZGJ1MTEvNgAvcmRidTExLzcAL3JkYnUxMS84AC9yZGJ1MTEvOQAvcmRidTMvMQAvcmRidTMvMgAvcmRidTMvMwAvcmRidTQvMQAvcmRidTQvMgAvcmRidTQvMwAvcmRidTQvNAAvcmRidTUvMQAvcmRidTUvMgAvcmRidTUvMwAvcmRidTUvNAAvcmRidTUvNQAvcmRidTYvMQAvcmRidTYvMgAvcmRidTYvMwAvcmRidTYvNAAvcmRidTYvNQAvcmRidTYvNgAvcmRidTcvMQAvcmRidTcvMgAvcmRidTcvMwAvcmRidTcvNAAvcmRidTcvNQAvcmRidTcvNgAvcmRidTcvNwAvcmRidTgvMQAvcmRidTgvMgAvcmRidTgvMwAvcmRidTgvNAAvcmRidTgvNQAvcmRidTgvNgAvcmRidTgvNwAvcmRidTgvOAAvcmRidTkvMQAvcmRidTkvMgAvcmRidTkvMwAvcmRidTkvNAAvcmRidTkvNQAvcmRidTkvNgAvcmRidTkvNwAvcmRidTkvOAAvcmRidTkvOQAvcmRneTEwLzEAL3JkZ3kxMC8xMAAvcmRneTEwLzIAL3JkZ3kxMC8zAC9yZGd5MTAvNAAvcmRneTEwLzUAL3JkZ3kxMC82AC9yZGd5MTAvNwAvcmRneTEwLzgAL3JkZ3kxMC85AC9yZGd5MTEvMQAvcmRneTExLzEwAC9yZGd5MTEvMTEAL3JkZ3kxMS8yAC9yZGd5MTEvMwAvcmRneTExLzQAL3JkZ3kxMS81AC9yZGd5MTEvNgAvcmRneTExLzcAL3JkZ3kxMS84AC9yZGd5MTEvOQAvcmRneTMvMQAvcmRneTMvMgAvcmRneTMvMwAvcmRneTQvMQAvcmRneTQvMgAvcmRneTQvMwAvcmRneTQvNAAvcmRneTUvMQAvcmRneTUvMgAvcmRneTUvMwAvcmRneTUvNAAvcmRneTUvNQAvcmRneTYvMQAvcmRneTYvMgAvcmRneTYvMwAvcmRneTYvNAAvcmRneTYvNQAvcmRneTYvNgAvcmRneTcvMQAvcmRneTcvMgAvcmRneTcvMwAvcmRneTcvNAAvcmRneTcvNQAvcmRneTcvNgAvcmRneTcvNwAvcmRneTgvMQAvcmRneTgvMgAvcmRneTgvMwAvcmRneTgvNAAvcmRneTgvNQAvcmRneTgvNgAvcmRneTgvNwAvcmRneTgvOAAvcmRneTkvMQAvcmRneTkvMgAvcmRneTkvMwAvcmRneTkvNAAvcmRneTkvNQAvcmRneTkvNgAvcmRneTkvNwAvcmRneTkvOAAvcmRneTkvOQAvcmRwdTMvMQAvcmRwdTMvMgAvcmRwdTMvMwAvcmRwdTQvMQAvcmRwdTQvMgAvcmRwdTQvMwAvcmRwdTQvNAAvcmRwdTUvMQAvcmRwdTUvMgAvcmRwdTUvMwAvcmRwdTUvNAAvcmRwdTUvNQAvcmRwdTYvMQAvcmRwdTYvMgAvcmRwdTYvMwAvcmRwdTYvNAAvcmRwdTYvNQAvcmRwdTYvNgAvcmRwdTcvMQAvcmRwdTcvMgAvcmRwdTcvMwAvcmRwdTcvNAAvcmRwdTcvNQAvcmRwdTcvNgAvcmRwdTcvNwAvcmRwdTgvMQAvcmRwdTgvMgAvcmRwdTgvMwAvcmRwdTgvNAAvcmRwdTgvNQAvcmRwdTgvNgAvcmRwdTgvNwAvcmRwdTgvOAAvcmRwdTkvMQAvcmRwdTkvMgAvcmRwdTkvMwAvcmRwdTkvNAAvcmRwdTkvNQAvcmRwdTkvNgAvcmRwdTkvNwAvcmRwdTkvOAAvcmRwdTkvOQAvcmR5bGJ1MTAvMQAvcmR5bGJ1MTAvMTAAL3JkeWxidTEwLzIAL3JkeWxidTEwLzMAL3JkeWxidTEwLzQAL3JkeWxidTEwLzUAL3JkeWxidTEwLzYAL3JkeWxidTEwLzcAL3JkeWxidTEwLzgAL3JkeWxidTEwLzkAL3JkeWxidTExLzEAL3JkeWxidTExLzEwAC9yZHlsYnUxMS8xMQAvcmR5bGJ1MTEvMgAvcmR5bGJ1MTEvMwAvcmR5bGJ1MTEvNAAvcmR5bGJ1MTEvNQAvcmR5bGJ1MTEvNgAvcmR5bGJ1MTEvNwAvcmR5bGJ1MTEvOAAvcmR5bGJ1MTEvOQAvcmR5bGJ1My8xAC9yZHlsYnUzLzIAL3JkeWxidTMvMwAvcmR5bGJ1NC8xAC9yZHlsYnU0LzIAL3JkeWxidTQvMwAvcmR5bGJ1NC80AC9yZHlsYnU1LzEAL3JkeWxidTUvMgAvcmR5bGJ1NS8zAC9yZHlsYnU1LzQAL3JkeWxidTUvNQAvcmR5bGJ1Ni8xAC9yZHlsYnU2LzIAL3JkeWxidTYvMwAvcmR5bGJ1Ni80AC9yZHlsYnU2LzUAL3JkeWxidTYvNgAvcmR5bGJ1Ny8xAC9yZHlsYnU3LzIAL3JkeWxidTcvMwAvcmR5bGJ1Ny80AC9yZHlsYnU3LzUAL3JkeWxidTcvNgAvcmR5bGJ1Ny83AC9yZHlsYnU4LzEAL3JkeWxidTgvMgAvcmR5bGJ1OC8zAC9yZHlsYnU4LzQAL3JkeWxidTgvNQAvcmR5bGJ1OC82AC9yZHlsYnU4LzcAL3JkeWxidTgvOAAvcmR5bGJ1OS8xAC9yZHlsYnU5LzIAL3JkeWxidTkvMwAvcmR5bGJ1OS80AC9yZHlsYnU5LzUAL3JkeWxidTkvNgAvcmR5bGJ1OS83AC9yZHlsYnU5LzgAL3JkeWxidTkvOQAvcmR5bGduMTAvMQAvcmR5bGduMTAvMTAAL3JkeWxnbjEwLzIAL3JkeWxnbjEwLzMAL3JkeWxnbjEwLzQAL3JkeWxnbjEwLzUAL3JkeWxnbjEwLzYAL3JkeWxnbjEwLzcAL3JkeWxnbjEwLzgAL3JkeWxnbjEwLzkAL3JkeWxnbjExLzEAL3JkeWxnbjExLzEwAC9yZHlsZ24xMS8xMQAvcmR5bGduMTEvMgAvcmR5bGduMTEvMwAvcmR5bGduMTEvNAAvcmR5bGduMTEvNQAvcmR5bGduMTEvNgAvcmR5bGduMTEvNwAvcmR5bGduMTEvOAAvcmR5bGduMTEvOQAvcmR5bGduMy8xAC9yZHlsZ24zLzIAL3JkeWxnbjMvMwAvcmR5bGduNC8xAC9yZHlsZ240LzIAL3JkeWxnbjQvMwAvcmR5bGduNC80AC9yZHlsZ241LzEAL3JkeWxnbjUvMgAvcmR5bGduNS8zAC9yZHlsZ241LzQAL3JkeWxnbjUvNQAvcmR5bGduNi8xAC9yZHlsZ242LzIAL3JkeWxnbjYvMwAvcmR5bGduNi80AC9yZHlsZ242LzUAL3JkeWxnbjYvNgAvcmR5bGduNy8xAC9yZHlsZ243LzIAL3JkeWxnbjcvMwAvcmR5bGduNy80AC9yZHlsZ243LzUAL3JkeWxnbjcvNgAvcmR5bGduNy83AC9yZHlsZ244LzEAL3JkeWxnbjgvMgAvcmR5bGduOC8zAC9yZHlsZ244LzQAL3JkeWxnbjgvNQAvcmR5bGduOC82AC9yZHlsZ244LzcAL3JkeWxnbjgvOAAvcmR5bGduOS8xAC9yZHlsZ245LzIAL3JkeWxnbjkvMwAvcmR5bGduOS80AC9yZHlsZ245LzUAL3JkeWxnbjkvNgAvcmR5bGduOS83AC9yZHlsZ245LzgAL3JkeWxnbjkvOQAvcmVkczMvMQAvcmVkczMvMgAvcmVkczMvMwAvcmVkczQvMQAvcmVkczQvMgAvcmVkczQvMwAvcmVkczQvNAAvcmVkczUvMQAvcmVkczUvMgAvcmVkczUvMwAvcmVkczUvNAAvcmVkczUvNQAvcmVkczYvMQAvcmVkczYvMgAvcmVkczYvMwAvcmVkczYvNAAvcmVkczYvNQAvcmVkczYvNgAvcmVkczcvMQAvcmVkczcvMgAvcmVkczcvMwAvcmVkczcvNAAvcmVkczcvNQAvcmVkczcvNgAvcmVkczcvNwAvcmVkczgvMQAvcmVkczgvMgAvcmVkczgvMwAvcmVkczgvNAAvcmVkczgvNQAvcmVkczgvNgAvcmVkczgvNwAvcmVkczgvOAAvcmVkczkvMQAvcmVkczkvMgAvcmVkczkvMwAvcmVkczkvNAAvcmVkczkvNQAvcmVkczkvNgAvcmVkczkvNwAvcmVkczkvOAAvcmVkczkvOQAvc2V0MTMvMQAvc2V0MTMvMgAvc2V0MTMvMwAvc2V0MTQvMQAvc2V0MTQvMgAvc2V0MTQvMwAvc2V0MTQvNAAvc2V0MTUvMQAvc2V0MTUvMgAvc2V0MTUvMwAvc2V0MTUvNAAvc2V0MTUvNQAvc2V0MTYvMQAvc2V0MTYvMgAvc2V0MTYvMwAvc2V0MTYvNAAvc2V0MTYvNQAvc2V0MTYvNgAvc2V0MTcvMQAvc2V0MTcvMgAvc2V0MTcvMwAvc2V0MTcvNAAvc2V0MTcvNQAvc2V0MTcvNgAvc2V0MTcvNwAvc2V0MTgvMQAvc2V0MTgvMgAvc2V0MTgvMwAvc2V0MTgvNAAvc2V0MTgvNQAvc2V0MTgvNgAvc2V0MTgvNwAvc2V0MTgvOAAvc2V0MTkvMQAvc2V0MTkvMgAvc2V0MTkvMwAvc2V0MTkvNAAvc2V0MTkvNQAvc2V0MTkvNgAvc2V0MTkvNwAvc2V0MTkvOAAvc2V0MTkvOQAvc2V0MjMvMQAvc2V0MjMvMgAvc2V0MjMvMwAvc2V0MjQvMQAvc2V0MjQvMgAvc2V0MjQvMwAvc2V0MjQvNAAvc2V0MjUvMQAvc2V0MjUvMgAvc2V0MjUvMwAvc2V0MjUvNAAvc2V0MjUvNQAvc2V0MjYvMQAvc2V0MjYvMgAvc2V0MjYvMwAvc2V0MjYvNAAvc2V0MjYvNQAvc2V0MjYvNgAvc2V0MjcvMQAvc2V0MjcvMgAvc2V0MjcvMwAvc2V0MjcvNAAvc2V0MjcvNQAvc2V0MjcvNgAvc2V0MjcvNwAvc2V0MjgvMQAvc2V0MjgvMgAvc2V0MjgvMwAvc2V0MjgvNAAvc2V0MjgvNQAvc2V0MjgvNgAvc2V0MjgvNwAvc2V0MjgvOAAvc2V0MzEwLzEAL3NldDMxMC8xMAAvc2V0MzEwLzIAL3NldDMxMC8zAC9zZXQzMTAvNAAvc2V0MzEwLzUAL3NldDMxMC82AC9zZXQzMTAvNwAvc2V0MzEwLzgAL3NldDMxMC85AC9zZXQzMTEvMQAvc2V0MzExLzEwAC9zZXQzMTEvMTEAL3NldDMxMS8yAC9zZXQzMTEvMwAvc2V0MzExLzQAL3NldDMxMS81AC9zZXQzMTEvNgAvc2V0MzExLzcAL3NldDMxMS84AC9zZXQzMTEvOQAvc2V0MzEyLzEAL3NldDMxMi8xMAAvc2V0MzEyLzExAC9zZXQzMTIvMTIAL3NldDMxMi8yAC9zZXQzMTIvMwAvc2V0MzEyLzQAL3NldDMxMi81AC9zZXQzMTIvNgAvc2V0MzEyLzcAL3NldDMxMi84AC9zZXQzMTIvOQAvc2V0MzMvMQAvc2V0MzMvMgAvc2V0MzMvMwAvc2V0MzQvMQAvc2V0MzQvMgAvc2V0MzQvMwAvc2V0MzQvNAAvc2V0MzUvMQAvc2V0MzUvMgAvc2V0MzUvMwAvc2V0MzUvNAAvc2V0MzUvNQAvc2V0MzYvMQAvc2V0MzYvMgAvc2V0MzYvMwAvc2V0MzYvNAAvc2V0MzYvNQAvc2V0MzYvNgAvc2V0MzcvMQAvc2V0MzcvMgAvc2V0MzcvMwAvc2V0MzcvNAAvc2V0MzcvNQAvc2V0MzcvNgAvc2V0MzcvNwAvc2V0MzgvMQAvc2V0MzgvMgAvc2V0MzgvMwAvc2V0MzgvNAAvc2V0MzgvNQAvc2V0MzgvNgAvc2V0MzgvNwAvc2V0MzgvOAAvc2V0MzkvMQAvc2V0MzkvMgAvc2V0MzkvMwAvc2V0MzkvNAAvc2V0MzkvNQAvc2V0MzkvNgAvc2V0MzkvNwAvc2V0MzkvOAAvc2V0MzkvOQAvc3BlY3RyYWwxMC8xAC9zcGVjdHJhbDEwLzEwAC9zcGVjdHJhbDEwLzIAL3NwZWN0cmFsMTAvMwAvc3BlY3RyYWwxMC80AC9zcGVjdHJhbDEwLzUAL3NwZWN0cmFsMTAvNgAvc3BlY3RyYWwxMC83AC9zcGVjdHJhbDEwLzgAL3NwZWN0cmFsMTAvOQAvc3BlY3RyYWwxMS8xAC9zcGVjdHJhbDExLzEwAC9zcGVjdHJhbDExLzExAC9zcGVjdHJhbDExLzIAL3NwZWN0cmFsMTEvMwAvc3BlY3RyYWwxMS80AC9zcGVjdHJhbDExLzUAL3NwZWN0cmFsMTEvNgAvc3BlY3RyYWwxMS83AC9zcGVjdHJhbDExLzgAL3NwZWN0cmFsMTEvOQAvc3BlY3RyYWwzLzEAL3NwZWN0cmFsMy8yAC9zcGVjdHJhbDMvMwAvc3BlY3RyYWw0LzEAL3NwZWN0cmFsNC8yAC9zcGVjdHJhbDQvMwAvc3BlY3RyYWw0LzQAL3NwZWN0cmFsNS8xAC9zcGVjdHJhbDUvMgAvc3BlY3RyYWw1LzMAL3NwZWN0cmFsNS80AC9zcGVjdHJhbDUvNQAvc3BlY3RyYWw2LzEAL3NwZWN0cmFsNi8yAC9zcGVjdHJhbDYvMwAvc3BlY3RyYWw2LzQAL3NwZWN0cmFsNi81AC9zcGVjdHJhbDYvNgAvc3BlY3RyYWw3LzEAL3NwZWN0cmFsNy8yAC9zcGVjdHJhbDcvMwAvc3BlY3RyYWw3LzQAL3NwZWN0cmFsNy81AC9zcGVjdHJhbDcvNgAvc3BlY3RyYWw3LzcAL3NwZWN0cmFsOC8xAC9zcGVjdHJhbDgvMgAvc3BlY3RyYWw4LzMAL3NwZWN0cmFsOC80AC9zcGVjdHJhbDgvNQAvc3BlY3RyYWw4LzYAL3NwZWN0cmFsOC83AC9zcGVjdHJhbDgvOAAvc3BlY3RyYWw5LzEAL3NwZWN0cmFsOS8yAC9zcGVjdHJhbDkvMwAvc3BlY3RyYWw5LzQAL3NwZWN0cmFsOS81AC9zcGVjdHJhbDkvNgAvc3BlY3RyYWw5LzcAL3NwZWN0cmFsOS84AC9zcGVjdHJhbDkvOQAvc3ZnL2FsaWNlYmx1ZQAvc3ZnL2FudGlxdWV3aGl0ZQAvc3ZnL2FxdWEAL3N2Zy9hcXVhbWFyaW5lAC9zdmcvYXp1cmUAL3N2Zy9iZWlnZQAvc3ZnL2Jpc3F1ZQAvc3ZnL2JsYWNrAC9zdmcvYmxhbmNoZWRhbG1vbmQAL3N2Zy9ibHVlAC9zdmcvYmx1ZXZpb2xldAAvc3ZnL2Jyb3duAC9zdmcvYnVybHl3b29kAC9zdmcvY2FkZXRibHVlAC9zdmcvY2hhcnRyZXVzZQAvc3ZnL2Nob2NvbGF0ZQAvc3ZnL2NvcmFsAC9zdmcvY29ybmZsb3dlcmJsdWUAL3N2Zy9jb3Juc2lsawAvc3ZnL2NyaW1zb24AL3N2Zy9jeWFuAC9zdmcvZGFya2JsdWUAL3N2Zy9kYXJrY3lhbgAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9kYXJrZ3JheQAvc3ZnL2RhcmtncmVlbgAvc3ZnL2RhcmtncmV5AC9zdmcvZGFya2toYWtpAC9zdmcvZGFya21hZ2VudGEAL3N2Zy9kYXJrb2xpdmVncmVlbgAvc3ZnL2RhcmtvcmFuZ2UAL3N2Zy9kYXJrb3JjaGlkAC9zdmcvZGFya3JlZAAvc3ZnL2RhcmtzYWxtb24AL3N2Zy9kYXJrc2VhZ3JlZW4AL3N2Zy9kYXJrc2xhdGVibHVlAC9zdmcvZGFya3NsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyZXkAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvZGFya3Zpb2xldAAvc3ZnL2RlZXBwaW5rAC9zdmcvZGVlcHNreWJsdWUAL3N2Zy9kaW1ncmF5AC9zdmcvZGltZ3JleQAvc3ZnL2RvZGdlcmJsdWUAL3N2Zy9maXJlYnJpY2sAL3N2Zy9mbG9yYWx3aGl0ZQAvc3ZnL2ZvcmVzdGdyZWVuAC9zdmcvZnVjaHNpYQAvc3ZnL2dhaW5zYm9ybwAvc3ZnL2dob3N0d2hpdGUAL3N2Zy9nb2xkAC9zdmcvZ29sZGVucm9kAC9zdmcvZ3JheQAvc3ZnL2dyZWVuAC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9ncmV5AC9zdmcvaG9uZXlkZXcAL3N2Zy9ob3RwaW5rAC9zdmcvaW5kaWFucmVkAC9zdmcvaW5kaWdvAC9zdmcvaXZvcnkAL3N2Zy9raGFraQAvc3ZnL2xhdmVuZGVyAC9zdmcvbGF2ZW5kZXJibHVzaAAvc3ZnL2xhd25ncmVlbgAvc3ZnL2xlbW9uY2hpZmZvbgAvc3ZnL2xpZ2h0Ymx1ZQAvc3ZnL2xpZ2h0Y29yYWwAL3N2Zy9saWdodGN5YW4AL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL2xpZ2h0Z3JheQAvc3ZnL2xpZ2h0Z3JlZW4AL3N2Zy9saWdodGdyZXkAL3N2Zy9saWdodHBpbmsAL3N2Zy9saWdodHNhbG1vbgAvc3ZnL2xpZ2h0c2VhZ3JlZW4AL3N2Zy9saWdodHNreWJsdWUAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2xpZ2h0c2xhdGVncmV5AC9zdmcvbGlnaHRzdGVlbGJsdWUAL3N2Zy9saWdodHllbGxvdwAvc3ZnL2xpbWUAL3N2Zy9saW1lZ3JlZW4AL3N2Zy9saW5lbgAvc3ZnL21hZ2VudGEAL3N2Zy9tYXJvb24AL3N2Zy9tZWRpdW1hcXVhbWFyaW5lAC9zdmcvbWVkaXVtYmx1ZQAvc3ZnL21lZGl1bW9yY2hpZAAvc3ZnL21lZGl1bXB1cnBsZQAvc3ZnL21lZGl1bXNlYWdyZWVuAC9zdmcvbWVkaXVtc2xhdGVibHVlAC9zdmcvbWVkaXVtc3ByaW5nZ3JlZW4AL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9tZWRpdW12aW9sZXRyZWQAL3N2Zy9taWRuaWdodGJsdWUAL3N2Zy9taW50Y3JlYW0AL3N2Zy9taXN0eXJvc2UAL3N2Zy9tb2NjYXNpbgAvc3ZnL25hdmFqb3doaXRlAC9zdmcvbmF2eQAvc3ZnL29sZGxhY2UAL3N2Zy9vbGl2ZQAvc3ZnL29saXZlZHJhYgAvc3ZnL29yYW5nZQAvc3ZnL29yYW5nZXJlZAAvc3ZnL29yY2hpZAAvc3ZnL3BhbGVnb2xkZW5yb2QAL3N2Zy9wYWxlZ3JlZW4AL3N2Zy9wYWxldHVycXVvaXNlAC9zdmcvcGFsZXZpb2xldHJlZAAvc3ZnL3BhcGF5YXdoaXAAL3N2Zy9wZWFjaHB1ZmYAL3N2Zy9wZXJ1AC9zdmcvcGluawAvc3ZnL3BsdW0AL3N2Zy9wb3dkZXJibHVlAC9zdmcvcHVycGxlAC9zdmcvcmVkAC9zdmcvcm9zeWJyb3duAC9zdmcvcm95YWxibHVlAC9zdmcvc2FkZGxlYnJvd24AL3N2Zy9zYWxtb24AL3N2Zy9zYW5keWJyb3duAC9zdmcvc2VhZ3JlZW4AL3N2Zy9zZWFzaGVsbAAvc3ZnL3NpZW5uYQAvc3ZnL3NpbHZlcgAvc3ZnL3NreWJsdWUAL3N2Zy9zbGF0ZWJsdWUAL3N2Zy9zbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyZXkAL3N2Zy9zbm93AC9zdmcvc3ByaW5nZ3JlZW4AL3N2Zy9zdGVlbGJsdWUAL3N2Zy90YW4AL3N2Zy90ZWFsAC9zdmcvdGhpc3RsZQAvc3ZnL3RvbWF0bwAvc3ZnL3R1cnF1b2lzZQAvc3ZnL3Zpb2xldAAvc3ZnL3doZWF0AC9zdmcvd2hpdGUAL3N2Zy93aGl0ZXNtb2tlAC9zdmcveWVsbG93AC9zdmcveWVsbG93Z3JlZW4AL3lsZ24zLzEAL3lsZ24zLzIAL3lsZ24zLzMAL3lsZ240LzEAL3lsZ240LzIAL3lsZ240LzMAL3lsZ240LzQAL3lsZ241LzEAL3lsZ241LzIAL3lsZ241LzMAL3lsZ241LzQAL3lsZ241LzUAL3lsZ242LzEAL3lsZ242LzIAL3lsZ242LzMAL3lsZ242LzQAL3lsZ242LzUAL3lsZ242LzYAL3lsZ243LzEAL3lsZ243LzIAL3lsZ243LzMAL3lsZ243LzQAL3lsZ243LzUAL3lsZ243LzYAL3lsZ243LzcAL3lsZ244LzEAL3lsZ244LzIAL3lsZ244LzMAL3lsZ244LzQAL3lsZ244LzUAL3lsZ244LzYAL3lsZ244LzcAL3lsZ244LzgAL3lsZ245LzEAL3lsZ245LzIAL3lsZ245LzMAL3lsZ245LzQAL3lsZ245LzUAL3lsZ245LzYAL3lsZ245LzcAL3lsZ245LzgAL3lsZ245LzkAL3lsZ25idTMvMQAveWxnbmJ1My8yAC95bGduYnUzLzMAL3lsZ25idTQvMQAveWxnbmJ1NC8yAC95bGduYnU0LzMAL3lsZ25idTQvNAAveWxnbmJ1NS8xAC95bGduYnU1LzIAL3lsZ25idTUvMwAveWxnbmJ1NS80AC95bGduYnU1LzUAL3lsZ25idTYvMQAveWxnbmJ1Ni8yAC95bGduYnU2LzMAL3lsZ25idTYvNAAveWxnbmJ1Ni81AC95bGduYnU2LzYAL3lsZ25idTcvMQAveWxnbmJ1Ny8yAC95bGduYnU3LzMAL3lsZ25idTcvNAAveWxnbmJ1Ny81AC95bGduYnU3LzYAL3lsZ25idTcvNwAveWxnbmJ1OC8xAC95bGduYnU4LzIAL3lsZ25idTgvMwAveWxnbmJ1OC80AC95bGduYnU4LzUAL3lsZ25idTgvNgAveWxnbmJ1OC83AC95bGduYnU4LzgAL3lsZ25idTkvMQAveWxnbmJ1OS8yAC95bGduYnU5LzMAL3lsZ25idTkvNAAveWxnbmJ1OS81AC95bGduYnU5LzYAL3lsZ25idTkvNwAveWxnbmJ1OS84AC95bGduYnU5LzkAL3lsb3JicjMvMQAveWxvcmJyMy8yAC95bG9yYnIzLzMAL3lsb3JicjQvMQAveWxvcmJyNC8yAC95bG9yYnI0LzMAL3lsb3JicjQvNAAveWxvcmJyNS8xAC95bG9yYnI1LzIAL3lsb3JicjUvMwAveWxvcmJyNS80AC95bG9yYnI1LzUAL3lsb3JicjYvMQAveWxvcmJyNi8yAC95bG9yYnI2LzMAL3lsb3JicjYvNAAveWxvcmJyNi81AC95bG9yYnI2LzYAL3lsb3JicjcvMQAveWxvcmJyNy8yAC95bG9yYnI3LzMAL3lsb3JicjcvNAAveWxvcmJyNy81AC95bG9yYnI3LzYAL3lsb3JicjcvNwAveWxvcmJyOC8xAC95bG9yYnI4LzIAL3lsb3JicjgvMwAveWxvcmJyOC80AC95bG9yYnI4LzUAL3lsb3JicjgvNgAveWxvcmJyOC83AC95bG9yYnI4LzgAL3lsb3JicjkvMQAveWxvcmJyOS8yAC95bG9yYnI5LzMAL3lsb3JicjkvNAAveWxvcmJyOS81AC95bG9yYnI5LzYAL3lsb3JicjkvNwAveWxvcmJyOS84AC95bG9yYnI5LzkAL3lsb3JyZDMvMQAveWxvcnJkMy8yAC95bG9ycmQzLzMAL3lsb3JyZDQvMQAveWxvcnJkNC8yAC95bG9ycmQ0LzMAL3lsb3JyZDQvNAAveWxvcnJkNS8xAC95bG9ycmQ1LzIAL3lsb3JyZDUvMwAveWxvcnJkNS80AC95bG9ycmQ1LzUAL3lsb3JyZDYvMQAveWxvcnJkNi8yAC95bG9ycmQ2LzMAL3lsb3JyZDYvNAAveWxvcnJkNi81AC95bG9ycmQ2LzYAL3lsb3JyZDcvMQAveWxvcnJkNy8yAC95bG9ycmQ3LzMAL3lsb3JyZDcvNAAveWxvcnJkNy81AC95bG9ycmQ3LzYAL3lsb3JyZDcvNwAveWxvcnJkOC8xAC95bG9ycmQ4LzIAL3lsb3JyZDgvMwAveWxvcnJkOC80AC95bG9ycmQ4LzUAL3lsb3JyZDgvNgAveWxvcnJkOC83AC95bG9ycmQ4LzgAL3lsb3JyZDkvMQAveWxvcnJkOS8yAC95bG9ycmQ5LzMAL3lsb3JyZDkvNAAveWxvcnJkOS81AC95bG9ycmQ5LzYAL3lsb3JyZDkvNwAveWxvcnJkOS84AC95bG9ycmQ5LzkAYWxpY2VibHVlAGFudGlxdWV3aGl0ZQBhbnRpcXVld2hpdGUxAGFudGlxdWV3aGl0ZTIAYW50aXF1ZXdoaXRlMwBhbnRpcXVld2hpdGU0AGFxdWFtYXJpbmUAYXF1YW1hcmluZTEAYXF1YW1hcmluZTIAYXF1YW1hcmluZTMAYXF1YW1hcmluZTQAYXp1cmUAYXp1cmUxAGF6dXJlMgBhenVyZTMAYXp1cmU0AGJlaWdlAGJpc3F1ZQBiaXNxdWUxAGJpc3F1ZTIAYmlzcXVlMwBiaXNxdWU0AGJsYW5jaGVkYWxtb25kAGJsdWUAYmx1ZTEAYmx1ZTIAYmx1ZTMAYmx1ZTQAYmx1ZXZpb2xldABicm93bgBicm93bjEAYnJvd24yAGJyb3duMwBicm93bjQAYnVybHl3b29kAGJ1cmx5d29vZDEAYnVybHl3b29kMgBidXJseXdvb2QzAGJ1cmx5d29vZDQAY2FkZXRibHVlAGNhZGV0Ymx1ZTEAY2FkZXRibHVlMgBjYWRldGJsdWUzAGNhZGV0Ymx1ZTQAY2hhcnRyZXVzZQBjaGFydHJldXNlMQBjaGFydHJldXNlMgBjaGFydHJldXNlMwBjaGFydHJldXNlNABjaG9jb2xhdGUAY2hvY29sYXRlMQBjaG9jb2xhdGUyAGNob2NvbGF0ZTMAY2hvY29sYXRlNABjb3JhbABjb3JhbDEAY29yYWwyAGNvcmFsMwBjb3JhbDQAY29ybmZsb3dlcmJsdWUAY29ybnNpbGsAY29ybnNpbGsxAGNvcm5zaWxrMgBjb3Juc2lsazMAY29ybnNpbGs0AGNyaW1zb24AY3lhbgBjeWFuMQBjeWFuMgBjeWFuMwBjeWFuNABkYXJrZ29sZGVucm9kAGRhcmtnb2xkZW5yb2QxAGRhcmtnb2xkZW5yb2QyAGRhcmtnb2xkZW5yb2QzAGRhcmtnb2xkZW5yb2Q0AGRhcmtncmVlbgBkYXJra2hha2kAZGFya29saXZlZ3JlZW4AZGFya29saXZlZ3JlZW4xAGRhcmtvbGl2ZWdyZWVuMgBkYXJrb2xpdmVncmVlbjMAZGFya29saXZlZ3JlZW40AGRhcmtvcmFuZ2UAZGFya29yYW5nZTEAZGFya29yYW5nZTIAZGFya29yYW5nZTMAZGFya29yYW5nZTQAZGFya29yY2hpZABkYXJrb3JjaGlkMQBkYXJrb3JjaGlkMgBkYXJrb3JjaGlkMwBkYXJrb3JjaGlkNABkYXJrc2FsbW9uAGRhcmtzZWFncmVlbgBkYXJrc2VhZ3JlZW4xAGRhcmtzZWFncmVlbjIAZGFya3NlYWdyZWVuMwBkYXJrc2VhZ3JlZW40AGRhcmtzbGF0ZWJsdWUAZGFya3NsYXRlZ3JheQBkYXJrc2xhdGVncmF5MQBkYXJrc2xhdGVncmF5MgBkYXJrc2xhdGVncmF5MwBkYXJrc2xhdGVncmF5NABkYXJrc2xhdGVncmV5AGRhcmt0dXJxdW9pc2UAZGFya3Zpb2xldABkZWVwcGluawBkZWVwcGluazEAZGVlcHBpbmsyAGRlZXBwaW5rMwBkZWVwcGluazQAZGVlcHNreWJsdWUAZGVlcHNreWJsdWUxAGRlZXBza3libHVlMgBkZWVwc2t5Ymx1ZTMAZGVlcHNreWJsdWU0AGRpbWdyYXkAZGltZ3JleQBkb2RnZXJibHVlAGRvZGdlcmJsdWUxAGRvZGdlcmJsdWUyAGRvZGdlcmJsdWUzAGRvZGdlcmJsdWU0AGZpcmVicmljawBmaXJlYnJpY2sxAGZpcmVicmljazIAZmlyZWJyaWNrMwBmaXJlYnJpY2s0AGZsb3JhbHdoaXRlAGZvcmVzdGdyZWVuAGdhaW5zYm9ybwBnaG9zdHdoaXRlAGdvbGQAZ29sZDEAZ29sZDIAZ29sZDMAZ29sZDQAZ29sZGVucm9kAGdvbGRlbnJvZDEAZ29sZGVucm9kMgBnb2xkZW5yb2QzAGdvbGRlbnJvZDQAZ3JheQBncmF5MABncmF5MQBncmF5MTAAZ3JheTEwMABncmF5MTEAZ3JheTEyAGdyYXkxMwBncmF5MTQAZ3JheTE1AGdyYXkxNgBncmF5MTcAZ3JheTE4AGdyYXkxOQBncmF5MgBncmF5MjAAZ3JheTIxAGdyYXkyMgBncmF5MjMAZ3JheTI0AGdyYXkyNQBncmF5MjYAZ3JheTI3AGdyYXkyOABncmF5MjkAZ3JheTMAZ3JheTMwAGdyYXkzMQBncmF5MzIAZ3JheTMzAGdyYXkzNABncmF5MzUAZ3JheTM2AGdyYXkzNwBncmF5MzgAZ3JheTM5AGdyYXk0AGdyYXk0MABncmF5NDEAZ3JheTQyAGdyYXk0MwBncmF5NDQAZ3JheTQ1AGdyYXk0NgBncmF5NDcAZ3JheTQ4AGdyYXk0OQBncmF5NQBncmF5NTAAZ3JheTUxAGdyYXk1MgBncmF5NTMAZ3JheTU0AGdyYXk1NQBncmF5NTYAZ3JheTU3AGdyYXk1OABncmF5NTkAZ3JheTYAZ3JheTYwAGdyYXk2MQBncmF5NjIAZ3JheTYzAGdyYXk2NABncmF5NjUAZ3JheTY2AGdyYXk2NwBncmF5NjgAZ3JheTY5AGdyYXk3AGdyYXk3MABncmF5NzEAZ3JheTcyAGdyYXk3MwBncmF5NzQAZ3JheTc1AGdyYXk3NgBncmF5NzcAZ3JheTc4AGdyYXk3OQBncmF5OABncmF5ODAAZ3JheTgxAGdyYXk4MgBncmF5ODMAZ3JheTg0AGdyYXk4NQBncmF5ODYAZ3JheTg3AGdyYXk4OABncmF5ODkAZ3JheTkAZ3JheTkwAGdyYXk5MQBncmF5OTIAZ3JheTkzAGdyYXk5NABncmF5OTUAZ3JheTk2AGdyYXk5NwBncmF5OTgAZ3JheTk5AGdyZWVuAGdyZWVuMQBncmVlbjIAZ3JlZW4zAGdyZWVuNABncmVlbnllbGxvdwBncmV5AGdyZXkwAGdyZXkxAGdyZXkxMABncmV5MTAwAGdyZXkxMQBncmV5MTIAZ3JleTEzAGdyZXkxNABncmV5MTUAZ3JleTE2AGdyZXkxNwBncmV5MTgAZ3JleTE5AGdyZXkyAGdyZXkyMABncmV5MjEAZ3JleTIyAGdyZXkyMwBncmV5MjQAZ3JleTI1AGdyZXkyNgBncmV5MjcAZ3JleTI4AGdyZXkyOQBncmV5MwBncmV5MzAAZ3JleTMxAGdyZXkzMgBncmV5MzMAZ3JleTM0AGdyZXkzNQBncmV5MzYAZ3JleTM3AGdyZXkzOABncmV5MzkAZ3JleTQAZ3JleTQwAGdyZXk0MQBncmV5NDIAZ3JleTQzAGdyZXk0NABncmV5NDUAZ3JleTQ2AGdyZXk0NwBncmV5NDgAZ3JleTQ5AGdyZXk1AGdyZXk1MABncmV5NTEAZ3JleTUyAGdyZXk1MwBncmV5NTQAZ3JleTU1AGdyZXk1NgBncmV5NTcAZ3JleTU4AGdyZXk1OQBncmV5NgBncmV5NjAAZ3JleTYxAGdyZXk2MgBncmV5NjMAZ3JleTY0AGdyZXk2NQBncmV5NjYAZ3JleTY3AGdyZXk2OABncmV5NjkAZ3JleTcAZ3JleTcwAGdyZXk3MQBncmV5NzIAZ3JleTczAGdyZXk3NABncmV5NzUAZ3JleTc2AGdyZXk3NwBncmV5NzgAZ3JleTc5AGdyZXk4AGdyZXk4MABncmV5ODEAZ3JleTgyAGdyZXk4MwBncmV5ODQAZ3JleTg1AGdyZXk4NgBncmV5ODcAZ3JleTg4AGdyZXk4OQBncmV5OQBncmV5OTAAZ3JleTkxAGdyZXk5MgBncmV5OTMAZ3JleTk0AGdyZXk5NQBncmV5OTYAZ3JleTk3AGdyZXk5OABncmV5OTkAaG9uZXlkZXcAaG9uZXlkZXcxAGhvbmV5ZGV3MgBob25leWRldzMAaG9uZXlkZXc0AGhvdHBpbmsAaG90cGluazEAaG90cGluazIAaG90cGluazMAaG90cGluazQAaW5kaWFucmVkAGluZGlhbnJlZDEAaW5kaWFucmVkMgBpbmRpYW5yZWQzAGluZGlhbnJlZDQAaW5kaWdvAGludmlzAGl2b3J5AGl2b3J5MQBpdm9yeTIAaXZvcnkzAGl2b3J5NABraGFraQBraGFraTEAa2hha2kyAGtoYWtpMwBraGFraTQAbGF2ZW5kZXIAbGF2ZW5kZXJibHVzaABsYXZlbmRlcmJsdXNoMQBsYXZlbmRlcmJsdXNoMgBsYXZlbmRlcmJsdXNoMwBsYXZlbmRlcmJsdXNoNABsYXduZ3JlZW4AbGVtb25jaGlmZm9uAGxlbW9uY2hpZmZvbjEAbGVtb25jaGlmZm9uMgBsZW1vbmNoaWZmb24zAGxlbW9uY2hpZmZvbjQAbGlnaHRibHVlAGxpZ2h0Ymx1ZTEAbGlnaHRibHVlMgBsaWdodGJsdWUzAGxpZ2h0Ymx1ZTQAbGlnaHRjb3JhbABsaWdodGN5YW4AbGlnaHRjeWFuMQBsaWdodGN5YW4yAGxpZ2h0Y3lhbjMAbGlnaHRjeWFuNABsaWdodGdvbGRlbnJvZABsaWdodGdvbGRlbnJvZDEAbGlnaHRnb2xkZW5yb2QyAGxpZ2h0Z29sZGVucm9kMwBsaWdodGdvbGRlbnJvZDQAbGlnaHRnb2xkZW5yb2R5ZWxsb3cAbGlnaHRncmF5AGxpZ2h0Z3JleQBsaWdodHBpbmsAbGlnaHRwaW5rMQBsaWdodHBpbmsyAGxpZ2h0cGluazMAbGlnaHRwaW5rNABsaWdodHNhbG1vbgBsaWdodHNhbG1vbjEAbGlnaHRzYWxtb24yAGxpZ2h0c2FsbW9uMwBsaWdodHNhbG1vbjQAbGlnaHRzZWFncmVlbgBsaWdodHNreWJsdWUAbGlnaHRza3libHVlMQBsaWdodHNreWJsdWUyAGxpZ2h0c2t5Ymx1ZTMAbGlnaHRza3libHVlNABsaWdodHNsYXRlYmx1ZQBsaWdodHNsYXRlZ3JheQBsaWdodHNsYXRlZ3JleQBsaWdodHN0ZWVsYmx1ZQBsaWdodHN0ZWVsYmx1ZTEAbGlnaHRzdGVlbGJsdWUyAGxpZ2h0c3RlZWxibHVlMwBsaWdodHN0ZWVsYmx1ZTQAbGlnaHR5ZWxsb3cAbGlnaHR5ZWxsb3cxAGxpZ2h0eWVsbG93MgBsaWdodHllbGxvdzMAbGlnaHR5ZWxsb3c0AGxpbWVncmVlbgBsaW5lbgBtYWdlbnRhAG1hZ2VudGExAG1hZ2VudGEyAG1hZ2VudGEzAG1hZ2VudGE0AG1hcm9vbgBtYXJvb24xAG1hcm9vbjIAbWFyb29uMwBtYXJvb240AG1lZGl1bWFxdWFtYXJpbmUAbWVkaXVtYmx1ZQBtZWRpdW1vcmNoaWQAbWVkaXVtb3JjaGlkMQBtZWRpdW1vcmNoaWQyAG1lZGl1bW9yY2hpZDMAbWVkaXVtb3JjaGlkNABtZWRpdW1wdXJwbGUAbWVkaXVtcHVycGxlMQBtZWRpdW1wdXJwbGUyAG1lZGl1bXB1cnBsZTMAbWVkaXVtcHVycGxlNABtZWRpdW1zZWFncmVlbgBtZWRpdW1zbGF0ZWJsdWUAbWVkaXVtc3ByaW5nZ3JlZW4AbWVkaXVtdHVycXVvaXNlAG1lZGl1bXZpb2xldHJlZABtaWRuaWdodGJsdWUAbWludGNyZWFtAG1pc3R5cm9zZQBtaXN0eXJvc2UxAG1pc3R5cm9zZTIAbWlzdHlyb3NlMwBtaXN0eXJvc2U0AG1vY2Nhc2luAG5hdmFqb3doaXRlAG5hdmFqb3doaXRlMQBuYXZham93aGl0ZTIAbmF2YWpvd2hpdGUzAG5hdmFqb3doaXRlNABuYXZ5AG5hdnlibHVlAG5vbmUAb2xkbGFjZQBvbGl2ZWRyYWIAb2xpdmVkcmFiMQBvbGl2ZWRyYWIyAG9saXZlZHJhYjMAb2xpdmVkcmFiNABvcmFuZ2UAb3JhbmdlMQBvcmFuZ2UyAG9yYW5nZTMAb3JhbmdlNABvcmFuZ2VyZWQAb3JhbmdlcmVkMQBvcmFuZ2VyZWQyAG9yYW5nZXJlZDMAb3JhbmdlcmVkNABvcmNoaWQAb3JjaGlkMQBvcmNoaWQyAG9yY2hpZDMAb3JjaGlkNABwYWxlZ29sZGVucm9kAHBhbGVncmVlbgBwYWxlZ3JlZW4xAHBhbGVncmVlbjIAcGFsZWdyZWVuMwBwYWxlZ3JlZW40AHBhbGV0dXJxdW9pc2UAcGFsZXR1cnF1b2lzZTEAcGFsZXR1cnF1b2lzZTIAcGFsZXR1cnF1b2lzZTMAcGFsZXR1cnF1b2lzZTQAcGFsZXZpb2xldHJlZABwYWxldmlvbGV0cmVkMQBwYWxldmlvbGV0cmVkMgBwYWxldmlvbGV0cmVkMwBwYWxldmlvbGV0cmVkNABwYXBheWF3aGlwAHBlYWNocHVmZgBwZWFjaHB1ZmYxAHBlYWNocHVmZjIAcGVhY2hwdWZmMwBwZWFjaHB1ZmY0AHBlcnUAcGluawBwaW5rMQBwaW5rMgBwaW5rMwBwaW5rNABwbHVtAHBsdW0xAHBsdW0yAHBsdW0zAHBsdW00AHBvd2RlcmJsdWUAcHVycGxlAHB1cnBsZTEAcHVycGxlMgBwdXJwbGUzAHB1cnBsZTQAcmVkAHJlZDEAcmVkMgByZWQzAHJlZDQAcm9zeWJyb3duAHJvc3licm93bjEAcm9zeWJyb3duMgByb3N5YnJvd24zAHJvc3licm93bjQAcm95YWxibHVlAHJveWFsYmx1ZTEAcm95YWxibHVlMgByb3lhbGJsdWUzAHJveWFsYmx1ZTQAc2FkZGxlYnJvd24Ac2FsbW9uAHNhbG1vbjEAc2FsbW9uMgBzYWxtb24zAHNhbG1vbjQAc2FuZHlicm93bgBzZWFncmVlbgBzZWFncmVlbjEAc2VhZ3JlZW4yAHNlYWdyZWVuMwBzZWFncmVlbjQAc2Vhc2hlbGwAc2Vhc2hlbGwxAHNlYXNoZWxsMgBzZWFzaGVsbDMAc2Vhc2hlbGw0AHNpZW5uYQBzaWVubmExAHNpZW5uYTIAc2llbm5hMwBzaWVubmE0AHNreWJsdWUAc2t5Ymx1ZTEAc2t5Ymx1ZTIAc2t5Ymx1ZTMAc2t5Ymx1ZTQAc2xhdGVibHVlAHNsYXRlYmx1ZTEAc2xhdGVibHVlMgBzbGF0ZWJsdWUzAHNsYXRlYmx1ZTQAc2xhdGVncmF5AHNsYXRlZ3JheTEAc2xhdGVncmF5MgBzbGF0ZWdyYXkzAHNsYXRlZ3JheTQAc2xhdGVncmV5AHNub3cAc25vdzEAc25vdzIAc25vdzMAc25vdzQAc3ByaW5nZ3JlZW4Ac3ByaW5nZ3JlZW4xAHNwcmluZ2dyZWVuMgBzcHJpbmdncmVlbjMAc3ByaW5nZ3JlZW40AHN0ZWVsYmx1ZQBzdGVlbGJsdWUxAHN0ZWVsYmx1ZTIAc3RlZWxibHVlMwBzdGVlbGJsdWU0AHRhbgB0YW4xAHRhbjIAdGFuMwB0YW40AHRoaXN0bGUAdGhpc3RsZTEAdGhpc3RsZTIAdGhpc3RsZTMAdGhpc3RsZTQAdG9tYXRvAHRvbWF0bzEAdG9tYXRvMgB0b21hdG8zAHRvbWF0bzQAdHVycXVvaXNlAHR1cnF1b2lzZTEAdHVycXVvaXNlMgB0dXJxdW9pc2UzAHR1cnF1b2lzZTQAdmlvbGV0AHZpb2xldHJlZAB2aW9sZXRyZWQxAHZpb2xldHJlZDIAdmlvbGV0cmVkMwB2aW9sZXRyZWQ0AHdoZWF0AHdoZWF0MQB3aGVhdDIAd2hlYXQzAHdoZWF0NAB3aGl0ZQB3aGl0ZXNtb2tlAHllbGxvdwB5ZWxsb3cxAHllbGxvdzIAeWVsbG93MwB5ZWxsb3c0AHllbGxvd2dyZWVuAGxhY2sAaGl0ZQBpZ2h0Z3JleQBYMTEvAC8lcy8lcwBpbWFnZXNjYWxlAGZhbHNlAGJsYWNrAGRvdHRlZABkYXNoZWQAY3AtPnNyYwBodG1sdGFibGUuYwBlbWl0X2h0bWxfaW1nAGNwLT5zcmNbMF0AdHJhbnNwYXJlbnQAXyVkACVkADIAMwA0ADUANgA3ADgAOQAxMAAxMQAxMgAxMwAxNAAxNQAxNgAxNwAxOAAxOQAyMABBZ25vZGVpbmZvX3QAQWdlZGdlaW5mb190AHJvd2cAY29sZwBBZ3JhcGhpbmZvX3QAZGVseCA+PSAwAHBvc19odG1sX3RibABkZWx5ID49IDAAdGFibGUgc2l6ZSB0b28gc21hbGwgZm9yIGNvbnRlbnQKAGZpeGVkIHRhYmxlIHNpemUgd2l0aCB1bnNwZWNpZmllZCB3aWR0aCBvciBoZWlnaHQKAGNlbGwgc2l6ZSB0b28gc21hbGwgZm9yIGNvbnRlbnQKAGZpeGVkIGNlbGwgc2l6ZSB3aXRoIHVuc3BlY2lmaWVkIHdpZHRoIG9yIGhlaWdodAoATm8gb3IgaW1wcm9wZXIgaW1hZ2UgZmlsZT0iJXMiCgBwZW5jb2xvcgAtPgBmUFEuYwBQUWNoZWNrAEhlYXAgb3ZlcmZsb3cKACUhUFMtQWRvYmUtMi4wCi9ub2RlIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIGZpbGwKfSBkZWYKL2NlbGwgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICAveSBleGNoIGRlZgogIC94IGV4Y2ggZGVmCiAgbmV3cGF0aAogIHggeSBtb3ZldG8KICB4IFkgbGluZXRvCiAgWCBZIGxpbmV0bwogIFggeSBsaW5ldG8KICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgBzaG93cGFnZQoAZmFpbGVkIGF0IG5vZGUgJWRbMF0KAG5wLT5jZWxsc1swXQBtYXplLmMAY2hrU2dyYXBoAGZhaWxlZCBhdCBub2RlICVkWzFdCgBucC0+Y2VsbHNbMV0AZGl0ZW1zAGZpbmRTVmVydAAlJSUlUGFnZTogMSAxCiUlJSVQYWdlQm91bmRpbmdCb3g6ICVkICVkICVkICVkCgAlZiAlZiB0cmFuc2xhdGUKADAgMCAxIHNldHJnYmNvbG9yCgAlZiAlZiAlZiAlZiBub2RlCgAwIDAgMCBzZXRyZ2Jjb2xvcgoAJWYgJWYgJWYgJWYgY2VsbAoAMSAwIDAgc2V0cmdiY29sb3IKAHVuZXhwZWN0ZWQgY2FzZSBpbiBsb2NhdGVfZW5kcG9pbnQKADAAdHJhcGV6b2lkLmMAbG9jYXRlX2VuZHBvaW50AGFkZF9zZWdtZW50OiBlcnJvcgoAbmV3bm9kZTogUXVlcnktdGFibGUgb3ZlcmZsb3cKAG5ld25vZGUAbmV3dHJhcDogVHJhcGV6b2lkLXRhYmxlIG92ZXJmbG93ICVkCgBuZXd0cmFwAGluZGV4LmMAUlRyZWVTZWFyY2gAbi0+bGV2ZWwgPj0gMABSVHJlZUluc2VydABsZXZlbCA+PSAwICYmIGxldmVsIDw9ICgqbiktPmxldmVsAHItPmJvdW5kYXJ5W2ldIDw9IHItPmJvdW5kYXJ5W05VTURJTVMgKyBpXQByICYmIG4gJiYgbmV3AFJUcmVlSW5zZXJ0MgBsZXZlbCA+PSAwICYmIGxldmVsIDw9IG4tPmxldmVsAEZBTFNFAG5vZGUuYwBOb2RlQ292ZXIAciAmJiBuAFBpY2tCcmFuY2gAQWRkQnJhbmNoAGkgPCBOT0RFQ0FSRABuZXcAbiAmJiBpID49IDAgJiYgaSA8IE5PREVDQVJEAERpc2NvbkJyYW5jaAByAHJlY3RhbmdsZS5jAFJlY3RBcmVhAHIgJiYgcnIAQ29tYmluZVJlY3QAciAmJiBzAE92ZXJsYXAAbgBzcGxpdC5xLmMAU3BsaXROb2RlAGIAbi0+Y291bnQgKyAoKm5uKS0+Y291bnQgPT0gTk9ERUNBUkQgKyAxAExvYWROb2RlcwBxAHAAcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnBhcnRpdGlvbltpXSA9PSAwIHx8IHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5wYXJ0aXRpb25baV0gPT0gMQBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0uY291bnRbMF0gKyBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0uY291bnRbMV0gPT0gTk9ERUNBUkQgKyAxAE1ldGhvZFplcm8AcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLmNvdW50WzBdID49IHJ0cC0+TWluRmlsbCAmJiBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0uY291bnRbMV0gPj0gcnRwLT5NaW5GaWxsACFydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0udGFrZW5baV0AQ2xhc3NpZnkAR2V0QnJhbmNoZXMAbi0+YnJhbmNoW2ldLmNoaWxkAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoAgICAgICEAxZAQAfUAgDBxITFFcWFwgLaQwfCgUMDikRKw8tEC8wIDIGNDUbHB0eCwwhIiMkJSYnKAwYGRcEChscGiAqCiEiIyQlJicoDAoOUwosWDFYWFhYWFgMGxwPLlgzISIjJCUmJygbHP9T//8hIiMkJSYnKAz//wX///8JFP//////DBsc/xAVFiEiIyQlJicoGxz/////ISIjJCUmJygM/xITFBEWF////////wwbHP///xIhIiMkJSYnKBsc/////yEiIyQlJicoDP///////xP///////8MGxz/////ISIjJCUmJygbHP////8hIiMkJSYnKBITFBUWFxgZ////////////IyQlJicbEhMUFhciNmgBHzhWISACGxsbXhsbNzlwNtLCTwQ8IkciPyJEIiJYImUiIgUGX2A5BAcICQoLDA0OBGZnXWptBQZvWDtxBwgJCgsMDQ4Ecjxbcz5hRhsSExQWFwQFBj9BYkkHCAkKCwwNDgUGAFwAAAcICQoLDA0OBAAATwAAAFNCAAAAAAAEBQYARFRVBwgJCgsMDQ4FBgAAAAAHCAkKCwwNDgQAKiwuRzEzAAAAAAAABAUGAAAASgcICQoLDA0OBQYAAAAABwgJCgsMDQ4EAAAAAAAATAAAAAAAAAQFBgAAAAAHCAkKCwwNDgUGAAAAAAcICQoLDA0OKSstLzAyNDUAAAAAAAAAAAApKy0wMgAELwAkIwASFBYaHB4gGAAFBy8vLwAvLwAACQgoAAABIgIGAAAAAAAIAAAAAAAAAAAAAAAAACUDJhMKKRULKhcOLRkRGwwrHQ0sHw8hEAAzADAAL0MAMQAvADUuJ0IyQQA6OAA8NEUANgBAAAA/AEQ3Ozk9AAIDAwEBAgEBAQMDAwMDAwMDAQEBAQEBAQEBAQEBAQEBAQIBAQIABgEDAwMDAwEAAQIDAAQBAgMABAAEAAQAAwIBAgECAVN5bnRheCBlcnJvcjogbm9uLXNwYWNlIHN0cmluZyB1c2VkIGJlZm9yZSA8VEFCTEU+AFN5bnRheCBlcnJvcjogbm9uLXNwYWNlIHN0cmluZyB1c2VkIGFmdGVyIDwvVEFCTEU+AAApKioqKywsLS0tLS0tLS0tLS4vMDEyMzQ1Njc4OTo7PD0+Pj8/QUBCQkJCQkJDQ0REREZFR0dHSUhKSEtITEhNTU5OT0//Aw8QESM6JD0lQBVDJkUnSBhLGU0aKBxOHR5QUVJZWmxrbmNkV2ltZW1vcnkgZXhoYXVzdGVkACVzIGluIGxpbmUgJWQgCgAuLi4gJXMgLi4uCgBUQUJMRQBUUgBUSABURABIVE1MAEZPTlQAQgBVAE8ASQBTVVAAU1VCAFMAQlIASFIAVlIASU1HAFVua25vd24gSFRNTCBlbGVtZW50IDwlcz4gb24gbGluZSAlZCAKADxJTUc+AElsbGVnYWwgYXR0cmlidXRlICVzIGluICVzIC0gaWdub3JlZAoAc2NhbGUAc3JjADxCUj4AYWxpZ24ASUdIVABFRlQARU5URVIASWxsZWdhbCB2YWx1ZSAlcyBmb3IgQUxJR04gLSBpZ25vcmVkCgA8Rk9OVD4AY29sb3IAZmFjZQBwb2ludC1zaXplAFBPSU5ULVNJWkUASW1wcm9wZXIgJXMgdmFsdWUgJXMgLSBpZ25vcmVkACVzIHZhbHVlICVzID4gJWQgLSB0b28gbGFyZ2UgLSBpZ25vcmVkACVzIHZhbHVlICVzIDwgJWQgLSB0b28gc21hbGwgLSBpZ25vcmVkADxURD4AYmFsaWduAGJnY29sb3IAYm9yZGVyAGNlbGxwYWRkaW5nAGNlbGxzcGFjaW5nAGNvbHNwYW4AZml4ZWRzaXplAGdyYWRpZW50YW5nbGUAaGVpZ2h0AGhyZWYAaWQAcG9ydAByb3dzcGFuAHNpZGVzAHN0eWxlAHRhcmdldAB0aXRsZQB0b29sdGlwAHZhbGlnbgB3aWR0aABXSURUSABPVFRPTQBPUABJRERMRQBJbGxlZ2FsIHZhbHVlICVzIGZvciBWQUxJR04gLSBpZ25vcmVkCgAgLABPVU5ERUQAQURJQUwASWxsZWdhbCB2YWx1ZSAlcyBmb3IgU1RZTEUgLSBpZ25vcmVkCgBTT0xJRABJTlZJU0lCTEUASU5WSVMARE9UVEVEAERBU0hFRABVbnJlY29nbml6ZWQgY2hhcmFjdGVyICclYycgKCVkKSBpbiBzaWRlcyBhdHRyaWJ1dGUKAFJPV1NQQU4AUk9XU1BBTiB2YWx1ZSBjYW5ub3QgYmUgMCAtIGlnbm9yZWQKAEhFSUdIVABHUkFESUVOVEFOR0xFAFJVRQBBTFNFAElsbGVnYWwgdmFsdWUgJXMgZm9yIEZJWEVEU0laRSAtIGlnbm9yZWQKAENPTFNQQU4AQ09MU1BBTiB2YWx1ZSBjYW5ub3QgYmUgMCAtIGlnbm9yZWQKAENFTExTUEFDSU5HAENFTExQQURESU5HAEJPUkRFUgBJbGxlZ2FsIHZhbHVlICVzIGZvciBCQUxJR04gaW4gVEQgLSBpZ25vcmVkCgBFWFQASWxsZWdhbCB2YWx1ZSAlcyBmb3IgQUxJR04gaW4gVEQgLSBpZ25vcmVkCgA8VEFCTEU+AGNlbGxib3JkZXIAY29sdW1ucwByb3dzAFVua25vd24gdmFsdWUgJXMgZm9yIFJPV1MgLSBpZ25vcmVkCgBVbmtub3duIHZhbHVlICVzIGZvciBDT0xVTU5TIC0gaWdub3JlZAoAQ0VMTFNCT1JERVIAPEhUTUw+ADwvSFRNTD4ALS0ATGFiZWwgY2xvc2VkIGJlZm9yZSBlbmQgb2YgSFRNTCBlbGVtZW50CgBVbmNsb3NlZCBjb21tZW50CgBqID09IDAAY3Z0LmMAUG9ic3BhdGgAcm91dGUuYwBsaWJwYXRoLyVzOiVkOiAlcwoAc2hvcnRlc3QuYwBzb3VyY2UgcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBkZXN0aW5hdGlvbiBwb2ludCBub3QgaW4gYW55IHRyaWFuZ2xlAGNhbm5vdCBmaW5kIHRyaWFuZ2xlIHBhdGgAY2Fubm90IG1hbGxvYyBvcHMAY2Fubm90IHJlYWxsb2Mgb3BzAHRyaWFuZ3VsYXRpb24gZmFpbGVkAGNhbm5vdCBtYWxsb2MgdHJpcwBjYW5ub3QgcmVhbGxvYyB0cmlzAGNhbm5vdCBtYWxsb2MgZHEucG5scwBjYW5ub3QgcmVhbGxvYyBkcS5wbmxzAGNhbm5vdCBtYWxsb2MgcG5scwBjYW5ub3QgbWFsbG9jIHBubHBzAGNhbm5vdCByZWFsbG9jIHBubHMAY2Fubm90IHJlYWxsb2MgcG5scHMAQ0RBVEEASUQASURSRUYASURSRUZTAEVOVElUWQBFTlRJVElFUwBOTVRPS0VOAE5NVE9LRU5TAE5PVEFUSU9OKAAoAHwAaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlAGh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvAHhtbD1odHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UAL2Rldi91cmFuZG9tAGZhbGxiYWNrKDQpAGdldHRpbWVvZmRheV9yZXMgPT0gMAB4bWxwYXJzZS5jAGdhdGhlcl90aW1lX2VudHJvcHkARVhQQVRfRU5UUk9QWV9ERUJVRwAxAEVudHJvcHk6ICVzIC0tPiAweCUwKmx4ICglbHUgYnl0ZXMpCgBpbnZhbGlkIGFyZ3VtZW50AHByZWZpeCBtdXN0IG5vdCBiZSBib3VuZCB0byBvbmUgb2YgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSBuYW1lcwByZXNlcnZlZCBwcmVmaXggKHhtbG5zKSBtdXN0IG5vdCBiZSBkZWNsYXJlZCBvciB1bmRlY2xhcmVkAHJlc2VydmVkIHByZWZpeCAoeG1sKSBtdXN0IG5vdCBiZSB1bmRlY2xhcmVkIG9yIGJvdW5kIHRvIGFub3RoZXIgbmFtZXNwYWNlIG5hbWUAY2Fubm90IHN1c3BlbmQgaW4gZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0eQBwYXJzaW5nIGZpbmlzaGVkAHBhcnNpbmcgYWJvcnRlZABwYXJzZXIgbm90IHN1c3BlbmRlZABwYXJzZXIgc3VzcGVuZGVkAGlsbGVnYWwgY2hhcmFjdGVyKHMpIGluIHB1YmxpYyBpZAB0ZXh0IGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZABYTUwgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkAGluY29tcGxldGUgbWFya3VwIGluIHBhcmFtZXRlciBlbnRpdHkAbXVzdCBub3QgdW5kZWNsYXJlIHByZWZpeAB1bmJvdW5kIHByZWZpeABjYW5ub3QgY2hhbmdlIHNldHRpbmcgb25jZSBwYXJzaW5nIGhhcyBiZWd1bgByZXF1ZXN0ZWQgZmVhdHVyZSByZXF1aXJlcyBYTUxfRFREIHN1cHBvcnQgaW4gRXhwYXQAZW50aXR5IGRlY2xhcmVkIGluIHBhcmFtZXRlciBlbnRpdHkAdW5leHBlY3RlZCBwYXJzZXIgc3RhdGUgLSBwbGVhc2Ugc2VuZCBhIGJ1ZyByZXBvcnQAZG9jdW1lbnQgaXMgbm90IHN0YW5kYWxvbmUAZXJyb3IgaW4gcHJvY2Vzc2luZyBleHRlcm5hbCBlbnRpdHkgcmVmZXJlbmNlAHVuY2xvc2VkIENEQVRBIHNlY3Rpb24AZW5jb2Rpbmcgc3BlY2lmaWVkIGluIFhNTCBkZWNsYXJhdGlvbiBpcyBpbmNvcnJlY3QAdW5rbm93biBlbmNvZGluZwBYTUwgb3IgdGV4dCBkZWNsYXJhdGlvbiBub3QgYXQgc3RhcnQgb2YgZW50aXR5AHJlZmVyZW5jZSB0byBleHRlcm5hbCBlbnRpdHkgaW4gYXR0cmlidXRlAHJlZmVyZW5jZSB0byBiaW5hcnkgZW50aXR5AHJlZmVyZW5jZSB0byBpbnZhbGlkIGNoYXJhY3RlciBudW1iZXIAYXN5bmNocm9ub3VzIGVudGl0eQByZWN1cnNpdmUgZW50aXR5IHJlZmVyZW5jZQB1bmRlZmluZWQgZW50aXR5AGlsbGVnYWwgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UAanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50AGR1cGxpY2F0ZSBhdHRyaWJ1dGUAbWlzbWF0Y2hlZCB0YWcAcGFydGlhbCBjaGFyYWN0ZXIAdW5jbG9zZWQgdG9rZW4Abm90IHdlbGwtZm9ybWVkIChpbnZhbGlkIHRva2VuKQBubyBlbGVtZW50IGZvdW5kAHN5bnRheCBlcnJvcgBvdXQgb2YgbWVtb3J5AAIDBAUGBwgAAAkKCwwNDg8QEQAAAAAAAAAAAAAAABITABQAAAAAAAAAAAAAAAAAABUWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARcAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAxobHB0eAAAfICEiIyQlEBEAAAAAAAAAAAAAAAASEyYUAAAAAAAAAAAAAAAAAAAnFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEXAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ0RBVEFbVVMtQVNDSUkAVVRGLTE2AFVURi0xNkJFAFVURi0xNkxFAHZlcnNpb24AZW5jb2RpbmcAc3RhbmRhbG9uZQBET0NUWVBFAFNZU1RFTQBQVUJMSUMARU5USVRZAEFUVExJU1QARUxFTUVOVABOT1RBVElPTgBJTkNMVURFAElHTk9SRQBFTVBUWQBBTlkAUENEQVRBAElNUExJRUQAUkVRVUlSRUQARklYRUQAQ0RBVEEASUQASURSRUYASURSRUZTAEVOVElUSUVTAE5NVE9LRU4ATk1UT0tFTlMATkRBVEEAVCEiGQ0BAgMRSxwMEAQLHRIeJ2hub3BxYiAFBg8TFBUaCBYHKCQXGAkKDhsfJSODgn0mKis8PT4/Q0dKTVhZWltcXV5fYGFjZGVmZ2lqa2xyc3R5ent8AElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE5vIGVycm9yIGluZm9ybWF0aW9uAAASEBMUFRYXGBkaGxwdHh8gIRAQIiMQJCUmJygpKisQLC0uES8wERExERERMjM0NTY3ODkREBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDoQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDsQPD0+P0BBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEEIQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEEMQEEQQRUZHEEgQSRAQEBBKS0xNEBBOEE9QEBAQEFEQEBAQEBAQEBAQEBAQUhAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQUxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFRVVlcQEFhZEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFoQW1xdXl9gYWIQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////8AAAAA/v8A/AEAAPgBAAB4AAAAAP/73/sAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwA/P/gr//////////////f//////8gQLAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA/AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAhv7///8AQEkAAAAAABgA3/8AyAAAAAAAAAABADwAAAAAAAAAAAAAAAAQ4AEeAGD/vwAAAAAAAP8HAAAAAAAAAAAAAAAAAAAAAAAAAPjPAwAAAAMAIP9/AAAATgAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAABAAIB4AMAABAAAAAAAAAAAQACAAAAAA/A8AAAAAAAAAEAAgAAAAAAAAAAAAAAAAABAAIAAAAAADAAAAAAAAAAAQACAAAAAA/QAAAAAAAAAAAAAgAAAAAP8HAAAAAAAAAAAAIAAAAAAA/wAAAAAAAAAQACAAAAAAAAAAAAAAAAAAAAAgAAAAAD8CAAAAAAAAAAAABAAAAAAQAAAAAAAAgACAwN8ADAAAAAAAAAAAAAAAAAAfAAAAAAAA/v///wD8//8AAAAAAAAAAPwAAAAAAADA/9//BwAAAAAAAAAAAACABgD8AAAYPgAAgL8AzAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAYP///x8AAP8DAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAQAAGAAAAAAAAAAAADgAAAAAEAAAAHAAAAAAAAAAAAAAAAAAAAAwAAD+fy8AAP8D/38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADjEAAAAAAAAAAAAAAAAAAAAAAADE/////wAAAMAAAAAAAAAAAAEA4J8AAAAAfz8AAAAAAAAAAAAAAAAAAAAAEAAQAAD8////HwAAAAAADAAAAAAAAEAADPAAAAAAAADA+AAAAAAAAADAAAAAAAAAAAD/AP///yEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////9/AADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA+AA4ADgAGCA+P////z//////38f/PF//38AAP///wMAAP////8BAHsD0MGvQgAMH7z//wAAAAAAAv//////////////////////////////////////////////////////////DwD/////fwAAAP8HAAD/////////////PwAAAAAAAPz///7/////////////////////////////////////////////////////H/8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4IcD/gAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAA//////9//w8AAAAAAAAAAP////v/////////////DwD//////////////////////////////////z8AAAD/Dx7///8B/MHgAAAAAAAAAAAAAAAeAQAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAA/////w8AAAD///9/////////////////////////////////////fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAA////////fwAAAAAAAMAA4AAAAAAAAAAAAAAAgA9wAAAAAAAAAAAAAAAAAAD/AP//fwADAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAARAgAAAAP/wMAAAAAAADwAAAAAAAAAAAAEMAAAP//AwcAAAAAAPgAAAAACIAAAAAAAAAAAAAACAD/PwDAAAAAAAAAAAAAAAAAAAAA8AAAgAsAAAAAAAAAgAIAAMAAAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAPz/AwAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMP///wN/AP/////3/38PAAAAAAAAAAAAAAAAAAAAAACA/v8A/AEAAPgBAAD4PwAAAAAAAAAAAAAAAAAAAH9/ADCH//////+P/wAAAAAAAOD//wf/DwAAAAAAAP//////PwAAAAAPAAAAAAAAAAAAAAAAAACAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCPAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/wD/AQAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwD/8/z8AAAADAAAAAAAA/gMAAAAAAAAAAAAAAAAAGAAPAAAAAAAAAAAAAAAAAAAA4QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACABwAAAAAAAAAAAAAAAAD///////////////////////////////////////8/AP////9//v///////////////////////////z8AAAAA//////////8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////fwD//wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAgAAAAIAAAgAAAAIAAAgAAAAIAAAAACAAAAAgAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAP//////D////////////////w8A/3/+f/7//v8AAAAA/wf///9//////////w///////wcAAAAAAAAAAMD///8HAP//////B/8BAwAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8BAL///////////x///w8A/////98HAAD//wEA/////////3/9/////////////////////////////x7/////////Pw8A////AAAAAAAAAAAAAAAAAAAAAAAA+P//////////4f8AAAAAAAD//////////z8AAAAAAAAA//////////////////8PAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////AAECAwQFBgcICf////////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wABAgQHAwYFABIRExQVFhcYGRobHB0eHyAhESIjJBElJicoKSorLBEtLi8QEDAQEBAQEBAQMTIzEDQ1EBARERERERERERERERERERERERERERERERERNhERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERETcREREROBE5Ojs8PT4RERERERERERERERERERERERERERERERERERERERERERERERERERERERERPxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBFAQRFCQ0RFRkdISRAQEEpLTE1OEBAQT1AQEBAQURAQEBAQEBAQEBEREVJTEBAQEBAQEBAQEBARERERVBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBERVRAQEBBWEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFcQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFhZWlsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQXBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////////////////////////////////wAAAAAAAAAA/v//B/7//wcAAAAAAAQgBP//f////3//////////////////////////////////w/8DAB9QAAAAAAAAAAAAACAAAAAAAN88QNf///v///////////+///////////////////////8D/P////////////////////////8A/v///38C/v////8AAAAAAP+/tgD///8HBwAAAP8H//////////7/w////////////////+8f/uH/nwAA////////AOD///////////////8DAP//////BzAE/////P8fAAD///8BAAAAAAAAAAD9HwAAAAAAAPAD/3//////////7//f4f/P//7+7p/5///9xeOfWYCwz/8DAO6H+f///W3DhxkCXsD/PwDuv/v///3t478bAQDP/wAA7p/5///97eOfGcCwz/8CAOzHPdYYx//Dxx2BAMD/AADu3/3///3v498dYAPP/wAA7N/9///97+PfHWBAz/8GAOzf/f/////n312AAM//APzs/3/8///7L3+AX/8AAAwA/v////9//wc/IP8DAAAAAJYl8P6u7P87XyD/8wAAAAABAAAA/wMAAP/+////H/7/A////v///x8AAAAAAAAAAP///////3/5/wP//+fB//9/QP8z/////78g///////3////////////PX89//////89/////z1/Pf9//////////z3//////////4cAAAAA//8AAP////////////8fAP7//////////////////////////////////////////////////////////5////7//wf////////////HAQD/3w8A//8PAP//DwD/3w0A////////z///AYAQ/wMAAAAA/wP//////////////wD//////wf//////////z8A////H/8P/wHA/////z8fAP//////D////wP/AwAAAAD///8P/////////3/+/x8A/wP/A4AAAAAAAAAAAAAAAP///////+//7w//AwAAAAD///////P///////+//wMA////////PwD/4///////PwAAAAAAAAAAAAAAAADebwD///////////////////////////////8AAAAAAAAAAP//Pz//////Pz//qv///z/////////fX9wfzw//H9wfAAAAAAAAAAAAAAAAAAACgAAA/x8AAAAAAAAAAAAAAACE/C8+UL3/8+BDAAD//////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA////////AwAA//////9///////9//////////////////////x94DAD/////vyD/////////gAAA//9/AH9/f39/f39//////wAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAP4DPh/+////////////f+D+//////////////fg/////z/+/////////////38AAP///wcAAAAAAAD///////////////////////////////8/AAAAAAAAAAAA/////////////////////////////////x8AAAAAAAD//////////////////////x8AAAAAAAAAAP//////P/8f////DwAA//////9/8I////+A/////////////wAAAACA//z///////////////95DwD/BwAAAAAAAAAAAP+79////wAAAP///////w8A//////////8PAP8DAAD8CP//////B/////8HAP///x/////////3/wCA/wMAAAAA////////fwD/P/8D//9/BP////////9/BQAAOP//PAB+fn4Af38AAAAAAAAAAAAAAAAAAAAAAAD//////wf/A///////////////////////////DwD//3/4//////8P/////////////////z//////////////////AwAAAAB/APjg//1/X9v/////////////////AwAAAPj///////////////8/AAD///////////z///////8AAAAAAP8PAAAAAAAAAAAAAAAAAADf/////////////////////x8AAP8D/v//B/7//wfA/////////////3/8/PwcAAAAAP/v//9///+3/z//PwAAAAD///////////////////8HAAAAAAAAAAD///////8fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////H////////wEAAAAAAP///38AAP///wcAAAAAAAD///8//////w//PgAAAAAA/////////////////////////z//AwAAAAAAAAAAAAA//f////+/kf//PwAAAAAAAAAAAAAAAAAAAAAAAAAAAP//PwD///8DAAAAAAAAAAD/////////wAAAAAAAAAAAb/Dv/v//DwAAAAAA////HwAAAAAAAAAAAAAAAAAAAAD///////8/AP//PwD//wcAAAAAAAAAAAAAAAAAAAAAAP///////////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8/AAAAwP8AAPz///////8BAAD///8B/wP////////H/wAAAAAAAAAA//////////8eAP8DAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8/AP8DAAAAAAAA/////////////////38AAAAAAAAAAAAAAAAAAAAAAAD///////////////8HAAAAAAAAAAAAAAAAAAAAAAAAAP//////fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////x8A//////9/AAD4/wAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////9///////////99k3v/r7/////////+/59/f////e1/8/f//////////////////////////////////////////////////////P/////3///f////3///f////3///f////3/////9/////f//98/////////v////lv73CoTqlqqW9/de//v/D+77/w8AAAAAAAAAAExDX0FMTABMQ19DVFlQRQAAAABMQ19OVU1FUklDAABMQ19USU1FAAAAAABMQ19DT0xMQVRFAABMQ19NT05FVEFSWQBMQ19NRVNTQUdFUwBMQU5HAEMuVVRGLTgAUE9TSVgATVVTTF9MT0NQQVRIABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBOQU4AMDEyMzQ1Njc4OUFCQ0RFRi4AYWxudW0AYWxwaGEAYmxhbmsAY250cmwAZGlnaXQAZ3JhcGgAbG93ZXIAcHJpbnQAcHVuY3QAc3BhY2UAdXBwZXIAeGRpZ2l0AEMuVVRGLTgAAAAAAAAAAABDAC9wcm9jL3NlbGYvZmQvAHJ3YQBpbmZpbml0eQBuYW4ACQAKAA0ADAAHABsAW1s6YWxudW06XV9dAFteWzphbG51bTpdX10AW1s6c3BhY2U6XV0AW15bOnNwYWNlOl1dAFtbOmRpZ2l0Ol1dAFteWzpkaWdpdDpdXQAvdG1wL3RtcGZpbGVfWFhYWFhYAHcr\";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___assert_fail(condition,filename,line,func){abort(\"Assertion failed: \"+Pointer_stringify(condition)+\", at: \"+[filename?Pointer_stringify(filename):\"unknown filename\",line,func?Pointer_stringify(func):\"unknown function\"])}function _emscripten_get_now(){abort()}function _emscripten_get_now_is_monotonic(){return ENVIRONMENT_IS_NODE||typeof dateNow!==\"undefined\"||(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self[\"performance\"]&&self[\"performance\"][\"now\"]}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if(clk_id===1&&_emscripten_get_now_is_monotonic()){now=_emscripten_get_now()}else{___setErrNo(ERRNO_CODES.EINVAL);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(){return _clock_gettime.apply(null,arguments)}function ___lock(){}function ___map_file(pathname,size){___setErrNo(ERRNO_CODES.EPERM);return-1}var ERRNO_MESSAGES={0:\"Success\",1:\"Not super-user\",2:\"No such file or directory\",3:\"No such process\",4:\"Interrupted system call\",5:\"I/O error\",6:\"No such device or address\",7:\"Arg list too long\",8:\"Exec format error\",9:\"Bad file number\",10:\"No children\",11:\"No more processes\",12:\"Not enough core\",13:\"Permission denied\",14:\"Bad address\",15:\"Block device required\",16:\"Mount device busy\",17:\"File exists\",18:\"Cross-device link\",19:\"No such device\",20:\"Not a directory\",21:\"Is a directory\",22:\"Invalid argument\",23:\"Too many open files in system\",24:\"Too many open files\",25:\"Not a typewriter\",26:\"Text file busy\",27:\"File too large\",28:\"No space left on device\",29:\"Illegal seek\",30:\"Read only file system\",31:\"Too many links\",32:\"Broken pipe\",33:\"Math arg out of domain of func\",34:\"Math result not representable\",35:\"File locking deadlock error\",36:\"File or path name too long\",37:\"No record locks available\",38:\"Function not implemented\",39:\"Directory not empty\",40:\"Too many symbolic links\",42:\"No message of desired type\",43:\"Identifier removed\",44:\"Channel number out of range\",45:\"Level 2 not synchronized\",46:\"Level 3 halted\",47:\"Level 3 reset\",48:\"Link number out of range\",49:\"Protocol driver not attached\",50:\"No CSI structure available\",51:\"Level 2 halted\",52:\"Invalid exchange\",53:\"Invalid request descriptor\",54:\"Exchange full\",55:\"No anode\",56:\"Invalid request code\",57:\"Invalid slot\",59:\"Bad font file fmt\",60:\"Device not a stream\",61:\"No data (for no delay io)\",62:\"Timer expired\",63:\"Out of streams resources\",64:\"Machine is not on the network\",65:\"Package not installed\",66:\"The object is remote\",67:\"The link has been severed\",68:\"Advertise error\",69:\"Srmount error\",70:\"Communication error on send\",71:\"Protocol error\",72:\"Multihop attempted\",73:\"Cross mount point (not really error)\",74:\"Trying to read unreadable message\",75:\"Value too large for defined data type\",76:\"Given log. name not unique\",77:\"f.d. invalid for this operation\",78:\"Remote address changed\",79:\"Can   access a needed shared lib\",80:\"Accessing a corrupted shared lib\",81:\".lib section in a.out corrupted\",82:\"Attempting to link in too many libs\",83:\"Attempting to exec a shared library\",84:\"Illegal byte sequence\",86:\"Streams pipe error\",87:\"Too many users\",88:\"Socket operation on non-socket\",89:\"Destination address required\",90:\"Message too long\",91:\"Protocol wrong type for socket\",92:\"Protocol not available\",93:\"Unknown protocol\",94:\"Socket type not supported\",95:\"Not supported\",96:\"Protocol family not supported\",97:\"Address family not supported by protocol family\",98:\"Address already in use\",99:\"Address not available\",100:\"Network interface is not configured\",101:\"Network is unreachable\",102:\"Connection reset by network\",103:\"Connection aborted\",104:\"Connection reset by peer\",105:\"No buffer space available\",106:\"Socket is already connected\",107:\"Socket is not connected\",108:\"Can't send after socket shutdown\",109:\"Too many references\",110:\"Connection timed out\",111:\"Connection refused\",112:\"Host is down\",113:\"Host is unreachable\",114:\"Socket already connected\",115:\"Connection already in progress\",116:\"Stale file handle\",122:\"Quota exceeded\",123:\"No medium (in tape drive)\",125:\"Operation canceled\",130:\"Previous owner died\",131:\"State not recoverable\"};var PATH={splitPath:(function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter((function(p){return!!p})),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))}),join2:(function(l,r){return PATH.normalize(l+\"/\"+r)}),resolve:(function(){var resolvedPath=\"\",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!==\"string\"){throw new TypeError(\"Arguments to path.resolve must be strings\")}else if(!path){return\"\"}resolvedPath=path+\"/\"+resolvedPath;resolvedAbsolute=path.charAt(0)===\"/\"}resolvedPath=PATH.normalizeArray(resolvedPath.split(\"/\").filter((function(p){return!!p})),!resolvedAbsolute).join(\"/\");return(resolvedAbsolute?\"/\":\"\")+resolvedPath||\".\"}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!==\"\")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!==\"\")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split(\"/\"));var toParts=trim(to.split(\"/\"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push(\"..\")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join(\"/\")})};var TTY={ttys:[],init:(function(){}),shutdown:(function(){}),register:(function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)}),stream_ops:{open:(function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}stream.tty=tty;stream.seekable=false}),close:(function(stream){stream.tty.ops.flush(stream.tty)}),flush:(function(stream){stream.tty.ops.flush(stream.tty)}),read:(function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead}),write:(function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO)}for(var i=0;i<length;i++){try{stream.tty.ops.put_char(stream.tty,buffer[offset+i])}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}}if(length){stream.node.timestamp=Date.now()}return i})},default_tty_ops:{get_char:(function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!=\"win32\";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync(\"/dev/stdin\",\"r\");usingDevice=true}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf(\"EOF\")!=-1)bytesRead=0;else throw e}if(usingDevice){fs.closeSync(fd)}if(bytesRead>0){result=buf.slice(0,bytesRead).toString(\"utf-8\")}else{result=null}}else if(typeof window!=\"undefined\"&&typeof window.prompt==\"function\"){result=window.prompt(\"Input: \");if(result!==null){result+=\"\\n\"}}else if(typeof readline==\"function\"){result=readline();if(result!==null){result+=\"\\n\"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module[\"print\"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module[\"print\"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module[\"printErr\"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module[\"printErr\"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,\"/\",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i<node.usedBytes;++i)arr.push(node.contents[i]);return arr}return node.contents}),getFileDataAsTypedArray:(function(node){if(!node.contents)return new Uint8Array;if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)}),expandFileStorage:(function(node,newCapacity){if(node.contents&&node.contents.subarray&&newCapacity>node.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.length<newCapacity)node.contents.push(0)}),resizeFileStorage:(function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length<newSize)node.contents.push(0);node.usedBytes=newSize}),node_ops:{getattr:(function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr}),setattr:(function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}}),lookup:(function(parent,name){throw FS.genericErrors[ERRNO_CODES.ENOENT]}),mknod:(function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)}),rename:(function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir}),unlink:(function(parent,name){delete parent.contents[name]}),rmdir:(function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}delete parent.contents[name]}),readdir:(function(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries}),symlink:(function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node}),readlink:(function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return node.link})},stream_ops:{read:(function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size}),write:(function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position}),allocate:(function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(ERRNO_CODES.ENOMEM)}buffer.set(contents,ptr)}return{ptr:ptr,allocated:allocated}}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0})}};var IDBFS={dbs:{},indexedDB:(function(){if(typeof indexedDB!==\"undefined\")return indexedDB;var ret=null;if(typeof window===\"object\")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,\"IDBFS used, but indexedDB not supported\");return ret}),DB_VERSION:21,DB_STORE_NAME:\"FILE_DATA\",mount:(function(mount){return MEMFS.mount.apply(null,arguments)}),syncfs:(function(mount,populate,callback){IDBFS.getLocalSet(mount,(function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,(function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)}))}))}),getDB:(function(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback(\"Unable to connect to IndexedDB\")}req.onupgradeneeded=(function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains(\"timestamp\")){fileStore.createIndex(\"timestamp\",\"timestamp\",{unique:false})}});req.onsuccess=(function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),getLocalSet:(function(mount,callback){var entries={};function isRealDir(p){return p!==\".\"&&p!==\"..\"}function toAbsolute(root){return(function(p){return PATH.join2(root,p)})}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:\"local\",entries:entries})}),getRemoteSet:(function(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,(function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readonly\");transaction.onerror=(function(e){callback(this.error);e.preventDefault()});var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index(\"timestamp\");index.openKeyCursor().onsuccess=(function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:\"remote\",db:db,entries:entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()})}catch(e){return callback(e)}}))}),loadLocalEntry:(function(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error(\"node type not supported\"))}}),storeLocalEntry:(function(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode)}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true})}else{return callback(new Error(\"node type not supported\"))}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp)}catch(e){return callback(e)}callback(null)}),removeLocalEntry:(function(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)}),loadRemoteEntry:(function(store,path,callback){var req=store.get(path);req.onsuccess=(function(event){callback(null,event.target.result)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),storeRemoteEntry:(function(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=(function(){callback(null)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),removeRemoteEntry:(function(store,path,callback){var req=store.delete(path);req.onsuccess=(function(){callback(null)});req.onerror=(function(e){callback(this.error);e.preventDefault()})}),reconcile:(function(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach((function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var completed=0;var db=src.type===\"remote\"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readwrite\");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type===\"local\"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type===\"local\"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process[\"binding\"](\"constants\");if(flags[\"fs\"]){flags=flags[\"fs\"]}NODEFS.flagsForNodeMap={\"1024\":flags[\"O_APPEND\"],\"64\":flags[\"O_CREAT\"],\"128\":flags[\"O_EXCL\"],\"0\":flags[\"O_RDONLY\"],\"2\":flags[\"O_RDWR\"],\"4096\":flags[\"O_SYNC\"],\"512\":flags[\"O_TRUNC\"],\"1\":flags[\"O_WRONLY\"]}}),bufferFrom:(function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,\"/\",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsForNode:(function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,\"\",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),write:(function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:(function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,\"/\",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split(\"/\");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join(\"/\");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0)}parent=createdParents[curr]}return parent}function base(path){var parts=path.split(\"/\");return parts[parts.length-1]}Array.prototype.forEach.call(mount.opts[\"files\"]||[],(function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate)}));(mount.opts[\"blobs\"]||[]).forEach((function(obj){WORKERFS.createNode(ensureParent(obj[\"name\"]),base(obj[\"name\"]),WORKERFS.FILE_MODE,0,obj[\"data\"])}));(mount.opts[\"packages\"]||[]).forEach((function(pack){pack[\"metadata\"].files.forEach((function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack[\"blob\"].slice(file.start,file.end))}))}));return root}),createNode:(function(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node}),node_ops:{getattr:(function(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)}}),setattr:(function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}}),lookup:(function(parent,name){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}),mknod:(function(parent,name,mode,dev){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),rename:(function(oldNode,newDir,newName){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),unlink:(function(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),rmdir:(function(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),readdir:(function(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries}),symlink:(function(parent,newName,oldPath){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}),readlink:(function(node){throw new FS.ErrnoError(ERRNO_CODES.EPERM)})},stream_ops:{read:(function(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+\" : \"+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:\"\",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split(\"/\").filter((function(p){return!!p})),false);var current=FS.root;var current_path=\"/\";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!==\"/\"?mount+\"/\"+path:mount+path}path=path?node.name+\"/\"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{\"r\":0,\"rs\":1052672,\"r+\":2,\"w\":577,\"wx\":705,\"xw\":705,\"w+\":578,\"wx+\":706,\"xw+\":706,\"a\":1089,\"ax\":1217,\"xa\":1217,\"a+\":1090,\"ax+\":1218,\"xa+\":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags===\"undefined\"){throw new Error(\"Unknown file open mode: \"+str)}return flags}),flagsToPermissionString:(function(flag){var perms=[\"r\",\"w\",\"rw\"][flag&3];if(flag&512){perms+=\"w\"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf(\"r\")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf(\"w\")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf(\"x\")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,\"x\");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,\"wx\")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,\"wx\");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!==\"r\"||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate===\"function\"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log(\"warning: \"+FS.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint===\"/\";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name===\".\"||name===\"..\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdirTree:(function(path,mode){var dirs=path.split(\"/\");var d=\"\";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+=\"/\"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=ERRNO_CODES.EEXIST)throw e}}}),mkdev:(function(path,mode,dev){if(typeof dev===\"undefined\"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)}),symlink:(function(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.symlink(parent,newname,oldpath)}),rename:(function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,\"w\");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate[\"willMovePath\"]){FS.trackingDelegate[\"willMovePath\"](old_path,new_path)}}catch(e){console.log(\"FS.trackingDelegate['willMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate[\"onMovePath\"])FS.trackingDelegate[\"onMovePath\"](old_path,new_path)}catch(e){console.log(\"FS.trackingDelegate['onMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message)}}),rmdir:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path)}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path)}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message)}}),readdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}return node.node_ops.readdir(node)}),unlink:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path)}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path)}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message)}}),readlink:(function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))}),stat:(function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return node.node_ops.getattr(node)}),lstat:(function(path){return FS.stat(path,true)}),chmod:(function(path,mode,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})}),lchmod:(function(path,mode){FS.chmod(path,mode,true)}),fchmod:(function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chmod(stream.node,mode)}),chown:(function(path,uid,gid,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{timestamp:Date.now()})}),lchown:(function(path,uid,gid){FS.chown(path,uid,gid,true)}),fchown:(function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chown(stream.node,uid,gid)}),truncate:(function(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.nodePermissions(node,\"w\");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})}),ftruncate:(function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}FS.truncate(stream.node,len)}),utime:(function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})}),open:(function(path,flags,mode,fd_start,fd_end){if(path===\"\"){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}flags=typeof flags===\"string\"?FS.modeStringToFlags(flags):flags;mode=typeof mode===\"undefined\"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path===\"object\"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module[\"logReadFiles\"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;Module[\"printErr\"](\"read file: \"+path)}}try{if(FS.trackingDelegate[\"onOpenFile\"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate[\"onOpenFile\"](path,trackingFlags)}}catch(e){console.log(\"FS.trackingDelegate['onOpenFile']('\"+path+\"', flags) threw an exception: \"+e.message)}return stream}),close:(function(stream){if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}}),llseek:(function(stream,offset,whence){if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position}),read:(function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate[\"onWriteToFile\"])FS.trackingDelegate[\"onWriteToFile\"](stream.path)}catch(e){console.log(\"FS.trackingDelegate['onWriteToFile']('\"+path+\"') threw an exception: \"+e.message)}return bytesWritten}),allocate:(function(stream,offset,length){if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}stream.stream_ops.allocate(stream,offset,length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)}),msync:(function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)}),munmap:(function(stream){return 0}),ioctl:(function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)}return stream.stream_ops.ioctl(stream,cmd,arg)}),readFile:(function(path,opts){opts=opts||{};opts.flags=opts.flags||\"r\";opts.encoding=opts.encoding||\"binary\";if(opts.encoding!==\"utf8\"&&opts.encoding!==\"binary\"){throw new Error('Invalid encoding type \"'+opts.encoding+'\"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding===\"utf8\"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding===\"binary\"){ret=buf}FS.close(stream);return ret}),writeFile:(function(path,data,opts){opts=opts||{};opts.flags=opts.flags||\"w\";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data===\"string\"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error(\"Unsupported data type\")}FS.close(stream)}),cwd:(function(){return FS.currentPath}),chdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}var err=FS.nodePermissions(lookup.node,\"x\");if(err){throw new FS.ErrnoError(err)}FS.currentPath=lookup.path}),createDefaultDirectories:(function(){FS.mkdir(\"/tmp\");FS.mkdir(\"/home\");FS.mkdir(\"/home/web_user\")}),createDefaultDevices:(function(){FS.mkdir(\"/dev\");FS.registerDevice(FS.makedev(1,3),{read:(function(){return 0}),write:(function(stream,buffer,offset,length,pos){return length})});FS.mkdev(\"/dev/null\",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev(\"/dev/tty\",FS.makedev(5,0));FS.mkdev(\"/dev/tty1\",FS.makedev(6,0));var random_device;if(typeof crypto!==\"undefined\"){var randomBuffer=new Uint8Array(1);random_device=(function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]})}else if(ENVIRONMENT_IS_NODE){random_device=(function(){return require(\"crypto\")[\"randomBytes\"](1)[0]})}else{random_device=(function(){return Math.random()*256|0})}FS.createDevice(\"/dev\",\"random\",random_device);FS.createDevice(\"/dev\",\"urandom\",random_device);FS.mkdir(\"/dev/shm\");FS.mkdir(\"/dev/shm/tmp\")}),createSpecialDirectories:(function(){FS.mkdir(\"/proc\");FS.mkdir(\"/proc/self\");FS.mkdir(\"/proc/self/fd\");FS.mount({mount:(function(){var node=FS.createNode(\"/proc/self\",\"fd\",16384|511,73);node.node_ops={lookup:(function(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:(function(){return stream.path})}};ret.parent=ret;return ret})};return node})},{},\"/proc/self/fd\")}),createStandardStreams:(function(){if(Module[\"stdin\"]){FS.createDevice(\"/dev\",\"stdin\",Module[\"stdin\"])}else{FS.symlink(\"/dev/tty\",\"/dev/stdin\")}if(Module[\"stdout\"]){FS.createDevice(\"/dev\",\"stdout\",null,Module[\"stdout\"])}else{FS.symlink(\"/dev/tty\",\"/dev/stdout\")}if(Module[\"stderr\"]){FS.createDevice(\"/dev\",\"stderr\",null,Module[\"stderr\"])}else{FS.symlink(\"/dev/tty1\",\"/dev/stderr\")}var stdin=FS.open(\"/dev/stdin\",\"r\");assert(stdin.fd===0,\"invalid handle for stdin (\"+stdin.fd+\")\");var stdout=FS.open(\"/dev/stdout\",\"w\");assert(stdout.fd===1,\"invalid handle for stdout (\"+stdout.fd+\")\");var stderr=FS.open(\"/dev/stderr\",\"w\");assert(stderr.fd===2,\"invalid handle for stderr (\"+stderr.fd+\")\")}),ensureErrnoError:(function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=(function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}});this.setErrno(errno);this.message=ERRNO_MESSAGES[errno];if(this.stack)Object.defineProperty(this,\"stack\",{value:(new Error).stack,writable:true})};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach((function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=\"<generic error, no stack>\"}))}),staticInit:(function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},\"/\");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={\"MEMFS\":MEMFS,\"IDBFS\":IDBFS,\"NODEFS\":NODEFS,\"WORKERFS\":WORKERFS}}),init:(function(input,output,error){assert(!FS.init.initialized,\"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)\");FS.init.initialized=true;FS.ensureErrnoError();Module[\"stdin\"]=input||Module[\"stdin\"];Module[\"stdout\"]=output||Module[\"stdout\"];Module[\"stderr\"]=error||Module[\"stderr\"];FS.createStandardStreams()}),quit:(function(){FS.init.initialized=false;var fflush=Module[\"_fflush\"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}}),getMode:(function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode}),joinPath:(function(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]==\"/\")path=path.substr(1);return path}),absolutePath:(function(relative,base){return PATH.resolve(base,relative)}),standardizePath:(function(path){return PATH.normalize(path)}),findObject:(function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{___setErrNo(ret.error);return null}}),analyzePath:(function(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path===\"/\"}catch(e){ret.error=e.errno}return ret}),createFolder:(function(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode)}),createPath:(function(parent,path,canRead,canWrite){parent=typeof parent===\"string\"?parent:FS.getPath(parent);var parts=path.split(\"/\").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current}),createFile:(function(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)}),createDataFile:(function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data===\"string\"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,\"w\");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node}),createDevice:(function(parent,name,input,output){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:(function(stream){stream.seekable=false}),close:(function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}}),read:(function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead}),write:(function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO)}}if(length){stream.node.timestamp=Date.now()}return i})});return FS.mkdev(path,mode,dev)}),createLink:(function(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);return FS.symlink(target,path)}),forceLoadFile:(function(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!==\"undefined\"){throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\")}else if(Module[\"read\"]){try{obj.contents=intArrayFromString(Module[\"read\"](obj.url),true);obj.usedBytes=obj.contents.length}catch(e){success=false}}else{throw new Error(\"Cannot load without read() or XMLHttpRequest.\")}if(!success)___setErrNo(ERRNO_CODES.EIO);return success}),createLazyFile:(function(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open(\"HEAD\",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);var datalength=Number(xhr.getResponseHeader(\"Content-length\"));var header;var hasByteServing=(header=xhr.getResponseHeader(\"Accept-Ranges\"))&&header===\"bytes\";var usesGzip=(header=xhr.getResponseHeader(\"Content-Encoding\"))&&header===\"gzip\";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error(\"invalid range (\"+from+\", \"+to+\") or no bytes requested!\");if(to>datalength-1)throw new Error(\"only \"+datalength+\" bytes available! programmer error!\");var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);if(datalength!==chunkSize)xhr.setRequestHeader(\"Range\",\"bytes=\"+from+\"-\"+to);if(typeof Uint8Array!=\"undefined\")xhr.responseType=\"arraybuffer\";if(xhr.overrideMimeType){xhr.overrideMimeType(\"text/plain; charset=x-user-defined\")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||\"\",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]===\"undefined\"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]===\"undefined\")throw new Error(\"doXHR failed!\");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log(\"LazyFiles on gzip forces download of the whole file when length is accessed\")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!==\"undefined\"){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node}),createPreloadedFile:(function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(\"cp \"+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}var handled=false;Module[\"preloadPlugins\"].forEach((function(plugin){if(handled)return;if(plugin[\"canHandle\"](fullname)){plugin[\"handle\"](byteArray,fullname,finish,(function(){if(onerror)onerror();removeRunDependency(dep)}));handled=true}}));if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url==\"string\"){Browser.asyncLoad(url,(function(byteArray){processData(byteArray)}),onerror)}else{processData(url)}}),indexedDB:(function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}),DB_NAME:(function(){return\"EM_FS_\"+window.location.pathname}),DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:(function(paths,onload,onerror){onload=onload||(function(){});onerror=onerror||(function(){});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log(\"creating db\");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],\"readwrite\");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach((function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}}));transaction.onerror=onerror};openRequest.onerror=onerror}),loadFilesFromDB:(function(paths,onload,onerror){onload=onload||(function(){});onerror=onerror||(function(){});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],\"readonly\")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach((function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}}));transaction.onerror=onerror};openRequest.onerror=onerror})};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:(function(dirfd,path){if(path[0]!==\"/\"){var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path}path=PATH.join2(dir,path)}return path}),doStat:(function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]===\"/\")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms=\"\";if(amode&4)perms+=\"r\";if(amode&2)perms+=\"w\";if(amode&1)perms+=\"x\";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret}),doWritev:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall10(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr();FS.unlink(path);return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall192(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get(),prot=SYSCALLS.get(),flags=SYSCALLS.get(),fd=SYSCALLS.get(),off=SYSCALLS.get();off<<=12;var ptr;var allocated=false;if(fd===-1){ptr=_memalign(PAGE_SIZE,len);if(!ptr)return-ERRNO_CODES.ENOMEM;_memset(ptr,0,len);allocated=true}else{var info=FS.getStream(fd);if(!info)return-ERRNO_CODES.EBADF;var res=FS.mmap(info,HEAPU8,addr,len,off,prot,flags);ptr=res.ptr;allocated=res.allocated}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,flags:flags};return ptr}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall197(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var PROCINFO={ppid:1,pid:42,sid:42,pgid:42};function ___syscall20(which,varargs){SYSCALLS.varargs=varargs;try{return PROCINFO.pid}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall3(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get(),count=SYSCALLS.get();return FS.read(stream,HEAP8,buf,count)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall33(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),amode=SYSCALLS.get();return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};default:abort(\"bad ioctl syscall \"+op)}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall91(which,varargs){SYSCALLS.varargs=varargs;try{var addr=SYSCALLS.get(),len=SYSCALLS.get();var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);SYSCALLS.doMsync(addr,stream,len,info.flags);FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],\"i8\",ALLOC_STATIC);function ___unlock(){}function __exit(status){Module[\"exit\"](status)}function _exit(status){__exit(status)}var _environ=STATICTOP;STATICTOP+=16;function ___buildEnvironment(env){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV[\"USER\"]=ENV[\"LOGNAME\"]=\"web_user\";ENV[\"PATH\"]=\"/\";ENV[\"PWD\"]=\"/\";ENV[\"HOME\"]=\"/home/web_user\";ENV[\"LANG\"]=\"C.UTF-8\";ENV[\"_\"]=Module[\"thisProgram\"];poolPtr=staticAlloc(TOTAL_ENV_SIZE);envPtr=staticAlloc(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[_environ>>2]=envPtr}else{envPtr=HEAP32[_environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in env){if(typeof env[key]===\"string\"){var line=key+\"=\"+env[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error(\"Environment size exceeded TOTAL_ENV_SIZE!\")}var ptrSize=4;for(var i=0;i<strings.length;i++){var line=strings[i];writeAsciiToMemory(line,poolPtr);HEAP32[envPtr+i*ptrSize>>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var ENV={};function _getenv(name){if(name===0)return 0;name=Pointer_stringify(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}var _llvm_ceil_f64=Math_ceil;var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_floor_f64=Math_floor;var _llvm_pow_f64=Math_pow;var _llvm_sqrt_f32=Math_sqrt;var _llvm_sqrt_f64=Math_sqrt;function _llvm_trap(){abort(\"trap!\")}function _longjmp(env,value){Module[\"setThrew\"](env,value||1);throw\"longjmp\"}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}function _setenv(envname,envval,overwrite){if(envname===0){___setErrNo(ERRNO_CODES.EINVAL);return-1}var name=Pointer_stringify(envname);var val=Pointer_stringify(envval);if(name===\"\"||name.indexOf(\"=\")!==-1){___setErrNo(ERRNO_CODES.EINVAL);return-1}if(ENV.hasOwnProperty(name)&&!overwrite)return 0;ENV[name]=val;___buildEnvironment(ENV);return 0}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function _times(buffer){if(buffer!==0){_memset(buffer,0,16)}return 0}if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process[\"hrtime\"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!==\"undefined\"){_emscripten_get_now=dateNow}else if(typeof self===\"object\"&&self[\"performance\"]&&typeof self[\"performance\"][\"now\"]===\"function\"){_emscripten_get_now=(function(){return self[\"performance\"][\"now\"]()})}else if(typeof performance===\"object\"&&typeof performance[\"now\"]===\"function\"){_emscripten_get_now=(function(){return performance[\"now\"]()})}else{_emscripten_get_now=Date.now}FS.staticInit();__ATINIT__.unshift((function(){if(!Module[\"noFSInit\"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");var NODEJS_PATH=require(\"path\");NODEFS.staticInit()}___buildEnvironment(ENV);DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\")  at offset \"+i+\" not in 0x00-0xFF.\")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}var decodeBase64=typeof atob===\"function\"?atob:(function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output});function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE===\"boolean\"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,\"base64\")}catch(_){buf=new Buffer(s,\"base64\")}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error(\"Converting base64 string to bytes failed.\")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}function invoke_d(index){try{return Module[\"dynCall_d\"](index)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_dddd(index,a1,a2,a3){try{return Module[\"dynCall_dddd\"](index,a1,a2,a3)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_di(index,a1){try{return Module[\"dynCall_di\"](index,a1)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_i(index){try{return Module[\"dynCall_i\"](index)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_ii(index,a1){try{return Module[\"dynCall_ii\"](index,a1)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iii(index,a1,a2){try{return Module[\"dynCall_iii\"](index,a1,a2)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iiidd(index,a1,a2,a3,a4){try{return Module[\"dynCall_iiidd\"](index,a1,a2,a3,a4)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iiii(index,a1,a2,a3){try{return Module[\"dynCall_iiii\"](index,a1,a2,a3)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){try{return Module[\"dynCall_iiiii\"](index,a1,a2,a3,a4)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){try{return Module[\"dynCall_iiiiii\"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){try{return Module[\"dynCall_iiiiiii\"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_iiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){try{return Module[\"dynCall_iiiiiiiiiii\"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_v(index){try{Module[\"dynCall_v\"](index)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_vi(index,a1){try{Module[\"dynCall_vi\"](index,a1)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_vii(index,a1,a2){try{Module[\"dynCall_vii\"](index,a1,a2)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viii(index,a1,a2,a3){try{Module[\"dynCall_viii\"](index,a1,a2,a3)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viiiddi(index,a1,a2,a3,a4,a5,a6){try{Module[\"dynCall_viiiddi\"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viiii(index,a1,a2,a3,a4){try{Module[\"dynCall_viiii\"](index,a1,a2,a3,a4)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){try{Module[\"dynCall_viiiii\"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){try{Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}function invoke_viiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){try{Module[\"dynCall_viiiiiiiii\"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0)}}Module.asmGlobalArg={\"Math\":Math,\"Int8Array\":Int8Array,\"Int16Array\":Int16Array,\"Int32Array\":Int32Array,\"Uint8Array\":Uint8Array,\"Uint16Array\":Uint16Array,\"Uint32Array\":Uint32Array,\"Float32Array\":Float32Array,\"Float64Array\":Float64Array,\"NaN\":NaN,\"Infinity\":Infinity};Module.asmLibraryArg={\"abort\":abort,\"assert\":assert,\"enlargeMemory\":enlargeMemory,\"getTotalMemory\":getTotalMemory,\"abortOnCannotGrowMemory\":abortOnCannotGrowMemory,\"invoke_d\":invoke_d,\"invoke_dddd\":invoke_dddd,\"invoke_di\":invoke_di,\"invoke_i\":invoke_i,\"invoke_ii\":invoke_ii,\"invoke_iii\":invoke_iii,\"invoke_iiidd\":invoke_iiidd,\"invoke_iiii\":invoke_iiii,\"invoke_iiiii\":invoke_iiiii,\"invoke_iiiiii\":invoke_iiiiii,\"invoke_iiiiiii\":invoke_iiiiiii,\"invoke_iiiiiiiiiii\":invoke_iiiiiiiiiii,\"invoke_v\":invoke_v,\"invoke_vi\":invoke_vi,\"invoke_vii\":invoke_vii,\"invoke_viii\":invoke_viii,\"invoke_viiiddi\":invoke_viiiddi,\"invoke_viiii\":invoke_viiii,\"invoke_viiiii\":invoke_viiiii,\"invoke_viiiiii\":invoke_viiiiii,\"invoke_viiiiiiiii\":invoke_viiiiiiiii,\"___assert_fail\":___assert_fail,\"___buildEnvironment\":___buildEnvironment,\"___clock_gettime\":___clock_gettime,\"___lock\":___lock,\"___map_file\":___map_file,\"___setErrNo\":___setErrNo,\"___syscall10\":___syscall10,\"___syscall140\":___syscall140,\"___syscall145\":___syscall145,\"___syscall146\":___syscall146,\"___syscall192\":___syscall192,\"___syscall195\":___syscall195,\"___syscall197\":___syscall197,\"___syscall20\":___syscall20,\"___syscall221\":___syscall221,\"___syscall3\":___syscall3,\"___syscall33\":___syscall33,\"___syscall5\":___syscall5,\"___syscall54\":___syscall54,\"___syscall6\":___syscall6,\"___syscall91\":___syscall91,\"___unlock\":___unlock,\"__exit\":__exit,\"_clock_gettime\":_clock_gettime,\"_emscripten_asm_const_iii\":_emscripten_asm_const_iii,\"_emscripten_get_now\":_emscripten_get_now,\"_emscripten_get_now_is_monotonic\":_emscripten_get_now_is_monotonic,\"_emscripten_memcpy_big\":_emscripten_memcpy_big,\"_exit\":_exit,\"_getenv\":_getenv,\"_gettimeofday\":_gettimeofday,\"_llvm_ceil_f64\":_llvm_ceil_f64,\"_llvm_fabs_f32\":_llvm_fabs_f32,\"_llvm_fabs_f64\":_llvm_fabs_f64,\"_llvm_floor_f64\":_llvm_floor_f64,\"_llvm_pow_f64\":_llvm_pow_f64,\"_llvm_sqrt_f32\":_llvm_sqrt_f32,\"_llvm_sqrt_f64\":_llvm_sqrt_f64,\"_llvm_trap\":_llvm_trap,\"_longjmp\":_longjmp,\"_setenv\":_setenv,\"_time\":_time,\"_times\":_times,\"DYNAMICTOP_PTR\":DYNAMICTOP_PTR,\"tempDoublePtr\":tempDoublePtr,\"ABORT\":ABORT,\"STACKTOP\":STACKTOP,\"STACK_MAX\":STACK_MAX,\"cttz_i8\":cttz_i8};// EMSCRIPTEN_START_ASM\n  var asm=(/** @suppress {uselessCode} */ function(global,env,buffer) {\n  \"use asm\";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.DYNAMICTOP_PTR|0;var j=env.tempDoublePtr|0;var k=env.ABORT|0;var l=env.STACKTOP|0;var m=env.STACK_MAX|0;var n=env.cttz_i8|0;var o=0;var p=0;var q=0;var r=0;var s=global.NaN,t=global.Infinity;var u=0,v=0,w=0,x=0,y=0.0;var z=0;var A=global.Math.floor;var B=global.Math.abs;var C=global.Math.sqrt;var D=global.Math.pow;var E=global.Math.cos;var F=global.Math.sin;var G=global.Math.tan;var H=global.Math.acos;var I=global.Math.asin;var J=global.Math.atan;var K=global.Math.atan2;var L=global.Math.exp;var M=global.Math.log;var N=global.Math.ceil;var O=global.Math.imul;var P=global.Math.min;var Q=global.Math.max;var R=global.Math.clz32;var S=env.abort;var T=env.assert;var U=env.enlargeMemory;var V=env.getTotalMemory;var W=env.abortOnCannotGrowMemory;var X=env.invoke_d;var Y=env.invoke_dddd;var Z=env.invoke_di;var _=env.invoke_i;var $=env.invoke_ii;var aa=env.invoke_iii;var ba=env.invoke_iiidd;var ca=env.invoke_iiii;var da=env.invoke_iiiii;var ea=env.invoke_iiiiii;var fa=env.invoke_iiiiiii;var ga=env.invoke_iiiiiiiiiii;var ha=env.invoke_v;var ia=env.invoke_vi;var ja=env.invoke_vii;var ka=env.invoke_viii;var la=env.invoke_viiiddi;var ma=env.invoke_viiii;var na=env.invoke_viiiii;var oa=env.invoke_viiiiii;var pa=env.invoke_viiiiiiiii;var qa=env.___assert_fail;var ra=env.___buildEnvironment;var sa=env.___clock_gettime;var ta=env.___lock;var ua=env.___map_file;var va=env.___setErrNo;var wa=env.___syscall10;var xa=env.___syscall140;var ya=env.___syscall145;var za=env.___syscall146;var Aa=env.___syscall192;var Ba=env.___syscall195;var Ca=env.___syscall197;var Da=env.___syscall20;var Ea=env.___syscall221;var Fa=env.___syscall3;var Ga=env.___syscall33;var Ha=env.___syscall5;var Ia=env.___syscall54;var Ja=env.___syscall6;var Ka=env.___syscall91;var La=env.___unlock;var Ma=env.__exit;var Na=env._clock_gettime;var Oa=env._emscripten_asm_const_iii;var Pa=env._emscripten_get_now;var Qa=env._emscripten_get_now_is_monotonic;var Ra=env._emscripten_memcpy_big;var Sa=env._exit;var Ta=env._getenv;var Ua=env._gettimeofday;var Va=env._llvm_ceil_f64;var Wa=env._llvm_fabs_f32;var Xa=env._llvm_fabs_f64;var Ya=env._llvm_floor_f64;var Za=env._llvm_pow_f64;var _a=env._llvm_sqrt_f32;var $a=env._llvm_sqrt_f64;var ab=env._llvm_trap;var bb=env._longjmp;var cb=env._setenv;var db=env._time;var eb=env._times;var fb=0.0;\n  // EMSCRIPTEN_START_FUNCS\n  function gP(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+176|0;k=n+8|0;j=n;h=n+40|0;if(!b)qa(108200,108204,52,108218);if(!d)qa(108230,108204,53,108218);i=c[d+8>>2]|0;if(!i)qa(108233,108204,54,108218);if(!(a[i>>0]|0))qa(108242,108204,55,108218);b0(h,c[d+28>>2]|0)|0;i=h+(W_(h)|0)|0;a[i>>0]=58;a[i+1>>0]=0;p1(h,g)|0;if((hP(b,h)|0)==999){c[j>>2]=h;Pw(0,108254,j)|0}g=c[b+92>>2]|0;if(g|0?(m=c[g>>2]|0,m|0):0){c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];xb[m&31](b,d,k,f)}l=n;return}function hP(a,b){a=a|0;b=b|0;b=wC(c[a>>2]|0,4,b)|0;if(!b)b=999;else{b=c[b+16>>2]|0;c[a+92>>2]=c[b+12>>2];c[a+96>>2]=c[b>>2];b=300}return b|0}function iP(a){a=a|0;return 1}function jP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]+10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function kP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+336|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function lP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function mP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+344|0;h[c>>3]=+h[c>>3]+10.0/+h[b+352>>3];a[b+537>>0]=1;return 0}function nP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*1.1;a[b+537>>0]=1;return 0}function oP(b){b=b|0;var c=0;a[b+536>>0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*.9090909090909091;a[b+537>>0]=1;return 0}function pP(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;e=b+536|0;d=(a[e>>0]|0)==0;a[e>>0]=d&1;if(d){d=c[b+448>>2]|0;e=c[b+452>>2]|0;i=+(d>>>0);g=+(e>>>0);f=i/+(d|0)<g/+(e|0);h[b+352>>3]=(f?i:g)/+((f?d:e)|0);e=b+336|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;a[b+537>>0]=1}return 0}function qP(b){b=b|0;var d=0,e=0;d=c[(c[b>>2]|0)+168>>2]|0;e=b+580|0;if(!(c[e>>2]|0)){c[e>>2]=d;e=(c[d+16>>2]|0)+112|0;a[e>>0]=a[e>>0]|2;GP(b,d)}dF(b,d);a[b+540>>0]=1;return}function rP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;k=l;l=l+16|0;f=k;switch(d|0){case 1:{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];zP(b,f);FP(b);a[b+538>>0]=1;a[b+541>>0]=1;j=13;break}case 2:{a[b+538>>0]=1;a[b+541>>0]=2;j=13;break}case 3:{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];zP(b,f);a[b+538>>0]=1;a[b+541>>0]=3;j=13;break}case 4:{a[b+536>>0]=0;if(!(c[b+360>>2]|0)){f=b+352|0;i=+h[f>>3];d=b+336|0;h[d>>3]=(+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+520>>3]*i)+ +h[d>>3];g=+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5;d=b+528|0}else{f=b+352|0;i=+h[f>>3];d=b+336|0;h[d>>3]=+h[d>>3]-(+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+528>>3]*i);g=+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5;d=b+520|0}j=b+344|0;h[j>>3]=g*.10000000000000009/(+h[d>>3]*i)+ +h[j>>3];h[f>>3]=i*1.1;j=13;break}case 5:{a[b+536>>0]=0;j=b+352|0;i=+h[j>>3]*.9090909090909091;h[j>>3]=i;if(!(c[b+360>>2]|0)){f=b+336|0;h[f>>3]=+h[f>>3]-(+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+520>>3]*i);g=+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5;f=b+528|0}else{f=b+336|0;h[f>>3]=(+h[e+8>>3]-+((c[b+452>>2]|0)>>>0)*.5)*.10000000000000009/(+h[b+528>>3]*i)+ +h[f>>3];g=+h[e>>3]-+((c[b+448>>2]|0)>>>0)*.5;f=b+520|0}j=b+344|0;h[j>>3]=+h[j>>3]-g*.10000000000000009/(+h[f>>3]*i);j=13;break}default:{}}if((j|0)==13)a[b+537>>0]=1;b=b+560|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];l=k;return}function sP(b,c,d){b=b|0;c=c|0;d=d|0;a[b+538>>0]=0;a[b+541>>0]=0;return}function tP(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0;k=l;l=l+16|0;e=k;i=b+560|0;j=(+h[d>>3]-+h[i>>3])/+h[b+520>>3];g=(+h[d+8>>3]-+h[b+568>>3])/+h[b+528>>3];if(!(+B(+j)<.0001&+B(+g)<.0001)){switch(a[b+541>>0]|0){case 0:{c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];zP(b,e);break}case 2:{f=+h[b+352>>3];if(!(c[b+360>>2]|0)){e=b+336|0;h[e>>3]=+h[e>>3]-j/f;e=b+344|0;h[e>>3]=+h[e>>3]-g/f}else{e=b+336|0;h[e>>3]=+h[e>>3]-g/f;e=b+344|0;h[e>>3]=+h[e>>3]+j/f}a[b+537>>0]=1;break}default:{}}c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2]}l=k;return}function uP(a,b,c){a=a|0;b=b|0;c=c|0;return}function vP(a){a=a|0;return}function wP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[b>>2]|0;if(d){d=L1(d,135739)|0;if(d|0){i=TB(d,0)|0;s1(d)|0;f=5}}else{i=TB(c[15621]|0,0)|0;f=5}if((f|0)==5?i|0:0){g=j+168|0;d=c[g>>2]|0;if(d|0){f=c[j+172>>2]|0;if((f|0)!=0?(h=c[f+4>>2]|0,(h|0)!=0):0){tb[h&127](d);d=c[g>>2]|0}gH(d);$x(c[g>>2]|0)|0}Fz(i,0,134401,280,1);Fz(i,1,134365,304,1);Fz(i,2,134378,176,1);c[g>>2]=i;c[(c[i+16>>2]|0)+144>>2]=j;if((_C(j,i,e)|0)!=-1){c[b+580>>2]=0;c[b+576>>2]=0;a[b+537>>0]=1}}return}function xP(a,b){a=a|0;b=b|0;a=c[a>>2]|0;_C(a,c[a+168>>2]|0,b)|0;return}function yP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;f=g+160|0;e=c[f>>2]|0;if((e|0)!=0?(c[g+164>>2]|0)==0:0){i=g+192|0;h=c[i>>2]|0;c[f>>2]=0;c[i>>2]=0;f=h}else{f=0;e=0}aD(g,c[g+168>>2]|0,b,d)|0;if(e|0){i=c[a>>2]|0;c[i+160>>2]=e;c[i+192>>2]=f}return}function zP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0;f=l;l=l+80|0;e=f+48|0;g=f;m=f+32|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];AP(m,b,e);k=+h[m>>3];j=+h[m+8>>3];i=1.0/+h[b+352>>3];h[g+16>>3]=i+k;h[g+24>>3]=i+j;h[g>>3]=k-i;h[g+8>>3]=j-i;d=c[(c[b>>2]|0)+168>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];c[e+16>>2]=c[g+16>>2];c[e+20>>2]=c[g+20>>2];c[e+24>>2]=c[g+24>>2];c[e+28>>2]=c[g+28>>2];d=BP(d,e)|0;e=b+576|0;if((d|0)!=(c[e>>2]|0)){CP(b);c[e>>2]=d;DP(b);a[b+537>>0]=1}l=f;return}function AP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0;if(!(c[b+360>>2]|0)){e=+h[b+352>>3];f=+h[d+8>>3];g=e;i=b+528|0;e=+h[d>>3]/(+h[b+520>>3]*e)-+h[b+504>>3]}else{e=+h[b+352>>3];f=-+h[d>>3];g=e;i=b+520|0;e=+h[d+8>>3]/(+h[b+528>>3]*e)-+h[b+504>>3]}g=f/(+h[i>>3]*g)-+h[b+512>>3];h[a>>3]=e;h[a+8>>3]=g;return}function BP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=Sy(a)|0;a:while(1){if(!e){e=9;break}d=Ex(a,e)|0;while(1){if(!d)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];if((WM(d,f)|0)<<24>>24){e=6;break a}d=Gx(a,d)|0}e=Ty(a,e)|0}do if((e|0)!=6)if((e|0)==9){d=Uy(a)|0;while(1){if(!d)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];if((TM(d,f)|0)<<24>>24){e=12;break}d=Vy(a,d)|0}if((e|0)==12)break;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];c[f+28>>2]=c[b+28>>2];d=EP(a,f)|0;if(!d){d=a;break}else break}while(0);l=g;return d|0}function CP(b){b=b|0;var d=0;d=c[b+576>>2]|0;a:do if(d|0)switch(pz(d)|0){case 0:{d=(c[d+16>>2]|0)+112|0;a[d>>0]=a[d>>0]&-2;break a}case 1:{d=(c[d+16>>2]|0)+117|0;a[d>>0]=a[d>>0]&-2;break a}case 2:{d=(c[d+16>>2]|0)+115|0;a[d>>0]=a[d>>0]&-2;break a}default:break a}while(0);c[b+584>>2]=0;return}function DP(b){b=b|0;var d=0,e=0;e=b+584|0;d=c[e>>2]|0;if(d|0){D_(d);c[e>>2]=0}d=c[b+576>>2]|0;a:do if(d|0)switch(pz(d)|0){case 0:{b=(c[d+16>>2]|0)+112|0;a[b>>0]=a[b>>0]|1;b=nx(d,0,138019,0)|0;if(!b)break a;c[e>>2]=pH(yx(d,b)|0,d)|0;break a}case 1:{b=(c[d+16>>2]|0)+117|0;a[b>>0]=a[b>>0]|1;b=nx(ez(d)|0,1,138019,0)|0;if(!b)break a;c[e>>2]=pH(yx(d,b)|0,d)|0;break a}case 2:{b=(c[d+16>>2]|0)+115|0;a[b>>0]=a[b>>0]|1;b=nx(ez(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0,2,138019,0)|0;if(!b)break a;c[e>>2]=pH(yx(d,b)|0,d)|0;break a}default:break a}while(0);return}function EP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;e=m;g=c[a+16>>2]|0;i=c[g+180>>2]|0;j=g+184|0;d=1;while(1){if((d|0)>(i|0)){k=4;break}f=c[(c[j>>2]|0)+(d<<2)>>2]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];c[e+16>>2]=c[b+16>>2];c[e+20>>2]=c[b+20>>2];c[e+24>>2]=c[b+24>>2];c[e+28>>2]=c[b+28>>2];f=EP(f,e)|0;if(!f)d=d+1|0;else{a=f;break}}do if((k|0)==4){o=+h[g+24>>3];n=+h[g+40>>3];if(((+h[b+16>>3]>=+h[g+16>>3]?+h[g+32>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=o:0)?n>=+h[b+8>>3]:0)break;a=0}while(0);l=m;return a|0}function FP(b){b=b|0;var d=0,e=0,f=0;f=b+580|0;d=c[f>>2]|0;a:do if(d|0)switch(pz(d)|0){case 0:{e=(c[d+16>>2]|0)+112|0;a[e>>0]=a[e>>0]&-7|4;break a}case 1:{e=(c[d+16>>2]|0)+117|0;a[e>>0]=a[e>>0]&-7|4;break a}case 2:{e=(c[d+16>>2]|0)+115|0;a[e>>0]=a[e>>0]&-7|4;break a}default:break a}while(0);d=b+588|0;e=c[d>>2]|0;if(e|0){D_(e);c[d>>2]=0}d=c[b+576>>2]|0;c[f>>2]=d;b:do if(d|0)switch(pz(d)|0){case 0:{f=(c[d+16>>2]|0)+112|0;a[f>>0]=a[f>>0]|2;GP(b,d);break b}case 1:{f=(c[d+16>>2]|0)+117|0;a[f>>0]=a[f>>0]|2;HP(b,d);break b}case 2:{f=(c[d+16>>2]|0)+115|0;a[f>>0]=a[f>>0]|2;IP(b,d);break b}default:break b}while(0);return}function GP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+592|0;do if((fz(b)|0)==(b|0))if(!(ey(b)|0)){rC(d,0,108412);break}else{rC(d,0,108404);break}else rC(d,0,108418);while(0);rC(d,1,ry(b)|0);c[a+596>>2]=2;f=a+604|0;d=0;e=2;while(1){d=sx(b,0,d)|0;if(!d)break;rC(f,e,c[d+8>>2]|0);rC(f,e+1|0,yx(b,d)|0);rC(f,e+2|0,0);e=e+3|0}c[a+608>>2]=e;d=nx(b,0,137973,0)|0;if(!d){d=nx(b,0,108395,0)|0;if(d|0)g=11}else g=11;if((g|0)==11)c[a+588>>2]=pH(yx(b,d)|0,b)|0;return}function HP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=a+592|0;rC(f,0,108399);rC(f,1,ry(b)|0);c[a+596>>2]=2;f=a+604|0;g=fz(ez(b)|0)|0;e=2;d=0;while(1){d=sx(g,1,d)|0;if(!d)break;rC(f,e,c[d+8>>2]|0);rC(f,e|1,yx(b,d)|0);e=e+2|0}c[a+608>>2]=e;d=nx(ez(b)|0,1,137973,0)|0;if(!d){d=nx(ez(b)|0,1,108395,0)|0;if(d|0)h=6}else h=6;if((h|0)==6)c[a+588>>2]=pH(yx(b,d)|0,b)|0;return}function IP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=a+592|0;rC(h,0,108368);k=b+48|0;rC(h,1,ry(c[((c[b>>2]&3|0)==3?b:k)+40>>2]|0)|0);k=(ey(ez(c[((c[b>>2]&3|0)==3?b:k)+40>>2]|0)|0)|0)!=0;rC(h,3,k?134656:138665);k=b+-48|0;rC(h,4,ry(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0);c[a+596>>2]=7;i=a+604|0;j=fz(ez(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0)|0;g=7;d=0;a:while(1){while(1){d=sx(j,2,d)|0;if(!d)break a;e=d+8|0;f=c[e>>2]|0;if(!(b$(f,108373)|0)){l=5;break}if(!(b$(f,108382)|0)){l=7;break}if(b$(f,108391)|0)break;rC(h,6,yx(b,d)|0)}if((l|0)==5){l=0;rC(h,2,yx(b,d)|0)}else if((l|0)==7){l=0;rC(h,5,yx(b,d)|0)}rC(i,g,c[e>>2]|0);rC(i,g+1|0,yx(b,d)|0);g=g+2|0}c[a+608>>2]=g;d=nx(ez(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0,2,137973,0)|0;if(!d){d=nx(ez(c[((c[b>>2]&3|0)==2?b:k)+40>>2]|0)|0,2,108395,0)|0;if(d|0)l=13}else l=13;if((l|0)==13)c[a+588>>2]=pH(yx(b,d)|0,b)|0;return}function JP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=KP(a,b,c[d>>2]|0)|0;d=c[d+4>>2]|0;while(1){f=c[d+4>>2]|0;if(!f)break;b=0;while(1){e=c[f+(b*20|0)+4>>2]|0;if(!e)break;uC(a,c[d>>2]|0,e,c[f+(b*20|0)+8>>2]|0,g,f+(b*20|0)|0)|0;b=b+1|0}d=d+8|0}return}function KP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=vH(12)|0;if(!b)b=0;else b=n1(b)|0;c[e+4>>2]=b;c[e+8>>2]=n1(d)|0;d=a+100|0;c[e>>2]=c[d>>2];c[d>>2]=e;return e|0}function LP(b,c){b=b|0;c=c|0;MP(b);a[b+44>>0]=0;NP(b)|0;AL(b)|0;return}function MP(b){b=b|0;var d=0,e=0;d=c[b+32>>2]|0;a:do if(d|0)while(1){e=c[d>>2]|0;if(!e)break a;if((a[e>>0]|0)==103?P0(e,108427)|0:0)JP(b,0,c[d+4>>2]|0);d=d+8|0}while(0);return}function NP(a){a=a|0;var b=0;b=wC(a,2,108440)|0;if(!b)a=999;else{c[a+148>>2]=c[(c[b+16>>2]|0)+12>>2];a=300}return a|0}function OP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[a+148>>2]|0;if((a|0)!=0?(e=c[a>>2]|0,(e|0)!=0):0)a=lb[e&127](b,d)|0;else a=0;return a|0}function PP(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return (c[b>>2]|0)-(c[d>>2]|0)|0}function QP(a){a=a|0;var b=0.0,d=0.0;a=c[a+16>>2]|0;d=+h[a+16>>3];b=+h[a+24>>3];return (RP(~~(d>b?d:b)>>>0)|0)+1|0}function RP(a){a=a|0;var b=0,c=0;if(!a)a=-1;else{c=a>>>0>65535;a=c?a>>>16:a;c=c?16:0;b=a>>>0>255;a=b?a>>>8:a;c=b?c|8:c;b=a>>>0>15;a=b?a>>>4:a;c=b?c|4:c;b=a>>>0>3;a=(b?c|2:c)+((b?a>>>2:a)>>>0>1&1)|0}return a|0}function SP(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;q=r;p=TP(b,d,e,f,g)|0;e=UP(p)|0;if((e|0)>=0){n=q+16|0;o=q+24|0;m=q+8|0;k=g+32|0;e=0;g=0;while(1){if((g|0)>=(d|0))break;f=b+(g*40|0)+32|0;do if(c[f>>2]|0){VP(q,p,b+(g*40|0)|0);i=+h[n>>3];j=+h[o>>3];if(!(c[q>>2]|0)){a[(c[f>>2]|0)+36>>0]=1;break}if(+h[m>>3]==0.0){f=c[f>>2]|0;h[f+16>>3]=i;h[f+24>>3]=j;a[f+36>>0]=1;break}if((a[k>>0]|0)==1){f=c[f>>2]|0;h[f+16>>3]=i;h[f+24>>3]=j;a[f+36>>0]=1}else e=1}while(0);g=g+1|0}WP(p)}l=r;return e|0}function TP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=uH(28)|0;j=Cw(25808,c[4558]|0)|0;h=g+20|0;c[h>>2]=j;do if(j){j=CS()|0;c[g+24>>2]=j;if(!j){E1(108658,14,1,c[15686]|0)|0;i=6;break}else{c[g>>2]=a;c[g+4>>2]=b;c[g+8>>2]=d;c[g+12>>2]=e;c[g+16>>2]=f;break}}else{E1(108658,14,1,c[15686]|0)|0;i=6}while(0);if((i|0)==6){a=c[h>>2]|0;if(a|0)yw(a)|0;a=c[g+24>>2]|0;if(a|0)ES(a)|0;D_(g);g=0}return g|0}function UP(a){a=a|0;var b=0;b=dQ(a)|0;if((b|0)>=0){eQ(a);fQ(a);b=yw(c[a+20>>2]|0)|0}return b|0}function VP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0;M=l;l=l+464|0;J=M+416|0;L=M+400|0;G=M+384|0;m=M+352|0;n=M+320|0;o=M+288|0;p=M+256|0;r=M+224|0;s=M+192|0;t=M+160|0;u=M+128|0;v=M+96|0;x=M+64|0;y=M+32|0;H=M;z=c[d+32>>2]|0;e=+h[z>>3];C=d+16|0;A=(e*2.0+ +h[C>>3])*.125;D=z+8|0;I=d+24|0;i=+h[I>>3];K=(+h[D>>3]*2.0+i)*.5;if(!z)qa(108451,108461,445,108471);f=J;g=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));B=z+16|0;h[B>>3]=+h[d>>3]-e;E=d+8|0;F=z+24|0;h[F>>3]=i+ +h[E>>3];XP(m,b,d,J);j=c[m>>2]|0;f=c[m+4>>2]|0;e=+h[m+8>>3];m=m+16|0;c[L>>2]=c[m>>2];c[L+4>>2]=c[m+4>>2];c[L+8>>2]=c[m+8>>2];c[L+12>>2]=c[m+12>>2];a:do if(!j){c[a>>2]=0;c[a+4>>2]=f;h[a+8>>3]=e;a=a+16|0;c[a>>2]=c[L>>2];c[a+4>>2]=c[L+4>>2];c[a+8>>2]=c[L+8>>2];c[a+12>>2]=c[L+12>>2]}else{h[F>>3]=+h[E>>3];XP(n,b,d,J);g=c[n>>2]|0;m=c[n+4>>2]|0;i=+h[n+8>>3];n=n+16|0;c[G>>2]=c[n>>2];c[G+4>>2]=c[n+4>>2];c[G+8>>2]=c[n+8>>2];c[G+12>>2]=c[n+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=m;e=i}else g=j;h[F>>3]=+h[E>>3]-+h[D>>3];XP(o,b,d,J);m=c[o>>2]|0;j=c[o+4>>2]|0;i=+h[o+8>>3];o=o+16|0;c[G>>2]=c[o>>2];c[G+4>>2]=c[o+4>>2];c[G+8>>2]=c[o+8>>2];c[G+12>>2]=c[o+12>>2];if(!m){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=j;e=i}else m=g;h[B>>3]=+h[d>>3];h[F>>3]=+h[I>>3]+ +h[E>>3];XP(p,b,d,J);g=c[p>>2]|0;j=c[p+4>>2]|0;i=+h[p+8>>3];p=p+16|0;c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3]-+h[D>>3];XP(r,b,d,J);g=c[r>>2]|0;j=c[r+4>>2]|0;i=+h[r+8>>3];r=r+16|0;c[G>>2]=c[r>>2];c[G+4>>2]=c[r+4>>2];c[G+8>>2]=c[r+8>>2];c[G+12>>2]=c[r+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[B>>3]=+h[C>>3]+ +h[d>>3];h[F>>3]=+h[I>>3]+ +h[E>>3];XP(s,b,d,J);g=c[s>>2]|0;j=c[s+4>>2]|0;i=+h[s+8>>3];s=s+16|0;c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3];XP(t,b,d,J);g=c[t>>2]|0;j=c[t+4>>2]|0;i=+h[t+8>>3];t=t+16|0;c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[G+8>>2]=c[t+8>>2];c[G+12>>2]=c[t+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=g;f=j;e=i}h[F>>3]=+h[E>>3]-+h[D>>3];XP(u,b,d,J);g=c[u>>2]|0;j=c[u+4>>2]|0;i=+h[u+8>>3];u=u+16|0;c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[G+8>>2]=c[u+8>>2];c[G+12>>2]=c[u+12>>2];if(!g){c[a>>2]=0;c[a+4>>2]=j;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break}if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];f=j;e=i}else g=m;j=(c[J+28>>2]|0)==0;do if(!(c[J+24>>2]|0))if(j){if(c[J+32>>2]|0){w=38;break}if(!((c[J+12>>2]|0)==0&(c[J>>2]|0)==0))w=38}else w=46;else if(j)w=38;else w=46;while(0);b:do if((w|0)==38)if(!(c[J+32>>2]|0)){h[B>>3]=+h[d>>3]-+h[z>>3];p=v+4|0;r=v+8|0;s=v+16|0;m=F;j=E;i=+h[I>>3];c:while(1){while(1){h[m>>3]=+h[j>>3]+i;if(!(+h[B>>3]<=+h[C>>3]+ +h[d>>3])){w=46;break b}XP(v,b,d,J);n=c[v>>2]|0;o=c[p>>2]|0;k=+h[r>>3];c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!n)break c;if(k<e)break;else{m=B;j=B;i=A}}c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=B;j=B;i=A;g=n;f=o;e=k}c[a>>2]=0;c[a+4>>2]=o;h[a+8>>3]=k;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}else w=46;while(0);d:do if((w|0)==46)if((c[J+12>>2]|0)==0&(c[J>>2]|0)==0){h[B>>3]=+h[d>>3]-+h[z>>3];k=+h[E>>3];n=x+4|0;o=x+8|0;p=x+16|0;i=k;k=+h[I>>3]+k;while(1){h[F>>3]=k;if(!(k>=i-+h[D>>3]))break d;XP(x,b,d,J);j=c[x>>2]|0;m=c[n>>2]|0;i=+h[o>>3];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!j)break;if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];g=j;f=m;e=i}i=+h[E>>3];k=+h[F>>3]-K}c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);i=+h[d>>3];k=+h[C>>3]+i;h[B>>3]=k;q=+h[D>>3];h[F>>3]=+h[E>>3]-q;j=c[J+4>>2]|0;do if(!(c[J+8>>2]|0)){m=c[J>>2]|0;if(!((j|0)==0&(m|0)==0)){w=59;break}if(c[J+20>>2]|0){j=0;m=0;w=59;break}if(c[J+32>>2]|0){j=0;m=0;w=59}}else{m=c[J>>2]|0;w=59}while(0);e:do if((w|0)==59){f:do if((j|0)==0&(m|0)==0){h[B>>3]=k;p=y+4|0;r=y+8|0;s=y+16|0;m=F;j=E;i=q;g:while(1){while(1){h[m>>3]=+h[j>>3]-i;i=+h[d>>3];if(!(+h[B>>3]>=i-+h[z>>3]))break f;XP(y,b,d,J);n=c[y>>2]|0;o=c[p>>2]|0;k=+h[r>>3];c[G>>2]=c[s>>2];c[G+4>>2]=c[s+4>>2];c[G+8>>2]=c[s+8>>2];c[G+12>>2]=c[s+12>>2];if(!n)break g;if(k<e)break;else{m=B;j=B;i=A}}c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];m=B;j=B;i=A;g=n;f=o;e=k}c[a>>2]=0;c[a+4>>2]=o;h[a+8>>3]=k;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);if(c[J+20>>2]|0)break;if(c[J+32>>2]|0)break;h[B>>3]=+h[C>>3]+i;i=+h[E>>3];n=H+4|0;o=H+8|0;p=H+16|0;k=i;i=i-+h[D>>3];while(1){h[F>>3]=i;if(!(i<=+h[I>>3]+k))break e;XP(H,b,d,J);j=c[H>>2]|0;m=c[n>>2]|0;i=+h[o>>3];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[G+8>>2]=c[p+8>>2];c[G+12>>2]=c[p+12>>2];if(!j)break;if(i<e){c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];c[L+8>>2]=c[G+8>>2];c[L+12>>2]=c[G+12>>2];g=j;f=m;e=i}k=+h[E>>3];i=+h[F>>3]+K}c[a>>2]=0;c[a+4>>2]=m;h[a+8>>3]=i;a=a+16|0;c[a>>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];c[a+8>>2]=c[G+8>>2];c[a+12>>2]=c[G+12>>2];break a}while(0);c[a>>2]=g;c[a+4>>2]=f;h[a+8>>3]=e;a=a+16|0;c[a>>2]=c[L>>2];c[a+4>>2]=c[L+4>>2];c[a+8>>2]=c[L+8>>2];c[a+12>>2]=c[L+12>>2]}while(0);l=M;return}function WP(a){a=a|0;ES(c[a+24>>2]|0)|0;D_(a);return}function XP(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0;t=l;l=l+48|0;q=t+32|0;s=t+16|0;p=t;g=c[e+32>>2]|0;if(!g)qa(108451,108461,382,108480);o=g+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];o=d+4|0;m=0;g=0;while(1){if((m|0)>=(c[o>>2]|0))break;j=c[d>>2]|0;k=j+(m*40|0)|0;do if((k|0)!=(e|0)){if(+h[j+(m*40|0)+16>>3]>0.0?+h[j+(m*40|0)+24>>3]>0.0:0)break;g=g+((YP(e,k)|0)!=0&1)|0}while(0);m=m+1|0}ZP(e,q);m=c[d+24>>2]|0;m=GS(m,c[m>>2]|0,q)|0;if(!m){c[b>>2]=g;h[b+8>>3]=0.0;s=b+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2]}else{k=m;i=0.0;while(1){if(!k)break;j=c[(c[k+4>>2]|0)+16>>2]|0;if((j|0)!=(e|0)){_P(j,s);n=+$P(q,s);if(n>0.0){g=g+1|0;i=+aQ(e,j,q,n,f)+i}d=c[j+32>>2]|0;if(((d|0)!=0?(a[d+36>>0]|0)!=0:0)?(ZP(j,s),r=+$P(q,s),r>0.0):0){g=g+1|0;i=+bQ(e,j,q,r,f)+i}}k=c[k>>2]|0}BS(m);c[b>>2]=g;h[b+8>>3]=i;s=b+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2]}l=t;return}function YP(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0.0;a=c[a+32>>2]|0;if(+h[b+16>>3]==0.0?+h[b+24>>3]==0.0:0){if((((a|0)!=0?(d=+h[b>>3],e=+h[a+16>>3],d>e):0)?d<+h[a>>3]+e:0)?(f=+h[b+8>>3],g=+h[a+24>>3],f>g):0)a=f<+h[a+8>>3]+g&1;else a=0;return a|0}qa(108517,108461,219,108554);return 0}function ZP(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a+32>>2]|0;e=+h[a+16>>3];c[b>>2]=~~e;d=+h[a+24>>3];c[b+4>>2]=~~d;c[b+8>>2]=~~(+h[a>>3]+e);c[b+12>>2]=~~(+h[a+8>>3]+d);return}function _P(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;e=+h[a>>3];c[b>>2]=~~e;d=+h[a+8>>3];c[b+4>>2]=~~d;c[b+8>>2]=~~(+h[a+16>>3]+e);c[b+12>>2]=~~(+h[a+24>>3]+d);return}function $P(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=c[a+8>>2]|0;j=c[b>>2]|0;if((((i|0)>=(j|0)?(k=c[a>>2]|0,l=c[b+8>>2]|0,(k|0)<=(l|0)):0)?(e=c[a+12>>2]|0,f=c[b+4>>2]|0,(e|0)>=(f|0)):0)?(g=c[a+4>>2]|0,h=c[b+12>>2]|0,(g|0)<=(h|0)):0)d=(+(c[((e|0)<(h|0)?a:b)+12>>2]|0)-+(c[((g|0)>(f|0)?a:b)+4>>2]|0))*(+(c[((i|0)<(l|0)?a:b)+8>>2]|0)-+(c[((k|0)>(j|0)?a:b)>>2]|0));else d=0.0;return +d}function aQ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;a=cQ(a,b)|0;f=f+(((a|0)<0?5:a)<<2)|0;a=c[f>>2]|0;if(!a){c[f>>2]=b;g=e}else{_P(a,i);g=+$P(d,i);g=g>e?g:0.0;a=c[f>>2]|0;if((c[a+32>>2]|0)!=0?(ZP(a,i),h=+$P(d,i),h>e):0)g=h>g?h:g;if(!(g>0.0)){c[f>>2]=b;g=e}}l=j;return +g}function bQ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;a=cQ(a,b)|0;f=f+(((a|0)<0?5:a)<<2)|0;a=c[f>>2]|0;if(!a){c[f>>2]=b;g=e}else{_P(a,i);g=+$P(d,i);g=g>e?g:0.0;a=c[f>>2]|0;if((c[a+32>>2]|0)!=0?(ZP(a,i),h=+$P(d,i),h>e):0)g=h>g?h:g;if(!(g>0.0)){c[f>>2]=b;g=e}}l=j;return +g}function cQ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=c[b+32>>2]|0;f=c[d+32>>2]|0;if((e|0)==(f|0))qa(108496,108461,276,108506);do if((a[e+36>>0]|0)!=0?(a[f+36>>0]|0)!=0:0){j=+h[b>>3];if(j==0.0?+h[b+8>>3]==0.0:0){e=-1;break}k=+h[d>>3];i=+h[d+8>>3];if(!(k==0.0&i==0.0)){g=+h[b+8>>3];if(i<g){if(k<j){e=0;break}e=k>j?2:1;break}e=k<j;if(i>g){if(e){e=6;break}e=k>j?8:7;break}if(!e)if(k>j)e=5;else e=-1;else e=3}else e=-1}else e=-1;while(0);return e|0}function dQ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+32|0;d=k+24|0;e=k+16|0;f=k;g=QP(a)|0;h=a+4|0;i=e+4|0;j=a+20|0;b=0;while(1){if((b|0)>=(c[h>>2]|0)){b=0;break}m=uH(32)|0;o=(c[a>>2]|0)+(b*40|0)|0;n=m+12|0;c[m+28>>2]=o;gQ(f,o);c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];c[n+8>>2]=c[f+8>>2];c[n+12>>2]=c[f+12>>2];n=c[n>>2]|0;c[e>>2]=(((c[m+20>>2]|0)-n|0)/2|0)+n;n=c[m+16>>2]|0;c[i>>2]=(((c[m+24>>2]|0)-n|0)/2|0)+n;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[m+8>>2]=hQ(d,g)|0;n=c[j>>2]|0;if(!(nb[c[n>>2]&63](n,m,1)|0)){b=-1;break}else b=b+1|0}l=k;return b|0}function eQ(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;e=c[d>>2]|0;b=a+24|0;a=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!a)break;e=c[b>>2]|0;HS(e,a+12|0,c[a+28>>2]|0,e,0)|0;e=c[d>>2]|0;a=nb[c[e>>2]&63](e,a,8)|0}return}function fQ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=a+20|0;f=Ew(c[e>>2]|0)|0;d=0;while(1){if(!(Ew(c[e>>2]|0)|0))break;g=c[e>>2]|0;a=c[(c[g+8>>2]|0)+4>>2]|0;if(!a){h=8;break}b=c[(c[g+4>>2]|0)+8>>2]|0;if((b|0)<0)a=c[a+8>>2]|0;else a=a+(0-b)|0;if(!a){h=8;break}nb[c[g>>2]&63](g,a,4096)|0;D_(a);d=d+1|0}if((h|0)==8)qa(108567,108461,616,108570);if((f|0)==(d|0))return;else qa(108582,108461,623,108570)}function gQ(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,l=0.0;d=c[b+32>>2]|0;if(!d){e=0.0;f=0.0}else{e=+h[d>>3];f=+h[d+8>>3]}l=+h[b>>3];k=~~+A(+(l-e));g=+h[b+8>>3];j=~~+A(+(g-f));i=~~+N(+(l+e+ +h[b+16>>3]));if((i|0)==2147483647)qa(108594,108461,264,108621);d=~~+N(+(g+f+ +h[b+24>>3]));if((d|0)==2147483647)qa(108631,108461,266,108621);else{c[a>>2]=k;c[a+4>>2]=j;c[a+8>>2]=i;c[a+12>>2]=d;return}}function hQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=0;e=c[a>>2]|0;d=c[a+4>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;i=e>>>a&1;b=d>>>a&1;g=b+-1|0;h=g&(e^d);g=g&0-i;f=i<<1|f<<2|i^b;b=a;e=h^e^g;d=h^d^g}return f|0}function iQ(b){b=b|0;var d=0,e=0,f=0,g=0;d=W_(b)|0;if(d>>>0>=(c[46595]|0)>>>0){d=d+11|0;c[46595]=d;d=xH(c[46596]|0,d)|0;c[46596]=d;if(!d)d=0;else e=4}else{d=c[46596]|0;e=4}if((e|0)==4){g=d;while(1){e=a[b>>0]|0;if(!(e<<24>>24))break;f=e&255;if(Q$(f)|0)e=(P$(f)|0)&255;a[g>>0]=e;g=g+1|0;b=b+1|0}a[g>>0]=0}return d|0}function jQ(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0;F=l;l=l+144|0;s=F+96|0;p=F+80|0;v=F+124|0;t=F+72|0;w=F+64|0;x=F+56|0;C=F+48|0;D=F+40|0;E=F+32|0;y=F+24|0;z=F+16|0;A=F+8|0;B=F;i=F+120|0;m=F+116|0;n=F+112|0;o=F+108|0;c[e+32>>2]=f;r=b;while(1)if((a[r>>0]|0)==32)r=r+1|0;else break;c[o>>2]=255;b=a[r>>0]|0;a:do if(b<<24>>24==35){c[p>>2]=i;c[p+4>>2]=m;c[p+8>>2]=n;c[p+12>>2]=o;if((N1(r,108673,p)|0)<=2){b=a[r>>0]|0;q=12;break}switch(f|0){case 0:{G=+((c[i>>2]|0)>>>0)*.00392156862745098;h[C>>3]=G;g=+((c[m>>2]|0)>>>0)*.00392156862745098;h[D>>3]=g;j=+((c[n>>2]|0)>>>0)*.00392156862745098;h[E>>3]=j;k=+((c[o>>2]|0)>>>0)*.00392156862745098;kQ(G,g,j,t,w,x);h[e>>3]=+h[t>>3];h[e+8>>3]=+h[w>>3];h[e+16>>3]=+h[x>>3];h[e+24>>3]=k;b=0;break a}case 1:{a[e>>0]=c[i>>2];a[e+1>>0]=c[m>>2];a[e+2>>0]=c[n>>2];a[e+3>>0]=c[o>>2];b=0;break a}case 3:{j=+((c[i>>2]|0)>>>0)*.00392156862745098;h[C>>3]=j;k=+((c[m>>2]|0)>>>0)*.00392156862745098;h[D>>3]=k;G=+((c[n>>2]|0)>>>0)*.00392156862745098;h[E>>3]=G;lQ(j,k,G,y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break a}case 2:{c[e>>2]=(((c[i>>2]|0)*65535|0)>>>0)/255|0;c[e+4>>2]=(((c[m>>2]|0)*65535|0)>>>0)/255|0;c[e+8>>2]=(((c[n>>2]|0)*65535|0)>>>0)/255|0;c[e+12>>2]=(((c[o>>2]|0)*65535|0)>>>0)/255|0;b=0;break a}case 4:{h[e>>3]=+((c[i>>2]|0)>>>0)*.00392156862745098;h[e+8>>3]=+((c[m>>2]|0)>>>0)*.00392156862745098;h[e+16>>3]=+((c[n>>2]|0)>>>0)*.00392156862745098;h[e+24>>3]=+((c[o>>2]|0)>>>0)*.00392156862745098;b=0;break a}default:{b=0;break a}}}else q=12;while(0);b:do if((q|0)==12){if(!(b<<24>>24!=46?((b&255)+-48|0)>>>0>=10:0)){b=W_(r)|0;if(b>>>0>=(c[46597]|0)>>>0){b=b+11|0;c[46597]=b;b=xH(c[46598]|0,b)|0;c[46598]=b;if(!b){b=-1;break}}else b=c[46598]|0;m=b;i=r;c:while(1){n=i+1|0;i=a[i>>0]|0;switch(i<<24>>24){case 0:break c;case 44:{i=32;break}default:{}}a[m>>0]=i;m=m+1|0;i=n}a[m>>0]=0;c[s>>2]=t;c[s+4>>2]=w;c[s+8>>2]=x;if((N1(b,108687,s)|0)==3){k=+h[t>>3];k=k<1.0?k:1.0;k=k>0.0?k:0.0;h[t>>3]=k;j=+h[w>>3];j=j<1.0?j:1.0;j=j>0.0?j:0.0;h[w>>3]=j;g=+h[x>>3];g=g<1.0?g:1.0;g=g>0.0?g:0.0;h[x>>3]=g;switch(f|0){case 0:{h[e>>3]=k;h[e+8>>3]=j;h[e+16>>3]=g;h[e+24>>3]=1.0;b=0;break b}case 1:{mQ(k,j,g,C,D,E);a[e>>0]=~~(+h[C>>3]*255.0);a[e+1>>0]=~~(+h[D>>3]*255.0);a[e+2>>0]=~~(+h[E>>3]*255.0);a[e+3>>0]=-1;b=0;break b}case 3:{mQ(k,j,g,C,D,E);lQ(+h[C>>3],+h[D>>3],+h[E>>3],y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break b}case 2:{mQ(k,j,g,C,D,E);c[e>>2]=~~(+h[C>>3]*65535.0);c[e+4>>2]=~~(+h[D>>3]*65535.0);c[e+8>>2]=~~(+h[E>>3]*65535.0);c[e+12>>2]=65535;b=0;break b}case 4:{mQ(k,j,g,C,D,E);h[e>>3]=+h[C>>3];h[e+8>>3]=+h[D>>3];h[e+16>>3]=+h[E>>3];h[e+24>>3]=1.0;b=0;break b}default:{b=0;break b}}}}i=nQ(r)|0;c[v>>2]=i;if(!i)b=-1;else{b=c[46599]|0;if(!(((b|0)!=0?(u=c[b>>2]|0,(a[u>>0]|0)==(a[i>>0]|0)):0)?(b$(u,i)|0)==0:0)){b=e2(v,25844,2491,12,101)|0;c[46599]=b;if(!b)switch(f|0){case 0:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;h[e+24>>3]=1.0;b=1;break b}case 1:{a[e+2>>0]=0;a[e+1>>0]=0;a[e>>0]=0;a[e+3>>0]=-1;b=1;break b}case 3:{c[e>>2]=0;b=1;break b}case 2:{c[e+8>>2]=0;c[e+4>>2]=0;c[e>>2]=0;c[e+12>>2]=65535;b=1;break b}case 4:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;h[e+24>>3]=1.0;b=1;break b}default:{b=1;break b}}}switch(f|0){case 0:{h[e>>3]=+(d[b+4>>0]|0)*.00392156862745098;h[e+8>>3]=+(d[b+5>>0]|0)*.00392156862745098;h[e+16>>3]=+(d[b+6>>0]|0)*.00392156862745098;h[e+24>>3]=+(d[b+10>>0]|0)*.00392156862745098;b=0;break b}case 1:{a[e>>0]=a[b+7>>0]|0;a[e+1>>0]=a[b+8>>0]|0;a[e+2>>0]=a[b+9>>0]|0;a[e+3>>0]=a[b+10>>0]|0;b=0;break b}case 3:{j=+(d[b+7>>0]|0)*.00392156862745098;h[C>>3]=j;k=+(d[b+8>>0]|0)*.00392156862745098;h[D>>3]=k;G=+(d[b+9>>0]|0)*.00392156862745098;h[E>>3]=G;lQ(j,k,G,y,z,A,B);a[e>>0]=~~+h[y>>3]*255;a[e+1>>0]=~~+h[z>>3]*255;a[e+2>>0]=~~+h[A>>3]*255;a[e+3>>0]=~~+h[B>>3]*255;b=0;break b}case 2:{c[e>>2]=(d[b+7>>0]|0)*257;c[e+4>>2]=(d[b+8>>0]|0)*257;c[e+8>>2]=(d[b+9>>0]|0)*257;c[e+12>>2]=(d[b+10>>0]|0)*257;b=0;break b}case 4:{h[e>>3]=+(d[b+7>>0]|0)*.00392156862745098;h[e+8>>3]=+(d[b+8>>0]|0)*.00392156862745098;h[e+16>>3]=+(d[b+9>>0]|0)*.00392156862745098;h[e+24>>3]=+(d[b+10>>0]|0)*.00392156862745098;b=0;break b}default:{b=0;break b}}}}while(0);l=F;return b|0}function kQ(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;i=b<c?b:c;m=b>c?b:c;m=m<a?a:m;i=m-(i>a?a:i);g=i/m;if(m>0.0)if(g>0.0){j=(m-a)/i;k=(m-b)/i;l=(m-c)/i;do if(!(m==a)){if(m==b){a=j+2.0-l;break}if(m==c)a=k+4.0-j;else a=0.0}else a=(b-c)/i;while(0);a=a*60.0;if(a<0.0)a=a+360.0}else a=0.0;else{g=0.0;a=0.0}h[d>>3]=a*.002777777777777778;h[f>>3]=m;h[e>>3]=g;return}function lQ(a,b,c,d,e,f,g){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h[d>>3]=1.0-a;h[e>>3]=1.0-b;h[f>>3]=1.0-c;b=+h[d>>3];c=+h[e>>3];c=b<c?b:c;h[g>>3]=c;b=+h[f>>3];c=b<c?b:c;h[g>>3]=c;h[d>>3]=+h[d>>3]-c;h[e>>3]=+h[e>>3]-+h[g>>3];h[f>>3]=+h[f>>3]-+h[g>>3];return}function mQ(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0,l=0;a:do if(!(b<=0.0)){i=!(a>=1.0)?a*6.0:0.0;l=~~i;i=i-+(l|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(l|0){case 0:{g=a;i=b;a=c;k=8;break a}case 1:{g=a;i=c;a=j;k=8;break a}case 2:{g=b;i=c;k=8;break a}case 3:{g=c;i=j;k=8;break a}case 4:{g=c;i=a;a=b;k=8;break a}case 5:{g=j;i=a;a=c;k=8;break a}default:break a}}else{g=c;i=c;a=c;k=8}while(0);if((k|0)==8){h[d>>3]=a;h[e>>3]=i;h[f>>3]=g}return}function nQ(b){b=b|0;var d=0,e=0;d=a[b>>0]|0;if(((d<<24>>24!=98?(e=b+1|0,!(d<<24>>24==119|(z$(e,134184,4)|0)==0)):0)?!(d<<24>>24==108|(z$(e,134189,4)|0)==0):0)?(z$(e,134194,8)|0)!=0:0){do if(d<<24>>24==47){d=A$(e,47)|0;if(!d)b=e;else{if((a[e>>0]|0)!=47){e=(V$(134203,e,4)|0)==0;b=e?d+1|0:b;break}d=c[46600]|0;if((d|0?a[d>>0]|0:0)?V$(134203,d,3)|0:0){b=pQ(d,b+2|0)|0;break}b=b+2|0}}else{d=c[46600]|0;if(((d|0)!=0?(a[d>>0]|0)!=0:0)?(V$(134203,d,3)|0)!=0:0)b=pQ(d,b)|0}while(0);b=iQ(b)|0}return b|0}function oQ(a,b){a=a|0;b=b|0;return O$(c[a>>2]|0,c[b>>2]|0)|0}function pQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=W_(a)|0;g=(W_(b)|0)+g|0;d=g+13|0;if((g+3|0)>>>0<(c[46601]|0)>>>0)d=c[46602]|0;else{c[46601]=d;d=xH(c[46602]|0,d)|0;c[46602]=d}c[e>>2]=a;c[e+4>>2]=b;Y0(d,134208,e)|0;l=f;return c[46602]|0}function qQ(a){a=a|0;c[46600]=a;return}function rQ(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,g=0;f=l;l=l+208|0;g=f;sQ(g,+h[a>>3],+h[a+8>>3],b,c,d,e);a=tQ(g)|0;l=f;return a|0}function sQ(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;var i=0,j=0;h[a>>3]=b;h[a+8>>3]=c;j=a+16|0;h[j>>3]=d;i=a+24|0;h[i>>3]=e;h[a+32>>3]=0.0;c=+K(+(+F(+f)/e),+(+E(+f)/d));h[a+56>>3]=c;e=+K(+(+F(+g)/e),+(+E(+g)/d));h[a+40>>3]=1.0;h[a+48>>3]=0.0;e=e-+A(+((e-c)*.15915494309189535))*6.283185307179586;h[a+64>>3]=g-f>3.141592653589793&e-c<3.141592653589793?e+6.283185307179586:e;zQ(a);AQ(a);BQ(a);g=+h[j>>3];g=(g-+h[i>>3])/g;h[a+168>>3]=g;h[a+176>>3]=(2.0-g)*g;g=1.0-g;h[a+184>>3]=g;h[a+192>>3]=g*g;return}function tQ(a){a=a|0;var b=0,c=0.0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;q=uH(8)|0;f=+h[a+56>>3];e=+h[a+64>>3]-f;p=1;b=0;while(1){o=e/+(p|0);if(!(b<<24>>24==0&(p|0)<1024))break;a:do if(!(o<=1.5707963267948966))b=0;else{c=f;d=0;b=1;while(1){if(!(b<<24>>24!=0&(d|0)<(p|0)))break a;n=c+o;b=+uQ(a,c,n)<=1.0e-05&1;c=n;d=d+1|0}}while(0);p=p<<1}i=+E(+f);u=+F(+f);d=a+16|0;s=+h[d>>3];v=s*i;j=a+24|0;c=+h[j>>3];g=c*u;i=c*i;c=+h[a>>3];k=a+40|0;t=+h[k>>3];l=a+48|0;r=+h[l>>3];e=t*v+c-r*g;m=a+8|0;n=+h[m>>3];g=r*v+t*g+n;s=-(u*s);vQ(q,c,n);wQ(q,e,g);n=+G(+(o*.5));n=+F(+o)*.3333333333333333*(+C(+(n*n*3.0+4.0))+-1.0);c=f;f=g;g=r*s+t*i;i=t*s-r*i;b=0;while(1){if((b|0)>=(p|0))break;r=c+o;u=+E(+r);v=+F(+r);x=+h[d>>3];z=x*u;w=+h[j>>3];t=w*v;u=w*u;w=+h[k>>3];y=+h[l>>3];s=w*z+ +h[a>>3]-y*t;t=y*z+w*t+ +h[m>>3];x=-(v*x);v=w*x-y*u;u=y*x+w*u;xQ(q,e+i*n,f+g*n,s-v*n,t-u*n,s,t);c=r;e=s;f=t;g=u;i=v;b=b+1|0}yQ(q);return q|0}function uQ(a,b,c){a=a|0;b=+b;c=+c;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;d=c+b;i=+h[a+16>>3];e=+h[a+24>>3]/i;g=+E(+d);f=+E(+(d*2.0));d=+E(+(d*3.0));a=e<.25?10392:10648;return +(((e*.001+4.98)*e+.207)/(e+.0067)*i*+L(+(((+h[a+32>>3]*e+ +h[a+40>>3])*e+ +h[a+48>>3])/(+h[a+56>>3]+e)*g+((+h[a>>3]*e+ +h[a+8>>3])*e+ +h[a+16>>3])/(+h[a+24>>3]+e)+((+h[a+64>>3]*e+ +h[a+72>>3])*e+ +h[a+80>>3])/(+h[a+88>>3]+e)*f+((+h[a+96>>3]*e+ +h[a+104>>3])*e+ +h[a+112>>3])/(+h[a+120>>3]+e)*d+(((+h[a+160>>3]*e+ +h[a+168>>3])*e+ +h[a+176>>3])/(+h[a+184>>3]+e)*g+((+h[a+128>>3]*e+ +h[a+136>>3])*e+ +h[a+144>>3])/(+h[a+152>>3]+e)+((+h[a+192>>3]*e+ +h[a+200>>3])*e+ +h[a+208>>3])/(+h[a+216>>3]+e)*f+((+h[a+224>>3]*e+ +h[a+232>>3])*e+ +h[a+240>>3])/(+h[a+248>>3]+e)*d)*(c-b))))}function vQ(a,b,d){a=a|0;b=+b;d=+d;var e=0;c[46603]=100;e=uH(1600)|0;c[a>>2]=e;h[e>>3]=b;h[e+8>>3]=d;c[a+4>>2]=1;return}function wQ(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;f=c[a>>2]|0;e=(c[a+4>>2]|0)+-1|0;xQ(a,+h[f+(e<<4)>>3],+h[f+(e<<4)+8>>3],b,d,b,d);return}function xQ(a,b,d,e,f,g,i){a=a|0;b=+b;d=+d;e=+e;f=+f;g=+g;i=+i;var j=0,k=0,l=0,m=0;l=a+4|0;j=c[l>>2]|0;k=c[46603]|0;if((j+3|0)<(k|0))a=c[a>>2]|0;else{c[46603]=k<<1;j=F_(c[a>>2]|0,k<<5)|0;c[a>>2]=j;a=j;j=c[l>>2]|0}h[a+(j<<4)>>3]=b;m=j+1|0;h[a+(j<<4)+8>>3]=d;h[a+(m<<4)>>3]=e;k=j+2|0;h[a+(m<<4)+8>>3]=f;h[a+(k<<4)>>3]=g;c[l>>2]=j+3;h[a+(k<<4)+8>>3]=i;return}function yQ(a){a=a|0;var b=0;b=c[a>>2]|0;wQ(a,+h[b>>3],+h[b+8>>3]);c[a>>2]=F_(c[a>>2]|0,c[a+4>>2]<<4)|0;c[46603]=0;return}function zQ(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0;d=+h[a+16>>3];b=+h[a+24>>3];b=+C(+(d*d-b*b));d=b*+h[a+40>>3];b=b*+h[a+48>>3];e=+h[a>>3];h[a+104>>3]=e-d;c=+h[a+8>>3];h[a+112>>3]=c-b;h[a+120>>3]=e+d;h[a+128>>3]=c+b;return}function AQ(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0;d=+h[a+16>>3];i=+h[a+56>>3];j=+E(+i)*d;b=+h[a+24>>3];i=+F(+i)*b;g=+h[a+64>>3];d=+E(+g)*d;b=+F(+g)*b;g=+h[a>>3];c=+h[a+40>>3];e=+h[a+48>>3];h[a+72>>3]=c*j+g-e*i;f=+h[a+8>>3];h[a+80>>3]=e*j+f+c*i;h[a+88>>3]=g+c*d-e*b;h[a+96>>3]=f+e*d+c*b;return}function BQ(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0;k=+h[a+24>>3];l=+h[a+16>>3];e=k/l;m=+h[a+48>>3];n=+B(+m)<.1;j=+h[a+40>>3];do if(n){b=m/j;c=+J(+(b*e));d=-c;if(j<0.0){b=+J(+(b/e));e=d;d=3.141592653589793-c;c=4.71238898038469-b;b=1.5707963267948966-b;break}else{b=+J(+(b/e));e=-3.141592653589793-c;c=1.5707963267948966-b;b=-1.5707963267948966-b;break}}else{b=j/m;c=+J(+(b/e));d=c+1.5707963267948966;if(m<0.0){b=+J(+(b*e));e=c+-1.5707963267948966;c=b+3.141592653589793;break}else{b=+J(+(b*e));e=d;d=c+4.71238898038469;c=b;b=b+-3.141592653589793;break}}while(0);g=+h[a+56>>3];e=e-+A(+((e-g)*.15915494309189535))*6.283185307179586;b=b-+A(+((b-g)*.15915494309189535))*6.283185307179586;f=d-+A(+((d-g)*.15915494309189535))*6.283185307179586;g=c-+A(+((c-g)*.15915494309189535))*6.283185307179586;i=+h[a+64>>3];if(!(e<=i)){e=+h[a+72>>3];c=+h[a+88>>3];c=e<c?e:c}else c=+E(+e)*l*j+ +h[a>>3]-k*+F(+e)*m;h[a+136>>3]=c;if(!(b<=i)){e=+h[a+80>>3];d=+h[a+96>>3];d=e<d?e:d}else d=+E(+b)*l*m+ +h[a+8>>3]+ +F(+b)*k*j;h[a+144>>3]=d;if(!(f<=i)){f=+h[a+72>>3];b=+h[a+88>>3];b=f>b?f:b}else b=+E(+f)*l*j+ +h[a>>3]-k*+F(+f)*m;h[a+152>>3]=b-c;if(!(g<=i)){m=+h[a+80>>3];b=+h[a+96>>3];b=m>b?m:b}else b=+E(+g)*l*m+ +h[a+8>>3]+ +F(+g)*k*j;h[a+160>>3]=b-d;return}function CQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+80|0;m=n;DQ(b);k=+h[e+56>>3];g=+h[e+64>>3];switch(a[e+80>>0]|0){case 116:{g=(+h[e+48>>3]-+EQ(d))*.5+g;f=4;break}case 98:{g=g-(+h[e+48>>3]-+EQ(d))*.5;f=4;break}default:{}}if((f|0)==4)g=g+-1.0;h[m>>3]=k;h[m+8>>3]=g;c[m+20>>2]=c[e+8>>2];c[m+16>>2]=c[e+4>>2];h[m+32>>3]=+h[e+16>>3];j=b+16|0;f=xx(c[(c[j>>2]|0)+8>>2]|0,134215)|0;e=m+56|0;c[e>>2]=f;i=m+60|0;c[i>>2]=c[(c[j>>2]|0)+212>>2];j=m+64|0;a[j>>0]=0;if(!((f|0)!=0?(a[f>>0]|0)!=0:0))c[e>>2]=134226;if((a[d+4>>0]|0)==1){e=c[d>>2]|0;YO(b,c[(c[b>>2]|0)+336>>2]|0);f=c[e+24>>2]|0;if(!f)UO(b,134232);else UO(b,f);GQ(b,e,m);if(a[j>>0]|0)D_(c[i>>2]|0)}else FQ(b,c[d>>2]|0,m);HQ(b);l=n;return}function DQ(a){a=a|0;var d=0,e=0,f=0;d=NE(a)|0;e=c[d>>2]|0;a=c[e+4>>2]|0;c[d+4>>2]=a;c[d+12>>2]=c[e+12>>2];switch(a|0){case 2:{a=e+8|0;f=6;break}case 0:{a=e+8|0;f=6;break}case 1:{a=e+8|0;f=6;break}case 3:{a=e+8|0;f=6;break}default:{}}if((f|0)==6)c[d+8>>2]=c[a>>2];c[d+208>>2]=c[e+208>>2];c[d+228>>2]=c[e+228>>2];c[d+244>>2]=c[e+244>>2];f=d+260|0;b[f>>1]=b[f>>1]&-2|b[e+260>>1]&1;return}function EQ(b){b=b|0;var d=0.0,e=0,f=0;switch(a[b+4>>0]|0){case 1:{e=c[b>>2]|0;b=e+72|0;e=e+56|0;f=5;break}case 3:{e=c[b>>2]|0;b=e+24|0;e=e+8|0;f=5;break}case 2:{e=c[b>>2]|0;b=e+32|0;e=e+16|0;f=5;break}default:d=0.0}if((f|0)==5)d=+h[b>>3]-+h[e>>3];return +d}function FQ(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;n=l;l=l+96|0;j=n+64|0;i=n+32|0;g=n+16|0;k=n;m=b[e+4>>1]|0;if(m<<16>>16>=1){r=e+8|0;p=+h[e+24>>3];o=+h[r>>3];h[k>>3]=(o+p)*.5+ +h[f>>3];h[k+8>>3]=(+h[e+16>>3]+ +h[e+32>>3])*.5+ +h[f+8>>3];q=c[e>>2]|0;s=f+16|0;f=a[e+6>>0]|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[i+16>>2]=c[s+16>>2];c[i+20>>2]=c[s+20>>2];c[i+24>>2]=c[s+24>>2];c[i+28>>2]=c[s+28>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];c[j+16>>2]=c[r+16>>2];c[j+20>>2]=c[r+20>>2];c[j+24>>2]=c[r+24>>2];c[j+28>>2]=c[r+28>>2];TQ(d,m<<16>>16,q,g,(p-o)*.5,i,j,f)}l=n;return}function GQ(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+176|0;t=y+96|0;v=y+64|0;w=y+136|0;p=y;q=y+128|0;r=f+48|0;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];c[v+12>>2]=c[r+12>>2];c[v+16>>2]=c[r+16>>2];c[v+20>>2]=c[r+20>>2];c[v+24>>2]=c[r+24>>2];c[v+28>>2]=c[r+28>>2];m=+h[g>>3];n=+h[g+8>>3];r=f+84|0;i=c[r>>2]|0;if(!(c[f>>2]|0))x=(c[f+8>>2]|0)!=0;else x=1;u=f+108|0;j=c[u>>2]|0;if(j|0)IQ(g,j,183464);h[v>>3]=+h[v>>3]+m;s=v+16|0;h[s>>3]=+h[s>>3]+m;s=v+8|0;h[s>>3]=+h[s>>3]+n;s=v+24|0;h[s>>3]=+h[s>>3]+n;if(x?(c[e+152>>2]&4|0)==0:0){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];s=JQ(e,g,f,t,w)|0}else s=0;o=f+42|0;j=b[o>>1]|0;if(!(j&32)){k=c[f+20>>2]|0;if(k){j=KQ(e,k,c[f+28>>2]|0,j&65535,q)|0;if(!(b[o>>1]&4)){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];$O(e,t,j)}else{o=d[f+33>>0]|0;c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];EJ(e,LQ(p,t,o)|0,4,4,j)}D_(c[q>>2]|0)}while(1){j=c[i>>2]|0;if(!j)break;MQ(e,j,g);i=i+4|0}i=c[r>>2]|0;fP(e,1.0);j=f+24|0;while(1){k=i+4|0;i=c[i>>2]|0;if(!i)break;if(!(a[i+100>>0]|0)){i=k;continue}NQ(e,i,g,c[j>>2]|0,c[k>>2]|0);i=k}if(a[f+33>>0]|0){c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];c[t+16>>2]=c[v+16>>2];c[t+20>>2]=c[v+20>>2];c[t+24>>2]=c[v+24>>2];c[t+28>>2]=c[v+28>>2];OQ(e,f,t)}}if(s|0)PQ(e,w);if((x?c[e+152>>2]&4|0:0)?(c[t>>2]=c[v>>2],c[t+4>>2]=c[v+4>>2],c[t+8>>2]=c[v+8>>2],c[t+12>>2]=c[v+12>>2],c[t+16>>2]=c[v+16>>2],c[t+20>>2]=c[v+20>>2],c[t+24>>2]=c[v+24>>2],c[t+28>>2]=c[v+28>>2],JQ(e,g,f,t,w)|0):0)PQ(e,w);if(c[u>>2]|0)QQ(g,183464);l=y;return}function HQ(a){a=a|0;var b=0;b=c[a+16>>2]|0;c[b+208>>2]=0;c[b+228>>2]=0;c[b+244>>2]=0;c[b+212>>2]=0;OE(a);return}function IQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0;i=a+16|0;f=c[i>>2]|0;if(f|0){if(!(c[b>>2]|0)){f=0;g=d}else{c[d>>2]=f;f=c[b>>2]|0;g=i}c[g>>2]=f}f=c[a+20>>2]|0;if(f|0){g=b+4|0;if(!(c[g>>2]|0)){f=0;g=d}else{c[d+4>>2]=f;f=c[g>>2]|0;g=i}c[g+4>>2]=f}e=+h[a+32>>3];if(e>=0.0){f=b+16|0;if(!(+h[f>>3]>=0.0))e=-1.0;else{h[d+16>>3]=e;e=+h[f>>3];d=i}h[d+16>>3]=e}return}function JQ(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+224|0;n=u+8|0;k=u;t=u+40|0;j=u+184|0;i=u+56|0;m=c[d+16>>2]|0;o=m+208|0;c[h>>2]=c[o>>2];p=m+228|0;c[h+4>>2]=c[p>>2];q=m+244|0;c[h+8>>2]=c[q>>2];r=m+212|0;c[h+12>>2]=c[r>>2];s=m+260|0;a[h+16>>0]=(b[s>>1]<<15&65535)<<16>>16>>15;h=c[f+16>>2]|0;if((h|0)!=0?(a[h>>0]|0)!=0:0)i=0;else{Tw(t,128,i);i=e+60|0;h=c[i>>2]|0;if(!h){h=n1(QE(d,c[m+8>>2]|0,t)|0)|0;c[i>>2]=h;a[e+64>>0]=1}Ww(t,h)|0;i=c[46604]|0;c[46604]=i+1;c[k>>2]=i;Y0(j,134309,k)|0;Ww(t,j)|0;i=t+4|0;h=c[i>>2]|0;if(h>>>0>=(c[t+8>>2]|0)>>>0){Uw(t,1)|0;h=c[i>>2]|0}a[h>>0]=0;h=c[t>>2]|0;c[i>>2]=h;i=1}h=PE(d,0,c[f>>2]|0,c[f+12>>2]|0,c[f+8>>2]|0,h,c[m+8>>2]|0)|0;if(i)Xw(t);do if(h|0){if((c[o>>2]|0)==0?(b[s>>1]&1)==0:0)break;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];c[n+16>>2]=c[g+16>>2];c[n+20>>2]=c[g+20>>2];c[n+24>>2]=c[g+24>>2];c[n+28>>2]=c[g+28>>2];XE(d,n);PO(d,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0)}while(0);l=u;return h|0}function KQ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0;j=l;l=l+16|0;i=j;if(!((uG(b,f,i)|0)<<24>>24)){WO(a,b);b=1}else{WO(a,c[f>>2]|0);b=c[f+4>>2]|0;h=+g[i>>2];if(!b)XO(a,134232,d,h);else XO(a,b,d,h);b=e>>>1&1|2}UO(a,134297);l=j;return b|0}function LQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];e=a+32|0;b=b+16|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];if((d|0)>1){j=+(d|0)*.5;i=+h[a>>3]+j;h[a>>3]=i;d=a+8|0;g=+h[d>>3]+j;h[d>>3]=g;f=+h[e>>3]-j;h[e>>3]=f;e=a+40|0;j=+h[e>>3]-j;h[e>>3]=j}else{f=+h[e>>3];g=+h[a+8>>3];i=+h[a>>3];j=+h[a+40>>3]}h[a+16>>3]=f;h[a+24>>3]=g;h[a+48>>3]=i;h[a+56>>3]=j;return a|0}function MQ(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+176|0;r=v+96|0;s=v+136|0;t=v+64|0;p=v;q=v+128|0;u=f+48|0;c[t>>2]=c[u>>2];c[t+4>>2]=c[u+4>>2];c[t+8>>2]=c[u+8>>2];c[t+12>>2]=c[u+12>>2];c[t+16>>2]=c[u+16>>2];c[t+20>>2]=c[u+20>>2];c[t+24>>2]=c[u+24>>2];c[t+28>>2]=c[u+28>>2];j=+h[g>>3];k=+h[g+8>>3];if(!(c[f>>2]|0))u=(c[f+8>>2]|0)!=0;else u=1;h[t>>3]=+h[t>>3]+j;o=t+16|0;h[o>>3]=+h[o>>3]+j;o=t+8|0;h[o>>3]=+h[o>>3]+k;o=t+24|0;h[o>>3]=+h[o>>3]+k;if(u?(c[e+152>>2]&4|0)==0:0){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];o=JQ(e,g,f,r,s)|0}else o=0;n=f+42|0;i=b[n>>1]|0;a:do if(!(i&32)){m=c[f+20>>2]|0;if(m|0){i=KQ(e,m,c[f+28>>2]|0,i&65535,q)|0;if(!(b[n>>1]&4)){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];$O(e,r,i)}else{n=d[f+33>>0]|0;c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];EJ(e,LQ(p,r,n)|0,4,4,i)}D_(c[q>>2]|0)}if(a[f+33>>0]|0){c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];c[r+16>>2]=c[t+16>>2];c[r+20>>2]=c[t+20>>2];c[r+24>>2]=c[t+24>>2];c[r+28>>2]=c[t+28>>2];OQ(e,f,r)}i=f+88|0;switch(a[f+92>>0]|0){case 1:{GQ(e,c[i>>2]|0,g);break a}case 3:{SQ(e,c[i>>2]|0,g);break a}default:{FQ(e,c[i>>2]|0,g);break a}}}while(0);if(o|0)PQ(e,s);if((u?c[e+152>>2]&4|0:0)?(c[r>>2]=c[t>>2],c[r+4>>2]=c[t+4>>2],c[r+8>>2]=c[t+8>>2],c[r+12>>2]=c[t+12>>2],c[r+16>>2]=c[t+16>>2],c[r+20>>2]=c[t+20>>2],c[r+24>>2]=c[t+24>>2],c[r+28>>2]=c[t+28>>2],JQ(e,g,f,r,s)|0):0)PQ(e,s);l=v;return}function NQ(f,g,i,j,k){f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0;A=l;l=l+32|0;y=A+16|0;z=A;r=+h[i>>3];x=+h[i+8>>3];q=(j|0)==0?134232:j;WO(f,q);UO(f,q);t=+h[g+48>>3];o=+h[g+56>>3];u=+h[g+64>>3];p=+h[g+72>>3];s=t+r;r=u+r;x=o+x;q=g+100|0;i=a[q>>0]|0;if((i&1)!=0?(n=c[g+96>>2]|0,((e[g+80>>1]|0)+(e[g+84>>1]|0)|0)<(c[n+104>>2]|0)):0){i=b[g+86>>1]|0;do if(i<<16>>16)if(((e[g+82>>1]|0)+(i&65535)|0)==(c[n+100>>2]|0)){B=a[n+32>>0]|0;C=(B<<24>>24)/2|0;j=(C<<24>>24)+(d[n+33>>0]|0)|0;i=j;j=j&255;m=x-+(C<<24>>24);n=B;break}else{n=a[n+32>>0]|0;i=0;j=((n<<24>>24)/2|0)<<24>>24;m=x;break}else{C=a[n+32>>0]|0;j=((C<<24>>24)/2|0)<<24>>24;i=j+(d[n+33>>0]|0)|0;m=x;n=C}while(0);h[z+8>>3]=m-+(j|0);h[z>>3]=r+ +(((n<<24>>24)/2|0)<<24>>24);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];RQ(f,y,0.0,p-o+ +(i&255|0)+ +(n<<24>>24));i=a[q>>0]|0}if(i&2?(v=b[g+86>>1]|0,w=c[g+96>>2]|0,((e[g+82>>1]|0)+(v&65535)|0)<(c[w+100>>2]|0)):0){i=b[g+84>>1]|0;do if(!(i<<16>>16)){i=a[w+32>>0]|0;C=(i<<24>>24)/2|0;n=(C<<24>>24)+(d[w+33>>0]|0)|0;j=n&255;n=n&255;m=+(C<<24>>24);h[z>>3]=s-m-+(n|0);if((c[w+104>>2]|0)==(e[g+80>>1]|0)){j=n<<1&255;break}if((k|0)!=0?(b[k+86>>1]|0)!=v<<16>>16:0)j=~~(+(j&255)-u+ +h[w+64>>3]-m)&255}else{if(((e[g+80>>1]|0)+(i&65535)|0)==(c[w+104>>2]|0)){i=a[w+32>>0]|0;C=(i<<24>>24)/2|0;j=(C&255)+(d[w+33>>0]|0)&255;h[z>>3]=s-+(C<<24>>24);break}i=a[w+32>>0]|0;m=+(((i<<24>>24)/2|0)<<24>>24);h[z>>3]=s-m;if((k|0)!=0?(b[k+86>>1]|0)!=v<<16>>16:0)j=~~(+h[w+64>>3]-u-m)&255;else j=0}while(0);h[z+8>>3]=x-+(((i<<24>>24)/2|0)<<24>>24);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];RQ(f,y,u-t+ +(j&255)+ +(i<<24>>24),0.0)}l=A;return}function OQ(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;p=l;l=l+160|0;o=p+112|0;n=p;j=p+144|0;m=c[f+24>>2]|0;UO(e,(m|0)==0?134232:m);m=f+42|0;i=b[m>>1]|0;if(!(i&384))YO(e,c[(c[e>>2]|0)+336>>2]|0);else{c[j+4>>2]=0;c[j>>2]=0;i=i&65535;if(!(i&256)){if(i&128|0){i=134238;k=4}}else{i=134245;k=4}if((k|0)==4)c[j>>2]=i;YO(e,j)}k=f+33|0;fP(e,+(d[k>>0]|0));a:do if(!(b[m>>1]&4)){i=b[f+36>>1]&15360;if(!(i<<16>>16)){i=a[k>>0]|0;if((i&255)>1){q=+(i&255)*.5;h[g>>3]=+h[g>>3]+q;n=g+8|0;h[n>>3]=+h[n>>3]+q;n=g+16|0;h[n>>3]=+h[n>>3]-q;n=g+24|0;h[n>>3]=+h[n>>3]-q};c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];$O(e,o,0);break}j=n+16|0;m=d[k>>0]|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];LQ(j,o,m)|0;do switch(((i&65535)+-1024|0)>>>10&4194303|0){case 7:{bP(e,j,2);break a}case 3:{bP(e,n+32|0,2);break a}case 1:{bP(e,n+48|0,2);break a}case 0:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];bP(e,n,2);break a}case 11:{bP(e,j,3);break a}case 5:{bP(e,n+32|0,3);break a}case 2:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];bP(e,n+48|0,3);break a}case 8:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];bP(e,n,3);break a}case 13:{bP(e,j,4);break a}case 6:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];bP(e,n+32|0,4);break a}case 10:{g=n+80|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];g=n+96|0;o=n+32|0;c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];bP(e,n+48|0,4);break a}case 12:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];bP(e,n,4);break a}case 9:{bP(e,j,2);bP(e,n+48|0,2);break a}case 4:{g=n+64|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];bP(e,n,2);bP(e,n+32|0,2);break a}default:break a}while(0)}else{m=d[k>>0]|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];c[o+20>>2]=c[g+20>>2];c[o+24>>2]=c[g+24>>2];c[o+28>>2]=c[g+28>>2];EJ(e,LQ(n,o,m)|0,4,4,0)}while(0);l=p;return}function PQ(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=c[d+16>>2]|0;f=h+208|0;if((c[f>>2]|0)==0?(b[h+260>>1]&1)==0:0)d=0;else{QO(d);d=c[f>>2]|0}if((d|0)!=(c[e>>2]|0)){D_(d);c[f>>2]=c[e>>2]}d=h+228|0;f=c[d>>2]|0;g=e+4|0;if((f|0)!=(c[g>>2]|0)){D_(f);c[d>>2]=c[g>>2]}d=h+244|0;f=c[d>>2]|0;g=e+8|0;if((f|0)!=(c[g>>2]|0)){D_(f);c[d>>2]=c[g>>2]}d=h+212|0;f=c[d>>2]|0;g=e+12|0;if((f|0)!=(c[g>>2]|0)){D_(f);c[d>>2]=c[g>>2]}h=h+260|0;b[h>>1]=b[h>>1]&-2|a[e+16>>0]&1;return}function QQ(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(e|0)c[a+16>>2]=e;e=c[b+4>>2]|0;if(e|0)c[a+20>>2]=e;d=+h[b+16>>3];if(d>=0.0)h[a+32>>3]=d;return}function RQ(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0;f=l;l=l+64|0;g=f+32|0;i=f;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];h[i+16>>3]=+h[b>>3]+d;h[i+24>>3]=+h[b+8>>3]+e;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];c[g+20>>2]=c[i+20>>2];c[g+24>>2]=c[i+24>>2];c[g+28>>2]=c[i+28>>2];$O(a,g,1);l=f;return}function SQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0;i=l;l=l+64|0;g=i;k=+h[e>>3];n=k+ +h[d>>3];m=+h[e+8>>3];j=m+ +h[d+8>>3];k=k+ +h[d+16>>3];m=m+ +h[d+24>>3];h[g>>3]=k;h[g+8>>3]=m;h[g+32>>3]=n;h[g+40>>3]=j;h[g+16>>3]=n;h[g+24>>3]=m;h[g+48>>3]=k;h[g+56>>3]=j;f=c[d+36>>2]|0;if(!f)f=c[e+56>>2]|0;e=c[d+32>>2]|0;if(!e)qa(134252,134260,623,134272);if(!(a[e>>0]|0))qa(134286,134260,624,134272);else{dP(b,e,g,4,1,f);l=i;return}}function TQ(d,e,f,g,i,j,k,m){d=d|0;e=e|0;f=f|0;g=g|0;i=+i;j=j|0;k=k|0;m=m|0;var n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0;R=l;l=l+128|0;K=R+104|0;O=R+48|0;P=R+16|0;L=R;J=L;c[J>>2]=0;c[J+4>>2]=0;M=+h[g>>3];N=M-i;I=M+i;J=L+8|0;h[J>>3]=(+h[k+24>>3]-+h[k+8>>3])*.5+ +h[g+8>>3];RO(d,1);D=P+16|0;E=P+4|0;F=P+24|0;G=O+4|0;H=O+16|0;s=(m|0)==0;t=O+24|0;u=O+8|0;v=O+32|0;w=O+40|0;x=O+48|0;y=j+16|0;z=j+4|0;A=P+8|0;q=0;while(1){if((q|0)>=(e|0))break;switch(a[f+(q*24|0)+6>>0]|0){case 108:{i=N;break}case 114:{i=I-+h[f+(q*24|0)+8>>3];break}default:i=M-+h[f+(q*24|0)+8>>3]*.5}h[g>>3]=i;B=f+(q*24|0)+16|0;h[J>>3]=+h[J>>3]-+h[B>>3];C=f+(q*24|0)+4|0;p=c[f+(q*24|0)>>2]|0;r=0;while(1){if((r|0)>=(b[C>>1]|0))break;o=p+4|0;m=c[o>>2]|0;if(m){h[D>>3]=+h[(+h[m+16>>3]>0.0?m:j)+16>>3];c[P>>2]=c[((c[m>>2]|0)==0?j:m)>>2];k=c[((c[m+4>>2]|0)==0?j:m)+4>>2]|0;c[E>>2]=k;m=c[m+24>>2]&127;if(!m)Q=12;else m=c[F>>2]&-128|m}else{h[D>>3]=+h[y>>3];c[P>>2]=c[j>>2];k=c[z>>2]|0;c[E>>2]=k;Q=12}if((Q|0)==12){Q=0;m=c[F>>2]&-128}c[F>>2]=m;UO(d,k);c[O>>2]=c[p>>2];c[G>>2]=P;h[H>>3]=+h[p+16>>3];if(s)n=1.0;else n=+h[p+24>>3];h[t>>3]=n;c[A>>2]=c[(c[o>>2]|0)+8>>2];c[u>>2]=c[p+8>>2];o=p+32|0;h[v>>3]=+h[o>>3];h[w>>3]=+h[B>>3];a[x>>0]=108;h[L>>3]=i;c[K>>2]=c[L>>2];c[K+4>>2]=c[L+4>>2];c[K+8>>2]=c[L+8>>2];c[K+12>>2]=c[L+12>>2];TO(d,K,O);n=+h[o>>3]+i;h[g>>3]=n;p=p+56|0;r=r+1|0;i=n}q=q+1|0}SO(d);l=R;return}function UQ(a){a=a|0;D_(c[a>>2]|0);D_(c[a+4>>2]|0);D_(c[a+8>>2]|0);D_(c[a+16>>2]|0);D_(c[a+12>>2]|0);D_(c[a+20>>2]|0);D_(c[a+24>>2]|0);return}function VQ(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(a|0){j=a+4|0;e=0;g=c[a>>2]|0;while(1){if((e|0)>=(b[j>>1]|0))break;k=g+4|0;d=0;f=c[g>>2]|0;while(1){if((d|0)>=(b[k>>1]|0))break;D_(c[f>>2]|0);h=c[f+8>>2]|0;if(h|0?(i=c[f+12>>2]|0,i|0):0)tb[i&127](h);d=d+1|0;f=f+56|0}e=e+1|0;g=g+24|0}d=c[a>>2]|0;if(d|0)D_(d);D_(a)}return}function WQ(a){a=a|0;D_(c[a+32>>2]|0);D_(a);return}function XQ(b,d){b=b|0;d=d|0;switch(a[b+4>>0]|0){case 1:{YQ(c[b>>2]|0);break}case 3:{WQ(c[b>>2]|0);break}default:VQ(c[b>>2]|0)}if(d|0)D_(b);return}function YQ(a){a=a|0;var b=0,d=0,e=0;e=a+84|0;if((c[a+100>>2]|0)==-1)yw(c[e>>2]|0)|0;else{b=c[e>>2]|0;D_(c[a+92>>2]|0);D_(c[a+96>>2]|0);while(1){d=c[b>>2]|0;if(!d)break;ZQ(d);b=b+4|0}D_(c[e>>2]|0)}UQ(a);D_(a);return}function ZQ(a){a=a|0;XQ(a+88|0,0);UQ(a);D_(a);return}function _Q(b,e,f){b=b|0;e=e|0;f=f|0;var g=0;b=c[(c[(c[b+16>>2]|0)+104>>2]|0)+72>>2]|0;if((a[b+4>>0]|0)!=2?(g=$Q(c[b>>2]|0,e)|0,(g|0)!=0):0){c[f>>2]=d[g+35>>0];b=g+48|0}else b=0;return b|0}function $Q(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+4>>2]|0;if(!((d|0)!=0?(O$(d,b)|0)==0:0))e=3;a:do if((e|0)==3){d=c[a+84>>2]|0;while(1){a=c[d>>2]|0;if(!a){a=0;break a}a=aR(a,b)|0;if(!a)d=d+4|0;else break}}while(0);return a|0}function aR(b,d){b=b|0;d=d|0;var e=0;e=c[b+4>>2]|0;if(!((e|0)!=0?(O$(e,d)|0)==0:0))if((a[b+92>>0]|0)==1)b=$Q(c[b+88>>2]|0,d)|0;else b=0;return b|0}function bR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function cR(d){d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=d+92|0;c[p>>2]=uH((c[d+100>>2]<<2)+4|0)|0;n=uH((c[d+104>>2]<<2)+4|0)|0;c[d+96>>2]=n;o=d+32|0;m=c[d+84>>2]|0;while(1){l=c[m>>2]|0;if(!l)break;d=b[l+82>>1]|0;f=+h[l+72>>3];if(d<<16>>16==1)i=~~f;else{i=~~((f-+(O((a[o>>0]|0)+-1|0,(d&65535)+-1|0)|0))/+(d&65535));i=(i|0)>1?i:1}j=b[l+80>>1]|0;f=+h[l+64>>3];if(j<<16>>16==1)k=~~f;else{k=~~((f-+(O((a[o>>0]|0)+-1|0,(j&65535)+-1|0)|0))/+(j&65535));k=(k|0)>1?k:1}q=e[l+86>>1]|0;g=(d&65535)+q|0;d=q;while(1){if((d|0)>=(g|0))break;q=(c[p>>2]|0)+(d<<2)|0;r=c[q>>2]|0;c[q>>2]=(r|0)>(i|0)?r:i;d=d+1|0}d=e[l+84>>1]|0;g=(j&65535)+d|0;while(1){if((d|0)>=(g|0))break;r=n+(d<<2)|0;q=c[r>>2]|0;c[r>>2]=(q|0)>(k|0)?q:k;d=d+1|0}m=m+4|0}return}function dR(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;if(a>>>0<21)a=c[55736+(a<<2)>>2]|0;else{c[b>>2]=a;Y0(191879,134313,b)|0;a=191879}l=d;return a|0}function eR(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=a+104|0;l=a+100|0;j=d+16|0;f=0;g=0;while(1){if((f|0)>(c[k>>2]|0))break;i=az(d,dR(f)|0,1)|0;Az(i,134365,304,1)|0;m=i+16|0;c[(c[m>>2]|0)+176>>2]=0;o=uH((c[l>>2]<<2)+4|0)|0;n=c[m>>2]|0;c[n+172>>2]=o;c[n+184>>2]=0;n=uH((c[l>>2]<<2)+4|0)|0;c[(c[m>>2]|0)+180>>2]=n;if(!g)c[(c[j>>2]|0)+192>>2]=i;else c[(c[g+16>>2]|0)+164>>2]=i;f=f+1|0;g=i}j=b+16|0;f=0;g=0;while(1){if((f|0)>(c[l>>2]|0))break;i=az(b,dR(f)|0,1)|0;Az(i,134365,304,1)|0;o=i+16|0;c[(c[o>>2]|0)+176>>2]=0;m=uH((c[k>>2]<<2)+4|0)|0;n=c[o>>2]|0;c[n+172>>2]=m;c[n+184>>2]=0;n=uH((c[k>>2]<<2)+4|0)|0;c[(c[o>>2]|0)+180>>2]=n;if(!g)c[(c[j>>2]|0)+192>>2]=i;else c[(c[g+16>>2]|0)+164>>2]=i;f=f+1|0;g=i}f=c[a+84>>2]|0;while(1){g=c[f>>2]|0;if(!g)break;o=g+84|0;n=az(d,dR(e[o>>1]|0)|0,0)|0;o=az(d,dR((e[g+80>>1]|0)+(e[o>>1]|0)|0)|0,0)|0;fR(d,n,o,~~+h[g+64>>3]);o=g+86|0;n=az(b,dR(e[o>>1]|0)|0,0)|0;o=az(b,dR((e[g+82>>1]|0)+(e[o>>1]|0)|0)|0,0)|0;fR(b,n,o,~~+h[g+72>>3]);f=f+4|0}gR(d);gR(b);return}function fR(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0;h=Rx(a,d,f,0,0)|0;if(!h){i=Rx(a,d,f,0,1)|0;Az(i,134378,176,1)|0;b[(c[i+16>>2]|0)+170>>1]=g;d=d+16|0;a=c[d>>2]|0;h=c[a+180>>2]|0;if(!h)a=vH((c[a+184>>2]<<2)+8|0)|0;else a=xH(h,(c[a+184>>2]<<2)+8|0)|0;g=c[d>>2]|0;c[g+180>>2]=a;g=g+184|0;h=c[g>>2]|0;c[g>>2]=h+1;c[a+(h<<2)>>2]=i;d=c[d>>2]|0;c[(c[d+180>>2]|0)+(c[d+184>>2]<<2)>>2]=0;d=f+16|0;a=c[d>>2]|0;h=c[a+172>>2]|0;if(!h)a=vH((c[a+176>>2]<<2)+8|0)|0;else a=xH(h,(c[a+176>>2]<<2)+8|0)|0;g=c[d>>2]|0;c[g+172>>2]=a;g=g+176|0;f=c[g>>2]|0;c[g>>2]=f+1;c[a+(f<<2)>>2]=i;i=c[d>>2]|0;c[(c[i+172>>2]|0)+(c[i+176>>2]<<2)>>2]=0}else{i=(c[h+16>>2]|0)+170|0;f=e[i>>1]|0;b[i>>1]=(f|0)>(g|0)?f:g}return}function gR(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[(c[a+16>>2]|0)+192>>2]|0;while(1){f=d+16|0;h=c[(c[f>>2]|0)+164>>2]|0;if(!h)break;if(Rx(a,d,h,0,0)|0){d=h;continue}g=Rx(a,d,h,0,1)|0;Az(g,134378,176,1)|0;b[(c[g+16>>2]|0)+170>>1]=0;d=c[f>>2]|0;e=c[d+180>>2]|0;if(!e)d=vH((c[d+184>>2]<<2)+8|0)|0;else d=xH(e,(c[d+184>>2]<<2)+8|0)|0;i=c[f>>2]|0;c[i+180>>2]=d;i=i+184|0;e=c[i>>2]|0;c[i>>2]=e+1;c[d+(e<<2)>>2]=g;f=c[f>>2]|0;c[(c[f+180>>2]|0)+(c[f+184>>2]<<2)>>2]=0;f=h+16|0;d=c[f>>2]|0;e=c[d+172>>2]|0;if(!e)d=vH((c[d+176>>2]<<2)+8|0)|0;else d=xH(e,(c[d+176>>2]<<2)+8|0)|0;e=c[f>>2]|0;c[e+172>>2]=d;e=e+176|0;i=c[e>>2]|0;c[e>>2]=i+1;c[d+(i<<2)>>2]=g;d=c[f>>2]|0;c[(c[d+172>>2]|0)+(c[d+176>>2]<<2)>>2]=0;d=h}return}function hR(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+92|0;e=0;f=0;b=c[(c[(c[b+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){b=c[b+164>>2]|0;if(!b)break;b=c[b+16>>2]|0;h=b+232|0;c[(c[g>>2]|0)+(f<<2)>>2]=(c[h>>2]|0)-e;e=c[h>>2]|0;f=f+1|0}a=a+96|0;e=0;f=0;b=c[(c[(c[d+16>>2]|0)+192>>2]|0)+16>>2]|0;while(1){b=c[b+164>>2]|0;if(!b)break;b=c[b+16>>2]|0;h=b+232|0;c[(c[a>>2]|0)+(f<<2)>>2]=(c[h>>2]|0)-e;e=c[h>>2]|0;f=f+1|0}return}function iR(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+4|0;d=h;c[d>>2]=c[4621];e=c[b+100>>2]|0;if((e|0)!=1?(f=b+104|0,(c[f>>2]|0)!=1):0){c[b+92>>2]=uH((e<<2)+4|0)|0;c[b+96>>2]=uH((c[f>>2]<<2)+4|0)|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;f=Xx(134391,g,0)|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;g=Xx(134396,g,0)|0;Az(f,134401,280,1)|0;Az(g,134401,280,1)|0;eR(b,f,g);fI(f,2,2147483647)|0;fI(g,2,2147483647)|0;hR(b,f,g);jR(f,g)}else cR(b);l=h;return}function jR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=(c[b+16>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;f=d+16|0;d=c[f>>2]|0;e=c[d+172>>2]|0;if(e){D_(e);d=c[f>>2]|0}e=c[d+180>>2]|0;if(e){D_(e);d=c[f>>2]|0}d=d+164|0}$x(a)|0;$x(b)|0;return}function kR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0;p=l;l=l+272|0;n=p+104|0;o=p+136|0;j=p+72|0;k=p;g=p+144|0;c[k+48>>2]=b;switch(pz(b)|0){case 0:{e=c[b+60>>2]|0;break}case 1:{e=ez(b)|0;break}case 2:{e=ez(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;break}default:{}}i=k+52|0;c[i>>2]=e;m=c[e+60>>2]|0;h[k+32>>3]=+h[d+16>>3];c[k+16>>2]=c[d+4>>2];c[k+20>>2]=c[d+8>>2];c[k+40>>2]=0;f=uT(c[d>>2]|0,o,k)|0;if(!f){Tw(n,128,g);a[d+82>>0]=0;e=n1(lR(b,n)|0)|0;c[d>>2]=e;if((c[d+12>>2]|0)==1)e=RM(e)|0;else e=OM(e,c[i>>2]|0)|0;D_(c[d>>2]|0);c[d>>2]=e;iH(c[(c[m+16>>2]|0)+144>>2]|0,d);Xw(n);e=c[o>>2]|0}else{e=f+4|0;if((a[e>>0]|0)==1){if((c[(c[f>>2]|0)+24>>2]|0)==0?mR(b)|0:0){i=n1(mR(b)|0)|0;c[(c[f>>2]|0)+24>>2]=i}m=nR(m,c[f>>2]|0,0,k)|0;c[o>>2]=c[o>>2]|m;m=c[f>>2]|0;r=+h[m+64>>3]*.5;q=+h[m+72>>3]*.5;oR(j,-r,-q,r,q);m=c[f>>2]|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2];pR(m,n,15)}else{qR(c[(c[m+16>>2]|0)+144>>2]|0,c[f>>2]|0,k);n=c[f>>2]|0;q=+h[n+24>>3]*.5;r=+h[n+32>>3]*.5;oR(j,-q,-r,q,r);n=(c[f>>2]|0)+8|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2]}h[d+24>>3]=+h[j+16>>3]-+h[j>>3];h[d+32>>3]=+h[j+24>>3]-+h[j+8>>3];c[d+72>>2]=f;if((a[e>>0]|0)==1){D_(c[d>>2]|0);c[d>>2]=n1(138529)|0}e=c[o>>2]|0}l=p;return e|0}function lR(b,d){b=b|0;d=d|0;var e=0;a:do switch(pz(b)|0){case 0:{Ww(d,ry(b)|0)|0;break}case 1:{Ww(d,ry(b)|0)|0;break}case 2:{Ww(d,ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)|0;e=b+-48|0;Ww(d,ry(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0)|0;if(!(ey(ez(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0)|0)){Ww(d,138665)|0;break a}else{Ww(d,134656)|0;break a}}default:{}}while(0);e=d+4|0;b=c[e>>2]|0;if(b>>>0>=(c[d+8>>2]|0)>>>0){Uw(d,1)|0;b=c[e>>2]|0}a[b>>0]=0;d=c[d>>2]|0;c[e>>2]=d;return d|0}function mR(b){b=b|0;var c=0,d=0;c=xx(b,134647)|0;if(!((c|0)!=0?(a[c>>0]|0)!=0:0))d=3;do if((d|0)==3){c=xx(b,137741)|0;if(c|0?a[c>>0]|0:0)break;c=0}while(0);return c|0}function nR(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;u=w+8|0;t=w;v=g+108|0;k=c[v>>2]|0;if(k|0)IQ(j,k,183496);c[g+80>>2]=i;k=uR(f,g,j)|0;r=g+36|0;f=b[r>>1]|0;if(!(f&128))a[g+32>>0]=2;i=g+33|0;if(!(f&32))a[i>>0]=1;iR(g);n=c[g+104>>2]|0;p=a[g+32>>0]|0;f=O(n+1|0,p)|0;o=d[i>>0]<<1;q=c[g+100>>2]|0;p=O(q+1|0,p)|0;m=g+96|0;f=o+f|0;i=0;while(1){if((i|0)>=(n|0))break;f=(c[(c[m>>2]|0)+(i<<2)>>2]|0)+f|0;i=i+1|0}n=g+92|0;i=p+o|0;m=0;while(1){if((m|0)>=(q|0))break;i=(c[(c[n>>2]|0)+(m<<2)>>2]|0)+i|0;m=m+1|0}n=g+38|0;do if(b[r>>1]&1){r=b[n>>1]|0;m=r&65535;if(r<<16>>16?(s=b[g+40>>1]|0,s<<16>>16):0){if(!((f|0)>(m|0)|(i|0)>(s&65535|0))){i=0;f=0;break}Pw(0,134447,t)|0;k=1;i=0;f=0;break}Pw(0,134481,u)|0;k=1}while(0);u=e[n>>1]|0;h[g+64>>3]=+(((f|0)>(u|0)?f:u)|0);u=e[g+40>>1]|0;h[g+72>>3]=+(((i|0)>(u|0)?i:u)|0);if(c[v>>2]|0)QQ(j,183496);l=w;return k|0}function oR(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function pR(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0;I=l;l=l+64|0;G=I+32|0;H=I;E=c[e+84>>2]|0;k=c[e+80>>2]|0;if((k|0?(i=c[k+24>>2]|0,i|0):0)?(j=e+24|0,(c[j>>2]|0)==0):0)c[j>>2]=n1(i)|0;F=e+48|0;i=f+16|0;n=+h[i>>3];m=+h[f>>3];k=~~(n-m-+(~~+h[e+64>>3]|0));if((k|0)<=-1)qa(134414,134260,1761,134424);o=f+24|0;y=+h[o>>3];p=f+8|0;q=+h[p>>3];r=+(~~+h[e+72>>3]|0);s=~~(y-q-r);if((s|0)<=-1)qa(134437,134260,1764,134424);t=b[e+36>>1]|0;j=t&65535;a:do if(j&1){b:do if((k|0)>0)switch(j&6){case 4:{h[i>>3]=m+r;break b}case 2:{J=+(k|0);h[i>>3]=n+J;m=m+J;h[f>>3]=m;break b}default:{J=+(k>>>1|0);m=m+J;h[f>>3]=m;h[i>>3]=n-J;break b}}while(0);if((s|0)>0)switch(t&24){case 16:{y=q+r;h[o>>3]=y;s=0;i=0;break a}case 8:{J=+(s|0);y=y+J;h[o>>3]=y;h[p>>3]=q+J;s=0;i=0;break a}default:{J=+(s>>>1|0);h[p>>3]=q+J;y=y-J;h[o>>3]=y;s=0;i=0;break a}}else{s=0;i=0}}else i=k;while(0);n=+(d[e+33>>0]|0);C=e+32|0;u=a[C>>0]|0;q=+(u<<24>>24);D=e+104|0;k=c[D>>2]|0;t=(i|0)/(k|0)|0;o=i-(O(t,k)|0)|0;o=~~(((o|0)>-1?.5:-.5)+ +(o|0));B=e+96|0;p=u<<24>>24;i=~~(m+n+q);j=0;while(1){if((j|0)>(k|0))break;A=(c[B>>2]|0)+(j<<2)|0;k=c[A>>2]|0;c[A>>2]=i;i=i+t+((j|0)<(o|0)&1)+k+p|0;j=j+1|0;k=c[D>>2]|0}A=e+100|0;k=c[A>>2]|0;t=(s|0)/(k|0)|0;p=s-(O(t,k)|0)|0;p=~~(((p|0)>-1?.5:-.5)+ +(p|0));z=e+92|0;o=u<<24>>24;i=~~(y-n-q);j=0;while(1){if((j|0)>(k|0))break;x=(c[z>>2]|0)+(j<<2)|0;k=c[x>>2]|0;c[x>>2]=i;i=i-t+(((j|0)<(p|0))<<31>>31)-k-o|0;j=j+1|0;k=c[A>>2]|0}u=(g|0)==0;v=H+16|0;w=H+24|0;x=H+8|0;i=E;while(1){o=c[i>>2]|0;if(!o)break;k=b[o+84>>1]|0;if(u){j=0;p=b[o+80>>1]|0;s=b[o+86>>1]|0;t=b[o+82>>1]|0}else{j=k<<16>>16==0?8:0;s=b[o+86>>1]|0;j=s<<16>>16==0?j|4:j;p=b[o+80>>1]|0;t=b[o+82>>1]|0;j=(((p&65535)+(k&65535)|0)==(c[D>>2]|0)?j|2:j)|((t&65535)+(s&65535)|0)==(c[A>>2]|0)}K=c[B>>2]|0;k=k&65535;h[H>>3]=+(c[K+(k<<2)>>2]|0);E=a[C>>0]|0;h[v>>3]=+((c[K+((p&65535)+k<<2)>>2]|0)-E|0);p=c[z>>2]|0;h[w>>3]=+(c[p+((s&65535)<<2)>>2]|0);h[x>>3]=+((c[p+((t&65535)+(s&65535)<<2)>>2]|0)+E|0);c[G>>2]=c[H>>2];c[G+4>>2]=c[H+4>>2];c[G+8>>2]=c[H+8>>2];c[G+12>>2]=c[H+12>>2];c[G+16>>2]=c[H+16>>2];c[G+20>>2]=c[H+20>>2];c[G+24>>2]=c[H+24>>2];c[G+28>>2]=c[H+28>>2];rR(o,G,j&g);i=i+4|0}a[e+35>>0]=g;c[F>>2]=c[f>>2];c[F+4>>2]=c[f+4>>2];c[F+8>>2]=c[f+8>>2];c[F+12>>2]=c[f+12>>2];c[F+16>>2]=c[f+16>>2];c[F+20>>2]=c[f+20>>2];c[F+24>>2]=c[f+24>>2];c[F+28>>2]=c[f+28>>2];l=I;return}function qR(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0,R=0.0;O=l;l=l+112|0;H=O+48|0;I=O+16|0;J=O;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[I+12>>2]=0;c[I+16>>2]=0;c[I+20>>2]=0;c[I+24>>2]=0;c[I+28>>2]=0;K=e+4|0;L=f+16|0;M=f+32|0;N=I+16|0;r=b[K>>1]|0;n=r<<16>>16;g=0;j=-1.0;m=0;while(1){if((m|0)>=(n|0)){g=1;break}i=c[e>>2]|0;if((b[i+(m*24|0)+4>>1]|0)>1){g=0;break}i=c[(c[i+(m*24|0)>>2]|0)+4>>2]|0;if(!i){k=+h[M>>3];h[N>>3]=k;i=L}else{if(c[i+24>>2]&127|0){g=0;break}k=+h[(+h[i+16>>3]>0.0?i:L)+16>>3];h[N>>3]=k;i=(c[i>>2]|0)==0?L:i}i=c[i>>2]|0;c[I>>2]=i;if(!(j==-1.0)){if(k!=j){g=0;break}}else j=k;if(g){if(b$(i,g)|0){g=0;break}}else g=i;m=m+1|0}a[e+6>>0]=g;E=f+48|0;F=f+20|0;G=I+4|0;w=f+40|0;x=I+24|0;y=d+144|0;z=H+4|0;v=J+8|0;A=H+16|0;B=H+24|0;C=H+8|0;D=H+12|0;f=(g|0)==0;j=0.0;s=0.0;t=0.0;u=0.0;n=0;g=r;while(1){if((n|0)>=(g<<16>>16|0))break;k=0.0;q=0.0;m=0;p=0.0;j=0.0;i=c[e>>2]|0;while(1){if((m|0)>=(b[i+(n*24|0)+4>>1]|0))break;c[H>>2]=pH(c[(c[i+(n*24|0)>>2]|0)+(m*56|0)>>2]|0,c[E>>2]|0)|0;i=(c[e>>2]|0)+(n*24|0)|0;g=c[(c[i>>2]|0)+(m*56|0)+4>>2]|0;if(!g){h[N>>3]=+h[M>>3];c[I>>2]=c[L>>2];c[G>>2]=c[F>>2];c[x>>2]=c[x>>2]&-128|c[w>>2]&127}else{g=c[g+24>>2]&127;if(!g)g=c[w>>2]&127;c[x>>2]=c[x>>2]&-128|g;r=c[(c[i>>2]|0)+(m*56|0)+4>>2]|0;h[N>>3]=+h[(+h[r+16>>3]>0.0?r:L)+16>>3];c[I>>2]=c[((c[r>>2]|0)==0?L:r)>>2];c[G>>2]=c[((c[r+4>>2]|0)==0?L:r)+4>>2]}i=c[y>>2]|0;c[z>>2]=nb[c[i>>2]&63](i,I,1)|0;wL(J,d,H);Q=+h[J>>3];o=+h[v>>3];D_(c[(c[(c[e>>2]|0)+(n*24|0)>>2]|0)+(m*56|0)>>2]|0);i=c[e>>2]|0;r=c[i+(n*24|0)>>2]|0;c[r+(m*56|0)>>2]=c[H>>2];h[r+(m*56|0)+32>>3]=Q;h[r+(m*56|0)+16>>3]=+h[A>>3];h[r+(m*56|0)+24>>3]=+h[B>>3];c[r+(m*56|0)+4>>2]=c[z>>2];c[r+(m*56|0)+8>>2]=c[C>>2];c[r+(m*56|0)+12>>2]=c[D>>2];P=+h[N>>3];R=+h[B>>3];k=R>k?R:k;q=Q+q;m=m+1|0;p=P>p?P:p;j=o>j?o:j}h[i+(n*24|0)+8>>3]=q;g=(n|0)==0;do if(f)if(g){o=p;k=p-k;g=i;break}else{o=p;k=t-u+p-k;g=i+(n*24|0)|0;break}else{o=j;k=g?p:j;g=i+(n*24|0)|0}while(0);h[g+16>>3]=k;s=q>s?q:s;t=o+t;u=+h[i+(n*24|0)+16>>3]+u;n=n+1|0;g=b[K>>1]|0}h[e+24>>3]=s;h[e+32>>3]=g<<16>>16==1?j:t;l=O;return}function rR(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0;y=l;l=l+64|0;v=y+32|0;x=y;j=e+24|0;if((c[j>>2]|0)==0?(i=c[(c[e+96>>2]|0)+24>>2]|0,i|0):0)c[j>>2]=n1(i)|0;t=e+36|0;w=b[t>>1]|0;i=w&65535;a:do if(i&1){k=+h[e+64>>3];q=+h[e+72>>3];j=f+16|0;m=+h[j>>3];o=+h[f>>3];n=m-o-k;b:do if(n>0.0)switch(i&6){case 4:{m=o+k;h[j>>3]=m;k=o;break b}case 2:{m=n+m;h[j>>3]=m;k=o+n;h[f>>3]=k;break b}default:{p=n*.5;k=p+o;h[f>>3]=k;m=m-p;h[j>>3]=m;break b}}else k=o;while(0);i=f+24|0;p=+h[i>>3];j=f+8|0;n=+h[j>>3];o=p-n-q;if(o>0.0)switch(w&24){case 16:{o=n+q;h[i>>3]=o;break a}case 8:{q=o+p;h[i>>3]=q;n=n+o;h[j>>3]=n;o=q;break a}default:{o=o*.5;n=o+n;h[j>>3]=n;o=p-o;h[i>>3]=o;break a}}else o=p}else{k=+h[f>>3];n=+h[f+8>>3];m=+h[f+16>>3];o=+h[f+24>>3]}while(0);s=e+48|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];c[s+16>>2]=c[f+16>>2];c[s+20>>2]=c[f+20>>2];c[s+24>>2]=c[f+24>>2];c[s+28>>2]=c[f+28>>2];a[e+35>>0]=g;A=+(d[e+33>>0]|0);z=+(d[e+34>>0]|0);p=k+A+z;h[x>>3]=p;q=n+A+z;s=x+8|0;h[s>>3]=q;n=m-A-z;f=x+16|0;h[f>>3]=n;o=o-A-z;r=x+24|0;h[r>>3]=o;j=e+88|0;switch(a[e+92>>0]|0){case 1:{w=c[j>>2]|0;c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];c[v+8>>2]=c[x+8>>2];c[v+12>>2]=c[x+12>>2];c[v+16>>2]=c[x+16>>2];c[v+20>>2]=c[x+20>>2];c[v+24>>2]=c[x+24>>2];c[v+28>>2]=c[x+28>>2];pR(w,v,g);break}case 3:{i=c[j>>2]|0;k=+h[i+24>>3];m=n-p-+h[i+16>>3];c:do if(m>0.0)switch(w&6){case 4:{h[f>>3]=n-m;break c}case 2:{h[x>>3]=m+p;break c}default:break c}while(0);k=o-q-k;d:do if(k>0.0)switch(w&24){case 16:{h[r>>3]=o-k;break d}case 8:{h[s>>3]=k+q;break d}default:break d}while(0);c[v>>2]=c[x>>2];c[v+4>>2]=c[x+4>>2];c[v+8>>2]=c[x+8>>2];c[v+12>>2]=c[x+12>>2];c[v+16>>2]=c[x+16>>2];c[v+20>>2]=c[x+20>>2];c[v+24>>2]=c[x+24>>2];c[v+28>>2]=c[x+28>>2];sR(i,v);break}default:{i=c[j>>2]|0;k=+h[i+32>>3];m=n-p-+h[i+24>>3];e:do if(m>0.0?(u=w&6,u<<16>>16!=6):0)switch(u&7){case 4:{h[f>>3]=n-m;break e}case 2:{h[x>>3]=m+p;break e}default:{A=m*.5;h[x>>3]=A+p;h[f>>3]=n-A;break e}}while(0);k=o-q-k;f:do if(k>0.0)switch(w&24){case 16:{h[r>>3]=o-k;break f}case 8:{h[s>>3]=k+q;break f}default:{A=k*.5;h[s>>3]=A+q;h[r>>3]=o-A;break f}}while(0);w=i+8|0;c[w>>2]=c[x>>2];c[w+4>>2]=c[x+4>>2];c[w+8>>2]=c[x+8>>2];c[w+12>>2]=c[x+12>>2];c[w+16>>2]=c[x+16>>2];c[w+20>>2]=c[x+20>>2];c[w+24>>2]=c[x+24>>2];c[w+28>>2]=c[x+28>>2];x=b[t>>1]&768;tR(c[j>>2]|0,(x&1023)==512?108:(x&1023)==256?114:110)}}l=y;return}function sR(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function tR(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;g=b[d+4>>1]|0;f=0;while(1){if((f|0)>=(g|0))break;h=(c[d>>2]|0)+(f*24|0)+6|0;if(!(a[h>>0]|0))a[h>>0]=e;f=f+1|0}return}function uR(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=f+84|0;t=c[l>>2]|0;u=vI()|0;v=yR()|0;i=0;h=0;k=Aw(t)|0;while(1){if(!k)break;j=Aw(c[k+8>>2]|0)|0;while(1){if(!j)break;j=c[j>>2]|0;i=i+1|0}h=h+1|0;if(a[k+12>>0]|0)CR(v,h);k=c[k>>2]|0}h=uH((i<<2)+4|0)|0;c[l>>2]=h;i=0;j=0;k=0;q=0;r=Aw(t)|0;while(1){if(!r)break;s=q&65535;p=0;o=Aw(c[r+8>>2]|0)|0;while(1){if(!o)break;n=c[o+8>>2]|0;c[h>>2]=n;k=vR(d,n,f,g)|0|k;l=wR(u,q,p,n)|0;b[n+86>>1]=s;b[n+84>>1]=l;l=l+(e[n+80>>1]|0)|0;m=q+(e[n+82>>1]|0)|0;if(DR(v,m)|0){p=n+100|0;a[p>>0]=a[p>>0]|2}p=l;h=h+4|0;o=c[o>>2]|0;i=(l|0)>(i|0)?l:i;j=(m|0)>(j|0)?m:j}q=q+1|0;r=c[r>>2]|0}c[f+100>>2]=j;c[f+104>>2]=i;yw(t)|0;yw(v)|0;yI(u);return k|0}function vR(f,g,i,j){f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+16|0;t=u+8|0;s=u;c[g+96>>2]=i;q=g+36|0;o=b[q>>1]|0;if(!(o&64)){if(!(b[i+36>>1]&64))n=2;else n=a[i+34>>0]|0;a[g+34>>0]=n}if(!(o&32)){n=a[i+88>>0]|0;if(n<<24>>24<=-1)if(!(b[i+36>>1]&32))n=1;else n=a[i+33>>0]|0;a[g+33>>0]=n}n=g+88|0;p=g+92|0;switch(a[p>>0]|0){case 1:{o=nR(f,c[n>>2]|0,g,j)|0;i=c[n>>2]|0;n=o;o=i+64|0;i=i+72|0;break}case 3:{o=xR(c[n>>2]|0,j)|0;i=c[n>>2]|0;n=o;o=i+16|0;i=i+24|0;break}default:{qR(c[(c[f+16>>2]|0)+144>>2]|0,c[n>>2]|0,j);i=c[n>>2]|0;n=0;o=i+24|0;i=i+32|0}}k=+((d[g+33>>0]|0)+(d[g+34>>0]|0)<<1|0);m=+h[o>>3]+k;k=+h[i>>3]+k;i=g+38|0;do if(b[q>>1]&1){o=b[i>>1]|0;if(o<<16>>16?(r=b[g+40>>1]|0,r<<16>>16):0){if(!(m>+(o&65535)|k>+(r&65535))){m=0.0;k=0.0;break}if((a[p>>0]|0)==3){m=0.0;k=0.0;break}Pw(0,134532,s)|0;n=1;m=0.0;k=0.0;break}Pw(0,134565,t)|0;n=1}while(0);v=+(e[i>>1]|0);h[g+64>>3]=m>v?m:v;m=+(e[g+40>>1]|0);h[g+72>>3]=k>m?k:m;l=u;return n|0}function wR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;j=d+80|0;i=(e[j>>1]|0)+-1|0;h=0;a:while(1){f=c;while(1){if(h)break a;g=i+f|0;while(1){if((g|0)<(f|0)){c=f;h=1;continue a}if(DI(a,g,b)|0)break;g=g+-1|0}f=g+1|0}}h=d+82|0;f=c;while(1){if((f|0)<(c+(e[j>>1]|0)|0))g=b;else break;while(1){if((g|0)>=((e[h>>1]|0)+b|0))break;BI(a,f,g);g=g+1|0}f=f+1|0}return c|0}function xR(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;i=m+8|0;d=d+52|0;g=b+32|0;CC(i,c[d>>2]|0,c[g>>2]|0);k=c[i>>2]|0;i=c[i+4>>2]|0;if((i&k|0)==-1){c[j>>2]=c[g>>2];Pw(1,134615,j)|0;d=1;f=0.0;e=0.0}else{a[(c[(c[d>>2]|0)+16>>2]|0)+114>>0]=1;d=0;f=+(i|0);e=+(k|0)}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;h[b+16>>3]=e;h[b+24>>3]=f;l=m;return d|0}function yR(){return Cw(55820,c[4555]|0)|0}function zR(a,b,d){a=a|0;b=b|0;d=d|0;d=uH(12)|0;c[d>>2]=c[b>>2];return d|0}function AR(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function BR(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return ((b|0)>(e|0)?1:((b|0)<(e|0))<<31>>31)|0}function CR(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;nb[c[a>>2]&63](a,e,1)|0;l=d;return}function DR(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=(nb[c[a>>2]&63](a,e,512)|0)!=0&1;l=d;return b|0}function ER(a){a=a|0;var b=0;if(!(c[46605]|0)){b=uH((a<<2)+4|0)|0;c[46605]=b;c[b>>2]=186424;c[46616]=a}c[46617]=0;return}function FR(){D_(c[46605]|0);c[46605]=0;c[46617]=0;return}function GR(){c[46617]=0;return}function HR(){var a=0,b=0,d=0;b=c[46617]|0;d=c[46605]|0;a=1;while(1){if((a|0)>(b|0)){a=5;break}if((c[(c[d+(a<<2)>>2]|0)+4>>2]|0)==(a|0))a=a+1|0;else{a=4;break}}if((a|0)==4)qa(135312,134659,59,134665);else if((a|0)==5)return}function IR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=c[46605]|0;g=c[f+(a<<2)>>2]|0;h=c[g>>2]|0;while(1){b=(a|0)/2|0;d=c[f+(b<<2)>>2]|0;e=f+(a<<2)|0;if((c[d>>2]|0)>=(h|0))break;c[e>>2]=d;c[d+4>>2]=a;a=b}c[e>>2]=g;c[g+4>>2]=a;return}function JR(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=c[46617]|0;if((b|0)==(c[46616]|0)){Pw(1,134673,d)|0;a=1}else{b=b+1|0;c[46617]=b;c[(c[46605]|0)+(b<<2)>>2]=a;IR(b);HR();a=0}l=d;return a|0}function KR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=c[46605]|0;f=c[e+(a<<2)>>2]|0;g=c[f>>2]|0;h=c[46617]|0;i=(h|0)/2|0;while(1){if((a|0)>(i|0))break;d=a<<1;b=c[e+(d<<2)>>2]|0;if((d|0)<(h|0)){l=d|1;j=c[e+(l<<2)>>2]|0;k=(c[b>>2]|0)<(c[j>>2]|0);d=k?l:d;b=k?j:b}if((g|0)>=(c[b>>2]|0))break;c[e+(a<<2)>>2]=b;c[b+4>>2]=a;a=d}c[e+(a<<2)>>2]=f;c[f+4>>2]=a;return}function LR(){var a=0,b=0,d=0,e=0;b=c[46617]|0;if(!b)a=0;else{e=c[46605]|0;d=e+4|0;a=c[d>>2]|0;c[d>>2]=c[e+(b<<2)>>2];b=b+-1|0;c[46617]=b;if(b|0)KR(1);HR()}return a|0}function MR(a,b){a=a|0;b=b|0;c[a>>2]=b;IR(c[a+4>>2]|0);HR();return}function NR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=b+16|0;j=c[m>>2]|0;j=(a[j+((c[e+12>>2]|0)*40|0)+36>>0]|0)!=(a[j+((c[e+16>>2]|0)*40|0)+36>>0]|0);k=~~((+h[d+64>>3]+-3.0-+h[d+48>>3])*.5);l=~~((+h[d+56>>3]+-3.0-+h[d+40>>3])*.5);g=(k|0)<(l|0)?k:l;n=d+4|0;f=0;while(1){b=c[n>>2]|0;if((f|0)>=(b|0)){g=f;break}i=c[d+8+(f<<2)>>2]|0;o=c[m>>2]|0;if((a[o+((c[i+12>>2]|0)*40|0)+36>>0]|0)==(a[o+((c[i+16>>2]|0)*40|0)+36>>0]|0)){g=f;break}OR(i,g);f=f+1|0}while(1){if((g|0)>=(b|0))break;f=c[d+8+(g<<2)>>2]|0;if(j|(f|0)==(e|0)){OR(f,a[(c[m>>2]|0)+((c[f+12>>2]|0)*40|0)+36>>0]|0?k:l);b=c[n>>2]|0}g=g+1|0}return}function OR(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;c[d>>2]=e+1;if((e|0)>=(b|0)){c[d>>2]=0;h[a>>3]=+h[a>>3]+16384.0}return}function PR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0.0;x=l;l=l+112|0;u=x+64|0;t=x+96|0;m=x+32|0;v=x;w=uH(28)|0;b=ay(a)|0;s=w+4|0;c[s>>2]=b;b=uH(b*72|0)|0;r=w+12|0;c[r>>2]=b;e=v+8|0;h[e>>3]=1797693134862315708145274.0e284;h[v>>3]=1797693134862315708145274.0e284;f=v+24|0;h[f>>3]=-1797693134862315708145274.0e284;g=v+16|0;h[g>>3]=-1797693134862315708145274.0e284;i=m+16|0;j=m+8|0;k=m+24|0;d=Sy(a)|0;n=1797693134862315708145274.0e284;o=1797693134862315708145274.0e284;p=-1797693134862315708145274.0e284;q=-1797693134862315708145274.0e284;while(1){if(!d)break;C=d+16|0;D=c[C>>2]|0;z=(+h[D+96>>3]+ +h[D+88>>3])*.5;z=z<1.0?1.0:z;y=+h[D+80>>3]*.5;y=y<1.0?1.0:y;E=+h[D+16>>3];B=E-z;h[m>>3]=B;z=E+z;h[i>>3]=z;E=+h[D+24>>3];A=E-y;h[j>>3]=A;y=E+y;h[k>>3]=y;B=+h[(n<B?v:m)>>3];h[v>>3]=B;A=+h[(o<A?v:m)+8>>3];h[e>>3]=A;z=+h[(p>z?v:m)+16>>3];h[g>>3]=z;y=+h[(q>y?v:m)+24>>3];h[f>>3]=y;D=b+40|0;c[D>>2]=c[m>>2];c[D+4>>2]=c[m+4>>2];c[D+8>>2]=c[m+8>>2];c[D+12>>2]=c[m+12>>2];c[D+16>>2]=c[m+16>>2];c[D+20>>2]=c[m+20>>2];c[D+24>>2]=c[m+24>>2];c[D+28>>2]=c[m+28>>2];c[b>>2]=c[b>>2]|1;c[(c[C>>2]|0)+112>>2]=b;b=b+72|0;d=Ty(a,d)|0;n=B;o=A;p=z;q=y}h[v>>3]=n+-36.0;h[e>>3]=o+-36.0;h[g>>3]=p+36.0;h[f>>3]=q+36.0;D=c[r>>2]|0;f=c[s>>2]|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];f=ZR(D,f,t,u)|0;if(c[46553]&1|0){r=c[r>>2]|0;C=c[s>>2]|0;D=c[t>>2]|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];QR(r,C,u,f,D)}e=w+8|0;c[e>>2]=uH((c[t>>2]|0)*72|0)|0;c[w>>2]=c[t>>2];d=c[t>>2]|0;b=0;while(1){if((b|0)>=(d|0))break;D=(c[e>>2]|0)+(b*72|0)+40|0;C=f+(b<<5)|0;c[D>>2]=c[C>>2];c[D+4>>2]=c[C+4>>2];c[D+8>>2]=c[C+8>>2];c[D+12>>2]=c[C+12>>2];c[D+16>>2]=c[C+16>>2];c[D+20>>2]=c[C+20>>2];c[D+24>>2]=c[C+24>>2];c[D+28>>2]=c[C+28>>2];b=b+1|0}D_(f);c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];c[w+16>>2]=RR(w,u)|0;l=x;return w|0}function QR(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0;q=l;l=l+128|0;p=q+96|0;o=q+64|0;j=q+32|0;r=q+16|0;s=q;m=+h[d+16>>3];n=+h[d>>3];k=+h[d+24>>3];g=+h[d+8>>3];i=c[15686]|0;D1(134688,i)|0;c[s>>2]=10;c[s+4>>2]=10;c[s+8>>2]=~~(m+10.0-n);c[s+12>>2]=~~(k+10.0-g);g1(i,135118,s)|0;h[r>>3]=10.0-n;h[r+8>>3]=10.0-g;g1(i,135166,r)|0;D1(135183,i)|0;d=0;while(1){if((d|0)>=(b|0))break;v=+h[a+(d*72|0)+48>>3];u=+h[a+(d*72|0)+56>>3];t=+h[a+(d*72|0)+64>>3];h[j>>3]=+h[a+(d*72|0)+40>>3];h[j+8>>3]=v;h[j+16>>3]=u;h[j+24>>3]=t;g1(i,135202,j)|0;d=d+1|0}D1(135220,i)|0;d=0;while(1){if((d|0)>=(f|0))break;t=+h[e+(d<<5)+8>>3];u=+h[e+(d<<5)+16>>3];v=+h[e+(d<<5)+24>>3];h[o>>3]=+h[e+(d<<5)>>3];h[o+8>>3]=t;h[o+16>>3]=u;h[o+24>>3]=v;g1(i,135239,o)|0;d=d+1|0}D1(135257,i)|0;h[p>>3]=n;h[p+8>>3]=g;h[p+16>>3]=m;h[p+24>>3]=k;g1(i,135239,p)|0;D1(135004,i)|0;l=q;return}function RR(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=l;l=l+32|0;t=A+16|0;k=A;w=c[a>>2]|0;y=nO(w<<2|2)|0;z=Cw(55856,c[4555]|0)|0;v=Cw(55892,c[4555]|0)|0;w=uH(w<<7)|0;f=uH(c[a>>2]<<4)|0;x=a+8|0;g=b+16|0;i=k+8|0;j=b+24|0;m=b+8|0;d=0;while(1){if((d|0)>=(c[a>>2]|0))break;n=c[x>>2]|0;o=n+(d*72|0)|0;c[n+(d*72|0)+32>>2]=4;p=n+(d*72|0)+36|0;c[p>>2]=f+(d<<2<<2);q=n+(d*72|0)+40|0;e=+h[n+(d*72|0)+56>>3];if(e<+h[g>>3]){h[k>>3]=e;h[i>>3]=+h[n+(d*72|0)+48>>3];c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];s=SR(y,z,t,w,1)|0;c[s+20>>2]=o;c[c[p>>2]>>2]=s}e=+h[n+(d*72|0)+64>>3];if(e<+h[j>>3]){h[k>>3]=+h[q>>3];h[i>>3]=e;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];s=SR(y,v,t,w,0)|0;c[s+20>>2]=o;c[(c[p>>2]|0)+4>>2]=s}if(+h[q>>3]>+h[b>>3]){c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];s=SR(y,z,t,w,1)|0;c[s+24>>2]=o;c[(c[p>>2]|0)+8>>2]=s}if(+h[n+(d*72|0)+48>>3]>+h[m>>3]){c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];s=SR(y,v,t,w,0)|0;c[s+24>>2]=o;c[(c[p>>2]|0)+12>>2]=s}d=d+1|0}o=uH(c[y>>2]<<2)|0;r=a+4|0;s=a+12|0;p=t+8|0;m=0;q=0;n=0;while(1){d=c[r>>2]|0;if((n|0)>=(d|0)){b=0;break}g=c[s>>2]|0;i=g+(n*72|0)|0;j=g+(n*72|0)+36|0;c[j>>2]=o+(m<<2);b=g+(n*72|0)+40|0;c[t>>2]=c[b>>2];c[t+4>>2]=c[b+4>>2];c[t+8>>2]=c[b+8>>2];c[t+12>>2]=c[b+12>>2];b=g+(n*72|0)+56|0;k=g+(n*72|0)+32|0;d=nb[c[v>>2]&63](v,t,512)|0;while(1){if(!d)break;if(!(+h[d+8>>3]<+h[b>>3]))break;C=c[d>>2]|0;B=c[j>>2]|0;f=c[k>>2]|0;c[k>>2]=f+1;c[B+(f<<2)>>2]=C;c[(c[d>>2]|0)+24>>2]=i;d=nb[c[v>>2]&63](v,d,8)|0}f=g+(n*72|0)+64|0;d=nb[c[z>>2]&63](z,t,512)|0;while(1){if(!d){u=20;break}e=+h[f>>3];if(!(+h[d+16>>3]<e))break;b=c[d>>2]|0;B=c[j>>2]|0;C=c[k>>2]|0;c[k>>2]=C+1;c[B+(C<<2)>>2]=b;c[(c[d>>2]|0)+24>>2]=i;d=nb[c[z>>2]&63](z,d,8)|0}if((u|0)==20){u=0;e=+h[f>>3]}h[p>>3]=e;b=g+(n*72|0)+56|0;d=nb[c[v>>2]&63](v,t,512)|0;while(1){if(!d){u=25;break}e=+h[b>>3];if(!(+h[d+8>>3]<e))break;D=c[d>>2]|0;B=c[j>>2]|0;C=c[k>>2]|0;c[k>>2]=C+1;c[B+(C<<2)>>2]=D;c[(c[d>>2]|0)+20>>2]=i;d=nb[c[v>>2]&63](v,d,8)|0}if((u|0)==25){u=0;e=+h[b>>3]}h[t>>3]=e;h[p>>3]=+h[g+(n*72|0)+48>>3];d=nb[c[z>>2]&63](z,t,512)|0;while(1){if(!d)break;if(!(+h[d+16>>3]<+h[f>>3]))break;B=c[d>>2]|0;C=c[j>>2]|0;D=c[k>>2]|0;c[k>>2]=D+1;c[C+(D<<2)>>2]=B;c[(c[d>>2]|0)+20>>2]=i;d=nb[c[z>>2]&63](z,d,8)|0}D=c[k>>2]|0;m=D+m|0;q=(D|0)>(q|0)?D:q;n=n+1|0}while(1){if((b|0)>=(d|0))break;TR((c[s>>2]|0)+(b*72|0)|0);b=b+1|0;d=c[r>>2]|0}d=c[y>>2]|0;D=c[y+16>>2]|0;c[D+(d*40|0)+32>>2]=d;d=d+1|0;c[D+(d*40|0)+32>>2]=d;mO(y,q);d=0;while(1){if((d|0)>=(c[a>>2]|0))break;UR((c[x>>2]|0)+(d*72|0)|0,y);d=d+1|0}yw(z)|0;yw(v)|0;D_(w);VR(y);kO(y);l=A;return y|0}function SR(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=nb[c[d>>2]&63](d,e,512)|0;do if(!h){b=oO(b)|0;if(!f)qa(135101,135049,291,135108);else{h=c[b+32>>2]|0;i=f+(h<<5)|0;f=f+(h<<5)+8|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[i>>2]=b;a[b+36>>0]=g;nb[c[d>>2]&63](d,i,1)|0;break}}else i=h;while(0);return c[i>>2]|0}function TR(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;a:do if((+h[b+64>>3]+-3.0-+h[b+48>>3])*.5<2.0){i=c[b+32>>2]|0;j=b+36|0;g=0;while(1){if((g|0)>=(i|0))break a;d=c[(c[j>>2]|0)+(g<<2)>>2]|0;b:do if(a[d+36>>0]|0){f=c[d+20>>2]|0;if((f|0)==(b|0)){e=c[d+24>>2]|0;d=e;e=c[e>>2]|0;do{c[d>>2]=e|8;d=c[c[d+36>>2]>>2]|0;if(!d)break b;d=c[d+24>>2]|0;e=c[d>>2]|0}while(!(e&1|0))}else{e=f;d=c[f>>2]|0;do{c[e>>2]=d|8;d=c[(c[e+36>>2]|0)+8>>2]|0;if(!d)break b;e=c[d+20>>2]|0;d=c[e>>2]|0}while(!(d&1|0))}}while(0);g=g+1|0}}while(0);c:do if((+h[b+56>>3]+-3.0-+h[b+40>>3])*.5<2.0){i=c[b+32>>2]|0;j=b+36|0;g=0;while(1){if((g|0)>=(i|0))break c;d=c[(c[j>>2]|0)+(g<<2)>>2]|0;d:do if(!(a[d+36>>0]|0)){f=c[d+20>>2]|0;if((f|0)==(b|0)){e=c[d+24>>2]|0;d=e;e=c[e>>2]|0;do{c[d>>2]=e|16;d=c[(c[d+36>>2]|0)+4>>2]|0;if(!d)break d;d=c[d+24>>2]|0;e=c[d>>2]|0}while(!(e&1|0))}else{e=f;d=c[f>>2]|0;do{c[e>>2]=d|16;d=c[(c[e+36>>2]|0)+12>>2]|0;if(!d)break d;e=c[d+20>>2]|0;d=c[e>>2]|0}while(!(d&1|0))}}while(0);g=g+1|0}}while(0);return}function UR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;g=+h[a+56>>3]-+h[a+40>>3];i=+h[a+64>>3]-+h[a+48>>3];f=(i+g)*.5+500.0;if((i+-3.0)*.5<2.0){l=(c[a>>2]&8|0)==0;f=l?16384.0:f;p=l?16384.0:g}else p=g;if((g+-3.0)*.5<2.0){l=(c[a>>2]&16|0)==0;i=l?16384.0:i;f=l?16384.0:f}l=a+36|0;d=c[l>>2]|0;e=c[d+8>>2]|0;if((e|0)!=0?(j=c[d+4>>2]|0,(j|0)!=0):0){j=pO(b,e,j,f)|0;e=a+4|0;d=c[e>>2]|0;c[e>>2]=d+1;c[a+8+(d<<2)>>2]=j;d=c[l>>2]|0}e=c[d+4>>2]|0;if((e|0)!=0?(k=c[d>>2]|0,(k|0)!=0):0){k=pO(b,e,k,f)|0;j=a+4|0;d=c[j>>2]|0;c[j>>2]=d+1;c[a+8+(d<<2)>>2]=k;d=c[l>>2]|0}e=c[d+8>>2]|0;if((e|0)!=0?(m=c[d+12>>2]|0,(m|0)!=0):0){m=pO(b,e,m,f)|0;k=a+4|0;d=c[k>>2]|0;c[k>>2]=d+1;c[a+8+(d<<2)>>2]=m;d=c[l>>2]|0}e=c[d+12>>2]|0;if((e|0)!=0?(n=c[d>>2]|0,(n|0)!=0):0){n=pO(b,e,n,f)|0;m=a+4|0;d=c[m>>2]|0;c[m>>2]=d+1;c[a+8+(d<<2)>>2]=n;d=c[l>>2]|0}e=c[d+4>>2]|0;if((e|0)!=0?(o=c[d+12>>2]|0,(o|0)!=0):0){o=pO(b,e,o,i)|0;n=a+4|0;d=c[n>>2]|0;c[n>>2]=d+1;c[a+8+(d<<2)>>2]=o;d=c[l>>2]|0}e=c[d+8>>2]|0;if(e|0?(q=c[d>>2]|0,q|0):0){b=pO(b,e,q,p)|0;o=a+4|0;q=c[o>>2]|0;c[o>>2]=q+1;c[a+8+(q<<2)>>2]=b}return}function VR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;h=j;f=a+16|0;g=c[15686]|0;e=0;while(1){if((e|0)>=(c[a>>2]|0)){b=10;break}b=c[f>>2]|0;d=b+(e*40|0)+20|0;if((c[d>>2]|0)==0?(c[h>>2]=e,g1(g,135014,h)|0,(c[d>>2]|0)==0):0){b=5;break}b=b+(e*40|0)+24|0;if((c[b>>2]|0)==0?(c[i>>2]=e,g1(g,135066,i)|0,(c[b>>2]|0)==0):0){b=8;break}e=e+1|0}if((b|0)==5)qa(135036,135049,311,135056);else if((b|0)==8)qa(135088,135049,313,135056);else if((b|0)==10){l=j;return}}function WR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[c+8>>3];if(!(e>f))if(!(e<f)){f=+h[b>>3];e=+h[c>>3];if(f>e)a=1;else a=(f<e)<<31>>31}else a=-1;else a=1;return a|0}function XR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];f=+h[c>>3];if(!(e>f))if(!(e<f)){f=+h[b+8>>3];e=+h[c+8>>3];if(f>e)a=1;else a=(f<e)<<31>>31}else a=-1;else a=1;return a|0}function YR(a){a=a|0;var b=0,d=0;d=a+8|0;D_(c[(c[d>>2]|0)+36>>2]|0);b=a+12|0;D_(c[(c[b>>2]|0)+36>>2]|0);D_(c[d>>2]|0);D_(c[b>>2]|0);rO(c[a+16>>2]|0);yw(c[a+20>>2]|0)|0;yw(c[a+24>>2]|0)|0;D_(a);return}function ZR(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;h=p;i=b<<2;f=i+4|0;i=i+5|0;o=vH(i*56|0)|0;i=uH(i<<2)|0;g=f*5|1;j=vH(g*72|0)|0;m=g<<5;k=uH(m)|0;m=uH(m)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[h+20>>2]=c[e+20>>2];c[h+24>>2]=c[e+24>>2];c[h+28>>2]=c[e+28>>2];_R(a,b,h,o,0);i2(173);$R(f,i);jS(f,o,i,g,j)|0;n=aS(f,o,j,0,k)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[h+20>>2]=c[e+20>>2];c[h+24>>2]=c[e+24>>2];c[h+28>>2]=c[e+28>>2];_R(a,b,h,o,1);$R(f,i);jS(f,o,i,g,j)|0;f=aS(f,o,j,1,m)|0;g=uH(O(n<<5,f)|0)|0;b=0;a=0;while(1){if((b|0)>=(f|0))break;h=m+(b<<5)|0;e=0;while(1){if((e|0)>=(n|0))break;q=a+((bS(g+(a<<5)|0,h,k+(e<<5)|0)|0)!=0&1)|0;e=e+1|0;a=q}b=b+1|0}q=xH(g,a<<5)|0;D_(o);D_(i);D_(j);D_(k);D_(m);c[d>>2]=a;l=p;return q|0}function _R(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;j=l;l=l+96|0;h=j+64|0;i=j;c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];c[h+16>>2]=c[d+16>>2];c[h+20>>2]=c[d+20>>2];c[h+24>>2]=c[d+24>>2];c[h+28>>2]=c[d+28>>2];hS(h,f,1,i);d=iS(e,1,i)|0;g=0;while(1){if((g|0)>=(b|0))break;k=a+(g*72|0)+40|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];c[h+16>>2]=c[k+16>>2];c[h+20>>2]=c[k+20>>2];c[h+24>>2]=c[k+24>>2];c[h+28>>2]=c[k+28>>2];hS(h,f,0,i);d=iS(e,d,i)|0;g=g+1|0}l=j;return}function $R(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=0;while(1){if((d|0)>(a|0))break;c[b+(d<<2)>>2]=d;d=d+1|0}g=a+1|0;d=1;while(1){if((d|0)>(a|0))break;h=~~(+k2()*+(g-d|0)+ +(d|0));e=b+(d<<2)|0;f=b+(h<<2)|0;if((d|0)!=(h|0)){h=c[e>>2]|0;c[e>>2]=c[f>>2];c[f>>2]=h}d=d+1|0}return}function aS(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=a*5|0;j=g+1|0;l=uH(j<<2)|0;c[46618]=uH(j<<4)|0;c[46619]=uH((a*56|0)+56|0)|0;j=uH(a<<2)|0;c[46620]=j;k=0;while(1){if((k|0)>(g|0))break;if(cS(d+(k*72|0)|0,b)|0)break;k=k+1|0}h=c[46618]|0;i=c[46619]|0;g=1;while(1){if((g|0)>(a|0))break;c[h+(g<<4)+8>>2]=c[b+(g*56|0)+48>>2];m=b+(g*56|0)+44|0;c[h+(g<<4)+4>>2]=c[m>>2];c[h+(g<<4)>>2]=g;n=i+(g*56|0)|0;o=b+(g*56|0)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];c[i+(g*56|0)+16>>2]=c[m>>2];c[i+(g*56|0)+32>>2]=g;c[i+(g*56|0)+48>>2]=1;g=g+1|0}c[46621]=a;c[46622]=0;c[j>>2]=1;g=c[d+(k*72|0)+40>>2]|0;if((g|0)<=0){g=c[d+(k*72|0)+48>>2]|0;if((g|0)>0)g=dS(l,f,0,b,d,0,k,g,e,2)|0;else g=0}else g=dS(l,f,0,b,d,0,k,g,e,1)|0;D_(l);D_(c[46618]|0);D_(c[46619]|0);D_(c[46620]|0);return g|0}function bS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[(+h[b>>3]>+h[c>>3]?b:c)>>3];f=+h[(+h[b+16>>3]<+h[c+16>>3]?b:c)+16>>3];h[a+16>>3]=f;h[a>>3]=g;e=+h[(+h[b+8>>3]>+h[c+8>>3]?b:c)+8>>3];d=+h[(+h[b+24>>3]<+h[c+24>>3]?b:c)+24>>3];h[a+24>>3]=d;h[a+8>>3]=e;return !(g>=f)&!(e>=d)&1|0}function cS(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a+4>>2]|0;do if((c[a+68>>2]|0)!=2?!((f|0)<1|(c[a>>2]|0)<1):0){if(!((c[a+40>>2]|0)<1?(c[a+44>>2]|0)<1:0)){if((c[a+48>>2]|0)>=1){a=0;break}if((c[a+52>>2]|0)>=1){a=0;break}}d=+h[b+(f*56|0)+24>>3];e=+h[b+(f*56|0)+8>>3];if(!(d>e+1.0e-07))if(d<e+-1.0e-07)a=0;else a=+h[b+(f*56|0)+16>>3]>+h[b+(f*56|0)>>3]&1;else a=1}else a=0;while(0);return a|0}function dS(a,b,d,e,f,g,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0;D=(k|0)==0;C=i;a:while(1){y=f+(C*72|0)|0;if((C|0)<1)break;i=a+(C<<2)|0;if(c[i>>2]|0)break;c[i>>2]=1;v=f+(C*72|0)+8|0;t=f+(C*72|0)+16|0;p=+h[t>>3];w=f+(C*72|0)+24|0;x=f+(C*72|0)+32|0;o=+h[x>>3];if((p>o?(A=c[y>>2]|0,I=+h[e+(A*56|0)>>3],I==+h[e+(A*56|0)+16>>3]):0)?(A=c[f+(C*72|0)+4>>2]|0,K=+h[e+(A*56|0)>>3],K==+h[e+(A*56|0)+16>>3]):0){i=b+(d<<5)|0;if(D){h[i>>3]=I;q=p;p=K}else{h[i>>3]=o;q=-I;o=-K}h[b+(d<<5)+8>>3]=o;h[b+(d<<5)+16>>3]=p;h[b+(d<<5)+24>>3]=q;d=d+1|0}i=f+(C*72|0)+40|0;z=c[i>>2]|0;do if((z|0)<1?(L=f+(C*72|0)+44|0,(c[L>>2]|0)<1):0){i=f+(C*72|0)+48|0;n=f+(C*72|0)+52|0;if((c[i>>2]|0)>0?(M=c[n>>2]|0,(M|0)>0):0){m=c[f+(M*72|0)>>2]|0;l=c[y>>2]|0;if((M|0)==(j|0)){l=eS(g,l,m)|0;d=dS(a,b,d,e,f,g,c[n>>2]|0,C,k,1)|0;g=l;l=1;break}else{l=eS(g,m,l)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,1)|0;g=l;i=n;l=1;break}}d=dS(a,b,d,e,f,g,z,C,k,2)|0;d=dS(a,b,d,e,f,g,c[L>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,1)|0;i=n;l=1}else P=19;while(0);do if((P|0)==19){P=0;A=f+(C*72|0)+48|0;r=c[A>>2]|0;if((r|0)<1?(N=f+(C*72|0)+52|0,(c[N>>2]|0)<1):0){n=f+(C*72|0)+44|0;if((z|0)>0?(O=c[n>>2]|0,(O|0)>0):0){m=c[f+(C*72|0)+4>>2]|0;l=c[f+(z*72|0)+4>>2]|0;if((O|0)==(j|0)){l=eS(g,l,m)|0;d=dS(a,b,d,e,f,g,c[n>>2]|0,C,k,2)|0;g=l;l=2;break}else{l=eS(g,m,l)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;g=l;i=n;l=2;break}}d=dS(a,b,d,e,f,g,z,C,k,2)|0;d=dS(a,b,d,e,f,g,c[n>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;i=N;l=1;break}u=f+(C*72|0)+44|0;s=c[u>>2]|0;m=(s|0)>0;if((z|0)>0){if(m){if((r|0)>0?(E=f+(C*72|0)+52|0,F=c[E>>2]|0,(F|0)>0):0){n=c[f+(F*72|0)>>2]|0;m=c[f+(z*72|0)+4>>2]|0;if(!((l|0)==2&(F|0)==(j|0))?!((l|0)==1&(s|0)==(j|0)):0){l=eS(g,n,m)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[u>>2]|0,C,k,2)|0;g=l;i=E;l=1;break}l=eS(g,m,n)|0;d=dS(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[E>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}m=c[y>>2]|0;if(+B(+(+h[x>>3]-+h[e+(m*56|0)+24>>3]))<=1.0e-07?+B(+(+h[w>>3]-+h[e+(m*56|0)+16>>3]))<=1.0e-07:0){n=c[f+(z*72|0)+4>>2]|0;m=c[e+(m*56|0)+44>>2]|0;if((l|0)==1&(z|0)==(j|0)){l=eS(g,m,n)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[u>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+52|0;l=1;break}else{l=eS(g,n,m)|0;d=dS(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;l=2;break}}n=c[f+(C*72|0)+4>>2]|0;m=c[f+(z*72|0)+4>>2]|0;if((l|0)==1&(s|0)==(j|0)){l=eS(g,m,n)|0;d=dS(a,b,d,e,f,g,c[u>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[A>>2]|0,C,k,1)|0;g=l;l=2;break}else{l=eS(g,n,m)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=u;l=2;break}}}else if(!m)break a;if((r|0)>0?(G=f+(C*72|0)+52|0,H=c[G>>2]|0,(H|0)>0):0){n=c[y>>2]|0;if(+B(+(+h[t>>3]-+h[e+(n*56|0)+8>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(n*56|0)>>3]))<=1.0e-07:0){m=c[f+(H*72|0)>>2]|0;if((l|0)==2&(r|0)==(j|0)){l=eS(g,m,n)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;g=l;i=G;l=1;break}else{l=eS(g,n,m)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[G>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}}m=c[f+(H*72|0)>>2]|0;n=c[e+((c[f+(C*72|0)+4>>2]|0)*56|0)+44>>2]|0;if((l|0)==2&(H|0)==(j|0)){l=eS(g,n,m)|0;d=dS(a,b,d,e,f,g,c[G>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=A;l=1;break}else{l=eS(g,m,n)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;g=l;i=G;l=1;break}}o=+h[t>>3];n=c[y>>2]|0;if(((+B(+(o-+h[e+(n*56|0)+8>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(n*56|0)>>3]))<=1.0e-07:0)?(J=c[f+(C*72|0)+4>>2]|0,+B(+(+h[x>>3]-+h[e+(J*56|0)+8>>3]))<=1.0e-07):0)?+B(+(+h[w>>3]-+h[e+(J*56|0)>>3]))<=1.0e-07:0)if((l|0)==1){l=eS(g,n,J)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=A;l=1;break}else{l=eS(g,J,n)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+44|0;l=2;break}j=c[f+(C*72|0)+4>>2]|0;if(((+B(+(o-+h[e+(j*56|0)+24>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[e+(j*56|0)+16>>3]))<=1.0e-07:0)?+B(+(+h[x>>3]-+h[e+(n*56|0)+24>>3]))<=1.0e-07:0)?+B(+(+h[w>>3]-+h[e+(n*56|0)+16>>3]))<=1.0e-07:0){m=c[e+(j*56|0)+44>>2]|0;j=c[e+(n*56|0)+44>>2]|0;if((l|0)==1){l=eS(g,j,m)|0;d=dS(a,b,d,e,f,g,c[i>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;d=dS(a,b,d,e,f,l,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;g=l;i=A;l=1;break}else{l=eS(g,m,j)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+52>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,l,c[i>>2]|0,C,k,2)|0;g=l;i=f+(C*72|0)+44|0;l=2;break}}d=dS(a,b,d,e,f,g,z,C,k,2)|0;d=dS(a,b,d,e,f,g,c[A>>2]|0,C,k,1)|0;d=dS(a,b,d,e,f,g,c[f+(C*72|0)+44>>2]|0,C,k,2)|0;i=f+(C*72|0)+52|0;l=1}while(0);j=C;C=c[i>>2]|0}return d|0}function eS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+16|0;r=f+4|0;i=f;e=(c[46622]|0)+1|0;c[46622]=e;m=c[46619]|0;fS(b,d,r,i);r=c[r>>2]|0;h=c[m+(b*56|0)+32+(r<<2)>>2]|0;i=c[m+(d*56|0)+32+(c[i>>2]<<2)>>2]|0;n=c[46621]|0;g=n+1|0;n=n+2|0;c[46621]=n;q=c[46618]|0;c[q+(g<<4)>>2]=b;c[q+(n<<4)>>2]=d;o=q+(h<<4)+4|0;p=q+(g<<4)+4|0;c[p>>2]=c[o>>2];c[q+(c[o>>2]<<4)+8>>2]=g;c[q+(g<<4)+8>>2]=n;c[q+(n<<4)+4>>2]=g;j=q+(i<<4)+8|0;c[q+(n<<4)+8>>2]=c[j>>2];c[q+(c[j>>2]<<4)+4>>2]=n;c[o>>2]=i;c[j>>2]=h;j=m+(b*56|0)+48|0;o=c[j>>2]|0;i=m+(d*56|0)+48|0;k=c[i>>2]|0;c[m+(b*56|0)+16+(r<<2)>>2]=d;c[m+(b*56|0)+32+(o<<2)>>2]=g;c[m+(b*56|0)+16+(o<<2)>>2]=c[q+(c[p>>2]<<4)>>2];c[m+(d*56|0)+32+(k<<2)>>2]=n;c[m+(d*56|0)+16+(k<<2)>>2]=b;c[j>>2]=(c[j>>2]|0)+1;c[i>>2]=(c[i>>2]|0)+1;d=c[46620]|0;c[d+(a<<2)>>2]=h;c[d+(e<<2)>>2]=g;l=f;return e|0}function fS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0;l=c[46619]|0;m=l+(a*56|0)|0;n=l+(b*56|0)|0;f=0;g=-4.0;i=0;while(1){if((i|0)==4)break;h=c[l+(a*56|0)+16+(i<<2)>>2]|0;if((h|0)>=1?(j=+gS(m,l+(h*56|0)|0,n),j>g):0){f=i;g=j}i=i+1|0}c[d>>2]=f;f=0;i=0;g=-4.0;while(1){if((i|0)==4)break;h=c[l+(b*56|0)+16+(i<<2)>>2]|0;if((h|0)>=1?(k=+gS(n,l+(h*56|0)|0,m),k>g):0){f=i;g=k}i=i+1|0}c[e>>2]=f;return}function gS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;g=+h[a>>3];i=+h[b>>3]-g;d=+h[a+8>>3];f=+h[b+8>>3]-d;g=+h[c>>3]-g;d=+h[c+8>>3]-d;e=d*f+g*i;if(!(d*i-g*f>=0.0))d=-e/(+C(+(d*d+g*g))*+C(+(f*f+i*i)))+-2.0;else d=e/(+C(+(d*d+g*g))*+C(+(f*f+i*i)));return +d}function hS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,l=0.0;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];i=e+32|0;j=a+16|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];if(!d){f=a+8|0;g=j;i=a+24|0;d=a}else{f=a+24|0;g=a;i=a+8|0;d=j}k=+h[g>>3];l=+h[i>>3];h[e+16>>3]=+h[d>>3];h[e+24>>3]=l;h[e+48>>3]=k;h[e+56>>3]=+h[f>>3];a:do if(b|0){d=0;while(1){if((d|0)==4)break a;j=e+(d<<4)+8|0;l=+h[j>>3];b=e+(d<<4)|0;h[j>>3]=+h[b>>3];h[b>>3]=-l;d=d+1|0}}while(0);return}function iS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=b+3|0;i=b+1|0;j=b+2|0;k=a+(b*56|0)+44|0;l=a+(h*56|0)+44|0;e=0;f=b;while(1){if((f|0)>(h|0))break;do if((f|0)!=(b|0))if((f|0)==(h|0)){c[l>>2]=b;g=j;break}else{c[a+(f*56|0)+44>>2]=f+1;g=f+-1|0;break}else{c[k>>2]=i;g=h}while(0);c[a+(f*56|0)+48>>2]=g;c[a+(f*56|0)+32>>2]=0;n=a+(f*56|0)|0;m=d+(e<<4)|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];G3(a+(g*56|0)+16|0,m|0,16)|0;e=e+1|0;f=f+1|0}return b+4|0}function jS(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;c[46623]=e<<1;c[46624]=e;k=uH(e*80|0)|0;c[46625]=1;c[46626]=1;H3(f|0,0,e*72|0)|0;g=kS(c[d+4>>2]|0,b,f,k)|0;e=1;while(1){if((e|0)>(a|0))break;c[b+(e*56|0)+40>>2]=g;c[b+(e*56|0)+36>>2]=g;e=e+1|0}j=lS(a)|0;g=2;i=1;while(1){if((i|0)>(j|0))break;e=mS(a,i+-1|0)|0;h=mS(a,i)|0;while(1){if((e|0)>=(h|0)){e=1;break}nS(c[d+(g<<2)>>2]|0,b,f,k);e=e+1|0;g=g+1|0}while(1){if((e|0)>(a|0))break;oS(e,b,f,k);e=e+1|0}i=i+1|0}e=mS(a,j)|0;while(1){if((e|0)>=(a|0))break;nS(c[d+(g<<2)>>2]|0,b,f,k);g=g+1|0;e=e+1|0}D_(k);return c[46625]|0}function kS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=tS()|0;c[e+(f*40|0)>>2]=2;s=e+(f*40|0)+8|0;k=b+(a*56|0)|0;l=b+(a*56|0)+16|0;xS(s,k,l);n=tS()|0;c[e+(f*40|0)+36>>2]=n;c[e+(n*40|0)>>2]=3;c[e+(n*40|0)+28>>2]=f;j=tS()|0;c[e+(f*40|0)+32>>2]=j;c[e+(j*40|0)>>2]=2;r=e+(j*40|0)+8|0;yS(r,k,l);c[e+(j*40|0)+28>>2]=f;l=tS()|0;c[e+(j*40|0)+32>>2]=l;c[e+(l*40|0)>>2]=3;c[e+(l*40|0)+28>>2]=j;k=tS()|0;c[e+(j*40|0)+36>>2]=k;c[e+(k*40|0)>>2]=1;c[e+(k*40|0)+4>>2]=a;c[e+(k*40|0)+28>>2]=j;j=tS()|0;c[e+(k*40|0)+32>>2]=j;c[e+(j*40|0)>>2]=3;c[e+(j*40|0)+28>>2]=k;g=tS()|0;c[e+(k*40|0)+36>>2]=g;c[e+(g*40|0)>>2]=3;c[e+(g*40|0)+28>>2]=k;k=sS(d)|0;i=sS(d)|0;m=sS(d)|0;o=sS(d)|0;p=d+(k*72|0)+8|0;q=d+(i*72|0)+8|0;t=d+(o*72|0)+24|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];G3(q|0,s|0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];p=d+(k*72|0)+24|0;q=d+(i*72|0)+24|0;s=d+(m*72|0)+8|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];G3(q|0,r|0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];h[d+(o*72|0)+16>>3]=1073741824.0;h[d+(o*72|0)+8>>3]=1073741824.0;h[d+(m*72|0)+32>>3]=-1073741824.0;h[d+(m*72|0)+24>>3]=-1073741824.0;c[d+(i*72|0)>>2]=a;c[d+(k*72|0)+4>>2]=a;c[d+(i*72|0)+40>>2]=o;c[d+(k*72|0)+40>>2]=o;c[d+(i*72|0)+48>>2]=m;c[d+(k*72|0)+48>>2]=m;c[d+(m*72|0)+40>>2]=k;c[d+(o*72|0)+48>>2]=k;c[d+(m*72|0)+44>>2]=i;c[d+(o*72|0)+52>>2]=i;c[d+(k*72|0)+56>>2]=j;c[d+(i*72|0)+56>>2]=g;c[d+(m*72|0)+56>>2]=l;c[d+(o*72|0)+56>>2]=n;c[d+(i*72|0)+68>>2]=1;c[d+(k*72|0)+68>>2]=1;c[d+(o*72|0)+68>>2]=1;c[d+(m*72|0)+68>>2]=1;c[e+(n*40|0)+24>>2]=o;c[e+(l*40|0)+24>>2]=m;c[e+(j*40|0)+24>>2]=k;c[e+(g*40|0)+24>>2]=i;c[b+(a*56|0)+32>>2]=1;return f|0}function lS(a){a=a|0;var b=0.0;b=+(a|0);a=0;while(1){if(!(b>=1.0))break;b=+g$(b);a=a+1|0}return a+-1|0}function mS(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+(a|0);c=d;a=0;while(1){if((a|0)>=(b|0))break;c=+g$(c);a=a+1|0}return ~~+N(+(d/c))|0}function nS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;W=l;l=l+96|0;S=W+32|0;f=W+16|0;T=W;s=S;k=b+(a*56|0)|0;r=s+56|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));U=S+16|0;V=S+24|0;i=+h[V>>3];H=S+8|0;j=+h[H>>3];do if(!(i>j+1.0e-07)){if(!(i<j+-1.0e-07)?+h[U>>3]>+h[S>>3]:0){G=4;break}G=(rS(a,b,1)|0)==0;f=c[S+36>>2]|0;if(G){n=0;G=7}else{f=pS(S,U,f,b,e)|0;G=20}}else G=4;while(0);if((G|0)==4){c[f>>2]=c[S>>2];c[f+4>>2]=c[S+4>>2];c[f+8>>2]=c[S+8>>2];c[f+12>>2]=c[S+12>>2];c[S>>2]=c[U>>2];c[S+4>>2]=c[U+4>>2];c[S+8>>2]=c[U+8>>2];c[S+12>>2]=c[U+12>>2];c[U>>2]=c[f>>2];c[U+4>>2]=c[f+4>>2];c[U+8>>2]=c[f+8>>2];c[U+12>>2]=c[f+12>>2];E=S+36|0;F=c[E>>2]|0;G=S+40|0;f=c[G>>2]|0;c[E>>2]=f;c[G>>2]=F;if(!(rS(a,b,2)|0)){n=1;G=7}else{f=pS(S,U,f,b,e)|0;G=19}}if((G|0)==7){m=pS(S,U,f,b,e)|0;f=sS(d)|0;c[d+(f*72|0)+68>>2]=1;s=d+(f*72|0)|0;k=d+(m*72|0)|0;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));q=+h[H>>3];h[d+(f*72|0)+16>>3]=q;h[d+(m*72|0)+32>>3]=q;q=+h[S>>3];h[d+(f*72|0)+8>>3]=q;h[d+(m*72|0)+24>>3]=q;c[d+(m*72|0)+48>>2]=f;c[d+(m*72|0)+52>>2]=0;c[d+(f*72|0)+40>>2]=m;c[d+(f*72|0)+44>>2]=0;g=c[d+(f*72|0)+48>>2]|0;if((g|0)>0){k=d+(g*72|0)+40|0;if((c[k>>2]|0)==(m|0))c[k>>2]=f;g=d+(g*72|0)+44|0;if((c[g>>2]|0)==(m|0))c[g>>2]=f}g=c[d+(f*72|0)+52>>2]|0;if((g|0)>0){k=d+(g*72|0)+40|0;if((c[k>>2]|0)==(m|0))c[k>>2]=f;g=d+(g*72|0)+44|0;if((c[g>>2]|0)==(m|0))c[g>>2]=f}E=tS()|0;G=tS()|0;F=d+(m*72|0)+56|0;D=c[F>>2]|0;c[e+(D*40|0)>>2]=2;C=e+(D*40|0)+8|0;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[e+(D*40|0)+4>>2]=a;c[e+(D*40|0)+32>>2]=G;c[e+(D*40|0)+36>>2]=E;c[e+(E*40|0)>>2]=3;c[e+(E*40|0)+24>>2]=m;c[e+(E*40|0)+28>>2]=D;c[e+(G*40|0)>>2]=3;c[e+(G*40|0)+24>>2]=f;c[e+(G*40|0)+28>>2]=D;c[F>>2]=E;c[d+(f*72|0)+56>>2]=G;if(n)G=19;else G=20}if((G|0)==19)if(!(rS(a,b,1)|0)){g=1;G=21}else{g=1;G=32}else if((G|0)==20)if(!(rS(a,b,2)|0)){g=0;G=21}else{g=0;G=32}if((G|0)==21){o=pS(U,S,c[S+40>>2]|0,b,e)|0;n=sS(d)|0;c[d+(n*72|0)+68>>2]=1;s=d+(n*72|0)|0;k=d+(o*72|0)|0;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));q=+h[V>>3];h[d+(n*72|0)+16>>3]=q;h[d+(o*72|0)+32>>3]=q;q=+h[U>>3];h[d+(n*72|0)+8>>3]=q;h[d+(o*72|0)+24>>3]=q;c[d+(o*72|0)+48>>2]=n;c[d+(o*72|0)+52>>2]=0;c[d+(n*72|0)+40>>2]=o;c[d+(n*72|0)+44>>2]=0;k=c[d+(n*72|0)+48>>2]|0;if((k|0)>0){m=d+(k*72|0)+40|0;if((c[m>>2]|0)==(o|0))c[m>>2]=n;k=d+(k*72|0)+44|0;if((c[k>>2]|0)==(o|0))c[k>>2]=n}k=c[d+(n*72|0)+52>>2]|0;if((k|0)>0){m=d+(k*72|0)+40|0;if((c[m>>2]|0)==(o|0))c[m>>2]=n;k=d+(k*72|0)+44|0;if((c[k>>2]|0)==(o|0))c[k>>2]=n}D=tS()|0;F=tS()|0;E=d+(o*72|0)+56|0;C=c[E>>2]|0;c[e+(C*40|0)>>2]=2;A=e+(C*40|0)+8|0;c[A>>2]=c[U>>2];c[A+4>>2]=c[U+4>>2];c[A+8>>2]=c[U+8>>2];c[A+12>>2]=c[U+12>>2];c[e+(C*40|0)+4>>2]=a;c[e+(C*40|0)+32>>2]=F;c[e+(C*40|0)+36>>2]=D;c[e+(D*40|0)>>2]=3;c[e+(D*40|0)+24>>2]=o;c[e+(D*40|0)+28>>2]=C;c[e+(F*40|0)>>2]=3;c[e+(F*40|0)+24>>2]=n;c[e+(F*40|0)+28>>2]=C;c[E>>2]=D;c[d+(n*72|0)+56>>2]=F;F=f;f=0}else if((G|0)==32){F=f;o=pS(U,S,c[S+40>>2]|0,b,e)|0;f=1}a:do if((F|0)>0){D=d+(o*72|0)+24|0;E=d+(o*72|0)+32|0;C=(f|0)!=0;y=g?b+(a*56|0)+48|0:b+(a*56|0)+44|0;z=T+8|0;g=0;f=0;x=F;b:while(1){k=d+(x*72|0)|0;v=d+(x*72|0)+24|0;if(!(uS(v,D)|0))break a;m=d+(x*72|0)+56|0;u=c[m>>2]|0;n=tS()|0;p=tS()|0;c[e+(u*40|0)>>2]=1;c[e+(u*40|0)+4>>2]=a;c[e+(u*40|0)+32>>2]=n;c[e+(u*40|0)+36>>2]=p;c[e+(n*40|0)>>2]=3;c[e+(n*40|0)+24>>2]=x;c[e+(n*40|0)+28>>2]=u;c[e+(p*40|0)>>2]=3;w=sS(d)|0;c[e+(p*40|0)+24>>2]=w;A=d+(w*72|0)|0;c[d+(w*72|0)+68>>2]=1;c[e+(p*40|0)+28>>2]=u;g=(x|0)==(F|0)?w:g;u=d+(x*72|0)+32|0;if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0)f=w;s=A;r=s+72|0;do{c[s>>2]=c[k>>2];s=s+4|0;k=k+4|0}while((s|0)<(r|0));c[m>>2]=n;c[d+(w*72|0)+56>>2]=p;t=d+(x*72|0)+48|0;m=d+(x*72|0)+52|0;k=(c[m>>2]|0)<1;do if((c[t>>2]|0)<1){if(k)break b;s=d+(x*72|0)+40|0;k=c[s>>2]|0;do if((k|0)>0?(M=d+(x*72|0)+44|0,N=c[M>>2]|0,(N|0)>0):0){r=d+(x*72|0)+60|0;k=c[r>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=N;c[d+(w*72|0)+44>>2]=-1;c[M>>2]=-1;c[d+(N*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=N;c[M>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;p=w;n=N}else{c[d+(w*72|0)+44>>2]=-1;t=d+(w*72|0)+40|0;c[t>>2]=c[M>>2];n=c[s>>2]|0;c[M>>2]=n;c[s>>2]=k;c[d+(k*72|0)+48>>2]=x;p=x;k=c[t>>2]|0}c[d+(n*72|0)+48>>2]=p;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[r>>2]=0}else G=77;while(0);do if((G|0)==77){G=0;n=d+(k*72|0)+48|0;p=c[n>>2]|0;k=d+(k*72|0)+52|0;if((p|0)>0?(c[k>>2]|0)>0:0){k=c[d+(p*72|0)+4>>2]|0;if((k|0)>0?(qS(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[s>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;break}c[n>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[y>>2]|0;if((k|0)>0?(qS(k,b,S)|0)!=0:0){c[d+((c[m>>2]|0)*72|0)+40>>2]=x;n=d+(w*72|0)+52|0;k=w}else{c[d+((c[d+(w*72|0)+52>>2]|0)*72|0)+44>>2]=w;n=m;k=x}c[n>>2]=-1;c[d+(k*72|0)+48>>2]=-1;k=c[m>>2]|0;break}k=c[m>>2]|0;m=d+(k*72|0)+40|0;n=c[m>>2]|0;p=d+(k*72|0)+44|0;if((n|0)>0?(O=c[p>>2]|0,P=(n|0)==(x|0),(O|0)>0):0){c[d+(k*72|0)+60>>2]=P?O:n;c[d+(k*72|0)+64>>2]=P?1:2}c[m>>2]=x;c[p>>2]=w}else{if(!k){i=+h[u>>3];j=+h[H>>3];q=i-j;if(!(+B(+q)<=1.0e-07)){h[z>>3]=i;i=+h[S>>3];h[T>>3]=(+h[U>>3]-i)*(q/(+h[V>>3]-j))+i;s=(vS(T,v)|0)!=0}else s=+h[v>>3]>+h[S>>3];r=d+(x*72|0)+40|0;k=c[r>>2]|0;do if((k|0)>0?(Q=d+(x*72|0)+44|0,R=c[Q>>2]|0,(R|0)>0):0){p=d+(x*72|0)+60|0;k=c[p>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=R;c[d+(w*72|0)+44>>2]=-1;c[Q>>2]=-1;c[d+(R*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=R;c[Q>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[r>>2]|0)*72|0)+48>>2]=x;n=w;m=R}else{c[d+(w*72|0)+44>>2]=-1;X=d+(w*72|0)+40|0;c[X>>2]=c[Q>>2];m=c[r>>2]|0;c[Q>>2]=m;c[r>>2]=k;c[d+(k*72|0)+48>>2]=x;n=x;k=c[X>>2]|0}c[d+(m*72|0)+48>>2]=n;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[p>>2]=0}else G=106;while(0);do if((G|0)==106){G=0;m=d+(k*72|0)+48|0;n=c[m>>2]|0;k=d+(k*72|0)+52|0;if((n|0)>0?(c[k>>2]|0)>0:0){k=c[d+(n*72|0)+4>>2]|0;if((k|0)>0?(qS(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[r>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[r>>2]|0)*72|0)+48>>2]=x;break}c[m>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[t>>2]|0;c[d+(k*72|0)+40>>2]=x;c[d+(k*72|0)+44>>2]=-1;k=d+(x*72|0)+52|0;X=c[k>>2]|0;c[d+(X*72|0)+40>>2]=w;c[d+(X*72|0)+44>>2]=-1;c[d+(w*72|0)+48>>2]=X;c[d+(w*72|0)+52>>2]=-1;c[k>>2]=-1;k=-1}else G=116;do if((G|0)==116){G=0;k=c[t>>2]|0;c[d+(k*72|0)+40>>2]=x;m=d+(k*72|0)+44|0;if(s){c[m>>2]=w;X=d+(x*72|0)+52|0;v=c[X>>2]|0;c[d+(v*72|0)+40>>2]=w;c[d+(v*72|0)+44>>2]=-1;c[X>>2]=-1;break}else{c[m>>2]=-1;k=d+(x*72|0)+52|0;X=c[k>>2]|0;c[d+(X*72|0)+40>>2]=x;c[d+(X*72|0)+44>>2]=w;c[d+(w*72|0)+48>>2]=X;c[d+(w*72|0)+52>>2]=-1;k=c[k>>2]|0;break}}while(0);break}s=d+(x*72|0)+40|0;k=c[s>>2]|0;do if((k|0)>0?(I=d+(x*72|0)+44|0,J=c[I>>2]|0,(J|0)>0):0){r=d+(x*72|0)+60|0;k=c[r>>2]|0;if((k|0)<=0){c[d+(w*72|0)+40>>2]=J;c[d+(w*72|0)+44>>2]=-1;c[I>>2]=-1;c[d+(J*72|0)+48>>2]=w;break}if((c[d+(x*72|0)+64>>2]|0)==1){c[d+(w*72|0)+40>>2]=J;c[I>>2]=-1;c[d+(w*72|0)+44>>2]=k;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;p=w;n=J}else{c[d+(w*72|0)+44>>2]=-1;X=d+(w*72|0)+40|0;c[X>>2]=c[I>>2];n=c[s>>2]|0;c[I>>2]=n;c[s>>2]=k;c[d+(k*72|0)+48>>2]=x;p=x;k=c[X>>2]|0}c[d+(n*72|0)+48>>2]=p;c[d+(k*72|0)+48>>2]=w;c[d+(w*72|0)+60>>2]=0;c[r>>2]=0}else G=51;while(0);do if((G|0)==51){G=0;n=d+(k*72|0)+48|0;p=c[n>>2]|0;k=d+(k*72|0)+52|0;if((p|0)>0?(c[k>>2]|0)>0:0){k=c[d+(p*72|0)+4>>2]|0;if((k|0)>0?(qS(k,b,U)|0)==0:0){c[d+(w*72|0)+44>>2]=-1;c[d+(x*72|0)+44>>2]=-1;c[s>>2]=-1;c[d+((c[d+(w*72|0)+40>>2]|0)*72|0)+52>>2]=w;break}c[d+(x*72|0)+44>>2]=-1;c[d+(w*72|0)+44>>2]=-1;c[d+(w*72|0)+40>>2]=-1;c[d+((c[s>>2]|0)*72|0)+48>>2]=x;break}c[n>>2]=x;c[k>>2]=w}while(0);if(+B(+(+h[u>>3]-+h[E>>3]))<=1.0e-07?C&+B(+(+h[v>>3]-+h[D>>3]))<=1.0e-07:0){k=c[y>>2]|0;if((k|0)>0?(qS(k,b,S)|0)!=0:0){c[d+((c[t>>2]|0)*72|0)+40>>2]=x;m=d+(w*72|0)+52|0;k=w}else{c[d+((c[d+(w*72|0)+48>>2]|0)*72|0)+44>>2]=w;k=x}c[m>>2]=-1;c[d+(k*72|0)+48>>2]=-1;k=c[t>>2]|0;break}k=c[t>>2]|0;m=d+(k*72|0)+40|0;n=c[m>>2]|0;p=d+(k*72|0)+44|0;if((n|0)>0?(K=c[p>>2]|0,L=(n|0)==(x|0),(K|0)>0):0){c[d+(k*72|0)+60>>2]=L?K:n;c[d+(k*72|0)+64>>2]=L?1:2}c[m>>2]=x;c[p>>2]=w}while(0);c[A>>2]=a;c[d+(x*72|0)+4>>2]=a;if((k|0)>0)x=k;else break a}E1(135342,19,1,c[15686]|0)|0}else{g=0;f=0}while(0);wS(a,F,o,1,d,e);wS(a,g,f,2,d,e);c[b+(a*56|0)+32>>2]=1;l=W;return}function oS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!(c[b+(a*56|0)+32>>2]|0)){f=b+(a*56|0)|0;g=b+(a*56|0)+16|0;h=b+(a*56|0)+36|0;c[h>>2]=c[d+((pS(f,g,c[h>>2]|0,b,e)|0)*72|0)+56>>2];a=b+(a*56|0)+40|0;c[a>>2]=c[d+((pS(g,f,c[a>>2]|0,b,e)|0)*72|0)+56>>2]}return}function pS(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0;o=a+8|0;q=b+8|0;a:while(1){b:do switch(c[f+(d*40|0)>>2]|0){case 3:{r=3;break a}case 2:{g=+h[o>>3];i=f+(d*40|0)+8|0;j=+h[f+(d*40|0)+16>>3];k=j+1.0e-07;do if(!(g>k)){l=j+-1.0e-07;if(!(g<l)?+h[a>>3]>+h[i>>3]:0)break;if(+B(+(g-j))<=1.0e-07?(m=+h[i>>3],+B(+(+h[a>>3]-m))<=1.0e-07):0){g=+h[q>>3];do if(!(g>k)){if(!(g<l)?+h[b>>3]>m:0)break;d=f+(d*40|0)+32|0;break b}while(0);d=f+(d*40|0)+36|0;break b}d=f+(d*40|0)+32|0;break b}while(0);d=f+(d*40|0)+36|0;break}case 1:{g=+h[o>>3];i=c[f+(d*40|0)+4>>2]|0;if(+B(+(g-+h[e+(i*56|0)+8>>3]))<=1.0e-07?(n=+h[a>>3],+B(+(n-+h[e+(i*56|0)>>3]))<=1.0e-07):0)j=n;else r=19;do if((r|0)==19){r=0;if(+B(+(g-+h[e+(i*56|0)+24>>3]))<=1.0e-07?(p=+h[a>>3],+B(+(p-+h[e+(i*56|0)+16>>3]))<=1.0e-07):0){j=p;break}if(!(qS(i,e,a)|0)){d=f+(d*40|0)+36|0;break b}else{d=f+(d*40|0)+32|0;break b}}while(0);if(!(+B(+(g-+h[q>>3]))<=1.0e-07))if(!(qS(i,e,b)|0)){d=f+(d*40|0)+36|0;break b}else{d=f+(d*40|0)+32|0;break b}else if(+h[b>>3]<j){d=f+(d*40|0)+32|0;break b}else{d=f+(d*40|0)+36|0;break b}}default:{r=31;break a}}while(0);d=c[d>>2]|0}if((r|0)==3)return c[f+(d*40|0)+24>>2]|0;else if((r|0)==31){E1(135276,35,1,c[15686]|0)|0;qa(135312,135314,349,135326)}return 0}function qS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0.0;f=b+(a*56|0)+16|0;g=+h[b+(a*56|0)+24>>3];i=b+(a*56|0)|0;e=+h[b+(a*56|0)+8>>3];do if(!(g>e+1.0e-07)){if(!(g<e+-1.0e-07)?+h[f>>3]>+h[i>>3]:0){j=4;break}d=+h[c+8>>3];if(+B(+(g-d))<=1.0e-07){d=+h[c>>3]<+h[f>>3]?1.0:-1.0;break}if(!(+B(+(e-d))<=1.0e-07)){k=+h[f>>3];d=(+h[i>>3]-k)*(d-g)-(+h[c>>3]-k)*(e-g);break}else{d=+h[c>>3]<+h[i>>3]?1.0:-1.0;break}}else j=4;while(0);do if((j|0)==4){d=+h[c+8>>3];if(+B(+(g-d))<=1.0e-07){d=+h[c>>3]<+h[f>>3]?1.0:-1.0;break}if(!(+B(+(e-d))<=1.0e-07)){k=+h[i>>3];d=(+h[f>>3]-k)*(d-e)-(+h[c>>3]-k)*(g-e);break}else{d=+h[c>>3]<+h[i>>3]?1.0:-1.0;break}}while(0);return d>0.0|0}function rS(a,b,d){a=a|0;b=b|0;d=d|0;return c[b+((c[((d|0)==1?b+(a*56|0)+48|0:b+(a*56|0)+44|0)>>2]|0)*56|0)+32>>2]|0}function sS(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[46625]|0;if((b|0)<(c[46624]|0)){c[a+(b*72|0)>>2]=-1;c[a+(b*72|0)+4>>2]=-1;c[a+(b*72|0)+68>>2]=1;c[46625]=b+1;l=e;return b|0}else{e=c[15686]|0;c[d>>2]=b;g1(e,135401,d)|0;qa(135312,135314,88,135439)}return 0}function tS(){var a=0;a=c[46626]|0;if((a|0)<(c[46623]|0)){c[46626]=a+1;return a|0}else{E1(135362,30,1,c[15686]|0)|0;qa(135312,135314,72,135393)}return 0}function uS(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(c>d+1.0e-07))if(c<d+-1.0e-07)a=0;else a=+h[a>>3]>=+h[b>>3]&1;else a=1;return a|0}function vS(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(c<d+-1.0e-07))if(c>d+1.0e-07)a=0;else a=+h[a>>3]<+h[b>>3]&1;else a=1;return a|0}function wS(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=f+(d*72|0)+24|0;p=(e|0)==1;a:while(1){o=f+(b*72|0)+24|0;j=f+(b*72|0)+48|0;k=f+(b*72|0)+52|0;l=f+(b*72|0)|0;m=f+(b*72|0)+4|0;n=f+(b*72|0)+56|0;if((b|0)<=0)break;while(1){if(!(uS(o,q)|0))break a;d=c[j>>2]|0;e=(d|0)>0;do if(p){if(e?(c[f+(d*72|0)+4>>2]|0)==(a|0):0)break;d=c[k>>2]|0;if((d|0)<=0){b=d;continue a}if((c[f+(d*72|0)+4>>2]|0)!=(a|0)){b=d;continue a}}else{if(e?(c[f+(d*72|0)>>2]|0)==(a|0):0)break;d=c[k>>2]|0;if((d|0)<=0){b=d;continue a}if((c[f+(d*72|0)>>2]|0)!=(a|0)){b=d;continue a}}while(0);if((c[l>>2]|0)!=(c[f+(d*72|0)>>2]|0)){b=d;continue a}if((c[m>>2]|0)!=(c[f+(d*72|0)+4>>2]|0)){b=d;continue a}r=c[f+(d*72|0)+56>>2]|0;e=c[g+(r*40|0)+28>>2]|0;h=g+(e*40|0)+32|0;i=c[n>>2]|0;if((c[h>>2]|0)==(r|0))c[h>>2]=i;else c[g+(e*40|0)+36>>2]=i;e=c[f+(d*72|0)+48>>2]|0;c[j>>2]=e;do if((e|0)>0){h=f+(e*72|0)+40|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=b;break}e=f+(e*72|0)+44|0;if((c[e>>2]|0)==(d|0))c[e>>2]=b}while(0);e=c[f+(d*72|0)+52>>2]|0;c[k>>2]=e;do if((e|0)>0){h=f+(e*72|0)+40|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=b;break}e=f+(e*72|0)+44|0;if((c[e>>2]|0)==(d|0))c[e>>2]=b}while(0);r=f+(d*72|0)+24|0;c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];c[f+(d*72|0)+68>>2]=2}}return}function xS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d+8>>3];do if(!(e>f+1.0e-07)){if(!(+B(+(e-f))<=1.0e-07)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}if(+h[b>>3]>+h[d>>3]+1.0e-07){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}while(0);return}function yS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+h[b+8>>3];f=+h[d+8>>3];do if(!(e<f+-1.0e-07)){if(!(+B(+(e-f))<=1.0e-07)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}if(+h[b>>3]<+h[d>>3]){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}while(0);return}function zS(a){a=a|0;var b=0;b=uH(8)|0;if(b|0){c[b+4>>2]=a;c[b>>2]=0}return b|0}function AS(a,b){a=a|0;b=b|0;if(b){b=zS(b)|0;c[b>>2]=a;a=b}return a|0}function BS(a){a=a|0;var b=0;do{b=a;a=c[a>>2]|0;D_(b)}while((a|0)!=0);return}function CS(){var a=0;a=uH(1992)|0;if(a|0)c[a>>2]=DS(a)|0;return a|0}function DS(a){a=a|0;var b=0;b=JS(a)|0;c[b+4>>2]=0;a=a+1972|0;c[a>>2]=(c[a>>2]|0)+1;return b|0}function ES(a){a=a|0;FS(a,c[a>>2]|0);D_(c[a>>2]|0);D_(a);return 0}function FS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=a+1980|0;h=a+1912|0;i=a+1936|0;a:do if((c[b+4>>2]|0)>0){d=0;while(1){if((d|0)==64)break a;e=b+8+(d*20|0)+16|0;f=c[e>>2]|0;if(f|0?(FS(a,f),D_(c[e>>2]|0),PS(b,d),c[g>>2]=(c[g>>2]|0)+-1,c[h>>2]|0):0)c[i>>2]=(c[i>>2]|0)+1;d=d+1|0}}else{d=0;while(1){if((d|0)==64)break a;if(c[b+8+(d*20|0)+16>>2]|0?(PS(b,d),c[g>>2]=(c[g>>2]|0)+-1,c[h>>2]|0):0)c[i>>2]=(c[i>>2]|0)+1;d=d+1|0}}while(0);return}function GS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!b)qa(135797,135447,194,135455);e=c[b+4>>2]|0;if((e|0)<=-1)qa(135467,135447,195,135455);if(!d)qa(135739,135447,196,135455);i=a+1952|0;c[i>>2]=(c[i>>2]|0)+1;a:do if((e|0)>0){i=0;e=0;while(1){if((i|0)==64)break a;f=b+8+(i*20|0)+16|0;if((c[f>>2]|0)!=0?(US(d,b+8+(i*20|0)|0)|0)!=0:0){g=GS(a,c[f>>2]|0,d)|0;if(!e)e=g;else{f=e;while(1){h=c[f>>2]|0;if(!h)break;else f=h}c[f>>2]=g}}i=i+1|0}}else{g=0;e=0;while(1){if((g|0)==64)break a;f=b+8+(g*20|0)|0;if((c[b+8+(g*20|0)+16>>2]|0)!=0?(US(d,f)|0)!=0:0)e=AS(e,f)|0;g=g+1|0}}while(0);return e|0}function HS(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+52|0;m=p+32|0;n=p+16|0;o=p;c[k>>2]=0;if(!((b|0)!=0&(e|0)!=0))qa(135653,135447,247,135481);if((f|0)>-1?(j=c[e>>2]|0,(c[j+4>>2]|0)>=(f|0)):0){g=0;while(1){if((g|0)>=2)break;if((c[b+(g<<2)>>2]|0)>(c[b+(g+2<<2)>>2]|0)){h=8;break}else g=g+1|0}if((h|0)==8)qa(135528,135447,250,135481);i=a+1912|0;g=a+1908|0;h=c[g>>2]|0;if(c[i>>2]|0){q=h|0?a+1924|0:a+1916|0;c[q>>2]=(c[q>>2]|0)+1}if(!h){q=a+1964|0;c[q>>2]=(c[q>>2]|0)+1}if(!(IS(a,b,d,j,k,f)|0))g=0;else{if(c[i>>2]|0){q=c[g>>2]|0?a+1948|0:a+1944|0;c[q>>2]=(c[q>>2]|0)+1}g=JS(a)|0;q=a+1976|0;c[q>>2]=(c[q>>2]|0)+1;q=c[e>>2]|0;c[g+4>>2]=(c[q+4>>2]|0)+1;MS(n,q);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];q=m+16|0;c[q>>2]=c[e>>2];OS(a,m,g,0)|0;MS(o,c[k>>2]|0);c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[q>>2]=c[k>>2];OS(a,m,g,0)|0;c[e>>2]=g;g=a+1980|0;c[g>>2]=(c[g>>2]|0)+2;g=1}l=p;return g|0}qa(135493,135447,248,135481);return 0}function IS(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+80|0;m=q+52|0;n=q+48|0;o=q+32|0;p=q+16|0;k=q;c[n>>2]=0;if(!((b|0)!=0&(e|0)!=0&(f|0)!=0))qa(135571,135447,311,135585);if((g|0)>-1?(i=e+4|0,h=c[i>>2]|0,(h|0)>=(g|0)):0){if(c[a+1912>>2]|0){h=c[a+1908>>2]|0?a+1948|0:a+1944|0;c[h>>2]=(c[h>>2]|0)+1;h=c[i>>2]|0}do if((h|0)>(g|0)){i=NS(b,e)|0;h=e+8+(i*20|0)+16|0;i=e+8+(i*20|0)|0;if(!(IS(a,b,d,c[h>>2]|0,n,g)|0)){TS(o,b,i);c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];j=0;break}else{MS(p,c[h>>2]|0);c[i>>2]=c[p>>2];c[i+4>>2]=c[p+4>>2];c[i+8>>2]=c[p+8>>2];c[i+12>>2]=c[p+12>>2];j=c[n>>2]|0;c[m+16>>2]=j;MS(k,j);c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];j=a+1980|0;c[j>>2]=(c[j>>2]|0)+1;j=OS(a,m,e,f)|0;break}}else if((h|0)==(g|0)){c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];c[m+16>>2]=d;j=a+1980|0;c[j>>2]=(c[j>>2]|0)+1;j=OS(a,m,e,f)|0;break}else qa(135630,135447,341,135585);while(0);l=q;return j|0}qa(135598,135447,312,135585);return 0}function JS(a){a=a|0;a=a+1968|0;c[a>>2]=(c[a>>2]|0)+1;a=C_(1288)|0;KS(a);return a|0}function KS(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=-1;b=0;while(1){if((b|0)==64)break;LS(a+8+(b*20|0)|0);b=b+1|0}return}function LS(a){a=a|0;QS(a);c[a+16>>2]=0;return}function MS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;g=i+16|0;h=i;if(!b)qa(135797,135636,99,135643);QS(g);d=1;f=0;while(1){if((f|0)==64)break;do if(c[b+8+(f*20|0)+16>>2]|0){e=b+8+(f*20|0)|0;if(!d){TS(h,g,e);c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];d=0;break}else{c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];d=0;break}}while(0);f=f+1|0}c[a>>2]=c[g>>2];c[a+4>>2]=c[g+4>>2];c[a+8>>2]=c[g+8>>2];c[a+12>>2]=c[g+12>>2];l=i;return}function NS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;k=l;l=l+32|0;i=k+16|0;j=k;if(!((a|0)!=0&(b|0)!=0))qa(135653,135636,125,135660);d=0;e=0;f=0;g=1;h=0;while(1){if((h|0)==64)break;if(c[b+8+(h*20|0)+16>>2]|0){n=b+8+(h*20|0)|0;p=SS(n)|0;TS(j,a,n);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];n=(SS(i)|0)-p|0;m=(g|0)!=0|(n|0)<(f|0);o=m|(p|0)<(e|0)&(n|0)==(f|0);d=o?h:d;e=o?p:e;f=o?n:f;g=m?0:g}h=h+1|0}l=k;return d|0}function OS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!b)qa(135819,135636,167,135671);if(!d)qa(135797,135636,168,135671);do if((c[d>>2]|0)<64){a=0;while(1){if((a|0)>=64){e=10;break}if(!(c[d+8+(a*20|0)+16>>2]|0)){e=8;break}a=a+1|0}if((e|0)==8){f=d+8+(a*20|0)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];f=0;g=d;break}else if((e|0)==10)qa(135681,135636,178,135671)}else{if(c[a+1912>>2]|0){h=c[a+1908>>2]|0?a+1948|0:a+1944|0;c[h>>2]=(c[h>>2]|0)+1}if(!e)qa(135694,135636,187,135671);else{VS(a,d,b,e);f=1;g=(c[d+4>>2]|0)==0?a+1972|0:a+1976|0;break}}while(0);c[g>>2]=(c[g>>2]|0)+1;return f|0}function PS(a,b){a=a|0;b=b|0;if(!((a|0)!=0&b>>>0<64))qa(135698,135636,201,135726);if(!(c[a+8+(b*20|0)+16>>2]|0))qa(136220,135636,202,135726);else{LS(a+8+(b*20|0)|0);c[a>>2]=(c[a>>2]|0)+-1;return}}function QS(a){a=a|0;var b=0;b=0;while(1){if((b|0)==4)break;c[a+(b<<2)>>2]=0;b=b+1|0}return}function RS(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;c[d>>2]=1;c[d+8>>2]=-1;b=1;while(1){if((b|0)==2)break;c[d+(b+2<<2)>>2]=0;c[d+(b<<2)>>2]=0;b=b+1|0}c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];l=e;return}function SS(a){a=a|0;var b=0,d=0,e=0;if(!a)qa(135739,135741,128,135753);a:do if((c[a>>2]|0)>(c[a+8>>2]|0))b=0;else{b=1;d=0;while(1){if((d|0)==2)break a;e=O(c[a+(d+2<<2)>>2]|0,b)|0;b=e-(c[a+(d<<2)>>2]|0)|0;d=d+1|0}}while(0);return b|0}function TS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=l;l=l+16|0;f=g;if(!((b|0)!=0&(d|0)!=0))qa(135762,135741,195,135770);do if((c[b>>2]|0)>(c[b+8>>2]|0)){c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2]}else{if((c[d>>2]|0)>(c[d+8>>2]|0)){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else e=0;while(1){if((e|0)==2)break;j=c[b+(e<<2)>>2]|0;h=c[d+(e<<2)>>2]|0;c[f+(e<<2)>>2]=(j|0)<(h|0)?j:h;h=e+2|0;j=c[b+(h<<2)>>2]|0;i=c[d+(h<<2)>>2]|0;c[f+(h<<2)>>2]=(j|0)>(i|0)?j:i;e=e+1|0}c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2]}while(0);l=g;return}function US(a,b){a=a|0;b=b|0;var d=0,e=0;if((a|0)!=0&(b|0)!=0)d=0;else qa(135782,135741,216,135789);while(1){if((d|0)>=2){d=1;break}e=d+2|0;if((c[a+(d<<2)>>2]|0)>(c[b+(e<<2)>>2]|0)){d=0;break}if((c[b+(d<<2)>>2]|0)>(c[a+(e<<2)>>2]|0)){d=0;break}else d=d+1|0}return d|0}function VS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0;if(!b)qa(135797,135799,40,135809);if(!d)qa(135819,135799,41,135809);j=a+1912|0;if(c[j>>2]|0){i=c[a+1908>>2]|0?a+1932|0:a+1928|0;c[i>>2]=(c[i>>2]|0)+1}h=b+4|0;i=c[h>>2]|0;WS(a,b,d);d=a+1324|0;XS(a);f=SS(a+1852|0)|0;f=(SS(a+1868|0)|0)+f|0;if(c[j>>2]|0?(f|0)!=0&(c[a+1908>>2]|0)==0:0){j=a+1960|0;g[j>>2]=+((c[a+1320>>2]|0)>>>0)/+(f|0)+ +g[j>>2]}j=JS(a)|0;c[e>>2]=j;c[h>>2]=i;c[j+4>>2]=i;YS(a,b,j,d);if(((c[c[e>>2]>>2]|0)+(c[b>>2]|0)|0)==65)return;else qa(135821,135799,86,135809)}function WS(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+16|0;g=h;if(!b)qa(135797,135799,106,136208);if(!d)qa(135819,135799,107,136208);else e=0;while(1){if((e|0)>=64)break;if(!(c[b+8+(e*20|0)+16>>2]|0)){f=7;break}j=b+8+(e*20|0)|0;i=a+4+(e*20|0)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];c[i+16>>2]=c[j+16>>2];e=e+1|0}if((f|0)==7)qa(136220,135799,111,136208);e=a+4|0;j=a+1284|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];c[j+16>>2]=c[d+16>>2];d=a+1304|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];e=1;while(1){if((e|0)==65)break;TS(g,d,a+4+(e*20|0)|0);c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];e=e+1|0}c[a+1320>>2]=SS(d)|0;KS(b);l=h;return}function XS(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+48|0;i=u+32|0;k=u+16|0;m=u;ZS(a);_S(a);q=a+1844|0;s=a+1848|0;t=a+1892|0;n=a+1852|0;o=a+1884|0;p=a+1868|0;j=a+1888|0;f=0;e=0;while(1){d=c[q>>2]|0;b=c[s>>2]|0;if((b+d|0)>=65)break;h=65-(c[t>>2]|0)|0;if((d|0)<(h|0)&(b|0)<(h|0)){g=-1;h=0}else{r=12;break}while(1){if((h|0)==65)break;if(!(c[a+1584+(h<<2)>>2]|0)){v=a+4+(h*20|0)|0;TS(k,v,n);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];b=SS(i)|0;d=c[o>>2]|0;TS(m,v,p);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];v=SS(i)|0;b=v-(c[j>>2]|0)+(d-b)|0;d=(b|0)>-1;b=d?b:0-b|0;d=(d^1)&1;if((b|0)<=(g|0))if((b|0)==(g|0)){v=(c[a+1844+(d<<2)>>2]|0)<(c[a+1844+(f<<2)>>2]|0);b=g;d=v?d:f;e=v?h:e}else{b=g;d=f}else e=h}else{b=g;d=f}g=b;h=h+1|0;f=d}$S(a,e,f)}if((r|0)==12){b=(d|0)>=(65-(c[t>>2]|0)|0)&1;d=0;while(1){if((d|0)==65)break;if(!(c[a+1584+(d<<2)>>2]|0))$S(a,d,b);d=d+1|0}d=c[q>>2]|0;b=c[s>>2]|0}if((b+d|0)!=65)qa(135964,135799,210,136050);v=c[t>>2]|0;if((d|0)<(v|0)|(b|0)<(v|0))qa(136061,135799,212,136050);else{l=u;return}}function YS(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if(!b)qa(135797,135799,297,135861);if(!d)qa(135871,135799,298,135861);if(!e)qa(135873,135799,299,135861);else f=0;while(1){if((f|0)>=65){e=14;break}e=c[a+1324+(f<<2)>>2]|0;if(e>>>0>=2){e=9;break}switch(e|0){case 0:{OS(a,a+4+(f*20|0)|0,b,0)|0;break}case 1:{OS(a,a+4+(f*20|0)|0,d,0)|0;break}default:{}}f=f+1|0}if((e|0)==9)qa(135875,135799,303,135861);else if((e|0)==14)return}function ZS(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;e=d;c[a+1848>>2]=0;c[a+1844>>2]=0;b=a+1852|0;f=a+1868|0;RS(e);c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];c[a+1888>>2]=0;c[a+1884>>2]=0;b=0;while(1){if((b|0)==65)break;c[a+1584+(b<<2)>>2]=0;c[a+1324+(b<<2)>>2]=-1;b=b+1|0}l=d;return}function _S(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+304|0;k=o+32|0;m=o+16|0;n=o;b=0;while(1){if((b|0)==65)break;c[k+(b<<2)>>2]=SS(a+4+(b*20|0)|0)|0;b=b+1|0}b=0;d=0;e=0;g=0;a:while(1){if((g|0)==64)break;i=g+1|0;j=a+4+(g*20|0)|0;h=k+(g<<2)|0;f=i;while(1){if((f|0)==65){g=i;continue a}TS(n,j,a+4+(f*20|0)|0);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];p=SS(m)|0;p=p-(c[h>>2]|0)-(c[k+(f<<2)>>2]|0)|0;q=p>>>0>e>>>0;r=q?f:b;f=f+1|0;b=r;d=q?g:d;e=q?p:e}}$S(a,d,0);$S(a,b,1);l=o;return}function $S(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;e=a+1584+(b<<2)|0;if(c[e>>2]|0)qa(136164,135799,257,136199);c[a+1324+(b<<2)>>2]=d;c[e>>2]=1;g=a+1844+(d<<2)|0;f=a+1852+(d<<4)|0;e=a+4+(b*20|0)|0;if(!(c[g>>2]|0)){c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2]}else{TS(h,e,f);c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2]}c[a+1884+(d<<2)>>2]=SS(f)|0;c[g>>2]=(c[g>>2]|0)+1;l=i;return}function aT(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1200|0;r=t+800|0;g=t;c[46627]=0;c[46628]=-2;f=r;i=200;n=g;p=0;q=0;o=r;a:while(1){b[o>>1]=p;if((f+(i<<1)+-2|0)>>>0>o>>>0)k=i;else{m=o-f>>1;e=m+1|0;if(i>>>0>9999){s=95;break}k=i<<1;k=k>>>0<1e4?k:1e4;h=C_(k*6|3)|0;if(h){F3(h|0,f|0,e<<1|0)|0;i=h+(k>>>1<<2)|0;F3(i|0,n|0,e<<2|0)|0;if((f|0)==(r|0)){e=0;f=h}else{D_(f);e=0;f=h}}else{e=4;i=n}j=(e|0)==0;h=f+(m<<1)|0;switch((j?((f+(k<<1)+-2|0)>>>0>h>>>0?0:9):e)&15){case 9:{e=1;s=96;break a}case 4:{s=95;break a}case 0:{g=j?i+(m<<2)|0:g;n=i;o=j?h:o;break}default:{e=0;break a}}}if((p|0)==31){e=0;s=96;break}e=b[65430+(p<<1)>>1]|0;j=e<<16>>16;do if(e<<16>>16!=-82){h=c[46628]|0;if((h|0)==-2){h=pU()|0;c[46628]=h}if((h|0)>=1)if(h>>>0<296)i=d[136239+h>>0]|0;else i=2;else{c[46628]=0;i=0}h=i+j|0;if(h>>>0<=271?(i|0)==(a[136535+h>>0]|0):0){p=a[136807+h>>0]|0;e=p<<24>>24;if(p<<24>>24<1){h=0-e|0;s=23;break}else{c[46628]=-2;g=g+4|0;c[g>>2]=c[46629];j=(q|0)==0?0:q+-1|0;h=o;break}}else s=22}else s=22;while(0);if((s|0)==22){s=0;p=a[137079+p>>0]|0;h=p&255;if(!(p<<24>>24)){h=c[46628]|0;b:do switch(q|0){case 0:{c[46627]=(c[46627]|0)+1;vT(140679);h=o;break}case 3:if((h|0)<1)if(!h){e=1;s=96;break a}else{h=o;break b}else{c[46628]=-2;h=o;break b}default:h=o}while(0);while(1){if(e<<16>>16==8)break;if((h|0)==(f|0)){e=1;s=96;break a}e=h+-2|0;g=g+-4|0;h=e;e=b[65430+(b[e>>1]<<1)>>1]|0}g=g+4|0;c[g>>2]=c[46629];e=1;j=3}else s=23}do if((s|0)==23){s=0;j=d[137195+h>>0]|0;e=c[g+(1-j<<2)>>2]|0;do switch(h|0){case 4:{s=26;break a}case 2:{c[46630]=bT(c[g+-4>>2]|0,2)|0;break}case 3:{c[46630]=bT(c[g+-4>>2]|0,1)|0;break}case 5:{e=dT()|0;break}case 8:{eT(c[46631]|0);break}case 9:{fT(c[g>>2]|0);break}case 18:{gT(c[g>>2]|0);break}case 19:{hT();break}case 20:{gT(c[g>>2]|0);break}case 21:{hT();break}case 22:{gT(c[g>>2]|0);break}case 23:{hT();break}case 24:{gT(c[g>>2]|0);break}case 25:{hT();break}case 26:{gT(c[g>>2]|0);break}case 27:{hT();break}case 28:{gT(c[g>>2]|0);break}case 29:{hT();break}case 30:{gT(c[g>>2]|0);break}case 31:{hT();break}case 32:{gT(c[g>>2]|0);break}case 33:{hT();break}case 34:{e=c[g+-4>>2]|0;break}case 35:{e=c[g>>2]|0;break}case 38:{e=c[46631]|0;i=c[e+4>>2]|0;if(i>>>0>=(c[e+8>>2]|0)>>>0){Uw(e,1)|0;i=c[46631]|0;e=i;i=c[i+4>>2]|0}a[i>>0]=0;p=c[e>>2]|0;c[e+4>>2]=p;if(iT(p)|0){s=51;break a}c[(c[g>>2]|0)+80>>2]=c[46632];e=Cw(55928,c[4554]|0)|0;c[(c[g>>2]|0)+84>>2]=e;c[46632]=c[g>>2];c[(c[g>>2]|0)+108>>2]=c[c[46633]>>2];e=c[g>>2]|0;break}case 39:{e=c[46631]|0;i=c[e+4>>2]|0;if(i>>>0>=(c[e+8>>2]|0)>>>0){Uw(e,1)|0;i=c[46631]|0;e=i;i=c[i+4>>2]|0}a[i>>0]=0;p=c[e>>2]|0;c[e+4>>2]=p;if(iT(p)|0){s=56;break a}e=c[46632]|0;c[46632]=c[e+80>>2];break}case 40:{e=c[g>>2]|0;break}case 41:{e=c[g+-4>>2]|0;break}case 42:{e=c[g+-4>>2]|0;break}case 43:{e=c[g+-4>>2]|0;break}case 44:{e=c[g+-4>>2]|0;break}case 45:{e=c[g+-4>>2]|0;break}case 48:{e=c[g>>2]|0;break}case 49:{e=c[g>>2]|0;break}case 50:{a[(c[g+-8>>2]|0)+12>>0]=1;e=c[g>>2]|0;break}case 51:{jT();break}case 52:{e=kT()|0;break}case 53:{e=c[g>>2]|0;break}case 54:{e=c[g>>2]|0;break}case 55:{e=(c[g+-8>>2]|0)+100|0;a[e>>0]=a[e>>0]|1;e=c[g>>2]|0;break}case 56:{lT(c[g+-4>>2]|0,c[g>>2]|0,1);break}case 57:{e=c[g+-12>>2]|0;break}case 58:{lT(c[g+-4>>2]|0,c[g>>2]|0,2);break}case 59:{e=c[g+-12>>2]|0;break}case 60:{lT(c[g+-4>>2]|0,c[g>>2]|0,3);break}case 61:{e=c[g+-12>>2]|0;break}case 62:{lT(c[g>>2]|0,dT()|0,2);break}case 63:{e=c[g+-8>>2]|0;break}case 64:{e=c[g+-4>>2]|0;break}case 65:{e=c[g>>2]|0;break}default:{}}while(0);i=0-j|0;p=g+(i<<2)|0;i=o+(i<<1)|0;g=p+4|0;c[p+4>>2]=e;e=(d[137367+h>>0]|0)+-41|0;p=b[i>>1]|0;h=p+(b[65662+(e<<1)>>1]|0)|0;if(h>>>0<272?(a[136535+h>>0]|0)==(p|0):0){e=a[136807+h>>0]|0;j=q;h=i;break}e=a[137437+e>>0]|0;j=q;h=i}while(0);i=k;p=e;q=j;o=h+2|0}if((s|0)==26){cT();e=1;s=96}else if((s|0)==51){vT(137265);cT();e=1;s=96}else if((s|0)==56){vT(137316);cT();e=1;s=96}else if((s|0)==95){vT(137476);e=2;s=96}if((s|0)==96)if((f|0)!=(r|0))D_(f);l=t;return e|0}function bT(b,d){b=b|0;d=d|0;var e=0;e=uH(8)|0;a[e+4>>0]=d;c[e>>2]=b;return e|0}function cT(){var a=0,b=0;a=c[46632]|0;b=c[46630]|0;if(b|0){XQ(b,1);c[46630]=0}c[13995]=67;while(1){if(!a)break;b=c[a+80>>2]|0;pT(a);a=b}c[13995]=56;c[14004]=68;b=c[46635]|0;nb[c[b>>2]&63](b,0,64)|0;c[14004]=56;c[14013]=69;b=c[46636]|0;nb[c[b>>2]&63](b,0,64)|0;c[14013]=56;sT();return}function dT(){var a=0,d=0,e=0,f=0,g=0,h=0;e=c[46636]|0;f=uH(40)|0;if(Ew(c[46635]|0)|0)fT(0);a=Ew(e)|0;b[f+4>>1]=a;a:do if(!a)a=e;else{c[f>>2]=uH(a*24|0)|0;a=0;d=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!d){a=e;break a}g=(c[f>>2]|0)+(a*24|0)|0;h=d+8|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];c[g+16>>2]=c[h+16>>2];c[g+20>>2]=c[h+20>>2];a=a+1|0;d=nb[c[e>>2]&63](e,d,8)|0}}while(0);nb[c[a>>2]&63](e,0,64)|0;return f|0}function eT(b){b=b|0;var d=0,e=0,f=0;e=uH(64)|0;f=b+4|0;d=c[f>>2]|0;if(d>>>0>=(c[b+8>>2]|0)>>>0){Uw(b,1)|0;d=c[f>>2]|0}a[d>>0]=0;b=c[b>>2]|0;c[f>>2]=b;c[e+8>>2]=n1(b)|0;c[e+12>>2]=c[c[46633]>>2];f=c[46635]|0;nb[c[f>>2]&63](f,e,1)|0;return}function fT(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=uH(32)|0;j=c[46635]|0;e=Ew(j)|0;k=i+8|0;a[i+14>>0]=d;a:do if(!e){c[k>>2]=uH(56)|0;b[i+12>>1]=1;h=n1(191979)|0;k=c[k>>2]|0;c[k>>2]=h;c[k+4>>2]=c[c[46633]>>2]}else{b[i+12>>1]=e;c[k>>2]=uH(e*56|0)|0;d=0;e=Aw(j)|0;while(1){if(!e)break a;f=(c[k>>2]|0)+(d*56|0)|0;g=e+8|0;h=f+56|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));d=d+1|0;e=c[e>>2]|0}}while(0);nb[c[j>>2]&63](j,0,64)|0;k=c[46636]|0;nb[c[k>>2]&63](k,i,1)|0;return}function gT(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;g=j;i=uH(8)|0;f=c[c[46633]>>2]|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[g+16>>2]=c[a+16>>2];c[g+20>>2]=c[a+20>>2];c[g+24>>2]=c[a+24>>2];c[g+28>>2]=c[a+28>>2];if(f|0){a=g+4|0;if((c[a>>2]|0)==0?(b=c[f+4>>2]|0,b|0):0)c[a>>2]=b;a=g+16|0;if(+h[a>>3]<0.0?(d=+h[f+16>>3],d>=0.0):0)h[a>>3]=d;if((c[g>>2]|0)==0?(e=c[f>>2]|0,e|0):0)c[g>>2]=e;a=c[f+24>>2]&127;if(a|0){f=g+24|0;e=c[f>>2]|0;c[f>>2]=e&127|a|e&-128}}f=c[(c[46634]|0)+144>>2]|0;c[i>>2]=nb[c[f>>2]&63](f,g,1)|0;c[i+4>>2]=c[46633];c[46633]=i;l=j;return}function hT(){var a=0,b=0;b=c[46633]|0;a=c[b+4>>2]|0;D_(b);c[46633]=a;return}function iT(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=0;break}if(c<<24>>24==32)b=b+1|0;else{b=1;break}}return b|0}function jT(){var b=0,d=0,e=0;e=Cw(55964,c[4554]|0)|0;b=c[46632]|0;d=uH(16)|0;c[d+8>>2]=e;if(a[b+112>>0]&2)a[d+12>>0]=1;e=c[b+84>>2]|0;nb[c[e>>2]&63](e,d,1)|0;return}function kT(){var a=0;a=c[(c[46632]|0)+84>>2]|0;return nb[c[a>>2]&63](a,0,256)|0}function lT(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=uH(16)|0;f=c[46632]|0;h=c[f+84>>2]|0;h=c[(nb[c[h>>2]&63](h,0,256)|0)+8>>2]|0;c[g+8>>2]=b;nb[c[h>>2]&63](h,g,1)|0;a[b+92>>0]=e;if(a[f+112>>0]&1)a[b+100>>0]=1;c[b+88>>2]=d;return}function mT(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function nT(a,b,d){a=a|0;b=b|0;d=d|0;yw(c[b+8>>2]|0)|0;D_(b);return}function oT(a,b,d){a=a|0;b=b|0;d=d|0;tT(c[b+8>>2]|0);D_(b);return}function pT(a){a=a|0;yw(c[a+84>>2]|0)|0;UQ(a);D_(a);return}function qT(a,b,d){a=a|0;b=b|0;d=d|0;D_(c[b+8>>2]|0);D_(b);return}function rT(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d+12|0;a=b[g>>1]|0;if(a<<16>>16){h=d+8|0;e=0;f=c[h>>2]|0;while(1){if((e|0)>=(a<<16>>16|0))break;D_(c[f>>2]|0);e=e+1|0;f=f+56|0;a=b[g>>1]|0}D_(c[h>>2]|0)}D_(d);return}function sT(){var a=0,b=0;a=c[46633]|0;while(1){b=c[a+4>>2]|0;if(!b)break;D_(a);a=b}return}function tT(b){b=b|0;var d=0;d=b+88|0;switch(a[b+92>>0]|0){case 1:{pT(c[d>>2]|0);break}case 2:{VQ(c[d>>2]|0);break}default:{}}UQ(b);D_(b);return}function uT(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+160|0;e=f+8|0;g=f;c[g>>2]=0;c[g+4>>2]=0;c[46633]=g;c[46632]=0;c[46630]=0;c[46634]=c[(c[(c[d+52>>2]|0)+16>>2]|0)+144>>2];c[46635]=Cw(56e3,c[4554]|0)|0;c[46636]=Cw(56036,c[4554]|0)|0;Tw(e,128,f+24|0);c[46631]=e;if(!(yT(a,e,d)|0)){aT()|0;c[b>>2]=oU()|0;a=c[46630]|0}else{c[b>>2]=2;a=0}yw(c[46635]|0)|0;yw(c[46636]|0)|0;c[46635]=0;c[46636]=0;c[46633]=0;Xw(e);l=f;return a|0}function vT(b){b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;if(!(a[186581]|0)){a[186581]=1;f=wT()|0;c[d>>2]=b;c[d+4>>2]=f;Pw(1,137493,d)|0;xT()}l=e;return}function wT(){return dX(c[46637]|0)|0}function xT(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=f;b=c[46640]|0;c[b+4>>2]=c[b>>2];d=c[46649]|0;if((d|0)>0){Vw(b,c[46647]|0,d)|0;b=c[46640]|0}Vw(b,c[46646]|0,c[46648]|0)|0;d=c[46640]|0;b=c[d+4>>2]|0;if(b>>>0>=(c[d+8>>2]|0)>>>0){Uw(d,1)|0;b=c[46640]|0;d=b;b=c[b+4>>2]|0}c[d+4>>2]=b+1;a[b>>0]=0;b=c[46640]|0;d=c[b>>2]|0;c[b+4>>2]=d;c[e>>2]=d;Pw(3,137509,e)|0;l=f;return}function yT(b,e,f){b=b|0;e=e|0;f=f|0;c[46640]=e;Tw(186564,128,0);c[46638]=b;a[186583]=0;a[186580]=0;a[186581]=0;c[46648]=0;c[46649]=0;a[186582]=1;f=f+52|0;e=DV(hH(d[(c[(c[f>>2]|0)+16>>2]|0)+115>>0]|0)|0)|0;c[46637]=e;SW(e,c[(c[(c[f>>2]|0)+16>>2]|0)+144>>2]|0);TW(c[46637]|0,70,27);UW(c[46637]|0,71);return 0}function zT(b,d,e){b=b|0;d=d|0;e=e|0;do if(!(O$(d,137521)|0)){c[46629]=DT(e)|0;a[186582]=0;c[46639]=286}else{if(O$(d,137527)|0?O$(d,137530)|0:0){if(!(O$(d,137533)|0)){a[186582]=1;c[46629]=ET(e)|0;c[46639]=287;break}if(!(O$(d,137541)|0)){c[46629]=FT(b,e,0)|0;c[46639]=288;break}if(!(O$(d,137546)|0)){c[46629]=FT(b,0,1)|0;c[46639]=290;break}if(!(O$(d,137562)|0)){c[46629]=FT(b,0,32)|0;c[46639]=295;break}if(!(O$(d,137548)|0)){c[46629]=FT(b,0,4)|0;c[46639]=291;break}if(!(O$(d,137550)|0)){c[46629]=FT(b,0,64)|0;c[46639]=292;break}if(!(O$(d,137552)|0)){c[46629]=FT(b,0,2)|0;c[46639]=289;break}if(!(O$(d,137554)|0)){c[46629]=FT(b,0,8)|0;c[46639]=293;break}if(!(O$(d,137558)|0)){c[46629]=FT(b,0,16)|0;c[46639]=294;break}if(!(O$(d,137564)|0)){GT(e);c[46639]=283;break}if(!(O$(d,137567)|0)){c[46639]=277;break}if(!(O$(d,137570)|0)){c[46639]=280;break}if(!(O$(d,137573)|0)){c[46629]=HT(e)|0;c[46639]=285;break}if(!(O$(d,137536)|0)){c[46639]=262;break}else{CT(d);break}}a[186582]=0;c[46639]=260}while(0);return}function AT(b,d){b=b|0;d=d|0;do if(!(O$(d,137521)|0)){c[46639]=264;a[186582]=1}else{if(O$(d,137527)|0?O$(d,137530)|0:0){if(!(O$(d,137533)|0)){c[46639]=265;a[186582]=0;break}if(!(O$(d,137536)|0)){c[46639]=263;break}if(!(O$(d,137541)|0)){c[46639]=266;break}if(!(O$(d,137546)|0)){c[46639]=270;break}if(!(O$(d,137548)|0)){c[46639]=271;break}if(!(O$(d,137550)|0)){c[46639]=272;break}if(!(O$(d,137552)|0)){c[46639]=269;break}if(!(O$(d,137554)|0)){c[46639]=273;break}if(!(O$(d,137558)|0)){c[46639]=274;break}if(!(O$(d,137562)|0)){c[46639]=275;break}if(!(O$(d,137564)|0)){c[46639]=(c[46639]|0)==283?282:258;break}if(!(O$(d,137567)|0)){c[46639]=(c[46639]|0)==277?276:278;break}if(!(O$(d,137570)|0)){c[46639]=(c[46639]|0)==280?279:281;break}if(!(O$(d,137573)|0)){c[46639]=(c[46639]|0)==285?284:259;break}else{CT(d);break}}c[46639]=261}while(0);return}function BT(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(a[186582]|0){b=0;while(1){if(!e)break;h=d+1|0;g=a[d>>0]|0;if((g&255)>31){d=c[46640]|0;f=c[d+4>>2]|0;if(f>>>0>=(c[d+8>>2]|0)>>>0){Uw(d,1)|0;f=c[46640]|0;d=f;f=c[f+4>>2]|0}c[d+4>>2]=f+1;a[f>>0]=g;b=b+1|0}d=h;e=e+-1|0}if(b|0)c[46639]=267}return}function CT(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;c[46639]=268;a[186581]=1;f=wT()|0;c[e>>2]=b;c[e+4>>2]=f;Pw(1,137577,e)|0;l=d;return}function DT(b){b=b|0;var d=0;d=uH(120)|0;c[d+100>>2]=-1;a[d+88>>0]=-1;IT(d,56296,22,b,138529);return d|0}function ET(a){a=a|0;var c=0;c=uH(104)|0;b[c+80>>1]=1;b[c+82>>1]=1;IT(c,56120,22,a,137883);return c|0}function FT(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+32|0;e=f;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;c[e+28>>2]=0;h[e+16>>3]=-1.0;c[e+24>>2]=d&127;if(b|0)IT(e,56096,3,b,137734);d=c[a+144>>2]|0;e=nb[c[d>>2]&63](d,e,1)|0;l=f;return e|0}function GT(a){a=a|0;c[46629]=0;IT(186516,56088,1,a,137670);return}function HT(a){a=a|0;var b=0;b=uH(40)|0;IT(b,56072,2,a,137616);return b|0}function IT(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;m=o+8|0;while(1){k=c[g>>2]|0;if(!k)break;i=c[g+4>>2]|0;c[m>>2]=k;j=e2(m,e,f,8,102)|0;if(!j){c[n>>2]=k;c[n+4>>2]=h;Pw(0,137622,n)|0;i=1}else{i=lb[c[j+4>>2]&127](b,i)|0;i=(i|(d[186580]|0))&255}a[186580]=i;g=g+8|0}l=o;return}function JT(a,b){a=a|0;b=b|0;return O$(c[a>>2]|0,c[b>>2]|0)|0}function KT(a,b){a=a|0;b=b|0;c[a+36>>2]=n1(b)|0;return 0}function LT(a,b){a=a|0;b=b|0;c[a+32>>2]=n1(b)|0;return 0}function MT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=(I0(a[d>>0]|0)|0)<<24>>24;switch(f|0){case 82:{e=d+1|0;if(!(O$(e,137681)|0)){c[b>>2]=114;e=0}else h=5;break}case 76:{h=6;break}default:{e=d+1|0;h=5}}do if((h|0)==5)if(!(O$(e,137686)|0))h=6;else{if((f|0)!=67?(O$(e,137690)|0)==0:0){c[g>>2]=d;Pw(0,137696,g)|0;e=1;break}c[b>>2]=110;e=0}while(0);if((h|0)==6){c[b>>2]=108;e=0}l=i;return e|0}function NT(a,b){a=a|0;b=b|0;c[a+4>>2]=b;return 0}function OT(a,b){a=a|0;b=b|0;c[a>>2]=b;return 0}function PT(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(QT(b,137763,0,255,d)|0)){h[a+16>>3]=+(c[d>>2]|0);a=0}else a=1;l=e;return a|0}function QT(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+48|0;j=k+24|0;i=k+8|0;h=k;m=k+36|0;g=i1(a,m,10)|0;do if((c[m>>2]|0)!=(a|0)){if((g|0)>(e|0)){c[i>>2]=b;c[i+4>>2]=a;c[i+8>>2]=e;Pw(0,137805,i)|0;a=1;break}if((g|0)<(d|0)){c[j>>2]=b;c[j+4>>2]=a;c[j+8>>2]=d;Pw(0,137844,j)|0;a=1;break}else{c[f>>2]=g;a=0;break}}else{c[h>>2]=b;c[h+4>>2]=a;Pw(0,137774,h)|0;a=1}while(0);l=k;return a|0}function RT(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((I0(a[e>>0]|0)|0)<<24>>24|0){case 76:{if(!(O$(e+1|0,137686)|0)){d=d+36|0;b[d>>1]=b[d>>1]|4;d=0}else g=9;break}case 82:{if(!(O$(e+1|0,137681)|0)){d=d+36|0;b[d>>1]=b[d>>1]|2;d=0}else g=9;break}case 84:{if(!(O$(e+1|0,138481)|0)){d=d+36|0;b[d>>1]=b[d>>1]|6;d=0}else g=9;break}case 67:{if(!(O$(e+1|0,137690)|0))d=0;else g=9;break}default:g=9}if((g|0)==9){c[f>>2]=e;Pw(0,138485,f)|0;d=1}l=h;return d|0}function ST(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((I0(a[e>>0]|0)|0)<<24>>24|0){case 76:{if(!(O$(e+1|0,137686)|0)){d=d+36|0;b[d>>1]=b[d>>1]|512;d=0}else g=7;break}case 82:{if(!(O$(e+1|0,137681)|0)){d=d+36|0;b[d>>1]=b[d>>1]|256;d=0}else g=7;break}case 67:{if(!(O$(e+1|0,137690)|0))d=0;else g=7;break}default:g=7}if((g|0)==7){c[f>>2]=e;Pw(0,138436,f)|0;d=1}l=h;return d|0}function TT(a,b){a=a|0;b=b|0;c[a+20>>2]=n1(b)|0;return 0}function UT(d,e){d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(!(QT(e,138429,0,255,f)|0)){a[d+33>>0]=c[f>>2];d=d+36|0;b[d>>1]=b[d>>1]|32;d=0}else d=1;l=g;return d|0}function VT(d,e){d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(!(QT(e,138417,0,255,f)|0)){a[d+34>>0]=c[f>>2];d=d+36|0;b[d>>1]=b[d>>1]|64;d=0}else d=1;l=g;return d|0}function WT(d,e){d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(!(QT(e,138405,-128,127,f)|0)){a[d+32>>0]=c[f>>2];d=d+36|0;b[d>>1]=b[d>>1]|128;d=0}else d=1;l=g;return d|0}function XT(a,b){a=a|0;b=b|0;c[a+24>>2]=n1(b)|0;return 0}function YT(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=g+4|0;do if(!(QT(d,138360,0,65535,e)|0)){d=c[e>>2]|0;if(!d){Pw(0,138368,f)|0;d=1;break}else{b[a+80>>1]=d;d=0;break}}else d=1;while(0);l=g;return d|0}function ZT(a,e){a=a|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((I0(d[e>>0]|0)|0)<<24>>24|0){case 84:{if(!(O$(e+1|0,138309)|0)){a=a+36|0;b[a>>1]=b[a>>1]|1;a=0}else g=5;break}case 70:{if(!(O$(e+1|0,138313)|0))a=0;else g=5;break}default:g=5}if((g|0)==5){c[f>>2]=e;Pw(0,138318,f)|0;a=1}l=h;return a|0}function _T(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(QT(b,138295,0,360,d)|0)){c[a+28>>2]=c[d>>2]&65535;a=0}else a=1;l=e;return a|0}function $T(a,d){a=a|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(!(QT(d,138288,0,65535,e)|0)){b[a+40>>1]=c[e>>2];a=0}else a=1;l=f;return a|0}function aU(a,b){a=a|0;b=b|0;c[a>>2]=n1(b)|0;return 0}function bU(a,b){a=a|0;b=b|0;c[a+16>>2]=n1(b)|0;return 0}function cU(a,b){a=a|0;b=b|0;c[a+4>>2]=n1(b)|0;return 0}function dU(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=g+4|0;do if(!(QT(d,138243,0,65535,e)|0)){d=c[e>>2]|0;if(!d){Pw(0,138251,f)|0;d=1;break}else{b[a+82>>1]=d;d=0;break}}else d=1;while(0);l=g;return d|0}function eU(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;i=k;h=0;a:while(1){b:while(1){g=e+1|0;e=a[e>>0]|0;if(!(e<<24>>24))break a;e=e<<24>>24;f=(P$(e)|0)+-98|0;switch(f>>>1|f<<31|0){case 5:{j=5;break b}case 9:{f=2048;break b}case 8:{j=6;break b}case 0:{j=7;break b}default:{}}c[i>>2]=e;c[i+4>>2]=e;Pw(0,138190,i)|0;e=g}if((j|0)==5){j=0;f=1024}else if((j|0)==6){j=0;f=4096}else if((j|0)==7){j=0;f=8192}e=g;h=h|f}if(h<<16>>16!=15360){j=d+36|0;b[j>>1]=b[j>>1]|h}l=k;return 0}function fU(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;h=n1(e)|0;g=d+42|0;f=0;e=h;while(1){d=k1(e,138100)|0;if(!d)break;if(((I0(a[d>>0]|0)|0)&255|0)==82){e=d+1|0;if(!(O$(e,138103)|0)){b[g>>1]=b[g>>1]|4;d=f;e=0;f=d;continue}if(!(O$(e,138110)|0)){b[g>>1]=b[g>>1]|2;d=f;e=0;f=d;continue}else{c[i>>2]=d;Pw(0,138116,i)|0;f=1;e=0;continue}}if(!(O$(d,138154)|0)){b[g>>1]=b[g>>1]&-385;d=f;e=0;f=d;continue}if(O$(d,138160)|0?O$(d,138170)|0:0){if(!(O$(d,138176)|0)){b[g>>1]=b[g>>1]|128;d=f;e=0;f=d;continue}if(!(O$(d,138183)|0)){b[g>>1]=b[g>>1]|256;d=f;e=0;f=d;continue}else{c[j>>2]=d;Pw(0,138116,j)|0;f=1;e=0;continue}}b[g>>1]=b[g>>1]|32;d=f;e=0;f=d}D_(h);l=k;return f|0}function gU(a,b){a=a|0;b=b|0;c[a+8>>2]=n1(b)|0;return 0}function hU(a,b){a=a|0;b=b|0;c[a+12>>2]=n1(b)|0;return 0}function iU(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((I0(a[e>>0]|0)|0)<<24>>24|0){case 66:{if(!(O$(e+1|0,138046)|0)){d=d+36|0;b[d>>1]=b[d>>1]|16;d=0}else g=7;break}case 84:{if(!(O$(e+1|0,138052)|0)){d=d+36|0;b[d>>1]=b[d>>1]|8;d=0}else g=7;break}case 77:{if(!(O$(e+1|0,138055)|0))d=0;else g=7;break}default:g=7}if((g|0)==7){c[f>>2]=e;Pw(0,138061,f)|0;d=1}l=h;return d|0}function jU(a,d){a=a|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(!(QT(d,138040,0,65535,e)|0)){b[a+38>>1]=c[e>>2];a=0}else a=1;l=f;return a|0}function kU(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;switch((I0(a[e>>0]|0)|0)<<24>>24|0){case 76:{if(!(O$(e+1|0,137686)|0)){d=d+36|0;b[d>>1]=b[d>>1]|4;d=0}else g=7;break}case 82:{if(!(O$(e+1|0,137681)|0)){d=d+36|0;b[d>>1]=b[d>>1]|2;d=0}else g=7;break}case 67:{if(!(O$(e+1|0,137690)|0))d=0;else g=7;break}default:g=7}if((g|0)==7){c[f>>2]=e;Pw(0,137696,f)|0;d=1}l=h;return d|0}function lU(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(!(QT(d,138638,0,127,e)|0)){a[b+88>>0]=c[e>>2];b=0}else b=1;l=f;return b|0}function mU(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[d>>0]|0)==42){b=b+112|0;a[b>>0]=a[b>>0]|1;b=0}else{c[e>>2]=d;Pw(0,138598,e)|0;b=1}l=f;return b|0}function nU(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[d>>0]|0)==42){b=b+112|0;a[b>>0]=a[b>>0]|2;b=0}else{c[e>>2]=d;Pw(0,138561,e)|0;b=1}l=f;return b|0}function oU(){var b=0;b=(a[186581]|a[186580])<<24>>24;JV(c[46637]|0);Xw(186564);return b|0}function pU(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;c[46639]=0;d=0;a:do{b:do switch(a[186583]|0){case 2:{b=-1;break a}case 0:{a[186583]=1;h=6;b=138650;d=0;break}default:{b=c[46638]|0;if(!(a[b>>0]|0)){a[186583]=2;h=7;b=138657;break b}else{d=qU(b)|0;h=d-b|0;break b}}}while(0);c[46647]=c[46646];c[46649]=c[46648];c[46646]=b;c[46648]=h;e=c[46642]|0;f=e-(c[46641]|0)|0;g=c[46637]|0;if(!f)b=VW(g,b,h,(h|0)==0&1)|0;else{if(e>>>0<(c[46643]|0)>>>0)b=e;else{Uw(186564,1)|0;b=c[46642]|0}a[b>>0]=0;b=c[46641]|0;c[46642]=b;b=VW(g,b,f,0)|0}if(!((b|0)!=0|(a[186581]|0)!=0)){g=eX(cX(c[46637]|0)|0)|0;h=wT()|0;c[i>>2]=g;c[i+4>>2]=h;Pw(1,137493,i)|0;xT();a[186581]=1;c[46639]=268}if(d|0)c[46638]=d;b=c[46639]|0}while((b|0)==0);l=j;return b|0}function qU(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;d=b+1|0;e=a[b>>0]|0;a:do if(e<<24>>24==60){e=a[d>>0]|0;if(e<<24>>24==33)if(!(z$(b+2|0,138665,2)|0)){e=rU(b+4|0)|0;d=e;e=a[e>>0]|0;g=8}else{e=d;g=5}else g=6;b:while(1)if((g|0)==5){d=e;e=a[e>>0]|0;g=6;continue}else if((g|0)==6){switch(e<<24>>24){case 62:case 0:{g=8;continue b}default:{}}e=d+1|0;g=5;continue}else if((g|0)==8)if(e<<24>>24==62){g=10;break}else{g=9;break}if((g|0)==9){Pw(0,138668,f)|0;a[186580]=1;break}else if((g|0)==10){d=d+1|0;break}}else{d=b;b=e;while(1){switch(b<<24>>24){case 60:case 0:break a;case 38:{e=d+1|0;if((a[e>>0]|0)==35)g=15;else e=MM(e,186564)|0;break}default:g=15}if((g|0)==15){g=0;e=c[46642]|0;if(e>>>0>=(c[46643]|0)>>>0){Uw(186564,1)|0;e=c[46642]|0}c[46642]=e+1;a[e>>0]=b;e=d+1|0}d=e;b=a[e>>0]|0}}while(0);l=h;return d|0}function rU(b){b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;f=1;c=b;a:while(1){e=(f|0)==0;d=c;b:while(1){if(e)break a;g=d+1|0;switch(a[d>>0]|0){case 0:{c=g;break a}case 60:{h=5;break b}case 62:{c=-1;break b}default:d=g}}if((h|0)==5){h=0;c=1}f=f+c|0;c=g}d=c+-1|0;do if(a[d>>0]|0){c=c+-3|0;if(c>>>0>=b>>>0?(z$(c,138665,2)|0)==0:0)break;Pw(0,138709,i)|0;a[186580]=1}while(0);l=j;return d|0}function sU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=C_(28)|0;if(!d)d=0;else{e=0;f=0;while(1){if((e|0)>=(b|0))break;r=(c[(c[a+(e<<2)>>2]|0)+4>>2]|0)+f|0;e=e+1|0;f=r}o=d+8|0;c[o>>2]=tU(f<<4)|0;p=d+12|0;c[p>>2]=tU((b<<2)+4|0)|0;e=f<<2;q=d+16|0;c[q>>2]=tU(e)|0;e=tU(e)|0;r=d+20|0;c[r>>2]=e;c[d+4>>2]=f;c[d>>2]=b;f=0;h=0;while(1){c[(c[p>>2]|0)+(h<<2)>>2]=f;if((h|0)>=(b|0))break;j=a+(h<<2)|0;n=c[j>>2]|0;k=c[n+4>>2]|0;l=f+-1|0;g=0;i=f;m=k;while(1){if((g|0)>=(m|0))break;m=(c[o>>2]|0)+(i<<4)|0;e=(c[n>>2]|0)+(g<<4)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];m=i+1|0;c[(c[q>>2]|0)+(i<<2)>>2]=m;e=c[r>>2]|0;c[e+(i<<2)>>2]=i+-1;s=c[j>>2]|0;g=g+1|0;i=m;m=c[s+4>>2]|0;n=s}s=l+k|0;c[(c[q>>2]|0)+(s<<2)>>2]=f;c[e+(f<<2)>>2]=s;f=i;h=h+1|0}tV(d)}return d|0}function tU(a){a=a|0;if(!a)a=0;else a=C_(a)|0;return a|0}function uU(a){a=a|0;var b=0,d=0;D_(c[a+8>>2]|0);D_(c[a+12>>2]|0);D_(c[a+16>>2]|0);D_(c[a+20>>2]|0);d=a+24|0;b=c[d>>2]|0;if(b|0){D_(c[b>>2]|0);D_(c[d>>2]|0)}D_(a);return}function vU(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;m=p+16|0;j=p;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];n=AV(a,d,m)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];o=AV(a,f,m)|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];m=jV(j,d,n,m,f,o,a)|0;d=c[a+4>>2]|0;j=d+1|0;f=1;h=d;while(1){h=c[m+(h<<2)>>2]|0;k=f+1|0;if((h|0)==(j|0))break;else f=k}i=C_(k<<4)|0;h=i+(f<<4)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];a=a+8|0;while(1){d=c[m+(d<<2)>>2]|0;f=f+-1|0;h=i+(f<<4)|0;if((d|0)==(j|0))break;e=(c[a>>2]|0)+(d<<4)|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2]}c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];if(f|0)qa(138727,138734,148,138740);if(n|0)D_(n);if(o|0)D_(o);c[g+4>>2]=k;c[g>>2]=i;D_(m);l=p;return 1}function wU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+48|0;h=j+32|0;g=j+16|0;f=j;i=c[a>>2]|0;d=c[a+4>>2]|0;e=d+-1|0;a=0;while(1){if((a|0)>=(d|0)){a=1;break}m=i+(((e+a|0)%(d|0)|0)<<4)|0;k=i+(a<<4)|0;c[f>>2]=c[m>>2];c[f+4>>2]=c[m+4>>2];c[f+8>>2]=c[m+8>>2];c[f+12>>2]=c[m+12>>2];c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];if((pV(f,g,h)|0)==1){a=0;break}else a=a+1|0}l=j;return a|0}function xU(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;m=u+48|0;k=u+32|0;s=4;j=C_(40)|0;c[j>>2]=0;n=u+16|0;q=u;r=c[d>>2]|0;i=c[d+4>>2]|0;s=D3(186600,1,j|0,s|0)|0;j=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1)d=z;else d=0;while(1){if(d|0){d=-1;break}o=0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];ja(28,n|0,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue};c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];h=e+16|0;o=0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];ja(28,q|0,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue};c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[h+12>>2]=c[q+12>>2];c[46689]=0;o=0;ia(112,4);d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,s|0,j|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;continue}g=c[46690]|0;d=c[46689]|0;c[46689]=d+1;d=g+(d<<4)|0;c[d>>2]=c[r>>2];c[d+4>>2]=c[r+4>>2];c[d+8>>2]=c[r+8>>2];c[d+12>>2]=c[r+12>>2];o=0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];d=fa(1,a|0,b|0,r|0,i|0,k|0,m|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,s|0,j|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1)d=z;else{t=8;break}}if((t|0)==8)if((d|0)==-1)d=-1;else{c[f+4>>2]=c[46689];c[f>>2]=c[46690];d=0}D_(s|0);l=u;return d|0}function yU(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0.0,i=0.0;d=+h[b>>3];e=b+8|0;f=+h[e>>3];i=f*f+d*d;g=+C(+i);if(i>1.0e-06){h[b>>3]=d/g;h[e>>3]=f/g};c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function zU(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[46693]|0)<(a|0)){b=c[46690]|0;if(!b){e=C_(a<<4)|0;c[46690]=e;if(!e){e=c[15686]|0;c[d>>2]=138749;c[d+4>>2]=531;c[d+8>>2]=138884;g1(e,138757,d)|0;bb(186600,1)}}else{d=F_(b,a<<4)|0;c[46690]=d;if(!d){d=c[15686]|0;c[e>>2]=138749;c[e+4>>2]=537;c[e+8>>2]=138902;g1(d,138757,e)|0;bb(186600,1)}}c[46693]=a}l=f;return}function AU(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0.0;R=l;l=l+336|0;J=R+320|0;I=R+304|0;w=R+144|0;q=R+128|0;G=R+112|0;H=R+96|0;Q=R+80|0;A=R+64|0;C=R+48|0;K=R+32|0;L=R+16|0;M=R;x=R+288|0;y=R+272|0;z=R+256|0;B=R+240|0;D=R+224|0;E=R+208|0;N=R+192|0;O=R+176|0;P=R+160|0;i=c[46692]|0;do if((c[46691]|0)<(e|0)){if(!i){i=C_(e*40|0)|0;c[46692]=i;if(!i){i=-1;break}}else{i=F_(i,e*40|0)|0;c[46692]=i;if(!i){i=-1;break}}c[46691]=e;k=6}else k=6;while(0);if((k|0)==6){h[i>>3]=0.0;k=1;j=0.0;while(1){if((k|0)>=(e|0))break;n=d+(k<<4)|0;F=d+(k+-1<<4)|0;c[I>>2]=c[n>>2];c[I+4>>2]=c[n+4>>2];c[I+8>>2]=c[n+8>>2];c[I+12>>2]=c[n+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];v=+BU(I,J)+j;h[i+(k*40|0)>>3]=v;k=k+1|0;j=v}F=e+-1|0;n=i+(F*40|0)|0;k=1;while(1){if((k|0)>=(e|0))break;S=i+(k*40|0)|0;h[S>>3]=+h[S>>3]/+h[n>>3];k=k+1|0}k=0;while(1){if((k|0)>=(e|0))break;S=i+(k*40|0)+8|0;n=i+(k*40|0)|0;v=+CU(+h[n>>3]);c[J>>2]=c[f>>2];c[J+4>>2]=c[f+4>>2];c[J+8>>2]=c[f+8>>2];c[J+12>>2]=c[f+12>>2];DU(x,J,v);c[S>>2]=c[x>>2];c[S+4>>2]=c[x+4>>2];c[S+8>>2]=c[x+8>>2];c[S+12>>2]=c[x+12>>2];S=i+(k*40|0)+24|0;v=+EU(+h[n>>3]);c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];DU(y,J,v);c[S>>2]=c[y>>2];c[S+4>>2]=c[y+4>>2];c[S+8>>2]=c[y+8>>2];c[S+12>>2]=c[y+12>>2];k=k+1|0}c[I>>2]=c[f>>2];c[I+4>>2]=c[f+4>>2];c[I+8>>2]=c[f+8>>2];c[I+12>>2]=c[f+12>>2];c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];FU(d,e,i,I,J,G,A,H,C);c[q>>2]=c[G>>2];c[q+4>>2]=c[G+4>>2];c[q+8>>2]=c[G+8>>2];c[q+12>>2]=c[G+12>>2];c[w>>2]=c[A>>2];c[w+4>>2]=c[A+4>>2];c[w+8>>2]=c[A+8>>2];c[w+12>>2]=c[A+12>>2];c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];if(!(GU(a,b,q,w,I,J,d,e)|0)){c[J>>2]=c[A>>2];c[J+4>>2]=c[A+4>>2];c[J+8>>2]=c[A+8>>2];c[J+12>>2]=c[A+12>>2];DU(z,J,.3333333333333333);c[I>>2]=c[G>>2];c[I+4>>2]=c[G+4>>2];c[I+8>>2]=c[G+8>>2];c[I+12>>2]=c[G+12>>2];c[J>>2]=c[z>>2];c[J+4>>2]=c[z+4>>2];c[J+8>>2]=c[z+8>>2];c[J+12>>2]=c[z+12>>2];HU(B,I,J);v=+h[B>>3];u=+h[B+8>>3];c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];DU(D,J,.3333333333333333);c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];c[J>>2]=c[D>>2];c[J+4>>2]=c[D+4>>2];c[J+8>>2]=c[D+8>>2];c[J+12>>2]=c[D+12>>2];IU(E,I,J);t=+h[E>>3];p=+h[E+8>>3];q=c[46692]|0;r=+h[G>>3];s=+h[H>>3];o=+h[G+8>>3];m=+h[H+8>>3];n=Q+8|0;i=-1;j=-1.0;k=1;while(1){if((k|0)>=(F|0))break;T=+h[q+(k*40|0)>>3];U=+JU(T);V=+CU(T);W=+EU(T);T=+KU(T);h[Q>>3]=V*v+r*U+W*t+s*T;h[n>>3]=W*p+V*u+o*U+m*T;S=d+(k<<4)|0;c[I>>2]=c[Q>>2];c[I+4>>2]=c[Q+4>>2];c[I+8>>2]=c[Q+8>>2];c[I+12>>2]=c[Q+12>>2];c[J>>2]=c[S>>2];c[J+4>>2]=c[S+4>>2];c[J+8>>2]=c[S+8>>2];c[J+12>>2]=c[S+12>>2];T=+BU(I,J);S=T>j;i=S?k:i;j=S?T:j;k=k+1|0}S=d+(i<<4)|0;Q=d+(i+-1<<4)|0;c[I>>2]=c[S>>2];c[I+4>>2]=c[S+4>>2];c[I+8>>2]=c[S+8>>2];c[I+12>>2]=c[S+12>>2];c[J>>2]=c[Q>>2];c[J+4>>2]=c[Q+4>>2];c[J+8>>2]=c[Q+8>>2];c[J+12>>2]=c[Q+12>>2];IU(N,I,J);c[J>>2]=c[N>>2];c[J+4>>2]=c[N+4>>2];c[J+8>>2]=c[N+8>>2];c[J+12>>2]=c[N+12>>2];yU(L,J);Q=i+1|0;N=d+(Q<<4)|0;c[I>>2]=c[N>>2];c[I+4>>2]=c[N+4>>2];c[I+8>>2]=c[N+8>>2];c[I+12>>2]=c[N+12>>2];c[J>>2]=c[S>>2];c[J+4>>2]=c[S+4>>2];c[J+8>>2]=c[S+8>>2];c[J+12>>2]=c[S+12>>2];IU(O,I,J);c[J>>2]=c[O>>2];c[J+4>>2]=c[O+4>>2];c[J+8>>2]=c[O+8>>2];c[J+12>>2]=c[O+12>>2];yU(M,J);c[I>>2]=c[L>>2];c[I+4>>2]=c[L+4>>2];c[I+8>>2]=c[L+8>>2];c[I+12>>2]=c[L+12>>2];c[J>>2]=c[M>>2];c[J+4>>2]=c[M+4>>2];c[J+8>>2]=c[M+8>>2];c[J+12>>2]=c[M+12>>2];HU(P,I,J);c[J>>2]=c[P>>2];c[J+4>>2]=c[P+4>>2];c[J+8>>2]=c[P+8>>2];c[J+12>>2]=c[P+12>>2];yU(K,J);c[I>>2]=c[f>>2];c[I+4>>2]=c[f+4>>2];c[I+8>>2]=c[f+8>>2];c[I+12>>2]=c[f+12>>2];c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];AU(a,b,d,Q,I,J)|0;c[I>>2]=c[K>>2];c[I+4>>2]=c[K+4>>2];c[I+8>>2]=c[K+8>>2];c[I+12>>2]=c[K+12>>2];c[J>>2]=c[g>>2];c[J+4>>2]=c[g+4>>2];c[J+8>>2]=c[g+8>>2];c[J+12>>2]=c[g+12>>2];AU(a,b,S,e-i|0,I,J)|0;i=0}else i=0}l=R;return i|0}function BU(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[b>>3]-+h[a>>3];d=+h[b+8>>3]-+h[a+8>>3];return +(+C(+(d*d+c*c)))}function CU(a){a=+a;var b=0.0;b=1.0-a;return +(b*b*(a*3.0))}function DU(a,b,d){a=a|0;b=b|0;d=+d;var e=0;h[b>>3]=+h[b>>3]*d;e=b+8|0;h[e>>3]=+h[e>>3]*d;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function EU(a){a=+a;return +(a*a*3.0*(1.0-a))}function FU(a,b,d,e,f,g,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0;G=l;l=l+128|0;B=G+112|0;v=G+80|0;u=G;r=G+96|0;s=G+64|0;t=G+48|0;C=G+32|0;D=G+16|0;E=a+(b+-1<<4)|0;q=0;w=0.0;x=0.0;y=0.0;z=0.0;A=0.0;while(1){if((q|0)>=(b|0))break;K=d+(q*40|0)+8|0;c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];H=+QU(v,B)+x;J=d+(q*40|0)+24|0;c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[J>>2];c[B+4>>2]=c[J+4>>2];c[B+8>>2]=c[J+8>>2];c[B+12>>2]=c[J+12>>2];p=+QU(v,B)+A;c[v>>2]=c[J>>2];c[v+4>>2]=c[J+4>>2];c[v+8>>2]=c[J+8>>2];c[v+12>>2]=c[J+12>>2];c[B>>2]=c[J>>2];c[B+4>>2]=c[J+4>>2];c[B+8>>2]=c[J+8>>2];c[B+12>>2]=c[J+12>>2];o=+QU(v,B)+y;L=a+(q<<4)|0;M=d+(q*40|0)|0;I=+RU(+h[M>>3]);c[B>>2]=c[a>>2];c[B+4>>2]=c[a+4>>2];c[B+8>>2]=c[a+8>>2];c[B+12>>2]=c[a+12>>2];DU(s,B,I);I=+SU(+h[M>>3]);c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];DU(t,B,I);c[v>>2]=c[s>>2];c[v+4>>2]=c[s+4>>2];c[v+8>>2]=c[s+8>>2];c[v+12>>2]=c[s+12>>2];c[B>>2]=c[t>>2];c[B+4>>2]=c[t+4>>2];c[B+8>>2]=c[t+8>>2];c[B+12>>2]=c[t+12>>2];HU(r,v,B);c[v>>2]=c[L>>2];c[v+4>>2]=c[L+4>>2];c[v+8>>2]=c[L+8>>2];c[v+12>>2]=c[L+12>>2];c[B>>2]=c[r>>2];c[B+4>>2]=c[r+4>>2];c[B+8>>2]=c[r+8>>2];c[B+12>>2]=c[r+12>>2];IU(u,v,B);c[v>>2]=c[K>>2];c[v+4>>2]=c[K+4>>2];c[v+8>>2]=c[K+8>>2];c[v+12>>2]=c[K+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];I=+QU(v,B)+w;c[v>>2]=c[J>>2];c[v+4>>2]=c[J+4>>2];c[v+8>>2]=c[J+8>>2];c[v+12>>2]=c[J+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];q=q+1|0;w=I;x=H;y=o;z=+QU(v,B)+z;A=p}o=y*x-A*A;p=o>=0.0?o:-o;if(!(p>=1.0e-06?(m=(y*w-A*z)/o,n=(x*z-A*w)/o,!(p<1.0e-06|m<=0.0|n<=0.0)):0))F=6;if((F|0)==6){c[v>>2]=c[a>>2];c[v+4>>2]=c[a+4>>2];c[v+8>>2]=c[a+8>>2];c[v+12>>2]=c[a+12>>2];c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];m=+BU(v,B)*.3333333333333333;n=m};c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];DU(C,B,m);c[i>>2]=c[C>>2];c[i+4>>2]=c[C+4>>2];c[i+8>>2]=c[C+8>>2];c[i+12>>2]=c[C+12>>2];c[j>>2]=c[E>>2];c[j+4>>2]=c[E+4>>2];c[j+8>>2]=c[E+8>>2];c[j+12>>2]=c[E+12>>2];c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];c[B+12>>2]=c[f+12>>2];DU(D,B,n);c[k>>2]=c[D>>2];c[k+4>>2]=c[D+4>>2];c[k+8>>2]=c[D+8>>2];c[k+12>>2]=c[D+12>>2];l=G;return}function GU(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0,w=0.0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,E=0;C=l;l=l+64|0;B=C;z=(j|0)==2;y=+h[d>>3];u=+h[d+8>>3];v=B+8|0;w=+h[e>>3];x=B+16|0;p=+h[e+8>>3];q=B+24|0;r=+h[f>>3];s=+h[g>>3];t=B+32|0;o=+h[f+8>>3];n=+h[g+8>>3];e=B+40|0;f=B+48|0;g=B+56|0;d=1;k=4.0;m=4.0;while(1){h[B>>3]=y;h[v>>3]=u;D=m*.3333333333333333;h[x>>3]=D*w+y;h[q>>3]=D*p+u;D=k*.3333333333333333;h[t>>3]=r-D*s;h[e>>3]=o-D*n;h[f>>3]=r;h[g>>3]=o;if(d?(D=+LU(B,4),D<+LU(i,j)+-.001):0){d=0;break}if(MU(a,b,B)|0){A=5;break}if(m==0.0&k==0.0){A=9;break}E=m>.01;d=0;k=E?k*.5:0.0;m=E?m*.5:0.0}a:do if((A|0)==5){zU((c[46689]|0)+4|0);e=c[46690]|0;d=1;while(1){if((d|0)==4){d=1;break a}E=c[46689]|0;h[e+(E<<4)>>3]=+h[B+(d<<4)>>3];D=+h[B+(d<<4)+8>>3];c[46689]=E+1;h[e+(E<<4)+8>>3]=D;d=d+1|0}}else if((A|0)==9)if(z){zU((c[46689]|0)+4|0);e=c[46690]|0;d=1;while(1){if((d|0)==4){d=1;break a}E=c[46689]|0;h[e+(E<<4)>>3]=+h[B+(d<<4)>>3];D=+h[B+(d<<4)+8>>3];c[46689]=E+1;h[e+(E<<4)+8>>3]=D;d=d+1|0}}else d=0;while(0);l=C;return d|0}function HU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]+ +h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function IU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]-+h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]-+h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function JU(a){a=+a;a=1.0-a;return +(a*a*a)}function KU(a){a=+a;return +(a*a*a)}function LU(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0,f=0.0,g=0;c=0.0;d=1;while(1){if((d|0)>=(b|0))break;g=d+-1|0;e=+h[a+(d<<4)>>3]-+h[a+(g<<4)>>3];f=+h[a+(d<<4)+8>>3]-+h[a+(g<<4)+8>>3];c=+C(+(f*f+e*e))+c;d=d+1|0}return +c}function MU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0;C=l;l=l+64|0;t=C+32|0;u=C;w=u+16|0;y=d+16|0;z=d+32|0;A=d+48|0;B=d+8|0;g=d+24|0;i=d+40|0;j=d+56|0;k=u+8|0;m=u+24|0;f=0;a:while(1){if((f|0)>=(b|0)){e=1;break}n=a+(f<<5)|0;c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];n=a+(f<<5)+16|0;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];n=NU(d,u,t)|0;b:do if((n|0)!=4){o=+h[u>>3];p=+h[k>>3];q=+h[w>>3];r=+h[m>>3];e=0;while(1){if((e|0)>=(n|0))break b;s=+h[t+(e<<3)>>3];if((!(s<1.0e-06|s>.999999)?(x=s*s*s,E=s*3.0,D=1.0-s,s=E*s*D,v=D*D,E=v*E,D=v*D,v=+h[y>>3]*E+ +h[d>>3]*D+ +h[z>>3]*s+ +h[A>>3]*x,x=+h[g>>3]*E+ +h[B>>3]*D+ +h[i>>3]*s+ +h[j>>3]*x,s=v-o,D=x-p,!(D*D+s*s<.001)):0)?(E=v-q,D=x-r,!(D*D+E*E<.001)):0){e=0;break a}e=e+1|0}}while(0);f=f+1|0}l=C;return e|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+96|0;s=v+48|0;t=v+24|0;k=v;u=v+80|0;p=+h[b>>3];g=+h[b+16>>3]-p;q=+h[b+8>>3];j=+h[b+24>>3]-q;c[u>>2]=0;a:do if(!(g==0.0)){j=j/g;m=a+16|0;n=a+32|0;o=a+48|0;OU(+h[a+8>>3]-+h[a>>3]*j,+h[a+24>>3]-+h[m>>3]*j,+h[a+40>>3]-+h[n>>3]*j,+h[a+56>>3]-+h[o>>3]*j,s);h[s>>3]=j*p-q+ +h[s>>3];e=kV(s,t)|0;if((e|0)==4)b=4;else{f=s+8|0;i=s+16|0;k=s+24|0;g=1.0/g;b=0;while(1){if((b|0)>=(e|0))break;j=+h[t+(b<<3)>>3];if(j>=0.0&j<=1.0?(OU(+h[a>>3],+h[m>>3],+h[n>>3],+h[o>>3],s),q=(+h[s>>3]-p+((+h[k>>3]*j+ +h[i>>3])*j+ +h[f>>3])*j)*g,q>=0.0&q<=1.0):0)PU(j,d,u);b=b+1|0}b=c[u>>2]|0}}else{OU(+h[a>>3],+h[a+16>>3],+h[a+32>>3],+h[a+48>>3],s);h[s>>3]=+h[s>>3]-p;r=kV(s,t)|0;if(!(j==0.0)){if((r|0)==4){b=4;break}m=a+8|0;n=a+24|0;o=a+40|0;e=a+56|0;f=s+8|0;i=s+16|0;k=s+24|0;g=1.0/j;b=0;while(1){if((b|0)>=(r|0))break;j=+h[t+(b<<3)>>3];if(j>=0.0&j<=1.0?(OU(+h[m>>3],+h[n>>3],+h[o>>3],+h[e>>3],s),p=(+h[s>>3]-q+((+h[k>>3]*j+ +h[i>>3])*j+ +h[f>>3])*j)*g,p>=0.0&p<=1.0):0)PU(j,d,u);b=b+1|0}b=c[u>>2]|0;break}OU(+h[a+8>>3],+h[a+24>>3],+h[a+40>>3],+h[a+56>>3],s);h[s>>3]=+h[s>>3]-q;i=kV(s,k)|0;b=(i|0)==4;b:do if((r|0)==4){if(b){b=4;break a}else b=0;while(1){if((b|0)>=(i|0))break b;PU(+h[k+(b<<3)>>3],d,u);b=b+1|0}}else{if(b){b=0;while(1){if((b|0)>=(r|0))break b;PU(+h[t+(b<<3)>>3],d,u);b=b+1|0}}else e=0;while(1){if((e|0)>=(r|0))break b;f=t+(e<<3)|0;b=0;while(1){if((b|0)>=(i|0))break;g=+h[f>>3];if(g==+h[k+(b<<3)>>3])PU(g,d,u);b=b+1|0}e=e+1|0}}while(0);b=c[u>>2]|0}while(0);l=v;return b|0}function OU(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=e|0;h[e+24>>3]=d-a+(b-c)*3.0;h[e+16>>3]=(c+a)*3.0-b*6.0;h[e+8>>3]=(b-a)*3.0;h[e>>3]=a;return}function PU(a,b,d){a=+a;b=b|0;d=d|0;var e=0;if(a>=0.0&a<=1.0){e=c[d>>2]|0;h[b+(e<<3)>>3]=a;c[d>>2]=e+1}return}function QU(a,b){a=a|0;b=b|0;return +(+h[b+8>>3]*+h[a+8>>3]+ +h[b>>3]*+h[a>>3])}function RU(a){a=+a;var b=0.0;b=1.0-a;return +(b*b*(b+a*3.0))}function SU(a){a=+a;return +(a*a*((1.0-a)*3.0+a))}function TU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=l;l=l+112|0;E=H+80|0;D=H+64|0;C=H+48|0;G=4;F=C_(40)|0;c[F>>2]=0;w=H+32|0;x=H+16|0;y=H;A=H+96|0;G=D3(186776,1,F|0,G|0)|0;F=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1)e=z;else e=0;a:while(1){if(e|0){e=-2;break}g=a+4|0;o=0;ia(113,c[g>>2]|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}c[46733]=0;c[46734]=0;o=0;ia(114,c[g>>2]<<1|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}m=(c[46736]|0)/2|0;c[46737]=m;c[46738]=m+-1;m=c[g>>2]|0;g=c[a>>2]|0;e=0;f=-1;i=t;while(1){if((e|0)>=(m|0))break;I=+h[g+(e<<4)>>3];v=i>I;u=v?e:f;e=e+1|0;f=u;i=v?I:i}v=g+(f<<4)|0;c[x>>2]=c[v>>2];c[x+4>>2]=c[v+4>>2];c[x+8>>2]=c[v+8>>2];c[x+12>>2]=c[v+12>>2];v=g+(((f|0)==0?m:f)+-1<<4)|0;c[w>>2]=c[v>>2];c[w+4>>2]=c[v+4>>2];c[w+8>>2]=c[v+8>>2];c[w+12>>2]=c[v+12>>2];v=g+(((f|0)==(m+-1|0)?0:f+1|0)<<4)|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];I=+h[x>>3];if((+h[w>>3]==I?I==+h[y>>3]:0)?+h[y+8>>3]>+h[x+8>>3]:0)v=15;else v=12;b:do if((v|0)==12){v=0;o=0;e=ca(33,w|0,x|0,y|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,G|0,F|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((e|0)==1){g=c[46740]|0;e=c[46741]|0;f=0;while(1){if((f|0)>=(m|0))break b;j=c[a>>2]|0;if(!(((f|0)>0?(B=f+-1|0,+h[j+(f<<4)>>3]==+h[j+(B<<4)>>3]):0)?+h[j+(f<<4)+8>>3]==+h[j+(B<<4)+8>>3]:0)){u=c[46733]|0;c[g+(u<<3)>>2]=j+(f<<4);c[g+(u<<3)+4>>2]=g+(((u|0)%(m|0)|0)<<3);c[e+(u<<2)>>2]=g+(u<<3);c[46733]=u+1}f=f+1|0}}else v=15}while(0);c:do if((v|0)==15){v=0;j=c[46740]|0;e=c[46741]|0;g=m;while(1){f=g+-1|0;if((g|0)<=0)break c;k=c[a>>2]|0;if(((g|0)<(m|0)?+h[k+(f<<4)>>3]==+h[k+(g<<4)>>3]:0)?+h[k+(f<<4)+8>>3]==+h[k+(g<<4)+8>>3]:0){g=f;continue}g=c[46733]|0;c[j+(g<<3)>>2]=k+(f<<4);c[j+(g<<3)+4>>2]=j+(((g|0)%(m|0)|0)<<3);c[e+(g<<2)>>2]=j+(g<<3);c[46733]=g+1;g=f}}while(0);o=0;ja(29,e|0,c[46733]|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}j=0;e=c[46734]|0;d:while(1){if((j|0)>=(e|0)){s=0;break}k=j+1|0;g=k;while(1){if((g|0)>=(e|0)){j=k;continue d}o=0;ja(30,j|0,g|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue a}g=g+1|0;e=c[46734]|0}}while(1){if((s|0)>=(e|0))break;o=0;f=aa(103,s|0,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=E3(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}if(f|0)break;s=s+1|0}if((s|0)==(e|0)){e=c[15686]|0;o=0;c[C>>2]=138776;c[C+4>>2]=192;c[C+8>>2]=138787;ca(29,e|0,138757,C|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=41;break}}u=b+16|0;k=0;while(1){if((k|0)>=(e|0))break;o=0;f=aa(103,k|0,u|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=E3(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}if(f|0)break;k=k+1|0}if((k|0)==(e|0)){e=c[15686]|0;o=0;c[D>>2]=138776;c[D+4>>2]=200;c[D+8>>2]=138820;ca(29,e|0,138757,D|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=48;break}}o=0;e=aa(104,s|0,k|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,G|0,F|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue}if(!e){e=c[15686]|0;o=0;c[E>>2]=138776;c[E+4>>2]=207;c[E+8>>2]=138858;ca(29,e|0,138757,E|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}o=0;ia(115,2);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=53;break}}if((s|0)==(k|0)){o=0;ia(115,2);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,G|0,F|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;continue}else{v=56;break}}c[A>>2]=b;c[A+4>>2]=0;f=A+8|0;c[f>>2]=u;c[A+12>>2]=0;o=0;ja(31,1,A|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue}c[46739]=c[46737];q=s;e:while(1){if((q|0)==-1){g=f;e=0;break}r=c[46743]|0;c[r+(q*52|0)>>2]=2;e=0;while(1){if((e|0)>=3){v=65;break}v=c[r+(q*52|0)+4+(e<<4)+12>>2]|0;if(v|0?(c[v>>2]|0)==1:0){v=68;break}e=e+1|0}if((v|0)==65){v=0;if((e|0)==3){e=c[46735]|0;k=c[e+(c[46738]<<2)>>2]|0;o=0;e=ca(33,u|0,c[c[e+(c[46737]<<2)>>2]>>2]|0,c[k>>2]|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=E3(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}j=(e|0)==1;n=j?f:k;j=j?k:f}else v=68}if((v|0)==68){v=0;k=c[r+(q*52|0)+4+(e<<4)>>2]|0;m=c[r+(q*52|0)+4+(e<<4)+4>>2]|0;o=0;e=ca(33,c[k>>2]|0,c[c[r+(q*52|0)+4+(((e+1|0)%3|0)<<4)+4>>2]>>2]|0,c[m>>2]|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){j=E3(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1){e=z;continue a}j=(e|0)==1;n=j?k:m;j=j?m:k}do if((q|0)==(s|0)){o=0;ja(31,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(31,1,n|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}e=0}else{m=c[46735]|0;if((c[m+(c[46737]<<2)>>2]|0)!=(n|0)?(c[m+(c[46738]<<2)>>2]|0)!=(n|0):0){o=0;j=$(34,n|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(32,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(31,1,n|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((j|0)<=(c[46739]|0)){e=0;break}c[46739]=j;e=0;break}o=0;k=$(34,j|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(32,1,k|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}o=0;ja(31,2,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){g=E3(c[e>>2]|0,G|0,F|0)|0;if(!g)bb(e|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;continue a}if((k|0)>=(c[46739]|0)){e=0;break}c[46739]=k;e=0}while(0);while(1){if((e|0)>=3){q=-1;continue e}g=c[r+(q*52|0)+4+(e<<4)+12>>2]|0;if(g|0?(c[g>>2]|0)==1:0)break;e=e+1|0}q=(g-(c[46743]|0)|0)/52|0}while(1){if(!g)break;g=c[g+4>>2]|0;e=e+1|0}o=0;ia(115,e|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){j=E3(c[g>>2]|0,G|0,F|0)|0;if(!j)bb(g|0,p|0);z=p}else j=-1;if((j|0)==1)e=z;else{v=94;break}}if((v|0)==41)e=-1;else if((v|0)==48)e=-1;else if((v|0)==53){c[d+4>>2]=2;e=c[46742]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];F=e+16|0;c[F>>2]=c[u>>2];c[F+4>>2]=c[u+4>>2];c[F+8>>2]=c[u+8>>2];c[F+12>>2]=c[u+12>>2];c[d>>2]=e;e=0}else if((v|0)==56){c[d+4>>2]=2;e=c[46742]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];F=e+16|0;c[F>>2]=c[u>>2];c[F+4>>2]=c[u+4>>2];c[F+8>>2]=c[u+8>>2];c[F+12>>2]=c[u+12>>2];c[d>>2]=e;e=0}else if((v|0)==94){c[d+4>>2]=e;g=c[46742]|0;while(1){e=e+-1|0;if(!f)break;F=g+(e<<4)|0;E=c[f>>2]|0;c[F>>2]=c[E>>2];c[F+4>>2]=c[E+4>>2];c[F+8>>2]=c[E+8>>2];c[F+12>>2]=c[E+12>>2];f=c[f+4>>2]|0}c[d>>2]=g;e=0}D_(G|0);l=H;return e|0}function UU(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+64|0;e=h+48|0;g=h+32|0;f=h+16|0;d=h;if((c[46746]|0)<(a|0)){b=c[46740]|0;if(!b){g=C_(a<<3)|0;c[46740]=g;if(!g){g=c[15686]|0;c[d>>2]=138776;c[d+4>>2]=523;c[d+8>>2]=139026;g1(g,138757,d)|0;bb(186776,1)}g=C_(a<<2)|0;c[46741]=g;if(!g){g=c[15686]|0;c[f>>2]=138776;c[f+4>>2]=527;c[f+8>>2]=139045;g1(g,138757,f)|0;bb(186776,1)}}else{f=F_(b,a<<3)|0;c[46740]=f;if(!f){f=c[15686]|0;c[g>>2]=138776;c[g+4>>2]=533;c[g+8>>2]=139065;g1(f,138757,g)|0;bb(186776,1)}g=F_(c[46741]|0,a<<2)|0;c[46741]=g;if(!g){g=c[15686]|0;c[e>>2]=138776;c[e+4>>2]=539;c[e+8>>2]=139085;g1(g,138757,e)|0;bb(186776,1)}}c[46746]=a}l=h;return}function VU(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[46736]|0)<(a|0)){b=c[46735]|0;if(!b){e=C_(a<<2)|0;c[46735]=e;if(!e){e=c[15686]|0;c[d>>2]=138776;c[d+4>>2]=573;c[d+8>>2]=138981;g1(e,138757,d)|0;bb(186776,1)}}else{d=F_(b,a<<2)|0;c[46735]=d;if(!d){d=c[15686]|0;c[e>>2]=138776;c[e+4>>2]=580;c[e+8>>2]=139003;g1(d,138757,e)|0;bb(186776,1)}}c[46736]=a}l=f;return}function WU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];d=(+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d);return (d>0.0?1:d<0.0?2:3)|0}function XU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a:while(1){if((b|0)>3)e=0;else{b=9;break}while(1){if((e|0)>=(b|0)){b=8;break a}f=e+1|0;d=(f|0)%(b|0)|0;g=(e+2|0)%(b|0)|0;if(!(dV(e,g,a,b)|0))e=f;else break}eV(c[a+(e<<2)>>2]|0,c[a+(d<<2)>>2]|0,c[a+(g<<2)>>2]|0);b=b+-1|0;while(1){if((d|0)>=(b|0))continue a;g=d+1|0;c[a+(d<<2)>>2]=c[a+(g<<2)>>2];d=g}}if((b|0)==8){a=c[15686]|0;c[h>>2]=138776;c[h+4>>2]=324;c[h+8>>2]=138921;g1(a,138757,h)|0}else if((b|0)==9)eV(c[a>>2]|0,c[a+4>>2]|0,c[a+8>>2]|0);l=i;return}function YU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=c[46743]|0;j=i+(a*52|0)|0;k=i+(b*52|0)|0;g=0;while(1){if((g|0)==3)break;l=i+(a*52|0)+4+(g<<4)|0;m=i+(a*52|0)+4+(g<<4)+4|0;n=i+(a*52|0)+4+(g<<4)+12|0;f=0;while(1){if((f|0)==3)break;o=c[c[l>>2]>>2]|0;h=c[c[i+(b*52|0)+4+(f<<4)>>2]>>2]|0;if((o|0)==(h|0)){d=c[c[i+(b*52|0)+4+(f<<4)+4>>2]>>2]|0;if((c[c[m>>2]>>2]|0)==(d|0))e=10;else e=8}else{d=c[c[i+(b*52|0)+4+(f<<4)+4>>2]>>2]|0;e=8}if(((e|0)==8?(e=0,(o|0)==(d|0)):0)?(c[c[m>>2]>>2]|0)==(h|0):0)e=10;if((e|0)==10){c[n>>2]=k;c[i+(b*52|0)+4+(f<<4)+12>>2]=j}f=f+1|0}g=g+1|0}return}function ZU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[46743]|0;d=0;e=0;while(1){if((e|0)==3)break;d=d+((WU(c[c[f+(a*52|0)+4+(e<<4)>>2]>>2]|0,c[c[f+(a*52|0)+4+(e<<4)+4>>2]>>2]|0,b)|0)!=2&1)|0;e=e+1|0}return ((d|0)==3|(d|0)==0)&1|0}function _U(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[46743]|0;e=d+(a*52|0)|0;a:do if(!(c[e>>2]|0)){c[e>>2]=1;if((a|0)==(b|0))d=1;else{f=0;while(1){if((f|0)>=3)break;e=c[d+(a*52|0)+4+(f<<4)+12>>2]|0;if(e){if(_U((e-d|0)/52|0,b)|0){d=1;break a}d=c[46743]|0}f=f+1|0}c[d+(a*52|0)>>2]=0;d=0}}else d=0;while(0);return d|0}function $U(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[46744]|0)<(a|0)){b=c[46742]|0;if(!b){e=C_(a<<4)|0;c[46742]=e;if(!e){e=c[15686]|0;c[d>>2]=138776;c[d+4>>2]=593;c[d+8>>2]=138884;g1(e,138757,d)|0;bb(186776,1)}}else{d=F_(b,a<<4)|0;c[46742]=d;if(!d){d=c[15686]|0;c[e>>2]=138776;c[e+4>>2]=599;c[e+8>>2]=138902;g1(d,138757,e)|0;bb(186776,1)}}c[46744]=a}l=f;return}function aV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[46738]|0;e=c[46737]|0;f=(d|0)>=(e|0);if((a|0)==1)if(f){c[b+4>>2]=c[(c[46735]|0)+(e<<2)>>2];a=186948;d=-1}else{a=186948;d=-1}else if(f){c[b+4>>2]=c[(c[46735]|0)+(d<<2)>>2];a=186952;d=1}else{a=186952;d=1}f=(c[a>>2]|0)+d|0;c[a>>2]=f;c[(c[46735]|0)+(f<<2)>>2]=b;return}function bV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[46739]|0;g=c[46735]|0;b=c[46737]|0;while(1){if((b|0)>=(f|0)){e=4;break}d=b+1|0;if((WU(c[c[g+(d<<2)>>2]>>2]|0,c[c[g+(b<<2)>>2]>>2]|0,c[a>>2]|0)|0)==1)break;else b=d}a:do if((e|0)==4){b=c[46738]|0;while(1){if((b|0)<=(f|0)){b=f;break a}d=b+-1|0;if((WU(c[c[g+(d<<2)>>2]>>2]|0,c[c[g+(b<<2)>>2]>>2]|0,c[a>>2]|0)|0)==2)break;else b=d}}while(0);return b|0}function cV(a,b){a=a|0;b=b|0;c[((a|0)==1?186952:186948)>>2]=b;return}function dV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=c[c[d+(((a+-1+e|0)%(e|0)|0)<<2)>>2]>>2]|0;i=c[c[d+(a<<2)>>2]>>2]|0;g=c[c[d+(((a+1|0)%(e|0)|0)<<2)>>2]>>2]|0;k=(WU(f,i,g)|0)==1;j=c[c[d+(b<<2)>>2]>>2]|0;if(k)if((WU(i,j,f)|0)==1){f=WU(j,i,g)|0;g=1;h=5}else f=0;else{f=WU(i,j,g)|0;g=2;h=5}a:do if((h|0)==5)if((f|0)==(g|0)){f=0;while(1){if((f|0)>=(e|0)){f=1;break a}g=f;f=f+1|0;h=(f|0)%(e|0)|0;if((h|0)==(b|0)|((g|0)==(b|0)|((g|0)==(a|0)|(h|0)==(a|0))))continue;if(gV(i,j,c[c[d+(g<<2)>>2]>>2]|0,c[c[d+(h<<2)>>2]>>2]|0)|0){f=0;break}}}else f=0;while(0);return f|0}function eV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[46734]|0;f=c[46745]|0;if((e|0)<(f|0))h=e;else{fV(f+20|0);h=c[46734]|0}g=c[46743]|0;c[46734]=h+1;f=g+(h*52|0)|0;c[f>>2]=0;c[g+(h*52|0)+4>>2]=a;c[g+(h*52|0)+8>>2]=b;c[g+(h*52|0)+16>>2]=0;c[g+(h*52|0)+20>>2]=b;c[g+(h*52|0)+24>>2]=d;c[g+(h*52|0)+32>>2]=0;c[g+(h*52|0)+36>>2]=d;c[g+(h*52|0)+40>>2]=a;c[g+(h*52|0)+48>>2]=0;e=0;while(1){if((e|0)==3)break;c[g+(h*52|0)+4+(e<<4)+8>>2]=f;e=e+1|0}return}function fV(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f+16|0;d=f;if((c[46745]|0)<(a|0)){b=c[46743]|0;if(!b){e=C_(a*52|0)|0;c[46743]=e;if(!e){e=c[15686]|0;c[d>>2]=138776;c[d+4>>2]=552;c[d+8>>2]=138942;g1(e,138757,d)|0;bb(186776,1)}}else{d=F_(b,a*52|0)|0;c[46743]=d;if(!d){d=c[15686]|0;c[e>>2]=138776;c[e+4>>2]=558;c[e+8>>2]=138961;g1(d,138757,e)|0;bb(186776,1)}}c[46745]=a}l=f;return}function gV(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;f=WU(a,b,c)|0;if((((f|0)!=3?(g=WU(a,b,d)|0,(g|0)!=3):0)?(h=WU(c,d,a)|0,(h|0)!=3):0)?(e=WU(c,d,b)|0,(e|0)!=3):0)return ((f|0)==1^(g|0)==1)&((h|0)==1^(e|0)==1)&1|0;if(((hV(a,b,c)|0)==0?(hV(a,b,d)|0)==0:0)?(hV(c,d,a)|0)==0:0)return (hV(c,d,b)|0)!=0|0;return 1}function hV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;e=+h[a>>3];g=+h[b>>3]-e;f=+h[a+8>>3];d=+h[b+8>>3]-f;e=+h[c>>3]-e;f=+h[c+8>>3]-f;if((WU(a,b,c)|0)==3?f*d+e*g>=0.0:0)a=f*f+e*e<=d*d+g*g&1;else a=0;return a|0}function iV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;m=C_(d<<2)|0;n=C_((d<<3)+8|0)|0;o=n+8|0;f=0;while(1){if((f|0)>=(d|0))break;c[m+(f<<2)>>2]=-1;h[o+(f<<3)>>3]=-2147483647.0;f=f+1|0}h[n>>3]=-2147483648.0;a:while(1){if((a|0)==(b|0))break;l=o+(a<<3)|0;j=+h[l>>3];h[l>>3]=j==-2147483647.0?0.0:-j;k=0;f=-1;while(1){if((k|0)>=(d|0)){a=f;continue a}i=o+(k<<3)|0;g=+h[i>>3];if(g<0.0){q=(a|0)<(k|0);p=+h[(c[e+((q?k:a)<<2)>>2]|0)+((q?a:k)<<3)>>3];j=-(p+ +h[l>>3]);if(p!=0.0&g<j){h[i>>3]=j;c[m+(k<<2)>>2]=a;g=j}f=g>+h[o+(f<<3)>>3]?k:f}k=k+1|0}}D_(n);return m|0}function jV(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;j=l;l=l+32|0;k=j+16|0;m=j;i=c[h+4>>2]|0;c[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];if(!(CV(m,b,k,f,h)|0)){a=c[h+24>>2]|0;c[a+(i<<2)>>2]=g;m=i+1|0;c[a+(m<<2)>>2]=d;a=iV(m,i,i+2|0,a)|0}else{a=C_((i<<2)+8|0)|0;m=i+1|0;c[a+(i<<2)>>2]=m;c[a+(m<<2)>>2]=-1}l=j;return a|0}function kV(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;d=+h[a+24>>3];a:do if(d<1.0e-07&d>-1.0e-07)a=lV(a,b)|0;else{g=+h[a+16>>3]/(d*3.0);f=+h[a+8>>3]/d;e=g*g;d=g*2.0*e-g*f+ +h[a>>3]/d;e=f*.3333333333333333-e;e=e*e*4.0*e;f=d*d+e;if(!(f<0.0)){i=(+C(+f)-d)*.5;e=+n$(i);d=+n$(-d-i)+e;h[b>>3]=d;if(f>0.0)a=1;else{d=d*-.5;h[b+16>>3]=d;a=1;c=7}}else{i=+K(+(+C(+-f)),+-d);d=+n$(+C(+-e)*.5)*2.0;h[b>>3]=d*+E(+(i*.3333333333333333));h[b+8>>3]=+E(+((i+6.283185307179586)*.3333333333333333))*d;d=+E(+((i+-6.283185307179586)*.3333333333333333))*d;a=2;c=7}if((c|0)==7){h[b+(a<<3)>>3]=d;a=3}c=0;while(1){if((c|0)>=(a|0))break a;j=b+(c<<3)|0;h[j>>3]=+h[j>>3]-g;c=c+1|0}}while(0);return a|0}function lV(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+16>>3];do if(!(c<1.0e-07&c>-1.0e-07)){d=+h[a+8>>3]/(c*2.0);c=d*d-+h[a>>3]/c;if(!(c<0.0))if(c==0.0){h[b>>3]=-d;a=1;break}else{c=+C(+c)-d;h[b>>3]=c;h[b+8>>3]=d*-2.0-c;a=2;break}else a=0}else a=mV(a,b)|0;while(0);return a|0}function mV(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a+8>>3];c=+h[a>>3];if(d<1.0e-07&d>-1.0e-07)a=c<1.0e-07&c>-1.0e-07?4:0;else{h[b>>3]=-c/d;a=1}return a|0}function nV(a){a=a|0;D_(c[a>>2]|0);D_(a);return}function oV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=c[a+4>>2]|0;i=(e*3|0)+-2|0;d=c[46748]|0;if((i|0)>(c[46747]|0)){if(!d)d=C_(i<<4)|0;else d=F_(d,i<<4)|0;c[46748]=d;c[46747]=i;h=d;g=d}else{h=d;g=d}f=c[a>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];G3(h+16|0,f|0,16)|0;e=e+-1|0;d=1;a=2;while(1){if((d|0)>=(e|0))break;j=h+(a+2<<4)|0;k=h+(a+1<<4)|0;m=h+(a<<4)|0;l=f+(d<<4)|0;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];G3(k|0,l|0,16)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];d=d+1|0;a=a+3|0}l=h+(a<<4)|0;m=f+(d<<4)|0;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];c[l+12>>2]=c[m+12>>2];G3(h+(a+1<<4)|0,m|0,16)|0;c[b+4>>2]=i;c[b>>2]=g;return}function pV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];d=(+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d);return (d>.0001?1:(d<-.0001)<<31>>31)|0}function qV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;e=+h[a>>3];f=+h[b>>3];if(e!=f){d=+h[c>>3];if(!(e<d&d<f))if(f<d)a=d<e;else a=0;else a=1}else{f=+h[a+8>>3];e=+h[c+8>>3];d=+h[b+8>>3];if(!(f<e&e<d))if(d<e)a=e<f;else a=0;else a=1}return a&1|0}function rV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+48|0;i=m+32|0;h=m+16|0;g=m;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];j=pV(g,h,i)|0;if((j|0)==0?(c[g>>2]=c[a>>2],c[g+4>>2]=c[a+4>>2],c[g+8>>2]=c[a+8>>2],c[g+12>>2]=c[a+12>>2],c[h>>2]=c[b>>2],c[h+4>>2]=c[b+4>>2],c[h+8>>2]=c[b+8>>2],c[h+12>>2]=c[b+12>>2],c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],(qV(g,h,i)|0)!=0):0)f=1;else k=3;do if((k|0)==3){c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];f=pV(g,h,i)|0;if((f|0)==0?(c[g>>2]=c[a>>2],c[g+4>>2]=c[a+4>>2],c[g+8>>2]=c[a+8>>2],c[g+12>>2]=c[a+12>>2],c[h>>2]=c[b>>2],c[h+4>>2]=c[b+4>>2],c[h+8>>2]=c[b+8>>2],c[h+12>>2]=c[b+12>>2],c[i>>2]=c[e>>2],c[i+4>>2]=c[e+4>>2],c[i+8>>2]=c[e+8>>2],c[i+12>>2]=c[e+12>>2],qV(g,h,i)|0):0){f=1;break};c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[i>>2]=c[a>>2];c[i+4>>2]=c[a+4>>2];c[i+8>>2]=c[a+8>>2];c[i+12>>2]=c[a+12>>2];a=pV(g,h,i)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];k=(O(f,j)|0)<0;f=(O(pV(g,h,i)|0,a)|0)>>>31;f=k?f:0}while(0);l=m;return f|0}function sV(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(d*d+c*c)}function tV(a){a=a|0;c[a+24>>2]=uV(c[a+4>>2]|0)|0;vV(a);return}function uV(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+2|0;f=C_(e<<2)|0;b=E_(O(a,a)|0,8)|0;d=0;while(1){if((d|0)>=(a|0))break;c[f+(d<<2)>>2]=b;b=b+(a<<3)|0;d=d+1|0}while(1){if((a|0)>=(e|0))break;c[f+(a<<2)>>2]=0;a=a+1|0}return f|0}function vV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;p=l;l=l+32|0;i=p+16|0;g=p;j=c[a+4>>2]|0;m=c[a+8>>2]|0;n=c[a+16>>2]|0;o=c[a+20>>2]|0;d=c[a+24>>2]|0;b=0;while(1){if((b|0)>=(j|0))break;q=c[o+(b<<2)>>2]|0;e=m+(b<<4)|0;f=m+(q<<4)|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];r=+wV(g,i);f=c[d+(b<<2)>>2]|0;h[f+(q<<3)>>3]=r;h[(c[d+(q<<2)>>2]|0)+(b<<3)>>3]=r;a=b+-1|0;a=(q|0)==(a|0)?b+-2|0:a;while(1){if((a|0)<=-1)break;if((xV(b,a,m,n,o)|0?xV(a,b,m,n,o)|0:0)?(k=m+(a<<4)|0,c[g>>2]=c[e>>2],c[g+4>>2]=c[e+4>>2],c[g+8>>2]=c[e+8>>2],c[g+12>>2]=c[e+12>>2],c[i>>2]=c[k>>2],c[i+4>>2]=c[k+4>>2],c[i+8>>2]=c[k+8>>2],c[i+12>>2]=c[k+12>>2],yV(g,i,j,j,j,m,n)|0):0){c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];r=+wV(g,i);h[f+(a<<3)>>3]=r;h[(c[d+(a<<2)>>2]|0)+(b<<3)>>3]=r}a=a+-1|0}b=b+1|0}l=p;return}function wV(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0;e=l;l=l+32|0;f=e+16|0;g=e;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];d=+C(+(+sV(g,f)));l=e;return +d}function xV(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;h=g+48|0;i=g+32|0;j=g+16|0;k=g;n=d+(c[f+(a<<2)>>2]<<4)|0;m=d+(a<<4)|0;e=d+(c[e+(a<<2)>>2]<<4)|0;f=d+(b<<4)|0;c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];f=zV(k,j,i,h)|0;l=g;return f|0}function yV(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+64|0;n=p+48|0;m=p+32|0;k=p+16|0;j=p;i=0;while(1){if((i|0)>=(d|0)){o=4;break}r=g+(i<<4)|0;q=g+(c[h+(i<<2)>>2]<<4)|0;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[m>>2]=c[r>>2];c[m+4>>2]=c[r+4>>2];c[m+8>>2]=c[r+8>>2];c[m+12>>2]=c[r+12>>2];c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];c[n+12>>2]=c[q+12>>2];if(!(rV(j,k,m,n)|0))i=i+1|0;else{e=0;break}}a:do if((o|0)==4)while(1){if((e|0)>=(f|0)){e=1;break a}q=g+(e<<4)|0;r=g+(c[h+(e<<2)>>2]<<4)|0;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];c[m+12>>2]=c[q+12>>2];c[n>>2]=c[r>>2];c[n+4>>2]=c[r+4>>2];c[n+8>>2]=c[r+8>>2];c[n+12>>2]=c[r+12>>2];if(!(rV(j,k,m,n)|0)){e=e+1|0;o=4}else{e=0;break}}while(0);l=p;return e|0}function zV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=l;l=l+48|0;h=g+32|0;i=g+16|0;j=g;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[i>>2]=c[a>>2];c[i+4>>2]=c[a+4>>2];c[i+8>>2]=c[a+8>>2];c[i+12>>2]=c[a+12>>2];c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];f=pV(j,i,h)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];e=pV(j,i,h)|0;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];d=(pV(j,i,h)|0)>0;l=g;return (d?e|f:e&f)>>>31^1|0}function AV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=l;l=l+80|0;j=s+64|0;i=s+48|0;g=s+32|0;k=s+16|0;o=s;p=c[a+4>>2]|0;q=c[a+8>>2]|0;r=c[a+16>>2]|0;m=c[a+20>>2]|0;n=C_((p<<3)+16|0)|0;if((b|0)==-2222){c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];b=BV(a,j)|0}if((b|0)>-1){a=c[a+12>>2]|0;f=c[a+(b+1<<2)>>2]|0;a=c[a+(b<<2)>>2]|0}else{f=p;a=p}b=0;while(1){if((b|0)>=(a|0)){b=a;break}u=q+(b<<4)|0;c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];c[o+8>>2]=c[u+8>>2];c[o+12>>2]=c[u+12>>2];u=q+(c[m+(b<<2)>>2]<<4)|0;t=q+(c[r+(b<<2)>>2]<<4)|0;c[k>>2]=c[u>>2];c[k+4>>2]=c[u+4>>2];c[k+8>>2]=c[u+8>>2];c[k+12>>2]=c[u+12>>2];c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];if((zV(k,g,i,j)|0)!=0?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[j>>2]=c[o>>2],c[j+4>>2]=c[o+4>>2],c[j+8>>2]=c[o+8>>2],c[j+12>>2]=c[o+12>>2],(yV(i,j,a,f,p,q,r)|0)!=0):0){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[o>>2];c[j+4>>2]=c[o+4>>2];c[j+8>>2]=c[o+8>>2];c[j+12>>2]=c[o+12>>2];e=+wV(i,j)}else e=0.0;h[n+(b<<3)>>3]=e;b=b+1|0}while(1){if((b|0)>=(f|0)){b=f;break}h[n+(b<<3)>>3]=0.0;b=b+1|0}while(1){if((b|0)>=(p|0))break;t=q+(b<<4)|0;c[o>>2]=c[t>>2];c[o+4>>2]=c[t+4>>2];c[o+8>>2]=c[t+8>>2];c[o+12>>2]=c[t+12>>2];t=q+(c[m+(b<<2)>>2]<<4)|0;u=q+(c[r+(b<<2)>>2]<<4)|0;c[k>>2]=c[t>>2];c[k+4>>2]=c[t+4>>2];c[k+8>>2]=c[t+8>>2];c[k+12>>2]=c[t+12>>2];c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];if((zV(k,g,i,j)|0)!=0?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[j>>2]=c[o>>2],c[j+4>>2]=c[o+4>>2],c[j+8>>2]=c[o+8>>2],c[j+12>>2]=c[o+12>>2],(yV(i,j,a,f,p,q,r)|0)!=0):0){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[o>>2];c[j+4>>2]=c[o+4>>2];c[j+8>>2]=c[o+8>>2];c[j+12>>2]=c[o+12>>2];e=+wV(i,j)}else e=0.0;h[n+(b<<3)>>3]=e;b=b+1|0}h[n+(p<<3)>>3]=0.0;h[n+(p+1<<3)>>3]=0.0;l=s;return n|0}function BV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;f=m+8|0;e=m;h=m+24|0;i=a+8|0;j=a+12|0;k=h+4|0;d=0;while(1){if((d|0)>=(c[a>>2]|0)){d=-1111;break}o=c[j>>2]|0;n=c[o+(d<<2)>>2]|0;c[h>>2]=(c[i>>2]|0)+(n<<4);g=d+1|0;c[k>>2]=(c[o+(g<<2)>>2]|0)-n;c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];if(!(wU(e,f)|0))d=g;else break}l=m;return d|0}function CV(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+64|0;n=t+48|0;m=t+32|0;p=t+16|0;o=t;r=c[f+4>>2]|0;s=c[f+8>>2]|0;q=c[f+16>>2]|0;g=(e|0)<0;do if((b|0)<0)if(g){g=0;i=0;f=0;h=0}else{b=c[f+12>>2]|0;f=0;h=0;i=e;j=b;b=b+(e<<2)|0;k=9}else{if(g){k=c[f+12>>2]|0;f=0;h=0;i=b;j=k;b=k+(b<<2)|0;k=9;break}g=c[f+12>>2]|0;if((b|0)>(e|0)){f=c[g+(e+1<<2)>>2]|0;h=c[g+(e<<2)>>2]|0;i=b;j=g;b=g+(b<<2)|0;k=9;break}else{f=c[g+(b+1<<2)>>2]|0;h=c[g+(b<<2)>>2]|0;i=e;j=g;b=g+(e<<2)|0;k=9;break}}while(0);if((k|0)==9){g=c[j+(i+1<<2)>>2]|0;i=c[b>>2]|0}b=0;while(1){if((b|0)>=(h|0)){k=13;break}j=s+(b<<4)|0;e=s+(c[q+(b<<2)>>2]<<4)|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];c[m+12>>2]=c[j+12>>2];c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];if(!(rV(o,p,m,n)|0))b=b+1|0;else{g=0;break}}a:do if((k|0)==13){while(1){if((f|0)>=(i|0))break;e=s+(f<<4)|0;k=s+(c[q+(f<<2)>>2]<<4)|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];if(!(rV(o,p,m,n)|0)){f=f+1|0;k=13}else{g=0;break a}}while(1){if((g|0)>=(r|0)){g=1;break a}e=s+(g<<4)|0;k=s+(c[q+(g<<2)>>2]<<4)|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];if(!(rV(o,p,m,n)|0))g=g+1|0;else{g=0;break}}}while(0);l=t;return g|0}function DV(a){a=a|0;return EV(a,0,0)|0}function EV(a,b,c){a=a|0;b=b|0;c=c|0;return FV(a,b,c,0)|0}function FV(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;if(!d){g=C_(496)|0;if(!g)g=0;else{c[g+12>>2]=35;c[g+16>>2]=105;c[g+20>>2]=103;d=35;h=6}}else{g=kb[c[d>>2]&63](496)|0;if(!g)g=0;else{h=c[d>>2]|0;c[g+12>>2]=h;c[g+16>>2]=c[d+4>>2];c[g+20>>2]=c[d+8>>2];d=h;h=6}}do if((h|0)==6){c[g+8>>2]=0;c[g+32>>2]=0;c[g+376>>2]=16;j=g+12|0;i=kb[d&63](256)|0;d=g+388|0;c[d>>2]=i;if(!i){tb[c[g+20>>2]&127](g);g=0;break}h=kb[c[j>>2]&63](1024)|0;i=g+44|0;c[i>>2]=h;if(!h){e=g+20|0;tb[c[e>>2]&127](c[d>>2]|0);tb[c[e>>2]&127](g);g=0;break}c[g+48>>2]=h+1024;if(!f){f=GV(j)|0;c[g+352>>2]=f;if(!f){e=g+20|0;tb[c[e>>2]&127](c[i>>2]|0);tb[c[e>>2]&127](c[d>>2]|0);tb[c[e>>2]&127](g);g=0;break}}else c[g+352>>2]=f;c[g+372>>2]=0;c[g+364>>2]=0;c[g+300>>2]=0;c[g+464>>2]=0;c[g+460>>2]=0;c[g+124>>2]=0;c[g+244>>2]=0;d=g+468|0;a[d>>0]=33;h=g+232|0;a[h>>0]=0;a[g+233>>0]=0;c[g+392>>2]=0;c[g+396>>2]=0;a[g+400>>0]=0;f=g+228|0;c[f>>2]=0;HV(g+412|0,j);HV(g+436|0,j);IV(g,b);if(b|0?(c[f>>2]|0)==0:0){JV(g);g=0;break}if(!e){c[g+224>>2]=TX()|0;break}else{a[h>>0]=1;c[g+224>>2]=xZ()|0;a[d>>0]=a[e>>0]|0;break}}while(0);return g|0}function GV(b){b=b|0;var d=0;d=kb[c[b>>2]&63](188)|0;if(d|0){HV(d+80|0,b);HV(d+104|0,b);QW(d,b);QW(d+20|0,b);QW(d+40|0,b);QW(d+60|0,b);a[d+131>>0]=0;QW(d+132|0,b);c[d+152>>2]=0;c[d+156>>2]=0;a[d+160>>0]=0;b=d+164|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;a[d+128>>0]=1;a[d+129>>0]=0;a[d+130>>0]=0}return d|0}function HV(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=b;return}function IV(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;c[d+276>>2]=56;EZ(d+252|0);if(e|0)c[d+228>>2]=RV(e,d+12|0)|0;c[d+356>>2]=0;HY(d+148|0,d+144|0,0)|0;c[d>>2]=0;c[d+4>>2]=0;e=d+116|0;g=d+52|0;h=g+64|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=d;c[d+120>>2]=0;e=d+128|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;e=c[d+8>>2]|0;c[d+24>>2]=e;c[d+28>>2]=e;c[d+36>>2]=0;c[d+40>>2]=0;e=d+312|0;g=d+404|0;c[g>>2]=0;c[g+4>>2]=0;g=d+280|0;f=d+304|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;g=e;h=g+36|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));b[e+36>>1]=0;a[f>>0]=1;c[d+308>>2]=0;c[d+360>>2]=0;c[d+368>>2]=0;c[d+380>>2]=0;c[d+236>>2]=0;c[d+248>>2]=0;c[d+240>>2]=0;c[d+472>>2]=0;c[d+476>>2]=0;a[d+484>>0]=0;a[d+485>>0]=0;c[d+488>>2]=0;c[d+492>>2]=0;return}function JV(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;if(b|0){e=b+364|0;g=b+20|0;d=c[b+360>>2]|0;while(1){if(!d){d=c[e>>2]|0;if(!d)break;c[e>>2]=0}h=c[d>>2]|0;tb[c[g>>2]&127](c[d+36>>2]|0);KV(c[d+44>>2]|0,b);tb[c[g>>2]&127](d);d=h}e=b+300|0;d=c[b+296>>2]|0;while(1){if(!d){d=c[e>>2]|0;if(!d)break;c[e>>2]=0}h=c[d+8>>2]|0;tb[c[g>>2]&127](d);d=h}KV(c[b+372>>2]|0,b);KV(c[b+368>>2]|0,b);LV(b+412|0);LV(b+436|0);d=b+12|0;tb[c[g>>2]&127](c[b+228>>2]|0);if((a[b+484>>0]|0)==0?(f=c[b+352>>2]|0,f|0):0)MV(f,(c[b+472>>2]|0)==0&1,d);tb[c[g>>2]&127](c[b+388>>2]|0);tb[c[g>>2]&127](c[b+460>>2]|0);tb[c[g>>2]&127](c[b+8>>2]|0);tb[c[g>>2]&127](c[b+44>>2]|0);tb[c[g>>2]&127](c[b+392>>2]|0);tb[c[g>>2]&127](c[b+236>>2]|0);d=c[b+248>>2]|0;if(d|0)tb[d&127](c[b+240>>2]|0);tb[c[g>>2]&127](b)}return}function KV(a,b){a=a|0;b=b|0;var d=0;b=b+20|0;while(1){if(!a)break;d=c[a+4>>2]|0;tb[c[b>>2]&127](c[a+16>>2]|0);tb[c[b>>2]&127](a);a=d}return}function LV(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;b=c[a>>2]|0;while(1){if(!b)break;e=c[b>>2]|0;tb[c[(c[d>>2]|0)+8>>2]&127](b);b=e}b=c[a+4>>2]|0;while(1){if(!b)break;e=c[b>>2]|0;tb[c[(c[d>>2]|0)+8>>2]&127](b);b=e}return}function MV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;g=a+20|0;NV(f,g);d=d+8|0;while(1){e=OV(f)|0;if(!e)break;if(!(c[e+16>>2]|0))continue;tb[c[d>>2]&127](c[e+20>>2]|0)}PV(a);PV(a+132|0);PV(g);PV(a+40|0);PV(a+60|0);LV(a+80|0);LV(a+104|0);if(b<<24>>24){tb[c[d>>2]&127](c[a+184>>2]|0);tb[c[d>>2]&127](c[a+164>>2]|0)}tb[c[d>>2]&127](a);l=h;return}function NV(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=d;c[a+4>>2]=d+(c[b+8>>2]<<2);return}function OV(a){a=a|0;var b=0,d=0,e=0;d=c[a+4>>2]|0;e=c[a>>2]|0;do{if((e|0)==(d|0)){b=0;break}b=e;e=e+4|0;c[a>>2]=e;b=c[b>>2]|0}while(!(b|0));return b|0}function PV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=a+8|0;e=a+16|0;b=0;while(1){f=c[(c[e>>2]|0)+8>>2]|0;g=c[a>>2]|0;if(b>>>0>=(c[d>>2]|0)>>>0)break;tb[f&127](c[g+(b<<2)>>2]|0);b=b+1|0}tb[f&127](g);return}function QV(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=SV(a)|0;if(!f){c[a+276>>2]=57;f=TV(a,b,d,e)|0}return f|0}function RV(b,d){b=b|0;d=d|0;var e=0,f=0;e=0;do{f=e;e=e+1|0}while((a[b+f>>0]|0)!=0);d=kb[c[d>>2]&63](e)|0;if(!d)d=0;else F3(d|0,b|0,e|0)|0;return d|0}function SV(b){b=b|0;var d=0;d=b+228|0;if(!(nb[(a[b+232>>0]<<24>>24?35:34)&63](b+148|0,b+144|0,c[d>>2]|0)|0))b=PW(b,c[d>>2]|0)|0;else b=0;return b|0}function TV(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g;c[h>>2]=d;j=b+144|0;i=c[j>>2]|0;i=ob[c[i>>2]&127](i,d,e,h)|0;f=UV(b,c[j>>2]|0,d,e,i,c[h>>2]|0,f,(a[b+480>>0]|0)==0&1)|0;l=g;return f|0}function UV(b,e,f,g,h,i,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;Ga=l;l=l+16|0;Da=Ga;c[Da>>2]=i;r=c[b+352>>2]|0;s=b+144|0;if((c[s>>2]|0)==(e|0)){p=b+284|0;q=b+288|0;na=b+296|0}else{na=b+296|0;q=c[na>>2]|0;p=q;q=q+4|0}t=k<<24>>24!=0;pa=b+252|0;u=b+80|0;v=b+476|0;w=b+84|0;x=b+320|0;y=b+412|0;z=b+316|0;A=b+424|0;B=b+428|0;C=b+324|0;ra=b+4|0;D=b+485|0;E=r+132|0;F=b+312|0;ta=r+129|0;G=r+128|0;H=r+80|0;I=r+92|0;J=r+96|0;K=b+136|0;L=b+88|0;M=b+488|0;va=b+112|0;wa=r+131|0;xa=b+116|0;ya=r+130|0;za=b+108|0;Aa=b+356|0;N=b+340|0;O=b+132|0;P=b+344|0;Q=b+348|0;R=b+328|0;S=b+349|0;T=b+420|0;U=r+120|0;V=r+116|0;W=b+92|0;X=b+472|0;Y=b+336|0;Z=b+332|0;_=b+96|0;$=b+256|0;aa=b+464|0;ba=b+460|0;ca=r+160|0;da=r+184|0;ea=r+180|0;fa=r+164|0;ga=b+128|0;ha=b+12|0;ia=b+16|0;ja=b+268|0;ka=b+120|0;la=r+176|0;ma=r+168|0;o=e;n=f;e=h;a:while(1){c[p>>2]=n;f=c[Da>>2]|0;c[q>>2]=f;i=f;b:do if((e|0)<1){if(t&(e|0)!=0){m=7;break a}switch(e|0){case -1:{i=5;m=280;break a}case 0:{m=9;break a}case -2:{i=6;break a}case -4:{m=10;break a}case -15:{e=15;break b}default:{}}c[Da>>2]=g;e=0-e|0;i=g}while(0);h=pb[c[pa>>2]&127](pa,e,n,i,o)|0;c:do switch(h|0){case 2:{m=58;break a}case -1:{m=184;break a}case 1:{i=VV(b,0,n,c[Da>>2]|0)|0;if(i|0){m=280;break a}i=c[s>>2]|0;break}case 4:{if(!(c[w>>2]|0))i=1;else{m=WV(y,o,n,c[Da>>2]|0)|0;c[z>>2]=m;if(!m){i=1;m=280;break a}c[B>>2]=c[A>>2];c[C>>2]=0;i=0}c[x>>2]=0;m=274;break}case 7:{i=c[w>>2]|0;if(!i)m=275;else{yb[i&15](c[ra>>2]|0,c[z>>2]|0,c[x>>2]|0,c[C>>2]|0,1);c[z>>2]=0;XV(y);i=o}break}case 57:{i=VV(b,1,n,c[Da>>2]|0)|0;if(i|0){m=280;break a}i=c[s>>2]|0;break}case 6:{a[D>>0]=0;m=YV(b,E,75291,36)|0;c[F>>2]=m;if(!m){i=1;m=280;break a}a[ta>>0]=1;if(!(c[w>>2]|0))m=33;else{if(!(ob[c[o+52>>2]&127](o,n,c[Da>>2]|0,p)|0)){i=32;m=280;break a}i=c[o+64>>2]|0;i=WV(y,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;if(!i){i=1;m=280;break a}ZV(i);c[B>>2]=c[A>>2];c[C>>2]=i;i=0;m=34}break}case 14:{m=33;break}case 8:{i=c[z>>2]|0;if(!i)i=1;else{yb[c[w>>2]&15](c[ra>>2]|0,i,c[x>>2]|0,c[C>>2]|0,0);XV(y);i=0}if(!((c[x>>2]|0)==0?!(a[D>>0]|0):0)){f=a[ta>>0]|0;a[ta>>0]=1;do if(c[M>>2]|0?c[va>>2]|0:0){h=YV(b,E,75291,36)|0;if(!h){i=1;m=280;break a}if(!(a[D>>0]|0))e=h+20|0;else{e=h+20|0;c[e>>2]=c[Aa>>2]}a[wa>>0]=0;if(!(pb[c[va>>2]&127](c[xa>>2]|0,0,c[e>>2]|0,c[h+16>>2]|0,c[h+24>>2]|0)|0)){i=21;m=280;break a}if(!(a[wa>>0]|0)){if(c[x>>2]|0)break;a[ta>>0]=f;break}if(((a[ya>>0]|0)==0?(oa=c[za>>2]|0,oa|0):0)?(kb[oa&63](c[ra>>2]|0)|0)==0:0){i=22;m=280;break a}}while(0);a[D>>0]=0}e=c[L>>2]|0;if(!e)m=274;else{tb[e&127](c[ra>>2]|0);i=o}break}case 34:{m=$V(b,o,n,c[Da>>2]|0)|0;c[N>>2]=m;if(!m){i=1;m=280;break a}else m=80;break}case 22:{m=aW(b,o,n,c[Da>>2]|0)|0;c[P>>2]=m;if(!m){i=1;m=280;break a}a[Q>>0]=0;c[R>>2]=0;a[S>>0]=0;m=80;break}case 23:{a[Q>>0]=1;c[R>>2]=139106;m=80;break}case 24:{a[S>>0]=1;c[R>>2]=139112;m=80;break}case 25:{c[R>>2]=139115;m=80;break}case 26:{c[R>>2]=139121;m=80;break}case 27:{c[R>>2]=139128;m=80;break}case 28:{c[R>>2]=139135;m=80;break}case 29:{c[R>>2]=139144;m=80;break}case 30:{c[R>>2]=139152;m=80;break}case 32:case 31:{if((a[G>>0]|0)!=0?(c[O>>2]|0)!=0:0){if(!(bW(y,(c[R>>2]|0)==0?((h|0)==32?139161:139171):139173)|0)){i=1;m=280;break a}if(!(cW(y,o,n,c[Da>>2]|0)|0)){i=1;m=280;break a}c[R>>2]=c[B>>2];i=o}else m=275;break}case 36:case 35:{if(a[G>>0]|0){if(!(dW(c[N>>2]|0,c[P>>2]|0,a[Q>>0]|0,a[S>>0]|0,0,b)|0)){i=1;m=280;break a}if((c[O>>2]|0)!=0?(qa=c[R>>2]|0,(qa|0)!=0):0){switch(a[qa>>0]|0){case 40:{m=93;break}case 78:{if((a[qa+1>>0]|0)==79)m=93;break}default:{}}if((m|0)==93){m=0;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((eW(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=41;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((eW(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=0;c[R>>2]=c[B>>2];c[B>>2]=c[A>>2]}c[q>>2]=n;zb[c[O>>2]&15](c[ra>>2]|0,c[c[N>>2]>>2]|0,c[c[P>>2]>>2]|0,c[R>>2]|0,0,(h|0)==36&1);XV(y);i=o}else m=275}else m=275;break}case 38:case 37:{if(a[G>>0]|0){i=c[o+64>>2]|0;i=fW(b,o,a[Q>>0]|0,n+i|0,(c[Da>>2]|0)+(0-i)|0,H)|0;if(i|0){m=280;break a}e=c[J>>2]|0;c[J>>2]=c[I>>2];if(!(dW(c[N>>2]|0,c[P>>2]|0,a[Q>>0]|0,0,e,b)|0)){i=1;m=280;break a}if((c[O>>2]|0)!=0?(sa=c[R>>2]|0,(sa|0)!=0):0){switch(a[sa>>0]|0){case 40:{m=108;break}case 78:{if((a[sa+1>>0]|0)==79)m=108;break}default:{}}if((m|0)==108){m=0;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((eW(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=41;i=c[A>>2]|0;if((i|0)==(c[T>>2]|0)){if(!((eW(y)|0)<<24>>24)){i=1;m=280;break a}i=c[A>>2]|0}c[A>>2]=i+1;a[i>>0]=0;c[R>>2]=c[B>>2];c[B>>2]=c[A>>2]}c[q>>2]=n;zb[c[O>>2]&15](c[ra>>2]|0,c[c[N>>2]>>2]|0,c[c[P>>2]>>2]|0,c[R>>2]|0,e,(h|0)==38&1);XV(y);i=o}else m=275}else m=275;break}case 12:{if(a[G>>0]|0){i=c[o+64>>2]|0;i=gW(b,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;e=c[F>>2]|0;f=c[U>>2]|0;if(e){c[e+4>>2]=f;c[(c[F>>2]|0)+8>>2]=(c[V>>2]|0)-(c[U>>2]|0);c[U>>2]=c[V>>2];if(!(c[K>>2]|0))e=1;else{c[q>>2]=n;e=c[F>>2]|0;Ab[c[K>>2]&0](c[ra>>2]|0,c[e>>2]|0,d[e+33>>0]|0,c[e+4>>2]|0,c[e+8>>2]|0,c[Aa>>2]|0,0,0,0);e=0}}else{c[V>>2]=f;e=1}if(!i){i=e;m=274}else{m=280;break a}}else m=275;break}case 5:{a[D>>0]=0;a[ta>>0]=1;if(!(c[w>>2]|0)){c[x>>2]=75291;i=1}else{m=c[o+64>>2]|0;m=WV(y,o,n+m|0,(c[Da>>2]|0)+(0-m)|0)|0;c[x>>2]=m;if(!m){i=1;m=280;break a}c[B>>2]=c[A>>2];i=0}if((((a[ya>>0]|0)==0?(c[M>>2]|0)==0:0)?(ua=c[za>>2]|0,ua|0):0)?(kb[ua&63](c[ra>>2]|0)|0)==0:0){i=22;m=280;break a}if(!(c[F>>2]|0)){e=YV(b,E,75291,36)|0;c[F>>2]=e;if(!e){i=1;m=280;break a}c[e+24>>2]=0;m=133}else m=133;break}case 13:{i=1;m=133;break}case 15:{if(((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0)?(c[K>>2]|0)!=0:0){c[q>>2]=n;i=c[F>>2]|0;Ab[c[K>>2]&0](c[ra>>2]|0,c[i>>2]|0,d[i+33>>0]|0,0,0,c[i+20>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0,0);i=o}else m=275;break}case 16:{if((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0){h=WV(H,o,n,c[Da>>2]|0)|0;c[(c[F>>2]|0)+28>>2]=h;if(!(c[(c[F>>2]|0)+28>>2]|0)){i=1;m=280;break a}c[J>>2]=c[I>>2];if(c[W>>2]|0){c[q>>2]=n;i=c[F>>2]|0;zb[c[W>>2]&15](c[ra>>2]|0,c[i>>2]|0,c[i+20>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0,c[i+28>>2]|0);i=o;break c}if(c[K>>2]|0){c[q>>2]=n;i=c[F>>2]|0;Ab[c[K>>2]&0](c[ra>>2]|0,c[i>>2]|0,0,0,0,c[i+20>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0,c[i+28>>2]|0);i=o}else m=275}else m=275;break}case 9:{if(nb[c[o+44>>2]&63](o,n,c[Da>>2]|0)|0){c[F>>2]=0;m=275;break c}if(!(a[G>>0]|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}i=WV(H,o,n,c[Da>>2]|0)|0;if(!i){i=1;m=280;break a}e=YV(b,r,i,36)|0;c[F>>2]=e;if(!e){i=1;m=280;break a}if((c[e>>2]|0)!=(i|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}c[J>>2]=c[I>>2];c[(c[F>>2]|0)+24>>2]=0;a[(c[F>>2]|0)+33>>0]=0;if(!(c[X>>2]|0))i=(c[na>>2]|0)!=0;else i=1;a[(c[F>>2]|0)+34>>0]=(i^1)&1;if(!(c[K>>2]|0))m=275;else i=o;break}case 10:{if(!(a[G>>0]|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}i=WV(H,o,n,c[Da>>2]|0)|0;if(!i){i=1;m=280;break a}e=YV(b,E,i,36)|0;c[F>>2]=e;if(!e){i=1;m=280;break a}if((c[e>>2]|0)!=(i|0)){c[I>>2]=c[J>>2];c[F>>2]=0;m=275;break c}c[J>>2]=c[I>>2];c[(c[F>>2]|0)+24>>2]=0;a[(c[F>>2]|0)+33>>0]=1;if(!(c[X>>2]|0))i=(c[na>>2]|0)!=0;else i=1;a[(c[F>>2]|0)+34>>0]=(i^1)&1;if(!(c[K>>2]|0))m=275;else i=o;break}case 18:{c[Y>>2]=0;c[Z>>2]=0;if(!(c[_>>2]|0))m=275;else{n=WV(y,o,n,c[Da>>2]|0)|0;c[Z>>2]=n;if(!n){i=1;m=280;break a}c[B>>2]=c[A>>2];i=o}break}case 21:{if(!(ob[c[o+52>>2]&127](o,n,c[Da>>2]|0,p)|0)){i=32;m=280;break a}if(!(c[Z>>2]|0))m=275;else{i=c[o+64>>2]|0;i=WV(y,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;if(!i){i=1;m=280;break a}ZV(i);c[Y>>2]=i;c[B>>2]=c[A>>2];i=o}break}case 19:{if((c[Z>>2]|0)!=0?(c[_>>2]|0)!=0:0){i=c[o+64>>2]|0;i=WV(y,o,n+i|0,(c[Da>>2]|0)+(0-i)|0)|0;if(!i){i=1;m=280;break a}c[q>>2]=n;yb[c[_>>2]&15](c[ra>>2]|0,c[Z>>2]|0,c[Aa>>2]|0,i,c[Y>>2]|0);i=0}else i=1;XV(y);m=274;break}case 20:{if((c[Y>>2]|0)!=0?(c[_>>2]|0)!=0:0){c[q>>2]=n;yb[c[_>>2]&15](c[ra>>2]|0,c[Z>>2]|0,c[Aa>>2]|0,0,c[Y>>2]|0);i=0}else i=1;XV(y);m=274;break}case 58:{if(c[u>>2]|0)hW(b,o,n,c[Da>>2]|0);i=iW(b,o,Da,g,j,k)|0;if(i|0){m=280;break a}if(!(c[Da>>2]|0)){m=189;break a}else i=o;break}case 44:{i=c[aa>>2]|0;do if((c[$>>2]|0)>>>0>=i>>>0){if(!i){h=c[ha>>2]|0;c[aa>>2]=32;h=kb[h&63](32)|0;c[ba>>2]=h;if(!h){m=198;break a}else break}f=c[ia>>2]|0;h=c[ba>>2]|0;i=i<<1;c[aa>>2]=i;i=lb[f&127](h,i)|0;if(!i){m=193;break a}c[ba>>2]=i;i=c[da>>2]|0;if(i|0){i=lb[c[ia>>2]&127](i,c[aa>>2]<<2)|0;if(!i){i=1;m=280;break a}c[da>>2]=i}}while(0);a[(c[ba>>2]|0)+(c[$>>2]|0)>>0]=0;if(a[ca>>0]|0){i=kW(b)|0;if((i|0)<0){i=1;m=280;break a}c[(c[da>>2]|0)+(c[ea>>2]<<2)>>2]=i;c[ea>>2]=(c[ea>>2]|0)+1;c[(c[fa>>2]|0)+(i*28|0)>>2]=6;if(c[ga>>2]|0)i=o;else m=275}else m=275;break}case 50:{i=(c[ba>>2]|0)+(c[$>>2]|0)|0;if((a[i>>0]|0)==124){i=2;m=280;break a}a[i>>0]=44;if((a[ca>>0]|0)!=0?(c[ga>>2]|0)!=0:0)i=o;else m=275;break}case 49:{f=c[ba>>2]|0;e=c[$>>2]|0;i=a[f+e>>0]|0;if(i<<24>>24==44){i=2;m=280;break a}if(i<<24>>24==0&(a[ca>>0]|0)!=0?(Ba=(c[fa>>2]|0)+((c[(c[da>>2]|0)+((c[ea>>2]|0)+-1<<2)>>2]|0)*28|0)|0,(c[Ba>>2]|0)!=3):0){c[Ba>>2]=5;i=(c[ga>>2]|0)==0&1;f=c[ba>>2]|0;e=c[$>>2]|0}else i=1;a[f+e>>0]=124;m=274;break}case 59:case 60:{a[ta>>0]=1;if(c[M>>2]|0){e=c[o+64>>2]|0;e=WV(H,o,n+e|0,(c[Da>>2]|0)+(0-e)|0)|0;if(!e){i=1;m=280;break a}f=YV(b,E,e,0)|0;c[I>>2]=c[J>>2];do if(c[ja>>2]|0){if(!(a[ya>>0]|0)){if(a[ta>>0]|0){m=219;break}}else if(c[na>>2]|0){m=219;break}if(!f){i=11;m=280;break a}if(!(a[f+34>>0]|0)){i=24;m=280;break a}}else m=219;while(0);if((m|0)==219?(m=0,(f|0)==0):0){a[G>>0]=a[ya>>0]|0;if((h|0)!=60){m=275;break c}i=c[ka>>2]|0;if(!i){m=275;break c}vb[i&127](c[ra>>2]|0,e,1);i=o;break c}i=f+32|0;if(a[i>>0]|0){i=12;m=280;break a}if(c[f+4>>2]|0){i=lW(b,f,(h|0)==60&1)|0;e=(i|0)==0;if(e){i=(e^1)&1;m=274;break c}else{m=280;break a}}if(!(c[va>>2]|0)){a[G>>0]=a[ya>>0]|0;m=275;break c}a[wa>>0]=0;a[i>>0]=1;h=(pb[c[va>>2]&127](c[xa>>2]|0,0,c[f+20>>2]|0,c[f+16>>2]|0,c[f+24>>2]|0)|0)==0;a[i>>0]=0;if(h){i=21;m=280;break a}e=a[ya>>0]|0;if(!(a[wa>>0]|0)){a[G>>0]=e;i=o;break c}else i=0}else{e=a[ya>>0]|0;a[G>>0]=e;i=1}if((e<<24>>24==0?(Ca=c[za>>2]|0,(Ca|0)!=0):0)?(kb[Ca&63](c[ra>>2]|0)|0)==0:0){i=22;m=280;break a}else m=274;break}case 40:{if(!(c[ga>>2]|0))m=275;else{n=$V(b,o,n,c[Da>>2]|0)|0;c[N>>2]=n;if(!n){i=1;m=280;break a}c[ea>>2]=0;c[la>>2]=0;a[ca>>0]=1;i=o}break}case 42:case 41:{if(!(a[ca>>0]|0))m=275;else{if(!(c[ga>>2]|0))i=1;else{i=kb[c[ha>>2]&63](20)|0;if(!i){i=1;m=280;break a}m=i+4|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[i>>2]=(h|0)==41?2:1;c[q>>2]=n;vb[c[ga>>2]&127](c[ra>>2]|0,c[c[N>>2]>>2]|0,i);i=0}a[ca>>0]=0;m=274}break}case 43:{if((a[ca>>0]|0)!=0?(c[(c[fa>>2]|0)+((c[(c[da>>2]|0)+((c[ea>>2]|0)+-1<<2)>>2]|0)*28|0)>>2]=3,(c[ga>>2]|0)!=0):0)i=o;else m=275;break}case 51:{e=0;m=247;break}case 53:{e=1;m=247;break}case 52:{e=2;m=247;break}case 54:{e=3;m=247;break}case 45:{f=0;m=258;break}case 47:{f=1;m=258;break}case 46:{f=2;m=258;break}case 48:{f=3;m=258;break}case 55:{if(!(nW(b,o,n,c[Da>>2]|0)|0)){i=1;m=280;break a}else i=o;break}case 56:{if(!(oW(b,o,n,c[Da>>2]|0)|0)){i=1;m=280;break a}else i=o;break}case 0:{if((e|0)==14)i=o;else m=275;break}case 3:{if(!(c[w>>2]|0))m=275;else i=o;break}case 11:{if((a[G>>0]|0)!=0?(c[K>>2]|0)!=0:0)i=o;else m=275;break}case 17:{if(!(c[_>>2]|0))m=275;else i=o;break}case 33:{if((a[G>>0]|0)!=0?(c[O>>2]|0)!=0:0)i=o;else m=275;break}case 39:{if(!(c[ga>>2]|0))m=275;else i=o;break}default:m=275}while(0);if((m|0)==33)if(!(ob[c[o+52>>2]&127](o,n,c[Da>>2]|0,p)|0)){i=32;m=280;break}else{i=1;m=34}else if((m|0)==80){m=0;if((a[G>>0]|0)!=0?(c[O>>2]|0)!=0:0)i=o;else m=275}else if((m|0)==133){m=0;if((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0){e=c[o+64>>2]|0;e=WV(H,o,n+e|0,(c[Da>>2]|0)+(0-e)|0)|0;c[(c[F>>2]|0)+16>>2]=e;e=c[F>>2]|0;if(!(c[e+16>>2]|0)){i=1;m=280;break}c[e+20>>2]=c[Aa>>2];c[J>>2]=c[I>>2];if((h|0)==13&(c[K>>2]|0)!=0)i=o;else m=274}else m=274}else if((m|0)==247){m=0;if(a[ca>>0]|0){i=c[Da>>2]|0;if(e)i=i+(0-(c[o+64>>2]|0))|0;f=kW(b)|0;if((f|0)<0){i=1;m=280;break}c[(c[fa>>2]|0)+(f*28|0)>>2]=4;c[(c[fa>>2]|0)+(f*28|0)+4>>2]=e;i=$V(b,o,n,i)|0;if(!i){i=1;m=280;break}e=c[i>>2]|0;c[(c[fa>>2]|0)+(f*28|0)+8>>2]=e;i=0;do{h=i;i=i+1|0}while((a[e+h>>0]|0)!=0);c[ma>>2]=(c[ma>>2]|0)+i;if(c[ga>>2]|0)i=o;else m=275}else m=275}else if((m|0)==258)if(a[ca>>0]|0){e=(c[ga>>2]|0)==0;i=e&1;m=(c[ea>>2]|0)+-1|0;c[ea>>2]=m;c[(c[fa>>2]|0)+((c[(c[da>>2]|0)+(m<<2)>>2]|0)*28|0)+4>>2]=f;if(!(c[ea>>2]|0)){if(!e){e=mW(b)|0;if(!e){i=1;m=280;break}c[q>>2]=n;vb[c[ga>>2]&127](c[ra>>2]|0,c[c[N>>2]>>2]|0,e)}a[ca>>0]=0;c[ma>>2]=0;m=274}else m=274}else m=275;if((m|0)==34){m=0;if((a[G>>0]|0)!=0?(c[F>>2]|0)!=0:0){e=c[o+64>>2]|0;e=WV(H,o,n+e|0,(c[Da>>2]|0)+(0-e)|0)|0;if(!e){i=1;m=280;break}ZV(e);c[(c[F>>2]|0)+24>>2]=e;c[J>>2]=c[I>>2];if((h|0)==14&(c[K>>2]|0)!=0)i=o;else m=274}else m=274}if((m|0)==274){m=0;if(!(i<<24>>24))i=o;else m=275}if((m|0)==275){m=0;if(!(c[u>>2]|0))i=o;else{hW(b,o,n,c[Da>>2]|0);i=o}}switch(c[v>>2]|0){case 3:{m=278;break a}case 2:{i=35;m=280;break a}default:{}}e=c[Da>>2]|0;o=i;n=e;e=ob[c[i>>2]&127](i,e,g,Da)|0}d:switch(m|0){case 7:{c[j>>2]=n;i=0;break}case 9:{c[p>>2]=f;i=4;break}case 10:{i=(o|0)==(c[s>>2]|0);if(!i?(a[(c[na>>2]|0)+20>>0]|0)==0:0){c[j>>2]=n;i=0;break}if((a[b+484>>0]|0)!=0|i^1)if((pb[c[pa>>2]&127](pa,-4,g,g,o)|0)==-1)i=29;else{c[j>>2]=n;i=0}else i=3;break}case 58:{do if((a[D>>0]|0?(Ea=a[ta>>0]|0,a[ta>>0]=1,c[M>>2]|0):0)?c[va>>2]|0:0){i=YV(b,E,75291,36)|0;if(!i){i=1;break d}Da=i+20|0;c[Da>>2]=c[Aa>>2];a[wa>>0]=0;if(!(pb[c[va>>2]&127](c[xa>>2]|0,0,c[Da>>2]|0,c[i+16>>2]|0,c[i+24>>2]|0)|0)){i=21;break d}if(!(a[wa>>0]|0)){a[ta>>0]=Ea;break}if(((a[ya>>0]|0)==0?(Fa=c[za>>2]|0,Fa|0):0)?(kb[Fa&63](c[ra>>2]|0)|0)==0:0){i=22;break d}}while(0);c[b+276>>2]=58;i=_V(b,n,g,j)|0;break}case 184:{i=(e|0)==28?10:(e|0)==12?17:2;break}case 189:{c[b+276>>2]=59;i=0;break}case 193:{c[aa>>2]=(c[aa>>2]|0)>>>1;i=1;break}case 198:{c[aa>>2]=0;i=1;break}case 278:{c[j>>2]=c[Da>>2];i=0;break}case 280:break}l=Ga;return i|0}function VV(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+32|0;p=q+16|0;m=q+12|0;i=q+8|0;j=q+4|0;k=q;c[p>>2]=0;c[m>>2]=0;c[i>>2]=0;c[k>>2]=-1;n=b+144|0;o=b+284|0;g=(d|0)!=0;a:do if(rb[(a[b+232>>0]<<24>>24?2:1)&3](d,c[n>>2]|0,e,f,o,i,j,p,m,k)|0){if((c[k>>2]|0)==1&(g^1)?(a[(c[b+352>>2]|0)+130>>0]=1,h=b+488|0,(c[h>>2]|0)==1):0)c[h>>2]=0;h=b+140|0;if(!(c[h>>2]|0))if(!(c[b+80>>2]|0)){e=0;d=0}else{hW(b,c[n>>2]|0,e,f);e=0;d=0}else{d=c[p>>2]|0;if(!d)d=0;else{f=c[n>>2]|0;d=WV(b+436|0,f,d,d+(lb[c[f+28>>2]&127](f,d)|0)|0)|0;if(!d){d=1;break}c[b+452>>2]=c[b+448>>2]}g=c[i>>2]|0;if(g){i=c[n>>2]|0;g=WV(b+436|0,i,g,(c[j>>2]|0)+(0-(c[i+64>>2]|0))|0)|0;if(!g){d=1;break}}else g=0;xb[c[h>>2]&31](c[b+4>>2]|0,g,d,c[k>>2]|0);e=g}do if(!(c[b+228>>2]|0)){g=c[m>>2]|0;h=g;if(g|0){k=c[g+64>>2]|0;m=c[n>>2]|0;if((k|0)==(c[m+64>>2]|0)?(k|0)!=2|(g|0)==(m|0):0){c[n>>2]=h;break}c[o>>2]=c[p>>2];d=19;break a}g=c[p>>2]|0;if(g|0){h=b+436|0;if(!d){d=c[n>>2]|0;d=WV(h,d,g,g+(lb[c[d+28>>2]&127](d,g)|0)|0)|0;if(!d){d=1;break a}}d=PW(b,d)|0;XV(h);if((d|0)!=18)break a;c[o>>2]=c[p>>2];d=18;break a}}while(0);if((d|0)!=0|(e|0)!=0){XV(b+436|0);d=0}else d=0}else d=g?31:30;while(0);l=q;return d|0}function WV(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;do if(!(cW(b,d,e,f)|0))d=0;else{e=b+12|0;d=c[e>>2]|0;if((d|0)==(c[b+8>>2]|0)){if(!((eW(b)|0)<<24>>24)){d=0;break}d=c[e>>2]|0}c[e>>2]=d+1;a[d>>0]=0;d=c[b+16>>2]|0}while(0);return d|0}function XV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=a+4|0;b=c[e>>2]|0;a:do if(!b){c[e>>2]=c[a>>2];b=a}else{d=c[a>>2]|0;while(1){if(!d){b=a;break a}g=c[d>>2]|0;c[d>>2]=b;c[e>>2]=d;f=d;d=g;b=f}}while(0);c[b>>2]=0;c[a+16>>2]=0;c[a+12>>2]=0;c[a+8>>2]=0;return}function YV(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=e+8|0;a:do if(!(c[w>>2]|0))if(g){a[e+4>>0]=6;c[w>>2]=64;h=e+16|0;i=kb[c[c[h>>2]>>2]&63](256)|0;c[e>>2]=i;if(!i){c[w>>2]=0;h=0;break}else{H3(i|0,0,256)|0;j=NW(b,f)|0;j=(c[w>>2]|0)+-1&j;i=e;o=27;break}}else h=0;else{v=NW(b,f)|0;k=c[w>>2]|0;j=k+-1|0;l=c[e>>2]|0;m=v&0-k;u=e+4|0;n=j>>>2;i=0;j=j&v;while(1){h=c[l+(j<<2)>>2]|0;if(!h)break;if((OW(f,c[h>>2]|0)|0)<<24>>24)break a;if(!(i<<24>>24))h=(m>>>((d[u>>0]|0)+-1|0)&n|1)&255;else h=i;t=h&255;i=h;j=j-t+(j>>>0<t>>>0?k:0)|0}if(g){i=a[u>>0]|0;h=i&255;if(!((c[e+12>>2]|0)>>>(h+-1|0))){h=e+16|0;i=e;o=27;break}q=h+1&255;j=i+1&255;s=1<<j;r=s+-1|0;i=s<<2;h=e+16|0;t=kb[c[c[h>>2]>>2]&63](i)|0;if(t){H3(t|0,0,i|0)|0;p=0-s|0;n=j+-1|0;o=r>>>2;m=0;while(1){if(m>>>0>=(c[w>>2]|0)>>>0)break;i=c[(c[e>>2]|0)+(m<<2)>>2]|0;if(i|0){i=NW(b,c[i>>2]|0)|0;k=((i&p)>>>n&o|1)&255;i=i&r;j=0;while(1){l=t+(i<<2)|0;if(!(c[l>>2]|0))break;l=j<<24>>24==0?k:j;x=l&255;i=i+(i>>>0<x>>>0?s:0)-x|0;j=l}c[l>>2]=c[(c[e>>2]|0)+(m<<2)>>2]}m=m+1|0}tb[c[(c[h>>2]|0)+8>>2]&127](c[e>>2]|0);c[e>>2]=t;a[u>>0]=q;c[w>>2]=s;k=((v&p)>>>n&o|1)&255;i=r&v;j=0;while(1){if(!(c[t+(i<<2)>>2]|0)){j=i;i=e;o=27;break a}x=j<<24>>24==0?k:j;w=x&255;i=i+(i>>>0<w>>>0?s:0)-w|0;j=x}}else h=0}else h=0}while(0);if((o|0)==27){h=kb[c[c[h>>2]>>2]&63](g)|0;c[(c[i>>2]|0)+(j<<2)>>2]=h;h=c[(c[i>>2]|0)+(j<<2)>>2]|0;if(!h)h=0;else{H3(h|0,0,g|0)|0;c[c[(c[i>>2]|0)+(j<<2)>>2]>>2]=f;h=e+12|0;c[h>>2]=(c[h>>2]|0)+1;h=c[(c[i>>2]|0)+(j<<2)>>2]|0}}return h|0}function ZV(b){b=b|0;var c=0,d=0,e=0;e=b;c=b;while(1){d=a[e>>0]|0;if(!(d<<24>>24))break;switch(d<<24>>24|0){case 10:case 13:case 32:{if((c|0)!=(b|0)){if((a[c+-1>>0]|0)!=32){a[c>>0]=32;c=c+1|0}}else c=b;break}default:{a[c>>0]=d;c=c+1|0}}e=e+1|0}if((c|0)!=(b|0)){b=c+-1|0;b=(a[b>>0]|0)==32?b:c}a[b>>0]=0;return}function _V(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;d=rW(b,0,c[b+144>>2]|0,d,e,f,(a[b+480>>0]|0)==0&1)|0;if((d|0)==0?(AW(b)|0)<<24>>24==0:0)d=1;return d|0}function $V(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+352>>2]|0;b=WV(g+80|0,b,d,e)|0;do if((b|0)!=0?(f=YV(a,g+20|0,b,24)|0,(f|0)!=0):0)if((c[f>>2]|0)==(b|0)){c[g+96>>2]=c[g+92>>2];if(!(CW(a,f)|0)){f=0;break}}else c[g+92>>2]=c[g+96>>2];else f=0;while(0);return f|0}function aW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=c[b+352>>2]|0;k=m+80|0;n=m+92|0;h=c[n>>2]|0;l=m+88|0;if((h|0)==(c[l>>2]|0))if(!((eW(k)|0)<<24>>24))g=0;else{h=c[n>>2]|0;i=4}else i=4;a:do if((i|0)==4){c[n>>2]=h+1;a[h>>0]=0;d=WV(k,d,e,f)|0;if((d|0)!=0?(j=d+1|0,g=YV(b,m+40|0,j,12)|0,(g|0)!=0):0){if((c[g>>2]|0)!=(j|0)){c[n>>2]=c[m+96>>2];break}h=c[n>>2]|0;i=m+96|0;c[i>>2]=h;if(a[b+232>>0]|0){e=a[j>>0]|0;b:do if(e<<24>>24==120)if((((a[d+2>>0]|0)==109?(a[d+3>>0]|0)==108:0)?(a[d+4>>0]|0)==110:0)?(a[d+5>>0]|0)==115:0){switch(a[d+6>>0]|0){case 0:{h=m+152|0;break}case 58:{h=YV(b,m+60|0,d+7|0,8)|0;break}default:{f=0;d=120;break b}}c[g+4>>2]=h;a[g+9>>0]=1;break a}else{f=0;d=120}else{f=0;d=e}while(0);c:while(1){switch(d<<24>>24){case 0:break a;case 58:{e=0;break c}default:{}}d=f+1|0;f=d;d=a[j+d>>0]|0}while(1){d=(h|0)==(c[l>>2]|0);if((e|0)>=(f|0))break;if(d){if(!((eW(k)|0)<<24>>24)){g=0;break a}h=c[n>>2]|0}d=a[j+e>>0]|0;c[n>>2]=h+1;a[h>>0]=d;e=e+1|0;h=c[n>>2]|0}if(d){if(!((eW(k)|0)<<24>>24)){g=0;break}h=c[n>>2]|0}c[n>>2]=h+1;a[h>>0]=0;h=YV(b,m+60|0,c[i>>2]|0,8)|0;c[g+4>>2]=h;if(h){d=c[i>>2]|0;if((c[h>>2]|0)==(d|0)){c[i>>2]=c[n>>2];break}else{c[n>>2]=d;break}}else g=0}}else g=0}while(0);return g|0}function bW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=b+12|0;h=b+8|0;while(1){e=a[d>>0]|0;if(!(e<<24>>24)){i=7;break}f=c[g>>2]|0;if((f|0)==(c[h>>2]|0)){if(!((eW(b)|0)<<24>>24)){d=0;break}f=c[g>>2]|0;e=a[d>>0]|0}c[g>>2]=f+1;a[f>>0]=e;d=d+1|0}if((i|0)==7)d=c[b+16>>2]|0;return d|0}function cW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;c[h>>2]=d;g=a+12|0;if((c[g>>2]|0)==0?(eW(a)|0)<<24>>24==0:0)d=0;else f=3;a:do if((f|0)==3){d=b+56|0;f=a+8|0;while(1){if((pb[c[d>>2]&127](b,h,e,g,c[f>>2]|0)|0)>>>0<2)break;if(!((eW(a)|0)<<24>>24)){d=0;break a}}d=c[a+16>>2]|0}while(0);l=i;return d|0}function dW(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;i=f<<24>>24==0;n=b+12|0;m=c[n>>2]|0;a:do if(!(i&(g|0)==0)){j=b+20|0;f=0;while(1){if((f|0)>=(m|0))break;if((c[(c[j>>2]|0)+(f*12|0)>>2]|0)==(d|0)){f=1;break a}else f=f+1|0}if((!i?(k=b+8|0,(c[k>>2]|0)==0):0)?(a[d+9>>0]|0)==0:0){c[k>>2]=d;l=9}else l=9}else l=9;while(0);b:do if((l|0)==9){j=b+16|0;do if((m|0)==(c[j>>2]|0))if(!m){c[j>>2]=8;f=kb[c[h+12>>2]&63](96)|0;c[b+20>>2]=f;if(f|0)break;c[j>>2]=0;f=0;break b}else{i=b+20|0;f=lb[c[h+16>>2]&127](c[i>>2]|0,m*24|0)|0;if(!f){f=0;break b}c[j>>2]=m<<1;c[i>>2]=f;break}else f=c[b+20>>2]|0;while(0);h=c[n>>2]|0;c[f+(h*12|0)>>2]=d;c[f+(h*12|0)+8>>2]=g;a[f+(h*12|0)+4>>0]=e;if(!(e<<24>>24))a[d+8>>0]=1;c[n>>2]=(c[n>>2]|0)+1;f=1}while(0);return f|0}function eW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=a+4|0;e=c[b>>2]|0;do if(e){f=a+16|0;g=c[f>>2]|0;if(!g){c[a>>2]=e;c[b>>2]=c[e>>2];c[e>>2]=0;l=c[a>>2]|0;b=l+8|0;c[f>>2]=b;c[a+8>>2]=(c[l+4>>2]|0)+(l+8);c[a+12>>2]=b;b=1;break}d=a+8|0;if(((c[d>>2]|0)-g|0)<(c[e+4>>2]|0)){k=c[e>>2]|0;c[e>>2]=c[a>>2];l=c[b>>2]|0;c[a>>2]=l;c[b>>2]=k;b=c[f>>2]|0;F3(l+8|0,b|0,(c[d>>2]|0)-b|0)|0;b=c[a>>2]|0;l=a+12|0;c[l>>2]=(c[l>>2]|0)-(c[f>>2]|0)+(b+8);c[f>>2]=b+8;c[d>>2]=(c[b+4>>2]|0)+(b+8);b=1}else h=6}else h=6;while(0);a:do if((h|0)==6){e=c[a>>2]|0;k=a+16|0;do if(!e){i=k;b=c[k>>2]|0}else{j=c[k>>2]|0;b=j;if((j|0)!=(e+8|0)){i=k;break}f=a+8|0;g=(c[f>>2]|0)-b<<1;h=a+12|0;d=(c[h>>2]|0)-b|0;if((g|0)<0){b=0;break a}b=MW(g)|0;if(!b){b=0;break a}b=lb[c[(c[a+20>>2]|0)+4>>2]&127](e,b)|0;if(!b){b=0;break a}c[a>>2]=b;c[b+4>>2]=g;b=c[a>>2]|0;c[h>>2]=b+8+d;c[k>>2]=b+8;c[f>>2]=b+8+g;b=1;break a}while(0);j=a+8|0;b=(c[j>>2]|0)-b|0;if((b|0)>=0){if((b|0)>=1024){b=b<<1;if((b|0)<0){b=0;break}}else b=1024;d=MW(b)|0;if((d|0)!=0?(l=kb[c[c[a+20>>2]>>2]&63](d)|0,(l|0)!=0):0){c[l+4>>2]=b;c[l>>2]=c[a>>2];c[a>>2]=l;h=a+12|0;a=c[h>>2]|0;e=c[k>>2]|0;d=a;f=e;if((a|0)==(e|0)){g=l+8|0;e=f}else{g=l+8|0;F3(g|0,e|0,d-f|0)|0;e=c[i>>2]|0;d=c[h>>2]|0}c[h>>2]=l+8+(d-e);c[k>>2]=g;c[j>>2]=l+8+b;b=1}else b=0}else b=0}while(0);return b|0}function fW(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;b=LW(b,d,e,f,g,h)|0;do if(!b){d=h+12|0;b=c[d>>2]|0;if((e<<24>>24==0?(c[h+16>>2]|0)!=(b|0):0)?(i=b+-1|0,(a[i>>0]|0)==32):0){c[d>>2]=i;b=i}if((b|0)==(c[h+8>>2]|0)){if(!((eW(h)|0)<<24>>24)){b=1;break}b=c[d>>2]|0}c[d>>2]=b+1;a[b>>0]=0;b=0}while(0);return b|0}function gW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+16|0;B=H;C=H+4|0;g=c[b+352>>2]|0;D=g+104|0;F=b+272|0;E=c[F>>2]|0;c[F>>2]=1;if((c[D>>2]|0)==0?(eW(D)|0)<<24>>24==0:0)g=1;else{n=d+20|0;o=b+484|0;p=b+144|0;q=b+412|0;r=d+64|0;s=g+132|0;t=b+428|0;u=b+424|0;v=b+224|0;w=b+112|0;m=g+130|0;x=g+128|0;y=g+131|0;z=b+116|0;A=g+112|0;j=g+116|0;k=d+40|0;a:while(1){b:do switch(ob[c[n>>2]&127](d,e,f,B)|0){case -4:{g=0;break a}case -1:{G=37;break a}case 0:{G=39;break a}case 28:{if((a[o>>0]|0)==0?(c[p>>2]|0)==(d|0):0){G=19;break a}g=c[r>>2]|0;g=WV(q,d,e+g|0,(c[B>>2]|0)+(0-g)|0)|0;if(!g){g=1;break a}h=YV(b,s,g,0)|0;c[u>>2]=c[t>>2];if(!h){G=9;break a}i=h+32|0;if(a[i>>0]|0){G=11;break a}g=h+16|0;if(!(c[g>>2]|0)){a[i>>0]=1;g=c[h+4>>2]|0;g=gW(b,c[v>>2]|0,g,g+(c[h+8>>2]|0)|0)|0;a[i>>0]=0;if(!g)break b;else break a}if(c[w>>2]|0){a[y>>0]=0;a[i>>0]=1;h=(pb[c[w>>2]&127](c[z>>2]|0,0,c[h+20>>2]|0,c[g>>2]|0,c[h+24>>2]|0)|0)==0;a[i>>0]=0;if(h){g=21;break a}if(a[y>>0]|0)break b}a[x>>0]=a[m>>0]|0;break}case 6:case 9:{if(!(cW(D,d,e,c[B>>2]|0)|0)){g=1;break a}break}case -3:{c[B>>2]=e+(c[r>>2]|0);G=22;break}case 7:{G=22;break}case 10:{g=lb[c[k>>2]&127](d,e)|0;if((g|0)<0){G=27;break a}h=gX(g,C)|0;e=0;while(1){if((e|0)>=(h|0))break;g=c[j>>2]|0;if((c[A>>2]|0)==(g|0)){if(!((eW(D)|0)<<24>>24)){g=1;G=35;break a}g=c[j>>2]|0}i=a[C+e>>0]|0;c[j>>2]=g+1;a[g>>0]=i;e=e+1|0}break}default:{G=41;break a}}while(0);if((G|0)==22){G=0;g=c[j>>2]|0;if((c[A>>2]|0)==(g|0)){if(!((eW(D)|0)<<24>>24)){g=1;break}g=c[j>>2]|0}c[j>>2]=g+1;a[g>>0]=10}e=c[B>>2]|0}if((G|0)==9){a[x>>0]=a[m>>0]|0;g=0}else if((G|0)==11)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=12}else g=12;else if((G|0)==19){c[b+284>>2]=e;g=10}else if((G|0)==27)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=14;G=35}else{g=14;G=35}else if((G|0)==37)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=4}else g=4;else if((G|0)==39)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=c[B>>2];g=4}else g=4;else if((G|0)==41)if((c[p>>2]|0)==(d|0)){c[b+284>>2]=e;g=23}else g=23;c[F>>2]=E}l=H;return g|0}function hW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+16|0;n=p;o=p+4|0;c[n>>2]=e;if(!(a[d+68>>0]|0)){if((c[b+144>>2]|0)==(d|0)){g=b+288|0;h=b+284|0}else{h=c[b+296>>2]|0;g=h+4|0}i=b+44|0;j=d+56|0;k=b+48|0;m=b+80|0;e=b+4|0;do{c[o>>2]=c[i>>2];b=pb[c[j>>2]&127](d,n,f,o,c[k>>2]|0)|0;c[g>>2]=c[n>>2];q=c[i>>2]|0;vb[c[m>>2]&127](c[e>>2]|0,q,(c[o>>2]|0)-q|0);c[h>>2]=c[n>>2]}while(b>>>0>1)}else vb[c[b+80>>2]&127](c[b+4>>2]|0,e,f-e|0);l=p;return}function iW(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=c[d>>2]|0;if((c[a+144>>2]|0)==(b|0)){i=a+284|0;c[i>>2]=k;h=a+288|0}else{i=c[a+296>>2]|0;h=i+4|0}c[i>>2]=k;c[d>>2]=0;n=ob[c[b+12>>2]&127](b,k,e,j)|0;e=c[j>>2]|0;c[h>>2]=e;switch(n|0){case 42:{if(c[a+80>>2]|0){hW(a,b,k,e);e=c[j>>2]|0}c[d>>2]=e;c[f>>2]=e;e=(c[a+476>>2]|0)==2?35:0;break}case 0:{c[i>>2]=e;e=4;break}case -2:{if(!(g<<24>>24))e=6;else{c[f>>2]=k;e=0}break}case -4:case -1:{if(!(g<<24>>24))e=2;else{c[f>>2]=k;e=0}break}default:{c[i>>2]=e;e=23}}l=m;return e|0}function jW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;d=iW(b,c[b+144>>2]|0,g,e,f,(a[b+480>>0]|0)==0&1)|0;g=c[g>>2]|0;if(!((d|0)!=0|(g|0)==0)){c[b+276>>2]=57;d=TV(b,g,e,f)|0}l=h;return d|0}function kW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=c[a+352>>2]|0;j=i+184|0;if(!(c[j>>2]|0)){b=kb[c[a+12>>2]&63](c[a+464>>2]<<2)|0;c[j>>2]=b;if(!b)b=-1;else{c[b>>2]=0;d=4}}else d=4;do if((d|0)==4){h=i+176|0;b=c[h>>2]|0;g=i+172|0;d=c[g>>2]|0;f=i+164|0;e=c[f>>2]|0;if(b>>>0<d>>>0)g=e;else{if(!e){b=kb[c[a+12>>2]&63](896)|0;if(!b){b=-1;break}else{d=b;b=32}}else{b=lb[c[a+16>>2]&127](e,d*56|0)|0;if(!b){b=-1;break}d=b;b=c[g>>2]<<1}c[g>>2]=b;c[f>>2]=d;b=c[h>>2]|0;g=d}c[h>>2]=b+1;d=c[i+180>>2]|0;if(d|0){a=c[(c[j>>2]|0)+(d+-1<<2)>>2]|0;f=g+(a*28|0)+16|0;d=c[f>>2]|0;if(d|0)c[g+(d*28|0)+24>>2]=b;d=g+(a*28|0)+20|0;e=c[d>>2]|0;if(!e)c[g+(a*28|0)+12>>2]=b;c[f>>2]=b;c[d>>2]=e+1}j=g+(b*28|0)+12|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0}while(0);return b|0}function lW(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;o=b+300|0;f=c[o>>2]|0;if(!f){f=kb[c[b+12>>2]&63](24)|0;if(!f)f=1;else{m=f;g=4}}else{c[o>>2]=c[f+8>>2];m=f;g=4}do if((g|0)==4){h=d+32|0;a[h>>0]=1;i=d+12|0;c[i>>2]=0;j=b+296|0;k=m+8|0;c[k>>2]=c[j>>2];c[j>>2]=m;c[m+12>>2]=d;f=b+308|0;c[m+16>>2]=c[f>>2];a[m+20>>0]=e;c[m>>2]=0;c[m+4>>2]=0;g=c[d+4>>2]|0;e=g+(c[d+8>>2]|0)|0;c[n>>2]=g;if(!(a[d+33>>0]|0))f=rW(b,c[f>>2]|0,c[b+224>>2]|0,g,e,n,0)|0;else{d=b+224|0;f=c[d>>2]|0;f=ob[c[f>>2]&127](f,g,e,n)|0;f=UV(b,c[d>>2]|0,g,e,f,c[n>>2]|0,n,0)|0}if(!f){f=c[n>>2]|0;if((e|0)!=(f|0)?(c[b+476>>2]|0)==3:0){c[i>>2]=f-g;c[b+276>>2]=60;f=0;break}a[h>>0]=0;c[j>>2]=c[k>>2];c[k>>2]=c[o>>2];c[o>>2]=m;f=0}}while(0);l=p;return f|0}function mW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+16|0;d=g+4|0;e=g;b=c[a+352>>2]|0;f=b+176|0;b=kb[c[a+12>>2]&63](((c[f>>2]|0)*20|0)+(c[b+168>>2]|0)|0)|0;if(!b)b=0;else{c[e>>2]=b+((c[f>>2]|0)*20|0);c[d>>2]=b+20;qW(a,0,b,d,e)}l=g;return b|0}function nW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=a+64|0;if(!(c[j>>2]|0))if(!(c[a+80>>2]|0))d=1;else{hW(a,b,d,e);d=1}else{h=b+64|0;g=d+(c[h>>2]<<1)|0;d=g+(lb[c[b+28>>2]&127](b,g)|0)|0;f=a+412|0;g=WV(f,b,g,d)|0;if((g|0)!=0?(c[a+428>>2]=c[a+424>>2],i=lb[c[b+32>>2]&127](b,d)|0,i=WV(f,b,i,e+(0-(c[h>>2]<<1))|0)|0,(i|0)!=0):0){pW(i);vb[c[j>>2]&127](c[a+4>>2]|0,g,i);XV(f);d=1}else d=0}return d|0}function oW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=a+68|0;if(!(c[g>>2]|0))if(!(c[a+80>>2]|0))b=1;else{hW(a,b,d,e);b=1}else{f=a+412|0;h=c[b+64>>2]|0;b=WV(f,b,d+(h<<2)|0,e+(O(h,-3)|0)|0)|0;if(!b)b=0;else{pW(b);ub[c[g>>2]&63](c[a+4>>2]|0,b);XV(f);b=1}}return b|0}function pW(b){b=b|0;var c=0,d=0,e=0;a:while(1){switch(a[b>>0]|0){case 0:break a;case 13:{d=b;c=13;e=4;break a}default:{}}b=b+1|0}if((e|0)==4){while(1){if(c<<24>>24==13){a[d>>0]=10;e=b+1|0;b=(a[e>>0]|0)==10?b+2|0:e}else{a[d>>0]=c;b=b+1|0}d=d+1|0;c=a[b>>0]|0;if(!(c<<24>>24))break;else e=4}a[d>>0]=0}return}function qW(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=(c[b+352>>2]|0)+164|0;j=c[(c[k>>2]|0)+(d*28|0)>>2]|0;c[e>>2]=j;c[e+4>>2]=c[(c[k>>2]|0)+(d*28|0)+4>>2];if((j|0)==4){c[e+8>>2]=c[g>>2];d=c[(c[k>>2]|0)+(d*28|0)+8>>2]|0;while(1){j=a[d>>0]|0;k=c[g>>2]|0;c[g>>2]=k+1;a[k>>0]=j;if(!(a[d>>0]|0))break;else d=d+1|0}c[e+12>>2]=0;c[e+16>>2]=0}else{h=c[(c[k>>2]|0)+(d*28|0)+20>>2]|0;i=e+12|0;c[i>>2]=h;j=e+16|0;c[j>>2]=c[f>>2];c[f>>2]=(c[f>>2]|0)+(h*20|0);d=(c[k>>2]|0)+(d*28|0)+12|0;h=0;while(1){d=c[d>>2]|0;if(h>>>0>=(c[i>>2]|0)>>>0)break;qW(b,d,(c[j>>2]|0)+(h*20|0)|0,f,g);d=(c[k>>2]|0)+(d*28|0)+24|0;h=h+1|0}c[e+8>>2]=0}return}function rW(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;ma=l;l=l+48|0;ja=ma+28|0;ea=ma+32|0;ka=ma+24|0;Z=ma;c[ja>>2]=f;_=c[b+352>>2]|0;if((c[b+144>>2]|0)==(e|0)){fa=b+284|0;Y=b+288|0}else{Y=c[b+296>>2]|0;fa=Y;Y=Y+4|0}c[fa>>2]=f;t=e+4|0;ga=b+80|0;u=b+476|0;v=e+44|0;w=e+64|0;x=_+80|0;y=_+96|0;z=_+92|0;A=_+129|0;B=b+112|0;C=b+116|0;D=b+428|0;E=b+424|0;F=b+304|0;G=b+120|0;ha=b+4|0;H=_+130|0;$=b+60|0;I=b+364|0;J=b+12|0;K=b+360|0;L=e+28|0;ia=b+308|0;aa=e+56|0;M=b+16|0;N=b+52|0;O=b+412|0;P=b+388|0;Q=b+56|0;R=b+232|0;S=b+233|0;T=b+468|0;U=b+104|0;V=b+372|0;W=e+40|0;X=b+72|0;ba=e+68|0;ca=b+44|0;da=b+48|0;a:while(1){s=c[ja>>2]|0;c[ea>>2]=s;s=ob[c[t>>2]&127](e,s,g,ea)|0;f=c[ea>>2]|0;c[Y>>2]=f;k=f;b:do switch(s|0){case -3:{la=6;break a}case -4:{la=15;break a}case 0:{la=20;break a}case -1:{la=21;break a}case -2:{la=23;break a}case 12:{f=17;break a}case -5:{la=134;break a}case 9:{s=c[w>>2]|0;s=(nb[c[v>>2]&63](e,(c[ja>>2]|0)+s|0,k+(0-s)|0)|0)&255;a[ka>>0]=s;do if(s<<24>>24){f=c[$>>2]|0;if(f|0){vb[f&127](c[ha>>2]|0,ka,1);break}if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0)}else{j=c[w>>2]|0;j=WV(x,e,(c[ja>>2]|0)+j|0,(c[ea>>2]|0)+(0-j)|0)|0;if(!j){f=1;la=56;break a}k=YV(b,_,j,0)|0;c[z>>2]=c[y>>2];if((a[A>>0]|0)!=0?(a[H>>0]|0)==0:0){if(!k){f=c[G>>2]|0;if(f|0){vb[f&127](c[ha>>2]|0,j,0);break}if(!(c[ga>>2]|0))break;hW(b,e,c[ja>>2]|0,c[ea>>2]|0);break}}else{if(!k){f=11;la=56;break a}if(!(a[k+34>>0]|0)){f=24;la=56;break a}}f=k+32|0;if(a[f>>0]|0){f=12;la=56;break a}if(c[k+28>>2]|0){f=15;la=56;break a}if(!(c[k+4>>2]|0)){if(!(c[B>>2]|0)){if(!(c[ga>>2]|0))break;hW(b,e,c[ja>>2]|0,c[ea>>2]|0);break}a[f>>0]=1;j=tW(b)|0;a[f>>0]=0;if(!j){f=1;la=56;break a}if(!(pb[c[B>>2]&127](c[C>>2]|0,j,c[k+20>>2]|0,c[k+16>>2]|0,c[k+24>>2]|0)|0)){f=21;la=56;break a}c[E>>2]=c[D>>2];break}if(a[F>>0]|0){f=lW(b,k,0)|0;if(!f)break;else{la=58;break a}}f=c[G>>2]|0;if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0)}else vb[f&127](c[ha>>2]|0,c[k>>2]|0,0);break b}while(0);break}case 1:case 2:{f=c[I>>2]|0;if(!f){f=kb[c[J>>2]&63](48)|0;if(!f){f=1;la=75;break a}j=kb[c[J>>2]&63](32)|0;c[f+36>>2]=j;if(!j){la=63;break a}c[f+40>>2]=j+32}else c[I>>2]=c[f>>2];o=f+44|0;c[o>>2]=0;c[f>>2]=c[K>>2];c[K>>2]=f;s=f+12|0;c[f+16>>2]=0;c[f+20>>2]=0;r=(c[ja>>2]|0)+(c[w>>2]|0)|0;q=f+4|0;c[q>>2]=r;p=f+8|0;c[p>>2]=lb[c[L>>2]&127](e,r)|0;c[ia>>2]=(c[ia>>2]|0)+1;q=c[q>>2]|0;p=q+(c[p>>2]|0)|0;c[Z>>2]=q;q=f+36|0;c[ka>>2]=c[q>>2];r=f+40|0;j=c[r>>2]|0;while(1){na=pb[c[aa>>2]&127](e,Z,p,ka,j+-1|0)|0;j=c[ka>>2]|0;m=c[q>>2]|0;k=m;n=j-k|0;if((na|0)==1?1:(c[Z>>2]|0)>>>0>=p>>>0)break;k=(c[r>>2]|0)-k<<1;j=lb[c[M>>2]&127](m,k)|0;if(!j){la=69;break a}c[q>>2]=j;na=j+k|0;c[r>>2]=na;c[ka>>2]=j+n;j=na}c[f+24>>2]=n;c[s>>2]=k;a[j>>0]=0;f=uW(b,e,c[ja>>2]|0,s,o)|0;if(f|0){la=75;break a}f=c[N>>2]|0;if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0)}else vb[f&127](c[ha>>2]|0,c[s>>2]|0,c[P>>2]|0);XV(O);break}case 3:case 4:{na=(c[ja>>2]|0)+(c[w>>2]|0)|0;c[ka>>2]=0;na=WV(O,e,na,na+(lb[c[L>>2]&127](e,na)|0)|0)|0;c[Z>>2]=na;if(!na){f=1;la=89;break a}c[D>>2]=c[E>>2];f=uW(b,e,c[ja>>2]|0,Z,ka)|0;if(f|0){la=79;break a}c[D>>2]=c[E>>2];f=c[N>>2]|0;if(!f)j=1;else{vb[f&127](c[ha>>2]|0,c[Z>>2]|0,c[P>>2]|0);j=0}f=c[Q>>2]|0;if(!f){if(j|0?c[ga>>2]|0:0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0)}else{if(c[N>>2]|0){c[fa>>2]=c[Y>>2];f=c[Q>>2]|0}ub[f&63](c[ha>>2]|0,c[Z>>2]|0)}XV(O);vW(b,c[ka>>2]|0);if((c[ia>>2]|0)==0?(c[u>>2]&-2|0)!=2:0){la=92;break a}break}case 5:{if((c[ia>>2]|0)==(d|0)){f=13;break a}n=c[K>>2]|0;c[K>>2]=c[n>>2];c[n>>2]=c[I>>2];c[I>>2]=n;f=(c[ja>>2]|0)+(c[w>>2]<<1)|0;j=lb[c[L>>2]&127](e,f)|0;if((j|0)!=(c[n+8>>2]|0)){la=96;break a}if(L0(c[n+4>>2]|0,f,j)|0){la=96;break a}c[ia>>2]=(c[ia>>2]|0)+-1;f=c[Q>>2]|0;if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0)}else{j=c[n+16>>2]|0;m=n+12|0;if((j|0)!=0&(a[R>>0]|0)!=0){f=(c[m>>2]|0)+(c[n+28>>2]|0)|0;while(1){k=a[j>>0]|0;if(!(k<<24>>24))break;a[f>>0]=k;f=f+1|0;j=j+1|0}j=c[n+20>>2]|0;c:do if((j|0)!=0&(a[S>>0]|0)!=0){a[f>>0]=a[T>>0]|0;while(1){f=f+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break c;a[f>>0]=k;j=j+1|0}}while(0);a[f>>0]=0;f=c[Q>>2]|0}ub[f&63](c[ha>>2]|0,c[m>>2]|0)}k=n+44|0;while(1){m=c[k>>2]|0;if(!m)break;f=c[U>>2]|0;if(!f){f=m;j=m}else{ub[f&63](c[ha>>2]|0,c[c[m>>2]>>2]|0);f=m;j=c[k>>2]|0}c[k>>2]=c[j+4>>2];c[m+4>>2]=c[V>>2];c[V>>2]=m;c[(c[f>>2]|0)+4>>2]=c[m+8>>2]}if(!(c[ia>>2]|0)){la=117;break a}break}case 10:{f=lb[c[W>>2]&127](e,c[ja>>2]|0)|0;if((f|0)<0){f=14;break a}j=c[$>>2]|0;if(j|0){s=c[ha>>2]|0;na=gX(f,ka)|0;vb[j&127](s,ka,na);break b}if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,c[ea>>2]|0);break}case 7:{f=c[$>>2]|0;if(f|0){a[ka>>0]=10;vb[f&127](c[ha>>2]|0,ka,1);break b}if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,k);break}case 8:{f=c[X>>2]|0;if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,k)}else tb[f&127](c[ha>>2]|0);f=xW(b,e,ea,g,h,i)|0;if(f|0)break a;if(!(c[ea>>2]|0)){la=133;break a}break}case 6:{j=c[$>>2]|0;if(!j){if(!(c[ga>>2]|0))break b;hW(b,e,c[ja>>2]|0,k);break b}if(!(a[ba>>0]|0))f=k;else{na=c[ja>>2]|0;vb[j&127](c[ha>>2]|0,na,f-na|0);break b}while(1){c[ka>>2]=c[ca>>2];na=pb[c[aa>>2]&127](e,ja,f,ka,c[da>>2]|0)|0;c[Y>>2]=c[ja>>2];s=c[ca>>2]|0;vb[j&127](c[ha>>2]|0,s,(c[ka>>2]|0)-s|0);if(na>>>0<2)break;c[fa>>2]=c[ja>>2];f=c[ea>>2]|0}break}case 11:{if(!(nW(b,e,c[ja>>2]|0,k)|0)){f=1;break a}break}case 13:{if(!(oW(b,e,c[ja>>2]|0,k)|0)){f=1;break a}break}default:if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,k)}while(0);na=c[ea>>2]|0;c[ja>>2]=na;c[fa>>2]=na;switch(c[u>>2]|0){case 2:{f=35;break a}case 3:{la=160;break a}default:{}}}switch(la|0){case 6:{if(i<<24>>24){c[h>>2]=c[ja>>2];f=0;break}c[Y>>2]=g;f=c[$>>2]|0;if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,g)}else{a[ka>>0]=10;vb[f&127](c[ha>>2]|0,ka,1)}if(d)if((c[ia>>2]|0)==(d|0)){c[h>>2]=g;f=0}else f=13;else f=3;break}case 15:{if(i<<24>>24){c[h>>2]=c[ja>>2];f=0;break}if((d|0)>0)if((c[ia>>2]|0)==(d|0)){c[h>>2]=c[ja>>2];f=0}else f=13;else f=3;break}case 20:{c[fa>>2]=f;f=4;break}case 21:{if(!(i<<24>>24))f=5;else{c[h>>2]=c[ja>>2];f=0}break}case 23:{if(!(i<<24>>24))f=6;else{c[h>>2]=c[ja>>2];f=0}break}case 56:break;case 58:break;case 63:{tb[c[b+20>>2]&127](f);f=1;la=75;break}case 69:{f=1;la=75;break}case 79:{vW(b,c[ka>>2]|0);la=89;break}case 92:{f=wW(b,c[ea>>2]|0,g,h)|0;break}case 96:{c[fa>>2]=f;f=7;break}case 117:{f=wW(b,c[ea>>2]|0,g,h)|0;break}case 133:{c[b+276>>2]=61;f=0;break}case 134:{if(i<<24>>24){c[h>>2]=c[ja>>2];f=0;break}f=c[$>>2]|0;do if(!f){if(c[ga>>2]|0)hW(b,e,c[ja>>2]|0,g)}else if(!(a[ba>>0]|0)){c[ka>>2]=c[ca>>2];pb[c[aa>>2]&127](e,ja,g,ka,c[da>>2]|0)|0;na=c[ca>>2]|0;vb[c[$>>2]&127](c[ha>>2]|0,na,(c[ka>>2]|0)-na|0);break}else{na=c[ja>>2]|0;vb[f&127](c[ha>>2]|0,na,g-na|0);break}while(0);if(!d){c[fa>>2]=g;f=3;break}if((c[ia>>2]|0)==(d|0)){c[h>>2]=g;f=0;break}else{c[fa>>2]=g;f=13;break}}case 160:{c[h>>2]=c[ea>>2];f=0;break}}l=ma;return f|0}function sW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=l;l=l+16|0;p=q;k=b+296|0;m=c[k>>2]|0;do if(m){n=c[m+12>>2]|0;h=n+4|0;j=c[h>>2]|0;i=n+12|0;g=j+(c[i>>2]|0)|0;j=j+(c[n+8>>2]|0)|0;c[p>>2]=g;o=n+33|0;if(!(a[o>>0]|0))g=rW(b,c[m+16>>2]|0,c[b+224>>2]|0,g,j,p,0)|0;else{s=b+224|0;r=c[s>>2]|0;r=ob[c[r>>2]&127](r,g,j,p)|0;g=UV(b,c[s>>2]|0,g,j,r,c[p>>2]|0,p,0)|0}if(!g){g=c[p>>2]|0;if((j|0)!=(g|0)?(c[b+476>>2]|0)==3:0){c[i>>2]=g-(c[h>>2]|0);g=0;break}a[n+32>>0]=0;s=m+8|0;c[k>>2]=c[s>>2];g=b+300|0;c[s>>2]=c[g>>2];c[g>>2]=m;g=b+276|0;if(!(a[o>>0]|0)){c[g>>2]=58;g=rW(b,(c[b+472>>2]|0)!=0&1,c[b+144>>2]|0,d,e,f,(a[b+480>>0]|0)==0&1)|0;break}else{c[g>>2]=57;s=b+144|0;g=c[s>>2]|0;g=ob[c[g>>2]&127](g,d,e,p)|0;g=UV(b,c[s>>2]|0,d,e,g,c[p>>2]|0,f,(a[b+480>>0]|0)==0&1)|0;break}}}else g=23;while(0);l=q;return g|0}function tW(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;n=q;m=c[b+352>>2]|0;h=m+156|0;o=b+412|0;p=b+424|0;a:do if(!(c[h>>2]|0)){d=0;i=b+420|0;k=b+468|0;j=12}else{d=c[p>>2]|0;i=b+420|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=61;g=b+468|0;e=(c[(c[h>>2]|0)+20>>2]|0)+(((a[g>>0]|0)!=0)<<31>>31)|0;f=0;while(1){if((f|0)>=(e|0)){d=1;k=g;j=12;break a}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break a}d=c[p>>2]|0}k=a[(c[(c[h>>2]|0)+16>>2]|0)+f>>0]|0;c[p>>2]=d+1;a[d>>0]=k;f=f+1|0}}while(0);b:do if((j|0)==12){NV(n,m+60|0);c:while(1){do{e=OV(n)|0;if(!e)break c;h=e+4|0}while(!(c[h>>2]|0));if(d<<24>>24){d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=12}g=c[e>>2]|0;while(1){e=a[g>>0]|0;d=c[p>>2]|0;f=(d|0)==(c[i>>2]|0);if(!(e<<24>>24))break;if(f){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0;e=a[g>>0]|0}c[p>>2]=d+1;a[d>>0]=e;g=g+1|0}if(f){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=61;f=(c[(c[h>>2]|0)+20>>2]|0)+(((a[k>>0]|0)!=0)<<31>>31)|0;e=0;while(1){if((e|0)>=(f|0)){d=1;continue c}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}j=a[(c[(c[h>>2]|0)+16>>2]|0)+e>>0]|0;c[p>>2]=d+1;a[d>>0]=j;e=e+1|0}}NV(n,m);d:while(1){do{e=OV(n)|0;if(!e)break d}while(!(a[e+32>>0]|0));if(d<<24>>24){d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=12}f=c[e>>2]|0;while(1){e=a[f>>0]|0;if(!(e<<24>>24)){d=1;continue d}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break b}d=c[p>>2]|0;e=a[f>>0]|0}c[p>>2]=d+1;a[d>>0]=e;f=f+1|0}}d=c[p>>2]|0;if((d|0)==(c[i>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break}d=c[p>>2]|0}c[p>>2]=d+1;a[d>>0]=0;d=c[b+428>>2]|0}while(0);l=q;return d|0}function uW(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;O=l;l=l+80|0;K=O+16|0;L=O;M=c[b+352>>2]|0;k=M+20|0;i=YV(b,k,c[g>>2]|0,0)|0;if(!i){i=BW(M+80|0,c[g>>2]|0)|0;if((i|0)!=0?(j=YV(b,k,i,24)|0,(j|0)!=0):0)if((a[b+232>>0]|0)!=0?(CW(b,j)|0)==0:0)i=1;else A=6;else i=1}else{j=i;A=6}a:do if((A|0)==6){x=c[j+12>>2]|0;k=e+36|0;m=b+376|0;t=b+388|0;u=ob[c[k>>2]&127](e,f,c[m>>2]|0,c[t>>2]|0)|0;i=u+x|0;n=c[m>>2]|0;if((i|0)>(n|0)){i=i+16|0;c[m>>2]=i;i=lb[c[b+16>>2]&127](c[t>>2]|0,i<<4)|0;if(!i){c[m>>2]=n;i=1;break}c[t>>2]=i;if((u|0)>(n|0))ob[c[k>>2]&127](e,f,u,i)|0}J=c[t>>2]|0;r=e+28|0;H=b+412|0;I=b+428|0;w=j+20|0;q=b+424|0;s=0;p=0;k=0;while(1){if((p|0)>=(u|0))break;o=c[(c[t>>2]|0)+(p<<4)>>2]|0;o=aW(b,e,o,o+(lb[c[r>>2]&127](e,o)|0)|0)|0;if(!o){i=1;break a}i=(c[o>>2]|0)+-1|0;if(a[i>>0]|0){A=15;break}a[i>>0]=1;f=s+1|0;c[J+(s<<2)>>2]=c[o>>2];n=c[t>>2]|0;if(a[n+(p<<4)+12>>0]|0){G=WV(H,e,c[n+(p<<4)+4>>2]|0,c[n+(p<<4)+8>>2]|0)|0;c[J+(f<<2)>>2]=G;if(!G){i=1;break a}}else{b:do if(!(a[o+8>>0]|0))i=1;else{i=0;while(1){if((i|0)>=(x|0)){i=1;break b}m=c[w>>2]|0;if((o|0)==(c[m+(i*12|0)>>2]|0))break;i=i+1|0}i=a[m+(i*12|0)+4>>0]|0}while(0);i=fW(b,e,i,c[n+(p<<4)+4>>2]|0,c[n+(p<<4)+8>>2]|0,H)|0;if(i|0)break a;c[J+(f<<2)>>2]=c[I>>2]}c[I>>2]=c[q>>2];i=c[o+4>>2]|0;do if(i)if(a[o+9>>0]|0){i=DW(b,i,o,c[J+(f<<2)>>2]|0,h)|0;if(!i){i=s;break}else break a}else{a[(c[o>>2]|0)+-1>>0]=2;k=k+1|0;i=s+2|0;break}else i=s+2|0;while(0);s=i;p=p+1|0}if((A|0)==15){if((c[b+144>>2]|0)!=(e|0)){i=8;break}c[b+284>>2]=c[(c[t>>2]|0)+(p<<4)>>2];i=8;break}c[b+380>>2]=s;i=c[j+8>>2]|0;c:do if((i|0)!=0?(v=c[i>>2]|0,(a[v+-1>>0]|0)!=0):0){i=0;while(1){if((i|0)>=(s|0)){f=0;p=k;G=s;break c}if((c[J+(i<<2)>>2]|0)==(v|0)){A=37;break c}i=i+2|0}}else{i=-1;A=37}while(0);if((A|0)==37){c[b+384>>2]=i;f=0;p=k;G=s}while(1){if((f|0)>=(x|0))break;i=c[w>>2]|0;n=i+(f*12|0)|0;k=c[n>>2]|0;m=(c[k>>2]|0)+-1|0;d:do if((a[m>>0]|0)==0?(y=i+(f*12|0)+8|0,z=c[y>>2]|0,(z|0)!=0):0){i=c[k+4>>2]|0;do if(i)if(a[k+9>>0]|0){i=DW(b,i,k,z,h)|0;if(!i){i=p;k=G;break d}else break a}else{a[m>>0]=2;i=p+1|0;break}else{a[m>>0]=1;i=p}while(0);c[J+(G<<2)>>2]=c[c[n>>2]>>2];c[J+(G+1<<2)>>2]=c[y>>2];k=G+2|0}else{i=p;k=G}while(0);f=f+1|0;p=i;G=k}c[J+(G<<2)>>2]=0;e:do if(!p)i=0;else{o=b+396|0;n=c[o>>2]|0;F=b+400|0;f=a[F>>0]|0;i=f&255;do if(!(p<<1>>i)){i=1<<i;m=b+392|0;if(!n){k=i;A=55}else{k=i;i=n}}else{i=f;do{E=i;i=i+1<<24>>24}while((p>>(E&255)|0)!=0);i=(i&255)>3?i:3;a[F>>0]=i;i=i&255;m=b+392|0;k=lb[c[b+16>>2]&127](c[m>>2]|0,12<<i)|0;if(!k){a[F>>0]=f;i=1;break a}else{c[m>>2]=k;k=1<<i;A=55;break}}while(0);f:do if((A|0)==55){i=k;while(1){if(!i){i=-1;break f}E=i+-1|0;c[(c[m>>2]|0)+(E*12|0)>>2]=-1;i=E}}while(0);E=i+-1|0;c[o>>2]=E;w=M+40|0;x=b+424|0;y=b+420|0;z=k+-1|0;A=0-k|0;B=z>>>2;C=b+233|0;D=b+468|0;i=0;v=p;g:while(1){while(1){if((i|0)>=(G|0))break e;e=J+(i<<2)|0;n=c[e>>2]|0;f=n+-1|0;if((a[f>>0]|0)==2)break;a[f>>0]=0;i=i+2|0}EW(b,L);FW(K,L);a[f>>0]=0;f=YV(b,w,n,0)|0;if(!f){i=1;break}f=c[f+4>>2]|0;if(!f){i=1;break}u=c[f+4>>2]|0;if(!u){i=27;break}q=u+20|0;r=u+16|0;p=0;while(1){f=c[q>>2]|0;o=c[r>>2]|0;if((p|0)>=(f|0))break;o=a[o+p>>0]|0;f=c[x>>2]|0;if((f|0)==(c[y>>2]|0)){if(!((eW(H)|0)<<24>>24)){i=1;break g}f=c[x>>2]|0}c[x>>2]=f+1;a[f>>0]=o;p=p+1|0}GW(K,o,f);do{t=n;n=n+1|0}while((a[t>>0]|0)!=58);GW(K,n,HW(n)|0);while(1){f=c[x>>2]|0;if((f|0)==(c[y>>2]|0)){if(!((eW(H)|0)<<24>>24)){i=1;break g}f=c[x>>2]|0}t=a[n>>0]|0;c[x>>2]=f+1;a[f>>0]=t;if(!(a[n>>0]|0))break;else n=n+1|0}t=IW(K)|0;q=c[m>>2]|0;r=t&A;n=0;s=z&t;while(1){if((c[q+(s*12|0)>>2]|0)!=(E|0))break;if((c[q+(s*12|0)+4>>2]|0)==(t|0)){f=c[q+(s*12|0)+8>>2]|0;o=c[I>>2]|0;while(1){P=a[o>>0]|0;p=P<<24>>24==0;if(p|P<<24>>24!=(a[f>>0]|0))break;f=f+1|0;o=o+1|0}if(p){i=8;break g}}if(!(n<<24>>24))n=(r>>>((d[F>>0]|0)+-1|0)&B|1)&255;P=n&255;s=s+((s|0)<(P|0)?k:0)-P|0}if(a[C>>0]|0){a[(c[x>>2]|0)+-1>>0]=a[D>>0]|0;f=c[c[u>>2]>>2]|0;while(1){n=c[x>>2]|0;if((n|0)==(c[y>>2]|0)){if(!((eW(H)|0)<<24>>24)){i=1;break g}n=c[x>>2]|0}P=a[f>>0]|0;c[x>>2]=n+1;a[n>>0]=P;if(!(a[f>>0]|0))break;else f=f+1|0}}P=c[I>>2]|0;c[I>>2]=c[x>>2];c[e>>2]=P;c[(c[m>>2]|0)+(s*12|0)>>2]=E;c[(c[m>>2]|0)+(s*12|0)+4>>2]=t;c[(c[m>>2]|0)+(s*12|0)+8>>2]=P;v=v+-1|0;i=i+2|0;if(!v)break e}break a}while(0);while(1){if((i|0)>=(G|0)){i=h;break}a[(c[J+(i<<2)>>2]|0)+-1>>0]=0;i=i+2|0}while(1){i=c[i>>2]|0;if(!i)break;a[(c[c[i+12>>2]>>2]|0)+-1>>0]=0;i=i+4|0}if(!(a[b+232>>0]|0))i=0;else{i=c[j+4>>2]|0;if(!i){i=c[M+156>>2]|0;if(!i){i=0;break}k=c[g>>2]|0}else{i=c[i+4>>2]|0;if(!i){i=27;break}j=c[g>>2]|0;while(1){k=j+1|0;if((a[j>>0]|0)==58)break;else j=k}}if((a[b+233>>0]|0)!=0?(N=c[c[i>>2]>>2]|0,(N|0)!=0):0){j=0;while(1){m=j+1|0;if(!(a[N+j>>0]|0))break;else j=m}}else m=0;c[g+4>>2]=k;p=i+20|0;c[g+16>>2]=c[p>>2];c[g+8>>2]=c[c[i>>2]>>2];c[g+20>>2]=m;q=0;while(1){r=q+1|0;if(!(a[k+q>>0]|0))break;else q=r}j=c[p>>2]|0;n=r+m+j|0;f=i+24|0;if((n|0)>(c[f>>2]|0)){j=n+24|0;o=kb[c[b+12>>2]&63](j)|0;if(!o){i=1;break}c[f>>2]=j;f=i+16|0;F3(o|0,c[f>>2]|0,c[p>>2]|0)|0;j=b+360|0;while(1){j=c[j>>2]|0;if(!j)break;n=j+12|0;if((c[n>>2]|0)==(c[f>>2]|0))c[n>>2]=o}tb[c[b+20>>2]&127](c[f>>2]|0);c[f>>2]=o;n=o;j=c[p>>2]|0}else{n=i+16|0;f=n;n=c[n>>2]|0}j=n+j|0;F3(j|0,k|0,r|0)|0;if(m|0){P=j+q|0;a[P>>0]=a[b+468>>0]|0;F3(P+1|0,c[c[i>>2]>>2]|0,m|0)|0}c[g>>2]=c[f>>2];i=0}}while(0);l=O;return i|0}function vW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=a+104|0;f=a+372|0;d=a+4|0;while(1){if(!b)break;a=c[e>>2]|0;if(!a)a=b;else{ub[a&63](c[d>>2]|0,c[c[b>>2]>>2]|0);a=b}h=b+4|0;g=c[h>>2]|0;c[h>>2]=c[f>>2];c[f>>2]=b;c[(c[a>>2]|0)+4>>2]=c[b+8>>2];b=g}return}function wW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;j=q;c[b+276>>2]=62;k=b+284|0;c[k>>2]=d;m=b+144|0;n=b+288|0;o=b+80|0;i=b+476|0;g=d;a:while(1){c[j>>2]=0;r=c[m>>2]|0;r=ob[c[r>>2]&127](r,g,e,j)|0;d=c[j>>2]|0;c[n>>2]=d;h=d;switch(r|0){case -15:{p=3;break a}case -4:{p=7;break a}case 0:{p=12;break a}case -1:{p=13;break a}case -2:{p=15;break a}case 15:{if(c[o>>2]|0)hW(b,c[m>>2]|0,g,h);break}case 11:{if(!(nW(b,c[m>>2]|0,g,h)|0)){d=1;break a}break}case 13:{if(!(oW(b,c[m>>2]|0,g,h)|0)){d=1;break a}break}default:{d=9;break a}}d=c[j>>2]|0;c[k>>2]=d;switch(c[i>>2]|0){case 2:{d=35;break a}case 3:{p=18;break a}default:{}}g=d}do if((p|0)==3){if(c[o>>2]|0){hW(b,c[m>>2]|0,g,h);if((c[i>>2]|0)==2){d=35;break}d=c[j>>2]|0}c[f>>2]=d;d=0}else if((p|0)==7){c[f>>2]=g;d=0}else if((p|0)==12){c[k>>2]=d;d=4}else if((p|0)==13)if(!(a[b+480>>0]|0)){c[f>>2]=g;d=0}else d=5;else if((p|0)==15)if(!(a[b+480>>0]|0)){c[f>>2]=g;d=0}else d=6;else if((p|0)==18){c[f>>2]=d;d=0}while(0);l=q;return d|0}function xW(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=l;l=l+16|0;y=B+8|0;z=B+4|0;x=B;i=c[e>>2]|0;c[y>>2]=i;if((c[b+144>>2]|0)==(d|0)){s=b+284|0;c[s>>2]=i;t=b+288|0}else{t=c[b+296>>2]|0;s=t;t=t+4|0}c[s>>2]=i;c[e>>2]=0;k=d+8|0;m=b+60|0;u=b+80|0;v=b+4|0;w=b+476|0;n=d+68|0;o=b+44|0;p=d+56|0;q=b+48|0;a:while(1){j=ob[c[k>>2]&127](d,c[y>>2]|0,f,z)|0;i=c[z>>2]|0;c[t>>2]=i;r=i;b:do switch(j|0){case 40:{A=6;break a}case 0:{A=23;break a}case -2:{A=24;break a}case -4:case -1:{A=26;break a}case 7:{i=c[m>>2]|0;if(i|0){a[x>>0]=10;vb[i&127](c[v>>2]|0,x,1);break b}if(c[u>>2]|0)hW(b,d,c[y>>2]|0,r);break}case 6:{j=c[m>>2]|0;if(!j){if(!(c[u>>2]|0))break b;hW(b,d,c[y>>2]|0,r);break b}if(!(a[n>>0]|0))i=r;else{r=c[y>>2]|0;vb[j&127](c[v>>2]|0,r,i-r|0);break b}while(1){c[x>>2]=c[o>>2];r=pb[c[p>>2]&127](d,y,i,x,c[q>>2]|0)|0;c[t>>2]=c[z>>2];i=c[o>>2]|0;vb[j&127](c[v>>2]|0,i,(c[x>>2]|0)-i|0);if(r>>>0<2)break;c[s>>2]=c[y>>2];i=c[z>>2]|0}break}default:{A=28;break a}}while(0);r=c[z>>2]|0;c[y>>2]=r;c[s>>2]=r;switch(c[w>>2]|0){case 3:{A=30;break a}case 2:{i=35;break a}default:{}}}if((A|0)==6){i=c[b+76>>2]|0;if(!i){if(c[u>>2]|0)hW(b,d,c[y>>2]|0,r)}else tb[i&127](c[v>>2]|0);i=c[z>>2]|0;c[e>>2]=i;c[g>>2]=i;i=(c[w>>2]|0)==2?35:0}else if((A|0)==23){c[s>>2]=i;i=4}else if((A|0)==24)if(!(h<<24>>24))i=6;else{c[g>>2]=c[y>>2];i=0}else if((A|0)==26)if(!(h<<24>>24))i=20;else{c[g>>2]=c[y>>2];i=0}else if((A|0)==28){c[s>>2]=i;i=23}else if((A|0)==30){c[g>>2]=c[z>>2];i=0}l=B;return i|0}function yW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;d=xW(b,c[b+144>>2]|0,g,e,f,(a[b+480>>0]|0)==0&1)|0;g=c[g>>2]|0;do if(!((d|0)!=0|(g|0)==0)){d=b+276|0;if(!(c[b+472>>2]|0)){c[d>>2]=58;d=_V(b,g,e,f)|0;break}else{c[d>>2]=63;d=zW(b,g,e,f)|0;break}}while(0);l=h;return d|0}function zW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;d=rW(b,1,c[b+144>>2]|0,d,e,f,(a[b+480>>0]|0)==0&1)|0;if((d|0)==0?(AW(b)|0)<<24>>24==0:0)d=1;return d|0}function AW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=a+16|0;a=a+360|0;while(1){a=c[a>>2]|0;if(!a){a=1;break}i=(c[a+24>>2]|0)+1|0;j=a+36|0;f=c[j>>2]|0;e=f+i|0;l=a+4|0;d=c[l>>2]|0;if((d|0)==(e|0)){a=1;break}k=a+8|0;b=c[k>>2]|0;g=b+i|0;h=a+40|0;if((g|0)>((c[h>>2]|0)-f|0)){e=lb[c[m>>2]&127](f,g)|0;if(!e){a=0;break}b=a+12|0;f=c[j>>2]|0;if((c[b>>2]|0)==(f|0))c[b>>2]=e;b=a+16|0;d=c[b>>2]|0;if(d|0)c[b>>2]=e+(d-f);c[j>>2]=e;c[h>>2]=e+g;e=e+i|0;d=c[l>>2]|0;b=c[k>>2]|0}F3(e|0,d|0,b|0)|0;c[l>>2]=e}return a|0}function BW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=b+12|0;g=b+8|0;while(1){e=c[f>>2]|0;if((e|0)==(c[g>>2]|0)){if(!((eW(b)|0)<<24>>24)){d=0;break}e=c[f>>2]|0}i=a[d>>0]|0;c[f>>2]=e+1;a[e>>0]=i;if(!(a[d>>0]|0)){h=6;break}else d=d+1|0}if((h|0)==6){i=b+16|0;d=c[i>>2]|0;c[i>>2]=c[f>>2]}return d|0}function CW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c[b+352>>2]|0;j=n+80|0;k=n+92|0;l=n+88|0;m=n+60|0;n=n+96|0;i=d+4|0;h=c[d>>2]|0;a:while(1){switch(a[h>>0]|0){case 0:{e=1;break a}case 58:{g=c[d>>2]|0;while(1){e=c[k>>2]|0;f=(e|0)==(c[l>>2]|0);if((g|0)==(h|0))break;if(f){if(!((eW(j)|0)<<24>>24)){e=0;break a}e=c[k>>2]|0}f=a[g>>0]|0;c[k>>2]=e+1;a[e>>0]=f;g=g+1|0}if(f){if(!((eW(j)|0)<<24>>24)){e=0;break a}e=c[k>>2]|0}c[k>>2]=e+1;a[e>>0]=0;e=YV(b,m,c[n>>2]|0,8)|0;if(!e){e=0;break a}f=c[n>>2]|0;if((c[e>>2]|0)==(f|0))c[n>>2]=c[k>>2];else c[k>>2]=f;c[i>>2]=e;break}default:{}}h=h+1|0}return e|0}function DW(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;k=a[f>>0]|0;i=c[d>>2]|0;h=(i|0)==0;do if(!(k<<24>>24))if(h){m=0;j=11}else h=28;else if(((!h?(a[i>>0]|0)==120:0)?(a[i+1>>0]|0)==109:0)?(a[i+2>>0]|0)==108:0){h=a[i+3>>0]|0;if((h<<24>>24==110?(a[i+4>>0]|0)==115:0)?(a[i+5>>0]|0)==0:0){h=39;break}m=h<<24>>24==0&1;j=11}else{m=0;j=11}while(0);a:do if((j|0)==11){l=m<<24>>24!=0;h=1;i=1;n=0;while(1){j=i<<24>>24!=0;if(!(k<<24>>24))break;do if(j){if((n|0)<=36?k<<24>>24==(a[139175+n>>0]|0):0)break;i=0}else i=0;while(0);do if(!(l|h<<24>>24==0)){if((n|0)<=29?k<<24>>24==(a[139212+n>>0]|0):0)break;h=0}while(0);k=n+1|0;n=k;k=a[f+k>>0]|0}if((m&255|0)!=(j&(n|0)==36&1|0)){h=l?38:40;break}if(!(h<<24>>24!=0&(n|0)==29)){o=b+468|0;n=n+((a[o>>0]|0)!=0&1)|0;h=b+372|0;j=c[h>>2]|0;do if(!j){h=b+12|0;i=kb[c[h>>2]&63](28)|0;if(!i){h=1;break a}j=n+24|0;m=kb[c[h>>2]&63](j)|0;c[i+16>>2]=m;if(!m){tb[c[b+20>>2]&127](i);h=1;break a}else{c[i+24>>2]=j;j=i;break}}else{i=j+24|0;if((n|0)>(c[i>>2]|0)){k=j+16|0;l=n+24|0;m=lb[c[b+16>>2]&127](c[k>>2]|0,l)|0;if(!m){h=1;break a}c[k>>2]=m;c[i>>2]=l}c[h>>2]=c[j+4>>2]}while(0);c[j+20>>2]=n;i=j+16|0;F3(c[i>>2]|0,f|0,n|0)|0;h=a[o>>0]|0;if(h<<24>>24)a[(c[i>>2]|0)+(n+-1)>>0]=h;c[j>>2]=d;c[j+12>>2]=e;i=d+4|0;c[j+8>>2]=c[i>>2];if((a[f>>0]|0)==0?((c[b+352>>2]|0)+152|0)==(d|0):0)h=0;else h=j;c[i>>2]=h;c[j+4>>2]=c[g>>2];c[g>>2]=j;if((e|0)!=0?(p=c[b+100>>2]|0,(p|0)!=0):0){vb[p&127](c[b+4>>2]|0,c[d>>2]|0,c[i>>2]|0?f:0);h=0}else h=0}else h=40}while(0);return h|0}function EW(a,b){a=a|0;b=b|0;var d=0;d=b;c[d>>2]=0;c[d+4>>2]=0;b=b+8|0;c[b>>2]=KW(a)|0;c[b+4>>2]=0;return}function FW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=b;g=c[d+4>>2]^1936682341;e=a;c[e>>2]=c[d>>2]^1886610805;c[e+4>>2]=g;e=b+8|0;g=e;d=c[g+4>>2]^1685025377;f=a+8|0;c[f>>2]=c[g>>2]^1852075885;c[f+4>>2]=d;f=b;b=c[f+4>>2]^1819895653;d=a+16|0;c[d>>2]=c[f>>2]^1852142177;c[d+4>>2]=b;d=c[e+4>>2]^1952801890;b=a+24|0;c[b>>2]=c[e>>2]^2037671283;c[b+4>>2]=d;c[a+40>>2]=a+32;b=a+48|0;c[b>>2]=0;c[b+4>>2]=0;return}function GW(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0;n=e+f|0;o=b+40|0;p=b+40|0;q=b+32|0;r=b+33|0;s=b+34|0;t=b+35|0;h=b+36|0;i=b+37|0;j=b+38|0;k=b+39|0;l=b+24|0;m=b+48|0;f=e;do{while(1){g=c[o>>2]|0;if(f>>>0>=n>>>0){e=0;break}if(g>>>0>=p>>>0){e=1;break}e=a[f>>0]|0;c[o>>2]=g+1;a[g>>0]=e;f=f+1|0}if(g>>>0<p>>>0)break;A=d[q>>0]|0;B=A3(d[r>>0]|0|0,0,8)|0;g=z;y=A3(d[s>>0]|0|0,0,16)|0;g=g|z;w=A3(d[t>>0]|0|0,0,24)|0;g=g|z|(d[h>>0]|0);u=A3(d[i>>0]|0|0,0,40)|0;g=g|z;x=A3(d[j>>0]|0|0,0,48)|0;g=g|z;v=A3(d[k>>0]|0|0,0,56)|0;v=B|A|y|w|u|x|v;g=g|z;x=l;u=g^c[x+4>>2];w=l;c[w>>2]=v^c[x>>2];c[w+4>>2]=u;JW(b,2);w=b;g=c[w+4>>2]^g;u=b;c[u>>2]=c[w>>2]^v;c[u+4>>2]=g;c[o>>2]=q;u=m;u=s3(c[u>>2]|0,c[u+4>>2]|0,8,0)|0;g=m;c[g>>2]=u;c[g+4>>2]=z}while(e);return}function HW(b){b=b|0;var c=0;c=0;while(1){if(!(a[b>>0]|0))break;c=c+1|0;b=b+1|0}return c|0}function IW(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0;f=a+32|0;h=(c[a+40>>2]|0)-f|0;e=a+48|0;e=s3(c[e>>2]|0,c[e+4>>2]|0,h|0,0)|0;e=A3(e|0,z|0,56)|0;b=z;switch(h<<24>>24|0){case 7:{e=A3(d[a+38>>0]|0|0,0,48)|0|e;b=z|b;g=3;break}case 6:{g=3;break}case 5:{g=4;break}case 4:{g=5;break}case 3:{g=6;break}case 2:{g=7;break}case 1:{g=8;break}default:{}}if((g|0)==3){h=A3(d[a+37>>0]|0|0,0,40)|0;e=h|e;b=z|b;g=4}if((g|0)==4){b=d[a+36>>0]|0|b;g=5}if((g|0)==5){h=A3(d[a+35>>0]|0|0,0,24)|0;e=h|e;b=z|b;g=6}if((g|0)==6){h=A3(d[a+34>>0]|0|0,0,16)|0;e=h|e;b=z|b;g=7}if((g|0)==7){h=A3(d[a+33>>0]|0|0,0,8)|0;b=z|b;e=h|e;g=8}if((g|0)==8)e=e|(d[f>>0]|0);h=a+24|0;i=h;g=c[i+4>>2]^b;f=h;c[f>>2]=c[i>>2]^e;c[f+4>>2]=g;JW(a,2);f=a;b=c[f+4>>2]^b;g=a;c[g>>2]=c[f>>2]^e;c[g+4>>2]=b;g=a+16|0;b=g;e=c[b+4>>2]|0;f=g;c[f>>2]=c[b>>2]^255;c[f+4>>2]=e;JW(a,4);f=a;a=a+8|0;z=c[a+4>>2]^c[f+4>>2]^c[g+4>>2]^c[h+4>>2];return c[a>>2]^c[f>>2]^c[g>>2]^c[h>>2]|0}function JW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=a+8|0;f=a+24|0;g=a+16|0;d=0;while(1){if((d|0)>=(b|0))break;h=e;n=c[h>>2]|0;h=c[h+4>>2]|0;o=a;o=s3(c[o>>2]|0,c[o+4>>2]|0,n|0,h|0)|0;k=z;m=A3(n|0,h|0,13)|0;l=z;h=z3(n|0,h|0,51)|0;h=(m|h)^o;l=(l|z)^k;m=f;n=c[m>>2]|0;m=c[m+4>>2]|0;j=g;j=s3(c[j>>2]|0,c[j+4>>2]|0,n|0,m|0)|0;i=z;q=A3(n|0,m|0,16)|0;p=z;m=z3(n|0,m|0,48)|0;m=(q|m)^j;p=(p|z)^i;o=s3(k|0,o|0,m|0,p|0)|0;k=z;q=a;c[q>>2]=o;c[q+4>>2]=k;q=A3(m|0,p|0,21)|0;n=z;p=z3(m|0,p|0,43)|0;m=f;c[m>>2]=(q|p)^o;c[m+4>>2]=(n|z)^k;i=s3(j|0,i|0,h|0,l|0)|0;j=z;m=A3(h|0,l|0,17)|0;k=z;l=z3(h|0,l|0,47)|0;h=e;c[h>>2]=(m|l)^i;c[h+4>>2]=(k|z)^j;h=g;c[h>>2]=j;c[h+4>>2]=i;d=d+1|0}return}function KW(a){a=a|0;var b=0;while(1){b=c[a+472>>2]|0;if(!b)break;else a=b}return c[a+492>>2]|0}function LW(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;L=l;l=l+16|0;I=L;J=L+4|0;K=c[b+352>>2]|0;o=d+16|0;p=d+40|0;q=b+144|0;r=b+284|0;s=e<<24>>24==0;t=h+12|0;v=h+16|0;w=h+8|0;x=d+44|0;y=d+64|0;z=b+436|0;A=b+452|0;B=b+448|0;C=(K+80|0)==(h|0);D=b+268|0;E=K+130|0;F=K+129|0;G=b+296|0;H=b+224|0;i=0;a:while(1){b:while(1){switch(ob[c[o>>2]&127](d,f,g,I)|0){case -4:{i=0;n=61;break a}case 0:{n=4;break a}case -1:{n=6;break a}case 6:{n=21;break b}case -3:{n=22;break b}case 7:case 39:{n=23;break b}case 10:{j=lb[c[p>>2]&127](d,f)|0;c:do if((j|0)<0)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;j=1;i=14}else{j=1;i=14}else{if(s&(j|0)==32){k=c[t>>2]|0;if((c[v>>2]|0)==(k|0)){j=4;break}if((a[k+-1>>0]|0)==32){j=4;break}}m=gX(j,J)|0;k=0;while(1){if((k|0)>=(m|0)){j=0;break c}j=c[t>>2]|0;if((j|0)==(c[w>>2]|0)){if(!((eW(h)|0)<<24>>24)){j=1;i=1;break c}j=c[t>>2]|0}M=a[J+k>>0]|0;c[t>>2]=j+1;a[j>>0]=M;k=k+1|0}}while(0);switch(j&7){case 4:case 0:break b;default:{}}break}case 9:{j=c[y>>2]|0;j=(nb[c[x>>2]&63](d,f+j|0,(c[I>>2]|0)+(0-j)|0)|0)&255;if(j<<24>>24){n=31;break b}j=c[y>>2]|0;j=WV(z,d,f+j|0,(c[I>>2]|0)+(0-j)|0)|0;if(!j){i=1;n=61;break a}m=YV(b,K,j,0)|0;c[B>>2]=c[A>>2];do if(C){if(!(c[D>>2]|0))if(!m)break b;else break;if(!(a[E>>0]|0)){j=(m|0)!=0;if(!(a[F>>0]|0)){n=45;break}else{u=j;n=47;break}}else{j=(m|0)!=0;if(!(c[G>>2]|0)){n=45;break}else{u=j;n=47;break}}}else if(!(a[F>>0]|0))if(!m){i=11;n=61;break a}else{n=46;break}else{j=(m|0)!=0;if(!(a[E>>0]|0)){u=j;n=47;break}else{n=45;break}}while(0);if((n|0)==45)if(j)n=46;else{i=11;n=61;break a}else if((n|0)==47?(n=0,!u):0)break b;if((n|0)==46?(n=0,(a[m+34>>0]|0)==0):0){i=24;n=61;break a}k=m+32|0;if(a[k>>0]|0){n=49;break a}if(c[m+28>>2]|0){n=52;break a}j=c[m+4>>2]|0;if(!j){n=55;break a}m=j+(c[m+8>>2]|0)|0;a[k>>0]=1;m=LW(b,c[H>>2]|0,e,j,m,h)|0;a[k>>0]=0;j=(m|0)==0;if(j)break b;else{j=(j^1)&1;i=m}break}default:{n=58;break a}}if(j)break a}if((n|0)==21){n=0;if(!(cW(h,d,f,c[I>>2]|0)|0)){i=1;n=61;break}}else if((n|0)==22){c[I>>2]=f+(c[y>>2]|0);n=23}else if((n|0)==31){n=0;f=c[t>>2]|0;if((f|0)==(c[w>>2]|0)){if(!((eW(h)|0)<<24>>24)){i=1;n=61;break}f=c[t>>2]|0}c[t>>2]=f+1;a[f>>0]=j}do if((n|0)==23){n=0;f=c[t>>2]|0;if(s){if((c[v>>2]|0)==(f|0))break;if((a[f+-1>>0]|0)==32)break}if((f|0)==(c[w>>2]|0)){if(!((eW(h)|0)<<24>>24)){i=1;n=61;break a}f=c[t>>2]|0}c[t>>2]=f+1;a[f>>0]=32}while(0);f=c[I>>2]|0}if((n|0)==4)if((c[q>>2]|0)==(d|0)){c[r>>2]=c[I>>2];i=4;n=61}else{i=4;n=61}else if((n|0)==6)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=4;n=61}else{i=4;n=61}else if((n|0)==49)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=12;n=61}else{i=12;n=61}else if((n|0)==52)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=15;n=61}else{i=15;n=61}else if((n|0)==55)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=16;n=61}else{i=16;n=61}else if((n|0)==58)if((c[q>>2]|0)==(d|0)){c[r>>2]=f;i=23;n=61}else{i=23;n=61}l=L;return i|0}function MW(a){a=a|0;var b=0;b=a+8|0;return ((a|0)<1?0:(b|0)>0?b:0)|0}function NW(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+80|0;d=c+16|0;e=c;EW(a,e);FW(d,e);GW(d,b,HW(b)|0);b=IW(d)|0;l=c;return b|0}function OW(b,c){b=b|0;c=c|0;var d=0;while(1){d=a[b>>0]|0;if(d<<24>>24!=(a[c>>0]|0)){c=0;break}if(!(d<<24>>24)){c=1;break}c=c+1|0;b=b+1|0}return c|0}function PW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+1040|0;i=k;f=c[b+124>>2]|0;a:do if(!f)e=18;else{e=0;while(1){if((e|0)==256)break;c[i+(e<<2)>>2]=-1;e=e+1|0}g=i+1028|0;c[g>>2]=0;j=i+1024|0;c[j>>2]=0;h=i+1032|0;c[h>>2]=0;do if(nb[f&63](c[b+244>>2]|0,d,i)|0){f=c[b+12>>2]|0;e=hX()|0;e=kb[f&63](e)|0;c[b+236>>2]=e;if(!e){e=c[h>>2]|0;if(!e)e=1;else{tb[e&127](c[j>>2]|0);e=1}}else{e=ob[(a[b+232>>0]<<24>>24?65:64)&127](e,i,c[g>>2]|0,c[j>>2]|0)|0;if(!e)break;c[b+240>>2]=c[j>>2];c[b+248>>2]=c[h>>2];c[b+144>>2]=e;e=0}break a}while(0);e=c[h>>2]|0;if(e|0)tb[e&127](c[j>>2]|0);e=18}while(0);l=k;return e|0}function QW(b,d){b=b|0;d=d|0;a[b+4>>0]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b>>2]=0;c[b+16>>2]=d;return}function RW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;l=c[b+352>>2]|0;m=b+424|0;n=b+420|0;o=b+412|0;p=b+428|0;q=l+152|0;r=b+368|0;j=l+60|0;k=l+80|0;a:while(1){h=d;b:while(1){if(!(a[d>>0]|0)){d=1;break a}f=a[h>>0]|0;switch(f<<24>>24){case 0:case 12:{s=5;break b}case 61:break b;default:{}}e=c[m>>2]|0;if((e|0)==(c[n>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break a}e=c[m>>2]|0;f=a[h>>0]|0}c[m>>2]=e+1;a[e>>0]=f;h=h+1|0}if((s|0)==5){s=0;d=c[m>>2]|0;if((d|0)==(c[n>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break}d=c[m>>2]|0}c[m>>2]=d+1;a[d>>0]=0;d=YV(b,l,c[p>>2]|0,0)|0;if(d|0)a[d+32>>0]=1;d=(a[h>>0]|0)==0?h:h+1|0;c[m>>2]=c[p>>2];continue}d=c[m>>2]|0;if((c[p>>2]|0)==(d|0))f=q;else{if((d|0)==(c[n>>2]|0)){if(!((eW(o)|0)<<24>>24)){d=0;break}d=c[m>>2]|0}c[m>>2]=d+1;a[d>>0]=0;f=YV(b,j,c[p>>2]|0,8)|0;if(!f){d=0;break}e=c[f>>2]|0;i=c[p>>2]|0;d=i;if((e|0)==(i|0)){i=BW(k,e)|0;c[f>>2]=i;if(!i){d=0;break}d=c[p>>2]|0}c[m>>2]=d}c:while(1){i=h+1|0;e=a[i>>0]|0;g=(d|0)==(c[n>>2]|0);switch(e<<24>>24){case 0:case 12:break c;default:{}}if(g){if(!((eW(o)|0)<<24>>24)){d=0;break a}d=c[m>>2]|0;e=a[i>>0]|0}c[m>>2]=d+1;a[d>>0]=e;h=i;d=c[m>>2]|0}if(g){if(!((eW(o)|0)<<24>>24)){d=0;break}d=c[m>>2]|0}c[m>>2]=d+1;a[d>>0]=0;if(DW(b,f,0,c[p>>2]|0,r)|0){d=0;break}c[m>>2]=c[p>>2];d=(a[i>>0]|0)==0?i:h+2|0}return d|0}function SW(a,b){a=a|0;b=b|0;var d=0,e=0;if(a|0?(d=a+4|0,e=(c[d>>2]|0)==(c[a>>2]|0),c[a>>2]=b,e):0)c[d>>2]=b;return}function TW(a,b,d){a=a|0;b=b|0;d=d|0;if(a|0){c[a+52>>2]=b;c[a+56>>2]=d}return}function UW(a,b){a=a|0;b=b|0;if(a|0)c[a+60>>2]=b;return}function VW(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=(b|0)==0;a:do if(!(g|(e|0)<0)?!((d|0)==0&(e|0)!=0):0){h=b+476|0;switch(c[h>>2]|0){case 3:{c[b+280>>2]=33;g=0;break a}case 2:{c[b+280>>2]=36;g=0;break a}case 0:{if((c[b+472>>2]|0)==0?(WW(b)|0)<<24>>24==0:0){c[b+280>>2]=1;g=0;break a}break}default:{}}c[h>>2]=1;if(e|0){g=YW(b,e)|0;if(!g){g=0;break}F3(g|0,d|0,e|0)|0;g=ZW(b,e,f)|0;break}a[b+480>>0]=f;if(!f)g=1;else{g=b+24|0;j=c[g>>2]|0;d=b+292|0;c[d>>2]=j;f=c[b+28>>2]|0;c[b+40>>2]=f;e=b+276|0;f=ob[c[e>>2]&127](b,j,f,g)|0;c[b+280>>2]=f;if(f|0){c[b+288>>2]=c[b+284>>2];c[e>>2]=66;g=0;break}switch(c[h>>2]|0){case 3:{j=c[b+144>>2]|0;xb[c[j+48>>2]&31](j,c[d>>2]|0,c[g>>2]|0,b+404|0);c[d>>2]=c[g>>2];g=2;break a}case 1:case 0:{c[h>>2]=2;g=1;break a}default:{g=1;break a}}}}else i=3;while(0);if((i|0)==3)if(g)g=0;else{c[b+280>>2]=41;g=0}return g|0}function WW(b){b=b|0;var d=0;d=b+492|0;if(!(c[d>>2]|0))c[d>>2]=_W()|0;if(!(a[b+232>>0]|0))b=1;else b=RW(b,139242)|0;return b|0}function XW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return c[a+280>>2]|0}function YW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if(!a)d=0;else{if((b|0)<0){c[a+280>>2]=1;d=0;break}switch(c[a+476>>2]|0){case 3:{c[a+280>>2]=33;d=0;break a}case 2:{c[a+280>>2]=36;d=0;break a}default:{m=a+32|0;j=c[m>>2]|0;n=a+28|0;e=c[n>>2]|0;d=e;if((j-e|0)>=(b|0))break a;p=a+24|0;k=c[p>>2]|0;i=e-k|0;e=i+b|0;if((e|0)<0){c[a+280>>2]=1;d=0;break a}l=a+8|0;f=c[l>>2]|0;q=f;g=k-q|0;h=(g|0)>1024;b=h?1024:g;e=b+e|0;do if((e|0)>(j-q|0)){d=j-k|0;d=(d|0)==0?1024:d;do d=d<<1;while((d|0)<(e|0)&(d|0)>0);if((d|0)<1){c[a+280>>2]=1;d=0;break a}e=kb[c[a+12>>2]&63](d)|0;if(!e){c[a+280>>2]=1;d=0;break a}c[m>>2]=e+d;d=c[p>>2]|0;if(!d){d=e+(c[n>>2]|0)|0;c[n>>2]=d;c[l>>2]=e;o=22;break}else{q=d;o=q-(c[l>>2]|0)|0;o=(o|0)<1024?o:1024;F3(e|0,d+(0-o)|0,(c[n>>2]|0)-q+o|0)|0;tb[c[a+20>>2]&127](c[l>>2]|0);c[l>>2]=e;d=e+((c[n>>2]|0)-(c[p>>2]|0))+o|0;c[n>>2]=d;e=e+o|0;o=22;break}}else if(h){e=g-b|0;G3(f|0,f+e|0,b+i|0)|0;e=0-e|0;d=(c[n>>2]|0)+e|0;c[n>>2]=d;e=(c[p>>2]|0)+e|0;o=22}while(0);if((o|0)==22)c[p>>2]=e;c[a+288>>2]=0;c[a+284>>2]=0;c[a+292>>2]=0;break a}}}while(0);return d|0}function ZW(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a:do if(!b)d=0;else{f=b+476|0;switch(c[f>>2]|0){case 3:{c[b+280>>2]=33;d=0;break a}case 2:{c[b+280>>2]=36;d=0;break a}case 0:{if((c[b+472>>2]|0)==0?(WW(b)|0)<<24>>24==0:0){c[b+280>>2]=1;d=0;break a}break}default:{}}c[f>>2]=1;g=b+24|0;j=c[g>>2]|0;h=b+292|0;c[h>>2]=j;k=b+28|0;i=(c[k>>2]|0)+d|0;c[k>>2]=i;c[b+40>>2]=i;k=b+36|0;c[k>>2]=(c[k>>2]|0)+d;a[b+480>>0]=e;d=b+276|0;i=ob[c[d>>2]&127](b,j,i,g)|0;c[b+280>>2]=i;if(i|0){c[b+288>>2]=c[b+284>>2];c[d>>2]=66;d=0;break}switch(c[f>>2]|0){case 3:{d=2;break}case 1:case 0:{if(!e)d=1;else{c[f>>2]=2;d=1;break a}break}default:d=1}k=c[b+144>>2]|0;xb[c[k+48>>2]&31](k,c[h>>2]|0,c[g>>2]|0,b+404|0);c[h>>2]=c[g>>2]}while(0);return d|0}function _W(){var a=0,b=0,d=0;b=l;l=l+16|0;a=b;if(!($W(a)|0)){d=bX()|0;d=(H1()|0)^d;c[a>>2]=d;a=aX(139296,O(d,2147483647)|0)|0}else a=aX(139283,c[a>>2]|0)|0;l=b;return a|0}function $W(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=X_(139283,0,f)|0;if((e|0)<0)b=0;else{b=0;while(1){g=G1(e,a+b|0,4-b|0)|0;d=g+b|0;if((g|0)>0)if(d>>>0<4)b=d;else{b=1;break}if((c[(O_()|0)>>2]|0)!=4){b=0;break}}X0(e)|0}l=f;return b|0}function aX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=Ta(139361)|0;if(d|0?(b$(d,139381)|0)==0:0){d=c[15686]|0;c[e>>2]=a;c[e+4>>2]=8;c[e+8>>2]=b;c[e+12>>2]=4;g1(d,139383,e)|0}l=f;return b|0}function bX(){var a=0,b=0;b=l;l=l+16|0;a=b;if(!(Ua(a|0,0)|0)){l=b;return c[a+4>>2]|0}else qa(139308,139330,819,139341);return 0}function cX(a){a=a|0;if(!a)a=41;else a=c[a+280>>2]|0;return a|0}function dX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)a=0;else{b=a+284|0;d=c[b>>2]|0;if(d|0?(e=a+292|0,f=c[e>>2]|0,d>>>0>=f>>>0):0){g=c[a+144>>2]|0;xb[c[g+48>>2]&31](g,f,d,a+404|0);c[e>>2]=c[b>>2]}a=(c[a+404>>2]|0)+1|0}return a|0}function eX(a){a=a|0;do switch(a|0){case 41:{a=139420;break}case 1:{a=140692;break}case 2:{a=140679;break}case 3:{a=140662;break}case 4:{a=140630;break}case 5:{a=140615;break}case 6:{a=140597;break}case 7:{a=140582;break}case 8:{a=140562;break}case 9:{a=140534;break}case 10:{a=140499;break}case 11:{a=140482;break}case 12:{a=140455;break}case 13:{a=140435;break}case 14:{a=140397;break}case 15:{a=140370;break}case 16:{a=140328;break}case 17:{a=140281;break}case 18:{a=140264;break}case 19:{a=140213;break}case 20:{a=140190;break}case 21:{a=140144;break}case 22:{a=140117;break}case 23:{a=140066;break}case 24:{a=140030;break}case 25:{a=139978;break}case 26:{a=139933;break}case 27:{a=139918;break}case 28:{a=139892;break}case 29:{a=139854;break}case 30:{a=139822;break}case 31:{a=139789;break}case 32:{a=139755;break}case 33:{a=139738;break}case 34:{a=139717;break}case 35:{a=139701;break}case 36:{a=139684;break}case 37:{a=139640;break}case 38:{a=139560;break}case 39:{a=139501;break}case 40:{a=139437;break}default:a=0}while(0);return a|0}function fX(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;e=c[b>>2]|0;f=0;a:while(1){if(e>>>0<=a>>>0)break;h=e+-1|0;g=d[h>>0]|0;do if((g&248|0)==240)if((f+1|0)>>>0>3){i=5;break a}else f=0;else{if((g&240|0)==224)if((f+1|0)>>>0>2){i=8;break a}else{f=0;break}if((g&224|0)==192)if((f+1|0)>>>0>1){i=11;break a}else{f=0;break}else if(!(g&128))break a;else break}while(0);e=h;f=f+1|0}if((i|0)==5)e=e+3|0;else if((i|0)==8)e=e+2|0;else if((i|0)==11)e=e+1|0;c[b>>2]=e;return}function gX(b,c){b=b|0;c=c|0;do if((b|0)>=0){if((b|0)<128){a[c>>0]=b;b=1;break}if((b|0)<2048){a[c>>0]=b>>>6|192;a[c+1>>0]=b&63|128;b=2;break}if((b|0)<65536){a[c>>0]=b>>>12|224;a[c+1>>0]=b>>>6&63|128;a[c+2>>0]=b&63|128;b=3;break}if((b|0)<1114112){a[c>>0]=b>>>18|240;a[c+1>>0]=b>>>12&63|128;a[c+2>>0]=b>>>6&63|128;a[c+3>>0]=b&63|128;b=4}else b=0}else b=0;while(0);return b|0}function hX(){return 1908}function iX(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;i=0;while(1){if((i|0)==364){i=0;break}a[e+i>>0]=a[56472+i>>0]|0;i=i+1|0}a:while(1){if((i|0)>=128){j=5;break}switch(a[56544+i>>0]|0){case 0:case 28:break;default:if((c[f+(i<<2)>>2]|0)!=(i|0)){e=0;break a}}i=i+1|0}b:do if((j|0)==5){q=e+72|0;m=e+372|0;n=e+884|0;o=(g|0)==0;l=0;while(1){if((l|0)>=256)break;p=c[f+(l<<2)>>2]|0;do if((p|0)==-1){a[q+l>>0]=1;b[m+(l<<1)>>1]=-1;a[n+(l<<2)>>0]=1;a[n+(l<<2)+1>>0]=0}else{if((p|0)<0){if(o|(p|0)<-4){e=0;break b}a[q+l>>0]=3-p;a[n+(l<<2)>>0]=0;b[m+(l<<1)>>1]=0;break}if((p|0)<128){i=a[56544+p>>0]|0;switch(i<<24>>24){case 0:case 28:break;default:if((p|0)!=(l|0)){e=0;break b}}a[q+l>>0]=i;a[n+(l<<2)>>0]=1;a[n+(l<<2)+1>>0]=p;b[m+(l<<1)>>1]=(p|0)==0?-1:p&65535;break}if((jX(p)|0)<0){a[q+l>>0]=0;b[m+(l<<1)>>1]=-1;a[n+(l<<2)>>0]=1;a[n+(l<<2)+1>>0]=0;break}if((p|0)>65535){e=0;break b}i=p>>>8;j=p>>>5&7;k=1<<(p&31);if(!(c[56836+((d[140706+i>>0]<<3|j)<<2)>>2]&k))a[q+l>>0]=c[56836+((d[140962+i>>0]<<3|j)<<2)>>2]&k|0?26:28;else a[q+l>>0]=22;a[n+(l<<2)>>0]=gX(p,n+(l<<2)+1|0)|0;b[m+(l<<1)>>1]=p}while(0);l=l+1|0}c[e+368>>2]=h;c[e+364>>2]=g;if(!o){c[e+328>>2]=106;c[e+332>>2]=106;c[e+336>>2]=106;c[e+340>>2]=107;c[e+344>>2]=107;c[e+348>>2]=107;c[e+352>>2]=108;c[e+356>>2]=108;c[e+360>>2]=108}c[e+56>>2]=13;c[e+60>>2]=14}while(0);return e|0}function jX(b){b=b|0;var c=0;switch(b>>8|0){case 223:case 222:case 221:case 220:case 219:case 218:case 217:case 216:{b=-1;break}case 0:{if(!(a[56544+b>>0]|0))b=-1;else c=4;break}case 255:{if((b|1|0)==65535)b=-1;else c=4;break}default:c=4}return b|0}function kX(a,b){a=a|0;b=b|0;a=lb[c[a+364>>2]&127](c[a+368>>2]|0,b)|0;if(a>>>0>65535)a=0;else a=c[56836+(((d[140962+(a>>>8)>>0]|0)<<3|a>>>5&7)<<2)>>2]&1<<(a&31);return a|0}function lX(a,b){a=a|0;b=b|0;a=lb[c[a+364>>2]&127](c[a+368>>2]|0,b)|0;if(a>>>0>65535)a=0;else a=c[56836+(((d[140706+(a>>>8)>>0]|0)<<3|a>>>5&7)<<2)>>2]&1<<(a&31);return a|0}function mX(a,b){a=a|0;b=b|0;a=lb[c[a+364>>2]&127](c[a+368>>2]|0,b)|0;if(a>>>0>65535)a=1;else a=(jX(a)|0)>>>31;return a|0}function nX(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;m=q;n=b+364|0;o=b+884|0;p=b+368|0;k=b+72|0;while(1){i=c[e>>2]|0;if((i|0)==(f|0)){h=0;break}r=d[i>>0]|0;j=o+(r<<2)+1|0;r=a[o+(r<<2)>>0]|0;b=r<<24>>24;if(!(r<<24>>24)){b=gX(lb[c[n>>2]&127](c[p>>2]|0,i)|0,m)|0;if((b|0)>(h-(c[g>>2]|0)|0)){h=2;break}i=c[e>>2]|0;j=m;i=i+((d[k+(d[i>>0]|0)>>0]|0)+-3)|0}else{if((h-(c[g>>2]|0)|0)<(b|0)){h=2;break}i=i+1|0}c[e>>2]=i;F3(c[g>>2]|0,j|0,b|0)|0;c[g>>2]=(c[g>>2]|0)+b}l=q;return h|0}function oX(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=a+372|0;n=a+364|0;o=a+368|0;l=a+72|0;while(1){k=c[e>>2]|0;a=k>>>0<f>>>0;i=c[g>>2]|0;if(!(a&i>>>0<h>>>0))break;a=b[m+((d[k>>0]|0)<<1)>>1]|0;if(!(a<<16>>16)){a=(lb[c[n>>2]&127](c[o>>2]|0,k)|0)&65535;i=c[e>>2]|0;j=(d[l+(d[i>>0]|0)>>0]|0)+-3|0}else{j=1;i=k}c[e>>2]=i+j;k=c[g>>2]|0;c[g>>2]=k+2;b[k>>1]=a}return ((i|0)!=(h|0)|a^1?0:2)|0}function pX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;a:do if(e>>>0<f>>>0){n=b+72|0;do switch(a[n+(d[e>>0]|0)>>0]|0){case 12:{h=QX(12,b,e+1|0,f,g)|0;break a}case 13:{h=QX(13,b,e+1|0,f,g)|0;break a}case 2:{h=e+1|0;if((f-h|0)<=0){h=-1;break a}switch(a[n+(d[h>>0]|0)>>0]|0){case 16:{h=RX(b,e+2|0,f,g)|0;break a}case 15:{h=MX(b,e+2|0,f,g)|0;break a}case 7:case 6:case 5:case 29:case 24:case 22:{c[g>>2]=e;h=29;break a}default:{c[g>>2]=h;h=0;break a}}}case 9:{if((e+1|0)==(f|0)){c[g>>2]=f;h=-15;break a}else k=3;break}case 10:case 21:{k=3;break}case 30:{h=GX(b,e+1|0,f,g)|0;break a}case 35:{c[g>>2]=e+1;h=38;break a}case 20:{c[g>>2]=e+1;h=25;break a}case 4:{i=e+1|0;h=f-i|0;if((h|0)<=0){h=-26;break a}if((a[i>>0]|0)==93){if((h|0)<=1){h=-1;break a}if((a[e+2>>0]|0)==62){c[g>>2]=e+3;h=34;break a}}c[g>>2]=i;h=26;break a}case 31:{c[g>>2]=e+1;h=23;break a}case 32:{h=e+1|0;if((f-h|0)<=0){h=-24;break a}switch(a[n+(d[h>>0]|0)>>0]|0){case 33:{c[g>>2]=e+2;h=36;break a}case 15:{c[g>>2]=e+2;h=35;break a}case 34:{c[g>>2]=e+2;h=37;break a}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{c[g>>2]=h;h=24;break a}default:{c[g>>2]=h;h=0;break a}}}case 36:{c[g>>2]=e+1;h=21;break a}case 11:{c[g>>2]=e+1;h=17;break a}case 19:{h=SX(b,e+1|0,f,g)|0;break a}case 5:{if((f-e|0)<2){h=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0))if(!(lb[c[b+328>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else{h=19;i=2}else{h=18;i=2}break}case 6:{if((f-e|0)<3){h=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0))if(!(lb[c[b+332>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else{h=19;i=3}else{h=18;i=3}break}case 7:{if((f-e|0)<4){h=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0))if(!(lb[c[b+336>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else{h=19;i=4}else{h=18;i=4}break}case 24:case 22:{h=18;i=1;break}case 23:case 27:case 26:case 25:{h=19;i=1;break}default:{c[g>>2]=e;h=0;break a}}while(0);if((k|0)==3){j=f;i=e;b:while(1){h=i;i=i+1|0;if((j-i|0)<=0){k=18;break}switch(a[n+(d[i>>0]|0)>>0]|0){case 10:case 21:continue b;case 9:break;default:{k=17;break b}}if((h+2|0)==(f|0)){k=17;break}}if((k|0)==17){c[g>>2]=i;h=15;break}else if((k|0)==18){c[g>>2]=i;h=15;break}}k=b+328|0;l=b+332|0;m=b+336|0;j=e+i|0;c:while(1){i=f-j|0;if((i|0)<=0){k=99;break}switch(a[n+(d[j>>0]|0)>>0]|0){case 29:{k=56;break c}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{k=70;break c}case 34:{k=89;break c}case 33:{k=92;break c}case 15:{k=95;break c}case 27:case 26:case 25:case 24:case 22:{e=h;j=j+1|0;h=e;continue c}case 5:{if((i|0)<2){h=-2;break a}if(!(lb[c[k>>2]&127](b,j)|0)){k=60;break c}e=h;j=j+2|0;h=e;continue c}case 6:{if((i|0)<3){h=-2;break a}if(!(lb[c[l>>2]&127](b,j)|0)){k=64;break c}e=h;j=j+3|0;h=e;continue c}case 7:{if((i|0)<4){h=-2;break a}if(!(lb[c[m>>2]&127](b,j)|0)){k=68;break c}e=h;j=j+4|0;h=e;continue c}case 23:{i=j+1|0;switch(h&63){case 18:break;case 41:{h=19;j=i;continue c}default:{e=h;j=i;h=e;continue c}}h=f-i|0;if((h|0)<=0){h=-1;break a}switch(a[n+(d[i>>0]|0)>>0]|0){case 29:{k=74;break c}case 27:case 26:case 25:case 24:case 22:{h=41;j=j+2|0;continue c}case 5:{if((h|0)<2){h=-2;break a}if(!(lb[c[k>>2]&127](b,i)|0)){k=78;break c}h=41;j=j+3|0;continue c}case 6:{if((h|0)<3){h=-2;break a}if(!(lb[c[l>>2]&127](b,i)|0)){k=82;break c}h=41;j=j+4|0;continue c}case 7:{if((h|0)<4){h=-2;break a}if(!(lb[c[m>>2]&127](b,i)|0)){k=86;break c}h=41;j=j+5|0;continue c}default:{h=19;j=i;continue c}}}default:{k=98;break c}}}switch(k|0){case 56:{c[g>>2]=j;h=0;break a}case 60:{c[g>>2]=j;h=0;break a}case 64:{c[g>>2]=j;h=0;break a}case 68:{c[g>>2]=j;h=0;break a}case 70:{c[g>>2]=j;break a}case 74:{c[g>>2]=i;h=0;break a}case 78:{c[g>>2]=i;h=0;break a}case 82:{c[g>>2]=i;h=0;break a}case 86:{c[g>>2]=i;h=0;break a}case 89:if((h|0)==19){c[g>>2]=j;h=0;break a}else{c[g>>2]=j+1;h=32;break a}case 92:if((h|0)==19){c[g>>2]=j;h=0;break a}else{c[g>>2]=j+1;h=31;break a}case 95:if((h|0)==19){c[g>>2]=j;h=0;break a}else{c[g>>2]=j+1;h=30;break a}case 98:{c[g>>2]=j;h=0;break a}case 99:{h=0-h|0;break a}}}else h=-4;while(0);return h|0}function qX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a:do if(e>>>0<f>>>0){m=b+72|0;b:do switch(a[m+(d[e>>0]|0)>>0]|0){case 2:{h=JX(b,e+1|0,f,g)|0;break a}case 3:{h=FX(b,e+1|0,f,g)|0;break a}case 9:{h=e+1|0;if((f-h|0)<=0){h=-3;break a}c[g>>2]=(a[m+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break a}case 10:{c[g>>2]=e+1;h=7;break a}case 4:{i=e+1|0;if((f-i|0)<=0){h=-5;break a}if((a[i>>0]|0)==93){h=e+2|0;if((f-h|0)<=0){h=-5;break a}if((a[h>>0]|0)==62){c[g>>2]=h;h=0;break a}else h=f}else h=f;break}case 5:{h=f;if((h-e|0)<2){h=-2;break a}if(!(lb[c[b+352>>2]&127](b,e)|0)){i=e+2|0;break b}else{c[g>>2]=e;h=0;break a}}case 6:{h=f;if((h-e|0)<3){h=-2;break a}if(!(lb[c[b+356>>2]&127](b,e)|0)){i=e+3|0;break b}else{c[g>>2]=e;h=0;break a}}case 7:{h=f;if((h-e|0)<4){h=-2;break a}if(!(lb[c[b+360>>2]&127](b,e)|0)){i=e+4|0;break b}else{c[g>>2]=e;h=0;break a}}case 8:case 1:case 0:{c[g>>2]=e;h=0;break a}default:{i=e+1|0;h=f}}while(0);j=b+352|0;k=b+356|0;l=b+360|0;c:while(1){f=h-i|0;if((f|0)<=0){f=49;break}switch(a[m+(d[i>>0]|0)>>0]|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{f=47;break c}case 5:{if((f|0)<2){f=32;break c}if(lb[c[j>>2]&127](b,i)|0){f=32;break c}i=i+2|0;continue c}case 6:{if((f|0)<3){f=36;break c}if(lb[c[k>>2]&127](b,i)|0){f=36;break c}i=i+3|0;continue c}case 7:{if((f|0)<4){f=40;break c}if(lb[c[l>>2]&127](b,i)|0){f=40;break c}i=i+4|0;continue c}case 4:{if((f|0)<=1){f=47;break c}e=i+1|0;if((a[e>>0]|0)!=93){i=e;continue c}if((f|0)<=2){f=47;break c}i=i+2|0;if((a[i>>0]|0)==62){f=46;break c}else{i=e;continue c}}default:{i=i+1|0;continue c}}}if((f|0)==32){c[g>>2]=i;h=6;break}else if((f|0)==36){c[g>>2]=i;h=6;break}else if((f|0)==40){c[g>>2]=i;h=6;break}else if((f|0)==46){c[g>>2]=i;h=0;break}else if((f|0)==47){c[g>>2]=i;h=6;break}else if((f|0)==49){c[g>>2]=i;h=6;break}}else h=-4;while(0);return h|0}function rX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;a:do if(e>>>0<f>>>0){l=b+72|0;b:do switch(a[l+(d[e>>0]|0)>>0]|0){case 4:{i=e+1|0;h=f;if((h-i|0)<=0){h=-1;break a}if((a[i>>0]|0)==93){f=e+2|0;if((h-f|0)<=0){h=-1;break a}if((a[f>>0]|0)==62){c[g>>2]=e+3;h=40;break a}}break}case 9:{h=e+1|0;if((f-h|0)<=0){h=-1;break a}c[g>>2]=(a[l+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break a}case 10:{c[g>>2]=e+1;h=7;break a}case 5:{h=f;if((h-e|0)<2){h=-2;break a}if(!(lb[c[b+352>>2]&127](b,e)|0)){i=e+2|0;break b}else{c[g>>2]=e;h=0;break a}}case 6:{h=f;if((h-e|0)<3){h=-2;break a}if(!(lb[c[b+356>>2]&127](b,e)|0)){i=e+3|0;break b}else{c[g>>2]=e;h=0;break a}}case 7:{h=f;if((h-e|0)<4){h=-2;break a}if(!(lb[c[b+360>>2]&127](b,e)|0)){i=e+4|0;break b}else{c[g>>2]=e;h=0;break a}}case 8:case 1:case 0:{c[g>>2]=e;h=0;break a}default:{i=e+1|0;h=f}}while(0);e=b+352|0;j=b+356|0;k=b+360|0;c:while(1){f=h-i|0;if((f|0)<=0){f=39;break}switch(a[l+(d[i>>0]|0)>>0]|0){case 4:case 10:case 9:case 8:case 1:case 0:{f=37;break c}case 5:{if((f|0)<2){f=30;break c}if(!(lb[c[e>>2]&127](b,i)|0))f=2;else{f=30;break c}break}case 6:{if((f|0)<3){f=33;break c}if(!(lb[c[j>>2]&127](b,i)|0))f=3;else{f=33;break c}break}case 7:{if((f|0)<4){f=36;break c}if(!(lb[c[k>>2]&127](b,i)|0))f=4;else{f=36;break c}break}default:f=1}i=i+f|0}if((f|0)==30){c[g>>2]=i;h=6;break}else if((f|0)==33){c[g>>2]=i;h=6;break}else if((f|0)==36){c[g>>2]=i;h=6;break}else if((f|0)==37){c[g>>2]=i;h=6;break}else if((f|0)==39){c[g>>2]=i;h=6;break}}else h=-4;while(0);return h|0}function sX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=b+72|0;k=b+352|0;l=b+356|0;m=b+360|0;i=0;a:while(1){h=f-e|0;if((h|0)<=0){f=-1;break}switch(a[j+(d[e>>0]|0)>>0]|0){case 8:case 1:case 0:{n=16;break a}case 5:{if((h|0)<2){f=-2;break a}if(lb[c[k>>2]&127](b,e)|0){n=6;break a}h=i;e=e+2|0;i=h;continue a}case 6:{if((h|0)<3){f=-2;break a}if(lb[c[l>>2]&127](b,e)|0){n=10;break a}h=i;e=e+3|0;i=h;continue a}case 7:{if((h|0)<4){f=-2;break a}if(lb[c[m>>2]&127](b,e)|0){n=14;break a}h=i;e=e+4|0;i=h;continue a}case 2:{h=e+1|0;if((f-h|0)<=0){f=-1;break a}if((a[h>>0]|0)!=33){o=i;e=h;i=o;continue a}h=e+2|0;if((f-h|0)<=0){f=-1;break a}o=(a[h>>0]|0)==91;i=i+(o&1)|0;e=o?e+3|0:h;continue a}case 4:{h=e+1|0;if((f-h|0)<=0){f=-1;break a}if((a[h>>0]|0)!=93){o=i;e=h;i=o;continue a}h=e+2|0;if((f-h|0)<=0){f=-1;break a}if((a[h>>0]|0)!=62){o=i;e=h;i=o;continue a}e=e+3|0;if(!i){n=26;break a}i=i+-1|0;continue a}default:{o=i;e=e+1|0;i=o;continue a}}}if((n|0)==6){c[g>>2]=e;f=0}else if((n|0)==10){c[g>>2]=e;f=0}else if((n|0)==14){c[g>>2]=e;f=0}else if((n|0)==16){c[g>>2]=e;f=0}else if((n|0)==26){c[g>>2]=e;f=42}return f|0}function tX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0<f>>>0){k=f;if((k-e|0)>0){l=b+72|0;i=e;a:while(1){if((k-i|0)<=0){j=24;break}switch(a[l+(d[i>>0]|0)>>0]|0){case 3:{j=8;break a}case 2:{j=11;break a}case 10:{j=12;break a}case 9:{j=15;break a}case 21:{j=19;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=1}i=i+h|0}if((j|0)==8)if((i|0)==(e|0)){h=FX(b,e+1|0,f,g)|0;break}else{c[g>>2]=i;h=6;break}else if((j|0)==11){c[g>>2]=i;h=0;break}else if((j|0)==12)if((i|0)==(e|0)){c[g>>2]=e+1;h=7;break}else{c[g>>2]=i;h=6;break}else if((j|0)==15){if((i|0)!=(e|0)){c[g>>2]=i;h=6;break}h=e+1|0;if((k-h|0)<=0){h=-3;break}c[g>>2]=(a[l+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break}else if((j|0)==19)if((i|0)==(e|0)){c[g>>2]=e+1;h=39;break}else{c[g>>2]=i;h=6;break}else if((j|0)==24){c[g>>2]=i;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function uX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0<f>>>0){k=f;if((k-e|0)>0){l=b+72|0;i=e;a:while(1){if((k-i|0)<=0){j=23;break}switch(a[l+(d[i>>0]|0)>>0]|0){case 3:{j=8;break a}case 30:{j=11;break a}case 10:{j=14;break a}case 9:{j=17;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=1}i=i+h|0}if((j|0)==8)if((i|0)==(e|0)){h=FX(b,e+1|0,f,g)|0;break}else{c[g>>2]=i;h=6;break}else if((j|0)==11)if((i|0)==(e|0)){h=GX(b,e+1|0,f,g)|0;h=(h|0)==22?0:h;break}else{c[g>>2]=i;h=6;break}else if((j|0)==14)if((i|0)==(e|0)){c[g>>2]=e+1;h=7;break}else{c[g>>2]=i;h=6;break}else if((j|0)==17){if((i|0)!=(e|0)){c[g>>2]=i;h=6;break}h=e+1|0;if((k-h|0)<=0){h=-3;break}c[g>>2]=(a[l+(d[h>>0]|0)>>0]|0)==10?e+2|0:h;h=7;break}else if((j|0)==23){c[g>>2]=i;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function vX(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=d;b=c;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){g=6;break}if((f-b|0)<1){b=0;break}if((a[b>>0]|0)!=c<<24>>24){b=0;break}e=e+1|0;b=b+1|0}if((g|0)==6)b=(b|0)==(d|0)&1;return b|0}function wX(b,c){b=b|0;c=c|0;var e=0,f=0;f=b+72|0;b=c;a:while(1){switch(a[f+(d[b>>0]|0)>>0]|0){case 5:{e=2;break}case 6:{e=3;break}case 7:{e=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{e=1;break}default:break a}b=b+e|0}return b-c|0}function xX(b,c){b=b|0;c=c|0;b=b+72|0;a:while(1){switch(a[b+(d[c>>0]|0)>>0]|0){case 21:case 9:case 10:break;default:break a}c=c+1|0}return c|0}function yX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=b+72|0;j=0;k=0;b=1;a:while(1){h=e+1|0;i=a[h>>0]|0;do switch(a[l+(i&255)>>0]|0){case 5:{if(!b)if((k|0)<(f|0)){c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;b=1}else b=1;h=k;i=j;e=e+2|0;k=h;j=i;continue a}case 6:{if(!b)if((k|0)<(f|0)){c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;b=1}else b=1;h=k;i=j;e=e+3|0;k=h;j=i;continue a}case 7:{if(!b)if((k|0)<(f|0)){c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;b=1}else b=1;h=k;i=j;e=e+4|0;k=h;j=i;continue a}case 24:case 22:case 29:{if(b|0){o=b;n=k;i=j;e=h;b=o;k=n;j=i;continue a}if((k|0)>=(f|0)){n=k;o=j;b=1;e=h;k=n;j=o;continue a}c[g+(k<<4)>>2]=h;a[g+(k<<4)+12>>0]=1;n=k;o=j;b=1;e=h;k=n;j=o;continue a}case 12:{if((b|0)!=2){if((k|0)>=(f|0)){o=k;j=12;b=2;e=h;k=o;continue a}c[g+(k<<4)+4>>2]=e+2;o=k;j=12;b=2;e=h;k=o;continue a}if((j|0)!=12){n=k;o=j;b=2;e=h;k=n;j=o;continue a}if((k|0)<(f|0))c[g+(k<<4)+8>>2]=h;j=12;k=k+1|0;b=0;e=h;continue a}case 13:{if((b|0)!=2){if((k|0)>=(f|0)){o=k;j=13;b=2;e=h;k=o;continue a}c[g+(k<<4)+4>>2]=e+2;o=k;j=13;b=2;e=h;k=o;continue a}if((j|0)!=13){n=k;o=j;b=2;e=h;k=n;j=o;continue a}if((k|0)<(f|0))c[g+(k<<4)+8>>2]=h;j=13;k=k+1|0;b=0;e=h;continue a}case 3:{if((k|0)>=(f|0)){i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}a[g+(k<<4)+12>>0]=0;i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}case 21:{switch(b|0){case 1:{n=k;o=j;b=0;e=h;k=n;j=o;continue a}case 2:break;default:{i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}}if((k|0)>=(f|0)){n=k;o=j;b=2;e=h;k=n;j=o;continue a}b=g+(k<<4)+12|0;if(!(a[b>>0]|0)){n=k;o=j;b=2;e=h;k=n;j=o;continue a}if(((i<<24>>24==32?(h|0)!=(c[g+(k<<4)+4>>2]|0):0)?(m=a[e+2>>0]|0,m<<24>>24!=32):0)?(j|0)!=(d[l+(m&255)>>0]|0):0){n=k;o=j;b=2;e=h;k=n;j=o;continue a}a[b>>0]=0;n=k;o=j;b=2;e=h;k=n;j=o;continue a}case 10:case 9:{switch(b|0){case 1:{n=k;o=j;b=0;e=h;k=n;j=o;continue a}case 2:break;default:{i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}}if((k|0)>=(f|0)){n=k;o=j;b=2;e=h;k=n;j=o;continue a}a[g+(k<<4)+12>>0]=0;n=k;o=j;b=2;e=h;k=n;j=o;continue a}case 17:case 11:if((b|0)==2){n=k;o=j;b=2;e=h;k=n;j=o;continue a}else break a;default:{i=b;n=k;o=j;e=h;b=i;k=n;j=o;continue a}}while(0)}return k|0}function zX(b,c){b=b|0;c=c|0;var d=0,e=0;b=c+2|0;d=a[b>>0]|0;a:do if(d<<24>>24==120){d=c+3|0;b=0;while(1){b:while(1){e=a[d>>0]|0;c=e<<24>>24;if(e<<24>>24==59){e=14;break a}switch(c|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{e=7;break b}case 70:case 69:case 68:case 67:case 66:case 65:{e=8;break b}case 102:case 101:case 100:case 99:case 98:case 97:{e=9;break b}default:{}}d=d+1|0}if((e|0)==7){e=0;b=c+-48|b<<4}else if((e|0)==8){e=0;b=(b<<4)+-55+c|0}else if((e|0)==9){e=0;b=(b<<4)+-87+c|0}if((b|0)<1114112)d=d+1|0;else{b=-1;break}}}else{c=b;b=0;while(1){if(d<<24>>24==59){e=14;break a}b=(d<<24>>24)+-48+(b*10|0)|0;if((b|0)>=1114112){b=-1;break a}d=c+1|0;c=d;d=a[d>>0]|0}}while(0);if((e|0)==14)b=jX(b)|0;return b|0}function AX(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do switch(d-c|0){case 2:{if((a[c+1>>0]|0)==116){b=a[c>>0]|0;b=b<<24>>24==108?60:b<<24>>24==103?62:0}else e=14;break}case 3:{if(((a[c>>0]|0)==97?(a[c+1>>0]|0)==109:0)?(a[c+2>>0]|0)==112:0)b=38;else e=14;break}case 4:switch(a[c>>0]|0){case 113:{if((a[c+1>>0]|0)!=117){e=14;break a}if((a[c+2>>0]|0)!=111){e=14;break a}if((a[c+3>>0]|0)==116){b=34;break a}else{e=14;break a}}case 97:{if((a[c+1>>0]|0)!=112){e=14;break a}if((a[c+2>>0]|0)!=111){e=14;break a}if((a[c+3>>0]|0)==115){b=39;break a}else{e=14;break a}}default:{e=14;break a}}default:e=14}while(0);if((e|0)==14)b=0;return b|0}function BX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=b+72|0;i=g+4|0;while(1){if((f-e|0)<=0)break;switch(a[h+(d[e>>0]|0)>>0]|0){case 5:{e=e+2|0;break}case 6:{e=e+3|0;break}case 7:{e=e+4|0;break}case 10:{c[i>>2]=-1;c[g>>2]=(c[g>>2]|0)+1;e=e+1|0;break}case 9:{c[g>>2]=(c[g>>2]|0)+1;b=e+1|0;if((f-b|0)>0)e=(a[h+(d[b>>0]|0)>>0]|0)==10?e+2|0:b;else e=b;c[i>>2]=-1;break}default:e=e+1|0}c[i>>2]=(c[i>>2]|0)+1}return}function CX(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=e+-1|0;b=b+72|0;a:while(1){d=d+1|0;if((g-d|0)<=0){d=1;break}e=a[d>>0]|0;switch(a[b+(e&255)>>0]|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:continue a;case 21:if(e<<24>>24==9){h=7;break a}else continue a;case 22:case 26:{if(e<<24>>24>=0)continue a;break}default:{}}switch(e<<24>>24|0){case 64:case 36:break;default:{h=7;break a}}}if((h|0)==7){c[f>>2]=d;d=0}return d|0}function DX(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;i=h;while(1){j=c[e>>2]|0;if((j|0)==(f|0)){b=0;break}k=d[j>>0]|0;b=c[g>>2]|0;if(!(k&128)){if((b|0)==(h|0)){b=2;break}c[e>>2]=j+1;j=a[j>>0]|0;k=c[g>>2]|0;c[g>>2]=k+1;a[k>>0]=j;continue}else{if((i-b|0)<2){b=2;break}c[g>>2]=b+1;a[b>>0]=k>>>6|192;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=k&63|128;c[e>>2]=(c[e>>2]|0)+1;continue}}return b|0}function EX(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;while(1){a=c[e>>2]|0;i=a>>>0<f>>>0;j=c[g>>2]|0;if(!(i&j>>>0<h>>>0))break;c[e>>2]=a+1;i=d[a>>0]|0;j=c[g>>2]|0;c[g>>2]=j+2;b[j>>1]=i}return ((j|0)!=(h|0)|i^1?0:2)|0}function FX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f;h=k-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{f=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=4;break}case 19:{f=HX(b,e+1|0,f,g)|0;break a}default:{c[g>>2]=e;f=0;break a}}h=b+328|0;i=b+332|0;j=b+336|0;e=e+f|0;b:while(1){f=k-e|0;if((f|0)<=0){f=-1;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{h=18;break b}case 18:{h=29;break b}case 27:case 26:case 25:case 24:case 22:{f=1;break}case 5:{if((f|0)<2){f=-2;break a}if(!(lb[c[h>>2]&127](b,e)|0)){h=21;break b}else f=2;break}case 6:{if((f|0)<3){f=-2;break a}if(!(lb[c[i>>2]&127](b,e)|0)){h=24;break b}else f=3;break}case 7:{if((f|0)<4){f=-2;break a}if(!(lb[c[j>>2]&127](b,e)|0)){h=27;break b}else f=4;break}default:{h=30;break b}}e=e+f|0}if((h|0)==18){c[g>>2]=e;f=0;break}else if((h|0)==21){c[g>>2]=e;f=0;break}else if((h|0)==24){c[g>>2]=e;f=0;break}else if((h|0)==27){c[g>>2]=e;f=0;break}else if((h|0)==29){c[g>>2]=e+1;f=9;break}else if((h|0)==30){c[g>>2]=e;f=0;break}}else f=-1;while(0);return f|0}function GX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=f-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=4;break}case 30:case 9:case 10:case 21:{c[g>>2]=e;f=22;break a}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;e=e+h|0;b:while(1){h=f-e|0;if((h|0)<=0){f=-1;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{h=18;break b}case 18:{h=29;break b}case 27:case 26:case 25:case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,e)|0)){h=21;break b}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,e)|0)){h=24;break b}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,e)|0)){h=27;break b}else h=4;break}default:{h=30;break b}}e=e+h|0}if((h|0)==18){c[g>>2]=e;f=0;break}else if((h|0)==21){c[g>>2]=e;f=0;break}else if((h|0)==24){c[g>>2]=e;f=0;break}else if((h|0)==27){c[g>>2]=e;f=0;break}else if((h|0)==29){c[g>>2]=e+1;f=28;break}else if((h|0)==30){c[g>>2]=e;f=0;break}}else f=-1;while(0);return f|0}function HX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=f;a:do if((i-e|0)>0){h=a[e>>0]|0;if(h<<24>>24==120){b=IX(b,e+1|0,f,g)|0;break}f=b+72|0;if((a[f+(h&255)>>0]|0)!=25){c[g>>2]=e;b=0;break}b:while(1){b=e+1|0;if((i-b|0)<=0){b=-1;break a}switch(a[f+(d[b>>0]|0)>>0]|0){case 25:{e=b;break}case 18:{f=8;break b}default:{f=9;break b}}}if((f|0)==8){c[g>>2]=e+2;b=10;break}else if((f|0)==9){c[g>>2]=b;b=0;break}}else b=-1;while(0);return b|0}function IX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0;a:do if((f-e|0)>0){b=b+72|0;if((a[b+(d[e>>0]|0)>>0]&-2)<<24>>24!=24){c[g>>2]=e;f=0;break}b:while(1){h=e+1|0;if((f-h|0)<=0){f=-1;break a}switch(a[b+(d[h>>0]|0)>>0]|0){case 24:case 25:{e=h;break}case 18:{b=6;break b}default:{b=7;break b}}}if((b|0)==6){c[g>>2]=e+2;f=10;break}else if((b|0)==7){c[g>>2]=h;f=0;break}}else f=-1;while(0);return f|0}function JX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=f;h=q-e|0;a:do if((h|0)>0){p=b+72|0;switch(a[p+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;h=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){h=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else h=2;break}case 6:{if((h|0)<3){h=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else h=3;break}case 7:{if((h|0)<4){h=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;h=0;break a}else h=4;break}case 16:{h=e+1|0;if((q-h|0)<=0){h=-1;break a}switch(a[p+(d[h>>0]|0)>>0]|0){case 27:{h=KX(b,e+2|0,f,g)|0;break a}case 20:{h=LX(e+2|0,f,g)|0;break a}default:{c[g>>2]=h;h=0;break a}}}case 15:{h=MX(b,e+1|0,f,g)|0;break a}case 17:{h=NX(b,e+1|0,f,g)|0;break a}default:{c[g>>2]=e;h=0;break a}}j=b+328|0;k=b+332|0;l=b+336|0;m=b+340|0;n=b+344|0;o=b+348|0;i=0;h=e+h|0;b:while(1){e=q-h|0;if((e|0)<=0){h=-1;break a}c:do switch(a[p+(d[h>>0]|0)>>0]|0){case 29:{r=24;break b}case 10:case 9:case 21:{r=50;break b}case 11:{r=64;break b}case 17:break b;case 27:case 26:case 25:case 24:case 22:{e=1;break}case 5:{if((e|0)<2){h=-2;break a}if(!(lb[c[j>>2]&127](b,h)|0)){r=27;break b}else e=2;break}case 6:{if((e|0)<3){h=-2;break a}if(!(lb[c[k>>2]&127](b,h)|0)){r=30;break b}else e=3;break}case 7:{if((e|0)<4){h=-2;break a}if(!(lb[c[l>>2]&127](b,h)|0)){r=33;break b}else e=4;break}case 23:{if(i|0){r=35;break b}i=h+1|0;e=q-i|0;if((e|0)<=0){h=-1;break a}switch(a[p+(d[i>>0]|0)>>0]|0){case 29:{r=38;break b}case 24:case 22:{i=1;e=2;break c}case 5:{if((e|0)<2){h=-2;break a}if(!(lb[c[m>>2]&127](b,i)|0)){r=42;break b}else{i=1;e=3;break c}}case 6:{if((e|0)<3){h=-2;break a}if(!(lb[c[n>>2]&127](b,i)|0)){r=45;break b}else{i=1;e=4;break c}}case 7:{if((e|0)<4){h=-2;break a}if(!(lb[c[o>>2]&127](b,i)|0)){r=48;break b}else{i=1;e=5;break c}}default:{r=49;break b}}}default:{r=69;break b}}while(0);h=h+e|0}d:switch(r|0){case 24:{c[g>>2]=h;h=0;break a}case 27:{c[g>>2]=h;h=0;break a}case 30:{c[g>>2]=h;h=0;break a}case 33:{c[g>>2]=h;h=0;break a}case 35:{c[g>>2]=h;h=0;break a}case 38:{c[g>>2]=i;h=0;break a}case 42:{c[g>>2]=i;h=0;break a}case 45:{c[g>>2]=i;h=0;break a}case 48:{c[g>>2]=i;h=0;break a}case 49:{c[g>>2]=i;h=0;break a}case 50:{e:while(1){r=0;i=h+1|0;e=q-i|0;if((e|0)<=0){h=-1;break a}switch(a[p+(d[i>>0]|0)>>0]|0){case 11:{h=i;r=64;break d}case 17:{h=i;break d}case 10:case 9:case 21:{h=i;r=50;break}case 29:{r=52;break e}case 24:case 22:{i=2;break e}case 5:{r=53;break e}case 6:{r=56;break e}case 7:{r=59;break e}default:{r=62;break e}}}if((r|0)==52){c[g>>2]=i;h=0;break a}else if((r|0)==53){if((e|0)<2){h=-2;break a}if(!(lb[c[m>>2]&127](b,i)|0)){c[g>>2]=i;h=0;break a}else i=3}else if((r|0)==56){if((e|0)<3){h=-2;break a}if(!(lb[c[n>>2]&127](b,i)|0)){c[g>>2]=i;h=0;break a}else i=4}else if((r|0)==59){if((e|0)<4){h=-2;break a}if(!(lb[c[o>>2]&127](b,i)|0)){c[g>>2]=i;h=0;break a}else i=5}else if((r|0)==62){c[g>>2]=i;h=0;break a}h=OX(b,h+i|0,f,g)|0;break a}case 69:{c[g>>2]=h;h=0;break a}}if((r|0)==64){c[g>>2]=h+1;h=2;break}i=h+1|0;if((q-i|0)>0)if((a[i>>0]|0)==62){c[g>>2]=h+2;h=4;break}else{c[g>>2]=i;h=0;break}else h=-1}else h=-1;while(0);return h|0}function KX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;a:do if((f-e|0)>0){if((a[e>>0]|0)!=45){c[g>>2]=e;f=0;break}h=b+72|0;i=b+352|0;j=b+356|0;k=b+360|0;l=e+1|0;b:while(1){e=f-l|0;if((e|0)<=0){f=-1;break a}switch(a[h+(d[l>>0]|0)>>0]|0){case 8:case 1:case 0:{e=19;break b}case 5:{if((e|0)<2){f=-2;break a}if(lb[c[i>>2]&127](b,l)|0){e=9;break b}l=l+2|0;continue b}case 6:{if((e|0)<3){f=-2;break a}if(lb[c[j>>2]&127](b,l)|0){e=13;break b}l=l+3|0;continue b}case 7:{if((e|0)<4){f=-2;break a}if(lb[c[k>>2]&127](b,l)|0){e=17;break b}l=l+4|0;continue b}case 27:{e=l+1|0;if((f-e|0)<=0){f=-1;break a}if((a[e>>0]|0)==45){e=22;break b}else{l=e;continue b}}default:{l=l+1|0;continue b}}}if((e|0)==9){c[g>>2]=l;f=0;break}else if((e|0)==13){c[g>>2]=l;f=0;break}else if((e|0)==17){c[g>>2]=l;f=0;break}else if((e|0)==19){c[g>>2]=l;f=0;break}else if((e|0)==22){e=l+2|0;if((f-e|0)<=0){f=-1;break}if((a[e>>0]|0)==62){c[g>>2]=l+3;f=13;break}else{c[g>>2]=e;f=0;break}}}else f=-1;while(0);return f|0}function LX(b,d,e){b=b|0;d=d|0;e=e|0;if((d-b|0)>5){d=0;while(1){if((d|0)>=6){d=8;break}if((a[b>>0]|0)!=(a[141218+d>>0]|0)){d=0;break}d=d+1|0;b=b+1|0}c[e>>2]=b}else d=-1;return d|0}function MX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q;o=f;f=o-e|0;a:do if((f|0)>0){n=b+72|0;switch(a[n+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{f=1;break}case 5:{if((f|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=2;break}case 6:{if((f|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=3;break}case 7:{if((f|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else f=4;break}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;f=e+f|0;b:while(1){h=o-f|0;if((h|0)<=0){f=-1;break a}switch(a[n+(d[f>>0]|0)>>0]|0){case 29:{m=17;break b}case 10:case 9:case 21:{m=28;break b}case 15:{m=50;break b}case 27:case 26:case 25:case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,f)|0)){m=20;break b}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,f)|0)){m=23;break b}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,f)|0)){m=26;break b}else h=4;break}default:break b}f=f+h|0}if((m|0)==17){c[g>>2]=f;f=0;break}else if((m|0)==20){c[g>>2]=f;f=0;break}else if((m|0)==23){c[g>>2]=f;f=0;break}else if((m|0)==26){c[g>>2]=f;f=0;break}else if((m|0)==28){if(!(PX(e,f,p)|0)){c[g>>2]=f;f=0;break}i=b+352|0;j=b+356|0;k=b+360|0;h=f+1|0;c:while(1){f=o-h|0;if((f|0)<=0){f=-1;break a}switch(a[n+(d[h>>0]|0)>>0]|0){case 8:case 1:case 0:{m=45;break c}case 5:{if((f|0)<2){f=-2;break a}if(lb[c[i>>2]&127](b,h)|0){m=35;break c}h=h+2|0;continue c}case 6:{if((f|0)<3){f=-2;break a}if(lb[c[j>>2]&127](b,h)|0){m=39;break c}h=h+3|0;continue c}case 7:{if((f|0)<4){f=-2;break a}if(lb[c[k>>2]&127](b,h)|0){m=43;break c}h=h+4|0;continue c}case 15:{f=h+1|0;if((o-f|0)<=0){f=-1;break a}if((a[f>>0]|0)==62){m=48;break c}else{h=f;continue c}}default:{h=h+1|0;continue c}}}if((m|0)==35){c[g>>2]=h;f=0;break}else if((m|0)==39){c[g>>2]=h;f=0;break}else if((m|0)==43){c[g>>2]=h;f=0;break}else if((m|0)==45){c[g>>2]=h;f=0;break}else if((m|0)==48){c[g>>2]=h+2;f=c[p>>2]|0;break}}else if((m|0)==50){if(!(PX(e,f,p)|0)){c[g>>2]=f;f=0;break}h=f+1|0;if((o-h|0)<=0){f=-1;break}if((a[h>>0]|0)==62){c[g>>2]=f+2;f=c[p>>2]|0;break}else f=h}c[g>>2]=f;f=0}else f=-1;while(0);l=q;return f|0}function NX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=f-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=4;break}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;h=e+h|0;b:while(1){e=f-h|0;if((e|0)<=0){f=-1;break a}switch(a[l+(d[h>>0]|0)>>0]|0){case 29:{i=17;break b}case 10:case 9:case 21:{i=27;break b}case 11:{i=32;break b}case 23:case 27:case 26:case 25:case 24:case 22:{e=1;break}case 5:{if((e|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,h)|0)){i=20;break b}else e=2;break}case 6:{if((e|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,h)|0)){i=23;break b}else e=3;break}case 7:{if((e|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,h)|0)){i=26;break b}else e=4;break}default:{i=33;break b}}h=h+e|0}if((i|0)==17){c[g>>2]=h;f=0;break}else if((i|0)==20){c[g>>2]=h;f=0;break}else if((i|0)==23){c[g>>2]=h;f=0;break}else if((i|0)==26){c[g>>2]=h;f=0;break}else if((i|0)==27){c:while(1){e=h+1|0;if((f-e|0)<=0){f=-1;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 10:case 9:case 21:{h=e;i=27;break}case 11:{i=29;break c}default:{i=30;break c}}}if((i|0)==29){c[g>>2]=h+2;f=5;break}else if((i|0)==30){c[g>>2]=e;f=0;break}}else if((i|0)==32){c[g>>2]=h+1;f=5;break}else if((i|0)==33){c[g>>2]=h;f=0;break}}else f=-1;while(0);return f|0}function OX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;v=y;c[v>>2]=e;w=f;r=b+72|0;s=b+328|0;t=b+332|0;u=b+336|0;k=b+340|0;m=b+344|0;n=b+348|0;o=b+352|0;p=b+356|0;q=b+360|0;i=0;a:while(1){h=w-e|0;if((h|0)<=0){e=-1;break}b:do switch(a[r+(d[e>>0]|0)>>0]|0){case 29:{x=4;break a}case 27:case 26:case 25:case 24:case 22:{h=e+1|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 5:{if((h|0)<2){e=-2;break a}if(!(lb[c[s>>2]&127](b,e)|0)){x=8;break a}h=e+2|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 6:{if((h|0)<3){e=-2;break a}if(!(lb[c[t>>2]&127](b,e)|0)){x=12;break a}h=e+3|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 7:{if((h|0)<4){e=-2;break a}if(!(lb[c[u>>2]&127](b,e)|0)){x=16;break a}h=e+4|0;c[v>>2]=h;j=i;e=h;i=j;continue a}case 23:{if(i|0){x=19;break a}h=e+1|0;c[v>>2]=h;i=w-h|0;if((i|0)<=0){e=-1;break a}switch(a[r+(d[h>>0]|0)>>0]|0){case 29:{x=22;break a}case 24:case 22:{j=e+2|0;c[v>>2]=j;i=1;e=j;continue a}case 5:{if((i|0)<2){e=-2;break a}if(!(lb[c[k>>2]&127](b,h)|0)){x=26;break a}j=e+3|0;c[v>>2]=j;i=1;e=j;continue a}case 6:{if((i|0)<3){e=-2;break a}if(!(lb[c[m>>2]&127](b,h)|0)){x=30;break a}j=e+4|0;c[v>>2]=j;i=1;e=j;continue a}case 7:{if((i|0)<4){e=-2;break a}if(!(lb[c[n>>2]&127](b,h)|0)){x=34;break a}j=e+5|0;c[v>>2]=j;i=1;e=j;continue a}default:{x=36;break a}}}case 10:case 9:case 21:while(1){e=e+1|0;c[v>>2]=e;if((w-e|0)<=0){e=-1;break a}switch(a[r+(d[e>>0]|0)>>0]|0){case 14:break b;case 9:case 10:case 21:break;default:{x=39;break a}}}case 14:break;default:{x=92;break a}}while(0);while(1){h=e+1|0;c[v>>2]=h;if((w-h|0)<=0){e=-1;break a}j=a[r+(d[h>>0]|0)>>0]|0;if((j|1)<<24>>24==13)break;switch(j<<24>>24){case 9:case 10:case 21:{e=h;break}default:{x=43;break a}}}e=e+2|0;c[v>>2]=e;c:while(1){h=w-e|0;if((h|0)<=0){e=-1;break a}i=a[r+(d[e>>0]|0)>>0]|0;if(i<<24>>24==j<<24>>24)break;switch(i<<24>>24){case 8:case 1:case 0:{x=60;break a}case 2:{x=65;break a}case 5:{if((h|0)<2){e=-2;break a}if(lb[c[o>>2]&127](b,e)|0){x=50;break a}i=e+2|0;c[v>>2]=i;e=i;continue c}case 6:{if((h|0)<3){e=-2;break a}if(lb[c[p>>2]&127](b,e)|0){x=54;break a}i=e+3|0;c[v>>2]=i;e=i;continue c}case 7:{if((h|0)<4){e=-2;break a}if(lb[c[q>>2]&127](b,e)|0){x=58;break a}i=e+4|0;c[v>>2]=i;e=i;continue c}case 3:{e=FX(b,e+1|0,f,v)|0;if((e|0)<1){x=63;break a}e=c[v>>2]|0;continue c}default:{i=e+1|0;c[v>>2]=i;e=i;continue c}}}h=e+1|0;c[v>>2]=h;if((w-h|0)<=0){e=-1;break}switch(a[r+(d[h>>0]|0)>>0]|0){case 11:{x=86;break a}case 17:{x=87;break a}case 10:case 9:case 21:{e=h;break}default:{x=69;break a}}d:while(1){h=e+1|0;c[v>>2]=h;i=w-h|0;if((i|0)<=0){e=-1;break a}switch(a[r+(d[h>>0]|0)>>0]|0){case 29:{x=72;break a}case 11:{x=86;break a}case 17:{x=87;break a}case 10:case 9:case 21:{e=h;break}case 24:case 22:{x=73;break d}case 5:{x=74;break d}case 6:{x=78;break d}case 7:{x=82;break d}default:{x=91;break a}}}if((x|0)==73){x=0;e=e+2|0;c[v>>2]=e;i=0;continue}else if((x|0)==74){x=0;if((i|0)<2){e=-2;break}if(!(lb[c[k>>2]&127](b,h)|0)){x=76;break}e=e+3|0;c[v>>2]=e;i=0;continue}else if((x|0)==78){x=0;if((i|0)<3){e=-2;break}if(!(lb[c[m>>2]&127](b,h)|0)){x=80;break}e=e+4|0;c[v>>2]=e;i=0;continue}else if((x|0)==82){x=0;if((i|0)<4){e=-2;break}if(!(lb[c[n>>2]&127](b,h)|0)){x=84;break}e=e+5|0;c[v>>2]=e;i=0;continue}}switch(x|0){case 4:{c[g>>2]=e;e=0;break}case 8:{c[g>>2]=e;e=0;break}case 12:{c[g>>2]=e;e=0;break}case 16:{c[g>>2]=e;e=0;break}case 19:{c[g>>2]=e;e=0;break}case 22:{c[g>>2]=h;e=0;break}case 26:{c[g>>2]=h;e=0;break}case 30:{c[g>>2]=h;e=0;break}case 34:{c[g>>2]=h;e=0;break}case 36:{c[g>>2]=h;e=0;break}case 39:{c[g>>2]=e;e=0;break}case 43:{c[g>>2]=h;e=0;break}case 50:{c[g>>2]=e;e=0;break}case 54:{c[g>>2]=e;e=0;break}case 58:{c[g>>2]=e;e=0;break}case 60:{c[g>>2]=e;e=0;break}case 63:{if(!e){c[g>>2]=c[v>>2];e=0}break}case 65:{c[g>>2]=e;e=0;break}case 69:{c[g>>2]=h;e=0;break}case 72:{c[g>>2]=h;e=0;break}case 76:{c[g>>2]=h;e=0;break}case 80:{c[g>>2]=h;e=0;break}case 84:{c[g>>2]=h;e=0;break}case 86:{c[g>>2]=e+2;e=1;break}case 87:{e=h+1|0;c[v>>2]=e;if((w-e|0)>0)if((a[e>>0]|0)==62){c[g>>2]=h+2;e=3;break}else{c[g>>2]=e;e=0;break}else e=-1;break}case 91:{c[g>>2]=h;e=0;break}case 92:{c[g>>2]=e;e=0;break}}l=y;return e|0}function PX(b,d,e){b=b|0;d=d|0;e=e|0;c[e>>2]=11;a:do if((d-b|0)==3){switch(a[b>>0]|0){case 120:{d=0;break}case 88:{d=1;break}default:{d=1;break a}}switch(a[b+1>>0]|0){case 109:break;case 77:{d=1;break}default:{d=1;break a}}switch(a[b+2>>0]|0){case 108:break;case 76:{d=0;break a}default:{d=1;break a}}if(!d){c[e>>2]=12;d=1}else d=0}else d=1;while(0);return d|0}function QX(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=e+72|0;l=e+352|0;m=e+356|0;n=e+360|0;a:while(1){i=g-f|0;if((i|0)<=0){g=-1;break}j=a[k+(d[f>>0]|0)>>0]|0;switch(j<<24>>24){case 8:case 1:case 0:{o=16;break a}case 5:{if((i|0)<2){g=-2;break a}if(lb[c[l>>2]&127](e,f)|0){o=6;break a}f=f+2|0;continue a}case 6:{if((i|0)<3){g=-2;break a}if(lb[c[m>>2]&127](e,f)|0){o=10;break a}f=f+3|0;continue a}case 7:{if((i|0)<4){g=-2;break a}if(lb[c[n>>2]&127](e,f)|0){o=14;break a}f=f+4|0;continue a}case 13:case 12:{f=f+1|0;if((j&255|0)==(b|0)){o=18;break a}else continue a}default:{f=f+1|0;continue a}}}b:do if((o|0)==6){c[h>>2]=f;g=0}else if((o|0)==10){c[h>>2]=f;g=0}else if((o|0)==14){c[h>>2]=f;g=0}else if((o|0)==16){c[h>>2]=f;g=0}else if((o|0)==18)if((g-f|0)>0){c[h>>2]=f;switch(a[k+(d[f>>0]|0)>>0]|0){case 20:case 30:case 11:case 10:case 9:case 21:{g=27;break b}default:{}}g=0}else g=-27;while(0);return g|0}function RX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=f;a:do if((h-e|0)>0){i=b+72|0;switch(a[i+(d[e>>0]|0)>>0]|0){case 27:{b=KX(b,e+1|0,f,g)|0;break a}case 20:{c[g>>2]=e+1;b=33;break a}case 24:case 22:{b:while(1){b=e+1|0;f=h-b|0;if((f|0)<=0){b=-1;break a}switch(a[i+(d[b>>0]|0)>>0]|0){case 24:case 22:{e=b;break}case 30:{j=8;break b}case 10:case 9:case 21:break b;default:{j=12;break b}}}if((j|0)==12){c[g>>2]=b;b=0;break a}c:do if((j|0)==8){if((f|0)<=1){b=-1;break a}switch(a[i+(d[e+2>>0]|0)>>0]|0){case 30:case 10:case 9:case 21:break;default:break c}c[g>>2]=b;b=0;break a}while(0);c[g>>2]=b;b=16;break a}default:{c[g>>2]=e;b=0;break a}}}else b=-1;while(0);return b|0}\n  function Rv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=a;while(1){j=c[f>>2]|0;if(!j){k=6;break}if((c[j>>2]|0)==(b|0))break;f=j+4|0}if((k|0)==6)qa(93188,93195,217,93206);i=j+8|0;f=c[i>>2]|0;g=j+4|0;b=c[g>>2]|0;c[(f|0?f+4|0:a)>>2]=b;h=a+4|0;c[(b|0?b+8|0:h)>>2]=f;b=0;f=a;while(1){f=c[f>>2]|0;if(!f)break;if((c[f>>2]|0)==(d|0)){k=9;break}b=f;f=f+4|0}if((k|0)==9){do if(!e)if((f|0)==(c[a>>2]|0)){c[a>>2]=j;c[g>>2]=f;c[i>>2]=0;f=f+8|0;break}else{c[b+4>>2]=j;c[i>>2]=b;c[g>>2]=f;f=f+8|0;break}else if((f|0)==(c[h>>2]|0)){c[h>>2]=j;c[g>>2]=0;c[i>>2]=f;f=f+4|0;break}else{c[i>>2]=f;f=f+4|0;c[g>>2]=c[f>>2];c[(c[f>>2]|0)+8>>2]=j;break}while(0);c[f>>2]=j}return}function Sv(a){a=a|0;return c[a+8>>2]|0}function Tv(a,b){a=a|0;b=b|0;Uv(a,Ov(b)|0);D_(b);return}function Uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[b>>2]|0;if(d|0){e=a+4|0;f=c[e>>2]|0;c[f+4>>2]=d;c[d+8>>2]=f;c[e>>2]=c[b+4>>2];d=a+8|0;c[d>>2]=(c[d>>2]|0)+(c[b+8>>2]|0)}return}function Vv(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0;m=c[b+8>>2]|0;Wv(a,b);l=Xv(m)|0;a=Zv(Yv(l)|0)|0;_v(m,a);m=$v(a,m)|0;a=Sv(m)|0;j=+aw(m);k=(a|0)==1;f=+(a|0);i=f*.15915494309189535*(j+d);g=k?0.0:i;a=m;while(1){a=c[a>>2]|0;if(!a)break;if(c[(c[(c[(c[a>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&8|0){e=4;break}a=a+4|0}if((e|0)==4)Pv(m,a);d=1.0/f;e=0;a=m;while(1){a=c[a>>2]|0;if(!a)break;n=(c[a>>2]|0)+16|0;c[(c[(c[n>>2]|0)+112>>2]|0)+16>>2]=e;h[(c[(c[n>>2]|0)+112>>2]|0)+24>>3]=0.0;f=6.283185307179586*d*+(e|0);o=+E(+f)*g;n=c[(c[n>>2]|0)+132>>2]|0;h[n>>3]=o;h[n+8>>3]=+F(+f)*g;e=e+1|0;a=a+4|0}o=k?j*.5:i;h[b+16>>3]=o;h[b+24>>3]=o;h[b+48>>3]=-1.0;$x(l)|0;return m|0}function Wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b+8>>2]|0;d=Sy(f)|0;while(1){if(!d)break;e=Ex(a,d)|0;while(1){if(!e)break;if((c[(c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0)+12>>2]|0)==(b|0))Vx(f,e,1)|0;e=Gx(a,e)|0}d=Ty(f,d)|0}return}function Xv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;g=k;f=gw(a,g)|0;g=c[g>>2]|0;i=ay(g)|0;h=hw(g)|0;i=i+-3|0;e=0;while(1){if((e|0)>=(i|0))break;j=qw(h)|0;d=Jx(g,j)|0;while(1){if(!d)break;b=c[d>>2]&3;a=c[((b|0)==2?d:d+-48|0)+40>>2]|0;if((j|0)==(a|0))a=c[((b|0)==3?d:d+48|0)+40>>2]|0;pw(h,a);d=Kx(g,d,j)|0}iw(g,j,f);d=Jx(g,j)|0;while(1){if(!d)break;b=c[d>>2]&3;a=c[((b|0)==2?d:d+-48|0)+40>>2]|0;if((j|0)==(a|0))a=c[((b|0)==3?d:d+48|0)+40>>2]|0;b=(c[a+16>>2]|0)+236|0;c[b>>2]=(c[b>>2]|0)+-1;ow(h,a);d=Kx(g,d,j)|0}dz(g,j)|0;e=e+1|0}$x(g)|0;nw(h);l=k;return f|0}function Yv(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+144|0;b=f;e=f+8|0;d=c[46162]|0;c[46162]=d+1;c[b>>2]=d;Y0(e,93221,b)|0;e=vA(a,e,1)|0;Az(e,134401,280,1)|0;b=Sy(a)|0;while(1){if(!b)break;Xy(e,b,1)|0;d=b+16|0;c[(c[(c[d>>2]|0)+112>>2]|0)+16+12>>2]=0;c[(c[(c[d>>2]|0)+112>>2]|0)+32>>2]=0;d=(c[(c[d>>2]|0)+112>>2]|0)+4|0;c[d>>2]=c[d>>2]&-2;b=Ty(a,b)|0}b=Sy(a)|0;while(1){if(!b)break;d=c[(c[b+16>>2]|0)+112>>2]|0;if(!(c[d+4>>2]&1)){c[d+16>>2]=0;fw(a,b,e)}b=Ty(a,b)|0}l=f;return e|0}function Zv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((ay(a)|0)!=1){d=Sy(a)|0;while(1){if(!d)break;b=0;e=Jx(a,d)|0;while(1){if(!e)break;b=b+1|0;e=Kx(a,e,d)|0}if((b|0)==1)ew(d,d,0,0);d=Ty(a,d)|0}b=0;f=0;d=Sy(a)|0;while(1){if(!d)break;g=c[(c[d+16>>2]|0)+112>>2]|0;g=(c[g+32>>2]|0)+(c[g+16+12>>2]|0)|0;e=(g|0)>(b|0);b=e?g:b;f=e?d:f;d=Ty(a,d)|0}b=Kv()|0;e=f+16|0;d=(c[(c[e>>2]|0)+112>>2]|0)+16+4|0;while(1){d=c[d>>2]|0;if((d|0)==(f|0))break;Mv(b,0,d);d=c[(c[d+16>>2]|0)+112>>2]|0;g=d+4|0;c[g>>2]=c[g>>2]|16;d=d+16|0}Mv(b,0,f);g=c[(c[e>>2]|0)+112>>2]|0;a=g+4|0;c[a>>2]=c[a>>2]|16;if(c[g+32>>2]|0){a=Kv()|0;d=(c[(c[e>>2]|0)+112>>2]|0)+24|0;while(1){d=c[d>>2]|0;if((d|0)==(f|0))break;Mv(a,0,d);d=c[(c[d+16>>2]|0)+112>>2]|0;g=d+4|0;c[g>>2]=c[g>>2]|16;d=d+16|0}Tv(b,a)}}else{b=Kv()|0;g=Sy(a)|0;Mv(b,0,g);g=(c[(c[g+16>>2]|0)+112>>2]|0)+4|0;c[g>>2]=c[g>>2]|16}return b|0}function _v(a,b){a=a|0;b=b|0;var d=0;d=Sy(a)|0;while(1){if(!d)break;if(!(c[(c[(c[d+16>>2]|0)+112>>2]|0)+4>>2]&16))dw(a,d,b);d=Ty(a,d)|0}return}function $v(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;d=bw(a,b)|0;c[f>>2]=d;a:do if(d){e=0;while(1){if((e|0)>=10)break a;a=cw(a,b,f)|0;h=d;d=c[f>>2]|0;if((h|0)==(d|0)|(d|0)==0)break;else e=e+1|0}}while(0);l=g;return a|0}function aw(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0;b=0.0;while(1){a=c[a>>2]|0;if(!a)break;f=c[(c[c[(c[(c[a>>2]|0)+16>>2]|0)+112>>2]>>2]|0)+16>>2]|0;d=+h[f+32>>3];d=d>b?d:b;e=+h[f+40>>3];b=e>d?e:d;a=a+4|0}return +b}function bw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=rw()|0;e=Sy(b)|0;while(1){if(!e)break;d=Ex(b,e)|0;while(1){if(!d)break;c[c[(c[d+16>>2]|0)+120>>2]>>2]=0;d=Gx(b,d)|0}e=Ty(b,e)|0}j=1;d=0;while(1){h=c[a>>2]|0;if(!h)break;i=c[h>>2]|0;g=Jx(b,i)|0;while(1){if(!g)break;f=g+16|0;if((c[c[(c[f>>2]|0)+120>>2]>>2]|0)>0){a=nb[c[k>>2]&63](k,0,128)|0;while(1){if(!a)break;e=c[a+8>>2]|0;if((c[c[(c[e+16>>2]|0)+120>>2]>>2]|0)>(c[c[(c[f>>2]|0)+120>>2]>>2]|0)?(l=c[e>>2]&3,(c[((l|0)==2?e:e+-48|0)+40>>2]|0)!=(i|0)):0)d=d+((c[((l|0)==3?e:e+48|0)+40>>2]|0)!=(i|0)&1)|0;a=nb[c[k>>2]&63](k,a,8)|0}xw(k,g)}g=Kx(b,g,i)|0}e=Jx(b,i)|0;while(1){if(!e)break;a=c[(c[e+16>>2]|0)+120>>2]|0;if(!(c[a>>2]|0)){c[a>>2]=j;ww(k,e)}e=Kx(b,e,i)|0}a=h+4|0;j=j+1|0}vw(k);return d|0}function cw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[d>>2]|0;k=Sy(b)|0;a:while(1){if(!k)break;j=Jx(b,k)|0;while(1){if(!j)break;g=c[j>>2]&3;f=c[((g|0)==3?j:j+48|0)+40>>2]|0;if((f|0)==(k|0))f=c[((g|0)==2?j:j+-48|0)+40>>2]|0;i=0;while(1){if((i|0)>=2)break;h=Qv(a)|0;Rv(a,k,f,i);g=bw(a,b)|0;if((g|0)<(e|0)){Lv(h);if(!g){e=0;break a}else e=g}else{Lv(a);a=h}i=i+1|0}j=Kx(b,j,k)|0}k=Ty(b,k)|0}c[d>>2]=e;return a|0}function dw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Kv()|0;e=Ex(a,b)|0;while(1){if(!e)break;f=e+-48|0;Mv(h,0,c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0);f=(c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;c[f>>2]=c[f>>2]|32;e=Gx(a,e)|0}e=Hx(a,b)|0;while(1){if(!e)break;f=e+48|0;Mv(h,0,c[((c[e>>2]&3|0)==3?e:f)+40>>2]|0);f=(c[(c[(c[((c[e>>2]&3|0)==3?e:f)+40>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;c[f>>2]=c[f>>2]|32;e=Ix(a,e)|0}a:do if((Sv(h)|0)>1){f=d+4|0;a=d;while(1){e=c[a>>2]|0;if(!e){g=13;break a}a=e+4|0;if(!(c[(c[(c[(c[e>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32))continue;if(c[(c[(c[(c[c[((e|0)==(c[f>>2]|0)?d:a)>>2]>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32|0)break}Mv(d,e,b)}else g=13;while(0);b:do if((g|0)==13){c:do if((Sv(h)|0)>0){e=d;while(1){e=c[e>>2]|0;if(!e)break c;if(c[(c[(c[(c[e>>2]|0)+16>>2]|0)+112>>2]|0)+4>>2]&32|0)break;e=e+4|0}Mv(d,e,b);break b}while(0);Mv(d,0,b)}while(0);e=h;while(1){e=c[e>>2]|0;if(!e)break;d=(c[(c[(c[e>>2]|0)+16>>2]|0)+112>>2]|0)+4|0;c[d>>2]=c[d>>2]&-33;e=e+4|0}Lv(h);return}function ew(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;while(1){g=c[(c[(c[b+16>>2]|0)+112>>2]|0)+16>>2]|0;if(!g)break;h=d+1|0;i=g+16|0;j=c[(c[i>>2]|0)+112>>2]|0;b=j+16|0;f=c[b+12>>2]|0;if(f){if((f|0)>(d|0)){k=11;break}b=c[b+4>>2]|0;f=b;if((b|0)==(e|0))b=j;else{d=j+24|0;if(!((c[j+32>>2]|0)!=0?(c[d>>2]|0)==(e|0):0))e=b;c[d>>2]=f;b=c[(c[i>>2]|0)+112>>2]|0;c[b+32>>2]=c[b+16+12>>2];b=c[(c[i>>2]|0)+112>>2]|0}b=b+16|0}c[b+4>>2]=a;c[(c[(c[i>>2]|0)+112>>2]|0)+16+12>>2]=h;b=g;d=h}if((k|0)==11?(c[j+32>>2]|0)<=(d|0):0){c[j+24>>2]=a;c[(c[(c[i>>2]|0)+112>>2]|0)+32>>2]=h}return}function fw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[(c[b+16>>2]|0)+112>>2]|0)+4|0;c[g>>2]=c[g>>2]|1;g=Jx(a,b)|0;while(1){if(!g)break;f=c[g>>2]&3;e=c[((f|0)==2?g:g+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((f|0)==3?g:g+48|0)+40>>2]|0;f=e+16|0;if(!(c[(c[(c[f>>2]|0)+112>>2]|0)+4>>2]&1)){Vx(d,g,1)|0;c[(c[(c[f>>2]|0)+112>>2]|0)+16>>2]=b;fw(a,e,d)}g=Kx(a,g,b)|0}return}function gw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+144|0;j=k+8|0;i=k;e=k+16|0;h=c[46163]|0;c[46163]=h+1;c[i>>2]=h;Y0(e,93230,i)|0;i=vA(b,e,1)|0;Az(i,134401,280,1)|0;h=c[46163]|0;c[46163]=h+1;c[j>>2]=h;Y0(e,93230,j)|0;h=b+24|0;a[j>>0]=a[h>>0]|0;a[j+1>>0]=a[h+1>>0]|0;a[j+2>>0]=a[h+2>>0]|0;a[j+3>>0]=a[h+3>>0]|0;j=Xx(e,j,0)|0;e=Sy(b)|0;while(1){if(!e)break;Xy(i,e,1)|0;h=az(j,ry(e)|0,1)|0;Az(h,134365,304,1)|0;c[(c[(c[e+16>>2]|0)+112>>2]|0)+16>>2]=h;e=Ty(b,e)|0}f=Sy(b)|0;while(1){if(!f)break;g=c[(c[(c[f+16>>2]|0)+112>>2]|0)+16>>2]|0;h=g+16|0;e=Ex(b,f)|0;while(1){if(!e)break;Vx(i,e,1)|0;m=c[(c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0)+16>>2]|0;n=Rx(j,g,m,0,1)|0;Az(n,134378,176,1)|0;c[(c[n+16>>2]|0)+116>>2]=e;n=(c[h>>2]|0)+236|0;c[n>>2]=(c[n>>2]|0)+1;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;e=Gx(b,e)|0}f=Ty(b,f)|0}c[d>>2]=j;l=k;return i|0}function hw(a){a=a|0;var b=0,c=0;c=jw()|0;b=Sy(a)|0;while(1){if(!b)break;ow(c,b);b=Ty(a,b)|0}return c|0}function iw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=c[(c[b+16>>2]|0)+236>>2]|0;p=m<<2;o=vH(p)|0;p=vH(p)|0;i=0;l=Jx(a,b)|0;n=0;f=0;while(1){if(!l)break;e=c[l>>2]&3;g=c[((e|0)==2?l:l+-48|0)+40>>2]|0;if((g|0)==(b|0))g=c[((e|0)==3?l:l+48|0)+40>>2]|0;h=0;k=Jx(a,b)|0;j=i;while(1){if(!k)break;if((k|0)!=(l|0)){i=c[k>>2]&3;e=c[((i|0)==2?k:k+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((i|0)==3?k:k+48|0)+40>>2]|0;i=Rx(a,g,e,0,0)|0;if(i)if(g>>>0<e>>>0){e=j+1|0;h=i+16|0;i=c[(c[h>>2]|0)+116>>2]|0;if(!i)h=1;else{dz(d,i)|0;c[(c[h>>2]|0)+116>>2]=0;h=1}}else{h=1;e=j}else e=j}else e=j;k=Kx(a,k,b)|0;j=e}if(!h){c[p+(n<<2)>>2]=g;e=n+1|0}else{c[o+(f<<2)>>2]=g;e=n;f=f+1|0}i=j;l=Kx(a,l,b)|0;n=e}e=m+-1-i|0;a:do if((e|0)>0){if((e|0)<(n|0))g=0;else{if((e|0)!=(n|0))break;f=c[o>>2]|0;g=f+16|0;e=0;while(1){if((e|0)>=(n|0))break a;m=c[p+(e<<2)>>2]|0;Az(Rx(a,f,m,0,1)|0,134378,176,1)|0;d=(c[g>>2]|0)+236|0;c[d>>2]=(c[d>>2]|0)+1;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;e=e+1|0}}while(1){if((g|0)>=(n|0)){f=2;break}f=g|1;if((f|0)>=(n|0)){f=2;break}d=c[p+(g<<2)>>2]|0;m=c[p+(f<<2)>>2]|0;Az(Rx(a,d,m,0,1)|0,134378,176,1)|0;d=(c[d+16>>2]|0)+236|0;c[d>>2]=(c[d>>2]|0)+1;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;g=g+2|0;e=e+-1|0}while(1){if((e|0)<=0)break a;m=c[p>>2]|0;n=c[p+(f<<2)>>2]|0;Az(Rx(a,m,n,0,1)|0,134378,176,1)|0;m=(c[m+16>>2]|0)+236|0;c[m>>2]=(c[m>>2]|0)+1;n=(c[n+16>>2]|0)+236|0;c[n>>2]=(c[n>>2]|0)+1;f=f+1|0;e=e+-1|0}}while(0);D_(p);D_(o);return}function jw(){return Cw(18136,c[4555]|0)|0}function kw(a,b,d){a=a|0;b=b|0;d=d|0;d=vH(16)|0;c[d+12>>2]=0;c[d+8>>2]=c[b+8>>2];return d|0}function lw(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function mw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return ((b|0)<(e|0)?-1:(b|0)>(e|0)&1)|0}function nw(a){a=a|0;yw(a)|0;return}function ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d;e=b+16|0;c[f+8>>2]=c[(c[e>>2]|0)+236>>2];a=(nb[c[a>>2]&63](a,f,1)|0)+12|0;c[(c[e>>2]|0)+164>>2]=c[a>>2];c[a>>2]=b;l=d;return}function pw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=b+16|0;c[g+8>>2]=c[(c[f>>2]|0)+236>>2];g=nb[c[a>>2]&63](a,g,4)|0;if(!g)qa(93240,93243,107,93253);e=g+12|0;d=c[e>>2]|0;if((d|0)==(b|0)){b=c[(c[f>>2]|0)+164>>2]|0;c[e>>2]=b;if(!b)nb[c[a>>2]&63](a,g,2)|0}else{do{a=(c[d+16>>2]|0)+164|0;d=c[a>>2]|0;e=(d|0)!=0}while(e&(d|0)!=(b|0));if(e)c[a>>2]=c[(c[d+16>>2]|0)+164>>2]}l=h;return}function qw(a){a=a|0;var b=0,d=0,e=0,f=0;d=nb[c[a>>2]&63](a,0,128)|0;if(d){f=d+12|0;b=c[f>>2]|0;e=c[(c[b+16>>2]|0)+164>>2]|0;c[f>>2]=e;if(!e)nb[c[a>>2]&63](a,d,2)|0}else b=0;return b|0}function rw(){return Cw(18172,c[4555]|0)|0}function sw(a,b,d){a=a|0;b=b|0;d=d|0;d=vH(12)|0;c[d+8>>2]=c[b+8>>2];return d|0}function tw(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function uw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b>>2]|0;e=c[d>>2]|0;return (b>>>0>e>>>0?1:(b>>>0<e>>>0)<<31>>31)|0}function vw(a){a=a|0;yw(a)|0;return}function ww(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e+8>>2]=b;nb[c[a>>2]&63](a,e,1)|0;l=d;return}function xw(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e+8>>2]=b;nb[c[a>>2]&63](a,e,2)|0;l=d;return}function yw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;do if((a|0)!=0?(c[a+24>>2]|0)<=0:0){h=c[a+4>>2]|0;g=h+32|0;b=c[g>>2]|0;if(b){b=ob[b&127](a,2,0,h)|0;if((b|0)<0){b=-1;break}}else b=0;if(c[a+28>>2]|0)Hw(a,0)|0;f=(b|0)==0;if(f){nb[c[c[a+16>>2]>>2]&63](a,0,64)|0;if((Ew(a)|0)>0){b=-1;break}d=a+8|0;b=c[d>>2]|0;if((c[b+12>>2]|0)>0){e=a+12|0;ob[c[e>>2]&127](a,c[b+8>>2]|0,0,h)|0;b=c[d>>2]|0}else e=a+12|0;ob[c[e>>2]&127](a,b,0,h)|0}b=c[a+20>>2]|0;if(b){if(f&(b|0)==1)ob[c[a+12>>2]&127](a,a,0,h)|0}else D_(a);b=c[g>>2]|0;if(!b)b=0;else{ob[b&127](a,6,0,h)|0;b=0}}else b=-1;while(0);return b|0}function zw(a){a=a|0;var b=0,d=0,e=0;e=a+8|0;b=c[e>>2]|0;d=c[b>>2]|0;a:do if(!(d&12)){if(!(d&3)){d=b+8|0;a=c[d>>2]|0;c[d>>2]=0;break}a=Aw(a)|0;d=c[e>>2]|0;b=c[d+8>>2]|0;d=b+(c[d+12>>2]<<2)|0;while(1){if(b>>>0>=d>>>0)break a;c[b>>2]=0;b=b+4|0}}else a=c[b+4>>2]|0;while(0);e=c[e>>2]|0;c[e>>2]=c[e>>2]&-4097;c[e+16>>2]=0;c[e+4>>2]=0;return a|0}function Aw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+8|0;a=c[g>>2]|0;b=c[a>>2]|0;if(!(b&4096)){a:do if(!(b&3)){if(b&112|0){a=c[a+8>>2]|0;break}a=c[a+4>>2]|0;if(!a)a=0;else{while(1){b=a+4|0;d=c[b>>2]|0;if(!d){e=a;break}c[b>>2]=c[d>>2];c[d>>2]=a;a=d}while(1){b=c[e>>2]|0;if(!b)break a;d=c[b+4>>2]|0;if(!d){e=b;continue}while(1){c[b+4>>2]=c[d>>2];c[d>>2]=b;b=c[d+4>>2]|0;if(!b)break;else{f=d;d=b;b=f}}c[e>>2]=d;e=d}}}else{e=c[a+8>>2]|0;f=e+(c[a+12>>2]<<2)|0;b=0;a=0;while(1){if(e>>>0>=f>>>0)break a;d=c[e>>2]|0;if(d){if(!b){b=d;a=d}else c[b>>2]=d;while(1){d=c[b>>2]|0;if(!d)break;else b=d}c[e>>2]=b}e=e+4|0}}while(0);g=c[g>>2]|0;c[g+4>>2]=a;c[g>>2]=c[g>>2]|4096}else a=c[a+4>>2]|0;return a|0}function Bw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=a+8|0;if(c[c[s>>2]>>2]&4096|0)Dw(a,0)|0;r=c[a+4>>2]|0;m=c[r>>2]|0;n=c[r+4>>2]|0;q=r+8|0;u=c[q>>2]|0;o=c[r+20>>2]|0;p=a+20|0;f=c[p>>2]&-32769;c[p>>2]=f;a:do if(!b){if(d&384|0){f=c[s>>2]|0;e=c[f+8>>2]|0;if(!e){e=0;break}if(d&256){e=c[e+4>>2]|0;c[f+4>>2]=e;if(!e){e=0;break}}else c[f+4>>2]=e;if((u|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-u)|0;break}}if(d&4098|0){e=c[s>>2]|0;if(c[e>>2]&144|0){e=0;break}e=c[e+8>>2]|0;if(!e){e=0;break}else{h=e;t=84;break}}if(!(d&64))e=0;else{i=r+16|0;b:do if((c[i>>2]|0)!=0|(u|0)<0){j=a+12|0;k=(u|0)<0;f=0-u|0;e=c[(c[s>>2]|0)+8>>2]|0;while(1){if(!e)break b;g=c[e>>2]|0;h=c[i>>2]|0;if(h|0){if(k)b=c[e+8>>2]|0;else b=e+f|0;vb[h&127](a,b,r)}if((c[q>>2]|0)>=0){e=g;continue}ob[c[j>>2]&127](a,e,0,r)|0;e=g}}while(0);e=c[s>>2]|0;c[e+4>>2]=0;c[e+8>>2]=0;c[(c[s>>2]|0)+16>>2]=0;e=0}}else{if(d&2049|0){g=r+12|0;e=c[g>>2]|0;h=(d&1|0)==0;if(!(h|(e|0)==0)){e=nb[e&63](a,b,r)|0;if(!e){e=0;break}else f=e}else f=b;do if((u|0)>-1)h=f+u|0;else{e=ob[c[a+12>>2]&127](a,0,12,r)|0;if(e|0){c[e+8>>2]=f;h=e;break}if(!(c[g>>2]|0)){e=0;break a}e=c[r+16>>2]|0;if(h|(e|0)==0){e=0;break a}vb[e&127](a,f,r);e=0;break a}while(0);g=c[s>>2]|0;e=c[g>>2]|0;do if(!(e&128)){if(!(e&16))if(!(e&32)){t=51;break}else{t=48;break}f=c[g+4>>2]|0;e=(f|0)!=0;if(!(d&8192)){if(!e){t=48;break}if((f|0)==(c[g+8>>2]|0)){t=48;break}r=f+4|0;a=c[r>>2]|0;c[h+4>>2]=a;c[a>>2]=h;c[h>>2]=f;c[r>>2]=h;break}else{if(!e){t=51;break}e=c[f>>2]|0;if(!e){t=51;break}c[h>>2]=e;c[e+4>>2]=h;c[h+4>>2]=f;c[f>>2]=h;break}}else if(!(d&8192))t=48;else t=51;while(0);if((t|0)==48){e=c[g+8>>2]|0;c[h>>2]=e;if(!e)e=h;else c[h+4>>2]=c[e+4>>2];c[e+4>>2]=h;c[(c[s>>2]|0)+8>>2]=h}else if((t|0)==51){f=g+8|0;e=c[f>>2]|0;if(!e){c[f>>2]=h;e=h}else{r=e+4|0;c[c[r>>2]>>2]=h;c[h+4>>2]=c[r>>2]}c[e+4>>2]=h;c[h>>2]=0}e=c[s>>2]|0;f=e+16|0;g=c[f>>2]|0;if((g|0)>-1)c[f>>2]=g+1;c[e+4>>2]=h;if((u|0)<0){e=c[h+8>>2]|0;break}else{e=h+(0-u)|0;break}}h=c[s>>2]|0;do if(!(d&512)){e=c[h+4>>2]|0;if(e|0){if((u|0)<0)g=c[e+8>>2]|0;else g=e+(0-u)|0;if((g|0)==(b|0))break}e=b+m|0;if((n|0)<0){b=c[e>>2]|0;t=68}else{b=e;t=68}}else t=68;while(0);if((t|0)==68){g=(u|0)<0;i=(n|0)<0;j=(o|0)==0;k=(n|0)<1;l=0-u|0;e=h+8|0;do{e=c[e>>2]|0;if(!e){e=0;break a}if(g)f=c[e+8>>2]|0;else f=e+l|0;f=f+m|0;if(i)f=c[f>>2]|0;do if(j)if(k){f=b$(b,f)|0;break}else{f=L0(b,f,n)|0;break}else f=ob[o&127](a,b,f,r)|0;while(0)}while((f|0)!=0);f=c[p>>2]|0}c[p>>2]=f|32768;if(!(d&4098)){do if(!(d&8)){f=c[s>>2]|0;if(!(d&16)){c[f+4>>2]=e;break}if((e|0)==(c[f+8>>2]|0)){c[f+4>>2]=0;e=0;break a}else{e=e+4|0;t=108;break}}else{f=c[s>>2]|0;t=108}while(0);if((t|0)==108){e=c[e>>2]|0;c[f+4>>2]=e;if(!e){e=0;break}}if((u|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-u)|0;break}}else{h=e;t=84}}while(0);if((t|0)==84){e=c[h>>2]|0;if(e){c[e+4>>2]=c[h+4>>2];e=c[h>>2]|0}f=(c[s>>2]|0)+8|0;g=c[f>>2]|0;if((h|0)==(g|0)){c[f>>2]=e;e=c[(c[s>>2]|0)+8>>2]|0;if(e|0)c[e+4>>2]=c[h+4>>2]}else{f=h+4|0;c[c[f>>2]>>2]=e;e=g+4|0;if((h|0)==(c[e>>2]|0))c[e>>2]=c[f>>2]}e=c[s>>2]|0;f=e+4|0;if((h|0)==(c[f>>2]|0))g=c[h>>2]|0;else g=0;c[f>>2]=g;t=e+16|0;c[t>>2]=(c[t>>2]|0)+-1;if((u|0)<0)e=c[h+8>>2]|0;else e=h+(0-u)|0;f=c[r+16>>2]|0;if(!((d&2|0)==0|(f|0)==0))vb[f&127](a,e,r);if((c[q>>2]|0)<0)ob[c[a+12>>2]&127](a,h,0,r)|0}return e|0}function Cw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;a:do if((a|0)!=0&(b|0)!=0?(f=C_(40)|0,(f|0)!=0):0){c[f>>2]=0;c[f+16>>2]=0;c[f+4>>2]=0;Kw(f,a,0)|0;d=f+20|0;i=a+32|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;d=c[i>>2]|0;do if(d){c[g>>2]=0;d=ob[d&127](f,1,g,a)|0;if((d|0)>=0)if(d){e=c[g>>2]|0;if(e|0)if(!(c[b+4>>2]&c[e>>2])){d=f;h=12;break}else{d=f;break}d=a+28|0;if(!(c[d>>2]|0)){d=f;h=12}else{D_(f);e=ob[c[d>>2]&127](0,0,40,a)|0;if(!e){d=0;break a}c[e>>2]=0;c[e+16>>2]=0;c[e+4>>2]=0;Kw(e,a,0)|0;c[e+20>>2]=1;c[e+24>>2]=0;c[e+32>>2]=0;c[e+28>>2]=0;d=e;f=e;h=11}}else{d=f;h=11}else{d=f;h=12}}else{d=f;h=11}while(0);if((h|0)==11){e=ob[c[d+12>>2]&127](d,0,28,a)|0;c[g>>2]=e;if(!e){d=f;h=12}else{c[e>>2]=c[b+4>>2];g=e+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0}}if((h|0)==12){D_(d);d=0;break}c[d+8>>2]=e;c[d>>2]=c[b>>2];c[d+16>>2]=b;e=c[i>>2]|0;if(e)ob[e&127](d,5,f,a)|0}else d=0;while(0);l=j;return d|0}function Dw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[c[a+16>>2]>>2]|0;j=a+8|0;g=c[j>>2]|0;h=c[g>>2]|0;d=h&4096;if(!b)if(!d)b=-1;else{e=d;b=c[g+4>>2]|0;i=5}else if(!(c[g+16>>2]|0)){e=0;i=5}else b=-1;a:do if((i|0)==5){c[g>>2]=h&-4097;if(!(h&3)){d=g+4|0;if(!(h&12)){c[d>>2]=0;d=g+8|0}c[d>>2]=b;if(e|0){b=0;break}c[(c[j>>2]|0)+16>>2]=-1;b=0;break}c[g+4>>2]=0;if(!e){c[g+16>>2]=0;while(1){if(!b){b=0;break a}j=c[b>>2]|0;nb[f&63](a,b,32)|0;b=j}}e=c[g+8>>2]|0;a=e+(c[g+12>>2]<<2)|0;while(1){if(e>>>0>=a>>>0){b=0;break a}d=c[e>>2]|0;if(d){c[e>>2]=b;b=c[d>>2]|0;c[d>>2]=0}e=e+4|0}}while(0);return b|0}function Ew(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=c[b>>2]|0;if(c[d>>2]&4096){Dw(a,0)|0;d=c[b>>2]|0}e=d+16|0;a=c[e>>2]|0;do if((a|0)<0){b=c[d>>2]|0;if(b&12|0){a=Fw(c[d+4>>2]|0)|0;c[e>>2]=a;break}if(b&112){a=0;b=d+8|0;while(1){b=c[b>>2]|0;if(!b)break;a=a+1|0}c[e>>2]=a}}while(0);return a|0}function Fw(a){a=a|0;var b=0;if(!a)return 0;else{b=Fw(c[a+4>>2]|0)|0;return b+1+(Fw(c[a>>2]|0)|0)|0}return 0}function Gw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=l;l=l+128|0;z=G+120|0;r=G;F=a+8|0;e=c[F>>2]|0;if(c[e>>2]&4096){Dw(a,0)|0;e=c[F>>2]|0}E=c[a+4>>2]|0;A=c[E>>2]|0;B=c[E+4>>2]|0;x=E+8|0;D=c[x>>2]|0;C=c[E+20>>2]|0;t=a+20|0;c[t>>2]=c[t>>2]&-32769;h=c[e+4>>2]|0;a:do if(!b)if((d&448|0)==0|(h|0)==0)e=0;else{if(!(d&64)){b:do if(!(d&256)){e=h;while(1){f=e+4|0;g=c[f>>2]|0;if(!g)break b;c[f>>2]=c[g>>2];c[g>>2]=e;e=g}}else{e=h;while(1){f=c[e>>2]|0;if(!f)break b;a=f+4|0;c[e>>2]=c[a>>2];c[a>>2]=e;e=f}}while(0);c[(c[F>>2]|0)+4>>2]=e;if((D|0)<0){e=c[e+8>>2]|0;break}else{e=e+(0-D)|0;break}}b=E+16|0;if((c[b>>2]|0)!=0|(D|0)<0){j=a+12|0;k=(D|0)<0;i=0-D|0;e=h;do{h=e;while(1){e=h+4|0;f=c[e>>2]|0;if(!f)break;c[e>>2]=c[f>>2];c[f>>2]=h;h=f}e=c[h>>2]|0;f=c[b>>2]|0;if(f|0){if(k)g=c[h+8>>2]|0;else g=h+i|0;vb[f&127](a,g,E)}if((c[x>>2]|0)<0)ob[c[j>>2]&127](a,h,0,E)|0}while((e|0)!=0);e=c[F>>2]|0}c[e+16>>2]=0;c[e+4>>2]=0;e=0}else{y=a+16|0;u=(d&4098|0)==0;c:do if(u|(c[(c[y>>2]|0)+4>>2]|0)!=8)v=45;else{k=(B|0)<0;e=b+A|0;if(k)e=c[e>>2]|0;i=(C|0)==0;j=(B|0)<1;g=nb[c[a>>2]&63](a,b,4)|0;while(1){if(!g){v=45;break c}f=g+A|0;if(k)f=c[f>>2]|0;do if(i)if(j){f=b$(e,f)|0;break}else{f=L0(e,f,B)|0;break}else f=ob[C&127](a,e,f,E)|0;while(0);if(f|0){v=45;break c}if((g|0)==(b|0))break;g=nb[c[a>>2]&63](a,g,8)|0}h=c[(c[F>>2]|0)+4>>2]|0;c[z>>2]=c[h+4>>2];c[z+4>>2]=c[h>>2];e=z;v=180}while(0);d:do if((v|0)==45){do if(!(d&2565)){if(d&32|0){if((D|0)<0)g=c[b+8>>2]|0;else g=b+(0-D)|0;e=g+A|0;if((B|0)<0)f=c[e>>2]|0;else f=e;if(!h){e=b;f=z;h=z;v=198;break}else{e=b;s=f;j=b;v=64;break}}if(h){if((D|0)<0)e=c[h+8>>2]|0;else e=h+(0-D)|0;if((e|0)!=(b|0)){f=b+A|0;if((B|0)<0){g=b;e=0;s=c[f>>2]|0;j=0;v=64}else{g=b;e=0;s=f;j=0;v=64}}else{e=0;g=b;f=z;k=z;j=0;v=141}}else{e=0;g=b;f=z;h=z;v=198}}else{if(!(d&512)){e=b+A|0;if((B|0)<0)f=c[e>>2]|0;else f=e}else f=b;if(!h){e=0;g=b;f=z;h=z;v=198}else{g=b;e=0;s=f;j=0;v=64}}while(0);e:do if((v|0)==64){f:do if((c[(c[y>>2]|0)+4>>2]|0)==4?(q=c[(c[F>>2]|0)+24>>2]|0,!((d&516|0)==0|(q|0)==0)):0){b=(D|0)<0;m=(B|0)<0;n=(C|0)==0;o=(B|0)<1;p=0-D|0;k=0;f=h;while(1){if((k|0)>=(q|0)){f=z;k=z;m=0;break}if(b)i=c[f+8>>2]|0;else i=f+p|0;i=i+A|0;if(m)i=c[i>>2]|0;do if(n)if(o){i=b$(s,i)|0;break}else{i=L0(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if(!i){v=80;break}c[r+(k<<2)>>2]=i;f=c[((i|0)<0?f+4|0:f)>>2]|0;if(!f){e=0;break a}else k=k+1|0}if((v|0)==80)if(b){e=c[f+8>>2]|0;break a}else{e=f+p|0;break a}while(1){if((m|0)>=(q|0))break f;do if((c[r+(m<<2)>>2]|0)<0){i=h+4|0;b=c[i>>2]|0;if((c[r+((m|1)<<2)>>2]|0)<0){c[i>>2]=c[b>>2];c[b>>2]=h;c[f+4>>2]=b;f=b;h=k;i=b+4|0;break}else{c[k>>2]=b;c[f+4>>2]=h;f=h;h=b;i=b;break}}else{i=c[h>>2]|0;if((c[r+((m|1)<<2)>>2]|0)>0){p=i+4|0;c[h>>2]=c[p>>2];c[p>>2]=h;c[k>>2]=i;h=i;break}else{c[f+4>>2]=i;c[k>>2]=h;f=i;i=i+4|0;break}}while(0);k=h;m=m+2|0;h=c[i>>2]|0}}else{f=z;k=z}while(0);n=(D|0)<0;o=(B|0)<0;p=(C|0)!=0;q=(B|0)<1;r=0-D|0;i=h;g:while(1){h=i;while(1){if(n)i=c[h+8>>2]|0;else i=h+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=b$(s,i)|0;break}else{i=L0(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if(!i){v=140;break g}if((i|0)>=0)break;b=h+4|0;m=c[b>>2]|0;if(!m){v=121;break g}if(n)i=c[m+8>>2]|0;else i=m+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=b$(s,i)|0;break}else{i=L0(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if((i|0)>=0){v=118;break}c[b>>2]=c[m>>2];c[m>>2]=h;c[f+4>>2]=m;h=c[m+4>>2]|0;if(!h){f=m;h=k;v=198;break e}else f=m}if((v|0)==118){v=0;if(!i){v=119;break}c[k>>2]=m;c[f+4>>2]=h;i=c[m>>2]|0;if(!i){f=h;h=m;v=198;break e}else{f=h;k=m;continue}}b=c[h>>2]|0;if(!b){v=139;break}if(n)i=c[b+8>>2]|0;else i=b+r|0;i=i+A|0;if(o)i=c[i>>2]|0;do if(!p)if(q){i=b$(s,i)|0;break}else{i=L0(s,i,B)|0;break}else i=ob[C&127](a,s,i,E)|0;while(0);if((i|0)>0){i=b+4|0;c[h>>2]=c[i>>2];c[i>>2]=h;c[k>>2]=b;i=c[b>>2]|0;if(!i){h=b;v=198;break e}else{k=b;continue}}if(!i){v=137;break}c[f+4>>2]=b;c[k>>2]=h;i=c[b+4>>2]|0;if(!i){f=b;v=198;break e}else{f=b;k=h}}if((v|0)==119){c[f+4>>2]=h;f=h;h=m;v=141;break}else if((v|0)==121){c[f+4>>2]=h;f=h;h=k;v=198;break}else if((v|0)==137){c[k>>2]=h;k=h;h=b;v=141;break}else if((v|0)==139){c[k>>2]=h;v=198;break}else if((v|0)==140)if(!h){h=k;v=198;break}else{v=141;break}}while(0);do if((v|0)==141){c[t>>2]=c[t>>2]|32768;i=h+4|0;c[k>>2]=c[i>>2];c[f+4>>2]=c[h>>2];if(!(d&516)){if(d&8|0){c[i>>2]=c[z>>2];c[h>>2]=0;c[z>>2]=h;v=169;break}if(d&16|0){v=z+4|0;c[h>>2]=c[v>>2];c[i>>2]=0;c[v>>2]=h;v=175;break}if(!u){e=f;v=180;break d}if(d&2049|0){if(c[(c[y>>2]|0)+4>>2]&4|0){e=h;break}c[i>>2]=0;e=z+4|0;c[h>>2]=c[e>>2];c[e>>2]=h;e=h;v=205;break}if(!(d&32)){e=0;break a}if(!(c[(c[y>>2]|0)+4>>2]&4)){c[e+4>>2]=0;x=z+4|0;c[e>>2]=c[x>>2];c[x>>2]=j;e=(c[F>>2]|0)+16|0;c[e>>2]=(c[e>>2]|0)+1;e=h;break}e=c[E+16>>2]|0;if(e|0)vb[e&127](a,g,E);if((c[x>>2]|0)<0){ob[c[a+12>>2]&127](a,j,0,E)|0;e=h}else e=h}else e=h}else if((v|0)==198){c[f+4>>2]=0;c[h>>2]=0;if(!(d&8))if(!(d&16)){if(d&516|0){e=f;break d}if(!(d&2049)){if(!(d&32)){g=0;e=f;break d}x=(c[F>>2]|0)+16|0;c[x>>2]=(c[x>>2]|0)+1}else{e=0;v=205}}else v=175;else v=169}while(0);if((v|0)==169){h=z+4|0;e=c[h>>2]|0;if(!e){e=f;break}while(1){f=e+4|0;g=c[f>>2]|0;if(!g)break;c[f>>2]=c[g>>2];c[g>>2]=e;e=g}c[h>>2]=c[e>>2]}else if((v|0)==175){e=c[z>>2]|0;if(!e){e=f;break}while(1){f=c[e>>2]|0;if(!f)break;x=f+4|0;c[e>>2]=c[x>>2];c[x>>2]=e;e=f}c[z>>2]=c[e+4>>2]}else if((v|0)==205){i=E+12|0;h=c[i>>2]|0;j=(d&1|0)==0;if(!(j|(h|0)==0))g=nb[h&63](a,g,E)|0;do if(g){if((D|0)>-1){e=g+D|0;v=215;break}e=ob[c[a+12>>2]&127](a,0,12,E)|0;if(e|0){c[e+8>>2]=g;break}if((c[i>>2]|0)!=0?(w=c[E+16>>2]|0,!(j|(w|0)==0)):0){vb[w&127](a,g,E);v=215}else v=215}else v=215;while(0);if((v|0)==215)if(!e){e=f;break}f=(c[F>>2]|0)+16|0;g=c[f>>2]|0;if((g|0)>-1)c[f>>2]=g+1}c[e+4>>2]=c[z>>2];c[e>>2]=c[z+4>>2];h:do if(!((d&516|0)==0?1:(c[(c[y>>2]|0)+4>>2]&8|0)==0)){m=(D|0)<0;if(m)f=c[e+8>>2]|0;else f=e+(0-D)|0;n=(B|0)<0;f=f+A|0;if(n)f=c[f>>2]|0;j=(C|0)==0;k=(B|0)<1;b=0-D|0;while(1){i=e+4|0;g=c[i>>2]|0;if(!g)break h;while(1){h=c[g>>2]|0;if(!h)break;z=h+4|0;c[g>>2]=c[z>>2];c[z>>2]=g;g=h}c[i>>2]=g;if(m)h=c[g+8>>2]|0;else h=g+b|0;h=h+A|0;if(n)h=c[h>>2]|0;do if(j)if(k){h=b$(f,h)|0;break}else{h=L0(f,h,B)|0;break}else h=ob[C&127](a,f,h,E)|0;while(0);if(h|0)break h;c[i>>2]=c[g>>2];c[g>>2]=e;e=g}}while(0);c[(c[F>>2]|0)+4>>2]=e;if((D|0)<0){e=c[e+8>>2]|0;break a}else{e=e+(0-D)|0;break a}}while(0);if((v|0)==180){if((D|0)<0)g=c[h+8>>2]|0;else g=h+(0-D)|0;f=c[E+16>>2]|0;if(!((d&2|0)==0|(f|0)==0))vb[f&127](a,g,E);if((c[x>>2]|0)<0)ob[c[a+12>>2]&127](a,h,0,E)|0;a=(c[F>>2]|0)+16|0;E=c[a>>2]|0;c[a>>2]=(E|0)<1?-1:E+-1|0}do{f=e+4|0;e=c[f>>2]|0}while((e|0)!=0);c[f>>2]=c[z>>2];c[(c[F>>2]|0)+4>>2]=c[z+4>>2];e=d&2|0?g:0}while(0);l=G;return e|0}function Hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(c[c[a+8>>2]>>2]&4096|0)Dw(a,0)|0;f=(b|0)!=0;if(f){if(c[c[b+8>>2]>>2]&4096|0)Dw(b,0)|0;if((c[b+16>>2]|0)==(c[a+16>>2]|0)){d=b;e=7}else b=0}else{d=0;e=7}a:do if((e|0)==7){while(1){if(!d)break;if((d|0)==(a|0)){b=0;break a}d=c[d+28>>2]|0;e=7}d=a+28|0;e=c[d>>2]|0;if(e|0){g=e+24|0;c[g>>2]=(c[g>>2]|0)+-1}c[a+32>>2]=0;c[d>>2]=0;if(f){c[d>>2]=b;c[a>>2]=25;g=b+24|0;c[g>>2]=(c[g>>2]|0)+1;break}else{c[a>>2]=c[c[a+16>>2]>>2];b=e;break}}while(0);return b|0}function Iw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;a:do if(!(d&99)){if((d&516|0)==0?(e=c[(c[a+16>>2]|0)+4>>2]|0,!((d&384|0)!=0&(e&12|0)==0)):0){if(e&12|0){if(!(d&408)){e=0;break}o=(d&136|0)!=0;p=(d&272|0)!=0;l=0;f=0;e=0;n=a;while(1){if(!n)break;m=nb[c[c[n+16>>2]>>2]&63](n,b,d)|0;do if(!m)g=l;else{h=c[n+4>>2]|0;i=c[h+4>>2]|0;j=c[h+20>>2]|0;g=m+(c[h>>2]|0)|0;if((i|0)<0)k=c[g>>2]|0;else k=g;if(e|0){do if(!j)if((i|0)<1){g=b$(k,f)|0;break}else{g=L0(k,f,i)|0;break}else g=ob[j&127](n,k,f,h)|0;while(0);if(!(o&(g|0)<0|p&(g|0)>0)){g=l;break}}g=n;f=k;e=m}while(0);l=g;n=c[n+28>>2]|0}c[a+32>>2]=l;break}if(!(d&24)){e=0;break}j=a+32|0;f=c[j>>2]|0;if(f){e=c[(c[f+4>>2]|0)+8>>2]|0;g=c[(c[f+8>>2]|0)+4>>2]|0;if((e|0)<0)e=c[g+8>>2]|0;else e=g+(0-e)|0;if((e|0)==(b|0))e=b;else{f=a;h=32}}else{f=a;h=32}do if((h|0)==32){while(1){if(!f){h=33;break}e=nb[c[c[f+16>>2]>>2]&63](f,b,4)|0;if(e|0){h=36;break}f=c[f+28>>2]|0;h=32}if((h|0)==33){c[j>>2]=0;e=0;break a}else if((h|0)==36){c[j>>2]=f;break}}while(0);i=(d<<4&128^128)+128|0;e=nb[c[c[f+16>>2]>>2]&63](f,e,d)|0;while(1){h=f+16|0;while(1){if(!e)break;else g=a;while(1){if((g|0)==(f|0))break a;if(nb[c[c[g+16>>2]>>2]&63](g,e,4)|0)break;g=c[g+28>>2]|0}e=nb[c[c[h>>2]>>2]&63](f,e,d)|0}f=c[f+28>>2]|0;c[j>>2]=f;if(!f){e=0;break a}e=nb[c[c[f+16>>2]>>2]&63](f,0,i)|0}}else f=a;while(1){if(!f){f=0;e=0;break}e=nb[c[c[f+16>>2]>>2]&63](f,b,d)|0;if(e|0)break;f=c[f+28>>2]|0}c[a+32>>2]=f}else e=nb[c[c[a+16>>2]>>2]&63](a,b,d)|0;while(0);return e|0}function Jw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+32|0;f=nb[c[a>>2]&63](a,0,128)|0;do{if(!f){e=0;break}h=c[g>>2]|0;e=f;f=nb[c[a>>2]&63](a,f,8)|0;e=nb[b&63]((h|0)==0?a:h,e,d)|0}while((e|0)>=0);return e|0}function Kw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=a+4|0;n=c[f>>2]|0;a:do if(n)if(b){m=c[c[a+16>>2]>>2]|0;g=a+8|0;if(c[c[g>>2]>>2]&4096|0)Dw(a,0)|0;e=c[n+32>>2]|0;if(e|0?(ob[e&127](a,3,b,n)|0)<0:0){b=0;break}c[f>>2]=b;e=c[b+28>>2]|0;c[a+12>>2]=(e|0)==0?52:e;e=c[c[g>>2]>>2]|0;if(!(e&112)){do if(!(e&2))if(!(e&3))if(!(d&1))break;else{b=n;break a}else if((d&3|0)==3){b=n;break a}else break;else if(d&2|0){b=n;break a}while(0);h=Aw(a)|0;e=c[g>>2]|0;l=c[e>>2]|0;c[e>>2]=l&-4097;c[e+4>>2]=0;c[e+16>>2]=0;b:do if(l&3|0){l=c[e+8>>2]|0;f=l+(c[e+12>>2]<<2)|0;e=l;while(1){if(e>>>0>=f>>>0)break b;c[e>>2]=0;e=e+4|0}}while(0);i=(d&2|0)==0;j=b+8|0;k=b+4|0;l=b+24|0;while(1){if(!h){b=n;break a}d=c[h>>2]|0;if(i){e=c[j>>2]|0;if((e|0)<0)e=c[h+8>>2]|0;else e=h+(0-e)|0;g=c[k>>2]|0;e=e+(c[b>>2]|0)|0;if((g|0)<0)e=c[e>>2]|0;f=c[l>>2]|0;if(!f)e=Mw(0,e,g)|0;else e=nb[f&63](a,e,b)|0;c[h+4>>2]=e}nb[m&63](a,h,32)|0;h=d}}else b=n}else b=n;else{c[f>>2]=b;n=c[b+28>>2]|0;c[a+12>>2]=(n|0)==0?52:n}while(0);return b|0}function Lw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=(c|0)==0;do if(!b)if(a)a=0;else a=C_(c)|0;else if(a){D_(b);a=0;break}else{a=F_(b,c)|0;break}while(0);return a|0}function Mw(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0;g=c;if((e|0)>=1){h=c+e+-1|0;g=(h>>>0<c>>>0?c:h)+(1-g)&-2;f=c;while(1){if(f>>>0>=h>>>0)break;b=O(((d[f>>0]|0)<<8)+b+(d[f+1>>0]|0)|0,17109811)|0;f=f+2|0}f=c+g|0;if(f>>>0>h>>>0)c=e;else{c=e;b=O(((d[f>>0]|0)<<8)+b|0,17109811)|0}}else{while(1){f=a[c>>0]|0;if(!(f<<24>>24))break;h=a[c+1>>0]|0;e=O(((f&255)<<8)+b+(h&255)|0,17109811)|0;b=e;c=c+(h<<24>>24?2:1)|0}c=c-g|0}return O(b+c|0,17109811)|0}function Nw(a){a=a|0;var b=0;b=c[46164]|0;c[46164]=a;return b|0}function Ow(a){a=a|0;var b=0;b=c[46165]|0;c[46165]=a;return b|0}function Pw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Qw(a,b,f)|0;l=e;return d|0}function Qw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=(a|0)==3;h=f?c[46167]|0:(a|0)==2?1:a;c[46167]=h;i=c[46168]|0;c[46168]=i>>>0>h>>>0?i:h;do if(h>>>0<(c[46165]|0)>>>0){a=c[46166]|0;if(!a){a=l3()|0;c[46166]=a;if(!a){a=1;break}}if(!f){o3(a)|0;a=c[46166]|0}r0(a,b,d)|0;a=0}else{if(c[46164]|0){Rw(a,b,d);a=0;break}if(f)a=c[15686]|0;else{i=c[15686]|0;c[e>>2]=(a|0)==1?93267:93273;g1(i,93281,e)|0;a=i}r0(a,b,d)|0;a=0}while(0);l=g;return a|0}function Rw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[46169]|0)==0?(f=C_(c[4564]|0)|0,c[46169]=f,(f|0)==0):0)D1(93286,c[15686]|0)|0;else e=4;do if((e|0)==4){if((a|0)!=3){kb[c[46164]&63]((a|0)==1?93267:93273)|0;kb[c[46164]&63](93945)|0}while(1){a=q0(c[46169]|0,c[4564]|0,b,d)|0;e=c[4564]|0;if((a|0)>-1&(a|0)<(e|0)){e=7;break}e=e<<1;f=a+1|0;f=(e|0)>(f|0)?e:f;c[4564]=f;if(!(F_(c[46169]|0,f)|0)){e=9;break}}if((e|0)==7){kb[c[46164]&63](c[46169]|0)|0;break}else if((e|0)==9){D1(93286,c[15686]|0)|0;break}}while(0);return}function Sw(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Qw(1,a,e)|0;l=d;return}function Tw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!e){e=(d|0)==0?1024:d;d=e;e=C_(e)|0;f=1}else f=0;c[b+12>>2]=f;c[b>>2]=e;c[b+8>>2]=e+d;c[b+4>>2]=e;a[e>>0]=0;return}function Uw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;f=c[a>>2]|0;g=(c[h>>2]|0)-f|0;e=g<<1;g=g+b|0;e=g>>>0>e>>>0?g:e;g=a+4|0;b=f;f=(c[g>>2]|0)-f|0;d=a+12|0;if(!(c[d>>2]|0)){i=C_(e)|0;F3(i|0,b|0,f|0)|0;c[d>>2]=1;b=i}else b=F_(b,e)|0;c[a>>2]=b;c[g>>2]=b+f;c[h>>2]=b+e;return 0}function Vw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=a+4|0;e=c[f>>2]|0;if((e+d|0)>>>0>(c[a+8>>2]|0)>>>0){Uw(a,d)|0;e=c[f>>2]|0}F3(e|0,b|0,d|0)|0;c[f>>2]=(c[f>>2]|0)+d;return d|0}function Ww(a,b){a=a|0;b=b|0;return Vw(a,b,W_(b)|0)|0}function Xw(a){a=a|0;if(c[a+12>>2]|0)D_(c[a>>2]|0);return}function Yw(a){a=a|0;var b=0,e=0;b=a+4|0;e=c[b>>2]|0;if(e>>>0>(c[a>>2]|0)>>>0){c[b>>2]=e+-1;a=d[e>>0]|0}else a=-1;return a|0}function Zw(a,b,d){a=a|0;b=b|0;d=d|0;Qz(c[46171]|0,c[b+8>>2]|0)|0;Qz(c[46171]|0,c[b+12>>2]|0)|0;Ny(c[46171]|0,b);return}function _w(a,b){a=a|0;b=b|0;var c=0;c=yz(a,93334,0)|0;if((b|0)!=0&(c|0)==0){$w(a);c=yz(a,93334,0)|0}return c|0}function $w(a){a=a|0;var b=0,c=0,d=0;d=fz(a)|0;jB(d,d,104,0,1)|0;c=Sy(d)|0;while(1){if(!c)break;bx(a,c);b=Ex(d,c)|0;while(1){if(!b)break;cx(a,b);b=Gx(d,b)|0}c=Ty(d,c)|0}return}function ax(b){b=b|0;var c=0;c=b+24|0;a[c>>0]=a[c>>0]|64;hx(b);c=yA(b)|0;ex((c|0)==0?b:c,b);return}function bx(a,b){a=a|0;b=b|0;var d=0;d=dx(b)|0;if(!((d|0)!=0?(c[d+8>>2]|0)!=0:0))ex(a,b);return}function cx(a,b){a=a|0;b=b|0;var d=0;d=dx(b)|0;if(!((d|0)!=0?(c[d+8>>2]|0)!=0:0))ex(a,b);return}function dx(a){a=a|0;return yz(a,93322,0)|0}function ex(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=Az(b,93322,16,0)|0;f=fx(a,c[b>>2]&3)|0;e=d+8|0;a:do if(!(c[e>>2]|0)){a=fz(a)|0;c[e>>2]=fx(a,c[b>>2]&3)|0;a=gx(b)|0;d=d+12|0;c[d>>2]=My(ez(b)|0,((a|0)>4?a:4)<<2)|0;a=nb[c[f>>2]&63](f,0,128)|0;while(1){if(!a)break a;e=ez(b)|0;e=Oz(e,c[a+12>>2]|0)|0;c[(c[d>>2]|0)+(c[a+16>>2]<<2)>>2]=e;a=nb[c[f>>2]&63](f,a,8)|0}}while(0);return}function fx(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;a=_w(a,0)|0;a:do if(!a)a=0;else switch(b|0){case 0:{a=c[a+16>>2]|0;break a}case 1:{a=c[a+8>>2]|0;break a}case 2:case 3:{a=c[a+12>>2]|0;break a}default:{c[d>>2]=b;Pw(1,93347,d)|0;a=0;break a}}while(0);l=e;return a|0}function gx(a){a=a|0;var b=0;b=fz(ez(a)|0)|0;a=fx(b,c[a>>2]&3)|0;if(!a)a=0;else a=Ew(a)|0;return a|0}function hx(a){a=a|0;var b=0,d=0,e=0,f=0;d=Az(a,93334,20,0)|0;e=d+8|0;c[e>>2]=CA(a,18260,c[4563]|0)|0;f=d+12|0;c[f>>2]=CA(a,18260,c[4563]|0)|0;d=d+16|0;c[d>>2]=CA(a,18260,c[4563]|0)|0;b=yA(a)|0;if(!b){b=c[46170]|0;if(!((b|0)==0|(b|0)==(a|0))){b=_w(b,0)|0;ix(c[b+8>>2]|0,c[e>>2]|0,a,1);ix(c[b+12>>2]|0,c[f>>2]|0,a,2);ix(c[b+16>>2]|0,c[d>>2]|0,a,0)}}else{a=_w(b,0)|0;Hw(c[e>>2]|0,c[a+8>>2]|0)|0;Hw(c[f>>2]|0,c[a+12>>2]|0)|0;Hw(c[d>>2]|0,c[a+16>>2]|0)|0}return}function ix(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=nb[c[b>>2]&63](b,0,128)|0;while(1){if(!g)break;h=jx(e,c[g+8>>2]|0,c[g+12>>2]|0,c[g+16>>2]|0,f)|0;a[h+22>>0]=a[g+22>>0]|0;a[h+21>>0]=a[g+21>>0]|0;nb[c[d>>2]&63](d,h,1)|0;g=nb[c[b>>2]&63](b,g,8)|0}return}function jx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=My(b,24)|0;a[h+20>>0]=g;c[h+8>>2]=Oz(b,d)|0;c[h+12>>2]=Oz(b,e)|0;c[h+16>>2]=f;return h|0}function kx(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+32|0;e=d;c[e+8>>2]=b;b=nb[c[a>>2]&63](a,e,4)|0;l=d;return b|0}function lx(a,b){a=a|0;b=b|0;var c=0;c=Hw(a,0)|0;b=kx(a,b)|0;Hw(a,c)|0;return b|0}function mx(a,b){a=a|0;b=b|0;a=dx(a)|0;if(!a)a=0;else a=kx(c[a+8>>2]|0,b)|0;return a|0}function nx(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!b){b=c[46170]|0;if(!b){a[g>>0]=a[18296]|0;a[g+1>>0]=a[18297]|0;a[g+2>>0]=a[18298]|0;a[g+3>>0]=a[18299]|0;b=Xx(0,g,0)|0;c[46170]=b}}if(!f)b=px(b,d,e)|0;else b=ox(b,d,e,f)|0;l=h;return b|0}function ox(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=fz(a)|0;_w(a,1)|0;g=fx(a,b)|0;f=lx(g,d)|0;a:do if(!f){f=kx(g,d)|0;if(f|0){f=jx(a,d,e,c[f+16>>2]|0,b)|0;nb[c[g>>2]&63](g,f,1)|0;h=16;break}g=fx(i,b)|0;f=jx(a,d,e,Ew(g)|0,b)|0;nb[c[g>>2]&63](g,f,1)|0;switch(b|0){case 0:{jB(i,i,57,f,1)|0;h=16;break a}case 1:{d=Sy(i)|0;while(1){if(!d){h=16;break a}qx(a,d,f);d=Ty(i,d)|0}}case 2:case 3:{g=Sy(i)|0;while(1){if(!g){h=16;break a}d=Ex(i,g)|0;while(1){if(!d)break;qx(a,d,f);d=Gx(i,d)|0}g=Ty(i,g)|0}}default:break a}}else{h=f+12|0;Qz(a,c[h>>2]|0)|0;c[h>>2]=Oz(a,e)|0;h=16}while(0);if((h|0)==16)if((b|0)==0&(f|0)!=0)rx(a,f,e)|0;iz(a,a,f);return f|0}function px(a,b,c){a=a|0;b=b|0;c=c|0;a=fx(a,b)|0;if(!a)a=0;else a=kx(a,c)|0;return a|0}function qx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;b=dx(b)|0;f=d+16|0;e=c[f>>2]|0;if((e|0)>3){g=c[a+64>>2]|0;b=b+12|0;e=e<<2;c[b>>2]=ob[c[(c[g>>2]|0)+8>>2]&127](c[g+12>>2]|0,c[b>>2]|0,e,e+4|0)|0}else b=b+12|0;g=Oz(a,c[d+12>>2]|0)|0;c[(c[b>>2]|0)+(c[f>>2]<<2)>>2]=g;return}function rx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=ez(a)|0;g=(dx(a)|0)+12|0;i=b+16|0;Qz(h,c[(c[g>>2]|0)+(c[i>>2]<<2)>>2]|0)|0;f=Oz(h,d)|0;c[(c[g>>2]|0)+(c[i>>2]<<2)>>2]=f;do if(!(c[a>>2]&3)){e=c[(_w(h,0)|0)+16>>2]|0;f=b+8|0;g=lx(e,c[f>>2]|0)|0;if(!g){i=jx(h,c[f>>2]|0,d,c[i>>2]|0,c[a>>2]&3)|0;nb[c[e>>2]&63](e,i,1)|0;break}else{i=g+12|0;Qz(h,c[i>>2]|0)|0;c[i>>2]=Oz(h,d)|0;break}}while(0);iz(h,a,b);return 0}function sx(a,b,d){a=a|0;b=b|0;d=d|0;a=fx(a,b)|0;do if(a){b=c[a>>2]|0;if(!d){a=nb[b&63](a,0,128)|0;break}else{a=nb[b&63](a,d,8)|0;break}}else a=0;while(0);return a|0}function tx(a){a=a|0;var b=0;c[46171]=a;b=dx(a)|0;if(b|0){ux(a,b);Cz(a,c[b>>2]|0)|0}b=_w(a,0)|0;if(b)if(((EA(a,c[b+8>>2]|0)|0)==0?(EA(a,c[b+12>>2]|0)|0)==0:0)?(EA(a,c[b+16>>2]|0)|0)==0:0){Cz(a,c[b>>2]|0)|0;b=0}else b=1;else b=0;return b|0}function ux(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=ez(a)|0;e=gx(a)|0;b=b+12|0;a=0;while(1){d=c[b>>2]|0;if((a|0)>=(e|0))break;Qz(f,c[d+(a<<2)>>2]|0)|0;a=a+1|0}Ny(f,d);return}function vx(a){a=a|0;var b=0;b=dx(a)|0;if(b|0){ux(a,b);Cz(a,93322)|0}return}function wx(a){a=a|0;var b=0;b=dx(a)|0;if(b|0){ux(a,b);Cz(a,93322)|0}return}function xx(a,b){a=a|0;b=b|0;b=mx(a,b)|0;if(!b)b=0;else{a=c[(dx(a)|0)+12>>2]|0;b=c[a+(c[b+16>>2]<<2)>>2]|0}return b|0}function yx(a,b){a=a|0;b=b|0;a=c[(dx(a)|0)+12>>2]|0;return c[a+(c[b+16>>2]<<2)>>2]|0}function zx(a,b,c){a=a|0;b=b|0;c=c|0;b=mx(a,b)|0;if(!b)b=-1;else{rx(a,b,c)|0;b=0}return b|0}function Ax(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=ez(a)|0;f=nx(f,c[a>>2]&3,b,0)|0;if(!f){f=ez(a)|0;f=nx(f,c[a>>2]&3,b,e)|0}rx(a,f,d)|0;return 0}function Bx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=ez(a)|0;f=c[a>>2]|0;a:do if(!((c[b>>2]^f)&3)){d=1;e=0;while(1){e=sx(g,f&3,e)|0;if(!e)break a;d=mx(b,c[e+8>>2]|0)|0;if(!d){d=1;break a}f=yx(a,e)|0;rx(b,d,f)|0;if(Rz(f)|0)Sz(yx(b,d)|0);d=0;f=c[a>>2]|0}}else d=1;while(0);return d|0}function Cx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;a=c[b+40>>2]|0;f=c[d+40>>2]|0;if((a|0)==(f|0)){e=(c[b>>2]|0)>>>4;a=(c[d>>2]|0)>>>4;if(e>>>0>=a>>>0)if(e>>>0>a>>>0)a=1;else g=6;else a=-1}else{e=(c[a>>2]|0)>>>4;a=(c[f>>2]|0)>>>4;if(e>>>0>=a>>>0)if(e>>>0>a>>>0)a=1;else g=6;else a=-1}if((g|0)==6)a=0;return a|0}function Dx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;a=(c[b+40>>2]|0)+8|0;g=c[a>>2]|0;a=c[a+4>>2]|0;f=(c[d+40>>2]|0)+8|0;e=c[f>>2]|0;f=c[f+4>>2]|0;do if(!(a>>>0<f>>>0|(a|0)==(f|0)&g>>>0<e>>>0))if(a>>>0>f>>>0|(a|0)==(f|0)&g>>>0>e>>>0)a=1;else{e=b+8|0;a=c[e>>2]|0;e=c[e+4>>2]|0;if(!((a|0)==0&(e|0)==0)?(i=d+8|0,h=c[i>>2]|0,i=c[i+4>>2]|0,!((h|0)==0&(i|0)==0)):0){if(e>>>0<i>>>0|(e|0)==(i|0)&a>>>0<h>>>0){a=-1;break}if(e>>>0>i>>>0|(e|0)==(i|0)&a>>>0>h>>>0){a=1;break}}a=0}else a=-1;while(0);return a|0}function Ex(a,b){a=a|0;b=b|0;var d=0;b=Fx(a,b)|0;if(!b)b=0;else{d=a+44|0;a=b+32|0;Dw(c[d>>2]|0,c[a>>2]|0)|0;b=c[d>>2]|0;b=nb[c[b>>2]&63](b,0,128)|0;c[a>>2]=zw(c[d>>2]|0)|0}return b|0}function Fx(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+48|0;d=e;if((c[b+24>>2]|0)==(a|0))a=b+28|0;else{c[d+16>>2]=b;a=c[a+40>>2]|0;a=nb[c[a>>2]&63](a,d,4)|0}l=e;return a|0}function Gx(a,b){a=a|0;b=b|0;var d=0,e=0;d=Fx(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;if(!d)a=0;else{e=a+44|0;d=d+32|0;Dw(c[e>>2]|0,c[d>>2]|0)|0;a=c[e>>2]|0;a=nb[c[a>>2]&63](a,b,8)|0;c[d>>2]=zw(c[e>>2]|0)|0}return a|0}function Hx(a,b){a=a|0;b=b|0;var d=0;b=Fx(a,b)|0;if(!b)b=0;else{d=a+44|0;a=b+28|0;Dw(c[d>>2]|0,c[a>>2]|0)|0;b=c[d>>2]|0;b=nb[c[b>>2]&63](b,0,128)|0;c[a>>2]=zw(c[d>>2]|0)|0}return b|0}function Ix(a,b){a=a|0;b=b|0;var d=0,e=0;d=Fx(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;if(!d)a=0;else{e=a+44|0;d=d+28|0;Dw(c[e>>2]|0,c[d>>2]|0)|0;a=c[e>>2]|0;a=nb[c[a>>2]&63](a,b,8)|0;c[d>>2]=zw(c[e>>2]|0)|0}return a|0}function Jx(a,b){a=a|0;b=b|0;var c=0;c=Ex(a,b)|0;if(!c)c=Hx(a,b)|0;return c|0}function Kx(a,b,d){a=a|0;b=b|0;d=d|0;a:do if((c[b>>2]&3|0)==2){b=Gx(a,b)|0;if(!b){b=0;do{if(!b)b=Hx(a,d)|0;else b=Ix(a,b)|0;if(!b){b=0;break a}}while((c[b+40>>2]|0)==(d|0))}}else do{b=Ix(a,b)|0;if(!b){b=0;break a}}while((c[b+40>>2]|0)==(d|0));while(0);return b|0}function Lx(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if((gy(a)|0)!=0?(c[g>>2]=0,c[g+4>>2]=0,c[g+8>>2]=0,c[g+12>>2]=0,c[f>>2]=c[g>>2],c[f+4>>2]=c[g+4>>2],c[f+8>>2]=c[g+8>>2],c[f+12>>2]=c[g+12>>2],(Px(a,b,e,f)|0)!=0):0)f=0;else f=((d[a+24>>0]|0)>>>2&1^1)&255|(b|0)!=(e|0);l=h;return f|0}function Mx(a,b){a=a|0;b=b|0;Ox(a,b);return}function Nx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;Xy(b,d,1)|0;Xy(b,e,1)|0;h=My(b,96)|0;i=h+48|0;l=_x(b,2)|0;j=c[i>>2]|0;k=c[h>>2]|0;m=h+8|0;c[m>>2]=f;c[m+4>>2]=g;m=h+56|0;c[m>>2]=f;c[m+4>>2]=g;g=l<<4;c[h>>2]=k&12|g|2;c[i>>2]=j&12|g|3;c[h+88>>2]=d;c[h+40>>2]=e;Ox(b,h);if(a[b+24>>0]&64){Az(h,93322,16,0)|0;cx(b,h)}gz(b,h);return h|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;i=l;l=l+16|0;d=i;h=c[b>>2]&3;g=(h|0)==2?b:b+-48|0;h=(h|0)==3?b:b+48|0;e=c[h+40>>2]|0;f=c[g+40>>2]|0;while(1){if(!a)break;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];if(Px(a,e,f,d)|0)break;j=Fx(a,e)|0;m=a+44|0;Qx(c[m>>2]|0,j+32|0,g);k=a+48|0;Qx(c[k>>2]|0,j+24|0,g);j=Fx(a,f)|0;Qx(c[m>>2]|0,j+28|0,h);Qx(c[k>>2]|0,j+20|0,h);a=yA(a)|0}l=i;return}function Px(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+48|0;f=h;if(!((b|0)==0|(d|0)==0)?(c[f>>2]=c[e>>2],c[f+4>>2]=c[e+4>>2],c[f+8>>2]=c[e+8>>2],c[f+12>>2]=c[e+12>>2],c[f+40>>2]=b,g=Fx(a,d)|0,(g|0)!=0):0){e=a+48|0;g=g+20|0;Dw(c[e>>2]|0,c[g>>2]|0)|0;a=c[e>>2]|0;a=nb[c[a>>2]&63](a,f,4)|0;c[g>>2]=zw(c[e>>2]|0)|0}else a=0;l=h;return a|0}function Qx(a,b,d){a=a|0;b=b|0;d=d|0;Dw(a,c[b>>2]|0)|0;nb[c[a>>2]&63](a,d,1)|0;c[b>>2]=zw(a)|0;return}function Rx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;i=n+24|0;k=n+16|0;j=n;do if(!(oy(a,2,e,k,0)|0))if(!e){if(f|0?(gy(a)|0)==0:0){m=18;break};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;m=7}else m=17;else{o=j;c[o>>2]=0;c[o+4>>2]=0;o=k;g=c[o+4>>2]|0;m=j+8|0;c[m>>2]=c[o>>2];c[m+4>>2]=g;c[j>>2]=2;m=7}while(0);a:do if((m|0)==7){c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=Px(a,b,d,i)|0;b:do if(!g){if(fy(a)|0?(c[i>>2]=c[j>>2],c[i+4>>2]=c[j+4>>2],c[i+8>>2]=c[j+8>>2],c[i+12>>2]=c[j+12>>2],h=Px(a,d,b,i)|0,h|0):0){g=h;break}do if(f|0){g=fz(a)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=Px(g,b,d,i)|0;if(!g){if(!(fy(a)|0))break;g=fz(a)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];g=Px(g,d,b,i)|0;if(!g)break}Mx(a,g);break b}while(0);m=17;break a}while(0)}while(0);if((m|0)==17)if(!f)g=0;else m=18;if((m|0)==18)if((Lx(a,b,d)|0)!=0?(oy(a,2,e,k,1)|0)!=0:0){g=k;g=Nx(a,b,d,c[g>>2]|0,c[g+4>>2]|0)|0;sy(a,2,g)}else g=0;l=n;return g|0}function Sx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;d=(c[b>>2]&3|0)==3;g=d?b+-48|0:b;d=d?b:b+48|0;b=c[g+40>>2]|0;h=Fx(a,c[d+40>>2]|0)|0;f=a+44|0;Tx(c[f>>2]|0,h+32|0,g);e=a+48|0;Tx(c[e>>2]|0,h+24|0,g);b=Fx(a,b)|0;Tx(c[f>>2]|0,b+28|0,d);Tx(c[e>>2]|0,b+20|0,d);return}function Tx(a,b,d){a=a|0;b=b|0;d=d|0;Dw(a,c[b>>2]|0)|0;nb[c[a>>2]&63](a,d,2)|0;c[b>>2]=zw(a)|0;return}function Ux(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;d=(c[d>>2]&3|0)==2?d:d+-48|0;g=c[d>>2]&3;h=c[((g|0)==3?d:d+48|0)+40>>2]|0;g=c[((g|0)==2?d:d+-48|0)+40>>2]|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];if(Px(b,h,g,f)|0){if((fz(b)|0)==(b|0)){if(a[b+24>>0]&64)wx(d);kz(b,d);Iz(d);h=d+8|0;qy(b,2,c[h>>2]|0,c[h+4>>2]|0)}if(!(jB(b,d,58,0,0)|0))if((fz(b)|0)==(b|0)){Ny(b,d);d=0}else d=0;else d=-1}else d=-1;l=e;return d|0}function Vx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;e=h;f=Xy(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0,d)|0;g=Xy(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0,d)|0;do if((f|0)!=0&(g|0)!=0){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=Px(a,f,g,e)|0;f=(e|0)==0;if(!((d|0)!=0&f)){if(f)break}else{Ox(a,b);e=b}d=c[e>>2]&3;l=h;return ((d|0)==(c[b>>2]&3|0)?e:e+(((d|0)==3?-1:1)*48|0)|0)|0}while(0);l=h;return 0}function Wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=b+8|0;e=d+8|0;e=t3(c[b>>2]|0,c[b+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;return ((e|0)==0?0:e>>31|1)|0}function Xx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+16|0;g=h;j=Yx(e)|0;f=lb[c[(c[j>>2]|0)+4>>2]&127](c[j+12>>2]|0,72)|0;c[f>>2]=c[f>>2]&-4;i=f+64|0;c[i>>2]=j;k=f+24|0;d=c[d>>2]|0;c[k>>2]=d;a[k>>0]=d&255|8;c[f+60>>2]=f;e=lb[c[c[j+4>>2]>>2]&127](f,e)|0;c[(c[i>>2]|0)+16>>2]=e;if(oy(f,0,b,g,1)|0){i=g;j=c[i+4>>2]|0;k=f+8|0;c[k>>2]=c[i>>2];c[k+4>>2]=j}k=Zx(f)|0;sy(k,0,f);l=h;return k|0}function Yx(b){b=b|0;var d=0,e=0,f=0,g=0;d=(b|0)!=0;if(d){e=c[b>>2]|0;e=(e|0)==0?18632:e}else e=18632;g=kb[c[e>>2]&63](b)|0;f=lb[c[e+4>>2]&127](g,80)|0;c[f>>2]=e;c[f+12>>2]=g;if(d){g=c[b+4>>2]|0;c[f+4>>2]=(g|0)==0?18508:g;b=c[b+8>>2]|0;b=(b|0)==0?18608:b}else{c[f+4>>2]=18508;b=18608}c[f+8>>2]=b;a[f+52>>0]=1;return f|0}function Zx(b){b=b|0;var d=0,e=0;c[b+36>>2]=CA(b,18688,c[4563]|0)|0;c[b+40>>2]=CA(b,18652,c[4563]|0)|0;d=(fz(b)|0)==(b|0);c[b+44>>2]=CA(b,d?18300:18336,c[4563]|0)|0;d=(fz(b)|0)==(b|0);c[b+48>>2]=CA(b,d?18372:18408,c[4563]|0)|0;c[b+52>>2]=CA(b,18444,c[4563]|0)|0;d=yA(b)|0;if(!((d|0)!=0?(e=_x(d,0)|0,c[b>>2]=c[b>>2]&15|e<<4,e=c[d+52>>2]|0,nb[c[e>>2]&63](e,b,1)|0,!(a[d+24>>0]&64)):0))ax(b);gz(b,b);return b|0}function _x(a,b){a=a|0;b=b|0;var d=0;d=(c[a+64>>2]|0)+24+(b<<3)|0;b=d;b=s3(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;a=z;c[d>>2]=b;c[d+4>>2]=a;z=a;return b|0}function $x(b){b=b|0;var d=0,e=0,f=0,g=0;f=yA(b)|0;g=(f|0)==0;if(g?(d=b+64|0,(c[(c[c[d>>2]>>2]|0)+16>>2]|0)!=0):0){kz(b,b);g=b+8|0;qy(b,0,c[g>>2]|0,c[g+4>>2]|0);d=c[d>>2]|0;tb[c[(c[d>>2]|0)+16>>2]&127](c[d+12>>2]|0);d=0}else e=4;do if((e|0)==4){d=wA(b)|0;while(1){if(!d)break;e=xA(d)|0;$x(d)|0;d=e}d=Sy(b)|0;while(1){if(!d)break;e=Ty(b,d)|0;cz(b,d)|0;d=e}By(b);kz(b,b);if(((((EA(b,c[b+40>>2]|0)|0)==0?(EA(b,c[b+36>>2]|0)|0)==0:0)?(EA(b,c[b+48>>2]|0)|0)==0:0)?(EA(b,c[b+44>>2]|0)|0)==0:0)?(EA(b,c[b+52>>2]|0)|0)==0:0){if(a[b+24>>0]&64?tx(b)|0:0){d=-1;break}Iz(b);e=b+8|0;qy(b,0,c[e>>2]|0,c[e+4>>2]|0);if(!g){zA(f,b)|0;Ny(f,b);d=0;break}d=b+64|0;while(1){e=c[d>>2]|0;f=c[e+48>>2]|0;if(!f)break;nz(b,c[f>>2]|0)|0}tb[c[(c[e+4>>2]|0)+20>>2]&127](c[e+16>>2]|0);if(!(Jz(b)|0)){d=c[d>>2]|0;g=c[d+12>>2]|0;f=(c[d>>2]|0)+12|0;ub[c[f>>2]&63](g,b);ub[c[f>>2]&63](g,d);d=0}else d=-1}else d=-1}while(0);return d|0}function ay(a){a=a|0;return Ew(c[a+40>>2]|0)|0}function by(a){a=a|0;var b=0,c=0,d=0;b=0;c=Sy(a)|0;while(1){if(!c)break;d=(cy(a,c,0,1)|0)+b|0;b=d;c=Ty(a,c)|0}return b|0}function cy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Fx(a,b)|0;if(f){if(!e)b=0;else b=dy(c[a+44>>2]|0,f+32|0)|0;if(d)b=(dy(c[a+44>>2]|0,f+28|0)|0)+b|0}else b=0;return b|0}function dy(a,b){a=a|0;b=b|0;var d=0;Dw(a,c[b>>2]|0)|0;d=Ew(a)|0;c[b>>2]=zw(a)|0;return d|0}function ey(b){b=b|0;return a[b+24>>0]&1|0}function fy(a){a=a|0;return (ey(a)|0)==0|0}function gy(a){a=a|0;return (d[a+24>>0]|0)>>>1&1|0}function hy(a,b){a=a|0;b=b|0;return a|0}function iy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(!d){f=1392;d=c[f>>2]|0;f=c[f+4>>2]|0;c[e>>2]=d;c[e+4>>2]=f;f=s3(d|0,f|0,2,0)|0;e=1392;c[e>>2]=f;c[e+4>>2]=z}else{if(!f)a=Lz(a,d)|0;else a=Oz(a,d)|0;c[e>>2]=a;c[e+4>>2]=0}return 1}function jy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function ky(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((c&1|0)==0&0==0)Qz(a,c)|0;return}function ly(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ((c&1|0)==0&0==0?c:0)|0}function my(a){a=a|0;return}function ny(a,b,c){a=a|0;b=b|0;c=c|0;return}function oy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=(e|0)!=0;do if(i){if((a[e>>0]|0)!=37?(h=c[b+64>>2]|0,h=pb[c[(c[h+4>>2]|0)+4>>2]&127](c[h+16>>2]|0,d,e,f,g)|0,h|0):0)break;h=ty(b,d,e,f)|0;if(!h)j=5}else j=5;while(0);if((j|0)==5)if(g){h=c[b+64>>2]|0;h=pb[c[(c[h+4>>2]|0)+4>>2]&127](c[h+16>>2]|0,d,0,f,g)|0;if(i&(h|0)!=0){j=f;uy(b,d,e,c[j>>2]|0,c[j+4>>2]|0)}}else h=0;return h|0}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+64>>2]|0;return ob[c[(c[a+4>>2]|0)+8>>2]&127](c[a+16>>2]|0,b,d,e)|0}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;zy(a,b,d,e)|0;a=c[a+64>>2]|0;xb[c[(c[a+4>>2]|0)+12>>2]&31](c[a+16>>2]|0,b,d,e);return}function ry(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;d=ez(a)|0;f=a+8|0;b=f;b=xy(d,c[a>>2]&3,c[b>>2]|0,c[b+4>>2]|0)|0;do if(!b){b=c[d+64>>2]|0;d=c[(c[b+4>>2]|0)+16>>2]|0;if(d|0?(e=f,e=ob[d&127](c[b+16>>2]|0,c[a>>2]&3,c[e>>2]|0,c[e+4>>2]|0)|0,e|0):0){b=e;break}if((c[a>>2]&3|0)==2)b=0;else{e=c[f>>2]|0;f=c[f+4>>2]|0;c[g>>2]=37;b=g+8|0;c[b>>2]=e;c[b+4>>2]=f;Y0(191693,93374,g)|0;b=191693}}while(0);l=h;return b|0}function sy(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+64>>2]|0;vb[c[(c[a+4>>2]|0)+24>>2]&127](c[a+16>>2]|0,b,d);return}function ty(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;b=c[(c[a+64>>2]|0)+56+(((b|0)==3?2:b)<<2)>>2]|0;if(((b|0)!=0?(f=Lz(a,d)|0,(f|0)!=0):0)?(c[h+24>>2]=f,g=nb[c[b>>2]&63](b,h,4)|0,(g|0)!=0):0){d=g+16|0;h=c[d+4>>2]|0;b=e;c[b>>2]=c[d>>2];c[b+4>>2]=h;b=1}else b=0;l=i;return b|0}function uy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=My(a,32)|0;g=h+16|0;c[g>>2]=e;c[g+4>>2]=f;c[h+24>>2]=Oz(a,d)|0;e=(b|0)==3?2:b;g=a+64|0;d=c[g>>2]|0;b=c[d+56+(e<<2)>>2]|0;if(!b){f=CA(a,18536,c[4563]|0)|0;c[(c[g>>2]|0)+56+(e<<2)>>2]=f;b=c[g>>2]|0}else{f=b;b=d}b=c[b+68+(e<<2)>>2]|0;if(!b){b=CA(a,18572,c[4563]|0)|0;c[(c[g>>2]|0)+68+(e<<2)>>2]=b}nb[c[f>>2]&63](f,h,1)|0;nb[c[b>>2]&63](b,h,1)|0;return}function vy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=b+16|0;b=c[a>>2]|0;a=c[a+4>>2]|0;d=d+16|0;e=c[d>>2]|0;d=c[d+4>>2]|0;return (a>>>0>d>>>0|(a|0)==(d|0)&b>>>0>e>>>0?1:(a>>>0<d>>>0|(a|0)==(d|0)&b>>>0<e>>>0)<<31>>31)|0}function wy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=c[b+24>>2]|0;e=c[d+24>>2]|0;return (b>>>0>e>>>0?1:(b>>>0<e>>>0)<<31>>31)|0}function xy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=yy(a,b,d,e)|0;if(!a)a=0;else a=c[a+24>>2]|0;return a|0}function yy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;a=c[(c[a+64>>2]|0)+68+(((b|0)==3?2:b)<<2)>>2]|0;if(!a)a=0;else{b=f+16|0;c[b>>2]=d;c[b+4>>2]=e;a=nb[c[a>>2]&63](a,f,4)|0}l=g;return a|0}function zy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=(b|0)==3?2:b;b=yy(a,f,d,e)|0;if(!b)b=0;else{e=a+64|0;d=c[(c[e>>2]|0)+56+(f<<2)>>2]|0;nb[c[d>>2]&63](d,b,2)|0;e=c[(c[e>>2]|0)+68+(f<<2)>>2]|0;nb[c[e>>2]&63](e,b,2)|0;Qz(a,c[b+24>>2]|0)|0;Ny(a,b);b=1}return b|0}function Ay(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;c[46171]=b;g=c[b+64>>2]|0;f=0;while(1){if((f|0)==3)break;h=g+56+(f<<2)|0;d=c[h>>2]|0;a:do if(d|0){d=nb[c[d>>2]&63](d,0,128)|0;while(1){if(!d)break a;e=c[h>>2]|0;e=nb[c[e>>2]&63](e,d,8)|0;if((a[c[d+24>>2]>>0]|0)!=37){d=e;continue}i=d+16|0;zy(b,f,c[i>>2]|0,c[i+4>>2]|0)|0;d=e}}while(0);f=f+1|0}return}function By(a){a=a|0;c[46171]=a;a=a+64|0;Cy((c[a>>2]|0)+56|0);Cy((c[a>>2]|0)+68|0);return}function Cy(a){a=a|0;var b=0,d=0,e=0;b=0;while(1){if((b|0)==3)break;d=a+(b<<2)|0;e=c[d>>2]|0;if(e|0){yw(e)|0;c[d>>2]=0}b=b+1|0}return}function Dy(a,b,c){a=a|0;b=b|0;c=c|0;if(!(O0(b,c,a)|0))a=0;else a=W_(b)|0;return a|0}function Ey(a,b){a=a|0;b=b|0;return D1(b,a)|0}function Fy(a){a=a|0;return w1(a)|0}function Gy(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+32|0;e=b+12|0;d=b;c[4656]=c[4653];c[4657]=c[4654];c[e>>2]=a;c[e+4>>2]=W_(a)|0;c[e+8>>2]=0;c[d>>2]=18632;c[d+4>>2]=18508;c[d+8>>2]=18620;a=TB(e,d)|0;Uz(0);l=b;return a|0}function Hy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((e|0)!=0?(h=b+8|0,f=c[h>>2]|0,(f|0)<(c[b+4>>2]|0)):0){i=(c[b>>2]|0)+f|0;b=0;g=a[i>>0]|0;f=d;d=i;while(1){d=d+1|0;a[f>>0]=g;b=b+1|0;if(!(g<<24>>24!=10&(b|0)<(e|0)))break;g=a[d>>0]|0;if(!(g<<24>>24))break;else f=f+1|0}c[h>>2]=(c[h>>2]|0)+b}else b=0;return b|0}function Iy(a){a=a|0;return 0}function Jy(a,b){a=a|0;b=b|0;a=C_(b)|0;H3(a|0,0,b|0)|0;return a|0}function Ky(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=F_(b,d)|0;if(d>>>0>c>>>0)H3(a+c|0,0,d-c|0)|0;return a|0}function Ly(a,b){a=a|0;b=b|0;D_(b);return}function My(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;a=c[a+64>>2]|0;a=lb[c[(c[a>>2]|0)+4>>2]&127](c[a+12>>2]|0,b)|0;if(!a)Pw(1,93380,d)|0;l=d;return a|0}function Ny(a,b){a=a|0;b=b|0;if(b|0){a=c[a+64>>2]|0;ub[c[(c[a>>2]|0)+12>>2]&63](c[a+12>>2]|0,b)}return}function Oy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=(c[b+16>>2]|0)+8|0;b=c[a>>2]|0;a=c[a+4>>2]|0;d=(c[d+16>>2]|0)+8|0;e=c[d>>2]|0;d=c[d+4>>2]|0;return (a>>>0<d>>>0|(a|0)==(d|0)&b>>>0<e>>>0?-1:(a>>>0>d>>>0|(a|0)==(d|0)&b>>>0>e>>>0)&1)|0}function Py(a,b,d){a=a|0;b=b|0;d=d|0;a=c[b+16>>2]|0;if((a+28|0)!=(b|0))Ny(c[a+24>>2]|0,b);return}function Qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=(c[c[b+16>>2]>>2]|0)>>>4;e=(c[c[d+16>>2]>>2]|0)>>>4;return (b>>>0<e>>>0?-1:b>>>0>e>>>0&1)|0}function Ry(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=183176;c[e>>2]=b;c[e+4>>2]=d;c[46176]=183168;a=c[a+40>>2]|0;a=nb[c[a>>2]&63](a,184688,4)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function Sy(a){a=a|0;a=c[a+36>>2]|0;a=nb[c[a>>2]&63](a,0,128)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function Ty(a,b){a=a|0;b=b|0;var d=0;b=Fx(a,b)|0;if((b|0)!=0?(d=c[a+36>>2]|0,d=nb[c[d>>2]&63](d,b,8)|0,(d|0)!=0):0)b=c[d+16>>2]|0;else b=0;return b|0}function Uy(a){a=a|0;a=c[a+36>>2]|0;a=nb[c[a>>2]&63](a,0,256)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function Vy(a,b){a=a|0;b=b|0;var d=0;b=Fx(a,b)|0;if((b|0)!=0?(d=c[a+36>>2]|0,d=nb[c[d>>2]&63](d,b,16)|0,(d|0)!=0):0)b=c[d+16>>2]|0;else b=0;return b|0}function Wy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Ry(a,b,c)|0;do if((d|0)!=0&(e|0)==0){e=fz(a)|0;if((e|0)!=(a|0)?(f=Ry(e,b,c)|0,f|0):0){Xy(a,f,1)|0;e=f;break}if(!(py(a,1,b,c)|0))e=0;else{e=_x(a,1)|0;e=Yy(a,b,c,e,z)|0;Zy(a,e);_y(a,e)}}while(0);return e|0}function Xy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=fz(a)|0;if((e|0)==(c[b+24>>2]|0)){e=b+8|0;e=Ry(a,c[e>>2]|0,c[e+4>>2]|0)|0;if((d|0)!=0&(e|0)==0){e=yA(a)|0;if(!e)e=0;else{d=Xy(e,b,d)|0;$y(a,d);return d|0}}}else e=0;return e|0}function Yy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;g=My(b,64)|0;h=c[g>>2]|0;i=g+8|0;c[i>>2]=d;c[i+4>>2]=e;c[g>>2]=h&12|f<<4|1;c[g+24>>2]=fz(b)|0;if(a[(fz(b)|0)+24>>0]&64)Az(g,93322,16,0)|0;return g|0}function Zy(a,b){a=a|0;b=b|0;do{$y(a,b);a=yA(a)|0}while((a|0)!=0);return}function _y(b,c){b=b|0;c=c|0;if(a[(fz(b)|0)+24>>0]&64)bx(b,c);gz(b,c);return}function $y(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+40|0;Ew(c[e>>2]|0)|0;if((fz(a)|0)==(a|0))d=b+28|0;else d=My(a,36)|0;c[d+16>>2]=b;e=c[e>>2]|0;nb[c[e>>2]&63](e,d,1)|0;e=c[a+36>>2]|0;nb[c[e>>2]&63](e,d,1)|0;return}function az(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;h=fz(a)|0;if(oy(a,1,b,g,0)|0){e=g;e=Ry(a,c[e>>2]|0,c[e+4>>2]|0)|0;if(!e)if(!((d|0)==0|(h|0)==(a|0))?(f=g,f=Ry(h,c[f>>2]|0,c[f+4>>2]|0)|0,(f|0)!=0):0)e=Xy(a,f,1)|0;else i=6}else i=6;if((i|0)==6)if((d|0)!=0?(oy(a,1,b,g,1)|0)!=0:0){i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;e=_x(a,1)|0;e=Yy(a,h,i,e,z)|0;Zy(a,e);_y(a,e);sy(a,1,e)}else e=0;l=j;return e|0}function bz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[46185]=b;d=Jx(a,b)|0;while(1){if(!d)break;e=Kx(a,d,b)|0;Sx(a,d,0);d=e}e=c[a+40>>2]|0;nb[c[e>>2]&63](e,184724,2)|0;e=c[a+36>>2]|0;nb[c[e>>2]&63](e,184724,2)|0;return}function cz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d+8|0;e=f;if(Ry(b,c[e>>2]|0,c[e+4>>2]|0)|0){if((fz(b)|0)==(b|0)){e=Jx(b,d)|0;while(1){if(!e)break;g=Kx(b,e,d)|0;Ux(b,e)|0;e=g}if(a[b+24>>0]&64)vx(d);kz(b,d);Iz(d);g=f;qy(b,1,c[g>>2]|0,c[g+4>>2]|0)}if(!(jB(b,d,59,0,0)|0))if((fz(b)|0)==(b|0)){Ny(b,d);e=0}else e=0;else e=-1}else e=-1;return e|0}function dz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;e=h;d=c[b>>2]|0;do if(!(d&3))if((yA(b)|0)==(a|0)){d=c[b>>2]|0;g=5;break}else{Pw(1,93406,e)|0;f=-1;break}else g=5;while(0);a:do if((g|0)==5)switch(d&3){case 1:{f=cz(a,b)|0;break a}case 2:case 3:{f=Ux(a,b)|0;break a}case 0:{f=$x(b)|0;break a}default:{}}while(0);l=h;return f|0}function ez(a){a=a|0;var b=0;switch(c[a>>2]&3){case 2:case 3:{b=c[(c[a+40>>2]|0)+24>>2]|0;break}case 1:{b=c[a+24>>2]|0;break}case 0:{b=a;break}default:{}}return b|0}function fz(a){a=a|0;var b=0;switch(c[a>>2]&3){case 2:case 3:{b=(c[a+40>>2]|0)+24|0;break}case 1:{b=a+24|0;break}case 0:{b=a+60|0;break}default:{}}return c[b>>2]|0}function gz(b,d){b=b|0;d=d|0;var e=0;e=c[b+64>>2]|0;if(!(a[e+52>>0]|0))qz(b,d,100,0);else hz(b,d,c[e+48>>2]|0);return}function hz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a:do if(d|0){hz(a,b,c[d+8>>2]|0);switch(c[b>>2]&3){case 0:{e=c[d>>2]|0;break}case 1:{e=(c[d>>2]|0)+12|0;break}case 2:{e=(c[d>>2]|0)+24|0;break}default:break a}e=c[e>>2]|0;if(e|0)vb[e&127](a,b,c[d+4>>2]|0)}while(0);return}function iz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=c[b+64>>2]|0;if(!(a[f+52>>0]|0))qz(b,d,101,e);else jz(b,d,e,c[f+48>>2]|0);return}function jz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a:do if(e|0){jz(a,b,d,c[e+8>>2]|0);switch(c[b>>2]&3){case 0:{f=(c[e>>2]|0)+4|0;break}case 1:{f=(c[e>>2]|0)+16|0;break}case 2:{f=(c[e>>2]|0)+28|0;break}default:break a}f=c[f>>2]|0;if(f|0)xb[f&31](a,b,c[e+4>>2]|0,d)}while(0);return}function kz(b,d){b=b|0;d=d|0;var e=0;e=c[b+64>>2]|0;if(!(a[e+52>>0]|0))qz(b,d,102,0);else lz(b,d,c[e+48>>2]|0);return}function lz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a:do if(d|0){lz(a,b,c[d+8>>2]|0);switch(c[b>>2]&3){case 0:{e=(c[d>>2]|0)+8|0;break}case 1:{e=(c[d>>2]|0)+20|0;break}case 2:{e=(c[d>>2]|0)+32|0;break}default:break a}e=c[e>>2]|0;if(e|0)vb[e&127](a,b,c[d+4>>2]|0)}while(0);return}function mz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=My(a,12)|0;c[e>>2]=b;c[e+4>>2]=d;d=(c[a+64>>2]|0)+48|0;c[e+8>>2]=c[d>>2];c[d>>2]=e;return}function nz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=(c[a+64>>2]|0)+48|0;d=c[e>>2]|0;a:do if(!d)d=-1;else{if((c[d>>2]|0)!=(b|0)){while(1){if(!d){d=-1;break a}e=d+8|0;f=c[e>>2]|0;if((c[f>>2]|0)==(b|0))break;else d=f}if(f)c[e>>2]=c[f+8>>2]}else c[e>>2]=c[d+8>>2];Ny(a,d);d=0}while(0);return d|0}function oz(a,b){a=a|0;b=b|0;var d=0;d=fz(a)|0;a:do if((d|0)==(fz(b)|0))switch(c[b>>2]&3){case 0:{while(1){if((b|0)==(a|0)){b=1;break a}b=yA(b)|0;if(!b){b=0;break}}break}case 1:{b=b+8|0;b=(Wy(a,c[b>>2]|0,c[b+4>>2]|0,0)|0)!=0;break a}default:{b=(Vx(a,b,0)|0)!=0;break a}}else b=0;while(0);return b&1|0}function pz(a){a=a|0;return c[a>>2]&3|0}function qz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=Az(a,93430,44,0)|0;switch(c|0){case 100:{e=rz(f,b,100)|0;if(!(sz(e,b)|0))tz(e,a,b,d)|0;break}case 101:{if(((sz(rz(f,b,100)|0,b)|0)==0?(sz(rz(f,b,102)|0,b)|0)==0:0)?(e=rz(f,b,101)|0,(sz(e,b)|0)==0):0)tz(e,a,b,d)|0;break}case 102:{uz(rz(f,b,100)|0,b);uz(rz(f,b,101)|0,b);e=rz(f,b,102)|0;if(!(sz(e,b)|0))tz(e,a,b,d)|0;break}default:Pw(1,93442,g)|0}l=h;return}function rz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;a:do switch(c[b>>2]&3){case 0:switch(d|0){case 100:{d=a+8|0;break a}case 101:{d=a+20|0;break a}case 102:{d=a+32|0;break a}default:{f=14;break a}}case 1:switch(d|0){case 100:{d=a+12|0;break a}case 101:{d=a+24|0;break a}case 102:{d=a+36|0;break a}default:{f=14;break a}}case 2:switch(d|0){case 100:{d=a+16|0;break a}case 101:{d=a+28|0;break a}case 102:{d=a+40|0;break a}default:{f=14;break a}}default:f=14}while(0);if((f|0)==14){Pw(1,93476,e)|0;d=0}a=c[d>>2]|0;if(!a){a=ez(b)|0;a=CA(a,18724,c[4563]|0)|0;c[d>>2]=a}l=g;return a|0}function sz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=vz(b)|0;b=e+8|0;c[b>>2]=f;c[b+4>>2]=z;b=nb[c[a>>2]&63](a,e,4)|0;l=d;return b|0}function tz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=My(ez(d)|0,32)|0;c[f+20>>2]=d;g=vz(d)|0;d=f+8|0;c[d>>2]=g;c[d+4>>2]=z;c[f+16>>2]=b;if(e|0){g=My(b,8)|0;c[f+24>>2]=g;c[g>>2]=e}nb[c[a>>2]&63](a,f,1)|0;return f|0}function uz(a,b){a=a|0;b=b|0;b=sz(a,b)|0;if(b|0)nb[c[a>>2]&63](a,b,2)|0;return}function vz(a){a=a|0;a=a+8|0;z=c[a+4>>2]|0;return c[a>>2]|0}function wz(a,b,d){a=a|0;b=b|0;d=d|0;xz(b);Ny(c[b+16>>2]|0,b);return}function xz(a){a=a|0;var b=0,d=0;b=a+16|0;a=c[a+24>>2]|0;while(1){if(!a)break;d=c[a+4>>2]|0;Ny(c[b>>2]|0,a);a=d}return}function yz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;i=k;h=c[b+16>>2]|0;f=h;while(1){if(!f){f=0;break}g=c[f>>2]|0;if((g|0)==(d|0)){j=7;break}if((a[d>>0]|0)==(a[g>>0]|0)?(b$(d,g)|0)==0:0){j=7;break}f=c[f+4>>2]|0;if((f|0)==(h|0)){f=0;break}}do if((j|0)==7){if(!(c[b>>2]&4)){if((f|0)==(h|0)&(e|0)==0){f=h;break}zz(b,f,e);break}if(e)if((h|0)==(f|0))f=h;else Pw(1,93501,i)|0}while(0);l=k;return f|0}function zz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[a+16>>2]=b;e=c[a>>2]|0;d=d<<2&4;c[a>>2]=e&-5|d;if(e&2|0){e=(e&3|0)==3?-1:1;c[a+(e*48|0)+16>>2]=b;e=a+(e*48|0)|0;c[e>>2]=c[e>>2]&-5|d}return}function Az(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=ez(a)|0;f=yz(a,b,0)|0;a:do if((d|0)!=0&(f|0)==0){d=My(h,d)|0;c[d>>2]=Oz(h,b)|0;switch(c[a>>2]&3){case 0:{Bz(a,d);g=d;break a}case 1:{Bz(a,d);g=d;break a}case 2:case 3:{Bz(a,d);g=d;break a}default:{}}}else g=f;while(0);if(e|0)yz(a,b,1)|0;return g|0}function Bz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a+16>>2]|0;do if(d){e=d+4|0;f=c[e>>2]|0;if((f|0)==(d|0)){c[e>>2]=b;e=d;d=b;break}else{c[b+4>>2]=f;e=b;break}}else{e=b;d=b}while(0);c[d+4>>2]=e;if(!(c[a>>2]&4))zz(a,b,0);return}function Cz(a,b){a=a|0;b=b|0;var d=0,e=0;e=ez(a)|0;d=yz(a,b,0)|0;if(!d)b=-1;else{Dz(a,d);if(!(c[a>>2]&3)){Ez(e,a,d);b=d}else{jB(fz(e)|0,a,60,d,0)|0;b=d}Qz(e,c[d>>2]|0)|0;Ny(e,b);b=0}return b|0}function Dz(a,b){a=a|0;b=b|0;var d=0;a=c[a+16>>2]|0;do{d=a+4|0;a=c[d>>2]|0}while((a|0)!=(b|0));c[d>>2]=c[b+4>>2];return}function Ez(a,b,d){a=a|0;b=b|0;d=d|0;if((c[b+16>>2]|0)==(d|0)){a=c[d+4>>2]|0;zz(b,(a|0)==(d|0)?0:a,0)}return}function Fz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=(d|0)>-1;g=f?d:0-d|0;a:do switch(b|0){case 0:{Az(a,c,g,e)|0;if(!f){b=wA(a)|0;while(1){if(!b)break a;Fz(b,0,c,d,e);b=xA(b)|0}}break}case 3:case 2:case 1:{d=(b|0)==1;b=Sy(a)|0;while(1){if(!b)break a;b:do if(d)Az(b,c,g,e)|0;else{f=Ex(a,b)|0;while(1){if(!f)break b;Az(f,c,g,e)|0;f=Gx(a,f)|0}}while(0);b=Ty(a,b)|0}}default:{}}while(0);return}function Gz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;a:do switch(b|0){case 0:{jB(a,a,61,c,1)|0;break}case 3:case 2:case 1:{e=(b|0)==1;d=Sy(a)|0;while(1){if(!d)break a;b:do if(e)Cz(d,c)|0;else{b=Ex(a,d)|0;while(1){if(!b)break b;Cz(b,c)|0;b=Gx(a,b)|0}}while(0);d=Ty(a,d)|0}}default:{}}while(0);return}function Hz(a,b,c){a=a|0;b=b|0;c=c|0;Cz(b,c)|0;return}function Iz(a){a=a|0;var b=0,d=0,e=0;d=ez(a)|0;b=a+16|0;a=c[b>>2]|0;if(a|0)do{e=a;a=c[a+4>>2]|0;Qz(d,c[e>>2]|0)|0;Ny(d,e)}while((a|0)!=(c[b>>2]|0));c[b>>2]=0;return}function Jz(a){a=a|0;return EA(a,Kz(a)|0)|0}function Kz(a){a=a|0;var b=0,d=0;if(!a)d=184760;else d=(c[a+64>>2]|0)+20|0;b=c[d>>2]|0;if(!b){b=CA(a,18760,c[4563]|0)|0;c[d>>2]=b;a=183232;c[a>>2]=-2147483648;c[a+4>>2]=0;a=183240;c[a>>2]=2147483647;c[a+4>>2]=-1}return b|0}function Lz(a,b){a=a|0;b=b|0;return Mz(Kz(a)|0,b)|0}function Mz(a,b){a=a|0;b=b|0;a=Nz(a,b)|0;if(!a)a=0;else a=c[a+16>>2]|0;return a|0}function Nz(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+32|0;e=d;c[e+16>>2]=b;b=nb[c[a>>2]&63](a,e,4)|0;l=d;return b|0}function Oz(a,b){a=a|0;b=b|0;var d=0,e=0;if(!b)d=0;else{e=Kz(a)|0;d=Nz(e,b)|0;if(!d){d=(W_(b)|0)+24|0;if(!a)d=C_(d)|0;else d=My(a,d)|0;a=d+8|0;c[a>>2]=1;c[a+4>>2]=0;a=d+20|0;b0(a,b)|0;c[d+16>>2]=a;nb[c[e>>2]&63](e,d,1)|0}else{e=d+8|0;b=e;b=s3(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;c[e>>2]=b;c[e+4>>2]=z}d=c[d+16>>2]|0}return d|0}function Pz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!b)d=0;else{e=Kz(a)|0;d=Nz(e,b)|0;if(!d){d=(W_(b)|0)+24|0;if(!a)d=C_(d)|0;else d=My(a,d)|0;g=183232;f=c[g+4>>2]|0;a=d+8|0;c[a>>2]=c[g>>2]|1;c[a+4>>2]=f;a=d+20|0;b0(a,b)|0;c[d+16>>2]=a;nb[c[e>>2]&63](e,d,1)|0}else{g=d+8|0;f=g;f=s3(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;c[g>>2]=f;c[g+4>>2]=z}d=c[d+16>>2]|0}return d|0}function Qz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((b|0)!=0?(d=Kz(a)|0,e=Nz(d,b)|0,(e|0)!=0):0)if((c[e+16>>2]|0)==(b|0)?(b=e+8|0,g=b,g=s3(c[g>>2]|0,c[g+4>>2]|0,-1,-1)|0,f=z,b,c[b>>2]=g,c[b+4>>2]=f,b=183240,(g|0)==0&(f|0)==0|(c[b>>2]|0)==0&(c[b+4>>2]|0)==0):0){DA(a,d,e)|0;a=0}else a=0;else a=-1;return a|0}function Rz(a){a=a|0;var b=0;if(!a)a=0;else{a=a+-12|0;b=183232;a=c[b>>2]&c[a>>2]}return a|0}function Sz(a){a=a|0;var b=0,d=0,e=0;if(a|0){d=183232;a=a+-12|0;e=a;b=c[e+4>>2]|c[d+4>>2];c[a>>2]=c[e>>2]|c[d>>2];c[a+4>>2]=b}return}function Tz(a){a=a|0;c[4699]=a;return}function Uz(a){a=a|0;c[46195]=a;c[4699]=1;return}function Vz(a,b){a=a|0;b=b|0;c[46196]=a;c[46197]=b;c[46198]=0;return}function Wz(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!(c[46199]|0)){c[46199]=1;if(!(c[46200]|0))c[46200]=1;if(!(c[46191]|0))c[46191]=c[15621];if(!(c[46192]|0))c[46192]=c[15653];k=c[46201]|0;if(!((k|0)!=0?(c[k>>2]|0)!=0:0)){Xz();k=Yz(c[46191]|0,16384)|0;c[c[46201]>>2]=k}Zz()}a:while(1){j=c[46202]|0;a[j>>0]=a[191725]|0;e=(c[(c[c[46201]>>2]|0)+28>>2]|0)+(c[46200]|0)|0;f=j;b:while(1){h=f;while(1){f=c[18800+(d[h>>0]<<2)>>2]|0;if(b[63752+(e<<1)>>1]|0){c[46203]=e;c[46204]=h}c:while(1){g=f&255;do{f=g+(b[63938+(e<<1)>>1]|0)|0;if((e|0)==(b[64148+(f<<1)>>1]|0))break c;k=b[64684+(e<<1)>>1]|0;e=k<<16>>16}while(k<<16>>16<=92);f=c[19824+(g<<2)>>2]|0}e=b[64894+(f<<1)>>1]|0;f=h+1|0;if((b[63938+(e<<1)>>1]|0)==219)break;else h=f}d:while(1){k=j;e:while(1){e=b[63752+(e<<1)>>1]|0;if(!(e<<16>>16)){e=b[63752+(c[46203]<<1)>>1]|0;f=c[46204]|0}else e=e<<16>>16;c[46193]=j;i=f;c[46194]=i-k;a[191725]=a[f>>0]|0;a[f>>0]=0;c[46202]=f;f:while(1){switch(e|0){case 1:{m=27;break a}case 12:{m=53;break a}case 13:{m=55;break a}case 14:{m=57;break a}case 15:{m=61;break a}case 16:{m=65;break a}case 17:{m=67;break a}case 18:{m=69;break a}case 19:{m=72;break a}case 20:{m=75;break a}case 21:{m=78;break a}case 23:{m=86;break a}case 33:{m=118;break a}case 39:case 38:case 37:case 36:{l=0;break a}case 2:{m=29;break b}case 3:{m=32;break b}case 4:{m=35;break b}case 5:{m=37;break b}case 6:{m=39;break b}case 7:{m=42;break b}case 8:{m=44;break b}case 9:{m=47;break b}case 10:{m=49;break b}case 11:{m=51;break b}case 22:{m=83;break b}case 24:{m=89;break b}case 25:{m=92;break b}case 26:{m=95;break b}case 27:{m=98;break b}case 28:{m=101;break b}case 29:{m=104;break b}case 30:{m=109;break b}case 31:{m=112;break b}case 32:{m=115;break b}case 34:{m=121;break b}case 0:break f;case 35:break;default:{m=134;break a}}h=c[46193]|0;a[f>>0]=a[191725]|0;e=c[46201]|0;g=c[e>>2]|0;if(!(c[g+44>>2]|0)){n=c[g+16>>2]|0;c[46206]=n;c[g>>2]=c[46191];g=c[e>>2]|0;c[g+44>>2]=1;e=n}else e=c[46206]|0;if((c[46202]|0)>>>0<=((c[g+4>>2]|0)+e|0)>>>0){m=128;break e}switch(gA()|0){case 0:{m=132;break d}case 2:{m=133;break e}case 1:break;default:continue a}c[46202]=c[46193];e=(((c[46200]|0)+-1|0)/2|0)+36|0}a[f>>0]=a[191725]|0;f=c[46204]|0;e=c[46203]|0}if((m|0)==128){m=0;g=i-h|0;h=c[46193]|0;f=h+(g+-1)|0;c[46202]=f;e=eA()|0;i=fA(e)|0;j=c[46193]|0;if(!i)continue;else{m=129;break}}else if((m|0)==133){m=0;f=(c[(c[c[46201]>>2]|0)+4>>2]|0)+(c[46206]|0)|0;c[46202]=f;e=eA()|0;j=c[46193]|0;continue}}if((m|0)==129){m=0;f=h+g|0;c[46202]=f;e=i;continue}else if((m|0)==132){m=0;f=(c[46193]|0)+(i-h+-1)|0;c[46202]=f;e=eA()|0;j=c[46193]|0;continue}}switch(m|0){case 29:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[4699]=(c[4699]|0)+1;continue a}case 32:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[46200]=3;continue a}case 35:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 37:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 39:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[46200]=1;continue a}case 42:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 44:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;_z();continue a}case 47:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 49:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 51:{m=0;e=c[46194]|0;if(!e)continue a;c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;continue a}case 83:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[46200]=5;aA();continue a}case 89:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;cA(95669);continue a}case 92:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;cA(93534);continue a}case 95:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[4699]=(c[4699]|0)+1;continue a}case 98:{m=0;f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;cA(e);continue a}case 101:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[46200]=7;c[46205]=1;aA();continue a}case 104:{m=0;e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;n=(c[46205]|0)+-1|0;c[46205]=n;if(!n){m=108;break a}cA(c[46193]|0);continue a}case 109:{m=0;f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;c[46205]=(c[46205]|0)+1;cA(e);continue a}case 112:{m=0;f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;cA(e);c[4699]=(c[4699]|0)+1;continue a}case 115:{m=0;f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;cA(e);continue a}case 121:{m=0;f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;E1(e,f,1,c[46192]|0)|0;continue a}}}switch(m|0){case 27:{e=c[46194]|0;if(!e)l=-1;else{c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=-1}break}case 53:{e=c[46194]|0;if(!e)l=259;else{c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=259}break}case 55:{e=c[46194]|0;if(!e)l=260;else{c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=260}break}case 57:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;if(!(c[46198]|0)){c[46198]=258;l=258}else l=258;break}case 61:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;if(!(c[46198]|0)){c[46198]=261;l=261}else l=261;break}case 65:{e=c[46194]|0;if(!e)l=263;else{c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=263}break}case 67:{e=c[46194]|0;if(!e)l=262;else{c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=262}break}case 69:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=(c[46198]|0)==261?264:45;break}case 72:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;l=(c[46198]|0)==258?264:45;break}case 75:{f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;c[46221]=Oz(c[46171]|0,e)|0;l=267;break}case 78:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;if($z()|0){m=(c[46194]|0)+-1|0;a[f>>0]=a[191725]|0;n=j+m|0;c[46202]=n;c[46193]=j;c[46194]=m;a[191725]=a[n>>0]|0;a[n>>0]=0;c[46202]=n}c[46221]=Oz(c[46171]|0,c[46193]|0)|0;l=267;break}case 86:{e=c[46194]|0;if(e|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[(c[46193]|0)+(e+-1)>>0]|0)==10&1;c[46200]=1;bA();l=268;break}case 108:{c[46200]=1;dA();l=268;break}case 118:{f=c[46194]|0;e=c[46193]|0;if(f|0)c[(c[c[46201]>>2]|0)+28>>2]=(a[e+(f+-1)>>0]|0)==10&1;l=a[e>>0]|0;break}case 134:{hA(93537);break}}return l|0}function Xz(){var a=0,b=0,d=0;b=c[46201]|0;do if(!b){a=oA(4)|0;c[46201]=a;if(!a)hA(93895);else{c[a>>2]=0;a=1;d=9;break}}else{a=c[46212]|0;if(0>=(a+-1|0)>>>0){a=a+8|0;b=iA(b,a<<2)|0;c[46201]=b;if(!b)hA(93895);else{d=b+(c[46212]<<2)|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[d+28>>2]=0;d=9;break}}}while(0);if((d|0)==9)c[46212]=a;return}function Yz(a,b){a=a|0;b=b|0;var d=0;d=oA(48)|0;if(!d)hA(93850);c[d+12>>2]=b;b=oA(b+2|0)|0;c[d+4>>2]=b;if(!b)hA(93850);else{c[d+20>>2]=1;kA(d,a);return d|0}return 0}function Zz(){var b=0,d=0;d=c[46201]|0;b=c[d>>2]|0;c[46206]=c[b+16>>2];b=c[b+8>>2]|0;c[46202]=b;c[46193]=b;c[46191]=c[c[d>>2]>>2];a[191725]=a[b>>0]|0;return}function _z(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g;d=g+16|0;e=g+12|0;h=c[46193]|0;b=h+1|0;i=(z$(b,93834,4)|0)==0;b=i?h+5|0:b;c[f>>2]=e;c[f+4>>2]=g+20;c[f+8>>2]=d;f=N1(b,93839,f)|0;if((f|0)>0?(c[4699]=(c[e>>2]|0)+-1,(f|0)!=1):0){d=b+(c[d>>2]|0)|0;b=d;a:while(1){e=a[b>>0]|0;switch(e<<24>>24){case 0:case 34:break a;default:{}}b=b+1|0}if((b|0)!=(d|0)&e<<24>>24==34){a[b>>0]=0;nA(d,b-d|0)}}l=g;return}function $z(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+2080|0;i=j+8|0;f=j;b=j+1056|0;d=j+32|0;h=j+16|0;k=a[(c[46193]|0)+((c[46194]|0)+-1)>>0]|0;e=k<<24>>24==46;if(e|((k&255)+-48|0)>>>0<10)if(e?(mA()|0)!=0:0)g=4;else b=0;else g=4;if((g|0)==4){k=c[46195]|0;Tw(h,1024,b);Ww(h,93745)|0;Ww(h,c[46193]|0)|0;c[f>>2]=c[4699];Y0(d,93789,f)|0;Ww(h,d)|0;Ww(h,(k|0)==0?93739:k)|0;Ww(h,93806)|0;d=h+4|0;b=c[d>>2]|0;if(b>>>0>=(c[h+8>>2]|0)>>>0){Uw(h,1)|0;b=c[d>>2]|0}a[b>>0]=0;b=c[h>>2]|0;c[d>>2]=b;c[i>>2]=b;Pw(0,93831,i)|0;Xw(h);b=1}l=j;return b|0}function aA(){var b=0;b=c[46207]|0;if(!b){b=C_(1024)|0;c[46207]=b;c[46209]=b+1024}c[46208]=b;a[b>>0]=0;return}function bA(){c[46221]=Oz(c[46171]|0,c[46207]|0)|0;a[c[46207]>>0]=0;return}function cA(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=c[46208]|0;d=c[46207]|0;if(e>>>0>d>>>0){e=e+-1|0;f=3}a:while(1){if((f|0)==3)c[46208]=e;f=c[46209]|0;g=f;do{h=b;b=b+1|0;h=a[h>>0]|0;i=e;e=e+1|0;a[i>>0]=h;if(!(h<<24>>24))break a}while(e>>>0<f>>>0);c[46208]=e;f=d;i=g-f<<1;d=F_(d,i)|0;c[46207]=d;c[46209]=d+i;e=d+(e-f)|0;f=3}c[46208]=e;return}function dA(){c[46221]=Pz(c[46171]|0,c[46207]|0)|0;a[c[46207]>>0]=0;return}function eA(){var d=0,e=0,f=0,g=0,h=0;h=c[46202]|0;g=c[46193]|0;e=(c[(c[c[46201]>>2]|0)+28>>2]|0)+(c[46200]|0)|0;while(1){if(g>>>0>=h>>>0)break;d=a[g>>0]|0;if(!(d<<24>>24))d=1;else d=c[18800+((d&255)<<2)>>2]|0;if(b[63752+(e<<1)>>1]|0){c[46203]=e;c[46204]=g}a:while(1){f=d&255;do{d=f+(b[63938+(e<<1)>>1]|0)|0;if((e|0)==(b[64148+(d<<1)>>1]|0))break a;d=b[64684+(e<<1)>>1]|0;e=d<<16>>16}while(d<<16>>16<=92);d=c[19824+(f<<2)>>2]|0}g=g+1|0;e=b[64894+(d<<1)>>1]|0}return e|0}function fA(a){a=a|0;var d=0;if(b[63752+(a<<1)>>1]|0){d=c[46202]|0;c[46203]=a;c[46204]=d}while(1){d=(b[63938+(a<<1)>>1]|0)+1|0;if((a|0)==(b[64148+(d<<1)>>1]|0))break;a=b[64684+(a<<1)>>1]|0}d=b[64894+(d<<1)>>1]|0;return (d<<16>>16==92?0:d<<16>>16)|0}function gA(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[46201]|0;g=c[j>>2]|0;i=c[g+4>>2]|0;f=c[46193]|0;l=c[46202]|0;k=l;if(l>>>0>(i+((c[46206]|0)+1)|0)>>>0)hA(93592);h=k-f|0;if(!(c[g+40>>2]|0))b=(h|0)==1?1:2;else{l=h+-1|0;h=i;g=0;while(1){if((g|0)>=(l|0))break;a[h>>0]=a[f>>0]|0;h=h+1|0;f=f+1|0;g=g+1|0}f=c[j>>2]|0;do if((c[f+44>>2]|0)==2){c[46206]=0;c[f+16>>2]=0;e=f;m=17}else{while(1){i=f+12|0;h=c[i>>2]|0;g=h-l+-1|0;if(g|0){m=16;break}g=f+4|0;j=c[g>>2]|0;if(!(c[f+20>>2]|0)){m=12;break}f=h<<1;f=(f|0)==0?(h>>>3)+h|0:f;c[i>>2]=f;f=iA(j,f+2|0)|0;c[g>>2]=f;if(!f)break;j=f+(k-j)|0;c[46202]=j;f=c[c[46201]>>2]|0;k=j}if((m|0)==12)c[g>>2]=0;else if((m|0)==16){d=nb[c[c[(c[46196]|0)+8>>2]>>2]&63](c[46197]|0,(c[f+4>>2]|0)+l|0,g>>>0<8192?g:8192)|0;e=c[c[46201]>>2]|0;c[46206]=d;c[e+16>>2]=d;if(!d){m=17;break}else{b=0;break}}hA(93648)}while(0);do if((m|0)==17)if(!l){jA(c[46191]|0);b=1;d=c[46206]|0;e=c[c[46201]>>2]|0;break}else{c[e+44>>2]=2;b=2;d=0;break}while(0);f=d+l|0;do if(f>>>0>(c[e+12>>2]|0)>>>0){m=iA(c[e+4>>2]|0,f+(d>>>1)|0)|0;d=c[46201]|0;c[(c[d>>2]|0)+4>>2]=m;d=c[(c[d>>2]|0)+4>>2]|0;if(!d)hA(93692);else{n=c[46206]|0;o=d;break}}else{n=d;o=c[e+4>>2]|0}while(0);n=n+l|0;c[46206]=n;a[o+n>>0]=0;o=c[46201]|0;a[(c[(c[o>>2]|0)+4>>2]|0)+((c[46206]|0)+1)>>0]=0;c[46193]=c[(c[o>>2]|0)+4>>2]}return b|0}function hA(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=c[15686]|0;c[b>>2]=a;g1(d,93588,b)|0;Sa(2)}function iA(a,b){a=a|0;b=b|0;return F_(a,b)|0}function jA(a){a=a|0;var b=0,d=0,e=0;d=c[46201]|0;if((d|0)!=0?(b=c[d>>2]|0,(b|0)!=0):0)e=4;else{Xz();b=Yz(c[46191]|0,16384)|0;d=c[46201]|0;c[d>>2]=b;if(!d)b=0;else e=4}kA(b,a);Zz();return}function kA(a,b){a=a|0;b=b|0;var d=0;d=c[(O_()|0)>>2]|0;lA(a);c[a>>2]=b;c[a+40>>2]=1;b=c[46201]|0;if(!b)b=0;else b=c[b>>2]|0;if((b|0)!=(a|0)){c[a+32>>2]=1;c[a+36>>2]=0}c[a+24>>2]=0;c[(O_()|0)>>2]=d;return}function lA(b){b=b|0;var d=0;if(b|0){c[b+16>>2]=0;d=b+4|0;a[c[d>>2]>>0]=0;a[(c[d>>2]|0)+1>>0]=0;c[b+8>>2]=c[d>>2];c[b+28>>2]=1;c[b+44>>2]=0;d=c[46201]|0;if(!d)d=0;else d=c[d>>2]|0;if((d|0)==(b|0))Zz()}return}function mA(){var b=0,d=0;d=c[46193]|0;b=(c[46194]|0)+-2|0;while(1){if((b|0)<=-1){b=0;break}if((a[d+b>>0]|0)==46){b=1;break}else b=b+-1|0}return b|0}function nA(a,b){a=a|0;b=b|0;var d=0;d=c[46210]|0;if((d|0)<(b|0)){if(!d)d=C_(b+1|0)|0;else d=F_(c[46211]|0,b+1|0)|0;c[46211]=d;c[46210]=b}else d=c[46211]|0;b0(d,a)|0;c[46195]=c[46211];return}function oA(a){a=a|0;return C_(a)|0}function pA(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+2112|0;k=m+32|0;i=m+24|0;h=m+16|0;g=m+8|0;f=m;d=m+56|0;j=m+40|0;Tw(j,1024,m+1080|0);e=c[46195]|0;if(e|0){Ww(j,e)|0;Ww(j,93945)|0}Ww(j,b)|0;c[f>>2]=c[4699];Y0(d,93948,f)|0;Ww(j,d)|0;a:do if(!(a[c[46193]>>0]|0))switch(((c[46200]|0)+-1|0)/2|0|0){case 2:{c[g>>2]=16384;Y0(d,93968,g)|0;Ww(j,d)|0;b=c[46207]|0;if(!(a[b>>0]|0))break a;i=W_(b)|0;Ww(j,94030)|0;b=c[46207]|0;if((i|0)>80)a[b+80>>0]=0;Ww(j,b)|0;break a}case 3:{c[h>>2]=16384;Y0(d,94049,h)|0;Ww(j,d)|0;b=c[46207]|0;if(!(a[b>>0]|0))break a;i=W_(b)|0;Ww(j,94117)|0;b=c[46207]|0;if((i|0)>80)a[b+80>>0]=0;Ww(j,b)|0;break a}case 1:{c[i>>2]=16384;Y0(d,94136,i)|0;Ww(j,d)|0;break a}default:break a}else{Ww(j,93960)|0;Ww(j,c[46193]|0)|0;d=j+4|0;b=c[d>>2]|0;if(b>>>0>=(c[j+8>>2]|0)>>>0){Uw(j,1)|0;b=c[d>>2]|0}c[d>>2]=b+1;a[b>>0]=39}while(0);e=j+4|0;b=c[e>>2]|0;d=j+8|0;if(b>>>0>=(c[d>>2]|0)>>>0){Uw(j,1)|0;b=c[e>>2]|0}c[e>>2]=b+1;a[b>>0]=10;b=c[e>>2]|0;if(b>>>0>=(c[d>>2]|0)>>>0){Uw(j,1)|0;b=c[e>>2]|0}a[b>>0]=0;i=c[j>>2]|0;c[e>>2]=i;c[k>>2]=i;Pw(1,93831,k)|0;Xw(j);l=m;return}function qA(){rA(c[46193]|0);return}function rA(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[46202]|0;a[j>>0]=a[191725]|0;i=c[46201]|0;e=c[i>>2]|0;d=c[e+4>>2]|0;if(j>>>0<(d+2|0)>>>0){f=d+((c[46206]|0)+2)|0;g=d+((c[e+12>>2]|0)+2)|0;k=d;h=e;while(1){if(f>>>0<=k>>>0)break;e=f+-1|0;k=g+-1|0;a[k>>0]=a[e>>0]|0;h=c[i>>2]|0;f=e;g=k;k=c[h+4>>2]|0}e=g-f|0;d=j+e|0;j=c[h+12>>2]|0;c[46206]=j;c[h+16>>2]=j;if(d>>>0<(k+2|0)>>>0)hA(94195);else{l=b+e|0;m=d}}else{l=b;m=j}b=m+-1|0;a[b>>0]=64;c[46193]=l;a[191725]=a[b>>0]|0;c[46202]=b;return}function sA(){var a=0;a=c[46201]|0;if(!a)a=0;else a=c[a>>2]|0;lA(a);return}function tA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+80|0;f=e;g=a+52|0;FA(a,c[g>>2]|0,18444);a=f+8|0;c[a>>2]=b;c[a+4>>2]=d;d=c[g>>2]|0;d=nb[c[d>>2]&63](d,f,4)|0;l=e;return d|0}function uA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=tA(b,d,e)|0;if(!f){f=My(b,72)|0;c[f+64>>2]=c[b+64>>2];g=f+24|0;h=c[b+24>>2]|0;c[g>>2]=h;a[g>>0]=h&255&-9;c[f+56>>2]=b;c[f+60>>2]=c[b+60>>2];b=f+8|0;c[b>>2]=d;c[b+4>>2]=e;Zx(f)|0}return f|0}function vA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;if(!(((b|0)!=0?(oy(a,0,b,f,0)|0)!=0:0)?(e=f,e=tA(a,c[e>>2]|0,c[e+4>>2]|0)|0,(e|0)!=0):0))if((d|0)!=0?(oy(a,0,b,f,1)|0)!=0:0){e=f;e=uA(a,c[e>>2]|0,c[e+4>>2]|0)|0;sy(a,0,e)}else e=0;l=g;return e|0}function wA(a){a=a|0;a=c[a+52>>2]|0;return nb[c[a>>2]&63](a,0,128)|0}function xA(a){a=a|0;var b=0;b=yA(a)|0;if(!b)a=0;else{b=c[b+52>>2]|0;a=nb[c[b>>2]&63](b,a,8)|0}return a|0}function yA(a){a=a|0;return c[a+56>>2]|0}function zA(a,b){a=a|0;b=b|0;a=c[a+52>>2]|0;return nb[c[a>>2]&63](a,b,2)|0}function AA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[46213]|0;e=(b|0)!=0;do if(!a)if(e){D_(b);a=0;break}else{a=C_(d)|0;break}else if(e){Ny(a,b);a=0;break}else{a=My(a,d)|0;break}while(0);return a|0}function BA(a,b,d){a=a|0;b=b|0;d=d|0;a=c[46213]|0;if(!a)D_(b);else Ny(a,b);return}function CA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=b+28|0;f=c[e>>2]|0;c[e>>2]=7;c[46213]=a;d=Cw(b,d)|0;c[e>>2]=f;c[46213]=0;return d|0}function DA(a,b,d){a=a|0;b=b|0;d=d|0;c[46213]=a;return nb[c[b>>2]&63](b,d,2)|0}function EA(a,b){a=a|0;b=b|0;var d=0,e=0;d=(Kw(b,0,0)|0)+28|0;e=c[d>>2]|0;c[d>>2]=7;c[46213]=a;if(!(yw(b)|0)){c[d>>2]=e;c[46213]=0;a=0}else a=1;return a|0}function FA(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0?(Kw(b,0,0)|0)!=(c|0):0)Kw(b,c,0)|0;return}function GA(a,b){a=a|0;b=b|0;if(!(Rz(a)|0))b=IA(a,b)|0;else HA(a,b)|0;return b|0}function HA(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;a[c>>0]=60;e=c;while(1){d=e+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;a[d>>0]=f;b=b+1|0;e=d}a[d>>0]=62;a[e+2>>0]=0;return c|0}function IA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if((b|0)!=0?(a[b>>0]|0)!=0:0){a[d>>0]=34;l=a[b>>0]|0;q=0;g=((l+-45&255)<2|((l&255)+-48|0)>>>0<10)&1;h=0;i=0;j=0;e=d+1|0;f=b+1|0;b:while(1){k=e;while(1){if(!(l<<24>>24))break b;e=l&255;c:do if(l<<24>>24==34){a[k>>0]=92;m=g;n=1;k=k+1|0}else{if(!g){n=l<<24>>24>-1&(l<<24>>24!=95&(M$(e)|0)==0);m=0;n=n?1:h;break}switch(l<<24>>24){case 45:{n=(j|0)==0;m=n?g:0;n=n?h:1;break c}case 46:{n=(i|0)==0;m=n?g:0;n=n?h:1;i=i+1|0;break c}default:{n=(e+-48|0)>>>0<10;m=n?g:0;n=n?h:1;break c}}}while(0);e=k+1|0;a[k>>0]=l;p=f+1|0;o=a[f>>0]|0;j=j+1|0;f=c[5005]|0;if(!f){g=m;h=n;k=e;f=p;l=o;continue}g=o&255;h=o<<24>>24!=0;if((q&h?!(l<<24>>24==92|l<<24>>24>-1&((l+-45&255)>1&(M$(l<<24>>24)|0)==0)^1):0)?!(o<<24>>24>-1&((o+-45&255)>1&(M$(g)|0)==0)):0)break;if((j|0)<(f|0)|h^1){g=m;h=n;k=e;f=p;l=o;continue}if(l<<24>>24==92|l<<24>>24>-1&((M$(l<<24>>24)|0)==0&(l+-45&255)>1)^1){q=1;g=m;h=n;l=o;f=p;continue b}if(o<<24>>24>-1&((o+-45&255)>1&(M$(g)|0)==0)){q=1;g=m;h=n;l=o;f=p;continue b}a[e>>0]=92;a[k+2>>0]=10;g=m;h=1;j=0;k=k+3|0;f=p;l=o}a[e>>0]=92;a[k+2>>0]=10;q=0;g=m;h=1;j=0;l=o;e=k+3|0;f=p}a[k>>0]=34;a[k+1>>0]=0;if(!h){if((j|0)==1?((a[b>>0]|0)+-45&255)<2:0){b=d;break}else e=20024;while(1){f=c[e>>2]|0;if(!f)break a;if(!(O$(f,b)|0)){b=d;break}else e=e+4|0}}else b=d}else b=94227;while(0);return b|0}function JA(a){a=a|0;return GA(a,KA(a)|0)|0}function KA(a){a=a|0;var b=0;b=((W_(a)|0)<<1)+2|0;b=b>>>0>1024?b:1024;a=c[46215]|0;if(b>>>0>(c[46214]|0)>>>0){if(!a)a=C_(b)|0;else a=F_(a,b)|0;c[46215]=a;c[46214]=b}return a|0}function LA(a,b){a=a|0;b=b|0;a=wA(a)|0;while(1){if(!a){a=0;break}if((MA(a)|0)==0?Xy(a,b,0)|0:0){a=1;break}a=xA(a)|0}return a|0}function MA(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=ry(b)|0;if((h|0)!=0?(a[h>>0]|0)!=37:0)d=0;else e=3;a:do if((e|0)==3){d=dx(b)|0;b:do if(d|0?(f=dx(yA(b)|0)|0,f|0):0){h=Ew(c[(dx(fz(b)|0)|0)+8>>2]|0)|0;g=d+12|0;e=f+12|0;d=0;while(1){if((d|0)>=(h|0))break b;f=c[(c[g>>2]|0)+(d<<2)>>2]|0;if((f|0?(i=c[(c[e>>2]|0)+(d<<2)>>2]|0,i|0):0)?b$(f,i)|0:0){d=0;break a}d=d+1|0}}while(0);d=_w(b,0)|0;if(d)if((Ew(c[d+8>>2]|0)|0)>0)d=0;else return (Ew(c[d+12>>2]|0)|0)<1|0;else d=1}while(0);return d|0}function NA(b,d){b=b|0;d=d|0;var e=0,f=0;c[46216]=0;e=xx(b,94237)|0;if((e|0?((a[e>>0]|0)+-48|0)>>>0<10:0)?(f=i1(e,0,10)|0,(f|0)==0|(f|0)>59):0)c[5005]=f;OA(b,1);if(((PA(b,d,1)|0)!=-1?(QA(b,d)|0)!=-1:0)?(RA(b,d)|0)!=-1:0){c[5005]=128;b=kb[c[(c[(c[b+64>>2]|0)+8>>2]|0)+8>>2]&63](d)|0}else b=-1;return b|0}function OA(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=wA(a)|0;while(1){if(!d)break;OA(d,0);d=xA(d)|0}a:do if(b|0){b=Sy(a)|0;while(1){if(!b)break a;c[b>>2]=c[b>>2]&-9;d=Ex(a,b)|0;while(1){if(!d)break;c[d>>2]=c[d>>2]&-9;d=Gx(a,d)|0}b=Ty(a,b)|0}}while(0);return}function PA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if((e|0)==0?(yA(b)|0)!=0:0){i=0;g=191979;k=106488}else{k=(a[b+24>>0]&1)==0?191979:94281;g=(gy(b)|0)==0;c[46217]=nx(b,2,108373,0)|0;c[46218]=nx(b,2,108382,0)|0;i=1;g=g?191979:94284}f=ry(b)|0;if((f|0)!=0?(a[f>>0]|0)!=37:0){h=1;j=99578}else{h=0;j=191979;f=191979}do if((SA(b,d)|0)!=-1?(TA(b,d,g)|0)!=-1:0){g=(h|0)==0;if(h|i|0){if((TA(b,d,k)|0)==-1){f=-1;break}if((TA(b,d,99571)|0)==-1){f=-1;break}}if(!g?(cB(b,d,f)|0)==-1:0){f=-1;break}if(((TA(b,d,j)|0)!=-1?(TA(b,d,94292)|0)!=-1:0)?(c[46216]=(c[46216]|0)+1,(hB(b,d,e)|0)!=-1):0){c[b>>2]=c[b>>2]|8;f=0}else f=-1}else f=-1;while(0);return f|0}function QA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if((UA(a,b)|0)==-1)d=-1;else{k=_w(fz(a)|0,0)|0;i=(k|0)==0;j=k+12|0;k=k+8|0;h=Sy(a)|0;while(1){if(!h){d=0;break a}if(VA(a,h,(c[h>>2]|0)>>>4,0)|0){if(i)d=0;else d=c[k>>2]|0;if((WA(h,b,d)|0)==-1){d=-1;break a}}g=Ex(a,h)|0;d=h;while(1){if(!g)break;f=g+-48|0;e=c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0;if((d|0)!=(e|0)?(VA(a,e,(c[h>>2]|0)>>>4,0)|0)!=0:0){if(i)d=0;else d=c[k>>2]|0;if((WA(c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0,b,d)|0)==-1){d=-1;break a}d=c[((c[g>>2]&3|0)==2?g:f)+40>>2]|0}if(XA(a,g)|0){if(i)e=0;else e=c[j>>2]|0;if((YA(g,b,e)|0)==-1){d=-1;break a}}g=Gx(a,g)|0}h=Ty(a,h)|0}}while(0);return d|0}function RA(a,b){a=a|0;b=b|0;c[46216]=(c[46216]|0)+-1;if((SA(a,b)|0)==-1)a=-1;else a=((TA(a,b,107982)|0)==-1)<<31>>31;return a|0}function SA(a,b){a=a|0;b=b|0;var d=0;d=c[46216]|0;while(1){if((d|0)<=0){d=0;break}if((TA(a,b,150515)|0)==-1){d=-1;break}else d=d+-1|0}return d|0}function TA(a,b,d){a=a|0;b=b|0;d=d|0;return lb[c[(c[(c[a+64>>2]|0)+8>>2]|0)+4>>2]&127](b,d)|0}function UA(a,b){a=a|0;b=b|0;a=wA(a)|0;while(1){if(!a){a=0;break}if(!(MA(a)|0)){if((PA(a,b,0)|0)==-1){a=-1;break}if((QA(a,b)|0)==-1){a=-1;break}if((RA(a,b)|0)==-1){a=-1;break}}else UA(a,b)|0;a=xA(a)|0}return a|0}function VA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((LA(a,b)|0)==0?(eB(a,b,c,d)|0)!=0:0)if((fB(a,b)|0)==0?(gB(b)|0)==0:0)e=5;else a=1;else e=5;if((e|0)==5)a=0;return a|0}function WA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ez(a)|0;do if((SA(d,b)|0)!=-1?(ZA(a,b)|0)!=-1:0){if(($A(a)|0)==0?(aB(a,b,c)|0)==-1:0){a=-1;break}a=TA(d,b,94248)|0}else a=-1;while(0);return a|0}function XA(a,b){a=a|0;b=b|0;a=wA(a)|0;while(1){if(!a){a=1;break}if((MA(a)|0)==0?Vx(a,b,0)|0:0){a=0;break}a=xA(a)|0}return a|0}function YA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]&3;g=c[((e|0)==3?a:a+48|0)+40>>2]|0;e=c[((e|0)==2?a:a+-48|0)+40>>2]|0;f=ez(g)|0;do if((((((SA(f,b)|0)!=-1?(ZA(g,b)|0)!=-1:0)?(_A(a,b,c[46217]|0)|0)!=-1:0)?(g=(ey(ez(g)|0)|0)!=0,(TA(f,b,g?97053:97058)|0)!=-1):0)?(ZA(e,b)|0)!=-1:0)?(_A(a,b,c[46218]|0)|0)!=-1:0){if(!($A(a)|0)){if((aB(a,b,d)|0)==-1){a=-1;break}}else if((bB(a,b,1)|0)==-1){a=-1;break}a=TA(f,b,94248)|0}else a=-1;while(0);return a|0}function ZA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;g=i;d=i+8|0;e=ry(a)|0;f=ez(a)|0;if(!e){j=a+8|0;a=c[j+4>>2]|0;e=g;c[e>>2]=c[j>>2];c[e+4>>2]=a;Y0(d,94268,g)|0;if((TA(f,b,d)|0)==-1)a=-1;else h=4}else if((cB(f,b,e)|0)==-1)a=-1;else h=4;if((h|0)==4)a=0;l=i;return a|0}function _A(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if((d|0)!=0?(e=ez(b)|0,f=yx(b,d)|0,(a[f>>0]|0)!=0):0)if((TA(e,c,104958)|0)==-1)b=-1;else{do if(Rz(f)|0){if((cB(e,c,f)|0)==-1){b=-1;break a}}else{b=A$(f,58)|0;if(!b)if((dB(e,c,f,0)|0)==-1){b=-1;break a}else break;a[b>>0]=0;if((dB(e,c,f,0)|0)==-1){b=-1;break a}if((TA(e,c,104958)|0)==-1){b=-1;break a}if((dB(e,c,b+1|0,0)|0)==-1){b=-1;break a}a[b>>0]=58}while(0);b=0}else b=0;while(0);return b|0}function $A(a){a=a|0;return (c[a>>2]|0)>>>3&1|0}function aB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if(!(c[a>>2]&2)){e=0;k=4}else{switch(bB(a,b,0)|0){case -1:{e=-1;break a}case 0:{e=0;k=4;break a}default:{}}e=1;k=4}while(0);b:do if((k|0)==4){f=dx(a)|0;j=ez(a)|0;c:do if(f){i=f+12|0;h=nb[c[d>>2]&63](d,0,128)|0;while(1){if(!h)break c;do if(c[a>>2]&2){g=c[46217]|0;if(g|0?(c[h+16>>2]|0)==(c[g+16>>2]|0):0)break;g=c[46218]|0;if(!((g|0)!=0?(c[h+16>>2]|0)==(c[g+16>>2]|0):0))k=12}else k=12;while(0);if((k|0)==12){k=0;f=h+16|0;if((c[(c[i>>2]|0)+(c[f>>2]<<2)>>2]|0)!=(c[h+12>>2]|0)){g=e+1|0;if(e){if((TA(j,b,94263)|0)==-1){e=-1;break b}if((SA(j,b)|0)==-1){e=-1;break b}}else{if((SA(j,b)|0)==-1){e=-1;break b}if((TA(j,b,94260)|0)==-1){e=-1;break b}c[46216]=(c[46216]|0)+1}if((cB(j,b,c[h+8>>2]|0)|0)==-1){e=-1;break b}if((TA(j,b,94266)|0)==-1){e=-1;break b}if((cB(j,b,c[(c[i>>2]|0)+(c[f>>2]<<2)>>2]|0)|0)==-1){e=-1;break b}else e=g}}h=nb[c[d>>2]&63](d,h,8)|0}}while(0);if((e|0)>0){if((TA(j,b,94258)|0)==-1){e=-1;break}c[46216]=(c[46216]|0)+-1}c[a>>2]=c[a>>2]|8;e=0}while(0);return e|0}function bB(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;e=ry(b)|0;b=ez(b)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0)if((TA(b,c,94251)|0)!=-1?(cB(b,c,e)|0)!=-1:0)if((d|0)!=0?(TA(b,c,94258)|0)==-1:0)b=-1;else{b=1;f=7}else b=-1;else{b=0;f=7}return b|0}function cB(a,b,c){a=a|0;b=b|0;c=c|0;return dB(a,b,c,1)|0}function dB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(!d)c=IA(c,KA(c)|0)|0;else c=JA(c)|0;return TA(a,b,c)|0}function eB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do if(0<e>>>0|(0==(e|0)?(c[b>>2]|0)>>>4>>>0<d>>>0:0))b=0;else{b=Hx(a,b)|0;while(1){if(!b){b=1;break a}if(0<e>>>0|(0==(e|0)?(c[c[b+40>>2]>>2]|0)>>>4>>>0<d>>>0:0)){b=0;break a}b=Ix(a,b)|0}}while(0);return b|0}function fB(a,b){a=a|0;b=b|0;if(!(Hx(a,b)|0))a=(Ex(a,b)|0)==0&1;else a=0;return a|0}function gB(a){a=a|0;var b=0,d=0,e=0;a=dx(a)|0;a:do if(!a)a=0;else{d=a+8|0;e=c[d>>2]|0;b=a+12|0;a=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!a){a=0;break a}if((c[(c[b>>2]|0)+(c[a+16>>2]<<2)>>2]|0)!=(c[a+12>>2]|0)){a=1;break a}e=c[d>>2]|0;a=nb[c[e>>2]&63](e,a,8)|0}}while(0);return a|0}function hB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=_w(a,0)|0;if(e)if(((iB(a,b,108412,c[e+16>>2]|0,d)|0)!=-1?(iB(a,b,108399,c[e+8>>2]|0,d)|0)!=-1:0)?(iB(a,b,108368,c[e+12>>2]|0,d)|0)!=-1:0)f=5;else a=-1;else f=5;if((f|0)==5)a=0;return a|0}function iB(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=(g|0)!=0;if(m)l=0;else l=Hw(f,0)|0;k=(l|0)==0;j=nb[c[f>>2]&63](f,0,128)|0;g=0;while(1){if(!j){n=23;break}i=j+12|0;n=c[i>>2]|0;if((n|0)!=0?(a[n>>0]|0)!=0:0)n=12;else n=7;do if((n|0)==7){n=0;if(!(a[j+22>>0]|0)){if(!k){h=nb[c[l>>2]&63](l,j,4)|0;o=c[h+12>>2]|0;if(o|0?a[o>>0]|0:0){n=12;break}if(!(a[h+22>>0]|0))n=12}}else n=12}while(0);if((n|0)==12){n=0;h=g+1|0;if(g){if((TA(b,d,94263)|0)==-1){g=-1;break}if((SA(b,d)|0)==-1){g=-1;break}}else{if((SA(b,d)|0)==-1){g=-1;break}if((TA(b,d,e)|0)==-1){g=-1;break}if((TA(b,d,94260)|0)==-1){g=-1;break}c[46216]=(c[46216]|0)+1}if((cB(b,d,c[j+8>>2]|0)|0)==-1){g=-1;break}if((TA(b,d,94266)|0)==-1){g=-1;break}if((cB(b,d,c[i>>2]|0)|0)==-1){g=-1;break}else g=h}j=nb[c[f>>2]&63](f,j,8)|0}do if((n|0)==23){if((g|0)>0){c[46216]=(c[46216]|0)+-1;if((g|0)!=1){if((TA(b,d,150517)|0)==-1){g=-1;break}if((SA(b,d)|0)==-1){g=-1;break}}g=(TA(b,d,94295)|0)==-1;if(m|g){g=g<<31>>31;break}}else if(m){g=0;break}Hw(f,l)|0;g=0}while(0);return g|0}function jB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(c[b>>2]&3){case 0:{g=80;break}case 1:{g=81;break}case 3:case 2:{g=82;break}default:{}}b=lb[g&127](a,b)|0;if(!b)b=-1;else{nB(a,b,d,e,g,f);b=0}return b|0}function kB(a,b){a=a|0;b=b|0;if((ez(b)|0)!=(a|0))b=Vx(a,b,0)|0;return b|0}function lB(a,b){a=a|0;b=b|0;if((ez(b)|0)!=(a|0))b=Xy(a,b,0)|0;return b|0}function mB(a,b){a=a|0;b=b|0;return a|0}function nB(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;h=(f|0)!=0;if(h)vb[c&127](a,b,d);g=wA(a)|0;while(1){if(!g)break;i=lb[e&127](g,b)|0;if(i|0)nB(g,i,c,d,e,f);g=xA(g)|0}if(!h)vb[c&127](a,b,d);return}function oB(){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1200|0;r=t+800|0;g=t;c[46219]=0;c[46220]=-2;f=r;i=200;n=g;p=0;q=0;o=r;a:while(1){b[o>>1]=p;if((f+(i<<1)+-2|0)>>>0>o>>>0)k=i;else{m=o-f>>1;e=m+1|0;if(i>>>0>9999){s=75;break}k=i<<1;k=k>>>0<1e4?k:1e4;h=C_(k*6|3)|0;if(h){F3(h|0,f|0,e<<1|0)|0;i=h+(k>>>1<<2)|0;F3(i|0,n|0,e<<2|0)|0;if((f|0)==(r|0)){e=0;f=h}else{D_(f);e=0;f=h}}else{e=4;i=n}j=(e|0)==0;h=f+(m<<1)|0;switch((j?((f+(k<<1)+-2|0)>>>0>h>>>0?0:9):e)&15){case 9:{e=1;s=76;break a}case 4:{s=75;break a}case 0:{g=j?i+(m<<2)|0:g;n=i;o=j?h:o;break}default:{e=0;break a}}}if((p|0)==6){e=0;s=76;break}e=a[94299+p>>0]|0;j=e<<24>>24;do if(e<<24>>24!=-18){h=c[46220]|0;if((h|0)==-2){h=Wz()|0;c[46220]=h}if((h|0)>=1)if(h>>>0<269)i=d[94379+h>>0]|0;else i=2;else{c[46220]=0;i=0}h=i+j|0;if(h>>>0<=59?(i|0)==(d[94648+h>>0]|0):0){p=a[94708+h>>0]|0;e=p<<24>>24;if(p<<24>>24<1){h=0-e|0;s=23;break}else{c[46220]=-2;g=g+4|0;c[g>>2]=c[46221];j=(q|0)==0?0:q+-1|0;h=o;break}}else s=22}else s=22;while(0);if((s|0)==22){s=0;p=a[94768+p>>0]|0;h=p&255;if(!(p<<24>>24)){h=c[46220]|0;b:do switch(q|0){case 0:{c[46219]=(c[46219]|0)+1;pA(140679);h=o;break}case 3:if((h|0)<1)if(!h){e=1;s=76;break a}else{h=o;break b}else{c[46220]=-2;h=o;break b}default:h=o}while(0);while(1){if(e<<24>>24==18)break;if((h|0)==(f|0)){e=1;s=76;break a}e=h+-2|0;g=g+-4|0;h=e;e=a[94299+(b[e>>1]|0)>>0]|0}g=g+4|0;c[g>>2]=c[46221];e=1;j=3}else s=23}do if((s|0)==23){s=0;i=d[94848+h>>0]|0;e=c[g+(1-i<<2)>>2]|0;c:do switch(h|0){case 2:{pB();qB();break}case 3:{if(c[46222]|0){pB();qB();$x(c[46222]|0)|0;c[46171]=0;c[46222]=0}break}case 6:{rB(c[g>>2]|0,c[g+-4>>2]|0,c[g+-8>>2]|0);break}case 7:{e=c[g>>2]|0;break}case 8:{e=0;break}case 9:{e=1;break}case 10:{e=0;break}case 11:{e=0;break}case 12:{e=1;break}case 21:if(!(c[g+-4>>2]|0)){tB();break c}else{sB();break c}case 24:{uB();break}case 25:{uB();break}case 26:{e=1;break}case 27:{e=0;break}case 30:{vB(c[g>>2]|0,0,0);break}case 31:{vB(c[g+-8>>2]|0,c[g>>2]|0,0);break}case 32:{vB(c[g+-16>>2]|0,c[g+-8>>2]|0,c[g>>2]|0);break}case 33:{wB(c[g+-8>>2]|0,c[g+-4>>2]|0);break}case 34:{wB(258,0);break}case 35:{e=258;break}case 36:{e=259;break}case 37:{e=260;break}case 38:{e=c[g+-4>>2]|0;break}case 39:{e=0;break}case 48:{xB(c[g+-8>>2]|0,c[g>>2]|0);break}case 49:{xB(c[g>>2]|0,0);break}case 51:{yB(c[g>>2]|0);break}case 52:{zB();break}case 53:{e=c[g>>2]|0;break}case 54:{e=0;break}case 55:{e=0;break}case 59:{e=c[g>>2]|0;break}case 60:{e=c[g>>2]|0;break}case 61:{e=c[g>>2]|0;break}case 62:{e=AB(c[g+-8>>2]|0,c[g>>2]|0)|0;break}default:{}}while(0);i=0-i|0;p=g+(i<<2)|0;i=o+(i<<1)|0;g=p+4|0;c[p+4>>2]=e;e=(d[94911+h>>0]|0)+-24|0;p=b[i>>1]|0;h=p+(a[94974+e>>0]|0)|0;if(h>>>0<60?(d[94648+h>>0]|0)==(p|0):0){e=a[94708+h>>0]|0;j=q;h=i;break}e=a[95009+e>>0]|0;j=q;h=i}while(0);i=k;p=e;q=j;o=h+2|0}if((s|0)==75){pA(137476);e=2;s=76}if((s|0)==76)if((f|0)!=(r|0))D_(f);l=t;return e|0}function pB(){var a=0,b=0;a=c[46223]|0;while(1){if(!a)break;IB(a+8|0);IB((c[46223]|0)+24|0);IB((c[46223]|0)+16|0);b=BB(c[46223]|0)|0;c[46223]=b;a=b}return}function qB(){qA();Ay(c[46222]|0);return}function rB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[46222]|0;if(!f){a[184896]=d&1|(e&255)<<1&2|a[184896]&-12|8;f=c[46225]|0;a[g>>0]=a[184896]|0;a[g+1>>0]=a[184897]|0;a[g+2>>0]=a[184898]|0;a[g+3>>0]=a[184899]|0;f=Xx(b,g,f)|0;c[46222]=f}c[46171]=f;c[46223]=CB(c[46223]|0,f)|0;Qz(0,b)|0;l=h;return}function sB(){var b=0,d=0,e=0,f=0,g=0,h=0;HB(2);e=c[46223]|0;f=a[95044]|0;h=0;b=e+24|0;while(1){d=c[b>>2]|0;if(!d)break;if(((c[d>>2]|0)==267?(g=c[d+4>>2]|0,(a[g>>0]|0)==f<<24>>24):0)?(b$(g,95044)|0)==0:0)b=c[d+8>>2]|0;else b=h;h=b;b=d+12|0}b=e+16|0;a:while(1){e=c[b>>2]|0;b=e+12|0;if(!(c[b>>2]|0))break;d=e+4|0;if((c[e>>2]|0)==262){e=c[d>>2]|0;d=Sy(e)|0;while(1){if(!d)continue a;g=Xy(c[c[46223]>>2]|0,d,0)|0;PB(g,0,c[b>>2]|0,h);d=Ty(e,d)|0}}else while(1){d=c[d>>2]|0;if(!d)continue a;PB(c[d+4>>2]|0,c[d+8>>2]|0,c[b>>2]|0,h);d=d+12|0}}IB((c[46223]|0)+8|0);IB((c[46223]|0)+16|0);IB((c[46223]|0)+24|0);c[(c[46223]|0)+4>>2]=0;return}function tB(){var a=0;HB(1);a=(c[46223]|0)+8|0;while(1){a=c[a>>2]|0;if(!a)break;OB(c[a+4>>2]|0);a=a+12|0}IB((c[46223]|0)+8|0);IB((c[46223]|0)+24|0);IB((c[46223]|0)+16|0);c[(c[46223]|0)+4>>2]=0;return}function uB(){var a=0,b=0;a=c[46223]|0;b=c[a+8>>2]|0;if(!b){b=c[a+4>>2]|0;if(!b)b=0;else{b=NB(b)|0;a=c[46223]|0}c[a+4>>2]=0}else{b=MB(b)|0;a=c[46223]|0;c[a+12>>2]=0;c[a+8>>2]=0}if(b|0)EB(a+16|0,b);return}function vB(a,b,d){a=a|0;b=b|0;d=d|0;if(d)b=KB(b,d)|0;d=LB(az(c[c[46223]>>2]|0,a,1)|0,b)|0;EB((c[46223]|0)+8|0,d);Qz(c[46222]|0,a)|0;return}function wB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if(d|0)GB();d=(c[46223]|0)+24|0;while(1){d=c[d>>2]|0;if(!d)break;if(!(c[d+8>>2]|0))GB();d=d+12|0}g=(b|0)==260?2:(b|0)==259&1;HB(g);b=c[46223]|0;d=b+24|0;while(1){f=c[d>>2]|0;if(!f)break;do if((c[f>>2]|0)!=267){d=c[f+4>>2]|0;e=c[b>>2]|0;if(!((a[d+21>>0]|0)!=0&(e|0)==(c[46222]|0))){d=nx(e,g,c[d+8>>2]|0,c[f+8>>2]|0)|0;b=c[46223]|0;if((c[b>>2]|0)!=(c[46222]|0))break}a[d+22>>0]=1}while(0);d=f+12|0}IB(b+24|0);return}function xB(a,b){a=a|0;b=b|0;b=DB(a,b)|0;EB((c[46223]|0)+24|0,b);return}function yB(a){a=a|0;var b=0;b=c[46223]|0;c[46223]=CB(b,vA(c[b>>2]|0,a,1)|0)|0;Qz(c[46222]|0,a)|0;return}function zB(){var a=0,b=0;a=c[46223]|0;b=c[a>>2]|0;a=BB(a)|0;c[46223]=a;c[a+4>>2]=b;return}function AB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+1024|0;f=g;d=W_(a)|0;d=d+1+(W_(b)|0)|0;if(d>>>0<1025)d=f;else d=C_(d)|0;b0(d,a)|0;p1(d,b)|0;e=Oz(c[46222]|0,d)|0;Qz(c[46222]|0,a)|0;Qz(c[46222]|0,b)|0;if((d|0)!=(f|0))D_(d);l=g;return e|0}function BB(a){a=a|0;var b=0;b=c[(c[46223]|0)+32>>2]|0;Ny(c[46222]|0,a);return b|0}function CB(a,b){a=a|0;b=b|0;var d=0;d=My(c[46222]|0,36)|0;c[d+32>>2]=a;c[d>>2]=b;return d|0}function DB(a,b){a=a|0;b=b|0;return FB(267,a,b)|0}function EB(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+4|0;e=c[d>>2]|0;if(e|0)c[e+12>>2]=b;c[d>>2]=b;if(!(c[a>>2]|0))c[a>>2]=b;return}function FB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=My(c[46222]|0,16)|0;c[e>>2]=a;c[e+4>>2]=b;c[e+8>>2]=d;return e|0}function GB(){var a=0;a=l;l=l+16|0;Pw(0,95048,a)|0;l=a;return}function HB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=(b|0)==2;d=(c[46223]|0)+24|0;while(1){d=c[d>>2]|0;if(!d)break;e=d+4|0;f=c[e>>2]|0;if(!((g?(a[f>>0]|0)==(a[95044]|0):0)?!(b$(f,95044)|0):0)){h=nx(c[c[46223]>>2]|0,b,f,0)|0;c[e>>2]=h;if(!h)c[e>>2]=nx(c[c[46223]>>2]|0,b,f,191979)|0;c[d>>2]=266;Qz(c[46222]|0,f)|0}d=d+12|0}return}function IB(a){a=a|0;JB(c[a>>2]|0);c[a+4>>2]=0;c[a>>2]=0;return}function JB(a){a=a|0;var b=0;while(1){if(!a)break;b=c[a+12>>2]|0;switch(c[a>>2]|0){case 265:{JB(c[a+4>>2]|0);break}case 266:case 267:{Qz(c[46222]|0,c[a+8>>2]|0)|0;break}default:{}}Ny(c[46222]|0,a);a=b}return}function KB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;f=h;g=h+8|0;d=W_(a)|0;d=d+2+(W_(b)|0)|0;if(d>>>0<1025)e=g;else e=C_(d)|0;c[f>>2]=a;c[f+4>>2]=b;Y0(e,95081,f)|0;d=Oz(c[46222]|0,e)|0;Qz(c[46222]|0,a)|0;Qz(c[46222]|0,b)|0;if((e|0)!=(g|0))D_(e);l=h;return d|0}function LB(a,b){a=a|0;b=b|0;return FB(259,a,b)|0}function MB(a){a=a|0;return FB(265,a,0)|0}function NB(a){a=a|0;return FB(262,a,0)|0}function OB(a){a=a|0;var b=0,d=0;b=(c[46223]|0)+24|0;while(1){b=c[b>>2]|0;if(!b)break;if((c[b>>2]|0)==266?(d=c[b+4>>2]|0,d|0):0)rx(a,d,c[b+8>>2]|0)|0;b=b+12|0}return}function PB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=d+4|0;a:do if((c[d>>2]|0)==262){d=c[f>>2]|0;f=Sy(d)|0;while(1){if(!f)break a;QB(a,b,Xy(c[c[46223]>>2]|0,f,0)|0,0,e);f=Ty(d,f)|0}}else while(1){f=c[f>>2]|0;if(!f)break a;d=Xy(c[c[46223]>>2]|0,c[f+4>>2]|0,0)|0;QB(a,b,d,c[f+8>>2]|0,e);f=f+12|0}while(0);return}function QB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;d=Rx(c[c[46223]>>2]|0,a,d,f,1)|0;if(d|0){g=c[d>>2]&3;f=c[((g|0)==2?d:d+-48|0)+40>>2]|0;a=(f|0)==(a|0)?(c[((g|0)==3?d:d+48|0)+40>>2]|0)!=(f|0):0;RB(d,108373,a?e:b);RB(d,108382,a?b:e);OB(d)}return}function RB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d|0){e=nx(c[c[46223]>>2]|0,2,b,0)|0;if(!e)e=nx(c[c[46223]>>2]|0,2,b,191979)|0;rx(a,e,d)|0}return}function SB(a,b,d){a=a|0;b=b|0;d=d|0;c[46191]=b;c[46222]=a;c[46171]=0;a=d|0?d:18496;c[46225]=a;Vz(a,b);oB()|0;a=c[46171]|0;if(!a){sA();a=c[46171]|0}return a|0}function TB(a,b){a=a|0;b=b|0;return SB(0,a,b)|0}function UB(a,b){a=a|0;b=b|0;b=wC(a,1,b)|0;if(!b)b=999;else{b=c[b+16>>2]|0;c[a+184>>2]=c[b+4>>2];c[a+172>>2]=c[b+12>>2];c[a+176>>2]=c[b>>2];c[a+180>>2]=c[b+16>>2];b=300}return b|0}function VB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i;Az(b,134401,280,1)|0;g=b+16|0;c[(c[g>>2]|0)+144>>2]=a;if((fz(b)|0)!=(b|0))c[(c[(fz(b)|0)+16>>2]|0)+144>>2]=a;e=xx(b,95297)|0;d=a+172|0;if((e|0)!=0?(c[d>>2]=0,(UB(a,e)|0)==999):0){d=xC(a,1,e)|0;c[f>>2]=e;c[f+4>>2]=d;Pw(1,95824,f)|0;d=-1}else{e=c[d>>2]|0;if(!e)d=-1;else{CG(1);bH(b,c[c[a+180>>2]>>2]&1);d=c[(c[g>>2]|0)+8>>2]|0;c[(c[(fz(b)|0)+16>>2]|0)+8>>2]=d;LK();d=c[e>>2]|0;if(d|0?(tb[d&127](b),h=c[e+4>>2]|0,h|0):0)c[(c[g>>2]|0)+148>>2]=h;CG(0);d=0}}l=i;return d|0}function WB(a,b){a=a|0;b=b|0;var d=0,e=0;if(Az(b,134401,0,1)|0){d=b+16|0;a=c[d>>2]|0;e=c[a+148>>2]|0;if(e){tb[e&127](b);a=c[d>>2]|0;c[a+148>>2]=0}if(c[a+8>>2]|0)gH(b)}return 0}function XB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;d=c[b+76>>2]|0;f=c[b>>2]|0;if((d|0)!=0?(e=c[d>>2]|0,(e|0)!=0):0){tb[e&127](b);g=12}else g=4;do if((g|0)==4)if((c[b+40>>2]|0)==0?(h=b+36|0,(c[h>>2]|0)==0):0){if(a[f+13>>0]|0)YB(b);d=b+32|0;e=c[d>>2]|0;if(!e){c[h>>2]=c[15653];g=12;break}f=L1(e,103486)|0;c[h>>2]=f;if(!f){j=c[(c[b+12>>2]|0)+16>>2]|0;h=c[d>>2]|0;d=c$(c[(O_()|0)>>2]|0)|0;c[i>>2]=h;c[i+4>>2]=d;ub[j&63](95087,i);d=1}else g=12}else g=12;while(0);if((g|0)==12)if(!(c[b+152>>2]&1024))d=0;else{ub[c[(c[b+12>>2]|0)+16>>2]&63](95125,j);d=1}l=k;return d|0}function YB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+112|0;e=h;g=h+4|0;d=c[b+24>>2]|0;if(!d)a[g>>0]=0;else{c[e>>2]=d+1;Y0(g,95143,e)|0}e=c[b+20>>2]|0;e=e|0?e:95147;d=W_(e)|0;i=W_(g)|0;f=b+52|0;i=d+1+i+(W_(c[f>>2]|0)|0)|0;d=i+11|0;if((c[46226]|0)>>>0<(i+1|0)>>>0){c[46226]=d;d=F_(c[46227]|0,d)|0;c[46227]=d}else d=c[46227]|0;b0(d,e)|0;p1(c[46227]|0,g)|0;d=c[46227]|0;d=d+(W_(d)|0)|0;a[d>>0]=46;a[d+1>>0]=0;d=n1(c[f>>2]|0)|0;f=c[46227]|0;while(1){e=o1(d,58)|0;if(!e)break;p1(f,e+1|0)|0;i=c[46227]|0;g=i+(W_(i)|0)|0;a[g>>0]=46;a[g+1>>0]=0;a[e>>0]=0;f=i}p1(f,d)|0;D_(d);c[b+32>>2]=c[46227];l=h;return}function ZB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h+8|0;f=h;if((b|0)!=0&(d|0)!=0){if(c[a+152>>2]&1024|0){ub[c[(c[a+12>>2]|0)+16>>2]&63](95125,f);Sa(1)}if((_B(a,b,d)|0)==(d|0))e=d;else{f=c[(c[a+12>>2]|0)+16>>2]|0;c[g>>2]=d;ub[f&63](95157,g);Sa(1)}}else e=0;l=h;return e|0}function _B(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;f=c[(c[b>>2]|0)+104>>2]|0;do if(!f){j=b+40|0;h=c[j>>2]|0;if(!h){e=E1(d,1,e,c[b+36>>2]|0)|0;break}f=b+44|0;i=b+48|0;g=c[i>>2]|0;do if(((c[f>>2]|0)+-1-g|0)>>>0<e>>>0){g=e+4096+g&-4096;c[f>>2]=g;f=F_(h,g)|0;c[j>>2]=f;if(!f){ub[c[(c[b+12>>2]|0)+16>>2]&63](95182,n);Sa(1)}else{k=f;m=c[i>>2]|0;break}}else{k=h;m=g}while(0);F3(k+m|0,d|0,e|0)|0;n=(c[i>>2]|0)+e|0;c[i>>2]=n;a[(c[j>>2]|0)+n>>0]=0}else e=nb[f&63](b,d,e)|0;while(0);l=o;return e|0}function $B(a,b){a=a|0;b=b|0;var c=0;c=W_(b)|0;b=(ZB(a,b,c)|0)==(c|0);return (b?1:-1)|0}function aC(b,c){b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;a[e>>0]=c;b=(ZB(b,e,1)|0)==1;l=d;return (b?c:-1)|0}function bC(b){b=b|0;var d=0;d=c[b+36>>2]|0;if(((d|0)!=0?(a[b+144>>0]|0)==0:0)?(c[(c[b>>2]|0)+104>>2]|0)==0:0)b=w1(d)|0;else b=0;return b|0}function cC(a){a=a|0;var b=0,d=0;b=c[a+76>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|0):0)tb[d&127](a);bC(a)|0;return}function dC(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=c[a+76>>2]|0;if(c[a+152>>2]&1024|0){ub[c[(c[a+12>>2]|0)+16>>2]&63](95209,e);Sa(1)}if((d|0)!=0?(b=c[d+8>>2]|0,(b|0)!=0):0)tb[b&127](a);else{bC(a)|0;eC(a)}l=e;return}function eC(b){b=b|0;var d=0,e=0,f=0;d=b+32|0;if((c[d>>2]|0?(e=b+36|0,f=c[e>>2]|0,(f|0)!=(c[15653]|0)):0)?(a[b+144>>0]|0)==0:0){if(f|0){s1(f)|0;c[e>>2]=0}c[d>>2]=0}return}function fC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+1056|0;f=i;h=i+24|0;g=i+8|0;c[g>>2]=d;e=q0(h,1024,b,g)|0;if((e|0)>=0){if((e|0)>1023){e=vH(e+1|0)|0;c[g>>2]=d;f=e;e=Z0(e,b,g)|0}else f=h;ZB(a,f,e)|0;if((f|0)!=(h|0))D_(f)}else{c[f>>2]=c$(c[(O_()|0)>>2]|0)|0;Pw(1,95226,f)|0}l=i;return}function gC(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=hC(e,b)|0;ZB(a,f,c[e>>2]|0)|0;l=d;return}function hC(b,d){b=b|0;d=+d;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!(d<-1.0e15))if(!(d>1.0e15)){d=d*1.0e4;f=~~((d<0.0?-.5:.5)+d);if(!f){f=135312;e=1}else{l=(f|0)<0;k=4;i=0;e=191746;f=l?0-f|0:f;while(1){if(!((f|0)!=0|(k|0)>0))break;g=(f|0)%10|0;j=(f|0)/10|0;h=e+-1|0;if((g|0)==0&i<<24>>24==0)f=0;else{a[h>>0]=g|48;f=1;e=h}if((k|0)==1)if(!(f<<24>>24))f=1;else{e=e+-1|0;a[e>>0]=46;f=1}k=k+-1|0;i=f;f=j}if(l){e=e+-1|0;a[e>>0]=45}f=e;e=191746-e|0}}else{f=95241;e=18}else{f=95240;e=19}c[b>>2]=e;return f|0}function iC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=hC(e,+h[b>>3])|0;ZB(a,f,c[e>>2]|0)|0;ZB(a,99578,1)|0;b=hC(e,+h[b+8>>3])|0;ZB(a,b,c[e>>2]|0)|0;l=d;return}function jC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;e=0;while(1){h=b+(e<<4)|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];iC(a,f);e=e+1|0;if((e|0)>=(d|0))break;ZB(a,99578,1)|0}l=g;return}function kC(a,b){a=a|0;b=b|0;var d=0;d=uH(392)|0;if(d|0){c[d>>2]=20052;c[d+16>>2]=23;c[d+32>>2]=a;c[d+36>>2]=b}return d|0}function lC(a){a=a|0;var b=0,d=0,e=0,f=0;b=uH(392)|0;d=b;e=a;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));f=b+60|0;e=a+60|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];f=b+80|0;e=a+80|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];return b|0}function mC(a){a=a|0;tC(a);D_(a);return}function nC(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c[46228]|0;if(e){d=c[e+4>>2]|0;if(!d){d=uH(632)|0;c[(c[46228]|0)+4>>2]=d}}}else{d=uH(632)|0;c[e>>2]=d;c[a+164>>2]=d}c[46228]=d;c[d+32>>2]=b;c[d>>2]=a;return}function oC(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+160|0;d=c[e>>2]|0;if(d){e=c[46229]|0;if(e){d=c[e+4>>2]|0;if(!d){d=uH(632)|0;c[(c[46229]|0)+4>>2]=d}}}else{d=uH(632)|0;c[e>>2]=d;c[a+164>>2]=d}c[46229]=d;c[d+52>>2]=b;c[d>>2]=a;return (wC(a,3,b)|0)!=0|0}function pC(a){a=a|0;var b=0;b=c[a+160>>2]|0;c[a+164>>2]=b;return b|0}function qC(a){a=a|0;var b=0,d=0,e=0;a=a+164|0;b=c[a>>2]|0;d=c[b+4>>2]|0;if(d|0?(e=d+52|0,(c[e>>2]|0)==0):0)c[e>>2]=c[b+52>>2];c[a>>2]=d;return d|0}function rC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+8|0;f=b+10|0;if((c[e>>2]|0)>(b|0))a=c[a>>2]|0;else{c[e>>2]=f;f=xH(c[a>>2]|0,f<<2)|0;c[a>>2]=f;a=f}c[a+(b<<2)>>2]=d;return}function sC(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0)D_(b);c[a>>2]=0;c[a+8>>2]=0;c[a+4>>2]=0;return}function tC(a){a=a|0;var b=0,d=0,e=0;d=a+160|0;b=c[d>>2]|0;while(1){if(!b)break;e=c[b+4>>2]|0;sC(b+604|0);sC(b+592|0);D_(c[b+584>>2]|0);D_(c[b+588>>2]|0);D_(b);b=e}c[46229]=0;c[46228]=0;c[a+192>>2]=0;c[a+164>>2]=0;c[d>>2]=0;c[a+28>>2]=0;return}function uC(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;k=n+64|0;m=n;U0(k,e,63)|0;i=A$(k,58)|0;if(i|0)a[i>>0]=0;b=b+60+(d<<2)|0;while(1){d=c[b>>2]|0;if(!d){d=b;b=0;break}U0(m,c[d+4>>2]|0,63)|0;d=A$(m,58)|0;if(d|0)a[d>>0]=0;if((b$(k,m)|0)<1){j=9;break}b=c[b>>2]|0}while(1){if((j|0)==9){d=b;b=c[b>>2]|0}if(!b)break;U0(m,c[b+4>>2]|0,63)|0;b=A$(m,58)|0;if(b|0)a[b>>0]=0;if(b$(k,m)|0)break;b=c[d>>2]|0;if((c[b+8>>2]|0)<=(f|0))break;j=9}m=vH(20)|0;c[m>>2]=c[d>>2];c[d>>2]=m;c[m+4>>2]=e;c[m+8>>2]=f;c[m+12>>2]=g;c[m+16>>2]=h;l=n;return 1}function vC(a,b){a=a|0;b=b|0;b=l;l=l+16|0;Pw(1,95321,b)|0;l=b;return 0}function wC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+144|0;r=s;o=s+80|0;p=s+16|0;n=(d+-3|0)>>>0<2?0:d;U0(o,e,63)|0;e=A$(o,58)|0;if(e){f=e+1|0;a[e>>0]=0;e=A$(f,58)|0;if(!e)m=0;else{a[e>>0]=0;m=e+1|0}}else{m=0;f=0}i=(f|0)!=0;j=(m|0)==0;k=(n|0)==(d|0);h=b+60+(d<<2)|0;a:while(1){e=c[h>>2]|0;if(!e){e=0;break}U0(p,c[e+4>>2]|0,63)|0;e=A$(p,58)|0;if(!e)e=0;else{a[e>>0]=0;e=e+1|0}do if(!(b$(p,o)|0)){g=(e|0)!=0;if(i&g?b$(e,f)|0:0)break;if(!j?b$(m,c[(c[(c[h>>2]|0)+12>>2]|0)+8>>2]|0)|0:0)break;if(k|g^1){q=16;break a}if(wC(b,n,e)|0){q=16;break a}}while(0);h=c[h>>2]|0}do if((q|0)==16){e=c[h>>2]|0;if(e){f=e+16|0;if((c[f>>2]|0)==0?(vC(0,0)|0,(c[f>>2]|0)==0):0){e=0;break}if((c[b+8>>2]|0)>0){q=c[15686]|0;o=c[e+4>>2]|0;p=c[(c[e+12>>2]|0)+8>>2]|0;c[r>>2]=c[20064+(d<<2)>>2];c[r+4>>2]=o;c[r+8>>2]=p;g1(q,95352,r)|0}}else e=0}while(0);c[b+80+(d<<2)>>2]=e;l=s;return e|0}function xC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;do if(!e)e=0;else{if(c[5021]|0){Tw(184920,0,0);c[5021]=0}h=n1(e)|0;e=A$(h,58)|0;if(e){a[e>>0]=0;f=b+60+(d<<2)|0;e=1;g=f;while(1){b=c[g>>2]|0;if(!b)break;d=n1(c[b+4>>2]|0)|0;b=A$(d,58)|0;if(b|0)a[b>>0]=0;if(!((a[h>>0]|0)!=0?(O$(h,d)|0)!=0:0)){e=c[46231]|0;if(e>>>0>=(c[46232]|0)>>>0){Uw(184920,1)|0;e=c[46231]|0}c[46231]=e+1;a[e>>0]=32;Ww(184920,c[(c[g>>2]|0)+4>>2]|0)|0;e=c[46231]|0;if(e>>>0>=(c[46232]|0)>>>0){Uw(184920,1)|0;e=c[46231]|0}c[46231]=e+1;a[e>>0]=58;Ww(184920,c[(c[(c[g>>2]|0)+12>>2]|0)+8>>2]|0)|0;e=0}D_(d);g=c[g>>2]|0}D_(h);if(e<<24>>24){g=0;i=19}}else{D_(h);g=0;f=b+60+(d<<2)|0;e=1;i=19}if((i|0)==19){while(1){b=c[f>>2]|0;if(!b)break;d=n1(c[b+4>>2]|0)|0;b=A$(d,58)|0;if(b|0)a[b>>0]=0;if(!((g|0)!=0?(O$(g,d)|0)==0:0)){e=c[46231]|0;if(e>>>0>=(c[46232]|0)>>>0){Uw(184920,1)|0;e=c[46231]|0}c[46231]=e+1;a[e>>0]=32;Ww(184920,d)|0;e=0}g=d;f=c[f>>2]|0;i=19}if(e<<24>>24){e=191979;break}}e=c[46231]|0;if(e>>>0>=(c[46232]|0)>>>0){Uw(184920,1)|0;e=c[46231]|0}a[e>>0]=0;e=c[46230]|0;c[46231]=e}while(0);return e|0}function yC(b){b=b|0;var d=0;if(!b)qa(108182,95369,573,95383);if(!(a[b>>0]|0))qa(108187,95369,574,95383);d=c[46234]|0;if(!d)b=0;else b=nb[c[d>>2]&63](d,b,512)|0;return b|0}function zC(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;if(!b)qa(108230,95369,589,95400);g=b+8|0;e=c[g>>2]|0;if(!e)qa(108233,95369,590,95400);if(!(a[e>>0]|0))qa(108242,95369,591,95400);h=b+20|0;f=c[h>>2]|0;do if(!f){d=ZL(e)|0;if(!d){c[i>>2]=c[g>>2];Pw(0,95424,i)|0;d=0;break}i=L1(d,135739)|0;c[h>>2]=i;if(!i){c[j>>2]=c$(c[(O_()|0)>>2]|0)|0;c[j+4>>2]=d;Pw(0,95449,j)|0;d=0;break}d=c[46235]|0;if((d|0)>49){a[b+17>>0]=1;d=1;break}else{c[46235]=d+1;d=1;break}}else{Z1(f,0,0)|0;if(!(c[h>>2]|0))qa(95470,95369,614,95400);else d=1}while(0);l=k;return d|0}function AC(b){b=b|0;var d=0,e=0;if(a[b+17>>0]|0?(d=b+20|0,e=c[d>>2]|0,e|0):0){s1(e)|0;c[d>>2]=0}return}function BC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0;if(!b){e=-1;d=-1}else{e=c[b+48>>2]|0;f=+(e|0);if(!e){g=+h[d>>3];f=+h[d+8>>3]}else{h[d+8>>3]=f;h[d>>3]=f;g=f}e=~~(+((c[b+40>>2]|0)*72|0)/g);d=~~(+((c[b+44>>2]|0)*72|0)/f)}c[a>>2]=e;c[a+4>>2]=d;return}function CC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;f=m+16|0;j=m;k=m+32|0;if((e|0)!=0?(a[e>>0]|0)!=0:0){if((0==0?(g=c[46362]|0,(c[46236]|0)!=(g|0)):0)?(c[46236]=g,i=c[46234]|0,i|0):0){yw(i)|0;c[46234]=0}n=+h[(c[(c[d+16>>2]|0)+8>>2]|0)+24>>3];n=!(n>=1.0)?96.0:n;h[j+8>>3]=n;h[j>>3]=n;d=DC(e)|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];BC(k,d,f);d=c[k>>2]|0;f=c[k+4>>2]|0}else{d=-1;f=-1}c[b>>2]=d;c[b+4>>2]=f;l=m;return}function DC(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=f;if(!a)qa(108182,95369,638,95476);if(!(c[46234]|0))c[46234]=Cw(20088,c[4563]|0)|0;b=yC(a)|0;a:do if(!b){b=uH(64)|0;if(!b)b=0;else{d=b+8|0;c[d>>2]=Oz(0,a)|0;if(!((zC(b)|0)<<24>>24)){EC(b);b=0;break}if(!(c[b+20>>2]|0))qa(95470,95369,653,95476);do switch(FC(b)|0){case 0:{a=VJ(c[d>>2]|0)|0;c[b+52>>2]=a;if(!a){c[e>>2]=c[d>>2];Pw(0,95493,e)|0;EC(b);b=0;break a}break}case 2:{GC(b);break}case 3:{HC(b);break}case 1:{IC(b);break}case 4:{JC(b);break}case 6:{KC(b);break}case 11:{LC(b);break}case 8:{MC(b);break}case 5:{NC(b);break}case 12:{OC(b);break}default:{}}while(0);AC(b);e=c[46234]|0;nb[c[e>>2]&63](e,b,1)|0}}else AC(b);while(0);l=f;return b|0}function EC(a){a=a|0;var b=0;b=c[a+8>>2]|0;if(b|0)Qz(0,b)|0;D_(a);return}function FC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+224|0;f=j+200|0;g=j;h=a+20|0;b=c[h>>2]|0;a:do if((b|0)!=0?(g3(f,1,20,b)|0)==20:0){d=0;while(1){if(d>>>0>=10){i=13;break a}if(!(L0(f,c[20124+(d<<4)>>2]|0,c[20124+(d<<4)+4>>2]|0)|0))break;d=d+1|0}e=a+28|0;c[e>>2]=c[20124+(d<<4)+12>>2];b=c[20124+(d<<4)+8>>2]|0;a=a+24|0;c[a>>2]=b;switch(d|0){case 7:break;case 8:{if(L0(f+8|0,95709,4)|0)break a;c[e>>2]=95714;c[a>>2]=11;b=11;break a}default:break a}while(1){if(!(O0(g,200,c[h>>2]|0)|0)){i=11;break}if(!(L0(g,95704,4)|0)){i=8;break}}if((i|0)==8){c[e>>2]=98777;c[a>>2]=8;b=8;break}else if((i|0)==11){b=c[a>>2]|0;break}}else i=13;while(0);if((i|0)==13){c[a+28>>2]=95719;c[a+24>>2]=0;b=0}l=j;return b|0}function GC(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;Z1(c[e>>2]|0,6,0)|0;if((XC(c[e>>2]|0,2,b)|0)<<24>>24?(XC(c[e>>2]|0,2,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function HC(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;Z1(c[e>>2]|0,16,0)|0;if((PC(c[e>>2]|0,4,b)|0)<<24>>24?(PC(c[e>>2]|0,4,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function IC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;b=h+12|0;d=h+8|0;e=h+4|0;f=h;c[a+48>>2]=0;g=a+20|0;Z1(c[g>>2]|0,16,0)|0;if((((XC(c[g>>2]|0,2,b)|0)<<24>>24?(XC(c[g>>2]|0,2,d)|0)<<24>>24:0)?(XC(c[g>>2]|0,2,e)|0)<<24>>24:0)?(XC(c[g>>2]|0,2,f)|0)<<24>>24:0){c[a+40>>2]=c[b>>2]<<16|c[d>>2];c[a+44>>2]=c[e>>2]<<16|c[f>>2]}l=h;return}function JC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;b=m+16|0;e=m+12|0;f=m+8|0;h=m+4|0;i=m;c[a+48>>2]=0;j=a+20|0;while(1){if(!((PC(c[j>>2]|0,1,b)|0)<<24>>24))break;d=c[b>>2]|0;if((d|0)==255)continue;if(A$(95692,d)|0)continue;if((d|0)==192){k=6;break}g=c[j>>2]|0;if((d|0)==194){k=11;break}if(!((PC(g,2,e)|0)<<24>>24))break;Z1(c[j>>2]|0,(c[e>>2]|0)+-2|0,1)|0}if((k|0)==6){if(((PC(c[j>>2]|0,3,i)|0)<<24>>24?(PC(c[j>>2]|0,2,f)|0)<<24>>24:0)?(PC(c[j>>2]|0,2,h)|0)<<24>>24:0){c[a+44>>2]=c[f>>2];c[a+40>>2]=c[h>>2]}}else if((((k|0)==11?(PC(g,3,i)|0)<<24>>24:0)?(PC(c[j>>2]|0,2,f)|0)<<24>>24:0)?(PC(c[j>>2]|0,2,h)|0)<<24>>24:0){c[a+44>>2]=c[f>>2];c[a+40>>2]=c[h>>2]}l=m;return}function KC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+1056|0;j=m;b=m+32|0;e=m+28|0;f=m+24|0;g=m+20|0;h=m+16|0;c[a+48>>2]=72;i=a+20|0;Z1(c[i>>2]|0,0,0)|0;while(1){if(!(O0(b,1024,c[i>>2]|0)|0))break;d=P0(b,95677)|0;if(!d)continue;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=g;c[j+12>>2]=h;if((N1(d,101285,j)|0)==4){k=5;break}}if((k|0)==5){j=c[e>>2]|0;c[a+32>>2]=j;k=c[f>>2]|0;c[a+36>>2]=k;c[a+40>>2]=(c[g>>2]|0)-j;c[a+44>>2]=(c[h>>2]|0)-k}l=m;return}function LC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;b=g+4|0;d=g;c[a+48>>2]=0;e=a+20|0;Z1(c[e>>2]|0,15,0)|0;h=(m3(c[e>>2]|0)|0)==88;f=c[e>>2]|0;if(h){Z1(f,24,0)|0;if((XC(c[e>>2]|0,4,b)|0)<<24>>24?(XC(c[e>>2]|0,4,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}}else{Z1(f,26,0)|0;if((XC(c[e>>2]|0,2,b)|0)<<24>>24?(XC(c[e>>2]|0,2,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}}l=g;return}function MC(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=l;l=l+352|0;C=F+80|0;B=F+72|0;E=F+64|0;D=F+56|0;A=F+48|0;d=F+40|0;s=F+32|0;t=F+24|0;u=F+16|0;v=F+8|0;w=F;x=F+328|0;y=F+128|0;z=F+96|0;if(!(c[46237]|0)){if(o2(184952,95562,1)|0){c[d>>2]=95562;Pw(1,95589,d)|0}c[46237]=184952}m=b+20|0;Z1(c[m>>2]|0,0,0)|0;n=z+12|0;o=z+20|0;p=z+8|0;q=z+16|0;r=z+4|0;d=0;g=0;f=0;e=0;a:while(1){if(!(O0(y,200,c[m>>2]|0)|0))break;if(g<<24>>24==0|d<<24>>24==0){i=y;k=e}else break;b:while(1){j=f;c:while(1){while(1){if(a3(184952,i,4,z,0)|0){f=j;e=k;continue a}a[i+(c[n>>2]|0)>>0]=0;a[i+(c[o>>2]|0)>>0]=0;e=i+(c[p>>2]|0)|0;f=i+(c[q>>2]|0)|0;i=i+((c[r>>2]|0)+1)|0;if(!(b$(e,138034)|0))break;if(!(b$(e,137966)|0))break c;if(b$(e,95636)|0)continue;c[C>>2]=t;c[C+4>>2]=u;c[C+8>>2]=v;c[C+12>>2]=w;if((N1(f,95644,C)|0)==4)break b}c[A>>2]=s;c[A+4>>2]=x;if((N1(f,95626,A)|0)!=2){c[D>>2]=s;if((N1(f,98183,D)|0)==1){e=1;f=WC(+h[s>>3],95633)|0}else{e=g;f=j}}else{e=1;f=WC(+h[s>>3],x)|0}if(!(d<<24>>24)){d=0;g=e;j=f}else{g=e;e=k;continue a}}c[E>>2]=s;c[E+4>>2]=x;if((N1(f,95626,E)|0)!=2){c[B>>2]=s;if((N1(f,98183,B)|0)==1){d=1;e=WC(+h[s>>3],95633)|0}else e=k}else{d=1;e=WC(+h[s>>3],x)|0}if(!(g<<24>>24)){g=0;f=j;k=e}else{f=j;continue a}}d=1;g=1;f=~~(+h[v>>3]+1.0-+h[t>>3])>>>0;e=~~(+h[w>>3]+1.0-+h[u>>3])>>>0}c[b+48>>2]=0;c[b+40>>2]=f;c[b+44>>2]=e;l=F;return}function NC(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0;d=l;l=l+32|0;b=d;c[a+48>>2]=0;e=a+20|0;Z1(c[e>>2]|0,0,0)|0;if(!(QC(c[e>>2]|0,b)|0)){g=+h[b>>3];c[a+32>>2]=~~g;f=+h[b+8>>3];c[a+36>>2]=~~f;c[a+40>>2]=~~(+h[b+16>>3]-g);c[a+44>>2]=~~(+h[b+24>>3]-f)}l=d;return}function OC(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=f+4|0;d=f;c[a+48>>2]=0;e=a+20|0;Z1(c[e>>2]|0,6,0)|0;if((PC(c[e>>2]|0,1,b)|0)<<24>>24?(PC(c[e>>2]|0,1,d)|0)<<24>>24:0){c[a+40>>2]=c[b>>2];c[a+44>>2]=c[d>>2]}l=f;return}function PC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){if(e>>>0>=b>>>0){e=1;break}f=m3(a)|0;if(r1(a)|0){e=0;break}c[d>>2]=c[d>>2]<<8|f;e=e+1|0}return e|0}function QC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+1040|0;d=h;e=h+16|0;while(1){if(!(O0(e,1024,a)|0)){a=1;break}f=P0(e,95552)|0;if(f|0){g=4;break}}if((g|0)==4){c[d+4>>2]=e;c[d>>2]=f+9;c[d+8>>2]=a;a=RC(d,b)|0}l=h;return a|0}function RC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+1024|0;f=g;SC(b);e=a[c[b>>2]>>0]|0;if(!(e<<24>>24))e=(TC(b)|0)&255;else e=e<<24>>24;if((((e|0)==91?(c[b>>2]=(c[b>>2]|0)+1,UC(b,f),(VC(f,d)|0)==0):0)?(UC(b,f),(VC(f,d+8|0)|0)==0):0)?(UC(b,f),(VC(f,d+16|0)|0)==0):0){UC(b,f);e=(VC(f,d+24|0)|0)!=0&1}else e=1;l=g;return e|0}function SC(b){b=b|0;var d=0;d=c[b>>2]|0;while(1){d=a[d>>0]|0;if(!(d<<24>>24))d=(TC(b)|0)&255;else d=d<<24>>24;if(!((d&255)<<24>>24))break;if(!(B$(d&255)|0))break;d=(c[b>>2]|0)+1|0;c[b>>2]=d}return}function TC(b){b=b|0;var d=0;d=b+4|0;if(!(O0(c[d>>2]|0,1024,c[b+8>>2]|0)|0))b=0;else{d=c[d>>2]|0;c[b>>2]=d;b=a[d>>0]|0}return b|0}function UC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;SC(b);e=0;f=c[b>>2]|0;while(1){f=a[f>>0]|0;if(!(f<<24>>24))g=(TC(b)|0)&255;else g=f<<24>>24;f=g<<24>>24;if(!f)break;if(!((f|0)==46|(f+-48|0)>>>0<10))break;a[d+e>>0]=g;e=e+1|0;f=(c[b>>2]|0)+1|0;c[b>>2]=f;if((e|0)==1023){e=1023;break}}a[d+e>>0]=0;return}function VC(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=l;l=l+16|0;f=e;d=+c2(a,f);if((c[f>>2]|0)==(a|0))a=1;else{h[b>>3]=d;a=0}l=e;return a|0}function WC(a,b){a=+a;b=b|0;var c=0.0;do if(!(b$(b,95660)|0)){a=a*72.0;c=a;a=a>=0.0?.5:-.5}else{if(!(b$(b,95663)|0)){a=a*.75;c=a;a=a>=0.0?.5:-.5;break}if(!(b$(b,95666)|0)){a=a*12.0;c=a;a=a>=0.0?.5:-.5;break}if(b$(b,95633)|0?b$(b,95669)|0:0)if(!(b$(b,95671)|0)){a=a*28.346456664;c=a;a=a>=0.0?.5:-.5;break}else{b=(b$(b,95674)|0)==0;c=a*2.8346456663999997;return (b?~~(c+(c>=0.0?.5:-.5)):0)|0}c=a>=0.0?.5:-.5}while(0);return ~~(a+c)|0}function XC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[d>>2]=0;e=0;while(1){if(e>>>0>=b>>>0){e=1;break}f=m3(a)|0;if(r1(a)|0){e=0;break}c[d>>2]=c[d>>2]|f<<(e<<3);e=e+1|0}return e|0}function YC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=c[b+20>>2]|0;if(a|0)s1(a)|0;if(c[b+52>>2]|0?(e=c[b+60>>2]|0,e|0):0)tb[e&127](b);D_(b);return}function ZC(){var a=0;nx(0,1,105198,102467)|0;a=kC(0,1)|0;LP(a,0);return a|0}function _C(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0;k=l;l=l+304|0;j=k+24|0;i=k+8|0;f=k;g=k+40|0;if((UB(b,e)|0)!=999)if((VB(b,d)|0)==-1)b=-1;else{b=c[d+16>>2]|0;e=b+16|0;if(!(a[(c[b+8>>2]|0)+81>>0]|0)){p=+h[e>>3];o=+h[b+24>>3];n=+h[b+32>>3];m=+h[b+40>>3];c[j>>2]=~~(p+(p>=0.0?.5:-.5));c[j+4>>2]=~~(o+(o>=0.0?.5:-.5));c[j+8>>2]=~~(n+(n>=0.0?.5:-.5));c[j+12>>2]=~~(m+(m>=0.0?.5:-.5));Y0(g,95873,j)|0}else{m=+h[b+24>>3];n=+h[e>>3];o=+h[b+40>>3];p=+h[b+32>>3];c[i>>2]=~~(m+(m>=0.0?.5:-.5));c[i+4>>2]=~~(n+(n>=0.0?.5:-.5));c[i+8>>2]=~~(o+(o>=0.0?.5:-.5));c[i+12>>2]=~~(p+(p>=0.0?.5:-.5));Y0(g,95873,i)|0}Ax(d,99645,g,191979)|0;b=0}else{b=xC(b,1,e)|0;c[f>>2]=e;c[f+4>>2]=b;Pw(1,95824,f)|0;b=-1}l=k;return b|0}function $C(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=c[b+60>>2]|0;oC(a,d)|0;b=c[a+164>>2]|0;c[b+56>>2]=uO(b,c[b+52>>2]|0)|0;if((Az(f,134401,0,1)|0)!=0?(c[(c[f+16>>2]|0)+8>>2]|0)!=0:0)h=5;else if(!(c[b+152>>2]&67108864)){Sw(95885,g);b=-1}else h=5;if((h|0)==5){c[b+36>>2]=e;if(!e){h=b+152|0;c[h>>2]=c[h>>2]|134217728}h=DG(a,f)|0;wO(b);tC(a);b=h}l=i;return b|0}function aD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;f=c[b+60>>2]|0;oC(a,d)|0;b=c[a+164>>2]|0;c[b+56>>2]=uO(b,c[b+52>>2]|0)|0;if((Az(f,134401,0,1)|0)!=0?(c[(c[f+16>>2]|0)+8>>2]|0)!=0:0)h=5;else if(!(c[b+152>>2]&67108864)){Sw(95885,g);b=-1}else h=5;if((h|0)==5){nC(a,e);h=DG(a,f)|0;wO(b);dC(b);tC(a);b=h}l=i;return b|0}function bD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;h=m+8|0;g=m;b=c[b+60>>2]|0;oC(a,d)|0;j=c[a+164>>2]|0;c[j+56>>2]=uO(j,c[j+52>>2]|0)|0;if((Az(b,134401,0,1)|0)!=0?(c[(c[b+16>>2]|0)+8>>2]|0)!=0:0)k=5;else if(!(c[j+152>>2]&67108864)){Sw(95885,g);b=-1}else k=5;do if((k|0)==5){if(e|0?(i=C_(4096)|0,c[e>>2]=i,i|0):0){g=j+40|0;c[g>>2]=i;c[j+44>>2]=4096;d=j+48|0;c[d>>2]=0;b=DG(a,b)|0;wO(j);if(!b){c[e>>2]=c[g>>2];c[f>>2]=c[d>>2]}tC(a);break}Pw(1,95906,h)|0;b=-1}while(0);l=m;return b|0}function cD(a,b){a=a|0;b=b|0;JP(a,0,b);return}function dD(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+4288|0;E=H+8|0;D=H;F=4;G=C_(40)|0;c[G>>2]=0;A=H+4152|0;B=H+4148|0;C=H+4128|0;j=H+4112|0;k=H+16|0;o=0;i=$(24,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;a:do if((h|0)!=1){if(!i){c[d>>2]=0;g=0;break}o=0;n=ca(26,e|0,B|0,A|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){o=0;m=$(23,40)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){o=0;na(7,C|0,j|0,k|0,24,83);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){o=0;e=$(25,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)!=1){j=C+16|0;i=c[j>>2]|0;g=e;while(1){if(!g)break;o=0;aa(i|0,g|0,0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=E3(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){y=0;x=j;w=m;v=n;g=z;m=15;break a}o=0;g=aa(84,b|0,g|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=E3(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){y=0;x=j;w=m;v=n;g=z;m=15;break a}}G=D3(184984,1,G|0,F|0)|0;F=z;o=0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){y=m;x=j;w=m;v=n;g=z;m=15}else{y=m;x=j;w=m;v=n;g=0;m=15}}else{y=0;x=0;w=m;v=n;g=z;m=15}}else{y=0;x=0;w=m;v=n;g=z;m=15}}else{y=0;x=0;w=m;v=n;g=z;m=15}}else{y=0;x=0;w=0;v=n;g=z;m=15}}else{y=0;x=0;w=0;v=0;g=z;m=15}while(0);do if((m|0)==15){b:while(1){c:do if(!g){o=0;e=$(25,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}u=v+(c[B>>2]|0)|0;k=0;m=0;j=0;while(1){if(!e)break;o=0;g=aa(c[x>>2]|0,e|0,-1)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){i=E3(c[h>>2]|0,G|0,F|0)|0;if(!i)bb(h|0,p|0);z=p}else i=-1;if((i|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}if((g|0)==0?(a[(c[e+16>>2]|0)+119>>0]|0)==3:0){if(!m){o=0;c[D>>2]=j;ca(27,u|0,134313,D|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;i=ca(28,b|0,v|0,1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;da(53,i|0,134401,280,1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}c[y+(j<<2)>>2]=i;k=1;j=j+1|0}else i=m;o=0;da(54,b|0,e|0,i|0,C|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}}else i=m;o=0;e=aa(84,b|0,e|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}m=i}o=0;e=$(25,b|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}i=10;n=y;q=w;r=w;t=w;while(1){if(!e){m=0;i=r;e=t;break c}o=0;g=aa(c[x>>2]|0,e|0,-1)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){m=E3(c[h>>2]|0,G|0,F|0)|0;if(!m)bb(h|0,p|0);z=p}else m=-1;if((m|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}if(!g){o=0;c[E>>2]=j;ca(27,u|0,134313,E|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;s=ca(28,b|0,v|0,1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;da(53,s|0,134401,280,1)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){g=E3(c[h>>2]|0,G|0,F|0)|0;if(!g)bb(h|0,p|0);z=p}else g=-1;if((g|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}o=0;da(54,b|0,e|0,s|0,C|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}if((j|0)==(i|0)){i=j<<1;o=0;m=aa(85,q|0,j<<3|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}g=m;q=m;r=m;h=m}else{g=n;h=t}c[g+(j<<2)>>2]=s;n=g;j=j+1|0;m=h}else m=t;o=0;e=aa(84,b|0,e|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}t=m}}else{m=1;k=0;n=y;j=0;i=w;e=w}while(0);o=0;ia(105,C|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue}if((v|0)!=(A|0)){o=0;ia(103,v|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue}}if(!m){o=0;g=aa(85,e|0,j<<2|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=E3(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue}else{m=58;break}}c[d>>2]=0;g=0;while(1){if((g|0)>=(j|0))break;o=0;$(26,c[n+(g<<2)>>2]|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){e=E3(c[h>>2]|0,G|0,F|0)|0;if(!e)bb(h|0,p|0);z=p}else e=-1;if((e|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15;continue b}g=g+1|0}o=0;ia(103,i|0);g=o;o=0;if((g|0)!=0&(p|0)!=0){h=E3(c[g>>2]|0,G|0,F|0)|0;if(!h)bb(g|0,p|0);z=p}else h=-1;if((h|0)==1){s=v;t=w;u=x;m=y;g=z;v=s;w=t;x=u;y=m;m=15}else{m=56;break}}if((m|0)==56){g=0;break}else if((m|0)==58){c[d>>2]=j;a[f>>0]=k;break}}while(0);D_(G|0);l=H;return g|0}function eD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(!((a|0)!=0?(nD(a)|0)!=0:0))a=95962;e=W_(a)|0;if((e|0)>=104){d=vH(e+25|0)|0;if(!d)d=0;else f=6}else f=6;if((f|0)==6){b0(d,a)|0;c[b>>2]=e}return d|0}function fD(a,b){a=a|0;b=b|0;Xy(b,a,1)|0;return}function gD(b,d){b=b|0;d=d|0;var e=0;b=(c[b+16>>2]|0)+157|0;e=a[b>>0]|0;if((d|0)>=0)a[b>>0]=d;return e|0}function hD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[b>>2]=d;c[b+4>>2]=d+4096;c[b+12>>2]=0;c[b+8>>2]=0;c[a>>2]=b;c[a+4>>2]=b;c[a+8>>2]=d;c[a+12>>2]=e;c[a+16>>2]=f;return}function iD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;lD(e,b);i=e+12|0;j=e+16|0;b=0;a:while(1){k=mD(e)|0;if(!k)break;b=b+1|0;f=c[i>>2]|0;if(f|0)ub[f&63](k,d);h=Jx(a,k)|0;while(1){if(!h)continue a;g=c[h>>2]&3;f=c[((g|0)==3?h:h+48|0)+40>>2]|0;if((f|0)==(k|0))f=c[((g|0)==2?h:h+-48|0)+40>>2]|0;if(!(lb[c[j>>2]&127](f,-1)|0))lD(e,f);h=Kx(a,h,k)|0}}return b|0}function jD(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)break;b=c[a+12>>2]|0;kD(a);a=b}return}function kD(a){a=a|0;D_(c[a>>2]|0);D_(a);return}function lD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;f=k;g=a+8|0;i=a+4|0;d=c[i>>2]|0;if((c[g>>2]|0)==(c[d+4>>2]|0)){d=c[d+12>>2]|0;do if(!d){e=vH(16)|0;if(!e){Pw(1,95943,f)|0;bb(184984,1)}c[e+8>>2]=c[i>>2];c[e+12>>2]=0;d=vH(4e6)|0;c[e>>2]=d;if(!d){Pw(1,95943,j)|0;bb(184984,1)}else{c[e+4>>2]=d+4e6;c[(c[i>>2]|0)+12>>2]=e;h=e;break}}else h=d;while(0);c[i>>2]=h;c[g>>2]=c[h>>2]}lb[c[a+16>>2]&127](b,1)|0;j=c[g>>2]|0;c[g>>2]=j+4;c[j>>2]=b;l=k;return}function mD(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0;e=c[d>>2]|0;if((b|0)==(c[e>>2]|0))if((e|0)==(c[a>>2]|0))b=0;else{b=c[e+8>>2]|0;c[d>>2]=b;b=c[b+4>>2]|0;c[f>>2]=b;g=4}else g=4;if((g|0)==4){b=b+-4|0;c[f>>2]=b;b=c[b>>2]|0}return b|0}function nD(b){b=b|0;var c=0;a:while(1){c=b;b=b+1|0;c=a[c>>0]|0;switch(c<<24>>24){case 95:continue a;case 0:{b=1;break a}default:{}}if(!(M$(c&255)|0)){b=0;break}}return b|0}function oD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0;B=l;l=l+4272|0;x=B;y=4;A=C_(40)|0;c[A>>2]=0;u=B+4144|0;v=B+4140|0;w=B+4120|0;h=B+4104|0;i=B+8|0;o=0;f=$(24,a|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){e=E3(c[g>>2]|0,A|0,y|0)|0;if(!e)bb(g|0,p|0);z=p}else e=-1;a:do if((e|0)!=1)if(f){o=0;k=ca(26,d|0,v|0,u|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){o=0;j=$(23,40)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){o=0;na(7,w|0,h|0,i|0,24,83);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){o=0;f=$(25,a|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1){h=w+16|0;g=c[h>>2]|0;e=f;while(1){if(!e)break;o=0;aa(g|0,e|0,0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){f=E3(c[d>>2]|0,A|0,y|0)|0;if(!f)bb(d|0,p|0);z=p}else f=-1;if((f|0)==1){t=h;s=j;r=k;e=z;j=14;break a}o=0;e=aa(84,a|0,e|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){f=E3(c[d>>2]|0,A|0,y|0)|0;if(!f)bb(d|0,p|0);z=p}else f=-1;if((f|0)==1){t=h;s=j;r=k;e=z;j=14;break a}}A=D3(184984,1,A|0,y|0)|0;y=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){t=h;s=j;r=k;e=z;j=14}else{t=h;s=j;r=k;e=0;j=14}}else{t=0;s=j;r=k;e=z;j=14}}else{t=0;s=j;r=k;e=z;j=14}}else{t=0;s=j;r=k;e=z;j=14}}else{t=0;s=0;r=k;e=z;j=14}}else{d=0;e=0}else{t=0;s=0;r=0;e=z;j=14}while(0);b:do if((j|0)==14){c:while(1){if(e|0){o=0;ia(105,w|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}o=0;ia(103,s|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}if((r|0)==(u|0)){d=0;e=0;break b}o=0;ia(103,r|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}else{j=19;break}}o=0;f=$(25,a|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,A|0,y|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}q=r+(c[v>>2]|0)|0;h=10;k=s;e=0;j=s;n=s;while(1){if(!f)break;o=0;d=aa(c[t>>2]|0,f|0,-1)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=E3(c[g>>2]|0,A|0,y|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}if(!d){o=0;c[x>>2]=e;ca(27,q|0,134313,x|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}o=0;m=ca(28,a|0,r|0,1)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}o=0;da(53,m|0,134401,280,1)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}o=0;da(54,a|0,f|0,m|0,w|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}if((e|0)==(h|0)){h=e<<1;o=0;i=aa(85,j|0,e<<3|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}g=i;j=i;d=i}else{g=k;d=n}c[g+(e<<2)>>2]=m;e=e+1|0;k=g;i=d}else i=n;o=0;f=aa(84,a|0,f|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){g=E3(c[d>>2]|0,A|0,y|0)|0;if(!g)bb(d|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue c}n=i}o=0;ia(105,w|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){f=E3(c[d>>2]|0,A|0,y|0)|0;if(!f)bb(d|0,p|0);z=p}else f=-1;if((f|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}o=0;d=aa(85,n|0,e<<2|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,A|0,y|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14;continue}if((r|0)==(u|0))break b;o=0;ia(103,r|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,A|0,y|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=r;q=s;j=t;e=z;r=n;s=q;t=j;j=14}else{j=39;break}}if((j|0)==19){d=0;e=0;break}else if((j|0)==39)break}while(0);c[b>>2]=e;D_(A|0);l=B;return d|0}function pD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=0;f=Sy(a)|0;while(1){if(!f)break;e=Ex(b,f)|0;while(1){if(!e)break;if(Xy(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,0)|0){Vx(a,e,1)|0;d=d+1|0}e=Gx(b,e)|0}f=Ty(a,f)|0}return d|0}function qD(a){a=a|0;a=yz(a,95967,0)|0;if(!a)qa(95972,95975,529,95984);else return c[a+8>>2]|0;return 0}function rD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=l;l=l+4320|0;s=u+24|0;r=u+8|0;q=u;t=u+4184|0;p=u+4160|0;f=u+40|0;if(ay(b)|0){Fz(b,0,95993,-12,0);Fz(b,1,96005,16,0);o=eD(e,f,t)|0;k=sD(b)|0;m=vH((ay(k)|0)<<2)|0;hD(p,u+4144|0,u+48|0,24,86);h=Sy(k)|0;n=p+16|0;i=o+(c[f>>2]|0)|0;j=c[15686]|0;e=0;while(1){if(!h)break;if(!(lb[c[n>>2]&127](h,-1)|0)){c[q>>2]=e;Y0(i,96907,q)|0;v=vA(k,o,1)|0;w=vA(b,o,1)|0;Az(w,95993,12,0)|0;a[(yz(w,95993,0)|0)+8>>0]=1;f=iD(k,h,v,p)|0;uD(v,w);g=vD(w)|0;wD(b,w);c[m+(e<<2)>>2]=w;dz(k,v)|0;if(0){c[r>>2]=e;c[r+4>>2]=f;c[r+8>>2]=g;g1(j,96017,r)|0}e=e+1|0}h=Ty(k,h)|0}if(0){r=ay(b)|0;v=by(b)|0;w=ry(b)|0;c[s>>2]=r;c[s+4>>2]=v;c[s+8>>2]=e;c[s+12>>2]=w;g1(j,96047,s)|0}$x(k)|0;Gz(b,0,95993);Gz(b,1,96005);jD(p);f=xH(m,e<<2)|0;if((o|0)!=(t|0))D_(o)}else{f=0;e=0}c[d>>2]=e;l=u;return f|0}function sD(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;a[h>>0]=a[18492]|0;a[h+1>>0]=a[18493]|0;a[h+2>>0]=a[18494]|0;a[h+3>>0]=a[18495]|0;h=Xx(96094,h,0)|0;zD(h,b);d=Sy(b)|0;while(1){if(!d)break;if(!(c[(yz(d,96005,0)|0)+12>>2]|0)){g=az(h,ry(d)|0,1)|0;Az(g,96005,16,1)|0;c[(c[g+16>>2]|0)+12>>2]=d;c[(yz(d,96005,0)|0)+12>>2]=g}d=Ty(b,d)|0}e=Sy(b)|0;while(1){if(!e)break;f=c[(yz(e,96005,0)|0)+12>>2]|0;d=Ex(b,e)|0;while(1){if(!d)break;g=c[(yz(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,96005,0)|0)+12>>2]|0;do if((g|0)!=(f|0))if(g>>>0>f>>>0){Rx(h,f,g,0,1)|0;break}else{Rx(h,g,f,0,1)|0;break}while(0);d=Gx(b,d)|0}e=Ty(b,e)|0}l=i;return h|0}function tD(b,d){b=b|0;d=d|0;var e=0;b=(c[b+16>>2]|0)+8|0;e=a[b>>0]|0;if((d|0)>=0)a[b>>0]=d;return e|0}function uD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=Sy(a)|0;while(1){if(!e)break;f=c[(c[e+16>>2]|0)+12>>2]|0;a:do if((c[f>>2]&3|0)==1)Xy(b,f,1)|0;else{d=Sy(f)|0;while(1){if(!d)break a;Xy(b,d,1)|0;d=Ty(f,d)|0}}while(0);e=Ty(a,e)|0}return}function vD(a){a=a|0;return pD(a,c[a+60>>2]|0)|0}function wD(a,b){a=a|0;b=b|0;xD(a,b,0);return}function xD(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=(d|0)==0;b=wA(b)|0;while(1){if(!b)break;if((a[(yz(b,95993,0)|0)+8>>0]|0)==0?(f=yD(b,c,d)|0,f|0):0){if(g)e=(z$(ry(b)|0,104980,7)|0)==0;else e=1;xD(b,f,e&1)}b=xA(b)|0}return}function yD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=0;g=Sy(a)|0;while(1){if(!g)break;f=az(b,ry(g)|0,0)|0;if(f){if(!e)e=vA(b,ry(a)|0,1)|0;Xy(e,f,1)|0}g=Ty(a,g)|0}if((d|0)!=0&(e|0)==0)e=vA(b,ry(a)|0,1)|0;if(e|0?(pD(e,a)|0,Bx(a,e)|0,(z$(ry(e)|0,104980,7)|0)==0):0)c[(Az(e,95967,12,0)|0)+8>>2]=a;return e|0}function zD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+16|0;g=h;d=wA(b)|0;e=c[15686]|0;while(1){if(!d)break;a:do if(!(z$(ry(d)|0,104980,7)|0)){f=az(a,ry(d)|0,1)|0;Az(f,96005,16,1)|0;c[(c[f+16>>2]|0)+12>>2]=d;b=Sy(d)|0;while(1){if(!b)break a;if(c[(yz(b,96005,0)|0)+12>>2]|0){k=ry(b)|0;j=ry(d)|0;i=ry(c[(yz(b,96005,0)|0)+12>>2]|0)|0;c[g>>2]=k;c[g+4>>2]=j;c[g+8>>2]=i;g1(e,96097,g)|0}c[(yz(b,96005,0)|0)+12>>2]=f;b=Ty(d,b)|0}}else zD(a,d);while(0);d=xA(d)|0}l=h;return}function AD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0;n=+h[a>>3];j=~~(n+(n>=0.0?.5:-.5));n=+h[a+8>>3];a=~~(n+(n>=0.0?.5:-.5));n=+h[b>>3];g=~~(n+(n>=0.0?.5:-.5));n=+h[b+8>>3];f=~~(n+(n>=0.0?.5:-.5));l=g-j|0;i=((l|0)>-1?l:0-l|0)<<1;l=l>>31|1;m=f-a|0;k=((m|0)>-1?m:0-m|0)<<1;m=m>>31|1;a:do if((i|0)>(k|0)){e=0-i|0;d=k-(i>>1)|0;b=j;while(1){BI(c,b,a);if((b|0)==(g|0))break a;j=(d|0)>-1;d=d+k+(j?e:0)|0;b=b+l|0;a=(j?m:0)+a|0}}else{e=0-k|0;d=j;b=i-(k>>1)|0;while(1){BI(c,d,a);if((a|0)==(f|0))break a;k=(b|0)>-1;d=(k?l:0)+d|0;b=b+i+(k?e:0)|0;a=a+m|0}}while(0);return}function BD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;j=n+4|0;do if((a|0)<1)d=0;else{f=e+16|0;if((c[f>>2]|0)>>>0<4){d=CD(a,b,d,e)|0;break}m=vH(a<<5)|0;d=0;while(1){if((d|0)==(a|0))break;g=c[b+(d<<2)>>2]|0;mM(g);h=m+(d<<5)|0;g=(c[g+16>>2]|0)+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];c[h+24>>2]=c[g+24>>2];c[h+28>>2]=c[g+28>>2];d=d+1|0}if((c[f>>2]|0)==4){h=e+28|0;a:do if(c[h>>2]&2|0){f=e+24|0;c[f>>2]=uH(a<<2)|0;d=0;while(1){if((d|0)==(a|0))break a;g=xx(c[b+(d<<2)>>2]|0,96164)|0;if(g|0?(c[k>>2]=j,g=(N1(g,134313,k)|0)>0,i=c[j>>2]|0,g&(i|0)>-1):0)c[(c[f>>2]|0)+(d<<2)>>2]=i;d=d+1|0}}while(0);d=DD(a,m,e)|0;if(c[h>>2]&2)D_(c[e+24>>2]|0)}else d=0;D_(m)}while(0);l=n;return d|0}function CD(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0;G=l;l=l+144|0;B=G+136|0;A=G+64|0;F=G+48|0;v=G+40|0;u=G;t=G+120|0;x=G+104|0;C=G+96|0;D=c[f+20>>2]|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;a:do if((b|0)>=1){o=(D|0)==0;E=c[15686]|0;p=t+4|0;q=t+8|0;r=t+12|0;y=x+4|0;w=x+8|0;z=x+12|0;n=0;g=0;while(1){if((n|0)==(b|0))break;s=c[d+(n<<2)>>2]|0;mM(s);if(!o?(a[D+n>>0]|0)!=0:0){m=c[s+16>>2]|0;H=+h[m+16>>3];i=~~(H+(H>=0.0?.5:-.5));c[t>>2]=i;H=+h[m+24>>3];j=~~(H+(H>=0.0?.5:-.5));c[p>>2]=j;H=+h[m+32>>3];k=~~(H+(H>=0.0?.5:-.5));c[q>>2]=k;H=+h[m+40>>3];m=~~(H+(H>=0.0?.5:-.5));c[r>>2]=m;if(!g){c[x>>2]=c[t>>2];c[x+4>>2]=c[t+4>>2];c[x+8>>2]=c[t+8>>2];c[x+12>>2]=c[t+12>>2]}else{c[x>>2]=c[((c[x>>2]|0)>(i|0)?t:x)>>2];c[y>>2]=c[((c[y>>2]|0)>(j|0)?t:x)+4>>2];c[w>>2]=c[((c[w>>2]|0)<(k|0)?t:x)+8>>2];c[z>>2]=c[((c[z>>2]|0)<(m|0)?t:x)+12>>2]}g=g+1|0}if(0>2){m=ry(s)|0;s=c[s+16>>2]|0;K=+h[s+16>>3];J=+h[s+24>>3];I=+h[s+32>>3];H=+h[s+40>>3];c[u>>2]=m;h[u+8>>3]=K;h[u+16>>3]=J;h[u+24>>3]=I;h[u+32>>3]=H;g1(E,96231,u)|0}n=n+1|0}q=vH(b<<5)|0;g=0;while(1){if((g|0)==(b|0))break;u=q+(g<<5)|0;t=(c[(c[d+(g<<2)>>2]|0)+16>>2]|0)+16|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[u+20>>2]=c[t+20>>2];c[u+24>>2]=c[t+24>>2];c[u+28>>2]=c[t+28>>2];g=g+1|0}o=f+8|0;p=GD(b,q,c[o>>2]|0)|0;if(0){c[v>>2]=p;g1(E,96259,v)|0}if((p|0)>=1){n=(D|0)!=0;if(n){i=((c[w>>2]|0)+(c[x>>2]|0)|0)/2|0;g=((c[z>>2]|0)+(c[y>>2]|0)|0)/2|0}else{i=0;g=0}c[C+4>>2]=g;c[C>>2]=i;m=uH(b<<4)|0;k=f+16|0;g=0;while(1){if((g|0)>=(b|0))break;i=c[d+(g<<2)>>2]|0;j=m+(g<<4)|0;c[m+(g<<4)+12>>2]=g;if((c[k>>2]|0)==3){x=(c[i+16>>2]|0)+16|0;y=c[o>>2]|0;z=ry(i)|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];c[A+16>>2]=c[x+16>>2];c[A+20>>2]=c[x+20>>2];c[A+24>>2]=c[x+24>>2];c[A+28>>2]=c[x+28>>2];c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];HD(A,j,p,y,B,z)}else{c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];ID(e,i,j,p,f,B)}g=g+1|0}j=uH(b<<2)|0;g=0;while(1){if((g|0)>=(b|0))break;c[j+(g<<2)>>2]=m+(g<<4);g=g+1|0}_0(j,b,4,87);k=vI()|0;g=uH(b<<3)|0;b:do if(n){i=0;while(1){if((i|0)>=(b|0)){i=0;break}if(a[D+i>>0]|0){e=c[j+(i<<2)>>2]|0;f=g+(c[e+12>>2]<<3)|0;c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];KD(e,k,f,B)}i=i+1|0}while(1){if((i|0)>=(b|0))break b;if(!(a[D+i>>0]|0)){C=c[j+(i<<2)>>2]|0;LD(i,C,k,g+(c[C+12>>2]<<3)|0,p,c[o>>2]|0,q)}i=i+1|0}}else{i=0;while(1){if((i|0)>=(b|0))break b;D=c[j+(i<<2)>>2]|0;LD(i,D,k,g+(c[D+12>>2]<<3)|0,p,c[o>>2]|0,q);i=i+1|0}}while(0);D_(j);i=0;while(1){if((i|0)>=(b|0))break;D_(c[m+(i<<4)+4>>2]|0);i=i+1|0}D_(m);yI(k);D_(q);if(0>1){i=0;while(1){if((i|0)>=(b|0))break a;C=c[g+(i<<3)>>2]|0;D=c[g+(i<<3)+4>>2]|0;c[F>>2]=i;c[F+4>>2]=C;c[F+8>>2]=D;g1(E,96275,F)|0;i=i+1|0}}}else g=0}else g=0;while(0);l=G;return g|0}function DD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+16|0;g=z;x=uH(a<<3)|0;f=c[d+4>>2]|0;y=d+28|0;e=(f|0)>0;do if(!(c[y>>2]&1))if(e){k=1;w=(a+-1+f|0)/(f|0)|0;break}else{f=~~+N(+(+C(+(+(a|0)))));k=1;w=(a+-1+f|0)/(f|0)|0;break}else if(e){k=0;w=f;f=(a+-1+f|0)/(f|0)|0;break}else{f=~~+N(+(+C(+(+(a|0)))));k=0;w=f;f=(a+-1+f|0)/(f|0)|0;break}while(0);if(0){v=c[15686]|0;c[g>>2]=k|0?96170:96180;c[g+4>>2]=w;c[g+8>>2]=f;g1(v,96193,g)|0}t=uH((f<<3)+8|0)|0;u=uH((w<<3)+8|0)|0;v=uH(a*24|0)|0;j=d+8|0;e=0;g=v;while(1){if((e|0)>=(a|0))break;p=+h[b+(e<<5)+8>>3];o=+h[b+(e<<5)+24>>3];q=+((c[j>>2]|0)>>>0);h[g>>3]=+h[b+(e<<5)+16>>3]-+h[b+(e<<5)>>3]+q;h[g+8>>3]=o-p+q;c[g+16>>2]=e;e=e+1|0;g=g+24|0}s=uH(a<<2)|0;e=0;while(1){if((e|0)>=(a|0))break;c[s+(e<<2)>>2]=v+(e*24|0);e=e+1|0}e=c[d+24>>2]|0;if(!e){if(!(c[y>>2]&64))_0(s,a,4,89)}else{c[46285]=e;_0(s,a,4,88)}r=(k|0)==0;e=0;g=0;j=0;while(1){if((j|0)>=(a|0)){i=0.0;e=0;break}k=c[s+(j<<2)>>2]|0;d=t+(g<<3)|0;q=+h[d>>3];p=+h[k>>3];h[d>>3]=q>p?q:p;d=u+(e<<3)|0;p=+h[d>>3];q=+h[k+8>>3];h[d>>3]=p>q?p:q;if(r){e=e+1|0;d=(e|0)==(w|0);e=d?0:e;g=g+(d&1)|0}else{g=g+1|0;d=(g|0)==(f|0);e=e+(d&1)|0;g=d?0:g}j=j+1|0}while(1){if((e|0)>(f|0)){i=0.0;e=w;break}d=t+(e<<3)|0;q=+h[d>>3];h[d>>3]=i;i=q+i;e=e+1|0}while(1){if((e|0)<=0)break;d=e+-1|0;q=+h[u+(d<<3)>>3];h[u+(e<<3)>>3]=i;i=q+i;e=d}h[u>>3]=i;e=0;g=0;d=0;while(1){if((d|0)>=(a|0))break;k=c[(c[s+(d<<2)>>2]|0)+16>>2]|0;i=+h[b+(k<<5)>>3];m=-i;p=+h[b+(k<<5)+8>>3];q=-p;n=+h[b+(k<<5)+16>>3];o=+h[b+(k<<5)+24>>3];j=c[y>>2]|0;do if(!(j&4))if(!(j&8)){i=(m-n+ +h[t+(g<<3)>>3]+ +h[t+(g+1<<3)>>3])*.5;break}else{i=i-n+ +h[t+(g+1<<3)>>3];break}else i=+h[t+(g<<3)>>3];while(0);c[x+(k<<3)>>2]=~~i;do if(!(j&16))if(!(j&32)){i=(q-o+ +h[u+(e<<3)>>3]+ +h[u+(e+1<<3)>>3])*.5;break}else{i=+h[u+(e+1<<3)>>3];break}else i=p-o+ +h[u+(e<<3)>>3];while(0);c[x+(k<<3)+4>>2]=~~i;if(r){e=e+1|0;k=(e|0)==(w|0);e=k?0:e;g=g+(k&1)|0}else{g=g+1|0;k=(g|0)==(f|0);e=e+(k&1)|0;g=k?0:g}d=d+1|0}D_(v);D_(s);D_(t);D_(u);l=z;return x|0}function ED(a,b){a=a|0;b=b|0;var d=0;d=c[46285]|0;a=c[d+(c[(c[a>>2]|0)+16>>2]<<2)>>2]|0;b=c[d+(c[(c[b>>2]|0)+16>>2]<<2)>>2]|0;return ((a|0)>(b|0)?1:((a|0)<(b|0))<<31>>31)|0}function FD(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a>>2]|0;b=c[b>>2]|0;e=+h[a>>3]+ +h[a+8>>3];d=+h[b>>3]+ +h[b+8>>3];return (e<d?1:(e>d)<<31>>31)|0}function GD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0;s=l;l=l+96|0;q=s+80|0;r=s+48|0;p=s+8|0;m=s;k=(a*100|0)+-1|0;e=+(d<<1|0);n=0.0;o=0.0;d=0;while(1){if((d|0)>=(a|0))break;j=+h[b+(d<<5)+16>>3]-+h[b+(d<<5)>>3]+e;i=+h[b+(d<<5)+24>>3]-+h[b+(d<<5)+8>>3]+e;n=n-j-i;o=o-i*j;d=d+1|0}i=+(k|0);j=n*n-i*4.0*o;if(!(j<0.0)){e=+C(+j);g=i*2.0;f=(e-n)/g;g=(-n-e)/g;d=~~f;d=(d|0)==0?1:d;if(0>2){m=c[15686]|0;E1(96418,27,1,m)|0;h[p>>3]=i;h[p+8>>3]=n;h[p+16>>3]=o;h[p+24>>3]=j;h[p+32>>3]=e;g1(m,96446,p)|0;c[r>>2]=d;h[r+8>>3]=f;c[r+16>>2]=~~g;h[r+24>>3]=g;g1(m,96472,r)|0;h[q>>3]=(f*i+n)*f+o;h[q+8>>3]=(g*i+n)*g+o;g1(m,96494,q)|0}}else{h[m>>3]=j;Pw(1,96391,m)|0;d=-1}l=s;return d|0}function HD(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0.0;u=l;l=l+32|0;t=u+16|0;s=u;p=+h[a>>3];q=+h[a+8>>3];n=+h[a+16>>3];o=+h[a+24>>3];r=vI()|0;j=c[f>>2]|0;a=j-e|0;k=c[f+4>>2]|0;i=k-e|0;j=e-~~(p+(p>=0.0?.5:-.5))+j+~~(n+(n>=0.0?.5:-.5))|0;k=e-~~(q+(q>=0.0?.5:-.5))+k+~~(o+(o>=0.0?.5:-.5))|0;if((a|0)>-1)f=(a|0)/(d|0)|0;else f=((a+1|0)/(d|0)|0)+-1|0;if((i|0)>-1)m=(i|0)/(d|0)|0;else m=((i+1|0)/(d|0)|0)+-1|0;if((j|0)>-1)j=(j|0)/(d|0)|0;else j=((j+1|0)/(d|0)|0)+-1|0;if((k|0)>-1)i=(k|0)/(d|0)|0;else i=((k+1|0)/(d|0)|0)+-1|0;while(1){if((f|0)>(j|0))break;else a=m;while(1){if((a|0)>(i|0))break;BI(r,f,a);a=a+1|0}f=f+1|0}k=b+4|0;c[k>>2]=FI(r)|0;j=EI(r)|0;m=b+8|0;c[m>>2]=j;w=+(e<<1|0);v=+(d|0);i=~~+N(+((n+w-p)/v));a=~~+N(+((o+w-q)/v));c[b>>2]=a+i;a:do if(0>2){f=c[15686]|0;c[s>>2]=g;c[s+4>>2]=j;c[s+8>>2]=i;c[s+12>>2]=a;g1(f,96350,s)|0;a=0;while(1){if((a|0)>=(c[m>>2]|0))break a;g=c[k>>2]|0;s=c[g+(a<<3)+4>>2]|0;c[t>>2]=c[g+(a<<3)>>2];c[t+4>>2]=s;g1(f,96377,t)|0;a=a+1|0}}while(0);yI(r);l=u;return}function ID(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0.0,R=0.0;P=l;l=l+128|0;F=P+112|0;E=P+104|0;O=P+16|0;M=P;H=P+64|0;I=P+56|0;z=P+40|0;A=P+96|0;y=P+88|0;v=P+24|0;w=P+80|0;x=P+72|0;K=c[f+8>>2]|0;G=c[f+12>>2]|0;C=(a|0)==0?b:a;L=vI()|0;J=b+16|0;B=c[J>>2]|0;t=+h[B+16>>3];D=(c[g>>2]|0)-~~(t+(t>=0.0?.5:-.5))|0;t=+h[B+24>>3];B=(c[g+4>>2]|0)-~~(t+(t>=0.0?.5:-.5))|0;a:do if((c[f+16>>2]|0)==1){v=vH((ay(b)|0)<<2)|0;a=0;g=Sy(b)|0;while(1){if(!g)break;x=g+16|0;c[v+(a<<2)>>2]=c[(c[x>>2]|0)+112>>2];c[(c[x>>2]|0)+112>>2]=0;a=a+1|0;g=Ty(b,g)|0}o=D-K|0;p=B-K|0;q=D+K|0;r=B+K|0;n=1;while(1){a=c[J>>2]|0;if((n|0)>(c[a+180>>2]|0))break;m=c[(c[a+184>>2]|0)+(n<<2)>>2]|0;i=c[m+16>>2]|0;t=+h[i+16>>3];a=~~(t+(t>=0.0?.5:-.5));t=+h[i+24>>3];g=~~(t+(t>=0.0?.5:-.5));t=+h[i+32>>3];f=~~(t+(t>=0.0?.5:-.5));t=+h[i+40>>3];i=~~(t+(t>=0.0?.5:-.5));b:do if((f|0)>(a|0)&(i|0)>(g|0)){a=o+a|0;j=p+g|0;f=q+f|0;k=r+i|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)j=(j|0)/(e|0)|0;else j=((j+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)i=(f|0)/(e|0)|0;else i=((f+1|0)/(e|0)|0)+-1|0;if((k|0)>-1)f=(k|0)/(e|0)|0;else f=((k+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=j;while(1){if((a|0)>(f|0))break;BI(L,g,a);a=a+1|0}g=g+1|0}a=Sy(m)|0;while(1){if(!a)break b;c[(c[a+16>>2]|0)+212>>2]=m;a=Ty(m,a)|0}}while(0);n=n+1|0}r=z+8|0;s=H+4|0;t=+(K|0);u=I+4|0;q=A+4|0;p=y+4|0;o=Sy(b)|0;while(1){if(!o)break;WL(z,o);R=+h[z>>3];Q=+h[r>>3];m=D+~~(R+(R>=0.0?.5:-.5))|0;c[H>>2]=m;n=B+~~(Q+(Q>=0.0?.5:-.5))|0;c[s>>2]=n;g=o+16|0;a=c[g>>2]|0;c:do if(!(c[a+212>>2]|0)){c[I>>2]=~~((+h[a+96>>3]+ +h[a+88>>3])*.5+t);c[u>>2]=~~(+h[a+80>>3]*.5+t);c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];ND(A,E,F);a=c[A>>2]|0;f=c[q>>2]|0;c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];OD(y,E,F);i=c[y>>2]|0;j=c[p>>2]|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)k=(f|0)/(e|0)|0;else k=((f+1|0)/(e|0)|0)+-1|0;if((i|0)>-1)i=(i|0)/(e|0)|0;else i=((i+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)f=(j|0)/(e|0)|0;else f=((j+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=k;while(1){if((a|0)>(f|0))break;BI(L,g,a);a=a+1|0}g=g+1|0}if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Ex(C,o)|0;while(1){if(!a)break c;c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];PD(a,F,L,D,B,e,G);a=Gx(C,a)|0}}else{if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Ex(C,o)|0;while(1){if(!a)break c;if((c[(c[g>>2]|0)+212>>2]|0)!=(c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)){c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];PD(a,F,L,D,B,e,G)}a=Gx(C,a)|0}}while(0);o=Ty(b,o)|0}a=0;g=Sy(b)|0;while(1){if(!g)break;c[(c[g+16>>2]|0)+112>>2]=c[v+(a<<2)>>2];a=a+1|0;g=Ty(b,g)|0}D_(v)}else{r=v+8|0;s=H+4|0;t=+(K|0);u=I+4|0;q=w+4|0;p=x+4|0;o=Sy(b)|0;while(1){if(!o)break a;WL(v,o);Q=+h[v>>3];R=+h[r>>3];m=D+~~(Q+(Q>=0.0?.5:-.5))|0;c[H>>2]=m;n=B+~~(R+(R>=0.0?.5:-.5))|0;c[s>>2]=n;a=c[o+16>>2]|0;c[I>>2]=~~((+h[a+96>>3]+ +h[a+88>>3])*.5+t);c[u>>2]=~~(+h[a+80>>3]*.5+t);c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];ND(w,E,F);a=c[w>>2]|0;f=c[q>>2]|0;c[E>>2]=c[H>>2];c[E+4>>2]=c[H+4>>2];c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];OD(x,E,F);i=c[x>>2]|0;j=c[p>>2]|0;if((a|0)>-1)g=(a|0)/(e|0)|0;else g=((a+1|0)/(e|0)|0)+-1|0;if((f|0)>-1)k=(f|0)/(e|0)|0;else k=((f+1|0)/(e|0)|0)+-1|0;if((i|0)>-1)i=(i|0)/(e|0)|0;else i=((i+1|0)/(e|0)|0)+-1|0;if((j|0)>-1)f=(j|0)/(e|0)|0;else f=((j+1|0)/(e|0)|0)+-1|0;while(1){if((g|0)>(i|0))break;else a=k;while(1){if((a|0)>(f|0))break;BI(L,g,a);a=a+1|0}g=g+1|0}if((m|0)>-1)a=(m|0)/(e|0)|0;else a=((m+1|0)/(e|0)|0)+-1|0;c[H>>2]=a;if((n|0)>-1)a=(n|0)/(e|0)|0;else a=((n+1|0)/(e|0)|0)+-1|0;c[s>>2]=a;a=Ex(C,o)|0;while(1){if(!a)break;c[F>>2]=c[H>>2];c[F+4>>2]=c[H+4>>2];PD(a,F,L,D,B,e,G);a=Gx(C,a)|0}o=Ty(b,o)|0}}while(0);i=d+4|0;c[i>>2]=FI(L)|0;j=d+8|0;c[j>>2]=EI(L)|0;g=c[J>>2]|0;Q=+(K<<1|0);R=+(e|0);a=~~+N(+((+h[g+32>>3]+Q-+h[g+16>>3])/R));g=~~+N(+((+h[g+40>>3]+Q-+h[g+24>>3])/R));c[d>>2]=g+a;d:do if(0>2){f=c[15686]|0;d=ry(b)|0;b=c[j>>2]|0;c[M>>2]=d;c[M+4>>2]=b;c[M+8>>2]=a;c[M+12>>2]=g;g1(f,96350,M)|0;a=0;while(1){if((a|0)>=(c[j>>2]|0))break d;b=c[i>>2]|0;M=c[b+(a<<3)+4>>2]|0;c[O>>2]=c[b+(a<<3)>>2];c[O+4>>2]=M;g1(f,96377,O)|0;a=a+1|0}}while(0);yI(L);l=P;return}function JD(a,b){a=a|0;b=b|0;return (c[c[b>>2]>>2]|0)-(c[c[a>>2]>>2]|0)|0}function KD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|0;h=j+16|0;i=j;k=c[a+4>>2]|0;g=c[a+8>>2]|0;c[d>>2]=0-(c[e>>2]|0);f=d+4|0;c[f>>2]=0-(c[e+4>>2]|0);a=0;e=k;while(1){if((a|0)>=(g|0))break;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];zI(b,h);a=a+1|0;e=e+8|0}if(0>1){k=c[15686]|0;b=c[d>>2]|0;d=c[f>>2]|0;c[i>>2]=g;c[i+4>>2]=b;c[i+8>>2]=d;g1(k,96324,i)|0}l=j;return}function LD(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;k=c[b+12>>2]|0;l=+h[i+(k<<5)>>3];m=+h[i+(k<<5)+8>>3];n=+h[i+(k<<5)+16>>3];o=+h[i+(k<<5)+24>>3];if(!((a|0)==0?(q=+(g<<1|0),p=+(f|0),(MD((~~+N(+((q-l+n)/p))|0)/-2|0,(~~+N(+((q-m+o)/p))|0)/-2|0,b,d,e,f,i)|0)!=0):0))j=3;a:do if((j|0)==3?(MD(0,0,b,d,e,f,i)|0)==0:0)if((~~+N(+(n-l))|0)<(~~+N(+(o-m))|0)){k=1;while(1){j=0-k|0;a=0;while(1){if((a|0)<=(j|0)){g=j;break}if(MD(j,a,b,d,e,f,i)|0)break a;a=a+-1|0}while(1){if((g|0)>=(k|0))break;if(MD(g,a,b,d,e,f,i)|0)break a;g=g+1|0}while(1){if((a|0)>=(k|0))break;if(MD(g,a,b,d,e,f,i)|0)break a;a=a+1|0}while(1){if((g|0)<=(j|0))break;if(MD(g,a,b,d,e,f,i)|0)break a;g=g+-1|0}while(1){if((a|0)<=0)break;if(!(MD(g,a,b,d,e,f,i)|0))a=a+-1|0;else break a}k=k+1|0}}else{k=1;while(1){j=0-k|0;a=0;while(1){if((a|0)>=(k|0)){g=j;break}if(MD(a,j,b,d,e,f,i)|0)break a;a=a+1|0}while(1){if((g|0)>=(k|0))break;if(MD(a,g,b,d,e,f,i)|0)break a;g=g+1|0}while(1){if((a|0)<=(j|0))break;if(MD(a,g,b,d,e,f,i)|0)break a;a=a+-1|0}while(1){if((g|0)<=(j|0))break;if(MD(a,g,b,d,e,f,i)|0)break a;g=g+-1|0}while(1){if((a|0)>=0)break;if(!(MD(a,g,b,d,e,f,i)|0))a=a+1|0;else break a}k=k+1|0}}while(0);return}function MD(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0;t=l;l=l+48|0;r=t+32|0;s=t+8|0;q=t;m=d+4|0;o=c[d+8>>2]|0;p=q+4|0;j=c[m>>2]|0;k=0;while(1){if((k|0)>=(o|0)){n=5;break}v=j;u=c[v+4>>2]|0;c[q>>2]=(c[v>>2]|0)+a;c[p>>2]=u+b;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];if(CI(e,r)|0){j=0;break}j=j+8|0;k=k+1|0}if((n|0)==5){d=c[d+12>>2]|0;x=+h[i+(d<<5)>>3];w=+h[i+(d<<5)+8>>3];c[f>>2]=(O(g,a)|0)-~~(x+(x>=0.0?.5:-.5));d=f+4|0;c[d>>2]=(O(g,b)|0)-~~(w+(w>=0.0?.5:-.5));j=c[m>>2]|0;k=0;while(1){if((k|0)>=(o|0))break;u=j;v=c[u+4>>2]|0;c[q>>2]=(c[u>>2]|0)+a;c[p>>2]=v+b;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];zI(e,r);j=j+8|0;k=k+1|0}if(0>1){j=c[15686]|0;u=c[f>>2]|0;v=c[d>>2]|0;c[s>>2]=o;c[s+4>>2]=a;c[s+8>>2]=b;c[s+12>>2]=u;c[s+16>>2]=v;g1(j,96290,s)|0;j=1}else j=1}l=t;return j|0}function ND(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;c[a>>2]=(c[b>>2]|0)-(c[d>>2]|0);c[a+4>>2]=e;return}function OD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=e;return}function PD(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+112|0;x=A+96|0;w=A+80|0;r=A+48|0;s=A+32|0;y=A+16|0;z=A;n=A+64|0;h[y>>3]=+(c[b>>2]|0);t=y+8|0;h[t>>3]=+(c[b+4>>2]|0);a:do if((i|0)!=0?(u=a+16|0,m=c[(c[u>>2]|0)+8>>2]|0,(m|0)!=0):0){q=+(e|0);p=+(f|0);o=1.0/+(g|0);n=z+8|0;i=0;while(1){if((i|0)>=(c[m+4>>2]|0))break a;f=c[m>>2]|0;a=c[f+(i*48|0)>>2]|0;b=c[f+(i*48|0)+4>>2]|0;g=c[f+(i*48|0)+8>>2]|0;e=c[f+(i*48|0)+12>>2]|0;m=f+(i*48|0)+16|0;c[r>>2]=c[m>>2];c[r+4>>2]=c[m+4>>2];c[r+8>>2]=c[m+8>>2];c[r+12>>2]=c[m+12>>2];f=f+(i*48|0)+32|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];if(!g){c[y>>2]=c[a>>2];c[y+4>>2]=c[a+4>>2];c[y+8>>2]=c[a+8>>2];c[y+12>>2]=c[a+12>>2];m=a+16|0;c[z>>2]=c[m>>2];c[z+4>>2]=c[m+4>>2];c[z+8>>2]=c[m+8>>2];c[z+12>>2]=c[m+12>>2];m=2}else{c[y>>2]=c[r>>2];c[y+4>>2]=c[r+4>>2];c[y+8>>2]=c[r+8>>2];c[y+12>>2]=c[r+12>>2];c[z>>2]=c[a>>2];c[z+4>>2]=c[a+4>>2];c[z+8>>2]=c[a+8>>2];c[z+12>>2]=c[a+12>>2];m=1}j=+h[y>>3]+q;h[y>>3]=j;k=+h[t>>3]+p;h[t>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[y>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[t>>3]=j;j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];AD(w,x,d);while(1){if((m|0)>=(b|0))break;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];g=a+(m<<4)|0;c[z>>2]=c[g>>2];c[z+4>>2]=c[g+4>>2];c[z+8>>2]=c[g+8>>2];c[z+12>>2]=c[g+12>>2];j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];AD(w,x,d);m=m+1|0}if(e|0){c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[z>>2]=c[s>>2];c[z+4>>2]=c[s+4>>2];c[z+8>>2]=c[s+8>>2];c[z+12>>2]=c[s+12>>2];j=+h[z>>3]+q;h[z>>3]=j;k=+h[n>>3]+p;h[n>>3]=k;if(!(j>=0.0))j=(j+1.0)*o+-1.0;else j=j*o;h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)*o+-1.0;else j=k*o;h[n>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];AD(w,x,d)}i=i+1|0;m=c[(c[u>>2]|0)+8>>2]|0}}else v=4;while(0);if((v|0)==4){WL(n,c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0);c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];c[z+8>>2]=c[n+8>>2];c[z+12>>2]=c[n+12>>2];j=+h[z>>3]+ +(e|0);h[z>>3]=j;m=z+8|0;k=+h[m>>3]+ +(f|0);h[m>>3]=k;if(!(j>=0.0))j=(j+1.0)/+(g|0)+-1.0;else j=j/+(g|0);h[z>>3]=j;if(!(k>=0.0))j=(k+1.0)/+(g|0)+-1.0;else j=k/+(g|0);h[m>>3]=j;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[x>>2]=c[z>>2];c[x+4>>2]=c[z+4>>2];c[x+8>>2]=c[z+8>>2];c[x+12>>2]=c[z+12>>2];AD(w,x,d)}l=A;return}function QD(a,b,d){a=a|0;b=b|0;d=d|0;a:do if((a|0)<1)a=0;else switch(c[d+16>>2]|0){case 4:{a=DD(a,b,d)|0;break a}case 3:{a=RD(a,b,d)|0;break a}default:{a=0;break a}}while(0);return a|0}function RD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+80|0;g=n+64|0;f=n+24|0;m=n+8|0;e=n;h=n+56|0;j=d+8|0;k=GD(a,b,c[j>>2]|0)|0;if(0){i=c[15686]|0;c[e>>2]=k;g1(i,96259,e)|0}a:do if((k|0)>=1){c[h+4>>2]=0;c[h>>2]=0;i=uH(a<<4)|0;d=0;while(1){if((d|0)>=(a|0))break;c[i+(d<<4)+12>>2]=d;o=b+(d<<5)|0;e=c[j>>2]|0;c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];c[f+20>>2]=c[o+20>>2];c[f+24>>2]=c[o+24>>2];c[f+28>>2]=c[o+28>>2];c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];HD(f,i+(d<<4)|0,k,e,g,191979);d=d+1|0}f=uH(a<<2)|0;d=0;while(1){if((d|0)>=(a|0))break;c[f+(d<<2)>>2]=i+(d<<4);d=d+1|0}_0(f,a,4,87);g=vI()|0;d=uH(a<<3)|0;e=0;while(1){if((e|0)>=(a|0))break;o=c[f+(e<<2)>>2]|0;LD(e,o,g,d+(c[o+12>>2]<<3)|0,k,c[j>>2]|0,b);e=e+1|0}D_(f);e=0;while(1){if((e|0)>=(a|0))break;D_(c[i+(e<<4)+4>>2]|0);e=e+1|0}D_(i);yI(g);if(0>1){f=c[15686]|0;e=0;while(1){if((e|0)>=(a|0))break a;b=c[d+(e<<3)>>2]|0;o=c[d+(e<<3)+4>>2]|0;c[m>>2]=e;c[m+4>>2]=b;c[m+8>>2]=o;g1(f,96275,m)|0;e=e+1|0}}}else d=0;while(0);l=n;return d|0}function SD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;a:do if((a|0)<1)f=0-a|0;else{s=(e|0)==0;q=(f|0)==0;j=0;while(1){if((j|0)==(a|0)){f=0;break a}r=c[b+(j<<2)>>2]|0;g=s?r:e;k=c[d+(j<<3)>>2]|0;l=c[d+(j<<3)+4>>2]|0;m=+(k|0);n=m*.013888888888888888;o=+(l|0);p=o*.013888888888888888;i=Sy(r)|0;while(1){if(!i)break;f=c[i+16>>2]|0;t=c[f+132>>2]|0;h[t>>3]=+h[t>>3]+n;t=t+8|0;h[t>>3]=+h[t>>3]+p;t=f+16|0;h[t>>3]=+h[t>>3]+m;t=f+24|0;h[t>>3]=+h[t>>3]+o;f=c[f+108>>2]|0;if(f|0){t=f+56|0;h[t>>3]=+h[t>>3]+m;t=f+64|0;h[t>>3]=+h[t>>3]+o}b:do if(!q){f=Ex(g,i)|0;while(1){if(!f)break b;TD(f,k,l);f=Gx(g,f)|0}}while(0);i=Ty(r,i)|0}UD(r,k,l);j=j+1|0}}while(0);return f|0}function TD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0,l=0.0,m=0,n=0;e=c[a+16>>2]|0;a=c[e+96>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+108>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+100>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}a=c[e+104>>2]|0;if(a|0){m=a+56|0;h[m>>3]=+h[m>>3]+ +(b|0);m=a+64|0;h[m>>3]=+h[m>>3]+ +(d|0)}m=c[e+8>>2]|0;a:do if(m|0){l=+(b|0);j=+(d|0);b=c[m+4>>2]|0;a=0;while(1){if((a|0)>=(b|0))break a;k=c[m>>2]|0;d=c[k+(a*48|0)>>2]|0;f=c[k+(a*48|0)+4>>2]|0;g=c[k+(a*48|0)+8>>2]|0;i=c[k+(a*48|0)+12>>2]|0;e=0;while(1){if((e|0)>=(f|0))break;n=d+(e<<4)|0;h[n>>3]=+h[n>>3]+l;n=d+(e<<4)+8|0;h[n>>3]=+h[n>>3]+j;e=e+1|0}if(g|0){n=k+(a*48|0)+16|0;h[n>>3]=+h[n>>3]+l;n=k+(a*48|0)+24|0;h[n>>3]=+h[n>>3]+j}if(i|0){n=k+(a*48|0)+32|0;h[n>>3]=+h[n>>3]+l;n=k+(a*48|0)+40|0;h[n>>3]=+h[n>>3]+j}a=a+1|0}}while(0);return}function UD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0;j=b+16|0;b=c[j>>2]|0;o=b+16|0;m=b+24|0;f=b+32|0;b=b+40|0;g=+(d|0);l=+h[f>>3]+g;i=+(e|0);n=+h[m>>3]+i;k=+h[b>>3]+i;h[o>>3]=+h[o>>3]+g;h[m>>3]=n;h[f>>3]=l;h[b>>3]=k;b=c[j>>2]|0;f=c[b+12>>2]|0;if((f|0)!=0?(a[f+81>>0]|0)!=0:0){o=f+56|0;h[o>>3]=+h[o>>3]+g;f=f+64|0;h[f>>3]=+h[f>>3]+i;f=1}else f=1;while(1){if((f|0)>(c[b+180>>2]|0))break;UD(c[(c[b+184>>2]|0)+(f<<2)>>2]|0,d,e);f=f+1|0;b=c[j>>2]|0}return}function VD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=BD(a,b,d,e)|0;if(!f)a=1;else{a=SD(a,b,f,d,c[e+12>>2]|0)|0;D_(f)}return a|0}function WD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;o=p;n=VD(a,b,d,e)|0;if(!n){mM(d);m=(c[d+16>>2]|0)+16|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[o+16>>2]=c[m+16>>2];c[o+20>>2]=c[m+20>>2];c[o+24>>2]=c[m+24>>2];c[o+28>>2]=c[m+28>>2];f=o+8|0;g=o+16|0;i=o+24|0;e=0;while(1){if((e|0)>=(a|0))break;k=c[(c[b+(e<<2)>>2]|0)+16>>2]|0;j=c[k+180>>2]|0;k=k+184|0;d=1;while(1){if((d|0)>(j|0))break;r=(c[(c[(c[k>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+16|0;h[o>>3]=+h[(+h[o>>3]<+h[r>>3]?o:r)>>3];r=c[(c[(c[k>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;q=r+16|0;h[f>>3]=+h[(+h[f>>3]<+h[r+24>>3]?o:q)+8>>3];h[g>>3]=+h[(+h[g>>3]>+h[r+32>>3]?o:q)+16>>3];h[i>>3]=+h[(+h[i>>3]>+h[r+40>>3]?o:q)+24>>3];d=d+1|0}e=e+1|0}c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[m+16>>2]=c[o+16>>2];c[m+20>>2]=c[o+20>>2];c[m+24>>2]=c[o+24>>2];c[m+28>>2]=c[o+28>>2]}l=p;return n|0}function XD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=l;l=l+16|0;f=g;if(!e)qa(96508,96514,1400,96521);d=YD(a,d,d)|0;c[e+8>>2]=d;if(0){h=c[15686]|0;c[f>>2]=d;g1(h,96533,f)|0}c[e+12>>2]=0;c[e+20>>2]=0;ZD(a,b,e)|0;l=g;return c[e+16>>2]|0}function YD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;f=i+4|0;g=xx(b,96663)|0;a:do if(g){c[h>>2]=f;h=(N1(g,134313,h)|0)==1;b=c[f>>2]|0;if(h&(b|0)>-1)d=b;else{switch(a[g>>0]|0){case 84:case 116:break;default:break a}d=e}}while(0);l=i;return d|0}function ZD(a,b,c){a=a|0;b=b|0;c=c|0;return _D(xx(a,96546)|0,b,c)|0}function _D(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+64|0;r=u+40|0;q=u+32|0;t=u+24|0;s=u+16|0;m=u+8|0;k=u;i=u+48|0;j=u+44|0;if(!e)qa(96508,96514,1292,96555);o=e+28|0;c[o>>2]=0;p=e+16|0;c[p>>2]=d;n=e+4|0;c[n>>2]=0;c[e+24>>2]=0;a:do if(b|0?(f=a[b>>0]|0,f<<24>>24):0)switch(f<<24>>24|0){case 97:if(!(z$(b,96573,5)|0)){c[p>>2]=4;m=$D(b+5|0,e)|0;c[k>>2]=j;m=(N1(m,134313,k)|0)>0;d=c[j>>2]|0;if(!(m&(d|0)>0))break a;c[n>>2]=d;break a}else{if(z$(b,96579,6)|0)break a;c[p>>2]=5;c[m>>2]=i;m=(N1(b+5|0,96586,m)|0)>0;v=+g[i>>2];g[e>>2]=m&v>0.0?v:1.0;break a}case 99:{if(f<<24>>24!=99)break a;if(b$(b,104980)|0)break a;c[p>>2]=1;break a}case 103:{if(f<<24>>24!=103)break a;if(b$(b,108412)|0)break a;c[p>>2]=3;break a}case 110:{if(f<<24>>24!=110)break a;if(b$(b,108399)|0)break a;c[p>>2]=2;break a}default:break a}while(0);if(0){d=c[15686]|0;E1(96589,11,1,d)|0;c[s>>2]=aE(c[p>>2]|0)|0;g1(d,96601,s)|0;if((c[p>>2]|0)==5){h[t>>3]=+g[e>>2];g1(d,96614,t)|0}c[q>>2]=c[n>>2];g1(d,96627,q)|0;c[r>>2]=c[o>>2];g1(d,96640,r)|0}l=u;return c[p>>2]|0}function $D(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;a:do if((a[b>>0]|0)==95){f=d+28|0;e=1;while(1){b=b+1|0;b:while(1){if(!e)break a;d=a[b>>0]|0;if(!(d<<24>>24))break a;switch(d<<24>>24|0){case 99:{g=10;break b}case 105:{g=9;break b}case 117:{g=11;break b}case 116:{g=12;break b}case 98:{d=32;break b}case 108:{g=7;break b}case 114:{g=8;break b}default:e=0}}if((g|0)==7){g=0;d=4}else if((g|0)==8){g=0;d=8}else if((g|0)==9){g=0;d=64}else if((g|0)==10){g=0;d=1}else if((g|0)==11){g=0;d=2}else if((g|0)==12){g=0;d=16}c[f>>2]=c[f>>2]|d}}while(0);return b|0}function aE(a){a=a|0;switch(a|0){case 1:{a=104980;break}case 2:{a=108399;break}case 3:{a=108412;break}case 4:{a=96573;break}case 5:{a=96579;break}default:a=96653}return a|0}function bE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+96|0;k=n;m=n+80|0;do if(a){if(!e){e=E_(1,20)|0;c[e+4>>2]=d>>>0>80?d:80}d=c[e>>2]|0;j=c[e+4>>2]|0;if(!d){h=100;d=a;i=E_(100,j)|0}else{h=d+100|0;i=F_(c[e+8>>2]|0,O(h,j)|0)|0;H3(i+(O(j,d)|0)|0,0,j*100|0)|0;d=a}while(1){d=cE(k,d,b,m)|0;if(!d)break;a=c[e>>2]|0;f=h<<1;g=O(h,j)|0;if((a|0)==(h|0)){i=F_(i,O(f,j)|0)|0;H3(i+g|0,0,g|0)|0;a=c[e>>2]|0}else f=h;a=i+(O(a,j)|0)|0;g=k;h=a+80|0;do{c[a>>2]=c[g>>2];a=a+4|0;g=g+4|0}while((a|0)<(h|0));c[e>>2]=(c[e>>2]|0)+1;h=f}if(c[m>>2]|0){m=e+16|0;c[m>>2]=c[m>>2]|1}d=c[e>>2]|0;if(!d){D_(i);D_(e);e=0;break}else{c[e+8>>2]=F_(i,O(d,j)|0)|0;break}}while(0);l=n;return e|0}function cE(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+80|0;h=j+64|0;i=j;c[f>>2]=0;do{g=a[d>>0]|0;d=d+1|0}while((B$(g)|0)!=0);a:do switch(g|0){case 69:{c[b>>2]=0;d=dE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e>>2];break}case 101:{c[b>>2]=1;d=dE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e>>2];break}case 80:{c[b>>2]=2;d=eE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+4>>2];break}case 112:{c[b>>2]=3;d=eE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+4>>2];break}case 98:{c[b>>2]=4;d=eE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+8>>2];break}case 66:{c[b>>2]=5;d=eE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+8>>2];break}case 99:{d=fE(d,h)|0;if(!d){c[f>>2]=1;d=0;break a}g=gE(c[h>>2]|0,i)|0;c[h>>2]=g;if(!g){c[f>>2]=1;d=0;break a}if(!(c[i>>2]|0)){c[b>>2]=9;c[b+8>>2]=c[i+8>>2];if(!e)break a;c[b+72>>2]=c[e+24>>2];break a}else{c[b>>2]=14;f=b+8|0;g=i;h=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));if(!e)break a;c[b+72>>2]=c[e+40>>2];break a}}case 67:{d=fE(d,h)|0;if(!d){c[f>>2]=1;d=0;break a}g=gE(c[h>>2]|0,i)|0;c[h>>2]=g;if(!g){c[f>>2]=1;d=0;break a}if(!(c[i>>2]|0)){c[b>>2]=8;c[b+8>>2]=c[i+8>>2];if(!e)break a;c[b+72>>2]=c[e+20>>2];break a}else{c[b>>2]=13;f=b+8|0;g=i;h=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));if(!e)break a;c[b+72>>2]=c[e+40>>2];break a}}case 76:{c[b>>2]=6;d=eE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+12>>2];break}case 84:{c[b>>2]=7;d=hE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=hE(d,b+16|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=iE(d,b+24|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=hE(d,b+32|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=fE(d,b+40|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+16>>2];break}case 70:{c[b>>2]=10;d=hE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=fE(d,b+16|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+28>>2];break}case 83:{c[b>>2]=11;d=fE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+32>>2];break}case 73:{c[b>>2]=12;d=dE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}d=fE(d,b+40|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+36>>2];break}case 116:{c[b>>2]=15;d=jE(d,b+8|0)|0;if(!d){c[f>>2]=1;d=0;break a}if(e)c[b+72>>2]=c[e+44>>2];break}case 0:{d=0;break}default:{c[f>>2]=1;d=0}}while(0);l=j;return d|0}function dE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0;i=l;l=l+16|0;e=i;h[b>>3]=+c2(a,e);f=c[e>>2]|0;if(((f|0)!=(a|0)?(h[b+8>>3]=+c2(f,e),g=c[e>>2]|0,(f|0)!=(g|0)):0)?(h[b+16>>3]=+c2(g,e),d=c[e>>2]|0,(g|0)!=(d|0)):0){h[b+24>>3]=+c2(d,e);a=c[e>>2]|0;a=(d|0)==(a|0)?0:a}else a=0;l=i;return a|0}function eE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+4|0;g=k;a=kE(a,j)|0;do if(a){d=c[j>>2]|0;i=E_(d,24)|0;c[b>>2]=d;e=i;f=0;while(1){if((f|0)>=(d|0)){d=9;break}h[e>>3]=+c2(a,g);d=c[g>>2]|0;if((a|0)==(d|0)){d=5;break}h[e+8>>3]=+c2(d,g);a=c[g>>2]|0;if((d|0)==(a|0)){d=7;break}h[e+16>>3]=0.0;e=e+24|0;d=c[b>>2]|0;f=f+1|0}if((d|0)==5){c[j>>2]=f;D_(i);a=0;break}else if((d|0)==7){c[j>>2]=f;D_(i);a=0;break}else if((d|0)==9){c[j>>2]=f;c[b+4>>2]=i;break}}else a=0;while(0);l=k;return a|0}function fE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;b=kE(b,i)|0;f=c[i>>2]|0;do if(!((b|0)==0|(f|0)<1)){while(1){h=a[b>>0]|0;e=h<<24>>24==0;if(e^h<<24>>24!=45)b=b+1|0;else break}if(!e){h=E_(f+1|0,1)|0;g=h;e=f;while(1){b=b+1|0;if((e|0)<=0){e=9;break}e=a[b>>0]|0;if(!(e<<24>>24)){e=8;break}a[g>>0]=e;e=(c[i>>2]|0)+-1|0;c[i>>2]=e;g=g+1|0}if((e|0)==8){D_(h);b=0;break}else if((e|0)==9){a[g>>0]=0;c[d>>2]=h;break}}else b=0}else b=0;while(0);l=j;return b|0}function gE(b,d){b=b|0;d=d|0;var e=0;e=a[b>>0]|0;switch(e|0){case 91:{b=lE(b+1|0,d)|0;break}case 40:{b=mE(b+1|0,d)|0;break}case 47:case 35:{c[d>>2]=0;c[d+8>>2]=b;break}default:if(!(M$(e)|0))b=0;else{c[d>>2]=0;c[d+8>>2]=b}}return b|0}function hE(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0;f=l;l=l+16|0;d=f;e=+c2(a,d);d=c[d>>2]|0;if((d|0)==(a|0))d=0;else h[b>>3]=e;l=f;return d|0}function iE(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=kE(a,e)|0;e=c[e>>2]|0;c[b>>2]=(e|0)<0?0:e|0?2:1;l=d;return a|0}function jE(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=C$(a,e,10)|0;b=c[e>>2]|0;l=d;return ((b|0)==(a|0)?0:b)|0}function kE(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[b>>2]=i1(a,e,10)|0;b=c[e>>2]|0;l=d;return ((b|0)==(a|0)?0:b)|0}function lE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;m=o;c[b>>2]=1;n=b+8|0;i=hE(a,n)|0;do if(((((i|0)!=0?(j=hE(i,b+16|0)|0,(j|0)!=0):0)?(e=hE(j,b+24|0)|0,(e|0)!=0):0)?(f=hE(e,b+32|0)|0,(f|0)!=0):0)?(k=b+40|0,d=kE(f,k)|0,(d|0)!=0):0){b=c[k>>2]|0;f=E_(b,8)|0;e=0;while(1){if((e|0)>=(b|0)){d=13;break}d=hE(d,m)|0;if(!d){d=9;break}g[f+(e<<3)>>2]=+h[m>>3];d=fE(d,f+(e<<3)+4|0)|0;if(!d){d=12;break}e=e+1|0;b=c[k>>2]|0}if((d|0)==9){D_(f);a=0;break}else if((d|0)==12){D_(f);a=0;break}else if((d|0)==13){c[n+36>>2]=f;break}}else a=0;while(0);l=o;return a|0}function mE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;c[b>>2]=2;k=hE(a,b+8|0)|0;do if(((((((k|0)!=0?(m=hE(k,b+16|0)|0,(m|0)!=0):0)?(e=hE(m,b+24|0)|0,(e|0)!=0):0)?(f=hE(e,b+32|0)|0,(f|0)!=0):0)?(i=hE(f,b+40|0)|0,(i|0)!=0):0)?(j=hE(i,b+48|0)|0,(j|0)!=0):0)?(o=b+56|0,d=kE(j,o)|0,(d|0)!=0):0){e=c[o>>2]|0;i=E_(e,8)|0;f=0;while(1){if((f|0)>=(e|0)){d=15;break}d=hE(d,n)|0;if(!d){d=11;break}g[i+(f<<3)>>2]=+h[n>>3];d=fE(d,i+(f<<3)+4|0)|0;if(!d){d=14;break}f=f+1|0;e=c[o>>2]|0}if((d|0)==11){D_(i);a=0;break}else if((d|0)==14){D_(i);a=0;break}else if((d|0)==15){c[b+60>>2]=i;break}}else a=0;while(0);l=p;return a|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return bE(a,b,c,0)|0}function oE(a){a=a|0;return nE(a,0,0)|0}function pE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=c[a+12>>2]|0;if(a|0){f=c[a+8>>2]|0;g=a+4|0;h=(e|0)==0;b=0;while(1){if((b|0)>=(c[a>>2]|0))break;d=f+(O(c[g>>2]|0,b)|0)|0;if(!h)tb[e&127](d);qE(d);b=b+1|0}D_(f);D_(a)}return}function qE(a){a=a|0;switch(c[a>>2]|0){case 3:case 2:{D_(c[a+8+4>>2]|0);break}case 5:case 4:{D_(c[a+8+4>>2]|0);break}case 6:{D_(c[a+8+4>>2]|0);break}case 7:{D_(c[a+40>>2]|0);break}case 9:case 8:{D_(c[a+8>>2]|0);break}case 14:case 13:{rE(a+8|0);break}case 10:{D_(c[a+16>>2]|0);break}case 11:{D_(c[a+8>>2]|0);break}case 12:{D_(c[a+40>>2]|0);break}default:{}}return}function rE(a){a=a|0;var b=0,d=0,e=0;switch(c[a>>2]|0){case 1:{e=a+40|0;b=a+8+36|0;a=0;while(1){d=c[b>>2]|0;if((a|0)>=(c[e>>2]|0))break;D_(c[d+(a<<3)+4>>2]|0);a=a+1|0}D_(d);break}case 2:{e=a+56|0;d=a+60|0;a=0;while(1){b=c[d>>2]|0;if((a|0)>=(c[e>>2]|0))break;D_(c[b+(a<<3)+4>>2]|0);a=a+1|0}D_(b);break}default:{}}return}function sE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;k=o+4|0;n=o;c[d>>2]=0;c[e>>2]=(ey(ez(b)|0)|0)!=0&1;f=c[46414]|0;a:do if(f|0?(h=yx(b,f)|0,i=a[h>>0]|0,i<<24>>24):0){f=20284;while(1){g=c[f>>2]|0;if(!g)break a;if(i<<24>>24==(a[g>>0]|0)?(b$(h,g)|0)==0:0)break;f=f+12|0}c[d>>2]=c[f+4>>2];c[e>>2]=c[f+8>>2]}while(0);f=c[46425]|0;if((f|0?(c[e>>2]|0)==1:0)?(j=yx(b,f)|0,a[j>>0]|0):0)tE(j,e);f=c[46426]|0;if((f|0?(c[d>>2]|0)==1:0)?(m=yx(b,f)|0,a[m>>0]|0):0)tE(m,d);if(a[(c[b+16>>2]|0)+153>>0]|0){j=b+-48|0;i=ez(c[((c[b>>2]&3|0)==2?b:j)+40>>2]|0)|0;m=c[b>>2]&3;sE(Rx(i,c[((m|0)==2?b:j)+40>>2]|0,c[((m|0)==3?b:b+48|0)+40>>2]|0,0,0)|0,k,n);c[e>>2]=c[k>>2]|c[e>>2];c[d>>2]=c[n>>2]|c[d>>2]}l=o;return}function tE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;m=o;k=o+4|0;j=0;e=0;a:while(1){c[d>>2]=e;g=(j|0)<4;h=(j|0)==3;i=(j|0)==0;while(1){if(!(g&(a[b>>0]|0)!=0))break a;c[k>>2]=0;f=uE(b,k)|0;e=c[k>>2]|0;if(!e){n=5;break a}b=(e|0)==8;if(!(h&b)){if(!(i&b))break;if(a[f>>0]|0)break}c[k>>2]=0;b=f}e=c[d>>2]|e<<(j<<3);j=j+1|0;b=f}if((n|0)==5){c[m>>2]=b;Pw(0,96668,m)|0}l=o;return}function uE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=0;d=vE(a,20344,e)|0;if((d|0)==(a|0)){while(1){d=vE(a,20360,e)|0;if((a|0)==(d|0))break;else a=d}d=vE(a,20408,e)|0}a=c[e>>2]|0;if((a|0)!=0&(a&15|0)==0){a=a|1;c[e>>2]=a}c[b>>2]=c[b>>2]|a;l=f;return d|0}function vE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;while(1){e=c[b>>2]|0;if(!e)break;f=W_(e)|0;if(!(z$(a,e,f)|0)){g=4;break}b=b+8|0}if((g|0)==4){c[d>>2]=c[d>>2]|c[b+4>>2];a=a+f|0}return a|0}function wE(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0;g=0;d=0.0;while(1){if((g|0)==4)break;f=b>>(g<<3)&15;e=1400;while(1){if(!(c[e+16>>2]|0))break;if((f|0)==(c[e>>2]|0)){i=6;break}e=e+24|0}if((i|0)==6){i=0;d=+h[e+8>>3]+d}g=g+1|0}return +(d*10.0*+LL(a,c[46418]|0,1.0,0.0))}function xE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0;p=l;l=l+96|0;m=p+80|0;o=p;k=f>4.0?f*.0875:.35;i=+h[d+8>>3];n=i*k;j=+h[d>>3];k=j*k;e=+h[b>>3];j=e+j;h[m>>3]=j;f=+h[b+8>>3];i=i+f;h[m+8>>3]=i;d=o+64|0;if(!(g&32)){c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=o+32|0;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];f=i;e=j}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];b=o+32|0;c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2]}h[o+16>>3]=e+n;h[o+24>>3]=f-k;h[o+48>>3]=e-n;h[o+56>>3]=f+k;do if(!(g&64))if(!(g&128)){_O(a,o+16|0,3,g>>>4&1^1);break}else{_O(a,o+32|0,3,g>>>4&1^1);break}else _O(a,o,3,g>>>4&1^1);while(0);l=p;return}function yE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0;x=l;l=l+160|0;n=x+144|0;w=x;q=e*4.0;y=(g&32|0)==0;q=!(q<f)|y?.45:f/q*.45;s=!(f>1.0)|y?0.0:(f+-1.0)*.05/e;u=+h[d+8>>3];r=-u;v=q*r;t=+h[d>>3];q=t*q;r=s*r;s=t*s;p=+h[b>>3];e=p+t;h[n>>3]=e;o=+h[b+8>>3];f=u+o;h[n+8>>3]=f;t=t*.5+p;u=u*.5+o;d=w+128|0;if(y){c[d>>2]=c[n>>2];c[d+4>>2]=c[n+4>>2];c[d+8>>2]=c[n+8>>2];c[d+12>>2]=c[n+12>>2];c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];y=w+64|0;c[y>>2]=c[b>>2];c[y+4>>2]=c[b+4>>2];c[y+8>>2]=c[b+8>>2];c[y+12>>2]=c[b+12>>2];i=o;j=p;k=o;m=p;f=o;e=p}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[w>>2]=c[b>>2];c[w+4>>2]=c[b+4>>2];c[w+8>>2]=c[b+8>>2];c[w+12>>2]=c[b+12>>2];y=w+64|0;c[y>>2]=c[n>>2];c[y+4>>2]=c[n+4>>2];c[y+8>>2]=c[n+8>>2];c[y+12>>2]=c[n+12>>2];i=f+s;j=e+r;k=f-s;m=e-r}h[w+16>>3]=e-v;h[w+24>>3]=f-q;h[w+32>>3]=t-r;h[w+40>>3]=u-s;h[w+48>>3]=m;h[w+56>>3]=k;h[w+80>>3]=j;h[w+88>>3]=i;h[w+96>>3]=t+r;h[w+104>>3]=u+s;h[w+112>>3]=e+v;h[w+120>>3]=f+q;do if(!(g&64))if(!(g&128)){_O(a,w,9,1);break}else{_O(a,w+48|0,6,1);break}else _O(a,w,6,1);while(0);l=x;return}function zE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;q=l;l=l+64|0;p=q;t=+h[d+8>>3];s=+h[d>>3];k=+h[b>>3];e=k+s;m=+h[b+8>>3];f=m+t;i=k+s*.2;j=m+t*.2;k=k+s*.6;m=m+t*.6;h[p>>3]=i-t;h[p+8>>3]=j+s;n=p+16|0;h[n>>3]=i+t;o=p+24|0;h[o>>3]=j-s;h[p+32>>3]=k+t;h[p+40>>3]=m-s;h[p+48>>3]=k-t;h[p+56>>3]=m+s;if(!(g&64)){if(g&128|0){d=2;g=1;r=3}}else{d=3;g=0;r=3}if((r|0)==3){h[p+(g<<4)>>3]=i;h[p+(g<<4)+8>>3]=j;h[p+(d<<4)>>3]=k;h[p+(d<<4)+8>>3]=m}_O(a,p,4,1);c[p>>2]=c[b>>2];c[p+4>>2]=c[b+4>>2];c[p+8>>2]=c[b+8>>2];c[p+12>>2]=c[b+12>>2];h[n>>3]=e;h[o>>3]=f;bP(a,p,2);l=q;return}function AE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0;o=l;l=l+64|0;n=o;j=+h[d+8>>3];r=j*-.4;i=+h[d>>3];q=i*.4;t=+h[b>>3];e=t+i*.8;s=+h[b+8>>3];f=s+j*.8;i=t+i;j=s+j;h[n>>3]=t+r;k=n+8|0;h[k>>3]=s+q;d=n+16|0;h[d>>3]=t-r;m=n+24|0;h[m>>3]=s-q;h[n+32>>3]=e-r;h[n+40>>3]=f-q;h[n+48>>3]=e+r;h[n+56>>3]=f+q;if(!(g&64)){if(g&128|0){c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=2;p=5}}else{c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];d=3;p=5}if((p|0)==5){h[n+(d<<4)>>3]=e;h[n+(d<<4)+8>>3]=f}_O(a,n,4,g>>>4&1^1);h[n>>3]=e;h[k>>3]=f;h[n+16>>3]=i;h[m>>3]=j;bP(a,n,2);l=o;return}function BE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;j=l;l=l+80|0;i=j;n=+h[d+8>>3];k=n*-.3333333333333333;p=+h[d>>3];f=p*.3333333333333333;q=+h[b>>3];m=q+p*.5;o=+h[b+8>>3];e=o+n*.5;d=i+64|0;h[i+64>>3]=q+p;h[i+72>>3]=o+n;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];h[i+16>>3]=m+k;h[i+24>>3]=e+f;d=i+32|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];h[i+48>>3]=m-k;h[i+56>>3]=e-f;do if(!(g&64)){d=g>>>4&1^1;if(!(g&128)){_O(a,i,4,d);break}else{_O(a,i,3,d);break}}else _O(a,d,3,g>>>4&1^1);while(0);l=j;return}function CE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l=l+32|0;i=g;k=+h[c>>3];e=+h[c+8>>3];d=+C(+(e*e+k*k))*.5;m=+h[b>>3];k=k*.5;h[i>>3]=m+k-d;j=+h[b+8>>3];e=e*.5;h[i+8>>3]=j-d+e;h[i+16>>3]=m+d+k;h[i+24>>3]=j+d+e;ZO(a,i,2,f>>>4&1^1);l=g;return}function DE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;t=l;l=l+112|0;q=t+48|0;r=t+16|0;s=t;n=f>4.0?f*.125:.5;p=+h[b>>3];o=+h[d>>3];i=+h[b+8>>3];m=+h[d+8>>3];e=m*n;f=o*n;c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];h[r+16>>3]=o+p;h[r+24>>3]=m+i;h[q>>3]=n*(o-m)+p;j=n*(m+o);k=j+i;h[q+8>>3]=k;h[q+48>>3]=j+p;i=n*(m-o)+i;h[q+56>>3]=i;o=e*-.95;m=o+f+p;n=f*1.3333333333333333;if(!(g&32)){e=e*1.3333333333333333;j=f*-.33333333333333326;i=i-e;f=k-e;e=m-n}else{e=e*1.3333333333333333;j=f*2.333333333333333;i=i+e;f=k+e;e=m+n}h[q+16>>3]=e;h[q+24>>3]=f;h[q+32>>3]=j-o+p;h[q+40>>3]=i;bP(a,r,2);if(!(g&64)){if(g&128|0)XL(s,q,3,.5,q,0)}else XL(s,q,3,.5,0,q);aP(a,q,4,0,0,0);l=t;return}function EE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var i=0;g=l;l=l+32|0;i=g;e=+h[d>>3]+ +h[b>>3];f=+h[d+8>>3]+ +h[b+8>>3];c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];h[i+16>>3]=e;h[i+24>>3]=f;bP(a,i,2);l=g;return}function FE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;n=l;l=l+80|0;j=n+72|0;k=n+8|0;m=n;i=+wE(a,g);i=i*i;h[m>>3]=i;c[f+12>>2]=g;g=f+32|0;a=e+3|0;f=b+(a<<4)|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];if((e|0)>(d|0)?(o=+h[b+(e<<4)>>3]-+h[f>>3],p=+h[b+(e<<4)+8>>3]-+h[b+(a<<4)+8>>3],p*p+o*o<i):0)e=e+-3|0;s=k+48|0;r=b+(e<<4)|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];q=k+32|0;a=b+(e+1<<4)|0;c[q>>2]=c[a>>2];c[q+4>>2]=c[a+4>>2];c[q+8>>2]=c[a+8>>2];c[q+12>>2]=c[a+12>>2];f=k+16|0;d=b+(e+2<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[k>>2]=c[g>>2];c[k+4>>2]=c[g+4>>2];c[k+8>>2]=c[g+8>>2];c[k+12>>2]=c[g+12>>2];c[j>>2]=k;c[j+4>>2]=m;MK(j,90,k,1);c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];c[a>>2]=c[q>>2];c[a+4>>2]=c[q+4>>2];c[a+8>>2]=c[q+8>>2];c[a+12>>2]=c[q+12>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];m=b+(e+3<<4)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];l=n;return e|0}function GE(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[a>>2]|0;d=+h[b>>3]-+h[f>>3];e=+h[b+8>>3]-+h[f+8>>3];return e*e+d*d<=+h[c[a+4>>2]>>3]|0}function HE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0;o=l;l=l+80|0;k=o+72|0;m=o+8|0;n=o;j=+wE(a,g);j=j*j;h[n>>3]=j;c[f+8>>2]=g;f=f+16|0;a=b+(d<<4)|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];if(!((e|0)>(d|0)?(i=d+3|0,p=+h[a>>3]-+h[b+(i<<4)>>3],q=+h[b+(d<<4)+8>>3]-+h[b+(i<<4)+8>>3],q*q+p*p<j):0))i=d;e=b+(i+3<<4)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];g=m+16|0;d=b+(i+2<<4)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];r=m+32|0;a=b+(i+1<<4)|0;c[r>>2]=c[a>>2];c[r+4>>2]=c[a+4>>2];c[r+8>>2]=c[a+8>>2];c[r+12>>2]=c[a+12>>2];s=m+48|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];c[k>>2]=s;c[k+4>>2]=n;MK(k,90,m,0);n=b+(i<<4)|0;c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];c[n+8>>2]=c[s+8>>2];c[n+12>>2]=c[s+12>>2];c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2];c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];l=o;return i|0}function IE(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0,v=0,w=0;u=(g|0)!=0;l=(i|0)!=0;if(!((e|0)==(d|0)&(u&l))){if(l){j=+wE(a,i);k=+h[b+(e<<4)>>3];p=+h[b+(e<<4)+8>>3];l=e+3|0;r=b+(l<<4)|0;n=+h[r>>3];l=b+(l<<4)+8|0;o=+h[l>>3];t=k-n;s=p-o;t=+C(+(s*s+t*t))*.9;j=j>=t?t:j;if(p==o){m=(k<n?-j:j)+n;j=p}else{m=k;j=(p<o?-j:j)+o}w=e+1|0;h[b+(w<<4)>>3]=k;h[b+(w<<4)+8>>3]=p;e=b+(e+2<<4)|0;h[r>>3]=m;h[l>>3]=j;c[e>>2]=c[r>>2];c[e+4>>2]=c[r+4>>2];c[e+8>>2]=c[r+8>>2];c[e+12>>2]=c[r+12>>2];c[f+12>>2]=i;h[f+32>>3]=n;h[f+40>>3]=o}if(u){m=+wE(a,g);l=b+(d<<4)|0;k=+h[l>>3];j=+h[b+(d<<4)+8>>3];w=d+3|0;o=+h[b+(w<<4)>>3];p=+h[b+(w<<4)+8>>3];t=k-o;s=j-p;t=+C(+(s*s+t*t))*.9;m=m>=t?t:m;if(j==p){n=(k<o?m:-m)+k;m=j}else{n=k;m=(j<p?m:-m)+j}w=d+1|0;v=b+(w<<4)|0;h[v>>3]=n;h[b+(w<<4)+8>>3]=m;c[l>>2]=c[v>>2];c[l+4>>2]=c[v+4>>2];c[l+8>>2]=c[v+8>>2];c[l+12>>2]=c[v+12>>2];v=d+2|0;h[b+(v<<4)>>3]=o;h[b+(v<<4)+8>>3]=p;v=16}}else{r=b+(e<<4)|0;s=+h[r>>3];t=+h[b+(e<<4)+8>>3];l=e+3|0;u=b+(l<<4)|0;k=+h[u>>3];l=b+(l<<4)+8|0;j=+h[l>>3];m=+wE(a,g);q=+wE(a,i);n=s-k;p=t-j;n=+C(+(p*p+n*n));w=!(q+m>=n);n=n*.3333333333333333;m=w?m:n;n=w?q:n;if(t==j){w=s<k;p=(w?-n:n)+k;q=(w?m:-m)+s;o=t;m=t}else{w=t<j;p=s;q=s;o=(w?m:-m)+t;m=(w?-n:n)+j}w=e+1|0;v=b+(w<<4)|0;h[v>>3]=q;h[b+(w<<4)+8>>3]=o;c[r>>2]=c[v>>2];c[r+4>>2]=c[v+4>>2];c[r+8>>2]=c[v+8>>2];c[r+12>>2]=c[v+12>>2];v=b+(e+2<<4)|0;h[u>>3]=p;h[l>>3]=m;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];c[f+12>>2]=i;h[f+32>>3]=s;h[f+40>>3]=t;v=16}if((v|0)==16){c[f+8>>2]=g;h[f+16>>3]=k;h[f+24>>3]=j}return}function JE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;n=+h[b>>3];k=+h[c>>3]-n;o=+h[b+8>>3];l=+h[c+8>>3]-o;j=d*10.0/(+C(+(k*k+l*l))+.0001);k=j*((k>=0.0?.0001:-.0001)+k);j=((l>=0.0?.0001:-.0001)+l)*j;l=k*.5;m=j*.5;i=n-m;f=o-l;n=m+n;l=o+l;o=i+k;m=f+j;k=n+k;j=l+j;g=o>k?o:k;g=n>g?n:g;d=m>j?m:j;d=l>d?l:d;k=o<k?o:k;k=n<k?n:k;j=m<j?m:j;j=l<j?l:j;h[a>>3]=i<k?i:k;h[a+8>>3]=f<j?f:j;h[a+16>>3]=i>g?i:g;h[a+24>>3]=f>d?f:d;return}function KE(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0;q=l;l=l+48|0;m=q+32|0;k=q+16|0;p=q;n=(c[a+16>>2]|0)+12|0;o=c[n>>2]|0;c[n>>2]=b;YO(a,c[(c[a>>2]|0)+336>>2]|0);fP(a,g);t=+h[e>>3]-+h[d>>3];b=e+8|0;s=+h[b>>3]-+h[d+8>>3];r=10.0/(+C(+(t*t+s*s))+.0001);h[e>>3]=r*((t>=0.0?.0001:-.0001)+t);h[b>>3]=((s>=0.0?.0001:-.0001)+s)*r;b=0;while(1){if((b|0)>=4)break;j=i>>(b<<3)&255;if(!j)break;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];LE(p,a,k,m,f,g,j);c[d>>2]=c[p>>2];c[d+4>>2]=c[p+4>>2];c[d+8>>2]=c[p+8>>2];c[d+12>>2]=c[p+12>>2];b=b+1|0}c[n>>2]=o;l=q;return}function LE(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;m=q+16|0;k=q;n=i&15;j=1400;while(1){o=c[j>>2]|0;if(!o)break;if((n|0)==(o|0)){p=4;break}j=j+24|0}if((p|0)==4){r=+h[j+8>>3]*f;h[e>>3]=r*+h[e>>3];o=e+8|0;h[o>>3]=r*+h[o>>3];p=c[j+16>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];wb[p&15](b,k,m,f,g,i);h[d>>3]=+h[e>>3]+ +h[d>>3];p=d+8|0;h[p>>3]=+h[o>>3]+ +h[p>>3]};c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];l=q;return}function ME(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i+8|0;f=i;d=xx(b,96770)|0;if((d|0)!=0?(a[d>>0]|0)!=0:0){e=d;h=5}else{d=xx(b,96782)|0;if((d|0)!=0?(a[d>>0]|0)!=0:0){e=d;h=5}else d=0}if((h|0)==5){d=nE(e,0,120)|0;if(!d){c[f>>2]=ry(b)|0;Pw(0,96789,f)|0;c[g>>2]=e;Pw(3,96842,g)|0}}l=i;return d|0}function NE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+16|0;f=uH(304)|0;if(!f)Pw(1,96850,g)|0;e=a+16|0;a=c[e>>2]|0;c[f>>2]=a;c[e>>2]=f;if(!a){c[f+144>>2]=3;c[f+148>>2]=0;h[f+152>>3]=1.0}else{b=f+16|0;d=a+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));b=f+56|0;d=a+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));c[f+144>>2]=c[a+144>>2];c[f+148>>2]=c[a+148>>2];h[f+152>>3]=+h[a+152>>3];c[f+136>>2]=c[a+136>>2];b=f+96|0;d=a+96|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0))}l=g;return f|0}function OE(a){a=a|0;var b=0;a=a+16|0;b=c[a>>2]|0;if(!b)qa(96876,96880,117,96887);else{D_(c[b+212>>2]|0);D_(c[b+208>>2]|0);D_(c[b+216>>2]|0);D_(c[b+220>>2]|0);D_(c[b+224>>2]|0);D_(c[b+228>>2]|0);D_(c[b+232>>2]|0);D_(c[b+236>>2]|0);D_(c[b+240>>2]|0);D_(c[b+244>>2]|0);D_(c[b+248>>2]|0);D_(c[b+252>>2]|0);D_(c[b+256>>2]|0);D_(c[b+272>>2]|0);D_(c[b+284>>2]|0);D_(c[b+280>>2]|0);c[a>>2]=c[b>>2];D_(b);return}}function PE(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;l=c[d+16>>2]|0;k=c[d+152>>2]|0;if((e|0)!=0&(k&32768|0)!=0)c[l+192>>2]=e;if(((k&65536|0)!=0?(c[l+212>>2]=pH(i,j)|0,(f|0)!=0):0)?(a[f>>0]|0)!=0:0){c[l+208>>2]=pH(f,j)|0;d=1}else d=0;do if(k&4194304){if(g|0?a[g>>0]|0:0){c[l+228>>2]=pH(g,j)|0;d=l+260|0;b[d>>1]=b[d>>1]|1;d=1;break}e=c[l+192>>2]|0;if(e){c[l+228>>2]=n1(e)|0;d=1}}while(0);if((h|0)!=0&(k&8388608|0)!=0?(a[h>>0]|0)!=0:0){c[l+244>>2]=pH(h,j)|0;d=1}return d|0}function QE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+80|0;i=j;h=j+8|0;g=c[(c[b>>2]|0)+168>>2]|0;f=c[(c[(c[g+16>>2]|0)+8>>2]|0)+92>>2]|0;RE(b,e);b=xx(d,137978)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0){Ww(e,b)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){Uw(e,1)|0;b=c[f>>2]|0}a[b>>0]=0;b=c[e>>2]|0;c[f>>2]=b}else{if((g|0)!=(d|0)&(f|0)!=0){Ww(e,f)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){Uw(e,1)|0;b=c[f>>2]|0}c[f>>2]=b+1;a[b>>0]=95}switch(pz(d)|0){case 0:{f=(g|0)==(d|0)?108412:96901;b=(c[d>>2]|0)>>>4;break}case 1:{f=108399;b=(c[d>>2]|0)>>>4;break}case 2:{f=108368;b=(c[d>>2]|0)>>>4;break}default:{f=0;b=0}}Ww(e,f)|0;c[i>>2]=b;Y0(h,96907,i)|0;Ww(e,h)|0;f=e+4|0;b=c[f>>2]|0;if(b>>>0>=(c[e+8>>2]|0)>>>0){Uw(e,1)|0;b=c[f>>2]|0}a[b>>0]=0;b=c[e>>2]|0;c[f>>2]=b}l=j;return b|0}function RE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+144|0;h=i;g=i+8|0;e=c[b+160>>2]|0;if((e|0)>1?c[b+152>>2]&64|0:0){Ww(d,c[(c[(c[b>>2]|0)+308>>2]|0)+(e<<2)>>2]|0)|0;f=d+4|0;e=c[f>>2]|0;if(e>>>0>=(c[d+8>>2]|0)>>>0){Uw(d,1)|0;e=c[f>>2]|0}c[f>>2]=e+1;a[e>>0]=95}f=c[b+196>>2]|0;e=c[b+200>>2]|0;if((f|0)>0|(e|0)>0){c[h>>2]=f;c[h+4>>2]=e;Y0(g,96911,h)|0;Ww(d,g)|0}l=i;return}function SE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0;s=l;l=l+48|0;p=s+16|0;f=s+32|0;q=s;r=+h[(c[a+16>>2]|0)+152>>3];o=TE(d,0,f)|0;if((o+-1|0)>>>0>=2){e=+h[b+16>>3];k=(e+ +h[b>>3])*.5;h[q>>3]=k;i=+h[b+24>>3];m=(i+ +h[b+8>>3])*.5;h[q+8>>3]=m;k=e-k;m=i-m;n=r>.5;if(n)fP(a,.5);j=c[f>>2]|0;i=0.0;f=c[j+8>>2]|0;while(1){d=c[f>>2]|0;if(!d)break;b=f+4|0;if(+g[b>>2]==0.0)e=i;else{WO(a,d);if(!(c[f+12>>2]|0))e=6.283185307179586;else e=+g[b>>2]*6.283185307179586+i;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];b=rQ(p,k,m,i,e)|0;aP(a,c[b>>2]|0,c[b+4>>2]|0,0,0,1);nV(b)}i=e;f=f+12|0}if(n)fP(a,r);UE(j)}l=s;return o|0}function TE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;o=r+8|0;n=r;q=uH(12)|0;i=n1(b)|0;a:do if(!d){d=1;f=i;while(1){switch(a[f>>0]|0){case 0:break a;case 58:{d=d+1|0;break}default:{}}f=f+1|0}}while(0);c[q+4>>2]=i;p=uH((d*12|0)+12|0)|0;c[q+8>>2]=p;m=1.0;h=0;d=0;f=i;while(1){f=k1(f,104958)|0;if(!f){f=20;break}j=+VE(f);if(!(j>=0.0)){f=17;break}k=j-m;if(k>0.0)if((c[5130]|0)!=0?!(k<1.0e-05&k>-1.0e-05):0){c[n>>2]=b;Pw(0,96922,n)|0;c[5130]=0;j=m;d=3}else j=m;k=m-j;if(j>0.0)a[p+(h*12|0)+8>>0]=1;if(a[f>>0]|0)c[p+(h*12|0)>>2]=f;f=h+1|0;g[p+(h*12|0)+4>>2]=j;if(k<1.0e-05&k>-1.0e-05){h=f;f=30;break}else{m=k;h=f;f=0}}b:do if((f|0)==17){if(!(c[5130]|0))d=1;else{c[o>>2]=b;Pw(1,96957,o)|0;c[5130]=0;d=2}UE(q)}else if((f|0)==20)if(m>0.0){f=0;i=0;while(1){if((f|0)>=(h|0))break;o=i+(+g[p+(f*12|0)+4>>2]==0.0&1)|0;f=f+1|0;i=o}if((i|0)<=0){f=p+((h+-1|0)*12|0)+4|0;g[f>>2]=m+ +g[f>>2];f=30;break}j=m/+(i|0);f=0;while(1){if((f|0)>=(h|0)){f=30;break b}i=p+(f*12|0)+4|0;if(+g[i>>2]==0.0)g[i>>2]=j;f=f+1|0}}else f=30;while(0);if((f|0)==30){while(1){f=h+-1|0;if((h|0)<=0)break;if(+g[p+(f*12|0)+4>>2]>0.0)break;else h=f}c[p+(h*12|0)>>2]=0;c[q>>2]=h;c[e>>2]=q}l=r;return d|0}function UE(a){a=a|0;D_(c[a+4>>2]|0);D_(c[a+8>>2]|0);D_(a);return}function VE(b){b=b|0;var d=0.0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;b=A$(b,59)|0;if(!b)d=0.0;else{g=b+1|0;a[b>>0]=0;d=+c2(g,e);d=(d>=0.0?(c[e>>2]|0)!=(g|0):0)?d:-1.0}l=f;return +d}function WE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0;t=l;l=l+80|0;i=t+64|0;r=t;s=+h[(c[a+16>>2]|0)+152>>3];q=TE(d,0,i)|0;if((q+-1|0)>>>0>=2){if(!e){c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];p=r+16|0;o=b+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+32|0;o=b+32|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+48|0;o=b+48|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2]}else{p=b+32|0;c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];p=r+16|0;o=b+48|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];p=r+32|0;c[p>>2]=c[b>>2];c[p+4>>2]=c[b+4>>2];c[p+8>>2]=c[b+8>>2];c[p+12>>2]=c[b+12>>2];p=r+48|0;o=b+16|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2]}k=r+16|0;m=+h[k>>3];f=+h[r>>3];n=m-f;o=r+32|0;h[o>>3]=f;h[k>>3]=f;p=s>.5;if(p)fP(a,.5);i=c[i>>2]|0;j=r+48|0;e=c[i+8>>2]|0;while(1){d=c[e>>2]|0;if(!d)break;b=e+4|0;if(!(+g[b>>2]==0.0)){WO(a,d);if(!(c[e+12>>2]|0))f=m;else f=n*+g[b>>2]+ +h[r>>3];h[o>>3]=f;h[k>>3]=f;_O(a,r,4,1);f=+h[k>>3];h[j>>3]=f;h[r>>3]=f}e=e+12|0}if(p)fP(a,s);UE(i)}l=t;return q|0}function XE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;g=f>>>16^2;c[d+264>>2]=g;h=d+268|0;c[h>>2]=g+2;g=d+272|0;D_(c[g>>2]|0);d=uH(c[h>>2]<<4)|0;c[g>>2]=d;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];g=d+16|0;b=b+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];if(!(e&8192))yO(a,d,d,2)|0;if(!f)WG(d)}return}function YE(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+144|0;c=q+80|0;e=q+16|0;f=q;k=+h[b>>3];o=a+16|0;m=+h[o>>3];if(!(((((((((!(k>m)?(n=+h[a>>3],!(k<n)):0)?(d=+h[b+8>>3],i=+h[a+24>>3],!(d>i)):0)?(j=+h[a+8>>3],!(d<j)):0)?(k=+h[b+16>>3],!(k>m|k<n)):0)?(k=+h[b+24>>3],!(k>i|k<j)):0)?(k=+h[b+32>>3],!(k>m|k<n)):0)?(k=+h[b+40>>3],!(k>i|k<j)):0)?(k=+h[b+48>>3],!(k>m|k<n)):0)?(n=+h[b+56>>3],!(n>i|n<j)):0))p=11;a:do if((p|0)==11){if(!(ZE(b)|0)){XL(f,b,3,.5,c,e);YE(a,c);YE(a,e);break}f=a+24|0;g=a+8|0;e=0;while(1){if((e|0)==4)break a;d=+h[b+(e<<4)>>3];if(!(d>+h[o>>3])){if(d<+h[a>>3]){c=a;p=16}}else{c=o;p=16}if((p|0)==16){p=0;h[c>>3]=d}d=+h[b+(e<<4)+8>>3];if(!(d>+h[f>>3])){if(d<+h[g>>3]){c=a;p=19}}else{c=o;p=19}if((p|0)==19){p=0;h[c+8>>3]=d}e=e+1|0}}while(0);l=q;return}function ZE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,h=0,i=0;b=l;l=l+48|0;d=b+32|0;e=b+16|0;f=b;i=a+48|0;h=a+16|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];g=+$G(f,e,d);h=a+32|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];a=g<4.0&+$G(f,e,d)<4.0&1;l=b;return a|0}function _E(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0;D=l;l=l+272|0;u=D+256|0;v=D+224|0;w=D+192|0;x=D+128|0;y=D+64|0;z=D;A=D+160|0;B=D+96|0;C=D+32|0;t=c[d+16>>2]|0;s=c[t+144>>2]|0;r=t+16|0;c[x>>2]=c[r>>2];c[x+4>>2]=c[r+4>>2];c[x+8>>2]=c[r+8>>2];c[x+12>>2]=c[r+12>>2];c[x+16>>2]=c[r+16>>2];c[x+20>>2]=c[r+20>>2];c[x+24>>2]=c[r+24>>2];c[x+28>>2]=c[r+28>>2];t=c[(c[t+8>>2]|0)+88>>2]|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[z+28>>2]=0;if(!t){c[b>>2]=c[x>>2];c[b+4>>2]=c[x+4>>2];c[b+8>>2]=c[x+8>>2];c[b+12>>2]=c[x+12>>2];c[b+16>>2]=c[x+16>>2];c[b+20>>2]=c[x+20>>2];c[b+24>>2]=c[x+24>>2];c[b+28>>2]=c[x+28>>2]}else{d=x+16|0;if(+h[x>>3]==+h[d>>3]?(e=x+8|0,f=x+24|0,+h[e>>3]==+h[f>>3]):0){h[e>>3]=1797693134862315708145274.0e284;h[x>>3]=1797693134862315708145274.0e284;h[f>>3]=-1797693134862315708145274.0e284;h[d>>3]=-1797693134862315708145274.0e284}j=v+8|0;k=v+16|0;m=v+24|0;n=y+16|0;o=y+24|0;p=s+144|0;q=w+16|0;r=t+12|0;d=0;f=c[t+8>>2]|0;e=0;g=0.0;i=0;while(1){if((i|0)>=(c[t>>2]|0))break;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[y+16>>2]=c[z+16>>2];c[y+20>>2]=c[z+20>>2];c[y+24>>2]=c[z+24>>2];c[y+28>>2]=c[z+28>>2];switch(c[f>>2]|0){case 1:case 0:{H=+h[f+8>>3];I=+h[f+24>>3];h[v>>3]=H-I;F=+h[f+16>>3];G=+h[f+32>>3];h[j>>3]=F-G;h[k>>3]=I+H;h[m>>3]=G+F;E=f+80|0;c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];c[E+8>>2]=c[v+8>>2];c[E+12>>2]=c[v+12>>2];E=f+96|0;c[E>>2]=c[k>>2];c[E+4>>2]=c[k+4>>2];c[E+8>>2]=c[k+8>>2];c[E+12>>2]=c[k+12>>2];c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];$E(x,u);c[u>>2]=c[k>>2];c[u+4>>2]=c[k+4>>2];c[u+8>>2]=c[k+8>>2];c[u+12>>2]=c[k+12>>2];$E(x,u);break}case 3:case 2:{E=f+80|0;J=f+8|0;aF(A,c[J+4>>2]|0,c[J>>2]|0,x);c[E>>2]=c[A>>2];c[E+4>>2]=c[A+4>>2];c[E+8>>2]=c[A+8>>2];c[E+12>>2]=c[A+12>>2];c[E+16>>2]=c[A+16>>2];c[E+20>>2]=c[A+20>>2];c[E+24>>2]=c[A+24>>2];c[E+28>>2]=c[A+28>>2];break}case 5:case 4:{J=f+80|0;E=f+8|0;aF(B,c[E+4>>2]|0,c[E>>2]|0,x);c[J>>2]=c[B>>2];c[J+4>>2]=c[B+4>>2];c[J+8>>2]=c[B+8>>2];c[J+12>>2]=c[B+12>>2];c[J+16>>2]=c[B+16>>2];c[J+20>>2]=c[B+20>>2];c[J+24>>2]=c[B+24>>2];c[J+28>>2]=c[B+28>>2];break}case 6:{J=f+80|0;E=f+8|0;aF(C,c[E+4>>2]|0,c[E>>2]|0,x);c[J>>2]=c[C>>2];c[J+4>>2]=c[C+4>>2];c[J+8>>2]=c[C+8>>2];c[J+12>>2]=c[C+12>>2];c[J+16>>2]=c[C+16>>2];c[J+20>>2]=c[C+20>>2];c[J+24>>2]=c[C+24>>2];c[J+28>>2]=c[C+28>>2];break}case 7:{J=f+112|0;c[J>>2]=uH(56)|0;E=n1(c[f+40>>2]|0)|0;K=c[J>>2]|0;c[K>>2]=E;a[K+48>>0]=a[97003+(c[f+24>>2]|0)>>0]|0;c[y>>2]=e;h[n>>3]=g;c[o>>2]=c[o>>2]&-128|d&127;K=c[p>>2]|0;K=nb[c[K>>2]&63](K,y,1)|0;E=c[J>>2]|0;c[E+4>>2]=K;wL(u,s,E);bF(w,+h[f+8>>3],+h[f+16>>3],c[J>>2]|0);J=f+80|0;c[J>>2]=c[w>>2];c[J+4>>2]=c[w+4>>2];c[J+8>>2]=c[w+8>>2];c[J+12>>2]=c[w+12>>2];c[J+16>>2]=c[w+16>>2];c[J+20>>2]=c[w+20>>2];c[J+24>>2]=c[w+24>>2];c[J+28>>2]=c[w+28>>2];c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];$E(x,u);c[u>>2]=c[q>>2];c[u+4>>2]=c[q+4>>2];c[u+8>>2]=c[q+8>>2];c[u+12>>2]=c[q+12>>2];$E(x,u);if(!(c[r>>2]|0))c[r>>2]=106;break}case 10:{e=c[f+16>>2]|0;g=+h[f+8>>3];break}case 15:{d=c[f+8>>2]|0;break}default:{}}f=f+120|0;i=i+1|0}c[b>>2]=c[x>>2];c[b+4>>2]=c[x+4>>2];c[b+8>>2]=c[x+8>>2];c[b+12>>2]=c[x+12>>2];c[b+16>>2]=c[x+16>>2];c[b+20>>2]=c[x+20>>2];c[b+24>>2]=c[x+24>>2];c[b+28>>2]=c[x+28>>2]}l=D;return}function $E(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+h[b>>3];d=a+16|0;if(c>+h[d>>3])h[d>>3]=c;if(c<+h[a>>3])h[a>>3]=c;c=+h[b+8>>3];b=a+24|0;if(c>+h[b>>3])h[b>>3]=c;b=a+8|0;if(c<+h[b>>3])h[b>>3]=c;return}function aF(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+48|0;k=r+32|0;n=r;f=+h[b>>3];o=n+16|0;h[o>>3]=f;h[n>>3]=f;f=+h[b+8>>3];p=n+24|0;h[p>>3]=f;m=n+8|0;h[m>>3]=f;j=1;while(1){if((j|0)>=(d|0))break;i=b+24|0;f=+h[i>>3];if(!(f<+h[n>>3])){if(f>+h[o>>3]){g=o;q=5}}else{g=n;q=5}if((q|0)==5){q=0;h[g>>3]=f}f=+h[b+32>>3];if(!(f<+h[m>>3])){if(f>+h[p>>3]){b=o;q=8}}else{b=n;q=8}if((q|0)==8){q=0;h[b+8>>3]=f}j=j+1|0;b=i}c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];$E(e,k);c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];$E(e,k);c[a>>2]=c[n>>2];c[a+4>>2]=c[n+4>>2];c[a+8>>2]=c[n+8>>2];c[a+12>>2]=c[n+12>>2];c[a+16>>2]=c[n+16>>2];c[a+20>>2]=c[n+20>>2];c[a+24>>2]=c[n+24>>2];c[a+28>>2]=c[n+28>>2];l=r;return}function bF(b,c,d,e){b=b|0;c=+c;d=+d;e=e|0;var f=0.0,g=0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+16|0;i=n+8|0;j=n;f=+h[e+32>>3];k=+h[e+40>>3];switch(a[e+48>>0]|0){case 108:{h[i>>3]=c;f=f+c;g=j;m=5;break}case 110:{f=f*.5;h[i>>3]=c-f;f=f+c;g=j;m=5;break}case 114:{h[j>>3]=c;f=c-f;g=i;m=5;break}default:{c=0.0;f=0.0}}if((m|0)==5){h[g>>3]=f;c=+h[i>>3];f=+h[j>>3]}d=+h[e+16>>3]+d;h[b>>3]=c;h[b+8>>3]=d-k;h[b+16>>3]=f;h[b+24>>3]=d;l=n;return}function cF(a){a=a|0;if((c[a>>2]|0)==7)mH(c[a+112>>2]|0,1);return}function dF(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0.0;m=l;l=l+16|0;k=m;j=c[b+152>>2]|0;n=+h[b+432>>3];i=+h[b+352>>3]*.013888888888888888;f=i*n;h[b+488>>3]=f;g=+h[b+440>>3];i=i*g;h[b+496>>3]=i;h[b+520>>3]=n*.013888888888888888;e=b+528|0;h[e>>3]=g*.013888888888888888;if(j&4096|c[46369]|0)h[e>>3]=g*-.013888888888888888;e=(c[b+360>>2]|0)==0;n=+((c[b+448>>2]|0)>>>0);g=+((c[b+452>>2]|0)>>>0);h[b+368>>3]=(e?n:g)/f;h[b+376>>3]=(e?g:n)/i;cP(b,NL(d,nx(d,0,98496,0)|0,191979)|0);c[b+160>>2]=0;eF(b,d);if(j&2|0)fF(b,d);e=Sy(d)|0;while(1){if(!e)break;a[(c[e+16>>2]|0)+116>>0]=0;e=Ty(d,e)|0}gF(b,k);while(1){if(!((hF(b)|0)<<24>>24))break;if((iF(b)|0)>1)DO(b);jF(b);while(1){if(!((kF(b)|0)<<24>>24))break;lF(b,d);mF(b)}if((iF(b)|0)>1)EO(b);nF(b,k)}oF(b);l=m;return}function eF(a,b){a=a|0;b=b|0;var d=0;d=NE(a)|0;c[d+4>>2]=0;c[d+8>>2]=b;c[d+12>>2]=0;nG(a,c[(c[b+16>>2]|0)+12>>2]|0,b);zO(a,b);return}function fF(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;WO(b,131718);d=xx(c,137895)|0;if(d|0?a[d>>0]|0:0)WO(b,d);d=xx(c,98420)|0;if(d|0?a[d>>0]|0:0)UO(b,d);zG(b,c);g=Sy(c)|0;while(1){if(!g)break;d=xx(g,137741)|0;if(d|0?a[d>>0]|0:0)UO(b,d);d=xx(g,134647)|0;if(d|0?a[d>>0]|0:0)WO(b,d);d=xx(g,98392)|0;do if(d|0?a[d>>0]|0:0){if(!(A$(d,58)|0)){UO(b,d);break}e=n1(d)|0;d=e;while(1){d=k1(d,104958)|0;if(!d)break;if(!(a[d>>0]|0)){d=0;continue}UO(b,d);d=0}D_(e)}while(0);d=xx(g,98420)|0;if(d|0?a[d>>0]|0:0)UO(b,d);f=Ex(c,g)|0;while(1){if(!f)break;d=xx(f,137741)|0;do if(d|0?a[d>>0]|0:0){if(!(A$(d,58)|0)){UO(b,d);break}e=n1(d)|0;d=e;while(1){d=k1(d,104958)|0;if(!d)break;if(!(a[d>>0]|0)){d=0;continue}UO(b,d);d=0}D_(e)}while(0);d=xx(f,98420)|0;if(d|0?a[d>>0]|0:0)UO(b,d);f=Gx(c,f)|0}g=Ty(c,g)|0}return}function gF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;g=i;h=c[a>>2]|0;d=c[h+312>>2]|0;f=a+156|0;c[f>>2]=d;h=c[h+316>>2]|0;if(!h)if((d|0)>1?(c[a+152>>2]&64|0)==0:0){c[e>>2]=c[a+52>>2];Pw(0,97541,e)|0;c[f>>2]=1;e=1;d=0}else{e=1;d=0}else{d=h+4|0;if((c[h>>2]|0)>1?(c[a+152>>2]&64|0)==0:0){c[g>>2]=c[a+52>>2];Pw(0,97541,g)|0;c[h+8>>2]=(c[f>>2]|0)+1}e=c[d>>2]|0;d=h+8|0}c[a+160>>2]=e;c[b>>2]=d;l=i;return}function hF(a){a=a|0;return (c[a+160>>2]|0)<=(c[a+156>>2]|0)|0}function iF(a){a=a|0;var b=0;b=c[(c[a>>2]|0)+316>>2]|0;return c[((b|0)==0?a+156|0:b)>>2]|0}function jF(a){a=a|0;var b=0,d=0;d=a+172|0;b=c[d+4>>2]|0;a=a+196|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function kF(a){a=a|0;var b=0,d=0;d=c[a+196>>2]|0;if(((d|0)>-1?(d|0)<(c[a+164>>2]|0):0)?(b=c[a+200>>2]|0,(b|0)>-1):0)a=(b|0)<(c[a+168>>2]|0)&1;else a=0;return a|0}function lF(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+176|0;k=p;f=p+48|0;m=p+32|0;n=c[d+16>>2]|0;o=c[d+152>>2]|0;if((c[d+160>>2]|0)<=1?(c[d+196>>2]|0)<=0:0)h=0;else{Tw(m,128,f);g=n+212|0;h=c[g>>2]|0;RE(d,m);Ww(m,h)|0;i=m+4|0;f=c[i>>2]|0;if(f>>>0>=(c[m+8>>2]|0)>>>0){Uw(m,1)|0;f=c[i>>2]|0}a[f>>0]=0;f=c[m>>2]|0;c[i>>2]=f;c[g>>2]=f}qQ(xx(e,97006)|0);qF(d);BO(d);UO(d,134232);WO(d,131718);do if(o&4259840|0){if((c[n+208>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;if(o&655360){i=o&131072;c[n+264>>2]=i>>>16^2;f=uH((i>>>12^32)+32|0)|0;g=d+288|0;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];g=f+16|0;q=d+304|0;c[g>>2]=c[q>>2];c[g+4>>2]=c[q+4>>2];c[g+8>>2]=c[q+8>>2];c[g+12>>2]=c[q+12>>2];if(!i){WG(f);g=4}else g=2}else{f=0;g=0}if(!(o&8192))yO(d,f,f,g)|0;c[n+272>>2]=f;c[n+268>>2]=g}while(0);if(o&32768|0?(j=c[(c[e+16>>2]|0)+12>>2]|0,j|0):0)c[n+192>>2]=c[j>>2];g=(o&4|0)!=0;do if(!g){f=n+208|0;if((c[f>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;q=d+256|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[k+12>>2]=c[q+12>>2];c[k+16>>2]=c[q+16>>2];c[k+20>>2]=c[q+20>>2];c[k+24>>2]=c[q+24>>2];c[k+28>>2]=c[q+28>>2];XE(d,k);PO(d,c[f>>2]|0,c[n+228>>2]|0,c[n+244>>2]|0,c[n+212>>2]|0)}while(0);rF(d,e);f=c[(c[e+16>>2]|0)+12>>2]|0;if(f|0)oH(d,4,f);do if(!g){if((c[n+208>>2]|0)==0?(b[n+260>>1]&1)==0:0)break;QO(d)}while(0);sF(d,e,o);CO(d);if(h|0){Xw(m);c[n+212>>2]=h}l=p;return}function mF(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;d=h+24|0;b=h+16|0;j=h+8|0;f=h;g=a+196|0;i=a+188|0;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];pF(j,b,d);i=c[j+4>>2]|0;e=g;c[e>>2]=c[j>>2];c[e+4>>2]=i;if(!((kF(a)|0)<<24>>24)){e=a+180|0;if(!(c[a+184>>2]|0))c[a+200>>2]=c[a+176>>2];else c[g>>2]=c[a+172>>2];c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];pF(f,b,d);i=c[f+4>>2]|0;j=g;c[j>>2]=c[f>>2];c[j+4>>2]=i}l=h;return}function nF(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;if(!d){d=a+160|0;c[d>>2]=(c[d>>2]|0)+1}else{c[a+160>>2]=c[d>>2];c[b>>2]=d+4}return}function oF(a){a=a|0;AO(a);OE(a);return}function pF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=e;return}function qF(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+48|0;n=t+32|0;f=t+24|0;j=t+8|0;k=t+16|0;m=t;r=a+196|0;q=c[r>>2]|0;r=c[r+4>>2]|0;p=f;c[p>>2]=q;c[p+4>>2]=r;p=a+164|0;i=c[p>>2]|0;p=c[p+4>>2]|0;s=j;c[s>>2]=i;c[s+4>>2]=p;s=a+360|0;if(!(c[s>>2]|0)){k=q;j=r}else{c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];yG(k,n);r=k;k=c[r>>2]|0;r=c[r+4>>2]|0;p=f;c[p>>2]=k;c[p+4>>2]=r;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];yG(m,n);p=m;i=c[p>>2]|0;p=c[p+4>>2]|0;c[j>>2]=i;c[j+4>>2]=p;j=r}d=+h[a+320>>3];g=d*+(k|0)-+h[a+240>>3];h[a+288>>3]=g;e=+h[a+328>>3];o=e*+(j|0)-+h[a+248>>3];h[a+296>>3]=o;h[a+304>>3]=d+g;h[a+312>>3]=e+o;f=a+472|0;if(!(c[(c[a+12>>2]|0)+28>>2]|0)){r=a+456|0;c[f>>2]=c[r>>2];c[f+4>>2]=c[r+4>>2];c[f+8>>2]=c[r+8>>2];c[f+12>>2]=c[r+12>>2]}else{q=a+456|0;c[f>>2]=c[((c[f>>2]|0)<(c[q>>2]|0)?f:q)>>2];r=a+476|0;c[r>>2]=c[((c[r>>2]|0)<(c[a+460>>2]|0)?f:q)+4>>2];r=a+480|0;c[r>>2]=c[((c[r>>2]|0)>(c[a+464>>2]|0)?f:q)+8>>2];r=a+484|0;c[r>>2]=c[((c[r>>2]|0)>(c[a+468>>2]|0)?f:q)+12>>2]}m=c[a+152>>2]|0;b=+h[a+336>>3];if(!(m&128)){b=(+(k|0)-+(i|0)*.5)*d+b;h[a+256>>3]=b;g=(+(j|0)-+(p|0)*.5)*e+ +h[a+344>>3];o=g;d=d+b;g=g+e}else{d=+h[a+368>>3]*.5;e=b-d;h[a+256>>3]=e;g=+h[a+344>>3];u=+h[a+376>>3]*.5;o=g-u;d=d+b;g=u+g;b=e}h[a+264>>3]=o;h[a+272>>3]=d;h[a+280>>3]=g;if(!(c[s>>2]|0)){e=+h[a+352>>3];h[a+504>>3]=+h[a+384>>3]/e-b;if(!(m&4096|c[46369])){d=+h[a+392>>3]/e;b=o}else{d=-g;b=+h[a+392>>3]/e}h[a+512>>3]=d-b}else{f=a+384|0;e=+h[a+352>>3];h[a+512>>3]=-g-+h[a+392>>3]/e;if(!(m&4096|c[46369]))d=+h[f>>3]/e;else{d=-d;b=+h[f>>3]/e}h[a+504>>3]=d-b}l=t;return}function rF(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;q=s;o=s+40|0;p=s+36|0;r=s+32|0;e=xx(d,137895)|0;if(!e){j=1;e=134116}else{i=(a[e>>0]|0)==0;j=i&1;e=i?134116:e}h=c[b+152>>2]|0;i=(a[e>>0]|0)==116;if(!(h&256))if(i){m=(b$(e,134297)|0)==0;k=m?134116:e;m=m?1:j;n=8}else{k=e;m=j;n=8}else if(!(i?!(b$(e,134297)|0):0)){k=e;m=j;n=8}if((n|0)==8?!((m|0)!=0&(h&33554432|0)!=0):0)if(!((uG(k,o,p)|0)<<24>>24)){WO(b,k);UO(b,134297);r=b+256|0;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];c[q+16>>2]=c[r+16>>2];c[q+20>>2]=c[r+20>>2];c[q+24>>2]=c[r+24>>2];c[q+28>>2]=c[r+28>>2];$O(b,q,1)}else{c[r>>2]=0;i=c[o>>2]|0;WO(b,i);UO(b,134297);tG(d,r)|0;e=c[o+4>>2]|0;h=KL(d,c[46373]|0,0,0)|0;f=+g[p>>2];if(!e)XO(b,134232,h,f);else XO(b,e,h,f);r=(c[r>>2]|0)>>>1&1|2;p=b+256|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];c[q+16>>2]=c[p+16>>2];c[q+20>>2]=c[p+20>>2];c[q+24>>2]=c[p+24>>2];c[q+28>>2]=c[p+28>>2];$O(b,q,r);D_(i)}e=c[(c[(c[d+16>>2]|0)+8>>2]|0)+88>>2]|0;if(e|0)wG(b,e);l=s;return}function sF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[a>>2]|0)+28|0;c[g>>2]=(c[g>>2]|0)+1;g=(d&4|0)!=0;if(!g)tF(a,b,d);a:do if(!(d&1)){if(d&16|0){JO(a);f=Sy(b)|0;while(1){if(!f)break;e=Ex(b,f)|0;while(1){if(!e)break;vF(a,e);e=Gx(b,e)|0}f=Ty(b,f)|0}KO(a);HO(a);e=Sy(b)|0;while(1){if(!e)break;uF(a,e);e=Ty(b,e)|0}IO(a);break}if(!(d&8)){f=Sy(b)|0;while(1){if(!f)break a;uF(a,f);e=Ex(b,f)|0;while(1){if(!e)break;uF(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0);vF(a,e);e=Gx(b,e)|0}f=Ty(b,f)|0}}HO(a);e=Sy(b)|0;while(1){if(!e)break;if((wF(b,e)|0)<<24>>24)uF(a,e);e=Ty(b,e)|0}IO(a);JO(a);f=Sy(b)|0;while(1){if(!f)break;e=Ex(b,f)|0;while(1){if(!e)break;if((xF(b,e)|0)<<24>>24)vF(a,e);e=Gx(b,e)|0}f=Ty(b,f)|0}KO(a)}else{HO(a);e=Sy(b)|0;while(1){if(!e)break;uF(a,e);e=Ty(b,e)|0}IO(a);JO(a);f=Sy(b)|0;while(1){if(!f)break;e=Ex(b,f)|0;while(1){if(!e)break;vF(a,e);e=Gx(b,e)|0}f=Ty(b,f)|0}KO(a)}while(0);if(g)tF(a,b,d);return}function tF(e,f,i){e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;P=l;l=l+128|0;w=P+72|0;N=P+64|0;H=P+112|0;I=P;J=P+104|0;K=f+16|0;L=(i&4|0)!=0;M=e+16|0;x=I+32|0;y=I+16|0;A=I+8|0;B=I+24|0;C=I+48|0;D=I+40|0;E=I+56|0;F=(i&8|0)==0;G=J+4|0;v=1;while(1){j=c[K>>2]|0;if((v|0)>(c[j+180>>2]|0))break;u=c[(c[j+184>>2]|0)+(v<<2)>>2]|0;if((rG(e,u)|0)<<24>>24){if(L)tF(e,u,i);sG(e,u);r=c[M>>2]|0;s=r+208|0;if(!(c[s>>2]|0))t=(b[r+260>>1]&1)!=0;else t=1;qQ(xx(u,97006)|0);if(!(L|t^1)){q=(c[u+16>>2]|0)+16|0;c[w>>2]=c[q>>2];c[w+4>>2]=c[q+4>>2];c[w+8>>2]=c[q+8>>2];c[w+12>>2]=c[q+12>>2];c[w+16>>2]=c[q+16>>2];c[w+20>>2]=c[q+20>>2];c[w+24>>2]=c[q+24>>2];c[w+28>>2]=c[q+28>>2];XE(e,w);PO(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0)}c[H>>2]=0;j=tG(u,H)|0;if(!j)p=0;else{YO(e,j);p=c[H>>2]&1}q=u+16|0;j=d[(c[q>>2]|0)+112>>0]|0;do if(!(j&1)){if(j&2|0){j=OL(u,0,103230)|0;k=OL(u,0,103238)|0;O=29;break}if(j&8|0){j=OL(u,0,103246)|0;k=OL(u,0,103254)|0;O=29;break}if(j&4|0){j=OL(u,0,103262)|0;k=OL(u,0,103270)|0;O=29;break}j=xx(u,137741)|0;if(!j)k=0;else k=(a[j>>0]|0)==0?0:j;j=xx(u,134647)|0;if(!j)j=k;else j=(a[j>>0]|0)==0?k:j;m=xx(u,98392)|0;if(m)k=(a[m>>0]|0)==0?k:m;if(!((p|0)!=0&(k|0)!=0)){m=xx(u,137895)|0;if(m|0?a[m>>0]|0:0){k=m;O=29;break}j=(j|0)==0?134232:j;n=(k|0)==0?131718:k;c[J>>2]=0;if(!p)k=0;else O=31}else O=29}else{j=OL(u,0,103214)|0;k=OL(u,0,103222)|0;O=29}while(0);if((O|0)==29){c[J>>2]=0;j=(j|0)==0?134232:j;n=(k|0)==0?131718:k;O=31}if((O|0)==31){O=0;if(!((uG(n,J,w)|0)<<24>>24)){WO(e,n);k=1}else{WO(e,c[J>>2]|0);k=c[G>>2]|0;m=KL(u,c[46373]|0,0,0)|0;o=+g[w>>2];if(!k)XO(e,134232,m,o);else XO(e,k,m,o);k=(c[H>>2]|0)>>>1&1|2}}m=c[46372]|0;if((m|0?(z=yx(u,m)|0,z|0):0)?a[z>>0]|0:0)fP(e,+LL(u,c[46372]|0,1.0,0.0));p=c[H>>2]|0;do if(p&4){m=KL(u,c[46371]|0,1,0)|0;if(m|k|0){n=c[q>>2]|0;Q=n+16|0;c[I>>2]=c[Q>>2];c[I+4>>2]=c[Q+4>>2];c[I+8>>2]=c[Q+8>>2];c[I+12>>2]=c[Q+12>>2];n=n+32|0;c[x>>2]=c[n>>2];c[x+4>>2]=c[n+4>>2];c[x+8>>2]=c[n+8>>2];c[x+12>>2]=c[n+12>>2];h[y>>3]=+h[x>>3];h[B>>3]=+h[A>>3];h[C>>3]=+h[I>>3];h[E>>3]=+h[D>>3];if(!m)UO(e,134297);else UO(e,j);EJ(e,I,4,p,k)}}else{if(!(p&64)){if(KL(u,c[46371]|0,1,0)|0){UO(e,j);Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];$O(e,w,k);break}if(!k)break;UO(e,134297);Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];$O(e,w,k);break}Q=c[q>>2]|0;p=Q+16|0;c[I>>2]=c[p>>2];c[I+4>>2]=c[p+4>>2];c[I+8>>2]=c[p+8>>2];c[I+12>>2]=c[p+12>>2];Q=Q+32|0;c[x>>2]=c[Q>>2];c[x+4>>2]=c[Q+4>>2];c[x+8>>2]=c[Q+8>>2];c[x+12>>2]=c[Q+12>>2];h[y>>3]=+h[x>>3];h[B>>3]=+h[A>>3];h[C>>3]=+h[I>>3];h[E>>3]=+h[D>>3];if(!(KL(u,c[46371]|0,1,0)|0))UO(e,134297);else UO(e,j);if((WE(e,I,n,0)|0)>1){c[N>>2]=ry(u)|0;Pw(3,97374,N)|0}Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];$O(e,w,0)}while(0);D_(c[J>>2]|0);j=c[(c[q>>2]|0)+12>>2]|0;if(j|0)oH(e,5,j);if(t){if(L){Q=(c[q>>2]|0)+16|0;c[w>>2]=c[Q>>2];c[w+4>>2]=c[Q+4>>2];c[w+8>>2]=c[Q+8>>2];c[w+12>>2]=c[Q+12>>2];c[w+16>>2]=c[Q+16>>2];c[w+20>>2]=c[Q+20>>2];c[w+24>>2]=c[Q+24>>2];c[w+28>>2]=c[Q+28>>2];XE(e,w);PO(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0)}QO(e)}a:do if(!F){k=Sy(u)|0;while(1){if(!k)break a;uF(e,k);j=Ex(u,k)|0;while(1){if(!j)break;vF(e,j);j=Gx(u,j)|0}k=Ty(u,k)|0}}while(0);vG(e,f);if(!L)tF(e,u,i)}v=v+1|0}l=P;return}function uF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+32|0;e=j;h=c[b>>2]|0;i=d+16|0;a:do if(((c[(c[i>>2]|0)+8>>2]|0?(jG(b,ez(d)|0,d)|0)<<24>>24:0)?(k=b+256|0,c[e>>2]=c[k>>2],c[e+4>>2]=c[k+4>>2],c[e+8>>2]=c[k+8>>2],c[e+12>>2]=c[k+12>>2],c[e+16>>2]=c[k+16>>2],c[e+20>>2]=c[k+20>>2],c[e+24>>2]=c[k+24>>2],c[e+28>>2]=c[k+28>>2],(kG(d,e)|0)<<24>>24):0)?(f=(c[i>>2]|0)+116|0,g=c[h+28>>2]|0,(g|0)!=(a[f>>0]|0)):0){a[f>>0]=g;cP(b,ry(d)|0);e=NL(d,c[46399]|0,191979)|0;if(a[e>>0]|0)cP(b,e);e=NL(d,c[46387]|0,191979)|0;b:do if(a[e>>0]|0){AF(e)|0;e=185144;while(1){f=e;e=e+4|0;f=c[f>>2]|0;if(!f)break b;if((a[f>>0]|0)!=105)continue;if(!(b$(f,131253)|0))break a}}while(0);lG(b,d);ub[c[(c[(c[(c[i>>2]|0)+8>>2]|0)+4>>2]|0)+20>>2]&63](b,d);e=c[(c[i>>2]|0)+108>>2]|0;if(e|0?a[e+81>>0]|0:0)oH(b,10,e);mG(b)}while(0);l=j;return}function vF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;g=h;e=b+256|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[g+16>>2]=c[e+16>>2];c[g+20>>2]=c[e+20>>2];c[g+24>>2]=c[e+24>>2];c[g+28>>2]=c[e+28>>2];a:do if((yF(d,g)|0)<<24>>24?(f=d+-48|0,(zF(b,d)|0)<<24>>24):0){i=d+48|0;e=W_(ry(c[((c[d>>2]&3|0)==3?d:i)+40>>2]|0)|0)|0;e=C_(e+3+(W_(ry(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0)|0)|0;b0(e,ry(c[((c[d>>2]&3|0)==3?d:i)+40>>2]|0)|0)|0;i=(ey(ez(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0)==0;g=e+(W_(e)|0)|0;if(i){a[g>>0]=a[138665]|0;a[g+1>>0]=a[138666]|0;a[g+2>>0]=a[138667]|0}else{a[g>>0]=a[134656]|0;a[g+1>>0]=a[134657]|0;a[g+2>>0]=a[134658]|0}p1(e,ry(c[((c[d>>2]&3|0)==2?d:f)+40>>2]|0)|0)|0;cP(b,e);D_(e);e=NL(d,c[46421]|0,191979)|0;if(a[e>>0]|0)cP(b,e);e=NL(d,c[46415]|0,191979)|0;b:do if(!(a[e>>0]|0))e=0;else{AF(e)|0;e=185144;while(1){f=e;e=e+4|0;f=c[f>>2]|0;if(!f){e=185144;break b}if((a[f>>0]|0)!=105)continue;if(!(b$(f,131253)|0))break a}}while(0);BF(b,d,e);CF(b,d,e);DF(b)}while(0);l=h;return}function wF(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0)){a=1;break}if(!(oz(c[(c[e+184>>2]|0)+(a<<2)>>2]|0,b)|0))a=a+1|0;else{a=0;break}}return a|0}function xF(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0)){a=1;break}if(!(oz(c[(c[e+184>>2]|0)+(a<<2)>>2]|0,b)|0))a=a+1|0;else{a=0;break}}return a|0}function yF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+64|0;i=j+32|0;f=j;g=b+16|0;b=c[g>>2]|0;e=c[b+8>>2]|0;if((e|0)!=0?(e=e+8|0,c[f>>2]=c[e>>2],c[f+4>>2]=c[e+4>>2],c[f+8>>2]=c[e+8>>2],c[f+12>>2]=c[e+12>>2],c[f+16>>2]=c[e+16>>2],c[f+20>>2]=c[e+20>>2],c[f+24>>2]=c[e+24>>2],c[f+28>>2]=c[e+28>>2],c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[i+16>>2]=c[d+16>>2],c[i+20>>2]=c[d+20>>2],c[i+24>>2]=c[d+24>>2],c[i+28>>2]=c[d+28>>2],(iG(f,i)|0)!=0):0)b=1;else h=3;do if((h|0)==3){e=c[b+96>>2]|0;if(e){c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[i+16>>2]=c[d+16>>2];c[i+20>>2]=c[d+20>>2];c[i+24>>2]=c[d+24>>2];c[i+28>>2]=c[d+28>>2];if((VM(e,i)|0)<<24>>24){b=1;break}b=c[g>>2]|0}b=c[b+108>>2]|0;if((b|0?a[b+81>>0]|0:0)?(c[i>>2]=c[d>>2],c[i+4>>2]=c[d+4>>2],c[i+8>>2]=c[d+8>>2],c[i+12>>2]=c[d+12>>2],c[i+16>>2]=c[d+16>>2],c[i+20>>2]=c[d+20>>2],c[i+24>>2]=c[d+24>>2],c[i+28>>2]=c[d+28>>2],(VM(b,i)|0)<<24>>24):0){b=1;break}b=0}while(0);l=j;return b|0}function zF(b,d){b=b|0;d=d|0;var e=0,f=0;a:do if((c[b+156>>2]|0)>=2?(e=NL(d,c[46420]|0,191979)|0,(eG(b,e)|0)<<24>>24==0):0)if(!(a[e>>0]|0)){e=0;while(1){if((e|0)>=2){e=0;break a}f=(e|0)==1;f=NL(c[((c[d>>2]&3|0)==((f?2:3)|0)?d:d+((f?-1:1)*48|0)|0)+40>>2]|0,c[46397]|0,191979)|0;if(!(a[f>>0]|0)){e=1;break a}if(!((eG(b,f)|0)<<24>>24))e=e+1|0;else{e=1;break}}}else e=0;else e=1;while(0);return e|0}function AF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+192|0;o=p+24|0;n=p+16|0;m=p+8|0;k=p;g=p+48|0;j=p+32|0;if(a[97256]|0){Tw(185408,128,191746);a[97256]=0}Tw(j,128,p+56|0);c[g>>2]=b;h=j+4|0;i=j+8|0;d=0;e=0;a:while(1){f=d;b:while(1)switch(cG(g,j)|0){case 0:{d=21;break a}case 40:if(!(f<<24>>24)){f=1;continue b}else{d=7;break a}case 41:if(!(f<<24>>24)){d=9;break a}else{f=0;continue b}default:break b}if(!(f<<24>>24)){if((e|0)==63){d=12;break}d=c[46353]|0;if(d>>>0>=(c[46354]|0)>>>0){Uw(185408,1)|0;d=c[46353]|0}c[46353]=d+1;a[d>>0]=0;c[185144+(e<<2)>>2]=c[46353];e=e+1|0}d=c[h>>2]|0;if(d>>>0>=(c[i>>2]|0)>>>0){Uw(j,1)|0;d=c[h>>2]|0}a[d>>0]=0;d=c[j>>2]|0;c[h>>2]=d;Ww(185408,d)|0;d=c[46353]|0;if(d>>>0>=(c[46354]|0)>>>0){Uw(185408,1)|0;d=c[46353]|0}c[46353]=d+1;a[d>>0]=0;d=f}do if((d|0)==7){c[k>>2]=b;Pw(1,97257,k)|0;c[46286]=0;Xw(j)}else if((d|0)==9){c[m>>2]=b;Pw(1,97291,m)|0;c[46286]=0;Xw(j)}else if((d|0)==12){c[n>>2]=b;Pw(0,97319,n)|0;c[46349]=0;Xw(j)}else if((d|0)==21){if(f<<24>>24){c[o>>2]=b;Pw(1,97342,o)|0;c[46286]=0;Xw(j);break}c[185144+(e<<2)>>2]=0;Xw(j);d=c[46353]|0;if(d>>>0>=(c[46354]|0)>>>0){Uw(185408,1)|0;d=c[46353]|0}a[d>>0]=0;c[46353]=c[46352]}while(0);l=p;return 185144}function BF(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+160|0;y=A+24|0;w=A+20|0;v=A+16|0;o=A;p=A+32|0;x=c[d+152>>2]|0;c[y>>2]=0;c[w>>2]=0;c[v>>2]=0;z=NE(d)|0;c[z+4>>2]=3;c[z+8>>2]=f;c[z+12>>2]=9;t=f+16|0;n=c[(c[t>>2]|0)+96>>2]|0;if((n|0?(a[n+82>>0]|0)==0:0)?(RL(xx(f,97079)|0,0)|0)<<24>>24:0){n=z+260|0;b[n>>1]=b[n>>1]|512}if(g|0?c[(c[t>>2]|0)+8>>2]|0:0)YO(d,g);g=c[46436]|0;if((g|0?(i=yx(f,g)|0,i|0):0)?a[i>>0]|0:0)fP(d,+LL(f,c[46436]|0,1.0,0.0));do if(x&16777216|0){g=f+48|0;if((e[(c[(ez(c[((c[f>>2]&3|0)==3?f:g)+40>>2]|0)|0)+16>>2]|0)+178>>1]|0)>2){m=+h[(c[(c[(c[((c[f>>2]&3|0)==3?f:g)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;h[z+176>>3]=+(~~(m+(m>=0.0?.5:-.5))|0);m=+h[(c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0)+16>>3]*72.0;h[z+184>>3]=+(~~(m+(m>=0.0?.5:-.5))|0);break}else{n=z+176|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;break}}while(0);if(x&32768|0){n=c[t>>2]|0;g=c[n+96>>2]|0;if(!g)g=c[z+192>>2]|0;else{g=c[g>>2]|0;c[z+192>>2]=g}i=z+196|0;c[i>>2]=g;k=z+204|0;c[k>>2]=g;j=z+200|0;c[j>>2]=g;g=c[n+108>>2]|0;if(g|0)c[i>>2]=c[g>>2];g=c[n+104>>2]|0;if(g|0)c[j>>2]=c[g>>2];g=c[n+100>>2]|0;if(g|0)c[k>>2]=c[g>>2]}if(!(x&65536))j=0;else{Tw(o,128,p);c[z+212>>2]=pH(QE(d,f,o)|0,f)|0;Xw(o);g=xx(f,137973)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=31;else{g=xx(f,108395)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=31;else i=0}if((q|0)==31)i=pH(g,f)|0;g=xx(f,97092)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=36;else q=34;do if((q|0)==34){g=xx(f,97101)|0;if(g|0?a[g>>0]|0:0){q=36;break}if(i|0){g=n1(i)|0;q=39}}while(0);if((q|0)==36){g=pH(g,f)|0;q=39}if((q|0)==39)c[z+208>>2]=g;g=xx(f,97109)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=44;else q=42;do if((q|0)==42){g=xx(f,97119)|0;if(g|0?a[g>>0]|0:0){q=44;break}if(i|0){g=n1(i)|0;q=47}}while(0);if((q|0)==44){g=pH(g,f)|0;q=47}if((q|0)==47)c[z+216>>2]=g;g=xx(f,97128)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=52;else q=50;do if((q|0)==50){g=xx(f,97137)|0;if(g|0?a[g>>0]|0:0){q=52;break}if(i|0)c[z+220>>2]=n1(i)|0}while(0);if((q|0)==52){c[z+220>>2]=pH(g,f)|0;q=z+260|0;b[q>>1]=b[q>>1]|128}g=xx(f,97145)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=59;else q=57;do if((q|0)==57){g=xx(f,97154)|0;if(g|0?a[g>>0]|0:0){q=59;break}if(i|0)c[z+224>>2]=n1(i)|0}while(0);if((q|0)==59){c[z+224>>2]=pH(g,f)|0;q=z+260|0;b[q>>1]=b[q>>1]|256}j=i}do if(x&8388608){g=xx(f,138006)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)i=pH(g,f)|0;else i=0;g=xx(f,97162)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){q=z+260|0;b[q>>1]=b[q>>1]|64;g=pH(g,f)|0;q=72}else q=70;if((q|0)==70?i|0:0){g=n1(i)|0;q=72}if((q|0)==72)c[z+244>>2]=g;g=xx(f,97173)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){g=pH(g,f)|0;q=78}else q=76;if((q|0)==76?i|0:0){g=n1(i)|0;q=78}if((q|0)==78)c[z+248>>2]=g;g=xx(f,97185)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){c[z+252>>2]=pH(g,f)|0;p=z+260|0;b[p>>1]=b[p>>1]|16}else q=82;if((q|0)==82?i|0:0)c[z+252>>2]=n1(i)|0;g=xx(f,97196)|0;if(g|0?a[g>>0]|0:0){q=z+260|0;b[q>>1]=b[q>>1]|32;c[z+256>>2]=pH(g,f)|0;break}if(i)c[z+256>>2]=n1(i)|0;else i=0}else i=0;while(0);do if(x&4194304|0){g=xx(f,138019)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0)q=94;else q=92;do if((q|0)==92){g=xx(f,97207)|0;if(g|0?a[g>>0]|0:0){q=94;break}g=c[z+192>>2]|0;if(g|0)c[z+228>>2]=n1(g)|0}while(0);if((q|0)==94){p=WF(g,f)|0;c[z+228>>2]=pH(p,f)|0;D_(p);p=z+260|0;b[p>>1]=b[p>>1]|1}g=xx(f,97219)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){p=WF(g,f)|0;c[z+232>>2]=pH(p,f)|0;D_(p);p=z+260|0;b[p>>1]=b[p>>1]|8}else q=100;if((q|0)==100?(r=c[z+192>>2]|0,r|0):0)c[z+232>>2]=n1(r)|0;g=xx(f,97232)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){r=WF(g,f)|0;c[z+236>>2]=pH(r,f)|0;D_(r);r=z+260|0;b[r>>1]=b[r>>1]|2}else q=105;if((q|0)==105?(s=c[z+200>>2]|0,s|0):0)c[z+236>>2]=n1(s)|0;g=xx(f,97244)|0;if(g|0?a[g>>0]|0:0){s=WF(g,f)|0;c[z+240>>2]=pH(s,f)|0;D_(s);s=z+260|0;b[s>>1]=b[s>>1]|4;break}g=c[z+204>>2]|0;if(g|0)c[z+240>>2]=n1(g)|0}while(0);D_(j);D_(i);do if(x&4259840|0?(u=c[(c[t>>2]|0)+8>>2]|0,u|0):0){if(!(c[z+208>>2]|0)){if((x&524288|0)==0|(c[z+228>>2]|0)==0)break}else if(!(x&524288))break;m=+h[(c[d+16>>2]|0)+152>>3]*.5;m=m>2.0?m:2.0;i=c[u+4>>2]|0;g=0;while(1){if((g|0)>=(i|0))break;XF(y,w,v,(c[u>>2]|0)+(g*48|0)|0,m);g=g+1|0}j=c[v>>2]|0;c[z+276>>2]=j;k=c[w>>2]|0;c[z+280>>2]=k;if(!(x&8192)){g=0;i=0;while(1){if((i|0)>=(j|0))break;g=(c[k+(i<<2)>>2]|0)+g|0;i=i+1|0}y=c[y>>2]|0;yO(d,y,y,g)|0;g=y}else g=c[y>>2]|0;c[z+284>>2]=g;c[z+264>>2]=2;c[z+272>>2]=g;c[z+268>>2]=c[k>>2]}while(0);NO(d,f);g=c[z+208>>2]|0;if(!((g|0)==0?!(b[z+260>>1]&1):0))PO(d,g,c[z+228>>2]|0,c[z+244>>2]|0,c[z+212>>2]|0);l=A;return}function CF(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0;P=l;l=l+240|0;L=P+224|0;K=P+208|0;x=P+128|0;w=P+112|0;O=P+64|0;C=P+48|0;D=P+32|0;E=P+16|0;F=P;G=P+192|0;H=P+176|0;y=P+160|0;B=P+144|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;M=+h[(c[b+16>>2]|0)+152>>3];qQ(xx(e,97006)|0);J=e+16|0;a:do if(c[(c[J>>2]|0)+8>>2]|0){N=+LL(e,c[46418]|0,1.0,0.0);k=NL(e,c[46406]|0,191979)|0;v=(f|0)!=0;b:do if(v){g=f;while(1){i=g;g=g+4|0;i=c[i>>2]|0;if(!i){o=0;break b}if((a[i>>0]|0)!=116)continue;if(!(b$(i,108091)|0)){o=1;break}}}else o=0;while(0);j=k;q=0;i=0;c:while(1){switch(a[j>>0]|0){case 0:break c;case 58:{g=q+1|0;break}case 59:{g=q;i=i+1|0;break}default:g=q}j=j+1|0;q=g}n=(q|0)!=0;if((i|0)!=0&n)if(!(KF(b,e,f,k,q+1|0,N,M)|0))break;else m=134232;else m=k;g=d[(c[J>>2]|0)+115>>0]|0;if(!(g&1))if(!(g&2))if(!(g&8))if(!(g&4)){i=m;j=OL(e,c[46407]|0,m)|0}else{j=103270;g=103262;k=185632;i=185632;p=18}else{j=103254;g=103246;k=185632;i=185632;p=18}else{j=103238;g=103230;k=185632;i=185632;p=18}else{j=103222;g=103214;k=185632;i=185632;p=18}if((p|0)==18){i=c[i>>2]|0;i=OL(e,i,LF(m,g)|0)|0;g=OL(e,c[k>>2]|0,j)|0;if((i|0)==(m|0)){i=m;j=g}else{UO(b,i);j=g}}if((j|0)!=(m|0))WO(b,j);if(o<<24>>24){i=(a[i>>0]|0)==0?134232:i;g=(a[j>>0]|0)==0?134232:j;UO(b,134297);WO(b,i);u=O;r=c[c[(c[J>>2]|0)+8>>2]>>2]|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));J=kL(O,MF(e)|0,M,0,0)|0;_O(b,c[J+8>>2]|0,c[J>>2]|0,1);NF(J);UO(b,i);if((g|0)!=(i|0))WO(b,g);g=c[O+8>>2]|0;if(g|0){I=O+16|0;J=c[O>>2]|0;c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];c[L+8>>2]=c[J+8>>2];c[L+12>>2]=c[J+12>>2];KE(b,2,K,L,N,M,g)}g=c[O+12>>2]|0;if(!g)break;J=O+32|0;O=(c[O>>2]|0)+((c[O+4>>2]|0)+-1<<4)|0;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[L>>2]=c[O>>2];c[L+4>>2]=c[O+4>>2];c[L+8>>2]=c[O+8>>2];c[L+12>>2]=c[O+12>>2];KE(b,3,K,L,N,M,g);break}g=c[J>>2]|0;if(!n){do if(!(a[g+115>>0]&3)){if(a[i>>0]|0){UO(b,i);WO(b,j);break}UO(b,134232);if(!(a[j>>0]|0)){WO(b,134232);break}else{WO(b,j);break}}while(0);k=b+152|0;m=O+4|0;n=O+8|0;o=O+12|0;p=O+32|0;q=O+16|0;j=0;while(1){g=c[(c[J>>2]|0)+8>>2]|0;if((j|0)>=(c[g+4>>2]|0))break a;u=O;r=(c[g>>2]|0)+(j*48|0)|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));g=c[O>>2]|0;i=c[m>>2]|0;do if(!(c[k>>2]&16384)){aP(b,g,i,0,0,0);g=c[n>>2]|0;if(g|0){I=c[O>>2]|0;c[K>>2]=c[q>>2];c[K+4>>2]=c[q+4>>2];c[K+8>>2]=c[q+8>>2];c[K+12>>2]=c[q+12>>2];c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];c[L+8>>2]=c[I+8>>2];c[L+12>>2]=c[I+12>>2];KE(b,2,K,L,N,M,g)}g=c[o>>2]|0;if(g|0){I=(c[O>>2]|0)+((c[m>>2]|0)+-1<<4)|0;c[K>>2]=c[p>>2];c[K+4>>2]=c[p+4>>2];c[K+8>>2]=c[p+8>>2];c[K+12>>2]=c[p+12>>2];c[L>>2]=c[I>>2];c[L+4>>2]=c[I+4>>2];c[L+8>>2]=c[I+8>>2];c[L+12>>2]=c[I+12>>2];KE(b,3,K,L,N,M,g)}if((c[(c[(c[J>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(c[n>>2]|0)){if(!(v&(c[o>>2]|0)!=0))break}else if(!v)break;YO(b,f)}}else aP(b,g,i,c[n>>2]|0,c[o>>2]|0,0);while(0);j=j+1|0}}I=c[(c[g+8>>2]|0)+4>>2]|0;A=I*48|0;z=C_(A)|0;A=C_(A)|0;t=+(q+2|0)*.5;v=O+4|0;p=C+8|0;q=D+8|0;e=E+8|0;f=F+8|0;o=0;while(1){if((o|0)>=(I|0))break;u=O;r=(c[c[(c[J>>2]|0)+8>>2]>>2]|0)+(o*48|0)|0;s=u+48|0;do{c[u>>2]=c[r>>2];u=u+4|0;r=r+4|0}while((u|0)<(s|0));g=c[v>>2]|0;c[z+(o*48|0)+4>>2]=g;c[A+(o*48|0)+4>>2]=g;n=g<<4;m=C_(n)|0;c[z+(o*48|0)>>2]=m;n=C_(n)|0;c[A+(o*48|0)>>2]=n;k=c[O>>2]|0;c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2];k=0;while(1){if((k|0)>=(g+-1|0))break;c[C>>2]=c[F>>2];c[C+4>>2]=c[F+4>>2];c[C+8>>2]=c[F+8>>2];c[C+12>>2]=c[F+12>>2];g=k+1|0;j=(c[O>>2]|0)+(g<<4)|0;c[D>>2]=c[j>>2];c[D+4>>2]=c[j+4>>2];c[D+8>>2]=c[j+8>>2];c[D+12>>2]=c[j+12>>2];j=m+(k<<4)|0;if(!k){c[K>>2]=c[C>>2];c[K+4>>2]=c[C+4>>2];c[K+8>>2]=c[C+8>>2];c[K+12>>2]=c[C+12>>2];c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];c[L+8>>2]=c[D+8>>2];c[L+12>>2]=c[D+12>>2];OF(G,K,L);c[j>>2]=c[G>>2];c[j+4>>2]=c[G+4>>2];c[j+8>>2]=c[G+8>>2];c[j+12>>2]=c[G+12>>2]}else{c[K>>2]=c[E>>2];c[K+4>>2]=c[E+4>>2];c[K+8>>2]=c[E+8>>2];c[K+12>>2]=c[E+12>>2];c[L>>2]=c[D>>2];c[L+4>>2]=c[D+4>>2];c[L+8>>2]=c[D+8>>2];c[L+12>>2]=c[D+12>>2];OF(H,K,L);c[j>>2]=c[H>>2];c[j+4>>2]=c[H+4>>2];c[j+8>>2]=c[H+8>>2];c[j+12>>2]=c[H+12>>2]}R=c[O>>2]|0;s=k+2|0;S=R+(s<<4)|0;c[E>>2]=c[S>>2];c[E+4>>2]=c[S+4>>2];c[E+8>>2]=c[S+8>>2];c[E+12>>2]=c[S+12>>2];u=k+3|0;R=R+(u<<4)|0;c[F>>2]=c[R>>2];c[F+4>>2]=c[R+4>>2];c[F+8>>2]=c[R+8>>2];c[F+12>>2]=c[R+12>>2];Q=m+(g<<4)|0;r=m+(s<<4)|0;c[w>>2]=c[C>>2];c[w+4>>2]=c[C+4>>2];c[w+8>>2]=c[C+8>>2];c[w+12>>2]=c[C+12>>2];c[x>>2]=c[D>>2];c[x+4>>2]=c[D+4>>2];c[x+8>>2]=c[D+8>>2];c[x+12>>2]=c[D+12>>2];c[K>>2]=c[S>>2];c[K+4>>2]=c[S+4>>2];c[K+8>>2]=c[S+8>>2];c[K+12>>2]=c[S+12>>2];c[L>>2]=c[R>>2];c[L+4>>2]=c[R+4>>2];c[L+8>>2]=c[R+8>>2];c[L+12>>2]=c[R+12>>2];PF(y,w,x,K,L);c[r>>2]=c[y>>2];c[r+4>>2]=c[y+4>>2];c[r+8>>2]=c[y+8>>2];c[r+12>>2]=c[y+12>>2];c[Q>>2]=c[y>>2];c[Q+4>>2]=c[y+4>>2];c[Q+8>>2]=c[y+8>>2];c[Q+12>>2]=c[y+12>>2];h[n+(k<<4)>>3]=+h[C>>3]-+h[j>>3]*t;h[n+(k<<4)+8>>3]=+h[p>>3]-+h[m+(k<<4)+8>>3]*t;h[n+(g<<4)>>3]=+h[D>>3]-+h[Q>>3]*t;h[n+(g<<4)+8>>3]=+h[q>>3]-+h[m+(g<<4)+8>>3]*t;h[n+(s<<4)>>3]=+h[E>>3]-+h[r>>3]*t;h[n+(s<<4)+8>>3]=+h[e>>3]-+h[m+(s<<4)+8>>3]*t;k=u;g=c[v>>2]|0}S=m+(k<<4)|0;c[K>>2]=c[E>>2];c[K+4>>2]=c[E+4>>2];c[K+8>>2]=c[E+8>>2];c[K+12>>2]=c[E+12>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];c[L+8>>2]=c[F+8>>2];c[L+12>>2]=c[F+12>>2];OF(B,K,L);c[S>>2]=c[B>>2];c[S+4>>2]=c[B+4>>2];c[S+8>>2]=c[B+8>>2];c[S+12>>2]=c[B+12>>2];h[n+(k<<4)>>3]=+h[F>>3]-+h[S>>3]*t;h[n+(k<<4)+8>>3]=+h[f>>3]-+h[m+(k<<4)+8>>3]*t;o=o+1|0}s=n1(i)|0;f=0;r=i;g=i;j=i;i=s;while(1){i=k1(i,104958)|0;if(!i)break;e=(a[i>>0]|0)==0?134232:i;if((e|0)!=(j|0))if(!(a[(c[J>>2]|0)+115>>0]&3)){UO(b,e);WO(b,e);j=e}else j=e;m=(f|0)==0;n=f>>>0<2;i=0;while(1){if((i|0)>=(I|0))break;o=c[A+(i*48|0)>>2]|0;p=c[z+(i*48|0)>>2]|0;q=c[A+(i*48|0)+4>>2]|0;k=0;while(1){if((k|0)>=(q|0))break;S=o+(k<<4)|0;h[S>>3]=+h[S>>3]+ +h[p+(k<<4)>>3];S=o+(k<<4)+8|0;h[S>>3]=+h[S>>3]+ +h[p+(k<<4)+8>>3];k=k+1|0}aP(b,o,q,0,0,0);i=i+1|0}f=f+1|0;r=m?e:r;g=n?e:g;i=0}i=c[O+8>>2]|0;if(!i)i=0;else{if(g){if(!(a[(c[J>>2]|0)+115>>0]&3)){UO(b,g);WO(b,g)}}else g=0;R=O+16|0;S=c[O>>2]|0;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];c[L>>2]=c[S>>2];c[L+4>>2]=c[S+4>>2];c[L+8>>2]=c[S+8>>2];c[L+12>>2]=c[S+12>>2];KE(b,2,K,L,N,M,i);i=g}j=O+12|0;g=c[j>>2]|0;if(g|0){if((i|0)!=(r|0)?(a[(c[J>>2]|0)+115>>0]&3)==0:0){UO(b,r);WO(b,r);g=c[j>>2]|0}R=O+32|0;S=(c[O>>2]|0)+((c[v>>2]|0)+-1<<4)|0;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];c[L>>2]=c[S>>2];c[L+4>>2]=c[S+4>>2];c[L+8>>2]=c[S+8>>2];c[L+12>>2]=c[S+12>>2];KE(b,3,K,L,N,M,g)}D_(s);g=0;while(1){if((g|0)>=(I|0))break;D_(c[z+(g*48|0)>>2]|0);D_(c[A+(g*48|0)>>2]|0);g=g+1|0}D_(z);D_(A)}while(0);l=P;return}function DF(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+64|0;r=x+48|0;u=x+32|0;t=x+16|0;s=x;w=c[a+16>>2]|0;v=c[w+8>>2]|0;q=w+208|0;if(!((c[q>>2]|0)==0?!(b[w+260>>1]&1):0))d=3;a:do if((d|0)==3?(QO(a),p=w+276|0,e=c[p>>2]|0,e|0):0){h=w+280|0;d=c[h>>2]|0;i=w+268|0;j=w+284|0;k=w+272|0;m=w+228|0;n=w+244|0;o=w+212|0;f=c[d>>2]|0;g=1;while(1){if((g|0)>=(e|0))break a;c[i>>2]=c[d+(g<<2)>>2];c[k>>2]=(c[j>>2]|0)+(f<<4);PO(a,c[q>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0);QO(a);y=c[h>>2]|0;f=(c[y+(g<<2)>>2]|0)+f|0;g=g+1|0;e=c[p>>2]|0;d=y}}while(0);c[w+268>>2]=0;c[w+272>>2]=0;q=v+16|0;d=c[q>>2]|0;e=c[d+8>>2]|0;if(!e)f=w+260|0;else{p=c[e>>2]|0;d=c[p>>2]|0;y=c[p+8>>2]|0;o=p+16|0;c[t>>2]=c[o>>2];c[t+4>>2]=c[o+4>>2];c[t+8>>2]=c[o+8>>2];c[t+12>>2]=c[o+12>>2];p=p+32|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];if(!y){c[u>>2]=c[d>>2];c[u+4>>2]=c[d+4>>2];c[u+8>>2]=c[d+8>>2];c[u+12>>2]=c[d+12>>2]}else{c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2]}f=w+260|0;p=b[f>>1]|0;o=c[w+220>>2]|0;c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];EF(a,r,(p<<8&65535)<<16>>16>>15&255,o,(p<<14&65535)<<16>>16>>15&255);p=c[(c[q>>2]|0)+8>>2]|0;o=c[p>>2]|0;p=(c[p+4>>2]|0)+-1|0;d=c[o+(p*48|0)>>2]|0;e=c[o+(p*48|0)+4>>2]|0;y=c[o+(p*48|0)+12>>2]|0;n=o+(p*48|0)+16|0;c[t>>2]=c[n>>2];c[t+4>>2]=c[n+4>>2];c[t+8>>2]=c[n+8>>2];c[t+12>>2]=c[n+12>>2];t=o+(p*48|0)+32|0;c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];if(!y){y=d+(e+-1<<4)|0;c[u>>2]=c[y>>2];c[u+4>>2]=c[y+4>>2];c[u+8>>2]=c[y+8>>2];c[u+12>>2]=c[y+12>>2]}else{c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];c[u+8>>2]=c[s+8>>2];c[u+12>>2]=c[s+12>>2]}d=b[f>>1]|0;y=c[w+224>>2]|0;c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];EF(a,r,(d<<7&65535)<<16>>16>>15&255,y,(d<<13&65535)<<16>>16>>15&255);d=c[q>>2]|0}e=c[d+96>>2]|0;g=(b[f>>1]<<12&65535)<<16>>16>>15<<16>>16;m=w+216|0;h=c[m>>2]|0;n=w+232|0;i=c[n>>2]|0;o=w+248|0;j=c[o>>2]|0;p=w+212|0;k=c[p>>2]|0;if(!((QL(NL(v,c[46416]|0,134226)|0)|0)<<24>>24))d=0;else d=c[(c[q>>2]|0)+8>>2]|0;FF(a,e,11,g,h,i,j,k,d);j=c[(c[q>>2]|0)+108>>2]|0;k=(b[f>>1]<<12&65535)<<16>>16>>15<<16>>16;i=c[m>>2]|0;h=c[n>>2]|0;e=c[o>>2]|0;g=c[p>>2]|0;if(!((QL(NL(v,c[46416]|0,134226)|0)|0)<<24>>24))d=0;else d=c[(c[q>>2]|0)+8>>2]|0;FF(a,j,11,k,i,h,e,g,d);FF(a,c[(c[q>>2]|0)+100>>2]|0,7,(b[f>>1]<<13&65535)<<16>>16>>15<<16>>16,c[w+224>>2]|0,c[w+240>>2]|0,c[w+256>>2]|0,c[p>>2]|0,0);FF(a,c[(c[q>>2]|0)+104>>2]|0,6,(b[f>>1]<<14&65535)<<16>>16>>15<<16>>16,c[w+220>>2]|0,c[w+236>>2]|0,c[w+252>>2]|0,c[p>>2]|0,0);OO(a);OE(a);l=x;return}function EF(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j;i=c[a+16>>2]|0;if(!(e<<24>>24))f=c[i+208>>2]|0;if(!(g<<24>>24==0?((f|0)==0?(b[i+260>>1]&1)==0:0):0)){c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];JF(a,h)}l=j;return}function FF(b,d,e,f,g,h,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;o=r;q=c[b+152>>2]|0;if(d|0?a[d+81>>0]|0:0){if(!j)n=0;else{n=uH((W_(j)|0)+11|0)|0;switch(e|0){case 11:{m=105198;break}case 7:{m=98557;break}case 6:{m=98567;break}default:qa(135312,96880,2730,97018)}c[o>>2]=j;c[o+4>>2]=m;Y0(n,97034,o)|0}o=b+16|0;j=(c[o>>2]|0)+12|0;p=c[j>>2]|0;c[j>>2]=e;j=(f|0)!=0|(g|0)!=0;m=(q&4|0)==0;if(j&m){GF(b,d);PO(b,g,h,i,n)}oH(b,e,d);if(k|0)HF(b,d,k);if(j){if(!m){GF(b,d);PO(b,g,h,i,n)}QO(b)}D_(n);c[(c[o>>2]|0)+12>>2]=p}l=r;return}function GF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;i=f>>>16^2;c[d+264>>2]=i;j=d+268|0;c[j>>2]=i+2;i=d+272|0;D_(c[i>>2]|0);d=uH(c[j>>2]<<4)|0;c[i>>2]=d;i=b+56|0;j=b+24|0;h[d>>3]=+h[i>>3]-+h[j>>3]*.5;g=b+64|0;b=b+32|0;h[d+8>>3]=+h[g>>3]-+h[b>>3]*.5;h[d+16>>3]=+h[j>>3]*.5+ +h[i>>3];h[d+24>>3]=+h[b>>3]*.5+ +h[g>>3];if(!(e&8192))yO(a,d,d,2)|0;if(!f)WG(d)}return}function HF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+96|0;g=o+80|0;i=o+32|0;j=o+16|0;k=o;f=c[d>>2]|0;while(1){m=a[f>>0]|0;if(!(m<<24>>24))break;if(!(B$(m&255)|0)){n=4;break}else f=f+1|0}if((n|0)==4){p=+h[d+24>>3];m=d+56|0;IF(i,+h[m>>3]+p*.5,+h[d+64>>3]-+h[d+32>>3]*.5);n=i+16|0;IF(j,+h[i>>3]-p,+h[i+8>>3]);c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];n=i+32|0;c[g>>2]=c[m>>2];c[g+4>>2]=c[m+4>>2];c[g+8>>2]=c[m+8>>2];c[g+12>>2]=c[m+12>>2];bM(k,e,g);c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];YO(b,c[(c[b>>2]|0)+336>>2]|0);UO(b,c[d+8>>2]|0);bP(b,i,3)}l=o;return}function IF(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function JF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if(e&4259840|0){f=e&131072;j=f>>>16^2;c[d+264>>2]=j;k=d+268|0;c[k>>2]=j+2;j=d+272|0;D_(c[j>>2]|0);d=uH(c[k>>2]<<4)|0;c[j>>2]=d;i=+h[b>>3];h[d>>3]=i+-3.0;g=+h[b+8>>3];h[d+8>>3]=g+-3.0;h[d+16>>3]=i+3.0;h[d+24>>3]=g+3.0;if(!(e&8192))yO(a,d,d,2)|0;if(!f)WG(d)}return}function KF(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;i=+i;var j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=l;l=l+256|0;D=J+224|0;C=J+208|0;j=J+192|0;F=J+144|0;G=J+96|0;H=J+48|0;E=J;k=J+240|0;e=TE(e,f,k)|0;if((e|0)>1){z=b+48|0;A=ez(c[((c[b>>2]&3|0)==3?b:z)+40>>2]|0)|0;z=ry(c[((c[b>>2]&3|0)==3?b:z)+40>>2]|0)|0;A=(ey(A)|0)!=0;B=ry(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[j>>2]=z;c[j+4>>2]=A?97053:97058;c[j+8>>2]=B;Pw(3,97063,j)|0;if((e|0)==2)e=1;else I=4}else if((e|0)==1)e=1;else I=4;if((I|0)==4){B=b+16|0;r=c[k>>2]|0;s=r+8|0;t=H+4|0;u=F+8|0;v=F+12|0;w=(d|0)!=0;q=(d|0)==0;x=F+32|0;y=F+4|0;z=F+16|0;A=E+4|0;e=0;p=0;while(1){f=c[(c[B>>2]|0)+8>>2]|0;if((p|0)>=(c[f+4>>2]|0))break;j=F;f=(c[f>>2]|0)+(p*48|0)|0;b=j+48|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(b|0));b=1;m=1.0;o=c[s>>2]|0;a:while(1){f=c[o>>2]|0;if(!f)break;k=o+4|0;n=+g[k>>2];do if(n<1.0e-05&n>-1.0e-05)f=b;else{UO(a,f);n=+g[k>>2];m=m-n;e=c[o>>2]|0;if(b|0){UF(F,n,H,E);k=c[H>>2]|0;aP(a,k,c[t>>2]|0,0,0,0);D_(k);if(m<1.0e-05&m>-1.0e-05){I=11;break a}else{f=0;break}}if(m<1.0e-05&m>-1.0e-05){I=13;break a}j=G;f=E;b=j+48|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(b|0));n=+g[k>>2];UF(G,n/(m+n),H,E);D_(c[G>>2]|0);f=c[H>>2]|0;aP(a,f,c[t>>2]|0,0,0,0);D_(f);f=0}while(0);b=f;o=o+12|0}if((I|0)==11){I=0;D_(c[E>>2]|0)}else if((I|0)==13){I=0;o=c[E>>2]|0;aP(a,o,c[A>>2]|0,0,0,0);D_(o)}if(c[u>>2]|0){UO(a,c[c[s>>2]>>2]|0);WO(a,c[c[s>>2]>>2]|0);k=c[F>>2]|0;o=c[u>>2]|0;c[C>>2]=c[z>>2];c[C+4>>2]=c[z+4>>2];c[C+8>>2]=c[z+8>>2];c[C+12>>2]=c[z+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];KE(a,2,C,D,h,i,o)}if(c[v>>2]|0){UO(a,e);WO(a,e);k=(c[F>>2]|0)+((c[y>>2]|0)+-1<<4)|0;o=c[v>>2]|0;c[C>>2]=c[x>>2];c[C+4>>2]=c[x+4>>2];c[C+8>>2]=c[x+8>>2];c[C+12>>2]=c[x+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];KE(a,3,C,D,h,i,o)}do if((c[(c[(c[B>>2]|0)+8>>2]|0)+4>>2]|0)>1){if(!(c[u>>2]|0)){if(!(w&(c[v>>2]|0)!=0))break}else if(q)break;YO(a,d)}while(0);p=p+1|0}UE(r);e=0}l=J;return e|0}function LF(b,d){b=b|0;d=d|0;var e=0,f=0;e=1;a:while(1){switch(a[b>>0]|0){case 0:break a;case 58:{e=e+1|0;break}default:{}}b=b+1|0}f=O((W_(d)|0)+1|0,e)|0;b=f+10|0;if((c[46350]|0)<(f|0)){c[46350]=b;b=F_(c[46351]|0,b)|0;c[46351]=b}else b=c[46351]|0;b0(b,d)|0;while(1){e=e+-1|0;b=c[46351]|0;if(!e)break;f=b+(W_(b)|0)|0;a[f>>0]=58;a[f+1>>0]=0;p1(b,d)|0}return b|0}function MF(b){b=b|0;var d=0,e=0;d=c[46414]|0;a:do if(!d)e=7;else{d=yx(b,d)|0;switch(a[d>>0]|0){case 110:if(!(b$(d,132627)|0)){d=1;break a}else{e=7;break a}case 102:if(!(b$(d,97040)|0)){d=2;break a}else{e=7;break a}case 98:{if(!(b$(d,97048)|0)){d=3;break a}if(!(b$(d,108195)|0)){d=4;break a}else{e=7;break a}}default:{e=7;break a}}}while(0);if((e|0)==7){d=(ey(ez(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)|0)!=0;d=d?2:1}return d|0}function NF(a){a=a|0;if(a|0){D_(c[a+8>>2]|0);D_(a)}return}function OF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;e=+h[b>>3]-+h[c>>3];f=+h[b+8>>3]-+h[c+8>>3];d=2.0/+C(+(e*e+.0001+f*f));h[a>>3]=d*f;h[a+8>>3]=-(e*d);return}function PF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0;g=+h[c>>3]-+h[d>>3];i=+h[c+8>>3]-+h[d+8>>3];f=+C(+(i*i+g*g));if(f<.0001){j=+h[b>>3]-+h[e>>3];f=+h[b+8>>3]-+h[e+8>>3];i=f;g=j;f=+C(+(j*j+.0001+f*f))}j=2.0/f;h[a>>3]=i*j;h[a+8>>3]=-(j*g);return}function QF(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(1.0-a/b))}function RF(a,b,c){a=+a;b=+b;c=+c;return +(c*.5)}function SF(a,b,c){a=+a;b=+b;c=+c;return +(c*.5*(a/b))}function TF(a,b,c){a=+a;b=+b;c=+c;b=a/b;return +((!(b<=.5)?1.0-b:b)*c)}function UF(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0;p=l;l=l+16|0;o=p;n=c[a+4>>2]|0;j=(n+-1|0)/3|0;if((n+-4|0)>>>0<3){c[d+4>>2]=4;c[d>>2]=uH(64)|0;c[e+4>>2]=4;n=uH(64)|0;c[e>>2]=n;XL(o,c[a>>2]|0,3,b,c[d>>2]|0,n)}else{n=uH(j<<3)|0;g=0;i=c[a>>2]|0;f=0.0;while(1){if((g|0)>=(j|0))break;q=+VF(i);h[n+(g<<3)>>3]=q;g=g+1|0;i=i+48|0;f=q+f}b=f*b;m=0;f=0.0;while(1){if((j|0)<=(m|0))break;f=+h[n+(m<<3)>>3]+f;if(f>=b)break;m=m+1|0}k=m*3|0;g=k+4|0;i=d+4|0;c[i>>2]=g;c[d>>2]=uH(g<<4)|0;g=((j-m|0)*3|0)+1|0;j=e+4|0;c[j>>2]=g;c[e>>2]=uH(g<<4)|0;g=0;while(1){if((g|0)>=(c[i>>2]|0))break;r=(c[d>>2]|0)+(g<<4)|0;s=(c[a>>2]|0)+(g<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];g=g+1|0}g=g+-4|0;i=0;while(1){if((i|0)>=(c[j>>2]|0))break;s=(c[e>>2]|0)+(i<<4)|0;r=(c[a>>2]|0)+(g<<4)|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];g=g+1|0;i=i+1|0}q=+h[n+(m<<3)>>3];XL(o,(c[a>>2]|0)+(k<<4)|0,3,(b-f+q)/q,(c[d>>2]|0)+(k<<4)|0,c[e>>2]|0);D_(n)}l=p;return}function VF(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0;e=+h[a+16>>3];d=+h[a>>3]-e;f=+h[a+24>>3];b=+h[a+8>>3]-f;d=+C(+(b*b+d*d));b=+h[a+32>>3];e=e-b;c=+h[a+40>>3];f=f-c;d=+C(+(f*f+e*e))+d;b=b-+h[a+48>>3];c=c-+h[a+56>>3];return +(d+ +C(+(c*c+b*b)))}function WF(b,d){b=b|0;d=d|0;d=fz(d)|0;if((a[(c[d+16>>2]|0)+115>>0]|0)==1)d=RM(b)|0;else d=OM(b,d)|0;return bG(d)|0}function XF(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=l;l=l+1664|0;m=q+1600|0;n=q+800|0;o=q;p=vH(24)|0;c[p+16>>2]=1;j=((c[e+4>>2]|0)+-1|0)/3|0;h=0;i=p;while(1){if((h|0)>=(j|0))break;k=h*3|0;g=0;while(1){if((g|0)==4)break;r=m+(g<<4)|0;s=(c[e>>2]|0)+(g+k<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];g=g+1|0}h=h+1|0;i=YF(m,i)|0}g=0;h=0;i=p;while(1){if(!i){h=p;g=p;break}j=c[i+16>>2]|0;k=n+(g<<4)|0;e=o+(g<<4)|0;ZF(h,i,j,k,e,f);g=g+1|0;if(!((g|0)==50|(j|0)==0)){h=i;i=j;continue}_F(a,b,d,g,n,o);c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];h=i;g=1;i=j}while(1){if(!h)break;s=c[h+16>>2]|0;D_(g);h=s;g=s}l=q;return}function YF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+144|0;f=g+128|0;d=g+64|0;e=g;if(!(ZE(a)|0)){XL(f,a,3,.5,d,e);d=YF(e,YF(d,b)|0)|0}else{d=b+16|0;if((c[d>>2]|0)==1){c[d>>2]=0;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2]}d=a+48|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];d=aG(f,b)|0}l=g;return d|0}function ZF(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;r=l;l=l+96|0;n=r+80|0;m=r+64|0;k=r+48|0;o=r+32|0;p=r+16|0;q=r;c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];do if(a){c[p>>2]=c[a>>2];c[p+4>>2]=c[a+4>>2];c[p+8>>2]=c[a+8>>2];c[p+12>>2]=c[a+12>>2];if(!d){i=+h[o>>3];h[q>>3]=i*2.0-+h[p>>3];j=+h[o+8>>3];h[q+8>>3]=j*2.0-+h[p+8>>3];break}else{c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];i=+h[o>>3];j=+h[o+8>>3];break}}else{c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];i=+h[o>>3];h[p>>3]=i*2.0-+h[q>>3];j=+h[o+8>>3];h[p+8>>3]=j*2.0-+h[q+8>>3]}while(0);c[k>>2]=c[p>>2];c[k+4>>2]=c[p+4>>2];c[k+8>>2]=c[p+8>>2];c[k+12>>2]=c[p+12>>2];c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];c[n+12>>2]=c[q+12>>2];t=+$F(k,m,n);s=+E(+t)*g;g=+F(+t)*g;h[e>>3]=i+s;h[e+8>>3]=j+g;h[f>>3]=i-s;h[f+8>>3]=j-g;l=r;return}function _F(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;i=e<<1;j=c[d>>2]|0;h=0;k=0;while(1){if((h|0)>=(j|0))break;l=(c[(c[b>>2]|0)+(h<<2)>>2]|0)+k|0;h=h+1|0;k=l}l=j+1|0;c[d>>2]=l;l=xH(c[b>>2]|0,l<<2)|0;c[b>>2]=l;c[l+(h<<2)>>2]=i;c[a>>2]=xH(c[a>>2]|0,k+i<<4)|0;b=i+-1+k|0;h=0;while(1){if((h|0)>=(e|0))break;l=(c[a>>2]|0)+(h+k<<4)|0;j=f+(h<<4)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];l=(c[a>>2]|0)+(b-h<<4)|0;j=g+(h<<4)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];h=h+1|0}return}function $F(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;f=+h[b+8>>3];d=+h[b>>3];e=+K(+(+h[c+8>>3]-f),+(+h[c>>3]-d));d=+K(+(+h[a+8>>3]-f),+(+h[a>>3]-d));e=e-d;return +((e>0.0?e+-6.283185307179586:e)*.5+d)}function aG(a,b){a=a|0;b=b|0;var d=0;d=vH(24)|0;c[d+16>>2]=0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[b+16>>2]=d;return d|0}function bG(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;c=b;f=b;a:while(1){e=0;while(1){d=c;c=c+1|0;d=a[d>>0]|0;if(!(d<<24>>24))break a;if(e<<24>>24){g=5;break}if(d<<24>>24!=92)break;else e=1}b:do if((g|0)==5){g=0;switch(d<<24>>24|0){case 114:{d=13;break b}case 108:case 110:{d=10;break b}default:break b}}while(0);a[f>>0]=d;f=f+1|0}a[f>>0]=0;return b|0}function cG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=c[b>>2]|0;while(1){g=a[e>>0]|0;if(!(g<<24>>24)){f=0;break}f=g<<24>>24;if(!(g<<24>>24==44|(B$(f)|0)!=0)){h=5;break}e=e+1|0}a:do if((h|0)==5){switch(f|0){case 0:{f=0;break a}case 41:case 40:{e=e+1|0;break a}default:{}}h=d+4|0;i=d+8|0;while(1){if((dG(g<<24>>24)|0)<<24>>24){f=1;break a}f=c[h>>2]|0;if(f>>>0>=(c[i>>2]|0)>>>0){Uw(d,1)|0;f=c[h>>2]|0}c[h>>2]=f+1;a[f>>0]=g;f=e+1|0;e=f;g=a[f>>0]|0}}while(0);c[b>>2]=e;return f|0}function dG(a){a=a|0;switch(a|0){case 0:case 44:case 41:case 40:{a=1;break}default:a=0}return a|0}function eG(a,b){a=a|0;b=b|0;return fG(c[a>>2]|0,c[a+160>>2]|0,c[a+156>>2]|0,b)|0}function fG(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+160|0;k=o+20|0;m=o+16|0;n=o;c[k>>2]=0;c[m>>2]=0;Tw(n,128,o+24|0);Ww(n,f)|0;g=n+4|0;f=c[g>>2]|0;if(f>>>0>=(c[n+8>>2]|0)>>>0){Uw(n,1)|0;f=c[g>>2]|0}a[f>>0]=0;h=c[n>>2]|0;c[g>>2]=h;i=b+300|0;j=b+296|0;f=0;g=h;a:while(1){if(f){f=1;break}f=m1(g,c[i>>2]|0,k)|0;if(!f){f=0;break}g=m1(f,c[j>>2]|0,m)|0;h=(g|0)!=0;if(h)f=m1(0,c[j>>2]|0,m)|0;else f=0;switch(((f|0)!=0&1)+(h&1)&3){case 2:{g=gG(b,g,0)|0;f=gG(b,f,e)|0;h=(g|0)>(f|0);f=(f&g|0)>-1&(((h?g:f)|0)>=(d|0)&((h?f:g)|0)<=(d|0));g=0;continue a}case 1:{f=(gG(b,g,d)|0)==(d|0);g=0;continue a}default:{f=0;g=0;continue a}}}Xw(n);l=o;return f|0}function gG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=a[d>>0]|0;if(!(h<<24>>24==97?(b$(d,97370)|0)==0:0))f=3;a:do if((f|0)==3){if((hG(d)|0)<<24>>24){e=a2(d)|0;break}g=c[b+308>>2]|0;if(!g)e=-1;else{b=c[b+312>>2]|0;e=1;while(1){if((e|0)>(b|0)){e=-1;break a}f=c[g+(e<<2)>>2]|0;if(h<<24>>24==(a[f>>0]|0)?(b$(d,f)|0)==0:0)break a;e=e+1|0}}}while(0);return e|0}function hG(b){b=b|0;var c=0;while(1){c=a[b>>0]|0;if(!(c<<24>>24)){b=1;break}if(((c&255)+-48|0)>>>0<10)b=b+1|0;else{b=0;break}}return b|0}function iG(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a>>3]:0)?+h[a+24>>3]>=+h[b+8>>3]:0)a=+h[b+24>>3]>=+h[a+8>>3]&1;else a=0;return a|0}function jG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;a:do if((c[b+156>>2]|0)>=2?(f=NL(e,c[46397]|0,191979)|0,(eG(b,f)|0)<<24>>24==0):0)if(!(a[f>>0]|0))if(!(Jx(d,e)|0))f=1;else{f=Jx(d,e)|0;while(1){if(!f){f=0;break a}g=NL(f,c[46420]|0,191979)|0;if(!(a[g>>0]|0)){f=1;break a}if((eG(b,g)|0)<<24>>24){f=1;break a}f=Kx(d,f,e)|0}}else f=0;else f=1;while(0);return f|0}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+64|0;e=d+32|0;f=d;a=(c[a+16>>2]|0)+48|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[f+16>>2]=c[a+16>>2];c[f+20>>2]=c[a+20>>2];c[f+24>>2]=c[a+24>>2];c[f+28>>2]=c[a+28>>2];c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];c[e+16>>2]=c[b+16>>2];c[e+20>>2]=c[b+20>>2];c[e+24>>2]=c[b+24>>2];c[e+28>>2]=c[b+28>>2];b=(iG(f,e)|0)&255;l=d;return b|0}function lG(a,d){a=a|0;d=d|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0;r=c[a+152>>2]|0;s=NE(a)|0;c[s+4>>2]=2;c[s+8>>2]=d;c[s+12>>2]=8;if(r&16777216|0){if((e[(c[(ez(d)|0)+16>>2]|0)+178>>1]|0)>2){f=+h[(c[(c[d+16>>2]|0)+132>>2]|0)+16>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0)}else f=0.0;h[s+168>>3]=f}k=d+16|0;nG(a,c[(c[k>>2]|0)+104>>2]|0,d);do if(r&4259840|0){if((c[s+208>>2]|0)==0?(b[s+260>>1]&1)==0:0)break;p=HJ(d)|0;l=c[k>>2]|0;f=+h[l+16>>3];q=+h[l+24>>3];l=oG(d)|0;a:do if((p|2|0)==3){n=c[(c[k>>2]|0)+12>>2]|0;if(!((pG(n)|0)<<24>>24))g=0;else g=(c[n+4>>2]|l|0)!=0;if(!((r&524288|0)==0|((n|0)==0|g))){i=n+8|0;o=c[i>>2]|0;o=(o|0)<3?1:o;j=n+4|0;m=c[j>>2]|0;m=(m|0)>1?m:1;p=c[n+44>>2]|0;g=xx(d,99679)|0;if(!g)g=0;else g=a2(g)|0;g=(g+-4|0)>>>0>56?20:g;if(!(c[j>>2]|l)){c[s+264>>2]=0;i=uH(32)|0;g=c[k>>2]|0;v=+h[g+88>>3];h[i>>3]=f-v;u=+h[g+80>>3]*.5;h[i+8>>3]=q-u;h[i+16>>3]=v+f;h[i+24>>3]=u+q;g=2;break}i=c[i>>2]|0;if(((i|0)<3?+h[n+32>>3]==0.0:0)?+h[n+24>>3]==0.0:0){i=s+264|0;if(c[n>>2]|0){c[i>>2]=1;i=uH(32)|0;h[i>>3]=f;h[i+8>>3]=q;g=(m<<1)+-1|0;h[i+16>>3]=+h[p+(g<<4)>>3]+f;h[i+24>>3]=+h[p+(g<<4)+8>>3]+q;g=2;break}c[i>>2]=2;i=(m<<1)+-1|0;i=qG(+h[p+(i<<4)>>3],+h[p+(i<<4)+8>>3],g)|0;j=0;while(1){if((j|0)>=(g|0))break a;p=i+(j<<4)|0;h[p>>3]=+h[p>>3]+f;p=i+(j<<4)+8|0;h[p>>3]=+h[p>>3]+q;j=j+1|0}}m=O(i,m+-1|0)|0;c[s+264>>2]=2;if((i|0)<(g|0)){i=uH(o<<4)|0;g=0;while(1){if((g|0)>=(o|0)){g=o;break a}n=g+m|0;h[i+(g<<4)>>3]=+h[p+(n<<4)>>3]+f;h[i+(g<<4)+8>>3]=+h[p+(n<<4)+8>>3]+q;g=g+1|0}}else{l=(i|0)/(g|0)|0;i=uH(g<<4)|0;j=0;k=0;while(1){if((j|0)>=(g|0))break a;o=k+m|0;h[i+(j<<4)>>3]=+h[p+(o<<4)>>3]+f;h[i+(j<<4)+8>>3]=+h[p+(o<<4)+8>>3]+q;j=j+1|0;k=k+l|0}}}else t=31}else t=31;while(0);if((t|0)==31){c[s+264>>2]=0;i=uH(32)|0;g=c[k>>2]|0;h[i>>3]=f-+h[g+88>>3];v=+h[g+80>>3]*.5;h[i+8>>3]=q-v;h[i+16>>3]=+h[g+96>>3]+f;h[i+24>>3]=v+q;g=2}if(!(r&8192))yO(a,i,i,g)|0;c[s+272>>2]=i;c[s+268>>2]=g}while(0);qQ(xx(d,97006)|0);LO(a,d);return}function mG(a){a=a|0;MO(a);OE(a);return}function nG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m;f=xx(e,137973)|0;i=xx(e,138019)|0;k=xx(e,138006)|0;Tw(j,128,m+16|0);if(!d)h=0;else h=c[d>>2]|0;if(!((f|0)!=0?(a[f>>0]|0)!=0:0))f=xx(e,108395)|0;g=QE(b,e,j)|0;if(!i)d=0;else d=WF(i,e)|0;PE(b,h,f,d,k,g,e)|0;D_(d);Xw(j);l=m;return}function oG(b){b=b|0;var d=0,e=0;b=OL(b,c[46387]|0,191979)|0;a:do if(!(a[b>>0]|0))b=0;else{AF(b)|0;b=0;d=185144;while(1){e=c[d>>2]|0;if(!e)break a;e=(b$(e,108075)|0)==0;b=e?1:b;d=d+4|0}}while(0);return b|0}function pG(a){a=a|0;var b=0.0;if(((c[a+8>>2]|0)==4?(b=+h[a+16>>3],((~~(b+(b>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+h[a+24>>3]==0.0:0)a=+h[a+32>>3]==0.0&1;else a=0;return a|0}function qG(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0,f=0.0,g=0;f=6.283185307179586/+(c|0);g=uH(c<<4)|0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;h[g+(e<<4)>>3]=+E(+d)*a;h[g+(e<<4)+8>>3]=+F(+d)*b;d=d+f;e=e+1|0}return g|0}function rG(b,d){b=b|0;d=d|0;var e=0;a:do if((c[b+156>>2]|0)>=2?(e=NL(d,nx(d,0,98484,0)|0,191979)|0,(eG(b,e)|0)<<24>>24==0):0)if(!(a[e>>0]|0)){e=Sy(d)|0;while(1){if(!e){e=0;break a}if((jG(b,d,e)|0)<<24>>24){e=1;break a}e=Ty(d,e)|0}}else e=0;else e=1;while(0);return e|0}function sG(a,b){a=a|0;b=b|0;var d=0;d=NE(a)|0;c[d+4>>2]=1;c[d+8>>2]=b;c[d+12>>2]=1;nG(a,c[(c[b+16>>2]|0)+12>>2]|0,b);FO(a,b);return}function tG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;b=xx(b,138e3)|0;a:do if((b|0)!=0?(a[b>>0]|0)!=0:0){AF(b)|0;e=185144;b=0;while(1){while(1){f=c[e>>2]|0;if(!f){e=185144;break a}if(!(b$(f,108075)|0)){g=10;break}if(!(b$(f,103308)|0)){f=e;g=12;break}if(!(b$(f,103315)|0)){f=e;g=14;break}if(!(b$(f,103290)|0)){f=e;g=16;break}e=e+4|0}if((g|0)==10){e=e+4|0;b=b|1;continue}else if((g|0)==12){while(1){h=f;f=f+4|0;g=c[f>>2]|0;c[h>>2]=g;if(!g)break;else g=12}b=b|3;continue}else if((g|0)==14){while(1){g=f;f=f+4|0;h=c[f>>2]|0;c[g>>2]=h;if(!h)break;else g=14}b=b|64;continue}else if((g|0)==16){while(1){g=f;f=f+4|0;h=c[f>>2]|0;c[g>>2]=h;if(!h)break;else g=16}b=b|4;continue}}}else{e=0;b=0}while(0);c[d>>2]=b;return e|0}function uG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;i=k;j=k+4|0;c[j>>2]=0;m=(TE(b,0,j)|0)==0;j=c[j>>2]|0;if((m?(f=c[j>>2]|0,(f|0)>=2):0)?(h=j+8|0,(c[c[h>>2]>>2]|0)!=0):0){if((f|0)>2)Pw(0,97389,i)|0;m=vH((W_(b)|0)+1|0)|0;c[d>>2]=m;b0(m,c[c[h>>2]>>2]|0)|0;if(!(c[(c[h>>2]|0)+12>>2]|0))c[d+4>>2]=0;else{m=c[d>>2]|0;m=m+((W_(m)|0)+1)|0;c[d+4>>2]=m;b0(m,c[(c[h>>2]|0)+12>>2]|0)|0}b=c[h>>2]|0;do if(!(a[b+8>>0]|0))if(!(a[b+20>>0]|0)){g[e>>2]=0.0;break}else{g[e>>2]=1.0-+g[b+16>>2];break}else c[e>>2]=c[b+4>>2];while(0);UE(j);b=1}else{c[d>>2]=0;UE(j);b=0}l=k;return b|0}function vG(a,b){a=a|0;b=b|0;GO(a,b);OE(a);return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;p=x+48|0;s=x+16|0;w=x+8|0;v=x;t=x+80|0;c[t>>2]=1e3;f=vH(16e3)|0;u=a+256|0;e=1;j=1;i=0;q=0;r=c[b+8>>2]|0;while(1){if((q|0)>=(c[b>>2]|0))break;d=c[r>>2]|0;a:do switch(d|0){case 1:case 0:{n=r+80|0;c[s>>2]=c[n>>2];c[s+4>>2]=c[n+4>>2];c[s+8>>2]=c[n+8>>2];c[s+12>>2]=c[n+12>>2];c[s+16>>2]=c[n+16>>2];c[s+20>>2]=c[n+20>>2];c[s+24>>2]=c[n+24>>2];c[s+28>>2]=c[n+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(iG(s,p)|0))d=j;else{z=r+8|0;A=r+24|0;h[f>>3]=+h[z>>3]-+h[A>>3];n=r+16|0;y=r+32|0;h[f+8>>3]=+h[n>>3]-+h[y>>3];h[f+16>>3]=+h[A>>3]+ +h[z>>3];h[f+24>>3]=+h[y>>3]+ +h[n>>3];ZO(a,f,2,(d|0)==0?j:0);d=j}break}case 3:case 2:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(iG(s,p)|0))d=j;else{d=r+8|0;f=xG(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;_O(a,f,c[d>>2]|0,(c[r>>2]|0)==2?j:0);d=j}break}case 5:case 4:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(iG(s,p)|0))d=j;else{d=r+8|0;f=xG(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;aP(a,f,c[d>>2]|0,0,0,(c[r>>2]|0)==4?j&255:0);d=j}break}case 6:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(iG(s,p)|0))d=j;else{d=r+8|0;f=xG(f,t,c[d+4>>2]|0,c[d>>2]|0)|0;bP(a,f,c[d>>2]|0);d=j}break}case 7:{A=r+80|0;c[s>>2]=c[A>>2];c[s+4>>2]=c[A+4>>2];c[s+8>>2]=c[A+8>>2];c[s+12>>2]=c[A+12>>2];c[s+16>>2]=c[A+16>>2];c[s+20>>2]=c[A+20>>2];c[s+24>>2]=c[A+24>>2];c[s+28>>2]=c[A+28>>2];c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[u+16>>2];c[p+20>>2]=c[u+20>>2];c[p+24>>2]=c[u+24>>2];c[p+28>>2]=c[u+28>>2];if(!(iG(s,p)|0))d=j;else{h[f>>3]=+h[r+8>>3];h[f+8>>3]=+h[r+16>>3];d=c[r+112>>2]|0;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];TO(a,p,d);d=j}break}case 8:{WO(a,c[r+8>>2]|0);d=1;break}case 9:{UO(a,c[r+8>>2]|0);d=1;break}case 13:{if((c[r+8>>2]|0)!=2){d=r+16|0;z=c[d+36>>2]|0;A=c[z+12>>2]|0;o=+g[z+8>>2];d=~~(+K(+(+h[r+40>>3]-+h[r+24>>3]),+(+h[r+32>>3]-+h[d>>3]))*57.29577951308232);WO(a,c[z+4>>2]|0);XO(a,A,d,o);d=2;break a}A=c[r+68>>2]|0;j=c[A+4>>2]|0;n=c[A+12>>2]|0;o=+g[A+8>>2];k=+h[r+40>>3];m=+h[r+16>>3];if(k==m?+h[r+48>>3]==+h[r+24>>3]:0)d=0;else d=~~(+H(+((m-k)/+h[r+32>>3]))*57.29577951308232);WO(a,j);XO(a,n,d,o);d=3;break}case 14:{Pw(0,97455,v)|0;d=j;break}case 12:{if(!e){e=0;d=j}else{Pw(0,97495,w)|0;e=0;d=j}break}case 11:{AF(c[r+8>>2]|0)|0;YO(a,185144);i=185144;d=j;break}default:d=j}while(0);j=d;q=q+1|0;r=r+120|0}if(i|0)YO(a,c[(c[a>>2]|0)+336>>2]|0);D_(f);l=x;return}function xG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[b>>2]|0;f=g<<1;f=(f|0)>(e|0)?f:e;if((g|0)<(e|0)){a=xH(a,f<<4)|0;c[b>>2]=f}b=0;while(1){if((b|0)>=(e|0))break;h[a+(b<<4)>>3]=+h[d+(b*24|0)>>3];h[a+(b<<4)+8>>3]=+h[d+(b*24|0)+8>>3];b=b+1|0}return a|0}function yG(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=c[b+4>>2];c[a+4>>2]=d;return}function zG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+16|0;f=1;while(1){d=c[g>>2]|0;if((f|0)>(c[d+180>>2]|0))break;e=c[(c[d+184>>2]|0)+(f<<2)>>2]|0;zG(b,e);d=xx(e,137741)|0;if(d|0?a[d>>0]|0:0)UO(b,d);d=xx(e,134647)|0;if(d|0?a[d>>0]|0:0)UO(b,d);d=xx(e,137895)|0;if(d|0?a[d>>0]|0:0)UO(b,d);d=xx(e,98392)|0;if(d|0?a[d>>0]|0:0)WO(b,d);d=xx(e,98420)|0;if(d|0?a[d>>0]|0:0)UO(b,d);f=f+1|0}return}function AG(a){a=a|0;var b=0,d=0,e=0;b=c[46356]|0;if(!b){b=Cw(20524,c[4555]|0)|0;c[46356]=b}if(!(nb[c[b>>2]&63](b,a,4)|0)){d=c[46356]|0;e=c[d>>2]|0;b=n1(a)|0;nb[e&63](d,b,1)|0;b=1}else b=0;return b|0}function BG(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function CG(a){a=a|0;var b=0;b=c[46357]|0;if(!a){if((b|0)>0?(b=b+-1|0,c[46357]=b,(b|0)==0):0){J0(1,c[46358]|0)|0;D_(c[46358]|0)}}else{c[46357]=b+1;if(!b){c[46358]=n1(J0(1,0)|0)|0;J0(1,150481)|0}}return}function DG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+96|0;r=u+72|0;q=u+56|0;p=u+48|0;t=u+32|0;s=u+24|0;e=u+8|0;d=u;if(0)EL();do if((Az(b,134401,0,1)|0)!=0?(o=b+16|0,(c[(c[o>>2]|0)+8>>2]|0)!=0):0){EG(b);FG(a,b);GG(a,b);CG(1);j=a+56|0;k=a+184|0;m=a+192|0;n=a+28|0;i=pC(a)|0;a:while(1){if(!i){g=33;break}d=c[j>>2]|0;if(!d){c[i+20>>2]=0;d=0}else{c[i+20>>2]=c[d+8>>2];d=c[d+12>>2]|0}c[i+24>>2]=d;c[i+12>>2]=a;c[i+28>>2]=c[k>>2];c[i+620>>2]=25660;c[i+624>>2]=14;if(!(c[(c[o>>2]|0)+8>>2]|0)){g=13;break}e=i+52|0;g=uO(i,c[e>>2]|0)|0;c[i+56>>2]=g;switch(g|0){case 999:{g=16;break a}case 21:{d=1;break}case 24:{d=520;break}default:d=HG(b)|0}f=i+152|0;c[f>>2]=c[f>>2]|d;d=c[m>>2]|0;do if(!d)g=24;else{if(c[d+152>>2]&32|0?(b$(c[e>>2]|0,c[d+52>>2]|0)|0)==0:0){d=c[46359]|0;if(!d){g=27;break}c[d+8>>2]=i;c[i+36>>2]=c[d+36>>2];g=29;break}wO(d);c[m>>2]=0;c[n>>2]=0;g=24}while(0);if((g|0)==24){c[46359]=0;g=27}if((g|0)==27?(g=0,(vO(i)|0)==0):0){c[m>>2]=i;g=29}if((g|0)==29){c[i+8>>2]=0;c[i+104>>2]=25772;IG(i);JG(i);KG(i,b);LG(i,b);MG(i,b);if(!(c[f>>2]&128))dF(i,b);c[46359]=i}i=qC(a)|0}if((g|0)==13){Pw(1,97653,s)|0;CG(0);if(!0){d=-1;break}d=c[15686]|0;s=ry(b)|0;v=+FL();c[t>>2]=s;h[t+8>>3]=v;g1(d,97624,t)|0;d=-1;break}else if((g|0)==16){c[p>>2]=c[e>>2];Pw(1,97674,p)|0;CG(0);if(!0){d=-1;break}d=c[15686]|0;t=ry(b)|0;v=+FL();c[q>>2]=t;h[q+8>>3]=v;g1(d,97624,q)|0;d=-1;break}else if((g|0)==33){CG(0);if(!0){d=0;break}d=c[15686]|0;t=ry(b)|0;v=+FL();c[r>>2]=t;h[r+8>>3]=v;g1(d,97624,r)|0;d=0;break}}else g=5;while(0);if((g|0)==5){Pw(1,97576,d)|0;if(!0)d=-1;else{d=c[15686]|0;t=ry(b)|0;v=+FL();c[e>>2]=t;h[e+8>>3]=v;g1(d,97624,e)|0;d=-1}}l=u;return d|0}function EG(a){a=a|0;var b=0;b=Sy(a)|0;while(1){if(!b)break;RG(a,b);b=Ty(a,b)|0}return}function FG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+24|0;f=o+16|0;j=o+8|0;n=o;c[b+168>>2]=d;g=b+293|0;a[g>>0]=0;e=xx(d,102470)|0;if(e|0?(c[f>>2]=j,c[f+4>>2]=n,i=N1(e,102477,f)|0,(i|0)>0):0){p=+h[j>>3]*72.0;e=b+208|0;h[e>>3]=p;h[b+200>>3]=p;if((i|0)!=1)h[e>>3]=+h[n>>3]*72.0;a[g>>0]=1}f=b+292|0;a[f>>0]=0;e=xx(d,98076)|0;if(e|0?(c[k>>2]=j,c[k+4>>2]=n,m=N1(e,102477,k)|0,(m|0)>0):0){p=+h[j>>3]*72.0;e=b+224|0;h[e>>3]=p;h[b+216>>3]=p;if((m|0)!=1)h[e>>3]=+h[n>>3]*72.0;a[f>>0]=1}e=b+294|0;a[e>>0]=0;f=b+232|0;g=d+16|0;n=(c[(c[g>>2]|0)+8>>2]|0)+48|0;c[f>>2]=c[n>>2];c[f+4>>2]=c[n+4>>2];c[f+8>>2]=c[n+8>>2];c[f+12>>2]=c[n+12>>2];f=c[(c[g>>2]|0)+8>>2]|0;if(+h[f+48>>3]>.001?+h[f+56>>3]>.001:0)a[e>>0]=1;c[b+288>>2]=a[f+81>>0]|0?90:0;e=b+196|0;c[e>>2]=98080;f=xx(d,98083)|0;if(f|0?a[f>>0]|0:0)c[e>>2]=f;n=b+256|0;m=(c[g>>2]|0)+16|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];c[n+20>>2]=c[m+20>>2];c[n+24>>2]=c[m+24>>2];c[n+28>>2]=c[m+28>>2];c[46371]=nx(d,0,98446,0)|0;c[46372]=nx(d,0,98437,0)|0;c[b+320>>2]=OL(0,c[46381]|0,104968)|0;h[b+328>>3]=+LL(0,c[46380]|0,14.0,1.0);c[b+336>>2]=20560;c[b+188>>2]=ry(d)|0;l=o;return}function GG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+304|0;f=c[e>>2]|0;if(f|0){D_(f);c[e>>2]=0}f=b+308|0;e=c[f>>2]|0;if(e|0){D_(e);c[f>>2]=0}g=b+316|0;e=c[g>>2]|0;if(e|0){D_(e);c[g>>2]=0}e=xx(d,97827)|0;if(e){c[b+312>>2]=PG(b,d,e)|0;e=xx(d,97834)|0;if(e|0?a[e>>0]|0:0)c[g>>2]=QG(b,e)|0}else{c[f>>2]=0;c[b+312>>2]=1}return}function HG(b){b=b|0;b=xx(b,97795)|0;a:do if(!b)b=0;else switch(a[b>>0]|0){case 110:{if(!(b$(b+1|0,97807)|0))b=1;else{b=0;break a}break}case 101:{if(!(b$(b+1|0,97817)|0))b=16;else{b=0;break a}break}default:{b=0;break a}}while(0);return b|0}function IG(b){b=b|0;var d=0.0,e=0;e=c[b>>2]|0;if(!(a[e+292>>0]|0)){if((c[b+56>>2]|0)==300)d=+h[(c[b+68>>2]|0)+8>>3];else d=4.0;h[b+248>>3]=d;h[b+240>>3]=d}else{b=b+240|0;e=e+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2]}return}function JG(b){b=b|0;var d=0;d=c[b>>2]|0;a:do if(!(a[d+293>>0]|0))switch(c[b+56>>2]|0){case 300:{d=b+416|0;b=(c[b+84>>2]|0)+8|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];break a}case 30:case 21:case 22:case 4:case 3:case 2:{h[b+424>>3]=36.0;h[b+416>>3]=36.0;break a}default:{d=b+416|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;break a}}else{b=b+416|0;d=d+200|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2]}while(0);return}function KG(b,d){b=b|0;d=d|0;var e=0.0,f=0;f=c[(c[b>>2]|0)+192>>2]|0;e=+h[(c[(c[d+16>>2]|0)+8>>2]|0)+24>>3];do if(!(e!=0.0)){if(f|0?a[f+128>>0]|0:0){b=b+432|0;f=f+112|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];break}d=b+432|0;if((c[b+56>>2]|0)==300){b=(c[b+84>>2]|0)+40|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];break}else{h[b+440>>3]=96.0;h[d>>3]=96.0;break}}else{h[b+440>>3]=e;h[b+432>>3]=e}while(0);return}function LG(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+112|0;t=A+80|0;u=A+56|0;s=A+40|0;v=A+32|0;w=A+24|0;x=A+16|0;y=A+8|0;z=A;m=c[b>>2]|0;o=+h[m+272>>3];q=+h[m+280>>3];p=+h[m+256>>3];r=+h[m+264>>3];f=+h[b+240>>3];e=p-f;h[b+208>>3]=e;i=+h[b+248>>3];j=r-i;h[b+216>>3]=j;f=f+o;h[b+224>>3]=f;i=i+q;h[b+232>>3]=i;e=f-e;j=i-j;h[x>>3]=1.0;g=c[(c[d+16>>2]|0)+8>>2]|0;i=+h[g+64>>3];do if(i>.001?(k=+h[g+72>>3],k>.001):0){e=e==0.0?i:e;f=j==0.0?k:j;if(!(i<e|k<f)?!(k>f&(i>e&(a[g+80>>0]|0)!=0)):0){k=e;j=f;i=1.0;break}n=i/e<k/f;i=(n?i:k)/(n?e:f);h[x>>3]=i;k=e;j=f}else{k=e;i=1.0}while(0);f=(p+o)*.5;h[y>>3]=f;e=(r+q)*.5;h[z>>3]=e;c[b+360>>2]=c[m+288>>2];k=i*k;h[v>>3]=k;j=i*j;h[w>>3]=j;g=xx(d,97726)|0;if(g){m=C_((W_(g)|0)+1|0)|0;n=C_((W_(g)|0)+1|0)|0;c[s>>2]=v;c[s+4>>2]=w;c[s+8>>2]=x;c[s+12>>2]=m;do if((N1(g,97735,s)|0)==4){g=az(c[d+60>>2]|0,m,0)|0;if(g|0){u=c[g+16>>2]|0;h[y>>3]=+h[u+16>>3];h[z>>3]=+h[u+24>>3]}}else{c[u>>2]=v;c[u+4>>2]=w;c[u+8>>2]=x;c[u+12>>2]=m;c[u+16>>2]=n;if((N1(g,97755,u)|0)!=4){c[t>>2]=v;c[t+4>>2]=w;c[t+8>>2]=x;c[t+12>>2]=y;c[t+16>>2]=z;N1(g,97775,t)|0;break}g=az(c[d+60>>2]|0,m,0)|0;if(g|0){u=c[g+16>>2]|0;h[y>>3]=+h[u+16>>3];h[z>>3]=+h[u+24>>3]}}while(0);D_(m);D_(n);k=+h[v>>3];j=+h[w>>3];i=+h[x>>3];f=+h[y>>3];e=+h[z>>3]}h[b+368>>3]=k;h[b+376>>3]=j;h[b+352>>3]=i;h[b+336>>3]=f;h[b+344>>3]=e;l=A;return}function MG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,P=0.0,Q=0.0;M=l;l=l+224|0;J=M+200|0;z=M+168|0;E=M+144|0;I=M+120|0;F=M+96|0;G=M+64|0;e=M+184|0;v=M+176|0;w=M+160|0;y=M+136|0;x=M+112|0;A=M+80|0;B=M+48|0;C=M+32|0;D=M+16|0;K=M+8|0;L=M;u=c[b>>2]|0;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;H=b+368|0;c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];H=b+360|0;if(c[H>>2]|0){c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2];NG(e,J);c[I>>2]=c[e>>2];c[I+4>>2]=c[e+4>>2];c[I+8>>2]=c[e+8>>2];c[I+12>>2]=c[e+12>>2]}t=b+416|0;c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];c[F+8>>2]=c[t+8>>2];c[F+12>>2]=c[t+12>>2];if((a[u+294>>0]|0)!=0?(c[b+152>>2]&32|0)!=0:0){i=+h[u+232>>3]-+h[F>>3]*2.0;h[E>>3]=i;k=+h[u+240>>3]-+h[F+8>>3]*2.0;p=E+8|0;h[p>>3]=k;if(!(i<.0001)){o=+h[I>>3];e=~~(o/i);f=b+164|0;c[f>>2]=e;if(o-i*+(e|0)>.0001){e=e+1|0;c[f>>2]=e}}else{c[b+164>>2]=1;e=1}if(!(k<.0001)){g=+h[I+8>>3];f=~~(g/k);j=b+168|0;c[j>>2]=f;if(g-k*+(f|0)>.0001){f=f+1|0;c[j>>2]=f}}else{c[b+168>>2]=1;f=1;g=+h[I+8>>3]}c[b+204>>2]=O(f,e)|0;o=+h[(+h[I>>3]<i?I:E)>>3];h[I>>3]=o;e=p;f=I;m=+h[(g<k?I:E)+8>>3];g=o;j=21}else{if(c[b+68>>2]|0){e=c[b+84>>2]|0;i=+h[e+24>>3]-+h[F>>3]*2.0;i=i<0.0?0.0:i;h[E>>3]=i;o=+h[e+32>>3]-+h[F+8>>3]*2.0;e=E+8|0;h[e>>3]=o;if(o<0.0){f=E;j=17}else e=E}else{h[E+8>>3]=0.0;f=E;e=E;j=17}if((j|0)==17){h[e>>3]=0.0;e=f;i=+h[f>>3]}c[b+204>>2]=1;c[b+168>>2]=1;c[b+164>>2]=1;g=+h[I>>3];if(i<g){h[e>>3]=g;i=g}e=E+8|0;k=+h[e>>3];m=+h[I+8>>3];if(k<m){f=E;j=21}else{r=e;m=k}}if((j|0)==21){h[f+8>>3]=m;r=e;m=+h[e>>3]}n=+h[F>>3];s=b+432|0;k=+h[s>>3]*.013888888888888888*(n*2.0+i);c[b+448>>2]=~~(k+(k>=0.0?.5:-.5));q=F+8|0;k=+h[q>>3];t=b+440|0;o=+h[t>>3]*.013888888888888888*(k*2.0+m);c[b+452>>2]=~~(o+(o>=0.0?.5:-.5));j=b+188|0;p=b+180|0;e=b+172|0;f=u+196|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;OG(v,b,a[c[f>>2]>>0]|0);u=v;v=c[u+4>>2]|0;e=p;c[e>>2]=c[u>>2];c[e+4>>2]=v;OG(w,b,a[(c[f>>2]|0)+1>>0]|0);e=w;w=c[e>>2]|0;e=c[e+4>>2]|0;v=j;c[v>>2]=w;c[v+4>>2]=e;w=(c[p>>2]|0)+w|0;if(!((((w|0)>-1?w:0-w|0)|0)==1?(w=(c[b+184>>2]|0)+e|0,(((w|0)>-1?w:0-w|0)|0)==1):0)){OG(y,b,66);v=y;y=c[v+4>>2]|0;w=p;c[w>>2]=c[v>>2];c[w+4>>2]=y;OG(x,b,76);w=x;x=c[w+4>>2]|0;y=j;c[y>>2]=c[w>>2];c[y+4>>2]=x;c[z>>2]=c[f>>2];Pw(0,97706,z)|0}if(a[(c[(c[d+16>>2]|0)+8>>2]|0)+82>>0]|0){if(i>g){m=(i-g)*.5;h[G>>3]=m}else m=0.0;i=+h[r>>3];o=+h[I+8>>3];if(i>o){i=(i-o)*.5;h[G+8>>3]=i}else i=0.0}else{i=0.0;m=0.0}if(!(c[H>>2]|0))j=1;else{c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2];NG(A,J);c[I>>2]=c[A>>2];c[I+4>>2]=c[A+4>>2];c[I+8>>2]=c[A+8>>2];c[I+12>>2]=c[A+12>>2];c[J>>2]=c[E>>2];c[J+4>>2]=c[E+4>>2];c[J+8>>2]=c[E+8>>2];c[J+12>>2]=c[E+12>>2];NG(B,J);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];NG(C,J);c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];c[J>>2]=c[G>>2];c[J+4>>2]=c[G+4>>2];c[J+8>>2]=c[G+8>>2];c[J+12>>2]=c[G+12>>2];NG(D,J);c[G>>2]=c[D>>2];c[G+4>>2]=c[D+4>>2];c[G+8>>2]=c[D+8>>2];c[G+12>>2]=c[D+12>>2];n=+h[F>>3];m=+h[G>>3];k=+h[q>>3];i=+h[G+8>>3];g=+h[I>>3];j=(c[H>>2]|0)==0}o=m+n;h[b+384>>3]=o;P=i+k;h[b+392>>3]=P;N=m+n+g;h[b+400>>3]=N;Q=+h[I+8>>3];n=i+k+Q;h[b+408>>3]=n;m=+h[b+352>>3];h[b+320>>3]=g/m;h[b+328>>3]=Q/m;m=+h[s>>3];o=o*.013888888888888888*m;f=b+456|0;c[f>>2]=~~(o+(o>=0.0?.5:-.5));o=+h[t>>3];k=P*.013888888888888888*o;c[b+460>>2]=~~(k+(k>=0.0?.5:-.5));m=N*.013888888888888888*m;e=b+464|0;c[e>>2]=~~(m+(m>=0.0?.5:-.5));o=n*.013888888888888888*o;c[b+468>>2]=~~(o+(o>=0.0?.5:-.5));if(!j){c[J>>2]=c[f>>2];c[J+4>>2]=c[f+4>>2];yG(K,J);I=K;K=c[I+4>>2]|0;b=f;c[b>>2]=c[I>>2];c[b+4>>2]=K;c[J>>2]=c[e>>2];c[J+4>>2]=c[e+4>>2];yG(L,J);b=L;K=c[b+4>>2]|0;L=e;c[L>>2]=c[b>>2];c[L+4>>2]=K}l=M;return}function NG(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b>>3];h[a>>3]=+h[b+8>>3];h[a+8>>3]=c;return}function OG(a,b,d){a=a|0;b=b|0;d=d|0;d=(d<<24>>24)+-66|0;switch(d>>>1|d<<31|0){case 9:{c[b+176>>2]=(c[b+168>>2]|0)+-1;b=0;d=-1;break}case 0:{b=0;d=1;break}case 5:{b=1;d=0;break}case 8:{c[b+172>>2]=(c[b+164>>2]|0)+-1;b=-1;d=0;break}default:{b=0;d=0}}c[a>>2]=b;c[a+4>>2]=d;return}function PG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;f=xx(d,97947)|0;i=b+296|0;c[i>>2]=(f|0)==0?97956:f;d=xx(d,97960)|0;f=b+300|0;d=(d|0)==0?97973:d;c[f>>2]=d;d=q1(c[i>>2]|0,d)|0;if(d|0){c[g>>2]=a[d>>0];Pw(0,97975,g)|0;c[f>>2]=191979}d=n1(e)|0;c[b+304>>2]=d;h=b+308|0;f=0;b=0;while(1){e=k1(d,c[i>>2]|0)|0;if(!e)break;g=b+1|0;if((b|0)<(f|0))d=c[h>>2]|0;else{f=f+128|0;d=c[h>>2]|0;if(!d)d=vH(f<<2)|0;else d=xH(d,f<<2)|0;c[h>>2]=d}c[d+(g<<2)>>2]=e;b=g;d=0}if(b|0){i=xH(c[h>>2]|0,(b<<2)+8|0)|0;c[h>>2]=i;c[i>>2]=0;c[(c[h>>2]|0)+(b+1<<2)>>2]=0}l=j;return b|0}function QG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=a+312|0;d=vH((c[i>>2]<<2)+8|0)|0;e=0;h=1;while(1){g=c[i>>2]|0;if((h|0)>(g|0))break;f=e+1|0;if((fG(a,h,g,b)|0)<<24>>24){c[d+(f<<2)>>2]=h;e=f}h=h+1|0}if(!e){c[j>>2]=b;Pw(0,97846,j)|0;D_(d);d=0}else{c[d>>2]=e;c[d+(e+1<<2)>>2]=(c[i>>2]|0)+1}l=k;return d|0}function RG(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0;d=c[b+16>>2]|0;g=+h[d+16>>3];h[d+48>>3]=g-+h[d+88>>3];e=+h[d+24>>3];f=+h[d+80>>3]*.5;h[d+56>>3]=e-f;h[d+64>>3]=+h[d+96>>3]+g;h[d+72>>3]=f+e;b=Ex(a,b)|0;while(1){if(!b)break;SG(b);b=Gx(a,b)|0}return}function SG(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a|0)TG(a);return}function TG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=l;l=l+240|0;v=C+192|0;u=C+176|0;w=C+64|0;x=C+32|0;y=C;z=C+144|0;A=C+112|0;B=a+4|0;if((c[B>>2]|0)<=0)qa(98114,96880,3994,98128);b=c[a>>2]|0;d=w;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));d=v;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));UG(x,v);i=x+8|0;j=y+8|0;k=x+16|0;m=y+16|0;n=x+24|0;o=y+24|0;p=w+8|0;q=w+12|0;r=w+32|0;s=w+4|0;t=w+16|0;g=0;while(1){if((g|0)>=(c[B>>2]|0))break;if((g|0)>0){b=(c[a>>2]|0)+(g*48|0)|0;d=w;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));d=v;e=b;f=d+48|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));UG(y,v);h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}b=c[p>>2]|0;if(b|0){f=c[w>>2]|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[v>>2]=c[f>>2];c[v+4>>2]=c[f+4>>2];c[v+8>>2]=c[f+8>>2];c[v+12>>2]=c[f+12>>2];JE(z,u,v,1.0,b);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[y+16>>2]=c[z+16>>2];c[y+20>>2]=c[z+20>>2];c[y+24>>2]=c[z+24>>2];c[y+28>>2]=c[z+28>>2];h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}b=c[q>>2]|0;if(b|0){f=(c[w>>2]|0)+((c[s>>2]|0)+-1<<4)|0;c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];c[u+12>>2]=c[r+12>>2];c[v>>2]=c[f>>2];c[v+4>>2]=c[f+4>>2];c[v+8>>2]=c[f+8>>2];c[v+12>>2]=c[f+12>>2];JE(A,u,v,1.0,b);c[y>>2]=c[A>>2];c[y+4>>2]=c[A+4>>2];c[y+8>>2]=c[A+8>>2];c[y+12>>2]=c[A+12>>2];c[y+16>>2]=c[A+16>>2];c[y+20>>2]=c[A+20>>2];c[y+24>>2]=c[A+24>>2];c[y+28>>2]=c[A+28>>2];h[x>>3]=+h[(+h[x>>3]<+h[y>>3]?x:y)>>3];h[i>>3]=+h[(+h[i>>3]<+h[j>>3]?x:y)+8>>3];h[k>>3]=+h[(+h[k>>3]>+h[m>>3]?x:y)+16>>3];h[n>>3]=+h[(+h[n>>3]>+h[o>>3]?x:y)+24>>3]}g=g+1|0}B=a+8|0;c[B>>2]=c[x>>2];c[B+4>>2]=c[x+4>>2];c[B+8>>2]=c[x+8>>2];c[B+12>>2]=c[x+12>>2];c[B+16>>2]=c[x+16>>2];c[B+20>>2]=c[x+20>>2];c[B+24>>2]=c[x+24>>2];c[B+28>>2]=c[x+28>>2];l=C;return}function UG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0;n=l;l=l+48|0;i=n+32|0;j=n;k=c[b+4>>2]|0;if((k|0)<=0)qa(98144,96880,3968,98156);if(((k>>>0)%3|0|0)!=1)qa(98166,96880,3969,98156);m=j+16|0;d=c[b>>2]|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];e=i+8|0;f=j+8|0;g=j+24|0;b=1;while(1){if((b|0)>=(k|0))break;p=+h[d+(b<<4)+8>>3];t=b+1|0;o=+h[d+(t<<4)+8>>3];r=(+h[d+(t<<4)>>3]+ +h[d+(b<<4)>>3])*.5;h[i>>3]=r;p=(o+p)*.5;h[e>>3]=p;o=+h[(+h[j>>3]<r?j:i)>>3];h[j>>3]=o;s=+h[(+h[f>>3]<p?j:i)+8>>3];h[f>>3]=s;r=+h[(+h[m>>3]>r?m:i)>>3];h[m>>3]=r;p=+h[(+h[g>>3]>p?m:i)+8>>3];h[g>>3]=p;t=d+(b+2<<4)|0;c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];q=+h[i>>3];h[j>>3]=+h[(o<q?j:i)>>3];o=+h[e>>3];h[f>>3]=+h[(s<o?j:i)+8>>3];h[m>>3]=+h[(r>q?m:i)>>3];h[g>>3]=+h[(p>o?m:i)+8>>3];b=b+3|0}c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];c[a+16>>2]=c[j+16>>2];c[a+20>>2]=c[j+20>>2];c[a+24>>2]=c[j+24>>2];c[a+28>>2]=c[j+28>>2];l=n;return}function VG(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;q=+h[a>>3];r=+h[c>>3];k=!(q>=r);if((!k?q<=+h[c+16>>3]:0)?(e=+h[a+8>>3],e>=+h[c+8>>3]):0)i=e<=+h[c+24>>3];else i=0;e=+h[b>>3];if((e>=r?e<=+h[c+16>>3]:0)?(f=+h[b+8>>3],f>=+h[c+8>>3]):0){d=f<=+h[c+24>>3];if(!(i^d))if(i&d)d=1;else l=11;else d=0}else if(i)d=0;else l=11;a:do if((l|0)==11){p=+h[a+8>>3];do if(q==e){r=+h[c+8>>3];if(!(k|p>=r^+h[b+8>>3]>=r^1)?q<=+h[c+16>>3]:0){d=0;break a}}else{j=+h[b+8>>3];if(p==j){if(!(q>=r^e>=r))break;if(!(p>=+h[c+8>>3]))break;if(!(p<=+h[c+24>>3]))break;else{d=0;break a}}o=(j-p)/(e-q);l=q<e;g=l?q:e;e=l?e:q;f=(r-q)*o+p;m=+h[c+8>>3];if(!(!(r>=g)|!(r<=e)|!(f>=m))?f<=+h[c+24>>3]:0){d=0;break a}n=+h[c+16>>3];f=(n-r)*o+f;if(f>=m?!(!(n<=e)|(n>=g?!(f<=+h[c+24>>3]):1)):0){d=0;break a}l=p<j;g=l?p:j;f=l?j:p;e=(m-p)/o+q;if(e>=r?!(!(m<=f)|(!(m>=g)|!(e<=n))):0){d=0;break a}p=+h[c+24>>3];q=(p-m)/o+e;if(q>=r?!(!(p<=f)|(!(p>=g)|!(q<=n))):0){d=0;break a}}while(0);d=-1}while(0);return d|0}function WG(a){a=a|0;var b=0,c=0.0;b=a+16|0;c=+h[b>>3];h[a+32>>3]=c;h[a+48>>3]=c;h[a+40>>3]=+h[a+24>>3];h[a+56>>3]=+h[a+8>>3];h[b>>3]=+h[a>>3];return}function XG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;if((c[46360]|0)!=(d|0)){w$(+(d|0)*.15915494309189535,183248,183256);c[46360]=d}g=+h[b>>3];e=+h[22907];f=+h[b+8>>3];i=+h[22906];h[a>>3]=e*g-i*f;h[a+8>>3]=i*g+f*e;return}function YG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;f=k;e=+h[b>>3];i=b+8|0;g=+h[i>>3];a:do switch(d|0){case 0:{j=11;break}case 90:{h[b>>3]=g;e=-e;j=10;break}case 180:{e=-g;j=10;break}case 270:{h[b>>3]=g;j=10;break}default:{if((d|0)<0){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];ZG(a,f,0-d|0);break a}if((d|0)>360){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];YG(a,f,(d>>>0)%360|0);break a}else{c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];XG(a,f,d);break a}}}while(0);if((j|0)==10){h[i>>3]=e;j=11}if((j|0)==11){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}l=k;return}function ZG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;f=k;e=+h[b>>3];i=b+8|0;g=+h[i>>3];a:do switch(d|0){case 0:{j=11;break}case 90:{h[b>>3]=-g;j=10;break}case 180:{e=-g;j=10;break}case 270:{h[b>>3]=g;j=10;break}default:{if((d|0)<0){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];YG(a,f,0-d|0);break a}if((d|0)>360){c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];ZG(a,f,(d>>>0)%360|0);break a}else{c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];XG(a,f,360-d|0);break a}}}while(0);if((j|0)==10){h[i>>3]=e;j=11}if((j|0)==11){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2]}l=k;return}function _G(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;g=+h[c>>3];d=+h[c+8>>3];f=d+ +h[b>>3];e=g+ +h[b+24>>3];d=d+ +h[b+16>>3];h[a>>3]=g+ +h[b+8>>3];h[a+8>>3]=f;h[a+16>>3]=e;h[a+24>>3]=d;return}function $G(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;f=+h[a>>3];d=+h[b>>3]-f;g=+h[a+8>>3];e=+h[b+8>>3]-g;f=(+h[c+8>>3]-g)*d-(+h[c>>3]-f)*e;f=f*f;return +(f<1.0e-10?0.0:f/(e*e+d*d))}function aH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g+8|0;e=g;a=xx(a,b)|0;if(a|0?(c[f>>2]=e,(N1(a,98183,f)|0)>0):0)h[d>>3]=+h[e>>3];l=g;return}function bH(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;g=n+8|0;i=n;e=uH(96)|0;m=b+16|0;c[(c[m>>2]|0)+8>>2]=e;e=xx(b,98187)|0;if(!e){e=Ta(98196)|0;if(e|0)k=3}else k=3;if((k|0)==3)cb(98208,e|0,1)|0;e=(cH(b)|0)&255;a[(c[m>>2]|0)+115>>0]=e;if(0==0?(e=xx(b,98219)|0,c[46362]=e,(e|0)==0):0)c[46362]=c[46361];f=+LL(b,nx(b,0,98229,0)|0,0.0,0.0);h[c[(c[m>>2]|0)+8>>2]>>3]=f;e=xx(b,98237)|0;a:do if(!e)e=0;else{switch(a[e>>0]|0){case 76:{if(!(b$(e,98245)|0)){e=1;break a}break}case 66:{if(!(b$(e,98248)|0)){e=2;break a}break}case 82:{e=(b$(e,98251)|0)==0;e=e?3:0;break a}default:{e=0;break a}}e=0}while(0);c[(c[m>>2]|0)+116>>2]=e<<2|(d<<24>>24==0?0:e);f=+LL(b,nx(b,0,98254,0)|0,.25,.02);h[i>>3]=f;f=f*72.0;c[(c[m>>2]|0)+248>>2]=~~(f+(f>=0.0?.5:-.5));e=NL(b,nx(b,0,98262,0)|0,0)|0;if(e){c[g>>2]=i;if(N1(e,98183,g)|0){f=+h[i>>3];if(f<.02){h[i>>3]=.02;f=.02}}else{h[i>>3]=.5;f=.5}if(P0(e,98270)|0)a[(c[m>>2]|0)+276>>0]=1}else{h[i>>3]=.5;f=.5}f=f*72.0;c[(c[m>>2]|0)+252>>2]=~~(f+(f>=0.0?.5:-.5));i=(KL(b,nx(b,0,98278,0)|0,0,0)|0)&255;a[(c[m>>2]|0)+243>>0]=i;i=aM(NL(b,nx(b,0,98288,0)|0,0)|0,20572,20588)|0;c[(c[m>>2]|0)+244>>2]=i;dH(b);i=eH(b,98298,(c[(c[m>>2]|0)+8>>2]|0)+64|0)|0;e=c[(c[m>>2]|0)+8>>2]|0;a[e+80>>0]=i;eH(b,98303,e+48|0)|0;e=QL(xx(b,98308)|0)|0;a[(c[(c[m>>2]|0)+8>>2]|0)+82>>0]=e;e=xx(b,98315)|0;do if(!e){e=xx(b,98322)|0;if(e|0){e=(a[e>>0]|32)<<24>>24==108&1;k=27;break}e=xx(b,98334)|0;if(e|0){e=QL(e)|0;k=27}}else{e=(a2(e)|0)==90&1;k=27}while(0);if((k|0)==27)a[(c[(c[m>>2]|0)+8>>2]|0)+81>>0]=e;c[46364]=aM(xx(b,98344)|0,20604,20620)|0;a[191874]=QL(xx(b,98356)|0)|0;c[46367]=0;c[46368]=0;h[(c[(c[m>>2]|0)+8>>2]|0)+24>>3]=0.0;e=xx(b,98368)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0)k=32;else k=30;if(((k|0)==30?(j=xx(b,98372)|0,j|0):0)?a[j>>0]|0:0){e=j;k=32}if((k|0)==32){f=+b2(e);h[(c[(c[m>>2]|0)+8>>2]|0)+24>>3]=f}fH(b);h[22910]=1.e+37;c[46370]=nx(b,0,98383,0)|0;c[46373]=nx(b,0,137952,0)|0;c[46374]=nx(b,0,102470,0)|0;c[46375]=nx(b,1,137966,0)|0;c[46376]=nx(b,1,138034,0)|0;c[46377]=nx(b,1,105204,0)|0;c[46378]=nx(b,1,137741,0)|0;c[46379]=nx(b,1,98392,0)|0;c[46387]=nx(b,1,138e3,0)|0;c[46380]=nx(b,1,98402,0)|0;c[46381]=nx(b,1,98411,0)|0;c[46382]=nx(b,1,98420,0)|0;k=nx(b,1,105198,0)|0;c[46384]=k;if(!k)c[46384]=nx(b,1,105198,102467)|0;c[46385]=nx(b,1,98430,0)|0;c[46388]=nx(b,1,98278,0)|0;c[46402]=nx(b,1,98437,0)|0;c[46391]=nx(b,1,98383,0)|0;c[46383]=nx(b,1,102470,0)|0;c[46389]=nx(b,1,137994,0)|0;c[46390]=nx(b,1,98446,0)|0;c[46393]=nx(b,1,98458,0)|0;c[46392]=nx(b,1,98322,0)|0;c[46394]=nx(b,1,98463,0)|0;c[46395]=nx(b,1,137942,0)|0;c[46396]=nx(b,1,134215,0)|0;c[46386]=nx(b,1,98474,0)|0;c[46397]=nx(b,1,98484,0)|0;c[46398]=nx(b,1,98490,0)|0;c[46399]=nx(b,1,98496,0)|0;c[46400]=nx(b,1,98504,0)|0;c[46401]=nx(b,1,98513,0)|0;c[46403]=nx(b,1,137952,0)|0;c[46404]=nx(b,2,98515,0)|0;c[46406]=nx(b,2,137741,0)|0;c[46407]=nx(b,2,98392,0)|0;c[46409]=nx(b,2,98402,0)|0;c[46410]=nx(b,2,98411,0)|0;c[46411]=nx(b,2,98420,0)|0;c[46412]=nx(b,2,105198,0)|0;c[46413]=nx(b,2,98430,0)|0;c[46422]=nx(b,2,98522,0)|0;c[46414]=nx(b,2,98533,0)|0;c[46425]=nx(b,2,98537,0)|0;c[46426]=nx(b,2,98547,0)|0;c[46427]=nx(b,2,98557,0)|0;c[46428]=nx(b,2,98567,0)|0;c[46429]=nx(b,2,98577,0)|0;c[46430]=nx(b,2,98591,0)|0;c[46431]=nx(b,2,98605,0)|0;c[46432]=nx(b,2,98620,0)|0;c[46433]=nx(b,2,98634,0)|0;c[46405]=nx(b,2,98645,0)|0;c[46417]=nx(b,2,98278,0)|0;c[46415]=nx(b,2,138e3,0)|0;c[46416]=nx(b,2,98652,0)|0;c[46418]=nx(b,2,98661,0)|0;c[46419]=nx(b,2,98671,0)|0;c[46420]=nx(b,2,98484,0)|0;c[46421]=nx(b,2,98496,0)|0;c[46434]=nx(b,2,98682,0)|0;c[46435]=nx(b,2,98691,0)|0;c[46436]=nx(b,2,98437,0)|0;e=ME(b)|0;c[(c[(c[m>>2]|0)+8>>2]|0)+88>>2]=e;e=xx(b,137978)|0;if(e|0?a[e>>0]|0:0){b=pH(e,b)|0;c[(c[(c[m>>2]|0)+8>>2]|0)+92>>2]=b}l=n;return}function cH(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;a=OL(a,nx(a,0,98781,0)|0,98789)|0;if(((((((O$(a,98795)|0)!=0?(O$(a,98803)|0)!=0:0)?(O$(a,98810)|0)!=0:0)?(O$(a,98813)|0)!=0:0)?(O$(a,98824)|0)!=0:0)?(O$(a,98835)|0)!=0:0)?(O$(a,98845)|0)!=0:0)if((O$(a,98856)|0)!=0?(O$(a,98862)|0)!=0:0)if((O$(a,98789)|0)!=0?(O$(a,98867)|0)!=0:0){c[b>>2]=a;Pw(0,98872,b)|0;a=0}else a=0;else a=2;else a=1;l=d;return a|0}function dH(b){b=b|0;var d=0.0,e=0,f=0;e=xx(b,98739)|0;a:do if(e|0?(f=a[e>>0]|0,f<<24>>24):0)switch(f<<24>>24|0){case 97:{if(f<<24>>24!=97)break a;if(b$(e,98745)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=4;break a}case 99:{if(f<<24>>24!=99)break a;if(b$(e,98750)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=3;break a}case 101:{if(f<<24>>24!=101)break a;if(b$(e,98759)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=5;break a}case 102:{if(f<<24>>24!=102)break a;if(b$(e,98766)|0)break a;c[(c[(c[b+16>>2]|0)+8>>2]|0)+84>>2]=2;break a}default:{d=+b2(e);if(!(d>0.0))break a;b=c[(c[b+16>>2]|0)+8>>2]|0;c[b+84>>2]=1;h[b+16>>3]=d;break a}}while(0);return}function eH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;m=o+32|0;i=o+16|0;k=o+8|0;j=o;n=o+40|0;a[n>>0]=0;b=xx(b,d)|0;do if(b){c[i>>2]=k;c[i+4>>2]=j;c[i+8>>2]=n;i=(N1(b,98723,i)|0)>1;g=+h[k>>3];f=+h[j>>3];if(i&g>0.0&f>0.0){g=g*72.0;h[e>>3]=+(~~(g+(g>=0.0?.5:-.5))|0);g=f*72.0;h[e+8>>3]=+(~~(g+(g>=0.0?.5:-.5))|0);b=(a[n>>0]|0)==33;break}a[n>>0]=0;c[m>>2]=k;c[m+4>>2]=n;m=(N1(b,98733,m)|0)>0;f=+h[k>>3];if(m&f>0.0){g=f*72.0;g=+(~~(g+(g>=0.0?.5:-.5))|0);h[e>>3]=g;h[e+8>>3]=g;b=(a[n>>0]|0)==33}else b=0}else b=0;while(0);l=o;return b&1|0}function fH(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0;d=xx(b,105198)|0;do if(d|0?a[d>>0]|0:0){e=(c[(c[b+60>>2]|0)+16>>2]|0)+113|0;a[e>>0]=a[e>>0]|8;e=(Rz(d)|0)!=0;g=+LL(b,nx(b,0,98402,0)|0,14.0,1.0);i=OL(b,nx(b,0,98411,0)|0,104968)|0;d=kH(b,d,e?2:0,g,i,OL(b,nx(b,0,98420,0)|0,134232)|0)|0;i=b+16|0;c[(c[i>>2]|0)+12>>2]=d;d=xx(b,102602)|0;e=(d|0)!=0;do if((fz(b)|0)==(b|0)){if(e?(a[d>>0]|0)==116:0){d=1;break}d=0}else{if(e?(a[d>>0]|0)==98:0){d=0;break}d=1}while(0);e=xx(b,98700)|0;a:do if(e)switch(a[e>>0]|0){case 108:{d=d|2;break a}case 114:{d=d|4;break a}default:break a}while(0);a[(c[i>>2]|0)+275>>0]=d;if((fz(b)|0)!=(b|0)){d=c[(c[i>>2]|0)+12>>2]|0;f=+h[d+24>>3]+16.0;g=+h[d+32>>3]+8.0;b=(c[(c[(fz(b)|0)+16>>2]|0)+116>>2]&1|0)==0;d=c[i>>2]|0;e=a[d+275>>0]<<1&2;if(b){b=e&255;h[d+48+(b<<4)>>3]=f;h[d+48+(b<<4)+8>>3]=g;break}else{b=(e^3)&255;h[d+48+(b<<4)>>3]=g;h[d+48+(b<<4)+8>>3]=f;break}}}while(0);return}function gH(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+8>>2]|0;do if(!b)b=d;else{d=c[b+88>>2]|0;if(d){pE(d);d=c[e>>2]|0;b=c[d+8>>2]|0;if(!b){b=d;break}}D_(c[b+92>>2]|0);b=c[e>>2]|0}while(0);D_(c[b+8>>2]|0);e=c[e>>2]|0;c[e+8>>2]=0;nH(c[e+12>>2]|0);Gz(a,0,134401);return}function hH(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;switch(a|0){case 0:{a=98945;break}case 1:{a=98813;break}case 2:{a=98951;break}default:{c[b>>2]=a;Pw(1,98915,b)|0;a=98945}}l=d;return a|0}function iH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=c[d>>2]|0;l=d+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;if(a[f>>0]|0){i=vH((W_(f)|0)+1|0)|0;a[i>>0]=0;j=d+12|0;e=i;a:while(1){b:while(1){h=f+1|0;g=a[f>>0]|0;if(!(g<<24>>24))break a;if(!(g<<24>>24==-1|((g&255)<161|(c[j>>2]|0)!=2))){a[e>>0]=g;h=a[h>>0]|0;g=e+2|0;a[e+1>>0]=h;if(!(h<<24>>24)){e=g;break a}else{e=g;f=f+2|0;continue}}switch(g<<24>>24){case 92:break b;case 10:{k=12;break b}default:{}}a[e>>0]=g;e=e+1|0;f=h}if((k|0)==12){k=0;f=e+1|0;a[e>>0]=0;jH(b,d,i,110);e=f;i=f;f=h;continue}g=a[h>>0]|0;switch(g<<24>>24|0){case 114:case 108:case 110:{g=e+1|0;a[e>>0]=0;jH(b,d,i,a[h>>0]|0);e=g;break}default:{a[e>>0]=g;e=e+1|0;g=i}}i=g;f=(a[h>>0]|0)==0?h:f+2|0}if((i|0)!=(e|0)){a[e>>0]=0;jH(b,d,i,110)}d=d+40|0;c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];c[d+12>>2]=c[l+12>>2]}return}function jH(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+32|0;q=s+16|0;p=s;r=e+76|0;k=b[r>>1]|0;o=e+72|0;m=c[o>>2]|0;if(!m)n=uH((k*56|0)+112|0)|0;else n=wH(m,k+2|0,56,k+1|0)|0;c[o>>2]=n;k=b[r>>1]|0;m=n+(k*56|0)|0;c[m>>2]=f;a[n+(k*56|0)+48>>0]=g;if((f|0)!=0?(a[f>>0]|0)!=0:0){c[45824]=c[e+4>>2];h[22914]=+h[e+16>>3];g=c[d+144>>2]|0;c[n+(k*56|0)+4>>2]=nb[c[g>>2]&63](g,183296,1)|0;wL(p,d,m);j=+h[p>>3];h[q>>3]=j;i=+h[p+8>>3]}else{h[q>>3]=0.0;i=+(~~(+h[e+16>>3]*1.2)|0);h[n+(k*56|0)+40>>3]=i;j=0.0}b[r>>1]=(b[r>>1]|0)+1<<16>>16;r=e+24|0;h[r>>3]=+h[(+h[r>>3]>j?r:q)>>3];r=e+32|0;h[r>>3]=+h[r>>3]+i;l=s;return}function kH(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+32|0;r=u+16|0;q=u+8|0;p=u;t=uH(88)|0;switch(pz(b)|0){case 0:{m=0;s=c[b+60>>2]|0;n=b;o=0;break}case 1:{m=0;s=fz(ez(b)|0)|0;n=0;o=b;break}case 2:{m=b;s=fz(ez(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)|0;n=0;o=0;break}default:{m=0;s=0;n=0;o=0}}c[t+4>>2]=i;c[t+8>>2]=j;h[t+16>>3]=g;k=s+16|0;j=t+12|0;c[j>>2]=d[(c[k>>2]|0)+115>>0];a:do if(f&4){c[t>>2]=n1(e)|0;if(f&2|0)a[t+82>>0]=1}else switch(f|0){case 2:{c[t>>2]=n1(e)|0;a[t+82>>0]=1;if(!(kR(b,t)|0))break a;switch(pz(b)|0){case 0:{c[p>>2]=ry(n)|0;Pw(3,98957,p)|0;break a}case 1:{c[q>>2]=ry(o)|0;Pw(3,98979,q)|0;break a}case 2:{p=ry(c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0)|0;q=(ey(s)|0)!=0;s=ry(c[((c[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0)|0;c[r>>2]=p;c[r+4>>2]=q?134656:138665;c[r+8>>2]=s;Pw(3,99e3,r)|0;break a}default:break a}}case 0:{i=lH(e,b,0)|0;c[t>>2]=i;if((c[j>>2]|0)==1)i=RM(i)|0;else i=OM(i,s)|0;D_(c[t>>2]|0);c[t>>2]=i;iH(c[(c[k>>2]|0)+144>>2]|0,t);break a}default:qa(99027,99043,166,99052)}while(0);l=u;return t|0}function lH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;switch(pz(d)|0){case 0:{i=ry(d)|0;g=W_(i)|0;f=c[(c[d+16>>2]|0)+12>>2]|0;if(f){f=c[f>>2]|0;if(!b){v=0;t=2;u=2;s=2;h=2;y=99075;m=99072;j=102467;o=191979;q=191979;p=0;r=0;n=2;w=f;x=99069}else{v=0;t=2;u=2;s=2;h=2;y=99075;m=99072;j=102467;o=191979;q=191979;p=0;r=0;n=W_(f)|0;w=f;x=99069}}else{v=0;t=2;u=2;s=2;h=2;y=99075;m=99072;j=102467;o=191979;q=191979;p=0;r=0;n=2;w=99063;x=99069}break}case 1:{i=ry(ez(d)|0)|0;g=W_(i)|0;j=ry(d)|0;h=W_(j)|0;f=c[(c[d+16>>2]|0)+104>>2]|0;if(f){f=c[f>>2]|0;if(!b){v=0;t=2;u=2;s=2;y=99075;m=99072;o=191979;q=191979;p=0;r=0;n=2;w=f;x=99069}else{v=0;t=2;u=2;s=2;y=99075;m=99072;o=191979;q=191979;p=0;r=0;n=W_(f)|0;w=f;x=99069}}else{v=0;t=2;u=2;s=2;y=99075;m=99072;o=191979;q=191979;p=0;r=0;n=2;w=99063;x=99069}break}case 2:{h=d+48|0;i=ry(fz(ez(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0)|0)|0;g=W_(i)|0;l=ry(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0;k=W_(l)|0;f=d+16|0;q=c[(c[f>>2]|0)+52>>2]|0;if(!q)r=0;else r=W_(q)|0;m=ry(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;f=c[f>>2]|0;o=c[f+92>>2]|0;if(!o)p=0;else p=W_(o)|0;j=W_(m)|0;f=c[f+96>>2]|0;if(f){f=c[f>>2]|0;if(!b)n=2;else n=W_(f)|0}else{n=2;f=99063}x=(ey(fz(ez(c[((c[d>>2]&3|0)==3?d:h)+40>>2]|0)|0)|0)|0)==0;v=1;t=k;u=j;s=k+2+(r|0?r+1|0:0)+j+(p|0?p+1|0:0)|0;h=2;y=l;j=102467;w=f;x=x?138665:134656;break}default:{v=0;t=2;u=2;s=2;h=2;g=2;y=99075;m=99072;j=102467;i=99066;o=191979;q=191979;p=0;r=0;n=2;w=99063;x=99069}}e=(e|0)==0;l=0;f=b;a:while(1){d=f+1|0;b:do switch(a[f>>0]|0){case 0:break a;case 92:{f=f+2|0;switch(a[d>>0]|0){case 78:{k=h;break b}case 71:{k=g;break b}case 69:{k=s;break b}case 72:{k=u;break b}case 84:{k=t;break b}case 76:{k=n;break b}case 92:{if(!e){k=1;break b}break}default:{}}k=2;break}default:{k=1;f=d}}while(0);l=l+k|0}s=vH(l+1|0)|0;n=(v|0)==0;l=(r|0)==0;d=(p|0)==0;f=s;g=b;c:while(1){k=g+1|0;h=a[g>>0]|0;switch(h<<24>>24){case 0:break c;case 92:break;default:{a[f>>0]=h;f=f+1|0;g=k;continue c}}h=g+2|0;g=a[k>>0]|0;switch(g<<24>>24|0){case 71:{g=i;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 78:{g=j;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 69:{if(n){g=h;continue c}else g=y;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24))break;g=g+1|0;f=f+1|0}if(l)g=x;else{a[f>>0]=58;g=q;while(1){f=f+1|0;b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=x;break}else g=g+1|0}}while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=m;break}g=g+1|0;f=f+1|0}while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24))break;g=g+1|0;f=f+1|0}if(d){g=h;continue c}a[f>>0]=58;g=o;while(1){f=f+1|0;b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}else g=g+1|0}}case 84:{g=y;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}g=g+1|0;f=f+1|0}}case 72:{g=m;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}f=f+1|0;g=g+1|0}}case 76:{g=w;while(1){b=a[g>>0]|0;a[f>>0]=b;if(!(b<<24>>24)){g=h;continue c}f=f+1|0;g=g+1|0}}case 92:{if(!e){a[f>>0]=92;f=f+1|0;g=h;continue c}break}default:{}}a[f>>0]=92;a[f+1>>0]=g;f=f+2|0;g=h}a[f>>0]=0;return s|0}function mH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(a|0){d=a;e=0;while(1){if((e|0)>=(b|0))break;if(!e)D_(c[d>>2]|0);g=c[d+8>>2]|0;if(g|0?(f=c[d+12>>2]|0,f|0):0)tb[f&127](g);d=d+56|0;e=e+1|0}D_(a)}return}function nH(d){d=d|0;var e=0;if(d|0){D_(c[d>>2]|0);e=d+72|0;if(a[d+82>>0]|0){e=c[e>>2]|0;if(e|0)XQ(e,1)}else mH(c[e>>2]|0,b[d+76>>1]|0);D_(d)}return}function oH(d,e,f){d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+32|0;q=u+16|0;r=u;k=c[d+16>>2]|0;s=k+12|0;t=c[s>>2]|0;c[s>>2]=e;if(!(a[f+82>>0]|0)){p=f+76|0;if((b[p>>1]|0)>=1){RO(d,0);UO(d,c[f+8>>2]|0);switch(a[f+80>>0]|0){case 116:{j=+h[f+64>>3];g=+h[f+48>>3]*.5+j;break}case 98:{j=+h[f+64>>3];g=+h[f+48>>3]*-.5+j+ +h[f+32>>3];break}default:{j=+h[f+64>>3];g=+h[f+32>>3]*.5+j}}g=g-+h[f+16>>3];o=r+8|0;h[o>>3]=g;if(b[k+260>>1]&512)h[o>>3]=g-j;m=f+72|0;n=f+56|0;i=f+40|0;e=0;while(1){if((e|0)>=(b[p>>1]|0))break;k=c[m>>2]|0;switch(a[k+(e*56|0)+48>>0]|0){case 108:{g=+h[n>>3]-+h[i>>3]*.5;break}case 114:{g=+h[i>>3]*.5+ +h[n>>3];break}default:g=+h[n>>3]}h[r>>3]=g;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];TO(d,q,k+(e*56|0)|0);h[o>>3]=+h[o>>3]-+h[(c[m>>2]|0)+(e*56|0)+40>>3];e=e+1|0}SO(d);i=18}}else{CQ(d,c[f+72>>2]|0,f);i=18}if((i|0)==18)c[s>>2]=t;l=u;return}function pH(a,b){a=a|0;b=b|0;return lH(a,b,1)|0}function qH(a){a=a|0;return rH(a,0)|0}function rH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[46437]|0;if(!e){c[46438]=64;e=vH(64)|0;c[46437]=e}j=d<<24>>24==0;i=0;f=0;h=b;while(1){if(!h)break;d=a[h>>0]|0;if(!(d<<24>>24))break;b=c[46438]|0;if((i|0)>(b+-8|0)){e=b<<1;c[46438]=e;e=xH(c[46437]|0,e)|0;c[46437]=e;e=e+i|0;d=a[h>>0]|0}a:do switch(d<<24>>24){case 38:{if(j?(sH(h)|0)!=0:0)k=18;else{f=5;d=99104}break}case 60:{f=4;d=99127;break}case 62:{f=4;d=99110;break}case 45:{f=5;d=99121;break}default:{if((f|0)!=0&d<<24>>24==32)if((a[f>>0]|0)==32){f=6;d=99097;break a}else{k=18;break a}switch(d<<24>>24){case 34:{f=6;d=99090;break a}case 39:{f=5;d=99115;break a}case 10:if(j){k=18;break a}else{f=5;d=99084;break a}default:{k=18;break a}}}}while(0);if((k|0)==18){k=0;d=j|d<<24>>24!=13;f=d?1:5;d=d?h:99078}g=e+f|0;b=f;while(1){if(!b)break;a[e>>0]=a[d>>0]|0;b=b+-1|0;d=d+1|0;e=e+1|0}b=h;i=f+i|0;e=g;h=h+1|0;f=b}a[e>>0]=0;return c[46437]|0}function sH(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==35){d=b+2|0;c=a[d>>0]|0;switch(c<<24>>24){case 88:case 120:break;default:{b=d;while(1){d=b+1|0;if((c+-48&255)>=10)break a;b=d;c=a[d>>0]|0}}}d=b+3|0;while(1){c=a[d>>0]|0;if((c+-48&255)>=10)switch(c<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break a}d=d+1|0}}else while(1){b=d+1|0;if(((c&-33)+-65&255)>=26)break a;d=b;c=a[b>>0]|0}while(0);return c<<24>>24==59|0}function tH(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[46439]|0;if(!d){c[46440]=64;d=vH(64)|0;c[46439]=d;i=0}else i=0;while(1){if(!b)break;e=a[b>>0]|0;if(!(e<<24>>24))break;f=c[46440]|0;if((i|0)>(f+-8|0)){d=f<<1;c[46440]=d;d=xH(c[46439]|0,d)|0;c[46439]=d;d=d+i|0;e=a[b>>0]|0}switch(e<<24>>24){case 38:{if(!(sH(b)|0)){g=5;e=99104}else j=12;break}case 60:{g=4;e=99127;break}case 62:{g=4;e=99110;break}case 34:{g=6;e=99090;break}case 39:{g=5;e=99115;break}default:j=12}if((j|0)==12){j=0;g=1;e=b}h=d+g|0;f=g;while(1){if(!f)break;a[d>>0]=a[e>>0]|0;f=f+-1|0;e=e+1|0;d=d+1|0}i=g+i|0;d=h;b=b+1|0}a[d>>0]=0;return c[46439]|0}function uH(a){a=a|0;var b=0;if(!a)a=0;else{b=vH(a)|0;H3(b|0,0,a|0)|0;a=b}return a|0}function vH(a){a=a|0;if(a){a=C_(a)|0;if(!a){E1(108658,14,1,c[15686]|0)|0;a=0}}else a=0;return a|0}function wH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=F_(a,O(d,b)|0)|0;if(!((b|0)!=0&(a|0)==0)){if(b>>>0>e>>>0)H3(a+(O(e,d)|0)|0,0,O(b-e|0,d)|0)|0}else E1(108658,14,1,c[15686]|0)|0;return a|0}function xH(a,b){a=a|0;b=b|0;a=F_(a,b)|0;if((b|0)!=0&(a|0)==0)E1(108658,14,1,c[15686]|0)|0;return a|0}\n  function ol(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+320|0;H=M+296|0;G=M+280|0;x=M+136|0;w=M+120|0;n=M+104|0;i=M+88|0;f=M+80|0;E=M+16|0;z=M;j=M+264|0;k=M+248|0;m=M+232|0;o=M+216|0;A=M+200|0;B=M+184|0;y=M+168|0;D=M+152|0;g=pl(xx(a,87703)|0,b)|0;q=pl(xx(a,87709)|0,b)|0;r=(q|0)!=0;b=(g|0)!=0;do if(b|r?(L=a+16|0,e=c[(c[L>>2]|0)+8>>2]|0,e|0):0){if((c[e+4>>2]|0)>1){K=ry(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)|0;L=ry(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)|0;c[f>>2]=K;c[f+4>>2]=L;Pw(0,87715,f)|0;break}I=c[e>>2]|0;e=c[I+4>>2]|0;p=c[a>>2]&3;s=a+-48|0;t=c[((p|0)==2?a:s)+40>>2]|0;u=a+48|0;p=c[((p|0)==3?a:u)+40>>2]|0;J=vH(48)|0;v=I+12|0;c[J+12>>2]=c[v>>2];C=I+8|0;c[J+8>>2]=c[C>>2];do if(b){h=(c[g+16>>2]|0)+16|0;g=(c[t+16>>2]|0)+16|0;c[H>>2]=c[g>>2];c[H+4>>2]=c[g+4>>2];c[H+8>>2]=c[g+8>>2];c[H+12>>2]=c[g+12>>2];if(!(ql(H,h)|0)){o=ry(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;F=ry(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=xx(a,87703)|0;c[i>>2]=o;c[i+4>>2]=F;c[i+8>>2]=K;Pw(0,87756,i)|0;K=26;break}b=c[I>>2]|0;c[H>>2]=c[b>>2];c[H+4>>2]=c[b+4>>2];c[H+8>>2]=c[b+8>>2];c[H+12>>2]=c[b+12>>2];if(ql(H,h)|0){F=(c[p+16>>2]|0)+16|0;c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[H+8>>2]=c[F+8>>2];c[H+12>>2]=c[F+12>>2];if(ql(H,h)|0){o=ry(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;F=ry(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=xx(a,87703)|0;c[n>>2]=o;c[n+4>>2]=F;c[n+8>>2]=K;Pw(0,87799,n)|0;K=26;break}if(!(c[C>>2]|0))qa(87841,87852,369,87863);o=I+16|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];rl(z,G,H,h);F=(c[I>>2]|0)+48|0;c[F>>2]=c[z>>2];c[F+4>>2]=c[z+4>>2];c[F+8>>2]=c[z+8>>2];c[F+12>>2]=c[z+12>>2];F=(c[I>>2]|0)+16|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];sl(j,G,H);c[F>>2]=c[j>>2];c[F+4>>2]=c[j+4>>2];c[F+8>>2]=c[j+8>>2];c[F+12>>2]=c[j+12>>2];F=c[I>>2]|0;b=F+16|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[o>>2];c[H+4>>2]=c[o+4>>2];c[H+8>>2]=c[o+8>>2];c[H+12>>2]=c[o+12>>2];sl(k,G,H);c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2];F=c[I>>2]|0;b=F+32|0;F=F+16|0;c[G>>2]=c[F>>2];c[G+4>>2]=c[F+4>>2];c[G+8>>2]=c[F+8>>2];c[G+12>>2]=c[F+12>>2];c[H>>2]=c[z>>2];c[H+4>>2]=c[z+4>>2];c[H+8>>2]=c[z+8>>2];c[H+12>>2]=c[z+12>>2];sl(m,G,H);c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2];b=c[v>>2]|0;if(!b){F=3;break}F=(FE(a,c[I>>2]|0,0,0,J,b)|0)+3|0;break}g=e+-1|0;b=0;while(1){if((b|0)>=(g|0))break;if(tl((c[I>>2]|0)+(b<<4)|0,h)|0)break;b=b+3|0}e=c[v>>2]|0;f=(e|0)!=0;if((b|0)==(g|0))if(f){F=J+32|0;m=I+32|0;n=(c[I>>2]|0)+(g<<4)|0;c[G>>2]=c[m>>2];c[G+4>>2]=c[m+4>>2];c[G+8>>2]=c[m+8>>2];c[G+12>>2]=c[m+12>>2];c[H>>2]=c[n>>2];c[H+4>>2]=c[n+4>>2];c[H+8>>2]=c[n+8>>2];c[H+12>>2]=c[n+12>>2];rl(o,G,H,h);c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];F=g;break}else qa(87880,87852,387,87863);else{if(f)b=FE(a,c[I>>2]|0,0,b,J,e)|0;F=b+3|0;break}}else K=26;while(0);if((K|0)==26){b=e+-1|0;if(!(c[v>>2]|0))F=b;else{F=J+32|0;o=I+32|0;c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];F=b}}do if(r){f=(c[q+16>>2]|0)+16|0;r=(c[p+16>>2]|0)+16|0;c[H>>2]=c[r>>2];c[H+4>>2]=c[r+4>>2];c[H+8>>2]=c[r+8>>2];c[H+12>>2]=c[r+12>>2];if(!(ql(H,f)|0)){G=ry(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;H=ry(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=xx(a,87709)|0;c[w>>2]=G;c[w+4>>2]=H;c[w+8>>2]=K;Pw(0,87891,w)|0;K=52;break}b=(c[I>>2]|0)+(F<<4)|0;c[H>>2]=c[b>>2];c[H+4>>2]=c[b+4>>2];c[H+8>>2]=c[b+8>>2];c[H+12>>2]=c[b+12>>2];if(ql(H,f)|0){E=(c[t+16>>2]|0)+16|0;c[H>>2]=c[E>>2];c[H+4>>2]=c[E+4>>2];c[H+8>>2]=c[E+8>>2];c[H+12>>2]=c[E+12>>2];if(ql(H,f)|0){G=ry(c[((c[a>>2]&3|0)==3?a:u)+40>>2]|0)|0;H=ry(c[((c[a>>2]&3|0)==2?a:s)+40>>2]|0)|0;K=xx(a,87709)|0;c[x>>2]=G;c[x+4>>2]=H;c[x+8>>2]=K;Pw(0,87934,x)|0;K=52;break}if(!(c[v>>2]|0))qa(87880,87852,429,87863);x=J+32|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];rl(z,G,H,f);d=F+-3|0;E=(c[I>>2]|0)+(d<<4)|0;c[E>>2]=c[z>>2];c[E+4>>2]=c[z+4>>2];c[E+8>>2]=c[z+8>>2];c[E+12>>2]=c[z+12>>2];E=F+-1|0;b=(c[I>>2]|0)+(E<<4)|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];sl(A,G,H);c[b>>2]=c[A>>2];c[b+4>>2]=c[A+4>>2];c[b+8>>2]=c[A+8>>2];c[b+12>>2]=c[A+12>>2];b=c[I>>2]|0;D=b+(F<<4)|0;b=b+(E<<4)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];c[H>>2]=c[x>>2];c[H+4>>2]=c[x+4>>2];c[H+8>>2]=c[x+8>>2];c[H+12>>2]=c[x+12>>2];sl(B,G,H);c[D>>2]=c[B>>2];c[D+4>>2]=c[B+4>>2];c[D+8>>2]=c[B+8>>2];c[D+12>>2]=c[B+12>>2];D=c[I>>2]|0;b=D+(F+-2<<4)|0;E=D+(E<<4)|0;c[G>>2]=c[E>>2];c[G+4>>2]=c[E+4>>2];c[G+8>>2]=c[E+8>>2];c[G+12>>2]=c[E+12>>2];c[H>>2]=c[z>>2];c[H+4>>2]=c[z+4>>2];c[H+8>>2]=c[z+8>>2];c[H+12>>2]=c[z+12>>2];sl(y,G,H);c[b>>2]=c[y>>2];c[b+4>>2]=c[y+4>>2];c[b+8>>2]=c[y+8>>2];c[b+12>>2]=c[y+12>>2];b=c[C>>2]|0;if(!b)break;d=HE(a,c[I>>2]|0,d,d,J,b)|0;break}e=F;while(1){if((e|0)>0)b=0;else break;while(1){if((b|0)==4)break;B=E+(b<<4)|0;A=(c[I>>2]|0)+(e-b<<4)|0;c[B>>2]=c[A>>2];c[B+4>>2]=c[A+4>>2];c[B+8>>2]=c[A+8>>2];c[B+12>>2]=c[A+12>>2];b=b+1|0}if(tl(E,f)|0){b=0;K=43;break}e=e+-3|0}a:do if((K|0)==43)while(1){K=0;if((b|0)==4)break a;K=(c[I>>2]|0)+(e-b<<4)|0;B=E+(b<<4)|0;c[K>>2]=c[B>>2];c[K+4>>2]=c[B+4>>2];c[K+8>>2]=c[B+8>>2];c[K+12>>2]=c[B+12>>2];b=b+1|0;K=43}while(0);if(e|0){d=e+-3|0;b=c[C>>2]|0;if(!b)break;d=HE(a,c[I>>2]|0,d,F+-3|0,J,b)|0;break}if(!(c[C>>2]|0))qa(87841,87852,452,87863);else{d=J+16|0;E=I+16|0;a=c[I>>2]|0;c[G>>2]=c[E>>2];c[G+4>>2]=c[E+4>>2];c[G+8>>2]=c[E+8>>2];c[G+12>>2]=c[E+12>>2];c[H>>2]=c[a>>2];c[H+4>>2]=c[a+4>>2];c[H+8>>2]=c[a+8>>2];c[H+12>>2]=c[a+12>>2];rl(D,G,H,f);c[d>>2]=c[D>>2];c[d+4>>2]=c[D+4>>2];c[d+8>>2]=c[D+8>>2];c[d+12>>2]=c[D+12>>2];d=0;break}}else K=52;while(0);if((K|0)==52)if(!(c[C>>2]|0))d=0;else{d=J+16|0;K=I+16|0;c[d>>2]=c[K>>2];c[d+4>>2]=c[K+4>>2];c[d+8>>2]=c[K+8>>2];c[d+12>>2]=c[K+12>>2];d=0}b=F-d+1|0;e=J+4|0;c[e>>2]=b;c[J>>2]=vH(b<<4)|0;b=0;while(1){if((b|0)>=(c[e>>2]|0))break;K=(c[J>>2]|0)+(b<<4)|0;a=(c[I>>2]|0)+(d<<4)|0;c[K>>2]=c[a>>2];c[K+4>>2]=c[a+4>>2];c[K+8>>2]=c[a+8>>2];c[K+12>>2]=c[a+12>>2];d=d+1|0;b=b+1|0}D_(c[I>>2]|0);D_(I);c[c[(c[L>>2]|0)+8>>2]>>2]=J}while(0);l=M;return}function pl(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((b|0)!=0?(a[b>>0]|0)!=0:0){d=vM(d,b)|0;if(!d){c[e>>2]=b;Pw(0,88054,e)|0;d=0}}else d=0;l=f;return d|0}function ql(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[a>>3];if((+h[b>>3]<=d?d<=+h[b+16>>3]:0)?(c=+h[a+8>>3],+h[b+8>>3]<=c):0)a=c<=+h[b+24>>3]&1;else a=0;return a|0}function rl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0;C=l;l=l+464|0;n=C+48|0;B=C+32|0;u=C+16|0;v=C;w=C+364|0;x=C+264|0;z=C+164|0;A=C+64|0;q=+h[b>>3];r=+h[b+8>>3];s=+h[d>>3];t=+h[d+8>>3];c[u>>2]=c[e>>2];c[u+4>>2]=c[e+4>>2];c[u+8>>2]=c[e+8>>2];c[u+12>>2]=c[e+12>>2];e=e+16|0;c[v>>2]=c[e>>2];c[v+4>>2]=c[e+4>>2];c[v+8>>2]=c[e+8>>2];c[v+12>>2]=c[e+12>>2];k=+h[u>>3];if((s<k?(f=r+ +(~~((k-q)*(r-t)/(q-s))|0),f>=+h[u+8>>3]):0)?f<=+h[v+8>>3]:0){o=f;p=k}else i=4;do if((i|0)==4){j=+h[v>>3];if(s>j){g=r+ +(~~((j-q)*(r-t)/(q-s))|0);f=+h[u+8>>3];if(g>=f?g<=+h[v+8>>3]:0){o=g;p=j;break}}else f=+h[u+8>>3];if(t<f?(m=q+ +(~~((f-r)*(q-s)/(r-t))|0),!(!(m>=k)|!(m<=j))):0){o=f;p=m;break}f=+h[v+8>>3];if(t>f?(y=q+ +(~~((f-r)*(q-s)/(r-t))|0),!(!(y>=k)|!(y<=j))):0){o=f;p=y;break};c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];w=yl(n,w)|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];x=yl(n,x)|0;c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];z=yl(n,z)|0;c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[n+8>>2]=c[v+8>>2];c[n+12>>2]=c[v+12>>2];A=yl(n,A)|0;c[B>>2]=w;c[B+4>>2]=x;c[B+8>>2]=z;c[B+12>>2]=A;Pw(1,87976,B)|0;qa(135312,87852,78,88028)}while(0);h[a>>3]=p;h[a+8>>3]=o;l=C;return}function sl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function tl(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+80|0;j=m+16|0;k=m;e=0;while(1){if((e|0)==4)break;i=j+(e<<4)|0;g=a+(e<<4)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];e=e+1|0}e=b+8|0;i=b+24|0;d=+ul(a,0.0,1.0,+h[b>>3],+h[e>>3],+h[i>>3]);if(d>=0.0&d<2.0)XL(k,j,3,d,a,0);else d=2.0;g=b+16|0;f=+ul(a,0.0,d>1.0?1.0:d,+h[g>>3],+h[e>>3],+h[i>>3]);if(f>=0.0&f<d){XL(k,j,3,f,a,0);d=f}f=+vl(a,0.0,d>1.0?1.0:d,+h[e>>3],+h[b>>3],+h[g>>3]);if(f>=0.0&f<d){XL(k,j,3,f,a,0);d=f}f=+vl(a,0.0,d>1.0?1.0:d,+h[i>>3],+h[b>>3],+h[g>>3]);if(f>=0.0&f<d){XL(k,j,3,f,a,0);d=f}l=m;return d<2.0|0}function ul(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0.0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m+80|0;k=m+16|0;i=m;a:do if(!(b==c)){switch(xl(a,d)|0){case 0:{b=-1.0;break a}case 1:{if(+B(+(+h[a+48>>3]-d))<=.005){b=+h[a+56>>3];b=!(b>=e)|!(b<=f)?-1.0:c;break a}break}default:{}}XL(i,a,3,.5,j,k);g=(c+b)*.5;b=+ul(j,b,g,d,e,f);if(!(b>=0.0))b=+ul(k,g,c,d,e,f)}while(0);l=m;return +b}function vl(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0.0,i=0,j=0,k=0,m=0;m=l;l=l+144|0;j=m+80|0;k=m+16|0;i=m;a:do if(!(b==c)){switch(wl(a,d)|0){case 0:{b=-1.0;break a}case 1:{if(+B(+(+h[a+56>>3]-d))<=.005){b=+h[a+48>>3];b=!(b>=e)|!(b<=f)?-1.0:c;break a}break}default:{}}XL(i,a,3,.5,j,k);g=(c+b)*.5;b=+vl(j,b,g,d,e,f);if(!(b>=0.0))b=+vl(k,g,c,d,e,f)}while(0);l=m;return +b}function wl(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,i=0;f=+h[a+8>>3];e=f<b?-1:f>b&1;c=1;d=e;e=(e|0)==0&1;while(1){if((c|0)==4)break;f=+h[a+(c<<4)+8>>3];i=f<b?-1:f>b&1;g=e+((d|0)!=0&(i|0)!=(d|0)&1)|0;c=c+1|0;d=i;e=g}return e|0}function xl(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0.0,g=0,i=0;f=+h[a>>3];e=f<b?-1:f>b&1;c=1;d=e;e=(e|0)==0&1;while(1){if((c|0)==4)break;f=+h[a+(c<<4)>>3];i=f<b?-1:f>b&1;g=e+((d|0)!=0&(i|0)!=(d|0)&1)|0;c=c+1|0;d=i;e=g}return e|0}function yl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=l;l=l+16|0;d=c;e=+h[a+8>>3];h[d>>3]=+h[a>>3];h[d+8>>3]=e;Y0(b,88042,d)|0;l=c;return b|0}function zl(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;s=v;u=4;t=C_(40)|0;c[t>>2]=0;r=a+16|0;e=c[r>>2]|0;a:do if(((b[e+238>>1]|0)-(b[e+236>>1]|0)|0)>=2){m=1;d=e;e=c[e+196>>2]|0;b:while(1){n=m+1|0;if(!(c[e+(n<<6)>>2]|0)){q=15;break}else k=0;while(1){h=c[e+(m<<6)>>2]|0;if((k|0)>=(h|0)){m=n;continue b}j=c[(c[e+(m<<6)+4>>2]|0)+(k<<2)>>2]|0;o=0;d=$(20,j|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,u|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;break b}if(d<<24>>24){i=k;d=h;while(1){g=i+1|0;if((g|0)>=(d|0))break;o=0;d=aa(65,j|0,c[(c[e+(m<<6)+4>>2]|0)+(g<<2)>>2]|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,t|0,u|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){d=z;break b}if(!(d<<24>>24))break;d=c[(c[r>>2]|0)+196>>2]|0;i=g;e=d;d=c[d+(m<<6)>>2]|0}if((g-k|0)>1){o=0;na(6,a|0,m|0,k|0,i|0,1);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;break b}}}e=c[r>>2]|0;k=k+1|0;d=e;e=c[e+196>>2]|0}}c:do if((q|0)==15){while(1){if((m|0)>0)k=0;else break;while(1){e=c[d+196>>2]|0;h=c[e+(m<<6)>>2]|0;if((k|0)>=(h|0))break;j=c[(c[e+(m<<6)+4>>2]|0)+(k<<2)>>2]|0;o=0;d=$(21,j|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,u|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){d=z;break c}if(d<<24>>24){i=k;d=h;while(1){g=i+1|0;if((g|0)>=(d|0))break;o=0;d=aa(66,j|0,c[(c[e+(m<<6)+4>>2]|0)+(g<<2)>>2]|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,t|0,u|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){d=z;break c}if(!(d<<24>>24))break;d=c[(c[r>>2]|0)+196>>2]|0;i=g;e=d;d=c[d+(m<<6)>>2]|0}if((g-k|0)>1){o=0;na(6,a|0,m|0,k|0,i|0,0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;break c}}}k=k+1|0;d=c[r>>2]|0}m=m+-1|0;q=15}t=D3(183936,1,t|0,u|0)|0;u=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1)d=z;else d=0}while(0);d:while(1){if(d){o=0;ca(20,3,88082,s|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}else break}else f=1;while(1){d=c[r>>2]|0;if((f|0)>(c[d+180>>2]|0))break a;o=0;ia(99,c[(c[d+184>>2]|0)+(f<<2)>>2]|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,t|0,u|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue d}f=f+1|0}}}while(0);D_(t|0);l=v;return}function Al(b){b=b|0;b=c[b+16>>2]|0;if(((a[b+156>>0]|0)==1?(c[b+176>>2]|0)==1:0)?(c[b+184>>2]|0)==1:0)b=(c[b+104>>2]|0)==0&1;else b=0;return b|0}function Bl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;h=i+40|0;g=i;e=c[c[(c[a+16>>2]|0)+172>>2]>>2]|0;a=c[c[(c[b+16>>2]|0)+172>>2]>>2]|0;if(((Al(b)|0)<<24>>24!=0?(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)==(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0):0)?(Hl(e,a)|0)<<24>>24!=0:0){d=(c[a+16>>2]|0)+16|0;f=g;a=(c[e+16>>2]|0)+16|0;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));f=h;a=d;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));a=(jg(g,h)|0)==0&1}else a=0;l=i;return a|0}function Cl(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=a+16|0;q=c[(c[(c[(c[t>>2]|0)+196>>2]|0)+(b<<6)+4>>2]|0)+(d<<2)>>2]|0;p=d+1|0;m=(f|0)==1;n=q+16|0;l=p;while(1){if((l|0)>(e|0)){g=e;s=p;break}o=c[(c[(c[(c[t>>2]|0)+196>>2]|0)+(b<<6)+4>>2]|0)+(l<<2)>>2]|0;k=o+16|0;a:do if(m)while(1){d=c[k>>2]|0;j=c[c[d+180>>2]>>2]|0;if(!j)break a;h=c[(c[n>>2]|0)+180>>2]|0;i=j+-48|0;f=0;while(1){d=c[h+(f<<2)>>2]|0;if(!d){r=8;break}if((c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)==(c[((c[j>>2]&3|0)==2?j:i)+40>>2]|0))break;else f=f+1|0}if((r|0)==8){r=0;d=ph(q,c[((c[j>>2]&3|0)==2?j:i)+40>>2]|0,j)|0}while(1){f=c[c[(c[k>>2]|0)+172>>2]>>2]|0;if(!f)break;xh(f,d);kh(f)}kh(j)}else while(1){d=c[k>>2]|0;j=c[c[d+172>>2]>>2]|0;if(!j)break a;h=c[(c[n>>2]|0)+172>>2]|0;i=j+48|0;f=0;while(1){d=c[h+(f<<2)>>2]|0;if(!d){r=17;break}if((c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)==(c[((c[j>>2]&3|0)==3?j:i)+40>>2]|0))break;else f=f+1|0}if((r|0)==17){r=0;d=ph(c[((c[j>>2]&3|0)==3?j:i)+40>>2]|0,q,j)|0}while(1){f=c[c[(c[k>>2]|0)+180>>2]>>2]|0;if(!f)break;xh(f,d);kh(f)}kh(j)}while(0);if((c[d+176>>2]|0)!=(0-(c[d+184>>2]|0)|0)){r=23;break}sh(a,o);l=l+1|0}if((r|0)==23)qa(88218,88262,115,88269);while(1){g=g+1|0;d=c[(c[t>>2]|0)+196>>2]|0;f=d+(b<<6)|0;if((g|0)>=(c[f>>2]|0))break;e=c[d+(b<<6)+4>>2]|0;r=c[e+(g<<2)>>2]|0;c[e+(s<<2)>>2]=r;c[(c[r+16>>2]|0)+236>>2]=s;s=s+1|0}c[f>>2]=s;c[(c[d+(b<<6)+4>>2]|0)+(s<<2)>>2]=0;return}function Dl(b){b=b|0;b=c[b+16>>2]|0;if(((a[b+156>>0]|0)==1?(c[b+184>>2]|0)==1:0)?(c[b+176>>2]|0)==1:0)b=(c[b+104>>2]|0)==0&1;else b=0;return b|0}function El(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;h=i+40|0;g=i;e=c[c[(c[a+16>>2]|0)+180>>2]>>2]|0;a=c[c[(c[b+16>>2]|0)+180>>2]>>2]|0;if(((Dl(b)|0)<<24>>24!=0?(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)==(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0):0)?(Hl(e,a)|0)<<24>>24!=0:0){d=(c[a+16>>2]|0)+56|0;f=g;a=(c[e+16>>2]|0)+56|0;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));f=h;a=d;b=f+40|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(b|0));a=(jg(g,h)|0)==0&1}else a=0;l=i;return a|0}function Fl(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;p=r+16|0;o=r;m=d+16|0;f=c[m>>2]|0;e=b[f+236>>1]|0;while(1){if((e|0)>(b[f+238>>1]|0))break;c[(c[f+268>>2]|0)+(e<<2)>>2]=0;e=e+1|0;f=c[m>>2]|0}xj(d);j=Sy(d)|0;while(1){if(!j)break;Gl(d,j);i=Ex(d,j)|0;while(1){if(!i)break;else f=i;while(1){e=c[(c[f+16>>2]|0)+172>>2]|0;if(!e)break;else f=e}h=i+-48|0;while(1){e=f+-48|0;g=c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0;if((c[(c[g+16>>2]|0)+232>>2]|0)>=(c[(c[(c[((c[i>>2]&3|0)==2?i:h)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;Gl(d,g);f=c[c[(c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}i=Gx(d,i)|0}j=Ty(d,j)|0}e=c[m>>2]|0;i=b[e+236>>1]|0;while(1){if((i|0)>(b[e+238>>1]|0)){k=1;n=e;break}e=c[(c[e+268>>2]|0)+(i<<2)>>2]|0;j=c[(c[(c[(ig(d)|0)+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0;f=e+16|0;if((c[j+(c[(c[f>>2]|0)+236>>2]<<2)>>2]|0)!=(e|0)){q=17;break}h=c[(c[(c[(ig(d)|0)+16>>2]|0)+196>>2]|0)+(i<<6)+4>>2]|0;e=c[m>>2]|0;f=c[e+196>>2]|0;c[f+(i<<6)+4>>2]=h+(c[(c[(c[(c[e+268>>2]|0)+(i<<2)>>2]|0)+16>>2]|0)+236>>2]<<2);e=-1;h=0;a:while(1){if((h|0)>=(c[f+(i<<6)>>2]|0))break;f=c[(c[f+(i<<6)+4>>2]|0)+(h<<2)>>2]|0;if(!f)break;g=c[f+16>>2]|0;b:do if(!(a[g+156>>0]|0))if(!(oz(d,f)|0))break a;else e=h;else{f=c[c[g+172>>2]>>2]|0;while(1){if(!f)break b;g=c[(c[f+16>>2]|0)+116>>2]|0;if(!g)break;else f=g}if(oz(d,c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)|0){j=(oz(d,c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)|0)==0;e=j?e:h}}while(0);h=h+1|0;f=c[(c[m>>2]|0)+196>>2]|0}if((e|0)==-1){c[p>>2]=ry(d)|0;c[p+4>>2]=i;Pw(0,88182,p)|0}j=c[m>>2]|0;c[(c[j+196>>2]|0)+(i<<6)>>2]=e+1;i=i+1|0;e=j}if((q|0)==17){p=ry(e)|0;q=c[(c[f>>2]|0)+236>>2]|0;c[o>>2]=p;c[o+4>>2]=q;c[o+8>>2]=i;Pw(1,88124,o)|0;bb(183936,1)}while(1){if((k|0)>(c[n+180>>2]|0))break;Fl(c[(c[n+184>>2]|0)+(k<<2)>>2]|0);k=k+1|0;n=c[m>>2]|0}l=r;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[b+16>>2]|0;a=(c[(c[a+16>>2]|0)+268>>2]|0)+(c[d+232>>2]<<2)|0;e=c[a>>2]|0;if(!((e|0)!=0?(c[(c[e+16>>2]|0)+236>>2]|0)<=(c[d+236>>2]|0):0))c[a>>2]=b;return}function Hl(b,d){b=b|0;d=d|0;var e=0,f=0;while(1){f=c[b+16>>2]|0;if(!(a[f+112>>0]|0))break;b=c[f+116>>2]|0}while(1){e=c[d+16>>2]|0;if(!(a[e+112>>0]|0))break;d=c[e+116>>2]|0}if((a[f+153>>0]|0)==0?(a[e+153>>0]|0)==0:0){f=c[d>>2]&3;e=c[b>>2]&3;b=(O((c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0,(c[(c[(c[((f|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((f|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)|0)>0&1}else b=0;return b|0}function Il(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+544|0;j=k+528|0;Jl(j,k+512|0,k);e=(a[190690]|0)+1<<24>>24;a[190690]=e<<24>>24==0?1:e;e=c[b+16>>2]|0;c[e+220>>2]=0;c[e+232>>2]=0;e=(d|0)>0;d=Sy(b)|0;while(1){if(!d)break;if(e?(h=c[d+16>>2]|0,i=c[h+212>>2]|0,(i|0)!=0):0){g=c[(c[(c[i+16>>2]|0)+268>>2]|0)+(c[h+232>>2]<<2)>>2]|0;f=7}else f=6;if((f|0)==6?(f=0,(d|0)==(SL(d)|0)):0){g=d;f=7}if((f|0)==7?(0,(a[(c[g+16>>2]|0)+157>>0]|0)!=(a[190690]|0)):0){Kl(b);Ll(j,b,g);Ml(b)}d=Ty(b,d)|0}Nl(j);l=k;return}function Jl(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=d;c[b+4>>2]=d+512;c[b+12>>2]=0;c[b+8>>2]=0;c[a>>2]=b;c[a+4>>2]=b;c[a+8>>2]=d;return}function Kl(a){a=a|0;c[(c[a+16>>2]|0)+192>>2]=0;c[46023]=0;return}function Ll(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+32|0;p=q;Ol(b,e);k=p+8|0;m=p+16|0;n=p+24|0;a:while(1){o=Pl(b)|0;if(!o)break;e=o+16|0;if((a[(c[e>>2]|0)+157>>0]|0)==(a[190690]|0))continue;Ql(d,o);h=c[e>>2]|0;g=h+180|0;j=c[g+4>>2]|0;i=p;c[i>>2]=c[g>>2];c[i+4>>2]=j;i=h+172|0;j=c[i+4>>2]|0;g=k;c[g>>2]=c[i>>2];c[g+4>>2]=j;g=h+188|0;j=c[g+4>>2]|0;i=m;c[i>>2]=c[g>>2];c[i+4>>2]=j;h=h+196|0;i=c[h+4>>2]|0;j=n;c[j>>2]=c[h>>2];c[j+4>>2]=i;j=3;while(1){if((j|0)<=-1)continue a;e=c[p+(j<<3)>>2]|0;b:do if(e|0){i=(c[p+(j<<3)+4>>2]|0)+-1|0;h=e+(i<<2)|0;while(1){if((i|0)<=-1)break b;f=c[h>>2]|0;g=c[f>>2]&3;e=c[((g|0)==2?f:f+-48|0)+40>>2]|0;if((e|0)==(o|0))e=c[((g|0)==3?f:f+48|0)+40>>2]|0;if((a[(c[e+16>>2]|0)+157>>0]|0)!=(a[190690]|0)?(e|0)==(SL(e)|0):0)Ol(b,e);h=h+-4|0;i=i+-1|0}}while(0);j=j+-1|0}}l=q;return}function Ml(a){a=a|0;var b=0,d=0,e=0,f=0;d=a+16|0;b=c[d>>2]|0;f=b+220|0;e=c[f>>2]|0;a=e+1|0;c[f>>2]=a;b=c[b+216>>2]|0;if(!b)a=vH(a<<2)|0;else a=xH(b,a<<2)|0;f=c[d>>2]|0;c[f+216>>2]=a;c[a+(e<<2)>>2]=c[f+192>>2];return}function Nl(a){a=a|0;var b=0;a=c[(c[a>>2]|0)+12>>2]|0;while(1){if(!a)break;b=c[a+12>>2]|0;D_(c[a>>2]|0);D_(a);a=b}return}function Ol(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;h=k+8|0;g=k;j=b+8|0;f=c[j>>2]|0;i=b+4|0;b=c[i>>2]|0;if((f|0)==(c[b+4>>2]|0)){f=c[b+12>>2]|0;if(!f){f=uH(16)|0;if(!f)Pw(1,95943,g)|0;c[f+8>>2]=c[i>>2];c[f+12>>2]=0;b=uH(4e6)|0;c[f>>2]=b;if(!b){Pw(1,88282,h)|0;b=c[f>>2]|0}c[f+4>>2]=b+4e6;c[(c[i>>2]|0)+12>>2]=f}c[i>>2]=f;f=c[f>>2]|0;c[j>>2]=f}a[(c[e+16>>2]|0)+157>>0]=(d[190690]|0)+1;c[j>>2]=f+4;c[f>>2]=e;l=k;return}function Pl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+8|0;b=c[f>>2]|0;d=a+4|0;e=c[d>>2]|0;if((b|0)==(c[e>>2]|0))if((e|0)==(c[a>>2]|0))b=0;else{b=c[e+8>>2]|0;c[d>>2]=b;b=c[b+4>>2]|0;c[f>>2]=b;g=4}else g=4;if((g|0)==4){b=b+-4|0;c[f>>2]=b;b=c[b>>2]|0}return b|0}function Ql(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[b+16>>2]|0;g=f+232|0;c[g>>2]=(c[g>>2]|0)+1;g=c[d+16>>2]|0;a[g+157>>0]=a[190690]|0;b=c[46023]|0;e=g+168|0;if(!b){c[e>>2]=0;c[f+192>>2]=d}else{c[e>>2]=b;c[(c[b+16>>2]|0)+164>>2]=d}c[46023]=d;c[g+164>>2]=0;return}function Rl(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0;m=b+16|0;d=(c[m>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;g=d+16|0;d=c[g>>2]|0;e=c[d+188>>2]|0;a:do if(!e)f=0;else{f=0;while(1){e=c[e+(f<<2)>>2]|0;if(!e){f=0;break a}Sl(e);d=c[g>>2]|0;f=f+1|0;e=c[d+188>>2]|0}}while(0);while(1){if((f|0)>=(c[d+208>>2]|0))break;e=c[(c[d+204>>2]|0)+(f<<2)>>2]|0;l=c[e>>2]&3;if((c[(c[(c[((l|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)==(c[(c[(c[((l|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)){Sl(e);d=c[g>>2]|0}f=f+1|0}d=d+164|0}l=c[m>>2]|0;d=c[l+196>>2]|0;if(!((c[d+56>>2]|0)==0?(c[l+180>>2]|0)<=0:0))i=13;b:do if((i|0)==13){i=c[d+4>>2]|0;g=0;c:while(1){d=c[i+(g<<2)>>2]|0;if(!d)break b;e=c[(c[d+16>>2]|0)+196>>2]|0;d=0;while(1){f=c[e+(d<<2)>>2]|0;if(!f)break;l=c[f+16>>2]|0;if(c[l+96>>2]|0?(a[l+113>>0]|0)==0:0)break c;d=d+1|0}g=g+1|0}Tl(b)}while(0);Ji(b);e=0;d=(c[m>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;l=d+16|0;d=c[l>>2]|0;f=c[d+188>>2]|0;d:do if(f){k=0;while(1){g=c[f+(k<<2)>>2]|0;if(!g){k=0;break}i=c[g+16>>2]|0;j=c[i+96>>2]|0;do if(j)if(!(a[i+113>>0]|0)){Ul(g);f=c[l>>2]|0;e=1;d=f;f=c[f+188>>2]|0;break}else{h[i+136>>3]=+h[((c[(c[m>>2]|0)+116>>2]&1|0)==0?j+24|0:j+32|0)>>3];break}while(0);k=k+1|0}while(1){if((k|0)>=(c[d+208>>2]|0))break d;i=c[(c[d+204>>2]|0)+(k<<2)>>2]|0;j=c[i>>2]&3;g=c[((j|0)==3?i:i+48|0)+40>>2]|0;j=c[((j|0)==2?i:i+-48|0)+40>>2]|0;do if(!((g|0)==(j|0)?1:(c[(c[g+16>>2]|0)+232>>2]|0)!=(c[(c[j+16>>2]|0)+232>>2]|0))){f=i;do{j=c[f+16>>2]|0;f=c[j+172>>2]|0}while((f|0)!=0);f=a[j+113>>0]|0;g=c[i+16>>2]|0;a[g+113>>0]=f;g=c[g+96>>2]|0;if(g)if(!(f<<24>>24)){Ul(i);e=1;d=c[l>>2]|0;break}else{o=+h[((c[(c[m>>2]|0)+116>>2]&1|0)==0?g+24|0:g+32|0)>>3];j=j+136|0;n=+h[j>>3];h[j>>3]=o>n?o:n;break}}while(0);k=k+1|0}}while(0);d=d+164|0}if(e|0){Ch(b);Qh(b)}return e|0}function Sl(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[b>>2]&3;i=c[((d|0)==3?b:b+48|0)+40>>2]|0;f=i+16|0;g=c[(c[f>>2]|0)+236>>2]|0;d=c[(c[(c[((d|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;h=(g|0)<(d|0);e=h?d:g;i=c[(c[(ig(i)|0)+16>>2]|0)+196>>2]|0;f=i+(c[(c[f>>2]|0)+232>>2]<<6)+4|0;d=h?g:d;a:while(1){d=d+1|0;if((d|0)>=(e|0))break;g=c[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;switch(a[g+156>>0]|0){case 0:break a;case 1:break;default:continue a}if(c[g+104>>2]|0)break}if((d|0)==(e|0))do{i=c[b+16>>2]|0;a[i+113>>0]=1;b=c[i+172>>2]|0}while((b|0)!=0);return}function Tl(a){a=a|0;var d=0,e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|0;if(b[a+236>>1]|0)qa(88339,88322,190,88358);d=(b[a+238>>1]|0)+3|0;a=c[a+196>>2]|0;if(!a)a=vH(d<<6)|0;else a=xH(a,d<<6)|0;d=a+64|0;a=c[g>>2]|0;c[a+196>>2]=d;a=b[a+238>>1]|0;while(1){if((a|0)<=-1)break;f=a+-1|0;e=d+(a<<6)|0;a=d+(f<<6)|0;d=e+64|0;do{c[e>>2]=c[a>>2];e=e+4|0;a=a+4|0}while((e|0)<(d|0));a=f;d=c[(c[g>>2]|0)+196>>2]|0}c[d+(a<<6)+8>>2]=0;c[d+(a<<6)>>2]=0;e=uH(8)|0;g=c[g>>2]|0;f=c[g+196>>2]|0;c[f+(a<<6)+12>>2]=e;c[f+(a<<6)+4>>2]=e;c[f+(a<<6)+56>>2]=0;h[f+(a<<6)+24>>3]=1.0;h[f+(a<<6)+16>>3]=1.0;h[f+(a<<6)+40>>3]=1.0;h[f+(a<<6)+32>>3]=1.0;g=g+236|0;b[g>>1]=(b[g>>1]|0)+-1<<16>>16;return}function Ul(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0;j=b+16|0;if(c[(c[j>>2]|0)+96>>2]|0){m=b+48|0;k=ig(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)|0;d=c[(c[(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)+16>>2]|0)+232>>2]|0;l=Vl(k,b)|0;n=k+16|0;e=c[n>>2]|0;g=c[e+196>>2]|0;o=d+-1|0;i=c[c[g+(o<<6)+4>>2]>>2]|0;if(!i)f=+h[g+(d<<6)+24>>3]+ +h[(c[(c[c[g+(d<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +(c[e+252>>2]|0);else f=+h[(c[i+16>>2]|0)+24>>3]-+h[g+(o<<6)+16>>3];d=Wl(k,o,l)|0;k=c[(c[j>>2]|0)+96>>2]|0;q=+h[k+24>>3];p=+h[k+32>>3];j=(c[(c[n>>2]|0)+116>>2]&1|0)==0;r=j?p:q;g=d+16|0;e=c[g>>2]|0;h[e+80>>3]=r;l=~~(r*.5);p=(j?q:p)*.5;h[e+96>>3]=p;h[e+88>>3]=p;c[e+104>>2]=k;h[e+24>>3]=+(l+~~f|0);e=ph(d,c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0,b)|0;e=c[e+16>>2]|0;h[e+16>>3]=-+h[(c[g>>2]|0)+88>>3];h[e+56>>3]=+h[(c[(c[((c[b>>2]&3|0)==3?b:m)+40>>2]|0)+16>>2]|0)+96>>3];a[e+112>>0]=4;e=b+-48|0;d=ph(d,c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0,b)|0;g=c[g>>2]|0;d=c[d+16>>2]|0;h[d+16>>3]=+h[g+96>>3];h[d+56>>3]=+h[(c[(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)+16>>2]|0)+88>>3];a[d+112>>0]=4;d=c[(c[n>>2]|0)+196>>2]|0;e=d+(o<<6)+16|0;f=+(l|0);if(+h[e>>3]<f)h[e>>3]=f;d=d+(o<<6)+24|0;if(+h[d>>3]<f)h[d>>3]=f;c[g+112>>2]=b}return}function Vl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;j=n+8|0;f=n+4|0;g=n;d=c[b>>2]&3;e=c[((d|0)==3?b:b+48|0)+40>>2]|0;k=(c[(c[e+16>>2]|0)+232>>2]|0)+-1|0;a=c[(c[a+16>>2]|0)+196>>2]|0;h=c[a+(k<<6)+4>>2]|0;a=c[a+(k<<6)>>2]|0;k=j+8|0;c[k>>2]=-1;c[j>>2]=-1;m=j+12|0;c[m>>2]=a;i=j+4|0;c[i>>2]=a;Xl(e,c[((d|0)==2?b:b+-48|0)+40>>2]|0,f,g);f=c[f>>2]|0;g=c[g>>2]|0;d=0;e=a;b=-1;while(1){if((d|0)>=(e|0))break;e=e+-1|0;Yl(c[h+(d<<2)>>2]|0,j,f,g);if((d|0)!=(e|0))Yl(c[h+(e<<2)>>2]|0,j,f,g);a=c[i>>2]|0;b=c[j>>2]|0;if((a-b|0)<2)break;else d=d+1|0}if((b|0)>(a|0))a=(c[m>>2]|0)+(c[k>>2]|0)|0;else a=a+b|0;l=n;return (a+1|0)/2|0|0}function Wl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=a+16|0;f=c[(c[g>>2]|0)+196>>2]|0;e=f+(b<<6)|0;f=c[f+(b<<6)+4>>2]|0;if(!f)f=vH((c[e>>2]<<2)+8|0)|0;else f=xH(f,(c[e>>2]<<2)+8|0)|0;e=c[(c[g>>2]|0)+196>>2]|0;c[e+(b<<6)+4>>2]=f;e=c[e+(b<<6)>>2]|0;while(1){if((e|0)<=(d|0))break;h=e+-1|0;i=c[f+(h<<2)>>2]|0;c[f+(e<<2)>>2]=i;i=(c[i+16>>2]|0)+236|0;c[i>>2]=(c[i>>2]|0)+1;e=h}h=uh(a)|0;i=f+(d<<2)|0;c[i>>2]=h;h=c[h+16>>2]|0;c[h+236>>2]=d;c[h+232>>2]=b;g=(c[(c[g>>2]|0)+196>>2]|0)+(b<<6)|0;h=(c[g>>2]|0)+1|0;c[g>>2]=h;c[f+(h<<2)>>2]=0;return c[i>>2]|0}function Xl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a=c[(c[a+16>>2]|0)+236>>2]|0;b=c[(c[b+16>>2]|0)+236>>2]|0;f=(a|0)>(b|0);c[d>>2]=f?b:a;c[e>>2]=f?a:b;return}function Yl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;h=m+4|0;g=m;b=c[b+16>>2]|0;do if((a[b+156>>0]|0)==1){k=c[b+236>>2]|0;if(c[b+176>>2]|0){i=c[b+180>>2]|0;b=0;g=0;h=0;while(1){j=c[i+(h<<2)>>2]|0;if(!j)break;n=c[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;j=(n|0)>(e|0);b=j?((n|0)<(f|0)?b:1):b;g=j?g:1;h=h+1|0}if(g<<24>>24!=0&b<<24>>24==0){c[d>>2]=k+1;break}if(!(g<<24>>24==0&b<<24>>24!=0))break;c[d+4>>2]=k+-1;break}if((c[b+184>>2]|0)!=2)qa(88302,88322,63,88329);i=c[b+180>>2]|0;n=c[i>>2]|0;i=c[i+4>>2]|0;Xl(c[((c[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0,c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,h,g);i=c[g>>2]|0;if((i|0)<=(e|0)){c[d>>2]=k;c[d+8>>2]=k;break}b=c[h>>2]|0;if((b|0)>=(f|0)){c[d+4>>2]=k;c[d+12>>2]=k;break}g=(b|0)<(e|0);h=(i|0)>(f|0);if(!(h&g)){if(!(!g?!((i|0)<(f|0)&(b|0)==(e|0)):0))c[d+8>>2]=k;if(!h?!((i|0)==(f|0)&(b|0)>(e|0)):0)break;c[d+12>>2]=k}}while(0);l=m;return}function Zl(a){a=a|0;c[46363]=1;rm(a);c[46363]=0;return}function _l(a){a=a|0;c[46363]=2;rm(a);c[46363]=0;return}function $l(a){a=a|0;var b=0;Az(a,134365,304,1)|0;dM(a);b=uH((e[(c[(ez(a)|0)+16>>2]|0)+176>>1]|0)<<3)|0;c[(c[a+16>>2]|0)+132>>2]=b;bN(a,c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&1);return}function am(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0;s=l;l=l+64|0;j=s+48|0;o=s+40|0;k=s+24|0;i=s+8|0;q=s+56|0;m=s;do if((b|0)!=0?(r=e+16|0,p=c[(c[r>>2]|0)+132>>2]|0,g=yx(e,b)|0,(a[g>>0]|0)!=0):0){a[q>>0]=0;b=p+8|0;if((c[46366]|0)>2?(c[i>>2]=p,c[i+4>>2]=b,c[i+8>>2]=p+16,c[i+12>>2]=q,(N1(g,88435,i)|0)>2):0){a[(c[r>>2]|0)+119>>0]=1;g=c[46366]|0;a:do if(+h[22908]>0.0){b=0;while(1){if((b|0)>=(g|0))break a;o=p+(b<<3)|0;h[o>>3]=+h[o>>3]/+h[22908];b=b+1|0}}while(0);if((g|0)>3)Hn(e,f,3);if((a[q>>0]|0)!=33){if(!d){b=1;break}if(!((QL(yx(e,d)|0)|0)<<24>>24)){b=1;break}}a[(c[r>>2]|0)+119>>0]=3;b=1;break}c[k>>2]=p;c[k+4>>2]=b;c[k+8>>2]=q;if((N1(g,98723,k)|0)<=1){c[j>>2]=ry(e)|0;c[j+4>>2]=g;Pw(1,88449,j)|0;b=0;break}a[(c[r>>2]|0)+119>>0]=1;g=c[46366]|0;b:do if(+h[22908]>0.0){b=0;while(1){if((b|0)>=(g|0))break b;k=p+(b<<3)|0;h[k>>3]=+h[k>>3]/+h[22908];b=b+1|0}}while(0);do if((g|0)>2){b=c[46401]|0;if((b|0?(n=yx(e,b)|0,n|0):0)?(c[o>>2]=m,(N1(n,98183,o)|0)==1):0){u=+h[22908];t=+h[m>>3];h[p+16>>3]=u>0.0?t/u:t;Hn(e,f,3);break}In(e,f)}while(0);if((a[q>>0]|0)!=33){if(!d){b=1;break}if(!((QL(yx(e,d)|0)|0)<<24>>24)){b=1;break}}a[(c[r>>2]|0)+119>>0]=3;b=1}else b=0;while(0);l=s;return b|0}function bm(a){a=a|0;var b=0,c=0;c=Sy(a)|0;while(1){if(!c)break;b=Ex(a,c)|0;while(1){if(!b)break;JM(b);b=Gx(a,b)|0}HM(c);c=Ty(a,c)|0}cm(a);return}function cm(a){a=a|0;if((c[46363]|0)!=0|(c[46025]|0)<0)Fn(a);if((fz(a)|0)!=(a|0))Gz(a,0,134401);return}function dm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+48|0;m=q+32|0;o=q;k=nx(b,0,99611,0)|0;e=nx(b,0,99645,0)|0;p=(RL(xx(b,88493)|0,0)|0)<<24>>24!=0;if(!e)e=nx(b,0,99645,191979)|0;En(b)|0;n=b+16|0;i=0;while(1){j=c[(c[(c[n>>2]|0)+152>>2]|0)+(i<<2)>>2]|0;if(!j){f=12;break}g=j+16|0;f=c[g>>2]|0;if(!(a[f+119>>0]|0)){if(z$(ry(j)|0,104980,7)|0){f=8;break}f=c[g>>2]|0}f=c[f+108>>2]|0;if(f|0)em(j,f,99607);i=i+1|0}a:do if((f|0)==8){p=ry(j)|0;e=ry(b)|0;c[m>>2]=p;c[m+4>>2]=e;Pw(1,88505,m)|0;e=-1}else if((f|0)==12){fm(b,k,e);j=gm(b)|0;e=c[(c[n>>2]|0)+8>>2]|0;if(!(c[e+88>>2]|0))e=0;else{c[e+84>>2]=0;e=1}g=(d|0)!=0;i=(e|0)!=0;if(!(i|g&(c[46363]|0)==1^1)?(tq(b)|0)!=0:0){f=c[(c[n>>2]|0)+12>>2]|0;if(!f)f=1;else{a[f+81>>0]=0;f=1}}else f=0;mM(b);if(i){d=(c[n>>2]|0)+16|0;_E(o,b);c[d>>2]=c[o>>2];c[d+4>>2]=c[o+4>>2];c[d+8>>2]=c[o+8>>2];c[d+12>>2]=c[o+12>>2];c[d+16>>2]=c[o+16>>2];c[d+20>>2]=c[o+20>>2];c[d+24>>2]=c[o+24>>2];c[d+28>>2]=c[o+28>>2]}if(!g){c[46367]=1;f=Sy(b)|0;while(1){if(!f)break a;p=c[f+16>>2]|0;o=c[p+132>>2]|0;h[p+16>>3]=+h[o>>3]*72.0;h[p+24>>3]=+h[o+8>>3]*72.0;f=Ty(b,f)|0}}do if(!(p|i)){p=c[n>>2]|0;if(!(+h[p+16>>3]!=0.0)?!(+h[p+24>>3]!=0.0):0)break;cn(b)}while(0);if(!((j|0)!=0&(f|(an(b)|0)<<24>>24!=0))){if((j|0)==2){c[46367]=1;break}}else hm(b);$m(b,0)}while(0);l=q;return e|0}function em(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k+32|0;f=k+24|0;g=k+16|0;i=k;b=xx(b,e)|0;if(b|0?(c[j>>2]=f,c[j+4>>2]=g,(N1(b,102477,j)|0)==2):0){j=d+56|0;km(i,+h[f>>3],+h[g>>3]);c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];c[j+12>>2]=c[i+12>>2];a[d+81>>0]=1}l=k;return}function fm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+32|0;f=m+24|0;g=m+16|0;i=m;j=b+16|0;if((d|0?(c[(c[j>>2]|0)+12>>2]|0)!=0:0)?(n=yx(b,d)|0,c[k>>2]=f,c[k+4>>2]=g,(N1(n,102477,k)|0)==2):0){n=(c[(c[j>>2]|0)+12>>2]|0)+56|0;km(i,+h[f>>3],+h[g>>3]);c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];a[(c[(c[j>>2]|0)+12>>2]|0)+81>>0]=1}a:do if(e|0){f=wA(b)|0;while(1){if(!f)break a;lm(f,b,d,e);f=xA(f)|0}}while(0);l=m;return}function gm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(by(a)|0){f=nx(a,2,99597,0)|0;if(!((f|0)==0|(c[46363]|0)<2)){b=0;e=Sy(a)|0;while(1){if(!e)break;d=Ex(a,e)|0;while(1){if(!d)break;g=b+((im(f,d)|0)!=0&1)|0;d=Gx(a,d)|0;b=g}e=Ty(a,e)|0}if(b){b=(b|0)==(by(a)|0);b=b?2:1}else b=0}else b=0}else b=2;return b|0}function hm(a){a=a|0;var b=0,d=0,e=0;d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;KM(b);e=b+16|0;nH(c[(c[e>>2]|0)+96>>2]|0);nH(c[(c[e>>2]|0)+108>>2]|0);nH(c[(c[e>>2]|0)+100>>2]|0);nH(c[(c[e>>2]|0)+104>>2]|0);b=Gx(a,b)|0}d=Ty(a,d)|0}return}function im(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;B=l;l=l+96|0;z=B+72|0;x=B+56|0;A=B+48|0;y=B+32|0;w=B+16|0;r=B+88|0;s=B+8|0;t=B;u=B+84|0;v=B+80|0;b=yx(d,b)|0;do if(a[b>>0]|0){sE(d,u,v);q=1;f=0;e=0;j=0.0;i=0.0;k=0.0;g=0.0;a:while(1){c[w>>2]=s;c[w+4>>2]=t;c[w+8>>2]=r;if((N1(b,88542,w)|0)==2){p=1;b=b+(c[r>>2]|0)|0;i=+h[s>>3];g=+h[t>>3]}else p=e;c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=r;if((N1(b,88554,y)|0)==2){o=1;b=b+(c[r>>2]|0)|0;j=+h[s>>3];k=+h[t>>3]}else o=f;m=jm(b)|0;if(!((m|0)>3&((m|0)%3|0|0)==1)){e=8;break}n=vH(m<<4)|0;e=n;f=m;while(1){if(!f)break;c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=r;if((N1(b,88624,x)|0)<2){e=13;break a}C=b+(c[r>>2]|0)|0;h[e>>3]=+h[s>>3];h[e+8>>3]=+h[t>>3];e=e+16|0;f=f+-1|0;b=C}while(1){e=a[b>>0]|0;f=b+1|0;if(!(B$(e<<24>>24)|0))break;else b=f}C=e<<24>>24==0;b=C?b:f;q=C?0:q;f=PK(d,m)|0;if(p|0){c[f+8>>2]=c[u>>2];h[f+16>>3]=i;h[f+24>>3]=g}if(o|0){c[f+12>>2]=c[v>>2];h[f+32>>3]=j;h[f+40>>3]=k}e=0;while(1){if((e|0)>=(m|0))break;C=(c[f>>2]|0)+(e<<4)|0;D=n+(e<<4)|0;c[C>>2]=c[D>>2];c[C+4>>2]=c[D+4>>2];c[C+8>>2]=c[D+8>>2];c[C+12>>2]=c[D+12>>2];e=e+1|0}D_(n);if(!q){e=26;break}else{f=o;e=p}}if((e|0)==8){KM(d);if(a[190691]|0){b=0;break}a[190691]=1;D=ry(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;b=ry(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;c[A>>2]=D;c[A+4>>2]=b;Pw(0,88567,A)|0;b=0;break}else if((e|0)==13){if(!(a[190691]|0)){a[190691]=1;C=ry(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;D=ry(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;c[z>>2]=C;c[z+4>>2]=D;Pw(0,88634,z)|0}D_(n);KM(d);b=0;break}else if((e|0)==26){f=d+16|0;b=c[f>>2]|0;e=c[b+96>>2]|0;if(e){em(d,e,99611);b=c[f>>2]|0}e=c[b+108>>2]|0;if(e){em(d,e,99607);b=c[f>>2]|0}e=c[b+100>>2]|0;if(e){em(d,e,99614);b=c[f>>2]|0}b=c[b+104>>2]|0;if(!b){b=1;break}em(d,b,99622);b=1;break}}else b=0;while(0);l=B;return b|0}function jm(b){b=b|0;var c=0,d=0;d=0;do{while(1){c=a[b>>0]|0;if(!(B$(c&255)|0))break;else b=b+1|0}a:do if(!(c<<24>>24))c=0;else{d=d+1|0;while(1){if(!(c<<24>>24)){c=0;break a}if(c<<24>>24==59|(B$(c&255)|0)!=0)break a;c=b+1|0;b=c;c=a[c>>0]|0}}while(0)}while((B$(c&255)|0)!=0);return d|0}function km(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function lm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h;if((z$(ry(a)|0,104980,7)|0)==0?(mm(a,e,f)|0)!=0:0){Az(a,134401,280,1)|0;i=(c[a+16>>2]|0)+16|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];nm(b,a);fm(a,d,e)}else g=4;a:do if((g|0)==4){a=wA(a)|0;while(1){if(!a)break a;lm(a,b,d,e);a=xA(a)|0}}while(0);l=h;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0;i=l;l=l+48|0;j=i+32|0;g=i;k=yx(a,b)|0;a=g+8|0;b=g+24|0;c[j>>2]=g;c[j+4>>2]=a;c[j+8>>2]=g+16;c[j+12>>2]=b;if((N1(k,88682,j)|0)==4){e=+h[a>>3];f=+h[b>>3];if(e>f){h[a>>3]=f;h[b>>3]=e};c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];c[d+16>>2]=c[g+16>>2];c[d+20>>2]=c[g+20>>2];c[d+24>>2]=c[g+24>>2];c[d+28>>2]=c[g+28>>2];a=1}else a=0;l=i;return a|0}function nm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+16|0;d=c[e>>2]|0;g=d+180|0;a=c[g>>2]|0;f=a+1|0;c[g>>2]=f;d=c[d+184>>2]|0;if(!d)a=uH((a<<2)+8|0)|0;else a=wH(d,a+2|0,4,f)|0;c[(c[e>>2]|0)+184>>2]=a;c[a+(f<<2)>>2]=b;fH(b);return}function om(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+8|0;k=n;i=n+16|0;j=n+12|0;h=xx(b,88698)|0;do if((h|0)!=0?(g=a[h>>0]|0,g<<24>>24!=0):0){g=g&255;if(!(N$(g)|0))if((e|0)==2|(g+-48|0)>>>0<10)e=h;else break;else{if(!(z$(h,88704,4)|0)){e=0;break}if(!(z$(h,102485,7)|0)){e=1;break}if(z$(h,88709,6)|0)if((e|0)==2)e=h;else break;else e=h+6|0}if(!(((d[e>>0]|0)+-48|0)>>>0<10?(c[k>>2]=j,(N1(e,96907,k)|0)>=1):0)){k=H1()|0;k=(db(0)|0)^k;c[j>>2]=k;c[m>>2]=k;Y0(i,96907,m)|0;zx(b,88698,i)|0}c[f>>2]=c[j>>2];e=2}while(0);l=n;return e|0}function pm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f+4|0;c[e>>2]=1;d=om(a,d,e)|0;if((d|0)!=2&(c[46026]|0)!=0)Pw(0,88716,f)|0;if((d|0)==1)qm(a,b);i2(c[e>>2]|0);l=f;return d|0}function qm(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,l=0.0;g=+(d|0);i=6.283185307179586/g;e=Sy(b)|0;f=0.0;while(1){if(!e)break;l=+E(+f)*g;j=c[e+16>>2]|0;k=c[j+132>>2]|0;h[k>>3]=l;h[k+8>>3]=+F(+f)*g;a[j+119>>0]=1;if((c[46366]|0)>2)In(e,d);e=Ty(b,e)|0;f=f+i}return}function rm(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0;r=l;l=l+80|0;d=r+24|0;n=r+32|0;k=r;p=r+28|0;m=r+64|0;q=+h[22908];do if(c[46363]|0){h[22908]=72.0;sm(b);tm(b);if((dm(b,1)|0)<0){Pw(3,88764,d)|0;break}else{PI(b,0);f=32;break}}else{o=RL(xx(b,88493)|0,0)|0;h[22908]=+ML(b);sm(b);g=um(b)|0;Sp(b,k,0)|0;i=vm(b)|0;j=ZD(b,0,n)|0;d=YD(b,-1,8)|0;c[46025]=d;e=(d|0)<0;do if(!j){if((g|0)!=0&e){c[46025]=8;c[n+16>>2]=2;f=11;break}c[n+16>>2]=2;if((d|0)<=-1){wm(b,g,i);Vp(b,k)|0;tm(b);if(!(o<<24>>24)){hn(b);break}else{xm(b);break}}else f=11}else if(e){c[46025]=8;f=11}else f=11;while(0);if((f|0)==11){j=dD(b,p,88792,m)|0;d=c[p>>2]|0;do if((d|0)<=1){wm(b,g,i);Vp(b,k)|0;if(!(o<<24>>24)){hn(b);break}else{xm(b);break}}else{f=o<<24>>24==0;e=0;while(1){if((e|0)>=(d|0))break;d=c[j+(e<<2)>>2]|0;vD(d)|0;wm(d,g,i);Vp(d,k)|0;$M(d,2);if(f)hn(d);else xm(d);e=e+1|0;d=c[p>>2]|0}if(!(a[m>>0]|0))e=0;else{e=uH(d)|0;a[e>>0]=1;d=c[p>>2]|0}c[n+8>>2]=c[46025];c[n+20>>2]=e;c[n+12>>2]=1;VD(d,j,b,n)|0;D_(e)}while(0);mM(b);tm(b);d=0;while(1){if((d|0)>=(c[p>>2]|0))break;n=c[j+(d<<2)>>2]|0;Fn(n);Cz(n,134401)|0;dz(b,n)|0;d=d+1|0}D_(j)}PI(b,o<<24>>24==0&1);f=32}while(0);if((f|0)==32)h[22908]=q;l=r;return}function sm(a){a=a|0;var d=0,e=0,f=0,g=0;$M(a,2);f=KL(a,nx(a,0,89557,0)|0,2,2)|0;d=(KL(a,nx(a,0,90633,0)|0,f,2)|0)&65535;b[(c[(fz(a)|0)+16>>2]|0)+176>>1]=d;d=c[(c[a+60>>2]|0)+16>>2]|0;g=d+176|0;e=b[g>>1]|0;e=(e&65535)<10?e:10;b[g>>1]=e;e=e&65535;c[46366]=e;b[d+178>>1]=(f|0)<(e|0)?f:e;Hm(a);return}function tm(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+1040|0;e=f;d=f+8|0;a:do if((c[46366]|0)>2&(c[46401]|0)!=0){b=Sy(a)|0;while(1){if(!b)break a;h[e>>3]=+h[(c[(c[b+16>>2]|0)+132>>2]|0)+16>>3]*72.0;Y0(d,98183,e)|0;rx(b,c[46401]|0,d)|0;b=Ty(a,b)|0}}while(0);l=f;return}function um(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=xx(b,89477)|0;a:do if(!d)b=1;else{switch(a[d>>0]|0){case 0:{b=1;break a}case 75:{if(!(b$(d,89482)|0)){b=0;break a}break}case 109:{if(!(b$(d,89485)|0)){b=1;break a}break}case 104:{if(!(b$(d,89491)|0)){b=2;break a}break}default:{}}b=ry(b)|0;c[e>>2]=d;c[e+4>>2]=b;Pw(0,89496,e)|0;b=1}while(0);l=f;return b|0}function vm(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+16|0;f=h+8|0;e=h;d=xx(b,89260)|0;a:do if(!d)b=0;else{switch(a[d>>0]|0){case 0:{b=0;break a}case 99:{if(!(b$(d,89266)|0)){b=1;break a}break}case 115:{if(!(b$(d,89274)|0)){b=2;break a}if(!(b$(d,89281)|0)){b=0;break a}break}case 109:{if(!(b$(d,89291)|0)){if(nx(b,2,90566,0)|0){b=3;break a}c[e>>2]=ry(b)|0;Pw(0,89295,e)|0;Pw(3,89358,f)|0;b=0;break a}break}default:{}}b=ry(b)|0;c[g>>2]=d;c[g+4>>2]=b;Pw(0,89415,g)|0;b=0}while(0);l=h;return b|0}function wm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=xx(a,90975)|0;if(!e)if((b|0)==1)e=200;else e=(ay(a)|0)*100|0;else e=a2(e)|0;c[46365]=e;e=yn(a,b)|0;do if(!((e|0)<2|(c[46365]|0)<0))if(!b){zm(a,e,d);break}else{ym(a,e,b,d,c[46366]|0);break}while(0);return}function xm(a){a=a|0;mM(a);$m(a,1);return}function ym(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;r=u+40|0;o=u+24|0;n=u;p=u+48|0;t=u+44|0;q=(d|0)==2;i=pm(a,b,q?0:2)|0;j=Gm(a)|0;k=j|4;s=vH(f<<2)|0;c[s>>2]=vH(O(b<<3,f)|0)|0;g=c[46366]|0;f=1;while(1){if((f|0)>=(g|0))break;c[s+(f<<2)>>2]=(c[s>>2]|0)+((O(f,b)|0)<<3);f=f+1|0}g=(i|0)==0;f=g?k:j;if(0){k=c[15686]|0;j=c[46365]|0;m=+h[22909];c[n>>2]=e;c[n+4>>2]=g&1;c[n+8>>2]=f&3;c[n+12>>2]=j;h[n+16>>3]=m;g1(k,89073,n)|0;E1(89130,15,1,k)|0;EL();E1(89146,13,1,k)|0}n=Cm(a,b,p,d,e,t)|0;if(0){k=c[15686]|0;m=+FL();c[o>>2]=b;h[o+8>>3]=m;g1(k,89160,o)|0}if((d|0)!=1){m=+LL(a,nx(a,0,89179,0)|0,0.0,-1797693134862315708145274.0e284);if(q){f=Gq(n,b,c[p>>2]|0,s,c[t>>2]|0,c[46366]|0,f,e,c[46365]|0,m)|0;g=12}else g=14}else{f=qn(n,b,c[p>>2]|0,s,c[t>>2]|0,c[46366]|0,f,e,c[46365]|0)|0;g=12}if((g|0)==12)if((f|0)<0)Pw(3,89189,r)|0;else g=14;a:do if((g|0)==14){g=Sy(a)|0;while(1){if(!g)break a;k=c[g+16>>2]|0;i=c[k+120>>2]|0;j=c[46366]|0;k=k+132|0;f=0;while(1){if((f|0)>=(j|0))break;h[(c[k>>2]|0)+(f<<3)>>3]=+h[(c[s+(f<<2)>>2]|0)+(i<<3)>>3];f=f+1|0}g=Ty(a,g)|0}}while(0);br(n);D_(c[s>>2]|0);D_(s);D_(c[t>>2]|0);l=u;return}function zm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0;g=l;l=l+48|0;f=g+32|0;e=g;switch(d|0){case 2:{Am(a,b);break}case 1:{if(!(Cq(a,b)|0)){c[e>>2]=ry(a)|0;Pw(0,88802,e)|0;Pw(3,91952,g+8|0)|0;Pw(3,88854,g+16|0)|0;Pw(3,88926,g+24|0)|0;Wn(a,b)}break}default:{Wn(a,b);if((d|0)==3)Bm(a)}}Kn(a,b);Ln(a,b);if(0){e=c[15686]|0;j=c[46365]|0;i=+h[22909];c[f>>2]=d;c[f+4>>2]=j;h[f+8>>3]=i;g1(e,88964,f)|0;EL()}Mn(a,b);l=g;return}function Am(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+16|0;g=Cm(a,b,j,0,2,0)|0;i=ds(g,b)|0;e=a+16|0;a=0;while(1){if((a|0)>=(b|0))break;f=i+(a<<2)|0;d=0;while(1){if((d|0)==(b|0))break;h[(c[(c[(c[e>>2]|0)+160>>2]|0)+(a<<2)>>2]|0)+(d<<3)>>3]=+(c[(c[f>>2]|0)+(d<<2)>>2]|0);d=d+1|0}a=a+1|0}D_(c[i>>2]|0);D_(i);br(g);l=j;return}function Bm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0;f=a+16|0;d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;g=c[b>>2]&3;e=(c[c[((g|0)==3?b:b+48|0)+40>>2]>>2]|0)>>>4;g=(c[c[((g|0)==2?b:b+-48|0)+40>>2]>>2]|0)>>>4;if((e|0)!=(g|0)){j=+h[(c[b+16>>2]|0)+136>>3];i=c[(c[f>>2]|0)+160>>2]|0;h[(c[i+(g<<2)>>2]|0)+(e<<3)>>3]=j;h[(c[i+(e<<2)>>2]|0)+(g<<3)>>3]=j}b=Gx(a,b)|0}d=Ty(a,d)|0}return}function Cm(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0;j=by(a)|0;G=GI()|0;if((f|0)==2){k=0;D=0}else{D=nx(a,2,90566,0)|0;k=(c[46404]|0)!=0&1;D=(D|0)!=0}A=(e|1|0)==3;E=vH(b*20|0)|0;F=vH(b<<2)|0;l=(j<<1)+b<<2;m=vH(l)|0;z=A|D;if(z)f=vH(l)|0;else f=0;C=(k|0)!=0;if(C)j=vH(l)|0;else j=0;if(A)k=vH(l)|0;else k=0;l=0;x=Sy(a)|0;y=0;while(1){if(!x)break;JI(G);if((c[(c[x+16>>2]|0)+120>>2]|0)!=(y|0)){B=12;break}c[F+(y<<2)>>2]=x;u=E+(y*20|0)+4|0;c[u>>2]=m;v=E+(y*20|0)+8|0;c[v>>2]=z?f:0;w=E+(y*20|0)+12|0;c[w>>2]=C?j:0;c[E+(y*20|0)+16>>2]=A?k:0;r=1;t=Jx(a,x)|0;s=1;q=l;m=m+4|0;f=z?f+4|0:f;j=C?j+4|0:j;k=A?k+4|0:k;while(1){if(!t)break;n=c[t>>2]&3;p=t+-48|0;l=t+48|0;do if((c[((n|0)==2?t:p)+40>>2]|0)==(c[((n|0)==3?t:l)+40>>2]|0)){n=r;p=s;l=q}else{n=Dm(G,t,r)|0;if((n|0)!=(r|0)){if(C){p=(c[w>>2]|0)+(n<<2)|0;g[p>>2]=+h[(c[t+16>>2]|0)+128>>3]+ +g[p>>2]}if(!D){n=r;p=s;l=q;break}n=(c[v>>2]|0)+(n<<2)|0;H=+h[(c[t+16>>2]|0)+136>>3];o=+(~~+g[n>>2]|0);g[n>>2]=H>o?H:o;n=r;p=s;l=q;break}I=c[t>>2]&3;l=(I|0)==3?t:l;q=q+1|0;n=r+1|0;r=m+4|0;c[m>>2]=c[(c[(c[((c[l+40>>2]|0)==(x|0)?((I|0)==2?t:p):l)+40>>2]|0)+16>>2]|0)+120>>2];if(C){g[j>>2]=+h[(c[t+16>>2]|0)+128>>3];j=j+4|0}if(D){l=f+4|0;g[f>>2]=+h[(c[t+16>>2]|0)+136>>3];if(A){f=l;B=27}else f=l}else if(A){g[f>>2]=1.0;f=f+4|0;B=27}if((B|0)==27){B=0;l=xx(t,98533)|0;if((l|0)!=0?(z$(l,132627,4)|0)==0:0)o=0.0;else o=(x|0)==(c[((c[t>>2]&3|0)==2?t:p)+40>>2]|0)?1.0:-1.0;g[k>>2]=o;k=k+4|0}p=s+1|0;l=q;m=r}while(0);r=n;t=Kx(a,t,x)|0;s=p;q=l}c[E+(y*20|0)>>2]=s;c[c[u>>2]>>2]=y;l=q;x=Ty(a,x)|0;y=y+1|0}if((B|0)==12)qa(89003,89018,819,89030);if(A)Em(E,b,e,F);n=(l|0)/2|0;a:do if((n|0)!=(by(a)|0)){l=(n<<1)+b<<2;k=xH(c[E+4>>2]|0,l)|0;if(D)f=xH(c[E+8>>2]|0,l)|0;if(C){m=0;j=xH(c[E+12>>2]|0,l)|0}else m=0;while(1){if((m|0)>=(b|0))break a;l=c[E+(m*20|0)>>2]|0;c[E+(m*20|0)+4>>2]=k;if(D){c[E+(m*20|0)+8>>2]=f;f=f+(l<<2)|0}if(C){c[E+(m*20|0)+12>>2]=j;j=j+(l<<2)|0}m=m+1|0;k=k+(l<<2)|0}}while(0);c[d>>2]=n;if(!i)D_(F);else c[i>>2]=F;KI(G);return E|0}function Dm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=c[b>>2]&3;e=c[(c[(c[((f|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+120>>2]|0;b=c[(c[(c[((f|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+120>>2]|0;f=(e|0)>(b|0);return LI(a,f?b:e,f?e:b,d)|0}function Em(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=0;while(1){if((g|0)>=(d|0)){g=0;break}h=c[(c[f+(g<<2)>>2]|0)+16>>2]|0;a[h+157>>0]=0;a[h+158>>0]=0;g=g+1|0}while(1){if((g|0)>=(d|0))break;if(!(a[(c[(c[f+(g<<2)>>2]|0)+16>>2]|0)+157>>0]|0))Fm(b,g,e,f);g=g+1|0}return}function Fm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0;q=(c[f+(d<<2)>>2]|0)+16|0;l=c[q>>2]|0;a[l+157>>0]=1;a[l+158>>0]=1;l=b+(d*20|0)|0;m=b+(d*20|0)+16|0;n=b+(d*20|0)+4|0;o=(e|0)==3?-1.0:1.0;k=1;a:while(1){if((k|0)>=(c[l>>2]|0)){h=14;break}h=(c[m>>2]|0)+(k<<2)|0;do if(!(+g[h>>2]==1.0)){p=c[(c[n>>2]|0)+(k<<2)>>2]|0;i=c[(c[f+(p<<2)>>2]|0)+16>>2]|0;if(!(a[i+158>>0]|0)){if(a[i+157>>0]|0)break;Fm(b,p,e,f);break}g[h>>2]=o;i=b+(p*20|0)+4|0;j=c[b+(p*20|0)>>2]|0;h=1;while(1){if((h|0)>=(j|0)){h=9;break a}if((c[(c[i>>2]|0)+(h<<2)>>2]|0)==(d|0))break;h=h+1|0}g[(c[b+(p*20|0)+16>>2]|0)+(h<<2)>>2]=-1.0}while(0);k=k+1|0}if((h|0)==9)qa(89044,89018,721,89064);else if((h|0)==14){a[(c[q>>2]|0)+158>>0]=0;return}}function Gm(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;a=KL(a,nx(a,0,89205,0)|0,2,0)|0;if((a|0)==0|(a|0)>2){c[b>>2]=89205;Pw(0,89214,b)|0;a=2}l=d;return a|0}function Hm(a){a=a|0;var b=0,d=0,e=0;d=ay(a)|0;c[46026]=nx(a,1,99597,0)|0;e=nx(a,1,90570,0)|0;b=Sy(a)|0;while(1){if(!b)break;$l(b);am(c[46026]|0,e,b,d)|0;b=Ty(a,b)|0}d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;Im(b);b=Gx(a,b)|0}d=Ty(a,d)|0}return}function Im(a){a=a|0;var b=0.0;Az(a,134378,176,1)|0;eM(a)|0;b=+LL(a,c[46404]|0,1.0,1.0);h[(c[a+16>>2]|0)+128>>3]=b;return}function Jm(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;a=uH(64)|0;e=a+8|0;f=d+8|0;g=e+48|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));d=c[d+56>>2]|0;c[a+56>>2]=d;b[(c[d+16>>2]|0)+168>>1]=1;return a|0}function Km(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function Lm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if(a>>>0<=e>>>0)if(a>>>0>=e>>>0){e=c[b+24>>2]|0;a=c[d+24>>2]|0;if(e>>>0<=a>>>0)if(e>>>0>=a>>>0){a=~~(+h[b+8>>3]-+h[d+8>>3]);if(!a){a=~~(+h[b+16>>3]-+h[d+16>>3]);if(!a){a=~~(+h[b+32>>3]-+h[d+32>>3]);if(!a)a=~~(+h[b+40>>3]-+h[d+40>>3])}}}else a=-1;else a=1}else a=-1;else a=1;return a|0}function Mm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;g=k;h=e+16|0;i=b[(c[h>>2]|0)+168>>1]|0;j=i<<16>>16;if(i<<16>>16!=1&(a[191874]|0)==0){i=vH(j<<2)|0;g=0;while(1){if((g|0)>=(j|0))break;c[i+(g<<2)>>2]=e;e=c[(c[e+16>>2]|0)+172>>2]|0;g=g+1|0}m=+(f|0);YK(d,i,0,j,m,m,17764);e=0;while(1){if((e|0)>=(j|0))break;g=c[i+(e<<2)>>2]|0;h=g+16|0;if(c[(c[h>>2]|0)+96>>2]|0){f=ez(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)|0;kM(f,c[(c[h>>2]|0)+96>>2]|0)}dL(g);e=e+1|0}D_(i)}else{c[g>>2]=e;m=+(f|0);YK(d,g,0,1,m,m,17764);if(c[(c[h>>2]|0)+96>>2]|0){j=ez(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0;kM(j,c[(c[h>>2]|0)+96>>2]|0)}dL(e)}l=k;return}function Nm(a){a=a|0;return 0}function Om(a){a=a|0;return 0}function Pm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;Q=l;l=l+384|0;O=Q+368|0;P=Q+112|0;j=Q+32|0;r=Q+336|0;K=Q+320|0;L=Q+304|0;M=Q+288|0;N=Q+272|0;i=Q+256|0;H=Q+240|0;I=Q+224|0;J=Q+208|0;t=Q+192|0;u=Q+176|0;v=Q+160|0;z=Q+144|0;A=Q+128|0;B=Q+96|0;D=Q+16|0;G=Q;a:do switch(HJ(b)|0){case 3:case 1:{f=uH(8)|0;z=b+16|0;b=c[z>>2]|0;i=c[b+12>>2]|0;do if(!(e<<24>>24)){b=c[i+8>>2]|0;if((b|0)>2){y=0.0;j=c[i+44>>2]|0;e=0;p=+g[d>>2];q=+g[d+4>>2];break}else{y=+k2()*.01;b=8;j=0;e=1;p=0.0;q=0.0;break}}else if(!(c[i+40>>2]&2048)){q=+h[b+88>>3];p=-q;y=+h[b+80>>3];x=y*-.5;h[j>>3]=p;h[j+8>>3]=x;h[j+16>>3]=q;h[j+24>>3]=x;y=y*.5;h[j+32>>3]=q;h[j+40>>3]=y;h[j+48>>3]=p;h[j+56>>3]=y;y=0.0;b=4;e=0;p=0.0;q=0.0;break}else{jM(r,i);p=+h[r>>3];x=+h[r+8>>3];q=+h[r+16>>3];y=+h[r+24>>3];h[j>>3]=p;h[j+8>>3]=x;h[j+16>>3]=q;h[j+24>>3]=x;h[j+32>>3]=q;h[j+40>>3]=y;h[j+48>>3]=p;h[j+56>>3]=y;y=0.0;b=4;e=0;p=0.0;q=0.0;break}while(0);c[f+4>>2]=b;r=uH(b<<4)|0;c[f>>2]=r;s=1.0/+(b|0);t=d+8|0;u=d+4|0;v=(b|0)==4;w=-p;x=-q;i=0;while(1){if((b|0)<=(i|0))break a;do if(e){k=+(i|0)*6.283185307179586*s+y;m=+E(+k);k=+F(+k);if(!(a[t>>0]|0)){P=c[z>>2]|0;n=k*+g[u>>2]*+h[P+80>>3];k=m*+g[d>>2]*(+h[P+96>>3]+ +h[P+88>>3])}else{P=c[z>>2]|0;n=(+h[P+80>>3]+ +g[u>>2])*k;k=(+h[P+96>>3]+ +h[P+88>>3]+ +g[d>>2])*m}o=k*.5;k=n*.5}else{if(!(a[t>>0]|0)){o=+h[j+(i<<4)>>3]*p;k=+h[j+(i<<4)+8>>3]*q;break}if(!v){o=+h[j+(i<<4)>>3];k=+h[j+(i<<4)+8>>3];n=+C(+(k*k+o*o));o=(p/n+1.0)*o;k=(q/n+1.0)*k;break}switch(i|0){case 0:{m=q;k=p;break}case 1:{m=q;k=w;break}case 2:{m=x;k=w;break}case 3:{m=x;k=p;break}default:{m=0.0;k=0.0}}o=+h[j+(i<<4)>>3]+k;k=+h[j+(i<<4)+8>>3]+m}while(0);O=c[z>>2]|0;P=b-i+-1|0;h[r+(P<<4)>>3]=+h[O+16>>3]+o;h[r+(P<<4)+8>>3]=+h[O+24>>3]+k;i=i+1|0}}case 2:{G=b+16|0;f=c[(c[G>>2]|0)+12>>2]|0;k=+h[f+16>>3];o=+h[f+24>>3];m=+h[f+32>>3];n=+h[f+40>>3];f=uH(8)|0;c[f+4>>2]=4;b=uH(64)|0;c[f>>2]=b;G=(c[G>>2]|0)+16|0;c[P>>2]=c[G>>2];c[P+4>>2]=c[G+4>>2];c[P+8>>2]=c[G+8>>2];c[P+12>>2]=c[G+12>>2];if(!(a[d+8>>0]|0)){c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(i,k,o,O,d);c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];N=(c[f>>2]|0)+16|0;c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(H,k,n,O,d);c[N>>2]=c[H>>2];c[N+4>>2]=c[H+4>>2];c[N+8>>2]=c[H+8>>2];c[N+12>>2]=c[H+12>>2];N=(c[f>>2]|0)+32|0;c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(I,m,n,O,d);c[N>>2]=c[I>>2];c[N+4>>2]=c[I+4>>2];c[N+8>>2]=c[I+8>>2];c[N+12>>2]=c[I+12>>2];N=(c[f>>2]|0)+48|0;c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(J,m,o,O,d);c[N>>2]=c[J>>2];c[N+4>>2]=c[J+4>>2];c[N+8>>2]=c[J+8>>2];c[N+12>>2]=c[J+12>>2];break a}else{y=k-+g[d>>2];J=d+4|0;x=o-+g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(K,y,x,O);c[b>>2]=c[K>>2];c[b+4>>2]=c[K+4>>2];c[b+8>>2]=c[K+8>>2];c[b+12>>2]=c[K+12>>2];K=(c[f>>2]|0)+16|0;x=k-+g[d>>2];y=n+ +g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(L,x,y,O);c[K>>2]=c[L>>2];c[K+4>>2]=c[L+4>>2];c[K+8>>2]=c[L+8>>2];c[K+12>>2]=c[L+12>>2];L=(c[f>>2]|0)+32|0;y=m+ +g[d>>2];x=n+ +g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(M,y,x,O);c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];M=(c[f>>2]|0)+48|0;x=m+ +g[d>>2];y=o-+g[J>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(N,x,y,O);c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];break a}}case 4:{b=b+16|0;f=uH(8)|0;c[f+4>>2]=4;i=uH(64)|0;c[f>>2]=i;j=c[b>>2]|0;N=j+16|0;c[P>>2]=c[N>>2];c[P+4>>2]=c[N+4>>2];c[P+8>>2]=c[N+8>>2];c[P+12>>2]=c[N+12>>2];k=-+h[j+88>>3];if(!(a[d+8>>0]|0)){x=-+h[j+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(A,k,x,O,d);c[i>>2]=c[A>>2];c[i+4>>2]=c[A+4>>2];c[i+8>>2]=c[A+8>>2];c[i+12>>2]=c[A+12>>2];N=(c[f>>2]|0)+16|0;M=c[b>>2]|0;x=-+h[M+88>>3];y=+h[M+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(B,x,y,O,d);c[N>>2]=c[B>>2];c[N+4>>2]=c[B+4>>2];c[N+8>>2]=c[B+8>>2];c[N+12>>2]=c[B+12>>2];N=(c[f>>2]|0)+32|0;M=c[b>>2]|0;y=+h[M+96>>3];x=+h[M+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(D,y,x,O,d);c[N>>2]=c[D>>2];c[N+4>>2]=c[D+4>>2];c[N+8>>2]=c[D+8>>2];c[N+12>>2]=c[D+12>>2];N=(c[f>>2]|0)+48|0;M=c[b>>2]|0;x=+h[M+96>>3];y=-+h[M+80>>3];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Rm(G,x,y,O,d);c[N>>2]=c[G>>2];c[N+4>>2]=c[G+4>>2];c[N+8>>2]=c[G+8>>2];c[N+12>>2]=c[G+12>>2];break a}else{y=k-+g[d>>2];M=d+4|0;x=-+h[j+80>>3]-+g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(t,y,x,O);c[i>>2]=c[t>>2];c[i+4>>2]=c[t+4>>2];c[i+8>>2]=c[t+8>>2];c[i+12>>2]=c[t+12>>2];N=(c[f>>2]|0)+16|0;L=c[b>>2]|0;x=-+h[L+88>>3]-+g[d>>2];y=+h[L+80>>3]+ +g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(u,x,y,O);c[N>>2]=c[u>>2];c[N+4>>2]=c[u+4>>2];c[N+8>>2]=c[u+8>>2];c[N+12>>2]=c[u+12>>2];N=(c[f>>2]|0)+32|0;L=c[b>>2]|0;y=+h[L+96>>3]+ +g[d>>2];x=+h[L+80>>3]+ +g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(v,y,x,O);c[N>>2]=c[v>>2];c[N+4>>2]=c[v+4>>2];c[N+8>>2]=c[v+8>>2];c[N+12>>2]=c[v+12>>2];N=(c[f>>2]|0)+48|0;L=c[b>>2]|0;x=+h[L+96>>3]+ +g[d>>2];y=-+h[L+80>>3]-+g[M>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];Qm(z,x,y,O);c[N>>2]=c[z>>2];c[N+4>>2]=c[z+4>>2];c[N+8>>2]=c[z+8>>2];c[N+12>>2]=c[z+12>>2];break a}}default:f=0}while(0);l=Q;return f|0}function Qm(a,b,c,d){a=a|0;b=+b;c=+c;d=d|0;c=+h[d+8>>3]+c;h[a>>3]=+h[d>>3]+b;h[a+8>>3]=c;return}function Rm(a,b,c,d,e){a=a|0;b=+b;c=+c;d=d|0;e=e|0;c=+g[e+4>>2]*c+ +h[d+8>>3];h[a>>3]=+g[e>>2]*b+ +h[d>>3];h[a+8>>3]=c;return}function Sm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+112|0;j=o+88|0;i=o+72|0;k=o+32|0;m=o+16|0;n=o;f=o+56|0;g=o+40|0;h=b+48|0;r=(c[(c[((c[b>>2]&3|0)==3?b:h)+40>>2]|0)+16>>2]|0)+16|0;p=b+16|0;q=(c[p>>2]|0)+16|0;c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];c[i+8>>2]=c[r+8>>2];c[i+12>>2]=c[r+12>>2];c[j>>2]=c[q>>2];c[j+4>>2]=c[q+4>>2];c[j+8>>2]=c[q+8>>2];c[j+12>>2]=c[q+12>>2];Tm(f,i,j);c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];f=b+-48|0;q=(c[(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)+16>>2]|0)+16|0;p=(c[p>>2]|0)+56|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];c[i+12>>2]=c[q+12>>2];c[j>>2]=c[p>>2];c[j+4>>2]=c[p+4>>2];c[j+8>>2]=c[p+8>>2];c[j+12>>2]=c[p+12>>2];Tm(g,i,j);c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];if(!e){g=-1111;f=-1111}else{r=c[b>>2]&3;g=c[(c[(c[((r|0)==2?b:f)+40>>2]|0)+16>>2]|0)+288>>2]|0;f=c[(c[(c[((r|0)==3?b:h)+40>>2]|0)+16>>2]|0)+288>>2]|0};c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2];vU(d,i,f,j,g,k)|0;p=k;q=c[p+4>>2]|0;r=a;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=o;return}function Tm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function Um(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+144|0;p=u+104|0;q=u+88|0;o=u+80|0;n=u+72|0;j=u+64|0;s=u+128|0;k=u+32|0;m=u+124|0;t=u+16|0;r=u;i=u+120|0;h=(c[b+16>>2]|0)+144|0;g=c[h>>2]|0;h=c[h+4>>2]|0;v=j;c[v>>2]=g;c[v+4>>2]=h;v=g;c[t>>2]=c[v>>2];c[t+4>>2]=c[v+4>>2];c[t+8>>2]=c[v+8>>2];c[t+12>>2]=c[v+12>>2];h=g+(h+-1<<4)|0;c[r>>2]=c[h>>2];c[r+4>>2]=c[h+4>>2];c[r+8>>2]=c[h+8>>2];c[r+12>>2]=c[h+12>>2];a:do if(!(f<<24>>24)){g=-1111;f=-1111}else{g=-1111;f=-1111;h=0;while(1){if((h|0)>=(e|0))break a;if((f|0)==-1111){f=c[d+(h<<2)>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=c[f+4>>2];c[p>>2]=c[t>>2];c[p+4>>2]=c[t+4>>2];c[p+8>>2]=c[t+8>>2];c[p+12>>2]=c[t+12>>2];f=(wU(q,p)|0)==0;f=f?-1111:h}if((g|0)==-1111){g=c[d+(h<<2)>>2]|0;c[q>>2]=c[g>>2];c[q+4>>2]=c[g+4>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];g=(wU(q,p)|0)==0;g=g?-1111:h}h=h+1|0}}while(0);Vm(d,e,f,g,i,m);c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;h=c[i>>2]|0;v=c[m>>2]|0;c[p>>2]=c[j>>2];c[p+4>>2]=c[j+4>>2];if((xU(h,v,p,k,s)|0)<0){t=ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;v=ry(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[n>>2]=t;c[n+4>>2]=v;Pw(1,89563,n)|0}else{if(0>1){g=c[15686]|0;n=ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;f=b+-48|0;v=ry(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)|0;c[o>>2]=n;c[o+4>>2]=v;g1(g,89611,o)|0;g=b}else{f=b+-48|0;g=b}QK(b,c[((c[g>>2]&3|0)==2?b:f)+40>>2]|0,c[s>>2]|0,c[s+4>>2]|0,17764);D_(h);c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];jL(a,b,q,p)}l=u;return}function Vm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;i=0;h=0;while(1){if((i|0)>=(b|0))break;if(!((i|0)==(d|0)|(i|0)==(e|0)))h=(c[(c[a+(i<<2)>>2]|0)+4>>2]|0)+h|0;i=i+1|0}o=vH(h<<5)|0;i=0;n=0;while(1){if((n|0)>=(b|0))break;a:do if(!((n|0)==(d|0)|(n|0)==(e|0))){m=a+(n<<2)|0;l=0;while(1){j=c[m>>2]|0;k=c[j+4>>2]|0;if((l|0)>=(k|0))break a;p=l+1|0;q=o+(i<<5)|0;j=(c[j>>2]|0)+(l<<4)|0;c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];j=o+(i<<5)+16|0;k=(c[c[m>>2]>>2]|0)+(((p|0)<(k|0)?p:0)<<4)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];l=p;i=i+1|0}}while(0);n=n+1|0}if((i|0)==(h|0)){c[f>>2]=o;c[g>>2]=h;return}else qa(89625,89632,77,89647)}function Wm(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;k=n+12|0;f=n;uq(f,a);c[k>>2]=c[f>>2];c[k+4>>2]=c[f+4>>2];c[k+8>>2]=c[f+8>>2];f=Sy(a)|0;while(1){if(!f)break;g=Ex(a,f)|0;while(1){if(!g)break;KK(g);g=Gx(a,g)|0}f=Ty(a,f)|0}h=Cw(17728,c[4555]|0)|0;f=Sy(a)|0;while(1){if(!f)break;g=Ex(a,f)|0;while(1){if(!g)break;if((c[46363]|0)>1?(i=c[g+16>>2]|0,(c[i+8>>2]|0)!=0):0){o=i+168|0;b[o>>1]=(b[o>>1]|0)+1<<16>>16}else m=14;if((m|0)==14?(m=0,j=Xm(h,g)|0,(j|0)!=(g|0)):0){o=c[j+16>>2]|0;p=o+168|0;b[p>>1]=(b[p>>1]|0)+1<<16>>16;o=o+172|0;c[(c[g+16>>2]|0)+172>>2]=c[o>>2];c[o>>2]=g}g=Gx(a,g)|0}f=Ty(a,f)|0}yw(h)|0;if(!(nb[d&63](a,k,e)|0)){c[46367]=1;f=0}else f=1;l=n;return f|0}function Xm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+64|0;p=q;e=c[b>>2]&3;i=c[((e|0)==3?b:b+48|0)+40>>2]|0;e=c[((e|0)==2?b:b+-48|0)+40>>2]|0;do if(i>>>0>=e>>>0){d=b+16|0;if(i>>>0>e>>>0){d=c[d>>2]|0;o=e;e=i;k=+h[d+16>>3];m=+h[d+24>>3];g=+h[d+56>>3];f=+h[d+64>>3];break}o=c[d>>2]|0;j=+h[o+56>>3];n=+h[o+64>>3];g=+h[o+16>>3];f=+h[o+24>>3];if(!(g<j))if(!(g>j)){d=f>n;if(f<n){o=i;e=i;k=j;m=n}else{o=i;e=i;k=g;m=f;g=d?j:g;f=d?n:f}}else{o=i;e=i;k=g;m=f;g=j;f=n}else{o=i;e=i;k=j;m=n}}else{d=c[b+16>>2]|0;o=i;k=+h[d+56>>3];m=+h[d+64>>3];g=+h[d+16>>3];f=+h[d+24>>3]}while(0);c[p+8>>2]=o;h[p+16>>3]=g;h[p+24>>3]=f;c[p+32>>2]=e;h[p+40>>3]=k;h[p+48>>3]=m;c[p+56>>2]=b;p=c[(nb[c[a>>2]&63](a,p,1)|0)+56>>2]|0;l=q;return p|0}function Ym(a,b){a=a|0;b=b|0;return Wm(a,21,b)|0}function Zm(d,e,f){d=d|0;e=e|0;f=f|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0;F=l;l=l+112|0;B=F+88|0;A=F+72|0;t=F+40|0;q=F+8|0;p=F;u=F+64|0;C=F+48|0;D=F+24|0;i=(c[46363]|0)>1&1;do if((f|0)>5){s=uH((ay(d)|0)<<2)|0;o=(f|0)==8;n=o&1;m=Sy(d)|0;r=0;while(1){if(!m)break;j=Pm(m,e,n)|0;k=(c[m+16>>2]|0)+288|0;if(!j){c[k>>2]=-1111;j=r}else{c[k>>2]=r;c[s+(r<<2)>>2]=j;j=r+1|0}m=Ty(d,m)|0;r=j}if(s){j=ms(s,r)|0;if(j|0){if(o){y=0;z=s;x=s;w=1;break}y=sU(s,r)|0;z=s;x=s;w=1;break}if(o){Pw(0,89661,p)|0;j=0;y=0;z=s;x=s;w=1;break}else{G=+g[e+4>>2];h[q>>3]=+g[e>>2];h[q+8>>3]=G;Pw(0,89739,q)|0;j=0;y=0;z=s;x=s;w=1;break}}else{j=0;y=0;z=0;x=0;w=0}}else{j=0;y=0;z=0;r=0;x=0;w=0}while(0);if(0){k=c[15686]|0;if((f|0)==8&(j|0)!=0)m=89845;else m=(y|0)==0?89831:(f|0)==10?107030:89821;c[t>>2]=m;g1(k,89862,t)|0}v=(y|0)!=0;a:do if(!v){if((f|0)==8&(j|0)!=0){cN(d,0);i=1}}else{k=Sy(d)|0;while(1){if(!k)break a;j=Ex(d,k)|0;while(1){if(!j)break;t=(c[j+16>>2]|0)+144|0;Sm(u,j,y,1,0,0);q=u;s=c[q+4>>2]|0;c[t>>2]=c[q>>2];c[t+4>>2]=s;j=Gx(d,j)|0}k=Ty(d,k)|0}}while(0);p=(i|0)==0;q=d+60|0;s=(f|0)==10;i=0;o=Sy(d)|0;j=0;while(1){if(!o)break;t=o+16|0;e=Ex(d,o)|0;while(1){if(!e)break;n=c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0;k=e+16|0;m=c[k>>2]|0;if(!p?(c[m+8>>2]|0)!=0:0){H=(c[t>>2]|0)+16|0;u=m+16|0;c[A>>2]=c[H>>2];c[A+4>>2]=c[H+4>>2];c[A+8>>2]=c[H+8>>2];c[A+12>>2]=c[H+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];Tm(C,A,B);n=(c[n+16>>2]|0)+16|0;u=(c[k>>2]|0)+56|0;c[A>>2]=c[n>>2];c[A+4>>2]=c[n+4>>2];c[A+8>>2]=c[n+8>>2];c[A+12>>2]=c[n+12>>2];c[B>>2]=c[u>>2];c[B+4>>2]=c[u+4>>2];c[B+8>>2]=c[u+8>>2];c[B+12>>2]=c[u+12>>2];Tm(D,A,B);c[A>>2]=c[C>>2];c[A+4>>2]=c[C+4>>2];c[A+8>>2]=c[C+8>>2];c[A+12>>2]=c[C+12>>2];c[B>>2]=c[D>>2];c[B+4>>2]=c[D+4>>2];c[B+8>>2]=c[D+8>>2];c[B+12>>2]=c[D+12>>2];jL(d,e,A,B)}else E=35;b:do if((E|0)==35){E=0;H=b[m+168>>1]|0;k=H<<16>>16;if(H<<16>>16){if((o|0)==(n|0)){if(!i){j=uH(96)|0;c[j+84>>2]=uH(((ay(d)|0)<<5)+11520|0)|0;i=j}Mm(i,e,c[(c[(c[q>>2]|0)+16>>2]|0)+248>>2]|0);break}if(!v){zJ(d,e,f,17764);break}k=a[191874]|0?1:k;m=e;n=0;while(1){if((n|0)>=(k|0))break b;if(s)Um(d,m,z,r,1);else _m(d,m);m=c[(c[m+16>>2]|0)+172>>2]|0;n=n+1|0}}}while(0);e=Gx(d,e)|0}o=Ty(d,o)|0}if(v)uU(y);if(i|0){D_(c[i+84>>2]|0);D_(j)}if(w){i=0;while(1){if((i|0)>=(r|0))break;D_(c[z+(i<<2)>>2]|0);i=i+1|0}D_(x)}l=F;return 0}function _m(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+96|0;g=k+64|0;f=k+48|0;d=k+40|0;h=k+80|0;e=k+32|0;i=k+16|0;j=k;m=(c[b+16>>2]|0)+144|0;n=c[m>>2]|0;m=c[m+4>>2]|0;o=e;c[o>>2]=n;c[o+4>>2]=m;o=n;c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];m=n+(m+-1<<4)|0;c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];oV(g,h);if(0>1){o=c[15686]|0;m=ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;e=b+-48|0;n=ry(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)|0;c[d>>2]=m;c[d+4>>2]=n;g1(o,89887,d)|0;d=e;e=b}else{d=b+-48|0;e=b}QK(b,c[((c[e>>2]&3|0)==2?b:d)+40>>2]|0,c[h>>2]|0,c[h+4>>2]|0,17764);c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];jL(a,b,f,g);l=k;return}function $m(a,d){a=a|0;d=d|0;var e=0;e=b[(c[a+16>>2]|0)+136>>1]&14;if(d<<24>>24)an(a)|0;if(e<<16>>16)Ym(a,e&65535)|0;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0;d=bn(a)|0;b=Sy(a)|0;while(1){if(!b)break;e=c[b+16>>2]|0;f=c[e+132>>2]|0;h[e+16>>3]=+h[f>>3]*72.0;h[e+24>>3]=+h[f+8>>3]*72.0;b=Ty(a,b)|0}return d|0}function bn(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0,i=0.0,j=0,k=0;a:do if((c[a+60>>2]|0)==(a|0)?(d=a+16|0,e=c[d>>2]|0,(c[(c[e+8>>2]|0)+84>>2]|0)!=0):0){if(!(+h[e+16>>3]!=0.0)?!(+h[e+24>>3]!=0.0):0)b=0;else{cn(a);b=1;e=c[d>>2]|0}j=(c[e+116>>2]&1|0)==0;if(!j){k=e+32|0;i=+h[k>>3];d=e+40|0;h[k>>3]=+h[d>>3];h[d>>3]=i}d=c[e+8>>2]|0;b:do switch(c[d+84>>2]|0){case 2:{f=+h[d+64>>3];if(f<=0.0)break a;g=f/+h[e+32>>3];f=+h[d+72>>3]/+h[e+40>>3];if(g<1.0|f<1.0)if(g<f){i=1.0;f=f/g;break b}else{i=g/f;f=1.0;break b}else i=g;break}case 5:{f=+h[d+64>>3];if(f<=0.0)break a;g=f/+h[e+32>>3];f=+h[d+72>>3]/+h[e+40>>3];if(!(g>1.0&f>1.0))break a;f=g<f?g:f;i=f;break}case 1:{g=+h[d+16>>3];f=+h[e+40>>3]/+h[e+32>>3];if(f<g){i=1.0;f=g/f;break b}else{i=f/g;f=1.0;break b}}default:break a}while(0);g=j?f:i;f=j?i:f;c:do if((c[46363]|0)>1){d=Sy(a)|0;while(1){if(!d)break c;b=Ex(a,d)|0;while(1){if(!b)break;if(c[(c[b+16>>2]|0)+8>>2]|0)dn(b,f,g);b=Gx(a,b)|0}d=Ty(a,d)|0}}while(0);b=Sy(a)|0;while(1){if(!b)break;k=c[(c[b+16>>2]|0)+132>>2]|0;h[k>>3]=+h[k>>3]*f;k=k+8|0;h[k>>3]=+h[k>>3]*g;b=Ty(a,b)|0}en(a,f,g);b=1}else b=0;while(0);return b|0}function cn(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;k=n+16|0;m=n;d=(c[b+16>>2]|0)+16|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];f=+h[m>>3];g=f*.013888888888888888;i=+h[m+8>>3];j=i*.013888888888888888;d=Sy(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;o=c[e+132>>2]|0;h[o>>3]=+h[o>>3]-g;o=o+8|0;h[o>>3]=+h[o>>3]-j;e=c[e+108>>2]|0;if(e|0?a[e+81>>0]|0:0){o=e+56|0;h[o>>3]=+h[o>>3]-f;o=e+64|0;h[o>>3]=+h[o>>3]-i}d=Ty(b,d)|0}e=Sy(b)|0;while(1){if(!e)break;d=Ex(b,e)|0;while(1){if(!d)break;if(c[(c[d+16>>2]|0)+8>>2]|0){c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];fn(d,k)}d=Gx(b,d)|0}e=Ty(b,e)|0}c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];gn(b,k);l=n;return}function dn(b,d,e){b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0;p=c[b>>2]&3;i=c[(c[(c[((p|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;s=(d+-1.0)*72.0;q=s*+h[i>>3];t=(e+-1.0)*72.0;r=t*+h[i+8>>3];p=c[(c[(c[((p|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;s=s*+h[p>>3];t=t*+h[p+8>>3];p=c[b+16>>2]|0;i=c[p+8>>2]|0;j=c[i+4>>2]|0;k=j+-1|0;b=0;i=c[i>>2]|0;while(1){if((b|0)>=(j|0))break;l=c[i+4>>2]|0;m=l+-1|0;n=(b|0)==(k|0);f=0;g=c[i>>2]|0;while(1){if((f|0)>=(l|0))break;do if(f|b){o=+h[g>>3];if((f|0)==(m|0)&n){h[g>>3]=o+q;u=g+8|0;h[u>>3]=+h[u>>3]+r;break}else{h[g>>3]=o*d;u=g+8|0;h[u>>3]=+h[u>>3]*e;break}}else{h[g>>3]=+h[g>>3]+s;u=g+8|0;h[u>>3]=+h[u>>3]+t}while(0);f=f+1|0;g=g+16|0}if(c[i+8>>2]|0){u=i+16|0;h[u>>3]=+h[u>>3]+s;u=i+24|0;h[u>>3]=+h[u>>3]+t}if(c[i+12>>2]|0){u=i+32|0;h[u>>3]=+h[u>>3]+q;u=i+40|0;h[u>>3]=+h[u>>3]+r}b=b+1|0;i=i+48|0}b=c[p+96>>2]|0;if(b|0?a[b+81>>0]|0:0){u=b+56|0;h[u>>3]=+h[u>>3]*d;u=b+64|0;h[u>>3]=+h[u>>3]*e}b=c[p+100>>2]|0;if(b|0?a[b+81>>0]|0:0){u=b+56|0;h[u>>3]=+h[u>>3]+q;u=b+64|0;h[u>>3]=+h[u>>3]+r}b=c[p+104>>2]|0;if(b|0?a[b+81>>0]|0:0){u=b+56|0;h[u>>3]=+h[u>>3]+s;u=b+64|0;h[u>>3]=+h[u>>3]+t}return}function en(b,d,e){b=b|0;d=+d;e=+e;var f=0,g=0,i=0;i=b+16|0;g=c[i>>2]|0;b=g+32|0;h[b>>3]=+h[b>>3]*d;b=g+40|0;h[b>>3]=+h[b>>3]*e;b=g+16|0;h[b>>3]=+h[b>>3]*d;b=g+24|0;h[b>>3]=+h[b>>3]*e;b=c[g+12>>2]|0;if((b|0)!=0?(a[b+81>>0]|0)!=0:0){f=b+56|0;h[f>>3]=+h[f>>3]*d;f=b+64|0;h[f>>3]=+h[f>>3]*e;f=1;b=g}else{f=1;b=g}while(1){if((f|0)>(c[b+180>>2]|0))break;en(c[(c[b+184>>2]|0)+(f<<2)>>2]|0,d,e);f=f+1|0;b=c[i>>2]|0}return}function fn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0;k=c[b+16>>2]|0;b=c[k+8>>2]|0;j=c[b+4>>2]|0;l=d+8|0;b=c[b>>2]|0;g=0;while(1){if((g|0)>=(j|0))break;i=c[b+4>>2]|0;e=c[b>>2]|0;f=0;while(1){if((f|0)>=(i|0))break;h[e>>3]=+h[e>>3]-+h[d>>3];m=e+8|0;h[m>>3]=+h[m>>3]-+h[l>>3];e=e+16|0;f=f+1|0}if(c[b+8>>2]|0){m=b+16|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+24|0;h[m>>3]=+h[m>>3]-+h[l>>3]}if(c[b+12>>2]|0){m=b+32|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+40|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=b+48|0;g=g+1|0}b=c[k+96>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=c[k+108>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=c[k+100>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}b=c[k+104>>2]|0;if(b|0?a[b+81>>0]|0:0){m=b+56|0;h[m>>3]=+h[m>>3]-+h[d>>3];m=b+64|0;h[m>>3]=+h[m>>3]-+h[l>>3]}return}function gn(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;j=k;g=+h[d>>3];i=b+16|0;b=c[i>>2]|0;e=b+32|0;h[e>>3]=+h[e>>3]-g;f=+h[d+8>>3];e=b+40|0;h[e>>3]=+h[e>>3]-f;e=b+16|0;h[e>>3]=+h[e>>3]-g;e=b+24|0;h[e>>3]=+h[e>>3]-f;e=c[b+12>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){m=e+56|0;h[m>>3]=+h[m>>3]-g;e=e+64|0;h[e>>3]=+h[e>>3]-f;e=1}else e=1;while(1){if((e|0)>(c[b+180>>2]|0))break;m=c[(c[b+184>>2]|0)+(e<<2)>>2]|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];gn(m,j);e=e+1|0;b=c[i>>2]|0}l=k;return}function hn(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0.0,i=0,j=0;i=l;l=l+16|0;d=i;mM(a);e=a+16|0;b=c[e>>2]|0;f=+h[b+16>>3]*.013888888888888888;g=+h[b+24>>3]*.013888888888888888;b=Sy(a)|0;while(1){if(!b)break;j=c[(c[b+16>>2]|0)+132>>2]|0;h[j>>3]=+h[j>>3]-f;j=j+8|0;h[j>>3]=+h[j>>3]-g;b=Ty(a,b)|0}j=(c[e>>2]|0)+16|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];jn(a,d);$m(a,1);l=i;return}function jn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0.0;g=l;l=l+16|0;f=g;d=a+16|0;a=1;while(1){e=c[d>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[(c[e+184>>2]|0)+(a<<2)>>2]|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];jn(e,f);a=a+1|0}j=+h[b>>3];f=e+32|0;h[f>>3]=+h[f>>3]-j;i=+h[b+8>>3];b=e+40|0;h[b>>3]=+h[b>>3]-i;b=e+16|0;h[b>>3]=+h[b>>3]-j;b=e+24|0;h[b>>3]=+h[b>>3]-i;l=g;return}function kn(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0;p=(e|0)>2;n=0;o=0;j=c[f+4>>2]|0;b=c[f>>2]|0;while(1){if((o|0)>=(d|0)){b=0;break}i=c[(c[g+(o<<2)>>2]|0)+16>>2]|0;l=a[i+119>>0]|0;a:do if(!(l<<24>>24)){k=b+8|0;h[b>>3]=+k2();i=j+8|0;h[j>>3]=+k2();if(p){b=2;while(1){if((b|0)==(e|0)){j=n;b=k;break a}q=+k2();h[(c[f+(b<<2)>>2]|0)+(o<<3)>>3]=q;b=b+1|0}}else{j=n;b=k}}else{k=c[i+132>>2]|0;m=b+8|0;h[b>>3]=+h[k>>3];i=j+8|0;h[j>>3]=+h[k+8>>3];b:do if(p){j=2;b=k+16|0;while(1){if((j|0)==(e|0))break b;h[(c[f+(j<<2)>>2]|0)+(o<<3)>>3]=+h[b>>3];j=j+1|0;b=b+8|0}}while(0);j=(l&255)>1?1:n;b=m}while(0);n=j;o=o+1|0;j=i}while(1){if((b|0)>=(e|0))break;Is(d,c[f+(b<<2)>>2]|0);b=b+1|0}return n|0}function ln(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0;d=uH(((O(b+1|0,b)|0)/2|0)<<2)|0;n=wn(b,b,0.0)|0;o=wn(b,b,0.0)|0;a:do if(!(c[a+8>>2]|0)){e=0;while(1){if((e|0)>=(b|0))break a;i=c[a+(e*20|0)>>2]|0;j=a+(e*20|0)+4|0;k=n+(e<<2)|0;f=1;while(1){if((f|0)>=(i|0))break;m=c[(c[j>>2]|0)+(f<<2)>>2]|0;h[(c[n+(m<<2)>>2]|0)+(e<<3)>>3]=-1.0;h[(c[k>>2]|0)+(m<<3)>>3]=-1.0;f=f+1|0}e=e+1|0}}else{e=0;while(1){if((e|0)>=(b|0))break a;i=c[a+(e*20|0)>>2]|0;j=a+(e*20|0)+4|0;k=a+(e*20|0)+8|0;m=n+(e<<2)|0;f=1;while(1){if((f|0)>=(i|0))break;p=c[(c[j>>2]|0)+(f<<2)>>2]|0;l=-1.0/+g[(c[k>>2]|0)+(f<<2)>>2];h[(c[n+(p<<2)>>2]|0)+(e<<3)>>3]=l;h[(c[m>>2]|0)+(p<<3)>>3]=l;f=f+1|0}e=e+1|0}}while(0);b:do if(!(Bq(b,n,o)|0)){D_(d);d=0}else{f=0;j=0;m=b;while(1){if((j|0)>=(b|0))break b;k=o+(j<<2)|0;e=j;i=f;while(1){if((e|0)==(b|0))break;if((j|0)==(e|0))l=0.0;else{p=c[k>>2]|0;l=+h[(c[o+(e<<2)>>2]|0)+(e<<3)>>3]+ +h[p+(j<<3)>>3]+ +h[p+(e<<3)>>3]*-2.0}g[d+(i<<2)>>2]=l;e=e+1|0;i=i+1|0}f=f+m|0;j=j+1|0;m=m+-1|0}}while(0);xn(n);xn(o);return d|0}function mn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+16|0;q=r;if(c[a+8>>2]|0){d=nn(a,b)|0;f=0.0;e=0;p=0;while(1){if((p|0)>=(b|0))break;e=e+p|0;o=c[a+(p*20|0)>>2]|0;k=a+(p*20|0)+4|0;m=(O(p,b)|0)-e|0;n=a+(p*20|0)+8|0;j=1;while(1){if((j|0)>=(o|0))break;i=c[(c[k>>2]|0)+(j<<2)>>2]|0;if((i|0)>=(p|0)){i=d+(m+i<<2)|0;s=+g[(c[n>>2]|0)+(j<<2)>>2];f=f+ +B(+(+g[i>>2]-s));g[i>>2]=s}j=j+1|0}p=p+1|0}if(0){b=c[15686]|0;h[q>>3]=f;g1(b,89903,q)|0}}else d=0;l=r;return d|0}function nn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;h=m;i=uH(((O(b+1|0,b)|0)/2|0)<<2)|0;j=uH(b<<2)|0;zq(h,b);d=0;f=0;k=b;while(1){if((d|0)>=(b|0))break;ir(d,a,b,j);e=d;g=f;while(1){if((e|0)==(b|0))break;c[i+(g<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0;g=g+1|0}d=d+1|0;f=f+k|0;k=k+-1|0}D_(j);Aq(h);l=m;return i|0}function on(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;i=n;j=uH(((O(b+1|0,b)|0)/2|0)<<2)|0;k=uH(b<<2)|0;zq(i,b);d=0;f=0;m=b;while(1){if((d|0)>=(b|0))break;vq(d,a,b,k,i);e=d;h=f;while(1){if((e|0)==(b|0))break;g[j+(h<<2)>>2]=+(c[k+(e<<2)>>2]|0);e=e+1|0;h=h+1|0}d=d+1|0;f=f+m|0;m=m+-1|0}D_(k);Aq(i);l=n;return j|0}function pn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=a+8|0;d=c[r>>2]|0;e=0;f=0;while(1){if((f|0)>=(b|0))break;e=(c[a+(f*20|0)>>2]|0)+e|0;f=f+1|0}f=uH(e<<2)|0;q=uH(b<<2)|0;e=0;while(1){if((e|0)>=(b|0))break;c[q+(e<<2)>>2]=0;e=e+1|0}if(!(c[r>>2]|0)){h=0;while(1){if((h|0)>=(b|0))break;c[a+(h*20|0)+8>>2]=f;_r(a,h,q);i=a+(h*20|0)|0;j=c[i>>2]|0;k=a+(h*20|0)+4|0;l=+(j+-1|0);e=1;while(1){if((e|0)>=(j|0))break;p=c[(c[k>>2]|0)+(e<<2)>>2]|0;s=+((c[a+(p*20|0)>>2]|0)+-1|0)+l;g[f+(e<<2)>>2]=s-+((Zr(a,h,p,q)|0)<<1|0);e=e+1|0}$r(a,h,q);f=f+(c[i>>2]<<2)|0;h=h+1|0}f=on(a,b)|0}else{j=0;while(1){if((j|0)>=(b|0))break;_r(a,j,q);k=a+(j*20|0)|0;m=c[k>>2]|0;n=a+(j*20|0)+4|0;o=m+-2|0;p=a+(j*20|0)+8|0;i=1;while(1){if((i|0)>=(m|0))break;e=c[(c[n>>2]|0)+(i<<2)>>2]|0;h=o+(c[a+(e*20|0)>>2]|0)|0;s=+(h-((Zr(a,j,e,q)|0)<<1)|0);l=+g[(c[p>>2]|0)+(i<<2)>>2];if(l<s)l=+(h-((Zr(a,j,e,q)|0)<<1)|0);g[f+(i<<2)>>2]=l;i=i+1|0}$r(a,j,q);c[p>>2]=f;f=f+(c[k>>2]<<2)|0;j=j+1|0}f=nn(a,b)|0}D_(q);D_(c[r>>2]|0);c[r>>2]=0;a:do if(d|0){e=0;while(1){if((e|0)>=(b|0))break a;c[a+(e*20|0)+8>>2]=d;d=d+(c[a+(e*20|0)>>2]<<2)|0;e=e+1|0}}while(0);return f|0}function qn(a,b,e,f,i,j,k,m,n){a=a|0;b=b|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,P=0.0;M=l;l=l+80|0;L=M+56|0;K=M+48|0;A=M+40|0;u=M+32|0;t=M+24|0;s=M+16|0;p=M+8|0;o=M;q=k&4;J=k&3;a:do if((n|0)<0)e=0;else{if(0)EL();k=(m|0)==2;b:do if(k){if(0)E1(91878,24,1,c[15686]|0)|0;e=pn(a,b)|0;w=14}else{switch(m|0){case 1:{e=ln(a,b)|0;if(e|0){I=e;break b}Pw(0,91903,o)|0;Pw(3,91952,p)|0;w=15;break b}case 3:break;default:{w=15;break b}}if(0)E1(92005,21,1,c[15686]|0)|0;e=mn(a,b)|0;w=14}while(0);if((w|0)==14)if(!e)w=15;else I=e;do if((w|0)==15){if(0)E1(92027,26,1,c[15686]|0)|0;if(!(c[a+8>>2]|0)){I=on(a,b)|0;break}else{I=nn(a,b)|0;break}}while(0);if(0){H=c[15686]|0;h[s>>3]=+FL();g1(H,92054,s)|0;E1(92066,25,1,H)|0;EL()}c:do if((b|0)>1&(q|0)!=0)if((rn(a,b,f,j,q,J,k&1)|0)<0){u=0;t=0;e=-1;a=0;s=0;q=0;p=0;o=0;m=0;k=0}else{k=0;while(1){if((k|0)>=(j|0)){y=0;w=35;break c}m=f+(k<<2)|0;r=1.0;e=0;while(1){if((e|0)==(b|0))break;x=+B(+(+h[(c[m>>2]|0)+(e<<3)>>3]));r=x>r?x:r;e=e+1|0}r=1.0/r;e=0;while(1){if((e|0)==(b|0)){e=0;break}H=(c[m>>2]|0)+(e<<3)|0;h[H>>3]=+h[H>>3]*r;e=e+1|0}while(1){if((e|0)==(b|0))break;x=(+k2()+-.5)*1.0e-06;H=(c[m>>2]|0)+(e<<3)|0;h[H>>3]=+h[H>>3]+x;e=e+1|0}Is(b,c[m>>2]|0);k=k+1|0}}else{y=kn(0,b,j,f,i)|0;w=35}while(0);d:do if((w|0)==35){if(0){H=c[15686]|0;h[t>>3]=+FL();g1(H,92092,t)|0}if((b|0)==1|(n|0)==0){e=0;break a}if(0){H=c[15686]|0;h[u>>3]=+FL();g1(H,92054,u)|0;E1(89925,26,1,H)|0;EL()}s=j<<2;H=uH(s)|0;t=b<<2;a=O(t,j)|0;G=uH(a)|0;e=0;while(1){if((e|0)>=(j|0))break;m=G+((O(e,b)|0)<<2)|0;c[H+(e<<2)>>2]=m;o=f+(e<<2)|0;k=0;while(1){if((k|0)>=(b|0))break;g[m+(k<<2)>>2]=+h[(c[o>>2]|0)+(k<<3)>>3];k=k+1|0}e=e+1|0}e:do if(!J){p=b+-1|0;e=0;r=0.0;o=0;while(1){if((o|0)>=(p|0))break e;q=b-o|0;m=e;k=1;while(1){e=m+1|0;if((k|0)>=(q|0))break;m=e;r=+g[I+(e<<2)>>2]+r;k=k+1|0}o=o+1|0}}else r=+(b|0)*.5*+(b+-1|0);while(0);C=(O(b+1|0,b)|0)/2|0;D=(J|0)==2;if(D)ct(C,I);dt(C,I);E=b<<3;m=uH(E)|0;H3(m|0,0,E|0)|0;F=b+-1|0;e=0;o=0;while(1){if((o|0)>=(F|0)){e=b;k=0;o=0;break}p=b-o|0;v=0.0;k=1;while(1){e=e+1|0;if((k|0)>=(p|0))break;x=+g[I+(e<<2)>>2];z=m+(k+o<<3)|0;h[z>>3]=+h[z>>3]-x;v=v+x;k=k+1|0}z=m+(o<<3)|0;h[z>>3]=+h[z>>3]-v;o=o+1|0}while(1){if((k|0)>=(b|0))break;g[I+(o<<2)>>2]=+h[m+(k<<3)>>3];z=e+o|0;e=e+-1|0;k=k+1|0;o=z}z=uH(s)|0;c[z>>2]=uH(a)|0;e=1;while(1){if((e|0)>=(j|0))break;c[z+(e<<2)>>2]=(c[z>>2]|0)+((O(e,b)|0)<<2);e=e+1|0}p=uH(t)|0;o=uH(t)|0;k=uH(C<<2)|0;if(0){w=c[15686]|0;h[A>>3]=+FL();g1(w,92054,A)|0;E1(89952,15,1,w)|0;EL()}w=(y|0)==0;y=c[15686]|0;e=0;q=0;x=1797693134862315708145274.0e284;while(1){if(!(q<<24>>24==0&(e|0)<(n|0)))break;H3(m|0,0,E|0)|0;if(D){et(C,I,k);u=0;a=0}else{u=0;a=0}while(1){if((u|0)>=(F|0)){q=b;s=0;a=0;break}t=b-u+-1|0;at(t,0.0,o);q=0;while(1){if((q|0)>=(j|0))break;A=H+(q<<2)|0;at(t,+g[(c[A>>2]|0)+(u<<2)>>2],p);Xs(t,p,-1.0,(c[A>>2]|0)+(u<<2)+4|0);ct(t,p);Ws(t,p,o,o);q=q+1|0}ft(t,o);q=0;while(1){if((q|0)>=(t|0))break;s=o+(q<<2)|0;v=+g[s>>2];if(v>=3402823466385288598117041.0e14|v<0.0)g[s>>2]=0.0;q=q+1|0}q=a+1|0;a=u+1|0;f:do if(D){v=0.0;s=0;while(1){if((s|0)>=(t|0))break f;A=k+(q<<2)|0;N=+g[A>>2]*+g[o+(s<<2)>>2];g[A>>2]=N;A=m+(a+s<<3)|0;h[A>>3]=+h[A>>3]-N;v=v+N;q=q+1|0;s=s+1|0}}else{v=0.0;s=0;while(1){if((s|0)>=(t|0))break f;N=+g[o+(s<<2)>>2];g[k+(q<<2)>>2]=N;A=m+(a+s<<3)|0;h[A>>3]=+h[A>>3]-N;v=v+N;q=q+1|0;s=s+1|0}}while(0);A=m+(u<<3)|0;h[A>>3]=+h[A>>3]-v;u=a;a=q}while(1){if((s|0)>=(b|0)){q=0;break}g[k+(a<<2)>>2]=+h[m+(s<<3)>>3];A=q+a|0;q=q+-1|0;s=s+1|0;a=A}while(1){if((q|0)>=(j|0)){v=0.0;q=0;break}Us(k,b,c[H+(q<<2)>>2]|0,c[z+(q<<2)>>2]|0);q=q+1|0}while(1){if((q|0)>=(j|0))break;v=+_s(b,c[H+(q<<2)>>2]|0,c[z+(q<<2)>>2]|0)+v;q=q+1|0}v=v*2.0+r;q=0;while(1){if((q|0)>=(j|0))break;A=H+(q<<2)|0;Us(I,b,c[A>>2]|0,p);v=v-+_s(b,c[A>>2]|0,p);q=q+1|0}P=x-v;N=+h[22909];q=(v<N?1:(P>=0.0?P:-P)/x<N)&1;a=0;while(1){if((a|0)>=(j|0))break;t=H+(a<<2)|0;s=c[t>>2]|0;g:do if(w){if((Fq(I,s,c[z+(a<<2)>>2]|0,b,.001,b)|0)<0){u=z;t=I;e=-1;a=G;s=H;q=z;break d}}else{Zs(b,s,p);if((Fq(I,p,c[z+(a<<2)>>2]|0,b,.001,b)|0)<0){u=z;t=I;e=-1;a=G;s=H;q=z;break d}else s=0;while(1){if((s|0)>=(b|0))break g;if((d[(c[(c[i+(s<<2)>>2]|0)+16>>2]|0)+119>>0]|0)<=1)c[(c[t>>2]|0)+(s<<2)>>2]=c[p+(s<<2)>>2];s=s+1|0}}while(0);a=a+1|0}if(((e|0)%5|0|0)==0&0!=0?(h[K>>3]=v,g1(y,90277,K)|0,((e+5|0)%50|0|0)==0):0)n3(10,y)|0;e=e+1|0;x=v}if(!0)q=0;else{N=+sn(H,I,j,b,J);P=+FL();h[L>>3]=N;c[L+8>>2]=e;h[L+16>>3]=P;g1(y,89968,L)|0;q=0}while(1){if((q|0)>=(j|0)){u=z;t=I;a=G;s=H;q=z;break d}a=H+(q<<2)|0;t=f+(q<<2)|0;s=0;while(1){if((s|0)>=(b|0))break;h[(c[t>>2]|0)+(s<<3)>>3]=+g[(c[a>>2]|0)+(s<<2)>>2];s=s+1|0}q=q+1|0}}while(0);D_(a);D_(s);D_(t);if(u|0){D_(c[u>>2]|0);D_(q)}D_(p);D_(o);D_(m);D_(k)}while(0);l=M;return e|0}function rn(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0.0,q=0,r=0,s=0.0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0;R=l;l=l+32|0;o=R+24|0;Q=R+8|0;H=R+4|0;N=R;M=(d|0)<50?d:50;P=vH(M<<2)|0;G=d<<3;n=vH(O(G,M)|0)|0;m=0;while(1){if((m|0)>=(M|0))break;c[P+(m<<2)>>2]=n+((O(m,d)|0)<<3);m=m+1|0}E=M<<1;E=(E|0)>50?E:50;E=(E|0)>(d|0)?d:E;c[o>>2]=0;sr(b,d,E,o,k);tr(c[o>>2]|0,d,E);mt(c[o>>2]|0,E,d,P,M);D_(c[c[o>>2]>>2]|0);D_(c[o>>2]|0);E=d<<2;L=vH(E)|0;m=0;while(1){if((m|0)>=(d|0))break;c[L+(m<<2)>>2]=-1;m=m+1|0}zq(Q,d);J=c[b+8>>2]|0;I=(k|0)!=0;if(I)es(b,d);C=vH(E)|0;K=vH(160)|0;n=vH(d*160|0)|0;D=vH(160)|0;m=0;while(1){if((m|0)==40)break;c[D+(m<<2)>>2]=n+((O(m,d)|0)<<2);m=m+1|0}m=(g2()|0)%(d|0)|0;c[L+(m<<2)>>2]=0;c[K>>2]=m;n=c[D>>2]|0;if(I){cr(m,b,d,n);n=0;o=0}else{vq(m,b,d,n,Q);n=0;o=0}while(1){if((o|0)>=(d|0)){r=1;break}F=c[(c[D>>2]|0)+(o<<2)>>2]|0;c[C+(o<<2)>>2]=F;A=(F|0)>(n|0);m=A?o:m;n=A?F:n;o=o+1|0}while(1){if((r|0)==40){m=0;break}c[L+(m<<2)>>2]=r;c[K+(r<<2)>>2]=m;t=D+(r<<2)|0;n=c[t>>2]|0;if(I){cr(m,b,d,n);q=0;n=0}else{vq(m,b,d,n,Q);q=0;n=0}while(1){if((q|0)>=(d|0))break;o=C+(q<<2)|0;F=c[o>>2]|0;k=c[(c[t>>2]|0)+(q<<2)>>2]|0;k=(F|0)<(k|0)?F:k;c[o>>2]=k;if((k|0)<=(n|0)){if((k|0)==(n|0)?((g2()|0)%(q+1|0)|0|0)==0:0){n=c[o>>2]|0;m=q}}else{n=k;m=q}q=q+1|0}r=r+1|0}while(1){if((m|0)>=(d|0))break;c[C+(m<<2)>>2]=-1;m=m+1|0}w=vH(E)|0;F=vH(d<<4)|0;x=d+-1|0;y=x<<2;A=0;o=0;k=0;n=0;z=0;while(1){if((z|0)>=(d|0))break;m=L+(z<<2)|0;a:do if((c[m>>2]|0)>-1){t=F+(z<<4)+4|0;c[t>>2]=vH(y)|0;v=vH(y)|0;c[F+(z<<4)+8>>2]=v;c[F+(z<<4)>>2]=x;a[F+(z<<4)+12>>0]=1;r=D+(c[m>>2]<<2)|0;m=0;while(1){if((m|0)==(z|0)){q=z;break}c[(c[t>>2]|0)+(m<<2)>>2]=m;c[v+(m<<2)>>2]=c[(c[r>>2]|0)+(m<<2)>>2];m=m+1|0}while(1){m=q+1|0;if((q|0)==(x|0)){m=x;break a}c[(c[t>>2]|0)+(q<<2)>>2]=m;c[v+(q<<2)>>2]=c[(c[r>>2]|0)+(m<<2)>>2];q=m}}else{if((n|0)<40){k=vH(E)|0;o=vH(E)|0;n=d;m=1}else m=0;a[F+(z<<4)+12>>0]=m;c[F+(z<<4)+4>>2]=k;c[F+(z<<4)+8>>2]=o;c[F+(z<<4)>>2]=40;m=0;while(1){if((m|0)==40)break;c[k+(m<<2)>>2]=c[K+(m<<2)>>2];c[o+(m<<2)>>2]=c[(c[D+(m<<2)>>2]|0)+(z<<2)>>2];m=m+1|0}o=o+160|0;k=k+160|0;n=n+-40|0;m=40}while(0);A=m+A|0;z=z+1|0}D_(C);D_(w);if(D|0){D_(c[D>>2]|0);D_(D)}D=vH(d*20|0)|0;q=A+d<<2;r=vH(q)|0;v=(j|0)==2;q=vH(q)|0;t=0;while(1){if((t|0)>=(d|0))break;c[D+(t*20|0)+4>>2]=r;c[D+(t*20|0)+8>>2]=q;m=(c[F+(t<<4)>>2]|0)+1|0;w=D+(t*20|0)|0;c[w>>2]=m;o=(c[F+(t<<4)+8>>2]|0)+-4|0;k=F+(t<<4)+4|0;b:do if(v){p=0.0;n=1;while(1){if((n|0)>=(m|0))break b;c[r+(n<<2)>>2]=c[(c[k>>2]|0)+(n+-1<<2)>>2];u=+(c[o+(n<<2)>>2]|0);u=-1.0/(u*u);g[q+(n<<2)>>2]=u;p=p-u;n=n+1|0;m=c[w>>2]|0}}else{p=0.0;n=1;while(1){if((n|0)>=(m|0))break b;c[r+(n<<2)>>2]=c[(c[k>>2]|0)+(n+-1<<2)>>2];u=-1.0/+(c[o+(n<<2)>>2]|0);g[q+(n<<2)>>2]=u;p=p-u;n=n+1|0;m=c[w>>2]|0}}while(0);c[r>>2]=t;g[q>>2]=p;E=c[w>>2]|0;q=q+(E<<2)|0;r=r+(E<<2)|0;t=t+1|0}C=vH(f<<2)|0;c[C>>2]=vH(O(f<<3,M)|0)|0;m=1;while(1){if((m|0)>=(f|0))break;c[C+(m<<2)>>2]=(c[C>>2]|0)+((O(m,M)|0)<<3);m=m+1|0}c:do if(i){m=0;while(1){if((m|0)>=(f|0))break;o=C+(m<<2)|0;n=0;while(1){if((n|0)>=(M|0))break;h[(c[o>>2]|0)+(n<<3)>>3]=0.0;n=n+1|0}m=m+1|0}if((f|0)!=2){m=0;while(1){if((m|0)>=(f|0)){m=0;break c}h[(c[C+(m<<2)>>2]|0)+(m<<3)>>3]=1.0;m=m+1|0}}h[c[C>>2]>>3]=1.0;m=C+4|0;if(!((nt(P,M,d,c[m>>2]|0)|0)<<24>>24)){n=c[m>>2]|0;m=0;while(1){if((m|0)>=(M|0))break;h[n+(m<<3)>>3]=0.0;m=m+1|0}h[n+8>>3]=1.0;m=0}else m=0}else{n=0;while(1){if((n|0)>=(f|0)){m=0;break c}o=C+(n<<2)|0;m=0;while(1){if((m|0)>=(M|0))break;u=+(g2()|0)*4.656612875245797e-10;h[(c[o>>2]|0)+(m<<3)>>3]=u;m=m+1|0}n=n+1|0}}while(0);while(1){if((m|0)>=(f|0))break;Ss(P,d,M,c[C+(m<<2)>>2]|0,c[e+(m<<2)>>2]|0);m=m+1|0}c[H>>2]=0;c[N>>2]=0;Hs(D,P,d,M,H);Fs(P,c[H>>2]|0,M,d,M,N);D_(c[c[H>>2]>>2]|0);D_(c[H>>2]|0);z=vH(G)|0;A=vH(M<<3)|0;m=0;n=0;p=+tn(e,F,f,d,j);d:while(1){if((n|0)<50&m<<24>>24==0)x=0;else break;while(1){if((x|0)>=(f|0))break;y=e+(x<<2)|0;o=0;while(1){if((o|0)>=(d|0))break;q=z+(o<<3)|0;h[q>>3]=0.0;r=(c[F+(o<<4)+8>>2]|0)+-4|0;t=c[D+(o*20|0)+4>>2]|0;v=c[D+(o*20|0)+8>>2]|0;w=D+(o*20|0)|0;s=0.0;k=1;while(1){if((k|0)>=(c[w>>2]|0))break;m=c[t+(k<<2)>>2]|0;u=+gs(e,f,o,m);if(u>1.0e-30){u=-(+g[v+(k<<2)>>2]*+(c[r+(k<<2)>>2]|0))/u;h[q>>3]=u*+h[(c[y>>2]|0)+(m<<3)>>3]+ +h[q>>3];s=s-u}k=k+1|0}h[q>>3]=+h[q>>3]+ +h[(c[y>>2]|0)+(o<<3)>>3]*s;o=o+1|0}Es(P,M,d,z,A);m=C+(x<<2)|0;if(Eq(c[N>>2]|0,c[m>>2]|0,A,M,.001,M,0)|0){n=-1;break d}Ss(P,d,M,c[m>>2]|0,c[y>>2]|0);x=x+1|0}if(!(n&1)){u=+tn(e,F,f,d,j);p=+B(+(u-p))/(u+1.0e-10);m=p<+h[22909]&1;p=u}else m=0;n=n+1|0}D_(A);D_(z);if(I){fs(b,d,J);m=0}else m=0;while(1){if((m|0)>=(d|0))break;if(a[F+(m<<4)+12>>0]|0){D_(c[F+(m<<4)+4>>2]|0);D_(c[F+(m<<4)+8>>2]|0)}m=m+1|0}D_(F);D_(c[D+4>>2]|0);D_(c[D+8>>2]|0);D_(D);D_(L);D_(K);D_(c[C>>2]|0);D_(C);m=c[N>>2]|0;if(m|0){D_(c[m>>2]|0);D_(c[N>>2]|0)}D_(c[P>>2]|0);D_(P);Aq(Q);l=R;return n|0}function sn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0;q=e+-1|0;o=(f|0)==2;h=0.0;f=0;m=0;while(1){if((m|0)>=(q|0))break;p=e-m|0;n=1;while(1){f=f+1|0;if((n|0)>=(p|0))break;k=n+m|0;i=0.0;j=0;while(1){if((j|0)>=(d|0))break;r=c[a+(j<<2)>>2]|0;l=+g[r+(m<<2)>>2]-+g[r+(k<<2)>>2];i=i+l*l;j=j+1|0}i=+C(+i);l=+g[b+(f<<2)>>2];if(o){i=1.0/+C(+l)-i;i=i*i}else{i=1.0/l-i;i=i*i}n=n+1|0;h=i*l+h}m=m+1|0}return +h}function tn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;a:do if((f|0)==2){g=0.0;l=0;while(1){if((l|0)>=(e|0))break a;n=c[b+(l<<4)>>2]|0;o=b+(l<<4)+4|0;m=b+(l<<4)+8|0;k=0;while(1){if((k|0)>=(n|0))break;j=c[(c[o>>2]|0)+(k<<2)>>2]|0;if((j|0)>(l|0)){i=0.0;f=0;while(1){if((f|0)>=(d|0))break;q=c[a+(f<<2)>>2]|0;p=+h[q+(l<<3)>>3]-+h[q+(j<<3)>>3];i=p*p+i;f=f+1|0}i=+C(+i);p=+(c[(c[m>>2]|0)+(k<<2)>>2]|0);i=p-i;g=i*i/(p*p)+g}k=k+1|0}l=l+1|0}}else{l=0;g=0.0;while(1){if((l|0)>=(e|0))break a;m=c[b+(l<<4)>>2]|0;n=b+(l<<4)+4|0;o=b+(l<<4)+8|0;k=0;while(1){if((k|0)>=(m|0))break;j=c[(c[n>>2]|0)+(k<<2)>>2]|0;if((j|0)>(l|0)){i=0.0;f=0;while(1){if((f|0)>=(d|0))break;q=c[a+(f<<2)>>2]|0;p=+h[q+(l<<3)>>3]-+h[q+(j<<3)>>3];i=p*p+i;f=f+1|0}i=+C(+i);p=+(c[(c[o>>2]|0)+(k<<2)>>2]|0);i=p-i;g=i*i/p+g}k=k+1|0}l=l+1|0}}while(0);return +g}function un(a){a=+a;return +(+C(+a)*a)}function vn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0;g=c[46366]|0;e=0.0;f=0;while(1){if((f|0)>=(g|0))break;i=+h[a+(f<<3)>>3]-+h[b+(f<<3)>>3];h[d+(f<<3)>>3]=i;e=i*i+e;f=f+1|0}return +(+C(+e))}function wn(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;i=uH(a<<2)|0;f=0;g=uH(O(a<<3,b)|0)|0;while(1){if((f|0)>=(a|0))break;c[i+(f<<2)>>2]=g;e=0;while(1){if((e|0)>=(b|0))break;h[g+(e<<3)>>3]=d;e=e+1|0}f=f+1|0;g=g+(b<<3)|0}return i|0}function xn(a){a=a|0;if(a|0){D_(c[a>>2]|0);D_(a)}return}function yn(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+16|0;n=ay(b)|0;m=by(b)|0;k=nx(b,2,90566,0)|0;a:do if(!d){h[22909]=+(n|0)*.0001;aH(b,105860,183272);g=xx(c[b+60>>2]|0,90006)|0;if(!g)e=.99;else e=+b2(g);h[22911]=e;g=uH((n<<2)+4|0)|0;j=b+16|0;c[(c[j>>2]|0)+152>>2]=g;g=0;e=0.0;i=Sy(b)|0;while(1){if(!i)break a;c[(c[(c[j>>2]|0)+152>>2]|0)+(g<<2)>>2]=i;p=c[i+16>>2]|0;c[p+120>>2]=g;c[p+124>>2]=-1;f=+Bn(b,i,k)+e;g=g+1|0;e=f;i=Ty(b,i)|0}}else{h[22909]=.0001;aH(b,105860,183272);g=0;e=0.0;i=Sy(b)|0;while(1){if(!i)break a;c[(c[i+16>>2]|0)+120>>2]=g;f=+Bn(b,i,k)+e;g=g+1|0;e=f;i=Ty(b,i)|0}}while(0);g=xx(b,90014)|0;if((g|0)!=0?(a[g>>0]|0)!=0:0){e=+h[22909];f=+b2(g);if(!(e>f))e=f}else e=e/+(((m|0)>1?m:1)|0)*+C(+(+(n|0)))+1.0;h[22910]=e;if(!(c[46363]|d)){d=wn(n,n,e)|0;p=b+16|0;c[(c[p>>2]|0)+160>>2]=d;d=wn(n,n,1.0)|0;c[(c[p>>2]|0)+164>>2]=d;d=wn(n,c[46366]|0,1.0)|0;c[(c[p>>2]|0)+168>>2]=d;d=Cn(n,n,c[46366]|0)|0;c[(c[p>>2]|0)+172>>2]=d}l=o;return n|0}function zn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=0;e=0;j=Jx(a,b)|0;a:while(1){if(!j)break;h=c[j>>2]&3;g=c[((h|0)==2?j:j+-48|0)+40>>2]|0;h=c[((h|0)==3?j:j+48|0)+40>>2]|0;do if((g|0)!=(h|0)){i=(h|0)==(b|0);if((e|0)!=1){f=i?g:h;c[d>>2]=f;e=e+1|0;break}if(!((g|0)==(f|0)&i)?!((g|0)==(b|0)&(h|0)==(f|0)):0){e=2;break a}else e=1}while(0);j=Kx(a,j,b)|0}return e|0}function An(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;g=a+60|0;a:while(1){b:while(1){if(!b)break a;switch(zn(a,b,f)|0){case 0:{e=5;break b}case 1:{e=8;break b}default:b=0}}if((e|0)==5){if((d|0)==(b|0))d=Ty(a,d)|0;dz(c[g>>2]|0,b)|0;b=0;continue}else if((e|0)==8){if((d|0)==(b|0))d=Ty(a,d)|0;dz(c[g>>2]|0,b)|0;b=c[f>>2]|0;continue}}l=h;return d|0}function Bn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0,k=0;k=l;l=l+32|0;i=k+8|0;g=k;b=Ex(a,b)|0;e=0.0;while(1){if(!b)break;switch(Dn(b,d,g)|0){case 0:{f=+h[g>>3];break}case 2:{c[i>>2]=ry(a)|0;h[i+8>>3]=1.0;Pw(3,90026,i)|0;j=6;break}default:j=6}if((j|0)==6){j=0;h[g>>3]=1.0;f=1.0}h[(c[b+16>>2]|0)+136>>3]=f;b=Gx(a,b)|0;e=f+e}l=k;return +e}function Cn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0;j=uH((a<<2)+4|0)|0;k=(b<<2)+4|0;l=d<<3;g=0;while(1){if((g|0)>=(a|0))break;i=j+(g<<2)|0;c[i>>2]=uH(k)|0;f=0;while(1){if((f|0)>=(b|0))break;e=uH(l)|0;c[(c[i>>2]|0)+(f<<2)>>2]=e;e=0;while(1){if((e|0)>=(d|0))break;h[(c[(c[i>>2]|0)+(f<<2)>>2]|0)+(e<<3)>>3]=0.0;e=e+1|0}f=f+1|0}c[(c[i>>2]|0)+(f<<2)>>2]=0;g=g+1|0}c[j+(g<<2)>>2]=0;return j|0}function Dn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;do if((d|0)!=0?(f=yx(b,d)|0,(a[f>>0]|0)!=0):0){c[i>>2]=e;if(((N1(f,98183,i)|0)>=1?(g=+h[e>>3],!(g<0.0)):0)?g!=0.0|(c[46363]|0)!=0:0){b=0;break}c[j>>2]=f;Pw(0,90053,j)|0;b=2}else b=1;while(0);l=k;return b|0}function En(a){a=a|0;return yn(a,0)|0}function Fn(a){a=a|0;a=a+16|0;D_(c[(c[a>>2]|0)+152>>2]|0);if(!(c[46363]|0)){xn(c[(c[a>>2]|0)+160>>2]|0);xn(c[(c[a>>2]|0)+164>>2]|0);xn(c[(c[a>>2]|0)+168>>2]|0);Gn(c[(c[a>>2]|0)+172>>2]|0);c[(c[a>>2]|0)+172>>2]=0}return}function Gn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(a|0){f=0;while(1){g=a+(f<<2)|0;b=c[g>>2]|0;if(!b)break;else e=0;while(1){d=c[b+(e<<2)>>2]|0;if(!d)break;D_(d);e=e+1|0;b=c[g>>2]|0}D_(b);f=f+1|0}D_(a)}return}function Hn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;e=+(b|0);b=a+16|0;while(1){if((d|0)>=(c[46366]|0))break;f=+k2()*e;h[(c[(c[b>>2]|0)+132>>2]|0)+(d<<3)>>3]=f;d=d+1|0}return}function In(a,b){a=a|0;b=b|0;Hn(a,b,2);return}function Jn(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0;e=+(b|0);f=+k2()*e;d=a+16|0;h[c[(c[d>>2]|0)+132>>2]>>3]=f;e=+k2()*e;h[(c[(c[d>>2]|0)+132>>2]|0)+8>>3]=e;if((c[46366]|0)>2)In(a,b);return}function Kn(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(0)E1(90071,26,1,c[15686]|0)|0;d=pm(b,d,2)|0;a:do if((d|0)!=1){if(!(c[46027]|d)){Pw(0,90098,e)|0;c[46027]=1}e=b+16|0;d=0;while(1){b=c[(c[(c[e>>2]|0)+152>>2]|0)+(d<<2)>>2]|0;if(!b)break a;if(!(a[(c[b+16>>2]|0)+119>>0]|0))Jn(b,1);d=d+1|0}}while(0);l=f;return}function Ln(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+96|0;p=q+80|0;n=q;if(0){E1(90147,25,1,c[15686]|0)|0;EL()}o=a+16|0;f=c[o>>2]|0;k=c[f+164>>2]|0;f=c[f+160>>2]|0;m=0;while(1){if((m|0)>=(b|0))break;i=f+(m<<2)|0;j=k+(m<<2)|0;e=0;while(1){if((e|0)==(m|0))break;g=+h[(c[i>>2]|0)+(e<<3)>>3];g=1.0/(g*g);d=c[(c[o>>2]|0)+152>>2]|0;d=Rx(a,c[d+(m<<2)>>2]|0,c[d+(e<<2)>>2]|0,0,0)|0;if(d)g=+h[(c[d+16>>2]|0)+128>>3]*g;h[(c[k+(e<<2)>>2]|0)+(m<<3)>>3]=g;h[(c[j>>2]|0)+(e<<3)>>3]=g;e=e+1|0}m=m+1|0}a=c[46366]|0;e=0;while(1){if((e|0)<(b|0))d=0;else break;while(1){if((d|0)>=(a|0))break;h[(c[(c[(c[o>>2]|0)+168>>2]|0)+(e<<2)>>2]|0)+(d<<3)>>3]=0.0;d=d+1|0}e=e+1|0}i=0;while(1){d=c[(c[(c[o>>2]|0)+152>>2]|0)+(i<<2)>>2]|0;if(!d)break;a=d+16|0;d=0;while(1){if((d|0)>=(b|0))break;a:do if((i|0)!=(d|0)){g=+vn(c[(c[a>>2]|0)+132>>2]|0,c[(c[(c[(c[(c[o>>2]|0)+152>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+132>>2]|0,n);f=c[46366]|0;g=1.0/g;e=0;while(1){if((e|0)>=(f|0))break a;m=c[o>>2]|0;r=+h[n+(e<<3)>>3];r=(r-+h[(c[(c[m+160>>2]|0)+(i<<2)>>2]|0)+(d<<3)>>3]*r*g)*+h[(c[(c[m+164>>2]|0)+(i<<2)>>2]|0)+(d<<3)>>3];h[(c[(c[(c[m+172>>2]|0)+(i<<2)>>2]|0)+(d<<2)>>2]|0)+(e<<3)>>3]=r;m=(c[(c[m+168>>2]|0)+(i<<2)>>2]|0)+(e<<3)|0;h[m>>3]=+h[m>>3]+r;e=e+1|0}}while(0);d=d+1|0}i=i+1|0}if(0){o=c[15686]|0;h[p>>3]=+FL();g1(o,90173,p)|0}l=q;return}function Mn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0;i=l;l=l+32|0;g=i+24|0;f=i+8|0;e=i;j=+h[22909];h[22831]=j*j;while(1){d=Nn(a,b)|0;if(!d)break;On(a,b,d)}if(!0)b=a+16|0;else{d=c[15686]|0;h[e>>3]=+Pn(a,b);g1(d,90183,e)|0;b=a+16|0;k=c[(c[b>>2]|0)+156>>2]|0;e=(k|0)==(c[46365]|0)?90197:191979;j=+FL();c[f>>2]=k;c[f+4>>2]=e;h[f+8>>3]=j;g1(d,90199,f)|0}b=c[(c[b>>2]|0)+156>>2]|0;if((b|0)==(c[46365]|0)){k=ry(a)|0;c[g>>2]=b;c[g+4>>2]=k;Pw(0,90226,g)|0}l=i;return}function Nn(a,b){a=a|0;b=b|0;var e=0.0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+16|0;q=r;o=(c[46029]|0)+1|0;c[46029]=o;a=c[a+16>>2]|0;if((c[a+156>>2]|0)<(c[46365]|0)){m=c[46366]|0;n=a+152|0;k=a+168|0;a=0;e=0.0;j=0;while(1){if((j|0)>=(b|0))break;g=c[(c[n>>2]|0)+(j<<2)>>2]|0;if((d[(c[g+16>>2]|0)+119>>0]|0)<=1){i=0.0;f=0;while(1){if((f|0)>=(m|0))break;s=+h[(c[(c[k>>2]|0)+(j<<2)>>2]|0)+(f<<3)>>3];i=s*s+i;f=f+1|0}if(i>e){a=g;e=i}}j=j+1|0}if(!(e<+h[22831])){if(0!=0&((o|0)%100|0|0)==0?(p=c[15686]|0,h[q>>3]=+C(+e),g1(p,90277,q)|0,((c[46029]|0)%1e3|0|0)==0):0)n3(10,p)|0}else a=0}else a=0;l=r;return a|0}function On(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;k=d+16|0;m=c[(c[k>>2]|0)+120>>2]|0;f=c[46028]|0;if(!f){g=c[46366]|0;g=vH(O(g<<3,g)|0)|0}else{g=c[46366]|0;g=xH(f,O(g<<3,g)|0)|0}c[46028]=g;Qn(a,b,m,g);i=c[46366]|0;j=a+16|0;f=0;while(1){if((f|0)>=(i|0))break;h[182656+(f<<3)>>3]=-+h[(c[(c[(c[j>>2]|0)+168>>2]|0)+(m<<2)>>2]|0)+(f<<3)>>3];f=f+1|0}Xt(g,182736,182656,i);f=0;while(1){if((f|0)>=(c[46366]|0))break;e=+h[22911];e=(1.0-e)*2.0*+k2()+e;i=182736+(f<<3)|0;e=e*+h[i>>3];h[i>>3]=e;i=(c[(c[k>>2]|0)+132>>2]|0)+(f<<3)|0;h[i>>3]=+h[i>>3]+e;f=f+1|0}k=(c[j>>2]|0)+156|0;c[k>>2]=(c[k>>2]|0)+1;Rn(a,b,m);if(cM()|0){g=c[46366]|0;e=0.0;f=0;while(1){if((f|0)>=(g|0))break;e=+B(+(+h[182736+(f<<3)>>3]))+e;f=f+1|0}e=+C(+e);m=c[15686]|0;c[n>>2]=ry(d)|0;h[n+8>>3]=e;g1(m,90268,n)|0}l=o;return}function Pn(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=b+-1|0;n=a+16|0;o=c[46366]|0;g=0;d=0.0;a:while(1){if((g|0)>=(q|0))break;m=c[n>>2]|0;p=c[m+152>>2]|0;j=g+1|0;k=(c[p+(g<<2)>>2]|0)+16|0;l=m+164|0;m=m+160|0;i=j;while(1){if((i|0)>=(b|0)){g=j;continue a}f=(c[p+(i<<2)>>2]|0)+16|0;a=0;e=0.0;while(1){if((a|0)>=(o|0))break;r=+h[(c[(c[k>>2]|0)+132>>2]|0)+(a<<3)>>3]-+h[(c[(c[f>>2]|0)+132>>2]|0)+(a<<3)>>3];a=a+1|0;e=r*r+e}r=+h[(c[(c[m>>2]|0)+(g<<2)>>2]|0)+(i<<3)>>3];r=((+C(+e)*-2.0+r)*r+e)*+h[(c[(c[l>>2]|0)+(g<<2)>>2]|0)+(i<<3)>>3]+d;i=i+1|0;d=r}}return +d}function Qn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+80|0;w=x;v=c[a+16>>2]|0;k=c[v+164>>2]|0;m=c[v+160>>2]|0;v=c[v+152>>2]|0;j=c[v+(d<<2)>>2]|0;g=c[46366]|0;a=0;while(1){if((a|0)>=(g|0))break;i=O(g,a)|0;f=0;while(1){if((f|0)==(g|0))break;h[e+(i+f<<3)>>3]=0.0;f=f+1|0}a=a+1|0}u=c[46366]|0;t=j+16|0;s=k+(d<<2)|0;k=m+(d<<2)|0;j=0;while(1){if((j|0)>=(b|0))break;a:do if((j|0)!=(d|0)){f=(c[v+(j<<2)>>2]|0)+16|0;r=0.0;a=0;while(1){if((a|0)>=(u|0))break;q=+h[(c[(c[t>>2]|0)+132>>2]|0)+(a<<3)>>3]-+h[(c[(c[f>>2]|0)+132>>2]|0)+(a<<3)>>3];h[w+(a<<3)>>3]=q;r=q*q+r;a=a+1|0}n=1.0/+un(r);i=0;while(1){if((i|0)>=(u|0))break a;f=(c[s>>2]|0)+(j<<3)|0;g=(c[k>>2]|0)+(j<<3)|0;o=+h[w+(i<<3)>>3];a=0;while(1){p=+h[f>>3];q=+h[g>>3];if((a|0)==(i|0))break;m=e+((O(u,a)|0)+i<<3)|0;h[m>>3]=+h[m>>3]+p*n*q*o*+h[w+(a<<3)>>3];a=a+1|0}m=e+((O(u,i)|0)+i<<3)|0;h[m>>3]=(1.0-q*n*(r-o*o))*p+ +h[m>>3];i=i+1|0}}while(0);j=j+1|0}f=c[46366]|0;i=1;while(1){if((i|0)>=(f|0))break;g=O(f,i)|0;a=0;while(1){if((a|0)==(i|0))break;h[e+(g+a<<3)>>3]=+h[e+((O(f,a)|0)+i<<3)>>3];a=a+1|0}i=i+1|0}l=x;return}function Rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0;m=l;l=l+80|0;k=m;j=a+16|0;f=c[j>>2]|0;g=c[(c[f+152>>2]|0)+(d<<2)>>2]|0;e=c[46366]|0;f=f+168|0;a=0;while(1){if((a|0)>=(e|0))break;h[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+(a<<3)>>3]=0.0;a=a+1|0}f=g+16|0;a=0;while(1){if((a|0)>=(b|0))break;a:do if((a|0)!=(d|0)){i=+vn(c[(c[f>>2]|0)+132>>2]|0,c[(c[(c[(c[(c[j>>2]|0)+152>>2]|0)+(a<<2)>>2]|0)+16>>2]|0)+132>>2]|0,k);g=c[46366]|0;i=1.0/i;e=0;while(1){if((e|0)>=(g|0))break a;n=c[j>>2]|0;q=c[n+172>>2]|0;r=(c[(c[q+(d<<2)>>2]|0)+(a<<2)>>2]|0)+(e<<3)|0;o=+h[k+(e<<3)>>3];o=(o-+h[(c[(c[n+160>>2]|0)+(d<<2)>>2]|0)+(a<<3)>>3]*o*i)*+h[(c[(c[n+164>>2]|0)+(d<<2)>>2]|0)+(a<<3)>>3];h[r>>3]=o;n=c[n+168>>2]|0;s=(c[n+(d<<2)>>2]|0)+(e<<3)|0;h[s>>3]=+h[s>>3]+o;q=(c[(c[q+(a<<2)>>2]|0)+(d<<2)>>2]|0)+(e<<3)|0;o=+h[q>>3];p=-+h[r>>3];h[q>>3]=p;n=(c[n+(a<<2)>>2]|0)+(e<<3)|0;h[n>>3]=p-o+ +h[n>>3];e=e+1|0}}while(0);a=a+1|0}l=m;return}function Sn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0;d=a+16|0;g=c[46030]|0;b=c[(c[d>>2]|0)+124>>2]|0;while(1){if((b|0)<=0)break;i=(b+-1|0)/2|0;j=g+(i<<2)|0;e=c[j>>2]|0;f=e+16|0;if(+h[(c[f>>2]|0)+136>>3]<=+h[(c[d>>2]|0)+136>>3])break;c[j>>2]=a;c[(c[d>>2]|0)+124>>2]=i;c[g+(b<<2)>>2]=e;c[(c[f>>2]|0)+124>>2]=b;b=i}return}function Tn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;i=a+16|0;j=c[46031]|0;k=c[46030]|0;g=c[(c[i>>2]|0)+124>>2]|0;while(1){e=g<<1|1;if((e|0)>=(j|0))break;d=e+1|0;if((d|0)<(j|0)){f=c[k+(d<<2)>>2]|0;b=c[k+(e<<2)>>2]|0;if(+h[(c[f+16>>2]|0)+136>>3]<+h[(c[b+16>>2]|0)+136>>3]){e=d;b=f}else l=6}else{b=c[k+(e<<2)>>2]|0;l=6}if((l|0)==6)l=0;d=b+16|0;if(+h[(c[i>>2]|0)+136>>3]<=+h[(c[d>>2]|0)+136>>3])break;c[k+(e<<2)>>2]=a;c[(c[i>>2]|0)+124>>2]=e;c[k+(g<<2)>>2]=b;c[(c[d>>2]|0)+124>>2]=g;g=e}return}function Un(a){a=a|0;var b=0,d=0;b=(c[a+16>>2]|0)+124|0;if((c[b>>2]|0)>=0)qa(90283,90303,643,90311);d=c[46031]|0;c[46031]=d+1;c[b>>2]=d;c[(c[46030]|0)+(d<<2)>>2]=a;if((d|0)>0)Sn(a);return}function Vn(){var a=0,b=0,d=0,e=0;b=c[46031]|0;if(!b)a=0;else{e=c[46030]|0;a=c[e>>2]|0;d=b+-1|0;c[46031]=d;d=c[e+(d<<2)>>2]|0;c[e>>2]=d;c[(c[d+16>>2]|0)+124>>2]=0;if((b|0)>2)Tn(d);c[(c[a+16>>2]|0)+124>>2]=-1}return a|0}function Wn(a,b){a=a|0;b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;c[46030]=uH((b<<2)+4|0)|0;if(0){E1(90325,28,1,c[15686]|0)|0;EL()}b=Sy(a)|0;while(1){if(!b)break;Xn(a,b);b=Ty(a,b)|0}if(0){a=c[15686]|0;h[d>>3]=+FL();g1(a,90173,d)|0}D_(c[46030]|0);l=e;return}function Xn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0;e=c[(c[a+16>>2]|0)+152>>2]|0;f=+h[22910];d=0;while(1){g=c[e+(d<<2)>>2]|0;if(!g)break;h[(c[g+16>>2]|0)+136>>3]=f;d=d+1|0}c[46032]=b;k=c[b+16>>2]|0;h[k+136>>3]=0.0;c[k+128>>2]=0;Un(b);a:while(1){k=Vn()|0;if(!k)break;d=c[46032]|0;j=k+16|0;if((k|0)!=(d|0))Yn(a,d,k,+h[(c[j>>2]|0)+136>>3]);i=Jx(a,k)|0;while(1){if(!i)continue a;d=c[i>>2]&3;b=c[((d|0)==3?i:i+48|0)+40>>2]|0;if((b|0)==(k|0))b=c[((d|0)==2?i:i+-48|0)+40>>2]|0;d=c[j>>2]|0;f=+h[(c[i+16>>2]|0)+136>>3]+ +h[d+136>>3];e=c[b+16>>2]|0;g=e+136|0;do if(+h[g>>3]>f){h[g>>3]=f;if((c[e+124>>2]|0)>-1){Sn(b);break}else{c[e+128>>2]=(c[d+128>>2]|0)+1;Un(b);break}}while(0);i=Kx(a,i,k)|0}}return}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;b=c[(c[b+16>>2]|0)+120>>2]|0;d=c[(c[d+16>>2]|0)+120>>2]|0;a=c[(c[a+16>>2]|0)+160>>2]|0;h[(c[a+(d<<2)>>2]|0)+(b<<3)>>3]=e;h[(c[a+(b<<2)>>2]|0)+(d<<3)>>3]=e;return}function Zn(a){a=a|0;$M(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[46366]=2;_n(a);return}function _n(a){a=a|0;var b=0,d=0,e=0,f=0;b=ay(a)|0;e=uH(b*56|0)|0;b=uH((b<<2)+4|0)|0;f=a+16|0;c[(c[f>>2]|0)+152>>2]=b;b=Sy(a)|0;d=0;while(1){if(!b)break;$l(b);c[(c[b+16>>2]|0)+112>>2]=e+(d*56|0);c[(c[(c[f>>2]|0)+152>>2]|0)+(d<<2)>>2]=b;b=Ty(a,b)|0;d=d+1|0}d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;$n(b);b=Gx(a,b)|0}d=Ty(a,d)|0}return}function $n(a){a=a|0;var b=0.0;Az(a,134378,176,1)|0;eM(a)|0;b=+LL(a,c[46404]|0,1.0,0.0);h[(c[a+16>>2]|0)+128>>3]=b;return}function ao(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;m=u+32|0;i=u+24|0;g=u+16|0;j=u;t=u+72|0;p=u+40|0;if(ay(b)|0){Zn(b);f=xx(b,93136)|0;if(f)if(a[f>>0]|0){d=az(b,f,0)|0;if(!d){c[g>>2]=f;Pw(0,90354,g)|0;Pw(3,90394,i)|0;d=0;s=1}else s=0}else{d=0;s=1}else{d=0;s=0}n=nx(b,1,93136,0)|0;o=(n|0)!=0;f=xx(b,137660)|0;if((f|0?a[f>>0]|0:0)?(k=j+8|0,c[m>>2]=j,c[m+4>>2]=k,(N1(f,102477,m)|0)==1):0)h[k>>3]=+h[j>>3];if(ay(b)|0){m=oD(b,t,0)|0;if((c[t>>2]|0)==1){g=(d|0)!=0;do if(g)e=d;else{if(o?(e=bo(b,n)|0,e|0):0)break;e=0}while(0);f=Zt(b,e)|0;if(!((e|0)!=0|o^1))rx(f,n,139381)|0;r=(Sy(b)|0)+16|0;D_(c[(c[r>>2]|0)+112>>2]|0);c[(c[r>>2]|0)+112>>2]=0;tq(b)|0;hn(b);d=(s|0)==0|g?d:f}else{XD(b,2,8,p)|0;c[p+12>>2]=0;k=(s|0)==0;j=0;while(1){if((j|0)>=(c[t>>2]|0))break;g=c[m+(j<<2)>>2]|0;e=(d|0)!=0;if(e?(oz(g,d)|0)!=0:0)f=d;else r=23;do if((r|0)==23){r=0;if(o?(q=bo(g,n)|0,q|0):0){f=q;break}f=0}while(0);vD(g)|0;i=Zt(g,f)|0;d=k|e?d:i;if(o?(f|0)==0|(f|0)==(d|0):0)rx(i,n,139381)|0;tq(g)|0;j=j+1|0}r=(Sy(b)|0)+16|0;D_(c[(c[r>>2]|0)+112>>2]|0);c[(c[r>>2]|0)+112>>2]=0;WD(c[t>>2]|0,m,b,p)|0;hn(b)}e=0;while(1){if((e|0)>=(c[t>>2]|0))break;dz(b,c[m+(e<<2)>>2]|0)|0;e=e+1|0}D_(m)}if(s|0)zx(b,93136,ry(d)|0)|0;eJ(b)}l=u;return}function bo(a,b){a=a|0;b=b|0;var c=0;c=Sy(a)|0;while(1){if(!c){c=0;break}if((QL(yx(c,b)|0)|0)<<24>>24)break;c=Ty(a,c)|0}return c|0}function co(a){a=a|0;var b=0,c=0;b=Sy(a)|0;if(b|0){while(1){if(!b)break;c=Ex(a,b)|0;while(1){if(!c)break;JM(c);c=Gx(a,c)|0}HM(b);b=Ty(a,b)|0}eo(a)}return}function eo(a){a=a|0;D_(c[(c[a+16>>2]|0)+152>>2]|0);if((fz(a)|0)!=(a|0))Gz(a,0,134401);return}function fo(a){a=a|0;go(a);if(!((ay(a)|0)==0?!(c[(c[a+16>>2]|0)+180>>2]|0):0)){nu(a);eJ(a)}return}function go(a){a=a|0;c[46377]=nx(a,1,105204,105210)|0;$M(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[46366]=2;ho(a,0);io(a);return}function ho(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(b|0)==0;if(h){lo(g);b=g}d=wA(a)|0;while(1){if(!d)break;if(!(z$(ry(d)|0,104980,7)|0)){Az(d,134401,280,1)|0;mo(b,d);ho(d,0)}else ho(d,b);d=xA(d)|0}if(h?(e=c[g+8>>2]|0,f=a+16|0,c[(c[f>>2]|0)+180>>2]=e,e|0):0){h=xH(c[g>>2]|0,(e<<2)+4|0)|0;c[(c[f>>2]|0)+184>>2]=h}l=i;return}function io(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=uH((ay(a)|0)<<2)|0;b=uH(((ay(a)|0)<<2)+4|0)|0;g=a+16|0;c[(c[g>>2]|0)+152>>2]=b;b=Sy(a)|0;d=0;while(1){if(!b)break;Az(b,134365,304,1)|0;c[(c[b+16>>2]|0)+112>>2]=f+(d<<2);c[(c[(c[g>>2]|0)+152>>2]|0)+(d<<2)>>2]=b;jo(b);e=Ex(a,b)|0;while(1){if(!e)break;ko(e);e=Gx(a,e)|0}b=Ty(a,b)|0;d=d+1|0}return}function jo(a){a=a|0;zx(a,105204,105210)|0;return}function ko(a){a=a|0;Az(a,134378,304,1)|0;return}function lo(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function mo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=a+8|0;d=(c[g>>2]|0)+1|0;c[g>>2]=d;e=a+4|0;h=c[e>>2]|0;f=h+10|0;if((d|0)<(h|0))a=c[a>>2]|0;else{c[e>>2]=f;d=xH(c[a>>2]|0,f<<2)|0;c[a>>2]=d;a=d;d=c[g>>2]|0}c[a+(d<<2)>>2]=b;return}function no(a){a=a|0;var b=0,d=0;b=Sy(a)|0;if(b|0){D_(c[(c[b+16>>2]|0)+112>>2]|0);while(1){if(!b)break;d=Ex(a,b)|0;while(1){if(!d)break;JM(d);d=Gx(a,d)|0}HM(b);b=Ty(a,b)|0}oo(a)}return}function oo(a){a=a|0;D_(c[(c[a+16>>2]|0)+152>>2]|0);if((fz(a)|0)!=(a|0))Gz(a,0,134401);return}function po(a){a=a|0;var d=0,e=0,f=0;qo(a);ro(a,0);so(a,0);to(a,0);d=c[a+16>>2]|0;if(!(c[(c[d+8>>2]|0)+84>>2]|0)){d=b[d+136>>1]&14;if(d<<16>>16)Ym(a,d&65535)|0}else{d=Sy(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;e=c[f+132>>2]|0;h[e>>3]=+h[f+16>>3]*.013888888888888888;h[e+8>>3]=+h[f+24>>3]*.013888888888888888;d=Ty(a,d)|0}$m(a,1)}eJ(a);return}function qo(a){a=a|0;var d=0,e=0;$M(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[46366]=2;d=Sy(a)|0;while(1){if(!d)break;$l(d);d=Ty(a,d)|0}e=Sy(a)|0;while(1){if(!e)break;d=Ex(a,e)|0;while(1){if(!d)break;Az(d,134378,176,1)|0;eM(d)|0;d=Gx(a,d)|0}e=Ty(a,e)|0}return}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(b|0)==0;if(h){yo(g);b=g}d=wA(a)|0;while(1){if(!d)break;if(!(z$(ry(d)|0,104980,7)|0)){Az(d,134401,280,1)|0;fH(d);zo(b,d);ro(d,0)}else ro(d,b);d=xA(d)|0}if(h?(e=c[g+8>>2]|0,f=a+16|0,c[(c[f>>2]|0)+180>>2]=e,e|0):0){h=xH(c[g>>2]|0,(e<<2)+4|0)|0;c[(c[f>>2]|0)+184>>2]=h}l=i;return}function so(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;Q=l;l=l+448|0;G=Q+400|0;F=Q+384|0;P=Q+344|0;O=Q+304|0;N=Q+248|0;D=Q+192|0;x=Q+152|0;y=Q+96|0;o=Q+72|0;d=Q+64|0;I=Q+32|0;J=Q;B=Q+416|0;u=Q+328|0;w=Q+288|0;K=Q+232|0;L=Q+176|0;M=Q+136|0;H=Q+80|0;n=c[a+60>>2]|0;if(0>1){uo(b);E=c[15686]|0;c[d>>2]=ry(a)|0;g1(E,90637,d)|0}E=a+16|0;f=b+1|0;d=1;e=0;while(1){g=c[E>>2]|0;if((d|0)>(c[g+180>>2]|0))break;C=c[(c[g+184>>2]|0)+(d<<2)>>2]|0;so(C,f);d=d+1|0;e=(ay(C)|0)+e|0}p=(ay(a)|0)-e|0;d=c[E>>2]|0;C=(c[d+180>>2]|0)+p|0;v=(C|0)==0;if(v?(c[d+12>>2]|0)==0:0){P=d+16|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;h[d+40>>3]=18.0;h[d+32>>3]=18.0}else{d=B+16|0;do if((XD(a,4,4,B)|0)>>>0>=3)if((c[d>>2]|0)==4?(c[B+28>>2]&2|0)!=0:0){e=nx(n,0,96164,0)|0;d=nx(n,1,96164,0)|0;if((e|0)!=0|(d|0)!=0){c[B+24>>2]=uH(C<<2)|0;break}else{c[o>>2]=ry(a)|0;Pw(0,90483,o)|0;d=0;e=0;break}}else{d=0;e=0}else{c[d>>2]=3;d=0;e=0}while(0);z=uH(C<<5)|0;A=uH(C<<2)|0;s=B+24|0;n=(e|0)!=0;r=0;g=1;while(1){f=c[E>>2]|0;if((g|0)>(c[f+180>>2]|0))break;f=c[(c[f+184>>2]|0)+(g<<2)>>2]|0;t=z+(r<<5)|0;q=(c[f+16>>2]|0)+16|0;c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[t+16>>2]=c[q+16>>2];c[t+20>>2]=c[q+20>>2];c[t+24>>2]=c[q+24>>2];c[t+28>>2]=c[q+28>>2];if(n&(c[s>>2]|0)!=0){t=KL(f,e,0,0)|0;c[(c[s>>2]|0)+(r<<2)>>2]=t}c[A+(r<<2)>>2]=f;r=r+1|0;g=g+1|0}a:do if((p|0)>0){o=I+16|0;p=I+24|0;q=(d|0)!=0;n=Sy(a)|0;e=r;while(1){if(!n)break a;f=c[n+16>>2]|0;g=f+112|0;if(!(c[g>>2]|0)){c[g>>2]=a;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[I+12>>2]=0;h[o>>3]=+h[f+96>>3]+ +h[f+88>>3];h[p>>3]=+h[f+80>>3];t=z+(e<<5)|0;c[t>>2]=c[I>>2];c[t+4>>2]=c[I+4>>2];c[t+8>>2]=c[I+8>>2];c[t+12>>2]=c[I+12>>2];c[t+16>>2]=c[I+16>>2];c[t+20>>2]=c[I+20>>2];c[t+24>>2]=c[I+24>>2];c[t+28>>2]=c[I+28>>2];if(q&(c[s>>2]|0)!=0){t=KL(n,d,0,0)|0;c[(c[s>>2]|0)+(e<<2)>>2]=t}c[A+(e<<2)>>2]=n;e=e+1|0}n=Ty(a,n)|0}}while(0);t=QD(C,z,B)|0;d=c[s>>2]|0;if(d|0)D_(d);vo(J,2147483647.0,2147483647.0);s=J+16|0;vo(u,-2147483647.0,-2147483647.0);c[s>>2]=c[u>>2];c[s+4>>2]=c[u+4>>2];c[s+8>>2]=c[u+8>>2];c[s+12>>2]=c[u+12>>2];g=I+16|0;n=I+8|0;o=I+24|0;p=J+8|0;q=J+24|0;r=c[15686]|0;d=0;while(1){if((d|0)>=(C|0))break;j=+(c[t+(d<<3)>>2]|0);m=+(c[t+(d<<3)+4>>2]|0);e=z+(d<<5)|0;c[I>>2]=c[e>>2];c[I+4>>2]=c[e+4>>2];c[I+8>>2]=c[e+8>>2];c[I+12>>2]=c[e+12>>2];c[I+16>>2]=c[e+16>>2];c[I+20>>2]=c[e+20>>2];c[I+24>>2]=c[e+24>>2];c[I+28>>2]=c[e+28>>2];i=+h[I>>3]+j;h[I>>3]=i;j=+h[g>>3]+j;h[g>>3]=j;k=+h[n>>3]+m;h[n>>3]=k;m=+h[o>>3]+m;h[o>>3]=m;h[J>>3]=+h[(+h[J>>3]<i?J:I)>>3];h[p>>3]=+h[(+h[p>>3]<k?J:I)+8>>3];h[s>>3]=+h[(+h[s>>3]>j?J:I)+16>>3];h[q>>3]=+h[(+h[q>>3]>m?J:I)+24>>3];e=c[A+(d<<2)>>2]|0;f=e+16|0;if((d|0)<(c[(c[E>>2]|0)+180>>2]|0)){u=(c[f>>2]|0)+16|0;c[u>>2]=c[I>>2];c[u+4>>2]=c[I+4>>2];c[u+8>>2]=c[I+8>>2];c[u+12>>2]=c[I+12>>2];c[u+16>>2]=c[I+16>>2];c[u+20>>2]=c[I+20>>2];c[u+24>>2]=c[I+24>>2];c[u+28>>2]=c[I+28>>2];if(0>1){uo(b);c[y>>2]=ry(e)|0;h[y+8>>3]=i;h[y+16>>3]=k;h[y+24>>3]=j;h[y+32>>3]=m;g1(r,90462,y)|0}}else{u=(c[f>>2]|0)+16|0;c[F>>2]=c[I>>2];c[F+4>>2]=c[I+4>>2];c[F+8>>2]=c[I+8>>2];c[F+12>>2]=c[I+12>>2];c[G>>2]=c[g>>2];c[G+4>>2]=c[g+4>>2];c[G+8>>2]=c[g+8>>2];c[G+12>>2]=c[g+12>>2];wo(w,F,G);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];if(0>1){uo(b);u=ry(e)|0;f=c[f>>2]|0;k=+h[f+16>>3];m=+h[f+24>>3];c[x>>2]=u;h[x+8>>3]=k;h[x+16>>3]=m;g1(r,90450,x)|0}}d=d+1|0}e=c[E>>2]|0;d=c[e+12>>2]|0;if(d|0){i=+h[d+24>>3];if(v){j=+h[d+32>>3];c[J>>2]=0;c[J+4>>2]=0;c[J+8>>2]=0;c[J+12>>2]=0;h[s>>3]=i;h[q>>3]=j;j=0.0;k=i}else{j=+h[J>>3];k=+h[s>>3]}m=i-(k-j);i=m*.5;if(m>0.0){h[J>>3]=j-i;h[s>>3]=k+i}}if((b|0)>0)i=+((c[B+8>>2]|0)>>>0)*.5;else i=0.0;j=+h[J>>3]-i;h[J>>3]=j;k=+h[s>>3]+i;h[s>>3]=k;m=-i-+h[e+56>>3]+ +h[p>>3];h[p>>3]=m;i=+h[e+88>>3]+i+ +h[q>>3];h[q>>3]=i;if(0>1){uo(b);c[D>>2]=ry(a)|0;h[D+8>>3]=j;h[D+16>>3]=m;h[D+24>>3]=k;h[D+32>>3]=i;g1(r,90462,D)|0}d=0;while(1){if((d|0)>=(C|0))break;e=c[A+(d<<2)>>2]|0;f=e+16|0;if((d|0)<(c[(c[E>>2]|0)+180>>2]|0)){D=(c[f>>2]|0)+16|0;c[I>>2]=c[D>>2];c[I+4>>2]=c[D+4>>2];c[I+8>>2]=c[D+8>>2];c[I+12>>2]=c[D+12>>2];c[I+16>>2]=c[D+16>>2];c[I+20>>2]=c[D+20>>2];c[I+24>>2]=c[D+24>>2];c[I+28>>2]=c[D+28>>2];c[F>>2]=c[D>>2];c[F+4>>2]=c[D+4>>2];c[F+8>>2]=c[D+8>>2];c[F+12>>2]=c[D+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];xo(I,F,G);c[F>>2]=c[g>>2];c[F+4>>2]=c[g+4>>2];c[F+8>>2]=c[g+8>>2];c[F+12>>2]=c[g+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];xo(K,F,G);c[g>>2]=c[K>>2];c[g+4>>2]=c[K+4>>2];c[g+8>>2]=c[K+8>>2];c[g+12>>2]=c[K+12>>2];D=(c[f>>2]|0)+16|0;c[D>>2]=c[I>>2];c[D+4>>2]=c[I+4>>2];c[D+8>>2]=c[I+8>>2];c[D+12>>2]=c[I+12>>2];c[D+16>>2]=c[I+16>>2];c[D+20>>2]=c[I+20>>2];c[D+24>>2]=c[I+24>>2];c[D+28>>2]=c[I+28>>2];if(0>1){uo(b);D=ry(e)|0;i=+h[I>>3];j=+h[n>>3];k=+h[g>>3];m=+h[o>>3];c[N>>2]=D;h[N+8>>3]=i;h[N+16>>3]=j;h[N+24>>3]=k;h[N+32>>3]=m;g1(r,90462,N)|0}}else{D=(c[f>>2]|0)+16|0;c[F>>2]=c[D>>2];c[F+4>>2]=c[D+4>>2];c[F+8>>2]=c[D+8>>2];c[F+12>>2]=c[D+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];xo(L,F,G);c[D>>2]=c[L>>2];c[D+4>>2]=c[L+4>>2];c[D+8>>2]=c[L+8>>2];c[D+12>>2]=c[L+12>>2];if(0>1){uo(b);D=ry(e)|0;B=c[f>>2]|0;k=+h[B+16>>3];m=+h[B+24>>3];c[O>>2]=D;h[O+8>>3]=k;h[O+16>>3]=m;g1(r,90450,O)|0}}d=d+1|0}c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];c[F+8>>2]=c[s+8>>2];c[F+12>>2]=c[s+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];xo(M,F,G);c[s>>2]=c[M>>2];c[s+4>>2]=c[M+4>>2];c[s+8>>2]=c[M+8>>2];c[s+12>>2]=c[M+12>>2];c[F>>2]=c[J>>2];c[F+4>>2]=c[J+4>>2];c[F+8>>2]=c[J+8>>2];c[F+12>>2]=c[J+12>>2];c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];xo(H,F,G);c[J>>2]=c[H>>2];c[J+4>>2]=c[H+4>>2];c[J+8>>2]=c[H+8>>2];c[J+12>>2]=c[H+12>>2];O=(c[E>>2]|0)+16|0;c[O>>2]=c[J>>2];c[O+4>>2]=c[J+4>>2];c[O+8>>2]=c[J+8>>2];c[O+12>>2]=c[J+12>>2];c[O+16>>2]=c[J+16>>2];c[O+20>>2]=c[J+20>>2];c[O+24>>2]=c[J+24>>2];c[O+28>>2]=c[J+28>>2];if(0>1){uo(b);O=ry(a)|0;i=+h[J>>3];j=+h[p>>3];k=+h[s>>3];m=+h[q>>3];c[P>>2]=O;h[P+8>>3]=i;h[P+16>>3]=j;h[P+24>>3]=k;h[P+32>>3]=m;g1(r,90462,P)|0}D_(z);D_(A);D_(t)}l=Q;return}function to(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+80|0;s=t+32|0;i=t+8|0;d=t;r=a+16|0;o=c[r>>2]|0;p=+h[o+16>>3];q=+h[o+24>>3];if(0>1){uo(b);o=c[15686]|0;c[d>>2]=ry(a)|0;g1(o,90435,d)|0}o=(b|0)!=0;a:do if(o){d=Sy(a)|0;e=c[15686]|0;while(1){if(!d)break a;f=d+16|0;g=c[f>>2]|0;if((c[g+112>>2]|0)==(a|0)?(u=g+16|0,h[u>>3]=+h[u>>3]+p,g=g+24|0,h[g>>3]=+h[g>>3]+q,0>1):0){uo(b);u=ry(d)|0;g=c[f>>2]|0;m=+h[g+16>>3];n=+h[g+24>>3];c[i>>2]=u;h[i+8>>3]=m;h[i+16>>3]=n;g1(e,90450,i)|0}d=Ty(a,d)|0}}else e=c[15686]|0;while(0);i=b+1|0;a=1;while(1){d=c[r>>2]|0;if((a|0)>(c[d+180>>2]|0))break;g=c[(c[d+184>>2]|0)+(a<<2)>>2]|0;if(o){f=g+16|0;d=c[f>>2]|0;j=+h[d+16>>3]+p;k=+h[d+24>>3]+q;m=+h[d+32>>3]+p;n=+h[d+40>>3]+q;if(0>1){uo(b);c[s>>2]=ry(g)|0;h[s+8>>3]=j;h[s+16>>3]=k;h[s+24>>3]=m;h[s+32>>3]=n;g1(e,90462,s)|0;d=c[f>>2]|0}h[d+16>>3]=j;h[d+24>>3]=k;h[d+32>>3]=m;h[d+40>>3]=n}to(g,i);a=a+1|0}l=t;return}function uo(a){a=a|0;var b=0;b=c[15686]|0;while(1){if((a|0)<=0)break;D1(90480,b)|0;a=a+-1|0}return}function vo(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function wo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function xo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function yo(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function zo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=a+8|0;d=(c[g>>2]|0)+1|0;c[g>>2]=d;e=a+4|0;h=c[e>>2]|0;f=h+10|0;if((d|0)<(h|0))a=c[a>>2]|0;else{c[e>>2]=f;d=xH(c[a>>2]|0,f<<2)|0;c[a>>2]=d;a=d;d=c[g>>2]|0}c[a+(d<<2)>>2]=b;return}function Ao(a){a=a|0;var b=0;b=Sy(a)|0;while(1){if(!b)break;HM(b);b=Ty(a,b)|0}Bo(a);return}function Bo(a){a=a|0;var b=0,d=0,e=0;b=a+16|0;a=1;while(1){e=c[b>>2]|0;d=c[e+184>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[d+(a<<2)>>2]|0;nH(c[(c[e+16>>2]|0)+12>>2]|0);Bo(e);a=a+1|0}D_(d);return}function Co(a){a=a|0;var b=0,d=0,e=0;Fz(a,1,134365,304,1);sM(a)|0;b=uH(((ay(a)|0)<<2)+4|0)|0;e=a+16|0;c[(c[e>>2]|0)+152>>2]=b;b=0;d=Sy(a)|0;while(1){if(!d)break;Do(d);c[(c[(c[e>>2]|0)+152>>2]|0)+(b<<2)>>2]=d;c[(c[d+16>>2]|0)+120>>2]=b;b=b+1|0;d=Ty(a,d)|0}e=nx(a,2,90566,0)|0;d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;Eo(b,e);b=Gx(a,b)|0}d=Ty(a,d)|0}Fo(a);return}function Do(a){a=a|0;var b=0;dM(a);b=uH((e[(c[(ez(a)|0)+16>>2]|0)+176>>1]|0)<<3)|0;c[(c[a+16>>2]|0)+132>>2]=b;bN(a,c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&1);return}function Eo(a,b){a=a|0;b=b|0;var d=0,e=0.0;Az(a,134378,176,1)|0;e=+LL(a,c[46404]|0,1.0,0.0);d=a+16|0;h[(c[d>>2]|0)+128>>3]=e;e=+LL(a,b,+h[1371],0.0);h[(c[d>>2]|0)+136>>3]=e;eM(a)|0;return}function Fo(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;q=r+16|0;p=r;m=r+24|0;n=nx(b,1,99597,0)|0;a:do if(n|0){o=nx(b,1,90570,0)|0;i=b+16|0;j=(o|0)==0;k=c[15686]|0;g=0;while(1){e=c[(c[(c[i>>2]|0)+152>>2]|0)+(g<<2)>>2]|0;if(!e)break a;b=yx(e,n)|0;do if(a[b>>0]|0){f=e+16|0;d=c[(c[f>>2]|0)+132>>2]|0;a[m>>0]=0;c[p>>2]=d;c[p+4>>2]=d+8;c[p+8>>2]=m;if((N1(b,98723,p)|0)<=1){c[q>>2]=ry(e)|0;c[q+4>>2]=b;g1(k,90574,q)|0;break}b:do if(+h[22908]>0.0){b=0;while(1){if((b|0)==2)break b;s=d+(b<<3)|0;h[s>>3]=+h[s>>3]/+h[22908];b=b+1|0}}while(0);b=c[f>>2]|0;a[b+119>>0]=1;if((a[m>>0]|0)!=33){if(j)break;if(!((QL(yx(e,o)|0)|0)<<24>>24))break;b=c[f>>2]|0}a[b+119>>0]=3}while(0);g=g+1|0}}while(0);l=r;return}function Go(a){a=a|0;var b=0,c=0;c=Sy(a)|0;while(1){if(!c)break;b=Ex(a,c)|0;while(1){if(!b)break;JM(b);b=Gx(a,b)|0}HM(c);c=Ty(a,c)|0}Ho(a);return}function Ho(a){a=a|0;Io(a);a=a+16|0;D_(c[(c[a>>2]|0)+152>>2]|0);D_(c[(c[a>>2]|0)+140>>2]|0);return}function Io(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+16|0;f=1;while(1){e=c[g>>2]|0;b=c[e+184>>2]|0;if((f|0)>(c[e+180>>2]|0))break;e=c[b+(f<<2)>>2]|0;b=e+16|0;nH(c[(c[b>>2]|0)+12>>2]|0);d=c[(c[b>>2]|0)+140>>2]|0;if(d|0){D_(c[d>>2]|0);D_(c[(c[b>>2]|0)+140>>2]|0)}Io(e);f=f+1|0}D_(b);if((fz(a)|0)!=(a|0))Cz(a,134401)|0;return}function Jo(a,b){a=a|0;b=b|0;c[b+4>>2]=nx(a,0,90626,0)|0;c[b+8>>2]=nx(a,0,138034,0)|0;c[b+12>>2]=nx(a,0,137966,0)|0;c[b>>2]=a;c[b+16>>2]=0;c[b+36>>2]=XD(a,2,4,b+20|0)|0;return}function Ko(a){a=a|0;var d=0,e=0;$M(a,2);d=uH(56)|0;e=a+16|0;c[(c[e>>2]|0)+140>>2]=d;d=(KL(a,nx(a,0,90633,0)|0,2,2)|0)&65535;d=(d&65535)<10?d:10;b[(c[e>>2]|0)+176>>1]=d;c[46366]=d&65535;Lo(a,0,a);hp(a);Co(a);return}function Lo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=(d|0)==0;if(k){Mo(j);d=j}g=e+16|0;f=wA(a)|0;while(1){if(!f)break;if(!(z$(ry(f)|0,104980,7)|0)){Az(f,134401,280,1)|0;n=uH(56)|0;p=c[f+16>>2]|0;c[p+140>>2]=n;o=c[g>>2]|0;b[p+176>>1]=b[o+176>>1]|0;c[n+44>>2]=(c[(c[o+140>>2]|0)+44>>2]|0)+1;c[n+48>>2]=e;No(d,f);Lo(f,0,f)}else Lo(f,d,e);f=xA(f)|0}if(k?(h=c[j+8>>2]|0,i=a+16|0,c[(c[i>>2]|0)+180>>2]=h,h|0):0){p=xH(c[j>>2]|0,(h<<2)+4|0)|0;c[(c[i>>2]|0)+184>>2]=p}l=m;return}function Mo(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function No(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=a+8|0;d=(c[g>>2]|0)+1|0;c[g>>2]=d;e=a+4|0;h=c[e>>2]|0;f=h+10|0;if((d|0)<(h|0))a=c[a>>2]|0;else{c[e>>2]=f;d=xH(c[a>>2]|0,f<<2)|0;c[a>>2]=d;a=d;d=c[g>>2]|0}c[a+(d<<2)>>2]=b;return}function Oo(a){a=a|0;var b=0,c=0;b=l;l=l+64|0;c=b;Jo(a,c);Po(a,c);Qo(a);Ro(a,a);So(a);l=b;return}function Po(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0,w=0.0,x=0.0;s=l;l=l+64|0;r=s+48|0;e=s+40|0;o=s+56|0;n=s+52|0;m=s;if(0){q=c[15686]|0;c[e>>2]=ry(b)|0;g1(q,90637,e)|0}e=Sy(b)|0;while(1){if(!e)break;c[(c[e+16>>2]|0)+164>>2]=0;e=Ty(b,e)|0}p=To(b,d)|0;q=Iu(p,o,n)|0;e=q;while(1){k=e+4|0;f=c[e>>2]|0;if(!f)break;ip(f,m);e=Sy(f)|0;while(1){if(!e)break;g=Ty(f,e)|0;i=e+16|0;j=c[i>>2]|0;if(c[j+212>>2]|0){v=Uo(e,f)|0;Po(v,d);v=c[(c[v+16>>2]|0)+140>>2]|0;u=+h[v+24>>3];j=c[i>>2]|0;h[j+32>>3]=u;t=+h[v+32>>3];h[j+40>>3]=t;u=u*36.0;h[j+88>>3]=u;h[j+96>>3]=u;h[j+80>>3]=t*72.0;e=g;continue}if(c[(c[j+112>>2]|0)+8>>2]|0){e=g;continue}dz(f,e)|0;e=g}if((ay(f)|0)<=1){e=k;continue}if((c[d>>2]|0)==(b|0))Qp(f)|0;vp(f,m);e=k}e=c[o>>2]|0;if((e|0)<=1)if((e|0)==1){mM(c[q>>2]|0);e=0}else e=0;else{if(!(c[n>>2]|0))f=0;else{f=uH(e)|0;a[f>>0]=1;e=c[o>>2]|0}c[d+40>>2]=f;e=BD(e,q,0,d+20|0)|0;D_(f)}Vo(p,c[o>>2]|0,q,e,b,d);D_(e);f=Sy(p)|0;while(1){if(!f)break;g=c[f+16>>2]|0;e=c[g+212>>2]|0;if(!e){e=c[(c[g+112>>2]|0)+8>>2]|0;if(e|0){o=c[g+132>>2]|0;v=c[(c[e+16>>2]|0)+132>>2]|0;h[v>>3]=+h[o>>3];h[v+8>>3]=+h[o+8>>3]}}else{o=c[g+132>>2]|0;x=+h[g+32>>3];w=+h[o>>3]-x*.5;v=c[(c[e+16>>2]|0)+140>>2]|0;h[v+8>>3]=w;t=+h[g+40>>3];u=+h[o+8>>3]-t*.5;h[v+16>>3]=u;h[v+24>>3]=x+w;h[v+32>>3]=t+u}f=Ty(p,f)|0}v=(c[(c[b+16>>2]|0)+140>>2]|0)+8|0;o=(c[(c[p+16>>2]|0)+140>>2]|0)+8|0;c[v>>2]=c[o>>2];c[v+4>>2]=c[o+4>>2];c[v+8>>2]=c[o+8>>2];c[v+12>>2]=c[o+12>>2];c[v+16>>2]=c[o+16>>2];c[v+20>>2]=c[o+20>>2];c[v+24>>2]=c[o+24>>2];c[v+28>>2]=c[o+28>>2];Wo(p,q);D_(q);if(0){v=c[15686]|0;c[r>>2]=ry(b)|0;g1(v,90648,r)|0}l=s;return}function Qo(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0;d=Sy(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;if(a[e+118>>0]|0){k=c[(c[(c[e+212>>2]|0)+16>>2]|0)+140>>2]|0;j=+h[k+24>>3]-+h[k+8>>3];i=+h[k+32>>3]-+h[k+16>>3];g=j*36.0;f=i*36.0;k=c[e+132>>2]|0;h[k>>3]=j*.5;h[k+8>>3]=i*.5;h[e+32>>3]=j;h[e+40>>3]=i;h[e+96>>3]=g;h[e+88>>3]=g;h[e+80>>3]=i*72.0;e=c[(c[e+12>>2]|0)+44>>2]|0;h[e>>3]=g;h[e+8>>3]=f;i=-g;h[e+16>>3]=i;h[e+24>>3]=f;h[e+32>>3]=i;f=-f;h[e+40>>3]=f;h[e+48>>3]=g;h[e+56>>3]=f}d=Ty(b,d)|0}return}function Ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0,j=0,k=0.0,l=0,m=0.0,n=0,o=0.0,p=0;i=a+16|0;j=c[(c[i>>2]|0)+140>>2]|0;f=+h[j+8>>3];g=+h[j+16>>3];j=(a|0)!=(b|0);a:do if(j){d=Sy(a)|0;while(1){if(!d){a=1;break a}e=c[d+16>>2]|0;if((c[e+212>>2]|0)==(a|0)){e=c[e+132>>2]|0;h[e>>3]=+h[e>>3]+f;e=e+8|0;h[e>>3]=+h[e>>3]+g}d=Ty(a,d)|0}}else a=1;while(0);while(1){d=c[i>>2]|0;if((a|0)>(c[d+180>>2]|0))break;d=c[(c[d+184>>2]|0)+(a<<2)>>2]|0;if(j){e=c[(c[d+16>>2]|0)+140>>2]|0;p=e+8|0;n=e+16|0;l=e+24|0;e=e+32|0;o=+h[n>>3]+g;m=+h[l>>3]+f;k=+h[e>>3]+g;h[p>>3]=+h[p>>3]+f;h[n>>3]=o;h[l>>3]=m;h[e>>3]=k}Ro(d,b);a=a+1|0}return}function So(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0;b=a+16|0;a=c[b>>2]|0;d=c[a+140>>2]|0;g=+h[d+16>>3]*72.0;f=+h[d+24>>3]*72.0;e=+h[d+32>>3]*72.0;h[a+16>>3]=+h[d+8>>3]*72.0;h[a+24>>3]=g;h[a+32>>3]=f;h[a+40>>3]=e;a=1;while(1){d=c[b>>2]|0;if((a|0)>(c[d+180>>2]|0))break;So(c[(c[d+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}return}function To(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+160|0;s=y+24|0;t=y+8|0;g=y;f=y+56|0;w=e+16|0;x=c[w>>2]|0;c[w>>2]=x+1;c[s>>2]=x;Y0(f,90710,s)|0;if(0>1){x=c[15686]|0;w=ry(d)|0;c[g>>2]=f;c[g+4>>2]=w;g1(x,90717,g)|0};a[s>>0]=a[18484]|0;a[s+1>>0]=a[18485]|0;a[s+2>>0]=a[18486]|0;a[s+3>>0]=a[18487]|0;x=Xx(91072,s,0)|0;Az(x,134401,280,1)|0;v=uH(56)|0;w=x+16|0;o=c[w>>2]|0;c[o+140>>2]=v;v=d+16|0;b[o+176>>1]=b[(c[v>>2]|0)+176>>1]|0;ap(d,x,91095);ap(d,x,91700);ap(d,x,90983);o=e+4|0;p=s+16|0;q=s+8|0;r=s+24|0;j=0;n=1;while(1){f=c[v>>2]|0;if((n|0)>(c[f+180>>2]|0))break;c[s>>2]=c[332];c[s+4>>2]=c[333];c[s+8>>2]=c[334];c[s+12>>2]=c[335];c[s+16>>2]=c[336];c[s+20>>2]=c[337];c[s+24>>2]=c[338];c[s+28>>2]=c[339];g=c[(c[f+184>>2]|0)+(n<<2)>>2]|0;fH(g);i=bp(x,ry(g)|0)|0;k=i+16|0;f=c[k>>2]|0;c[f+212>>2]=g;m=j+1|0;c[f+120>>2]=j;if(c[o>>2]|0)cp(g,i,e,s);f=Sy(g)|0;while(1){if(!f)break;c[(c[f+16>>2]|0)+164>>2]=i;f=Ty(g,f)|0}f=c[k>>2]|0;if(a[f+119>>0]|0){k=c[f+132>>2]|0;h[k>>3]=(+h[p>>3]+ +h[s>>3])*.5;h[k+8>>3]=(+h[r>>3]+ +h[q>>3])*.5}j=m;n=n+1|0}k=Sy(d)|0;while(1){if(!k)break;f=k+16|0;g=c[f>>2]|0;if(!(c[g+164>>2]|0)){i=g+212|0;s=c[i>>2]|0;if(s|0?(s|0)!=(c[(c[(c[v>>2]|0)+140>>2]|0)+48>>2]|0):0){u=18;break}c[i>>2]=d;if(!(a[g+118>>0]|0)){i=bp(x,ry(k)|0)|0;g=c[f>>2]|0;c[g+164>>2]=i;i=c[i+16>>2]|0;c[i+120>>2]=j;h[i+32>>3]=+h[g+32>>3];h[i+40>>3]=+h[g+40>>3];h[i+88>>3]=+h[g+88>>3];h[i+96>>3]=+h[g+96>>3];h[i+80>>3]=+h[g+80>>3];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];f=a[g+119>>0]|0;if(f<<24>>24){e=c[g+132>>2]|0;s=c[i+132>>2]|0;h[s>>3]=+h[e>>3];h[s+8>>3]=+h[e+8>>3];a[i+119>>0]=f}c[(c[i+112>>2]|0)+8>>2]=k;f=j+1|0}else f=j}else f=j;k=Ty(d,k)|0;j=f}if((u|0)==18){e=ry(k)|0;s=ry(d)|0;u=ry(c[(c[f>>2]|0)+212>>2]|0)|0;c[t>>2]=e;c[t+4>>2]=s;c[t+8>>2]=u;Pw(1,90740,t)|0;bb(184132,1)}m=Sy(d)|0;while(1){if(!m)break;n=c[(c[m+16>>2]|0)+164>>2]|0;o=n+16|0;i=Ex(d,m)|0;while(1){if(!i)break;f=c[(c[(c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+164>>2]|0;if((f|0)!=(n|0)){if(f>>>0>n>>>0)k=Rx(x,n,f,0,1)|0;else k=Rx(x,f,n,0,1)|0;Az(k,134378,176,1)|0;g=c[i+16>>2]|0;u=c[k+16>>2]|0;h[u+136>>3]=+h[g+136>>3];h[u+128>>3]=+h[g+128>>3];f=c[(c[f+16>>2]|0)+112>>2]|0;g=f+4|0;c[g>>2]=(c[g>>2]|0)+1;g=c[(c[o>>2]|0)+112>>2]|0;t=g+4|0;c[t>>2]=(c[t>>2]|0)+1;if(!(c[u+172>>2]|0)){c[f>>2]=(c[f>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+1}dp(k,i)}i=Gx(d,i)|0}m=Ty(d,m)|0}f=c[(c[v>>2]|0)+140>>2]|0;g=c[f>>2]|0;if(g|0){i=uH((c[f+4>>2]<<4)+16|0)|0;c[c[(c[w>>2]|0)+140>>2]>>2]=i;f=0;while(1){if(!(c[g>>2]|0))break;m=c[(c[(c[g+4>>2]|0)+16>>2]|0)+164>>2]|0;if(m){ep(d,g);n=bp(x,190692)|0;o=n+16|0;c[(c[o>>2]|0)+120>>2]=j;if(n>>>0>m>>>0)k=Rx(x,m,n,0,1)|0;else k=Rx(x,n,m,0,1)|0;Az(k,134378,176,1)|0;u=c[g>>2]|0;t=c[u+16>>2]|0;v=c[k+16>>2]|0;h[v+136>>3]=+h[t+136>>3];h[v+128>>3]=+h[t+128>>3];dp(k,u);u=c[(c[o>>2]|0)+112>>2]|0;v=u+4|0;c[v>>2]=(c[v>>2]|0)+1;v=c[(c[m+16>>2]|0)+112>>2]|0;t=v+4|0;c[t>>2]=(c[t>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+1;c[v>>2]=(c[v>>2]|0)+1;c[i+4>>2]=n;h[i+8>>3]=+h[g+8>>3];c[i>>2]=k;f=f+1|0;i=i+16|0;j=j+1|0}g=g+16|0}c[(c[(c[w>>2]|0)+140>>2]|0)+4>>2]=f}l=y;return x|0}function Uo(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;l=c[a+16>>2]|0;k=c[l+212>>2]|0;l=c[(c[l+112>>2]|0)+4>>2]|0;do if(l|0){j=uH((l<<4)+16|0)|0;f=Zo(a,b)|0;g=f+8|0;b=0;e=f;while(1){if(!(c[e>>2]|0))break;i=e+24|0;if(!(c[i>>2]|0))d=+h[g>>3]+6.283185307179586;else d=+h[e+32>>3];b=_o(a,e,j,b,d)|0;e=i}if((b|0)==(l|0)){a=c[(c[k+16>>2]|0)+140>>2]|0;c[a>>2]=j;c[a+4>>2]=l;D_(f);break}else qa(90656,90666,766,90675)}while(0);return k|0}function Vo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0;B=l;l=l+32|0;x=B+16|0;A=B;m=c[g+8>>2]|0;j=c[g+12>>2]|0;y=(c[g>>2]|0)==(f|0);z=(b|0)!=0;a:do if(z){p=c[(c[d>>2]|0)+16>>2]|0;k=+h[p+16>>3];m=~~(k+(k>=0.0?.5:-.5));c[A>>2]=m;k=+h[p+24>>3];g=~~(k+(k>=0.0?.5:-.5));u=A+4|0;c[u>>2]=g;k=+h[p+32>>3];n=~~(k+(k>=0.0?.5:-.5));v=A+8|0;c[v>>2]=n;k=+h[p+40>>3];p=~~(k+(k>=0.0?.5:-.5));w=A+12|0;c[w>>2]=p;if((b|0)>1){q=c[e>>2]|0;t=c[e+4>>2]|0;m=q+m|0;c[A>>2]=m;b=t+g|0;c[u>>2]=b;n=q+n|0;c[v>>2]=n;q=x+4|0;r=x+8|0;s=x+12|0;o=e;g=d;t=t+p|0;p=b;while(1){g=g+4|0;j=o+8|0;c[w>>2]=t;b=c[g>>2]|0;if(!b){j=0;r=p;s=t;break a}E=c[b+16>>2]|0;G=+h[E+16>>3];i=+h[E+24>>3];k=+h[E+32>>3];H=+h[E+40>>3];E=~~(H+(H>=0.0?.5:-.5));c[s>>2]=E;b=c[j>>2]|0;F=c[o+12>>2]|0;D=b+~~(G+(G>=0.0?.5:-.5))|0;c[x>>2]=D;C=F+~~(i+(i>=0.0?.5:-.5))|0;c[q>>2]=C;b=b+~~(k+(k>=0.0?.5:-.5))|0;c[r>>2]=b;E=F+E|0;c[s>>2]=E;D=c[((m|0)<(D|0)?A:x)>>2]|0;c[A>>2]=D;C=c[((p|0)<(C|0)?A:x)+4>>2]|0;c[u>>2]=C;b=c[((n|0)>(b|0)?A:x)+8>>2]|0;c[v>>2]=b;o=j;t=c[((t|0)>(E|0)?A:x)+12>>2]|0;m=D;p=C;n=b}}else{j=0;r=g;s=p}}else{c[A>>2]=0;c[A+4>>2]=0;n=KL(f,m,54,3)|0;c[A+8>>2]=n;s=KL(f,j,36,3)|0;c[A+12>>2]=s;j=1;m=0;r=0}while(0);b=f+16|0;o=c[b>>2]|0;g=c[o+12>>2]|0;if(g){H=+h[g+24>>3];g=m-n+~~(H+(H>=0.0?.5:-.5))|0;if((g|0)>0){g=g>>>1;m=m-g|0;c[A>>2]=m;n=n+g|0;c[A+8>>2]=n;g=0}else g=0}else g=j;if(y|(g|0)!=0){j=0;g=o}else{j=KL(a,c[46374]|0,8,0)|0;g=c[b>>2]|0}q=j-m|0;p=~~(+h[g+56>>3]+ +(j-r|0));c[A>>2]=0;c[A+4>>2]=0;o=q+j+n|0;c[A+8>>2]=o;b=~~(+h[g+88>>3]+ +(j+p|0)+ +(s|0));c[A+12>>2]=b;b:do if(z){g=e;c:while(1){n=d+4|0;j=c[d>>2]|0;if(!j)break b;if(!g){m=0;d=q;g=p}else{m=g+8|0;d=(c[g>>2]|0)+q|0;g=(c[g+4>>2]|0)+p|0}k=+(d|0)*.013888888888888888;i=+(g|0)*.013888888888888888;d=Sy(j)|0;while(1){if(!d){d=n;g=m;continue c}F=c[(c[d+16>>2]|0)+132>>2]|0;h[F>>3]=+h[F>>3]+k;F=F+8|0;h[F>>3]=+h[F>>3]+i;d=Ty(j,d)|0}}}while(0);F=c[(c[a+16>>2]|0)+140>>2]|0;E=F+8|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;h[F+24>>3]=+(o|0)*.013888888888888888;h[F+32>>3]=+(b|0)*.013888888888888888;l=B;return}function Wo(a,b){a=a|0;b=b|0;var d=0,e=0;while(1){d=c[b>>2]|0;if(!d)break;Xo(d);Cz(d,134401)|0;b=b+4|0}b=c[c[(c[a+16>>2]|0)+140>>2]>>2]|0;if(b|0)D_(b);Xo(a);Cz(a,134401)|0;d=Sy(a)|0;while(1){if(!d)break;e=Ty(a,d)|0;b=Ex(a,d)|0;while(1){if(!b)break;D_(c[(c[b+16>>2]|0)+172>>2]|0);Cz(b,134378)|0;b=Gx(a,b)|0}Yo(d);d=e}$x(a)|0;return}function Xo(a){a=a|0;D_(c[(c[a+16>>2]|0)+140>>2]|0);return}function Yo(a){a=a|0;var b=0;b=a+16|0;D_(c[(c[b>>2]|0)+112>>2]|0);D_(c[(c[b>>2]|0)+132>>2]|0);Cz(a,134365)|0;return}function Zo(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0.0,i=0,j=0,k=0,l=0,m=0;k=a+16|0;l=c[c[(c[k>>2]|0)+112>>2]>>2]|0;m=uH((l*24|0)+24|0)|0;i=0;j=Jx(b,a)|0;while(1){if(!j)break;f=c[j>>2]&3;e=c[((f|0)==2?j:j+-48|0)+40>>2]|0;if((e|0)==(a|0))e=c[((f|0)==3?j:j+48|0)+40>>2]|0;e=c[(c[e+16>>2]|0)+132>>2]|0;f=c[(c[k>>2]|0)+132>>2]|0;g=+h[e>>3]-+h[f>>3];d=+h[e+8>>3]-+h[f+8>>3];c[m+(i*24|0)>>2]=j;h[m+(i*24|0)+8>>3]=+K(+d,+g);h[m+(i*24|0)+16>>3]=d*d+g*g;i=i+1|0;j=Kx(b,j,a)|0}if((i|0)!=(l|0))qa(90689,90666,642,90698);_0(m,l,24,67);a:do if((l|0)>1){j=l+-1|0;e=0;b:while(1){if((e|0)>=(j|0))break a;g=+h[m+(e*24|0)+8>>3];f=e+1|0;i=f;while(1){if((i|0)>=(l|0))break;if(!(+h[m+(i*24|0)+8>>3]==g))break;i=i+1|0}if((i|0)==(f|0)){e=f;continue}if((i|0)==(l|0))d=3.141592653589793;else d=+h[m+(i*24|0)+8>>3];d=(d-g)/+(i-e|0);d=d>.03490658503988659?.03490658503988659:d;g=0.0;while(1){if((e|0)>=(i|0))continue b;k=m+(e*24|0)+8|0;h[k>>3]=+h[k>>3]+g;g=g+d;e=e+1|0}}}while(0);return m|0}function _o(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0.0,q=0;k=c[d>>2]|0;n=c[k+16>>2]|0;m=b[n+168>>1]|0;o=m<<16>>16;j=c[k>>2]&3;i=c[((j|0)==2?k:k+-48|0)+40>>2]|0;if((i|0)==(a|0))i=c[((j|0)==3?k:k+48|0)+40>>2]|0;p=+h[d+8>>3];g=(g-p)/+(m<<16>>16);g=g>.03490658503988659?.03490658503988659:g;m=i>>>0>a>>>0;l=m?g:-g;d=m?1:-1;k=0;i=c[n+172>>2]|0;j=m?f:f+-1+o|0;g=m?p:g*+(o+-1|0)+p;while(1){if((k|0)>=(o|0))break;n=c[i>>2]|0;c[e+(j<<4)>>2]=n;m=c[n>>2]&3;q=(m|0)==3?n:n+48|0;c[e+(j<<4)+4>>2]=c[((c[(c[(c[q+40>>2]|0)+16>>2]|0)+164>>2]|0)==(a|0)?q:(m|0)==2?n:n+-48|0)+40>>2];h[e+(j<<4)+8>>3]=g;k=k+1|0;i=i+4|0;j=j+d|0;g=g+l}return o+f|0}function $o(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a+8>>3];d=+h[b+8>>3];if(!(c>d))if(!(c<d)){d=+h[a+16>>3];c=+h[b+16>>3];if(d>c)a=1;else a=(d<c)<<31>>31}else a=-1;else a=1;return a|0}function ap(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=nx(a,0,c,0)|0;do if(d|0){a=yx(a,d)|0;d=nx(b,0,c,0)|0;if(!d){nx(b,0,c,a)|0;break}else{rx(b,d,a)|0;break}}while(0);return}function bp(a,b){a=a|0;b=b|0;var d=0,f=0;b=az(a,b,1)|0;Az(b,134365,304,1)|0;f=uH(32)|0;d=b+16|0;c[(c[d>>2]|0)+112>>2]=f;a=vH((e[(c[a+16>>2]|0)+176>>1]|0)<<3)|0;c[(c[d>>2]|0)+132>>2]=a;return b|0}function cp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+80|0;n=q+56|0;m=q+32|0;p=q;o=q+64|0;i=c[e+4>>2]|0;k=yx(b,i)|0;do if(a[k>>0]|0){if((c[e>>2]|0)!=(b|0)){e=yx(yA(b)|0,i)|0;if((e|0)==(k|0))break;if(!(b$(k,e)|0))break}a[o>>0]=0;e=p+8|0;i=p+16|0;j=p+24|0;c[m>>2]=p;c[m+4>>2]=e;c[m+8>>2]=i;c[m+12>>2]=j;c[m+16>>2]=o;if((N1(k,90851,m)|0)<=3){c[n>>2]=ry(b)|0;c[n+4>>2]=k;Pw(0,90869,n)|0;break}g=+h[22908];if(g>0.0){h[p>>3]=+h[p>>3]/g;h[e>>3]=+h[e>>3]/g;h[i>>3]=+h[i>>3]/g;h[j>>3]=+h[j>>3]/g}e=a[o>>0]|0;if(e<<24>>24==33)a[(c[d+16>>2]|0)+119>>0]=3;else a[(c[d+16>>2]|0)+119>>0]=e<<24>>24==63?2:1;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];c[f+20>>2]=c[p+20>>2];c[f+24>>2]=c[p+24>>2];c[f+28>>2]=c[p+28>>2]}while(0);l=q;return}function dp(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=a+16|0;f=c[g>>2]|0;a=b[f+168>>1]|0;f=c[f+172>>2]|0;if(!f){a=a<<16>>16;e=a;a=vH((a<<2)+4|0)|0}else{a=a<<16>>16;e=a;a=xH(f,(a<<2)+4|0)|0}c[a+(e<<2)>>2]=d;d=c[g>>2]|0;c[d+172>>2]=a;d=d+168|0;b[d>>1]=(b[d>>1]|0)+1<<16>>16;return}function ep(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+48|0;h=i+24|0;g=i;e=c[b>>2]|0;d=c[e>>2]&3;f=c[((d|0)==2?e:e+-48|0)+40>>2]|0;d=c[((d|0)==3?e:e+48|0)+40>>2]|0;b=W_(ry(a)|0)|0;j=W_(ry(f)|0)|0;j=(b+8+j+(W_(ry(d)|0)|0)|0)>999;b=ry(a)|0;if(j){d=ry(d)|0;j=ry(f)|0;h=(c[e>>2]|0)>>>4;c[g>>2]=b;c[g+4>>2]=d;c[g+8>>2]=j;j=g+16|0;c[j>>2]=h;c[j+4>>2]=0;Y0(190692,90809,g)|0}else{d=c[(c[d+16>>2]|0)+120>>2]|0;j=c[(c[f+16>>2]|0)+120>>2]|0;g=(c[e>>2]|0)>>>4;c[h>>2]=b;c[h+4>>2]=d;c[h+8>>2]=j;j=h+16|0;c[j>>2]=g;c[j+4>>2]=0;Y0(190692,90828,h)|0}l=i;return}function fp(a){a=a|0;var d=0,e=0,f=0.0,g=0.0,i=0,j=0,k=0;j=4;i=C_(40)|0;c[i>>2]=0;g=+h[22908];o=0;f=+Z(1,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){h[22908]=f;o=0;ia(100,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){i=D3(184132,1,i|0,j|0)|0;j=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){d=E3(c[e>>2]|0,i|0,j|0)|0;if(!d)bb(e|0,p|0);z=p}else d=-1;if((d|0)!=1)d=0;else d=z}else d=z}else d=z;while(1){if(d|0)break;o=0;ia(101,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}o=0;$(22,a|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}if(b[(c[a+16>>2]|0)+136>>1]&14){o=0;ia(102,a|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;continue}}o=0;ja(22,a|0,0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,i|0,j|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1)d=z;else{k=12;break}}if((k|0)==12)h[22908]=g;D_(i|0);return}function gp(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;e=a+16|0;f=b[(c[e>>2]|0)+136>>1]&14;d=f&65535;if((f&65535)>8){if(f<<16>>16==12){if(Wm(a,22,10)|0){c[46363]=2;h=5}}else h=5;do if((h|0)==5)if(!(b[(c[e>>2]|0)+136>>1]&1)){Ym(a,d)|0;break}else{Pw(0,90912,g)|0;d=2;break}while(0);c[46363]=0}if((c[46367]|0)<1)Ym(a,d)|0;l=i;return}function hp(a){a=a|0;var b=0.0,d=0.0,e=0;e=l;l=l+16|0;c[45704]=1;c[45705]=1;c[45707]=-1;c[45709]=50;h[22860]=0.0;h[22855]=0.0;h[22856]=1.0;c[45708]=KL(a,nx(a,0,90975,0)|0,600,0)|0;d=+LL(a,nx(a,0,90983,0)|0,.3,0.0);h[22857]=d;h[1371]=d;if(-1.0==-1.0)b=+LL(a,nx(a,0,90985,0)|0,-1.0,0.0);else b=-1.0;h[22858]=b;c[45706]=1;a=om(a,2,182824)|0;c[45718]=a;if(!a){Pw(0,90988,e)|0;c[45706]=2}c[45734]=(O(c[45708]|0,c[45709]|0)|0)/100|0;d=+h[22857];h[22862]=d*d;if(c[45704]|0){b=+h[22860];if(b<=0.0){b=d*3.0;h[22860]=b}h[22861]=b*b}l=e;return}function ip(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0;j=l;l=l+16|0;d=j;g=c[c[(c[a+16>>2]|0)+140>>2]>>2]|0;i=jp(a,b)|0;kp(d,a,g);e=+h[d>>3];f=+h[d+8>>3];a:do if(!(c[45704]|0)){b=0;while(1){if((b|0)>=(c[45735]|0))break a;np(a,+lp(b),g);b=b+1|0}}else{d=Ku(ay(a)|0)|0;Pu(d,ay(a)|0);b=0;while(1){if((b|0)>=(c[45735]|0))break;mp(a,+lp(b),g,d);b=b+1|0}Ru(d)}while(0);b:do if(e!=0.0|f!=0.0){b=Sy(a)|0;while(1){if(!b)break b;g=c[(c[b+16>>2]|0)+132>>2]|0;h[g>>3]=+h[g>>3]+e;g=g+8|0;h[g>>3]=+h[g>>3]+f;b=Ty(a,b)|0}}while(0);if(i|0)op();l=j;return}function jp(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0;if(+h[22858]==-1.0){i=ay(a)|0;d=+h[22857];h[22858]=+h[22856]*.2*d*+C(+(+(i|0)));i=1}else{i=0;d=+h[22857]}g=c[45734]|0;h[b+8>>3]=+lp(g);h[b+16>>3]=d;h[b+24>>3]=+h[22855];e=c[45708]|0;a=e-g|0;c[b>>2]=a;f=c[45707]|0;do if((f|0)>-1){if((f|0)<=(g|0)){c[45735]=f;a=0;j=10;break}if((f|0)<=(e|0)){c[45735]=g;a=f-g|0;j=10}}else{c[45735]=g;j=10}while(0);if((j|0)==10)c[b+32>>2]=a;return i|0}function kp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,l=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0.0,x=0,y=0,z=0;v=ay(d)|0;x=c[(c[(c[d+16>>2]|0)+140>>2]|0)+4>>2]|0;u=Sy(d)|0;q=0;r=0;g=0;k=0;n=0;while(1){if(!u)break;f=c[u+16>>2]|0;if(!(a[f+119>>0]|0))f=r;else{f=c[f+132>>2]|0;i=+h[f>>3];if(!q){k=~~i;g=~~+h[f+8>>3];n=g;f=k}else{p=+(r|0);s=+h[f+8>>3];t=+(g|0);w=+(k|0);o=+(n|0);n=~~(s>o?s:o);f=~~(i<p?i:p);g=~~(s<t?s:t);k=~~(i>w?i:w)}q=q+1|0}u=Ty(d,u)|0;r=f}i=+h[22857]*(+C(+(+(v-x|0)))+1.0);s=i*.6;h[22864]=s;h[22863]=s;if((q|0)!=1)if((q|0)>1){t=+(k+r|0)*.5;w=+(n+g|0)*.5;o=+(k-r|0);p=o*1.2;l=+(n-g|0);m=l*1.2;i=i*2.4*s;j=m*p/i;do if(!(j>=1.0)){if(j>0.0){i=+C(+j)*2.0;j=p/i;h[22863]=j;i=m/i;z=20;break}if(p>0.0){j=o*.6;h[22863]=j;i=i/p*.5;z=20;break}if(m>0.0){j=i/m*.5;h[22863]=j;i=l*.6;z=20}else{i=s;j=s}}else{j=o*.6;h[22863]=j;i=l*.6;z=20}while(0);if((z|0)==20)h[22864]=i;s=+K(+i,+j);j=j/+E(+s);h[22863]=j;i=i/+F(+s);h[22864]=i}else{t=0.0;w=0.0;j=s;i=s}else{t=+(r|0);w=+(g|0);j=s;i=s}h[22865]=j*j;h[22866]=i*i;if((c[45718]|0)==2)f=c[45706]|0;else{f=H1()|0;f=(db(0)|0)^f}i2(f);a:do if(!e){e=Sy(d)|0;if(!q)while(1){if(!e)break a;s=+h[22863];s=(+k2()*2.0+-1.0)*s;z=e+16|0;h[c[(c[z>>2]|0)+132>>2]>>3]=s;s=+h[22864];s=(+k2()*2.0+-1.0)*s;h[(c[(c[z>>2]|0)+132>>2]|0)+8>>3]=s;e=Ty(d,e)|0}while(1){if(!e)break a;f=e+16|0;g=c[f>>2]|0;if(!(a[g+119>>0]|0)){s=+h[22863];s=(+k2()*2.0+-1.0)*s;h[c[(c[f>>2]|0)+132>>2]>>3]=s;s=+h[22864];s=(+k2()*2.0+-1.0)*s;h[(c[(c[f>>2]|0)+132>>2]|0)+8>>3]=s}else{z=c[g+132>>2]|0;h[z>>3]=+h[z>>3]-t;z=z+8|0;h[z>>3]=+h[z>>3]-w}e=Ty(d,e)|0}}else{while(1){if(!(c[e>>2]|0))break;u=e+8|0;s=+E(+(+h[u>>3]))*+h[22863]+t;x=c[(c[e+4>>2]|0)+16>>2]|0;v=c[x+132>>2]|0;h[v>>3]=s;h[v+8>>3]=+F(+(+h[u>>3]))*+h[22864]+w;a[x+119>>0]=1;e=e+16|0}l=t*.1;m=w*.1;r=Sy(d)|0;while(1){if(!r)break a;q=r+16|0;e=c[q>>2]|0;if(!((c[(c[e+112>>2]|0)+8>>2]|0)==0?!(c[e+212>>2]|0):0))z=32;do if((z|0)==32){z=0;if(a[e+119>>0]|0){x=c[e+132>>2]|0;h[x>>3]=+h[x>>3]-t;x=x+8|0;h[x>>3]=+h[x>>3]-w;break}n=Jx(d,r)|0;e=0;j=0.0;i=0.0;while(1){if(!n)break;k=c[n>>2]&3;f=(k|0)==2?n:n+-48|0;g=c[f+40>>2]|0;k=(k|0)==3?n:n+48|0;do if((g|0)!=(c[k+40>>2]|0)?(y=c[(c[((g|0)==(r|0)?k:f)+40>>2]|0)+16>>2]|0,(a[y+119>>0]|0)!=0):0)if(!e){x=c[y+132>>2]|0;e=1;j=+h[x>>3];i=+h[x+8>>3];break}else{p=+(e|0);x=c[y+132>>2]|0;e=e+1|0;s=+(e|0);j=(+h[x>>3]+j*p)/s;i=(+h[x+8>>3]+i*p)/s;break}while(0);n=Kx(d,n,r)|0}do if((e|0)<=1)if((e|0)==1){f=c[q>>2]|0;e=c[f+132>>2]|0;h[e>>3]=j*.98+l;i=i*.9+m;break}else{i=+k2()*6.283185307179586;s=+k2()*.9;p=s*+h[22863]*+E(+i);f=c[q>>2]|0;e=c[f+132>>2]|0;h[e>>3]=p;i=+h[22864]*s*+F(+i);break}else{f=c[q>>2]|0;e=c[f+132>>2]|0;h[e>>3]=j}while(0);h[e+8>>3]=i;a[f+119>>0]=1}while(0);r=Ty(d,r)|0}}while(0);h[b>>3]=t;h[b+8>>3]=w;return}function lp(a){a=a|0;var b=0;b=c[45708]|0;return +(+h[22858]*+(b-a|0)/+(b|0))}function mp(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0;if(!(b<=0.0)){Qu(e);f=Sy(a)|0;while(1){if(!f)break;i=c[f+16>>2]|0;g=(c[i+112>>2]|0)+16|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;i=c[i+132>>2]|0;j=+h[22860];g=~~+A(+(+h[i>>3]/j));Tu(e,g,~~+A(+(+h[i+8>>3]/j)),f);f=Ty(a,f)|0}g=Sy(a)|0;while(1){if(!g)break;f=Ex(a,g)|0;while(1){if(!f)break;i=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((g|0)!=(i|0))qp(g,i,f);f=Gx(a,f)|0}g=Ty(a,g)|0}Vu(e,23);rp(a,b,d)}return}function np(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0;if(!(b<=0.0)){e=Sy(a)|0;while(1){if(!e)break;g=(c[(c[e+16>>2]|0)+112>>2]|0)+16|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;e=Ty(a,e)|0}g=Sy(a)|0;while(1){if(!g)break;else e=g;while(1){e=Ty(a,e)|0;if(!e)break;pp(g,e)}e=Ex(a,g)|0;while(1){if(!e)break;f=c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0;if((g|0)!=(f|0))qp(g,f,e);e=Gx(a,e)|0}g=Ty(a,g)|0}rp(a,b,d)}return}function op(){h[22858]=-1.0;return}function pp(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0;g=c[(c[b+16>>2]|0)+132>>2]|0;f=c[(c[a+16>>2]|0)+132>>2]|0;d=+h[g>>3]-+h[f>>3];e=+h[g+8>>3]-+h[f+8>>3];sp(a,b,d,e,e*e+d*d);return}function qp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0;j=b+16|0;k=c[(c[j>>2]|0)+132>>2]|0;a=a+16|0;b=c[(c[a>>2]|0)+132>>2]|0;e=+h[k>>3]-+h[b>>3];f=+h[k+8>>3]-+h[b+8>>3];g=e;i=f;e=e*e;f=f*f;while(1){e=e+f;if(!(e==0.0))break;e=+(5-((g2()|0)%10|0)|0);f=+(5-((g2()|0)%10|0)|0);g=e;i=f;e=e*e;f=f*f}f=+C(+e);b=c[d+16>>2]|0;e=+h[b+128>>3];if(!(c[45705]|0))e=e*f/+h[b+136>>3];else e=(f-+h[b+136>>3])*e/f;g=e*g;k=c[(c[j>>2]|0)+112>>2]|0;j=k+16|0;h[j>>3]=+h[j>>3]-g;i=e*i;k=k+24|0;h[k>>3]=+h[k>>3]-i;k=c[(c[a>>2]|0)+112>>2]|0;j=k+16|0;h[j>>3]=+h[j>>3]+g;k=k+24|0;h[k>>3]=+h[k>>3]+i;return}function rp(b,d,e){b=b|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0;o=d*d;n=(e|0)==0;m=Sy(b)|0;while(1){if(!m)break;l=c[m+16>>2]|0;if(!(a[l+119>>0]&2)){k=c[l+112>>2]|0;f=+h[k+16>>3];i=+h[k+24>>3];g=i*i+f*f;if(g<o){e=c[l+132>>2]|0;j=+h[e>>3]+f;f=+h[e+8>>3]+i}else{g=d/+C(+g);e=c[l+132>>2]|0;j=+h[e>>3]+g*f;f=+h[e+8>>3]+g*i}do if(!n){g=+C(+(f*f/+h[22866]+j*j/+h[22865]));if((c[k+8>>2]|0)==0?(c[l+212>>2]|0)==0:0){h[e>>3]=j/g;f=f/g;break}if(!(g>=1.0)){h[e>>3]=j;break}else{h[e>>3]=j*.95/g;f=f*.95/g;break}}else h[e>>3]=j;while(0);h[e+8>>3]=f}m=Ty(b,m)|0}return}function sp(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0.0,i=0,j=0;g=d;d=f;while(1){if(!(d==0.0))break;d=+(5-((g2()|0)%10|0)|0);e=+(5-((g2()|0)%10|0)|0);g=d;d=e*e+d*d}if(!(c[45705]|0))d=+h[22862]/d;else{f=+C(+d);d=+h[22862]/(f*d)}j=c[a+16>>2]|0;a=c[j+112>>2]|0;if(((c[a+8>>2]|0)==0?(c[j+212>>2]|0)==0:0)?(i=c[b+16>>2]|0,(c[(c[i+112>>2]|0)+8>>2]|0)==0):0)d=(c[i+212>>2]|0)==0?d*10.0:d;f=d*g;j=c[(c[b+16>>2]|0)+112>>2]|0;b=j+16|0;h[b>>3]=+h[b>>3]+f;g=d*e;j=j+24|0;h[j>>3]=+h[j>>3]+g;j=a+16|0;h[j>>3]=+h[j>>3]-f;j=a+24|0;h[j>>3]=+h[j>>3]-g;return}function tp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;f=c[b+8>>2]|0;g=c[b>>2]|0;e=c[b+4>>2]|0;b=f;while(1){if(!b)break;a=f;while(1){if(!a)break;if((b|0)!=(a|0))pp(c[b>>2]|0,c[a>>2]|0);a=c[a+4>>2]|0}b=c[b+4>>2]|0}h=g+-1|0;a=e+-1|0;up(d,h,a,f);up(d,h,e,f);b=e+1|0;up(d,h,b,f);up(d,g,a,f);up(d,g,b,f);g=g+1|0;up(d,g,a,f);up(d,g,e,f);up(d,g,b,f);return 0}function up(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,l=0,m=0;a=Wu(a,b,d)|0;if((e|0)!=0&(a|0)!=0){k=a+8|0;do{d=c[e>>2]|0;j=d+16|0;a=k;while(1){a=c[a>>2]|0;if(!a)break;b=c[a>>2]|0;m=c[(c[b+16>>2]|0)+132>>2]|0;l=c[(c[j>>2]|0)+132>>2]|0;f=+h[m>>3]-+h[l>>3];g=+h[m+8>>3]-+h[l+8>>3];i=g*g+f*f;if(i<+h[22861])sp(d,b,f,g,i);a=a+4|0}e=c[e+4>>2]|0}while((e|0)!=0)}return}function vp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=xx(b,91095)|0;if(0)E1(91032,8,1,c[15686]|0)|0;if(!((e|0)!=0?(a[e>>0]|0)!=0:0))e=91041;f=A$(e,58)|0;do if(!f)f=0;else{if((f|0)!=(e|0)?((a[e>>0]|0)+-48|0)>>>0>=10:0){f=0;break}i=a2(e)|0;e=f+1|0;f=(i|0)>0?i:0}while(0);if(0){i=c[15686]|0;c[g>>2]=f;c[g+4>>2]=e;g1(i,91049,g)|0}if(!((f|0)!=0?!(wp(b,d,f)|0):0))sq(b,e)|0;l=h;return}function wp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;t=l;l=l+64|0;r=t;j=t+40|0;s=ay(b)|0;k=by(b)|0;qq(j,b);c[46072]=c[j>>2];c[46073]=c[j+4>>2];c[46074]=c[j+8>>2];if(a[184296]|0){g[46072]=+g[46072]*.013888888888888888;g[46073]=+g[46073]*.013888888888888888}f=xp(b)|0;a:do if(!f)f=0;else{j=r;i=j+40|0;do{c[j>>2]=c[d>>2];j=j+4|0;d=d+4|0}while((j|0)<(i|0));j=r+16|0;q=+h[j>>3];o=+(k|0)*2.0;p=1.0/+(O(s+-1|0,s)|0);i=0;n=q;while(1){if(!((f|0)!=0&(i|0)<(e|0)))break a;yp(s,r);m=+h[22868]*+h[170];h[22869]=m;h[22870]=o*m*p;d=0;while(1){if((d|0)>=(c[45742]|0))break;m=+zp(d);if(m<=0.0)break;f=Ap(b,m)|0;if(!f){f=0;break}else d=d+1|0}m=n+q;h[j>>3]=m;i=i+1|0;n=m}}while(0);l=t;return f|0}function xp(a){a=a|0;var b=0,c=0,d=0,e=0;b=0;e=Sy(a)|0;while(1){if(!e)break;else d=e;while(1){c=Ty(a,d)|0;if(!c)break;d=c;b=(Dp(e,c)|0)+b|0}e=Ty(a,e)|0}return b|0}function yp(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0;e=+h[b+16>>3];h[171]=e;c[344]=c[b>>2];f=+h[b+8>>3];h[22872]=f;c[45742]=c[b+32>>2];d=+h[b+24>>3];if(d>0.0)h[170]=d;h[22868]=e*e;if(f==0.0)h[22872]=+C(+(+(a|0)))*.2*e;return}function zp(a){a=a|0;var b=0;b=c[344]|0;return +(+h[22872]*+(b-a|0)/+(b|0))}function Ap(b,d){b=b|0;d=+d;var e=0,f=0,g=0,i=0.0,j=0,k=0.0,l=0.0,m=0.0;e=Sy(b)|0;while(1){if(!e)break;j=(c[(c[e+16>>2]|0)+112>>2]|0)+16|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;e=Ty(b,e)|0}e=0;j=Sy(b)|0;while(1){if(!j)break;else g=j;while(1){f=Ty(b,g)|0;if(!f)break;g=f;e=(Bp(j,f)|0)+e|0}f=Ex(b,j)|0;while(1){if(!f)break;Cp(j,c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0);f=Gx(b,f)|0}j=Ty(b,j)|0}a:do if(!e)e=0;else{m=d*d;g=Sy(b)|0;while(1){if(!g)break a;f=c[g+16>>2]|0;if((a[f+119>>0]|0)!=3){j=c[f+112>>2]|0;k=+h[j+16>>3];i=+h[j+24>>3];l=i*i+k*k;if(l<m){f=c[f+132>>2]|0;h[f>>3]=+h[f>>3]+k}else{l=+C(+l);f=c[f+132>>2]|0;h[f>>3]=+h[f>>3]+k*d/l;i=i*d/l}j=f+8|0;h[j>>3]=+h[j>>3]+i}g=Ty(b,g)|0}}while(0);return e|0}function Bp(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0;g=c[(c[b+16>>2]|0)+132>>2]|0;f=c[(c[a+16>>2]|0)+132>>2]|0;d=+h[g>>3]-+h[f>>3];e=+h[g+8>>3]-+h[f+8>>3];return Fp(a,b,d,e,e*e+d*d)|0}function Cp(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0.0,k=0.0,l=0,m=0;if(!(Dp(a,b)|0)){i=c[b+16>>2]|0;m=c[i+132>>2]|0;f=c[a+16>>2]|0;l=c[f+132>>2]|0;e=+h[m>>3]-+h[l>>3];d=+h[m+8>>3]-+h[l+8>>3];g=+C(+(d*d+e*e));j=+Ep(a);j=+Ep(b)+j;k=g-j;g=k*k/((+h[171]+j)*g);e=g*e;b=c[i+112>>2]|0;a=b+16|0;h[a>>3]=+h[a>>3]-e;d=g*d;b=b+24|0;h[b>>3]=+h[b>>3]-d;b=c[f+112>>2]|0;a=b+16|0;h[a>>3]=+h[a>>3]+e;b=b+24|0;h[b>>3]=+h[b>>3]+d}return}function Dp(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0.0,k=0,l=0;k=c[d+16>>2]|0;l=c[k+132>>2]|0;d=c[b+16>>2]|0;b=c[d+132>>2]|0;i=+h[l>>3]-+h[b>>3];j=+h[l+8>>3]-+h[b+8>>3];j=j<0.0?-j:j;b=(a[184296]|0)==0;e=+h[d+32>>3];if(b){f=+g[46072];e=e*.5*f;f=+h[k+32>>3]*.5*f}else{f=+g[46072];e=e*.5+f;f=+h[k+32>>3]*.5+f}if(!((i<0.0?-i:i)<=f+e))d=0;else{e=+h[d+40>>3];if(b){i=+g[46073];f=e*.5*i;e=+h[k+40>>3]*.5*i}else{i=+g[46073];f=e*.5+i;e=+h[k+40>>3]*.5+i}d=j<=e+f&1}return d|0}function Ep(b){b=b|0;var d=0.0,e=0.0;b=c[b+16>>2]|0;d=+h[b+32>>3];if(!(a[184296]|0)){e=d*.5*+g[46072];d=+h[b+40>>3]*.5*+g[46073]}else{e=d*.5+ +g[46072];d=+h[b+40>>3]*.5+ +g[46073]}return +(+C(+(d*d+e*e)))}function Fp(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0,i=0;while(1){if(!(f==0.0))break;f=+(5-((g2()|0)%10|0)|0);e=+(5-((g2()|0)%10|0)|0);d=f;f=e*e+f*f}g=Dp(a,b)|0;f=((g|0)==0?+h[22870]:+h[22869])/f;d=f*d;b=c[(c[b+16>>2]|0)+112>>2]|0;i=b+16|0;h[i>>3]=+h[i>>3]+d;f=f*e;b=b+24|0;h[b>>3]=+h[b>>3]+f;b=c[(c[a+16>>2]|0)+112>>2]|0;a=b+16|0;h[a>>3]=+h[a>>3]-d;b=b+24|0;h[b>>3]=+h[b>>3]-f;return g|0}function Gp(a){a=a|0;$M(a,2);b[(c[a+16>>2]|0)+176>>1]=2;c[46366]=2;Hp(a);return}function Hp(a){a=a|0;var b=0,d=0,e=0,f=0;e=uH((ay(a)|0)<<2)|0;b=uH(((ay(a)|0)<<2)+4|0)|0;f=a+16|0;c[(c[f>>2]|0)+152>>2]=b;b=Sy(a)|0;d=0;while(1){if(!b)break;$l(b);c[(c[b+16>>2]|0)+112>>2]=e+(d<<2);c[(c[(c[f>>2]|0)+152>>2]|0)+(d<<2)>>2]=b;b=Ty(a,b)|0;d=d+1|0}d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;Ip(b);b=Gx(a,b)|0}d=Ty(a,d)|0}return}function Ip(a){a=a|0;var b=0.0;Az(a,134378,176,1)|0;eM(a)|0;b=+LL(a,c[46404]|0,1.0,0.0);h[(c[a+16>>2]|0)+128>>3]=b;return}function Jp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n+4|0;k=n;a[m>>0]=a[18492]|0;a[m+1>>0]=a[18493]|0;a[m+2>>0]=a[18494]|0;a[m+3>>0]=a[18495]|0;m=Xx(91072,m,0)|0;Az(m,91080,280,1)|0;c[(c[b+16>>2]|0)+140>>2]=m;e=Sy(b)|0;while(1){if(!e)break;f=e+16|0;if(!(c[c[(c[f>>2]|0)+112>>2]>>2]|0)){j=Kp(m,ry(e)|0,e)|0;c[c[(c[f>>2]|0)+112>>2]>>2]=j}e=Ty(b,e)|0}f=Sy(b)|0;while(1){if(!f)break;e=Ex(b,f)|0;while(1){if(!e)break;h=c[e>>2]&3;g=c[c[(c[(c[((h|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;h=c[c[(c[(c[((h|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;if((g|0)!=(h|0))Az(Rx(m,g,h,0,1)|0,134378,176,1)|0;e=Gx(b,e)|0}f=Ty(b,f)|0}j=oD(m,k,0)|0;f=0;while(1){if((f|0)>=(c[k>>2]|0))break;h=c[j+(f<<2)>>2]|0;e=Sy(h)|0;while(1){if(!e)break;g=Ex(b,c[c[(c[e+16>>2]|0)+112>>2]>>2]|0)|0;while(1){if(!g)break;i=c[c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]>>2]|0;if((e|0)!=(i|0)){i=Rx(m,e,i,0,1)|0;Az(i,134378,176,1)|0;Vx(h,i,1)|0}g=Gx(b,g)|0}e=Ty(h,e)|0}f=f+1|0}e=Sy(m)|0;while(1){if(!e)break;f=Ex(m,e)|0;while(1){if(!f)break;b=uH(8)|0;c[(c[f+16>>2]|0)+120>>2]=b;f=Gx(m,f)|0}e=Ty(m,e)|0}c[d>>2]=c[k>>2];l=n;return j|0}function Kp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;b=az(a,b,1)|0;Az(b,134365,304,1)|0;e=uH(40)|0;a=b+16|0;c[(c[a>>2]|0)+112>>2]=e;e=uH(c[46366]<<3)|0;a=c[a>>2]|0;c[a+132>>2]=e;e=c[d+16>>2]|0;h[a+88>>3]=+h[e+88>>3];h[a+96>>3]=+h[e+96>>3];h[a+80>>3]=+h[e+80>>3];c[c[a+112>>2]>>2]=d;return b|0}function Lp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+48|0;b=h+32|0;e=h;if(ay(a)|0){g=Jp(a,b)|0;f=c[b>>2]|0;b=c[g>>2]|0;if((f|0)==1){Xu(b,a);Mp(c[g>>2]|0);tq(a)|0}else{d=c[b+60>>2]|0;XD(a,2,8,e)|0;b=0;while(1){if((b|0)>=(f|0))break;i=c[g+(b<<2)>>2]|0;Xu(i,a);tq(i)|0;b=b+1|0}WD(f,g,d,e)|0;b=0;while(1){if((b|0)>=(f|0))break;Mp(c[g+(b<<2)>>2]|0);b=b+1|0}}D_(g)}l=h;return}function Mp(a){a=a|0;var b=0,d=0,e=0;b=Sy(a)|0;while(1){if(!b)break;d=c[b+16>>2]|0;e=c[d+132>>2]|0;d=c[(c[(c[c[d+112>>2]>>2]|0)+16>>2]|0)+132>>2]|0;h[d>>3]=+h[e>>3];h[d+8>>3]=+h[e+8>>3];b=Ty(a,b)|0}return}function Np(a){a=a|0;if(ay(a)|0){Gp(a);Lp(a);D_(c[(c[(Sy(a)|0)+16>>2]|0)+112>>2]|0);hn(a);eJ(a)}return}function Op(a){a=a|0;var b=0,d=0,e=0;b=Sy(a)|0;if(b|0){e=a+16|0;Pp(c[(c[e>>2]|0)+140>>2]|0);while(1){if(!b)break;d=Ex(a,b)|0;while(1){if(!d)break;JM(d);d=Gx(a,d)|0}HM(b);b=Ty(a,b)|0}D_(c[(c[e>>2]|0)+152>>2]|0);if((fz(a)|0)!=(a|0))Gz(a,0,134401)}return}function Pp(a){a=a|0;var b=0,d=0;d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;D_(c[(c[b+16>>2]|0)+120>>2]|0);b=Gx(a,b)|0}b=d+16|0;D_(c[(c[b>>2]|0)+112>>2]|0);D_(c[(c[b>>2]|0)+132>>2]|0);d=Ty(a,d)|0}$x(a)|0;return}function Qp(a){a=a|0;var b=0,d=0,e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0.0,p=0.0;m=l;l=l+16|0;k=m;a:do if(Rp(a,k)|0){b=c[(c[(Sy(a)|0)+16>>2]|0)+132>>2]|0;g=+h[b>>3];e=+h[b+8>>3];b=Sy(a)|0;while(1){if(!b)break;f=c[(c[b+16>>2]|0)+132>>2]|0;h[f>>3]=+h[f>>3]-g;f=f+8|0;h[f>>3]=+h[f>>3]-e;b=Ty(a,b)|0}b=(g!=0.0|e!=0.0)&1;d=Sy(a)|0;while(1){if(!d)break a;f=Ex(a,d)|0;if(f|0)break;d=Ty(a,d)|0}n=c[f>>2]&3;d=c[(c[(c[((n|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;f=c[(c[(c[((n|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+132>>2]|0;i=+h[f+8>>3];j=+h[f>>3];e=+K(+(+h[d+8>>3]-i),+(+h[d>>3]-j));e=+h[k>>3]-e;h[k>>3]=e;if(e!=0.0){g=+E(+e);e=+F(+e);b=Sy(a)|0;while(1){if(!b){b=1;break a}k=c[(c[b+16>>2]|0)+132>>2]|0;p=+h[k>>3]-j;n=k+8|0;o=+h[n>>3]-i;h[k>>3]=p*g+j-o*e;h[n>>3]=p*e+i+o*g;b=Ty(a,b)|0}}}else b=0;while(0);l=m;return b|0}function Rp(b,d){b=b|0;d=d|0;var e=0.0,f=0,g=0;g=l;l=l+16|0;f=g;b=xx(b,91085)|0;do if((b|0)!=0?(a[b>>0]|0)!=0:0){e=+c2(b,f);if((c[f>>2]|0)==(b|0))if(!((QL(b)|0)<<24>>24)){b=0;break}else e=0.0;while(1){if(!(e>180.0))break;e=e+-360.0}while(1){if(!(e<=-180.0))break;e=e+360.0}h[d>>3]=e*.017453292519943295;b=1}else b=0;while(0);l=g;return b|0}function Sp(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=xx(a,91095)|0;return Tp(a,(d|0)==0?(c|0?c:191979):d,b)|0}function Tp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+32|0;m=n+16|0;j=n+8|0;i=n;if((d|0)!=0?(a[d>>0]|0)!=0:0){f=17792;while(1){g=c[f+4>>2]|0;if(!g)break;if(!(V$(d,g,c[f+8>>2]|0)|0)){k=6;break}f=f+16|0}if((k|0)==6){if(!(c[f+12>>2]|0)){c[i>>2]=g;Pw(0,91103,i)|0;f=17792}i=c[f>>2]|0;c[e>>2]=i;c[e+4>>2]=c[f+12>>2];if((i|0)==18)Up(b,d+(c[f+8>>2]|0)|0,e)}if(!(c[f+4>>2]|0)){f=RL(d,63)|0;if(f<<24>>24==63){c[j>>2]=d;Pw(0,91145,j)|0;f=0}else f=f&255;f=(f|0)==0;c[e>>2]=f&1;f=f?91192:132627;k=15}}else{c[e>>2]=0;f=132627;k=15}if((k|0)==15)c[e+4>>2]=f;if(0){k=c[15686]|0;j=c[e+8>>2]|0;o=+h[e+16>>3];c[m>>2]=c[e+4>>2];c[m+4>>2]=j;h[m+8>>3]=o;g1(k,91200,m)|0}l=n;return e|0}function Up(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=g;f=(N1(b,134313,f)|0)>0;b=c[g>>2]|0;c[d+8>>2]=f&(b|0)>-1?b:1e3;h[d+16>>3]=+LL(a,nx(a,0,91236,0)|0,-4.0,-1.0e10);l=e;return}function Vp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+16|0;g=h+8|0;f=h;do if((ay(a)|0)>=2){d=Qp(a)|0;d=(Wp(a)|0)+d|0;e=c[b>>2]|0;if(e){if(0){e=c[15686]|0;j=ry(a)|0;i=c[b+4>>2]|0;c[f>>2]=j;c[f+4>>2]=i;g1(e,91565,f)|0;e=c[b>>2]|0}if(e>>>0>2){switch(e|0){case 3:{e=Xq(a,1)|0;break}case 4:{e=Xq(a,0)|0;break}case 6:case 5:{e=0;break}case 10:case 9:case 7:case 8:case 14:case 13:case 11:case 12:{Hq(a,e)|0;e=0;break}case 15:{e=Xq(a,-1)|0;break}default:{c[g>>2]=c[b+4>>2];Pw(0,91588,g)|0;e=0}}d=e+d|0;break}if(Xp(a)|0){Yp();D_(c[46075]|0);c[46075]=0;break}Zp(a);if((c[b>>2]|0)==2)e=_p()|0;else e=$p()|0;if(e|0)aq();Yp();D_(c[46075]|0);c[46075]=0;d=e+d|0}}else d=0;while(0);l=h;return d|0}function Wp(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0;m=l;l=l+48|0;i=m+24|0;f=m+16|0;j=m;b=xx(a,137660)|0;a:do if(((b|0)!=0?(k=j+8|0,c[f>>2]=j,c[f+4>>2]=k,e=N1(b,102477,f)|0,(e|0)!=0):0)?(g=+h[j>>3],!(+B(+g)<1.0e-09)):0){if((e|0)!=1){d=+h[k>>3];if(+B(+d)<1.0e-09){b=0;break}}else{h[k>>3]=g;d=g}if(!(d==1.0&g==1.0)){if(0){f=c[15686]|0;h[i>>3]=g;h[i+8>>3]=d;g1(f,91748,i)|0}b=Sy(a)|0;while(1){if(!b){b=1;break a}i=c[(c[b+16>>2]|0)+132>>2]|0;h[i>>3]=+h[i>>3]*+h[j>>3];i=i+8|0;h[i>>3]=+h[i>>3]*+h[k>>3];b=Ty(a,b)|0}}else b=0}else b=0;while(0);l=m;return b|0}function Xp(b){b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;k=n;c[46084]=ay(b)|0;ur();c[46099]=vH((c[46084]|0)*96|0)|0;f=Sy(b)|0;d=c[46099]|0;qq(k,b);i=+g[k>>2];j=+g[k+4>>2];k=(a[k+8>>0]|0)==0;j=k?j:j*.013888888888888888;i=k?i:i*.013888888888888888;k=k?2:1;e=0;while(1){if((e|0)>=(c[46084]|0)){d=0;break}o=c[(c[f+16>>2]|0)+132>>2]|0;h[d+8>>3]=+h[o>>3];h[d+16>>3]=+h[o+8>>3];if(mb[k&3](d+40|0,f,i,j)|0){m=4;break}c[d+24>>2]=e;c[d+28>>2]=1;c[d>>2]=f;c[d+88>>2]=0;d=d+96|0;e=e+1|0;f=Ty(b,f)|0}if((m|0)==4){D_(c[46099]|0);c[46099]=0;d=1}l=n;return d|0}function Yp(){var a=0,b=0;a=c[46099]|0;b=0;while(1){if((b|0)>=(c[46084]|0))break;pt(a+40|0);a=a+96|0;b=b+1|0}ot();Wr();D_(c[46099]|0);return}function Zp(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0;o=l;l=l+32|0;m=o+16|0;n=o;p=c[46099]|0;i=+h[p+8>>3];k=+h[p+16>>3];f=c[46084]|0;d=p;e=1;g=+h[p+40>>3]+i;i=+h[p+56>>3]+i;j=+h[p+48>>3]+k;k=+h[p+64>>3]+k;while(1){if((e|0)>=(f|0))break;s=+h[d+104>>3];q=+h[d+112>>3];t=+h[d+136>>3]+s;r=+h[d+144>>3]+q;s=+h[d+152>>3]+s;q=+h[d+160>>3]+q;d=d+96|0;e=e+1|0;g=t<g?t:g;i=s>i?s:i;j=r<j?r:j;k=q>k?q:k}d=xx(b,91688)|0;if(d|0?a[d>>0]|0:0)h[173]=+b2(d);s=+h[173];t=s*(k-j);s=s*(i-g);h[m>>3]=g-s;h[m+8>>3]=j-t;h[n>>3]=s+i;h[n+8>>3]=t+k;iq(m,n);l=o;return}function _p(){var a=0,b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(bq(0)|0){cq();a=0;do{pq();a=a+1|0}while((bq(a)|0)!=0);if(!0)a=1;else{e=c[15686]|0;c[b>>2]=a;g1(e,91616,b)|0;a=1}}else a=0;l=d;return a|0}function $p(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i+8|0;g=i;b=bq(0)|0;if(!b)a=0;else{cq();dq(0);Yt(0,1);a=0;e=0;d=0;while(1){fq();d=d+1|0;f=bq(d)|0;if(!f)break;b=(f|0)<(b|0)?0:e+1|0;c[46076]=1;if(b){gq();a=a+1|0}dq(1);Yt(0,1);e=b;b=f}if(0){f=c[15686]|0;c[g>>2]=d;g1(f,91616,g)|0;c[h>>2]=a;g1(f,91643,h)|0}hq();a=1}l=i;return a|0}function aq(){var a=0,b=0,d=0,e=0;d=c[46084]|0;a=c[46099]|0;b=0;while(1){if((b|0)>=(d|0))break;e=c[(c[(c[a>>2]|0)+16>>2]|0)+132>>2]|0;h[e>>3]=+h[a+8>>3];h[e+8>>3]=+h[a+16>>3];a=a+96|0;b=b+1|0}return}function bq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+48|0;o=q+24|0;n=q+8|0;p=q;d=c[46099]|0;e=c[46084]|0;b=0;while(1){if((b|0)>=(e|0)){f=0;b=0;break}c[d+(b*96|0)+32>>2]=0;b=b+1|0}a:while(1){if((b|0)>=(e+-1|0))break;m=d+96|0;b=b+1|0;j=d+8|0;k=d+40|0;i=d+32|0;g=m;h=b;while(1){if((h|0)>=(e|0)){d=m;continue a}e=g+8|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];if(!(yt(n,k,o,g+40|0)|0))d=f;else{c[i>>2]=1;c[g+32>>2]=1;d=f+1|0}g=g+96|0;h=h+1|0;f=d;e=c[46084]|0}}if(0>1){o=c[15686]|0;c[p>>2]=a;c[p+4>>2]=f;g1(o,91669,p)|0}l=q;return f|0}function cq(){var a=0,b=0,d=0,e=0.0,f=0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0;nq();k=c[46078]|0;l=c[46099]|0;a=c[46075]|0;a:while(1){i=a;if(a>>>0>=k>>>0)break;b=a+4|0;if(b>>>0>=k>>>0){a=b;continue}f=c[b>>2]|0;d=c[a>>2]|0;g=+h[d>>3];if(+h[f>>3]!=g){a=b;continue}e=+h[d+8>>3];if(+h[f+8>>3]!=e){a=b;continue}j=a+8|0;f=2;while(1){if(j>>>0>=k>>>0)break;d=c[j>>2]|0;if(!(+h[d>>3]==g)){m=11;break}if(!(+h[d+8>>3]==e)){m=11;break}j=j+4|0;f=f+1|0}if((m|0)==11){m=0;d=c[j>>2]|0;if(+h[d+8>>3]==e){e=(+h[d>>3]-g)/+(f|0);d=(((j>>>0>b>>>0?j:b)+-1+(0-i)|0)>>>2)+1|0;a=1;while(1){if((a|0)==(d|0)){a=j;continue a}i=c[b>>2]|0;h[i>>3]=+h[i>>3]+e*+(a|0);a=a+1|0;b=b+4|0}}}while(1){if(b>>>0>=j>>>0){a=j;continue a}f=c[a>>2]|0;n=c[f+16>>2]|0;i=c[b>>2]|0;d=c[i+16>>2]|0;h[i>>3]=(+h[l+(n*96|0)+56>>3]-+h[l+(n*96|0)+40>>3]+ +h[l+(d*96|0)+56>>3]-+h[l+(d*96|0)+40>>3])*.5+ +h[f>>3];b=b+4|0;a=a+4|0}}return}function dq(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0;if(a|0)nq();i=c[46075]|0;j=c[i>>2]|0;d=+h[j>>3];h[22887]=d;k=c[46084]|0;f=1;g=+h[j>>3];while(1){if((f|0)>=(k|0))break;a=c[i+(f<<2)>>2]|0;b=+h[a>>3];if(b<d){h[22887]=b;e=+h[a>>3]}else{e=b;b=d}f=f+1|0;d=b;g=e>g?e:g}e=+h[j+8>>3];h[22888]=e;h[22890]=+h[(c[i+(k+-1<<2)>>2]|0)+8>>3]-e;h[22889]=g-d;return}function eq(){var a=0;a=c[46077]|0;if(a>>>0<(c[46078]|0)>>>0){c[46077]=a+4;a=c[a>>2]|0}else a=0;return a|0}function fq(){var a=0,b=0,d=0;a=c[46099]|0;jq();d=(c[46076]|0)==0;b=0;while(1){if((b|0)>=(c[46084]|0))break;if(!(d?!(c[a+32>>2]|0):0))kq(a);a=a+96|0;b=b+1|0}return}function gq(){var a=0,b=0,c=0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0;a=l;l=l+32|0;c=a+16|0;b=a;j=+h[22883];i=+h[22881];g=+h[22884];e=+h[22882];d=(i-e)*.05;f=(j-g)*.05;h[b>>3]=f+j;h[b+8>>3]=i+d;h[c>>3]=g-f;h[c+8>>3]=e-d;iq(c,b);l=a;return}function hq(){Hr();Jr();Kt();nr();return}function iq(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0;f=+h[a>>3];h[22884]=f;e=+h[b>>3];h[22883]=e;c=+h[a+8>>3];h[22882]=c;d=+h[b+8>>3];h[22881]=d;h[22873]=f;h[22875]=f;h[22877]=e;h[22879]=e;h[22880]=d;h[22876]=d;h[22878]=c;h[22874]=c;return}function jq(){var a=0,b=0.0,d=0.0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;m=c[46099]|0;g=m+8|0;f=+vr(g,182984);e=+vr(g,183e3);d=+vr(g,183016);a=1;b=+vr(g,183032);g=m;i=m;j=m;k=m;while(1){l=m+96|0;if((a|0)>=(c[46084]|0))break;q=m+104|0;r=+vr(q,182984);n=r<f;t=+vr(q,183016);p=t<d;s=+vr(q,183e3);o=s<e;u=+vr(q,183032);q=u<b;a=a+1|0;b=q?u:b;d=p?t:d;e=o?s:e;f=n?r:f;g=q?l:g;i=p?l:i;j=o?l:j;k=n?l:k;m=l}Xr(k+8|0,+h[22873],+h[22874]);Xr(i+8|0,+h[22877],+h[22878]);Xr(j+8|0,+h[22875],+h[22876]);Xr(g+8|0,+h[22879],+h[22880]);return}function kq(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0;p=l;l=l+64|0;j=p+48|0;i=p+32|0;g=p+16|0;m=p+8|0;n=p;k=c[a+88>>2]|0;o=k+8|0;b=0.0;d=0.0;e=0.0;k=c[k>>2]|0;while(1){f=c[k>>2]|0;if(!f)break;s=k+8|0;r=f+8|0;c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];q=+lq(g,i,j);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];c[j>>2]=c[r>>2];c[j+4>>2]=c[r+4>>2];c[j+8>>2]=c[r+8>>2];c[j+12>>2]=c[r+12>>2];mq(g,i,j,m,n);b=+h[n>>3]*q+b;d=+h[m>>3]*q+d;e=q+e;k=f}h[a+8>>3]=d/e;h[a+16>>3]=b/e;l=p;return}function lq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;d=+h[b+8>>3];f=+h[c+8>>3];e=+h[a+8>>3];return +(+B(+((f-e)*+h[b>>3]+(d-f)*+h[a>>3]+ +h[c>>3]*(e-d)))*.5)}function mq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;h[d>>3]=(+h[b>>3]+ +h[a>>3]+ +h[c>>3])*.3333333333333333;h[e>>3]=(+h[b+8>>3]+ +h[a+8>>3]+ +h[c+8>>3])*.3333333333333333;return}function nq(){var a=0,b=0,d=0,e=0;a=c[46075]|0;if(!a){a=vH(c[46084]<<2)|0;c[46075]=a;c[46078]=a+(c[46084]<<2)}d=c[46099]|0;Wr();e=c[46084]|0;b=0;while(1){if((b|0)>=(e|0))break;c[a>>2]=d+8;c[d+88>>2]=0;c[d+28>>2]=1;d=d+96|0;a=a+4|0;b=b+1|0}_0(c[46075]|0,e,4,68);c[46077]=c[46075];return}function oq(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;a=c[a>>2]|0;b=c[b>>2]|0;d=+h[a+8>>3];e=+h[b+8>>3];if(!(d<e))if(!(d>e)){e=+h[a>>3];d=+h[b>>3];if(e<d)a=-1;else a=e>d&1}else a=1;else a=-1;return a|0}function pq(){var a=0,b=0,d=0,e=0;d=c[46084]|0;a=0;b=c[46099]|0;while(1){if((a|0)>=(d|0))break;e=b+8|0;h[e>>3]=+h[e>>3]*1.05;e=b+16|0;h[e>>3]=+h[e>>3]*1.05;a=a+1|0;b=b+96|0}return}function qq(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+48|0;k=m;j=m+24|0;f=xx(e,91700)|0;if(!((f|0)!=0?(rq(f,j,1.0,0.0)|0)!=0:0))i=3;do if((i|0)==3){e=xx(e,91704)|0;if(e|0?rq(e,j,.800000011920929,4.0)|0:0)break;g[j+4>>2]=4.0;g[j>>2]=4.0;a[j+8>>0]=1}while(0);if(0){i=c[15686]|0;o=+g[j>>2];n=+g[j+4>>2];c[k>>2]=d[j+8>>0];h[k+8>>3]=o;h[k+16>>3]=n;g1(i,91709,k)|0};c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];l=m;return}function rq(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;o=l;l=l+16|0;m=o;j=o+12|0;k=o+8|0;while(1){h=a[b>>0]|0;i=b+1|0;if(!(B$(h<<24>>24)|0))break;else b=i}p=h<<24>>24==43;h=d+8|0;a[h>>0]=p&1;c[m>>2]=j;c[m+4>>2]=k;switch(N1(p?i:b,91742,m)|0){case 0:{b=0;break}case 1:{c[k>>2]=c[j>>2];n=5;break}default:n=5}if((n|0)==5){do if(a[h>>0]|0){if(e>1.0){q=+g[j>>2]/e;g[d>>2]=q>f?f:q;e=+g[k>>2]/e;e=e>f?f:e;break}if(e<1.0){q=+g[j>>2]/e;g[d>>2]=q<f?f:q;e=+g[k>>2]/e;e=e<f?f:e;break}else{c[d>>2]=c[j>>2];e=+g[k>>2];break}}else{g[d>>2]=+g[j>>2]/e+1.0;e=+g[k>>2]/e+1.0}while(0);g[d+4>>2]=e;b=1}l=o;return b|0}function sq(a,b){a=a|0;b=b|0;var c=0,d=0;d=l;l=l+32|0;c=d;if((ay(a)|0)<2)a=0;else{Tp(a,b,c)|0;a=Vp(a,c)|0}l=d;return a|0}function tq(a){a=a|0;return sq(a,xx(a,91095)|0)|0}function uq(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+48|0;k=m;j=m+24|0;f=xx(e,91704)|0;if(!((f|0)!=0?(rq(f,j,1.0,0.0)|0)!=0:0))i=3;do if((i|0)==3){e=xx(e,91700)|0;if(e|0?rq(e,j,1.25,3.200000047683716)|0:0)break;g[j+4>>2]=3.200000047683716;g[j>>2]=3.200000047683716;a[j+8>>0]=1}while(0);if(0){i=c[15686]|0;o=+g[j>>2];n=+g[j+4>>2];c[k>>2]=d[j+8>>0];h[k+8>>3]=o;h[k+16>>3]=n;g1(i,91771,k)|0};c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];l=m;return}function vq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;o=p;h=0;while(1){if((h|0)>=(d|0))break;c[e+(h<<2)>>2]=-1;h=h+1|0}c[e+(a<<2)>>2]=0;wq(f,a);a:do if(!(c[b+8>>2]|0)){h=2147483647;b:while(1){if(!((xq(f,o)|0)<<24>>24))break a;j=c[o>>2]|0;h=c[e+(j<<2)>>2]|0;i=b+(j*20|0)|0;j=b+(j*20|0)+4|0;k=h+1|0;a=1;while(1){if((a|0)>=(c[i>>2]|0))continue b;m=c[(c[j>>2]|0)+(a<<2)>>2]|0;n=e+(m<<2)|0;if((c[n>>2]|0)<0){c[n>>2]=k;yq(f,m)|0}a=a+1|0}}}else{h=2147483647;c:while(1){if(!((xq(f,o)|0)<<24>>24))break a;k=c[o>>2]|0;h=c[e+(k<<2)>>2]|0;i=b+(k*20|0)|0;j=b+(k*20|0)+4|0;k=b+(k*20|0)+8|0;a=1;while(1){if((a|0)>=(c[i>>2]|0))continue c;m=c[(c[j>>2]|0)+(a<<2)>>2]|0;n=e+(m<<2)|0;if((c[n>>2]|0)<0){c[n>>2]=h+~~+g[(c[k>>2]|0)+(a<<2)>>2];yq(f,m)|0}a=a+1|0}}}while(0);a=h+10|0;h=0;while(1){if((h|0)>=(d|0))break;i=e+(h<<2)|0;if((c[i>>2]|0)<0)c[i>>2]=a;h=h+1|0}l=p;return}function wq(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a+12>>2]=0;c[a+8>>2]=1;return}function xq(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+12|0;e=c[d>>2]|0;if((e|0)<(c[a+8>>2]|0)){a=c[a>>2]|0;c[d>>2]=e+1;c[b>>2]=c[a+(e<<2)>>2];a=1}else a=0;return a|0}function yq(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;e=c[d>>2]|0;if((e|0)<(c[a+4>>2]|0)){a=c[a>>2]|0;c[d>>2]=e+1;c[a+(e<<2)>>2]=b;a=1}else a=0;return a|0}function zq(a,b){a=a|0;b=b|0;c[a>>2]=vH(b<<2)|0;c[a+4>>2]=b;c[a+8>>2]=0;c[a+12>>2]=0;return}function Aq(a){a=a|0;D_(c[a>>2]|0);return}function Bq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0;if(!0)g=0;else{E1(91804,25,1,c[15686]|0)|0;g=0}while(1){if((g|0)>=(a|0))break;i=b+(g<<2)|0;f=0;e=0.0;while(1){if((f|0)==(a|0))break;if((g|0)!=(f|0))e=+h[(c[i>>2]|0)+(f<<3)>>3]+e;f=f+1|0}h[(c[i>>2]|0)+(g<<3)>>3]=-e;g=g+1|0}return xs(b,d,a+-1|0)|0}function Cq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0.0;j=wn(b,b,0.0)|0;k=wn(b,b,0.0)|0;e=Sy(a)|0;while(1){if(!e)break;d=Jx(a,e)|0;while(1){if(!d)break;g=c[d>>2]&3;f=(c[c[((g|0)==3?d:d+48|0)+40>>2]>>2]|0)>>>4;g=(c[c[((g|0)==2?d:d+-48|0)+40>>2]>>2]|0)>>>4;if((f|0)!=(g|0)){l=-1.0/+h[(c[d+16>>2]|0)+136>>3];h[(c[j+(g<<2)>>2]|0)+(f<<3)>>3]=l;h[(c[j+(f<<2)>>2]|0)+(g<<3)>>3]=l}d=Kx(a,d,e)|0}e=Ty(a,e)|0}i=Bq(b,j,k)|0;a:do if(i|0){f=a+16|0;e=0;while(1){if((e|0)>=(b|0))break a;g=k+(e<<2)|0;d=0;while(1){if((d|0)==(b|0))break;a=c[g>>2]|0;h[(c[(c[(c[f>>2]|0)+160>>2]|0)+(e<<2)>>2]|0)+(d<<3)>>3]=+h[(c[k+(d<<2)>>2]|0)+(d<<3)>>3]+ +h[a+(e<<3)>>3]+ +h[a+(d<<3)>>3]*-2.0;d=d+1|0}e=e+1|0}}while(0);xn(j);xn(k);return i|0}function Dq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;j=s;n=d<<3;o=vH(n)|0;p=vH(n)|0;q=vH(n)|0;k=vH(n)|0;m=vH(n)|0;n=vH(n)|0;Ps(d,c,n);Is(d,n);Is(d,b);Ks(a,d,b,k);Ms(d,n,k,o);Ps(d,o,p);i=f+-1|0;c=0;g=+Qs(d,o,o);while(1){if((c|0)>=(f|0)){c=0;break}if(!(+Rs(d,o)>e)){c=0;break}Ks(a,d,p,q);h=+Qs(d,p,q);if(h==0.0){c=0;break}h=g/h;Os(d,p,h,m);Ns(d,b,m,b);if((c|0)<(i|0)){Os(d,q,h,q);Ms(d,o,q,o);h=+Qs(d,o,o);if(g==0.0){r=7;break}Os(d,p,h/g,p);Ns(d,o,p,p);g=h}c=c+1|0}if((r|0)==7){Pw(1,91830,j)|0;c=1}D_(o);D_(p);D_(q);D_(k);D_(m);D_(n);l=s;return c|0}function Eq(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;j=s;o=d<<3;p=vH(o)|0;q=vH(o)|0;k=vH(o)|0;m=vH(o)|0;n=vH(o)|0;o=vH(o)|0;Ps(d,c,o);if(g<<24>>24){Is(d,o);Is(d,b)}Ls(a,d,b,m);Ms(d,o,m,p);Ps(d,p,q);g=f+-1|0;c=0;h=+Qs(d,p,p);while(1){if((c|0)>=(f|0)){c=0;break}if(!(+Rs(d,p)>e)){c=0;break}Ls(a,d,q,k);i=+Qs(d,q,k);if(i==0.0){c=0;break}i=h/i;Os(d,q,i,n);Ns(d,b,n,b);if((c|0)<(g|0)){Os(d,k,i,k);Ms(d,p,k,p);i=+Qs(d,p,p);if(h==0.0){r=9;break}Os(d,q,i/h,q);Ns(d,p,q,q);h=i}c=c+1|0}if((r|0)==9){Pw(1,91830,j)|0;c=1}D_(p);D_(q);D_(k);D_(m);D_(n);D_(o);l=s;return c|0}function Fq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;j=q;k=d<<2;m=uH(k)|0;n=uH(k)|0;o=uH(k)|0;k=uH(k)|0;Ts(d,b);Ts(d,c);Us(a,d,b,k);Ts(d,k);Vs(d,c,k,m);Zs(d,m,n);i=f+-1|0;c=0;g=+_s(d,m,m);while(1){if((c|0)>=(f|0)){c=0;break}if(!(+bt(d,m)>e)){c=0;break}Ts(d,n);Ts(d,b);Ts(d,m);Us(a,d,n,o);Ts(d,o);h=+_s(d,n,o);if(h==0.0){c=0;break}h=g/h;Xs(d,b,h,n);if((c|0)<(i|0)){Xs(d,m,-h,o);h=+_s(d,m,m);if(g==0.0){p=7;break}Ys(d,n,h/g,n);Ws(d,m,n,n);g=h}c=c+1|0}if((p|0)==7){Pw(1,91830,j)|0;c=1}D_(m);D_(n);D_(o);D_(k);l=q;return c|0}function Gq(a,b,d,e,f,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;var o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0;M=l;l=l+48|0;F=M+24|0;E=M+16|0;D=M+8|0;C=M;J=M+40|0;K=M+36|0;H=M+32|0;s=j&4;c[J>>2]=0;c[K>>2]=0;a:do if(c[a+16>>2]|0){p=0;o=0;while(1){if((p|0)>=(b|0))break;t=c[a+(p*20|0)>>2]|0;u=a+(p*20|0)+16|0;r=1;while(1){if((r|0)>=(t|0))break;if(!(o<<24>>24))o=+g[(c[u>>2]|0)+(r<<2)>>2]!=0.0;else o=1;r=r+1|0;o=o&1}p=p+1|0}if(o<<24>>24){z=(s|0)!=0;if(z){r=e+4|0;b:do if((i|0)>2){o=i+-1|0;if((qn(a,b,d,r,f,o,j,k,15)|0)<0){o=-1;break a}p=e+(o<<2)|0;o=0;while(1){if((o|0)>=(b|0))break b;h[(c[p>>2]|0)+(o<<3)>>3]=+h[(c[r>>2]|0)+(o<<3)>>3];o=o+1|0}}while(0);y=c[e>>2]|0;w=c[r>>2]|0;if((kt(a,b,w,b)|0)==0?(kv(a,b,.01,.1,w,J,K,H)|0)==0:0){x=c[H>>2]|0;if((x|0)<1){o=qn(a,b,d,e,f,i,j,k,m)|0;break}c:do if(n>0.0){s=c[J>>2]|0;t=c[K>>2]|0;u=x+-1|0;q=0.0;r=0;while(1){if((r|0)>=(x|0))break c;o=c[t+(r<<2)>>2]|0;A=n-q-+h[w+(c[s+(o<<2)>>2]<<3)>>3]+ +h[w+(c[s+(o+-1<<2)>>2]<<3)>>3];q=(A<0.0?0.0:A)+q;if((r|0)<(u|0))p=c[t+(r+1<<2)>>2]|0;else p=b;while(1){if((o|0)>=(p|0))break;I=w+(c[s+(o<<2)>>2]<<3)|0;h[I>>3]=+h[I>>3]+q;o=o+1|0}r=r+1|0}}while(0);if((i|0)==2?(Qt(a,b,w,y,+h[22909])|0)!=0:0){p=0;o=-1}else L=33}else{p=0;o=-1}}else{kn(a,b,i,e,f)|0;if(!(kv(a,b,.01,.1,0,J,K,H)|0))L=33;else{p=0;o=-1}}d:do if((L|0)==33){if((b|0)==1){o=0;break a}I=vH(c[H>>2]<<2)|0;if(!m){o=0;break a}if(0)EL();switch(k|0){case 2:{if(0)E1(91878,24,1,c[15686]|0)|0;o=pn(a,b)|0;L=46;break}case 1:{o=ln(a,b)|0;if(!o){Pw(0,91903,C)|0;Pw(3,91952,D)|0;L=47}else G=o;break}case 3:{if(0)E1(92005,21,1,c[15686]|0)|0;o=mn(a,b)|0;L=46;break}default:L=47}if((L|0)==46)if(!o)L=47;else G=o;if((L|0)==47){if(0)E1(92027,26,1,c[15686]|0)|0;G=on(a,b)|0}if(0){a=c[15686]|0;h[E>>3]=+FL();g1(a,92054,E)|0;E1(92066,25,1,a)|0;EL()}a=b+-1|0;y=(O(a,b)|0)/2|0;E=y+b|0;e:do if(!z){q=1.0;p=0;while(1){if((p|0)>=(i|0))break;r=e+(p<<2)|0;o=0;while(1){if((o|0)>=(b|0))break;A=+B(+(+h[(c[r>>2]|0)+(o<<3)>>3]));q=A>q?A:q;o=o+1|0}p=p+1|0}q=1.0/q;p=0;while(1){if((p|0)>=(i|0))break e;r=e+(p<<2)|0;o=0;while(1){if((o|0)>=(b|0))break;D=(c[r>>2]|0)+(o<<3)|0;h[D>>3]=+h[D>>3]*(10.0*q);o=o+1|0}p=p+1|0}}while(0);f:do if(n>0.0){v=+(y|0);o=0;q=0.0;s=0;g:while(1){if((s|0)>=(a|0))break;t=s+1|0;r=o;p=t;while(1){o=r+1|0;if((p|0)>=(b|0)){s=t;continue g}A=+gs(e,i,s,p);r=o;q=A/+g[G+(o<<2)>>2]+q;p=p+1|0}}q=q/v;o=0;while(1){if((o|0)>=(E|0)){o=0;break f}D=G+(o<<2)|0;g[D>>2]=+g[D>>2]*q;o=o+1|0}}else o=0;while(0);while(1){if((o|0)>=(i|0))break;Is(b,c[e+(o<<2)>>2]|0);o=o+1|0}p=c[e+4>>2]|0;q=+h[p>>3];o=0;while(1){if((o|0)>=(b|0))break;D=p+(o<<3)|0;h[D>>3]=+h[D>>3]-q;o=o+1|0}u=i<<2;D=vH(u)|0;x=b<<2;w=O(x,i)|0;r=vH(w)|0;o=0;while(1){if((o|0)>=(i|0))break;s=r+((O(o,b)|0)<<2)|0;c[D+(o<<2)>>2]=s;t=e+(o<<2)|0;p=0;while(1){if((p|0)>=(b|0))break;g[s+(p<<2)>>2]=+h[(c[t>>2]|0)+(p<<3)>>3];p=p+1|0}o=o+1|0}v=+(y|0);if(0){C=c[15686]|0;h[F>>3]=+FL();g1(C,92092,F)|0}ct(E,G);dt(E,G);C=vH(b<<3)|0;$s(b,0.0,C);o=0;r=0;while(1){if((r|0)>=(a|0)){o=b;p=0;r=0;break}s=b-r|0;q=0.0;p=1;while(1){o=o+1|0;if((p|0)>=(s|0))break;A=+g[G+(o<<2)>>2];F=C+(p+r<<3)|0;h[F>>3]=+h[F>>3]-A;q=q+A;p=p+1|0}F=C+(r<<3)|0;h[F>>3]=+h[F>>3]-q;r=r+1|0}while(1){if((p|0)>=(b|0))break;g[G+(r<<2)>>2]=+h[C+(p<<3)>>3];F=o+r|0;o=o+-1|0;p=p+1|0;r=F}k=vH(u)|0;c[k>>2]=vH(w)|0;o=1;while(1){if((o|0)>=(i|0))break;c[k+(o<<2)>>2]=(c[k>>2]|0)+((O(o,b)|0)<<2);o=o+1|0}z=vH(x)|0;f=vH(x)|0;j=vH(E<<2)|0;p=Et(G,b)|0;d=Jt(G,b,c[J>>2]|0,c[K>>2]|0,c[H>>2]|0)|0;y=k+4|0;r=0;A=1797693134862315708145274.0e284;o=0;while(1){if(!(r<<24>>24==0&(o|0)<(m|0)))break;$s(b,0.0,C);et(E,G,j);w=0;t=0;while(1){if((w|0)>=(a|0)){r=0;s=b;t=0;break}x=b-w+-1|0;at(b,0.0,f);r=0;while(1){if((r|0)>=(i|0))break;H=D+(r<<2)|0;at(x,+g[(c[H>>2]|0)+(w<<2)>>2],z);Xs(x,z,-1.0,(c[H>>2]|0)+(w<<2)+4|0);ct(x,z);Ws(x,z,f,f);r=r+1|0}ft(x,f);r=0;while(1){if((r|0)>=(x|0))break;s=f+(r<<2)|0;q=+g[s>>2];if(q>=3402823466385288598117041.0e14|q<0.0)g[s>>2]=0.0;r=r+1|0}u=w+1|0;q=0.0;r=t;s=0;while(1){r=r+1|0;if((s|0)>=(x|0))break;H=j+(r<<2)|0;N=+g[H>>2]*+g[f+(s<<2)>>2];g[H>>2]=N;H=C+(u+s<<3)|0;h[H>>3]=+h[H>>3]-N;q=q+N;s=s+1|0}t=C+(w<<3)|0;h[t>>3]=+h[t>>3]-q;w=u;t=r}while(1){if((r|0)>=(b|0)){r=0;break}g[j+(t<<2)>>2]=+h[C+(r<<3)>>3];H=s+t|0;r=r+1|0;s=s+-1|0;t=H}while(1){if((r|0)>=(i|0)){q=0.0;r=0;break}Us(j,b,c[D+(r<<2)>>2]|0,c[k+(r<<2)>>2]|0);r=r+1|0}while(1){if((r|0)>=(i|0))break;q=+_s(b,c[D+(r<<2)>>2]|0,c[k+(r<<2)>>2]|0)+q;r=r+1|0}q=q*2.0+v;r=0;while(1){if((r|0)>=(i|0))break;H=D+(r<<2)|0;Us(G,b,c[H>>2]|0,z);q=q-+_s(b,c[H>>2]|0,z);r=r+1|0}N=+B(+(q-A))/+B(+(A+1.0e-10));r=((o|0)>1&q>A|N<+h[22909])&1;s=0;while(1){if((s|0)>=(i|0))break;if((s|0)!=1){if(Fq(G,c[D+(s<<2)>>2]|0,c[k+(s<<2)>>2]|0,b,.001,b)|0){o=-1;break d}}else Ft(d,c[y>>2]|0,D,i,1,15,I,n)|0;s=s+1|0}A=q;o=o+1|0}D_(I);It(d);if(D|0){r=0;while(1){if((r|0)>=(i|0))break;t=D+(r<<2)|0;u=e+(r<<2)|0;s=0;while(1){if((s|0)>=(b|0))break;h[(c[u>>2]|0)+(s<<3)>>3]=+g[(c[t>>2]|0)+(s<<2)>>2];s=s+1|0}r=r+1|0}D_(c[D>>2]|0);D_(D)}if(k|0){D_(c[k>>2]|0);D_(k)}D_(z);D_(f);D_(C);D_(G);D_(j)}while(0);D_(c[J>>2]|0);D_(c[K>>2]|0);if(p){D_(c[p>>2]|0);D_(p)}}else L=10}else L=10;while(0);if((L|0)==10)o=qn(a,b,d,e,f,i,j,k,m)|0;l=M;return o|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+48|0;f=m+24|0;g=m+12|0;d=m;i=ay(a)|0;k=vH(i*48|0)|0;qq(d,a);c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];d=Sy(a)|0;e=k;while(1){if(!d)break;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];Iq(d,e,f);d=Ty(a,d)|0;e=e+48|0}a:do if(!(Jq(k,i)|0))d=0;else{switch(b|0){case 9:{Lq(a,k,i,69,1);Nq(a,k,i,70,1);d=0;e=k;break}case 10:{Nq(a,k,i,70,1);Lq(a,k,i,69,1);d=0;e=k;break}case 7:{Lq(a,k,i,71,1);Nq(a,k,i,70,1);j=9;break}case 8:{j=9;break}case 13:{j=10;break}case 14:{Nq(a,k,i,70,0);Lq(a,k,i,69,0);d=0;e=k;break}case 12:{Nq(a,k,i,72,0);Lq(a,k,i,69,0);d=0;e=k;break}default:{Lq(a,k,i,71,0);Nq(a,k,i,70,0);d=0;e=k}}if((j|0)==9){Nq(a,k,i,72,1);Lq(a,k,i,69,1);j=10}if((j|0)==10){Lq(a,k,i,69,0);Nq(a,k,i,70,0);d=0;e=k}while(1){if((d|0)>=(i|0)){d=1;break a}g=c[e+16>>2]|0;j=c[(c[(c[e+20>>2]|0)+16>>2]|0)+132>>2]|0;h[j>>3]=+(c[e+12>>2]|0)*1.3888888888888887e-03;h[j+8>>3]=+(g|0)*1.3888888888888887e-03;d=d+1|0;e=e+48|0}}while(0);D_(k);l=m;return d|0}function Iq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,l=0.0,m=0.0;f=c[b+16>>2]|0;k=c[f+132>>2]|0;l=+h[k>>3]*720.0;j=~~(l+(l>=0.0?.5:-.5));l=+h[k+8>>3]*720.0;k=~~(l+(l>=0.0?.5:-.5));if(!(a[e+8>>0]|0)){m=+h[f+32>>3]*72.0*(+g[e>>2]*5.0);l=+h[f+40>>3]*72.0*(+g[e+4>>2]*5.0);i=~~(m+(m>=0.0?.5:-.5));f=~~(l+(l>=0.0?.5:-.5))}else{l=+h[f+32>>3]*36.0;m=+h[f+40>>3]*36.0;i=~~((+g[e>>2]+ +(~~(l+(l>=0.0?.5:-.5))|0))*10.0);f=~~((+g[e+4>>2]+ +(~~(m+(m>=0.0?.5:-.5))|0))*10.0)}c[d+12>>2]=j;c[d+16>>2]=k;c[d+20>>2]=b;c[d+32>>2]=j-i;c[d+36>>2]=k-f;c[d+40>>2]=i+j;c[d+44>>2]=f+k;return}function Jq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=b+-1|0;d=0;a:while(1){if((d|0)>=(k|0)){a=0;break}j=a+48|0;d=d+1|0;g=a+32|0;h=a+40|0;i=a+36|0;f=a+44|0;a=j;e=d;while(1){if((e|0)>=(b|0)){a=j;continue a}if((((c[g>>2]|0)<=(c[a+40>>2]|0)?(c[a+32>>2]|0)<=(c[h>>2]|0):0)?(c[i>>2]|0)<=(c[a+44>>2]|0):0)?(c[a+36>>2]|0)<=(c[f>>2]|0):0){a=1;break a}a=a+48|0;e=e+1|0}}return a|0}function Kq(a,b){a=a|0;b=b|0;if((c[a+36>>2]|0)>(c[b+44>>2]|0))a=0;else a=(c[b+36>>2]|0)<=(c[a+44>>2]|0)&1;return a|0}function Lq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=Cw(18064,c[4558]|0)|0;g=b;h=0;while(1){if((h|0)>=(d|0))break;c[g+8>>2]=c[g+12>>2];nb[c[i>>2]&63](i,g,1)|0;g=g+48|0;h=h+1|0}if(!f)h=Tq(a,i,e,73)|0;else h=Sq(i,e,73)|0;fI(h,2,2147483647)|0;g=0;while(1){if((g|0)>=(d|0))break;f=b+12|0;a=c[(c[(c[b+24>>2]|0)+16>>2]|0)+232>>2]|0;e=a-(c[f>>2]|0)|0;c[f>>2]=a;f=b+32|0;c[f>>2]=(c[f>>2]|0)+e;f=b+40|0;c[f>>2]=(c[f>>2]|0)+e;b=b+48|0;g=g+1|0}Uq(h);yw(i)|0;return}function Mq(a,b){a=a|0;b=b|0;if((c[a+32>>2]|0)>(c[b+40>>2]|0))a=0;else a=(c[b+32>>2]|0)<=(c[a+40>>2]|0)&1;return a|0}function Nq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=Cw(18064,c[4558]|0)|0;g=b;h=0;while(1){if((h|0)>=(d|0))break;c[g+8>>2]=c[g+16>>2];nb[c[i>>2]&63](i,g,1)|0;g=g+48|0;h=h+1|0}if(!f)h=Tq(a,i,e,74)|0;else h=Sq(i,e,74)|0;fI(h,2,2147483647)|0;g=0;while(1){if((g|0)>=(d|0))break;f=b+16|0;a=c[(c[(c[b+24>>2]|0)+16>>2]|0)+232>>2]|0;e=a-(c[f>>2]|0)|0;c[f>>2]=a;f=b+36|0;c[f>>2]=(c[f>>2]|0)+e;f=b+44|0;c[f>>2]=(c[f>>2]|0)+e;b=b+48|0;g=g+1|0}Uq(h);yw(i)|0;return}function Oq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+32|0;e=b+32|0;if((c[a+36>>2]|0)<=(c[b+44>>2]|0)?(c[b+36>>2]|0)<=(c[a+44>>2]|0):0)if((c[a+40>>2]|0)<(c[e>>2]|0))a=1;else{g=Rq(d,e)|0;g=g-(c[b+12>>2]|0)+(c[a+12>>2]|0)|0;b=c[b+16>>2]|0;a=c[a+16>>2]|0;f=(b|0)<(a|0);e=Qq(d,e)|0;a=(g|0)<=(e-(f?a:b)+(f?b:a)|0)&1}else a=0;return a|0}function Pq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a+32|0;e=b+32|0;if((c[d>>2]|0)<=(c[b+40>>2]|0)?(c[e>>2]|0)<=(c[a+40>>2]|0):0)if((c[a+44>>2]|0)<(c[b+36>>2]|0))a=1;else{g=Qq(d,e)|0;g=g-(c[b+16>>2]|0)+(c[a+16>>2]|0)|0;b=c[b+12>>2]|0;a=c[a+12>>2]|0;f=(b|0)<(a|0);e=Rq(d,e)|0;a=(g|0)<=(e-(f?a:b)+(f?b:a)|0)&1}else a=0;return a|0}function Qq(a,b){a=a|0;b=b|0;return ((c[a+12>>2]|0)-(c[a+4>>2]|0)+(c[b+12>>2]|0)-(c[b+4>>2]|0)|0)/2|0|0}function Rq(a,b){a=a|0;b=b|0;return ((c[a+8>>2]|0)-(c[a>>2]|0)+(c[b+8>>2]|0)-(c[b>>2]|0)|0)/2|0|0}function Sq(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;v=x;a[v>>0]=a[18484]|0;a[v+1>>0]=a[18485]|0;a[v+2>>0]=a[18486]|0;a[v+3>>0]=a[18487]|0;w=Xx(92103,v,0)|0;Az(w,134401,280,1)|0;g=Aw(d)|0;h=-2147483647;u=0;while(1){if(!g)break;s=c[g+8>>2]|0;t=u+((h|0)!=(s|0)&1)|0;g=c[g>>2]|0;h=s;u=t}s=w+16|0;t=(u<<3)+-4|0;n=0;j=0;g=0;h=0;m=0;r=Aw(d)|0;i=-2147483647;while(1){if(!r)break;q=c[r+8>>2]|0;if((i|0)!=(q|0)){p=az(w,ry(c[r+20>>2]|0)|0,1)|0;Az(p,134365,304,1)|0;o=p+16|0;g=c[o>>2]|0;c[g+112>>2]=r;if(!h){c[(c[s>>2]|0)+192>>2]=p;n=p}else{c[(c[n+16>>2]|0)+164>>2]=p;n=h}c[g+176>>2]=0;k=j+1|0;i=uH(k<<2)|0;c[(c[o>>2]|0)+172>>2]=i;if(!m){j=k;k=p;m=p;g=p;h=n;i=q}else{i=m+16|0;c[(c[i>>2]|0)+184>>2]=0;j=uH((m|0)==(n|0)?t:u-j<<2)|0;c[(c[i>>2]|0)+180>>2]=j;j=Rx(w,m,p,0,1)|0;Az(j,134378,176,1)|0;g=c[j+16>>2]|0;b[g+170>>1]=10;c[g+156>>2]=1;g=c[i>>2]|0;h=c[g+180>>2]|0;if(!h)g=vH((c[g+184>>2]<<2)+8|0)|0;else g=xH(h,(c[g+184>>2]<<2)+8|0)|0;m=c[i>>2]|0;c[m+180>>2]=g;m=m+184|0;h=c[m>>2]|0;c[m>>2]=h+1;c[g+(h<<2)>>2]=j;g=c[i>>2]|0;c[(c[g+180>>2]|0)+(c[g+184>>2]<<2)>>2]=0;g=c[o>>2]|0;h=c[g+172>>2]|0;if(!h)g=vH((c[g+176>>2]<<2)+8|0)|0;else g=xH(h,(c[g+176>>2]<<2)+8|0)|0;h=c[o>>2]|0;c[h+172>>2]=g;h=h+176|0;m=c[h>>2]|0;c[h>>2]=m+1;c[g+(m<<2)>>2]=j;j=c[o>>2]|0;c[(c[j+172>>2]|0)+(c[j+176>>2]<<2)>>2]=0;j=k;k=p;m=p;g=p;h=n;i=q}}else{k=g;g=n}c[r+24>>2]=k;n=g;g=k;r=c[r>>2]|0}m=m+16|0;c[(c[m>>2]|0)+184>>2]=0;g=uH(4)|0;c[(c[m>>2]|0)+180>>2]=g;a[v>>0]=a[18484]|0;a[v+1>>0]=a[18485]|0;a[v+2>>0]=a[18486]|0;a[v+3>>0]=a[18487]|0;m=Xx(92150,v,0)|0;g=Aw(d)|0;while(1){if(!g)break;v=az(m,ry(c[g+20>>2]|0)|0,1)|0;Az(v,134365,304,1)|0;c[g+28>>2]=v;c[(c[v+16>>2]|0)+112>>2]=g;g=c[g>>2]|0}g=0;k=Aw(d)|0;h=-2147483647;a:while(1){if(!k)break;j=c[k+8>>2]|0;b:do if((h|0)==(j|0))j=h;else{g=k;while(1){g=c[g>>2]|0;if(!g)break a;if((c[g+8>>2]|0)!=(j|0))break b}}while(0);i=k+28|0;h=g;while(1){if(!h)break;if(lb[e&127](k,h)|0)Rx(m,c[i>>2]|0,c[h+28>>2]|0,0,1)|0;h=c[h>>2]|0}k=c[k>>2]|0;h=j}Vq(m,w,f);$x(m)|0;l=x;return w|0}function Tq(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=l;l=l+16|0;r=s;a[r>>0]=a[18484]|0;a[r+1>>0]=a[18485]|0;a[r+2>>0]=a[18486]|0;a[r+3>>0]=a[18487]|0;r=Xx(92103,r,0)|0;Az(r,134401,280,1)|0;k=r+16|0;h=Aw(e)|0;i=0;while(1){if(!h)break;j=az(r,ry(c[h+20>>2]|0)|0,1)|0;Az(j,134365,304,1)|0;p=j+16|0;n=c[p>>2]|0;c[n+112>>2]=h;c[h+24>>2]=j;c[n+176>>2]=0;n=uH(4)|0;o=c[p>>2]|0;c[o+172>>2]=n;c[o+184>>2]=0;o=uH(4)|0;c[(c[p>>2]|0)+180>>2]=o;if(!i)c[(c[k>>2]|0)+192>>2]=j;else c[(c[i+16>>2]|0)+164>>2]=j;h=c[h>>2]|0;i=j}m=Aw(e)|0;a:while(1){if(!m)break;n=m+32|0;o=m+24|0;p=m+20|0;h=m;while(1){h=c[h>>2]|0;if(!h)break;if(lb[f&127](m,h)|0){i=lb[g&127](n,h+32|0)|0;j=Rx(r,c[o>>2]|0,c[h+24>>2]|0,0,1)|0;Az(j,134378,176,1)|0;if((i|0)>=65536){q=13;break a}k=j+16|0;t=c[k>>2]|0;b[t+170>>1]=i;c[t+156>>2]=1;if(j|0?Rx(d,c[p>>2]|0,c[h+20>>2]|0,0,0)|0:0)c[(c[k>>2]|0)+156>>2]=100}}m=c[m>>2]|0}if((q|0)==13)qa(92106,92122,254,92135);m=Aw(e)|0;while(1){if(!m)break;k=c[m+24>>2]|0;n=k+16|0;k=Ex(r,k)|0;while(1){if(!k)break;h=c[n>>2]|0;i=c[h+180>>2]|0;if(!i)h=vH((c[h+184>>2]<<2)+8|0)|0;else h=xH(i,(c[h+184>>2]<<2)+8|0)|0;i=c[n>>2]|0;c[i+180>>2]=h;i=i+184|0;j=c[i>>2]|0;c[i>>2]=j+1;c[h+(j<<2)>>2]=k;j=c[n>>2]|0;c[(c[j+180>>2]|0)+(c[j+184>>2]<<2)>>2]=0;j=k+-48|0;h=c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0;i=c[h+172>>2]|0;if(!i)h=vH((c[h+176>>2]<<2)+8|0)|0;else h=xH(i,(c[h+176>>2]<<2)+8|0)|0;c[(c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0)+172>>2]=h;g=c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0;q=c[g+172>>2]|0;g=g+176|0;t=c[g>>2]|0;c[g>>2]=t+1;c[q+(t<<2)>>2]=k;t=c[(c[((c[k>>2]&3|0)==2?k:j)+40>>2]|0)+16>>2]|0;c[(c[t+172>>2]|0)+(c[t+176>>2]<<2)>>2]=0;k=Gx(r,k)|0}m=c[m>>2]|0}l=s;return r|0}function Uq(a){a=a|0;var b=0,d=0,e=0,f=0;f=Sy(a)|0;while(1){if(!f)break;d=f+16|0;b=c[d>>2]|0;e=c[b+172>>2]|0;if(e){D_(e);b=c[d>>2]|0}b=c[b+180>>2]|0;if(b|0)D_(b);f=Ty(a,f)|0}$x(a)|0;return}function Vq(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=Sy(a)|0;while(1){if(!k)break;n=c[(c[k+16>>2]|0)+112>>2]|0;m=c[n+24>>2]|0;n=n+32|0;o=m+16|0;l=Ex(a,k)|0;while(1){if(!l)break;h=c[(c[(c[((c[l>>2]&3|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;p=lb[e&127](n,h+32|0)|0;h=c[h+24>>2]|0;i=Rx(d,m,h,0,1)|0;Az(i,134378,176,1)|0;j=i+16|0;f=c[j>>2]|0;c[f+156>>2]=1;g=b[f+170>>1]|0;if((p|0)>(g&65535|0)){if(!(g<<16>>16)){f=c[o>>2]|0;g=c[f+180>>2]|0;if(!g)f=vH((c[f+184>>2]<<2)+8|0)|0;else f=xH(g,(c[f+184>>2]<<2)+8|0)|0;q=c[o>>2]|0;c[q+180>>2]=f;q=q+184|0;g=c[q>>2]|0;c[q>>2]=g+1;c[f+(g<<2)>>2]=i;f=c[o>>2]|0;c[(c[f+180>>2]|0)+(c[f+184>>2]<<2)>>2]=0;h=h+16|0;f=c[h>>2]|0;g=c[f+172>>2]|0;if(!g)f=vH((c[f+176>>2]<<2)+8|0)|0;else f=xH(g,(c[f+176>>2]<<2)+8|0)|0;g=c[h>>2]|0;c[g+172>>2]=f;g=g+176|0;q=c[g>>2]|0;c[g>>2]=q+1;c[f+(q<<2)>>2]=i;f=c[h>>2]|0;c[(c[f+172>>2]|0)+(c[f+176>>2]<<2)>>2]=0;f=c[j>>2]|0}b[f+170>>1]=p}l=Gx(a,l)|0}k=Ty(a,k)|0}return}function Wq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return (c[b>>2]|0)-(c[d>>2]|0)|0}function Xq(b,d){b=b|0;d=d|0;var e=0,f=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0;y=l;l=l+64|0;u=y+24|0;s=y+16|0;r=y+52|0;q=y+40|0;t=y;w=ay(b)|0;x=vH(w*72|0)|0;qq(q,b);k=+g[q>>2];m=+g[q+4>>2];q=(a[q+8>>0]|0)!=0;k=q?k*.013888888888888888:k;m=q?m*.013888888888888888:m;n=k*.5;o=m*.5;e=x;f=Sy(b)|0;while(1){if(!f)break;p=c[f+16>>2]|0;i=+h[p+32>>3];if(q){j=+h[p+40>>3]*.5+m;i=i*.5+k}else{j=o*+h[p+40>>3];i=n*i}p=c[p+132>>2]|0;A=+h[p>>3];h[e>>3]=A;z=+h[p+8>>3];h[e+8>>3]=z;h[e+16>>3]=A-i;h[e+24>>3]=z-j;h[e+32>>3]=A+i;h[e+40>>3]=z+j;h[e+48>>3]=i;h[e+56>>3]=j;c[e+64>>2]=f;e=e+72|0;f=Ty(b,f)|0}do if((d|0)<0){i=+Yq(x,w);if(i==0.0){D_(x);e=0;break}if(!0){k=i;j=i;v=19}else{v=c[15686]|0;h[s>>3]=i;g1(v,92153,s)|0;k=i;j=i;v=19}}else{f=Zq(x,w,r)|0;e=c[r>>2]|0;if(!e){D_(f);D_(x);e=0;break}if(!d){$q(t,f,e);i=+h[t>>3];j=+h[t+8>>3]}else{j=+_q(f,e);i=j}D_(f);if(!0){k=i;v=19}else{v=c[15686]|0;h[u>>3]=i;h[u+8>>3]=j;g1(v,92167,u)|0;k=i;v=19}}while(0);if((v|0)==19){e=0;f=x;while(1){if((e|0)>=(w|0))break;v=c[(c[(c[f+64>>2]|0)+16>>2]|0)+132>>2]|0;h[v>>3]=+h[f>>3]*k;h[v+8>>3]=+h[f+8>>3]*j;e=e+1|0;f=f+72|0}D_(x);e=1}l=y;return e|0}function Yq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;c=0.0;d=0;a:while(1){if((d|0)>=(b|0))break;r=a+72|0;d=d+1|0;m=a+16|0;n=a+8|0;o=a+56|0;p=a+48|0;q=a+32|0;k=a+24|0;l=a+40|0;i=d;j=r;while(1){if((i|0)>=(b|0)){a=r;continue a}if(((+h[m>>3]<=+h[j+32>>3]?+h[j+16>>3]<=+h[q>>3]:0)?+h[k>>3]<=+h[j+40>>3]:0)?+h[j+24>>3]<=+h[l>>3]:0){c=0.0;break a}e=+h[a>>3];f=+h[j>>3];if(e==f)g=t;else{g=+B(+(e-f));g=(+h[j+48>>3]+ +h[p>>3])/g}e=+h[n>>3];f=+h[j+8>>3];if(e==f)e=t;else{e=+B(+(e-f));e=(+h[j+56>>3]+ +h[o>>3])/e}g=e<g?e:g;i=i+1|0;j=j+72|0;c=g>c?g:c}}return +c}function Zq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;k=vH((b<<4)+16|0)|0;m=0;e=0;n=k;o=b;i=k;a:while(1){if((e|0)>=(b|0))break;z=a+72|0;e=e+1|0;y=a+16|0;r=a+32|0;s=a+24|0;u=a+40|0;v=a+8|0;w=a+56|0;x=a+48|0;p=e;q=z;l=i;while(1){if((p|0)==(b|0)){a=z;i=l;continue a}if(((+h[y>>3]<=+h[q+32>>3]?+h[q+16>>3]<=+h[r>>3]:0)?+h[s>>3]<=+h[q+40>>3]:0)?+h[q+24>>3]<=+h[u>>3]:0){i=o+b|0;if((m|0)==(o|0)){k=xH(k,(i<<4)+16|0)|0;n=k;l=k}else i=o;f=+h[a>>3];g=+h[q>>3];if(!(f==g)){f=(+h[q+48>>3]+ +h[x>>3])/+B(+(f-g));if(f<1.0){f=1.0;A=13}}else{f=t;A=13}if((A|0)==13)A=0;g=+h[v>>3];j=+h[q+8>>3];if(!(g==j)){g=(+h[q+56>>3]+ +h[w>>3])/+B(+(g-j));if(g<1.0){g=1.0;A=16}}else{g=t;A=16}if((A|0)==16)A=0;m=m+1|0;h[n+(m<<4)>>3]=f;h[n+(m<<4)+8>>3]=g}else i=o;p=p+1|0;q=q+72|0;o=i}}A=xH(i,(m<<4)+16|0)|0;c[d>>2]=m;return A|0}function _q(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0,f=0.0,g=0.0;d=1;e=0.0;while(1){c=a+16|0;if((d|0)>(b|0))break;g=+h[c>>3];f=+h[a+24>>3];f=g<f?g:f;d=d+1|0;e=f>e?f:e;a=c}return +e}function $q(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0,f=0,g=0,i=0.0;h[b>>3]=1.0;h[b+8>>3]=t;_0(b+16|0,c,16,75);g=vH((c<<4)+16|0)|0;h[g+(c<<4)>>3]=+h[b+(c<<4)>>3];f=c;d=1.0;while(1){h[g+(f<<4)+8>>3]=d;e=f+-1|0;if((f|0)<=0){d=t;e=0;f=0;break}h[g+(e<<4)>>3]=+h[b+(e<<4)>>3];i=+h[(+h[b+(f<<4)+8>>3]>d?b:g)+(f<<4)+8>>3];f=e;d=i}while(1){if((f|0)>(c|0))break;i=+h[g+(f<<4)+8>>3]*+h[g+(f<<4)>>3];b=i<d;d=b?i:d;e=b?f:e;f=f+1|0}if(d<t){i=+h[g+(e<<4)+8>>3];h[a>>3]=+h[g+(e<<4)>>3];h[a+8>>3]=i;return}else qa(92184,92122,832,92204)}function ar(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3];d=+h[b>>3];if(!(c<d))if(!(c>d)){d=+h[a+8>>3];c=+h[b+8>>3];if(d<c)a=-1;else a=d>c&1}else a=1;else a=-1;return a|0}function br(a){a=a|0;var b=0;if(a|0){b=c[a+4>>2]|0;if(b|0)D_(b);b=c[a+8>>2]|0;if(b|0)D_(b);b=c[a+16>>2]|0;if(b|0)D_(b);D_(a)}return}function cr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;m=o;k=F_(c[46079]|0,d<<2)|0;c[46079]=k;f=0;while(1){if((f|0)>=(d|0))break;c[e+(f<<2)>>2]=2147483647;f=f+1|0}c[e+(a<<2)>>2]=0;h=b+(a*20|0)|0;i=b+(a*20|0)+8|0;j=b+(a*20|0)+4|0;f=1;while(1){if((f|0)>=(c[h>>2]|0))break;c[e+(c[(c[j>>2]|0)+(f<<2)>>2]<<2)>>2]=~~+g[(c[i>>2]|0)+(f<<2)>>2];f=f+1|0}dr(n,a,k,e,d);i=-2147483639;while(1){if(!((er(n,m,c[46079]|0,e)|0)<<24>>24)){f=0;break}f=c[m>>2]|0;a=c[e+(f<<2)>>2]|0;if((a|0)==2147483647){f=0;break}i=b+(f*20|0)|0;j=b+(f*20|0)+4|0;h=b+(f*20|0)+8|0;f=1;while(1){if((f|0)>=(c[i>>2]|0))break;fr(n,c[(c[j>>2]|0)+(f<<2)>>2]|0,a+~~+g[(c[h>>2]|0)+(f<<2)>>2]|0,c[46079]|0,e);f=f+1|0}i=a+10|0}while(1){if((f|0)>=(d|0))break;h=e+(f<<2)|0;if((c[h>>2]|0)==2147483647)c[h>>2]=i;f=f+1|0}gr(n);l=o;return}function dr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;if((f|0)==1)i=0;else i=vH((f<<2)+-4|0)|0;c[a>>2]=i;j=f+-1|0;c[a+4>>2]=j;g=0;h=0;while(1){if((h|0)>=(f|0))break;if((h|0)!=(b|0)){c[i+(g<<2)>>2]=h;c[d+(h<<2)>>2]=g;g=g+1|0}h=h+1|0}g=(j|0)/2|0;while(1){if((g|0)<=-1)break;hr(a,g,d,e);g=g+-1|0}return}function er(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+4|0;if(!(c[f>>2]|0))a=0;else{g=c[a>>2]|0;c[b>>2]=c[g>>2];b=c[g+((c[f>>2]|0)+-1<<2)>>2]|0;c[g>>2]=b;c[d+(b<<2)>>2]=0;c[f>>2]=(c[f>>2]|0)+-1;hr(a,0,d,e);a=1}return a|0}function fr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=f+(b<<2)|0;if((c[g>>2]|0)>(d|0)){j=e+(b<<2)|0;i=c[j>>2]|0;c[g>>2]=d;g=c[a>>2]|0;a=i;while(1){if((a|0)<=0)break;h=a>>>1;i=c[g+(h<<2)>>2]|0;if((c[f+(i<<2)>>2]|0)<=(d|0))break;c[g+(a<<2)>>2]=i;c[e+(i<<2)>>2]=a;a=h}c[g+(a<<2)>>2]=b;c[j>>2]=a}return}function gr(a){a=a|0;a=c[a>>2]|0;if(a|0)D_(a);return}function hr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=a+4|0;while(1){f=b<<1;g=f|1;h=c[i>>2]|0;if(!((f|0)<(h|0)?(j=c[a>>2]|0,(c[e+(c[j+(f<<2)>>2]<<2)>>2]|0)<(c[e+(c[j+(b<<2)>>2]<<2)>>2]|0)):0))f=b;if((g|0)<(h|0)){j=c[a>>2]|0;f=(c[e+(c[j+(g<<2)>>2]<<2)>>2]|0)<(c[e+(c[j+(f<<2)>>2]<<2)>>2]|0)?g:f}if((f|0)==(b|0))break;j=c[a>>2]|0;h=j+(f<<2)|0;g=c[h>>2]|0;j=j+(b<<2)|0;c[h>>2]=c[j>>2];c[j>>2]=g;c[d+(c[h>>2]<<2)>>2]=f;c[d+(c[j>>2]<<2)>>2]=b;b=f}return}function ir(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0.0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p+8|0;n=p;c[n>>2]=0;o=vH(d<<2)|0;f=0;while(1){if((f|0)>=(d|0))break;g[e+(f<<2)>>2]=3402823466385288598117041.0e14;f=f+1|0}g[e+(a<<2)>>2]=0.0;h=c[b+(a*20|0)>>2]|0;i=b+(a*20|0)+8|0;j=b+(a*20|0)+4|0;f=1;while(1){if((f|0)>=(h|0))break;c[e+(c[(c[j>>2]|0)+(f<<2)>>2]<<2)>>2]=c[(c[i>>2]|0)+(f<<2)>>2];f=f+1|0}jr(m,a,o,e,d);a:while(1){if(!((kr(m,n,o,e)|0)<<24>>24))break;f=c[n>>2]|0;k=+g[e+(f<<2)>>2];if(k==3402823466385288598117041.0e14)break;i=b+(f*20|0)|0;j=b+(f*20|0)+4|0;h=b+(f*20|0)+8|0;f=1;while(1){if((f|0)>=(c[i>>2]|0))continue a;lr(m,c[(c[j>>2]|0)+(f<<2)>>2]|0,+g[(c[h>>2]|0)+(f<<2)>>2]+k,o,e);f=f+1|0}}gr(m);D_(o);l=p;return}function jr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=f+-1|0;j=vH(i<<2)|0;c[a>>2]=j;c[a+4>>2]=i;g=0;h=0;while(1){if((h|0)>=(f|0))break;if((h|0)!=(b|0)){c[j+(g<<2)>>2]=h;c[d+(h<<2)>>2]=g;g=g+1|0}h=h+1|0}g=(i|0)/2|0;while(1){if((g|0)<=-1)break;mr(a,g,d,e);g=g+-1|0}return}function kr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+4|0;if(!(c[f>>2]|0))a=0;else{g=c[a>>2]|0;c[b>>2]=c[g>>2];b=c[g+((c[f>>2]|0)+-1<<2)>>2]|0;c[g>>2]=b;c[d+(b<<2)>>2]=0;c[f>>2]=(c[f>>2]|0)+-1;mr(a,0,d,e);a=1}return a|0}function lr(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0;h=f+(b<<2)|0;if(!(+g[h>>2]<=d)){k=e+(b<<2)|0;j=c[k>>2]|0;g[h>>2]=d;h=c[a>>2]|0;a=j;while(1){if((a|0)<=0)break;i=a>>>1;j=c[h+(i<<2)>>2]|0;if(!(+g[f+(j<<2)>>2]>d))break;c[h+(a<<2)>>2]=j;c[e+(j<<2)>>2]=a;a=i}c[h+(a<<2)>>2]=b;c[k>>2]=a}return}function mr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0;j=a+4|0;while(1){f=b<<1;h=f|1;i=c[j>>2]|0;if(!((f|0)<(i|0)?(k=c[a>>2]|0,+g[e+(c[k+(f<<2)>>2]<<2)>>2]<+g[e+(c[k+(b<<2)>>2]<<2)>>2]):0))f=b;if((h|0)<(i|0)?(k=c[a>>2]|0,+g[e+(c[k+(h<<2)>>2]<<2)>>2]<+g[e+(c[k+(f<<2)>>2]<<2)>>2]):0)f=h;if((f|0)==(b|0))break;k=c[a>>2]|0;i=k+(f<<2)|0;h=c[i>>2]|0;k=k+(b<<2)|0;c[i>>2]=c[k>>2];c[k>>2]=h;c[d+(c[i>>2]<<2)>>2]=f;c[d+(c[k>>2]<<2)>>2]=b;b=f}return}function nr(){gt(184320,48);c[46083]=0;return}function or(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0;i=it(184320)|0;c[i+32>>2]=a;c[i+36>>2]=b;Pt(a);Pt(b);c[i+24>>2]=0;c[i+28>>2]=0;f=+h[a>>3];g=+h[b>>3]-f;e=+h[a+8>>3];d=+h[b+8>>3]-e;f=d*e+g*f+(d*d+g*g)*.5;b=i+16|0;h[b>>3]=f;if((g>0.0?g:-g)>(d>0.0?d:-d)){h[i>>3]=1.0;e=d/g;d=g;a=i+8|0}else{h[i+8>>3]=1.0;e=g/d;a=i}h[a>>3]=e;h[b>>3]=f/d;b=c[46083]|0;c[i+40>>2]=b;c[46083]=b+1;return i|0}function pr(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0;l=+h[a>>3];a:do if(l==1.0){if(!(+h[a+8>>3]>=0.0)){b=c[a+28>>2]|0;d=c[a+24>>2]|0;if(!d)m=9;else m=5}else{b=c[a+24>>2]|0;d=c[a+28>>2]|0;if(!d)m=9;else m=5}do if((m|0)==5){e=+h[d+8>>3];if(e>+h[22881])break a;f=+h[22882];if(!(e>=f)){i=f;e=+h[a+16>>3]-+h[a+8>>3]*f;break}else{i=e;e=+h[d>>3];break}}else if((m|0)==9){f=+h[22882];i=f;e=+h[a+16>>3]-+h[a+8>>3]*f}while(0);do if(b){g=+h[b+8>>3];if(g<f)break a;f=+h[22881];if(!(g<=f)){g=f;f=+h[a+16>>3]-+h[a+8>>3]*f;break}else{f=+h[b>>3];break}}else{f=+h[22881];g=f;f=+h[a+16>>3]-+h[a+8>>3]*f}while(0);j=+h[22883];b=e>j;d=f>j;k=+h[22884];if(!(b&d|e<k&f<k)){if(b){i=(+h[a+16>>3]-j)/+h[a+8>>3];e=j}if(e<k){i=(+h[a+16>>3]-k)/+h[a+8>>3];e=k}if(d){g=(+h[a+16>>3]-j)/+h[a+8>>3];f=j}if(f<k){g=(+h[a+16>>3]-k)/+h[a+8>>3];f=k;m=46}else m=46}}else{d=c[a+28>>2]|0;b=c[a+24>>2]|0;do if(b){e=+h[b>>3];if(e>+h[22883])break a;g=+h[22884];if(!(e>=g)){i=+h[a+16>>3]-g*l;e=g;break}else{i=+h[b+8>>3];break}}else{g=+h[22884];i=+h[a+16>>3]-g*l;e=g}while(0);do if(d){f=+h[d>>3];if(f<g)break a;j=+h[22883];if(!(f<=j)){g=+h[a+16>>3]-l*j;f=j;break}else{g=+h[d+8>>3];break}}else{f=+h[22883];g=+h[a+16>>3]-l*f}while(0);j=+h[22881];b=i>j;d=g>j;k=+h[22882];if(!(b&d|i<k&g<k)){if(b){i=j;e=(+h[a+16>>3]-j)/l}if(i<k){i=k;e=(+h[a+16>>3]-k)/l}if(d){g=j;f=(+h[a+16>>3]-j)/l}if(g<k){g=k;f=(+h[a+16>>3]-k)/l;m=46}else m=46}}while(0);if((m|0)==46)qr(a,e,i,f,g);return}function qr(a,b,d,e,f){a=a|0;b=+b;d=+d;e=+e;f=+f;var g=0;g=a+32|0;Xr(c[g>>2]|0,b,d);Xr(c[g>>2]|0,e,f);a=a+36|0;Xr(c[a>>2]|0,b,d);Xr(c[a>>2]|0,e,f);return}function rr(a,b,d){a=a|0;b=b|0;d=d|0;c[a+24+(b<<2)>>2]=d;Pt(d);if(c[a+24+(1-b<<2)>>2]|0){pr(a);Ot(c[a+32>>2]|0);Ot(c[a+36>>2]|0);jt(a,184320)}return}function sr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+16|0;o=p;m=b<<2;h=vH(O(m,d)|0)|0;g=c[e>>2]|0;m=vH(m)|0;n=c[a+8>>2]|0;if(g|0){D_(c[g>>2]|0);D_(g)}k=vH(d<<2)|0;c[e>>2]=k;g=0;while(1){if((g|0)>=(d|0))break;c[k+(g<<2)>>2]=h+((O(g,b)|0)<<2);g=g+1|0}j=(f|0)!=0;if(j)es(a,b);e=(g2()|0)%(b|0)|0;zq(o,b);g=c[k>>2]|0;if(j){cr(e,a,b,g);f=0;g=0}else{vq(e,a,b,g,o);f=0;g=0}while(1){if((g|0)>=(b|0)){i=1;break}h=c[(c[k>>2]|0)+(g<<2)>>2]|0;c[m+(g<<2)>>2]=h;i=(h|0)>(f|0);f=i?h:f;e=i?g:e;g=g+1|0}while(1){if((i|0)>=(d|0))break;h=k+(i<<2)|0;g=c[h>>2]|0;if(j){cr(e,a,b,g);g=0;f=0}else{vq(e,a,b,g,o);g=0;f=0}while(1){if((g|0)>=(b|0))break;s=m+(g<<2)|0;q=c[s>>2]|0;r=c[(c[h>>2]|0)+(g<<2)>>2]|0;r=(q|0)<(r|0)?q:r;c[s>>2]=r;s=(r|0)>(f|0);q=s?g:e;g=g+1|0;f=s?r:f;e=q}i=i+1|0}D_(m);if(j)fs(a,b,n);l=p;return}function tr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0.0,j=0,k=0;i=1.0/+(b|0);h=0;while(1){if((h|0)>=(d|0))break;j=a+(h<<2)|0;e=0.0;f=0;while(1){if((f|0)>=(b|0))break;e=e+ +(c[(c[j>>2]|0)+(f<<2)>>2]|0);f=f+1|0}g=~~(e*i);f=0;while(1){if((f|0)>=(b|0))break;k=(c[j>>2]|0)+(f<<2)|0;c[k>>2]=(c[k>>2]|0)-g;f=f+1|0}h=h+1|0}return}function ur(){c[46085]=~~+C(+(+((c[46084]|0)+4|0)));return}function vr(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(d*d+c*c)}function wr(a,b,c){a=a|0;b=b|0;c=c|0;h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=+h[b+8>>3]-+h[c+8>>3];return}function xr(a,b,c){a=a|0;b=b|0;c=c|0;h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=+h[c+8>>3]+ +h[b+8>>3];return}function yr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];return +((+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d))}function zr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+48|0;f=e+32|0;g=e+16|0;h=e;c[h>>2]=c[a>>2];c[h+4>>2]=c[a+4>>2];c[h+8>>2]=c[a+8>>2];c[h+12>>2]=c[a+12>>2];c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];d=+yr(h,g,f)>0.0&1;l=e;return d|0}function Ar(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;o=+h[a>>3];p=+h[d+8>>3];q=+h[c+8>>3];m=(p-q)*o;n=+h[b>>3];l=+h[d>>3];k=+h[b+8>>3];i=+h[a+8>>3];j=k-i;f=+h[c>>3];g=m+n*(q-p)+j*l+f*(i-k);if(g==0.0)d=0;else{p=(f*(i-p)+m+(q-i)*l)/g;q=-(f*j+((q-k)*o+(i-q)*n))/g;h[e>>3]=p*(n-o)+o;h[e+8>>3]=j*p+i;d=q<=1.0&(q>=0.0&(p>=0.0&p<=1.0))&1}return d|0}function Br(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0.0,i=0;c[a+20>>2]=b;Pt(b);i=a+24|0;h[i>>3]=+h[b+8>>3]+d;e=c[46086]|0;e=e+((Cr(a)|0)*40|0)|0;while(1){f=e+32|0;e=c[f>>2]|0;if(!e)break;d=+h[i>>3];g=+h[e+24>>3];if(d>g)continue;if(!(d==g))break;if(!(+h[b>>3]>+h[c[e+20>>2]>>3]))break}c[a+32>>2]=e;c[f>>2]=a;c[46087]=(c[46087]|0)+1;return}function Cr(a){a=a|0;var b=0.0,d=0,e=0.0;d=c[46088]|0;e=+(d|0);b=(+h[a+24>>3]-+h[22888])/+h[22890]*e;do if(!(b<0.0))if(!(b>=e)){a=~~b;break}else{a=d+-1|0;break}else a=0;while(0);if((a|0)<(c[46089]|0))c[46089]=a;return a|0}function Dr(a){a=a|0;var b=0,d=0,e=0;d=a+20|0;if(c[d>>2]|0){b=c[46086]|0;b=b+((Cr(a)|0)*40|0)|0;do{e=b+32|0;b=c[e>>2]|0}while((b|0)!=(a|0));c[e>>2]=c[a+32>>2];c[46087]=(c[46087]|0)+-1;Ot(c[d>>2]|0);c[d>>2]=0}return}function Er(){return (c[46087]|0)==0|0}function Fr(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=c[46086]|0;d=c[46089]|0;while(1){e=c[b+(d*40|0)+32>>2]|0;if(e|0)break;e=d+1|0;c[46089]=e;d=e}f=+h[e+24>>3];h[a>>3]=+h[c[e+20>>2]>>3];h[a+8>>3]=f;return}function Gr(){var a=0,b=0;b=(c[46086]|0)+((c[46089]|0)*40|0)+32|0;a=c[b>>2]|0;c[b>>2]=c[a+32>>2];c[46087]=(c[46087]|0)+-1;return a|0}function Hr(){D_(c[46086]|0);c[46086]=0;return}function Ir(){var a=0,b=0,d=0;c[46087]=0;c[46089]=0;a=c[46085]|0;b=a<<2;c[46088]=b;d=c[46086]|0;if(!d){d=vH(a*160|0)|0;c[46086]=d;b=c[46088]|0}a=0;while(1){if((a|0)>=(b|0))break;c[d+(a*40|0)+32>>2]=0;a=a+1|0}return}function Jr(){gt(184368,40);D_(c[46095]|0);c[46095]=0;return}function Kr(){var a=0,b=0,d=0;gt(184368,40);a=c[46085]|0;b=a<<1;c[46096]=b;d=c[46095]|0;if(!d){d=vH(a<<3)|0;c[46095]=d;b=c[46096]|0}a=0;while(1){if((a|0)>=(b|0))break;c[d+(a<<2)>>2]=0;a=a+1|0}c[46090]=Lr(0,0)|0;c[46091]=Lr(0,0)|0;c[c[46090]>>2]=0;d=c[46091]|0;b=c[46090]|0;c[b+4>>2]=d;c[d>>2]=b;c[(c[46091]|0)+4>>2]=0;d=c[46095]|0;c[d>>2]=c[46090];c[d+((c[46096]|0)+-1<<2)>>2]=c[46091];return}function Lr(b,d){b=b|0;d=d|0;var e=0;e=it(184368)|0;c[e+8>>2]=b;a[e+16>>0]=d;c[e+32>>2]=0;c[e+20>>2]=0;c[e+12>>2]=0;return e|0}function Mr(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0;i=c[b+8>>2]|0;k=c[d+8>>2]|0;do if((!((i|0)==0|(k|0)==0)?(o=c[i+36>>2]|0,e=c[k+36>>2]|0,(o|0)!=(e|0)):0)?(j=+h[i>>3],f=+h[k+8>>3],g=+h[i+8>>3],l=+h[k>>3],m=f*j-l*g,!(m>-1.0e-10&m<1.0e-10)):0){p=+h[i+16>>3];q=+h[k+16>>3];n=(p*f-q*g)/m;j=(q*j-p*l)/m;f=+h[o+8>>3];g=+h[e+8>>3];do if(f<g)e=o;else{if(f==g?+h[o>>3]<+h[e>>3]:0){e=o;break}b=d}while(0);b=a[b+16>>0]|0;if(!(n>=+h[e>>3])){if(b<<24>>24==1){b=0;break}}else if(!(b<<24>>24)){b=0;break}b=Lt()|0;c[b+20>>2]=0;h[b>>3]=n;h[b+8>>3]=j}else b=0;while(0);return b|0}function Nr(b,d){b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0.0,p=0;n=c[b+8>>2]|0;k=c[n+36>>2]|0;l=+h[d>>3];o=+h[k>>3];m=l>o;p=a[b+16>>0]|0;if(m)if(!(p<<24>>24))b=1;else f=4;else if(p<<24>>24==1)b=0;else f=4;if((f|0)==4){e=+h[n>>3];a:do if(e==1.0){e=+h[d+8>>3];g=e-+h[k+8>>3];i=l-o;j=+h[n+8>>3];d=j<0.0;do if(m?j>=0.0:d){if(g>=j*i){b=1;break a}}else{b=j*e+l>+h[n+16>>3];if(d)if(b){b=0;break a}else break;else if(b)break;else{b=0;break a}}while(0);o=o-+h[c[n+32>>2]>>3];b=j*(i*i-g*g)<o*g*(i*2.0/o+1.0+j*j);if(d)b=b^1}else{i=+h[n+16>>3]-l*e;j=+h[d+8>>3]-i;o=l-o;l=i-+h[k+8>>3];b=j*j>l*l+o*o}while(0);b=(b^p<<24>>24!=0)&1}return b|0}function Or(a,b){a=a|0;b=b|0;c[b>>2]=a;a=a+4|0;c[b+4>>2]=c[a>>2];c[c[a>>2]>>2]=b;c[a>>2]=b;return}function Pr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[46096]|0;b=~~((+h[a>>3]-+h[22887])/+h[22889]*+(f|0));b=(b|0)>0?b:0;f=(b|0)<(f|0)?b:f+-1|0;b=Qr(f)|0;if(!b){d=1;while(1){b=Qr(f-d|0)|0;if(b|0)break;b=Qr(d+f|0)|0;if(b|0)break;d=d+1|0}c[46097]=(c[46097]|0)+d}c[46098]=(c[46098]|0)+1;e=c[46090]|0;d=c[46091]|0;a:do if((b|0)==(e|0))g=9;else{if((b|0)!=(d|0)?(Nr(b,a)|0)!=0:0){g=9;break}while(1){b=c[b>>2]|0;if((b|0)==(e|0))break a;if(Nr(b,a)|0){e=b;break}}}while(0);if((g|0)==9){while(1){b=c[b+4>>2]|0;if((b|0)==(d|0))break;if(!(Nr(b,a)|0))break;else g=9}e=c[b>>2]|0}if((f|0)>0?(f|0)<((c[46096]|0)+-1|0):0){b=(c[46095]|0)+(f<<2)|0;d=c[b>>2]|0;if(d|0){g=d+12|0;c[g>>2]=(c[g>>2]|0)+-1}c[b>>2]=e;g=e+12|0;c[g>>2]=(c[g>>2]|0)+1}return e|0}function Qr(a){a=a|0;var b=0,d=0;if((a|0)>-1&(c[46096]|0)>(a|0)?(d=(c[46095]|0)+(a<<2)|0,b=c[d>>2]|0,(b|0)!=0):0){if((c[b+8>>2]|0)==(-2|0)){c[d>>2]=0;a=b+12|0;d=(c[a>>2]|0)+-1|0;c[a>>2]=d;if(!d){jt(b,184368);b=0}else b=0}}else b=0;return b|0}function Rr(a){a=a|0;var b=0,d=0;b=a+4|0;d=c[a>>2]|0;c[d+4>>2]=c[b>>2];c[c[b>>2]>>2]=d;c[a+8>>2]=-2;return}function Sr(a){a=a|0;return c[a+4>>2]|0}function Tr(a){a=a|0;return c[a>>2]|0}function Ur(b){b=b|0;var d=0;d=c[b+8>>2]|0;if(!d)b=184588;else b=(a[b+16>>0]|0)==0?d+32|0:d+36|0;return c[b>>2]|0}function Vr(b){b=b|0;var d=0;d=c[b+8>>2]|0;if(!d)b=184588;else b=(a[b+16>>0]|0)==0?d+36|0:d+32|0;return c[b>>2]|0}function Wr(){gt(184400,24);return}function Xr(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;i=j;g=(c[46099]|0)+((c[a+16>>2]|0)*96|0)+88|0;f=c[g>>2]|0;h[i+8>>3]=b;h[i+16>>3]=d;e=Yr(a,i,f)|0;do if(e|0){if((e|0)<0){i=it(184400)|0;h[i+8>>3]=b;h[i+16>>3]=d;c[i>>2]=f;c[g>>2]=i;break}while(1){e=c[f>>2]|0;g=Yr(a,i,e)|0;if((g|0)>0)f=e;else break}if(g|0){i=it(184400)|0;h[i+8>>3]=b;h[i+16>>3]=d;c[f>>2]=i;c[i>>2]=e}}while(0);l=j;return}function Yr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0;do if(c){e=+h[b+8>>3];i=+h[c+8>>3];d=+h[b+16>>3];f=+h[c+16>>3];if(!(e==i&d==f)){k=+h[a>>3];j=e-k;e=+h[a+8>>3];g=d-e;i=i-k;d=f-e;if(!(j>=0.0)){if(i>=0.0){b=1;break}e=d/i;d=g/j;if(d<e){b=-1;break}if(d>e){b=1;break}b=j>i?-1:1;break}if(!(i<0.0)){b=i>0.0;if(!(j>0.0)){if(b){b=!(g<=0.0)?1:-1;break}if(g<d){b=!(d<=0.0)?-1:1;break}else{b=!(g<=0.0)?1:-1;break}}else{if(!b){b=d>0.0?-1:1;break}e=d/i;d=g/j;if(d<e){b=-1;break}if(d>e){b=1;break}b=j<i?-1:1;break}}else b=-1}else b=0}else b=-1;while(0);return b|0}function Zr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[a+(d*20|0)>>2]|0;d=a+(d*20|0)+4|0;b=1;a=0;while(1){if((b|0)>=(f|0))break;g=a+((c[e+(c[(c[d>>2]|0)+(b<<2)>>2]<<2)>>2]|0)>0&1)|0;b=b+1|0;a=g}return a|0}function _r(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+(b*20|0)|0;b=a+(b*20|0)+4|0;a=1;while(1){if((a|0)>=(c[e>>2]|0))break;c[d+(c[(c[b>>2]|0)+(a<<2)>>2]<<2)>>2]=1;a=a+1|0}return}function $r(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+(b*20|0)|0;b=a+(b*20|0)+4|0;a=1;while(1){if((a|0)>=(c[e>>2]|0))break;c[d+(c[(c[b>>2]|0)+(a<<2)>>2]<<2)>>2]=0;a=a+1|0}return}function as(a,b){a=a|0;b=b|0;if(!(c[a+8>>2]|0))a=cs(a,b)|0;else a=bs(a,b)|0;return a|0}function bs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=b<<2;e=vH(O(f,b)|0)|0;f=vH(f)|0;d=0;while(1){if((d|0)>=(b|0)){d=0;break}c[f+(d<<2)>>2]=e+((O(d,b)|0)<<2);d=d+1|0}while(1){if((d|0)>=(b|0))break;cr(d,a,b,c[f+(d<<2)>>2]|0);d=d+1|0}return f|0}function cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;g=b<<2;e=vH(O(g,b)|0)|0;g=vH(g)|0;d=0;while(1){if((d|0)>=(b|0))break;c[g+(d<<2)>>2]=e+((O(d,b)|0)<<2);d=d+1|0}zq(f,b);d=0;while(1){if((d|0)>=(b|0))break;vq(d,a,b,c[g+(d<<2)>>2]|0,f);d=d+1|0}Aq(f);l=h;return g|0}function ds(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[a+8>>2]|0;es(a,b);d=bs(a,b)|0;fs(a,b,e);return d|0}function es(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=vH(b<<2)|0;d=0;e=0;while(1){if((d|0)>=(b|0))break;k=(c[a+(d*20|0)>>2]|0)+e|0;d=d+1|0;e=k}e=vH(e<<2)|0;d=0;while(1){if((d|0)>=(b|0))break;c[l+(d<<2)>>2]=0;d=d+1|0}f=0;while(1){if((f|0)>=(b|0))break;c[a+(f*20|0)+8>>2]=e;_r(a,f,l);h=a+(f*20|0)|0;i=c[h>>2]|0;j=a+(f*20|0)+4|0;k=i+-2|0;d=1;while(1){if((d|0)>=(i|0))break;m=c[(c[j>>2]|0)+(d<<2)>>2]|0;n=c[a+(m*20|0)>>2]|0;g[e+(d<<2)>>2]=+(k+n-((Zr(a,0,m,l)|0)<<1)|0);d=d+1|0}$r(a,f,l);e=e+(c[h>>2]<<2)|0;f=f+1|0}D_(l);return}function fs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+8|0;D_(c[e>>2]|0);c[e>>2]=0;a:do if(d|0){e=0;while(1){if((e|0)>=(b|0))break a;c[a+(e*20|0)+8>>2]=d;f=d+(c[a+(e*20|0)>>2]<<2)|0;e=e+1|0;d=f}}while(0);return}function gs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0;f=0;g=0.0;while(1){if((f|0)>=(b|0))break;j=c[a+(f<<2)>>2]|0;i=+h[j+(d<<3)>>3]-+h[j+(e<<3)>>3];f=f+1|0;g=i*i+g}return +(+C(+g))}function hs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((e|0)>(d|0)){c[46103]=a;_0(b+(d<<2)|0,1-d+e|0,4,76)}return}function is(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[46103]|0;e=+g[f+(c[a>>2]<<2)>>2];d=+g[f+(c[b>>2]<<2)>>2];return (e<d?-1:e>d&1)|0}function js(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;if((d|0)<(e|0)){ks(a,b,d,e,f);g=c[f>>2]|0;f=g+-1|0;js(a,b,d,f);g=g+1|0;js(a,b,g,e);if(!(ls(a,b,d,f)|0))js(a,b,d,f);if(!(ls(a,b,g,e)|0))js(a,b,g,e)}l=h;return}function ks(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0.0,m=0,n=0;g=g2()|0;g=b+(((((g2()|0)<<16|g)>>>0)%((1-d+e|0)>>>0)|0)+d<<2)|0;j=c[g>>2]|0;k=b+(d<<2)|0;c[g>>2]=c[k>>2];c[k>>2]=j;l=+h[a+(j<<3)>>3];g=d+1|0;d=e;a:while(1){if((g|0)>=(d|0))break;while(1){if((g|0)>=(d|0))break;if(!(+h[a+(c[b+(g<<2)>>2]<<3)>>3]<=l))break;g=g+1|0}while(1){if((g|0)>=(d|0))continue a;e=b+(d<<2)|0;i=c[e>>2]|0;if(!(+h[a+(i<<3)>>3]>l))break;d=d+-1|0}n=b+(g<<2)|0;m=c[n>>2]|0;c[n>>2]=i;c[e>>2]=m;g=g+1|0;d=d+-1|0}n=g+((+h[a+(c[b+(g<<2)>>2]<<3)>>3]>l)<<31>>31)|0;c[f>>2]=n;n=b+(n<<2)|0;c[k>>2]=c[n>>2];c[n>>2]=j;return}function ls(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=1;while(1){f=d+1|0;if(!((d|0)<(e|0)&(g|0)!=0))break;g=+h[a+(c[b+(d<<2)>>2]<<3)>>3]>+h[a+(c[b+(f<<2)>>2]<<3)>>3]?0:g;d=f}return g|0}function ms(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,A=0.0;x=l;l=l+16|0;v=4;w=C_(40)|0;c[w>>2]=0;t=x;o=0;u=$(23,b*40|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){d=0;r=0;while(1){if((d|0)>=(b|0))break;s=(c[(c[a+(d<<2)>>2]|0)+4>>2]|0)+r|0;d=d+1|0;r=s}o=0;s=$(23,r*24|0)|0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)!=1){d=0;m=0;while(1){if((m|0)>=(b|0))break;n=u+(m*40|0)|0;c[n>>2]=s+(d*24|0);q=a+(m<<2)|0;f=0;g=1797693134862315708145274.0e284;i=-1797693134862315708145274.0e284;j=-1797693134862315708145274.0e284;k=1797693134862315708145274.0e284;while(1){e=c[q>>2]|0;if((f|0)>=(c[e+4>>2]|0))break;e=c[e>>2]|0;A=+h[e+(f<<4)>>3];y=+h[e+(f<<4)+8>>3];h[s+(d*24|0)>>3]=A;h[s+(d*24|0)+8>>3]=y;c[s+(d*24|0)+16>>2]=n;c[s+(d*24|0)+20>>2]=0;f=f+1|0;d=d+1|0;g=g<A?g:A;i=i>A?i:A;j=j>y?j:y;k=k<y?k:y}c[u+(m*40|0)+4>>2]=s+((d+-1|0)*24|0);h[u+(m*40|0)+8>>3]=g;h[u+(m*40|0)+16>>3]=k;h[u+(m*40|0)+24>>3]=i;h[u+(m*40|0)+32>>3]=j;m=m+1|0}c[t>>2]=r;c[t+4>>2]=b;w=D3(184416,1,w|0,v|0)|0;v=z;o=0;d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){d=z;q=s;m=s;n=u}else{d=0;q=s;m=s;n=u}}else{d=z;q=0;m=s;n=u}}else{d=z;q=0;m=0;n=0}while(1){if(d|0){o=0;ia(103,u|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}o=0;ia(103,m|0);d=o;o=0;if((d|0)!=0&(p|0)!=0){e=E3(c[d>>2]|0,w|0,v|0)|0;if(!e)bb(d|0,p|0);z=p}else e=-1;if((e|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}else{e=17;break}}o=0;d=aa(77,q|0,t|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}if(!d){o=0;d=ca(24,a|0,b|0,n|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}}o=0;ia(103,u|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s;continue}o=0;ia(103,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,v|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=n;r=m;s=q;d=z;n=f;m=r;q=s}else{e=24;break}}if((e|0)==17)d=0;else if((e|0)==24)d=(d|0)==0&1;D_(w|0);l=x;return d|0}function ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;q=v;o=v+8|0;p=v+4|0;c[b+8>>2]=0;u=vH(c[b>>2]<<2)|0;f=c[b>>2]|0;e=0;while(1){if((e|0)>=(f|0))break;c[u+(e<<2)>>2]=a+(e*24|0);e=e+1|0}_0(u,f,4,78);m=0;g=0;f=0;h=0;a:while(1){if((m|0)>=(c[b>>2]|0)){s=0;d=g;t=h;break}n=u+(m<<2)|0;e=c[n>>2]|0;c[o>>2]=e;a=c[e+16>>2]|0;if((c[a>>2]|0)==(e|0))e=c[a+4>>2]|0;else e=e+-24|0;c[p>>2]=e;k=0;a=g;j=h;while(1){if((k|0)>=2)break;switch(ps(o,p)|0){case -1:{g=0;h=a;while(1){if((g|0)>=(j|0))break;i=qs(c[h>>2]|0,e)|0;if(i|0){s=i;d=a;t=j;break a}g=g+1|0;h=c[h+4>>2]|0}g=vH(12)|0;if(!j){f=0;a=g}else c[f+4>>2]=g;c[g+8>>2]=f;c[g>>2]=e;c[g+4>>2]=0;c[e+20>>2]=g;h=j+1|0;break}case 1:{e=e+20|0;g=c[e>>2]|0;if(!g){r=19;break a}do if((j|0)!=1){if((g|0)==(a|0)){a=c[a+4>>2]|0;c[a+8>>2]=0;break}if((g|0)==(f|0)){f=c[f+8>>2]|0;c[f+4>>2]=0;break}else{i=g+4|0;h=c[g+8>>2]|0;c[h+4>>2]=c[i>>2];c[(c[i>>2]|0)+8>>2]=h;break}}else{a=0;f=0}while(0);D_(g);c[e>>2]=0;g=f;h=j+-1|0;break}default:{g=f;h=j}}e=c[n>>2]|0;f=c[e+16>>2]|0;if((e|0)==(c[f+4>>2]|0))f=c[f>>2]|0;else f=e+24|0;c[p>>2]=f;k=k+1|0;f=g;j=h}m=m+1|0;g=a;h=j}if((r|0)==19){Pw(1,92219,q)|0;bb(184416,1)}e=0;while(1){if((e|0)>=(t|0))break;r=c[d+4>>2]|0;D_(d);e=e+1|0;d=r}D_(u);l=v;return s|0}function os(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0.0;D=l;l=l+48|0;o=D+24|0;n=D+16|0;u=D;e=0;a:while(1){if((e|0)>=(b|0)){e=0;break}z=c[a+(e<<2)>>2]|0;A=c[z>>2]|0;c[u>>2]=c[A>>2];c[u+4>>2]=c[A+4>>2];c[u+8>>2]=c[A+8>>2];c[u+12>>2]=c[A+12>>2];A=e+1|0;B=d+(e*40|0)+8|0;p=d+(e*40|0)+24|0;q=d+(e*40|0)+32|0;g=d+(e*40|0)+16|0;e=A;while(1){if((e|0)>=(b|0)){e=A;continue a}i=c[a+(e<<2)>>2]|0;j=+h[B>>3];k=+h[d+(e*40|0)+24>>3];m=!(j<=k);f=+h[d+(e*40|0)+8>>3];if((((!(m|!(j>=f))?(r=+h[g>>3],s=+h[d+(e*40|0)+32>>3],r<=s):0)?(t=+h[d+(e*40|0)+16>>3],r>=t):0)?(E=+h[p>>3],!(!(E<=k)|!(E>=f))):0)?(E=+h[q>>3],!(!(E<=s)|!(E>=t))):0){c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];c[o+8>>2]=c[u+8>>2];c[o+12>>2]=c[u+12>>2];if(wU(n,o)|0){e=1;break a}}else C=11;if((((((C|0)==11?(C=0,v=+h[p>>3],!(!(f<=v)|!(f>=j))):0)?(w=+h[d+(e*40|0)+16>>3],x=+h[q>>3],w<=x):0)?(y=+h[g>>3],!(!(w>=y)|(!(k<=v)|m))):0)?(E=+h[d+(e*40|0)+32>>3],!(!(E<=x)|!(E>=y))):0)?(m=c[i>>2]|0,c[n>>2]=c[z>>2],c[n+4>>2]=c[z+4>>2],c[o>>2]=c[m>>2],c[o+4>>2]=c[m+4>>2],c[o+8>>2]=c[m+8>>2],c[o+12>>2]=c[m+12>>2],wU(n,o)|0):0){e=1;break a}e=e+1|0}}l=D;return e|0}function ps(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=c[a>>2]|0;a=c[b>>2]|0;d=+h[e>>3]-+h[a>>3];if(!(d!=0.0)){d=+h[e+8>>3]-+h[a+8>>3];if(d==0.0)a=0;else a=d>0.0?1:-1}else a=d>0.0?1:-1;return a|0}function qs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+64|0;g=m+32|0;i=m+24|0;j=m+16|0;k=m;f=m+48|0;rs(a,b,f);d=f+8|0;e=c[d>>2]|0;do if((e|0)>0)d=0;else{if((e|0)<0){rs(b,a,f);d=c[d>>2]|0;if((d|0)>0){d=0;break}if((d|0)<0)d=3;else{d=c[f>>2]|0;d=ss(b,a,(d|0)>-1?d:0-d|0)|0}if(!(ts(a,b,i,j,d)|0)){d=0;break}}else{d=c[f>>2]|0;if((d|0)==(c[f+4>>2]|0)){d=ss(a,b,0)|0;d=(ss(a,b,(d|0)<=(ss(a,b,1)|0)&1)|0)<<1}else d=ss(a,b,(d|0)>-1?d:0-d|0)|0;if(!(ts(a,b,i,j,d)|0)){d=0;break}}h[k>>3]=+h[i>>3];h[k+8>>3]=+h[j>>3];c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];d=us(a,b,g)|0}while(0);l=m;return d|0}function rs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0;i=+h[a>>3];j=+h[a+8>>3];e=c[a+16>>2]|0;if((c[e+4>>2]|0)==(a|0)){a=c[e>>2]|0;e=a}else{e=a+24|0;a=a+24|0}g=+h[e>>3]-i;f=+h[a+8>>3]-j;e=c[b+16>>2]|0;if((c[e+4>>2]|0)==(b|0)){a=c[e>>2]|0;e=a}else{e=b+24|0;a=b+24|0}k=+h[e>>3]-i;l=+h[a+8>>3]-j;j=(+h[b+8>>3]-j)*g-(+h[b>>3]-i)*f;b=j==0.0?0:j>0.0?1:-1;c[d>>2]=b;j=l*g-k*f;a=j==0.0?0:j>0.0?1:-1;c[d+4>>2]=a;c[d+8>>2]=O(a,b)|0;return}function ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0;k=+h[a>>3];l=+h[a+8>>3];f=c[a+16>>2]|0;if((c[f+4>>2]|0)==(a|0))a=c[f>>2]|0;else a=a+24|0;j=+h[a>>3];i=+h[a+8>>3];do if(d){a=c[b+16>>2]|0;if((c[a+4>>2]|0)==(b|0)){b=c[a>>2]|0;break}else{b=b+24|0;break}}while(0);g=+h[b>>3];e=+h[b+8>>3];if(k==j)if(k==g)b=(ws(l,e,i)|0)!=-1&1;else b=0;else b=ws(k,g,j)|0;return b|0}function ts(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0;a:do if((f|0)<1)g=0;else{n=+h[a>>3];p=+h[a+8>>3];g=c[a+16>>2]|0;if((c[g+4>>2]|0)==(a|0))g=c[g>>2]|0;else g=a+24|0;l=+h[g>>3];j=+h[g+8>>3];m=+h[b>>3];o=+h[b+8>>3];g=c[b+16>>2]|0;if((c[g+4>>2]|0)==(b|0))g=c[g>>2]|0;else g=b+24|0;k=+h[g>>3];i=+h[g+8>>3];b:do switch(f|0){case 3:{if(n==l){h[d>>3]=n;i=(o-i)/(m-k)*(n-k)+i;break b}if(m==k){h[d>>3]=m;i=(p-j)/(n-l)*(m-l)+j;break b}else{k=(o-i)/(m-k);l=(p-j)/(n-l);o=o-k*m;p=p-l*n;i=k-l;h[d>>3]=(p-o)/i;i=(k*p-o*l)/i;break b}}case 2:{if((ss(a,b,0)|0)==-1)if((ss(b,a,1)|0)==-1){f=(ss(b,a,0)|0)==-1;l=f?l:n;k=m;j=f?j:p;i=o}else{l=k;k=m;j=i;i=o}else if((ss(a,b,1)|0)!=-1)if((ss(b,a,0)|0)==-1){k=n;i=p}else{g=0;break a}else{l=m;j=o}h[d>>3]=(k+l)*.5;i=(i+j)*.5;break}case 1:if((o-p)*(n-l)==(m-n)*(p-j)){h[d>>3]=m;i=o;break b}else{h[d>>3]=k;break b}default:{g=1;break a}}while(0);h[e>>3]=i;g=1}while(0);return g|0}function us(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0;s=l;l=l+16|0;q=s;o=+h[a>>3];p=+h[a+8>>3];e=c[a+16>>2]|0;if((c[e+4>>2]|0)==(a|0))e=c[e>>2]|0;else e=a+24|0;m=+h[e>>3];j=+h[e+8>>3];k=+h[b>>3];n=+h[b+8>>3];e=c[b+16>>2]|0;if((c[e+4>>2]|0)==(b|0))e=c[e>>2]|0;else e=b+24|0;i=+h[e>>3];g=+h[e+8>>3];a:do if(!(o!=m&k!=i)){do if(o==m){f=+h[d>>3];if(o==f?p==+h[d+8>>3]:0)break;if(!(m==f)){r=18;break a}if(!(j==+h[d+8>>3])){r=18;break a}}while(0);if(k==i){f=+h[d>>3];if(k==f?n==+h[d+8>>3]:0){e=0;break}if(i==f?g==+h[d+8>>3]:0)e=0;else r=18}else e=0}else r=18;while(0);if((r|0)==18)if(0>1){e=c[15686]|0;p=+h[d+8>>3];h[q>>3]=+h[d>>3];h[q+8>>3]=p;g1(e,92248,q)|0;vs(1,a);vs(2,b);e=1}else e=1;l=s;return e|0}function vs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+48|0;j=k;f=c[15686]|0;g=+h[b>>3];i=+h[b+8>>3];d=c[b+16>>2]|0;if((c[d+4>>2]|0)==(b|0)){d=c[d>>2]|0;e=d}else{e=b+24|0;d=b+24|0}n=+h[e>>3];m=+h[d+8>>3];c[j>>2]=a;h[j+8>>3]=g;h[j+16>>3]=i;h[j+24>>3]=n;h[j+32>>3]=m;g1(f,92276,j)|0;l=k;return}function ws(a,b,c){a=+a;b=+b;c=+c;return (a==b|b==c?0:(a<b?b<c:c<b)?1:-1)|0}function xs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0;a:do if(!(lv(a,d)|0))a=0;else{f=uH(d<<3)|0;a=0;while(1){if((a|0)<(d|0))e=0;else break;while(1){if((e|0)==(d|0))break;h[f+(e<<3)>>3]=0.0;e=e+1|0}h[f+(a<<3)>>3]=1.0;mv(c[b+(a<<2)>>2]|0,f,d);a=a+1|0}D_(f);f=0;while(1){if((f|0)>=(d|0)){a=1;break a}e=b+(f<<2)|0;a=0;while(1){if((a|0)==(f|0))break;j=(c[e>>2]|0)+(a<<3)|0;i=+h[j>>3];g=(c[b+(a<<2)>>2]|0)+(f<<3)|0;h[j>>3]=+h[g>>3];h[g>>3]=i;a=a+1|0}f=f+1|0}}while(0);return a|0}function ys(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=b<<3;p=vH(q)|0;q=vH(q)|0;r=b*30|0;n=(d|0)<(b|0)?d:b;o=b+-1|0;m=(g|0)==0;d=0;i=0;a:while(1){if((i|0)>=(n|0))break;k=c[e+(i<<2)>>2]|0;do{b:do if(m)d=0;else{d=0;while(1){if((d|0)==(b|0)){d=0;break b}h[k+(d<<3)>>3]=+((g2()|0)%100|0|0);d=d+1|0}}while(0);while(1){if((d|0)==(i|0))break;g=c[e+(d<<2)>>2]|0;As(k,0,o,-+zs(g,0,o,k),g);d=d+1|0}j=+Bs(k,0,o)}while(j<1.0e-10);Cs(k,0,o,1.0/j,k);d=0;do{Ds(q,0,o,k);Es(a,b,b,k,p);Ds(k,0,o,p);g=0;while(1){if((g|0)==(i|0))break;s=c[e+(g<<2)>>2]|0;As(k,0,o,-+zs(s,0,o,k),s);g=g+1|0}s=d;d=d+1|0;j=+Bs(k,0,o);if(!((s|0)<(r|0)&!(j<1.0e-10)))break a;Cs(k,0,o,1.0/j,k);l=+zs(k,0,o,q)}while(+B(+l)<.999);h[f+(i<<3)>>3]=l*j;i=i+1|0}while(1){if((i|0)>=(n|0))break;k=c[e+(i<<2)>>2]|0;g=0;while(1){if((g|0)>=(b|0)){g=0;break}h[k+(g<<3)>>3]=+((g2()|0)%100|0|0);g=g+1|0}while(1){if((g|0)>=(i|0))break;s=c[e+(g<<2)>>2]|0;As(k,0,o,-+zs(s,0,o,k),s);g=g+1|0}Cs(k,0,o,1.0/+Bs(k,0,o),k);h[f+(i<<3)>>3]=0.0;i=i+1|0}m=n+-1|0;i=0;while(1){if((i|0)>=(m|0))break;a=f+(i<<3)|0;b=i+1|0;j=+h[a>>3];g=i;k=b;while(1){if((k|0)>=(n|0))break;l=+h[f+(k<<3)>>3];s=j<l;j=s?l:j;g=s?k:g;k=k+1|0}if((g|0)==(i|0)){i=b;continue}k=e+(i<<2)|0;Ds(p,0,o,c[k>>2]|0);s=e+(g<<2)|0;Ds(c[k>>2]|0,0,o,c[s>>2]|0);Ds(c[s>>2]|0,0,o,p);h[f+(g<<3)>>3]=+h[a>>3];h[a>>3]=j;i=b}D_(p);D_(q);return (d|0)<=(r|0)|0}function zs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0;f=0.0;e=1-b+c|0;d=d+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!e)break;f=+h[d>>3]*+h[c>>3]+f;e=e+-1|0;d=d+8|0;c=c+8|0}return +f}function As(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0;f=1-b+c|0;e=e+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!f)break;h[c>>3]=+h[c>>3]+ +h[e>>3]*d;f=f+-1|0;e=e+8|0;c=c+8|0}return}function Bs(a,b,c){a=a|0;b=b|0;c=c|0;return +(+C(+(+zs(a,b,c,a))))}function Cs(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0;f=1-b+c|0;e=e+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!f)break;h[c>>3]=+h[e>>3]*d;f=f+-1|0;e=e+8|0;c=c+8|0}return}function Ds(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=1-b+c|0;d=d+(b<<3)|0;c=a+(b<<3)|0;while(1){if(!e)break;h[c>>3]=+h[d>>3];e=e+-1|0;d=d+8|0;c=c+8|0}return}function Es(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0,k=0;j=0;while(1){if((j|0)>=(b|0))break;k=a+(j<<2)|0;g=0.0;i=0;while(1){if((i|0)>=(d|0))break;g=+h[e+(i<<3)>>3]*+h[(c[k>>2]|0)+(i<<3)>>3]+g;i=i+1|0}h[f+(j<<3)>>3]=g;j=j+1|0}return}function Fs(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;k=c[i>>2]|0;if(!k){o=d<<2;j=C_(O(o,f)|0)|0;o=C_(o)|0}else{o=d<<2;j=F_(c[k>>2]|0,O(o,f)|0)|0;o=F_(k,o)|0}c[i>>2]=o;k=0;while(1){if((k|0)>=(d|0)){i=0;break}c[o+(k<<2)>>2]=j;k=k+1|0;j=j+(f<<2)|0}while(1){if((i|0)>=(d|0))break;m=a+(i<<2)|0;n=o+(i<<2)|0;k=0;while(1){if((k|0)<(f|0)){j=0;l=0.0}else break;while(1){if((j|0)>=(e|0))break;p=+h[(c[m>>2]|0)+(j<<3)>>3]*+g[(c[b+(j<<2)>>2]|0)+(k<<2)>>2]+l;j=j+1|0;l=p}g[(c[n>>2]|0)+(k<<2)>>2]=l;k=k+1|0}i=i+1|0}return}function Gs(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0.0,m=0,n=0,o=0;k=c[i>>2]|0;if(!k){j=C_(O(d<<3,f)|0)|0;o=C_(d<<2)|0}else{j=F_(c[k>>2]|0,O(d<<3,f)|0)|0;o=F_(k,d<<2)|0}c[i>>2]=o;k=0;while(1){if((k|0)>=(d|0)){i=0;break}c[o+(k<<2)>>2]=j;k=k+1|0;j=j+(f<<3)|0}while(1){if((i|0)>=(d|0))break;m=a+(i<<2)|0;n=o+(i<<2)|0;k=0;while(1){if((k|0)<(f|0)){l=0.0;j=0}else break;while(1){if((j|0)>=(e|0))break;l=+h[(c[m>>2]|0)+(j<<3)>>3]*+g[(c[b+(j<<2)>>2]|0)+(k<<2)>>2]+l;j=j+1|0}h[(c[n>>2]|0)+(k<<3)>>3]=l;k=k+1|0}i=i+1|0}return}function Hs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0;j=c[f>>2]|0;if(!j){i=C_(O(d*20|0,e)|0)|0;q=C_(d<<2)|0}else{i=F_(c[j>>2]|0,O(d*20|0,e)|0)|0;q=F_(j,d<<2)|0}c[f>>2]=q;j=0;while(1){if((j|0)>=(d|0)){f=0;break}c[q+(j<<2)>>2]=i;j=j+1|0;i=i+(e<<2)|0}while(1){if((f|0)>=(d|0))break;l=c[a+(f*20|0)+4>>2]|0;m=c[a+(f*20|0)+8>>2]|0;n=c[a+(f*20|0)>>2]|0;o=q+(f<<2)|0;i=0;while(1){if((i|0)>=(e|0))break;p=b+(i<<2)|0;k=0.0;j=0;while(1){if((j|0)>=(n|0))break;k=+h[(c[p>>2]|0)+(c[l+(j<<2)>>2]<<3)>>3]*+g[m+(j<<2)>>2]+k;j=j+1|0}g[(c[o>>2]|0)+(i<<2)>>2]=k;i=i+1|0}f=f+1|0}return}function Is(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=0.0;d=b;e=a;while(1){if(!e)break;c=+h[d>>3]+c;d=d+8|0;e=e+-1|0}c=c/+(a|0);while(1){if(!a)break;h[b>>3]=+h[b>>3]-c;b=b+8|0;a=a+-1|0}return}function Js(a,b){a=a|0;b=b|0;var c=0;c=0;while(1){if((c|0)>=(a|0))break;h[b+(c<<3)>>3]=+((g2()|0)%500|0|0);c=c+1|0}Is(a,b);return}function Ks(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,l=0,m=0;j=0;while(1){if((j|0)>=(b|0))break;k=c[a+(j*20|0)>>2]|0;l=a+(j*20|0)+8|0;m=a+(j*20|0)+4|0;f=0.0;i=0;while(1){if((i|0)>=(k|0))break;f=+h[d+(c[(c[m>>2]|0)+(i<<2)>>2]<<3)>>3]*+g[(c[l>>2]|0)+(i<<2)>>2]+f;i=i+1|0}h[e+(j<<3)>>3]=f;j=j+1|0}return}function Ls(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0;j=0;while(1){if((j|0)>=(b|0))break;k=a+(j<<2)|0;f=0.0;i=0;while(1){if((i|0)==(b|0))break;f=+h[d+(i<<3)>>3]*+g[(c[k>>2]|0)+(i<<2)>>2]+f;i=i+1|0}h[e+(j<<3)>>3]=f;j=j+1|0}return}function Ms(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;h[d+(e<<3)>>3]=+h[b+(e<<3)>>3]-+h[c+(e<<3)>>3];e=e+1|0}return}function Ns(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;h[d+(e<<3)>>3]=+h[c+(e<<3)>>3]+ +h[b+(e<<3)>>3];e=e+1|0}return}function Os(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;h[d+(e<<3)>>3]=+h[b+(e<<3)>>3]*c;e=e+1|0}return}function Ps(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=0;while(1){if((d|0)>=(a|0))break;h[c+(d<<3)>>3]=+h[b+(d<<3)>>3];d=d+1|0}return}function Qs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(a|0))break;d=+h[c+(e<<3)>>3]*+h[b+(e<<3)>>3]+d;e=e+1|0}return +d}function Rs(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0;c=0;d=-1.e+50;while(1){if((c|0)>=(a|0))break;e=+B(+(+h[b+(c<<3)>>3]));c=c+1|0;d=e>d?e:d}return +d}function Ss(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0,j=0;j=0;while(1){if((j|0)<(b|0)){g=0.0;i=0}else break;while(1){if((i|0)>=(d|0))break;g=+h[e+(i<<3)>>3]*+h[(c[a+(i<<2)>>2]|0)+(j<<3)>>3]+g;i=i+1|0}h[f+(j<<3)>>3]=g;j=j+1|0}return}function Ts(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=0.0;d=b;e=a;while(1){if(!e)break;c=+g[d>>2]+c;d=d+4|0;e=e+-1|0}c=c/+(a|0);while(1){if(!a)break;g[b>>2]=+g[b>>2]-c;b=b+4|0;a=a+-1|0}return}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0,p=0.0;e=0;while(1){if((e|0)>=(b|0)){h=0;j=0;m=b;break}g[d+(e<<2)>>2]=0.0;e=e+1|0}while(1){if((j|0)>=(b|0))break;l=+g[c+(j<<2)>>2];k=j+1|0;f=+g[a+(h<<2)>>2]*l;i=k;e=h;while(1){e=e+1|0;if((i|0)==(b|0))break;p=+g[a+(e<<2)>>2];n=+g[c+(i<<2)>>2]*p+f;o=d+(i<<2)|0;g[o>>2]=+g[o>>2]+p*l;f=n;i=i+1|0}o=d+(j<<2)|0;g[o>>2]=+g[o>>2]+f;h=h+m|0;j=k;m=m+-1|0}return}function Vs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;g[d+(e<<2)>>2]=+g[b+(e<<2)>>2]-+g[c+(e<<2)>>2];e=e+1|0}return}function Ws(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;g[d+(e<<2)>>2]=+g[c+(e<<2)>>2]+ +g[b+(e<<2)>>2];e=e+1|0}return}function Xs(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0;e=0;while(1){if((e|0)>=(a|0))break;f=b+(e<<2)|0;g[f>>2]=+g[d+(e<<2)>>2]*c+ +g[f>>2];e=e+1|0}return}function Ys(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;g[d+(e<<2)>>2]=+g[b+(e<<2)>>2]*c;e=e+1|0}return}function Zs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(a|0))break;c[d+(e<<2)>>2]=c[b+(e<<2)>>2];e=e+1|0}return}function _s(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(a|0))break;d=d+ +g[c+(e<<2)>>2]*+g[b+(e<<2)>>2];e=e+1|0}return +d}function $s(a,b,c){a=a|0;b=+b;c=c|0;var d=0;d=0;while(1){if((d|0)>=(a|0))break;h[c+(d<<3)>>3]=b;d=d+1|0}return}function at(a,b,c){a=a|0;b=+b;c=c|0;var d=0;d=0;while(1){if((d|0)>=(a|0))break;g[c+(d<<2)>>2]=b;d=d+1|0}return}function bt(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0;c=-1000000015047466219876688.0e6;d=0;while(1){if((d|0)>=(a|0))break;e=+B(+(+g[b+(d<<2)>>2]));c=e>c?e:c;d=d+1|0}return +c}function ct(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=0;while(1){if((c|0)>=(a|0))break;d=b+(c<<2)|0;e=+g[d>>2];g[d>>2]=e*e;c=c+1|0}return}function dt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=0;while(1){if((c|0)>=(a|0))break;d=b+(c<<2)|0;e=+g[d>>2];if(e!=0.0)g[d>>2]=1.0/e;c=c+1|0}return}function et(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0;d=0;while(1){if((d|0)>=(a|0))break;e=+g[b+(d<<2)>>2];if(e>=0.0)g[c+(d<<2)>>2]=+C(+e);d=d+1|0}return}function ft(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;c=0;while(1){if((c|0)>=(a|0))break;d=b+(c<<2)|0;e=+g[d>>2];if(e>0.0)g[d>>2]=1.0/+C(+e);c=c+1|0}return}function gt(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=0;if(b&3)if(!(4%(b>>>0)|0))b=4;else b=O(4/((ht(b)|0)>>>0)|0,b)|0;c[a+8>>2]=b;a=a+4|0;b=c[a>>2]|0;a:do if(b|0)while(1){if(!b)break a;d=c[b>>2]|0;D_(c[b+4>>2]|0);D_(b);b=d}while(0);c[a>>2]=0;return}function ht(a){a=a|0;var b=0,c=0;c=4;a:while(1){b=c;while(1){if((b|0)==(a|0))break a;if((b|0)<=(a|0))break;b=b-a|0}c=b;a=a-b|0}return a|0}function it(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;if(!b){d=c[a+8>>2]|0;e=vH(8)|0;f=vH(O(c[46085]|0,d)|0)|0;c[e+4>>2]=f;b=0;while(1){if((b|0)>=(c[46085]|0))break;jt(f+(O(b,d)|0)|0,a);b=b+1|0}b=a+4|0;c[e>>2]=c[b>>2];c[b>>2]=e;b=c[a>>2]|0}c[a>>2]=c[b>>2];return b|0}function jt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=a;return}function kt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;m=uH(b<<3)|0;l=a+8|0;f=c[l>>2]|0;lt(a,b,m);Js(b,d);h=0;i=0;while(1){if((i|0)>=(b|0))break;h=(c[a+(i*20|0)>>2]|0)+h|0;i=i+1|0}h=vH(h<<2)|0;j=0;while(1){if((j|0)>=(b|0))break;c[a+(j*20|0)+8>>2]=h;k=c[a+(j*20|0)>>2]|0;g[h>>2]=+(1-k|0);i=1;while(1){if((i|0)>=(k|0))break;g[h+(i<<2)>>2]=1.0;i=i+1|0}h=h+(k<<2)|0;j=j+1|0}i=Dq(a,d,m,b,.001,e)|0;D_(c[l>>2]|0);h=0;while(1){if((h|0)>=(b|0))break;c[a+(h*20|0)+8>>2]=f;f=f+(c[a+(h*20|0)>>2]<<2)|0;h=h+1|0}D_(m);return i>>>31|0}function lt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,i=0,j=0,k=0,l=0,m=0;k=a+16|0;i=0;while(1){if((i|0)>=(b|0))break;if(c[k>>2]|0){l=c[a+(i*20|0)>>2]|0;m=a+(i*20|0)+8|0;j=a+(i*20|0)+16|0;e=0.0;f=1;while(1){if((f|0)>=(l|0))break;e=e+ +g[(c[j>>2]|0)+(f<<2)>>2]*+g[(c[m>>2]|0)+(f<<2)>>2];f=f+1|0}h[d+(i<<3)>>3]=e}i=i+1|0}return}function mt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=vH(f<<2)|0;i=b<<3;g=0;while(1){if((g|0)>=(f|0))break;c[r+(g<<2)>>2]=vH(i)|0;g=g+1|0}p=vH(f<<3)|0;q=vH(b<<2)|0;g=vH(O(i,b)|0)|0;i=0;while(1){if((i|0)>=(b|0))break;c[q+(i<<2)>>2]=g;g=g+(b<<3)|0;i=i+1|0}k=0;o=1;while(1){if((k|0)>=(b|0))break;l=a+(k<<2)|0;m=q+(k<<2)|0;i=0;while(1){if((i|0)==(o|0))break;n=a+(i<<2)|0;g=0;j=0.0;while(1){if((g|0)>=(d|0))break;s=j+ +(O(c[(c[n>>2]|0)+(g<<2)>>2]|0,c[(c[l>>2]|0)+(g<<2)>>2]|0)|0);g=g+1|0;j=s}h[(c[q+(i<<2)>>2]|0)+(k<<3)>>3]=j;h[(c[m>>2]|0)+(i<<3)>>3]=j;i=i+1|0}k=k+1|0;o=o+1|0}ys(q,b,f,r,p,1)|0;i=0;while(1){if((i|0)>=(f|0)){g=0;break}l=r+(i<<2)|0;m=e+(i<<2)|0;k=0;while(1){if((k|0)<(d|0)){g=0;j=0.0}else break;while(1){if((g|0)>=(b|0))break;s=+h[(c[l>>2]|0)+(g<<3)>>3]*+(c[(c[a+(g<<2)>>2]|0)+(k<<2)>>2]|0)+j;g=g+1|0;j=s}h[(c[m>>2]|0)+(k<<3)>>3]=j;k=k+1|0}i=i+1|0}while(1){if((g|0)>=(f|0))break;D_(c[r+(g<<2)>>2]|0);g=g+1|0}D_(r);D_(p);D_(c[q>>2]|0);D_(q);return}function nt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+16|0;j=f+20|0;i=f+12|0;h=f+8|0;c[g>>2]=e;c[i>>2]=0;c[h>>2]=0;$u(c[a>>2]|0,d,d<<2,j);Hs(c[j>>2]|0,a,d,b,i);Gs(a,c[i>>2]|0,b,d,b,h);D_(c[c[i>>2]>>2]|0);D_(c[i>>2]|0);e=(ys(c[h>>2]|0,b,1,g,f,1)|0)&255;l=f;return e|0}function ot(){c[46143]=0;D_(c[46144]|0);D_(c[46145]|0);D_(c[46146]|0);c[46144]=0;c[46145]=0;c[46146]=0;return}function pt(a){a=a|0;D_(c[a+36>>2]|0);return}function qt(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0;r=l;l=l+80|0;o=r+64|0;q=r+68|0;i=r+48|0;j=r+32|0;k=r+16|0;m=r;n=d+16|0;g=c[n>>2]|0;a:do if(!(c[g+212>>2]|0))switch(HJ(d)|0){case 1:{g=c[n>>2]|0;j=c[g+12>>2]|0;k=c[j+8>>2]|0;c[q>>2]=k;g=c[c[g+8>>2]>>2]|0;switch(a[g>>0]|0){case 98:{if(!(b$(g,105210)|0))p=11;else p=8;break}case 112:{if((b$(g,102695)|0)==0?(rt(c[j+44>>2]|0,k)|0)!=0:0)p=11;else p=8;break}default:p=8}do if((p|0)==8)if((k|0)<3){c[b+40>>2]=(c[j>>2]|0)==0?0:2;p=17;break}else{g=b+40|0;c[g>>2]=0;break}else if((p|0)==11){g=b+40|0;c[g>>2]=1;if((k|0)<=2)p=17}while(0);if((p|0)==17){i=st(d,q,e,f)|0;p=21;break a}i=vH(k<<4)|0;j=j+44|0;if((c[g>>2]|0)==1){p=c[j>>2]|0;s=e;h[i>>3]=+h[p>>3]*.013888888888888888+s;e=f;h[i+8>>3]=+h[p+8>>3]*.013888888888888888+e;h[i+16>>3]=+h[p+16>>3]*.013888888888888888-s;h[i+24>>3]=+h[p+24>>3]*.013888888888888888+e;h[i+32>>3]=+h[p+32>>3]*.013888888888888888-s;h[i+40>>3]=+h[p+40>>3]*.013888888888888888-e;h[i+48>>3]=+h[p+48>>3]*.013888888888888888+s;h[i+56>>3]=+h[p+56>>3]*.013888888888888888-e;p=21;break a}g=0;while(1){if((g|0)>=(k|0)){p=21;break a}p=c[j>>2]|0;u=+h[p+(g<<4)>>3];s=+h[p+(g<<4)+8>>3];t=+C(+(s*s+u*u));h[i+(g<<4)>>3]=(e/t+1.0)*u*.013888888888888888;h[i+(g<<4)+8>>3]=(f/t+1.0)*s*.013888888888888888;g=g+1|0}}case 2:{c[q>>2]=4;p=vH(64)|0;d=c[(c[n>>2]|0)+12>>2]|0;v=+h[d+32>>3];t=+h[d+40>>3];o=~~+h[d+16>>3];d=~~+h[d+24>>3];u=-e;s=-f;tt(i,o,d,u,s);c[p>>2]=c[i>>2];c[p+4>>2]=c[i+4>>2];c[p+8>>2]=c[i+8>>2];c[p+12>>2]=c[i+12>>2];i=p+16|0;n=~~v;tt(j,n,d,e,s);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];i=p+32|0;d=~~t;tt(k,n,d,e,f);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];i=p+48|0;tt(m,o,d,u,f);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];c[b+40>>2]=1;i=p;p=21;break a}case 3:{c[b+40>>2]=2;i=st(d,q,e,f)|0;p=21;break a}default:{c[o>>2]=c[c[(c[n>>2]|0)+8>>2]>>2];Pw(1,92312,o)|0;g=1;break a}}else{c[q>>2]=4;u=+h[g+32>>3]*.5+e;v=+h[g+40>>3]*.5+f;c[b+40>>2]=1;i=vH(64)|0;h[i>>3]=u;h[i+8>>3]=v;t=-u;h[i+16>>3]=t;h[i+24>>3]=v;h[i+32>>3]=t;v=-v;h[i+40>>3]=v;h[i+48>>3]=u;h[i+56>>3]=v;p=21}while(0);if((p|0)==21){c[b+36>>2]=i;g=c[q>>2]|0;c[b+32>>2]=g;ut(i,g,b,b+16|0);if((g|0)>(c[46143]|0)){c[46143]=g;g=0}else g=0}l=r;return g|0}function rt(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;do if((b|0)==4){c=+h[a+8>>3];b=a+16|0;d=+h[a+24>>3];if(c==d){if(!(+h[a+40>>3]==+h[a+56>>3])){b=0;break}if(!(+h[a>>3]==+h[a+48>>3])){b=0;break}b=+h[b>>3]==+h[a+32>>3];break}if((+h[a>>3]==+h[b>>3]?+h[a+32>>3]==+h[a+48>>3]:0)?c==+h[a+56>>3]:0)b=d==+h[a+40>>3];else b=0}else b=0;while(0);return b&1|0}function st(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0.0,i=0,j=0,k=0.0,l=0;f=xx(a,99679)|0;if(!f)f=0;else f=a2(f)|0;i=(f|0)<3?20:f;j=vH(i<<4)|0;a=a+16|0;g=1.0/+(i|0);f=0;while(1){if((f|0)>=(i|0))break;l=c[a>>2]|0;k=g*+(f|0)*6.283185307179586;h[j+(f<<4)>>3]=(+h[l+32>>3]*.5+d)*+E(+k);h[j+(f<<4)+8>>3]=(+h[l+40>>3]*.5+e)*+F(+k);f=f+1|0}c[b>>2]=i;return j|0}function tt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;h[a>>3]=+(b|0)*.013888888888888888+d;h[a+8>>3]=+(c|0)*.013888888888888888+e;return}function ut(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0.0,m=0.0;j=+h[a>>3];i=+h[a+8>>3];e=1;f=i;g=j;while(1){if((e|0)>=(b|0))break;k=a+16|0;l=+h[k>>3];m=+h[a+24>>3];e=e+1|0;f=m>f?m:f;g=l>g?l:g;i=m<i?m:i;j=l<j?l:j;a=k}h[c>>3]=j;h[c+8>>3]=i;h[d>>3]=g;h[d+8>>3]=f;return}function vt(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0;r=l;l=l+80|0;n=r+64|0;p=r+68|0;i=r+48|0;j=r+32|0;k=r+16|0;m=r;o=d+16|0;g=c[o>>2]|0;a:do if(!(c[g+212>>2]|0))switch(HJ(d)|0){case 1:{m=c[(c[o>>2]|0)+12>>2]|0;n=m+8|0;k=c[n>>2]|0;c[p>>2]=k;b:do if((k|0)>2){i=vH(k<<4)|0;j=m+44|0;g=0;while(1){if((g|0)>=(k|0))break b;d=c[j>>2]|0;h[i+(g<<4)>>3]=+h[d+(g<<4)>>3]*.013888888888888888;h[i+(g<<4)+8>>3]=+h[d+(g<<4)+8>>3]*.013888888888888888;g=g+1|0}}else i=st(d,p,0.0,0.0)|0;while(0);g=c[c[(c[o>>2]|0)+8>>2]>>2]|0;switch(a[g>>0]|0){case 98:{if(!(b$(g,105210)|0))g=1;else q=13;break}case 112:{if((b$(g,102695)|0)==0?(rt(i,c[p>>2]|0)|0)!=0:0)g=1;else q=13;break}default:q=13}do if((q|0)==13){if((c[n>>2]|0)<3?c[m>>2]|0:0){g=2;break}g=0}while(0);c[b+40>>2]=g;q=20;break a}case 2:{c[p>>2]=4;q=vH(64)|0;o=c[(c[o>>2]|0)+12>>2]|0;t=+h[o+16>>3];v=+h[o+24>>3];u=+h[o+32>>3];s=+h[o+40>>3];wt(i,t,v);c[q>>2]=c[i>>2];c[q+4>>2]=c[i+4>>2];c[q+8>>2]=c[i+8>>2];c[q+12>>2]=c[i+12>>2];i=q+16|0;wt(j,u,v);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];i=q+32|0;wt(k,u,s);c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];i=q+48|0;wt(m,t,s);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];c[b+40>>2]=1;i=q;q=20;break a}case 3:{c[b+40>>2]=2;i=st(d,p,0.0,0.0)|0;q=20;break a}default:{c[n>>2]=c[c[(c[o>>2]|0)+8>>2]>>2];Pw(1,92348,n)|0;g=1;break a}}else{c[p>>2]=4;u=+h[g+32>>3]*.5;v=+h[g+40>>3]*.5;c[b+40>>2]=1;i=vH(64)|0;h[i>>3]=u;h[i+8>>3]=v;t=-u;h[i+16>>3]=t;h[i+24>>3]=v;h[i+32>>3]=t;v=-v;h[i+40>>3]=v;h[i+48>>3]=u;h[i+56>>3]=v;q=20}while(0);if((q|0)==20){g=c[p>>2]|0;if(e!=1.0|f!=1.0)xt(i,g,e,f);c[b+36>>2]=i;c[b+32>>2]=g;ut(i,g,b,b+16|0);if((g|0)>(c[46143]|0)){c[46143]=g;g=0}else g=0}l=r;return g|0}function wt(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b*.013888888888888888;h[a+8>>3]=c*.013888888888888888;return}function xt(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=0;while(1){if((e|0)>=(b|0))break;h[a>>3]=+h[a>>3]*c;f=a+8|0;h[f>>3]=+h[f>>3]*d;a=a+16|0;e=e+1|0}return}function yt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0;r=l;l=l+128|0;o=r+112|0;n=r+96|0;m=r+80|0;f=r+64|0;p=r+48|0;q=r+32|0;j=r+16|0;k=r;c[n>>2]=c[a>>2];c[n+4>>2]=c[a+4>>2];c[n+8>>2]=c[a+8>>2];c[n+12>>2]=c[a+12>>2];c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];xr(p,n,o);g=b+16|0;c[n>>2]=c[a>>2];c[n+4>>2]=c[a+4>>2];c[n+8>>2]=c[a+8>>2];c[n+12>>2]=c[a+12>>2];c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];xr(q,n,o);c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];xr(j,n,o);i=e+16|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];c[o>>2]=c[i>>2];c[o+4>>2]=c[i+4>>2];c[o+8>>2]=c[i+8>>2];c[o+12>>2]=c[i+12>>2];xr(k,n,o);c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];c[m+12>>2]=c[q+12>>2];c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];do if(zt(f,m,n,o)|0){f=c[b+40>>2]|0;if(f&1|0?c[e+40>>2]&1|0:0){f=1;break}if(f&2|0?c[e+40>>2]&2|0:0){s=+h[g>>3]-+h[b>>3]+ +h[i>>3]-+h[e>>3];t=+h[a>>3]-+h[d>>3];u=+h[a+8>>3]-+h[d+8>>3];f=!(u*u+t*t>s*s*.25);break}f=c[46144]|0;if(!f){c[46144]=vH(c[46143]<<4)|0;i=vH(c[46143]<<4)|0;c[46145]=i;f=c[46144]|0}else i=c[46145]|0;v=c[b+36>>2]|0;b=b+32|0;g=c[b>>2]|0;c[o>>2]=c[a>>2];c[o+4>>2]=c[a+4>>2];c[o+8>>2]=c[a+8>>2];c[o+12>>2]=c[a+12>>2];At(v,g,o,f);a=c[e+36>>2]|0;g=e+32|0;e=c[g>>2]|0;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];At(a,e,o,i);if(!(Bt(f,i,c[b>>2]|0,c[g>>2]|0)|0)){f=c[46144]|0;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];if(Ct(m,n,o)|0?(k=c[46145]|0,v=c[g>>2]|0,c[o>>2]=c[f>>2],c[o+4>>2]=c[f+4>>2],c[o+8>>2]=c[f+8>>2],c[o+12>>2]=c[f+12>>2],Dt(k,v,o)|0):0){f=1;break}f=c[46145]|0;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];c[o+8>>2]=c[q+8>>2];c[o+12>>2]=c[q+12>>2];if(!(Ct(m,n,o)|0))f=0;else{q=c[46144]|0;v=c[b>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=c[f+4>>2];c[o+8>>2]=c[f+8>>2];c[o+12>>2]=c[f+12>>2];f=(Dt(q,v,o)|0)!=0}}else f=1}else f=0;while(0);l=r;return f&1|0}function zt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((+h[a>>3]<=+h[d>>3]?+h[c>>3]<=+h[b>>3]:0)?+h[a+8>>3]<=+h[d+8>>3]:0)a=+h[c+8>>3]<=+h[b+8>>3]&1;else a=0;return a|0}function At(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;f=c+8|0;e=0;while(1){if((e|0)>=(b|0))break;h[d>>3]=+h[c>>3]+ +h[a>>3];h[d+8>>3]=+h[f>>3]+ +h[a+8>>3];e=e+1|0;a=a+16|0;d=d+16|0}return}function Bt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;A=l;l=l+112|0;s=A+96|0;r=A+80|0;q=A+64|0;p=A+48|0;u=A+32|0;v=A+16|0;w=A;x=d+-1|0;y=e+-1|0;z=d<<1;t=e<<1;f=0;g=0;h=0;i=0;while(1){B=a+(f<<4)|0;C=a+(((x+f|0)%(d|0)|0)<<4)|0;c[r>>2]=c[B>>2];c[r+4>>2]=c[B+4>>2];c[r+8>>2]=c[B+8>>2];c[r+12>>2]=c[B+12>>2];c[s>>2]=c[C>>2];c[s+4>>2]=c[C+4>>2];c[s+8>>2]=c[C+8>>2];c[s+12>>2]=c[C+12>>2];wr(u,r,s);o=b+(g<<4)|0;n=b+(((y+g|0)%(e|0)|0)<<4)|0;c[r>>2]=c[o>>2];c[r+4>>2]=c[o+4>>2];c[r+8>>2]=c[o+8>>2];c[r+12>>2]=c[o+12>>2];c[s>>2]=c[n>>2];c[s+4>>2]=c[n+4>>2];c[s+8>>2]=c[n+8>>2];c[s+12>>2]=c[n+12>>2];wr(v,r,s);c[q>>2]=c[45770];c[q+4>>2]=c[45771];c[q+8>>2]=c[45772];c[q+12>>2]=c[45773];c[r>>2]=c[u>>2];c[r+4>>2]=c[u+4>>2];c[r+8>>2]=c[u+8>>2];c[r+12>>2]=c[u+12>>2];c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];c[s+8>>2]=c[v+8>>2];c[s+12>>2]=c[v+12>>2];j=+yr(q,r,s);c[q>>2]=c[C>>2];c[q+4>>2]=c[C+4>>2];c[q+8>>2]=c[C+8>>2];c[q+12>>2]=c[C+12>>2];c[r>>2]=c[B>>2];c[r+4>>2]=c[B+4>>2];c[r+8>>2]=c[B+8>>2];c[r+12>>2]=c[B+12>>2];c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];c[s+8>>2]=c[o+8>>2];c[s+12>>2]=c[o+12>>2];k=zr(q,r,s)|0;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];c[r>>2]=c[o>>2];c[r+4>>2]=c[o+4>>2];c[r+8>>2]=c[o+8>>2];c[r+12>>2]=c[o+12>>2];c[s>>2]=c[B>>2];c[s+4>>2]=c[B+4>>2];c[s+8>>2]=c[B+8>>2];c[s+12>>2]=c[B+12>>2];m=zr(q,r,s)|0;c[p>>2]=c[C>>2];c[p+4>>2]=c[C+4>>2];c[p+8>>2]=c[C+8>>2];c[p+12>>2]=c[C+12>>2];c[q>>2]=c[B>>2];c[q+4>>2]=c[B+4>>2];c[q+8>>2]=c[B+8>>2];c[q+12>>2]=c[B+12>>2];c[r>>2]=c[n>>2];c[r+4>>2]=c[n+4>>2];c[r+8>>2]=c[n+8>>2];c[r+12>>2]=c[n+12>>2];c[s>>2]=c[o>>2];c[s+4>>2]=c[o+4>>2];c[s+8>>2]=c[o+8>>2];c[s+12>>2]=c[o+12>>2];if(Ar(p,q,r,s,w)|0){f=1;break}n=(k|0)==0;o=(m|0)==0;do if(j!=0.0|(m|k|0)!=0)if(!(j>=0.0))if(o){f=(f+1|0)%(d|0)|0;h=h+1|0;break}else{g=(g+1|0)%(e|0)|0;i=i+1|0;break}else if(n){g=(g+1|0)%(e|0)|0;i=i+1|0;break}else{f=(f+1|0)%(d|0)|0;h=h+1|0;break}else{f=(f+1|0)%(d|0)|0;h=h+1|0}while(0);if(!((i|0)<(t|0)&((h|0)<(z|0)&((i|0)<(e|0)|(h|0)<(d|0))))){f=0;break}}l=A;return f|0}function Ct(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;e=+h[a>>3];if((e<=+h[c>>3]?e>=+h[b>>3]:0)?(d=+h[a+8>>3],d<=+h[c+8>>3]):0)a=d>=+h[b+8>>3]&1;else a=0;return a|0}function Dt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,l=0;e=c[46146]|0;if(!e){e=vH(c[46143]<<4)|0;c[46146]=e}i=d+8|0;g=0;while(1){if((g|0)>=(b|0))break;h[e+(g<<4)>>3]=+h[a+(g<<4)>>3]-+h[d>>3];h[e+(g<<4)+8>>3]=+h[a+(g<<4)+8>>3]-+h[i>>3];g=g+1|0}d=b+-1|0;f=0.0;a=0;a:while(1){if((a|0)>=(b|0)){l=19;break}g=(d+a|0)%(b|0)|0;j=+h[e+(a<<4)+8>>3];i=j==0.0;if(i?+h[e+(g<<4)+8>>3]==0.0:0){if(+h[e+(g<<4)>>3]*+h[e+(a<<4)>>3]<0.0){e=1;break}}else l=11;do if((l|0)==11){l=0;k=+h[e+(g<<4)+8>>3];if(!(j>=0.0)|!(k<=0.0)?!(k>=0.0)|!(j<=0.0):0)break;j=(k*+h[e+(a<<4)>>3]-j*+h[e+(g<<4)>>3])/(k-j);if(j==0.0){e=1;break a}if(j>0.0)if(k==0.0|i){f=f+.5;break}else{f=f+1.0;break}}while(0);a=a+1|0}if((l|0)==19)e=((~~f|0)%2|0|0)==1&1;return e|0}function Et(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=vH(b<<2)|0;i=O(b,b)|0;d=vH(i<<2)|0;c[j>>2]=d;at(i,0.0,d);d=1;while(1){if((d|0)>=(b|0)){d=0;g=0;i=b;break}c[j+(d<<2)>>2]=(c[j>>2]|0)+((O(d,b)|0)<<2);d=d+1|0}while(1){if((g|0)>=(b|0))break;h=j+(g<<2)|0;e=g;f=d;while(1){if((e|0)==(b|0))break;k=c[a+(f<<2)>>2]|0;c[(c[h>>2]|0)+(e<<2)>>2]=k;c[(c[j+(e<<2)>>2]|0)+(g<<2)>>2]=k;e=e+1|0;f=f+1|0}d=d+i|0;g=g+1|0;i=i+-1|0}return j|0}function Ft(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;var k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0;M=c[d+(f<<2)>>2]|0;C=c[a+4>>2]|0;D=c[a>>2]|0;E=c[a+48>>2]|0;F=c[a+52>>2]|0;G=c[a+56>>2]|0;a:do if((h|0)<1)d=0;else{Ht(M,C,E,F,G,j);H=c[a+28>>2]|0;I=c[a+32>>2]|0;J=c[a+36>>2]|0;K=c[a+12>>2]|0;L=c[a+16>>2]|0;f=0;e=0;d=-1;while(1){if((f|0)>=(C|0))break;if((f|0)>=(e|0)){d=d+1|0;if((d|0)==(G|0)){e=C;d=G}else e=c[F+(d<<2)>>2]|0}c[L+(c[E+(f<<2)>>2]<<2)>>2]=d;f=f+1|0}z=c[a+40>>2]|0;A=I+(C+-1<<2)|0;d=0;e=0;while(1){if(e<<24>>24==0&(d|0)<(h|0)){k=-1.0e9;f=0;e=1}else break a;b:while(1){x=f;while(1){if((x|0)>=(C|0))break b;f=c[E+(x<<2)>>2]|0;y=+g[M+(f<<2)>>2];l=y;w=x;m=0.0;while(1){g[z+(f<<2)>>2]=m;f=w+1|0;if((f|0)>=(C|0)){v=0;break}l=(c[L+(f<<2)>>2]|0)>(c[L+(w<<2)>>2]|0)?l+j:l;a=c[E+(f<<2)>>2]|0;m=+g[M+(a<<2)>>2];if(+B(+(m-l))>1.0e-09){v=1;break}w=f;m=m-y;f=a}n=x;while(1){if((n|0)>(w|0)){a=0;o=x;break}o=c[E+(n<<2)>>2]|0;p=c[D+(o<<2)>>2]|0;a=0;l=-+g[b+(o<<2)>>2];while(1){if((a|0)>=(C|0))break;if((a|0)!=(o|0))l=+g[M+(a<<2)>>2]*+g[p+(a<<2)>>2]+l;a=a+1|0}g[H+(o<<2)>>2]=l/-+g[p+(o<<2)>>2]-+g[z+(o<<2)>>2];n=n+1|0}c:while(1){if((o|0)>(w|0)){m=0.0;q=0.0;r=0;break}n=c[L+(c[E+(o<<2)>>2]<<2)>>2]|0;if((n|0)==(G|0))r=f;else{r=c[F+(n<<2)>>2]|0;r=(f|0)<(r|0)?f:r}p=o;while(1){if((p|0)>=(r|0)){p=o;break}n=c[E+(p<<2)>>2]|0;if(+g[H+(n<<2)>>2]<y){c[K+(a<<2)>>2]=n;a=a+1|0}p=p+1|0}while(1){if((p|0)>=(r|0))break;n=c[E+(p<<2)>>2]|0;if(+g[H+(n<<2)>>2]==y){c[K+(a<<2)>>2]=n;a=a+1|0}p=p+1|0}while(1){if((o|0)>=(r|0)){o=r;continue c}n=c[E+(o<<2)>>2]|0;if(+g[H+(n<<2)>>2]>y){c[K+(a<<2)>>2]=n;a=a+1|0}o=o+1|0}}while(1){if((r|0)>=(a|0))break;o=c[K+(r<<2)>>2]|0;p=c[D+(o<<2)>>2]|0;l=0.0;n=0;while(1){if((n|0)==(r|0))break;l=l-+g[p+(c[K+(n<<2)>>2]<<2)>>2];n=n+1|0}N=l*2.0;u=p+(o<<2)|0;s=+g[u>>2];l=N+m;s=(N*y+m*q-+g[H+(o<<2)>>2]*s)/(l-s);g[I+(r<<2)>>2]=s;m=l-+g[u>>2];q=s;r=r+1|0}p=(a|0)==(C|0);if(p)g[A>>2]=y;u=a+-1|0;m=0.0;q=0.0;o=u;while(1){if((o|0)<=-1)break;r=c[K+(o<<2)>>2]|0;t=c[D+(r<<2)>>2]|0;l=0.0;n=o;while(1){n=n+1|0;if((n|0)>=(a|0))break;l=l-+g[t+(c[K+(n<<2)>>2]<<2)>>2]}l=l*2.0;t=t+(r<<2)|0;N=+g[t>>2];s=l+m;N=(l*y+m*q-+g[H+(r<<2)>>2]*N)/(s-N);g[J+(o<<2)>>2]=N;m=s-+g[t>>2];q=N;o=o+-1|0}if(p){g[J>>2]=y;s=0.0;n=-1;p=0}else{s=0.0;n=-1;p=0}while(1){if((a|0)<=(p|0))break;q=+g[J+(p<<2)>>2];if((p|0)>0)l=+g[I+(p+-1<<2)>>2];else l=q;do if(q<l){o=l>y;if(q<y){l=o?y:l;m=l;break}if(o){m=q;l=q}else m=q}else m=q;while(0);N=+B(+(m-y))*+(a-p|0)+ +B(+(l-y))*+(p|0);t=N>s;s=t?N:s;n=t?p:n;p=p+1|0}if((n|0)>-1)break;if(v?(c[L+(c[E+(f<<2)>>2]<<2)>>2]|0)>(c[L+(c[E+(w<<2)>>2]<<2)>>2]|0):0){k=+g[M+(c[K+(u<<2)>>2]<<2)>>2]+j;x=f;continue}k=+g[M+(c[K+(u<<2)>>2]<<2)>>2];x=f}m=+g[J+(n<<2)>>2];if(!n)q=m;else q=+g[I+(n+-1<<2)>>2];if(v){t=c[E+(f<<2)>>2]|0;l=+g[M+(t<<2)>>2];l=((c[L+(t<<2)>>2]|0)>(c[L+(c[E+(w<<2)>>2]<<2)>>2]|0)?l-j:l)-+g[z+(c[K+(u<<2)>>2]<<2)>>2]}else l=1.0e9;l=m<l?m:l;k=q>k?q:k;do if(l<k){o=k>y;if(l<y){l=o?y:k;m=l;break}if(o)m=l;else{m=l;l=k}}else{m=l;l=k}while(0);o=0;while(1){if((o|0)>=(n|0))break;t=c[K+(o<<2)>>2]|0;g[M+(t<<2)>>2]=+g[z+(t<<2)>>2]+l;o=o+1|0}while(1){if((n|0)>=(a|0))break;t=c[K+(n<<2)>>2]|0;g[M+(t<<2)>>2]=+g[z+(t<<2)>>2]+m;n=n+1|0}if(v?(c[L+(c[E+(f<<2)>>2]<<2)>>2]|0)>(c[L+(c[E+(w<<2)>>2]<<2)>>2]|0):0)k=+g[M+(c[K+(u<<2)>>2]<<2)>>2]+j;else k=+g[M+(c[K+(u<<2)>>2]<<2)>>2];a=x;while(1){if((a|0)>(w|0))break;c[E+(a<<2)>>2]=c[K+(a-x<<2)>>2];a=a+1|0}if(e<<24>>24!=0?+B(+(l-y))<.01:0)e=+B(+(m-y))<.01;else e=0;e=e&1}Ts(C,M);Gt(M,E,F,G,i);d=d+1|0}}while(0);return d|0}function Gt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=0;while(1){if((g|0)>=(e|0))break;c[f+(g<<2)>>2]=c[a+(c[b+((c[d+(g<<2)>>2]|0)+-1<<2)>>2]<<2)>>2];g=g+1|0}return}function Ht(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;var i=0.0,j=0,k=0,l=0,m=0;i=-1.0e9;k=0;j=-1;m=0;while(1){if((m|0)>=(b|0))break;if((m|0)<(k|0))l=k;else{j=j+1|0;if((j|0)==(f|0))k=b;else k=c[e+(j<<2)>>2]|0;if((m|0)>0)i=+g[a+(c[d+(m+-1<<2)>>2]<<2)>>2]+h;else i=-1.0e9;hs(a,d,m,k+-1|0);l=k}k=a+(c[d+(m<<2)>>2]<<2)|0;if(+g[k>>2]<i)g[k>>2]=i;k=l;m=m+1|0}return}function It(a){a=a|0;D_(c[c[a>>2]>>2]|0);D_(c[a>>2]|0);D_(c[a+8>>2]|0);D_(c[a+28>>2]|0);D_(c[a+32>>2]|0);D_(c[a+36>>2]|0);D_(c[a+40>>2]|0);D_(c[a+12>>2]|0);D_(c[a+16>>2]|0);D_(c[a+20>>2]|0);D_(c[a+24>>2]|0);D_(a);return}function Jt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=vH(60)|0;c[k>>2]=0;l=k+4|0;c[l>>2]=b;c[k+48>>2]=d;c[k+52>>2]=e;c[k+56>>2]=f;c[k>>2]=Et(a,b)|0;i=b<<2;j=vH(i)|0;c[k+8>>2]=j;h=0;b=0;a=-1;while(1){if((h|0)>=(c[l>>2]|0))break;g=a+1|0;if((h|0)>=(b|0)){b=c[((g|0)==(f|0)?l:e+(g<<2)|0)>>2]|0;a=g}c[j+(c[d+(h<<2)>>2]<<2)>>2]=a;h=h+1|0}c[k+28>>2]=vH(i)|0;c[k+32>>2]=vH(i)|0;c[k+36>>2]=vH(i)|0;c[k+40>>2]=vH(i)|0;c[k+12>>2]=vH(i)|0;c[k+16>>2]=vH(i)|0;c[k+20>>2]=vH(i)|0;c[k+24>>2]=vH(i)|0;return k|0}function Kt(){gt(184592,24);c[46151]=0;return}function Lt(){return it(184592)|0}function Mt(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(+C(+(d*d+c*c)))}function Nt(a){a=a|0;var b=0;b=c[46151]|0;c[a+16>>2]=b;c[46151]=b+1;return}function Ot(a){a=a|0;var b=0,d=0;d=a+20|0;b=(c[d>>2]|0)+-1|0;c[d>>2]=b;if(!b)jt(a,184592);return}function Pt(a){a=a|0;a=a+20|0;c[a>>2]=(c[a>>2]|0)+1;return}function Qt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var i=0.0,j=0,k=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+16|0;o=x;c[o>>2]=e;q=b<<2;v=vH(q)|0;m=b<<3;w=vH(m)|0;u=as(a,b)|0;a=0;while(1){if((a|0)>=(b|0))break;k=u+(a<<2)|0;j=0;while(1){if((j|0)==(b|0))break;s=(c[k>>2]|0)+(j<<2)|0;c[s>>2]=c[s>>2]<<8;j=j+1|0}a=a+1|0}if(!d)qa(92381,92389,283,92403);s=vH(m)|0;a=0;while(1){if((a|0)>=(b|0))break;h[s+(a<<3)>>3]=+h[d+(a<<3)>>3];a=a+1|0}Rt(s,b);i=0.0;n=0.0;m=1;while(1){if((m|0)>=(b|0))break;j=u+(m<<2)|0;k=d+(m<<3)|0;a=0;while(1){if((a|0)==(m|0))break;y=c[(c[j>>2]|0)+(a<<2)>>2]|0;r=+h[k>>3]-+h[d+(a<<3)>>3];i=r*r*(1.0/+(O(y,y)|0))+i;n=+B(+r)*(1.0/+(y|0))+n;a=a+1|0}m=m+1|0}r=n/i;a=0;while(1){if((a|0)>=(b|0))break;y=d+(a<<3)|0;h[y>>3]=+h[y>>3]*r;a=a+1|0}St(b,o,f,d,u);k=vH(O(q,b)|0)|0;j=0;while(1){if((j|0)>=(b|0)){k=1;break}m=k+((O(j,b)|0)<<2)|0;c[v+(j<<2)>>2]=m;o=u+(j<<2)|0;i=0.0;a=0;while(1){if((a|0)==(b|0))break;if((a|0)!=(j|0)){p=+(c[(c[o>>2]|0)+(a<<2)>>2]|0);p=-1.0/(p*p);g[m+(a<<2)>>2]=p;i=i-p}a=a+1|0}g[m+(j<<2)>>2]=i;j=j+1|0}while(1){if((k|0)>=(b|0)){j=0;break}i=+h[d+(k<<3)>>3];j=u+(k<<2)|0;a=0;while(1){if((a|0)==(k|0))break;y=(c[j>>2]|0)+(a<<2)|0;n=+(c[y>>2]|0);p=i-+h[d+(a<<3)>>3];p=n*n-p*p;q=~~+C(+p);q=p>0.0?q:0;c[(c[u+(a<<2)>>2]|0)+(k<<2)>>2]=q;c[y>>2]=q;a=a+1|0}k=k+1|0}while(1){if((j|0)>=(b|0)){q=0;a=0;break}n=+h[e+(j<<3)>>3];m=w+(j<<3)|0;h[m>>3]=0.0;o=u+(j<<2)|0;k=v+(j<<2)|0;a=0;i=0.0;while(1){if((a|0)==(b|0))break;if((a|0)!=(j|0)){p=+g[(c[k>>2]|0)+(a<<2)>>2]*+(c[(c[o>>2]|0)+(a<<2)>>2]|0);i=i+(n>=+h[e+(a<<3)>>3]?-p:p);h[m>>3]=i}a=a+1|0}j=j+1|0}while(1){if(!(a<<24>>24==0&(q|0)<200)){t=42;break}if((Eq(v,e,w,b,f,b,1)|0)<0){a=1;break}else{a=1;o=0}while(1){if((o|0)>=(b|0))break;p=+h[e+(o<<3)>>3];k=u+(o<<2)|0;m=v+(o<<2)|0;i=0.0;j=0;while(1){if((j|0)==(b|0))break;do if((j|0)!=(o|0)){n=+g[(c[m>>2]|0)+(j<<2)>>2]*+(c[(c[k>>2]|0)+(j<<2)>>2]|0);if(!(p>=+h[e+(j<<3)>>3])){i=i+n;break}else{i=i+-n;break}}while(0);j=j+1|0}j=w+(o<<3)|0;p=+h[j>>3];if(i!=p?+B(+(1.0-i/p))>1.0e-05:0){h[j>>3]=i;a=0}o=o+1|0}q=q+1|0}a:do if((t|0)==42){i=1.0/r;a=0;while(1){if((a|0)>=(b|0)){a=0;break a}y=d+(a<<3)|0;h[y>>3]=+h[y>>3]*i;y=e+(a<<3)|0;h[y>>3]=+h[y>>3]*i;a=a+1|0}}while(0);D_(c[u>>2]|0);D_(u);D_(c[v>>2]|0);D_(v);D_(s);D_(w);l=x;return a|0}function Rt(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=0;d=0.0;while(1){if((c|0)>=(b|0))break;e=+h[a+(c<<3)>>3]+d;c=c+1|0;d=e}d=d/+(b|0);c=0;while(1){if((c|0)>=(b|0))break;f=a+(c<<3)|0;h[f>>3]=+h[f>>3]-d;c=c+1|0}f=b+-1|0;Cs(a,0,f,1.0/+Bs(a,0,f),a);return}function St(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0;k=Tt(f,a)|0;l=vH(8)|0;if(!e){f=0;j=0}else{g=vH(a<<3)|0;f=0;while(1){if((f|0)>=(a|0))break;h[g+(f<<3)>>3]=+h[e+(f<<3)>>3];f=f+1|0}Rt(g,a);f=g;j=g}Ut(k,a,b,l,f,d);e=0;while(1){if((e|0)==1)break;g=l+(e<<3)|0;i=b+(e<<2)|0;f=0;while(1){if((f|0)>=(a|0))break;d=+C(+(+B(+(+h[g>>3]))));m=(c[i>>2]|0)+(f<<3)|0;h[m>>3]=+h[m>>3]*d;f=f+1|0}e=e+1|0}D_(c[k>>2]|0);D_(k);D_(l);D_(j);return}function Tt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+16|0;f=o;n=b<<2;e=vH(O(n,b)|0)|0;n=vH(n)|0;d=0;while(1){if((d|0)>=(b|0))break;c[n+(d<<2)>>2]=e+((O(d,b)|0)<<2);d=d+1|0}m=Wt(a,b,f)|0;h=+g[f>>2];e=0;k=1;while(1){if((e|0)>=(b|0))break;f=a+(e<<2)|0;i=m+(e<<2)|0;j=n+(e<<2)|0;d=0;while(1){if((d|0)==(k|0))break;p=+(c[(c[f>>2]|0)+(d<<2)>>2]|0);p=+g[m+(d<<2)>>2]+ +g[i>>2]-p*p-h;g[(c[j>>2]|0)+(d<<2)>>2]=p;g[(c[n+(d<<2)>>2]|0)+(e<<2)>>2]=p;d=d+1|0}e=e+1|0;k=k+1|0}D_(m);l=o;return n|0}function Ut(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0;r=b<<3;q=vH(r)|0;r=vH(r)|0;n=1.0-g;o=(b|0)<1?b:1;p=b+-1|0;k=(f|0)==0;j=0;a:while(1){if((j|0)>=(o|0))break;l=c[d+(j<<2)>>2]|0;do{i=0;while(1){if((i|0)==(b|0))break;h[l+(i<<3)>>3]=+((g2()|0)%100|0|0);i=i+1|0}if(k)i=0;else{As(l,0,p,-+zs(f,0,p,l),f);i=0}while(1){if((i|0)==(j|0))break;s=d+(i<<2)|0;m=-+zs(c[s>>2]|0,0,p,l);As(l,0,p,m,c[s>>2]|0);i=i+1|0}g=+Bs(l,0,p)}while(g<1.0e-10);Cs(l,0,p,1.0/g,l);do{Ds(r,0,p,l);Vt(a,b,b,l,q,f);Ds(l,0,p,q);i=0;while(1){if((i|0)==(j|0))break;s=d+(i<<2)|0;m=-+zs(c[s>>2]|0,0,p,l);As(l,0,p,m,c[s>>2]|0);i=i+1|0}g=+Bs(l,0,p);if(g<1.0e-10)break a;Cs(l,0,p,1.0/g,l);m=+zs(l,0,p,r)}while(+B(+m)<n);h[e+(j<<3)>>3]=m*g;j=j+1|0}while(1){if((j|0)>=(o|0))break;k=c[d+(j<<2)>>2]|0;i=0;while(1){if((i|0)>=(b|0)){i=0;break}h[k+(i<<3)>>3]=+((g2()|0)%100|0|0);i=i+1|0}while(1){if((i|0)>=(j|0))break;s=d+(i<<2)|0;n=-+zs(c[s>>2]|0,0,p,k);As(k,0,p,n,c[s>>2]|0);i=i+1|0}Cs(k,0,p,1.0/+Bs(k,0,p),k);h[e+(j<<3)>>3]=0.0;j=j+1|0}l=o+-1|0;j=0;while(1){if((j|0)>=(l|0))break;a=e+(j<<3)|0;f=j+1|0;g=+h[a>>3];i=j;k=f;while(1){if((k|0)>=(o|0))break;n=+h[e+(k<<3)>>3];s=g<n;g=s?n:g;i=s?k:i;k=k+1|0}if((i|0)==(j|0)){j=f;continue}b=d+(j<<2)|0;Ds(q,0,p,c[b>>2]|0);s=d+(i<<2)|0;Ds(c[b>>2]|0,0,p,c[s>>2]|0);Ds(c[s>>2]|0,0,p,q);h[e+(i<<3)>>3]=+h[a>>3];h[a>>3]=g;j=f}D_(q);D_(r);return}function Vt(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0.0,l=0,m=0;j=0;while(1){if((j|0)>=(b|0))break;m=a+(j<<2)|0;k=0.0;l=0;while(1){if((l|0)>=(d|0))break;k=+h[e+(l<<3)>>3]*+g[(c[m>>2]|0)+(l<<2)>>2]+k;l=l+1|0}h[f+(j<<3)>>3]=k;j=j+1|0}j=b+-1|0;if(i|0)As(f,0,j,-+zs(f,0,j,i),i);return}function Wt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,j=0,k=0.0,l=0,m=0.0;j=vH(b<<2)|0;k=1.0/+(b|0);e=0.0;i=0;while(1){if((i|0)>=(b|0))break;l=a+(i<<2)|0;f=0.0;h=0;while(1){if((h|0)==(b|0))break;m=+(c[(c[l>>2]|0)+(h<<2)>>2]|0);m=m*m;f=m+f;h=h+1|0;e=m+e}g[j+(i<<2)>>2]=k*f;i=i+1|0}g[d>>2]=e/+(O(b,b)|0);return j|0}function Xt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0;q=O(d,d)|0;r=vH(q<<3)|0;s=vH(d<<3)|0;e=0;while(1){if((e|0)>=(d|0))break;h[s+(e<<3)>>3]=+h[c+(e<<3)>>3];e=e+1|0}e=0;while(1){if((e|0)>=(q|0))break;h[r+(e<<3)>>3]=+h[a+(e<<3)>>3];e=e+1|0}p=d+-1|0;g=0;o=0;a:while(1){if((o|0)<(p|0)){f=0.0;e=o}else{l=21;break}while(1){if((e|0)>=(d|0))break;t=+B(+(+h[a+((O(e,d)|0)+o<<3)>>3]));m=t<f;n=m?g:e;f=m?f:t;e=e+1|0;g=n}if(f<1.0e-10){l=33;break}i=O(g,d)|0;n=O(o,d)|0;e=o;while(1){if((e|0)>=(d|0))break;l=a+(e+i<<3)|0;t=+h[l>>3];m=a+(e+n<<3)|0;h[l>>3]=+h[m>>3];h[m>>3]=t;e=e+1|0}m=c+(g<<3)|0;t=+h[m>>3];j=c+(o<<3)|0;h[m>>3]=+h[j>>3];h[j>>3]=t;m=o+1|0;k=a+(n+o<<3)|0;e=m;while(1){if((e|0)>=(d|0)){o=m;continue a}l=O(e,d)|0;f=+h[a+(l+o<<3)>>3]/+h[k>>3];i=c+(e<<3)|0;h[i>>3]=+h[i>>3]-+h[j>>3]*f;i=0;while(1){if((i|0)>=(d|0))break;u=a+(i+l<<3)|0;h[u>>3]=+h[u>>3]-+h[a+(i+n<<3)>>3]*f;i=i+1|0}e=e+1|0}}if((l|0)==21){f=+h[a+(q+-1<<3)>>3];if(+B(+f)<1.0e-10)l=33;else{h[b+(p<<3)>>3]=+h[c+(p<<3)>>3]/f;e=0;while(1){if((e|0)>=(p|0)){e=0;break}g=d-e|0;i=g+-2|0;f=+h[c+(i<<3)>>3];j=b+(i<<3)|0;h[j>>3]=f;k=O(i,d)|0;g=g+-1|0;while(1){if((g|0)>=(d|0))break;t=f-+h[b+(g<<3)>>3]*+h[a+(g+k<<3)>>3];h[j>>3]=t;g=g+1|0;f=t}h[j>>3]=f/+h[a+(k+i<<3)>>3];e=e+1|0}while(1){if((e|0)>=(d|0)){e=0;break}h[c+(e<<3)>>3]=+h[s+(e<<3)>>3];e=e+1|0}while(1){if((e|0)>=(q|0))break;h[a+(e<<3)>>3]=+h[r+(e<<3)>>3];e=e+1|0}D_(r);D_(s)}}if((l|0)==33){k3(92418)|0;D_(r);D_(s)}return}function Yt(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;s=l;l=l+16|0;r=s;nr();Kt();Ir();c[46147]=jb[d&3]()|0;Kr();q=r+8|0;p=jb[d&3]()|0;e=0.0;f=0.0;a:while(1){n=(p|0)==0;o=p+8|0;while(1){if(!(Er()|0)){Fr(r);e=+h[r>>3];f=+h[q>>3]}if(!n){if(Er()|0)break;g=+h[o>>3];if(g<f)break;if(g==f?+h[p>>3]<e:0)break}if(Er()|0)break a;t=Gr()|0;b=Tr(t)|0;v=Sr(t)|0;i=Sr(v)|0;m=Ur(t)|0;u=Vr(v)|0;j=c[t+20>>2]|0;Nt(j);rr(c[t+8>>2]|0,a[t+16>>0]|0,j);rr(c[v+8>>2]|0,a[v+16>>0]|0,j);Rr(t);Dr(v);Rr(v);v=+h[m+8>>3]>+h[u+8>>3];t=v&1;k=v?u:m;u=or(k,v?m:u)|0;m=Lr(u,t)|0;Or(b,m);rr(u,(t^1)&255,j);Ot(j);j=Mr(b,m)|0;if(j|0){Dr(b);Br(b,j,+Mt(j,k))}b=Mr(m,i)|0;if(!b)continue;Br(m,b,+Mt(b,k))}b=Pr(p)|0;k=Sr(b)|0;i=or(Vr(b)|0,p)|0;m=Lr(i,0)|0;Or(b,m);j=Mr(b,m)|0;if(j|0){Dr(b);Br(b,j,+Mt(j,p))}i=Lr(i,1)|0;Or(m,i);b=Mr(i,k)|0;if(b|0)Br(i,b,+Mt(b,p));p=jb[d&3]()|0}b=c[46090]|0;while(1){b=Sr(b)|0;if((b|0)==(c[46091]|0))break;pr(c[b+8>>2]|0)}l=s;return}function Zt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g+8|0;e=g;do if((ay(a)|0)!=1){_t(a);if(!b)b=$t(a)|0;d=au(a,b)|0;if(0){h=c[15686]|0;c[e>>2]=ry(b)|0;c[e+4>>2]=d;g1(h,92434,e)|0}if((d|0)<0){Pw(1,92468,f)|0;break}else{bu(a);cu(a,b);du(a,b);eu(a,d);break}}else{h=c[(c[(Sy(a)|0)+16>>2]|0)+132>>2]|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0}while(0);l=g;return b|0}function _t(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=ay(a)|0;d=O(d,d)|0;b=Sy(a)|0;while(1){if(!b)break;e=b+16|0;f=c[(c[e>>2]|0)+112>>2]|0;g=f+24|0;c[g>>2]=d;c[g+4>>2]=0;h[f+48>>3]=10.0;f=(mu(a,b)|0)==0;e=c[(c[e>>2]|0)+112>>2]|0;c[e>>2]=f?d:0;c[e+4>>2]=f?0:0;b=Ty(a,b)|0}return}function $t(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=(ay(a)|0)<3;b=Sy(a)|0;a:do if(!e){while(1){if(!b)break;e=c[(c[b+16>>2]|0)+112>>2]|0;if((c[e>>2]|0)==0&(c[e+4>>2]|0)==0)lu(a,b,0);b=Ty(a,b)|0}d=0;b=0;e=Sy(a)|0;while(1){if(!e)break a;h=c[(c[e+16>>2]|0)+112>>2]|0;g=c[h>>2]|0;h=c[h+4>>2]|0;f=((d|0)<0)<<31>>31;f=h>>>0>f>>>0|(h|0)==(f|0)&g>>>0>d>>>0;d=f?g:d;b=f?e:b;e=Ty(a,e)|0}}while(0);return b|0}function au(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[(c[b+16>>2]|0)+112>>2]|0;f=d+24|0;e=c[f>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[d+32>>2]=0;iu(a,b);d=Sy(a)|0;e=y3(0,e|0,32)|0;f=z;b=0;while(1){if(!d)break;h=(c[(c[d+16>>2]|0)+112>>2]|0)+24|0;g=c[h>>2]|0;h=c[h+4>>2]|0;if((g|0)==(e|0)&(h|0)==(f|0)){b=-1;break}i=((b|0)<0)<<31>>31;b=h>>>0>i>>>0|(h|0)==(i|0)&g>>>0>b>>>0?g:b;d=Ty(a,d)|0}return b|0}function bu(a){a=a|0;var b=0,d=0,e=0,f=0;d=Sy(a)|0;while(1){if(!d)break;b=c[(c[d+16>>2]|0)+112>>2]|0;e=b+16|0;a:do if((c[e>>2]|0)==0&(c[e+4>>2]|0)==0)while(1){e=b+8|0;f=e;f=s3(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;c[e>>2]=f;c[e+4>>2]=z;b=c[b+32>>2]|0;if(!b)break a;b=c[(c[b+16>>2]|0)+112>>2]|0}while(0);d=Ty(a,d)|0}return}function cu(a,b){a=a|0;b=b|0;h[(c[(c[b+16>>2]|0)+112>>2]|0)+40>>3]=6.283185307179586;hu(a,b);return}function du(a,b){a=a|0;b=b|0;h[(c[(c[b+16>>2]|0)+112>>2]|0)+48>>3]=0.0;gu(a,b);return}function eu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i;g=fu(a,b)|0;if(0){e=c[15686]|0;D1(92524,e)|0;d=0;while(1){if((d|0)>(b|0))break;h[f>>3]=+h[g+(d<<3)>>3];g1(e,92543,f)|0;d=d+1|0}D1(150517,e)|0}d=Sy(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;e=c[f+112>>2]|0;j=+h[g+(c[e+24>>2]<<3)>>3];e=e+48|0;k=+E(+(+h[e>>3]))*j;f=c[f+132>>2]|0;h[f>>3]=k;h[f+8>>3]=+F(+(+h[e>>3]))*j;d=Ty(a,d)|0}D_(g);l=i;return}function fu(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;m=uH((d<<3)+8|0)|0;b=NL(b,nx(c[b+60>>2]|0,0,98262,0)|0,0)|0;a:do if(!b){f=1.0;e=0.0;b=1}else{i=0.0;e=0.0;g=1;b:while(1){if((g|0)>(d|0)){f=i;b=g;break a}f=+c2(b,k);if(!(f>0.0)){f=i;b=g;break a}i=f>.02?f:.02;e=i+e;j=g+1|0;h[m+(g<<3)>>3]=e;b=c[k>>2]|0;while(1){g=a[b>>0]|0;if(!(g<<24>>24)){g=j;continue b}if(!(g<<24>>24==58|(B$(g<<24>>24)|0)!=0)){g=j;continue b}b=b+1|0}}}while(0);while(1){if((b|0)>(d|0))break;i=e+f;h[m+(b<<3)>>3]=i;b=b+1|0;e=i}l=n;return m|0}function gu(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0.0;d=c[(c[b+16>>2]|0)+112>>2]|0;if(!(c[d+32>>2]|0))e=0.0;else e=+h[d+48>>3]-+h[d+40>>3]*.5;g=Jx(a,b)|0;while(1){if(!g)break;d=c[g>>2]&3;f=c[((d|0)==3?g:g+48|0)+40>>2]|0;if((f|0)==(b|0))f=c[((d|0)==2?g:g+-48|0)+40>>2]|0;d=c[(c[f+16>>2]|0)+112>>2]|0;if((c[d+32>>2]|0)==(b|0)?(i=d+48|0,!(+h[i>>3]!=10.0)):0){j=+h[d+40>>3];h[i>>3]=j*.5+e;e=j+e;d=d+16|0;if(!((c[d>>2]|0)==0&(c[d+4>>2]|0)==0))gu(a,f)}g=Kx(a,g,b)|0}return}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0;e=c[(c[b+16>>2]|0)+112>>2]|0;f=e+8|0;g=+h[e+40>>3]/(+((c[f>>2]|0)>>>0)+4294967296.0*+((c[f+4>>2]|0)>>>0));f=Jx(a,b)|0;while(1){if(!f)break;e=c[f>>2]&3;d=c[((e|0)==3?f:f+48|0)+40>>2]|0;if((d|0)==(b|0))d=c[((e|0)==2?f:f+-48|0)+40>>2]|0;e=c[(c[d+16>>2]|0)+112>>2]|0;if(((c[e+32>>2]|0)==(b|0)?(i=e+40|0,!(+h[i>>3]!=0.0)):0)?(j=e+8|0,h[i>>3]=g*(+((c[j>>2]|0)>>>0)+4294967296.0*+((c[j+4>>2]|0)>>>0)),e=e+16|0,!((c[e>>2]|0)==0&(c[e+4>>2]|0)==0)):0)hu(a,d);f=Kx(a,f,b)|0}return}function iu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+16|0;n=p;o=nx(b,2,98515,0)|0;c[n+4>>2]=0;c[n>>2]=0;ju(n,d);j=(o|0)==0;a:while(1){k=ku(n)|0;if(!k)break;m=k+16|0;h=c[(c[(c[m>>2]|0)+112>>2]|0)+24>>2]|0;g=Jx(b,k)|0;h=s3(0,h|0,0,1)|0;h=y3(h|0,z|0,32)|0;i=z;while(1){if(!g)continue a;if(!((!j?(a[(yx(g,o)|0)>>0]|0)==48:0)?!(b$(yx(g,o)|0,135312)|0):0)){d=c[g>>2]&3;e=c[((d|0)==3?g:g+48|0)+40>>2]|0;if((e|0)==(k|0))e=c[((d|0)==2?g:g+-48|0)+40>>2]|0;d=c[(c[e+16>>2]|0)+112>>2]|0;f=d+24|0;q=f;r=c[q+4>>2]|0;if(i>>>0<r>>>0|((i|0)==(r|0)?h>>>0<(c[q>>2]|0)>>>0:0)){r=f;c[r>>2]=h;c[r+4>>2]=i;c[d+32>>2]=k;r=(c[(c[m>>2]|0)+112>>2]|0)+16|0;q=r;q=s3(c[q>>2]|0,c[q+4>>2]|0,1,0)|0;c[r>>2]=q;c[r+4>>2]=z;ju(n,e)}}g=Kx(b,g,k)|0}}l=p;return}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=uH(8)|0;c[d>>2]=b;b=a+4|0;e=c[b>>2]|0;c[((e|0)==0?a:e+4|0)>>2]=d;c[b>>2]=d;return}function ku(a){a=a|0;var b=0,d=0;d=c[a>>2]|0;if(d){b=c[d>>2]|0;c[a>>2]=c[d+4>>2];D_(d);if(!(c[a>>2]|0))c[a+4>>2]=0}else b=0;return b|0}function lu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=c[c[(c[b+16>>2]|0)+112>>2]>>2]|0;g=Jx(a,b)|0;h=s3(0,h|0,0,1)|0;h=y3(h|0,z|0,32)|0;i=z;while(1){if(!g)break;f=c[g>>2]&3;e=c[((f|0)==3?g:g+48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((f|0)==2?g:g+-48|0)+40>>2]|0;if((e|0)!=(d|0)?(j=c[(c[e+16>>2]|0)+112>>2]|0,f=j,k=c[f+4>>2]|0,i>>>0<k>>>0|((i|0)==(k|0)?h>>>0<(c[f>>2]|0)>>>0:0)):0){k=j;c[k>>2]=h;c[k+4>>2]=i;lu(a,e,b)}g=Kx(a,g,b)|0}return}function mu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=0;g=Jx(a,b)|0;while(1){if(!g){d=1;break}e=c[g>>2]&3;d=c[((e|0)==3?g:g+48|0)+40>>2]|0;if((d|0)==(b|0))d=c[((e|0)==2?g:g+-48|0)+40>>2]|0;if((d|0)!=(b|0)){if(f)if((f|0)==(d|0))d=f;else{d=0;break}}else d=f;f=d;g=Kx(a,g,b)|0}return d|0}function nu(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0;b=l;l=l+32|0;e=b;d=nx(a,1,92551,0)|0;g=nx(a,0,92551,0)|0;a=ou(a,g,d,nx(a,0,92556,0)|0)|0;d=a+16|0;f=+C(+(+h[a>>3]+.1));zu(e,0.0,0.0,f,f);c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];c[d+16>>2]=c[e+16>>2];c[d+20>>2]=c[e+20>>2];c[d+24>>2]=c[e+24>>2];c[d+28>>2]=c[e+28>>2];pu(a);qu(a);ru(a);l=b;return}function ou(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=uH(72)|0;c[o+60>>2]=0;c[o+56>>2]=a;k=a+16|0;f=0.0;l=0;i=1;j=0;m=0;while(1){g=c[k>>2]|0;if((i|0)>(c[g+180>>2]|0))break;g=ou(c[(c[g+184>>2]|0)+(i<<2)>>2]|0,b,d,e)|0;f=+h[g>>3]+f;if(j|0)c[j+52>>2]=g;l=l+1|0;i=i+1|0;j=g;m=(m|0)==0?g:m}n=Sy(a)|0;g=m;while(1){if(!n)break;i=n+16|0;if(!(c[c[(c[i>>2]|0)+112>>2]>>2]|0)){k=uu(n,d)|0;f=+h[k>>3]+f;if(j|0)c[j+52>>2]=k;c[c[(c[i>>2]|0)+112>>2]>>2]=a;i=l+1|0;j=k;g=(g|0)==0?k:g}else i=l;n=Ty(a,n)|0;l=i}c[o+64>>2]=l;if(!l)f=+wu(a,b);else{h[o+8>>3]=f;f=+vu(o,e)}h[o>>3]=f;c[o+48>>2]=g;return o|0}function pu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;p=l;l=l+176|0;f=p+144|0;n=p+64|0;k=p+32|0;i=p;o=c[a+64>>2]|0;a:do if(o|0){m=uH(o<<2)|0;b=a+48|0;e=0;d=b;while(1){d=c[d>>2]|0;if((e|0)>=(o|0))break;c[m+(e<<2)>>2]=d;e=e+1|0;d=d+52|0}_0(m,o,4,79);j=uH(o<<3)|0;d=0;while(1){if((d|0)>=(o|0))break;h[j+(d<<3)>>3]=+h[c[m+(d<<2)>>2]>>3];d=d+1|0}g=+h[a+8>>3];if(+h[a>>3]==g){i=a+16|0;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];c[f+16>>2]=c[i+16>>2];c[f+20>>2]=c[i+20>>2];c[f+24>>2]=c[i+24>>2];c[f+28>>2]=c[i+28>>2];i=xu(o,j,f)|0}else{q=+h[a+40>>3];r=+h[a+32>>3];h[i>>3]=+h[a+16>>3];h[i+8>>3]=+h[a+24>>3];s=q-r;g=(r+q-+C(+(g*4.0+s*s)))*.5;h[i+16>>3]=r-g;h[i+24>>3]=q-g;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];c[f+16>>2]=c[i+16>>2];c[f+20>>2]=c[i+20>>2];c[f+24>>2]=c[i+24>>2];c[f+28>>2]=c[i+28>>2];i=xu(o,j,f)|0}if(0){f=c[15686]|0;q=+h[a+24>>3];r=+h[a+32>>3];s=+h[a+40>>3];h[k>>3]=+h[a+16>>3];h[k+8>>3]=q;h[k+16>>3]=r;h[k+24>>3]=s;g1(f,92603,k)|0}e=c[15686]|0;d=0;while(1){if((d|0)>=(o|0))break;k=(c[m+(d<<2)>>2]|0)+16|0;f=i+(d<<5)|0;c[k>>2]=c[f>>2];c[k+4>>2]=c[f+4>>2];c[k+8>>2]=c[f+8>>2];c[k+12>>2]=c[f+12>>2];c[k+16>>2]=c[f+16>>2];c[k+20>>2]=c[f+20>>2];c[k+24>>2]=c[f+24>>2];c[k+28>>2]=c[f+28>>2];if(0){g=+h[f>>3];r=+h[i+(d<<5)+16>>3];u=r*.5;q=+h[i+(d<<5)+8>>3];s=+h[i+(d<<5)+24>>3];t=s*.5;h[n>>3]=+h[j+(d<<3)>>3];h[n+8>>3]=g-u;h[n+16>>3]=q-t;h[n+24>>3]=u+g;h[n+32>>3]=t+q;h[n+40>>3]=s*r;h[n+48>>3]=g;h[n+56>>3]=q;h[n+64>>3]=r;h[n+72>>3]=s;g1(e,92620,n)|0}d=d+1|0}D_(m);D_(j);D_(i);d=0;while(1){b=c[b>>2]|0;if((d|0)>=(o|0))break a;if(!(c[b+60>>2]|0))pu(b);b=b+52|0;d=d+1|0}}while(0);l=p;return}function qu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0;f=l;l=l+48|0;e=f;if(c[a+60>>2]|0){k=+h[a+24>>3];i=+h[a+32>>3];g=+h[a+40>>3];b=c[a+56>>2]|0;d=b+16|0;j=c[d>>2]|0;h[j+16>>3]=+h[a+16>>3];h[j+24>>3]=k;a=c[d>>2]|0;h[a+32>>3]=i*.013888888888888888;h[a+40>>3]=g*.013888888888888888;bN(b,c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1);su(b);if(0){j=c[15686]|0;a=ry(b)|0;d=c[d>>2]|0;m=+h[d+16>>3];g=+h[d+24>>3];i=+h[d+80>>3];k=+h[d+96>>3]+ +h[d+88>>3];c[e>>2]=a;h[e+8>>3]=m;h[e+16>>3]=g;h[e+24>>3]=i;h[e+32>>3]=k;g1(j,92562,e)|0}}else{b=a+48|0;while(1){b=c[b>>2]|0;if(!b)break;qu(b);b=b+52|0}i=+h[a+32>>3];m=+h[a+40>>3];g=+h[a+16>>3]-i*.5;k=+h[a+24>>3]-m*.5;j=c[(c[a+56>>2]|0)+16>>2]|0;h[j+16>>3]=g;h[j+24>>3]=k;h[j+32>>3]=g+i;h[j+40>>3]=k+m}l=f;return}function ru(a){a=a|0;var b=0,d=0,e=0;e=c[a+64>>2]|0;b=a+48|0;d=0;while(1){b=c[b>>2]|0;if((d|0)>=(e|0))break;ru(b);b=b+52|0;d=d+1|0}D_(a);return}function su(b){b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g;d=g+8|0;e=c[46380]|0;if(e|0?(a[(yx(b,e)|0)>>0]|0)==0:0){h[f>>3]=+h[(c[b+16>>2]|0)+80>>3]*.7;Y0(d,92597,f)|0;rx(b,c[46380]|0,d)|0}dM(b);l=g;return}function tu(a,b){a=a|0;b=b|0;var d=0.0;d=+h[c[a>>2]>>3]-+h[c[b>>2]>>3];return (d<0.0?1:(d>0.0)<<31>>31)|0}function uu(a,b){a=a|0;b=b|0;var d=0;d=uH(72)|0;h[d>>3]=+wu(a,b);c[d+60>>2]=1;c[d+56>>2]=a;return d|0}function vu(a,b){a=a|0;b=b|0;var d=0.0;d=+LL(c[a+56>>2]|0,b,0.0,0.0);if(d==0.0)d=+h[a+8>>3];else{d=+C(+(+h[a+8>>3]))+d*2.0;d=d*d}return +d}function wu(a,b){a=a|0;b=b|0;var c=0.0;c=+LL(a,b,1.0,0.0);return +(c==0.0?1.0e3:c*1.0e3)}function xu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0;i=l;l=l+32|0;g=i;e=0;f=0.0;while(1){if((e|0)>=(a|0))break;j=+h[b+(e<<3)>>3]+f;e=e+1|0;f=j}if(f>+h[d+24>>3]*+h[d+16>>3]+.001)e=0;else{e=uH(a<<5)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];c[g+16>>2]=c[d+16>>2];c[g+20>>2]=c[d+20>>2];c[g+24>>2]=c[d+24>>2];c[g+28>>2]=c[d+28>>2];yu(a,b,e,0,0.0,1.0,0.0,1.0,g)}l=i;return e|0}function yu(a,b,d,e,f,g,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;i=+i;j=+j;k=k|0;var m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0.0;z=l;l=l+112|0;y=z+72|0;u=z+40|0;p=z+32|0;m=z;w=k+16|0;q=+h[w>>3];x=k+24|0;r=+h[x>>3];v=+h[k+16+((!(q<r)&1)<<3)>>3];do if((a|0)>=1){if(0){A=c[15686]|0;B=+h[k+8>>3];h[m>>3]=+h[k>>3];h[m+8>>3]=q;h[m+16>>3]=B;h[m+24>>3]=r;g1(A,92657,m)|0;c[p>>2]=e;g1(A,92703,p)|0}if(!e){i=+h[b>>3];B=v*v;v=i/B;B=B/i;c[y>>2]=c[k>>2];c[y+4>>2]=c[k+4>>2];c[y+8>>2]=c[k+8>>2];c[y+12>>2]=c[k+12>>2];c[y+16>>2]=c[k+16>>2];c[y+20>>2]=c[k+20>>2];c[y+24>>2]=c[k+24>>2];c[y+28>>2]=c[k+28>>2];yu(a,b,d,1,i,i,i,v>B?v:B,y);break}if((a|0)>(e|0)?(t=+h[b+(e<<3)>>3],n=t<f?f:t,s=t>g?g:t,t=t+i,o=t/v,o=o*o,B=o/s,o=n/o,o=B>o?B:o,o<=j):0){c[y>>2]=c[k>>2];c[y+4>>2]=c[k+4>>2];c[y+8>>2]=c[k+8>>2];c[y+12>>2]=c[k+12>>2];c[y+16>>2]=c[k+16>>2];c[y+20>>2]=c[k+20>>2];c[y+24>>2]=c[k+24>>2];c[y+28>>2]=c[k+28>>2];yu(a,b,d,e+1|0,n,s,t,o,y);break}q=i/v;if(0){A=c[15686]|0;c[u>>2]=e;h[u+8>>3]=i;h[u+16>>3]=v;h[u+24>>3]=q;g1(A,92728,u)|0}n=+h[w>>3];if(v==n){o=1.0/q;p=k+8|0;n=+h[k>>3]-n*.5;m=0;while(1){if((m|0)>=(e|0))break;h[d+(m<<5)+24>>3]=q;B=+h[b+(m<<3)>>3]*o;h[d+(m<<5)+16>>3]=B;h[d+(m<<5)+8>>3]=(+h[x>>3]-q)*.5+ +h[p>>3];h[d+(m<<5)>>3]=B*.5+n;n=B+n;m=m+1|0}h[p>>3]=+h[p>>3]-q*.5;m=1}else{o=1.0/q;n=+h[x>>3]*.5+ +h[k+8>>3];m=0;while(1){if((m|0)>=(e|0))break;h[d+(m<<5)+16>>3]=q;B=+h[b+(m<<3)>>3]*o;h[d+(m<<5)+24>>3]=B;h[d+(m<<5)>>3]=(q-+h[w>>3])*.5+ +h[k>>3];h[d+(m<<5)+8>>3]=n-B*.5;n=n-B;m=m+1|0}h[k>>3]=+h[k>>3]+q*.5;m=0}A=k+16+(m<<3)|0;h[A>>3]=+h[A>>3]-q;c[y>>2]=c[k>>2];c[y+4>>2]=c[k+4>>2];c[y+8>>2]=c[k+8>>2];c[y+12>>2]=c[k+12>>2];c[y+16>>2]=c[k+16>>2];c[y+20>>2]=c[k+20>>2];c[y+24>>2]=c[k+24>>2];c[y+28>>2]=c[k+28>>2];yu(a-e|0,b+(e<<3)|0,d+(e<<5)|0,0,0.0,0.0,0.0,1.0,y)}while(0);l=z;return}function zu(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function Au(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;D=l;l=l+96|0;C=D+48|0;B=D+24|0;A=D+16|0;z=D+8|0;u=D+80|0;v=D;w=a+16|0;x=d+4|0;y=u+4|0;s=Sy(a)|0;e=0;f=0;i=0;j=0;while(1){if(!s)break;t=Ex(a,s)|0;q=e;r=j;while(1){if(!t)break;e=(b[(c[t+16>>2]|0)+168>>1]|0)==0;do if((s|0)==(c[((c[t>>2]&3|0)==2?t:t+-48|0)+40>>2]|0))if(e){j=q;e=r}else{if(!f){e=uH(96)|0;c[e+84>>2]=uH(((ay(a)|0)<<5)+11520|0)|0;f=e}else e=r;Mm(f,t,c[(c[w>>2]|0)+248>>2]|0);j=q}else if(!e){i=Bu(t,d)|0;j=i+8|0;if(ms(c[j>>2]|0,c[i>>2]|0)|0){k=sU(c[j>>2]|0,c[i>>2]|0)|0;if(!k){Pw(0,92781,z)|0;j=1;e=r;break}else e=t;while(1){if(!e)break;E=e+16|0;F=(c[E>>2]|0)+144|0;Sm(v,e,k,0,c[j>>2]|0,c[i>>2]|0);H=v;G=c[H+4>>2]|0;c[F>>2]=c[H>>2];c[F+4>>2]=G;Um(a,e,c[j>>2]|0,c[i>>2]|0,0);e=c[(c[E>>2]|0)+172>>2]|0}Cu(i);j=q;e=r;break}if(!q){qq(u,a);e=YD(a,8,8)|0;Pw(0,92865,A)|0;n=+(e|0);o=+g[d>>2];p=+g[x>>2];if(!(o>=n)&!(p>=n)){m=+g[u>>2];n=+g[y>>2];if(!(!(m<=o)&!(n<=p))){h[C>>3]=m;h[C+8>>3]=n;h[C+16>>3]=o;h[C+24>>3]=p;Pw(3,92981,C)|0}}else{c[B>>2]=e;h[B+8>>3]=o;h[B+16>>3]=p;Pw(3,92931,B)|0}j=1;e=r}else{j=q;e=r}}else{j=q;e=r}while(0);t=Gx(a,t)|0;q=j;r=e}s=Ty(a,s)|0;e=q;j=r}Du(i);if(f|0){D_(c[f+84>>2]|0);D_(j)}l=D;return e|0}function Bu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+16|0;m=p+4|0;n=p;e=c[b>>2]&3;f=c[((e|0)==2?b:b+-48|0)+40>>2]|0;e=c[((e|0)==3?b:b+48|0)+40>>2]|0;q=f+16|0;h=c[(c[q>>2]|0)+212>>2]|0;c[m>>2]=h;i=e+16|0;g=c[(c[i>>2]|0)+212>>2]|0;c[n>>2]=g;k=uH(12)|0;b=h;j=g;if(a[(c[q>>2]|0)+118>>0]|0){b=c[(c[(c[b+16>>2]|0)+140>>2]|0)+48>>2]|0;c[m>>2]=b;f=h;h=b}if(!(a[(c[i>>2]|0)+118>>0]|0))i=j;else{i=c[(c[(c[j+16>>2]|0)+140>>2]|0)+48>>2]|0;c[n>>2]=i;e=g;g=i}h=c[(c[(c[h+16>>2]|0)+140>>2]|0)+44>>2]|0;g=c[(c[(c[g+16>>2]|0)+140>>2]|0)+44>>2]|0;if((h|0)<=(g|0))if((g|0)>(h|0)){Eu(k,g,e,h,n,d);b=c[n>>2]|0;g=b;e=n;o=11}else h=i;else{Eu(k,h,f,g,m,d);b=c[m>>2]|0;f=b;g=e;e=m;o=11}while(1){if((o|0)==11){c[e>>2]=c[(c[(c[b+16>>2]|0)+140>>2]|0)+48>>2];e=g;b=c[m>>2]|0;h=c[n>>2]|0}if((b|0)==(h|0))break;Fu(k,b,0,f,d);Fu(k,h,e,0,d);c[m>>2]=c[(c[(c[b+16>>2]|0)+140>>2]|0)+48>>2];f=b;g=h;e=n;b=h;o=11}Fu(k,h,e,f,d);l=p;return k|0}function Cu(a){a=a|0;c[a>>2]=0;return}function Du(a){a=a|0;if(a|0){D_(c[a+8>>2]|0);D_(a)}return}function Eu(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=f;while(1){h=c[i>>2]|0;if((b|0)<=(e|0))break;Fu(a,h,d,0,g);b=b+-1|0;i=(c[(c[h+16>>2]|0)+140>>2]|0)+48|0;d=h}c[f>>2]=d;return}function Fu(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=Sy(d)|0;while(1){if(!h)break;i=c[h+16>>2]|0;if(!((h|0)==(f|0)|((h|0)==(e|0)?1:(c[i+212>>2]|0)!=(d|0)))?(a[i+118>>0]|0)==0:0)Gu(b,Pm(h,g,0)|0);h=Ty(d,h)|0}i=d+16|0;d=1;while(1){h=c[i>>2]|0;if((d|0)>(c[h+180>>2]|0))break;h=c[(c[h+184>>2]|0)+(d<<2)>>2]|0;if(!((h|0)==(e|0)|(h|0)==(f|0)))Gu(b,Hu(h,g)|0);d=d+1|0}return}function Gu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;f=c[e>>2]|0;g=a+8|0;d=c[g>>2]|0;do if((f|0)==(c[a>>2]|0))if(!d){d=vH(400)|0;c[g>>2]=d;c[e>>2]=100;break}else{c[e>>2]=f<<1;d=xH(d,f<<3)|0;c[g>>2]=d;break}while(0);g=c[a>>2]|0;c[a>>2]=g+1;c[d+(g<<2)>>2]=b;return}function Hu(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0.0;m=uH(8)|0;b=c[b+16>>2]|0;e=+h[b+16>>3];l=+h[b+24>>3];f=+h[b+32>>3];k=+h[b+40>>3];c[m+4>>2]=4;b=uH(64)|0;c[m>>2]=b;if(!(a[d+8>>0]|0)){p=+g[d>>2];o=+g[d+4>>2];i=(f+e)*.5*(p+-1.0);n=(k+l)*.5*(o+-1.0);j=e*p-i;i=f*p-i;f=k*o-n;e=l*o-n}else{i=+g[d>>2];p=+g[d+4>>2];j=e-i;i=f+i;f=k+p;e=l-p}h[b>>3]=j;h[b+8>>3]=e;h[b+16>>3]=j;h[b+24>>3]=f;h[b+32>>3]=i;h[b+40>>3]=f;h[b+48>>3]=i;h[b+56>>3]=e;return m|0}function Iu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+160|0;n=o+16|0;j=o+8|0;g=o;k=o+24|0;m=uH(ay(b)|0)|0;h=b+16|0;f=c[c[(c[h>>2]|0)+140>>2]>>2]|0;a:do if(!f){g=0;f=0}else{p=ry(b)|0;i=c[46152]|0;c[g>>2]=p;c[g+4>>2]=i;Y0(k,93041,g)|0;i=vA(b,k,1)|0;Az(i,134401,280,1)|0;g=uH(56)|0;c[(c[i+16>>2]|0)+140>>2]=g;c[g>>2]=f;c[g+4>>2]=c[(c[(c[h>>2]|0)+140>>2]|0)+4>>2];while(1){g=c[f+4>>2]|0;if(!g){g=i;f=1;break a}if(!(a[m+(c[(c[g+16>>2]|0)+120>>2]|0)>>0]|0))Ju(b,g,i,m);f=f+16|0}}while(0);h=0;i=Sy(b)|0;while(1){if(!i)break;p=c[i+16>>2]|0;if((a[m+(c[p+120>>2]|0)>>0]|0)==0?(a[p+119>>0]|0)==3:0){if(!g){p=ry(b)|0;g=(c[46152]|0)+f|0;c[j>>2]=p;c[j+4>>2]=g;Y0(k,93041,j)|0;g=vA(b,k,1)|0;Az(g,134401,280,1)|0;p=uH(56)|0;c[(c[g+16>>2]|0)+140>>2]=p;f=f+1|0}Ju(b,i,g,m);h=1}i=Ty(b,i)|0}if(g|0)vD(g)|0;g=Sy(b)|0;while(1){if(!g)break;if(!(a[m+(c[(c[g+16>>2]|0)+120>>2]|0)>>0]|0)){j=ry(b)|0;p=(c[46152]|0)+f|0;c[n>>2]=j;c[n+4>>2]=p;Y0(k,93049,n)|0;p=vA(b,k,1)|0;Az(p,134401,280,1)|0;j=uH(56)|0;c[(c[p+16>>2]|0)+140>>2]=j;Ju(b,g,p,m);vD(p)|0;f=f+1|0}g=Ty(b,g)|0}D_(m);c[46152]=(c[46152]|0)+f;if(d|0)c[d>>2]=f;if(e|0)c[e>>2]=h;i=uH((f<<2)+4|0)|0;h=i;g=wA(b)|0;while(1){if(!g)break;c[h>>2]=g;h=h+4|0;g=xA(g)|0;f=f+-1|0}if(!f){c[h>>2]=0;l=o;return i|0}else qa(93057,93068,134,93075);return 0}function Ju(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a[f+(c[(c[d+16>>2]|0)+120>>2]|0)>>0]=1;Xy(e,d,1)|0;i=Jx(b,d)|0;while(1){if(!i)break;h=c[i>>2]&3;g=c[((h|0)==3?i:i+48|0)+40>>2]|0;if((g|0)==(d|0))g=c[((h|0)==2?i:i+-48|0)+40>>2]|0;if(!(a[f+(c[(c[g+16>>2]|0)+120>>2]|0)>>0]|0))Ju(b,g,e,f);i=Kx(b,i,d)|0}return}function Ku(a){a=a|0;var b=0;b=vH(24)|0;c[46153]=b;c[b>>2]=Cw(18100,c[4555]|0)|0;c[b+16>>2]=0;c[b+12>>2]=0;c[b+4>>2]=Lu(a)|0;return b|0}function Lu(a){a=a|0;var b=0,d=0;b=vH(16)|0;c[b+12>>2]=0;d=vH(a*20|0)|0;c[b>>2]=d;c[b+8>>2]=d+(a*20|0);c[b+4>>2]=d;return b|0}function Mu(a,b,d){a=a|0;b=b|0;d=d|0;d=Ou(c[46153]|0)|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=0;return d|0}function Nu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=(c[b>>2]|0)-(c[d>>2]|0)|0;if(!a)a=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;return a|0}function Ou(a){a=a|0;var b=0,d=0,e=0,f=0;f=a+8|0;a=c[f>>2]|0;b=c[a+4>>2]|0;if((b|0)==(c[a+8>>2]|0)){d=a+12|0;e=c[d>>2]|0;if(!e){a=Lu(((b-(c[a>>2]|0)|0)/20|0)<<1)|0;c[d>>2]=a}else a=e;c[f>>2]=a;b=c[a>>2]|0;c[a+4>>2]=b}c[a+4>>2]=b+20;return b|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+12|0;d=c[f>>2]|0;if((d|0)<(b|0)){e=d<<1;e=(e|0)<(b|0)?b:e;b=a+16|0;d=c[b>>2]|0;if(d|0)D_(d);c[b>>2]=vH(e<<3)|0;c[f>>2]=e}return}function Qu(a){a=a|0;var b=0;b=c[a>>2]|0;nb[c[b>>2]&63](b,0,64)|0;c[a+20>>2]=c[a+16>>2];b=c[a+4>>2]|0;c[a+8>>2]=b;c[b+4>>2]=c[b>>2];return}function Ru(a){a=a|0;yw(c[a>>2]|0)|0;Su(c[a+4>>2]|0);D_(c[a+16>>2]|0);D_(a);return}function Su(a){a=a|0;var b=0;while(1){if(!a)break;b=c[a+12>>2]|0;D_(c[a>>2]|0);D_(a);a=b}return}function Tu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g;h=g+12|0;c[h>>2]=b;c[h+4>>2]=d;i=c[a>>2]|0;h=(nb[c[i>>2]&63](i,h,1)|0)+8|0;c[h>>2]=Uu(a,e,c[h>>2]|0)|0;if(0>2){i=c[15686]|0;h=ry(e)|0;c[f>>2]=b;c[f+4>>2]=d;c[f+8>>2]=h;g1(i,93085,f)|0}l=g;return}function Uu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+20|0;a=c[e>>2]|0;c[e>>2]=a+8;c[a>>2]=b;c[a+4>>2]=d;return a|0}function Vu(a,b){a=a|0;b=b|0;Jw(c[a>>2]|0,b,a)|0;return}function Wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+32|0;f=e;c[f>>2]=b;c[f+4>>2]=d;d=c[a>>2]|0;d=nb[c[d>>2]&63](d,f,4)|0;l=e;return d|0}function Xu(a,b){a=a|0;b=b|0;if((ay(a)|0)==1){a=c[(c[(Sy(a)|0)+16>>2]|0)+132>>2]|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}else{Yu(a);if(!((QL(xx(b,93102)|0)|0)<<24>>24))b=tv(a,183128)|0;else b=Zu(a)|0;Cv(a,b,183128);_u(b)}return}function Yu(a){a=a|0;var b=0;b=ez(c[c[(c[(Sy(a)|0)+16>>2]|0)+112>>2]>>2]|0)|0;a=c[46154]|0;if((b|0)!=(a|0)){c[45785]=0;c[46154]=b;c[46155]=nx(b,0,93111,0)|0;c[46156]=nx(c[46154]|0,1,93119,0)|0;c[46157]=nx(c[46154]|0,1,93136,0)|0;a=c[46154]|0}c[46158]=xx(a,93136)|0;nv(183128);c[45784]=1;h[22895]=+LL(c[46154]|0,c[46155]|0,1.0,0.0);c[45786]=c[46156];c[45787]=c[46157];c[45788]=c[46158];return}function Zu(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+144|0;e=f;d=f+8|0;b=c[45785]|0;c[45785]=b+1;c[e>>2]=b;Y0(d,93152,e)|0;d=ov(vA(a,d,1)|0)|0;e=d+8|0;b=Sy(a)|0;while(1){if(!b)break;Xy(c[e>>2]|0,b,1)|0;c[(c[(c[b+16>>2]|0)+112>>2]|0)+12>>2]=d;b=Ty(a,b)|0}l=f;return d|0}function _u(a){a=a|0;Bv(a);return}function $u(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;av(f,c);bv(a,b,c,f);cv(b,f,d);dv(f);l=e;return}function av(a,b){a=a|0;b=b|0;c[a>>2]=vH(b<<4)|0;c[a+4>>2]=b;c[a+8>>2]=0;return}function bv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=l;l=l+64|0;r=D+32|0;u=D+48|0;v=D+16|0;w=D;t=b<<2;A=vH(t)|0;C=vH(t)|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;s=vH(t)|0;t=vH(t)|0;f=0;while(1){if((f|0)>=(b|0))break;c[s+(f<<2)>>2]=f;f=f+1|0}q=b+-1|0;js(a,s,0,q);f=0;while(1){if((f|0)>=(b|0))break;c[t+(c[s+(f<<2)>>2]<<2)>>2]=f;f=f+1|0}fv(u,a,s,b);f=1;while(1){if((f|0)>=(b|0)){f=0;break}c[A+(c[s+(f<<2)>>2]<<2)>>2]=c[s+(f+-1<<2)>>2];f=f+1|0}while(1){if((f|0)>=(q|0))break;p=f+1|0;c[C+(c[s+(f<<2)>>2]<<2)>>2]=c[s+(p<<2)>>2];f=p}k=e+8|0;m=e+4|0;n=v+4|0;o=w+4|0;p=w+8|0;j=0;while(1){if((j|0)>=(d|0))break;if(!((gv(u,v)|0)<<24>>24))break;f=c[k>>2]|0;b=c[m>>2]|0;if((f|0)<(b|0))b=c[e>>2]|0;else{c[m>>2]=b<<1;b=F_(c[e>>2]|0,b<<5)|0;c[e>>2]=b;f=c[k>>2]|0}c[k>>2]=f+1;f=b+(f<<4)|0;c[f>>2]=c[v>>2];c[f+4>>2]=c[v+4>>2];c[f+8>>2]=c[v+8>>2];c[f+12>>2]=c[v+12>>2];f=c[v>>2]|0;b=c[t+(f<<2)>>2]|0;g=c[n>>2]|0;i=c[t+(g<<2)>>2]|0;if((b|0)>0?(x=c[s+(b+-1<<2)>>2]|0,y=C+(x<<2)|0,(c[t+(c[y>>2]<<2)>>2]|0)<(i|0)):0){c[w>>2]=x;c[o>>2]=g;h[p>>3]=+h[a+(g<<3)>>3]-+h[a+(x<<3)>>3];c[r>>2]=c[w>>2];c[r+4>>2]=c[w+4>>2];c[r+8>>2]=c[w+8>>2];c[r+12>>2]=c[w+12>>2];hv(u,r);c[y>>2]=g;c[A+(g<<2)>>2]=x}if((i|0)<(q|0)?(z=c[s+(i+1<<2)>>2]|0,B=A+(z<<2)|0,(c[t+(c[B>>2]<<2)>>2]|0)>(b|0)):0){c[w>>2]=f;c[o>>2]=z;h[p>>3]=+h[a+(z<<3)>>3]-+h[a+(f<<3)>>3];c[r>>2]=c[w>>2];c[r+4>>2]=c[w+4>>2];c[r+8>>2]=c[w+8>>2];c[r+12>>2]=c[w+12>>2];hv(u,r);c[B>>2]=f;c[C+(f<<2)>>2]=z}j=j+1|0}D_(A);D_(C);D_(s);D_(t);iv(u);l=D;return}function cv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=vH(a<<2)|0;l=b+8|0;i=c[l>>2]|0;j=(i<<1)+a|0;h=j<<2;e=vH(h)|0;h=vH(h)|0;f=0;while(1){if((f|0)>=(a|0))break;c[k+(f<<2)>>2]=1;f=f+1|0}f=0;while(1){if((f|0)>=(i|0)){f=0;break}n=c[b>>2]|0;m=c[n+(f<<4)+4>>2]|0;n=k+(c[n+(f<<4)>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;m=k+(m<<2)|0;c[m>>2]=(c[m>>2]|0)+1;f=f+1|0}while(1){if((f|0)>=(j|0))break;g[h+(f<<2)>>2]=1.0;f=f+1|0}i=vH(a*20|0)|0;c[d>>2]=i;f=0;while(1){if((f|0)>=(a|0))break;c[i+(f*20|0)>>2]=1;c[i+(f*20|0)+8>>2]=h;c[i+(f*20|0)+4>>2]=e;c[e>>2]=f;g[h>>2]=0.0;n=c[k+(f<<2)>>2]|0;h=h+(n<<2)|0;e=e+(n<<2)|0;f=f+1|0}D_(k);while(1){e=c[l>>2]|0;if(!e)break;n=e+-1|0;c[l>>2]=n;m=c[b>>2]|0;ev(i,c[m+(n<<4)>>2]|0,c[m+(n<<4)+4>>2]|0)}return}function dv(a){a=a|0;D_(c[a>>2]|0);return}function ev(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0;f=a+(b*20|0)|0;h=c[f>>2]|0;i=c[a+(b*20|0)+4>>2]|0;e=0;while(1){if((e|0)>=(h|0)){j=4;break}if((c[i+(e<<2)>>2]|0)==(d|0))break;else e=e+1|0}if((j|0)==4?(c[f>>2]=h+1,c[i+(h<<2)>>2]=d,i=c[a+(d*20|0)+4>>2]|0,h=a+(d*20|0)|0,j=c[h>>2]|0,c[h>>2]=j+1,c[i+(j<<2)>>2]=b,c[a+8>>2]|0):0){j=c[a+(b*20|0)+8>>2]|0;g[j>>2]=+g[j>>2]+-1.0;j=c[a+(d*20|0)+8>>2]|0;g[j>>2]=+g[j>>2]+-1.0}return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0,k=0,l=0;f=e+-1|0;c[a+4>>2]=f;c[a+8>>2]=f;c[a>>2]=vH(f<<4)|0;e=0;while(1){if((e|0)>=(f|0))break;l=c[d+(e<<2)>>2]|0;g=e+1|0;k=c[d+(g<<2)>>2]|0;j=+h[b+(k<<3)>>3]-+h[b+(l<<3)>>3];i=c[a>>2]|0;c[i+(e<<4)>>2]=l;c[i+(e<<4)+4>>2]=k;h[i+(e<<4)+8>>3]=j;e=g}e=(f|0)/2|0;while(1){if((e|0)<=-1)break;jv(a,e);e=e+-1|0}return}function gv(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+4|0;if(!(c[d>>2]|0))a=0;else{e=c[a>>2]|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];b=c[a>>2]|0;e=b+((c[d>>2]|0)+-1<<4)|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];c[d>>2]=(c[d>>2]|0)+-1;jv(a,0);a=1}return a|0}function hv(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;j=a+4|0;g=c[j>>2]|0;d=a+8|0;if((g|0)==(c[d>>2]|0)){c[d>>2]=g<<1;d=F_(c[a>>2]|0,g<<5)|0;c[a>>2]=d;k=a;i=c[j>>2]|0}else{k=a;i=g;d=c[a>>2]|0}c[j>>2]=i+1;j=d+(g<<4)|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];while(1){if((g|0)<=0)break;d=c[k>>2]|0;e=+h[d+(g<<4)+8>>3];a=g>>>1;f=+h[d+(a<<4)+8>>3];if(!(e<f)){if(!(e==f))break;if(!((g2()|0)&1))break;d=c[k>>2]|0}j=d+(g<<4)|0;c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];c[m+12>>2]=c[j+12>>2];b=d+(a<<4)|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];j=(c[k>>2]|0)+(a<<4)|0;c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];g=a}l=n;return}function iv(a){a=a|0;D_(c[a>>2]|0);return}function jv(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m;j=a+4|0;while(1){d=b<<1;g=d|1;if((d|0)<(c[j>>2]|0)){n=c[a>>2]|0;e=+h[n+(d<<4)+8>>3];f=+h[n+(b<<4)+8>>3];if(!(e<f))if(!(e==f?((g2()|0)&1|0)!=0:0))k=6}else k=6;if((k|0)==6){k=0;d=b}do if((g|0)<(c[j>>2]|0)){n=c[a>>2]|0;e=+h[n+(g<<4)+8>>3];f=+h[n+(d<<4)+8>>3];if(!(e<f)){if(!(e==f))break;if(!((g2()|0)&1))break}d=g}while(0);if((d|0)==(b|0))break;g=c[a>>2]|0;n=g+(d<<4)|0;c[i>>2]=c[n>>2];c[i+4>>2]=c[n+4>>2];c[i+8>>2]=c[n+8>>2];c[i+12>>2]=c[n+12>>2];g=g+(b<<4)|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];n=(c[a>>2]|0)+(b<<4)|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];b=d}l=m;return}function kv(a,b,d,e,f,g,i,j){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0;l=(f|0)!=0;if(!l){f=vH(b<<3)|0;if(!(kt(a,b,f,b)|0))m=3;else{a=1;m=17}}else m=3;if((m|0)==3){k=uH(b<<2)|0;c[g>>2]=k;a=0;while(1){if((a|0)>=(b|0))break;c[k+(a<<2)>>2]=a;a=a+1|0}a=b+-1|0;js(f,k,0,a);n=+h[f+(c[k>>2]<<3)>>3];e=(+h[f+(c[k+(a<<2)>>2]<<3)>>3]-n)*e/+(a|0);e=e<d?d:e;a=0;g=1;d=n;while(1){if((g|0)>=(b|0))break;n=+h[f+(c[k+(g<<2)>>2]<<3)>>3];a=a+(n-d>e&1)|0;g=g+1|0;d=n}c[j>>2]=a;a:do if(!a){k=vH(4)|0;c[i>>2]=k;c[k>>2]=b}else{j=vH(a<<2)|0;c[i>>2]=j;a=0;g=1;while(1){if((g|0)>=(b|0))break a;if(+h[f+(c[k+(g<<2)>>2]<<3)>>3]-+h[f+(c[k+(g+-1<<2)>>2]<<3)>>3]>e){c[j+(a<<2)>>2]=g;a=a+1|0}g=g+1|0}}while(0);if(l)a=0;else{a=0;m=17}}if((m|0)==17)D_(f);return a|0}function lv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=c[46159]|0;if(d|0)xn(d);c[46159]=wn(b,b,0.0)|0;d=c[46160]|0;if(d|0)D_(d);c[46160]=uH(b<<2)|0;d=c[46161]|0;if(d|0)D_(d);n=uH(b<<3)|0;c[46161]=n;o=c[46159]|0;p=c[46160]|0;i=0;while(1){if((i|0)>=(b|0)){e=10;break}e=a+(i<<2)|0;g=o+(i<<2)|0;f=0.0;d=0;while(1){if((d|0)==(b|0))break;j=+h[(c[e>>2]|0)+(d<<3)>>3];h[(c[g>>2]|0)+(d<<3)>>3]=j;j=+B(+j);f=f<j?j:f;d=d+1|0}if(!(f!=0.0)){e=15;break}h[n+(i<<3)>>3]=1.0/f;c[p+(i<<2)>>2]=i;i=i+1|0}a:do if((e|0)==10){m=b+-1|0;d=0;l=0;b:while(1){if((l|0)<(m|0)){e=l;k=d;f=0.0}else break;while(1){if((e|0)>=(b|0))break;a=c[p+(e<<2)>>2]|0;j=+B(+(+h[(c[o+(a<<2)>>2]|0)+(l<<3)>>3]));j=+h[n+(a<<3)>>3]*j;a=f<j;i=a?e:k;e=e+1|0;k=i;f=a?j:f}if(f==0.0){d=0;break a}d=p+(l<<2)|0;if((k|0)!=(l|0)){i=c[d>>2]|0;a=p+(k<<2)|0;c[d>>2]=c[a>>2];c[a>>2]=i}g=c[o+(c[d>>2]<<2)>>2]|0;a=l+1|0;f=1.0/+h[g+(l<<3)>>3];e=a;while(1){if((e|0)>=(b|0)){d=k;l=a;continue b}i=c[o+(c[p+(e<<2)>>2]<<2)>>2]|0;d=i+(l<<3)|0;j=+h[d>>3]*f;h[d>>3]=j;c:do if(j!=0.0){d=a;while(1){if((d|0)>=(b|0))break c;q=i+(d<<3)|0;h[q>>3]=+h[q>>3]-+h[g+(d<<3)>>3]*j;d=d+1|0}}while(0);e=e+1|0}}d=+h[(c[o+(c[p+(m<<2)>>2]<<2)>>2]|0)+(m<<3)>>3]!=0.0&1}else if((e|0)==15){h[n+(i<<3)>>3]=0.0;d=0}while(0);return d|0}function mv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0,k=0,l=0;k=c[46159]|0;l=c[46160]|0;j=0;while(1){if((j|0)>=(d|0)){e=d;break}g=c[l+(j<<2)>>2]|0;i=k+(g<<2)|0;f=0.0;e=0;while(1){if((e|0)==(j|0))break;f=+h[a+(e<<3)>>3]*+h[(c[i>>2]|0)+(e<<3)>>3]+f;e=e+1|0}h[a+(j<<3)>>3]=+h[b+(g<<3)>>3]-f;j=j+1|0}while(1){b=e+-1|0;if((e|0)<=0)break;g=l+(b<<2)|0;f=0.0;while(1){if((e|0)>=(d|0))break;f=+h[a+(e<<3)>>3]*+h[(c[k+(c[g>>2]<<2)>>2]|0)+(e<<3)>>3]+f;e=e+1|0}e=a+(b<<3)|0;h[e>>3]=(+h[e>>3]-f)/+h[(c[k+(c[g>>2]<<2)>>2]|0)+(b<<3)>>3];e=b}return}function nv(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;return}function ov(a){a=a|0;var b=0;b=uH(64)|0;nv(b+36|0);c[b+8>>2]=a;return b|0}function pv(a){a=a|0;if(a|0){Lv(c[a+32>>2]|0);D_(a)}return}function qv(a){a=a|0;return ay(c[a+8>>2]|0)|0}function rv(a,b){a=a|0;b=b|0;var d=0,e=0;c[b+4>>2]=0;d=a+4|0;e=c[d>>2]|0;c[((e|0)==0?a:e+4|0)>>2]=b;c[d>>2]=b;return}function sv(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(!d){c[a>>2]=b;a=a+4|0}else c[b+4>>2]=d;c[a>>2]=b;return}function tv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;uv(a,b);j=c[b>>2]|0;h=c[j+4>>2]|0;while(1){if(!h)break;k=c[h+8>>2]|0;i=Sy(k)|0;d=c[(c[i+16>>2]|0)+112>>2]|0;a=c[d+16+4>>2]|0;d=c[d+8>>2]|0;f=i;i=Ty(k,i)|0;while(1){if(!i)break;e=c[(c[i+16>>2]|0)+112>>2]|0;g=c[e+16+4>>2]|0;if((g|0)<(a|0)){f=i;d=c[e+8>>2]|0;a=g}i=Ty(k,i)|0}i=c[(c[d+16>>2]|0)+112>>2]|0;k=i+4|0;c[k>>2]=c[k>>2]|8;c[h>>2]=f;k=c[h+4>>2]|0;rv((c[i+12>>2]|0)+36|0,h);h=k}nv(b);return j|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;g=i+8|0;e=c[b+24>>2]|0;if(!((e|0)!=0?(d=az(a,e,0)|0,(d|0)!=0):0))f=3;a:do if((f|0)==3){e=b+20|0;b:do if(c[e>>2]|0){d=Sy(a)|0;while(1){if(!d)break b;if((PL(c[c[(c[d+16>>2]|0)+112>>2]>>2]|0,c[e>>2]|0,0)|0)<<24>>24)break a;d=Ty(a,d)|0}}while(0);d=Sy(a)|0}while(0);if(0){f=c[15686]|0;c[h>>2]=ry(d)|0;g1(f,93141,h)|0}c[g+4>>2]=0;c[g>>2]=0;vv(a,d,b,1,g);l=i;return}function vv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=d+8|0;k=c[l>>2]|0;c[l>>2]=k+1;l=b+16|0;c[(c[(c[l>>2]|0)+112>>2]|0)+16+4>>2]=k;c[(c[(c[l>>2]|0)+112>>2]|0)+24>>2]=k;k=(e|0)==0;j=Jx(a,b)|0;while(1){if(!j)break;e=c[j>>2]&3;g=c[((e|0)==2?j:j+-48|0)+40>>2]|0;if((g|0)==(b|0)){e=c[((e|0)==3?j:j+48|0)+40>>2]|0;g=c[(c[j+16>>2]|0)+120>>2]|0;if(!(c[g>>2]|0))c[g>>2]=-1}else{e=c[(c[j+16>>2]|0)+120>>2]|0;if(!(c[e>>2]|0)){c[e>>2]=1;e=g}else e=g}g=e+16|0;h=c[(c[g>>2]|0)+112>>2]|0;i=c[h+16+4>>2]|0;do if(!i){c[h+8>>2]=b;wv(f,j);vv(a,e,d,0,f);i=(c[(c[l>>2]|0)+112>>2]|0)+24|0;c[i>>2]=c[(c[(c[((c[i>>2]|0)<(c[(c[(c[g>>2]|0)+112>>2]|0)+24>>2]|0)?b:e)+16>>2]|0)+112>>2]|0)+24>>2];if((c[(c[(c[g>>2]|0)+112>>2]|0)+24>>2]|0)>=(c[(c[(c[l>>2]|0)+112>>2]|0)+16+4>>2]|0)){e=0;do{h=xv(f)|0;g=(c[c[(c[h+16>>2]|0)+120>>2]>>2]|0)==1;g=c[((c[h>>2]&3|0)==((g?2:3)|0)?h:h+((g?-1:1)*48|0)|0)+40>>2]|0;if(!(c[(c[(c[g+16>>2]|0)+112>>2]|0)+12>>2]|0)){if(!e)e=yv(a,d)|0;zv(e,g)}}while((h|0)!=(j|0));if(e|0){if((c[(c[(c[l>>2]|0)+112>>2]|0)+12>>2]|0)==0?(qv(e)|0)>1:0)zv(e,b);if(!k?(c[(c[(c[l>>2]|0)+112>>2]|0)+12>>2]|0)==(e|0):0){sv(d,e);break}rv(d,e)}}}else{g=c[(c[l>>2]|0)+112>>2]|0;if((c[g+8>>2]|0)!=(e|0)){h=g+24|0;g=c[h>>2]|0;c[h>>2]=(g|0)<(i|0)?g:i}}while(0);j=Kx(a,j,b)|0}if(!k?(c[(c[(c[l>>2]|0)+112>>2]|0)+12>>2]|0)==0:0){l=yv(a,d)|0;zv(l,b);sv(d,l)}return}function wv(a,b){a=a|0;b=b|0;c[(c[(c[b+16>>2]|0)+120>>2]|0)+4>>2]=c[a>>2];c[a>>2]=b;b=a+4|0;c[b>>2]=(c[b>>2]|0)+1;return}function xv(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;if(!b)qa(135312,93172,65,93184);d=a+4|0;e=c[d>>2]|0;if((e|0)>0){c[a>>2]=c[(c[(c[b+16>>2]|0)+120>>2]|0)+4>>2];c[d>>2]=e+-1;return b|0}else qa(93162,93172,61,93184);return 0}function yv(a,b){a=a|0;b=b|0;return ov(Av(a,b)|0)|0}function zv(a,b){a=a|0;b=b|0;Xy(c[a+8>>2]|0,b,1)|0;c[(c[(c[b+16>>2]|0)+112>>2]|0)+12>>2]=a;return}function Av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+144|0;f=d;e=d+8|0;g=b+12|0;b=c[g>>2]|0;c[g>>2]=b+1;c[f>>2]=b;Y0(e,93152,f)|0;b=vA(a,e,1)|0;Az(b,134401,280,1)|0;l=d;return b|0}function Bv(a){a=a|0;var b=0,d=0;b=c[a+36>>2]|0;while(1){if(!b)break;d=c[b+4>>2]|0;Bv(b);b=d}pv(a);return}function Cv(a,b,c){a=a|0;b=b|0;c=c|0;Dv(a,b,+h[c+32>>3]);return}function Dv(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;e=b+36|0;f=0;while(1){e=c[e>>2]|0;if(!e)break;Dv(a,e,d);e=e+4|0;f=f+1|0}e=Vv(a,b,d)|0;c[b+32>>2]=e;a=Sv(e)|0;if((f|0)>0)d=+Ev(f,a,e,b,d);else d=3.141592653589793;if((((a|0)==1?(g=c[b>>2]|0,g|0):0)?c[(c[(c[g+16>>2]|0)+112>>2]|0)+8>>2]|0:0)?(i=b+48|0,h[i>>3]=d,d<0.0):0)h[i>>3]=d+6.283185307179586;return}function Ev(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+48|0;t=v;u=uH(a*56|0)|0;c[t+40>>2]=c[e+36>>2];p=e+16|0;j=+h[p>>3];q=t+8|0;h[q>>3]=j;h[t>>3]=j;c[t+44>>2]=c[e>>2];j=6.283185307179586/+(b|0);h[t+16>>3]=j;r=t+24|0;h[r>>3]=-1.0;s=t+32|0;h[s>>3]=-1.0;k=0;o=0;g=0.0;while(1){i=c[d>>2]|0;if(!i)break;d=c[i>>2]|0;if(!(c[(c[(c[d+16>>2]|0)+112>>2]|0)+4>>2]&8))d=o;else{n=u+(o*56|0)|0;c[n>>2]=d;h[u+(o*56|0)+8>>3]=j*+(k|0);d=o+1|0;g=+Fv(n,t,f)}k=k+1|0;o=d;d=i+4|0}a:do switch(o|0){case 1:{h[u+40>>3]=1.0;d=0;break}case 2:{j=+h[u+64>>3]-+h[u+8>>3];Gv(u,u+56|0,j>3.141592653589793?6.283185307179586-j:j);d=0;break}default:{n=u+8|0;m=u;d=0;while(1){if((d|0)>=(o|0)){d=0;break a}d=d+1|0;if((d|0)==(o|0)){i=u;j=+h[n>>3]+6.283185307179586-+h[m+8>>3];k=m+56|0}else{k=m+56|0;i=k;j=+h[m+64>>3]-+h[m+8>>3]}Gv(m,i,j);m=k}}}while(0);while(1){if((d|0)>=(o|0))break;Hv(u+(d*56|0)|0,t,b,f);d=d+1|0}D_(u);if((a|0)==1){f=g+f*.5;Iv(e,-f,0.0,0.0);h[p>>3]=+h[p>>3]+f;u=e+56|0;c[u>>2]=c[u>>2]|1}else h[p>>3]=+h[q>>3];l=v;return +((+h[s>>3]+ +h[r>>3])*.5+-3.141592653589793)}function Fv(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,g=0.0,i=0,j=0,k=0.0;i=0;f=0.0;g=0.0;e=b+40|0;while(1){j=c[e>>2]|0;if(!j)break;e=c[j>>2]|0;if(!e)e=0;else e=c[(c[(c[e+16>>2]|0)+112>>2]|0)+8>>2]|0;if((e|0)==(c[a>>2]|0)){k=+h[j+16>>3];e=i+1|0;f=f+d+k*2.0;g=g<k?k:g}else e=i;i=e;e=j+4|0}h[a+32>>3]=f;c[a+48>>2]=i;h[a+16>>3]=g+d+ +h[b>>3];h[a+24>>3]=g;return +g}function Gv(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0;e=+h[b+16>>3];d=+h[a+16>>3];c=(d*+h[b+32>>3]+e*+h[a+32>>3])/(c*2.0*e*d);c=c<1.0?1.0:c;a=a+40|0;if(c>+h[a>>3])h[a>>3]=c;a=b+40|0;if(c>+h[a>>3])h[a>>3]=c;return}function Hv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,g=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,G=0.0;z=b+8|0;y=+h[z>>3];A=b+24|0;k=+h[A>>3];B=b+32|0;j=+h[B>>3];f=+h[a+16>>3]*+h[a+40>>3];x=(d|0)==1;if(x){v=+h[a+32>>3];g=v*.15915494309189535;g=f>g?f:g;f=g*6.283185307179586-v;if(f>0.0){e=f/+(c[a+48>>2]|0)+e;l=0.0;f=g}else{l=0.0;f=g}}else l=+h[a+8>>3]-+h[a+32>>3]/(f*2.0);q=+h[a+24>>3]+f;r=q>y;s=a+48|0;t=((c[s>>2]|0)+1|0)/2|0;u=1.0/f;v=e/f*.5;w=a+8|0;n=b+40|0;o=0;p=0.0;g=l;while(1){n=c[n>>2]|0;if(!n)break;i=c[n>>2]|0;if(!i)i=0;else i=c[(c[(c[i+16>>2]|0)+112>>2]|0)+8>>2]|0;if((i|0)==(c[a>>2]|0)?(Sv(c[n+32>>2]|0)|0)>=1:0){l=+h[n+16>>3];m=l*u;do if(!x)if((c[s>>2]|0)==1){g=+h[w>>3];break}else{g=g+v+m;break}else{if(g!=0.0)g=(c[s>>2]|0)==2?3.141592653589793:m+g;j=g;k=k<0.0?g:k}while(0);G=+E(+g)*f;D=+F(+g)*f;Iv(n,G,D,+Jv(n,G,D,g));g=(x?(l+e)*u:m+v)+g;o=o+1|0;i=o;l=(o|0)==(t|0)?g:p}else{i=o;l=p}n=n+4|0;o=i;p=l}f=r?q:y;if((d|0)>1?(C=c[a>>2]|0,(C|0)==(c[b+44>>2]|0)):0)h[(c[(c[C+16>>2]|0)+112>>2]|0)+24>>3]=p;h[z>>3]=f;h[A>>3]=k;h[B>>3]=j;return}function Iv(a,b,d,e){a=a|0;b=+b;d=+d;e=+e;var f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0.0;m=c[a+8>>2]|0;n=e!=0.0;f=Sy(m)|0;while(1){if(!f)break;k=c[(c[f+16>>2]|0)+132>>2]|0;i=+h[k>>3];l=k+8|0;g=+h[l>>3];if(n){o=+E(+e);p=+F(+e);j=o*i-p*g;g=p*i+o*g}else j=i;h[k>>3]=j+b;h[l>>3]=g+d;f=Ty(m,f)|0}f=a+36|0;while(1){f=c[f>>2]|0;if(!f)break;Iv(f,b,d,e);f=f+4|0}return}function Jv(a,b,d,e){a=a|0;b=+b;d=+d;e=+e;var f=0.0,g=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0;m=c[a+8>>2]|0;f=+h[a+48>>3];do if(!(f>=0.0)){if((Sv(c[a+32>>2]|0)|0)==2){f=e+-1.5707963267948966;break}l=c[a>>2]|0;n=l+16|0;i=c[(c[n>>2]|0)+132>>2]|0;f=+h[i>>3]+b;k=+h[i+8>>3]+d;f=k*k+f*f;i=Sy(m)|0;g=l;while(1){if(!i)break;if((i|0)!=(l|0)?(o=c[(c[i+16>>2]|0)+132>>2]|0,j=+h[o>>3]+b,k=+h[o+8>>3]+d,j=k*k+j*j,j<f):0){f=j;g=i}i=Ty(m,i)|0}if((l|0)!=(g|0)){j=+h[a+24>>3];k=+h[a+16>>3]-j;g=c[n>>2]|0;i=c[g+132>>2]|0;f=+h[i>>3];if(f>-k?(c[a+56>>2]&1|0)!=0:0){d=+C(+(d*d+b*b));b=+K(+(+h[i+8>>3]),+(f+k));f=+E(+b);f=e+1.5707963267948966-b-+I(+((k-j/f)/d*f));break}else{f=+K(+(+h[i+8>>3]),+f);f=e+3.141592653589793-f-+h[(c[g+112>>2]|0)+24>>3];f=f>6.283185307179586?f+-6.283185307179586:f;break}}else f=0.0}else{f=3.141592653589793-f+e;f=f<0.0?f+6.283185307179586:f}while(0);return +f}function Kv(){return uH(12)|0}function Lv(a){a=a|0;var b=0,d=0;if(a|0){b=c[a>>2]|0;while(1){if(!b)break;d=c[b+4>>2]|0;D_(b);b=d}D_(a)}return}function Mv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=Nv(d)|0;d=a+8|0;c[d>>2]=(c[d>>2]|0)+1;d=a+4|0;e=c[d>>2]|0;if((b|0)==0|(e|0)==(b|0)){c[(e|0?e+4|0:a)>>2]=f;c[f+8>>2]=e;e=0}else{e=b+4|0;d=c[e>>2]|0;c[e>>2]=f;c[f+8>>2]=b;e=d;d=d+8|0}c[d>>2]=f;c[f+4>>2]=e;return}function Nv(a){a=a|0;var b=0;b=uH(12)|0;c[b>>2]=a;return b|0}function Ov(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=c[a>>2]|0;d=b;while(1){if(!b)break;g=b+4|0;e=c[g>>2]|0;f=b+8|0;c[g>>2]=c[f>>2];c[f>>2]=e;b=e}f=a+4|0;g=c[f>>2]|0;c[f>>2]=d;c[a>>2]=g;return a|0}function Pv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)!=(b|0)){f=b+8|0;e=c[f>>2]|0;c[a>>2]=b;c[f>>2]=0;b=a+4|0;a=c[b>>2]|0;c[a+4>>2]=d;c[d+8>>2]=a;c[b>>2]=e;c[e+4>>2]=0}return}function Qv(a){a=a|0;var b=0,d=0,e=0;d=Kv()|0;e=d+4|0;b=0;while(1){a=c[a>>2]|0;if(!a)break;Mv(d,b,c[a>>2]|0);b=c[e>>2]|0;a=a+4|0}return d|0}\n  function Bb(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Cb(){return l|0}function Db(a){a=a|0;l=a}function Eb(a,b){a=a|0;b=b|0;l=a;m=b}function Fb(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function Gb(a){a=a|0;z=a}function Hb(){return z|0}function Ib(a){a=a|0;c[45884]=a;return 0}function Jb(){return c[45884]|0}function Kb(a,b){a=a|0;b=b|0;Oa(0,a|0,b|0)|0;return}function Lb(a){a=a|0;c[46369]=a;return}function Mb(a){a=a|0;if(a|0)c[46363]=a;return}function Nb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i+4|0;g=i;c[f>>2]=0;h=ZC()|0;cD(h,10976);cD(h,17220);cD(h,17440);Ow(1)|0;Nw(18)|0;Tz(1);while(1){a=Gy(a)|0;e=c[f>>2]|0;if(!a)break;if(!e){_C(h,a,d)|0;bD(h,a,b,f,g)|0;WB(h,a)|0}$x(a)|0;a=191979}l=i;return e|0}function Ob(a){a=a|0;var d=0,e=0,f=0,g=0;g=l;l=l+16|0;d=g+4|0;e=g;f=c[(c[a+16>>2]|0)+8>>2]|0;a=a+64|0;switch(c[a>>2]|0){case 0:{uI(f);break}case 1:{if(b[(c[f+16>>2]|0)+136>>1]&1)FM(f);break}case 4:case 5:case 6:{rI(f,e,d);Rb(f,c[e>>2]|0,c[d>>2]|0,c[a>>2]|0);break}default:{}}l=g;return}function Pb(a){a=a|0;var b=0,d=0,e=0,f=0;d=c[(c[a+16>>2]|0)+8>>2]|0;if(!(c[45885]|0)){c[45885]=c[4652];c[45886]=57;c[45887]=19}e=d+64|0;f=(c[e>>2]|0)+8|0;b=c[f>>2]|0;c[f>>2]=183540;switch(c[a+64>>2]|0){case 2:{hI(a,d,a,0);break}case 3:{hI(a,d,a,1);break}case 1:case 0:{if(!(c[a+152>>2]&134217728))NA(d,a)|0;break}case 6:case 5:case 4:{Qb(d);if(!(c[a+152>>2]&134217728))NA(d,a)|0;break}default:{}}c[(c[e>>2]|0)+8>>2]=b;return}function Qb(b){b=b|0;var d=0,e=0;d=c[45889]|0;if((d|0)!=(c[45888]|0)){e=c[c[45920]>>2]|0;if(!e){e=LM(b,0,96782,191979)|0;c[c[45920]>>2]=e;d=c[45889]|0}if(d>>>0>=(c[45890]|0)>>>0){Uw(183552,1)|0;d=c[45889]|0}a[d>>0]=0;d=c[45888]|0;c[45889]=d;rx(b,e,d)|0}if(c[(c[b+16>>2]|0)+12>>2]|0){e=c[(c[45920]|0)+4>>2]|0;d=c[45905]|0;if(d>>>0>=(c[45906]|0)>>>0){Uw(183616,1)|0;d=c[45905]|0}a[d>>0]=0;d=c[45904]|0;c[45905]=d;rx(b,e,d)|0}Ax(b,66649,c[(c[45920]|0)+8236>>2]|0,191979)|0;d=0;while(1){if((d|0)==8)break;Xw(183552+(d<<4)|0);d=d+1|0}D_(c[45920]|0);h[1]=1.0;h[5]=1.0;c[45921]=0;c[45925]=0;return}function Rb(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=C_(8240)|0;c[45920]=i;a:do switch(g|0){case 6:{b[i+8232>>1]=14;g=66665;break}case 5:{b[i+8232>>1]=12;g=66669;break}default:{g=xx(d,66649)|0;if((g|0?a[g>>0]|0:0)?(h=Sb(g)|0,(h&65535)>10):0){i=c[45920]|0;b[i+8232>>1]=h;break a}g=Sb(66661)|0;i=c[45920]|0;b[i+8232>>1]=g;g=66661}}while(0);c[i+8236>>2]=g;j=d+16|0;g=c[j>>2]|0;if(!(c[g+180>>2]|0))h=0;else{h=LM(d,0,96782,191979)|0;i=c[45920]|0;g=c[j>>2]|0}c[i>>2]=h;if(!(a[g+113>>0]&8))g=0;else g=LM(d,0,66673,191979)|0;c[(c[45920]|0)+4>>2]=g;i=LM(d,1,96782,191979)|0;c[(c[45920]|0)+8>>2]=i;i=LM(d,1,66673,191979)|0;c[(c[45920]|0)+12>>2]=i;i=LM(d,2,96782,191979)|0;g=c[45920]|0;c[g+16>>2]=i;if(!f)h=0;else{h=LM(d,2,66681,191979)|0;g=c[45920]|0}c[g+20>>2]=h;if(!e)h=0;else{h=LM(d,2,66689,191979)|0;g=c[45920]|0}c[g+24>>2]=h;h=a[(c[j>>2]|0)+113>>0]|0;if(!(h&33))i=0;else{i=LM(d,2,66673,191979)|0;g=c[45920]|0;h=a[(c[j>>2]|0)+113>>0]|0}c[g+28>>2]=i;if(!(h&2))i=0;else{i=LM(d,2,66697,191979)|0;g=c[45920]|0;h=a[(c[j>>2]|0)+113>>0]|0}c[g+32>>2]=i;if(!(h&4))h=0;else{h=LM(d,2,66706,191979)|0;g=c[45920]|0}c[g+36>>2]=h;g=0;while(1){if((g|0)==8)break;Tw(183552+(g<<4)|0,1024,(c[45920]|0)+40+(g<<10)|0);g=g+1|0}return}function Sb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+1040|0;h=j;g=j+8|0;f=0;d=b;a:while(1){do{e=d;d=d+1|0;e=a[e>>0]|0;if(!(e<<24>>24))break a}while(((e<<24>>24)+-48|0)>>>0>=10);if((f|0)>=1023){i=7;break}a[g+f>>0]=e;f=f+1|0}if((i|0)==7){c[h>>2]=b;Pw(0,66715,h)|0}a[g+f>>0]=0;i=(a2(g)|0)&65535;l=j;return i|0}function Tb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;d=c[c[45920]>>2]|0;b=c[45893]|0;if(b>>>0>=(c[45894]|0)>>>0){Uw(183568,1)|0;b=c[45893]|0}a[b>>0]=0;b=c[45892]|0;c[45893]=b;rx(e,d,b)|0;if(c[(c[e+16>>2]|0)+12>>2]|0){d=c[(c[45920]|0)+4>>2]|0;b=c[45909]|0;if(b>>>0>=(c[45910]|0)>>>0){Uw(183632,1)|0;b=c[45909]|0}a[b>>0]=0;b=c[45908]|0;c[45909]=b;rx(e,d,b)|0}h[2]=1.0;h[6]=1.0;c[45922]=0;c[45926]=0;return}function Ub(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[45893]|0;if((c[45892]|0)!=(b|0)){d=c[(c[45920]|0)+8>>2]|0;if(b>>>0>=(c[45894]|0)>>>0){Uw(183568,1)|0;b=c[45893]|0}a[b>>0]=0;b=c[45892]|0;c[45893]=b;rx(e,d,b)|0}b=c[45909]|0;if((c[45908]|0)!=(b|0)){d=c[(c[45920]|0)+12>>2]|0;if(b>>>0>=(c[45910]|0)>>>0){Uw(183632,1)|0;b=c[45909]|0}a[b>>0]=0;b=c[45908]|0;c[45909]=b;rx(e,d,b)|0}h[9]=1.0;h[11]=1.0;c[45929]=0;c[45931]=0;return}function Vb(b){b=b|0;var d=0,e=0;e=c[(c[b+16>>2]|0)+8>>2]|0;b=c[45893]|0;if((c[45892]|0)!=(b|0)){d=c[(c[45920]|0)+16>>2]|0;if(b>>>0>=(c[45894]|0)>>>0){Uw(183568,1)|0;b=c[45893]|0}a[b>>0]=0;b=c[45892]|0;c[45893]=b;rx(e,d,b)|0}b=c[45897]|0;if((c[45896]|0)!=(b|0)){d=c[(c[45920]|0)+24>>2]|0;if(b>>>0>=(c[45898]|0)>>>0){Uw(183584,1)|0;b=c[45897]|0}a[b>>0]=0;b=c[45896]|0;c[45897]=b;rx(e,d,b)|0}b=c[45901]|0;if((c[45900]|0)!=(b|0)){d=c[(c[45920]|0)+20>>2]|0;if(b>>>0>=(c[45902]|0)>>>0){Uw(183600,1)|0;b=c[45901]|0}a[b>>0]=0;b=c[45900]|0;c[45901]=b;rx(e,d,b)|0}b=c[45909]|0;if((c[45908]|0)!=(b|0)){d=c[(c[45920]|0)+28>>2]|0;if(b>>>0>=(c[45910]|0)>>>0){Uw(183632,1)|0;b=c[45909]|0}a[b>>0]=0;b=c[45908]|0;c[45909]=b;rx(e,d,b)|0}b=c[45913]|0;if((c[45912]|0)!=(b|0)){d=c[(c[45920]|0)+36>>2]|0;if(b>>>0>=(c[45914]|0)>>>0){Uw(183648,1)|0;b=c[45913]|0}a[b>>0]=0;b=c[45912]|0;c[45913]=b;rx(e,d,b)|0}b=c[45917]|0;if((c[45916]|0)!=(b|0)){d=c[(c[45920]|0)+32>>2]|0;if(b>>>0>=(c[45918]|0)>>>0){Uw(183664,1)|0;b=c[45917]|0}a[b>>0]=0;b=c[45916]|0;c[45917]=b;rx(e,d,b)|0}h[10]=1.0;h[12]=1.0;h[3]=1.0;h[4]=1.0;h[7]=1.0;h[8]=1.0;c[45930]=0;c[45932]=0;c[45923]=0;c[45924]=0;c[45927]=0;c[45928]=0;return}function Wb(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+1056|0;j=t+16|0;s=t+8|0;r=t;k=t+32|0;o=c[(c[d+16>>2]|0)+12>>2]|0;p=c[11416+(o<<2)>>2]|0;Ww(p,66812)|0;g=f+4|0;dc(k,+h[(c[g>>2]|0)+16>>3]);Ww(p,k)|0;gc(d,191979,c[c[g>>2]>>2]|0);ac(d);q=a[f+48>>0]|0;q=q<<24>>24==108?-1:q<<24>>24==114&1;g=c[g>>2]|0;if(!g)g=0;else g=c[g+24>>2]&127;i=b[(c[45920]|0)+8232>>1]|0;if((i&65535)>14?(m=c[11464+((i&65535)+-15<<2)>>2]&g,n=183684+(o<<2)|0,(c[n>>2]|0)!=(m|0)):0){c[r>>2]=m;Y0(k,66815,r)|0;Ww(p,k)|0;c[n>>2]=m}r=e+8|0;h[r>>3]=+h[r>>3]+ +h[f+24>>3];Ww(p,66821)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];cc(p,j);c[s>>2]=q;Y0(k,99194,s)|0;Ww(p,k)|0;dc(k,+h[f+32>>3]);Ww(p,k)|0;gc(d,191979,c[f>>2]|0);l=t;return}function Xb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+1040|0;f=i;g=i+16|0;e=c[(c[a+16>>2]|0)+12>>2]|0;$b(a);ac(a);if(!d){a=c[11416+(e<<2)>>2]|0;Ww(a,66809)|0}else{if((d|1|0)==3)ic(a,d,b,2);else jc(a);a=c[11416+(e<<2)>>2]|0;Ww(a,66806)|0};c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];cc(a,f);dc(g,+h[b+16>>3]-+h[b>>3]);Ww(a,g)|0;dc(g,+h[b+24>>3]-+h[b+8>>3]);Ww(a,g)|0;l=i;return}function Yb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;$b(a);ac(a);if(!d)bc(a,112,b,c);else{if((d|1|0)==3)ic(a,d,b,c);else jc(a);bc(a,80,b,c)}return}function Zb(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;$b(a);ac(a);if(!f)bc(a,66,b,c);else{if((f|1|0)==3)ic(a,f,b,c);else jc(a);bc(a,98,b,c)}return}function _b(a,b,c){a=a|0;b=b|0;c=c|0;$b(a);ac(a);bc(a,76,b,c);return}function $b(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+1184|0;i=n;f=n+24|0;m=n+8|0;Tw(m,1024,n+152|0);j=b+16|0;d=c[j>>2]|0;g=+h[d+152>>3];e=8+(c[d+12>>2]<<3)|0;if(g!=+h[e>>3]){h[e>>3]=g;Ww(m,66778)|0;h[i>>3]=+h[(c[j>>2]|0)+152>>3];Y0(f,66792,i)|0;ec(f,0);Ww(m,f)|0;f=m+4|0;d=c[f>>2]|0;e=m+8|0;if(d>>>0>=(c[e>>2]|0)>>>0){Uw(m,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=41;d=c[f>>2]|0;if(d>>>0>=(c[e>>2]|0)>>>0){Uw(m,1)|0;d=c[f>>2]|0}a[d>>0]=0;d=c[m>>2]|0;c[f>>2]=d;gc(b,66797,d);d=c[j>>2]|0}d=c[d+160>>2]|0;if(d|0){j=m+4|0;k=m+8|0;a:while(1){i=d+4|0;d=c[d>>2]|0;if(!d)break;switch(a[d>>0]|0){case 102:{if(!(b$(d,108075)|0)){d=i;continue a}break}case 98:{if(!(b$(d,108057)|0)){d=i;continue a}break}case 115:{if(!(b$(d,108062)|0)){d=i;continue a}break}default:{}}Ww(m,d)|0;do{f=d;d=d+1|0}while((a[f>>0]|0)!=0);if(a[d>>0]|0){e=c[j>>2]|0;if(e>>>0>=(c[k>>2]|0)>>>0){Uw(m,1)|0;e=c[j>>2]|0}c[j>>2]=e+1;a[e>>0]=40;f=0;while(1){if(!(a[d>>0]|0))break;if(f|0){e=c[j>>2]|0;if(e>>>0>=(c[k>>2]|0)>>>0){Uw(m,1)|0;e=c[j>>2]|0}c[j>>2]=e+1;a[e>>0]=44}Ww(m,d)|0;do{e=d;d=d+1|0}while((a[e>>0]|0)!=0);f=f+1|0}d=c[j>>2]|0;if(d>>>0>=(c[k>>2]|0)>>>0){Uw(m,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=41}d=c[j>>2]|0;if(d>>>0>=(c[k>>2]|0)>>>0){Uw(m,1)|0;d=c[j>>2]|0}a[d>>0]=0;d=c[m>>2]|0;c[j>>2]=d;gc(b,66797,d);d=i}Xw(m)}l=n;return}function ac(a){a=a|0;fc((c[a+16>>2]|0)+16|0);gc(a,75730,190678);return}function bc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+1040|0;j=k;i=k+16|0;h=c[11416+(c[(c[b+16>>2]|0)+12>>2]<<2)>>2]|0;g=h+4|0;b=c[g>>2]|0;if(b>>>0>=(c[h+8>>2]|0)>>>0){Uw(h,1)|0;b=c[g>>2]|0}c[g>>2]=b+1;a[b>>0]=d;c[j>>2]=f;Y0(i,66742,j)|0;Ww(h,i)|0;b=0;while(1){if((b|0)>=(f|0))break;i=e+(b<<4)|0;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];c[j+12>>2]=c[i+12>>2];cc(h,j);b=b+1|0}l=k;return}function cc(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+1024|0;d=c;dc(d,+h[b>>3]);Ww(a,d)|0;dc(d,+gI(+h[b+8>>3]));Ww(a,d)|0;l=c;return}function dc(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;h[d>>3]=b>-1.0e-08&b<1.0e-08?0.0:b;Y0(a,66747,d)|0;ec(a,1);l=c;return}function ec(b,c){b=b|0;c=c|0;var d=0,e=0;d=A$(b,46)|0;if(!d){if(c|0){d=b+(W_(b)|0)|0;e=10}}else{while(1){b=d+1|0;if(!(a[b>>0]|0))break;else d=b}a:while(1){switch(a[d>>0]|0){case 46:{e=5;break a}case 48:break;default:{e=6;break a}}a[d>>0]=0;d=d+-1|0}if((e|0)==5)a[d>>0]=0;else if((e|0)==6)d=d+1|0;if(c|0)e=10}if((e|0)==10){a[d>>0]=32;a[d+1>>0]=0}return}function fc(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h=j;e=a[b+3>>0]|0;f=d[b>>0]|0;g=d[b+1>>0]|0;b=d[b+2>>0]|0;if(e<<24>>24==-1){c[h>>2]=f;c[h+4>>2]=g;c[h+8>>2]=b;Y0(190678,75610,h)|0}else{c[i>>2]=f;c[i+4>>2]=g;c[i+8>>2]=b;c[i+12>>2]=e&255;Y0(190678,66760,i)|0}l=j;return}function gc(a,b,d){a=a|0;b=b|0;d=d|0;hc(c[11416+(c[(c[a+16>>2]|0)+12>>2]<<2)>>2]|0,b,d);return}function hc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+1040|0;h=f;g=f+8|0;i=W_(e)|0;c[h>>2]=d;c[h+4>>2]=i;Y0(g,66753,h)|0;Ww(b,g)|0;Ww(b,e)|0;e=b+4|0;d=c[e>>2]|0;if(d>>>0>=(c[b+8>>2]|0)>>>0){Uw(b,1)|0;d=c[e>>2]|0}c[e>>2]=d+1;a[d>>0]=32;l=f;return}function ic(b,d,f,i){b=b|0;d=d|0;f=f|0;i=i|0;var j=0.0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=l;l=l+1120|0;t=x+64|0;w=x+80|0;k=x+32|0;r=x+16|0;s=x;u=c[b+16>>2]|0;j=+(c[u+136>>2]|0)*.017453292519943295;if((e[(c[45920]|0)+8232>>1]|0)<14)jc(b);else{Tw(w,1024,x+96|0);v=(d|0)==2;if(v){aN(f,k,i,j,2);f=w+4|0;d=c[f>>2]|0;if(d>>>0>=(c[w+8>>2]|0)>>>0){Uw(w,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=91;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];cc(w,t);s=k+16|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];cc(w,t)}else{aN(f,k,i,0.0,3);q=+h[k+24>>3];o=+h[k>>3];if(j==0.0){n=+h[k+8>>3];p=q*.25;j=n;m=o}else{p=q*.25;y=p;m=+E(+j)*y+o;n=+h[k+8>>3];j=+F(+j)*y+n}h[r>>3]=m;h[r+8>>3]=j;h[s>>3]=o;h[s+8>>3]=n;f=w+4|0;d=c[f>>2]|0;if(d>>>0>=(c[w+8>>2]|0)>>>0){Uw(w,1)|0;d=c[f>>2]|0}c[f>>2]=d+1;a[d>>0]=40;c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];cc(w,t);kc(w,p);c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];cc(w,t);kc(w,q)}Ww(w,66803)|0;d=u+140|0;j=+g[d>>2];f=u+56|0;if(j>0.0){lc(w,j,f);lc(w,+g[d>>2],u+96|0)}else{lc(w,0.0,f);lc(w,1.0,u+96|0)}Yw(w)|0;k=w+4|0;d=c[k>>2]|0;i=w+8|0;f=d>>>0>=(c[i>>2]|0)>>>0;if(v){if(f){Uw(w,1)|0;d=c[k>>2]|0}c[k>>2]=d+1;a[d>>0]=93}else{if(f){Uw(w,1)|0;d=c[k>>2]|0}c[k>>2]=d+1;a[d>>0]=41}d=c[k>>2]|0;if(d>>>0>=(c[i>>2]|0)>>>0){Uw(w,1)|0;d=c[k>>2]|0}a[d>>0]=0;v=c[w>>2]|0;c[k>>2]=v;gc(b,66800,v);Xw(w)}l=x;return}function jc(a){a=a|0;fc((c[a+16>>2]|0)+56|0);gc(a,66800,190678);return}function kc(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+1024|0;d=c;dc(d,b);Ww(a,d)|0;l=c;return}function lc(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;h[f>>3]=b;Y0(e,92597,f)|0;ec(e,1);fc(c);hc(a,e,190678);l=d;return}function mc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0;e=l;l=l+1040|0;i=e;f=e+16|0;g=c[11416+(c[(c[a+16>>2]|0)+12>>2]<<2)>>2]|0;Ww(g,66909)|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];cc(g,i);dc(f,+h[d+16>>3]-+h[d>>3]);Ww(g,f)|0;dc(f,+h[d+24>>3]-+h[d+8>>3]);Ww(g,f)|0;gc(a,191979,c[b+8>>2]|0);l=e;return}function nc(a){a=a|0;var b=0;switch(c[a+64>>2]|0){case 0:{b=lC(c[a>>2]|0)|0;$C(b,c[(c[a+16>>2]|0)+8>>2]|0,67693,0)|0;mC(b);break}case 1:{uI(c[(c[a>>2]|0)+168>>2]|0);break}default:{}}return}function oc(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;e=c[(c[b+16>>2]|0)+8>>2]|0;if(!(c[45933]|0)){c[45933]=c[4652];c[45934]=57;c[45935]=19}c[(c[e+64>>2]|0)+8>>2]=183732;pc(e,1);c[d>>2]=0;a[d+4>>0]=(a[(c[e+16>>2]|0)+115>>0]|0)==1&1;g=c[b+64>>2]|0;a[d+5>>0]=((g|0)==0|(g|0)==3)&1;a[d+6>>0]=0;qc(e,b,1,d);l=f;return}function pc(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[a>>2]&-9;d=wA(a)|0;while(1){if(!d)break;pc(d,0);d=xA(d)|0}a:do if(b|0){b=Sy(a)|0;while(1){if(!b)break a;c[b>>2]=c[b>>2]&-9;d=Ex(a,b)|0;while(1){if(!d)break;c[d>>2]=c[d>>2]&-9;d=Gx(a,d)|0}b=Ty(a,b)|0}}while(0);return}function qc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q+8|0;o=q;n=(d|0)!=0;if(n){m=Cw(11836,c[4555]|0)|0;Fz(a,1,137978,12,0);Fz(a,2,137978,12,0);Fz(a,0,137978,-12,0);f=rc(a,0,m)|0;j=Sy(a)|0;i=0;g=0;while(1){if(!j)break;if(!(z$(ry(j)|0,104980,7)|0)){k=g;g=sc(m,ry(j)|0)|0}else{k=g+1|0;g=g+f|0}c[(yz(j,137978,0)|0)+8>>2]=g;h=Ex(a,j)|0;g=i;while(1){if(!h)break;c[(yz(h,137978,0)|0)+8>>2]=g;h=Gx(a,h)|0;g=g+1|0}j=Ty(a,j)|0;i=g;g=k}yw(m)|0}else f=0;m=c[e>>2]|0;c[e>>2]=m+1;tc(b,m);$B(b,94292)|0;uc(a,b,d,e);vc(a,b,e);$B(b,94263)|0;tc(b,c[e>>2]|0);if(n){c[o>>2]=f;fC(b,66912,o)}else{c[p>>2]=c[(yz(a,137978,0)|0)+8>>2];fC(b,66932,p)}xc(a,b,d,wc(a,b,d,e)|0,e);yc(a,b,d,e);$B(b,150517)|0;p=(c[e>>2]|0)+-1|0;c[e>>2]=p;tc(b,p);if(n)$B(b,107982)|0;else $B(b,75253)|0;l=q;return}function rc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((fz(a)|0)!=(a|0)){e=b+1|0;c[(yz(a,137978,0)|0)+8>>2]=b;if(!(z$(ry(a)|0,104980,7)|0)){b=ry(a)|0;Kc(d,b,c[(yz(a,137978,0)|0)+8>>2]|0);b=e}else b=e}e=wA(a)|0;while(1){if(!e)break;a=rc(e,b,d)|0;e=xA(e)|0;b=a}return b|0}function sc(a,b){a=a|0;b=b|0;a=nb[c[a>>2]&63](a,b,512)|0;if(!a)a=-1;else a=c[a+12>>2]|0;return a|0}function tc(a,b){a=a|0;b=b|0;while(1){if((b|0)<=0)break;$B(a,90480)|0;b=b+-1|0}return}function uc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+16|0;f=h+8|0;i=h;j=ry(a)|0;tc(b,c[e>>2]|0);c[i>>2]=Bc(j,e)|0;fC(b,67020,i);if(d|0){$B(b,94263)|0;tc(b,c[e>>2]|0);j=(ey(a)|0)!=0;c[f>>2]=j?104626:134226;fC(b,67634,f);tc(b,c[e>>2]|0);j=(gy(a)|0)!=0;c[g>>2]=j?104626:134226;fC(b,67651,g)}l=h;return}function vc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;m=o;i=fz(b)|0;j=c[b>>2]&3;f=sx(i,j,0)|0;a:do if(f|0){k=e+5|0;while(1){if(!f)break a;g=yx(b,f)|0;do if(g|0){h=f+8|0;if(!(a[g>>0]|0)){g=c[h>>2]|0;if((a[g>>0]|0)!=108)break;if(b$(g,105198)|0)break}$B(d,94263)|0;tc(d,c[e>>2]|0);c[m>>2]=Bc(c[h>>2]|0,e)|0;fC(d,67070,m);if(a[k>>0]|0?Dc(c[h>>2]|0)|0:0){Ec(yx(b,f)|0,d,e);break}c[n>>2]=Bc(yx(b,f)|0,e)|0;fC(d,67077,n)}while(0);f=sx(i,j,f)|0}}while(0);l=o;return}function wc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;f=wA(a)|0;if(f){$B(b,94263)|0;g=c[e>>2]|0;c[e>>2]=g+1;tc(b,g);g=(d|0)!=0;if(g){$B(b,66994)|0;a=0;d=f}else{$B(b,67054)|0;tc(b,c[e>>2]|0);a=0;d=f}while(1){if(!d)break;if(!a)a=1;else $B(b,94263)|0;if(g)Cc(d,b,e);else{c[h>>2]=c[(yz(d,137978,0)|0)+8>>2];fC(b,134313,h)}d=xA(d)|0}if(g)a=1;else{c[e>>2]=(c[e>>2]|0)+-1;$B(b,150517)|0;tc(b,c[e>>2]|0);$B(b,94258)|0;a=1}}else a=0;l=i;return a|0}function xc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=Sy(a)|0;if(!g){if((d|0)!=0&(e|0)!=0){c[f>>2]=(c[f>>2]|0)+-1;$B(b,150517)|0;tc(b,c[f>>2]|0);$B(b,94258)|0}}else{$B(b,94263)|0;h=(d|0)!=0;if(h)if(!e){e=c[f>>2]|0;c[f>>2]=e+1;tc(b,e);$B(b,66994)|0;e=0}else e=0;else{e=c[f>>2]|0;c[f>>2]=e+1;tc(b,e);$B(b,67008)|0;tc(b,c[f>>2]|0);e=0}while(1){if(!g)break;if(z$(ry(g)|0,104980,7)|0){do if(e)if(h){$B(b,94263)|0;break}else{$B(b,97973)|0;break}else e=1;while(0);Ac(g,b,d,f)}g=Ty(a,g)|0}c[f>>2]=(c[f>>2]|0)+-1;$B(b,150517)|0;tc(b,c[f>>2]|0);$B(b,94258)|0}return}function yc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=Sy(a)|0;a:do if(f|0){while(1){if(!f)break a;if(Ex(a,f)|0)break;f=Ty(a,f)|0}$B(b,94263)|0;i=c[e>>2]|0;c[e>>2]=i+1;tc(b,i);$B(b,66944)|0;i=(d|0)!=0;if(i)g=0;else{tc(b,c[e>>2]|0);g=0}while(1){if(!f)break;h=Ex(a,f)|0;while(1){if(!h)break;do if(g)if(i){$B(b,94263)|0;break}else{$B(b,97973)|0;break}else g=1;while(0);zc(h,b,d,e);h=Gx(a,h)|0}f=Ty(a,f)|0}c[e>>2]=(c[e>>2]|0)+-1;$B(b,150517)|0;tc(b,c[e>>2]|0);$B(b,94258)|0}while(0);return}function zc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;h=j+16|0;g=j+8|0;f=j;if(!d){c[i>>2]=c[(yz(a,137978,0)|0)+8>>2];fC(b,134313,i)}else{i=c[e>>2]|0;c[e>>2]=i+1;tc(b,i);$B(b,94292)|0;tc(b,c[e>>2]|0);c[f>>2]=c[(yz(a,137978,0)|0)+8>>2];fC(b,66956,f);tc(b,c[e>>2]|0);c[g>>2]=c[(yz(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0,137978,0)|0)+8>>2];fC(b,66970,g);tc(b,c[e>>2]|0);c[h>>2]=c[(yz(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0,137978,0)|0)+8>>2];fC(b,66983,h);vc(a,b,e);$B(b,150517)|0;i=(c[e>>2]|0)+-1|0;c[e>>2]=i;tc(b,i);$B(b,75253)|0}l=j;return}function Ac(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i+16|0;g=i+8|0;f=i;if(!d){c[h>>2]=c[(yz(a,137978,0)|0)+8>>2];fC(b,134313,h)}else{h=c[e>>2]|0;c[e>>2]=h+1;tc(b,h);$B(b,94292)|0;tc(b,c[e>>2]|0);c[f>>2]=c[(yz(a,137978,0)|0)+8>>2];fC(b,66956,f);tc(b,c[e>>2]|0);c[g>>2]=Bc(ry(a)|0,e)|0;fC(b,67020,g);vc(a,b,e);$B(b,150517)|0;h=(c[e>>2]|0)+-1|0;c[e>>2]=h;tc(b,h);$B(b,75253)|0}l=i;return}function Bc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+4|0;if(a[g>>0]|0)b=RM(b)|0;if(!(c[45936]|0)){Tw(183744,1024,0);e=b}else e=b;a:while(1){f=a[e>>0]|0;switch(f<<24>>24){case 0:break a;case 34:{Ww(183744,67033)|0;break}case 92:{Ww(183744,93534)|0;break}case 47:{Ww(183744,67036)|0;break}case 8:{Ww(183744,67039)|0;break}case 12:{Ww(183744,67042)|0;break}case 10:{Ww(183744,67045)|0;break}case 13:{Ww(183744,67048)|0;break}case 9:{Ww(183744,67051)|0;break}default:{d=c[45937]|0;if(d>>>0>=(c[45938]|0)>>>0){Uw(183744,1)|0;d=c[45937]|0}c[45937]=d+1;a[d>>0]=f}}e=e+1|0}d=c[45937]|0;if(d>>>0>=(c[45938]|0)>>>0){Uw(183744,1)|0;d=c[45937]|0}a[d>>0]=0;d=c[45936]|0;c[45937]=d;if(a[g>>0]|0)D_(b);return d|0}function Cc(a,b,c){a=a|0;b=b|0;c=c|0;qc(a,b,0,c);a=wA(a)|0;while(1){if(!a)break;$B(b,94263)|0;Cc(a,b,c);a=xA(a)|0}return}function Dc(b){b=b|0;var c=0;c=b+1|0;a:do if((a[b>>0]|0)==95){b=(a[c>>0]|0)+-100<<24>>24;switch(((b&255)>>>2|b<<6&255)<<24>>24){case 0:{if(!(b$(c,67591)|0)){b=1;break a}break}case 2:{if(!(b$(c,67597)|0)){b=1;break a}break}case 1:{if(!(b$(c,67604)|0)){b=1;break a}return (b$(c,67618)|0)==0|0}case 4:{if(!(b$(c,67611)|0)){b=1;break a}b=(b$(c,67626)|0)==0&1;break a}default:{b=0;break a}}b=0}else b=0;while(0);return b|0}function Ec(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+16|0;f=i;do if(b|0?a[b>>0]|0:0){h=oE(b)|0;if(!h){c[f>>2]=b;Pw(0,67082,f)|0;break}$B(d,150517)|0;g=c[e>>2]|0;c[e>>2]=g+1;tc(d,g);$B(d,67109)|0;g=h+8|0;b=0;f=0;while(1){if((f|0)>=(c[h>>2]|0))break;if(!b)b=1;else $B(d,94263)|0;Fc((c[g>>2]|0)+(f*80|0)|0,d,e);f=f+1|0}c[e>>2]=(c[e>>2]|0)+-1;$B(d,150517)|0;tc(d,c[e>>2]|0);$B(d,94258)|0;pE(h)}while(0);l=i;return}function Fc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;A=l;l=l+240|0;y=A+224|0;x=A+216|0;w=A+208|0;v=A+200|0;u=A+192|0;t=A+184|0;s=A+176|0;r=A+152|0;q=A+136|0;p=A+128|0;o=A+112|0;n=A+104|0;m=A+96|0;k=A+88|0;j=A+72|0;i=A+48|0;z=A+40|0;g=A+8|0;f=A;e=c[d>>2]|0;c[d>>2]=e+1;tc(b,e);$B(b,94292)|0;tc(b,c[d>>2]|0);e=c[a>>2]|0;a:do switch(e|0){case 1:case 0:{c[f>>2]=(e|0)==0?69:101;fC(b,67112,f);tc(b,c[d>>2]|0);D=+h[a+16>>3];C=+h[a+24>>3];B=+h[a+32>>3];h[g>>3]=+h[a+8>>3];h[g+8>>3]=D;h[g+16>>3]=C;h[g+24>>3]=B;fC(b,67125,g);break}case 3:case 2:{c[z>>2]=(e|0)==2?80:112;fC(b,67112,z);tc(b,c[d>>2]|0);Gc(b,a+8|0);break}case 5:case 4:{c[i>>2]=(e|0)==4?66:98;fC(b,67112,i);tc(b,c[d>>2]|0);Gc(b,a+8|0);break}case 6:{fC(b,67160,A+56|0);tc(b,c[d>>2]|0);Gc(b,a+8|0);break}case 7:{fC(b,67172,A+64|0);tc(b,c[d>>2]|0);D=+h[a+16>>3];h[j>>3]=+h[a+8>>3];h[j+8>>3]=D;fC(b,67184,j);tc(b,c[d>>2]|0);z=c[a+24>>2]|0;c[k>>2]=(z|0)==0?108:(z|0)==1?99:114;fC(b,67206,k);tc(b,c[d>>2]|0);h[m>>3]=+h[a+32>>3];fC(b,67222,m);tc(b,c[d>>2]|0);c[n>>2]=Bc(c[a+40>>2]|0,d)|0;fC(b,67239,n);break}case 9:case 8:{c[o>>2]=(e|0)==8?67:99;fC(b,67112,o);tc(b,c[d>>2]|0);fC(b,67253,A+120|0);tc(b,c[d>>2]|0);c[p>>2]=Bc(c[a+8>>2]|0,d)|0;fC(b,67270,p);break}case 13:case 14:{c[q>>2]=(e|0)==13?67:99;fC(b,67112,q);tc(b,c[d>>2]|0);switch(c[a+8>>2]|0){case 0:{fC(b,67253,A+144|0);tc(b,c[d>>2]|0);c[r>>2]=Bc(c[a+16>>2]|0,d)|0;fC(b,67270,r);break a}case 1:{fC(b,67285,A+160|0);tc(b,c[d>>2]|0);Hc(b,a+16|0,d);break a}default:{fC(b,67304,A+168|0);tc(b,c[d>>2]|0);Ic(b,a+16|0,d);break a}}}case 10:{fC(b,67323,s);tc(b,c[d>>2]|0);h[t>>3]=+h[a+8>>3];fC(b,67335,t);tc(b,c[d>>2]|0);c[u>>2]=Bc(c[a+16>>2]|0,d)|0;fC(b,67351,u);break}case 11:{fC(b,67365,v);tc(b,c[d>>2]|0);c[w>>2]=Bc(c[a+8>>2]|0,d)|0;fC(b,67377,w);break}case 15:{fC(b,67392,x);tc(b,c[d>>2]|0);c[y>>2]=c[a+8>>2];fC(b,67404,y);break}default:{}}while(0);z=(c[d>>2]|0)+-1|0;c[d>>2]=z;tc(b,z);$B(b,75253)|0;l=A;return}function Gc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;j=l;l=l+48|0;i=j+32|0;g=j+16|0;f=j+8|0;e=c[b>>2]|0;d=c[b+4>>2]|0;fC(a,67565,j);b=0;while(1){if((b|0)>=(e|0))break;if((b|0)>0)fC(a,97973,f);k=+h[d+(b*24|0)+8>>3];h[g>>3]=+h[d+(b*24|0)>>3];h[g+8>>3]=k;fC(a,67577,g);b=b+1|0}fC(a,67518,i);l=j;return}function Hc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0;e=l;l=l+32|0;f=e+16|0;i=e;tc(a,c[d>>2]|0);g=+h[b+8>>3];h[i>>3]=+h[b>>3];h[i+8>>3]=g;fC(a,67521,i);tc(a,c[d>>2]|0);g=+h[b+24>>3];h[f>>3]=+h[b+16>>3];h[f+8>>3]=g;fC(a,67543,f);tc(a,c[d>>2]|0);Jc(a,c[b+32>>2]|0,c[b+36>>2]|0,d);l=e;return}function Ic(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0;e=l;l=l+48|0;f=e+24|0;j=e;tc(a,c[d>>2]|0);g=+h[b+8>>3];i=+h[b+16>>3];h[j>>3]=+h[b>>3];h[j+8>>3]=g;h[j+16>>3]=i;fC(a,67420,j);tc(a,c[d>>2]|0);i=+h[b+32>>3];g=+h[b+40>>3];h[f>>3]=+h[b+24>>3];h[f+8>>3]=i;h[f+16>>3]=g;fC(a,67448,f);tc(a,c[d>>2]|0);Jc(a,c[b+48>>2]|0,c[b+52>>2]|0,d);l=e;return}function Jc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+48|0;k=m+32|0;j=m+16|0;i=m+8|0;fC(a,67476,m);f=0;while(1){if((f|0)>=(b|0))break;if((f|0)>0)fC(a,97973,i);o=+g[d+(f<<3)>>2];n=Bc(c[d+(f<<3)+4>>2]|0,e)|0;h[j>>3]=o;c[j+8>>2]=n;fC(a,67487,j);f=f+1|0}fC(a,67518,k);l=m;return}function Kc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;e=nb[c[a>>2]&63](a,b,512)|0;if(e){if((c[e+12>>2]|0)!=(d|0)){c[f>>2]=b;Pw(0,67664,f)|0}}else{f=E_(1,16)|0;c[f+8>>2]=n1(b)|0;c[f+12>>2]=d;nb[c[a>>2]&63](a,f,1)|0}l=g;return}function Lc(a,b,d){a=a|0;b=b|0;d=d|0;D_(c[b+8>>2]|0);D_(b);return}function Mc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;$B(a,68519)|0;j=c[c[a+12>>2]>>2]|0;i=c[j+4>>2]|0;h=c[j+8>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=i;c[g+8>>2]=h;fC(a,68529,g);c[e>>2]=ry(c[f+8>>2]|0)|0;fC(a,68564,e);c[d>>2]=O(c[a+168>>2]|0,c[a+164>>2]|0)|0;fC(a,68577,d);$B(a,68590)|0;$B(a,68600)|0;$B(a,68608)|0;$B(a,68616)|0;$B(a,68624)|0;$B(a,68632)|0;$B(a,68640)|0;$B(a,68644)|0;$B(a,68649)|0;l=b;return}function Nc(a){a=a|0;$B(a,68500)|0;return}function Oc(a){a=a|0;c[45940]=2;return}function Pc(a){a=a|0;c[45940]=1;return}function Qc(a){a=a|0;c[45940]=2;return}function Rc(a){a=a|0;c[45940]=0;return}function Sc(a){a=a|0;c[45940]=2;return}function Tc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;p=l;l=l+80|0;o=p;m=c[(c[b+16>>2]|0)+16>>2]|0;n=c[45940]|0;f=c[e+4>>2]|0;g=+h[b+352>>3]*+h[f+16>>3];i=c[b+360>>2]|0?1.5707963267948966:0.0;j=c[e>>2]|0;k=g*.3333333333333333*+((W_(j)|0)>>>0);f=c[f+8>>2]|0;if(!f)f=-1;else f=c[f+20>>2]|0;s=a[e+48>>0]|0;r=+h[d>>3];q=+h[d+8>>3];e=bd(j)|0;c[o>>2]=4;c[o+4>>2]=s<<24>>24==108?0:s<<24>>24==114?2:1;c[o+8>>2]=m;c[o+12>>2]=n;c[o+16>>2]=0;c[o+20>>2]=f;h[o+24>>3]=g;h[o+32>>3]=i;c[o+40>>2]=6;h[o+48>>3]=g;h[o+56>>3]=k;c[o+64>>2]=~~(r+(r>=0.0?.5:-.5));c[o+68>>2]=~~(q+(q+-72.0>=0.0?-71.5:-72.5));c[o+72>>2]=e;fC(b,68445,o);l=p;return}function Uc(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n;i=n+20|0;m=e+32|0;a:do switch(c[m>>2]|0){case 5:{f=0;while(1){g=c[12724+(f<<2)>>2]|0;if((f|0)==8)break a;h=c[e>>2]|0;if((a[g>>0]|0)==(a[h>>0]|0)?(b$(g,h)|0)==0:0){k=10;break a}f=f+1|0}}case 1:{g=e+1|0;h=e+2|0;f=(ad(i,d[e>>0]|0,d[g>>0]|0,d[h>>0]|0)|0)+32|0;if(!(c[i>>2]|0))k=10;else{o=d[e>>0]|0;i=d[g>>0]|0;k=d[h>>0]|0;c[j>>2]=0;c[j+4>>2]=f;c[j+8>>2]=o;c[j+12>>2]=i;c[j+16>>2]=k;fC(b,68388,j);k=10}break}default:qa(135312,67785,163,67816)}while(0);if((k|0)==10)c[e>>2]=f;c[m>>2]=6;l=n;return}function Vc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+112|0;f=e+8|0;u=e+104|0;t=e;k=c[a+16>>2]|0;s=~~+h[k+152>>3];r=c[k+16>>2]|0;q=c[k+56>>2]|0;p=c[45940]|0;_c(k,u,t);n=+h[b>>3];k=~~(n+(n>=0.0?.5:-.5));m=+h[b+8>>3];j=~~(m+(m>=0.0?.5:-.5));i=+h[b+16>>3];n=i-n;g=+h[b+24>>3];m=g-m;b=c[u>>2]|0;o=+h[t>>3];c[f>>2]=1;c[f+4>>2]=1;c[f+8>>2]=b;c[f+12>>2]=s;c[f+16>>2]=r;c[f+20>>2]=q;c[f+24>>2]=p;c[f+28>>2]=0;c[f+32>>2]=d|0?20:-1;h[f+40>>3]=o;c[f+48>>2]=0;h[f+56>>3]=0.0;c[f+64>>2]=k;c[f+68>>2]=j;c[f+72>>2]=~~(n+(n>=0.0?.5:-.5));c[f+76>>2]=~~(m+(m>=0.0?.5:-.5));c[f+80>>2]=k;c[f+84>>2]=j;c[f+88>>2]=~~(i+(i>=0.0?.5:-.5));c[f+92>>2]=~~(g+(g>=0.0?.5:-.5));fC(a,68323,f);l=e;return}function Wc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+96|0;g=f+8|0;o=f+80|0;p=f;q=c[a+16>>2]|0;n=~~+h[q+152>>3];m=c[q+16>>2]|0;k=c[q+56>>2]|0;j=c[45940]|0;_c(q,o,p);o=c[o>>2]|0;i=+h[p>>3];c[g>>2]=2;c[g+4>>2]=3;c[g+8>>2]=o;c[g+12>>2]=n;c[g+16>>2]=m;c[g+20>>2]=k;c[g+24>>2]=j;c[g+28>>2]=0;c[g+32>>2]=e|0?20:-1;h[g+40>>3]=i;c[g+48>>2]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;c[g+64>>2]=0;c[g+68>>2]=d+1;fC(a,68227,g);$c(a,b,d,1);l=f;return}function Xc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;C=l;l=l+192|0;B=C+176|0;z=C+168|0;A=C+104|0;y=C+96|0;i=C+88|0;u=C+180|0;v=C+80|0;w=C+16|0;x=C;f=a+16|0;e=c[f>>2]|0;q=~~+h[e+152>>3];r=c[e+16>>2]|0;s=c[45940]|0;if((d|0)<=3)qa(67778,67785,360,67805);t=C_((d*140|0)+140|0)|0;_c(e,u,v);if(!g){o=4;j=0;k=-1}else{o=5;j=c[(c[f>>2]|0)+56>>2]|0;k=20}E=+h[b>>3];n=w+48|0;h[n>>3]=E;D=+h[b+8>>3];h[w+56>>3]=D;c[i>>2]=~~(E+(E>=0.0?.5:-.5));c[i+4>>2]=~~(D+(D>=0.0?.5:-.5));m=x+8|0;e=t+(Y0(t,80995,i)|0)|0;p=1;g=0;while(1){i=g+3|0;if((i|0)>=(d|0))break;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];f=1;while(1){if((f|0)==4){f=1;break}F=f+g|0;h[w+(f<<4)>>3]=+h[b+(F<<4)>>3];h[w+(f<<4)+8>>3]=+h[b+(F<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;XL(x,w,3,+(f|0)*.16666666666666666,0,0);D=+h[x>>3];E=+h[m>>3];c[y>>2]=~~(D+(D>=0.0?.5:-.5));c[y+4>>2]=~~(E+(E>=0.0?.5:-.5));f=f+1|0;e=e+(Y0(e,80995,y)|0)|0}p=p+6|0;g=i}f=c[u>>2]|0;E=+h[v>>3];c[A>>2]=3;c[A+4>>2]=o;c[A+8>>2]=f;c[A+12>>2]=q;c[A+16>>2]=r;c[A+20>>2]=j;c[A+24>>2]=s;c[A+28>>2]=0;c[A+32>>2]=k;h[A+40>>3]=E;c[A+48>>2]=0;c[A+52>>2]=0;c[A+56>>2]=0;c[A+60>>2]=p;fC(a,68278,A);c[z>>2]=t;fC(a,81002,z);D_(t);f=p+-1|0;e=0;while(1){if((e|0)>=(p|0))break;c[B>>2]=((e|0)%(f|0)|0|0)!=0&1;fC(a,81007,B);e=e+1|0}$B(a,150517)|0;l=C;return}function Yc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+96|0;f=e+8|0;m=e+80|0;n=e;o=c[a+16>>2]|0;k=~~+h[o+152>>3];j=c[o+16>>2]|0;i=c[45940]|0;_c(o,m,n);m=c[m>>2]|0;g=+h[n>>3];c[f>>2]=2;c[f+4>>2]=1;c[f+8>>2]=m;c[f+12>>2]=k;c[f+16>>2]=j;c[f+20>>2]=0;c[f+24>>2]=i;c[f+28>>2]=0;c[f+32>>2]=0;h[f+40>>3]=g;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=d;fC(a,68227,f);$c(a,b,d,0);l=e;return}function Zc(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;fC(a,68221,e);l=d;return}function _c(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function $c(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));fC(a,80995,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));fC(a,80995,i)}$B(a,150517)|0;l=j;return}function ad(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[a>>2]=0;k=c[45941]|0;h=195075;g=0;i=-1;while(1){if((g|0)>=(k|0)){l=6;break}m=(b[187600+(g<<1)>>1]|0)-d|0;n=(b[188112+(g<<1)>>1]|0)-e|0;j=(b[188624+(g<<1)>>1]|0)-f|0;j=(O(n,n)|0)+(O(m,m)|0)+(O(j,j)|0)|0;if((j|0)<(h|0))if(!j)break;else{h=j;i=g}g=g+1|0}if((l|0)==6){c[45941]=k+1;if((k|0)==256)g=i;else{b[187600+(g<<1)>>1]=d;b[188112+(g<<1)>>1]=e;b[188624+(g<<1)>>1]=f;c[a>>2]=1}}return g|0}function bd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[45942]|0;if(!d){c[45943]=64;d=C_(64)|0;c[45942]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[45943]|0;if((e|0)>(b+-8|0)){d=b<<1;c[45943]=d;d=F_(c[45942]|0,d)|0;c[45942]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;Y0(d+1|0,81120,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[45942]|0}function cd(b){b=b|0;var d=0,e=0,f=0;e=c[b+16>>2]|0;switch(c[b+64>>2]|0){case 0:{$B(b,68116)|0;d=e+208|0;e=c[d>>2]|0;if(e|0?a[e>>0]|0:0){$B(b,68130)|0;$B(b,qH(c[d>>2]|0)|0)|0;$B(b,150517)|0}break}case 1:{d=e+208|0;f=c[d>>2]|0;if(f|0?a[f>>0]|0:0){$B(b,68130)|0;$B(b,qH(c[d>>2]|0)|0)|0;$B(b,99578)|0;$B(b,qH(ry(c[e+8>>2]|0)|0)|0)|0;$B(b,150517)|0}break}case 3:{f=qH(ry(c[e+8>>2]|0)|0)|0;$B(b,68139)|0;$B(b,f)|0;$B(b,68149)|0;$B(b,f)|0;$B(b,68104)|0;break}default:{}}return}function dd(a){a=a|0;var b=0;b=c[a+16>>2]|0;switch(c[a+64>>2]|0){case 2:{fd(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);break}case 3:{fd(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);$B(a,68108)|0;break}default:{}}return}function ed(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=c[a+16>>2]|0;fd(a,c[g+264>>2]|0,c[g+272>>2]|0,c[g+268>>2]|0,b,d,e,f);return}function fd(b,d,e,f,g,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0;y=l;l=l+128|0;x=y+120|0;u=y+112|0;t=y+96|0;s=y+80|0;r=y+56|0;w=y+48|0;q=y+40|0;v=y+24|0;p=y;a:do if((e|0)!=0&(f|0)!=0){m=f+10|0;if((c[45944]|0)<(f|0)){c[45944]=m;o=F_(c[45945]|0,m<<3)|0;c[45945]=o}else o=c[45945]|0;m=0;while(1){if((m|0)>=(f|0))break;z=+h[e+(m<<4)>>3];c[o+(m<<3)>>2]=~~(z+(z>=0.0?.5:-.5));z=+h[e+(m<<4)+8>>3];c[o+(m<<3)+4>>2]=~~(z+(z>=0.0?.5:-.5));m=m+1|0}n=b+64|0;m=c[n>>2]|0;e=(g|0)!=0;if(e&(m|0)==0){if(!(a[g>>0]|0))break;switch(d|0){case 0:{v=c[o>>2]|0;w=c[o+12>>2]|0;x=c[o+8>>2]|0;f=c[o+4>>2]|0;c[p>>2]=g;c[p+4>>2]=v;c[p+8>>2]=w;c[p+12>>2]=x;c[p+16>>2]=f;fC(b,67850,p);break a}case 1:{w=c[o>>2]|0;x=c[o+4>>2]|0;f=(c[o+8>>2]|0)-w|0;c[v>>2]=g;c[v+4>>2]=w;c[v+8>>2]=x;c[v+12>>2]=f;fC(b,67871,v);break a}case 2:{c[q>>2]=g;fC(b,67891,q);m=0;while(1){if((m|0)>=(f|0))break;v=c[45945]|0;x=c[v+(m<<3)+4>>2]|0;c[w>>2]=c[v+(m<<3)>>2];c[w+4>>2]=x;fC(b,67899,w);m=m+1|0}$B(b,150517)|0;break a}default:qa(135312,67906,63,67926)}}if(e&(m|0)==1){if(!(a[g>>0]|0))break;if(!d){w=c[o+12>>2]|0;x=c[o+8>>2]|0;f=c[o+4>>2]|0;c[r>>2]=c[o>>2];c[r+4>>2]=w;c[r+8>>2]=x;c[r+12>>2]=f;c[r+16>>2]=g;c[r+20>>2]=i;fC(b,67943,r);break}else qa(135312,67906,75,67926)}if((m&-2|0)==2){switch(d|0){case 1:{$B(b,67976)|0;break}case 0:{$B(b,67997)|0;break}case 2:{$B(b,68016)|0;break}default:qa(135312,67906,91,67926)}if(k|0?a[k>>0]|0:0){$B(b,73496)|0;$B(b,tH(k)|0)|0;$B(b,95669)|0}if(e?a[g>>0]|0:0){$B(b,68035)|0;$B(b,tH(g)|0)|0;$B(b,95669)|0}if(j|0?a[j>>0]|0:0){$B(b,74455)|0;$B(b,qH(j)|0)|0;$B(b,95669)|0}if(i|0?a[i>>0]|0:0){$B(b,68043)|0;$B(b,qH(i)|0)|0;$B(b,95669)|0}$B(b,68052)|0;$B(b,68060)|0;b:do switch(d|0){case 1:{f=c[45945]|0;w=c[f>>2]|0;x=c[f+4>>2]|0;f=(c[f+8>>2]|0)-w|0;c[s>>2]=w;c[s+4>>2]=x;c[s+8>>2]=f;fC(b,68070,s);break}case 0:{v=c[45945]|0;w=c[v+12>>2]|0;x=c[v+8>>2]|0;f=c[v+4>>2]|0;c[t>>2]=c[v>>2];c[t+4>>2]=w;c[t+8>>2]=x;c[t+12>>2]=f;fC(b,68079,t);break}case 2:{w=c[45945]|0;m=c[w+4>>2]|0;c[u>>2]=c[w>>2];c[u+4>>2]=m;fC(b,68091,u);m=1;while(1){if((m|0)>=(f|0))break b;v=c[45945]|0;w=c[v+(m<<3)+4>>2]|0;c[x>>2]=c[v+(m<<3)>>2];c[x+4>>2]=w;fC(b,68097,x);m=m+1|0}}default:{}}while(0);if((c[n>>2]|0)==3){$B(b,73320)|0;break}else{$B(b,68104)|0;break}}}while(0);l=y;return}function gd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;$B(a,68519)|0;j=c[c[a+12>>2]>>2]|0;i=c[j+4>>2]|0;h=c[j+8>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=i;c[g+8>>2]=h;fC(a,68529,g);c[e>>2]=ry(c[f+8>>2]|0)|0;fC(a,68564,e);c[d>>2]=O(c[a+168>>2]|0,c[a+164>>2]|0)|0;fC(a,68577,d);$B(a,68590)|0;$B(a,68600)|0;$B(a,68608)|0;$B(a,68616)|0;$B(a,68624)|0;$B(a,68632)|0;$B(a,68640)|0;$B(a,68644)|0;$B(a,68649)|0;l=b;return}function hd(a){a=a|0;$B(a,68500)|0;return}function id(a){a=a|0;c[45946]=2;return}function jd(a){a=a|0;c[45946]=1;return}function kd(a){a=a|0;c[45946]=2;return}function ld(a){a=a|0;c[45946]=0;return}function md(a){a=a|0;c[45946]=2;return}function nd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0;n=l;l=l+80|0;m=n;j=c[(c[b+16>>2]|0)+16>>2]|0;k=c[45946]|0;f=c[e+4>>2]|0;g=+h[b+352>>3]*+h[f+16>>3];i=c[b+360>>2]|0?1.5707963267948966:0.0;f=c[f+8>>2]|0;if(!f)f=-1;else f=c[f+20>>2]|0;q=a[e+48>>0]|0;p=+h[d>>3];o=+h[d+8>>3];e=xd(c[e>>2]|0)|0;c[m>>2]=4;c[m+4>>2]=q<<24>>24==108?0:q<<24>>24==114?2:1;c[m+8>>2]=j;c[m+12>>2]=k;c[m+16>>2]=0;c[m+20>>2]=f;h[m+24>>3]=g;h[m+32>>3]=i;c[m+40>>2]=4;h[m+48>>3]=0.0;h[m+56>>3]=0.0;c[m+64>>2]=~~(p+(p>=0.0?.5:-.5));c[m+68>>2]=~~(o+(o>=0.0?.5:-.5));c[m+72>>2]=e;fC(b,68445,m);l=n;return}function od(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n;i=n+20|0;m=e+32|0;a:do switch(c[m>>2]|0){case 5:{f=0;while(1){g=c[12724+(f<<2)>>2]|0;if((f|0)==8)break a;h=c[e>>2]|0;if((a[g>>0]|0)==(a[h>>0]|0)?(b$(g,h)|0)==0:0){k=10;break a}f=f+1|0}}case 1:{g=e+1|0;h=e+2|0;f=(wd(i,d[e>>0]|0,d[g>>0]|0,d[h>>0]|0)|0)+32|0;if(!(c[i>>2]|0))k=10;else{o=d[e>>0]|0;i=d[g>>0]|0;k=d[h>>0]|0;c[j>>2]=0;c[j+4>>2]=f;c[j+8>>2]=o;c[j+12>>2]=i;c[j+16>>2]=k;fC(b,68388,j);k=10}break}case 0:{f=0;k=10;break}default:qa(135312,68409,168,68428)}while(0);if((k|0)==10)c[e>>2]=f;c[m>>2]=6;l=n;return}function pd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+112|0;f=e+8|0;u=e+104|0;t=e;k=c[a+16>>2]|0;s=~~+h[k+152>>3];r=c[k+16>>2]|0;q=c[k+56>>2]|0;p=c[45946]|0;ud(k,u,t);n=+h[b>>3];k=~~(n+(n>=0.0?.5:-.5));m=+h[b+8>>3];j=~~(m+(m>=0.0?.5:-.5));i=+h[b+16>>3];n=i-n;g=+h[b+24>>3];m=g-m;b=c[u>>2]|0;o=+h[t>>3];c[f>>2]=1;c[f+4>>2]=1;c[f+8>>2]=b;c[f+12>>2]=s;c[f+16>>2]=r;c[f+20>>2]=q;c[f+24>>2]=p;c[f+28>>2]=0;c[f+32>>2]=d|0?20:-1;h[f+40>>3]=o;c[f+48>>2]=0;h[f+56>>3]=0.0;c[f+64>>2]=k;c[f+68>>2]=j;c[f+72>>2]=~~(n+(n>=0.0?.5:-.5));c[f+76>>2]=~~(m+(m>=0.0?.5:-.5));c[f+80>>2]=k;c[f+84>>2]=j;c[f+88>>2]=~~(i+(i>=0.0?.5:-.5));c[f+92>>2]=~~(g+(g>=0.0?.5:-.5));fC(a,68323,f);l=e;return}function qd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+96|0;g=f+8|0;o=f+80|0;p=f;q=c[a+16>>2]|0;n=~~+h[q+152>>3];m=c[q+16>>2]|0;k=c[q+56>>2]|0;j=c[45946]|0;ud(q,o,p);o=c[o>>2]|0;i=+h[p>>3];c[g>>2]=2;c[g+4>>2]=3;c[g+8>>2]=o;c[g+12>>2]=n;c[g+16>>2]=m;c[g+20>>2]=k;c[g+24>>2]=j;c[g+28>>2]=0;c[g+32>>2]=e|0?20:-1;h[g+40>>3]=i;c[g+48>>2]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;c[g+64>>2]=0;c[g+68>>2]=d+1;fC(a,68227,g);vd(a,b,d,1);l=f;return}function rd(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0;C=l;l=l+192|0;B=C+176|0;z=C+168|0;A=C+104|0;y=C+96|0;f=C+88|0;u=C+180|0;v=C+80|0;w=C+16|0;x=C;e=a+16|0;p=c[e>>2]|0;q=~~+h[p+152>>3];r=c[p+16>>2]|0;s=c[45946]|0;t=C_((d*140|0)+140|0)|0;ud(p,u,v);if(!g){o=4;j=0;k=-1}else{o=5;j=c[(c[e>>2]|0)+56>>2]|0;k=20}E=+h[b>>3];n=w+48|0;h[n>>3]=E;D=+h[b+8>>3];h[w+56>>3]=D;c[f>>2]=~~(E+(E>=0.0?.5:-.5));c[f+4>>2]=~~(D+(D>=0.0?.5:-.5));m=x+8|0;e=t+(Y0(t,80995,f)|0)|0;p=1;g=0;while(1){i=g+3|0;if((i|0)>=(d|0))break;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];f=1;while(1){if((f|0)==4){f=1;break}F=f+g|0;h[w+(f<<4)>>3]=+h[b+(F<<4)>>3];h[w+(f<<4)+8>>3]=+h[b+(F<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;XL(x,w,3,+(f|0)*.16666666666666666,0,0);D=+h[x>>3];E=+h[m>>3];c[y>>2]=~~(D+(D>=0.0?.5:-.5));c[y+4>>2]=~~(E+(E>=0.0?.5:-.5));f=f+1|0;e=e+(Y0(e,80995,y)|0)|0}p=p+6|0;g=i}f=c[u>>2]|0;E=+h[v>>3];c[A>>2]=3;c[A+4>>2]=o;c[A+8>>2]=f;c[A+12>>2]=q;c[A+16>>2]=r;c[A+20>>2]=j;c[A+24>>2]=s;c[A+28>>2]=0;c[A+32>>2]=k;h[A+40>>3]=E;c[A+48>>2]=0;c[A+52>>2]=0;c[A+56>>2]=0;c[A+60>>2]=p;fC(a,68278,A);c[z>>2]=t;fC(a,81002,z);D_(t);f=p+-1|0;e=0;while(1){if((e|0)>=(p|0))break;c[B>>2]=((e|0)%(f|0)|0|0)!=0&1;fC(a,81007,B);e=e+1|0}$B(a,150517)|0;l=C;return}function sd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+96|0;f=e+8|0;m=e+80|0;n=e;o=c[a+16>>2]|0;k=~~+h[o+152>>3];j=c[o+16>>2]|0;i=c[45946]|0;ud(o,m,n);m=c[m>>2]|0;g=+h[n>>3];c[f>>2]=2;c[f+4>>2]=1;c[f+8>>2]=m;c[f+12>>2]=k;c[f+16>>2]=j;c[f+20>>2]=0;c[f+24>>2]=i;c[f+28>>2]=0;c[f+32>>2]=0;h[f+40>>3]=g;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=d;fC(a,68227,f);vd(a,b,d,0);l=e;return}function td(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;fC(a,68221,e);l=d;return}function ud(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function vd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));fC(a,80995,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));fC(a,80995,i)}$B(a,150517)|0;l=j;return}function wd(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[a>>2]=0;k=c[45947]|0;h=195075;g=0;i=-1;while(1){if((g|0)>=(k|0)){l=6;break}m=(b[189136+(g<<1)>>1]|0)-d|0;n=(b[189648+(g<<1)>>1]|0)-e|0;j=(b[190160+(g<<1)>>1]|0)-f|0;j=(O(n,n)|0)+(O(m,m)|0)+(O(j,j)|0)|0;if((j|0)<(h|0))if(!j)break;else{h=j;i=g}g=g+1|0}if((l|0)==6){c[45947]=k+1;if((k|0)==256)g=i;else{b[189136+(g<<1)>>1]=d;b[189648+(g<<1)>>1]=e;b[190160+(g<<1)>>1]=f;c[a>>2]=1}}return g|0}function xd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[45948]|0;if(!d){c[45949]=64;d=C_(64)|0;c[45948]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[45949]|0;if((e|0)>(b+-8|0)){d=b<<1;c[45949]=d;d=F_(c[45948]|0,d)|0;c[45948]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;Y0(d+1|0,81120,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[45948]|0}function yd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;b=d;$B(a,73228)|0;if((c[a+64>>2]|0)==2)$B(a,73243)|0;else $B(a,150517)|0;g=c[c[a+12>>2]>>2]|0;f=c[g+4>>2]|0;e=c[g+8>>2]|0;c[b>>2]=c[g>>2];c[b+4>>2]=f;c[b+8>>2]=e;fC(a,73254,b);l=d;return}function zd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+8|0;e=g;$B(a,73182)|0;d=a+64|0;b=a+12|0;if((c[d>>2]|0)!=2){c[e>>2]=c[(c[b>>2]|0)+28>>2];fC(a,73193,e)}if((c[(c[b>>2]|0)+20>>2]|0)==0?(c[d>>2]|0)!=2:0){b=c[a+476>>2]|0;d=c[a+480>>2]|0;e=c[a+484>>2]|0;c[f>>2]=c[a+472>>2];c[f+4>>2]=b;c[f+8>>2]=d;c[f+12>>2]=e;fC(a,69562,f)}$B(a,73208)|0;$B(a,73221)|0;l=g;return}function Ad(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+32|0;j=k+24|0;f=k+8|0;i=k;g=c[b+16>>2]|0;a[190688]=0;e=b+12|0;h=g+8|0;if(!(c[(c[e>>2]|0)+28>>2]|0)){c[i>>2]=ry(c[h>>2]|0)|0;fC(b,69493,i);d=b+64|0;if((c[d>>2]|0)==2)$B(b,69526)|0;else $B(b,69508)|0;do if(!(c[(c[e>>2]|0)+20>>2]|0))if((c[d>>2]|0)==2){n=c[b+460>>2]|0;m=c[b+464>>2]|0;d=c[b+468>>2]|0;c[f>>2]=c[b+456>>2];c[f+4>>2]=n;c[f+8>>2]=m;c[f+12>>2]=d;fC(b,69562,f);break}else{$B(b,69538)|0;break}while(0);$B(b,69592)|0;jJ(b,c[(c[e>>2]|0)+24>>2]|0,13e3);lJ(b);d=c[(c[e>>2]|0)+20>>2]|0;if(d|0){c[i>>2]=c[d>>2];c[i+4>>2]=0;jJ(b,0,i)}}c[45950]=(a[(c[(c[h>>2]|0)+16>>2]|0)+115>>0]|0)==1?1:-1;if(!(a[190688]|0)){$B(b,69612)|0;a[190688]=1}d=c[g+208>>2]|0;if(d|0){c[j>>2]=mJ(d,c[45950]|0)|0;fC(b,69625,j)}l=k;return}function Bd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;b=l;l=l+16|0;f=b;c[f>>2]=d;c[f+4>>2]=e;fC(a,69477,f);l=b;return}function Cd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0;s=l;l=l+144|0;r=s+128|0;q=s+112|0;p=s+72|0;o=s+56|0;n=s+40|0;m=s+32|0;e=s+24|0;b=s+8|0;d=s;f=c[a+456>>2]|0;j=c[a+460>>2]|0;g=c[a+464>>2]|0;i=c[a+468>>2]|0;k=a+12|0;t=(c[(c[k>>2]|0)+28>>2]|0)+1|0;c[d>>2]=t;c[d+4>>2]=t;fC(a,69104,d);if(!(c[(c[k>>2]|0)+20>>2]|0)){c[b>>2]=f;c[b+4>>2]=j;c[b+8>>2]=g;c[b+12>>2]=i;fC(a,69121,b)}d=a+360|0;c[e>>2]=c[d>>2]|0?69155:69165;fC(a,69174,e);b=a+64|0;if((c[b>>2]|0)==1){c[m>>2]=g;c[m+4>>2]=i;fC(a,69199,m)}m=c[a+200>>2]|0;t=c[a+204>>2]|0;c[n>>2]=c[a+196>>2];c[n+4>>2]=m;c[n+8>>2]=t;fC(a,69238,n);if(!(c[(c[k>>2]|0)+20>>2]|0)){c[o>>2]=f;c[o+4>>2]=j;c[o+8>>2]=g-f;c[o+12>>2]=i-j;fC(a,69258,o)}w=+h[a+496>>3];t=c[d>>2]|0;v=+h[a+504>>3];u=+h[a+512>>3];h[p>>3]=+h[a+488>>3];h[p+8>>3]=w;c[p+16>>2]=t;h[p+24>>3]=v;h[p+32>>3]=u;fC(a,69298,p);if((c[b>>2]|0)==1){if((g|0)>14399|(i|0)>14399){t=c[(c[k>>2]|0)+16>>2]|0;c[q>>2]=g;c[q+4>>2]=i;c[q+8>>2]=14400;ub[t&63](69341,q)}c[r>>2]=f;c[r+4>>2]=j;c[r+8>>2]=g;c[r+12>>2]=i;fC(a,69436,r)}l=s;return}function Dd(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=a+12|0;if(c[(c[b>>2]|0)+20>>2]|0){$B(a,69028)|0;jJ(a,0,(c[(c[b>>2]|0)+20>>2]|0)+4|0)}$B(a,69045)|0;$B(a,69072)|0;c[d>>2]=c[(c[b>>2]|0)+28>>2];fC(a,69087,d);l=e;return}function Ed(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=ry(c[(c[a+16>>2]|0)+8>>2]|0)|0;fC(a,69021,d);$B(a,69014)|0;l=b;return}function Fd(a){a=a|0;$B(a,84457)|0;return}function Gd(a){a=a|0;$B(a,69014)|0;return}function Hd(a){a=a|0;$B(a,84457)|0;return}function Id(a){a=a|0;$B(a,69014)|0;return}function Jd(a){a=a|0;$B(a,84457)|0;return}function Kd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;e=l;l=l+16|0;d=e;if(b|0?(g=(c[a+16>>2]|0)+272|0,c[g>>2]|0):0){$B(a,68910)|0;jC(a,c[g>>2]|0,2);$B(a,68921)|0;c[d>>2]=mJ(b,c[45950]|0)|0;fC(a,68925,d)}l=e;return}function Ld(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;k=m;f=c[b+16>>2]|0;if(!(+h[f+40>>3]<.5)){Sd(b,f+16|0);i=e+4|0;gC(b,+h[(c[i>>2]|0)+16>>3]);c[j>>2]=c[c[i>>2]>>2];fC(b,68869,j);i=mJ(c[e>>2]|0,c[45950]|0)|0;switch(a[e+48>>0]|0){case 114:{n=e+32|0;f=n;g=+h[n>>3];break}case 108:{f=e+32|0;g=0.0;break}default:{n=e+32|0;f=n;g=+h[n>>3]*.5}}h[d>>3]=+h[d>>3]-g;n=d+8|0;h[n>>3]=+h[n>>3]+ +h[e+24>>3];c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];iC(b,j);$B(b,68884)|0;gC(b,+h[f>>3]);c[k>>2]=i;fC(b,68893,k)}l=m;return}function Md(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];h[f+16>>3]=+h[b+16>>3]-+h[b>>3];h[f+24>>3]=+h[b+24>>3]-+h[b+8>>3];b=a+16|0;if(d|0?(e=c[b>>2]|0,+h[e+80>>3]>.5):0){Sd(a,e+56|0);jC(a,f,2);$B(a,68827)|0}if(+h[(c[b>>2]|0)+40>>3]>.5){Td(a);Sd(a,(c[b>>2]|0)+16|0);jC(a,f,2);$B(a,68847)|0}l=g;return}function Nd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+16|0;i=j;g=a+16|0;if(e|0?(f=c[g>>2]|0,+h[f+80>>3]>.5):0){Sd(a,f+56|0);$B(a,68748)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];iC(a,i);$B(a,68757)|0;e=1;while(1){if((e|0)>=(d|0))break;f=b+(e<<4)|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];iC(a,i);$B(a,68766)|0;e=e+1|0}$B(a,68793)|0}if(+h[(c[g>>2]|0)+40>>3]>.5){Td(a);Sd(a,(c[g>>2]|0)+16|0);$B(a,68748)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];iC(a,i);$B(a,68757)|0;e=1;while(1){if((e|0)>=(d|0))break;g=b+(e<<4)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];iC(a,i);$B(a,68766)|0;e=e+1|0}$B(a,68809)|0}l=j;return}function Od(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0;k=l;l=l+16|0;f=k;i=a+16|0;if(g|0?(j=c[i>>2]|0,+h[j+80>>3]>.5):0){Sd(a,j+56|0);$B(a,68748)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];iC(a,f);$B(a,68757)|0;e=1;while(1){if((e|0)>=(d|0))break;jC(a,b+(e<<4)|0,3);$B(a,68783)|0;e=e+3|0}$B(a,68793)|0}if(+h[(c[i>>2]|0)+40>>3]>.5){Td(a);Sd(a,(c[i>>2]|0)+16|0);$B(a,68748)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];iC(a,f);$B(a,68757)|0;e=1;while(1){if((e|0)>=(d|0))break;jC(a,b+(e<<4)|0,3);$B(a,68783)|0;e=e+3|0}$B(a,68775)|0}l=k;return}function Pd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;g=l;l=l+16|0;f=g;e=a+16|0;if(+h[(c[e>>2]|0)+40>>3]>.5){Td(a);Sd(a,(c[e>>2]|0)+16|0);$B(a,68748)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];iC(a,f);$B(a,68757)|0;e=1;while(1){if((e|0)>=(d|0))break;i=b+(e<<4)|0;c[f>>2]=c[i>>2];c[f+4>>2]=c[i+4>>2];c[f+8>>2]=c[i+8>>2];c[f+12>>2]=c[i+12>>2];iC(a,f);$B(a,68766)|0;e=e+1|0}$B(a,68775)|0}l=g;return}function Qd(a,b){a=a|0;b=b|0;$B(a,68745)|0;$B(a,b)|0;$B(a,150517)|0;return}function Rd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;g=n+16|0;m=n+8|0;k=n;i=a+16|0;if(f|0?(j=c[i>>2]|0,+h[j+80>>3]>.5):0){Sd(a,j+56|0);$B(a,84352)|0;jC(a,d,e);$B(a,99578)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];iC(a,g);c[k>>2]=e;c[k+4>>2]=b;fC(a,68662,k)}if(+h[(c[i>>2]|0)+40>>3]>.5){Td(a);Sd(a,(c[i>>2]|0)+16|0);$B(a,84352)|0;jC(a,d,e);$B(a,99578)|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];iC(a,g);c[m>>2]=e;c[m+4>>2]=b;fC(a,68678,m)}l=n;return}function Sd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=l;l=l+32|0;e=f;if(b|0){switch(c[(c[a+16>>2]|0)+4>>2]|0){case 1:case 0:{d=108412;break}case 2:{d=108399;break}case 3:{d=108368;break}default:d=68714}i=+h[b+8>>3];g=+h[b+16>>3];h[e>>3]=+h[b>>3];h[e+8>>3]=i;h[e+16>>3]=g;c[e+24>>2]=d;fC(a,68721,e)}l=f;return}function Td(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m+8|0;j=m;g=b+16|0;i=c[g>>2]|0;d=c[i+160>>2]|0;gC(b,+h[i+152>>3]);$B(b,68695)|0;while(1){if(!d)break;i=d+4|0;f=c[d>>2]|0;if(!f)break;if(!(b$(f,108062)|0)){d=i;continue}else e=f;while(1){d=e+1|0;if(!(a[e>>0]|0))break;else e=d}a:while(1){if(!(a[d>>0]|0))break;c[j>>2]=d;fC(b,68710,j);while(1){e=d+1|0;if(!(a[d>>0]|0)){d=e;continue a}else d=e}}if(!(b$(f,131253)|0))h[(c[g>>2]|0)+152>>3]=0.0;c[k>>2]=f;fC(b,93588,k);d=i}l=m;return}function Ud(b){b=b|0;var d=0;$B(b,74734)|0;d=xx(c[(c[b>>2]|0)+168>>2]|0,74790)|0;if(d|0?a[d>>0]|0:0){$B(b,74801)|0;$B(b,d)|0;$B(b,74825)|0}$B(b,74846)|0;$B(b,74894)|0;$B(b,74948)|0;d=b+12|0;$B(b,qH(c[c[c[d>>2]>>2]>>2]|0)|0)|0;$B(b,78077)|0;$B(b,qH(c[(c[c[d>>2]>>2]|0)+4>>2]|0)|0)|0;$B(b,78087)|0;$B(b,qH(c[(c[c[d>>2]>>2]|0)+8>>2]|0)|0)|0;$B(b,75330)|0;$B(b,75354)|0;return}function Vd(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;i=l;l=l+48|0;g=i+16|0;f=i+8|0;e=i;d=c[b+16>>2]|0;$B(b,74569)|0;d=d+8|0;if(a[(ry(c[d>>2]|0)|0)>>0]|0){$B(b,75293)|0;$B(b,qH(ry(c[d>>2]|0)|0)|0)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;fC(b,74574,e);e=c[b+452>>2]|0;c[f>>2]=c[b+448>>2];c[f+4>>2]=e;fC(b,74590,f);m=+h[b+392>>3];k=+h[b+400>>3];j=+h[b+408>>3];h[g>>3]=+h[b+384>>3];h[g+8>>3]=m;h[g+16>>3]=k;h[g+24>>3]=j;fC(b,74623,g);$B(b,74654)|0;$B(b,74690)|0;$B(b,76284)|0;l=i;return}function Wd(a){a=a|0;$B(a,74561)|0;return}function Xd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;se(a,b,0,98484,c[(c[a+16>>2]|0)+8>>2]|0);$B(a,76284)|0;return}function Yd(a){a=a|0;$B(a,74409)|0;return}function Zd(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=c[b+16>>2]|0;d=g+8|0;se(b,c[g+212>>2]|0,0,108412,c[d>>2]|0);$B(b,74513)|0;gC(b,+h[b+488>>3]);$B(b,99578)|0;gC(b,+h[b+496>>3]);c[f>>2]=0-(c[b+360>>2]|0);fC(b,74532,f);gC(b,+h[b+504>>3]);$B(b,99578)|0;gC(b,-+h[b+512>>3]);$B(b,74556)|0;if(a[(ry(c[d>>2]|0)|0)>>0]|0){$B(b,74465)|0;$B(b,qH(ry(c[d>>2]|0)|0)|0)|0;$B(b,74473)|0}l=e;return}function _d(a){a=a|0;$B(a,74409)|0;return}function $d(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;se(a,c[d+212>>2]|0,0,104980,c[b>>2]|0);$B(a,76284)|0;$B(a,74465)|0;$B(a,qH(ry(c[b>>2]|0)|0)|0)|0;$B(a,74473)|0;return}function ae(a){a=a|0;$B(a,74409)|0;return}function be(a){a=a|0;var b=0,d=0,e=0;d=c[a+16>>2]|0;b=c[a+160>>2]|0;if((b|0)>1)b=c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0;else b=0;e=d+8|0;se(a,c[d+212>>2]|0,b,108399,c[e>>2]|0);$B(a,76284)|0;$B(a,74465)|0;$B(a,qH(ry(c[e>>2]|0)|0)|0)|0;$B(a,74473)|0;return}function ce(a){a=a|0;$B(a,74409)|0;return}function de(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=d+8|0;se(a,c[d+212>>2]|0,0,108368,c[b>>2]|0);$B(a,76284)|0;$B(a,74465)|0;b=pH(99069,c[b>>2]|0)|0;$B(a,qH(b)|0)|0;D_(b);$B(a,74473)|0;return}function ee(a){a=a|0;$B(a,74409)|0;return}function fe(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;$B(b,74415)|0;if(f|0){$B(b,74418)|0;$B(b,qH(f)|0)|0;$B(b,95669)|0}$B(b,74308)|0;$B(b,76245)|0;if(c|0?a[c>>0]|0:0){$B(b,74426)|0;$B(b,c)|0;$B(b,95669)|0}if(d|0?a[d>>0]|0:0){$B(b,74440)|0;$B(b,rH(d,1)|0)|0;$B(b,95669)|0}if(e|0?a[e>>0]|0:0){$B(b,74455)|0;$B(b,qH(e)|0)|0;$B(b,95669)|0}$B(b,76284)|0;return}function ge(a){a=a|0;$B(a,76239)|0;$B(a,74409)|0;return}function he(e,f,g){e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+176|0;L=M+160|0;K=M+152|0;F=M+136|0;J=M+128|0;E=M+120|0;D=M+112|0;C=M+104|0;B=M+96|0;A=M+88|0;y=M+80|0;w=M+72|0;v=M+64|0;u=M+56|0;t=M+48|0;i=M+40|0;q=M+32|0;s=M+24|0;r=M+16|0;p=M+8|0;o=M;I=c[e+16>>2]|0;$B(e,73940)|0;switch(a[g+48>>0]|0){case 108:{$B(e,73946)|0;break}case 114:{$B(e,73967)|0;break}default:$B(e,73986)|0}H=f+8|0;G=+h[H>>3]+ +h[g+24>>3];h[H>>3]=G;H=I+260|0;if(!(b[H>>1]&512)){$B(e,74008)|0;gC(e,+h[f>>3]);$B(e,74013)|0;gC(e,-G);$B(e,95669)|0}x=g+4|0;f=c[x>>2]|0;n=c[f+8>>2]|0;if(n){switch(c[(c[(c[(c[e>>2]|0)+168>>2]|0)+16>>2]|0)+244>>2]|0){case 1:{m=n;f=n+16|0;i=n+8|0;break}case 2:{m=n+24|0;f=n+32|0;i=n+28|0;break}default:{m=n+4|0;f=n+16|0;i=n+8|0}}j=c[f>>2]|0;f=c[i>>2]|0;k=c[n+12>>2]|0;c[o>>2]=c[m>>2];fC(e,74019,o);i=c[n+24>>2]|0;if(i|0){c[p>>2]=i;fC(e,74036,p)}$B(e,95669)|0;if(f|0){c[r>>2]=f;fC(e,74040,r)}if(k|0){c[s>>2]=k;fC(e,74058,s)}if(!j)j=0;else{c[q>>2]=j;fC(e,74077,q)}}else{c[i>>2]=c[f>>2];fC(e,74094,i);j=0;f=0}i=c[x>>2]|0;if(i|0?(z=c[i+24>>2]|0,z&127|0):0){if(!((f|0)!=0|(z&1|0)==0))fC(e,74112,t);if(!((j|0)!=0|(z&2|0)==0))fC(e,74132,u);if(z&100|0){fC(e,74153,v);if(!(z&4))f=0;else{fC(e,102960,w);f=1}if(z&64){c[y>>2]=f|0?97973:191979;fC(e,74172,y);f=1}if(z&32|0){c[A>>2]=f|0?97973:191979;fC(e,74183,A)}fC(e,95669,B)}if(z&8|0)fC(e,74198,C);if(z&16|0)fC(e,74222,D)}h[E>>3]=+h[(c[x>>2]|0)+16>>3];fC(e,74244,E);f=I+16|0;switch(c[I+48>>2]|0){case 5:{f=c[f>>2]|0;if(O$(f,134232)|0){c[J>>2]=f;fC(e,74262,J)}break}case 1:{E=d[f+1>>0]|0;J=d[f+2>>0]|0;c[F>>2]=d[f>>0];c[F+4>>2]=E;c[F+8>>2]=J;fC(e,74273,F);break}default:qa(135312,73454,486,74295)}$B(e,74308)|0;if(b[H>>1]&512){c[K>>2]=qH(c[I+212>>2]|0)|0;fC(e,74310,K);$B(e,74359)|0;gC(e,-G);$B(e,74377)|0}$B(e,rH(c[g>>2]|0,1)|0)|0;if(b[H>>1]&512)fC(e,74380,L);$B(e,74400)|0;l=M;return}function ie(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;switch(c|0){case 2:{d=pe(a,b,2)|0;break}case 3:{d=qe(a)|0;break}default:d=0}$B(a,73904)|0;ne(a,c,d);$B(a,73913)|0;gC(a,+h[b>>3]);$B(a,73919)|0;c=b+8|0;gC(a,-+h[c>>3]);$B(a,73926)|0;gC(a,+h[b+16>>3]-+h[b>>3]);$B(a,73933)|0;gC(a,+h[b+24>>3]-+h[c>>3]);$B(a,73320)|0;return}function je(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;switch(d|0){case 2:{e=pe(a,b,c)|0;break}case 3:{e=qe(a)|0;break}default:e=0}$B(a,73895)|0;ne(a,d,e);$B(a,73310)|0;e=0;while(1){if((e|0)>=(c|0))break;gC(a,+h[b+(e<<4)>>3]);$B(a,97973)|0;gC(a,-+h[b+(e<<4)+8>>3]);$B(a,99578)|0;e=e+1|0}gC(a,+h[b>>3]);$B(a,97973)|0;gC(a,-+h[b+8>>3]);$B(a,73320)|0;return}function ke(a,d,e,f,g,h){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;g=c[a+16>>2]|0;switch(h|0){case 2:{f=pe(a,d,e)|0;break}case 3:{f=qe(a)|0;break}default:f=0}$B(a,73490)|0;if(b[g+260>>1]&512){$B(a,73496)|0;$B(a,qH(c[g+212>>2]|0)|0)|0;$B(a,73502)|0}ne(a,h,f);$B(a,73507)|0;re(a,d,e);$B(a,73320)|0;return}function le(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;$B(a,73300)|0;ne(a,0,0);$B(a,73310)|0;d=0;while(1){if((d|0)>=(c|0))break;gC(a,+h[b+(d<<4)>>3]);$B(a,97973)|0;gC(a,-+h[b+(d<<4)+8>>3]);$B(a,99578)|0;d=d+1|0}$B(a,73320)|0;return}function me(a,b){a=a|0;b=b|0;$B(a,73294)|0;$B(a,qH(b)|0)|0;$B(a,75354)|0;return}function ne(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+96|0;k=q+48|0;p=q+40|0;n=q+32|0;o=q+24|0;j=q+16|0;g=q+8|0;f=q;m=c[b+16>>2]|0;$B(b,73325)|0;a:do switch(d|0){case 2:{c[f>>2]=e;fC(b,73333,f);break}case 3:{c[g>>2]=e;fC(b,73344,g);break}case 0:{$B(b,132627)|0;break}default:{d=m+56|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));oe(b,k);if((c[m+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:break a;default:{}}h[j>>3]=+(d&255)*.00392156862745098;fC(b,73355,j)}}}while(0);$B(b,73374)|0;e=m+16|0;f=k;g=e;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));oe(b,k);d=m+152|0;if(+h[d>>3]!=1.0){$B(b,73385)|0;gC(b,+h[d>>3])}switch(c[m+144>>2]|0){case 1:{c[o>>2]=73425;fC(b,73402,o);break}case 2:{c[n>>2]=73429;fC(b,73402,n);break}default:{}}b:do if((c[m+48>>2]|0)==1){d=a[e+3>>0]|0;switch(d<<24>>24){case -1:case 0:break b;default:{}}h[p>>3]=+(d&255)*.00392156862745098;fC(b,73433,p)}while(0);$B(b,95669)|0;l=q;return}function oe(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{$B(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){$B(b,134297)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;fC(b,75610,f);break a}default:qa(135312,73454,117,73474)}while(0);l=g;return}function pe(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+112|0;o=t+64|0;r=t+56|0;n=t+48|0;m=t+40|0;i=t+32|0;k=t;q=c[45952]|0;c[45952]=q+1;p=c[b+16>>2]|0;f=+(c[p+136>>2]|0)*.017453292519943295;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;aN(d,k,e,f,0);c[o>>2]=q;fC(b,73727,o);$B(b,73792)|0;gC(b,+h[k>>3]);$B(b,73797)|0;gC(b,+h[k+8>>3]);$B(b,73804)|0;gC(b,+h[k+16>>3]);$B(b,73811)|0;gC(b,+h[k+24>>3]);$B(b,73818)|0;k=p+140|0;f=+g[k>>2];if(f>0.0){h[i>>3]=f+-.001;fC(b,73823,i)}else $B(b,73599)|0;d=p+56|0;e=o;i=d;j=e+40|0;do{c[e>>2]=c[i>>2];e=e+4|0;i=i+4|0}while((e|0)<(j|0));oe(b,o);$B(b,73635)|0;a:do if((c[p+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{s=7;break a}default:{}}h[m>>3]=+(d&255)*.00392156862745098;fC(b,96586,m)}else s=7;while(0);if((s|0)==7)$B(b,73650)|0;$B(b,73653)|0;f=+g[k>>2];if(f>0.0){h[n>>3]=f;fC(b,73823,n)}else $B(b,73659)|0;d=p+96|0;e=o;i=d;j=e+40|0;do{c[e>>2]=c[i>>2];e=e+4|0;i=i+4|0}while((e|0)<(j|0));oe(b,o);$B(b,73635)|0;b:do if((c[p+128>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{s=14;break b}default:{}}h[r>>3]=+(d&255)*.00392156862745098;fC(b,96586,r)}else s=14;while(0);if((s|0)==14)$B(b,73650)|0;$B(b,73863)|0;l=t;return q|0}function qe(b){b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+64|0;k=q+16|0;o=q+8|0;j=q;n=c[45951]|0;c[45951]=n+1;m=c[b+16>>2]|0;r=+(c[m+136>>2]|0)*.017453292519943295;e=r;if(r==0.0){f=50;d=50}else{f=~~((+E(+e)+1.0)*50.0);d=~~((1.0-+F(+e))*50.0)}c[k>>2]=n;c[k+4>>2]=f;c[k+8>>2]=d;fC(b,73515,k);$B(b,73599)|0;d=m+56|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));oe(b,k);$B(b,73635)|0;a:do if((c[m+88>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{p=6;break a}default:{}}h[j>>3]=+(d&255)*.00392156862745098;fC(b,96586,j)}else p=6;while(0);if((p|0)==6)$B(b,73650)|0;$B(b,73653)|0;$B(b,73659)|0;d=m+96|0;f=k;g=d;i=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(i|0));oe(b,k);$B(b,73635)|0;b:do if((c[m+128>>2]|0)==1){d=a[d+3>>0]|0;switch(d<<24>>24){case -1:case 0:{p=10;break b}default:{}}h[o>>3]=+(d&255)*.00392156862745098;fC(b,96586,o)}else p=10;while(0);if((p|0)==10)$B(b,73650)|0;$B(b,73695)|0;l=q;return n|0}function re(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0;i=l;l=l+16|0;g=i;e=77;f=0;while(1){if((f|0)>=(d|0))break;c[g>>2]=e;fC(a,73512,g);gC(a,+h[b+(f<<4)>>3]);$B(a,97973)|0;gC(a,-+h[b+(f<<4)+8>>3]);e=(f|0)==0?67:32;f=f+1|0}l=i;return}function se(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;h=j;$B(b,74483)|0;$B(b,qH(d)|0)|0;if(e|0){c[h>>2]=qH(e)|0;fC(b,74491,h)}c[i>>2]=f;fC(b,74495,i);d=xx(g,74507)|0;if(d|0?a[d>>0]|0:0){$B(b,99578)|0;$B(b,qH(d)|0)|0}$B(b,95669)|0;l=j;return}function te(a){a=a|0;var b=0;$B(a,75314)|0;b=a+12|0;$B(a,De(c[c[c[b>>2]>>2]>>2]|0)|0)|0;$B(a,78077)|0;$B(a,De(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;$B(a,78087)|0;$B(a,De(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;$B(a,75330)|0;return}function ue(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[b+16>>2]|0;$B(b,75291)|0;d=d+8|0;if(a[(ry(c[d>>2]|0)|0)>>0]|0){$B(b,75293)|0;$B(b,De(ry(c[d>>2]|0)|0)|0)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;fC(b,75302,e);c[45953]=0;l=f;return}function ve(a){a=a|0;c[45953]=1;return}function we(a){a=a|0;c[45953]=-1;return}function xe(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;i=n+8|0;m=n;f=c[b+16>>2]|0;if(c[f+144>>2]|0?(k=e+4|0,j=~~(+h[b+352>>3]*+h[(c[k>>2]|0)+16>>3]),j|0):0){Ee(b);$B(b,75230)|0;g=d+8|0;h[g>>3]=+h[g>>3]-+(j|0)*.55;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];iC(b,i);$B(b,75244)|0;$B(b,c[e>>2]|0)|0;$B(b,75253)|0;$B(b,75051)|0;g=i;d=f+16|0;f=g+40|0;do{c[g>>2]=c[d>>2];g=g+4|0;d=d+4|0}while((g|0)<(f|0));Fe(b,i);$B(b,75255)|0;i=c[k>>2]|0;k=c[i+8>>2]|0;k=c[((k|0)==0?i:k+4|0)>>2]|0;$B(b,95669)|0;$B(b,k)|0;$B(b,95669)|0;c[m>>2]=j;fC(b,75264,m);switch(a[e+48>>0]|0){case 108:{$B(b,75269)|0;break}case 114:{$B(b,75280)|0;break}default:{}}Ge(b);$B(b,150517)|0}l=n;return}function ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;f=j;g=c[a+16>>2]|0;i=g+144|0;if(c[i>>2]|0){n=+h[b>>3];m=+h[b+24>>3];e=b+8|0;k=+h[e>>3];h[b>>3]=n-+h[b+16>>3]+n;h[e>>3]=k-m+k;Ee(a);$B(a,75216)|0;jC(a,b,2);$B(a,75051)|0;do if(!d)if(!(c[45953]|0)){$B(a,94227)|0;break}else{$B(a,134116)|0;break}else{b=f;d=g+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Fe(a,f)}while(0);if((c[45953]|0)==1)c[45953]=0;$B(a,75162)|0;gC(a,+h[g+152>>3]);$B(a,75205)|0;b=f;d=g+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Fe(a,f);b=c[i>>2]|0;if((b|0)==1){$B(a,75059)|0;b=c[i>>2]|0}if((b|0)==2)$B(a,75068)|0;Ge(a);$B(a,150517)|0}l=j;return}function ze(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+48|0;f=j;g=c[a+16>>2]|0;i=g+144|0;if(c[i>>2]|0){Ee(a);$B(a,75188)|0;jC(a,b,d);$B(a,75051)|0;do if(!e)if(!(c[45953]|0)){$B(a,94227)|0;break}else{$B(a,134116)|0;break}else{b=f;d=g+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Fe(a,f)}while(0);if((c[45953]|0)==1)c[45953]=0;$B(a,75162)|0;gC(a,+h[g+152>>3]);$B(a,75205)|0;b=f;d=g+16|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Fe(a,f);b=c[i>>2]|0;if((b|0)==1){$B(a,75059)|0;b=c[i>>2]|0}if((b|0)==2)$B(a,75068)|0;Ge(a);$B(a,150517)|0}l=j;return}function Ae(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0;m=l;l=l+48|0;i=m;j=c[a+16>>2]|0;k=j+144|0;if(c[k>>2]|0){Ee(a);$B(a,75037)|0;jC(a,b,d);$B(a,75051)|0;e=i;f=j+16|0;g=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));Fe(a,i);$B(a,75162)|0;gC(a,+h[j+152>>3]);e=c[k>>2]|0;if((e|0)==1){$B(a,75059)|0;e=c[k>>2]|0}if((e|0)==2)$B(a,75068)|0;$B(a,75171)|0;Ge(a);$B(a,150517)|0}l=m;return}function Be(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;g=i;e=c[a+16>>2]|0;h=e+144|0;if(c[h>>2]|0){Ee(a);$B(a,75037)|0;jC(a,b,d);$B(a,75051)|0;f=g;b=e+16|0;d=f+40|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0}while((f|0)<(d|0));Fe(a,g);b=c[h>>2]|0;if((b|0)==1){$B(a,75059)|0;b=c[h>>2]|0}if((b|0)==2)$B(a,75068)|0;Ge(a);$B(a,150517)|0}l=i;return}function Ce(a,b){a=a|0;b=b|0;$B(a,75034)|0;$B(a,De(b)|0)|0;$B(a,150517)|0;return}function De(a){a=a|0;return a|0}function Ee(b){b=b|0;if(!(a[b+144>>0]|0))$B(b,75159)|0;else $B(b,c[b+148>>2]|0)|0;return}function Fe(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{$B(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){$B(b,94227)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;fC(b,75610,f);break a}default:qa(135312,75077,49,75141)}while(0);l=g;return}function Ge(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;f=c[a+16>>2]|0;switch(c[f+12>>2]|0){case 8:{b=1;d=108399;e=f+8|0;break}case 10:{b=0;d=108399;e=f+8|0;break}case 3:case 2:case 9:{b=1;d=108368;e=f+8|0;break}case 7:case 6:case 11:{b=0;d=108368;e=f+8|0;break}case 0:{b=1;d=108412;e=f+8|0;break}case 4:{b=0;d=75113;e=f+8|0;break}case 1:{b=1;d=108412;e=f+8|0;break}case 5:{b=0;d=108412;e=f+8|0;break}default:qa(135312,75077,106,75096)}f=c[(c[e>>2]|0)+8>>2]|0;c[g>>2]=b;c[g+4>>2]=d;c[g+8>>2]=f;fC(a,75125,g);l=h;return}function He(a){a=a|0;var b=0;$B(a,78049)|0;$B(a,78057)|0;b=a+12|0;$B(a,Se(c[c[c[b>>2]>>2]>>2]|0)|0)|0;$B(a,78077)|0;$B(a,Se(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;$B(a,78087)|0;$B(a,Se(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;$B(a,78090)|0;return}function Ie(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+32|0;i=j+24|0;g=j+16|0;f=j+8|0;e=j;d=c[b+16>>2]|0;c[45957]=~~(+h[b+232>>3]-+h[b+216>>3]);c[45956]=~~(+h[b+224>>3]-+h[b+208>>3]);$B(b,76736)|0;$B(b,76743)|0;d=ry(c[d+8>>2]|0)|0;if(a[d>>0]|0){$B(b,76812)|0;$B(b,Se(d)|0)|0;$B(b,76820)|0}c[e>>2]=O(c[b+168>>2]|0,c[b+164>>2]|0)|0;fC(b,76829,e);$B(b,76849)|0;$B(b,76884)|0;$B(b,76912)|0;$B(b,76918)|0;$B(b,76961)|0;$B(b,77002)|0;$B(b,77021)|0;$B(b,77038)|0;$B(b,77086)|0;$B(b,77139)|0;$B(b,77215)|0;$B(b,77291)|0;$B(b,77300)|0;$B(b,77323)|0;$B(b,77350)|0;$B(b,77403)|0;$B(b,77425)|0;$B(b,77470)|0;$B(b,77482)|0;$B(b,77492)|0;$B(b,77518)|0;$B(b,77403)|0;$B(b,77570)|0;$B(b,77470)|0;$B(b,77482)|0;$B(b,77614)|0;$B(b,77323)|0;$B(b,77350)|0;$B(b,77403)|0;$B(b,77570)|0;$B(b,77470)|0;$B(b,77482)|0;$B(b,77492)|0;$B(b,77518)|0;$B(b,77403)|0;$B(b,77425)|0;$B(b,77470)|0;$B(b,77482)|0;$B(b,77627)|0;$B(b,77635)|0;$B(b,77641)|0;$B(b,77655)|0;$B(b,77663)|0;$B(b,77696)|0;e=(c[45957]|0)+10|0;c[f>>2]=c[45956];c[f+4>>2]=e;fC(b,77773,f);$B(b,77803)|0;$B(b,77812)|0;$B(b,77870)|0;$B(b,77880)|0;$B(b,77945)|0;f=c[45957]|0;c[g>>2]=c[45956];c[g+4>>2]=f;fC(b,77982,g);g=c[45957]|0;c[i>>2]=c[45956];c[i+4>>2]=g;fC(b,78010,i);l=j;return}function Je(a){a=a|0;$B(a,76287)|0;$B(a,76299)|0;$B(a,76307)|0;$B(a,76370)|0;$B(a,76299)|0;$B(a,76415)|0;$B(a,76464)|0;$B(a,76518)|0;$B(a,76299)|0;$B(a,76618)|0;$B(a,76667)|0;$B(a,76299)|0;$B(a,76719)|0;return}function Ke(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=l;l=l+32|0;i=j+16|0;h=j+8|0;g=j;$B(b,76245)|0;if(d|0?a[d>>0]|0:0){c[g>>2]=Se(d)|0;fC(b,76248,g)}if(e|0?a[e>>0]|0:0){c[h>>2]=Se(e)|0;fC(b,76259,h)}if(f|0?a[f>>0]|0:0){c[i>>2]=Se(f)|0;fC(b,76271,i)}$B(b,76284)|0;l=j;return}function Le(a){a=a|0;$B(a,76239)|0;return}function Me(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0;A=l;l=l+112|0;y=A+96|0;z=A+88|0;w=A+80|0;q=A+72|0;v=A+64|0;t=A+56|0;s=A+48|0;r=A+40|0;p=A+24|0;o=A+8|0;n=A;x=c[b+16>>2]|0;switch(a[f+48>>0]|0){case 108:{j=+h[e>>3];m=+h[f+32>>3];break}case 114:{m=+h[f+32>>3];j=+h[e>>3]-m;break}default:{m=+h[f+32>>3];j=+h[e>>3]-m*.5}}g=f+40|0;i=+h[g>>3];u=f+4|0;k=+h[(c[u>>2]|0)+16>>3];if(i<k){i=k*1.1+1.0;h[g>>3]=i}B=j+-8.0;k=+((c[45957]|0)>>>0)-+h[e+8>>3]-i+k*.2+(k<12.0?1.4:2.0);fC(b,75901,n);h[o>>3]=B;h[o+8>>3]=k;fC(b,75838,o);h[p>>3]=j+8.0+m-B;h[p+8>>3]=i;fC(b,75862,p);$B(b,75936)|0;$B(b,75970)|0;g=c[u>>2]|0;e=c[g+8>>2]|0;if(e){c[r>>2]=c[e+4>>2];fC(b,76060,r);g=c[e+8>>2]|0;if(g|0){c[s>>2]=g;fC(b,76079,s)}g=c[e+12>>2]|0;if(g|0){c[t>>2]=g;fC(b,76096,t)}g=c[e+16>>2]|0;if(g|0){c[v>>2]=g;fC(b,76114,v)}}else{c[q>>2]=c[g>>2];fC(b,76060,q)}h[w>>3]=+h[(c[u>>2]|0)+16>>3];fC(b,76130,w);g=x+16|0;switch(c[x+48>>2]|0){case 5:{g=c[g>>2]|0;if(O$(g,134232)|0){c[z>>2]=g;fC(b,76150,z)}break}case 1:{x=d[g+1>>0]|0;z=d[g+2>>0]|0;c[y>>2]=d[g>>0];c[y+4>>2]=x;c[y+8>>2]=z;fC(b,76160,y);break}default:qa(135312,75624,438,76181)}$B(b,76194)|0;$B(b,Se(c[f>>2]|0)|0)|0;$B(b,76205)|0;$B(b,76228)|0;l=A;return}function Ne(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0.0,m=0.0;e=l;l=l+32|0;f=e+16|0;j=e;$B(a,75802)|0;m=+h[b>>3];i=+h[b+16>>3]-m;k=+h[b+24>>3];g=k-+h[b+8>>3];k=+((c[45957]|0)>>>0)-k;h[j>>3]=m-i;h[j+8>>3]=k;fC(a,75838,j);h[f>>3]=i*2.0;h[f+8>>3]=g*2.0;fC(a,75862,f);We(a,d);$B(a,75684)|0;Ue(a);$B(a,75890)|0;l=e;return}function Oe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+24|0;j=m+8|0;g=m;$B(a,75407)|0;n=c[45957]|0;c[g>>2]=c[45956];c[g+4>>2]=n;fC(a,75660,g);We(a,e);$B(a,75684)|0;Ue(a);$B(a,75687)|0;g=d+-1|0;e=0;while(1){if((e|0)>=(d|0))break;i=+h[b+(e<<4)>>3];f=+((c[45957]|0)>>>0)-+h[b+(e<<4)+8>>3];if(!e){$B(a,75714)|0;h[j>>3]=i;h[j+8>>3]=f;fC(a,75780,j);$B(a,75791)|0}else{h[k>>3]=i;h[k+8>>3]=f;fC(a,75780,k)}if((e|0)==(g|0))$B(a,75794)|0;e=e+1|0}$B(a,75523)|0;l=m;return}function Pe(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;f=l;l=l+16|0;e=f;$B(a,75407)|0;h=c[45957]|0;c[e>>2]=c[45956];c[e+4>>2]=h;fC(a,75660,e);We(a,g);$B(a,75684)|0;Ue(a);$B(a,75687)|0;Xe(a,b,d);$B(a,75700)|0;l=f;return}function Qe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0.0;k=l;l=l+48|0;j=k+24|0;i=k+8|0;f=k;$B(a,75407)|0;g=c[45957]|0;c[f>>2]=c[45956];c[f+4>>2]=g;fC(a,75444,f);$B(a,75484)|0;f=d+-1|0;g=b+8|0;e=0;while(1){if((e|0)>=(d|0))break;if(!e){$B(a,75496)|0;m=+((c[45957]|0)>>>0)-+h[g>>3];h[i>>3]=+h[b>>3];h[i+8>>3]=m;fC(a,75500,i);$B(a,75511)|0}else{m=+((c[45957]|0)>>>0)-+h[b+(e<<4)+8>>3];h[j>>3]=+h[b+(e<<4)>>3];h[j+8>>3]=m;fC(a,75500,j)}if((e|0)==(f|0))$B(a,75515)|0;e=e+1|0}$B(a,75519)|0;Ue(a);$B(a,75523)|0;l=k;return}function Re(a,b){a=a|0;b=b|0;$B(a,75342)|0;$B(a,Se(b)|0)|0;$B(a,75354)|0;return}function Se(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+16|0;e=u;d=c[45954]|0;if(!d){c[45955]=64;d=vH(64)|0;c[45954]=d}s=e+15|0;r=e+14|0;g=0;q=0;o=0;e=0;f=0;a:while(1){n=(o|0)!=0;k=g;p=b;j=e;b:while(1){if(!p){t=32;break a}e=a[p>>0]|0;if(!(e<<24>>24)){t=32;break a}b=c[45955]|0;if((q|0)>(b+-8|0)){d=b<<1;c[45955]=d;d=xH(c[45954]|0,d)|0;c[45954]=d;d=d+q|0;e=a[p>>0]|0}switch(e<<24>>24){case 60:{e=4;b=99127;t=26;break b}case 62:{e=4;b=99110;t=27;break b}case 38:{t=10;break b}case 45:{e=5;b=99121;i=j;break b}default:{}}if(n&e<<24>>24==32){t=12;break}switch(e<<24>>24){case 34:{e=6;b=99090;t=26;break b}case 39:{e=5;b=99115;t=27;break b}default:{}}if(e<<24>>24<0){i=127;b=0}else{e=1;b=p;t=26;break}while(1){g=i&255;h=e&255;if(g>>>0>=h>>>0)break;e=i&h&255;i=g>>>1;b=b+1|0}if((b|0)<=1){g=A3(j|0,f|0,6)|0;g=s3(g|0,z|0,e&255|0,0)|0;f=z;m=k+-1|0;if((k|0)>1){b=m;e=g}else{t=21;break}}else{b=b+-1|0;e=e&255;f=0}k=b;p=p+1|0;j=e}if((t|0)==10){t=0;b=(Te(p)|0)==0;e=b?5:1;b=b?99104:p;i=j}else if((t|0)==12){t=0;b=(a[o>>0]|0)==32;e=b?6:1;b=b?99097:p;i=j}else if((t|0)==21){t=0;a[s>>0]=59;e=3;h=r;i=g;j=f;while(1){b=x3(i|0,j|0,10,0)|0;g=h+-1|0;a[h>>0]=b|48;b=i;i=w3(i|0,j|0,10,0)|0;f=j;j=z;o=e;e=e+1|0;if((o|0)>11){t=23;break a}if(!(f>>>0>0|(f|0)==0&b>>>0>9))break;else h=g}b=h+-2|0;a[g>>0]=35;a[b>>0]=38;k=m;f=j}else if((t|0)==26){t=0;i=j}else if((t|0)==27){t=0;i=j}h=d+e|0;g=e;while(1){if(!g)break;a[d>>0]=a[b>>0]|0;g=g+-1|0;b=b+1|0;d=d+1|0}g=k;b=p+1|0;q=e+q|0;o=p;d=h;e=i}if((t|0)==23){E1(75360,46,1,c[15686]|0)|0;Sa(1)}else if((t|0)==32){a[d>>0]=0;l=u;return c[45954]|0}return 0}function Te(b){b=b|0;var c=0,d=0;d=b+1|0;c=a[d>>0]|0;a:do if(c<<24>>24==35){d=b+2|0;c=a[d>>0]|0;switch(c<<24>>24){case 88:case 120:break;default:{b=d;while(1){d=b+1|0;if((c+-48&255)>=10)break a;b=d;c=a[d>>0]|0}}}d=b+3|0;while(1){c=a[d>>0]|0;if((c+-48&255)>=10)switch(c<<24>>24){case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:break;default:break a}d=d+1|0}}else while(1){b=d+1|0;if(((c&-33)+-65&255)>=26)break a;d=b;c=a[b>>0]|0}while(0);return c<<24>>24==59|0}function Ue(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;k=l;l=l+48|0;d=k+8|0;j=k;i=c[a+16>>2]|0;$B(a,75535)|0;e=d;f=i+16|0;g=e+40|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));Ve(a,d);b=+h[i+152>>3];if(b!=1.0){h[j>>3]=b;fC(a,75553,j)}switch(c[i+144>>2]|0){case 1:{$B(a,75570)|0;break}case 2:{$B(a,75588)|0;break}default:{}}$B(a,75605)|0;l=k;return}function Ve(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;g=l;l=l+16|0;f=g;a:do switch(c[e+32>>2]|0){case 5:{$B(b,c[e>>2]|0)|0;break}case 1:if(!(a[e+3>>0]|0)){$B(b,132627)|0;break a}else{i=d[e+1>>0]|0;h=d[e+2>>0]|0;c[f>>2]=d[e>>0];c[f+4>>2]=i;c[f+8>>2]=h;fC(b,75610,f);break a}default:qa(135312,75624,94,75644)}while(0);l=g;return}function We(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g;if(!b)$B(a,75763)|0;else{d=c[a+16>>2]|0;$B(a,75733)|0;b=f;d=d+56|0;e=b+40|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));Ve(a,f);$B(a,75760)|0}l=g;return}function Xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0;i=l;l=l+32|0;g=i;e=75714;f=0;while(1){if((f|0)>=(d|0))break;k=+h[b+(f<<4)>>3];j=+((c[45957]|0)>>>0)-+h[b+(f<<4)+8>>3];c[g>>2]=e;h[g+8>>3]=k;h[g+16>>3]=j;fC(a,75717,g);e=(f|0)==0?75730:191979;f=f+1|0}$B(a,95669)|0;l=i;return}function Ye(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;$B(a,80347)|0;$B(a,80362)|0;$B(a,80401)|0;$B(a,80450)|0;c[e>>2]=134232;c[e+4>>2]=80538;fC(a,80519,e);c[d>>2]=134116;c[d+4>>2]=80544;fC(a,80519,d);l=b;return}function Ze(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0;b=l;l=l+64|0;d=b+8|0;j=b;c[j>>2]=ry(c[(c[a+16>>2]|0)+8>>2]|0)|0;fC(a,79300,j);i=+h[a+368>>3]*.5*+h[a+488>>3];g=+h[a+376>>3]*.5*+h[a+496>>3];f=+J(+(i*2.0000000949949026e-03))*180.0*.6366197723675814;e=+J(+(g*2.0000000949949026e-03))*180.0*.6366197723675814;h[d>>3]=i;h[d+8>>3]=g;h[d+16>>3]=-500.0;h[d+24>>3]=i;h[d+32>>3]=g;h[d+40>>3]=0.0;h[d+48>>3]=(f>e?f:e)*1.2;fC(a,79322,d);$B(a,79469)|0;$B(a,80299)|0;l=b;return}function _e(a){a=a|0;$B(a,79283)|0;return}function $e(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0;f=l;l=l+16|0;h=f;c[h>>2]=b;c[h+4>>2]=d;c[h+8>>2]=e;fC(a,79253,h);g[45958]=+(O(d,-10)|0);l=f;return}function af(a){a=a|0;$B(a,79236)|0;return}function bf(a){a=a|0;$B(a,79218)|0;return}function cf(a){a=a|0;$B(a,79202)|0;return}function df(a){a=a|0;$B(a,79181)|0;g[45958]=+g[45958]+-2.0;return}function ef(a){a=a|0;$B(a,79162)|0;return}function ff(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=ry(c[(c[a+16>>2]|0)+8>>2]|0)|0;fC(a,79140,d);l=b;return}function gf(a){a=a|0;$B(a,79124)|0;return}function hf(a){a=a|0;$B(a,79106)|0;g[45958]=+g[45958]+-5.0;return}function jf(a){a=a|0;$B(a,79090)|0;g[45958]=+g[45958]+5.0;return}function kf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0;r=l;l=l+144|0;o=r+104|0;q=r+56|0;m=r+32|0;j=r+24|0;n=r;p=e+4|0;i=c[p>>2]|0;f=+h[i+16>>3];i=c[i>>2]|0;c[n>>2]=c[e>>2];h[n+8>>3]=f;c[n+16>>2]=i;fC(b,78936,n);g[45959]=+g[45958]+-9.0;switch(a[e+48>>0]|0){case 108:{f=+h[d>>3];break}case 114:{i=d;f=+h[d>>3]-+h[e+32>>3];k=5;break}default:{i=d;f=+h[d>>3]-+h[e+32>>3]*.5;k=5}}if((k|0)==5)h[i>>3]=f;u=+h[b+488>>3];t=(+h[b+504>>3]+f)*u;s=(+h[b+512>>3]+ +h[d+8>>3])*+h[b+496>>3];h[j>>3]=+h[(c[p>>2]|0)+16>>3]*u;n=qf(b,78988,j)|0;f=+(c[b+360>>2]|0);h[m>>3]=0.0;h[m+8>>3]=0.0;h[m+16>>3]=f;i=qf(b,78205,m)|0;f=+g[45959];h[o>>3]=t;h[o+8>>3]=s;h[o+16>>3]=f;d=qf(b,78237,o)|0;j=o;k=(c[b+16>>2]|0)+16|0;m=j+40|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(m|0));o=rf(b,o,0.0)|0;e=c[e>>2]|0;c[q>>2]=c[c[p>>2]>>2];h[q+8>>3]=.25;h[q+16>>3]=0.0;c[q+24>>2]=e;c[q+28>>2]=79075;c[q+32>>2]=n;c[q+36>>2]=i;c[q+40>>2]=d;c[q+44>>2]=o;q=qf(b,79e3,q)|0;$B(b,q)|0;D_(q);D_(i);D_(o);D_(d);D_(n);l=r;return}function lf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0;z=l;l=l+240|0;x=z+192|0;y=z+152|0;t=z+128|0;r=z+104|0;o=z+80|0;n=z+48|0;e=z+24|0;m=z;$B(a,78813)|0;g[45959]=+g[45958]+-6.0;i=+h[b>>3];j=+h[a+488>>3];p=(+h[a+504>>3]+i)*j;A=+h[b+8>>3];k=+h[a+496>>3];q=(+h[a+512>>3]+A)*k;j=(+h[b+16>>3]-i)*j;k=(+h[b+24>>3]-A)*k;s=a+16|0;A=k+j;i=+h[(c[s>>2]|0)+152>>3]/A*2.5;h[m>>3]=j;h[m+8>>3]=A*.25;h[m+16>>3]=k;b=qf(a,78173,m)|0;m=a+360|0;A=+(c[m>>2]|0);h[e>>3]=90.0;h[e+8>>3]=0.0;h[e+16>>3]=A;e=qf(a,78205,e)|0;A=+g[45959];h[x>>3]=p;h[x+8>>3]=q;h[x+16>>3]=A;f=qf(a,78237,x)|0;u=x;v=(c[s>>2]|0)+16|0;w=u+40|0;do{c[u>>2]=c[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(w|0));v=rf(a,x,0.0)|0;h[n>>3]=1.0;h[n+8>>3]=i;c[n+16>>2]=b;c[n+20>>2]=e;c[n+24>>2]=f;c[n+28>>2]=v;w=qf(a,78828,n)|0;$B(a,w)|0;D_(b);D_(e);D_(f);D_(v);D_(w);if(d|0){h[o>>3]=j;h[o+8>>3]=k;h[o+16>>3]=1.0;f=qf(a,78173,o)|0;A=+(c[m>>2]|0);h[r>>3]=0.0;h[r+8>>3]=0.0;h[r+16>>3]=A;e=qf(a,78205,r)|0;A=+g[45959];h[t>>3]=p;h[t+8>>3]=q;h[t+16>>3]=A;b=qf(a,78237,t)|0;u=x;v=(c[s>>2]|0)+56|0;w=u+40|0;do{c[u>>2]=c[v>>2];u=u+4|0;v=v+4|0}while((u|0)<(w|0));x=rf(a,x,0.0)|0;h[y>>3]=0.0;h[y+8>>3]=0.0;h[y+16>>3]=0.0;c[y+24>>2]=f;c[y+28>>2]=e;c[y+32>>2]=b;c[y+36>>2]=x;y=qf(a,78874,y)|0;$B(a,y)|0;D_(f);D_(e);D_(b);D_(x);D_(y)}l=z;return}function mf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0.0;K=l;l=l+336|0;B=K+296|0;J=K+288|0;I=K+272|0;H=K+264|0;G=K+240|0;D=K+232|0;A=K+208|0;z=K+184|0;w=K+160|0;v=K+152|0;u=K+136|0;t=K+128|0;s=K+96|0;r=K+88|0;q=K+56|0;f=K+48|0;m=K+24|0;k=K;$B(a,78678)|0;g[45959]=+g[45958]+-2.0;o=a+488|0;p=a+496|0;L=+h[p>>3];h[k>>3]=+h[o>>3];h[k+8>>3]=L;h[k+16>>3]=1.0;k=qf(a,78173,k)|0;y=a+360|0;L=+(c[y>>2]|0);h[m>>3]=0.0;h[m+8>>3]=0.0;h[m+16>>3]=L;m=qf(a,78205,m)|0;L=+g[45959]+-2.0;h[B>>3]=0.0;h[B+8>>3]=0.0;h[B+16>>3]=L;n=qf(a,78237,B)|0;C=a+16|0;i=B;j=(c[C>>2]|0)+16|0;x=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(x|0));j=rf(a,B,0.0)|0;c[f>>2]=78300;c[f+4>>2]=d+1;E=a+504|0;F=a+512|0;i=0;f=qf(a,78269,f)|0;while(1){if((i|0)>=(d|0))break;N=+h[F>>3]+ +h[b+(i<<4)+8>>3];L=+h[(c[C>>2]|0)+152>>3];h[q>>3]=+h[E>>3]+ +h[b+(i<<4)>>3];h[q+8>>3]=N;h[q+16>>3]=0.0;h[q+24>>3]=L;M=qf(a,78314,q)|0;c[r>>2]=f;c[r+4>>2]=M;x=qf(a,78343,r)|0;D_(M);D_(f);i=i+1|0;f=x}L=+h[F>>3]+ +h[b+8>>3];N=+h[(c[C>>2]|0)+152>>3];h[s>>3]=+h[E>>3]+ +h[b>>3];h[s+8>>3]=L;h[s+16>>3]=0.0;h[s+24>>3]=N;x=qf(a,78314,s)|0;c[t>>2]=f;c[t+4>>2]=x;M=qf(a,78343,t)|0;D_(x);D_(f);c[u>>2]=k;c[u+4>>2]=m;c[u+8>>2]=n;c[u+12>>2]=j;x=qf(a,78693,u)|0;c[v>>2]=M;c[v+4>>2]=x;M=qf(a,78398,v)|0;D_(x);$B(a,M)|0;D_(k);D_(m);D_(n);D_(j);D_(M);if(e|0){N=+h[p>>3];h[w>>3]=+h[o>>3];h[w+8>>3]=N;h[w+16>>3]=1.0;n=qf(a,78173,w)|0;N=+(c[y>>2]|0);h[z>>3]=0.0;h[z+8>>3]=0.0;h[z+16>>3]=N;m=qf(a,78205,z)|0;N=+g[45959]+-2.0;h[A>>3]=0.0;h[A+8>>3]=0.0;h[A+16>>3]=N;k=qf(a,78237,A)|0;i=B;j=(c[C>>2]|0)+56|0;x=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(x|0));j=rf(a,B,.25)|0;c[D>>2]=d;i=0;f=qf(a,78738,D)|0;while(1){if((i|0)>=(d|0))break;N=+h[F>>3]+ +h[b+(i<<4)+8>>3];h[G>>3]=+h[E>>3]+ +h[b+(i<<4)>>3];h[G+8>>3]=N;h[G+16>>3]=0.0;D=qf(a,78753,G)|0;c[H>>2]=f;c[H+4>>2]=D;M=qf(a,78775,H)|0;D_(D);D_(f);i=i+1|0;f=M}c[I>>2]=n;c[I+4>>2]=m;c[I+8>>2]=k;c[I+12>>2]=j;I=qf(a,78785,I)|0;c[J>>2]=f;c[J+4>>2]=I;M=qf(a,78398,J)|0;D_(I);$B(a,M)|0;D_(n);D_(m);D_(k);D_(j);D_(M)}l=K;return}function nf(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0;B=l;l=l+208|0;e=B+160|0;A=B+152|0;z=B+136|0;y=B+128|0;x=B+96|0;w=B+88|0;v=B+56|0;k=B+48|0;s=B+24|0;r=B;$B(a,78605)|0;g[45959]=+g[45958]+-4.0;C=+h[a+496>>3];h[r>>3]=+h[a+488>>3];h[r+8>>3]=C;h[r+16>>3]=1.0;r=qf(a,78173,r)|0;C=+(c[a+360>>2]|0);h[s>>3]=0.0;h[s+8>>3]=0.0;h[s+16>>3]=C;s=qf(a,78205,s)|0;C=+g[45959]+-2.0;h[e>>3]=0.0;h[e+8>>3]=0.0;h[e+16>>3]=C;t=qf(a,78237,e)|0;u=a+16|0;f=e;i=(c[u>>2]|0)+56|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));n=rf(a,e,0.0)|0;c[k>>2]=78619;c[k+4>>2]=d+2;o=a+504|0;p=a+512|0;q=d+-1|0;m=0;e=qf(a,78269,k)|0;while(1){if((m|0)>=(d|0))break;f=b+(m<<4)|0;i=b+(m<<4)+8|0;D=+h[p>>3]+ +h[i>>3];C=+h[(c[u>>2]|0)+152>>3];h[v>>3]=+h[o>>3]+ +h[f>>3];h[v+8>>3]=D;h[v+16>>3]=0.0;h[v+24>>3]=C;k=qf(a,78314,v)|0;c[w>>2]=e;c[w+4>>2]=k;j=qf(a,78343,w)|0;D_(k);D_(e);if((m|0)==0|(m|0)==(q|0)){C=+h[p>>3]+ +h[i>>3];D=+h[(c[u>>2]|0)+152>>3];h[x>>3]=+h[o>>3]+ +h[f>>3];h[x+8>>3]=C;h[x+16>>3]=0.0;h[x+24>>3]=D;k=qf(a,78314,x)|0;c[y>>2]=j;c[y+4>>2]=k;e=qf(a,78343,y)|0;D_(k);D_(j)}else e=j;m=m+1|0}c[z>>2]=r;c[z+4>>2]=s;c[z+8>>2]=t;c[z+12>>2]=n;b=qf(a,78628,z)|0;c[A>>2]=e;c[A+4>>2]=b;d=qf(a,78398,A)|0;D_(b);$B(a,d)|0;D_(r);D_(s);D_(t);D_(n);D_(d);l=B;return}function of(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0.0;v=l;l=l+160|0;e=v+120|0;u=v+112|0;t=v+96|0;s=v+88|0;r=v+56|0;m=v+48|0;n=v+24|0;q=v;$B(a,78157)|0;g[45959]=+g[45958]+-6.0;w=+h[a+496>>3];h[q>>3]=+h[a+488>>3];h[q+8>>3]=w;h[q+16>>3]=1.0;q=qf(a,78173,q)|0;w=+(c[a+360>>2]|0);h[n>>3]=0.0;h[n+8>>3]=0.0;h[n+16>>3]=w;n=qf(a,78205,n)|0;w=+g[45959];h[e>>3]=0.0;h[e+8>>3]=0.0;h[e+16>>3]=w;o=qf(a,78237,e)|0;p=a+16|0;f=e;i=(c[p>>2]|0)+16|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));i=rf(a,e,0.0)|0;c[m>>2]=78300;c[m+4>>2]=d;j=a+504|0;k=a+512|0;f=0;e=qf(a,78269,m)|0;while(1){if((f|0)>=(d|0))break;y=+h[k>>3]+ +h[b+(f<<4)+8>>3];w=+h[(c[p>>2]|0)+152>>3];h[r>>3]=+h[j>>3]+ +h[b+(f<<4)>>3];h[r+8>>3]=y;h[r+16>>3]=0.0;h[r+24>>3]=w;x=qf(a,78314,r)|0;c[s>>2]=e;c[s+4>>2]=x;m=qf(a,78343,s)|0;D_(x);D_(e);f=f+1|0;e=m}c[t>>2]=q;c[t+4>>2]=n;c[t+8>>2]=o;c[t+12>>2]=i;t=qf(a,78352,t)|0;c[u>>2]=e;c[u+4>>2]=t;x=qf(a,78398,u)|0;D_(t);$B(a,x)|0;D_(q);D_(n);D_(o);D_(i);D_(x);l=v;return}function pf(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;fC(a,78138,e);l=d;return}function qf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+1056|0;h=i;e=i+24|0;f=i+8|0;c[f>>2]=d;g=q0(e,1024,b,f)|0;do if((g|0)>=0)if((g|0)>1023){a=C_(g+1|0)|0;c[f>>2]=d;Z0(a,b,f)|0;break}else{a=n1(e)|0;break}else{a=c[(c[a+12>>2]|0)+16>>2]|0;c[h>>2]=c$(c[(O_()|0)>>2]|0)|0;ub[a&63](78583,h);a=n1(191979)|0}while(0);l=i;return a|0}function rf(a,b,e){a=a|0;b=b|0;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;q=l;l=l+112|0;o=q+104|0;j=q+96|0;i=q+64|0;n=q+48|0;p=q+32|0;m=q+16|0;k=q;g=c[b+32>>2]|0;a:do switch(g|0){case 5:{f=c[b>>2]|0;if(!(b$(f,133220)|0)){c[k>>2]=78420;h[k+8>>3]=e;f=qf(a,78403,k)|0;break a}if(!(b$(f,130350)|0)){c[m>>2]=78424;h[m+8>>3]=e;f=qf(a,78403,m)|0;break a}if(!(b$(f,128349)|0)){c[p>>2]=78430;h[p+8>>3]=e;f=qf(a,78403,p)|0;break a}else{c[n>>2]=f;h[n+8>>3]=e;f=qf(a,78403,n)|0;break a}}case 1:{s=+(d[b+1>>0]|0)*.00390625;r=+(d[b+2>>0]|0)*.00390625;h[i>>3]=+(d[b>>0]|0)*.00390625;h[i+8>>3]=s;h[i+16>>3]=r;h[i+24>>3]=e;f=qf(a,78435,i)|0;break}default:{p=c[15686]|0;n=c[b>>2]|0;c[j>>2]=g;c[j+4>>2]=n;g1(p,78474,j)|0;qa(135312,78524,436,78544)}}while(0);c[o>>2]=f;p=qf(a,78561,o)|0;D_(f);l=q;return p|0}function sf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;g=b;f=c[a+16>>2]|0;h=c[c[a+12>>2]>>2]|0;j=c[h>>2]|0;i=c[h+4>>2]|0;h=c[h+8>>2]|0;c[g>>2]=80990;c[g+4>>2]=j;c[g+8>>2]=i;c[g+12>>2]=h;fC(a,83609,g);f=ry(c[f+8>>2]|0)|0;c[e>>2]=80990;c[e+4>>2]=f;fC(a,83641,e);c[d>>2]=80990;fC(a,83655,d);l=b;return}function tf(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=80990;fC(a,83557,d);l=b;return}function uf(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=l;l=l+304|0;V=W+296|0;U=W+288|0;T=W+272|0;R=W+264|0;Q=W+256|0;P=W+248|0;O=W+240|0;N=W+232|0;M=W+224|0;L=W+216|0;K=W+208|0;J=W+200|0;I=W+192|0;H=W+184|0;G=W+176|0;F=W+168|0;E=W+160|0;C=W+152|0;A=W+144|0;z=W+136|0;y=W+128|0;x=W+120|0;w=W+112|0;v=W+104|0;u=W+96|0;t=W+88|0;s=W+80|0;r=W+72|0;q=W+64|0;p=W+56|0;o=W+48|0;S=W+40|0;B=W+24|0;n=W+16|0;m=W;g=c[a+456>>2]|0;i=c[a+460>>2]|0;j=c[a+464>>2]|0;k=c[a+468>>2]|0;f=a+360|0;a:do if(c[4025]|0){switch(c[f>>2]|0){case 90:case 0:break a;default:{}}Gf();c[4025]=0}while(0);e=(+(k|0)-+(i|0))*.013888888888888888;b=(+(j|0)-+(g|0))*.013888888888888888;k=(c[f>>2]|0)==90;d=k?e:b;e=k?b:e;h[m>>3]=d;h[m+8>>3]=e;fC(a,81177,m);c[n>>2]=80990;fC(a,81192,n);if(d>0.0){b=+j$(d);h[18829]=b;b=b+3.0-+(~~b|0)}else b=3.0;b=+D(10.0,+b);h[18829]=b;h[B>>3]=b;h[B+8>>3]=b;fC(a,81361,B);c[S>>2]=80990;fC(a,81396,S);c[o>>2]=80990;fC(a,81454,o);c[p>>2]=80990;fC(a,81514,p);c[q>>2]=80990;fC(a,81563,q);c[r>>2]=80990;fC(a,81602,r);c[s>>2]=80990;fC(a,81653,s);c[t>>2]=80990;fC(a,81715,t);c[u>>2]=80990;fC(a,81825,u);c[v>>2]=80990;fC(a,81916,v);c[w>>2]=80990;fC(a,81970,w);c[x>>2]=80990;fC(a,82039,x);fC(a,82075,y);c[z>>2]=80990;fC(a,82200,z);c[A>>2]=80990;fC(a,82229,A);fC(a,82269,C);c[E>>2]=80990;fC(a,82362,E);c[F>>2]=80990;fC(a,82421,F);c[G>>2]=80990;fC(a,82502,G);fC(a,82572,H);c[I>>2]=80990;fC(a,82661,I);c[J>>2]=80990;fC(a,82766,J);c[K>>2]=80990;fC(a,82842,K);c[L>>2]=80990;fC(a,82881,L);c[M>>2]=80990;fC(a,82980,M);c[N>>2]=80990;fC(a,83026,N);fC(a,83115,O);c[P>>2]=80990;fC(a,83156,P);c[Q>>2]=80990;fC(a,83239,Q);c[R>>2]=80990;fC(a,83340,R);h[T>>3]=e;h[T+8>>3]=d;fC(a,83404,T);fC(a,83432,U);fC(a,83440,V);l=W;return}function vf(a){a=a|0;var b=0;b=l;l=l+16|0;fC(a,81170,b);l=b;return}function wf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0;r=l;l=l+48|0;q=r+24|0;p=r+8|0;o=r;switch(a[e+48>>0]|0){case 108:{k=d;i=+h[e+32>>3];j=+h[d>>3];break}case 114:{i=+h[e+32>>3];g=i;f=5;break}default:{i=+h[e+32>>3];g=i*.5;f=5}}if((f|0)==5){j=+h[d>>3]-g;h[d>>3]=j;k=d}m=e+4|0;f=c[m>>2]|0;g=+h[f+16>>3];d=d+8|0;n=+h[d>>3]+g*.004629629629629629;h[d>>3]=n;i=j+i*.006944444444444444;h[k>>3]=i;f=c[f>>2]|0;do if(f){d=c[45960]|0;if(d|0?(b$(d,f)|0)==0:0)break;c[o>>2]=Ef(f)|0;fC(b,81069,o);o=c[m>>2]|0;c[45960]=c[o>>2];g=+h[o+16>>3]}while(0);f=~~g;f=(f|0)>1?f:1;if((f|0)!=(c[45961]|0)){j=+h[18829];c[p>>2]=f;h[p+8>>3]=j;fC(b,81077,p);c[45961]=f}c[q>>2]=Ff(c[e>>2]|0)|0;h[q+8>>3]=i;h[q+16>>3]=n;fC(b,81098,q);l=r;return}function xf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+48|0;f=e;i=+h[b>>3];k=(+h[b+16>>3]-i)*.027777777777777776;g=+h[b+8>>3];j=(+h[b+24>>3]-g)*.027777777777777776;c[f>>2]=1;c[f+4>>2]=d|0?81011:191979;h[f+8>>3]=k;h[f+16>>3]=j;h[f+24>>3]=i*.013888888888888888;h[f+32>>3]=g*.013888888888888888;fC(a,81017,f);l=e;return}function yf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=l;l=l+16|0;Cf(c[a+16>>2]|0,e+8|0,e);Df(a,b,d,1);l=e;return}function zf(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0;t=l;l=l+128|0;s=t+112|0;q=t+104|0;p=t+96|0;e=t+88|0;n=t+16|0;o=t;k=c[a+16>>2]|0;j=C_((d*140|0)+140|0)|0;Cf(k,t+116|0,t+80|0);v=+h[b>>3];k=n+48|0;h[k>>3]=v;u=+h[b+8>>3];h[n+56>>3]=u;c[e>>2]=~~(v+(v>=0.0?.5:-.5));c[e+4>>2]=~~(u+(u>=0.0?.5:-.5));i=o+8|0;e=j+(Y0(j,80995,e)|0)|0;r=1;g=0;while(1){m=g+3|0;if((m|0)>=(d|0))break;c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];f=1;while(1){if((f|0)==4){f=1;break}w=f+g|0;h[n+(f<<4)>>3]=+h[b+(w<<4)>>3];h[n+(f<<4)+8>>3]=+h[b+(w<<4)+8>>3];f=f+1|0}while(1){if((f|0)==7)break;XL(o,n,3,+(f|0)*.16666666666666666,0,0);u=+h[o>>3];v=+h[i>>3];c[p>>2]=~~(u+(u>=0.0?.5:-.5));c[p+4>>2]=~~(v+(v>=0.0?.5:-.5));f=f+1|0;e=e+(Y0(e,80995,p)|0)|0}r=r+6|0;g=m}c[q>>2]=j;fC(a,81002,q);D_(j);f=r+-1|0;e=0;while(1){if((e|0)>=(r|0))break;c[s>>2]=((e|0)%(f|0)|0|0)!=0&1;fC(a,81007,s);e=e+1|0}$B(a,150517)|0;l=t;return}function Af(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;Cf(c[a+16>>2]|0,e+8|0,e);Df(a,b,d,0);l=e;return}function Bf(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=80990;c[e+4>>2]=b;fC(a,80983,e);l=d;return}function Cf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;switch(c[a+144>>2]|0){case 1:{e=10.0;a=1;break}case 2:{e=10.0;a=2;break}default:{e=0.0;a=0}}c[b>>2]=a;h[d>>3]=e;return}function Df(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+16|0;i=j+8|0;g=j;f=0;while(1){if((f|0)>=(d|0))break;m=+h[b+(f<<4)>>3];k=+h[b+(f<<4)+8>>3];c[g>>2]=~~(m+(m>=0.0?.5:-.5));c[g+4>>2]=~~(k+(k>=0.0?.5:-.5));fC(a,80995,g);f=f+1|0}if(e|0){k=+h[b>>3];m=+h[b+8>>3];c[i>>2]=~~(k+(k>=0.0?.5:-.5));c[i+4>>2]=~~(m+(m>=0.0?.5:-.5));fC(a,80995,i)}$B(a,150517)|0;l=j;return}function Ef(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;a:while(1){d=15828;while(1){e=c[d+4>>2]|0;if(!e)break;if(!(b$(e,b)|0)){g=6;break a}d=d+8|0}c[f>>2]=81151;c[f+4>>2]=b;Pw(1,81125,f)|0;d=o1(b,45)|0;if(!d){d=81168;break}a[d>>0]=0}l=h;return d|0}function Ff(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;d=c[45962]|0;if(!d){c[45963]=64;d=C_(64)|0;c[45962]=d;e=0}else e=0;while(1){g=b+1|0;f=a[b>>0]|0;if(!(f<<24>>24))break;b=c[45963]|0;if((e|0)>(b+-8|0)){d=b<<1;c[45963]=d;d=F_(c[45962]|0,d)|0;c[45962]=d;d=d+e|0}if(f<<24>>24<=-1){a[d>>0]=92;c[h>>2]=f&255;Y0(d+1|0,81120,h)|0;b=g;d=d+4|0;e=e+4|0;continue}if(f<<24>>24==92){a[d>>0]=92;e=e+1|0;d=d+1|0}a[d>>0]=f;b=g;d=d+1|0;e=e+1|0}a[d>>0]=0;l=i;return c[45962]|0}function Gf(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=81151;c[b+4>>2]=83548;Pw(0,83530,b)|0;l=a;return}function Hf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0;e=l;l=l+32|0;f=e+8|0;j=e;b=b+8|0;k=c[b>>2]|0;c[j>>2]=k;c[j+4>>2]=k;fC(a,84128,j);i=(+h[d>>3]+ +h[d+16>>3])*.5;g=(+h[d+8>>3]+ +h[d+24>>3])*.5;c[f>>2]=c[b>>2];h[f+8>>3]=i;h[f+16>>3]=g;fC(a,84170,f);l=e;return}function If(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+48|0;f=e;i=+h[d>>3];k=+h[d+16>>3]-i;g=+h[d+24>>3];j=g-+h[d+8>>3];g=+(~~(+h[a+232>>3]-+h[a+216>>3])>>>0)-g;c[f>>2]=c[b+8>>2];h[f+8>>3]=k;h[f+16>>3]=j;h[f+24>>3]=i;h[f+32>>3]=g;fC(a,84215,f);$B(a,84307)|0;l=e;return}function Jf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function Kf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+160|0;s=t+152|0;r=t+136|0;q=t+120|0;k=t+112|0;n=t+104|0;m=t+88|0;j=t+72|0;i=t+64|0;o=t;if(!a)qa(108200,84312,212,84331);if(!b)qa(108230,84312,213,84331);p=b+8|0;if(!(c[p>>2]|0))qa(108233,84312,214,84331);if(c[b+52>>2]|0){c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];b=o+32|0;d=d+16|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];f=+h[o>>3];h[o+16>>3]=f;h[o+24>>3]=+h[o+40>>3];h[o+48>>3]=+h[b>>3];g=+h[o+8>>3];h[o+56>>3]=g;if(e<<24>>24){fC(a,84352,i);b=0;while(1){if((b|0)==4)break;u=+h[o+(b<<4)+8>>3];h[j>>3]=+h[o+(b<<4)>>3];h[j+8>>3]=u;fC(a,84355,j);b=b+1|0}h[m>>3]=f;h[m+8>>3]=g;fC(a,84355,m);m=c[p>>2]|0;c[n>>2]=4;c[n+4>>2]=m;fC(a,84362,n)}fC(a,84352,k);b=0;while(1){if((b|0)==4)break;u=+h[o+(b<<4)+8>>3];h[q>>3]=+h[o+(b<<4)>>3];h[q+8>>3]=u;fC(a,84355,q);b=b+1|0}h[r>>3]=f;h[r+8>>3]=g;fC(a,84355,r);r=c[p>>2]|0;c[s>>2]=4;c[s+4>>2]=r;fC(a,84377,s)}l=t;return}function Lf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+112|0;n=o+24|0;m=o+16|0;k=o;i=o+28|0;if(!b)qa(108200,84312,153,84393);if(!d)qa(108230,84312,154,84393);if(!(c[d+8>>2]|0))qa(108233,84312,155,84393);j=d+52|0;if(c[j>>2]|0){f=d+60|0;g=c[f>>2]|0;if((g|0)==98)g=18;else{tb[g&127](d);c[j>>2]=0;c[f>>2]=0;c[d+56>>2]=0;g=10}}else g=10;do if((g|0)==10){if(!((zC(d)|0)<<24>>24))break;f=j3(c[d+20>>2]|0)|0;if((c[d+24>>2]&-2|0)==6){J1(f,i)|0;i=c[i+36>>2]|0;c[d+56>>2]=i;f=U_(0,i,1,1,f,0)|0;c[j>>2]=f;a[d+16>>0]=1}else f=c[j>>2]|0;if(f|0)c[d+60>>2]=98;AC(d);if(c[j>>2]|0)g=18}while(0);if((g|0)==18){p=+h[e+8>>3]-+(c[d+36>>2]|0);h[k>>3]=+h[e>>3]-+(c[d+32>>2]|0);h[k+8>>3]=p;fC(b,84411,k);if(!(a[d+16>>0]|0)){c[m>>2]=c[d+12>>2];fC(b,84442,m)}else kJ(b,d);fC(b,84457,n)}l=o;return}function Mf(a){a=a|0;S_(c[a+52>>2]|0,c[a+56>>2]|0)|0;return}function Nf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+80|0;f=g+48|0;if(!a)qa(108200,84312,121,84467);e=c[a+16>>2]|0;if(!e)qa(96876,84312,123,84467);if(!b)qa(108230,84312,124,84467);d=b+8|0;if(!(c[d>>2]|0))qa(108233,84312,125,84467);if(!(c[e+8>>2]|0))qa(135797,84312,128,84467);else{fC(a,84487,g);fC(a,84496,g+8|0);fC(a,84523,g+16|0);fC(a,84548,g+24|0);fC(a,84577,g+32|0);fC(a,84605,g+40|0);c[f>>2]=c[d>>2];fC(a,84612,f);fC(a,84651,g+56|0);fC(a,107982,g+64|0);l=g;return}}function Of(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0.0;i=l;l=l+128|0;g=i+80|0;f=i;if(!a)qa(108200,84312,97,84656);if(!b)qa(108230,84312,98,84656);e=c[b+8>>2]|0;if(!e)qa(108233,84312,99,84656);else{m=+h[d>>3];j=~~(m+(m>=0.0?.5:-.5));m=+h[d+8>>3];b=~~(m+(m>=0.0?.5:-.5));m=+h[d+16>>3];k=~~(m+(m>=0.0?.5:-.5));m=+h[d+24>>3];d=~~(m+(m>=0.0?.5:-.5));c[f>>2]=2;c[f+4>>2]=5;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=-1;c[f+24>>2]=1;c[f+28>>2]=-1;c[f+32>>2]=0;h[f+40>>3]=0.0;c[f+48>>2]=0;c[f+52>>2]=0;c[f+56>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;c[f+68>>2]=5;c[f+72>>2]=0;c[f+76>>2]=e;fC(a,84675,f);c[g>>2]=j;c[g+4>>2]=b;c[g+8>>2]=j;c[g+12>>2]=d;c[g+16>>2]=k;c[g+20>>2]=d;c[g+24>>2]=k;c[g+28>>2]=b;c[g+32>>2]=j;c[g+36>>2]=b;fC(a,84733,g);l=i;return}}function Pf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0;o=l;l=l+96|0;n=o+56|0;m=o+32|0;k=o;i=+h[d>>3];j=+h[d+16>>3]-i;f=+h[d+24>>3];g=f-+h[d+8>>3];if(!a)qa(108200,84312,53,84765);if(!b)qa(108230,84312,54,84765);e=b+8|0;if(!(c[e>>2]|0))qa(108233,84312,55,84765);$B(a,84784)|0;$B(a,c[e>>2]|0)|0;e=a+360|0;f=-f;if(!(c[e>>2]|0)){h[n>>3]=j;h[n+8>>3]=g;h[n+16>>3]=i;h[n+24>>3]=f;fC(a,84913,n)}else{h[k>>3]=g;h[k+8>>3]=j;h[k+16>>3]=i;h[k+24>>3]=f;fC(a,84804,k);c[m>>2]=c[e>>2];h[m+8>>3]=i;h[m+16>>3]=f;fC(a,84883,m)}$B(a,84992)|0;l=o;return}function Qf(a){a=a|0;var b=0,c=0;b=Sy(a)|0;while(1){if(!b)break;Rf(b);b=Ty(a,b)|0}c=Sy(a)|0;while(1){if(!c)break;b=Ex(a,c)|0;while(1){if(!b)break;Sf(b);b=Gx(a,b)|0}c=Ty(a,c)|0}return}function Rf(a){a=a|0;var b=0,d=0;Az(a,134365,304,1)|0;dM(a);bN(a,c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&1);a=a+16|0;c[(c[a>>2]|0)+176>>2]=0;b=uH(20)|0;d=c[a>>2]|0;c[d+172>>2]=b;c[d+184>>2]=0;d=uH(20)|0;b=c[a>>2]|0;c[b+180>>2]=d;c[b+200>>2]=0;b=uH(12)|0;d=c[a>>2]|0;c[d+196>>2]=b;c[d+192>>2]=0;d=uH(12)|0;b=c[a>>2]|0;c[b+188>>2]=d;c[b+208>>2]=0;b=uH(12)|0;a=c[a>>2]|0;c[a+204>>2]=b;c[a+216>>2]=1;return}function Sf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;Az(d,134378,176,1)|0;eM(d)|0;h=KL(d,c[46404]|0,1,0)|0;g=d+16|0;c[(c[g>>2]|0)+156>>2]=h;h=NL(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,c[46398]|0,191979)|0;i=NL(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,c[46398]|0,191979)|0;e=c[g>>2]|0;f=e+154|0;b[f>>1]=1;b[e+168>>1]=1;if((h|0)==(i|0)&(a[h>>0]|0)!=0){b[f>>1]=1e3;i=e+156|0;c[i>>2]=(c[i>>2]|0)*100}if(Ok(d)|0){i=c[g>>2]|0;b[i+154>>1]=0;c[i+156>>2]=0}i=(KL(d,c[46417]|0,0,0)|0)&255;a[(c[g>>2]|0)+152>>0]=i;i=(KL(d,c[46405]|0,1,0)|0)&65535;b[(c[g>>2]|0)+170>>1]=i;return}function Tf(a){a=a|0;var b=0,d=0;Uf(c[(c[a+16>>2]|0)+192>>2]|0);d=Sy(a)|0;while(1){if(!d)break;b=Ex(a,d)|0;while(1){if(!b)break;JM(b);b=Gx(a,b)|0}Vf(d);d=Ty(a,d)|0}Wf(a);return}function Uf(b){b=b|0;var d=0,e=0,f=0,g=0;while(1){if(!b)break;f=b+16|0;g=c[(c[f>>2]|0)+164>>2]|0;Xf(b);d=c[f>>2]|0;if((a[d+156>>0]|0)!=1){b=g;continue}e=c[d+180>>2]|0;if(e){D_(e);d=c[f>>2]|0}e=c[d+172>>2]|0;if(e){D_(e);d=c[f>>2]|0}D_(d);D_(b);b=g}return}function Vf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+172>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+180>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+188>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+196>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+204>>2]|0;if(d){D_(d);b=c[e>>2]|0}nH(c[b+104>>2]|0);nH(c[(c[e>>2]|0)+108>>2]|0);b=c[(c[e>>2]|0)+8>>2]|0;if(b|0)tb[c[(c[b+4>>2]|0)+4>>2]&127](a);Cz(a,134365)|0;return}function Wf(a){a=a|0;var d=0,e=0,f=0;d=wA(a)|0;while(1){if(!d)break;Wf(d);d=xA(d)|0}if(Az(a,134401,0,1)|0){f=a+16|0;d=c[f>>2]|0;e=c[d+184>>2]|0;if(e){D_(e);d=c[f>>2]|0}e=c[d+268>>2]|0;if(e){D_(e);d=c[f>>2]|0}e=c[d+216>>2]|0;if(e){D_(e);d=c[f>>2]|0}do if(c[d+196>>2]|0){e=b[d+236>>1]|0;while(1){if((e|0)>(b[d+238>>1]|0))break;D_(c[(c[d+196>>2]|0)+(e<<6)+12>>2]|0);e=e+1|0;d=c[f>>2]|0}e=c[d+196>>2]|0;if((b[d+236>>1]|0)==-1){D_(e+-64|0);break}else{D_(e);break}}while(0);if((fz(a)|0)!=(a|0)){nH(c[(c[f>>2]|0)+12>>2]|0);Cz(a,134401)|0}}return}function Xf(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;d=c[e>>2]|0;b=c[d+176>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;b=c[(c[d+172>>2]|0)+(a<<2)>>2]|0;kh(b);D_(c[b+16>>2]|0);D_(b);b=a;d=c[e>>2]|0}b=c[d+184>>2]|0;while(1){a=b+-1|0;if((b|0)<=0)break;b=c[(c[(c[e>>2]|0)+180>>2]|0)+(a<<2)>>2]|0;kh(b);D_(c[b+16>>2]|0);D_(b);b=a}return}function Yf(a){a=a|0;if(ay(a)|0)Zf(a);eJ(a);return}function Zf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=l;l=l+48|0;g=h+32|0;f=h;b=YD(a,-1,8)|0;d=ZD(a,0,f)|0;XD(a,2,8,f)|0;d=(d|0)==0;e=(b|0)<0;if(e&d)_f(a);else{if(d)c[f+16>>2]=3;else b=e?8:b;c[f+8>>2]=b;c[f+20>>2]=0;e=rD(a,g,0)|0;b=c[g>>2]|0;do if((b|0)==1){_f(a);b=0}else{if(c[(c[(c[a+16>>2]|0)+8>>2]|0)+84>>2]|0){_f(a);b=0;break}c[f+12>>2]=1;d=0;while(1){if((d|0)>=(b|0))break;b=c[e+(d<<2)>>2]|0;$f(b,a);_f(b);d=d+1|0;b=c[g>>2]|0}ag(a);WD(c[g>>2]|0,e,a,f)|0;bg(a);cg(c[g>>2]|0,e,a);b=0}while(0);while(1){if((b|0)>=(c[g>>2]|0))break;f=e+(b<<2)|0;D_(c[(c[(c[f>>2]|0)+16>>2]|0)+8>>2]|0);Wf(c[f>>2]|0);dz(a,c[f>>2]|0)|0;b=b+1|0}D_(e)}l=h;return}function _f(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;k=m+40|0;e=m;i=KL(a,nx(a,0,85007,0)|0,-1,1)|0;$M(a,10);d=Nk(a,e)|0;eg(a,a);Qf(a);f=(i|0)==1;g=e+32|0;h=(i|0)==2;i=(i|0)==3;j=e+28|0;e=e+24|0;while(1){zj(a,d);if(f){d=3;break}if(c[g>>2]|0){Pw(0,85013,k)|0;c[e>>2]=0;d=0}Jh(a,(d|0)!=0&1);if(h){d=7;break}Mi(a,d);if(i){d=9;break}n=(c[j>>2]|0)+-1|0;c[j>>2]=n;if(!((n|0)!=0&(c[e>>2]|0)!=0)){d=11;break}}if((d|0)==3)fg(a,1);else if((d|0)==7)fg(a,2);else if((d|0)==9)fg(a,2);else if((d|0)==11){if(b[(c[a+16>>2]|0)+136>>1]&16)gg(a);tk(a);kg(a);if((QL(xx(a,85104)|0)|0)<<24>>24)nl(a)}l=m;return}function $f(b,d){b=b|0;d=d|0;var e=0,f=0;Az(b,134401,280,1)|0;e=uH(96)|0;b=c[b+16>>2]|0;c[b+8>>2]=e;d=c[d+16>>2]|0;f=c[d+8>>2]|0;h[e>>3]=+h[f>>3];h[e+24>>3]=+h[f+24>>3];c[b+144>>2]=c[d+144>>2];a[b+115>>0]=a[d+115>>0]|0;c[b+116>>2]=c[d+116>>2];c[b+248>>2]=c[d+248>>2];c[b+252>>2]=c[d+252>>2];c[b+244>>2]=c[d+244>>2];return}function ag(a){a=a|0;var b=0,d=0,e=0;b=uH((ay(a)|0)<<4)|0;d=Sy(a)|0;while(1){if(!d)break;e=c[d+16>>2]|0;c[e+132>>2]=b;h[b>>3]=+h[e+16>>3]*.013888888888888888;h[b+8>>3]=+h[e+24>>3]*.013888888888888888;b=b+16|0;d=Ty(a,d)|0}return}function bg(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[(c[(Sy(a)|0)+16>>2]|0)+132>>2]|0;b=e;d=Sy(a)|0;while(1){if(!d)break;f=c[d+16>>2]|0;c[f+132>>2]=0;h[f+16>>3]=+h[b>>3]*72.0;h[f+24>>3]=+h[b+8>>3]*72.0;b=b+16|0;d=Ty(a,d)|0}D_(e);return}function cg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=0;f=0;while(1){if((e|0)>=(a|0))break;i=(c[(c[(c[b+(e<<2)>>2]|0)+16>>2]|0)+180>>2]|0)+f|0;e=e+1|0;f=i}i=d+16|0;c[(c[i>>2]|0)+180>>2]=f;g=uH((f<<2)+4|0)|0;c[(c[i>>2]|0)+184>>2]=g;g=0;e=1;while(1){if((g|0)>=(a|0))break;h=(c[b+(g<<2)>>2]|0)+16|0;f=1;while(1){d=c[h>>2]|0;if((f|0)>(c[d+180>>2]|0))break;d=qD(c[(c[d+184>>2]|0)+(f<<2)>>2]|0)|0;c[(c[(c[i>>2]|0)+184>>2]|0)+(e<<2)>>2]=d;dg(c[(c[(c[h>>2]|0)+184>>2]|0)+(f<<2)>>2]|0,d);f=f+1|0;e=e+1|0}g=g+1|0}return}function dg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;Az(d,134401,280,1)|0;g=d+16|0;d=(c[g>>2]|0)+16|0;f=b+16|0;b=(c[f>>2]|0)+16|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];c[d+24>>2]=c[b+24>>2];c[d+28>>2]=c[b+28>>2];b=c[f>>2]|0;d=c[g>>2]|0;a[d+275>>0]=a[b+275>>0]|0;d=d+48|0;b=b+48|0;e=d+64|0;do{c[d>>2]=c[b>>2];d=d+4|0;b=b+4|0}while((d|0)<(e|0));b=c[(c[f>>2]|0)+180>>2]|0;c[(c[g>>2]|0)+180>>2]=b;d=uH((b<<2)+4|0)|0;c[(c[g>>2]|0)+184>>2]=d;d=1;while(1){e=c[f>>2]|0;if((d|0)>(b|0))break;e=qD(c[(c[e+184>>2]|0)+(d<<2)>>2]|0)|0;c[(c[(c[g>>2]|0)+184>>2]|0)+(d<<2)>>2]=e;dg(c[(c[(c[f>>2]|0)+184>>2]|0)+(d<<2)>>2]|0,e);d=d+1|0}f=e+12|0;c[(c[g>>2]|0)+12>>2]=c[f>>2];c[f>>2]=0;return}function eg(a,b){a=a|0;b=b|0;if((fz(a)|0)!=(a|0))Az(a,134401,280,1)|0;if((a|0)==(b|0))c[(c[(fz(a)|0)+16>>2]|0)+188>>2]=a;a=wA(a)|0;while(1){if(!a)break;eg(a,b);a=xA(a)|0}return}function fg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+1040|0;k=m+8|0;j=m;e=m+16|0;f=nx(a,1,87076,191979)|0;g=nx(a,1,85147,191979)|0;h=(b|0)>0;d=(b|0)==1;b=Sy(a)|0;while(1){if(!b)break;if(h?(i=b+16|0,c[j>>2]=c[(c[i>>2]|0)+232>>2],Y0(e,134313,j)|0,rx(b,f,e)|0,!d):0){c[k>>2]=c[(c[i>>2]|0)+236>>2];Y0(e,134313,k)|0;rx(b,g,e)|0}b=Ty(a,b)|0}l=m;return}function gg(a){a=a|0;var b=0,c=0,d=0;c=vA(a,86580,0)|0;if(c|0){b=Sy(c)|0;while(1){if(!b)break;d=Ty(c,b)|0;sh(a,b);hg(a,b);Vf(b);cz(a,b)|0;b=d}zA(a,c)|0}return}function hg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=c[(c[b+16>>2]|0)+232>>2]|0;i=a+16|0;a=c[(c[i>>2]|0)+196>>2]|0;d=c[a+(j<<6)>>2]|0;h=a+(j<<6)+4|0;g=0;e=0;while(1){if((e|0)>=(d|0)){f=7;break}f=c[(c[h>>2]|0)+(e<<2)>>2]|0;e=e+1|0;if((f|0)==(b|0)){f=4;break}else g=f}if((f|0)==4){while(1){if((e|0)>=(d|0))break;f=c[a+(j<<6)+4>>2]|0;c[f+(e+-1<<2)>>2]=c[f+(e<<2)>>2];f=c[(c[i>>2]|0)+196>>2]|0;e=e+1|0;d=c[f+(j<<6)>>2]|0;a=f;f=4}c[a+(j<<6)>>2]=d+-1}else if((f|0)==7?(g|0)!=(b|0):0)qa(85113,85120,248,85130);return}function ig(a){a=a|0;return c[(c[(fz(a)|0)+16>>2]|0)+188>>2]|0}function jg(b,c){b=b|0;c=c|0;var d=0;d=a[b+28>>0]|0;if(a[c+28>>0]|0)if(d<<24>>24){d=~~(+h[b>>3]-+h[c>>3]);if(!d)d=~~(+h[b+8>>3]-+h[c+8>>3])}else d=-1;else d=d<<24>>24!=0&1;return d|0}function kg(a){a=a|0;lg(a,1);return}function lg(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0;Z=l;l=l+656|0;O=Z+592|0;N=Z+552|0;f=Z+544|0;T=Z+96|0;U=Z;Y=Z+632|0;V=d+16|0;X=b[(c[V>>2]|0)+136>>1]&14;P=X&65535;Q=T+16|0;c[Q>>2]=Z+368;R=U+16|0;c[R>>2]=Z+192;do if(X<<16>>16){S=X<<16>>16==4;do if(S){mg(d);if(!(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1))A=9;else{Pw(0,85153,f)|0;A=9}}else if(X<<16>>16==8){mg(d);if(!(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1)){cN(d,0);n=0;m=0;k=0;break}else{ng(d);cN(d,1);n=0;m=0;k=0;break}}else A=9;while(0);if((A|0)==9){ll(d);if(qJ()|0)break;W=uH(96)|0;K=c[(c[V>>2]|0)+248>>2]|0;c[Y+8>>2]=(K|0)/4|0;c[Y+12>>2]=K;k=uH(512)|0;F=Y+4|0;c[F>>2]=0;c[Y>>2]=0;j=c[V>>2]|0;C=b[j+236>>1]|0;D=0;L=0;M=k;E=k;m=k;n=k;o=k;H=0;I=0;a:while(1){if((C|0)>(b[j+238>>1]|0))break;p=c[j+196>>2]|0;i=c[p+(C<<6)>>2]|0;G=i+D|0;g=c[p+(C<<6)+4>>2]|0;f=c[g>>2]|0;if(!f)f=H;else{_=+(H|0);f=c[f+16>>2]|0;y=+h[f+16>>3]-+h[f+88>>3];f=~~(y>_?_:y)}if((i|0)!=0?(J=c[g+(i+-1<<2)>>2]|0,(J|0)!=0):0){y=+(I|0);g=c[J+16>>2]|0;_=+h[g+96>>3]+ +h[g+16>>3];g=~~(_<y?y:_)}else g=I;B=f+-16|0;z=g+16|0;x=0;t=L;r=M;q=j;u=E;v=m;g=k;f=p;while(1){if((x|0)>=(i|0))break;k=c[(c[f+(C<<6)+4>>2]|0)+(x<<2)>>2]|0;w=k+16|0;f=c[w>>2]|0;i=c[f+112>>2]|0;if(i){i=i+16|0;j=c[(c[i>>2]|0)+96>>2]|0;if(!j){A=21;break a}s=j+56|0;f=f+16|0;c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];a[(c[(c[i>>2]|0)+96>>2]|0)+81>>0]=1;f=c[w>>2]|0}if((a[f+156>>0]|0)!=0?(kb[c[17300>>2]&63](k)|0)<<24>>24==0:0){q=t;f=r;j=u;k=v;i=o}else{s=0;q=t;j=u;k=v;A=25}b:do if((A|0)==25){while(1){A=0;p=c[w>>2]|0;i=c[(c[p+180>>2]|0)+(s<<2)>>2]|0;if(!i)break;switch(a[(c[i+16>>2]|0)+112>>0]|0){case 6:case 4:{f=q;i=r;break}default:{og(i,1,16,64);f=q+1|0;c[r+(q<<2)>>2]=i;if(!(f&127)){g=xH(g,(q<<2)+516|0)|0;i=g;j=g;k=g;n=g;o=g}else i=r}}s=s+1|0;q=f;r=i;A=25}f=c[p+188>>2]|0;c:do if(!f)i=o;else{s=0;i=o;while(1){f=c[f+(s<<2)>>2]|0;if(!f)break c;og(f,2,0,128);o=q+1|0;c[r+(q<<2)>>2]=f;if(!(o&127)){g=xH(i,(q<<2)+516|0)|0;f=g;j=g;k=g;n=g;i=g}else f=r;p=c[w>>2]|0;s=s+1|0;q=o;r=f;f=c[p+188>>2]|0}}while(0);f=c[p+204>>2]|0;if(!f)f=r;else{if(!(a[p+156>>0]|0)){v=p+96|0;_=+h[v>>3];s=p+240|0;h[v>>3]=+h[s>>3];h[s>>3]=_;s=0;p=r}else{s=0;p=r}while(1){f=c[f+(s<<2)>>2]|0;if(!f){f=p;break b}og(f,0,0,128);o=q+1|0;c[p+(q<<2)>>2]=f;if(!(o&127)){g=xH(n,(q<<2)+516|0)|0;f=g;j=g;k=g;n=g;i=g}else f=p;s=s+1|0;q=o;p=f;f=c[(c[w>>2]|0)+204>>2]|0}}}while(0);u=c[V>>2]|0;w=c[u+196>>2]|0;x=x+1|0;t=q;r=f;q=u;u=j;v=k;o=i;i=c[w+(C<<6)>>2]|0;f=w}C=C+1|0;D=G;L=t;M=r;E=u;j=q;m=v;k=g;H=B;I=z}if((A|0)==21)qa(85221,85234,313,85247);c[Y>>2]=H;c[F>>2]=I;_0(E,L,4,58);c[W+84>>2]=uH((D<<5)+11520|0)|0;c[Y+16>>2]=uH(C<<5)|0;d:do if(X<<16>>16==2){f=(c[V>>2]|0)+192|0;while(1){g=c[f>>2]|0;if(!g)break d;i=g+16|0;f=c[i>>2]|0;if((a[f+156>>0]|0)==1?(c[f+104>>2]|0)!=0:0){qg(g);f=c[i>>2]|0}f=f+164|0}}while(0);z=U+48|0;A=U+-48|0;B=T+48|0;C=T+-48|0;y=+(K|0);x=0;e:while(1){if((x|0)>=(L|0))break;v=M+(x<<2)|0;r=c[v>>2]|0;s=rg(r)|0;t=r+16|0;g=c[t>>2]|0;if(!(a[g+44>>0]|0)){g=(a[g+84>>0]|0)==0?s:r;f=g;g=c[g+16>>2]|0}else f=r;i=f+16|0;if(c[g+164>>2]&32){g=c[Q>>2]|0;F3(g|0,c[i>>2]|0,176)|0;n=T;o=f;p=n+48|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));c[Q>>2]=g;o=c[f>>2]&3;n=c[T>>2]&3;c[((n|0)==3?T:B)+40>>2]=c[((o|0)==2?f:f+-48|0)+40>>2];c[((n|0)==2?T:C)+40>>2]=c[((o|0)==3?f:f+48|0)+40>>2];n=g+16|0;o=(c[i>>2]|0)+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=g+56|0;o=(c[i>>2]|0)+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));a[g+112>>0]=1;c[g+116>>2]=f;f=T}q=f+16|0;w=1;f=x;while(1){u=f+1|0;if((u|0)>=(L|0))break;j=M+(u<<2)|0;f=c[j>>2]|0;if((s|0)!=(rg(f)|0))break;if(!(a[(c[t>>2]|0)+113>>0]|0)){k=f+16|0;g=c[k>>2]|0;if(!(a[g+44>>0]|0)){g=(a[g+84>>0]|0)==0?s:f;f=g;g=c[g+16>>2]|0}i=f+16|0;if(c[g+164>>2]&32){g=c[R>>2]|0;F3(g|0,c[i>>2]|0,176)|0;n=U;o=f;p=n+48|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));c[R>>2]=g;o=c[f>>2]&3;n=c[U>>2]&3;c[((n|0)==3?U:z)+40>>2]=c[((o|0)==2?f:f+-48|0)+40>>2];c[((n|0)==2?U:A)+40>>2]=c[((o|0)==3?f:f+48|0)+40>>2];n=g+16|0;o=(c[i>>2]|0)+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=g+56|0;o=(c[i>>2]|0)+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));a[g+112>>0]=1;c[g+116>>2]=f}i=c[q>>2]|0;f=g+16|0;n=N;o=i+16|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=O;o=f;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));if(jg(N,O)|0)break;f=g+56|0;n=N;o=i+56|0;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));n=O;o=f;p=n+40|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(p|0));if(jg(N,O)|0)break;K=c[t>>2]|0;if((c[K+164>>2]&15|0)==2?(c[K+96>>2]|0)!=(c[(c[k>>2]|0)+96>>2]|0):0)break;if(c[(c[(c[j>>2]|0)+16>>2]|0)+164>>2]&64|0)break}w=w+1|0;f=u}if(S){if((w|0)==1)f=O;else f=uH(w<<2)|0;c[f>>2]=rg(c[v>>2]|0)|0;g=1;while(1){if((g|0)>=(w|0))break;c[f+(g<<2)>>2]=c[v+(g<<2)>>2];g=g+1|0}AJ(d,f,w,P,17296);if((w|0)>1)D_(f);x=u;continue}f=c[r>>2]&3;K=c[((f|0)==3?r:r+48|0)+40>>2]|0;f=c[((f|0)==2?r:r+-48|0)+40>>2]|0;g=c[K+16>>2]|0;i=c[g+232>>2]|0;if((K|0)!=(f|0))if((i|0)==(c[(c[f+16>>2]|0)+232>>2]|0)){sg(d,Y,W,M,x,w,P);x=u;continue}else{tg(d,Y,W,M,x,w,P);x=u;continue}f=c[V>>2]|0;do if((i|0)==(b[f+238>>1]|0))if((i|0)>0){f=~~(+h[(c[(c[c[(c[f+196>>2]|0)+(i+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[g+24>>3]);break}else{f=~~+h[g+80>>3];break}else if((i|0)==(b[f+236>>1]|0)){f=~~(+h[g+24>>3]-+h[(c[(c[c[(c[f+196>>2]|0)+(i+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);break}else{f=c[f+196>>2]|0;_=+h[g+24>>3];K=~~(+h[(c[(c[c[f+(i+-1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-_);f=~~(_-+h[(c[(c[c[f+(i+1<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]);f=(K|0)<(f|0)?K:f;break}while(0);YK(W,M,x,w,y,+((f|0)/2|0|0),17296);f=0;while(1){if((f|0)>=(w|0)){x=u;continue e}g=c[(c[(c[M+(f+x<<2)>>2]|0)+16>>2]|0)+96>>2]|0;if(g|0)kM(d,g);f=f+1|0}}f=(c[V>>2]|0)+192|0;while(1){g=c[f>>2]|0;if(!g)break;i=g+16|0;f=c[i>>2]|0;if((a[f+156>>0]|0)==1?(c[f+104>>2]|0)!=0:0){qg(g);kM(d,c[(c[i>>2]|0)+104>>2]|0);f=c[i>>2]|0}f=f+164|0}if(!e){n=W;k=W}else{ug(d);n=W;k=W}}f:do if((c[46427]|0)!=0|(c[46428]|0)!=0?(c[46433]|0)!=0|(c[46432]|0)!=0:0){j=Sy(d)|0;while(1){if(!j)break f;g:do if(c[46427]|0){f=Hx(d,j)|0;while(1){if(!f)break g;g=f+-48|0;i=(c[f>>2]&3|0)==2?f:g;if(c[(c[i+16>>2]|0)+100>>2]|0){eL(i,1)|0;kM(d,c[(c[((c[f>>2]&3|0)==2?f:g)+16>>2]|0)+100>>2]|0)}f=Ix(d,f)|0}}while(0);h:do if(c[46428]|0){f=Ex(d,j)|0;while(1){if(!f)break h;g=f+16|0;if(c[(c[g>>2]|0)+104>>2]|0?eL(f,0)|0:0)kM(d,c[(c[g>>2]|0)+104>>2]|0);f=Gx(d,f)|0}}while(0);j=Ty(d,j)|0}}while(0);switch(X&15){case 4:case 8:break;default:{D_(m);D_(c[n+84>>2]|0);D_(k);D_(c[Y+16>>2]|0);rJ()}}c[46367]=1;c[46368]=1}while(0);l=Z;return}function mg(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=Sy(a)|0;while(1){if(!b)break;d=c[b+16>>2]|0;if(c[d+204>>2]|0){f=d+96|0;e=+h[f>>3];d=d+240|0;h[f>>3]=+h[d>>3];h[d>>3]=e}b=Ty(a,b)|0}return}function ng(b){b=b|0;var d=0,e=0,f=0,g=0;d=(c[b+16>>2]|0)+192|0;a:while(1){f=c[d>>2]|0;if(!f){d=12;break}g=f+16|0;d=c[g>>2]|0;do if((a[d+156>>0]|0)==1){e=c[d+112>>2]|0;if(!e){e=c[d+104>>2]|0;if(!e)break;qg(f);d=e}else{e=c[(c[e+16>>2]|0)+96>>2]|0;if(!e){d=6;break a}f=e+56|0;d=d+16|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];a[e+81>>0]=1;d=e}kM(b,d);d=c[g>>2]|0}while(0);d=d+164|0}if((d|0)==6)qa(85421,85234,234,85440);else if((d|0)==12)return}function og(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;do if(!d){g=c[b>>2]&3;d=c[((g|0)==3?b:b+48|0)+40>>2]|0;g=c[((g|0)==2?b:b+-48|0)+40>>2]|0;if((d|0)!=(g|0)){d=(c[(c[d+16>>2]|0)+232>>2]|0)==(c[(c[g+16>>2]|0)+232>>2]|0)?2:1;break}d=c[b+16>>2]|0;if(!(a[d+44>>0]|0))d=(a[d+84>>0]|0)==0?8:4;else d=4}while(0);a:do if(!e)switch(d|0){case 1:{e=c[b>>2]&3;e=(c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)<(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)?16:32;break a}case 2:{e=c[b>>2]&3;e=(c[(c[(c[((e|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)<(c[(c[(c[((e|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)?16:32;break a}default:{e=16;break a}}while(0);c[(c[b+16>>2]|0)+164>>2]=d|f|e;return}function pg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=l;l=l+624|0;z=D+584|0;y=D+544|0;s=D+368|0;e=D+192|0;t=D+96|0;v=D;u=t+16|0;c[u>>2]=s;w=v+16|0;c[w>>2]=e;C=c[b>>2]|0;B=c[d>>2]|0;x=C+16|0;q=c[x>>2]|0;d=c[q+164>>2]|0;f=d&15;A=B+16|0;b=c[A>>2]|0;g=c[b+164>>2]&15;do if((g|0)==(f|0)){p=rg(C)|0;r=rg(B)|0;n=c[p>>2]|0;g=n&3;f=c[(c[((g|0)==3?p:p+48|0)+40>>2]|0)+16>>2]|0;g=c[(c[((g|0)==2?p:p+-48|0)+40>>2]|0)+16>>2]|0;i=(c[f+232>>2]|0)-(c[g+232>>2]|0)|0;o=c[r>>2]|0;m=o&3;k=c[(c[((m|0)==3?r:r+48|0)+40>>2]|0)+16>>2]|0;m=c[(c[((m|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0;j=(c[k+232>>2]|0)-(c[m+232>>2]|0)|0;i=(i|0)>-1?i:0-i|0;j=(j|0)>-1?j:0-j|0;if((i|0)!=(j|0)){b=i-j|0;break}g=~~(+h[f+16>>3]-+h[g+16>>3]);g=(g|0)>-1?g:0-g|0;f=~~(+h[k+16>>3]-+h[m+16>>3]);f=(f|0)>-1?f:0-f|0;if((g|0)!=(f|0)){b=g-f|0;break}g=n>>>4;f=o>>>4;if((g|0)!=(f|0)){b=g-f|0;break}if(!(a[q+44>>0]|0)){d=(a[q+84>>0]|0)==0?p:C;g=d;d=c[(c[d+16>>2]|0)+164>>2]|0}else g=C;f=g+16|0;if(d&32){F3(s|0,c[f>>2]|0,176)|0;i=t;j=g;k=i+48|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[u>>2]=s;j=c[g>>2]&3;i=c[t>>2]&3;c[((i|0)==3?t:t+48|0)+40>>2]=c[((j|0)==2?g:g+-48|0)+40>>2];c[((i|0)==2?t:t+-48|0)+40>>2]=c[((j|0)==3?g:g+48|0)+40>>2];i=s+16|0;j=(c[f>>2]|0)+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=s+56|0;j=(c[f>>2]|0)+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));a[s+112>>0]=1;c[s+116>>2]=g;g=t;b=c[A>>2]|0}if(!(a[b+44>>0]|0)){b=(a[b+84>>0]|0)==0?r:B;f=b;b=c[b+16>>2]|0}else f=B;d=f+16|0;if(!(c[b+164>>2]&32))e=b;else{F3(e|0,c[d>>2]|0,176)|0;i=v;j=f;k=i+48|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[w>>2]=e;j=c[f>>2]&3;i=c[v>>2]&3;c[((i|0)==3?v:v+48|0)+40>>2]=c[((j|0)==2?f:f+-48|0)+40>>2];c[((i|0)==2?v:v+-48|0)+40>>2]=c[((j|0)==3?f:f+48|0)+40>>2];i=e+16|0;j=(c[d>>2]|0)+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=e+56|0;j=(c[d>>2]|0)+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));a[e+112>>0]=1;c[e+116>>2]=f}d=c[g+16>>2]|0;b=e+16|0;i=y;j=d+16|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=z;j=b;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));b=jg(y,z)|0;if(!b){b=e+56|0;i=y;j=d+56|0;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));i=z;j=b;k=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));b=jg(y,z)|0;if(!b){d=c[(c[x>>2]|0)+164>>2]&192;b=c[(c[A>>2]|0)+164>>2]&192;if((d|0)==(b|0)){b=((c[C>>2]|0)>>>4)-((c[B>>2]|0)>>>4)|0;break}else{b=d-b|0;break}}}}else b=g-f|0;while(0);l=D;return b|0}function qg(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0;f=b+16|0;d=c[f>>2]|0;if(c[d+176>>2]|0){d=c[d+180>>2]|0;while(1){d=(c[d>>2]|0)+16|0;e=c[d>>2]|0;if(!(a[e+112>>0]|0))break;else d=e+116|0}e=c[e+96>>2]|0;g=+h[e+24>>3];i=+h[e+32>>3];e=(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1|0)!=0;b=c[f>>2]|0;f=c[(c[d>>2]|0)+96>>2]|0;h[f+56>>3]=(e?i:g)*.5+ +h[b+16>>3];h[f+64>>3]=+h[b+24>>3];a[f+81>>0]=1}return}function rg(a){a=a|0;var b=0,d=0;while(1){b=c[a+16>>2]|0;d=c[b+172>>2]|0;if(!d)break;else a=d}while(1){b=c[b+116>>2]|0;if(!b)break;a=b;b=c[b+16>>2]|0}return a|0}function sg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0;B=l;l=l+1712|0;x=B+1664|0;s=B+1488|0;t=B+1392|0;A=B+1696|0;y=B+696|0;z=B;p=t+16|0;c[p>>2]=s;q=c[f+(g<<2)>>2]|0;r=q+16|0;k=c[r>>2]|0;u=a[k+113>>0]|0;if(c[k+164>>2]&32){F3(s|0,k|0,176)|0;k=t;n=q;o=k+48|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));c[p>>2]=s;k=c[t>>2]&3;c[((k|0)==3?t:t+48|0)+40>>2]=c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2];c[((k|0)==2?t:t+-48|0)+40>>2]=c[((c[q>>2]&3|0)==3?q:q+48|0)+40>>2];k=s+16|0;n=(c[r>>2]|0)+56|0;o=k+40|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));k=s+56|0;n=(c[r>>2]|0)+16|0;o=k+40|0;do{c[k>>2]=c[n>>2];k=k+4|0;n=n+4|0}while((k|0)<(o|0));a[s+112>>0]=1;c[s+116>>2]=q;q=t}k=1;while(1){if((k|0)>=(i|0)){w=6;break}if(!(a[(c[(c[f+(k+g<<2)>>2]|0)+16>>2]|0)+113>>0]|0))k=k+1|0;else{w=7;break}}a:do if((w|0)==6)if(!(u<<24>>24)){k=c[q+16>>2]|0;if(c[k+96>>2]|0){Sg(b,d,e,q,j);break}if((j|0)==2){A=c[q>>2]&3;Tg(c[((A|0)==3?q:q+48|0)+40>>2]|0,c[((A|0)==2?q:q+-48|0)+40>>2]|0,f,g,i,2);break}t=a[k+49>>0]|0;u=a[k+89>>0]|0;if(!(t<<24>>24==1&u<<24>>24!=4)?!(t<<24>>24!=4&u<<24>>24==1):0){p=c[q>>2]&3;o=c[((p|0)==3?q:q+48|0)+40>>2]|0;p=c[((p|0)==2?q:q+-48|0)+40>>2]|0;k=c[o+16>>2]|0;n=c[k+232>>2]|0;if((n|0)>0){u=c[(c[b+16>>2]|0)+196>>2]|0;t=n+~(a[(c[(c[b+60>>2]|0)+16>>2]|0)+113>>0]&1)|0;m=+h[(c[(c[c[u+(t<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[u+(t<<6)+16>>3]-+h[k+24>>3]-+h[u+(n<<6)+24>>3]}else m=+(c[(c[b+16>>2]|0)+252>>2]|0);C=+(i+1|0);v=+(c[d+12>>2]|0)/C;m=m/C;Vg(b,d,e,o,q,y,1);Vg(b,d,e,p,q,z,0);s=y+52|0;t=z+52|0;p=(j|0)==10;q=e+80|0;k=0;while(1){if((k|0)>=(i|0))break a;r=c[f+(k+g<<2)>>2]|0;o=c[s>>2]|0;n=o+-1|0;G=+h[y+56+(n<<5)>>3];F=+h[y+56+(n<<5)+16>>3];E=+h[y+56+(n<<5)+24>>3];h[18830]=G;h[18831]=E;k=k+1|0;C=+(k|0);D=v*C;h[18832]=F+D;C=E+m*C;h[18833]=C;h[18834]=G;h[18835]=C;n=(c[t>>2]|0)+-1|0;G=+h[z+56+(n<<5)+16>>3];h[18836]=G;h[18837]=C+m;E=+h[z+56+(n<<5)>>3];F=+h[z+56+(n<<5)+24>>3];h[18840]=G;h[18839]=F;h[18838]=E-D;h[18841]=C;n=0;while(1){if((n|0)>=(o|0)){n=0;break}o=y+56+(n<<5)|0;c[x>>2]=c[o>>2];c[x+4>>2]=c[o+4>>2];c[x+8>>2]=c[o+8>>2];c[x+12>>2]=c[o+12>>2];c[x+16>>2]=c[o+16>>2];c[x+20>>2]=c[o+20>>2];c[x+24>>2]=c[o+24>>2];c[x+28>>2]=c[o+28>>2];SK(e,x);n=n+1|0;o=c[s>>2]|0}while(1){if((n|0)==3)break;j=150640+(n<<5)|0;c[x>>2]=c[j>>2];c[x+4>>2]=c[j+4>>2];c[x+8>>2]=c[j+8>>2];c[x+12>>2]=c[j+12>>2];c[x+16>>2]=c[j+16>>2];c[x+20>>2]=c[j+20>>2];c[x+24>>2]=c[j+24>>2];c[x+28>>2]=c[j+28>>2];SK(e,x);n=n+1|0}o=c[t>>2]|0;while(1){n=o+-1|0;if((o|0)<=0)break;o=z+56+(n<<5)|0;c[x>>2]=c[o>>2];c[x+4>>2]=c[o+4>>2];c[x+8>>2]=c[o+8>>2];c[x+12>>2]=c[o+12>>2];c[x+16>>2]=c[o+16>>2];c[x+20>>2]=c[o+20>>2];c[x+24>>2]=c[o+24>>2];c[x+28>>2]=c[o+28>>2];SK(e,x);o=n}if(p)n=sJ(e,A)|0;else n=yJ(e,A)|0;o=c[A>>2]|0;if(!o)break a;QK(r,c[((c[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0,n,o,17296);c[q>>2]=0}}Ug(b,d,e,f,g,i,q,(j|0)==10&1)}else w=7;while(0);if((w|0)==7)Rg(b,f,g,i,q,j);l=B;return}function tg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ba=l;l=l+2576|0;S=ba+2528|0;_=ba+2568|0;k=ba+2352|0;n=ba+2176|0;t=ba+1904|0;Y=ba+1808|0;$=ba+1712|0;T=ba+1016|0;U=ba+320|0;V=ba+256|0;X=ba+2564|0;Z=ba+2560|0;z=ba+288|0;A=ba+224|0;L=ba+192|0;M=ba+160|0;N=ba+128|0;P=ba+96|0;Q=ba+64|0;R=ba+32|0;W=ba;s=t+16|0;c[s>>2]=k;o=Y+16|0;c[o>>2]=n;aa=$+16|0;c[aa>>2]=ba+2e3;if(!(c[45964]|0)){c[45964]=vH(32e3)|0;c[45965]=vH(32e3)|0;c[45966]=2e3;c[45967]=2e3}u=c[f+(g<<2)>>2]|0;K=c[u>>2]&3;p=u+48|0;q=u+-48|0;K=(c[(c[(c[((K|0)==3?u:p)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((K|0)==2?u:q)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0;r=u+16|0;if((((K|0)>-1?K:0-K|0)|0)<=1){k=c[r>>2]|0;if(!(c[k+164>>2]&32)){K=u;n=0}else{n=c[s>>2]|0;F3(n|0,k|0,176)|0;w=t;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[s>>2]=n;w=c[t>>2]&3;c[((w|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];c[((w|0)==2?t:t+-48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=n+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[s>>2]|0;w=k+56|0;x=(c[r>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;n=0;J=12}}else{F3(k|0,c[r>>2]|0,176)|0;w=t;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));w=t+48|0;x=p;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[s>>2]=k;k=c[r>>2]|0;if(!(c[k+164>>2]&32)){F3(n|0,k|0,176)|0;w=Y;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[o>>2]=n;o=c[t>>2]|0;c[((o&3|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=Y+48|0;x=p;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0))}else{n=c[o>>2]|0;F3(n|0,k|0,176)|0;w=Y;x=u;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[o>>2]=n;w=c[Y>>2]&3;c[((w|0)==3?Y:Y+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];c[((w|0)==2?Y:Y+-48|0)+40>>2]=c[((c[u>>2]&3|0)==3?u:p)+40>>2];w=n+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[o>>2]|0;w=k+56|0;x=(c[r>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;c[k+116>>2]=u;o=c[t>>2]|0;c[((o&3|0)==3?t:t+48|0)+40>>2]=c[((c[u>>2]&3|0)==2?u:q)+40>>2];w=(c[s>>2]|0)+16|0;x=(c[r>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0))}k=rg(u)|0;while(1){n=c[(c[k+16>>2]|0)+172>>2]|0;if(!n)break;else k=n}c[((o&3|0)==2?t:t+-48|0)+40>>2]=c[((c[k>>2]&3|0)==2?k:k+-48|0)+40>>2];k=c[s>>2]|0;a[k+84>>0]=0;a[k+112>>0]=1;n=k+56|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;n=1;J=12}if((J|0)==12){c[k+116>>2]=u;K=t}H=(j|0)==2;if(H?(v=xg(b,K,c[45964]|0,_)|0,c[Z>>2]=v,(v|0)!=0):0)J=63;else J=15;a:do if((J|0)==15){G=(j|0)==10;c[Z>>2]=0;o=c[K>>2]&3;k=c[((o|0)==3?K:K+48|0)+40>>2]|0;o=c[((o|0)==2?K:K+-48|0)+40>>2]|0;c[_>>2]=o;yg(z,b,d,k,0,K);c[T>>2]=c[z>>2];c[T+4>>2]=c[z+4>>2];c[T+8>>2]=c[z+8>>2];c[T+12>>2]=c[z+12>>2];c[T+16>>2]=c[z+16>>2];c[T+20>>2]=c[z+20>>2];c[T+24>>2]=c[z+24>>2];c[T+28>>2]=c[z+28>>2];c[V>>2]=c[z>>2];c[V+4>>2]=c[z+4>>2];c[V+8>>2]=c[z+8>>2];c[V+12>>2]=c[z+12>>2];c[V+16>>2]=c[z+16>>2];c[V+20>>2]=c[z+20>>2];TK(e,K,1,T,zg(k)|0);B=T+52|0;I=(c[B>>2]|0)+-1|0;D=V+24|0;h[D>>3]=+h[T+56+(I<<5)+24>>3];E=V+8|0;h[E>>3]=+h[T+56+(I<<5)+8>>3];I=c[k+16>>2]|0;F=b+16|0;m=+h[I+24>>3]-+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[I+232>>2]<<6)+16>>3];c[S>>2]=c[V>>2];c[S+4>>2]=c[V+4>>2];c[S+8>>2]=c[V+8>>2];c[S+12>>2]=c[V+12>>2];c[S+16>>2]=c[V+16>>2];c[S+20>>2]=c[V+20>>2];c[S+24>>2]=c[V+24>>2];c[S+28>>2]=c[V+28>>2];Ag(A,S,1,m);c[V>>2]=c[A>>2];c[V+4>>2]=c[A+4>>2];c[V+8>>2]=c[A+8>>2];c[V+12>>2]=c[A+12>>2];c[V+16>>2]=c[A+16>>2];c[V+20>>2]=c[A+20>>2];c[V+24>>2]=c[A+24>>2];c[V+28>>2]=c[A+28>>2];A=V+16|0;if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){I=c[B>>2]|0;c[B>>2]=I+1;I=T+56+(I<<5)|0;c[I>>2]=c[V>>2];c[I+4>>2]=c[V+4>>2];c[I+8>>2]=c[V+8>>2];c[I+12>>2]=c[V+12>>2];c[I+16>>2]=c[V+16>>2];c[I+20>>2]=c[V+20>>2];c[I+24>>2]=c[V+24>>2];c[I+28>>2]=c[V+28>>2]}w=b+60|0;C=U+52|0;x=e+56|0;y=e+69|0;j=e+16|0;z=e+29|0;I=K;q=0;r=-1;b:while(1){s=k;t=0;k=0;u=I;while(1){p=o;v=o;if((a[(c[p+16>>2]|0)+156>>0]|0)!=1)break b;if((kb[c[17300>>2]&63](p)|0)<<24>>24)break b;o=t|1;ca=150640+(t<<5)|0;Bg(L,d,b,c[(c[s+16>>2]|0)+232>>2]|0);c[ca>>2]=c[L>>2];c[ca+4>>2]=c[L+4>>2];c[ca+8>>2]=c[L+8>>2];c[ca+12>>2]=c[L+12>>2];c[ca+16>>2]=c[L+16>>2];c[ca+20>>2]=c[L+20>>2];c[ca+24>>2]=c[L+24>>2];c[ca+28>>2]=c[L+28>>2];if(!k){q=Cg(p)|0;k=(q|0)<((a[(c[(c[w>>2]|0)+16>>2]|0)+113>>0]<<1&2)+3&255|0);q=k?q:q+-2|0;r=k?r:1;k=(k^1)&1}if(!((k|0)==0|(r|0)>0))break;ca=150640+(o<<5)|0;yg(M,b,d,p,u,c[c[(c[p+16>>2]|0)+180>>2]>>2]|0);c[ca>>2]=c[M>>2];c[ca+4>>2]=c[M+4>>2];c[ca+8>>2]=c[M+8>>2];c[ca+12>>2]=c[M+12>>2];c[ca+16>>2]=c[M+16>>2];c[ca+20>>2]=c[M+20>>2];c[ca+24>>2]=c[M+24>>2];c[ca+28>>2]=c[M+28>>2];ca=c[c[(c[v+16>>2]|0)+180>>2]>>2]|0;o=c[ca>>2]&3;s=c[((o|0)==3?ca:ca+48|0)+40>>2]|0;o=c[((o|0)==2?ca:ca+-48|0)+40>>2]|0;c[_>>2]=o;t=t+2|0;r=r+-1|0;u=ca}yg(N,b,d,p,u,c[c[(c[p+16>>2]|0)+180>>2]>>2]|0);c[U>>2]=c[N>>2];c[U+4>>2]=c[N+4>>2];c[U+8>>2]=c[N+8>>2];c[U+12>>2]=c[N+12>>2];c[U+16>>2]=c[N+16>>2];c[U+20>>2]=c[N+20>>2];c[U+24>>2]=c[N+24>>2];c[U+28>>2]=c[N+28>>2];WK(e,u,1,U,zg(c[((c[u>>2]&3|0)==2?u:u+-48|0)+40>>2]|0)|0);ca=U+56+((c[C>>2]|0)+-1<<5)|0;t=c[v+16>>2]|0;m=+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[t+232>>2]<<6)+24>>3]+ +h[t+24>>3];c[S>>2]=c[ca>>2];c[S+4>>2]=c[ca+4>>2];c[S+8>>2]=c[ca+8>>2];c[S+12>>2]=c[ca+12>>2];c[S+16>>2]=c[ca+16>>2];c[S+20>>2]=c[ca+20>>2];c[S+24>>2]=c[ca+24>>2];c[S+28>>2]=c[ca+28>>2];Ag(V,S,4,m);if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[C>>2]|0;c[C>>2]=ca+1;ca=U+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}h[x>>3]=1.5707963267948966;a[y>>0]=1;Dg(e,I,u,T,U,o);if(!G){k=yJ(e,X)|0;o=c[X>>2]|0;if(H&(o|0)>4){ca=k+16|0;c[ca>>2]=c[k>>2];c[ca+4>>2]=c[k+4>>2];c[ca+8>>2]=c[k+8>>2];c[ca+12>>2]=c[k+12>>2];ca=k+32|0;o=k+(o+-1<<4)|0;c[ca>>2]=c[o>>2];c[ca+4>>2]=c[o+4>>2];c[ca+8>>2]=c[o+8>>2];c[ca+12>>2]=c[o+12>>2];G3(k+48|0,o|0,16)|0;c[X>>2]=4;o=4}else J=33}else{k=sJ(e,X)|0;o=c[X>>2]|0;J=33}if((J|0)==33){J=0;if(!o)break a}u=c[Z>>2]|0;p=u+o|0;if((p|0)>(c[45966]|0)){c[45966]=p<<1;t=xH(c[45964]|0,p<<5)|0;c[45964]=t;o=c[X>>2]|0}else t=c[45964]|0;s=0;p=u;while(1){if((s|0)>=(o|0))break;ca=t+(p<<4)|0;u=k+(s<<4)|0;c[ca>>2]=c[u>>2];c[ca+4>>2]=c[u+4>>2];c[ca+8>>2]=c[u+8>>2];c[ca+12>>2]=c[u+12>>2];s=s+1|0;p=p+1|0}c[Z>>2]=p;o=Eg(c[c[(c[v+16>>2]|0)+180>>2]>>2]|0,q,t,Z)|0;Fg(I,e);p=c[o>>2]&3;k=c[((p|0)==3?o:o+48|0)+40>>2]|0;p=c[((p|0)==2?o:o+-48|0)+40>>2]|0;c[_>>2]=p;I=k+16|0;yg(P,b,d,k,c[c[(c[I>>2]|0)+172>>2]>>2]|0,o);c[T>>2]=c[P>>2];c[T+4>>2]=c[P+4>>2];c[T+8>>2]=c[P+8>>2];c[T+12>>2]=c[P+12>>2];c[T+16>>2]=c[P+16>>2];c[T+20>>2]=c[P+20>>2];c[T+24>>2]=c[P+24>>2];c[T+28>>2]=c[P+28>>2];TK(e,o,1,T,zg(k)|0);ca=T+56+((c[B>>2]|0)+-1<<5)|0;I=c[I>>2]|0;m=+h[I+24>>3]-+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[I+232>>2]<<6)+16>>3];c[S>>2]=c[ca>>2];c[S+4>>2]=c[ca+4>>2];c[S+8>>2]=c[ca+8>>2];c[S+12>>2]=c[ca+12>>2];c[S+16>>2]=c[ca+16>>2];c[S+20>>2]=c[ca+20>>2];c[S+24>>2]=c[ca+24>>2];c[S+28>>2]=c[ca+28>>2];Ag(V,S,1,m);if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[B>>2]|0;c[B>>2]=ca+1;ca=T+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}h[j>>3]=-1.5707963267948966;a[z>>0]=1;I=o;o=p}k=t|1;r=150640+(t<<5)|0;Bg(Q,d,b,c[(c[s+16>>2]|0)+232>>2]|0);c[r>>2]=c[Q>>2];c[r+4>>2]=c[Q+4>>2];c[r+8>>2]=c[Q+8>>2];c[r+12>>2]=c[Q+12>>2];c[r+16>>2]=c[Q+16>>2];c[r+20>>2]=c[Q+20>>2];c[r+24>>2]=c[Q+24>>2];c[r+28>>2]=c[Q+28>>2];yg(R,b,d,p,u,0);c[U>>2]=c[R>>2];c[U+4>>2]=c[R+4>>2];c[U+8>>2]=c[R+8>>2];c[U+12>>2]=c[R+12>>2];c[U+16>>2]=c[R+16>>2];c[U+20>>2]=c[R+20>>2];c[U+24>>2]=c[R+24>>2];c[U+28>>2]=c[R+28>>2];c[V>>2]=c[R>>2];c[V+4>>2]=c[R+4>>2];c[V+8>>2]=c[R+8>>2];c[V+12>>2]=c[R+12>>2];c[V+16>>2]=c[R+16>>2];c[V+20>>2]=c[R+20>>2];c[V+24>>2]=c[R+24>>2];c[V+28>>2]=c[R+28>>2];r=(n|0)!=0;s=u+-48|0;WK(e,r?Y:u,1,U,zg(c[((c[u>>2]&3|0)==2?u:s)+40>>2]|0)|0);ca=(c[C>>2]|0)+-1|0;h[D>>3]=+h[U+56+(ca<<5)+24>>3];h[E>>3]=+h[U+56+(ca<<5)+8>>3];ca=c[v+16>>2]|0;m=+h[(c[(c[F>>2]|0)+196>>2]|0)+(c[ca+232>>2]<<6)+24>>3]+ +h[ca+24>>3];c[S>>2]=c[V>>2];c[S+4>>2]=c[V+4>>2];c[S+8>>2]=c[V+8>>2];c[S+12>>2]=c[V+12>>2];c[S+16>>2]=c[V+16>>2];c[S+20>>2]=c[V+20>>2];c[S+24>>2]=c[V+24>>2];c[S+28>>2]=c[V+28>>2];Ag(W,S,4,m);c[V>>2]=c[W>>2];c[V+4>>2]=c[W+4>>2];c[V+8>>2]=c[W+8>>2];c[V+12>>2]=c[W+12>>2];c[V+16>>2]=c[W+16>>2];c[V+20>>2]=c[W+20>>2];c[V+24>>2]=c[W+24>>2];c[V+28>>2]=c[W+28>>2];if(+h[V>>3]<+h[A>>3]?+h[E>>3]<+h[D>>3]:0){ca=c[C>>2]|0;c[C>>2]=ca+1;ca=U+56+(ca<<5)|0;c[ca>>2]=c[V>>2];c[ca+4>>2]=c[V+4>>2];c[ca+8>>2]=c[V+8>>2];c[ca+12>>2]=c[V+12>>2];c[ca+16>>2]=c[V+16>>2];c[ca+20>>2]=c[V+20>>2];c[ca+24>>2]=c[V+24>>2];c[ca+28>>2]=c[V+28>>2]}Dg(e,I,u,T,U,k);if(G)q=sJ(e,X)|0;else q=yJ(e,X)|0;k=c[X>>2]|0;if(!(H&(k|0)>4)){if(!k)break}else{ca=q+16|0;c[ca>>2]=c[q>>2];c[ca+4>>2]=c[q+4>>2];c[ca+8>>2]=c[q+8>>2];c[ca+12>>2]=c[q+12>>2];ca=q+32|0;k=q+(k+-1<<4)|0;c[ca>>2]=c[k>>2];c[ca+4>>2]=c[k+4>>2];c[ca+8>>2]=c[k+8>>2];c[ca+12>>2]=c[k+12>>2];G3(q+48|0,k|0,16)|0;c[X>>2]=4;k=4}o=c[Z>>2]|0;n=o+k|0;if((n|0)>(c[45966]|0)){c[45966]=n<<1;p=xH(c[45964]|0,n<<5)|0;c[45964]=p;k=c[X>>2]|0}else p=c[45964]|0;n=0;while(1){if((n|0)>=(k|0))break;ca=p+(o<<4)|0;X=q+(n<<4)|0;c[ca>>2]=c[X>>2];c[ca+4>>2]=c[X+4>>2];c[ca+8>>2]=c[X+8>>2];c[ca+12>>2]=c[X+12>>2];n=n+1|0;o=o+1|0}c[Z>>2]=o;Fg(I,e);if(r)k=(c[Y>>2]&3|0)==2?Y:Y+-48|0;else k=(c[u>>2]&3|0)==2?u:s;c[_>>2]=c[k+40>>2];v=o;J=63}while(0);c:do if((J|0)==63){if((i|0)==1){QK(K,c[_>>2]|0,c[45964]|0,v,17296);break}t=d+12|0;u=v+-1|0;m=+((O(c[t>>2]|0,i+-1|0)|0)/2|0|0);n=c[45964]|0;k=1;while(1){if((k|0)>=(u|0))break;ca=n+(k<<4)|0;h[ca>>3]=+h[ca>>3]-m;k=k+1|0}k=c[45966]|0;if((k|0)>(c[45967]|0)){c[45967]=k;o=xH(c[45965]|0,k<<4)|0;c[45965]=o;n=c[45964]|0}else o=c[45965]|0;k=0;while(1){if((k|0)>=(v|0))break;ca=o+(k<<4)|0;d=n+(k<<4)|0;c[ca>>2]=c[d>>2];c[ca+4>>2]=c[d+4>>2];c[ca+8>>2]=c[d+8>>2];c[ca+12>>2]=c[d+12>>2];k=k+1|0}QK(K,c[_>>2]|0,o,v,17296);r=$+48|0;s=$+-48|0;q=1;while(1){if((q|0)>=(i|0))break c;o=c[f+(q+g<<2)>>2]|0;p=o+16|0;k=c[p>>2]|0;if(c[k+164>>2]&32){n=c[aa>>2]|0;F3(n|0,k|0,176)|0;w=$;x=o;y=w+48|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));c[aa>>2]=n;w=c[$>>2]&3;c[((w|0)==3?$:r)+40>>2]=c[((c[o>>2]&3|0)==2?o:o+-48|0)+40>>2];c[((w|0)==2?$:s)+40>>2]=c[((c[o>>2]&3|0)==3?o:o+48|0)+40>>2];w=n+16|0;x=(c[p>>2]|0)+56|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));k=c[aa>>2]|0;w=k+56|0;x=(c[p>>2]|0)+16|0;y=w+40|0;do{c[w>>2]=c[x>>2];w=w+4|0;x=x+4|0}while((w|0)<(y|0));a[k+112>>0]=1;c[k+116>>2]=o;o=$}p=c[45964]|0;k=1;while(1){if((k|0)>=(u|0))break;ca=p+(k<<4)|0;h[ca>>3]=+h[ca>>3]+ +(c[t>>2]|0);k=k+1|0}n=c[45965]|0;k=0;while(1){if((k|0)>=(v|0))break;ca=n+(k<<4)|0;_=p+(k<<4)|0;c[ca>>2]=c[_>>2];c[ca+4>>2]=c[_+4>>2];c[ca+8>>2]=c[_+8>>2];c[ca+12>>2]=c[_+12>>2];k=k+1|0}QK(o,c[((c[o>>2]&3|0)==2?o:o+-48|0)+40>>2]|0,n,v,17296);q=q+1|0}}while(0);l=ba;return}function ug(a){a=a|0;var b=0,d=0,e=0;b=Sy(a)|0;while(1){if(!b)break;d=Ex(a,b)|0;while(1){if(!d)break;if((kb[c[4324]&63](d)|0)<<24>>24?(e=c[(c[d+16>>2]|0)+8>>2]|0,e|0):0)vg(e);d=Gx(a,d)|0}b=Ty(a,b)|0}return}function vg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=c[a+4>>2]|0;g=vH(f*48|0)|0;b=g;d=0;e=(c[a>>2]|0)+((f+-1|0)*48|0)|0;while(1){if((d|0)>=(f|0)){b=0;break}wg(e,b);b=b+48|0;d=d+1|0;e=e+-48|0}while(1){d=c[a>>2]|0;if((b|0)>=(f|0))break;D_(c[d+(b*48|0)>>2]|0);b=b+1|0}D_(d);c[a>>2]=g;return}function wg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[a+4>>2]|0;h=vH(g<<4)|0;d=h;e=0;f=(c[a>>2]|0)+(g+-1<<4)|0;while(1){if((e|0)>=(g|0))break;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];d=d+16|0;e=e+1|0;f=f+-16|0}c[b>>2]=h;c[b+4>>2]=g;c[b+8>>2]=c[a+12>>2];c[b+12>>2]=c[a+8>>2];h=b+16|0;g=a+32|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];h=b+32|0;g=a+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];return}function xg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=l;l=l+96|0;q=x+80|0;s=x+64|0;r=x+48|0;u=x+32|0;v=x+16|0;w=x;m=d;while(1){t=m+16|0;g=c[t>>2]|0;if(!(a[g+112>>0]|0))break;m=c[g+116>>2]|0}g=c[m>>2]&3;o=c[((g|0)==2?m:m+-48|0)+40>>2]|0;g=c[((g|0)==3?m:m+48|0)+40>>2]|0;m=o+16|0;n=g+16|0;y=(c[(c[m>>2]|0)+232>>2]|0)-(c[(c[n>>2]|0)+232>>2]|0)|0;switch(((y|0)>-1?y:0-y|0)|0){case 1:{g=0;break}case 2:{if(!(a[(c[(c[b+60>>2]|0)+16>>2]|0)+113>>0]&1))p=6;else g=0;break}default:p=6}do if((p|0)==6){if((c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)==(g|0)){c[f>>2]=o;y=(c[n>>2]|0)+16|0;p=(c[t>>2]|0)+16|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Pg(u,s,q);p=(c[m>>2]|0)+16|0;y=(c[t>>2]|0)+56|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];Pg(v,s,q)}else{c[f>>2]=g;y=(c[m>>2]|0)+16|0;p=(c[t>>2]|0)+56|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Pg(u,s,q);p=(c[n>>2]|0)+16|0;y=(c[t>>2]|0)+16|0;c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];c[s+8>>2]=c[p+8>>2];c[s+12>>2]=c[p+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];Pg(v,s,q)}g=c[(c[t>>2]|0)+96>>2]|0;if(!g){g=e+16|0;c[e>>2]=c[u>>2];c[e+4>>2]=c[u+4>>2];c[e+8>>2]=c[u+8>>2];c[e+12>>2]=c[u+12>>2];c[g>>2]=c[u>>2];c[g+4>>2]=c[u+4>>2];c[g+8>>2]=c[u+8>>2];c[g+12>>2]=c[u+12>>2];g=e+48|0;y=e+32|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];c[g>>2]=c[v>>2];c[g+4>>2]=c[v+4>>2];c[g+8>>2]=c[v+8>>2];c[g+12>>2]=c[v+12>>2];g=4;break}j=+h[g+24>>3];i=+h[g+32>>3];p=(c[(c[(ez(o)|0)+16>>2]|0)+116>>2]&1|0)==0;k=p?i:j;y=(c[(c[t>>2]|0)+96>>2]|0)+56|0;c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];c[r>>2]=c[v>>2];c[r+4>>2]=c[v+4>>2];c[r+8>>2]=c[v+8>>2];c[r+12>>2]=c[v+12>>2];c[s>>2]=c[u>>2];c[s+4>>2]=c[u+4>>2];c[s+8>>2]=c[u+8>>2];c[s+12>>2]=c[u+12>>2];c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];y=(Qg(r,s,q)|0)==0;i=(p?j:i)*.5;j=+h[w>>3];if(y){h[w>>3]=j-i;y=w+8|0;h[y>>3]=+h[y>>3]+k*.5}else{h[w>>3]=j+i;y=w+8|0;h[y>>3]=+h[y>>3]-k*.5}g=e+16|0;c[e>>2]=c[u>>2];c[e+4>>2]=c[u+4>>2];c[e+8>>2]=c[u+8>>2];c[e+12>>2]=c[u+12>>2];c[g>>2]=c[u>>2];c[g+4>>2]=c[u+4>>2];c[g+8>>2]=c[u+8>>2];c[g+12>>2]=c[u+12>>2];g=e+32|0;y=e+48|0;u=e+64|0;c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];c[u+8>>2]=c[w+8>>2];c[u+12>>2]=c[w+12>>2];c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];c[g>>2]=c[w>>2];c[g+4>>2]=c[w+4>>2];c[g+8>>2]=c[w+8>>2];c[g+12>>2]=c[w+12>>2];g=e+80|0;y=e+96|0;c[y>>2]=c[v>>2];c[y+4>>2]=c[v+4>>2];c[y+8>>2]=c[v+8>>2];c[y+12>>2]=c[v+12>>2];c[g>>2]=c[v>>2];c[g+4>>2]=c[v+4>>2];c[g+8>>2]=c[v+8>>2];c[g+12>>2]=c[v+12>>2];g=7}while(0);l=x;return g|0}function yg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0;q=c[f+16>>2]|0;p=+h[q+16>>3];j=p-+h[q+88>>3];m=j+-4.0;l=Lg(d,f,g,i,-1)|0;if(!l){n=~~(j+(m>=0.0?-3.5:-4.5));k=c[e>>2]|0;k=(k|0)>(n|0)?n:k}else{k=Mg(d,f,l)|0;do if(!k){n=c[l+16>>2]|0;j=+h[n+240>>3]+ +h[n+16>>3];if(!(a[n+156>>0]|0)){j=+(c[(c[d+16>>2]|0)+248>>2]|0)*.5+j;break}else{j=j+ +(c[e+8>>2]|0);break}}else j=+h[(c[k+16>>2]|0)+32>>3]+ +(c[e+8>>2]|0);while(0);o=j<m?j:m;k=~~(o+(o>=0.0?.5:-.5))}o=+(k|0);n=(a[q+156>>0]|0)==1;if(n?(c[q+104>>2]|0)!=0:0)m=p+10.0;else m=p+4.0+ +h[q+96>>3];l=Lg(d,f,g,i,1)|0;if(!l){f=~~(m+(m>=0.0?.5:-.5));k=c[e+4>>2]|0;k=(k|0)<(f|0)?f:k}else{k=Mg(d,f,l)|0;do if(!k){f=c[l+16>>2]|0;j=+h[f+16>>3]-+h[f+88>>3];if(!(a[f+156>>0]|0)){j=j-+(c[(c[d+16>>2]|0)+248>>2]|0)*.5;break}else{j=j-+(c[e+8>>2]|0);break}}else j=+h[(c[k+16>>2]|0)+16>>3]-+(c[e+8>>2]|0);while(0);m=j>m?j:m;k=~~(m+(m>=0.0?.5:-.5))}j=+(k|0);if(n?(c[q+104>>2]|0)!=0:0){j=j-+h[q+96>>3];if(j<o)j=p}p=+h[q+24>>3];d=c[(c[d+16>>2]|0)+196>>2]|0;q=c[q+232>>2]|0;m=p-+h[d+(q<<6)+16>>3];p=+h[d+(q<<6)+24>>3]+p;h[b>>3]=o;h[b+8>>3]=m;h[b+16>>3]=j;h[b+24>>3]=p;return}function zg(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)if((c[b+176>>2]|0)>1)b=1;else b=(c[b+184>>2]|0)>1&1;else b=0;return b|0}function Ag(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=l;l=l+32|0;f=g;switch(d|0){case 1:{Kg(f,+h[b>>3],e,+h[b+16>>3],+h[b+8>>3]);break}case 4:{Kg(f,+h[b>>3],+h[b+24>>3],+h[b+16>>3],e);break}default:{}}c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];c[a+20>>2]=c[f+20>>2];c[a+24>>2]=c[f+24>>2];c[a+28>>2]=c[f+28>>2];l=g;return}function Bg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0;l=c[b+16>>2]|0;k=l+(e<<5)|0;j=+h[k>>3];m=l+(e<<5)+8|0;g=+h[m>>3];n=l+(e<<5)+16|0;f=+h[n>>3];l=l+(e<<5)+24|0;i=+h[l>>3];if(j==f){d=c[(c[d+16>>2]|0)+196>>2]|0;o=e+1|0;j=+(c[b>>2]|0);g=+h[d+(o<<6)+24>>3]+ +h[(c[(c[c[d+(o<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];f=+(c[b+4>>2]|0);i=+h[(c[(c[c[d+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[d+(e<<6)+16>>3];h[k>>3]=j;h[m>>3]=g;h[n>>3]=f;h[l>>3]=i}h[a>>3]=j;h[a+8>>3]=g;h[a+16>>3]=f;h[a+24>>3]=i;return}function Cg(b){b=b|0;var d=0,e=0;b=c[b+16>>2]|0;e=b+16|0;d=0;while(1){b=c[c[b+180>>2]>>2]|0;b=c[(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0;if((a[b+156>>0]|0)!=1)break;if((c[b+184>>2]|0)!=1)break;if((c[b+176>>2]|0)!=1)break;if(+h[b+16>>3]!=+h[e>>3])break;d=d+1|0}return d|0}function Dg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+32|0;j=k;h=Hg(b,-1)|0;b=Hg(b,1)|0;if(!((h|0)!=0?!(fL(h)|0):0))i=3;do if((i|0)==3){if(b|0?(fL(b)|0)==0:0)break;h=Ig(d,-1)|0;b=Ig(d,1)|0;if(h|0?(fL(h)|0)==0:0)break;if(b|0?(fL(b)|0)==0:0)break;h=e+52|0;b=0;while(1){if((b|0)>=(c[h>>2]|0))break;d=e+56+(b<<5)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];c[j+16>>2]=c[d+16>>2];c[j+20>>2]=c[d+20>>2];c[j+24>>2]=c[d+24>>2];c[j+28>>2]=c[d+28>>2];SK(a,j);b=b+1|0}h=c[a+80>>2]|0;i=g+-3|0;b=0;while(1){if((b|0)>=(g|0))break;e=150640+(b<<5)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[j+16>>2]=c[e+16>>2];c[j+20>>2]=c[e+20>>2];c[j+24>>2]=c[e+24>>2];c[j+28>>2]=c[e+28>>2];SK(a,j);b=b+1|0}d=h+1|0;i=i+d|0;h=c[f+52>>2]|0;while(1){b=h+-1|0;if((h|0)<=0)break;h=f+56+(b<<5)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];c[j+20>>2]=c[h+20>>2];c[j+24>>2]=c[h+24>>2];c[j+28>>2]=c[h+28>>2];SK(a,j);h=b}Jg(a,d,i)}while(0);l=k;return}function Eg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[e>>2]|0;while(1){if(!b)break;a=c[c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0;b=b+-1|0}c[e>>2]=f+1;g=d+(f<<4)|0;b=d+(f+-1<<4)|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];f=c[e>>2]|0;c[e>>2]=f+1;f=d+(f<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];f=d+(c[e>>2]<<4)|0;e=(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+16|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];return a|0}function Fg(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,l=0,m=0;m=d+84|0;l=d+80|0;e=0;d=b;a:while(1){j=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;k=j+16|0;if((a[(c[k>>2]|0)+156>>0]|0)!=1)break;if((kb[c[17300>>2]&63](j)|0)<<24>>24)break;d=c[l>>2]|0;while(1){if((e|0)>=(d|0))break a;if(!(+h[(c[m>>2]|0)+(e<<5)+8>>3]>+h[(c[k>>2]|0)+24>>3]))break;e=e+1|0}d=c[m>>2]|0;b=c[k>>2]|0;do if(!(+h[d+(e<<5)+24>>3]<+h[b+24>>3])){g=+h[d+(e<<5)>>3];i=~~g;f=+h[d+(e<<5)+16>>3];if(!(c[b+104>>2]|0)){Gg(j,i,~~((f+g)*.5),~~f);break}else{Gg(j,i,~~f,~~(+h[b+96>>3]+f));break}}while(0);d=c[c[(c[k>>2]|0)+180>>2]>>2]|0}return}function Gg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+16>>2]|0;h[a+16>>3]=+(d|0);h[a+88>>3]=+(d-b|0);h[a+96>>3]=+(e-d|0);return}function Hg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c[(c[(c[((h|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+180>>2]|0;h=((h|0)==2?a:a+-48|0)+40|0;g=0;a=0;while(1){e=c[i+(g<<2)>>2]|0;if(!e)break;f=c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do if((O(f-(c[(c[(c[h>>2]|0)+16>>2]|0)+236>>2]|0)|0,b)|0)>=1){d=c[e+16>>2]|0;if(!(c[d+8>>2]|0)){d=c[d+116>>2]|0;if(!d)break;if(!(c[(c[d+16>>2]|0)+8>>2]|0))break}if(a|0?(O((c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-f|0,b)|0)<=0:0)break;a=e}while(0);g=g+1|0}return a|0}function Ig(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=c[(c[(c[((h|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+172>>2]|0;h=((h|0)==3?a:a+48|0)+40|0;g=0;a=0;while(1){e=c[i+(g<<2)>>2]|0;if(!e)break;f=c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;do if((O(f-(c[(c[(c[h>>2]|0)+16>>2]|0)+236>>2]|0)|0,b)|0)>=1){d=c[e+16>>2]|0;if(!(c[d+8>>2]|0)){d=c[d+116>>2]|0;if(!d)break;if(!(c[(c[d+16>>2]|0)+8>>2]|0))break}if(a|0?(O((c[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-f|0,b)|0)<=0:0)break;a=e}while(0);g=g+1|0}return a|0}function Jg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0;l=a+84|0;i=b+-1|0;while(1){if((i|0)>(d|0))break;f=c[l>>2]|0;j=f+(i<<5)|0;e=+h[j>>3];if(!(i-b&1)){f=f+(i<<5)+16|0;m=+h[f>>3];g=~~((m+e)*.5);if(e>=m){h[j>>3]=+(g+-8|0);h[f>>3]=+(g+8|0)}}else{f=f+(i<<5)+16|0;m=+h[f>>3];g=~~((m+e)*.5);if(e+16.0>m){h[j>>3]=+(g+-8|0);h[f>>3]=+(g+8|0)}}i=i+1|0}k=(c[a+80>>2]|0)+-1|0;g=0;while(1){if((g|0)>=(k|0))break;i=c[l>>2]|0;f=i+(g<<5)|0;j=g+1|0;a=i+(j<<5)|0;if(!((g|0)<(b|0)|(g|0)>(d|0))?(g-b&1|0)==0:0){e=+h[f>>3]+16.0;f=i+(j<<5)+16|0;if(e>+h[f>>3])h[f>>3]=e;e=+h[i+(g<<5)+16>>3]+-16.0;if(!(e<+h[a>>3])){g=j;continue}h[a>>3]=e;g=j;continue}if(!((g|0)<(d|0)&(j|0)>=(b|0))){g=j;continue}if(j-b&1|0){g=j;continue}e=+h[i+(j<<5)+16>>3];if(+h[f>>3]+16.0>e)h[f>>3]=e+-16.0;f=i+(g<<5)+16|0;e=+h[a>>3];if(!(+h[f>>3]+-16.0<e)){g=j;continue}h[f>>3]=e+16.0;g=j}return}function Kg(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function Lg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=c[(c[b+16>>2]|0)+196>>2]|0;h=c[d+16>>2]|0;j=c[h+232>>2]|0;i=k+(j<<6)|0;j=k+(j<<6)+4|0;h=c[h+236>>2]|0;a:do{h=h+g|0;if((h|0)<=-1){b=0;break}if((h|0)>=(c[i>>2]|0)){b=0;break}b=c[(c[j>>2]|0)+(h<<2)>>2]|0;k=c[b+16>>2]|0;switch(a[k+156>>0]|0){case 0:break a;case 1:{if(c[k+104>>2]|0)break a;break}default:{}}}while((Og(b,d,e,f)|0)<<24>>24!=0);return b|0}function Mg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;d=c[d+16>>2]|0;if(!(a[d+156>>0]|0)){i=c[d+212>>2]|0;h=i}else{i=c[(c[(c[c[d+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;g=c[i>>2]&3;h=c[(c[(c[((g|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;i=c[(c[(c[((g|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0}d=c[e+16>>2]|0;if(!(a[d+156>>0]|0)){e=c[d+212>>2]|0;e=(e|0)==(b|0)?0:e;return ((e|0)==(h|0)|((e|0)==0|(e|0)==(i|0))?0:e)|0}f=c[(c[(c[c[d+180>>2]>>2]|0)+16>>2]|0)+116>>2]|0;g=c[f>>2]&3;d=c[(c[(c[((g|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;d=(d|0)==(b|0)?0:d;if(!(!((d|0)==(h|0)|((d|0)==0|(d|0)==(i|0)))?(Ng(d,e)|0)!=0:0)){d=c[(c[(c[((g|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;d=(d|0)==(b|0)?0:d;if((d|0)==(h|0)|((d|0)==0|(d|0)==(i|0)))d=0;else{e=(Ng(d,e)|0)==0;return (e?0:d)|0}}return d|0}function Ng(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0;d=c[a+16>>2]|0;a=c[b+16>>2]|0;f=+h[a+16>>3];if((+h[d+16>>3]<=f?f<=+h[d+32>>3]:0)?(e=+h[a+24>>3],+h[d+24>>3]<=e):0)a=e<=+h[d+40>>3]&1;else a=0;return a|0}function Og(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=c[b+16>>2]|0;j=(c[i+236>>2]|0)>(c[(c[d+16>>2]|0)+236>>2]|0);a:do if((c[i+184>>2]|0)==1){b:do if(f|0){h=0;b=c[c[i+180>>2]>>2]|0;while(1){if((h|0)>=2)break b;b=c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0;d=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((b|0)==(d|0))break b;g=c[b+16>>2]|0;b=c[d+16>>2]|0;if(j^(c[g+236>>2]|0)>(c[b+236>>2]|0)){b=1;break a}if((c[g+184>>2]|0)!=1)break b;if(!(a[g+156>>0]|0))break b;if((c[b+184>>2]|0)!=1)break b;if(!(a[b+156>>0]|0))break b;h=h+1|0;f=c[c[b+180>>2]>>2]|0;b=c[c[g+180>>2]>>2]|0}}while(0);if(e|0?(c[i+176>>2]|0)==1:0){g=0;d=e;b=c[c[i+172>>2]>>2]|0;while(1){if((g|0)>=2){b=0;break a}b=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;d=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((b|0)==(d|0)){b=0;break a}f=c[b+16>>2]|0;b=c[d+16>>2]|0;if(j^(c[f+236>>2]|0)>(c[b+236>>2]|0)){b=1;break a}if((c[f+176>>2]|0)!=1){b=0;break a}if(!(a[f+156>>0]|0)){b=0;break a}if((c[b+176>>2]|0)!=1){b=0;break a}if(!(a[b+156>>0]|0)){b=0;break a}g=g+1|0;d=c[c[b+172>>2]>>2]|0;b=c[c[f+172>>2]>>2]|0}}else b=0}else b=0;while(0);return b|0}function Pg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function Qg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+h[b+8>>3];e=+h[b>>3];return (~~((+h[c>>3]-e)*(+h[a+8>>3]-d)-(+h[a>>3]-e)*(+h[c+8>>3]-d))|0)>0|0}function Rg(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;R=l;l=l+256|0;D=R+232|0;C=R+216|0;P=R+88|0;O=R+80|0;K=R+64|0;L=R+200|0;M=R+184|0;N=R;E=R+168|0;F=R+152|0;G=R+136|0;H=R+120|0;I=R+104|0;B=c[g>>2]&3;J=c[((B|0)==3?g:g+48|0)+40>>2]|0;B=c[((B|0)==2?g:g+-48|0)+40>>2]|0;do if((HJ(J)|0)!=2?(HJ(B)|0)!=2:0){g=0;j=0;k=0;while(1){if((k|0)>=(f|0))break;A=c[(c[d+(k+e<<2)>>2]|0)+16>>2]|0;g=g+((c[A+96>>2]|0)!=0&1)|0;if(!((a[A+44>>0]|0)==0?(a[A+84>>0]|0)==0:0))j=1;k=k+1|0}if(!j)if(!g){Tg(J,B,d,e,f,i);break}else{Yg(J,B,d,e,f,i,g);break}y=uH(156)|0;z=Zg(b,y)|0;t=vA(z,85383,1)|0;Az(t,134401,280,1)|0;zx(t,87076,87090)|0;m=+h[(c[B+16>>2]|0)+16>>3];s=+h[(c[J+16>>2]|0)+16>>3];A=b+16|0;q=(c[(c[A>>2]|0)+116>>2]&1|0)==0;r=q?B:J;q=q?J:B;t=_g(t,q)|0;u=_g(z,r)|0;g=0;p=0;while(1){if((p|0)>=(f|0))break;j=d+(p+e<<2)|0;while(1){o=c[j>>2]|0;n=o+16|0;j=c[n>>2]|0;if(!(a[j+112>>0]|0))break;else j=j+116|0}if((c[((c[o>>2]&3|0)==3?o:o+48|0)+40>>2]|0)==(q|0))k=$g(z,t,u,o)|0;else k=$g(z,u,t,o)|0;j=c[n>>2]|0;c[j+120>>2]=k;if(!g)if((a[j+44>>0]|0)==0?(a[j+84>>0]|0)==0:0){c[(c[k+16>>2]|0)+120>>2]=o;g=k}else g=0;p=p+1|0}if(!g)x=Rx(z,t,u,0,1)|0;else x=g;rx(x,c[46404]|0,85387)|0;g=z+16|0;n=c[g>>2]|0;c[n+144>>2]=c[(c[A>>2]|0)+144>>2];c[n+188>>2]=z;$M(z,i);Qf(z);zj(z,0);Jh(z,0);Mi(z,0);q=q+16|0;i=c[q>>2]|0;n=c[r+16>>2]|0;r=t+16|0;o=c[r>>2]|0;p=o+16|0;v=+(~~m|0);w=+(~~((+h[(c[u+16>>2]|0)+16>>3]+ +h[p>>3])*.5)|0);m=+(~~s|0);s=+(~~((+h[i+16>>3]-+h[i+96>>3]+ +h[n+16>>3]+ +h[n+88>>3])*.5)|0);n=o+24|0;g=(c[g>>2]|0)+192|0;while(1){j=c[g>>2]|0;if(!j)break;do if((j|0)!=(t|0)){g=c[j+16>>2]|0;k=g+24|0;if((j|0)==(u|0)){h[k>>3]=m;h[g+16>>3]=w;break}else{h[k>>3]=s;break}}else{h[n>>3]=v;h[p>>3]=w;g=o}while(0);g=g+164|0}tk(z);lg(z,0);eJ(z);k=c[q>>2]|0;g=c[r>>2]|0;if(!(c[(c[A>>2]|0)+116>>2]&1)){j=g+16|0;m=+h[k+24>>3]-+h[g+24>>3]}else{j=g+24|0;m=+h[g+16>>3]+ +h[k+24>>3]}h[K>>3]=+h[k+16>>3]-+h[j>>3];h[K+8>>3]=m;i=N+16|0;t=N+32|0;u=N+48|0;r=0;while(1){if((r|0)>=(f|0))break;g=d+(r+e<<2)|0;while(1){j=c[g>>2]|0;q=j+16|0;g=c[q>>2]|0;if(!(a[g+112>>0]|0))break;else g=g+116|0}o=c[g+120>>2]|0;p=o+16|0;g=c[p>>2]|0;if(!((o|0)==(x|0)&(c[g+120>>2]|0)==0)){n=c[c[g+8>>2]>>2]|0;o=n+4|0;j=PK(j,c[o>>2]|0)|0;c[j+8>>2]=c[n+8>>2];g=j+16|0;k=n+16|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(L,C,D,S);c[g>>2]=c[L>>2];c[g+4>>2]=c[L+4>>2];c[g+8>>2]=c[L+8>>2];c[g+12>>2]=c[L+12>>2];c[j+12>>2]=c[n+12>>2];g=j+32|0;S=n+32|0;k=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(M,C,D,k);c[g>>2]=c[M>>2];c[g+4>>2]=c[M+4>>2];c[g+8>>2]=c[M+8>>2];c[g+12>>2]=c[M+12>>2];g=0;while(1){if((g|0)>=(c[o>>2]|0))break;k=(c[j>>2]|0)+(g<<4)|0;T=(c[n>>2]|0)+(g<<4)|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[T>>2];c[C+4>>2]=c[T+4>>2];c[C+8>>2]=c[T+8>>2];c[C+12>>2]=c[T+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(E,C,D,S);c[k>>2]=c[E>>2];c[k+4>>2]=c[E+4>>2];c[k+8>>2]=c[E+8>>2];c[k+12>>2]=c[E+12>>2];c[N>>2]=c[E>>2];c[N+4>>2]=c[E+4>>2];c[N+8>>2]=c[E+8>>2];c[N+12>>2]=c[E+12>>2];k=g+1|0;if((k|0)>=(c[o>>2]|0)){Q=48;break}S=(c[j>>2]|0)+(k<<4)|0;k=(c[n>>2]|0)+(k<<4)|0;T=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(F,C,D,T);c[S>>2]=c[F>>2];c[S+4>>2]=c[F+4>>2];c[S+8>>2]=c[F+8>>2];c[S+12>>2]=c[F+12>>2];c[i>>2]=c[F>>2];c[i+4>>2]=c[F+4>>2];c[i+8>>2]=c[F+8>>2];c[i+12>>2]=c[F+12>>2];S=g+2|0;T=(c[j>>2]|0)+(S<<4)|0;S=(c[n>>2]|0)+(S<<4)|0;k=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[S>>2];c[C+4>>2]=c[S+4>>2];c[C+8>>2]=c[S+8>>2];c[C+12>>2]=c[S+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(G,C,D,k);c[T>>2]=c[G>>2];c[T+4>>2]=c[G+4>>2];c[T+8>>2]=c[G+8>>2];c[T+12>>2]=c[G+12>>2];c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];T=g+3|0;k=(c[n>>2]|0)+(T<<4)|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[k>>2];c[C+4>>2]=c[k+4>>2];c[C+8>>2]=c[k+8>>2];c[C+12>>2]=c[k+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(H,C,D,S);c[u>>2]=c[H>>2];c[u+4>>2]=c[H+4>>2];c[u+8>>2]=c[H+8>>2];c[u+12>>2]=c[H+12>>2];YE((c[A>>2]|0)+16|0,N);g=T}if((Q|0)==48)Q=0;g=c[(c[q>>2]|0)+96>>2]|0;if(g|0){T=g+56|0;p=(c[(c[p>>2]|0)+96>>2]|0)+56|0;S=c[(c[A>>2]|0)+116>>2]&1;c[C>>2]=c[p>>2];c[C+4>>2]=c[p+4>>2];c[C+8>>2]=c[p+8>>2];c[C+12>>2]=c[p+12>>2];c[D>>2]=c[K>>2];c[D+4>>2]=c[K+4>>2];c[D+8>>2]=c[K+8>>2];c[D+12>>2]=c[K+12>>2];ah(I,C,D,S);c[T>>2]=c[I>>2];c[T+4>>2]=c[I+4>>2];c[T+8>>2]=c[I+8>>2];c[T+12>>2]=c[I+12>>2];T=c[(c[q>>2]|0)+96>>2]|0;a[T+81>>0]=1;kM(b,T)}}r=r+1|0}bh(z,y)}else Q=3;while(0);if((Q|0)==3?(c[45968]|0)==0:0){c[45968]=1;Pw(0,85260,O)|0;Q=ry(J)|0;S=(ey(b)|0)!=0;T=ry(B)|0;c[P>>2]=Q;c[P+4>>2]=S?134656:138665;c[P+8>>2]=T;Pw(3,85366,P)|0}l=R;return}function Sg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;z=l;l=l+1600|0;u=z+1552|0;n=z+1536|0;t=z+840|0;v=z+144|0;w=z+1584|0;j=z+32|0;s=z+16|0;o=z;q=c[f>>2]&3;p=c[((q|0)==3?f:f+48|0)+40>>2]|0;x=f+-48|0;q=c[((q|0)==2?f:x)+40>>2]|0;r=f+16|0;k=c[r>>2]|0;i=c[k+172>>2]|0;while(1){m=c[(c[i+16>>2]|0)+172>>2]|0;if(!m)break;else i=m}k=(c[k+96>>2]|0)+56|0;i=(c[((c[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)+16|0;m=(c[i>>2]|0)+16|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];k=c[r>>2]|0;a[(c[k+96>>2]|0)+81>>0]=1;if((g|0)!=2){k=c[i>>2]|0;C=+h[k+16>>3];E=C-+h[k+88>>3];C=+h[k+96>>3]+C;B=+h[k+24>>3];D=+h[k+80>>3]*.5+B;k=c[(c[b+16>>2]|0)+196>>2]|0;m=c[p+16>>2]|0;j=c[m+232>>2]|0;B=+(~~(+(~~(B-+h[k+(j<<6)+16>>3]-+h[m+24>>3]+ +h[k+(j<<6)+24>>3])|0)*.16666666666666666)|0);B=D-(B<5.0?5.0:B);Vg(b,d,e,p,f,t,1);Vg(b,d,e,q,f,v,0);j=t+52|0;k=c[j>>2]|0;m=k+-1|0;A=+h[t+56+(m<<5)>>3];h[18830]=A;h[18831]=+h[t+56+(m<<5)+24>>3];h[18832]=E;h[18833]=B;h[18834]=A;h[18835]=B;m=v+52|0;i=(c[m>>2]|0)+-1|0;A=+h[v+56+(i<<5)+16>>3];h[18836]=A;h[18837]=D;h[18838]=C;h[18841]=B;h[18839]=+h[v+56+(i<<5)+24>>3];h[18840]=A;i=0;while(1){if((i|0)>=(k|0)){i=0;break}k=t+56+(i<<5)|0;c[u>>2]=c[k>>2];c[u+4>>2]=c[k+4>>2];c[u+8>>2]=c[k+8>>2];c[u+12>>2]=c[k+12>>2];c[u+16>>2]=c[k+16>>2];c[u+20>>2]=c[k+20>>2];c[u+24>>2]=c[k+24>>2];c[u+28>>2]=c[k+28>>2];SK(e,u);i=i+1|0;k=c[j>>2]|0}while(1){if((i|0)==3)break;t=150640+(i<<5)|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[u+20>>2]=c[t+20>>2];c[u+24>>2]=c[t+24>>2];c[u+28>>2]=c[t+28>>2];SK(e,u);i=i+1|0}j=c[m>>2]|0;while(1){i=j+-1|0;if((j|0)<=0)break;j=v+56+(i<<5)|0;c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];c[u+16>>2]=c[j+16>>2];c[u+20>>2]=c[j+20>>2];c[u+24>>2]=c[j+24>>2];c[u+28>>2]=c[j+28>>2];SK(e,u);j=i}if((g|0)==10)j=sJ(e,w)|0;else j=yJ(e,w)|0;i=c[w>>2]|0;if(i|0)y=17}else{i=(c[p+16>>2]|0)+16|0;v=k+16|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];Pg(s,n,u);v=(c[q+16>>2]|0)+16|0;i=(c[r>>2]|0)+56|0;c[n>>2]=c[v>>2];c[n+4>>2]=c[v+4>>2];c[n+8>>2]=c[v+8>>2];c[n+12>>2]=c[v+12>>2];c[u>>2]=c[i>>2];c[u+4>>2]=c[i+4>>2];c[u+8>>2]=c[i+8>>2];c[u+12>>2]=c[i+12>>2];Pg(o,n,u);i=c[(c[r>>2]|0)+96>>2]|0;D=+h[i+56>>3];E=+h[i+64>>3]-+h[i+32>>3]*.5;i=j+16|0;c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[j+12>>2]=c[s+12>>2];c[i>>2]=c[s>>2];c[i+4>>2]=c[s+4>>2];c[i+8>>2]=c[s+8>>2];c[i+12>>2]=c[s+12>>2];i=j+32|0;v=j+48|0;y=j+64|0;h[j+64>>3]=D;h[j+72>>3]=E;c[v>>2]=c[y>>2];c[v+4>>2]=c[y+4>>2];c[v+8>>2]=c[y+8>>2];c[v+12>>2]=c[y+12>>2];c[i>>2]=c[y>>2];c[i+4>>2]=c[y+4>>2];c[i+8>>2]=c[y+8>>2];c[i+12>>2]=c[y+12>>2];i=j+80|0;y=j+96|0;c[y>>2]=c[o>>2];c[y+4>>2]=c[o+4>>2];c[y+8>>2]=c[o+8>>2];c[y+12>>2]=c[o+12>>2];c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];c[w>>2]=7;i=7;y=17}if((y|0)==17)QK(f,c[((c[f>>2]&3|0)==2?f:x)+40>>2]|0,j,i,17296);l=z;return}function Tg(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=l;l=l+352|0;x=N+336|0;w=N+320|0;L=N+128|0;u=N+304|0;y=N+288|0;M=N+112|0;E=N+96|0;F=N+80|0;G=N+64|0;H=N+48|0;I=N+32|0;J=N+16|0;K=N;a=a+16|0;q=(c[a>>2]|0)+16|0;v=(c[d+(e<<2)>>2]|0)+16|0;s=(c[v>>2]|0)+16|0;c[w>>2]=c[q>>2];c[w+4>>2]=c[q+4>>2];c[w+8>>2]=c[q+8>>2];c[w+12>>2]=c[q+12>>2];c[x>>2]=c[s>>2];c[x+4>>2]=c[s+4>>2];c[x+8>>2]=c[s+8>>2];c[x+12>>2]=c[s+12>>2];Pg(u,w,x);C=+h[u>>3];D=+h[u+8>>3];u=(c[b+16>>2]|0)+16|0;v=(c[v>>2]|0)+56|0;c[w>>2]=c[u>>2];c[w+4>>2]=c[u+4>>2];c[w+8>>2]=c[u+8>>2];c[w+12>>2]=c[u+12>>2];c[x>>2]=c[v>>2];c[x+4>>2]=c[v+4>>2];c[x+8>>2]=c[v+8>>2];c[x+12>>2]=c[v+12>>2];Pg(y,w,x);A=+h[y>>3];B=+h[y+8>>3];if((f|0)>1){z=+h[(c[a>>2]|0)+80>>3];i=z*.5;z=z/+(f+-1|0)}else{i=0.0;z=0.0}p=(g|8|0)==10;m=L+8|0;q=L+16|0;r=(A+C*2.0)*.3333333333333333;s=L+32|0;t=(A*2.0+C)*.3333333333333333;n=L+24|0;u=L+48|0;v=L+64|0;w=L+80|0;x=L+96|0;y=L+112|0;k=L+128|0;o=L+136|0;i=D-i;b=0;while(1){if((b|0)>=(f|0))break;j=c[d+(b+e<<2)>>2]|0;h[L>>3]=C;h[m>>3]=D;if(p){Xg(M,r,i);c[q>>2]=c[M>>2];c[q+4>>2]=c[M+4>>2];c[q+8>>2]=c[M+8>>2];c[q+12>>2]=c[M+12>>2];Xg(E,t,i);c[s>>2]=c[E>>2];c[s+4>>2]=c[E+4>>2];c[s+8>>2]=c[E+8>>2];c[s+12>>2]=c[E+12>>2];a=4;g=3}else{h[q>>3]=C;h[n>>3]=D;Xg(F,r,i);c[s>>2]=c[F>>2];c[s+4>>2]=c[F+4>>2];c[s+8>>2]=c[F+8>>2];c[s+12>>2]=c[F+12>>2];Xg(G,r,i);c[u>>2]=c[G>>2];c[u+4>>2]=c[G+4>>2];c[u+8>>2]=c[G+8>>2];c[u+12>>2]=c[G+12>>2];Xg(H,r,i);c[v>>2]=c[H>>2];c[v+4>>2]=c[H+4>>2];c[v+8>>2]=c[H+8>>2];c[v+12>>2]=c[H+12>>2];Xg(I,t,i);c[w>>2]=c[I>>2];c[w+4>>2]=c[I+4>>2];c[w+8>>2]=c[I+8>>2];c[w+12>>2]=c[I+12>>2];Xg(J,t,i);c[x>>2]=c[J>>2];c[x+4>>2]=c[J+4>>2];c[x+8>>2]=c[J+8>>2];c[x+12>>2]=c[J+12>>2];Xg(K,t,i);c[y>>2]=c[K>>2];c[y+4>>2]=c[K+4>>2];c[y+8>>2]=c[K+8>>2];c[y+12>>2]=c[K+12>>2];h[k>>3]=A;h[o>>3]=B;a=10;g=9}h[L+(g<<4)>>3]=A;h[L+(g<<4)+8>>3]=B;QK(j,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0,L,a,17296);i=i+z;b=b+1|0}l=N;return}function Ug(a,d,e,f,g,i,j,k){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0;x=l;l=l+1440|0;t=x+1392|0;v=x+1424|0;w=x+696|0;u=x;r=c[j>>2]&3;q=c[((r|0)==3?j:j+48|0)+40>>2]|0;r=c[((r|0)==2?j:j+-48|0)+40>>2]|0;m=c[q+16>>2]|0;o=c[m+232>>2]|0;p=c[a+16>>2]|0;if((o|0)<(b[p+238>>1]|0)){y=c[p+196>>2]|0;p=o+1|0;n=+h[m+24>>3]-+h[y+(o<<6)+32>>3]-+h[(c[(c[c[y+(p<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[y+(p<<6)+40>>3]}else n=+(c[p+252>>2]|0);z=+(i+1|0);s=+(c[d+12>>2]|0)/z;n=n/z;Wg(a,d,e,q,j,w,1);Wg(a,d,e,r,j,u,0);r=w+52|0;j=u+52|0;a=(k|0)==0;d=e+80|0;m=0;while(1){if((m|0)>=(i|0))break;q=c[f+(m+g<<2)>>2]|0;p=c[r>>2]|0;o=p+-1|0;D=+h[w+56+(o<<5)>>3];B=+h[w+56+(o<<5)+8>>3];C=+h[w+56+(o<<5)+16>>3];h[18830]=D;h[18833]=B;m=m+1|0;z=+(m|0);A=s*z;h[18832]=C+A;z=B-n*z;h[18831]=z;h[18834]=D;h[18837]=z;o=(c[j>>2]|0)+-1|0;D=+h[u+56+(o<<5)+16>>3];h[18836]=D;h[18835]=z-n;B=+h[u+56+(o<<5)>>3];C=+h[u+56+(o<<5)+8>>3];h[18840]=D;h[18841]=C;h[18838]=B-A;h[18839]=z;o=0;while(1){if((o|0)>=(p|0)){o=0;break}p=w+56+(o<<5)|0;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];c[t+20>>2]=c[p+20>>2];c[t+24>>2]=c[p+24>>2];c[t+28>>2]=c[p+28>>2];SK(e,t);o=o+1|0;p=c[r>>2]|0}while(1){if((o|0)==3)break;y=150640+(o<<5)|0;c[t>>2]=c[y>>2];c[t+4>>2]=c[y+4>>2];c[t+8>>2]=c[y+8>>2];c[t+12>>2]=c[y+12>>2];c[t+16>>2]=c[y+16>>2];c[t+20>>2]=c[y+20>>2];c[t+24>>2]=c[y+24>>2];c[t+28>>2]=c[y+28>>2];SK(e,t);o=o+1|0}p=c[j>>2]|0;while(1){o=p+-1|0;if((p|0)<=0)break;p=u+56+(o<<5)|0;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];c[t+20>>2]=c[p+20>>2];c[t+24>>2]=c[p+24>>2];c[t+28>>2]=c[p+28>>2];SK(e,t);p=o}if(a)o=yJ(e,v)|0;else o=sJ(e,v)|0;p=c[v>>2]|0;if(!p)break;QK(q,c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2]|0,o,p,17296);c[d>>2]=0}l=x;return}function Vg(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+128|0;j=n+96|0;k=n+64|0;o=n+32|0;m=n;yg(o,a,b,e,0,f);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[g+20>>2]=c[o+20>>2];c[g+24>>2]=c[o+24>>2];c[g+28>>2]=c[o+28>>2];c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];c[k+16>>2]=c[o+16>>2];c[k+20>>2]=c[o+20>>2];c[k+24>>2]=c[o+24>>2];c[k+28>>2]=c[o+28>>2];c[g+48>>2]=4;if(!(i<<24>>24))WK(d,f,2,g,0);else TK(d,f,2,g,0);b=g+52|0;f=(c[b>>2]|0)+-1|0;o=k+24|0;h[o>>3]=+h[g+56+(f<<5)+24>>3];i=k+8|0;h[i>>3]=+h[g+56+(f<<5)+8>>3];e=c[e+16>>2]|0;p=+h[(c[(c[a+16>>2]|0)+196>>2]|0)+(c[e+232>>2]<<6)+24>>3]+ +h[e+24>>3];c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];Ag(m,j,4,p);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=c[m+28>>2];if(+h[k>>3]<+h[k+16>>3]?+h[i>>3]<+h[o>>3]:0){o=c[b>>2]|0;c[b>>2]=o+1;o=g+56+(o<<5)|0;c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];c[o+16>>2]=c[k+16>>2];c[o+20>>2]=c[k+20>>2];c[o+24>>2]=c[k+24>>2];c[o+28>>2]=c[k+28>>2]}l=n;return}function Wg(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+128|0;j=n+96|0;k=n+64|0;o=n+32|0;m=n;yg(o,a,b,e,0,f);c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[g+20>>2]=c[o+20>>2];c[g+24>>2]=c[o+24>>2];c[g+28>>2]=c[o+28>>2];c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];c[k+8>>2]=c[o+8>>2];c[k+12>>2]=c[o+12>>2];c[k+16>>2]=c[o+16>>2];c[k+20>>2]=c[o+20>>2];c[k+24>>2]=c[o+24>>2];c[k+28>>2]=c[o+28>>2];c[g+48>>2]=1;if(!(i<<24>>24))WK(d,f,2,g,0);else TK(d,f,2,g,0);b=g+52|0;f=(c[b>>2]|0)+-1|0;o=k+24|0;h[o>>3]=+h[g+56+(f<<5)+24>>3];i=k+8|0;h[i>>3]=+h[g+56+(f<<5)+8>>3];e=c[e+16>>2]|0;p=+h[e+24>>3]-+h[(c[(c[a+16>>2]|0)+196>>2]|0)+(c[e+232>>2]<<6)+24>>3];c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];Ag(m,j,1,p);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=c[m+28>>2];if(+h[k>>3]<+h[k+16>>3]?+h[i>>3]<+h[o>>3]:0){o=c[b>>2]|0;c[b>>2]=o+1;o=g+56+(o<<5)|0;c[o>>2]=c[k>>2];c[o+4>>2]=c[k+4>>2];c[o+8>>2]=c[k+8>>2];c[o+12>>2]=c[k+12>>2];c[o+16>>2]=c[k+16>>2];c[o+20>>2]=c[k+20>>2];c[o+24>>2]=c[k+24>>2];c[o+28>>2]=c[k+28>>2]}l=n;return}function Xg(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function Yg(b,d,e,f,g,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0.0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0;Y=l;l=l+288|0;R=Y+256|0;Q=Y+240|0;P=Y+224|0;V=Y+280|0;W=Y+272|0;X=Y+32|0;S=Y+16|0;T=Y;m=Y+208|0;n=Y+192|0;o=c[e+(f<<2)>>2]|0;U=uH(g<<2)|0;k=0;while(1){if((k|0)>=(g|0))break;c[U+(k<<2)>>2]=c[e+(k+f<<2)>>2];k=k+1|0}_0(U,g,4,59);e=b+16|0;f=(c[e>>2]|0)+16|0;o=o+16|0;C=(c[o>>2]|0)+16|0;c[Q>>2]=c[f>>2];c[Q+4>>2]=c[f+4>>2];c[Q+8>>2]=c[f+8>>2];c[Q+12>>2]=c[f+12>>2];c[R>>2]=c[C>>2];c[R+4>>2]=c[C+4>>2];c[R+8>>2]=c[C+8>>2];c[R+12>>2]=c[C+12>>2];Pg(m,Q,R);c[S>>2]=c[m>>2];c[S+4>>2]=c[m+4>>2];c[S+8>>2]=c[m+8>>2];c[S+12>>2]=c[m+12>>2];C=d+16|0;f=(c[C>>2]|0)+16|0;o=(c[o>>2]|0)+56|0;c[Q>>2]=c[f>>2];c[Q+4>>2]=c[f+4>>2];c[Q+8>>2]=c[f+8>>2];c[Q+12>>2]=c[f+12>>2];c[R>>2]=c[o>>2];c[R+4>>2]=c[o+4>>2];c[R+8>>2]=c[o+8>>2];c[R+12>>2]=c[o+12>>2];Pg(n,Q,R);c[T>>2]=c[n>>2];c[T+4>>2]=c[n+4>>2];c[T+8>>2]=c[n+8>>2];c[T+12>>2]=c[n+12>>2];w=+h[(c[e>>2]|0)+96>>3]+ +h[S>>3];x=+h[T>>3]-+h[(c[C>>2]|0)+88>>3];u=x+w;v=u*.5;C=c[U>>2]|0;c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];o=X+16|0;c[o>>2]=c[S>>2];c[o+4>>2]=c[S+4>>2];c[o+8>>2]=c[S+8>>2];c[o+12>>2]=c[S+12>>2];e=X+32|0;c[e>>2]=c[T>>2];c[e+4>>2]=c[T+4>>2];c[e+8>>2]=c[T+8>>2];c[e+12>>2]=c[T+12>>2];f=X+48|0;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];QK(C,c[((c[C>>2]&3|0)==2?C:C+-48|0)+40>>2]|0,X,4,17296);C=c[(c[C+16>>2]|0)+96>>2]|0;h[C+56>>3]=v;z=S+8|0;r=+h[z>>3];s=+h[C+32>>3];h[C+64>>3]=(s+6.0)*.5+r;a[C+81>>0]=1;r=r+3.0;B=+h[C+24>>3];A=(u-B)*.5;B=(B+u)*.5;C=X+24|0;D=X+40|0;E=X+56|0;F=X+64|0;G=T+8|0;H=X+72|0;I=X+80|0;J=X+88|0;K=X+96|0;L=X+104|0;M=X+112|0;N=X+120|0;O=V+4|0;n=(i|0)==6&1;q=0.0;p=0.0;s=s+r;m=1;while(1){if((m|0)>=(j|0)){y=6;break}d=c[U+(m<<2)>>2]|0;if(!(m&1)){c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=A;h[C>>3]=+h[z>>3];h[e>>3]=A;h[D>>3]=s;h[f>>3]=B;h[E>>3]=s;h[F>>3]=B;t=+h[G>>3];h[H>>3]=t;Z=+h[T>>3];h[I>>3]=Z;h[J>>3]=t;h[K>>3]=Z;Z=s+6.0;h[L>>3]=Z;h[M>>3]=+h[S>>3];h[N>>3]=Z;s=+h[(c[(c[d+16>>2]|0)+96>>2]|0)+32>>3];t=Z+s*.5;s=Z+s}else{k=d+16|0;b=c[(c[k>>2]|0)+96>>2]|0;if((m|0)==1){p=+h[b+24>>3];q=(p+u)*.5;p=(u-p)*.5}r=r+-6.0-+h[b+32>>3];c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=+h[S>>3];t=r+-6.0;h[C>>3]=t;h[e>>3]=+h[T>>3];h[D>>3]=t;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];h[F>>3]=q;h[H>>3]=+h[G>>3];h[I>>3]=q;h[J>>3]=r;h[K>>3]=p;h[L>>3]=r;h[M>>3]=p;h[N>>3]=+h[z>>3];t=+h[(c[(c[k>>2]|0)+96>>2]|0)+32>>3]*.5+r}c[O>>2]=8;c[V>>2]=X;c[P>>2]=c[S>>2];c[P+4>>2]=c[S+4>>2];c[P+8>>2]=c[S+8>>2];c[P+12>>2]=c[S+12>>2];c[Q>>2]=c[T>>2];c[Q+4>>2]=c[T+4>>2];c[Q+8>>2]=c[T+8>>2];c[Q+12>>2]=c[T+12>>2];c[R>>2]=c[V>>2];c[R+4>>2]=c[V+4>>2];k=oJ(P,Q,R,W,n)|0;b=c[W>>2]|0;if(!b)break;i=c[(c[d+16>>2]|0)+96>>2]|0;h[i+56>>3]=v;h[i+64>>3]=t;a[i+81>>0]=1;QK(d,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,k,b,17296);m=m+1|0}a:do if((y|0)==6){v=(x+w*2.0)*.3333333333333333;u=(x*2.0+w)*.3333333333333333;while(1){if((m|0)>=(g|0))break;d=c[U+(m<<2)>>2]|0;if(!(m&1)){c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=A;h[C>>3]=+h[z>>3];h[e>>3]=A;h[D>>3]=s;h[f>>3]=B;h[E>>3]=s;h[F>>3]=B;t=+h[G>>3];h[H>>3]=t;Z=+h[T>>3];h[I>>3]=Z;h[J>>3]=t;h[K>>3]=Z;Z=s+6.0;h[L>>3]=Z;h[M>>3]=+h[S>>3];s=Z;t=p;p=Z}else{y=(m|0)==1;t=y?v:p;q=y?u:q;p=r+-6.0;c[X>>2]=c[S>>2];c[X+4>>2]=c[S+4>>2];c[X+8>>2]=c[S+8>>2];c[X+12>>2]=c[S+12>>2];h[o>>3]=+h[S>>3];r=r+-12.0;h[C>>3]=r;h[e>>3]=+h[T>>3];h[D>>3]=r;c[f>>2]=c[T>>2];c[f+4>>2]=c[T+4>>2];c[f+8>>2]=c[T+8>>2];c[f+12>>2]=c[T+12>>2];h[F>>3]=q;h[H>>3]=+h[G>>3];h[I>>3]=q;h[J>>3]=p;h[K>>3]=t;h[L>>3]=p;h[M>>3]=t;r=p;p=+h[z>>3]}h[N>>3]=p;c[O>>2]=8;c[V>>2]=X;c[P>>2]=c[S>>2];c[P+4>>2]=c[S+4>>2];c[P+8>>2]=c[S+8>>2];c[P+12>>2]=c[S+12>>2];c[Q>>2]=c[T>>2];c[Q+4>>2]=c[T+4>>2];c[Q+8>>2]=c[T+8>>2];c[Q+12>>2]=c[T+12>>2];c[R>>2]=c[V>>2];c[R+4>>2]=c[V+4>>2];k=oJ(P,Q,R,W,n)|0;b=c[W>>2]|0;if(!b)break a;QK(d,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,k,b,17296);m=m+1|0;p=t}D_(U)}while(0);l=Y;return}function Zg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0;g=l;l=l+16|0;f=g;j=(ey(b)|0)==0;j=j?18488:18480;a[f>>0]=a[j>>0]|0;a[f+1>>0]=a[j+1>>0]|0;a[f+2>>0]=a[j+2>>0]|0;a[f+3>>0]=a[j+3>>0]|0;f=Xx(85398,f,0)|0;Az(f,134401,280,1)|0;nx(f,0,87076,191979)|0;j=uH(96)|0;e=c[f+16>>2]|0;c[e+8>>2]=j;i=c[b+16>>2]|0;k=c[i+8>>2]|0;h[j>>3]=+h[k>>3];h[j+24>>3]=+h[k+24>>3];a[e+115>>0]=a[i+115>>0]|0;c[e+116>>2]=c[i+116>>2]&1^1;c[e+248>>2]=c[i+248>>2];c[e+252>>2]=c[i+252>>2];e=sx(fz(b)|0,1,0)|0;while(1){if(!e)break;nx(f,1,c[e+8>>2]|0,c[e+12>>2]|0)|0;e=sx(fz(b)|0,1,e)|0}e=sx(fz(b)|0,2,0)|0;while(1){if(!e)break;nx(f,2,c[e+8>>2]|0,c[e+12>>2]|0)|0;e=sx(fz(b)|0,2,e)|0}if(!(nx(f,2,108382,0)|0))nx(f,2,108382,191979)|0;if(!(nx(f,2,108373,0)|0))nx(f,2,108373,191979)|0;ch(f,d);l=g;return f|0}function _g(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;a=az(a,ry(b)|0,1)|0;Az(a,134365,304,1)|0;Bx(b,a)|0;if((HJ(b)|0)==2){f=b+16|0;b=vH((W_(c[c[(c[f>>2]|0)+104>>2]>>2]|0)|0)+3|0)|0;c[d>>2]=c[c[(c[f>>2]|0)+104>>2]>>2];Y0(b,85393,d)|0;zx(a,105198,b)|0}l=e;return a|0}function $g(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=Rx(a,b,c,0,1)|0;Az(c,134378,176,1)|0;Bx(d,c)|0;return c|0}function ah(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0;i=l;l=l+32|0;g=i+16|0;f=i;if(e|0){j=+h[b>>3];e=b+8|0;h[b>>3]=+h[e>>3];h[e>>3]=-j};c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];Pg(a,f,g);l=i;return}function bh(a,b){a=a|0;b=b|0;c[46419]=c[b>>2];c[46423]=c[b+4>>2];c[46424]=c[b+8>>2];c[46404]=c[b+12>>2];c[46405]=c[b+16>>2];c[46411]=c[b+20>>2];c[46410]=c[b+24>>2];c[46409]=c[b+28>>2];c[46435]=c[b+32>>2];c[46427]=c[b+36>>2];c[46412]=c[b+40>>2];c[46422]=c[b+44>>2];c[46431]=c[b+48>>2];c[46430]=c[b+52>>2];c[46429]=c[b+56>>2];c[46434]=c[b+60>>2];c[46428]=c[b+64>>2];c[46413]=c[b+68>>2];c[46375]=c[b+72>>2];c[46376]=c[b+76>>2];c[46377]=c[b+80>>2];c[46387]=c[b+84>>2];c[46380]=c[b+88>>2];c[46381]=c[b+92>>2];c[46382]=c[b+96>>2];c[46384]=c[b+100>>2];c[46385]=c[b+104>>2];c[46388]=c[b+108>>2];c[46391]=c[b+112>>2];c[46389]=c[b+116>>2];c[46390]=c[b+120>>2];c[46393]=c[b+124>>2];c[46392]=c[b+128>>2];c[46394]=c[b+132>>2];c[46395]=c[b+136>>2];c[46386]=c[b+140>>2];c[46398]=c[b+144>>2];c[46370]=c[b+148>>2];c[46367]=c[b+152>>2];D_(b);Tf(a);$x(a)|0;return}function ch(a,b){a=a|0;b=b|0;c[b>>2]=c[46419];c[b+4>>2]=c[46423];c[b+8>>2]=c[46424];c[b+12>>2]=c[46404];c[b+16>>2]=c[46405];c[b+20>>2]=c[46411];c[b+24>>2]=c[46410];c[b+28>>2]=c[46409];c[b+32>>2]=c[46435];c[b+36>>2]=c[46427];c[b+40>>2]=c[46412];c[b+44>>2]=c[46422];c[b+48>>2]=c[46431];c[b+52>>2]=c[46430];c[b+56>>2]=c[46429];c[b+60>>2]=c[46434];c[b+64>>2]=c[46428];c[b+68>>2]=c[46413];c[b+72>>2]=c[46375];c[b+76>>2]=c[46376];c[b+80>>2]=c[46377];c[b+84>>2]=c[46387];c[b+88>>2]=c[46380];c[b+92>>2]=c[46381];c[b+96>>2]=c[46382];c[b+100>>2]=c[46384];c[b+104>>2]=c[46385];c[b+108>>2]=c[46388];c[b+112>>2]=c[46391];c[b+116>>2]=c[46389];c[b+120>>2]=c[46390];c[b+124>>2]=c[46393];c[b+128>>2]=c[46392];c[b+132>>2]=c[46394];c[b+136>>2]=c[46395];c[b+140>>2]=c[46386];c[b+144>>2]=c[46398];c[b+152>>2]=c[46367];c[b+148>>2]=c[46370];c[46419]=0;c[46423]=nx(a,2,87317,0)|0;c[46424]=nx(a,2,87326,0)|0;b=nx(a,2,98515,0)|0;c[46404]=b;if(!b)c[46404]=nx(a,2,98515,191979)|0;c[46405]=0;c[46411]=0;c[46410]=nx(a,2,98411,0)|0;c[46409]=nx(a,2,98402,0)|0;c[46435]=nx(a,2,98691,0)|0;c[46427]=0;c[46412]=nx(a,2,105198,0)|0;c[46422]=nx(a,2,85403,0)|0;c[46431]=0;c[46430]=nx(a,2,98591,0)|0;c[46429]=nx(a,2,98577,0)|0;c[46434]=nx(a,2,98682,0)|0;c[46428]=0;c[46413]=0;c[46375]=nx(a,1,137966,0)|0;c[46376]=nx(a,1,138034,0)|0;c[46377]=nx(a,1,105204,0)|0;c[46387]=0;c[46380]=nx(a,1,98402,0)|0;c[46381]=nx(a,1,98411,0)|0;c[46382]=0;c[46384]=nx(a,1,105198,0)|0;c[46385]=0;c[46388]=0;c[46391]=nx(a,1,98383,0)|0;c[46389]=nx(a,1,137994,0)|0;c[46390]=nx(a,1,98446,0)|0;c[46393]=nx(a,1,98458,0)|0;c[46392]=nx(a,1,98322,0)|0;c[46394]=nx(a,1,98463,0)|0;c[46395]=nx(a,1,85415,0)|0;c[46386]=0;c[46398]=0;c[46370]=nx(a,0,98383,0)|0;return}function dh(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0;d=c[(c[(c[a>>2]|0)+16>>2]|0)+96>>2]|0;a=c[(c[(c[b>>2]|0)+16>>2]|0)+96>>2]|0;b=(a|0)!=0;if(d)if(b?(f=+h[d+24>>3],i=+h[d+32>>3],e=+h[a+24>>3],g=+h[a+32>>3],!(f>e)):0)if(!(f<e))if(i>g)a=-1;else a=i<g&1;else a=1;else a=-1;else a=b&1;return a|0}function eh(a){a=a|0;var b=0,d=0,e=0;while(1){b=c[(c[a+16>>2]|0)+116>>2]|0;if(!b)break;else a=b}b=c[a>>2]&3;d=c[(c[((b|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;e=c[d+232>>2]|0;a=c[(c[((b|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;b=c[a+232>>2]|0;if((e|0)<=(b|0))if((e|0)<(b|0))a=1;else a=(c[d+236>>2]|0)<(c[a+236>>2]|0)&1;else a=0;return a|0}function fh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d;h=(c[a+16>>2]|0)+180|0;g=(c[b+16>>2]|0)+172|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];b=gh(a,f,b,e)|0;l=d;return b|0}function gh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[b+4>>2]|0;a:do if((f|0)>0?(g=c[e+4>>2]|0,(g|0)>0):0)if((f|0)<(g|0)){f=c[b>>2]|0;e=0;while(1){b=c[f+(e<<2)>>2]|0;if(!b){b=0;break a}if((c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)==(d|0))break;else e=e+1|0}}else{f=c[e>>2]|0;e=0;while(1){b=c[f+(e<<2)>>2]|0;if(!b){b=0;break a}if((c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)==(a|0))break;else e=e+1|0}}else b=0;while(0);return b|0}function hh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d;h=(c[a+16>>2]|0)+188|0;g=(c[b+16>>2]|0)+196|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];b=gh(a,f,b,e)|0;l=d;return b|0}function ih(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[d+180>>2]|0;if(!b)b=vH((c[d+184>>2]<<2)+8|0)|0;else b=xH(b,(c[d+184>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0)+180>>2]=b;f=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;d=c[f+180>>2]|0;f=f+184|0;b=c[f>>2]|0;c[f>>2]=b+1;c[d+(b<<2)>>2]=a;e=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;c[(c[e+180>>2]|0)+(c[e+184>>2]<<2)>>2]=0;e=a+-48|0;b=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;if(!d)b=vH((c[b+176>>2]<<2)+8|0)|0;else b=xH(d,(c[b+176>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0)+172>>2]=b;b=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;b=b+176|0;f=c[b>>2]|0;c[b>>2]=f+1;c[d+(f<<2)>>2]=a;f=c[(c[((c[a>>2]&3|0)==2?a:e)+40>>2]|0)+16>>2]|0;c[(c[f+172>>2]|0)+(c[f+176>>2]<<2)>>2]=0;return a|0}function jh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=a+4|0;f=c[e>>2]|0;d=0;while(1){if((d|0)>=(f|0))break;g=c[a>>2]|0;h=g+(d<<2)|0;if((c[h>>2]|0)==(b|0)){i=4;break}else d=d+1|0}if((i|0)==4){i=f+-1|0;c[e>>2]=i;c[h>>2]=c[g+(i<<2)>>2];c[(c[a>>2]|0)+(i<<2)>>2]=0}return}function kh(a){a=a|0;if(!a)qa(85456,85466,117,85475);else{jh((c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+180|0,a);jh((c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+172|0,a);return}}function lh(a){a=a|0;var b=0,d=0,e=0,f=0;e=a+48|0;d=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[d+204>>2]|0;if(!b)b=vH((c[d+208>>2]<<2)+8|0)|0;else b=xH(b,(c[d+208>>2]<<2)+8|0)|0;c[(c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0)+204>>2]=b;f=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;b=c[f+204>>2]|0;f=f+208|0;d=c[f>>2]|0;c[f>>2]=d+1;c[b+(d<<2)>>2]=a;e=c[(c[((c[a>>2]&3|0)==3?a:e)+40>>2]|0)+16>>2]|0;c[(c[e+204>>2]|0)+(c[e+208>>2]<<2)>>2]=0;return}function mh(a){a=a|0;nh(a,(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+204|0);return}function nh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+4|0;e=c[h>>2]|0;f=c[b>>2]|0;d=0;while(1){if((d|0)>=(e|0)){g=4;break}if((c[f+(d<<2)>>2]|0)==(a|0))break;else d=d+1|0}if((g|0)==4){if(!f)d=vH((e<<2)+8|0)|0;else d=xH(f,(e<<2)+8|0)|0;c[b>>2]=d;f=c[h>>2]|0;g=f+1|0;c[h>>2]=g;c[d+(f<<2)>>2]=a;c[(c[b>>2]|0)+(g<<2)>>2]=0}return}function oh(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=uH(96)|0;g=n+48|0;c[g>>2]=c[g>>2]|3;c[n>>2]=c[n>>2]&-4|2;h=uH(176)|0;m=n+16|0;c[m>>2]=h;c[((c[n>>2]&3|0)==3?n:g)+40>>2]=d;j=n+-48|0;c[((c[n>>2]&3|0)==2?n:j)+40>>2]=e;a[h+112>>0]=1;if(!f){c[h+156>>2]=1;b[h+154>>1]=1;b[h+168>>1]=1;b[h+170>>1]=1}else{c[n>>2]=c[n>>2]&15|c[f>>2]&-16;c[g>>2]=c[g>>2]&15|c[f>>2]&-16;l=f+16|0;i=c[l>>2]|0;b[h+168>>1]=b[i+168>>1]|0;b[h+154>>1]=b[i+154>>1]|0;c[h+156>>2]=c[i+156>>2];b[h+170>>1]=b[i+170>>1]|0;d=c[((c[n>>2]&3|0)==3?n:g)+40>>2]|0;e=c[f>>2]&3;k=f+48|0;if((d|0)!=(c[((e|0)==3?f:k)+40>>2]|0)){g=f+-48|0;if((d|0)==(c[((e|0)==2?f:g)+40>>2]|0)){h=h+16|0;d=i+56|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}}else{h=h+16|0;d=i+16|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0));g=f+-48|0}d=c[((c[n>>2]&3|0)==2?n:j)+40>>2]|0;e=c[f>>2]&3;if((d|0)!=(c[((e|0)==2?f:g)+40>>2]|0)){if((d|0)==(c[((e|0)==3?f:k)+40>>2]|0)){h=(c[m>>2]|0)+56|0;d=(c[l>>2]|0)+16|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}}else{h=(c[m>>2]|0)+56|0;d=(c[l>>2]|0)+56|0;e=h+40|0;do{c[h>>2]=c[d>>2];h=h+4|0;d=d+4|0}while((h|0)<(e|0))}d=(c[l>>2]|0)+172|0;if(!(c[d>>2]|0))c[d>>2]=n;c[(c[m>>2]|0)+116>>2]=f}return n|0}function ph(a,b,c){a=a|0;b=b|0;c=c|0;return ih(oh(a,b,c)|0)|0}function qh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;f=c[a>>2]|0;d=c[b+16>>2]|0;c[d+164>>2]=f;e=f;if(f|0)c[(c[e+16>>2]|0)+168>>2]=b;c[a>>2]=b;c[d+168>>2]=0;if((e|0)==(b|0))qa(85492,85466,215,85508);else return}function rh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((a|0)==(b|0))qa(85518,85466,220,85525);f=c[b+16>>2]|0;d=f+164|0;if(c[d>>2]|0)qa(85538,85466,221,85525);e=(c[a+16>>2]|0)+164|0;c[d>>2]=c[e>>2];d=c[e>>2]|0;if(d|0)c[(c[d+16>>2]|0)+168>>2]=b;c[f+168>>2]=a;c[e>>2]=b;return}function sh(a,b){a=a|0;b=b|0;var d=0,e=0;if(!(th(a,b)|0))qa(85557,85466,231,85578);b=c[b+16>>2]|0;d=c[b+164>>2]|0;e=d;b=b+168|0;if(d|0)c[(c[d+16>>2]|0)+168>>2]=c[b>>2];b=c[b>>2]|0;if(!b)c[(c[a+16>>2]|0)+192>>2]=e;else c[(c[b+16>>2]|0)+164>>2]=e;return}function th(a,b){a=a|0;b=b|0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if((a|0)==0|(a|0)==(b|0))break;a=(c[a+16>>2]|0)+164|0}return a|0}function uh(b){b=b|0;var d=0,e=0,f=0,g=0;d=uH(64)|0;c[d>>2]=c[d>>2]&-4|1;e=d+16|0;c[e>>2]=uH(304)|0;c[d+24>>2]=fz(b)|0;g=c[e>>2]|0;a[g+156>>0]=1;h[g+96>>3]=1.0;h[g+88>>3]=1.0;h[g+80>>3]=1.0;c[g+216>>2]=1;c[g+176>>2]=0;g=uH(20)|0;f=c[e>>2]|0;c[f+172>>2]=g;c[f+184>>2]=0;f=uH(20)|0;c[(c[e>>2]|0)+180>>2]=f;qh(b,d);b=(c[b+16>>2]|0)+232|0;c[b>>2]=(c[b>>2]|0)+1;return d|0}function vh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=d+48|0;e=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;f=c[e+188>>2]|0;if(!f)e=vH((c[e+192>>2]<<2)+8|0)|0;else e=xH(f,(c[e+192>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0)+188>>2]=e;h=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;f=c[h+188>>2]|0;h=h+192|0;e=c[h>>2]|0;c[h>>2]=e+1;c[f+(e<<2)>>2]=d;g=c[(c[((c[d>>2]&3|0)==3?d:g)+40>>2]|0)+16>>2]|0;c[(c[g+188>>2]|0)+(c[g+192>>2]<<2)>>2]=0;g=d+-48|0;e=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;f=c[e+196>>2]|0;if(!f)e=vH((c[e+200>>2]<<2)+8|0)|0;else e=xH(f,(c[e+200>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0)+196>>2]=e;e=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;f=c[e+196>>2]|0;e=e+200|0;h=c[e>>2]|0;c[e>>2]=h+1;c[f+(h<<2)>>2]=d;h=c[(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;c[(c[h+196>>2]|0)+(c[h+200>>2]<<2)>>2]=0;a[(c[b+16>>2]|0)+240>>0]=1;a[(c[(ig(b)|0)+16>>2]|0)+240>>0]=1;return}function wh(a){a=a|0;var b=0,d=0;if(!a)qa(85456,85466,269,85595);b=c[(c[a+16>>2]|0)+116>>2]|0;if(b|0?(d=(c[b+16>>2]|0)+172|0,(c[d>>2]|0)==(a|0)):0)c[d>>2]=0;jh((c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+188|0,a);jh((c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+196|0,a);return}function xh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;d=(c[a+16>>2]|0)+172|0;e=c[d>>2]|0;do if((e|0)!=(b|0))if(!e){c[d>>2]=b;yh(a,b);break}else qa(87498,85466,340,85633);else Pw(0,85612,f)|0;while(0);l=f;return}function yh(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0;f=(c[d+16>>2]|0)+170|0;i=c[a+16>>2]|0;a=b[i+170>>1]|0;if((e[f>>1]|0)<(a&65535))b[f>>1]=a;g=i+168|0;h=i+154|0;f=i+156|0;a=d;while(1){if(!a)break;d=c[a+16>>2]|0;i=d+168|0;b[i>>1]=(e[i>>1]|0)+(e[g>>1]|0);i=d+154|0;b[i>>1]=(e[i>>1]|0)+(e[h>>1]|0);i=d+156|0;c[i>>2]=(c[i>>2]|0)+(c[f>>2]|0);a=c[d+172>>2]|0}return}function zh(d){d=d|0;var e=0,f=0,g=0,h=0;f=d+16|0;e=c[(c[f>>2]|0)+172>>2]|0;a:while(1){if(!e)break;Ah(e,d);h=c[e+16>>2]|0;g=c[h+172>>2]|0;if(!(b[h+168>>1]|0))Bh(e);while(1){if((a[(c[e+16>>2]|0)+112>>0]|0)!=1){e=g;continue a}e=c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){e=g;continue a}if((c[e+184>>2]|0)!=1){e=g;continue a}e=c[c[e+180>>2]>>2]|0;Ah(e,d)}}c[(c[f>>2]|0)+172>>2]=0;return}function Ah(a,d){a=a|0;d=d|0;var f=0;f=c[d+16>>2]|0;d=c[a+16>>2]|0;a=d+168|0;b[a>>1]=(e[a>>1]|0)-(e[f+168>>1]|0);a=d+154|0;b[a>>1]=(e[a>>1]|0)-(e[f+154>>1]|0);d=d+156|0;c[d>>2]=(c[d>>2]|0)-(c[f+156>>2]|0);return}function Bh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)qa(85456,85466,128,85646);g=a+48|0;d=0;while(1){b=c[a>>2]|0;e=(c[(c[((b&3|0)==3?a:g)+40>>2]|0)+16>>2]|0)+180|0;f=c[(c[e>>2]|0)+(d<<2)>>2]|0;if(!f)break;if((f|0)==(a|0))jh(e,a);d=d+1|0}g=a+-48|0;f=0;while(1){d=(c[(c[((b&3|0)==2?a:g)+40>>2]|0)+16>>2]|0)+172|0;e=c[(c[d>>2]|0)+(f<<2)>>2]|0;if(!e)break;if((e|0)==(a|0)){jh(d,a);b=c[a>>2]|0}f=f+1|0}return}function Ch(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+1040|0;n=p+1032|0;o=p;m=p+8|0;k=d+16|0;d=c[k>>2]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;i=c[d+196>>2]|0;h=i+(j<<6)|0;i=i+(j<<6)+4|0;g=0;d=0;while(1){if((g|0)>=(c[h>>2]|0))break;e=c[(c[i>>2]|0)+(g<<2)>>2]|0;f=e+16|0;if(c[(c[f>>2]|0)+112>>2]|0){if(!d){a[n>>0]=a[18484]|0;a[n+1>>0]=a[18485]|0;a[n+2>>0]=a[18486]|0;a[n+3>>0]=a[18487]|0;d=Xx(85668,n,0)|0}c[o>>2]=g;Y0(m,134313,o)|0;t=az(d,m,1)|0;Az(t,91080,24,1)|0;q=c[(c[f>>2]|0)+180>>2]|0;r=c[q>>2]|0;r=c[(c[(c[((c[r>>2]&3|0)==2?r:r+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;q=c[q+4>>2]|0;q=c[(c[(c[((c[q>>2]&3|0)==2?q:q+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;s=(r|0)>(q|0);f=c[t+16>>2]|0;c[f+12>>2]=s?q:r;c[f+16>>2]=s?r:q;c[f+20>>2]=e}g=g+1|0}if(d|0){if((ay(d)|0)>1)Dh(d,h);$x(d)|0}j=j+1|0;d=c[k>>2]|0}l=p;return}function Dh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=0;h=Sy(a)|0;a:while(1){if(!h)break;i=Ty(a,h)|0;j=h+16|0;g=i;while(1){if(!g){h=i;continue a}f=c[g+16>>2]|0;e=c[j>>2]|0;if((c[f+16>>2]|0)>(c[e+12>>2]|0)){if((c[e+16>>2]|0)<=(c[f+12>>2]|0))Rx(a,h,g,0,1)|0}else{Rx(a,g,h,0,1)|0;d=1}g=Ty(a,g)|0}}do if(d|0){h=vA(a,85671,1)|0;j=uH((ay(a)|0)<<2)|0;i=uH((ay(a)|0)<<2)|0;f=b+4|0;e=Sy(a)|0;b:while(1){if(!e){d=23;break}if((c[(c[e+16>>2]|0)+8>>2]|0)==0?cy(a,e,1,1)|0:0){c:do if(Eh(a,e,h,i)|0){g=ay(h)|0;if((Fh(a,h,j)|0)!=(g|0)){d=17;break b}_0(i,g,4,60);d=0;while(1){if((d|0)>=(g|0))break c;b=i+(d<<2)|0;k=c[j+(d<<2)>>2]|0;c[(c[k+16>>2]|0)+236>>2]=c[b>>2];c[(c[f>>2]|0)+(c[b>>2]<<2)>>2]=k;d=d+1|0}}while(0);Hh(h)}e=Ty(a,e)|0}if((d|0)==17)qa(85676,85686,265,85697);else if((d|0)==23){D_(j);break}}while(0);return}function Eh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=c[b+16>>2]|0;c[h+8>>2]=1;h=c[(c[(c[h+20>>2]|0)+16>>2]|0)+236>>2]|0;c[e+((ay(d)|0)<<2)>>2]=h;Xy(d,b,1)|0;h=Ex(a,b)|0;f=0;while(1){if(!h)break;j=c[h>>2]&3;g=c[((j|0)==2?h:h+-48|0)+40>>2]|0;i=c[g+16>>2]|0;f=f+((c[(c[(c[i+20>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[(c[(c[((j|0)==3?h:h+48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(c[i+8>>2]|0))f=(Eh(a,g,d,e)|0)+f|0;h=Gx(a,h)|0}h=Hx(a,b)|0;while(1){if(!h)break;i=c[h>>2]&3;g=c[((i|0)==3?h:h+48|0)+40>>2]|0;j=c[g+16>>2]|0;f=f+((c[(c[(c[(c[(c[((i|0)==2?h:h+-48|0)+40>>2]|0)+16>>2]|0)+20>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[j+20>>2]|0)+16>>2]|0)+236>>2]|0)&1)|0;if(!(c[j+8>>2]|0))f=(Eh(a,g,d,e)|0)+f|0;h=Ix(a,h)|0}return f|0}function Fh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=0;while(1){e=Ih(a,b)|0;if(!e)break;c[d+(f<<2)>>2]=c[(c[e+16>>2]|0)+20>>2];cz(b,e)|0;e=Ex(a,e)|0;while(1){if(!e)break;g=Gx(a,e)|0;Ux(a,e)|0;e=g}f=f+1|0}return f|0}function Gh(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}function Hh(a){a=a|0;var b=0,c=0;b=Sy(a)|0;while(1){if(!b)break;c=Ty(a,b)|0;cz(a,b)|0;b=c}return}function Ih(a,b){a=a|0;b=b|0;var c=0;c=Sy(b)|0;while(1){if(!c){c=0;break}if(!(cy(a,c,1,0)|0))break;c=Ty(b,c)|0}return c|0}function Jh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;Kh(b);i=b+16|0;f=0;e=0;while(1){if((f|0)>=(c[(c[i>>2]|0)+220>>2]|0))break;Lh(b,f);f=f+1|0;e=(Mh(b,0,d)|0)+e|0}Nh(b);h=1;while(1){f=c[i>>2]|0;g=c[f+180>>2]|0;if((h|0)>(g|0))break;g=(Oh(c[(c[f+184>>2]|0)+(h<<2)>>2]|0,d)|0)+e|0;h=h+1|0;e=g}do if((g|0)>0){f=xx(b,85711)|0;if(f|0?(QL(f)|0)<<24>>24==0:0)break;ll(b);a[190689]=1;e=Mh(b,2,d)|0}while(0);Ph(b,e);return}function Kh(d){d=d|0;var e=0;if(0)EL();a[190689]=0;c[45971]=d;e=((by(ig(d)|0)|0)<<2)+4|0;c[45970]=uH(e)|0;c[45969]=uH(e)|0;Fi(d);e=d+16|0;if(b[(c[e>>2]|0)+136>>1]&16)Gi(d);Uk(d);Il(d,1);Hi(d);Wh(d);e=c[e>>2]|0;c[45972]=b[e+236>>1];c[45973]=b[e+238>>1];return}function Lh(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;a=c[a+16>>2]|0;c[a+192>>2]=c[(c[a+216>>2]|0)+(d<<2)>>2];a:do if((d|0)>0){d=b[a+238>>1]|0;e=a+196|0;a=b[a+236>>1]|0;while(1){if((a|0)>(d|0))break a;f=c[e>>2]|0;g=f+(a<<6)+4|0;f=f+(a<<6)|0;c[g>>2]=(c[g>>2]|0)+(c[f>>2]<<2);c[f>>2]=0;a=a+1|0}}while(0);return}function Mh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;n=o;if((b|0)>1){e=ki(0)|0;li(a)}else e=2147483647;m=c[15686]|0;k=b;f=0;b=e;while(1){if((k|0)>=3)break;f=c[46365]|0;if((k|0)==2)if((e|0)>(b|0)){ni(a);e=b}else e=b;else{e=(f|0)<4?f:4;if((ig(a)|0)==(a|0))mi(a,k);if(!k)Xh(a);Yh(a);g=ki(0)|0;if((g|0)>(b|0)){f=e;e=g}else{li(a);f=e;e=g;b=g}}g=0;j=0;while(1){if((j|0)>=(f|0))break;if(0){c[n>>2]=k;c[n+4>>2]=j;c[n+8>>2]=g;c[n+12>>2]=e;c[n+16>>2]=b;g1(m,86104,n)|0}i=g+1|0;if((e|0)==0|(g|0)>=(c[45974]|0))break;oi(a,j);e=ki(0)|0;if((e|0)>(b|0))g=i;else{li(a);g=+h[22830]*+(b|0)>+(e|0)?0:i;b=e}j=j+1|0}if(!e){e=0;break}else k=k+1|0}if((e|0)>(b|0))ni(a);if((b|0)>0){pi(a,0);e=ki(0)|0}else e=b;a:do if(d|0){b=0;while(1){if((b|0)>=(f|0))break a;qi(a);b=b+1|0}}while(0);l=o;return e|0}function Nh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p;ji(a);k=a+16|0;d=c[k>>2]|0;m=c[15686]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;e=c[d+196>>2]|0;f=c[e+(j<<6)+8>>2]|0;c[e+(j<<6)>>2]=f;g=c[e+(j<<6)+12>>2]|0;c[e+(j<<6)+4>>2]=g;i=0;while(1){if((i|0)>=(f|0))break;h=c[g+(i<<2)>>2]|0;if(!h){o=6;break}c[(c[h+16>>2]|0)+236>>2]=i;i=i+1|0}if((o|0)==6){o=0;if(0){e=ry(a)|0;d=c[(c[(c[k>>2]|0)+196>>2]|0)+(j<<6)>>2]|0;c[n>>2]=e;c[n+4>>2]=j;c[n+8>>2]=i;c[n+12>>2]=d;g1(m,86054,n)|0;d=c[k>>2]|0;e=c[d+196>>2]|0}c[e+(j<<6)>>2]=i}j=j+1|0}l=p;return}function Oh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;fl(a);Wh(a);Xh(a);Yh(a);f=a+16|0;d=Mh(a,2,b)|0;e=1;while(1){g=c[f>>2]|0;if((e|0)>(c[g+180>>2]|0))break;d=(Oh(c[(c[g+184>>2]|0)+(e<<2)>>2]|0,b)|0)+d|0;e=e+1|0}Zh(a);return d|0}function Ph(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;p=q;f=c[45969]|0;if(f|0){D_(f);c[45969]=0}f=c[45970]|0;if(f|0){D_(f);c[45970]=0}o=d+16|0;f=1;while(1){g=c[o>>2]|0;if((f|0)>(c[g+180>>2]|0))break;Qh(c[(c[g+184>>2]|0)+(f<<2)>>2]|0);f=f+1|0}n=b[g+236>>1]|0;f=g;while(1){if((n|0)>(b[f+238>>1]|0))break;else m=0;while(1){f=c[f+196>>2]|0;if((m|0)>=(c[f+(n<<6)>>2]|0))break;k=(c[(c[f+(n<<6)+4>>2]|0)+(m<<2)>>2]|0)+16|0;f=c[k>>2]|0;c[f+236>>2]=m;f=c[f+188>>2]|0;a:do if(f|0){g=0;while(1){i=c[f+(g<<2)>>2]|0;if(!i)break a;j=i+16|0;if((a[(c[j>>2]|0)+112>>0]|0)==4){wh(i);D_(c[j>>2]|0);D_(i);g=g+-1|0;f=c[(c[k>>2]|0)+188>>2]|0}g=g+1|0}}while(0);m=m+1|0;f=c[o>>2]|0}Rh(c[f+(n<<6)+56>>2]|0);n=n+1|0;f=c[o>>2]|0}if(0){o=c[15686]|0;d=ry(d)|0;r=+FL();c[p>>2]=d;c[p+4>>2]=e;h[p+8>>3]=r;g1(o,85722,p)|0}l=q;return}function Qh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=a+16|0;d=1;while(1){f=c[g>>2]|0;if((d|0)>(c[f+180>>2]|0))break;Qh(c[(c[f+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}a:do if(c[f+268>>2]|0){e=b[f+236>>1]|0;d=f;while(1){if((e|0)>(b[d+238>>1]|0))break a;j=c[(c[d+268>>2]|0)+(e<<2)>>2]|0;i=Sh(a,j,-1)|0;j=Sh(a,j,1)|0;c[(c[(c[g>>2]|0)+268>>2]|0)+(e<<2)>>2]=i;k=c[(c[(c[(ig(a)|0)+16>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0;i=c[(c[i+16>>2]|0)+236>>2]|0;f=c[g>>2]|0;h=c[f+196>>2]|0;c[h+(e<<6)+4>>2]=k+(i<<2);c[h+(e<<6)>>2]=(c[(c[j+16>>2]|0)+236>>2]|0)+1-i;e=e+1|0;d=f}}while(0);return}function Rh(a){a=a|0;if(a|0){D_(c[a+8>>2]|0);D_(a)}return}function Sh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=b;while(1){b=Th(b,c)|0;if(!b)break;if(Uh(a,b)|0){d=b;continue}e=(Vh(a,b)|0)==0;d=e?d:b}return d|0}function Th(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!a)qa(85761,85686,1023,85763);if((b|0)<0){a=c[a+16>>2]|0;e=c[a+236>>2]|0;if((e|0)>0){a=(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(c[a+232>>2]<<6)+4|0;d=e+-1|0;f=7}else g=0}else{a=c[a+16>>2]|0;e=c[a+236>>2]|0;a=(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(c[a+232>>2]<<6)+4|0;d=e+1|0;f=7}if((f|0)==7){a=c[(c[a>>2]|0)+(d<<2)>>2]|0;if(a)if((O((c[(c[a+16>>2]|0)+236>>2]|0)-e|0,b)|0)>0)g=a;else qa(85772,85686,1029,85763);else g=0}return g|0}function Uh(b,d){b=b|0;d=d|0;if(!(a[(c[d+16>>2]|0)+156>>0]|0))b=(oz(b,d)|0)!=0&1;else b=0;return b|0}function Vh(b,d){b=b|0;d=d|0;var e=0,f=0;d=c[d+16>>2]|0;if(((a[d+156>>0]|0)==1?(c[d+176>>2]|0)==1:0)?(c[d+184>>2]|0)==1:0){d=c[d+180>>2]|0;while(1){d=c[d>>2]|0;e=c[d+16>>2]|0;if(!(a[e+112>>0]|0))break;else d=e+116|0}if(oz(b,d)|0)d=1;else f=7}else f=7;if((f|0)==7)d=0;return d|0}function Wh(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=c[46370]|0;a:do if((d|0)!=0|(c[46391]|0)!=0){d=NL(b,d,0)|0;if(d|0){switch(a[d>>0]|0){case 0:break a;case 111:{if(!(b$(d,85974)|0)){ei(b,1);break a}break}case 105:{if(!(b$(d,95660)|0)){ei(b,0);break a}break}default:{}}c[e>>2]=d;Pw(1,85978,e)|0;break}d=wA(b)|0;while(1){if(!d)break;if(!(Rj(d)|0))Wh(d);d=xA(d)|0}if(c[46391]|0)fi(b)}while(0);l=f;return}function Xh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;e=c[k>>2]|0;j=b[e+236>>1]|0;while(1){if((j|0)>(b[e+238>>1]|0))break;else{f=0;i=0}while(1){g=c[e+196>>2]|0;h=c[g+(j<<6)>>2]|0;if((i|0)>=(h|0))break;g=c[(c[(c[g+(j<<6)+4>>2]|0)+(i<<2)>>2]|0)+16>>2]|0;a[g+158>>0]=0;a[g+157>>0]=0;c[g+284>>2]=i;if((f|0)==0&(c[g+192>>2]|0)>0){f=ci(h,h)|0;e=c[k>>2]|0;c[(c[e+196>>2]|0)+(j<<6)+56>>2]=f;f=1}i=i+1|0}a:do if(f){i=0;f=h;while(1){if((i|0)>=(f|0))break a;h=c[(c[g+(j<<6)+4>>2]|0)+(i<<2)>>2]|0;if(!(a[(c[h+16>>2]|0)+157>>0]|0)){di(d,h);e=c[k>>2]|0;f=c[e+196>>2]|0;g=f;f=c[f+(j<<6)>>2]|0}i=i+1|0}}while(0);j=j+1|0}return}function Yh(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=d+16|0;e=c[s>>2]|0;if(a[e+240>>0]|0){h=0;r=b[e+236>>1]|0;q=0;i=0;a:while(1){if((r|0)>(b[e+238>>1]|0))break;f=c[e+196>>2]|0;g=c[f+(r<<6)>>2]|0;if(!g){g=q;f=i}else{f=c[f+(r<<6)+4>>2]|0;o=c[(c[(c[f>>2]|0)+16>>2]|0)+236>>2]|0;e=0;while(1){if((e|0)>=(g|0))break;a[(c[(c[f+(e<<2)>>2]|0)+16>>2]|0)+157>>0]=0;e=e+1|0}e=(e<<2)+4|0;if(!h)p=vH(e)|0;else p=xH(i,e)|0;m=0;n=0;while(1){e=c[s>>2]|0;f=c[e+196>>2]|0;g=c[f+(r<<6)>>2]|0;if((g|0)<=(n|0))break;j=c[(c[f+(r<<6)+4>>2]|0)+(((c[e+116>>2]&1|0)==0?g+~n|0:n)<<2)>>2]|0;l=j+16|0;e=0;k=0;while(1){i=c[l>>2]|0;if((e|0)>=(c[i+200>>2]|0)){f=0;g=0;e=i;break}i=k+((_h(d,c[(c[i+196>>2]|0)+(e<<2)>>2]|0)|0)!=0&1)|0;e=e+1|0;k=i}while(1){if((g|0)>=(c[e+192>>2]|0))break;i=f+((_h(d,c[(c[e+188>>2]|0)+(g<<2)>>2]|0)|0)!=0&1)|0;f=i;g=g+1|0;e=c[l>>2]|0}if(f|k)if((k|0)==0&(a[e+157>>0]|0)==0)e=($h(d,j,p+(m<<2)|0,r)|0)+m|0;else e=m;else{c[p+(m<<2)>>2]=j;e=m+1|0}m=e;n=n+1|0}b:do if(m){c:do if(!(c[e+116>>2]&1)){f=p;e=p+(m<<2)|0;while(1){e=e+-4|0;if(f>>>0>=e>>>0){g=0;break c}n=c[f>>2]|0;c[f>>2]=c[e>>2];c[e>>2]=n;f=f+4|0}}else g=0;while(0);while(1){e=c[s>>2]|0;i=c[e+196>>2]|0;f=c[i+(r<<6)>>2]|0;if((g|0)>=(f|0)){m=0;g=i;break}n=c[p+(g<<2)>>2]|0;c[(c[i+(r<<6)+4>>2]|0)+(g<<2)>>2]=n;c[(c[n+16>>2]|0)+236>>2]=g+o;g=g+1|0}while(1){if((m|0)>=(f|0))break b;l=(c[(c[g+(r<<6)+4>>2]|0)+(m<<2)>>2]|0)+16|0;i=c[(c[l>>2]|0)+188>>2]|0;if(i){k=0;f=i;while(1){g=c[f+(k<<2)>>2]|0;e=c[s>>2]|0;if(!g)break;j=c[g>>2]&3;i=c[(c[(c[((j|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;j=c[(c[(c[((j|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;if(!(c[e+116>>2]&1))if((i|0)<(j|0))t=36;else e=k;else if((i|0)>(j|0))t=36;else e=k;if((t|0)==36){t=0;if(_h(d,g)|0){t=37;break a}wh(g);ai(d,g);e=k+-1|0;f=c[(c[l>>2]|0)+188>>2]|0}k=e+1|0}f=c[e+196>>2]|0;g=f;f=c[f+(r<<6)>>2]|0}m=m+1|0}}while(0);a[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(r<<6)+49>>0]=0;h=p;g=p;f=p}r=r+1|0;q=g;i=f}if((t|0)==37)qa(85820,85686,1561,85859);if(h|0)D_(q)}return}function Zh(a){a=a|0;var d=0,e=0;e=a+16|0;a=c[e>>2]|0;a:do if(c[a+268>>2]|0){d=b[a+236>>1]|0;while(1){if((d|0)>(b[a+238>>1]|0))break a;c[(c[a+268>>2]|0)+(d<<2)>>2]=c[c[(c[a+196>>2]|0)+(d<<6)+4>>2]>>2];d=d+1|0;a=c[e>>2]|0}}while(0);return}function _h(a,b){a=a|0;b=b|0;if((c[(c[b+16>>2]|0)+156>>2]|0)!=0?(bi(a,c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)!=0:0)a=(bi(a,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)!=0&1;else a=0;return a|0}function $h(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=d+16|0;g=c[l>>2]|0;a[g+157>>0]=1;a:do if((c[g+192>>2]|0)>0){h=0;j=0;while(1){i=c[(c[g+188>>2]|0)+(j<<2)>>2]|0;if(!i)break a;if((_h(b,i)|0)!=0?(k=c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]|0,(a[(c[k+16>>2]|0)+157>>0]|0)==0):0)h=($h(b,k,e+(h<<2)|0,f)|0)+h|0;j=j+1|0;g=c[l>>2]|0}}else h=0;while(0);if((c[g+232>>2]|0)==(f|0)){c[e+(h<<2)>>2]=d;return h+1|0}else qa(85872,85686,1490,85888);return 0}function ai(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=c[d>>2]&3;j=c[((i|0)==2?d:d+-48|0)+40>>2]|0;f=c[(c[j+16>>2]|0)+188>>2]|0;a:do if(!f){e=d+48|0;m=15}else{l=d+48|0;g=((i|0)==3?d:l)+40|0;e=0;while(1){h=c[f+(e<<2)>>2]|0;if(!h){e=l;m=15;break a}if((c[((c[h>>2]&3|0)==2?h:h+-48|0)+40>>2]|0)==(c[g>>2]|0))break;else e=e+1|0}xh(d,h);e=(c[d+16>>2]|0)+172|0;if(!(c[e>>2]|0))c[e>>2]=h;e=c[h+16>>2]|0;if((a[e+112>>0]|0)==4?(k=e+116|0,(c[k>>2]|0)==0):0)c[k>>2]=d;e=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;f=c[e+204>>2]|0;if(!f)e=vH((c[e+208>>2]<<2)+8|0)|0;else e=xH(f,(c[e+208>>2]<<2)+8|0)|0;c[(c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0)+204>>2]=e;i=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;j=c[i+204>>2]|0;i=i+208|0;k=c[i>>2]|0;c[i>>2]=k+1;c[j+(k<<2)>>2]=d;d=c[(c[((c[d>>2]&3|0)==3?d:l)+40>>2]|0)+16>>2]|0;c[(c[d+204>>2]|0)+(c[d+208>>2]<<2)>>2]=0}while(0);if((m|0)==15){m=oh(j,c[((i|0)==3?d:e)+40>>2]|0,d)|0;l=c[d+16>>2]|0;d=c[m+16>>2]|0;a[d+112>>0]=(a[l+112>>0]|0)==4?4:3;c[d+96>>2]=c[l+96>>2];vh(b,m)}return}function bi(a,b){a=a|0;b=b|0;var c=0;c=Uh(a,b)|0;return Vh(a,b)|0|c|0}function ci(a,b){a=a|0;b=b|0;var d=0;d=uH(12)|0;c[d>>2]=a;c[d+4>>2]=b;c[d+8>>2]=uH(O(b,a)|0)|0;return d|0}function di(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=d+16|0;l=c[o>>2]|0;k=c[(c[(c[b+16>>2]|0)+196>>2]|0)+(c[l+232>>2]<<6)+56>>2]|0;a[l+157>>0]=1;a[l+158>>0]=1;l=(c[(c[(ig(b)|0)+16>>2]|0)+180>>2]|0)>0;e=c[o>>2]|0;f=c[e+188>>2]|0;a:do if(f){m=k+4|0;n=k+8|0;d=0;b:while(1){j=c[f+(d<<2)>>2]|0;if(!j){p=e;break a}if(l){if((oz(b,c[((c[j>>2]&3|0)==3?j:j+48|0)+40>>2]|0)|0)!=0?(oz(b,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)|0)!=0:0)q=7}else q=7;do if((q|0)==7){q=0;h=j+16|0;if(c[(c[h>>2]|0)+156>>2]|0){e=c[j>>2]&3;g=j+-48|0;r=c[(c[((e|0)==2?j:g)+40>>2]|0)+16>>2]|0;i=c[r+284>>2]|0;f=(i|0)<(c[k>>2]|0);if((a[r+158>>0]|0)==1){if(!f){q=10;break b}e=c[(c[(c[((e|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;f=c[m>>2]|0;if((e|0)>=(f|0)){q=12;break b}a[(c[n>>2]|0)+((O(f,i)|0)+e)>>0]=1;wh(j);d=d+-1|0;if((a[(c[h>>2]|0)+112>>0]|0)==4)break;ai(b,j);break}else{if(!f){q=16;break b}e=c[(c[(c[((e|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+284>>2]|0;f=c[m>>2]|0;if((e|0)>=(f|0)){q=18;break b}a[(c[n>>2]|0)+((O(f,e)|0)+i)>>0]=1;e=c[((c[j>>2]&3|0)==2?j:g)+40>>2]|0;if(a[(c[e+16>>2]|0)+157>>0]|0)break;di(b,e);break}}}while(0);f=c[o>>2]|0;d=d+1|0;e=f;f=c[f+188>>2]|0}if((q|0)==10)qa(85898,85686,1251,85930);else if((q|0)==12)qa(85942,85686,1252,85930);else if((q|0)==16)qa(85898,85686,1260,85930);else if((q|0)==18)qa(85942,85686,1261,85930)}else p=e;while(0);a[p+158>>0]=0;return}function ei(a,b){a=a|0;b=b|0;var c=0;c=Sy(a)|0;while(1){if(!c)break;gi(a,c,b);c=Ty(a,c)|0}return}function fi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;f=g;d=Sy(b)|0;while(1){if(!d)break;e=NL(d,c[46391]|0,0)|0;a:do if(e|0){switch(a[e>>0]|0){case 0:break a;case 111:{if(!(b$(e,85974)|0)){gi(b,d,1);break a}break}case 105:{if(!(b$(e,95660)|0)){gi(b,d,0);break a}break}default:{}}h=ry(d)|0;c[f>>2]=e;c[f+4>>2]=h;Pw(1,86009,f)|0}while(0);d=Ty(b,d)|0}l=g;return}function gi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[45970]|0;h=d+16|0;f=c[h>>2]|0;a:do if(!(c[f+212>>2]|0)){i=(e|0)!=0;b:do if(i){g=0;d=0;e=f;while(1){f=c[(c[e+180>>2]|0)+(g<<2)>>2]|0;if(!f)break b;if(!(hi(f)|0)){c[j+(d<<2)>>2]=f;d=d+1|0;e=c[h>>2]|0}g=g+1|0}}else{g=0;d=0;e=f;while(1){f=c[(c[e+172>>2]|0)+(g<<2)>>2]|0;if(!f)break b;if(!(hi(f)|0)){c[j+(d<<2)>>2]=f;d=d+1|0;e=c[h>>2]|0}g=g+1|0}}while(0);if((d|0)>=2){c[j+(d<<2)>>2]=0;_0(j,d,4,61);h=i?2:3;g=i?-1:1;f=1;while(1){d=c[j+(f<<2)>>2]|0;if(!d)break a;e=c[j+(f+-1<<2)>>2]|0;e=c[((c[e>>2]&3|0)==(h|0)?e:e+(g*48|0)|0)+40>>2]|0;d=c[((c[d>>2]&3|0)==(h|0)?d:d+(g*48|0)|0)+40>>2]|0;if(hh(e,d)|0)break a;i=oh(e,d,0)|0;a[(c[i+16>>2]|0)+112>>0]=4;vh(b,i);f=f+1|0}}}while(0);return}function hi(a){a=a|0;var b=0;while(1){b=c[(c[a+16>>2]|0)+116>>2]|0;if(!b)break;else a=b}b=c[a>>2]&3;return (c[(c[(c[((b|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)!=(c[(c[(c[((b|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0)|0}function ii(a,b){a=a|0;b=b|0;return ((c[c[a>>2]>>2]|0)>>>4)-((c[c[b>>2]>>2]|0)>>>4)|0}function ji(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=c[a+16>>2]|0;g=f+220|0;h=c[g>>2]|0;if((h|0)>=2){i=f+216|0;a=0;e=0;while(1){if((e|0)>=(h|0))break;d=c[(c[i>>2]|0)+(e<<2)>>2]|0;if(a|0)c[(c[a+16>>2]|0)+164>>2]=d;j=c[d+16>>2]|0;c[j+168>>2]=a;a=d;d=j;while(1){d=c[d+164>>2]|0;if(!d)break;a=d;d=c[d+16>>2]|0}e=e+1|0}c[g>>2]=1;c[f+192>>2]=c[c[f+216>>2]>>2];b[f+236>>1]=c[45972];b[f+238>>1]=c[45973]}return}function ki(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=c[45971]|0;j=i+16|0;f=c[j>>2]|0;g=0;h=b[f+236>>1]|0;while(1){if((h|0)>=(b[f+238>>1]|0))break;d=c[f+196>>2]|0;if(!(a[d+(h<<6)+49>>0]|0)){e=Di(i,h)|0;d=c[j>>2]|0;f=c[d+196>>2]|0;c[f+(h<<6)+52>>2]=e;a[f+(h<<6)+49>>0]=1}else{e=c[d+(h<<6)+52>>2]|0;d=f}g=e+g|0;h=h+1|0;f=d}return g|0}function li(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0;a=c[a+16>>2]|0;g=b[a+238>>1]|0;i=a+196|0;a=b[a+236>>1]|0;while(1){if((a|0)>(g|0))break;f=c[i>>2]|0;e=c[f+(a<<6)>>2]|0;f=f+(a<<6)+4|0;d=0;while(1){if((d|0)>=(e|0))break;j=c[(c[(c[f>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;h[j+16>>3]=+(c[j+236>>2]|0);d=d+1|0}a=a+1|0}return}function mi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+16|0;m=r;n=d+16|0;o=GL(c[(c[n>>2]|0)+232>>2]|0)|0;j=c[n>>2]|0;f=j+192|0;g=f;while(1){g=c[g>>2]|0;if(!g)break;g=c[g+16>>2]|0;a[g+157>>0]=0;g=g+164|0}h=b[j+238>>1]|0;i=j+196|0;g=b[j+236>>1]|0;while(1){if((g|0)>(h|0))break;c[(c[i>>2]|0)+(g<<6)>>2]=0;g=g+1|0}i=(e|0)==0;while(1){g=c[f>>2]|0;if(!g)break;h=g+16|0;f=c[h>>2]|0;if((c[c[(i?f+172|0:f+180|0)>>2]>>2]|0)==0?(k=f+157|0,(a[k>>0]|0)==0):0){a[k>>0]=1;IL(o,g);while(1){f=JL(o)|0;if(!f)break;if((a[(c[f+16>>2]|0)+159>>0]|0)==7){kl(d,f,e,o);continue}else{Bi(d,f);Ci(o,f,e);continue}}f=c[h>>2]|0}f=f+164|0}if(JL(o)|0)Pw(1,86217,m)|0;f=c[n>>2]|0;j=b[f+236>>1]|0;while(1){if((j|0)>(b[f+238>>1]|0))break;a[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(j<<6)+49>>0]=0;if((c[f+116>>2]&1|0)!=0?(p=c[f+196>>2]|0,q=c[p+(j<<6)>>2]|0,(q|0)>0):0){g=c[p+(j<<6)+4>>2]|0;h=q+-1|0;i=(h|0)/2|0;f=0;while(1){if((f|0)>(i|0))break;vi(c[g+(f<<2)>>2]|0,c[g+(h-f<<2)>>2]|0);f=f+1|0}f=c[n>>2]|0}j=j+1|0}if((ig(d)|0)==(d|0)?(ki(0)|0)>0:0)pi(d,0);HL(o);l=r;return}function ni(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|0;d=c[n>>2]|0;f=b[d+236>>1]|0;e=b[d+238>>1]|0;l=e<<16>>16;m=d+196|0;g=f;while(1){if((g|0)>(l|0))break;k=c[m>>2]|0;j=c[k+(g<<6)>>2]|0;k=k+(g<<6)+4|0;i=0;while(1){if((i|0)>=(j|0))break;o=c[(c[(c[k>>2]|0)+(i<<2)>>2]|0)+16>>2]|0;c[o+236>>2]=~~+h[o+16>>3];i=i+1|0}g=g+1|0}while(1){if((f|0)>(e<<16>>16|0))break;a[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(f<<6)+49>>0]=0;o=c[d+196>>2]|0;_0(c[o+(f<<6)+4>>2]|0,c[o+(f<<6)>>2]|0,4,62);o=c[n>>2]|0;f=f+1|0;e=b[o+238>>1]|0;d=o}return}function oi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=((d|0)%4|0|0)<2&1;e=c[a+16>>2]|0;if(!(d&1)){d=b[e+236>>1]|0;f=1;e=b[e+238>>1]|0;d=(d<<16>>16<=(b[(c[(c[45971]|0)+16>>2]|0)+236>>1]|0)&1)+(d<<16>>16)|0}else{d=b[e+238>>1]|0;f=-1;e=b[e+236>>1]|0;d=((d<<16>>16>=(b[(c[(c[45971]|0)+16>>2]|0)+238>>1]|0))<<31>>31)+(d<<16>>16)|0}e=f+e|0;while(1){if((d|0)==(e|0))break;yi(a,d,g,(xi(a,d,d-f|0)|0)&255);d=d+f|0}pi(a,g^1);return}function pi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;g=c[k>>2]|0;i=b[g+236>>1]|0;j=b[g+238>>1]|0;h=g+196|0;f=i<<16>>16;while(1){if((f|0)>(j|0)){h=i;break}a[(c[h>>2]|0)+(f<<6)+48>>0]=1;f=f+1|0}while(1){f=0;h=h<<16>>16;while(1){if((h|0)>(b[g+238>>1]|0))break;if(a[(c[g+196>>2]|0)+(h<<6)+48>>0]|0){f=(wi(d,h,e)|0)+f|0;g=c[k>>2]|0}h=h+1|0}if((f|0)<=0)break;h=b[g+236>>1]|0}return}function qi(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=d+16|0;e=c[o>>2]|0;n=b[e+238>>1]|0;a:while(1){if((n|0)<(b[e+236>>1]|0)){e=16;break}f=c[e+196>>2]|0;a[f+(n<<6)+48>>0]=0;p=(n|0)>0;q=n+1|0;g=0;b:while(1){l=(c[f+(n<<6)>>2]|0)+-1|0;m=f+(n<<6)+4|0;k=f+(q<<6)|0;while(1){if((g|0)>=(l|0))break b;j=c[m>>2]|0;i=c[j+(g<<2)>>2]|0;g=g+1|0;j=c[j+(g<<2)>>2]|0;if((c[(c[i+16>>2]|0)+236>>2]|0)>=(c[(c[j+16>>2]|0)+236>>2]|0)){e=7;break a}if(ri(d,i,j)|0)continue;if(p){f=si(i,j)|0;h=si(j,i)|0}else{f=0;h=0}if((c[k>>2]|0)>0){f=(ti(i,j)|0)+f|0;h=(ti(j,i)|0)+h|0}if((h|0)<=(f|0))break}ui(d,n,i,j);e=c[o>>2]|0;f=c[e+196>>2]|0}n=n+-1|0}if((e|0)==7)qa(86168,85686,721,86194);else if((e|0)==16)return}function ri(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[d+16>>2]|0;i=c[j+212>>2]|0;f=c[e+16>>2]|0;g=c[f+212>>2]|0;h=(i|0)!=(g|0);do if(!(a[190689]|0))if((g|0)==0|((i|0)==0|h^1))k=9;else{if((a[j+159>>0]|0)==7?(a[j+156>>0]|0)==1:0){b=0;break}if((a[f+159>>0]|0)==7?(a[f+156>>0]|0)==1:0){b=0;break}b=1}else if(h)b=1;else k=9;while(0);if((k|0)==9){f=c[b+16>>2]|0;b=c[(c[f+196>>2]|0)+(c[j+232>>2]<<6)+56>>2]|0;if(!b)b=0;else{j=(c[f+116>>2]&1|0)==0;k=O(c[b+4>>2]|0,c[(c[(j?d:e)+16>>2]|0)+284>>2]|0)|0;b=a[(c[b+8>>2]|0)+((c[(c[(j?e:d)+16>>2]|0)+284>>2]|0)+k)>>0]|0}}return b|0}function si(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+16|0;j=c[(c[d+16>>2]|0)+172>>2]|0;d=0;while(1){a=c[j>>2]|0;if(!a)break;i=c[a+16>>2]|0;k=b[i+154>>1]|0;g=c[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;i=i+16|0;f=c[(c[l>>2]|0)+172>>2]|0;a=d;while(1){d=c[f>>2]|0;if(!d)break;e=(c[(c[(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-g|0;if((e|0)<=0){if((e|0)==0?(m=c[d+16>>2]|0,+h[m+16>>3]>+h[i>>3]):0){d=m;n=9}}else{d=c[d+16>>2]|0;n=9}if((n|0)==9){n=0;a=(O(b[d+154>>1]|0,k)|0)+a|0}f=f+4|0}j=j+4|0;d=a}return d|0}function ti(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+16|0;j=c[(c[d+16>>2]|0)+180>>2]|0;d=0;while(1){a=c[j>>2]|0;if(!a)break;i=c[a+16>>2]|0;k=b[i+154>>1]|0;g=c[(c[(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;i=i+56|0;f=c[(c[l>>2]|0)+180>>2]|0;a=d;while(1){d=c[f>>2]|0;if(!d)break;e=(c[(c[(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-g|0;if((e|0)<=0){if((e|0)==0?(m=c[d+16>>2]|0,+h[m+56>>3]>+h[i>>3]):0){d=m;n=9}}else{d=c[d+16>>2]|0;n=9}if((n|0)==9){n=0;a=(O(b[d+154>>1]|0,k)|0)+a|0}f=f+4|0}j=j+4|0;d=a}return d|0}function ui(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=a[(c[e+16>>2]|0)+156>>0]|0;if(i<<24>>24!=(a[(c[f+16>>2]|0)+156>>0]|0)){j=b+16|0;l=c[(c[j>>2]|0)+196>>2]|0;k=c[l+(d<<6)>>2]|0;l=l+(d<<6)+4|0;b=0;g=0;h=0;while(1){if((b|0)>=(k|0))break;o=(a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)==0;b=b+1|0;g=g+(o&1)|0;h=h+((o^1)&1)|0}i=i<<24>>24==0;h=(g|0)<(h|0)?(i?e:f):i?f:e;i=0;b=0;while(1){if((b|0)>=(k|0))break;i=(c[(c[l>>2]|0)+(b<<2)>>2]|0)==(h|0)?b:i;b=b+1|0}o=(a[(c[h+16>>2]|0)+156>>0]|0)==0&1;n=0;g=i;while(1){b=g+-1|0;if((g|0)<=0){m=0;b=i;break}if((a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0)){m=0;b=i;break}n=n+1|0;g=b}while(1){b=b+1|0;if((b|0)>=(k|0))break;if((a[(c[(c[(c[l>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0))break;m=m+1|0}vi(e,f);j=c[(c[j>>2]|0)+196>>2]|0;k=c[j+(d<<6)>>2]|0;j=j+(d<<6)+4|0;b=0;while(1){if((b|0)>=(k|0)){h=0;g=i;break}i=(c[(c[j>>2]|0)+(b<<2)>>2]|0)==(h|0)?b:i;b=b+1|0}while(1){b=g+-1|0;if((g|0)<=0){g=0;b=i;break}if((a[(c[(c[(c[j>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0)){g=0;b=i;break}h=h+1|0;g=b}while(1){b=b+1|0;if((b|0)>=(k|0))break;if((a[(c[(c[(c[j>>2]|0)+(b<<2)>>2]|0)+16>>2]|0)+156>>0]|0)!=(o|0))break;g=g+1|0}d=h-g|0;o=n-m|0;if((((d|0)>-1?d:0-d|0)|0)>(((o|0)>-1?o:0-o|0)|0))vi(e,f)}return}function vi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+16>>2]|0;e=c[f+232>>2]|0;f=f+236|0;d=c[f>>2]|0;g=b+16|0;h=c[(c[g>>2]|0)+236>>2]|0;c[f>>2]=h;f=(c[45971]|0)+16|0;c[(c[(c[(c[f>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(h<<2)>>2]=a;c[(c[g>>2]|0)+236>>2]=d;c[(c[(c[(c[f>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(d<<2)>>2]=b;return}function wi(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=d+16|0;n=c[(c[q>>2]|0)+196>>2]|0;a[n+(e<<6)+48>>0]=0;r=(e|0)>0;s=e+1|0;o=(f|0)!=0;p=e+-1|0;g=0;i=0;f=n;a:while(1){l=(c[f+(e<<6)>>2]|0)+-1|0;m=f+(e<<6)+4|0;h=f+(s<<6)|0;n=g;while(1){if((n|0)>=(l|0)){f=17;break a}k=c[m>>2]|0;j=c[k+(n<<2)>>2]|0;n=n+1|0;k=c[k+(n<<2)>>2]|0;if((c[(c[j+16>>2]|0)+236>>2]|0)>=(c[(c[k+16>>2]|0)+236>>2]|0)){f=5;break a}if(ri(d,j,k)|0)continue;if(r){f=si(j,k)|0;g=si(k,j)|0}else{f=0;g=0}if((c[h>>2]|0)>0){f=(ti(j,k)|0)+f|0;g=(ti(k,j)|0)+g|0}if((f|0)>(g|0))break;if((f|0)==(g|0)&(o&(f|0)>0)){f=g;break}}vi(j,k);i=f-g+i|0;g=c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0;a[g+(e<<6)+49>>0]=0;h=c[q>>2]|0;f=c[h+196>>2]|0;a[f+(e<<6)+48>>0]=1;if((b[h+236>>1]|0)<(e|0)){a[g+(p<<6)+49>>0]=0;a[f+(p<<6)+48>>0]=1}if((b[h+238>>1]|0)<=(e|0)){g=n;continue}a[g+(s<<6)+49>>0]=0;a[f+(s<<6)+48>>0]=1;g=n}if((f|0)==5)qa(86168,85686,770,86202);else if((f|0)==17)return i|0;return 0}function xi(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=c[45969]|0;q=a+16|0;a=c[(c[q>>2]|0)+196>>2]|0;r=c[a+(e<<6)+4>>2]|0;n=(f|0)>(e|0);o=p+4|0;m=0;while(1){f=c[a+(e<<6)>>2]|0;if((m|0)>=(f|0)){a=0;j=0;break}l=(c[r+(m<<2)>>2]|0)+16|0;a=c[l>>2]|0;a:do if(n){k=c[a+180>>2]|0;a=0;j=0;while(1){f=c[k+(j<<2)>>2]|0;if(!f)break a;g=c[f+16>>2]|0;if((b[g+154>>1]|0)>0){c[p+(a<<2)>>2]=c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|d[g+88>>0];a=a+1|0}j=j+1|0}}else{k=c[a+172>>2]|0;j=0;a=0;while(1){f=c[k+(j<<2)>>2]|0;if(!f)break a;g=c[f+16>>2]|0;if((b[g+154>>1]|0)>0){c[p+(a<<2)>>2]=c[(c[(c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+236>>2]<<8|d[g+48>>0];a=a+1|0}j=j+1|0}}while(0);b:do switch(a|0){case 0:{i=-1.0;break}case 1:{i=+(c[p>>2]|0);break}case 2:{i=+(((c[o>>2]|0)+(c[p>>2]|0)|0)/2|0|0);break}default:{_0(p,a,4,60);f=(a|0)/2|0;if(a&1|0){i=+(c[p+(f<<2)>>2]|0);break b}j=c[p+(f<<2)>>2]|0;g=(c[p+(a+-1<<2)>>2]|0)-j|0;a=c[p+(f+-1<<2)>>2]|0;f=a-(c[p>>2]|0)|0;if((f|0)==(g|0)){i=+((a+j|0)/2|0|0);break b}else{i=+(((O(f,j)|0)+(O(a,g)|0)|0)/(f+g|0)|0|0);break b}}}while(0);h[(c[l>>2]|0)+240>>3]=i;m=m+1|0;a=c[(c[q>>2]|0)+196>>2]|0}while(1){if((j|0)>=(f|0))break;g=c[r+(j<<2)>>2]|0;p=c[g+16>>2]|0;if((c[p+184>>2]|0)==0?(c[p+176>>2]|0)==0:0){a=(zi(g)|0|a&255)&255;f=c[(c[(c[q>>2]|0)+196>>2]|0)+(e<<6)>>2]|0}j=j+1|0}return a|0}function yi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0;o=c[(c[b+16>>2]|0)+196>>2]|0;s=c[o+(d<<6)+4>>2]|0;o=c[o+(d<<6)>>2]|0;q=(e|0)!=0;p=(f|e|0)==0;f=0;e=o;o=s+(o<<2)|0;while(1){n=e+-1|0;if((e|0)>0)e=s;else break;a:while(1){b:while(1){if(e>>>0>=o>>>0)break a;while(1){if(e>>>0>=o>>>0)break a;l=c[e>>2]|0;m=+h[(c[l+16>>2]|0)+240>>3];if(!(m<0.0))break;e=e+4|0}k=0;while(1){g=k<<24>>24==0;while(1){e=e+4|0;if(e>>>0>=o>>>0)break a;if(g){g=11;break}i=c[e>>2]|0;if(!(c[(c[i+16>>2]|0)+212>>2]|0)){g=13;break}}if((g|0)==11){i=c[e>>2]|0;j=i}else if((g|0)==13)j=i;if(ri(b,l,j)|0)continue b;g=c[i+16>>2]|0;if(+h[g+240>>3]>=0.0)break;k=(c[g+212>>2]|0)==0?k:1}g=~~m;k=~~+h[(c[i+16>>2]|0)+240>>3];if((g|0)>(k|0)|q&(g|0)==(k|0))break}vi(l,j);f=f+1|0}e=n;o=p?o+-4|0:o}if(f|0?(r=c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0,a[r+(d<<6)+49>>0]=0,(d|0)>0):0)a[r+(d+-1<<6)+49>>0]=0;return}function zi(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;g=c[a+16>>2]|0;if((c[g+200>>2]|0)>0){f=c[g+196>>2]|0;a=c[f>>2]|0;a=c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0;d=1;while(1){e=c[f+(d<<2)>>2]|0;if(!e)break;e=c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0;a=(c[(c[e+16>>2]|0)+236>>2]|0)>(c[(c[a+16>>2]|0)+236>>2]|0)?e:a;d=d+1|0}b=+h[(c[a+16>>2]|0)+240>>3];if(!(b>=0.0))a=1;else{h[g+240>>3]=b+1.0;a=0}}else if((c[g+192>>2]|0)>0){e=c[g+188>>2]|0;d=c[e>>2]|0;a=1;d=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;while(1){f=c[e+(a<<2)>>2]|0;if(!f)break;f=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;a=a+1|0;d=(c[(c[f+16>>2]|0)+236>>2]|0)<(c[(c[d+16>>2]|0)+236>>2]|0)?f:d}b=+h[(c[d+16>>2]|0)+240>>3];if(b>0.0){h[g+240>>3]=b+-1.0;a=0}else a=1}else a=1;return a|0}function Ai(a,b){a=a|0;b=b|0;return (c[(c[(c[a>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[b>>2]|0)+16>>2]|0)+236>>2]|0)|0}function Bi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+96|0;o=p+64|0;n=p+48|0;h=p+24|0;f=p;j=d+16|0;k=c[(c[j>>2]|0)+232>>2]|0;m=a+16|0;e=c[(c[m>>2]|0)+196>>2]|0;i=c[e+(k<<6)>>2]|0;do if((c[e+(k<<6)+8>>2]|0)>=1){c[(c[e+(k<<6)+4>>2]|0)+(i<<2)>>2]=d;c[(c[j>>2]|0)+236>>2]=i;a=c[m>>2]|0;f=c[a+196>>2]|0;e=f+(k<<6)|0;g=c[e>>2]|0;c[e>>2]=g+1;if((g|0)>=(c[f+(k<<6)+8>>2]|0))qa(86282,85686,1346,86318);g=c[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]|0;if((i|0)>(g|0)){m=ry(d)|0;n=c[(c[j>>2]|0)+236>>2]|0;o=c[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]|0;c[h>>2]=1359;c[h+4>>2]=m;c[h+8>>2]=n;c[h+12>>2]=k;c[h+16>>2]=o;Pw(1,86334,h)|0;break}e=b[a+236>>1]|0;a=b[a+238>>1]|0;if((k|0)<(e|0)|(k|0)>(a<<16>>16|0)){c[n>>2]=1364;c[n+4>>2]=k;c[n+8>>2]=e;c[n+12>>2]=a<<16>>16;Pw(1,86407,n)|0;break}if(((c[f+(k<<6)+4>>2]|0)+(i<<2)|0)>>>0>((c[f+(k<<6)+12>>2]|0)+(g<<2)|0)>>>0){i=ry(d)|0;n=c[(c[m>>2]|0)+196>>2]|0;m=(c[n+(k<<6)+4>>2]|0)+(c[(c[j>>2]|0)+236>>2]<<2)|0;n=(c[n+(k<<6)+12>>2]|0)+(c[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(k<<6)+8>>2]<<2)|0;c[o>>2]=1370;c[o+4>>2]=k;c[o+8>>2]=i;c[o+12>>2]=m;c[o+16>>2]=k;c[o+20>>2]=k;c[o+24>>2]=n;Pw(1,86468,o)|0}}else{n=ry(a)|0;o=ry(d)|0;c[f>>2]=1339;c[f+4>>2]=n;c[f+8>>2]=o;c[f+12>>2]=k;c[f+16>>2]=i;Pw(1,86227,f)|0}while(0);l=p;return}function Ci(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=d+16|0;a:do if(!e){g=0;while(1){d=c[h>>2]|0;if((g|0)>=(c[d+184>>2]|0))break a;d=c[(c[d+180>>2]|0)+(g<<2)>>2]|0;e=d+-48|0;f=(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;IL(b,c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)}g=g+1|0}}else{g=0;while(1){d=c[h>>2]|0;if((g|0)>=(c[d+176>>2]|0))break a;d=c[(c[d+172>>2]|0)+(g<<2)>>2]|0;e=d+48|0;f=(c[(c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)+16>>2]|0)+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;IL(b,c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)}g=g+1|0}}while(0);return}function Di(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;u=v;g=d+16|0;f=c[(c[g>>2]|0)+196>>2]|0;s=c[f+(e<<6)+4>>2]|0;t=e+1|0;d=c[(c[(c[(c[45971]|0)+16>>2]|0)+196>>2]|0)+(t<<6)>>2]|0;if((c[45975]|0)>(d|0))q=c[45976]|0;else{d=d+1|0;c[45975]=d;f=c[45976]|0;if(!f)d=vH(d<<2)|0;else d=xH(f,d<<2)|0;c[45976]=d;f=c[(c[g>>2]|0)+196>>2]|0;q=d}r=f+(t<<6)|0;d=0;while(1){if((d|0)>=(c[r>>2]|0))break;c[q+(d<<2)>>2]=0;d=d+1|0}p=f+(e<<6)|0;o=0;h=0;d=0;j=q;while(1){k=c[p>>2]|0;if((o|0)>=(k|0))break;n=c[(c[(c[s+(o<<2)>>2]|0)+16>>2]|0)+180>>2]|0;a:do if((h|0)>0){m=0;while(1){g=c[n+(m<<2)>>2]|0;if(!g)break a;k=g+16|0;i=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;while(1){g=i+1|0;if((i|0)>=(h|0))break;i=g;d=(O(c[j+(g<<2)>>2]|0,b[(c[k>>2]|0)+154>>1]|0)|0)+d|0}m=m+1|0}}while(0);i=0;while(1){g=c[n+(i<<2)>>2]|0;if(!g)break;j=c[(c[(c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0;m=q+(j<<2)|0;c[m>>2]=(c[m>>2]|0)+(b[(c[g+16>>2]|0)+154>>1]|0);h=(j|0)>(h|0)?j:h;i=i+1|0;j=q}o=o+1|0}i=f+(e<<6)+4|0;h=0;while(1){if((h|0)>=(k|0))break;g=c[(c[(c[i>>2]|0)+(h<<2)>>2]|0)+16>>2]|0;if(a[g+145>>0]|0){e=g+180|0;c[u>>2]=c[e>>2];c[u+4>>2]=c[e+4>>2];d=(Ei(u,1)|0)+d|0}h=h+1|0}i=c[r>>2]|0;h=f+(t<<6)+4|0;g=0;while(1){if((g|0)>=(i|0))break;f=c[(c[(c[h>>2]|0)+(g<<2)>>2]|0)+16>>2]|0;if(a[f+145>>0]|0){t=f+172|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];d=(Ei(u,-1)|0)+d|0}g=g+1|0}l=v;return d|0}function Ei(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;n=(d|0)<1;l=c[a>>2]|0;d=0;a=0;a:while(1){m=c[l+(d<<2)>>2]|0;if(!m)break;d=d+1|0;if(n){j=m+48|0;k=m+16|0;i=d;while(1){e=c[l+(i<<2)>>2]|0;if(!e)continue a;f=c[e+16>>2]|0;g=c[k>>2]|0;if((+h[f+56>>3]-+h[g+56>>3])*+((c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[((c[m>>2]&3|0)==3?m:j)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)a=(O(b[f+154>>1]|0,b[g+154>>1]|0)|0)+a|0;i=i+1|0}}else{j=m+-48|0;k=m+16|0;i=d;while(1){e=c[l+(i<<2)>>2]|0;if(!e)continue a;f=c[e+16>>2]|0;g=c[k>>2]|0;if((+h[f+16>>3]-+h[g+16>>3])*+((c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)-(c[(c[(c[((c[m>>2]&3|0)==2?m:j)+40>>2]|0)+16>>2]|0)+236>>2]|0)|0)<0.0)a=(O(b[f+154>>1]|0,b[g+154>>1]|0)|0)+a|0;i=i+1|0}}}return a|0}function Fi(a){a=a|0;var b=0.0,d=0.0;c[45974]=8;c[46365]=24;h[22830]=.995;a=xx(a,86590)|0;if(a|0?(b=+b2(a),b>0.0):0){d=b*+(c[45974]|0);c[45974]=~~(d>1.0?d:1.0);b=b*+(c[46365]|0);c[46365]=~~(b>1.0?b:1.0)}return}function Gi(a){a=a|0;var d=0,e=0;e=(b[(c[a+16>>2]|0)+238>>1]|0)+2|0;d=uH(e<<2)|0;Ii(a,d,e,0)|0;D_(d);return}function Hi(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=a+16|0;i=uH((b[(c[h>>2]|0)+238>>1]<<2)+8|0)|0;g=Sy(a)|0;while(1){if(!g)break;f=i+(c[(c[g+16>>2]|0)+232>>2]<<2)|0;c[f>>2]=(c[f>>2]|0)+1;f=Ex(a,g)|0;while(1){if(!f)break;j=c[f>>2]&3;d=c[(c[(c[((j|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;j=c[(c[(c[((j|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;k=(d|0)>(j|0);e=k?d:j;d=k?j:d;while(1){d=d+1|0;if((d|0)>=(e|0))break;k=i+(d<<2)|0;c[k>>2]=(c[k>>2]|0)+1}f=Gx(a,f)|0}g=Ty(a,g)|0}f=uH((b[(c[h>>2]|0)+238>>1]<<6)+128|0)|0;e=c[h>>2]|0;c[e+196>>2]=f;d=b[e+236>>1]|0;while(1){if((d|0)>(b[e+238>>1]|0))break;j=i+(d<<2)|0;e=c[j>>2]|0;c[f+(d<<6)>>2]=e;c[f+(d<<6)+8>>2]=e;j=uH((c[j>>2]<<2)+4|0)|0;e=c[h>>2]|0;k=c[e+196>>2]|0;c[k+(d<<6)+4>>2]=j;c[k+(d<<6)+12>>2]=j;d=d+1|0;f=k}D_(i);return}function Ii(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0;m=a+16|0;i=1;while(1){g=c[m>>2]|0;if((i|0)>(c[g+180>>2]|0))break;l=Ii(c[(c[g+184>>2]|0)+(i<<2)>>2]|0,d,e,f)|0;i=i+1|0;f=l}a:do if((ig(a)|0)!=(a|0)){H3(d|0,0,e<<2|0)|0;g=Sy(a)|0;while(1){if(!g)break;k=g+16|0;c[d+(c[(c[k>>2]|0)+232>>2]<<2)>>2]=1;i=Ex(a,g)|0;while(1){if(!i)break;l=i+-48|0;j=c[(c[k>>2]|0)+232>>2]|0;while(1){e=j+1|0;if((j|0)>=(c[(c[(c[((c[i>>2]&3|0)==2?i:l)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;c[d+(e<<2)>>2]=1;j=e}i=Gx(a,i)|0}g=Ty(a,g)|0}g=c[m>>2]|0;i=b[g+236>>1]|0;while(1){if((i|0)>(b[g+238>>1]|0))break a;if(!(c[d+(i<<2)>>2]|0)){if(!f)f=vA(ig(a)|0,86580,1)|0;g=az(f,0,1)|0;Az(g,134365,304,1)|0;l=g+16|0;j=c[l>>2]|0;c[j+232>>2]=i;h[j+96>>3]=.5;h[j+88>>3]=.5;h[j+80>>3]=1.0;c[j+216>>2]=1;c[j+176>>2]=0;j=uH(20)|0;k=c[l>>2]|0;c[k+172>>2]=j;c[k+184>>2]=0;k=uH(20)|0;c[(c[l>>2]|0)+180>>2]=k;Xy(a,g,1)|0;g=c[m>>2]|0}i=i+1|0}}while(0);return f|0}function Ji(a){a=a|0;var b=0,d=0;Zh(a);b=a+16|0;a=1;while(1){d=c[b>>2]|0;if((a|0)>(c[d+180>>2]|0))break;Ji(c[(c[d+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}return}function Ki(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=Li(c[((b|0)==3?a:a+48|0)+40>>2]|0)|0;b=c[17308+(d*12|0)+((Li(c[((b|0)==2?a:a+-48|0)+40>>2]|0)|0)<<2)>>2]|0;a=(c[a+16>>2]|0)+156|0;c[a>>2]=O(c[a>>2]|0,b)|0;return}function Li(b){b=b|0;b=c[b+16>>2]|0;if((a[b+156>>0]|0)==1)b=2;else b=(a[b+160>>0]|0)<2&1;return b|0}function Mi(b,d){b=b|0;d=d|0;if(c[(c[b+16>>2]|0)+192>>2]|0){ll(b);Ni(b);if(a[191874]|0)zl(b);Oi(b);if(Rl(b)|0)Ni(b);Pi(b);if(fI(b,2,Qi(b)|0)|0?(Ri(b),fI(b,2,Qi(b)|0)|0):0)qa(86598,86626,134,86637);Si(b);Ti(b,d);Ui(b)}return}function Ni(d){d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;v=d+16|0;e=c[v>>2]|0;w=c[e+196>>2]|0;t=b[e+236>>1]|0;while(1){if((t|0)>(b[e+238>>1]|0))break;n=w+(t<<6)|0;o=w+(t<<6)+4|0;p=w+(t<<6)+40|0;q=w+(t<<6)+24|0;r=w+(t<<6)+32|0;s=w+(t<<6)+16|0;m=0;while(1){if((m|0)>=(c[n>>2]|0))break;l=(c[(c[o>>2]|0)+(m<<2)>>2]|0)+16|0;e=c[l>>2]|0;j=+h[e+80>>3]*.5;i=c[e+204>>2]|0;a:do if(i){g=0;while(1){f=c[i+(g<<2)>>2]|0;if(!f)break a;x=c[f>>2]&3;if((c[((x|0)==3?f:f+48|0)+40>>2]|0)==(c[((x|0)==2?f:f+-48|0)+40>>2]|0)?(u=c[(c[f+16>>2]|0)+96>>2]|0,(u|0)!=0):0){k=+h[u+32>>3]*.5;j=j>k?j:k}g=g+1|0}}while(0);if(+h[p>>3]<j){h[q>>3]=j;h[p>>3]=j}if(+h[r>>3]<j){h[s>>3]=j;h[r>>3]=j}f=c[e+212>>2]|0;if(f|0){if((f|0)==(d|0))g=0;else{g=KL(f,c[46374]|0,8,0)|0;e=c[l>>2]|0}i=c[e+232>>2]|0;f=c[f+16>>2]|0;e=f+128|0;j=j+ +(g|0);if((i|0)==(b[f+236>>1]|0)){k=+h[e>>3];h[e>>3]=k>j?k:j}e=f+120|0;if((i|0)==(b[f+238>>1]|0)){k=+h[e>>3];h[e>>3]=k>j?k:j}}m=m+1|0}t=t+1|0;e=c[v>>2]|0}m=tj(d)|0;g=c[v>>2]|0;e=b[g+238>>1]|0;h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[w+(e<<6)+16>>3];f=b[g+236>>1]|0;i=g+252|0;k=0.0;while(1){l=e+-1|0;if((e|0)<=(f|0))break;y=+h[w+(l<<6)+32>>3]+ +h[w+(e<<6)+40>>3]+ +(c[i>>2]|0);j=+h[w+(e<<6)+24>>3]+8.0+ +h[w+(l<<6)+16>>3];j=y>j?y:j;if((c[w+(l<<6)>>2]|0)>0)h[(c[(c[c[w+(l<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+j;k=k>j?k:j;e=l}b:do if((m|0)!=0?(c[g+116>>2]&1|0)!=0:0){uj(d,0);g=c[v>>2]|0;if(a[g+276>>0]|0){e=b[g+238>>1]|0;f=b[g+236>>1]|0;j=+h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];k=0.0;while(1){i=e+-1|0;if((e|0)<=(f|0))break b;z=+h[(c[(c[c[w+(i<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];y=z-j;j=z;k=k>y?k:y;e=i}}}while(0);c:do if(a[g+276>>0]|0){i=b[g+236>>1]|0;f=b[g+238>>1]|0;while(1){e=f+-1|0;if((f|0)<=(i|0))break c;if((c[w+(e<<6)>>2]|0)<=0){f=e;continue}h[(c[(c[c[w+(e<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]=+h[(c[(c[c[w+(f<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+k;f=e}}while(0);e=g+192|0;while(1){e=c[e>>2]|0;if(!e)break;e=c[e+16>>2]|0;h[e+24>>3]=+h[(c[(c[c[w+(c[e+232>>2]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];e=e+164|0}return}function Oi(a){a=a|0;var b=0,d=0,e=0;pj(a);b=(c[a+16>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;e=b+16|0;b=c[e>>2]|0;d=c[b+224>>2]|0;if(d){qj(a,d);b=c[e>>2]|0}d=c[b+228>>2]|0;if(!d)d=b;else{qj(a,d);d=c[e>>2]|0}e=c[d+204>>2]|0;if(e|0){b=0;while(1)if(!(c[e+(b<<2)>>2]|0))break;else b=b+1|0}b=d+164|0}return}function Pi(a){a=a|0;bj(a);cj(a);dj(a);ej(a);fj(a);return}function Qi(a){a=a|0;var b=0,c=0.0;b=xx(a,86826)|0;if(!b)a=2147483647;else{c=+b2(b);a=~~(c*+(ay(a)|0))}return a|0}function Ri(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=d+16|0;e=c[r>>2]|0;q=b[e+236>>1]|0;while(1){p=b[e+238>>1]|0;if((q|0)>(p|0)){s=19;break}n=c[e+196>>2]|0;o=n+(q<<6)|0;m=c[o>>2]|0;n=n+(q<<6)+4|0;l=0;f=0;a:while(1){if((l|0)>=(m|0)){s=14;break}f=c[(c[n>>2]|0)+(l<<2)>>2]|0;h=c[f+16>>2]|0;i=c[h+256>>2]|0;b:do if(i|0){g=0;while(1){j=c[i+(g<<2)>>2]|0;if(!j)break b;k=c[j>>2]&3;if((c[(c[(c[((k|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;if((c[(c[(c[((k|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;else g=g+1|0}}while(0);h=c[h+248>>2]|0;c:do if(h|0){g=0;while(1){i=c[h+(g<<2)>>2]|0;if(!i)break c;j=c[i>>2]&3;if((c[(c[(c[((j|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;if((c[(c[(c[((j|0)==2?i:i+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(q|0))break a;else g=g+1|0}}while(0);l=l+1|0}if((s|0)==14){s=0;if(f){f=c[c[n>>2]>>2]|0;e=c[c[o+(((q|0)<(p|0)?1:-1)<<6)+4>>2]>>2]|0;if(!e){s=16;break}o=uh(d)|0;p=o+16|0;a[(c[p>>2]|0)+156>>0]=2;$i(o,f,0.0,0)|0;$i(o,e,0.0,0)|0;c[(c[p>>2]|0)+232>>2]=c[(c[((c[(c[f+16>>2]|0)+232>>2]|0)<(c[(c[e+16>>2]|0)+232>>2]|0)?f:e)+16>>2]|0)+232>>2];e=c[r>>2]|0}}q=q+1|0}if((s|0)==16)qa(86734,86626,111,86737);else if((s|0)==19)return}function Si(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;a=c[a+16>>2]|0;i=c[a+196>>2]|0;e=b[a+238>>1]|0;a=b[a+236>>1]|0;while(1){if((a|0)>(e|0))break;f=c[i+(a<<6)>>2]|0;g=i+(a<<6)+4|0;d=0;while(1){if((d|0)>=(f|0))break;k=c[(c[(c[g>>2]|0)+(d<<2)>>2]|0)+16>>2]|0;j=k+232|0;h[k+16>>3]=+(c[j>>2]|0);c[j>>2]=a;d=d+1|0}a=a+1|0}return}function Ti(a,d){a=a|0;d=d|0;var e=0,f=0.0,g=0,i=0.0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0;Vi(a,a);g=a+16|0;k=c[g>>2]|0;a:do if((b[k+238>>1]|0)>0?(j=c[k+8>>2]|0,e=c[j+84>>2]|0,e|0):0){o=~~(+h[k+32>>3]-+h[k+16>>3]);m=~~(+h[k+40>>3]-+h[k+24>>3]);p=(c[k+116>>2]&1|0)==0;n=p?m:o;m=p?o:m;if((e|0)==4){e=Wi(a)|0;k=c[g>>2]|0;j=c[k+8>>2]|0}else e=(e|0)==2&1;b:do if(!(e<<24>>24)){switch(c[j+84>>2]|0){case 5:{f=+h[j+64>>3];if(f<=0.0)break a;i=f/+h[k+32>>3];l=+h[j+72>>3]/+h[k+40>>3];f=i<l?i:l;if(i>1.0&l>1.0){l=f;break b}else break a}case 1:break;default:break a}i=+h[j+16>>3];f=+(n|0)/+(m|0);if(f<i){l=1.0;f=i/f;break}else{l=f/i;f=1.0;break}}else{f=+h[j+64>>3];if(f<=0.0)break a;i=f/+(m|0);f=+h[j+72>>3]/+(n|0);if(i<1.0|f<1.0)if(i<f){l=1.0;f=f/i;break}else{l=i/f;f=1.0;break}else l=i}while(0);e=(c[k+116>>2]&1|0)==0;i=e?f:l;f=e?l:f;e=k+192|0;while(1){e=c[e>>2]|0;if(!e)break;e=c[e+16>>2]|0;p=e+16|0;l=+h[p>>3]*f;h[p>>3]=+(~~(l+(l>=0.0?.5:-.5))|0);p=e+24|0;l=+h[p>>3]*i;h[p>>3]=+(~~(l+(l>=0.0?.5:-.5))|0);e=e+164|0}Xi(a,f,i)}while(0);if(d|0)Yi(a,d);return}function Ui(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=b+16|0;b=(c[h>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;g=b+16|0;d=0;while(1){b=c[g>>2]|0;f=c[b+180>>2]|0;e=c[f+(d<<2)>>2]|0;if(!e)break;D_(c[e+16>>2]|0);D_(e);d=d+1|0}if(f){D_(f);b=c[g>>2]|0}d=c[b+172>>2]|0;if(d){D_(d);b=c[g>>2]|0}f=b+256|0;e=c[f+4>>2]|0;b=b+180|0;c[b>>2]=c[f>>2];c[b+4>>2]=e;b=c[g>>2]|0;e=b+248|0;f=c[e+4>>2]|0;b=b+172|0;c[b>>2]=c[e>>2];c[b+4>>2]=f;b=(c[g>>2]|0)+164|0}b=0;d=c[(c[h>>2]|0)+192>>2]|0;a:while(1){g=(b|0)==0;f=b+16|0;b=d;while(1){if(!b)break a;e=c[b+16>>2]|0;d=c[e+164>>2]|0;if((a[e+156>>0]|0)!=2)continue a;if(g)c[(c[h>>2]|0)+192>>2]=d;else c[(c[f>>2]|0)+164>>2]=d;D_(e);D_(b);b=d}}c[(c[(c[(c[h>>2]|0)+192>>2]|0)+16>>2]|0)+168>>2]=0;return}function Vi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=a+16|0;d=1;while(1){f=c[e>>2]|0;if((d|0)>(c[f+180>>2]|0))break;Vi(c[(c[f+184>>2]|0)+(d<<2)>>2]|0,b);d=d+1|0}_i(a,b);return}function Wi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;s=l;l=l+80|0;e=s+64|0;d=s+48|0;f=s+16|0;m=s;r=s+32|0;a=a+16|0;b=c[(c[a>>2]|0)+8>>2]|0;t=b+48|0;c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];c[f+12>>2]=c[t+12>>2];if((!(+h[f>>3]<.001)?(g=f+8|0,!(+h[g>>3]<.001)):0)?(i=b+32|0,c[m>>2]=c[i>>2],c[m+4>>2]=c[i+4>>2],c[m+8>>2]=c[i+8>>2],c[m+12>>2]=c[i+12>>2],c[d>>2]=c[f>>2],c[d+4>>2]=c[f+4>>2],c[d+8>>2]=c[f+8>>2],c[d+12>>2]=c[f+12>>2],c[e>>2]=c[i>>2],c[e+4>>2]=c[i+4>>2],c[e+8>>2]=c[i+8>>2],c[e+12>>2]=c[i+12>>2],Zi(r,d,e),c[f>>2]=c[r>>2],c[f+4>>2]=c[r+4>>2],c[f+8>>2]=c[r+8>>2],c[f+12>>2]=c[r+12>>2],c[d>>2]=c[r>>2],c[d+4>>2]=c[r+4>>2],c[d+8>>2]=c[r+8>>2],c[d+12>>2]=c[r+12>>2],c[e>>2]=c[m>>2],c[e+4>>2]=c[m+4>>2],c[e+8>>2]=c[m+8>>2],c[e+12>>2]=c[m+12>>2],Zi(f,d,e),i=c[a>>2]|0,j=+h[i+32>>3],k=+h[i+40>>3],n=+h[f>>3],o=n/j,p=+h[g>>3],q=p/k,!(o>=1.0&q>=1.0)):0){o=o<q?o:q;o=o>.5?o:.5;q=+N(+(o*k/p))*p/k;p=+N(+(o*j/n))*n/j*j;a=c[i+8>>2]|0;h[a+64>>3]=p;h[a+72>>3]=q*k;a=1}else a=0;l=s;return a|0}function Xi(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;e=a+16|0;a=1;while(1){f=c[e>>2]|0;if((a|0)>(c[f+180>>2]|0))break;Xi(c[(c[f+184>>2]|0)+(a<<2)>>2]|0,b,d);a=a+1|0}e=f+16|0;h[e>>3]=+h[e>>3]*b;e=f+24|0;h[e>>3]=+h[e>>3]*d;e=f+32|0;h[e>>3]=+h[e>>3]*b;f=f+40|0;h[f>>3]=+h[f>>3]*d;return}function Yi(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+24|0;g=m+16|0;f=m;n=c[a+16>>2]|0;e=+h[n+32>>3]-+h[n+16>>3];d=+h[n+40>>3]-+h[n+24>>3];i=e/d;if(0){n=c[15686]|0;h[f>>3]=i;h[f+8>>3]=e*.0001*d;g1(n,86650,f)|0;c[g>>2]=zk(a)|0;g1(n,86675,g)|0}d=+h[b>>3];do if(!(i>d*1.1)){a=b+24|0;if(!(i<=d*.8)){c[a>>2]=0;k=9;break}c[a>>2]=-1;if(0){E1(86685,34,1,c[15686]|0)|0;k=9}}else{c[b+24>>2]=~~(d*+((c[b+20>>2]|0)-(c[b+16>>2]|0)|0)/i);k=9}while(0);if((k|0)==9?0:0){n=c[15686]|0;c[j>>2]=c[b+24>>2];g1(n,86720,j)|0}l=m;return}function Zi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function _i(d,e){d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;s=(ig(d)|0)==(d|0);v=d+16|0;w=c[v>>2]|0;a:do if(s){f=b[w+236>>1]|0;d=b[w+238>>1]|0;q=d<<16>>16;r=w+196|0;s=w+196|0;p=f<<16>>16;i=-2147483647.0;g=2147483647.0;while(1){if((p|0)>(q|0))break;j=c[r>>2]|0;o=c[j+(p<<6)>>2]|0;if((o|0)!=0?(t=c[j+(p<<6)+4>>2]|0,u=c[t>>2]|0,(u|0)!=0):0){l=1;j=u;while(1){j=c[j+16>>2]|0;k=a[j+156>>0]|0;if(!((l|0)<(o|0)&k<<24>>24!=0))break;j=c[t+(l<<2)>>2]|0;l=l+1|0}if(!(k<<24>>24)){m=+h[j+16>>3]-+h[j+88>>3];n=g<m;l=c[(c[s>>2]|0)+(p<<6)+4>>2]|0;k=o+-2|0;j=o+-1|0;while(1){j=c[(c[l+(j<<2)>>2]|0)+16>>2]|0;if(!(a[j+156>>0]|0))break;else{j=k;k=k+-1|0}}x=+h[j+96>>3]+ +h[j+16>>3];i=i>x?i:x;g=n?g:m}}p=p+1|0}k=c[w+180>>2]|0;l=w+184|0;j=1;while(1){if((j|0)>(k|0))break a;u=c[(c[(c[l>>2]|0)+(j<<2)>>2]|0)+16>>2]|0;x=+h[u+16>>3]+-8.0;m=+h[u+32>>3]+8.0;j=j+1|0;i=i>m?i:m;g=g<x?g:x}}else{i=+(c[(c[(c[w+260>>2]|0)+16>>2]|0)+232>>2]|0);g=+(c[(c[(c[w+256>>2]|0)+16>>2]|0)+232>>2]|0);f=b[w+236>>1]|0;d=b[w+238>>1]|0}while(0);e=c[(c[e+16>>2]|0)+196>>2]|0;m=+h[(c[(c[c[e+(d<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]-+h[w+120>>3];x=+h[w+128>>3]+ +h[(c[(c[c[e+(f<<16>>16<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3];h[w+16>>3]=g;h[w+24>>3]=m;e=c[v>>2]|0;h[e+32>>3]=i;h[e+40>>3]=x;return}function $i(a,d,e,f){a=a|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0;i=uH(96)|0;j=i+48|0;c[j>>2]=c[j>>2]|3;c[i>>2]=c[i>>2]&-4|2;g=uH(176)|0;h=i+16|0;c[h>>2]=g;c[((c[i>>2]&3|0)==3?i:j)+40>>2]=a;c[((c[i>>2]&3|0)==2?i:i+-48|0)+40>>2]=d;if(e>65535.0){aj(e);e=65535.0;g=c[h>>2]|0}b[g+170>>1]=~~(e+(e>=0.0?.5:-.5));c[g+156>>2]=f;ih(i)|0;return i|0}function aj(a){a=+a;var b=0,d=0;b=l;l=l+16|0;d=b;h[d>>3]=a;c[d+8>>2]=65535;Pw(1,86750,d)|0;l=b;return}function bj(a){a=a|0;var b=0,d=0,e=0,f=0;a=(c[a+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if(!a)break;f=a+16|0;e=c[f>>2]|0;a=e+172|0;d=c[a+4>>2]|0;e=e+248|0;c[e>>2]=c[a>>2];c[e+4>>2]=d;e=c[f>>2]|0;d=e+180|0;a=c[d+4>>2]|0;e=e+256|0;c[e>>2]=c[d>>2];c[e+4>>2]=a;e=c[f>>2]|0;a=c[e+180>>2]|0;d=0;while(1)if(!(c[a+(d<<2)>>2]|0))break;else d=d+1|0;b=c[e+172>>2]|0;a=0;while(1)if(!(c[b+(a<<2)>>2]|0))break;else a=a+1|0;c[e+176>>2]=0;a=uH((a+d<<2)+16|0)|0;e=c[f>>2]|0;c[e+172>>2]=a;c[e+184>>2]=0;e=uH(16)|0;a=c[f>>2]|0;c[a+180>>2]=e;a=a+164|0}return}function cj(d){d=d|0;var f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;z=l;l=l+16|0;w=z;x=d+16|0;u=c[x>>2]|0;y=c[u+196>>2]|0;d=(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1)!=0;v=c[u+248>>2]|0;c[w>>2]=v;c[w+4>>2]=d?5:v;v=b[u+236>>1]|0;d=u;while(1){if((v|0)>(b[d+238>>1]|0))break;r=y+(v<<6)+4|0;c[(c[(c[c[r>>2]>>2]|0)+16>>2]|0)+232>>2]=0;s=y+(v<<6)|0;t=+(c[w+((v&1)<<2)>>2]|0);p=0.0;k=0;a:while(1){if((k|0)>=(c[s>>2]|0))break;f=c[r>>2]|0;m=c[f+(k<<2)>>2]|0;u=m+16|0;d=c[u>>2]|0;i=+h[d+96>>3];h[d+240>>3]=i;if((c[d+208>>2]|0)>0){j=0;f=0;while(1){g=c[(c[d+204>>2]|0)+(j<<2)>>2]|0;if(!g)break;q=c[g>>2]&3;if((c[((q|0)==3?g:g+48|0)+40>>2]|0)==(c[((q|0)==2?g:g+-48|0)+40>>2]|0)){f=(XK(g)|0)+f|0;d=c[u>>2]|0}j=j+1|0}q=d+96|0;i=+h[q>>3]+ +(f|0);h[q>>3]=i;f=c[r>>2]|0}q=k+1|0;f=c[f+(q<<2)>>2]|0;if(f){o=f+16|0;i=i+t+ +h[(c[o>>2]|0)+88>>3];$i(m,f,i,0)|0;d=~~(i+p);c[(c[o>>2]|0)+232>>2]=d;p=+(d|0);d=c[u>>2]|0}f=c[d+112>>2]|0;if(f){j=c[d+256>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;d=(c[(c[(c[((c[k>>2]&3|0)==2?k:k+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0)>(c[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+236>>2]|0);g=d?j:k;j=d?k:j;k=f+16|0;d=c[k>>2]|0;i=+((O(c[(c[x>>2]|0)+248>>2]|0,e[d+170>>1]|0)|0)/2|0|0);o=c[g>>2]&3;f=c[((o|0)==2?g:g+-48|0)+40>>2]|0;g=c[((o|0)==3?g:g+48|0)+40>>2]|0;if(!(nj(g,f)|0))$i(f,g,+(~~(+h[(c[f+16>>2]|0)+96>>3]+i+ +h[(c[g+16>>2]|0)+88>>3])|0),c[d+156>>2]|0)|0;d=c[j>>2]&3;f=c[((d|0)==3?j:j+48|0)+40>>2]|0;d=c[((d|0)==2?j:j+-48|0)+40>>2]|0;if(!(nj(d,f)|0)){$i(f,d,+(~~(+h[(c[f+16>>2]|0)+96>>3]+i+ +h[(c[d+16>>2]|0)+88>>3])|0),c[(c[k>>2]|0)+156>>2]|0)|0;o=0}else o=0}else o=0;while(1){d=c[u>>2]|0;if((o|0)>=(c[d+192>>2]|0)){k=q;continue a}m=c[(c[d+188>>2]|0)+(o<<2)>>2]|0;k=c[m>>2]&3;g=c[((k|0)==3?m:m+48|0)+40>>2]|0;k=c[((k|0)==2?m:m+-48|0)+40>>2]|0;j=(c[(c[g+16>>2]|0)+236>>2]|0)<(c[(c[k+16>>2]|0)+236>>2]|0);f=j?g:k;g=j?k:g;i=+h[(c[g+16>>2]|0)+88>>3]+ +h[(c[f+16>>2]|0)+96>>3];k=m+16|0;j=~~(i+ +(O(c[(c[x>>2]|0)+248>>2]|0,e[(c[k>>2]|0)+170>>1]|0)|0));n=fh(f,g)|0;if(!n){d=c[k>>2]|0;if(!(c[d+96>>2]|0))$i(f,g,+(j|0),c[d+156>>2]|0)|0}else{A=+(j|0);d=c[k>>2]|0;B=+h[d+136>>3];i=i+ +(c[(c[x>>2]|0)+248>>2]|0)+ +(~~(B+(B>=0.0?.5:-.5))|0);f=~~(i<A?A:i);if((f|0)>65535){aj(+(f|0));f=65535;d=c[k>>2]|0}k=c[n+16>>2]|0;j=k+170|0;g=e[j>>1]|0;b[j>>1]=(f|0)<(g|0)?g:f;k=k+156|0;c[k>>2]=c[(c[((c[k>>2]|0)>(c[d+156>>2]|0)?n:m)+16>>2]|0)+156>>2]}o=o+1|0}}v=v+1|0;d=c[x>>2]|0}l=z;return}function dj(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;d=(c[b+16>>2]|0)+192|0;while(1){d=c[d>>2]|0;if(!d)break;g=d+16|0;d=c[g>>2]|0;e=c[d+256>>2]|0;a:do if(e){f=0;while(1){e=c[e+(f<<2)>>2]|0;if(!e)break a;n=uh(b)|0;d=n+16|0;a[(c[d>>2]|0)+156>>0]=2;l=e+16|0;k=c[l>>2]|0;i=~~(+h[k+56>>3]-+h[k+16>>3]);m=(i|0)>0;j=m?0:0-i|0;i=m?i:0;m=e+48|0;$i(n,c[((c[e>>2]&3|0)==3?e:m)+40>>2]|0,+(i+1|0),c[k+156>>2]|0)|0;k=e+-48|0;$i(n,c[((c[e>>2]&3|0)==2?e:k)+40>>2]|0,+(j+1|0),c[(c[l>>2]|0)+156>>2]|0)|0;l=c[e>>2]&3;i=(c[(c[(c[((l|0)==3?e:m)+40>>2]|0)+16>>2]|0)+232>>2]|0)-i|0;e=(c[(c[(c[((l|0)==2?e:k)+40>>2]|0)+16>>2]|0)+232>>2]|0)-j|0;c[(c[d>>2]|0)+232>>2]=((i|0)<(e|0)?i:e)+-1;d=c[g>>2]|0;f=f+1|0;e=c[d+256>>2]|0}}while(0);d=d+164|0}return}function ej(a){a=a|0;if((c[(c[a+16>>2]|0)+180>>2]|0)>0){ij(a);jj(a);kj(a);lj(a)}return}function fj(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;e=a+16|0;f=c[(c[e>>2]|0)+8>>2]|0;if((c[f+84>>2]|0)==3?(b=+h[f+64>>3],d=+h[f+72>>3],!(d*b<=1.0)):0){gj(a);f=c[e>>2]|0;d=(c[f+116>>2]&1|0)==0?b:d;$i(c[f+256>>2]|0,c[f+260>>2]|0,d<65535.0?d:65535.0,1e3)|0}return}function gj(a){a=a|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;e=KL(a,c[46374]|0,8,0)|0;hj(a);i=a+16|0;g=c[i>>2]|0;j=c[g+256>>2]|0;k=c[g+260>>2]|0;f=+(e|0);e=b[g+236>>1]|0;while(1){if((e|0)>(b[g+238>>1]|0))break;d=c[g+196>>2]|0;do if(c[d+(e<<6)>>2]|0){d=c[c[d+(e<<6)+4>>2]>>2]|0;if(!d){c[m>>2]=ry(a)|0;c[m+4>>2]=e;Pw(1,86834,m)|0;break}else{$i(j,d,+h[(c[d+16>>2]|0)+88>>3]+f+ +h[g+96>>3],0)|0;g=c[i>>2]|0;d=c[g+196>>2]|0;d=c[(c[d+(e<<6)+4>>2]|0)+((c[d+(e<<6)>>2]|0)+-1<<2)>>2]|0;$i(d,k,+h[(c[d+16>>2]|0)+96>>3]+f+ +h[g+64>>3],0)|0;break}}while(0);e=e+1|0;g=c[i>>2]|0}l=n;return}function hj(b){b=b|0;var d=0,e=0,f=0;d=b+16|0;if(!(c[(c[d>>2]|0)+256>>2]|0)){f=uh(ig(b)|0)|0;a[(c[f+16>>2]|0)+156>>0]=2;e=uh(ig(b)|0)|0;a[(c[e+16>>2]|0)+156>>0]=2;if((c[(c[d>>2]|0)+12>>2]|0?(ig(b)|0)!=(b|0):0)?(c[(c[(fz(b)|0)+16>>2]|0)+116>>2]&1|0)==0:0){b=c[d>>2]|0;$i(f,e,+(~~+h[b+48+((+h[b+48>>3]>+h[b+80>>3]?0:2)<<4)>>3]|0),0)|0}d=c[d>>2]|0;c[d+256>>2]=f;c[d+260>>2]=e}return}function ij(a){a=a|0;var b=0,d=0;do if((ig(a)|0)!=(a|0)){gj(a);a=a+16|0;b=c[a>>2]|0;b=fh(c[b+256>>2]|0,c[b+260>>2]|0)|0;if(!b){d=c[a>>2]|0;$i(c[d+256>>2]|0,c[d+260>>2]|0,1.0,128)|0;break}else{d=(c[b+16>>2]|0)+156|0;c[d>>2]=(c[d>>2]|0)+128;break}}else a=a+16|0;while(0);b=1;while(1){d=c[a>>2]|0;if((b|0)>(c[d+180>>2]|0))break;ij(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function jj(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0;k=KL(d,c[46374]|0,8,0)|0;o=d+16|0;e=c[o>>2]|0;m=+(k|0);k=b[e+236>>1]|0;while(1){if((k|0)>(b[e+238>>1]|0)){f=1;break}e=c[e+196>>2]|0;a:do if(c[e+(k<<6)>>2]|0?(l=c[c[e+(k<<6)+4>>2]>>2]|0,l|0):0){i=l+16|0;f=c[(c[i>>2]|0)+236>>2]|0;while(1){if((f|0)<=0)break;f=f+-1|0;j=c[(c[(c[(c[(ig(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)+4>>2]|0)+(f<<2)>>2]|0;g=j+16|0;e=c[g>>2]|0;if(!(a[e+156>>0]|0)){n=10;break}if(mj(d,j)|0){n=9;break}}if((n|0)==9){e=c[g>>2]|0;n=10}if((n|0)==10){n=0;$i(j,c[(c[o>>2]|0)+256>>2]|0,+h[e+96>>3]+m,0)|0}f=(c[(c[(c[o>>2]|0)+196>>2]|0)+(k<<6)>>2]|0)+(c[(c[i>>2]|0)+236>>2]|0)|0;while(1){if((f|0)>=(c[(c[(c[(ig(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)>>2]|0))break a;i=c[(c[(c[(c[(ig(d)|0)+16>>2]|0)+196>>2]|0)+(k<<6)+4>>2]|0)+(f<<2)>>2]|0;g=i+16|0;e=c[g>>2]|0;if(!(a[e+156>>0]|0))break;if(!(mj(d,i)|0))f=f+1|0;else{n=15;break}}if((n|0)==15){n=0;e=c[g>>2]|0}$i(c[(c[o>>2]|0)+260>>2]|0,i,+h[e+88>>3]+m,0)|0}while(0);k=k+1|0;e=c[o>>2]|0}while(1){if((f|0)>(c[e+180>>2]|0))break;jj(c[(c[e+184>>2]|0)+(f<<2)>>2]|0);f=f+1|0;e=c[o>>2]|0}return}function kj(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0;e=KL(a,c[46374]|0,8,0)|0;hj(a);b=a+16|0;d=+(e|0);a=1;while(1){e=c[b>>2]|0;if((a|0)>(c[e+180>>2]|0))break;e=c[(c[e+184>>2]|0)+(a<<2)>>2]|0;hj(e);f=c[b>>2]|0;g=e+16|0;$i(c[f+256>>2]|0,c[(c[g>>2]|0)+256>>2]|0,+h[f+96>>3]+d,0)|0;f=c[b>>2]|0;$i(c[(c[g>>2]|0)+260>>2]|0,c[f+260>>2]|0,+h[f+64>>3]+d,0)|0;kj(e);a=a+1|0}return}function lj(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0;d=KL(a,c[46374]|0,8,0)|0;n=a+16|0;a=1;while(1){f=c[n>>2]|0;e=c[f+180>>2]|0;if((a|0)>(e|0))break;hj(c[(c[f+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0}m=+(d|0);l=1;a=e;d=f;while(1){if((l|0)>(a|0))break;k=l+1|0;j=k;while(1){e=c[d+184>>2]|0;f=c[e+(l<<2)>>2]|0;if((j|0)>(a|0))break;e=c[e+(j<<2)>>2]|0;g=(b[(c[f+16>>2]|0)+236>>1]|0)>(b[(c[e+16>>2]|0)+236>>1]|0);i=g?e:f;e=g?f:e;f=c[i+16>>2]|0;g=c[e+16>>2]|0;o=b[g+236>>1]|0;h=o<<16>>16;if((b[f+238>>1]|0)>=o<<16>>16){a=(c[(c[(c[c[(c[f+196>>2]|0)+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0)<(c[(c[(c[c[(c[g+196>>2]|0)+(h<<6)+4>>2]>>2]|0)+16>>2]|0)+236>>2]|0);$i(c[(c[(a?i:e)+16>>2]|0)+260>>2]|0,c[(c[(a?e:i)+16>>2]|0)+256>>2]|0,m,0)|0;a=c[n>>2]|0;d=a;a=c[a+180>>2]|0}j=j+1|0}lj(f);d=c[n>>2]|0;l=k;a=c[d+180>>2]|0}return}function mj(b,d){b=b|0;d=d|0;var e=0;d=c[d+16>>2]|0;if((a[d+156>>0]|0)==1){d=c[c[d+256>>2]>>2]|0;while(1){e=c[(c[d+16>>2]|0)+116>>2]|0;if(!e)break;else d=e}if(!(oz(b,c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0))d=(oz(b,c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0)==0&1;else d=0}else d=0;return d|0}function nj(a,b){a=a|0;b=b|0;return oj(a,b)|0}function oj(a,b){a=a|0;b=b|0;var d=0,e=0;a:do if((a|0)==(b|0))a=1;else{d=c[(c[a+16>>2]|0)+180>>2]|0;a=0;while(1){e=c[d+(a<<2)>>2]|0;if(!e){a=0;break a}if(!(oj(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,b)|0))a=a+1|0;else{a=1;break}}}while(0);return a|0}function pj(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+16|0;d=c[k>>2]|0;j=b[d+236>>1]|0;while(1){if((j|0)>(b[d+238>>1]|0))break;h=c[d+196>>2]|0;g=c[h+(j<<6)>>2]|0;h=h+(j<<6)+4|0;i=0;f=0;while(1){if((f|0)>=(g|0))break;e=c[(c[(c[h>>2]|0)+(f<<2)>>2]|0)+16>>2]|0;c[e+236>>2]=i;if((a[e+159>>0]|0)==6)e=c[e+216>>2]|0;else e=1;i=e+i|0;f=f+1|0}if((i|0)>(g|0)){d=c[h>>2]|0;if(!d)d=vH((i<<2)+4|0)|0;else d=xH(d,(i<<2)+4|0)|0;f=c[(c[k>>2]|0)+196>>2]|0;c[f+(j<<6)+4>>2]=d;e=c[f+(j<<6)>>2]|0;while(1){d=e+-1|0;if((e|0)<=0)break;h=c[f+(j<<6)+4>>2]|0;e=c[h+(d<<2)>>2]|0;c[h+(c[(c[e+16>>2]|0)+236>>2]<<2)>>2]=e;e=d;f=c[(c[k>>2]|0)+196>>2]|0}c[f+(j<<6)>>2]=i;c[(c[f+(j<<6)+4>>2]|0)+(i<<2)>>2]=0;d=c[k>>2]|0}j=j+1|0}return}function qj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+48|0;n=o+32|0;m=o+8|0;d=o+24|0;k=o+16|0;j=o;e=b+16|0;f=c[e>>2]|0;a:do if((c[f+216>>2]|0)>=2){c[m>>2]=~~(+h[f+16>>3]-+h[f+88>>3]);c[m+4>>2]=~~+h[f+24>>3];c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];rj(d,b,n);g=d;i=c[g+4>>2]|0;d=m;c[d>>2]=c[g>>2];c[d+4>>2]=i;d=c[e>>2]|0;if((c[d+184>>2]|0)>0){j=c[c[d+180>>2]>>2]|0;d=(c[d+236>>2]|0)+1|0;j=Hx(a,c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)|0;while(1){if(!j)break a;i=(c[j>>2]&3|0)==2?j:j+-48|0;e=i+48|0;f=c[((c[i>>2]&3|0)==3?i:e)+40>>2]|0;if((f|0)!=(b|0)?(SL(f)|0)==(b|0):0){f=c[((c[i>>2]&3|0)==3?i:e)+40>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];sj(k,a,f,n,d);f=k;e=c[f+4>>2]|0;g=m;c[g>>2]=c[f>>2];c[g+4>>2]=e;zh(i);g=i+-48|0;e=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;f=c[e+172>>2]|0;if(!f)e=vH((c[e+176>>2]<<2)+8|0)|0;else e=xH(f,(c[e+176>>2]<<2)+8|0)|0;c[(c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0)+172>>2]=e;p=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;e=c[p+172>>2]|0;p=p+176|0;f=c[p>>2]|0;c[p>>2]=f+1;c[e+(f<<2)>>2]=i;i=c[(c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0)+16>>2]|0;c[(c[i+172>>2]|0)+(c[i+176>>2]<<2)>>2]=0;d=d+1|0}j=Ix(a,j)|0}}else{i=c[c[d+172>>2]>>2]|0;d=(c[d+236>>2]|0)+1|0;i=Ex(a,c[((c[i>>2]&3|0)==3?i:i+48|0)+40>>2]|0)|0;while(1){if(!i)break a;e=i+-48|0;f=c[((c[i>>2]&3|0)==2?i:e)+40>>2]|0;if((f|0)!=(b|0)?(SL(f)|0)==(b|0):0){f=c[((c[i>>2]&3|0)==2?i:e)+40>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];sj(j,a,f,n,d);f=j;e=c[f+4>>2]|0;g=m;c[g>>2]=c[f>>2];c[g+4>>2]=e;zh(i);g=i+48|0;e=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;f=c[e+180>>2]|0;if(!f)e=vH((c[e+184>>2]<<2)+8|0)|0;else e=xH(f,(c[e+184>>2]<<2)+8|0)|0;c[(c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0)+180>>2]=e;f=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;k=c[f+180>>2]|0;f=f+184|0;p=c[f>>2]|0;c[f>>2]=p+1;c[k+(p<<2)>>2]=i;p=c[(c[((c[i>>2]&3|0)==3?i:g)+40>>2]|0)+16>>2]|0;c[(c[p+180>>2]|0)+(c[p+184>>2]<<2)>>2]=0;d=d+1|0}i=Gx(a,i)|0}}}while(0);l=o;return}function rj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;bN(b,c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1);e=c[b+16>>2]|0;h[e+24>>3]=+(c[d+4>>2]|0);f=+h[e+88>>3]+ +(c[d>>2]|0);h[e+16>>3]=f;f=f+ +h[e+96>>3];c[d>>2]=~~(f+ +(c[(c[(ez(b)|0)+16>>2]|0)+248>>2]|0));e=d;b=c[e+4>>2]|0;d=a;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function sj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;b=ig(b)|0;g=SL(d)|0;if((g|0)!=(d|0))rh(g,d);j=c[d+16>>2]|0;c[j+236>>2]=f;g=c[(c[g+16>>2]|0)+232>>2]|0;c[j+232>>2]=g;c[(c[(c[(c[b+16>>2]|0)+196>>2]|0)+(g<<6)+4>>2]|0)+(f<<2)>>2]=d;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];rj(a,d,h);l=i;return}function tj(a){a=a|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0.0;m=c[(c[(ig(a)|0)+16>>2]|0)+196>>2]|0;if((ig(a)|0)==(a|0))j=8.0;else j=+(KL(a,c[46374]|0,8,0)|0);l=a+16|0;g=c[l>>2]|0;f=0;k=1;e=+h[g+120>>3];d=+h[g+128>>3];while(1){if((k|0)>(c[g+180>>2]|0))break;i=c[(c[g+184>>2]|0)+(k<<2)>>2]|0;f=tj(i)|0|f;i=c[i+16>>2]|0;g=c[l>>2]|0;if((b[i+238>>1]|0)==(b[g+238>>1]|0)){n=+h[i+120>>3]+j;e=e>n?e:n}if((b[i+236>>1]|0)==(b[g+236>>1]|0)){n=+h[i+128>>3]+j;d=d>n?d:n}k=k+1|0}if((ig(a)|0)!=(a|0)?(c[(c[l>>2]|0)+12>>2]|0)!=0:0)if(!(c[(c[(fz(a)|0)+16>>2]|0)+116>>2]&1)){k=c[l>>2]|0;f=1;e=+h[k+56>>3]+e;d=+h[k+88>>3]+d}else f=1;k=c[l>>2]|0;h[k+120>>3]=e;h[k+128>>3]=d;if((ig(a)|0)!=(a|0)){l=c[l>>2]|0;a=m+(b[l+236>>1]<<6)+24|0;n=+h[a>>3];h[a>>3]=n>d?n:d;m=m+(b[l+238>>1]<<6)+16|0;n=+h[m>>3];h[m>>3]=n>e?n:e}return f|0}function uj(a,d){a=a|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0.0,q=0.0;o=c[(c[(ig(a)|0)+16>>2]|0)+196>>2]|0;if((ig(a)|0)==(a|0))e=0;else e=KL(a,c[46374]|0,8,0)|0;l=a+16|0;i=c[l>>2]|0;m=e+d|0;k=+(e|0);j=1;f=+h[i+128>>3];g=+h[i+120>>3];e=i;while(1){if((j|0)>(c[e+180>>2]|0))break;i=c[(c[e+184>>2]|0)+(j<<2)>>2]|0;uj(i,m);i=c[i+16>>2]|0;e=c[l>>2]|0;if((b[i+238>>1]|0)==(b[e+238>>1]|0)){q=+h[i+120>>3]+k;g=g>q?g:q}if((b[i+236>>1]|0)==(b[e+236>>1]|0)){q=+h[i+128>>3]+k;f=f>q?f:q}j=j+1|0}h[e+120>>3]=g;h[e+128>>3]=f;if(((ig(a)|0)!=(a|0)?(n=c[l>>2]|0,c[n+12>>2]|0):0)?(p=-g-f+ +h[n+48+((+h[n+104>>3]>+h[n+72>>3]?3:1)<<4)+8>>3]-+h[(c[(c[c[o+(b[n+236>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3]+ +h[(c[(c[c[o+(b[n+238>>1]<<6)+4>>2]>>2]|0)+16>>2]|0)+24>>3],p>0.0):0)vj(a,~~p,d);if((ig(a)|0)!=(a|0)){n=c[l>>2]|0;m=o+(b[n+236>>1]<<6)+24|0;q=+h[m>>3];p=+h[n+128>>3];h[m>>3]=q>p?q:p;o=o+(b[n+238>>1]<<6)+16|0;p=+h[o>>3];q=+h[n+120>>3];h[o>>3]=p>q?p:q}return}function vj(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0;k=c[(ig(a)|0)+16>>2]|0;q=c[k+196>>2]|0;p=c[a+16>>2]|0;a=b[p+238>>1]|0;f=b[p+236>>1]|0;l=(d+1|0)/2|0;m=p+120|0;n=+h[m>>3];o=+(l|0);i=+(e|0);e=~~(o+i+n-+h[q+(a<<6)+16>>3]);if((e|0)>0){g=+(e|0);while(1){if((a|0)<(f|0))break;if((c[q+(a<<6)>>2]|0)>0){r=(c[(c[c[q+(a<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;h[r>>3]=+h[r>>3]+g}a=a+-1|0}j=+h[p+128>>3];a=e;g=j+ +(d-l|0)}else{j=+h[p+128>>3];a=d-l|0;g=j}a=~~(+(a|0)+i+g-+h[q+(f<<6)+24>>3]);a:do if((a|0)>0){e=b[k+236>>1]|0;g=+(a|0);while(1){a=f+-1|0;if((f|0)<=(e|0))break a;if((c[q+(a<<6)>>2]|0)<=0){f=a;continue}f=(c[(c[c[q+(a<<6)+4>>2]>>2]|0)+16>>2]|0)+24|0;h[f>>3]=+h[f>>3]+g;f=a}}while(0);h[p+128>>3]=j+ +(d-l|0);h[m>>3]=n+o;return}function wj(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+16>>2]|0;f=a[e+84>>0]|0;b=c[d+16>>2]|0;do if(f<<24>>24==(a[b+84>>0]|0)){if(+h[e+56>>3]==+h[b+56>>3]){if(!(f<<24>>24==0?1:+h[e+64>>3]==+h[b+64>>3])){b=0;break}}else if(f<<24>>24){b=0;break}if(+h[e+16>>3]==+h[b+16>>3]?+h[e+24>>3]==+h[b+24>>3]:0){b=1;break}b=(a[e+44>>0]|0)==0&1}else b=0;while(0);return b|0}function xj(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+16|0;d=c[i>>2]|0;b[d+236>>1]=32767;b[d+238>>1]=-1;d=0;h=Sy(a)|0;while(1){e=c[i>>2]|0;if(!h)break;f=e+238|0;g=c[(c[h+16>>2]|0)+232>>2]|0;if((g|0)>(b[f>>1]|0))b[f>>1]=g;e=e+236|0;if((g|0)<(b[e>>1]|0))b[e>>1]=g;if(!d)d=h;else d=(g|0)<(c[(c[d+16>>2]|0)+232>>2]|0)?h:d;h=Ty(a,h)|0}c[e+264>>2]=d;return}function yj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0;b=xx(a,86879)|0;if(!b)b=2147483647;else{g=+b2(b);b=~~(g*+(ay(a)|0))}e=a+16|0;d=0;while(1){f=c[e>>2]|0;if((d|0)>=(c[f+220>>2]|0))break;c[f+192>>2]=c[(c[f+216>>2]|0)+(d<<2)>>2];fI(a,(c[f+180>>2]|0)==0&1,b)|0;d=d+1|0}return}function zj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;if(!(xx(a,86888)|0))Bj(a,d);else{g=(c[a+16>>2]|0)+136|0;b[g>>1]=b[g>>1]|16;Aj(a,d)}if(0){g=c[15686]|0;a=c[a+16>>2]|0;d=b[a+236>>1]|0;c[e>>2]=b[a+238>>1];c[e+4>>2]=d;g1(g,86896,e)|0}l=f;return}function Aj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0;i=l;l=l+16|0;h=i;c[45977]=0;a[h>>0]=a[18484]|0;a[h+1>>0]=a[18485]|0;a[h+2>>0]=a[18486]|0;a[h+3>>0]=a[18487]|0;h=Xx(87106,h,0)|0;Az(h,87135,280,1)|0;mz(h,17404,17344);Cj(b);e=xx(b,86879)|0;if(!e)f=2147483647;else{j=+b2(e);f=~~(j*+(ay(b)|0))}Sj(b,0);Tj(b,h);Uj(b,h);Vj(b,h,0,0);Wj(h);g=Xj(h)|0;Yj(h);if(d|0){Mk(h);Ak(h)}e=xx(b,99560)|0;if(!e)e=-1;else e=a2(e)|0;yH(h,1,f,e)|0;Zj(b,h,g);$x(h)|0;l=i;return}function Bj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+32|0;f=g+16|0;e=g+8|0;d=g;Cj(a);do if(!b){Dj(a,a);Pk(a);Ej(d,a);h=d;d=c[h+4>>2]|0;b=e;c[b>>2]=c[h>>2];c[b+4>>2]=d;Il(a,0);b=0}else{Mk(a);Ak(a);Dj(a,a);Pk(a);Ej(d,a);i=d;d=c[i+4>>2]|0;h=e;c[h>>2]=c[i>>2];c[h+4>>2]=d;Il(a,0);h=c[a+16>>2]|0;if((c[h+220>>2]|0)<=1?(c[h+180>>2]|0)<=0:0)break;c[b+32>>2]=1;b=0}while(0);xk(a);c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];if(Fj(a,f)|0)Il(a,0);if(!b)yj(a);else Bk(a,b);Gj(a,b);Hj(a);l=g;return}function Cj(d){d=d|0;var f=0,g=0,h=0;if(a[(c[(c[d+60>>2]|0)+16>>2]|0)+113>>0]&1){g=Sy(d)|0;while(1){if(!g)break;f=Ex(d,g)|0;while(1){if(!f)break;h=(c[f+16>>2]|0)+170|0;b[h>>1]=(e[h>>1]|0)<<1;f=Gx(d,f)|0}g=Ty(d,g)|0}h=(c[d+16>>2]|0)+252|0;c[h>>2]=((c[h>>2]|0)+1|0)/2|0}return}function Dj(a,b){a=a|0;b=b|0;var d=0;b=wA(b)|0;while(1){if(!b)break;d=Pj(b)|0;do if(d)if((d|0)==7&(c[46364]|0)==100){Lj(a,b);break}else{Qj(a,b,d);break}else Dj(a,b);while(0);b=xA(b)|0}return}function Ej(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=d+16|0;e=c[i>>2]|0;d=c[e+228>>2]|0;e=c[e+224>>2]|0;f=(e|0)==0;if(!d)if(f){j=0;k=0}else g=4;else if(f)g=5;else g=4;if((g|0)==4){d=SL(e)|0;e=c[i>>2]|0;c[e+224>>2]=d;d=c[e+228>>2]|0;if(!d){h=0;d=e;g=12}else g=5}do if((g|0)==5){d=SL(d)|0;e=c[i>>2]|0;c[e+228>>2]=d;if(d){e=d+16|0;d=c[e>>2]|0;f=(a[d+159>>0]|0)==5&1;while(1){d=c[c[d+180>>2]>>2]|0;if(!d){g=11;break}h=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;if((h|0)!=(SL(h)|0)){g=9;break}wk(d);d=c[e>>2]|0}if((g|0)==9)qa(86999,86939,346,87031);else if((g|0)==11){h=f;d=c[i>>2]|0;g=12;break}}else{h=0;d=e;g=12}}while(0);a:do if((g|0)==12){d=c[d+224>>2]|0;if(!d){j=0;k=h}else{e=d+16|0;d=c[e>>2]|0;f=(a[d+159>>0]|0)==3&1;while(1){d=c[c[d+172>>2]>>2]|0;if(!d){j=f;k=h;break a}i=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((i|0)!=(SL(i)|0))break;wk(d);d=c[e>>2]|0}qa(87044,86939,353,87031)}}while(0);c[b>>2]=j;c[b+4>>2]=k;return}function Fj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+16|0;i=c[j>>2]|0;if((c[i+228>>2]|0)==0?(c[i+224>>2]|0)==0:0)d=0;else e=3;a:do if((e|0)==3){g=Sy(a)|0;i=d+4|0;h=c[d>>2]&65535;d=0;while(1){if(!g)break a;if((g|0)==(SL(g)|0)){f=g+16|0;e=c[f>>2]|0;if((c[e+184>>2]|0)==0?(k=c[(c[j>>2]|0)+228>>2]|0,!((k|0)==0|(g|0)==(k|0))):0){d=ph(g,k,0)|0;e=c[d+16>>2]|0;b[e+170>>1]=c[i>>2];c[e+156>>2]=0;e=c[f>>2]|0}if((c[e+176>>2]|0)==0?(l=c[(c[j>>2]|0)+224>>2]|0,!((l|0)==0|(g|0)==(l|0))):0){d=ph(l,g,0)|0;f=c[d+16>>2]|0;b[f+170>>1]=h;c[f+156>>2]=0}}g=Ty(a,g)|0}}while(0);return (d|0)!=0|0}function Gj(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;g=Sy(d)|0;k=d+16|0;f=c[k>>2]|0;a:do if(g){b[f+236>>1]=32767;b[f+238>>1]=-1;j=(e|0)==0;while(1){if(!g)break;f=SL(g)|0;i=c[g+16>>2]|0;e=c[i+232>>2]|0;do if((f|0)!=(g|0)){if(!j)if(!e)e=0;else break;e=e+(c[(c[f+16>>2]|0)+232>>2]|0)|0;c[i+232>>2]=e}while(0);f=c[k>>2]|0;h=f+238|0;if((e|0)>(b[h>>1]|0))b[h>>1]=e;f=f+236|0;if((e|0)<(b[f>>1]|0))b[f>>1]=e;switch(a[i+159>>0]|0){case 6:case 0:break;default:UL(g)}g=Ty(d,g)|0}if((ig(d)|0)==(d|0)){if((c[46364]|0)==100)e=1;else{Kj(d);break}while(1){f=c[k>>2]|0;if((e|0)>(c[f+180>>2]|0))break a;Jj(c[(c[f+184>>2]|0)+(e<<2)>>2]|0);e=e+1|0}}}else{b[f+238>>1]=0;b[f+236>>1]=0}while(0);return}function Hj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=b+16|0;e=0;while(1){d=c[j>>2]|0;if((e|0)>=(c[d+220>>2]|0))break;i=c[(c[d+216>>2]|0)+(e<<2)>>2]|0;c[d+192>>2]=i;d=i;while(1){if(!d)break;i=d+16|0;Ij((c[i>>2]|0)+172|0);Ij((c[i>>2]|0)+180|0);i=c[i>>2]|0;a[i+157>>0]=0;d=c[i+164>>2]|0}e=e+1|0}i=Sy(b)|0;while(1){if(!i)break;h=Ex(b,i)|0;while(1){if(!h)break;f=h+16|0;d=c[f>>2]|0;g=c[d+172>>2]|0;if((g|0)!=0?(k=g+16|0,(h|0)==(c[(c[k>>2]|0)+116>>2]|0)):0){d=Sy(b)|0;while(1){if(!d)break;e=Ex(b,d)|0;while(1){if(!e)break;if((h|0)!=(e|0)?(l=(c[e+16>>2]|0)+172|0,m=c[l>>2]|0,(m|0)!=0&(g|0)==(m|0)):0)c[l>>2]=0;e=Gx(b,e)|0}d=Ty(b,d)|0}D_(c[k>>2]|0);D_(g);d=c[f>>2]|0}c[d+172>>2]=0;h=Gx(b,h)|0}i=Ty(b,i)|0}D_(c[(c[j>>2]|0)+216>>2]|0);m=c[j>>2]|0;c[m+216>>2]=0;c[m+220>>2]=0;return}function Ij(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;while(1){if((b|0)<=-1)break;c[(c[a>>2]|0)+(b<<2)>>2]=0;b=b+-1|0}c[d>>2]=0;return}function Jj(a){a=a|0;var d=0,f=0,g=0;d=a+16|0;f=c[d>>2]|0;g=c[(c[(c[f+264>>2]|0)+16>>2]|0)+232>>2]|0;a=f+236|0;b[a>>1]=g+(e[a>>1]|0);a=f+238|0;b[a>>1]=g+(e[a>>1]|0);a=1;while(1){if((a|0)>(c[f+180>>2]|0))break;Jj(c[(c[f+184>>2]|0)+(a<<2)>>2]|0);a=a+1|0;f=c[d>>2]|0}return}function Kj(b){b=b|0;var d=0;d=wA(ig(b)|0)|0;while(1){if(!d)break;if((a[(c[d+16>>2]|0)+274>>0]|0)==7)Lj(b,d);d=xA(d)|0}return}function Lj(a,b){a=a|0;b=b|0;var d=0;d=(c[b+16>>2]|0)+200|0;do if((c[d>>2]|0)==0?(c[d>>2]=a,Mj(a,b),Sy(b)|0):0){Nj(a,b);if((c[46364]|0)==100){Bj(b,0);Oj(b);break}else{xj(b);break}}while(0);return}function Mj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=b+16|0;g=Sy(d)|0;while(1){if(!g)break;i=Ty(d,g)|0;j=g+16|0;if(!(a[(c[j>>2]|0)+159>>0]|0))f=1;else{dz(d,g)|0;g=i;continue}while(1){e=c[h>>2]|0;b=c[e+180>>2]|0;if((f|0)>=(b|0))break;if(oz(c[(c[e+184>>2]|0)+(f<<2)>>2]|0,g)|0){k=7;break}f=f+1|0}if((k|0)==7){k=0;b=c[(c[h>>2]|0)+180>>2]|0}if((f|0)<(b|0))dz(d,g)|0;c[(c[j>>2]|0)+212>>2]=0;g=i}e=Sy(d)|0;while(1){if(!e)break;b=Ex(ig(d)|0,e)|0;while(1){if(!b)break;if(oz(d,c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)Vx(d,b,1)|0;b=Gx(ig(d)|0,b)|0}e=Ty(d,e)|0}return}function Nj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+16|0;d=c[e>>2]|0;g=d+180|0;a=c[g>>2]|0;f=a+1|0;c[g>>2]=f;d=c[d+184>>2]|0;if(!d)a=uH((a<<2)+8|0)|0;else a=wH(d,a+2|0,4,f)|0;c[(c[e>>2]|0)+184>>2]=a;c[a+(f<<2)>>2]=b;fH(b);return}function Oj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=c[b+16>>2]|0;d=g+192|0;h=0;while(1){d=c[d>>2]|0;if(!d)break;f=c[d+16>>2]|0;if(!(c[f+232>>2]|0))e=(a[f+156>>0]|0)==0?d:h;else e=h;d=f+164|0;h=e}if(!h)qa(86924,86939,238,86946);c[g+264>>2]=h;d=Sy(b)|0;while(1){if(!d){d=13;break}e=d+16|0;if(!((d|0)==(h|0)?1:(c[(c[e>>2]|0)+216>>2]|0)<2)){d=11;break}TL(d,h)|0;a[(c[e>>2]|0)+159>>0]=7;d=Ty(b,d)|0}if((d|0)==11)qa(86961,86939,242,86946);else if((d|0)==13)return}function Pj(b){b=b|0;var d=0;if(!(Rj(b)|0)){d=aM(xx(b,87076)|0,17356,17380)|0;a[(c[b+16>>2]|0)+274>>0]=d;b=d}else b=7;return b|0}function Qj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=Sy(d)|0;a:do if(g|0){j=e&255;i=g+16|0;f=g;h=j;while(1){a[(c[f+16>>2]|0)+159>>0]=h;f=Ty(d,f)|0;if(!f)break;TL(g,f)|0;h=a[(c[i>>2]|0)+159>>0]|0}switch(e|0){case 3:case 2:{b=b+16|0;f=c[b>>2]|0;h=c[f+224>>2]|0;if(h){g=TL(h,g)|0;f=c[b>>2]|0}c[f+224>>2]=g;break}case 5:case 4:{b=b+16|0;f=c[b>>2]|0;h=c[f+228>>2]|0;if(h){g=TL(h,g)|0;f=c[b>>2]|0}c[f+228>>2]=g;break}default:break a}switch(e|0){case 3:{f=f+224|0;break}case 5:{f=f+228|0;break}default:break a}a[(c[(c[f>>2]|0)+16>>2]|0)+159>>0]=j}while(0);return}function Rj(a){a=a|0;return (z$(ry(a)|0,104980,7)|0)==0|0}function Sj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;g=m;if(!(lk(b)|0)){do if(qM(b)|0)if(!d){c[(c[b+16>>2]|0)+204>>2]=0;d=b;break}else{c[(c[b+16>>2]|0)+204>>2]=(c[(c[d+16>>2]|0)+204>>2]|0)+1;mk(b,d);d=b;break}while(0);e=wA(b)|0;while(1){if(!e)break;Sj(e,d);e=xA(e)|0}a:do if(qM(b)|0){e=Sy(b)|0;while(1){if(!e)break a;f=(c[e+16>>2]|0)+212|0;if(!(c[f>>2]|0))c[f>>2]=b;e=Ty(b,e)|0}}while(0);switch(nk(b)|0){case 3:{d=d+16|0;a[(c[d>>2]|0)+241>>0]=1;k=19;break}case 2:{d=d+16|0;k=19;break}case 5:{d=d+16|0;a[(c[d>>2]|0)+242>>0]=1;k=21;break}case 4:{d=d+16|0;k=21;break}case 1:{ok(b)|0;break}case 6:break;default:{e=ry(b)|0;f=xx(b,87076)|0;c[g>>2]=e;c[g+4>>2]=f;Pw(0,87259,g)|0}}if((k|0)==19){k=ok(b)|0;k=pk(k,c[(c[d>>2]|0)+208>>2]|0)|0;c[(c[d>>2]|0)+208>>2]=k}else if((k|0)==21){k=ok(b)|0;k=pk(k,c[(c[d>>2]|0)+212>>2]|0)|0;c[(c[d>>2]|0)+212>>2]=k}if((qM(b)|0?(h=b+16|0,i=c[h>>2]|0,j=c[i+208>>2]|0,j|0):0)?(j|0)==(c[i+212>>2]|0):0){j=ok(b)|0;k=c[h>>2]|0;c[k+208>>2]=j;c[k+212>>2]=j}}l=m;return}function Tj(a,b){a=a|0;b=b|0;var d=0,e=0;c[45977]=0;d=Sy(a)|0;while(1){if(!d)break;if((_j(d)|0)==(d|0)){e=bk(b,ry(d)|0)|0;c[(c[d+16>>2]|0)+148>>2]=e}d=Ty(a,d)|0}d=Sy(a)|0;while(1){if(!d)break;b=d+16|0;if(!(c[(c[b>>2]|0)+148>>2]|0)){e=c[(c[(_j(d)|0)+16>>2]|0)+148>>2]|0;c[(c[b>>2]|0)+148>>2]=e}d=Ty(a,d)|0}return}function Uj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=Sy(a)|0;while(1){if(!h)break;d=c[(c[h+16>>2]|0)+148>>2]|0;i=Ex(a,h)|0;while(1){if(!i)break;do if((gk(i)|0)==0?(j=i+-48|0,k=c[(c[(_j(c[((c[i>>2]&3|0)==2?i:j)+40>>2]|0)|0)+16>>2]|0)+148>>2]|0,(d|0)!=(k|0)):0){f=c[i>>2]&3;g=i+48|0;e=((f|0)==3?i:g)+40|0;f=c[(c[(c[((f|0)==2?i:j)+40>>2]|0)+16>>2]|0)+212>>2]|0;if(!(hk(i)|0)){if((fk(c[(c[(c[e>>2]|0)+16>>2]|0)+212>>2]|0)|0)==0?(fk(f)|0)==0:0){ik(b,d,k,i);break}jk(b,d,k,i);break}else{f=_j(c[e>>2]|0)|0;e=c[i>>2]&3;if((f|0)!=(c[(c[(c[(c[(c[((e|0)==3?i:g)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+212>>2]|0)?(g=_j(c[((e|0)==2?i:j)+40>>2]|0)|0,(g|0)!=(c[(c[(c[(c[(c[((c[i>>2]&3|0)==2?i:j)+40>>2]|0)+16>>2]|0)+212>>2]|0)+16>>2]|0)+208>>2]|0)):0)e=k;else{e=d;d=k}ik(b,d,e,i);break}}while(0);i=Gx(a,i)|0}h=Ty(a,h)|0}return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if((qM(a)|0)!=0?(fk(a)|0)!=0:0){g=Sy(a)|0;while(1){if(!g)break;if(!(Hx(a,g)|0)){f=c[(c[(_j(g)|0)+16>>2]|0)+148>>2]|0;if(!d)d=bk(b,87157)|0;Rx(b,d,f,0,1)|0}if(!(Ex(a,g)|0)){f=c[(c[(_j(g)|0)+16>>2]|0)+148>>2]|0;if(!e)e=bk(b,87162)|0;Rx(b,f,e,0,1)|0}g=Ty(a,g)|0}if((e|0)!=0&(d|0)!=0){ek(Rx(b,d,e,0,1)|0,0,1e3);f=d}else f=d}else f=d;d=wA(a)|0;while(1){if(!d)break;Vj(d,b,f,e);d=xA(d)|0}return}function Wj(b){b=b|0;var d=0,e=0;d=Sy(b)|0;while(1){if(!d)break;e=c[d+16>>2]|0;a[e+158>>0]=0;a[e+157>>0]=0;d=Ty(b,d)|0}d=Sy(b)|0;while(1){if(!d)break;ck(b,d);d=Ty(b,d)|0}return}function Xj(a){a=a|0;var b=0,d=0,e=0,f=0;b=Sy(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+128>>2]=0;b=Ty(a,b)|0}b=0;e=Sy(a)|0;while(1){if(!e)break;d=b+1|0;if(!(c[(c[e+16>>2]|0)+128>>2]|0)){ak(a,e,d);b=d}e=Ty(a,e)|0}a:do if((b|0)>1){f=bk(a,87151)|0;d=1;e=Sy(a)|0;while(1){if(!e)break a;if((c[(c[e+16>>2]|0)+128>>2]|0)==(d|0)){Rx(a,f,e,0,1)|0;d=d+1|0}e=Ty(a,e)|0}}while(0);return b|0}function Yj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;g=Sy(a)|0;while(1){if(!g)break;h=g+16|0;f=Ex(a,g)|0;while(1){if(!f)break;b=c[h>>2]|0;d=c[b+180>>2]|0;if(!d)b=vH((c[b+184>>2]<<2)+8|0)|0;else b=xH(d,(c[b+184>>2]<<2)+8|0)|0;d=c[h>>2]|0;c[d+180>>2]=b;d=d+184|0;e=c[d>>2]|0;c[d>>2]=e+1;c[b+(e<<2)>>2]=f;e=c[h>>2]|0;c[(c[e+180>>2]|0)+(c[e+184>>2]<<2)>>2]=0;e=f+-48|0;b=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;d=c[b+172>>2]|0;if(!d)b=vH((c[b+176>>2]<<2)+8|0)|0;else b=xH(d,(c[b+176>>2]<<2)+8|0)|0;c[(c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0)+172>>2]=b;i=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;b=c[i+172>>2]|0;i=i+176|0;d=c[i>>2]|0;c[i>>2]=d+1;c[b+(d<<2)>>2]=f;e=c[(c[((c[f>>2]&3|0)==2?f:e)+40>>2]|0)+16>>2]|0;c[(c[e+172>>2]|0)+(c[e+176>>2]<<2)>>2]=0;f=Gx(a,f)|0}g=Ty(a,g)|0}return}function Zj(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=a+16|0;o=c[n>>2]|0;b[o+236>>1]=32767;b[o+238>>1]=-1;a:do if((f|0)>1){h=uH((f<<2)+4|0)|0;g=f+1|0;f=1;while(1){if((f|0)==(g|0)){m=h;o=h;break a}c[h+(f<<2)>>2]=32767;f=f+1|0}}else{m=0;o=0}while(0);i=(m|0)==0;h=Sy(a)|0;while(1){if(!h)break;j=c[(c[(c[(_j(h)|0)+16>>2]|0)+148>>2]|0)+16>>2]|0;k=c[j+232>>2]|0;l=c[h+16>>2]|0;c[l+232>>2]=k;f=c[n>>2]|0;g=f+238|0;if((k|0)>(b[g>>1]|0))b[g>>1]=k;f=f+236|0;if((k|0)<(b[f>>1]|0))b[f>>1]=k;if(!i){j=c[j+128>>2]|0;c[l+128>>2]=j;l=m+(j<<2)|0;j=c[l>>2]|0;c[l>>2]=(j|0)<(k|0)?j:k}h=Ty(a,h)|0}j=(m|0)!=0;b:do if(!j){m=b[(c[n>>2]|0)+236>>1]|0;g=m<<16>>16;if(m<<16>>16>0){f=Sy(a)|0;while(1){if(!f)break;m=(c[f+16>>2]|0)+232|0;c[m>>2]=(c[m>>2]|0)-g;f=Ty(a,f)|0}f=c[n>>2]|0;n=f+236|0;b[n>>1]=(e[n>>1]|0)-g;f=f+238|0;b[f>>1]=(e[f>>1]|0)-g;f=0}else f=0}else{f=Sy(a)|0;while(1){if(!f){f=1;break b}l=c[f+16>>2]|0;n=l+232|0;c[n>>2]=(c[n>>2]|0)-(c[m+(c[l+128>>2]<<2)>>2]|0);f=Ty(a,f)|0}}while(0);$j(a,f);i=Sy(d)|0;while(1){if(!i)break;g=i+16|0;f=c[g>>2]|0;h=c[f+172>>2]|0;if(h){D_(h);f=c[g>>2]|0}f=c[f+180>>2]|0;if(f|0)D_(f);i=Ty(d,i)|0}D_(c[(c[(Sy(a)|0)+16>>2]|0)+112>>2]|0);f=Sy(a)|0;while(1){if(!f)break;c[(c[f+16>>2]|0)+112>>2]=0;f=Ty(a,f)|0}if(j)D_(o);return}function _j(a){a=a|0;var b=0,d=0,e=0;b=a+16|0;d=(c[b>>2]|0)+152|0;e=c[d>>2]|0;if(e){if((e|0)!=(a|0)){e=_j(e)|0;c[(c[b>>2]|0)+152>>2]=e;return e|0}}else c[d>>2]=a;return a|0}function $j(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=a+16|0;e=1;while(1){f=c[i>>2]|0;if((e|0)>(c[f+180>>2]|0))break;$j(c[(c[f+184>>2]|0)+(e<<2)>>2]|0,0);e=e+1|0}if((d|0)!=0|(c[f+200>>2]|0)!=0){b[f+236>>1]=32767;b[f+238>>1]=-1;e=0;h=Sy(a)|0;while(1){if(!h)break;g=c[(c[h+16>>2]|0)+232>>2]|0;d=c[i>>2]|0;f=d+238|0;if((g|0)>(b[f>>1]|0))b[f>>1]=g;d=d+236|0;if((g|0)<(b[d>>1]|0)){b[d>>1]=g;e=h}h=Ty(a,h)|0}c[(c[i>>2]|0)+264>>2]=e}return}function ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(c[b+16>>2]|0)+128|0;a:do if(!(c[e>>2]|0)){c[e>>2]=d;e=Ex(a,b)|0;while(1){if(!e)break;ak(a,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,d);e=Gx(a,e)|0}e=Hx(a,b)|0;while(1){if(!e)break a;ak(a,c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,d);e=Ix(a,e)|0}}while(0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=az(a,b,1)|0;b=f+16|0;c[(c[b>>2]|0)+176>>2]=0;e=uH(20)|0;d=c[b>>2]|0;c[d+172>>2]=e;c[d+184>>2]=0;d=uH(20)|0;b=c[b>>2]|0;c[b+180>>2]=d;d=c[45977]|0;e=b+168|0;if(!d){c[e>>2]=0;c[(c[a+16>>2]|0)+192>>2]=f}else{c[e>>2]=d;c[(c[d+16>>2]|0)+164>>2]=f}c[45977]=f;c[b+164>>2]=0;return f|0}function ck(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=d+16|0;e=c[h>>2]|0;f=e+157|0;if(!(a[f>>0]|0)){a[f>>0]=1;a[e+158>>0]=1;d=Ex(b,d)|0;while(1){if(!d)break;e=Gx(b,d)|0;f=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;g=c[f+16>>2]|0;if(a[g+158>>0]|0){dk(b,d);d=e;continue}if(a[g+157>>0]|0){d=e;continue}ck(b,f);d=e}a[(c[h>>2]|0)+158>>0]=0}return}function dk(a,b){a=a|0;b=b|0;var d=0,f=0,g=0;d=c[b>>2]&3;g=b+-48|0;f=b+48|0;d=Rx(a,c[((d|0)==2?b:g)+40>>2]|0,c[((d|0)==3?b:f)+40>>2]|0,0,0)|0;if(!d){d=c[b>>2]&3;d=Rx(a,c[((d|0)==2?b:g)+40>>2]|0,c[((d|0)==3?b:f)+40>>2]|0,0,1)|0}g=c[b+16>>2]|0;ek(d,e[g+170>>1]|0,c[g+156>>2]|0);dz(a,b)|0;return}function ek(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0;a=c[a+16>>2]|0;g=a+170|0;h=e[g>>1]|0;b[g>>1]=(h|0)>(d|0)?h:d;d=a+156|0;c[d>>2]=(c[d>>2]|0)+f;return}function fk(a){a=a|0;return (RL(xx(a,87167)|0,0)|0)&255|0}function gk(b){b=b|0;var d=0,e=0;d=c[46419]|0;if((((d|0)!=0?(e=yx(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0)?(QL(e)|0)<<24>>24==0:0)b=1;else b=0;return b|0}function hk(a){a=a|0;var b=0,d=0;d=c[a>>2]&3;b=c[(c[(c[((d|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;a=c[(c[(c[((d|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0)+212>>2]|0;if((b|0)==(a|0))return 1;else{d=kk(b,a)|0;return ((d|0)==(b|0)|(d|0)==(a|0))&1|0}return 0}function ik(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;h=j;g=Rx(a,b,d,0,0)|0;if(!g){g=Rx(a,d,b,0,0)|0;if(!g){g=Rx(a,b,d,0,1)|0;if(!g){b=ry(b)|0;f=ry(d)|0;c[h>>2]=b;c[h+4>>2]=f;Pw(1,87184,h)|0}else i=4}else i=4}else i=4;if((i|0)==4){i=c[f+16>>2]|0;ek(g,e[i+170>>1]|0,c[i+156>>2]|0)}l=j;return}function jk(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+112|0;j=m;i=m+4|0;h=Hx(a,d)|0;while(1){if(!h){k=6;break}n=Ex(a,c[((c[h>>2]&3|0)==3?h:h+48|0)+40>>2]|0)|0;if(n|0?(c[((c[n>>2]&3|0)==2?n:n+-48|0)+40>>2]|0)==(f|0):0)break;h=Ix(a,h)|0}if((k|0)==6){n=c[45978]|0;c[45978]=n+1;c[j>>2]=n;Y0(i,87175,j)|0;i=bk(a,i)|0;n=Rx(a,i,d,0,1)|0;i=Rx(a,i,f,0,1)|0;f=c[g+16>>2]|0;k=f+156|0;n=(c[n+16>>2]|0)+156|0;c[n>>2]=(c[n>>2]|0)+((c[k>>2]|0)*1e3|0);n=c[i+16>>2]|0;j=n+170|0;b[j>>1]=b[(c[((e[j>>1]|0)>(e[f+170>>1]|0)?i:g)+16>>2]|0)+170>>1]|0;n=n+156|0;c[n>>2]=(c[n>>2]|0)+(c[k>>2]|0)}l=m;return}function kk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a:while(1){e=a+16|0;while(1){if((a|0)==(b|0))break a;f=c[e>>2]|0;d=c[b+16>>2]|0;if((c[f+204>>2]|0)>=(c[d+204>>2]|0))break;b=c[d+200>>2]|0}a=c[f+200>>2]|0}return a|0}function lk(a){a=a|0;return (Sy(a)|0)==0|0}function mk(a,b){a=a|0;b=b|0;c[(c[a+16>>2]|0)+200>>2]=b;Nj(b,a);Mj(b,a);return}function nk(b){b=b|0;var c=0;b=xx(b,87076)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0)if(b$(b,87086)|0)if(b$(b,87090)|0)if(b$(b,87097)|0)if(b$(b,87101)|0)if(!(b$(b,87081)|0))b=1;else c=8;else b=5;else b=4;else b=3;else b=2;else c=8;if((c|0)==8)b=6;return b|0}function ok(a){a=a|0;var b=0,c=0;c=Sy(a)|0;a:do if(!c)b=0;else{b=_j(c)|0;while(1){c=Ty(a,c)|0;if(!c)break a;pk(b,c)|0}}while(0);return b|0}function pk(a,b){a=a|0;b=b|0;if(b){a=_j(a)|0;c[(c[(_j(b)|0)+16>>2]|0)+152>>2]=a}return a|0}function qk(a,b,d){a=a|0;b=b|0;d=d|0;Az(b,87135,c[d>>2]|0,1)|0;return}function rk(a,b,d){a=a|0;b=b|0;d=d|0;Az(b,87302,c[d+4>>2]|0,1)|0;return}function sk(a,b,d){a=a|0;b=b|0;d=d|0;Az(b,87287,c[d+8>>2]|0,1)|0;return}function tk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+240|0;m=p+120|0;n=p;c[46423]=nx(b,2,87317,0)|0;k=nx(b,2,87326,0)|0;c[46424]=k;a:do if((k|0)!=0|(c[46423]|0)!=0){k=Sy(b)|0;while(1){if(!k)break a;j=0;d=0;i=Jx(b,k)|0;while(1){if(!i){f=0;break}e=c[i>>2]|0;g=e&3;f=c[((g|0)==2?i:i+-48|0)+40>>2]|0;h=i+48|0;b:do if((f|0)!=(c[((g|0)==3?i:h)+40>>2]|0)){g=c[46423]|0;do if((f|0)==(k|0)&(g|0)!=0){f=yx(i,g)|0;if(!(a[f>>0]|0)){e=c[i>>2]|0;break}else{e=j;d=uk(m,d,k,i,f)|0;break b}}while(0);f=c[46424]|0;if((f|0?(c[((e&3|0)==3?i:h)+40>>2]|0)==(k|0):0)?(o=yx(i,f)|0,(a[o>>0]|0)!=0):0)e=uk(n,j,k,i,o)|0;else e=j}else e=j;while(0);j=e;i=Kx(b,i,k)|0}while(1){if((f|0)>=(d|0)){e=0;break}e=m+(f*24|0)+4|0;if((c[m+(f*24|0)+8>>2]|0)>1)vk(k,e);e=c[e>>2]|0;if(e|0)D_(e);f=f+1|0}while(1){if((e|0)>=(j|0))break;d=n+(e*24|0)+4|0;if((c[n+(e*24|0)+8>>2]|0)>1)vk(k,d);d=c[d>>2]|0;if(d|0)D_(d);e=e+1|0}k=Ty(b,k)|0}}while(0);l=p;return}function uk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+16|0;k=p;m=p+12|0;n=p+8|0;o=0;while(1){if((o|0)>=(d|0)){j=10;break}j=c[b+(o*24|0)>>2]|0;if((a[j>>0]|0)==(a[g>>0]|0)?(b$(j,g)|0)==0:0){j=5;break}o=o+1|0}do if((j|0)==5){k=b+(o*24|0)+4|0;j=c[k>>2]|0;if(!j){j=b+(o*24|0)+8|0;g=j;j=vH((c[j>>2]<<2)+8|0)|0}else{q=b+(o*24|0)+8|0;g=q;j=xH(j,(c[q>>2]<<2)+8|0)|0}c[k>>2]=j;r=c[g>>2]|0;q=r+1|0;c[g>>2]=q;c[j+(r<<2)>>2]=f;c[(c[k>>2]|0)+(q<<2)>>2]=0;j=13}else if((j|0)==10)if((d|0)>4){r=ry(e)|0;c[k>>2]=5;c[k+4>>2]=r;Pw(1,87335,k)|0;break}else{s=b+(o*24|0)+8|0;c[s>>2]=0;k=uH(8)|0;r=b+(o*24|0)+4|0;c[r>>2]=k;q=c[s>>2]|0;j=q+1|0;c[s>>2]=j;c[k+(q<<2)>>2]=f;c[(c[r>>2]|0)+(j<<2)>>2]=0;c[b+(o*24|0)>>2]=g;c[b+(o*24|0)+12>>2]=0;h[b+(o*24|0)+16>>3]=0.0;d=d+1|0;j=13;break}while(0);if((j|0)==13){sE(f,m,n);j=(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)==(e|0)?c[n>>2]|0:c[m>>2]|0;if(j){r=b+(o*24|0)+12|0;s=c[r>>2]|0;c[r>>2]=s+1;if(!s)i=+wE(f,j);else i=0.0;h[b+(o*24|0)+16>>3]=i}}l=p;return d|0}function vk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=l;l=l+80|0;t=x+68|0;u=x+64|0;r=x;v=d+4|0;n=c[v>>2]|0;w=b+16|0;i=0;p=0.0;q=0.0;while(1){if((i|0)>=(n|0))break;f=c[(c[d>>2]|0)+(i<<2)>>2]|0;g=c[f>>2]&3;e=c[((g|0)==2?f:f+-48|0)+40>>2]|0;if((e|0)==(b|0))e=c[((g|0)==3?f:f+48|0)+40>>2]|0;g=c[e+16>>2]|0;s=c[w>>2]|0;k=+h[g+16>>3]-+h[s+16>>3];m=+h[g+24>>3]-+h[s+24>>3];o=+u$(k,m);i=i+1|0;p=k/o+p;q=m/o+q}j=+u$(p,q);s=c[w>>2]|0;k=+h[s+16>>3];m=+h[s+24>>3];y=+h[s+96>>3]+ +h[s+88>>3];o=+h[s+80>>3];s=y>o+ +(c[(c[(ez(b)|0)+16>>2]|0)+252>>2]|0);e=c[w>>2]|0;if(s)o=+h[e+96>>3]+ +h[e+88>>3];else{o=+h[e+80>>3];o=o+ +(c[(c[(ez(b)|0)+16>>2]|0)+252>>2]|0);e=c[w>>2]|0}y=+h[e+16>>3]+o*(p/j);j=+h[e+24>>3]+o*(q/j);h[r>>3]=k;n=r+8|0;h[n>>3]=m;h[r+16>>3]=(y+k*2.0)*.3333333333333333;h[r+24>>3]=(j+m*2.0)*.3333333333333333;h[r+32>>3]=(y*2.0+k)*.3333333333333333;h[r+40>>3]=(j*2.0+m)*.3333333333333333;h[r+48>>3]=y;h[r+56>>3]=j;NK(b,r);s=c[w>>2]|0;j=+h[r>>3]-+h[s+16>>3];k=+h[n>>3]-+h[s+24>>3];j=+(~~(j+(j>=0.0?.5:-.5))|0);k=+(~~(k+(k>=0.0?.5:-.5))|0);y=+h[s+88>>3];s=~~((y+j)*256.0/(+h[s+96>>3]+y))&255;r=0;while(1){if((r|0)>=(c[v>>2]|0))break;n=c[(c[d>>2]|0)+(r<<2)>>2]|0;sE(n,t,u);while(1){if(!n)break;else g=n;while(1){if(!g){i=n;break}e=c[g>>2]|0;i=g+-48|0;if((c[((e&3|0)==2?g:i)+40>>2]|0)==(b|0)){e=c[g+16>>2]|0;h[e+56>>3]=j;h[e+64>>3]=k;h[e+72>>3]=0.0;c[e+80>>2]=0;a[e+84>>0]=1;a[e+85>>0]=0;a[e+86>>0]=0;a[e+87>>0]=0;a[e+88>>0]=s;a[e+89>>0]=0;c[e+92>>2]=0;e=c[g>>2]|0}f=g+16|0;if((c[((e&3|0)==3?g:g+48|0)+40>>2]|0)==(b|0)){e=c[f>>2]|0;h[e+16>>3]=j;h[e+24>>3]=k;h[e+32>>3]=0.0;c[e+40>>2]=0;a[e+44>>0]=1;a[e+45>>0]=0;a[e+46>>0]=0;a[e+47>>0]=0;a[e+48>>0]=s;a[e+49>>0]=0;c[e+52>>2]=0}if((a[(c[f>>2]|0)+112>>0]|0)!=1){g=0;continue}e=c[(c[((c[g>>2]&3|0)==2?g:i)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){g=0;continue}if((c[e+184>>2]|0)!=1){g=0;continue}g=c[c[e+180>>2]>>2]|0}while(1){if(!i)break;e=c[i>>2]|0;if((c[((e&3|0)==2?i:i+-48|0)+40>>2]|0)==(b|0)){e=c[i+16>>2]|0;h[e+56>>3]=j;h[e+64>>3]=k;h[e+72>>3]=0.0;c[e+80>>2]=0;a[e+84>>0]=1;a[e+85>>0]=0;a[e+86>>0]=0;a[e+87>>0]=0;a[e+88>>0]=s;a[e+89>>0]=0;c[e+92>>2]=0;e=c[i>>2]|0}f=i+48|0;g=i+16|0;if((c[((e&3|0)==3?i:f)+40>>2]|0)==(b|0)){e=c[g>>2]|0;h[e+16>>3]=j;h[e+24>>3]=k;h[e+32>>3]=0.0;c[e+40>>2]=0;a[e+44>>0]=1;a[e+45>>0]=0;a[e+46>>0]=0;a[e+47>>0]=0;a[e+48>>0]=s;a[e+49>>0]=0;c[e+52>>2]=0}if((a[(c[g>>2]|0)+112>>0]|0)!=1){i=0;continue}e=c[(c[((c[i>>2]&3|0)==3?i:f)+40>>2]|0)+16>>2]|0;if((a[e+156>>0]|0)!=1){i=0;continue}if((c[e+176>>2]|0)!=1){i=0;continue}i=c[c[e+172>>2]>>2]|0}n=c[(c[n+16>>2]|0)+172>>2]|0}r=r+1|0}a[(c[w>>2]|0)+145>>0]=1;l=x;return}function wk(a){a=a|0;var b=0,d=0,e=0;kh(a);b=c[a>>2]&3;d=a+-48|0;e=a+48|0;b=fh(c[((b|0)==2?a:d)+40>>2]|0,c[((b|0)==3?a:e)+40>>2]|0)|0;if(!b){b=c[a>>2]&3;ph(c[((b|0)==2?a:d)+40>>2]|0,c[((b|0)==3?a:e)+40>>2]|0,a)|0}else xh(a,b);return}function xk(b){b=b|0;var d=0,e=0,f=0,g=0;f=b+16|0;e=0;while(1){b=c[f>>2]|0;if((e|0)>=(c[b+220>>2]|0))break;d=c[(c[b+216>>2]|0)+(e<<2)>>2]|0;c[b+192>>2]=d;b=d;d=b;while(1){if(!d)break;g=c[d+16>>2]|0;a[g+157>>0]=0;d=c[g+164>>2]|0}while(1){if(!b)break;yk(b);b=c[(c[b+16>>2]|0)+164>>2]|0}e=e+1|0}return}function yk(b){b=b|0;var d=0,e=0,f=0,g=0;g=b+16|0;d=c[g>>2]|0;b=d+157|0;if(!(a[b>>0]|0)){a[b>>0]=1;a[d+158>>0]=1;b=0;while(1){f=c[(c[d+180>>2]|0)+(b<<2)>>2]|0;if(!f)break;d=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;e=c[d+16>>2]|0;if(!(a[e+158>>0]|0)){if(!(a[e+157>>0]|0))yk(d)}else{wk(f);b=b+-1|0}b=b+1|0;d=c[g>>2]|0}a[d+158>>0]=0}return}function zk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=Sy(a)|0;b=0;while(1){if(!e)break;d=Ex(a,e)|0;while(1){if(!d)break;g=c[d>>2]&3;h=c[(c[(c[((g|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;g=c[(c[(c[((g|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;f=h-g|0;d=Gx(a,d)|0;b=((h|0)==(g|0)?0:((f|0)>-1?f:0-f|0)+-1|0)+b|0}e=Ty(a,e)|0}return b|0}function Ak(b){b=b|0;var d=0,e=0,f=0,g=0;e=Sy(b)|0;while(1){if(!e)break;g=c[e+16>>2]|0;f=c[g+176>>2]|0;g=g+172|0;d=0;while(1){if((d|0)>=(f|0))break;a[(c[(c[(c[g>>2]|0)+(d<<2)>>2]|0)+16>>2]|0)+112>>0]=0;d=d+1|0}e=Ty(b,e)|0}return}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;o=q;j=c[b+24>>2]|0;Ck(a);k=(j|0)==-1;m=b+8|0;i=k^1;n=c[15686]|0;f=1797693134862315708145274.0e284;g=0;while(1){if(!(k|(g|0)<(j|0)))break;d=Sy(a)|0;while(1){if(!d)break;c[(c[d+16>>2]|0)+232>>2]=0;d=Ty(a,d)|0}yj(a);e=+Dk(a);h[m>>3]=e;if(0){h[o>>3]=e;g1(n,87387,o)|0;e=+h[m>>3]}if(!(!(e<=+h[b>>3])&(!(f<=e)|i))){p=9;break}Ek(a);f=e;g=g+1|0}if((p|0)==9){p=b+20|0;c[b+16>>2]=c[p>>2];c[p>>2]=g}yj(a);Fk(a);Gk();h[m>>3]=+Dk(a);l=q;return}function Ck(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0.0,m=0.0,n=0;c[45982]=vH((ay(a)|0)*24|0)|0;c[45981]=0;b=Sy(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+120>>2]=-1;b=Ty(a,b)|0}i=Sy(a)|0;while(1){if(!i)break;j=i+16|0;do if(!(c[(c[j>>2]|0)+216>>2]|0)){f=uH(4)|0;g=c[45982]|0;k=c[45981]|0;c[g+(k*24|0)>>2]=f;c[f>>2]=i;c[g+(k*24|0)+4>>2]=1;j=c[j>>2]|0;h[g+(k*24|0)+8>>3]=+h[j+32>>3];h[g+(k*24|0)+16>>3]=+h[j+40>>3];c[j+120>>2]=k;c[45981]=k+1}else{g=SL(i)|0;k=g+16|0;b=c[k>>2]|0;d=c[b+120>>2]|0;if((d|0)>-1){g=c[45982]|0;f=c[g+(d*24|0)>>2]|0;e=g+(d*24|0)+4|0;k=c[e>>2]|0;c[e>>2]=k+1;c[f+(k<<2)>>2]=i;k=c[j>>2]|0;j=g+(d*24|0)+8|0;h[j>>3]=+h[j>>3]+ +h[k+32>>3];j=g+(d*24|0)+16|0;l=+h[j>>3];m=+h[k+40>>3];h[j>>3]=l<m?m:l;c[k+120>>2]=d;break}d=uH(c[b+216>>2]<<2)|0;e=c[45982]|0;f=c[45981]|0;b=e+(f*24|0)|0;c[b>>2]=d;c[d>>2]=g;if((g|0)==(i|0)){h[e+(f*24|0)+8>>3]=+h[(c[k>>2]|0)+32>>3];d=1;b=i}else{c[(c[b>>2]|0)+4>>2]=i;n=c[k>>2]|0;b=c[j>>2]|0;h[e+(f*24|0)+8>>3]=+h[b+32>>3]+ +h[n+32>>3];d=2;b=+h[n+40>>3]<+h[b+40>>3]?i:g}c[e+(f*24|0)+4>>2]=d;h[e+(f*24|0)+16>>3]=+h[(c[b+16>>2]|0)+40>>3];c[(c[k>>2]|0)+120>>2]=f;c[(c[j>>2]|0)+120>>2]=f;c[45981]=f+1}while(0);i=Ty(a,i)|0}return}function Dk(a){a=a|0;var b=0.0,d=0.0,e=0,f=0,g=0,i=0.0,j=0.0;Fk(a);g=c[45979]|0;e=c[a+16>>2]|0;b=+(O(c[e+252>>2]|0,g+-1|0)|0);f=c[45980]|0;e=e+248|0;a=0;d=0.0;while(1){if((a|0)>=(g|0))break;i=+h[f+(a*40|0)+24>>3]+ +(O(c[e>>2]|0,c[f+(a*40|0)+16>>2]|0)|0);j=+h[f+(a*40|0)+32>>3]+b;a=a+1|0;b=j;d=d<i?i:d}return +(d/b)}function Ek(a){a=a|0;var b=0;c[45983]=uH((ay(a)|0)<<2)|0;b=0;while(1){if((b|0)>=(ay(a)|0))break;c[(c[45983]|0)+(b<<2)>>2]=b;b=b+1|0}Fk(a);Hk(a);Ik(a);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0,k=0,l=0;c[45979]=0;b=c[45980]|0;if(b|0){e=0;while(1){if((e|0)>=(c[45981]|0))break;d=c[b+(e*40|0)+4>>2]|0;if(d){D_(d);b=c[45980]|0}d=c[b+(e*40|0)+8>>2]|0;if(d){D_(d);b=c[45980]|0}e=e+1|0}D_(b)}c[45980]=uH((c[45981]|0)*40|0)|0;b=0;while(1){d=c[45981]|0;if((b|0)>=(d|0))break;k=uH(d<<2)|0;c[(c[45980]|0)+(b*40|0)+4>>2]=k;k=uH(c[45981]<<2)|0;l=c[45980]|0;c[l+(b*40|0)+8>>2]=k;c[l+(b*40|0)>>2]=b;c[l+(b*40|0)+12>>2]=0;c[l+(b*40|0)+16>>2]=0;l=l+(b*40|0)+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;b=b+1|0}e=Sy(a)|0;while(1){if(!e)break;d=Ex(a,e)|0;while(1){if(!d)break;i=c[d>>2]|0;f=d+-48|0;g=c[45980]|0;b=c[(c[(c[((i&3|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){b=b+1|0;if((b|0)>=(c[(c[(c[((i&3|0)==2?d:f)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;i=g+(b*40|0)+16|0;c[i>>2]=(c[i>>2]|0)+1;i=c[d>>2]|0}d=Gx(a,d)|0}e=Ty(a,e)|0}i=c[45981]|0;k=c[45982]|0;l=c[45980]|0;d=a+16|0;b=0;while(1){if((b|0)>=(i|0))break;e=(c[c[k+(b*24|0)>>2]>>2]|0)+16|0;f=c[(c[e>>2]|0)+232>>2]|0;if((f|0)>=(c[45979]|0))c[45979]=f+1;g=l+(f*40|0)+24|0;j=+h[g>>3];h[g>>3]=j+ +h[k+(b*24|0)+8>>3]*72.0+(j>0.0?+(c[(c[d>>2]|0)+248>>2]|0):0.0);g=l+(f*40|0)+32|0;j=+h[k+(b*24|0)+16>>3]*72.0;if(+h[g>>3]<j)h[g>>3]=j;c[(c[l+(f*40|0)+4>>2]|0)+(c[l+(f*40|0)+12>>2]<<2)>>2]=k+(b*24|0);a=l+((c[(c[e>>2]|0)+232>>2]|0)*40|0)+12|0;c[a>>2]=(c[a>>2]|0)+1;b=b+1|0}return}function Gk(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=c[45979]|0;l=c[45980]|0;j=0;b=0;a=0;while(1){if((j|0)>=(k|0))break;d=l+(j*40|0)|0;i=c[l+(j*40|0)+12>>2]|0;e=(b|0)==0;a:do if(i)if(!e){if((c[d>>2]|0)>(a|0)){f=l+(j*40|0)+4|0;d=0;while(1){if((d|0)>=(i|0))break a;g=c[(c[f>>2]|0)+(d<<2)>>2]|0;h=c[g+4>>2]|0;e=0;while(1){if((e|0)>=(h|0))break;m=(c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+232|0;c[m>>2]=(c[m>>2]|0)-b;e=e+1|0}d=d+1|0}}}else b=0;else{if(e)a=c[d>>2]|0;b=b+1|0}while(0);j=j+1|0}return}function Hk(a){a=a|0;var b=0;b=c[45983]|0;_0(b,ay(a)|0,4,63);return}function Ik(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0;j=c[45979]|0;k=c[45980]|0;g=c[45983]|0;i=0;while(1){if((i|0)>=(j|0)){e=0;d=0.0;break}e=c[g+(i<<2)>>2]|0;f=i+1|0;if((c[k+(e*40|0)+12>>2]|0)<2)i=f;else{l=4;break}}if((l|0)==4)if((j|0)>(f|0))d=+h[k+((c[g+(f<<2)>>2]|0)*40|0)+24>>3];else d=0.0;a:do if((i|0)!=(j|0)){_0(c[k+(e*40|0)+4>>2]|0,c[k+(e*40|0)+12>>2]|0,4,64);g=c[45980]|0;r=+h[g+(e*40|0)+24>>3];r=!(d<=r*.25)&!(d>=r*.75)?d:r*.5;s=c[g+(e*40|0)+12>>2]|0;q=b+16|0;n=0;o=0;d=0.0;f=0;p=0;while(1){if((p|0)>=(f+s|0))break a;do if(!(c[(c[g+(e*40|0)+8>>2]|0)+(p<<2)>>2]|0)){l=c[(c[g+(e*40|0)+4>>2]|0)+(p<<2)>>2]|0;b=l+8|0;m=+h[b>>3]*72.0+d+(d>0.0?+(c[(c[q>>2]|0)+248>>2]|0):0.0);i=(o|0)!=0;if(!(i&!(m<=r))){j=i?n:l;i=i?o:1;d=m;break}j=n+4|0;k=l+4|0;i=0;while(1){if((i|0)<(c[j>>2]|0))g=0;else break;while(1){if((g|0)>=(c[k>>2]|0))break;a[(c[(ph(c[(c[n>>2]|0)+(i<<2)>>2]|0,c[(c[l>>2]|0)+(g<<2)>>2]|0,0)|0)+16>>2]|0)+112>>0]=1;g=g+1|0}i=i+1|0}g=c[45980]|0;c[(c[g+(e*40|0)+8>>2]|0)+(p<<2)>>2]=1;j=g+(e*40|0)+12|0;c[j>>2]=(c[j>>2]|0)+-1;j=g+(e*40|0)+16|0;c[j>>2]=(c[j>>2]|0)+1;j=g+(e*40|0)+24|0;h[j>>3]=+h[b>>3]*-72.0-+(c[(c[q>>2]|0)+248>>2]|0)+ +h[j>>3];j=n;i=o}else{j=n;i=o;f=f+1|0}while(0);n=j;o=i;p=p+1|0}}while(0);return}function Jk(a,b){a=a|0;b=b|0;a=Kk(c[a>>2]|0)|0;b=Kk(c[b>>2]|0)|0;return ((b|0)<(a|0)&1)-((b|0)>(a|0)&1)|0}function Kk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=a+4|0;d=0;b=0;while(1){if((d|0)>=(c[f>>2]|0))break;e=c[(c[a>>2]|0)+(d<<2)>>2]|0;g=ez(e)|0;e=Ex(g,e)|0;while(1){if(!e)break;e=Gx(g,e)|0;b=b+1|0}d=d+1|0}return b|0}function Lk(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0;f=c[45980]|0;e=+h[f+((c[b>>2]|0)*40|0)+24>>3];d=+h[f+((c[a>>2]|0)*40|0)+24>>3];return (e>d&1)-(e<d&1)|0}function Mk(a){a=a|0;var b=0;b=Sy(a)|0;while(1){if(!b)break;c[(c[b+16>>2]|0)+216>>2]=0;b=Ty(a,b)|0}return}function Nk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+32|0;f=g+16|0;e=g+8|0;d=g+20|0;c[d>>2]=5;a=xx(a,96579)|0;if(a|0?(c[e>>2]=g,c[e+4>>2]=d,(N1(a,87402,e)|0)>=1):0)Pw(0,87409,f)|0;c[b+24>>2]=0;c[b+32>>2]=0;l=g;return 0}function Ok(b){b=b|0;var d=0,e=0;d=c[46419]|0;if((((d|0)!=0?(e=yx(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0)?(QL(e)|0)<<24>>24==0:0)b=1;else b=0;return b|0}function Pk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;il(a);b=Sy(a)|0;while(1){if(!b)break;d=Ex(a,b)|0;while(1){if(!d)break;do if(((c[(c[d+16>>2]|0)+172>>2]|0)==0?(Ok(d)|0)==0:0)?(e=d+48|0,f=SL(c[((c[d>>2]&3|0)==3?d:e)+40>>2]|0)|0,g=d+-48|0,h=SL(c[((c[d>>2]&3|0)==2?d:g)+40>>2]|0)|0,(f|0)!=(h|0)):0){if((c[(c[f+16>>2]|0)+212>>2]|0)==0?(c[(c[h+16>>2]|0)+212>>2]|0)==0:0){i=fh(f,h)|0;if(!i){ph(f,h,d)|0;break}else{xh(d,i);break}}i=c[d>>2]&3;Qk(a,c[((i|0)==3?d:e)+40>>2]|0,c[((i|0)==2?d:g)+40>>2]|0,d)}while(0);d=Gx(a,d)|0}b=Ty(a,b)|0}return}function Qk(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=c[g>>2]&3;h=c[(c[((j|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0;i=c[h+212>>2]|0;if(!i)k=0;else k=(c[h+232>>2]|0)-(c[(c[(c[(c[i+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)|0;h=c[(c[((j|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0;i=c[h+212>>2]|0;if(!i)h=0;else h=(c[(c[(c[(c[i+16>>2]|0)+264>>2]|0)+16>>2]|0)+232>>2]|0)-(c[h+232>>2]|0)|0;j=g+16|0;k=h+k+(e[(c[j>>2]|0)+170>>1]|0)|0;b=uh(b)|0;a[(c[b+16>>2]|0)+156>>0]=2;i=SL(d)|0;d=SL(f)|0;f=$i(b,i,(k|0)>0?0.0:+(0-k|0),(c[(c[j>>2]|0)+156>>2]|0)*10|0)|0;c[(c[($i(b,d,+(((k|0)>0?k:0)|0),c[(c[j>>2]|0)+156>>2]|0)|0)+16>>2]|0)+116>>2]=g;c[(c[f+16>>2]|0)+116>>2]=g;return}function Rk(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=c[d>>2]&3;i=(j|0)==3?d:d+48|0;j=(j|0)==2?d:d+-48|0;j=c[(c[(c[((c[(c[(c[i+40>>2]|0)+16>>2]|0)+232>>2]|0)>(c[(c[(c[j+40>>2]|0)+16>>2]|0)+232>>2]|0)?i:j)+40>>2]|0)+16>>2]|0)+232>>2]|0;i=d+16|0;d=(c[i>>2]|0)+172|0;if(c[d>>2]|0)qa(87498,87520,148,87529);c[d>>2]=f;h=(g|0)==0;do{d=c[i>>2]|0;if(h)g=c[f+16>>2]|0;else{g=c[f+16>>2]|0;k=g+168|0;b[k>>1]=(e[k>>1]|0)+(e[d+168>>1]|0)}k=g+154|0;b[k>>1]=(e[k>>1]|0)+(e[d+154>>1]|0);g=g+156|0;c[g>>2]=(c[g>>2]|0)+(c[d+156>>2]|0);d=f+-48|0;g=c[((c[f>>2]&3|0)==2?f:d)+40>>2]|0;if((c[(c[g+16>>2]|0)+232>>2]|0)==(j|0))break;Sk(a,g);f=c[c[(c[(c[((c[f>>2]&3|0)==2?f:d)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((f|0)!=0);return}function Sk(a,b){a=a|0;b=b|0;var d=0.0;d=+((c[(c[a+16>>2]|0)+248>>2]|0)/2|0|0);b=c[b+16>>2]|0;a=b+88|0;h[a>>3]=+h[a>>3]+d;b=b+96|0;h[b>>3]=+h[b>>3]+d;return}function Tk(a,b){a=a|0;b=b|0;var d=0,e=0;if(((((a|0)!=0&(b|0)!=0?(e=c[a>>2]&3,d=c[b>>2]&3,(c[((e|0)==3?a:a+48|0)+40>>2]|0)==(c[((d|0)==3?b:b+48|0)+40>>2]|0)):0)?(c[((e|0)==2?a:a+-48|0)+40>>2]|0)==(c[((d|0)==2?b:b+-48|0)+40>>2]|0):0)?(c[(c[a+16>>2]|0)+96>>2]|0)==(c[(c[b+16>>2]|0)+96>>2]|0):0)?(wj(a,b)|0)!=0:0)a=1;else a=0;return a|0}function Uk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=b+16|0;d=c[r>>2]|0;c[d+192>>2]=0;c[d+232>>2]=0;il(b);d=1;while(1){e=c[r>>2]|0;if((d|0)>(c[e+180>>2]|0))break;jl(b,c[(c[e+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}h=Sy(b)|0;while(1){if(!h)break;g=Ex(b,h)|0;while(1){if(!g)break;d=c[g>>2]|0;e=(c[(c[((d&3|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+160|0;f=a[e>>0]|0;if(f<<24>>24<3){a[e>>0]=f+1<<24>>24;d=c[g>>2]|0}d=(c[(c[((d&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+160|0;e=a[d>>0]|0;if(e<<24>>24<3)a[d>>0]=e+1<<24>>24;g=Gx(b,g)|0}h=Ty(b,h)|0}m=Sy(b)|0;while(1){if(!m)break;if((c[(c[m+16>>2]|0)+212>>2]|0)==0?(m|0)==(SL(m)|0):0){qh(b,m);l=(c[r>>2]|0)+232|0;c[l>>2]=(c[l>>2]|0)+1}d=0;l=Ex(b,m)|0;while(1){if(!l)break;k=l+16|0;h=c[k>>2]|0;a:do if(!(c[h+172>>2]|0)){if(Vk(l)|0){if(!(Tk(d,l)|0)){Wk(b,l);d=l;break}e=c[(c[d+16>>2]|0)+172>>2]|0;if(e|0){Rk(b,l,e,0);lh(l);break}k=c[l>>2]&3;if((c[(c[(c[((k|0)==3?l:l+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)!=(c[(c[(c[((k|0)==2?l:l+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;xh(l,d);lh(l);break}if(d){i=c[l>>2]&3;e=l+48|0;f=c[((i|0)==3?l:e)+40>>2]|0;g=c[d>>2]&3;if((f|0)==(c[((g|0)==3?d:d+48|0)+40>>2]|0)?(n=c[((i|0)==2?l:l+-48|0)+40>>2]|0,(n|0)==(c[((g|0)==2?d:d+-48|0)+40>>2]|0)):0){if((c[(c[f+16>>2]|0)+232>>2]|0)==(c[(c[n+16>>2]|0)+232>>2]|0)){xh(l,d);lh(l);break}if(((c[h+96>>2]|0)==0?(o=d+16|0,(c[(c[o>>2]|0)+96>>2]|0)==0):0)?(wj(l,d)|0)!=0:0)if(!(a[191874]|0)){Rk(b,l,c[(c[o>>2]|0)+172>>2]|0,1);lh(l);break}else{a[(c[k>>2]|0)+112>>0]=6;break}else i=e}else i=e}else i=l+48|0;h=c[l>>2]&3;e=c[((h|0)==3?l:i)+40>>2]|0;j=l+-48|0;if((e|0)==(c[((h|0)==2?l:j)+40>>2]|0)){lh(l);d=l;break}e=SL(e)|0;f=SL(c[((c[l>>2]&3|0)==2?l:j)+40>>2]|0)|0;h=c[l>>2]&3;if((c[((h|0)==3?l:i)+40>>2]|0)==(e|0)?(c[((h|0)==2?l:j)+40>>2]|0)==(f|0):0){g=c[(c[e+16>>2]|0)+232>>2]|0;h=c[(c[f+16>>2]|0)+232>>2]|0;if((g|0)==(h|0)){vh(b,l);d=l;break}if((h|0)>(g|0)){Xk(b,e,f,l);d=l;break}e=Rx(b,f,e,0,0)|0;do if(e|0?(p=c[e>>2]&3,q=c[((p|0)==2?e:e+-48|0)+40>>2]|0,(q|0)!=(c[((c[l>>2]&3|0)==2?l:j)+40>>2]|0)):0){f=e+16|0;if(!(c[(c[f>>2]|0)+172>>2]|0))Xk(b,c[((p|0)==3?e:e+48|0)+40>>2]|0,q,e);if((c[(c[k>>2]|0)+96>>2]|0)==0?(c[(c[f>>2]|0)+96>>2]|0)==0:0){if(!(wj(l,e)|0))break;if(!(a[191874]|0)){lh(l);Rk(b,l,c[(c[f>>2]|0)+172>>2]|0,1);break a}else{a[(c[k>>2]|0)+112>>0]=6;a[(c[f>>2]|0)+153>>0]=1;break a}}}while(0);d=c[l>>2]&3;Xk(b,c[((d|0)==2?l:j)+40>>2]|0,c[((d|0)==3?l:i)+40>>2]|0,l);d=l}}else d=l;while(0);l=Gx(b,l)|0}m=Ty(b,m)|0}if((ig(b)|0)!=(b|0)){d=c[(c[r>>2]|0)+216>>2]|0;if(!d)d=vH(4)|0;else d=xH(d,4)|0;r=c[r>>2]|0;c[r+216>>2]=d;c[d>>2]=c[r+192>>2]}return}function Vk(b){b=b|0;var d=0;d=c[b>>2]&3;if((a[(c[(c[((d|0)==3?b:b+48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7)b=1;else b=(a[(c[(c[((d|0)==2?b:b+-48|0)+40>>2]|0)+16>>2]|0)+159>>0]|0)==7&1;return b|0}function Wk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=_k(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)|0;g=_k(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)|0;i=(c[(c[f+16>>2]|0)+232>>2]|0)>(c[(c[g+16>>2]|0)+232>>2]|0);e=i?f:g;f=i?g:f;g=f+16|0;i=e+16|0;a:do if((c[(c[g>>2]|0)+212>>2]|0)!=(c[(c[i>>2]|0)+212>>2]|0)){h=fh(f,e)|0;if(h|0){Rk(b,d,h,1);break}if((c[(c[g>>2]|0)+232>>2]|0)!=(c[(c[i>>2]|0)+232>>2]|0)){Xk(b,f,e,d);e=(c[d+16>>2]|0)+172|0;while(1){e=c[e>>2]|0;if(!e)break a;f=e+-48|0;if((c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+232>>2]|0)>(c[(c[i>>2]|0)+232>>2]|0))break a;a[(c[e+16>>2]|0)+112>>0]=5;e=c[(c[(c[((c[e>>2]&3|0)==2?e:f)+40>>2]|0)+16>>2]|0)+180>>2]|0}}}while(0);return}function Xk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=e+16|0;f=c[k>>2]|0;if(!(c[f+96>>2]|0))j=-1;else j=((c[(c[d+16>>2]|0)+232>>2]|0)+(c[(c[b+16>>2]|0)+232>>2]|0)|0)/2|0;if(c[f+172>>2]|0)qa(87541,87520,89,87566);i=d+16|0;h=c[(c[b+16>>2]|0)+232>>2]|0;while(1){g=h+1|0;f=c[(c[i>>2]|0)+232>>2]|0;if((h|0)>=(f|0))break;if((g|0)<(f|0)){if((g|0)==(j|0))f=Yk(a,e)|0;else f=Zk(a)|0;c[(c[f+16>>2]|0)+232>>2]=g}else f=d;Ki(ph(b,f,e)|0);h=g;b=f}if(!(c[(c[k>>2]|0)+172>>2]|0))qa(87577,87520,103,87566);else return}function Yk(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0.0;i=d+16|0;g=c[(c[i>>2]|0)+96>>2]|0;e=+h[g+24>>3];f=+h[g+32>>3];g=uh(b)|0;d=g+16|0;c[(c[d>>2]|0)+104>>2]=c[(c[i>>2]|0)+96>>2];j=+(c[(c[(fz(g)|0)+16>>2]|0)+248>>2]|0);h[(c[d>>2]|0)+88>>3]=j;if(!(a[(c[i>>2]|0)+114>>0]|0)){b=(c[(c[(fz(b)|0)+16>>2]|0)+116>>2]&1|0)==0;i=c[d>>2]|0;h[i+80>>3]=b?f:e;h[i+96>>3]=b?e:f}return g|0}function Zk(a){a=a|0;var b=0;b=uh(a)|0;Sk(a,b);return b|0}function _k(b){b=b|0;var d=0;d=c[b+16>>2]|0;if((a[d+159>>0]|0)==7)b=c[(c[(c[(c[d+212>>2]|0)+16>>2]|0)+268>>2]|0)+(c[d+232>>2]<<2)>>2]|0;else b=SL(b)|0;return b|0}function $k(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=ig(a)|0;h=Sy(a)|0;while(1){if(!h)break;b=Jx(j,h)|0;i=0;while(1){if(!b)break;l=Kx(j,b,h)|0;if(oz(a,b)|0){k=i;b=l;i=k;continue}k=(c[b>>2]&3|0)==2?b:b+-48|0;m=(Tk(i,k)|0)==0;e=c[k>>2]&3;b=c[((e|0)==3?k:k+48|0)+40>>2]|0;d=c[(c[b+16>>2]|0)+232>>2]|0;e=c[((e|0)==2?k:k+-48|0)+40>>2]|0;f=c[(c[e+16>>2]|0)+232>>2]|0;g=(d|0)==(f|0);if(!m){c[(c[k+16>>2]|0)+172>>2]=g?i:0;b=c[(c[i+16>>2]|0)+172>>2]|0;if(!b){m=i;b=l;i=m;continue}Rk(a,k,b,0);mh(k);m=i;b=l;i=m;continue}if(!g)if((f|0)>(d|0)){al(b,e,k);b=l;i=k;continue}else{al(e,b,k);b=l;i=k;continue}b=hh(b,e)|0;if(!b){vh(j,k);b=l;i=k;continue}if((k|0)==(b|0)){m=i;b=l;i=m;continue}mh(k);if(c[(c[k+16>>2]|0)+172>>2]|0){m=i;b=l;i=m;continue}xh(k,b);m=i;b=l;i=m}h=Ty(a,h)|0}return}function al(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=bl(a)|0;e=bl(b)|0;cl(f,e,d,c[(c[d+16>>2]|0)+172>>2]|0,(f|0)==(a|0)&(e|0)==(b|0)?1:5);return}function bl(b){b=b|0;var d=0,e=0,f=0;d=c[b+16>>2]|0;e=c[d+212>>2]|0;if((e|0)!=0?(f=c[e+16>>2]|0,(a[f+272>>0]|0)==0):0)b=c[(c[f+268>>2]|0)+(c[d+232>>2]<<2)>>2]|0;return b|0}function cl(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=d+16|0;k=c[(c[n>>2]|0)+232>>2]|0;o=e+16|0;i=c[(c[o>>2]|0)+232>>2]|0;if((i|0)<=(k|0))qa(87602,87630,81,87640);m=c[g>>2]&3;if(!((c[((m|0)==3?g:g+48|0)+40>>2]|0)==(d|0)?(c[((m|0)==2?g:g+-48|0)+40>>2]|0)==(e|0):0))l=5;a:do if((l|0)==5){if((b[(c[g+16>>2]|0)+168>>1]|0)>1){c[(c[f+16>>2]|0)+172>>2]=0;if(((i-k|0)==1?(j=fh(d,e)|0,j|0):0)?wj(f,j)|0:0){xh(f,j);if(a[(c[n>>2]|0)+156>>0]|0)break;if(a[(c[o>>2]|0)+156>>0]|0)break;lh(f);break}m=h&255;h=d;l=c[(c[n>>2]|0)+232>>2]|0;while(1){i=c[(c[o>>2]|0)+232>>2]|0;if((l|0)>=(i|0))break a;if((l|0)<(i+-1|0)){i=ig(d)|0;j=g+-48|0;i=dl(i,c[((c[g>>2]&3|0)==2?g:j)+40>>2]|0)|0;k=g}else{i=e;j=g+-48|0;k=g}a[(c[(ph(h,i,f)|0)+16>>2]|0)+112>>0]=m;n=(c[g+16>>2]|0)+168|0;b[n>>1]=(b[n>>1]|0)+-1<<16>>16;h=i;l=l+1|0;g=c[c[(c[(c[((c[k>>2]&3|0)==2?g:j)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}}do if((i-k|0)==1){g=fh(d,e)|0;if(g|0?wj(f,g)|0:0){c[(c[f+16>>2]|0)+172>>2]=g;m=c[g+16>>2]|0;a[m+112>>0]=h;m=m+168|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16;if(a[(c[n>>2]|0)+156>>0]|0)break;if(a[(c[o>>2]|0)+156>>0]|0)break;lh(f);break}c[(c[f+16>>2]|0)+172>>2]=0;g=ph(d,e,f)|0;a[(c[g+16>>2]|0)+112>>0]=h}while(0);i=c[(c[o>>2]|0)+232>>2]|0;if((i-(c[(c[n>>2]|0)+232>>2]|0)|0)>1){if((c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)==(d|0))l=i;else{n=f+16|0;c[(c[n>>2]|0)+172>>2]=0;l=ph(d,c[((c[g>>2]&3|0)==2?g:g+-48|0)+40>>2]|0,f)|0;c[(c[n>>2]|0)+172>>2]=l;kh(g);g=l;l=c[(c[o>>2]|0)+232>>2]|0}while(1){i=c[g>>2]&3;j=c[((i|0)==2?g:g+-48|0)+40>>2]|0;k=c[j+16>>2]|0;if((c[k+232>>2]|0)==(l|0))break;g=c[c[k+180>>2]>>2]|0}if((j|0)!=(e|0)){a[(c[(ph(c[((i|0)==3?g:g+48|0)+40>>2]|0,e,f)|0)+16>>2]|0)+112>>0]=h;kh(g)}}}while(0);return}function dl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=b+16|0;b=c[d>>2]|0;e=c[b+232>>2]|0;el(a,e,c[b+236>>2]|0,2);b=uh(a)|0;d=c[d>>2]|0;f=c[b+16>>2]|0;h[f+88>>3]=+h[d+88>>3];h[f+96>>3]=+h[d+96>>3];c[f+232>>2]=c[d+232>>2];d=(c[d+236>>2]|0)+1|0;c[f+236>>2]=d;c[(c[(c[(c[a+16>>2]|0)+196>>2]|0)+(e<<6)+4>>2]|0)+(d<<2)>>2]=b;return b|0}function el(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=a+16|0;f=c[(c[h>>2]|0)+196>>2]|0;i=c[f+(b<<6)+4>>2]|0;a:do if((e|0)<1){d=d-e|0;while(1){g=d+1|0;a=c[f+(b<<6)>>2]|0;if((g|0)>=(a|0))break;a=c[i+(g<<2)>>2]|0;f=d+e|0;c[(c[a+16>>2]|0)+236>>2]=f;c[i+(f<<2)>>2]=a;d=g;f=c[(c[h>>2]|0)+196>>2]|0}g=e+-1|0;d=g+a|0;while(1){if((d|0)>=(a|0))break a;c[i+(d<<2)>>2]=0;f=c[(c[h>>2]|0)+196>>2]|0;d=d+1|0;a=c[f+(b<<6)>>2]|0}}else{g=e+-1|0;a=c[f+(b<<6)>>2]|0;while(1){a=a+-1|0;if((a|0)<=(d|0))break;j=c[i+(a<<2)>>2]|0;f=g+a|0;c[(c[j+16>>2]|0)+236>>2]=f;c[i+(f<<2)>>2]=j}f=e+d|0;a=d;while(1){a=a+1|0;if((a|0)>=(f|0))break;c[i+(a<<2)>>2]=0}a=c[(c[h>>2]|0)+196>>2]|0;f=a;a=c[a+(b<<6)>>2]|0}while(0);c[f+(b<<6)>>2]=g+a;return}function fl(a){a=a|0;var b=0;Uk(a);b=c[a+16>>2]|0;c[b+220>>2]=1;c[c[b+216>>2]>>2]=c[b+192>>2];Hi(a);mi(a,0);gl(a);$k(a);hl(a);return}function gl(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=ig(d)|0;l=d+16|0;f=c[l>>2]|0;j=b[f+236>>1]|0;e=j<<16>>16;m=k+16|0;if(j<<16>>16>0)a[(c[(c[m>>2]|0)+196>>2]|0)+(e+-1<<6)+49>>0]=0;j=e;while(1){if((j|0)>(b[f+238>>1]|0))break;i=c[(c[(c[(c[f+268>>2]|0)+(j<<2)>>2]|0)+16>>2]|0)+236>>2]|0;el(k,j,i,c[(c[f+196>>2]|0)+(j<<6)>>2]|0);g=0;h=i;while(1){f=c[l>>2]|0;e=c[f+196>>2]|0;if((g|0)>=(c[e+(j<<6)>>2]|0))break;e=c[(c[e+(j<<6)+4>>2]|0)+(g<<2)>>2]|0;c[(c[(c[(c[m>>2]|0)+196>>2]|0)+(j<<6)+4>>2]|0)+(h<<2)>>2]=e;f=c[e+16>>2]|0;c[f+236>>2]=h;if((a[f+156>>0]|0)==1)c[e+24>>2]=fz(k)|0;sh(d,e);qh(k,e);f=(c[m>>2]|0)+232|0;c[f>>2]=(c[f>>2]|0)+1;g=g+1|0;h=h+1|0}h=c[(c[m>>2]|0)+196>>2]|0;c[e+(j<<6)+4>>2]=(c[h+(j<<6)+4>>2]|0)+(i<<2);a[h+(j<<6)+49>>0]=0;j=j+1|0}e=c[m>>2]|0;if((j|0)<(b[e+238>>1]|0))a[(c[e+196>>2]|0)+(j<<6)+49>>0]=0;a[f+272>>0]=1;return}function hl(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+16|0;d=c[i>>2]|0;h=b[d+236>>1]|0;while(1){if((h|0)>(b[d+238>>1]|0))break;f=c[(c[d+268>>2]|0)+(h<<2)>>2]|0;g=f+16|0;while(1){d=c[g>>2]|0;e=c[c[d+180>>2]>>2]|0;if(!e)break;kh(e)}while(1){d=c[c[d+172>>2]>>2]|0;if(!d)break;kh(d);d=c[g>>2]|0}sh(ig(a)|0,f);c[(c[(c[i>>2]|0)+268>>2]|0)+(h<<2)>>2]=0;h=h+1|0;d=c[i>>2]|0}return}function il(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;f=Sy(b)|0;while(1){if(!f)break;e=f+16|0;d=c[e>>2]|0;if((a[d+159>>0]|0)==7){UL(f);d=c[e>>2]|0}c[d+212>>2]=0;f=Ty(b,f)|0}m=b+16|0;k=1;while(1){d=c[m>>2]|0;if((k|0)>(c[d+180>>2]|0))break;h=c[(c[d+184>>2]|0)+(k<<2)>>2]|0;i=h+16|0;d=Sy(h)|0;a:while(1){if(!d)break;j=Ty(h,d)|0;e=d+16|0;if(a[(c[e>>2]|0)+159>>0]|0){f=ry(d)|0;g=ry(b)|0;c[n>>2]=f;c[n+4>>2]=g;Pw(0,87649,n)|0;dz(h,d)|0;d=j;continue}VL(d,c[(c[i>>2]|0)+264>>2]|0);g=c[e>>2]|0;c[g+212>>2]=h;a[g+159>>0]=7;g=Ex(h,d)|0;while(1){if(!g){d=j;continue a}d=c[(c[g+16>>2]|0)+172>>2]|0;b:do if(d|0)do{e=d+-48|0;f=c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break b;c[f+212>>2]=h;d=c[c[(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);g=Gx(h,g)|0}}k=k+1|0}l=o;return}function jl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=e+16|0;g=uH((b[(c[k>>2]|0)+238>>1]<<2)+8|0)|0;f=c[k>>2]|0;c[f+268>>2]=g;g=0;h=b[f+236>>1]|0;while(1){if((h|0)>(b[f+238>>1]|0))break;f=uh(d)|0;c[(c[(c[k>>2]|0)+268>>2]|0)+(h<<2)>>2]=f;j=c[f+16>>2]|0;c[j+232>>2]=h;a[j+159>>0]=7;c[j+212>>2]=e;if(g|0){j=(c[(ph(g,f,0)|0)+16>>2]|0)+154|0;b[j>>1]=(b[j>>1]|0)*1e3}g=f;h=h+1|0;f=c[k>>2]|0}j=Sy(e)|0;while(1){f=c[k>>2]|0;if(!j)break;h=(c[(c[f+268>>2]|0)+(c[(c[j+16>>2]|0)+232>>2]<<2)>>2]|0)+16|0;f=(c[h>>2]|0)+216|0;c[f>>2]=(c[f>>2]|0)+1;f=Ex(e,j)|0;while(1){if(!f)break;i=c[f>>2]|0;d=f+-48|0;g=c[(c[(c[((i&3|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0;while(1){if((g|0)>=(c[(c[(c[((i&3|0)==2?f:d)+40>>2]|0)+16>>2]|0)+232>>2]|0))break;i=(c[(c[c[(c[h>>2]|0)+180>>2]>>2]|0)+16>>2]|0)+168|0;b[i>>1]=(b[i>>1]|0)+1<<16>>16;g=g+1|0;i=c[f>>2]|0}f=Gx(e,f)|0}j=Ty(e,j)|0}d=b[f+238>>1]|0;i=f+268|0;f=b[f+236>>1]|0;while(1){if((f|0)>(d|0))break;g=(c[(c[(c[i>>2]|0)+(f<<2)>>2]|0)+16>>2]|0)+216|0;h=c[g>>2]|0;if((h|0)>1)c[g>>2]=h+-1;f=f+1|0}return}function kl(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=(c[(c[e+16>>2]|0)+212>>2]|0)+16|0;e=c[k>>2]|0;j=f+1|0;if((j|0)!=(a[e+273>>0]|0)){i=b[e+236>>1]|0;while(1){h=b[e+238>>1]|0;if((i|0)>(h<<16>>16|0))break;Bi(d,c[(c[e+268>>2]|0)+(i<<2)>>2]|0);i=i+1|0;e=c[k>>2]|0}i=b[e+236>>1]|0;while(1){if((i|0)>(h<<16>>16|0))break;Ci(g,c[(c[e+268>>2]|0)+(i<<2)>>2]|0,f);d=c[k>>2]|0;i=i+1|0;h=b[d+238>>1]|0;e=d}a[e+273>>0]=j}return}function ll(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=Sy(b)|0;while(1){if(!h)break;c[(c[h+16>>2]|0)+212>>2]=0;g=Ex(b,h)|0;while(1){if(!g)break;d=c[(c[g+16>>2]|0)+172>>2]|0;a:do if(d|0)do{e=d+-48|0;f=c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break a;c[f+212>>2]=0;d=c[c[(c[(c[((c[d>>2]&3|0)==2?d:e)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);g=Gx(b,g)|0}h=Ty(b,h)|0}ml(b);return}function ml(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=b+16|0;d=1;while(1){f=c[e>>2]|0;if((d|0)>(c[f+180>>2]|0))break;ml(c[(c[f+184>>2]|0)+(d<<2)>>2]|0);d=d+1|0}i=Sy(b)|0;while(1){if(!i)break;d=(c[i+16>>2]|0)+212|0;if(!(c[d>>2]|0))c[d>>2]=b;h=Ex(b,i)|0;while(1){if(!h)break;d=c[(c[h+16>>2]|0)+172>>2]|0;a:do if(d|0)do{e=c[d>>2]|0;g=d+-48|0;f=c[(c[((e&3|0)==2?d:g)+40>>2]|0)+16>>2]|0;if((a[f+156>>0]|0)!=1)break a;f=f+212|0;if(!(c[f>>2]|0)){c[f>>2]=b;e=c[d>>2]|0}d=c[c[(c[(c[((e&3|0)==2?d:g)+40>>2]|0)+16>>2]|0)+180>>2]>>2]|0}while((d|0)!=0);while(0);h=Gx(b,h)|0}i=Ty(b,i)|0}return}function nl(a){a=a|0;var b=0,c=0,d=0;d=tM(a)|0;c=Sy(a)|0;while(1){if(!c)break;b=Ex(a,c)|0;while(1){if(!b)break;ol(b,d);b=Gx(a,b)|0}c=Ty(a,c)|0}yw(d)|0;return}\n  function yH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0,n=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;r=u+40|0;q=u+32|0;n=u+24|0;m=u;s=4;t=C_(40)|0;c[t>>2]=0;f=u+68|0;g=u+64|0;if(0){o=0;ka(62,a|0,f|0,g|0);i=o;o=0;if((i|0)!=0&(p|0)!=0){j=E3(c[i>>2]|0,t|0,s|0)|0;if(!j)bb(i|0,p|0);z=p}else j=-1;if((j|0)!=1){j=c[15686]|0;i=c[f>>2]|0;f=c[g>>2]|0;o=0;c[m>>2]=99176;c[m+4>>2]=i;c[m+8>>2]=f;c[m+12>>2]=d;c[m+16>>2]=b;ca(29,j|0,99132,m|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){o=0;ha(1);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1)j=6;else{f=z;j=15}}else{f=z;j=15}}else{f=z;j=15}}else j=6;do if((j|0)==6){o=0;f=$(27,a|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=E3(c[g>>2]|0,t|0,s|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)!=1){if(!f){o=0;ha(2);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}}if((d|0)<1){o=0;ha(3);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}f=0;break}else{c[46441]=(e|0)>-1?e:30;t=D3(185768,1,t|0,s|0)|0;s=z;o=0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;break}f=0;j=15;break}}else{f=z;j=15}}while(0);a:do if((j|0)==15){b:while(1){if(f|0){f=2;break a}o=0;ha(4);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue}a=c[15686]|0;m=0;while(1){o=0;j=_(2)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}if(!j)break;o=0;f=$(28,j|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=E3(c[g>>2]|0,t|0,s|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)==1){f=z;j=15;continue b}o=0;ja(25,j|0,f|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}m=m+1|0;do if(((m|0)%100|0|0)==0&0!=0){f=(m|0)%1e3|0;if((f|0)==100){o=0;aa(91,99176,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}o=0;c[n>>2]=m;ca(29,a|0,99194,n|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}o=0;c[q>>2]=m;ca(29,a|0,99194,q|0)|0;g=o;o=0;if((g|0)!=0&(p|0)!=0){i=E3(c[g>>2]|0,t|0,s|0)|0;if(!i)bb(g|0,p|0);z=p}else i=-1;if((i|0)==1){f=z;j=15;continue b}if(!f){o=0;aa(92,10,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}}}while(0);if((m|0)>=(d|0))break}switch(b|0){case 1:{o=0;ha(5);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}case 2:{o=0;ha(6);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}break}default:{o=0;ha(7);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}o=0;ha(3);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue b}}}if(!0){f=0;break a}if((m|0)>99){o=0;aa(92,10,a|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15;continue}}f=c[46481]|0;g=c[46482]|0;o=0;k=+X(1);i=o;o=0;if((i|0)!=0&(p|0)!=0){j=E3(c[i>>2]|0,t|0,s|0)|0;if(!j)bb(i|0,p|0);z=p}else j=-1;if((j|0)==1){f=z;j=15;continue}o=0;c[r>>2]=99176;c[r+4>>2]=f;c[r+8>>2]=g;c[r+12>>2]=m;h[r+16>>3]=k;ca(29,a|0,99198,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,t|0,s|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){f=z;j=15}else break}f=0}while(0);D_(t|0);l=u;return f|0}function zH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a=(c[a+16>>2]|0)+192|0;e=0;h=0;while(1){a=c[a>>2]|0;if(!a)break;g=c[a+16>>2]|0;f=c[g+180>>2]|0;a=0;while(1){if(!(c[f+(a<<2)>>2]|0))break;a=a+1|0;e=e+1|0}a=g+164|0;h=h+1|0}c[b>>2]=h;c[d>>2]=e;return}function AH(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;c[46484]=b;c[46491]=0;c[46482]=0;c[46481]=0;i=b+16|0;b=(c[i>>2]|0)+192|0;h=0;f=0;while(1){b=c[b>>2]|0;if(!b)break;g=c[b+16>>2]|0;a[g+157>>0]=0;h=h+1|0;c[46481]=h;d=c[g+180>>2]|0;b=0;while(1){if(!(c[d+(b<<2)>>2]|0))break;k=f+1|0;c[46482]=k;b=b+1|0;f=k}b=g+164|0}b=c[46492]|0;if(!b)b=vH(h<<2)|0;else b=xH(b,h<<2)|0;c[46492]=b;c[46493]=0;b=c[46486]|0;if(!b)b=vH(c[46481]<<2)|0;else b=xH(b,c[46481]<<2)|0;c[46486]=b;c[46485]=0;d=1;b=(c[i>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;k=b+16|0;i=c[k>>2]|0;j=i+292|0;c[j>>2]=0;i=c[i+172>>2]|0;h=d;g=0;b=0;while(1){d=c[i+(g<<2)>>2]|0;if(!d)break;f=b+1|0;c[j>>2]=f;b=c[d+16>>2]|0;c[b+160>>2]=0;c[b+164>>2]=-1;if(!h)b=0;else{l=c[d>>2]&3;b=((c[(c[(c[((l|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((l|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)<(e[b+170>>1]|0|0)?0:h}h=b;g=g+1|0;b=f}b=uH((g<<2)+4|0)|0;d=c[k>>2]|0;c[d+264>>2]=b;c[d+268>>2]=0;d=c[d+180>>2]|0;b=0;do{l=b;b=b+1|0}while((c[d+(l<<2)>>2]|0)!=0);d=uH(b<<2)|0;b=c[k>>2]|0;c[b+272>>2]=d;c[b+276>>2]=0;d=h;b=b+164|0}return d|0}function BH(){var a=0,b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;k=o;m=GL(c[46481]|0)|0;a=(c[(c[46484]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b){j=0;break}d=b+16|0;a=c[d>>2]|0;if(!(c[a+292>>2]|0)){IL(m,b);a=c[d>>2]|0}a=a+164|0}while(1){a=JL(m)|0;if(!a)break;i=a+16|0;a=c[i>>2]|0;f=a+232|0;c[f>>2]=0;d=c[a+172>>2]|0;b=0;h=0;while(1){g=c[d+(b<<2)>>2]|0;if(!g){f=0;break}g=(c[(c[(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(e[(c[g+16>>2]|0)+170>>1]|0)|0;g=(h|0)>(g|0)?h:g;c[f>>2]=g;b=b+1|0;h=g}while(1){b=c[(c[a+180>>2]|0)+(f<<2)>>2]|0;if(!b)break;d=b+-48|0;g=(c[(c[((c[b>>2]&3|0)==2?b:d)+40>>2]|0)+16>>2]|0)+292|0;h=c[g>>2]|0;c[g>>2]=h+-1;if((h|0)<2){IL(m,c[((c[b>>2]&3|0)==2?b:d)+40>>2]|0);a=c[i>>2]|0}f=f+1|0}j=j+1|0}a:do if((j|0)!=(c[46481]|0)){Pw(1,99530,k)|0;a=(c[(c[46484]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b)break a;d=b+16|0;a=c[d>>2]|0;if(c[a+292>>2]|0){k=ry(b)|0;a=c[(c[d>>2]|0)+292>>2]|0;c[n>>2]=k;c[n+4>>2]=a;Pw(3,99552,n)|0;a=c[d>>2]|0}a=a+164|0}}while(0);HL(m);l=o;return}function CH(){var b=0,d=0,e=0;b=(c[(c[46484]|0)+16>>2]|0)+192|0;while(1){b=c[b>>2]|0;if(!b)break;e=b+16|0;b=c[e>>2]|0;d=c[b+264>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+272>>2]|0;if(d){D_(d);b=c[e>>2]|0}a[b+157>>0]=0;b=b+164|0}return}function DH(){var a=0,b=0,d=0,e=0,f=0;a=(c[(c[46484]|0)+16>>2]|0)+192|0;while(1){a=c[a>>2]|0;if(!a)break;a=c[a+16>>2]|0;c[a+280>>2]=0;a=a+164|0}f=uH(c[46481]<<2)|0;e=0;a=(c[(c[46484]|0)+16>>2]|0)+192|0;while(1){b=c[a>>2]|0;if(!b)break;d=b+16|0;a=c[d>>2]|0;if(!(c[a+280>>2]|0)){c[f+(e<<2)>>2]=QH(b)|0;b=e+1|0;a=c[d>>2]|0}else b=e;e=b;a=a+164|0}a=RH(f,e)|0;while(1){if((SH(a)|0)<=1)break;WH(a,c[(VH(UH(TH(a)|0)|0)|0)+8>>2]|0)}D_(a);a=0;while(1){if((a|0)>=(e|0))break;D_(c[f+(a<<2)>>2]|0);a=a+1|0}D_(f);if((c[46485]|0)==((c[46481]|0)+-1|0)){XH();return}else qa(99275,99305,523,99310)}function EH(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=c[46491]|0;f=c[46485]|0;j=c[46486]|0;k=c[46441]|0;b=0;a=0;g=i;while(1){if((g|0)>=(f|0)){h=8;break}e=c[j+(g<<2)>>2]|0;d=c[(c[e+16>>2]|0)+160>>2]|0;if((d|0)<0){if(!a)a=e;else a=(c[(c[a+16>>2]|0)+160>>2]|0)>(d|0)?e:a;b=b+1|0;if((b|0)>=(k|0))break}e=g+1|0;c[46491]=e;g=e}if((h|0)==8)if((i|0)>0){f=0;while(1){if((f|0)>=(i|0))break;d=c[j+(f<<2)>>2]|0;e=c[(c[d+16>>2]|0)+160>>2]|0;if((e|0)<0){if(!a)a=d;else a=(c[(c[a+16>>2]|0)+160>>2]|0)>(e|0)?d:a;b=b+1|0;if((b|0)>=(k|0))break}f=f+1|0}c[46491]=f}return a|0}function FH(a){a=a|0;var b=0,d=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>>2]|0;a=c[((b|0)==2?a:a+-48|0)+40>>2]|0;b=(c[(c[d+16>>2]|0)+288>>2]|0)<(c[(c[a+16>>2]|0)+288>>2]|0);a=b?d:a;c[46487]=0;c[46488]=2147483647;d=c[a+16>>2]|0;c[46489]=c[d+284>>2];c[46490]=c[d+288>>2];if(b)PH(a);else OH(a);return c[46487]|0}function GH(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o;g=c[b>>2]&3;m=b+-48|0;j=b+48|0;k=b+16|0;g=(c[(c[(c[((g|0)==2?b:m)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((g|0)==3?b:j)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[k>>2]|0)+170>>1]|0)|0;do if((g|0)>0){d=c[a>>2]&3;h=c[((d|0)==3?a:a+48|0)+40>>2]|0;i=c[h+16>>2]|0;if(((c[i+276>>2]|0)+(c[i+268>>2]|0)|0)==1){KH(h,g);break}d=c[((d|0)==2?a:a+-48|0)+40>>2]|0;f=c[d+16>>2]|0;if(((c[f+276>>2]|0)+(c[f+268>>2]|0)|0)==1){KH(d,0-g|0);break}if((c[i+288>>2]|0)<(c[f+288>>2]|0)){KH(h,g);break}else{KH(d,0-g|0);break}}while(0);d=a+16|0;f=c[(c[d>>2]|0)+160>>2]|0;g=c[b>>2]&3;g=LH(c[((g|0)==3?b:j)+40>>2]|0,c[((g|0)==2?b:m)+40>>2]|0,f,1)|0;i=c[b>>2]&3;if((LH(c[((i|0)==2?b:m)+40>>2]|0,c[((i|0)==3?b:j)+40>>2]|0,f,0)|0)==(g|0)){c[(c[k>>2]|0)+160>>2]=0-f;c[(c[d>>2]|0)+160>>2]=0;MH(a,b);n=c[g+16>>2]|0;NH(g,c[n+280>>2]|0,c[n+284>>2]|0)|0;l=o;return}else{Pw(1,99236,n)|0;bb(185768,1)}}function HH(){var b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;JH();m=uH((c[46483]<<2)+4|0)|0;d=c[46483]|0;b=0;while(1){if((b|0)>(d|0))break;c[m+(b<<2)>>2]=0;b=b+1|0}b=(c[(c[46484]|0)+16>>2]|0)+192|0;d=b;while(1){d=c[d>>2]|0;if(!d)break;d=c[d+16>>2]|0;if(!(a[d+156>>0]|0)){l=m+(c[d+232>>2]<<2)|0;c[l>>2]=(c[l>>2]|0)+1}d=d+164|0}while(1){b=c[b>>2]|0;if(!b)break;l=b+16|0;b=c[l>>2]|0;if(!(a[b+156>>0]|0)){h=c[46483]|0;f=c[b+172>>2]|0;k=0;j=0;d=0;while(1){g=c[f+(d<<2)>>2]|0;if(!g)break;n=c[g+16>>2]|0;i=(c[(c[(c[((c[g>>2]&3|0)==3?g:g+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)+(e[n+170>>1]|0)|0;k=(c[n+156>>2]|0)+k|0;j=(j|0)>(i|0)?j:i;d=d+1|0}g=c[b+180>>2]|0;i=0;d=0;while(1){f=c[g+(d<<2)>>2]|0;if(!f)break;o=c[f+16>>2]|0;n=(c[(c[(c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[o+170>>1]|0)|0;i=(c[o+156>>2]|0)+i|0;h=(h|0)<(n|0)?h:n;d=d+1|0}d=(j|0)>0?j:0;if((k|0)==(i|0)){g=d;f=d;while(1){d=f+1|0;if((f|0)>=(h|0))break;g=(c[m+(d<<2)>>2]|0)<(c[m+(g<<2)>>2]|0)?d:g;f=d}o=b+232|0;n=m+(c[o>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+-1;n=m+(g<<2)|0;c[n>>2]=(c[n>>2]|0)+1;c[o>>2]=g}d=c[b+264>>2]|0;if(d){D_(d);b=c[l>>2]|0}d=c[b+272>>2]|0;if(d){D_(d);b=c[l>>2]|0}a[b+157>>0]=0}b=b+164|0}D_(m);return}function IH(){var a=0,b=0,d=0,f=0,g=0,h=0;b=0;while(1){if((b|0)>=(c[46485]|0))break;a=c[(c[46486]|0)+(b<<2)>>2]|0;do if(((c[(c[a+16>>2]|0)+160>>2]|0)==0?(d=FH(a)|0,d|0):0)?(f=c[d>>2]&3,f=(c[(c[(c[((f|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((f|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0,(f|0)>=2):0){h=c[a>>2]&3;g=c[((h|0)==3?a:a+48|0)+40>>2]|0;a=c[((h|0)==2?a:a+-48|0)+40>>2]|0;if((c[(c[g+16>>2]|0)+288>>2]|0)<(c[(c[a+16>>2]|0)+288>>2]|0)){KH(g,f>>>1);break}else{KH(a,(f|0)/-2|0);break}}while(0);b=b+1|0}CH();return}function JH(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;h=i;c[h>>2]=0;c[h>>2]=2147483647;c[46483]=-2147483647;b=(c[(c[46484]|0)+16>>2]|0)+192|0;e=b;g=2147483647;f=-2147483647;while(1){d=c[e>>2]|0;if(!d)break;e=c[d+16>>2]|0;if(!(a[e+156>>0]|0)){j=c[e+232>>2]|0;d=(g|0)<(j|0)?g:j;c[h>>2]=d;f=(f|0)>(j|0)?f:j;c[46483]=f}else d=g;e=e+164|0;g=d}if(g|0){while(1){b=c[b>>2]|0;if(!b)break;b=c[b+16>>2]|0;j=b+232|0;c[j>>2]=(c[j>>2]|0)-g;b=b+164|0}c[46483]=f-g;c[h>>2]=0}l=i;return}function KH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;a=c[f>>2]|0;e=a+232|0;c[e>>2]=(c[e>>2]|0)-b;e=0;while(1){d=c[(c[a+272>>2]|0)+(e<<2)>>2]|0;if(!d){e=0;break}if((d|0)!=(c[a+280>>2]|0)){KH(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0,b);a=c[f>>2]|0}e=e+1|0}while(1){d=c[(c[a+264>>2]|0)+(e<<2)>>2]|0;if(!d)break;if((d|0)!=(c[a+280>>2]|0)){KH(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,b);a=c[f>>2]|0}e=e+1|0}return}function LH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=(e|0)==0&1;h=0-d|0;f=c[(c[b+16>>2]|0)+288>>2]|0;b=a;while(1){a=c[b+16>>2]|0;if((c[a+284>>2]|0)<=(f|0)?(f|0)<=(c[a+288>>2]|0):0)break;a=c[a+280>>2]|0;i=a+48|0;j=(c[a+16>>2]|0)+160|0;c[j>>2]=(((b|0)==(c[((c[a>>2]&3|0)==3?a:i)+40>>2]|0)?e:g)|0?d:h)+(c[j>>2]|0);j=c[a>>2]&3;i=c[((j|0)==3?a:i)+40>>2]|0;a=c[((j|0)==2?a:a+-48|0)+40>>2]|0;b=(c[(c[i+16>>2]|0)+288>>2]|0)>(c[(c[a+16>>2]|0)+288>>2]|0)?i:a}return b|0}function MH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+16|0;e=(c[i>>2]|0)+164|0;c[(c[b+16>>2]|0)+164>>2]=c[e>>2];c[(c[46486]|0)+(c[e>>2]<<2)>>2]=b;c[(c[i>>2]|0)+164>>2]=-1;i=(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16|0;e=c[i>>2]|0;g=e+276|0;f=c[g>>2]|0;j=f+-1|0;c[g>>2]=j;g=e+272|0;h=0;while(1){if((h|0)>=(f|0)){k=3;break}d=c[g>>2]|0;if((c[d+(h<<2)>>2]|0)==(a|0))break;h=h+1|0}if((k|0)==3)d=c[e+272>>2]|0;c[d+(h<<2)>>2]=c[d+(j<<2)>>2];c[(c[(c[i>>2]|0)+272>>2]|0)+(j<<2)>>2]=0;i=(c[((c[a>>2]&3|0)==2?a:a+-48|0)+40>>2]|0)+16|0;e=c[i>>2]|0;g=e+268|0;f=c[g>>2]|0;j=f+-1|0;c[g>>2]=j;g=e+264|0;h=0;while(1){if((h|0)>=(f|0)){k=8;break}d=c[g>>2]|0;if((c[d+(h<<2)>>2]|0)==(a|0))break;h=h+1|0}if((k|0)==8)d=c[e+264>>2]|0;c[d+(h<<2)>>2]=c[d+(j<<2)>>2];c[(c[(c[i>>2]|0)+264>>2]|0)+(j<<2)>>2]=0;k=(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)+16|0;a=c[k>>2]|0;j=c[a+272>>2]|0;a=a+276|0;i=c[a>>2]|0;c[a>>2]=i+1;c[j+(i<<2)>>2]=b;k=c[k>>2]|0;c[(c[k+272>>2]|0)+(c[k+276>>2]<<2)>>2]=0;k=(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)+16|0;i=c[k>>2]|0;j=c[i+264>>2]|0;i=i+268|0;a=c[i>>2]|0;c[i>>2]=a+1;c[j+(a<<2)>>2]=b;k=c[k>>2]|0;c[(c[k+264>>2]|0)+(c[k+268>>2]<<2)>>2]=0;return}function NH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+16|0;a=c[g>>2]|0;c[a+280>>2]=b;c[a+284>>2]=d;f=0;while(1){e=c[(c[a+272>>2]|0)+(f<<2)>>2]|0;if(!e){f=0;break}if((e|0)!=(b|0)){d=NH(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,e,d)|0;a=c[g>>2]|0}f=f+1|0}while(1){e=c[(c[a+264>>2]|0)+(f<<2)>>2]|0;if(!e)break;if((e|0)!=(b|0)){d=NH(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0,e,d)|0;a=c[g>>2]|0}f=f+1|0}c[a+288>>2]=d;return d+1|0}function OH(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(1){a=c[i>>2]|0;d=c[(c[a+180>>2]|0)+(g<<2)>>2]|0;if(!d){d=0;break}f=c[d+16>>2]|0;if((c[f+164>>2]|0)<0){a=c[d>>2]&3;b=c[(c[((a|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0;j=c[b+288>>2]|0;if((c[46489]|0)>(j|0)|(j|0)>(c[46490]|0)?(h=(c[b+232>>2]|0)-(c[(c[(c[((a|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[f+170>>1]|0)|0,(h|0)<(c[46488]|0)|(c[46487]|0)==0):0){c[46487]=d;c[46488]=h}}else{b=c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0))OH(b)}g=g+1|0}while(1){b=c[(c[a+264>>2]|0)+(d<<2)>>2]|0;if(!((b|0)!=0&(c[46488]|0)>0))break;b=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0)){OH(b);a=c[i>>2]|0}d=d+1|0}return}function PH(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0;i=a+16|0;g=0;while(1){a=c[i>>2]|0;d=c[(c[a+172>>2]|0)+(g<<2)>>2]|0;if(!d){d=0;break}f=c[d+16>>2]|0;if((c[f+164>>2]|0)<0){a=c[d>>2]&3;b=c[(c[((a|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0;j=c[b+288>>2]|0;if((c[46489]|0)>(j|0)|(j|0)>(c[46490]|0)?(h=(c[(c[(c[((a|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[b+232>>2]|0)-(e[f+170>>1]|0)|0,(h|0)<(c[46488]|0)|(c[46487]|0)==0):0){c[46487]=d;c[46488]=h}}else{b=c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0))PH(b)}g=g+1|0}while(1){b=c[(c[a+272>>2]|0)+(d<<2)>>2]|0;if(!((b|0)!=0&(c[46488]|0)>0))break;b=c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0;if((c[(c[b+16>>2]|0)+288>>2]|0)<(c[a+288>>2]|0)){PH(b);a=c[i>>2]|0}d=d+1|0}return}function QH(a){a=a|0;var b=0;b=uH(16)|0;c[b>>2]=a;c[b+4>>2]=eI(a,b)|0;c[b+12>>2]=b;return b|0}function RH(a,b){a=a|0;b=b|0;var d=0,e=0;e=uH(8)|0;c[e>>2]=a;c[e+4>>2]=b;d=0;while(1){if((d|0)>=(b|0))break;c[(c[a+(d<<2)>>2]|0)+8>>2]=d;d=d+1|0}d=(b|0)/2|0;while(1){if((d|0)<=-1)break;WH(e,d);d=d+-1|0}return e|0}function SH(a){a=a|0;return c[a+4>>2]|0}function TH(a){a=a|0;var b=0,d=0,e=0,f=0;f=c[a>>2]|0;b=c[f>>2]|0;c[b+8>>2]=-1;d=a+4|0;e=(c[d>>2]|0)+-1|0;c[f>>2]=c[f+(e<<2)>>2];f=c[a>>2]|0;c[(c[f>>2]|0)+8>>2]=0;c[f+(e<<2)>>2]=b;c[d>>2]=e;WH(a,0);return b|0}function UH(a){a=a|0;return dI(c[a>>2]|0,0,0)|0}function VH(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0;b=a+16|0;if((c[(c[b>>2]|0)+164>>2]|0)>-1)qa(99324,99305,463,99338);g=a+48|0;d=$H(c[((c[a>>2]&3|0)==3?a:g)+40>>2]|0)|0;i=a+-48|0;f=$H(c[((c[a>>2]&3|0)==2?a:i)+40>>2]|0)|0;h=c[a>>2]&3;b=(c[(c[(c[((h|0)==2?a:i)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((h|0)==3?a:g)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[b>>2]|0)+170>>1]|0)|0;if((c[d+8>>2]|0)==-1)aI(c[d>>2]|0,0,b);else aI(c[f>>2]|0,0,0-b|0);bI(a);return cI(d,f)|0}function WH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=c[a>>2]|0;g=c[a+4>>2]|0;while(1){a=b<<1;f=a+2|0;a=a|1;if(!((a|0)<(g|0)?(c[(c[h+(a<<2)>>2]|0)+4>>2]|0)<(c[(c[h+(b<<2)>>2]|0)+4>>2]|0):0))a=b;if((f|0)>=(g|0))break;d=h+(f<<2)|0;e=c[d>>2]|0;if((f|0)==(b|0)?1:(c[e+4>>2]|0)>=(c[(c[h+(a<<2)>>2]|0)+4>>2]|0))break;i=h+(b<<2)|0;a=c[i>>2]|0;c[i>>2]=e;c[d>>2]=a;c[(c[i>>2]|0)+8>>2]=b;c[a+8>>2]=f;b=f}return}function XH(){NH(c[(c[(c[46484]|0)+16>>2]|0)+192>>2]|0,0,1)|0;YH(c[(c[(c[46484]|0)+16>>2]|0)+192>>2]|0,0);return}function YH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+16|0;d=0;while(1){a=c[f>>2]|0;e=c[(c[a+272>>2]|0)+(d<<2)>>2]|0;if(!e){e=0;break}if((e|0)!=(b|0))YH(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,e);d=d+1|0}while(1){d=c[(c[a+264>>2]|0)+(e<<2)>>2]|0;if(!d)break;if((d|0)!=(b|0)){YH(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0,d);a=c[f>>2]|0}e=e+1|0}if(b|0)ZH(b);return}function ZH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=c[a>>2]&3;d=c[((b|0)==3?a:a+48|0)+40>>2]|0;e=c[d+16>>2]|0;if((c[e+280>>2]|0)==(a|0))i=1;else{e=c[((b|0)==2?a:a+-48|0)+40>>2]|0;i=-1;d=e;e=c[e+16>>2]|0}g=c[e+180>>2]|0;b=0;f=0;while(1){h=c[g+(f<<2)>>2]|0;if(!h)break;b=(_H(h,d,i)|0)+b|0;f=f+1|0}g=c[e+172>>2]|0;e=0;while(1){f=c[g+(e<<2)>>2]|0;if(!f)break;b=(_H(f,d,i)|0)+b|0;e=e+1|0}c[(c[a+16>>2]|0)+160>>2]=b;return}function _H(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=c[a>>2]&3;i=(h|0)==3?a:a+48|0;e=c[i+40>>2]|0;if((e|0)==(b|0))e=c[((h|0)==2?a:a+-48|0)+40>>2]|0;g=c[b+16>>2]|0;f=c[(c[e+16>>2]|0)+288>>2]|0;if((c[g+284>>2]|0)<=(f|0)?(f|0)<=(c[g+288>>2]|0):0){f=c[a+16>>2]|0;if((c[f+164>>2]|0)>-1)e=c[f+160>>2]|0;else e=0;g=1;e=e-(c[f+156>>2]|0)|0}else{g=0;e=c[(c[a+16>>2]|0)+156>>2]|0}i=(c[((d|0)>0?((h|0)==2?a:a+-48|0):i)+40>>2]|0)==(b|0)?1:-1;return (((g?i:0-i|0)|0)<0?0-e|0:e)|0}function $H(a){a=a|0;var b=0,d=0;a=c[(c[a+16>>2]|0)+280>>2]|0;while(1){b=a+12|0;d=c[b>>2]|0;if(!((d|0)!=(a|0)&(d|0)!=0))break;a=c[d+12>>2]|0;if(!a){a=d;continue}c[b>>2]=a}return a|0}function aI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=a+16|0;e=c[h>>2]|0;g=e+232|0;c[g>>2]=(c[g>>2]|0)+d;g=0;while(1){f=c[(c[e+264>>2]|0)+(g<<2)>>2]|0;if(!f){g=0;break}f=c[((c[f>>2]&3|0)==3?f:f+48|0)+40>>2]|0;if((f|0)!=(b|0)){aI(f,a,d);e=c[h>>2]|0}g=g+1|0}while(1){f=c[(c[e+272>>2]|0)+(g<<2)>>2]|0;if(!f)break;f=c[((c[f>>2]&3|0)==2?f:f+-48|0)+40>>2]|0;if((f|0)!=(b|0)){aI(f,a,d);e=c[h>>2]|0}g=g+1|0}return}function bI(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;d=(c[b+16>>2]|0)+164|0;if((c[d>>2]|0)>-1){Pw(1,99427,h)|0;bb(185768,1)}g=c[46485]|0;c[d>>2]=g;d=c[46486]|0;c[46485]=g+1;c[d+(g<<2)>>2]=b;d=c[b>>2]|0;g=b+48|0;e=c[((d&3|0)==3?b:g)+40>>2]|0;if(!(a[(c[e+16>>2]|0)+157>>0]|0)){f=c[46492]|0;d=c[46493]|0;c[46493]=d+1;c[f+(d<<2)>>2]=e;d=c[b>>2]|0}f=b+-48|0;e=c[((d&3|0)==2?b:f)+40>>2]|0;if(!(a[(c[e+16>>2]|0)+157>>0]|0)){i=c[46492]|0;d=c[46493]|0;c[46493]=d+1;c[i+(d<<2)>>2]=e;d=c[b>>2]|0}i=(c[((d&3|0)==3?b:g)+40>>2]|0)+16|0;d=c[i>>2]|0;a[d+157>>0]=1;e=c[d+272>>2]|0;d=d+276|0;g=c[d>>2]|0;c[d>>2]=g+1;c[e+(g<<2)>>2]=b;g=c[i>>2]|0;c[(c[g+272>>2]|0)+(c[g+276>>2]<<2)>>2]=0;i=c[i>>2]|0;if(!(c[(c[i+180>>2]|0)+((c[i+276>>2]|0)+-1<<2)>>2]|0)){Pw(1,99461,h+8|0)|0;bb(185768,1)}i=(c[((c[b>>2]&3|0)==2?b:f)+40>>2]|0)+16|0;e=c[i>>2]|0;a[e+157>>0]=1;f=c[e+264>>2]|0;e=e+268|0;g=c[e>>2]|0;c[e>>2]=g+1;c[f+(g<<2)>>2]=b;b=c[i>>2]|0;c[(c[b+264>>2]|0)+(c[b+268>>2]<<2)>>2]=0;i=c[i>>2]|0;if(!(c[(c[i+172>>2]|0)+((c[i+268>>2]|0)+-1<<2)>>2]|0)){Pw(1,99496,h+16|0)|0;bb(185768,1)}else{l=h;return}}function cI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;while(1){g=a+12|0;d=c[g>>2]|0;if((d|0)==0|(d|0)==(a|0))break;else a=d}while(1){f=b+12|0;d=c[f>>2]|0;if((d|0)==0|(d|0)==(b|0))break;else b=d}if((a|0)!=(b|0)){e=c[a+8>>2]|0;d=c[b+8>>2]|0;do if((e|0)>-1)if((d|0)==-1)h=a;else j=10;else if((d|0)>-1)if((e|0)==-1){h=b;break}else{j=10;break}else qa(99350,99305,327,99397);while(0);if((j|0)==10)h=(c[b+4>>2]|0)<(c[a+4>>2]|0)?a:b;c[f>>2]=h;c[g>>2]=h;c[h+4>>2]=(c[b+4>>2]|0)+(c[a+4>>2]|0);if((c[h+8>>2]|0)>-1)i=h;else qa(99408,99305,335,99397)}else i=a;return i|0}function dI(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=$H(a)|0;if(d){k=c[d>>2]&3;if(((c[(c[(c[((k|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((k|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)!=(e[(c[d+16>>2]|0)+170>>1]|0|0))f=3}else{d=0;f=3}a:do if((f|0)==3){k=a+16|0;j=0;while(1){f=c[k>>2]|0;i=c[(c[f+180>>2]|0)+(j<<2)>>2]|0;if(!i){j=0;break}f=i+16|0;g=i+-48|0;h=c[((c[i>>2]&3|0)==2?i:g)+40>>2]|0;do if((c[(c[f>>2]|0)+164>>2]|0)>-1){if((h|0)!=(b|0))d=dI(h,a,d)|0}else if(($H(h)|0)!=(l|0)){if(d|0?(m=c[i>>2]&3,h=c[d>>2]&3,((c[(c[(c[((m|0)==2?i:g)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((m|0)==3?i:i+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[f>>2]|0)+170>>1]|0)|0)>=((c[(c[(c[((h|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((h|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0)):0)break;d=i}while(0);j=j+1|0}while(1){f=c[(c[f+172>>2]|0)+(j<<2)>>2]|0;if(!f)break a;g=f+16|0;h=f+48|0;i=c[((c[f>>2]&3|0)==3?f:h)+40>>2]|0;do if((c[(c[g>>2]|0)+164>>2]|0)>-1){if((i|0)!=(b|0))d=dI(i,a,d)|0}else if(($H(i)|0)!=(l|0)){if(d|0?(i=c[f>>2]&3,m=c[d>>2]&3,((c[(c[(c[((i|0)==2?f:f+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((i|0)==3?f:h)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[g>>2]|0)+170>>1]|0)|0)>=((c[(c[(c[((m|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[(c[(c[((m|0)==3?d:d+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(e[(c[d+16>>2]|0)+170>>1]|0)|0)):0)break;d=f}while(0);j=j+1|0;f=c[k>>2]|0}}while(0);return d|0}function eI(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;d=c[l>>2]|0;c[d+280>>2]=b;a=1;h=0;while(1){g=c[(c[d+172>>2]|0)+(h<<2)>>2]|0;if(!g){h=0;break}f=c[g+16>>2]|0;if(((c[f+164>>2]|0)<=-1?(i=c[g>>2]&3,j=g+48|0,k=c[(c[((i|0)==3?g:j)+40>>2]|0)+16>>2]|0,(c[k+280>>2]|0)==0):0)?((c[(c[(c[((i|0)==2?g:g+-48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)-(c[k+232>>2]|0)|0)==(e[f+170>>1]|0|0):0){bI(g);a=(eI(c[((c[g>>2]&3|0)==3?g:j)+40>>2]|0,b)|0)+a|0;d=c[l>>2]|0}h=h+1|0}while(1){f=c[(c[d+180>>2]|0)+(h<<2)>>2]|0;if(!f)break;g=c[f+16>>2]|0;if(((c[g+164>>2]|0)<=-1?(m=c[f>>2]&3,n=f+-48|0,o=c[(c[((m|0)==2?f:n)+40>>2]|0)+16>>2]|0,(c[o+280>>2]|0)==0):0)?((c[o+232>>2]|0)-(c[(c[(c[((m|0)==3?f:f+48|0)+40>>2]|0)+16>>2]|0)+232>>2]|0)|0)==(e[g+170>>1]|0|0):0){bI(f);a=(eI(c[((c[f>>2]&3|0)==2?f:n)+40>>2]|0,b)|0)+a|0;d=c[l>>2]|0}h=h+1|0}return a|0}function fI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=xx(a,99560)|0;if(!d)d=30;else d=a2(d)|0;return yH(a,b,c,d)|0}function gI(a){a=+a;return +((c[46369]|0)==0?a:+h[22916]-a)}function hI(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0;r=l;l=l+16|0;q=r;c[46494]=c[(c[(c[d+64>>2]|0)+8>>2]|0)+4>>2];iI(d);i=c[d+16>>2]|0;t=+h[i+32>>3];s=+h[i+40>>3];jI(e,99571,+h[b+352>>3]);jI(e,99578,t*.013888888888888888);jI(e,99578,s*.013888888888888888);kI(e);i=Sy(d)|0;while(1){if(!i)break;g=i+16|0;if(!(a[(c[g>>2]|0)+118>>0]|0)){lI(e,99580,JA(ry(i)|0)|0);p=(c[g>>2]|0)+16|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];mI(e,q);if(!(a[(c[(c[g>>2]|0)+104>>2]|0)+82>>0]|0)){b=ez(i)|0;b=nI(b,c[c[(c[g>>2]|0)+104>>2]>>2]|0)|0}else b=JA(yx(i,c[46384]|0)|0)|0;jI(e,99578,+h[(c[g>>2]|0)+32>>3]);jI(e,99578,+h[(c[g>>2]|0)+40>>3]);lI(e,99578,b);lI(e,99578,OL(i,c[46387]|0,108041)|0);lI(e,99578,c[c[(c[g>>2]|0)+8>>2]>>2]|0);lI(e,99578,OL(i,c[46378]|0,134232)|0);b=OL(i,c[46379]|0,191979)|0;if(!(a[b>>0]|0))b=OL(i,c[46378]|0,131718)|0;lI(e,99578,b);kI(e)}i=Ty(d,i)|0}o=f<<24>>24==0;n=Sy(d)|0;while(1){if(!n)break;m=Ex(d,n)|0;while(1){if(!m)break;if(o){f=191979;j=191979}else{j=xx(m,108373)|0;f=xx(m,108382)|0;f=f|0?f:191979;j=j|0?j:191979}p=m+16|0;b=c[p>>2]|0;k=c[b+8>>2]|0;a:do if(k){i=c[k+4>>2]|0;b=0;g=0;while(1){if((b|0)>=(i|0))break;u=(c[(c[k>>2]|0)+(b*48|0)+4>>2]|0)+g|0;b=b+1|0;g=u}lI(e,0,108368);oI(e,c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0,j);oI(e,c[((c[m>>2]&3|0)==2?m:m+-48|0)+40>>2]|0,f);pI(e,g);f=0;while(1){b=c[p>>2]|0;g=c[b+8>>2]|0;if((f|0)>=(c[g+4>>2]|0))break a;i=c[g>>2]|0;g=c[i+(f*48|0)>>2]|0;i=c[i+(f*48|0)+4>>2]|0;b=0;while(1){if((b|0)>=(i|0))break;u=g+(b<<4)|0;c[q>>2]=c[u>>2];c[q+4>>2]=c[u+4>>2];c[q+8>>2]=c[u+8>>2];c[q+12>>2]=c[u+12>>2];mI(e,q);b=b+1|0}f=f+1|0}}while(0);if(c[b+96>>2]|0){u=ez(c[((c[m>>2]&3|0)==3?m:m+48|0)+40>>2]|0)|0;lI(e,99578,nI(u,c[c[(c[p>>2]|0)+96>>2]>>2]|0)|0);u=(c[(c[p>>2]|0)+96>>2]|0)+56|0;c[q>>2]=c[u>>2];c[q+4>>2]=c[u+4>>2];c[q+8>>2]=c[u+8>>2];c[q+12>>2]=c[u+12>>2];mI(e,q)}lI(e,99578,OL(m,c[46415]|0,108041)|0);lI(e,99578,OL(m,c[46406]|0,134232)|0);kI(e);m=Gx(d,m)|0}n=Ty(d,n)|0}qI(99586,e);l=r;return}function iI(a){a=a|0;var b=0.0;if(c[46369]|0){a=c[a+16>>2]|0;b=+h[a+24>>3]+ +h[a+40>>3];h[22916]=b;h[22917]=b*.013888888888888888}return}function jI(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0,f=0;f=l;l=l+1040|0;e=f;d=f+8|0;if(b|0)qI(b,a);h[e>>3]=c;Y0(d,99592,e)|0;qI(d,a);l=f;return}function kI(b){b=b|0;a[191875]=10;lb[c[46494]&127](b,191875)|0;return}function lI(a,b,c){a=a|0;b=b|0;c=c|0;if(b|0)qI(b,a);qI(c,a);return}function mI(a,b){a=a|0;b=b|0;var d=0.0;jI(a,99578,+h[b>>3]*.013888888888888888);if(!(c[46369]|0))d=+h[b+8>>3];else d=+h[22916]-+h[b+8>>3];jI(a,99578,d*.013888888888888888);return}function nI(a,b){a=a|0;b=b|0;var c=0;c=Oz(a,b)|0;b=JA(c)|0;Qz(a,c)|0;return b|0}function oI(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!(a[(c[d+16>>2]|0)+118>>0]|0))d=JA(ry(d)|0)|0;else{f=ez(d)|0;d=nI(f,(A$(ry(d)|0,58)|0)+1|0)|0}lI(b,99578,d);if(e|0?a[e>>0]|0:0)lI(b,104958,JA(e)|0);return}function pI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+1040|0;f=d;e=d+8|0;qI(99578,a);c[f>>2]=b;Y0(e,134313,f)|0;qI(e,a);l=d;return}function qI(a,b){a=a|0;b=b|0;lb[c[46494]&127](b,a)|0;return}function rI(d,f,g){d=d|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=l;l=l+2288|0;W=Y+208|0;V=Y+192|0;U=Y+176|0;T=Y+160|0;S=Y+144|0;R=Y+128|0;P=Y+112|0;O=Y+96|0;N=Y+80|0;M=Y+64|0;L=Y+56|0;K=Y+48|0;X=Y+32|0;Q=Y+24|0;J=Y;G=Y+1264|0;H=Y+224|0;I=d+16|0;C=(e[(c[I>>2]|0)+178>>1]|0)>2;CG(1);iI(d);Tw(H,1024,Y+240|0);LM(d,1,99597,191979)|0;LM(d,1,99601,191979)|0;c[46376]=LM(d,1,138034,191979)|0;c[46375]=LM(d,1,137966,191979)|0;LM(d,2,99597,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0;if(i&16){LM(d,1,99607,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&1){LM(d,2,99611,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&32){LM(d,2,99607,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&2){LM(d,2,99614,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(i&4){LM(d,2,99622,191979)|0;i=a[(c[I>>2]|0)+113>>0]|0}if(!(i&8)){v=0;w=0;x=0}else{x=LM(d,0,99611,191979)|0;w=LM(d,0,99630,191979)|0;v=LM(d,0,99637,191979)|0}z=LM(d,0,99645,191979)|0;A=H+4|0;B=H+8|0;u=0;i=0;y=Sy(d)|0;while(1){if(!y)break;t=y+16|0;k=c[t>>2]|0;o=+h[k+16>>3];j=(c[46369]|0)==0;if(C){if(j)m=+h[k+24>>3];else m=+h[22916]-+h[k+24>>3];q=+h[(c[k+132>>2]|0)+16>>3]*72.0;h[J>>3]=o;h[J+8>>3]=m;h[J+16>>3]=q;Y0(G,99648,J)|0;Ww(H,G)|0;j=3;while(1){if((j|0)>=(e[(c[I>>2]|0)+178>>1]|0))break;h[Q>>3]=+h[(c[(c[t>>2]|0)+132>>2]|0)+(j<<3)>>3]*72.0;Y0(G,99663,Q)|0;Ww(H,G)|0;j=j+1|0}j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;s=c[H>>2]|0;c[A>>2]=s;zx(y,99597,s)|0;s=y}else{if(j)m=+h[k+24>>3];else m=+h[22916]-+h[k+24>>3];h[X>>3]=o;h[X+8>>3]=m;Y0(G,99669,X)|0;zx(y,99597,G)|0;s=y}h[K>>3]=+h[(c[t>>2]|0)+80>>3]*.013888888888888888;Y0(G,99592,K)|0;rx(s,c[46375]|0,G)|0;j=c[t>>2]|0;h[L>>3]=(+h[j+96>>3]+ +h[j+88>>3])*.013888888888888888;Y0(G,99592,L)|0;rx(s,c[46376]|0,G)|0;j=c[t>>2]|0;k=c[j+108>>2]|0;if((k|0)!=0?(a[k+81>>0]|0)!=0:0){q=+h[k+64>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[M>>3]=+h[k+56>>3];h[M+8>>3]=q;Y0(G,99669,M)|0;zx(s,99607,G)|0;j=c[t>>2]|0}if(b$(c[c[j+8>>2]>>2]|0,103194)|0){if(c[46400]|0?(UJ(y)|0)<<24>>24:0){k=c[(c[t>>2]|0)+12>>2]|0;r=k+8|0;j=c[r>>2]|0;if((j|0)<3){j=xx(s,99679)|0;if(!j)j=8;else j=a2(j)|0;j=(j|0)<3?8:j}p=k+44|0;q=1.0/+(j|0);n=0;while(1){if((n|0)>=(j|0))break;if((n|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=32}if((c[r>>2]|0)>2){k=c[p>>2]|0;if(!(c[46369]|0))m=+h[k+(n<<4)+8>>3]*.013888888888888888;else m=+h[22917]-+h[k+(n<<4)+8>>3]*.013888888888888888;h[N>>3]=+h[k+(n<<4)>>3]*.013888888888888888;h[N+8>>3]=m;Y0(G,99692,N)|0}else{k=c[t>>2]|0;m=q*+(n|0)*6.283185307179586;o=+h[k+32>>3]*.5*+E(+m);if(!(c[46369]|0))m=+h[k+40>>3]*.5*+F(+m);else m=+h[22917]-+h[k+40>>3]*.5*+F(+m);h[O>>3]=o;h[O+8>>3]=m;Y0(G,99692,O)|0}Ww(H,G)|0;n=n+1|0}k=c[46400]|0;j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;t=c[H>>2]|0;c[A>>2]=t;rx(s,k,t)|0}}else{sI(y,c[j+12>>2]|0,H);Yw(H)|0;j=c[A>>2]|0;if(j>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;j=c[A>>2]|0}a[j>>0]=0;t=c[H>>2]|0;c[A>>2]=t;zx(s,99601,t)|0}a:do if((c[46367]|0)>0){t=Ex(d,y)|0;j=u;while(1){if(!t)break a;s=t+16|0;k=c[s>>2]|0;do if((a[k+112>>0]|0)!=6?(D=c[k+8>>2]|0,(D|0)!=0):0){r=0;k=D;while(1){if((r|0)>=(c[k+4>>2]|0))break;if((r|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=59;k=c[(c[s>>2]|0)+8>>2]|0}k=c[k>>2]|0;if(c[k+(r*48|0)+8>>2]|0){if(!(c[46369]|0))m=+h[k+(r*48|0)+24>>3];else m=+h[22916]-+h[k+(r*48|0)+24>>3];h[P>>3]=+h[k+(r*48|0)+16>>3];h[P+8>>3]=m;Y0(G,99702,P)|0;Ww(H,G)|0;i=1;k=c[c[(c[s>>2]|0)+8>>2]>>2]|0}if(c[k+(r*48|0)+12>>2]|0){if(!(c[46369]|0))m=+h[k+(r*48|0)+40>>3];else m=+h[22916]-+h[k+(r*48|0)+40>>3];h[R>>3]=+h[k+(r*48|0)+32>>3];h[R+8>>3]=m;Y0(G,99715,R)|0;Ww(H,G)|0;j=1}p=0;while(1){k=c[(c[s>>2]|0)+8>>2]|0;n=c[k>>2]|0;if((p|0)>=(c[n+(r*48|0)+4>>2]|0))break;if((p|0)>0){k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;k=c[A>>2]|0}c[A>>2]=k+1;a[k>>0]=32;k=c[c[(c[s>>2]|0)+8>>2]>>2]|0}else k=n;u=c[k+(r*48|0)>>2]|0;q=+h[u+(p<<4)+8>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[S>>3]=+h[u+(p<<4)>>3];h[S+8>>3]=q;Y0(G,99669,S)|0;Ww(H,G)|0;p=p+1|0}r=r+1|0}k=c[A>>2]|0;if(k>>>0>=(c[B>>2]|0)>>>0){Uw(H,1)|0;k=c[A>>2]|0}a[k>>0]=0;k=c[H>>2]|0;c[A>>2]=k;zx(t,99597,k)|0;k=c[s>>2]|0;n=c[k+96>>2]|0;if(n){q=+h[n+64>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[T>>3]=+h[n+56>>3];h[T+8>>3]=q;Y0(G,99669,T)|0;zx(t,99611,G)|0;k=c[s>>2]|0}n=c[k+108>>2]|0;do if(n){if(!(a[n+81>>0]|0))break;q=+h[n+64>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[U>>3]=+h[n+56>>3];h[U+8>>3]=q;Y0(G,99669,U)|0;zx(t,99607,G)|0;k=c[s>>2]|0}while(0);n=c[k+100>>2]|0;if(n){q=+h[n+64>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[V>>3]=+h[n+56>>3];h[V+8>>3]=q;Y0(G,99669,V)|0;zx(t,99614,G)|0;k=c[s>>2]|0}k=c[k+104>>2]|0;if(!k)break;q=+h[k+64>>3];q=(c[46369]|0)==0?q:+h[22916]-q;h[W>>3]=+h[k+56>>3];h[W+8>>3]=q;Y0(G,99669,W)|0;zx(t,99622,G)|0}while(0);t=Gx(d,t)|0}}else j=u;while(0);u=j;y=Ty(d,y)|0}tI(d,z,x,w,v);Xw(H);if(b[(c[I>>2]|0)+136>>1]&1)FM(d);c[f>>2]=i;c[g>>2]=u;CG(0);l=Y;return}function sI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+1056|0;k=n;j=n+32|0;m=b+48|0;if(!(c[m>>2]|0)){e=c[a+16>>2]|0;i=+h[e+16>>3];if(!(c[46369]|0)){g=+h[e+24>>3];f=g+ +h[b+24>>3];g=g+ +h[b+40>>3]}else{g=+h[e+24>>3];f=+h[22916]-+h[b+24>>3]-g;g=+h[22916]-+h[b+40>>3]-g}o=i+ +h[b+32>>3];h[k>>3]=i+ +h[b+16>>3];h[k+8>>3]=f;h[k+16>>3]=o;h[k+24>>3]=g;Y0(j,99753,k)|0;Ww(d,j)|0}b=b+56|0;e=0;while(1){if((e|0)>=(c[m>>2]|0))break;sI(a,c[(c[b>>2]|0)+(e<<2)>>2]|0,d);e=e+1|0}l=n;return}function tI(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+1088|0;o=s+56|0;q=s+48|0;p=s+32|0;j=s;n=s+64|0;r=b+16|0;i=c[r>>2]|0;if(!(c[46369]|0)){k=+h[i+24>>3];m=+h[i+40>>3]}else{m=+h[22916];k=m-+h[i+24>>3];m=m-+h[i+40>>3]}t=+h[i+32>>3];h[j>>3]=+h[i+16>>3];h[j+8>>3]=k;h[j+16>>3]=t;h[j+24>>3]=m;Y0(n,99728,j)|0;rx(b,d,n)|0;i=c[(c[r>>2]|0)+12>>2]|0;if((i|0)!=0?(a[c[i>>2]>>0]|0)!=0:0){t=+h[i+64>>3];t=(c[46369]|0)==0?t:+h[22916]-t;h[p>>3]=+h[i+56>>3];h[p+8>>3]=t;Y0(n,99669,p)|0;rx(b,e,n)|0;i=c[(c[r>>2]|0)+12>>2]|0;t=+h[i+32>>3];h[q>>3]=+h[i+24>>3]*.013888888888888888;Y0(n,99748,q)|0;rx(b,f,n)|0;h[o>>3]=t*.013888888888888888;Y0(n,99748,o)|0;rx(b,g,n)|0;i=1}else i=1;while(1){j=c[r>>2]|0;if((i|0)>(c[j+180>>2]|0))break;tI(c[(c[j+184>>2]|0)+(i<<2)>>2]|0,d,e,f,g);i=i+1|0}l=s;return}function uI(a){a=a|0;var b=0;b=l;l=l+16|0;rI(a,b,b+4|0);l=b;return}function vI(){return Cw(20636,c[4555]|0)|0}function wI(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function xI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if((a|0)<=(e|0))if((a|0)<(e|0))a=-1;else{b=c[b+4>>2]|0;d=c[d+4>>2]|0;return ((b|0)>(d|0)?1:((b|0)<(d|0))<<31>>31)|0}else a=1;return a|0}function yI(a){a=a|0;yw(a)|0;return}function zI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];b=AI(e)|0;if((nb[c[a>>2]&63](a,b,1)|0)!=(b|0))D_(b);l=d;return}function AI(a){a=a|0;var b=0,d=0,e=0;b=uH(16)|0;e=a;d=c[e+4>>2]|0;a=b+8|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function BI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[g>>2]=b;c[g+4>>2]=d;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];b=AI(f)|0;if((nb[c[a>>2]&63](a,b,1)|0)!=(b|0))D_(b);l=e;return}function CI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d;g=b;f=c[g+4>>2]|0;b=e+8|0;c[b>>2]=c[g>>2];c[b+4>>2]=f;b=(nb[c[a>>2]&63](a,e,4)|0)!=0&1;l=d;return b|0}function DI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f+8>>2]=b;c[f+12>>2]=d;d=(nb[c[a>>2]&63](a,f,4)|0)!=0&1;l=e;return d|0}function EI(a){a=a|0;return Ew(a)|0}function FI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=uH((Ew(a)|0)<<3)|0;b=d;a=Aw(a)|0;while(1){if(!a)break;g=a+8|0;f=c[g+4>>2]|0;e=b;c[e>>2]=c[g>>2];c[e+4>>2]=f;b=b+8|0;a=c[a>>2]|0}return d|0}function GI(){var a=0,b=0,d=0,e=0;a=vH(40)|0;b=a;d=20672;e=b+36|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));c[a+36>>2]=0;return Cw(a,c[4555]|0)|0}function HI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;d=d+36|0;a=c[d>>2]|0;if(!a)a=vH(20)|0;else c[d>>2]=c[a>>2];f=b+8|0;e=c[f+4>>2]|0;d=a+8|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+16>>2]=c[b+16>>2];return a|0}function II(a,b,d){a=a|0;b=b|0;d=d|0;d=d+36|0;c[b>>2]=c[d>>2];c[d>>2]=b;return}function JI(a){a=a|0;nb[c[a>>2]&63](a,0,64)|0;return}function KI(a){a=a|0;var b=0,d=0;b=c[a+4>>2]|0;yw(a)|0;a=c[b+36>>2]|0;while(1){if(!a)break;d=c[a>>2]|0;D_(a);a=d}D_(b);return}function LI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+32|0;g=f;c[g+8>>2]=b;c[g+12>>2]=d;c[g+16>>2]=e;e=c[(nb[c[a>>2]&63](a,g,1)|0)+16>>2]|0;l=f;return e|0}function MI(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+160|0;q=t+144|0;d=t+48|0;j=t+128|0;k=t+112|0;m=t+96|0;n=t+80|0;o=t+32|0;p=t+16|0;r=t;s=a+16|0;a=c[s>>2]|0;e=+h[a+16>>3];f=+h[a+24>>3];g=+h[a+32>>3];i=+h[a+40>>3];if((b+-1|0)>>>0<2){NI(j,e,i);c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];OI(d,q);p=d+16|0;NI(k,g,f);c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];c[q+12>>2]=c[k+12>>2];OI(m,q);c[p>>2]=c[m>>2];c[p+4>>2]=c[m+4>>2];c[p+8>>2]=c[m+8>>2];c[p+12>>2]=c[m+12>>2]}else{NI(n,e,f);c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];OI(d,q);n=d+16|0;NI(o,g,i);c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];OI(p,q);c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2]}a=(c[s>>2]|0)+16|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=c[d+20>>2];c[a+24>>2]=c[d+24>>2];c[a+28>>2]=c[d+28>>2];a=c[(c[s>>2]|0)+12>>2]|0;if(!a)a=1;else{a=a+56|0;c[q>>2]=c[a>>2];c[q+4>>2]=c[a+4>>2];c[q+8>>2]=c[a+8>>2];c[q+12>>2]=c[a+12>>2];OI(r,q);c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2];a=1}while(1){d=c[s>>2]|0;if((a|0)>(c[d+180>>2]|0))break;MI(c[(c[d+184>>2]|0)+(a<<2)>>2]|0,b);a=a+1|0}l=t;return}function NI(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function OI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;g=d+16|0;e=d;f=(c[46495]|0)*90|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];ZG(e,g,f);c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];h[b>>3]=+h[b>>3]-+h[22918];e=b+8|0;h[e>>3]=+h[e>>3]-+h[22919];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function PI(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+1168|0;s=w+144|0;v=w+96|0;u=w+64|0;t=w+48|0;o=w+32|0;p=w+16|0;q=w;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;r=b+16|0;m=c[(c[r>>2]|0)+116>>2]|0;c[46495]=m&3;m=m&1;a[191877]=m;if(!(m<<24>>24))RI(b);else QI(b);SI(b);m=c[r>>2]|0;e=c[m+12>>2]|0;do if(e|0?(a[e+81>>0]|0)==0:0){g=e+24|0;c[t>>2]=c[g>>2];c[t+4>>2]=c[g+4>>2];c[t+8>>2]=c[g+8>>2];c[t+12>>2]=c[g+12>>2];n=+h[t>>3]+16.0;h[t>>3]=n;g=t+8|0;f=+h[g>>3]+8.0;h[g>>3]=f;g=(a[m+275>>0]&1)!=0;if(a[191877]|0){if(g){i=m+32|0;h[i>>3]=+h[i>>3]+f}else{i=m+16|0;h[i>>3]=+h[i>>3]-f}g=m+40|0;f=+h[g>>3];i=m+24|0;j=+h[i>>3];k=f-j;if(!(n>k))break;n=(n-k)*.5;h[i>>3]=j-n;h[g>>3]=f+n;break}i=(c[46495]|0)==0;do if(g)if(i){i=m+40|0;h[i>>3]=+h[i>>3]+f;break}else{i=m+24|0;h[i>>3]=+h[i>>3]-f;break}else if(i){i=m+24|0;h[i>>3]=+h[i>>3]-f;break}else{i=m+40|0;h[i>>3]=+h[i>>3]+f;break}while(0);g=m+32|0;f=+h[g>>3];i=m+16|0;j=+h[i>>3];k=f-j;if(n>k){n=(n-k)*.5;h[i>>3]=j-n;h[g>>3]=f+n}}while(0);if(d){switch(c[46495]|0){case 0:{q=m+16|0;c[45836]=c[q>>2];c[45837]=c[q+4>>2];c[45838]=c[q+8>>2];c[45839]=c[q+12>>2];break}case 1:{NI(o,-+h[m+40>>3],+h[m+16>>3]);c[45836]=c[o>>2];c[45837]=c[o+4>>2];c[45838]=c[o+8>>2];c[45839]=c[o+12>>2];break}case 2:{NI(p,+h[m+16>>3],-+h[m+40>>3]);c[45836]=c[p>>2];c[45837]=c[p+4>>2];c[45838]=c[p+8>>2];c[45839]=c[p+12>>2];break}case 3:{NI(q,+h[m+24>>3],+h[m+16>>3]);c[45836]=c[q>>2];c[45837]=c[q+4>>2];c[45838]=c[q+8>>2];c[45839]=c[q+12>>2];break}default:{}}TI(b);e=c[(c[r>>2]|0)+12>>2]|0}if(e|0?(a[e+81>>0]|0)==0:0){c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];UI(b,s)}if(!0){l=w;return}if(!(a[191877]|0)){n=+h[22919];k=+h[22918];h[v>>3]=n;h[v+8>>3]=k;h[v+16>>3]=n;h[v+24>>3]=k;h[v+32>>3]=-k;h[v+40>>3]=-n;Y0(s,99989,v)|0}else{k=+h[22918];n=+h[22919];h[u>>3]=k;h[u+8>>3]=n;h[u+16>>3]=k;h[u+24>>3]=n;Y0(s,99774,u)|0}n1(s)|0;ab()}function QI(b){b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0,j=0;j=b+16|0;if(((fz(b)|0)!=(b|0)?(g=c[j>>2]|0,i=c[g+12>>2]|0,(i|0)!=0):0)?(a[i+81>>0]|0)==0:0){d=a[g+275>>0]|0;if(!(d&1)){f=+h[g+16>>3]+ +h[g+96>>3]*.5;b=g+104|0}else{f=+h[g+32>>3]-+h[g+64>>3]*.5;b=g+72|0}e=+h[b>>3];b=d<<24>>24;do if(!(b&4))if(!(b&2)){e=(+h[g+40>>3]+ +h[g+24>>3])*.5;break}else{e=+h[g+40>>3]-e*.5;break}else e=+h[g+24>>3]+e*.5;while(0);h[i+56>>3]=f;h[i+64>>3]=e;a[(c[(c[j>>2]|0)+12>>2]|0)+81>>0]=1;b=1}else b=1;while(1){d=c[j>>2]|0;if((b|0)>(c[d+180>>2]|0))break;QI(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function RI(b){b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,j=0,k=0;k=b+16|0;if(((fz(b)|0)!=(b|0)?(i=c[k>>2]|0,j=c[i+12>>2]|0,(j|0)!=0):0)?(a[j+81>>0]|0)==0:0){d=a[i+275>>0]|0;if(!(d&1)){g=+h[i+24>>3]+ +h[i+56>>3]*.5;b=i+48|0}else{g=+h[i+40>>3]-+h[i+88>>3]*.5;b=i+80|0}f=+h[b>>3];b=d<<24>>24;do if(!(b&4)){e=+h[i+16>>3];if(!(b&2)){e=(+h[i+32>>3]+e)*.5;break}else{e=e+f*.5;break}}else e=+h[i+32>>3]-f*.5;while(0);h[j+56>>3]=e;h[j+64>>3]=g;a[(c[(c[k>>2]|0)+12>>2]|0)+81>>0]=1;b=1}else b=1;while(1){d=c[k>>2]|0;if((b|0)>(c[d+180>>2]|0))break;RI(c[(c[d+184>>2]|0)+(b<<2)>>2]|0);b=b+1|0}return}function SI(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;S=l;l=l+544|0;L=S+504|0;R=S+416|0;Q=S+376|0;K=S+352|0;J=S+312|0;I=S+288|0;H=S+248|0;M=S+200|0;B=S+152|0;O=S+96|0;p=S+488|0;C=S+456|0;D=S+424|0;E=S+384|0;F=S+360|0;G=S+320|0;w=S+296|0;x=S+256|0;y=S+232|0;z=S+168|0;A=S+136|0;f=S+56|0;N=S+16|0;P=S;o=e+16|0;u=c[o>>2]|0;g=b[u+136>>1]&14;u=d[u+113>>0]|0;if(!((u&54|0)==0?(u&1|0)==0|(c[46368]|0)!=0:0)){u=g<<16>>16==0;n=Sy(e)|0;h=0;j=0;i=0;while(1){if(!n)break;g=c[(c[n+16>>2]|0)+108>>2]|0;do if(g)if(!(a[g+81>>0]|0)){i=i+1|0;break}else{h=h+1|0;break}while(0);m=Ex(e,n)|0;g=j;while(1){if(!m)break;k=c[m+16>>2]|0;j=c[k+108>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+100>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+104>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);j=c[k+96>>2]|0;do if(j){if(a[j+81>>0]|0){h=h+1|0;break}if(!u)g=g+((c[k+8>>2]|0)!=0&1)|0}while(0);m=Gx(e,m)|0}n=Ty(e,n)|0;j=g}if(!(a[(c[o>>2]|0)+113>>0]&8))o=0;else o=WI(e)|0;t=j+i|0;if(t|0){q=h+j+o+(ay(e)|0)|0;r=uH(q*40|0)|0;s=uH(t*40|0)|0;NI(M,2147483647.0,2147483647.0);g=M+16|0;NI(p,-2147483647.0,-2147483647.0);c[g>>2]=c[p>>2];c[g+4>>2]=c[p+4>>2];c[g+8>>2]=c[p+8>>2];c[g+12>>2]=c[p+12>>2];g=s;i=r;n=Sy(e)|0;while(1){if(!n)break;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];XI(C,n,i,L);c[M>>2]=c[C>>2];c[M+4>>2]=c[C+4>>2];c[M+8>>2]=c[C+8>>2];c[M+12>>2]=c[C+12>>2];c[M+16>>2]=c[C+16>>2];c[M+20>>2]=c[C+20>>2];c[M+24>>2]=c[C+24>>2];c[M+28>>2]=c[C+28>>2];h=c[(c[n+16>>2]|0)+108>>2]|0;do if(h)if(!(a[h+81>>0]|0)){c[L>>2]=c[B>>2];c[L+4>>2]=c[B+4>>2];c[L+8>>2]=c[B+8>>2];c[L+12>>2]=c[B+12>>2];ZI(h,i,g,0,L);g=g+40|0;break}else{i=i+40|0;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];YI(D,h,i,L);c[M>>2]=c[D>>2];c[M+4>>2]=c[D+4>>2];c[M+8>>2]=c[D+8>>2];c[M+12>>2]=c[D+12>>2];c[M+16>>2]=c[D+16>>2];c[M+20>>2]=c[D+20>>2];c[M+24>>2]=c[D+24>>2];c[M+28>>2]=c[D+28>>2];break}while(0);m=Ex(e,n)|0;i=i+40|0;while(1){if(!m)break;k=m+16|0;h=c[k>>2]|0;j=c[h+96>>2]|0;a:do if(!j)v=52;else{do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){gL(F,e,m);c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];c[L+8>>2]=c[F+8>>2];c[L+12>>2]=c[F+12>>2];ZI(j,i,g,1,L);g=g+40|0;break}c[H>>2]=c[j>>2];Pw(0,100801,H)|0;break a}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];YI(E,j,i,L);c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[M+8>>2]=c[E+8>>2];c[M+12>>2]=c[E+12>>2];c[M+16>>2]=c[E+16>>2];c[M+20>>2]=c[E+20>>2];c[M+24>>2]=c[E+24>>2];c[M+28>>2]=c[E+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0;v=52}while(0);b:do if((v|0)==52){v=0;j=c[h+104>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){_I(w,m);c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];c[L+8>>2]=c[w+8>>2];c[L+12>>2]=c[w+12>>2];ZI(j,i,g,1,L);g=g+40|0;break}c[I>>2]=c[j>>2];Pw(0,100836,I)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];YI(G,j,i,L);c[M>>2]=c[G>>2];c[M+4>>2]=c[G+4>>2];c[M+8>>2]=c[G+8>>2];c[M+12>>2]=c[G+12>>2];c[M+16>>2]=c[G+16>>2];c[M+20>>2]=c[G+20>>2];c[M+24>>2]=c[G+24>>2];c[M+28>>2]=c[G+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0}j=c[h+100>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){$I(y,m);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];c[L+8>>2]=c[y+8>>2];c[L+12>>2]=c[y+12>>2];ZI(j,i,g,1,L);g=g+40|0;break}c[J>>2]=c[j>>2];Pw(0,100876,J)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];YI(x,j,i,L);c[M>>2]=c[x>>2];c[M+4>>2]=c[x+4>>2];c[M+8>>2]=c[x+8>>2];c[M+12>>2]=c[x+12>>2];c[M+16>>2]=c[x+16>>2];c[M+20>>2]=c[x+20>>2];c[M+24>>2]=c[x+24>>2];c[M+28>>2]=c[x+28>>2]}while(0);i=i+40|0;h=c[k>>2]|0}j=c[h+108>>2]|0;if(j){do if(!(a[j+81>>0]|0)){if(!u?c[h+8>>2]|0:0){gL(A,e,m);c[L>>2]=c[A>>2];c[L+4>>2]=c[A+4>>2];c[L+8>>2]=c[A+8>>2];c[L+12>>2]=c[A+12>>2];ZI(j,i,g,1,L);g=g+40|0;break}c[K>>2]=c[j>>2];Pw(0,100916,K)|0;break b}else{c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];c[L+16>>2]=c[M+16>>2];c[L+20>>2]=c[M+20>>2];c[L+24>>2]=c[M+24>>2];c[L+28>>2]=c[M+28>>2];YI(z,j,i,L);c[M>>2]=c[z>>2];c[M+4>>2]=c[z+4>>2];c[M+8>>2]=c[z+8>>2];c[M+12>>2]=c[z+12>>2];c[M+16>>2]=c[z+16>>2];c[M+20>>2]=c[z+20>>2];c[M+24>>2]=c[z+24>>2];c[M+28>>2]=c[z+28>>2]}while(0);i=i+40|0}}while(0);m=Gx(e,m)|0}n=Ty(e,n)|0}if(o|0){c[f>>2]=c[M>>2];c[f+4>>2]=c[M+4>>2];c[f+8>>2]=c[M+8>>2];c[f+12>>2]=c[M+12>>2];c[f+16>>2]=c[M+16>>2];c[f+20>>2]=c[M+20>>2];c[f+24>>2]=c[M+24>>2];c[f+28>>2]=c[M+28>>2];c[f+32>>2]=i;h=L;g=h+40|0;do{c[h>>2]=c[f>>2];h=h+4|0;f=f+4|0}while((h|0)<(g|0));aJ(N,e,L);c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];c[M+16>>2]=c[N+16>>2];c[M+20>>2]=c[N+20>>2];c[M+24>>2]=c[N+24>>2];c[M+28>>2]=c[N+28>>2]}a[O+32>>0]=PL(e,nx(e,0,100952,0)|0,1)|0;c[O>>2]=c[M>>2];c[O+4>>2]=c[M+4>>2];c[O+8>>2]=c[M+8>>2];c[O+12>>2]=c[M+12>>2];c[O+16>>2]=c[M+16>>2];c[O+20>>2]=c[M+20>>2];c[O+24>>2]=c[M+24>>2];c[O+28>>2]=c[M+28>>2];SP(r,q,s,t,O)|0;if(0)bJ(r,q,s,t,O);f=0;g=0;h=s;while(1){if((g|0)>=(t|0))break;if(a[h+36>>0]|0){O=c[h+32>>2]|0;a[O+81>>0]=1;N=O+56|0;cJ(P,h);c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];c[N+12>>2]=c[P+12>>2];kM(e,O);f=f+1|0}g=g+1|0;h=h+40|0}if(!0){if((f|0)!=(t|0)){c[R>>2]=f;c[R+4>>2]=t;Pw(0,100997,R)|0}}else{R=c[15686]|0;c[Q>>2]=f;c[Q+4>>2]=t;g1(R,100964,Q)|0}D_(r);D_(s)}}l=S;return}function TI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0;i=l;l=l+48|0;e=i+32|0;f=i+16|0;g=i;if(+h[22918]!=0.0|+h[22919]!=0.0|(c[46495]|0)!=0){d=Sy(a)|0;while(1){if(!d)break;if(c[46495]|0)bN(d,0);b=d+16|0;j=(c[b>>2]|0)+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];OI(f,e);c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];b=c[(c[b>>2]|0)+108>>2]|0;if(b|0){j=b+56|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];OI(g,e);c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2]}a:do if((c[46367]|0)==1){b=Ex(a,d)|0;while(1){if(!b)break a;VI(b);b=Gx(a,b)|0}}while(0);d=Ty(a,d)|0}MI(a,c[(c[a+16>>2]|0)+116>>2]&3)}l=i;return}function UI(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,g=0,i=0,j=0;i=b+16|0;j=c[i>>2]|0;g=a[j+275>>0]|0;b=g<<24>>24;do if(!(b&4)){e=+h[j+16>>3];if(!(b&2)){f=(+h[j+32>>3]+e)*.5;break}else{f=+h[d>>3]*.5+e;break}}else f=+h[j+32>>3]-+h[d>>3]*.5;while(0);if(!(g&1))e=+h[d+8>>3]*.5+ +h[j+24>>3];else e=+h[j+40>>3]-+h[d+8>>3]*.5;j=c[j+12>>2]|0;h[j+56>>3]=f;h[j+64>>3]=e;a[(c[(c[i>>2]|0)+12>>2]|0)+81>>0]=1;return}function VI(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=l;l=l+144|0;q=s+120|0;e=s+16|0;i=s+104|0;j=s+88|0;k=s+72|0;m=s+56|0;n=s+40|0;o=s+24|0;r=s;p=b+16|0;d=c[p>>2]|0;f=c[d+8>>2]|0;if(!f){if((a[191874]|0)==0?(a[d+112>>0]|0)!=6:0){q=ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;r=ry(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[e>>2]=q;c[e+4>>2]=r;Pw(1,100784,e)|0}}else{h=0;b=f;while(1){if((h|0)>=(c[b+4>>2]|0))break;g=c[b>>2]|0;b=c[g+(h*48|0)>>2]|0;e=c[g+(h*48|0)+4>>2]|0;f=c[g+(h*48|0)+8>>2]|0;g=c[g+(h*48|0)+12>>2]|0;d=0;while(1){if((d|0)>=(e|0))break;t=b+(d<<4)|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];OI(i,q);c[t>>2]=c[i>>2];c[t+4>>2]=c[i+4>>2];c[t+8>>2]=c[i+8>>2];c[t+12>>2]=c[i+12>>2];d=d+1|0}if(f|0){t=(c[c[(c[p>>2]|0)+8>>2]>>2]|0)+(h*48|0)+16|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];OI(j,q);c[t>>2]=c[j>>2];c[t+4>>2]=c[j+4>>2];c[t+8>>2]=c[j+8>>2];c[t+12>>2]=c[j+12>>2]}if(g|0){t=(c[c[(c[p>>2]|0)+8>>2]>>2]|0)+(h*48|0)+32|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];OI(k,q);c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2]}d=c[p>>2]|0;h=h+1|0;b=c[d+8>>2]|0}b=c[d+96>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];OI(m,q);c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];d=c[p>>2]|0}b=c[d+108>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];OI(n,q);c[d>>2]=c[n>>2];c[d+4>>2]=c[n+4>>2];c[d+8>>2]=c[n+8>>2];c[d+12>>2]=c[n+12>>2];d=c[p>>2]|0}b=c[d+100>>2]|0;if(b){d=b+56|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];OI(o,q);c[d>>2]=c[o>>2];c[d+4>>2]=c[o+4>>2];c[d+8>>2]=c[o+8>>2];c[d+12>>2]=c[o+12>>2];d=c[p>>2]|0}d=c[d+104>>2]|0;if(d|0){t=d+56|0;c[q>>2]=c[t>>2];c[q+4>>2]=c[t+4>>2];c[q+8>>2]=c[t+8>>2];c[q+12>>2]=c[t+12>>2];OI(r,q);c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2]}}l=s;return}function WI(b){b=b|0;var d=0,e=0,f=0;f=b+16|0;if((fz(b)|0)!=(b|0)?(d=c[(c[f>>2]|0)+12>>2]|0,(d|0)!=0):0){e=1;b=(a[d+81>>0]|0)!=0&1}else{e=1;b=0}while(1){d=c[f>>2]|0;if((e|0)>(c[d+180>>2]|0))break;d=(WI(c[(c[d+184>>2]|0)+(e<<2)>>2]|0)|0)+b|0;e=e+1|0;b=d}return b|0}function XI(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0;g=l;l=l+32|0;i=g;n=(a[191877]|0)==0;d=d+16|0;m=c[d>>2]|0;k=+h[(n?m+32|0:m+40|0)>>3];h[e+16>>3]=k*72.0;j=+h[(n?m+40|0:m+32|0)>>3];h[e+24>>3]=j*72.0;d=(c[d>>2]|0)+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];h[e>>3]=+h[e>>3]-k*36.0;d=e+8|0;h[d>>3]=+h[d>>3]-j*36.0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];dJ(b,e,i);l=g;return}function YI(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0.0,k=0.0,m=0,n=0;g=l;l=l+32|0;i=g;n=(a[191877]|0)==0;m=d+24|0;k=+h[(n?m:d+32|0)>>3];h[e+16>>3]=k;j=+h[(n?d+32|0:m)>>3];h[e+24>>3]=j;d=d+56|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];h[e>>3]=+h[e>>3]-k*.5;d=e+8|0;h[d>>3]=+h[d>>3]-j*.5;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];c[i+28>>2]=c[f+28>>2];dJ(b,e,i);l=g;return}function ZI(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(f|0){f=d+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2]}if(!(a[191877]|0)){g=b+24|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2]}else{h[e>>3]=+h[b+32>>3];h[e+8>>3]=+h[b+24>>3]}c[e+32>>2]=b;a[e+36>>0]=0;c[d+32>>2]=e;return}function _I(a,b){a=a|0;b=b|0;b=fL(b)|0;do if(b){b=c[b>>2]|0;if(!(c[b+8>>2]|0)){b=c[b>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}else{b=b+16|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];break}}else{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}while(0);return}function $I(a,b){a=a|0;b=b|0;var d=0;b=fL(b)|0;do if(b){d=c[b>>2]|0;b=(c[b+4>>2]|0)+-1|0;if(!(c[d+(b*48|0)+12>>2]|0)){d=(c[d+(b*48|0)>>2]|0)+((c[d+(b*48|0)+4>>2]|0)+-1<<4)|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}else{d=d+(b*48|0)+32|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];break}}else{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0}while(0);return}function aJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+112|0;k=q+72|0;n=q+32|0;o=q;p=d+16|0;j=1;while(1){f=c[p>>2]|0;if((j|0)>(c[f+180>>2]|0))break;f=c[(c[f+184>>2]|0)+(j<<2)>>2]|0;g=k;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));aJ(n,f,k);g=e;h=n;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));j=j+1|0}if(((fz(d)|0)!=(d|0)?(m=c[(c[p>>2]|0)+12>>2]|0,m|0):0)?a[m+81>>0]|0:0){p=e+32|0;n=c[p>>2]|0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];YI(o,m,n,k);c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];c[e+8>>2]=c[o+8>>2];c[e+12>>2]=c[o+12>>2];c[e+16>>2]=c[o+16>>2];c[e+20>>2]=c[o+20>>2];c[e+24>>2]=c[o+24>>2];c[e+28>>2]=c[o+28>>2];c[p>>2]=(c[p>>2]|0)+40}g=b;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));l=q;return}function bJ(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+160|0;r=s+96|0;p=s+48|0;o=s;q=c[15686]|0;n=d[g+32>>0]|0;i=+h[g>>3];j=+h[g+8>>3];k=+h[g+16>>3];m=+h[g+24>>3];c[o>>2]=b;c[o+4>>2]=f;c[o+8>>2]=n;h[o+16>>3]=i;h[o+24>>3]=j;h[o+32>>3]=k;h[o+40>>3]=m;g1(q,101039,o)|0;a:do if(0>=2){E1(101099,8,1,q)|0;o=0;while(1){if((o|0)>=(b|0))break;g=c[a+32>>2]|0;i=+h[a>>3];j=+h[a+8>>3];k=+h[a+16>>3];m=+h[a+24>>3];if(!g)n=191979;else n=c[c[g+32>>2]>>2]|0;c[p>>2]=o;h[p+8>>3]=i;h[p+16>>3]=j;h[p+24>>3]=k;h[p+32>>3]=m;c[p+40>>2]=g;c[p+44>>2]=n;g1(q,101108,p)|0;o=o+1|0;a=a+40|0}E1(101151,8,1,q)|0;g=0;while(1){if((g|0)>=(f|0))break a;b=d[e+36>>0]|0;i=+h[e+16>>3];j=+h[e+24>>3];k=+h[e>>3];m=+h[e+8>>3];p=c[c[e+32>>2]>>2]|0;c[r>>2]=g;c[r+4>>2]=e;c[r+8>>2]=b;h[r+16>>3]=i;h[r+24>>3]=j;h[r+32>>3]=k;h[r+40>>3]=m;c[r+48>>2]=p;g1(q,101160,r)|0;e=e+40|0;g=g+1|0}}while(0);l=s;return}function cJ(a,b){a=a|0;b=b|0;var c=0.0;c=+h[b+8>>3]*.5+ +h[b+24>>3];h[a>>3]=+h[b>>3]*.5+ +h[b+16>>3];h[a+8>>3]=c;return}function dJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0.0,j=0.0;e=l;l=l+16|0;f=e;j=+h[b>>3];h[d>>3]=+h[(+h[d>>3]<j?d:b)>>3];g=d+8|0;i=+h[b+8>>3];h[g>>3]=+h[(+h[g>>3]<i?d:b)+8>>3];j=+h[b+16>>3]+j;h[f>>3]=j;i=+h[b+24>>3]+i;h[f+8>>3]=i;g=d+16|0;h[g>>3]=+h[(+h[g>>3]>j?g:f)>>3];b=d+24|0;h[b>>3]=+h[(+h[b>>3]>i?g:f)+8>>3];c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=c[d+20>>2];c[a+24>>2]=c[d+24>>2];c[a+28>>2]=c[d+28>>2];l=e;return}function eJ(a){a=a|0;PI(a,1);return}function fJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e;b=ZL(xx(a,102500)|0)|0;if(b){b=gJ(b)|0;if(b|0){f=c[b+40>>2]|0;d=c[b+44>>2]|0;g=a+16|0;a=c[g>>2]|0;h[a+32>>3]=+(f|0)*.013888888888888888;h[a+40>>3]=+(d|0)*.013888888888888888;a=uH(12)|0;c[(c[g>>2]|0)+12>>2]=a;c[a>>2]=c[b+12>>2];c[a+4>>2]=((f|0)/-2|0)-(c[b+32>>2]|0);c[a+8>>2]=((d|0)/-2|0)-(c[b+36>>2]|0)}}else{c[d>>2]=ry(a)|0;Pw(0,101208,d)|0}l=e;return}function gJ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+1152|0;i=p+24|0;h=p+8|0;e=p;f=p+120|0;j=p+44|0;k=p+40|0;m=p+36|0;n=p+32|0;o=p+28|0;d=c[46496]|0;if(!d){d=Cw(20708,c[4555]|0)|0;c[46496]=d}d=nb[c[d>>2]&63](d,b,512)|0;do if(!d){g=L1(b,135739)|0;if(!g){c[e>>2]=b;Pw(0,101257,e)|0;d=0;break}else{d=0;e=0}while(1){if(!(O0(f,1024,g)|0)){f=11;break}c[h>>2]=k;c[h+4>>2]=m;c[h+8>>2]=n;c[h+12>>2]=o;q=(N1(f,101285,h)|0)==4;e=q?1:e;if((a[f>>0]|0)!=37){q=(P0(f,101314)|0)==0;d=q?d:1}if((e|0)!=0&(d|0)!=0){f=12;break}}if((f|0)==11)if(!e){c[i>>2]=b;Pw(0,101319,i)|0;d=0}else f=12;if((f|0)==12){q=vH(64)|0;k=c[k>>2]|0;c[q+32>>2]=k;m=c[m>>2]|0;c[q+40>>2]=(c[n>>2]|0)-k;c[q+36>>2]=(c[o>>2]|0)-m;c[q+8>>2]=b;o=c[46497]|0;c[46497]=o+1;c[q+12>>2]=o;J1(j3(g)|0,j)|0;o=c[j+36>>2]|0;n=vH(o+1|0)|0;c[q+52>>2]=n;Z1(g,0,0)|0;g3(n,o,1,g)|0;a[n+o>>0]=0;o=c[46496]|0;nb[c[o>>2]&63](o,q,1)|0;a[q+16>>0]=d;d=q}s1(g)|0}while(0);l=p;return d|0}function hJ(a,b,d){a=a|0;b=b|0;d=d|0;D_(c[b+52>>2]|0);return}function iJ(a){a=a|0;D_(c[(c[a+16>>2]|0)+12>>2]|0);return}function jJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n+8|0;k=n;j=(d|0)!=0;a:do if(j){h=0;f=0;b:while(1)while(1){if(h)break a;g=c[d+(f<<2)>>2]|0;if(!g){i=6;break a}f=f+1|0;if(!(a[g>>0]|0)){h=1;continue b}}}else i=6;while(0);c:do if((i|0)==6)while(1){f=c[e>>2]|0;if(!f)break c;$B(b,f)|0;$B(b,150517)|0;e=e+4|0;i=6}while(0);d:do if(j){h=0;while(1){f=c[d+(h<<2)>>2]|0;if(!f)break d;do if(a[f>>0]|0){e=ZL(f)|0;if(!e){c[k>>2]=f;Pw(0,101358,k)|0;break}g=L1(e,135739)|0;if(!g){c[m>>2]=e;Pw(0,101386,m)|0;break}while(1){f=YL(g)|0;if(!f)break;$B(b,f)|0}$B(b,150517)|0;s1(g)|0}while(0);h=h+1|0}}while(0);l=n;return}function kJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;d=c[d+52>>2]|0;a:while(1){e=a[d>>0]|0;b:do switch(e<<24>>24){case 0:break a;case 37:{if((a[d+1>>0]|0)==37){e=d+2|0;if((((V$(e,101414,3)|0)!=0?(V$(e,101418,5)|0)!=0:0)?(V$(e,101424,3)|0)!=0:0)?(V$(e,101428,7)|0)!=0:0){e=37;break b}else g=37;c:while(1){switch(g<<24>>24){case 13:{f=10;break c}case 10:case 0:{f=12;break c}default:{}}g=d+1|0;d=g;g=a[g>>0]|0}if((f|0)==10){e=d+1|0;if((a[e>>0]|0)==10){d=d+2|0;continue a}}else if((f|0)==12)e=d+1|0;d=g<<24>>24==0?d:e;continue a}else e=37;break}default:{}}while(0);d:while(1){switch(e<<24>>24){case 10:case 13:case 0:break d;default:{}}aC(b,e<<24>>24)|0;g=d+1|0;d=g;e=a[g>>0]|0}f=d+1|0;if(e<<24>>24==13?(a[f>>0]|0)==10:0)d=d+2|0;else d=e<<24>>24==0?d:f;aC(b,10)|0}return}function lJ(b){b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;d=c[46496]|0;a:do if(d|0){d=nb[c[d>>2]&63](d,0,128)|0;while(1){if(!d)break a;if(!(a[d+16>>0]|0)){c[e>>2]=c[d+12>>2];fC(b,101436,e);$B(b,101454)|0;kJ(b,d);$B(b,101472)|0;$B(b,101487)|0}g=c[46496]|0;d=nb[c[g>>2]&63](g,d,8)|0}}while(0);l=f;return}function mJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;e=g;a:do switch(d|0){case 0:{f=b;break}case 1:{f=SM(b)|0;break}default:{switch(nJ(b)|0){case 2:break;case 1:{f=SM(b)|0;break a}default:{f=b;break a}}if(!(c[46498]|0)){Pw(0,101499,e)|0;c[46498]=1;f=b}else f=b}}while(0);if(!(c[46499]|0))Tw(185996,0,0);d=c[46500]|0;if(d>>>0>=(c[46501]|0)>>>0){Uw(185996,1)|0;d=c[46500]|0}c[46500]=d+1;a[d>>0]=40;e=f;b:while(1){switch(a[e>>0]|0){case 0:break b;case 92:case 41:case 40:{d=c[46500]|0;if(d>>>0>=(c[46501]|0)>>>0){Uw(185996,1)|0;d=c[46500]|0}c[46500]=d+1;a[d>>0]=92;break}default:{}}d=c[46500]|0;if(d>>>0>=(c[46501]|0)>>>0){Uw(185996,1)|0;d=c[46500]|0}h=a[e>>0]|0;c[46500]=d+1;a[d>>0]=h;e=e+1|0}d=c[46500]|0;if(d>>>0>=(c[46501]|0)>>>0){Uw(185996,1)|0;d=c[46500]|0}c[46500]=d+1;a[d>>0]=41;if((f|0)!=(b|0))D_(f);d=c[46500]|0;if(d>>>0>=(c[46501]|0)>>>0){Uw(185996,1)|0;d=c[46500]|0}a[d>>0]=0;h=c[46499]|0;c[46500]=h;l=g;return h|0}function nJ(b){b=b|0;var c=0,d=0;c=0;a:while(1){while(1){d=a[b>>0]|0;if(!(d<<24>>24))break a;if((d&255)<127)b=b+1|0;else break}if((d&-4)<<24>>24==-64){c=1;b=b+2|0}else{c=2;break}}return c|0}function oJ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+96|0;i=n+80|0;j=n+72|0;m=n+64|0;g=n+32|0;k=n;h[g>>3]=+h[a>>3];h[g+8>>3]=+h[a+8>>3];h[g+16>>3]=+h[b>>3];h[g+24>>3]=+h[b+8>>3];do if((TU(d,g,j)|0)>=0){if(!f){b=d+4|0;a=c[b>>2]|0;f=c[46504]|0;if((a|0)>(c[46503]|0)){if(!f)a=vH(a<<5)|0;else a=xH(f,a<<5)|0;c[46504]=a;g=c[b>>2]|0;c[46503]=g;f=a}else g=a;b=c[d>>2]|0;a=0;while(1){if((a|0)>=(g|0))break;o=f+(a<<5)|0;d=b+(a<<4)|0;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];o=f+(a<<5)+16|0;d=a+1|0;p=b+(((d|0)%(g|0)|0)<<4)|0;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];a=d}c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];if((xU(f,g,i,k,m)|0)<0){a=0;break}}else{c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];oV(i,m)}a=m+4|0;if(!(pJ(c[a>>2]|0)|0)){g=c[a>>2]|0;a=c[46505]|0;f=c[m>>2]|0;b=0;while(1){if((b|0)>=(g|0))break;p=a+(b<<4)|0;o=f+(b<<4)|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];b=b+1|0}c[e>>2]=g}else a=0}else a=0;while(0);l=n;return a|0}function pJ(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;d=e;b=c[46506]|0;do if((b|0)<(a|0)){a=a+300-((a|0)%300|0)+b|0;b=xH(c[46505]|0,a<<4)|0;c[46505]=b;if(!b){Pw(1,101589,d)|0;a=1;break}else{c[46506]=a;a=0;break}}else a=0;while(0);l=e;return a|0}function qJ(){var a=0,b=0,d=0;b=l;l=l+16|0;a=b;d=c[46507]|0;c[46507]=d+1;do if((d|0)<=0){d=vH(4800)|0;c[46505]=d;if(!d){Pw(1,101612,a)|0;a=1;break}c[46506]=300;c[46508]=0;c[46509]=0;if(0){EL();a=0}else a=0}else a=0;while(0);l=b;return a|0}function rJ(){var a=0,b=0,d=0,e=0.0,f=0,g=0;b=l;l=l+16|0;a=b;d=c[46507]|0;c[46507]=d+-1;if((d|0)<=1?(D_(c[46505]|0),0):0){d=c[15686]|0;g=c[46508]|0;f=c[46509]|0;e=+FL();c[a>>2]=g;c[a+4>>2]=f;h[a+8>>3]=e;g1(d,101650,a)|0}l=b;return}function sJ(a,b){a=a|0;b=b|0;return tJ(a,b,0)|0}function tJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;L=l;l=l+176|0;G=L+168|0;K=L+128|0;x=L+120|0;v=L+112|0;i=L+104|0;s=L+88|0;n=L+72|0;g=L+64|0;t=L+160|0;I=L+152|0;y=L+144|0;u=L+32|0;w=L;J=L+136|0;c[46508]=(c[46508]|0)+1;H=c[b+80>>2]|0;c[46509]=(c[46509]|0)+H;f=b+88|0;while(1){C=c[f>>2]|0;if(!C){D=4;break}f=c[C+16>>2]|0;if(!(a[f+112>>0]|0)){D=5;break}else f=f+116|0}do if((D|0)==4){Pw(1,101693,g)|0;f=0}else if((D|0)==5){B=c[b+84>>2]|0;if(!(uJ(H,B,b)|0)){g=H<<3;if((g|0)>(c[46510]|0)){f=c[46511]|0;if(!f)f=vH(H<<7)|0;else f=xH(f,H<<7)|0;c[46511]=f;c[46510]=g}a:do if((H|0)>1?+h[B+8>>3]>+h[B+40>>3]:0){f=0;while(1){if((f|0)==(H|0)){p=1;break a}z=B+(f<<5)+24|0;m=+h[z>>3];A=B+(f<<5)+8|0;h[z>>3]=-+h[A>>3];h[A>>3]=-m;f=f+1|0}}else p=0;while(0);r=c[C>>2]&3;z=C+48|0;f=c[((r|0)==3?C:z)+40>>2]|0;A=C+-48|0;if((f|0)==(c[((r|0)==2?C:A)+40>>2]|0)){c[i>>2]=ry(f)|0;Pw(1,101800,i)|0;f=0;break}o=H+-1|0;q=c[46511]|0;r=q;f=0;j=0;b:while(1){if((j|0)>=(H|0)){j=o;n=f;break}if((j|0)>0)g=+h[B+(j<<5)+8>>3]>+h[B+(j+-1<<5)+8>>3]?-1:1;else g=0;if((j|0)<(o|0))i=+h[B+(j+1<<5)+8>>3]>+h[B+(j<<5)+8>>3]?1:-1;else i=0;c:do if((g|0)!=(i|0))if((g|0)==1|(i|0)==-1){g=B+(j<<5)|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+8|0;D=29;break}else{g=B+(j<<5)+16|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+24|0;D=29;break}else{switch(g|0){case -1:break c;case 0:break;default:{D=28;break b}}g=B+(j<<5)|0;h[q+(f<<4)>>3]=+h[g>>3];i=f+1|0;h[q+(f<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(i<<4)>>3]=+h[g>>3];g=B+(j<<5)+8|0;D=29}while(0);if((D|0)==29){D=0;h[q+(i<<4)+8>>3]=+h[g>>3];f=f+2|0}j=j+1|0}if((D|0)==28){c[n>>2]=g;c[n+4>>2]=g;c[n+8>>2]=480;Pw(1,101735,n)|0;f=0;break}d:while(1){if((j|0)<=-1)break;if((j|0)<(o|0))f=+h[B+(j<<5)+8>>3]>+h[B+(j+1<<5)+8>>3]?-1:1;else f=0;if((j|0)>0)g=+h[B+(j+-1<<5)+8>>3]>+h[B+(j<<5)+8>>3]?1:-1;else g=0;e:do if((f|0)!=(g|0))if((f|0)==1|(g|0)==-1){f=B+(j<<5)|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+24>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+8|0;i=2;break}else{f=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+24|0;i=2;break}else switch(f|0){case 0:{f=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[f>>3];g=n+1|0;h[q+(n<<4)+8>>3]=+h[B+(j<<5)+8>>3];h[q+(g<<4)>>3]=+h[f>>3];f=B+(j<<5)+24|0;i=2;break e}case -1:{N=B+(j<<5)+16|0;h[q+(n<<4)>>3]=+h[N>>3];f=B+(j<<5)+8|0;i=n+1|0;h[q+(n<<4)+8>>3]=+h[f>>3];h[q+(i<<4)>>3]=+h[N>>3];N=B+(j<<5)+24|0;M=n+2|0;h[q+(i<<4)+8>>3]=+h[N>>3];i=B+(j<<5)|0;h[q+(M<<4)>>3]=+h[i>>3];g=n+3|0;h[q+(M<<4)+8>>3]=+h[N>>3];h[q+(g<<4)>>3]=+h[i>>3];i=4;break e}default:{D=42;break d}}while(0);h[q+(g<<4)+8>>3]=+h[f>>3];j=j+-1|0;n=n+i|0}if((D|0)==42){c[s>>2]=f;c[s+4>>2]=f;c[s+8>>2]=513;Pw(1,101735,s)|0;f=0;break}f:do if(!p)f=0;else{f=0;while(1){if((f|0)>=(H|0)){f=0;break}M=B+(f<<5)+24|0;m=+h[M>>3];N=B+(f<<5)+8|0;h[M>>3]=-+h[N>>3];h[N>>3]=-m;f=f+1|0}while(1){if((f|0)>=(n|0)){f=0;break f}N=q+(f<<4)+8|0;h[N>>3]=-+h[N>>3];f=f+1|0}}while(0);while(1){if((f|0)>=(H|0))break;h[B+(f<<5)>>3]=2147483647.0;h[B+(f<<5)+16>>3]=-2147483648.0;f=f+1|0}c[t>>2]=r;i=t+4|0;c[i>>2]=n;h[u>>3]=+h[b>>3];h[u+8>>3]=+h[b+8>>3];h[u+16>>3]=+h[b+40>>3];h[u+24>>3]=+h[b+48>>3];if((TU(t,u,I)|0)<0){Pw(1,101839,v)|0;f=0;break}if(!e){g=c[i>>2]|0;f=c[46504]|0;if((g|0)>(c[46503]|0)){if(!f)f=vH(g<<5)|0;else f=xH(f,g<<5)|0;c[46504]=f;g=c[i>>2]|0;c[46503]=g}j=c[46511]|0;i=0;while(1){if((i|0)>=(g|0))break;M=f+(i<<5)|0;N=j+(i<<4)|0;c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];M=f+(i<<5)+16|0;N=i+1|0;v=j+(((N|0)%(g|0)|0)<<4)|0;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[M+8>>2]=c[v+8>>2];c[M+12>>2]=c[v+12>>2];i=N}if(!(a[b+29>>0]|0)){k=0.0;m=0.0}else{m=+h[b+16>>3];k=+E(+m);m=+F(+m)}h[w+8>>3]=m;h[w>>3]=k;if(!(a[b+69>>0]|0)){k=0.0;m=0.0}else{m=+h[b+56>>3];k=-+E(+m);m=-+F(+m)}h[w+24>>3]=m;h[w+16>>3]=k;c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];if((xU(f,g,G,w,y)|0)<0){Pw(1,101878,x)|0;f=0;break}}else{c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];oV(G,y)}n=y+4|0;if(!(pJ(c[n>>2]|0)|0)){f=0;while(1){if((f|0)>=(H|0))break;h[B+(f<<5)>>3]=2147483647.0;h[B+(f<<5)+16>>3]=-2147483648.0;f=f+1|0}i=c[n>>2]|0;j=c[46505]|0;g=c[y>>2]|0;f=0;while(1){if((f|0)>=(i|0)){i=1;f=10;g=0;break}N=j+(f<<4)|0;M=g+(f<<4)|0;c[N>>2]=c[M>>2];c[N+4>>2]=c[M+4>>2];c[N+8>>2]=c[M+8>>2];c[N+12>>2]=c[M+12>>2];f=f+1|0}while(1){if(!((g|0)<15&i<<24>>24!=0))break;vJ(B,H,c[46505]|0,c[n>>2]|0,f);j=0;while(1){if((j|0)>=(H|0))break;if(+h[B+(j<<5)>>3]==2147483647.0){D=82;break}if(+h[B+(j<<5)+16>>3]==-2147483648.0){D=82;break}j=j+1|0}if((D|0)==82){D=0;N=f<<1;f=N;g=(N|0)>(2147483647/(H|0)|0|0)?15:g}i=(j|0)==(H|0)?0:i;g=g+1|0}if(i<<24>>24){M=ry(c[((c[C>>2]&3|0)==3?C:z)+40>>2]|0)|0;N=ry(c[((c[C>>2]&3|0)==2?C:A)+40>>2]|0)|0;c[K>>2]=M;c[K+4>>2]=N;Pw(0,101916,K)|0;c[G>>2]=c[I>>2];c[G+4>>2]=c[I+4>>2];oV(G,J);vJ(B,H,c[J>>2]|0,c[J+4>>2]|0,10);D_(c[J>>2]|0)}c[d>>2]=c[n>>2];f=c[46505]|0}else f=0}else f=0}while(0);l=L;return f|0}function uJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0.0,P=0,Q=0,R=0;R=l;l=l+32|0;I=R+16|0;H=R+8|0;k=R;e=0;j=0;while(1){if((j|0)>=(a|0))break;i=b+(j<<5)|0;s=+h[b+(j<<5)+8>>3]-+h[b+(j<<5)+24>>3];if(!((s>=0.0?s:-s)<.01)?(s=+h[i>>3]-+h[b+(j<<5)+16>>3],!((s>=0.0?s:-s)<.01)):0){if((e|0)!=(j|0)){P=b+(e<<5)|0;c[P>>2]=c[i>>2];c[P+4>>2]=c[i+4>>2];c[P+8>>2]=c[i+8>>2];c[P+12>>2]=c[i+12>>2];c[P+16>>2]=c[i+16>>2];c[P+20>>2]=c[i+20>>2];c[P+24>>2]=c[i+24>>2];c[P+28>>2]=c[i+28>>2]}e=e+1|0}j=j+1|0}J=b+16|0;do if(!(+h[b>>3]>+h[J>>3])?(L=b+8|0,N=b+24|0,!(+h[L>>3]>+h[N>>3])):0){P=e+-1|0;M=c[15686]|0;w=0;while(1){if((w|0)>=(P|0))break;D=w+1|0;E=b+(D<<5)|0;f=+h[E>>3];F=b+(D<<5)+16|0;g=+h[F>>3];if(f>g){Q=16;break}A=b+(D<<5)+8|0;m=+h[A>>3];B=b+(D<<5)+24|0;n=+h[B>>3];if(m>n){Q=16;break}G=b+(w<<5)+16|0;v=+h[G>>3]<f;e=v&1;C=b+(w<<5)|0;u=+h[C>>3]>g;a=u&1;z=b+(w<<5)+24|0;t=+h[z>>3]<m;j=t&1;y=b+(w<<5)+8|0;k=+h[y>>3]>n;i=k&1;x=a+e+j+i|0;o=(x|0)!=0;if(!(0==0|o^1)){c[I>>2]=w;c[I+4>>2]=D;g1(M,102116,I)|0;wJ(d)}a:do if(o){if(!v)if(!u)if(!t){if(k){k=0;o=e;e=B;i=y;Q=24}}else{k=i;j=0;o=e;e=A;i=z;Q=24}else{k=i;a=0;o=e;e=F;i=C;Q=24}else{k=i;o=0;e=E;i=G;Q=24}if((Q|0)==24){Q=0;w=~~+h[i>>3];h[i>>3]=+h[e>>3];h[e>>3]=+(w|0);i=k;e=o}o=x+-1|0;k=0;while(1){if((k|0)>=(o|0))break a;do if((e|0)!=1){if((a|0)==1){s=+(~~((+h[F>>3]+ +h[C>>3])*.5+.5)|0);h[F>>3]=s;h[C>>3]=s;a=0;break}if((j|0)==1){s=+(~~((+h[A>>3]+ +h[z>>3])*.5+.5)|0);h[A>>3]=s;h[z>>3]=s;j=0;break}if((i|0)==1){s=+(~~((+h[B>>3]+ +h[y>>3])*.5+.5)|0);h[B>>3]=s;h[y>>3]=s;i=0}}else{s=+(~~((+h[E>>3]+ +h[G>>3])*.5+.5)|0);h[E>>3]=s;h[G>>3]=s;e=0}while(0);k=k+1|0}}while(0);p=+h[C>>3];q=+h[G>>3];r=+h[E>>3];s=+h[F>>3];i=xJ(~~p,~~q,~~r,~~s)|0;n=+h[y>>3];m=+h[z>>3];g=+h[A>>3];f=+h[B>>3];e=xJ(~~n,~~m,~~g,~~f)|0;if(!((i|0)!=0&(e|0)!=0)){w=D;continue}if((i|0)<(e|0)){B=q-p>s-r;w=q<s;h[(B?(w?G:C):w?E:F)>>3]=B?(w?r:s):w?q:p;w=D;continue}else{B=m-n>f-g;w=m<f;h[(B?(w?G:C):w?E:F)+8>>3]=B?(w?g:f):w?m:n;w=D;continue}}if((Q|0)==16){c[H>>2]=D;Pw(1,102070,H)|0;wJ(d);e=1;break}f=+h[d>>3];g=+h[b>>3];if(!(((!(f<g)?!(f>+h[J>>3]):0)?(K=+h[d+8>>3],!(K<+h[L>>3])):0)?!(K>+h[N>>3]):0)){if(0){E1(102159,42,1,M)|0;wJ(d);g=+h[b>>3];f=+h[d>>3]}if(f<g)h[d>>3]=g;else g=f;f=+h[J>>3];if(g>f)h[d>>3]=f;e=d+8|0;g=+h[e>>3];f=+h[L>>3];if(g<f){h[e>>3]=f;g=f}f=+h[N>>3];if(g>f)h[e>>3]=f}i=d+40|0;f=+h[i>>3];e=b+(P<<5)|0;g=+h[e>>3];if(((!(f<g)?!(f>+h[b+(P<<5)+16>>3]):0)?(O=+h[d+48>>3],!(O<+h[b+(P<<5)+8>>3])):0)?!(O>+h[b+(P<<5)+24>>3]):0){e=0;break}if(0){E1(102202,39,1,M)|0;wJ(d);g=+h[e>>3];f=+h[i>>3]}if(f<g){h[i>>3]=g;f=g}g=+h[b+(P<<5)+16>>3];if(f>g)h[i>>3]=g;e=d+48|0;f=+h[e>>3];g=+h[b+(P<<5)+8>>3];if(f<g)h[e>>3]=g;else g=f;f=+h[b+(P<<5)+24>>3];if(g>f){h[e>>3]=f;e=0}else e=0}else Q=12;while(0);if((Q|0)==12){Pw(1,102025,k)|0;wJ(d);e=1}l=R;return e|0}function vJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;s=O(e,b)|0;t=1.0/+(s|0);e=0;a:while(1){u=e+3|0;if((u|0)>=(d|0))break;o=c+(e<<4)|0;p=c+(e<<4)+8|0;r=e+1|0;q=c+(r<<4)|0;r=c+(r<<4)+8|0;j=e+2|0;i=c+(j<<4)|0;j=c+(j<<4)+8|0;k=c+(u<<4)|0;l=c+(u<<4)+8|0;g=0;while(1){if((g|0)>(s|0)){e=u;continue a}v=t*+(g|0);m=+h[o>>3];n=+h[p>>3];y=+h[q>>3];w=+h[r>>3];z=+h[i>>3];x=+h[j>>3];m=(y-m)*v+m;n=(w-n)*v+n;y=(z-y)*v+y;w=(x-w)*v+w;m=(y-m)*v+m;n=(w-n)*v+n;m=((z-y+(+h[k>>3]-z)*v)*v+y-m)*v+m;n=((x-w+(+h[l>>3]-x)*v)*v+w-n)*v+n;f=0;while(1){if((f|0)>=(b|0))break;if(n<=+h[a+(f<<5)+24>>3]+.0001?n>=+h[a+(f<<5)+8>>3]+-.0001:0){e=a+(f<<5)|0;if(+h[e>>3]>m)h[e>>3]=m;e=a+(f<<5)+16|0;if(+h[e>>3]<m)h[e>>3]=m}f=f+1|0}g=g+1|0}}return}function wJ(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=l;l=l+112|0;j=m+80|0;k=m+48|0;i=m+8|0;g=m;e=c[15686]|0;f=b+80|0;c[g>>2]=c[f>>2];g1(e,102242,g)|0;g=b+84|0;d=0;while(1){if((d|0)>=(c[f>>2]|0))break;r=c[g>>2]|0;q=+h[r+(d<<5)>>3];p=+h[r+(d<<5)+8>>3];o=+h[r+(d<<5)+16>>3];n=+h[r+(d<<5)+24>>3];c[i>>2]=d;h[i+8>>3]=q;h[i+16>>3]=p;h[i+24>>3]=o;h[i+32>>3]=n;g1(e,102253,i)|0;d=d+1|0}q=+h[b+8>>3];p=+h[b+16>>3];r=a[b+29>>0]|0?102284:102296;h[k>>3]=+h[b>>3];h[k+8>>3]=q;h[k+16>>3]=p;c[k+24>>2]=r;g1(e,102312,k)|0;p=+h[b+48>>3];q=+h[b+56>>3];r=a[b+69>>0]|0?102284:102296;h[j>>3]=+h[b+40>>3];h[j+8>>3]=p;h[j+16>>3]=q;c[j+24>>2]=r;g1(e,102363,j)|0;l=m;return}function xJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;do if((b|0)>(c|0)&(d|0)>(a|0)){if(!((c|0)>(a|0)|(d|0)<(a|0))){a=d-a|0;break}if((b|0)<(c|0)|(b|0)>(d|0)){b=b-a|0;a=d-c|0;a=(b|0)<(a|0)?b:a;break}else{a=b-c|0;break}}else a=0;while(0);return a|0}function yJ(a,b){a=a|0;b=b|0;return tJ(a,b,1)|0}function zJ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+80|0;g=j;i=1;f=b;while(1){h=f;f=c[(c[f+16>>2]|0)+172>>2]|0;if(!((f|0)!=0&(h|0)!=(f|0)))break;else i=i+1|0}if((i|0)>=21)g=uH(i<<2)|0;h=0;f=b;while(1){if((h|0)>=(i|0))break;c[g+(h<<2)>>2]=f;h=h+1|0;f=c[(c[f+16>>2]|0)+172>>2]|0}AJ(a,g,i,d,e);if((i|0)>20)D_(g);l=j;return}function AJ(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,P=0,Q=0;K=l;l=l+304|0;A=K+272|0;z=K+208|0;G=K+96|0;H=K+32|0;I=K+16|0;J=K;r=K+192|0;y=K+176|0;i=K+160|0;B=K+296|0;D=K+288|0;j=c[d>>2]|0;w=c[j>>2]&3;k=j+-48|0;E=c[((w|0)==2?j:k)+40>>2]|0;t=G+16|0;w=(c[(c[((w|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+16|0;x=j+16|0;F=(c[x>>2]|0)+16|0;c[z>>2]=c[w>>2];c[z+4>>2]=c[w+4>>2];c[z+8>>2]=c[w+8>>2];c[z+12>>2]=c[w+12>>2];c[A>>2]=c[F>>2];c[A+4>>2]=c[F+4>>2];c[A+8>>2]=c[F+8>>2];c[A+12>>2]=c[F+12>>2];BJ(r,z,A);c[G>>2]=c[r>>2];c[G+4>>2]=c[r+4>>2];c[G+8>>2]=c[r+8>>2];c[G+12>>2]=c[r+12>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[I>>2]=c[r>>2];c[I+4>>2]=c[r+4>>2];c[I+8>>2]=c[r+8>>2];c[I+12>>2]=c[r+12>>2];r=G+32|0;F=G+48|0;w=(c[E+16>>2]|0)+16|0;x=(c[x>>2]|0)+56|0;c[z>>2]=c[w>>2];c[z+4>>2]=c[w+4>>2];c[z+8>>2]=c[w+8>>2];c[z+12>>2]=c[w+12>>2];c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];BJ(y,z,A);c[F>>2]=c[y>>2];c[F+4>>2]=c[y+4>>2];c[F+8>>2]=c[y+8>>2];c[F+12>>2]=c[y+12>>2];c[r>>2]=c[y>>2];c[r+4>>2]=c[y+4>>2];c[r+8>>2]=c[y+8>>2];c[r+12>>2]=c[y+12>>2];c[J>>2]=c[y>>2];c[J+4>>2]=c[y+4>>2];c[J+8>>2]=c[y+8>>2];c[J+12>>2]=c[y+12>>2];a:do if((e|0)!=1&(a[191874]|0)==0){m=+h[G>>3];n=+h[F>>3];L=m-n;o=+h[G+8>>3];p=+h[G+56>>3];s=o-p;q=s*s;if(q+L*L<1.0e-06){c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];y=G+24|0;x=G+40|0;n=0.0;m=0.0}else{M=n-m;L=+C(+(q+M*M));w=c[(c[(c[b+60>>2]|0)+16>>2]|0)+248>>2]|0;N=+((O(w,e+-1|0)|0)/2|0|0);q=s*N/L;h[t>>3]=q+m;m=M*N/L;y=G+24|0;h[y>>3]=m+o;h[r>>3]=q+n;x=G+40|0;h[x>>3]=p+m;m=+(0-w|0);n=M*m/L;m=s*m/L}f=(f|0)==6;u=D+4|0;v=B+4|0;j=0;while(1){if((j|0)>=(e|0))break a;w=c[d+(j<<2)>>2]|0;k=w+-48|0;b:do if((c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0)==(E|0)){c[I>>2]=c[G>>2];c[I+4>>2]=c[G+4>>2];c[I+8>>2]=c[G+8>>2];c[I+12>>2]=c[G+12>>2];c[J>>2]=c[F>>2];c[J+4>>2]=c[F+4>>2];c[J+8>>2]=c[F+8>>2];c[J+12>>2]=c[F+12>>2];i=0;while(1){if((i|0)==4)break b;P=H+(i<<4)|0;Q=G+(i<<4)|0;c[P>>2]=c[Q>>2];c[P+4>>2]=c[Q+4>>2];c[P+8>>2]=c[Q+8>>2];c[P+12>>2]=c[Q+12>>2];i=i+1|0}}else{c[I>>2]=c[F>>2];c[I+4>>2]=c[F+4>>2];c[I+8>>2]=c[F+8>>2];c[I+12>>2]=c[F+12>>2];c[J>>2]=c[G>>2];c[J+4>>2]=c[G+4>>2];c[J+8>>2]=c[G+8>>2];c[J+12>>2]=c[G+12>>2];i=0;while(1){if((i|0)==4)break b;Q=H+(3-i<<4)|0;P=G+(i<<4)|0;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];i=i+1|0}}while(0);if(f){c[u>>2]=4;c[D>>2]=z;i=0;while(1){if((i|0)==4)break;Q=z+(i<<4)|0;P=H+(i<<4)|0;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];i=i+1|0}c[A>>2]=c[D>>2];c[A+4>>2]=c[D+4>>2];oV(A,B);QK(w,c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0,c[B>>2]|0,c[v>>2]|0,g)}else QK(w,c[((c[w>>2]&3|0)==2?w:k)+40>>2]|0,H,4,g);c[z>>2]=c[I>>2];c[z+4>>2]=c[I+4>>2];c[z+8>>2]=c[I+8>>2];c[z+12>>2]=c[I+12>>2];c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];jL(b,w,z,A);h[t>>3]=+h[t>>3]+m;h[y>>3]=+h[y>>3]+n;h[r>>3]=+h[r>>3]+m;h[x>>3]=+h[x>>3]+n;j=j+1|0}}else{if((f|0)==4){CJ(i,b);c[A>>2]=c[i>>2];c[A+4>>2]=c[i+4>>2];c[A+8>>2]=c[i+8>>2];c[A+12>>2]=c[i+12>>2];DJ(G,A)}QK(j,c[((c[j>>2]&3|0)==2?j:k)+40>>2]|0,G,4,g);c[z>>2]=c[I>>2];c[z+4>>2]=c[I+4>>2];c[z+8>>2]=c[I+8>>2];c[z+12>>2]=c[I+12>>2];c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];jL(b,j,z,A)}while(0);l=K;return}function BJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function CJ(a,b){a=a|0;b=b|0;b=c[b+16>>2]|0;h[22920]=(+h[b+32>>3]+ +h[b+16>>3])*.5;h[22921]=(+h[b+40>>3]+ +h[b+24>>3])*.5;c[a>>2]=c[45840];c[a+4>>2]=c[45841];c[a+8>>2]=c[45842];c[a+12>>2]=c[45843];return}function DJ(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,i=0.0;f=+h[a>>3];d=+h[a+48>>3];i=(d+f)*.5;g=+h[a+8>>3];c=+h[a+56>>3];e=(c+g)*.5;f=d-f;g=c-g;f=+C(+(g*g+f*f))*.2;g=+h[b>>3]-i;c=+h[b+8>>3]-e;d=+C(+(c*c+g*g));if(!(d==0.0)){g=i-g/d*f;i=e-c/d*f;h[a+32>>3]=g;h[a+16>>3]=g;h[a+40>>3]=i;h[a+24>>3]=i}return}function EJ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0.0,G=0,H=0.0,I=0.0,J=0.0;E=l;l=l+208|0;t=E+192|0;s=E+176|0;B=E+32|0;w=E+16|0;x=E;y=E+160|0;z=E+144|0;u=E+128|0;v=E+112|0;g=e&2130706432;A=(e&8|0)==0?((g|0)==0?4:g):8;if((A|0)==436207616)FJ(a,b,d,f);else{D=uH((d<<6)+64|0)|0;p=d+-1|0;q=x+8|0;r=w+8|0;o=12.0;e=0;while(1){if((e|0)>=(d|0))break;n=b+(e<<4)|0;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];c[w+8>>2]=c[n+8>>2];c[w+12>>2]=c[n+12>>2];if((e|0)<(p|0)){e=e+1|0;n=b+(e<<4)|0;c[x>>2]=c[n>>2];c[x+4>>2]=c[n+4>>2];c[x+8>>2]=c[n+8>>2];c[x+12>>2]=c[n+12>>2]}else{c[x>>2]=c[b>>2];c[x+4>>2]=c[b+4>>2];c[x+8>>2]=c[b+8>>2];c[x+12>>2]=c[b+12>>2];e=e+1|0}m=+h[x>>3]-+h[w>>3];F=+h[q>>3]-+h[r>>3];m=+C(+(F*F+m*m))*.3333333333333333;o=o<m?o:m}k=(g|16777216|0)==83886080;n=(A|0)==4;j=(g|0)==16777216;e=0;i=0;while(1){if((i|0)>=(d|0))break;g=b+(i<<4)|0;c[w>>2]=c[g>>2];c[w+4>>2]=c[g+4>>2];c[w+8>>2]=c[g+8>>2];c[w+12>>2]=c[g+12>>2];if((i|0)<(p|0)){g=b+(i+1<<4)|0;c[x>>2]=c[g>>2];c[x+4>>2]=c[g+4>>2];c[x+8>>2]=c[g+8>>2];c[x+12>>2]=c[g+12>>2]}else{c[x>>2]=c[b>>2];c[x+4>>2]=c[b+4>>2];c[x+8>>2]=c[b+8>>2];c[x+12>>2]=c[b+12>>2]}m=+h[x>>3]-+h[w>>3];F=+h[q>>3]-+h[r>>3];m=o/+C(+(F*F+m*m));m=k?m*.3333333333333333:j?m*.5:m;g=D+(e<<4)|0;if(n){c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];GJ(y,m*.5,s,t);c[g>>2]=c[y>>2];c[g+4>>2]=c[y+4>>2];c[g+8>>2]=c[y+8>>2];c[g+12>>2]=c[y+12>>2]}else{c[g>>2]=c[w>>2];c[g+4>>2]=c[w+4>>2];c[g+8>>2]=c[w+8>>2];c[g+12>>2]=c[w+12>>2]}g=D+(e+1<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];GJ(z,m,s,t);c[g>>2]=c[z>>2];c[g+4>>2]=c[z+4>>2];c[g+8>>2]=c[z+8>>2];c[g+12>>2]=c[z+12>>2];g=e+3|0;G=D+(e+2<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];GJ(u,1.0-m,s,t);c[G>>2]=c[u>>2];c[G+4>>2]=c[u+4>>2];c[G+8>>2]=c[u+8>>2];c[G+12>>2]=c[u+12>>2];if(n){G=D+(g<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[t>>2]=c[x>>2];c[t+4>>2]=c[x+4>>2];c[t+8>>2]=c[x+8>>2];c[t+12>>2]=c[x+12>>2];GJ(v,1.0-m*.5,s,t);c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[G+8>>2]=c[v+8>>2];c[G+12>>2]=c[v+12>>2];e=e+4|0}else e=g;i=i+1|0}k=D+(e<<4)|0;c[k>>2]=c[D>>2];c[k+4>>2]=c[D+4>>2];c[k+8>>2]=c[D+8>>2];c[k+12>>2]=c[D+12>>2];k=D+(e+1<<4)|0;j=D+16|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];e=D+(e+2<<4)|0;k=D+32|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];e=A&2147483647;a:do if((e|0)<201326592){if((e|0)>=83886080){if((e|0)<134217728){if((e|0)<100663296){switch(e|0){case 83886080:break;default:break a}if((d|0)==4){G=uH(192)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];p=G+16|0;t=b+16|0;c[p>>2]=c[t>>2];c[p+4>>2]=c[t+4>>2];c[p+8>>2]=c[t+8>>2];c[p+12>>2]=c[t+12>>2];p=D+48|0;t=D+64|0;o=+h[t>>3];n=G+32|0;h[n>>3]=o;q=D+56|0;r=D+72|0;H=+h[r>>3];z=G+40|0;h[z>>3]=H;F=+h[p>>3]+o-+h[k>>3];u=G+48|0;h[u>>3]=F;J=+h[q>>3]+H-+h[D+40>>3];x=G+56|0;h[x>>3]=J;I=+h[t>>3]+F-+h[p>>3];p=G+64|0;h[p>>3]=I;m=+h[r>>3]+J-+h[q>>3];q=G+72|0;h[q>>3]=m;r=G+80|0;h[r>>3]=o+I-F;h[G+88>>3]=H+m-J;t=D+96|0;v=D+80|0;J=+h[v>>3];d=G+144|0;h[d>>3]=J;w=D+104|0;s=D+88|0;m=+h[s>>3];h[G+152>>3]=m;H=+h[t>>3]+J-+h[D+112>>3];y=G+128|0;h[y>>3]=H;F=+h[w>>3]+m-+h[D+120>>3];A=G+136|0;h[A>>3]=F;I=+h[v>>3]+H-+h[t>>3];t=G+112|0;h[t>>3]=I;o=+h[s>>3]+F-+h[w>>3];w=G+120|0;h[w>>3]=o;s=G+96|0;h[s>>3]=J+I-H;v=G+104|0;h[v>>3]=m+o-F;k=G+160|0;j=b+32|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];k=G+176|0;b=b+48|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];_O(a,G,12,f);c[B>>2]=c[n>>2];c[B+4>>2]=c[n+4>>2];c[B+8>>2]=c[n+8>>2];c[B+12>>2]=c[n+12>>2];F=+h[n>>3];o=+h[u>>3];F=F+F-o;u=B+16|0;h[u>>3]=F;m=+h[z>>3];H=+h[x>>3];m=m+m-H;x=B+24|0;h[x>>3]=m;z=B+32|0;h[z>>3]=+h[p>>3]+F-o;b=B+40|0;h[b>>3]=+h[q>>3]+m-H;f=B+48|0;c[f>>2]=c[r>>2];c[f+4>>2]=c[r+4>>2];c[f+8>>2]=c[r+8>>2];c[f+12>>2]=c[r+12>>2];bP(a,B,4);c[B>>2]=c[s>>2];c[B+4>>2]=c[s+4>>2];c[B+8>>2]=c[s+8>>2];c[B+12>>2]=c[s+12>>2];H=+h[s>>3];m=+h[t>>3];H=H-(m-H);h[u>>3]=H;o=+h[v>>3];F=+h[w>>3];o=o-(F-o);h[x>>3]=o;h[z>>3]=+h[y>>3]+H-m;h[b>>3]=+h[A>>3]+o-F;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];bP(a,B,4);D_(G);break}else qa(102412,102423,737,102432)}if((e|0)<117440512){switch(e|0){case 100663296:break;default:break a}y=d+5|0;G=uH(y<<4)|0;z=b+16|0;H=+h[z>>3];H=(+h[b>>3]-H)*.625+H;h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;v=D+48|0;w=D+56|0;x=D+72|0;J=(+h[d>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*1.5;h[G+8>>3]=J;I=+h[z>>3];I=(+h[b>>3]-I)*.25+I;h[G+16>>3]=I;h[G+24>>3]=J;h[G+32>>3]=I;F=+h[A>>3];h[G+40>>3]=(+h[d>>3]-F)*.5+F;I=(+h[k>>3]-+h[v>>3])*.5+I;h[G+48>>3]=I;F=+h[A>>3];h[G+56>>3]=(+h[d>>3]-F)*.5+F;h[G+64>>3]=I;I=+h[A>>3];I=(+h[d>>3]-I)*.5+I+(+h[w>>3]-+h[x>>3]);h[G+72>>3]=I;h[G+80>>3]=H;h[G+88>>3]=I;h[G+96>>3]=H;I=I-(+h[w>>3]-+h[x>>3])*.25;h[G+104>>3]=I;h[G+112>>3]=+h[k>>3]+H-+h[v>>3];h[G+120>>3]=(+h[w>>3]-+h[x>>3])*.5+I;h[G+128>>3]=+h[G>>3];h[G+136>>3]=(+h[w>>3]-+h[x>>3])*.25+J;_O(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 117440512:break;default:break a}d=d+1|0;G=uH(d<<4)|0;h[G>>3]=+h[j>>3];z=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[z>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[D+48>>3];J=+h[z>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];B=b+40|0;h[G+40>>3]=(+h[z>>3]-+h[A>>3])*.5+ +h[B>>3];h[G+48>>3]=+h[j>>3];h[G+56>>3]=(+h[z>>3]-+h[A>>3])*.5+ +h[B>>3];J=+h[b+8>>3];h[G+72>>3]=J-(J-+h[b+56>>3])*.5;h[G+64>>3]=+h[b>>3];_O(a,G,d,f);D_(G);break}}if((e|0)<167772160)if((e|0)<150994944){switch(e|0){case 134217728:break;default:break a}y=d+4|0;G=uH(y<<4)|0;z=b+16|0;F=+h[z>>3];x=D+48|0;F=(+h[b>>3]-F)*.5+F+(+h[k>>3]-+h[x>>3])*.25;h[G>>3]=F;A=b+40|0;J=+h[A>>3];d=b+24|0;J=(+h[d>>3]-J)*.5+J;h[G+8>>3]=J;h[G+16>>3]=F;v=D+56|0;w=D+72|0;H=(+h[v>>3]-+h[w>>3])*.5+J;h[G+24>>3]=H;F=(+h[k>>3]-+h[x>>3])*.5+F;h[G+32>>3]=F;h[G+40>>3]=H;h[G+48>>3]=F;F=(+h[v>>3]-+h[w>>3])*.5+H;h[G+56>>3]=F;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.75;h[G+64>>3]=I;h[G+72>>3]=F;h[G+80>>3]=I;h[G+88>>3]=H;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.25;h[G+96>>3]=I;h[G+104>>3]=H;h[G+112>>3]=I;h[G+120>>3]=J;_O(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 150994944:break;default:break a}y=d+2|0;G=uH(y<<4)|0;z=b+16|0;H=+h[z>>3];x=D+48|0;H=(+h[b>>3]-H)*.5+H+(+h[k>>3]-+h[x>>3])*.75;h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;J=(+h[d>>3]-J)*.5+J;h[G+8>>3]=J;h[G+16>>3]=H;v=D+56|0;w=D+72|0;H=(+h[v>>3]-+h[w>>3])*.25+J;h[G+24>>3]=H;I=+h[z>>3];h[G+32>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*.25;I=(+h[v>>3]-+h[w>>3])*.5+H;h[G+40>>3]=I;F=+h[z>>3];h[G+48>>3]=(+h[b>>3]-F)*.5+F+(+h[k>>3]-+h[x>>3])*-.25;h[G+56>>3]=I;I=+h[z>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[x>>3])*-.75;h[G+64>>3]=I;h[G+72>>3]=H;h[G+80>>3]=I;h[G+88>>3]=J;_O(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else if((e|0)<184549376){switch(e|0){case 167772160:break;default:break a}y=d+1|0;G=uH(y<<4)|0;z=b+16|0;H=+h[z>>3];v=D+48|0;H=+h[k>>3]+H+(+h[b>>3]-H)*.5-+h[v>>3];h[G>>3]=H;A=b+40|0;J=+h[A>>3];d=b+24|0;w=D+56|0;x=D+72|0;J=(+h[d>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*.25;h[G+8>>3]=J;H=H-+h[k>>3]+ +h[v>>3];h[G+16>>3]=H;h[G+24>>3]=+h[w>>3]+J-+h[x>>3];h[G+32>>3]=H;H=(+h[w>>3]-+h[x>>3])*.5+J;h[G+40>>3]=H;I=+h[z>>3];I=(+h[b>>3]-I)*.25+I;h[G+48>>3]=I;h[G+56>>3]=H;h[G+64>>3]=I;h[G+72>>3]=J;_O(a,G,y,f);h[B>>3]=+h[z>>3];J=+h[A>>3];h[B+8>>3]=(+h[d>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 184549376:break;default:break a}z=d+4|0;G=uH(z<<4)|0;y=b+16|0;H=+h[y>>3];I=+h[b>>3]-H;u=D+48|0;I=I*.125+H+(+h[k>>3]-+h[u>>3]+I)*.5;h[G>>3]=I;w=b+40|0;H=+h[w>>3];x=b+24|0;d=D+56|0;v=D+72|0;H=(+h[x>>3]-H)*.5+H+(+h[d>>3]-+h[v>>3])*.25;h[G+8>>3]=H;J=+h[y>>3];J=(+h[b>>3]-J)*.375+J;h[G+16>>3]=J;h[G+24>>3]=H;h[G+32>>3]=J;H=(+h[d>>3]-+h[v>>3])*.5+H;h[G+40>>3]=H;J=J-(+h[k>>3]-+h[u>>3])*.5;h[G+48>>3]=J;h[G+56>>3]=H;A=G+64|0;h[A>>3]=J;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[d>>3]-+h[v>>3])*-.25;h[G+72>>3]=J;H=I-(+h[k>>3]-+h[u>>3])*.5;h[G+80>>3]=H;h[G+88>>3]=J;h[G+96>>3]=H;J=J-(+h[d>>3]-+h[v>>3])*.5;h[G+104>>3]=J;v=G+112|0;h[v>>3]=I;h[G+120>>3]=J;_O(a,G,z,f);h[B>>3]=+h[y>>3];J=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-J)*.5+J;z=B+16|0;h[z>>3]=+h[A>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;bP(a,B,2);h[B>>3]=+h[v>>3];J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=+h[b>>3];h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;bP(a,B,2);D_(G);break}}if((e|0)<33554432){if((e|0)<8){switch(e|0){case 4:break;default:break a}i=vH((d*96|0)+32|0)|0;e=0;g=0;while(1){j=g|1;k=i+(g<<4)|0;if((e|0)>=(d|0))break;b=e<<2;G=D+(b<<4)|0;c[k>>2]=c[G>>2];c[k+4>>2]=c[G+4>>2];c[k+8>>2]=c[G+8>>2];c[k+12>>2]=c[G+12>>2];G=i+(j<<4)|0;B=D+((b|1)<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+2<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+3<<4)|0;B=D+((b|2)<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+4<<4)|0;c[G>>2]=c[B>>2];c[G+4>>2]=c[B+4>>2];c[G+8>>2]=c[B+8>>2];c[G+12>>2]=c[B+12>>2];G=i+(g+5<<4)|0;b=D+((b|3)<<4)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];e=e+1|0;g=g+6|0}c[k>>2]=c[i>>2];c[k+4>>2]=c[i+4>>2];c[k+8>>2]=c[i+8>>2];c[k+12>>2]=c[i+12>>2];d=i+(j<<4)|0;G=i+16|0;c[d>>2]=c[G>>2];c[d+4>>2]=c[G+4>>2];c[d+8>>2]=c[G+8>>2];c[d+12>>2]=c[G+12>>2];aP(a,G,j,0,0,f&255);D_(i);break}if((e|0)<16777216){switch(e|0){case 8:break;default:break a}_O(a,b,d,f);g=B+16|0;e=0;while(1){if((e|0)>=(d|0))break a;G=e*3|0;f=D+(G+2<<4)|0;c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];c[B+12>>2]=c[f+12>>2];G=D+(G+4<<4)|0;c[g>>2]=c[G>>2];c[g+4>>2]=c[G+4>>2];c[g+8>>2]=c[G+8>>2];c[g+12>>2]=c[G+12>>2];bP(a,B,2);e=e+1|0}}switch(e|0){case 16777216:break;default:break a}g=d+1|0;i=uH(g<<4)|0;e=1;while(1){if((e|0)>=(d|0))break;G=i+(e<<4)|0;A=b+(e<<4)|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];e=e+1|0}b=d*3|0;A=D+(b+1<<4)|0;c[i>>2]=c[A>>2];c[i+4>>2]=c[A+4>>2];c[i+8>>2]=c[A+8>>2];c[i+12>>2]=c[A+12>>2];d=i+(d<<4)|0;G=D+(b+-1<<4)|0;c[d>>2]=c[G>>2];c[d+4>>2]=c[G+4>>2];c[d+8>>2]=c[G+8>>2];c[d+12>>2]=c[G+12>>2];_O(a,i,g,f);D_(i);c[B>>2]=c[G>>2];c[B+4>>2]=c[G+4>>2];c[B+8>>2]=c[G+8>>2];c[B+12>>2]=c[G+12>>2];G=B+16|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];f=B+32|0;h[f>>3]=+h[B>>3]+ +h[G>>3]-+h[D+(b<<4)>>3];h[B+40>>3]=+h[B+8>>3]+ +h[B+24>>3]-+h[D+(b<<4)+8>>3];bP(a,G,2);c[G>>2]=c[f>>2];c[G+4>>2]=c[f+4>>2];c[G+8>>2]=c[f+8>>2];c[G+12>>2]=c[f+12>>2];bP(a,B,2);break}else{if((e|0)<50331648){switch(e|0){case 33554432:break;default:break a}g=d+2|0;i=uH(g<<4)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];j=i+16|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];j=D+48|0;d=D+64|0;h[i+32>>3]=(+h[j>>3]-+h[d>>3])*.3333333333333333+ +h[k>>3];G=D+56|0;e=D+72|0;h[i+40>>3]=(+h[G>>3]-+h[e>>3])*.3333333333333333+ +h[D+40>>3];J=+h[j>>3];h[i+48>>3]=(J-+h[d>>3])*.3333333333333333+J;J=+h[G>>3];h[i+56>>3]=(J-+h[e>>3])*.3333333333333333+J;e=4;while(1){if((e|0)>=(g|0))break;G=i+(e<<4)|0;d=b+(e+-2<<4)|0;c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];e=e+1|0}_O(a,i,g,f);D_(i);c[B>>2]=c[j>>2];c[B+4>>2]=c[j+4>>2];c[B+8>>2]=c[j+8>>2];c[B+12>>2]=c[j+12>>2];G=B+16|0;c[G>>2]=c[k>>2];c[G+4>>2]=c[k+4>>2];c[G+8>>2]=c[k+8>>2];c[G+12>>2]=c[k+12>>2];bP(a,B,2);break}if((e|0)>=67108864){switch(e|0){case 67108864:break;default:break a}if((d|0)==4){G=uH(96)|0;c[G>>2]=c[b>>2];c[G+4>>2]=c[b+4>>2];c[G+8>>2]=c[b+8>>2];c[G+12>>2]=c[b+12>>2];d=G+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];d=G+32|0;A=D+64|0;c[d>>2]=c[A>>2];c[d+4>>2]=c[A+4>>2];c[d+8>>2]=c[A+8>>2];c[d+12>>2]=c[A+12>>2];d=G+48|0;b=b+32|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=G+64|0;d=D+128|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=G+80|0;z=D+160|0;c[b>>2]=c[z>>2];c[b+4>>2]=c[z+4>>2];c[b+8>>2]=c[z+8>>2];c[b+12>>2]=c[z+12>>2];_O(a,G,6,f);D_(G);h[B>>3]=+h[D+176>>3]+ +h[j>>3]-+h[D>>3];h[B+8>>3]=+h[D+184>>3]+ +h[D+24>>3]-+h[D+8>>3];G=B+16|0;c[G>>2]=c[A>>2];c[G+4>>2]=c[A+4>>2];c[G+8>>2]=c[A+8>>2];c[G+12>>2]=c[A+12>>2];bP(a,B,2);c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];bP(a,B,2);c[G>>2]=c[D>>2];c[G+4>>2]=c[D+4>>2];c[G+8>>2]=c[D+8>>2];c[G+12>>2]=c[D+12>>2];bP(a,B,2);break}else qa(102412,102423,714,102432)}switch(e|0){case 50331648:break;default:break a}g=d+3|0;i=uH(g<<4)|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];J=+h[b>>3];h[i+16>>3]=J-(J-+h[j>>3])*.25;e=D+56|0;J=(+h[e>>3]-+h[D+72>>3])*.3333333333333333+ +h[b+8>>3];h[i+24>>3]=J;I=+h[b>>3];h[i+32>>3]=I-(I-+h[j>>3])*2.0;h[i+40>>3]=J;J=+h[b>>3];h[i+48>>3]=J-(J-+h[j>>3])*2.25;h[i+56>>3]=+h[e>>3];h[i+64>>3]=+h[D+48>>3];h[i+72>>3]=+h[e>>3];e=4;while(1){if((e|0)>=(g|0))break;G=i+(e<<4)|0;d=b+(e+-3<<4)|0;c[G>>2]=c[d>>2];c[G+4>>2]=c[d+4>>2];c[G+8>>2]=c[d+8>>2];c[G+12>>2]=c[d+12>>2];e=e+1|0}_O(a,i,g,f);D_(i);break}}else if((e|0)<318767104){if((e|0)<251658240){if((e|0)<218103808){switch(e|0){case 201326592:break;default:break a}G=d<<4;u=uH(G)|0;v=b+16|0;J=+h[v>>3];h[u>>3]=J;z=b+40|0;I=+h[z>>3];A=b+24|0;y=D+48|0;w=D+56|0;x=D+72|0;I=(+h[A>>3]-I)*.5+I+(+h[w>>3]-+h[x>>3])*.125;h[u+8>>3]=I;H=(+h[k>>3]-+h[y>>3])*2.0+J;h[u+16>>3]=H;h[u+24>>3]=I;h[u+32>>3]=H;I=(+h[w>>3]-+h[x>>3])*.5+I;h[u+40>>3]=I;h[u+48>>3]=J;h[u+56>>3]=I;_O(a,u,d,f);D_(u);G=uH(G)|0;I=+h[k>>3]+ +h[v>>3]-+h[y>>3];h[G>>3]=I;J=+h[z>>3];J=(+h[A>>3]-J)*.5+J+(+h[w>>3]-+h[x>>3])*-.625;h[G+8>>3]=J;H=+h[k>>3]-+h[y>>3]+I;y=G+16|0;h[y>>3]=H;h[G+24>>3]=J;h[G+32>>3]=H;J=(+h[w>>3]-+h[x>>3])*.5+J;h[G+40>>3]=J;h[G+48>>3]=I;h[G+56>>3]=J;_O(a,G,d,f);h[B>>3]=+h[y>>3];J=+h[z>>3];h[B+8>>3]=(+h[A>>3]-J)*.5+J;h[B+16>>3]=+h[b>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}if((e|0)<234881024){switch(e|0){case 218103808:break;default:break a}G=d<<4;w=uH(G)|0;J=+h[b>>3];h[w>>3]=J;y=b+40|0;I=+h[y>>3];z=b+24|0;x=D+56|0;A=D+72|0;I=(+h[z>>3]-I)*.5+I+(+h[x>>3]-+h[A>>3])*.125;h[w+8>>3]=I;h[w+16>>3]=J;H=(+h[x>>3]-+h[A>>3])*.5+I;h[w+24>>3]=H;J=J-(+h[x>>3]-+h[A>>3])*2.0;h[w+32>>3]=J;h[w+40>>3]=H;h[w+48>>3]=J;h[w+56>>3]=I;_O(a,w,d,f);D_(w);G=uH(G)|0;I=+h[b>>3]-+h[k>>3]+ +h[D+48>>3];h[G>>3]=I;J=+h[y>>3];J=(+h[z>>3]-J)*.5+J+(+h[x>>3]-+h[A>>3])*-.625;h[G+8>>3]=J;h[G+16>>3]=I;H=(+h[x>>3]-+h[A>>3])*.5+J;h[G+24>>3]=H;I=I-(+h[x>>3]-+h[A>>3]);h[G+32>>3]=I;h[G+40>>3]=H;A=G+48|0;h[A>>3]=I;h[G+56>>3]=J;_O(a,G,d,f);h[B>>3]=+h[b+16>>3];J=+h[y>>3];h[B+8>>3]=(+h[z>>3]-J)*.5+J;h[B+16>>3]=+h[A>>3];h[B+24>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 234881024:break;default:break a}G=d<<4;y=uH(G)|0;u=b+16|0;I=+h[u>>3];v=D+48|0;I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*-1.125;h[y>>3]=I;w=b+40|0;J=+h[w>>3];x=b+24|0;A=D+56|0;z=D+72|0;J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*.125;h[y+8>>3]=J;H=+h[k>>3]-+h[v>>3]+I;h[y+16>>3]=H;h[y+24>>3]=J;h[y+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[y+40>>3]=J;h[y+48>>3]=I;h[y+56>>3]=J;_O(a,y,d,f);D_(y);y=uH(G)|0;J=+h[u>>3];J=(+h[b>>3]-J)*.5+J+(+h[k>>3]-+h[v>>3])*-1.125;h[y>>3]=J;I=+h[w>>3];I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*-.625;h[y+8>>3]=I;H=+h[k>>3]-+h[v>>3]+J;h[y+16>>3]=H;h[y+24>>3]=I;h[y+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[y+40>>3]=I;h[y+48>>3]=J;h[y+56>>3]=I;_O(a,y,d,f);D_(y);y=uH(G)|0;I=+h[u>>3];I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*.125;h[y>>3]=I;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*-.625;h[y+8>>3]=J;H=+h[k>>3]-+h[v>>3]+I;h[y+16>>3]=H;h[y+24>>3]=J;h[y+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[y+40>>3]=J;h[y+48>>3]=I;h[y+56>>3]=J;_O(a,y,d,f);D_(y);G=uH(G)|0;J=+h[u>>3];J=(+h[b>>3]-J)*.5+J+(+h[k>>3]-+h[v>>3])*.125;h[G>>3]=J;I=+h[w>>3];I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*.125;h[G+8>>3]=I;H=+h[k>>3]-+h[v>>3]+J;y=G+16|0;h[y>>3]=H;h[G+24>>3]=I;h[G+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[G+40>>3]=I;h[G+48>>3]=J;h[G+56>>3]=I;_O(a,G,d,f);h[B>>3]=+h[y>>3];I=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-I)*.5+I;z=B+16|0;h[z>>3]=+h[b>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+I;bP(a,B,2);I=+h[u>>3];h[B>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[v>>3])*-1.125;J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=I;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;bP(a,B,2);D_(G);break}}if((e|0)<285212672)if((e|0)<268435456){switch(e|0){case 251658240:break;default:break a}G=d<<4;u=uH(G)|0;v=b+16|0;J=+h[v>>3];y=D+48|0;J=J-+h[k>>3]+(+h[b>>3]-J)*.5+ +h[y>>3];h[u>>3]=J;w=b+40|0;I=+h[w>>3];x=b+24|0;A=D+56|0;z=D+72|0;I=(+h[x>>3]-I)*.5+I+(+h[A>>3]-+h[z>>3])*.125;h[u+8>>3]=I;H=(+h[k>>3]-+h[y>>3])*2.0+J;h[u+16>>3]=H;h[u+24>>3]=I;h[u+32>>3]=H;I=(+h[A>>3]-+h[z>>3])*.5+I;h[u+40>>3]=I;h[u+48>>3]=J;h[u+56>>3]=I;_O(a,u,d,f);D_(u);G=uH(G)|0;I=+h[v>>3];I=I-+h[k>>3]+(+h[b>>3]-I)*.5+ +h[y>>3];h[G>>3]=I;J=+h[w>>3];J=(+h[x>>3]-J)*.5+J+(+h[A>>3]-+h[z>>3])*-.625;h[G+8>>3]=J;H=(+h[k>>3]-+h[y>>3])*2.0+I;y=G+16|0;h[y>>3]=H;h[G+24>>3]=J;h[G+32>>3]=H;J=(+h[A>>3]-+h[z>>3])*.5+J;h[G+40>>3]=J;h[G+48>>3]=I;h[G+56>>3]=J;_O(a,G,d,f);h[B>>3]=+h[y>>3];J=+h[w>>3];y=B+8|0;h[y>>3]=(+h[x>>3]-J)*.5+J;z=B+16|0;h[z>>3]=+h[b>>3];A=b+8|0;d=b+56|0;f=B+24|0;h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;bP(a,B,2);h[B>>3]=+h[v>>3];J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[z>>3]=+h[G>>3];h[f>>3]=(+h[A>>3]-+h[d>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 268435456:break;default:break a}G=uH(d<<4)|0;h[G>>3]=+h[b>>3];v=D+48|0;x=D+56|0;y=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[x>>3]-+h[y>>3])*.5;h[G+16>>3]=+h[v>>3];J=+h[x>>3];h[G+24>>3]=J-(J-+h[y>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=(+h[x>>3]-+h[y>>3])*.5+ +h[z>>3];h[G+48>>3]=+h[b>>3];h[G+56>>3]=(+h[x>>3]-+h[y>>3])*.5+ +h[z>>3];_O(a,G,d,f);w=b+16|0;J=(+h[k>>3]-+h[v>>3])*.25;I=J+ +h[w>>3];h[B>>3]=I;H=+h[z>>3];u=b+24|0;F=+h[x>>3]-+h[y>>3];H=(+h[u>>3]-H)*.5+H+F*.125;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J+I;f=B+24|0;h[f>>3]=H-F*.25;bP(a,B,2);F=(+h[k>>3]-+h[v>>3])*.25;H=F+ +h[w>>3];h[B>>3]=H;I=+h[z>>3];J=+h[x>>3]-+h[y>>3];I=(+h[u>>3]-I)*.5+I+J*-.125;h[A>>3]=I;h[d>>3]=F+H;h[f>>3]=J*.25+I;bP(a,B,2);I=(+h[k>>3]-+h[v>>3])*.25;h[B>>3]=I+ +h[w>>3];J=(+h[x>>3]-+h[y>>3])*.75+ +h[z>>3];h[A>>3]=J;h[d>>3]=+h[b>>3]-I;h[f>>3]=J;bP(a,B,2);D_(G);break}else if((e|0)<301989888){switch(e|0){case 285212672:break;default:break a}y=uH(d<<4)|0;v=b+16|0;I=+h[v>>3];z=D+48|0;I=(+h[k>>3]-+h[z>>3]+(+h[b>>3]-I))*.5+I;h[y>>3]=I;w=b+40|0;F=+h[w>>3];x=b+24|0;F=(+h[k>>3]-+h[z>>3]+(+h[x>>3]-F))*.5+F;h[y+8>>3]=F;h[y+16>>3]=I;I=+h[w>>3];o=+h[k>>3]-+h[z>>3];I=(+h[x>>3]-I-o)*.5+I;h[y+24>>3]=I;J=+h[v>>3];J=(+h[b>>3]-J-o)*.5+J;h[y+32>>3]=J;h[y+40>>3]=I;h[y+48>>3]=J;h[y+56>>3]=F;_O(a,y,d,f);D_(y);F=+h[v>>3];F=(+h[b>>3]-F)*.5+F;J=+h[k>>3]-+h[z>>3];I=J*.75;o=F+I;h[B>>3]=o;H=+h[w>>3];H=(+h[x>>3]-H)*.5+H;I=H+I;y=B+8|0;h[y>>3]=I;A=B+16|0;h[A>>3]=o;J=J*-.75;H=H+J;G=B+24|0;h[G>>3]=H;J=F+J;h[B+32>>3]=J;h[B+40>>3]=H;h[B+48>>3]=J;h[B+56>>3]=I;d=B+64|0;c[d>>2]=c[B>>2];c[d+4>>2]=c[B+4>>2];c[d+8>>2]=c[B+8>>2];c[d+12>>2]=c[B+12>>2];bP(a,B,5);I=+h[v>>3];J=+h[b>>3];h[B>>3]=(J-I)*.5+I+(+h[k>>3]-+h[z>>3])*.75;I=+h[w>>3];h[y>>3]=(+h[x>>3]-I)*.5+I;h[A>>3]=J;d=b+8|0;f=b+56|0;h[G>>3]=(+h[d>>3]-+h[f>>3])*.5+I;bP(a,B,2);I=+h[v>>3];h[B>>3]=I;J=+h[w>>3];h[y>>3]=(+h[x>>3]-J)*.5+J;h[A>>3]=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[z>>3])*-.75;h[G>>3]=(+h[d>>3]-+h[f>>3])*.5+J;bP(a,B,2);break}else{switch(e|0){case 301989888:break;default:break a}A=d+12|0;G=uH(A<<4)|0;x=b+16|0;m=+h[x>>3];s=D+48|0;m=(+h[b>>3]-m)*.5+m+(+h[k>>3]-+h[s>>3])*.25;h[G>>3]=m;y=b+40|0;F=+h[y>>3];z=b+24|0;v=D+56|0;w=D+72|0;F=(+h[v>>3]-+h[w>>3]+(+h[z>>3]-F))*.5+F;u=G+8|0;h[u>>3]=F;h[G+16>>3]=m;F=(+h[v>>3]-+h[w>>3])*.125+F;t=G+24|0;h[t>>3]=F;H=m-(+h[k>>3]-+h[s>>3])*.125;d=G+32|0;h[d>>3]=H;o=(+h[v>>3]-+h[w>>3])*.125+F;h[G+40>>3]=o;h[G+48>>3]=m;I=(+h[v>>3]-+h[w>>3])*.125+o;h[G+56>>3]=I;h[G+64>>3]=m;m=(+h[v>>3]-+h[w>>3])*.125+I;h[G+72>>3]=m;h[G+80>>3]=H;h[G+88>>3]=m;H=+h[x>>3];H=(+h[b>>3]-H)*.5+H;h[G+96>>3]=H;h[G+104>>3]=I;J=H-(+h[k>>3]-+h[s>>3])*.125;h[G+112>>3]=J;h[G+120>>3]=m;J=J-(+h[k>>3]-+h[s>>3])*.125;h[G+128>>3]=J;h[G+136>>3]=m;h[G+144>>3]=J;h[G+152>>3]=I;I=(+h[k>>3]-+h[s>>3])*.125+J;h[G+160>>3]=I;h[G+168>>3]=o;h[G+176>>3]=J;h[G+184>>3]=F;h[G+192>>3]=J;J=+h[u>>3];h[G+200>>3]=J;h[G+208>>3]=I;h[G+216>>3]=J;u=G+224|0;h[u>>3]=H;h[G+232>>3]=+h[t>>3];h[G+240>>3]=+h[d>>3];h[G+248>>3]=J;_O(a,G,A,f);J=+h[u>>3];h[B>>3]=J;H=+h[y>>3];H=(+h[z>>3]-H)*.5+H;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J;f=B+24|0;h[f>>3]=(+h[v>>3]-+h[w>>3])*.125+H;bP(a,B,2);H=+h[u>>3];h[B>>3]=H;J=+h[y>>3];I=+h[v>>3]-+h[w>>3];J=(+h[z>>3]-J)*.5+J+I*.25;h[A>>3]=J;h[d>>3]=H;h[f>>3]=I*.125+J;bP(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}}else{if((e|0)<369098752){if((e|0)<335544320){switch(e|0){case 318767104:break;default:break a}A=d+4|0;G=uH(A<<4)|0;x=b+16|0;H=+h[x>>3];d=D+48|0;H=(+h[b>>3]-H)*.5+H+(+h[k>>3]-+h[d>>3])*.125;h[G>>3]=H;y=b+40|0;J=+h[y>>3];z=b+24|0;v=D+56|0;w=D+72|0;J=(+h[v>>3]-+h[w>>3]+(+h[z>>3]-J))*.5+J;h[G+8>>3]=J;o=(+h[k>>3]-+h[d>>3])*.125+H;h[G+16>>3]=o;I=(+h[v>>3]-+h[w>>3])*.125+J;h[G+24>>3]=I;h[G+32>>3]=o;o=(+h[v>>3]-+h[w>>3])*.25+I;h[G+40>>3]=o;h[G+48>>3]=H;F=(+h[v>>3]-+h[w>>3])*.125+o;h[G+56>>3]=F;H=H-(+h[k>>3]-+h[d>>3])*.25;h[G+64>>3]=H;h[G+72>>3]=F;F=H-(+h[k>>3]-+h[d>>3])*.125;h[G+80>>3]=F;h[G+88>>3]=o;h[G+96>>3]=F;h[G+104>>3]=I;h[G+112>>3]=H;h[G+120>>3]=J;_O(a,G,A,f);J=+h[x>>3];J=(+h[b>>3]-J)*.5+J;h[B>>3]=J;H=+h[y>>3];H=(+h[z>>3]-H)*.5+H;A=B+8|0;h[A>>3]=H;d=B+16|0;h[d>>3]=J;f=B+24|0;h[f>>3]=(+h[v>>3]-+h[w>>3])*.125+H;bP(a,B,2);H=+h[x>>3];H=(+h[b>>3]-H)*.5+H;h[B>>3]=H;J=+h[y>>3];I=+h[v>>3]-+h[w>>3];J=(+h[z>>3]-J)*.5+J+I*.25;h[A>>3]=J;h[d>>3]=H;h[f>>3]=I*.125+J;bP(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}if((e|0)<352321536){switch(e|0){case 335544320:break;default:break a}x=d+12|0;G=uH(x<<4)|0;y=b+16|0;m=+h[y>>3];u=D+48|0;m=(+h[b>>3]-m)*.5+m+(+h[k>>3]-+h[u>>3])*.25;h[G>>3]=m;z=b+40|0;F=+h[z>>3];A=b+24|0;s=D+56|0;t=D+72|0;F=(+h[s>>3]-+h[t>>3]+(+h[A>>3]-F))*.5+F;d=G+8|0;h[d>>3]=F;h[G+16>>3]=m;F=(+h[s>>3]-+h[t>>3])*.125+F;v=G+24|0;h[v>>3]=F;I=m-(+h[k>>3]-+h[u>>3])*.125;w=G+32|0;h[w>>3]=I;o=(+h[s>>3]-+h[t>>3])*.125+F;h[G+40>>3]=o;h[G+48>>3]=m;H=(+h[s>>3]-+h[t>>3])*.125+o;h[G+56>>3]=H;h[G+64>>3]=m;m=(+h[s>>3]-+h[t>>3])*.125+H;h[G+72>>3]=m;h[G+80>>3]=I;h[G+88>>3]=m;I=+h[y>>3];I=(+h[b>>3]-I)*.5+I;h[G+96>>3]=I;h[G+104>>3]=H;J=I-(+h[k>>3]-+h[u>>3])*.125;h[G+112>>3]=J;h[G+120>>3]=m;J=J-(+h[k>>3]-+h[u>>3])*.125;h[G+128>>3]=J;h[G+136>>3]=m;h[G+144>>3]=J;h[G+152>>3]=H;H=(+h[k>>3]-+h[u>>3])*.125+J;h[G+160>>3]=H;h[G+168>>3]=o;h[G+176>>3]=J;h[G+184>>3]=F;h[G+192>>3]=J;J=+h[d>>3];h[G+200>>3]=J;h[G+208>>3]=H;h[G+216>>3]=J;d=G+224|0;h[d>>3]=I;h[G+232>>3]=+h[v>>3];h[G+240>>3]=+h[w>>3];h[G+248>>3]=J;_O(a,G,x,f);c[B>>2]=c[d>>2];c[B+4>>2]=c[d+4>>2];c[B+8>>2]=c[d+8>>2];c[B+12>>2]=c[d+12>>2];d=B+16|0;h[d>>3]=+h[B>>3];J=+h[z>>3];f=B+24|0;h[f>>3]=(+h[A>>3]-J)*.5+J;bP(a,B,2);h[B>>3]=+h[y>>3];J=+h[z>>3];h[B+8>>3]=(+h[A>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}else{switch(e|0){case 352321536:break;default:break a}A=d+4|0;G=uH(A<<4)|0;x=b+16|0;I=+h[x>>3];w=D+48|0;I=(+h[b>>3]-I)*.5+I+(+h[k>>3]-+h[w>>3])*.125;h[G>>3]=I;y=b+40|0;J=+h[y>>3];z=b+24|0;u=D+56|0;v=D+72|0;J=(+h[u>>3]-+h[v>>3]+(+h[z>>3]-J))*.5+J;d=G+8|0;h[d>>3]=J;o=(+h[k>>3]-+h[w>>3])*.125+I;h[G+16>>3]=o;H=(+h[u>>3]-+h[v>>3])*.125+J;h[G+24>>3]=H;h[G+32>>3]=o;o=(+h[u>>3]-+h[v>>3])*.25+H;h[G+40>>3]=o;h[G+48>>3]=I;F=(+h[u>>3]-+h[v>>3])*.125+o;h[G+56>>3]=F;I=I-(+h[k>>3]-+h[w>>3])*.25;h[G+64>>3]=I;h[G+72>>3]=F;F=I-(+h[k>>3]-+h[w>>3])*.125;h[G+80>>3]=F;h[G+88>>3]=o;h[G+96>>3]=F;h[G+104>>3]=H;h[G+112>>3]=I;h[G+120>>3]=J;_O(a,G,A,f);J=+h[x>>3];J=(+h[b>>3]-J)*.5+J;h[B>>3]=J;A=B+8|0;h[A>>3]=+h[d>>3];d=B+16|0;h[d>>3]=J;J=+h[y>>3];f=B+24|0;h[f>>3]=(+h[z>>3]-J)*.5+J;bP(a,B,2);h[B>>3]=+h[x>>3];J=+h[y>>3];h[A>>3]=(+h[z>>3]-J)*.5+J;h[d>>3]=+h[b>>3];h[f>>3]=(+h[b+8>>3]-+h[b+56>>3])*.5+J;bP(a,B,2);D_(G);break}}if((e|0)<402653184)if((e|0)<385875968){switch(e|0){case 369098752:break;default:break a}d=d+5|0;G=uH(d<<4)|0;B=D+48|0;h[G>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;y=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[y>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[B>>3];J=+h[y>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=+h[z>>3];J=+h[k>>3];h[G+48>>3]=(J-+h[B>>3])*.5+J;h[G+56>>3]=+h[z>>3];J=+h[k>>3];h[G+64>>3]=(J-+h[B>>3])*.5+J;h[G+72>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+80>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;h[G+88>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;z=b+56|0;h[G+104>>3]=+h[z>>3];A=b+8|0;J=+h[A>>3];h[G+120>>3]=J-(J-+h[z>>3])*.5;h[G+112>>3]=+h[b>>3];h[G+136>>3]=+h[A>>3];h[G+128>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;_O(a,G,d,f);D_(G);break}else{switch(e|0){case 385875968:break;default:break a}d=d+3|0;G=uH(d<<4)|0;B=D+48|0;h[G>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;y=D+56|0;A=D+72|0;h[G+8>>3]=+h[D+24>>3]-(+h[y>>3]-+h[A>>3])*.5;h[G+16>>3]=+h[B>>3];J=+h[y>>3];h[G+24>>3]=J-(J-+h[A>>3])*.5;h[G+32>>3]=+h[b+32>>3];z=b+40|0;h[G+40>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+48>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;h[G+56>>3]=(+h[y>>3]-+h[A>>3])*.5+ +h[z>>3];h[G+64>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;z=b+56|0;h[G+72>>3]=+h[z>>3];A=b+8|0;J=+h[A>>3];h[G+88>>3]=J-(J-+h[z>>3])*.5;h[G+80>>3]=+h[b>>3];h[G+104>>3]=+h[A>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[B>>3])*.5;_O(a,G,d,f);D_(G);break}else if((e|0)<419430400){switch(e|0){case 402653184:break;default:break a}d=d+3|0;G=uH(d<<4)|0;h[G>>3]=+h[b>>3];y=b+8|0;z=D+48|0;A=D+56|0;B=D+72|0;h[G+8>>3]=+h[y>>3]-(+h[A>>3]-+h[B>>3])*.5;J=+h[k>>3];h[G+16>>3]=(J-+h[z>>3])*.5+J;h[G+24>>3]=+h[y>>3]-(+h[A>>3]-+h[B>>3])*.5;J=+h[k>>3];h[G+32>>3]=(J-+h[z>>3])*.5+J;h[G+40>>3]=+h[D+40>>3];h[G+48>>3]=+h[b+16>>3];J=+h[b+24>>3];y=b+40|0;h[G+56>>3]=J-(J-+h[y>>3])*.5;J=+h[k>>3];h[G+64>>3]=(J-+h[z>>3])*.5+J;h[G+72>>3]=+h[y>>3];h[G+88>>3]=(+h[A>>3]-+h[B>>3])*.5+ +h[y>>3];J=+h[k>>3];h[G+80>>3]=(J-+h[z>>3])*.5+J;h[G+104>>3]=(+h[A>>3]-+h[B>>3])*.5+ +h[b+56>>3];h[G+96>>3]=+h[b>>3];_O(a,G,d,f);D_(G);break}else{switch(e|0){case 419430400:break;default:break a}d=d+5|0;G=uH(d<<4)|0;h[G>>3]=+h[b>>3];B=b+8|0;A=D+48|0;y=D+56|0;z=D+72|0;h[G+8>>3]=+h[B>>3]-(+h[y>>3]-+h[z>>3])*.5;J=+h[k>>3];h[G+16>>3]=(J-+h[A>>3])*.5+J;h[G+24>>3]=+h[B>>3]-(+h[y>>3]-+h[z>>3])*.5;J=+h[k>>3];h[G+32>>3]=(J-+h[A>>3])*.5+J;h[G+40>>3]=+h[D+40>>3];h[G+48>>3]=+h[b+16>>3];J=+h[b+24>>3];B=b+40|0;h[G+56>>3]=J-(J-+h[B>>3])*.5;J=+h[k>>3];h[G+64>>3]=(J-+h[A>>3])*.5+J;h[G+72>>3]=+h[B>>3];h[G+88>>3]=(+h[y>>3]-+h[z>>3])*.5+ +h[B>>3];J=+h[k>>3];h[G+80>>3]=(J-+h[A>>3])*.5+J;B=b+56|0;h[G+104>>3]=(+h[y>>3]-+h[z>>3])*.5+ +h[B>>3];h[G+96>>3]=+h[j>>3]-(+h[k>>3]-+h[A>>3])*.5;h[G+112>>3]=+h[j>>3]-(+h[k>>3]-+h[A>>3])*.5;h[G+120>>3]=+h[B>>3];h[G+128>>3]=+h[b+48>>3];h[G+136>>3]=+h[B>>3];_O(a,G,d,f);D_(G);break}}while(0);D_(D)}l=E;return}function FJ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0;f=l;l=l+112|0;g=f;k=+h[b+8>>3]*2.0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];h[g+16>>3]=+h[b+16>>3];h[g+24>>3]=k-+h[b+24>>3];h[g+32>>3]=+h[b+32>>3];h[g+40>>3]=k-+h[b+40>>3];h[g+48>>3]=+h[b+48>>3];h[g+56>>3]=k-+h[b+56>>3];h[g+64>>3]=+h[b+64>>3];h[g+72>>3]=k-+h[b+72>>3];h[g+80>>3]=+h[b+80>>3];h[g+88>>3]=k-+h[b+88>>3];i=g+96|0;j=b+96|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];aP(a,b,d,0,0,e&255);aP(a,g,7,0,0,0);l=f;return}function GJ(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[c>>3];e=+h[c+8>>3];e=(+h[d+8>>3]-e)*b+e;h[a>>3]=(+h[d>>3]-f)*b+f;h[a+8>>3]=e;return}function HJ(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(a){a=c[c[a+4>>2]>>2]|0;if((a|0)!=89)if((a|0)==92)a=2;else return ((a|0)==91?3:(a|0)==94?4:0)|0;else a=1}else a=0;return a|0}function IJ(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,D=0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,P=0.0,Q=0.0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0.0;aa=l;l=l+144|0;J=aa+112|0;N=aa+104|0;G=aa+96|0;H=aa+88|0;i=aa+80|0;Y=aa+64|0;_=aa+48|0;R=aa+40|0;S=aa+32|0;j=aa+24|0;p=aa+16|0;D=aa+136|0;A=aa+128|0;L=aa;$=uH(48)|0;Z=b+16|0;W=c[(c[(c[Z>>2]|0)+8>>2]|0)+8>>2]|0;g=(W|0)==1616;X=c[W>>2]|0;d=c[W+4>>2]|0;e=c[W+8>>2]|0;m=+h[W+16>>3];n=+h[W+32>>3];o=+h[W+24>>3];X=X|(QL(xx(b,102485)|0)|0)&255;do if(!g){if(!X){W=c[Z>>2]|0;k=+h[W+32>>3]*72.0;f=+h[W+40>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);k=+(~~(k+(k>=0.0?.5:-.5))|0);break}k=+SJ(b);if(k>0.0)f=k;else{W=c[Z>>2]|0;f=+h[W+32>>3];k=+h[W+40>>3];k=(f<k?f:k)*72.0;k=+(~~(k+(k>=0.0?.5:-.5))|0);f=k}}else{f=0.0;k=0.0}while(0);W=KL(b,c[46390]|0,d,0)|0;V=+LL(b,c[46392]|0,0.0,-360.0)+m;if(!e){U=+LL(b,c[46393]|0,0.0,-100.0);I=KL(b,c[46389]|0,4,0)|0;T=+LL(b,c[46394]|0,0.0,-100.0)}else{I=e;U=n;T=o}d=c[(c[Z>>2]|0)+104>>2]|0;e=d+24|0;c[Y>>2]=c[e>>2];c[Y+4>>2]=c[e+4>>2];c[Y+8>>2]=c[e+8>>2];c[Y+12>>2]=c[e+12>>2];q=+h[Y>>3];if(q>0.0){if(!g)M=11}else if(!(g|!(+h[Y+8>>3]>0.0)))M=11;if((M|0)==11){d=xx(b,102470)|0;do if(d){h[p>>3]=0.0;h[j>>3]=0.0;c[i>>2]=j;c[i+4>>2]=p;d=N1(d,102477,i)|0;m=+h[j>>3];if(m<0.0){h[j>>3]=0.0;m=0.0}n=+h[p>>3];if(n<0.0){h[p>>3]=0.0;o=0.0}else o=n;if((d|0)<=0){n=q+16.0;h[Y>>3]=n;m=8.0;break}m=m*72.0;m=+(~~(m+(m>=0.0?.5:-.5))<<1|0);n=q+m;h[Y>>3]=n;if((d|0)!=1){m=o*72.0;m=+(~~(m+(m>=0.0?.5:-.5))<<1|0)}}else{n=q+16.0;h[Y>>3]=n;m=8.0}while(0);d=Y+8|0;h[d>>3]=+h[d>>3]+m;d=c[(c[Z>>2]|0)+104>>2]|0;q=n}s=+h[d+24>>3];m=+h[c[(c[(ez(b)|0)+16>>2]|0)+8>>2]>>3];if(m>0.0){P=m*72.0;P=+(~~(P+(P>=0.0?.5:-.5))|0);Q=+TJ(q,P);h[Y>>3]=Q;p=Y+8|0;h[p>>3]=+TJ(+h[p>>3],P)}else Q=q;d=c[(c[Z>>2]|0)+8>>2]|0;do if(!(a[d+12>>0]|0)){e=xx(b,105999)|0;if((e|0)!=0?(a[e>>0]|0)!=0:0){CC(A,ez(b)|0,e);d=c[A>>2]|0;g=c[A+4>>2]|0;if((g&d|0)==-1){d=ry(b)|0;c[G>>2]=e;c[G+4>>2]=d;Pw(0,102561,G)|0;e=0;d=0;break}else{a[(c[(ez(b)|0)+16>>2]|0)+114>>0]=1;e=d+2|0;d=g+2|0;break}}else{e=0;d=0}}else{d=c[d>>2]|0;if((a[d>>0]|0)==99?(b$(d,102493)|0)==0:0){e=xx(b,102500)|0;CC(D,ez(b)|0,e);d=c[D>>2]|0;g=c[D+4>>2]|0;if((g&d|0)==-1){d=ry(b)|0;c[H>>2]=e|0?e:102510;c[H+4>>2]=d;Pw(0,102516,H)|0;e=0;d=0;break}else{a[(c[(ez(b)|0)+16>>2]|0)+114>>0]=1;e=d+2|0;d=g+2|0;break}}else{e=0;d=0}}while(0);P=+(e|0);h[_>>3]=Q>P?Q:P;P=+h[Y+8>>3];r=+(d|0);d=_+8|0;h[d>>3]=P>r?P:r;e=(I|0)<3&(T!=0.0|U!=0.0)?120:I;g=xx(b,102602)|0;if(!g)i=99;else{i=a[g>>0]|0;i=i<<24>>24==116?116:i<<24>>24==98?98:99}g=c[Z>>2]|0;a[(c[g+104>>2]|0)+80>>0]=i;if((e|0)==4?(T==0.0?((~~(V+(V>=0.0?.5:-.5))|0)%90|0|0)==0:0)&U==0.0:0)p=1;else M=39;do if((M|0)==39){g=c[(c[(c[g+8>>2]|0)+8>>2]|0)+44>>2]|0;if(g|0){p=c[g>>2]|0;c[J>>2]=c[_>>2];c[J+4>>2]=c[_+4>>2];c[J+8>>2]=c[_+8>>2];c[J+12>>2]=c[_+12>>2];ub[p&63](L,J);c[_>>2]=c[L>>2];c[_+4>>2]=c[L+4>>2];c[_+8>>2]=c[L+8>>2];c[_+12>>2]=c[L+12>>2];p=0;break}m=+h[d>>3];n=m*1.4142135623730951;if(f>n&i<<24>>24==99){o=m/f;o=+C(+(1.0/(1.0-o*o)));o=+h[_>>3]*o;h[_>>3]=o}else{o=+h[_>>3]*1.4142135623730951;h[_>>3]=o;h[d>>3]=n;m=n}if((e|0)>2){z=+E(+(3.141592653589793/+(e|0)));h[_>>3]=o/z;h[d>>3]=m/z;p=0}else p=0}while(0);m=+h[d>>3];g=NL(b,c[46395]|0,134226)|0;if((a[g>>0]|0)==115?(b$(g,105204)|0)==0:0){h[_>>3]=k;h[d>>3]=f;N=$+40|0;c[N>>2]=c[N>>2]|2048}else{if(!((QL(g)|0)<<24>>24)){z=+h[_>>3];k=k>z?k:z;h[_>>3]=k;z=+h[d>>3];f=f>z?f:z}else{M=c[(c[Z>>2]|0)+104>>2]|0;if(!(!(k<+h[M+24>>3])?!(f<+h[M+32>>3]):0)){L=ry(b)|0;M=ry(ez(b)|0)|0;c[N>>2]=L;c[N+4>>2]=M;Pw(0,102611,N)|0}h[_>>3]=k}h[d>>3]=f}if(!X){z=f;y=k}else{y=k>f?k:f;h[d>>3]=y;h[_>>3]=y;z=y}do if(!((QL(NL(b,c[46386]|0,134226)|0)|0)<<24>>24)){if(p){f=+h[(Q>+h[_>>3]?Y:_)>>3];break}f=+h[d>>3];if(P<f){f=+h[_>>3]*+C(+(1.0-P*P/(f*f)));f=Q>f?Q:f}else f=Q}else f=Q;while(0);g=c[(c[Z>>2]|0)+104>>2]|0;h[g+40>>3]=s-q+f;A=$+40|0;if(!(c[A>>2]&2048)){x=+h[d>>3]-m;h[g+48>>3]=(P<r?r-P+x:x)+P}j=(W|0)>1;g=j?W:1;a:do if((e|0)<3){g=uH(g<<5)|0;k=+h[_>>3]*.5;f=+h[d>>3]*.5;h[g>>3]=-k;h[g+8>>3]=-f;h[g+16>>3]=k;h[g+24>>3]=f;if(j){e=1;i=2;while(1){if((e|0)==(W|0))break;y=k+4.0;z=f+4.0;h[g+(i<<4)>>3]=-y;h[g+(i<<4)+8>>3]=-z;S=i|1;h[g+(S<<4)>>3]=y;h[g+(S<<4)+8>>3]=z;e=e+1|0;i=i+2|0;k=y;f=z}h[_>>3]=k*2.0;h[d>>3]=f*2.0;e=2}else e=2}else{g=uH(O(g<<4,e)|0)|0;i=c[(c[(c[(c[Z>>2]|0)+8>>2]|0)+8>>2]|0)+44>>2]|0;b:do if(!i){q=6.283185307179586/+(e|0);t=q*.5;r=+F(+t);s=+u$(+B(+U)+ +B(+T),1.0);t=T*1.4142135623730951/+E(+t);u=U*.5;w$((q+-3.141592653589793)*.5,R,S);v=V*.017453292519943295;k=0.0;f=0.0;m=0.0;i=0;n=+h[S>>3]*.5;o=+h[R>>3]*.5;while(1){if((i|0)>=(e|0))break b;m=m+q;w$(m,R,S);n=+h[S>>3]*r+n;o=+h[R>>3]*r+o;x=(o*t+s)*n+u*o;w$(+K(+o,+x)+v,R,S);x=+u$(x,o);w=+h[S>>3]*x*+h[_>>3];x=+h[R>>3]*x*+h[d>>3];ba=+B(+w);f=ba>f?ba:f;ba=+B(+x);k=ba>k?ba:k;h[g+(i<<4)>>3]=w;h[g+(i<<4)+8>>3]=x;if(p)break;else i=i+1|0}ba=-w;h[g+16>>3]=ba;h[g+24>>3]=x;h[g+32>>3]=ba;ba=-x;h[g+40>>3]=ba;h[g+48>>3]=w;h[g+56>>3]=ba}else{ub[c[i+4>>2]&63](g,_);k=+h[d>>3]*.5;f=+h[_>>3]*.5}while(0);f=f*2.0;k=k*2.0;y=y>f?y:f;h[_>>3]=y;ba=z>k?z:k;h[d>>3]=ba;f=y/f;k=ba/k;i=0;while(1){if((i|0)>=(e|0))break;N=g+(i<<4)|0;b=g+(i<<4)+8|0;ba=+h[b>>3]*k;h[N>>3]=+h[N>>3]*f;h[b>>3]=ba;i=i+1|0}if(j){j=e+-1|0;k=+h[g>>3];m=+h[g+8>>3];f=+K(+(m-+h[g+(j<<4)+8>>3]),+(k-+h[g+(j<<4)>>3]));j=0;c:while(1){if((j|0)>=(e|0))break;p=j+1|0;i=(p|0)%(e|0)|0;n=+h[g+(i<<4)>>3];o=+h[g+(i<<4)+8>>3];q=+K(+(o-m),+(n-k));z=(f+3.141592653589793-q)*.5;ba=4.0/+F(+z);w$(f-z,R,S);h[R>>3]=+h[R>>3]*ba;h[S>>3]=+h[S>>3]*ba;i=1;f=m;while(1){if((i|0)==(W|0)){f=q;j=p;k=n;m=o;continue c}z=+h[S>>3]+k;ba=+h[R>>3]+f;b=(O(i,e)|0)+j|0;h[g+(b<<4)>>3]=z;h[g+(b<<4)+8>>3]=ba;i=i+1|0;k=z;f=ba}}j=O(e,W+-1|0)|0;i=0;while(1){if((i|0)>=(e|0))break a;S=i+j|0;z=+h[g+(S<<4)+8>>3];y=+B(+(+h[g+(S<<4)>>3]))*2.0;ba=+h[_>>3];h[_>>3]=y>ba?y:ba;z=+B(+z)*2.0;ba=+h[d>>3];h[d>>3]=z>ba?z:ba;i=i+1|0}}}while(0);c[$>>2]=X;c[$+4>>2]=W;c[$+8>>2]=e;h[$+16>>3]=V;h[$+32>>3]=U;h[$+24>>3]=T;c[$+44>>2]=g;f=+h[_>>3];if(!(c[A>>2]&2048)){e=c[Z>>2]|0;h[e+32>>3]=f*.013888888888888888}else{e=c[Z>>2]|0;h[e+32>>3]=+h[(Q>f?Y:_)>>3]*.013888888888888888;d=(P>+h[d>>3]?Y:_)+8|0}h[e+40>>3]=+h[d>>3]*.013888888888888888;c[e+12>>2]=$;l=aa;return}function JJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;j=o+40|0;e=o+32|0;k=o+16|0;n=o;d=(c[(c[(ez(a)|0)+16>>2]|0)+116>>2]|0)>>>2&1^1;m=a+16|0;f=c[c[(c[m>>2]|0)+104>>2]>>2]|0;c[46512]=f;f=W_(f)|0;f=uH(((f|0)>1?f:1)+1|0)|0;b=LJ(a,d,1,f)|0;if(!b){c[e>>2]=c[c[(c[m>>2]|0)+104>>2]>>2];Pw(1,102446,e)|0;c[46512]=102467;b=LJ(a,d,1,f)|0}D_(f);MJ(j,a,b);d=c[m>>2]|0;i=+h[d+32>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))|0);h[n>>3]=i;g=+h[d+40>>3]*72.0;g=+(~~(g+(g>=0.0?.5:-.5))|0);d=n+8|0;h[d>>3]=g;if(!((QL(NL(a,c[46395]|0,134226)|0)|0)<<24>>24)){i=+h[(+h[b>>3]>i?b:n)>>3];h[n>>3]=i;e=b+8|0;g=+h[(+h[e>>3]>g?b:n)+8>>3];h[d>>3]=g;d=e;e=b}else{d=b+8|0;e=b}a=(QL(NL(a,c[46386]|0,134226)|0)|0)&255;c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2];NJ(b,j,a);OJ(k,i*-.5,g*.5);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];PJ(b,j,15);n=c[m>>2]|0;h[n+32>>3]=+h[e>>3]*.013888888888888888;h[n+40>>3]=(+h[d>>3]+1.0)*.013888888888888888;c[n+12>>2]=b;l=o;return}function KJ(a){a=a|0;var b=0.0,d=0,e=0.0,f=0.0,g=0,i=0,j=0,k=0,l=0.0,m=0;j=uH(48)|0;k=a+16|0;g=c[(c[(c[(c[k>>2]|0)+8>>2]|0)+8>>2]|0)+4>>2]|0;f=+LL(a,c[46376]|0,1797693134862315708145274.0e284,0.0);b=+LL(a,c[46375]|0,1797693134862315708145274.0e284,0.0);f=f<b?f:b;f=b==1797693134862315708145274.0e284&f==1797693134862315708145274.0e284?.05:f>0.0?(f>.0003?f:.0003):f;i=c[k>>2]|0;h[i+40>>3]=f;h[i+32>>3]=f;b=f*72.0;g=KL(a,c[46390]|0,g,0)|0;i=uH((g|0)<1?32:g<<5)|0;f=f*36.0;e=-f;h[i>>3]=e;h[i+8>>3]=e;h[i+16>>3]=f;h[i+24>>3]=f;if((g|0)>1){a=1;d=2;e=f;b=f;while(1){if((a|0)==(g|0))break;l=e+4.0;f=b+4.0;h[i+(d<<4)>>3]=-l;h[i+(d<<4)+8>>3]=-f;m=d|1;h[i+(m<<4)>>3]=l;h[i+(m<<4)+8>>3]=f;a=a+1|0;d=d+2|0;e=l;b=f}b=e*2.0}c[j>>2]=1;c[j+4>>2]=g;c[j+8>>2]=2;m=j+16|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[j+44>>2]=i;l=b*.013888888888888888;m=c[k>>2]|0;h[m+32>>3]=l;h[m+40>>3]=l;c[m+12>>2]=j;return}function LJ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=uH(72)|0;n=c[(c[b+16>>2]|0)+104>>2]|0;m=0;i=1;j=c[46512]|0;a:while(1){k=a[j>>0]|0;switch(k<<24>>24){case 0:break a;case 92:{j=j+1|0;k=a[j>>0]|0;switch(k<<24>>24){case 124:case 125:case 123:case 92:{l=m;break}default:E=4}break}default:E=4}if((E|0)==4){E=0;switch(k<<24>>24){case 123:{l=m+1|0;break}case 125:{l=m+-1|0;break}default:{l=m;i=i+((m|0)==0&k<<24>>24==124&1)|0}}if((l|0)<0)break}m=l;j=j+1|0}B=g+56|0;c[B>>2]=uH(i<<2)|0;a[g+64>>0]=d;y=(d|0)==0&1;z=n+82|0;A=f+1|0;v=(e|0)!=0;w=n+16|0;x=n+4|0;u=n+8|0;k=0;m=0;d=0;t=0;l=0;e=0;n=f;i=0;j=0;b:while(1){p=k;k=0;c:while(1){d:while(1){s=e;e:while(1){r=k;o=i;f:while(1){q=m;g:while(1){while(1){if(t){E=78;break b}m=c[46512]|0;i=a[m>>0]|0;if((i+-1&255)>=31)break;c[46512]=m+1}switch(i<<24>>24|0){case 92:{E=53;break d}case 0:case 124:case 125:break e;case 60:break f;case 62:break g;case 123:break;default:{k=d;i=m;break d}}i=m+1|0;c[46512]=i;if(l|0){E=34;break b}if(!(a[i>>0]|0)){E=34;break b}e=LJ(b,y,0,f)|0;c[(c[B>>2]|0)+(q<<2)>>2]=e;if(!e){E=36;break b}else{q=q+1|0;l=4}}if(a[z>>0]|0){k=d;i=m;break d}if(!(l&16)){E=27;break b}if(o>>>0>A>>>0?(C=o+-1|0,(C|0)!=(s|0)):0)i=(a[C>>0]|0)==32?C:o;else i=o;a[i>>0]=0;r=n1(f)|0;c[46512]=(c[46512]|0)+1;m=q;l=l&-17;o=i}if(l&6|0){E=22;break b}if(a[z>>0]|0){k=d;i=m;break d}c[46512]=m+1;m=q;l=l|18;k=r;s=f;i=f}if(!((l&16|0)==0&(v|i<<24>>24!=0))){E=38;break b}if(!(l&4)){k=uH(72)|0;c[(c[B>>2]|0)+(q<<2)>>2]=k;m=q+1|0}else{k=p;m=q}if(r|0)c[k+60>>2]=r;if(!(l&5)){a[f+j>>0]=32;l=l|1;j=j+1|0}i=f+j|0;if(l&1){if((j|0)>1?(D=i+-1|0,(D|0)!=(n|0)):0)i=(a[D>>0]|0)==32?D:i;a[i>>0]=0;n=n1(f)|0;c[k+52>>2]=kH(b,n,a[z>>0]|0?2:0,+h[w>>3],c[x>>2]|0,c[u>>2]|0)|0;a[k+64>>0]=1;n=f;j=0}i=c[46512]|0;switch(a[i>>0]|0){case 0:{t=1;e=s;i=o;continue b}case 125:{E=51;break b}default:{}}c[46512]=i+1;p=k;l=0;k=0;e=s;i=o}h:do if((E|0)==53){E=0;k=f+j|0;i=m+1|0;switch(a[i>>0]|0){case 0:{k=d;i=m;break h}case 62:case 60:case 124:case 125:case 123:{k=d;break}case 32:{if(!(a[z>>0]|0))k=1;else E=55;break}default:E=55}if((E|0)==55){E=0;a[k>>0]=92;k=d;l=l|9;j=j+1|0}c[46512]=i}while(0);d=f+j|0;if(l&4|0?(a[i>>0]|0)!=32:0){E=59;break b}if(!(l&24))l=(a[i>>0]|0)==32?l:l|9;if(!(l&8))if(!(l&16))e=s;else{m=a[i>>0]|0;d=(k|0)!=0;if(!(d|m<<24>>24!=32))if((o|0)!=(f|0))if((a[o+-1>>0]|0)==32)m=o;else E=73;else m=f;else E=73;if((E|0)==73){E=0;a[o>>0]=m;m=o+1|0;i=c[46512]|0}e=d?m+-1|0:s;o=m}else{m=a[i>>0]|0;e=(k|0)!=0;if(!((!(e|m<<24>>24!=32)?(a[d+-1>>0]|0)==32:0)?(a[z>>0]|0)==0:0)){a[d>>0]=m;j=j+1|0}if(e){e=s;n=f+j+-1|0}else e=s}i=i+1|0;c[46512]=i;while(1){if((a[i>>0]|0)>=0){m=q;d=k;k=r;i=o;continue c}s=i+1|0;c[46512]=s;a[f+j>>0]=a[i>>0]|0;j=j+1|0;i=s}}}if((E|0)==22){QJ(g,r);g=0}else if((E|0)==27){QJ(g,r);g=0}else if((E|0)==34){QJ(g,r);g=0}else if((E|0)==36){QJ(g,r);g=0}else if((E|0)==38){QJ(g,r);g=0}else if((E|0)==51){c[46512]=i+1;c[g+48>>2]=m}else if((E|0)==59){QJ(g,r);g=0}else if((E|0)==78)c[g+48>>2]=q;return g|0}function MJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+64|0;k=u+48|0;m=u+40|0;n=u+32|0;t=u+16|0;s=u;j=c[e+52>>2]|0;a:do if(!j){n=t+8|0;o=e+48|0;p=e+56|0;q=e+64|0;r=s+8|0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;j=0;while(1){if((j|0)>=(c[o>>2]|0))break a;MJ(s,d,c[(c[p>>2]|0)+(j<<2)>>2]|0);if(!(a[q>>0]|0)){h[n>>3]=+h[n>>3]+ +h[r>>3];k=t;m=+h[t>>3]>+h[s>>3]?t:s}else{h[t>>3]=+h[t>>3]+ +h[s>>3];k=n;m=(+h[n>>3]>+h[r>>3]?t:s)+8|0}h[k>>3]=+h[m>>3];j=j+1|0}}else{g=+h[j+24>>3];f=+h[j+32>>3];if(g>0.0|f>0.0){j=xx(d,102470)|0;do if(j){c[k>>2]=m;c[k+4>>2]=n;j=N1(j,102477,k)|0;if((j|0)<=0){i=8.0;g=g+16.0;break}i=+h[m>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))<<1|0);g=g+i;if((j|0)!=1){i=+h[n>>3]*72.0;i=+(~~(i+(i>=0.0?.5:-.5))<<1|0)}}else{i=8.0;g=g+16.0}while(0);f=i+f}h[t>>3]=g;h[t+8>>3]=f}while(0);c[e>>2]=c[t>>2];c[e+4>>2]=c[t+4>>2];c[e+8>>2]=c[t+8>>2];c[e+12>>2]=c[t+12>>2];c[b>>2]=c[t>>2];c[b+4>>2]=c[t+4>>2];c[b+8>>2]=c[t+8>>2];c[b+12>>2]=c[t+12>>2];l=u;return}function NJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;s=l;l=l+32|0;o=s+16|0;p=s;q=+h[d>>3];i=q-+h[b>>3];r=+h[d+8>>3];f=r-+h[b+8>>3];c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];d=c[b+52>>2]|0;if(!((e|0)!=0|(d|0)==0)){n=d+40|0;h[n>>3]=+h[n>>3]+i;n=d+48|0;h[n>>3]=+h[n>>3]+f}m=b+48|0;d=c[m>>2]|0;a:do if(d|0){n=b+64|0;f=((a[n>>0]|0)==0?f:i)/+(d|0);k=b+56|0;j=0;while(1){if((j|0)>=(d|0))break a;b=c[(c[k>>2]|0)+(j<<2)>>2]|0;g=j+1|0;d=~~(f*+(g|0))-~~(f*+(j|0))|0;if(!(a[n>>0]|0))OJ(p,q,+h[b+8>>3]+ +(d|0));else OJ(p,+h[b>>3]+ +(d|0),r);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];NJ(b,o,e);j=g;d=c[m>>2]|0}}while(0);l=s;return}function OJ(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function PJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;q=l;l=l+48|0;j=q+32|0;n=q+16|0;m=q;a[b+65>>0]=e;k=b+16|0;s=+h[d>>3];p=d+8|0;r=+h[p>>3];OJ(n,s,r-+h[b+8>>3]);c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];k=b+32|0;OJ(m,+h[b>>3]+s,r);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];k=c[b+48>>2]|0;m=k+-1|0;n=(e|0)==0;o=b+56|0;i=b+64|0;g=0;while(1){if((g|0)>=(k|0))break;do if(!n){b=(g|0)==0;f=(g|0)==(m|0);if(!(a[i>>0]|0))if(b){b=f?15:14;break}else{b=f?11:10;break}else if(b){b=f?15:13;break}else{b=f?7:5;break}}else b=0;while(0);f=c[(c[o>>2]|0)+(g<<2)>>2]|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];PJ(f,j,b&e);if(!(a[i>>0]|0))h[p>>3]=+h[p>>3]-+h[(c[(c[o>>2]|0)+(g<<2)>>2]|0)+8>>3];else h[d>>3]=+h[c[(c[o>>2]|0)+(g<<2)>>2]>>3]+ +h[d>>3];g=g+1|0}l=q;return}function QJ(a,b){a=a|0;b=b|0;RJ(a);D_(b);return}function RJ(a){a=a|0;var b=0,d=0,e=0;d=a+48|0;e=a+56|0;b=0;while(1){if((b|0)>=(c[d>>2]|0))break;RJ(c[(c[e>>2]|0)+(b<<2)>>2]|0);b=b+1|0}D_(c[a+60>>2]|0);nH(c[a+52>>2]|0);D_(c[e>>2]|0);D_(a);return}function SJ(a){a=a|0;var b=0.0,d=0.0;d=+LL(a,c[46376]|0,0.0,.01);b=+LL(a,c[46375]|0,0.0,.02);b=(d>b?d:b)*72.0;return +(+(~~(b+(b>=0.0?.5:-.5))|0))}function TJ(a,b){a=+a;b=+b;var c=0;c=~~(a/b);return +(+((+(c|0)*b+1.0e-05<a&1)+c|0)*b)}function UJ(a){a=a|0;a=c[(c[a+16>>2]|0)+8>>2]|0;if(!a)a=0;else a=(c[c[a+4>>2]>>2]|0)==89&1;return a|0}function VJ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[46513]|0;a:do if(!f)d=0;else{g=c[46514]|0;e=0;while(1){if((e|0)>=(g|0)){d=0;break a}d=c[f+(e<<2)>>2]|0;h=c[d>>2]|0;if((a[h>>0]|0)==(a[b>>0]|0)?(b$(h,b)|0)==0:0)break a;e=e+1|0}}while(0);return d|0}function WJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if(ZL(xx(d,102500)|0)|0)if((a[b>>0]|0)==101?(b$(b,102659)|0)==0:0){d=101;g=6}else{b=102493;g=4}else g=4;if((g|0)==4){d=a[b>>0]|0;if(d<<24>>24==99)if(!(b$(b,102493)|0))g=11;else{d=99;g=6}else g=6}a:do if((g|0)==6){e=20744;while(1){f=c[e>>2]|0;if(!f){g=11;break a}if((a[f>>0]|0)==d<<24>>24?(b$(f,b)|0)==0:0){b=e;break a}e=e+16|0}}while(0);if((g|0)==11)b=XJ(b)|0;return b|0}function XJ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;d=VJ(b)|0;if(!d){f=c[46514]|0;d=f+1|0;c[46514]=d;e=c[46513]|0;if(!e)d=vH(d<<2)|0;else d=xH(e,d<<2)|0;c[46513]=d;d=uH(16)|0;c[(c[46513]|0)+(f<<2)>>2]=d;c[d>>2]=c[5186];c[d+4>>2]=c[5187];c[d+8>>2]=c[5188];c[d+12>>2]=c[5189];e=n1(b)|0;c[d>>2]=e;do if(!0){if((a[b>>0]|0)==99?(b$(b,102493)|0)==0:0){e=1;break}c[g>>2]=c[5186];c[g+4>>2]=e;Pw(0,102664,g)|0;e=0}else e=1;while(0);a[d+12>>0]=e}l=h;return d|0}function YJ(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+h[b>>3]*.5257311121191336;c=+h[b+8>>3]*.8944271909999159;c=d>c?d:c;h[a>>3]=c*4.97979656976556;h[a+8>>3]=c*4.73606797749979;return}function ZJ(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0,g=0.0,i=0.0,j=0.0,k=0,l=0,m=0.0;d=+h[b>>3];k=b+8|0;e=+h[k>>3];c=e/d;if(!(c>.9510565162951536))if(c<.9510565162951536){j=d;e=d*.9510565162951536}else j=d;else j=e*1.0514622242382672;d=j*.5257311121191336;g=j*.20081141588622725;i=j*.05020285397155681;c=.3141592653589793;f=0;while(1){if((f|0)>=10)break;h[a+(f<<4)>>3]=+E(+c)*d;h[a+(f<<4)+8>>3]=+F(+c)*d-i;m=c+.6283185307179586;l=f|1;h[a+(l<<4)>>3]=+E(+m)*g;h[a+(l<<4)+8>>3]=+F(+m)*g-i;c=c+1.2566370614359172;f=f+2|0}h[b>>3]=j;h[k>>3]=e;return}function _J(a){a=a|0;a=c[(c[a+16>>2]|0)+12>>2]|0;if(a|0){D_(c[a+44>>2]|0);D_(a)}return}function $J(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+80|0;k=o+40|0;g=o;n=o+64|0;h=o+56|0;if(!(a[e>>0]|0)){g=4208;h=b+40|0;do{c[b>>2]=c[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(h|0))}else{i=(f|0)==0?103330:f;c[n>>2]=15;j=d+16|0;f=c[j>>2]|0;do if(a[(c[f+104>>2]|0)+82>>0]|0){f=_Q(d,e,n)|0;if(!f){f=c[j>>2]|0;m=8;break}if(nK(d,f,g,i,c[n>>2]|0,0)|0){c[k>>2]=ry(d)|0;c[k+4>>2]=e;c[k+8>>2]=i;Pw(0,103332,k)|0}}else m=8;while(0);if((m|0)==8){if((c[(c[f+8>>2]|0)+8>>2]|0)==1664)h=0;else{c[h>>2]=d;c[h+4>>2]=0}if(nK(d,0,g,e,c[n>>2]|0,h)|0)oK(d,e)}c[g+36>>2]=0;h=b+40|0;do{c[b>>2]=c[g>>2];b=b+4|0;g=g+4|0}while((b|0)<(h|0))}l=o;return}function aK(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0;r=l;l=l+112|0;n=r+96|0;m=r+80|0;p=r+64|0;k=r+48|0;q=r+32|0;o=r;f=r+16|0;if(!a){c[46517]=0;a=0}else{g=c[a+4>>2]|0;a=c[a>>2]|0;i=(c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];ZG(f,n,i);c[q>>2]=c[f>>2];c[q+4>>2]=c[f+4>>2];c[q+8>>2]=c[f+8>>2];c[q+12>>2]=c[f+12>>2];a:do if(g){d=+h[g+8>>3];e=+h[g+24>>3];s=+h[q>>3];if((+h[g>>3]<=s?s<=+h[g+16>>3]:0)?(j=+h[q+8>>3],d<=j):0)a=j<=e&1;else a=0}else{if((a|0)==(c[46517]|0)){f=c[46518]|0;g=c[46520]|0;i=c[46519]|0}else{g=c[(c[a+16>>2]|0)+12>>2]|0;c[46521]=g;i=c[g+44>>2]|0;c[46519]=i;f=c[g+8>>2]|0;c[46518]=f;g=O((c[g+4>>2]|0)+-1|0,f)|0;g=(g|0)>0?g:0;c[46520]=g;c[46517]=a}a=0;b=0;while(1){if((a|0)>=(f|0)){a=1;break a}t=i+(g+a<<4)|0;c[o>>2]=c[t>>2];c[o+4>>2]=c[t+4>>2];c[o+8>>2]=c[t+8>>2];c[o+12>>2]=c[t+12>>2];t=i+(g+((a+4|0)%(f|0)|0)<<4)|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[k+12>>2]=c[q+12>>2];c[p>>2]=c[45844];c[p+4>>2]=c[45845];c[p+8>>2]=c[45846];c[p+12>>2]=c[45847];c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2];c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];b=b+((mK(k,p,m,n)|0)==0&1)|0;if((b|0)==2){a=0;break}else a=a+2|0}}while(0)}l=r;return a|0}function bK(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;e=c[b+16>>2]|0;if((a[(c[e+104>>2]|0)+82>>0]|0)!=0?(a[e+145>>0]|0)!=0:0)b=bR(b,d,0,f,g)|0;else b=0;return b|0}function cK(e,f){e=e|0;f=f|0;var i=0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0;P=l;l=l+48|0;H=P+24|0;G=P+16|0;A=P+8|0;z=P;L=P+32|0;n=P+28|0;M=c[e+16>>2]|0;N=M+208|0;i=c[N>>2]|0;if((i|0)==0?(b[M+260>>1]&1)==0:0)J=0;else E=4;if((E|0)==4)if(!(c[e+152>>2]&4)){PO(e,i,c[M+228>>2]|0,c[M+244>>2]|0,c[M+212>>2]|0);J=1}else J=1;I=f+16|0;i=c[I>>2]|0;r=c[i+12>>2]|0;F=c[r+44>>2]|0;K=c[r+8>>2]|0;r=c[r+4>>2]|0;if((c[46515]|0)<(K|0)){i=K+5|0;c[46515]=i;j=c[46516]|0;if(!j)i=vH(i<<4)|0;else i=xH(j,i<<4)|0;c[46516]=i;i=c[I>>2]|0}D=(c[i+104>>2]|0)+56|0;i=i+16|0;c[D>>2]=c[i>>2];c[D+4>>2]=c[i+4>>2];c[D+8>>2]=c[i+8>>2];c[D+12>>2]=c[i+12>>2];D=c[I>>2]|0;B=+h[D+32>>3]*72.0;B=(+h[D+96>>3]+ +h[D+88>>3])/+(~~(B+(B>=0.0?.5:-.5))|0);C=+h[D+40>>3]*72.0;C=+h[D+80>>3]/+(~~(C+(C>=0.0?.5:-.5))|0);D=dK(e,f)|0;c[L>>2]=0;i=d[(c[I>>2]|0)+117>>0]|0;do if(!(i&1)){if(i&2|0){s=OL(f,0,103230)|0;UO(e,s);WO(e,OL(f,0,103238)|0);j=0;i=1;break}if(i&8|0){s=OL(f,0,103246)|0;UO(e,s);WO(e,OL(f,0,103254)|0);j=0;i=1;break}if(i&4|0){s=OL(f,0,103262)|0;UO(e,s);WO(e,OL(f,0,103270)|0);j=0;i=1;break}if(!(D&1))if(!(D&576)){j=0;i=0}else{j=eK(f)|0;i=1}else{j=eK(f)|0;if(!((uG(j,L,n)|0)<<24>>24)){WO(e,j);i=1}else{WO(e,c[L>>2]|0);i=c[L+4>>2]|0;m=KL(f,c[46403]|0,0,0)|0;k=+g[n>>2];if(!i)XO(e,134232,m,k);else XO(e,i,m,k);i=(D&2)>>>1|2}}s=fK(e,f)|0}else{s=OL(f,0,103214)|0;UO(e,s);WO(e,OL(f,0,103222)|0);j=0;i=1}while(0);m=c[(c[I>>2]|0)+8>>2]|0;if(a[m+12>>0]|0){m=c[m>>2]|0;if((a[m>>0]|0)==99){m=(b$(m,102493)|0)==0;E=33}else u=1}else{m=1;E=33}if((E|0)==33){m=m^1;if((r|0)!=0|i<<24>>24==0|m)u=m;else{UO(e,134297);r=1;u=0}}v=(K|0)<3;w=(D&512|0)!=0;y=(D&8|0)==0;x=(D&64|0)==0;p=(D&1024|0)==0;q=(D&2130706444|0)==0;t=0;while(1){if((t|0)>=(r|0))break;n=O(t,K)|0;o=c[46516]|0;m=0;while(1){if((m|0)>=(K|0))break;R=m+n|0;k=+h[F+(R<<4)+8>>3];Q=c[I>>2]|0;h[o+(m<<4)>>3]=+h[Q+16>>3]+ +h[F+(R<<4)>>3]*B;h[o+(m<<4)+8>>3]=+h[Q+24>>3]+k*C;m=m+1|0}do if(v){if(w&(t|0)==0?(A$(j,58)|0)!=0:0)if((SE(e,o,j)|0)>1){c[z>>2]=ry(f)|0;Pw(3,103278,z)|0;i=0}else i=0;ZO(e,c[46516]|0,K,i&255);if(!y)gK(e,f)}else{if(!x){if((t|0)==0?(WE(e,o,j,1)|0)>1:0){c[A>>2]=ry(f)|0;Pw(3,103278,A)|0}_O(e,c[46516]|0,K,0);break}if(!p){UO(e,134297);_O(e,c[46516]|0,K,i&255);UO(e,s);bP(e,(c[46516]|0)+32|0,2);break}i=i&255;if(q){_O(e,o,K,i);break}else{EJ(e,o,K,D,i);break}}while(0);t=t+1|0;i=0}m=c[(c[I>>2]|0)+8>>2]|0;if(!(a[m+12>>0]|0)){m=xx(f,105999)|0;if(m|0?a[m>>0]|0:0){o=m;E=65}}else{m=c[m>>2]|0;if((a[m>>0]|0)==99?(b$(m,102493)|0)==0:0){m=xx(f,102500)|0;if(m|0?a[m>>0]|0:0){o=m;E=65}}else{o=m;E=65}}if((E|0)==65){n=c[46516]|0;m=0;while(1){if((m|0)>=(K|0))break;k=+h[F+(m<<4)+8>>3];R=c[I>>2]|0;h[n+(m<<4)>>3]=+h[R+16>>3]+ +h[F+(m<<4)>>3]*B;h[n+(m<<4)+8>>3]=+h[R+24>>3]+k*C;m=m+1|0}m=i&255;do if(!(u|i<<24>>24==0)){if(v){if(w&(t|0)==0?(A$(j,58)|0)!=0:0)if((SE(e,n,j)|0)>1){c[G>>2]=ry(f)|0;Pw(3,103278,G)|0;i=0}else i=0;ZO(e,c[46516]|0,K,i&255);if(y)break;gK(e,f);break}if(x)if(!(D&12)){_O(e,n,K,m);break}else{EJ(e,n,K,D,m);break}else{if((WE(e,n,j,1)|0)>1){c[H>>2]=ry(f)|0;Pw(3,103278,H)|0}_O(e,c[46516]|0,K,0);break}}while(0);R=c[46516]|0;dP(e,o,R,K,i,NL(f,c[46396]|0,134226)|0)}D_(c[L>>2]|0);oH(e,10,c[(c[I>>2]|0)+104>>2]|0);if(J){if(c[e+152>>2]&4|0)PO(e,c[N>>2]|0,c[M+228>>2]|0,c[M+244>>2]|0,c[M+212>>2]|0);QO(e)}l=P;return}function dK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;e=jK(d,f)|0;if(e|0)YO(b,e);e=c[46402]|0;if((e|0?(g=yx(d,e)|0,g|0):0)?a[g>>0]|0:0)fP(b,+LL(d,c[46402]|0,1.0,0.0));l=h;return c[f>>2]|0}function eK(a){a=a|0;return iK(a,131718)|0}function fK(b,d){b=b|0;d=d|0;d=OL(d,c[46378]|0,191979)|0;d=a[d>>0]|0?d:134232;UO(b,d);return d|0}function gK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,i=0.0,j=0,k=0,m=0;d=l;l=l+96|0;j=d+80|0;k=d+64|0;e=d+32|0;m=d+16|0;g=d;b=c[b+16>>2]|0;f=+h[b+80>>3];h[m+8>>3]=f*.375;i=+h[b+96>>3];h[m>>3]=i*.6614;b=b+16|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];hK(g,k,j);c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];g=e+8|0;b=e+24|0;h[b>>3]=+h[g>>3];h[e+16>>3]=+h[e>>3]-i*1.3228;bP(a,e,2);f=+h[g>>3]-f*.75;h[g>>3]=f;h[b>>3]=f;bP(a,e,2);l=d;return}function hK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function iK(b,d){b=b|0;d=d|0;var e=0;e=OL(b,c[46379]|0,191979)|0;if(!(a[e>>0]|0)){e=OL(b,c[46378]|0,191979)|0;return ((a[e>>0]|0)==0?d:e)|0}else return e|0;return 0}function jK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=OL(b,c[46387]|0,191979)|0;a:do if(!(a[e>>0]|0)){g=0;e=0}else{g=AF(e)|0;h=g;e=0;b:while(1){f=c[h>>2]|0;if(!f)break a;switch(a[f>>0]|0){case 102:{if(!(b$(f,108075)|0)){h=h+4|0;e=e|1;continue b}break}case 114:{if(!(b$(f,103290)|0)){f=h;do{j=f;f=f+4|0;i=c[f>>2]|0;c[j>>2]=i}while((i|0)!=0);j=h;e=e|4;h=j;continue b}if(!(b$(f,103308)|0)){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|3;h=j;continue b}break}case 100:{if(!(b$(f,103298)|0)){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|8;h=j;continue b}break}case 105:{if(!(b$(f,131253)|0)){h=h+4|0;e=e|32;continue b}break}case 115:{if((b$(f,103315)|0)==0?kK(b)|0:0){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|64;h=j;continue b}break}case 119:{if((b$(f,103323)|0)==0?lK(b)|0:0){f=h;do{i=f;f=f+4|0;j=c[f>>2]|0;c[i>>2]=j}while((j|0)!=0);j=h;e=e|512;h=j;continue b}break}default:{}}h=h+4|0}}while(0);f=c[(c[(c[b+16>>2]|0)+8>>2]|0)+8>>2]|0;if(f)e=c[f+40>>2]|e;c[d>>2]=e;return g|0}function kK(a){a=a|0;var b=0.0;a=c[(c[(c[a+16>>2]|0)+8>>2]|0)+8>>2]|0;if((((a|0)!=0?(c[a+8>>2]|0)==4:0)?(b=+h[a+16>>3],((~~(b+(b>=0.0?.5:-.5))|0)%90|0|0)==0):0)?+h[a+24>>3]==0.0:0)a=+h[a+32>>3]==0.0&1;else a=0;return a|0}function lK(a){a=a|0;a=c[(c[(c[a+16>>2]|0)+8>>2]|0)+8>>2]|0;if(!a)a=0;else a=(c[a+8>>2]|0)<3&1;return a|0}function mK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;i=+h[c+8>>3];g=-(+h[d+8>>3]-i);f=+h[c>>3];e=+h[d>>3]-f;f=e*i+f*g;return (+h[a+8>>3]*e+ +h[a>>3]*g-f>=0.0^+h[b>>3]*g-f+ +h[b+8>>3]*e>=0.0^1)&1|0}function nK(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;G=l;l=l+192|0;B=G+176|0;E=G+160|0;m=G+144|0;z=G+128|0;A=G+112|0;n=G+96|0;o=G+80|0;p=G+64|0;v=G+48|0;w=G+32|0;x=G+16|0;D=G;if(!d){c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;m=(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1|0)==0;C=c[b+16>>2]|0;q=+h[C+80>>3]*.5;j=+h[C+88>>3];t=m?q:j;q=m?j:q;m=0;C=E;j=0.0;k=-q;r=t;F=E+8|0;s=0.0;t=-t}else{k=+h[d>>3];t=+h[d+8>>3];q=+h[d+16>>3];r=+h[d+24>>3];OJ(m,(q+k)*.5,(r+t)*.5);c[E>>2]=c[m>>2];c[E+4>>2]=c[m+4>>2];c[E+8>>2]=c[m+8>>2];c[E+12>>2]=c[m+12>>2];H=E+8|0;m=1;C=E;j=+h[E>>3];F=H;s=+h[H>>3]}u=(q>r?q:r)*4.0;a:do if((f|0)!=0?(y=a[f>>0]|0,y<<24>>24!=0):0){f=f+1|0;switch(y<<24>>24|0){case 99:{p=1;g=0;f=0;n=0;j=0.0;o=0;break a}case 101:{if(a[f>>0]|0){p=1;g=0;f=0;n=0;j=0.0;o=1;break a}if(!i)h[C>>3]=q;else{pK(z,i,s,u);c[E>>2]=c[z>>2];c[E+4>>2]=c[z+4>>2];c[E+8>>2]=c[z+8>>2];c[E+12>>2]=c[z+12>>2]}p=0;g=g&2;f=0;n=1;j=0.0;o=0;m=1;break a}case 115:{h[F>>3]=t;switch(a[f>>0]|0){case 0:{if(!i)h[C>>3]=j;else{pK(A,i,-u,j);c[E>>2]=c[A>>2];c[E+4>>2]=c[A+4>>2];c[E+8>>2]=c[A+8>>2];c[E+12>>2]=c[A+12>>2]}p=0;g=g&1;f=0;n=1;j=-1.5707963267948966;o=0;m=1;break a}case 101:{if(!i)h[C>>3]=q;else{pK(n,i,-u,u);c[E>>2]=c[n>>2];c[E+4>>2]=c[n+4>>2];c[E+8>>2]=c[n+8>>2];c[E+12>>2]=c[n+12>>2]}p=0;g=g&3;f=0;n=1;j=-.7853981633974483;o=0;m=1;break a}case 119:{if(!i)h[C>>3]=k;else{u=-u;pK(o,i,u,u);c[E>>2]=c[o>>2];c[E+4>>2]=c[o+4>>2];c[E+8>>2]=c[o+8>>2];c[E+12>>2]=c[o+12>>2]}p=0;g=g&9;f=0;n=1;j=-2.356194490192345;o=0;m=1;break a}default:{h[F>>3]=s;p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}case 119:{if(a[f>>0]|0){p=1;g=0;f=0;n=0;j=0.0;o=1;break a}if(!i)h[C>>3]=k;else{pK(p,i,s,-u);c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[E+8>>2]=c[p+8>>2];c[E+12>>2]=c[p+12>>2]}p=0;g=g&8;f=0;n=1;j=3.141592653589793;o=0;m=1;break a}case 110:{h[F>>3]=r;switch(a[f>>0]|0){case 0:{if(!i)h[C>>3]=j;else{pK(v,i,u,j);c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];c[E+8>>2]=c[v+8>>2];c[E+12>>2]=c[v+12>>2]}p=0;g=g&4;f=0;n=1;j=1.5707963267948966;o=0;m=1;break a}case 101:{if(!i)h[C>>3]=q;else{pK(w,i,u,u);c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[E+8>>2]=c[w+8>>2];c[E+12>>2]=c[w+12>>2]}p=0;g=g&6;f=0;n=1;j=.7853981633974483;o=0;m=1;break a}case 119:{if(!i)h[C>>3]=k;else{pK(x,i,u,-u);c[E>>2]=c[x>>2];c[E+4>>2]=c[x+4>>2];c[E+8>>2]=c[x+8>>2];c[E+12>>2]=c[x+12>>2]}p=0;g=g&12;f=0;n=1;j=2.356194490192345;o=0;m=1;break a}default:{h[F>>3]=s;p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}case 95:{p=1;f=1;n=0;j=0.0;o=0;break a}default:{p=1;g=0;f=0;n=0;j=0.0;o=1;break a}}}else{p=1;g=0;f=0;n=0;j=0.0;o=0}while(0);H=(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&3)*90|0;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];YG(D,B,H);c[E>>2]=c[D>>2];c[E+4>>2]=c[D+4>>2];c[E+8>>2]=c[D+8>>2];c[E+12>>2]=c[D+12>>2];if(!(f<<24>>24))g=qK(g,c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&3)|0;a[e+33>>0]=g;c[e+24>>2]=d;k=+h[C>>3];h[e>>3]=+(~~(k+(k>=0.0?.5:-.5))|0);k=+h[F>>3];h[e+8>>3]=+(~~(k+(k>=0.0?.5:-.5))|0);h[e+16>>3]=+rK(j,c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&3);k=+h[C>>3];j=+h[F>>3];if(k==0.0&j==0.0)g=-128;else{u=+K(+j,+k);t=u+4.71238898038469;g=~~((!(t>=6.283185307179586)?t:u+-1.5707963267948966)*40.74366543152521)&255}a[e+32>>0]=g;a[e+29>>0]=n;a[e+28>>0]=m;a[e+30>>0]=p;a[e+31>>0]=f;l=G;return o|0}function oK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=ry(a)|0;c[e+4>>2]=b;Pw(0,103393,e)|0;l=d;return}function pK(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+128|0;g=p+112|0;j=p+48|0;k=p+16|0;m=p+32|0;n=p;o=c[b>>2]|0;i=c[(c[(ez(o)|0)+16>>2]|0)+116>>2]&3;h[k>>3]=e;h[k+8>>3]=d;f=(i|0)!=0;if(f){c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];YG(m,g,i*90|0);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}m=j+48|0;q=j+32|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];c[q+12>>2]=c[k+12>>2];c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];MK(b,c[(c[(c[(c[o+16>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0,j,1);if(f){c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];ZG(n,g,i*90|0);c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2]};c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];l=p;return}function qK(a,b){a=a|0;b=b|0;a:do switch(b|0){case 3:switch(a|0){case 4:{a=2;break a}case 1:{a=8;break a}case 8:{a=1;break a}case 2:{a=4;break a}default:break a}case 2:switch(a|0){case 4:{a=1;break a}case 1:{a=4;break a}default:break a}case 1:switch(a|0){case 4:{a=2;break a}case 1:{a=8;break a}case 8:{a=4;break a}case 2:{a=1;break a}default:break a}default:{}}while(0);return a|0}function rK(a,b){a=+a;b=b|0;switch(b|0){case 3:{if(!(a==3.141592653589793))if(!(a==2.356194490192345))if(!(a==1.5707963267948966))if(!(a==0.0))if(!(a==-.7853981633974483)){if(a==-1.5707963267948966)a=3.141592653589793}else a=2.356194490192345;else a=1.5707963267948966;else a=0.0;else a=-.7853981633974483;else a=-1.5707963267948966;break}case 2:{a=-a;break}case 1:{a=a+-1.5707963267948966;break}default:{}}return +a}function sK(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0.0,i=0,j=0,k=0;e=l;l=l+32|0;k=e+16|0;i=e;a=c[a>>2]|0;j=(c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];ZG(i,k,j);d=+h[i>>3];g=+h[i+8>>3];a=c[a+16>>2]|0;f=+h[a+80>>3]*.5;if(!(!(g>=-f)|!(g<=f))?d>=-+h[a+88>>3]:0)a=d<=+h[a+96>>3]&1;else a=0;l=e;return a|0}function tK(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;n=l;l=l+32|0;m=n;i=c[a+16>>2]|0;j=i+208|0;g=c[j>>2]|0;if(!g)k=(b[i+260>>1]&1)!=0;else k=1;e=d+16|0;d=c[e>>2]|0;f=c[d+12>>2]|0;if(f|0){if(k?(c[a+152>>2]&4|0)==0:0){PO(a,g,c[i+228>>2]|0,c[i+244>>2]|0,c[i+212>>2]|0);d=c[e>>2]|0}g=c[a+36>>2]|0;p=+h[d+24>>3]+ +(c[f+8>>2]|0);o=c[f>>2]|0;h[m>>3]=+h[d+16>>3]+ +(c[f+4>>2]|0);h[m+8>>3]=p;c[m+16>>2]=o;g1(g,103424,m)|0;g=c[e>>2]|0;m=(c[g+104>>2]|0)+56|0;g=g+16|0;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[m+8>>2]=c[g+8>>2];c[m+12>>2]=c[g+12>>2];oH(a,10,c[(c[e>>2]|0)+104>>2]|0);if(k){if(c[a+152>>2]&4|0)PO(a,c[j>>2]|0,c[i+228>>2]|0,c[i+244>>2]|0,c[i+212>>2]|0);QO(a)}}l=n;return}function uK(a){a=a|0;RJ(c[(c[a+16>>2]|0)+12>>2]|0);return}function vK(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+64|0;k=m+40|0;h=m;if(!(a[f>>0]|0)){h=4208;g=b+40|0;do{c[b>>2]=c[h>>2];b=b+4|0;h=h+4|0}while((b|0)<(g|0))}else{g=(g|0)==0?103330:g;i=c[(c[e+16>>2]|0)+12>>2]|0;j=BK(i,f)|0;if(!j){if(nK(e,i+16|0,h,f,15,0)|0)oK(e,f)}else if(nK(e,j+16|0,h,g,d[j+65>>0]|0,0)|0){c[k>>2]=ry(e)|0;c[k+4>>2]=f;c[k+8>>2]=g;Pw(0,103332,k)|0}g=b+40|0;do{c[b>>2]=c[h>>2];b=b+4|0;h=h+4|0}while((b|0)<(g|0))}l=m;return}function wK(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0,i=0,j=0.0,k=0,m=0,n=0.0;k=l;l=l+32|0;m=k+16|0;i=k;f=c[a+4>>2]|0;a=c[a>>2]|0;g=(c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[m>>2]=c[b>>2];c[m+4>>2]=c[b+4>>2];c[m+8>>2]=c[b+8>>2];c[m+12>>2]=c[b+12>>2];ZG(i,m,g);c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];if(!f){f=c[(c[a+16>>2]|0)+12>>2]|0;g=f+16|0;a=f+24|0;i=f+32|0;f=f+40|0}else{g=f;a=f+8|0;i=f+16|0;f=f+24|0}e=+h[a>>3];d=+h[f>>3];n=+h[b>>3];if((+h[g>>3]<=n?n<=+h[i>>3]:0)?(j=+h[b+8>>3],e<=j):0)a=j<=d&1;else a=0;l=k;return a|0}function xK(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0;u=l;l=l+80|0;r=u+64|0;q=u+32|0;t=u;a:do if(!(a[d+28>>0]|0))e=0;else{i=+h[d>>3];p=b+16|0;m=c[(c[p>>2]|0)+12>>2]|0;k=m+48|0;m=m+56|0;d=0;while(1){if((d|0)>=(c[k>>2]|0))break a;n=(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1|0)==0;o=c[(c[m>>2]|0)+(d<<2)>>2]|0;j=+(~~+h[(n?o+16|0:o+24|0)>>3]|0);if(i>=j?(s=+(~~+h[(n?o+32|0:o+40|0)>>3]|0),i<=s):0)break;d=d+1|0}if(!(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1)){t=c[p>>2]|0;v=+h[t+16>>3];h[f>>3]=v+j;j=+h[t+24>>3];i=+h[t+80>>3];h[f+8>>3]=j-i*.5;h[f+16>>3]=v+s}else{o=(c[(c[m>>2]|0)+(d<<2)>>2]|0)+16|0;b=(c[p>>2]|0)+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];c[q+16>>2]=c[o+16>>2];c[q+20>>2]=c[o+20>>2];c[q+24>>2]=c[o+24>>2];c[q+28>>2]=c[o+28>>2];c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2];c[r+12>>2]=c[b+12>>2];_G(t,q,r);c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];c[f+12>>2]=c[t+12>>2];c[f+16>>2]=c[t+16>>2];c[f+20>>2]=c[t+20>>2];c[f+24>>2]=c[t+24>>2];c[f+28>>2]=c[t+28>>2];t=c[p>>2]|0;i=+h[t+80>>3];j=+h[t+24>>3]}h[f+24>>3]=i*.5+j;c[g>>2]=1}while(0);l=u;return e|0}function yK(d,e){d=d|0;e=e|0;var f=0,i=0,j=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0;w=l;l=l+144|0;n=w+96|0;p=w+64|0;r=w;s=w+128|0;t=c[d+16>>2]|0;u=t+208|0;f=c[u>>2]|0;if(!f)v=(b[t+260>>1]&1)!=0;else v=1;m=e+16|0;q=c[m>>2]|0;o=c[q+12>>2]|0;j=o+16|0;c[p>>2]=c[j>>2];c[p+4>>2]=c[j+4>>2];c[p+8>>2]=c[j+8>>2];c[p+12>>2]=c[j+12>>2];c[p+16>>2]=c[j+16>>2];c[p+20>>2]=c[j+20>>2];c[p+24>>2]=c[j+24>>2];c[p+28>>2]=c[j+28>>2];x=+h[q+16>>3];h[p>>3]=+h[p>>3]+x;k=+h[q+24>>3];q=p+8|0;h[q>>3]=+h[q>>3]+k;q=p+16|0;h[q>>3]=+h[q>>3]+x;j=p+24|0;h[j>>3]=+h[j>>3]+k;if(v?(c[d+152>>2]&4|0)==0:0)PO(d,f,c[t+228>>2]|0,c[t+244>>2]|0,c[t+212>>2]|0);f=dK(d,e)|0;fK(d,e)|0;c[s>>2]=0;if(!(f&1))i=0;else{i=eK(e)|0;if(!((uG(i,s,n)|0)<<24>>24)){WO(d,i);i=1}else{WO(d,c[s>>2]|0);i=c[s+4>>2]|0;j=KL(e,c[46403]|0,0,0)|0;k=+g[n>>2];if(!i)XO(d,134232,j,k);else XO(d,i,j,k);i=f>>>1&1|2}}j=c[c[(c[m>>2]|0)+8>>2]>>2]|0;if((a[j>>0]|0)==77){m=(b$(j,103201)|0)==0;f=m?f|4:f}if(!(f&2130706444)){c[n>>2]=c[p>>2];c[n+4>>2]=c[p+4>>2];c[n+8>>2]=c[p+8>>2];c[n+12>>2]=c[p+12>>2];c[n+16>>2]=c[p+16>>2];c[n+20>>2]=c[p+20>>2];c[n+24>>2]=c[p+24>>2];c[n+28>>2]=c[p+28>>2];$O(d,n,i)}else{c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];p=r+32|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];h[r+16>>3]=+h[p>>3];h[r+24>>3]=+h[r+8>>3];h[r+48>>3]=+h[r>>3];h[r+56>>3]=+h[r+40>>3];EJ(d,r,4,f,i)}zK(d,e,o);D_(c[s>>2]|0);if(v){if(c[d+152>>2]&4|0)PO(d,c[u>>2]|0,c[t+228>>2]|0,c[t+244>>2]|0,c[t+212>>2]|0);QO(d)}l=w;return}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+144|0;p=u+128|0;o=u+112|0;q=u+16|0;r=u;g=u+96|0;i=u+80|0;s=u+64|0;t=u+48|0;j=e+52|0;f=c[j>>2]|0;if(!f)f=d+16|0;else{n=f+56|0;m=e+16|0;f=e+32|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];AK(g,o,p);f=d+16|0;m=(c[f>>2]|0)+16|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[p>>2]=c[m>>2];c[p+4>>2]=c[m+4>>2];c[p+8>>2]=c[m+8>>2];c[p+12>>2]=c[m+12>>2];hK(i,o,p);c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];oH(b,10,c[j>>2]|0);fK(b,d)|0}k=(c[f>>2]|0)+16|0;c[r>>2]=c[k>>2];c[r+4>>2]=c[k+4>>2];c[r+8>>2]=c[k+8>>2];c[r+12>>2]=c[k+12>>2];k=e+48|0;m=e+64|0;n=q+16|0;j=e+56|0;e=q+16|0;i=0;while(1){if((i|0)>=(c[k>>2]|0))break;if((i|0)>0){f=(c[j>>2]|0)+(i<<2)|0;g=c[f>>2]|0;if(!(a[m>>0]|0)){g=g+32|0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];c[n+12>>2]=c[g+12>>2];h[q>>3]=+h[(c[f>>2]|0)+16>>3];f=n;g=0}else{g=g+16|0;c[q>>2]=c[g>>2];c[q+4>>2]=c[g+4>>2];c[q+8>>2]=c[g+8>>2];c[q+12>>2]=c[g+12>>2];h[e>>3]=+h[q>>3];f=(c[f>>2]|0)+32|0;g=1}h[q+(g<<4)+8>>3]=+h[f+8>>3];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];c[o+8>>2]=c[q+8>>2];c[o+12>>2]=c[q+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];hK(s,o,p);c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];c[q+8>>2]=c[s+8>>2];c[q+12>>2]=c[s+12>>2];c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];hK(t,o,p);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];bP(b,q,2)}zK(b,d,c[(c[j>>2]|0)+(i<<2)>>2]|0);i=i+1|0}l=u;return}function AK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function BK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[b+60>>2]|0;if(!(((e|0)!=0?(a[e>>0]|0)==(a[d>>0]|0):0)?(b$(e,d)|0)==0:0))f=4;a:do if((f|0)==4){g=b+56|0;f=c[b+48>>2]|0;e=0;while(1){if((e|0)>=(f|0)){b=0;break a}b=BK(c[(c[g>>2]|0)+(e<<2)>>2]|0,d)|0;if(!b)e=e+1|0;else break}}while(0);return b|0}function CK(a,b){a=a|0;b=b|0;var d=0;d=b+8|0;h[d>>3]=+h[d>>3]*1.375;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function DK(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;k=+h[b>>3];f=k*.5;m=+h[b+8>>3];i=m*.5;h[a>>3]=f;e=m*.40909090909090906;h[a+8>>3]=e;h[a+16>>3]=f;g=m*.4592530909090909;h[a+24>>3]=g;j=k*.275892;h[a+32>>3]=j;h[a+40>>3]=i;h[a+48>>3]=0.0;h[a+56>>3]=i;k=k*-.275892;h[a+64>>3]=k;h[a+72>>3]=i;l=-f;h[a+80>>3]=l;h[a+88>>3]=g;d=a+96|0;h[d>>3]=l;h[a+104>>3]=e;b=a+112|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=a+128|0;h[b>>3]=l;h[a+136>>3]=m*-.40909090909090906;d=a+144|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];h[a+160>>3]=l;g=-g;h[a+168>>3]=g;h[a+176>>3]=k;i=-i;h[a+184>>3]=i;h[a+192>>3]=0.0;h[a+200>>3]=i;h[a+208>>3]=j;h[a+216>>3]=i;h[a+224>>3]=f;h[a+232>>3]=g;d=a+240|0;h[d>>3]=f;h[a+248>>3]=-e;b=a+256|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];b=a+288|0;d=a+272|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];return}function EK(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+144|0;u=x+112|0;t=x+96|0;v=x+80|0;s=x+64|0;w=x+32|0;q=x+16|0;r=x;g=x+48|0;do if(a){j=c[a+4>>2]|0;k=c[a>>2]|0;o=(c[(c[(ez(k)|0)+16>>2]|0)+116>>2]&3)*90|0;c[u>>2]=c[b>>2];c[u+4>>2]=c[b+4>>2];c[u+8>>2]=c[b+8>>2];c[u+12>>2]=c[b+12>>2];ZG(g,u,o);c[w>>2]=c[g>>2];c[w+4>>2]=c[g+4>>2];c[w+8>>2]=c[g+8>>2];c[w+12>>2]=c[g+12>>2];if(j|0){d=+h[w>>3];if(!(+h[j>>3]<=d)){a=0;break}if(!(d<=+h[j+16>>3])){a=0;break}d=+h[w+8>>3];if(!(+h[j+8>>3]<=d)){a=0;break}a=d<=+h[j+24>>3];break}if((k|0)==(c[46522]|0)){d=+h[22924];e=+h[22925];i=+h[22926]}else{a=k+16|0;b=c[(c[a>>2]|0)+12>>2]|0;c[46523]=b;c[46524]=c[b+44>>2];c[46525]=c[b+8>>2];if(!(c[b+40>>2]&2048)){n=(c[(c[(ez(k)|0)+16>>2]|0)+116>>2]&1|0)==0;o=c[a>>2]|0;h[(n?183416:183424)>>3]=+h[o+96>>3]+ +h[o+88>>3];h[(n?183424:183416)>>3]=+h[o+80>>3];i=+h[o+32>>3]*72.0;f=+h[o+40>>3]*72.0;f=+(~~(f+(f>=0.0?.5:-.5))|0);i=+(~~(i+(i>=0.0?.5:-.5))|0)}else{jM(u,b);i=+h[u+16>>3]-+h[u>>3];f=+h[u+24>>3]-+h[u+8>>3];o=(c[(c[(ez(k)|0)+16>>2]|0)+116>>2]&1|0)==0;h[(o?183416:183424)>>3]=i;h[(o?183424:183416)>>3]=f}d=+h[22927];if(d==0.0){h[22927]=1.0;d=1.0}e=+h[22928];if(e==0.0){h[22928]=1.0;e=1.0}d=i/d;h[22924]=d;e=f/e;h[22925]=e;i=i*.5;h[22926]=i;h[22929]=f*.5;o=O((c[(c[46523]|0)+4>>2]|0)+-1|0,c[46525]|0)|0;c[46526]=(o|0)>0?o:0;c[46522]=k}f=+h[w>>3]*d;h[w>>3]=f;o=w+8|0;d=+h[o>>3]*e;h[o>>3]=d;if(!(+B(+f)>i)?(e=+B(+d),p=+h[22929],!(e>p)):0){o=c[46525]|0;if((o|0)<3){a=+u$(f/i,d/p)<1.0;break}b=(c[46527]|0)%(o|0)|0;a=(b+1|0)%(o|0)|0;k=c[46524]|0;m=c[46526]|0;n=k+(m+b<<4)|0;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];n=k+(m+a<<4)|0;c[r>>2]=c[n>>2];c[r+4>>2]=c[n+4>>2];c[r+8>>2]=c[n+8>>2];c[r+12>>2]=c[n+12>>2];c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[45860];c[v+4>>2]=c[45861];c[v+8>>2]=c[45862];c[v+12>>2]=c[45863];c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];if(mK(s,v,t,u)|0){c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[q>>2];c[v+4>>2]=c[q+4>>2];c[v+8>>2]=c[q+8>>2];c[v+12>>2]=c[q+12>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[u>>2]=c[45860];c[u+4>>2]=c[45861];c[u+8>>2]=c[45862];c[u+12>>2]=c[45863];n=(mK(s,v,t,u)|0)!=0;if(n?(c[s>>2]=c[w>>2],c[s+4>>2]=c[w+4>>2],c[s+8>>2]=c[w+8>>2],c[s+12>>2]=c[w+12>>2],c[v>>2]=c[r>>2],c[v+4>>2]=c[r+4>>2],c[v+8>>2]=c[r+8>>2],c[v+12>>2]=c[r+12>>2],c[t>>2]=c[45860],c[t+4>>2]=c[45861],c[t+8>>2]=c[45862],c[t+12>>2]=c[45863],c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],c[u+12>>2]=c[q+12>>2],(mK(s,v,t,u)|0)!=0):0){a=1;break}else{j=b;b=1}while(1){if((b|0)>=(o|0)){b=31;break}if(n){g=a;a=(a+1|0)%(o|0)|0}else{g=(j+-1+o|0)%(o|0)|0;a=j}q=k+(m+g<<4)|0;r=k+(m+a<<4)|0;c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];c[v>>2]=c[45860];c[v+4>>2]=c[45861];c[v+8>>2]=c[45862];c[v+12>>2]=c[45863];c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2];c[t+12>>2]=c[q+12>>2];c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];c[u+12>>2]=c[r+12>>2];if(!(mK(s,v,t,u)|0)){b=30;break}else{j=g;b=b+1|0}}if((b|0)==30){c[46527]=g;a=0;break}else if((b|0)==31){c[46527]=j;a=1;break}}else a=0}else a=0}else{c[46522]=0;a=0}while(0);l=x;return a&1|0}function FK(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,g=0.0,i=0,j=0,k=0;j=l;l=l+32|0;f=j+16|0;i=j;if(a){a=c[a>>2]|0;k=(c[(c[(ez(a)|0)+16>>2]|0)+116>>2]&3)*90|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];ZG(i,f,k);g=+h[i>>3];e=+h[i+8>>3];if((a|0)==(c[46530]|0))d=+h[22932];else{i=c[(c[a+16>>2]|0)+12>>2]|0;k=(c[i+4>>2]<<1)+-2|0;d=+h[(c[i+44>>2]|0)+((((k|0)>0?k:0)|1)<<4)>>3];h[22932]=d;c[46530]=a}if(+B(+g)>d|+B(+e)>d)a=0;else a=+u$(g,e)<=d&1}else{c[46530]=0;a=0}l=j;return a|0}function GK(e,f){e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0;t=l;l=l+16|0;j=t;r=c[e+16>>2]|0;s=r+208|0;g=c[s>>2]|0;if((g|0)==0?(b[r+260>>1]&1)==0:0)q=0;else if(!(c[e+152>>2]&4)){PO(e,g,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0);q=1}else q=1;n=f+16|0;k=c[(c[n>>2]|0)+12>>2]|0;o=c[k+44>>2]|0;p=c[k+8>>2]|0;k=c[k+4>>2]|0;if((c[46528]|0)<(p|0)){g=p+2|0;c[46528]=g;i=c[46529]|0;if(!i)g=vH(g<<4)|0;else g=xH(i,g<<4)|0;c[46529]=g}jK(f,j)|0;if(!(c[j>>2]&32))YO(e,21916);else YO(e,21912);g=c[46402]|0;if(g|0)fP(e,+LL(f,g,1.0,0.0));g=d[(c[n>>2]|0)+117>>0]|0;do if(!(g&1)){if(g&2|0){UO(e,OL(f,0,103230)|0);g=OL(f,0,103238)|0;WO(e,g);break}if(g&8|0){UO(e,OL(f,0,103246)|0);g=OL(f,0,103254)|0;WO(e,g);break}if(!(g&4)){g=iK(f,134232)|0;WO(e,g);fK(e,f)|0;break}else{UO(e,OL(f,0,103262)|0);g=OL(f,0,103270)|0;WO(e,g);break}}else{UO(e,OL(f,0,103214)|0);g=OL(f,0,103222)|0;WO(e,g)}while(0);if(!k)if(!(a[g>>0]|0))i=1;else{UO(e,g);i=1}else i=k;j=1;f=0;while(1){if((f|0)>=(i|0))break;k=O(f,p)|0;m=c[46529]|0;g=0;while(1){if((g|0)>=(p|0))break;w=g+k|0;u=+h[o+(w<<4)+8>>3];v=c[n>>2]|0;h[m+(g<<4)>>3]=+h[v+16>>3]+ +h[o+(w<<4)>>3];h[m+(g<<4)+8>>3]=+h[v+24>>3]+u;g=g+1|0}ZO(e,m,p,j);j=0;f=f+1|0}if(q){if(c[e+152>>2]&4|0)PO(e,c[s>>2]|0,c[r+228>>2]|0,c[r+244>>2]|0,c[r+212>>2]|0);QO(e)}l=t;return}function HK(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+48|0;h=g;e=IK(b,e,f)|0;c[h+36>>2]=c[f+36>>2];nK(b,c[f+24>>2]|0,h,e,d[f+33>>0]|0,0)|0;b=h;e=a+40|0;do{c[a>>2]=c[b>>2];a=a+4|0;b=b+4|0}while((a|0)<(e|0));l=g;return}function IK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0;z=l;l=l+32|0;y=z;g=z+24|0;k=z+16|0;x=c[(c[(c[(ez(b)|0)+60>>2]|0)+16>>2]|0)+116>>2]&3;f=b+16|0;w=(c[f>>2]|0)+16|0;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];JK(g,y,x);w=(c[d+16>>2]|0)+16|0;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];JK(k,y,x);x=a[e+33>>0]|0;y=x&255;a:do switch(x<<24>>24){case 0:case 15:{d=0;break}default:{d=c[e+24>>2]|0;if(!d){x=(c[(c[(ez(b)|0)+16>>2]|0)+116>>2]&1|0)==0;w=c[f>>2]|0;B=+h[w+80>>3]*.5;A=-B;m=+h[w+88>>3];j=-m;n=x?j:A;i=x?m:B;m=x?B:m;j=x?A:j}else{n=+h[d>>3];i=+h[d+16>>3];m=+h[d+24>>3];j=+h[d+8>>3]}x=c[g>>2]|0;v=c[g+4>>2]|0;w=c[k>>2]|0;s=c[k+4>>2]|0;t=~~j;u=~~((i+n)*.5);r=~~i;q=~~((m+j)*.5);p=~~m;o=~~n;g=0;k=0;d=0;e=0;b=0;while(1){if((k|0)==4)break a;if(1<<k&y){switch(k|0){case 0:{e=u;b=t;break}case 1:{e=r;b=q;break}case 2:{e=u;b=p;break}case 3:{e=o;b=q;break}default:{}}e=x+e|0;b=v+b|0;f=e-w|0;C=b-s|0;f=(O(C,C)|0)+(O(f,f)|0)|0;if((d|0)==0|(f|0)<(g|0))d=c[21924+(k<<2)>>2]|0;else f=g}else f=g;g=f;k=k+1|0}}}while(0);l=z;return d|0}function JK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;switch(d|0){case 0:{f=+h[b>>3];e=+h[b+8>>3];break}case 2:{f=+h[b>>3];e=-+h[b+8>>3];break}case 1:{f=-+h[b+8>>3];e=+h[b>>3];break}case 3:{f=+h[b+8>>3];e=+h[b>>3];break}default:{f=0.0;e=0.0}}c[a>>2]=~~(f+(f>=0.0?.5:-.5));c[a+4>>2]=~~(e+(e>=0.0?.5:-.5));return}function KK(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+80|0;f=i+40|0;h=i;g=b+16|0;e=c[g>>2]|0;d=e+16|0;if(a[e+47>>0]|0){e=c[b>>2]&3;HK(f,c[((e|0)==3?b:b+48|0)+40>>2]|0,c[((e|0)==2?b:b+-48|0)+40>>2]|0,d);e=f;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));e=c[g>>2]|0}d=e+56|0;if(a[e+87>>0]|0){e=c[b>>2]&3;HK(h,c[((e|0)==2?b:b+-48|0)+40>>2]|0,c[((e|0)==3?b:b+48|0)+40>>2]|0,d);e=h;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0))}l=i;return}function LK(){var a=0,b=0,d=0;a=l;l=l+32|0;b=a+16|0;d=a;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];EK(0,b)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];FK(0,b)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];aK(0,b)|0;l=a;return}function MK(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=l;l=l+192|0;s=z+176|0;x=z+112|0;y=z+48|0;t=z+32|0;u=z+24|0;v=z+16|0;w=z;if(!(e<<24>>24)){k=d+48|0;c[t>>2]=c[k>>2];c[t+4>>2]=c[k+4>>2];c[t+8>>2]=c[k+8>>2];c[t+12>>2]=c[k+12>>2];k=u;m=v;n=x;o=0}else{c[t>>2]=c[d>>2];c[t+4>>2]=c[d+4>>2];c[t+8>>2]=c[d+8>>2];c[t+12>>2]=c[d+12>>2];k=v;m=u;n=0;o=x}h[u>>3]=0.0;h[v>>3]=1.0;q=t+8|0;f=0.0;g=1.0;j=0;p=+h[t>>3];while(1){r=+h[q>>3];f=(f+g)*.5;XL(w,d,3,f,n,o);c[t>>2]=c[w>>2];c[t+4>>2]=c[w+4>>2];c[t+8>>2]=c[w+8>>2];c[t+12>>2]=c[w+12>>2];c[s>>2]=c[w>>2];c[s+4>>2]=c[w+4>>2];c[s+8>>2]=c[w+8>>2];c[s+12>>2]=c[w+12>>2];a:do if(!((lb[b&127](a,s)|0)<<24>>24)){e=0;while(1){if((e|0)==4){e=k;j=1;break a}j=y+(e<<4)|0;A=x+(e<<4)|0;c[j>>2]=c[A>>2];c[j+4>>2]=c[A+4>>2];c[j+8>>2]=c[A+8>>2];c[j+12>>2]=c[A+12>>2];e=e+1|0}}else e=m;while(0);h[e>>3]=f;i=+h[t>>3];p=p-i;if(!((p>=0.0?p:-p)>.5)?(r=r-+h[q>>3],!((r>=0.0?r:-r)>.5)):0)break;f=+h[u>>3];g=+h[v>>3];p=i}b:do if(!(j<<24>>24)){e=0;while(1){if((e|0)==4)break b;A=d+(e<<4)|0;y=x+(e<<4)|0;c[A>>2]=c[y>>2];c[A+4>>2]=c[y+4>>2];c[A+8>>2]=c[y+8>>2];c[A+12>>2]=c[y+12>>2];e=e+1|0}}else{e=0;while(1){if((e|0)==4)break b;A=d+(e<<4)|0;x=y+(e<<4)|0;c[A>>2]=c[x>>2];c[A+4>>2]=c[x+4>>2];c[A+8>>2]=c[x+8>>2];c[A+12>>2]=c[x+12>>2];e=e+1|0}}while(0);l=z;return}function NK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0;m=l;l=l+48|0;d=m+16|0;e=m;f=m+32|0;g=a+16|0;i=c[g>>2]|0;j=c[i+8>>2]|0;if(j|0?(k=j+4|0,c[(c[k>>2]|0)+12>>2]|0):0){c[f>>2]=a;c[f+4>>2]=0;n=+h[i+96>>3];h[e>>3]=+h[b>>3]-+h[i+16>>3];h[e+8>>3]=+h[b+8>>3]-+h[i+24>>3];k=c[(c[k>>2]|0)+12>>2]|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];k=lb[k&127](f,d)|0;h[(c[g>>2]|0)+96>>3]=n;OK(f,a,b,k)}l=m;return}function OK(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,m=0,n=0;n=l;l=l+64|0;m=n;j=b+16|0;g=c[j>>2]|0;k=+h[g+96>>3];i=g+16|0;f=g+24|0;b=0;while(1){if((b|0)==4)break;h[m+(b<<4)>>3]=+h[d+(b<<4)>>3]-+h[i>>3];h[m+(b<<4)+8>>3]=+h[d+(b<<4)+8>>3]-+h[f>>3];b=b+1|0}MK(a,c[(c[(c[g+8>>2]|0)+4>>2]|0)+12>>2]|0,m,e);b=0;while(1){if((b|0)==4)break;e=c[j>>2]|0;h[d+(b<<4)>>3]=+h[e+16>>3]+ +h[m+(b<<4)>>3];h[d+(b<<4)+8>>3]=+h[e+24>>3]+ +h[m+(b<<4)+8>>3];b=b+1|0}h[(c[j>>2]|0)+96>>3]=k;l=n;return}function PK(b,d){b=b|0;d=d|0;var e=0,f=0;while(1){f=b+16|0;b=c[f>>2]|0;if(!(a[b+112>>0]|0))break;b=c[b+116>>2]|0}b=c[b+8>>2]|0;if(!b){b=uH(40)|0;c[(c[f>>2]|0)+8>>2]=b}e=c[b>>2]|0;if(!e)b=vH(((c[b+4>>2]|0)*48|0)+48|0)|0;else b=xH(e,((c[b+4>>2]|0)*48|0)+48|0)|0;f=c[(c[f>>2]|0)+8>>2]|0;c[f>>2]=b;f=f+4|0;e=c[f>>2]|0;c[f>>2]=e+1;f=b+(e*48|0)|0;c[f>>2]=uH(d<<4)|0;c[b+(e*48|0)+4>>2]=d;b=b+(e*48|0)+8|0;e=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));return f|0}function QK(b,e,f,g,i){b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0;D=l;l=l+96|0;A=D+16|0;u=D;x=D+92|0;y=D+88|0;v=D+80|0;m=c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0;z=ez(m)|0;B=PK(b,g)|0;n=b;while(1){o=c[n+16>>2]|0;if(!(a[o+112>>0]|0))break;n=c[o+116>>2]|0}if((a[i+8>>0]|0)==0?(j=c[m+16>>2]|0,k=c[e+16>>2]|0,(c[j+232>>2]|0)==(c[k+232>>2]|0)):0){p=(c[j+236>>2]|0)>(c[k+236>>2]|0);w=p?m:e;m=p?e:m}else w=e;if((m|0)==(c[((c[n>>2]&3|0)==3?n:n+48|0)+40>>2]|0)){j=o+80|0;k=o+40|0;p=d[o+86>>0]|0;e=d[o+46>>0]|0}else{j=o+40|0;k=o+80|0;p=d[o+46>>0]|0;e=d[o+86>>0]|0}o=c[j>>2]|0;j=c[k>>2]|0;if(((e|0)!=0?(r=m+16|0,q=c[(c[r>>2]|0)+8>>2]|0,(q|0)!=0):0)?(c[(c[q+4>>2]|0)+12>>2]|0)!=0:0){c[v>>2]=m;c[v+4>>2]=j;j=g+-4|0;e=u+8|0;k=0;while(1){if((k|0)>=(j|0))break;n=k+3|0;q=c[r>>2]|0;h[u>>3]=+h[f+(n<<4)>>3]-+h[q+16>>3];h[e>>3]=+h[f+(n<<4)+8>>3]-+h[q+24>>3];q=c[(c[(c[q+8>>2]|0)+4>>2]|0)+12>>2]|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];if(!((lb[q&127](v,A)|0)<<24>>24))break;else k=n}c[x>>2]=k;OK(v,m,f+(k<<4)|0,1)}else{c[x>>2]=0;k=0}if(((p|0)!=0?(t=w+16|0,s=c[(c[t>>2]|0)+8>>2]|0,(s|0)!=0):0)?(c[(c[s+4>>2]|0)+12>>2]|0)!=0:0){c[v>>2]=w;c[v+4>>2]=o;m=g+-4|0;e=u+8|0;j=m;while(1){if((j|0)<=0)break;g=c[t>>2]|0;h[u>>3]=+h[f+(j<<4)>>3]-+h[g+16>>3];h[e>>3]=+h[f+(j<<4)+8>>3]-+h[g+24>>3];g=c[(c[(c[g+8>>2]|0)+4>>2]|0)+12>>2]|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];if(!((lb[g&127](v,A)|0)<<24>>24))break;j=j+-3|0}c[y>>2]=j;OK(v,w,f+(j<<4)|0,0)}else{m=g+-4|0;c[y>>2]=m;j=m}while(1){if((k|0)>=(m|0))break;e=k+3|0;E=+h[f+(k<<4)>>3]-+h[f+(e<<4)>>3];F=+h[f+(k<<4)+8>>3]-+h[f+(e<<4)+8>>3];if(F*F+E*E<1.0e-06)k=e;else break}c[x>>2]=k;while(1){if((j|0)<=0)break;v=j+3|0;F=+h[f+(j<<4)>>3]-+h[f+(v<<4)>>3];E=+h[f+(j<<4)+8>>3]-+h[f+(v<<4)+8>>3];if(!(E*E+F*F<1.0e-06))break;j=j+-3|0}c[y>>2]=j;RK(b,w,f,x,y,B,i);r=c[x>>2]|0;n=c[y>>2]|0;m=n+4|0;n=n+3|0;o=A+16|0;p=A+32|0;q=A+48|0;k=z+16|0;j=r;while(1){if((j|0)>=(m|0))break;z=(c[B>>2]|0)+(j-r<<4)|0;e=f+(j<<4)|0;c[z>>2]=c[e>>2];c[z+4>>2]=c[e+4>>2];c[z+8>>2]=c[e+8>>2];c[z+12>>2]=c[e+12>>2];c[A>>2]=c[e>>2];c[A+4>>2]=c[e+4>>2];c[A+8>>2]=c[e+8>>2];c[A+12>>2]=c[e+12>>2];e=j+1|0;if((j|0)>=(n|0)){C=38;break}y=(c[B>>2]|0)+(e-r<<4)|0;z=f+(e<<4)|0;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[o>>2]=c[z>>2];c[o+4>>2]=c[z+4>>2];c[o+8>>2]=c[z+8>>2];c[o+12>>2]=c[z+12>>2];z=j+2|0;y=(c[B>>2]|0)+(z-r<<4)|0;z=f+(z<<4)|0;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];c[p>>2]=c[z>>2];c[p+4>>2]=c[z+4>>2];c[p+8>>2]=c[z+8>>2];c[p+12>>2]=c[z+12>>2];z=j+3|0;y=f+(z<<4)|0;c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];YE((c[k>>2]|0)+16|0,A);j=z}c[B+4>>2]=m-r;l=D;return}function RK(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p+4|0;n=p;o=b;while(1){j=c[(c[o+16>>2]|0)+116>>2]|0;if(!j)break;else o=j}if(!(a[i+8>>0]|0))j=(kb[c[i>>2]&63](o)|0)&255;else j=0;sE(o,m,n);k=i+4|0;if((kb[c[k>>2]&63](d)|0)<<24>>24)c[n>>2]=0;if((kb[c[k>>2]&63](c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0)<<24>>24)c[m>>2]=0;if(j|0){d=c[m>>2]|0;c[m>>2]=c[n>>2];c[n>>2]=d}if(!(a[i+9>>0]|0)){j=c[m>>2]|0;if(j|0)c[f>>2]=HE(o,e,c[f>>2]|0,c[g>>2]|0,h,j)|0;j=c[n>>2]|0;if(j|0)c[g>>2]=FE(o,e,c[f>>2]|0,c[g>>2]|0,h,j)|0}else{k=c[n>>2]|0;j=c[m>>2]|0;if(j|k|0)IE(o,e,c[f>>2]|0,c[g>>2]|0,h,j,k)}l=p;return}function SK(a,b){a=a|0;b=b|0;var d=0,e=0;if(+h[b>>3]<+h[b+16>>3]?+h[b+8>>3]<+h[b+24>>3]:0){d=c[a+84>>2]|0;e=a+80|0;a=c[e>>2]|0;c[e>>2]=a+1;a=d+(a<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2]}return}function TK(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;x=l;l=l+112|0;u=x+72|0;o=x+56|0;n=x+16|0;q=x;j=c[d>>2]&3;p=d+48|0;w=c[((j|0)==3?d:p)+40>>2]|0;t=d+16|0;r=c[t>>2]|0;i=r+16|0;if(a[r+47>>0]|0){HK(n,w,c[((j|0)==2?d:d+-48|0)+40>>2]|0,i);j=n;n=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(n|0))}r=w+16|0;j=c[r>>2]|0;i=c[j+8>>2]|0;if(!i)n=0;else n=c[(c[i+4>>2]|0)+16>>2]|0;i=j+16|0;j=(c[t>>2]|0)+16|0;c[o>>2]=c[i>>2];c[o+4>>2]=c[i+4>>2];c[o+8>>2]=c[i+8>>2];c[o+12>>2]=c[i+12>>2];c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];UK(q,o,u);c[b>>2]=c[q>>2];c[b+4>>2]=c[q+4>>2];c[b+8>>2]=c[q+8>>2];c[b+12>>2]=c[q+12>>2];if(!(g<<24>>24)){i=c[t>>2]|0;if(!(a[i+45>>0]|0))i=0;else{k=+h[i+32>>3];v=9}}else{k=+VK(c[((c[d>>2]&3|0)==3?d:p)+40>>2]|0);v=9}if((v|0)==9){h[b+16>>3]=k;i=1}a[b+29>>0]=i;c[b+80>>2]=0;c[b+88>>2]=d;q=f+32|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];switch(e|0){case 1:{j=c[r>>2]|0;if((a[j+156>>0]|0)==0?(q=a[(c[t>>2]|0)+49>>0]|0,s=q&255,q<<24>>24!=0):0){c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];c[u+20>>2]=c[f+20>>2];c[u+24>>2]=c[f+24>>2];c[u+28>>2]=c[f+28>>2];do if(!(s&4)){if(s&1|0){c[f+48>>2]=1;i=u+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?u+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}i=f+48|0;if(!(s&8)){c[i>>2]=2;h[u>>3]=+h[b>>3];h[u+8>>3]=+h[j+24>>3]-+h[j+80>>3]*.5;h[u+24>>3]=+h[b+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}else{c[i>>2]=8;h[u+16>>3]=+h[b>>3];h[u+8>>3]=+h[j+24>>3]-+h[j+80>>3]*.5;h[u+24>>3]=+h[b+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}}else{c[f+48>>2]=4;k=+h[u>>3];if(+h[b>>3]<+h[j+16>>3]){z=k+-1.0;y=+h[b+8>>3];b=u+16|0;k=+h[b>>3];m=+h[j+80>>3]*.5+ +h[j+24>>3];m=m+ +((c[(c[(ez(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[r>>2]|0;h[b>>3]=+h[i+16>>3]-+h[i+88>>3];h[u+24>>3]=y;h[u+8>>3]=+h[i+24>>3]-+h[i+80>>3]*.5;h[u>>3]=z;h[f+56>>3]=z;h[f+64>>3]=y;h[f+72>>3]=k;h[f+80>>3]=m;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}else{m=+h[b+8>>3];i=u+16|0;y=+h[i>>3]+1.0;z=+h[j+80>>3]*.5+ +h[j+24>>3];z=z+ +((c[(c[(ez(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[r>>2]|0;h[u>>3]=+h[b+96>>3]+ +h[b+16>>3];h[u+24>>3]=m;h[u+8>>3]=+h[b+24>>3]-+h[b+80>>3]*.5;h[i>>3]=y;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=y;h[f+80>>3]=z;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((w|0)==(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)?i+16|0:i+56|0)+30>>0]=0}else{j=1;v=47}break}case 2:{s=a[(c[t>>2]|0)+49>>0]|0;j=s&255;if(!(s<<24>>24))v=46;else{c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];c[u+20>>2]=c[f+20>>2];c[u+24>>2]=c[f+24>>2];c[u+28>>2]=c[f+28>>2];do if(!(j&4)){if(j&1|0)if((c[f+48>>2]|0)==4){i=c[r>>2]|0;z=+h[i+24>>3]-+h[i+80>>3]*.5;i=u+16|0;y=+h[i>>3]+1.0;k=+h[b>>3];m=z-+((c[(c[(ez(w)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[r>>2]|0;h[u>>3]=+h[b+96>>3]+ +h[b+16>>3];h[u+8>>3]=z;h[u+24>>3]=+h[b+80>>3]*.5+ +h[b+24>>3];h[i>>3]=y;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=y;h[f+80>>3]=z;i=f+88|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=2;break}else{i=u+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?u+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}k=+h[b>>3];if(!(j&8)){h[u>>3]=k;e=c[r>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[u+24>>3]=m+k;k=+h[b+8>>3];i=u}else{h[u+8>>3]=k-m;k=+h[b+8>>3]+1.0;i=u+16|0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}else{i=u+16|0;h[i>>3]=k+1.0;e=c[r>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[u+24>>3]=m+k;k=+h[b+8>>3]+-1.0;i=u}else{h[u+8>>3]=k-m;k=+h[b+8>>3]+1.0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1;break}}else{i=u+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+8>>3]?u:b)+8>>3];i=f+56|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];c[i+12>>2]=c[u+12>>2];c[i+16>>2]=c[u+16>>2];c[i+20>>2]=c[u+20>>2];c[i+24>>2]=c[u+24>>2];c[i+28>>2]=c[u+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((w|0)==(c[((c[d>>2]&3|0)==3?d:d+48|0)+40>>2]|0)?i+16|0:i+56|0)+30>>0]=0;c[f+48>>2]=j}break}default:v=46}if((v|0)==46){j=c[f+48>>2]|0;v=47}a:do if((v|0)==47){if(n){d=f+56|0;i=f+52|0;j=pb[n&127](w,(c[t>>2]|0)+16|0,j,d,i)|0;if(j){c[f+48>>2]=j;break}}else{i=f+52|0;d=f+56|0};c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[i>>2]=1;switch(e|0){case 8:{qa(135312,103488,569,103498);break}case 2:{h[((c[f+48>>2]|0)==4?f+56|0:f+72|0)+8>>3]=+h[b+8>>3];break a}case 1:{h[f+80>>3]=+h[b+8>>3];c[f+48>>2]=1;break a}default:break a}}while(0);l=x;return}function UK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function VK(a){a=a|0;var b=0.0,d=0,e=0,f=0.0,g=0,i=0,j=0,k=0.0,l=0.0;i=c[a+16>>2]|0;j=c[i+172>>2]|0;f=0.0;g=0;while(1){a=c[j+(g<<2)>>2]|0;if(!a)break;f=+h[(c[(c[((c[a>>2]&3|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0)+16>>3]+f;g=g+1|0}e=c[i+180>>2]|0;b=0.0;a=0;while(1){d=c[e+(a<<2)>>2]|0;if(!d)break;b=+h[(c[(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)+16>>2]|0)+16>>3]+b;a=a+1|0}k=+h[i+16>>3];l=+h[i+24>>3];j=c[j>>2]|0;f=+K(+(l-+h[(c[(c[((c[j>>2]&3|0)==3?j:j+48|0)+40>>2]|0)+16>>2]|0)+24>>3]),+(k-f/+(g|0)));j=c[e>>2]|0;return +((+K(+(+h[(c[(c[((c[j>>2]&3|0)==2?j:j+-48|0)+40>>2]|0)+16>>2]|0)+24>>3]-l),+(b/+(a|0)-k))+f)*.5)}function WK(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0;z=l;l=l+112|0;w=z+72|0;p=z+56|0;n=z+16|0;t=z;j=c[d>>2]&3;r=d+-48|0;y=c[((j|0)==2?d:r)+40>>2]|0;u=d+16|0;s=c[u>>2]|0;i=s+56|0;if(a[s+87>>0]|0){HK(n,y,c[((j|0)==3?d:d+48|0)+40>>2]|0,i);j=n;n=i+40|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(n|0))}s=y+16|0;j=c[s>>2]|0;i=c[j+8>>2]|0;if(!i)o=0;else o=c[(c[i+4>>2]|0)+16>>2]|0;n=b+40|0;i=j+16|0;j=(c[u>>2]|0)+56|0;c[p>>2]=c[i>>2];c[p+4>>2]=c[i+4>>2];c[p+8>>2]=c[i+8>>2];c[p+12>>2]=c[i+12>>2];c[w>>2]=c[j>>2];c[w+4>>2]=c[j+4>>2];c[w+8>>2]=c[j+8>>2];c[w+12>>2]=c[j+12>>2];UK(t,p,w);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];c[n+8>>2]=c[t+8>>2];c[n+12>>2]=c[t+12>>2];if(!(g<<24>>24)){i=c[u>>2]|0;if(!(a[i+85>>0]|0))q=0;else{h[b+56>>3]=+h[i+72>>3];q=1}}else{m=+VK(c[((c[d>>2]&3|0)==2?d:r)+40>>2]|0)+3.141592653589793;h[b+56>>3]=m;if(m<6.283185307179586)q=1;else qa(103508,103488,606,103532)}a[b+69>>0]=q;t=f+32|0;c[t>>2]=c[n>>2];c[t+4>>2]=c[n+4>>2];c[t+8>>2]=c[n+8>>2];c[t+12>>2]=c[n+12>>2];switch(e|0){case 1:{j=c[s>>2]|0;if((a[j+156>>0]|0)==0?(t=a[(c[u>>2]|0)+89>>0]|0,v=t&255,t<<24>>24!=0):0){c[w>>2]=c[f>>2];c[w+4>>2]=c[f+4>>2];c[w+8>>2]=c[f+8>>2];c[w+12>>2]=c[f+12>>2];c[w+16>>2]=c[f+16>>2];c[w+20>>2]=c[f+20>>2];c[w+24>>2]=c[f+24>>2];c[w+28>>2]=c[f+28>>2];do if(!(v&4))if(!(v&1)){i=f+48|0;if(!(v&8)){c[i>>2]=2;h[w>>3]=+h[n>>3];h[w+24>>3]=+h[j+80>>3]*.5+ +h[j+24>>3];h[w+8>>3]=+h[b+48>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}else{c[i>>2]=8;h[w+16>>3]=+h[n>>3];h[w+24>>3]=+h[j+80>>3]*.5+ +h[j+24>>3];h[w+8>>3]=+h[b+48>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}}else{c[f+48>>2]=1;k=+h[w>>3];if(+h[n>>3]<+h[j+16>>3]){B=k+-1.0;m=+h[b+48>>3];b=w+16|0;k=+h[b>>3];A=+h[j+80>>3]*-.5+ +h[j+24>>3];A=A-+((c[(c[(ez(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[s>>2]|0;h[b>>3]=+h[i+16>>3]-+h[i+88>>3];h[w+8>>3]=m;h[w+24>>3]=+h[i+80>>3]*.5+ +h[i+24>>3];h[w>>3]=B;h[f+56>>3]=B;h[f+64>>3]=A;h[f+72>>3]=k;h[f+80>>3]=m;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}else{B=+h[b+48>>3];i=w+16|0;A=+h[i>>3]+1.0;m=+h[j+80>>3]*-.5+ +h[j+24>>3];m=m-+((c[(c[(ez(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);b=c[s>>2]|0;h[w>>3]=+h[b+96>>3]+ +h[b+16>>3];h[w+8>>3]=B;h[w+24>>3]=+h[b+80>>3]*.5+ +h[b+24>>3];h[i>>3]=A;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=A;h[f+80>>3]=B;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}}else{c[f+48>>2]=4;i=w+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+48>>3]?w:n)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((y|0)==(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)?i+56|0:i+16|0)+30>>0]=0;c[f+48>>2]=v}else{j=4;x=47}break}case 2:{v=a[(c[u>>2]|0)+89>>0]|0;j=v&255;if(!(v<<24>>24))x=46;else{c[w>>2]=c[f>>2];c[w+4>>2]=c[f+4>>2];c[w+8>>2]=c[f+8>>2];c[w+12>>2]=c[f+12>>2];c[w+16>>2]=c[f+16>>2];c[w+20>>2]=c[f+20>>2];c[w+24>>2]=c[f+24>>2];c[w+28>>2]=c[f+28>>2];do if(!(j&4)){if(j&1|0)if((c[f+48>>2]|0)==4){k=+h[w>>3]+-1.0;i=c[s>>2]|0;B=+h[i+24>>3]-+h[i+80>>3]*.5;A=+h[n>>3];m=B-+((c[(c[(ez(y)|0)+16>>2]|0)+252>>2]|0)/2|0|0);i=c[s>>2]|0;h[w+16>>3]=+h[i+16>>3]+-2.0-+h[i+88>>3];h[w+8>>3]=B;h[w+24>>3]=+h[i+80>>3]*.5+ +h[i+24>>3];h[w>>3]=k;h[f+56>>3]=k;h[f+64>>3]=m;h[f+72>>3]=A;h[f+80>>3]=B;i=f+88|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=2;break}else{i=w+24|0;h[i>>3]=+h[(+h[i>>3]>+h[b+8>>3]?w+16|0:b)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}k=+h[n>>3];if(!(j&8)){h[w>>3]=k+-1.0;e=c[s>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[w+24>>3]=m+k;k=+h[b+48>>3]+-1.0;i=w}else{h[w+8>>3]=k-m;k=+h[b+48>>3];i=w+16|0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}else{i=w+16|0;h[i>>3]=k+1.0;e=c[s>>2]|0;k=+h[e+24>>3];m=+h[e+80>>3]*.5;if((c[f+48>>2]|0)==4){h[w+24>>3]=m+k;k=+h[b+48>>3]+-1.0;i=w}else{h[w+8>>3]=k-m;k=+h[b+48>>3]+1.0}h[i+8>>3]=k;i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1;break}}else{i=w+8|0;h[i>>3]=+h[(+h[i>>3]<+h[b+48>>3]?w:n)+8>>3];i=f+56|0;c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2];c[i+16>>2]=c[w+16>>2];c[i+20>>2]=c[w+20>>2];c[i+24>>2]=c[w+24>>2];c[i+28>>2]=c[w+28>>2];i=1}while(0);c[f+52>>2]=i;while(1){i=c[d+16>>2]|0;if(!(a[i+112>>0]|0))break;d=c[i+116>>2]|0}a[((y|0)==(c[((c[d>>2]&3|0)==2?d:d+-48|0)+40>>2]|0)?i+56|0:i+16|0)+30>>0]=0;c[f+48>>2]=j}break}default:x=46}if((x|0)==46){j=c[f+48>>2]|0;x=47}a:do if((x|0)==47){if(o){d=f+56|0;i=f+52|0;j=pb[o&127](y,(c[u>>2]|0)+56|0,j,d,i)|0;if(j){c[f+48>>2]=j;break}}else{i=f+52|0;d=f+56|0};c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[i>>2]=1;switch(e|0){case 8:{qa(135312,103488,765,103532);break}case 2:{h[((c[f+48>>2]|0)==4?f+56|0:f+72|0)+8>>3]=+h[b+48>>3];break a}case 1:{h[f+64>>3]=+h[b+48>>3];c[f+48>>2]=4;break a}default:break a}}while(0);l=z;return}function XK(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0;g=c[b+16>>2]|0;i=c[g+96>>2]|0;if((a[g+44>>0]|0)==0?(a[g+84>>0]|0)==0:0)j=6;else{d=a[g+49>>0]|0;e=d&255;if(((e&8|0)==0?(f=a[g+89>>0]|0,(f&8)==0):0)?((e&5|0)==0?1:d<<24>>24!=f<<24>>24):0)j=6;else b=0}if((j|0)==6)if(!i)b=18;else{b=(c[(c[(ez(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)!=0;b=~~(+h[(b?i+32|0:i+24|0)>>3]+18.0)}return b|0}function YK(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=+h;i=i|0;var j=0,k=0,l=0,m=0;b=c[(c[d+(e<<2)>>2]|0)+16>>2]|0;if((a[b+44>>0]|0)==0?(a[b+84>>0]|0)==0:0)l=6;else l=3;do if((l|0)==3){j=a[b+49>>0]|0;k=j&255;if(!(k&8)){m=a[b+89>>0]|0;if((m&8)==0?((k&5|0)==0?1:j<<24>>24!=m<<24>>24):0){l=6;break}if(!(a[b+89>>0]&8)){if(k&4|0){_K(d,e,f,g,h,i);break}if(!(k&1))qa(135312,103488,1231,103540);else{aL(d,e,f,g,h,i);break}}}if((j&2)==0?(a[b+89>>0]&2)==0:0){$K(d,e,f,g,h,i);break}_K(d,e,f,g,h,i)}while(0);if((l|0)==6)ZK(d,e,f,g,h,i);return}function ZK(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;B=c[b+(e<<2)>>2]|0;n=i*.5/+(f|0);n=n>2.0?n:2.0;D=(c[((c[B>>2]&3|0)==3?B:B+48|0)+40>>2]|0)+16|0;A=c[D>>2]|0;C=+h[A+16>>3];H=+h[A+24>>3];B=c[B+16>>2]|0;m=+h[B+16>>3];E=m+C;F=+h[B+24>>3]+H;i=+h[B+56>>3];G=i+C;H=+h[B+64>>3]+H;k=!(F>=H)?-1:1;p=+h[A+96>>3];switch(bL(d[B+49>>0]|0,d[B+89>>0]|0)|0){case 65:case 32:{if(F==H)k=0-k|0;break}default:{}}Q=(p-m)*3.0;m=(p-i)*3.0;v=n*+(k|0);u=L+8|0;w=L+16|0;x=L+32|0;y=L+48|0;z=(H+F)*.5;A=L+64|0;B=L+80|0;s=L+96|0;t=L+104|0;r=0;o=0.0;i=p;n=p<Q?p:Q;m=p<m?p:m;while(1){if((r|0)>=(f|0))break;q=e+1|0;e=c[b+(e<<2)>>2]|0;p=i+g;n=n+g;m=m+g;o=o+v;h[L>>3]=E;h[u>>3]=F;Q=o+F;cL(M,n*.3333333333333333+E,Q);c[w>>2]=c[M>>2];c[w+4>>2]=c[M+4>>2];c[w+8>>2]=c[M+8>>2];c[w+12>>2]=c[M+12>>2];R=p+C;cL(N,R,Q);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];cL(O,R,z);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Q=H-o;cL(J,R,Q);c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];cL(K,m*.3333333333333333+G,Q);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];h[s>>3]=G;h[t>>3]=H;k=e+16|0;if((c[(c[k>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(ez(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,k=c[(c[k>>2]|0)+96>>2]|0,I=+h[(S?k+24|0:k+32|0)>>3],S=c[D>>2]|0,h[k+56>>3]=I*.5+p+ +h[S+16>>3],h[k+64>>3]=+h[S+24>>3],a[k+81>>0]=1,I>g):0)i=I+i;else i=p;QK(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,L,7,j);e=q;r=r+1|0}l=P;return}function _K(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0;Q=l;l=l+16080|0;M=Q+80|0;N=Q+64|0;O=Q+48|0;P=Q+32|0;K=Q+16|0;L=Q;C=c[b+(e<<2)>>2]|0;q=g*.5/+(f|0);q=q>2.0?q:2.0;E=(c[((c[C>>2]&3|0)==3?C:C+48|0)+40>>2]|0)+16|0;m=c[E>>2]|0;H=+h[m+16>>3];D=+h[m+24>>3];C=c[C+16>>2]|0;k=+h[C+16>>3];p=+h[C+24>>3];F=k+H;G=p+D;g=+h[C+56>>3];o=+h[C+64>>3];H=g+H;I=o+D;n=!(F>=H)?-1.0:1.0;s=+h[m+80>>3]*.5;switch(bL(d[C+49>>0]|0,d[C+89>>0]|0)|0){case 15:{k=(q-g+ +h[m+96>>3])*n;break}case 38:{k=(g+q+ +h[m+88>>3])*n;break}case 41:{k=(q-k+ +h[m+96>>3])*n;break}case 48:{k=(q-k+ +h[m+96>>3])*n;break}case 58:case 57:case 51:case 47:case 37:case 14:{k=n*.3333333333333333*(k-g+ +h[m+88>>3]+ +h[m+96>>3]);break}case 73:{k=(k+q+ +h[m+88>>3])*n;break}case 83:{k=(+h[m+88>>3]+k)*n;break}case 84:{k=((k-g+ +h[m+88>>3]+ +h[m+96>>3])*.5+q)*n;break}case 85:case 75:case 74:{k=((k-g+ +h[m+88>>3]+ +h[m+96>>3])*.5+q*2.0)*n;break}default:k=0.0}p=(s-p)*3.0;o=(s-o)*3.0;q=n*q;w=M+8|0;x=M+16|0;y=M+32|0;z=M+48|0;A=(H+F)*.5;B=M+64|0;C=M+80|0;u=M+96|0;v=M+104|0;t=0;g=s;p=s<p?s:p;n=s<o?s:o;while(1){if((t|0)>=(f|0))break;r=e+1|0;e=c[b+(e<<2)>>2]|0;o=g+i;p=p+i;n=n+i;k=k+q;h[M>>3]=F;h[w>>3]=G;s=k+F;cL(N,s,p*.3333333333333333+G);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];R=o+D;cL(O,s,R);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];cL(P,A,R);c[z>>2]=c[P>>2];c[z+4>>2]=c[P+4>>2];c[z+8>>2]=c[P+8>>2];c[z+12>>2]=c[P+12>>2];s=H-k;cL(K,s,R);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];cL(L,s,n*.3333333333333333+I);c[C>>2]=c[L>>2];c[C+4>>2]=c[L+4>>2];c[C+8>>2]=c[L+8>>2];c[C+12>>2]=c[L+12>>2];h[u>>3]=H;h[v>>3]=I;m=e+16|0;if((c[(c[m>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(ez(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,m=c[(c[m>>2]|0)+96>>2]|0,J=+h[(S?m+32|0:m+24|0)>>3],S=c[E>>2]|0,h[m+64>>3]=J*.5+o+ +h[S+24>>3],h[m+56>>3]=+h[S+16>>3],a[m+81>>0]=1,J>i):0)g=J+g;else g=o;QK(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,M,7,j);e=r;t=t+1|0}l=Q;return}function $K(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;B=c[b+(e<<2)>>2]|0;n=i*.5/+(f|0);n=n>2.0?n:2.0;D=(c[((c[B>>2]&3|0)==3?B:B+48|0)+40>>2]|0)+16|0;A=c[D>>2]|0;C=+h[A+16>>3];H=+h[A+24>>3];B=c[B+16>>2]|0;m=+h[B+16>>3];E=m+C;F=+h[B+24>>3]+H;i=+h[B+56>>3];G=i+C;H=+h[B+64>>3]+H;k=!(F>=H)?-1:1;p=+h[A+88>>3];switch(bL(d[B+49>>0]|0,d[B+89>>0]|0)|0){case 67:case 12:{if(F==H)k=0-k|0;break}default:{}}Q=(m+p)*3.0;m=(i+p)*3.0;v=n*+(k|0);u=L+8|0;w=L+16|0;x=L+32|0;y=L+48|0;z=(H+F)*.5;A=L+64|0;B=L+80|0;s=L+96|0;t=L+104|0;r=0;o=0.0;i=p;n=p<Q?p:Q;m=p<m?p:m;while(1){if((r|0)>=(f|0))break;q=e+1|0;e=c[b+(e<<2)>>2]|0;p=i+g;n=n+g;m=m+g;o=o+v;h[L>>3]=E;h[u>>3]=F;Q=o+F;cL(M,E-n*.3333333333333333,Q);c[w>>2]=c[M>>2];c[w+4>>2]=c[M+4>>2];c[w+8>>2]=c[M+8>>2];c[w+12>>2]=c[M+12>>2];R=C-p;cL(N,R,Q);c[x>>2]=c[N>>2];c[x+4>>2]=c[N+4>>2];c[x+8>>2]=c[N+8>>2];c[x+12>>2]=c[N+12>>2];cL(O,R,z);c[y>>2]=c[O>>2];c[y+4>>2]=c[O+4>>2];c[y+8>>2]=c[O+8>>2];c[y+12>>2]=c[O+12>>2];Q=H-o;cL(J,R,Q);c[A>>2]=c[J>>2];c[A+4>>2]=c[J+4>>2];c[A+8>>2]=c[J+8>>2];c[A+12>>2]=c[J+12>>2];cL(K,G-m*.3333333333333333,Q);c[B>>2]=c[K>>2];c[B+4>>2]=c[K+4>>2];c[B+8>>2]=c[K+8>>2];c[B+12>>2]=c[K+12>>2];h[s>>3]=G;h[t>>3]=H;k=e+16|0;if((c[(c[k>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(ez(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,k=c[(c[k>>2]|0)+96>>2]|0,I=+h[(S?k+24|0:k+32|0)>>3],S=c[D>>2]|0,h[k+56>>3]=I*-.5-p+ +h[S+16>>3],h[k+64>>3]=+h[S+24>>3],a[k+81>>0]=1,I>g):0)i=I+i;else i=p;QK(e,c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0,L,7,j);e=q;r=r+1|0}l=P;return}function aL(b,e,f,g,i,j){b=b|0;e=e|0;f=f|0;g=+g;i=+i;j=j|0;var k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0;P=l;l=l+16080|0;L=P+80|0;M=P+64|0;N=P+48|0;O=P+32|0;J=P+16|0;K=P;C=c[b+(e<<2)>>2]|0;B=g*.5/+(f|0);w=(c[((c[C>>2]&3|0)==3?C:C+48|0)+40>>2]|0)+16|0;D=c[w>>2]|0;z=+h[D+16>>3];v=+h[D+24>>3];C=c[C+16>>2]|0;m=+h[C+24>>3];x=+h[C+16>>3]+z;y=m+v;n=+h[C+64>>3];z=+h[C+56>>3]+z;A=n+v;u=!(x>=z)?-1:1;o=+h[D+80>>3]*.5;C=(bL(d[C+49>>0]|0,d[C+89>>0]|0)|0)==67;m=(m+o)*3.0;n=(n+o)*3.0;B=(B>2.0?B:2.0)*+((C?0-u|0:u)|0);u=L+8|0;C=L+16|0;D=L+32|0;E=L+48|0;F=(z+x)*.5;G=L+64|0;H=L+80|0;s=L+96|0;t=L+104|0;g=o;k=0.0;m=o<m?o:m;n=o<n?o:n;q=0;while(1){if((q|0)>=(f|0))break;r=e+1|0;p=c[b+(e<<2)>>2]|0;o=g+i;m=m+i;n=n+i;k=k+B;h[L>>3]=x;h[u>>3]=y;Q=k+x;cL(M,Q,y-m*.3333333333333333);c[C>>2]=c[M>>2];c[C+4>>2]=c[M+4>>2];c[C+8>>2]=c[M+8>>2];c[C+12>>2]=c[M+12>>2];R=v-o;cL(N,Q,R);c[D>>2]=c[N>>2];c[D+4>>2]=c[N+4>>2];c[D+8>>2]=c[N+8>>2];c[D+12>>2]=c[N+12>>2];cL(O,F,R);c[E>>2]=c[O>>2];c[E+4>>2]=c[O+4>>2];c[E+8>>2]=c[O+8>>2];c[E+12>>2]=c[O+12>>2];Q=z-k;cL(J,Q,R);c[G>>2]=c[J>>2];c[G+4>>2]=c[J+4>>2];c[G+8>>2]=c[J+8>>2];c[G+12>>2]=c[J+12>>2];cL(K,Q,A-n*.3333333333333333);c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];h[s>>3]=z;h[t>>3]=A;e=p+16|0;if((c[(c[e>>2]|0)+96>>2]|0)!=0?(S=(c[(c[(ez(c[((c[p>>2]&3|0)==3?p:p+48|0)+40>>2]|0)|0)+16>>2]|0)+116>>2]&1|0)==0,e=c[(c[e>>2]|0)+96>>2]|0,I=+h[(S?e+32|0:e+24|0)>>3],S=c[w>>2]|0,h[e+64>>3]=I*-.5-o+ +h[S+24>>3],h[e+56>>3]=+h[S+16>>3],a[e+81>>0]=1,I>i):0)g=I+g;else g=o;QK(p,c[((c[p>>2]&3|0)==2?p:p+-48|0)+40>>2]|0,L,7,j);e=r;q=q+1|0}l=P;return}function bL(a,b){a=a|0;b=b|0;var d=0;d=0;while(1){if((d|0)>=8){b=-1;break}if((c[21940+(d<<2)>>2]|0)==(b|0)){b=d;break}d=d+1|0}d=0;while(1){if((d|0)>=8){d=-1;break}if((c[21940+(d<<2)>>2]|0)==(a|0))break;d=d+1|0}if((d|b|0)<0)d=0;else d=c[21972+(d<<5)+(b<<2)>>2]|0;return d|0}function cL(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function dL(b){b=b|0;var d=0,e=0;if((c[46433]|0)!=0|(c[46432]|0)!=0){d=b+16|0;e=c[(c[d>>2]|0)+100>>2]|0;if((e|0?(a[e+81>>0]|0)==0:0)?eL(b,1)|0:0){e=ez(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;kM(e,c[(c[d>>2]|0)+100>>2]|0)}e=c[(c[d>>2]|0)+104>>2]|0;if((e|0?(a[e+81>>0]|0)==0:0)?eL(b,0)|0:0){e=ez(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;kM(e,c[(c[d>>2]|0)+104>>2]|0)}}return}function eL(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+96|0;o=q+32|0;m=q+16|0;n=q;i=b+16|0;do if((a[(c[i>>2]|0)+112>>0]|0)!=6){e=c[46433]|0;if(!((e|0)!=0?(a[(yx(b,e)|0)>>0]|0)!=0:0)){e=c[46432]|0;if(!e){e=0;break}if(!(a[(yx(b,e)|0)>>0]|0)){e=0;break}}d=d<<24>>24==0;p=c[i>>2]|0;p=c[(d?p+104|0:p+100|0)>>2]|0;e=fL(b)|0;if(e){k=c[e>>2]|0;do if(d){if(c[k+8>>2]|0){e=c[k>>2]|0;j=+h[e>>3];g=+h[k+16>>3];e=e+8|0;f=+h[k+24>>3];break}e=c[k>>2]|0;g=+h[e>>3];f=+h[e+8>>3];e=0;while(1){if((e|0)==4)break;n=o+(e<<4)|0;i=(c[k>>2]|0)+(e<<4)|0;c[n>>2]=c[i>>2];c[n+4>>2]=c[i+4>>2];c[n+8>>2]=c[i+8>>2];c[n+12>>2]=c[i+12>>2];e=e+1|0}XL(m,o,3,.1,0,0);j=+h[m>>3];e=m+8|0}else{d=(c[e+4>>2]|0)+-1|0;i=k+(d*48|0)|0;if(c[k+(d*48|0)+12>>2]|0){o=c[i>>2]|0;e=(c[k+(d*48|0)+4>>2]|0)+-1|0;j=+h[o+(e<<4)>>3];g=+h[k+(d*48|0)+32>>3];e=o+(e<<4)+8|0;f=+h[k+(d*48|0)+40>>3];break}m=c[i>>2]|0;d=k+(d*48|0)+4|0;e=(c[d>>2]|0)+-1|0;g=+h[m+(e<<4)>>3];f=+h[m+(e<<4)+8>>3];e=0;while(1){if((e|0)==4)break;m=o+(e<<4)|0;k=(c[i>>2]|0)+(e+-4+(c[d>>2]|0)<<4)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];e=e+1|0}XL(n,o,3,.9,0,0);j=+h[n>>3];e=n+8|0}while(0);r=+K(+(+h[e>>3]-f),+(j-g));r=+LL(b,c[46433]|0,-25.0,-180.0)*.017453292519943295+r;j=+LL(b,c[46432]|0,1.0,0.0)*10.0;h[p+56>>3]=j*+E(+r)+g;h[p+64>>3]=+F(+r)*j+f;a[p+81>>0]=1;e=1}else e=0}else e=0;while(0);l=q;return e|0}function fL(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+16|0;f=h;d=b;while(1){e=c[d+16>>2]|0;d=c[e+8>>2]|0;if(d|0)break;if(!(a[e+112>>0]|0)){g=5;break}d=c[e+116>>2]|0}if((g|0)==5){g=ry(c[((c[b>>2]&3|0)==3?b:b+48|0)+40>>2]|0)|0;d=ry(c[((c[b>>2]&3|0)==2?b:b+-48|0)+40>>2]|0)|0;c[f>>2]=g;c[f+4>>2]=d;Pw(1,103553,f)|0;d=0}l=h;return d|0}function gL(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0;s=l;l=l+96|0;m=s+80|0;n=s+64|0;o=s+48|0;p=s+32|0;q=s+16|0;r=s;k=b[(c[d+16>>2]|0)+136>>1]|0;d=e+16|0;hL(c[(c[d>>2]|0)+8>>2]|0,p,q);f=+h[p>>3];g=+h[q>>3];t=f-g;i=+h[p+8>>3];j=+h[q+8>>3];u=i-j;a:do if(u*u+t*t<1.0e-06){c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2]}else switch(k&14){case 4:case 10:{h[n>>3]=(g+f)*.5;h[n+8>>3]=(j+i)*.5;q=c[(c[d>>2]|0)+8>>2]|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];bM(r,q,m);c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];break a}default:{iL(o,c[(c[d>>2]|0)+8>>2]|0,p,q);break a}}while(0);c[a>>2]=c[o>>2];c[a+4>>2]=c[o+4>>2];c[a+8>>2]=c[o+8>>2];c[a+12>>2]=c[o+12>>2];l=s;return}function hL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+32|0;g=h+16|0;f=h;j=c[a>>2]|0;e=c[j>>2]|0;i=c[j+8>>2]|0;k=j+16|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];j=j+32|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];if(!i){c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2]}else{c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];c[b+12>>2]=c[g+12>>2]}i=c[a>>2]|0;j=(c[a+4>>2]|0)+-1|0;e=c[i+(j*48|0)>>2]|0;a=c[i+(j*48|0)+4>>2]|0;k=c[i+(j*48|0)+12>>2]|0;b=i+(j*48|0)+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];j=i+(j*48|0)+32|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];if(!k){k=e+(a+-1<<4)|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2]}else{c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2]}l=h;return}function iL(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0;r=c[b+4>>2]|0;g=0.0;f=0;while(1){if((f|0)>=(r|0))break;l=c[b>>2]|0;k=c[l+(f*48|0)>>2]|0;l=c[l+(f*48|0)+4>>2]|0;i=3;j=0;while(1){if((i|0)>=(l|0))break;q=+h[k+(j<<4)>>3]-+h[k+(i<<4)>>3];p=+h[k+(j<<4)+8>>3]-+h[k+(i<<4)+8>>3];i=i+3|0;j=j+3|0;g=+C(+(p*p+q*q))+g}f=f+1|0}l=0;g=g*.5;a:while(1){if((l|0)>=(r|0)){f=15;break}k=c[b>>2]|0;j=c[k+(l*48|0)>>2]|0;k=c[k+(l*48|0)+4>>2]|0;f=3;i=0;while(1){if((f|0)>=(k|0))break;m=+h[j+(i<<4)>>3];p=+h[j+(i<<4)+8>>3];n=+h[j+(f<<4)>>3];o=+h[j+(f<<4)+8>>3];q=m-n;s=p-o;q=+C(+(s*s+q*q));if(q>=g){f=12;break a}f=f+3|0;i=i+3|0;g=g-q}l=l+1|0}if((f|0)==12){h[d>>3]=m;h[d+8>>3]=p;h[e>>3]=n;h[e+8>>3]=o;s=q-g;h[a>>3]=(s*m+n*g)/q;h[a+8>>3]=(s*p+o*g)/q;return}else if((f|0)==15)qa(135630,103488,1316,103615)}function jL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;dL(b);return}function kL(b,d,e,f,g){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,G=0,H=0,I=0,J=0,K=0,L=0;J=lL(b)|0;I=c[J+4>>2]|0;K=c[J>>2]|0;H=I+-1|0;B=+h[K+(H<<6)+16>>3];C=+(I|0);D=(g|0)==2;G=(f|0)!=0;n=0;j=0.0;i=0.0;l=0.0;m=0.0;while(1){if((n|0)>=(I|0))break;b=~~+mL(+(n+-1|0),C);A=n+1|0;L=~~+mL(+(A|0),C);o=K+(n<<6)|0;m=+h[o>>3];z=K+(n<<6)+8|0;l=+h[z>>3];s=K+(n<<6)+16|0;t=+h[s>>3];u=K+(n<<6)+24|0;v=K+(n<<6)+32|0;w=K+(n<<6)+40|0;x=K+(n<<6)+48|0;y=K+(n<<6)+56|0;k=+nL(+h[K+(L<<6)+8>>3]-l,+h[K+(L<<6)>>3]-m);q=+nL(+h[K+(b<<6)+8>>3]-l,+h[K+(b<<6)>>3]-m);r=+hb[d&7](t,B,e);b=(n|0)==0;do if(b|(n|0)==(H|0))if(b){i=k+1.5707963267948966;if(!D){b=0;p=i;j=r;break}b=0;p=i;j=r;l=l-+F(+k)*r;m=m-+E(+k)*r;break}else{i=q+-1.5707963267948966;if(!D){b=0;p=i;j=r;break}b=0;p=i;j=r;l=l-+F(+q)*r;m=m-+E(+q)*r;break}else{p=k-q;p=1.5707963267948966-(p<0.0?p+6.283185307179586:p)*.5;j=+E(+p);j=j==0.0?0.0:r/j;i=k+1.5707963267948966;k=p+i;if(G|j>r*10.0){q=+mL(q+-1.5707963267948966,6.283185307179586);b=1;p=+mL(i,6.283185307179586);j=r;i=q}else{b=0;p=k;i=k}}while(0);h[o>>3]=m;h[z>>3]=l;h[s>>3]=t;a[u>>0]=108;h[v>>3]=i;h[w>>3]=j;c[x>>2]=b;h[y>>3]=p;n=A}o=uH(12)|0;b=0;while(1){if((b|0)>=(I|0))break;m=+h[K+(b<<6)>>3];l=+h[K+(b<<6)+8>>3];i=+h[K+(b<<6)+32>>3];j=+h[K+(b<<6)+40>>3];L=c[K+(b<<6)+48>>2]|0;k=+h[K+(b<<6)+56>>3];oL(o,+E(+i)*j+m,+F(+i)*j+l);if(L|0)pL(m,l,j,1,i,k,f,o);b=b+1|0}n=(g|0)==1;k=i+3.141592653589793;if(n)qL(o,m,l,j,i,k);else{oL(o,+E(+k)*j+m,+F(+k)*j+l);i=k}b=I+-2|0;k=m;while(1){if((b|0)<=-1)break;m=+h[K+(b<<6)>>3];l=+h[K+(b<<6)+8>>3];j=+h[K+(b<<6)+40>>3];L=c[K+(b<<6)+48>>2]|0;i=+h[K+(b<<6)+32>>3]+3.141592653589793;k=+h[K+(b<<6)+56>>3]+3.141592653589793;oL(o,+E(+k)*j+m,+F(+k)*j+l);if(L|0)pL(m,l,j,0,i,k,f,o);b=b+-1|0;k=m}if(n)qL(o,k,l,j,i,i+3.141592653589793);rL(J);return o|0}function lL(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;q=l;l=l+144|0;i=q+128|0;h=q+112|0;j=q+96|0;k=q+64|0;m=q;n=q+80|0;o=sL()|0;p=c[a+4>>2]|0;f=c[a>>2]|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];tL(o,i,0.0);g=m+48|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];d=0;b=0.0;a:while(1){e=d+3|0;if((e|0)>=(p|0))break;c[m>>2]=c[g>>2];c[m+4>>2]=c[g+4>>2];c[m+8>>2]=c[g+8>>2];c[m+12>>2]=c[g+12>>2];a=1;while(1){if((a|0)==4)break;r=m+(a<<4)|0;s=f+(a+d<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];a=a+1|0}c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];a=1;while(1){if((a|0)==21){d=e;continue a}XL(n,m,3,+(a|0)*.05,0,0);c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];c[k+12>>2]=c[n+12>>2];c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];c[i>>2]=c[n>>2];c[i+4>>2]=c[n+4>>2];c[i+8>>2]=c[n+8>>2];c[i+12>>2]=c[n+12>>2];t=+uL(h,i)+b;c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];tL(o,i,t);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];a=a+1|0;b=t}}vL(o);l=q;return o|0}function mL(a,b){a=+a;b=+b;var c=0.0;c=a-+A(+(a/b))*b;return +(!(a<0.0)&!(a>=b)?a:c)}function nL(a,b){a=+a;b=+b;if(!(a==0.0&b==0.0)){a=+K(+a,+b);if(!(a>=0.0))a=a+6.283185307179586}else a=0.0;return +a}function oL(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0;e=c[a>>2]|0;f=a+4|0;if((e|0)<(c[f>>2]|0))f=c[a+8>>2]|0;else{c[f>>2]=2e3;e=a+8|0;f=xH(c[e>>2]|0,32e3)|0;c[e>>2]=f;e=c[a>>2]|0}c[a>>2]=e+1;h[f+(e<<4)>>3]=b;h[f+(e<<4)+8>>3]=d;return}function pL(a,b,c,d,e,f,g,h){a=+a;b=+b;c=+c;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0.0;d=(d|0)==0;i=d?e:f;do if((g|0)==1){e=(d?f:e)-i;e=!(e<=1.7453292519943296e-03)?e:e+6.283185307179586;if(e<3.141592653589793){qL(h,a,b,c,e+i,i);break}else{oL(h,+E(+i)*c+a,+F(+i)*c+a);break}}else oL(h,+E(+i)*c+a,+F(+i)*c+a);while(0);return}function qL(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0,h=0.0;oL(a,+E(+e)*d+b,+F(+e)*d+c);a:do if(!(d==0.0)){while(1){if(!(f>e))break;f=f+-6.283185307179586}f=e-f;while(1){if(!(f>6.283185307179586))break;f=f+-6.283185307179586}f=f*.05263157894736842;g=1;while(1){if((g|0)==20)break a;h=e-f*+(g|0);oL(a,+E(+h)*d+b,+F(+h)*d+c);g=g+1|0}}while(0);return}function rL(a){a=a|0;D_(c[a>>2]|0);D_(a);return}function sL(){var a=0;a=uH(12)|0;c[a+4>>2]=0;c[a+8>>2]=2e3;c[a>>2]=uH(128e3)|0;return a|0}function tL(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0;i=a+4|0;e=c[i>>2]|0;f=a+8|0;g=c[f>>2]|0;if((e|0)<(g|0))a=c[a>>2]|0;else{c[f>>2]=g<<1;e=xH(c[a>>2]|0,g<<7)|0;c[a>>2]=e;a=e;e=c[i>>2]|0}h[a+(e<<6)>>3]=+h[b>>3];h[a+(e<<6)+8>>3]=+h[b+8>>3];c[i>>2]=e+1;h[a+(e<<6)+16>>3]=d;return}function uL(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]-+h[b>>3];d=+h[a+8>>3]-+h[b+8>>3];return +(+C(+(d*d+c*c)))}function vL(a){a=a|0;var b=0;b=c[a+4>>2]|0;if((c[a+8>>2]|0)>(b|0))c[a>>2]=xH(c[a>>2]|0,b<<6)|0;return}function wL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k+8|0;i=k;g=k+12|0;c[g>>2]=0;h=c[d+4>>2]|0;if(!h)qa(103632,103643,203,103654);e=c[h>>2]|0;if(!e)qa(103668,103643,206,103654);f=h+8|0;if(!(c[f>>2]|0))c[f>>2]=xL(e)|0;if(!0)e=0;else{e=(AG(c[h>>2]|0)|0)==0;e=e?0:g}if(!((OP(b,d,e)|0)<<24>>24))yL(d,e);do if(e|0){f=c[g>>2]|0;b=c[15686]|0;e=c[h>>2]|0;if(!f){c[j>>2]=e;g1(b,103711,j)|0;break}else{c[i>>2]=e;c[i+4>>2]=f;g1(b,103679,i)|0;break}}while(0);j=d+32|0;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];l=k;return}function xL(a){a=a|0;var b=0;b=c[46531]|0;if((b|0)!=0?(O$(b,a)|0)==0:0)a=c[46540]|0;else{D_(b);c[46531]=n1(a)|0;a=e2(186124,22228,35,36,93)|0;c[46540]=a}return a|0}function yL(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,i=0.0,j=0,k=0.0;j=c[b+4>>2]|0;e=c[j>>2]|0;i=+h[j+16>>3];j=b+32|0;h[j>>3]=0.0;h[b+40>>3]=i*1.2;h[b+16>>3]=0.0;h[b+24>>3]=i*.1;c[b+8>>2]=0;c[b+12>>2]=0;if(V$(e,103745,4)|0)if((V$(e,103750,5)|0)!=0?(V$(e,103756,9)|0)!=0:0){g=4248;e=103766}else{g=8344;e=103802}else{g=6296;e=103783}if(d|0)c[d>>2]=e;e=c[b>>2]|0;if(e|0){f=0.0;while(1){b=a[e>>0]|0;if(!(b<<24>>24))break;k=f+ +h[g+((b&255)<<3)>>3];h[j>>3]=k;e=e+1|0;f=k}h[j>>3]=f*i}return}function zL(a,b){a=a|0;b=b|0;return O$(c[a>>2]|0,c[b>>2]|0)|0}function AL(a){a=a|0;var b=0;b=a+108|0;c[b>>2]=0;c[a+112>>2]=32;c[a+116>>2]=-1;c[a+120>>2]=30;c[a+124>>2]=63;c[a+128>>2]=55;c[a+132>>2]=0;c[a+136>>2]=0;c[a+140>>2]=0;b=Cw(b,c[4555]|0)|0;c[a+144>>2]=b;return b|0}function BL(a,b,d){a=a|0;b=b|0;d=d|0;d=E_(1,32)|0;a=c[b>>2]|0;if(a|0)c[d>>2]=n1(a)|0;a=c[b+4>>2]|0;if(a|0)c[d+4>>2]=n1(a)|0;c[d+24>>2]=c[b+24>>2]&127;h[d+16>>3]=+h[b+16>>3];c[d+8>>2]=c[b+8>>2];return d|0}function CL(a,b,d){a=a|0;b=b|0;d=d|0;D_(c[b>>2]|0);D_(c[b+4>>2]|0);D_(b);return}function DL(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;a=c[b>>2]|0;e=c[d>>2]|0;i=(e|0)==0;if(!a)if(i)j=5;else a=-1;else if(!i){a=b$(a,e)|0;if(!a)j=5}else a=1;do if((j|0)==5){a=c[b+4>>2]|0;e=c[d+4>>2]|0;i=(e|0)==0;if(!a){if(!i){a=-1;break}}else{if(i){a=1;break}a=b$(a,e)|0;if(a|0)break}a=(c[b+24>>2]&127)-(c[d+24>>2]&127)|0;if(!a){g=+h[b+16>>3];f=+h[d+16>>3];if(g<f)a=-1;else a=g>f&1}}while(0);return a|0}function EL(){eb(186164)|0;return}function FL(){var a=0,b=0;b=l;l=l+16|0;a=b;eb(a|0)|0;l=b;return +(+((c[a+4>>2]|0)+(c[a>>2]|0)-(c[46541]|0)-(c[46542]|0)|0)*.016666666666666666)}function GL(a){a=a|0;var b=0,d=0;b=uH(16)|0;a=(a|0)>2?a:2;d=uH(a<<2)|0;c[b>>2]=d;c[b+12>>2]=d;c[b+8>>2]=d;c[b+4>>2]=d+(a<<2);return b|0}function HL(a){a=a|0;D_(c[a>>2]|0);D_(a);return}function IL(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+12|0;e=c[d>>2]|0;c[d>>2]=e+4;c[e>>2]=b;if((c[d>>2]|0)>>>0>=(c[a+4>>2]|0)>>>0)c[d>>2]=c[a>>2];return}function JL(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;b=c[d>>2]|0;if((b|0)!=(c[a+12>>2]|0)){e=b+4|0;c[d>>2]=e;b=c[b>>2]|0;if(e>>>0>=(c[a+4>>2]|0)>>>0)c[d>>2]=c[a>>2]}else b=0;return b|0}function KL(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=l;l=l+16|0;g=i;if(((d|0)!=0?(h=yx(b,d)|0,(h|0)!=0):0)?(a[h>>0]|0)!=0:0){d=i1(h,g,10)|0;e=(h|0)==(c[g>>2]|0)?e:(d|0)<(f|0)?f:d}l=i;return e|0}function LL(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,h=0,i=0,j=0.0;i=l;l=l+16|0;g=i;if(((b|0)!=0&(d|0)!=0?(h=yx(b,d)|0,(h|0)!=0):0)?(a[h>>0]|0)!=0:0){j=+c2(h,g);e=(h|0)==(c[g>>2]|0)?e:j<f?f:j}l=i;return +e}function ML(a){a=a|0;var b=0.0;b=+h[22908];if(!(b>0.0)){b=+LL(a,nx(a,0,104612,0)|0,-1.0,0.0);b=b==0.0?72.0:b}return +b}function NL(a,b,c){a=a|0;b=b|0;c=c|0;if((a|0)!=0&(b|0)!=0)c=yx(a,b)|0;return c|0}function OL(b,c,d){b=b|0;c=c|0;d=d|0;b=NL(b,c,d)|0;if((b|0)!=0?(a[b>>0]|0)!=0:0)d=b;return d|0}function PL(a,b,c){a=a|0;b=b|0;c=c|0;if(!b)a=c&255;else a=QL(yx(a,b)|0)|0;return a|0}function QL(a){a=a|0;return RL(a,0)|0}function RL(b,c){b=b|0;c=c|0;var d=0;if((b|0)!=0?(d=a[b>>0]|0,d<<24>>24!=0):0)if((O$(b,134226)|0)!=0?(O$(b,104623)|0)!=0:0)if((O$(b,104626)|0)!=0?(O$(b,104631)|0)!=0:0){if(((d<<24>>24)+-48|0)>>>0<10)c=(a2(b)|0)&255}else c=1;else c=0;return c|0}function SL(a){a=a|0;var b=0,d=0;while(1){b=(c[a+16>>2]|0)+220|0;d=c[b>>2]|0;if(!((d|0)!=(a|0)&(d|0)!=0))break;a=c[(c[d+16>>2]|0)+220>>2]|0;if(!a){a=d;continue}c[b>>2]=a}return a|0}function TL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((a|0)!=(b|0)){d=c[a+16>>2]|0;e=d+220|0;if(!(c[e>>2]|0)){c[e>>2]=a;c[d+216>>2]=1}else a=SL(a)|0;d=c[b+16>>2]|0;e=d+220|0;if(!(c[e>>2]|0)){c[e>>2]=b;c[d+216>>2]=1}else{d=SL(b)|0;b=d;d=c[d+16>>2]|0}g=a+16|0;e=c[g>>2]|0;f=b+16|0;h=(c[e+120>>2]|0)>(c[d+120>>2]|0);a=h?b:a;c[(h?e:d)+220>>2]=a;e=(c[(h?f:g)>>2]|0)+216|0;c[e>>2]=(c[e>>2]|0)+(c[(c[(h?g:f)>>2]|0)+216>>2]|0)}return a|0}function UL(b){b=b|0;b=c[b+16>>2]|0;c[b+216>>2]=1;c[b+220>>2]=0;a[b+159>>0]=0;return}function VL(a,b){a=a|0;b=b|0;if((SL(a)|0)==(a|0)){a=c[a+16>>2]|0;c[a+220>>2]=b;b=(c[b+16>>2]|0)+216|0;c[b>>2]=(c[b>>2]|0)+(c[a+216>>2]|0);return}else qa(104643,104635,194,104659)}function WL(a,b){a=a|0;b=b|0;var d=0.0;b=c[(c[b+16>>2]|0)+132>>2]|0;d=+h[b+8>>3]*72.0;h[a>>3]=+h[b>>3]*72.0;h[a+8>>3]=d;return}function XL(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var i=0,j=0,k=0,m=0.0,n=0,o=0,p=0;o=l;l=l+576|0;n=o;i=0;while(1){if((i|0)>(d|0))break;k=n+(i<<4)|0;j=b+(i<<4)|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];i=i+1|0}m=1.0-e;i=1;while(1){if((i|0)>(d|0))break;j=d-i|0;k=i+-1|0;b=0;while(1){if((b|0)>(j|0))break;p=b+1|0;h[n+(i*96|0)+(b<<4)>>3]=+h[n+(k*96|0)+(p<<4)>>3]*e+ +h[n+(k*96|0)+(b<<4)>>3]*m;h[n+(i*96|0)+(b<<4)+8>>3]=+h[n+(k*96|0)+(p<<4)+8>>3]*e+ +h[n+(k*96|0)+(b<<4)+8>>3]*m;b=p}i=i+1|0}a:do if(f|0){i=0;while(1){if((i|0)>(d|0))break a;p=f+(i<<4)|0;k=n+(i*96|0)|0;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];c[p+12>>2]=c[k+12>>2];i=i+1|0}}while(0);b:do if(g|0){i=0;while(1){if((i|0)>(d|0))break b;p=g+(i<<4)|0;f=n+((d-i|0)*96|0)+(i<<4)|0;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];i=i+1|0}}while(0);p=n+(d*96|0)|0;c[a>>2]=c[p>>2];c[a+4>>2]=c[p+4>>2];c[a+8>>2]=c[p+8>>2];c[a+12>>2]=c[p+12>>2];l=o;return}function YL(b){b=b|0;var d=0,e=0,f=0,g=0;e=0;do{d=c[46545]|0;f=d+1024|0;if((d-e|0)<1024){c[46545]=f;f=xH(c[46546]|0,f)|0;c[46546]=f;d=c[46545]|0}else f=c[46546]|0;d=O0(f+e|0,d-e|0,b)|0;if(!d){g=6;break}e=(W_(d)|0)+e|0;d=c[46546]|0}while((a[d+(e+-1)>>0]|0)!=10);if((g|0)==6)d=c[46546]|0;return ((e|0)>0?d:0)|0}function ZL(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;do if((b|0)!=0?(a[b>>0]|0)!=0:0)if(!0){d=c[46362]|0;e=c[46548]|0;if((c[46547]|0)==(d|0))d=e;else{if(e){D_(c[e>>2]|0);D_(c[46548]|0);c[46548]=0;d=c[46362]|0}c[46547]=d;if(!d)break;if(!(a[d>>0]|0))break;d=_L(d)|0;c[46548]=d}if(!((a[b>>0]|0)!=47&(d|0)!=0))break;b=$L(d,c[46549]|0,b)|0;break}else S();else b=0;while(0);l=f;return b|0}function _L(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=0;f=0;g=0;b=n1(a)|0;d=0;while(1){b=k1(b,104958)|0;if(!b)break;a=(g<<2)+8|0;if(!f)a=vH(a)|0;else a=xH(d,a)|0;c[a+(g<<2)>>2]=b;f=W_(b)|0;e=e>>>0>f>>>0?e:f;f=a;g=g+1|0;b=0;d=a}c[f+(g<<2)>>2]=0;c[46549]=e;return f|0}function $L(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+16|0;e=g;h=c[46550]|0;c[46550]=F_(h,b+2+(W_(d)|0)|0)|0;while(1){b=c[a>>2]|0;if(!b){a=0;break}h=c[46550]|0;c[e>>2]=b;c[e+4>>2]=104956;c[e+8>>2]=d;Y0(h,104949,e)|0;if(!(K1(c[46550]|0,4)|0)){f=4;break}else a=a+4|0}if((f|0)==4)a=c[46550]|0;l=g;return a|0}function aM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=(b|0)==0;f=0;while(1){h=c[d+(f<<2)>>2]|0;if(!h)break;if((!g?(a[b>>0]|0)==(a[h>>0]|0):0)?(b$(b,h)|0)==0:0)break;f=f+1|0}return c[e+(f<<2)>>2]|0}function bM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0;z=l;l=l+80|0;x=z+16|0;y=z;u=c[b+4>>2]|0;v=c[b>>2]|0;w=d+8|0;f=0;e=-1;g=1.e+38;b=-1;while(1){if((f|0)>=(u|0))break;s=c[v+(f*48|0)>>2]|0;t=c[v+(f*48|0)+4>>2]|0;r=0;while(1){if((r|0)>=(t|0))break;q=+h[s+(r<<4)>>3]-+h[d>>3];p=+h[s+(r<<4)+8>>3]-+h[w>>3];q=p*p+q*q;A=(e|0)==-1|q<g;C=A?r:e;r=r+1|0;b=A?f:b;e=C;g=A?q:g}f=f+1|0}f=c[v+(b*48|0)>>2]|0;e=e+(((e|0)==((c[v+(b*48|0)+4>>2]|0)+-1|0))<<31>>31)|0;e=e-((e|0)%3|0)|0;b=0;while(1){if((b|0)==4)break;C=b+e|0;h[x+(b<<4)>>3]=+h[f+(C<<4)>>3];h[x+(b<<4)+8>>3]=+h[f+(C<<4)+8>>3];b=b+1|0}q=+h[d>>3];k=+h[x>>3]-q;o=+h[w>>3];p=+h[x+8>>3]-o;j=+h[x+48>>3]-q;n=+h[x+56>>3]-o;b=y+8|0;g=1.0;i=0.0;j=n*n+j*j;k=p*p+k*k;while(1){p=(g+i)*.5;XL(y,x,3,p,0,0);m=+h[y>>3];n=+h[b>>3];if(+B(+(k-j))<1.0)break;if(+B(+(g-i))<1.0e-05)break;C=k<j;m=m-q;n=n-o;n=n*n+m*m;g=C?p:g;i=C?i:p;j=C?n:j;k=C?k:n}h[a>>3]=m;h[a+8>>3]=n;l=z;return}function cM(){return 0}function dM(b){b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;d=+LL(b,c[46376]|0,.75,.01);g=b+16|0;h[(c[g>>2]|0)+32>>3]=d;d=+LL(b,c[46375]|0,.5,.02);h[(c[g>>2]|0)+40>>3]=d;l=WJ(OL(b,c[46377]|0,104960)|0,b)|0;c[(c[g>>2]|0)+8>>2]=l;l=yx(b,c[46384]|0)|0;d=+LL(b,c[46380]|0,14.0,1.0);e=OL(b,c[46381]|0,104968)|0;f=OL(b,c[46382]|0,134232)|0;i=(Rz(l)|0)!=0;k=(HJ(b)|0)==2;i=kH(b,l,(k?4:0)|(i?2:0),d,e,f)|0;c[(c[g>>2]|0)+104>>2]=i;i=c[46385]|0;if((i|0?(j=yx(b,i)|0,j|0):0)?a[j>>0]|0:0){l=(Rz(j)|0)!=0;l=kH(b,j,l?2:0,d,e,f)|0;c[(c[g>>2]|0)+108>>2]=l;l=(c[(ez(b)|0)+16>>2]|0)+113|0;a[l>>0]=a[l>>0]|16}k=(KL(b,c[46388]|0,0,0)|0)&255;l=c[g>>2]|0;a[l+144>>0]=k;tb[c[c[(c[l+8>>2]|0)+4>>2]>>2]&127](b);return}function eM(b){b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+112|0;m=v+96|0;n=v+80|0;s=v+40|0;u=v;r=b+48|0;p=ez(c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0)|0;g=m+8|0;c[g>>2]=0;o=n+8|0;c[o>>2]=0;d=c[46412]|0;if(((d|0)!=0?(e=yx(b,d)|0,(e|0)!=0):0)?(a[e>>0]|0)!=0:0){fM(b,m);t=(Rz(e)|0)!=0;i=+h[m>>3];f=c[g>>2]|0;d=c[m+12>>2]|0;e=kH(b,e,t?2:0,i,f,d)|0;t=b+16|0;c[(c[t>>2]|0)+96>>2]=e;e=(c[p+16>>2]|0)+113|0;a[e>>0]=a[e>>0]|1;e=QL(NL(b,c[46422]|0,134226)|0)|0;a[(c[t>>2]|0)+114>>0]=e;t=1;e=f}else{t=0;d=0;i=0.0;e=0}f=c[46413]|0;if((f|0?(j=yx(b,f)|0,j|0):0)?a[j>>0]|0:0){if(!e){fM(b,m);i=+h[m>>3];e=c[g>>2]|0;d=c[m+12>>2]|0}g=(Rz(j)|0)!=0;j=kH(b,j,g?2:0,i,e,d)|0;c[(c[b+16>>2]|0)+108>>2]=j;j=(c[p+16>>2]|0)+113|0;a[j>>0]=a[j>>0]|32}d=c[46427]|0;if(((d|0)!=0?(k=yx(b,d)|0,(k|0)!=0):0)?(a[k>>0]|0)!=0:0){gM(b,m,n);j=(Rz(k)|0)!=0;i=+h[n>>3];d=c[o>>2]|0;e=c[n+12>>2]|0;k=kH(b,k,j?2:0,i,d,e)|0;c[(c[b+16>>2]|0)+100>>2]=k;k=(c[p+16>>2]|0)+113|0;a[k>>0]=a[k>>0]|2}else{e=0;i=0.0;d=0}f=c[46428]|0;if((f|0?(q=yx(b,f)|0,q|0):0)?a[q>>0]|0:0){if(!d){gM(b,m,n);e=c[n+12>>2]|0;i=+h[n>>3];d=c[o>>2]|0}o=(Rz(q)|0)!=0;q=kH(b,q,o?2:0,i,d,e)|0;c[(c[b+16>>2]|0)+104>>2]=q;q=(c[p+16>>2]|0)+113|0;a[q>>0]=a[q>>0]|4}d=xx(b,108373)|0;d=d|0?d:191979;if(a[d>>0]|0)a[(c[(c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0)+16>>2]|0)+145>>0]=1;g=b+16|0;f=(c[g>>2]|0)+16|0;e=c[((c[b>>2]&3|0)==3?b:r)+40>>2]|0;hM(s,c[(c[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,e,d);d=s;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));if((iM(b,c[46434]|0)|0)<<24>>24)a[(c[g>>2]|0)+46>>0]=0;d=xx(b,108382)|0;d=d|0?d:191979;if(!(a[d>>0]|0))e=b+-48|0;else{e=b+-48|0;a[(c[(c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0)+16>>2]|0)+145>>0]=1}f=(c[g>>2]|0)+56|0;e=c[((c[b>>2]&3|0)==2?b:e)+40>>2]|0;hM(u,c[(c[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0,e,d);d=u;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));if((iM(b,c[46435]|0)|0)<<24>>24)a[(c[g>>2]|0)+86>>0]=0;l=v;return t|0}function fM(a,b){a=a|0;b=b|0;h[b>>3]=+LL(a,c[46409]|0,14.0,1.0);c[b+8>>2]=OL(a,c[46410]|0,104968)|0;c[b+12>>2]=OL(a,c[46411]|0,134232)|0;return}function gM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=b+8|0;if(!(c[e>>2]|0))fM(a,b);h[d>>3]=+LL(a,c[46429]|0,+h[b>>3],1.0);c[d+8>>2]=OL(a,c[46430]|0,c[e>>2]|0)|0;c[d+12>>2]=OL(a,c[46431]|0,c[b+12>>2]|0)|0;return}function hM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+128|0;k=m+80|0;h=m+40|0;g=m;if((f|0)!=0?(j=A$(f,58)|0,(j|0)!=0):0){a[j>>0]=0;i=j+1|0;xb[d&31](h,e,f,i);e=k;g=h;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));a[j>>0]=58;f=i}else{xb[d&31](g,e,f,0);e=k;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0))}e=b;g=k;d=e+36|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));c[b+36>>2]=f;l=m;return}function iM(b,c){b=b|0;c=c|0;var d=0;if(((c|0)!=0?(d=yx(b,c)|0,(d|0)!=0):0)?(a[d>>0]|0)!=0:0)b=(QL(d)|0)<<24>>24==0&1;else b=0;return b|0}function jM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;k=l;l=l+32|0;i=k;j=c[b+8>>2]|0;d=c[b+4>>2]|0;d=(c[b+44>>2]|0)+((O((d|0)>1?d+-1|0:0,j)|0)<<4)|0;e=i+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];f=i+8|0;g=i+24|0;b=1;while(1){if((b|0)>=(j|0))break;m=d+(b<<4)|0;o=+h[m>>3];h[i>>3]=+h[(+h[i>>3]<o?i:m)>>3];n=+h[m+8>>3];h[f>>3]=+h[(+h[f>>3]<n?i:m)+8>>3];h[e>>3]=+h[(+h[e>>3]>o?e:m)>>3];h[g>>3]=+h[(+h[g>>3]>n?e:m)+8>>3];b=b+1|0}c[a>>2]=c[i>>2];c[a+4>>2]=c[i+4>>2];c[a+8>>2]=c[i+8>>2];c[a+12>>2]=c[i+12>>2];c[a+16>>2]=c[i+16>>2];c[a+20>>2]=c[i+20>>2];c[a+24>>2]=c[i+24>>2];c[a+28>>2]=c[i+28>>2];l=k;return}function kM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+64|0;g=d+32|0;e=d;f=c[a+16>>2]|0;a=f+16|0;f=c[f+116>>2]&1;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];c[g+16>>2]=c[a+16>>2];c[g+20>>2]=c[a+20>>2];c[g+24>>2]=c[a+24>>2];c[g+28>>2]=c[a+28>>2];lM(e,g,b,f);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=c[e+20>>2];c[a+24>>2]=c[e+24>>2];c[a+28>>2]=c[e+28>>2];l=d;return}function lM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0,k=0.0,l=0.0,m=0.0;g=+h[d+56>>3];l=+h[d+64>>3];j=e<<24>>24==0;k=+h[d+24>>3];i=+h[d+32>>3];m=(j?k:i)*.5;f=g-m;g=m+g;if(f<+h[b>>3])h[b>>3]=f;e=b+16|0;if(g>+h[e>>3])h[e>>3]=g;g=(j?i:k)*.5;f=l-g;g=g+l;e=b+8|0;if(f<+h[e>>3])h[e>>3]=f;e=b+24|0;if(g>+h[e>>3])h[e>>3]=g;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function mM(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0;L=l;l=l+448|0;H=L+416|0;t=L+384|0;u=L+304|0;K=L+256|0;G=L+192|0;B=L+144|0;C=L+96|0;d=L+400|0;e=L+368|0;f=L+352|0;g=L+336|0;v=L+288|0;w=L+224|0;x=L+160|0;y=L+112|0;z=L+64|0;A=L+32|0;I=L;J=b+16|0;if((ay(b)|0)==0?(c[(c[J>>2]|0)+180>>2]|0)==0:0){nM(d,0.0,0.0);c[K>>2]=c[d>>2];c[K+4>>2]=c[d+4>>2];c[K+8>>2]=c[d+8>>2];c[K+12>>2]=c[d+12>>2];K=K+16|0;nM(e,0.0,0.0);c[K>>2]=c[e>>2];c[K+4>>2]=c[e+4>>2];c[K+8>>2]=c[e+8>>2];c[K+12>>2]=c[e+12>>2]}else{nM(f,2147483647.0,2147483647.0);c[K>>2]=c[f>>2];c[K+4>>2]=c[f+4>>2];c[K+8>>2]=c[f+8>>2];c[K+12>>2]=c[f+12>>2];F=K+16|0;nM(g,-2147483647.0,-2147483647.0);c[F>>2]=c[g>>2];c[F+4>>2]=c[g+4>>2];c[F+8>>2]=c[g+8>>2];c[F+12>>2]=c[g+12>>2];o=C+8|0;p=u+16|0;D=K+8|0;q=u+8|0;E=K+24|0;r=u+24|0;s=B+8|0;n=Sy(b)|0;while(1){if(!n)break;WL(B,n);d=n+16|0;m=c[d>>2]|0;h[C>>3]=(+h[m+96>>3]+ +h[m+88>>3])*.5;h[o>>3]=+h[m+80>>3]*.5;c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[H>>2]=c[C>>2];c[H+4>>2]=c[C+4>>2];c[H+8>>2]=c[C+8>>2];c[H+12>>2]=c[C+12>>2];oM(u,t,H);c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[H>>2]=c[C>>2];c[H+4>>2]=c[C+4>>2];c[H+8>>2]=c[C+8>>2];c[H+12>>2]=c[C+12>>2];pM(v,t,H);c[p>>2]=c[v>>2];c[p+4>>2]=c[v+4>>2];c[p+8>>2]=c[v+8>>2];c[p+12>>2]=c[v+12>>2];h[K>>3]=+h[(+h[K>>3]<+h[u>>3]?K:u)>>3];h[D>>3]=+h[(+h[D>>3]<+h[q>>3]?K:u)+8>>3];h[F>>3]=+h[(+h[F>>3]>+h[p>>3]?K:u)+16>>3];h[E>>3]=+h[(+h[E>>3]>+h[r>>3]?K:u)+24>>3];d=c[(c[d>>2]|0)+108>>2]|0;if(d|0?a[d+81>>0]|0:0){m=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(w,H,d,m);c[K>>2]=c[w>>2];c[K+4>>2]=c[w+4>>2];c[K+8>>2]=c[w+8>>2];c[K+12>>2]=c[w+12>>2];c[K+16>>2]=c[w+16>>2];c[K+20>>2]=c[w+20>>2];c[K+24>>2]=c[w+24>>2];c[K+28>>2]=c[w+28>>2]}m=Ex(b,n)|0;while(1){if(!m)break;k=m+16|0;d=c[k>>2]|0;j=d+8|0;e=c[j>>2]|0;if(e|0){i=0;while(1){if((i|0)<(c[e+4>>2]|0))g=0;else break;while(1){f=c[e>>2]|0;if((g|0)>=(c[f+(i*48|0)+4>>2]|0))break;e=(c[f+(i*48|0)>>2]|0)+(g<<4)|0;c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];N=+h[B>>3];h[K>>3]=+h[(+h[K>>3]<N?K:B)>>3];M=+h[s>>3];h[D>>3]=+h[(+h[D>>3]<M?K:B)+8>>3];h[F>>3]=+h[(+h[F>>3]>N?F:B)>>3];h[E>>3]=+h[(+h[E>>3]>M?F:B)+8>>3];g=g+1|0;e=c[j>>2]|0}i=i+1|0}e=c[d+96>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(x,H,e,d);c[K>>2]=c[x>>2];c[K+4>>2]=c[x+4>>2];c[K+8>>2]=c[x+8>>2];c[K+12>>2]=c[x+12>>2];c[K+16>>2]=c[x+16>>2];c[K+20>>2]=c[x+20>>2];c[K+24>>2]=c[x+24>>2];c[K+28>>2]=c[x+28>>2];d=c[k>>2]|0}e=c[d+100>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(y,H,e,d);c[K>>2]=c[y>>2];c[K+4>>2]=c[y+4>>2];c[K+8>>2]=c[y+8>>2];c[K+12>>2]=c[y+12>>2];c[K+16>>2]=c[y+16>>2];c[K+20>>2]=c[y+20>>2];c[K+24>>2]=c[y+24>>2];c[K+28>>2]=c[y+28>>2];d=c[k>>2]|0}e=c[d+104>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(z,H,e,d);c[K>>2]=c[z>>2];c[K+4>>2]=c[z+4>>2];c[K+8>>2]=c[z+8>>2];c[K+12>>2]=c[z+12>>2];c[K+16>>2]=c[z+16>>2];c[K+20>>2]=c[z+20>>2];c[K+24>>2]=c[z+24>>2];c[K+28>>2]=c[z+28>>2];d=c[k>>2]|0}d=c[d+108>>2]|0;if(d|0?a[d+81>>0]|0:0){k=c[(c[J>>2]|0)+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(A,H,d,k);c[K>>2]=c[A>>2];c[K+4>>2]=c[A+4>>2];c[K+8>>2]=c[A+8>>2];c[K+12>>2]=c[A+12>>2];c[K+16>>2]=c[A+16>>2];c[K+20>>2]=c[A+20>>2];c[K+24>>2]=c[A+24>>2];c[K+28>>2]=c[A+28>>2]}}m=Gx(b,m)|0}n=Ty(b,n)|0}d=c[J>>2]|0;f=c[d+180>>2]|0;g=d+184|0;i=G+8|0;j=G+16|0;k=G+24|0;e=1;while(1){if((e|0)>(f|0))break;P=+h[(c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0)+16>>3];h[G>>3]=P;C=c[(c[(c[g>>2]|0)+(e<<2)>>2]|0)+16>>2]|0;O=+h[C+24>>3];h[i>>3]=O;M=+h[C+32>>3];h[j>>3]=M;N=+h[C+40>>3];h[k>>3]=N;h[K>>3]=+h[(+h[K>>3]<P?K:G)>>3];h[D>>3]=+h[(+h[D>>3]<O?K:G)+8>>3];h[F>>3]=+h[(+h[F>>3]>M?K:G)+16>>3];h[E>>3]=+h[(+h[E>>3]>N?K:G)+24>>3];e=e+1|0}e=c[d+12>>2]|0;if((e|0)!=0?(a[e+81>>0]|0)!=0:0){d=c[d+116>>2]&1;c[H>>2]=c[K>>2];c[H+4>>2]=c[K+4>>2];c[H+8>>2]=c[K+8>>2];c[H+12>>2]=c[K+12>>2];c[H+16>>2]=c[K+16>>2];c[H+20>>2]=c[K+20>>2];c[H+24>>2]=c[K+24>>2];c[H+28>>2]=c[K+28>>2];lM(I,H,e,d);c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];c[K+16>>2]=c[I+16>>2];c[K+20>>2]=c[I+20>>2];c[K+24>>2]=c[I+24>>2];c[K+28>>2]=c[I+28>>2];d=c[J>>2]|0}J=d+16|0;c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];c[J+16>>2]=c[K+16>>2];c[J+20>>2]=c[K+20>>2];c[J+24>>2]=c[K+24>>2];c[J+28>>2]=c[K+28>>2]}l=L;return}function nM(a,b,c){a=a|0;b=+b;c=+c;h[a>>3]=b;h[a+8>>3]=c;return}function oM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[b+8>>3]-+h[c+8>>3];h[a>>3]=+h[b>>3]-+h[c>>3];h[a+8>>3]=d;return}function pM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+h[c+8>>3]+ +h[b+8>>3];h[a>>3]=+h[c>>3]+ +h[b>>3];h[a+8>>3]=d;return}function qM(a){a=a|0;if((c[a+60>>2]|0)==(a|0))a=1;else a=(V$(ry(a)|0,104980,7)|0)==0&1;return a|0}function rM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a:do if(!e)switch(pz(b)|0){case 0:{e=nx(a,0,c,191979)|0;break a}case 1:{e=nx(a,1,c,191979)|0;break a}case 2:{e=nx(a,2,c,191979)|0;break a}default:{e=0;break a}}while(0);rx(b,e,d)|0;return e|0}function sM(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+144|0;g=k;i=tM(d)|0;h=Cw(23488,c[4555]|0)|0;j=vA(d,104988,1)|0;Az(j,134401,280,1)|0;Tw(g,128,k+16|0);e=Sy(d)|0;while(1){if(!e)break;a:do if(!(a[(c[e+16>>2]|0)+118>>0]|0)){f=Ex(d,e)|0;while(1){if(!f)break a;uM(f,j,g,h,i);f=Gx(d,f)|0}}while(0);e=Ty(d,e)|0}Xw(g);yw(h)|0;f=ay(j)|0;e=Sy(j)|0;while(1){if(!e)break;h=Ty(j,e)|0;dz(d,e)|0;e=h}$x(j)|0;if(f|0){j=(c[d+16>>2]|0)+136|0;b[j>>1]=b[j>>1]|1}yw(i)|0;l=k;return f|0}function tM(a){a=a|0;var b=0;b=Cw(23524,c[4555]|0)|0;DM(a,b);return b|0}function uM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+48|0;q=t+32|0;p=t+24|0;s=t+16|0;r=t+8|0;k=t;n=c[b>>2]&3;m=c[((n|0)==3?b:b+48|0)+40>>2]|0;n=c[((n|0)==2?b:b+-48|0)+40>>2]|0;do if(!(a[(c[n+16>>2]|0)+118>>0]|0)){if(!(z$(ry(m)|0,104980,7)|0))o=vM(g,ry(m)|0)|0;else o=0;if(!(z$(ry(n)|0,104980,7)|0))i=vM(g,ry(n)|0)|0;else i=0;h=(o|0)!=0;j=(i|0)!=0;if(h|j){if((o|0)==(i|0)){r=ry(m)|0;s=ry(m)|0;c[k>>2]=r;c[k+4>>2]=s;Pw(0,105003,k)|0;break}g=wM(f,b)|0;if(g|0){xM(b,c[g+16>>2]|0,c[g+20>>2]|0)|0;break}if(!j)if(!(oz(o,n)|0)){zM(f,m,n,xM(b,yM(m,o,e,d)|0,n)|0);break}else{r=ry(n)|0;s=ry(o)|0;c[q>>2]=r;c[q+4>>2]=s;Pw(0,105158,q)|0;break}if(!h)if(!(oz(i,m)|0)){zM(f,m,n,xM(b,m,yM(n,i,e,d)|0)|0);break}else{r=ry(m)|0;s=ry(i)|0;c[p>>2]=r;c[p+4>>2]=s;Pw(0,105121,p)|0;break}if(oz(i,o)|0){q=ry(o)|0;s=ry(i)|0;c[r>>2]=q;c[r+4>>2]=s;Pw(0,105041,r)|0;break}if(!(oz(o,i)|0)){s=yM(m,o,e,d)|0;zM(f,m,n,xM(b,s,yM(n,i,e,d)|0)|0);break}else{q=ry(i)|0;r=ry(o)|0;c[s>>2]=q;c[s+4>>2]=r;Pw(0,105081,s)|0;break}}}while(0);l=t;return}function vM(a,b){a=a|0;b=b|0;a=nb[c[a>>2]&63](a,b,512)|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function wM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[b>>2]&3;c[e>>2]=c[((f|0)==3?b:b+48|0)+40>>2];c[e+4>>2]=c[((f|0)==2?b:b+-48|0)+40>>2];b=nb[c[a>>2]&63](a,e,512)|0;l=d;return b|0}function xM(a,b,c){a=a|0;b=b|0;c=c|0;c=Rx(ez(b)|0,b,c,0,1)|0;Az(c,134378,176,1)|0;Bx(a,c)|0;return c|0}function yM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+112|0;g=k;j=k+4|0;Ww(e,105195)|0;i=c[46551]|0;c[46551]=i+1;c[g>>2]=i;Y0(j,134313,g)|0;Ww(e,j)|0;j=e+4|0;g=c[j>>2]|0;i=e+8|0;if(g>>>0>=(c[i>>2]|0)>>>0){Uw(e,1)|0;g=c[j>>2]|0}c[j>>2]=g+1;a[g>>0]=58;Ww(e,ry(d)|0)|0;h=fz(d)|0;g=c[j>>2]|0;if(g>>>0>=(c[i>>2]|0)>>>0){Uw(e,1)|0;g=c[j>>2]|0}a[g>>0]=0;e=c[e>>2]|0;c[j>>2]=e;j=az(h,e,1)|0;Az(j,134365,304,1)|0;a[(c[j+16>>2]|0)+118>>0]=1;Xy(d,j,1)|0;Xy(f,b,1)|0;f=ez(j)|0;c[46384]=rM(f,j,105198,191979,c[46384]|0)|0;f=ez(j)|0;c[46387]=rM(f,j,138e3,131253,c[46387]|0)|0;f=ez(j)|0;c[46377]=rM(f,j,105204,105210,c[46377]|0)|0;l=k;return j|0}function zM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f;n=g+8|0;c[n>>2]=b;m=g+12|0;c[m>>2]=d;o=c[e>>2]&3;i=e+48|0;j=g+16|0;c[j>>2]=c[((o|0)==3?e:i)+40>>2];k=e+-48|0;h=g+20|0;c[h>>2]=c[((o|0)==2?e:k)+40>>2];nb[c[a>>2]&63](a,g,1)|0;c[n>>2]=d;c[m>>2]=b;d=c[e>>2]&3;c[j>>2]=c[((d|0)==2?e:k)+40>>2];c[h>>2]=c[((d|0)==3?e:i)+40>>2];nb[c[a>>2]&63](a,g,1)|0;l=f;return}function AM(a,b,d){a=a|0;b=b|0;d=d|0;d=uH(24)|0;c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];return d|0}function BM(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function CM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;e=c[d>>2]|0;if(a>>>0>=e>>>0)if(a>>>0>e>>>0)a=1;else{b=c[b+4>>2]|0;d=c[d+4>>2]|0;return (b>>>0<d>>>0?-1:b>>>0>d>>>0&1)|0}else a=-1;return a|0}function DM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;f=a+16|0;e=1;while(1){a=c[f>>2]|0;if((e|0)>(c[a+180>>2]|0))break;a=c[(c[a+184>>2]|0)+(e<<2)>>2]|0;d=ry(a)|0;if(!(nb[c[b>>2]&63](b,d,512)|0)){i=uH(16)|0;c[i+8>>2]=d;c[i+12>>2]=a;nb[c[b>>2]&63](b,i,1)|0}else{c[g>>2]=d;Pw(0,105214,g)|0}DM(a,b);e=e+1|0}l=h;return}function EM(a,b,c){a=a|0;b=b|0;c=c|0;D_(b);return}function FM(a){a=a|0;var b=0,c=0,d=0;d=vA(a,104988,1)|0;Az(d,134401,280,1)|0;b=Sy(a)|0;while(1){if(!b)break;c=Ex(a,b)|0;while(1){if(!c)break;GM(c,d);c=Gx(a,c)|0}b=Ty(a,b)|0}b=Sy(d)|0;while(1){if(!b)break;c=Ty(d,b)|0;HM(b);dz(a,b)|0;b=c}$x(d)|0;return}function GM(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]&3;f=c[((e|0)==3?b:b+48|0)+40>>2]|0;e=c[((e|0)==2?b:b+-48|0)+40>>2]|0;if(!((a[(c[f+16>>2]|0)+118>>0]|0)==0?!(a[(c[e+16>>2]|0)+118>>0]|0):0)){f=IM(f,d)|0;e=xM(b,f,IM(e,d)|0)|0;f=c[b+16>>2]|0;d=f+8|0;e=c[e+16>>2]|0;c[e+8>>2]=c[d>>2];c[d>>2]=0;d=f+96|0;c[e+96>>2]=c[d>>2];c[d>>2]=0;d=f+108|0;c[e+108>>2]=c[d>>2];c[d>>2]=0;d=f+100|0;c[e+100>>2]=c[d>>2];c[d>>2]=0;f=f+104|0;c[e+104>>2]=c[f>>2];c[f>>2]=0;JM(b)}return}function HM(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;b=c[e>>2]|0;d=c[b+132>>2]|0;if(d){D_(d);b=c[e>>2]|0}d=c[b+8>>2]|0;if(d){tb[c[(c[d+4>>2]|0)+4>>2]&127](a);b=c[e>>2]|0}nH(c[b+104>>2]|0);nH(c[(c[e>>2]|0)+108>>2]|0);Cz(a,134365)|0;return}function IM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=ez(b)|0;a:do if(a[(c[b+16>>2]|0)+118>>0]|0){Xy(d,b,1)|0;b=A$(ry(b)|0,58)|0;if(!b)qa(108182,104635,1225,105266);d=b+1|0;b=az(f,d,0)|0;if(!b){b=az(f,d,1)|0;Az(b,134365,304,1)|0;d=sx(f,1,0)|0;while(1){if(!d)break a;g=yx(b,d)|0;e=c[d+12>>2]|0;if((g|0)!=(e|0))rx(b,d,e)|0;d=sx(f,1,d)|0}}}while(0);return b|0}function JM(a){a=a|0;var b=0;b=a+16|0;D_(c[(c[b>>2]|0)+144>>2]|0);KM(a);nH(c[(c[b>>2]|0)+96>>2]|0);nH(c[(c[b>>2]|0)+108>>2]|0);nH(c[(c[b>>2]|0)+100>>2]|0);nH(c[(c[b>>2]|0)+104>>2]|0);Cz(a,134378)|0;return}function KM(a){a=a|0;var b=0,d=0,e=0;e=a+16|0;a=c[e>>2]|0;b=c[a+8>>2]|0;if(b){d=0;while(1){a=c[b>>2]|0;if((d|0)>=(c[b+4>>2]|0))break;D_(c[a+(d*48|0)>>2]|0);d=d+1|0;b=c[(c[e>>2]|0)+8>>2]|0}D_(a);D_(c[(c[e>>2]|0)+8>>2]|0);a=c[e>>2]|0}c[a+8>>2]=0;return}function LM(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=nx(a,b,c,0)|0;if(!e)e=nx(a,b,c,d)|0;return e|0}function MM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;i=o;h=o+8|0;j=o+16|0;m=A$(b,59)|0;n=d+4|0;e=c[n>>2]|0;k=d+8|0;if(e>>>0>=(c[k>>2]|0)>>>0){Uw(d,1)|0;e=c[n>>2]|0}c[n>>2]=e+1;a[e>>0]=38;if(((m|0)!=0?(f=m-b|0,(f+-2|0)>>>0<=6):0)?(U0(j,b,f)|0,a[j+f>>0]=0,c[h>>2]=j,g=e2(h,23560,252,8,94)|0,(g|0)!=0):0){c[i>>2]=c[g+4>>2];Y0(j,134313,i)|0;b=c[n>>2]|0;if(b>>>0>=(c[k>>2]|0)>>>0){Uw(d,1)|0;b=c[n>>2]|0}c[n>>2]=b+1;a[b>>0]=35;Ww(d,j)|0;b=c[n>>2]|0;if(b>>>0>=(c[k>>2]|0)>>>0){Uw(d,1)|0;b=c[n>>2]|0}c[n>>2]=b+1;a[b>>0]=59;b=m+1|0}l=o;return b|0}function NM(a,b){a=a|0;b=b|0;return b$(c[a>>2]|0,c[b>>2]|0)|0}function OM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+1072|0;k=q+8|0;j=q;i=q+16|0;o=q+24|0;c[i>>2]=b;if((c[46552]|0)!=(d|0)){c[46552]=d;a[191878]=0}Tw(o,1024,q+40|0);p=o+4|0;n=o+8|0;while(1){f=b+1|0;c[i>>2]=f;e=a[b>>0]|0;if(!(e<<24>>24))break;do if((e&255)<192)if(e<<24>>24==38){f=QM(i)|0;if(!f)e=38;else{if(f>>>0<127){e=f&255;break}b=c[p>>2]|0;e=b>>>0>=(c[n>>2]|0)>>>0;if(f>>>0<2047){if(e){Uw(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>6|192;e=(f&63|128)&255;break}if(e){Uw(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>12|224;b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){Uw(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=f>>>6&63|128;e=(f&63|128)&255}}else{h=0;m=9}else if((e&255)>=224)if((e&255)>=240)if((e&255)<248){h=3;m=9}else{if(!(a[191878]|0)){c[j>>2]=ry(d)|0;Pw(0,106681,j)|0;a[191878]=1}h=-1;e=PM(e,o)|0;m=9}else{h=2;m=9}else{h=1;m=9}while(0);do if((m|0)==9){m=0;g=0;while(1){if((g|0)>=(h|0)){m=34;break}if((a[f>>0]&-64)<<24>>24!=-128)break;b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){Uw(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=e;g=g+1|0;e=a[f>>0]|0;f=f+1|0}if((m|0)==34){m=0;c[i>>2]=f;break}c[i>>2]=f;if(!(a[191878]|0)){g=ry(d)|0;c[k>>2]=h+1;c[k+4>>2]=g;Pw(0,106802,k)|0;a[191878]=1}e=PM(e,o)|0}while(0);b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){Uw(o,1)|0;b=c[p>>2]|0}c[p>>2]=b+1;a[b>>0]=e;b=c[i>>2]|0}b=c[p>>2]|0;if(b>>>0>=(c[n>>2]|0)>>>0){Uw(o,1)|0;b=c[p>>2]|0}a[b>>0]=0;n=c[o>>2]|0;c[p>>2]=n;p=n1(n)|0;Xw(o);l=q;return p|0}function PM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;g=j;a[g>>0]=b;a[g+1>>0]=0;g=RM(g)|0;h=d+4|0;i=d+8|0;e=W_(g)|0;f=g;while(1){if((e|0)<=1)break;b=c[h>>2]|0;if(b>>>0>=(c[i>>2]|0)>>>0){Uw(d,1)|0;b=c[h>>2]|0}k=a[f>>0]|0;c[h>>2]=b+1;a[b>>0]=k;e=e+-1|0;f=f+1|0}k=a[f>>0]|0;D_(g);l=j;return k|0}function QM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;d=i+8|0;e=c[b>>2]|0;a:do if((a[e>>0]|0)!=35){c[h>>2]=d;g=0;b:while(1){if((g|0)>=8){d=0;break a}f=a[e+g>>0]|0;switch(f<<24>>24){case 0:{d=0;break a}case 59:break b;default:{}}a[d>>0]=f;d=d+1|0;g=g+1|0}a[d>>0]=0;d=e2(h,23560,252,8,94)|0;if(!d)d=0;else{e=e+(g+1)|0;d=c[d+4>>2]|0}}else{h=a[e+1>>0]|0;d=h&255;c:do if((h|32)<<24>>24==120){h=0;g=2;while(1){if((g|0)>=8){f=h;break c}f=a[e+g>>0]|0;d=f&255;if((f+-65&255)>=6)if((f+-97&255)>=6)if((f+-48&255)<10)f=-48;else{f=h;break c}else f=-87;else f=-55;d=f+d|0;h=d+(h<<4)|0;g=g+1|0}}else{f=0;g=1;while(1){if((g|0)>=8)break c;h=a[e+g>>0]|0;d=h&255;if((h+-48&255)>=10)break c;f=(f*10|0)+-48+d|0;g=g+1|0}}while(0);d=(d|0)==59;e=d?e+(g+1)|0:e;d=d?f:0}while(0);c[b>>2]=e;l=i;return d|0}function RM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+1056|0;g=k;i=k+8|0;c[g>>2]=b;Tw(i,1024,k+24|0);j=i+4|0;h=i+8|0;while(1){c[g>>2]=b+1;d=a[b>>0]|0;if(!(d<<24>>24))break;b=d&255;if(d<<24>>24==38){b=QM(g)|0;if(!b){b=38;f=6}else f=5}else f=5;do if((f|0)==5){f=0;if(b>>>0<127)f=6;else{d=c[j>>2]|0;e=d>>>0>=(c[h>>2]|0)>>>0;if(b>>>0<2047){if(e){Uw(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>6|192;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){Uw(i,1)|0;d=c[j>>2]|0}b=b&63|128;break}if(e){Uw(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>12|224;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){Uw(i,1)|0;d=c[j>>2]|0}c[j>>2]=d+1;a[d>>0]=b>>>6&63|128;d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){Uw(i,1)|0;d=c[j>>2]|0}b=b&63|128}}while(0);if((f|0)==6){d=c[j>>2]|0;if(d>>>0>=(c[h>>2]|0)>>>0){Uw(i,1)|0;d=c[j>>2]|0}}c[j>>2]=d+1;a[d>>0]=b;b=c[g>>2]|0}b=c[j>>2]|0;if(b>>>0>=(c[h>>2]|0)>>>0){Uw(i,1)|0;b=c[j>>2]|0}a[b>>0]=0;h=c[i>>2]|0;c[j>>2]=h;j=n1(h)|0;Xw(i);l=k;return j|0}function SM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+1040|0;g=i;Tw(g,1024,i+16|0);h=g+4|0;f=g+8|0;while(1){d=b+1|0;e=a[b>>0]|0;if(!(e<<24>>24))break;if((e&255)<127){b=c[h>>2]|0;if(b>>>0>=(c[f>>2]|0)>>>0){Uw(g,1)|0;b=c[h>>2]|0}c[h>>2]=b+1;a[b>>0]=e;b=d;continue}else{e=a[d>>0]&63|e<<6&255;d=c[h>>2]|0;if(d>>>0>=(c[f>>2]|0)>>>0){Uw(g,1)|0;d=c[h>>2]|0}c[h>>2]=d+1;a[d>>0]=e;b=b+2|0;continue}}b=c[h>>2]|0;if(b>>>0>=(c[f>>2]|0)>>>0){Uw(g,1)|0;b=c[h>>2]|0}a[b>>0]=0;f=c[g>>2]|0;c[h>>2]=f;h=n1(f)|0;Xw(g);l=i;return h|0}function TM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+80|0;e=n+48|0;d=n+32|0;f=n+64|0;g=n+16|0;i=n;j=b+16|0;k=a+16|0;m=c[k>>2]|0;if(((+h[j>>3]>=+h[m+48>>3]?+h[m+64>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=+h[m+56>>3]:0)?+h[m+72>>3]>=+h[b+8>>3]:0){m=m+16|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];UM(g,d,e);c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];oM(i,d,e);c[f>>2]=a;c[f+4>>2]=0;d=c[(c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0;c[e>>2]=c[i>>2];c[e+4>>2]=c[i+4>>2];c[e+8>>2]=c[i+8>>2];c[e+12>>2]=c[i+12>>2];d=lb[d&127](f,e)|0}else d=0;l=n;return d|0}function UM(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=(+h[c+8>>3]+ +h[b+8>>3])*.5;h[a>>3]=(+h[c>>3]+ +h[b>>3])*.5;h[a+8>>3]=d;return}function VM(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,g=0,i=0.0,j=0,k=0,m=0,n=0;e=l;l=l+80|0;j=e+64|0;k=e+48|0;m=e;n=e+32|0;g=e+16|0;h[m>>3]=+h[a+24>>3]*.5;h[m+8>>3]=+h[a+32>>3]*.5;a=a+56|0;c[k>>2]=c[a>>2];c[k+4>>2]=c[a+4>>2];c[k+8>>2]=c[a+8>>2];c[k+12>>2]=c[a+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];oM(n,k,j);i=+h[n>>3];f=+h[n+8>>3];c[k>>2]=c[a>>2];c[k+4>>2]=c[a+4>>2];c[k+8>>2]=c[a+8>>2];c[k+12>>2]=c[a+12>>2];c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];pM(g,k,j);d=+h[g+8>>3];if((+h[b+16>>3]>=i?+h[g>>3]>=+h[b>>3]:0)?+h[b+24>>3]>=f:0)a=d>=+h[b+8>>3]&1;else a=0;l=e;return a|0}function WM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+80|0;k=n+48|0;j=n;h=a+16|0;a=c[h>>2]|0;i=c[a+8>>2]|0;a:do if((i|0)!=0?(g=i+8|0,c[j>>2]=c[g>>2],c[j+4>>2]=c[g+4>>2],c[j+8>>2]=c[g+8>>2],c[j+12>>2]=c[g+12>>2],c[j+16>>2]=c[g+16>>2],c[j+20>>2]=c[g+20>>2],c[j+24>>2]=c[g+24>>2],c[j+28>>2]=c[g+28>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(XM(j,k)|0)!=0):0){d=i+4|0;a=0;while(1){if((a|0)>=(c[d>>2]|0))break;e=j;f=(c[i>>2]|0)+(a*48|0)|0;g=e+48|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[k+16>>2]=c[b+16>>2];c[k+20>>2]=c[b+20>>2];c[k+24>>2]=c[b+24>>2];c[k+28>>2]=c[b+28>>2];if(!((YM(j,k)|0)<<24>>24))a=a+1|0;else{a=1;break a}}a=c[h>>2]|0;m=7}else m=7;while(0);do if((m|0)==7){a=c[a+96>>2]|0;if(a|0?(c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(VM(a,k)|0)<<24>>24):0){a=1;break}a=0}while(0);l=n;return a|0}function XM(a,b){a=a|0;b=b|0;if((+h[a+16>>3]>=+h[b>>3]?+h[b+16>>3]>=+h[a>>3]:0)?+h[a+24>>3]>=+h[b+8>>3]:0)a=+h[b+24>>3]>=+h[a+8>>3]&1;else a=0;return a|0}function YM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+96|0;k=n+64|0;j=n+48|0;i=n+32|0;f=n+16|0;g=n;m=a+4|0;d=c[m>>2]|0;if(!d)qa(106911,104635,1637,106919);e=c[a>>2]|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];e=1;while(1){if((e|0)>=(d|0)){h=7;break}d=(c[a>>2]|0)+(e<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];c[k+16>>2]=c[b+16>>2];c[k+20>>2]=c[b+20>>2];c[k+24>>2]=c[b+24>>2];c[k+28>>2]=c[b+28>>2];if((VG(i,j,k)|0)!=-1){d=1;break};c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];e=e+1|0;d=c[m>>2]|0}do if((h|0)==7){d=c[a+8>>2]|0;if(d|0?(g=a+16|0,h=c[a>>2]|0,c[i>>2]=c[g>>2],c[i+4>>2]=c[g+4>>2],c[i+8>>2]=c[g+8>>2],c[i+12>>2]=c[g+12>>2],c[j>>2]=c[h>>2],c[j+4>>2]=c[h+4>>2],c[j+8>>2]=c[h+8>>2],c[j+12>>2]=c[h+12>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(ZM(i,j,d,k)|0)<<24>>24):0){d=1;break}d=c[a+12>>2]|0;if(d|0?(h=a+32|0,m=(c[a>>2]|0)+((c[m>>2]|0)+-1<<4)|0,c[i>>2]=c[h>>2],c[i+4>>2]=c[h+4>>2],c[i+8>>2]=c[h+8>>2],c[i+12>>2]=c[h+12>>2],c[j>>2]=c[m>>2],c[j+4>>2]=c[m+4>>2],c[j+8>>2]=c[m+8>>2],c[j+12>>2]=c[m+12>>2],c[k>>2]=c[b>>2],c[k+4>>2]=c[b+4>>2],c[k+8>>2]=c[b+8>>2],c[k+12>>2]=c[b+12>>2],c[k+16>>2]=c[b+16>>2],c[k+20>>2]=c[b+20>>2],c[k+24>>2]=c[b+24>>2],c[k+28>>2]=c[b+28>>2],(ZM(i,j,d,k)|0)<<24>>24):0){d=1;break}d=0}while(0);l=n;return d|0}function ZM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0.0;m=l;l=l+160|0;g=m+144|0;f=m+128|0;n=m+96|0;i=m+64|0;j=m+32|0;k=m;o=+h[e+16>>3];c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];JE(n,f,g,1.0,d);if(((o>=+h[n>>3]?(c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],JE(i,f,g,1.0,d),+h[i+16>>3]>=+h[e>>3]):0)?(o=+h[e+24>>3],c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],JE(j,f,g,1.0,d),o>=+h[j+8>>3]):0)?(c[f>>2]=c[a>>2],c[f+4>>2]=c[a+4>>2],c[f+8>>2]=c[a+8>>2],c[f+12>>2]=c[a+12>>2],c[g>>2]=c[b>>2],c[g+4>>2]=c[b+4>>2],c[g+8>>2]=c[b+8>>2],c[g+12>>2]=c[b+12>>2],JE(k,f,g,1.0,d),+h[k+24>>3]>=+h[e+8>>3]):0)f=1;else f=0;l=m;return f|0}function _M(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;a:do if((b|0)!=0?(e=a[b>>0]|0,e<<24>>24!=0):0){do switch(e<<24>>24|0){case 48:{d=2;break a}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{d=10;break a}case 67:case 99:{e=b+1|0;if(!(O$(e,106934)|0)){d=4;break a}if(!(O$(e,106940)|0)){d=12;break a}break}case 70:case 102:{if(!(O$(b+1|0,106948)|0)){d=2;break a}break}case 76:case 108:{if(!(O$(b+1|0,106953)|0)){d=2;break a}break}case 78:case 110:{e=b+1|0;if(!(O$(e,106957)|0)){d=0;break a}if(!(O$(e,106961)|0)){d=2;break a}break}case 79:case 111:{if(!(O$(b+1|0,106963)|0)){d=8;break a}break}case 80:case 112:{if(!(O$(b+1|0,106968)|0)){d=6;break a}break}case 83:case 115:{if(!(O$(b+1|0,106976)|0)){d=10;break a}break}case 84:case 116:{if(!(O$(b+1|0,106982)|0)){d=10;break a}break}case 89:case 121:{if(!(O$(b+1|0,106986)|0)){d=10;break a}break}default:{}}while(0);c[f>>2]=b;Pw(0,106989,f)|0}while(0);l=g;return d|0}function $M(d,f){d=d|0;f=f|0;var g=0;g=xx(d,107030)|0;if(g)if(!(a[g>>0]|0))f=0;else f=_M(g,f)|0;d=(c[d+16>>2]|0)+136|0;b[d>>1]=f|e[d>>1];return}function aN(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0;v=l;l=l+32|0;p=v+16|0;r=v;t=e&1;u=e&2;a:do if((c|0)==2){s=+h[a+16>>3];f=+h[a>>3];j=+h[a+24>>3];i=+h[a+8>>3];f=f-(s-f);h[p>>3]=f;h[r>>3]=s;i=i-(j-i);h[p+8>>3]=i;h[r+8>>3]=j}else{g=+h[a>>3];h[r>>3]=g;h[p>>3]=g;j=+h[a+8>>3];m=r+8|0;h[m>>3]=j;n=p+8|0;h[n>>3]=j;e=0;f=g;i=j;while(1){if((e|0)>=(c|0)){s=g;break a}w=a+(e<<4)|0;q=+h[w>>3];k=+h[(q<f?w:p)>>3];h[p>>3]=k;s=+h[a+(e<<4)+8>>3];o=+h[(s<i?w:p)+8>>3];h[n>>3]=o;q=+h[(q>g?w:r)>>3];h[r>>3]=q;s=+h[(s>j?w:r)+8>>3];h[m>>3]=s;e=e+1|0;f=k;i=o;g=q;j=s}}while(0);g=(s-f)*.5;q=g+f;o=(j-i)*.5;k=o+i;if(!t){f=j-k;j=d;i=+F(+j);j=+E(+j);if(!u){g=i*f-k;f=-k-o*i}else{f=i*f;g=k-f;f=f+k}h[b+8>>3]=g;h[b+24>>3]=f;d=j*(s-q);h[b>>3]=q-d;h[b+16>>3]=d+q}else{d=+C(+(o*o+g*g));h[b+8>>3]=u|0?k:-k;h[b>>3]=q;h[b+16>>3]=d*.25;h[b+24>>3]=d}l=v;return}function bN(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0;e=a+16|0;f=c[e>>2]|0;if(!(b<<24>>24)){d=+h[f+32>>3]*36.0;h[f+88>>3]=d;a=f+40|0}else{d=+h[f+40>>3]*36.0;h[f+88>>3]=d;a=f+32|0}h[f+96>>3]=d;h[(c[e>>2]|0)+80>>3]=+h[a>>3]*72.0;return}function cN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0;y=l;l=l+16|0;j=y+8|0;x=4;w=C_(40)|0;c[w>>2]=0;s=y;o=0;e=$(29,b|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;a:do if((g|0)!=1){o=0;v=$(23,e<<3|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){e=E3(c[f>>2]|0,w|0,x|0)|0;if(!e)bb(f|0,p|0);z=p}else e=-1;if((e|0)!=1){if(!(a[191874]|0))t=0;else{o=0;e=_(3)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){n=0;k=0;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74;break}t=e}o=0;e=aa(95,b|0,107038)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[46553]=0;b:do if(e|0?(i=a[e>>0]|0,i<<24>>24):0){h=e;f=i;g=0;while(1){i=h+1|0;if(!(f<<24>>24))break b;switch(f<<24>>24|0){case 99:{e=8;u=16;break}case 105:{e=18;u=16;break}case 109:{e=1;u=16;break}case 114:{e=4;u=16;break}case 115:{e=2;u=16;break}default:e=g}if((u|0)==16){u=0;e=g|e;c[46553]=e}h=i;f=a[i>>0]|0;g=e}}while(0);if(d|0){o=0;ca(20,0,107042,j|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){n=0;k=t;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74;break}}o=0;r=aa(96,b|0,0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){m=c[r+16>>2]|0;if(c[46553]&2|0){o=0;ja(26,c[15686]|0,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break}}o=0;g=$(25,b|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){n=0;while(1){if(!g)break;o=0;e=aa(97,b|0,g|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=E3(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}i=n;while(1){if(!e)break;if(!((c[46363]|0)==2?(c[(c[e+16>>2]|0)+8>>2]|0)!=0:0))u=32;c:do if((u|0)==32){u=0;do if(a[191874]|0){k=c[e>>2]&3;j=(c[c[((k|0)==3?e:e+48|0)+40>>2]>>2]|0)>>>4;k=(c[c[((k|0)==2?e:e+-48|0)+40>>2]>>2]|0)>>>4;if(j>>>0>k>>>0){o=0;f=ca(31,t|0,k|0,j|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){d=E3(c[h>>2]|0,w|0,x|0)|0;if(!d)bb(h|0,p|0);z=p}else d=-1;if((d|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}if(f|0)break c;o=0;ka(64,t|0,k|0,j|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){h=E3(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}break}else{o=0;f=ca(31,t|0,j|0,k|0)|0;h=o;o=0;if((h|0)!=0&(p|0)!=0){d=E3(c[h>>2]|0,w|0,x|0)|0;if(!d)bb(h|0,p|0);z=p}else d=-1;if((d|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}if(f|0)break c;o=0;ka(64,t|0,j|0,k|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){h=E3(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}break}}while(0);c[v+(i<<3)+4>>2]=e;o=0;d=$(30,e|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=E3(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}c[v+(i<<3)>>2]=d;i=i+1|0}while(0);o=0;e=aa(98,b|0,e|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){h=E3(c[f>>2]|0,w|0,x|0)|0;if(!h)bb(f|0,p|0);z=p}else h=-1;if((h|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}}o=0;g=aa(84,b|0,g|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74;break a}n=i}o=0;j=$(31,n<<3|0)|0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){o=0;ma(28,v|0,n|0,8,99);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){g=c[m>>2]|0;o=0;ia(107,g+2|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){i=c[m+16>>2]|0;d=i+(g*40|0)|0;i=i+((g+1|0)*40|0)|0;q=c[15686]|0;h=0;while(1){if((h|0)>=(n|0))break;if((h|0)>0?c[46553]&16|0:0){o=0;ja(26,q|0,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}e=c[v+(h<<3)+4>>2]|0;k=c[e>>2]&3;g=c[(c[(c[((k|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;e=c[(c[(c[((k|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if((g|0)==(e|0)){o=0;ma(29,m|0,g|0,i|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}else{o=0;ka(65,m|0,e|0,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}o=0;ka(65,m|0,g|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}}o=0;e=ca(32,m|0,i|0,d|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}if(e|0){k=t;m=j;i=r;d=v;h=v;break a}e=j+(h<<3)|0;o=0;ma(30,s|0,m|0,d|0,i|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}g=s;k=c[g+4>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=k;o=0;ia(108,m|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74;break a}h=h+1|0}o=0;ha(8);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){o=0;e=$(32,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[r+20>>2]=e;o=0;e=$(33,r|0)|0;f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)!=1){c[r+24>>2]=e;o=0;ka(66,n|0,j|0,r|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){w=D3(186216,1,w|0,x|0)|0;x=z;o=0;e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)!=1){k=t;m=j;i=r;d=v;h=v;e=0;g=q;u=74}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=q;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=0;u=74}}else{k=t;m=j;i=r;d=v;h=v;e=z;g=0;u=74}}else{k=t;m=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=r;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=t;m=0;j=0;i=0;d=v;h=v;e=z;g=0;u=74}}else{n=0;k=0;m=0;j=0;i=0;d=0;h=v;e=z;g=0;u=74}}else{n=0;k=0;m=0;j=0;i=0;d=0;h=0;e=z;g=0;u=74}while(0);d:while(1){if((u|0)==74){u=0;if(e|0){q=g;continue}o=0;ia(109,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){A=g;f=h;q=d;r=i;s=j;t=m;v=k;u=n;e=z;g=A;h=f;d=q;i=r;j=s;m=t;k=v;n=u;u=74;continue}if(c[46553]&4|0){o=0;na(8,g|0,i|0,n|0,m|0,d|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=g;q=h;r=d;s=i;t=j;v=m;A=k;u=n;e=z;g=f;h=q;d=r;i=s;j=t;m=v;k=A;n=u;u=74;continue}}o=0;oa(10,b|0,i|0,n|0,m|0,d|0,0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){f=g;q=h;r=d;s=i;t=j;v=m;A=k;u=n;e=z;g=f;h=q;d=r;i=s;j=t;m=v;k=A;n=u;u=74;continue}q=g}if(!(a[191874]|0))e=0;else{o=0;ia(110,k|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}e=0}while(1){if((e|0)>=(n|0))break;o=0;ia(103,c[m+(e<<3)+4>>2]|0);f=o;o=0;if((f|0)!=0&(p|0)!=0){g=E3(c[f>>2]|0,w|0,x|0)|0;if(!g)bb(f|0,p|0);z=p}else g=-1;if((g|0)==1){e=z;g=q;u=74;continue d}e=e+1|0}o=0;ia(103,j|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}o=0;ia(111,i|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74;continue}o=0;ia(103,h|0);e=o;o=0;if((e|0)!=0&(p|0)!=0){f=E3(c[e>>2]|0,w|0,x|0)|0;if(!f)bb(e|0,p|0);z=p}else f=-1;if((f|0)==1){e=z;g=q;u=74}else break}D_(w|0);l=y;return}function dN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+64|0;p=q+32|0;o=q+16|0;j=q;k=q+48|0;D1(107909,a)|0;D1(107920,a)|0;m=b+16|0;n=j+8|0;i=k+4|0;g=0;while(1){if((g|0)>=(c[b>>2]|0))break;d=c[m>>2]|0;e=c[d+(g*40|0)+20>>2]|0;f=c[d+(g*40|0)+24>>2]|0;if((e|0)==(f|0)){YN(j,e);d=~~+h[j>>3];e=~~+h[n>>3]}else{_N(k,(c[e>>2]&1|0)==0?e:f,d+(g*40|0)|0);d=c[k>>2]|0;e=c[i>>2]|0}c[o>>2]=g;c[o+4>>2]=d;c[o+8>>2]=e;g1(a,107940,o)|0;g=g+1|0}f=b+4|0;e=b+20|0;d=0;while(1){if((d|0)>=(c[f>>2]|0))break;o=c[e>>2]|0;b=c[o+(d*24|0)+16>>2]|0;r=+h[o+(d*24|0)>>3];c[p>>2]=c[o+(d*24|0)+12>>2];c[p+4>>2]=b;h[p+8>>3]=r;g1(a,107960,p)|0;d=d+1|0}D1(107982,a)|0;l=q;return}function eN(a){a=a|0;var b=0.0,d=0.0,e=0,f=0;f=c[a>>2]&3;e=c[(c[((f|0)==3?a:a+48|0)+40>>2]|0)+16>>2]|0;a=c[(c[((f|0)==2?a:a+-48|0)+40>>2]|0)+16>>2]|0;b=+h[e+16>>3]-+h[a+16>>3];d=+h[e+24>>3]-+h[a+24>>3];return ~~(d*d+b*b)|0}function fN(a,b){a=a|0;b=b|0;return (c[a>>2]|0)-(c[b>>2]|0)|0}function gN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;j=n;YN(n+16|0,d);k=d+32|0;m=d+36|0;g=0;while(1){if((g|0)>=(c[k>>2]|0))break;h=c[(c[m>>2]|0)+(g<<2)>>2]|0;do if(!(a[h+36>>0]|0)){i=c[h+20>>2]|0;if((i|0)==(d|0)){WN(j,h,c[h+24>>2]|0);pO(b,f,h,0.0)|0;break}else{WN(j,h,i);pO(b,e,h,0.0)|0;break}}while(0);g=g+1|0}c[b>>2]=(c[b>>2]|0)+2;l=n;return}function hN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;h=k;YN(k+16|0,b);i=b+32|0;j=b+36|0;f=0;while(1){if((f|0)>=(c[i>>2]|0))break;g=c[(c[j>>2]|0)+(f<<2)>>2]|0;e=c[g+20>>2]|0;if((e|0)==(b|0))e=c[g+24>>2]|0;WN(h,g,e);pO(a,d,g,0.0)|0;f=f+1|0}c[a>>2]=(c[a>>2]|0)+1;c[d+24>>2]=b;c[d+20>>2]=b;l=k;return}function iN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+128|0;C=H+64|0;n=H+48|0;D=H+32|0;E=H+16|0;F=H;g=0;i=e;while(1){if(!i)break;g=g+1|0;i=c[i+8>>2]|0}B=uH((g*56|0)+-112|0)|0;c[C+52>>2]=0;c[C+48>>2]=0;A=e+8|0;e=c[A>>2]|0;i=c[e+8>>2]|0;g=c[e+20>>2]|0;if(c[g>>2]&1)g=c[e+24>>2]|0;WN(n,e,g);j=e;q=e;p=0.0;o=+h[n>>3];z=0;m=0.0;x=+h[n+8>>3];while(1){y=i+8|0;if(!(c[y>>2]|0))break;v=XN(j,i)|0;NR(d,v,c[q+12>>2]|0);t=q+36|0;u=i+36|0;if((a[t>>0]|0)==(a[u>>0]|0))if((c[y>>2]|0)==(f|0)){WN(E,i,v);e=E;G=12}else{j=q;e=z;k=x}else{YN(D,v);e=D;G=12}if((G|0)==12){G=0;w=+h[e>>3];k=+h[e+8>>3];e=a[t>>0]|0;s=e<<24>>24==0;r=(q|0)==(c[A>>2]|0);if(s){if(!(a[u>>0]|0))e=0;else e=(c[i+20>>2]|0)==(v|0)?4:2;n=v+48|0;q=g+48|0;j=g+40|0;g=r?0:p>o?4:2}else{if(e<<24>>24==(a[u>>0]|0))e=0;else e=(c[i+20>>2]|0)==(v|0)?1:3;n=v+40|0;q=g+40|0;j=g+48|0;g=r?0:m>x?1:3}ZN(C,s&1,+h[j>>3],+h[q>>3],+h[n>>3],g,e);q=z+1|0;g=B+(z*56|0)|0;e=C;j=g+56|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(j|0));if((a[t>>0]|0)!=(a[u>>0]|0)?(c[y>>2]|0)==(f|0):0){WN(F,i,v);n=(a[u>>0]|0)==0;e=v+40|0;g=v+48|0;p=+h[(n?g:e)>>3];ZN(C,n&1,+h[(n?e:g)>>3],p,p,n?(o>w?4:2):x>k?1:3,0);n=z+2|0;g=B+(q*56|0)|0;e=C;j=g+56|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(j|0));g=v;j=i;p=o;o=w;e=n;m=x}else{g=v;j=i;p=o;o=w;e=q;m=x}}v=i;i=c[y>>2]|0;q=j;z=e;x=k;j=v}i=F_(B,z*56|0)|0;e=z+-1|0;g=0;while(1){if((g|0)>=(z|0))break;if((g|0)>0)c[i+(g*56|0)+48>>2]=i+((g+-1|0)*56|0);if((g|0)<(e|0)){G=g+1|0;c[i+(g*56|0)+52>>2]=i+(G*56|0);g=G;continue}else{g=g+1|0;continue}}c[b>>2]=z;c[b+4>>2]=i;l=H;return}function jN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Cw(25588,c[4555]|0)|0;k=a+8|0;i=0;while(1){if((i|0)>=(c[a>>2]|0))break;b=(c[k>>2]|0)+(i*72|0)|0;if(!(c[b>>2]&4)){while(1){d=c[(c[b+36>>2]|0)+8>>2]|0;if(!d)break;d=c[d+20>>2]|0;if(!d)break;if(!(c[d>>2]&1))b=d;else break}g=uH(40)|0;c[g+36>>2]=b;h[g+8>>3]=+h[b+40>>3];f=b;d=c[b>>2]|0;while(1){c[f>>2]=d|4;d=c[c[f+36>>2]>>2]|0;if(!d)break;e=c[d+24>>2]|0;if(!e)break;d=c[e>>2]|0;if(d&1|0)break;else f=e}h[g+16>>3]=+h[f+56>>3];RN(j,g,+h[b+48>>3])}i=i+1|0}return j|0}function kN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0;j=Cw(25588,c[4555]|0)|0;k=a+8|0;i=0;while(1){if((i|0)>=(c[a>>2]|0))break;b=(c[k>>2]|0)+(i*72|0)|0;if(!(c[b>>2]&2)){while(1){d=c[(c[b+36>>2]|0)+12>>2]|0;if(!d)break;d=c[d+20>>2]|0;if(!d)break;if(!(c[d>>2]&1))b=d;else break}g=uH(40)|0;c[g+36>>2]=b;h[g+8>>3]=+h[b+48>>3];f=b;d=c[b>>2]|0;while(1){c[f>>2]=d|2;d=c[(c[f+36>>2]|0)+4>>2]|0;if(!d)break;e=c[d+24>>2]|0;if(!e)break;d=c[e>>2]|0;if(d&1|0)break;else f=e}h[g+16>>3]=+h[f+64>>3];RN(j,g,+h[b+40>>3])}i=i+1|0}return j|0}function lN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=e+20|0;i=e+24|0;e=0;while(1){if((e|0)>=(b|0))break;g=c[d+(e<<3)>>2]|0;h=c[d+(e<<3)+4>>2]|0;f=0;while(1){if((f|0)>=(g|0))break;k=h+(f*56|0)|0;QN(uN(c[((a[k>>0]|0)==0?j:i)>>2]|0,k)|0,k);f=f+1|0}e=e+1|0}return}function mN(a){a=a|0;var b=0,d=0;d=a+20|0;wN(c[d>>2]|0);b=a+24|0;wN(c[b>>2]|0);xN(c[d>>2]|0);xN(c[b>>2]|0);yN(c[d>>2]|0,a);yN(c[b>>2]|0,a);zN(c[d>>2]|0);zN(c[b>>2]|0);return}function nN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0.0;z=l;l=l+224|0;n=z+176|0;m=z+208|0;x=z+160|0;y=z+128|0;k=z+96|0;t=z+64|0;u=z;o=z+32|0;v=u+8|0;h[v>>3]=1797693134862315708145274.0e284;h[u>>3]=1797693134862315708145274.0e284;w=u+24|0;h[w>>3]=-1797693134862315708145274.0e284;p=u+16|0;h[p>>3]=-1797693134862315708145274.0e284;D1(107157,a)|0;c[n>>2]=10;c[n+4>>2]=10;g1(a,107563,n)|0;D1(135183,a)|0;i=b+4|0;j=b+12|0;q=t+8|0;r=t+16|0;s=t+24|0;g=0;while(1){if((g|0)>=(c[i>>2]|0))break;D=(c[j>>2]|0)+(g*72|0)+40|0;c[t>>2]=c[D>>2];c[t+4>>2]=c[D+4>>2];c[t+8>>2]=c[D+8>>2];c[t+12>>2]=c[D+12>>2];c[t+16>>2]=c[D+16>>2];c[t+20>>2]=c[D+20>>2];c[t+24>>2]=c[D+24>>2];c[t+28>>2]=c[D+28>>2];C=+h[q>>3];B=+h[r>>3];A=+h[s>>3];h[k>>3]=+h[t>>3];h[k+8>>3]=C;h[k+16>>3]=B;h[k+24>>3]=A;g1(a,135202,k)|0;g=g+1|0}g=0;while(1){if((g|0)>=(d|0))break;D=c[f+(g<<3)+4>>2]|0;k=e+(g<<3)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];c[n+16>>2]=c[u+16>>2];c[n+20>>2]=c[u+20>>2];c[n+24>>2]=c[u+24>>2];c[n+28>>2]=c[u+28>>2];vN(o,a,D,m,b,n);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[u+8>>2]=c[o+8>>2];c[u+12>>2]=c[o+12>>2];c[u+16>>2]=c[o+16>>2];c[u+20>>2]=c[o+20>>2];c[u+24>>2]=c[o+24>>2];c[u+28>>2]=c[o+28>>2];g=g+1|0}D1(107580,a)|0;i=b+8|0;g=0;while(1){if((g|0)>=(c[b>>2]|0))break;D=(c[i>>2]|0)+(g*72|0)+40|0;c[t>>2]=c[D>>2];c[t+4>>2]=c[D+4>>2];c[t+8>>2]=c[D+8>>2];c[t+12>>2]=c[D+12>>2];c[t+16>>2]=c[D+16>>2];c[t+20>>2]=c[D+20>>2];c[t+24>>2]=c[D+24>>2];c[t+28>>2]=c[D+28>>2];E=+h[t>>3];A=+h[q>>3];B=+h[r>>3];C=+h[s>>3];h[y>>3]=E;h[y+8>>3]=A;h[y+16>>3]=B;h[y+24>>3]=C;g1(a,135239,y)|0;h[u>>3]=+h[(+h[u>>3]<E?u:t)>>3];h[v>>3]=+h[(+h[v>>3]<A?u:t)+8>>3];h[p>>3]=+h[(+h[p>>3]>B?u:t)+16>>3];h[w>>3]=+h[(+h[w>>3]>C?u:t)+24>>3];g=g+1|0}v=~~(+h[v>>3]+10.0);y=~~(+h[p>>3]+10.0);D=~~(+h[w>>3]+10.0);c[x>>2]=~~(+h[u>>3]+10.0);c[x+4>>2]=v;c[x+8>>2]=y;c[x+12>>2]=D;g1(a,107605,x)|0;l=z;return}function oN(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;N=l;l=l+112|0;F=N+88|0;E=N+72|0;M=N+32|0;I=N+16|0;J=N;K=N+56|0;L=N+40|0;G=c[15686]|0;w=(i|0)==0;x=J+8|0;y=I+8|0;v=0;m=0;n=0;o=0;p=0;i=0;while(1){if((v|0)>=(e|0))break;z=c[g+(v<<3)+4>>2]|0;A=z+48|0;u=(c[(c[((c[z>>2]&3|0)==3?z:A)+40>>2]|0)+16>>2]|0)+16|0;B=z+16|0;C=(c[B>>2]|0)+16|0;c[E>>2]=c[u>>2];c[E+4>>2]=c[u+4>>2];c[E+8>>2]=c[u+8>>2];c[E+12>>2]=c[u+12>>2];c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];pN(K,E,F);c[I>>2]=c[K>>2];c[I+4>>2]=c[K+4>>2];c[I+8>>2]=c[K+8>>2];c[I+12>>2]=c[K+12>>2];C=z+-48|0;u=(c[(c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0)+16>>2]|0)+16|0;t=(c[B>>2]|0)+56|0;c[E>>2]=c[u>>2];c[E+4>>2]=c[u+4>>2];c[E+8>>2]=c[u+8>>2];c[E+12>>2]=c[u+12>>2];c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];c[F+8>>2]=c[t+8>>2];c[F+12>>2]=c[t+12>>2];pN(L,E,F);c[J>>2]=c[L>>2];c[J+4>>2]=c[L+4>>2];c[J+8>>2]=c[L+8>>2];c[J+12>>2]=c[L+12>>2];t=c[f+(v<<3)>>2]|0;u=c[f+(v<<3)+4>>2]|0;s=t*3|0;D=s+1|0;if((s|0)>=(n|0)){if(m|0)D_(i);p=vH(D<<4)|0;m=p;n=D;o=p;i=p}if(!(a[u>>0]|0)){k=+(rN(u,d)|0);j=+h[I>>3]}else{j=+qN(u,d);k=+h[y>>3]}r=m+16|0;h[m+16>>3]=j;h[m+24>>3]=k;c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];r=1;q=u;s=2;while(1){if((r|0)>=(t|0))break;q=u+(r*56|0)|0;if(!(a[q>>0]|0))k=+(rN(q,d)|0);else j=+qN(q,d);O=m+(s+2<<4)|0;Q=m+(s+1<<4)|0;P=m+(s<<4)|0;h[P>>3]=j;h[m+(s<<4)+8>>3]=k;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];r=r+1|0;s=s+3|0}if(!(a[q>>0]|0)){k=+(rN(q,d)|0);j=+h[J>>3]}else{j=+qN(q,d);k=+h[x>>3]}Q=m+(s<<4)|0;O=s+1|0;P=m+(O<<4)|0;h[P>>3]=j;h[m+(O<<4)+8>>3]=k;c[Q>>2]=c[P>>2];c[Q+4>>2]=c[P+4>>2];c[Q+8>>2]=c[P+8>>2];c[Q+12>>2]=c[P+12>>2];if(0>1){P=ry(c[((c[z>>2]&3|0)==3?z:A)+40>>2]|0)|0;Q=ry(c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0)|0;c[M>>2]=P;c[M+4>>2]=Q;g1(G,107116,M)|0}QK(z,c[((c[z>>2]&3|0)==2?z:C)+40>>2]|0,m,D,25576);if((!w?(H=c[(c[B>>2]|0)+96>>2]|0,H|0):0)?(a[H+81>>0]|0)==0:0){c[E>>2]=c[I>>2];c[E+4>>2]=c[I+4>>2];c[E+8>>2]=c[I+8>>2];c[E+12>>2]=c[I+12>>2];c[F>>2]=c[J>>2];c[F+4>>2]=c[J+4>>2];c[F+8>>2]=c[J+8>>2];c[F+12>>2]=c[J+12>>2];jL(b,z,E,F)}v=v+1|0}D_(o);l=N;return}function pN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;h[b>>3]=+h[b>>3]+ +h[d>>3];e=b+8|0;h[e>>3]=+h[e>>3]+ +h[d+8>>3];c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function qN(a,b){a=a|0;b=b|0;var d=0.0,e=0;b=uN(c[b+24>>2]|0,a)|0;e=c[b+36>>2]|0;d=+h[e+40>>3];return +((+h[e+56>>3]-d)*(+(c[a+44>>2]|0)/+((c[b+24>>2]|0)+1|0))+d)}function rN(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=uN(c[b+20>>2]|0,a)|0;b=c[e+36>>2]|0;d=+h[b+48>>3];return ~~((1.0-+(c[a+44>>2]|0)/+((c[e+24>>2]|0)+1|0))*(+h[b+64>>3]-d)+d)|0}function sN(a){a=a|0;return 0}function tN(a){a=a|0;return 0}function uN(a,b){a=a|0;b=b|0;a=nb[c[a>>2]&63](a,b+8|0,512)|0;if(!a)qa(107129,107135,423,107143);a=c[a+16>>2]|0;a=nb[c[a>>2]&63](a,b+16|0,512)|0;if(!a)qa(107154,107135,425,107143);else return a|0;return 0}function vN(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;z=l;l=l+32|0;y=z+16|0;u=z+8|0;m=z;j=c[(c[(c[((c[e>>2]&3|0)==3?e:e+48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;t=c[f+4>>2]|0;if(!(a[t>>0]|0)){k=+h[j+56>>3];s=+h[j+40>>3];j=rN(t,g)|0;k=(s+k)*.5}else{k=+h[j+64>>3];s=+h[j+48>>3];j=~~((s+k)*.5);k=+qN(t,g)}A=~~k;p=+h[i>>3];r=+(A|0);p=p<r?p:r;h[i>>3]=p;v=i+8|0;q=+h[v>>3];s=+(j|0);q=q<s?q:s;h[v>>3]=q;w=i+16|0;k=+h[w>>3];r=k>r?k:r;h[w>>3]=r;x=i+24|0;k=+h[x>>3];s=k>s?k:s;h[x>>3]=s;c[m>>2]=A;c[m+4>>2]=j;g1(d,107656,m)|0;o=c[f>>2]|0;m=t;n=1;f=A;while(1){if((n|0)>=(o|0))break;m=t+(n*56|0)|0;if(!(a[m>>0]|0))j=rN(m,g)|0;else f=~~+qN(m,g);B=+(f|0);D=p<B?p:B;h[i>>3]=D;k=+(j|0);C=q<k?q:k;h[v>>3]=C;B=r>B?r:B;h[w>>3]=B;k=s>k?s:k;h[x>>3]=k;c[u>>2]=f;c[u+4>>2]=j;g1(d,107678,u)|0;n=n+1|0;p=D;q=C;r=B;s=k}j=c[(c[(c[((c[e>>2]&3|0)==2?e:e+-48|0)+40>>2]|0)+16>>2]|0)+112>>2]|0;if(!(a[m>>0]|0)){k=+h[j+56>>3];D=+h[j+40>>3];j=rN(m,g)|0;k=(D+k)*.5}else{k=+h[j+64>>3];D=+h[j+48>>3];j=~~((D+k)*.5);k=+qN(m,g)}A=~~k;C=+(A|0);h[i>>3]=p<C?p:C;D=+(j|0);h[v>>3]=q<D?q:D;h[w>>3]=r>C?r:C;h[x>>3]=s>D?s:D;c[y>>2]=A;c[y+4>>2]=j;g1(d,107692,y)|0;c[b>>2]=c[i>>2];c[b+4>>2]=c[i+4>>2];c[b+8>>2]=c[i+8>>2];c[b+12>>2]=c[i+12>>2];c[b+16>>2]=c[i+16>>2];c[b+20>>2]=c[i+20>>2];c[b+24>>2]=c[i+24>>2];c[b+28>>2]=c[i+28>>2];l=z;return}function wN(a){a=a|0;var b=0;a=Aw(a)|0;while(1){if(!a)break;b=Aw(c[a+16>>2]|0)|0;while(1){if(!b)break;c[b+32>>2]=$N(c[b+24>>2]|0)|0;b=c[b>>2]|0}a=c[a>>2]|0}return}function xN(a){a=a|0;var b=0;a=Aw(a)|0;while(1){if(!a)break;b=Aw(c[a+16>>2]|0)|0;while(1){if(!b)break;if(c[b+24>>2]|0)PN(b);b=c[b>>2]|0}a=c[a>>2]|0}return}function yN(a,b){a=a|0;b=b|0;var d=0;d=Aw(a)|0;while(1){if(!d)break;a=Aw(c[d+16>>2]|0)|0;while(1){if(!a)break;DN(a,b);a=c[a>>2]|0}d=c[d>>2]|0}return}function zN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0;e=Aw(a)|0;while(1){if(!e)break;i=e+8|0;f=Aw(c[e+16>>2]|0)|0;while(1){if(!f)break;a=f+24|0;a:do if(c[a>>2]|0){if(c[46553]&8|0)AN(f,~~+h[i>>3]);g=f+32|0;eO(c[g>>2]|0);b=c[a>>2]|0;d=f+28|0;a=0;while(1){if((a|0)>=(b|0))break a;c[(c[(c[d>>2]|0)+(a<<2)>>2]|0)+44>>2]=(c[(c[(c[g>>2]|0)+4>>2]|0)+(a*12|0)+4>>2]|0)+1;a=a+1|0}}while(0);f=c[f>>2]|0}e=c[e>>2]|0}return}function AN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0,m=0.0;j=l;l=l+32|0;d=j;g=a+24|0;a:do if((c[g>>2]|0)>=2){i=c[15686]|0;m=+h[a+8>>3];k=+h[a+16>>3];c[d>>2]=b;h[d+8>>3]=m;h[d+16>>3]=k;g1(i,107713,d)|0;f=a+32|0;a=a+28|0;b=0;while(1){if((b|0)>=(c[g>>2]|0))break a;e=c[(c[(c[f>>2]|0)+4>>2]|0)+(b*12|0)+8>>2]|0;b:do if(Ew(e)|0){BN(i,c[(c[a>>2]|0)+(b<<2)>>2]|0);D1(107733,i)|0;d=nb[c[e>>2]&63](e,0,128)|0;while(1){if(!d)break b;D1(107738,i)|0;BN(i,c[(c[a>>2]|0)+(c[d>>2]<<2)>>2]|0);D1(150517,i)|0;d=nb[c[e>>2]&63](e,d,8)|0}}while(0);b=b+1|0}}while(0);l=j;return}function BN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,m=0.0;g=l;l=l+80|0;f=g+40|0;e=g;if(!(a[d>>0]|0)){m=+h[d+16>>3];j=+h[d+8>>3];k=+h[d+24>>3];i=CN(c[d+32>>2]|0)|0;e=CN(c[d+36>>2]|0)|0;h[f>>3]=m;h[f+8>>3]=j;h[f+16>>3]=k;h[f+24>>3]=j;c[f+32>>2]=i;c[f+36>>2]=e;g1(b,107744,f)|0}else{k=+h[d+8>>3];j=+h[d+16>>3];m=+h[d+24>>3];f=CN(c[d+32>>2]|0)|0;i=CN(c[d+36>>2]|0)|0;h[e>>3]=k;h[e+8>>3]=j;h[e+16>>3]=k;h[e+24>>3]=m;c[e+32>>2]=f;c[e+36>>2]=i;g1(b,107744,e)|0}l=g;return}function CN(a){a=a|0;switch(a|0){case 0:{a=107795;break}case 1:{a=107790;break}case 2:{a=107783;break}case 3:{a=107776;break}case 4:{a=107768;break}default:a=0}return a|0}function DN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;r=w+8|0;t=w;u=c[a+32>>2]|0;v=c[a+28>>2]|0;p=a+24|0;m=r+4|0;n=t+4|0;j=0;a=c[p>>2]|0;a:while(1){q=j+1|0;if((q|0)>=(a|0))break;o=v+(j<<2)|0;k=q;while(1){if((k|0)>=(a|0)){j=q;continue a}b:do if(((dO(u,j,k)|0)==0?(dO(u,k,j)|0)==0:0)?(s=v+(k<<2)|0,EN(c[o>>2]|0,c[s>>2]|0)|0):0){f=c[o>>2]|0;a=c[f+48>>2]|0;i=c[s>>2]|0;d=c[i+48>>2]|0;e=(d|0)==0;if(a)if(e)a=1;else a=+h[a+8>>3]!=+h[d+8>>3];else a=e^1;g=a&1;FN(r,f,i,0,g);a=c[r>>2]|0;i=c[m>>2]|0;f=g^1;FN(t,c[o>>2]|0,c[s>>2]|0,1,f);d=c[t>>2]|0;e=c[n>>2]|0;switch(i|0){case -1:{GN(c[s>>2]|0,c[o>>2]|0,g,0,a,b);GN(c[s>>2]|0,c[o>>2]|0,f,1,d,b);if((e|0)!=1)break b;HN(c[o>>2]|0,c[s>>2]|0,f,b);break b}case 0:switch(e|0){case -1:{GN(c[s>>2]|0,c[o>>2]|0,g,0,a,b);GN(c[s>>2]|0,c[o>>2]|0,f,1,d,b);break b}case 0:{GN(c[o>>2]|0,c[s>>2]|0,0,g,a,b);GN(c[o>>2]|0,c[s>>2]|0,1,f,d,b);break b}case 1:{GN(c[o>>2]|0,c[s>>2]|0,0,g,a,b);GN(c[o>>2]|0,c[s>>2]|0,1,f,d,b);break b}default:break b}case 1:{GN(c[o>>2]|0,c[s>>2]|0,0,g,a,b);GN(c[o>>2]|0,c[s>>2]|0,1,f,d,b);if((e|0)!=-1)break b;HN(c[o>>2]|0,c[s>>2]|0,f,b);break b}default:break b}}while(0);k=k+1|0;a=c[p>>2]|0}}l=w;return}function EN(a,b){a=a|0;b=b|0;if(!(+h[a+8>>3]==+h[b+8>>3]))qa(107866,107135,843,107897);if((+h[a+16>>3]==+h[b+16>>3]?+h[a+24>>3]==+h[b+24>>3]:0)?(c[a+32>>2]|0)==(c[b+32>>2]|0):0)a=(c[a+36>>2]|0)==(c[b+36>>2]|0)&1;else a=0;return a|0}function FN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=0;while(1){b=IN(b,e)|0;if(!b){h=0;break}d=IN(d,f)|0;if(!d){i=6;break}if(!(EN(b,d)|0)){i=7;break}g=g+1|0}if((i|0)==6)qa(135312,107135,871,107815);else if((i|0)==7)h=KN(b,JN(b,d)|0,g+1|0,1-e|0)|0;c[a>>2]=g;c[a+4>>2]=h;return}function GN(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i+20|0;n=i+24|0;i=uN(c[((a[b>>0]|0)==0?o:n)>>2]|0,b)|0;bO(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0);k=1;while(1){if((k|0)>(g|0))break;l=IN(b,e)|0;m=IN(d,f)|0;do if(!(a[b>>0]|0)){j=uN(c[n>>2]|0,l)|0;if(+h[l+8>>3]==+h[b+16>>3]){p=(c[b+32>>2]|0)==1;i=(dO(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else if(i){bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}}else{p=(c[b+36>>2]|0)==1;i=(dO(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else if(i){bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}}}else{j=uN(c[o>>2]|0,l)|0;if(+h[l+8>>3]==+h[b+16>>3]){p=(c[b+32>>2]|0)==2;i=(dO(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else if(i){bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}}else{p=(c[b+36>>2]|0)==2;i=(dO(c[i+32>>2]|0,c[b+40>>2]|0,c[d+40>>2]|0)|0)!=0;b=c[j+32>>2]|0;if(p)if(i){bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}else{bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else if(i){bO(b,c[l+40>>2]|0,c[m+40>>2]|0);i=j;break}else{bO(b,c[m+40>>2]|0,c[l+40>>2]|0);i=j;break}}}while(0);b=l;d=m;k=k+1|0}return}function HN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;while(1){if(!(EN(b,d)|0))break;g=IN(b,1)|0;d=IN(d,e)|0;b=g}g=c[(uN(c[((a[b>>0]|0)==0?f+20|0:f+24|0)>>2]|0,b)|0)+32>>2]|0;cO(g,c[b+40>>2]|0,c[d+40>>2]|0);return}function IN(a,b){a=a|0;b=b|0;if(!a)qa(107802,107135,798,107806);else return c[((b|0)==0?a+48|0:a+52|0)>>2]|0;return 0}function JN(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;d=a[b>>0]|0;if(d<<24>>24==(a[c>>0]|0)?!(+h[b+8>>3]!=+h[c+8>>3]):0){if(!(d<<24>>24))b=LN(b,c,3,1)|0;else b=LN(b,c,4,2)|0;l=f;return b|0}Pw(1,107828,e)|0;bb(186216,1);return 0}function KN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0;j=1;while(1){if((j|0)>(e|0))break;i=IN(b,f)|0;g=+h[i+8>>3]==+h[b+16>>3];do if(!(a[b>>0]|0))if(g){g=(c[b+32>>2]|0)==1;break}else{g=(c[b+36>>2]|0)==3;break}else if(g){g=(c[b+32>>2]|0)==4;break}else{g=(c[b+36>>2]|0)==2;break}while(0);b=i;j=j+1|0;d=g?0-d|0:d}return d|0}function LN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0;j=+h[a+24>>3];k=+h[b+16>>3];do if(!(j<k)?(g=+h[a+16>>3],i=+h[b+24>>3],!(g>i)):0){if(k<j&g<k){b=MN(a,b,d,e)|0;break}if(k<g&g<i){b=0-(MN(b,a,d,e)|0)|0;break}if(!(g==k))if(j==k){d=c[a+36>>2]|0;return ((d|0)==(c[b+32>>2]|0)?0:(d|0)==(e|0)?1:-1)|0}else{d=c[a+32>>2]|0;b=(d|0)==(c[b+36>>2]|0)?0:(d|0)==(e|0)?1:-1;break}if(!(j==i))if(j<i){o=(c[a+36>>2]|0)==(d|0);d=ON(c[b+32>>2]|0,c[a+32>>2]|0,d,e)|0;return (o?d:0-d|0)|0}else{o=(c[b+36>>2]|0)==(e|0);b=ON(c[a+32>>2]|0,c[b+32>>2]|0,d,e)|0;b=o?b:0-b|0;break}o=c[a+32>>2]|0;n=c[b+32>>2]|0;if((o|0)==(n|0)){b=c[b+36>>2]|0;if((c[a+36>>2]|0)==(b|0)){b=0;break}}else b=c[b+36>>2]|0;m=(n|0)==(d|0);if((n|0)==(b|0)){if(m){b=1;break}if((n|0)==(e|0)){b=-1;break}if((o|0)!=(d|0)?(c[a+36>>2]|0)!=(d|0):0){b=1;break}if((o|0)!=(e|0)?(c[a+36>>2]|0)!=(e|0):0){b=-1;break}b=0;break}f=(b|0)==(e|0);if(m&f){b=(c[a+36>>2]|0)==(e|0);if((o|0)==(d|0)){if(!b){b=-1;break}}else if(b){b=1;break}b=0;break}l=(b|0)==(d|0);if((n|0)==(e|0)&l){b=(o|0)==(e|0);if((c[a+36>>2]|0)==(d|0)){if(!b){b=-1;break}}else if(b){b=1;break}b=0;break}if(!n){if(l){b=NN(o,c[a+36>>2]|0,d)|0;break}if(f){b=0-(NN(o,c[a+36>>2]|0,e)|0)|0;break}}f=c[a+36>>2]|0;if(m&(b|0)==0){b=NN(f,o,d)|0;break}else{b=0-(NN(f,o,e)|0)|0;break}}else b=0;while(0);return b|0}function MN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0.0,j=0.0;i=+h[a+24>>3];j=+h[b+24>>3];do if(i<j){a=c[a+36>>2]|0;if((a|0)==(d|0)?(c[b+32>>2]|0)==(e|0):0){a=-1;break}if((a|0)==(e|0)?(c[b+32>>2]|0)==(d|0):0){a=1;break}a=0}else{f=c[b+32>>2]|0;g=(f|0)==(e|0);if(i==j)if(g){a=ON(c[a+36>>2]|0,c[b+36>>2]|0,d,e)|0;break}else{a=0-(ON(c[b+36>>2]|0,c[a+36>>2]|0,d,e)|0)|0;break}if(g?(c[b+36>>2]|0)==(e|0):0){a=-1;break}if((f|0)==(d|0)?(c[b+36>>2]|0)==(d|0):0){a=1;break}a=0}while(0);return a|0}function NN(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)==(c|0)?((b|0)==(c|0))<<31>>31:1)|0}function ON(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(d|0)){b=(a|0)==0;if(b)return 0;else b=b&1}return ((a|0)!=0|(b|0)!=(c|0))<<31>>31|0}function PN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=c[a+28>>2]|0;h=c[a+24>>2]|0;d=c[a+32>>2]|0;a=0;a:while(1){e=a+1|0;if((e|0)>=(h|0))break;f=g+(a<<2)|0;b=e;while(1){if((b|0)==(h|0)){a=e;continue a}switch(JN(c[f>>2]|0,c[g+(b<<2)>>2]|0)|0){case 1:{bO(d,a,b);break}case -1:{bO(d,b,a);break}default:{}}b=b+1|0}}return}function QN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+24|0;e=c[f>>2]|0;d=e+1|0;c[f>>2]=d;c[b+40>>2]=e;e=a+28|0;a=c[e>>2]|0;if(!a)a=vH(d<<2)|0;else a=xH(a,d<<2)|0;c[e>>2]=a;c[a+((c[f>>2]|0)+-1<<2)>>2]=b;return}function RN(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0;g=l;l=l+16|0;f=g;h[f>>3]=d;e=nb[c[a>>2]&63](a,f,512)|0;if(!e){e=uH(24)|0;h[e+8>>3]=+h[f>>3];c[e+16>>2]=Cw(25624,c[4555]|0)|0;nb[c[a>>2]&63](a,e,1)|0}f=c[e+16>>2]|0;nb[c[f>>2]&63](f,b,1)|0;l=g;return}function SN(a,b,d){a=a|0;b=b|0;d=d|0;aO(c[b+32>>2]|0);D_(c[b+28>>2]|0);D_(b);return}function TN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;e=+h[b>>3];f=+h[c>>3];if(!(e>f))if(e<f)a=!(+h[b+8>>3]>=+h[c+8>>3])<<31>>31;else a=0;else a=!(+h[b+8>>3]<=+h[c+8>>3])&1;return a|0}function UN(a,b,d){a=a|0;b=b|0;d=d|0;yw(c[b+16>>2]|0)|0;D_(b);return}function VN(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+h[b>>3];e=+h[c>>3];return (f>e?1:(f<e)<<31>>31)|0}function WN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0,j=0;i=(a[d+36>>0]|0)!=0;j=e+40|0;do if((c[d+24>>2]|0)==(e|0)){f=+h[j>>3];if(i){g=(+h[e+64>>3]+ +h[e+48>>3])*.5;break}else{g=+h[e+48>>3];f=(+h[e+56>>3]+f)*.5;break}}else if(i){g=(+h[e+64>>3]+ +h[e+48>>3])*.5;f=+h[e+56>>3];break}else{g=+h[e+64>>3];f=(+h[e+56>>3]+ +h[j>>3])*.5;break}while(0);h[b>>3]=f;h[b+8>>3]=g;return}function XN(a,b){a=a|0;b=b|0;var d=0;d=c[a+20>>2]|0;if((d|0)!=(c[b+20>>2]|0)?(d|0)!=(c[b+24>>2]|0):0)d=c[a+24>>2]|0;return d|0}function YN(a,b){a=a|0;b=b|0;var c=0.0;c=(+h[b+64>>3]+ +h[b+48>>3])*.5;h[a>>3]=(+h[b+56>>3]+ +h[b+40>>3])*.5;h[a+8>>3]=c;return}function ZN(b,d,e,f,g,i,j){b=b|0;d=d|0;e=+e;f=+f;g=+g;i=i|0;j=j|0;var k=0,l=0;a[b>>0]=d;h[b+8>>3]=e;if(f<g){k=0;l=i;d=j;e=f;f=g}else{k=1;l=j;d=i;e=g}h[b+24>>3]=f;h[b+16>>3]=e;c[b+36>>2]=d;c[b+32>>2]=l;a[b+1>>0]=k;return}function _N(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+36>>2]|0;do if((c[e+4>>2]|0)!=(d|0)){if((c[e+12>>2]|0)==(d|0)){e=~~((+h[b+56>>3]+ +h[b+40>>3])*.5);d=~~+h[b+48>>3];break}if((c[e+8>>2]|0)==(d|0)){e=~~+h[b+40>>3];d=~~((+h[b+64>>3]+ +h[b+48>>3])*.5);break}if((c[e>>2]|0)==(d|0)){e=~~+h[b+56>>3];d=~~((+h[b+64>>3]+ +h[b+48>>3])*.5)}else{e=0;d=0}}else{e=~~((+h[b+56>>3]+ +h[b+40>>3])*.5);d=~~+h[b+64>>3]}while(0);c[a>>2]=e;c[a+4>>2]=d;return}function $N(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=uH(8)|0;c[d>>2]=a;e=d+4|0;c[e>>2]=uH(a*12|0)|0;b=0;while(1){if((b|0)>=(a|0))break;g=yR()|0;f=c[e>>2]|0;c[f+(b*12|0)+8>>2]=g;c[f+(b*12|0)>>2]=0;b=b+1|0}return d|0}function aO(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=0;while(1){e=c[d>>2]|0;if((b|0)>=(c[a>>2]|0))break;yw(c[e+(b*12|0)+8>>2]|0)|0;b=b+1|0}D_(e);D_(a);return}function bO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c[(c[a+4>>2]|0)+(b*12|0)+8>>2]|0;nb[c[d>>2]&63](d,f,1)|0;l=e;return}function cO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;c[f>>2]=d;a=a+4|0;g=c[(c[a>>2]|0)+(b*12|0)+8>>2]|0;nb[c[g>>2]&63](g,f,2)|0;c[f>>2]=b;d=c[(c[a>>2]|0)+(d*12|0)+8>>2]|0;nb[c[d>>2]&63](d,f,2)|0;l=e;return}function dO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=c[(c[a+4>>2]|0)+(b*12|0)+8>>2]|0;d=(nb[c[d>>2]&63](d,f,512)|0)!=0&1;l=e;return d|0}function eO(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;switch(b|0){case 0:break;case 1:{c[(c[a+4>>2]|0)+4>>2]=0;break}default:{e=fO(b)|0;f=a+4|0;d=0;b=0;while(1){if((d|0)>=(c[a>>2]|0)){b=0;break}if(!(c[(c[f>>2]|0)+(d*12|0)>>2]|0))b=gO(a,d,b,e)|0;d=d+1|0}while(1){d=hO(e)|0;if((d|0)<=-1)break;c[(c[f>>2]|0)+(d*12|0)+4>>2]=b;b=b+1|0}iO(e)}}return}function fO(a){a=a|0;var b=0;b=uH(8)|0;c[b+4>>2]=uH(a<<2)|0;c[b>>2]=-1;return b|0}function gO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=a+4|0;g=c[i>>2]|0;j=g+(b*12|0)|0;c[j>>2]=1;g=c[g+(b*12|0)+8>>2]|0;h=g+4|0;d=d+1|0;g=Aw(g)|0;while(1){if(!g)break;f=c[(c[h>>2]|0)+8>>2]|0;if((f|0)<0)f=c[g+8>>2]|0;else f=g+(0-f)|0;f=c[f>>2]|0;if(!(c[(c[i>>2]|0)+(f*12|0)>>2]|0))d=gO(a,f,d,e)|0;g=c[g>>2]|0}c[j>>2]=2;jO(e,b);return d+1|0}function hO(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if((b|0)==-1)a=-1;else{d=c[(c[a+4>>2]|0)+(b<<2)>>2]|0;c[a>>2]=b+-1;a=d}return a|0}function iO(a){a=a|0;D_(c[a+4>>2]|0);D_(a);return}function jO(a,b){a=a|0;b=b|0;var d=0;d=(c[a>>2]|0)+1|0;c[a>>2]=d;c[(c[a+4>>2]|0)+(d<<2)>>2]=b;return}function kO(a){a=a|0;var d=0,e=0,f=0;e=c[a>>2]|0;c[a+8>>2]=e;c[a+12>>2]=c[a+4>>2];d=a+16|0;a=0;while(1){if((a|0)>=(e|0))break;f=c[d>>2]|0;b[f+(a*40|0)+18>>1]=b[f+(a*40|0)+16>>1]|0;a=a+1|0}return}function lO(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;c[a>>2]=d;c[a+4>>2]=c[a+12>>2];e=a+16|0;a=0;while(1){if((a|0)>=(d|0))break;f=c[e>>2]|0;b[f+(a*40|0)+16>>1]=b[f+(a*40|0)+18>>1]|0;a=a+1|0}d=d+2|0;while(1){if((a|0)>=(d|0))break;b[(c[e>>2]|0)+(a*40|0)+16>>1]=0;a=a+1|0}return}function mO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=uH(((c[a>>2]|0)*6|0)+(b<<1)<<2)|0;c[a+20>>2]=uH((((c[a>>2]|0)*3|0)+b|0)*24|0)|0;e=c[a>>2]|0;f=a+16|0;a=0;while(1){if((a|0)>=(e|0))break;c[(c[f>>2]|0)+(a*40|0)+28>>2]=d;d=d+24|0;a=a+1|0}e=e+2|0;while(1){if((a|0)>=(e|0))break;c[(c[f>>2]|0)+(a*40|0)+28>>2]=d;d=d+(b<<2)|0;a=a+1|0}return}function nO(a){a=a|0;var b=0;b=uH(24)|0;c[b>>2]=0;c[b+16>>2]=uH(a*40|0)|0;return b|0}function oO(a){a=a|0;var b=0,d=0;d=c[a+16>>2]|0;b=c[a>>2]|0;c[d+(b*40|0)+32>>2]=b;c[a>>2]=b+1;return d+(b*40|0)|0}function pO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=a+4|0;f=c[g>>2]|0;c[g>>2]=f+1;g=c[a+20>>2]|0;a=g+(f*24|0)|0;c[g+(f*24|0)+12>>2]=c[b+32>>2];c[g+(f*24|0)+16>>2]=c[d+32>>2];h[a>>3]=e;c[g+(f*24|0)+8>>2]=0;qO(b,f);qO(d,f);return a|0}function qO(a,d){a=a|0;d=d|0;var e=0,f=0;e=a+16|0;f=b[e>>1]|0;c[(c[a+28>>2]|0)+(f<<16>>16<<2)>>2]=d;b[e>>1]=f+1<<16>>16;return}function rO(a){a=a|0;var b=0;b=a+16|0;D_(c[(c[b>>2]|0)+28>>2]|0);D_(c[b>>2]|0);D_(c[a+20>>2]|0);D_(a);return}function sO(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;g=c[a>>2]|0;i=a+16|0;f=0;while(1){if((f|0)>=(g|0))break;c[(c[i>>2]|0)+(f*40|0)>>2]=-2147483648;f=f+1|0}GR();a:do if(!(JR(d)|0)){c[d+8>>2]=0;c[d>>2]=0;d=a+20|0;b:while(1){g=LR()|0;if(!g){f=0;break a}c[g>>2]=0-(c[g>>2]|0);if((g|0)==(e|0)){f=0;break a}i=g+16|0;j=g+28|0;f=0;while(1){if((f|0)>=(b[i>>1]|0))continue b;k=(c[d>>2]|0)+((c[(c[j>>2]|0)+(f<<2)>>2]|0)*24|0)|0;l=tO(a,k,g)|0;m=c[l>>2]|0;do if((m|0)<0){n=~~-(+h[k>>3]+ +(c[g>>2]|0));if((m|0)==-2147483648){c[l>>2]=n;if(JR(l)|0){f=1;break a}c[l+8>>2]=g;c[l+12>>2]=k;break}else{if((m|0)>=(n|0))break;MR(l,n);c[l+8>>2]=g;c[l+12>>2]=k;break}}while(0);f=f+1|0}}}else f=1;while(0);return f|0}function tO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b+12>>2]|0;if((e|0)==(c[d+32>>2]|0))e=c[b+16>>2]|0;return (c[a+16>>2]|0)+(e*40|0)|0}function uO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=c[a>>2]|0;wC(g,3,b)|0;b=c[g+92>>2]|0;do if(b){d=c[b+16>>2]|0;h=c[d+12>>2]|0;c[a+76>>2]=h;e=c[d+16>>2]|0;c[a+84>>2]=e;f=a+80|0;c[f>>2]=c[d>>2];c[a+88>>2]=c[b+4>>2];d=a+152|0;e=c[d>>2]|c[e>>2];c[d>>2]=e;b=c[g+80>>2]|0;if(!b){c[a+60>>2]=0;b=999;break}else{g=c[b+16>>2]|0;c[a+60>>2]=c[g+12>>2];i=c[g+16>>2]|0;c[a+68>>2]=i;c[a+72>>2]=c[b+4>>2];c[d>>2]=e|c[i>>2];c[a+64>>2]=c[((h|0)==0?f:g)>>2];b=300;break}}else b=999;while(0);return b|0}function vO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(!(XB(a)|0))if((b|0)!=0?(d=c[b>>2]|0,(d|0)!=0):0){tb[d&127](a);a=0}else a=0;else a=1;return a|0}function wO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+4>>2]|0,d|0):0)tb[d&127](a);c[(c[a>>2]|0)+24>>2]=0;dC(a);return}function xO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0.0,i=0.0;e=+h[b+504>>3];f=+h[b+512>>3];i=+h[b+352>>3];if(!(c[b+360>>2]|0)){g=+h[d>>3]+e;d=d+8|0;e=f}else g=-(f+ +h[d+8>>3]);f=+h[b+528>>3]*i*(+h[d>>3]+e);h[a>>3]=+h[b+520>>3]*i*g;h[a+8>>3]=f;return}function yO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0;f=+h[a+504>>3];g=+h[a+512>>3];i=+h[a+352>>3];j=+h[a+520>>3]*i;i=+h[a+528>>3]*i;a:do if(!(c[a+360>>2]|0)){a=0;while(1){if((a|0)>=(e|0))break a;h[d+(a<<4)>>3]=(+h[b+(a<<4)>>3]+f)*j;h[d+(a<<4)+8>>3]=(+h[b+(a<<4)+8>>3]+g)*i;a=a+1|0}}else{a=0;while(1){if((a|0)>=(e|0))break a;k=-(j*(+h[b+(a<<4)+8>>3]+g));h[d+(a<<4)+8>>3]=(+h[b+(a<<4)>>3]+f)*i;h[d+(a<<4)>>3]=k;a=a+1|0}}while(0);return d|0}function zO(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+8>>2]|0,d|0):0)tb[d&127](a);return}function AO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+12>>2]|0,d|0):0)tb[d&127](a);cC(a);return}function BO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+24>>2]|0,d|0):0)tb[d&127](a);return}function CO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+28>>2]|0,d|0):0)tb[d&127](a);return}function DO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+16>>2]|0,d|0):0){b=c[a+160>>2]|0;xb[d&31](a,c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0,b,c[a+156>>2]|0)}return}function EO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+20>>2]|0,d|0):0)tb[d&127](a);return}function FO(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+32>>2]|0,d|0):0)tb[d&127](a);return}function GO(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+36>>2]|0,d|0):0)tb[d&127](a);return}function HO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+40>>2]|0,d|0):0)tb[d&127](a);return}function IO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+44>>2]|0,d|0):0)tb[d&127](a);return}function JO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+48>>2]|0,d|0):0)tb[d&127](a);return}function KO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+52>>2]|0,d|0):0)tb[d&127](a);return}function LO(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+56>>2]|0,d|0):0)tb[d&127](a);return}function MO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+60>>2]|0,d|0):0)tb[d&127](a);return}function NO(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+64>>2]|0,d|0):0)tb[d&127](a);return}function OO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+68>>2]|0,d|0):0)tb[d&127](a);return}function PO(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[a+60>>2]|0;if(g|0?(h=c[g+72>>2]|0,h|0):0)yb[h&15](a,b,d,e,f);return}function QO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+76>>2]|0,d|0):0)tb[d&127](a);return}function RO(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+60>>2]|0;if(d|0?(e=c[d+80>>2]|0,e|0):0)ub[e&63](a,b);return}function SO(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if(b|0?(d=c[b+84>>2]|0,d|0):0)tb[d&127](a);return}function TO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+48|0;f=k+32|0;h=k;i=k+16|0;j=c[b+60>>2]|0;m=c[e>>2]|0;do if(m|0?a[m>>0]|0:0){m=c[b+16>>2]|0;if(m|0?(c[m+144>>2]|0)==0:0)break;if(!(c[b+152>>2]&8192)){c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];xO(i,b,f);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2]}else{c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2]}if(j|0?(g=c[j+88>>2]|0,g|0):0){c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];vb[g&127](b,f,e)}}while(0);l=k;return}function UO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c[b+16>>2]|0)+16|0;i=A$(d,58)|0;h=(i|0)!=0;if(h)a[i>>0]=0;if(f|0?(VO(c[b+68>>2]|0,d,g),e=c[f+92>>2]|0,e|0):0)ub[e&63](b,g);if(h)a[i>>0]=58;return}function VO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+32|0;g=k+16|0;j=k+8|0;i=k;c[d>>2]=b;c[d+32>>2]=5;e=iQ(b)|0;f=c[a+16>>2]|0;if(!((f|0)!=0?(e2(e,f,c[a+20>>2]|0,4,100)|0)!=0:0))h=3;a:do if((h|0)==3){switch(jQ(b,d,c[a+24>>2]|0)|0){case 0:break a;case 1:break;default:{Pw(1,108020,g)|0;break a}}a=vH((W_(b)|0)+16|0)|0;c[i>>2]=b;Y0(a,107985,i)|0;if(AG(a)|0){c[j>>2]=b;Pw(0,107994,j)|0}D_(a)}while(0);l=k;return}function WO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=c[b+60>>2]|0;g=(c[b+16>>2]|0)+56|0;i=A$(d,58)|0;h=(i|0)!=0;if(h)a[i>>0]=0;if(f|0?(VO(c[b+68>>2]|0,d,g),e=c[f+92>>2]|0,e|0):0)ub[e&63](b,g);if(h)a[i>>0]=58;return}function XO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0;h=c[a+60>>2]|0;i=a+16|0;j=(c[i>>2]|0)+96|0;if(h|0?(VO(c[a+68>>2]|0,b,j),f=c[h+92>>2]|0,f|0):0)ub[f&63](a,j);j=c[i>>2]|0;c[j+136>>2]=d;g[j+140>>2]=e;return}function YO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m;j=c[b+60>>2]|0;b=c[b+16>>2]|0;c[b+160>>2]=d;a:do if((d|0)!=0&(j|0)!=0){j=b+144|0;i=b+152|0;g=b+148|0;b=d;b:while(1){f=b+4|0;b=c[b>>2]|0;if(!b)break a;c:do switch(a[b>>0]|0){case 115:{if(!(b$(b,108041)|0)){c[j>>2]=3;b=f;continue b}if(!(b$(b,108062)|0)){e=115;while(1){d=b+1|0;if(!(e<<24>>24))break;b=d;e=a[d>>0]|0}h[i>>3]=+b2(d);b=f;continue b}break}case 100:{if(!(b$(b,134245)|0)){c[j>>2]=1;b=f;continue b}if(!(b$(b,134238)|0)){c[j>>2]=2;b=f;continue b}break}case 105:{if(b$(b,131253)|0?b$(b,108047)|0:0)break c;c[j>>2]=0;b=f;continue b}case 98:{if(!(b$(b,108057)|0)){h[i>>3]=2.0;b=f;continue b}break}case 102:{if(!(b$(b,108075)|0)){c[g>>2]=1;b=f;continue b}break}case 117:{if(!(b$(b,108082)|0)){c[g>>2]=0;b=f;continue b}break}case 116:{if(!(b$(b,108091)|0)){b=f;continue b}break}default:{}}while(0);c[k>>2]=b;Pw(0,108099,k)|0;b=f}}while(0);l=m;return}function ZO(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0;j=l;l=l+32|0;g=j;d=c[a+60>>2]|0;if((d|0?(i=d+96|0,f=c[i>>2]|0,f|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){d=b+16|0;h[g>>3]=(+h[d>>3]+ +h[b>>3])*.5;h[g+8>>3]=(+h[b+24>>3]+ +h[b+8>>3])*.5;b=g+16|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];if(!(c[a+152>>2]&8192)){yO(a,g,g,2)|0;f=c[i>>2]|0}vb[f&127](a,g,e)}l=j;return}function _O(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;m=o;f=c[a+60>>2]|0;if((f|0?(n=f+100|0,c[n>>2]|0):0)?(k=a+16|0,j=c[k>>2]|0,c[j+144>>2]|0):0){if(!(e&4)){f=e;g=0}else{f=e&-5;e=j+16|0;g=m;h=e;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=e;h=j+56|0;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=1}if(!(c[a+152>>2]&8192)){e=d+10|0;if((c[46593]|0)<(d|0)){c[46593]=e;e=xH(c[46594]|0,e<<4)|0;c[46594]=e}else e=c[46594]|0;yO(a,b,e,d)|0;xb[c[n>>2]&31](a,e,d,f)}else xb[c[n>>2]&31](a,b,d,f);if(g|0){g=(c[k>>2]|0)+16|0;h=m;i=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0))}}l=o;return}function $O(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+64|0;f=e;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];g=f+32|0;b=b+16|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];h[f+16>>3]=+h[f>>3];h[f+24>>3]=+h[f+40>>3];h[f+48>>3]=+h[g>>3];h[f+56>>3]=+h[f+8>>3];_O(a,f,4,d);l=e;return}function aP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;i=c[a+60>>2]|0;do if((i|0?(j=i+104|0,h=c[j>>2]|0,h|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){if(c[a+152>>2]&8192|0){zb[h&15](a,b,d,e,f,g&255);break}h=d+10|0;if((c[46593]|0)<(d|0)){c[46593]=h;h=xH(c[46594]|0,h<<4)|0;c[46594]=h}else h=c[46594]|0;yO(a,b,h,d)|0;zb[c[j>>2]&15](a,h,d,e,f,g&255)}while(0);return}function bP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a+60>>2]|0;do if((e|0?(g=e+108|0,f=c[g>>2]|0,f|0):0)?c[(c[a+16>>2]|0)+144>>2]|0:0){if(c[a+152>>2]&8192|0){vb[f&127](a,b,d);break}e=d+10|0;if((c[46593]|0)<(d|0)){c[46593]=e;e=xH(c[46594]|0,e<<4)|0;c[46594]=e}else e=c[46594]|0;yO(a,b,e,d)|0;vb[c[g>>2]&127](a,e,d)}while(0);return}function cP(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+60>>2]|0;if((d|0?!((e|0)==0|(a[d>>0]|0)==0):0)?(f=c[e+112>>2]|0,f|0):0)ub[f&63](b,d);return}function dP(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=l;l=l+112|0;B=F+64|0;E=F;n=F+96|0;x=F+48|0;y=F+32|0;C=c[b+60>>2]|0;if(!b)qa(108200,108152,691,108163);if(!d)qa(108182,108152,692,108163);if(!(a[d>>0]|0))qa(108187,108152,693,108163);D=yC(d)|0;if(!D){if((C|0)!=0&(VJ(d)|0)!=0?(m=c[C+116>>2]|0,m|0):0)yb[m&15](b,d,e,f,g&255)}else{s=b+432|0;c[B>>2]=c[s>>2];c[B+4>>2]=c[s+4>>2];c[B+8>>2]=c[s+8>>2];c[B+12>>2]=c[s+12>>2];BC(n,D,B);s=c[n>>2]|0;m=c[n+4>>2]|0;if(!((s|0)<1&(m|0)<1)){n=E+16|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];c[E>>2]=c[e>>2];c[E+4>>2]=c[e+4>>2];c[E+8>>2]=c[e+8>>2];c[E+12>>2]=c[e+12>>2];z=E+8|0;A=E+24|0;d=1;while(1){if((d|0)>=(f|0))break;G=e+(d<<4)|0;v=+h[G>>3];h[E>>3]=+h[(+h[E>>3]<v?E:G)>>3];w=+h[e+(d<<4)+8>>3];h[z>>3]=+h[(+h[z>>3]<w?E:G)+8>>3];h[n>>3]=+h[(+h[n>>3]>v?n:G)>>3];h[A>>3]=+h[(+h[A>>3]>w?n:G)+8>>3];d=d+1|0}k=+h[n>>3];j=+h[E>>3];t=k-j;u=+h[A>>3];v=+h[z>>3];w=u-v;o=+(m|0);p=+(s|0);q=t/p;r=w/o;a:do switch(eP(i)|0){case 1:if(q<r){p=q*p;o=q*o;break a}else{p=r*p;o=r*o;break a}case 2:{p=q*p;break}case 3:{o=r*o;break}case 4:{p=q*p;o=r*o;break}default:{}}while(0);if(p<t){t=(t-p)*.5;j=j+t;h[E>>3]=j;k=k-t;h[n>>3]=k}if(o<w){w=(w-o)*.5;h[z>>3]=v+w;h[A>>3]=u-w}if(!(c[b+152>>2]&8192)){c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];xO(x,b,B);c[E>>2]=c[x>>2];c[E+4>>2]=c[x+4>>2];c[E+8>>2]=c[x+8>>2];c[E+12>>2]=c[x+12>>2];c[B>>2]=c[n>>2];c[B+4>>2]=c[n+4>>2];c[B+8>>2]=c[n+8>>2];c[B+12>>2]=c[n+12>>2];xO(y,b,B);c[n>>2]=c[y>>2];c[n+4>>2]=c[y+4>>2];c[n+8>>2]=c[y+8>>2];c[n+12>>2]=c[y+12>>2];k=+h[n>>3];j=+h[E>>3]}if(j>k){h[E>>3]=k;h[n>>3]=j}j=+h[z>>3];k=+h[A>>3];if(j>k){h[z>>3]=k;h[A>>3]=j}if(C|0){G=c[b+72>>2]|0;c[B>>2]=c[E>>2];c[B+4>>2]=c[E+4>>2];c[B+8>>2]=c[E+8>>2];c[B+12>>2]=c[E+12>>2];c[B+16>>2]=c[E+16>>2];c[B+20>>2]=c[E+20>>2];c[B+24>>2]=c[E+24>>2];c[B+28>>2]=c[E+28>>2];gP(b,D,B,g,G)}}}l=F;return}function eP(b){b=b|0;if(a[b>>0]|0)if(O$(b,138034)|0)if(O$(b,137966)|0)if(!(O$(b,108195)|0))b=4;else b=(QL(b)|0)<<24>>24!=0&1;else b=3;else b=2;else b=0;return b|0}function fP(a,b){a=a|0;b=+b;if(c[a+60>>2]|0)h[(c[a+16>>2]|0)+152>>3]=b;return}\n  function SX(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=f-e|0;a:do if((h|0)>0){l=b+72|0;switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{c[g>>2]=e;f=0;break a}case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[b+340>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[b+344>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[b+348>>2]&127](b,e)|0)){c[g>>2]=e;f=0;break a}else h=4;break}default:{c[g>>2]=e;f=0;break a}}i=b+328|0;j=b+332|0;k=b+336|0;e=e+h|0;b:while(1){h=f-e|0;if((h|0)<=0){f=-20;break a}switch(a[l+(d[e>>0]|0)>>0]|0){case 29:{h=17;break b}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{h=28;break b}case 27:case 26:case 25:case 24:case 22:{h=1;break}case 5:{if((h|0)<2){f=-2;break a}if(!(lb[c[i>>2]&127](b,e)|0)){h=20;break b}else h=2;break}case 6:{if((h|0)<3){f=-2;break a}if(!(lb[c[j>>2]&127](b,e)|0)){h=23;break b}else h=3;break}case 7:{if((h|0)<4){f=-2;break a}if(!(lb[c[k>>2]&127](b,e)|0)){h=26;break b}else h=4;break}default:{h=29;break b}}e=e+h|0}if((h|0)==17){c[g>>2]=e;f=0;break}else if((h|0)==20){c[g>>2]=e;f=0;break}else if((h|0)==23){c[g>>2]=e;f=0;break}else if((h|0)==26){c[g>>2]=e;f=0;break}else if((h|0)==28){c[g>>2]=e;f=20;break}else if((h|0)==29){c[g>>2]=e;f=0;break}}else f=-1;while(0);return f|0}function TX(){return 58116}function UX(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=l;l=l+16|0;g=i;c[g>>2]=d;h=c[b>>2]|0;a=f-(c[e>>2]|0)|0;if((d-h|0)>(a|0)){a=h+a|0;c[g>>2]=a;f=1}else{f=0;a=d}fX(h,g);h=c[g>>2]|0;d=c[b>>2]|0;g=h-d|0;F3(c[e>>2]|0,d|0,g|0)|0;c[b>>2]=(c[b>>2]|0)+g;c[e>>2]=(c[e>>2]|0)+g;l=i;return (f?2:h>>>0<a>>>0&1)|0}function VX(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=d+72|0;k=f;l=h;m=c[e>>2]|0;n=c[g>>2]|0;a:while(1){d=m>>>0<f>>>0;if(!(n>>>0<h>>>0&d)){o=12;break}d=a[m>>0]|0;i=d&255;switch(a[j+i>>0]|0){case 5:{if((k-m|0)<2){d=1;break a}b[n>>1]=(d&31)<<6|a[m+1>>0]&63;m=m+2|0;n=n+2|0;continue a}case 6:{if((k-m|0)<3){d=1;break a}b[n>>1]=(a[m+1>>0]&63)<<6|i<<12|a[m+2>>0]&63;m=m+3|0;n=n+2|0;continue a}case 7:{if((l-n|0)<4){d=2;break a}if((k-m|0)<4){d=1;break a}i=((a[m+1>>0]&63)<<12|(d&7)<<18|(a[m+2>>0]&63)<<6|a[m+3>>0]&63)+-65536|0;b[n>>1]=i>>>10|55296;b[n+2>>1]=i&1023|56320;m=m+4|0;n=n+4|0;continue a}default:{b[n>>1]=d<<24>>24;m=m+1|0;n=n+2|0;continue a}}}if((o|0)==12)d=d?2:0;c[e>>2]=m;c[g>>2]=n;return d|0}function WX(a,b){a=a|0;b=b|0;a=d[b>>0]|0;b=d[b+1>>0]|0;return 1<<(b&31)&c[56836+(((d[140962+(a>>>2&7)>>0]|0)<<3|a<<1&6|b>>>5&1)<<2)>>2]|0}function XX(b,e){b=b|0;e=e|0;var f=0;f=d[e+1>>0]|0;b=d[e+2>>0]|0;return 1<<(b&31)&c[56836+(((d[140962+(f>>>2&15|a[e>>0]<<4&255)>>0]|0)<<3|f<<1&6|b>>>5&1)<<2)>>2]|0}function YX(a,b){a=a|0;b=b|0;return 0}function ZX(a,b){a=a|0;b=b|0;a=d[b>>0]|0;b=d[b+1>>0]|0;return 1<<(b&31)&c[56836+(((d[140706+(a>>>2&7)>>0]|0)<<3|a<<1&6|b>>>5&1)<<2)>>2]|0}function _X(b,e){b=b|0;e=e|0;var f=0;f=d[e+1>>0]|0;b=d[e+2>>0]|0;return 1<<(b&31)&c[56836+(((d[140706+(f>>>2&15|a[e>>0]<<4&255)>>0]|0)<<3|f<<1&6|b>>>5&1)<<2)>>2]|0}function $X(a,b){a=a|0;b=b|0;if((d[b>>0]|0)<194)return 1;else{b=d[b+1>>0]|0;return b>>>7^1|(b&192|0)==192|0}return 0}function aY(b,c){b=b|0;c=c|0;var d=0;b=a[c+2>>0]|0;do if(b<<24>>24>-1)b=1;else{d=a[c>>0]|0;if(d<<24>>24==-17?(a[c+1>>0]|0)==-65:0)if((b&255)>189){b=1;break}else{b=191;c=-65}else{if((b&255)>191){b=1;break}c=a[c+1>>0]|0;b=c&255;if(d<<24>>24==-32){b=(c&255)<160|(b&192|0)==192;break}}b=(b&128|0)==0?1:d<<24>>24==-19?(c&255)>159:(b&192|0)==192}while(0);return b&1|0}function bY(b,c){b=b|0;c=c|0;var e=0;e=d[c+3>>0]|0;do if(!((e&128|0)==0|(e&192|0)==192)?(e=d[c+2>>0]|0,!((e&128|0)==0|(e&192|0)==192)):0){e=a[c>>0]|0;b=a[c+1>>0]|0;c=b&255;if(e<<24>>24==-16){b=(b&255)<144|(c&192|0)==192;break}else{b=(c&128|0)==0?1:e<<24>>24==-12?(b&255)>143:(c&192|0)==192;break}}else b=1;while(0);return b&1|0}function cY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a:do if(e>>>0<f>>>0){i=e;m=f-i|0;k=(m&1|0)==0;m=m&-2;l=(m|0)==0;m=k|l?f:e+m|0;if(k|l^1){f=a[e+1>>0]|0;if(!(f<<24>>24)){h=a[e>>0]|0;j=h;h=d[b+72+(h&255)>>0]|0}else{h=a[e>>0]|0;j=h;h=sY(f,h)|0}do switch(h|0){case 12:{f=EY(12,b,e+2|0,m,g)|0;break a}case 13:{f=EY(13,b,e+2|0,m,g)|0;break a}case 2:{h=e+2|0;if((m-h|0)<=1){f=-1;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=sY(f,a[h>>0]|0)|0;switch(f|0){case 16:{f=FY(b,e+4|0,m,g)|0;break a}case 15:{f=AY(b,e+4|0,m,g)|0;break a}case 7:case 6:case 5:case 29:case 24:case 22:{c[g>>2]=e;f=29;break a}default:{c[g>>2]=h;f=0;break a}}}case 9:{if((e+2|0)==(m|0)){c[g>>2]=m;f=-15;break a}else i=7;break}case 10:case 21:{i=7;break}case 30:{f=uY(b,e+2|0,m,g)|0;break a}case 35:{c[g>>2]=e+2;f=38;break a}case 20:{c[g>>2]=e+2;f=25;break a}case 4:{h=e+2|0;f=m-h|0;if((f|0)<=1){f=-26;break a}if((a[e+3>>0]|0)==0?(a[h>>0]|0)==93:0){if((f|0)<=3){f=-1;break a}if((a[e+5>>0]|0)==0?(a[e+4>>0]|0)==62:0){c[g>>2]=e+6;f=34;break a}}c[g>>2]=h;f=26;break a}case 31:{c[g>>2]=e+2;f=23;break a}case 32:{h=e+2|0;if((m-h|0)<=1){f=-24;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=sY(f,a[h>>0]|0)|0;switch(f|0){case 33:{c[g>>2]=e+4;f=36;break a}case 15:{c[g>>2]=e+4;f=35;break a}case 34:{c[g>>2]=e+4;f=37;break a}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{c[g>>2]=h;f=24;break a}default:{c[g>>2]=h;f=0;break a}}}case 36:{c[g>>2]=e+2;f=21;break a}case 11:{c[g>>2]=e+2;f=17;break a}case 19:{f=GY(b,e+2|0,m,g)|0;break a}case 5:{if((m-i|0)<2){f=-2;break a}c[g>>2]=e;f=0;break a}case 6:{if((m-i|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((m-i|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 24:case 22:{f=18;i=61;break}case 23:case 27:case 26:case 25:{f=19;i=61;break}case 29:{i=f&255;h=j&255;f=h>>>5;h=1<<(h&31);if(!(h&c[56836+((f|d[140706+i>>0]<<3)<<2)>>2]))if(!(c[56836+((d[140962+i>>0]<<3|f)<<2)>>2]&h))i=64;else{f=19;i=61}else{f=18;i=61}break}default:i=64}while(0);if((i|0)==7){k=m;b=b+72|0;j=e;b:while(1){i=j;j=j+2|0;if((k-j|0)<=1){i=28;break}f=a[i+3>>0]|0;h=a[j>>0]|0;if(!(f<<24>>24))f=d[b+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 10:case 21:continue b;case 9:break;default:{i=27;break b}}if((i+4|0)==(m|0)){i=27;break}}if((i|0)==27){c[g>>2]=j;f=15;break}else if((i|0)==28){c[g>>2]=j;f=15;break}}else if((i|0)==61){l=b+72|0;h=e+2|0;c:while(1){e=f&255;d:while(1){k=m-h|0;if((k|0)<=1){i=104;break c}i=a[h+1>>0]|0;j=a[h>>0]|0;if(!(i<<24>>24))b=d[l+(j&255)>>0]|0;else b=sY(i,j)|0;switch(b|0){case 5:{i=73;break c}case 6:{i=74;break c}case 7:{i=76;break c}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{i=78;break c}case 34:{i=94;break c}case 33:{i=97;break c}case 15:{i=100;break c}case 29:{k=j&255;if(!(1<<(k&31)&c[56836+((k>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){i=71;break c}break}case 27:case 26:case 25:case 24:case 22:break;case 23:{k=h+2|0;switch(e&63){case 41:{f=19;h=k;continue c}case 18:break d;default:{h=k;continue d}}}default:{i=103;break c}}h=h+2|0}b=m-k|0;if((b|0)<=1){f=-1;break a}f=a[h+3>>0]|0;i=a[k>>0]|0;if(!(f<<24>>24))j=d[l+(i&255)>>0]|0;else j=sY(f,i)|0;switch(j|0){case 5:{i=89;break c}case 6:{i=90;break c}case 7:{i=92;break c}case 29:{e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|d[140962+(f&255)>>0]<<3)<<2)>>2])){i=87;break c}break}case 27:case 26:case 25:case 24:case 22:break;default:{f=19;h=k;continue c}}f=41;h=h+4|0}switch(i|0){case 71:{c[g>>2]=h;f=0;break a}case 73:{c[g>>2]=h;f=0;break a}case 74:{if((k|0)<3){f=-2;break a}c[g>>2]=h;f=0;break a}case 76:{if((k|0)<4){f=-2;break a}c[g>>2]=h;f=0;break a}case 78:{c[g>>2]=h;break a}case 87:{c[g>>2]=k;f=0;break a}case 89:{c[g>>2]=k;f=0;break a}case 90:{if((b|0)<3){f=-2;break a}c[g>>2]=k;f=0;break a}case 92:{if((b|0)<4){f=-2;break a}c[g>>2]=k;f=0;break a}case 94:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=32;break a}case 97:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=31;break a}case 100:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=30;break a}case 103:{c[g>>2]=h;f=0;break a}case 104:{f=0-f|0;break a}}}else if((i|0)==64){c[g>>2]=e;f=0;break}}else f=-1}else f=-4;while(0);return f|0}function dY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0<f>>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e+1>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e>>0]|0)>>0]|0;else f=sY(f,a[e>>0]|0)|0;do switch(f|0){case 2:{f=xY(b,e+2|0,i,g)|0;break a}case 3:{f=tY(b,e+2|0,i,g)|0;break a}case 9:{h=e+2|0;if((i-h|0)<=1){f=-3;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=sY(f,a[h>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 4:{h=e+2|0;if((i-h|0)<=1){f=-5;break a}if((a[e+3>>0]|0)==0?(a[h>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-5;break a}if((a[e+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=f;f=0;break a}else f=i}else f=i;break}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:{h=e+2|0;f=i}}while(0);j=b+72|0;b=h;b:while(1){e=f-b|0;if((e|0)<=1){h=52;break}h=a[b+1>>0]|0;i=a[b>>0]|0;if(!(h<<24>>24))h=d[j+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{h=50;break b}case 5:{b=b+2|0;continue b}case 6:{if((e|0)<3){h=38;break b}b=b+3|0;continue b}case 7:{if((e|0)<4){h=41;break b}b=b+4|0;continue b}case 4:{if((e|0)<=3){h=50;break b}h=b+2|0;if(a[b+3>>0]|0){b=h;continue b}if((a[h>>0]|0)!=93){b=h;continue b}if((e|0)<=5){h=50;break b}i=b+4|0;if(a[b+5>>0]|0){b=h;continue b}if((a[i>>0]|0)==62){h=49;break b}else{b=h;continue b}}default:{b=b+2|0;continue b}}}if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==41){c[g>>2]=b;f=6;break}else if((h|0)==49){c[g>>2]=i;f=0;break}else if((h|0)==50){c[g>>2]=b;f=6;break}else if((h|0)==52){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function eY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0<f>>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e+1>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e>>0]|0)>>0]|0;else f=sY(f,a[e>>0]|0)|0;switch(f|0){case 4:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}if((a[e+3>>0]|0)==0?(a[h>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-1;break a}if((a[e+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=e+6;f=40;break a}}break}case 9:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}f=a[e+3>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[h>>0]|0)>>0]|0;else f=sY(f,a[h>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;i=f;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;i=f;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;i=f;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:h=e+2|0}j=b+72|0;b=h;b:while(1){e=i-b|0;if((e|0)<=1){h=40;break}f=a[b+1>>0]|0;h=a[b>>0]|0;if(!(f<<24>>24))f=d[j+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 10:case 9:case 8:case 1:case 0:case 4:{h=38;break b}case 6:{if((e|0)<3){h=35;break b}else f=3;break}case 7:{if((e|0)<4){h=37;break b}else f=4;break}default:f=2}b=b+f|0}if((h|0)==35){c[g>>2]=b;f=6;break}else if((h|0)==37){c[g>>2]=b;f=6;break}else if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==40){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function fY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f-e|0;k=(k&1|0)==0?f:e+(k&-2)|0;j=b+72|0;i=0;f=e;a:while(1){h=k-f|0;if((h|0)<=1){f=-1;break}b=a[f+1>>0]|0;e=a[f>>0]|0;if(!(b<<24>>24))b=d[j+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 8:case 1:case 0:{l=12;break a}case 5:{h=i;f=f+2|0;i=h;continue a}case 6:{if((h|0)<3){f=-2;break a}h=i;f=f+3|0;i=h;continue a}case 7:{if((h|0)<4){f=-2;break a}h=i;f=f+4|0;i=h;continue a}case 2:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[f+3>>0]|0){h=i;f=b;i=h;continue a}if((a[b>>0]|0)!=33){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[f+5>>0]|0){h=i;f=b;i=h;continue a}h=(a[b>>0]|0)==91;i=i+(h&1)|0;f=h?f+6|0:b;continue a}case 4:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[f+3>>0]|0){h=i;f=b;i=h;continue a}if((a[b>>0]|0)!=93){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[f+5>>0]|0){h=i;f=b;i=h;continue a}if((a[b>>0]|0)!=62){h=i;f=b;i=h;continue a}f=f+6|0;if(!i){l=26;break a}i=i+-1|0;continue a}default:{h=i;f=f+2|0;i=h;continue a}}}if((l|0)==12){c[g>>2]=f;f=0}else if((l|0)==26){c[g>>2]=f;f=42}return f|0}function gY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0<f>>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=30;break}h=a[j+1>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 3:{i=11;break a}case 2:{i=14;break a}case 10:{i=15;break a}case 9:{i=18;break a}case 21:{i=25;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=tY(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14){c[g>>2]=j;h=0;break}else if((i|0)==15)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==18){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[e+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==25)if((j|0)==(e|0)){c[g>>2]=e+2;h=39;break}else{c[g>>2]=j;h=6;break}else if((i|0)==30){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function hY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0<f>>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=29;break}h=a[j+1>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 3:{i=11;break a}case 30:{i=14;break a}case 10:{i=17;break a}case 9:{i=20;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=tY(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14)if((j|0)==(e|0)){h=uY(b,e+2|0,f,g)|0;h=(h|0)==22?0:h;break}else{c[g>>2]=j;h=6;break}else if((i|0)==17)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==20){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[e+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==29){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function iY(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=d;b=c;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){g=7;break}if((f-b|0)<2){b=0;break}if(a[b+1>>0]|0){b=0;break}if((a[b>>0]|0)!=c<<24>>24){b=0;break}e=e+1|0;b=b+2|0}if((g|0)==7)b=(b|0)==(d|0)&1;return b|0}function jY(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=b+72|0;f=c;a:while(1){b=a[f+1>>0]|0;e=a[f>>0]|0;if(!(b<<24>>24))b=d[g+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 5:{b=2;break}case 6:{b=3;break}case 7:{b=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{b=2;break}default:break a}f=f+b|0}return f-c|0}function kY(b,c){b=b|0;c=c|0;var e=0,f=0;f=b+72|0;a:while(1){b=a[c+1>>0]|0;e=a[c>>0]|0;if(!(b<<24>>24))b=d[f+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 21:case 9:case 10:break;default:break a}c=c+2|0}return c|0}function lY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=b+72|0;m=0;n=0;b=1;a:while(1){l=e+2|0;i=e+3|0;h=a[i>>0]|0;j=h<<24>>24==0;k=a[l>>0]|0;if(j)h=d[o+(k&255)>>0]|0;else h=sY(h,k)|0;do switch(h|0){case 5:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 6:{if(b|0){j=b;k=n;l=m;e=i;b=j;n=k;m=l;continue a}if((n|0)>=(f|0)){k=n;l=m;b=1;e=i;n=k;m=l;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;k=n;l=m;b=1;e=i;n=k;m=l;continue a}case 7:{if(!b)if((n|0)<(f|0)){c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;b=1}else b=1;k=n;l=m;e=e+4|0;n=k;m=l;continue a}case 24:case 22:case 29:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 12:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=12;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=12;b=2;e=l;n=k;continue a}if((m|0)!=12){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=12;n=n+1|0;b=0;e=l;continue a}case 13:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=13;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=13;b=2;e=l;n=k;continue a}if((m|0)!=13){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=13;n=n+1|0;b=0;e=l;continue a}case 3:{if((n|0)>=(f|0)){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}case 21:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}i=g+(n<<4)+12|0;if(!(a[i>>0]|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}do if(j&(l|0)!=(c[g+(n<<4)+4>>2]|0)&k<<24>>24==32){h=a[e+5>>0]|0;b=a[e+4>>0]|0;if(!(h<<24>>24)){if(b<<24>>24==32)break;b=d[o+(b&255)>>0]|0}else b=sY(h,b)|0;if((b|0)!=(m|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}}while(0);a[i>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 10:case 9:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 17:case 11:if((b|0)==2){j=n;k=m;b=2;e=l;n=j;m=k;continue a}else break a;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}while(0)}return n|0}function mY(b,c){b=b|0;c=c|0;var d=0,e=0;b=c+4|0;a:do if((a[c+5>>0]|0)==0?(a[b>>0]|0)==120:0){c=c+6|0;b=0;while(1){b:while(1){if(!(a[c+1>>0]|0)){d=a[c>>0]|0;if(d<<24>>24==59){e=17;break a}d=d<<24>>24;switch(d|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{e=8;break b}case 70:case 69:case 68:case 67:case 66:case 65:{e=9;break b}case 102:case 101:case 100:case 99:case 98:case 97:{e=10;break b}default:{}}}c=c+2|0}if((e|0)==8){e=0;b=d+-48|b<<4}else if((e|0)==9){e=0;b=(b<<4)+-55+d|0}else if((e|0)==10){e=0;b=(b<<4)+-87+d|0}if((b|0)<1114112)c=c+2|0;else{b=-1;break}}}else{d=b;b=0;e=13}while(0);c:do if((e|0)==13)while(1){e=0;if(!(a[d+1>>0]|0)){c=a[d>>0]|0;if(c<<24>>24==59){e=17;break c}c=c<<24>>24}else c=-1;b=(b*10|0)+-48+c|0;if((b|0)>=1114112){b=-1;break}else{d=d+2|0;e=13}}while(0);if((e|0)==17)b=jX(b)|0;return b|0}function nY(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do switch((d-c|0)/2|0|0){case 2:{if((a[c+3>>0]|0)==0?(a[c+2>>0]|0)==116:0){if(!(a[c+1>>0]|0))b=a[c>>0]|0;else b=-1;b=(b|0)==108?60:(b|0)==103?62:0}else e=27;break}case 3:{if((((((a[c+1>>0]|0)==0?(a[c>>0]|0)==97:0)?(a[c+3>>0]|0)==0:0)?(a[c+2>>0]|0)==109:0)?(a[c+5>>0]|0)==0:0)?(a[c+4>>0]|0)==112:0)b=38;else e=27;break}case 4:{if(!(a[c+1>>0]|0))switch(a[c>>0]|0){case 113:{if(a[c+3>>0]|0){e=27;break a}if((a[c+2>>0]|0)!=117){e=27;break a}if(a[c+5>>0]|0){e=27;break a}if((a[c+4>>0]|0)!=111){e=27;break a}if(a[c+7>>0]|0){e=27;break a}if((a[c+6>>0]|0)==116){b=34;break a}else{e=27;break a}}case 97:{if(a[c+3>>0]|0){e=27;break a}if((a[c+2>>0]|0)!=112){e=27;break a}if(a[c+5>>0]|0){e=27;break a}if((a[c+4>>0]|0)!=111){e=27;break a}if(a[c+7>>0]|0){e=27;break a}if((a[c+6>>0]|0)==115){b=39;break a}else{e=27;break a}}default:{e=27;break a}}else e=27;break}default:e=27}while(0);if((e|0)==27)b=0;return b|0}function oY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=b+72|0;k=g+4|0;while(1){if((f-e|0)<=1)break;b=a[e+1>>0]|0;h=a[e>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=sY(b,h)|0;switch(b|0){case 5:{e=e+2|0;break}case 6:{e=e+3|0;break}case 7:{e=e+4|0;break}case 10:{c[k>>2]=-1;c[g>>2]=(c[g>>2]|0)+1;e=e+2|0;break}case 9:{c[g>>2]=(c[g>>2]|0)+1;i=e+2|0;if((f-i|0)>1){b=a[e+3>>0]|0;h=a[i>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=sY(b,h)|0;e=(b|0)==10?e+4|0:i}else e=i;c[k>>2]=-1;break}default:e=e+2|0}c[k>>2]=(c[k>>2]|0)+1}return}function pY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f+-2|0;i=b+72|0;f=e;a:while(1){h=f+2|0;if((j-h|0)<=1){f=1;break}f=a[f+3>>0]|0;b=f<<24>>24==0;e=a[h>>0]|0;if(b)f=d[i+(e&255)>>0]|0;else f=sY(f,e)|0;switch(f|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:{f=h;continue a}case 21:if(b&e<<24>>24==9){k=12;break a}else{f=h;continue a}case 22:case 26:{if(!b){k=12;break a}if(e<<24>>24>=0){f=h;continue a}break}default:if(!b){k=12;break a}}switch(e<<24>>24|0){case 64:case 36:{f=h;break}default:{k=12;break a}}}if((k|0)==12){c[g>>2]=h;f=0}return f|0}function qY(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[e>>2]|0;k=j+(f-j&-2)|0;l=k;m=h;a:while(1){if(j>>>0>=k>>>0){b=0;break}i=a[j>>0]|0;b=a[j+1>>0]|0;f=b&255;switch(b<<24>>24){case 0:{if(i<<24>>24>-1){b=c[g>>2]|0;if((b|0)==(h|0)){b=2;break a}c[g>>2]=b+1;a[b>>0]=i;b=j}else n=7;break}case 7:case 6:case 5:case 4:case 3:case 2:case 1:{n=7;break}case -37:case -38:case -39:case -40:{b=c[g>>2]|0;if((m-b|0)<4){b=2;break a}if((l-j|0)<4){b=1;break a}o=i&255;i=(f<<2&12|o>>>6)+1|0;c[g>>2]=b+1;a[b>>0]=i>>>2|240;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>2&15|i<<4&48|128;b=j+2|0;i=d[b>>0]|0;f=(o<<4&48|i>>>6|a[j+3>>0]<<2&12|128)&255;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=f;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=i&63|128;break}default:{b=c[g>>2]|0;if((m-b|0)<3){b=2;break a}c[g>>2]=b+1;a[b>>0]=f>>>4|224;o=i&255;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2&60|128;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}}if((n|0)==7){n=0;b=c[g>>2]|0;if((m-b|0)<2){b=2;break}o=i&255;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2|192;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}j=b+2|0}c[e>>2]=j;return b|0}function rY(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;j=c[f>>2]|0;l=g-j&-2;e=j+l|0;if((l|0)>(i-(c[h>>2]|0)|0)){k=e+-2|0;g=(a[k+1>>0]&-8)<<24>>24==-40;l=g&1;e=g?k:e}else l=0;g=j;while(1){j=g>>>0<e>>>0;k=c[h>>2]|0;if(!(j&k>>>0<i>>>0))break;j=((d[g+1>>0]|0)<<8|(d[g>>0]|0))&65535;c[h>>2]=k+2;b[k>>1]=j;k=(c[f>>2]|0)+2|0;c[f>>2]=k;g=k}return ((k|0)!=(i|0)|j^1?l:2)|0}function sY(a,b){a=a|0;b=b|0;var c=0;switch(a<<24>>24){case -37:case -38:case -39:case -40:{a=7;break}case -33:case -34:case -35:case -36:{a=8;break}case -1:{if((b&255)>253)a=0;else c=4;break}default:c=4}if((c|0)==4)a=29;return a|0}function tY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=f;j=l-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56836+((j>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;b=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;b=0;break a}case 6:{if((j|0)<3){b=-2;break a}c[g>>2]=e;b=0;break a}case 7:{if((j|0)<4){b=-2;break a}c[g>>2]=e;b=0;break a}case 19:{b=vY(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;b=0;break a}}k=b+72|0;j=e;b:while(1){i=j+2|0;e=l-i|0;if((e|0)<=1){b=-1;break a}b=a[j+3>>0]|0;h=a[i>>0]|0;if(!(b<<24>>24))f=d[k+(h&255)>>0]|0;else f=sY(b,h)|0;switch(f|0){case 27:case 26:case 25:case 24:case 22:{j=i;continue b}case 5:{h=23;break b}case 6:{h=24;break b}case 7:{h=26;break b}case 18:{h=28;break b}case 29:break;default:{h=29;break b}}e=h&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(b&255)>>0]|0)<<3)<<2)>>2])){h=22;break}else j=i}if((h|0)==22){c[g>>2]=i;b=0;break}else if((h|0)==23){c[g>>2]=i;b=0;break}else if((h|0)==24){if((e|0)<3){b=-2;break}c[g>>2]=i;b=0;break}else if((h|0)==26){if((e|0)<4){b=-2;break}c[g>>2]=i;b=0;break}else if((h|0)==28){c[g>>2]=j+4;b=9;break}else if((h|0)==29){c[g>>2]=i;b=0;break}}else b=-1;while(0);return b|0}function uY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56836+((l>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 30:case 9:case 10:case 21:{c[g>>2]=e;f=22;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){k=b+2|0;e=f-k|0;if((e|0)<=1){f=-1;break a}h=a[b+3>>0]|0;i=a[k>>0]|0;if(!(h<<24>>24))j=d[l+(i&255)>>0]|0;else j=sY(h,i)|0;switch(j|0){case 27:case 26:case 25:case 24:case 22:{b=k;continue b}case 5:{h=23;break b}case 6:{h=24;break b}case 7:{h=26;break b}case 18:{h=28;break b}case 29:break;default:{h=29;break b}}e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(h&255)>>0]|0)<<3)<<2)>>2])){h=22;break}else b=k}if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){c[g>>2]=k;f=0;break}else if((h|0)==24){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==26){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==28){c[g>>2]=b+4;f=28;break}else if((h|0)==29){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function vY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f;a:do if((k-e|0)>1){i=a[e+1>>0]|0;h=a[e>>0]|0;do if(!(i<<24>>24))if(h<<24>>24==120){h=wY(b,e+2|0,f,g)|0;break a}else{h=d[b+72+(h&255)>>0]|0;break}else h=sY(i,h)|0;while(0);if((h|0)!=25){c[g>>2]=e;h=0;break}j=b+72|0;b=e;b:while(1){i=b+2|0;if((k-i|0)<=1){h=-1;break a}h=a[b+3>>0]|0;f=a[i>>0]|0;if(!(h<<24>>24))h=d[j+(f&255)>>0]|0;else h=sY(h,f)|0;switch(h|0){case 25:{b=i;break}case 18:{f=15;break b}default:{f=16;break b}}}if((f|0)==15){c[g>>2]=b+4;h=10;break}else if((f|0)==16){c[g>>2]=i;h=0;break}}else h=-1;while(0);return h|0}function wY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a:do if((f-e|0)>1){h=a[e+1>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e>>0]|0)>>0]|0;else h=sY(h,a[e>>0]|0)|0;if((h&-2|0)!=24){c[g>>2]=e;f=0;break}j=b+72|0;b:while(1){i=e+2|0;if((f-i|0)<=1){f=-1;break a}h=a[e+3>>0]|0;b=a[i>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=sY(h,b)|0;switch(h|0){case 24:case 25:{e=i;break}case 18:{h=13;break b}default:{h=14;break b}}}if((h|0)==13){c[g>>2]=e+4;f=10;break}else if((h|0)==14){c[g>>2]=i;f=0;break}}else f=-1;while(0);return f|0}function xY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=f;j=o-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{m=i&255;if(!(1<<(m&31)&c[56836+((m>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;h=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;h=0;break a}case 6:{if((j|0)<3){h=-2;break a}c[g>>2]=e;h=0;break a}case 7:{if((j|0)<4){h=-2;break a}c[g>>2]=e;h=0;break a}case 16:{i=e+2|0;if((o-i|0)<=1){h=-1;break a}h=a[e+3>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[i>>0]|0)>>0]|0;else h=sY(h,a[i>>0]|0)|0;switch(h|0){case 27:{h=yY(b,e+4|0,f,g)|0;break a}case 20:{h=zY(e+4|0,f,g)|0;break a}default:{c[g>>2]=i;h=0;break a}}}case 15:{h=AY(b,e+2|0,f,g)|0;break a}case 17:{h=BY(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;h=0;break a}}m=b+72|0;l=0;h=e+2|0;b:while(1){c:while(1){i=o-h|0;if((i|0)<=1){h=-1;break a}j=a[h+1>>0]|0;k=a[h>>0]|0;if(!(j<<24>>24))e=d[m+(k&255)>>0]|0;else e=sY(j,k)|0;switch(e|0){case 5:{n=34;break b}case 6:{n=35;break b}case 7:{n=37;break b}case 10:case 9:case 21:{n=55;break b}case 11:{n=69;break b}case 17:break b;case 23:break c;case 29:{e=k&255;if(!(1<<(e&31)&c[56836+((e>>>5|d[140962+(j&255)>>0]<<3)<<2)>>2])){n=32;break b}break}case 27:case 26:case 25:case 24:case 22:break;default:{n=75;break b}}h=h+2|0}if(l|0){n=40;break}k=h+2|0;e=o-k|0;if((e|0)<=1){h=-1;break a}l=a[h+3>>0]|0;i=a[k>>0]|0;if(!(l<<24>>24))j=d[m+(i&255)>>0]|0;else j=sY(l,i)|0;switch(j|0){case 5:{n=49;break b}case 6:{n=50;break b}case 7:{n=52;break b}case 29:{e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|d[140706+(l&255)>>0]<<3)<<2)>>2])){n=47;break b}break}case 24:case 22:break;default:{n=54;break b}}l=1;h=h+4|0}d:switch(n|0){case 32:{c[g>>2]=h;h=0;break a}case 34:{c[g>>2]=h;h=0;break a}case 35:{if((i|0)<3){h=-2;break a}c[g>>2]=h;h=0;break a}case 37:{if((i|0)<4){h=-2;break a}c[g>>2]=h;h=0;break a}case 40:{c[g>>2]=h;h=0;break a}case 47:{c[g>>2]=k;h=0;break a}case 49:{c[g>>2]=k;h=0;break a}case 50:{if((e|0)<3){h=-2;break a}c[g>>2]=k;h=0;break a}case 52:{if((e|0)<4){h=-2;break a}c[g>>2]=k;h=0;break a}case 54:{c[g>>2]=k;h=0;break a}case 55:{e:while(1){n=0;i=h+2|0;j=o-i|0;if((j|0)<=1){h=-1;break a}k=a[h+3>>0]|0;e=a[i>>0]|0;if(!(k<<24>>24))l=d[m+(e&255)>>0]|0;else l=sY(k,e)|0;switch(l|0){case 11:{h=i;n=69;break d}case 17:{h=i;break d}case 10:case 9:case 21:{h=i;n=55;break}case 29:{n=60;break e}case 24:case 22:break e;case 5:{n=63;break e}case 6:{n=64;break e}case 7:{n=66;break e}default:{n=68;break e}}}if((n|0)==60){o=e&255;if(!(1<<(o&31)&c[56836+((o>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=i;h=0;break a}}else if((n|0)==63){c[g>>2]=i;h=0;break a}else if((n|0)==64){if((j|0)<3){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==66){if((j|0)<4){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==68){c[g>>2]=i;h=0;break a}h=CY(b,h+4|0,f,g)|0;break a}case 75:{c[g>>2]=h;h=0;break a}}if((n|0)==69){c[g>>2]=h+2;h=2;break}i=h+2|0;if((o-i|0)>1){if((a[h+3>>0]|0)==0?(a[i>>0]|0)==62:0){c[g>>2]=h+4;h=4;break}c[g>>2]=i;h=0}else h=-1}else h=-1;while(0);return h|0}function yY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f;a:do if((j-e|0)>1){if((a[e+1>>0]|0)==0?(a[e>>0]|0)==45:0){i=b+72|0;h=e+2|0;b:while(1){e=j-h|0;if((e|0)<=1){f=-1;break a}f=a[h+1>>0]|0;b=a[h>>0]|0;if(!(f<<24>>24))f=d[i+(b&255)>>0]|0;else f=sY(f,b)|0;switch(f|0){case 8:case 1:case 0:{k=16;break b}case 5:{h=h+2|0;continue b}case 6:{if((e|0)<3){f=-2;break a}h=h+3|0;continue b}case 7:{if((e|0)<4){f=-2;break a}h=h+4|0;continue b}case 27:{f=h+2|0;if((j-f|0)<=1){f=-1;break a}if(a[h+3>>0]|0){h=f;continue b}if((a[f>>0]|0)==45)break b;else{h=f;continue b}}default:{h=h+2|0;continue b}}}if((k|0)==16){c[g>>2]=h;f=0;break}f=h+4|0;if((j-f|0)<=1){f=-1;break}if((a[h+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=h+6;f=13;break}c[g>>2]=f;f=0;break}c[g>>2]=e;f=0}else f=-1;while(0);return f|0}function zY(b,d,e){b=b|0;d=d|0;e=e|0;if((d-b|0)>11){d=0;while(1){if((d|0)>=6){d=8;break}if(a[b+1>>0]|0){d=0;break}if((a[b>>0]|0)!=(a[141218+d>>0]|0)){d=0;break}d=d+1|0;b=b+2|0}c[e>>2]=b}else d=-1;return d|0}function AY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q;o=f;j=o-e|0;a:do if((j|0)>1){f=a[e+1>>0]|0;if(!(f<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(f,i)|0}switch(h|0){case 29:{m=i&255;if(!(1<<(m&31)&c[56836+((m>>>5|d[140706+(f&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}m=b+72|0;k=e;b:while(1){f=k+2|0;h=o-f|0;if((h|0)<=1){f=-1;break a}i=a[k+3>>0]|0;j=a[f>>0]|0;if(!(i<<24>>24))b=d[m+(j&255)>>0]|0;else b=sY(i,j)|0;switch(b|0){case 27:case 26:case 25:case 24:case 22:{k=f;continue b}case 5:{n=22;break b}case 6:{n=23;break b}case 7:{n=25;break b}case 10:case 9:case 21:{n=27;break b}case 15:{n=46;break b}case 29:break;default:break b}k=j&255;if(!(1<<(k&31)&c[56836+((k>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){n=21;break}else k=f}if((n|0)==21){c[g>>2]=f;f=0;break}else if((n|0)==22){c[g>>2]=f;f=0;break}else if((n|0)==23){if((h|0)<3){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==25){if((h|0)<4){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==27){if(!(DY(e,f,p)|0)){c[g>>2]=f;f=0;break}j=k+4|0;c:while(1){i=o-j|0;if((i|0)<=1){f=-1;break a}f=a[j+1>>0]|0;h=a[j>>0]|0;if(!(f<<24>>24))f=d[m+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 8:case 1:case 0:{n=40;break c}case 5:{j=j+2|0;continue c}case 6:{if((i|0)<3){f=-2;break a}j=j+3|0;continue c}case 7:{if((i|0)<4){f=-2;break a}j=j+4|0;continue c}case 15:{f=j+2|0;if((o-f|0)<=1){f=-1;break a}if(a[j+3>>0]|0){j=f;continue c}if((a[f>>0]|0)==62){n=44;break c}else{j=f;continue c}}default:{j=j+2|0;continue c}}}if((n|0)==40){c[g>>2]=j;f=0;break}else if((n|0)==44){c[g>>2]=j+4;f=c[p>>2]|0;break}}else if((n|0)==46){if(!(DY(e,f,p)|0)){c[g>>2]=f;f=0;break}f=k+4|0;if((o-f|0)<=1){f=-1;break}if((a[k+5>>0]|0)==0?(a[f>>0]|0)==62:0){c[g>>2]=k+6;f=c[p>>2]|0;break}}c[g>>2]=f;f=0}else f=-1;while(0);l=q;return f|0}function BY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56836+((l>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){j=b+2|0;e=f-j|0;if((e|0)<=1){f=-1;break a}h=a[b+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))k=d[l+(i&255)>>0]|0;else k=sY(h,i)|0;switch(k|0){case 23:case 27:case 26:case 25:case 24:case 22:{b=j;continue b}case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 10:case 9:case 21:{h=27;break b}case 11:{h=34;break b}case 29:break;default:{h=35;break b}}e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(h&255)>>0]|0)<<3)<<2)>>2])){h=21;break}else b=j}if((h|0)==21){c[g>>2]=j;f=0;break}else if((h|0)==22){c[g>>2]=j;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==27){c:while(1){k=j+2|0;if((f-k|0)<=1){f=-1;break a}h=a[j+3>>0]|0;i=a[k>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 10:case 9:case 21:{j=k;h=27;break}case 11:{h=32;break c}default:{h=33;break c}}}if((h|0)==32){c[g>>2]=j+4;f=5;break}else if((h|0)==33){c[g>>2]=k;f=0;break}}else if((h|0)==34){c[g>>2]=b+4;f=5;break}else if((h|0)==35){c[g>>2]=j;f=0;break}}else f=-1;while(0);return f|0}function CY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;q=s;c[q>>2]=e;r=f;o=b+72|0;h=0;a:while(1){b:while(1){m=r-e|0;if((m|0)<=1){e=-1;break a}i=a[e+1>>0]|0;j=a[e>>0]|0;if(!(i<<24>>24))k=d[o+(j&255)>>0]|0;else k=sY(i,j)|0;switch(k|0){case 5:{p=11;break a}case 6:{p=12;break a}case 7:{p=14;break a}case 23:{p=16;break b}case 10:case 9:case 21:{p=31;break b}case 14:{p=37;break b}case 29:{n=j&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){p=9;break a}break}case 27:case 26:case 25:case 24:case 22:break;default:{p=89;break a}}n=e+2|0;c[q>>2]=n;e=n}c:do if((p|0)==16){p=0;if(h|0){p=17;break a}h=e+2|0;c[q>>2]=h;i=h;j=r-i|0;if((j|0)<=1){e=-1;break a}k=a[e+3>>0]|0;m=a[h>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=sY(k,m)|0;switch(n|0){case 5:{p=25;break a}case 6:{p=26;break a}case 7:{p=28;break a}case 24:case 22:{h=1;break c}case 29:break;default:{p=30;break a}}n=m&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){p=24;break a}else h=1}else if((p|0)==31)while(1){p=0;i=e+2|0;c[q>>2]=i;j=i;if((r-j|0)<=1){e=-1;break a}e=a[e+3>>0]|0;h=a[i>>0]|0;if(!(e<<24>>24))e=d[o+(h&255)>>0]|0;else e=sY(e,h)|0;switch(e|0){case 14:{e=i;p=37;break c}case 9:case 10:case 21:{e=i;p=31;break}default:{p=36;break a}}}while(0);d:do if((p|0)==37){while(1){p=0;j=e+2|0;c[q>>2]=j;k=j;if((r-k|0)<=1){e=-1;break a}h=a[e+3>>0]|0;i=a[j>>0]|0;if(!(h<<24>>24))m=d[o+(i&255)>>0]|0;else m=sY(h,i)|0;if((m|1|0)==13)break;switch(m|0){case 9:case 10:case 21:{e=j;p=37;break}default:{p=43;break a}}}e=e+4|0;c[q>>2]=e;e:while(1){j=r-e|0;if((j|0)<=1){e=-1;break a}h=a[e+1>>0]|0;i=a[e>>0]|0;if(!(h<<24>>24))h=d[o+(i&255)>>0]|0;else h=sY(h,i)|0;if((h|0)==(m|0))break;switch(h|0){case 8:case 1:case 0:{p=56;break a}case 2:{p=61;break a}case 5:{n=e+2|0;c[q>>2]=n;e=n;continue e}case 6:{if((j|0)<3){e=-2;break a}n=e+3|0;c[q>>2]=n;e=n;continue e}case 7:{if((j|0)<4){e=-2;break a}n=e+4|0;c[q>>2]=n;e=n;continue e}case 3:{e=tY(b,e+2|0,f,q)|0;if((e|0)<1){p=59;break a}e=c[q>>2]|0;continue e}default:{n=e+2|0;c[q>>2]=n;e=n;continue e}}}i=e+2|0;c[q>>2]=i;k=i;if((r-k|0)<=1){e=-1;break a}h=a[e+3>>0]|0;j=a[i>>0]|0;if(!(h<<24>>24))h=d[o+(j&255)>>0]|0;else h=sY(h,j)|0;switch(h|0){case 11:{p=81;break a}case 17:{p=82;break a}case 10:case 9:case 21:{e=i;break}default:{p=68;break a}}f:while(1){i=e+2|0;c[q>>2]=i;h=i;j=r-h|0;if((j|0)<=1){e=-1;break a}k=a[e+3>>0]|0;m=a[i>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=sY(k,m)|0;switch(n|0){case 5:{p=76;break a}case 6:{p=77;break a}case 7:{p=79;break a}case 11:{p=81;break a}case 17:{p=82;break a}case 24:case 22:{h=0;break d}case 10:case 9:case 21:{e=i;break}case 29:break f;default:{p=87;break a}}}n=m&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){p=75;break a}else h=0}while(0);e=e+4|0;c[q>>2]=e}switch(p|0){case 9:{c[g>>2]=e;e=0;break}case 11:{c[g>>2]=e;e=0;break}case 12:{if((m|0)<3)e=-2;else{c[g>>2]=e;e=0}break}case 14:{if((m|0)<4)e=-2;else{c[g>>2]=e;e=0}break}case 17:{c[g>>2]=e;e=0;break}case 24:{c[g>>2]=h;e=0;break}case 25:{c[g>>2]=h;e=0;break}case 26:{if((j|0)<3)e=-2;else{c[g>>2]=h;e=0}break}case 28:{if((j|0)<4)e=-2;else{c[g>>2]=h;e=0}break}case 30:{c[g>>2]=i;e=0;break}case 36:{c[g>>2]=j;e=0;break}case 43:{c[g>>2]=k;e=0;break}case 56:{c[g>>2]=e;e=0;break}case 59:{if(!e){c[g>>2]=c[q>>2];e=0}break}case 61:{c[g>>2]=e;e=0;break}case 68:{c[g>>2]=k;e=0;break}case 75:{c[g>>2]=i;e=0;break}case 76:{c[g>>2]=i;e=0;break}case 77:{if((j|0)<3)e=-2;else{c[g>>2]=i;e=0}break}case 79:{if((j|0)<4)e=-2;else{c[g>>2]=i;e=0}break}case 81:{c[g>>2]=e+4;e=1;break}case 82:{h=i+2|0;c[q>>2]=h;e=h;if((r-e|0)>1){if((a[i+3>>0]|0)==0?(a[h>>0]|0)==62:0){c[g>>2]=i+4;e=3;break}c[g>>2]=e;e=0}else e=-1;break}case 87:{c[g>>2]=h;e=0;break}case 89:{c[g>>2]=e;e=0;break}}l=s;return e|0}function DY(b,d,e){b=b|0;d=d|0;e=e|0;c[e>>2]=11;a:do if((d-b|0)==6?(a[b+1>>0]|0)==0:0){switch(a[b>>0]|0){case 120:{d=0;break}case 88:{d=1;break}default:{d=1;break a}}if(!(a[b+3>>0]|0)){switch(a[b+2>>0]|0){case 109:break;case 77:{d=1;break}default:{d=1;break a}}if(!(a[b+5>>0]|0)){switch(a[b+4>>0]|0){case 108:break;case 76:{d=0;break a}default:{d=1;break a}}if(!d){c[e>>2]=12;d=1}else d=0}else d=1}else d=1}else d=1;while(0);return d|0}function EY(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;k=e+72|0;a:while(1){b:while(1){j=g-f|0;if((j|0)<=1){f=-1;break a}e=a[f+1>>0]|0;i=a[f>>0]|0;if(!(e<<24>>24))e=d[k+(i&255)>>0]|0;else e=sY(e,i)|0;switch(e|0){case 8:case 1:case 0:{l=10;break a}case 6:{l=9;break b}case 7:{l=19;break b}case 5:{f=f+2|0;continue b}case 13:case 12:{i=f+2|0;if((e|0)==(b|0)){l=12;break a}else{f=i;continue b}}default:{f=f+2|0;continue b}}}if((l|0)==9){l=0;if((j|0)<3){f=-2;break}else{f=f+3|0;continue}}else if((l|0)==19){l=0;if((j|0)<4){f=-2;break}else{f=f+4|0;continue}}}c:do if((l|0)==10){c[h>>2]=f;f=0}else if((l|0)==12)if((g-i|0)>1){c[h>>2]=i;g=a[f+3>>0]|0;f=a[i>>0]|0;if(!(g<<24>>24))f=d[k+(f&255)>>0]|0;else f=sY(g,f)|0;switch(f|0){case 20:case 30:case 11:case 10:case 9:case 21:{f=27;break c}default:{}}f=0}else f=-27;while(0);return f|0}function FY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f;a:do if((k-e|0)>1){h=a[e+1>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e>>0]|0)>>0]|0;else h=sY(h,a[e>>0]|0)|0;switch(h|0){case 27:{h=yY(b,e+2|0,f,g)|0;break a}case 20:{c[g>>2]=e+2;h=33;break a}case 24:case 22:{j=b+72|0;b:while(1){i=e+2|0;f=k-i|0;if((f|0)<=1){h=-1;break a}h=a[e+3>>0]|0;b=a[i>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=sY(h,b)|0;switch(h|0){case 24:case 22:{e=i;break}case 30:{l=15;break b}case 10:case 9:case 21:break b;default:{l=22;break b}}}if((l|0)==22){c[g>>2]=i;h=0;break a}c:do if((l|0)==15){if((f|0)<=3){h=-1;break a}b=a[e+5>>0]|0;h=a[e+4>>0]|0;if(!(b<<24>>24))h=d[j+(h&255)>>0]|0;else h=sY(b,h)|0;switch(h|0){case 30:case 10:case 9:case 21:break;default:break c}c[g>>2]=i;h=0;break a}while(0);c[g>>2]=i;h=16;break a}default:{c[g>>2]=e;h=0;break a}}}else h=-1;while(0);return h|0}function GY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f-e|0;a:do if((j|0)>1){k=a[e+1>>0]|0;if(!(k<<24>>24)){i=a[e>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56836+((j>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}b=b+72|0;k=e;b:while(1){h=k;k=k+2|0;e=f-k|0;if((e|0)<=1){f=-20;break a}h=a[h+3>>0]|0;i=a[k>>0]|0;if(!(h<<24>>24))j=d[b+(i&255)>>0]|0;else j=sY(h,i)|0;switch(j|0){case 27:case 26:case 25:case 24:case 22:continue b;case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{h=27;break b}case 29:break;default:{h=28;break b}}e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(h&255)>>0]|0)<<3)<<2)>>2])){h=21;break}}if((h|0)==21){c[g>>2]=k;f=0;break}else if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==27){c[g>>2]=k;f=20;break}else if((h|0)==28){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function HY(b,d,e){b=b|0;d=d|0;e=e|0;e=IY(e)|0;if((e|0)==-1)e=0;else{a[b+69>>0]=e;c[b>>2]=67;c[b+4>>2]=68;c[b+48>>2]=31;c[b+72>>2]=d;c[d>>2]=b;e=1}return e|0}function IY(a){a=a|0;var b=0;a:do if(!a)b=6;else{b=0;while(1){if((b|0)>=6){b=-1;break a}if(qZ(a,c[59964+(b<<2)>>2]|0)|0)break a;b=b+1|0}}while(0);return b|0}function JY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return MY(58844,a,0,b,c,d)|0}function KY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return MY(58844,a,1,b,c,d)|0}function LY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;BX(58480,b,c,d);return}function MY(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;a:do if(f>>>0<g>>>0){l=c[d+72>>2]|0;i=f+1|0;b:do if((i|0)==(g|0)){i=a[d+69>>0]|0;if(((i<<24>>24)+-3|0)>>>0<3){i=-1;break a}switch(a[f>>0]|0){case 60:case 0:{i=-1;break a}case -17:case -1:case -2:break;default:break b}if(!((e|0)==1&i<<24>>24==0)){i=-1;break a}}else{k=a[f>>0]|0;i=a[i>>0]|0;j=((k&255)<<8|i&255)&65535;c:do if(j<<16>>16<-2){if(j<<16>>16>=-257){switch(j<<16>>16){case -257:break;default:break c}if((e|0)==1&(a[d+69>>0]|0)==0)break b;c[h>>2]=f+2;c[l>>2]=c[b+16>>2];i=14;break a}switch(j<<16>>16){case -4165:break;default:break c}if((e|0)==1)switch(a[d+69>>0]|0){case 0:case 3:case 4:case 5:break b;default:{}}i=f+2|0;if((i|0)==(g|0)){i=-1;break a}if((a[i>>0]|0)!=-65)break b;c[h>>2]=f+3;c[l>>2]=c[b+8>>2];i=14;break a}else{if(j<<16>>16<15360){switch(j<<16>>16){case -2:break;default:break c}if((e|0)==1&(a[d+69>>0]|0)==0)break b;c[h>>2]=f+2;c[l>>2]=c[b+20>>2];i=14;break a}switch(j<<16>>16){case 15360:break;default:break c}i=a[d+69>>0]|0;if(i<<24>>24==4){if((e|0)==1)break b}else if((e|0)==1&i<<24>>24==3)break b;i=c[b+20>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0;break a}while(0);if(k<<24>>24){if((e|0)==1|i<<24>>24!=0)break;i=c[b+20>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0;break a}if((e|0)==1?(a[d+69>>0]|0)==5:0)break;i=c[b+16>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0;break a}while(0);i=c[b+(a[d+69>>0]<<2)>>2]|0;c[l>>2]=i;i=ob[c[i+(e<<2)>>2]&127](i,f,g,h)|0}else i=-4;while(0);return i|0}function NY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;a:do if(e>>>0<f>>>0){i=e;m=f-i|0;k=(m&1|0)==0;m=m&-2;l=(m|0)==0;m=k|l?f:e+m|0;if(k|l^1){f=a[e>>0]|0;if(!(f<<24>>24)){h=a[e+1>>0]|0;j=h;h=d[b+72+(h&255)>>0]|0}else{h=a[e+1>>0]|0;j=h;h=sY(f,h)|0}do switch(h|0){case 12:{f=mZ(12,b,e+2|0,m,g)|0;break a}case 13:{f=mZ(13,b,e+2|0,m,g)|0;break a}case 2:{h=e+2|0;if((m-h|0)<=1){f=-1;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=sY(f,a[e+3>>0]|0)|0;switch(f|0){case 16:{f=nZ(b,e+4|0,m,g)|0;break a}case 15:{f=iZ(b,e+4|0,m,g)|0;break a}case 7:case 6:case 5:case 29:case 24:case 22:{c[g>>2]=e;f=29;break a}default:{c[g>>2]=h;f=0;break a}}}case 9:{if((e+2|0)==(m|0)){c[g>>2]=m;f=-15;break a}else i=7;break}case 10:case 21:{i=7;break}case 30:{f=cZ(b,e+2|0,m,g)|0;break a}case 35:{c[g>>2]=e+2;f=38;break a}case 20:{c[g>>2]=e+2;f=25;break a}case 4:{h=e+2|0;f=m-h|0;if((f|0)<=1){f=-26;break a}if((a[h>>0]|0)==0?(a[e+3>>0]|0)==93:0){if((f|0)<=3){f=-1;break a}if((a[e+4>>0]|0)==0?(a[e+5>>0]|0)==62:0){c[g>>2]=e+6;f=34;break a}}c[g>>2]=h;f=26;break a}case 31:{c[g>>2]=e+2;f=23;break a}case 32:{h=e+2|0;if((m-h|0)<=1){f=-24;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=sY(f,a[e+3>>0]|0)|0;switch(f|0){case 33:{c[g>>2]=e+4;f=36;break a}case 15:{c[g>>2]=e+4;f=35;break a}case 34:{c[g>>2]=e+4;f=37;break a}case 32:case 36:case 35:case 11:case 21:case 10:case 9:{c[g>>2]=h;f=24;break a}default:{c[g>>2]=h;f=0;break a}}}case 36:{c[g>>2]=e+2;f=21;break a}case 11:{c[g>>2]=e+2;f=17;break a}case 19:{f=oZ(b,e+2|0,m,g)|0;break a}case 5:{if((m-i|0)<2){f=-2;break a}c[g>>2]=e;f=0;break a}case 6:{if((m-i|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((m-i|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 24:case 22:{f=18;i=61;break}case 23:case 27:case 26:case 25:{f=19;i=61;break}case 29:{i=f&255;h=j&255;f=h>>>5;h=1<<(h&31);if(!(h&c[56836+((f|d[140706+i>>0]<<3)<<2)>>2]))if(!(c[56836+((d[140962+i>>0]<<3|f)<<2)>>2]&h))i=64;else{f=19;i=61}else{f=18;i=61}break}default:i=64}while(0);if((i|0)==7){k=m;b=b+72|0;j=e;b:while(1){i=j;j=j+2|0;if((k-j|0)<=1){i=28;break}f=a[j>>0]|0;h=a[i+3>>0]|0;if(!(f<<24>>24))f=d[b+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 10:case 21:continue b;case 9:break;default:{i=27;break b}}if((i+4|0)==(m|0)){i=27;break}}if((i|0)==27){c[g>>2]=j;f=15;break}else if((i|0)==28){c[g>>2]=j;f=15;break}}else if((i|0)==61){l=b+72|0;h=e+2|0;c:while(1){e=f&255;d:while(1){k=m-h|0;if((k|0)<=1){i=104;break c}i=a[h>>0]|0;j=a[h+1>>0]|0;if(!(i<<24>>24))b=d[l+(j&255)>>0]|0;else b=sY(i,j)|0;switch(b|0){case 5:{i=73;break c}case 6:{i=74;break c}case 7:{i=76;break c}case 10:case 9:case 21:case 30:case 20:case 36:case 35:case 32:case 11:{i=78;break c}case 34:{i=94;break c}case 33:{i=97;break c}case 15:{i=100;break c}case 29:{k=j&255;if(!(1<<(k&31)&c[56836+((k>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){i=71;break c}break}case 27:case 26:case 25:case 24:case 22:break;case 23:{k=h+2|0;switch(e&63){case 41:{f=19;h=k;continue c}case 18:break d;default:{h=k;continue d}}}default:{i=103;break c}}h=h+2|0}b=m-k|0;if((b|0)<=1){f=-1;break a}f=a[k>>0]|0;i=a[h+3>>0]|0;if(!(f<<24>>24))j=d[l+(i&255)>>0]|0;else j=sY(f,i)|0;switch(j|0){case 5:{i=89;break c}case 6:{i=90;break c}case 7:{i=92;break c}case 29:{e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|d[140962+(f&255)>>0]<<3)<<2)>>2])){i=87;break c}break}case 27:case 26:case 25:case 24:case 22:break;default:{f=19;h=k;continue c}}f=41;h=h+4|0}switch(i|0){case 71:{c[g>>2]=h;f=0;break a}case 73:{c[g>>2]=h;f=0;break a}case 74:{if((k|0)<3){f=-2;break a}c[g>>2]=h;f=0;break a}case 76:{if((k|0)<4){f=-2;break a}c[g>>2]=h;f=0;break a}case 78:{c[g>>2]=h;break a}case 87:{c[g>>2]=k;f=0;break a}case 89:{c[g>>2]=k;f=0;break a}case 90:{if((b|0)<3){f=-2;break a}c[g>>2]=k;f=0;break a}case 92:{if((b|0)<4){f=-2;break a}c[g>>2]=k;f=0;break a}case 94:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=32;break a}case 97:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=31;break a}case 100:if((f|0)==19){c[g>>2]=h;f=0;break a}else{c[g>>2]=h+2;f=30;break a}case 103:{c[g>>2]=h;f=0;break a}case 104:{f=0-f|0;break a}}}else if((i|0)==64){c[g>>2]=e;f=0;break}}else f=-1}else f=-4;while(0);return f|0}function OY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0<f>>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+1>>0]|0)>>0]|0;else f=sY(f,a[e+1>>0]|0)|0;do switch(f|0){case 2:{f=fZ(b,e+2|0,i,g)|0;break a}case 3:{f=bZ(b,e+2|0,i,g)|0;break a}case 9:{h=e+2|0;if((i-h|0)<=1){f=-3;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=sY(f,a[e+3>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 4:{h=e+2|0;if((i-h|0)<=1){f=-5;break a}if((a[h>>0]|0)==0?(a[e+3>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-5;break a}if((a[f>>0]|0)==0?(a[e+5>>0]|0)==62:0){c[g>>2]=f;f=0;break a}else f=i}else f=i;break}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:{h=e+2|0;f=i}}while(0);j=b+72|0;b=h;b:while(1){e=f-b|0;if((e|0)<=1){h=52;break}h=a[b>>0]|0;i=a[b+1>>0]|0;if(!(h<<24>>24))h=d[j+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 10:case 9:case 8:case 1:case 0:case 2:case 3:{h=50;break b}case 5:{b=b+2|0;continue b}case 6:{if((e|0)<3){h=38;break b}b=b+3|0;continue b}case 7:{if((e|0)<4){h=41;break b}b=b+4|0;continue b}case 4:{if((e|0)<=3){h=50;break b}h=b+2|0;if(a[h>>0]|0){b=h;continue b}if((a[b+3>>0]|0)!=93){b=h;continue b}if((e|0)<=5){h=50;break b}i=b+4|0;if(a[i>>0]|0){b=h;continue b}if((a[b+5>>0]|0)==62){h=49;break b}else{b=h;continue b}}default:{b=b+2|0;continue b}}}if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==41){c[g>>2]=b;f=6;break}else if((h|0)==49){c[g>>2]=i;f=0;break}else if((h|0)==50){c[g>>2]=b;f=6;break}else if((h|0)==52){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function PY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(e>>>0<f>>>0){h=e;i=f-h|0;k=(i&1|0)==0;i=i&-2;j=(i|0)==0;i=k|j?f:e+i|0;if(k|j^1){f=a[e>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+1>>0]|0)>>0]|0;else f=sY(f,a[e+1>>0]|0)|0;switch(f|0){case 4:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}if((a[h>>0]|0)==0?(a[e+3>>0]|0)==93:0){f=e+4|0;if((i-f|0)<=1){f=-1;break a}if((a[f>>0]|0)==0?(a[e+5>>0]|0)==62:0){c[g>>2]=e+6;f=40;break a}}break}case 9:{h=e+2|0;if((i-h|0)<=1){f=-1;break a}f=a[h>>0]|0;if(!(f<<24>>24))f=d[b+72+(d[e+3>>0]|0)>>0]|0;else f=sY(f,a[e+3>>0]|0)|0;c[g>>2]=(f|0)==10?e+4|0:h;f=7;break a}case 10:{c[g>>2]=e+2;f=7;break a}case 5:{f=i;if((f-h|0)<2){f=-2;break a}h=e+2|0;i=f;break}case 6:{f=i;if((f-h|0)<3){f=-2;break a}h=e+3|0;i=f;break}case 7:{f=i;if((f-h|0)<4){f=-2;break a}h=e+4|0;i=f;break}case 8:case 1:case 0:{c[g>>2]=e;f=0;break a}default:h=e+2|0}j=b+72|0;b=h;b:while(1){e=i-b|0;if((e|0)<=1){h=40;break}f=a[b>>0]|0;h=a[b+1>>0]|0;if(!(f<<24>>24))f=d[j+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 10:case 9:case 8:case 1:case 0:case 4:{h=38;break b}case 6:{if((e|0)<3){h=35;break b}else f=3;break}case 7:{if((e|0)<4){h=37;break b}else f=4;break}default:f=2}b=b+f|0}if((h|0)==35){c[g>>2]=b;f=6;break}else if((h|0)==37){c[g>>2]=b;f=6;break}else if((h|0)==38){c[g>>2]=b;f=6;break}else if((h|0)==40){c[g>>2]=b;f=6;break}}else f=-1}else f=-4;while(0);return f|0}function QY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f-e|0;k=(k&1|0)==0?f:e+(k&-2)|0;j=b+72|0;i=0;f=e;a:while(1){h=k-f|0;if((h|0)<=1){f=-1;break}b=a[f>>0]|0;e=a[f+1>>0]|0;if(!(b<<24>>24))b=d[j+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 8:case 1:case 0:{l=12;break a}case 5:{h=i;f=f+2|0;i=h;continue a}case 6:{if((h|0)<3){f=-2;break a}h=i;f=f+3|0;i=h;continue a}case 7:{if((h|0)<4){f=-2;break a}h=i;f=f+4|0;i=h;continue a}case 2:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}if((a[f+3>>0]|0)!=33){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}h=(a[f+5>>0]|0)==91;i=i+(h&1)|0;f=h?f+6|0:b;continue a}case 4:{b=f+2|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}if((a[f+3>>0]|0)!=93){h=i;f=b;i=h;continue a}b=f+4|0;if((k-b|0)<=1){f=-1;break a}if(a[b>>0]|0){h=i;f=b;i=h;continue a}if((a[f+5>>0]|0)!=62){h=i;f=b;i=h;continue a}f=f+6|0;if(!i){l=26;break a}i=i+-1|0;continue a}default:{h=i;f=f+2|0;i=h;continue a}}}if((l|0)==12){c[g>>2]=f;f=0}else if((l|0)==26){c[g>>2]=f;f=42}return f|0}function RY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0<f>>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=30;break}h=a[j>>0]|0;i=a[j+1>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 3:{i=11;break a}case 2:{i=14;break a}case 10:{i=15;break a}case 9:{i=18;break a}case 21:{i=25;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=bZ(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14){c[g>>2]=j;h=0;break}else if((i|0)==15)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==18){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[j>>0]|0;i=a[e+3>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==25)if((j|0)==(e|0)){c[g>>2]=e+2;h=39;break}else{c[g>>2]=j;h=6;break}else if((i|0)==30){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function SY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;do if(e>>>0<f>>>0){k=f;if((k-e|0)>1){l=b+72|0;j=e;a:while(1){if((k-j|0)<=1){i=29;break}h=a[j>>0]|0;i=a[j+1>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 3:{i=11;break a}case 30:{i=14;break a}case 10:{i=17;break a}case 9:{i=20;break a}case 5:{h=2;break}case 6:{h=3;break}case 7:{h=4;break}default:h=2}j=j+h|0}if((i|0)==11)if((j|0)==(e|0)){h=bZ(b,e+2|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}else if((i|0)==14)if((j|0)==(e|0)){h=cZ(b,e+2|0,f,g)|0;h=(h|0)==22?0:h;break}else{c[g>>2]=j;h=6;break}else if((i|0)==17)if((j|0)==(e|0)){c[g>>2]=e+2;h=7;break}else{c[g>>2]=j;h=6;break}else if((i|0)==20){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}j=e+2|0;if((k-j|0)<=1){h=-3;break}h=a[j>>0]|0;i=a[e+3>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;c[g>>2]=(h|0)==10?e+4|0:j;h=7;break}else if((i|0)==29){c[g>>2]=j;h=6;break}}else h=-1}else h=-4;while(0);return h|0}function TY(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=d;b=c;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){g=7;break}if((f-b|0)<2){b=0;break}if(a[b>>0]|0){b=0;break}if((a[b+1>>0]|0)!=c<<24>>24){b=0;break}e=e+1|0;b=b+2|0}if((g|0)==7)b=(b|0)==(d|0)&1;return b|0}function UY(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=b+72|0;f=c;a:while(1){b=a[f>>0]|0;e=a[f+1>>0]|0;if(!(b<<24>>24))b=d[g+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 5:{b=2;break}case 6:{b=3;break}case 7:{b=4;break}case 27:case 26:case 25:case 24:case 23:case 22:case 29:{b=2;break}default:break a}f=f+b|0}return f-c|0}function VY(b,c){b=b|0;c=c|0;var e=0,f=0;f=b+72|0;a:while(1){b=a[c>>0]|0;e=a[c+1>>0]|0;if(!(b<<24>>24))b=d[f+(e&255)>>0]|0;else b=sY(b,e)|0;switch(b|0){case 21:case 9:case 10:break;default:break a}c=c+2|0}return c|0}function WY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=b+72|0;m=0;n=0;b=1;a:while(1){l=e+2|0;h=a[l>>0]|0;j=h<<24>>24==0;i=e+3|0;k=a[i>>0]|0;if(j)h=d[o+(k&255)>>0]|0;else h=sY(h,k)|0;do switch(h|0){case 5:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 6:{if(b|0){j=b;k=n;l=m;e=i;b=j;n=k;m=l;continue a}if((n|0)>=(f|0)){k=n;l=m;b=1;e=i;n=k;m=l;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;k=n;l=m;b=1;e=i;n=k;m=l;continue a}case 7:{if(!b)if((n|0)<(f|0)){c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;b=1}else b=1;k=n;l=m;e=e+4|0;n=k;m=l;continue a}case 24:case 22:case 29:{if(b|0){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}if((n|0)>=(f|0)){j=n;k=m;b=1;e=l;n=j;m=k;continue a}c[g+(n<<4)>>2]=l;a[g+(n<<4)+12>>0]=1;j=n;k=m;b=1;e=l;n=j;m=k;continue a}case 12:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=12;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=12;b=2;e=l;n=k;continue a}if((m|0)!=12){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=12;n=n+1|0;b=0;e=l;continue a}case 13:{if((b|0)!=2){if((n|0)>=(f|0)){k=n;m=13;b=2;e=l;n=k;continue a}c[g+(n<<4)+4>>2]=e+4;k=n;m=13;b=2;e=l;n=k;continue a}if((m|0)!=13){j=n;k=m;b=2;e=l;n=j;m=k;continue a}if((n|0)<(f|0))c[g+(n<<4)+8>>2]=l;m=13;n=n+1|0;b=0;e=l;continue a}case 3:{if((n|0)>=(f|0)){i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}case 21:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}i=g+(n<<4)+12|0;if(!(a[i>>0]|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}do if(j&(l|0)!=(c[g+(n<<4)+4>>2]|0)&k<<24>>24==32){h=a[e+4>>0]|0;b=a[e+5>>0]|0;if(!(h<<24>>24)){if(b<<24>>24==32)break;b=d[o+(b&255)>>0]|0}else b=sY(h,b)|0;if((b|0)!=(m|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}}while(0);a[i>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 10:case 9:{switch(b|0){case 1:{j=n;k=m;b=0;e=l;n=j;m=k;continue a}case 2:break;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}if((n|0)>=(f|0)){j=n;k=m;b=2;e=l;n=j;m=k;continue a}a[g+(n<<4)+12>>0]=0;j=n;k=m;b=2;e=l;n=j;m=k;continue a}case 17:case 11:if((b|0)==2){j=n;k=m;b=2;e=l;n=j;m=k;continue a}else break a;default:{i=b;j=n;k=m;e=l;b=i;n=j;m=k;continue a}}while(0)}return n|0}function XY(b,c){b=b|0;c=c|0;var d=0,e=0;b=c+4|0;a:do if(!(a[b>>0]|0))if((a[c+5>>0]|0)==120){c=c+6|0;b=0;while(1){b:while(1){if(!(a[c>>0]|0)){d=a[c+1>>0]|0;if(d<<24>>24==59){e=18;break a}d=d<<24>>24;switch(d|0){case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:{e=8;break b}case 70:case 69:case 68:case 67:case 66:case 65:{e=9;break b}case 102:case 101:case 100:case 99:case 98:case 97:{e=10;break b}default:{}}}c=c+2|0}if((e|0)==8)b=d+-48|b<<4;else if((e|0)==9)b=(b<<4)+-55+d|0;else if((e|0)==10)b=(b<<4)+-87+d|0;if((b|0)<1114112)c=c+2|0;else{b=-1;e=19;break}}}else{c=b;b=0;e=13}else{d=b;b=0;c=-1;e=16}while(0);while(1)if((e|0)==13){if(a[c>>0]|0){d=c;c=-1;e=16;continue}if((a[c+1>>0]|0)==59){e=18;continue}d=c;c=a[c+1>>0]|0;e=16;continue}else if((e|0)==16){b=(b*10|0)+-48+c|0;if((b|0)>=1114112){b=-1;e=19;continue}c=d+2|0;e=13;continue}else if((e|0)==18){b=jX(b)|0;e=19;continue}else if((e|0)==19)return b|0;return 0}function YY(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do switch((d-c|0)/2|0|0){case 2:{if((a[c+2>>0]|0)==0?(a[c+3>>0]|0)==116:0){if(!(a[c>>0]|0))b=a[c+1>>0]|0;else b=-1;b=(b|0)==108?60:(b|0)==103?62:0}else e=27;break}case 3:{if((((((a[c>>0]|0)==0?(a[c+1>>0]|0)==97:0)?(a[c+2>>0]|0)==0:0)?(a[c+3>>0]|0)==109:0)?(a[c+4>>0]|0)==0:0)?(a[c+5>>0]|0)==112:0)b=38;else e=27;break}case 4:{if(!(a[c>>0]|0))switch(a[c+1>>0]|0){case 113:{if(a[c+2>>0]|0){e=27;break a}if((a[c+3>>0]|0)!=117){e=27;break a}if(a[c+4>>0]|0){e=27;break a}if((a[c+5>>0]|0)!=111){e=27;break a}if(a[c+6>>0]|0){e=27;break a}if((a[c+7>>0]|0)==116){b=34;break a}else{e=27;break a}}case 97:{if(a[c+2>>0]|0){e=27;break a}if((a[c+3>>0]|0)!=112){e=27;break a}if(a[c+4>>0]|0){e=27;break a}if((a[c+5>>0]|0)!=111){e=27;break a}if(a[c+6>>0]|0){e=27;break a}if((a[c+7>>0]|0)==115){b=39;break a}else{e=27;break a}}default:{e=27;break a}}else e=27;break}default:e=27}while(0);if((e|0)==27)b=0;return b|0}function ZY(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=b+72|0;k=g+4|0;while(1){if((f-e|0)<=1)break;b=a[e>>0]|0;h=a[e+1>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=sY(b,h)|0;switch(b|0){case 5:{e=e+2|0;break}case 6:{e=e+3|0;break}case 7:{e=e+4|0;break}case 10:{c[k>>2]=-1;c[g>>2]=(c[g>>2]|0)+1;e=e+2|0;break}case 9:{c[g>>2]=(c[g>>2]|0)+1;i=e+2|0;if((f-i|0)>1){b=a[i>>0]|0;h=a[e+3>>0]|0;if(!(b<<24>>24))b=d[j+(h&255)>>0]|0;else b=sY(b,h)|0;e=(b|0)==10?e+4|0:i}else e=i;c[k>>2]=-1;break}default:e=e+2|0}c[k>>2]=(c[k>>2]|0)+1}return}function _Y(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f+-2|0;j=b+72|0;a:while(1){h=e+2|0;if((k-h|0)<=1){f=1;break}f=a[h>>0]|0;i=f<<24>>24==0;b=a[e+3>>0]|0;if(i)f=d[j+(b&255)>>0]|0;else f=sY(f,b)|0;switch(f|0){case 23:case 19:case 30:case 33:case 16:case 18:case 10:case 9:case 15:case 14:case 17:case 35:case 34:case 32:case 31:case 13:case 27:case 24:case 25:{e=h;continue a}case 21:if(i&b<<24>>24==9){l=12;break a}else{e=h;continue a}case 22:case 26:{if(!i){l=12;break a}if(b<<24>>24>=0){e=h;continue a}break}default:if(!i){l=12;break a}}switch(b<<24>>24|0){case 64:case 36:{e=h;break}default:{l=12;break a}}}if((l|0)==12){c[g>>2]=h;f=0}return f|0}function $Y(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=c[e>>2]|0;k=j+(f-j&-2)|0;l=k;m=h;a:while(1){if(j>>>0>=k>>>0){b=0;break}i=a[j+1>>0]|0;b=a[j>>0]|0;f=b&255;switch(b<<24>>24){case 0:{if(i<<24>>24>-1){b=c[g>>2]|0;if((b|0)==(h|0)){b=2;break a}c[g>>2]=b+1;a[b>>0]=i;b=j}else n=7;break}case 7:case 6:case 5:case 4:case 3:case 2:case 1:{n=7;break}case -37:case -38:case -39:case -40:{b=c[g>>2]|0;if((m-b|0)<4){b=2;break a}if((l-j|0)<4){b=1;break a}o=i&255;i=(f<<2&12|o>>>6)+1|0;c[g>>2]=b+1;a[b>>0]=i>>>2|240;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>2&15|i<<4&48|128;b=j+2|0;i=d[j+3>>0]|0;f=(o<<4&48|i>>>6|a[b>>0]<<2&12|128)&255;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=f;j=c[g>>2]|0;c[g>>2]=j+1;a[j>>0]=i&63|128;break}default:{b=c[g>>2]|0;if((m-b|0)<3){b=2;break a}c[g>>2]=b+1;a[b>>0]=f>>>4|224;o=i&255;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2&60|128;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}}if((n|0)==7){n=0;b=c[g>>2]|0;if((m-b|0)<2){b=2;break}o=i&255;c[g>>2]=b+1;a[b>>0]=o>>>6|f<<2|192;b=c[g>>2]|0;c[g>>2]=b+1;a[b>>0]=o&63|128;b=j}j=b+2|0}c[e>>2]=j;return b|0}function aZ(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;j=c[f>>2]|0;l=g-j&-2;e=j+l|0;if((l|0)>(i-(c[h>>2]|0)|0)){k=e+-2|0;g=(a[k>>0]&-8)<<24>>24==-40;l=g&1;e=g?k:e}else l=0;g=j;while(1){j=g>>>0<e>>>0;k=c[h>>2]|0;if(!(j&k>>>0<i>>>0))break;j=((d[g>>0]|0)<<8|(d[g+1>>0]|0))&65535;c[h>>2]=k+2;b[k>>1]=j;k=(c[f>>2]|0)+2|0;c[f>>2]=k;g=k}return ((k|0)!=(i|0)|j^1?l:2)|0}function bZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=f;j=l-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56836+((j>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;b=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;b=0;break a}case 6:{if((j|0)<3){b=-2;break a}c[g>>2]=e;b=0;break a}case 7:{if((j|0)<4){b=-2;break a}c[g>>2]=e;b=0;break a}case 19:{b=dZ(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;b=0;break a}}k=b+72|0;j=e;b:while(1){i=j+2|0;e=l-i|0;if((e|0)<=1){b=-1;break a}b=a[i>>0]|0;f=a[j+3>>0]|0;if(!(b<<24>>24))h=d[k+(f&255)>>0]|0;else h=sY(b,f)|0;switch(h|0){case 27:case 26:case 25:case 24:case 22:{j=i;continue b}case 5:{f=23;break b}case 6:{f=24;break b}case 7:{f=26;break b}case 18:{f=28;break b}case 29:break;default:{f=29;break b}}e=f&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(b&255)>>0]|0)<<3)<<2)>>2])){f=22;break}else j=i}if((f|0)==22){c[g>>2]=i;b=0;break}else if((f|0)==23){c[g>>2]=i;b=0;break}else if((f|0)==24){if((e|0)<3){b=-2;break}c[g>>2]=i;b=0;break}else if((f|0)==26){if((e|0)<4){b=-2;break}c[g>>2]=i;b=0;break}else if((f|0)==28){c[g>>2]=j+4;b=9;break}else if((f|0)==29){c[g>>2]=i;b=0;break}}else b=-1;while(0);return b|0}function cZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56836+((l>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}case 30:case 9:case 10:case 21:{c[g>>2]=e;f=22;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){k=b+2|0;e=f-k|0;if((e|0)<=1){f=-1;break a}h=a[k>>0]|0;i=a[b+3>>0]|0;if(!(h<<24>>24))j=d[l+(i&255)>>0]|0;else j=sY(h,i)|0;switch(j|0){case 27:case 26:case 25:case 24:case 22:{b=k;continue b}case 5:{h=23;break b}case 6:{h=24;break b}case 7:{h=26;break b}case 18:{h=28;break b}case 29:break;default:{h=29;break b}}e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(h&255)>>0]|0)<<3)<<2)>>2])){h=22;break}else b=k}if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){c[g>>2]=k;f=0;break}else if((h|0)==24){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==26){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==28){c[g>>2]=b+4;f=28;break}else if((h|0)==29){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function dZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f;a:do if((k-e|0)>1){i=a[e>>0]|0;h=a[e+1>>0]|0;do if(!(i<<24>>24))if(h<<24>>24==120){h=eZ(b,e+2|0,f,g)|0;break a}else{h=d[b+72+(h&255)>>0]|0;break}else h=sY(i,h)|0;while(0);if((h|0)!=25){c[g>>2]=e;h=0;break}j=b+72|0;b=e;b:while(1){i=b+2|0;if((k-i|0)<=1){h=-1;break a}h=a[i>>0]|0;f=a[b+3>>0]|0;if(!(h<<24>>24))h=d[j+(f&255)>>0]|0;else h=sY(h,f)|0;switch(h|0){case 25:{b=i;break}case 18:{f=15;break b}default:{f=16;break b}}}if((f|0)==15){c[g>>2]=b+4;h=10;break}else if((f|0)==16){c[g>>2]=i;h=0;break}}else h=-1;while(0);return h|0}function eZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a:do if((f-e|0)>1){h=a[e>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e+1>>0]|0)>>0]|0;else h=sY(h,a[e+1>>0]|0)|0;if((h&-2|0)!=24){c[g>>2]=e;f=0;break}j=b+72|0;b:while(1){i=e+2|0;if((f-i|0)<=1){f=-1;break a}h=a[i>>0]|0;b=a[e+3>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=sY(h,b)|0;switch(h|0){case 24:case 25:{e=i;break}case 18:{h=13;break b}default:{h=14;break b}}}if((h|0)==13){c[g>>2]=e+4;f=10;break}else if((h|0)==14){c[g>>2]=i;f=0;break}}else f=-1;while(0);return f|0}function fZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=f;j=o-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{m=i&255;if(!(1<<(m&31)&c[56836+((m>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;h=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;h=0;break a}case 6:{if((j|0)<3){h=-2;break a}c[g>>2]=e;h=0;break a}case 7:{if((j|0)<4){h=-2;break a}c[g>>2]=e;h=0;break a}case 16:{i=e+2|0;if((o-i|0)<=1){h=-1;break a}h=a[i>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e+3>>0]|0)>>0]|0;else h=sY(h,a[e+3>>0]|0)|0;switch(h|0){case 27:{h=gZ(b,e+4|0,f,g)|0;break a}case 20:{h=hZ(e+4|0,f,g)|0;break a}default:{c[g>>2]=i;h=0;break a}}}case 15:{h=iZ(b,e+2|0,f,g)|0;break a}case 17:{h=jZ(b,e+2|0,f,g)|0;break a}default:{c[g>>2]=e;h=0;break a}}m=b+72|0;l=0;h=e+2|0;b:while(1){c:while(1){i=o-h|0;if((i|0)<=1){h=-1;break a}j=a[h>>0]|0;k=a[h+1>>0]|0;if(!(j<<24>>24))e=d[m+(k&255)>>0]|0;else e=sY(j,k)|0;switch(e|0){case 5:{n=34;break b}case 6:{n=35;break b}case 7:{n=37;break b}case 10:case 9:case 21:{n=55;break b}case 11:{n=69;break b}case 17:break b;case 23:break c;case 29:{e=k&255;if(!(1<<(e&31)&c[56836+((e>>>5|d[140962+(j&255)>>0]<<3)<<2)>>2])){n=32;break b}break}case 27:case 26:case 25:case 24:case 22:break;default:{n=75;break b}}h=h+2|0}if(l|0){n=40;break}e=h+2|0;l=o-e|0;if((l|0)<=1){h=-1;break a}i=a[e>>0]|0;j=a[h+3>>0]|0;if(!(i<<24>>24))k=d[m+(j&255)>>0]|0;else k=sY(i,j)|0;switch(k|0){case 5:{n=49;break b}case 6:{n=50;break b}case 7:{n=52;break b}case 29:{l=j&255;if(!(1<<(l&31)&c[56836+((l>>>5|d[140706+(i&255)>>0]<<3)<<2)>>2])){n=47;break b}break}case 24:case 22:break;default:{n=54;break b}}l=1;h=h+4|0}d:switch(n|0){case 32:{c[g>>2]=h;h=0;break a}case 34:{c[g>>2]=h;h=0;break a}case 35:{if((i|0)<3){h=-2;break a}c[g>>2]=h;h=0;break a}case 37:{if((i|0)<4){h=-2;break a}c[g>>2]=h;h=0;break a}case 40:{c[g>>2]=h;h=0;break a}case 47:{c[g>>2]=e;h=0;break a}case 49:{c[g>>2]=e;h=0;break a}case 50:{if((l|0)<3){h=-2;break a}c[g>>2]=e;h=0;break a}case 52:{if((l|0)<4){h=-2;break a}c[g>>2]=e;h=0;break a}case 54:{c[g>>2]=e;h=0;break a}case 55:{e:while(1){n=0;i=h+2|0;j=o-i|0;if((j|0)<=1){h=-1;break a}k=a[i>>0]|0;e=a[h+3>>0]|0;if(!(k<<24>>24))l=d[m+(e&255)>>0]|0;else l=sY(k,e)|0;switch(l|0){case 11:{h=i;n=69;break d}case 17:{h=i;break d}case 10:case 9:case 21:{h=i;n=55;break}case 29:{n=60;break e}case 24:case 22:break e;case 5:{n=63;break e}case 6:{n=64;break e}case 7:{n=66;break e}default:{n=68;break e}}}if((n|0)==60){o=e&255;if(!(1<<(o&31)&c[56836+((o>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){c[g>>2]=i;h=0;break a}}else if((n|0)==63){c[g>>2]=i;h=0;break a}else if((n|0)==64){if((j|0)<3){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==66){if((j|0)<4){h=-2;break a}c[g>>2]=i;h=0;break a}else if((n|0)==68){c[g>>2]=i;h=0;break a}h=kZ(b,h+4|0,f,g)|0;break a}case 75:{c[g>>2]=h;h=0;break a}}if((n|0)==69){c[g>>2]=h+2;h=2;break}i=h+2|0;if((o-i|0)>1){if((a[i>>0]|0)==0?(a[h+3>>0]|0)==62:0){c[g>>2]=h+4;h=4;break}c[g>>2]=i;h=0}else h=-1}else h=-1;while(0);return h|0}function gZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f;a:do if((j-e|0)>1){if((a[e>>0]|0)==0?(a[e+1>>0]|0)==45:0){i=b+72|0;h=e+2|0;b:while(1){e=j-h|0;if((e|0)<=1){f=-1;break a}f=a[h>>0]|0;b=a[h+1>>0]|0;if(!(f<<24>>24))f=d[i+(b&255)>>0]|0;else f=sY(f,b)|0;switch(f|0){case 8:case 1:case 0:{k=16;break b}case 5:{h=h+2|0;continue b}case 6:{if((e|0)<3){f=-2;break a}h=h+3|0;continue b}case 7:{if((e|0)<4){f=-2;break a}h=h+4|0;continue b}case 27:{f=h+2|0;if((j-f|0)<=1){f=-1;break a}if(a[f>>0]|0){h=f;continue b}if((a[h+3>>0]|0)==45)break b;else{h=f;continue b}}default:{h=h+2|0;continue b}}}if((k|0)==16){c[g>>2]=h;f=0;break}f=h+4|0;if((j-f|0)<=1){f=-1;break}if((a[f>>0]|0)==0?(a[h+5>>0]|0)==62:0){c[g>>2]=h+6;f=13;break}c[g>>2]=f;f=0;break}c[g>>2]=e;f=0}else f=-1;while(0);return f|0}function hZ(b,d,e){b=b|0;d=d|0;e=e|0;if((d-b|0)>11){d=0;while(1){if((d|0)>=6){d=8;break}if(a[b>>0]|0){d=0;break}if((a[b+1>>0]|0)!=(a[141218+d>>0]|0)){d=0;break}d=d+1|0;b=b+2|0}c[e>>2]=b}else d=-1;return d|0}function iZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+16|0;p=q;o=f;i=o-e|0;a:do if((i|0)>1){j=a[e>>0]|0;if(!(j<<24>>24)){h=a[e+1>>0]|0;f=d[b+72+(h&255)>>0]|0}else{h=a[e+1>>0]|0;f=sY(j,h)|0}switch(f|0){case 29:{m=h&255;if(!(1<<(m&31)&c[56836+((m>>>5|d[140706+(j&255)>>0]<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((i|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((i|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}m=b+72|0;k=e;b:while(1){f=k+2|0;h=o-f|0;if((h|0)<=1){f=-1;break a}i=a[f>>0]|0;j=a[k+3>>0]|0;if(!(i<<24>>24))b=d[m+(j&255)>>0]|0;else b=sY(i,j)|0;switch(b|0){case 27:case 26:case 25:case 24:case 22:{k=f;continue b}case 5:{n=22;break b}case 6:{n=23;break b}case 7:{n=25;break b}case 10:case 9:case 21:{n=27;break b}case 15:{n=46;break b}case 29:break;default:break b}k=j&255;if(!(1<<(k&31)&c[56836+((k>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){n=21;break}else k=f}if((n|0)==21){c[g>>2]=f;f=0;break}else if((n|0)==22){c[g>>2]=f;f=0;break}else if((n|0)==23){if((h|0)<3){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==25){if((h|0)<4){f=-2;break}c[g>>2]=f;f=0;break}else if((n|0)==27){if(!(lZ(e,f,p)|0)){c[g>>2]=f;f=0;break}j=k+4|0;c:while(1){i=o-j|0;if((i|0)<=1){f=-1;break a}f=a[j>>0]|0;h=a[j+1>>0]|0;if(!(f<<24>>24))f=d[m+(h&255)>>0]|0;else f=sY(f,h)|0;switch(f|0){case 8:case 1:case 0:{n=40;break c}case 5:{j=j+2|0;continue c}case 6:{if((i|0)<3){f=-2;break a}j=j+3|0;continue c}case 7:{if((i|0)<4){f=-2;break a}j=j+4|0;continue c}case 15:{f=j+2|0;if((o-f|0)<=1){f=-1;break a}if(a[f>>0]|0){j=f;continue c}if((a[j+3>>0]|0)==62){n=44;break c}else{j=f;continue c}}default:{j=j+2|0;continue c}}}if((n|0)==40){c[g>>2]=j;f=0;break}else if((n|0)==44){c[g>>2]=j+4;f=c[p>>2]|0;break}}else if((n|0)==46){if(!(lZ(e,f,p)|0)){c[g>>2]=f;f=0;break}f=k+4|0;if((o-f|0)<=1){f=-1;break}if((a[f>>0]|0)==0?(a[k+5>>0]|0)==62:0){c[g>>2]=k+6;f=c[p>>2]|0;break}}c[g>>2]=f;f=0}else f=-1;while(0);l=q;return f|0}function jZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{l=i&255;if(!(1<<(l&31)&c[56836+((l>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}l=b+72|0;b=e;b:while(1){j=b+2|0;e=f-j|0;if((e|0)<=1){f=-1;break a}h=a[j>>0]|0;i=a[b+3>>0]|0;if(!(h<<24>>24))k=d[l+(i&255)>>0]|0;else k=sY(h,i)|0;switch(k|0){case 23:case 27:case 26:case 25:case 24:case 22:{b=j;continue b}case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 10:case 9:case 21:{h=27;break b}case 11:{h=34;break b}case 29:break;default:{h=35;break b}}e=i&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(h&255)>>0]|0)<<3)<<2)>>2])){h=21;break}else b=j}if((h|0)==21){c[g>>2]=j;f=0;break}else if((h|0)==22){c[g>>2]=j;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=j;f=0;break}else if((h|0)==27){c:while(1){k=j+2|0;if((f-k|0)<=1){f=-1;break a}h=a[k>>0]|0;i=a[j+3>>0]|0;if(!(h<<24>>24))h=d[l+(i&255)>>0]|0;else h=sY(h,i)|0;switch(h|0){case 10:case 9:case 21:{j=k;h=27;break}case 11:{h=32;break c}default:{h=33;break c}}}if((h|0)==32){c[g>>2]=j+4;f=5;break}else if((h|0)==33){c[g>>2]=k;f=0;break}}else if((h|0)==34){c[g>>2]=b+4;f=5;break}else if((h|0)==35){c[g>>2]=j;f=0;break}}else f=-1;while(0);return f|0}function kZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+16|0;q=s;c[q>>2]=e;r=f;o=b+72|0;h=0;a:while(1){b:while(1){m=r-e|0;if((m|0)<=1){e=-1;break a}i=a[e>>0]|0;j=a[e+1>>0]|0;if(!(i<<24>>24))k=d[o+(j&255)>>0]|0;else k=sY(i,j)|0;switch(k|0){case 5:{p=11;break a}case 6:{p=12;break a}case 7:{p=14;break a}case 23:{p=16;break b}case 10:case 9:case 21:{p=31;break b}case 14:{p=37;break b}case 29:{n=j&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140962+(i&255)>>0]<<3)<<2)>>2])){p=9;break a}break}case 27:case 26:case 25:case 24:case 22:break;default:{p=89;break a}}n=e+2|0;c[q>>2]=n;e=n}c:do if((p|0)==16){p=0;if(h|0){p=17;break a}h=e+2|0;c[q>>2]=h;i=h;j=r-i|0;if((j|0)<=1){e=-1;break a}k=a[h>>0]|0;m=a[e+3>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=sY(k,m)|0;switch(n|0){case 5:{p=25;break a}case 6:{p=26;break a}case 7:{p=28;break a}case 24:case 22:{h=1;break c}case 29:break;default:{p=30;break a}}n=m&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){p=24;break a}else h=1}else if((p|0)==31)while(1){p=0;i=e+2|0;c[q>>2]=i;j=i;if((r-j|0)<=1){e=-1;break a}h=a[i>>0]|0;e=a[e+3>>0]|0;if(!(h<<24>>24))e=d[o+(e&255)>>0]|0;else e=sY(h,e)|0;switch(e|0){case 14:{e=i;p=37;break c}case 9:case 10:case 21:{e=i;p=31;break}default:{p=36;break a}}}while(0);d:do if((p|0)==37){while(1){p=0;j=e+2|0;c[q>>2]=j;k=j;if((r-k|0)<=1){e=-1;break a}h=a[j>>0]|0;i=a[e+3>>0]|0;if(!(h<<24>>24))m=d[o+(i&255)>>0]|0;else m=sY(h,i)|0;if((m|1|0)==13)break;switch(m|0){case 9:case 10:case 21:{e=j;p=37;break}default:{p=43;break a}}}e=e+4|0;c[q>>2]=e;e:while(1){j=r-e|0;if((j|0)<=1){e=-1;break a}h=a[e>>0]|0;i=a[e+1>>0]|0;if(!(h<<24>>24))h=d[o+(i&255)>>0]|0;else h=sY(h,i)|0;if((h|0)==(m|0))break;switch(h|0){case 8:case 1:case 0:{p=56;break a}case 2:{p=61;break a}case 5:{n=e+2|0;c[q>>2]=n;e=n;continue e}case 6:{if((j|0)<3){e=-2;break a}n=e+3|0;c[q>>2]=n;e=n;continue e}case 7:{if((j|0)<4){e=-2;break a}n=e+4|0;c[q>>2]=n;e=n;continue e}case 3:{e=bZ(b,e+2|0,f,q)|0;if((e|0)<1){p=59;break a}e=c[q>>2]|0;continue e}default:{n=e+2|0;c[q>>2]=n;e=n;continue e}}}i=e+2|0;c[q>>2]=i;k=i;if((r-k|0)<=1){e=-1;break a}h=a[i>>0]|0;j=a[e+3>>0]|0;if(!(h<<24>>24))h=d[o+(j&255)>>0]|0;else h=sY(h,j)|0;switch(h|0){case 11:{p=81;break a}case 17:{p=82;break a}case 10:case 9:case 21:{e=i;break}default:{p=68;break a}}f:while(1){i=e+2|0;c[q>>2]=i;h=i;j=r-h|0;if((j|0)<=1){e=-1;break a}k=a[i>>0]|0;m=a[e+3>>0]|0;if(!(k<<24>>24))n=d[o+(m&255)>>0]|0;else n=sY(k,m)|0;switch(n|0){case 5:{p=76;break a}case 6:{p=77;break a}case 7:{p=79;break a}case 11:{p=81;break a}case 17:{p=82;break a}case 24:case 22:{h=0;break d}case 10:case 9:case 21:{e=i;break}case 29:break f;default:{p=87;break a}}}n=m&255;if(!(1<<(n&31)&c[56836+((n>>>5|d[140706+(k&255)>>0]<<3)<<2)>>2])){p=75;break a}else h=0}while(0);e=e+4|0;c[q>>2]=e}switch(p|0){case 9:{c[g>>2]=e;e=0;break}case 11:{c[g>>2]=e;e=0;break}case 12:{if((m|0)<3)e=-2;else{c[g>>2]=e;e=0}break}case 14:{if((m|0)<4)e=-2;else{c[g>>2]=e;e=0}break}case 17:{c[g>>2]=e;e=0;break}case 24:{c[g>>2]=h;e=0;break}case 25:{c[g>>2]=h;e=0;break}case 26:{if((j|0)<3)e=-2;else{c[g>>2]=h;e=0}break}case 28:{if((j|0)<4)e=-2;else{c[g>>2]=h;e=0}break}case 30:{c[g>>2]=i;e=0;break}case 36:{c[g>>2]=j;e=0;break}case 43:{c[g>>2]=k;e=0;break}case 56:{c[g>>2]=e;e=0;break}case 59:{if(!e){c[g>>2]=c[q>>2];e=0}break}case 61:{c[g>>2]=e;e=0;break}case 68:{c[g>>2]=k;e=0;break}case 75:{c[g>>2]=i;e=0;break}case 76:{c[g>>2]=i;e=0;break}case 77:{if((j|0)<3)e=-2;else{c[g>>2]=i;e=0}break}case 79:{if((j|0)<4)e=-2;else{c[g>>2]=i;e=0}break}case 81:{c[g>>2]=e+4;e=1;break}case 82:{h=i+2|0;c[q>>2]=h;e=h;if((r-e|0)>1){if((a[h>>0]|0)==0?(a[i+3>>0]|0)==62:0){c[g>>2]=i+4;e=3;break}c[g>>2]=e;e=0}else e=-1;break}case 87:{c[g>>2]=h;e=0;break}case 89:{c[g>>2]=e;e=0;break}}l=s;return e|0}function lZ(b,d,e){b=b|0;d=d|0;e=e|0;c[e>>2]=11;a:do if((d-b|0)==6?(a[b>>0]|0)==0:0){switch(a[b+1>>0]|0){case 120:{d=0;break}case 88:{d=1;break}default:{d=1;break a}}if(!(a[b+2>>0]|0)){switch(a[b+3>>0]|0){case 109:break;case 77:{d=1;break}default:{d=1;break a}}if(!(a[b+4>>0]|0)){switch(a[b+5>>0]|0){case 108:break;case 76:{d=0;break a}default:{d=1;break a}}if(!d){c[e>>2]=12;d=1}else d=0}else d=1}else d=1}else d=1;while(0);return d|0}function mZ(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;k=e+72|0;a:while(1){b:while(1){j=g-f|0;if((j|0)<=1){f=-1;break a}e=a[f>>0]|0;i=a[f+1>>0]|0;if(!(e<<24>>24))i=d[k+(i&255)>>0]|0;else i=sY(e,i)|0;switch(i|0){case 8:case 1:case 0:{l=10;break a}case 6:{l=9;break b}case 7:{l=19;break b}case 5:{f=f+2|0;continue b}case 13:case 12:{e=f+2|0;if((i|0)==(b|0)){l=12;break a}else{f=e;continue b}}default:{f=f+2|0;continue b}}}if((l|0)==9){l=0;if((j|0)<3){f=-2;break}else{f=f+3|0;continue}}else if((l|0)==19){l=0;if((j|0)<4){f=-2;break}else{f=f+4|0;continue}}}c:do if((l|0)==10){c[h>>2]=f;f=0}else if((l|0)==12)if((g-e|0)>1){c[h>>2]=e;g=a[e>>0]|0;f=a[f+3>>0]|0;if(!(g<<24>>24))f=d[k+(f&255)>>0]|0;else f=sY(g,f)|0;switch(f|0){case 20:case 30:case 11:case 10:case 9:case 21:{f=27;break c}default:{}}f=0}else f=-27;while(0);return f|0}function nZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;k=f;a:do if((k-e|0)>1){h=a[e>>0]|0;if(!(h<<24>>24))h=d[b+72+(d[e+1>>0]|0)>>0]|0;else h=sY(h,a[e+1>>0]|0)|0;switch(h|0){case 27:{h=gZ(b,e+2|0,f,g)|0;break a}case 20:{c[g>>2]=e+2;h=33;break a}case 24:case 22:{j=b+72|0;b:while(1){i=e+2|0;f=k-i|0;if((f|0)<=1){h=-1;break a}h=a[i>>0]|0;b=a[e+3>>0]|0;if(!(h<<24>>24))h=d[j+(b&255)>>0]|0;else h=sY(h,b)|0;switch(h|0){case 24:case 22:{e=i;break}case 30:{l=15;break b}case 10:case 9:case 21:break b;default:{l=22;break b}}}if((l|0)==22){c[g>>2]=i;h=0;break a}c:do if((l|0)==15){if((f|0)<=3){h=-1;break a}b=a[e+4>>0]|0;h=a[e+5>>0]|0;if(!(b<<24>>24))h=d[j+(h&255)>>0]|0;else h=sY(b,h)|0;switch(h|0){case 30:case 10:case 9:case 21:break;default:break c}c[g>>2]=i;h=0;break a}while(0);c[g>>2]=i;h=16;break a}default:{c[g>>2]=e;h=0;break a}}}else h=-1;while(0);return h|0}function oZ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;j=f-e|0;a:do if((j|0)>1){k=a[e>>0]|0;if(!(k<<24>>24)){i=a[e+1>>0]|0;h=d[b+72+(i&255)>>0]|0}else{i=a[e+1>>0]|0;h=sY(k,i)|0}switch(h|0){case 29:{j=i&255;if(!(1<<(j&31)&c[56836+((j>>>5|(d[140706+(k&255)>>0]|0)<<3)<<2)>>2])){c[g>>2]=e;f=0;break a}break}case 24:case 22:break;case 5:{c[g>>2]=e;f=0;break a}case 6:{if((j|0)<3){f=-2;break a}c[g>>2]=e;f=0;break a}case 7:{if((j|0)<4){f=-2;break a}c[g>>2]=e;f=0;break a}default:{c[g>>2]=e;f=0;break a}}b=b+72|0;k=e;b:while(1){h=k;k=k+2|0;e=f-k|0;if((e|0)<=1){f=-20;break a}j=a[k>>0]|0;h=a[h+3>>0]|0;if(!(j<<24>>24))i=d[b+(h&255)>>0]|0;else i=sY(j,h)|0;switch(i|0){case 27:case 26:case 25:case 24:case 22:continue b;case 5:{h=22;break b}case 6:{h=23;break b}case 7:{h=25;break b}case 36:case 30:case 11:case 32:case 21:case 10:case 9:{h=27;break b}case 29:break;default:{h=28;break b}}e=h&255;if(!(1<<(e&31)&c[56836+((e>>>5|(d[140962+(j&255)>>0]|0)<<3)<<2)>>2])){h=21;break}}if((h|0)==21){c[g>>2]=k;f=0;break}else if((h|0)==22){c[g>>2]=k;f=0;break}else if((h|0)==23){if((e|0)<3){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==25){if((e|0)<4){f=-2;break}c[g>>2]=k;f=0;break}else if((h|0)==27){c[g>>2]=k;f=20;break}else if((h|0)==28){c[g>>2]=k;f=0;break}}else f=-1;while(0);return f|0}function pZ(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;while(1){b=c[d>>2]|0;h=b>>>0<e>>>0;i=c[f>>2]|0;if(!(h&i>>>0<g>>>0))break;c[d>>2]=b+1;h=a[b>>0]|0;i=c[f>>2]|0;c[f>>2]=i+1;a[i>>0]=h}return ((i|0)!=(g|0)|h^1?0:2)|0}function qZ(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a:while(1){f=a[b>>0]|0;g=a[c>>0]|0;f=(f+-97&255)<26?(f&255)+224&255:f;switch((f<<24>>24==((g+-97&255)<26?(g&255)+224&255:g)<<24>>24?(f<<24>>24==0?2:0):1)&3){case 0:{c=c+1|0;b=b+1|0;break}case 1:{e=3;break a}case 2:{d=1;break a}default:{e=5;break a}}}if((e|0)==3)d=0;return d|0}function rZ(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;return tZ(36,a,b,c,d,e,f,g,h,i,j)|0}function sZ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+144|0;i=h+4|0;f=h+8|0;g=h;c[i>>2]=d;c[g>>2]=f;pb[c[b+56>>2]&127](b,i,e,g,f+127|0)|0;do if((c[i>>2]|0)==(e|0)){a[c[g>>2]>>0]=0;if(qZ(f,141233)|0?(c[b+64>>2]|0)==2:0)break;b=IY(f)|0;if((b|0)!=-1)b=c[58844+(b<<2)>>2]|0;else b=0}else b=0;while(0);l=h;return b|0}function tZ(a,b,d,e,f,g,h,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;t=v+8|0;q=v+12|0;o=v+4|0;p=v;c[q>>2]=0;c[o>>2]=0;c[p>>2]=0;u=d+64|0;s=c[u>>2]|0;r=e+(s*5|0)|0;c[t>>2]=r;s=f+(0-(s<<1))|0;r=(uZ(d,r,s,o,p,q,t)|0)!=0;n=c[o>>2]|0;e=n;a:do if(r&(n|0)!=0){r=d+24|0;f=c[p>>2]|0;do if(!(ob[c[r>>2]&127](d,n,f,141258)|0)){if(!b){c[g>>2]=e;e=0;break a}}else{if(h|0)c[h>>2]=c[q>>2];if(!i)e=c[t>>2]|0;else{e=c[t>>2]|0;c[i>>2]=e}if(!(uZ(d,e,s,o,p,q,t)|0)){c[g>>2]=c[t>>2];e=0;break a}f=c[o>>2]|0;if(f|0){e=f;n=f;f=c[p>>2]|0;break}if(!b){e=1;break a}c[g>>2]=c[t>>2];e=0;break a}while(0);if(ob[c[r>>2]&127](d,n,f,141266)|0){f=c[q>>2]|0;e=f;if((((vZ(d,f,s)|0)&-33)+-65|0)>>>0>=26){c[g>>2]=e;e=0;break}if(j|0)c[j>>2]=e;e=c[t>>2]|0;if(k|0)c[k>>2]=nb[a&63](d,f,e+(0-(c[u>>2]|0))|0)|0;if(!(uZ(d,e,s,o,p,q,t)|0)){c[g>>2]=c[t>>2];e=0;break}e=c[o>>2]|0;if(!e){e=1;break}n=e;f=c[p>>2]|0}if((b|0)!=0|(ob[c[r>>2]&127](d,n,f,141275)|0)==0){c[g>>2]=e;e=0;break}f=c[q>>2]|0;e=c[t>>2]|0;n=f;if(!(ob[c[r>>2]&127](d,f,e+(0-(c[u>>2]|0))|0,104631)|0)){if(!(ob[c[r>>2]&127](d,f,e+(0-(c[u>>2]|0))|0,104623)|0)){c[g>>2]=n;e=0;break}if(m)c[m>>2]=0}else if(m)c[m>>2]=1;while(1){if(!(wZ(vZ(d,e,s)|0)|0))break;e=e+(c[u>>2]|0)|0}c[t>>2]=e;if((e|0)==(s|0))e=1;else{c[g>>2]=e;e=0}}else{c[g>>2]=c[t>>2];e=0}while(0);l=v;return e|0}function uZ(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;a:do if((b|0)!=(d|0)){if(!(wZ(vZ(a,b,d)|0)|0)){c[h>>2]=b;b=0;break}j=a+64|0;do b=b+(c[j>>2]|0)|0;while((wZ(vZ(a,b,d)|0)|0)!=0);if((b|0)==(d|0)){c[e>>2]=0;b=1;break}c[e>>2]=b;b:while(1){i=vZ(a,b,d)|0;switch(i|0){case -1:{i=11;break b}case 61:{i=12;break b}default:{}}if(wZ(i)|0){i=14;break}b=b+(c[j>>2]|0)|0}if((i|0)==11){c[h>>2]=b;b=0;break}else if((i|0)==12)c[f>>2]=b;else if((i|0)==14){c[f>>2]=b;do{b=b+(c[j>>2]|0)|0;i=vZ(a,b,d)|0}while((wZ(i)|0)!=0);if((i|0)!=61){c[h>>2]=b;b=0;break}}if((b|0)==(c[e>>2]|0)){c[h>>2]=b;b=0;break}do{b=b+(c[j>>2]|0)|0;i=vZ(a,b,d)|0}while((wZ(i)|0)!=0);switch(i|0){case 34:case 39:break;default:{c[h>>2]=b;b=0;break a}}f=b+(c[j>>2]|0)|0;c[g>>2]=f;b=i<<24>>24;c:while(1){i=vZ(a,f,d)|0;if((i|0)==(b|0)){i=30;break}if((i+-48|0)>>>0>9&((i&-33)+-65|0)>>>0>25)switch(i|0){case 45:case 46:case 95:break;default:{i=28;break c}}f=f+(c[j>>2]|0)|0}if((i|0)==28){c[h>>2]=f;b=0;break}else if((i|0)==30){c[h>>2]=f+(c[j>>2]|0);b=1;break}}else{c[e>>2]=0;b=1}while(0);return b|0}function vZ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+16|0;i=h+4|0;f=h+8|0;g=h;c[i>>2]=d;c[g>>2]=f;pb[c[b+56>>2]&127](b,i,e,g,f+1|0)|0;l=h;return ((c[g>>2]|0)==(f|0)?-1:a[f>>0]|0)|0}function wZ(a){a=a|0;switch(a|0){case 9:case 10:case 13:case 32:{a=1;break}default:a=0}return a|0}function xZ(){return 59988}function yZ(b,d,e){b=b|0;d=d|0;e=e|0;e=IY(e)|0;if((e|0)==-1)e=0;else{a[b+69>>0]=e;c[b>>2]=69;c[b+4>>2]=70;c[b+48>>2]=31;c[b+72>>2]=d;c[d>>2]=b;e=1}return e|0}function zZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return MY(60352,a,0,b,c,d)|0}function AZ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return MY(60352,a,1,b,c,d)|0}function BZ(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;return tZ(37,a,b,c,d,e,f,g,h,i,j)|0}function CZ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=l;l=l+144|0;i=h+4|0;f=h+8|0;g=h;c[i>>2]=d;c[g>>2]=f;pb[c[b+56>>2]&127](b,i,e,g,f+127|0)|0;do if((c[i>>2]|0)==(e|0)){a[c[g>>2]>>0]=0;if(qZ(f,141233)|0?(c[b+64>>2]|0)==2:0)break;b=IY(f)|0;if((b|0)!=-1)b=c[60352+(b<<2)>>2]|0;else b=0}else b=0;while(0);l=h;return b|0}function DZ(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;b=iX(b,c,d,e)|0;if(b|0)a[b+72+58>>0]=23;return b|0}function EZ(a){a=a|0;c[a>>2]=15;c[a+16>>2]=1;c[a+12>>2]=0;c[a+20>>2]=0;return}function FZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 15:{c[a>>2]=16;a=0;break}case 12:{c[a>>2]=16;a=1;break}case 11:{c[a>>2]=16;a=55;break}case 13:{c[a>>2]=16;a=56;break}case 14:{a=0;break}case 16:{if(!(ob[c[f+24>>2]&127](f,d+(c[f+64>>2]<<1)|0,e,141286)|0))g=9;else{c[a>>2]=17;a=3}break}case 29:{c[a>>2]=18;a=2;break}default:g=9}if((g|0)==9)a=JZ(a,b)|0;return a|0}function GZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 14:case 15:{a=0;break}case 11:{a=55;break}case 13:{a=56;break}case 16:{if(!(ob[c[f+24>>2]&127](f,d+(c[f+64>>2]<<1)|0,e,141286)|0))g=7;else{c[a>>2]=17;a=3}break}case 29:{c[a>>2]=18;a=2;break}default:g=7}if((g|0)==7)a=JZ(a,b)|0;return a|0}function HZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 41:case 18:{c[a>>2]=19;a=4;break}default:a=JZ(a,b)|0}return a|0}function IZ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function JZ(a,b){a=a|0;b=b|0;if((b|0)==28&(c[a+16>>2]|0)==0)a=59;else{c[a>>2]=18;a=-1}return a|0}function KZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=3;break}case 25:{c[a>>2]=20;a=7;break}case 17:{c[a>>2]=21;a=8;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141294)|0){c[a>>2]=22;a=3;break a}if(!(ob[c[g>>2]&127](f,d,e,141301)|0))h=8;else{c[a>>2]=23;a=3}break}default:h=8}while(0);if((h|0)==8)a=JZ(a,b)|0;return a|0}function LZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:do switch(b|0){case -4:case 15:{a=0;break}case 16:{g=f+24|0;h=f+64|0;if(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,141308)|0){c[a>>2]=24;a=11;break a}if(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,141315)|0){c[a>>2]=25;a=33;break a}if(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,141323)|0){c[a>>2]=26;a=39;break a}if(!(ob[c[g>>2]&127](f,d+(c[h>>2]<<1)|0,e,141331)|0))i=14;else{c[a>>2]=27;a=17}break}case 11:{a=55;break}case 13:{a=56;break}case 28:{a=60;break}case 26:{c[a>>2]=28;a=3;break}default:i=14}while(0);if((i|0)==14)a=JZ(a,b)|0;return a|0}function MZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;f=b+-11|0;switch(f>>>1|f<<31|0){case 2:{a=0;break}case 0:{a=55;break}case 1:{a=56;break}case 9:{c[a>>2]=18;a=2;break}default:a=JZ(a,b)|0}return a|0}function NZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 27:{c[a>>2]=29;a=5;break}default:a=JZ(a,b)|0}return a|0}function OZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 27:{c[a>>2]=22;a=6;break}default:a=JZ(a,b)|0}return a|0}function PZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 25:{c[a>>2]=20;a=7;break}case 17:{c[a>>2]=21;a=8;break}default:a=JZ(a,b)|0}return a|0}function QZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 22:{c[a>>2]=30;a=11;break}case 18:{c[a>>2]=31;a=9;break}default:a=JZ(a,b)|0}return a|0}function RZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 41:case 18:{c[a>>2]=32;a=34;break}default:a=JZ(a,b)|0}return a|0}function SZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 41:case 18:{c[a>>2]=33;a=40;break}default:a=JZ(a,b)|0}return a|0}function TZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 18:{c[a>>2]=34;a=18;break}default:a=JZ(a,b)|0}return a|0}function UZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=3;break}case 17:{c[a>>2]=21;a=8;break}default:a=JZ(a,b)|0}return a|0}function VZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=17;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141294)|0){c[a>>2]=35;a=17;break a}if(!(ob[c[g>>2]&127](f,d,e,141301)|0))h=6;else{c[a>>2]=36;a=17}break}default:h=6}while(0);if((h|0)==6)a=JZ(a,b)|0;return a|0}function WZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 27:{c[a>>2]=37;c[a+8>>2]=17;a=19;break}default:a=JZ(a,b)|0}return a|0}function XZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 27:{c[a>>2]=38;a=21;break}default:a=JZ(a,b)|0}return a|0}function YZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=17;break}case 27:{c[a>>2]=37;c[a+8>>2]=17;a=19;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=20;break}default:a=JZ(a,b)|0}return a|0}function ZZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=c[a+8>>2]|0;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=c[a+8>>2]|0;break}default:a=JZ(a,b)|0}return a|0}function _Z(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 33:{c[a>>2]=40;d=0;break}case 34:{d=a+12|0;e=c[d>>2]|0;if(!e)g=7;else{c[d>>2]=e+-1;d=0}break}case 15:{d=0;break}case 26:{g=7;break}case -4:{if(!(c[a+12>>2]|0))d=0;else g=7;break}default:d=LZ(a,b,d,e,f)|0}if((g|0)==7)d=JZ(a,b)|0;return d|0}function $Z(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=0;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141340)|0){c[a>>2]=41;a=0;break a}if(!(ob[c[g>>2]&127](f,d,e,141348)|0))h=6;else{c[a>>2]=42;a=0}break}default:h=6}while(0);if((h|0)==6)a=JZ(a,b)|0;return a|0}function a_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=0;break}case 25:{c[a>>2]=39;a=a+12|0;c[a>>2]=(c[a>>2]|0)+1;a=0;break}default:a=JZ(a,b)|0}return a|0}function b_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=0;break}case 25:{c[a>>2]=39;a=58;break}default:a=JZ(a,b)|0}return a|0}function c_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=39;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141355)|0){c[a>>2]=37;c[a+8>>2]=39;a=42;break a}if(!(ob[c[g>>2]&127](f,d,e,141361)|0))h=7;else{c[a>>2]=37;c[a+8>>2]=39;a=41}break}case 23:{c[a>>2]=43;c[a+4>>2]=1;a=44;break}default:h=7}while(0);if((h|0)==7)a=JZ(a,b)|0;return a|0}function d_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 15:{a=39;break}case 20:{if(!(ob[c[f+24>>2]&127](f,d+(c[f+64>>2]|0)|0,e,141365)|0))g=9;else{c[a>>2]=44;a=43}break}case 23:{c[a+4>>2]=2;c[a>>2]=45;a=44;break}case 41:case 18:{c[a>>2]=46;a=51;break}case 30:{c[a>>2]=46;a=53;break}case 31:{c[a>>2]=46;a=52;break}case 32:{c[a>>2]=46;a=54;break}default:g=9}if((g|0)==9)a=JZ(a,b)|0;return a|0}function e_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 24:{c[a>>2]=37;c[a+8>>2]=39;a=45;break}case 36:{c[a>>2]=37;c[a+8>>2]=39;a=46;break}case 21:{c[a>>2]=47;a=39;break}default:a=JZ(a,b)|0}return a|0}function f_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 23:{a=a+4|0;c[a>>2]=(c[a>>2]|0)+1;a=44;break}case 41:case 18:{c[a>>2]=46;a=51;break}case 30:{c[a>>2]=46;a=53;break}case 31:{c[a>>2]=46;a=52;break}case 32:{c[a>>2]=46;a=54;break}default:a=JZ(a,b)|0}return a|0}function g_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 24:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=45}else a=45;break}case 36:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=46}else a=46;break}case 35:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=47}else a=47;break}case 37:{e=a+4|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){c[a>>2]=37;c[a+8>>2]=39;a=48}else a=48;break}case 38:{c[a>>2]=45;a=50;break}case 21:{c[a>>2]=45;a=49;break}default:a=JZ(a,b)|0}return a|0}function h_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 41:case 18:{c[a>>2]=48;a=51;break}default:a=JZ(a,b)|0}return a|0}function i_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=39;break}case 36:{c[a>>2]=37;c[a+8>>2]=39;a=46;break}case 21:{c[a>>2]=47;a=39;break}default:a=JZ(a,b)|0}return a|0}function j_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=33;break}case 41:case 18:{c[a>>2]=49;a=22;break}default:a=JZ(a,b)|0}return a|0}function k_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;a:do switch(b|0){case 15:{g=33;break}case 18:{h=f+24|0;g=0;while(1){i=c[h>>2]|0;if((g|0)>=8)break;if(ob[i&127](f,d,e,c[62200+(g<<2)>>2]|0)|0){j=6;break}g=g+1|0}if((j|0)==6){c[a>>2]=50;g=g+23|0;break a}if(!(ob[i&127](f,d,e,141331)|0))j=10;else{c[a>>2]=51;g=33}break}case 23:{c[a>>2]=52;g=33;break}default:j=10}while(0);if((j|0)==10)g=JZ(a,b)|0;return g|0}function l_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:do switch(b|0){case 15:{a=33;break}case 20:{g=f+24|0;h=f+64|0;if(ob[c[g>>2]&127](f,d+(c[h>>2]|0)|0,e,141372)|0){c[a>>2]=32;a=35;break a}if(ob[c[g>>2]&127](f,d+(c[h>>2]|0)|0,e,141380)|0){c[a>>2]=32;a=36;break a}if(!(ob[c[g>>2]&127](f,d+(c[h>>2]|0)|0,e,141389)|0))i=9;else{c[a>>2]=53;a=33}break}case 27:{c[a>>2]=32;a=37;break}default:i=9}while(0);if((i|0)==9)a=JZ(a,b)|0;return a|0}function m_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 23:{c[a>>2]=54;a=33;break}default:a=JZ(a,b)|0}return a|0}function n_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 41:case 18:case 19:{c[a>>2]=55;a=31;break}default:a=JZ(a,b)|0}return a|0}function o_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 24:{c[a>>2]=50;a=33;break}case 21:{c[a>>2]=52;a=33;break}default:a=JZ(a,b)|0}return a|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 18:{c[a>>2]=56;a=32;break}default:a=JZ(a,b)|0}return a|0}function q_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 24:{c[a>>2]=50;a=33;break}case 21:{c[a>>2]=54;a=33;break}default:a=JZ(a,b)|0}return a|0}function r_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=33;break}case 27:{c[a>>2]=32;a=38;break}default:a=JZ(a,b)|0}return a|0}function s_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 18:{c[a>>2]=57;a=10;break}default:a=JZ(a,b)|0}return a|0}function t_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=11;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141294)|0){c[a>>2]=58;a=11;break a}if(!(ob[c[g>>2]&127](f,d,e,141301)|0))h=7;else{c[a>>2]=59;a=11}break}case 27:{c[a>>2]=37;c[a+8>>2]=11;a=12;break}default:h=7}while(0);if((h|0)==7)a=JZ(a,b)|0;return a|0}function u_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=60;a=13;break}default:a=JZ(a,b)|0}return a|0}function v_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=58;a=14;break}default:a=JZ(a,b)|0}return a|0}function w_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 15:{a=11;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=15;break}case 18:{if(!(ob[c[f+24>>2]&127](f,d,e,141443)|0))g=5;else{c[a>>2]=61;a=11}break}default:g=5}if((g|0)==5)a=JZ(a,b)|0;return a|0}function x_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 18:{c[a>>2]=37;c[a+8>>2]=11;a=16;break}default:a=JZ(a,b)|0}return a|0}function y_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do switch(b|0){case 15:{a=11;break}case 18:{g=f+24|0;if(ob[c[g>>2]&127](f,d,e,141294)|0){c[a>>2]=62;a=11;break a}if(!(ob[c[g>>2]&127](f,d,e,141301)|0))h=7;else{c[a>>2]=63;a=11}break}case 27:{c[a>>2]=37;c[a+8>>2]=11;a=12;break}default:h=7}while(0);if((h|0)==7)a=JZ(a,b)|0;return a|0}function z_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=64;a=13;break}default:a=JZ(a,b)|0}return a|0}function A_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 27:{c[a>>2]=62;a=14;break}default:a=JZ(a,b)|0}return a|0}function B_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;switch(b|0){case 15:{a=11;break}case 17:{c[a>>2]=c[a+16>>2]|0?20:39;a=15;break}default:a=JZ(a,b)|0}return a|0}function C_(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[46749]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=187036+(b<<1<<2)|0;d=a+8|0;e=c[d>>2]|0;f=e+8|0;g=c[f>>2]|0;if((g|0)==(a|0))c[46749]=o&~(1<<b);else{c[g+12>>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[46751]|0;if(m>>>0>n>>>0){if(d|0){b=2<<a;b=d<<a&(b|0-b);b=(b&0-b)+-1|0;i=b>>>12&16;b=b>>>i;d=b>>>5&8;b=b>>>d;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;e=b>>>1&1;e=(d|i|g|a|e)+(b>>>e)|0;b=187036+(e<<1<<2)|0;a=b+8|0;g=c[a>>2]|0;i=g+8|0;d=c[i>>2]|0;if((d|0)==(b|0)){a=o&~(1<<e);c[46749]=a}else{c[d+12>>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[46754]|0;b=n>>>3;d=187036+(b<<1<<2)|0;b=1<<b;if(!(a&b)){c[46749]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[46751]=h;c[46754]=f;w=i;l=x;return w|0}j=c[46750]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[187300+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0<d>>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=187300+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[46750]=j&~(1<<b);break}}else{c[f+16+(((c[f+16>>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[46754]|0;b=n>>>3;d=187036+(b<<1<<2)|0;b=1<<b;if(!(o&b)){c[46749]=o|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[46751]=h;c[46754]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[46750]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<<o;n=(v+520192|0)>>>16&4;v=v<<n;j=(v+245760|0)>>>16&2;j=14-(n|o|j)+(v<<j>>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[187300+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0<e>>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<<j;a=k&(a|0-a);if(!a){n=m;break}o=(a&0-a)+-1|0;i=o>>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[187300+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0<e>>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[46751]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|0}f=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=187300+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<<a);c[46750]=e;break}}else{c[f+16+(((c[f+16>>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=187036+(b<<1<<2)|0;a=c[46749]|0;b=1<<b;if(!(a&b)){c[46749]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<<v;u=(w+520192|0)>>>16&4;w=w<<u;b=(w+245760|0)>>>16&2;b=14-(u|v|b)+(w<<b>>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=187300+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<<b;if(!(e&a)){c[46750]=e|a;c[d>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[46751]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[46754]|0;if(b>>>0>15){w=a+n|0;c[46754]=w;c[46751]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[46751]=0;c[46754]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[46752]|0;if(i>>>0>n>>>0){u=i-n|0;c[46752]=u;w=c[46755]|0;v=w+n|0;c[46755]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[46867]|0)){c[46869]=4096;c[46868]=4096;c[46870]=-1;c[46871]=-1;c[46872]=0;c[46860]=0;c[46867]=p&-16^1431655768;a=4096}else a=c[46869]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[46859]|0;if(a|0?(o=c[46857]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[46860]&4)){d=c[46755]|0;c:do if(d){e=187444;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=I3(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=I3(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[46868]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[46857]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[46859]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=I3(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[46869]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((I3(a|0)|0)==(-1|0)){I3(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[46860]=c[46860]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=I3(m|0)|0,s=I3(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0<s>>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[46857]|0)+h|0;c[46857]=b;if(b>>>0>(c[46858]|0)>>>0)c[46858]=b;j=c[46755]|0;do if(j){b=187444;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[46752]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[46755]=v;c[46752]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[46756]=c[46871];break}if(g>>>0<(c[46753]|0)>>>0)c[46753]=g;a=g+h|0;b=187444;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=187444;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[46754]|0)==(b|0)){w=(c[46751]|0)+i|0;c[46751]=w;c[46754]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[46749]=c[46749]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}else{g=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=187300+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[46750]=c[46750]&~(1<<d);break d}while(0);c[a+24>>2]=g;d=b+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(!d)break;c[a+20>>2]=d;c[d+24>>2]=a}while(0);b=b+h|0;f=h+i|0}else f=i;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;b=f>>>3;if(f>>>0<256){d=187036+(b<<1<<2)|0;a=c[46749]|0;b=1<<b;if(!(a&b)){c[46749]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=k;c[b+12>>2]=k;c[k+8>>2]=b;c[k+12>>2]=d;break}b=f>>>8;do if(!b)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<<v;u=(w+520192|0)>>>16&4;w=w<<u;b=(w+245760|0)>>>16&2;b=14-(u|v|b)+(w<<b>>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=187300+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[46750]|0;d=1<<b;if(!(a&d)){c[46750]=a|d;c[e>>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[46752]|0)+i|0;c[46752]=w;c[46755]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=187444;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0<f>>>0?j:a;b=a+8|0;d=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[46755]=v;c[46752]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[46756]=c[46871];d=a+4|0;c[d>>2]=27;c[b>>2]=c[46861];c[b+4>>2]=c[46862];c[b+8>>2]=c[46863];c[b+12>>2]=c[46864];c[46861]=g;c[46862]=h;c[46864]=0;c[46863]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+8|0)>>>0<w>>>0);if((a|0)!=(j|0)){g=a-j|0;c[d>>2]=c[d>>2]&-2;c[j+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=187036+(b<<1<<2)|0;a=c[46749]|0;b=1<<b;if(!(a&b)){c[46749]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)d=31;else{v=(b+1048320|0)>>>16&8;w=b<<v;u=(w+520192|0)>>>16&4;w=w<<u;d=(w+245760|0)>>>16&2;d=14-(u|v|d)+(w<<d>>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=187300+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[46750]|0;a=1<<d;if(!(b&a)){c[46750]=b|a;c[e>>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[46753]|0;if((w|0)==0|g>>>0<w>>>0)c[46753]=g;c[46861]=g;c[46862]=h;c[46864]=0;c[46758]=c[46867];c[46757]=-1;c[46762]=187036;c[46761]=187036;c[46764]=187044;c[46763]=187044;c[46766]=187052;c[46765]=187052;c[46768]=187060;c[46767]=187060;c[46770]=187068;c[46769]=187068;c[46772]=187076;c[46771]=187076;c[46774]=187084;c[46773]=187084;c[46776]=187092;c[46775]=187092;c[46778]=187100;c[46777]=187100;c[46780]=187108;c[46779]=187108;c[46782]=187116;c[46781]=187116;c[46784]=187124;c[46783]=187124;c[46786]=187132;c[46785]=187132;c[46788]=187140;c[46787]=187140;c[46790]=187148;c[46789]=187148;c[46792]=187156;c[46791]=187156;c[46794]=187164;c[46793]=187164;c[46796]=187172;c[46795]=187172;c[46798]=187180;c[46797]=187180;c[46800]=187188;c[46799]=187188;c[46802]=187196;c[46801]=187196;c[46804]=187204;c[46803]=187204;c[46806]=187212;c[46805]=187212;c[46808]=187220;c[46807]=187220;c[46810]=187228;c[46809]=187228;c[46812]=187236;c[46811]=187236;c[46814]=187244;c[46813]=187244;c[46816]=187252;c[46815]=187252;c[46818]=187260;c[46817]=187260;c[46820]=187268;c[46819]=187268;c[46822]=187276;c[46821]=187276;c[46824]=187284;c[46823]=187284;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[46755]=v;c[46752]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[46756]=c[46871]}while(0);b=c[46752]|0;if(b>>>0>n>>>0){u=b-n|0;c[46752]=u;w=c[46755]|0;v=w+n|0;c[46755]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(O_()|0)>>2]=12;w=0;l=x;return w|0}function D_(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=c[46753]|0;a=c[a+-4>>2]|0;b=a&-8;j=d+b|0;do if(!(a&1)){e=c[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+b|0;if(h>>>0<f>>>0)return;if((c[46754]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[46751]=g;c[a>>2]=b&-2;c[h+4>>2]=g|1;c[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=c[h+8>>2]|0;b=c[h+12>>2]|0;if((b|0)==(a|0)){c[46749]=c[46749]&~(1<<d);i=h;b=g;break}else{c[a+12>>2]=b;c[b+8>>2]=a;i=h;b=g;break}}f=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}c[b>>2]=0}else{i=c[h+8>>2]|0;c[i+12>>2]=a;c[a+8>>2]=i}while(0);if(f){b=c[h+28>>2]|0;d=187300+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[46750]=c[46750]&~(1<<b);i=h;b=g;break}}else{c[f+16+(((c[f+16>>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a){i=h;b=g;break}}c[a+24>>2]=f;b=h+16|0;d=c[b>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}b=c[b+4>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=c[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((c[46755]|0)==(j|0)){j=(c[46752]|0)+b|0;c[46752]=j;c[46755]=i;c[i+4>>2]=j|1;if((i|0)!=(c[46754]|0))return;c[46754]=0;c[46751]=0;return}if((c[46754]|0)==(j|0)){j=(c[46751]|0)+b|0;c[46751]=j;c[46754]=h;c[i+4>>2]=j|1;c[h+j>>2]=j;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){b=c[j+8>>2]|0;a=c[j+12>>2]|0;if((a|0)==(b|0)){c[46749]=c[46749]&~(1<<d);break}else{c[b+12>>2]=a;c[a+8>>2]=b;break}}else{g=c[j+24>>2]|0;a=c[j+12>>2]|0;do if((a|0)==(j|0)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}c[b>>2]=0;d=a}else{d=c[j+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[j+28>>2]|0;b=187300+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[46750]=c[46750]&~(1<<a);break}}else{c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=g;a=j+16|0;b=c[a>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}a=c[a+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[i+4>>2]=f|1;c[h+f>>2]=f;if((i|0)==(c[46754]|0)){c[46751]=f;return}}else{c[a>>2]=e&-2;c[i+4>>2]=b|1;c[h+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=187036+(a<<1<<2)|0;b=c[46749]|0;a=1<<a;if(!(b&a)){c[46749]=b|a;a=d;b=d+8|0}else{b=d+8|0;a=c[b>>2]|0}c[b>>2]=i;c[a+12>>2]=i;c[i+8>>2]=a;c[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{h=(a+1048320|0)>>>16&8;j=a<<h;g=(j+520192|0)>>>16&4;j=j<<g;a=(j+245760|0)>>>16&2;a=14-(g|h|a)+(j<<a>>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=187300+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[46750]|0;d=1<<a;do if(b&d){b=f<<((a|0)==31?0:25-(a>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+8|0;j=c[h>>2]|0;c[j+12>>2]=i;c[h>>2]=i;c[i+8>>2]=j;c[i+12>>2]=d;c[i+24>>2]=0;break}}else{c[46750]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[46757]|0)+-1|0;c[46757]=j;if(!j)a=187452;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[46757]=-1;return}function E_(a,b){a=a|0;b=b|0;var d=0;if(a){d=O(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=C_(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;H3(a|0,0,d|0)|0;return a|0}function F_(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=C_(b)|0;return b|0}if(b>>>0>4294967231){c[(O_()|0)>>2]=12;b=0;return b|0}d=G_(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=C_(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;F3(d|0,a|0,(e>>>0<b>>>0?e:b)|0)|0;D_(a);b=d;return b|0}function G_(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=a+4|0;m=c[l>>2]|0;d=m&-8;i=a+d|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[46869]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;k=a+b|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|3;m=i+4|0;c[m>>2]=c[m>>2]|1;H_(k,d);return a|0}if((c[46755]|0)==(i|0)){k=(c[46752]|0)+d|0;d=k-b|0;e=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}c[l>>2]=m&1|b|2;c[e+4>>2]=d|1;c[46755]=e;c[46752]=d;return a|0}if((c[46754]|0)==(i|0)){e=(c[46751]|0)+d|0;if(e>>>0<b>>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){k=a+b|0;e=a+e|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|1;c[e>>2]=d;e=e+4|0;c[e>>2]=c[e>>2]&-2;e=k}else{c[l>>2]=m&1|e|2;e=a+e+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[46751]=d;c[46754]=e;return a|0}e=c[i+4>>2]|0;if(e&2|0){a=0;return a|0}j=(e&-8)+d|0;if(j>>>0<b>>>0){a=0;return a|0}k=j-b|0;f=e>>>3;do if(e>>>0<256){e=c[i+8>>2]|0;d=c[i+12>>2]|0;if((d|0)==(e|0)){c[46749]=c[46749]&~(1<<f);break}else{c[e+12>>2]=d;c[d+8>>2]=e;break}}else{h=c[i+24>>2]|0;d=c[i+12>>2]|0;do if((d|0)==(i|0)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>2]=0;f=d}else{f=c[i+8>>2]|0;c[f+12>>2]=d;c[d+8>>2]=f;f=d}while(0);if(h|0){d=c[i+28>>2]|0;e=187300+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[46750]=c[46750]&~(1<<d);break}}else{c[h+16+(((c[h+16>>2]|0)!=(i|0)&1)<<2)>>2]=f;if(!f)break}c[f+24>>2]=h;d=i+16|0;e=c[d>>2]|0;if(e|0){c[f+16>>2]=e;c[e+24>>2]=f}d=c[d+4>>2]|0;if(d|0){c[f+20>>2]=d;c[d+24>>2]=f}}}while(0);if(k>>>0<16){c[l>>2]=j|m&1|2;m=a+j+4|0;c[m>>2]=c[m>>2]|1;return a|0}else{i=a+b|0;c[l>>2]=m&1|b|2;c[i+4>>2]=k|3;m=a+j+4|0;c[m>>2]=c[m>>2]|1;H_(i,k);return a|0}return 0}function H_(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){f=c[a>>2]|0;if(!(d&3))return;h=a+(0-f)|0;b=f+b|0;if((c[46754]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[46751]=b;c[a>>2]=d&-2;c[h+4>>2]=b|1;c[i>>2]=b;return}e=f>>>3;if(f>>>0<256){a=c[h+8>>2]|0;d=c[h+12>>2]|0;if((d|0)==(a|0)){c[46749]=c[46749]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}g=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{f=c[h+8>>2]|0;c[f+12>>2]=a;c[a+8>>2]=f}while(0);if(g){d=c[h+28>>2]|0;e=187300+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[46750]=c[46750]&~(1<<d);break}}else{c[g+16+(((c[g+16>>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a)break}c[a+24>>2]=g;d=h+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(d){c[a+20>>2]=d;c[d+24>>2]=a}}}else h=a;while(0);a=i+4|0;e=c[a>>2]|0;if(!(e&2)){if((c[46755]|0)==(i|0)){i=(c[46752]|0)+b|0;c[46752]=i;c[46755]=h;c[h+4>>2]=i|1;if((h|0)!=(c[46754]|0))return;c[46754]=0;c[46751]=0;return}if((c[46754]|0)==(i|0)){i=(c[46751]|0)+b|0;c[46751]=i;c[46754]=h;c[h+4>>2]=i|1;c[h+i>>2]=i;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){a=c[i+8>>2]|0;b=c[i+12>>2]|0;if((b|0)==(a|0)){c[46749]=c[46749]&~(1<<d);break}else{c[a+12>>2]=b;c[b+8>>2]=a;break}}else{g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);if(g|0){b=c[i+28>>2]|0;a=187300+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[46750]=c[46750]&~(1<<b);break}}else{c[g+16+(((c[g+16>>2]|0)!=(i|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=g;b=i+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}b=c[b+4>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}}while(0);c[h+4>>2]=f|1;c[h+f>>2]=f;if((h|0)==(c[46754]|0)){c[46751]=f;return}}else{c[a>>2]=e&-2;c[h+4>>2]=b|1;c[h+b>>2]=b;f=b}b=f>>>3;if(f>>>0<256){d=187036+(b<<1<<2)|0;a=c[46749]|0;b=1<<b;if(!(a&b)){c[46749]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=h;c[b+12>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;return}b=f>>>8;if(b)if(f>>>0>16777215)b=31;else{g=(b+1048320|0)>>>16&8;i=b<<g;e=(i+520192|0)>>>16&4;i=i<<e;b=(i+245760|0)>>>16&2;b=14-(e|g|b)+(i<<b>>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=187300+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[46750]|0;d=1<<b;if(!(a&d)){c[46750]=a|d;c[e>>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+8|0;i=c[g>>2]|0;c[i+12>>2]=h;c[g>>2]=h;c[h+8>>2]=i;c[h+12>>2]=d;c[h+24>>2]=0;return}}function I_(a,b){a=a|0;b=b|0;if(a>>>0<9){b=C_(b)|0;return b|0}else{b=J_(a,b)|0;return b|0}return 0}function J_(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;a=a>>>0>16?a:16;if(a+-1&a){d=16;while(1)if(d>>>0<a>>>0)d=d<<1;else{a=d;break}}if((-64-a|0)>>>0<=b>>>0){c[(O_()|0)>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;d=C_(g+12+a|0)|0;if(!d){h=0;return h|0}f=d+-8|0;do if(a+-1&d){e=(d+a+-1&0-a)+-8|0;b=f;e=(e-b|0)>>>0>15?e:e+a|0;b=e-b|0;a=d+-4|0;i=c[a>>2]|0;d=(i&-8)-b|0;if(!(i&3)){c[e>>2]=(c[f>>2]|0)+b;c[e+4>>2]=d;a=e;b=e;break}else{i=e+4|0;c[i>>2]=d|c[i>>2]&1|2;d=e+d+4|0;c[d>>2]=c[d>>2]|1;c[a>>2]=b|c[a>>2]&1|2;c[i>>2]=c[i>>2]|1;H_(f,b);a=e;b=e;break}}else{a=f;b=f}while(0);a=a+4|0;d=c[a>>2]|0;if(d&3|0?(h=d&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;f=b+g|0;c[a>>2]=g|d&1|2;c[f+4>>2]=i|3;h=b+h+4|0;c[h>>2]=c[h>>2]|1;H_(f,i)}i=b+8|0;return i|0}function K_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P_(c[a+60>>2]|0)|0;a=N_(Ja(6,d|0)|0)|0;l=b;return a|0}function L_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=N_(ya(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function M_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((N_(xa(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function N_(a){a=a|0;if(a>>>0>4294963200){c[(O_()|0)>>2]=0-a;a=-1}return a|0}function O_(){return 187492}function P_(a){a=a|0;return a|0}function Q_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=18;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ia(54,f|0)|0):0)a[b+75>>0]=-1;f=R_(b,d,e)|0;l=g;return f|0}function R_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=N_(za(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=N_(za(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function S_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=N_(Ka(91,e|0)|0)|0;l=d;return b|0}function T_(){return}function U_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=l;l=l+32|0;h=i;do if((g&4095|0)==0&(((g|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){c[(O_()|0)>>2]=12;a=-1;break}c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=d;c[h+12>>2]=e;c[h+16>>2]=f;c[h+20>>2]=g>>12;a=N_(Aa(192,h|0)|0)|0}else{c[(O_()|0)>>2]=22;a=-1}while(0);l=i;return a|0}function V_(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(W_(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=O(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function W_(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function X_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+48|0;g=h+16|0;f=h;e=h+32|0;if(!(b&4194368))e=0;else{c[e>>2]=d;i=(c[e>>2]|0)+(4-1)&~(4-1);d=c[i>>2]|0;c[e>>2]=i+4;e=d}c[f>>2]=a;c[f+4>>2]=b|32768;c[f+8>>2]=e;e=Ha(5,f|0)|0;if(!((b&524288|0)==0|(e|0)<0)){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Ea(221,g|0)|0}i=N_(e)|0;l=h;return i|0}function Y_(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[141449+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=141537;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=141537;else{f=141537;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return Z_(f,c[e+20>>2]|0)|0}function Z_(a,b){a=a|0;b=b|0;return __(a,b)|0}function __(a,b){a=a|0;b=b|0;if(!b)b=0;else b=$_(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function $_(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(c[b>>2]|0)+1794895138|0;h=a$(c[b+8>>2]|0,o)|0;f=a$(c[b+12>>2]|0,o)|0;g=a$(c[b+16>>2]|0,o)|0;a:do if((h>>>0<d>>>2>>>0?(n=d-(h<<2)|0,f>>>0<n>>>0&g>>>0<n>>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;f=a$(c[b+(g<<2)>>2]|0,o)|0;g=a$(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0<d>>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=b$(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=a$(c[b+(f<<2)>>2]|0,o)|0;f=a$(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0<d>>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function a$(a,b){a=a|0;b=b|0;var c=0;c=C3(a|0)|0;return ((b|0)==0?a:c)|0}function b$(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)b=e;else{do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));b=e}return (d&255)-(b&255)|0}function c$(a){a=a|0;return Y_(a,c[(d$()|0)+188>>2]|0)|0}function d$(){return e$()|0}function e$(){return 62872}function f$(a,b,c){a=+a;b=+b;c=c|0;var d=0.0,e=0.0,f=0.0;f=a*a;d=f*(f*f)*(f*1.58969099521155e-10+-2.5050760253406863e-08)+(f*(f*2.7557313707070068e-06+-1.984126982985795e-04)+.00833333333332249);e=f*a;if(!c)a=e*(f*d+-.16666666666666632)+a;else a=a-(e*.16666666666666632+(f*(b*.5-e*d)-b));return +a}function g$(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;m=+h[j>>3]+-1.0;k=m*(m*.5);i=m/(m+2.0);l=i*i;g=l*l;h[j>>3]=m-k;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;a=+h[j>>3];g=m-a-k+i*(k+(g*(g*(g*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(g*(g*(g*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));l=a*1.4426950407214463;k=+(e+(f>>>20)|0);i=l+k;a=i+(l+(k-i)+(g*1.4426950407214463+(g+a)*1.6751713164886512e-10))}return +a}function h$(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=z3(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+h$(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function i$(a,b){a=+a;b=+b;var c=0.0,d=0.0,e=0.0,f=0.0;c=a*a;d=c*c;e=c*.5;f=1.0-e;return +(f+(1.0-f-e+(c*(c*(c*(c*2.480158728947673e-05+-.001388888888887411)+.0416666666666666)+d*d*(c*(2.087572321298175e-09-c*1.1359647557788195e-11)+-2.7557314351390663e-07))-a*b)))}function j$(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;k=+h[j>>3]+-1.0;i=k*(k*.5);l=k/(k+2.0);m=l*l;g=m*m;h[j>>3]=k-i;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;a=+h[j>>3];g=k-a-i+l*(i+(g*(g*(g*.15313837699209373+.22222198432149784)+.3999999999940942)+m*(g*(g*(g*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));m=a*.4342944818781689;i=+(e+(f>>>20)|0);l=i*.30102999566361177;k=l+m;a=k+(m+(l-k)+(g*.4342944818781689+(i*3.694239077158931e-13+(g+a)*2.5082946711645275e-11)))}return +a}function k$(a,b){a=+a;b=b|0;var d=0,e=0.0,f=0.0,g=0.0,i=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0;r=l;l=l+48|0;m=r+16|0;n=r;h[j>>3]=a;d=c[j>>2]|0;i=c[j+4>>2]|0;o=z3(d|0,i|0,63)|0;q=i&2147483647;do if(q>>>0<1074752123)if((i&1048575|0)!=598523){d=(o|0)!=0;if(q>>>0<1073928573)if(d){g=a+1.5707963267341256;k=g+6.077100506506192e-11;h[b>>3]=k;h[b+8>>3]=g-k+6.077100506506192e-11;d=-1;break}else{g=a+-1.5707963267341256;k=g+-6.077100506506192e-11;h[b>>3]=k;h[b+8>>3]=g-k+-6.077100506506192e-11;d=1;break}else if(d){g=a+3.1415926534682512;k=g+1.2154201013012384e-10;h[b>>3]=k;h[b+8>>3]=g-k+1.2154201013012384e-10;d=-2;break}else{g=a+-3.1415926534682512;k=g+-1.2154201013012384e-10;h[b>>3]=k;h[b+8>>3]=g-k+-1.2154201013012384e-10;d=2;break}}else p=21;else{if(q>>>0<1075594812)if(q>>>0<1075183037){if((q|0)==1074977148){p=21;break}if(!o){g=a+-4.712388980202377;k=g+-1.8231301519518578e-10;h[b>>3]=k;h[b+8>>3]=g-k+-1.8231301519518578e-10;d=3;break}else{g=a+4.712388980202377;k=g+1.8231301519518578e-10;h[b>>3]=k;h[b+8>>3]=g-k+1.8231301519518578e-10;d=-3;break}}else{if((q|0)==1075388923){p=21;break}if(!o){g=a+-6.2831853069365025;k=g+-2.430840202602477e-10;h[b>>3]=k;h[b+8>>3]=g-k+-2.430840202602477e-10;d=4;break}else{g=a+6.2831853069365025;k=g+2.430840202602477e-10;h[b>>3]=k;h[b+8>>3]=g-k+2.430840202602477e-10;d=-4;break}}if(q>>>0>=1094263291){if(q>>>0>2146435071){k=a-a;h[b+8>>3]=k;h[b>>3]=k;d=0;break}c[j>>2]=d;c[j+4>>2]=i&1048575|1096810496;a=+h[j>>3];d=0;do{k=+(~~a|0);h[m+(d<<3)>>3]=k;a=(a-k)*16777216.0;d=d+1|0}while((d|0)!=2);h[m+16>>3]=a;if(a==0.0){d=1;while(1)if(+h[m+(d<<3)>>3]==0.0)d=d+-1|0;else break}else d=2;d=l$(m,n,(q>>>20)+-1046|0,d+1|0,1)|0;a=+h[n>>3];if(!o){h[b>>3]=a;h[b+8>>3]=+h[n+8>>3];break}else{h[b>>3]=-a;h[b+8>>3]=-+h[n+8>>3];d=0-d|0;break}}else p=21}while(0);if((p|0)==21){g=a*.6366197723675814+6755399441055744.0+-6755399441055744.0;d=~~g;e=a-g*1.5707963267341256;f=g*6.077100506506192e-11;a=e-f;h[b>>3]=a;h[j>>3]=a;p=z3(c[j>>2]|0,c[j+4>>2]|0,52)|0;i=q>>>20;if((i-(p&2047)|0)>16){f=g*6.077100506303966e-11;k=e-f;f=g*2.0222662487959506e-21-(e-k-f);a=k-f;h[b>>3]=a;h[j>>3]=a;q=z3(c[j>>2]|0,c[j+4>>2]|0,52)|0;s=g*2.0222662487111665e-21;e=k-s;g=g*8.4784276603689e-32-(k-e-s);if((i-(q&2047)|0)>49){a=e-g;h[b>>3]=a;f=g}else e=k}h[b+8>>3]=e-a-f}l=r;return d|0}function l$(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=l;l=l+560|0;C=H+480|0;z=H+320|0;G=H+160|0;E=H;D=c[63116+(f<<2)>>2]|0;p=e+-1|0;y=(d+-3|0)/24|0;y=(y|0)>0?y:0;B=O(y,-24)|0;j=d+-24+B|0;if((D+p|0)>=0){n=D+e|0;k=y-p|0;m=0;while(1){if((k|0)<0)g=0.0;else g=+(c[63132+(k<<2)>>2]|0);h[z+(m<<3)>>3]=g;m=m+1|0;if((m|0)==(n|0))break;else k=k+1|0}}o=(e|0)>0;n=0;while(1){if(o){m=n+p|0;g=0.0;k=0;do{g=g+ +h[a+(k<<3)>>3]*+h[z+(m-k<<3)>>3];k=k+1|0}while((k|0)!=(e|0))}else g=0.0;h[E+(n<<3)>>3]=g;if((n|0)<(D|0))n=n+1|0;else break}t=(j|0)>0;u=24-j|0;v=23-j|0;w=(e|0)>0;x=(j|0)==0;k=D;a:while(1){g=+h[E+(k<<3)>>3];o=(k|0)>0;if(o){m=k;n=0;while(1){i=+(~~(g*5.9604644775390625e-08)|0);c[C+(n<<2)>>2]=~~(g-i*16777216.0);s=m;m=m+-1|0;g=+h[E+(m<<3)>>3]+i;if((s|0)<=1)break;else n=n+1|0}}g=+m$(g,j);g=g-+A(+(g*.125))*8.0;m=~~g;g=g-+(m|0);do if(!t)if(!x)if(!(g>=.5)){p=0;s=m;break}else{n=2;F=20;break}else{n=c[C+(k+-1<<2)>>2]>>23;F=19;break}else{s=C+(k+-1<<2)|0;n=c[s>>2]|0;F=n>>u;n=n-(F<<u)|0;c[s>>2]=n;n=n>>v;m=F+m|0;F=19}while(0);if((F|0)==19){F=0;if((n|0)>0)F=20;else{p=n;s=m}}if((F|0)==20){F=0;s=m+1|0;if(o){m=0;r=0;do{p=C+(r<<2)|0;q=c[p>>2]|0;if(!m)if(!q)m=0;else{m=1;o=16777216;F=23}else{o=16777215;F=23}if((F|0)==23){F=0;c[p>>2]=o-q}r=r+1|0}while((r|0)!=(k|0))}else m=0;b:do if(t){switch(j|0){case 1:{o=8388607;break}case 2:{o=4194303;break}default:break b}r=C+(k+-1<<2)|0;c[r>>2]=c[r>>2]&o}while(0);if((n|0)==2){g=1.0-g;if(!m)p=2;else{p=2;g=g-+m$(1.0,j)}}else p=n}if(!(g==0.0)){F=42;break}if((k|0)>(D|0)){m=0;n=k;do{n=n+-1|0;m=c[C+(n<<2)>>2]|m}while((n|0)>(D|0));if(m){F=41;break}else m=1}else m=1;while(1)if(!(c[C+(D-m<<2)>>2]|0))m=m+1|0;else break;o=m+k|0;if((m|0)<=0){k=o;continue}while(1){n=k+1|0;m=k+e|0;h[z+(m<<3)>>3]=+(c[63132+(n+y<<2)>>2]|0);if(w){g=0.0;k=0;do{g=g+ +h[a+(k<<3)>>3]*+h[z+(m-k<<3)>>3];k=k+1|0}while((k|0)!=(e|0))}else g=0.0;h[E+(n<<3)>>3]=g;if((n|0)<(o|0))k=n;else{k=o;continue a}}}if((F|0)==41)while(1){F=0;j=j+-24|0;k=k+-1|0;if(!(c[C+(k<<2)>>2]|0))F=41;else{o=k;break}}else if((F|0)==42){g=+m$(g,0-j|0);if(g>=16777216.0){i=+(~~(g*5.9604644775390625e-08)|0);c[C+(k<<2)>>2]=~~(g-i*16777216.0);j=B+d|0;k=k+1|0;g=i}c[C+(k<<2)>>2]=~~g;o=k}g=+m$(1.0,j);n=(o|0)>-1;if(n){j=o;while(1){h[E+(j<<3)>>3]=g*+(c[C+(j<<2)>>2]|0);if((j|0)>0){g=g*5.9604644775390625e-08;j=j+-1|0}else break}if(n){k=o;while(1){m=o-k|0;j=0;g=0.0;while(1){g=g+ +h[10904+(j<<3)>>3]*+h[E+(j+k<<3)>>3];if((j|0)>=(D|0)|(j|0)>=(m|0))break;else j=j+1|0}h[G+(m<<3)>>3]=g;if((k|0)>0)k=k+-1|0;else break}}}switch(f|0){case 0:{if(n){g=0.0;j=o;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)>0)j=j+-1|0;else break}}else g=0.0;i=(p|0)==0?g:-g;F=72;break}case 2:case 1:{if(n){g=0.0;j=o;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)>0)j=j+-1|0;else break}}else g=0.0;k=(p|0)==0;h[b>>3]=k?g:-g;g=+h[G>>3]-g;if((o|0)>=1){j=1;while(1){g=g+ +h[G+(j<<3)>>3];if((j|0)==(o|0))break;else j=j+1|0}}i=k?g:-g;b=b+8|0;F=72;break}case 3:{if((o|0)>0){j=o;g=+h[G+(o<<3)>>3];do{F=j;j=j+-1|0;E=G+(j<<3)|0;i=+h[E>>3];I=g;g=i+g;h[G+(F<<3)>>3]=I+(i-g);h[E>>3]=g}while((F|0)>1);k=(o|0)>1;if(k){j=o;g=+h[G+(o<<3)>>3];do{F=j;j=j+-1|0;E=G+(j<<3)|0;I=+h[E>>3];i=g;g=I+g;h[G+(F<<3)>>3]=i+(I-g);h[E>>3]=g}while((F|0)>2);if(k){j=o;i=0.0;while(1){i=i+ +h[G+(j<<3)>>3];if((j|0)>2)j=j+-1|0;else break}}else i=0.0}else i=0.0}else i=0.0;g=+h[G>>3];if(!p){h[b>>3]=g;g=+h[G+8>>3]}else{h[b>>3]=-g;i=-i;g=-+h[G+8>>3]}h[b+8>>3]=g;b=b+16|0;F=72;break}default:{}}if((F|0)==72)h[b>>3]=i;l=H;return s&7|0}function m$(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=A3(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function n$(a){a=+a;var b=0,d=0,e=0,f=0.0,g=0.0;h[j>>3]=a;d=c[j+4>>2]|0;b=d&2147483647;do if(b>>>0>2146435071)a=a+a;else{if(b>>>0<1048576){h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;b=d&2147483647;if(!b)break;else e=696219795}else e=715094163;c[j>>2]=0;c[j+4>>2]=((b>>>0)/3|0)+e|d&-2147483648;f=+h[j>>3];g=f*f*(f/a);h[j>>3]=(g*(g*g)*(g*.14599619288661245+-.758397934778766)+(g*(g*1.6214297201053545+-1.8849797954337717)+1.87595182427177))*f;d=s3(c[j>>2]|0,c[j+4>>2]|0,-2147483648,0)|0;e=z;c[j>>2]=d&-1073741824;c[j+4>>2]=e;f=+h[j>>3];a=a/(f*f);a=(a-f)/(f+f+a)*f+f}while(0);return +a}function o$(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function p$(a,b){a=+a;b=+b;return +(+o$(a,b))}function q$(a,b){a=+a;b=b|0;return +(+m$(a,b))}function r$(a,b){a=+a;b=+b;return +(+s$(a,b))}function s$(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=z3(i|0,l|0,52)|0;e=e&2047;m=z3(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=A3(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=t$(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=A3(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=A3(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=A3(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=A3(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=A3(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=A3(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=A3(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=t3(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=A3(f|0,d|0,1)|0;g=z;e=e+-1|0;f=t3(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=A3(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=s3(f|0,d|0,0,-1048576)|0;d=z;e=A3(e|0,0,52)|0;d=d|z;e=o|e}else{e=z3(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function t$(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function u$(a,b){a=+a;b=+b;var d=0.0,e=0,f=0,g=0,i=0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+32|0;m=q+24|0;n=q+16|0;o=q+8|0;p=q;h[j>>3]=a;t=c[j>>2]|0;g=c[j+4>>2]|0;h[j>>3]=b;e=c[j>>2]|0;g=g&2147483647;f=c[j+4>>2]&2147483647;i=g>>>0<f>>>0|(g|0)==(f|0)&t>>>0<e>>>0;s=i?e:t;r=i?f:g;e=i?t:e;f=i?g:f;g=z3(s|0,r|0,52)|0;i=z3(e|0,f|0,52)|0;c[j>>2]=s;c[j+4>>2]=r;a=+h[j>>3];c[j>>2]=e;c[j+4>>2]=f;k=+h[j>>3];do if((i|0)!=2047){if(!((e|0)==0&(f|0)==0|(g|0)==2047)){if((g-i|0)>64){a=a+k;break}if((g|0)>1533){d=5260135901548373507240989.0e186;b=a*1.90109156629516e-211;a=k*1.90109156629516e-211}else{t=(i|0)<573;d=t?1.90109156629516e-211:1.0;b=t?a*5260135901548373507240989.0e186:a;a=t?k*5260135901548373507240989.0e186:k}v$(m,n,b);v$(o,p,a);a=d*+C(+(+h[p>>3]+ +h[n>>3]+ +h[o>>3]+ +h[m>>3]))}}else a=k;while(0);l=q;return +a}function v$(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0;e=c*134217729.0;e=e+(c-e);d=c-e;c=c*c;h[a>>3]=c;h[b>>3]=d*d+(e*e-c+e*2.0*d);return}function w$(a,b,d){a=+a;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0,k=0,m=0;k=l;l=l+16|0;g=k;h[j>>3]=a;f=c[j+4>>2]&2147483647;do if(f>>>0<1072243196)if(f>>>0<1044816030){h[b>>3]=a;h[d>>3]=1.0;break}else{h[b>>3]=+f$(a,0.0,0);h[d>>3]=+i$(a,0.0);break}else{if(f>>>0>2146435071){i=a-a;h[d>>3]=i;h[b>>3]=i;break}f=k$(a,g)|0;m=g+8|0;e=+f$(+h[g>>3],+h[m>>3],1);a=+i$(+h[g>>3],+h[m>>3]);switch(f&3){case 0:{h[b>>3]=e;i=a;break}case 1:{h[b>>3]=a;i=-e;break}case 2:{h[b>>3]=-e;i=-a;break}case 3:{h[b>>3]=-a;i=e;break}default:{}}h[d>>3]=i}while(0);l=k;return}function x$(a,b){a=+a;b=b|0;return +(+h$(a,b))}function y$(a){a=a|0;if(a>>>0<131072)a=(d[143341+((d[143341+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else a=0;return a|0}function z$(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)f=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);f=(f&255)-(d[c>>0]|0)|0}return f|0}function A$(b,c){b=b|0;c=c|0;b=V_(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function B$(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function C$(a,b,c){a=a|0;b=b|0;c=c|0;c=F$(a,b,c,-1,0)|0;return c|0}function D$(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function E$(a){a=a|0;return (a+-48|0)>>>0<10|0}function F$(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+128|0;h=j;c[h>>2]=0;i=h+4|0;c[i>>2]=a;c[h+44>>2]=a;g=h+8|0;c[g>>2]=(a|0)<0?-1:a+2147483647|0;c[h+76>>2]=-1;G$(h,0);d=H$(h,d,1,e,f)|0;if(b|0)c[b>>2]=a+((c[i>>2]|0)+(c[h+108>>2]|0)-(c[g>>2]|0));l=j;return d|0}function G$(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function H$(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:do if(e>>>0>36){c[(O_()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0}while((B$(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=I$(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0;if((d[146510+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){G$(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[146510+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;G$(b,0);c[(O_()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=I$(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=r3(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=s3(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=I$(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[146766+((e*23|0)>>>5&7)>>0]|0;f=a[146510+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<<n;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=I$(b)|0;f=a[146510+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=z3(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0<k>>>0|(m|0)==(k|0)&l>>>0<i>>>0)){f=k;n=72;break}else j=k;while(1){i=A3(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=I$(b)|0;f=a[146510+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[146510+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=I$(b)|0;f=a[146510+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=w3(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=r3(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=s3(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=I$(b)|0;f=a[146510+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[146510+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0}while(e>>>0>(d[146510+i>>0]|0)>>>0);c[(O_()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0<h>>>0|(e|0)==(h|0)&i>>>0<g>>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(O_()|0)>>2]=34;g=s3(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(O_()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=t3(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function I$(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=J$(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function J$(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((K$(a)|0)==0?(nb[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function K$(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)nb[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function L$(a){a=a|0;return (a+-48|0)>>>0<10|0}function M$(a){a=a|0;if(!(N$(a)|0))a=(E$(a)|0)!=0&1;else a=1;return a|0}function N$(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function O$(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;e=a[b>>0]|0;a:do if(!(e<<24>>24))b=0;else{g=b;b=e;f=e&255;while(1){e=a[c>>0]|0;if(!(e<<24>>24))break a;if(b<<24>>24!=e<<24>>24?(f=P$(f)|0,(f|0)!=(P$(d[c>>0]|0)|0)):0)break;b=g+1|0;c=c+1|0;e=a[b>>0]|0;if(!(e<<24>>24)){b=0;break a}else{g=b;b=e;f=e&255}}b=a[g>>0]|0}while(0);g=P$(b&255)|0;return g-(P$(d[c>>0]|0)|0)|0}function P$(a){a=a|0;var b=0;b=(Q$(a)|0)==0;return (b?a:a|32)|0}function Q$(a){a=a|0;return (a+-65|0)>>>0<26|0}function R$(a){a=a|0;return S$(a,0)|0}function S$(c,f){c=c|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=(f<<1)+-1|0;l=f+-1|0;a:do if(!((c+-43008|0)>>>0<22272|((c+-11776|0)>>>0<30784|((c+-1536|0)>>>0<2560|(T$(c)|0)==0)))){g=(f|0)!=0;if(g&(c+-4256|0)>>>0<46){if((c|0)>4293)switch(c|0){case 4295:case 4301:break;default:break a}c=c+7264|0;break}if((c+-11520|0)>>>0<38&(g^1)){c=c+-7264|0;break}else g=0;do{i=a[66242+(g<<2)+2>>0]|0;j=i<<24>>24;h=c-(e[66242+(g<<2)>>1]|0)|0;if((h-(l&j)|0)>>>0<(d[66242+(g<<2)+3>>0]|0)>>>0){m=11;break}g=g+1|0}while((g|0)!=61);if((m|0)==11)if(i<<24>>24==1){c=f+c-(h&1)|0;break}else{c=(O(k,j)|0)+c|0;break}i=1-f|0;g=b[65754+(i<<1)>>1]|0;b:do if(g<<16>>16){h=0;while(1){if((g&65535|0)==(c|0))break;h=h+1|0;g=b[65754+(h<<2)+(i<<1)>>1]|0;if(!(g<<16>>16))break b}c=e[65754+(h<<2)+(f<<1)>>1]|0;break a}while(0);return ((c+-66600+(f*40|0)|0)>>>0<40?c+-40+(f*80|0)|0:c)|0}while(0);return c|0}function T$(a){a=a|0;if(a>>>0<131072)a=(d[146775+((d[146775+(a>>>8)>>0]|0)<<5|a>>>3&31)>>0]|0)>>>(a&7)&1;else a=a>>>0<196606&1;return a|0}function U$(a){a=a|0;var b=0;b=a;while(1)if(!(c[b>>2]|0))break;else b=b+4|0;return b-a>>2|0}function V$(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0;if(!e)b=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))b=0;else{h=b;b=f;f=f&255;while(1){e=e+-1|0;g=a[c>>0]|0;if(!((e|0)!=0&g<<24>>24!=0))break a;if(b<<24>>24!=g<<24>>24?(g=P$(f)|0,(g|0)!=(P$(d[c>>0]|0)|0)):0)break;b=h+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){b=0;break a}else{h=b;b=f;f=f&255}}b=a[h>>0]|0}while(0);b=P$(b&255)|0;b=b-(P$(d[c>>0]|0)|0)|0}return b|0}function W$(a){a=a|0;if(a>>>0>=255)if((a+-57344|0)>>>0<8185|(a>>>0<8232|(a+-8234|0)>>>0<47062))a=1;else return (a&65534|0)!=65534&(a+-65532|0)>>>0<1048580&1|0;else a=(a+1&127)>>>0>32&1;return a|0}function X$(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?187560:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[($$()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[62280+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(O_()|0)>>2]=84;f=-1}l=k;return f|0}function Y$(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Z$(a,b,0)|0;return a|0}function Z$(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(_$()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(O_()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(O_()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function _$(){return e$()|0}function $$(){return e$()|0}function a0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+272|0;n=p+8|0;o=p;do if(!(a[d>>0]|0)){d=Ta(149751)|0;if(d|0?a[d>>0]|0:0)break;d=Ta(149758+(b*12|0)|0)|0;if(d|0?a[d>>0]|0:0)break;d=Ta(149830)|0;if(d|0?a[d>>0]|0:0)break;d=149835}while(0);e=0;a:do{switch(a[d+e>>0]|0){case 47:case 0:break a;default:{}}e=e+1|0}while(e>>>0<15);f=a[d>>0]|0;if(f<<24>>24!=46?(a[d+e>>0]|0)==0:0)if(f<<24>>24==67)m=15;else{k=d;m=16}else{d=149835;m=15}if((m|0)==15)if(!(a[d+1>>0]|0))m=18;else{k=d;m=16}b:do if((m|0)==16)if((b$(k,149835)|0)!=0?(b$(k,149843)|0)!=0:0){d=c[46891]|0;if(d|0)do{if(!(b$(k,d+8|0)|0))break b;d=c[d+24>>2]|0}while((d|0)!=0);ta(187568);d=c[46891]|0;c:do if(d|0){while(1){if(!(b$(k,d+8|0)|0))break;d=c[d+24>>2]|0;if(!d)break c}La(187568);break b}while(0);d:do if(((c[46876]|0)==0?(g=Ta(149849)|0,(g|0)!=0):0)?(a[g>>0]|0)!=0:0){i=254-e|0;j=e+1|0;f=g;while(1){h=V_(f,58)|0;d=a[h>>0]|0;g=h-f+((d<<24>>24!=0)<<31>>31)|0;if(g>>>0<i>>>0){F3(n|0,f|0,g|0)|0;f=n+g|0;a[f>>0]=47;F3(f+1|0,k|0,e|0)|0;a[n+(j+g)>>0]=0;f=ua(n|0,o|0)|0;if(f|0)break;d=a[h>>0]|0}f=h+(d<<24>>24!=0&1)|0;if(!(a[f>>0]|0)){m=41;break d}}d=C_(28)|0;if(!d){S_(f,c[o>>2]|0)|0;m=41;break}else{c[d>>2]=f;c[d+4>>2]=c[o>>2];o=d+8|0;F3(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[46891];c[46891]=d;break}}else m=41;while(0);if((m|0)==41){d=C_(28)|0;if(d){c[d>>2]=c[15558];c[d+4>>2]=c[15559];o=d+8|0;F3(o|0,k|0,e|0)|0;a[o+e>>0]=0;c[d+24>>2]=c[46891];c[46891]=d}}La(187568);d=(b|0)==0&(d|0)==0?62232:d}else{d=k;m=18}while(0);do if((m|0)==18){if((b|0)==0?(a[d+1>>0]|0)==46:0){d=62232;break}d=0}while(0);l=p;return d|0}function b0(a,b){a=a|0;b=b|0;c0(a,b)|0;return a|0}function c0(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function d0(a){a=a|0;return ((a|0)==32|(a|0)==9)&1|0}function e0(a){a=a|0;if(!a)a=0;else a=(f0(63396,a)|0)!=0&1;return a|0}function f0(a,b){a=a|0;b=b|0;var d=0;if(!b)a=a+((U$(a)|0)<<2)|0;else{while(1){d=c[a>>2]|0;if((d|0)==0|(d|0)==(b|0))break;else a=a+4|0}a=d|0?a:0}return a|0}function g0(a,b){a=a|0;b=b|0;do switch(b|0){case 1:{a=h0(a)|0;break}case 2:{a=T$(a)|0;break}case 3:{a=i0(a)|0;break}case 4:{a=j0(a)|0;break}case 5:{a=L$(a)|0;break}case 6:{a=k0(a)|0;break}case 7:{a=l0(a)|0;break}case 8:{a=W$(a)|0;break}case 9:{a=y$(a)|0;break}case 10:{a=e0(a)|0;break}case 11:{a=m0(a)|0;break}case 12:{a=n0(a)|0;break}default:a=0}while(0);return a|0}function h0(a){a=a|0;if(!(L$(a)|0))a=(T$(a)|0)!=0&1;else a=1;return a|0}function i0(a){a=a|0;return d0(a)|0}function j0(a){a=a|0;return ((a+-65529|0)>>>0<3|((a&-2|0)==8232|(a>>>0<32|(a+-127|0)>>>0<33)))&1|0}function k0(a){a=a|0;if(!(e0(a)|0))a=(W$(a)|0)!=0&1;else a=0;return a|0}function l0(a){a=a|0;return (R$(a)|0)!=(a|0)|0}function m0(a){a=a|0;return (o0(a)|0)!=(a|0)|0}function n0(a){a=a|0;return ((a+-48|0)>>>0<10|((a|32)+-97|0)>>>0<6)&1|0}function o0(a){a=a|0;return S$(a,1)|0}function p0(a){a=a|0;return (a+-97|0)>>>0<26|0}function q0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=63484;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(O_()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=r0(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function r0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((s0(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=t0(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=s0(b,d,n,q,p)|0;if(h){nb[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=s0(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)u0(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function s0(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+64|0;D=I+16|0;E=I;A=I+24|0;G=I+8|0;H=I+20|0;c[D>>2]=e;w=(d|0)!=0;x=A+40|0;y=x;A=A+39|0;B=G+4|0;j=0;e=0;m=0;a:while(1){do if((e|0)>-1)if((j|0)>(2147483647-e|0)){c[(O_()|0)>>2]=75;e=-1;break}else{e=j+e|0;break}while(0);r=c[D>>2]|0;j=a[r>>0]|0;if(!(j<<24>>24)){v=88;break}else k=r;b:while(1){switch(j<<24>>24){case 37:{j=k;v=9;break b}case 0:{j=k;break b}default:{}}u=k+1|0;c[D>>2]=u;j=a[u>>0]|0;k=u}c:do if((v|0)==9)while(1){v=0;if((a[k+1>>0]|0)!=37)break c;j=j+1|0;k=k+2|0;c[D>>2]=k;if((a[k>>0]|0)!=37)break;else v=9}while(0);j=j-r|0;if(w)v0(d,r,j);if(j|0)continue;u=(E$(a[(c[D>>2]|0)+1>>0]|0)|0)==0;k=c[D>>2]|0;if(!u?(a[k+2>>0]|0)==36:0){s=(a[k+1>>0]|0)+-48|0;n=1;j=3}else{s=-1;n=m;j=1}j=k+j|0;c[D>>2]=j;k=a[j>>0]|0;u=(k<<24>>24)+-32|0;if(u>>>0>31|(1<<u&75913|0)==0)m=0;else{m=0;do{m=1<<(k<<24>>24)+-32|m;j=j+1|0;c[D>>2]=j;k=a[j>>0]|0;u=(k<<24>>24)+-32|0}while(!(u>>>0>31|(1<<u&75913|0)==0))}if(k<<24>>24==42){if((E$(a[j+1>>0]|0)|0)!=0?(F=c[D>>2]|0,(a[F+2>>0]|0)==36):0){j=F+1|0;c[i+((a[j>>0]|0)+-48<<2)>>2]=10;j=c[g+((a[j>>0]|0)+-48<<3)>>2]|0;k=1;n=F+3|0}else{if(n|0){e=-1;break}if(w){u=(c[f>>2]|0)+(4-1)&~(4-1);j=c[u>>2]|0;c[f>>2]=u+4}else j=0;k=0;n=(c[D>>2]|0)+1|0}c[D>>2]=n;t=(j|0)<0;u=t?0-j|0:j;m=t?m|8192:m;t=k;j=n}else{j=w0(D)|0;if((j|0)<0){e=-1;break}u=j;t=n;j=c[D>>2]|0}do if((a[j>>0]|0)==46){if((a[j+1>>0]|0)!=42){c[D>>2]=j+1;p=w0(D)|0;j=c[D>>2]|0;break}if(E$(a[j+2>>0]|0)|0?(C=c[D>>2]|0,(a[C+3>>0]|0)==36):0){p=C+2|0;c[i+((a[p>>0]|0)+-48<<2)>>2]=10;p=c[g+((a[p>>0]|0)+-48<<3)>>2]|0;j=C+4|0;c[D>>2]=j;break}if(t|0){e=-1;break a}if(w){q=(c[f>>2]|0)+(4-1)&~(4-1);j=c[q>>2]|0;c[f>>2]=q+4}else j=0;q=(c[D>>2]|0)+2|0;c[D>>2]=q;p=j;j=q}else p=-1;while(0);q=0;while(1){if(((a[j>>0]|0)+-65|0)>>>0>57){e=-1;break a}k=j;j=j+1|0;c[D>>2]=j;k=a[(a[k>>0]|0)+-65+(149862+(q*58|0))>>0]|0;n=k&255;if((n+-1|0)>>>0>=8)break;else q=n}if(!(k<<24>>24)){e=-1;break}o=(s|0)>-1;do if(k<<24>>24==19)if(o){e=-1;break a}else v=50;else{if(o){c[i+(s<<2)>>2]=n;o=g+(s<<3)|0;s=c[o+4>>2]|0;v=E;c[v>>2]=c[o>>2];c[v+4>>2]=s;v=50;break}if(!w){e=0;break a}x0(E,n,f);j=c[D>>2]|0}while(0);if((v|0)==50){v=0;if(!w){j=0;m=t;continue}}k=a[j+-1>>0]|0;k=(q|0)!=0&(k&15|0)==3?k&-33:k;j=m&-65537;s=(m&8192|0)==0?m:j;d:do switch(k|0){case 110:switch((q&255)<<24>>24){case 0:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 1:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 2:{j=c[E>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;m=t;continue a}case 3:{b[c[E>>2]>>1]=e;j=0;m=t;continue a}case 4:{a[c[E>>2]>>0]=e;j=0;m=t;continue a}case 6:{c[c[E>>2]>>2]=e;j=0;m=t;continue a}case 7:{j=c[E>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;m=t;continue a}default:{j=0;m=t;continue a}}case 112:{k=120;j=p>>>0>8?p:8;m=s|8;v=62;break}case 88:case 120:{j=p;m=s;v=62;break}case 111:{k=E;j=c[k>>2]|0;k=c[k+4>>2]|0;o=z0(j,k,x)|0;m=y-o|0;q=0;n=150326;p=(s&8|0)==0|(p|0)>(m|0)?p:m+1|0;m=s;v=68;break}case 105:case 100:{k=E;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)<0){j=t3(0,0,j|0,k|0)|0;k=z;m=E;c[m>>2]=j;c[m+4>>2]=k;m=1;n=150326;v=67;break d}else{m=(s&2049|0)!=0&1;n=(s&2048|0)==0?((s&1|0)==0?150326:150328):150327;v=67;break d}}case 117:{k=E;m=0;n=150326;j=c[k>>2]|0;k=c[k+4>>2]|0;v=67;break}case 99:{a[A>>0]=c[E>>2];r=A;q=0;n=150326;o=x;k=1;break}case 109:{k=c$(c[(O_()|0)>>2]|0)|0;v=72;break}case 115:{k=c[E>>2]|0;k=k|0?k:150336;v=72;break}case 67:{c[G>>2]=c[E>>2];c[B>>2]=0;c[E>>2]=G;p=-1;m=G;v=76;break}case 83:{j=c[E>>2]|0;if(!p){B0(d,32,u,0,s);j=0;v=85}else{m=j;v=76}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{j=C0(d,+h[E>>3],u,p,s,k)|0;m=t;continue a}default:{q=0;n=150326;o=x;k=p;j=s}}while(0);e:do if((v|0)==62){s=E;r=c[s>>2]|0;s=c[s+4>>2]|0;o=y0(r,s,x,k&32)|0;n=(m&8|0)==0|(r|0)==0&(s|0)==0;q=n?0:2;n=n?150326:150326+(k>>4)|0;p=j;j=r;k=s;v=68}else if((v|0)==67){o=A0(j,k,x)|0;q=m;m=s;v=68}else if((v|0)==72){v=0;s=D$(k,0,p)|0;m=(s|0)==0;r=k;q=0;n=150326;o=m?k+p|0:s;k=m?p:s-k|0}else if((v|0)==76){v=0;o=m;j=0;k=0;while(1){n=c[o>>2]|0;if(!n)break;k=Y$(H,n)|0;if((k|0)<0|k>>>0>(p-j|0)>>>0)break;j=k+j|0;if(p>>>0>j>>>0)o=o+4|0;else break}if((k|0)<0){e=-1;break a}B0(d,32,u,j,s);if(!j){j=0;v=85}else{n=0;while(1){k=c[m>>2]|0;if(!k){v=85;break e}k=Y$(H,k)|0;n=k+n|0;if((n|0)>(j|0)){v=85;break e}v0(d,H,k);if(n>>>0>=j>>>0){v=85;break}else m=m+4|0}}}while(0);if((v|0)==68){v=0;k=(j|0)!=0|(k|0)!=0;j=(p|0)!=0|k;k=y-o+((k^1)&1)|0;r=j?o:x;o=x;k=j?((p|0)>(k|0)?p:k):p;j=(p|0)>-1?m&-65537:m}else if((v|0)==85){v=0;B0(d,32,u,j,s^8192);j=(u|0)>(j|0)?u:j;m=t;continue}p=o-r|0;o=(k|0)<(p|0)?p:k;s=o+q|0;m=(u|0)<(s|0)?s:u;B0(d,32,m,s,j);v0(d,n,q);B0(d,48,m,s,j^65536);B0(d,48,o,p,0);v0(d,r,p);B0(d,32,m,s,j^8192);j=m;m=t}f:do if((v|0)==88)if(!d)if(m){e=1;while(1){j=c[i+(e<<2)>>2]|0;if(!j)break;x0(g+(e<<3)|0,j,f);j=e+1|0;if((e|0)<9)e=j;else{e=j;break}}if((e|0)<10)while(1){if(c[i+(e<<2)>>2]|0){e=-1;break f}if((e|0)<9)e=e+1|0;else{e=1;break}}else e=1}else e=0;while(0);l=I;return e|0}function t0(a){a=a|0;return 0}function u0(a){a=a|0;return}function v0(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))E0(b,d,a)|0;return}function w0(b){b=b|0;var d=0,e=0;if(!(E$(a[c[b>>2]>>0]|0)|0))d=0;else{d=0;do{e=c[b>>2]|0;d=(d*10|0)+-48+(a[e>>0]|0)|0;e=e+1|0;c[b>>2]=e}while((E$(a[e>>0]|0)|0)!=0)}return d|0}function x0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function y0(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[150374+(b&15)>>0]|0|f;b=z3(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function z0(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=z3(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function A0(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=x3(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=w3(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function B0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;H3(f|0,b<<24>>24|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{v0(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}v0(a,f,e)}l=g;return}function C0(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;D0(e)|0;if((z|0)<0){e=-e;C=1;B=150343}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?150344:150349):150346}D0(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;B0(b,32,f,j,h&-65537);v0(b,B,C);v0(b,e!=e|0.0!=0.0?(G?150511:150370):G?150362:150366,3);B0(b,32,f,j,h^8192)}else{r=+x$(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=A0(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[150374+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;B0(b,32,f,F,h);v0(b,s,q);B0(b,48,f,F,h^65536);v0(b,G,k);B0(b,48,j-k|0,0,0);v0(b,o,E);B0(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=A3(c[j>>2]|0,0,o|0)|0;x=s3(x|0,z|0,m|0,0)|0;y=z;v=x3(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=w3(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0<m>>>0){o=(1<<s)+-1|0;p=1e9>>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0<m>>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0<g>>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0<x>>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0<j>>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=A0(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;B0(b,32,f,j,h);v0(b,B,C);B0(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=A0(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){H3(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}v0(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)v0(b,150390,1);if(n>>>0<w>>>0&(k|0)>0)while(1){m=A0(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){H3(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}v0(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0<w>>>0&(k|0)>9)){k=m;break}else k=m}B0(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=A0(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;v0(b,m,1);if(s&(k|0)<1){m=n;break}v0(b,150390,1);m=n}else{if(m>>>0<=G>>>0)break;H3(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;v0(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0<t>>>0&(k|0)>-1)}B0(b,48,k+18|0,18,0);v0(b,v,E-v|0)}B0(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function D0(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function E0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(F0(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0<d>>>0){f=nb[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=nb[c[e+36>>2]&63](e,b,i)|0;if(f>>>0<i>>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);F3(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function F0(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function G0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;F3(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function H0(b){b=b|0;var c=0,d=0,e=0,f=0;e=a[b>>0]|0;c=1;d=150392;f=97;while(1){if(e<<24>>24==f<<24>>24?(b$(b,d)|0)==0:0)break;d=d+6|0;f=a[d>>0]|0;if(!(f<<24>>24)){c=0;break}else c=c+1|0}return c|0}function I0(a){a=a|0;var b=0;b=(p0(a)|0)==0;return (b?a:a&95)|0}function J0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;do if(b>>>0>6)d=0;else{ta(187576);if((b|0)!=6){d=K0(b,d)|0;La(187576);break}if(!d){d=194052;b=0}else{b=g;e=150465;f=b+16|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));f=0;do{b=V_(d,59)|0;e=b-d|0;if((e|0)<16){F3(g|0,d|0,e|0)|0;a[g+e>>0]=0;d=(a[b>>0]|0)==0?d:b+1|0}K0(f,g)|0;f=f+1|0}while((f|0)!=6);d=194052;b=0}while(1){f=c[187536+(b<<2)>>2]|0;f=f|0?f+8|0:150481;e=W_(f)|0;F3(d|0,f|0,e|0)|0;f=d+e|0;a[f>>0]=59;b=b+1|0;if((b|0)==6)break;else d=d+(e+1)|0}a[f>>0]=0;La(187576);d=194052}while(0);l=h;return d|0}function K0(a,b){a=a|0;b=b|0;if(!b)a=c[187536+(a<<2)>>2]|0;else{b=a0(a,b)|0;c[187536+(a<<2)>>2]=b;a=b}return (a|0?a+8|0:150481)|0}function L0(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)b=0;else{while(1){e=a[b>>0]|0;f=a[c>>0]|0;if(e<<24>>24!=f<<24>>24)break;d=d+-1|0;if(!d){b=0;break a}else{b=b+1|0;c=c+1|0}}b=(e&255)-(f&255)|0}while(0);return b|0}function M0(a){a=a|0;return N0(a)|0}function N0(a){a=a|0;return B3(a|0)|0}function O0(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((c[f+76>>2]|0)>-1)m=t0(f)|0;else m=0;g=e+-1|0;if((e|0)<2){n=f+74|0;l=a[n>>0]|0;a[n>>0]=l+255|l;if(m|0)u0(f);if(!g)a[b>>0]=0;else b=0}else{a:do if(g){k=f+4|0;l=f+8|0;e=b;while(1){h=c[k>>2]|0;o=h;p=(c[l>>2]|0)-o|0;i=D$(h,10,p)|0;j=(i|0)==0;i=j?p:1-o+i|0;i=i>>>0<g>>>0?i:g;F3(e|0,h|0,i|0)|0;h=(c[k>>2]|0)+i|0;c[k>>2]=h;e=e+i|0;i=g-i|0;if(!(j&(i|0)!=0)){n=17;break a}if(h>>>0>=(c[l>>2]|0)>>>0){g=J$(f)|0;if((g|0)<0)break;else j=g}else{c[k>>2]=h+1;j=d[h>>0]|0}g=i+-1|0;h=e+1|0;a[e>>0]=j;if(!((g|0)!=0&(j&255|0)!=10)){e=h;n=17;break a}else e=h}if((e|0)!=(b|0)?(c[f>>2]&16|0)!=0:0)n=17;else b=0}else{e=b;n=17}while(0);if((n|0)==17)if(!b)b=0;else a[e>>0]=0;if(m)u0(f)}return b|0}function P0(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=A$(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=Q0(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=R0(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=S0(b,c)|0;break}else{b=T0(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function Q0(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function R0(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function S0(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function T0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;c[t+20>>2]=0;c[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(L0(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0<s>>>0){i=D$(g,0,k)|0;if(i)if((i-h|0)>>>0<s>>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0<f>>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function U0(a,b,c){a=a|0;b=b|0;c=c|0;V0(a,b,c)|0;return a|0}function V0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;a:do if(!((g^b)&3)){f=(e|0)!=0;if(f&(g&3|0)!=0)do{g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0}while(f&(d&3|0)!=0);if(f){if(a[d>>0]|0){b:do if(e>>>0>3){f=d;while(1){d=c[f>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0){d=f;break b}c[b>>2]=d;e=e+-4|0;d=f+4|0;b=b+4|0;if(e>>>0>3)f=d;else break}}while(0);h=11}}else e=0}else h=11;while(0);c:do if((h|0)==11)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);H3(b|0,0,e|0)|0;return b|0}function W0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+32|0;f=g;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;e=a[d>>0]|0;do if(!(e<<24>>24))d=0;else{if(!(a[d+1>>0]|0)){d=b;while(1)if((a[d>>0]|0)==e<<24>>24)d=d+1|0;else break;d=d-b|0;break}do{h=f+(((e&255)>>>5&255)<<2)|0;c[h>>2]=c[h>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);e=a[b>>0]|0;a:do if(!(e<<24>>24))d=b;else{d=b;do{if(!(c[f+(((e&255)>>>5&255)<<2)>>2]&1<<(e&31)))break a;d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0)}while(0);d=d-b|0}while(0);l=g;return d|0}function X0(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P_(a)|0;a=Ja(6,d|0)|0;a=N_((a|0)==-4?0:a)|0;l=b;return a|0}function Y0(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Z0(a,b,f)|0;l=e;return d|0}function Z0(a,b,c){a=a|0;b=b|0;c=c|0;return q0(a,2147483647,b,c)|0}function _0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(d,b)|0;i=k;c[i>>2]=1;c[i+4>>2]=0;a:do if(h|0){i=0-d|0;c[j+4>>2]=d;c[j>>2]=d;f=2;b=d;g=d;while(1){b=b+d+g|0;c[j+(f<<2)>>2]=b;if(b>>>0<h>>>0){n=g;f=f+1|0;g=b;b=n}else break}g=a+h+i|0;if(g>>>0>a>>>0){h=g;f=1;b=1;do{do if((b&3|0)!=3){b=f+-1|0;if((c[j+(b<<2)>>2]|0)>>>0<(h-a|0)>>>0)$0(a,d,e,f,j);else b1(a,d,e,k,f,0,j);if((f|0)==1){c1(k,1);f=0;break}else{c1(k,b);f=1;break}}else{$0(a,d,e,f,j);a1(k,2);f=f+2|0}while(0);b=c[k>>2]|1;c[k>>2]=b;a=a+d|0}while(a>>>0<g>>>0)}else{f=1;b=1}b1(a,d,e,k,f,0,j);g=k+4|0;while(1){if((f|0)==1&(b|0)==1){if(!(c[g>>2]|0))break a}else if((f|0)>=2){c1(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;a1(k,1);b1(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);c1(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;b1(h,d,e,k,n,1,j);a=h;f=n;continue}b=d1(k)|0;a1(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return}function $0(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((lb[d&127](a,g)|0)>-1?(lb[d&127](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((lb[d&127](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);f1(b,m,e);l=n;return}function a1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[f>>2]|0;c[a>>2]=e;c[f>>2]=0;b=b+-32|0;d=0}else{d=c[f>>2]|0;e=c[a>>2]|0}c[a>>2]=d<<32-b|e>>>b;c[f>>2]=d>>>b;return}function b1(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(lb[d&127](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((lb[d&127](g,j)|0)>-1){i=10;break a}if((lb[d&127](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=d1(n)|0;a1(n,q);f=q+f|0;if(!((c[n>>2]|0)!=1|(c[k>>2]|0)!=0)){e=g;a=j;i=10;break a}a=j+(0-(c[h+(f<<2)>>2]|0))|0;if((lb[d&127](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){f1(b,o,e);$0(a,b,d,f,h)}l=p;return}function c1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[a>>2]|0;c[f>>2]=e;c[a>>2]=0;b=b+-32|0;d=0}else{d=c[a>>2]|0;e=c[f>>2]|0}c[f>>2]=d>>>(32-b|0)|e<<b;c[a>>2]=d<<b;return}function d1(a){a=a|0;var b=0;b=e1((c[a>>2]|0)+-1|0)|0;if(!b){b=e1(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function e1(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function f1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,a|0):0)while(1){f=a>>>0<256?a:256;F3(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;F3(c[i>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while((e|0)!=(d|0));a=a-f|0;if(!a)break a;e=c[g>>2]|0}while(0);l=h;return}function g1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=r0(a,b,f)|0;l=e;return d|0}function h1(b){b=b|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;sa(0,e|0)|0;d=0;e=(c[e+4>>2]|0)*65537^(e>>>4)+b;while(1){a[b+d>>0]=(e&15)+65|e<<1&32;d=d+1|0;if((d|0)==6)break;else e=e>>>5}l=f;return b|0}function i1(a,b,c){a=a|0;b=b|0;c=c|0;c=F$(a,b,c,-2147483648,0)|0;return c|0}function j1(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h;e=a[d>>0]|0;a:do if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){H3(f|0,0,32)|0;e=a[d>>0]|0;if(e<<24>>24)do{i=f+(((e&255)>>>5&255)<<2)|0;c[i>>2]=c[i>>2]|1<<(e&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);d=a[b>>0]|0;if(!(d<<24>>24))e=b;else{e=b;do{if(c[f+(((d&255)>>>5&255)<<2)>>2]&1<<(d&31)|0)break a;e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0)}}else g=3;while(0);if((g|0)==3)e=V_(b,e<<24>>24)|0;l=h;return e-b|0}function k1(b,d){b=b|0;d=d|0;var e=0;if(!b){b=c[46896]|0;if(!b)b=0;else e=3}else e=3;do if((e|0)==3){b=b+(W0(b,d)|0)|0;if(!(a[b>>0]|0)){c[46896]=0;b=0;break}d=b+(j1(b,d)|0)|0;c[46896]=d;if(!(a[d>>0]|0)){c[46896]=0;break}else{c[46896]=d+1;a[d>>0]=0;break}}while(0);return b|0}function l1(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;e=c&255;do{if(!d){c=0;break}d=d+-1|0;c=b+d|0}while((a[c>>0]|0)!=e<<24>>24);return c|0}function m1(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if(!b){b=c[e>>2]|0;if(!b)b=0;else f=3}else f=3;do if((f|0)==3){b=b+(W0(b,d)|0)|0;if(!(a[b>>0]|0)){c[e>>2]=0;b=0;break}d=b+(j1(b,d)|0)|0;c[e>>2]=d;if(!(a[d>>0]|0)){c[e>>2]=0;break}else{c[e>>2]=d+1;a[d>>0]=0;break}}while(0);return b|0}function n1(a){a=a|0;var b=0,c=0;b=(W_(a)|0)+1|0;c=C_(b)|0;if(!c)a=0;else a=F3(c|0,a|0,b|0)|0;return a|0}function o1(a,b){a=a|0;b=b|0;return l1(a,b,(W_(a)|0)+1|0)|0}function p1(a,b){a=a|0;b=b|0;b0(a+(W_(a)|0)|0,b)|0;return a|0}function q1(b,c){b=b|0;c=c|0;c=b+(j1(b,c)|0)|0;return (a[c>>0]|0?c:0)|0}function r1(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(t0(a)|0)==0;a=(c[a>>2]|0)>>>4&1}else a=(c[a>>2]|0)>>>4&1;return a|0}function s1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=t0(a)|0;else f=0;t1(a);g=(c[a>>2]&1|0)!=0;if(!g){e=u1()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;v1()}b=w1(a)|0;b=kb[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)D_(d);if(g){if(f|0)u0(a)}else D_(a);return b|0}function t1(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(y1()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function u1(){ta(187588);return 187596}function v1(){La(187588);return}function w1(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=x1(a)|0;break}d=(t0(a)|0)==0;b=x1(a)|0;if(!d)u0(a)}else{if(!(c[15685]|0))b=0;else b=w1(c[15685]|0)|0;a=c[(u1()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=t0(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=x1(a)|0|b;if(d|0)u0(a);a=c[a+56>>2]|0}while((a|0)!=0);v1()}while(0);return b|0}function x1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(nb[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0<g>>>0)nb[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function y1(){return e$()|0}function z1(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+64|0;j=k+40|0;h=k+24|0;g=k+16|0;f=k;i=k+56|0;if(A$(150498,a[d>>0]|0)|0){e=C_(1156)|0;if(!e)e=0;else{H3(e|0,0,124)|0;if(!(A$(d,43)|0))c[e>>2]=(a[d>>0]|0)==114?8:4;if(A$(d,101)|0){c[f>>2]=b;c[f+4>>2]=2;c[f+8>>2]=1;Ea(221,f|0)|0}if((a[d>>0]|0)==97){c[g>>2]=b;c[g+4>>2]=3;d=Ea(221,g|0)|0;if(!(d&1024)){c[h>>2]=b;c[h+4>>2]=4;c[h+8>>2]=d|1024;Ea(221,h|0)|0}f=c[e>>2]|128;c[e>>2]=f}else f=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;d=e+75|0;a[d>>0]=-1;if((f&8|0)==0?(c[j>>2]=b,c[j+4>>2]=21523,c[j+8>>2]=i,(Ia(54,j|0)|0)==0):0)a[d>>0]=10;c[e+32>>2]=15;c[e+36>>2]=18;c[e+40>>2]=16;c[e+12>>2]=17;if(!(c[46875]|0))c[e+76>>2]=-1;A1(e)|0}}else{c[(O_()|0)>>2]=22;e=0}l=k;return e|0}function A1(a){a=a|0;var b=0,d=0;b=u1()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;v1();return a|0}function B1(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;g=j;a:do if(!e)b=0;else{do if(f|0){i=(b|0)==0?g:b;b=a[e>>0]|0;if(b<<24>>24>-1){c[i>>2]=b&255;b=b<<24>>24!=0&1;break a}h=(c[c[(C1()|0)+188>>2]>>2]|0)==0;b=a[e>>0]|0;if(h){c[i>>2]=b<<24>>24&57343;b=1;break a}b=(b&255)+-194|0;if(b>>>0<=50){g=e+1|0;h=c[62280+(b<<2)>>2]|0;if(f>>>0<4?h&-2147483648>>>((f*6|0)+-6|0)|0:0)break;b=d[g>>0]|0;f=b>>>3;if((f+-16|f+(h>>26))>>>0<=7){b=b+-128|h<<6;if((b|0)>=0){c[i>>2]=b;b=2;break a}g=(d[e+2>>0]|0)+-128|0;if(g>>>0<=63){g=g|b<<6;if((g|0)>=0){c[i>>2]=g;b=3;break a}b=(d[e+3>>0]|0)+-128|0;if(b>>>0<=63){c[i>>2]=b|g<<6;b=4;break a}}}}}while(0);c[(O_()|0)>>2]=84;b=-1}while(0);l=j;return b|0}function C1(){return e$()|0}function D1(a,b){a=a|0;b=b|0;var c=0;c=W_(a)|0;return ((E1(a,1,c,b)|0)!=(c|0))<<31>>31|0}function E1(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(t0(e)|0)==0;a=E0(a,f,e)|0;if(!g)u0(e)}else a=E0(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function F1(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(F0(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0<h>>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((nb[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function G1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=N_(Fa(3,f|0)|0)|0;l=e;return d|0}function H1(){var a=0,b=0;b=l;l=l+16|0;a=Da(20,b|0)|0;l=b;return a|0}function I1(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=b;e=150483;f=d+15|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));if(!c){a[b+14>>0]=48;a[b+15>>0]=0}else{e=c;d=14;while(1){d=d+1|0;if(e>>>0<10)break;else e=(e>>>0)/10|0}a[b+d>>0]=0;while(1){d=d+-1|0;a[b+d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}}return}function J1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+48|0;f=g+40|0;e=g+8|0;d=g;c[d>>2]=a;c[d+4>>2]=b;d=Ca(197,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(Ea(221,e|0)|0)>=0):0){I1(e,a);c[f>>2]=e;c[f+4>>2]=b;b=N_(Ba(195,f|0)|0)|0}else b=N_(d)|0;l=g;return b|0}function K1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=N_(Ga(33,e|0)|0)|0;l=d;return b|0}function L1(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(A$(150498,a[d>>0]|0)|0){f=M1(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=N_(Ha(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Ea(221,g|0)|0}b=z1(e,d)|0;if(!b){c[h>>2]=e;Ja(6,h|0)|0;b=0}}else b=0}else{c[(O_()|0)>>2]=22;b=0}l=i;return b|0}function M1(b){b=b|0;var c=0,d=0,e=0;d=(A$(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(A$(b,120)|0)==0;d=e?d:d|128;b=(A$(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function N1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=O1(a,b,f)|0;l=e;return d|0}function O1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=38;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=Q1(e,b,d)|0;l=g;return h|0}function P1(a,b,c){a=a|0;b=b|0;c=c|0;return Y1(a,b,c)|0}function Q1(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=l;l=l+288|0;F=L+8|0;G=L+17|0;H=L;I=L+16|0;if((c[b+76>>2]|0)>-1)K=t0(b)|0;else K=0;i=a[e>>0]|0;a:do if(i<<24>>24){y=b+4|0;A=b+100|0;B=b+108|0;C=b+8|0;D=G+10|0;E=G+33|0;x=F+4|0;p=e;u=0;e=0;j=0;k=i;i=0;b:while(1){c:do if(!(B$(k&255)|0)){k=(a[p>>0]|0)==37;d:do if(k){m=p+1|0;n=a[m>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{w=0;m=p+2|0;break}default:{if(E$(n&255)|0?(a[p+2>>0]|0)==36:0){w=R1(f,(d[m>>0]|0)+-48|0)|0;m=p+3|0;break e}v=(c[f>>2]|0)+(4-1)&~(4-1);w=c[v>>2]|0;c[f>>2]=v+4}}while(0);if(!(E$(d[m>>0]|0)|0))s=0;else{k=0;do{k=(k*10|0)+-48+(d[m>>0]|0)|0;m=m+1|0}while((E$(d[m>>0]|0)|0)!=0);s=k}p=a[m>>0]|0;n=m+1|0;if(p<<24>>24==109){k=(w|0)!=0&1;j=0;m=n;p=a[n>>0]|0;i=0}else k=0;n=m+1|0;switch(p<<24>>24){case 104:{v=(a[n>>0]|0)==104;p=v?-2:-1;m=v?m+2|0:n;break}case 108:{v=(a[n>>0]|0)==108;p=v?3:1;m=v?m+2|0:n;break}case 106:{p=3;m=n;break}case 116:case 122:{p=1;m=n;break}case 76:{p=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{p=0;break}default:{J=136;break b}}r=d[m>>0]|0;t=(r&47|0)==3;r=t?r|32:r;t=t?1:p;q=r&255;switch(q<<24>>24){case 99:{s=(s|0)>1?s:1;break}case 91:break;case 110:{S1(w,t,u,((u|0)<0)<<31>>31);n=u;break c}default:{G$(b,0);do{n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=I$(b)|0}while((B$(n)|0)!=0);if(!(c[A>>2]|0))n=c[y>>2]|0;else{n=(c[y>>2]|0)+-1|0;c[y>>2]=n}u=(c[B>>2]|0)+u+n-(c[C>>2]|0)|0}}G$(b,s);p=c[y>>2]|0;n=c[A>>2]|0;if(p>>>0<n>>>0)c[y>>2]=p+1;else{if((I$(b)|0)<0){J=136;break b}n=c[A>>2]|0}if(n|0)c[y>>2]=(c[y>>2]|0)+-1;f:do switch(q<<24>>24){case 91:case 99:case 115:{v=(r|0)==99;g:do if((r|16|0)==115){H3(G|0,-1,257)|0;a[G>>0]=0;if((r|0)==115){a[E>>0]=0;a[D>>0]=0;a[D+1>>0]=0;a[D+2>>0]=0;a[D+3>>0]=0;a[D+4>>0]=0}}else{n=m+1|0;q=(a[n>>0]|0)==94;r=q&1;m=q?m+2|0:n;H3(G|0,r|0,257)|0;a[G>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;J=65;break}case 93:{n=94;J=65;break}default:{}}while(1){if((J|0)==65){J=0;a[G+n>>0]=r^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{J=136;break b}case 93:break g;case 45:{q=m+1|0;n=a[q>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){p=(r^1)&255;m=m&255;do{m=m+1|0;a[G+m>>0]=p;n=a[q>>0]|0}while((m|0)<(n&255|0));m=q}else m=q;break}default:{}}while(0);n=(n&255)+1|0;J=65}}while(0);n=v?s+1|0:31;r=(t|0)==1;t=(k|0)!=0;i:do if(r){if(t){i=C_(n<<2)|0;if(!i){j=0;i=0;J=136;break b}}else i=w;c[F>>2]=0;c[x>>2]=0;q=n;j=0;j:while(1){p=(i|0)==0;do{k:while(1){n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=I$(b)|0;if(!(a[G+(n+1)>>0]|0))break j;a[I>>0]=n;switch(X$(H,I,1,F)|0){case -1:{j=0;J=136;break b}case -2:break;default:break k}}if(!p){c[i+(j<<2)>>2]=c[H>>2];j=j+1|0}}while(!(t&(j|0)==(q|0)));j=q<<1|1;n=F_(i,j<<2)|0;if(!n){j=0;J=136;break b}else{p=q;q=j;i=n;j=p}}if(!(T1(F)|0)){j=0;J=136;break b}else{q=j;j=0;p=i}}else{if(t){j=C_(n)|0;if(!j){j=0;i=0;J=136;break b}else{p=n;i=0}while(1){do{n=c[y>>2]|0;if(n>>>0<(c[A>>2]|0)>>>0){c[y>>2]=n+1;n=d[n>>0]|0}else n=I$(b)|0;if(!(a[G+(n+1)>>0]|0)){q=i;p=0;i=0;break i}a[j+i>>0]=n;i=i+1|0}while((i|0)!=(p|0));i=p<<1|1;n=F_(j,i)|0;if(!n){i=0;J=136;break b}else{q=p;p=i;j=n;i=q}}}if(!w)while(1){i=c[y>>2]|0;if(i>>>0<(c[A>>2]|0)>>>0){c[y>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0;if(!(a[G+(i+1)>>0]|0)){q=0;j=0;p=0;i=0;break i}}else j=0;while(1){i=c[y>>2]|0;if(i>>>0<(c[A>>2]|0)>>>0){c[y>>2]=i+1;i=d[i>>0]|0}else i=I$(b)|0;if(!(a[G+(i+1)>>0]|0)){q=j;j=w;p=0;i=0;break i}a[w+j>>0]=i;j=j+1|0}}while(0);if(!(c[A>>2]|0))n=c[y>>2]|0;else{n=(c[y>>2]|0)+-1|0;c[y>>2]=n}n=n-(c[C>>2]|0)+(c[B>>2]|0)|0;if(!n)break b;if(!((n|0)==(s|0)|v^1))break b;do if(t)if(r){c[w>>2]=p;break}else{c[w>>2]=j;break}while(0);if(!v){if(p|0)c[p+(q<<2)>>2]=0;if(!j){j=0;break f}a[j+q>>0]=0}break}case 120:case 88:case 112:{n=16;J=124;break}case 111:{n=8;J=124;break}case 117:case 100:{n=10;J=124;break}case 105:{n=0;J=124;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+U1(b,t,0);if((c[B>>2]|0)==((c[C>>2]|0)-(c[y>>2]|0)|0))break b;if(w)switch(t|0){case 0:{g[w>>2]=o;break f}case 1:{h[w>>3]=o;break f}case 2:{h[w>>3]=o;break f}default:break f}break}default:{}}while(0);do if((J|0)==124){J=0;n=H$(b,n,0,-1,-1)|0;if((c[B>>2]|0)==((c[C>>2]|0)-(c[y>>2]|0)|0))break b;if((w|0)!=0&(r|0)==112){c[w>>2]=n;break}else{S1(w,t,n,z);break}}while(0);e=e+((w|0)!=0&1)|0;n=(c[B>>2]|0)+u+(c[y>>2]|0)-(c[C>>2]|0)|0;break c}while(0);m=p+(k&1)|0;G$(b,0);k=c[y>>2]|0;if(k>>>0<(c[A>>2]|0)>>>0){c[y>>2]=k+1;k=d[k>>0]|0}else k=I$(b)|0;if((k|0)!=(d[m>>0]|0)){J=22;break b}n=u+1|0}else{m=p;while(1){k=m+1|0;if(!(B$(d[k>>0]|0)|0))break;else m=k}G$(b,0);do{k=c[y>>2]|0;if(k>>>0<(c[A>>2]|0)>>>0){c[y>>2]=k+1;k=d[k>>0]|0}else k=I$(b)|0}while((B$(k)|0)!=0);if(!(c[A>>2]|0))k=c[y>>2]|0;else{k=(c[y>>2]|0)+-1|0;c[y>>2]=k}n=(c[B>>2]|0)+u+k-(c[C>>2]|0)|0}while(0);p=m+1|0;k=a[p>>0]|0;if(!(k<<24>>24))break a;else u=n}if((J|0)==22){if(c[A>>2]|0)c[y>>2]=(c[y>>2]|0)+-1;if((e|0)!=0|(k|0)>-1)break;else{e=0;J=137}}else if((J|0)==136)if(!e){e=k;J=137}if((J|0)==137){k=e;e=-1}if(k){D_(j);D_(i)}}else e=0;while(0);if(K|0)u0(b);l=L;return e|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function S1(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function T1(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function U1(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=I$(b)|0}while((B$(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=I$(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[150502+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=I$(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[150511+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=I$(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=I$(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=I$(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(O_()|0)>>2]=22;G$(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=I$(b)|0;if((e|32|0)==120){g=+V1(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+W1(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(O_()|0)>>2]=22;G$(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function V1(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=I$(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=I$(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=I$(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=I$(a)|0;l=s3(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=s3(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=I$(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else G$(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=s3(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=X1(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){G$(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=A3(q|0,p|0,2)|0;l=s3(l|0,z|0,-32,-1)|0;l=s3(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(O_()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0<y>>>0){c[(O_()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=s3(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=t3(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=s3(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0<b>>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+p$(+m$(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(O_()|0)>>2]=34;h=+q$(h,l)}while(0);return +h}function W1(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=I$(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=I$(a)|0;if((b|0)==48){k=0;b=0;while(1){k=s3(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=I$(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=s3(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=I$(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=X1(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){G$(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=s3(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(O_()|0)>>2]=22;G$(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(O_()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0<a>>>0){c[(O_()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[63608+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[63608+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[63608+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=A3(c[p>>2]|0,0,29)|0;k=s3(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=w3(k|0,m|0,1e9,0)|0;k=x3(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[63640+(p<<2)>>2]|0;if(n>>>0<o>>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<<v)+-1|0;u=1e9>>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+p$(+m$(1.0,105-n|0),j);r=+r$(j,+m$(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+r$(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(O_()|0)>>2]=34}while(0);i=+q$(i,b)}while(0);l=J;return +i}function X1(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=I$(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=I$(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=I$(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=r3(g|0,b|0,10,0)|0;g=z;e=s3(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=s3(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=I$(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=I$(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=t3(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function Y1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=D$(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0<d>>>0?f:d;F3(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function Z1(a,b,c){a=a|0;b=b|0;c=c|0;return _1(a,b,c)|0}function _1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(t0(a)|0)==0;b=$1(a,b,d)|0;if(!e)u0(a)}else b=$1(a,b,d)|0;return b|0}function $1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(nb[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((nb[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function a2(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;while(1){e=b+1|0;if(!(B$(a[b>>0]|0)|0))break;else b=e}d=a[b>>0]|0;switch(d<<24>>24|0){case 45:{b=1;f=5;break}case 43:{b=0;f=5;break}default:{g=0;c=b;b=d}}if((f|0)==5){g=b;c=e;b=a[e>>0]|0}if(!(E$(b<<24>>24)|0))b=0;else{b=0;do{b=(b*10|0)+48-(a[c>>0]|0)|0;c=c+1|0}while((E$(a[c>>0]|0)|0)!=0)}return (g|0?b:0-b|0)|0}function b2(a){a=a|0;return +(+c2(a,0))}function c2(a,b){a=a|0;b=b|0;return +(+d2(a,b,1))}function d2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0;i=l;l=l+128|0;h=i;f=h;g=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;G$(h,0);e=+U1(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b|0)c[b>>2]=d|0?a+d|0:a;l=i;return +e}function e2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if(!c)b=0;else{h=b;while(1){g=c>>>1;b=h+(O(g,d)|0)|0;f=lb[e&127](a,b)|0;if(!f)break a;if((c|0)==1){b=0;break a}f=(f|0)<0;c=f?g:c-g|0;if(!c){b=0;break}else h=f?h:b}}while(0);return b|0}function f2(a,c){a=a|0;c=c|0;var d=0,f=0,g=0;g=a+2|0;f=a+4|0;d=r3((e[c+2>>1]|0)<<16|(e[c>>1]|0)|0,e[c+4>>1]|0|0,(e[g>>1]|0)<<16|(e[a>>1]|0)|0,e[f>>1]|0|0)|0;c=s3(d|0,z|0,e[c+6>>1]|0|0,0)|0;d=z;b[a>>1]=c;a=z3(c|0,d|0,16)|0;b[g>>1]=a;b[f>>1]=d;z=d&65535;return c|0}function g2(){var a=0,b=0,d=0;b=183528;b=r3(c[b>>2]|0,c[b+4>>2]|0,1284865837,1481765933)|0;b=s3(b|0,z|0,1,0)|0;a=z;d=183528;c[d>>2]=b;c[d+4>>2]=a;a=z3(b|0,a|0,33)|0;return a|0}function h2(a){a=a|0;F3(190672,65740,6)|0;F3(65740,a|0,6)|0;return 190672}function i2(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=13070;b[d+2>>1]=a;b[d+4>>1]=a>>>16;h2(d)|0;l=c;return}function j2(a){a=a|0;var b=0;b=f2(a,65746)|0;b=A3(b|0,z|0,4)|0;a=z|1072693248;c[j>>2]=b;c[j+4>>2]=a;return +(+h[j>>3]+-1.0)}function k2(){return +(+j2(65740))}function l2(a,b){a=a|0;b=b|0;if(!a)b=E_(1,24)|0;else H3(b|0,0,24)|0;return b|0}function m2(a){a=a|0;var b=0,d=0;b=c[a>>2]|0;if(b|0)do{D_(c[b>>2]|0);d=b;b=c[b+4>>2]|0;D_(d)}while((b|0)!=0);D_(a);return}function n2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;h=a+16|0;a:do if(!(c[h>>2]|0)){k=a+12|0;g=c[k>>2]|0;if(g>>>0<f>>>0){do if(b)if(!d){c[h>>2]=1;b=0;break a}else{h=a+8|0;c[h>>2]=d;g=1024;b=d;break}else{g=f<<3;g=g>>>0>1024?g:1024;j=C_(8)|0;if(!j){c[h>>2]=1;b=0;break a}b=C_(g)|0;c[j>>2]=b;d=b;if(!b){D_(j);c[h>>2]=1;b=0;break a}c[j+4>>2]=0;h=a+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;if(!(c[a>>2]|0))c[a>>2]=j;c[h>>2]=j;h=a+8|0;c[h>>2]=d}while(0);c[k>>2]=g}else{h=a+8|0;b=c[h>>2]|0;d=b}d=d+f&3;d=((d|0)==0?0:4-d|0)+f|0;c[h>>2]=b+d;c[k>>2]=g-d;if(e)H3(b|0,0,d|0)|0}else b=0;while(0);return b|0}function o2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=l;l=l+48|0;h=v;t=p2()|0;a:do if(!t)b=12;else{u=l2(0,0)|0;if(!u){q2(t);b=12;break}H3(h|0,0,36)|0;c[h>>2]=u;c[h+4>>2]=t;c[h+16>>2]=b;c[h+32>>2]=d;e=h+28|0;c[e>>2]=-1;b=r2(h)|0;b:do if(!b){g=h+20|0;r=c[g>>2]|0;c[a>>2]=r+-1;i=c[h+8>>2]|0;if((c[e>>2]|0)<(r|0)){r=E_(1,68)|0;if(r){q=(c[e>>2]|0)>>>31^1;c[r+60>>2]=q;c[r+64>>2]=0;c[r+28>>2]=c[g>>2];if((d&8|0)==0|(q|0)!=0){b=s2(0,t,i,r)|0;if(b|0){g=r;h=0;i=0;f=0;e=0;break}e=r+40|0;b=c[e>>2]|0;if((b|0)>0){b=C_((b<<2)+4|0)|0;if(!b){g=r;h=0;i=0;b=12;f=0;e=0;break}c[r+32>>2]=b;H3(b|0,-1,(c[e>>2]<<2)+4|0)|0;f=b;b=c[e>>2]|0}else f=0;q=E_(b<<1|1,4)|0;c[r+36>>2]=q;if(!q){g=r;h=0;i=0;b=12;f=0;e=0;break}b=E_(c[g>>2]|0,12)|0;if(!b){g=r;h=0;i=0;b=12;f=0;e=0;break}c[r+16>>2]=b;b=s2(u,t,i,r)|0;if(!b)b=f;else{g=r;h=0;i=0;f=0;e=0;break}}else b=0;p=h+24|0;b=t2(u,t,i,p,b)|0;if(!b){b=c[p>>2]|0;c[p>>2]=b+1;b=u2(u,0,0,b)|0;if((b|0)!=0?(s=v2(u,i,b)|0,(s|0)!=0):0){b=w2(u,t,s)|0;if(!b){o=C_(c[p>>2]<<2)|0;if(o){q=C_(c[p>>2]<<2)|0;if(q){b=c[p>>2]|0;if((b|0)>0)H3(o|0,0,b<<2|0)|0;x2(s,0,o,0)|0;f=c[p>>2]|0;if((f|0)>0){b=0;e=0;do{c[q+(e<<2)>>2]=b;n=o+(e<<2)|0;b=b+1+(c[n>>2]|0)|0;c[n>>2]=0;e=e+1|0}while((e|0)<(f|0));k=b}else k=0;m=E_(k+1|0,32)|0;if(m){c[r>>2]=m;n=r+4|0;c[n>>2]=k;b=x2(s,m,o,q)|0;if(!b){c[r+20>>2]=0;f=s+24|0;b=c[f>>2]|0;e=0;while(1){e=e+1|0;if((c[b>>2]|0)<=-1)break;else b=b+32|0}j=E_(e,32)|0;if(!j){g=r;h=o;i=q;b=12;f=o;e=q}else{c[r+8>>2]=j;f=c[f>>2]|0;e=c[f>>2]|0;if((e|0)>-1){b=0;do{c[j+(b<<5)+8>>2]=m+(c[q+(e<<2)>>2]<<5);c[j+(b<<5)+12>>2]=e;h=j+(b<<5)+16|0;c[h>>2]=0;i=f+12|0;g=c[i>>2]|0;if(g|0){e=0;do{w=e;e=e+1|0}while((c[g+(w<<2)>>2]|0)>-1);e=e<<2;g=C_(e)|0;c[h>>2]=g;if(!g){g=r;h=o;i=q;b=12;f=o;e=q;break b}F3(g|0,c[i>>2]|0,e|0)|0}c[j+(b<<5)+20>>2]=c[f+16>>2];b=b+1|0;f=f+32|0;e=c[f>>2]|0}while((e|0)>-1)}else b=0;c[j+(b<<5)+8>>2]=0;c[n>>2]=k;c[r+12>>2]=m+(c[q+(c[c[s+28>>2]>>2]<<2)>>2]<<5);c[r+52>>2]=c[p>>2];c[r+56>>2]=d;m2(u);q2(t);D_(o);D_(q);c[a+4>>2]=r;b=0;break a}}else{g=r;h=o;i=q;f=o;e=q}}else{g=r;h=o;i=q;b=12;f=o;e=q}}else{g=r;h=o;i=q;b=12;f=o;e=0}}else{g=r;h=o;i=0;b=12;f=0;e=0}}else{g=r;h=0;i=0;f=0;e=0}}else{g=r;h=0;i=0;b=12;f=0;e=0}}else{g=r;h=0;i=0;f=0;e=0}}else{g=r;h=0;i=0;b=12;f=0;e=0}}else{g=0;h=0;i=0;b=6;f=0;e=0}}else{g=0;h=0;i=0;f=0;e=0}while(0);m2(u);q2(t);if(h|0)D_(f);if(i|0)D_(e);c[a+4>>2]=g;y2(a)}while(0);l=v;return b|0}function p2(){var a=0,b=0;a=C_(20)|0;do if(a){b=C_(2048)|0;c[a+16>>2]=b;if(!b){D_(a);a=0;break}else{c[a>>2]=512;c[a+4>>2]=1024e3;c[a+8>>2]=128;c[a+12>>2]=0;break}}while(0);return a|0}function q2(a){a=a|0;D_(c[a+16>>2]|0);D_(a);return}function r2(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+16|0;p=u+4|0;q=u;r=c[b+32>>2]&1;s=b+16|0;e=c[s>>2]|0;t=c[b+4>>2]|0;d=C2(t,0)|0;a:do if(!d){m=(r|0)!=0;n=b+8|0;o=b+12|0;d=0;k=1;b:while(1){g=0;h=d;f=0;c:while(1){d=a[e>>0]|0;if(m){if(d<<24>>24==40)break;if((h|0)!=0&d<<24>>24==41)j=13;else j=14}else if(d<<24>>24==92)switch(a[e+1>>0]|0){case 40:break c;case 41:{j=13;break}default:j=14}else j=14;if((j|0)==13){j=0;i=u2(c[b>>2]|0,-1,-1,-1)|0;c[n>>2]=i;if(!i){d=12;break a}else i=f}else if((j|0)==14){j=0;d=R2(b,e)|0;if(d|0)break a;i=f;e=c[o>>2]|0}d:while(1){e:while(1){d=a[e>>0]|0;switch(d<<24>>24){case 42:case 92:break;default:{if(!m)break e;switch(d<<24>>24){case 123:case 63:case 43:break;default:break e}}}d=d<<24>>24==92;if(m&d)break;f=e+1|0;if(d)switch(a[f>>0]|0){case 123:case 63:case 43:break;default:break e}e=d?f:e;if((!m?(e|0)==((c[s>>2]|0)+1|0):0)?(a[e+-1>>0]|0)==94:0)break;if((a[e>>0]|0)==123){e=S2(e+1|0,r,p,q)|0;if(!e){j=28;break b}d=c[q>>2]|0;f=c[b>>2]|0;if(!d)d=u2(f,-1,-1,-1)|0;else j=36}else{c[p>>2]=0;c[q>>2]=-1;d=a[e>>0]|0;if(d<<24>>24==43){c[p>>2]=1;d=a[e>>0]|0}if(d<<24>>24==63){c[q>>2]=1;d=1}else d=-1;e=e+1|0;f=c[b>>2]|0;j=36}if((j|0)==36){j=0;d=M2(f,c[n>>2]|0,c[p>>2]|0,d,0)|0}c[n>>2]=d;if(!d){d=12;break a}}d=v2(c[b>>2]|0,g,c[n>>2]|0)|0;f=a[e>>0]|0;f:do if(m){if(f<<24>>24==124){j=40;break d}if((h|0)!=0&f<<24>>24==41|f<<24>>24==0)j=47;else{g=d;f=i;continue c}}else{switch(f<<24>>24){case 0:{j=47;break f}case 92:break;default:{g=d;f=i;continue c}}switch(a[e+1>>0]|0){case 124:case 41:break;default:{g=d;f=i;continue c}}d=N2(c[b>>2]|0,i,d)|0;if((a[e+1>>0]|0)==124){f=2;break d}if(!h){d=8;break a}e=e+2|0;f=92}while(0);if((j|0)==47){j=0;d=N2(c[b>>2]|0,i,d)|0;e=f<<24>>24==41?e+1|0:e}d=T2(b,d,D2(t)|0)|0;if(d|0)break a;d=f<<24>>24==0;f=(h|0)<1;if(f&d){j=50;break b}if(f|d){d=8;break a}g=E2(t)|0;h=h+-1|0;i=E2(t)|0}if((j|0)==40){f=1;d=N2(c[b>>2]|0,i,d)|0}g=0;e=e+f|0;f=d}d=B2(t,f)|0;if(d|0)break a;d=B2(t,g)|0;if(d|0)break a;d=C2(t,k)|0;if(d|0)break a;d=h+1|0;k=k+1|0;e=m?e+1|0:e+2|0}if((j|0)==28){d=10;break}else if((j|0)==50){c[b+20>>2]=k;d=0;break}}while(0);l=u;return d|0}function s2(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;x=A2(d)|0;y=(b|0)==0|(f|0)==0;if(!y){c[f+48>>2]=0;c[c[f+36>>2]>>2]=-1}g=f+28|0;z=C_((c[g>>2]<<3)+8|0)|0;do if(!z)g=12;else{c[z>>2]=-1;A=C_((c[g>>2]<<2)+4|0)|0;if(!A){D_(z);g=12;break}c[A>>2]=-1;B=C_((c[g>>2]<<3)+8|0)|0;if(!B){D_(z);D_(A);g=12;break}h=c[g>>2]|0;g=0;do{c[B+(g<<3)>>2]=-1;g=g+1|0}while(g>>>0<=h>>>0);B2(d,e)|0;g=C2(d,0)|0;a:do if((g|0)!=0|(A2(d)|0)<=(x|0)){e=z;n=0;h=0;m=0;l=-1}else{u=f+32|0;v=f+36|0;w=f+16|0;e=z;n=0;h=0;m=0;t=1;l=-1;s=0;while(1){b:do switch(D2(d)|0){case 6:{i=D2(d)|0;g=0;do{j=e+(g<<2)|0;g=g+1|0}while((c[j>>2]|0)>-1);c[j>>2]=i<<1|1;c[e+(g<<2)>>2]=-1;g=0;while(1)if((c[A+(g<<2)>>2]|0)>-1)g=g+1|0;else break;c[A+(g+-1<<2)>>2]=-1;g=0;j=t;i=s;break}case 0:{q=E2(d)|0;r=q+12|0;j=c[r>>2]|0;if((j|0)>-1){g=0;do{i=e+(g<<2)|0;g=g+1|0}while((c[i>>2]|0)>-1);c[i>>2]=j<<1;c[e+(g<<2)>>2]=-1;if(!y){g=0;while(1)if((c[A+(g<<2)>>2]|0)>-1)g=g+1|0;else break;c[(c[w>>2]|0)+(j*12|0)+8>>2]=0;if((g|0)>0){g=C_((g<<2)+4|0)|0;if(!g){g=12;j=t;i=s;break b}c[(c[w>>2]|0)+(j*12|0)+8>>2]=g;i=c[A>>2]|0;if((i|0)>-1){k=0;j=g;do{c[j>>2]=i;k=k+1|0;i=c[A+(k<<2)>>2]|0;j=g+(k<<2)|0}while((i|0)>-1);g=j}c[g>>2]=-1}}g=C2(d,c[r>>2]|0)|0;if(g|0){j=t;i=s;break b}g=C2(d,6)|0;if(g|0){j=t;i=s;break b}}c:do switch(c[q>>2]|0){case 0:{p=c[c[q+4>>2]>>2]|0;if((p|0)>-1|(p|0)==-4?(c[e>>2]|0)>-1:0){if(y){c[q+20>>2]=1;g=0}else{g=O2(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=s;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}P2(e,f,m)}c[e>>2]=-1;p=t+1|0;o=s;n=n+1|0;m=t}else{p=t;g=0;o=s}break}case 1:{j=c[q+4>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;g=B2(d,q)|0;if(!g){g=C2(d,5)|0;if(!g){g=B2(d,j)|0;if(!g){g=C2(d,0)|0;if(!g){i=k+20|0;g=C2(d,(c[i>>2]|0)+t|0)|0;if(!g){if((c[i>>2]|0)>0){i=(c[j+20>>2]|0)>0;g=i?t:-1;i=t+(i&1)|0}else{g=-1;i=t}g=C2(d,g)|0;if(!g){g=C2(d,4)|0;if(!g){g=B2(d,k)|0;if(!g){p=i;g=C2(d,0)|0;o=s}else{p=i;o=s}}else{p=i;o=s}}else{p=i;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}case 2:{i=c[q+4>>2]|0;if(y){if((c[e>>2]|0)>-1)g=1;else g=(a[i+12>>0]&1)!=0;g=C2(d,g&1)|0;if(g|0){p=t;o=s;break c}}else{g=C2(d,m)|0;if(g|0){p=t;o=s;break c}g=C2(d,a[i+12>>0]&1)|0;if(g|0){p=t;o=s;break c}}g=B2(d,q)|0;if(!g){g=C2(d,1)|0;if(!g){g=B2(d,c[i>>2]|0)|0;if(!g){g=C2(d,0)|0;if(!g){if((c[e>>2]|0)<=-1?(a[i+12>>0]&1)==0:0){p=t;g=0;o=0;break c}if(y)g=0;else{g=O2(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=(a[i+12>>0]&1)==0?s:1;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}P2(e,f,m)}c[e>>2]=-1;p=t+1|0;o=0;n=n+1|0;m=t}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}case 3:{j=c[q+4>>2]|0;k=c[j>>2]|0;j=c[j+4>>2]|0;i=(c[e>>2]|0)>-1;p=t+1|0;g=C2(d,i?p:t)|0;if(!g){g=C2(d,i?t:m)|0;if(!g){g=B2(d,e)|0;if(!g){g=C2(d,(c[e>>2]|0)>>>31^1)|0;if(!g){g=B2(d,q)|0;if(!g){g=B2(d,j)|0;if(!g){g=B2(d,k)|0;if(!g){g=C2(d,3)|0;if(!g){g=B2(d,j)|0;if(!g){g=C2(d,0)|0;if(g|0){p=t;o=s;break c}g=C2(d,2)|0;if(g|0){p=t;o=s;break c}g=B2(d,k)|0;if(g|0){p=t;o=s;break c}g=C2(d,0)|0;if(g|0){p=t;o=s;break c}if((c[e>>2]|0)>-1){if(y)g=0;else{g=O2(b,q,m)|0;c[(c[u>>2]|0)+(m<<2)>>2]=s;if((l|0)>-1){j=c[v>>2]|0;i=0;while(1){k=j+(i<<2)|0;o=i+1|0;if((c[k>>2]|0)>-1)i=o;else break}c[k>>2]=m;c[j+(o<<2)>>2]=l;c[j+(i+2<<2)>>2]=-1;h=h+1|0;l=-1}P2(e,f,m)}c[e>>2]=-1;n=n+1|0;m=t;i=p}else{g=0;i=t}t=(c[q+16>>2]|0)>0;p=t?i+2|0:i;o=s;m=t?i+1|0:m}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}}else{p=t;o=s}break}default:{p=t;g=0;o=s}}while(0);j=c[r>>2]|0;if((j|0)>-1){i=0;do{k=A+(i<<2)|0;i=i+1|0}while((c[k>>2]|0)>-1);c[k>>2]=j;c[A+(i<<2)>>2]=-1;j=p;i=o}else{j=p;i=o}break}case 1:{g=E2(d)|0;if(y){i=c[(c[c[g+4>>2]>>2]|0)+20>>2]|0;c[g+20>>2]=(D2(d)|0)+i;i=0;l=-1}else{q=D2(d)|0;r=D2(d)|0;i=q;l=(q|0)==0?l:r}g=0;j=t;i=y?s:(i|0)==0&1;break}case 4:{i=D2(d)|0;j=D2(d)|0;g=0;m=(i|0)>-1?i:m;i=s;break}case 5:{g=E2(d)|0;if(y){j=c[g+4>>2]|0;c[g+20>>2]=(c[(c[j+4>>2]|0)+20>>2]|0)+(c[(c[j>>2]|0)+20>>2]|0);g=0;j=t;i=s}else{g=0;j=t;i=s}break}case 2:{while(1)if((c[e>>2]|0)>-1)e=e+4|0;else{g=0;j=t;i=s;break}break}case 3:{j=E2(d)|0;o=E2(d)|0;g=E2(d)|0;e=D2(d)|0;if(y){r=c[g+4>>2]|0;s=g+16|0;c[g+20>>2]=(c[(c[r>>2]|0)+20>>2]|0)+e+(c[(c[r+4>>2]|0)+20>>2]|0)+((c[s>>2]|0)>0?2:0);g=s}else g=g+16|0;e=E2(d)|0;i=D2(d)|0;k=D2(d)|0;if((c[g>>2]|0)>0){if(y)g=0;else{g=Q2(b,j,i)|0;c[(c[u>>2]|0)+(i<<2)>>2]=1;if(!g)g=Q2(b,o,k)|0;c[(c[u>>2]|0)+(k<<2)>>2]=1}n=n+2|0;j=t;i=1}else{g=0;j=t;i=1}break}default:{g=0;j=t;i=s}}while(0);if((g|0)!=0|(A2(d)|0)<=(x|0))break a;else{t=j;s=i}}}while(0);if(!y?(P2(e,f,m),(l|0)>-1):0){i=c[f+36>>2]|0;e=0;while(1){j=i+(e<<2)|0;k=e+1|0;if((c[j>>2]|0)>-1)e=k;else break}c[j>>2]=m;c[i+(k<<2)>>2]=l;c[i+(e+2<<2)>>2]=-1;h=h+1|0}c[f+48>>2]=n;c[f+40>>2]=n;c[f+44>>2]=h;D_(z);D_(A);D_(B)}while(0);return g|0}function t2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;t=y+12|0;x=y+8|0;u=y+4|0;v=y;w=A2(b)|0;c[t>>2]=0;c[x>>2]=0;d=B2(b,d)|0;a:do if(!d){d=C2(b,0)|0;if(!d){b:do if((A2(b)|0)>(w|0)){g=0;i=0;j=0;c:while(1){q=D2(b)|0;r=E2(b)|0;d:do switch(q|0){case 0:{switch(c[r>>2]|0){case 0:{d=c[r+4>>2]|0;r=c[d>>2]|0;if(!((r|0)>-1|(r|0)==-4)){d=j;break d}r=d+8|0;d=(c[r>>2]|0)+j|0;c[r>>2]=d;if((d|0)<=(c[x>>2]|0)){d=j;break d}c[x>>2]=d;d=j;break d}case 3:{h=c[r+4>>2]|0;d=B2(b,c[h+4>>2]|0)|0;if(d|0)break b;d=C2(b,0)|0;if(d|0)break b;d=B2(b,c[h>>2]|0)|0;if(d|0)break b;break}case 1:{h=c[r+4>>2]|0;d=B2(b,c[h+4>>2]|0)|0;if(d|0)break b;d=C2(b,0)|0;if(d|0)break b;d=B2(b,c[h>>2]|0)|0;if(d|0)break b;break}case 2:{h=c[r+4>>2]|0;d=C2(b,j)|0;if(d|0)break b;d=B2(b,r)|0;if(d|0)break b;d=C2(b,1)|0;if(d|0)break b;d=B2(b,c[h>>2]|0)|0;if(d|0)break b;d=C2(b,0)|0;if(d|0)break b;if((c[h+4>>2]|0)<=1?(c[h+8>>2]|0)<=1:0)d=j;else{c[t>>2]=0;d=0}i=i+1|0;break d}default:{d=j;break d}}d=C2(b,0)|0;if(!d)d=j;else break b;break}case 1:{p=r+4|0;o=c[p>>2]|0;q=D2(b)|0;c[t>>2]=q;n=o+4|0;j=c[n>>2]|0;if((j|0)<=1)if((c[o+8>>2]|0)>1){c[u>>2]=0;if((j|0)>0)s=30;else{d=q;h=0;s=37}}else d=q;else{c[u>>2]=0;s=30}e:do if((s|0)==30){d=L2(a,b,c[o>>2]|0,(j|0)>1?1:2,t,f,v,x)|0;if(!d){h=0;k=q;m=1}else{s=34;break c}while(1){d=c[v>>2]|0;if(!h)h=d;else h=v2(a,h,d)|0;if(!h){d=12;s=34;break c}j=c[n>>2]|0;if((m|0)>=(j|0)){d=k;s=37;break e}k=c[t>>2]|0;m=m+1|0;d=L2(a,b,c[o>>2]|0,(m|0)<(j|0)?1:2,t,f,v,x)|0;if(d|0){s=34;break c}}}while(0);if((s|0)==37){s=0;n=o+8|0;k=c[n>>2]|0;if((k|0)==-1){k=c[t>>2]|0;d=L2(a,b,c[o>>2]|0,0,t,0,u,x)|0;if(d|0)break c;j=M2(a,c[u>>2]|0,0,-1,0)|0;c[u>>2]=j;if(!j){d=12;break c}else d=k}else if((j|0)<(k|0)){k=j;j=0;while(1){m=c[t>>2]|0;d=L2(a,b,c[o>>2]|0,0,t,0,v,x)|0;if(d|0){s=49;break c}if(!j){d=c[v>>2]|0;c[u>>2]=d}else{d=v2(a,c[v>>2]|0,j)|0;c[u>>2]=d}if(!d){d=12;s=49;break c}j=u2(a,-1,-1,-1)|0;if(!j){d=12;s=49;break c}j=N2(a,j,d)|0;c[u>>2]=j;if(!j){d=12;s=49;break c}k=k+1|0;if((k|0)>=(c[n>>2]|0)){d=m;break}}}else j=0;c[t>>2]=d;if(h){if(j){h=v2(a,h,j)|0;s=54}}else{h=j;s=54}if((s|0)==54){s=0;if(!h){d=12;break c}}c[p>>2]=c[h+4>>2];c[r>>2]=c[h>>2]}i=i+-1|0;h=d-q+g|0;if(!i){c[t>>2]=h;g=h;i=0;d=h}else g=h;break}default:d=j}while(0);if((A2(b)|0)>(w|0))j=d;else{d=0;break b}}break a}else{d=0;g=0}while(0);w=(c[e>>2]|0)+g|0;x=c[x>>2]|0;c[e>>2]=(x|0)>(w|0)?x:w}}while(0);l=y;return d|0}function u2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=n2(a,0,0,1,20)|0;a=K2(a,0,f)|0;if(!a)a=0;else{c[f>>2]=b;c[f+4>>2]=d;c[f+8>>2]=e}return a|0}function v2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b){e=n2(a,0,0,1,8)|0;a=K2(a,1,e)|0;if(!a)d=0;else{c[e>>2]=b;c[e+4>>2]=d;c[a+16>>2]=(c[d+16>>2]|0)+(c[b+16>>2]|0);d=a}}return d|0}function w2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;j=o+4|0;k=o;m=A2(b)|0;d=B2(b,d)|0;a:do if(!d){d=C2(b,0)|0;if(!d)if((A2(b)|0)>(m|0)){b:while(1){h=D2(b)|0;i=E2(b)|0;c:do switch(h|0){case 0:switch(c[i>>2]|0){case 0:{g=c[i+4>>2]|0;f=c[g>>2]|0;if((f|0)==-4){c[i+8>>2]=0;d=g+8|0;h=F2(a,c[d>>2]|0,0,1114111,0,0,-1)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=F2(a,c[d>>2]|0,0,1114111,0,0,c[g+4>>2]|0)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}d=i+8|0;if((f|0)<0){c[d>>2]=1;h=G2(a)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=G2(a)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}else{c[d>>2]=0;d=g+8|0;e=g+4|0;h=F2(a,c[d>>2]|0,f,c[e>>2]|0,0,0,-1)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=F2(a,c[d>>2]|0,c[g>>2]|0,c[e>>2]|0,c[g+12>>2]|0,c[g+16>>2]|0,-1)|0;c[i+28>>2]=h;if(!h){d=12;break a}else break c}}case 3:{d=B2(b,i)|0;if(d|0)break a;d=C2(b,1)|0;if(d|0)break a;e=i+4|0;d=B2(b,c[(c[e>>2]|0)+4>>2]|0)|0;if(d|0)break a;d=C2(b,0)|0;if(d|0)break a;d=B2(b,c[c[e>>2]>>2]|0)|0;if(d|0)break a;d=C2(b,0)|0;if(!d)break c;else break a}case 1:{d=B2(b,i)|0;if(d|0)break a;d=C2(b,2)|0;if(d|0)break a;e=i+4|0;d=B2(b,c[(c[e>>2]|0)+4>>2]|0)|0;if(d|0)break a;d=C2(b,0)|0;if(d|0)break a;d=B2(b,c[c[e>>2]>>2]|0)|0;if(d|0)break a;d=C2(b,0)|0;if(!d)break c;else break a}case 2:{d=B2(b,i)|0;if(d|0)break a;d=C2(b,3)|0;if(d|0)break a;d=B2(b,c[c[i+4>>2]>>2]|0)|0;if(d|0)break a;d=C2(b,0)|0;if(!d)break c;else break a}default:break c}case 1:{d=c[i+4>>2]|0;e=c[d>>2]|0;f=d+4|0;g=c[f>>2]|0;if(!(c[e+8>>2]|0))h=(c[g+8>>2]|0)!=0;else h=1;c[i+8>>2]=h&1;h=H2(a,c[e+24>>2]|0,c[g+24>>2]|0,0,0)|0;c[i+24>>2]=h;if(!h){d=12;break a}h=H2(a,c[(c[d>>2]|0)+28>>2]|0,c[(c[f>>2]|0)+28>>2]|0,0,0)|0;c[i+28>>2]=h;if(!h){d=12;break a}break}case 3:{h=c[i+4>>2]|0;d=c[h>>2]|0;if(!(c[h+4>>2]|0))e=1;else e=(c[d+8>>2]|0)!=0&1;c[i+8>>2]=e;c[i+24>>2]=c[d+24>>2];c[i+28>>2]=c[d+28>>2];break}case 2:{g=c[i+4>>2]|0;d=c[g>>2]|0;e=d+8|0;if(!(c[e>>2]|0))f=0;else f=(c[(c[g+4>>2]|0)+8>>2]|0)!=0;c[i+8>>2]=f&1;if(c[e>>2]|0){d=I2(b,d,0,0,j)|0;if(d|0)break b;e=C_((c[j>>2]<<2)+4|0)|0;if(!e){d=12;break b}c[e>>2]=-1;c[k>>2]=0;d=I2(b,c[g>>2]|0,e,k,0)|0;if(d|0){n=45;break b}d=g+4|0;h=i+24|0;c[h>>2]=H2(a,c[(c[d>>2]|0)+24>>2]|0,c[(c[g>>2]|0)+24>>2]|0,e,c[k>>2]|0)|0;D_(e);if(!(c[h>>2]|0)){d=12;break b}else f=d}else{c[i+24>>2]=c[d+24>>2];f=g+4|0}d=c[f>>2]|0;if(c[d+8>>2]|0){d=I2(b,d,0,0,j)|0;if(d|0)break b;e=C_((c[j>>2]<<2)+4|0)|0;if(!e){d=12;break b}c[e>>2]=-1;c[k>>2]=0;d=I2(b,c[f>>2]|0,e,k,0)|0;if(d|0){n=52;break b}i=i+28|0;c[i>>2]=H2(a,c[(c[g>>2]|0)+28>>2]|0,c[(c[f>>2]|0)+28>>2]|0,e,c[k>>2]|0)|0;D_(e);if(!(c[i>>2]|0)){d=12;break b}}else c[i+28>>2]=c[d+28>>2];break}default:{}}while(0);if((A2(b)|0)<=(m|0)){d=0;break a}}if((n|0)==45)D_(e);else if((n|0)==52)D_(e)}else d=0}while(0);l=o;return d|0}function x2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:while(1){switch(c[a>>2]|0){case 2:{a=c[a+4>>2]|0;if((c[a+8>>2]|0)==-1?(h=c[a>>2]|0,h=z2(c[h+28>>2]|0,c[h+24>>2]|0,b,d,e)|0,(h|0)!=0):0){a=h;break a}break}case 3:{f=c[a+4>>2]|0;a=x2(c[f>>2]|0,b,d,e)|0;if(a|0)break a;a=f+4|0;break}case 1:{f=c[a+4>>2]|0;g=f+4|0;a=z2(c[(c[f>>2]|0)+28>>2]|0,c[(c[g>>2]|0)+24>>2]|0,b,d,e)|0;if(a|0)break a;a=x2(c[f>>2]|0,b,d,e)|0;if(!a)a=g;else break a;break}default:{a=0;break a}}a=c[a>>2]|0}return a|0}function y2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=c[a+4>>2]|0;if(h|0){e=h+4|0;a=c[h>>2]|0;if(c[e>>2]|0){d=0;do{if(c[a+(d<<5)+8>>2]|0){b=c[a+(d<<5)+16>>2]|0;if(b){D_(b);a=c[h>>2]|0}b=c[a+(d<<5)+28>>2]|0;if(b){D_(b);a=c[h>>2]|0}}d=d+1|0}while(d>>>0<(c[e>>2]|0)>>>0)}if(a|0)D_(a);d=h+8|0;a=c[d>>2]|0;if(a|0){if(c[a+8>>2]|0){while(1){b=c[a+16>>2]|0;if(b|0)D_(b);if(!(c[a+40>>2]|0))break;else a=a+32|0}a=c[d>>2]|0}D_(a)}f=h+16|0;a=c[f>>2]|0;if(a|0){g=h+28|0;b=c[g>>2]|0;if(b){e=0;do{d=c[a+(e*12|0)+8>>2]|0;if(d){D_(d);b=c[g>>2]|0;a=c[f>>2]|0}e=e+1|0}while(e>>>0<b>>>0)}D_(a)}a=c[h+32>>2]|0;if(a|0)D_(a);a=c[h+20>>2]|0;if(a|0)D_(a);a=c[h+36>>2]|0;if(a|0)D_(a);D_(h)}return}function z2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;g=c[a>>2]|0;h=(g|0)>-1;a:do if(!d)if(h){h=b+32|0;do{if((c[b>>2]|0)>-1?(y=e+(g<<2)|0,c[y>>2]=(c[y>>2]|0)+1,(c[h>>2]|0)>-1):0){g=h;do{y=e+(c[a>>2]<<2)|0;c[y>>2]=(c[y>>2]|0)+1;g=g+32|0}while((c[g>>2]|0)>-1)}a=a+32|0;g=c[a>>2]|0}while((g|0)>-1);g=0}else g=0;else if(h)while(1){h=c[b>>2]|0;b:do if((h|0)>-1){p=a+4|0;q=a+8|0;r=a+16|0;s=a+20|0;t=a+24|0;u=a+28|0;v=a+12|0;e=-1;g=b;while(1){o=h;while(1){if((o|0)!=(e|0))break;g=g+32|0;h=c[g>>2]|0;if((h|0)>-1)o=h;else break b}l=d+(c[f+(c[a>>2]<<2)>>2]<<5)|0;while(1){h=l+8|0;if(!(c[h>>2]|0))break;else l=l+32|0}c[l+40>>2]=0;c[l>>2]=c[p>>2];c[l+4>>2]=c[q>>2];c[h>>2]=d+(c[f+(o<<2)>>2]<<5);c[l+12>>2]=o;h=c[s>>2]|0;e=c[g+16>>2]|c[r>>2]|(h|0?4:0)|(c[t>>2]|0?8:0);i=l+20|0;c[i>>2]=e;j=c[u>>2]|0;if((j|0)>-1){c[i>>2]=e|256;h=j}c[l+24>>2]=h;e=c[t>>2]|0;if(!e)c[l+28>>2]=0;else{h=0;do{n=h;h=h+1|0}while((c[e+(n<<2)>>2]|0)!=0);h=C_(h<<2)|0;c[l+28>>2]=h;if(!h){g=12;break a}k=c[t>>2]|0;e=c[k>>2]|0;if(e){j=0;i=h;do{c[i>>2]=e;j=j+1|0;e=c[k+(j<<2)>>2]|0;i=h+(j<<2)|0}while((e|0)!=0);h=i}c[h>>2]=0}e=c[v>>2]|0;if(!e)h=0;else{h=0;while(1)if((c[e+(h<<2)>>2]|0)>-1)h=h+1|0;else break}k=g+12|0;i=c[k>>2]|0;if(!i)e=0;else{e=0;while(1)if((c[i+(e<<2)>>2]|0)>-1)e=e+1|0;else break}j=l+16|0;i=c[j>>2]|0;if(i|0)D_(i);c[j>>2]=0;h=e+h|0;if((h|0)>0){n=C_((h<<2)+4|0)|0;c[j>>2]=n;if(!n){g=12;break a}e=c[v>>2]|0;if((e|0)!=0?(w=c[e>>2]|0,(w|0)>-1):0){h=0;i=w;do{c[n+(h<<2)>>2]=i;h=h+1|0;i=c[e+(h<<2)>>2]|0}while((i|0)>-1);m=h}else m=0;j=c[k>>2]|0;if((j|0)!=0?(x=c[j>>2]|0,(x|0)>-1):0){k=(m|0)>0;h=m;i=0;l=x;do{c:do if(k){e=0;while(1){if((c[n+(e<<2)>>2]|0)==(l|0))break c;e=e+1|0;if((e|0)>=(m|0)){y=39;break}}}else y=39;while(0);if((y|0)==39){y=0;c[n+(h<<2)>>2]=l;h=h+1|0}i=i+1|0;l=c[j+(i<<2)>>2]|0}while((l|0)>-1)}else h=m;c[n+(h<<2)>>2]=-1}g=g+32|0;h=c[g>>2]|0;if((h|0)<=-1)break;else e=o}}while(0);a=a+32|0;if((c[a>>2]|0)<=-1){g=0;break}}else g=0;while(0);return g|0}function A2(a){a=a|0;return c[a+12>>2]|0}function B2(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=b;c[e>>2]=c[f>>2];b=J2(a,e)|0;l=d;return b|0}function C2(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=b;c[e>>2]=c[f>>2];b=J2(a,e)|0;l=d;return b|0}function D2(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=a+12|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;return c[b+(a<<2)>>2]|0}function E2(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=a+12|0;a=(c[d>>2]|0)+-1|0;c[d>>2]=a;return c[b+(a<<2)>>2]|0}function F2(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a=n2(a,0,0,1,64)|0;if(!a)a=0;else{c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=e;c[a+20>>2]=f;c[a+24>>2]=g;c[a+28>>2]=h;c[a+32>>2]=-1;c[a+36>>2]=-1;c[a+40>>2]=-1}return a|0}function G2(a){a=a|0;a=n2(a,0,0,1,32)|0;if(!a)a=0;else{c[a>>2]=-1;c[a+4>>2]=-1;c[a+8>>2]=-1}return a|0}function H2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(e|0)==0;if(o)n=0;else{g=0;while(1)if((c[e+(g<<2)>>2]|0)>-1)g=g+1|0;else{n=g;break}}h=0;while(1)if((c[b+(h<<5)>>2]|0)>-1)h=h+1|0;else{g=0;break}while(1)if((c[d+(g<<5)>>2]|0)>-1)g=g+1|0;else break;g=n2(a,0,0,1,(g+h<<5)+32|0)|0;a:do if(!g)g=0;else{h=c[b>>2]|0;if((h|0)>-1){m=(n|0)>0;i=0;while(1){c[g+(i<<5)>>2]=h;c[g+(i<<5)+4>>2]=c[b+(i<<5)+4>>2];c[g+(i<<5)+8>>2]=c[b+(i<<5)+8>>2];c[g+(i<<5)+16>>2]=c[b+(i<<5)+16>>2]|f;c[g+(i<<5)+20>>2]=c[b+(i<<5)+20>>2];c[g+(i<<5)+24>>2]=c[b+(i<<5)+24>>2];c[g+(i<<5)+28>>2]=c[b+(i<<5)+28>>2];l=b+(i<<5)+12|0;j=c[l>>2]|0;h=(j|0)==0;if(o&h)h=0;else{if(h)k=0;else{h=0;while(1)if((c[j+(h<<2)>>2]|0)>-1)h=h+1|0;else{k=h;break}}h=n2(a,0,0,0,(k+n<<2)+4|0)|0;if(!h){g=0;break a}if((k|0)>0){l=c[l>>2]|0;j=0;do{c[h+(j<<2)>>2]=c[l+(j<<2)>>2];j=j+1|0}while((j|0)!=(k|0))}else k=0;if(m){j=0;do{c[h+(j+k<<2)>>2]=c[e+(j<<2)>>2];j=j+1|0}while((j|0)!=(n|0));j=n}else j=0;c[h+(j+k<<2)>>2]=-1}c[g+(i<<5)+12>>2]=h;i=i+1|0;h=c[b+(i<<5)>>2]|0;if((h|0)<=-1){n=i;break}}}else n=0;i=c[d>>2]|0;h=g+(n<<5)|0;if((i|0)>-1){m=0;l=n;do{c[h>>2]=i;c[g+(l<<5)+4>>2]=c[d+(m<<5)+4>>2];c[g+(l<<5)+8>>2]=c[d+(m<<5)+8>>2];c[g+(l<<5)+16>>2]=c[d+(m<<5)+16>>2];c[g+(l<<5)+20>>2]=c[d+(m<<5)+20>>2];c[g+(l<<5)+24>>2]=c[d+(m<<5)+24>>2];c[g+(l<<5)+28>>2]=c[d+(m<<5)+28>>2];j=d+(m<<5)+12|0;h=c[j>>2]|0;if(!h)h=0;else{i=0;while(1)if((c[h+(i<<2)>>2]|0)>-1)i=i+1|0;else break;h=n2(a,0,0,0,(i<<2)+4|0)|0;if(!h){g=0;break a}if((i|0)>0){k=c[j>>2]|0;j=0;do{c[h+(j<<2)>>2]=c[k+(j<<2)>>2];j=j+1|0}while((j|0)!=(i|0))}else i=0;c[h+(i<<2)>>2]=-1}c[g+(l<<5)+12>>2]=h;m=m+1|0;i=c[d+(m<<5)>>2]|0;l=m+n|0;h=g+(l<<5)|0}while((i|0)>-1)}c[h>>2]=-1}while(0);return g|0}function I2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=A2(a)|0;p=(f|0)!=0;if(p)c[f>>2]=0;b=B2(a,b)|0;a:do if(!b){m=(d|0)==0;l=(e|0)==0;if((A2(a)|0)>(o|0))while(1){b=E2(a)|0;b:do switch(c[b>>2]|0){case 0:{b=c[b+4>>2]|0;switch(c[b>>2]|0){case -3:break;case -2:{if(l)break b;c[e>>2]=c[e>>2]|c[b+4>>2];break b}default:break b}h=c[b+4>>2]|0;if((h|0)>-1){c:do if(!m){b=0;while(1){i=d+(b<<2)|0;j=c[i>>2]|0;if((j|0)<=-1)break;if((j|0)==(h|0))break c;else b=b+1|0}c[i>>2]=h;c[d+(b+1<<2)>>2]=-1}while(0);if(p)c[f>>2]=(c[f>>2]|0)+1}break}case 3:{b=c[b+4>>2]|0;h=c[b>>2]|0;if(c[h+8>>2]|0){k=h;n=6;break b}b=c[b+4>>2]|0;if(c[b+8>>2]|0){k=b;n=6}break}case 1:{b=c[b+4>>2]|0;h=B2(a,c[b>>2]|0)|0;if(h|0){g=h;break a}k=c[b+4>>2]|0;n=6;break}case 2:{b=c[c[b+4>>2]>>2]|0;if(c[b+8>>2]|0){k=b;n=6}break}default:{}}while(0);if((n|0)==6?(n=0,g=B2(a,k)|0,g|0):0)break a;if((A2(a)|0)<=(o|0)){g=0;break a}}else g=0}else g=b;while(0);return g|0}function J2(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;g=k;d=a+12|0;e=c[d>>2]|0;j=c[a>>2]|0;if((e|0)>=(j|0)){d=c[a+4>>2]|0;if((j|0)<(d|0)?(f=(c[a+8>>2]|0)+j|0,f=(f|0)>(d|0)?d:f,h=a+16|0,i=F_(c[h>>2]|0,f<<2)|0,(i|0)!=0):0){c[a>>2]=f;c[h>>2]=i;c[g>>2]=c[b>>2];J2(a,g)|0;d=0}else d=12}else{c[(c[a+16>>2]|0)+(e<<2)>>2]=c[b>>2];c[d>>2]=(c[d>>2]|0)+1;d=0}l=k;return d|0}function K2(a,b,d){a=a|0;b=b|0;d=d|0;a=n2(a,0,0,1,32)|0;if((d|0)!=0&(a|0)!=0){c[a+4>>2]=d;c[a>>2]=b;c[a+8>>2]=-1;c[a+12>>2]=-1}else a=0;return a|0}function L2(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=A2(d)|0;B2(d,e)|0;e=C2(d,0)|0;a:do if(!e){q=(f&1|0)==0;p=(f&2|0)!=0;o=0;l=1;e=i;while(1){if((A2(d)|0)>(r|0))n=e;else{f=o;e=0;break a}b:while(1){c:while(1){switch(D2(d)|0){case 1:{i=7;break c}case 0:{e=E2(d)|0;switch(c[e>>2]|0){case 0:{i=9;break b}case 3:{i=19;break b}case 1:{i=26;break b}case 2:{i=33;break c}default:{}}break}default:{}}if((A2(d)|0)<=(r|0)){f=o;e=0;break a}}if((i|0)==7)e=E2(d)|0;else if((i|0)==33){f=c[e+4>>2]|0;e=B2(d,c[f>>2]|0)|0;if(e|0){f=o;break a}e=C2(d,0)|0;if(e|0){f=o;break a}e=M2(b,c[f>>2]|0,c[f+4>>2]|0,c[f+8>>2]|0,a[f+12>>0]&1)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}e=c[e+4>>2]|0}if((A2(d)|0)>(r|0))n=e;else{f=o;e=0;break a}}if((i|0)==9){m=c[e+4>>2]|0;i=c[m+8>>2]|0;f=c[m>>2]|0;e=c[m+4>>2]|0;if(!((f|0)>-1|(f|0)==-4))if(q|(f|0)!=-3)if((f|0)==-3)if(p&(l|0)!=0){c[h+(e<<2)>>2]=1;f=-3;k=o;l=0}else{f=-3;k=o}else k=o;else{e=-1;f=-1;i=-1;k=o}else{i=(c[g>>2]|0)+i|0;k=o+1|0}e=u2(b,f,e,i)|0;c[n>>2]=e;if(!e)e=12;else{e=c[e+4>>2]|0;c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=0}if((i|0)>(c[j>>2]|0)){c[j>>2]=i;f=n}else f=n}else if((i|0)==19){i=c[e+4>>2]|0;f=i+4|0;e=N2(b,c[i>>2]|0,c[f>>2]|0)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}m=c[e+4>>2]|0;e=B2(d,c[f>>2]|0)|0;if(e|0){f=o;break a}e=C2(d,0)|0;if(e|0){f=o;break a}e=B2(d,m+4|0)|0;if(e|0){f=o;break a}e=C2(d,1)|0;if(e|0){f=o;break a}e=B2(d,c[i>>2]|0)|0;if(e|0){f=o;break a}k=o;f=m;e=C2(d,0)|0}else if((i|0)==26){m=c[e+4>>2]|0;i=m+4|0;e=v2(b,c[m>>2]|0,c[i>>2]|0)|0;c[n>>2]=e;if(!e){f=o;e=12;break a}f=c[e+4>>2]|0;c[f>>2]=0;k=f+4|0;c[k>>2]=0;e=B2(d,c[i>>2]|0)|0;if(e|0){f=o;break a}e=C2(d,0)|0;if(e|0){f=o;break a}e=B2(d,k)|0;if(e|0){f=o;break a}e=C2(d,1)|0;if(e|0){f=o;break a}e=B2(d,c[m>>2]|0)|0;if(e|0){f=o;break a}k=o;e=C2(d,0)|0}if(!e){o=k;e=f}else{f=k;break}}}else f=0;while(0);c[g>>2]=(c[g>>2]|0)+f;return e|0}function M2(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=n2(b,0,0,1,16)|0;b=K2(b,2,h)|0;if(!b)b=0;else{c[h>>2]=d;c[h+4>>2]=e;c[h+8>>2]=f;h=h+12|0;a[h>>0]=a[h>>0]&-2|g&1;c[b+16>>2]=c[d+16>>2]}return b|0}function N2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b){e=n2(a,0,0,1,8)|0;a=K2(a,3,e)|0;if((d|0)!=0&(a|0)!=0){c[e>>2]=b;c[e+4>>2]=d;c[a+16>>2]=(c[d+16>>2]|0)+(c[b+16>>2]|0);d=a}else d=0}return d|0}function O2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=n2(a,0,0,0,8)|0;if(((e|0)!=0?(d=u2(a,-3,d,-1)|0,c[e>>2]=d,(d|0)!=0):0)?(f=n2(a,0,0,0,32)|0,c[e+4>>2]=f,(f|0)!=0):0){a=b+4|0;c[f+4>>2]=c[a>>2];c[f>>2]=c[b>>2];c[f+8>>2]=-1;c[f+12>>2]=-1;f=f+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[a>>2]=e;c[b>>2]=1;a=0}else a=12;return a|0}function P2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=c[a>>2]|0;if((f|0)>-1){g=c[b+16>>2]|0;e=0;b=f;do{f=b>>>1;c[((b&1|0)==0?g+(f*12|0)|0:g+(f*12|0)+4|0)>>2]=d;e=e+1|0;b=c[a+(e<<2)>>2]|0}while((b|0)>-1)}c[a>>2]=-1;return}function Q2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=n2(a,0,0,0,8)|0;if(((e|0)!=0?(d=u2(a,-3,d,-1)|0,c[e+4>>2]=d,(d|0)!=0):0)?(f=n2(a,0,0,0,32)|0,c[e>>2]=f,(f|0)!=0):0){a=b+4|0;c[f+4>>2]=c[a>>2];c[f>>2]=c[b>>2];c[f+8>>2]=-1;c[f+12>>2]=-1;f=f+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[a>>2]=e;c[b>>2]=1;a=0}else a=12;return a|0}function R2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;i=b+32|0;h=c[i>>2]|0;g=h&1;a:do switch(a[d>>0]|0){case 91:{e=V2(b,d+1|0)|0;break}case 92:{e=d+1|0;f=W2(e)|0;if(f|0){e=R2(b,f)|0;c[b+12>>2]=d+2;break a}f=a[e>>0]|0;switch(f|0){case 0:{e=5;break a}case 98:{f=u2(c[b>>2]|0,-2,64,-1)|0;break}case 66:{f=u2(c[b>>2]|0,-2,128,-1)|0;break}case 60:{f=u2(c[b>>2]|0,-2,16,-1)|0;break}case 62:{f=u2(c[b>>2]|0,-2,32,-1)|0;break}case 120:{h=d+2|0;i=(a[h>>0]|0)==123;g=i?8:2;h=i?d+3|0:h;e=0;f=0;do{d=X2(a[h+e>>0]|0)|0;if((d|0)<0)break;f=d+(f<<4)|0;e=e+1|0}while((f|0)<1114112&(e|0)<(g|0));e=h+e|0;if(i){if((a[e>>0]|0)!=125){e=9;break a}e=e+1|0}j=c[b>>2]|0;i=b+24|0;k=c[i>>2]|0;c[i>>2]=k+1;f=u2(j,f,f,k)|0;e=e+-1|0;break}case 63:case 43:case 123:if(!g){e=13;break a}else{k=37;break a}case 124:{if(g|0){k=37;break a}e=u2(c[b>>2]|0,-1,-1,-1)|0;k=45;break a}default:{if(!((g|0)==0&(f+-49|0)>>>0<9)){k=37;break a}j=f+-48|0;k=c[b>>2]|0;i=b+24|0;f=c[i>>2]|0;c[i>>2]=f+1;f=u2(k,-4,j,f)|0;k=b+28|0;i=c[k>>2]|0;c[k>>2]=(j|0)<(i|0)?i:j}}d=e+1|0;e=f;k=45;break}case 46:{e=c[b>>2]|0;g=b+24|0;f=c[g>>2]|0;c[g>>2]=f+1;if(h&4){f=u2(e,0,9,f)|0;k=c[b>>2]|0;e=c[g>>2]|0;c[g>>2]=e+1;e=u2(k,11,1114111,e)|0;if((f|0)!=0&(e|0)!=0)e=N2(c[b>>2]|0,f,e)|0;else e=0}else e=u2(e,0,1114111,f)|0;d=d+1|0;k=45;break}case 94:{if((g|0)==0?(c[b+16>>2]|0)!=(d|0):0){e=d;k=37;break a}d=d+1|0;e=u2(c[b>>2]|0,-2,1,-1)|0;k=45;break}case 36:{e=d+1|0;if((g|0)==0?a[e>>0]|0:0){e=d;k=37;break a}d=e;e=u2(c[b>>2]|0,-2,2,-1)|0;k=45;break}case 63:case 43:case 123:case 42:{if(!g){e=d;k=37}else e=13;break}case 124:{if(!g){e=d;k=37}else k=36;break}case 0:{k=36;break}default:{e=d;k=37}}while(0);if((k|0)==36){e=u2(c[b>>2]|0,-1,-1,-1)|0;k=45}else if((k|0)==37){h=B1(j,e,-1)|0;if((h|0)<0)e=2;else{do if(c[i>>2]&2){if((m0(c[j>>2]|0)|0)==0?(l0(c[j>>2]|0)|0)==0:0){k=43;break}i=c[b>>2]|0;n=R$(c[j>>2]|0)|0;g=R$(c[j>>2]|0)|0;f=b+24|0;g=u2(i,n,g,c[f>>2]|0)|0;n=c[b>>2]|0;i=o0(c[j>>2]|0)|0;d=o0(c[j>>2]|0)|0;d=u2(n,i,d,c[f>>2]|0)|0;if((g|0)!=0&(d|0)!=0)g=N2(c[b>>2]|0,g,d)|0;else g=0}else k=43;while(0);if((k|0)==43){g=c[j>>2]|0;f=b+24|0;g=u2(c[b>>2]|0,g,g,c[f>>2]|0)|0}c[f>>2]=(c[f>>2]|0)+1;d=e+h|0;e=g;k=45}}if((k|0)==45)if(!e)e=12;else{c[b+8>>2]=e;c[b+12>>2]=d;e=0}l=m;return e|0}function S2(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j+4|0;g=j;b=U2(b,i)|0;if((a[b>>0]|0)==44){b=U2(b+1|0,g)|0;h=c[g>>2]|0;g=c[i>>2]|0}else{i=c[i>>2]|0;c[g>>2]=i;h=i;g=i}do if(!(g>>>0>255|((h|0)>255|(h|0)>-1&(h|0)<(g|0)))){if(!d)if((a[b>>0]|0)==92)b=b+1|0;else{b=0;break}if((a[b>>0]|0)==125){c[e>>2]=g;c[f>>2]=h;b=b+1|0}else b=0}else b=0;while(0);l=j;return b|0}function T2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((c[b+12>>2]|0)>-1){e=u2(c[a>>2]|0,-1,-1,-1)|0;if((e|0)!=0?(f=v2(c[a>>2]|0,e,b)|0,(f|0)!=0):0){e=c[b+16>>2]|0;c[f+16>>2]=e;g=6}else e=12}else{f=b;e=c[b+16>>2]|0;g=6}if((g|0)==6){c[f+12>>2]=d;c[f+16>>2]=e+1;c[a+8>>2]=f;e=0}return e|0}function U2(b,d){b=b|0;d=d|0;var e=0;c[d>>2]=-1;a:do if(E$(a[b>>0]|0)|0){c[d>>2]=0;e=0;do{c[d>>2]=(e*10|0)+-48+(a[b>>0]|0);b=b+1|0;if(!(E$(a[b>>0]|0)|0))break a;e=c[d>>2]|0}while((e|0)<=255)}while(0);return b|0}function V2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+288|0;e=s+264|0;g=s;c[e>>2]=c[b>>2];h=e+8|0;c[h>>2]=0;c[e+12>>2]=32;p=C_(128)|0;r=e+4|0;c[r>>2]=p;if(!p)d=12;else{f=g+4|0;c[f>>2]=0;p=(a[d>>0]|0)==94;c[g>>2]=p&1;d=Y2(b,p?d+1|0:d,e,g)|0;a:do if(!d){p=(c[g>>2]|0)==0;if(!p){_0(c[r>>2]|0,c[h>>2]|0,4,109);d=_2(e)|0;if(!d){d=12;e=0;break}c[d>>2]=1114112;c[d+4>>2]=1114112;c[d+8>>2]=-1;d=c[f>>2]|0;if(d){e=d<<2;f=n2(c[b>>2]|0,0,0,0,e+4|0)|0;if(!f){d=12;e=0;break}F3(f|0,g+8|0,e|0)|0;c[f+(d<<2)>>2]=0}else f=0}else f=0;m=c[h>>2]|0;if((m|0)>0){n=c[r>>2]|0;o=b+24|0;e=0;d=0;k=0;while(1){j=c[n+(k<<2)>>2]|0;g=c[j>>2]|0;h=j+4|0;i=c[h>>2]|0;do if(!p)if((g|0)>(d|0)){c[j>>2]=d;c[h>>2]=g+-1;d=i+1|0;q=14;break}else{j=i+1|0;d=(j|0)>=(d|0)?j:d;break}else q=14;while(0);if((q|0)==14){q=0;c[j+8>>2]=c[o>>2];c[j+16>>2]=f;j=K2(c[b>>2]|0,0,j)|0;e=N2(c[b>>2]|0,e,j)|0;if(!e){d=12;e=0;break a}}k=k+1|0;if((k|0)>=(m|0)){d=0;break}}}else{d=0;e=0}}else e=0;while(0);D_(c[r>>2]|0);r=b+24|0;c[r>>2]=(c[r>>2]|0)+1;c[b+8>>2]=e}l=s;return d|0}function W2(b){b=b|0;var d=0;d=a[b>>0]|0;b=0;while(1){if((a[63648+(b<<3)>>0]|0)==d<<24>>24)break;b=b+1|0;if((b|0)==12){b=12;break}}return c[63648+(b<<3)+4>>2]|0}function X2(a){a=a|0;var b=0;b=a+-48|0;if(b>>>0<10)return b|0;else{b=a|32;return ((b+-97|0)>>>0<6?b+-87|0:-1)|0}return 0}function Y2(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+32|0;o=t;q=t+4|0;i=B1(o,d,-1)|0;g=a[d>>0]|0;a:do if((i|0)>=1){r=f+4|0;n=b+32|0;h=d;j=i;b:while(1){i=(h|0)==(d|0);if(!(i|g<<24>>24!=93)){s=5;break}c:do if(!(i|g<<24>>24!=45)){switch(a[h+1>>0]|0){case 93:break c;case 45:break;default:{g=11;break a}}if((a[h+2>>0]|0)==93){g=11;break a}}while(0);d:do if(g<<24>>24==91){switch(a[h+1>>0]|0){case 61:case 46:{g=3;break a}case 58:break;default:{s=17;break d}}i=h+2|0;g=0;e:while(1){switch(a[i+g>>0]|0){case 0:{s=16;break b}case 58:break e;default:{}}if((g|0)<13)g=g+1|0;else{s=16;break b}}F3(q|0,i|0,g|0)|0;a[q+g>>0]=0;j=H0(q)|0;if(!j){s=16;break b}h=i+(g+2)|0;if((a[i+(g+1)>>0]|0)!=93){s=16;break b}if(!(c[f>>2]|0)){g=1114111;m=0;k=1;s=25}else{g=c[r>>2]|0;if((g|0)>63){g=12;break a}c[r>>2]=g+1;c[f+8+(g<<2)>>2]=j}}else s=17;while(0);if((s|0)==17){s=0;i=c[o>>2]|0;h=h+j|0;if((a[h>>0]|0)==45?(p=h+1|0,(a[p>>0]|0)!=93):0){h=B1(o,p,-1)|0;g=c[o>>2]|0;if((h|0)<1|(i|0)>(g|0)){g=11;break a}j=0;m=i;h=p+h|0;k=0;s=25}else{j=0;g=i;m=i;k=0;s=25}}if((s|0)==25){s=0;i=_2(e)|0;if(!i){g=12;break a}c[i>>2]=m;c[i+4>>2]=g;c[i+12>>2]=j;c[i+8>>2]=-1;if(!(k|(c[n>>2]&2|0)==0)?($2(e,m,g)|0)!=0:0){g=12;break a}}j=B1(o,h,-1)|0;g=a[h>>0]|0;if((j|0)<1){s=3;break a}}if((s|0)==5){c[b+12>>2]=h+1;g=0;break}else if((s|0)==16){g=4;break}}else s=3;while(0);if((s|0)==3)g=g<<24>>24?2:7;l=t;return g|0}function Z2(a,b){a=a|0;b=b|0;return (c[c[a>>2]>>2]|0)-(c[c[b>>2]>>2]|0)|0}function _2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;d=c[h>>2]|0;e=a+12|0;f=c[e>>2]|0;if((d|0)>=(f|0))if((f|0)<=32767?(c[e>>2]=f<<1,g=a+4|0,b=F_(c[g>>2]|0,f<<3)|0,(b|0)!=0):0){c[g>>2]=b;d=c[h>>2]|0;i=6}else b=0;else{b=c[a+4>>2]|0;i=6}if((i|0)==6){c[h>>2]=d+1;i=n2(c[a>>2]|0,0,0,1,20)|0;c[b+(d<<2)>>2]=i;b=i}return b|0}function $2(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;a:do if((b|0)>(d|0))b=0;else while(1){b:do if(!(l0(b)|0)){if(!(m0(b)|0)){b=b+1|0;break}f=o0(b)|0;e=f;while(1){g=b+1|0;e=e+1|0;if((b|0)>=(d|0)){h=f;b=g;g=12;break b}if((o0(g)|0)==(e|0))b=g;else{h=f;b=g;g=12;break}}}else{f=R$(b)|0;e=f;while(1){g=b+1|0;e=e+1|0;if((b|0)>=(d|0)){h=f;b=g;g=12;break b}if((R$(g)|0)==(e|0))b=g;else{h=f;b=g;g=12;break}}}while(0);if((g|0)==12){g=0;f=_2(a)|0;if(!f){b=-1;break a}c[f>>2]=h;c[f+4>>2]=e+-1;c[f+8>>2]=-1}if((b|0)>(d|0)){b=0;break}}while(0);return b|0}function a3(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n;i=c[a+4>>2]|0;j=i+56|0;h=(c[j>>2]&8|0)==0?d:0;a=c[i+40>>2]|0;if((a|0)>0&(h|0)!=0){a=C_(a<<2)|0;if(!a)a=12;else{g=a;d=a;m=3}}else{g=0;d=0;m=3}if((m|0)==3){if(!(c[i+60>>2]|0))a=c3(i,b,g,f,k)|0;else a=b3(i,b,g,f,k)|0;if(!a)d3(h,e,c[j>>2]|0,i,g,c[k>>2]|0);if(g)D_(d)}l=n;return a|0}function b3(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;V=l;l=l+16|0;T=V;c[T>>2]=0;o=e&1;R=e&2;S=a+56|0;n=c[S>>2]&4;U=l2(0,0)|0;a:do if(U){p=n2(U,0,0,0,32)|0;if(!p){m2(U);e=12;break}c[p+24>>2]=0;c[p+28>>2]=0;Q=a+40|0;e=c[Q>>2]|0;if(e){e=C_(e<<2)|0;if(!e){m=0;k=0;j=e;e=12;i=0;h=0;g=0}else{j=e;i=e;C=6}}else{j=0;i=0;C=6}b:do if((C|0)==6){e=c[a+28>>2]|0;if(e){e=C_(e<<3)|0;if(!e){m=e;k=0;e=12;h=0;g=0;break}else{m=e;h=e}}else{m=0;h=0}P=a+52|0;e=c[P>>2]|0;if(e){e=C_(e<<2)|0;if(!e){k=e;e=12;g=0;break}else{k=e;g=e}}else{k=0;g=0}K=a+8|0;L=a+12|0;M=(d|0)==0;N=(d|0)!=0;O=a+32|0;J=(n|0)!=0;I=(o|0)==0;r=b;e=1;q=-1;v=-1;B=0;c:while(1){n=c[Q>>2]|0;if((n|0)>0){o=0;do{c[j+(o<<2)>>2]=-1;if(!M){c[d+(o<<2)>>2]=-1;n=c[Q>>2]|0}o=o+1|0}while((o|0)<(n|0))}n=c[P>>2]|0;if((n|0)>0)H3(g|0,0,n<<2|0)|0;G=e+q|0;e=B1(T,r,4)|0;if((e|0)<1)if((e|0)<0){e=1;break b}else e=1;F=r+e|0;H=c[T>>2]|0;n=c[K>>2]|0;o=n+8|0;if(c[o>>2]|0){w=(G|0)!=0;x=(B|0)==95;y=(G|0)==0;A=J&(B|0)==10;z=(G|0)<1&I;u=n;n=0;t=0;s=o;while(1){r=u+20|0;o=c[r>>2]|0;d:do if(o)if((o&1|0)==0|z|A){if(o&2|0?(E=c[T>>2]|0,!((E|R|0)==0|J&(E|0)==10)):0){q=t;break}do if(o&16|0){if(x){q=t;break d}if(h0(B)|0){q=t;break d}o=c[T>>2]|0;if((o|0)==95)break;if(!(h0(o)|0)){q=t;break d}}while(0);o=c[r>>2]|0;if(o&32){if(x){o=c[T>>2]|0;if((o|0)==95){q=t;break}}else{E=(h0(B)|0)==0;o=c[T>>2]|0;if(E|(o|0)==95){q=t;break}}if(h0(o)|0){q=t;break}o=c[r>>2]|0}q=c[T>>2]|0;do if((q|0)!=0&(w&(o&64|0)!=0)){if(x)o=1;else{o=(h0(B)|0)!=0;q=c[T>>2]|0}if((q|0)==95)if(o){q=t;break d}else break;else if(o^(h0(q)|0)!=0)break;else{q=t;break d}}while(0);if(!(c[r>>2]&128)){C=49;break}o=c[T>>2]|0;if(y|(o|0)==0){q=t;break}if(x)q=1;else{q=(h0(B)|0)!=0;o=c[T>>2]|0}if((o|0)==95)if(q){C=49;break}else{q=t;break}else if(q^(h0(o)|0)!=0){q=t;break}else{C=49;break}}else q=t;else C=49;while(0);do if((C|0)==49){C=0;if(!t){n=c[u+16>>2]|0;q=c[s>>2]|0;break}q=p+28|0;o=c[q>>2]|0;if(!o){o=n2(U,0,0,0,32)|0;if(!o){C=53;break c}c[o+24>>2]=p;c[o+28>>2]=0;E=n2(U,0,0,0,c[Q>>2]<<2)|0;c[o+20>>2]=E;if(!E){C=60;break c}c[q>>2]=o;p=o}else p=o;c[p>>2]=G;c[p+4>>2]=F;c[p+8>>2]=c[s>>2];c[p+12>>2]=c[u+12>>2];c[p+16>>2]=c[T>>2];if((c[Q>>2]|0)>0){q=c[p+20>>2]|0;o=0;do{c[q+(o<<2)>>2]=c[j+(o<<2)>>2];o=o+1|0}while((o|0)<(c[Q>>2]|0))}o=c[u+16>>2]|0;if(!o)q=t;else{q=c[o>>2]|0;if((q|0)<=-1){q=t;break}r=c[p+20>>2]|0;do{o=o+4|0;c[r+(q<<2)>>2]=G;q=c[o>>2]|0}while((q|0)>-1);q=t}}while(0);s=u+40|0;if(!(c[s>>2]|0))break;else{u=u+32|0;t=q}}if(n){o=c[n>>2]|0;if((o|0)>-1)do{c[j+(o<<2)>>2]=G;n=n+4|0;o=c[n>>2]|0}while((o|0)>-1)}else n=0;if(!q)C=171;else{s=G;r=F;w=q;x=n;C=79}}else{n=0;C=171}e:while(1){if((C|0)==79){if((w|0)==(c[L>>2]|0)){if((v|0)>=(s|0)){if(!(N&(v|0)==(s|0))){n=x;C=171;continue}n=c[Q>>2]|0;if(!(f3(n,c[O>>2]|0,j,d)|0)){n=x;C=171;continue}}else{if(M){v=s;n=x;C=171;continue}n=c[Q>>2]|0}if((n|0)>0)n=0;else{v=s;n=x;C=171;continue}while(1){c[d+(n<<2)>>2]=c[j+(n<<2)>>2];n=n+1|0;if((n|0)>=(c[Q>>2]|0)){v=s;n=x;C=171;continue e}}}u=w+8|0;if((c[u>>2]|0)!=0?(c[w+20>>2]&256|0)!=0:0){o=c[w+24>>2]|0;d3(o+1|0,m,c[S>>2]&-9,a,j,s);E=c[m+(o<<3)>>2]|0;o=(c[m+(o<<3)+4>>2]|0)-E|0;if(z$(b+E|0,r+-1|0,o)|0){n=x;C=171;continue}E=(o|0)==0;n=E&1;q=c[w+12>>2]|0;if(E?c[k+(q<<2)>>2]|0:0){n=x;C=171;continue}c[k+(q<<2)>>2]=n;o=o+-1|0;r=r+o|0;o=o+s|0;q=c[T>>2]|0;n=B1(T,r,4)|0;if((n|0)<1)if((n|0)<0){e=1;break b}else n=1;D=r+n|0;E=n}else{q=c[T>>2]|0;if(!q){n=x;C=171;continue}n=B1(T,r,4)|0;if((n|0)<1)if((n|0)<0){e=1;break b}else n=1;o=s;D=r+n|0;E=n}s=o+e|0;if(!(c[u>>2]|0)){e=E;n=x;C=171;continue}y=(s|0)!=0;z=(q|0)==95;A=(s|0)==0;C=J&(q|0)==10;B=(s|0)<1&I;t=0;n=x;while(1){f:do if((c[w>>2]|0)>>>0<=q>>>0){if((c[w+4>>2]|0)>>>0<q>>>0)break;r=w+20|0;e=c[r>>2]|0;do if(e|0){if(!((e&1|0)==0|B|C))break f;if(e&2|0?(x=c[T>>2]|0,!((x|R|0)==0|J&(x|0)==10)):0)break f;do if(e&16|0){if(z)break f;if(h0(q)|0)break f;e=c[T>>2]|0;if((e|0)==95)break;if(!(h0(e)|0))break f}while(0);e=c[r>>2]|0;if(e&32){if(z){e=c[T>>2]|0;if((e|0)==95)break f}else{x=(h0(q)|0)==0;e=c[T>>2]|0;if(x|(e|0)==95)break f}if(h0(e)|0)break f;e=c[r>>2]|0}o=c[T>>2]|0;do if((o|0)!=0&(y&(e&64|0)!=0)){if(z)e=1;else{e=(h0(q)|0)!=0;o=c[T>>2]|0}if((o|0)==95)if(e)break f;else break;else if(e^(h0(o)|0)!=0)break;else break f}while(0);do if(c[r>>2]&128|0){e=c[T>>2]|0;if(A|(e|0)==0)break f;if(z)o=1;else{o=(h0(q)|0)!=0;e=c[T>>2]|0}if((e|0)==95)if(o)break;else break f;else if(o^(h0(e)|0)!=0)break f;else break}while(0);e=c[r>>2]|0;do if(e&4){if(c[S>>2]&2|0)break;if(!(g0(q,c[w+24>>2]|0)|0))break f;e=c[r>>2]|0}while(0);do if(e&4|0){if(!(c[S>>2]&2))break;x=o0(q)|0;e=w+24|0;if(g0(x,c[e>>2]|0)|0)break;x=R$(q)|0;if(!(g0(x,c[e>>2]|0)|0))break f}while(0);if(!(c[r>>2]&8))break;if(e3(c[w+28>>2]|0,q,c[S>>2]&2)|0)break f}while(0);if(!t){t=c[u>>2]|0;n=c[w+16>>2]|0;break}o=p+28|0;e=c[o>>2]|0;if(!e){e=n2(U,0,0,0,32)|0;if(!e){C=145;break c}c[e+24>>2]=p;c[e+28>>2]=0;x=n2(U,0,0,0,c[Q>>2]<<2)|0;c[e+20>>2]=x;if(!x){C=152;break c}c[o>>2]=e;p=e}else p=e;c[p>>2]=s;c[p+4>>2]=D;c[p+8>>2]=c[u>>2];c[p+12>>2]=c[w+12>>2];c[p+16>>2]=c[T>>2];if((c[Q>>2]|0)>0){o=c[p+20>>2]|0;e=0;do{c[o+(e<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0}while((e|0)<(c[Q>>2]|0))}e=c[w+16>>2]|0;if(!e)break;o=c[e>>2]|0;if((o|0)<=-1)break;r=c[p+20>>2]|0;do{c[r+(o<<2)>>2]=s;e=e+4|0;o=c[e>>2]|0}while((o|0)>-1)}while(0);u=w+40|0;if(!(c[u>>2]|0))break;else w=w+32|0}if(!t){e=E;C=171;continue}if(n){e=c[n>>2]|0;if((e|0)>-1){do{n=n+4|0;c[j+(e<<2)>>2]=s;e=c[n>>2]|0}while((e|0)>-1);q=v;o=D;e=E}else{q=v;o=D;e=E}}else{q=v;o=D;e=E;n=0}}else if((C|0)==171){C=0;r=c[p+24>>2]|0;if(!r)break;t=c[p+8>>2]|0;if(c[t+20>>2]&256|0)c[k+(c[p+12>>2]<<2)>>2]=0;s=c[p>>2]|0;u=c[p+4>>2]|0;c[T>>2]=c[p+16>>2];q=c[Q>>2]|0;if((q|0)>0){p=c[p+20>>2]|0;o=0;do{c[j+(o<<2)>>2]=c[p+(o<<2)>>2];o=o+1|0}while((o|0)<(q|0));p=r;q=v;o=u}else{p=r;q=v;o=u}}r=o;v=q;w=t;x=n;C=79}n=(v|0)>-1;if(n|(c[T>>2]|0)==0){C=180;break}c[T>>2]=H;r=F;q=G;B=H}if((C|0)==53){m2(U);if(j|0)D_(i);if(m|0)D_(h);if(!k){e=12;break a}D_(g);e=12;break a}else if((C|0)==60){m2(U);if(j|0)D_(i);if(m|0)D_(h);if(!k){e=12;break a}D_(g);e=12;break a}else if((C|0)==145){m2(U);if(j|0)D_(i);if(m|0)D_(h);if(!k){e=12;break a}D_(g);e=12;break a}else if((C|0)==152){m2(U);if(j|0)D_(i);if(m|0)D_(h);if(!k){e=12;break a}D_(g);e=12;break a}else if((C|0)==180){c[f>>2]=v;e=(n^1)&1;break}}while(0);m2(U);if(j|0)D_(i);if(m|0)D_(h);if(k)D_(g)}else e=12;while(0);l=V;return e|0}function c3(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=l;l=l+16|0;T=W;c[T>>2]=0;k=e&1;Q=e&2;R=a+56|0;j=c[R>>2]&4;if(!d)N=0;else N=c[a+40>>2]|0;P=N<<2;i=a+52|0;e=c[i>>2]|0;h=e<<3;g=h+8|0;e=P+12+h+(g+(O(P,e)|0)<<1)|0;U=C_(e)|0;if(!U)e=12;else{H3(U|0,0,e|0)|0;e=U+P|0;m=e&3;m=e+((m|0)==0?0:4-m|0)|0;e=m+g|0;n=e&3;n=e+((n|0)==0?0:4-n|0)|0;e=n+g|0;M=e&3;M=e+((M|0)==0?0:4-M|0)|0;e=M+h|0;g=e&3;i=c[i>>2]|0;h=(i|0)>0;if(h){e=e+((g|0)==0?0:4-g|0)|0;g=0;while(1){c[n+(g<<3)+4>>2]=e;e=e+P|0;c[m+(g<<3)+4>>2]=e;g=g+1|0;if((g|0)>=(i|0))break;else e=e+P|0}if(h){e=0;do{c[M+(e<<3)>>2]=-1;e=e+1|0}while((e|0)<(i|0))}}e=B1(T,b,4)|0;if((e|0)<1)if((e|0)<0)e=1;else{i=1;V=11}else{i=e;V=11}a:do if((V|0)==11){L=a+8|0;K=(j|0)!=0;E=(k|0)==0;F=(N|0)>0;G=a+12|0;H=(N|0)<1;I=a+44|0;J=a+32|0;C=a+36|0;D=(N|0)==0;h=0;v=b+i|0;u=0;j=0;e=-1;g=m;A=U;x=m;w=n;while(1){if((e|0)<0){a=c[L>>2]|0;k=a+8|0;b:do if(c[k>>2]|0){p=(u|0)!=0;q=(h|0)==95;r=(u|0)==0;t=K&(h|0)==10;s=(u|0)<1&E;while(1){c:while(1){o=a+12|0;if((c[M+(c[o>>2]<<3)>>2]|0)>=(u|0))break;n=a+20|0;b=c[n>>2]|0;if(!b){V=46;break}d:do if((b&1|0)==0|s|t){if(b&2|0?(B=c[T>>2]|0,!((B|Q|0)==0|K&(B|0)==10)):0)break;do if(b&16|0){if(q)break d;if(h0(h)|0)break d;b=c[T>>2]|0;if((b|0)==95)break;if(!(h0(b)|0))break d}while(0);b=c[n>>2]|0;if(b&32){if(q){b=c[T>>2]|0;if((b|0)==95)break}else{B=(h0(h)|0)==0;b=c[T>>2]|0;if(B|(b|0)==95)break}if(h0(b)|0)break;b=c[n>>2]|0}m=c[T>>2]|0;do if((m|0)!=0&(p&(b&64|0)!=0)){if(q)b=1;else{b=(h0(h)|0)!=0;m=c[T>>2]|0}if((m|0)==95)if(b)break d;else break;else if(b^(h0(m)|0)!=0)break;else break d}while(0);if(!(c[n>>2]&128)){V=46;break c}b=c[T>>2]|0;if(r|(b|0)==0)break;if(q)m=1;else{m=(h0(h)|0)!=0;b=c[T>>2]|0}if((b|0)==95)if(m){V=46;break c}else break;else if(m^(h0(b)|0)!=0)break;else{V=46;break c}}while(0);k=a+40|0;if(!(c[k>>2]|0))break b;else a=a+32|0}if((V|0)==46){V=0;c[g>>2]=c[k>>2];if(F)H3(c[g+4>>2]|0,-1,P|0)|0;k=c[a+16>>2]|0;if(k|0?(S=c[k>>2]|0,(S|0)>-1):0){m=g+4|0;b=S;do{if((b|0)<(N|0))c[(c[m>>2]|0)+(b<<2)>>2]=u;k=k+4|0;b=c[k>>2]|0}while((b|0)>-1)}k=(c[g>>2]|0)!=(c[G>>2]|0);if(k|H){j=k?j:1;e=k?e:u;k=g+4|0}else{k=g+4|0;j=c[k>>2]|0;e=0;do{c[d+(e<<2)>>2]=c[j+(e<<2)>>2];e=e+1|0}while((e|0)!=(N|0));j=1;e=u}B=c[o>>2]|0;c[M+(B<<3)>>2]=u;c[M+(B<<3)+4>>2]=k;g=g+8|0}k=a+40|0;if(!(c[k>>2]|0))break;else a=a+32|0}}while(0);c[g>>2]=0;g=c[T>>2]|0;if(!g)break;else h=g}else{if(D)break;h=c[T>>2]|0;if(!((g|0)!=(x|0)&(h|0)!=0))break}B=u+i|0;g=B1(T,v,4)|0;if((g|0)<1)if((g|0)<0){e=1;break a}else i=1;else i=g;z=v+i|0;if((j|0)!=0&(c[I>>2]|0)!=0){if(!(c[x>>2]|0))g=w;else{o=c[C>>2]|0;p=c[o>>2]|0;q=(p|0)>-1;n=x;g=w;do{m=n+4|0;e:do if(q){k=0;b=p;do{a=c[o+((k|1)<<2)>>2]|0;if((b|0)>=(N|0))break e;j=c[m>>2]|0;if((c[j+(a<<2)>>2]|0)==(c[d+(a<<2)>>2]|0)?(c[j+(b<<2)>>2]|0)<(c[d+(b<<2)>>2]|0):0)break e;k=k+2|0;b=c[o+(k<<2)>>2]|0}while((b|0)>-1);k=m;V=75}else{k=m;j=c[m>>2]|0;V=75}while(0);if((V|0)==75){V=0;c[g>>2]=c[n>>2];v=g+4|0;y=c[v>>2]|0;c[v>>2]=j;c[k>>2]=y;g=g+8|0}n=n+8|0}while((c[n>>2]|0)!=0)}c[g>>2]=0;y=x;j=0}else{y=w;w=x}k=c[w>>2]|0;if(!k){k=A;g=y}else{r=(B|0)!=0;s=(h|0)==95;t=(B|0)==0;v=K&(h|0)==10;u=(B|0)<1&E;q=w;a=A;g=y;while(1){b=k+8|0;if(c[b>>2]|0){p=q+4|0;o=a;n=b;while(1){f:do if((c[k>>2]|0)>>>0<=h>>>0?(c[k+4>>2]|0)>>>0>=h>>>0:0){m=k+20|0;a=c[m>>2]|0;do if(a|0){if(!((a&1|0)==0|u|v)){a=o;break f}if(a&2|0?(A=c[T>>2]|0,!((A|Q|0)==0|K&(A|0)==10)):0){a=o;break f}do if(a&16|0){if(s){a=o;break f}if(h0(h)|0){a=o;break f}a=c[T>>2]|0;if((a|0)==95)break;if(!(h0(a)|0)){a=o;break f}}while(0);a=c[m>>2]|0;if(a&32){if(s){a=c[T>>2]|0;if((a|0)==95){a=o;break f}}else{A=(h0(h)|0)==0;a=c[T>>2]|0;if(A|(a|0)==95){a=o;break f}}if(h0(a)|0){a=o;break f}a=c[m>>2]|0}b=c[T>>2]|0;do if((b|0)!=0&(r&(a&64|0)!=0)){if(s)a=1;else{a=(h0(h)|0)!=0;b=c[T>>2]|0}if((b|0)==95)if(a){a=o;break f}else break;else if(a^(h0(b)|0)!=0)break;else{a=o;break f}}while(0);do if(c[m>>2]&128|0){a=c[T>>2]|0;if(t|(a|0)==0){a=o;break f}if(s)b=1;else{b=(h0(h)|0)!=0;a=c[T>>2]|0}if((a|0)==95)if(b)break;else{a=o;break f}else if(b^(h0(a)|0)!=0){a=o;break f}else break}while(0);a=c[m>>2]|0;do if(a&4){if(c[R>>2]&2|0)break;if(!(g0(h,c[k+24>>2]|0)|0)){a=o;break f}a=c[m>>2]|0}while(0);do if(a&4|0){if(!(c[R>>2]&2))break;A=o0(h)|0;a=k+24|0;if(g0(A,c[a>>2]|0)|0)break;A=R$(h)|0;if(!(g0(A,c[a>>2]|0)|0)){a=o;break f}}while(0);if(!(c[m>>2]&8))break;if(e3(c[k+28>>2]|0,h,c[R>>2]&2)|0){a=o;break f}}while(0);if(F){b=c[p>>2]|0;a=0;do{c[o+(a<<2)>>2]=c[b+(a<<2)>>2];a=a+1|0}while((a|0)!=(N|0))}a=c[k+16>>2]|0;do if(a|0){b=c[a>>2]|0;if((b|0)<=-1)break;do{if((b|0)<(N|0))c[o+(b<<2)>>2]=B;a=a+4|0;b=c[a>>2]|0}while((b|0)>-1)}while(0);a=c[k+12>>2]|0;b=M+(a<<3)|0;if((c[b>>2]|0)>=(B|0)){a=c[M+(a<<3)+4>>2]|0;b=c[a>>2]|0;if(!(f3(N,c[J>>2]|0,o,b)|0)){a=o;break}c[a>>2]=o;if((c[n>>2]|0)!=(c[G>>2]|0)){a=b;break}if(F)e=0;else{j=1;a=b;e=B;break}while(1){c[d+(e<<2)>>2]=c[o+(e<<2)>>2];e=e+1|0;if((e|0)==(N|0)){j=1;a=b;e=B;break f}}}A=c[n>>2]|0;c[g>>2]=A;x=g+4|0;m=c[x>>2]|0;c[x>>2]=o;c[b>>2]=B;c[M+(a<<3)+4>>2]=x;do if((c[G>>2]|0)==(A|0)){if((e|0)==-1)if(F)e=0;else{e=B;j=1;break}else{if(!F)break;if((c[o>>2]|0)>(c[d>>2]|0))break;else e=0}do{c[d+(e<<2)>>2]=c[o+(e<<2)>>2];e=e+1|0}while((e|0)<(N|0));e=B;j=1}while(0);a=m;g=g+8|0}else a=o;while(0);n=k+40|0;if(!(c[n>>2]|0))break;else{k=k+32|0;o=a}}}q=q+8|0;k=c[q>>2]|0;if(!k){k=a;break}}}c[g>>2]=0;v=z;u=B;A=k;x=y}c[f>>2]=e;e=e>>>31}while(0);D_(U)}l=W;return e|0}function d3(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((d&8|0)==0&(g|0)>-1?(m=c[e+16>>2]|0,n=c[e+28>>2]|0,l=(a|0)!=0&(n|0)!=0,l):0){k=c[e+48>>2]|0;j=0;do{d=c[m+(j*12|0)>>2]|0;if((d|0)==(k|0))i=g;else i=c[f+(d<<2)>>2]|0;h=b+(j<<3)|0;c[h>>2]=i;d=c[m+(j*12|0)+4>>2]|0;if((d|0)==(k|0))d=g;else d=c[f+(d<<2)>>2]|0;e=b+(j<<3)+4|0;c[e>>2]=d;if((d|0)==-1|(i|0)==-1){c[e>>2]=-1;c[h>>2]=-1}j=j+1|0}while(j>>>0<a>>>0&j>>>0<n>>>0);if(l){d=0;do{i=b+(d<<3)+4|0;j=c[m+(d*12|0)+8>>2]|0;if(j|0?(o=c[j>>2]|0,(o|0)>-1):0){k=b+(d<<3)|0;h=0;f=o;e=c[k>>2]|0;do{if(!((e|0)>=(c[b+(f<<3)>>2]|0)?(c[i>>2]|0)<=(c[b+(f<<3)+4>>2]|0):0)){c[i>>2]=-1;c[k>>2]=-1;e=-1}h=h+1|0;f=c[j+(h<<2)>>2]|0}while((f|0)>-1)}d=d+1|0}while(d>>>0<a>>>0&d>>>0<n>>>0)}else d=0}else d=0;if(d>>>0<a>>>0)H3(b+(d<<3)|0,-1,a-d<<3|0)|0;return}function e3(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;a:do if(!e)d=0;else{f=(d|0)==0;d=e;while(1){if(f){if(g0(b,d)|0){d=1;break a}}else{e=R$(b)|0;if(g0(e,c[a>>2]|0)|0){d=1;break a}e=o0(b)|0;if(g0(e,c[a>>2]|0)|0){d=1;break a}}a=a+4|0;d=c[a>>2]|0;if(!d){d=0;break}}}while(0);return d|0}function f3(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if((a|0)>0){f=0;while(1){h=c[d+(f<<2)>>2]|0;g=c[e+(f<<2)>>2]|0;if(!(c[b+(f<<2)>>2]|0)){if((h|0)<(g|0)){f=1;break a}if((h|0)>(g|0)){f=0;break a}}else{if((h|0)>(g|0)){f=1;break a}if((h|0)<(g|0)){f=0;break a}}f=f+1|0;if((f|0)>=(a|0)){f=0;break}}}else f=0;while(0);return f|0}function g3(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=t0(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;i=(c[f+8>>2]|0)-h|0;if((i|0)>0){i=i>>>0<k>>>0?i:k;F3(b|0,h|0,i|0)|0;c[g>>2]=(c[g>>2]|0)+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(K$(f)|0)break;h=nb[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)u0(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)u0(f);return e|0}function h3(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(t0(a)|0)==0;a=i3(a)|0}else a=i3(a)|0;return a|0}function i3(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=nb[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function j3(a){a=a|0;(c[a+76>>2]|0)>-1?t0(a)|0:0;return c[a+60>>2]|0}function k3(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[15653]|0;if((c[f+76>>2]|0)>-1)g=t0(f)|0;else g=0;do if((D1(b,f)|0)<0)b=-1;else{if((a[f+75>>0]|0)!=10?(d=f+20|0,e=c[d>>2]|0,e>>>0<(c[f+16>>2]|0)>>>0):0){c[d>>2]=e+1;a[e>>0]=10;b=0;break}b=(F1(f,10)|0)>>31}while(0);if(g|0)u0(f);return b|0}function l3(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+48|0;i=k+24|0;h=k+16|0;g=k;d=k+28|0;b=d;e=150604;f=b+20|0;do{a[b>>0]=a[e>>0]|0;b=b+1|0;e=e+1|0}while((b|0)<(f|0));e=d+13|0;b=0;while(1){h1(e)|0;c[g>>2]=d;c[g+4>>2]=32962;c[g+8>>2]=384;f=N_(Ha(5,g|0)|0)|0;if((f|0)>-1){j=4;break}if((b|0)<99)b=b+1|0;else{b=0;break}}if((j|0)==4){c[h>>2]=d;wa(10,h|0)|0;b=z1(f,150624)|0;if(!b){c[i>>2]=f;Ja(6,i|0)|0;b=0}}l=k;return b|0}function m3(a){a=a|0;var b=0,e=0,f=0;if((c[a+76>>2]|0)>=0?(t0(a)|0)!=0:0){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0}else b=J$(a)|0}else f=3;do if((f|0)==3){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0;break}else{b=J$(a)|0;break}}while(0);return b|0}function n3(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(t0(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=F1(d,b)|0;u0(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=F1(d,b)|0}while(0);return e|0}function o3(a){a=a|0;return h3(a)|0}function p3(){}function q3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function r3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=q3(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function s3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0<a>>>0|0)>>>0,c|0)|0}function t3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (z=d,a-c>>>0|0)|0}function u3(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}\n  function v3(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<<i;b=k>>>(m>>>0)&b;g=0;i=l<<i;break}if(!f){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<<m|l>>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<<p&j;i=(k<<p|l>>>(o>>>0))&j|l<<m&i-33>>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (z=o,p)|0}else{p=u3(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (z=o,p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (z=o,p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((u3(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<<i|l>>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<<i;break}if(!f){o=0;p=0;return (z=o,p)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=s3(m|0,l|0,-1,-1)|0;d=z;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;t3(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=t3(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (z=o,p)|0}function w3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return v3(a,b,c,d,0)|0}function x3(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;v3(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function y3(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>c;return a>>>c|(b&(1<<c)-1)<<32-c}z=(b|0)<0?-1:0;return b>>c-32|0}function z3(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}z=0;return b>>>c-32|0}function A3(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c}z=a<<c-32;return 0}function B3(a){a=a|0;return (a&255)<<8|a>>8&255|0}function C3(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function D3(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;q=q+1|0;c[a>>2]=q;while((f|0)<(e|0)){if(!(c[d+(f<<3)>>2]|0)){c[d+(f<<3)>>2]=q;c[d+((f<<3)+4)>>2]=b;c[d+((f<<3)+8)>>2]=0;z=e;return d|0}f=f+1|0}e=e*2|0;d=F_(d|0,8*(e+1|0)|0)|0;d=D3(a|0,b|0,d|0,e|0)|0;z=e;return d|0}function E3(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;while((f|0)<(d|0)){e=c[b+(f<<3)>>2]|0;if(!e)break;if((e|0)==(a|0))return c[b+((f<<3)+4)>>2]|0;f=f+1|0}return 0}function F3(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return Ra(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function G3(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else F3(b,c,d)|0;return b|0}function H3(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;g=f-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function I3(a){a=a|0;var b=0,d=0;d=c[i>>2]|0;b=d+a|0;if((a|0)>0&(b|0)<(d|0)|(b|0)<0){W()|0;va(12);return -1}c[i>>2]=b;if((b|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=d;va(12);return -1}return d|0}function J3(a){a=a|0;return +gb[a&1]()}function K3(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;return +hb[a&7](+b,+c,+d)}function L3(a,b){a=a|0;b=b|0;return +ib[a&1](b|0)}function M3(a){a=a|0;return jb[a&3]()|0}function N3(a,b){a=a|0;b=b|0;return kb[a&63](b|0)|0}function O3(a,b,c){a=a|0;b=b|0;c=c|0;return lb[a&127](b|0,c|0)|0}function P3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return mb[a&3](b|0,c|0,+d,+e)|0}function Q3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return nb[a&63](b|0,c|0,d|0)|0}function R3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return ob[a&127](b|0,c|0,d|0,e|0)|0}function S3(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return pb[a&127](b|0,c|0,d|0,e|0,f|0)|0}function T3(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return qb[a&1](b|0,c|0,d|0,e|0,f|0,g|0)|0}function U3(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return rb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function V3(a){a=a|0;sb[a&15]()}function W3(a,b){a=a|0;b=b|0;tb[a&127](b|0)}function X3(a,b,c){a=a|0;b=b|0;c=c|0;ub[a&63](b|0,c|0)}function Y3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;vb[a&127](b|0,c|0,d|0)}function Z3(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;wb[a&15](b|0,c|0,d|0,+e,+f,g|0)}function _3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;xb[a&31](b|0,c|0,d|0,e|0)}function $3(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;yb[a&15](b|0,c|0,d|0,e|0,f|0)}function a4(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;zb[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function b4(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Ab[a&0](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function c4(){S(0);return 0.0}function d4(a,b,c){a=+a;b=+b;c=+c;S(1);return 0.0}function e4(a){a=a|0;S(2);return 0.0}function f4(){S(3);return 0}function g4(a){a=a|0;S(4);return 0}function h4(a,b){a=a|0;b=b|0;S(5);return 0}function i4(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(6);return 0}function j4(a,b,c){a=a|0;b=b|0;c=c|0;S(7);return 0}function k4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(8);return 0}function l4(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(9);return 0}function m4(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(10);return 0}function n4(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;S(11);return 0}function o4(){S(12)}function p4(a){a=a|0;S(13)}function q4(a,b){a=a|0;b=b|0;S(14)}function r4(a,b,c){a=a|0;b=b|0;c=c|0;S(15)}function s4(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;S(16)}function t4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(17)}function u4(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(18)}function v4(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(19)}function w4(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;S(20)}\n  \n  // EMSCRIPTEN_END_FUNCS\n  var gb=[c4,FL];var hb=[d4,RF,QF,SF,TF,d4,d4,d4];var ib=[e4,ML];var jb=[f4,eq,EH,vI];var kb=[g4,eh,zg,Nm,Om,Fy,Iy,sN,tN,iP,jP,kP,lP,mP,nP,oP,pP,K_,Ib,bC,Al,Dl,an,vH,ay,Sy,$x,AH,FH,by,eN,uH,jN,kN,bV,C_,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4,g4];var lb=[h4,hy,Ey,Jy,EK,FK,wK,sK,aK,KT,LT,MT,NT,OT,PT,RT,ST,TT,UT,VT,WT,XT,YT,ZT,_T,$T,aU,bU,cU,dU,eU,fU,gU,hU,iU,jU,kU,lU,mU,nU,wX,xX,zX,WX,XX,YX,ZX,_X,$X,aY,bY,UY,VY,XY,jY,kY,mY,$B,pg,dh,Gh,ii,Ai,Lk,Jk,Bl,El,$o,oq,Kq,Mq,Oq,Pq,Rq,Qq,ar,is,ns,ps,tu,mB,lB,kB,gD,Ty,xH,tD,JD,ED,FD,GE,D1,n3,zL,NM,xx,PR,Ex,Gx,fN,b$,oQ,JT,ZU,_U,F_,kX,lX,mX,Z2,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4,h4];var mb=[i4,qt,vt,i4];var nb=[j4,Jm,Mu,kw,sw,Bw,Gw,Dy,Hy,HI,AM,zR,AX,YY,nY,L_,M_,Q_,R_,G0,Pw,Zm,Au,tp,os,Iw,eD,Y0,vA,g1,BL,DI,sO,WU,HY,yZ,sZ,CZ,P1,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4,j4];var ob=[k4,Lm,Wq,Nu,mw,uw,Cx,AA,Dx,Wx,jy,ly,wy,vy,Ky,Oy,Qy,xI,CM,VN,TN,PP,BR,XR,WR,pX,qX,rX,sX,tX,uX,vX,yX,CX,NY,OY,PY,QY,RY,SY,TY,WY,_Y,cY,dY,eY,fY,gY,hY,iY,lY,pY,Lw,Az,iD,DL,QV,TV,_V,jW,sW,yW,wW,zW,iX,DZ,XW,JY,KY,zZ,AZ,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4,k4];var pb=[l4,iy,bK,xK,DX,EX,UX,VX,pZ,$Y,aZ,qY,rY,nX,oX,FZ,GZ,HZ,IZ,KZ,LZ,MZ,NZ,OZ,QZ,RZ,SZ,TZ,UZ,PZ,s_,t_,j_,c_,VZ,WZ,XZ,ZZ,YZ,_Z,$Z,a_,b_,d_,e_,f_,g_,h_,i_,k_,l_,m_,n_,r_,p_,o_,q_,y_,u_,v_,w_,x_,z_,A_,B_,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4,l4];var qb=[m4,AU];var rb=[n4,rZ,BZ,n4];var sb=[o4,EL,BH,CH,DH,HH,IH,JH,FR,o4,o4,o4,o4,o4,o4,o4];var tb=[p4,Ob,Pb,Tb,Ub,Vb,nc,oc,Mc,Nc,Oc,Pc,Qc,Rc,Sc,cd,dd,gd,hd,id,jd,kd,ld,md,yd,zd,Ad,Cd,Dd,Ed,Fd,Gd,Hd,Id,Jd,Ud,Vd,Wd,Yd,Zd,_d,$d,ae,be,ce,de,ee,ge,te,ue,ve,we,He,Ie,Je,Le,Ye,Ze,_e,af,bf,cf,df,ef,ff,gf,hf,jf,sf,tf,uf,vf,Yf,Tf,rm,bm,fp,Go,ao,co,Np,Op,Zl,_l,fo,no,po,Ao,my,IJ,_J,KJ,JJ,uK,fJ,iJ,qP,vP,Mf,Fl,Ko,Oo,gp,D_,ax,jD,cF,ER,lO,mN,yI,YR,zU,UU,VU,$U,p4,p4,p4,p4,p4,p4,p4,p4,p4,p4,p4,p4];var ub=[q4,Uc,Zc,od,td,Qd,me,Ce,Re,pf,Bf,Ly,cK,GK,yK,tK,YJ,ZJ,CK,DK,tP,xP,PI,Sw,fD,GH,dN,AT,yU,XU,YU,aV,cV,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4,q4];var vb=[r4,Wb,Xb,_b,Lc,Tc,Vc,Yc,nd,pd,sd,Ld,Md,Pd,he,ie,le,xe,ye,Be,Me,Ne,Qe,kf,lf,of,wf,xf,Af,qk,rk,sk,Km,lw,tw,Zw,ny,Py,wz,BA,YC,BG,wI,II,hJ,BM,EM,UN,SN,rP,sP,uP,wP,yP,AR,nT,mT,qx,Sx,bz,Ez,Hz,zH,CL,BI,hN,lN,oT,qT,rT,zT,BT,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4,r4];var wb=[s4,xE,yE,zE,AE,BE,CE,DE,EE,s4,s4,s4,s4,s4,s4,s4];var xb=[t4,Yb,Wc,qd,Bd,Nd,Xd,je,ze,Oe,$e,mf,yf,Pf,Of,Nf,Lf,Kf,Jf,mc,If,Hf,ky,$J,vK,BX,ZY,oY,_0,gN,iN,LY];var yb=[u4,ed,Kd,Rd,fe,Ke,Cl,hD,nN,u4,u4,u4,u4,u4,u4,u4];var zb=[v4,Zb,Xc,rd,Od,ke,Ae,Pe,nf,zf,oN,v4,v4,v4,v4,v4];var Ab=[w4];return{___errno_location:O_,___muldi3:r3,___udivdi3:w3,___uremdi3:x3,_bitshift64Ashr:y3,_bitshift64Lshr:z3,_bitshift64Shl:A3,_dtextract:zw,_free:D_,_htons:M0,_i64Add:s3,_i64Subtract:t3,_llvm_bswap_i16:B3,_llvm_bswap_i32:C3,_malloc:C_,_memalign:I_,_memcpy:F3,_memmove:G3,_memset:H3,_realloc:F_,_saveSetjmp:D3,_sbrk:I3,_testSetjmp:E3,_vizCreateFile:Kb,_vizLastErrorMessage:Jb,_vizRenderFromString:Nb,_vizSetNop:Mb,_vizSetY_invert:Lb,dynCall_d:J3,dynCall_dddd:K3,dynCall_di:L3,dynCall_i:M3,dynCall_ii:N3,dynCall_iii:O3,dynCall_iiidd:P3,dynCall_iiii:Q3,dynCall_iiiii:R3,dynCall_iiiiii:S3,dynCall_iiiiiii:T3,dynCall_iiiiiiiiiii:U3,dynCall_v:V3,dynCall_vi:W3,dynCall_vii:X3,dynCall_viii:Y3,dynCall_viiiddi:Z3,dynCall_viiii:_3,dynCall_viiiii:$3,dynCall_viiiiii:a4,dynCall_viiiiiiiii:b4,establishStackSpace:Eb,getTempRet0:Hb,runPostSets:p3,setTempRet0:Gb,setThrew:Fb,stackAlloc:Bb,stackRestore:Db,stackSave:Cb}})\n  \n  \n  // EMSCRIPTEN_END_ASM\n  (Module.asmGlobalArg,Module.asmLibraryArg,buffer);var ___errno_location=Module[\"___errno_location\"]=asm[\"___errno_location\"];var ___muldi3=Module[\"___muldi3\"]=asm[\"___muldi3\"];var ___udivdi3=Module[\"___udivdi3\"]=asm[\"___udivdi3\"];var ___uremdi3=Module[\"___uremdi3\"]=asm[\"___uremdi3\"];var _bitshift64Ashr=Module[\"_bitshift64Ashr\"]=asm[\"_bitshift64Ashr\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var _dtextract=Module[\"_dtextract\"]=asm[\"_dtextract\"];var _free=Module[\"_free\"]=asm[\"_free\"];var _htons=Module[\"_htons\"]=asm[\"_htons\"];var _i64Add=Module[\"_i64Add\"]=asm[\"_i64Add\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _llvm_bswap_i16=Module[\"_llvm_bswap_i16\"]=asm[\"_llvm_bswap_i16\"];var _llvm_bswap_i32=Module[\"_llvm_bswap_i32\"]=asm[\"_llvm_bswap_i32\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _memalign=Module[\"_memalign\"]=asm[\"_memalign\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var _memmove=Module[\"_memmove\"]=asm[\"_memmove\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _realloc=Module[\"_realloc\"]=asm[\"_realloc\"];var _saveSetjmp=Module[\"_saveSetjmp\"]=asm[\"_saveSetjmp\"];var _sbrk=Module[\"_sbrk\"]=asm[\"_sbrk\"];var _testSetjmp=Module[\"_testSetjmp\"]=asm[\"_testSetjmp\"];var _vizCreateFile=Module[\"_vizCreateFile\"]=asm[\"_vizCreateFile\"];var _vizLastErrorMessage=Module[\"_vizLastErrorMessage\"]=asm[\"_vizLastErrorMessage\"];var _vizRenderFromString=Module[\"_vizRenderFromString\"]=asm[\"_vizRenderFromString\"];var _vizSetNop=Module[\"_vizSetNop\"]=asm[\"_vizSetNop\"];var _vizSetY_invert=Module[\"_vizSetY_invert\"]=asm[\"_vizSetY_invert\"];var establishStackSpace=Module[\"establishStackSpace\"]=asm[\"establishStackSpace\"];var getTempRet0=Module[\"getTempRet0\"]=asm[\"getTempRet0\"];var runPostSets=Module[\"runPostSets\"]=asm[\"runPostSets\"];var setTempRet0=Module[\"setTempRet0\"]=asm[\"setTempRet0\"];var setThrew=Module[\"setThrew\"]=asm[\"setThrew\"];var stackAlloc=Module[\"stackAlloc\"]=asm[\"stackAlloc\"];var stackRestore=Module[\"stackRestore\"]=asm[\"stackRestore\"];var stackSave=Module[\"stackSave\"]=asm[\"stackSave\"];var dynCall_d=Module[\"dynCall_d\"]=asm[\"dynCall_d\"];var dynCall_dddd=Module[\"dynCall_dddd\"]=asm[\"dynCall_dddd\"];var dynCall_di=Module[\"dynCall_di\"]=asm[\"dynCall_di\"];var dynCall_i=Module[\"dynCall_i\"]=asm[\"dynCall_i\"];var dynCall_ii=Module[\"dynCall_ii\"]=asm[\"dynCall_ii\"];var dynCall_iii=Module[\"dynCall_iii\"]=asm[\"dynCall_iii\"];var dynCall_iiidd=Module[\"dynCall_iiidd\"]=asm[\"dynCall_iiidd\"];var dynCall_iiii=Module[\"dynCall_iiii\"]=asm[\"dynCall_iiii\"];var dynCall_iiiii=Module[\"dynCall_iiiii\"]=asm[\"dynCall_iiiii\"];var dynCall_iiiiii=Module[\"dynCall_iiiiii\"]=asm[\"dynCall_iiiiii\"];var dynCall_iiiiiii=Module[\"dynCall_iiiiiii\"]=asm[\"dynCall_iiiiiii\"];var dynCall_iiiiiiiiiii=Module[\"dynCall_iiiiiiiiiii\"]=asm[\"dynCall_iiiiiiiiiii\"];var dynCall_v=Module[\"dynCall_v\"]=asm[\"dynCall_v\"];var dynCall_vi=Module[\"dynCall_vi\"]=asm[\"dynCall_vi\"];var dynCall_vii=Module[\"dynCall_vii\"]=asm[\"dynCall_vii\"];var dynCall_viii=Module[\"dynCall_viii\"]=asm[\"dynCall_viii\"];var dynCall_viiiddi=Module[\"dynCall_viiiddi\"]=asm[\"dynCall_viiiddi\"];var dynCall_viiii=Module[\"dynCall_viiii\"]=asm[\"dynCall_viiii\"];var dynCall_viiiii=Module[\"dynCall_viiiii\"]=asm[\"dynCall_viiiii\"];var dynCall_viiiiii=Module[\"dynCall_viiiiii\"]=asm[\"dynCall_viiiiii\"];var dynCall_viiiiiiiii=Module[\"dynCall_viiiiiiiii\"]=asm[\"dynCall_viiiiiiiii\"];Module[\"asm\"]=asm;Module[\"ccall\"]=ccall;Module[\"Pointer_stringify\"]=Pointer_stringify;Module[\"UTF8ToString\"]=UTF8ToString;if(memoryInitializer){if(!isDataURI(memoryInitializer)){if(typeof Module[\"locateFile\"]===\"function\"){memoryInitializer=Module[\"locateFile\"](memoryInitializer)}else if(Module[\"memoryInitializerPrefixURL\"]){memoryInitializer=Module[\"memoryInitializerPrefixURL\"]+memoryInitializer}}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module[\"readBinary\"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency(\"memory initializer\");var applyMemoryInitializer=(function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module[\"memoryInitializerRequest\"])delete Module[\"memoryInitializerRequest\"].response;removeRunDependency(\"memory initializer\")});function doBrowserLoad(){Module[\"readAsync\"](memoryInitializer,applyMemoryInitializer,(function(){throw\"could not load memory initializer \"+memoryInitializer}))}var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module[\"memoryInitializerRequest\"]){function useRequest(){var request=Module[\"memoryInitializerRequest\"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);if(data){response=data.buffer}else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+request.status+\", retrying \"+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module[\"memoryInitializerRequest\"].response){setTimeout(useRequest,0)}else{Module[\"memoryInitializerRequest\"].addEventListener(\"load\",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module[\"calledRun\"])run();if(!Module[\"calledRun\"])dependenciesFulfilled=runCaller};function run(args){args=args||Module[\"arguments\"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module[\"calledRun\"])return;function doRun(){if(Module[\"calledRun\"])return;Module[\"calledRun\"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout((function(){setTimeout((function(){Module[\"setStatus\"](\"\")}),1);doRun()}),1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&Module[\"noExitRuntime\"]&&status===0){return}if(Module[\"noExitRuntime\"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}if(ENVIRONMENT_IS_NODE){process[\"exit\"](status)}Module[\"quit\"](status,new ExitStatus(status))}Module[\"exit\"]=exit;function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=\"\"}ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\"}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}Module[\"noExitRuntime\"]=true;run()\n  \n  \n  \n  \n    return Module;\n  };\n  \n  function render(instance, src, options) {\n    var i;\n    for (i = 0; i < options.files.length; i++) {\n      instance['ccall']('vizCreateFile', 'number', ['string', 'string'], [options.files[i].path, options.files[i].data]);\n    }\n  \n    instance['ccall']('vizSetY_invert', 'number', ['number'], [options.yInvert ? 1 : 0]);\n    instance['ccall']('vizSetNop', 'number', ['number'], [options.nop ? options.nop : 0]);\n    \n    var resultPointer = instance['ccall']('vizRenderFromString', 'number', ['string', 'string', 'string'], [src, options.format, options.engine]);\n    var resultString = instance['Pointer_stringify'](resultPointer);\n    instance['ccall']('free', 'number', ['number'], [resultPointer]);\n  \n    var errorMessagePointer = instance['ccall']('vizLastErrorMessage', 'number', [], []);\n    var errorMessageString = instance['Pointer_stringify'](errorMessagePointer);\n    instance['ccall']('free', 'number', ['number'], [errorMessagePointer]);\n  \n    if (errorMessageString != '') {\n      throw new Error(errorMessageString);\n    }\n    \n    return resultString;\n  }\n  \n  if (typeof importScripts === \"function\") {\n    var instance = Module();\n    \n    onmessage = function(event) {\n      var id = event.data.id;\n      var src = event.data.src;\n      var options = event.data.options;\n    \n      try {\n        var result = render(instance, src, options);\n        postMessage({ id: id, result: result });\n      } catch (e) {\n        var error;\n        if (e instanceof Error) {\n          error = { message: e.message, fileName: e.fileName, lineNumber: e.lineNumber };\n        } else {\n          error = { message: e.toString() };\n        }\n        postMessage({ id: id, error: error });\n      }\n    }\n  }\n  \n  if (typeof exports === 'object' && typeof module !== 'undefined') {\n    module.exports = { render: render, Module: Module };\n  } else if (typeof define === 'function' && define.amd) {\n    define(function() { return { render: render, Module: Module }; });\n  }\n  \n  if (typeof global.Viz !== 'undefined') {\n    global.Viz.render = render;\n    global.Viz.Module = Module;\n  }\n  \n  })(typeof self !== 'undefined' ? self : this);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/graphviz/viz.js",
    "content": "/*\nViz.js 2.1.2 (Graphviz 2.40.1, Expat 2.2.5, Emscripten 1.37.36)\nCopyright (c) 2014-2018 Michael Daines\nLicensed under MIT license\n\nThis distribution contains other software in object code form:\n\nGraphviz\nLicensed under Eclipse Public License - v 1.0\nhttp://www.graphviz.org\n\nExpat\nCopyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper\nCopyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers.\nLicensed under MIT license\nhttp://www.libexpat.org\n\nzlib\nCopyright (C) 1995-2013 Jean-loup Gailly and Mark Adler\nhttp://www.zlib.net/zlib_license.html\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Viz = factory());\n}(this, (function () { 'use strict';\n\n  var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  };\n\n  var classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  var WorkerWrapper = function () {\n    function WorkerWrapper(worker) {\n      var _this = this;\n\n      classCallCheck(this, WorkerWrapper);\n\n      this.worker = worker;\n      this.listeners = [];\n      this.nextId = 0;\n\n      this.worker.addEventListener('message', function (event) {\n        var id = event.data.id;\n        var error = event.data.error;\n        var result = event.data.result;\n\n        _this.listeners[id](error, result);\n        delete _this.listeners[id];\n      });\n    }\n\n    createClass(WorkerWrapper, [{\n      key: 'render',\n      value: function render(src, options) {\n        var _this2 = this;\n\n        return new Promise(function (resolve, reject) {\n          var id = _this2.nextId++;\n\n          _this2.listeners[id] = function (error, result) {\n            if (error) {\n              reject(new Error(error.message, error.fileName, error.lineNumber));\n              return;\n            }\n            resolve(result);\n          };\n\n          _this2.worker.postMessage({ id: id, src: src, options: options });\n        });\n      }\n    }]);\n    return WorkerWrapper;\n  }();\n\n  var ModuleWrapper = function ModuleWrapper(module, render) {\n    classCallCheck(this, ModuleWrapper);\n\n    var instance = module();\n    this.render = function (src, options) {\n      return new Promise(function (resolve, reject) {\n        try {\n          resolve(render(instance, src, options));\n        } catch (error) {\n          reject(error);\n        }\n      });\n    };\n  };\n\n  // https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding\n\n\n  function b64EncodeUnicode(str) {\n    return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) {\n      return String.fromCharCode('0x' + p1);\n    }));\n  }\n\n  function defaultScale() {\n    if ('devicePixelRatio' in window && window.devicePixelRatio > 1) {\n      return window.devicePixelRatio;\n    } else {\n      return 1;\n    }\n  }\n\n  function svgXmlToImageElement(svgXml) {\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n        _ref$scale = _ref.scale,\n        scale = _ref$scale === undefined ? defaultScale() : _ref$scale,\n        _ref$mimeType = _ref.mimeType,\n        mimeType = _ref$mimeType === undefined ? \"image/png\" : _ref$mimeType,\n        _ref$quality = _ref.quality,\n        quality = _ref$quality === undefined ? 1 : _ref$quality;\n\n    return new Promise(function (resolve, reject) {\n      var svgImage = new Image();\n\n      svgImage.onload = function () {\n        var canvas = document.createElement('canvas');\n        canvas.width = svgImage.width * scale;\n        canvas.height = svgImage.height * scale;\n\n        var context = canvas.getContext(\"2d\");\n        context.drawImage(svgImage, 0, 0, canvas.width, canvas.height);\n\n        canvas.toBlob(function (blob) {\n          var image = new Image();\n          image.src = URL.createObjectURL(blob);\n          image.width = svgImage.width;\n          image.height = svgImage.height;\n\n          resolve(image);\n        }, mimeType, quality);\n      };\n\n      svgImage.onerror = function (e) {\n        var error;\n\n        if ('error' in e) {\n          error = e.error;\n        } else {\n          error = new Error('Error loading SVG');\n        }\n\n        reject(error);\n      };\n\n      svgImage.src = 'data:image/svg+xml;base64,' + b64EncodeUnicode(svgXml);\n    });\n  }\n\n  function svgXmlToImageElementFabric(svgXml) {\n    var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n        _ref2$scale = _ref2.scale,\n        scale = _ref2$scale === undefined ? defaultScale() : _ref2$scale,\n        _ref2$mimeType = _ref2.mimeType,\n        mimeType = _ref2$mimeType === undefined ? 'image/png' : _ref2$mimeType,\n        _ref2$quality = _ref2.quality,\n        quality = _ref2$quality === undefined ? 1 : _ref2$quality;\n\n    var multiplier = scale;\n\n    var format = void 0;\n    if (mimeType == 'image/jpeg') {\n      format = 'jpeg';\n    } else if (mimeType == 'image/png') {\n      format = 'png';\n    }\n\n    return new Promise(function (resolve, reject) {\n      fabric.loadSVGFromString(svgXml, function (objects, options) {\n        // If there's something wrong with the SVG, Fabric may return an empty array of objects. Graphviz appears to give us at least one <g> element back even given an empty graph, so we will assume an error in this case.\n        if (objects.length == 0) {\n          reject(new Error('Error loading SVG with Fabric'));\n        }\n\n        var element = document.createElement(\"canvas\");\n        element.width = options.width;\n        element.height = options.height;\n\n        var canvas = new fabric.Canvas(element, { enableRetinaScaling: false });\n        var obj = fabric.util.groupSVGElements(objects, options);\n        canvas.add(obj).renderAll();\n\n        var image = new Image();\n        image.src = canvas.toDataURL({ format: format, multiplier: multiplier, quality: quality });\n        image.width = options.width;\n        image.height = options.height;\n\n        resolve(image);\n      });\n    });\n  }\n\n  var Viz = function () {\n    function Viz() {\n      var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          workerURL = _ref3.workerURL,\n          worker = _ref3.worker,\n          Module = _ref3.Module,\n          render = _ref3.render;\n\n      classCallCheck(this, Viz);\n\n      if (typeof workerURL !== 'undefined') {\n        this.wrapper = new WorkerWrapper(new Worker(workerURL));\n      } else if (typeof worker !== 'undefined') {\n        this.wrapper = new WorkerWrapper(worker);\n      } else if (typeof Module !== 'undefined' && typeof render !== 'undefined') {\n        this.wrapper = new ModuleWrapper(Module, render);\n      } else if (typeof Viz.Module !== 'undefined' && typeof Viz.render !== 'undefined') {\n        this.wrapper = new ModuleWrapper(Viz.Module, Viz.render);\n      } else {\n        throw new Error('Must specify workerURL or worker option, Module and render options, or include one of full.render.js or lite.render.js after viz.js.');\n      }\n    }\n\n    createClass(Viz, [{\n      key: 'renderString',\n      value: function renderString(src) {\n        var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n            _ref4$format = _ref4.format,\n            format = _ref4$format === undefined ? 'svg' : _ref4$format,\n            _ref4$engine = _ref4.engine,\n            engine = _ref4$engine === undefined ? 'dot' : _ref4$engine,\n            _ref4$files = _ref4.files,\n            files = _ref4$files === undefined ? [] : _ref4$files,\n            _ref4$images = _ref4.images,\n            images = _ref4$images === undefined ? [] : _ref4$images,\n            _ref4$yInvert = _ref4.yInvert,\n            yInvert = _ref4$yInvert === undefined ? false : _ref4$yInvert,\n            _ref4$nop = _ref4.nop,\n            nop = _ref4$nop === undefined ? 0 : _ref4$nop;\n\n        for (var i = 0; i < images.length; i++) {\n          files.push({\n            path: images[i].path,\n            data: '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\\n<svg width=\"' + images[i].width + '\" height=\"' + images[i].height + '\"></svg>'\n          });\n        }\n\n        return this.wrapper.render(src, { format: format, engine: engine, files: files, images: images, yInvert: yInvert, nop: nop });\n      }\n    }, {\n      key: 'renderSVGElement',\n      value: function renderSVGElement(src) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        return this.renderString(src, _extends({}, options, { format: 'svg' })).then(function (str) {\n          var parser = new DOMParser();\n          return parser.parseFromString(str, 'image/svg+xml').documentElement;\n        });\n      }\n    }, {\n      key: 'renderImageElement',\n      value: function renderImageElement(src) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var scale = options.scale,\n            mimeType = options.mimeType,\n            quality = options.quality;\n\n\n        return this.renderString(src, _extends({}, options, { format: 'svg' })).then(function (str) {\n          if ((typeof fabric === 'undefined' ? 'undefined' : _typeof(fabric)) === \"object\" && fabric.loadSVGFromString) {\n            return svgXmlToImageElementFabric(str, { scale: scale, mimeType: mimeType, quality: quality });\n          } else {\n            return svgXmlToImageElement(str, { scale: scale, mimeType: mimeType, quality: quality });\n          }\n        });\n      }\n    }, {\n      key: 'renderJSONObject',\n      value: function renderJSONObject(src) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var format = options.format;\n\n\n        if (format !== 'json' || format !== 'json0') {\n          format = 'json';\n        }\n\n        return this.renderString(src, _extends({}, options, { format: format })).then(function (str) {\n          return JSON.parse(str);\n        });\n      }\n    }]);\n    return Viz;\n  }();\n\n  return Viz;\n\n})));\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/highlight.js/LICENSE",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2006, Ivan Sagalaev.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/highlight.js/third-languages.js",
    "content": "// https://cdn.jsdelivr.net/npm/highlightjs-solidity@2.0.5/dist/yul.min.js\nhljs.registerLanguage(\"yul\",(()=>{\"use strict\";function e(){try{return!0\n}catch(e){return!1}}\n  var a=/-?(\\b0[xX]([a-fA-F0-9]_?)*[a-fA-F0-9]|(\\b[1-9](_?\\d)*(\\.((\\d_?)*\\d)?)?|\\.\\d(_?\\d)*)([eE][-+]?\\d(_?\\d)*)?|\\b0)(?!\\w|\\$)/\n  ;e()&&(a=a.source.replace(/\\\\b/g,\"(?<!\\\\$)\\\\b\"));var s={className:\"number\",\n    begin:a,relevance:0},t={\n    keyword:\"assembly let function if switch case default for leave break continue u256 jump jumpi stop return revert selfdestruct invalid\",\n    built_in:\"add sub mul div sdiv mod smod exp not lt gt slt sgt eq iszero and or xor byte shl shr sar addmod mulmod signextend keccak256 pc pop dup1 dup2 dup3 dup4 dup5 dup6 dup7 dup8 dup9 dup10 dup11 dup12 dup13 dup14 dup15 dup16 swap1 swap2 swap3 swap4 swap5 swap6 swap7 swap8 swap9 swap10 swap11 swap12 swap13 swap14 swap15 swap16 mload mstore mstore8 sload sstore msize gas address balance selfbalance caller callvalue calldataload calldatasize calldatacopy codesize codecopy extcodesize extcodecopy returndatasize returndatacopy extcodehash create create2 call callcode delegatecall staticcall log0 log1 log2 log3 log4 chainid origin gasprice basefee blockhash coinbase timestamp number difficulty gaslimit\",\n    literal:\"true false\"},i={className:\"string\",\n    begin:/\\bhex'(([0-9a-fA-F]{2}_?)*[0-9a-fA-F]{2})?'/},l={className:\"string\",\n    begin:/\\bhex\"(([0-9a-fA-F]{2}_?)*[0-9a-fA-F]{2})?\"/};function d(e){\n    return e.inherit(e.APOS_STRING_MODE,{begin:/(\\bunicode)?'/})}function r(e){\n    return e.inherit(e.QUOTE_STRING_MODE,{begin:/(\\bunicode)?\"/})}var n={\n    SOL_ASSEMBLY_KEYWORDS:t,baseAssembly:e=>{\n      var a=d(e),n=r(e),o=/[A-Za-z_$][A-Za-z_$0-9.]*/,c=e.inherit(e.TITLE_MODE,{\n        begin:/[A-Za-z$_][0-9A-Za-z$_]*/,lexemes:o,keywords:t}),u={className:\"params\",\n        begin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,lexemes:o,keywords:t,\n        contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,n,s]},b={\n        className:\"operator\",begin:/:=|->/};return{keywords:t,lexemes:o,\n        contains:[a,n,i,l,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,b,{\n          className:\"function\",lexemes:o,beginKeywords:\"function\",end:\"{\",excludeEnd:!0,\n          contains:[c,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,b]}]}},\n    solAposStringMode:d,solQuoteStringMode:r,HEX_APOS_STRING_MODE:i,\n    HEX_QUOTE_STRING_MODE:l,SOL_NUMBER:s,isNegativeLookbehindAvailable:e}\n  ;const{SOL_ASSEMBLY_KEYWORDS:o,baseAssembly:c,isNegativeLookbehindAvailable:u}=n\n  ;return e=>{var a={keyword:o.keyword+\" object code data\",\n    built_in:o.built_in+\" datasize dataoffset datacopy setimmutable loadimmutable linkersymbol memoryguard\",\n    literal:o.literal},s=/\\bverbatim_[1-9]?[0-9]i_[1-9]?[0-9]o\\b(?!\\$)/\n  ;u()&&(s=s.source.replace(/\\\\b/,\"(?<!\\\\$)\\\\b\"));var t={className:\"built_in\",\n    begin:s},i=c(e);return e.inherit(i,{keywords:a,contains:i.contains.concat([t])})\n  }})());\n\n// https://cdn.jsdelivr.net/npm/highlightjs-solidity@2.0.5/dist/solidity.min.js\nhljs.registerLanguage(\"solidity\",(()=>{\"use strict\";function e(){try{return!0\n}catch(e){return!1}}\n  var a=/-?(\\b0[xX]([a-fA-F0-9]_?)*[a-fA-F0-9]|(\\b[1-9](_?\\d)*(\\.((\\d_?)*\\d)?)?|\\.\\d(_?\\d)*)([eE][-+]?\\d(_?\\d)*)?|\\b0)(?!\\w|\\$)/\n  ;e()&&(a=a.source.replace(/\\\\b/g,\"(?<!\\\\$)\\\\b\"));var s={className:\"number\",\n    begin:a,relevance:0},n={\n    keyword:\"assembly let function if switch case default for leave break continue u256 jump jumpi stop return revert selfdestruct invalid\",\n    built_in:\"add sub mul div sdiv mod smod exp not lt gt slt sgt eq iszero and or xor byte shl shr sar addmod mulmod signextend keccak256 pc pop dup1 dup2 dup3 dup4 dup5 dup6 dup7 dup8 dup9 dup10 dup11 dup12 dup13 dup14 dup15 dup16 swap1 swap2 swap3 swap4 swap5 swap6 swap7 swap8 swap9 swap10 swap11 swap12 swap13 swap14 swap15 swap16 mload mstore mstore8 sload sstore msize gas address balance selfbalance caller callvalue calldataload calldatasize calldatacopy codesize codecopy extcodesize extcodecopy returndatasize returndatacopy extcodehash create create2 call callcode delegatecall staticcall log0 log1 log2 log3 log4 chainid origin gasprice basefee blockhash coinbase timestamp number difficulty gaslimit\",\n    literal:\"true false\"},i={className:\"string\",\n    begin:/\\bhex'(([0-9a-fA-F]{2}_?)*[0-9a-fA-F]{2})?'/},t={className:\"string\",\n    begin:/\\bhex\"(([0-9a-fA-F]{2}_?)*[0-9a-fA-F]{2})?\"/};function r(e){\n    return e.inherit(e.APOS_STRING_MODE,{begin:/(\\bunicode)?'/})}function l(e){\n    return e.inherit(e.QUOTE_STRING_MODE,{begin:/(\\bunicode)?\"/})}var o={\n    SOL_ASSEMBLY_KEYWORDS:n,baseAssembly:e=>{\n      var a=r(e),o=l(e),c=/[A-Za-z_$][A-Za-z_$0-9.]*/,d=e.inherit(e.TITLE_MODE,{\n        begin:/[A-Za-z$_][0-9A-Za-z$_]*/,lexemes:c,keywords:n}),u={className:\"params\",\n        begin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,lexemes:c,keywords:n,\n        contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,o,s]},_={\n        className:\"operator\",begin:/:=|->/};return{keywords:n,lexemes:c,\n        contains:[a,o,i,t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,_,{\n          className:\"function\",lexemes:c,beginKeywords:\"function\",end:\"{\",excludeEnd:!0,\n          contains:[d,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,_]}]}},\n    solAposStringMode:r,solQuoteStringMode:l,HEX_APOS_STRING_MODE:i,\n    HEX_QUOTE_STRING_MODE:t,SOL_NUMBER:s,isNegativeLookbehindAvailable:e}\n  ;const{baseAssembly:c,solAposStringMode:d,solQuoteStringMode:u,HEX_APOS_STRING_MODE:_,HEX_QUOTE_STRING_MODE:m,SOL_NUMBER:b,isNegativeLookbehindAvailable:g}=o\n  ;return e=>{for(var a=d(e),s=u(e),n=[],i=0;i<32;i++)n[i]=i+1\n  ;var t=n.map((e=>8*e)),r=[];for(i=0;i<=80;i++)r[i]=i\n  ;var l=n.map((e=>\"bytes\"+e)).join(\" \")+\" \",o=t.map((e=>\"uint\"+e)).join(\" \")+\" \",E=t.map((e=>\"int\"+e)).join(\" \")+\" \",M=[].concat.apply([],t.map((e=>r.map((a=>e+\"x\"+a))))),p={\n    keyword:\"var bool string int uint \"+E+o+\"byte bytes \"+l+\"fixed ufixed \"+M.map((e=>\"fixed\"+e)).join(\" \")+\" \"+M.map((e=>\"ufixed\"+e)).join(\" \")+\" enum struct mapping address new delete if else for while continue break return throw emit try catch revert unchecked _ function modifier event constructor fallback receive error virtual override constant immutable anonymous indexed storage memory calldata external public internal payable pure view private returns import from as using global pragma contract interface library is abstract type assembly\",\n    literal:\"true false wei gwei szabo finney ether seconds minutes hours days weeks years\",\n    built_in:\"self this super selfdestruct suicide now msg block tx abi blockhash gasleft assert require Error Panic sha3 sha256 keccak256 ripemd160 ecrecover addmod mulmod log0 log1 log2 log3 log4\"\n  },O={className:\"operator\",begin:/[+\\-!~*\\/%<>&^|=]/\n  },C=/[A-Za-z_$][A-Za-z_$0-9]*/,N={className:\"params\",begin:/\\(/,end:/\\)/,\n    excludeBegin:!0,excludeEnd:!0,lexemes:C,keywords:p,\n    contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,s,b,\"self\"]},f={\n    begin:/\\.\\s*/,end:/[^A-Za-z0-9$_\\.]/,excludeBegin:!0,excludeEnd:!0,keywords:{\n      built_in:\"gas value selector address length push pop send transfer call callcode delegatecall staticcall balance code codehash wrap unwrap name creationCode runtimeCode interfaceId min max\"\n    },relevance:2},y=e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/,\n    lexemes:C,keywords:p}),w={className:\"built_in\",\n    begin:(g()?\"(?<!\\\\$)\\\\b\":\"\\\\b\")+\"(gas|value|salt)(?=:)\"};function x(e,a){return{\n    begin:(g()?\"(?<!\\\\$)\\\\b\":\"\\\\b\")+e+\"\\\\.\\\\s*\",end:/[^A-Za-z0-9$_\\.]/,\n    excludeBegin:!1,excludeEnd:!0,lexemes:C,keywords:{built_in:e+\" \"+a},\n    contains:[f],relevance:10}}var h=c(e),v=e.inherit(h,{\n    contains:h.contains.concat([{begin:/\\./,end:/[^A-Za-z0-9$.]/,excludeBegin:!0,\n      excludeEnd:!0,keywords:{built_in:\"slot offset length address selector\"},\n      relevance:2},{begin:/_/,end:/[^A-Za-z0-9$.]/,excludeBegin:!0,excludeEnd:!0,\n      keywords:{built_in:\"slot offset\"},relevance:2}])});return{aliases:[\"sol\"],\n    keywords:p,lexemes:C,\n    contains:[a,s,_,m,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,b,w,O,{\n      className:\"function\",lexemes:C,\n      beginKeywords:\"function modifier event constructor fallback receive error\",\n      end:/[{;]/,excludeEnd:!0,\n      contains:[y,N,w,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:/%/\n    },x(\"msg\",\"gas value data sender sig\"),x(\"block\",\"blockhash coinbase difficulty gaslimit basefee number timestamp chainid\"),x(\"tx\",\"gasprice origin\"),x(\"abi\",\"decode encode encodePacked encodeWithSelector encodeWithSignature encodeCall\"),x(\"bytes\",\"concat\"),x(\"string\",\"concat\"),f,{\n      className:\"class\",lexemes:C,beginKeywords:\"contract interface library\",end:\"{\",\n      excludeEnd:!0,illegal:/[:\"\\[\\]]/,contains:[{beginKeywords:\"is\",lexemes:C\n      },y,N,w,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{lexemes:C,\n      beginKeywords:\"struct enum\",end:\"{\",excludeEnd:!0,illegal:/[:\"\\[\\]]/,\n      contains:[y,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{\n      beginKeywords:\"import\",end:\";\",lexemes:C,keywords:\"import from as\",\n      contains:[y,a,s,_,m,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,O]},{\n      beginKeywords:\"using\",end:\";\",lexemes:C,keywords:\"using for global\",\n      contains:[y,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,O]},{className:\"meta\",\n      beginKeywords:\"pragma\",end:\";\",lexemes:C,keywords:{\n        keyword:\"pragma solidity experimental abicoder\",\n        built_in:\"ABIEncoderV2 SMTChecker v1 v2\"},\n      contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.inherit(a,{\n        className:\"meta-string\"}),e.inherit(s,{className:\"meta-string\"})]},{\n      beginKeywords:\"assembly\",end:/\\b\\B/,\n      contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.inherit(a,{\n        className:\"meta-string\"}),e.inherit(s,{className:\"meta-string\"}),e.inherit(v,{\n        begin:\"{\",end:\"}\",endsParent:!0,contains:v.contains.concat([e.inherit(v,{\n          begin:\"{\",end:\"}\",contains:v.contains.concat([\"self\"])})])})]}],illegal:/#/}}\n})());\n\n// https://cdn.jsdelivr.net/npm/highlightjs-sap-abap@0.2.0/dist/abap.min.js\nhljs.registerLanguage(\"abap\",(()=>{\"use strict\";return E=>({case_insensitive:!0,\n  aliases:[\"sap-abap\",\"abap\"],keywords:{\n    keyword:\"ABBREVIATED ABS ABSTRACT ABSTRACTFINAL ACCEPT ACCEPTING ACCORDING ACOS ACTUAL ADD|0 ADD-CORRESPONDING ADDITIONS ADJACENT AFTER|0 ALIASES ALL|0 ALLOCATE ANALYZER AND|0 APPEND APPENDING AS|0 ASCENDING DESCENDING ASIN ASSIGN ASSIGNING ATAN ATTRIBUTE AUTHORITY-CHECK AVG|0 BACK|0 BACKGOUND BEFORE BETWEEN BINARY BIT BLANK|0 BLOCK BREAK-POINT BUFFER BY|0 BYPASSING BYTE|0 BYTECHARACTER CALL|0 CASTING CEIL|0 CENTERED CHANGE CHANGING CHARACTER CHECK CHECKBOX CLASS-DATA CLASS-EVENTS CLASS-METHODS CLEANUP CLEAR|0 CLASS ENDCLASS CLIENT CLOCK|0 CLOSE|0 COL_BACKGROUND COL_HEADING COL_NORMAL COL_TOTAL COLLECT|0 COLOR|0 COLUMN COMMENT COMMIT COMMON COMMUNICATION COMPARING COMPONENT COMPONENTS COMPUTE CONCATENATE CONDENSE CONSTANTS CONTEXT CONTEXTS CONTINUE|0 CONTROL CONTROLS CONVERSION CONVERT COS COSH COUNT|0 COUNTRY COUNTY CREATE CURRENCY CURRENT CURSOR CUSTOMER-FUNCTION DATA DATABASE DATASET DATE DEALLOCATE DECIMALS DEFAULT DEFERRED DEFINE DEFINING DEFINITION DELETE DELETING DEMAND DESCENDING DESCRIBE DESTINATION DIALOG DIRECTORY DISTANCE DISTINCT DIVIDE DIVIDE-CORRESPONDING DUPLICATE DUPLICATES DURING DYNAMIC EDIT EDITOR-CALL ELSE ELSEIF ENCODING ENDING ENDON ENTRIES ERRORS EVENT EVENTS EXCEPTION EXCEPTIONS EXCEPTION-TABLE EXCLUDE EXCLUDING EXIT EXIT-COMMAND EXPORT EXPORTING EXTENDED EXTENSION EXTRACT FETCH FIELD FIELD-GROUPS FIELDSNO FIELD-SYMBOLS FILTER FINAL FIND|0 FIRST FLOOR FOR|0 FORMAT FORWARDBACKWARD FOUND FRAC FRAME FREE|0 FRIENDS FROM FUNCTION-POOL GET|0 GIVING GROUP HANDLER HASHED HAVING HEADER HEADING HELP-ID HIDE|0 HIGHLOW HOLD|0 HOTSPOT ICON IGNORING IMMEDIATELY IMPLEMENTATION IMPORT IMPORTING IN INCLUDE|0 INCREMENT INDEX|0 INDEX-LINE INHERITING INIT INITIAL INITIALIZATION INNER INNERLEFT INSERT INSTANCES INTENSIFIED INTERFACES INTERVALS INTO INVERTED-DATE IS|0 ITAB JOIN KEEPING KEY|0 KEYS KIND LANGUAGE LAST|0 LEADING LEAVE LEFT LEFT-JUSTIFIED LEFTRIGHT LEFTRIGHTCIRCULAR LEGACY LENGTH LIKE LINE LINE-COUNT LINES LINE-SELECTION LINE-SIZE LIST LIST-PROCESSING LOAD LOAD-OF-PROGRAM LOCAL LOCALE LOG LOG10 LOWER MARGIN MARK MASK MATCH MAX MAXIMUM MEMORY|0 MESSAGE MESSAGE-ID MESSAGES METHODS MIN MOD MODE MODEIN MODIF MODIFIER MODIFY MOVE MOVE-CORRESPONDING MULTIPLY MULTIPLY-CORRESPONDING NEW|0 NEW-LINE NEW-PAGE NEXT|0 NODES NODETABLE NO-DISPLAY NO-GAP NO-GAPS NO-HEADINGWITH-HEADING NO-SCROLLING NO-SCROLLINGSCROLLING NOT|0 NO-TITLE WITH-TITLE NO-ZERO NP NS NUMBER OBJECT|0 OBLIGATORY OCCURENCE OCCURENCES OCCURS OF|0 OFF|0 OFFSET ON|0 ONLY|0 OPEN OPTION OPTIONAL OR|0 ORDER OTHERS|0 OUTER OUTPUT-LENGTH OVERLAY PACK PACKAGE PAGE PAGELAST PAGEOF PAGEPAGE PAGES PARAMETER PARAMETERS PARAMETER-TABLE PART PERFORM PERFORMING PFN PF-STATUS PLACES POS_HIGH POS_LOW POSITION POSITIONS PRIMARY PRINT PRINT-CONTROL PRIVATE PROCESS PROGRAM PROPERTY PROTECTED PUBLIC PUSHBUTTON PUT QUICKINFO RADIOBUTTON RAISE|0 RAISING RANGE RANGES READ RECEIVE RECEIVING REDEFINITION REF REFERENCE REFRESH REJECT RENAMING REPLACE REPLACEMENT REPORT RESERVE RESET RESOLUTION RESULTS RETURN|0 RETURNING RIGHT RIGHT-JUSTIFIED ROLLBACK ROWS RUN SCAN SCREEN SCREEN-GROUP1 SCREEN-GROUP2 SCREEN-GROUP3 SCREEN-GROUP4 SCREEN-GROUP5 SCREEN-INPUT SCREEN-INTENSIFIED SCROLL SCROLL-BOUNDARY SEARCH SECTION SELECT SELECTION SELECTIONS SELECTION-SCREEN SELECTION-SET SELECTION-TABLE SELECT-OPTIONS SEND|0 SEPARATED SET|0 SHARED SHIFT SIGN SIN SINGLE SINGLEDISTINCT SINH SIZE|0 SKIP SORT|0 SORTABLE SPECIFIED SPLIT SQL|0 SQRT STABLE STAMP STANDARD|0 START|0 STARTING STATICS STEP-LOOP STOP STRLEN STRUCTURE|0 SUBMIT SUBTRACT SUBTRACT-CORRESPONDING SUFFIX SUM SUPPLY SUPPRESS SYMBOLS SYSTEM-EXCEPTIONS TABLE|0 TABLENAME TABLES TABLEVIEW TAN TANH TASK TEXT THEN|0 TIME|0 TIMES TITLE TITLEBAR TO TOPIC TOP-OF-PAGE TRAILING TRANSACTION TRANSFER TRANSLATE TRUNC TYPE TYPELIKE TYPE-POOL TYPE-POOLS TYPES ULINE UNION UNIQUE UNIT UNTIL|0 UP|0 UPDATE|0 UPPER UPPERLOWER USER-COMMAND USING VALUE|0 VALUES VARY VARYING VERSION VIA WAIT WHEN WHERE WINDOW WITH|0 WORK|0 WRITE|0 XSTRLEN ZONECA CN CO CP CS EQ GE GT LE LT NA NESTART-OF-SELECTION START-OF-PAGE END-OF-PAGE END-OF-SELECTION AT ENDAT\",\n    literal:\"abap_true abap_false\",\n    built_in:\"DO FORM IF LOOP MODULE START-OF_FILE DEFINE WHILE BEGIN ENDDO ENDFORM|10 ENDIF ENDLOOP ENDMODULE END-OF_FILE END-OF-DEFINITION ENDWHILE END METHOD ENDMETHOD|10 CHAIN ENDCHAIN CASE ENDCASE FUNCTION ENDFUNCTION ELSEIF ELSE TRY ENDTRY|10 CATCH \"\n  },contains:[E.APOS_STRING_MODE,E.NUMBER_MODE,{className:\"comment\",begin:\"^[*]\",\n    relevance:0,end:\"\\n\"},{className:\"comment\",begin:'\\b*\"',relevance:0,end:\"\\n\"}]})\n})());\n\n// https://github.com/highlightjs/highlightjs-hlsl/blob/master/dist/hlsl.min.js\nhljs.registerLanguage(\"hlsl\",(()=>{\"use strict\";const e={className:\"number\",\n  begin:\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?([hHfFlL]?)|\\\\.\\\\d+)([eE][-+]?\\\\d+)?([hHfFlL]?))\",\n  relevance:0};return r=>{\n  let t=[\"\",\"1\",\"2\",\"3\",\"4\",\"1x1\",\"1x2\",\"1x3\",\"1x4\",\"2x1\",\"2x2\",\"2x3\",\"2x4\",\"3x1\",\"3x2\",\"3x3\",\"3x4\",\"4x1\",\"4x2\",\"4x3\",\"4x4\"],a=[]\n  ;for(let e of\"bool double float half int uint min16float min10float min16int min12int min16uint\".split(\" \"))for(let r of t)a.push(e+r)\n  ;let s=\"SV_Coverage SV_Depth SV_DispatchThreadID SV_DomainLocation SV_GroupID SV_GroupIndex SV_GroupThreadID SV_GSInstanceID SV_InnerCoverage SV_InsideTessFactor SV_InstanceID SV_IsFrontFace SV_OutputControlPointID SV_Position SV_PrimitiveID SV_RenderTargetArrayIndex SV_SampleIndex SV_StencilRef SV_TessFactor SV_VertexID SV_ViewportArrayIndex, SV_ShadingRate\",o=\"BINORMAL BLENDINDICES BLENDWEIGHT COLOR NORMAL POSITION PSIZE TANGENT TEXCOORD TESSFACTOR DEPTH SV_ClipDistance SV_CullDistance SV_DepthGreaterEqual SV_DepthLessEqual SV_Target SV_CLIPDISTANCE SV_CULLDISTANCE SV_DEPTHGREATEREQUAL SV_DEPTHLESSEQUAL SV_TARGET\",n=o.split(\" \")\n  ;for(let e of o.split(\" \"))for(let r of Array(16).keys())n.push(e+r.toString())\n  ;return{name:\"HLSL\",keywords:{\n      keyword:\"AppendStructuredBuffer asm asm_fragment BlendState break Buffer ByteAddressBuffer case cbuffer centroid class column_major compile compile_fragment CompileShader const continue ComputeShader ConsumeStructuredBuffer default DepthStencilState DepthStencilView discard do DomainShader dword else export extern false for fxgroup GeometryShader groupshared Hullshader if in inline inout InputPatch interface line lineadj linear LineStream matrix namespace nointerpolation noperspective NULL out OutputPatch packoffset pass pixelfragment PixelShader point PointStream precise RasterizerState RenderTargetView return register row_major RWBuffer RWByteAddressBuffer RWStructuredBuffer RWTexture1D RWTexture1DArray RWTexture2D RWTexture2DArray RWTexture3D sample sampler SamplerState SamplerComparisonState shared snorm stateblock stateblock_state static string struct switch StructuredBuffer tbuffer technique technique10 technique11 texture Texture1D Texture1DArray Texture2D Texture2DArray Texture2DMS Texture2DMSArray Texture3D TextureCube TextureCubeArray true typedef triangle triangleadj TriangleStream uint uniform unorm unsigned vector vertexfragment VertexShader void volatile while\",\n      type:a.join(\" \")+\" Buffer vector matrix sampler SamplerState PixelShader VertexShader texture Texture1D Texture1DArray Texture2D Texture2DArray Texture2DMS Texture2DMSArray Texture3D TextureCube TextureCubeArray struct typedef\",\n      built_in:\"POSITIONT FOG PSIZE VFACE VPOS \"+n.join(\" \")+\" \"+s+\" \"+s.toUpperCase()+\" abort abs acos all AllMemoryBarrier AllMemoryBarrierWithGroupSync any asdouble asfloat asin asint asuint atan atan2 ceil CheckAccessFullyMapped clamp clip cos cosh countbits cross D3DCOLORtoUBYTE4 ddx ddx_coarse ddx_fine ddy ddy_coarse ddy_fine degrees determinant DeviceMemoryBarrier DeviceMemoryBarrierWithGroupSync distance dot dst errorf EvaluateAttributeAtCentroid EvaluateAttributeAtSample EvaluateAttributeSnapped exp exp2 f16tof32 f32tof16 faceforward firstbithigh firstbitlow floor fma fmod frac frexp fwidth GetRenderTargetSampleCount GetRenderTargetSamplePosition GroupMemoryBarrier GroupMemoryBarrierWithGroupSync InterlockedAdd InterlockedAnd InterlockedCompareExchange InterlockedCompareStore InterlockedExchange InterlockedMax InterlockedMin InterlockedOr InterlockedXor isfinite isinf isnan ldexp length lerp lit log log10 log2 mad max min modf msad4 mul noise normalize pow printf Process2DQuadTessFactorsAvg Process2DQuadTessFactorsMax Process2DQuadTessFactorsMin ProcessIsolineTessFactors ProcessQuadTessFactorsAvg ProcessQuadTessFactorsMax ProcessQuadTessFactorsMin ProcessTriTessFactorsAvg ProcessTriTessFactorsMax ProcessTriTessFactorsMin radians rcp reflect refract reversebits round rsqrt saturate sign sin sincos sinh smoothstep sqrt step tan tanh tex1D tex1Dbias tex1Dgrad tex1Dlod tex1Dproj tex2D tex2Dbias tex2Dgrad tex2Dlod tex2Dproj tex3D tex3Dbias tex3Dgrad tex3Dlod tex3Dproj texCUBE texCUBEbias texCUBEgrad texCUBElod texCUBEproj transpose trunc\",\n      literal:\"true false\"},illegal:'\"',\n    contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,e,{className:\"meta\",\n      begin:\"#\",end:\"$\"}]}}})());\n\n// https://github.com/highlightjs/highlightjs-gdscript\nhljs.registerLanguage(\"gdscript\",function(){\"use strict\";var e=e||{};function r(e){return{aliases:[\"godot\",\"gdscript\"],keywords:{keyword:\"and in not or self void as assert breakpoint class class_name extends is func setget signal tool yield const enum export onready static var break continue if elif else for pass return match while remote sync master puppet remotesync mastersync puppetsync\",built_in:\"Color8 ColorN abs acos asin atan atan2 bytes2var cartesian2polar ceil char clamp convert cos cosh db2linear decimals dectime deg2rad dict2inst ease exp floor fmod fposmod funcref get_stack hash inst2dict instance_from_id inverse_lerp is_equal_approx is_inf is_instance_valid is_nan is_zero_approx len lerp lerp_angle linear2db load log max min move_toward nearest_po2 ord parse_json polar2cartesian posmod pow preload print_stack push_error push_warning rad2deg rand_range rand_seed randf randi randomize range_lerp round seed sign sin sinh smoothstep sqrt step_decimals stepify str str2var tan tanh to_json type_exists typeof validate_json var2bytes var2str weakref wrapf wrapi bool int float String NodePath Vector2 Rect2 Transform2D Vector3 Rect3 Plane Quat Basis Transform Color RID Object NodePath Dictionary Array PoolByteArray PoolIntArray PoolRealArray PoolStringArray PoolVector2Array PoolVector3Array PoolColorArray\",literal:\"true false null\"},contains:[e.NUMBER_MODE,e.HASH_COMMENT_MODE,{className:\"comment\",begin:/\"\"\"/,end:/\"\"\"/},e.QUOTE_STRING_MODE,{variants:[{className:\"function\",beginKeywords:\"func\"},{className:\"class\",beginKeywords:\"class\"}],end:/:/,contains:[e.UNDERSCORE_TITLE_MODE]}]}}return e.exports=function(e){e.registerLanguage(\"gdscript\",r)},e.exports.definer=r,e.exports.definer||e.exports}());\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/i18n/en_US.js",
    "content": "window.VditorI18n = {\n    alignCenter: \"Center\",\n    alignLeft: \"Left\",\n    alignRight: \"Right\",\n    alternateText: \"Alternate text\",\n    bold: \"Bold\",\n    both: \"editor & preview\",\n    cancelUpload: \"Cancel upload\",\n    check: \"Task List\",\n    close: \"Close\",\n    code: \"Code Block\",\n    \"code-theme\": \"Code Block Theme Preview\",\n    column: \"Column\",\n    comment: \"Comment\",\n    confirm: \"Confirm\",\n    \"content-theme\": \"Content Theme Preview\",\n    copied: \"Copied\",\n    copy: \"Copy\",\n    \"delete-column\": \"Delete Row\",\n    \"delete-row\": \"Delete Column\",\n    devtools: \"DevTools\",\n    down: \"Down\",\n    downloadTip: \"The browser does not support the download function\",\n    edit: \"Edit\",\n    \"edit-mode\": \"Toggle Edit Mode\",\n    emoji: \"Emoji\",\n    export: \"Export\",\n    fileTypeError: \"file type is error\",\n    footnoteRef: \"Footnote Ref\",\n    fullscreen: \"Toggle Fullscreen\",\n    generate: \"Generating\",\n    headings: \"Headings\",\n    heading1: \"Heading 1\",\n    heading2: \"Heading 2\",\n    heading3: \"Heading 3\",\n    heading4: \"Heading 4\",\n    heading5: \"Heading 5\",\n    heading6: \"Heading 6\",\n    help: \"Help\",\n    imageURL: \"image URL\",\n    indent: \"Indent\",\n    info: \"Info\",\n    \"inline-code\": \"Inline Code\",\n    insert: \"Insert\",\n    \"insert-after\": \"Insert line after\",\n    \"insert-before\": \"Insert line before\",\n    insertColumnLeft: \"Insert 1 left\",\n    insertColumnRight: \"Insert 1 right\",\n    insertRowAbove: \"Insert 1 above\",\n    insertRowBelow: \"Insert 1 below\",\n    instantRendering: \"Instant Rendering\",\n    italic: \"Italic\",\n    language: \"Language\",\n    line: \"Line\",\n    link: \"Link\",\n    linkRef: \"Link Ref\",\n    list: \"List\",\n    more: \"More\",\n    nameEmpty: \"Name is empty\",\n    \"ordered-list\": \"Order List\",\n    outdent: \"Outdent\",\n    outline: \"Outline\",\n    over: \"over\",\n    performanceTip: \"Real-time preview requires ${x}ms, you can close it\",\n    preview: \"Preview\",\n    quote: \"Quote\",\n    record: \"Start Record/End Record\",\n    \"record-tip\": \"The device does not support recording\",\n    recording: \"recording...\",\n    redo: \"Redo\",\n    remove: \"Remove\",\n    row: \"Row\",\n    spin: \"Spin\",\n    splitView: \"Split View\",\n    strike: \"Strike\",\n    table: \"Table\",\n    textIsNotEmpty: \"text(no empty)\",\n    title: \"Title\",\n    tooltipText: \"Tooltip text\",\n    undo: \"Undo\",\n    up: \"Up\",\n    update: \"Update\",\n    upload: \"Upload image or file\",\n    uploadError: \"upload error\",\n    uploading: \"uploading...\",\n    wysiwyg: \"WYSIWYG\",\n};\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/i18n/fr_FR.js",
    "content": "window.VditorI18n = {\n    alignCenter: \"Centré\",\n    alignLeft: \"Gauche\",\n    alignRight: \"Droite\",\n    alternateText: \"Texte de remplacement\",\n    bold: \"Gras\",\n    both: \"éditeur & prévisualisation\",\n    cancelUpload: \"Annuler le téléchargement\",\n    check: \"Liste de tâches\",\n    close: \"Fermer\",\n    code: \"Bloc de code\",\n    \"code-theme\": \"Thème pour le bloc de code\",\n    column: \"Colonne\",\n    comment: \"Commentaire\",\n    confirm: \"Confirmez\",\n    \"content-theme\": \"Thème pour le contenu\",\n    copied: \"Copié\",\n    copy: \"Copier\",\n    \"delete-column\": \"Enlever ligne\",\n    \"delete-row\": \"Enlever colonne\",\n    devtools: \"Outils de dev\",\n    down: \"Bas\",\n    downloadTip: \"Le navigateur ne permet pas le téléversement\",\n    edit: \"Editer\",\n    \"edit-mode\": \"Changer le mode d'édition\",\n    emoji: \"Emoji\",\n    export: \"Export\",\n    fileTypeError: \"erreur de type de fichier\",\n    footnoteRef: \"Ref. notes de pied de page\",\n    fullscreen: \"Bascule en plein écran\",\n    generate: \"Création\",\n    headings: \"Titres\",\n    heading1: \"Titre 1\",\n    heading2: \"Titre 2\",\n    heading3: \"Titre 3\",\n    heading4: \"Titre 4\",\n    heading5: \"Titre 5\",\n    heading6: \"Titre 6\",\n    help: \"Aide\",\n    imageURL: \"URL de l'image\",\n    indent: \"Augmenter le retrait\",\n    info: \"Info\",\n    \"inline-code\": \"Code en ligne\",\n    insert: \"Insérer\",\n    \"insert-after\": \"Insérer une ligne après\",\n    \"insert-before\": \"Insérer une ligne avant\",\n    insertColumnLeft: \"Insérer col. à gauche\",\n    insertColumnRight: \"Insérer col. à droite\",\n    insertRowAbove: \"Insérer 1 au dessus\",\n    insertRowBelow: \"Insérer 1 en dessous\",\n    instantRendering: \"Aperçu instantané\",\n    italic: \"Italique\",\n    language: \"Langage\",\n    line: \"Ligne\",\n    link: \"Lien\",\n    linkRef: \"Réf. Lien\",\n    list: \"Liste\",\n    more: \"Plus\",\n    nameEmpty: \"Nom est vide\",\n    \"ordered-list\": \"Liste ordonnée\",\n    outdent: \"Réduire le retrait\",\n    outline: \"Table des matières\",\n    over: \"survol\",\n    performanceTip:\n        \"La prévisualisation temps réel prend ${x}ms, vous pouvez fermer\",\n    preview: \"Prévisualisation\",\n    quote: \"Citation\",\n    record: \"Démarrer/Stopper l'enregistrement\",\n    \"record-tip\": \"L'appareil ne supporte pas l'enregistrement\",\n    recording: \"Enregistrement en cours...\",\n    redo: \"Rétablir\",\n    remove: \"Enlever\",\n    row: \"Ligne\",\n    spin: \"Rotation\",\n    splitView: \"Vue scindée\",\n    strike: \"Barré\",\n    table: \"Table\",\n    textIsNotEmpty: \"texte(pas vide)\",\n    title: \"Titre\",\n    tooltipText: \"Texte au survol\",\n    undo: \"Annuler\",\n    up: \"Haut\",\n    update: \"Mettre à jour\",\n    upload: \"Téléverser image ou fichier\",\n    uploadError: \"erreur de téléversement\",\n    uploading: \"Téléversement en cours...\",\n    wysiwyg: \"WYSIWYG\",\n};\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/i18n/ja_JP.js",
    "content": "window.VditorI18n = {\n    alignCenter: \"中央\",\n    alignLeft: \"左側\",\n    alignRight: \"右側\",\n    alternateText: \"イメージタグ\",\n    bold: \"太く\",\n    both: \"エディター & プレビュー\",\n    cancelUpload: \"アップロードをキャンセル\",\n    check: \"チェックリスト\",\n    close: \"閉じる\",\n    code: \"コードブロック挿入\",\n    \"code-theme\": \"コードブロックテーマ\",\n    column: \"行列\",\n    comment: \"コメント\",\n    confirm: \"確認\",\n    \"content-theme\": \"コンテンツテーマ\",\n    copied: \"コピー完了\",\n    copy: \"コピー\",\n    \"delete-column\": \"列 消去\",\n    \"delete-row\": \"行 消去\",\n    devtools: \"開発ツール\",\n    down: \"下げる\",\n    downloadTip: \"ブラウザがダウンロード機能をサポートしていません。\",\n    edit: \"修正\",\n    \"edit-mode\": \"編集モード\",\n    emoji: \"絵文字\",\n    export: \"エクスポート\",\n    fileTypeError: \"サポートしていません。\",\n    footnoteRef: \"脚注参照\",\n    fullscreen: \"フルスクリーン\",\n    generate: \"作成する\",\n    headings: \"見出しの大きさ\",\n    heading1: \"見出し1\",\n    heading2: \"見出し2\",\n    heading3: \"見出し3\",\n    heading4: \"見出し4\",\n    heading5: \"見出し5\",\n    heading6: \"見出し6\",\n    help: \"ヘルプ\",\n    imageURL: \"イメージ URL\",\n    indent: \"字下げ\",\n    info: \"情報\",\n    \"inline-code\": \"インラインコード\",\n    insert: \"挿入\",\n    \"insert-after\": \"ブロックの後ろに入力\",\n    \"insert-before\": \"ブロックの前に入力\",\n    insertColumnLeft: \"左側に列を挿入\",\n    insertColumnRight: \"右側に列を挿入\",\n    insertRowAbove: \"上に行を挿入\",\n    insertRowBelow: \"下に行を挿入\",\n    instantRendering: \"インスタントレンダリング\",\n    italic: \"斜体\",\n    language: \"言語\",\n    line: \"段落分割\",\n    link: \"リンク\",\n    linkRef: \"リンク参照\",\n    list: \"リスト\",\n    more: \"詳しく見る\",\n    nameEmpty: \"名前が入力されていません。\",\n    \"ordered-list\": \"順序のあるリスト\",\n    outdent: \"ぶら下げインデント\",\n    outline: \"概要\",\n    over: \"オーバー\",\n    performanceTip:\n        \"リアルタイムプレビューには、${x}msが必要でエディター/プレビューボタンをクリックして閉じる事が出来ます。\",\n    preview: \"プレビュー\",\n    quote: \"引用段落\",\n    record: \"録音開始/録音終了\",\n    \"record-tip\": \"録音がサポートされていません。\",\n    recording: \"録音中...\",\n    redo: \"戻る\",\n    remove: \"消去\",\n    row: \"列\",\n    spin: \"スピン\",\n    splitView: \"マークダウン\",\n    strike: \"取り消し線\",\n    table: \"表 挿入\",\n    textIsNotEmpty: \"テキスト(空白は不可)\",\n    title: \"題名\",\n    tooltipText: \"ツールチップ\",\n    undo: \"取り消す\",\n    up: \"上げる\",\n    update: \"アップデート\",\n    upload: \"イメージをアップロードする\",\n    uploadError: \"アップロード失敗\",\n    uploading: \"アップロード中\",\n    wysiwyg: \"ウィジウィグ\",\n};\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/i18n/ko_KR.js",
    "content": "window.VditorI18n = {\n    alignCenter: \"가운데\",\n    alignLeft: \"왼쪽\",\n    alignRight: \"오른쪽\",\n    alternateText: \"이미지 태그\",\n    bold: \"굵게\",\n    both: \"에디터 & 미리보기\",\n    cancelUpload: \"업로드 취소\",\n    check: \"체크박스\",\n    close: \"닫기\",\n    code: \"코드블럭삽입\",\n    \"code-theme\": \"코드블럭테마\",\n    column: \"행\",\n    comment: \"코멘트\",\n    confirm: \"확인\",\n    \"content-theme\": \"컨텐츠테마\",\n    copied: \"복사완료\",\n    copy: \"복사\",\n    \"delete-column\": \"열 삭제\",\n    \"delete-row\": \"행 삭제\",\n    devtools: \"개발툴\",\n    down: \"다운\",\n    downloadTip: \"브라우저가 다운로드 기능을 지원하지 않습니다\",\n    edit: \"수정\",\n    \"edit-mode\": \"편집모드\",\n    emoji: \"이모지\",\n    export: \"내보내기\",\n    fileTypeError: \"지원하지않습니다.\",\n    footnoteRef: \"각주참조\",\n    fullscreen: \"전체화면\",\n    generate: \"생성\",\n    headings: \"제목크기\",\n    heading1: \"첫 번째 수준 제목\",\n    heading2: \"두 번째 수준 제목\",\n    heading3: \"3 단계 제목\",\n    heading4: \"제목 4\",\n    heading5: \"5 단계 제목\",\n    heading6: \"6 단계 제목\",\n    help: \"도움말\",\n    imageURL: \"이미지 URL\",\n    indent: \"들여쓰기\",\n    info: \"정보\",\n    \"inline-code\": \"인라인코드\",\n    insert: \"삽입\",\n    \"insert-after\": \"블락 뒤로 입력\",\n    \"insert-before\": \"블락 앞으로 입력\",\n    insertColumnLeft: \"왼쪽에 열 삽입\",\n    insertColumnRight: \"오른쪽에 열 삽입\",\n    insertRowAbove: \"위에 행 삽입\",\n    insertRowBelow: \"아래에 행 삽입\",\n    instantRendering: \"타이포라\",\n    italic: \"기울임꼴\",\n    language: \"언어\",\n    line: \"문단나눔\",\n    link: \"링크\",\n    linkRef: \"링크 참조\",\n    list: \"순서없는 목록\",\n    more: \"더보기\",\n    nameEmpty: \"이름이 비어있습니다.\",\n    \"ordered-list\": \"순서있는 목록\",\n    outdent: \"내어쓰기\",\n    outline: \"개요\",\n    over: \"오버\",\n    performanceTip:\n        \"실시간 미리보기에는 ${x}ms가 필요하며 에디터/미리보기 버튼을 클릭하여 닫을 수 있습니다.\",\n    preview: \"미리보기\",\n    quote: \"인용단락\",\n    record: \"녹음시작/녹음종료\",\n    \"record-tip\": \"녹음을 지원하지 않습니다.\",\n    recording: \"녹음중...\",\n    redo: \"되돌리기\",\n    remove: \"삭제\",\n    row: \"열\",\n    spin: \"회전\",\n    splitView: \"마크다운\",\n    strike: \"취소선\",\n    table: \"표삽입\",\n    textIsNotEmpty: \"텍스트(no empty)\",\n    title: \"표제\",\n    tooltipText: \"툴팁\",\n    undo: \"취소하기\",\n    up: \"위로\",\n    update: \"업데이트\",\n    upload: \"이미지 업로드하기\",\n    uploadError: \"업로드 실패\",\n    uploading: \"업로드중...\",\n    wysiwyg: \"위지위그\",\n};\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/i18n/pt_BR.js",
    "content": "window.VditorI18n = {\n    alignCenter: \"Centralizar\",\n    alignLeft: \"Alinhar à esquerda\",\n    alignRight: \"Alinhar à direita\",\n    alternateText: \"Texto alternativo\",\n    bold: \"Negrito\",\n    both: \"Editor e visualização\",\n    cancelUpload: \"Cancelar envio\",\n    check: \"Lista de tarefas\",\n    close: \"Fechar\",\n    code: \"Bloco de código\",\n    \"code-theme\": \"Tema de bloco de código\",\n    column: \"Coluna\",\n    comment: \"Comentário\",\n    confirm: \"Confirmar\",\n    \"content-theme\": \"Tema de conteúdo\",\n    copied: \"Copiado\",\n    copy: \"Copiar\",\n    \"delete-column\": \"Excluir coluna\",\n    \"delete-row\": \"Excluir linha\",\n    devtools: \"Ferramentas de desenvolvimento\",\n    down: \"Para baixo\",\n    downloadTip: \"O navegador não suporta a função de download\",\n    edit: \"Editar\",\n    \"edit-mode\": \"Alternar modo de edição\",\n    emoji: \"Emoji\",\n    export: \"Exportar\",\n    fileTypeError: \"Tipo de arquivo incorreto\",\n    footnoteRef: \"Referência de rodapé\",\n    fullscreen: \"Alternar tela cheia\",\n    generate: \"Gerando\",\n    headings: \"Cabeçalhos\",\n    heading1: \"Cabeçalho 1\",\n    heading2: \"Cabeçalho 2\",\n    heading3: \"Cabeçalho 3\",\n    heading4: \"Cabeçalho 4\",\n    heading5: \"Cabeçalho 5\",\n    heading6: \"Cabeçalho 6\",\n    help: \"Ajuda\",\n    imageURL: \"URL da imagem\",\n    indent: \"Recuar\",\n    info: \"Informação\",\n    \"inline-code\": \"Código em linha\",\n    insert: \"Inserir\",\n    \"insert-after\": \"Inserir linha depois\",\n    \"insert-before\": \"Inserir linha antes\",\n    insertColumnLeft: \"Inserir 1 à esquerda\",\n    insertColumnRight: \"Inserir 1 à direita\",\n    insertRowAbove: \"Inserir 1 acima\",\n    insertRowBelow: \"Inserir 1 abaixo\",\n    instantRendering: \"Renderização instantânea\",\n    italic: \"Itálico\",\n    language: \"Idioma\",\n    line: \"Linha\",\n    link: \"Link\",\n    linkRef: \"Referência de link\",\n    list: \"Lista\",\n    more: \"Mais\",\n    nameEmpty: \"Nome está vazio\",\n    \"ordered-list\": \"Lista ordenada\",\n    outdent: \"Recuar para fora\",\n    outline: \"Esboço\",\n    over: \"sobre\",\n    performanceTip:\n        \"A visualização em tempo real requer ${x}ms, você pode fechá-la\",\n    preview: \"Visualização\",\n    quote: \"Citação\",\n    record: \"Iniciar gravação/Encerrar gravação\",\n    \"record-tip\": \"O dispositivo não suporta gravação\",\n    recording: \"gravando...\",\n    redo: \"Refazer\",\n    remove: \"Remover\",\n    row: \"Linha\",\n    spin: \"Girar\",\n    splitView: \"Visão dividida\",\n    strike: \"Riscado\",\n    table: \"Tabela\",\n    textIsNotEmpty: \"Texto (não vazio)\",\n    title: \"Título\",\n    tooltipText: \"Texto da dica de ferramenta\",\n    undo: \"Desfazer\",\n    up: \"Para cima\",\n    update: \"Atualizar\",\n    upload: \"Enviar imagem ou arquivo\",\n    uploadError: \"Erro no envio\",\n    uploading: \"Enviando...\",\n    wysiwyg: \"WYSIWYG\",\n};\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/i18n/ru_RU.js",
    "content": "window.VditorI18n = {\n    alignCenter: \"Выровнять по центру\",\n    alignLeft: \"Выровнять по левому краю\",\n    alignRight: \"Выровнять по правому краю\",\n    alternateText: \"Альтернативный текст\",\n    bold: \"Полужирный текст\",\n    both: \"Редактор с предпросмотром\",\n    cancelUpload: \"Отменить загрузку\",\n    check: \"Список задач\",\n    close: \"Закрыть\",\n    code: \"Блок кода\",\n    \"code-theme\": \"Тема отображения блока кода\",\n    column: \"Количество столбцов\",\n    comment: \"Комментарий\",\n    confirm: \"Подтвердить\",\n    \"content-theme\": \"Тема отображения контента\",\n    copied: \"Скопировано\",\n    copy: \"Копировать\",\n    \"delete-column\": \"Удалить столбец\",\n    \"delete-row\": \"Удалить строку\",\n    devtools: \"Граф документа\",\n    down: \"Переместить вниз\",\n    downloadTip: \"Браузер не поддерживает функции загрузки\",\n    edit: \"Редактирование\",\n    \"edit-mode\": \"Переключить режим редактирования\",\n    emoji: \"Смайлы\",\n    export: \"Экспорт\",\n    fileTypeError: \"Ошибка типа файла\",\n    footnoteRef: \"Сноска\",\n    fullscreen: \"Переключиться на полный экран\",\n    generate: \"Генерация\",\n    headings: \"Заголовки\",\n    heading1: \"Заголовок 1 уровня\",\n    heading2: \"Заголовок 2 уровня\",\n    heading3: \"Заголовок 3 уровня\",\n    heading4: \"Заголовок 4 уровня\",\n    heading5: \"Заголовок 5 уровня\",\n    heading6: \"Заголовок 6 уровня\",\n    help: \"Помощь\",\n    imageURL: \"Ссылка на картинку\",\n    indent: \"Отступ\",\n    info: \"Информация о редакторе\",\n    \"inline-code\": \"Встроенный код \",\n    insert: \"Вставить\",\n    \"insert-after\": \"Вставить линию после этой строки\",\n    \"insert-before\": \"Вставить линию перед этой строкой\",\n    insertColumnLeft: \"Вставить столбец слева\",\n    insertColumnRight: \"Вставить столбец справа\",\n    insertRowAbove: \"Вставить строку сверху\",\n    insertRowBelow: \"Вставить строку снизу\",\n    instantRendering: \"Мгновенный рендеринг\",\n    italic: \"Курсив\",\n    language: \"Синтаксис\",\n    line: \"Линия\",\n    link: \"Ссылка\",\n    linkRef: \"Вставить ссылку\",\n    list: \"Список\",\n    more: \"Дополнительно\",\n    nameEmpty: \"Имя пустое\",\n    \"ordered-list\": \"Упорядоченный список\",\n    outdent: \"Выступ\",\n    outline: \"Содержание\",\n    over: \"Над\",\n    performanceTip:\n        \"Предварительный просмотр в реальном времени требует ${x}мс, вы можете закрыть его\",\n    preview: \"Предпросмотр\",\n    quote: \"Цитата\",\n    record: \"Начать запись/Завершить запись\",\n    \"record-tip\": \"Устройство не поддерживает запись\",\n    recording: \"Запись...\",\n    redo: \"Вернуть\",\n    remove: \"Удалить\",\n    row: \"Количество строк\",\n    spin: \"Прокрутка\",\n    splitView: \"Разделенный просмотр\",\n    strike: \"Зачеркнутый текст\",\n    table: \"Таблица\",\n    textIsNotEmpty: \"Текст (непустой)\",\n    title: \"Заголовок\",\n    tooltipText: \"Текст всплывающей подсказки\",\n    undo: \"Отменить\",\n    up: \"Переместить вверх\",\n    update: \"Обновить\",\n    upload: \"Загрузить изображение или файл\",\n    uploadError: \"Ошибка загрузки\",\n    uploading: \"Загрузка...\",\n    wysiwyg: \"Редактор WYSIWYG\",\n};\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/i18n/sv_SE.js",
    "content": "﻿window.VditorI18n = {\n    alignCenter: \"Centrera\",\n    alignLeft: \"Vänsterställ\",\n    alignRight: \"Högerställ\",\n    alternateText: \"Alternativ text\",\n    bold: \"Fet\",\n    both: \"editera & granska\",\n    cancelUpload: \"Avbryt uppladdning\",\n    check: \"Att göra lista\",\n    close: \"Stäng\",\n    code: \"Kodblock\",\n    \"code-theme\": \"Granska tema för kodblock\",\n    column: \"Kolumn\",\n    comment: \"Kommentera\",\n    confirm: \"Bekräfta\",\n    \"content-theme\": \"Granska tema för innehåll\",\n    copied: \"Kopierad\",\n    copy: \"Kopiera\",\n    \"delete-column\": \"Radera Kolumn\",\n    \"delete-row\": \"Radera Rad\",\n    devtools: \"Utveckingsverktyg\",\n    down: \"Ner\",\n    downloadTip: \"Webläsaren kan ej hantera funktionen nedladdning\",\n    edit: \"Redigera\",\n    \"edit-mode\": \"Skfta Redigeringsläge\",\n    emoji: \"Emoji\",\n    export: \"Exportera\",\n    fileTypeError: \"Fel filtyp\",\n    footnoteRef: \"Fotnotreferens\",\n    fullscreen: \"Skifta fullskärmsläge\",\n    generate: \"Genererar\",\n    headings: \"Rubriker\",\n    heading1: \"Rubriknivå 1\",\n    heading2: \"Rubriknivå 2\",\n    heading3: \"Rubriknivå 3\",\n    heading4: \"Rubriknivå 4\",\n    heading5: \"Rubriknivå 5\",\n    heading6: \"Rubriknivå 6\",\n    help: \"Hjälp\",\n    imageURL: \"Bildlänk (URL)\",\n    indent: \"Dra in\",\n    info: \"Info\",\n    \"inline-code\": \"Dra in kod\",\n    insert: \"Infoga\",\n    \"insert-after\": \"Infoga rad efter\",\n    \"insert-before\": \"Infoga rad innan\",\n    insertColumnLeft: \"Infoga kolumn till vänster\",\n    insertColumnRight: \"Infoga kolumn till höger\",\n    insertRowAbove: \"Infoga rad ovan\",\n    insertRowBelow: \"Infoga rad under\",\n    instantRendering: \"Omedelbar Rendering\",\n    italic: \"Kursiv\",\n    language: \"Språk\",\n    line: \"Linje\",\n    link: \"Länk\",\n    linkRef: \"Länk Ref\",\n    list: \"Lista\",\n    more: \"Mer\",\n    nameEmpty: \"Namn saknas\",\n    \"ordered-list\": \"Ordnad Lista\",\n    outdent: \"Dra ut\",\n    outline: \"Disponera\",\n    over: \"över\",\n    performanceTip: \"Granskning i realtid kräver ${x}ms, du kan stänga det\",\n    preview: \"Granska\",\n    quote: \"Citera\",\n    record: \"Börja inspelning/Avsluta inspelning\",\n    \"record-tip\": \"Enheten stödjer inte inspelning\",\n    recording: \"spelar in...\",\n    redo: \"Gör om\",\n    remove: \"Ta bort\",\n    row: \"Rad\",\n    spin: \"Snurra\",\n    splitView: \"Splittad Vy\",\n    strike: \"Genomstruket\",\n    table: \"Tabell\",\n    textIsNotEmpty: \"text(ej tom)\",\n    title: \"Titel\",\n    tooltipText: \"Tooltip text\",\n    undo: \"Ångra\",\n    up: \"Upp\",\n    update: \"Uppdatera\",\n    upload: \"Ladda upp bild eller fil\",\n    uploadError: \"uppladdningsfel\",\n    uploading: \"laddar upp...\",\n    wysiwyg: \"WYSIWYG\",\n};\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/i18n/zh_CN.js",
    "content": "window.VditorI18n = {\n    alignCenter: \"居中\",\n    alignLeft: \"居左\",\n    alignRight: \"居右\",\n    alternateText: \"替代文本\",\n    bold: \"粗体\",\n    both: \"编辑 & 预览\",\n    cancelUpload: \"取消上传\",\n    check: \"任务列表\",\n    close: \"关闭\",\n    code: \"代码块\",\n    \"code-theme\": \"代码块主题预览\",\n    column: \"列\",\n    comment: \"评论\",\n    confirm: \"确定\",\n    \"content-theme\": \"内容主题预览\",\n    copied: \"已复制\",\n    copy: \"复制\",\n    \"delete-column\": \"删除列\",\n    \"delete-row\": \"删除行\",\n    devtools: \"开发者工具\",\n    down: \"下\",\n    downloadTip: \"该浏览器不支持下载功能\",\n    edit: \"编辑\",\n    \"edit-mode\": \"切换编辑模式\",\n    emoji: \"表情\",\n    export: \"导出\",\n    fileTypeError: \"文件类型不允许上传，请压缩后再试\",\n    footnoteRef: \"脚注标识\",\n    fullscreen: \"全屏切换\",\n    generate: \"生成中\",\n    headings: \"标题\",\n    heading1: \"一级标题\",\n    heading2: \"二级标题\",\n    heading3: \"三级标题\",\n    heading4: \"四级标题\",\n    heading5: \"五级标题\",\n    heading6: \"六级标题\",\n    help: \"帮助\",\n    imageURL: \"图片地址\",\n    indent: \"列表缩进\",\n    info: \"关于\",\n    \"inline-code\": \"行内代码\",\n    insert: \"插入\",\n    \"insert-after\": \"末尾插入行\",\n    \"insert-before\": \"起始插入行\",\n    insertColumnLeft: \"在左边插入一列\",\n    insertColumnRight: \"在右边插入一列\",\n    insertRowAbove: \"在上方插入一行\",\n    insertRowBelow: \"在下方插入一行\",\n    instantRendering: \"即时渲染\",\n    italic: \"斜体\",\n    language: \"语言\",\n    line: \"分隔线\",\n    link: \"链接\",\n    linkRef: \"引用标识\",\n    list: \"无序列表\",\n    more: \"更多\",\n    nameEmpty: \"文件名不能为空\",\n    \"ordered-list\": \"有序列表\",\n    outdent: \"列表反向缩进\",\n    outline: \"大纲\",\n    over: \"超过\",\n    performanceTip: \"实时预览需 ${x}ms，可点击编辑 & 预览按钮进行关闭\",\n    preview: \"预览\",\n    quote: \"引用\",\n    record: \"开始录音/结束录音\",\n    \"record-tip\": \"该设备不支持录音功能\",\n    recording: \"录音中...\",\n    redo: \"重做\",\n    remove: \"删除\",\n    row: \"行\",\n    spin: \"旋转\",\n    splitView: \"分屏\",\n    codeView: \"代码\",\n    strike: \"删除线\",\n    table: \"表格\",\n    textIsNotEmpty: \"文本（不能为空）\",\n    title: \"标题\",\n    tooltipText: \"提示文本\",\n    undo: \"撤销\",\n    up: \"上\",\n    update: \"更新\",\n    image: \"图片\",\n    video: \"视频\",\n    upload: \"文件\",\n    uploadError: \"上传错误\",\n    uploading: \"上传中...\",\n    wysiwyg: \"预览\",\n    wysiwyg_both: \"预览\",\n    wysiwyg_editor: \"预览\",\n    sv_both: \"分屏\",\n    sv_none: \"代码\",\n    sv_editor: \"代码\",\n    echarts: \"图表\",\n    math: \"数据公式\",\n    mindmap: \"脑图\",\n    mermaid: \"流程图\",\n    \"mermaid-gantt\": \"甘特图\",\n    \"mermaid-sequence\": \"时序图\",\n};\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/i18n/zh_TW.js",
    "content": "window.VditorI18n = {\n    alignCenter: \"置中\",\n    alignLeft: \"置左\",\n    alignRight: \"置右\",\n    alternateText: \"替代文字\",\n    bold: \"粗體\",\n    both: \"編輯 & 預覽\",\n    cancelUpload: \"取消上傳\",\n    check: \"任務列表\",\n    close: \"關閉\",\n    code: \"代碼塊\",\n    \"code-theme\": \"代碼塊主題預覽\",\n    column: \"欄\",\n    comment: \"評論\",\n    confirm: \"確定\",\n    \"content-theme\": \"內容主題預覽\",\n    copied: \"已複製\",\n    copy: \"複製\",\n    \"delete-column\": \"刪除欄\",\n    \"delete-row\": \"刪除列\",\n    devtools: \"開發者工具\",\n    down: \"下\",\n    downloadTip: \"該瀏覽器不支持下載功能\",\n    edit: \"編輯\",\n    \"edit-mode\": \"切換編輯模式\",\n    emoji: \"表情\",\n    export: \"匯出\",\n    fileTypeError: \"檔案類型不允許上傳\",\n    footnoteRef: \"腳註參考\",\n    fullscreen: \"全螢幕切換\",\n    generate: \"生成中\",\n    headings: \"標題\",\n    heading1: \"一級標題\",\n    heading2: \"二級標題\",\n    heading3: \"三級標題\",\n    heading4: \"四級標題\",\n    heading5: \"五級標題\",\n    heading6: \"六級標題\",\n    help: \"幫助\",\n    imageURL: \"圖片位址\",\n    indent: \"列表縮排\",\n    info: \"關於\",\n    \"inline-code\": \"行內代碼\",\n    insert: \"插入\",\n    \"insert-after\": \"末尾插入列\",\n    \"insert-before\": \"起始插入列\",\n    insertColumnLeft: \"在左邊插入一欄\",\n    insertColumnRight: \"在右邊插入一欄\",\n    insertRowAbove: \"在上方插入一行\",\n    insertRowBelow: \"在下方插入一行\",\n    instantRendering: \"即時渲染\",\n    italic: \"斜體\",\n    language: \"語言\",\n    line: \"分隔線\",\n    link: \"連結\",\n    linkRef: \"連結參考\",\n    list: \"無序列表\",\n    more: \"更多\",\n    nameEmpty: \"文件名不能為空\",\n    \"ordered-list\": \"有序列表\",\n    outdent: \"列表反向縮排\",\n    outline: \"大綱\",\n    over: \"超過\",\n    performanceTip: \"即時預覽需 ${x}ms，可點擊編輯 & 預覽按鈕進行關閉\",\n    preview: \"預覽\",\n    quote: \"引用\",\n    record: \"開始錄音/結束錄音\",\n    \"record-tip\": \"該設備不支持錄音功能\",\n    recording: \"錄音中...\",\n    redo: \"重做\",\n    remove: \"刪除\",\n    row: \"列\",\n    spin: \"旋轉\",\n    splitView: \"分割預覽\",\n    strike: \"刪除線\",\n    table: \"表格\",\n    textIsNotEmpty: \"文字（不能為空）\",\n    title: \"標題\",\n    tooltipText: \"提示文字\",\n    undo: \"撤銷\",\n    up: \"上\",\n    update: \"更新\",\n    upload: \"上傳圖片或文件\",\n    uploadError: \"上傳錯誤\",\n    uploading: \"上傳中...\",\n    wysiwyg: \"所見即所得\",\n};\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/icons/ant.js",
    "content": "document.body.insertAdjacentHTML(\n    \"afterBegin\",\n    `<svg style=\"position: absolute; width: 0; height: 0; overflow: hidden;\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n  <defs>\n    <symbol id=\"vditor-icon-comment\" viewBox=\"0 0 32 32\">\n      <path d=\"M18.177 12.965c-0.825 0-1.464 0.639-1.464 1.428s0.639 1.428 1.464 1.428c0.754 0 1.393-0.639 1.393-1.428s-0.639-1.428-1.393-1.428zM8.178 12.965c-0.825 0-1.464 0.639-1.464 1.428s0.639 1.428 1.464 1.428c0.754 0 1.393-0.639 1.393-1.428s-0.639-1.428-1.393-1.428z\"></path>\n      <path d=\"M29.641 10.251c-1.637-2.234-3.964-3.878-6.663-4.622l-0.086-0.020v0.004c-0.611-0.679-1.3-1.303-2.071-1.861-5.846-4.25-14.053-2.953-18.32 2.893-3.439 4.75-3.293 11.139 0.214 15.678l0.029 4.735c0 0.114 0.018 0.229 0.054 0.336 0.15 0.467 0.581 0.799 1.089 0.799 0.123 0 0.241-0.019 0.351-0.055l-0.008 0.002 4.521-1.425c1.196 0.425 2.432 0.668 3.66 0.736l-0.018 0.014c3.182 2.318 7.353 3.014 11.178 1.75l4.539 1.478c0.114 0.036 0.232 0.057 0.354 0.057 0.632 0 1.143-0.511 1.143-1.143v-4.785c3.146-4.271 3.228-10.174 0.036-14.571zM9.249 24.179l-0.429-0.179-3.535 1.107-0.036-3.714-0.286-0.321c-3.021-3.686-3.221-8.996-0.393-12.892 3.443-4.721 10.042-5.764 14.749-2.357 4.721 3.432 5.767 10.021 2.357 14.713-2.861 3.925-7.982 5.375-12.428 3.643zM27.284 23.572l-0.286 0.357 0.036 3.714-3.5-1.178-0.429 0.179c-2 0.743-4.132 0.803-6.107 0.25l-0.007-0.004c2.782-0.871 5.098-2.559 6.731-4.781l0.026-0.036c2.728-3.761 3.171-8.485 1.586-12.514l0.021 0.014c0.821 0.589 1.575 1.325 2.214 2.214 2.593 3.557 2.446 8.399-0.286 11.785z\"></path>\n      <path d=\"M13.177 12.965c-0.825 0-1.464 0.639-1.464 1.428s0.639 1.428 1.464 1.428c0.754 0 1.393-0.639 1.393-1.428s-0.639-1.428-1.393-1.428z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-mp-wechat\" viewBox=\"0 0 32 32\">\n      <path d=\"M6.927 17.719s-3.040-3.431-2.915-6.942c0.16-4.453 4.738-10.257 11.359-10.257 1.884 0 5.653 0 10.328 5.52 0.249 0.302-15.075-3.84-18.772 11.679z\"></path>\n      <path d=\"M17.477 9.301s3.946-1.298 7.271-0.178c4.222 1.422 8.693 6.826 6.809 13.182-0.533 1.804-1.609 5.413-8.231 8.32-0.356 0.16 10.613-13.351-5.849-21.323z\"></path>\n      <path d=\"M10.944 24.332c-1.938 2.035-3.751 1.742-3.751 1.742l0.578-3.191c-5.235-3.44-6.373-10.328-6.453-10.106-2.444 6.817-0.916 11.377 0.027 13.004 3.315 5.733 11.982 7.351 17.484 3.893 2.969-1.867 4.533-7.057 4.533-7.057-5.298 2.338-9.342 2.569-12.417 1.715z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-code-theme\" viewBox=\"0 0 32 32\">\n      <path d=\"M25.785 24.935c1.681 0 3.054-1.392 3.054-3.096 0-2.058-3.054-5.416-3.054-5.416s-3.054 3.358-3.054 5.416c0 1.704 1.373 3.096 3.054 3.096zM11.28 23.239c0.273 0.273 0.715 0.273 0.985 0l9.851-9.847c0.273-0.273 0.273-0.715 0-0.985l-9.847-9.847c-0.023-0.023-0.050-0.046-0.077-0.065l-3.008-3.008c-0.063-0.062-0.15-0.101-0.246-0.101s-0.183 0.039-0.246 0.101l-1.846 1.846c-0.062 0.063-0.101 0.15-0.101 0.246s0.039 0.183 0.101 0.246l2.585 2.585-7.993 7.997c-0.273 0.273-0.273 0.715 0 0.985l9.843 9.847zM11.777 5.984l6.881 6.881h-13.759l6.878-6.881zM31.078 27.693h-30.157c-0.169 0-0.308 0.138-0.308 0.308v3.077c0 0.169 0.138 0.308 0.308 0.308h30.157c0.169 0 0.308-0.138 0.308-0.308v-3.077c0-0.169-0.138-0.308-0.308-0.308z\"></path>\n    </symbol>\n\n    <symbol id=\"vditor-icon-quote\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 11H6a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v6q0 4-4 5m13-7h-4a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v6q0 4-4 5\"/></symbol>\n\n\n    <symbol id=\"vditor-icon-after\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 20V10m0 10l4-4m-4 4l-4-4M4 4h16\"/></symbol>\n\n    <symbol id=\"vditor-icon-before\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 10v10m0-10l4 4m-4-4l-4 4M4 4h16\"/></symbol>\n\n    <symbol id=\"vditor-icon-headings\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 5v7m0 0v7m0-7h10m0-7v7m0 0v7\"/></symbol>\n\n\n    <symbol id=\"vditor-icon-line\" viewBox=\"0 0 48 48\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" d=\"M5 24h38M21 38h6m10 0h6M21 10h6M5 38h6M5 10h6m26 0h6\"/></symbol>\n\n    <symbol id=\"vditor-icon-code\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m7 8l-4 4l4 4m10-8l4 4l-4 4M14 4l-4 16\"/></symbol>\n\n    <symbol id=\"vditor-icon-inline-code\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m8 4l-5 8l5 8m8-16l5 8l-5 8\"/></symbol>\n\n    <symbol id=\"vditor-icon-both\" viewBox=\"0 0 32 32\">\n      <path d=\"M31.858 22.232l-0.007-0.007c-1.575-3.332-4.014-5.047-7.261-5.047s-5.686 1.718-7.265 5.047v0.004c-0.193 0.411-0.193 0.889 0 1.3 1.579 3.329 4.018 5.043 7.265 5.043s5.686-1.718 7.265-5.047c0.193-0.411 0.193-0.886 0.004-1.293zM24.59 26.286c-2.218 0-3.836-1.071-5.040-3.411 1.2-2.339 2.822-3.411 5.040-3.411s3.836 1.071 5.040 3.411c-1.2 2.339-2.822 3.411-5.040 3.411z\"></path>\n      <path d=\"M22.607 22.893c0 1.105 0.895 2 2 2s2-0.895 2-2v0c0-1.105-0.895-2-2-2s-2 0.895-2 2v0z\"></path>\n      <path d=\"M2.571 6h25.144v9.036h2.572v-10.465c0-0.632-0.511-1.143-1.143-1.143h-28.001c-0.632 0-1.143 0.511-1.143 1.143v18.572c0 0.632 0.511 1.143 1.143 1.143h12.572v-2.572h-11.143v-15.715z\"></path>\n      <path d=\"M23.604 9.789l-1.314-1.314c-0.111-0.111-0.293-0.111-0.404 0l-6.565 6.572-3.075-3.079c-0.111-0.111-0.293-0.111-0.404 0l-5.154 5.154c-0.111 0.111-0.111 0.293 0 0.404l1.314 1.314c0.111 0.111 0.293 0.111 0.404 0l3.636-3.636 3.075 3.079c0.111 0.111 0.293 0.111 0.404 0l8.082-8.090c0.114-0.111 0.114-0.293 0-0.404z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-theme\" viewBox=\"0 0 32 32\">\n      <path d=\"M30.249 0.637h-8.207c-0.693 0-1.309 0.474-1.473 1.166-0.497 2.102-2.38 3.61-4.569 3.61s-4.072-1.508-4.569-3.61c-0.161-0.673-0.758-1.166-1.47-1.166-0.001 0-0.002 0-0.003 0h-8.207c-0.967 0-1.751 0.784-1.751 1.751v0 10.030c0 0.967 0.784 1.751 1.751 1.751v0h2.985v15.443c0 0.967 0.784 1.751 1.751 1.751v0h19.025c0.967 0 1.751-0.784 1.751-1.751v0-15.443h2.985c0.967 0 1.751-0.784 1.751-1.751v0-10.030c0-0.967-0.784-1.751-1.751-1.751v0zM29.134 11.303h-4.736v17.194h-16.796v-17.194h-4.736v-7.801h6.101c1.122 2.834 3.881 4.776 7.033 4.776s5.91-1.942 7.033-4.776h6.102v7.801z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-resize\" viewBox=\"0 0 128 32\">\n      <path d=\"M1.28 0c-0.704 0-1.28 0.163-1.28 0.365 0 0.291 0 2.618 0 2.909 0 0.198 0.576 0.362 1.28 0.362 12.544 0 112.896 0 125.44 0 0.704 0 1.28-0.163 1.28-0.362 0-0.291 0-2.618 0-2.909 0-0.202-0.576-0.365-1.28-0.365-25.088 0-112.896 0-125.44 0zM1.28 28.365c-0.704 0-1.28 0.163-1.28 0.362 0 0.291 0 2.618 0 2.909 0 0.202 0.576 0.365 1.28 0.365 12.544 0 112.896 0 125.44 0 0.704 0 1.28-0.163 1.28-0.365 0-0.291 0-2.618 0-2.909 0-0.198-0.576-0.362-1.28-0.362-25.088 0-112.896 0-125.44 0zM1.28 14.182c-0.704 0-1.28 0.163-1.28 0.362 0 0.291 0 2.621 0 2.912 0 0.198 0.576 0.362 1.28 0.362 12.544 0 112.896 0 125.44 0 0.704 0 1.28-0.163 1.28-0.362 0-0.291 0-2.621 0-2.912 0-0.198-0.576-0.362-1.28-0.362-25.088 0-112.896 0-125.44 0z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-export\" viewBox=\"0 0 32 32\">\n      <path d=\"M31.399 26.042h-2.202c-0.172 0-0.315 0.143-0.315 0.315v2.529h-25.769v-25.773h25.773v2.529c0 0.172 0.143 0.315 0.315 0.315h2.202c0.172 0 0.315-0.139 0.315-0.315v-4.1c0-0.696-0.561-1.256-1.256-1.256h-28.92c-0.696 0-1.256 0.561-1.256 1.256v28.916c0 0.696 0.561 1.256 1.256 1.256h28.916c0.696 0 1.256-0.561 1.256-1.256v-4.1c0-0.176-0.143-0.315-0.315-0.315zM32.16 15.742l-5.807-4.583c-0.217-0.172-0.532-0.016-0.532 0.258v3.11h-12.85c-0.18 0-0.327 0.147-0.327 0.327v2.292c0 0.18 0.147 0.327 0.327 0.327h12.85v3.11c0 0.274 0.319 0.43 0.532 0.258l5.807-4.583c0.077-0.060 0.126-0.153 0.126-0.258s-0.049-0.197-0.125-0.257l-0.001-0.001z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-copy\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M7 9.667A2.667 2.667 0 0 1 9.667 7h8.666A2.667 2.667 0 0 1 21 9.667v8.666A2.667 2.667 0 0 1 18.333 21H9.667A2.667 2.667 0 0 1 7 18.333z\"/><path d=\"M4.012 16.737A2 2 0 0 1 3 15V5c0-1.1.9-2 2-2h10c.75 0 1.158.385 1.5 1\"/></g></symbol>\n    <symbol id=\"vditor-icon-pause\" viewBox=\"0 0 32 32\">\n      <path d=\"M6.095 0h3.81v32h-3.81zM25.524 0h-3.048c-0.21 0-0.381 0.171-0.381 0.381v31.238c0 0.21 0.171 0.381 0.381 0.381h3.048c0.21 0 0.381-0.171 0.381-0.381v-31.238c0-0.21-0.171-0.381-0.381-0.381z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-preview\" viewBox=\"0 0 32 32\">\n      <path d=\"M31.788 15.053c-3.479-7.329-8.738-11.017-15.788-11.017-7.054 0-12.309 3.688-15.788 11.021-0.134 0.277-0.212 0.602-0.212 0.945s0.078 0.668 0.218 0.958l-0.006-0.013c3.479 7.329 8.738 11.017 15.788 11.017 7.054 0 12.309-3.688 15.788-11.021 0.283-0.595 0.283-1.284 0-1.89zM16 25.322c-5.92 0-10.254-3.002-13.311-9.322 3.057-6.32 7.391-9.322 13.311-9.322s10.254 3.002 13.311 9.322c-3.053 6.32-7.388 9.322-13.311 9.322zM15.853 9.541c-3.567 0-6.459 2.892-6.459 6.459s2.892 6.459 6.459 6.459 6.459-2.892 6.459-6.459-2.892-6.459-6.459-6.459zM15.853 20.11c-2.272 0-4.11-1.839-4.11-4.11s1.839-4.11 4.11-4.11 4.11 1.839 4.11 4.11-1.839 4.11-4.11 4.11z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-edit\" viewBox=\"0 0 32 32\">\n      <path d=\"M31.68 16h-2.24c-0.176 0-0.32 0.144-0.32 0.32v12.8h-26.239v-26.239h12.8c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32h-14.4c-0.708 0-1.28 0.572-1.28 1.28v29.439c0 0.708 0.572 1.28 1.28 1.28h29.439c0.708 0 1.28-0.572 1.28-1.28v-14.4c0-0.176-0.144-0.32-0.32-0.32z\"></path>\n      <path d=\"M9.756 16.916l-0.076 4.756c-0.004 0.356 0.284 0.648 0.64 0.648h0.016l4.72-0.116c0.080-0.004 0.16-0.036 0.216-0.092l16.635-16.599c0.124-0.124 0.124-0.328 0-0.452l-4.972-4.968c-0.064-0.064-0.144-0.092-0.228-0.092s-0.164 0.032-0.228 0.092l-16.631 16.599c-0.056 0.058-0.091 0.137-0.092 0.224v0zM12.296 17.86l14.412-14.38 1.808 1.804-14.42 14.388-1.828 0.044 0.028-1.856z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-info\" viewBox=\"0 0 32 32\">\n      <path d=\"M13.124 3.056c0 1.589 1.288 2.876 2.876 2.876s2.876-1.288 2.876-2.876v0c0-1.589-1.288-2.876-2.876-2.876s-2.876 1.288-2.876 2.876v0zM17.438 10.607h-2.876c-0.198 0-0.36 0.162-0.36 0.36v20.854c0 0.198 0.162 0.36 0.36 0.36h2.876c0.198 0 0.36-0.162 0.36-0.36v-20.854c0-0.198-0.162-0.36-0.36-0.36z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-help\" viewBox=\"0 0 32 32\">\n      <path d=\"M26.419 6.445c-0.579-1.265-1.402-2.402-2.452-3.374-2.133-1.98-4.965-3.072-7.967-3.072s-5.834 1.091-7.967 3.068c-1.050 0.976-1.873 2.109-2.452 3.378-0.604 1.323-0.91 2.725-0.91 4.172v1.116c0 0.256 0.207 0.463 0.463 0.463h2.233c0.256 0 0.463-0.207 0.463-0.463v-1.116c0-4.114 3.663-7.458 8.169-7.458s8.169 3.345 8.169 7.458c0 1.687-0.599 3.274-1.736 4.597-1.125 1.311-2.712 2.249-4.469 2.646-1.005 0.227-1.91 0.794-2.551 1.604-0.615 0.772-0.987 1.76-0.988 2.836v1.299c0 0.256 0.207 0.463 0.463 0.463h2.233c0.256 0 0.463-0.207 0.463-0.463v-1.298c0-0.649 0.451-1.22 1.075-1.36 2.414-0.546 4.606-1.848 6.173-3.667 0.79-0.922 1.406-1.947 1.832-3.059 0.442-1.153 0.666-2.365 0.666-3.597 0-1.447-0.306-2.853-0.91-4.172zM16 27.369c-1.278 0-2.315 1.038-2.315 2.315s1.038 2.315 2.315 2.315 2.315-1.038 2.315-2.315-1.038-2.315-2.315-2.315z\"></path>\n    </symbol>\n\n    <symbol id=\"vditor-icon-strike\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-3-5.5A4 2 0 0 0 12 5h-1a3.5 3.5 0 0 0 0 7h2a3.5 3.5 0 0 1 0 7h-1.5a4 2 0 0 1-4-1.5\"/></symbol>\n\n    <symbol id=\"vditor-icon-contract\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19v-2a2 2 0 0 1 2-2h2M15 5v2a2 2 0 0 0 2 2h2M5 15h2a2 2 0 0 1 2 2v2M5 9h2a2 2 0 0 0 2-2V5\"/></symbol>\n\n    <symbol id=\"vditor-icon-record\" viewBox=\"0 0 32 32\">\n      <path d=\"M27.786 13.929c0-0.157-0.129-0.286-0.286-0.286h-2.143c-0.157 0-0.286 0.129-0.286 0.286 0 5.011-4.061 9.071-9.071 9.071s-9.071-4.061-9.071-9.071c0-0.157-0.129-0.286-0.286-0.286h-2.143c-0.157 0-0.286 0.129-0.286 0.286 0 6.025 4.521 10.996 10.357 11.7v3.657h-5.189c-0.489 0-0.882 0.511-0.882 1.143v1.286c0 0.157 0.1 0.286 0.221 0.286h14.557c0.121 0 0.221-0.129 0.221-0.286v-1.286c0-0.632-0.393-1.143-0.882-1.143h-5.332v-3.639c5.904-0.643 10.5-5.643 10.5-11.718zM16 20c3.354 0 6.071-2.686 6.071-6v-8c0-3.314-2.718-6-6.071-6s-6.071 2.686-6.071 6v8c0 3.314 2.718 6 6.071 6zM12.643 6c0-1.807 1.496-3.286 3.357-3.286s3.357 1.479 3.357 3.286v8c0 1.807-1.496 3.286-3.357 3.286s-3.357-1.479-3.357-3.286v-8z\"></path>\n    </symbol>\n\n    <symbol id=\"vditor-icon-bold\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 5h6a3.5 3.5 0 0 1 0 7H7zm6 7h1a3.5 3.5 0 0 1 0 7H7v-7\"/></symbol>\n\n    <symbol id=\"vditor-icon-bug\" viewBox=\"0 0 32 32\">\n      <path d=\"M8.571 7.714h2c0.157 0 0.286-0.129 0.286-0.286 0-1.011 0.211-1.9 0.611-2.625 0.379-0.693 0.929-1.243 1.621-1.621 0.729-0.396 1.614-0.611 2.625-0.611h0.571c1.011 0 1.9 0.211 2.625 0.611 0.693 0.379 1.243 0.929 1.621 1.621 0.396 0.729 0.611 1.614 0.611 2.625 0 0.157 0.129 0.286 0.286 0.286h2c0.157 0 0.286-0.129 0.286-0.286 0-1.429-0.314-2.739-0.925-3.861-0.614-1.125-1.518-2.029-2.643-2.643-1.121-0.611-2.432-0.925-3.861-0.925h-0.571c-1.429 0-2.739 0.314-3.861 0.925-1.125 0.614-2.029 1.518-2.643 2.643-0.611 1.121-0.925 2.432-0.925 3.861 0 0.157 0.129 0.286 0.286 0.286z\"></path>\n      <path d=\"M31.286 16h-5.286v-3.571c2.743 0 4.964-2.221 4.964-4.964 0-0.157-0.129-0.286-0.286-0.286h-2.143c-0.157 0-0.286 0.129-0.286 0.286 0 1.243-1.007 2.25-2.25 2.25h-20c-1.243 0-2.25-1.007-2.25-2.25 0-0.157-0.129-0.286-0.286-0.286h-2.143c-0.157 0-0.286 0.129-0.286 0.286 0 2.743 2.221 4.964 4.964 4.964v3.571h-5.286c-0.157 0-0.286 0.129-0.286 0.286v2c0 0.157 0.129 0.286 0.286 0.286h5.286v3.429c0 0.232 0.007 0.464 0.025 0.689-2.45 1.046-4.168 3.479-4.168 6.311 0 0.157 0.129 0.286 0.286 0.286h2c0.157 0 0.286-0.129 0.286-0.286 0-1.579 0.854-2.961 2.129-3.704 0.214 0.614 0.486 1.2 0.811 1.75 0.868 1.482 2.107 2.721 3.589 3.589s3.204 1.364 5.043 1.364 3.564-0.496 5.046-1.364c1.482-0.868 2.721-2.107 3.589-3.589 0.325-0.554 0.596-1.139 0.811-1.75 1.271 0.743 2.125 2.125 2.125 3.704 0 0.157 0.129 0.286 0.286 0.286h2c0.157 0 0.286-0.129 0.286-0.286 0-2.832-1.718-5.264-4.168-6.311 0.014-0.229 0.025-0.457 0.025-0.689v-3.429h5.286c0.157 0 0.286-0.129 0.286-0.286v-2c0-0.157-0.129-0.286-0.286-0.286zM23.286 22c0 1.314-0.346 2.571-0.993 3.675-0.632 1.082-1.536 1.986-2.618 2.618-1.104 0.646-2.361 0.993-3.675 0.993s-2.571-0.346-3.675-0.993c-1.082-0.632-1.986-1.536-2.618-2.618-0.646-1.104-0.993-2.361-0.993-3.675v-9.571h14.571v9.571z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-play\" viewBox=\"0 0 32 32\">\n      <path d=\"M25.263 15.159l-17.308-14.927c-0.645-0.555-1.591-0.055-1.591 0.841v29.853c0 0.895 0.945 1.395 1.591 0.841l17.308-14.927c0.495-0.427 0.495-1.255 0-1.682z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-check\" viewBox=\"0 0 32 32\">\n      <path d=\"M12.844 21.828c0.234 0.323 0.61 0.531 1.034 0.531s0.8-0.208 1.031-0.527l0.003-0.004 8.424-11.68c0.152-0.212 0-0.508-0.26-0.508h-1.876c-0.408 0-0.796 0.196-1.036 0.532l-6.284 8.72-2.848-3.952c-0.24-0.332-0.624-0.532-1.036-0.532h-1.876c-0.26 0-0.412 0.296-0.26 0.508l4.984 6.912z\"></path>\n      <path d=\"M30.72 0h-29.44c-0.708 0-1.28 0.572-1.28 1.28v29.44c0 0.708 0.572 1.28 1.28 1.28h29.44c0.708 0 1.28-0.572 1.28-1.28v-29.44c0-0.708-0.572-1.28-1.28-1.28zM29.12 29.12h-26.24v-26.24h26.24v26.24z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-trashcan\" viewBox=\"0 0 32 32\">\n      <path d=\"M9.92 2.88h-0.32c0.176 0 0.32-0.144 0.32-0.32v0.32h12.16v-0.32c0 0.176 0.144 0.32 0.32 0.32h-0.32v2.88h2.88v-3.2c0-1.412-1.148-2.56-2.56-2.56h-12.8c-1.412 0-2.56 1.148-2.56 2.56v3.2h2.88v-2.88zM30.080 5.76h-28.16c-0.708 0-1.28 0.572-1.28 1.28v1.28c0 0.176 0.144 0.32 0.32 0.32h2.416l0.988 20.92c0.064 1.364 1.192 2.44 2.556 2.44h18.16c1.368 0 2.492-1.072 2.556-2.44l0.988-20.92h2.416c0.176 0 0.32-0.144 0.32-0.32v-1.28c0-0.708-0.572-1.28-1.28-1.28zM24.772 29.12h-17.544l-0.968-20.48h19.48l-0.968 20.48z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-more\" viewBox=\"0 0 32 32\">\n      <path d=\"M0 15.952c0 1.473 1.194 2.667 2.667 2.667s2.667-1.194 2.667-2.667v0c0-1.473-1.194-2.667-2.667-2.667s-2.667 1.194-2.667 2.667v0zM13.333 15.952c0 1.473 1.194 2.667 2.667 2.667s2.667-1.194 2.667-2.667v0c0-1.473-1.194-2.667-2.667-2.667s-2.667 1.194-2.667 2.667v0zM26.667 15.952c0 1.473 1.194 2.667 2.667 2.667s2.667-1.194 2.667-2.667v0c0-1.473-1.194-2.667-2.667-2.667s-2.667 1.194-2.667 2.667v0z\"></path>\n    </symbol>\n\n    <symbol id=\"vditor-icon-fullscreen\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2m8-16h2a2 2 0 0 1 2 2v2m-4 12h2a2 2 0 0 0 2-2v-2\"/></symbol>\n\n    <symbol id=\"vditor-icon-emoji\" viewBox=\"0 0 32 32\">\n      <path d=\"M8 12.75c0 0.947 0.768 1.714 1.714 1.714s1.714-0.768 1.714-1.714v0c0-0.947-0.768-1.714-1.714-1.714s-1.714 0.768-1.714 1.714v0zM20.571 12.75c0 0.947 0.767 1.714 1.714 1.714s1.714-0.768 1.714-1.714v0c0-0.947-0.767-1.714-1.714-1.714s-1.714 0.768-1.714 1.714v0zM16 0c-8.836 0-16 7.164-16 16s7.164 16 16 16 16-7.164 16-16-7.164-16-16-16zM25.393 25.393c-1.221 1.221-2.643 2.179-4.225 2.85-1.632 0.693-3.371 1.043-5.168 1.043s-3.536-0.35-5.171-1.043c-1.643-0.704-3.045-1.666-4.225-2.85l-0-0c-1.221-1.221-2.179-2.643-2.85-4.225-0.689-1.632-1.039-3.371-1.039-5.168s0.35-3.536 1.043-5.171c0.704-1.643 1.666-3.045 2.85-4.225l0-0c1.221-1.221 2.643-2.179 4.225-2.85 1.632-0.689 3.371-1.039 5.168-1.039s3.536 0.35 5.171 1.043c1.643 0.704 3.045 1.666 4.225 2.85l0 0c1.221 1.221 2.179 2.643 2.85 4.225 0.689 1.632 1.039 3.371 1.039 5.168s-0.35 3.536-1.043 5.171c-0.703 1.642-1.665 3.043-2.849 4.221l-0.001 0.001zM21.429 16.75h-1.718c-0.15 0-0.279 0.114-0.289 0.264-0.136 1.768-1.618 3.164-3.421 3.164s-3.289-1.396-3.421-3.164c-0.011-0.15-0.139-0.264-0.289-0.264h-1.718c-0 0-0 0-0 0-0.158 0-0.286 0.128-0.286 0.286 0 0.005 0 0.010 0 0.015l-0-0.001c0.157 3.011 2.661 5.414 5.714 5.414s5.557-2.404 5.714-5.414c0-0.004 0-0.009 0-0.014 0-0.158-0.128-0.286-0.286-0.286-0 0-0 0-0 0h0z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-align-center\" viewBox=\"0 0 32 32\">\n      <path d=\"M6.080 4.72h19.84c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32h-19.84c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32zM25.92 21.68c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32h-19.84c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32h19.84zM31.68 27.28h-31.36c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32h31.36c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32zM31.68 10.32h-31.36c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32h31.36c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-align-left\" viewBox=\"0 0 32 32\">\n      <path d=\"M0.32 4.72h19.84c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32h-19.84c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32zM0.32 21.68h19.84c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32h-19.84c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32zM31.68 27.28h-31.36c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32h31.36c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32zM31.68 10.32h-31.36c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32h31.36c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-align-right\" viewBox=\"0 0 32 32\">\n      <path d=\"M31.68 1.84h-19.84c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32h19.84c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32zM31.68 18.8h-19.84c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32h19.84c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32zM31.68 27.28h-31.36c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32h31.36c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32zM31.68 10.32h-31.36c-0.176 0-0.32 0.144-0.32 0.32v2.24c0 0.176 0.144 0.32 0.32 0.32h31.36c0.176 0 0.32-0.144 0.32-0.32v-2.24c0-0.176-0.144-0.32-0.32-0.32z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-delete-column\" viewBox=\"0 0 32 32\">\n      <path d=\"M21.563 21.195c-0.056-0.048-0.128-0.076-0.204-0.076h-2.188c-0.096 0-0.184 0.044-0.244 0.116l-2.928 3.512-2.924-3.512c-0.060-0.072-0.152-0.116-0.244-0.116h-2.192c-0.076 0-0.148 0.028-0.204 0.076-0.136 0.112-0.156 0.316-0.040 0.452l4.091 4.911-4.096 4.915c-0.112 0.136-0.096 0.336 0.040 0.452 0.056 0.048 0.128 0.076 0.204 0.076h2.188c0.096 0 0.184-0.044 0.244-0.116l2.924-3.512 2.924 3.512c0.060 0.072 0.152 0.116 0.244 0.116h2.2c0.076 0 0.148-0.028 0.204-0.076 0.136-0.112 0.156-0.316 0.040-0.452l-4.091-4.915 4.096-4.915c0.112-0.136 0.092-0.336-0.044-0.448zM14.4 17.28h3.2c0.176 0 0.32-0.144 0.32-0.32v-16.638c0-0.176-0.144-0.32-0.32-0.32h-3.2c-0.176 0-0.32 0.144-0.32 0.32v16.638c0 0.176 0.144 0.32 0.32 0.32zM9.521 10.961h-6.639v-9.999c0-0.132-0.108-0.24-0.24-0.24h-2.4c-0.132 0-0.24 0.108-0.24 0.24v11.679c0 0.664 0.536 1.2 1.2 1.2h8.319c0.132 0 0.24-0.108 0.24-0.24v-2.4c0-0.132-0.108-0.24-0.24-0.24zM31.758 0.722h-2.4c-0.132 0-0.24 0.108-0.24 0.24v9.999h-6.639c-0.132 0-0.24 0.108-0.24 0.24v2.4c0 0.132 0.108 0.24 0.24 0.24h8.319c0.664 0 1.2-0.536 1.2-1.2v-11.679c0-0.132-0.108-0.24-0.24-0.24z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-delete-row\" viewBox=\"0 0 32 32\">\n      <path d=\"M28.129 16l4.035-4.843c0.11-0.134 0.095-0.331-0.039-0.445-0.055-0.047-0.126-0.075-0.201-0.075h-2.156c-0.095 0-0.181 0.043-0.24 0.114l-2.888 3.464-2.881-3.46c-0.059-0.071-0.15-0.114-0.24-0.114h-2.159c-0.075 0-0.146 0.028-0.201 0.075-0.134 0.11-0.154 0.311-0.039 0.445l4.031 4.839-4.035 4.843c-0.11 0.134-0.095 0.331 0.039 0.445 0.055 0.047 0.126 0.075 0.201 0.075h2.156c0.095 0 0.181-0.043 0.24-0.114l2.881-3.46 2.881 3.46c0.059 0.071 0.15 0.114 0.24 0.114h2.167c0.075 0 0.146-0.028 0.201-0.075 0.134-0.11 0.154-0.311 0.039-0.445l-4.031-4.843zM16.946 14.108h-16.393c-0.173 0-0.315 0.142-0.315 0.315v3.153c0 0.173 0.142 0.315 0.315 0.315h16.393c0.173 0 0.315-0.142 0.315-0.315v-3.152c0-0.173-0.142-0.315-0.315-0.315zM13.636 22.147h-2.364c-0.13 0-0.236 0.106-0.236 0.236v6.541h-9.852c-0.13 0-0.236 0.106-0.236 0.236v2.364c0 0.13 0.106 0.236 0.236 0.236h11.507c0.654 0 1.182-0.528 1.182-1.182v-8.197c0-0.13-0.106-0.236-0.236-0.236zM1.183 3.075h9.852v6.541c0 0.13 0.106 0.236 0.236 0.236h2.364c0.13 0 0.236-0.106 0.236-0.236v-8.197c0-0.654-0.528-1.182-1.182-1.182h-11.507c-0.13 0-0.236 0.106-0.236 0.236v2.364c0 0.13 0.106 0.236 0.236 0.236z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-down\" viewBox=\"0 0 32 32\">\n      <path d=\"M31.663 5.221h-3.158c-0.215 0-0.417 0.105-0.543 0.278l-11.962 16.489-11.962-16.489c-0.126-0.173-0.328-0.278-0.543-0.278h-3.158c-0.274 0-0.434 0.312-0.274 0.535l14.847 20.468c0.539 0.741 1.642 0.741 2.177 0l14.847-20.468c0.164-0.223 0.004-0.535-0.269-0.535z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-insert-row\" viewBox=\"0 0 32 32\">\n      <path d=\"M30.668 23.040h-29.336c-0.736 0-1.332-0.572-1.332-1.28v-18.56c0-0.708 0.596-1.28 1.332-1.28h29.332c0.736 0 1.332 0.572 1.332 1.28v18.56c0.004 0.708-0.592 1.28-1.328 1.28zM9.92 4.8h-7.040v6.4h7.040v-6.4zM9.92 13.76h-7.040v6.4h7.040v-6.4zM19.52 4.8h-7.040v6.4h7.040v-6.4zM19.52 13.76h-7.040v6.4h7.040v-6.4zM29.12 4.8h-7.040v6.4h7.040v-6.4zM29.12 13.76h-7.040v6.4h7.040v-6.4zM31.68 30.080h-31.36c-0.176 0-0.32-0.144-0.32-0.32v-3.2c0-0.176 0.144-0.32 0.32-0.32h31.36c0.176 0 0.32 0.144 0.32 0.32v3.2c0 0.176-0.144 0.32-0.32 0.32z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-insert-rowb\" viewBox=\"0 0 32 32\">\n      <path d=\"M30.668 8.96h-29.336c-0.736 0-1.332 0.572-1.332 1.28v18.56c0 0.708 0.596 1.28 1.332 1.28h29.332c0.736 0 1.332-0.572 1.332-1.28v-18.56c0.004-0.708-0.592-1.28-1.328-1.28zM9.92 27.2h-7.040v-6.4h7.040v6.4zM9.92 18.24h-7.040v-6.4h7.040v6.4zM19.52 27.2h-7.040v-6.4h7.040v6.4zM19.52 18.24h-7.040v-6.4h7.040v6.4zM29.12 27.2h-7.040v-6.4h7.040v6.4zM29.12 18.24h-7.040v-6.4h7.040v6.4zM31.68 1.92h-31.36c-0.176 0-0.32 0.144-0.32 0.32v3.2c0 0.176 0.144 0.32 0.32 0.32h31.36c0.176 0 0.32-0.144 0.32-0.32v-3.2c0-0.176-0.144-0.32-0.32-0.32z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-insert-column\" viewBox=\"0 0 32 32\">\n      <path d=\"M29.76 0h-3.2c-0.176 0-0.32 0.144-0.32 0.32v31.36c0 0.176 0.144 0.32 0.32 0.32h3.2c0.176 0 0.32-0.144 0.32-0.32v-31.36c0-0.176-0.144-0.32-0.32-0.32zM21.76 0h-18.56c-0.708 0-1.28 0.596-1.28 1.332v29.332c0 0.736 0.572 1.332 1.28 1.332h18.56c0.708 0 1.28-0.596 1.28-1.332v-29.332c0-0.736-0.572-1.332-1.28-1.332zM11.2 29.12h-6.4v-7.040h6.4v7.040zM11.2 19.52h-6.4v-7.040h6.4v7.040zM11.2 9.92h-6.4v-7.040h6.4v7.040zM20.16 29.12h-6.4v-7.040h6.4v7.040zM20.16 19.52h-6.4v-7.040h6.4v7.040zM20.16 9.92h-6.4v-7.040h6.4v7.040z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-insert-columnb\" viewBox=\"0 0 32 32\">\n      <path d=\"M2.24 32h3.2c0.176 0 0.32-0.144 0.32-0.32v-31.36c0-0.176-0.144-0.32-0.32-0.32h-3.2c-0.176 0-0.32 0.144-0.32 0.32v31.36c0 0.176 0.144 0.32 0.32 0.32zM10.24 32h18.56c0.708 0 1.28-0.596 1.28-1.332v-29.332c0-0.736-0.572-1.332-1.28-1.332h-18.56c-0.708 0-1.28 0.596-1.28 1.332v29.332c0 0.736 0.572 1.332 1.28 1.332zM20.8 2.88h6.4v7.040h-6.4v-7.040zM20.8 12.48h6.4v7.040h-6.4v-7.040zM20.8 22.080h6.4v7.040h-6.4v-7.040zM11.84 2.88h6.4v7.040h-6.4v-7.040zM11.84 12.48h6.4v7.040h-6.4v-7.040zM11.84 22.080h6.4v7.040h-6.4v-7.040z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-italic\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M11 5h6M7 19h6m1-14l-4 14\"/></symbol>\n\n    <symbol id=\"vditor-icon-link\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m9 15l6-6m-4-3l.463-.536a5 5 0 0 1 7.071 7.072L18 13m-5 5l-.397.534a5.07 5.07 0 0 1-7.127 0a4.97 4.97 0 0 1 0-7.071L6 11\"/></symbol>\n\n    <symbol id=\"vditor-icon-outdent\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 6h-7m7 6h-9m9 6h-7M8 8l-4 4l4 4\"/></symbol>\n    <symbol id=\"vditor-icon-indent\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 6H9m11 6h-7m7 6H9M4 8l4 4l-4 4\"/></symbol>\n\n    <symbol id=\"vditor-icon-ordered-list\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M11 6h9m-9 6h9m-8 6h8M4 16a2 2 0 1 1 4 0c0 .591-.5 1-1 1.5L4 20h4M6 10V4L4 6\"/></symbol>\n    <symbol id=\"vditor-icon-redo\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"m15 14l4-4l-4-4\"/><path d=\"M19 10H8a4 4 0 1 0 0 8h1\"/></g></symbol>\n\n    <symbol id=\"vditor-icon-table\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zm0 5h18M10 3v18\"/></symbol>\n\n    <symbol id=\"vditor-icon-undo\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"m9 14l-4-4l4-4\"/><path d=\"M5 10h11a4 4 0 1 1 0 8h-1\"/></g></symbol>\n    <symbol id=\"vditor-icon-list\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 6h11M9 12h11M9 18h11M5 6v.01M5 12v.01M5 18v.01\"/></symbol>\n    <symbol id=\"vditor-icon-up\" viewBox=\"0 0 32 32\">\n      <path d=\"M31.936 26.244l-14.846-20.466c-0.539-0.741-1.642-0.741-2.177 0l-14.85 20.466c-0.040 0.055-0.064 0.124-0.064 0.198 0 0.186 0.151 0.337 0.337 0.337 0 0 0.001 0 0.001 0h3.158c0.215 0 0.417-0.105 0.543-0.278l11.961-16.488 11.961 16.488c0.126 0.173 0.328 0.278 0.543 0.278h3.158c0.274 0 0.434-0.312 0.274-0.535z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-zhihu\" viewBox=\"0 0 32 32\">\n      <path d=\"M18.245 3.993v24.401h2.555l1.073 3.041 4.532-3.041h5.601v-24.401h-13.761zM28.795 25.162h-2.551l-3.199 2.147-0.758-2.147h-0.767v-17.837h7.27v17.837zM16.601 14.931h-5.656c0.089-1.912 0.183-4.442 0.281-7.364h5.575l-0.004-0.345c0-0.026-0.009-0.626-0.098-1.239-0.089-0.639-0.281-1.486-0.894-1.486h-9.353c0.187-0.877 0.669-2.969 1.252-3.995l0.273-0.477-0.549-0.030c-0.034 0-0.835-0.038-1.763 0.451-1.521 0.809-2.202 2.402-2.5 3.595-0.784 3.113-1.9 5.277-2.372 6.201-0.141 0.273-0.226 0.434-0.264 0.545-0.077 0.209-0.034 0.417 0.119 0.554 0.447 0.405 1.627-0.124 1.64-0.128 0.026-0.013 0.055-0.026 0.094-0.043 0.592-0.268 2.347-1.065 2.973-3.599h2.415c0.030 1.371 0.132 5.895 0.124 7.364h-6.005l-0.089 0.064c-0.984 0.72-1.299 2.692-1.312 2.777l-0.060 0.392h7.113c-0.524 3.335-1.129 4.83-1.448 5.426-0.158 0.298-0.311 0.596-0.456 0.886-0.907 1.797-1.849 3.654-5.379 6.542-0.153 0.119-0.298 0.341-0.204 0.584 0.102 0.268 0.396 0.388 1.048 0.388 0.23 0 0.503-0.013 0.826-0.043 2.125-0.187 4.293-0.767 5.754-3.731 0.724-1.495 1.35-3.054 1.87-4.638l5.814 6.815 0.213-0.511c0.034-0.081 0.809-1.972 0.217-4.085l-0.021-0.077-4.604-5.239-0.937 0.707c0.273-1.112 0.451-2.125 0.532-3.028h6.759v-0.341c0-1.708-0.788-2.722-0.818-2.764l-0.102-0.128z\"></path>\n    </symbol>\n\n    <symbol id=\"vditor-icon-insert\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0m6 0h6m-3-3v6\"/></symbol>\n\n    <symbol id=\"vditor-icon-image\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M21 3.6v16.8a.6.6 0 0 1-.6.6H3.6a.6.6 0 0 1-.6-.6V3.6a.6.6 0 0 1 .6-.6h16.8a.6.6 0 0 1 .6.6\"/><path d=\"m3 16l7-3l11 5m-5-8a2 2 0 1 1 0-4a2 2 0 0 1 0 4\"/></g></symbol>\n    <symbol id=\"vditor-icon-math\" viewBox=\"0 0 24 24\"><g fill=\"none\" fill-rule=\"evenodd\"><path d=\"m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z\"/><path fill=\"currentColor\" d=\"M5 4.5A1.5 1.5 0 0 1 6.5 3h11A1.5 1.5 0 0 1 19 4.5V5a1 1 0 1 1-2 0H7v.54l6.562 5.625a1.1 1.1 0 0 1 0 1.67L7 18.46V19h10a1 1 0 1 1 2 0v.5a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 5 19.5v-1.27a1.5 1.5 0 0 1 .524-1.139L11.464 12l-5.94-5.091A1.5 1.5 0 0 1 5 5.77z\"/></g></symbol>\n    <symbol id=\"vditor-icon-flowchart\" viewBox=\"0 0 48 48\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" d=\"M26 24h16M26 38h16M26 10h16M18 24H6h4m8 14c-6-2-2-14-8-14m8-14c-6 2-2 14-8 14\"/></symbol>\n    <symbol id=\"vditor-icon-mindmap\" viewBox=\"0 0 48 48\"><g fill=\"none\" stroke=\"currentColor\" stroke-linejoin=\"round\" stroke-width=\"4\"><path d=\"M8 28a4 4 0 1 0 0-8a4 4 0 0 0 0 8ZM42 8a2 2 0 1 0 0-4a2 2 0 0 0 0 4Zm0 18a2 2 0 1 0 0-4a2 2 0 0 0 0 4Zm0 18a2 2 0 1 0 0-4a2 2 0 0 0 0 4Z\"/><path stroke-linecap=\"round\" d=\"M32 6H20v36h12M12 24h20\"/></g></symbol>\n    <symbol id=\"vditor-icon-echarts\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M2.75 10.25a2 2 0 0 1 2-2h4.167v13H4.75a2 2 0 0 1-2-2zm12.333 2h4.167a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-4.167zm-6.166-7.5a2 2 0 0 1 2-2h2.166a2 2 0 0 1 2 2v16.5H8.917z\"/></symbol>\n    <symbol id=\"vditor-icon-gantt\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M469.333 341.332v106.667h-192V341.332zm-384 0v106.667H42.667V341.332zm341.334 42.667H320v21.333h106.667zM384 213.332v106.667H128V213.332zm-42.667 42.667H170.667v21.333h170.666zm-128-170.667v106.667H42.667V85.332zm213.334 0v106.667H384V85.332zm-256 42.667H85.333v21.333h85.334z\" clip-rule=\"evenodd\"/></symbol>\n    <symbol id=\"vditor-icon-sequence\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M6.5 17h11M6 20v-2a6 6 0 1 1 12 0v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1\"/><path d=\"M6 4v2a6 6 0 1 0 12 0V4a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1\"/></g></symbol>\n    <symbol id=\"vditor-icon-video\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m15 10l4.553-2.276A1 1 0 0 1 21 8.618v6.764a1 1 0 0 1-1.447.894L15 14zM3 8a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/></symbol>\n    <symbol id=\"vditor-icon-upload\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><path d=\"M14 3v4a1 1 0 0 0 1 1h4\"/><path d=\"M17 21H7a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7l5 5v11a2 2 0 0 1-2 2\"/></g></symbol>\n    <symbol id=\"vditor-icon-sv_both\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 4a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1zm9-1v18\"/></symbol>\n    <symbol id=\"vditor-icon-wysiwyg_both\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M5 21q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h14q.825 0 1.413.588T21 5v14q0 .825-.587 1.413T19 21zm0-2h14V7H5zm7-2q-2.05 0-3.662-1.112T6 13q.725-1.775 2.338-2.887T12 9t3.663 1.113T18 13q-.725 1.775-2.337 2.888T12 17m0-1.5q1.4 0 2.55-.663T16.35 13q-.65-1.175-1.8-1.838T12 10.5t-2.55.663T7.65 13q.65 1.175 1.8 1.838T12 15.5m0-1q.625 0 1.063-.437T13.5 13t-.437-1.062T12 11.5t-1.062.438T10.5 13t.438 1.063T12 14.5\"/></symbol>\n    <symbol id=\"vditor-icon-wysiwyg_editor\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M5 21q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h14q.825 0 1.413.588T21 5v14q0 .825-.587 1.413T19 21zm0-2h14V7H5zm7-2q-2.05 0-3.662-1.112T6 13q.725-1.775 2.338-2.887T12 9t3.663 1.113T18 13q-.725 1.775-2.337 2.888T12 17m0-1.5q1.4 0 2.55-.663T16.35 13q-.65-1.175-1.8-1.838T12 10.5t-2.55.663T7.65 13q.65 1.175 1.8 1.838T12 15.5m0-1q.625 0 1.063-.437T13.5 13t-.437-1.062T12 11.5t-1.062.438T10.5 13t.438 1.063T12 14.5\"/></symbol>\n    <symbol id=\"vditor-icon-sv_none\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m7 8l-4 4l4 4m10-8l4 4l-4 4M14 4l-4 16\"/></symbol>\n    <symbol id=\"vditor-icon-sv_editor\" viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m7 8l-4 4l4 4m10-8l4 4l-4 4M14 4l-4 16\"/></symbol>\n    <symbol id=\"vditor-icon-caret-down\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M18 9c.852 0 1.297.986.783 1.623l-.076.084l-6 6a1 1 0 0 1-1.32.083l-.094-.083l-6-6l-.083-.094l-.054-.077l-.054-.096l-.017-.036l-.027-.067l-.032-.108l-.01-.053l-.01-.06l-.004-.057v-.118l.005-.058l.009-.06l.01-.052l.032-.108l.027-.067l.07-.132l.065-.09l.073-.081l.094-.083l.077-.054l.096-.054l.036-.017l.067-.027l.108-.032l.053-.01l.06-.01l.057-.004z\"/></symbol>\n    <symbol id=\"vditor-icon-close\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"m12 13.4l-4.9 4.9q-.275.275-.7.275t-.7-.275t-.275-.7t.275-.7l4.9-4.9l-4.9-4.9q-.275-.275-.275-.7t.275-.7t.7-.275t.7.275l4.9 4.9l4.9-4.9q.275-.275.7-.275t.7.275t.275.7t-.275.7L13.4 12l4.9 4.9q.275.275.275.7t-.275.7t-.7.275t-.7-.275z\"/></symbol>\n  </defs>\n</svg>`\n);\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/icons/material.js",
    "content": "document.body.insertAdjacentHTML(\n    \"afterBegin\",\n    `<svg style=\"position: absolute; width: 0; height: 0; overflow: hidden;\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n  <defs>\n    <symbol id=\"vditor-icon-comment\" viewBox=\"0 0 32 32\">\n      <path d=\"M28.8 24.272l-1.872-1.872h-23.728v-19.2h25.6v21.072zM28.8 0h-25.6c-1.76 0-3.2 1.44-3.2 3.2v19.2c0 1.76 1.44 3.2 3.2 3.2h22.4l6.4 6.4v-28.8c0-1.76-1.44-3.2-3.2-3.2z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-headings\" viewBox=\"0 0 32 32\">\n      <path d=\"M1.050 0.007h6.279v31.993h-6.279v-31.993z\"></path>\n      <path d=\"M24.671 0h6.279v31.993h-6.279v-31.993z\"></path>\n      <path d=\"M5.159 12.845h21.683v6.317h-21.683v-6.317z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-before\" viewBox=\"0 0 32 32\">\n      <path d=\"M1.462 26.507h21.543v-3.276h-21.543v3.276z\"></path>\n      <path d=\"M1.462 9.928h16.48v-3.276h-16.48v3.276z\"></path>\n      <path d=\"M1.462 18.217h21.543v-3.276h-21.543v3.276z\"></path>\n      <path d=\"M24.366 8.29l6.171-5.952-2.43-2.338-8.619 8.29 8.619 8.29 2.43-2.337-6.171-5.953z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-after\" viewBox=\"0 0 32 32\">\n      <path d=\"M1.462 5.493h21.543v3.276h-21.543v-3.276z\"></path>\n      <path d=\"M1.462 22.072h16.48v3.276h-16.48v-3.276z\"></path>\n      <path d=\"M1.462 13.783h21.543v3.276h-21.543v-3.276z\"></path>\n      <path d=\"M24.366 23.71l6.171 5.952-2.43 2.338-8.619-8.29 8.619-8.29 2.43 2.337-6.171 5.953z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-delete-column\" viewBox=\"0 0 32 32\">\n      <path d=\"M5.279 0v23.265h3.538v-23.265h-3.538z\"></path>\n      <path d=\"M23.183 0v23.265h3.538v-23.265h-3.538z\"></path>\n      <path d=\"M14.231 0v17.797h3.538v-17.797h-3.538z\"></path>\n      <path d=\"M16 28.387l3.613 3.613 2.023-2.023-3.613-3.613 3.613-3.613-2.023-2.023-3.613 3.613-3.613-3.613-2.023 2.023 3.613 3.613-3.613 3.613 2.023 2.023 3.613-3.613z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-delete-row\" viewBox=\"0 0 32 32\">\n      <path d=\"M0 5.279h23.265v3.538h-23.265v-3.538z\"></path>\n      <path d=\"M0 23.183h23.265v3.538h-23.265v-3.538z\"></path>\n      <path d=\"M0 14.231h17.797v3.538h-17.797v-3.538z\"></path>\n      <path d=\"M28.387 16l3.613 3.613-2.023 2.023-3.613-3.613-3.613 3.613-2.023-2.023 3.613-3.613-3.613-3.613 2.023-2.023 3.613 3.613 3.613-3.613 2.023 2.023-3.613 3.613z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-insert-row\" viewBox=\"0 0 32 32\">\n      <path d=\"M1.462 5.493h21.543v3.276h-21.543v-3.276z\"></path>\n      <path d=\"M1.462 22.072h16.48v3.276h-16.48v-3.276z\"></path>\n      <path d=\"M1.462 13.783h21.543v3.276h-21.543v-3.276z\"></path>\n      <path d=\"M24.366 23.71l6.171 5.952-2.43 2.338-8.619-8.29 8.619-8.29 2.43 2.337-6.171 5.953z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-insert-rowb\" viewBox=\"0 0 32 32\">\n      <path d=\"M1.462 26.507h21.543v-3.276h-21.543v3.276z\"></path>\n      <path d=\"M1.462 9.928h16.48v-3.276h-16.48v3.276z\"></path>\n      <path d=\"M1.462 18.217h21.543v-3.276h-21.543v3.276z\"></path>\n      <path d=\"M24.366 8.29l6.171-5.952-2.43-2.338-8.619 8.29 8.619 8.29 2.43-2.337-6.171-5.953z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-insert-column\" viewBox=\"0 0 32 32\">\n      <path d=\"M5.493 1.462v21.543h3.276v-21.543h-3.276z\"></path>\n      <path d=\"M22.072 1.462v16.48h3.276v-16.48h-3.276z\"></path>\n      <path d=\"M13.783 1.462v21.543h3.276v-21.543h-3.276z\"></path>\n      <path d=\"M23.71 24.366l5.952 6.171 2.338-2.43-8.29-8.619-8.29 8.619 2.337 2.43 5.953-6.171z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-insert-columnb\" viewBox=\"0 0 32 32\">\n      <path d=\"M26.507 1.462v21.543h-3.276v-21.543h3.276z\"></path>\n      <path d=\"M9.928 1.462v16.48h-3.276v-16.48h3.276z\"></path>\n      <path d=\"M18.217 1.462v21.543h-3.276v-21.543h3.276z\"></path>\n      <path d=\"M8.29 24.366l-5.952 6.171-2.338-2.43 8.29-8.619 8.29 8.619-2.337 2.43-5.953-6.171z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-code-theme\" viewBox=\"0 0 32 32\">\n        <path d=\"M28.444 12.444v16h-24.924v-24.889h16v-3.556h-15.964c-1.956 0-3.556 1.6-3.556 3.556v24.889c0 1.956 1.6 3.556 3.556 3.556h24.889c1.956 0 3.556-1.6 3.556-3.556v-16h-3.556zM23.218 8.782l1.671 3.662 1.671-3.662 3.662-1.671-3.662-1.671-1.671-3.662-1.671 3.662-3.662 1.671zM16 8.889l-2.222 4.889-4.889 2.222 4.889 2.222 2.222 4.889 2.222-4.889 4.889-2.222-4.889-2.222z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-code\" viewBox=\"0 0 32 32\">\n        <path d=\"M9.946 8.501l-2.204-1.832-7.742 9.331 7.742 9.331 2.204-1.832-6.225-7.499 6.225-7.499zM8.844 17.431h2.862v-2.862h-2.862v2.862zM23.156 14.569h-2.862v2.862h2.862v-2.862zM14.569 17.431h2.862v-2.862h-2.862v2.862zM24.258 6.669l-2.204 1.832 6.225 7.499-6.225 7.499 2.204 1.832 7.742-9.331-7.742-9.331z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-table\" viewBox=\"0 0 32 32\">\n        <path d=\"M22.801 2.286h-22.801v27.429h32v-27.429h-9.199zM19.372 5.714v4.571h-6.801v-4.571h6.801zM19.372 13.714v4.571h-6.801v-4.571h6.801zM3.429 5.714h5.714v4.571h-5.714v-4.571zM3.429 13.714h5.714v4.571h-5.714v-4.571zM3.429 26.286v-4.571h5.714v4.571h-5.714zM12.571 26.286v-4.571h6.801v4.571h-6.801zM28.571 26.286h-5.77v-4.571h5.77v4.571zM28.571 18.286h-5.77v-4.571h5.77v4.571zM22.801 10.286v-4.571h5.77v4.571h-5.77z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-export\" viewBox=\"0 0 32 32\">\n        <path d=\"M28.444 28.444h-24.889v-24.889h12.444v-3.556h-12.444c-1.973 0-3.556 1.6-3.556 3.556v24.889c0 1.956 1.582 3.556 3.556 3.556h24.889c1.956 0 3.556-1.6 3.556-3.556v-12.444h-3.556v12.444zM19.556 0v3.556h6.382l-17.476 17.476 2.507 2.507 17.476-17.476v6.382h3.556v-12.444h-12.444z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-resize\" viewBox=\"0 0 128 32\">\n        <path d=\"M128 32v-5.334h-128v5.334h128zM128 18.666v-5.331h-128v5.331h128zM0 5.334h128v-5.334h-128v5.334z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-edit\" viewBox=\"0 0 32 32\">\n        <path d=\"M19.66 10.703l1.635 1.635-16.104 16.104h-1.635v-1.635l16.104-16.104zM26.059 0.002c-0.444 0-0.907 0.178-1.244 0.515l-3.253 3.253 6.666 6.666 3.253-3.253c0.693-0.693 0.693-1.813 0-2.506l-4.159-4.159c-0.355-0.355-0.8-0.515-1.262-0.515zM19.66 5.673l-19.66 19.66v6.666h6.666l19.66-19.66-6.666-6.666z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-quote\" viewBox=\"0 0 32 32\">\n        <path d=\"M27.769 26.667h-9.316l3.556-7.111h-4.231v-14.222h14.222v12.871l-4.231 8.462zM24.213 23.111h1.351l2.88-5.76v-8.462h-7.111v7.111h6.436l-3.556 7.111zM9.991 26.667h-9.316l3.556-7.111h-4.231v-14.222h14.222v12.871l-4.231 8.462zM6.436 23.111h1.351l2.88-5.76v-8.462h-7.111v7.111h6.436l-3.556 7.111z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-strike\" viewBox=\"0 0 32 32\">\n        <path d=\"M12.444 29.333h7.111v-5.333h-7.111v5.333zM3.556 2.667v5.333h8.889v5.333h7.111v-5.333h8.889v-5.333h-24.889zM0 20.444h32v-3.556h-32v3.556z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-line\" viewBox=\"0 0 32 32\">\n        <path d=\"M0 14h32v4h-32v-4z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-both\" viewBox=\"0 0 32 32\">\n        <path d=\"M2.909 3.636h26.182c1.6 0 2.909 1.309 2.909 2.909v18.909c0 1.6-1.309 2.909-2.909 2.909h-26.182c-1.6 0-2.909-1.309-2.909-2.909v-18.909c0-1.6 1.309-2.909 2.909-2.909zM29.091 25.455v-18.909h-11.636v18.909h11.636zM2.909 25.455h11.636v-18.909h-11.636v18.909zM13.091 11.636h-8.727v2.182h8.727zM13.091 15.273h-8.727v2.182h8.727zM13.091 18.909h-8.727v2.182h8.727z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-copy\" viewBox=\"0 0 32 32\">\n      <path d=\"M22.545-0h-17.455c-1.6 0-2.909 1.309-2.909 2.909v20.364h2.909v-20.364h17.455v-2.909zM26.909 5.818h-16c-1.6 0-2.909 1.309-2.909 2.909v20.364c0 1.6 1.309 2.909 2.909 2.909h16c1.6 0 2.909-1.309 2.909-2.909v-20.364c0-1.6-1.309-2.909-2.909-2.909zM26.909 29.091h-16v-20.364h16v20.364z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-trashcan\" viewBox=\"0 0 32 32\">\n      <path d=\"M23.111 10.667v17.778h-14.222v-17.778h14.222zM20.444 0h-8.889l-1.778 1.778h-6.222v3.556h24.889v-3.556h-6.222l-1.778-1.778zM26.667 7.111h-21.333v21.333c0 1.956 1.6 3.556 3.556 3.556h14.222c1.956 0 3.556-1.6 3.556-3.556v-21.333z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-more\" viewBox=\"0 0 32 32\">\n      <path d=\"M4 12c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zM28 12c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zM16 12c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-upload\" viewBox=\"0 0 32 32\">\n      <path d=\"M25.8 13.387c-0.907-4.6-4.947-8.053-9.8-8.053-3.853 0-7.2 2.187-8.867 5.387-4.013 0.427-7.133 3.827-7.133 7.947 0 4.413 3.587 8 8 8h17.333c3.68 0 6.667-2.987 6.667-6.667 0-3.52-2.733-6.373-6.2-6.613zM25.333 24h-17.333c-2.947 0-5.333-2.387-5.333-5.333 0-2.733 2.040-5.013 4.747-5.293l1.427-0.147 0.667-1.267c1.267-2.44 3.747-3.96 6.493-3.96 3.493 0 6.507 2.48 7.187 5.907l0.4 2 2.040 0.147c2.080 0.133 3.707 1.88 3.707 3.947 0 2.2-1.8 4-4 4zM10.667 17.333h3.4v4h3.867v-4h3.4l-5.333-5.333z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-bug\" viewBox=\"0 0 32 32\">\n      <path d=\"M30.222 8.889h-4.996c-0.8-1.387-1.902-2.578-3.236-3.484l2.898-2.898-2.507-2.507-3.858 3.858c-0.818-0.196-1.653-0.302-2.524-0.302s-1.707 0.107-2.507 0.302l-3.876-3.858-2.507 2.507 2.88 2.898c-1.316 0.907-2.418 2.098-3.218 3.484h-4.996v3.556h3.716c-0.089 0.587-0.16 1.173-0.16 1.778v1.778h-3.556v3.556h3.556v1.778c0 0.604 0.071 1.191 0.16 1.778h-3.716v3.556h4.996c1.849 3.182 5.28 5.333 9.227 5.333s7.378-2.151 9.227-5.333h4.996v-3.556h-3.716c0.089-0.587 0.16-1.173 0.16-1.778v-1.778h3.556v-3.556h-3.556v-1.778c0-0.604-0.071-1.191-0.16-1.778h3.716v-3.556zM23.111 16v5.333c0 0.391-0.053 0.836-0.124 1.244l-0.178 1.156-0.658 1.156c-1.28 2.204-3.627 3.556-6.151 3.556s-4.871-1.369-6.151-3.556l-0.658-1.138-0.178-1.156c-0.071-0.409-0.124-0.853-0.124-1.262v-7.111c0-0.409 0.053-0.853 0.124-1.244l0.178-1.156 0.658-1.156c0.533-0.924 1.28-1.724 2.151-2.329l1.013-0.693 1.316-0.32c0.551-0.142 1.12-0.213 1.671-0.213 0.569 0 1.12 0.071 1.689 0.213l1.209 0.284 1.084 0.747c0.889 0.604 1.618 1.387 2.151 2.329l0.676 1.156 0.178 1.156c0.071 0.391 0.124 0.836 0.124 1.227v1.778zM12.444 19.556h7.111v3.556h-7.111zM12.444 12.445h7.111v3.556h-7.111z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-contract\" viewBox=\"0 0 32 32\">\n      <path d=\"M32 2.256l-8.464 8.464 5.264 5.28h-12.8v-12.8l5.264 5.264 8.48-8.464 2.256 2.256zM2.256 32l8.464-8.464 5.28 5.264v-12.8h-12.8l5.264 5.264-8.464 8.48 2.256 2.256z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-inline-code\" viewBox=\"0 0 32 32\">\n      <path d=\"M11.84 23.36l-7.36-7.36 7.36-7.36-2.24-2.24-9.6 9.6 9.6 9.6 2.24-2.24zM20.16 23.36l7.36-7.36-7.36-7.36 2.24-2.24 9.6 9.6-9.6 9.6-2.24-2.24z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-down\" viewBox=\"0 0 32 32\">\n      <path d=\"M3.76 6.12l12.24 12.213 12.24-12.213 3.76 3.76-16 16-16-16 3.76-3.76z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-up\" viewBox=\"0 0 32 32\">\n      <path d=\"M3.76 25.88l12.24-12.213 12.24 12.213 3.76-3.76-16-16-16 16 3.76 3.76z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-check\" viewBox=\"0 0 32 32\">\n      <path d=\"M28.444 0h-24.889c-1.956 0-3.556 1.6-3.556 3.556v24.889c0 1.956 1.6 3.556 3.556 3.556h24.889c1.956 0 3.556-1.6 3.556-3.556v-24.889c0-1.956-1.6-3.556-3.556-3.556zM28.444 28.445h-24.889v-24.889h24.889v24.889zM26.649 10.667l-2.507-2.524-11.716 11.716-4.587-4.569-2.524 2.507 7.111 7.093z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-theme\" viewBox=\"0 0 32 32\">\n      <path d=\"M16 32c-8.816 0-16-7.184-16-16s7.184-16 16-16 16 6.464 16 14.4c0 5.296-4.304 9.6-9.6 9.6h-2.832c-0.448 0-0.8 0.352-0.8 0.8 0 0.192 0.080 0.368 0.208 0.528 0.656 0.752 1.024 1.696 1.024 2.672 0 2.208-1.792 4-4 4zM16 3.2c-7.056 0-12.8 5.744-12.8 12.8s5.744 12.8 12.8 12.8c0.448 0 0.8-0.352 0.8-0.8 0-0.256-0.128-0.448-0.224-0.56-0.656-0.736-1.008-1.68-1.008-2.64 0-2.208 1.792-4 4-4h2.832c3.536 0 6.4-2.864 6.4-6.4 0-6.176-5.744-11.2-12.8-11.2z\"></path>\n      <path d=\"M9.6 15.2c0 1.325-1.075 2.4-2.4 2.4s-2.4-1.075-2.4-2.4c0-1.325 1.075-2.4 2.4-2.4s2.4 1.075 2.4 2.4z\"></path>\n      <path d=\"M14.4 8.8c0 1.325-1.075 2.4-2.4 2.4s-2.4-1.075-2.4-2.4c0-1.325 1.075-2.4 2.4-2.4s2.4 1.075 2.4 2.4z\"></path>\n      <path d=\"M22.4 8.8c0 1.325-1.075 2.4-2.4 2.4s-2.4-1.075-2.4-2.4c0-1.325 1.075-2.4 2.4-2.4s2.4 1.075 2.4 2.4z\"></path>\n      <path d=\"M27.2 15.2c0 1.325-1.075 2.4-2.4 2.4s-2.4-1.075-2.4-2.4c0-1.325 1.075-2.4 2.4-2.4s2.4 1.075 2.4 2.4z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-help\" viewBox=\"0 0 32 32\">\n      <path d=\"M14.4 25.6h3.2v-3.2h-3.2v3.2zM16 0c-8.832 0-16 7.168-16 16s7.168 16 16 16 16-7.168 16-16-7.168-16-16-16zM16 28.8c-7.056 0-12.8-5.744-12.8-12.8s5.744-12.8 12.8-12.8 12.8 5.744 12.8 12.8-5.744 12.8-12.8 12.8zM16 6.4c-3.536 0-6.4 2.864-6.4 6.4h3.2c0-1.76 1.44-3.2 3.2-3.2s3.2 1.44 3.2 3.2c0 3.2-4.8 2.8-4.8 8h3.2c0-3.6 4.8-4 4.8-8 0-3.536-2.864-6.4-6.4-6.4z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-info\" viewBox=\"0 0 32 32\">\n      <path d=\"M14.4 8h3.2v3.2h-3.2zM14.4 14.4h3.2v9.6h-3.2zM16 0c-8.832 0-16 7.168-16 16s7.168 16 16 16 16-7.168 16-16-7.168-16-16-16zM16 28.8c-7.056 0-12.8-5.744-12.8-12.8s5.744-12.8 12.8-12.8 12.8 5.744 12.8 12.8-5.744 12.8-12.8 12.8z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-fullscreen\" viewBox=\"0 0 32 32\">\n      <path d=\"M32 14.222v-14.222h-14.222l5.849 5.849-17.778 17.778-5.849-5.849v14.222h14.222l-5.849-5.849 17.778-17.778z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-preview\" viewBox=\"0 0 32 32\">\n      <path d=\"M16 8c5.513 0 10.429 3.098 12.829 8-2.4 4.902-7.302 8-12.829 8s-10.429-3.098-12.829-8c2.4-4.902 7.316-8 12.829-8zM16 5.091c-7.273 0-13.484 4.524-16 10.909 2.516 6.385 8.727 10.909 16 10.909s13.484-4.524 16-10.909c-2.516-6.385-8.727-10.909-16-10.909zM16 12.364c2.007 0 3.636 1.629 3.636 3.636s-1.629 3.636-3.636 3.636-3.636-1.629-3.636-3.636 1.629-3.636 3.636-3.636zM16 9.455c-3.607 0-6.545 2.938-6.545 6.545s2.938 6.545 6.545 6.545 6.545-2.938 6.545-6.545-2.938-6.545-6.545-6.545z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-record\" viewBox=\"0 0 32 32\">\n      <path d=\"M24.928 15.17h2.844q0 4.267-2.963 7.467t-7.151 3.832v5.531h-3.319v-5.531q-4.188-0.632-7.151-3.832t-2.963-7.467h2.844q0 3.714 2.647 6.123t6.281 2.41 6.281-2.41 2.647-6.123zM13.946 4.899v10.43q0 0.79 0.593 1.383t1.462 0.593q0.79 0 1.383-0.553t0.593-1.422l0.079-10.43q0-0.869-0.632-1.462t-1.422-0.593-1.422 0.593-0.632 1.462zM16 20.227q-2.054 0-3.556-1.501t-1.501-3.556v-10.114q0-2.054 1.501-3.556t3.556-1.501 3.556 1.501 1.501 3.556v10.114q0 2.054-1.501 3.556t-3.556 1.501z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-pause\" viewBox=\"0 0 32 32\">\n      <path d=\"M20.617 0h9.128v32h-9.128v-32zM2.255 32v-32h9.128v32h-9.128z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-play\" viewBox=\"0 0 32 32\">\n      <path d=\"M3.436 0l25.128 16-25.128 16v-32z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-emoji\" viewBox=\"0 0 32 32\">\n      <path d=\"M16 24.789q-2.779 0-4.995-1.54t-3.192-4.019h2.629q1.878 3.155 5.559 3.155t5.559-3.155h2.629q-0.977 2.479-3.192 4.019t-4.995 1.54zM16 28.845q5.258 0 9.052-3.793t3.793-9.052-3.793-9.052-9.052-3.793-9.052 3.793-3.793 9.052 3.793 9.052 9.052 3.793zM16 0q6.61 0 11.305 4.695t4.695 11.305-4.695 11.305-11.305 4.695-11.305-4.695-4.695-11.305 4.695-11.305 11.305-4.695zM10.366 14.423q-0.977 0-1.69-0.714t-0.714-1.69 0.714-1.69 1.69-0.714 1.69 0.714 0.714 1.69-0.714 1.69-1.69 0.714zM21.634 14.423q-0.977 0-1.69-0.714t-0.714-1.69 0.714-1.69 1.69-0.714 1.69 0.714 0.714 1.69-0.714 1.69-1.69 0.714z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-link\" viewBox=\"0 0 32 32\">\n      <path d=\"M24.038 7.962q3.305 0 5.634 2.366t2.329 5.671-2.329 5.671-5.634 2.366h-6.46v-3.080h6.46q2.028 0 3.493-1.465t1.465-3.493-1.465-3.493-3.493-1.465h-6.46v-3.080h6.46zM9.615 17.577v-3.155h12.77v3.155h-12.77zM3.005 16q0 2.028 1.465 3.493t3.493 1.465h6.46v3.080h-6.46q-3.305 0-5.634-2.366t-2.329-5.671 2.329-5.671 5.634-2.366h6.46v3.080h-6.46q-2.028 0-3.493 1.465t-1.465 3.493z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-redo\" viewBox=\"0 0 32 32\">\n      <path d=\"M26.422 14.605l5.578-5.651v14.092h-14.092l5.725-5.651q-3.523-2.936-8.073-2.936-3.743 0-7.229 2.495t-4.661 6.092l-3.67-1.174q1.615-4.991 5.908-8.147t9.651-3.156q6.239 0 10.862 4.037z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-undo\" viewBox=\"0 0 32 32\">\n      <path d=\"M16.44 10.569q5.358 0 9.615 3.156t5.945 8.147l-3.67 1.174q-1.248-3.817-4.514-6.202t-7.376-2.385q-4.55 0-8.073 2.936l5.725 5.651h-14.092v-14.092l5.578 5.651q4.624-4.037 10.862-4.037z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-align-center\" viewBox=\"0 0 32 32\">\n      <path d=\"M0 0h32v3.583h-32v-3.583zM7.083 7.083h17.833v3.583h-17.833v-3.583zM0 17.75v-3.5h32v3.5h-32zM0 32v-3.583h32v3.583h-32zM7.083 21.333h17.833v3.583h-17.833v-3.583z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-align-left\" viewBox=\"0 0 32 32\">\n      <path d=\"M0 0h32v3.583h-32v-3.583zM0 32v-3.583h32v3.583h-32zM0 17.75v-3.5h32v3.5h-32zM21.333 7.083v3.583h-21.333v-3.583h21.333zM21.333 21.333v3.583h-21.333v-3.583h21.333z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-align-right\" viewBox=\"0 0 32 32\">\n      <path d=\"M0 0h32v3.583h-32v-3.583zM10.667 10.667v-3.583h21.333v3.583h-21.333zM0 17.75v-3.5h32v3.5h-32zM10.667 24.917v-3.583h21.333v3.583h-21.333zM0 32v-3.583h32v3.583h-32z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-bold\" viewBox=\"0 0 32 32\">\n      <path d=\"M18.569 26.328q1.498 0 2.462-1.017t0.963-2.408-0.963-2.408-2.462-1.017h-8.027v6.849h8.027zM10.542 5.779v6.85h6.85q1.391 0 2.408-1.017t1.017-2.408-1.017-2.408-2.408-1.017h-6.849zM23.385 15.518q4.923 2.248 4.923 7.813 0 3.639-2.408 6.154t-6.047 2.515h-16.161v-32h14.341q3.853 0 6.475 2.676t2.622 6.528-3.746 6.314z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-indent\" viewBox=\"0 0 32 32\">\n      <path d=\"M14.25 17.75v-3.5h17.75v3.5h-17.75zM14.25 10.667v-3.583h17.75v3.583h-17.75zM0 0h32v3.583h-32v-3.583zM14.25 24.917v-3.583h17.75v3.583h-17.75zM0 8.917l7.083 7.083-7.083 7.083v-14.167zM0 32v-3.583h32v3.583h-32z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-outdent\" viewBox=\"0 0 32 32\">\n      <path d=\"M14.25 17.75v-3.5h17.75v3.5h-17.75zM14.25 10.667v-3.583h17.75v3.583h-17.75zM0 0h32v3.583h-32v-3.583zM0 32v-3.583h32v3.583h-32zM0 16l7.083-7.083v14.167zM14.25 24.917v-3.583h17.75v3.583h-17.75z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-italic\" viewBox=\"0 0 32 32\">\n      <path d=\"M11.398 0h18.301v6.849h-6.421l-7.706 18.301h5.030v6.849h-18.301v-6.849h6.421l7.706-18.301h-5.030v-6.849z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-list\" viewBox=\"0 0 32 32\">\n      <path d=\"M7.777 3.929h24.223v3.403h-24.223v-3.403zM7.777 17.701v-3.403h24.223v3.403h-24.223zM7.777 28.071v-3.403h24.223v3.403h-24.223zM2.592 23.777q1.053 0 1.823 0.77t0.77 1.823-0.77 1.823-1.823 0.77-1.823-0.77-0.77-1.823 0.77-1.823 1.823-0.77zM2.592 3.038q1.053 0 1.823 0.729t0.77 1.863-0.77 1.863-1.823 0.729-1.823-0.729-0.77-1.863 0.77-1.863 1.823-0.729zM2.592 13.408q1.053 0 1.823 0.729t0.77 1.863-0.77 1.863-1.823 0.729-1.823-0.729-0.77-1.863 0.77-1.863 1.823-0.729z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-ordered-list\" viewBox=\"0 0 32 32\">\n      <path d=\"M8.375 17.659v-3.319h23.625v3.319h-23.625zM8.375 27.773v-3.319h23.625v3.319h-23.625zM8.375 4.227h23.625v3.319h-23.625v-3.319zM0 14.341v-1.738h5.057v1.58l-3.081 3.477h3.081v1.738h-5.057v-1.58l3.002-3.477h-3.002zM1.659 9.284v-5.057h-1.659v-1.738h3.319v6.795h-1.659zM0 24.454v-1.738h5.057v6.795h-5.057v-1.738h3.319v-0.79h-1.659v-1.738h1.659v-0.79h-3.319z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-mp-wechat\" viewBox=\"0 0 32 32\">\n      <path d=\"M6.927 17.719s-3.040-3.431-2.915-6.942c0.16-4.453 4.738-10.257 11.359-10.257 1.884 0 5.653 0 10.328 5.52 0.249 0.302-15.075-3.84-18.772 11.679z\"></path>\n      <path d=\"M17.477 9.301s3.946-1.298 7.271-0.178c4.222 1.422 8.693 6.826 6.809 13.182-0.533 1.804-1.609 5.413-8.231 8.32-0.356 0.16 10.613-13.351-5.849-21.323z\"></path>\n      <path d=\"M10.944 24.332c-1.938 2.035-3.751 1.742-3.751 1.742l0.578-3.191c-5.235-3.44-6.373-10.328-6.453-10.106-2.444 6.817-0.916 11.377 0.027 13.004 3.315 5.733 11.982 7.351 17.484 3.893 2.969-1.867 4.533-7.057 4.533-7.057-5.298 2.338-9.342 2.569-12.417 1.715z\"></path>\n    </symbol>\n    <symbol id=\"vditor-icon-zhihu\" viewBox=\"0 0 32 32\">\n      <path d=\"M17.167 17.769s0-2.583-1.25-2.667c-1.25-0.167-5.167 0-5.167 0v-8h5.833s-0.083-2.667-1.167-2.667h-9.5l1.583-4.25s-2.333 0.167-3.25 1.667c-0.833 1.5-3.5 9.167-3.5 9.167s0.917 0.417 2.417-0.75c1.5-1.083 2-3.083 2-3.083l2.75-0.167 0.083 8.083s-4.917-0.083-5.833 0c-1 0.083-1.5 2.667-1.5 2.667h7.417s-0.667 4.583-2.5 7.75c-1.917 3.333-5.583 5.917-5.583 5.917s2.583 1.083 5.167-0.417 4.417-8.083 4.417-8.083l5.917 7.417s0.5-3.5-0.083-4.583c-0.667-1-4.167-5-4.167-5l-1.5 1.333 1.083-4.417 6.333 0.083zM18.667 4.269l-0.083 23.999h2.417l0.833 2.917 4.25-2.917h5.917v-23.999h-13.333zM29.333 25.602h-2.75l-3.5 2.667-0.75-2.667h-0.75v-18.582h7.75v18.582z\"></path>\n    </symbol>\n  </defs>\n</svg>`\n);\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/markmap/prism.css",
    "content": "/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: black;\n\tbackground: none;\n\ttext-shadow: 0 1px white;\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground: #f5f2f0;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .1em;\n\tborder-radius: .3em;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: slategray;\n}\n\n.token.punctuation {\n\tcolor: #999;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n\tcolor: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n\tcolor: #9a6e3a;\n\t/* This background color was intended by the author of this theme. */\n\tbackground: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n\tcolor: #07a;\n}\n\n.token.function,\n.token.class-name {\n\tcolor: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n\tcolor: #e90;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/a11y/assistive-mml.js",
    "content": "!function(t){var e={};function i(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)i.d(n,o,function(e){return t[e]}.bind(null,o));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,\"a\",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p=\"\",i(i.s=5)}([function(t,e,i){\"use strict\";var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),r=this&&this.__assign||function(){return(r=Object.assign||function(t){for(var e,i=1,n=arguments.length;i<n;i++)for(var o in e=arguments[i])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)},s=this&&this.__read||function(t,e){var i=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,o,r=i.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(n=r.next()).done;)s.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(i=r.return)&&i.call(r)}finally{if(o)throw o.error}}return s},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(s(arguments[e]));return t},l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,i=e&&t[e],n=0;if(i)return i.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AssistiveMmlHandler=e.AssistiveMmlMathDocumentMixin=e.AssistiveMmlMathItemMixin=e.LimitedMmlVisitor=void 0;var u=i(2),c=i(3),p=i(4),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.getAttributes=function(e){return t.prototype.getAttributes.call(this,e).replace(/ ?id=\".*?\"/,\"\")},e}(c.SerializedMmlVisitor);function m(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.assistiveMml=function(t,e){if(void 0===e&&(e=!1),!(this.state()>=u.STATE.ASSISTIVEMML)){if(!this.isEscaped&&(t.options.enableAssistiveMml||e)){var i=t.adaptor,n=t.toMML(this.root).replace(/\\n */g,\"\").replace(/<!--.*?-->/g,\"\"),o=i.firstChild(i.body(i.parse(n,\"text/html\"))),r=i.node(\"mjx-assistive-mml\",{role:\"presentation\",unselectable:\"on\",display:this.display?\"block\":\"inline\"},[o]);i.setAttribute(this.typesetRoot,\"role\",\"presentation\"),i.setAttribute(i.firstChild(this.typesetRoot),\"aria-hidden\",\"true\"),i.setStyle(this.typesetRoot,\"position\",\"relative\"),i.append(this.typesetRoot,r)}this.state(u.STATE.ASSISTIVEMML)}},e}(t)}function f(t){var e;return(e=function(t){function e(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];var n=t.apply(this,a(e))||this,o=n.constructor,r=o.ProcessBits;return r.has(\"assistive-mml\")||r.allocate(\"assistive-mml\"),n.visitor=new h(n.mmlFactory),n.options.MathItem=m(n.options.MathItem),\"addStyles\"in n&&n.addStyles(o.assistiveStyles),n}return o(e,t),e.prototype.toMML=function(t){return this.visitor.visitTree(t)},e.prototype.assistiveMml=function(){var t,e;if(!this.processed.isSet(\"assistive-mml\")){try{for(var i=l(this.math),n=i.next();!n.done;n=i.next()){n.value.assistiveMml(this)}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}this.processed.set(\"assistive-mml\")}return this},e.prototype.state=function(e,i){return void 0===i&&(i=!1),t.prototype.state.call(this,e,i),e<u.STATE.ASSISTIVEMML&&this.processed.clear(\"assistive-mml\"),this},e}(t)).OPTIONS=r(r({},t.OPTIONS),{enableAssistiveMml:!0,renderActions:p.expandable(r(r({},t.OPTIONS.renderActions),{assistiveMml:[u.STATE.ASSISTIVEMML]}))}),e.assistiveStyles={\"mjx-assistive-mml\":{position:\"absolute !important\",top:\"0px\",left:\"0px\",clip:\"rect(1px, 1px, 1px, 1px)\",padding:\"1px 0px 0px 0px !important\",border:\"0px !important\",display:\"block !important\",width:\"auto !important\",overflow:\"hidden !important\",\"-webkit-touch-callout\":\"none\",\"-webkit-user-select\":\"none\",\"-khtml-user-select\":\"none\",\"-moz-user-select\":\"none\",\"-ms-user-select\":\"none\",\"user-select\":\"none\"},'mjx-assistive-mml[display=\"block\"]':{width:\"100% !important\"}},e}e.LimitedMmlVisitor=h,u.newState(\"ASSISTIVEMML\",153),e.AssistiveMmlMathItemMixin=m,e.AssistiveMmlMathDocumentMixin=f,e.AssistiveMmlHandler=function(t){return t.documentClass=f(t.documentClass),t}},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DATAMJX=MathJax._.core.MmlTree.SerializedMmlVisitor.DATAMJX,e.toEntity=MathJax._.core.MmlTree.SerializedMmlVisitor.toEntity,e.SerializedMmlVisitor=MathJax._.core.MmlTree.SerializedMmlVisitor.SerializedMmlVisitor},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,i){\"use strict\";i.r(e);var n=i(1),o=i(0);Object(n.combineWithMathJax)({_:{a11y:{\"assistive-mml\":o}}}),MathJax.startup&&MathJax.startup.extendHandler((function(t){return Object(o.AssistiveMmlHandler)(t)}))}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/a11y/complexity.js",
    "content": "!function(t){var e={};function i(o){if(e[o])return e[o].exports;var r=e[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.m=t,i.c=e,i.d=function(t,e,o){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},i.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var r in t)i.d(o,r,function(e){return t[e]}.bind(null,r));return o},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,\"a\",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p=\"\",i(i.s=9)}([function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,i){\"use strict\";var o,r=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,i=1,o=arguments.length;i<o;i++)for(var r in e=arguments[i])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)},s=this&&this.__read||function(t,e){var i=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!i)return t;var o,r,n=i.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(o=n.next()).done;)s.push(o.value)}catch(t){r={error:t}}finally{try{o&&!o.done&&(i=n.return)&&i.call(n)}finally{if(r)throw r.error}}return s},l=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(s(arguments[e]));return t},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,i=e&&t[e],o=0;if(i)return i.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ComplexityHandler=e.ComplexityMathDocumentMixin=e.ComplexityMathItemMixin=void 0;var c=i(7),p=i(2),u=i(3),h=i(5);function y(t,e){return function(t){function i(){return null!==t&&t.apply(this,arguments)||this}return r(i,t),i.prototype.complexity=function(t,i){void 0===i&&(i=!1),this.state()>=c.STATE.COMPLEXITY||(this.isEscaped||!t.options.enableComplexity&&!i||(this.enrich(t,!0),e(this.root)),this.state(c.STATE.COMPLEXITY))},i}(t)}function d(t){var e;return(e=function(t){function e(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];var o=t.apply(this,l(e))||this,r=o.constructor.ProcessBits;r.has(\"complexity\")||r.allocate(\"complexity\");var n=h.selectOptionsFromKeys(o.options,o.options.ComplexityVisitor.OPTIONS);o.complexityVisitor=new o.options.ComplexityVisitor(o.mmlFactory,n);var s=function(t){return o.complexityVisitor.visitTree(t)};return o.options.MathItem=y(o.options.MathItem,s),o}return r(e,t),e.prototype.complexity=function(){var t,e;if(!this.processed.isSet(\"complexity\")){if(this.options.enableComplexity)try{for(var i=a(this.math),o=i.next();!o.done;o=i.next()){o.value.complexity(this)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}this.processed.set(\"complexity\")}return this},e.prototype.state=function(e,i){return void 0===i&&(i=!1),t.prototype.state.call(this,e,i),e<c.STATE.COMPLEXITY&&this.processed.clear(\"complexity\"),this},e}(t)).OPTIONS=n(n(n({},t.OPTIONS),u.ComplexityVisitor.OPTIONS),{enableComplexity:!0,ComplexityVisitor:u.ComplexityVisitor,renderActions:h.expandable(n(n({},t.OPTIONS.renderActions),{complexity:[c.STATE.COMPLEXITY]}))}),e}c.newState(\"COMPLEXITY\",40),e.ComplexityMathItemMixin=y,e.ComplexityMathDocumentMixin=d,e.ComplexityHandler=function(t,e){return void 0===e&&(e=null),!t.documentClass.prototype.enrich&&e&&(t=p.EnrichHandler(t,e)),t.documentClass=d(t.documentClass),t}},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EnrichedMathItemMixin=MathJax._.a11y[\"semantic-enrich\"].EnrichedMathItemMixin,e.EnrichedMathDocumentMixin=MathJax._.a11y[\"semantic-enrich\"].EnrichedMathDocumentMixin,e.EnrichHandler=MathJax._.a11y[\"semantic-enrich\"].EnrichHandler},function(t,e,i){\"use strict\";var o,r=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,i=e&&t[e],o=0;if(i)return i.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ComplexityVisitor=void 0;var s=i(8),l=i(4),a=i(5),c=function(t){function e(e,i){var o=t.call(this,e)||this;o.complexity={text:.5,token:.5,child:1,script:.8,sqrt:2,subsup:2,underover:2,fraction:2,enclose:2,action:2,phantom:0,xml:2,glyph:2};var r=o.constructor;return o.options=a.userOptions(a.defaultOptions({},r.OPTIONS),i),o.collapse=new o.options.Collapse(o),o.factory=e,o}return r(e,t),e.prototype.visitTree=function(e){t.prototype.visitTree.call(this,e,!0),this.options.makeCollapsible&&this.collapse.makeCollapse(e)},e.prototype.visitNode=function(e,i){if(!e.attributes.get(\"data-semantic-complexity\"))return t.prototype.visitNode.call(this,e,i)},e.prototype.visitDefault=function(t,e){var i;if(t.isToken){var o=t.getText();i=this.complexity.text*o.length+this.complexity.token}else i=this.childrenComplexity(t);return this.setComplexity(t,i,e)},e.prototype.visitMfracNode=function(t,e){var i=this.childrenComplexity(t)*this.complexity.script+this.complexity.fraction;return this.setComplexity(t,i,e)},e.prototype.visitMsqrtNode=function(t,e){var i=this.childrenComplexity(t)+this.complexity.sqrt;return this.setComplexity(t,i,e)},e.prototype.visitMrootNode=function(t,e){var i=this.childrenComplexity(t)+this.complexity.sqrt-(1-this.complexity.script)*this.getComplexity(t.childNodes[1]);return this.setComplexity(t,i,e)},e.prototype.visitMphantomNode=function(t,e){return this.setComplexity(t,this.complexity.phantom,e)},e.prototype.visitMsNode=function(t,e){var i=(t.attributes.get(\"lquote\")+t.getText()+t.attributes.get(\"rquote\")).length*this.complexity.text;return this.setComplexity(t,i,e)},e.prototype.visitMsubsupNode=function(e,i){t.prototype.visitDefault.call(this,e,!0);var o=e.childNodes[e.sub],r=e.childNodes[e.sup],n=e.childNodes[e.base],s=Math.max(o?this.getComplexity(o):0,r?this.getComplexity(r):0)*this.complexity.script;return s+=this.complexity.child*((o?1:0)+(r?1:0)),s+=n?this.getComplexity(n)+this.complexity.child:0,s+=this.complexity.subsup,this.setComplexity(e,s,i)},e.prototype.visitMsubNode=function(t,e){return this.visitMsubsupNode(t,e)},e.prototype.visitMsupNode=function(t,e){return this.visitMsubsupNode(t,e)},e.prototype.visitMunderoverNode=function(e,i){t.prototype.visitDefault.call(this,e,!0);var o=e.childNodes[e.under],r=e.childNodes[e.over],n=e.childNodes[e.base],s=Math.max(o?this.getComplexity(o):0,r?this.getComplexity(r):0)*this.complexity.script;return n&&(s=Math.max(this.getComplexity(n),s)),s+=this.complexity.child*((o?1:0)+(r?1:0)+(n?1:0)),s+=this.complexity.underover,this.setComplexity(e,s,i)},e.prototype.visitMunderNode=function(t,e){return this.visitMunderoverNode(t,e)},e.prototype.visitMoverNode=function(t,e){return this.visitMunderoverNode(t,e)},e.prototype.visitMencloseNode=function(t,e){var i=this.childrenComplexity(t)+this.complexity.enclose;return this.setComplexity(t,i,e)},e.prototype.visitMactionNode=function(t,e){this.childrenComplexity(t);var i=this.getComplexity(t.selected);return this.setComplexity(t,i,e)},e.prototype.visitMsemanticsNode=function(t,e){var i=t.childNodes[0],o=0;return i&&(this.visitNode(i,!0),o=this.getComplexity(i)),this.setComplexity(t,o,e)},e.prototype.visitAnnotationNode=function(t,e){return this.setComplexity(t,this.complexity.xml,e)},e.prototype.visitAnnotation_xmlNode=function(t,e){return this.setComplexity(t,this.complexity.xml,e)},e.prototype.visitMglyphNode=function(t,e){return this.setComplexity(t,this.complexity.glyph,e)},e.prototype.getComplexity=function(t){var e=t.getProperty(\"collapsedComplexity\");return null!=e?e:t.attributes.get(\"data-semantic-complexity\")},e.prototype.setComplexity=function(t,e,i){return i&&(this.options.identifyCollapsible&&(e=this.collapse.check(t,e)),t.attributes.set(\"data-semantic-complexity\",e)),e},e.prototype.childrenComplexity=function(e){var i,o;t.prototype.visitDefault.call(this,e,!0);var r=0;try{for(var s=n(e.childNodes),l=s.next();!l.done;l=s.next()){var a=l.value;r+=this.getComplexity(a)}}catch(t){i={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}return e.childNodes.length>1&&(r+=e.childNodes.length*this.complexity.child),r},e.OPTIONS={identifyCollapsible:!0,makeCollapsible:!0,Collapse:l.Collapse},e}(s.MmlVisitor);e.ComplexityVisitor=c},function(t,e,i){\"use strict\";var o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,i=e&&t[e],o=0;if(i)return i.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.Collapse=void 0;var r=function(){function t(e){var i=this;this.cutoff={identifier:3,number:3,text:10,infixop:15,relseq:15,multirel:15,fenced:18,bigop:20,integral:20,fraction:12,sqrt:9,root:12,vector:15,matrix:15,cases:15,superscript:9,subscript:9,subsup:9,punctuated:{endpunct:t.NOCOLLAPSE,startpunct:t.NOCOLLAPSE,value:12}},this.marker={identifier:\"x\",number:\"#\",text:\"...\",appl:{\"limit function\":\"lim\",value:\"f()\"},fraction:\"/\",sqrt:\"\\u221a\",root:\"\\u221a\",superscript:\"\\u25fd\\u02d9\",subscript:\"\\u25fd.\",subsup:\"\\u25fd:\",vector:{binomial:\"(:)\",determinant:\"|:|\",value:\"\\u27e8:\\u27e9\"},matrix:{squarematrix:\"[::]\",rowvector:\"\\u27e8\\u22ef\\u27e9\",columnvector:\"\\u27e8\\u22ee\\u27e9\",determinant:\"|::|\",value:\"(::)\"},cases:\"{:\",infixop:{addition:\"+\",subtraction:\"\\u2212\",multiplication:\"\\u22c5\",implicit:\"\\u22c5\",value:\"+\"},punctuated:{text:\"...\",value:\",\"}},this.collapse=new Map([[\"fenced\",function(t,e){return(e=i.uncollapseChild(e,t,1))>i.cutoff.fenced&&\"leftright\"===t.attributes.get(\"data-semantic-role\")&&(e=i.recordCollapse(t,e,i.getText(t.childNodes[0])+i.getText(t.childNodes[t.childNodes.length-1]))),e}],[\"appl\",function(t,e){if(i.canUncollapse(t,2,2)){e=i.complexity.visitNode(t,!1);var o=i.marker.appl,r=o[t.attributes.get(\"data-semantic-role\")]||o.value;e=i.recordCollapse(t,e,r)}return e}],[\"sqrt\",function(t,e){return(e=i.uncollapseChild(e,t,0))>i.cutoff.sqrt&&(e=i.recordCollapse(t,e,i.marker.sqrt)),e}],[\"root\",function(t,e){return(e=i.uncollapseChild(e,t,0,2))>i.cutoff.sqrt&&(e=i.recordCollapse(t,e,i.marker.sqrt)),e}],[\"enclose\",function(t,e){if(1===i.splitAttribute(t,\"children\").length){var o=i.canUncollapse(t,1);if(o){var r=o.getProperty(\"collapse-marker\");i.unrecordCollapse(o),e=i.recordCollapse(t,i.complexity.visitNode(t,!1),r)}}return e}],[\"bigop\",function(t,e){if(e>i.cutoff.bigop||!t.isKind(\"mo\")){var o=i.splitAttribute(t,\"content\").pop(),r=i.findChildText(t,o);e=i.recordCollapse(t,e,r)}return e}],[\"integral\",function(t,e){if(e>i.cutoff.integral||!t.isKind(\"mo\")){var o=i.splitAttribute(t,\"content\").pop(),r=i.findChildText(t,o);e=i.recordCollapse(t,e,r)}return e}],[\"relseq\",function(t,e){if(e>i.cutoff.relseq){var o=i.splitAttribute(t,\"content\")[0],r=i.findChildText(t,o);e=i.recordCollapse(t,e,r)}return e}],[\"multirel\",function(t,e){if(e>i.cutoff.relseq){var o=i.splitAttribute(t,\"content\")[0],r=i.findChildText(t,o)+\"\\u22ef\";e=i.recordCollapse(t,e,r)}return e}],[\"superscript\",function(t,e){return(e=i.uncollapseChild(e,t,0,2))>i.cutoff.superscript&&(e=i.recordCollapse(t,e,i.marker.superscript)),e}],[\"subscript\",function(t,e){return(e=i.uncollapseChild(e,t,0,2))>i.cutoff.subscript&&(e=i.recordCollapse(t,e,i.marker.subscript)),e}],[\"subsup\",function(t,e){return(e=i.uncollapseChild(e,t,0,3))>i.cutoff.subsup&&(e=i.recordCollapse(t,e,i.marker.subsup)),e}]]),this.idCount=0,this.complexity=e}return t.prototype.check=function(t,e){var i=t.attributes.get(\"data-semantic-type\");return this.collapse.has(i)?this.collapse.get(i).call(this,t,e):this.cutoff.hasOwnProperty(i)?this.defaultCheck(t,e,i):e},t.prototype.defaultCheck=function(t,e,i){var o=t.attributes.get(\"data-semantic-role\"),r=this.cutoff[i];if(e>(\"number\"==typeof r?r:r[o]||r.value)){var n=this.marker[i]||\"??\",s=\"string\"==typeof n?n:n[o]||n.value;e=this.recordCollapse(t,e,s)}return e},t.prototype.recordCollapse=function(t,e,i){return i=\"\\u25c2\"+i+\"\\u25b8\",t.setProperty(\"collapse-marker\",i),t.setProperty(\"collapse-complexity\",e),i.length*this.complexity.complexity.text},t.prototype.unrecordCollapse=function(t){var e=t.getProperty(\"collapse-complexity\");null!=e&&(t.attributes.set(\"data-semantic-complexity\",e),t.removeProperty(\"collapse-complexity\"),t.removeProperty(\"collapse-marker\"))},t.prototype.canUncollapse=function(t,e,i){if(void 0===i&&(i=1),this.splitAttribute(t,\"children\").length===i){var o=1===t.childNodes.length&&t.childNodes[0].isInferred?t.childNodes[0]:t;if(o&&o.childNodes[e]){var r=o.childNodes[e];if(r.getProperty(\"collapse-marker\"))return r}}return null},t.prototype.uncollapseChild=function(t,e,i,o){void 0===o&&(o=1);var r=this.canUncollapse(e,i,o);return r&&(this.unrecordCollapse(r),r.parent!==e&&r.parent.attributes.set(\"data-semantic-complexity\",void 0),t=this.complexity.visitNode(e,!1)),t},t.prototype.splitAttribute=function(t,e){return(t.attributes.get(\"data-semantic-\"+e)||\"\").split(/,/)},t.prototype.getText=function(t){var e=this;return t.isToken?t.getText():t.childNodes.map((function(t){return e.getText(t)})).join(\"\")},t.prototype.findChildText=function(t,e){var i=this.findChild(t,e);return this.getText(i.coreMO()||i)},t.prototype.findChild=function(t,e){var i,r;if(!t||t.attributes.get(\"data-semantic-id\")===e)return t;if(!t.isToken)try{for(var n=o(t.childNodes),s=n.next();!s.done;s=n.next()){var l=s.value,a=this.findChild(l,e);if(a)return a}}catch(t){i={error:t}}finally{try{s&&!s.done&&(r=n.return)&&r.call(n)}finally{if(i)throw i.error}}return null},t.prototype.makeCollapse=function(t){var e=[];t.walkTree((function(t){t.getProperty(\"collapse-marker\")&&e.push(t)})),this.makeActions(e)},t.prototype.makeActions=function(t){var e,i;try{for(var r=o(t),n=r.next();!n.done;n=r.next()){var s=n.value;this.makeAction(s)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(i=r.return)&&i.call(r)}finally{if(e)throw e.error}}},t.prototype.makeId=function(){return\"mjx-collapse-\"+this.idCount++},t.prototype.makeAction=function(t){t.isKind(\"math\")&&(t=this.addMrow(t));var e=this.complexity.factory,i=t.getProperty(\"collapse-marker\"),o=t.parent,r=e.create(\"maction\",{actiontype:\"toggle\",selection:2,\"data-collapsible\":!0,id:this.makeId(),\"data-semantic-complexity\":t.attributes.get(\"data-semantic-complexity\")},[e.create(\"mtext\",{mathcolor:\"blue\"},[e.create(\"text\").setText(i)])]);r.inheritAttributesFrom(t),t.attributes.set(\"data-semantic-complexity\",t.getProperty(\"collapse-complexity\")),t.removeProperty(\"collapse-marker\"),t.removeProperty(\"collapse-complexity\"),o.replaceChild(r,t),r.appendChild(t)},t.prototype.addMrow=function(t){var e,i,r=this.complexity.factory.create(\"mrow\",null,t.childNodes[0].childNodes);t.childNodes[0].setChildren([r]);var n=t.attributes.getAllAttributes();try{for(var s=o(Object.keys(n)),l=s.next();!l.done;l=s.next()){var a=l.value;\"data-semantic-\"===a.substr(0,14)&&(r.attributes.set(a,n[a]),delete n[a])}}catch(t){e={error:t}}finally{try{l&&!l.done&&(i=s.return)&&i.call(s)}finally{if(e)throw e.error}}return r.setProperty(\"collapse-marker\",t.getProperty(\"collapse-marker\")),r.setProperty(\"collapse-complexity\",t.getProperty(\"collapse-complexity\")),t.removeProperty(\"collapse-marker\"),t.removeProperty(\"collapse-complexity\"),r},t.NOCOLLAPSE=1e7,t}();e.Collapse=r},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sreReady=MathJax._.a11y.sre.sreReady},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlVisitor=MathJax._.core.MmlTree.MmlVisitor.MmlVisitor},function(t,e,i){\"use strict\";i.r(e);var o=i(0),r=i(1),n=i(4),s=i(3),l=i(2),a=i(6);Object(o.combineWithMathJax)({_:{a11y:{complexity_ts:r,complexity:{collapse:n,visitor:s},\"semantic-enrich\":l,sre:a}}}),MathJax.startup&&(MathJax.startup.extendHandler((function(t){return Object(r.ComplexityHandler)(t)})),Object(o.combineDefaults)(MathJax.config,\"options\",MathJax.config[\"a11y/complexity\"]||{}))}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/a11y/explorer.js",
    "content": "!function(t){var e={};function o(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=t,o.c=e,o.d=function(t,e,r){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},o.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var n in t)o.d(r,n,function(e){return t[e]}.bind(null,n));return r},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,\"a\",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p=\"\",o(o.s=14)}([function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sreReady=MathJax._.a11y.sre.sreReady},function(t,e,o){\"use strict\";var r=this&&this.__read||function(t,e){var o=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!o)return t;var r,n,i=o.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}return a},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(r(arguments[e]));return t},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,o=e&&t[e],r=0;if(o)return o.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractExplorer=void 0,o(0);var a=function(){function t(t,e,o){for(var r=[],n=3;n<arguments.length;n++)r[n-3]=arguments[n];this.document=t,this.region=e,this.node=o,this.stoppable=!0,this.events=[],this.highlighter=this.getHighlighter(),this._active=!1}return t.stopEvent=function(t){t.preventDefault?t.preventDefault():t.returnValue=!1,t.stopImmediatePropagation?t.stopImmediatePropagation():t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0},t.create=function(t,e,o){for(var r=[],i=3;i<arguments.length;i++)r[i-3]=arguments[i];var a=new(this.bind.apply(this,n([void 0,t,e,o],r)));return a},t.prototype.Events=function(){return this.events},Object.defineProperty(t.prototype,\"active\",{get:function(){return this._active},set:function(t){this._active=t},enumerable:!1,configurable:!0}),t.prototype.Attach=function(){this.AddEvents()},t.prototype.Detach=function(){this.RemoveEvents()},t.prototype.Start=function(){this.highlighter=this.getHighlighter(),this.active=!0},t.prototype.Stop=function(){this.active&&(this.region.Clear(),this.region.Hide(),this.active=!1)},t.prototype.AddEvents=function(){var t,e;try{for(var o=i(this.events),n=o.next();!n.done;n=o.next()){var a=r(n.value,2),s=a[0],l=a[1];this.node.addEventListener(s,l)}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}},t.prototype.RemoveEvents=function(){var t,e;try{for(var o=i(this.events),n=o.next();!n.done;n=o.next()){var a=r(n.value,2),s=a[0],l=a[1];this.node.removeEventListener(s,l)}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}},t.prototype.Update=function(t){void 0===t&&(t=!1)},t.prototype.getHighlighter=function(){var t=this.document.options.a11y,e={color:t.foregroundColor.toLowerCase(),alpha:t.foregroundOpacity/100},o={color:t.backgroundColor.toLowerCase(),alpha:t.backgroundOpacity/100};return sre.HighlighterFactory.highlighter(o,e,{renderer:this.document.outputJax.name,browser:\"v3\"})},t.prototype.stopEvent=function(e){this.stoppable&&t.stopEvent(e)},t}();e.AbstractExplorer=a},function(t,e,o){\"use strict\";var r,n,i,a,s=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.HoverRegion=e.LiveRegion=e.ToolTip=e.StringRegion=e.DummyRegion=e.AbstractRegion=void 0;var l=o(13);o(0);var c=function(){function t(t){this.document=t,this.CLASS=this.constructor,this.AddStyles(),this.AddElement()}return t.prototype.AddStyles=function(){if(!this.CLASS.styleAdded){var t=this.document.adaptor.node(\"style\");t.innerHTML=this.CLASS.style.cssText,this.document.adaptor.head(this.document.adaptor.document).appendChild(t),this.CLASS.styleAdded=!0}},t.prototype.AddElement=function(){var t=this.document.adaptor.node(\"div\");t.classList.add(this.CLASS.className),t.style.backgroundColor=\"white\",this.div=t,this.inner=this.document.adaptor.node(\"div\"),this.div.appendChild(this.inner),this.document.adaptor.body(this.document.adaptor.document).appendChild(this.div)},t.prototype.Show=function(t,e){this.position(t),this.highlight(e),this.div.classList.add(this.CLASS.className+\"_Show\")},t.prototype.Hide=function(){this.div.classList.remove(this.CLASS.className+\"_Show\")},t.prototype.stackRegions=function(t){for(var e=t.getBoundingClientRect(),o=0,r=Number.POSITIVE_INFINITY,n=this.document.adaptor.document.getElementsByClassName(this.CLASS.className+\"_Show\"),i=0,a=void 0;a=n[i];i++)a!==this.div&&(o=Math.max(a.getBoundingClientRect().bottom,o),r=Math.min(a.getBoundingClientRect().left,r));var s=(o||e.bottom+10)+window.pageYOffset,l=(r<Number.POSITIVE_INFINITY?r:e.left)+window.pageXOffset;this.div.style.top=s+\"px\",this.div.style.left=l+\"px\"},t.styleAdded=!1,t}();e.AbstractRegion=c;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.Clear=function(){},e.prototype.Update=function(){},e.prototype.Hide=function(){},e.prototype.Show=function(){},e.prototype.AddElement=function(){},e.prototype.AddStyles=function(){},e.prototype.position=function(){},e.prototype.highlight=function(t){},e}(c);e.DummyRegion=h;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.Clear=function(){this.Update(\"\"),this.inner.style.top=\"\",this.inner.style.backgroundColor=\"\"},e.prototype.Update=function(t){this.inner.textContent=\"\",this.inner.textContent=t},e.prototype.position=function(t){this.stackRegions(t)},e.prototype.highlight=function(t){var e=t.colorString();this.inner.style.backgroundColor=e.background,this.inner.style.color=e.foreground},e}(c);e.StringRegion=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.className=\"MJX_ToolTip\",e.style=new l.CssStyles(((n={})[\".\"+e.className]={position:\"absolute\",display:\"inline-block\",height:\"1px\",width:\"1px\"},n[\".\"+e.className+\"_Show\"]={width:\"auto\",height:\"auto\",opacity:1,\"text-align\":\"center\",\"border-radius\":\"6px\",padding:\"0px 0px\",\"border-bottom\":\"1px dotted black\",position:\"absolute\",\"z-index\":202},n)),e}(u);e.ToolTip=p;var d=function(t){function e(e){var o=t.call(this,e)||this;return o.document=e,o.div.setAttribute(\"aria-live\",\"assertive\"),o}return s(e,t),e.className=\"MJX_LiveRegion\",e.style=new l.CssStyles(((i={})[\".\"+e.className]={position:\"absolute\",top:\"0\",height:\"1px\",width:\"1px\",padding:\"1px\",overflow:\"hidden\"},i[\".\"+e.className+\"_Show\"]={top:\"0\",position:\"absolute\",width:\"auto\",height:\"auto\",padding:\"0px 0px\",opacity:1,\"z-index\":\"202\",left:0,right:0,margin:\"0 auto\",\"background-color\":\"rgba(0, 0, 255, 0.2)\",\"box-shadow\":\"0px 10px 20px #888\",border:\"2px solid #CCCCCC\"},i)),e}(u);e.LiveRegion=d;var f=function(t){function e(e){var o=t.call(this,e)||this;return o.document=e,o.inner.style.lineHeight=\"0\",o}return s(e,t),e.prototype.position=function(t){var e,o=t.getBoundingClientRect(),r=this.div.getBoundingClientRect(),n=o.left+o.width/2-r.width/2;switch(n=n<0?0:n,n+=window.pageXOffset,this.document.options.a11y.align){case\"top\":e=o.top-r.height-10;break;case\"bottom\":e=o.bottom+10;break;case\"center\":default:e=o.top+o.height/2-r.height/2}e=(e+=window.pageYOffset)<0?0:e,this.div.style.top=e+\"px\",this.div.style.left=n+\"px\"},e.prototype.highlight=function(t){if(!this.inner.firstChild||this.inner.firstChild.hasAttribute(\"sre-highlight\")){var e=t.colorString();this.inner.style.backgroundColor=e.background,this.inner.style.color=e.foreground}},e.prototype.Show=function(e,o){this.div.style.fontSize=this.document.options.a11y.magnify,this.Update(e),t.prototype.Show.call(this,e,o)},e.prototype.Clear=function(){this.inner.textContent=\"\",this.inner.style.top=\"\",this.inner.style.backgroundColor=\"\"},e.prototype.Update=function(t){this.Clear();var e=this.cloneNode(t);this.inner.appendChild(e)},e.prototype.cloneNode=function(t){var e=t.cloneNode(!0);if(\"MJX-CONTAINER\"!==e.nodeName){\"g\"!==e.nodeName&&(e.style.marginLeft=e.style.marginRight=\"0\");for(var o=t;o&&\"MJX-CONTAINER\"!==o.nodeName;)o=o.parentNode;if(\"MJX-MATH\"!==e.nodeName&&\"svg\"!==e.nodeName)if(\"svg\"===(e=o.firstChild.cloneNode(!1).appendChild(e).parentNode).nodeName){e.firstChild.setAttribute(\"transform\",\"matrix(1 0 0 -1 0 0)\");var r=parseFloat(e.getAttribute(\"viewBox\").split(/ /)[2]),n=parseFloat(e.getAttribute(\"width\")),i=t.getBBox(),a=i.x,s=i.y,l=i.width,c=i.height;e.setAttribute(\"viewBox\",[a,-(s+c),l,c].join(\" \")),e.removeAttribute(\"style\"),e.setAttribute(\"width\",n/r*l+\"ex\"),e.setAttribute(\"height\",n/r*c+\"ex\"),o.setAttribute(\"sre-highlight\",\"false\")}(e=o.cloneNode(!1).appendChild(e).parentNode).style.margin=\"0\"}return e},e.className=\"MJX_HoverRegion\",e.style=new l.CssStyles(((a={})[\".\"+e.className]={position:\"absolute\",height:\"1px\",width:\"1px\",padding:\"1px\",overflow:\"hidden\"},a[\".\"+e.className+\"_Show\"]={position:\"absolute\",width:\"max-content\",height:\"auto\",padding:\"0px 0px\",opacity:1,\"z-index\":\"202\",margin:\"0 auto\",\"background-color\":\"rgba(0, 0, 255, 0.2)\",\"box-shadow\":\"0px 10px 20px #888\",border:\"2px solid #CCCCCC\"},a)),e}(c);e.HoverRegion=f},function(t,e,o){\"use strict\";var r,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),i=this&&this.__assign||function(){return(i=Object.assign||function(t){for(var e,o=1,r=arguments.length;o<r;o++)for(var n in e=arguments[o])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}).apply(this,arguments)},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,o=e&&t[e],r=0;if(o)return o.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},s=this&&this.__read||function(t,e){var o=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!o)return t;var r,n,i=o.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}return a},l=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(s(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.setA11yOption=e.setA11yOptions=e.ExplorerHandler=e.ExplorerMathDocumentMixin=e.ExplorerMathItemMixin=void 0;var c=o(8),h=o(9),u=o(10),p=o(11),d=o(12),f=o(5),y=o(6),v=o(7),g=o(2);function m(t,e){return function(t){function o(){var e=null!==t&&t.apply(this,arguments)||this;return e.explorers={},e.attached=[],e.restart=!1,e.refocus=!1,e.savedId=null,e}return n(o,t),o.prototype.explorable=function(t,o){if(void 0===o&&(o=!1),!(this.state()>=c.STATE.EXPLORER)){if(!this.isEscaped&&(t.options.enableExplorer||o)){var r=this.typesetRoot,n=e(this.root);this.savedId&&(this.typesetRoot.setAttribute(\"sre-explorer-id\",this.savedId),this.savedId=null),this.explorers=function(t,e,o){var r,n,i={};try{for(var s=a(Object.keys(_)),l=s.next();!l.done;l=s.next()){var c=l.value;i[c]=_[c](t,e,o)}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return i}(t,r,n),this.attachExplorers(t)}this.state(c.STATE.EXPLORER)}},o.prototype.attachExplorers=function(t){var e,o;this.attached=[];try{for(var r=a(Object.keys(this.explorers)),n=r.next();!n.done;n=r.next()){var i=n.value,s=this.explorers[i];t.options.a11y[i]?(s.Attach(),this.attached.push(s)):s.Detach()}}catch(t){e={error:t}}finally{try{n&&!n.done&&(o=r.return)&&o.call(r)}finally{if(e)throw e.error}}this.addExplorers(this.attached)},o.prototype.rerender=function(e,o){var r,n;void 0===o&&(o=c.STATE.RERENDER),this.savedId=this.typesetRoot.getAttribute(\"sre-explorer-id\"),this.refocus=window.document.activeElement===this.typesetRoot;try{for(var i=a(this.attached),s=i.next();!s.done;s=i.next()){var l=s.value;l.active&&(this.restart=!0,l.Stop())}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}t.prototype.rerender.call(this,e,o)},o.prototype.updateDocument=function(e){t.prototype.updateDocument.call(this,e),this.refocus&&this.typesetRoot.focus(),this.restart&&this.attached.forEach((function(t){return t.Start()})),this.refocus=this.restart=!1},o.prototype.addExplorers=function(t){var e,o;if(!(t.length<=1)){var r=null;try{for(var n=a(this.attached),i=n.next();!i.done;i=n.next()){var s=i.value;s instanceof f.AbstractKeyExplorer&&(s.stoppable=!1,r=s)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(o=n.return)&&o.call(n)}finally{if(e)throw e.error}}r&&(r.stoppable=!0)}},o}(t)}function b(t){var e;return(e=function(t){function e(){for(var e=[],o=0;o<arguments.length;o++)e[o]=arguments[o];var r=t.apply(this,l(e))||this,n=r.constructor.ProcessBits;n.has(\"explorer\")||n.allocate(\"explorer\");var i=new p.SerializedMmlVisitor(r.mmlFactory),a=function(t){return i.visitTree(t)};return r.options.MathItem=m(r.options.MathItem,a),r.explorerRegions=x(r),r}return n(e,t),e.prototype.explorable=function(){var t,e;if(!this.processed.isSet(\"explorer\")){if(this.options.enableExplorer)try{for(var o=a(this.math),r=o.next();!r.done;r=o.next()){r.value.explorable(this)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}this.processed.set(\"explorer\")}return this},e.prototype.state=function(e,o){return void 0===o&&(o=!1),t.prototype.state.call(this,e,o),e<c.STATE.EXPLORER&&this.processed.clear(\"explorer\"),this},e}(t)).OPTIONS=i(i({},t.OPTIONS),{enrichSpeech:\"shallow\",enableExplorer:!0,renderActions:u.expandable(i(i({},t.OPTIONS.renderActions),{explorable:[c.STATE.EXPLORER]})),a11y:{align:\"top\",backgroundColor:\"Blue\",backgroundOpacity:20,braille:!1,flame:!1,foregroundColor:\"Black\",foregroundOpacity:100,highlight:\"None\",hover:!1,infoPrefix:!1,infoRole:!1,infoType:!1,keyMagnifier:!1,locale:\"en\",magnification:\"None\",magnify:\"400%\",mouseMagnifier:!1,speech:!0,speechRules:\"mathspeak-default\",subtitles:!0,treeColoring:!1,viewBraille:!1}}),e}function x(t){return{speechRegion:new g.LiveRegion(t),brailleRegion:new g.LiveRegion(t),magnifier:new g.HoverRegion(t),tooltip1:new g.ToolTip(t),tooltip2:new g.ToolTip(t),tooltip3:new g.ToolTip(t)}}c.newState(\"EXPLORER\",160),e.ExplorerMathItemMixin=m,e.ExplorerMathDocumentMixin=b,e.ExplorerHandler=function(t,e){return void 0===e&&(e=null),!t.documentClass.prototype.enrich&&e&&(t=h.EnrichHandler(t,e)),t.documentClass=b(t.documentClass),t};var _={speech:function(t,e){for(var o,r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var i=(o=f.SpeechExplorer).create.apply(o,l([t,t.explorerRegions.speechRegion,e],r)),a=s(t.options.a11y.speechRules.split(\"-\"),2),c=a[0],h=a[1];return i.speechGenerator.setOptions({locale:t.options.a11y.locale,domain:c,style:h,modality:\"speech\",cache:!1}),i.showRegion=\"subtitles\",i},braille:function(t,e){for(var o,r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var i=(o=f.SpeechExplorer).create.apply(o,l([t,t.explorerRegions.brailleRegion,e],r));return i.speechGenerator.setOptions({locale:\"nemeth\",domain:\"default\",style:\"default\",modality:\"braille\"}),i.showRegion=\"viewBraille\",i},keyMagnifier:function(t,e){for(var o,r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];return(o=f.Magnifier).create.apply(o,l([t,t.explorerRegions.magnifier,e],r))},mouseMagnifier:function(t,e){for(var o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];return y.ContentHoverer.create(t,t.explorerRegions.magnifier,e,(function(t){return t.hasAttribute(\"data-semantic-type\")}),(function(t){return t}))},hover:function(t,e){for(var o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];return y.FlameHoverer.create(t,null,e)},infoType:function(t,e){for(var o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];return y.ValueHoverer.create(t,t.explorerRegions.tooltip1,e,(function(t){return t.hasAttribute(\"data-semantic-type\")}),(function(t){return t.getAttribute(\"data-semantic-type\")}))},infoRole:function(t,e){for(var o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];return y.ValueHoverer.create(t,t.explorerRegions.tooltip2,e,(function(t){return t.hasAttribute(\"data-semantic-role\")}),(function(t){return t.getAttribute(\"data-semantic-role\")}))},infoPrefix:function(t,e){for(var o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];return y.ValueHoverer.create(t,t.explorerRegions.tooltip3,e,(function(t){return t.hasAttribute(\"data-semantic-prefix\")}),(function(t){return t.getAttribute(\"data-semantic-prefix\")}))},flame:function(t,e){for(var o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];return v.FlameColorer.create(t,null,e)},treeColoring:function(t,e){for(var o=[],r=2;r<arguments.length;r++)o[r-2]=arguments[r];return v.TreeColorer.create.apply(v.TreeColorer,l([t,null,e],o))}};function M(t,e,o){switch(e){case\"magnification\":switch(o){case\"None\":t.options.a11y.magnification=o,t.options.a11y.keyMagnifier=!1,t.options.a11y.mouseMagnifier=!1;break;case\"Keyboard\":t.options.a11y.magnification=o,t.options.a11y.keyMagnifier=!0,t.options.a11y.mouseMagnifier=!1;break;case\"Mouse\":t.options.a11y.magnification=o,t.options.a11y.keyMagnifier=!1,t.options.a11y.mouseMagnifier=!0}break;case\"highlight\":switch(o){case\"None\":t.options.a11y.highlight=o,t.options.a11y.hover=!1,t.options.a11y.flame=!1;break;case\"Hover\":t.options.a11y.highlight=o,t.options.a11y.hover=!0,t.options.a11y.flame=!1;break;case\"Flame\":t.options.a11y.highlight=o,t.options.a11y.hover=!1,t.options.a11y.flame=!0}break;default:t.options.a11y[e]=o}}e.setA11yOptions=function(t,e){var o,r;for(var n in e)void 0!==t.options.a11y[n]&&M(t,n,e[n]);try{for(var i=a(t.math),s=i.next();!s.done;s=i.next()){s.value.attachExplorers(t)}}catch(t){o={error:t}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}},e.setA11yOption=M;var S={},O=function(t,e){var o,r,n=sre.ClearspeakPreferences.getLocalePreferences()[e];if(!n){var i=t.findID(\"Accessibility\",\"Speech\",\"Clearspeak\");return i&&i.disable(),null}!function(t,e){var o,r,n=t.pool.lookup(\"speechRules\"),i=function(e){if(S[e])return\"continue\";t.factory.get(\"variable\")(t.factory,{name:\"csprf_\"+e,setter:function(t){S[e]=t,n.setValue(\"clearspeak-\"+sre.ClearspeakPreferences.addPreference(sre.Engine.DOMAIN_TO_STYLES.clearspeak,e,t))},getter:function(){return S[e]||\"Auto\"}},t.pool)};try{for(var s=a(e),l=s.next();!l.done;l=s.next())i(l.value)}catch(t){o={error:t}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(o)throw o.error}}}(t,Object.keys(n));var s=[],l=function(t){s.push({title:t,values:n[t].map((function(e){return e.replace(RegExp(\"^\"+t+\"_\"),\"\")})),variable:\"csprf_\"+t})};try{for(var c=a(Object.getOwnPropertyNames(n)),h=c.next();!h.done;h=c.next()){l(h.value)}}catch(t){o={error:t}}finally{try{h&&!h.done&&(r=c.return)&&r.call(c)}finally{if(o)throw o.error}}var u=t.factory.get(\"selectionBox\")(t.factory,{title:\"Clearspeak Preferences\",signature:\"\",order:\"alphabetic\",grid:\"square\",selections:s},t);return{type:\"command\",id:\"ClearspeakPreferences\",content:\"Select Preferences\",action:function(){return u.post(0,0)}}};d.MJContextMenu.DynamicSubmenus.set(\"Clearspeak\",(function(t,e){var o=t.pool.lookup(\"locale\").getValue(),r=O(t,o),n=sre.ClearspeakPreferences.smartPreferences(t.mathItem,o);return r&&n.splice(2,0,r),t.factory.get(\"subMenu\")(t.factory,{items:n,id:\"Clearspeak\"},e)}));var w={de:\"German\",en:\"English\",es:\"Spanish\",fr:\"French\"};d.MJContextMenu.DynamicSubmenus.set(\"A11yLanguage\",(function(t,e){var o,r,n=[];try{for(var i=a(sre.Variables.LOCALES),s=i.next();!s.done;s=i.next()){var l=s.value;\"nemeth\"!==l&&n.push({type:\"radio\",id:l,content:w[l]||l,variable:\"locale\"})}}catch(t){o={error:t}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return n.sort((function(t,e){return t.content.localeCompare(e.content,\"en\")})),t.factory.get(\"subMenu\")(t.factory,{items:n,id:\"Language\"},e)}))},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,o){\"use strict\";var r,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),i=this&&this.__read||function(t,e){var o=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!o)return t;var r,n,i=o.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.Magnifier=e.SpeechExplorer=e.AbstractKeyExplorer=void 0;var a=o(1),s=o(0),l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.events=t.prototype.Events.call(e).concat([[\"keydown\",e.KeyDown.bind(e)],[\"focusin\",e.FocusIn.bind(e)],[\"focusout\",e.FocusOut.bind(e)]]),e.oldIndex=null,e}return n(e,t),e.prototype.FocusIn=function(t){},e.prototype.FocusOut=function(t){this.Stop()},e.prototype.Update=function(t){void 0===t&&(t=!1),(this.active||t)&&(this.highlighter.unhighlight(),this.highlighter.highlight(this.walker.getFocus(!0).getNodes()))},e.prototype.Attach=function(){t.prototype.Attach.call(this),this.oldIndex=this.node.tabIndex,this.node.tabIndex=1,this.node.setAttribute(\"role\",\"application\")},e.prototype.Detach=function(){this.node.tabIndex=this.oldIndex,this.oldIndex=null,this.node.removeAttribute(\"role\"),t.prototype.Detach.call(this)},e.prototype.Stop=function(){this.active&&(this.highlighter.unhighlight(),this.walker.deactivate()),t.prototype.Stop.call(this)},e}(a.AbstractExplorer);e.AbstractKeyExplorer=l;var c=function(t){function e(e,o,r,n){var i=t.call(this,e,o,r)||this;return i.document=e,i.region=o,i.node=r,i.mml=n,i.showRegion=\"subtitles\",i.init=!1,i.restarted=!1,i.initWalker(),i}return n(e,t),e.prototype.Start=function(){var e=this,o=this.getOptions();if(!this.init)return this.init=!0,void s.sreReady().then((function(){SRE.engineSetup().locale!==o.locale&&SRE.setupEngine({locale:o.locale}),s.sreReady().then((function(){e.Speech(e.walker),e.Start()}))})).catch((function(t){return console.log(t.message)}));t.prototype.Start.call(this),this.speechGenerator=sre.SpeechGeneratorFactory.generator(\"Direct\"),this.speechGenerator.setOptions(o),this.walker=sre.WalkerFactory.walker(\"table\",this.node,this.speechGenerator,this.highlighter,this.mml),this.walker.activate(),this.Update(),this.document.options.a11y[this.showRegion]&&this.region.Show(this.node,this.highlighter),this.restarted=!0},e.prototype.Update=function(e){void 0===e&&(e=!1),t.prototype.Update.call(this,e),this.region.Update(this.walker.speech());var o=this.speechGenerator.getOptions();\"speech\"===o.modality&&(this.document.options.a11y.speechRules=o.domain+\"-\"+o.style)},e.prototype.Speech=function(t){t.speech(),this.node.setAttribute(\"hasspeech\",\"true\"),this.Update(),this.restarted&&this.document.options.a11y[this.showRegion]&&this.region.Show(this.node,this.highlighter)},e.prototype.KeyDown=function(t){var e=t.keyCode;return 27===e?(this.Stop(),void this.stopEvent(t)):this.active?(this.Move(e),void this.stopEvent(t)):void((32===e&&t.shiftKey||13===e)&&(this.Start(),this.stopEvent(t)))},e.prototype.Move=function(t){this.walker.move(t),this.Update()},e.prototype.initWalker=function(){this.speechGenerator=sre.SpeechGeneratorFactory.generator(\"Tree\");var t=sre.WalkerFactory.walker(\"dummy\",this.node,this.speechGenerator,this.highlighter,this.mml);this.walker=t},e.prototype.getOptions=function(){var t=this.speechGenerator.getOptions(),e=i(this.document.options.a11y.speechRules.split(\"-\"),2),o=e[0],r=e[1];return\"speech\"!==t.modality||t.locale===this.document.options.a11y.locale&&t.domain===o&&t.style===r||(t.domain=o,t.style=r,t.locale=this.document.options.a11y.locale,this.walker.update(t)),t},e}(l);e.SpeechExplorer=c;var h=function(t){function e(e,o,r,n){var i=t.call(this,e,o,r)||this;return i.document=e,i.region=o,i.node=r,i.mml=n,i.walker=sre.WalkerFactory.walker(\"table\",i.node,sre.SpeechGeneratorFactory.generator(\"Dummy\"),i.highlighter,i.mml),i}return n(e,t),e.prototype.Update=function(e){void 0===e&&(e=!1),t.prototype.Update.call(this,e),this.showFocus()},e.prototype.Start=function(){t.prototype.Start.call(this),this.region.Show(this.node,this.highlighter),this.walker.activate(),this.Update()},e.prototype.showFocus=function(){var t=this.walker.getFocus().getNodes()[0];this.region.Show(t,this.highlighter)},e.prototype.Move=function(t){this.walker.move(t)&&this.Update()},e.prototype.KeyDown=function(t){var e=t.keyCode;return 27===e?(this.Stop(),void this.stopEvent(t)):this.active&&13!==e?(this.Move(e),void this.stopEvent(t)):void((32===e&&t.shiftKey||13===e)&&(this.Start(),this.stopEvent(t)))},e}(l);e.Magnifier=h},function(t,e,o){\"use strict\";var r,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),i=this&&this.__read||function(t,e){var o=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!o)return t;var r,n,i=o.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FlameHoverer=e.ContentHoverer=e.ValueHoverer=e.Hoverer=e.AbstractMouseExplorer=void 0;var a=o(2),s=o(1);o(0);var l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.events=t.prototype.Events.call(e).concat([[\"mouseover\",e.MouseOver.bind(e)],[\"mouseout\",e.MouseOut.bind(e)]]),e}return n(e,t),e.prototype.MouseOver=function(t){this.Start()},e.prototype.MouseOut=function(t){this.Stop()},e}(s.AbstractExplorer);e.AbstractMouseExplorer=l;var c=function(t){function e(e,o,r,n,i){var a=t.call(this,e,o,r)||this;return a.document=e,a.region=o,a.node=r,a.nodeQuery=n,a.nodeAccess=i,a}return n(e,t),e.prototype.MouseOut=function(e){e.clientX===this.coord[0]&&e.clientY===this.coord[1]||(this.highlighter.unhighlight(),this.region.Hide(),t.prototype.MouseOut.call(this,e))},e.prototype.MouseOver=function(e){t.prototype.MouseOver.call(this,e);var o=e.target;this.coord=[e.clientX,e.clientY];var r=i(this.getNode(o),2),n=r[0],a=r[1];n&&(this.highlighter.unhighlight(),this.highlighter.highlight([n]),this.region.Update(a),this.region.Show(n,this.highlighter))},e.prototype.getNode=function(t){for(var e=t;t&&t!==this.node;){if(this.nodeQuery(t))return[t,this.nodeAccess(t)];t=t.parentNode}for(t=e;t;){if(this.nodeQuery(t))return[t,this.nodeAccess(t)];var o=t.childNodes[0];t=o&&\"defs\"===o.tagName?t.childNodes[1]:o}return[null,null]},e}(l);e.Hoverer=c;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(c);e.ValueHoverer=h;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(c);e.ContentHoverer=u;var p=function(t){function e(e,o,r){var n=t.call(this,e,new a.DummyRegion(e),r,(function(t){return n.highlighter.isMactionNode(t)}),(function(){}))||this;return n.document=e,n.node=r,n}return n(e,t),e}(c);e.FlameHoverer=p},function(t,e,o){\"use strict\";var r,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.TreeColorer=e.FlameColorer=e.AbstractTreeExplorer=void 0;var i=o(1);o(0);var a=function(t){function e(e,o,r,n){var i=t.call(this,e,null,r)||this;return i.document=e,i.region=o,i.node=r,i.mml=n,i.stoppable=!1,i}return n(e,t),e.prototype.Attach=function(){t.prototype.Attach.call(this),this.Start()},e.prototype.Detach=function(){this.Stop(),t.prototype.Detach.call(this)},e}(i.AbstractExplorer);e.AbstractTreeExplorer=a;var s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.Start=function(){this.active||(this.active=!0,this.highlighter.highlightAll(this.node))},e.prototype.Stop=function(){this.active&&this.highlighter.unhighlightAll(this.node),this.active=!1},e}(a);e.FlameColorer=s;var l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.Start=function(){if(!this.active){this.active=!0;var t=sre.SpeechGeneratorFactory.generator(\"Color\");this.node.hasAttribute(\"hasforegroundcolor\")||(t.generateSpeech(this.node,this.mml),this.node.setAttribute(\"hasforegroundcolor\",\"true\")),this.highlighter.colorizeAll(this.node)}},e.prototype.Stop=function(){this.active&&this.highlighter.uncolorizeAll(this.node),this.active=!1},e}(a);e.TreeColorer=l},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EnrichedMathItemMixin=MathJax._.a11y[\"semantic-enrich\"].EnrichedMathItemMixin,e.EnrichedMathDocumentMixin=MathJax._.a11y[\"semantic-enrich\"].EnrichedMathDocumentMixin,e.EnrichHandler=MathJax._.a11y[\"semantic-enrich\"].EnrichHandler},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DATAMJX=MathJax._.core.MmlTree.SerializedMmlVisitor.DATAMJX,e.toEntity=MathJax._.core.MmlTree.SerializedMmlVisitor.toEntity,e.SerializedMmlVisitor=MathJax._.core.MmlTree.SerializedMmlVisitor.SerializedMmlVisitor},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MJContextMenu=MathJax._.ui.menu.MJContextMenu.MJContextMenu},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CssStyles=MathJax._.util.StyleList.CssStyles},function(t,e,o){\"use strict\";o.r(e);var r=o(4),n=o(3),i=o(1),a=o(5),s=o(6),l=o(2),c=o(7),h=o(0);Object(r.combineWithMathJax)({_:{a11y:{explorer_ts:n,explorer:{Explorer:i,KeyExplorer:a,MouseExplorer:s,Region:l,TreeExplorer:c},sre:h}}}),MathJax.startup&&MathJax.startup.extendHandler((function(t){return Object(n.ExplorerHandler)(t)}))}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/a11y/semantic-enrich.js",
    "content": "!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=9)}([function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sreReady=void 0;var r=n(8),i=\"undefined\"==typeof window?\"./a11y/sre-node.js\":\"../../../speech-rule-engine/lib/sre_browser.js\",a=\"undefined\"==typeof sre?r.asyncLoad(i):Promise.resolve();e.sreReady=function(){return new Promise((function(t,e){a.then((function(){var n=(new Date).getTime(),r=function(){sre.Engine.isReady()?t():(new Date).getTime()-n<2e4?setTimeout(r,100):e(\"Timed out waiting for Speech-Rule-Engine\")};r()})).catch((function(t){return e(t.message||t)}))}))}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,n){\"use strict\";var r,i=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),a=this&&this.__assign||function(){return(a=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},s=this&&this.__read||function(t,e){var n=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,i,a=n.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=a.next()).done;)o.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return o},c=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(s(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.EnrichHandler=e.EnrichedMathDocumentMixin=e.EnrichedMathItemMixin=void 0;var l=n(4),u=n(5),h=n(6),p=n(7),f=n(0),d=\"none\";function y(t,e,n){return function(t){function r(){return null!==t&&t.apply(this,arguments)||this}return i(r,t),r.prototype.serializeMml=function(t){if(\"outerHTML\"in t)return t.outerHTML;if(\"undefined\"!=typeof Element&&\"undefined\"!=typeof window&&t instanceof Element){var e=window.document.createElement(\"div\");return e.appendChild(t),e.innerHTML}return t.toString()},r.prototype.enrich=function(t,r){if(void 0===r&&(r=!1),!(this.state()>=u.STATE.ENRICHED)){if(!this.isEscaped&&(t.options.enableEnrichment||r)){\"undefined\"!=typeof sre&&sre.Engine.isReady()||l.mathjax.retryAfter(f.sreReady()),t.options.enrichSpeech!==d&&(SRE.setupEngine({speech:t.options.enrichSpeech}),d=t.options.enrichSpeech);var i=new t.options.MathItem(\"\",e);i.math=this.serializeMml(SRE.toEnriched(n(this.root))),i.display=this.display,i.compile(t),this.root=i.root,this.inputData.originalMml=i.math}this.state(u.STATE.ENRICHED)}},r.prototype.attachSpeech=function(t){var e,n;if(!(this.state()>=u.STATE.ATTACHSPEECH)){var r=this.root.attributes.get(\"aria-label\")||this.getSpeech(this.root);if(r){var i=t.adaptor,a=this.typesetRoot;i.setAttribute(a,\"aria-label\",r);try{for(var s=o(i.childNodes(a)),c=s.next();!c.done;c=s.next()){var l=c.value;i.setAttribute(l,\"aria-hidden\",\"true\")}}catch(t){e={error:t}}finally{try{c&&!c.done&&(n=s.return)&&n.call(s)}finally{if(e)throw e.error}}}this.state(u.STATE.ATTACHSPEECH)}},r.prototype.getSpeech=function(t){var e,n,r=t.attributes;if(!r)return\"\";var i=r.getExplicit(\"data-semantic-speech\");if(!r.getExplicit(\"data-semantic-parent\")&&i)return i;try{for(var a=o(t.childNodes),s=a.next();!s.done;s=a.next()){var c=s.value,l=this.getSpeech(c);if(null!=l)return l}}catch(t){e={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(e)throw e.error}}return\"\"},r}(t)}function M(t,e){var n;return(n=function(t){function n(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var i=t.apply(this,c(n))||this;e.setMmlFactory(i.mmlFactory);var a=i.constructor.ProcessBits;a.has(\"enriched\")||(a.allocate(\"enriched\"),a.allocate(\"attach-speech\"));var o=new h.SerializedMmlVisitor(i.mmlFactory),s=function(t){return o.visitTree(t)};return i.options.MathItem=y(i.options.MathItem,e,s),i}return i(n,t),n.prototype.attachSpeech=function(){var t,e;if(!this.processed.isSet(\"attach-speech\")){try{for(var n=o(this.math),r=n.next();!r.done;r=n.next()){r.value.attachSpeech(this)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}this.processed.set(\"attach-speech\")}return this},n.prototype.enrich=function(){var t,e;if(!this.processed.isSet(\"enriched\")){if(this.options.enableEnrichment)try{for(var n=o(this.math),r=n.next();!r.done;r=n.next()){r.value.enrich(this)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}this.processed.set(\"enriched\")}return this},n.prototype.state=function(e,n){return void 0===n&&(n=!1),t.prototype.state.call(this,e,n),e<u.STATE.ENRICHED&&this.processed.clear(\"enriched\"),this},n}(t)).OPTIONS=a(a({},t.OPTIONS),{enableEnrichment:!0,enrichSpeech:\"none\",renderActions:p.expandable(a(a({},t.OPTIONS.renderActions),{enrich:[u.STATE.ENRICHED],attachSpeech:[u.STATE.ATTACHSPEECH]}))}),n}u.newState(\"ENRICHED\",30),u.newState(\"ATTACHSPEECH\",155),e.EnrichedMathItemMixin=y,e.EnrichedMathDocumentMixin=M,e.EnrichHandler=function(t,e){return e.setAdaptor(t.adaptor),t.documentClass=M(t.documentClass,e),t}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MathML=MathJax._.input.mathml_ts.MathML},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.mathjax=MathJax._.mathjax.mathjax},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DATAMJX=MathJax._.core.MmlTree.SerializedMmlVisitor.DATAMJX,e.toEntity=MathJax._.core.MmlTree.SerializedMmlVisitor.toEntity,e.SerializedMmlVisitor=MathJax._.core.MmlTree.SerializedMmlVisitor.SerializedMmlVisitor},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.asyncLoad=MathJax._.util.AsyncLoad.asyncLoad},function(t,e,n){\"use strict\";n.r(e);var r=n(1),i=n(2),a=n(0);Object(r.combineWithMathJax)({_:{a11y:{\"semantic-enrich\":i,sre:a}}});var o=n(3);MathJax.loader&&Object(r.combineDefaults)(MathJax.config.loader,\"a11y/semantic-enrich\",{checkReady:function(){return Object(a.sreReady)()}}),MathJax.startup&&MathJax.startup.extendHandler((function(t){return Object(i.EnrichHandler)(t,new o.MathML)}))}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/asciimath.js",
    "content": "!function(t){var e={};function i(n){if(e[n])return e[n].exports;var a=e[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var a in t)i.d(n,a,function(e){return t[e]}.bind(null,a));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,\"a\",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p=\"\",i(i.s=16)}([function(t,e,i){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),s=this&&this.__assign||function(){return(s=Object.assign||function(t){for(var e,i=1,n=arguments.length;i<n;i++)for(var a in e=arguments[i])Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t}).apply(this,arguments)},r=this&&this.__read||function(t,e){var i=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,a,s=i.call(t),r=[];try{for(;(void 0===e||e-- >0)&&!(n=s.next()).done;)r.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(i=s.return)&&i.call(s)}finally{if(a)throw a.error}}return r};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AsciiMath=void 0;var o=i(3),l=i(4),u=i(12),h=i(1),p=function(t){function e(i){var n=this,a=r(u.separateOptions(i,h.FindAsciiMath.OPTIONS,e.OPTIONS),3),s=a[1],o=a[2];return(n=t.call(this,o)||this).findAsciiMath=n.options.FindAsciiMath||new h.FindAsciiMath(s),n}return a(e,t),e.prototype.compile=function(t,e){return l.LegacyAsciiMath.Compile(t.math,t.display)},e.prototype.findMath=function(t){return this.findAsciiMath.findMath(t)},e.NAME=\"AsciiMath\",e.OPTIONS=s(s({},o.AbstractInputJax.OPTIONS),{FindAsciiMath:null}),e}(o.AbstractInputJax);e.AsciiMath=p},function(t,e,i){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),s=this&&this.__read||function(t,e){var i=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,a,s=i.call(t),r=[];try{for(;(void 0===e||e-- >0)&&!(n=s.next()).done;)r.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(i=s.return)&&i.call(s)}finally{if(a)throw a.error}}return r};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindAsciiMath=void 0;var r=i(13),o=i(14),l=i(15),u=function(t){function e(e){var i=t.call(this,e)||this;return i.getPatterns(),i}return a(e,t),e.prototype.getPatterns=function(){var t=this,e=this.options,i=[];this.end={},e.delimiters.forEach((function(e){return t.addPattern(i,e,!1)})),this.start=new RegExp(i.join(\"|\"),\"g\"),this.hasPatterns=i.length>0},e.prototype.addPattern=function(t,e,i){var n=s(e,2),a=n[0],r=n[1];t.push(o.quotePattern(a)),this.end[a]=[r,i,new RegExp(o.quotePattern(r),\"g\")]},e.prototype.findEnd=function(t,e,i,n){var a=s(n,3),r=a[1],o=a[2],u=o.lastIndex=i.index+i[0].length,h=o.exec(t);return h?l.protoItem(i[0],t.substr(u,h.index-u),h[0],e,i.index,h.index+h[0].length,r):null},e.prototype.findMathInString=function(t,e,i){var n,a;for(this.start.lastIndex=0;n=this.start.exec(i);)(a=this.findEnd(i,e,n,this.end[n[0]]))&&(t.push(a),this.start.lastIndex=a.end.n)},e.prototype.findMath=function(t){var e=[];if(this.hasPatterns)for(var i=0,n=t.length;i<n;i++)this.findMathInString(e,i,t[i]);return e},e.OPTIONS={delimiters:[[\"`\",\"`\"]]},e}(r.AbstractFindMath);e.FindAsciiMath=u},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractInputJax=MathJax._.core.InputJax.AbstractInputJax},function(t,e,i){(function(t){MathJax=Object.assign(t.MathJax||{},i(6).MathJax),MathJax.config&&MathJax.config.asciimath&&MathJax.Hub.Config({AsciiMath:MathJax.config.asciimath}),MathJax.Ajax.Preloading(\"[MathJax]/jax/input/AsciiMath/config.js\",\"[MathJax]/jax/input/AsciiMath/jax.js\",\"[MathJax]/jax/element/mml/jax.js\"),i(7),i(8),i(9),i(10);var n=new(0,i(11).MmlFactory);e.LegacyAsciiMath={Compile:function(t,e){var i={type:\"math/asciimath\",innerText:t,MathJax:{}},a=MathJax.InputJax.AsciiMath.Translate(i).root.toMmlNode(n);return a.setInheritedAttributes({},e,0,!1),a},Translate:function(t,e){return this.Compile(t,e)}}}).call(this,i(5))},function(t,e){var i;i=function(){return this}();try{i=i||new Function(\"return this\")()}catch(t){\"object\"==typeof window&&(i=window)}t.exports=i},function(t,e){var i,n,a,s,r,o,l={debug:!0},u={MathJax:l},h={},p=null;e.MathJax=l,function(t){var e=u.MathJax;e||(e=u.MathJax={});var i=[],n=function(t){var e=t.constructor;for(var i in e||(e=function(){}),t)\"constructor\"!==i&&t.hasOwnProperty(i)&&(e[i]=t[i]);return e};e.Object=n({constructor:function(){return arguments.callee.Init.call(this,arguments)},Subclass:function(t,e){var n=function(){return arguments.callee.Init.call(this,arguments)};return n.SUPER=this,n.Init=this.Init,n.Subclass=this.Subclass,n.Augment=this.Augment,n.protoFunction=this.protoFunction,n.can=this.can,n.has=this.has,n.isa=this.isa,n.prototype=new this(i),n.prototype.constructor=n,n.Augment(t,e),n},Init:function(t){var e=this;return 1===t.length&&t[0]===i?e:(e instanceof t.callee||(e=new t.callee(i)),e.Init.apply(e,t)||e)},Augment:function(t,e){var i;if(null!=t){for(i in t)t.hasOwnProperty(i)&&this.protoFunction(i,t[i]);t.toString!==this.prototype.toString&&t.toString!=={}.toString&&this.protoFunction(\"toString\",t.toString)}if(null!=e)for(i in e)e.hasOwnProperty(i)&&(this[i]=e[i]);return this},protoFunction:function(t,e){this.prototype[t]=e,\"function\"==typeof e&&(e.SUPER=this.SUPER.prototype)},prototype:{Init:function(){},SUPER:function(t){return t.callee.SUPER},can:function(t){return\"function\"==typeof this[t]},has:function(t){return void 0!==this[t]},isa:function(t){return t instanceof Object&&this instanceof t}},can:function(t){return this.prototype.can.call(this,t)},has:function(t){return this.prototype.has.call(this,t)},isa:function(t){for(var e=this;e;){if(e===t)return!0;e=e.SUPER}return!1},SimpleSUPER:n({constructor:function(t){return this.SimpleSUPER.define(t)},define:function(t){var e={};if(null!=t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=this.wrap(i,t[i]));t.toString!==this.prototype.toString&&t.toString!=={}.toString&&(e.toString=this.wrap(\"toString\",t.toString))}return e},wrap:function(t,e){if(\"function\"!=typeof e||!e.toString().match(/\\.\\s*SUPER\\s*\\(/))return e;var i=function(){this.SUPER=i.SUPER[t];try{var n=e.apply(this,arguments)}catch(t){throw delete this.SUPER,t}return delete this.SUPER,n};return i.toString=function(){return e.toString.apply(e,arguments)},i}})}),e.Object.isArray=Array.isArray||function(t){return\"[object Array]\"===Object.prototype.toString.call(t)},e.Object.Array=Array}(),function(t){var e=u.MathJax;e||(e=u.MathJax={});var i=function(t){var e=function(){return arguments.callee.execute.apply(arguments.callee,arguments)};for(var n in i.prototype)i.prototype.hasOwnProperty(n)&&(e[n]=void 0!==t[n]?t[n]:i.prototype[n]);return e.toString=i.prototype.toString,e};i.prototype={isCallback:!0,hook:function(){},data:[],object:u,execute:function(){if(!this.called||this.autoReset)return this.called=!this.autoReset,this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)))},reset:function(){delete this.called},toString:function(){return this.hook.toString.apply(this.hook,arguments)}};var n=function(t){return\"function\"==typeof t&&t.isCallback},a=function(t){return eval.call(u,t)},s=function(){if(a(\"var __TeSt_VaR__ = 1\"),u.__TeSt_VaR__)try{delete u.__TeSt_VaR__}catch(t){u.__TeSt_VaR__=null}else a=u.execScript?function(t){e.__code=t,t=\"try {MathJax.__result = eval(MathJax.__code)} catch(err) {MathJax.__result = err}\",u.execScript(t);var i=e.__result;if(delete e.__result,delete e.__code,i instanceof Error)throw i;return i}:function(t){e.__code=t,t=\"try {MathJax.__result = eval(MathJax.__code)} catch(err) {MathJax.__result = err}\";var i=p.getElementsByTagName(\"head\")[0];i||(i=p.body);var n=p.createElement(\"script\");n.appendChild(p.createTextNode(t)),i.appendChild(n),i.removeChild(n);var a=e.__result;if(delete e.__result,delete e.__code,a instanceof Error)throw a;return a};s=null},r=function(t,e){if(arguments.length>1&&(t=2===arguments.length&&\"function\"!=typeof arguments[0]&&arguments[0]instanceof Object&&\"number\"==typeof arguments[1]?[].slice.call(t,e):[].slice.call(arguments,0)),t instanceof Array&&1===t.length&&(t=t[0]),\"function\"==typeof t)return t.execute===i.prototype.execute?t:i({hook:t});if(t instanceof Array){if(\"string\"==typeof t[0]&&t[1]instanceof Object&&\"function\"==typeof t[1][t[0]])return i({hook:t[1][t[0]],object:t[1],data:t.slice(2)});if(\"function\"==typeof t[0])return i({hook:t[0],data:t.slice(1)});if(\"function\"==typeof t[1])return i({hook:t[1],object:t[0],data:t.slice(2)})}else{if(\"string\"==typeof t)return s&&s(),i({hook:a,data:[t]});if(t instanceof Object)return i(t);if(void 0===t)return i({})}throw Error(\"Can't make callback from given data\")},o=function(t,e){(t=r(t)).called||(c(t,e),e.pending++)},h=function(){var t=this.signal;delete this.signal,this.execute=this.oldExecute,delete this.oldExecute;var e=this.execute.apply(this,arguments);if(n(e)&&!e.called)c(e,t);else for(var i=0,a=t.length;i<a;i++)t[i].pending--,t[i].pending<=0&&t[i].call()},c=function(t,e){e instanceof Array||(e=[e]),t.signal?1===e.length?t.signal.push(e[0]):t.signal=t.signal.concat(e):(t.oldExecute=t.execute,t.execute=h,t.signal=e)},d=function(t){(t=r(t)).pending=0;for(var e=1,i=arguments.length;e<i;e++)arguments[e]&&o(arguments[e],t);if(0===t.pending){var a=t();n(a)&&(t=a)}return t},m=l.Object.Subclass({Init:function(t){this.hooks=[],this.remove=[],this.reset=t,this.running=!1},Add:function(t,e){null==e&&(e=10),n(t)||(t=r(t)),t.priority=e;for(var i=this.hooks.length;i>0&&e<this.hooks[i-1].priority;)i--;return this.hooks.splice(i,0,t),t},Remove:function(t){for(var e=0,i=this.hooks.length;e<i;e++)if(this.hooks[e]===t)return void(this.running?this.remove.push(e):this.hooks.splice(e,1))},Execute:function(){var t=[{}];this.running=!0;for(var e=0,i=this.hooks.length;e<i;e++){this.reset&&this.hooks[e].reset();var a=this.hooks[e].apply(u,arguments);n(a)&&!a.called&&t.push(a)}return this.running=!1,this.remove.length&&this.RemovePending(),1===t.length?null:2===t.length?t[1]:d.apply({},t)},RemovePending:function(){this.remove=this.remove.sort();for(var t=this.remove.length-1;t>=0;t--)this.hooks.splice(t,1);this.remove=[]}}),f=e.Object.Subclass({Init:function(){this.pending=this.running=0,this.queue=[],this.Push.apply(this,arguments)},Push:function(){for(var t,e=0,i=arguments.length;e<i;e++)(t=r(arguments[e]))!==arguments[e]||t.called||(t=r([\"wait\",this,t])),this.queue.push(t);return this.running||this.pending||this.Process(),t},Process:function(t){for(;!this.running&&!this.pending&&this.queue.length;){var e=this.queue[0];t=this.queue.slice(1),this.queue=[],this.Suspend();var i=e();this.Resume(),t.length&&(this.queue=t.concat(this.queue)),n(i)&&!i.called&&o(i,this)}},Suspend:function(){this.running++},Resume:function(){this.running&&this.running--},call:function(){this.Process.apply(this,arguments)},wait:function(t){return t}}),g=f.Subclass({Init:function(t){f.prototype.Init.call(this),this.name=t,this.posted=[],this.listeners=m(!0),this.posting=!1,this.callback=null},Post:function(t,e,i){if(e=r(e),this.posting||this.pending)this.Push([\"Post\",this,t,e,i]);else{this.callback=e,e.reset(),i||this.posted.push(t),this.Suspend(),this.posting=!0;var a=this.listeners.Execute(t);n(a)&&!a.called&&o(a,this),this.Resume(),this.posting=!1,this.pending||this.call()}return e},Clear:function(t){return t=r(t),this.posting||this.pending?t=this.Push([\"Clear\",this,t]):(this.posted=[],t()),t},call:function(){this.callback(this),this.Process()},Interest:function(t,e,i){if(t=r(t),this.listeners.Add(t,i),!e)for(var a=0,s=this.posted.length;a<s;a++){t.reset();var l=t(this.posted[a]);n(l)&&a===this.posted.length-1&&o(l,this)}return t},NoInterest:function(t){this.listeners.Remove(t)},MessageHook:function(t,e,i){e=r(e),this.hooks||(this.hooks={},this.Interest([\"ExecuteHooks\",this])),this.hooks[t]||(this.hooks[t]=m(!0)),this.hooks[t].Add(e,i);for(var n=0,a=this.posted.length;n<a;n++)this.posted[n]==t&&(e.reset(),e(this.posted[n]));return e.msg=t,e},ExecuteHooks:function(t){var e=t instanceof Array?t[0]:t;return this.hooks[e]?this.hooks[e].Execute(t):null},RemoveHook:function(t){this.hooks[t.msg].Remove(t)}},{signals:{},find:function(t){return g.signals[t]||(g.signals[t]=new g(t)),g.signals[t]}});e.Callback=e.CallBack=r,e.Callback.Delay=function(t,e){return(e=r(e)).timeout=setTimeout(e,t),e},e.Callback.After=d,e.Callback.Queue=f,e.Callback.Signal=g.find,e.Callback.Hooks=m,e.Callback.ExecuteHooks=function(t,e,i){if(!t)return null;t instanceof Array||(t=[t]),e instanceof Array||(e=null==e?[]:[e]);for(var n=m(i),a=0,s=t.length;a<s;a++)n.Add(t[a]);return n.Execute.apply(n,e)}}(),function(t){var e=u.MathJax;e||(e=u.MathJax={});var i=\"Apple Computer, Inc.\"===h.vendor&&void 0===h.vendorSub,n=0,a=[],s=function(){for(var t=0,i=a.length;t<i;t++)e.Ajax.head.removeChild(a[t]);a=[]},r={MathJax:\"\"};e.Ajax={loaded:{},loading:{},loadHooks:{},timeout:15e3,styleDelay:1,config:{root:\"\",path:r},STATUS:{OK:1,ERROR:-1},fileURL:function(t){var e=t.match(/^\\[([-._a-z0-9]+)\\]/i);return e&&e[1]in r&&(t=(r[e[1]]||this.config.root)+t.substr(e[1].length+2)),t},fileName:function(t){var e=this.config.root;if(t.substr(0,e.length)===e)t=\"[MathJax]\"+t.substr(e.length);else for(var i in r)if(r.hasOwnProperty(i)&&r[i]&&t.substr(0,r[i].length)===r[i]){t=\"[\"+i+\"]\"+t.substr(r[i].length);break}return t},fileRev:function(t){var i=e.cdnFileVersions[name]||e.cdnVersion;return i&&(i=\"?rev=\"+i),i},urlRev:function(t){return this.fileURL(t)+this.fileRev(t)},Require:function(t,i){var n;if(i=e.Callback(i),t instanceof Object)for(var a in t)t.hasOwnProperty(a)&&(n=a.toUpperCase(),t=t[a]);else n=t.split(/\\./).pop().toUpperCase();if(t=this.fileURL(t),this.loaded[t])i(this.loaded[t]);else{var s={};s[n]=t,this.Load(s,i)}return i},Load:function(t,i){var n;if(i=e.Callback(i),t instanceof Object)for(var a in t)t.hasOwnProperty(a)&&(n=a.toUpperCase(),t=t[a]);else n=t.split(/\\./).pop().toUpperCase();if(t=this.fileURL(t),this.loading[t])this.addHook(t,i);else{if(this.head=(this.head,null),!this.loader[n])throw Error(\"Can't load files of type \"+n);this.loader[n].call(this,t,i)}return i},LoadHook:function(t,i,n){if(i=e.Callback(i),t instanceof Object)for(var a in t)t.hasOwnProperty(a)&&(t=t[a]);return t=this.fileURL(t),this.loaded[t]?i(this.loaded[t]):this.addHook(t,i,n),i},addHook:function(t,e,i){this.loadHooks[t]||(this.loadHooks[t]=l.Callback.Hooks()),this.loadHooks[t].Add(e,i),e.file=t},removeHook:function(t){this.loadHooks[t.file]&&(this.loadHooks[t.file].Remove(t),this.loadHooks[t.file].hooks.length||delete this.loadHooks[t.file])},Preloading:function(){for(var t=0,e=arguments.length;t<e;t++){var i=this.fileURL(arguments[t]);this.loading[i]||this.loaded[i]||(this.loading[i]={preloaded:!0})}},loader:{JS:function(t,i){var n=this.fileName(t),a=e.Callback([\"loadTimeout\",this,t]);this.loading[t]={callback:i,timeout:setTimeout(a,this.timeout),status:this.STATUS.OK,script:null},this.loading[t].message=e.Message.File(n),u.System?u.System.import(t).catch(a):a()},CSS:function(t,i){var n=this.fileName(t),a=p.createElement(\"link\");a.rel=\"stylesheet\",a.type=\"text/css\",a.href=t+this.fileRev(n),this.loading[t]={callback:i,message:e.Message.File(n),status:this.STATUS.OK},this.head.appendChild(a),this.timer.create.call(this,[this.timer.file,t],a)}},timer:{create:function(t,a){return t=e.Callback(t),\"STYLE\"===a.nodeName&&a.styleSheet&&void 0!==a.styleSheet.cssText||u.chrome&&\"LINK\"===a.nodeName?t(this.STATUS.OK):i?this.timer.start(this,[this.timer.checkSafari2,n++,t],this.styleDelay):this.timer.start(this,[this.timer.checkLength,a,t],this.styleDelay),t},start:function(t,i,n,a){(i=e.Callback(i)).execute=this.execute,i.time=this.time,i.STATUS=t.STATUS,i.timeout=a||t.timeout,i.delay=i.total=n||0,n?setTimeout(i,n):i()},time:function(t){return this.total+=this.delay,this.delay=Math.floor(1.05*this.delay+5),this.total>=this.timeout?(t(this.STATUS.ERROR),1):0},file:function(t,i){i<0?e.Ajax.loadTimeout(t):e.Ajax.loadComplete(t)},execute:function(){this.hook.call(this.object,this,this.data[0],this.data[1])},checkSafari2:function(t,e,i){t.time(i)||(p.styleSheets.length>e&&p.styleSheets[e].cssRules&&p.styleSheets[e].cssRules.length?i(t.STATUS.OK):setTimeout(t,t.delay))},checkLength:function(t,i,n){if(!t.time(n)){var a=0,s=i.sheet||i.styleSheet;try{(s.cssRules||s.rules||[]).length>0&&(a=1)}catch(t){(t.message.match(/protected variable|restricted URI/)||t.message.match(/Security error/))&&(a=1)}a?setTimeout(e.Callback([n,t.STATUS.OK]),0):setTimeout(t,t.delay)}}},loadComplete:function(t){t=this.fileURL(t);var i=this.loading[t];return i&&!i.preloaded?(e.Message.Clear(i.message),i.timeout&&clearTimeout(i.timeout),i.script&&(0===a.length&&setTimeout(s,0),a.push(i.script)),this.loaded[t]=i.status,delete this.loading[t],this.addHook(t,i.callback)):(i&&delete this.loading[t],this.loaded[t]=this.STATUS.OK,i={status:this.STATUS.OK}),this.loadHooks[t]?this.loadHooks[t].Execute(i.status):null},loadTimeout:function(t){this.loading[t].timeout&&clearTimeout(this.loading[t].timeout),this.loading[t].status=this.STATUS.ERROR,this.loadError(t),this.loadComplete(t)},loadError:function(t){e.Message.Set([\"LoadFailed\",\"File failed to load: %1\",t],null,2e3),e.Hub.signal.Post([\"file load error\",t])},Styles:function(t,i){var n=this.StyleString(t);if(\"\"===n)(i=e.Callback(i))();else{var a=p.createElement(\"style\");a.type=\"text/css\",this.head=(this.head,null),this.head.appendChild(a),a.styleSheet&&void 0!==a.styleSheet.cssText?a.styleSheet.cssText=n:a.appendChild(p.createTextNode(n)),i=this.timer.create.call(this,i,a)}return i},StyleString:function(t){if(\"string\"==typeof t)return t;var e,i,n=\"\";for(e in t)if(t.hasOwnProperty(e))if(\"string\"==typeof t[e])n+=e+\" {\"+t[e]+\"}\\n\";else if(t[e]instanceof Array)for(var a=0;a<t[e].length;a++)(i={})[e]=t[e][a],n+=this.StyleString(i);else if(\"@media\"===e.substr(0,6))n+=e+\" {\"+this.StyleString(t[e])+\"}\\n\";else if(null!=t[e]){for(var s in i=[],t[e])t[e].hasOwnProperty(s)&&null!=t[e][s]&&(i[i.length]=s+\": \"+t[e][s]);n+=e+\" {\"+i.join(\"; \")+\"}\\n\"}return n}}}(),l.HTML={setDocument:function(t){p=this.document=t},Element:function(t,e,i){var n,a=p.createElement(t);if(e){if(e.hasOwnProperty(\"style\")){var s=e.style;for(n in e.style={},s)s.hasOwnProperty(n)&&(e.style[n.replace(/-([a-z])/g,this.ucMatch)]=s[n])}for(n in l.Hub.Insert(a,e),e)\"role\"!==n&&\"aria-\"!==n.substr(0,5)||a.setAttribute(n,e[n])}if(i){l.Object.isArray(i)||(i=[i]);for(var r=0,o=i.length;r<o;r++)l.Object.isArray(i[r])?a.appendChild(this.Element(i[r][0],i[r][1],i[r][2])):\"script\"===t?this.setScript(a,i[r]):a.appendChild(p.createTextNode(i[r]))}return a},ucMatch:function(t,e){return e.toUpperCase()},addElement:function(t,e,i,n){return t.appendChild(this.Element(e,i,n))},TextNode:function(t){return p.createTextNode(t)},addText:function(t,e){return t.appendChild(this.TextNode(e))},setScript:function(t,e){if(this.setScriptBug)t.text=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);this.addText(t,e)}},getScript:function(t){return t.innerText}},l.Localization={locale:\"en\",directory:\"[MathJax]/localization\",strings:{ast:{menuTitle:\"asturianu\"},bg:{menuTitle:\"\\u0431\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438\"},bcc:{menuTitle:\"\\u0628\\u0644\\u0648\\u0686\\u06cc\"},br:{menuTitle:\"brezhoneg\"},ca:{menuTitle:\"catal\\xe0\"},cdo:{menuTitle:\"M\\xecng-d\\u0115\\u0324ng-ng\\u1e73\\u0304\"},cs:{menuTitle:\"\\u010de\\u0161tina\"},da:{menuTitle:\"dansk\"},de:{menuTitle:\"Deutsch\"},en:{menuTitle:\"English\",isLoaded:!0},eo:{menuTitle:\"Esperanto\"},es:{menuTitle:\"espa\\xf1ol\"},fa:{menuTitle:\"\\u0641\\u0627\\u0631\\u0633\\u06cc\"},fi:{menuTitle:\"suomi\"},fr:{menuTitle:\"fran\\xe7ais\"},gl:{menuTitle:\"galego\"},he:{menuTitle:\"\\u05e2\\u05d1\\u05e8\\u05d9\\u05ea\"},ia:{menuTitle:\"interlingua\"},it:{menuTitle:\"italiano\"},ja:{menuTitle:\"\\u65e5\\u672c\\u8a9e\"},kn:{menuTitle:\"\\u0c95\\u0ca8\\u0ccd\\u0ca8\\u0ca1\"},ko:{menuTitle:\"\\ud55c\\uad6d\\uc5b4\"},lb:{menuTitle:\"L\\xebtzebuergesch\"},lt:{menuTitle:\"lietuvi\\u0173\"},mk:{menuTitle:\"\\u043c\\u0430\\u043a\\u0435\\u0434\\u043e\\u043d\\u0441\\u043a\\u0438\"},nl:{menuTitle:\"Nederlands\"},oc:{menuTitle:\"occitan\"},pl:{menuTitle:\"polski\"},pt:{menuTitle:\"portugus\\xea\"},\"pt-br\":{menuTitle:\"portugu\\xeas do Brasil\"},ru:{menuTitle:\"\\u0440\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\"},sco:{menuTitle:\"Scots\"},scn:{menuTitle:\"sicilianu\"},sl:{menuTitle:\"sloven\\u0161\\u010dina\"},sv:{menuTitle:\"svenska\"},tr:{menuTitle:\"T\\xfcrk\\xe7e\"},uk:{menuTitle:\"\\u0443\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\"},vi:{menuTitle:\"Ti\\u1ebfng Vi\\u1ec7t\"},\"zh-hans\":{menuTitle:\"\\u4e2d\\u6587\\uff08\\u7b80\\u4f53\\uff09\"}},pattern:/%(\\d+|\\{\\d+\\}|\\{[a-z]+:\\%\\d+(?:\\|(?:%\\{\\d+\\}|%.|[^\\}])*)+\\}|.)/g,SPLIT:3===\"axb\".split(/(x)/).length?function(t,e){return t.split(e)}:function(t,e){var i,n=[],a=0;for(e.lastIndex=0;i=e.exec(t);)n.push(t.substr(a,i.index-a)),n.push.apply(n,i.slice(1)),a=i.index+i[0].length;return n.push(t.substr(a)),n},_:function(t,e){return e instanceof Array?this.processSnippet(t,e):this.processString(this.lookupPhrase(t,e),[].slice.call(arguments,2))},processString:function(t,e,i){var n,a;for(n=0,a=e.length;n<a;n++)i&&e[n]instanceof Array&&(e[n]=this.processSnippet(i,e[n]));var s=this.SPLIT(t,this.pattern);for(n=1,a=s.length;n<a;n+=2){var r=s[n].charAt(0);if(r>=\"0\"&&r<=\"9\")s[n]=e[s[n]-1],\"number\"==typeof s[n]&&(s[n]=this.number(s[n]));else if(\"{\"===r)if((r=s[n].substr(1))>=\"0\"&&r<=\"9\")s[n]=e[s[n].substr(1,s[n].length-2)-1],\"number\"==typeof s[n]&&(s[n]=this.number(s[n]));else{var o=s[n].match(/^\\{([a-z]+):%(\\d+)\\|(.*)\\}$/);if(o)if(\"plural\"===o[1]){var l=e[o[2]-1];if(void 0===l)s[n]=\"???\";else{l=this.plural(l)-1;var u=o[3].replace(/(^|[^%])(%%)*%\\|/g,\"$1$2%\\uefef\").split(/\\|/);l>=0&&l<u.length?s[n]=this.processString(u[l].replace(/\\uEFEF/g,\"|\"),e,i):s[n]=\"???\"}}else s[n]=\"%\"+s[n]}null==s[n]&&(s[n]=\"???\")}if(!i)return s.join(\"\");var h=[],p=\"\";for(n=0;n<a;n++)p+=s[n],++n<a&&(s[n]instanceof Array?(h.push(p),h=h.concat(s[n]),p=\"\"):p+=s[n]);return\"\"!==p&&h.push(p),h},processSnippet:function(t,e){for(var i=[],n=0,a=e.length;n<a;n++)if(e[n]instanceof Array){var s=e[n];if(\"string\"==typeof s[1]){var r=s[0];r instanceof Array||(r=[t,r]);var o=this.lookupPhrase(r,s[1]);i=i.concat(this.processMarkdown(o,s.slice(2),t))}else s[1]instanceof Array?i=i.concat(this.processSnippet.apply(this,s)):s.length>=3?i.push([s[0],s[1],this.processSnippet(t,s[2])]):i.push(e[n])}else i.push(e[n]);return i},markdownPattern:/(%.)|(\\*{1,3})((?:%.|.)+?)\\2|(`+)((?:%.|.)+?)\\4|\\[((?:%.|.)+?)\\]\\(([^\\s\\)]+)\\)/,processMarkdown:function(t,e,i){for(var n,a=[],s=t.split(this.markdownPattern),r=s[0],o=1,l=s.length;o<l;o+=8)s[o+1]?((n=this.processString(s[o+2],e,i))instanceof Array||(n=[n]),n=[[\"b\",\"i\",\"i\"][s[o+1].length-1],{},n],3===s[o+1].length&&(n=[\"b\",{},n])):s[o+3]?((n=this.processString(s[o+4].replace(/^\\s/,\"\").replace(/\\s$/,\"\"),e,i))instanceof Array||(n=[n]),n=[\"code\",{},n]):s[o+5]?((n=this.processString(s[o+5],e,i))instanceof Array||(n=[n]),n=[\"a\",{href:this.processString(s[o+6],e),target:\"_blank\"},n]):(r+=s[o],n=null),n&&((a=this.concatString(a,r,e,i)).push(n),r=\"\"),\"\"!==s[o+7]&&(r+=s[o+7]);return a=this.concatString(a,r,e,i)},concatString:function(t,e,i,n){return\"\"!=e&&((e=this.processString(e,i,n))instanceof Array||(e=[e]),t=t.concat(e)),t},lookupPhrase:function(t,e,i){i||(i=\"_\"),t instanceof Array&&(i=t[0]||\"_\",t=t[1]||\"\");var n=this.loadDomain(i);n&&l.Hub.RestartAfter(n);var a=this.strings[this.locale];if(a&&a.domains&&i in a.domains){var s=a.domains[i];s.strings&&t in s.strings&&(e=s.strings[t])}return e},loadFile:function(t,e,i){(i=l.Callback(i),(t=e.file||t).match(/\\.js$/)||(t+=\".js\"),t.match(/^([a-z]+:|\\[MathJax\\])/))||(t=(this.strings[this.locale].directory||this.directory+\"/\"+this.locale||\"[MathJax]/localization/\"+this.locale)+\"/\"+t);var n=l.Ajax.Require(t,(function(){return e.isLoaded=!0,i()}));return n.called?null:n},loadDomain:function(t,e){var i,n=this.strings[this.locale];if(n){if(!n.isLoaded&&(i=this.loadFile(this.locale,n)))return l.Callback.Queue(i,[\"loadDomain\",this,t]).Push(e||{});if(n.domains&&t in n.domains){var a=n.domains[t];if(!a.isLoaded&&(i=this.loadFile(t,a)))return l.Callback.Queue(i).Push(e)}}return l.Callback(e)()},Try:function(t){(t=l.Callback(t)).autoReset=!0;try{t()}catch(e){if(!e.restart)throw e;l.Callback.After([\"Try\",this,t],e.restart)}},resetLocale:function(t){if(t){for(t=t.toLowerCase();!this.strings[t];){var e=t.lastIndexOf(\"-\");if(-1===e)return;t=t.substring(0,e)}var i=this.strings[t].remap;this.locale=i||t}},setLocale:function(t){this.resetLocale(t),l.Menu&&this.loadDomain(\"MathMenu\")},addTranslation:function(t,e,i){var n=this.strings[t],a=!1;n||(n=this.strings[t]={},a=!0),n.domains||(n.domains={}),e&&(n.domains[e]||(n.domains[e]={}),n=n.domains[e]),l.Hub.Insert(n,i),a&&l.Menu.menu&&l.Menu.CreateLocaleMenu()},setCSS:function(t){var e=this.strings[this.locale];return e&&(e.fontFamily&&(t.style.fontFamily=e.fontFamily),e.fontDirection&&(t.style.direction=e.fontDirection,\"rtl\"===e.fontDirection&&(t.style.textAlign=\"right\"))),t},fontFamily:function(){var t=this.strings[this.locale];return t?t.fontFamily:null},fontDirection:function(){var t=this.strings[this.locale];return t?t.fontDirection:null},plural:function(t){var e=this.strings[this.locale];return e&&e.plural?e.plural(t):1==t?1:2},number:function(t){var e=this.strings[this.locale];return e&&e.number?e.number(t):t}},l.Message={localize:function(t){return l.Localization._(t,t)},filterText:function(t,e,i){return\"simple\"===l.Hub.config.messageStyle&&(\"LoadFile\"===i?(this.loading||(this.loading=this.localize(\"Loading\")+\" \"),t=this.loading,this.loading+=\".\"):\"ProcessMath\"===i?(this.processing||(this.processing=this.localize(\"Processing\")+\" \"),t=this.processing,this.processing+=\".\"):\"TypesetMath\"===i&&(this.typesetting||(this.typesetting=this.localize(\"Typesetting\")+\" \"),t=this.typesetting,this.typesetting+=\".\")),t},Set:function(t,e,i){l.debug&&(Array.isArray(t)&&(t=l.Localization._.apply(l.Localization,t)),console.log(\"Message: \"+t))},Clear:function(t,e){},Remove:function(){},File:function(t){return this.Set([\"LoadFile\",\"Loading %1\",t],null,null)},Log:function(){}},l.Hub={config:{root:\"./mathjax2/legacy\",config:[],jax:[],extensions:[],preJax:null,postJax:null,displayAlign:\"center\",displayIndent:\"0\",preRemoveClass:\"MathJax_Preview\",showProcessingMessages:!0,messageStyle:\"normal\",delayStartupUntil:\"none\",skipStartupTypeset:!1,elements:[],positionToHash:!0,showMathMenu:!0,showMathMenuMSIE:!0,menuSettings:{zoom:\"None\",CTRL:!1,ALT:!1,CMD:!1,Shift:!1,discoverable:!1,zscale:\"200%\",renderer:null,font:\"Auto\",context:\"MathJax\",locale:null,mpContext:!1,mpMouse:!1,texHints:!0,FastPreview:null,assistiveMML:null,inTabOrder:!0,semantics:!1},errorSettings:{message:[\"[\",[\"MathProcessingError\",\"Math Processing Error\"],\"]\"],style:{color:\"#CC0000\",\"font-style\":\"italic\"}},ignoreMMLattributes:{}},preProcessors:l.Callback.Hooks(!0),inputJax:{},outputJax:{order:{}},processSectionDelay:50,processUpdateTime:250,processUpdateDelay:10,signal:l.Callback.Signal(\"Hub\"),Config:function(t){this.Insert(this.config,t),this.config.Augment&&this.Augment(this.config.Augment)},CombineConfig:function(t,e){for(var i,n,a=this.config,s=0,r=(t=t.split(/\\./)).length;s<r;s++)a[i=t[s]]||(a[i]={}),n=a,a=a[i];return n[i]=a=this.Insert(e,a),a},Register:{PreProcessor:function(){return l.Hub.preProcessors.Add.apply(l.Hub.preProcessors,arguments)},MessageHook:function(){return l.Hub.signal.MessageHook.apply(l.Hub.signal,arguments)},StartupHook:function(){return l.Hub.Startup.signal.MessageHook.apply(l.Hub.Startup.signal,arguments)},LoadHook:function(){return l.Ajax.LoadHook.apply(l.Ajax,arguments)}},UnRegister:{PreProcessor:function(t){l.Hub.preProcessors.Remove(t)},MessageHook:function(t){l.Hub.signal.RemoveHook(t)},StartupHook:function(t){l.Hub.Startup.signal.RemoveHook(t)},LoadHook:function(t){l.Ajax.removeHook(t)}},setRenderer:function(t,e){if(t){if(l.OutputJax[t]){this.config.menuSettings.renderer=t,null==e&&(e=\"jax/mml\");var i=this.outputJax;return i[e]&&i[e].length&&t!==i[e][0].id?(i[e].unshift(l.OutputJax[t]),this.signal.Post([\"Renderer Selected\",t])):null}this.config.menuSettings.renderer=\"\";var n=\"[MathJax]/jax/output/\"+t+\"/config.js\";return l.Ajax.Require(n,[\"setRenderer\",this,t,e])}},Queue:function(){return this.queue.Push.apply(this.queue,arguments)},RestartAfter:function(t){throw this.Insert(Error(\"restart\"),{restart:l.Callback(t)})},Insert:function(t,e){for(var i in e)e.hasOwnProperty(i)&&(\"object\"!=typeof e[i]||e[i]instanceof Array||\"object\"!=typeof t[i]&&\"function\"!=typeof t[i]?t[i]=e[i]:this.Insert(t[i],e[i]));return t},SplitList:\"trim\"in String.prototype?function(t){return t.trim().split(/\\s+/)}:function(t){return t.replace(/^\\s+/,\"\").replace(/\\s+$/,\"\").split(/\\s+/)}},l.Extension={},l.Hub.Startup={queue:l.Callback.Queue(),signal:l.Callback.Signal(\"Startup\")},l.Ajax.config.root=l.Hub.config.root,i=u.MathJax,n=\"[MathJax]\",a=i.Hub,s=i.Ajax,r=i.Callback,o=l.Object.Subclass({JAXFILE:\"jax.js\",require:null,config:{},Init:function(t,e){return 0===arguments.length?this:this.constructor.Subclass(t,e)()},Augment:function(t,e){var i=this.constructor,n={};if(null!=t){for(var s in t)t.hasOwnProperty(s)&&(\"function\"==typeof t[s]?i.protoFunction(s,t[s]):n[s]=t[s]);t.toString!==i.prototype.toString&&t.toString!=={}.toString&&i.protoFunction(\"toString\",t.toString)}return a.Insert(i.prototype,n),i.Augment(null,e),this},Translate:function(t,e){throw Error(this.directory+\"/\"+this.JAXFILE+\" failed to define the Translate() method\")},Register:function(t){},Config:function(){this.config=a.CombineConfig(this.id,this.config),this.config.Augment&&this.Augment(this.config.Augment)},Startup:function(){},loadComplete:function(t){if(\"config.js\"===t)return s.loadComplete(this.directory+\"/\"+t);var e=r.Queue();return e.Push([\"Post\",a.Startup.signal,this.id+\" Jax Config\"],[\"Config\",this],[\"Post\",a.Startup.signal,this.id+\" Jax Startup\"],[\"Startup\",this],[\"Post\",a.Startup.signal,this.id+\" Jax Ready\"]),this.copyTranslate&&e.Push([function(t){t.preProcess=t.preTranslate,t.Process=t.Translate,t.postProcess=t.postTranslate},this.constructor.prototype]),e.Push([\"loadComplete\",s,this.directory+\"/\"+t])}},{id:\"Jax\",version:\"2.6.0\",directory:n+\"/jax\",extensionDir:n+\"/extensions\"}),i.InputJax=o.Subclass({elementJax:\"mml\",sourceMenuTitle:[\"Original\",\"Original Form\"],copyTranslate:!0,Process:function(t,e){throw Error(\"Input jax failed to load properly\")},needsUpdate:function(t){var e=t.SourceElement();return t.originalText!==i.HTML.getScript(e)},Register:function(t){a.inputJax||(a.inputJax={}),a.inputJax[t]=this}},{id:\"InputJax\",version:\"2.6.0\",directory:o.directory+\"/input\",extensionDir:o.extensionDir}),i.OutputJax=o.Subclass({copyTranslate:!0,preProcess:function(t){throw Error(\"Output jax failed to load properly\")},Register:function(t){var e=a.outputJax;e[t]||(e[t]=[]),e[t].length&&(this.id===a.config.menuSettings.renderer||(e.order[this.id]||0)<(e.order[e[t][0].id]||0))?e[t].unshift(this):e[t].push(this)},Remove:function(t){}},{id:\"OutputJax\",version:\"2.6.0\",directory:o.directory+\"/output\",extensionDir:o.extensionDir,fontDir:n+(i.isPacked?\"\":\"/..\")+\"/fonts\",imageDir:n+(i.isPacked?\"\":\"/..\")+\"/images\"}),i.ElementJax=o.Subclass({Init:function(t,e){return this.constructor.Subclass(t,e)},inputJax:null,outputJax:null,inputID:null,originalText:\"\",mimeType:\"\",sourceMenuTitle:[\"MathMLcode\",\"MathML Code\"],Text:function(t,e){var n=this.SourceElement();return i.HTML.setScript(n,t),n.MathJax.state=this.STATE.UPDATE,a.Update(n,e)},Reprocess:function(t){var e=this.SourceElement();return e.MathJax.state=this.STATE.UPDATE,a.Reprocess(e,t)},Update:function(t){return this.Rerender(t)},Rerender:function(t){var e=this.SourceElement();return e.MathJax.state=this.STATE.OUTPUT,a.Process(e,t)},Remove:function(t){this.hover&&this.hover.clear(this),i.OutputJax[this.outputJax].Remove(this),t||(a.signal.Post([\"Remove Math\",this.inputID]),this.Detach())},needsUpdate:function(){return i.InputJax[this.inputJax].needsUpdate(this)},SourceElement:function(){return p.getElementById(this.inputID)},Attach:function(t,e){var n=t.MathJax.elementJax;return t.MathJax.state===this.STATE.UPDATE?n.Clone(this):(n=t.MathJax.elementJax=this,t.id?this.inputID=t.id:(t.id=this.inputID=i.ElementJax.GetID(),this.newID=1)),n.originalText=i.HTML.getScript(t),n.inputJax=e,n.root&&(n.root.inputID=n.inputID),n},Detach:function(){var t=this.SourceElement();if(t){try{delete t.MathJax}catch(e){t.MathJax=null}this.newID&&(t.id=\"\")}},Clone:function(t){var e;for(e in this)this.hasOwnProperty(e)&&void 0===t[e]&&\"newID\"!==e&&delete this[e];for(e in t)t.hasOwnProperty(e)&&(void 0===this[e]||this[e]!==t[e]&&\"inputID\"!==e)&&(this[e]=t[e])}},{id:\"ElementJax\",version:\"2.6.0\",directory:o.directory+\"/element\",extensionDir:o.extensionDir,ID:0,STATE:{PENDING:1,PROCESSED:2,UPDATE:3,OUTPUT:4},GetID:function(){return this.ID++,\"MathJax-Element-\"+this.ID},Subclass:function(){var t=o.Subclass.apply(this,arguments);return t.loadComplete=this.prototype.loadComplete,t}}),i.ElementJax.prototype.STATE=i.ElementJax.STATE,l.Hub.Browser={Select:function(){}}},function(t,e){MathJax.ElementJax.mml=MathJax.ElementJax({mimeType:\"jax/mml\"},{id:\"mml\",version:\"2.7.2\",directory:MathJax.ElementJax.directory+\"/mml\",extensionDir:MathJax.ElementJax.extensionDir+\"/mml\",optableDir:MathJax.ElementJax.directory+\"/mml/optable\"}),MathJax.ElementJax.mml.Augment({Init:function(){if(1===arguments.length&&\"math\"===arguments[0].type?this.root=arguments[0]:this.root=MathJax.ElementJax.mml.math.apply(this,arguments),this.root.attr&&this.root.attr.mode){this.root.display||\"display\"!==this.root.attr.mode||(this.root.display=\"block\",this.root.attrNames.push(\"display\")),delete this.root.attr.mode;for(var t=0,e=this.root.attrNames.length;t<e;t++)if(\"mode\"===this.root.attrNames[t]){this.root.attrNames.splice(t,1);break}}}},{INHERIT:\"_inherit_\",AUTO:\"_auto_\",SIZE:{INFINITY:\"infinity\",SMALL:\"small\",NORMAL:\"normal\",BIG:\"big\"},COLOR:{TRANSPARENT:\"transparent\"},VARIANT:{NORMAL:\"normal\",BOLD:\"bold\",ITALIC:\"italic\",BOLDITALIC:\"bold-italic\",DOUBLESTRUCK:\"double-struck\",FRAKTUR:\"fraktur\",BOLDFRAKTUR:\"bold-fraktur\",SCRIPT:\"script\",BOLDSCRIPT:\"bold-script\",SANSSERIF:\"sans-serif\",BOLDSANSSERIF:\"bold-sans-serif\",SANSSERIFITALIC:\"sans-serif-italic\",SANSSERIFBOLDITALIC:\"sans-serif-bold-italic\",MONOSPACE:\"monospace\",INITIAL:\"inital\",TAILED:\"tailed\",LOOPED:\"looped\",STRETCHED:\"stretched\",CALIGRAPHIC:\"-tex-caligraphic\",OLDSTYLE:\"-tex-oldstyle\"},FORM:{PREFIX:\"prefix\",INFIX:\"infix\",POSTFIX:\"postfix\"},LINEBREAK:{AUTO:\"auto\",NEWLINE:\"newline\",NOBREAK:\"nobreak\",GOODBREAK:\"goodbreak\",BADBREAK:\"badbreak\"},LINEBREAKSTYLE:{BEFORE:\"before\",AFTER:\"after\",DUPLICATE:\"duplicate\",INFIXLINBREAKSTYLE:\"infixlinebreakstyle\"},INDENTALIGN:{LEFT:\"left\",CENTER:\"center\",RIGHT:\"right\",AUTO:\"auto\",ID:\"id\",INDENTALIGN:\"indentalign\"},INDENTSHIFT:{INDENTSHIFT:\"indentshift\"},LINETHICKNESS:{THIN:\"thin\",MEDIUM:\"medium\",THICK:\"thick\"},NOTATION:{LONGDIV:\"longdiv\",ACTUARIAL:\"actuarial\",RADICAL:\"radical\",BOX:\"box\",ROUNDEDBOX:\"roundedbox\",CIRCLE:\"circle\",LEFT:\"left\",RIGHT:\"right\",TOP:\"top\",BOTTOM:\"bottom\",UPDIAGONALSTRIKE:\"updiagonalstrike\",DOWNDIAGONALSTRIKE:\"downdiagonalstrike\",UPDIAGONALARROW:\"updiagonalarrow\",VERTICALSTRIKE:\"verticalstrike\",HORIZONTALSTRIKE:\"horizontalstrike\",PHASORANGLE:\"phasorangle\",MADRUWB:\"madruwb\"},ALIGN:{TOP:\"top\",BOTTOM:\"bottom\",CENTER:\"center\",BASELINE:\"baseline\",AXIS:\"axis\",LEFT:\"left\",RIGHT:\"right\"},LINES:{NONE:\"none\",SOLID:\"solid\",DASHED:\"dashed\"},SIDE:{LEFT:\"left\",RIGHT:\"right\",LEFTOVERLAP:\"leftoverlap\",RIGHTOVERLAP:\"rightoverlap\"},WIDTH:{AUTO:\"auto\",FIT:\"fit\"},ACTIONTYPE:{TOGGLE:\"toggle\",STATUSLINE:\"statusline\",TOOLTIP:\"tooltip\",INPUT:\"input\"},LENGTH:{VERYVERYTHINMATHSPACE:\"veryverythinmathspace\",VERYTHINMATHSPACE:\"verythinmathspace\",THINMATHSPACE:\"thinmathspace\",MEDIUMMATHSPACE:\"mediummathspace\",THICKMATHSPACE:\"thickmathspace\",VERYTHICKMATHSPACE:\"verythickmathspace\",VERYVERYTHICKMATHSPACE:\"veryverythickmathspace\",NEGATIVEVERYVERYTHINMATHSPACE:\"negativeveryverythinmathspace\",NEGATIVEVERYTHINMATHSPACE:\"negativeverythinmathspace\",NEGATIVETHINMATHSPACE:\"negativethinmathspace\",NEGATIVEMEDIUMMATHSPACE:\"negativemediummathspace\",NEGATIVETHICKMATHSPACE:\"negativethickmathspace\",NEGATIVEVERYTHICKMATHSPACE:\"negativeverythickmathspace\",NEGATIVEVERYVERYTHICKMATHSPACE:\"negativeveryverythickmathspace\"},OVERFLOW:{LINBREAK:\"linebreak\",SCROLL:\"scroll\",ELIDE:\"elide\",TRUNCATE:\"truncate\",SCALE:\"scale\"},UNIT:{EM:\"em\",EX:\"ex\",PX:\"px\",IN:\"in\",CM:\"cm\",MM:\"mm\",PT:\"pt\",PC:\"pc\"},TEXCLASS:{ORD:0,OP:1,BIN:2,REL:3,OPEN:4,CLOSE:5,PUNCT:6,INNER:7,VCENTER:8,NONE:-1},TEXCLASSNAMES:[\"ORD\",\"OP\",\"BIN\",\"REL\",\"OPEN\",\"CLOSE\",\"PUNCT\",\"INNER\",\"VCENTER\"],skipAttributes:{texClass:!0,useHeight:!0,texprimestyle:!0},copyAttributes:{displaystyle:1,scriptlevel:1,open:1,close:1,form:1,actiontype:1,fontfamily:!0,fontsize:!0,fontweight:!0,fontstyle:!0,color:!0,background:!0,id:!0,class:1,href:!0,style:!0},copyAttributeNames:[\"displaystyle\",\"scriptlevel\",\"open\",\"close\",\"form\",\"actiontype\",\"fontfamily\",\"fontsize\",\"fontweight\",\"fontstyle\",\"color\",\"background\",\"id\",\"class\",\"href\",\"style\"],nocopyAttributes:{fontfamily:!0,fontsize:!0,fontweight:!0,fontstyle:!0,color:!0,background:!0,id:!0,class:!0,href:!0,style:!0,xmlns:!0},Error:function(t,e){var i=this.merror(t),n=MathJax.Localization.fontDirection(),a=MathJax.Localization.fontFamily();return e&&(i=i.With(e)),(n||a)&&(i=this.mstyle(i),n&&(i.dir=n),a&&(i.style.fontFamily=\"font-family: \"+a)),i}}),function(t){t.mbase=MathJax.Object.Subclass({type:\"base\",isToken:!1,defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,dir:t.INHERIT},noInherit:{},noInheritAttribute:{texClass:!0},getRemoved:{},linebreakContainer:!1,Init:function(){this.data=[],!this.inferRow||1===arguments.length&&arguments[0].inferred||this.Append(t.mrow().With({inferred:!0,notParent:!0})),this.Append.apply(this,arguments)},With:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);return this},Append:function(){if(this.inferRow&&this.data.length)this.data[0].Append.apply(this.data[0],arguments);else for(var t=0,e=arguments.length;t<e;t++)this.SetData(this.data.length,arguments[t])},SetData:function(e,i){null!=i&&(i instanceof t.mbase||(i=this.isToken||this.isChars?t.chars(i):t.mtext(i)),i.parent=this,i.setInherit(this.inheritFromMe?this:this.inherit)),this.data[e]=i},Parent:function(){for(var t=this.parent;t&&t.notParent;)t=t.parent;return t},Get:function(e,i,n){if(!n){if(null!=this[e])return this[e];if(this.attr&&null!=this.attr[e])return this.attr[e]}var a=this.Parent();if(a&&null!=a[\"adjustChild_\"+e])return a[\"adjustChild_\"+e](this.childPosition(),i);for(var s=this.inherit,r=s;s;){var o=s[e];if(null==o&&s.attr&&(o=s.attr[e]),s.removedStyles&&s.getRemoved[e]&&null==o&&(o=s.removedStyles[s.getRemoved[e]]),null!=o&&s.noInheritAttribute&&!s.noInheritAttribute[e]){var l=s.noInherit[this.type];if(!l||!l[e])return o}r=s,s=s.inherit}if(!i){if(this.defaults[e]===t.AUTO)return this.autoDefault(e);if(this.defaults[e]!==t.INHERIT&&null!=this.defaults[e])return this.defaults[e];if(r)return r.defaults[e]}return null},hasValue:function(t){return null!=this.Get(t,!0)},getValues:function(){for(var t={},e=0,i=arguments.length;e<i;e++)t[arguments[e]]=this.Get(arguments[e]);return t},adjustChild_scriptlevel:function(t,e){return this.Get(\"scriptlevel\",e)},adjustChild_displaystyle:function(t,e){return this.Get(\"displaystyle\",e)},adjustChild_texprimestyle:function(t,e){return this.Get(\"texprimestyle\",e)},childPosition:function(){for(var t=this,e=t.parent;e.notParent;)e=(t=e).parent;for(var i=0,n=e.data.length;i<n;i++)if(e.data[i]===t)return i;return null},setInherit:function(t){if(t!==this.inherit&&null==this.inherit){this.inherit=t;for(var e=0,i=this.data.length;e<i;e++)this.data[e]&&this.data[e].setInherit&&this.data[e].setInherit(t)}},setTeXclass:function(t){return this.getPrevClass(t),void 0!==this.texClass?this:t},getPrevClass:function(t){t&&(this.prevClass=t.Get(\"texClass\"),this.prevLevel=t.Get(\"scriptlevel\"))},updateTeXclass:function(t){t&&(this.prevClass=t.prevClass,delete t.prevClass,this.prevLevel=t.prevLevel,delete t.prevLevel,this.texClass=t.Get(\"texClass\"))},texSpacing:function(){var e=null!=this.prevClass?this.prevClass:t.TEXCLASS.NONE,i=this.Get(\"texClass\")||t.TEXCLASS.ORD;if(e===t.TEXCLASS.NONE||i===t.TEXCLASS.NONE)return\"\";e===t.TEXCLASS.VCENTER&&(e=t.TEXCLASS.ORD),i===t.TEXCLASS.VCENTER&&(i=t.TEXCLASS.ORD);var n=this.TEXSPACE[e][i];return(this.prevLevel>0||this.Get(\"scriptlevel\")>0)&&n>=0?\"\":this.TEXSPACELENGTH[Math.abs(n)]},TEXSPACELENGTH:[\"\",t.LENGTH.THINMATHSPACE,t.LENGTH.MEDIUMMATHSPACE,t.LENGTH.THICKMATHSPACE],TEXSPACE:[[0,-1,2,3,0,0,0,1],[-1,-1,0,3,0,0,0,1],[2,2,0,0,2,0,0,2],[3,3,0,0,3,0,0,3],[0,0,0,0,0,0,0,0],[0,-1,2,3,0,0,0,1],[1,1,0,1,1,1,1,1],[1,-1,2,3,1,0,1,1]],autoDefault:function(t){return\"\"},isSpacelike:function(){return!1},isEmbellished:function(){return!1},Core:function(){return this},CoreMO:function(){return this},childIndex:function(t){if(null!=t)for(var e=0,i=this.data.length;e<i;e++)if(t===this.data[e])return e},CoreIndex:function(){return(this.inferRow&&this.data[0]||this).childIndex(this.Core())},hasNewline:function(){if(this.isEmbellished())return this.CoreMO().hasNewline();if(this.isToken||this.linebreakContainer)return!1;for(var t=0,e=this.data.length;t<e;t++)if(this.data[t]&&this.data[t].hasNewline())return!0;return!1},array:function(){return this.inferred?this.data:[this]},toString:function(){return this.type+\"(\"+this.data.join(\",\")+\")\"},getAnnotation:function(){return null}},{childrenSpacelike:function(){for(var t=0,e=this.data.length;t<e;t++)if(!this.data[t].isSpacelike())return!1;return!0},childEmbellished:function(){return this.data[0]&&this.data[0].isEmbellished()},childCore:function(){return this.inferRow&&this.data[0]?this.data[0].Core():this.data[0]},childCoreMO:function(){return this.data[0]?this.data[0].CoreMO():null},setChildTeXclass:function(t){return this.data[0]&&(t=this.data[0].setTeXclass(t),this.updateTeXclass(this.data[0])),t},setBaseTeXclasses:function(e){this.getPrevClass(e),this.texClass=null,this.data[0]?this.isEmbellished()||this.data[0].isa(t.mi)?(e=this.data[0].setTeXclass(e),this.updateTeXclass(this.Core())):(this.data[0].setTeXclass(),e=this):e=this;for(var i=1,n=this.data.length;i<n;i++)this.data[i]&&this.data[i].setTeXclass();return e},setSeparateTeXclasses:function(t){this.getPrevClass(t);for(var e=0,i=this.data.length;e<i;e++)this.data[e]&&this.data[e].setTeXclass();return this.isEmbellished()&&this.updateTeXclass(this.Core()),this}}),t.mi=t.mbase.Subclass({type:\"mi\",isToken:!0,texClass:t.TEXCLASS.ORD,defaults:{mathvariant:t.AUTO,mathsize:t.INHERIT,mathbackground:t.INHERIT,mathcolor:t.INHERIT,dir:t.INHERIT},autoDefault:function(e){if(\"mathvariant\"===e){var i=(this.data[0]||\"\").toString();return 1===i.length||2===i.length&&i.charCodeAt(0)>=55296&&i.charCodeAt(0)<56320?t.VARIANT.ITALIC:t.VARIANT.NORMAL}return\"\"},setTeXclass:function(e){this.getPrevClass(e);var i=this.data.join(\"\");return i.length>1&&i.match(/^[a-z][a-z0-9]*$/i)&&this.texClass===t.TEXCLASS.ORD&&(this.texClass=t.TEXCLASS.OP,this.autoOP=!0),this}}),t.mn=t.mbase.Subclass({type:\"mn\",isToken:!0,texClass:t.TEXCLASS.ORD,defaults:{mathvariant:t.INHERIT,mathsize:t.INHERIT,mathbackground:t.INHERIT,mathcolor:t.INHERIT,dir:t.INHERIT}}),t.mo=t.mbase.Subclass({type:\"mo\",isToken:!0,defaults:{mathvariant:t.INHERIT,mathsize:t.INHERIT,mathbackground:t.INHERIT,mathcolor:t.INHERIT,dir:t.INHERIT,form:t.AUTO,fence:t.AUTO,separator:t.AUTO,lspace:t.AUTO,rspace:t.AUTO,stretchy:t.AUTO,symmetric:t.AUTO,maxsize:t.AUTO,minsize:t.AUTO,largeop:t.AUTO,movablelimits:t.AUTO,accent:t.AUTO,linebreak:t.LINEBREAK.AUTO,lineleading:t.INHERIT,linebreakstyle:t.AUTO,linebreakmultchar:t.INHERIT,indentalign:t.INHERIT,indentshift:t.INHERIT,indenttarget:t.INHERIT,indentalignfirst:t.INHERIT,indentshiftfirst:t.INHERIT,indentalignlast:t.INHERIT,indentshiftlast:t.INHERIT,texClass:t.AUTO},defaultDef:{form:t.FORM.INFIX,fence:!1,separator:!1,lspace:t.LENGTH.THICKMATHSPACE,rspace:t.LENGTH.THICKMATHSPACE,stretchy:!1,symmetric:!1,maxsize:t.SIZE.INFINITY,minsize:\"0em\",largeop:!1,movablelimits:!1,accent:!1,linebreak:t.LINEBREAK.AUTO,lineleading:\"1ex\",linebreakstyle:\"before\",indentalign:t.INDENTALIGN.AUTO,indentshift:\"0\",indenttarget:\"\",indentalignfirst:t.INDENTALIGN.INDENTALIGN,indentshiftfirst:t.INDENTSHIFT.INDENTSHIFT,indentalignlast:t.INDENTALIGN.INDENTALIGN,indentshiftlast:t.INDENTSHIFT.INDENTSHIFT,texClass:t.TEXCLASS.REL},SPACE_ATTR:{lspace:1,rspace:2,form:4},useMMLspacing:7,autoDefault:function(e,i){var n=this.def;if(!n){if(\"form\"===e)return this.useMMLspacing&=~this.SPACE_ATTR.form,this.getForm();for(var a=this.data.join(\"\"),s=[this.Get(\"form\"),t.FORM.INFIX,t.FORM.POSTFIX,t.FORM.PREFIX],r=0,o=s.length;r<o;r++){var l=this.OPTABLE[s[r]][a];if(l){n=this.makeDef(l);break}}n||(n=this.CheckRange(a)),!n&&i?n={}:(n||(n=MathJax.Hub.Insert({},this.defaultDef)),this.parent?this.def=n:n=MathJax.Hub.Insert({},n),n.form=s[0])}return this.useMMLspacing&=~(this.SPACE_ATTR[e]||0),null!=n[e]?n[e]:i?\"\":this.defaultDef[e]},CheckRange:function(e){var i=e.charCodeAt(0);i>=55296&&i<56320&&(i=(i-55296<<10)+(e.charCodeAt(1)-56320)+65536);for(var n=0,a=this.RANGES.length;n<a&&this.RANGES[n][0]<=i;n++)if(i<=this.RANGES[n][1]){if(this.RANGES[n][3]){var s=t.optableDir+\"/\"+this.RANGES[n][3]+\".js\";this.RANGES[n][3]=null,MathJax.Hub.RestartAfter(MathJax.Ajax.Require(s))}var r=t.TEXCLASSNAMES[this.RANGES[n][2]];return r=this.OPTABLE.infix[e]=t.mo.OPTYPES[\"BIN\"===r?\"BIN3\":r],this.makeDef(r)}return null},makeDef:function(e){null==e[2]&&(e[2]=this.defaultDef.texClass),e[3]||(e[3]={});var i=MathJax.Hub.Insert({},e[3]);return i.lspace=this.SPACE[e[0]],i.rspace=this.SPACE[e[1]],i.texClass=e[2],i.texClass===t.TEXCLASS.REL&&(this.movablelimits||this.data.join(\"\").match(/^[a-z]+$/i))&&(i.texClass=t.TEXCLASS.OP),i},getForm:function(){for(var e=this,i=this.parent,n=this.Parent();n&&n.isEmbellished();)e=i,i=n.parent,n=n.Parent();if(i&&\"mrow\"===i.type&&1!==i.NonSpaceLength()){if(i.FirstNonSpace()===e)return t.FORM.PREFIX;if(i.LastNonSpace()===e)return t.FORM.POSTFIX}return t.FORM.INFIX},isEmbellished:function(){return!0},hasNewline:function(){return this.Get(\"linebreak\")===t.LINEBREAK.NEWLINE},CoreParent:function(){for(var e=this;e&&e.isEmbellished()&&e.CoreMO()===this&&!e.isa(t.math);)e=e.Parent();return e},CoreText:function(e){if(!e)return\"\";if(e.isEmbellished())return e.CoreMO().data.join(\"\");for(;((e.isa(t.mrow)||e.isa(t.TeXAtom)||e.isa(t.mstyle)||e.isa(t.mphantom))&&1===e.data.length||e.isa(t.munderover))&&e.data[0];)e=e.data[0];return e.isToken?e.data.join(\"\"):\"\"},remapChars:{\"*\":\"\\u2217\",'\"':\"\\u2033\",\"\\xb0\":\"\\u2218\",\"\\xb2\":\"2\",\"\\xb3\":\"3\",\"\\xb4\":\"\\u2032\",\"\\xb9\":\"1\"},remap:function(t,e){return t=t.replace(/-/g,\"\\u2212\"),e&&1===(t=t.replace(/'/g,\"\\u2032\").replace(/`/g,\"\\u2035\")).length&&(t=e[t]||t),t},setTeXclass:function(e){var i=this.getValues(\"form\",\"lspace\",\"rspace\",\"fence\");return this.useMMLspacing?(this.texClass=t.TEXCLASS.NONE,this):(i.fence&&!this.texClass&&(i.form===t.FORM.PREFIX&&(this.texClass=t.TEXCLASS.OPEN),i.form===t.FORM.POSTFIX&&(this.texClass=t.TEXCLASS.CLOSE)),this.texClass=this.Get(\"texClass\"),\"\\u2061\"===this.data.join(\"\")?(e&&(e.texClass=t.TEXCLASS.OP,e.fnOP=!0),this.texClass=this.prevClass=t.TEXCLASS.NONE,e):this.adjustTeXclass(e))},adjustTeXclass:function(e){if(this.texClass===t.TEXCLASS.NONE)return e;if(e?(!e.autoOP||this.texClass!==t.TEXCLASS.BIN&&this.texClass!==t.TEXCLASS.REL||(e.texClass=t.TEXCLASS.ORD),this.prevClass=e.texClass||t.TEXCLASS.ORD,this.prevLevel=e.Get(\"scriptlevel\")):this.prevClass=t.TEXCLASS.NONE,this.texClass!==t.TEXCLASS.BIN||this.prevClass!==t.TEXCLASS.NONE&&this.prevClass!==t.TEXCLASS.BIN&&this.prevClass!==t.TEXCLASS.OP&&this.prevClass!==t.TEXCLASS.REL&&this.prevClass!==t.TEXCLASS.OPEN&&this.prevClass!==t.TEXCLASS.PUNCT)if(this.prevClass!==t.TEXCLASS.BIN||this.texClass!==t.TEXCLASS.REL&&this.texClass!==t.TEXCLASS.CLOSE&&this.texClass!==t.TEXCLASS.PUNCT){if(this.texClass===t.TEXCLASS.BIN){for(var i=this,n=this.parent;n&&n.parent&&n.isEmbellished()&&(1===n.data.length||\"mrow\"!==n.type&&n.Core()===i);)i=n,n=n.parent;n.data[n.data.length-1]===i&&(this.texClass=t.TEXCLASS.ORD)}}else e.texClass=this.prevClass=t.TEXCLASS.ORD;else this.texClass=t.TEXCLASS.ORD;return this}}),t.mtext=t.mbase.Subclass({type:\"mtext\",isToken:!0,isSpacelike:function(){return!0},texClass:t.TEXCLASS.ORD,defaults:{mathvariant:t.INHERIT,mathsize:t.INHERIT,mathbackground:t.INHERIT,mathcolor:t.INHERIT,dir:t.INHERIT}}),t.mspace=t.mbase.Subclass({type:\"mspace\",isToken:!0,isSpacelike:function(){return!0},defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,width:\"0em\",height:\"0ex\",depth:\"0ex\",linebreak:t.LINEBREAK.AUTO},hasDimAttr:function(){return this.hasValue(\"width\")||this.hasValue(\"height\")||this.hasValue(\"depth\")},hasNewline:function(){return!this.hasDimAttr()&&this.Get(\"linebreak\")===t.LINEBREAK.NEWLINE}}),t.ms=t.mbase.Subclass({type:\"ms\",isToken:!0,texClass:t.TEXCLASS.ORD,defaults:{mathvariant:t.INHERIT,mathsize:t.INHERIT,mathbackground:t.INHERIT,mathcolor:t.INHERIT,dir:t.INHERIT,lquote:'\"',rquote:'\"'}}),t.mglyph=t.mbase.Subclass({type:\"mglyph\",isToken:!0,texClass:t.TEXCLASS.ORD,defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,alt:\"\",src:\"\",width:t.AUTO,height:t.AUTO,valign:\"0em\"}}),t.mrow=t.mbase.Subclass({type:\"mrow\",isSpacelike:t.mbase.childrenSpacelike,inferred:!1,notParent:!1,isEmbellished:function(){for(var t=!1,e=0,i=this.data.length;e<i;e++)if(null!=this.data[e])if(this.data[e].isEmbellished()){if(t)return!1;t=!0,this.core=e}else if(!this.data[e].isSpacelike())return!1;return t},NonSpaceLength:function(){for(var t=0,e=0,i=this.data.length;e<i;e++)this.data[e]&&!this.data[e].isSpacelike()&&t++;return t},FirstNonSpace:function(){for(var t=0,e=this.data.length;t<e;t++)if(this.data[t]&&!this.data[t].isSpacelike())return this.data[t];return null},LastNonSpace:function(){for(var t=this.data.length-1;t>=0;t--)if(this.data[0]&&!this.data[t].isSpacelike())return this.data[t];return null},Core:function(){return this.isEmbellished()&&void 0!==this.core?this.data[this.core]:this},CoreMO:function(){return this.isEmbellished()&&void 0!==this.core?this.data[this.core].CoreMO():this},toString:function(){return this.inferred?\"[\"+this.data.join(\",\")+\"]\":this.SUPER(arguments).toString.call(this)},setTeXclass:function(e){var i,n=this.data.length;if(!this.open&&!this.close||e&&e.fnOP){for(i=0;i<n;i++)this.data[i]&&(e=this.data[i].setTeXclass(e));return this.data[0]&&this.updateTeXclass(this.data[0]),e}for(this.getPrevClass(e),e=null,i=0;i<n;i++)this.data[i]&&(e=this.data[i].setTeXclass(e));return this.hasOwnProperty(\"texClass\")||(this.texClass=t.TEXCLASS.INNER),this},getAnnotation:function(t){return 1!=this.data.length?null:this.data[0].getAnnotation(t)}}),t.mfrac=t.mbase.Subclass({type:\"mfrac\",num:0,den:1,linebreakContainer:!0,isEmbellished:t.mbase.childEmbellished,Core:t.mbase.childCore,CoreMO:t.mbase.childCoreMO,defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,linethickness:t.LINETHICKNESS.MEDIUM,numalign:t.ALIGN.CENTER,denomalign:t.ALIGN.CENTER,bevelled:!1},adjustChild_displaystyle:function(t){return!1},adjustChild_scriptlevel:function(t){var e=this.Get(\"scriptlevel\");return(!this.Get(\"displaystyle\")||e>0)&&e++,e},adjustChild_texprimestyle:function(t){return t==this.den||this.Get(\"texprimestyle\")},setTeXclass:t.mbase.setSeparateTeXclasses}),t.msqrt=t.mbase.Subclass({type:\"msqrt\",inferRow:!0,linebreakContainer:!0,texClass:t.TEXCLASS.ORD,setTeXclass:t.mbase.setSeparateTeXclasses,adjustChild_texprimestyle:function(t){return!0}}),t.mroot=t.mbase.Subclass({type:\"mroot\",linebreakContainer:!0,texClass:t.TEXCLASS.ORD,adjustChild_displaystyle:function(t){return 1!==t&&this.Get(\"displaystyle\")},adjustChild_scriptlevel:function(t){var e=this.Get(\"scriptlevel\");return 1===t&&(e+=2),e},adjustChild_texprimestyle:function(t){return 0===t||this.Get(\"texprimestyle\")},setTeXclass:t.mbase.setSeparateTeXclasses}),t.mstyle=t.mbase.Subclass({type:\"mstyle\",isSpacelike:t.mbase.childrenSpacelike,isEmbellished:t.mbase.childEmbellished,Core:t.mbase.childCore,CoreMO:t.mbase.childCoreMO,inferRow:!0,defaults:{scriptlevel:t.INHERIT,displaystyle:t.INHERIT,scriptsizemultiplier:Math.sqrt(.5),scriptminsize:\"8pt\",mathbackground:t.INHERIT,mathcolor:t.INHERIT,dir:t.INHERIT,infixlinebreakstyle:t.LINEBREAKSTYLE.BEFORE,decimalseparator:\".\"},adjustChild_scriptlevel:function(t){var e=this.scriptlevel;if(null==e)e=this.Get(\"scriptlevel\");else if(String(e).match(/^ *[-+]/)){e=this.Get(\"scriptlevel\",null,!0)+parseInt(e)}return e},inheritFromMe:!0,noInherit:{mpadded:{width:!0,height:!0,depth:!0,lspace:!0,voffset:!0},mtable:{width:!0,height:!0,depth:!0,align:!0}},getRemoved:{fontfamily:\"fontFamily\",fontweight:\"fontWeight\",fontstyle:\"fontStyle\",fontsize:\"fontSize\"},setTeXclass:t.mbase.setChildTeXclass}),t.merror=t.mbase.Subclass({type:\"merror\",inferRow:!0,linebreakContainer:!0,texClass:t.TEXCLASS.ORD}),t.mpadded=t.mbase.Subclass({type:\"mpadded\",inferRow:!0,isSpacelike:t.mbase.childrenSpacelike,isEmbellished:t.mbase.childEmbellished,Core:t.mbase.childCore,CoreMO:t.mbase.childCoreMO,defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,width:\"\",height:\"\",depth:\"\",lspace:0,voffset:0},setTeXclass:t.mbase.setChildTeXclass}),t.mphantom=t.mbase.Subclass({type:\"mphantom\",texClass:t.TEXCLASS.ORD,inferRow:!0,isSpacelike:t.mbase.childrenSpacelike,isEmbellished:t.mbase.childEmbellished,Core:t.mbase.childCore,CoreMO:t.mbase.childCoreMO,setTeXclass:t.mbase.setChildTeXclass}),t.mfenced=t.mbase.Subclass({type:\"mfenced\",defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,open:\"(\",close:\")\",separators:\",\"},addFakeNodes:function(){var e=this.getValues(\"open\",\"close\",\"separators\");if(e.open=e.open.replace(/[ \\t\\n\\r]/g,\"\"),e.close=e.close.replace(/[ \\t\\n\\r]/g,\"\"),e.separators=e.separators.replace(/[ \\t\\n\\r]/g,\"\"),\"\"!==e.open&&(this.SetData(\"open\",t.mo(e.open).With({fence:!0,form:t.FORM.PREFIX,texClass:t.TEXCLASS.OPEN})),this.data.open.useMMLspacing=0),\"\"!==e.separators){for(;e.separators.length<this.data.length;)e.separators+=e.separators.charAt(e.separators.length-1);for(var i=1,n=this.data.length;i<n;i++)this.data[i]&&(this.SetData(\"sep\"+i,t.mo(e.separators.charAt(i-1)).With({separator:!0})),this.data[\"sep\"+i].useMMLspacing=0)}\"\"!==e.close&&(this.SetData(\"close\",t.mo(e.close).With({fence:!0,form:t.FORM.POSTFIX,texClass:t.TEXCLASS.CLOSE})),this.data.close.useMMLspacing=0)},texClass:t.TEXCLASS.OPEN,setTeXclass:function(e){this.addFakeNodes(),this.getPrevClass(e),this.data.open&&(e=this.data.open.setTeXclass(e)),this.data[0]&&(e=this.data[0].setTeXclass(e));for(var i=1,n=this.data.length;i<n;i++)this.data[\"sep\"+i]&&(e=this.data[\"sep\"+i].setTeXclass(e)),this.data[i]&&(e=this.data[i].setTeXclass(e));return this.data.close&&(e=this.data.close.setTeXclass(e)),this.updateTeXclass(this.data.open),this.texClass=t.TEXCLASS.INNER,e}}),t.menclose=t.mbase.Subclass({type:\"menclose\",inferRow:!0,linebreakContainer:!0,defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,notation:t.NOTATION.LONGDIV,texClass:t.TEXCLASS.ORD},setTeXclass:t.mbase.setSeparateTeXclasses}),t.msubsup=t.mbase.Subclass({type:\"msubsup\",base:0,sub:1,sup:2,isEmbellished:t.mbase.childEmbellished,Core:t.mbase.childCore,CoreMO:t.mbase.childCoreMO,defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,subscriptshift:\"\",superscriptshift:\"\",texClass:t.AUTO},autoDefault:function(e){return\"texClass\"===e?this.isEmbellished()?this.CoreMO().Get(e):t.TEXCLASS.ORD:0},adjustChild_displaystyle:function(t){return!(t>0)&&this.Get(\"displaystyle\")},adjustChild_scriptlevel:function(t){var e=this.Get(\"scriptlevel\");return t>0&&e++,e},adjustChild_texprimestyle:function(t){return t===this.sub||this.Get(\"texprimestyle\")},setTeXclass:t.mbase.setBaseTeXclasses}),t.msub=t.msubsup.Subclass({type:\"msub\"}),t.msup=t.msubsup.Subclass({type:\"msup\",sub:2,sup:1}),t.mmultiscripts=t.msubsup.Subclass({type:\"mmultiscripts\",adjustChild_texprimestyle:function(t){return t%2==1||this.Get(\"texprimestyle\")}}),t.mprescripts=t.mbase.Subclass({type:\"mprescripts\"}),t.none=t.mbase.Subclass({type:\"none\"}),t.munderover=t.mbase.Subclass({type:\"munderover\",base:0,under:1,over:2,sub:1,sup:2,ACCENTS:[\"\",\"accentunder\",\"accent\"],linebreakContainer:!0,isEmbellished:t.mbase.childEmbellished,Core:t.mbase.childCore,CoreMO:t.mbase.childCoreMO,defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,accent:t.AUTO,accentunder:t.AUTO,align:t.ALIGN.CENTER,texClass:t.AUTO,subscriptshift:\"\",superscriptshift:\"\"},autoDefault:function(e){return\"texClass\"===e?this.isEmbellished()?this.CoreMO().Get(e):t.TEXCLASS.ORD:\"accent\"===e&&this.data[this.over]?this.data[this.over].CoreMO().Get(\"accent\"):!(\"accentunder\"!==e||!this.data[this.under])&&this.data[this.under].CoreMO().Get(\"accent\")},adjustChild_displaystyle:function(t){return!(t>0)&&this.Get(\"displaystyle\")},adjustChild_scriptlevel:function(t){var e=this.Get(\"scriptlevel\"),i=this.data[this.base]&&!this.Get(\"displaystyle\")&&this.data[this.base].CoreMO().Get(\"movablelimits\");return t!=this.under||!i&&this.Get(\"accentunder\")||e++,t!=this.over||!i&&this.Get(\"accent\")||e++,e},adjustChild_texprimestyle:function(t){return!(t!==this.base||!this.data[this.over])||this.Get(\"texprimestyle\")},setTeXclass:t.mbase.setBaseTeXclasses}),t.munder=t.munderover.Subclass({type:\"munder\"}),t.mover=t.munderover.Subclass({type:\"mover\",over:1,under:2,sup:1,sub:2,ACCENTS:[\"\",\"accent\",\"accentunder\"]}),t.mtable=t.mbase.Subclass({type:\"mtable\",defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,align:t.ALIGN.AXIS,rowalign:t.ALIGN.BASELINE,columnalign:t.ALIGN.CENTER,groupalign:\"{left}\",alignmentscope:!0,columnwidth:t.WIDTH.AUTO,width:t.WIDTH.AUTO,rowspacing:\"1ex\",columnspacing:\".8em\",rowlines:t.LINES.NONE,columnlines:t.LINES.NONE,frame:t.LINES.NONE,framespacing:\"0.4em 0.5ex\",equalrows:!1,equalcolumns:!1,displaystyle:!1,side:t.SIDE.RIGHT,minlabelspacing:\"0.8em\",texClass:t.TEXCLASS.ORD,useHeight:1},adjustChild_displaystyle:function(){return null!=this.displaystyle?this.displaystyle:this.defaults.displaystyle},inheritFromMe:!0,noInherit:{mover:{align:!0},munder:{align:!0},munderover:{align:!0},mtable:{align:!0,rowalign:!0,columnalign:!0,groupalign:!0,alignmentscope:!0,columnwidth:!0,width:!0,rowspacing:!0,columnspacing:!0,rowlines:!0,columnlines:!0,frame:!0,framespacing:!0,equalrows:!0,equalcolumns:!0,displaystyle:!0,side:!0,minlabelspacing:!0,texClass:!0,useHeight:1}},linebreakContainer:!0,Append:function(){for(var e=0,i=arguments.length;e<i;e++)arguments[e]instanceof t.mtr||arguments[e]instanceof t.mlabeledtr||(arguments[e]=t.mtr(arguments[e]));this.SUPER(arguments).Append.apply(this,arguments)},setTeXclass:t.mbase.setSeparateTeXclasses}),t.mtr=t.mbase.Subclass({type:\"mtr\",defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,rowalign:t.INHERIT,columnalign:t.INHERIT,groupalign:t.INHERIT},inheritFromMe:!0,noInherit:{mrow:{rowalign:!0,columnalign:!0,groupalign:!0},mtable:{rowalign:!0,columnalign:!0,groupalign:!0}},linebreakContainer:!0,Append:function(){for(var e=0,i=arguments.length;e<i;e++)arguments[e]instanceof t.mtd||(arguments[e]=t.mtd(arguments[e]));this.SUPER(arguments).Append.apply(this,arguments)},setTeXclass:t.mbase.setSeparateTeXclasses}),t.mtd=t.mbase.Subclass({type:\"mtd\",inferRow:!0,linebreakContainer:!0,isEmbellished:t.mbase.childEmbellished,Core:t.mbase.childCore,CoreMO:t.mbase.childCoreMO,defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,rowspan:1,columnspan:1,rowalign:t.INHERIT,columnalign:t.INHERIT,groupalign:t.INHERIT},setTeXclass:t.mbase.setSeparateTeXclasses}),t.maligngroup=t.mbase.Subclass({type:\"maligngroup\",isSpacelike:function(){return!0},defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,groupalign:t.INHERIT},inheritFromMe:!0,noInherit:{mrow:{groupalign:!0},mtable:{groupalign:!0}}}),t.malignmark=t.mbase.Subclass({type:\"malignmark\",defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,edge:t.SIDE.LEFT},isSpacelike:function(){return!0}}),t.mlabeledtr=t.mtr.Subclass({type:\"mlabeledtr\"}),t.maction=t.mbase.Subclass({type:\"maction\",defaults:{mathbackground:t.INHERIT,mathcolor:t.INHERIT,actiontype:t.ACTIONTYPE.TOGGLE,selection:1},selected:function(){return this.data[this.Get(\"selection\")-1]||t.NULL},isEmbellished:function(){return this.selected().isEmbellished()},isSpacelike:function(){return this.selected().isSpacelike()},Core:function(){return this.selected().Core()},CoreMO:function(){return this.selected().CoreMO()},setTeXclass:function(e){this.Get(\"actiontype\")===t.ACTIONTYPE.TOOLTIP&&this.data[1]&&this.data[1].setTeXclass();var i=this.selected();return e=i.setTeXclass(e),this.updateTeXclass(i),e}}),t.semantics=t.mbase.Subclass({type:\"semantics\",notParent:!0,isEmbellished:t.mbase.childEmbellished,Core:t.mbase.childCore,CoreMO:t.mbase.childCoreMO,defaults:{definitionURL:null,encoding:null},setTeXclass:t.mbase.setChildTeXclass,getAnnotation:function(t){var e=MathJax.Hub.config.MathMenu.semanticsAnnotations[t];if(e)for(var i=0,n=this.data.length;i<n;i++){var a=this.data[i].Get(\"encoding\");if(a)for(var s=0,r=e.length;s<r;s++)if(e[s]===a)return this.data[i]}return null}}),t.annotation=t.mbase.Subclass({type:\"annotation\",isChars:!0,linebreakContainer:!0,defaults:{definitionURL:null,encoding:null,cd:\"mathmlkeys\",name:\"\",src:null}}),t[\"annotation-xml\"]=t.mbase.Subclass({type:\"annotation-xml\",linebreakContainer:!0,defaults:{definitionURL:null,encoding:null,cd:\"mathmlkeys\",name:\"\",src:null}}),t.math=t.mstyle.Subclass({type:\"math\",defaults:{mathvariant:t.VARIANT.NORMAL,mathsize:t.SIZE.NORMAL,mathcolor:\"\",mathbackground:t.COLOR.TRANSPARENT,dir:\"ltr\",scriptlevel:0,displaystyle:t.AUTO,display:\"inline\",maxwidth:\"\",overflow:t.OVERFLOW.LINEBREAK,altimg:\"\",\"altimg-width\":\"\",\"altimg-height\":\"\",\"altimg-valign\":\"\",alttext:\"\",cdgroup:\"\",scriptsizemultiplier:Math.sqrt(.5),scriptminsize:\"8px\",infixlinebreakstyle:t.LINEBREAKSTYLE.BEFORE,lineleading:\"1ex\",indentshift:\"auto\",indentalign:t.INDENTALIGN.AUTO,indentalignfirst:t.INDENTALIGN.INDENTALIGN,indentshiftfirst:t.INDENTSHIFT.INDENTSHIFT,indentalignlast:t.INDENTALIGN.INDENTALIGN,indentshiftlast:t.INDENTSHIFT.INDENTSHIFT,decimalseparator:\".\",texprimestyle:!1},autoDefault:function(t){return\"displaystyle\"===t?\"block\"===this.Get(\"display\"):\"\"},linebreakContainer:!0,setTeXclass:t.mbase.setChildTeXclass,getAnnotation:function(t){return 1!=this.data.length?null:this.data[0].getAnnotation(t)}}),t.chars=t.mbase.Subclass({type:\"chars\",Append:function(){this.data.push.apply(this.data,arguments)},value:function(){return this.data.join(\"\")},toString:function(){return this.data.join(\"\")}}),t.entity=t.mbase.Subclass({type:\"entity\",Append:function(){this.data.push.apply(this.data,arguments)},value:function(){return\"#x\"===this.data[0].substr(0,2)?parseInt(this.data[0].substr(2),16):\"#\"===this.data[0].substr(0,1)?parseInt(this.data[0].substr(1)):0},toString:function(){var t=this.value();return t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t)))}}),t.xml=t.mbase.Subclass({type:\"xml\",Init:function(){return this.div=document.createElement(\"div\"),this.SUPER(arguments).Init.apply(this,arguments)},Append:function(){for(var t=0,e=arguments.length;t<e;t++){var i=this.Import(arguments[t]);this.data.push(i),this.div.appendChild(i)}},Import:function(t){if(document.importNode)return document.importNode(t,!0);var e,i,n;if(1===t.nodeType){for(e=document.createElement(t.nodeName),i=0,n=t.attributes.length;i<n;i++){var a=t.attributes[i];a.specified&&null!=a.nodeValue&&\"\"!=a.nodeValue&&e.setAttribute(a.nodeName,a.nodeValue),\"style\"===a.nodeName&&(e.style.cssText=a.nodeValue)}t.className&&(e.className=t.className)}else if(3===t.nodeType||4===t.nodeType)e=document.createTextNode(t.nodeValue);else{if(8!==t.nodeType)return document.createTextNode(\"\");e=document.createComment(t.nodeValue)}for(i=0,n=t.childNodes.length;i<n;i++)e.appendChild(this.Import(t.childNodes[i]));return e},value:function(){return this.div},toString:function(){return this.div.innerHTML}}),t.TeXAtom=t.mbase.Subclass({type:\"texatom\",linebreakContainer:!0,inferRow:!0,notParent:!0,texClass:t.TEXCLASS.ORD,Core:t.mbase.childCore,CoreMO:t.mbase.childCoreMO,isEmbellished:t.mbase.childEmbellished,setTeXclass:function(t){return this.data[0].setTeXclass(),this.adjustTeXclass(t)},adjustTeXclass:t.mo.prototype.adjustTeXclass}),t.NULL=t.mbase().With({type:\"null\"});var e=t.TEXCLASS,i={ORD:[0,0,e.ORD],ORD11:[1,1,e.ORD],ORD21:[2,1,e.ORD],ORD02:[0,2,e.ORD],ORD55:[5,5,e.ORD],OP:[1,2,e.OP,{largeop:!0,movablelimits:!0,symmetric:!0}],OPFIXED:[1,2,e.OP,{largeop:!0,movablelimits:!0}],INTEGRAL:[0,1,e.OP,{largeop:!0,symmetric:!0}],INTEGRAL2:[1,2,e.OP,{largeop:!0,symmetric:!0}],BIN3:[3,3,e.BIN],BIN4:[4,4,e.BIN],BIN01:[0,1,e.BIN],BIN5:[5,5,e.BIN],TALLBIN:[4,4,e.BIN,{stretchy:!0}],BINOP:[4,4,e.BIN,{largeop:!0,movablelimits:!0}],REL:[5,5,e.REL],REL1:[1,1,e.REL,{stretchy:!0}],REL4:[4,4,e.REL],RELSTRETCH:[5,5,e.REL,{stretchy:!0}],RELACCENT:[5,5,e.REL,{accent:!0}],WIDEREL:[5,5,e.REL,{accent:!0,stretchy:!0}],OPEN:[0,0,e.OPEN,{fence:!0,stretchy:!0,symmetric:!0}],CLOSE:[0,0,e.CLOSE,{fence:!0,stretchy:!0,symmetric:!0}],INNER:[0,0,e.INNER],PUNCT:[0,3,e.PUNCT],ACCENT:[0,0,e.ORD,{accent:!0}],WIDEACCENT:[0,0,e.ORD,{accent:!0,stretchy:!0}]};t.mo.Augment({SPACE:[\"0em\",\"0.1111em\",\"0.1667em\",\"0.2222em\",\"0.2667em\",\"0.3333em\"],RANGES:[[32,127,e.REL,\"BasicLatin\"],[160,255,e.ORD,\"Latin1Supplement\"],[256,383,e.ORD],[384,591,e.ORD],[688,767,e.ORD,\"SpacingModLetters\"],[768,879,e.ORD,\"CombDiacritMarks\"],[880,1023,e.ORD,\"GreekAndCoptic\"],[7680,7935,e.ORD],[8192,8303,e.PUNCT,\"GeneralPunctuation\"],[8304,8351,e.ORD],[8352,8399,e.ORD],[8400,8447,e.ORD,\"CombDiactForSymbols\"],[8448,8527,e.ORD,\"LetterlikeSymbols\"],[8528,8591,e.ORD],[8592,8703,e.REL,\"Arrows\"],[8704,8959,e.BIN,\"MathOperators\"],[8960,9215,e.ORD,\"MiscTechnical\"],[9312,9471,e.ORD],[9472,9631,e.ORD],[9632,9727,e.ORD,\"GeometricShapes\"],[9984,10175,e.ORD,\"Dingbats\"],[10176,10223,e.ORD,\"MiscMathSymbolsA\"],[10224,10239,e.REL,\"SupplementalArrowsA\"],[10496,10623,e.REL,\"SupplementalArrowsB\"],[10624,10751,e.ORD,\"MiscMathSymbolsB\"],[10752,11007,e.BIN,\"SuppMathOperators\"],[11008,11263,e.ORD,\"MiscSymbolsAndArrows\"],[119808,120831,e.ORD]],OPTABLE:{prefix:{\"\\u2200\":i.ORD21,\"\\u2202\":i.ORD21,\"\\u2203\":i.ORD21,\"\\u2207\":i.ORD21,\"\\u220f\":i.OP,\"\\u2210\":i.OP,\"\\u2211\":i.OP,\"\\u2212\":i.BIN01,\"\\u2213\":i.BIN01,\"\\u221a\":[1,1,e.ORD,{stretchy:!0}],\"\\u2220\":i.ORD,\"\\u222b\":i.INTEGRAL,\"\\u222e\":i.INTEGRAL,\"\\u22c0\":i.OP,\"\\u22c1\":i.OP,\"\\u22c2\":i.OP,\"\\u22c3\":i.OP,\"\\u2308\":i.OPEN,\"\\u230a\":i.OPEN,\"\\u27e8\":i.OPEN,\"\\u27ee\":i.OPEN,\"\\u2a00\":i.OP,\"\\u2a01\":i.OP,\"\\u2a02\":i.OP,\"\\u2a04\":i.OP,\"\\u2a06\":i.OP,\"\\xac\":i.ORD21,\"\\xb1\":i.BIN01,\"(\":i.OPEN,\"+\":i.BIN01,\"-\":i.BIN01,\"[\":i.OPEN,\"{\":i.OPEN,\"|\":i.OPEN},postfix:{\"!\":[1,0,e.CLOSE],\"&\":i.ORD,\"\\u2032\":i.ORD02,\"\\u203e\":i.WIDEACCENT,\"\\u2309\":i.CLOSE,\"\\u230b\":i.CLOSE,\"\\u23de\":i.WIDEACCENT,\"\\u23df\":i.WIDEACCENT,\"\\u266d\":i.ORD02,\"\\u266e\":i.ORD02,\"\\u266f\":i.ORD02,\"\\u27e9\":i.CLOSE,\"\\u27ef\":i.CLOSE,\"\\u02c6\":i.WIDEACCENT,\"\\u02c7\":i.WIDEACCENT,\"\\u02c9\":i.WIDEACCENT,\"\\u02ca\":i.ACCENT,\"\\u02cb\":i.ACCENT,\"\\u02d8\":i.ACCENT,\"\\u02d9\":i.ACCENT,\"\\u02dc\":i.WIDEACCENT,\"\\u0302\":i.WIDEACCENT,\"\\xa8\":i.ACCENT,\"\\xaf\":i.WIDEACCENT,\")\":i.CLOSE,\"]\":i.CLOSE,\"^\":i.WIDEACCENT,_:i.WIDEACCENT,\"`\":i.ACCENT,\"|\":i.CLOSE,\"}\":i.CLOSE,\"~\":i.WIDEACCENT},infix:{\"\":i.ORD,\"%\":[3,3,e.ORD],\"\\u2022\":i.BIN4,\"\\u2026\":i.INNER,\"\\u2044\":i.TALLBIN,\"\\u2061\":i.ORD,\"\\u2062\":i.ORD,\"\\u2063\":[0,0,e.ORD,{linebreakstyle:\"after\",separator:!0}],\"\\u2064\":i.ORD,\"\\u2190\":i.WIDEREL,\"\\u2191\":i.RELSTRETCH,\"\\u2192\":i.WIDEREL,\"\\u2193\":i.RELSTRETCH,\"\\u2194\":i.WIDEREL,\"\\u2195\":i.RELSTRETCH,\"\\u2196\":i.RELSTRETCH,\"\\u2197\":i.RELSTRETCH,\"\\u2198\":i.RELSTRETCH,\"\\u2199\":i.RELSTRETCH,\"\\u21a6\":i.WIDEREL,\"\\u21a9\":i.WIDEREL,\"\\u21aa\":i.WIDEREL,\"\\u21bc\":i.WIDEREL,\"\\u21bd\":i.WIDEREL,\"\\u21c0\":i.WIDEREL,\"\\u21c1\":i.WIDEREL,\"\\u21cc\":i.WIDEREL,\"\\u21d0\":i.WIDEREL,\"\\u21d1\":i.RELSTRETCH,\"\\u21d2\":i.WIDEREL,\"\\u21d3\":i.RELSTRETCH,\"\\u21d4\":i.WIDEREL,\"\\u21d5\":i.RELSTRETCH,\"\\u2208\":i.REL,\"\\u2209\":i.REL,\"\\u220b\":i.REL,\"\\u2212\":i.BIN4,\"\\u2213\":i.BIN4,\"\\u2215\":i.TALLBIN,\"\\u2216\":i.BIN4,\"\\u2217\":i.BIN4,\"\\u2218\":i.BIN4,\"\\u2219\":i.BIN4,\"\\u221d\":i.REL,\"\\u2223\":i.REL,\"\\u2225\":i.REL,\"\\u2227\":i.BIN4,\"\\u2228\":i.BIN4,\"\\u2229\":i.BIN4,\"\\u222a\":i.BIN4,\"\\u223c\":i.REL,\"\\u2240\":i.BIN4,\"\\u2243\":i.REL,\"\\u2245\":i.REL,\"\\u2248\":i.REL,\"\\u224d\":i.REL,\"\\u2250\":i.REL,\"\\u2260\":i.REL,\"\\u2261\":i.REL,\"\\u2264\":i.REL,\"\\u2265\":i.REL,\"\\u226a\":i.REL,\"\\u226b\":i.REL,\"\\u227a\":i.REL,\"\\u227b\":i.REL,\"\\u2282\":i.REL,\"\\u2283\":i.REL,\"\\u2286\":i.REL,\"\\u2287\":i.REL,\"\\u228e\":i.BIN4,\"\\u2291\":i.REL,\"\\u2292\":i.REL,\"\\u2293\":i.BIN4,\"\\u2294\":i.BIN4,\"\\u2295\":i.BIN4,\"\\u2296\":i.BIN4,\"\\u2297\":i.BIN4,\"\\u2298\":i.BIN4,\"\\u2299\":i.BIN4,\"\\u22a2\":i.REL,\"\\u22a3\":i.REL,\"\\u22a4\":i.ORD55,\"\\u22a5\":i.REL,\"\\u22a8\":i.REL,\"\\u22c4\":i.BIN4,\"\\u22c5\":i.BIN4,\"\\u22c6\":i.BIN4,\"\\u22c8\":i.REL,\"\\u22ee\":i.ORD55,\"\\u22ef\":i.INNER,\"\\u22f1\":[5,5,e.INNER],\"\\u25b3\":i.BIN4,\"\\u25b5\":i.BIN4,\"\\u25b9\":i.BIN4,\"\\u25bd\":i.BIN4,\"\\u25bf\":i.BIN4,\"\\u25c3\":i.BIN4,\"\\u2758\":i.REL,\"\\u27f5\":i.WIDEREL,\"\\u27f6\":i.WIDEREL,\"\\u27f7\":i.WIDEREL,\"\\u27f8\":i.WIDEREL,\"\\u27f9\":i.WIDEREL,\"\\u27fa\":i.WIDEREL,\"\\u27fc\":i.WIDEREL,\"\\u2a2f\":i.BIN4,\"\\u2a3f\":i.BIN4,\"\\u2aaf\":i.REL,\"\\u2ab0\":i.REL,\"\\xb1\":i.BIN4,\"\\xb7\":i.BIN4,\"\\xd7\":i.BIN4,\"\\xf7\":i.BIN4,\"*\":i.BIN3,\"+\":i.BIN4,\",\":[0,3,e.PUNCT,{linebreakstyle:\"after\",separator:!0}],\"-\":i.BIN4,\".\":[3,3,e.ORD],\"/\":i.ORD11,\":\":[1,2,e.REL],\";\":[0,3,e.PUNCT,{linebreakstyle:\"after\",separator:!0}],\"<\":i.REL,\"=\":i.REL,\">\":i.REL,\"?\":[1,1,e.CLOSE],\"\\\\\":i.ORD,\"^\":i.ORD11,_:i.ORD11,\"|\":[2,2,e.ORD,{fence:!0,stretchy:!0,symmetric:!0}],\"#\":i.ORD,$:i.ORD,\".\":[0,3,e.PUNCT,{separator:!0}],\"\\u02b9\":i.ORD,\"\\u0300\":i.ACCENT,\"\\u0301\":i.ACCENT,\"\\u0303\":i.WIDEACCENT,\"\\u0304\":i.ACCENT,\"\\u0306\":i.ACCENT,\"\\u0307\":i.ACCENT,\"\\u0308\":i.ACCENT,\"\\u030c\":i.ACCENT,\"\\u0332\":i.WIDEACCENT,\"\\u0338\":i.REL4,\"\\u2015\":[0,0,e.ORD,{stretchy:!0}],\"\\u2017\":[0,0,e.ORD,{stretchy:!0}],\"\\u2020\":i.BIN3,\"\\u2021\":i.BIN3,\"\\u20d7\":i.ACCENT,\"\\u2111\":i.ORD,\"\\u2113\":i.ORD,\"\\u2118\":i.ORD,\"\\u211c\":i.ORD,\"\\u2205\":i.ORD,\"\\u221e\":i.ORD,\"\\u2305\":i.BIN3,\"\\u2306\":i.BIN3,\"\\u2322\":i.REL4,\"\\u2323\":i.REL4,\"\\u2329\":i.OPEN,\"\\u232a\":i.CLOSE,\"\\u23aa\":i.ORD,\"\\u23af\":[0,0,e.ORD,{stretchy:!0}],\"\\u23b0\":i.OPEN,\"\\u23b1\":i.CLOSE,\"\\u2500\":i.ORD,\"\\u25ef\":i.BIN3,\"\\u2660\":i.ORD,\"\\u2661\":i.ORD,\"\\u2662\":i.ORD,\"\\u2663\":i.ORD,\"\\u3008\":i.OPEN,\"\\u3009\":i.CLOSE,\"\\ufe37\":i.WIDEACCENT,\"\\ufe38\":i.WIDEACCENT}}},{OPTYPES:i});var n=t.mo.prototype.OPTABLE;n.infix[\"^\"]=i.WIDEREL,n.infix._=i.WIDEREL,n.prefix[\"\\u2223\"]=i.OPEN,n.prefix[\"\\u2225\"]=i.OPEN,n.postfix[\"\\u2223\"]=i.CLOSE,n.postfix[\"\\u2225\"]=i.CLOSE}(MathJax.ElementJax.mml),MathJax.ElementJax.mml.loadComplete(\"jax.js\")},function(t,e){MathJax.InputJax.AsciiMath=MathJax.InputJax({id:\"AsciiMath\",version:\"2.7.2\",directory:MathJax.InputJax.directory+\"/AsciiMath\",extensionDir:MathJax.InputJax.extensionDir+\"/AsciiMath\",config:{fixphi:!0,useMathMLspacing:!0,displaystyle:!0,decimalsign:\".\"}}),MathJax.InputJax.AsciiMath.Register(\"math/asciimath\"),MathJax.InputJax.AsciiMath.loadComplete(\"config.js\")},function(t,e){var i,n;!function(t){var e,i=MathJax.Object.Subclass({firstChild:null,lastChild:null,Init:function(){this.childNodes=[]},appendChild:function(t){return t.parent&&t.parent.removeChild(t),this.lastChild&&(this.lastChild.nextSibling=t),this.firstChild||(this.firstChild=t),this.childNodes.push(t),t.parent=this,this.lastChild=t,t},removeChild:function(t){for(var e=0,i=this.childNodes.length;e<i&&this.childNodes[e]!==t;e++);if(e!==i)return this.childNodes.splice(e,1),t===this.firstChild&&(this.firstChild=t.nextSibling),t===this.lastChild&&(this.childNodes.length?this.lastChild=this.childNodes[this.childNodes.length-1]:this.lastChild=null),e&&(this.childNodes[e-1].nextSibling=t.nextSibling),t.nextSibling=t.parent=null,t},replaceChild:function(t,e){for(var i=0,n=this.childNodes.length;i<n&&this.childNodes[i]!==e;i++);return i?this.childNodes[i-1].nextSibling=t:this.firstChild=t,i>=n-1&&(this.lastChild=t),this.childNodes[i]=t,t.nextSibling=e.nextSibling,e.nextSibling=e.parent=null,e},hasChildNodes:function(t){return this.childNodes.length>0},toString:function(){return\"{\"+this.childNodes.join(\"\")+\"}\"}}),n={getElementById:!0,createElementNS:function(i,n){var a=e[n]();return\"mo\"===n&&t.config.useMathMLspacing&&(a.useMMLspacing=128),a},createTextNode:function(t){return e.chars(t).With({nodeValue:t})},createDocumentFragment:function(){return i()}},a={appName:\"MathJax\"},s=\"blue\",r=\"serif\",o=!0,l=!0,u=\".\",h=\"Microsoft\"==a.appName.slice(0,9);function p(t){return h?n.createElement(t):n.createElementNS(\"http://www.w3.org/1999/xhtml\",t)}var c=\"http://www.w3.org/1998/Math/MathML\";function d(t){return h?n.createElement(\"m:\"+t):n.createElementNS(c,t)}function m(t,e){var i;return i=h?n.createElement(\"m:\"+t):n.createElementNS(c,t),e&&i.appendChild(e),i}var f=[\"\\ud835\\udc9c\",\"\\u212c\",\"\\ud835\\udc9e\",\"\\ud835\\udc9f\",\"\\u2130\",\"\\u2131\",\"\\ud835\\udca2\",\"\\u210b\",\"\\u2110\",\"\\ud835\\udca5\",\"\\ud835\\udca6\",\"\\u2112\",\"\\u2133\",\"\\ud835\\udca9\",\"\\ud835\\udcaa\",\"\\ud835\\udcab\",\"\\ud835\\udcac\",\"\\u211b\",\"\\ud835\\udcae\",\"\\ud835\\udcaf\",\"\\ud835\\udcb0\",\"\\ud835\\udcb1\",\"\\ud835\\udcb2\",\"\\ud835\\udcb3\",\"\\ud835\\udcb4\",\"\\ud835\\udcb5\",\"\\ud835\\udcb6\",\"\\ud835\\udcb7\",\"\\ud835\\udcb8\",\"\\ud835\\udcb9\",\"\\u212f\",\"\\ud835\\udcbb\",\"\\u210a\",\"\\ud835\\udcbd\",\"\\ud835\\udcbe\",\"\\ud835\\udcbf\",\"\\ud835\\udcc0\",\"\\ud835\\udcc1\",\"\\ud835\\udcc2\",\"\\ud835\\udcc3\",\"\\u2134\",\"\\ud835\\udcc5\",\"\\ud835\\udcc6\",\"\\ud835\\udcc7\",\"\\ud835\\udcc8\",\"\\ud835\\udcc9\",\"\\ud835\\udcca\",\"\\ud835\\udccb\",\"\\ud835\\udccc\",\"\\ud835\\udccd\",\"\\ud835\\udcce\",\"\\ud835\\udccf\"],g=[\"\\ud835\\udd04\",\"\\ud835\\udd05\",\"\\u212d\",\"\\ud835\\udd07\",\"\\ud835\\udd08\",\"\\ud835\\udd09\",\"\\ud835\\udd0a\",\"\\u210c\",\"\\u2111\",\"\\ud835\\udd0d\",\"\\ud835\\udd0e\",\"\\ud835\\udd0f\",\"\\ud835\\udd10\",\"\\ud835\\udd11\",\"\\ud835\\udd12\",\"\\ud835\\udd13\",\"\\ud835\\udd14\",\"\\u211c\",\"\\ud835\\udd16\",\"\\ud835\\udd17\",\"\\ud835\\udd18\",\"\\ud835\\udd19\",\"\\ud835\\udd1a\",\"\\ud835\\udd1b\",\"\\ud835\\udd1c\",\"\\u2128\",\"\\ud835\\udd1e\",\"\\ud835\\udd1f\",\"\\ud835\\udd20\",\"\\ud835\\udd21\",\"\\ud835\\udd22\",\"\\ud835\\udd23\",\"\\ud835\\udd24\",\"\\ud835\\udd25\",\"\\ud835\\udd26\",\"\\ud835\\udd27\",\"\\ud835\\udd28\",\"\\ud835\\udd29\",\"\\ud835\\udd2a\",\"\\ud835\\udd2b\",\"\\ud835\\udd2c\",\"\\ud835\\udd2d\",\"\\ud835\\udd2e\",\"\\ud835\\udd2f\",\"\\ud835\\udd30\",\"\\ud835\\udd31\",\"\\ud835\\udd32\",\"\\ud835\\udd33\",\"\\ud835\\udd34\",\"\\ud835\\udd35\",\"\\ud835\\udd36\",\"\\ud835\\udd37\"],E=[\"\\ud835\\udd38\",\"\\ud835\\udd39\",\"\\u2102\",\"\\ud835\\udd3b\",\"\\ud835\\udd3c\",\"\\ud835\\udd3d\",\"\\ud835\\udd3e\",\"\\u210d\",\"\\ud835\\udd40\",\"\\ud835\\udd41\",\"\\ud835\\udd42\",\"\\ud835\\udd43\",\"\\ud835\\udd44\",\"\\u2115\",\"\\ud835\\udd46\",\"\\u2119\",\"\\u211a\",\"\\u211d\",\"\\ud835\\udd4a\",\"\\ud835\\udd4b\",\"\\ud835\\udd4c\",\"\\ud835\\udd4d\",\"\\ud835\\udd4e\",\"\\ud835\\udd4f\",\"\\ud835\\udd50\",\"\\u2124\",\"\\ud835\\udd52\",\"\\ud835\\udd53\",\"\\ud835\\udd54\",\"\\ud835\\udd55\",\"\\ud835\\udd56\",\"\\ud835\\udd57\",\"\\ud835\\udd58\",\"\\ud835\\udd59\",\"\\ud835\\udd5a\",\"\\ud835\\udd5b\",\"\\ud835\\udd5c\",\"\\ud835\\udd5d\",\"\\ud835\\udd5e\",\"\\ud835\\udd5f\",\"\\ud835\\udd60\",\"\\ud835\\udd61\",\"\\ud835\\udd62\",\"\\ud835\\udd63\",\"\\ud835\\udd64\",\"\\ud835\\udd65\",\"\\ud835\\udd66\",\"\\ud835\\udd67\",\"\\ud835\\udd68\",\"\\ud835\\udd69\",\"\\ud835\\udd6a\",\"\\ud835\\udd6b\"],y=8,x={input:'\"',tag:\"mtext\",output:\"mbox\",tex:null,ttype:10},T=[{input:\"alpha\",tag:\"mi\",output:\"\\u03b1\",tex:null,ttype:0},{input:\"beta\",tag:\"mi\",output:\"\\u03b2\",tex:null,ttype:0},{input:\"chi\",tag:\"mi\",output:\"\\u03c7\",tex:null,ttype:0},{input:\"delta\",tag:\"mi\",output:\"\\u03b4\",tex:null,ttype:0},{input:\"Delta\",tag:\"mo\",output:\"\\u0394\",tex:null,ttype:0},{input:\"epsi\",tag:\"mi\",output:\"\\u03b5\",tex:\"epsilon\",ttype:0},{input:\"varepsilon\",tag:\"mi\",output:\"\\u025b\",tex:null,ttype:0},{input:\"eta\",tag:\"mi\",output:\"\\u03b7\",tex:null,ttype:0},{input:\"gamma\",tag:\"mi\",output:\"\\u03b3\",tex:null,ttype:0},{input:\"Gamma\",tag:\"mo\",output:\"\\u0393\",tex:null,ttype:0},{input:\"iota\",tag:\"mi\",output:\"\\u03b9\",tex:null,ttype:0},{input:\"kappa\",tag:\"mi\",output:\"\\u03ba\",tex:null,ttype:0},{input:\"lambda\",tag:\"mi\",output:\"\\u03bb\",tex:null,ttype:0},{input:\"Lambda\",tag:\"mo\",output:\"\\u039b\",tex:null,ttype:0},{input:\"lamda\",tag:\"mi\",output:\"\\u03bb\",tex:null,ttype:0},{input:\"Lamda\",tag:\"mo\",output:\"\\u039b\",tex:null,ttype:0},{input:\"mu\",tag:\"mi\",output:\"\\u03bc\",tex:null,ttype:0},{input:\"nu\",tag:\"mi\",output:\"\\u03bd\",tex:null,ttype:0},{input:\"omega\",tag:\"mi\",output:\"\\u03c9\",tex:null,ttype:0},{input:\"Omega\",tag:\"mo\",output:\"\\u03a9\",tex:null,ttype:0},{input:\"phi\",tag:\"mi\",output:\"\\u03d5\",tex:null,ttype:0},{input:\"varphi\",tag:\"mi\",output:\"\\u03c6\",tex:null,ttype:0},{input:\"Phi\",tag:\"mo\",output:\"\\u03a6\",tex:null,ttype:0},{input:\"pi\",tag:\"mi\",output:\"\\u03c0\",tex:null,ttype:0},{input:\"Pi\",tag:\"mo\",output:\"\\u03a0\",tex:null,ttype:0},{input:\"psi\",tag:\"mi\",output:\"\\u03c8\",tex:null,ttype:0},{input:\"Psi\",tag:\"mi\",output:\"\\u03a8\",tex:null,ttype:0},{input:\"rho\",tag:\"mi\",output:\"\\u03c1\",tex:null,ttype:0},{input:\"sigma\",tag:\"mi\",output:\"\\u03c3\",tex:null,ttype:0},{input:\"Sigma\",tag:\"mo\",output:\"\\u03a3\",tex:null,ttype:0},{input:\"tau\",tag:\"mi\",output:\"\\u03c4\",tex:null,ttype:0},{input:\"theta\",tag:\"mi\",output:\"\\u03b8\",tex:null,ttype:0},{input:\"vartheta\",tag:\"mi\",output:\"\\u03d1\",tex:null,ttype:0},{input:\"Theta\",tag:\"mo\",output:\"\\u0398\",tex:null,ttype:0},{input:\"upsilon\",tag:\"mi\",output:\"\\u03c5\",tex:null,ttype:0},{input:\"xi\",tag:\"mi\",output:\"\\u03be\",tex:null,ttype:0},{input:\"Xi\",tag:\"mo\",output:\"\\u039e\",tex:null,ttype:0},{input:\"zeta\",tag:\"mi\",output:\"\\u03b6\",tex:null,ttype:0},{input:\"*\",tag:\"mo\",output:\"\\u22c5\",tex:\"cdot\",ttype:0},{input:\"**\",tag:\"mo\",output:\"\\u2217\",tex:\"ast\",ttype:0},{input:\"***\",tag:\"mo\",output:\"\\u22c6\",tex:\"star\",ttype:0},{input:\"//\",tag:\"mo\",output:\"/\",tex:null,ttype:0},{input:\"\\\\\\\\\",tag:\"mo\",output:\"\\\\\",tex:\"backslash\",ttype:0},{input:\"setminus\",tag:\"mo\",output:\"\\\\\",tex:null,ttype:0},{input:\"xx\",tag:\"mo\",output:\"\\xd7\",tex:\"times\",ttype:0},{input:\"|><\",tag:\"mo\",output:\"\\u22c9\",tex:\"ltimes\",ttype:0},{input:\"><|\",tag:\"mo\",output:\"\\u22ca\",tex:\"rtimes\",ttype:0},{input:\"|><|\",tag:\"mo\",output:\"\\u22c8\",tex:\"bowtie\",ttype:0},{input:\"-:\",tag:\"mo\",output:\"\\xf7\",tex:\"div\",ttype:0},{input:\"divide\",tag:\"mo\",output:\"-:\",tex:null,ttype:y},{input:\"@\",tag:\"mo\",output:\"\\u2218\",tex:\"circ\",ttype:0},{input:\"o+\",tag:\"mo\",output:\"\\u2295\",tex:\"oplus\",ttype:0},{input:\"ox\",tag:\"mo\",output:\"\\u2297\",tex:\"otimes\",ttype:0},{input:\"o.\",tag:\"mo\",output:\"\\u2299\",tex:\"odot\",ttype:0},{input:\"sum\",tag:\"mo\",output:\"\\u2211\",tex:null,ttype:7},{input:\"prod\",tag:\"mo\",output:\"\\u220f\",tex:null,ttype:7},{input:\"^^\",tag:\"mo\",output:\"\\u2227\",tex:\"wedge\",ttype:0},{input:\"^^^\",tag:\"mo\",output:\"\\u22c0\",tex:\"bigwedge\",ttype:7},{input:\"vv\",tag:\"mo\",output:\"\\u2228\",tex:\"vee\",ttype:0},{input:\"vvv\",tag:\"mo\",output:\"\\u22c1\",tex:\"bigvee\",ttype:7},{input:\"nn\",tag:\"mo\",output:\"\\u2229\",tex:\"cap\",ttype:0},{input:\"nnn\",tag:\"mo\",output:\"\\u22c2\",tex:\"bigcap\",ttype:7},{input:\"uu\",tag:\"mo\",output:\"\\u222a\",tex:\"cup\",ttype:0},{input:\"uuu\",tag:\"mo\",output:\"\\u22c3\",tex:\"bigcup\",ttype:7},{input:\"!=\",tag:\"mo\",output:\"\\u2260\",tex:\"ne\",ttype:0},{input:\":=\",tag:\"mo\",output:\":=\",tex:null,ttype:0},{input:\"lt\",tag:\"mo\",output:\"<\",tex:null,ttype:0},{input:\"<=\",tag:\"mo\",output:\"\\u2264\",tex:\"le\",ttype:0},{input:\"lt=\",tag:\"mo\",output:\"\\u2264\",tex:\"leq\",ttype:0},{input:\"gt\",tag:\"mo\",output:\">\",tex:null,ttype:0},{input:\">=\",tag:\"mo\",output:\"\\u2265\",tex:\"ge\",ttype:0},{input:\"gt=\",tag:\"mo\",output:\"\\u2265\",tex:\"geq\",ttype:0},{input:\"-<\",tag:\"mo\",output:\"\\u227a\",tex:\"prec\",ttype:0},{input:\"-lt\",tag:\"mo\",output:\"\\u227a\",tex:null,ttype:0},{input:\">-\",tag:\"mo\",output:\"\\u227b\",tex:\"succ\",ttype:0},{input:\"-<=\",tag:\"mo\",output:\"\\u2aaf\",tex:\"preceq\",ttype:0},{input:\">-=\",tag:\"mo\",output:\"\\u2ab0\",tex:\"succeq\",ttype:0},{input:\"in\",tag:\"mo\",output:\"\\u2208\",tex:null,ttype:0},{input:\"!in\",tag:\"mo\",output:\"\\u2209\",tex:\"notin\",ttype:0},{input:\"sub\",tag:\"mo\",output:\"\\u2282\",tex:\"subset\",ttype:0},{input:\"sup\",tag:\"mo\",output:\"\\u2283\",tex:\"supset\",ttype:0},{input:\"sube\",tag:\"mo\",output:\"\\u2286\",tex:\"subseteq\",ttype:0},{input:\"supe\",tag:\"mo\",output:\"\\u2287\",tex:\"supseteq\",ttype:0},{input:\"-=\",tag:\"mo\",output:\"\\u2261\",tex:\"equiv\",ttype:0},{input:\"~=\",tag:\"mo\",output:\"\\u2245\",tex:\"cong\",ttype:0},{input:\"~~\",tag:\"mo\",output:\"\\u2248\",tex:\"approx\",ttype:0},{input:\"prop\",tag:\"mo\",output:\"\\u221d\",tex:\"propto\",ttype:0},{input:\"and\",tag:\"mtext\",output:\"and\",tex:null,ttype:6},{input:\"or\",tag:\"mtext\",output:\"or\",tex:null,ttype:6},{input:\"not\",tag:\"mo\",output:\"\\xac\",tex:\"neg\",ttype:0},{input:\"=>\",tag:\"mo\",output:\"\\u21d2\",tex:\"implies\",ttype:0},{input:\"if\",tag:\"mo\",output:\"if\",tex:null,ttype:6},{input:\"<=>\",tag:\"mo\",output:\"\\u21d4\",tex:\"iff\",ttype:0},{input:\"AA\",tag:\"mo\",output:\"\\u2200\",tex:\"forall\",ttype:0},{input:\"EE\",tag:\"mo\",output:\"\\u2203\",tex:\"exists\",ttype:0},{input:\"_|_\",tag:\"mo\",output:\"\\u22a5\",tex:\"bot\",ttype:0},{input:\"TT\",tag:\"mo\",output:\"\\u22a4\",tex:\"top\",ttype:0},{input:\"|--\",tag:\"mo\",output:\"\\u22a2\",tex:\"vdash\",ttype:0},{input:\"|==\",tag:\"mo\",output:\"\\u22a8\",tex:\"models\",ttype:0},{input:\"(\",tag:\"mo\",output:\"(\",tex:null,ttype:4},{input:\")\",tag:\"mo\",output:\")\",tex:null,ttype:5},{input:\"[\",tag:\"mo\",output:\"[\",tex:null,ttype:4},{input:\"]\",tag:\"mo\",output:\"]\",tex:null,ttype:5},{input:\"{\",tag:\"mo\",output:\"{\",tex:null,ttype:4},{input:\"}\",tag:\"mo\",output:\"}\",tex:null,ttype:5},{input:\"|\",tag:\"mo\",output:\"|\",tex:null,ttype:9},{input:\"(:\",tag:\"mo\",output:\"\\u2329\",tex:\"langle\",ttype:4},{input:\":)\",tag:\"mo\",output:\"\\u232a\",tex:\"rangle\",ttype:5},{input:\"<<\",tag:\"mo\",output:\"\\u2329\",tex:null,ttype:4},{input:\">>\",tag:\"mo\",output:\"\\u232a\",tex:null,ttype:5},{input:\"{:\",tag:\"mo\",output:\"{:\",tex:null,ttype:4,invisible:!0},{input:\":}\",tag:\"mo\",output:\":}\",tex:null,ttype:5,invisible:!0},{input:\"int\",tag:\"mo\",output:\"\\u222b\",tex:null,ttype:0},{input:\"dx\",tag:\"mi\",output:\"{:d x:}\",tex:null,ttype:y},{input:\"dy\",tag:\"mi\",output:\"{:d y:}\",tex:null,ttype:y},{input:\"dz\",tag:\"mi\",output:\"{:d z:}\",tex:null,ttype:y},{input:\"dt\",tag:\"mi\",output:\"{:d t:}\",tex:null,ttype:y},{input:\"oint\",tag:\"mo\",output:\"\\u222e\",tex:null,ttype:0},{input:\"del\",tag:\"mo\",output:\"\\u2202\",tex:\"partial\",ttype:0},{input:\"grad\",tag:\"mo\",output:\"\\u2207\",tex:\"nabla\",ttype:0},{input:\"+-\",tag:\"mo\",output:\"\\xb1\",tex:\"pm\",ttype:0},{input:\"O/\",tag:\"mo\",output:\"\\u2205\",tex:\"emptyset\",ttype:0},{input:\"oo\",tag:\"mo\",output:\"\\u221e\",tex:\"infty\",ttype:0},{input:\"aleph\",tag:\"mo\",output:\"\\u2135\",tex:null,ttype:0},{input:\"...\",tag:\"mo\",output:\"...\",tex:\"ldots\",ttype:0},{input:\":.\",tag:\"mo\",output:\"\\u2234\",tex:\"therefore\",ttype:0},{input:\":'\",tag:\"mo\",output:\"\\u2235\",tex:\"because\",ttype:0},{input:\"/_\",tag:\"mo\",output:\"\\u2220\",tex:\"angle\",ttype:0},{input:\"/_\\\\\",tag:\"mo\",output:\"\\u25b3\",tex:\"triangle\",ttype:0},{input:\"'\",tag:\"mo\",output:\"\\u2032\",tex:\"prime\",ttype:0},{input:\"tilde\",tag:\"mover\",output:\"~\",tex:null,ttype:1,acc:!0},{input:\"\\\\ \",tag:\"mo\",output:\"\\xa0\",tex:null,ttype:0},{input:\"frown\",tag:\"mo\",output:\"\\u2322\",tex:null,ttype:0},{input:\"quad\",tag:\"mo\",output:\"\\xa0\\xa0\",tex:null,ttype:0},{input:\"qquad\",tag:\"mo\",output:\"\\xa0\\xa0\\xa0\\xa0\",tex:null,ttype:0},{input:\"cdots\",tag:\"mo\",output:\"\\u22ef\",tex:null,ttype:0},{input:\"vdots\",tag:\"mo\",output:\"\\u22ee\",tex:null,ttype:0},{input:\"ddots\",tag:\"mo\",output:\"\\u22f1\",tex:null,ttype:0},{input:\"diamond\",tag:\"mo\",output:\"\\u22c4\",tex:null,ttype:0},{input:\"square\",tag:\"mo\",output:\"\\u25a1\",tex:null,ttype:0},{input:\"|__\",tag:\"mo\",output:\"\\u230a\",tex:\"lfloor\",ttype:0},{input:\"__|\",tag:\"mo\",output:\"\\u230b\",tex:\"rfloor\",ttype:0},{input:\"|~\",tag:\"mo\",output:\"\\u2308\",tex:\"lceiling\",ttype:0},{input:\"~|\",tag:\"mo\",output:\"\\u2309\",tex:\"rceiling\",ttype:0},{input:\"CC\",tag:\"mo\",output:\"\\u2102\",tex:null,ttype:0},{input:\"NN\",tag:\"mo\",output:\"\\u2115\",tex:null,ttype:0},{input:\"QQ\",tag:\"mo\",output:\"\\u211a\",tex:null,ttype:0},{input:\"RR\",tag:\"mo\",output:\"\\u211d\",tex:null,ttype:0},{input:\"ZZ\",tag:\"mo\",output:\"\\u2124\",tex:null,ttype:0},{input:\"f\",tag:\"mi\",output:\"f\",tex:null,ttype:1,func:!0},{input:\"g\",tag:\"mi\",output:\"g\",tex:null,ttype:1,func:!0},{input:\"lim\",tag:\"mo\",output:\"lim\",tex:null,ttype:7},{input:\"Lim\",tag:\"mo\",output:\"Lim\",tex:null,ttype:7},{input:\"sin\",tag:\"mo\",output:\"sin\",tex:null,ttype:1,func:!0},{input:\"cos\",tag:\"mo\",output:\"cos\",tex:null,ttype:1,func:!0},{input:\"tan\",tag:\"mo\",output:\"tan\",tex:null,ttype:1,func:!0},{input:\"sinh\",tag:\"mo\",output:\"sinh\",tex:null,ttype:1,func:!0},{input:\"cosh\",tag:\"mo\",output:\"cosh\",tex:null,ttype:1,func:!0},{input:\"tanh\",tag:\"mo\",output:\"tanh\",tex:null,ttype:1,func:!0},{input:\"cot\",tag:\"mo\",output:\"cot\",tex:null,ttype:1,func:!0},{input:\"sec\",tag:\"mo\",output:\"sec\",tex:null,ttype:1,func:!0},{input:\"csc\",tag:\"mo\",output:\"csc\",tex:null,ttype:1,func:!0},{input:\"arcsin\",tag:\"mo\",output:\"arcsin\",tex:null,ttype:1,func:!0},{input:\"arccos\",tag:\"mo\",output:\"arccos\",tex:null,ttype:1,func:!0},{input:\"arctan\",tag:\"mo\",output:\"arctan\",tex:null,ttype:1,func:!0},{input:\"coth\",tag:\"mo\",output:\"coth\",tex:null,ttype:1,func:!0},{input:\"sech\",tag:\"mo\",output:\"sech\",tex:null,ttype:1,func:!0},{input:\"csch\",tag:\"mo\",output:\"csch\",tex:null,ttype:1,func:!0},{input:\"exp\",tag:\"mo\",output:\"exp\",tex:null,ttype:1,func:!0},{input:\"abs\",tag:\"mo\",output:\"abs\",tex:null,ttype:1,rewriteleftright:[\"|\",\"|\"]},{input:\"norm\",tag:\"mo\",output:\"norm\",tex:null,ttype:1,rewriteleftright:[\"\\u2225\",\"\\u2225\"]},{input:\"floor\",tag:\"mo\",output:\"floor\",tex:null,ttype:1,rewriteleftright:[\"\\u230a\",\"\\u230b\"]},{input:\"ceil\",tag:\"mo\",output:\"ceil\",tex:null,ttype:1,rewriteleftright:[\"\\u2308\",\"\\u2309\"]},{input:\"log\",tag:\"mo\",output:\"log\",tex:null,ttype:1,func:!0},{input:\"ln\",tag:\"mo\",output:\"ln\",tex:null,ttype:1,func:!0},{input:\"det\",tag:\"mo\",output:\"det\",tex:null,ttype:1,func:!0},{input:\"dim\",tag:\"mo\",output:\"dim\",tex:null,ttype:0},{input:\"mod\",tag:\"mo\",output:\"mod\",tex:null,ttype:0},{input:\"gcd\",tag:\"mo\",output:\"gcd\",tex:null,ttype:1,func:!0},{input:\"lcm\",tag:\"mo\",output:\"lcm\",tex:null,ttype:1,func:!0},{input:\"lub\",tag:\"mo\",output:\"lub\",tex:null,ttype:0},{input:\"glb\",tag:\"mo\",output:\"glb\",tex:null,ttype:0},{input:\"min\",tag:\"mo\",output:\"min\",tex:null,ttype:7},{input:\"max\",tag:\"mo\",output:\"max\",tex:null,ttype:7},{input:\"uarr\",tag:\"mo\",output:\"\\u2191\",tex:\"uparrow\",ttype:0},{input:\"darr\",tag:\"mo\",output:\"\\u2193\",tex:\"downarrow\",ttype:0},{input:\"rarr\",tag:\"mo\",output:\"\\u2192\",tex:\"rightarrow\",ttype:0},{input:\"->\",tag:\"mo\",output:\"\\u2192\",tex:\"to\",ttype:0},{input:\">->\",tag:\"mo\",output:\"\\u21a3\",tex:\"rightarrowtail\",ttype:0},{input:\"->>\",tag:\"mo\",output:\"\\u21a0\",tex:\"twoheadrightarrow\",ttype:0},{input:\">->>\",tag:\"mo\",output:\"\\u2916\",tex:\"twoheadrightarrowtail\",ttype:0},{input:\"|->\",tag:\"mo\",output:\"\\u21a6\",tex:\"mapsto\",ttype:0},{input:\"larr\",tag:\"mo\",output:\"\\u2190\",tex:\"leftarrow\",ttype:0},{input:\"harr\",tag:\"mo\",output:\"\\u2194\",tex:\"leftrightarrow\",ttype:0},{input:\"rArr\",tag:\"mo\",output:\"\\u21d2\",tex:\"Rightarrow\",ttype:0},{input:\"lArr\",tag:\"mo\",output:\"\\u21d0\",tex:\"Leftarrow\",ttype:0},{input:\"hArr\",tag:\"mo\",output:\"\\u21d4\",tex:\"Leftrightarrow\",ttype:0},{input:\"sqrt\",tag:\"msqrt\",output:\"sqrt\",tex:null,ttype:1},{input:\"root\",tag:\"mroot\",output:\"root\",tex:null,ttype:2},{input:\"frac\",tag:\"mfrac\",output:\"/\",tex:null,ttype:2},{input:\"/\",tag:\"mfrac\",output:\"/\",tex:null,ttype:3},{input:\"stackrel\",tag:\"mover\",output:\"stackrel\",tex:null,ttype:2},{input:\"overset\",tag:\"mover\",output:\"stackrel\",tex:null,ttype:2},{input:\"underset\",tag:\"munder\",output:\"stackrel\",tex:null,ttype:2},{input:\"_\",tag:\"msub\",output:\"_\",tex:null,ttype:3},{input:\"^\",tag:\"msup\",output:\"^\",tex:null,ttype:3},{input:\"hat\",tag:\"mover\",output:\"^\",tex:null,ttype:1,acc:!0},{input:\"bar\",tag:\"mover\",output:\"\\xaf\",tex:\"overline\",ttype:1,acc:!0},{input:\"vec\",tag:\"mover\",output:\"\\u2192\",tex:null,ttype:1,acc:!0},{input:\"dot\",tag:\"mover\",output:\".\",tex:null,ttype:1,acc:!0},{input:\"ddot\",tag:\"mover\",output:\"..\",tex:null,ttype:1,acc:!0},{input:\"ul\",tag:\"munder\",output:\"\\u0332\",tex:\"underline\",ttype:1,acc:!0},{input:\"ubrace\",tag:\"munder\",output:\"\\u23df\",tex:\"underbrace\",ttype:15,acc:!0},{input:\"obrace\",tag:\"mover\",output:\"\\u23de\",tex:\"overbrace\",ttype:15,acc:!0},{input:\"text\",tag:\"mtext\",output:\"text\",tex:null,ttype:10},{input:\"mbox\",tag:\"mtext\",output:\"mbox\",tex:null,ttype:10},{input:\"color\",tag:\"mstyle\",ttype:2},{input:\"cancel\",tag:\"menclose\",output:\"cancel\",tex:null,ttype:1},x,{input:\"bb\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"bold\",output:\"bb\",tex:null,ttype:1},{input:\"mathbf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"bold\",output:\"mathbf\",tex:null,ttype:1},{input:\"sf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"sans-serif\",output:\"sf\",tex:null,ttype:1},{input:\"mathsf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"sans-serif\",output:\"mathsf\",tex:null,ttype:1},{input:\"bbb\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"double-struck\",output:\"bbb\",tex:null,ttype:1,codes:E},{input:\"mathbb\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"double-struck\",output:\"mathbb\",tex:null,ttype:1,codes:E},{input:\"cc\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"script\",output:\"cc\",tex:null,ttype:1,codes:f},{input:\"mathcal\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"script\",output:\"mathcal\",tex:null,ttype:1,codes:f},{input:\"tt\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"monospace\",output:\"tt\",tex:null,ttype:1},{input:\"mathtt\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"monospace\",output:\"mathtt\",tex:null,ttype:1},{input:\"fr\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"fraktur\",output:\"fr\",tex:null,ttype:1,codes:g},{input:\"mathfrak\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"fraktur\",output:\"mathfrak\",tex:null,ttype:1,codes:g}];function C(t,e){return t.input>e.input?1:-1}var b,S,I,N=[];function A(){var t,e=T.length;for(t=0;t<e;t++)T[t].tex&&T.push({input:T[t].tex,tag:T[t].tag,output:T[t].output,ttype:T[t].ttype,acc:T[t].acc||!1});v()}function v(){var t;for(T.sort(C),t=0;t<T.length;t++)N[t]=T[t].input}function R(t,e){var i;i=\"\\\\\"==t.charAt(e)&&\"\\\\\"!=t.charAt(e+1)&&\" \"!=t.charAt(e+1)?t.slice(e+1):t.slice(e);for(var n=0;n<i.length&&i.charCodeAt(n)<=32;n+=1);return i.slice(n)}function O(t,e,i){if(0==i){var n,a;for(i=-1,n=t.length;i+1<n;)t[a=i+n>>1]<e?i=a:n=a;return n}for(var s=i;s<t.length&&t[s]<e;s++);return s}function L(t){for(var e,i,n,a=0,s=\"\",r=!0,o=1;o<=t.length&&r;o++)i=t.slice(0,o),(a=O(N,i,a))<N.length&&t.slice(0,N[a].length)==N[a]&&(e=a,o=(s=N[a]).length),r=a<N.length&&t.slice(0,N[a].length)>=N[a];if(S=I,\"\"!=s)return I=T[e].ttype,T[e];I=0,a=1,i=t.slice(0,1);for(var l=!0;\"0\"<=i&&i<=\"9\"&&a<=t.length;)i=t.slice(a,a+1),a++;if(i==u&&\"0\"<=(i=t.slice(a,a+1))&&i<=\"9\")for(l=!1,a++;\"0\"<=i&&i<=\"9\"&&a<=t.length;)i=t.slice(a,a+1),a++;return l&&a>1||a>2?(i=t.slice(0,a-1),n=\"mn\"):(a=2,n=(\"A\">(i=t.slice(0,1))||i>\"Z\")&&(\"a\">i||i>\"z\")?\"mo\":\"mi\"),\"-\"==i&&3==S?(I=3,{input:i,tag:n,output:i,ttype:1,func:!0}):{input:i,tag:n,output:i,ttype:0}}function M(t){var e;t.hasChildNodes()&&(!t.firstChild.hasChildNodes()||\"mrow\"!=t.nodeName&&\"M:MROW\"!=t.nodeName||\"(\"!=(e=t.firstChild.firstChild.nodeValue)&&\"[\"!=e&&\"{\"!=e||t.removeChild(t.firstChild),!t.lastChild.hasChildNodes()||\"mrow\"!=t.nodeName&&\"M:MROW\"!=t.nodeName||\")\"!=(e=t.lastChild.firstChild.nodeValue)&&\"]\"!=e&&\"}\"!=e||t.removeChild(t.lastChild))}function D(t){var e,i,a,s,r,o=n.createDocumentFragment();if(null==(e=L(t=R(t,0)))||5==e.ttype&&b>0)return[null,t];switch(e.ttype==y&&(e=L(t=e.output+R(t,e.input.length))),e.ttype){case 7:case 0:return t=R(t,e.input.length),[m(e.tag,n.createTextNode(e.output)),t];case 4:return b++,a=k(t=R(t,e.input.length),!0),b--,\"boolean\"==typeof e.invisible&&e.invisible?i=m(\"mrow\",a[0]):(i=m(\"mo\",n.createTextNode(e.output)),(i=m(\"mrow\",i)).appendChild(a[0])),[i,a[1]];case 10:return e!=x&&(t=R(t,e.input.length)),-1==(s=\"{\"==t.charAt(0)?t.indexOf(\"}\"):\"(\"==t.charAt(0)?t.indexOf(\")\"):\"[\"==t.charAt(0)?t.indexOf(\"]\"):e==x?t.slice(1).indexOf('\"')+1:0)&&(s=t.length),\" \"==(r=t.slice(1,s)).charAt(0)&&((i=m(\"mspace\")).setAttribute(\"width\",\"1ex\"),o.appendChild(i)),o.appendChild(m(e.tag,n.createTextNode(r))),\" \"==r.charAt(r.length-1)&&((i=m(\"mspace\")).setAttribute(\"width\",\"1ex\"),o.appendChild(i)),t=R(t,s+1),[m(\"mrow\",o),t];case 15:case 1:if(null==(a=D(t=R(t,e.input.length)))[0])return[m(e.tag,n.createTextNode(e.output)),t];if(\"boolean\"==typeof e.func&&e.func)return\"^\"==(r=t.charAt(0))||\"_\"==r||\"/\"==r||\"|\"==r||\",\"==r||1==e.input.length&&e.input.match(/\\w/)&&\"(\"!=r?[m(e.tag,n.createTextNode(e.output)),t]:((i=m(\"mrow\",m(e.tag,n.createTextNode(e.output)))).appendChild(a[0]),[i,a[1]]);if(M(a[0]),\"sqrt\"==e.input)return[m(e.tag,a[0]),a[1]];if(void 0!==e.rewriteleftright)return(i=m(\"mrow\",m(\"mo\",n.createTextNode(e.rewriteleftright[0])))).appendChild(a[0]),i.appendChild(m(\"mo\",n.createTextNode(e.rewriteleftright[1]))),[i,a[1]];if(\"cancel\"==e.input)return(i=m(e.tag,a[0])).setAttribute(\"notation\",\"updiagonalstrike\"),[i,a[1]];if(\"boolean\"==typeof e.acc&&e.acc)return(i=m(e.tag,a[0])).appendChild(m(\"mo\",n.createTextNode(e.output))),[i,a[1]];if(!h&&void 0!==e.codes)for(s=0;s<a[0].childNodes.length;s++)if(\"mi\"==a[0].childNodes[s].nodeName||\"mi\"==a[0].nodeName){r=\"mi\"==a[0].nodeName?a[0].firstChild.nodeValue:a[0].childNodes[s].firstChild.nodeValue;for(var l=[],u=0;u<r.length;u++)r.charCodeAt(u)>64&&r.charCodeAt(u)<91?l+=e.codes[r.charCodeAt(u)-65]:r.charCodeAt(u)>96&&r.charCodeAt(u)<123?l+=e.codes[r.charCodeAt(u)-71]:l+=r.charAt(u);\"mi\"==a[0].nodeName?a[0]=m(\"mo\").appendChild(n.createTextNode(l)):a[0].replaceChild(m(\"mo\").appendChild(n.createTextNode(l)),a[0].childNodes[s])}return(i=m(e.tag,a[0])).setAttribute(e.atname,e.atval),[i,a[1]];case 2:if(null==(a=D(t=R(t,e.input.length)))[0])return[m(\"mo\",n.createTextNode(e.input)),t];M(a[0]);var p=D(a[1]);return null==p[0]?[m(\"mo\",n.createTextNode(e.input)),t]:(M(p[0]),\"color\"==e.input?(\"{\"==t.charAt(0)?s=t.indexOf(\"}\"):\"(\"==t.charAt(0)?s=t.indexOf(\")\"):\"[\"==t.charAt(0)&&(s=t.indexOf(\"]\")),r=t.slice(1,s),(i=m(e.tag,p[0])).setAttribute(\"mathcolor\",r),[i,p[1]]):(\"root\"!=e.input&&\"stackrel\"!=e.output||o.appendChild(p[0]),o.appendChild(a[0]),\"frac\"==e.input&&o.appendChild(p[0]),[m(e.tag,o),p[1]]));case 3:return t=R(t,e.input.length),[m(\"mo\",n.createTextNode(e.output)),t];case 6:return t=R(t,e.input.length),(i=m(\"mspace\")).setAttribute(\"width\",\"1ex\"),o.appendChild(i),o.appendChild(m(e.tag,n.createTextNode(e.output))),(i=m(\"mspace\")).setAttribute(\"width\",\"1ex\"),o.appendChild(i),[m(\"mrow\",o),t];case 9:return b++,a=k(t=R(t,e.input.length),!1),b--,r=\"\",null!=a[0].lastChild&&(r=a[0].lastChild.firstChild.nodeValue),\"|\"==r?(i=m(\"mo\",n.createTextNode(e.output)),(i=m(\"mrow\",i)).appendChild(a[0]),[i,a[1]]):(i=m(\"mo\",n.createTextNode(\"\\u2223\")),[i=m(\"mrow\",i),t]);default:return t=R(t,e.input.length),[m(e.tag,n.createTextNode(e.output)),t]}}function P(t){var e,i,a,s,r,o;if(i=L(t=R(t,0)),s=(r=D(t))[0],3==(e=L(t=r[1])).ttype&&\"/\"!=e.input){if(null==(r=D(t=R(t,e.input.length)))[0]?r[0]=m(\"mo\",n.createTextNode(\"\\u25a1\")):M(r[0]),t=r[1],o=7==i.ttype||15==i.ttype,\"_\"==e.input)if(\"^\"==(a=L(t)).input){var l=D(t=R(t,a.input.length));M(l[0]),t=l[1],(s=m(o?\"munderover\":\"msubsup\",s)).appendChild(r[0]),s.appendChild(l[0]),s=m(\"mrow\",s)}else(s=m(o?\"munder\":\"msub\",s)).appendChild(r[0]);else\"^\"==e.input&&o?(s=m(\"mover\",s)).appendChild(r[0]):(s=m(e.tag,s)).appendChild(r[0]);void 0!==i.func&&i.func&&3!=(a=L(t)).ttype&&5!=a.ttype&&(r=P(t),(s=m(\"mrow\",s)).appendChild(r[0]),t=r[1])}return[s,t]}function k(t,e){var i,a,s,r,o=n.createDocumentFragment();do{a=(s=P(t=R(t,0)))[0],3==(i=L(t=s[1])).ttype&&\"/\"==i.input?(null==(s=P(t=R(t,i.input.length)))[0]?s[0]=m(\"mo\",n.createTextNode(\"\\u25a1\")):M(s[0]),t=s[1],M(a),(a=m(i.tag,a)).appendChild(s[0]),o.appendChild(a),i=L(t)):null!=a&&o.appendChild(a)}while((5!=i.ttype&&(9!=i.ttype||e)||0==b)&&null!=i&&\"\"!=i.output);if(5==i.ttype||9==i.ttype){var l=o.childNodes.length;if(l>0&&\"mrow\"==o.childNodes[l-1].nodeName&&o.childNodes[l-1].lastChild&&o.childNodes[l-1].lastChild.firstChild){var u=o.childNodes[l-1].lastChild.firstChild.nodeValue;if(\")\"==u||\"]\"==u){var h=o.childNodes[l-1].firstChild.firstChild.nodeValue;if(\"(\"==h&&\")\"==u&&\"}\"!=i.output||\"[\"==h&&\"]\"==u){var p=[],c=!0,d=o.childNodes.length;for(r=0;c&&r<d;r+=2){if(p[r]=[],a=o.childNodes[r],c&&(c=\"mrow\"==a.nodeName&&(r==d-1||\"mo\"==a.nextSibling.nodeName&&\",\"==a.nextSibling.firstChild.nodeValue)&&a.firstChild.firstChild.nodeValue==h&&a.lastChild.firstChild.nodeValue==u),c)for(var f=0;f<a.childNodes.length;f++)\",\"==a.childNodes[f].firstChild.nodeValue&&(p[r][p[r].length]=f);c&&r>1&&(c=p[r].length==p[r-2].length)}if(c=c&&(p.length>1||p[0].length>0)){var g,E,y,x,T=n.createDocumentFragment();for(r=0;r<d;r+=2){for(g=n.createDocumentFragment(),E=n.createDocumentFragment(),y=(a=o.firstChild).childNodes.length,x=0,a.removeChild(a.firstChild),f=1;f<y-1;f++)void 0!==p[r][x]&&f==p[r][x]?(a.removeChild(a.firstChild),g.appendChild(m(\"mtd\",E)),x++):E.appendChild(a.firstChild);g.appendChild(m(\"mtd\",E)),o.childNodes.length>2&&(o.removeChild(o.firstChild),o.removeChild(o.firstChild)),T.appendChild(m(\"mtr\",g))}a=m(\"mtable\",T),\"boolean\"==typeof i.invisible&&i.invisible&&a.setAttribute(\"columnalign\",\"left\"),o.replaceChild(a,o.firstChild)}}}}t=R(t,i.input.length),\"boolean\"==typeof i.invisible&&i.invisible||(a=m(\"mo\",n.createTextNode(i.output)),o.appendChild(a))}return[o,t]}function H(t,e){var i;return b=0,i=m(\"mstyle\",k((t=(t=(t=(t=t.replace(/&nbsp;/g,\"\")).replace(/&gt;/g,\">\")).replace(/&lt;/g,\"<\")).replace(/(Sin|Cos|Tan|Arcsin|Arccos|Arctan|Sinh|Cosh|Tanh|Cot|Sec|Csc|Log|Ln|Abs)/g,(function(t){return t.toLowerCase()}))).replace(/^\\s+/g,\"\"),!1)[0]),\"\"!=s&&i.setAttribute(\"mathcolor\",s),\"\"!=r&&i.setAttribute(\"fontfamily\",r),o&&i.setAttribute(\"displaystyle\",\"true\"),i=m(\"math\",i),l&&i.setAttribute(\"title\",t.replace(/\\s+/g,\" \")),i}l=!1,r=\"\",s=\"\",function(){for(var t=0,e=T.length;t<e;t++)T[t].codes&&delete T[t].codes,T[t].func&&(T[t].tag=\"mi\")}(),t.Augment({AM:{Init:function(){if(o=t.config.displaystyle,u=t.config.decimal||t.config.decimalsign,!t.config.fixphi)for(var n=0,a=T.length;n<a;n++)\"phi\"===T[n].input&&(T[n].output=\"\\u03c6\"),\"varphi\"===T[n].input&&(T[n].output=\"\\u03d5\",n=a);var s;s=(e=MathJax.ElementJax.mml).mbase.prototype.Init,e.mbase.Augment({firstChild:null,lastChild:null,nodeValue:null,nextSibling:null,Init:function(){var t=s.apply(this,arguments)||this;return t.childNodes=t.data,t.nodeName=t.type,t},appendChild:function(t){t.parent&&t.parent.removeChild(t);var e=arguments;t.isa(i)&&(e=t.childNodes,t.data=t.childNodes=[],t.firstChild=t.lastChild=null);for(var n=0,a=e.length;n<a;n++)t=e[n],this.lastChild&&(this.lastChild.nextSibling=t),this.firstChild||(this.firstChild=t),this.Append(t),this.lastChild=t;return t},removeChild:function(t){for(var e=0,i=this.childNodes.length;e<i&&this.childNodes[e]!==t;e++);if(e!==i)return this.childNodes.splice(e,1),t===this.firstChild&&(this.firstChild=t.nextSibling),t===this.lastChild&&(this.childNodes.length?this.lastChild=this.childNodes[this.childNodes.length-1]:this.lastChild=null),e&&(this.childNodes[e-1].nextSibling=t.nextSibling),t.nextSibling=t.parent=null,t},replaceChild:function(t,e){for(var i=0,n=this.childNodes.length;i<n&&this.childNodes[i]!==e;i++);return i?this.childNodes[i-1].nextSibling=t:this.firstChild=t,i>=n-1&&(this.lastChild=t),this.SetData(i,t),t.nextSibling=e.nextSibling,e.nextSibling=e.parent=null,e},hasChildNodes:function(t){return this.childNodes.length>0},setAttribute:function(t,e){this[t]=e}}),A()},Augment:function(t){for(var e in t)if(t.hasOwnProperty(e)){switch(e){case\"displaystyle\":o=t[e];break;case\"decimal\":decimal=t[e];break;case\"parseMath\":H=t[e];break;case\"parseExpr\":k=t[e];break;case\"parseIexpr\":P=t[e];break;case\"parseSexpr\":D=t[e];break;case\"removeBrackets\":M=t[e];break;case\"getSymbol\":L=t[e];break;case\"position\":O=t[e];break;case\"removeCharsAndBlanks\":R=t[e];break;case\"createMmlNode\":m=t[e];break;case\"createElementMathML\":d=t[e];break;case\"createElementXHTML\":p=t[e];break;case\"initSymbols\":A=t[e];break;case\"refreshSymbols\":v=t[e];break;case\"compareNames\":C=t[e]}this[e]=t[e]}},parseMath:H,parseExpr:k,parseIexpr:P,parseSexr:D,removeBrackets:M,getSymbol:L,position:O,removeCharsAndBlanks:R,createMmlNode:m,createElementMathML:d,createElementXHTML:p,initSymbols:A,refreshSymbols:v,compareNames:C,createDocumentFragment:i,document:n,define:function(t,e){T.push({input:t,tag:\"mo\",output:e,tex:null,ttype:y}),v()},newcommand:function(t,e){T.push({input:t,tag:\"mo\",output:e,tex:null,ttype:y}),v()},newsymbol:function(t){T.push(t),v()},symbols:T,names:N,TOKEN:{CONST:0,UNARY:1,BINARY:2,INFIX:3,LEFTBRACKET:4,RIGHTBRACKET:5,SPACE:6,UNDEROVER:7,DEFINITION:y,LEFTRIGHT:9,TEXT:10,UNARYUNDEROVER:15}}})}(MathJax.InputJax.AsciiMath),(i=MathJax.InputJax.AsciiMath).Augment({sourceMenuTitle:[\"AsciiMathInput\",\"AsciiMath Input\"],annotationEncoding:\"text/x-asciimath\",prefilterHooks:MathJax.Callback.Hooks(!0),postfilterHooks:MathJax.Callback.Hooks(!0),Translate:function(t){var e,i=MathJax.HTML.getScript(t),a={math:i,script:t},s=this.prefilterHooks.Execute(a);if(s)return s;i=a.math;try{e=this.AM.parseMath(i)}catch(t){if(!t.asciimathError)throw t;e=this.formatError(t,i)}return a.math=n(e),this.postfilterHooks.Execute(a),this.postfilterHooks.Execute(a)||a.math},formatError:function(t,e,i){var a=t.message.replace(/\\n.*/,\"\");return MathJax.Hub.signal.Post([\"AsciiMath Jax - parse error\",a,e,i]),n.Error(a)},Error:function(t){throw MathJax.Hub.Insert(Error(t),{asciimathError:!0})},Startup:function(){n=MathJax.ElementJax.mml,this.AM.Init()}}),i.loadComplete(\"jax.js\")},function(t,e){var i,n,a;i=MathJax.ElementJax.mml,n=[\"texWithDelims\",\"movesupsub\",\"subsupOK\",\"primes\",\"movablelimits\",\"scriptlevel\",\"open\",\"close\",\"isError\",\"multiline\",\"variantForm\",\"autoOP\",\"fnOP\"],a={texWithDelims:\"withDelims\"},i.mbase.Augment({toMmlNode:function(t){var e=this.type;\"texatom\"===e&&(e=\"TeXAtom\");var i=this.nodeMake(t,e);return\"texClass\"in this&&(i.texClass=this.texClass),i},nodeMake:function(t,e){for(var i=t.MML[\"TeXmathchoice\"===e?\"mathchoice\":e](),n=this.data[0]&&this.data[0].inferred&&this.inferRow?this.data[0].data:this.data,a=0,s=n.length;a<s;a++){var r=n[a];r&&i.appendChild(r.toMmlNode(t))}return this.nodeAddAttributes(i),this.nodeAddProperties(i),i},nodeAddAttributes:function(t){var e=\"mstyle\"===this.type?i.math.prototype.defaults:this.defaults,n=this.attrNames||i.copyAttributeNames,a=i.skipAttributes,s=i.copyAttributes;if(!this.attrNames){for(var r in e)a[r]||s[r]||!e.hasOwnProperty(r)||null!=this[r]&&this[r]!==e[r]&&this.Get(r,null,1)!==this[r]&&t.attributes.set(r,this[r]);this.class&&t.attributes.set(\"class\",this.class)}for(var o=0,l=n.length;o<l;o++)(1!==s[n[o]]||e.hasOwnProperty(n[o]))&&(value=(this.attr||{})[n[o]],null==value&&(value=this[n[o]]),\"true\"!==value&&\"false\"!==value||(value=\"true\"===value),null!=value&&t.attributes.set(n[o],value))},nodeAddProperties:function(t){for(var e=0,s=n.length;e<s;e++){var r=n[e];null==this[r]||null!=this.defaults[r]&&this.defaults[r]!==i.AUTO||t.setProperty(a[r]||r,this[r])}}}),i.chars.Augment({toMmlNode:function(t){return t.MML.text().setText(this.data.join(\"\"))}}),i.entity.Augment({toMmlNode:function(t){return t.MML.text().setText(this.toString())}}),i.msubsup.Augment({toMmlNode:function(t){var e=null==this.data[this.sub]?\"msup\":null==this.data[this.sup]?\"msub\":\"msubsup\";return this.nodeMake(t,e)}}),i.munderover.Augment({toMmlNode:function(t){var e=null==this.data[this.under]?\"mover\":null==this.data[this.over]?\"munder\":\"munderover\";return this.nodeMake(t,e)}}),i.xml.Augment({toMmlNode:function(t){return t.MML.xml(this.data)}})},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlFactory=MathJax._.core.MmlTree.MmlFactory.MmlFactory},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractFindMath=MathJax._.core.FindMath.AbstractFindMath},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sortLength=MathJax._.util.string.sortLength,e.quotePattern=MathJax._.util.string.quotePattern,e.unicodeChars=MathJax._.util.string.unicodeChars,e.isPercent=MathJax._.util.string.isPercent,e.split=MathJax._.util.string.split},function(t,e,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},function(t,e,i){\"use strict\";i.r(e);var n=i(2),a=i(0),s=i(1);Object(n.combineWithMathJax)({_:{input:{asciimath_ts:a,asciimath:{FindAsciiMath:s}}}}),MathJax.startup&&(MathJax.startup.registerConstructor(\"asciimath\",a.AsciiMath),MathJax.startup.useInput(\"asciimath\"))}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/mml/entities.js",
    "content": "!function(r){var e={};function t(o){if(e[o])return e[o].exports;var a=e[o]={i:o,l:!1,exports:{}};return r[o].call(a.exports,a,a.exports,t),a.l=!0,a.exports}t.m=r,t.c=e,t.d=function(r,e,o){t.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:o})},t.r=function(r){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(r,\"__esModule\",{value:!0})},t.t=function(r,e){if(1&e&&(r=t(r)),8&e)return r;if(4&e&&\"object\"==typeof r&&r&&r.__esModule)return r;var o=Object.create(null);if(t.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:r}),2&e&&\"string\"!=typeof r)for(var a in r)t.d(o,a,function(e){return r[e]}.bind(null,a));return o},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,\"a\",e),e},t.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},t.p=\"\",t(t.s=1)}([function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.options=MathJax._.util.Entities.options,e.entities=MathJax._.util.Entities.entities,e.add=MathJax._.util.Entities.add,e.remove=MathJax._.util.Entities.remove,e.translate=MathJax._.util.Entities.translate,e.numeric=MathJax._.util.Entities.numeric},function(r,e,t){\"use strict\";t.r(e);t(2)},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(3),t(4),t(5),t(6),t(7),t(8),t(9),t(10),t(11),t(12),t(13),t(14),t(15),t(16),t(17),t(18),t(19),t(20),t(21),t(22),t(23),t(24),t(25),t(26),t(27),t(28),t(29),t(30),t(31)},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({AElig:\"\\xc6\",AMP:\"&\",Aacute:\"\\xc1\",Abreve:\"\\u0102\",Acirc:\"\\xc2\",Acy:\"\\u0410\",Agrave:\"\\xc0\",Alpha:\"\\u0391\",Amacr:\"\\u0100\",And:\"\\u2a53\",Aogon:\"\\u0104\",Aring:\"\\xc5\",Assign:\"\\u2254\",Atilde:\"\\xc3\",Auml:\"\\xc4\",aacute:\"\\xe1\",abreve:\"\\u0103\",ac:\"\\u223e\",acE:\"\\u223e\\u0333\",acd:\"\\u223f\",acirc:\"\\xe2\",acy:\"\\u0430\",aelig:\"\\xe6\",af:\"\\u2061\",agrave:\"\\xe0\",alefsym:\"\\u2135\",amacr:\"\\u0101\",andand:\"\\u2a55\",andd:\"\\u2a5c\",andslope:\"\\u2a58\",andv:\"\\u2a5a\",ange:\"\\u29a4\",angle:\"\\u2220\",angmsdaa:\"\\u29a8\",angmsdab:\"\\u29a9\",angmsdac:\"\\u29aa\",angmsdad:\"\\u29ab\",angmsdae:\"\\u29ac\",angmsdaf:\"\\u29ad\",angmsdag:\"\\u29ae\",angmsdah:\"\\u29af\",angrt:\"\\u221f\",angrtvb:\"\\u22be\",angrtvbd:\"\\u299d\",angst:\"\\xc5\",angzarr:\"\\u237c\",aogon:\"\\u0105\",ap:\"\\u2248\",apE:\"\\u2a70\",apacir:\"\\u2a6f\",apid:\"\\u224b\",apos:\"'\",approx:\"\\u2248\",approxeq:\"\\u224a\",aring:\"\\xe5\",ast:\"*\",asymp:\"\\u2248\",asympeq:\"\\u224d\",atilde:\"\\xe3\",auml:\"\\xe4\",awconint:\"\\u2233\",awint:\"\\u2a11\"},\"a\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({Barv:\"\\u2ae7\",Barwed:\"\\u2306\",Bcy:\"\\u0411\",Bernoullis:\"\\u212c\",Beta:\"\\u0392\",Bumpeq:\"\\u224e\",bNot:\"\\u2aed\",backcong:\"\\u224c\",backepsilon:\"\\u03f6\",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\",bigcap:\"\\u22c2\",bigcup:\"\\u22c3\",bigvee:\"\\u22c1\",bigwedge:\"\\u22c0\",bkarow:\"\\u290d\",blacksquare:\"\\u25aa\",blacktriangleright:\"\\u25b8\",blank:\"\\u2423\",blk12:\"\\u2592\",blk14:\"\\u2591\",blk34:\"\\u2593\",block:\"\\u2588\",bne:\"=\\u20e5\",bnequiv:\"\\u2261\\u20e5\",bnot:\"\\u2310\",bot:\"\\u22a5\",bottom:\"\\u22a5\",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\",boxh:\"\\u2500\",boxhD:\"\\u2565\",boxhU:\"\\u2568\",boxhd:\"\\u252c\",boxhu:\"\\u2534\",boxuL:\"\\u255b\",boxuR:\"\\u2558\",boxv:\"\\u2502\",boxvH:\"\\u256a\",boxvL:\"\\u2561\",boxvR:\"\\u255e\",boxvh:\"\\u253c\",boxvl:\"\\u2524\",boxvr:\"\\u251c\",bprime:\"\\u2035\",breve:\"\\u02d8\",brvbar:\"\\xa6\",bsemi:\"\\u204f\",bsim:\"\\u223d\",bsime:\"\\u22cd\",bsolb:\"\\u29c5\",bsolhsub:\"\\u27c8\",bullet:\"\\u2022\",bump:\"\\u224e\",bumpE:\"\\u2aae\",bumpe:\"\\u224f\",bumpeq:\"\\u224f\"},\"b\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({CHcy:\"\\u0427\",COPY:\"\\xa9\",Cacute:\"\\u0106\",CapitalDifferentialD:\"\\u2145\",Cayleys:\"\\u212d\",Ccaron:\"\\u010c\",Ccedil:\"\\xc7\",Ccirc:\"\\u0108\",Cconint:\"\\u2230\",Cdot:\"\\u010a\",Cedilla:\"\\xb8\",Chi:\"\\u03a7\",ClockwiseContourIntegral:\"\\u2232\",CloseCurlyDoubleQuote:\"\\u201d\",CloseCurlyQuote:\"\\u2019\",Colon:\"\\u2237\",Colone:\"\\u2a74\",Conint:\"\\u222f\",CounterClockwiseContourIntegral:\"\\u2233\",cacute:\"\\u0107\",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\",chcy:\"\\u0447\",checkmark:\"\\u2713\",cir:\"\\u25cb\",cirE:\"\\u29c3\",cire:\"\\u2257\",cirfnint:\"\\u2a10\",cirmid:\"\\u2aef\",cirscir:\"\\u29c2\",clubsuit:\"\\u2663\",colone:\"\\u2254\",coloneq:\"\\u2254\",comma:\",\",commat:\"@\",compfn:\"\\u2218\",complement:\"\\u2201\",complexes:\"\\u2102\",cong:\"\\u2245\",congdot:\"\\u2a6d\",conint:\"\\u222e\",coprod:\"\\u2210\",copy:\"\\xa9\",copysr:\"\\u2117\",crarr:\"\\u21b5\",cross:\"\\u2717\",csub:\"\\u2acf\",csube:\"\\u2ad1\",csup:\"\\u2ad0\",csupe:\"\\u2ad2\",cudarrl:\"\\u2938\",cudarrr:\"\\u2935\",cularrp:\"\\u293d\",cupbrcap:\"\\u2a48\",cupcap:\"\\u2a46\",cupcup:\"\\u2a4a\",cupdot:\"\\u228d\",cupor:\"\\u2a45\",cups:\"\\u222a\\ufe00\",curarrm:\"\\u293c\",curlyeqprec:\"\\u22de\",curlyeqsucc:\"\\u22df\",curren:\"\\xa4\",curvearrowleft:\"\\u21b6\",curvearrowright:\"\\u21b7\",cuvee:\"\\u22ce\",cuwed:\"\\u22cf\",cwconint:\"\\u2232\",cwint:\"\\u2231\",cylcty:\"\\u232d\"},\"c\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({DD:\"\\u2145\",DDotrahd:\"\\u2911\",DJcy:\"\\u0402\",DScy:\"\\u0405\",DZcy:\"\\u040f\",Darr:\"\\u21a1\",Dashv:\"\\u2ae4\",Dcaron:\"\\u010e\",Dcy:\"\\u0414\",DiacriticalAcute:\"\\xb4\",DiacriticalDot:\"\\u02d9\",DiacriticalDoubleAcute:\"\\u02dd\",DiacriticalGrave:\"`\",DiacriticalTilde:\"\\u02dc\",Dot:\"\\xa8\",DotDot:\"\\u20dc\",DoubleContourIntegral:\"\\u222f\",DoubleDownArrow:\"\\u21d3\",DoubleLeftArrow:\"\\u21d0\",DoubleLeftRightArrow:\"\\u21d4\",DoubleLeftTee:\"\\u2ae4\",DoubleLongLeftArrow:\"\\u27f8\",DoubleLongLeftRightArrow:\"\\u27fa\",DoubleLongRightArrow:\"\\u27f9\",DoubleRightArrow:\"\\u21d2\",DoubleUpArrow:\"\\u21d1\",DoubleUpDownArrow:\"\\u21d5\",DownArrowBar:\"\\u2913\",DownArrowUpArrow:\"\\u21f5\",DownBreve:\"\\u0311\",DownLeftRightVector:\"\\u2950\",DownLeftTeeVector:\"\\u295e\",DownLeftVectorBar:\"\\u2956\",DownRightTeeVector:\"\\u295f\",DownRightVectorBar:\"\\u2957\",DownTeeArrow:\"\\u21a7\",Dstrok:\"\\u0110\",dArr:\"\\u21d3\",dHar:\"\\u2965\",darr:\"\\u2193\",dash:\"\\u2010\",dashv:\"\\u22a3\",dbkarow:\"\\u290f\",dblac:\"\\u02dd\",dcaron:\"\\u010f\",dcy:\"\\u0434\",dd:\"\\u2146\",ddagger:\"\\u2021\",ddotseq:\"\\u2a77\",demptyv:\"\\u29b1\",dfisht:\"\\u297f\",dharl:\"\\u21c3\",dharr:\"\\u21c2\",diam:\"\\u22c4\",diamond:\"\\u22c4\",diamondsuit:\"\\u2666\",diams:\"\\u2666\",die:\"\\xa8\",disin:\"\\u22f2\",divide:\"\\xf7\",divonx:\"\\u22c7\",djcy:\"\\u0452\",dlcorn:\"\\u231e\",dlcrop:\"\\u230d\",dollar:\"$\",doteq:\"\\u2250\",dotminus:\"\\u2238\",doublebarwedge:\"\\u2306\",downarrow:\"\\u2193\",downdownarrows:\"\\u21ca\",downharpoonleft:\"\\u21c3\",downharpoonright:\"\\u21c2\",drbkarow:\"\\u2910\",drcorn:\"\\u231f\",drcrop:\"\\u230c\",dscy:\"\\u0455\",dsol:\"\\u29f6\",dstrok:\"\\u0111\",dtri:\"\\u25bf\",dtrif:\"\\u25be\",duarr:\"\\u21f5\",duhar:\"\\u296f\",dwangle:\"\\u29a6\",dzcy:\"\\u045f\",dzigrarr:\"\\u27ff\"},\"d\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({ENG:\"\\u014a\",ETH:\"\\xd0\",Eacute:\"\\xc9\",Ecaron:\"\\u011a\",Ecirc:\"\\xca\",Ecy:\"\\u042d\",Edot:\"\\u0116\",Egrave:\"\\xc8\",Emacr:\"\\u0112\",EmptySmallSquare:\"\\u25fb\",EmptyVerySmallSquare:\"\\u25ab\",Eogon:\"\\u0118\",Epsilon:\"\\u0395\",Equal:\"\\u2a75\",Esim:\"\\u2a73\",Eta:\"\\u0397\",Euml:\"\\xcb\",eDDot:\"\\u2a77\",eDot:\"\\u2251\",eacute:\"\\xe9\",easter:\"\\u2a6e\",ecaron:\"\\u011b\",ecirc:\"\\xea\",ecolon:\"\\u2255\",ecy:\"\\u044d\",edot:\"\\u0117\",ee:\"\\u2147\",eg:\"\\u2a9a\",egrave:\"\\xe8\",egsdot:\"\\u2a98\",el:\"\\u2a99\",elinters:\"\\u23e7\",elsdot:\"\\u2a97\",emacr:\"\\u0113\",emptyset:\"\\u2205\",emptyv:\"\\u2205\",emsp:\"\\u2003\",emsp13:\"\\u2004\",emsp14:\"\\u2005\",eng:\"\\u014b\",ensp:\"\\u2002\",eogon:\"\\u0119\",epar:\"\\u22d5\",eparsl:\"\\u29e3\",eplus:\"\\u2a71\",epsilon:\"\\u03b5\",eqcirc:\"\\u2256\",eqcolon:\"\\u2255\",eqsim:\"\\u2242\",eqslantgtr:\"\\u2a96\",eqslantless:\"\\u2a95\",equals:\"=\",equest:\"\\u225f\",equiv:\"\\u2261\",equivDD:\"\\u2a78\",eqvparsl:\"\\u29e5\",erarr:\"\\u2971\",esdot:\"\\u2250\",esim:\"\\u2242\",euml:\"\\xeb\",euro:\"\\u20ac\",excl:\"!\",exist:\"\\u2203\",expectation:\"\\u2130\",exponentiale:\"\\u2147\"},\"e\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({Fcy:\"\\u0424\",FilledSmallSquare:\"\\u25fc\",Fouriertrf:\"\\u2131\",fallingdotseq:\"\\u2252\",fcy:\"\\u0444\",female:\"\\u2640\",ffilig:\"\\ufb03\",fflig:\"\\ufb00\",ffllig:\"\\ufb04\",filig:\"\\ufb01\",fjlig:\"fj\",fllig:\"\\ufb02\",fltns:\"\\u25b1\",fnof:\"\\u0192\",forall:\"\\u2200\",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\"},\"f\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({GJcy:\"\\u0403\",GT:\">\",Gammad:\"\\u03dc\",Gbreve:\"\\u011e\",Gcedil:\"\\u0122\",Gcirc:\"\\u011c\",Gcy:\"\\u0413\",Gdot:\"\\u0120\",GreaterGreater:\"\\u2aa2\",Gt:\"\\u226b\",gE:\"\\u2267\",gacute:\"\\u01f5\",gammad:\"\\u03dd\",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\",gg:\"\\u226b\",ggg:\"\\u22d9\",gjcy:\"\\u0453\",gl:\"\\u2277\",glE:\"\\u2a92\",gla:\"\\u2aa5\",glj:\"\\u2aa4\",gnapprox:\"\\u2a8a\",gneq:\"\\u2a88\",gneqq:\"\\u2269\",grave:\"`\",gsim:\"\\u2273\",gsime:\"\\u2a8e\",gsiml:\"\\u2a90\",gtcc:\"\\u2aa7\",gtcir:\"\\u2a7a\",gtlPar:\"\\u2995\",gtquest:\"\\u2a7c\",gtrapprox:\"\\u2a86\",gtrarr:\"\\u2978\",gtrdot:\"\\u22d7\",gtreqless:\"\\u22db\",gtreqqless:\"\\u2a8c\",gtrless:\"\\u2277\",gtrsim:\"\\u2273\",gvertneqq:\"\\u2269\\ufe00\",gvnE:\"\\u2269\\ufe00\"},\"g\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({HARDcy:\"\\u042a\",Hcirc:\"\\u0124\",HilbertSpace:\"\\u210b\",HorizontalLine:\"\\u2500\",Hstrok:\"\\u0126\",hArr:\"\\u21d4\",hairsp:\"\\u200a\",half:\"\\xbd\",hamilt:\"\\u210b\",hardcy:\"\\u044a\",harr:\"\\u2194\",harrcir:\"\\u2948\",hcirc:\"\\u0125\",hearts:\"\\u2665\",heartsuit:\"\\u2665\",hercon:\"\\u22b9\",hksearow:\"\\u2925\",hkswarow:\"\\u2926\",hoarr:\"\\u21ff\",homtht:\"\\u223b\",horbar:\"\\u2015\",hslash:\"\\u210f\",hstrok:\"\\u0127\",hybull:\"\\u2043\",hyphen:\"\\u2010\"},\"h\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({IEcy:\"\\u0415\",IJlig:\"\\u0132\",IOcy:\"\\u0401\",Iacute:\"\\xcd\",Icirc:\"\\xce\",Icy:\"\\u0418\",Idot:\"\\u0130\",Igrave:\"\\xcc\",Imacr:\"\\u012a\",Implies:\"\\u21d2\",Int:\"\\u222c\",Iogon:\"\\u012e\",Iota:\"\\u0399\",Itilde:\"\\u0128\",Iukcy:\"\\u0406\",Iuml:\"\\xcf\",iacute:\"\\xed\",ic:\"\\u2063\",icirc:\"\\xee\",icy:\"\\u0438\",iecy:\"\\u0435\",iexcl:\"\\xa1\",iff:\"\\u21d4\",igrave:\"\\xec\",ii:\"\\u2148\",iiiint:\"\\u2a0c\",iiint:\"\\u222d\",iinfin:\"\\u29dc\",iiota:\"\\u2129\",ijlig:\"\\u0133\",imacr:\"\\u012b\",image:\"\\u2111\",imagline:\"\\u2110\",imagpart:\"\\u2111\",imof:\"\\u22b7\",imped:\"\\u01b5\",in:\"\\u2208\",incare:\"\\u2105\",infintie:\"\\u29dd\",inodot:\"\\u0131\",int:\"\\u222b\",integers:\"\\u2124\",intercal:\"\\u22ba\",intlarhk:\"\\u2a17\",intprod:\"\\u2a3c\",iocy:\"\\u0451\",iogon:\"\\u012f\",iprod:\"\\u2a3c\",iquest:\"\\xbf\",isin:\"\\u2208\",isinE:\"\\u22f9\",isindot:\"\\u22f5\",isins:\"\\u22f4\",isinsv:\"\\u22f3\",isinv:\"\\u2208\",it:\"\\u2062\",itilde:\"\\u0129\",iukcy:\"\\u0456\",iuml:\"\\xef\"},\"i\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({Jcirc:\"\\u0134\",Jcy:\"\\u0419\",Jsercy:\"\\u0408\",Jukcy:\"\\u0404\",jcirc:\"\\u0135\",jcy:\"\\u0439\",jsercy:\"\\u0458\",jukcy:\"\\u0454\"},\"j\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({KHcy:\"\\u0425\",KJcy:\"\\u040c\",Kappa:\"\\u039a\",Kcedil:\"\\u0136\",Kcy:\"\\u041a\",kcedil:\"\\u0137\",kcy:\"\\u043a\",kgreen:\"\\u0138\",khcy:\"\\u0445\",kjcy:\"\\u045c\"},\"k\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({LJcy:\"\\u0409\",LT:\"<\",Lacute:\"\\u0139\",Lang:\"\\u27ea\",Laplacetrf:\"\\u2112\",Lcaron:\"\\u013d\",Lcedil:\"\\u013b\",Lcy:\"\\u041b\",LeftArrowBar:\"\\u21e4\",LeftDoubleBracket:\"\\u27e6\",LeftDownTeeVector:\"\\u2961\",LeftDownVectorBar:\"\\u2959\",LeftRightVector:\"\\u294e\",LeftTeeArrow:\"\\u21a4\",LeftTeeVector:\"\\u295a\",LeftTriangleBar:\"\\u29cf\",LeftUpDownVector:\"\\u2951\",LeftUpTeeVector:\"\\u2960\",LeftUpVectorBar:\"\\u2958\",LeftVectorBar:\"\\u2952\",LessLess:\"\\u2aa1\",Lmidot:\"\\u013f\",LowerLeftArrow:\"\\u2199\",LowerRightArrow:\"\\u2198\",Lstrok:\"\\u0141\",Lt:\"\\u226a\",lAarr:\"\\u21da\",lArr:\"\\u21d0\",lAtail:\"\\u291b\",lBarr:\"\\u290e\",lE:\"\\u2266\",lHar:\"\\u2962\",lacute:\"\\u013a\",laemptyv:\"\\u29b4\",lagran:\"\\u2112\",lang:\"\\u27e8\",langd:\"\\u2991\",langle:\"\\u27e8\",laquo:\"\\xab\",larr:\"\\u2190\",larrb:\"\\u21e4\",larrbfs:\"\\u291f\",larrfs:\"\\u291d\",larrhk:\"\\u21a9\",larrpl:\"\\u2939\",larrsim:\"\\u2973\",lat:\"\\u2aab\",latail:\"\\u2919\",late:\"\\u2aad\",lates:\"\\u2aad\\ufe00\",lbarr:\"\\u290c\",lbbrk:\"\\u2772\",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\",leftarrow:\"\\u2190\",leftarrowtail:\"\\u21a2\",leftharpoondown:\"\\u21bd\",leftharpoonup:\"\\u21bc\",leftrightarrow:\"\\u2194\",leftrightarrows:\"\\u21c6\",leftrightharpoons:\"\\u21cb\",leftrightsquigarrow:\"\\u21ad\",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\",lesseqgtr:\"\\u22da\",lesseqqgtr:\"\\u2a8b\",lessgtr:\"\\u2276\",lesssim:\"\\u2272\",lfisht:\"\\u297c\",lfloor:\"\\u230a\",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\",lmoustache:\"\\u23b0\",lnapprox:\"\\u2a89\",lneq:\"\\u2a87\",lneqq:\"\\u2268\",loang:\"\\u27ec\",loarr:\"\\u21fd\",lobrk:\"\\u27e6\",longleftarrow:\"\\u27f5\",longleftrightarrow:\"\\u27f7\",longrightarrow:\"\\u27f6\",looparrowleft:\"\\u21ab\",lopar:\"\\u2985\",loplus:\"\\u2a2d\",lotimes:\"\\u2a34\",lowbar:\"_\",lozenge:\"\\u25ca\",lozf:\"\\u29eb\",lpar:\"(\",lparlt:\"\\u2993\",lrarr:\"\\u21c6\",lrcorner:\"\\u231f\",lrhar:\"\\u21cb\",lrhard:\"\\u296d\",lrm:\"\\u200e\",lrtri:\"\\u22bf\",lsaquo:\"\\u2039\",lsh:\"\\u21b0\",lsim:\"\\u2272\",lsime:\"\\u2a8d\",lsimg:\"\\u2a8f\",lsqb:\"[\",lsquo:\"\\u2018\",lsquor:\"\\u201a\",lstrok:\"\\u0142\",ltcc:\"\\u2aa6\",ltcir:\"\\u2a79\",ltdot:\"\\u22d6\",lthree:\"\\u22cb\",ltlarr:\"\\u2976\",ltquest:\"\\u2a7b\",ltrPar:\"\\u2996\",ltrie:\"\\u22b4\",ltrif:\"\\u25c2\",lurdshar:\"\\u294a\",luruhar:\"\\u2966\",lvertneqq:\"\\u2268\\ufe00\",lvnE:\"\\u2268\\ufe00\"},\"l\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({Map:\"\\u2905\",Mcy:\"\\u041c\",MediumSpace:\"\\u205f\",Mellintrf:\"\\u2133\",Mu:\"\\u039c\",mDDot:\"\\u223a\",male:\"\\u2642\",maltese:\"\\u2720\",map:\"\\u21a6\",mapsto:\"\\u21a6\",mapstodown:\"\\u21a7\",mapstoleft:\"\\u21a4\",mapstoup:\"\\u21a5\",marker:\"\\u25ae\",mcomma:\"\\u2a29\",mcy:\"\\u043c\",mdash:\"\\u2014\",measuredangle:\"\\u2221\",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\",mp:\"\\u2213\",mstpos:\"\\u223e\",mumap:\"\\u22b8\"},\"m\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({NJcy:\"\\u040a\",Nacute:\"\\u0143\",Ncaron:\"\\u0147\",Ncedil:\"\\u0145\",Ncy:\"\\u041d\",NegativeMediumSpace:\"\\u200b\",NegativeThickSpace:\"\\u200b\",NegativeThinSpace:\"\\u200b\",NegativeVeryThinSpace:\"\\u200b\",NewLine:\"\\n\",NoBreak:\"\\u2060\",NonBreakingSpace:\"\\xa0\",Not:\"\\u2aec\",NotCongruent:\"\\u2262\",NotCupCap:\"\\u226d\",NotEqualTilde:\"\\u2242\\u0338\",NotGreaterFullEqual:\"\\u2267\\u0338\",NotGreaterGreater:\"\\u226b\\u0338\",NotGreaterLess:\"\\u2279\",NotGreaterSlantEqual:\"\\u2a7e\\u0338\",NotGreaterTilde:\"\\u2275\",NotHumpDownHump:\"\\u224e\\u0338\",NotHumpEqual:\"\\u224f\\u0338\",NotLeftTriangleBar:\"\\u29cf\\u0338\",NotLessGreater:\"\\u2278\",NotLessLess:\"\\u226a\\u0338\",NotLessSlantEqual:\"\\u2a7d\\u0338\",NotLessTilde:\"\\u2274\",NotNestedGreaterGreater:\"\\u2aa2\\u0338\",NotNestedLessLess:\"\\u2aa1\\u0338\",NotPrecedesEqual:\"\\u2aaf\\u0338\",NotReverseElement:\"\\u220c\",NotRightTriangleBar:\"\\u29d0\\u0338\",NotSquareSubset:\"\\u228f\\u0338\",NotSquareSubsetEqual:\"\\u22e2\",NotSquareSuperset:\"\\u2290\\u0338\",NotSquareSupersetEqual:\"\\u22e3\",NotSubset:\"\\u2282\\u20d2\",NotSucceedsEqual:\"\\u2ab0\\u0338\",NotSucceedsTilde:\"\\u227f\\u0338\",NotSuperset:\"\\u2283\\u20d2\",NotTildeEqual:\"\\u2244\",NotTildeFullEqual:\"\\u2247\",NotTildeTilde:\"\\u2249\",Ntilde:\"\\xd1\",Nu:\"\\u039d\",nGg:\"\\u22d9\\u0338\",nGt:\"\\u226b\\u20d2\",nGtv:\"\\u226b\\u0338\",nLl:\"\\u22d8\\u0338\",nLt:\"\\u226a\\u20d2\",nLtv:\"\\u226a\\u0338\",nabla:\"\\u2207\",nacute:\"\\u0144\",nang:\"\\u2220\\u20d2\",nap:\"\\u2249\",napE:\"\\u2a70\\u0338\",napid:\"\\u224b\\u0338\",napos:\"\\u0149\",napprox:\"\\u2249\",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\",nearrow:\"\\u2197\",nedot:\"\\u2250\\u0338\",nequiv:\"\\u2262\",nesear:\"\\u2928\",nesim:\"\\u2242\\u0338\",nexist:\"\\u2204\",nexists:\"\\u2204\",ngE:\"\\u2267\\u0338\",nge:\"\\u2271\",ngeq:\"\\u2271\",ngeqq:\"\\u2267\\u0338\",ngeqslant:\"\\u2a7e\\u0338\",nges:\"\\u2a7e\\u0338\",ngsim:\"\\u2275\",ngt:\"\\u226f\",ngtr:\"\\u226f\",nhArr:\"\\u21ce\",nhpar:\"\\u2af2\",ni:\"\\u220b\",nis:\"\\u22fc\",nisd:\"\\u22fa\",niv:\"\\u220b\",njcy:\"\\u045a\",nlArr:\"\\u21cd\",nlE:\"\\u2266\\u0338\",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\",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\",nrarrc:\"\\u2933\\u0338\",nrarrw:\"\\u219d\\u0338\",nrightarrow:\"\\u219b\",nrtri:\"\\u22eb\",nrtrie:\"\\u22ed\",nsc:\"\\u2281\",nsccue:\"\\u22e1\",nsce:\"\\u2ab0\\u0338\",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\",num:\"#\",numero:\"\\u2116\",numsp:\"\\u2007\",nvHarr:\"\\u2904\",nvap:\"\\u224d\\u20d2\",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\",nwarrow:\"\\u2196\",nwnear:\"\\u2927\"},\"n\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({OElig:\"\\u0152\",Oacute:\"\\xd3\",Ocirc:\"\\xd4\",Ocy:\"\\u041e\",Odblac:\"\\u0150\",Ograve:\"\\xd2\",Omacr:\"\\u014c\",Omicron:\"\\u039f\",OpenCurlyDoubleQuote:\"\\u201c\",OpenCurlyQuote:\"\\u2018\",Or:\"\\u2a54\",Oslash:\"\\xd8\",Otilde:\"\\xd5\",Otimes:\"\\u2a37\",Ouml:\"\\xd6\",OverBracket:\"\\u23b4\",OverParenthesis:\"\\u23dc\",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\",ogon:\"\\u02db\",ograve:\"\\xf2\",ogt:\"\\u29c1\",ohbar:\"\\u29b5\",ohm:\"\\u03a9\",oint:\"\\u222e\",olarr:\"\\u21ba\",olcir:\"\\u29be\",olcross:\"\\u29bb\",oline:\"\\u203e\",olt:\"\\u29c0\",omacr:\"\\u014d\",omid:\"\\u29b6\",ominus:\"\\u2296\",opar:\"\\u29b7\",operp:\"\\u29b9\",oplus:\"\\u2295\",orarr:\"\\u21bb\",ord:\"\\u2a5d\",order:\"\\u2134\",orderof:\"\\u2134\",ordf:\"\\xaa\",ordm:\"\\xba\",origof:\"\\u22b6\",oror:\"\\u2a56\",orslope:\"\\u2a57\",orv:\"\\u2a5b\",oslash:\"\\xf8\",otilde:\"\\xf5\",otimes:\"\\u2297\",otimesas:\"\\u2a36\",ouml:\"\\xf6\",ovbar:\"\\u233d\"},\"o\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({Pcy:\"\\u041f\",Poincareplane:\"\\u210c\",Pr:\"\\u2abb\",Prime:\"\\u2033\",Proportion:\"\\u2237\",par:\"\\u2225\",para:\"\\xb6\",parallel:\"\\u2225\",parsim:\"\\u2af3\",parsl:\"\\u2afd\",part:\"\\u2202\",pcy:\"\\u043f\",percnt:\"%\",permil:\"\\u2030\",perp:\"\\u22a5\",pertenk:\"\\u2031\",phmmat:\"\\u2133\",phone:\"\\u260e\",pitchfork:\"\\u22d4\",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\",pound:\"\\xa3\",pr:\"\\u227a\",prE:\"\\u2ab3\",prcue:\"\\u227c\",pre:\"\\u2aaf\",prec:\"\\u227a\",precapprox:\"\\u2ab7\",preccurlyeq:\"\\u227c\",preceq:\"\\u2aaf\",precsim:\"\\u227e\",primes:\"\\u2119\",prnE:\"\\u2ab5\",prnap:\"\\u2ab9\",prnsim:\"\\u22e8\",prod:\"\\u220f\",profalar:\"\\u232e\",profline:\"\\u2312\",profsurf:\"\\u2313\",prop:\"\\u221d\",propto:\"\\u221d\",prsim:\"\\u227e\",prurel:\"\\u22b0\",puncsp:\"\\u2008\"},\"p\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({QUOT:'\"',qint:\"\\u2a0c\",qprime:\"\\u2057\",quaternions:\"\\u210d\",quatint:\"\\u2a16\",quest:\"?\",questeq:\"\\u225f\"},\"q\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({RBarr:\"\\u2910\",REG:\"\\xae\",Racute:\"\\u0154\",Rang:\"\\u27eb\",Rarrtl:\"\\u2916\",Rcaron:\"\\u0158\",Rcedil:\"\\u0156\",Rcy:\"\\u0420\",ReverseElement:\"\\u220b\",ReverseUpEquilibrium:\"\\u296f\",Rho:\"\\u03a1\",RightArrowBar:\"\\u21e5\",RightDoubleBracket:\"\\u27e7\",RightDownTeeVector:\"\\u295d\",RightDownVectorBar:\"\\u2955\",RightTeeVector:\"\\u295b\",RightTriangleBar:\"\\u29d0\",RightUpDownVector:\"\\u294f\",RightUpTeeVector:\"\\u295c\",RightUpVectorBar:\"\\u2954\",RightVectorBar:\"\\u2953\",RoundImplies:\"\\u2970\",RuleDelayed:\"\\u29f4\",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\",rarrw:\"\\u219d\",ratail:\"\\u291a\",ratio:\"\\u2236\",rationals:\"\\u211a\",rbarr:\"\\u290d\",rbbrk:\"\\u2773\",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\",rhard:\"\\u21c1\",rharu:\"\\u21c0\",rharul:\"\\u296c\",rightarrow:\"\\u2192\",rightarrowtail:\"\\u21a3\",rightharpoondown:\"\\u21c1\",rightharpoonup:\"\\u21c0\",rightleftarrows:\"\\u21c4\",rightleftharpoons:\"\\u21cc\",rightsquigarrow:\"\\u219d\",risingdotseq:\"\\u2253\",rlarr:\"\\u21c4\",rlhar:\"\\u21cc\",rlm:\"\\u200f\",rmoustache:\"\\u23b1\",rnmid:\"\\u2aee\",roang:\"\\u27ed\",roarr:\"\\u21fe\",robrk:\"\\u27e7\",ropar:\"\\u2986\",roplus:\"\\u2a2e\",rotimes:\"\\u2a35\",rpar:\")\",rpargt:\"\\u2994\",rppolint:\"\\u2a12\",rrarr:\"\\u21c9\",rsaquo:\"\\u203a\",rsh:\"\\u21b1\",rsqb:\"]\",rsquo:\"\\u2019\",rsquor:\"\\u2019\",rthree:\"\\u22cc\",rtrie:\"\\u22b5\",rtrif:\"\\u25b8\",rtriltri:\"\\u29ce\",ruluhar:\"\\u2968\",rx:\"\\u211e\"},\"r\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({SHCHcy:\"\\u0429\",SHcy:\"\\u0428\",SOFTcy:\"\\u042c\",Sacute:\"\\u015a\",Sc:\"\\u2abc\",Scaron:\"\\u0160\",Scedil:\"\\u015e\",Scirc:\"\\u015c\",Scy:\"\\u0421\",ShortDownArrow:\"\\u2193\",ShortLeftArrow:\"\\u2190\",ShortRightArrow:\"\\u2192\",ShortUpArrow:\"\\u2191\",Sub:\"\\u22d0\",Sup:\"\\u22d1\",sacute:\"\\u015b\",sbquo:\"\\u201a\",sc:\"\\u227b\",scE:\"\\u2ab4\",scaron:\"\\u0161\",sccue:\"\\u227d\",sce:\"\\u2ab0\",scedil:\"\\u015f\",scirc:\"\\u015d\",scpolint:\"\\u2a13\",scsim:\"\\u227f\",scy:\"\\u0441\",sdotb:\"\\u22a1\",sdote:\"\\u2a66\",seArr:\"\\u21d8\",searhk:\"\\u2925\",searrow:\"\\u2198\",semi:\";\",seswar:\"\\u2929\",setminus:\"\\u2216\",setmn:\"\\u2216\",sext:\"\\u2736\",sfrown:\"\\u2322\",shchcy:\"\\u0449\",shcy:\"\\u0448\",shortmid:\"\\u2223\",shortparallel:\"\\u2225\",shy:\"\\xad\",sigmaf:\"\\u03c2\",sim:\"\\u223c\",simdot:\"\\u2a6a\",sime:\"\\u2243\",simeq:\"\\u2243\",simg:\"\\u2a9e\",simgE:\"\\u2aa0\",siml:\"\\u2a9d\",simlE:\"\\u2a9f\",simplus:\"\\u2a24\",simrarr:\"\\u2972\",slarr:\"\\u2190\",smallsetminus:\"\\u2216\",smashp:\"\\u2a33\",smeparsl:\"\\u29e4\",smid:\"\\u2223\",smt:\"\\u2aaa\",smte:\"\\u2aac\",smtes:\"\\u2aac\\ufe00\",softcy:\"\\u044c\",sol:\"/\",solb:\"\\u29c4\",solbar:\"\\u233f\",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\",ssetmn:\"\\u2216\",ssmile:\"\\u2323\",sstarf:\"\\u22c6\",star:\"\\u2606\",starf:\"\\u2605\",straightepsilon:\"\\u03f5\",straightphi:\"\\u03d5\",strns:\"\\xaf\",subdot:\"\\u2abd\",sube:\"\\u2286\",subedot:\"\\u2ac3\",submult:\"\\u2ac1\",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\",sup:\"\\u2283\",sup1:\"\\xb9\",sup2:\"\\xb2\",sup3:\"\\xb3\",supdot:\"\\u2abe\",supdsub:\"\\u2ad8\",supe:\"\\u2287\",supedot:\"\\u2ac4\",suphsol:\"\\u27c9\",suphsub:\"\\u2ad7\",suplarr:\"\\u297b\",supmult:\"\\u2ac2\",supplus:\"\\u2ac0\",supset:\"\\u2283\",supseteq:\"\\u2287\",supseteqq:\"\\u2ac6\",supsetneq:\"\\u228b\",supsetneqq:\"\\u2acc\",supsim:\"\\u2ac8\",supsub:\"\\u2ad4\",supsup:\"\\u2ad6\",swArr:\"\\u21d9\",swarhk:\"\\u2926\",swarrow:\"\\u2199\",swnwar:\"\\u292a\",szlig:\"\\xdf\"},\"s\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({THORN:\"\\xde\",TRADE:\"\\u2122\",TSHcy:\"\\u040b\",TScy:\"\\u0426\",Tab:\"\\t\",Tau:\"\\u03a4\",Tcaron:\"\\u0164\",Tcedil:\"\\u0162\",Tcy:\"\\u0422\",ThickSpace:\"\\u205f\\u200a\",ThinSpace:\"\\u2009\",TripleDot:\"\\u20db\",Tstrok:\"\\u0166\",target:\"\\u2316\",tbrk:\"\\u23b4\",tcaron:\"\\u0165\",tcedil:\"\\u0163\",tcy:\"\\u0442\",tdot:\"\\u20db\",telrec:\"\\u2315\",there4:\"\\u2234\",therefore:\"\\u2234\",thetasym:\"\\u03d1\",thickapprox:\"\\u2248\",thicksim:\"\\u223c\",thinsp:\"\\u2009\",thkap:\"\\u2248\",thksim:\"\\u223c\",thorn:\"\\xfe\",timesb:\"\\u22a0\",timesbar:\"\\u2a31\",timesd:\"\\u2a30\",tint:\"\\u222d\",toea:\"\\u2928\",top:\"\\u22a4\",topbot:\"\\u2336\",topcir:\"\\u2af1\",topfork:\"\\u2ada\",tosa:\"\\u2929\",tprime:\"\\u2034\",trade:\"\\u2122\",triangledown:\"\\u25bf\",triangleleft:\"\\u25c3\",trianglelefteq:\"\\u22b4\",triangleright:\"\\u25b9\",trianglerighteq:\"\\u22b5\",tridot:\"\\u25ec\",trie:\"\\u225c\",triminus:\"\\u2a3a\",triplus:\"\\u2a39\",trisb:\"\\u29cd\",tritime:\"\\u2a3b\",trpezium:\"\\u23e2\",tscy:\"\\u0446\",tshcy:\"\\u045b\",tstrok:\"\\u0167\",twixt:\"\\u226c\",twoheadleftarrow:\"\\u219e\",twoheadrightarrow:\"\\u21a0\"},\"t\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({Uacute:\"\\xda\",Uarr:\"\\u219f\",Uarrocir:\"\\u2949\",Ubrcy:\"\\u040e\",Ubreve:\"\\u016c\",Ucirc:\"\\xdb\",Ucy:\"\\u0423\",Udblac:\"\\u0170\",Ugrave:\"\\xd9\",Umacr:\"\\u016a\",UnderBracket:\"\\u23b5\",UnderParenthesis:\"\\u23dd\",Uogon:\"\\u0172\",UpArrowBar:\"\\u2912\",UpArrowDownArrow:\"\\u21c5\",UpEquilibrium:\"\\u296e\",UpTeeArrow:\"\\u21a5\",UpperLeftArrow:\"\\u2196\",UpperRightArrow:\"\\u2197\",Upsi:\"\\u03d2\",Uring:\"\\u016e\",Utilde:\"\\u0168\",Uuml:\"\\xdc\",uArr:\"\\u21d1\",uHar:\"\\u2963\",uacute:\"\\xfa\",uarr:\"\\u2191\",ubrcy:\"\\u045e\",ubreve:\"\\u016d\",ucirc:\"\\xfb\",ucy:\"\\u0443\",udarr:\"\\u21c5\",udblac:\"\\u0171\",udhar:\"\\u296e\",ufisht:\"\\u297e\",ugrave:\"\\xf9\",uharl:\"\\u21bf\",uharr:\"\\u21be\",uhblk:\"\\u2580\",ulcorn:\"\\u231c\",ulcorner:\"\\u231c\",ulcrop:\"\\u230f\",ultri:\"\\u25f8\",umacr:\"\\u016b\",uml:\"\\xa8\",uogon:\"\\u0173\",uparrow:\"\\u2191\",updownarrow:\"\\u2195\",upharpoonleft:\"\\u21bf\",upharpoonright:\"\\u21be\",uplus:\"\\u228e\",upsih:\"\\u03d2\",upsilon:\"\\u03c5\",urcorn:\"\\u231d\",urcorner:\"\\u231d\",urcrop:\"\\u230e\",uring:\"\\u016f\",urtri:\"\\u25f9\",utdot:\"\\u22f0\",utilde:\"\\u0169\",utri:\"\\u25b5\",utrif:\"\\u25b4\",uuarr:\"\\u21c8\",uuml:\"\\xfc\",uwangle:\"\\u29a7\"},\"u\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({VDash:\"\\u22ab\",Vbar:\"\\u2aeb\",Vcy:\"\\u0412\",Vdashl:\"\\u2ae6\",Verbar:\"\\u2016\",Vert:\"\\u2016\",VerticalLine:\"|\",VerticalSeparator:\"\\u2758\",VeryThinSpace:\"\\u200a\",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\",veeeq:\"\\u225a\",verbar:\"|\",vert:\"|\",vltri:\"\\u22b2\",vnsub:\"\\u2282\\u20d2\",vnsup:\"\\u2283\\u20d2\",vprop:\"\\u221d\",vrtri:\"\\u22b3\",vsubnE:\"\\u2acb\\ufe00\",vsubne:\"\\u228a\\ufe00\",vsupnE:\"\\u2acc\\ufe00\",vsupne:\"\\u228b\\ufe00\",vzigzag:\"\\u299a\"},\"v\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({Wcirc:\"\\u0174\",wcirc:\"\\u0175\",wedbar:\"\\u2a5f\",wedge:\"\\u2227\",wedgeq:\"\\u2259\",wp:\"\\u2118\",wr:\"\\u2240\",wreath:\"\\u2240\"},\"w\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({xcap:\"\\u22c2\",xcirc:\"\\u25ef\",xcup:\"\\u22c3\",xdtri:\"\\u25bd\",xhArr:\"\\u27fa\",xharr:\"\\u27f7\",xlArr:\"\\u27f8\",xlarr:\"\\u27f5\",xmap:\"\\u27fc\",xnis:\"\\u22fb\",xodot:\"\\u2a00\",xoplus:\"\\u2a01\",xotime:\"\\u2a02\",xrArr:\"\\u27f9\",xrarr:\"\\u27f6\",xsqcup:\"\\u2a06\",xuplus:\"\\u2a04\",xutri:\"\\u25b3\",xvee:\"\\u22c1\",xwedge:\"\\u22c0\"},\"x\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({YAcy:\"\\u042f\",YIcy:\"\\u0407\",YUcy:\"\\u042e\",Yacute:\"\\xdd\",Ycirc:\"\\u0176\",Ycy:\"\\u042b\",Yuml:\"\\u0178\",yacute:\"\\xfd\",yacy:\"\\u044f\",ycirc:\"\\u0177\",ycy:\"\\u044b\",yicy:\"\\u0457\",yucy:\"\\u044e\",yuml:\"\\xff\"},\"y\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({ZHcy:\"\\u0416\",Zacute:\"\\u0179\",Zcaron:\"\\u017d\",Zcy:\"\\u0417\",Zdot:\"\\u017b\",ZeroWidthSpace:\"\\u200b\",Zeta:\"\\u0396\",zacute:\"\\u017a\",zcaron:\"\\u017e\",zcy:\"\\u0437\",zdot:\"\\u017c\",zeetrf:\"\\u2128\",zhcy:\"\\u0436\",zwj:\"\\u200d\",zwnj:\"\\u200c\"},\"z\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({Afr:\"\\ud835\\udd04\",Bfr:\"\\ud835\\udd05\",Cfr:\"\\u212d\",Dfr:\"\\ud835\\udd07\",Efr:\"\\ud835\\udd08\",Ffr:\"\\ud835\\udd09\",Gfr:\"\\ud835\\udd0a\",Hfr:\"\\u210c\",Ifr:\"\\u2111\",Jfr:\"\\ud835\\udd0d\",Kfr:\"\\ud835\\udd0e\",Lfr:\"\\ud835\\udd0f\",Mfr:\"\\ud835\\udd10\",Nfr:\"\\ud835\\udd11\",Ofr:\"\\ud835\\udd12\",Pfr:\"\\ud835\\udd13\",Qfr:\"\\ud835\\udd14\",Rfr:\"\\u211c\",Sfr:\"\\ud835\\udd16\",Tfr:\"\\ud835\\udd17\",Ufr:\"\\ud835\\udd18\",Vfr:\"\\ud835\\udd19\",Wfr:\"\\ud835\\udd1a\",Xfr:\"\\ud835\\udd1b\",Yfr:\"\\ud835\\udd1c\",Zfr:\"\\u2128\",afr:\"\\ud835\\udd1e\",bfr:\"\\ud835\\udd1f\",cfr:\"\\ud835\\udd20\",dfr:\"\\ud835\\udd21\",efr:\"\\ud835\\udd22\",ffr:\"\\ud835\\udd23\",gfr:\"\\ud835\\udd24\",hfr:\"\\ud835\\udd25\",ifr:\"\\ud835\\udd26\",jfr:\"\\ud835\\udd27\",kfr:\"\\ud835\\udd28\",lfr:\"\\ud835\\udd29\",mfr:\"\\ud835\\udd2a\",nfr:\"\\ud835\\udd2b\",ofr:\"\\ud835\\udd2c\",pfr:\"\\ud835\\udd2d\",qfr:\"\\ud835\\udd2e\",rfr:\"\\ud835\\udd2f\",sfr:\"\\ud835\\udd30\",tfr:\"\\ud835\\udd31\",ufr:\"\\ud835\\udd32\",vfr:\"\\ud835\\udd33\",wfr:\"\\ud835\\udd34\",xfr:\"\\ud835\\udd35\",yfr:\"\\ud835\\udd36\",zfr:\"\\ud835\\udd37\"},\"fr\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({Aopf:\"\\ud835\\udd38\",Bopf:\"\\ud835\\udd39\",Copf:\"\\u2102\",Dopf:\"\\ud835\\udd3b\",Eopf:\"\\ud835\\udd3c\",Fopf:\"\\ud835\\udd3d\",Gopf:\"\\ud835\\udd3e\",Hopf:\"\\u210d\",Iopf:\"\\ud835\\udd40\",Jopf:\"\\ud835\\udd41\",Kopf:\"\\ud835\\udd42\",Lopf:\"\\ud835\\udd43\",Mopf:\"\\ud835\\udd44\",Nopf:\"\\u2115\",Oopf:\"\\ud835\\udd46\",Popf:\"\\u2119\",Qopf:\"\\u211a\",Ropf:\"\\u211d\",Sopf:\"\\ud835\\udd4a\",Topf:\"\\ud835\\udd4b\",Uopf:\"\\ud835\\udd4c\",Vopf:\"\\ud835\\udd4d\",Wopf:\"\\ud835\\udd4e\",Xopf:\"\\ud835\\udd4f\",Yopf:\"\\ud835\\udd50\",Zopf:\"\\u2124\",aopf:\"\\ud835\\udd52\",bopf:\"\\ud835\\udd53\",copf:\"\\ud835\\udd54\",dopf:\"\\ud835\\udd55\",eopf:\"\\ud835\\udd56\",fopf:\"\\ud835\\udd57\",gopf:\"\\ud835\\udd58\",hopf:\"\\ud835\\udd59\",iopf:\"\\ud835\\udd5a\",jopf:\"\\ud835\\udd5b\",kopf:\"\\ud835\\udd5c\",lopf:\"\\ud835\\udd5d\",mopf:\"\\ud835\\udd5e\",nopf:\"\\ud835\\udd5f\",oopf:\"\\ud835\\udd60\",popf:\"\\ud835\\udd61\",qopf:\"\\ud835\\udd62\",ropf:\"\\ud835\\udd63\",sopf:\"\\ud835\\udd64\",topf:\"\\ud835\\udd65\",uopf:\"\\ud835\\udd66\",vopf:\"\\ud835\\udd67\",wopf:\"\\ud835\\udd68\",xopf:\"\\ud835\\udd69\",yopf:\"\\ud835\\udd6a\",zopf:\"\\ud835\\udd6b\"},\"opf\")},function(r,e,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),t(0).add({Ascr:\"\\ud835\\udc9c\",Bscr:\"\\u212c\",Cscr:\"\\ud835\\udc9e\",Dscr:\"\\ud835\\udc9f\",Escr:\"\\u2130\",Fscr:\"\\u2131\",Gscr:\"\\ud835\\udca2\",Hscr:\"\\u210b\",Iscr:\"\\u2110\",Jscr:\"\\ud835\\udca5\",Kscr:\"\\ud835\\udca6\",Lscr:\"\\u2112\",Mscr:\"\\u2133\",Nscr:\"\\ud835\\udca9\",Oscr:\"\\ud835\\udcaa\",Pscr:\"\\ud835\\udcab\",Qscr:\"\\ud835\\udcac\",Rscr:\"\\u211b\",Sscr:\"\\ud835\\udcae\",Tscr:\"\\ud835\\udcaf\",Uscr:\"\\ud835\\udcb0\",Vscr:\"\\ud835\\udcb1\",Wscr:\"\\ud835\\udcb2\",Xscr:\"\\ud835\\udcb3\",Yscr:\"\\ud835\\udcb4\",Zscr:\"\\ud835\\udcb5\",ascr:\"\\ud835\\udcb6\",bscr:\"\\ud835\\udcb7\",cscr:\"\\ud835\\udcb8\",dscr:\"\\ud835\\udcb9\",escr:\"\\u212f\",fscr:\"\\ud835\\udcbb\",gscr:\"\\u210a\",hscr:\"\\ud835\\udcbd\",iscr:\"\\ud835\\udcbe\",jscr:\"\\ud835\\udcbf\",kscr:\"\\ud835\\udcc0\",lscr:\"\\ud835\\udcc1\",mscr:\"\\ud835\\udcc2\",nscr:\"\\ud835\\udcc3\",oscr:\"\\u2134\",pscr:\"\\ud835\\udcc5\",qscr:\"\\ud835\\udcc6\",rscr:\"\\ud835\\udcc7\",sscr:\"\\ud835\\udcc8\",tscr:\"\\ud835\\udcc9\",uscr:\"\\ud835\\udcca\",vscr:\"\\ud835\\udccb\",wscr:\"\\ud835\\udccc\",xscr:\"\\ud835\\udccd\",yscr:\"\\ud835\\udcce\",zscr:\"\\ud835\\udccf\"},\"scr\")}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/mml.js",
    "content": "!function(t){var e={};function r(o){if(e[o])return e[o].exports;var a=e[o]={i:o,l:!1,exports:{}};return t[o].call(a.exports,a,a.exports,r),a.l=!0,a.exports}r.m=t,r.c=e,r.d=function(t,e,o){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},r.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var a in t)r.d(o,a,function(e){return t[e]}.bind(null,a));return o},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,\"a\",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p=\"\",r(r.s=10)}([function(t,e,r){\"use strict\";var o,a=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,a,i=r.call(t),n=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)n.push(o.value)}catch(t){a={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return n};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MathML=void 0;var n=r(5),s=r(3),l=r(6),c=r(1),u=r(2),h=function(t){function e(e){void 0===e&&(e={});var r=this,o=i(s.separateOptions(e,c.FindMathML.OPTIONS,u.MathMLCompile.OPTIONS),3),a=o[0],n=o[1],h=o[2];return(r=t.call(this,a)||this).findMathML=r.options.FindMathML||new c.FindMathML(n),r.mathml=r.options.MathMLCompile||new u.MathMLCompile(h),r.mmlFilters=new l.FunctionList,r}return a(e,t),e.prototype.setAdaptor=function(e){t.prototype.setAdaptor.call(this,e),this.findMathML.adaptor=e,this.mathml.adaptor=e},e.prototype.setMmlFactory=function(e){t.prototype.setMmlFactory.call(this,e),this.mathml.setMmlFactory(e)},Object.defineProperty(e.prototype,\"processStrings\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.compile=function(t,e){var r=t.start.node;if(!r||!t.end.node||this.options.forceReparse||\"#text\"===this.adaptor.kind(r)){var o=this.executeFilters(this.preFilters,t,e,t.math||\"<math></math>\"),a=this.checkForErrors(this.adaptor.parse(o,\"text/\"+this.options.parseAs)),i=this.adaptor.body(a);1!==this.adaptor.childNodes(i).length&&this.error(\"MathML must consist of a single element\"),r=this.adaptor.remove(this.adaptor.firstChild(i)),\"math\"!==this.adaptor.kind(r).replace(/^[a-z]+:/,\"\")&&this.error(\"MathML must be formed by a <math> element, not <\"+this.adaptor.kind(r)+\">\")}return r=this.executeFilters(this.mmlFilters,t,e,r),this.executeFilters(this.postFilters,t,e,this.mathml.compile(r))},e.prototype.checkForErrors=function(t){var e=this.adaptor.tags(this.adaptor.body(t),\"parsererror\")[0];return e&&(\"\"===this.adaptor.textContent(e)&&this.error(\"Error processing MathML\"),this.options.parseError.call(this,e)),t},e.prototype.error=function(t){throw new Error(t)},e.prototype.findMath=function(t){return this.findMathML.findMath(t)},e.NAME=\"MathML\",e.OPTIONS=s.defaultOptions({parseAs:\"html\",forceReparse:!1,FindMathML:null,MathMLCompile:null,parseError:function(t){this.error(this.adaptor.textContent(t).replace(/\\n.*/g,\"\"))}},n.AbstractInputJax.OPTIONS),e}(n.AbstractInputJax);e.MathML=h},function(t,e,r){\"use strict\";var o,a=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindMathML=void 0;var n=r(7),s=\"http://www.w3.org/1998/Math/MathML\",l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),e.prototype.findMath=function(t){var e=new Set;this.findMathNodes(t,e),this.findMathPrefixed(t,e);var r=this.adaptor.root(this.adaptor.document);return\"html\"===this.adaptor.kind(r)&&0===e.size&&this.findMathNS(t,e),this.processMath(e)},e.prototype.findMathNodes=function(t,e){var r,o;try{for(var a=i(this.adaptor.tags(t,\"math\")),n=a.next();!n.done;n=a.next()){var s=n.value;e.add(s)}}catch(t){r={error:t}}finally{try{n&&!n.done&&(o=a.return)&&o.call(a)}finally{if(r)throw r.error}}},e.prototype.findMathPrefixed=function(t,e){var r,o,a,n,l=this.adaptor.root(this.adaptor.document);try{for(var c=i(this.adaptor.allAttributes(l)),u=c.next();!u.done;u=c.next()){var h=u.value;if(\"xmlns:\"===h.name.substr(0,6)&&h.value===s){var p=h.name.substr(6);try{for(var d=(a=void 0,i(this.adaptor.tags(t,p+\":math\"))),f=d.next();!f.done;f=d.next()){var M=f.value;e.add(M)}}catch(t){a={error:t}}finally{try{f&&!f.done&&(n=d.return)&&n.call(d)}finally{if(a)throw a.error}}}}}catch(t){r={error:t}}finally{try{u&&!u.done&&(o=c.return)&&o.call(c)}finally{if(r)throw r.error}}},e.prototype.findMathNS=function(t,e){var r,o;try{for(var a=i(this.adaptor.tags(t,\"math\",s)),n=a.next();!n.done;n=a.next()){var l=n.value;e.add(l)}}catch(t){r={error:t}}finally{try{n&&!n.done&&(o=a.return)&&o.call(a)}finally{if(r)throw r.error}}},e.prototype.processMath=function(t){var e,r,o=[];try{for(var a=i(Array.from(t)),n=a.next();!n.done;n=a.next()){var s=n.value,l=\"block\"===this.adaptor.getAttribute(s,\"display\")||\"display\"===this.adaptor.getAttribute(s,\"mode\"),c={node:s,n:0,delim:\"\"},u={node:s,n:0,delim:\"\"};o.push({math:this.adaptor.outerHTML(s),start:c,end:u,display:l})}}catch(t){e={error:t}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return o},e.OPTIONS={},e}(n.AbstractFindMath);e.FindMathML=l},function(t,e,r){\"use strict\";var o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var a in e=arguments[r])Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t}).apply(this,arguments)},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MathMLCompile=void 0;var i=r(8),n=r(3),s=r(9),l=function(){function t(t){void 0===t&&(t={});var e=this.constructor;this.options=n.userOptions(n.defaultOptions({},e.OPTIONS),t)}return t.prototype.setMmlFactory=function(t){this.factory=t},t.prototype.compile=function(t){var e=this.makeNode(t);return e.verifyTree(this.options.verify),e.setInheritedAttributes({},!1,0,!1),e.walkTree(this.markMrows),e},t.prototype.makeNode=function(t){var e,r,o=this.adaptor,n=!1,s=o.kind(t).replace(/^.*:/,\"\"),l=o.getAttribute(t,\"data-mjx-texclass\")||\"\";l&&(l=this.filterAttribute(\"data-mjx-texclass\",l)||\"\");var c=l&&\"mrow\"===s?\"TeXAtom\":s;try{for(var u=a(this.filterClassList(o.allClasses(t))),h=u.next();!h.done;h=u.next()){var p=h.value;p.match(/^MJX-TeXAtom-/)?(l=p.substr(12),c=\"TeXAtom\"):\"MJX-fixedlimits\"===p&&(n=!0)}}catch(t){e={error:t}}finally{try{h&&!h.done&&(r=u.return)&&r.call(u)}finally{if(e)throw e.error}}this.factory.getNodeClass(c)||this.error('Unknown node type \"'+c+'\"');var d=this.factory.create(c);return\"TeXAtom\"===c?this.texAtom(d,l,n):l&&(d.texClass=i.TEXCLASS[l],d.setProperty(\"texClass\",d.texClass)),this.addAttributes(d,t),this.checkClass(d,t),this.addChildren(d,t),d},t.prototype.addAttributes=function(t,e){var r,o,i=!1;try{for(var n=a(this.adaptor.allAttributes(e)),s=n.next();!s.done;s=n.next()){var l=s.value,c=l.name,u=this.filterAttribute(c,l.value);if(null===u)return;if(\"data-mjx-\"===c.substr(0,9))\"data-mjx-alternate\"===c?t.setProperty(\"variantForm\",!0):\"data-mjx-variant\"===c&&(t.attributes.set(\"mathvariant\",u),i=!0);else if(\"class\"!==c){var h=u.toLowerCase();\"true\"===h||\"false\"===h?t.attributes.set(c,\"true\"===h):i&&\"mathvariant\"===c||t.attributes.set(c,u)}}}catch(t){r={error:t}}finally{try{s&&!s.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}},t.prototype.filterAttribute=function(t,e){return e},t.prototype.filterClassList=function(t){return t},t.prototype.addChildren=function(t,e){var r,o;if(0!==t.arity){var i=this.adaptor;try{for(var n=a(i.childNodes(e)),s=n.next();!s.done;s=n.next()){var l=s.value,c=i.kind(l);if(\"#comment\"!==c)if(\"#text\"===c)this.addText(t,l);else if(t.isKind(\"annotation-xml\"))t.appendChild(this.factory.create(\"XML\").setXML(l,i));else{var u=t.appendChild(this.makeNode(l));0===u.arity&&i.childNodes(l).length&&(this.options.fixMisplacedChildren?this.addChildren(t,l):u.mError(\"There should not be children for \"+u.kind+\" nodes\",this.options.verify,!0))}}}catch(t){r={error:t}}finally{try{s&&!s.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}}},t.prototype.addText=function(t,e){var r=this.adaptor.value(e);(t.isToken||t.getProperty(\"isChars\"))&&t.arity?(t.isToken&&(r=s.translate(r),r=this.trimSpace(r)),t.appendChild(this.factory.create(\"text\").setText(r))):r.match(/\\S/)&&this.error('Unexpected text node \"'+r+'\"')},t.prototype.checkClass=function(t,e){var r,o,i=[];try{for(var n=a(this.filterClassList(this.adaptor.allClasses(e))),s=n.next();!s.done;s=n.next()){var l=s.value;\"MJX-\"===l.substr(0,4)?\"MJX-variant\"===l?t.setProperty(\"variantForm\",!0):\"MJX-TeXAtom\"!==l.substr(0,11)&&t.attributes.set(\"mathvariant\",this.fixCalligraphic(l.substr(3))):i.push(l)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}i.length&&t.attributes.set(\"class\",i.join(\" \"))},t.prototype.fixCalligraphic=function(t){return t.replace(/caligraphic/,\"calligraphic\")},t.prototype.texAtom=function(t,e,r){t.texClass=i.TEXCLASS[e],t.setProperty(\"texClass\",t.texClass),\"OP\"!==e||r||(t.setProperty(\"movesupsub\",!0),t.attributes.setInherited(\"movablelimits\",!0))},t.prototype.markMrows=function(t){if(t.isKind(\"mrow\")&&!t.isInferred&&t.childNodes.length>=2){var e=t.childNodes[0],r=t.childNodes[t.childNodes.length-1];e.isKind(\"mo\")&&e.attributes.get(\"fence\")&&r.isKind(\"mo\")&&r.attributes.get(\"fence\")&&(e.childNodes.length&&t.setProperty(\"open\",e.getText()),r.childNodes.length&&t.setProperty(\"close\",r.getText()))}},t.prototype.trimSpace=function(t){return t.replace(/[\\t\\n\\r]/g,\" \").replace(/^ +/,\"\").replace(/ +$/,\"\").replace(/  +/g,\" \")},t.prototype.error=function(t){throw new Error(t)},t.OPTIONS={MmlFactory:null,fixMisplacedChildren:!0,verify:o({},i.AbstractMmlNode.verifyDefaults),translateEntities:!0},t}();e.MathMLCompile=l},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractInputJax=MathJax._.core.InputJax.AbstractInputJax},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FunctionList=MathJax._.util.FunctionList.FunctionList},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractFindMath=MathJax._.core.FindMath.AbstractFindMath},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,e.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,e.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,e.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,e.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,e.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,e.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,e.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,e.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,e.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.options=MathJax._.util.Entities.options,e.entities=MathJax._.util.Entities.entities,e.add=MathJax._.util.Entities.add,e.remove=MathJax._.util.Entities.remove,e.translate=MathJax._.util.Entities.translate,e.numeric=MathJax._.util.Entities.numeric},function(t,e,r){\"use strict\";r.r(e);var o=r(4),a=r(0),i=r(1),n=r(2);Object(o.combineWithMathJax)({_:{input:{mathml_ts:a,mathml:{FindMathML:i,MathMLCompile:n}}}}),MathJax.startup&&(MathJax.startup.registerConstructor(\"mml\",a.MathML),MathJax.startup.useInput(\"mml\"))}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/action.js",
    "content": "!function(t){var e={};function a(o){if(e[o])return e[o].exports;var n=e[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=t,a.c=e,a.d=function(t,e,o){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},a.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(a.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var n in t)a.d(o,n,function(e){return t[e]}.bind(null,n));return o},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a(a.s=6)}([function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ActionConfiguration=e.ActionMethods=void 0;var o=a(2),n=a(3),i=a(4),r=a(5);e.ActionMethods={},e.ActionMethods.Macro=r.default.Macro,e.ActionMethods.Toggle=function(t,e){for(var a,o=[];\"\\\\endtoggle\"!==(a=t.GetArgument(e));)o.push(new n.default(a,t.stack.env,t.configuration).mml());t.Push(t.create(\"node\",\"maction\",o,{actiontype:\"toggle\"}))},e.ActionMethods.Mathtip=function(t,e){var a=t.ParseArg(e),o=t.ParseArg(e);t.Push(t.create(\"node\",\"maction\",[a,o],{actiontype:\"tooltip\"}))},new i.CommandMap(\"action-macros\",{toggle:\"Toggle\",mathtip:\"Mathtip\",texttip:[\"Macro\",\"\\\\mathtip{#1}{\\\\text{#2}}\",2]},e.ActionMethods),e.ActionConfiguration=o.Configuration.create(\"action\",{handler:{macro:[\"action-macros\"]}})},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexParser.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.base.BaseMethods.default},function(t,e,a){\"use strict\";a.r(e);var o=a(0),n=a(1);Object(o.combineWithMathJax)({_:{input:{tex:{action:{ActionConfiguration:n}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/all-packages.js",
    "content": "!function(t){var e={};function r(a){if(e[a])return e[a].exports;var n=e[a]={i:a,l:!1,exports:{}};return t[a].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.m=t,r.c=e,r.d=function(t,e,a){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},r.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var n in t)r.d(a,n,function(e){return t[e]}.bind(null,n));return a},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,\"a\",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p=\"\",r(r.s=78)}([function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.ParseUtil.default},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexParser.default},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,e.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,e.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,e.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,e.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,e.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,e.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,e.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,e.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,e.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.base.BaseMethods.default},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.ParseMethods.default},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NEW_OPS=e.AmsMethods=void 0;var a=r(3),n=r(4),o=r(6),i=r(5),s=r(2),c=r(12),l=r(8),u=r(7);e.AmsMethods={},e.AmsMethods.AmsEqnArray=function(t,e,r,n,o,i,s){var c=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),u=l.default.EqnArray(t,e,r,n,o,i,s);return a.default.setArrayAlign(u,c)},e.AmsMethods.AlignAt=function(t,r,n,o){var i,c,l=r.getName(),u=\"\",d=[];if(o||(c=t.GetBrackets(\"\\\\begin{\"+l+\"}\")),(i=t.GetArgument(\"\\\\begin{\"+l+\"}\")).match(/[^0-9]/))throw new s.default(\"PositiveIntegerArg\",\"Argument to %1 must me a positive integer\",\"\\\\begin{\"+l+\"}\");for(var p=parseInt(i,10);p>0;)u+=\"rl\",d.push(\"0em 0em\"),p--;var f=d.join(\" \");if(o)return e.AmsMethods.EqnArray(t,r,n,o,u,f);var m=e.AmsMethods.EqnArray(t,r,n,o,u,f);return a.default.setArrayAlign(m,c)},e.AmsMethods.Multline=function(t,e,r){t.Push(e),a.default.checkEqnEnv(t);var n=t.itemFactory.create(\"multline\",r,t.stack);return n.arraydef={displaystyle:!0,rowspacing:\".5em\",columnwidth:\"100%\",width:t.options.multlineWidth,side:t.options.tagSide,minlabelspacing:t.options.tagIndent},n},e.NEW_OPS=\"ams-declare-ops\",e.AmsMethods.HandleDeclareOp=function(t,r){var n=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",o=a.default.trimSpaces(t.GetArgument(r));\"\\\\\"===o.charAt(0)&&(o=o.substr(1));var i=t.GetArgument(r);i.match(/\\\\text/)||(i=i.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\")),t.configuration.handlers.retrieve(e.NEW_OPS).add(o,new c.Macro(o,e.AmsMethods.Macro,[\"\\\\mathop{\\\\rm \"+i+\"}\"+n]))},e.AmsMethods.HandleOperatorName=function(t,e){var r=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",n=a.default.trimSpaces(t.GetArgument(e));n.match(/\\\\text/)||(n=n.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\")),t.string=\"\\\\mathop{\\\\rm \"+n+\"}\"+r+\" \"+t.string.slice(t.i),t.i=0},e.AmsMethods.SkipLimits=function(t,e){var r=t.GetNext(),a=t.i;\"\\\\\"===r&&++t.i&&\"limits\"!==t.GetCS()&&(t.i=a)},e.AmsMethods.MultiIntegral=function(t,e,r){var a=t.GetNext();if(\"\\\\\"===a){var n=t.i;a=t.GetArgument(e),t.i=n,\"\\\\limits\"===a&&(r=\"\\\\idotsint\"===e?\"\\\\!\\\\!\\\\mathop{\\\\,\\\\,\"+r+\"}\":\"\\\\!\\\\!\\\\!\\\\mathop{\\\\,\\\\,\\\\,\"+r+\"}\")}t.string=r+\" \"+t.string.slice(t.i),t.i=0},e.AmsMethods.xArrow=function(t,e,r,o,s){var c={width:\"+\"+a.default.Em((o+s)/18),lspace:a.default.Em(o/18)},l=t.GetBrackets(e),d=t.ParseArg(e),p=t.create(\"token\",\"mo\",{stretchy:!0,texClass:u.TEXCLASS.REL},String.fromCodePoint(r)),f=t.create(\"node\",\"munderover\",[p]),m=t.create(\"node\",\"mpadded\",[d],c);if(n.default.setAttribute(m,\"voffset\",\".15em\"),n.default.setChild(f,f.over,m),l){var h=new i.default(l,t.stack.env,t.configuration).mml();m=t.create(\"node\",\"mpadded\",[h],c),n.default.setAttribute(m,\"voffset\",\"-.24em\"),n.default.setChild(f,f.under,m)}n.default.setProperty(f,\"subsupOK\",!0),t.Push(f)},e.AmsMethods.HandleShove=function(t,e,r){var a=t.stack.Top();if(\"multline\"!==a.kind)throw new s.default(\"CommandOnlyAllowedInEnv\",\"%1 only allowed in %2 environment\",t.currentCS,\"multline\");if(a.Size())throw new s.default(\"CommandAtTheBeginingOfLine\",\"%1 must come at the beginning of the line\",t.currentCS);a.setProperty(\"shove\",r)},e.AmsMethods.CFrac=function(t,e){var r=a.default.trimSpaces(t.GetBrackets(e,\"\")),c=t.GetArgument(e),l=t.GetArgument(e),u={l:o.TexConstant.Align.LEFT,r:o.TexConstant.Align.RIGHT,\"\":\"\"},d=new i.default(\"\\\\strut\\\\textstyle{\"+c+\"}\",t.stack.env,t.configuration).mml(),p=new i.default(\"\\\\strut\\\\textstyle{\"+l+\"}\",t.stack.env,t.configuration).mml(),f=t.create(\"node\",\"mfrac\",[d,p]);if(null==(r=u[r]))throw new s.default(\"IllegalAlign\",\"Illegal alignment specified in %1\",t.currentCS);r&&n.default.setProperties(f,{numalign:r,denomalign:r}),t.Push(f)},e.AmsMethods.Genfrac=function(t,e,r,o,i,c){null==r&&(r=t.GetDelimiterArg(e)),null==o&&(o=t.GetDelimiterArg(e)),null==i&&(i=t.GetArgument(e)),null==c&&(c=a.default.trimSpaces(t.GetArgument(e)));var l=t.ParseArg(e),u=t.ParseArg(e),d=t.create(\"node\",\"mfrac\",[l,u]);if(\"\"!==i&&n.default.setAttribute(d,\"linethickness\",i),(r||o)&&(n.default.setProperty(d,\"withDelims\",!0),d=a.default.fixedFence(t.configuration,r,d,o)),\"\"!==c){var p=parseInt(c,10),f=[\"D\",\"T\",\"S\",\"SS\"][p];if(null==f)throw new s.default(\"BadMathStyleFor\",\"Bad math style for %1\",t.currentCS);d=t.create(\"node\",\"mstyle\",[d]),\"D\"===f?n.default.setProperties(d,{displaystyle:!0,scriptlevel:0}):n.default.setProperties(d,{displaystyle:!1,scriptlevel:p-1})}t.Push(d)},e.AmsMethods.HandleTag=function(t,e){if(!t.tags.currentTag.taggable&&t.tags.env)throw new s.default(\"CommandNotAllowedInEnv\",\"%1 not allowed in %2 environment\",t.currentCS,t.tags.env);if(t.tags.currentTag.tag)throw new s.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);var r=t.GetStar(),n=a.default.trimSpaces(t.GetArgument(e));t.tags.tag(n,r)},e.AmsMethods.HandleNoTag=l.default.HandleNoTag,e.AmsMethods.HandleRef=l.default.HandleRef,e.AmsMethods.Macro=l.default.Macro,e.AmsMethods.Accent=l.default.Accent,e.AmsMethods.Tilde=l.default.Tilde,e.AmsMethods.Array=l.default.Array,e.AmsMethods.Spacer=l.default.Spacer,e.AmsMethods.NamedOp=l.default.NamedOp,e.AmsMethods.EqnArray=l.default.EqnArray},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Symbol=MathJax._.input.tex.Symbol.Symbol,e.Macro=MathJax._.input.tex.Symbol.Macro},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlStack=MathJax._.input.tex.StackItem.MmlStack,e.BaseItem=MathJax._.input.tex.StackItem.BaseItem},function(t,e,r){\"use strict\";var a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],a=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var a,n,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(a=o.next()).done;)i.push(a.value)}catch(t){n={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.RequireConfiguration=e.options=e.RequireMethods=e.RequireLoad=void 0;var i=r(0),s=r(1),c=r(2),l=r(20),u=r(28),d=r(76),p=r(77),f=r(10),m=l.MathJax.config;function h(t,e){var r,n=t.parseOptions.options.require,o=t.parseOptions.packageData.get(\"require\").required,s=e.substr(n.prefix.length);if(o.indexOf(s)<0){o.push(s),function(t,e){var r,n;void 0===e&&(e=[]);var o=t.parseOptions.options.require.prefix;try{for(var i=a(e),s=i.next();!s.done;s=i.next()){var c=s.value;c.substr(0,o.length)===o&&h(t,c)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}(t,d.CONFIG.dependencies[e]);var c=i.ConfigurationHandler.get(s);if(c){var l=m[e]||{};c.options&&1===Object.keys(c.options).length&&c.options[s]&&((r={})[s]=l,l=r),t.configuration.add(c,t,l);var u=t.parseOptions.packageData.get(\"require\").configured;c.preprocessors.length&&!u.has(s)&&(u.set(s,!0),p.mathjax.retryAfter(Promise.resolve()))}}}function g(t,e){var r=t.options.require,a=r.allow,n=(\"[\"===e.substr(0,1)?\"\":r.prefix)+e;if(!(a.hasOwnProperty(n)?a[n]:a.hasOwnProperty(e)?a[e]:r.defaultAllow))throw new c.default(\"BadRequire\",'Extension \"%1\" is now allowed to be loaded',n);u.Package.packages.has(n)?h(t.configuration.packageData.get(\"require\").jax,n):p.mathjax.retryAfter(d.Loader.load(n))}e.RequireLoad=g,e.RequireMethods={Require:function(t,e){var r=t.GetArgument(e);if(r.match(/[^_a-zA-Z0-9]/)||\"\"===r)throw new c.default(\"BadPackageName\",\"Argument for %1 is not a valid package name\",e);g(t,r)}},e.options={require:{allow:f.expandable({base:!1,\"all-packages\":!1}),defaultAllow:!0,prefix:\"tex\"}},new s.CommandMap(\"require\",{require:\"Require\"},e.RequireMethods),e.RequireConfiguration=i.Configuration.create(\"require\",{handler:{macro:[\"require\"]},config:function(t,e){e.parseOptions.packageData.set(\"require\",{jax:e,required:o(e.options.packages),configured:new Map});var r=e.parseOptions.options.require,a=r.prefix;if(a.match(/[^_a-zA-Z0-9]/))throw Error(\"Illegal characters used in \\\\require prefix\");d.CONFIG.paths[a]||(d.CONFIG.paths[a]=\"[mathjax]/input/tex/extensions\"),r.prefix=\"[\"+a+\"]/\"},options:e.options})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AllPackages=void 0,r(22),r(29),r(30),r(33),r(36),r(37),r(38),r(42),r(47),r(48),r(52),r(53),r(24),r(54),r(57),r(59),r(26),r(61),r(62),r(63),r(67),r(68),r(73),r(75),\"undefined\"!=typeof MathJax&&MathJax.loader&&MathJax.loader.preLoad(\"[tex]/action\",\"[tex]/ams\",\"[tex]/amscd\",\"[tex]/bbox\",\"[tex]/boldsymbol\",\"[tex]/braket\",\"[tex]/bussproofs\",\"[tex]/cancel\",\"[tex]/color\",\"[tex]/colorv2\",\"[tex]/enclose\",\"[tex]/extpfeil\",\"[tex]/html\",\"[tex]/mhchem\",\"[tex]/newcommand\",\"[tex]/noerrors\",\"[tex]/noundefined\",\"[tex]/physics\",\"[tex]/unicode\",\"[tex]/verb\",\"[tex]/configmacros\",\"[tex]/tagformat\",\"[tex]/textmacros\"),e.AllPackages=[\"base\",\"action\",\"ams\",\"amscd\",\"bbox\",\"boldsymbol\",\"braket\",\"bussproofs\",\"cancel\",\"color\",\"enclose\",\"extpfeil\",\"html\",\"mhchem\",\"newcommand\",\"noerrors\",\"noundefined\",\"unicode\",\"verb\",\"configmacros\",\"tagformat\",\"textmacros\"]},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StartItem=MathJax._.input.tex.base.BaseItems.StartItem,e.StopItem=MathJax._.input.tex.base.BaseItems.StopItem,e.OpenItem=MathJax._.input.tex.base.BaseItems.OpenItem,e.CloseItem=MathJax._.input.tex.base.BaseItems.CloseItem,e.PrimeItem=MathJax._.input.tex.base.BaseItems.PrimeItem,e.SubsupItem=MathJax._.input.tex.base.BaseItems.SubsupItem,e.OverItem=MathJax._.input.tex.base.BaseItems.OverItem,e.LeftItem=MathJax._.input.tex.base.BaseItems.LeftItem,e.RightItem=MathJax._.input.tex.base.BaseItems.RightItem,e.BeginItem=MathJax._.input.tex.base.BaseItems.BeginItem,e.EndItem=MathJax._.input.tex.base.BaseItems.EndItem,e.StyleItem=MathJax._.input.tex.base.BaseItems.StyleItem,e.PositionItem=MathJax._.input.tex.base.BaseItems.PositionItem,e.CellItem=MathJax._.input.tex.base.BaseItems.CellItem,e.MmlItem=MathJax._.input.tex.base.BaseItems.MmlItem,e.FnItem=MathJax._.input.tex.base.BaseItems.FnItem,e.NotItem=MathJax._.input.tex.base.BaseItems.NotItem,e.DotsItem=MathJax._.input.tex.base.BaseItems.DotsItem,e.ArrayItem=MathJax._.input.tex.base.BaseItems.ArrayItem,e.EqnArrayItem=MathJax._.input.tex.base.BaseItems.EqnArrayItem,e.EquationItem=MathJax._.input.tex.base.BaseItems.EquationItem},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Label=MathJax._.input.tex.Tags.Label,e.TagInfo=MathJax._.input.tex.Tags.TagInfo,e.AbstractTags=MathJax._.input.tex.Tags.AbstractTags,e.NoTags=MathJax._.input.tex.Tags.NoTags,e.AllTags=MathJax._.input.tex.Tags.AllTags,e.TagsFactory=MathJax._.input.tex.Tags.TagsFactory},function(t,e,r){\"use strict\";var a,n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var a,n,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(a=o.next()).done;)i.push(a.value)}catch(t){n={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],a=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.clearDocument=e.saveDocument=e.makeBsprAttributes=e.removeProperty=e.getProperty=e.setProperty=e.balanceRules=void 0;var i=r(4),s=r(3),c=null,l=null,u=function(t){return l.root=t,c.outputJax.getBBox(l,c).w},d=function(t){for(var e=0;t&&!i.default.isType(t,\"mtable\");){if(i.default.isType(t,\"text\"))return null;i.default.isType(t,\"mrow\")?(t=t.childNodes[0],e=0):(t=t.parent.childNodes[e],e++)}return t},p=function(t,e){return t.childNodes[\"up\"===e?1:0].childNodes[0].childNodes[0].childNodes[0].childNodes[0]},f=function(t,e){return t.childNodes[e].childNodes[0].childNodes[0]},m=function(t){return f(t,0)},h=function(t){return f(t,t.childNodes.length-1)},g=function(t,e){return t.childNodes[\"up\"===e?0:1].childNodes[0].childNodes[0].childNodes[0]},v=function(t){for(;t&&!i.default.isType(t,\"mtd\");)t=t.parent;return t},y=function(t){return t.parent.childNodes[t.parent.childNodes.indexOf(t)+1]},x=function(t){for(;t&&null==e.getProperty(t,\"inference\");)t=t.parent;return t},b=function(t,e,r){void 0===r&&(r=!1);var a=0;if(t===e)return a;if(t!==e.parent){var n=t.childNodes,o=r?n.length-1:0;i.default.isType(n[o],\"mspace\")&&(a+=u(n[o])),t=e.parent}if(t===e)return a;var s=t.childNodes,c=r?s.length-1:0;return s[c]!==e&&(a+=u(s[c])),a},_=function(t,r){void 0===r&&(r=!1);var a=d(t),n=g(a,e.getProperty(a,\"inferenceRule\"));return b(t,a,r)+(u(a)-u(n))/2},M=function(t,r,a,n){if(void 0===n&&(n=!1),e.getProperty(r,\"inferenceRule\")||e.getProperty(r,\"labelledRule\")){var o=t.nodeFactory.create(\"node\",\"mrow\");r.parent.replaceChild(o,r),o.setChildren([r]),A(r,o),r=o}var c=n?r.childNodes.length-1:0,l=r.childNodes[c];i.default.isType(l,\"mspace\")?i.default.setAttribute(l,\"width\",s.default.Em(s.default.dimen2em(i.default.getAttribute(l,\"width\"))+a)):(l=t.nodeFactory.create(\"node\",\"mspace\",[],{width:s.default.Em(a)}),n?r.appendChild(l):(l.parent=r,r.childNodes.unshift(l)))},A=function(t,r){[\"inference\",\"proof\",\"maxAdjust\",\"labelledRule\"].forEach((function(a){var n=e.getProperty(t,a);null!=n&&(e.setProperty(r,a,n),e.removeProperty(t,a))}))},w=function(t,r,a,n,o){var i=t.nodeFactory.create(\"node\",\"mspace\",[],{width:s.default.Em(o)});if(\"left\"===n){var c=r.childNodes[a].childNodes[0];i.parent=c,c.childNodes.unshift(i)}else r.childNodes[a].appendChild(i);e.setProperty(r.parent,\"sequentAdjust_\"+n,o)},C=function(t,r){for(var a=r.pop();r.length;){var o=r.pop(),i=n(S(a,o),2),s=i[0],c=i[1];e.getProperty(a.parent,\"axiom\")&&(w(t,s<0?a:o,0,\"left\",Math.abs(s)),w(t,c<0?a:o,2,\"right\",Math.abs(c))),a=o}},S=function(t,e){var r=u(t.childNodes[2]),a=u(e.childNodes[2]);return[u(t.childNodes[0])-u(e.childNodes[0]),r-a]};e.balanceRules=function(t){var r,a;l=new t.document.options.MathItem(\"\",null,t.math.display);var n=t.data;!function(t){var r=t.nodeLists.sequent;if(r)for(var a=r.length-1,n=void 0;n=r[a];a--)if(e.getProperty(n,\"sequentProcessed\"))e.removeProperty(n,\"sequentProcessed\");else{var o=[],i=x(n);if(1===e.getProperty(i,\"inference\")){for(o.push(n);1===e.getProperty(i,\"inference\");){i=d(i);var s=m(p(i,e.getProperty(i,\"inferenceRule\"))),c=e.getProperty(s,\"inferenceRule\")?g(s,e.getProperty(s,\"inferenceRule\")):s;e.getProperty(c,\"sequent\")&&(n=c.childNodes[0],o.push(n),e.setProperty(n,\"sequentProcessed\",!0)),i=s}C(t,o)}}}(n);var i=n.nodeLists.inference||[];try{for(var s=o(i),c=s.next();!c.done;c=s.next()){var u=c.value,f=e.getProperty(u,\"proof\"),A=d(u),w=p(A,e.getProperty(A,\"inferenceRule\")),S=m(w);if(e.getProperty(S,\"inference\")){var P=_(S);if(P){M(n,S,-P);var k=b(u,A,!1);M(n,u,P-k)}}var O=h(w);if(null!=e.getProperty(O,\"inference\")){var T=_(O,!0);M(n,O,-T,!0);var q=b(u,A,!0),E=e.getProperty(u,\"maxAdjust\");null!=E&&(T=Math.max(T,E));var I=void 0;if(!f&&(I=v(u))){var N=y(I);if(N){var B=n.nodeFactory.create(\"node\",\"mspace\",[],{width:T-q+\"em\"});N.appendChild(B),u.removeProperty(\"maxAdjust\")}else{var G=x(I);G&&(T=e.getProperty(G,\"maxAdjust\")?Math.max(e.getProperty(G,\"maxAdjust\"),T):T,e.setProperty(G,\"maxAdjust\",T))}}else M(n,e.getProperty(u,\"proof\")?u:u.parent,T-q,!0)}}}catch(t){r={error:t}}finally{try{c&&!c.done&&(a=s.return)&&a.call(s)}finally{if(r)throw r.error}}};var P=((a={}).bspr_maxAdjust=!0,a);e.setProperty=function(t,e,r){i.default.setProperty(t,\"bspr_\"+e,r)},e.getProperty=function(t,e){return i.default.getProperty(t,\"bspr_\"+e)},e.removeProperty=function(t,e){t.removeProperty(\"bspr_\"+e)},e.makeBsprAttributes=function(t){t.data.root.walkTree((function(t,e){var r=[];t.getPropertyNames().forEach((function(e){!P[e]&&e.match(RegExp(\"^bspr_\"))&&r.push(e+\":\"+t.getProperty(e))})),r.length&&i.default.setAttribute(t,\"semantics\",r.join(\";\"))}))},e.saveDocument=function(t){if(!(\"getBBox\"in(c=t.document).outputJax))throw Error(\"The bussproofs extension requires an output jax with a getBBox() method\")},e.clearDocument=function(t){c=null}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a,n=r(3),o=r(2),i=r(12);!function(t){function e(t,e){return t.string.substr(t.i,e.length)!==e||e.match(/\\\\[a-z]+$/i)&&t.string.charAt(t.i+e.length).match(/[a-z]/i)?0:(t.i+=e.length,1)}t.disassembleSymbol=function(t,e){var r=[t,e.char];if(e.attributes)for(var a in e.attributes)r.push(a),r.push(e.attributes[a]);return r},t.assembleSymbol=function(t){for(var e=t[0],r=t[1],a={},n=2;n<t.length;n+=2)a[t[n]]=t[n+1];return new i.Symbol(e,r,a)},t.GetCSname=function(t,e){if(\"\\\\\"!==t.GetNext())throw new o.default(\"MissingCS\",\"%1 must be followed by a control sequence\",e);return n.default.trimSpaces(t.GetArgument(e)).substr(1)},t.GetTemplate=function(t,e,r){for(var a=t.GetNext(),n=[],i=0,s=t.i;t.i<t.string.length;){if(\"#\"===(a=t.GetNext())){if(s!==t.i&&(n[i]=t.string.substr(s,t.i-s)),!(a=t.string.charAt(++t.i)).match(/^[1-9]$/))throw new o.default(\"CantUseHash2\",\"Illegal use of # in template for %1\",r);if(parseInt(a)!==++i)throw new o.default(\"SequentialParam\",\"Parameters for %1 must be numbered sequentially\",r);s=t.i+1}else if(\"{\"===a)return s!==t.i&&(n[i]=t.string.substr(s,t.i-s)),n.length>0?[i.toString()].concat(n):i;t.i++}throw new o.default(\"MissingReplacementString\",\"Missing replacement string for definition of %1\",e)},t.GetParameter=function(t,r,a){if(null==a)return t.GetArgument(r);for(var n=t.i,i=0,s=0;t.i<t.string.length;){var c=t.string.charAt(t.i);if(\"{\"===c)t.i===n&&(s=1),t.GetArgument(r),i=t.i-n;else{if(e(t,a))return s&&(n++,i-=2),t.string.substr(n,i);if(\"\\\\\"===c){t.i++,i++,s=0;var l=t.string.substr(t.i).match(/[a-z]+|./i);l&&(t.i+=l[0].length,i=t.i-n)}else t.i++,i++,s=0}}throw new o.default(\"RunawayArgument\",\"Runaway argument for %1?\",r)},t.MatchParam=e,t.addDelimiter=function(e,r,a,n){e.configuration.handlers.retrieve(t.NEW_DELIMITER).add(r,new i.Symbol(r,a,n))},t.addMacro=function(e,r,a,n,o){void 0===o&&(o=\"\"),e.configuration.handlers.retrieve(t.NEW_COMMAND).add(r,new i.Macro(o||r,a,n))},t.addEnvironment=function(e,r,a,n){e.configuration.handlers.retrieve(t.NEW_ENVIRONMENT).add(r,new i.Macro(r,a,n))},t.NEW_DELIMITER=\"new-Delimiter\",t.NEW_COMMAND=\"new-Command\",t.NEW_ENVIRONMENT=\"new-Environment\"}(a||(a={})),e.default=a},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,r){\"use strict\";var a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var a,n,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(a=o.next()).done;)i.push(a.value)}catch(t){n={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i},n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],a=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutoloadConfiguration=void 0;var o=r(0),i=r(1),s=r(12),c=r(14),l=r(28),u=r(10);function d(t,e,r,o){var i,s,u,d;if(l.Package.packages.has(t.options.require.prefix+r)){var m=t.options.autoload[r],h=a(2===m.length&&Array.isArray(m[0])?m:[m,[]],2),g=h[0],v=h[1];try{for(var y=n(g),x=y.next();!x.done;x=y.next()){var b=x.value;p.remove(b)}}catch(t){i={error:t}}finally{try{x&&!x.done&&(s=y.return)&&s.call(y)}finally{if(i)throw i.error}}try{for(var _=n(v),M=_.next();!M.done;M=_.next()){var A=M.value;f.remove(A)}}catch(t){u={error:t}}finally{try{M&&!M.done&&(d=_.return)&&d.call(_)}finally{if(u)throw u.error}}t.string=(o?e:\"\\\\begin{\"+e.slice(1)+\"}\")+t.string.slice(t.i),t.i=0}c.RequireLoad(t,r)}var p=new i.CommandMap(\"autoload-macros\",{},{}),f=new i.CommandMap(\"autoload-environments\",{},{});e.AutoloadConfiguration=o.Configuration.create(\"autoload\",{handler:{macro:[\"autoload-macros\"],environment:[\"autoload-environments\"]},options:{autoload:u.expandable({action:[\"toggle\",\"mathtip\",\"texttip\"],amscd:[[],[\"CD\"]],bbox:[\"bbox\"],boldsymbol:[\"boldsymbol\"],braket:[\"bra\",\"ket\",\"braket\",\"set\",\"Bra\",\"Ket\",\"Braket\",\"Set\",\"ketbra\",\"Ketbra\"],bussproofs:[[],[\"prooftree\"]],cancel:[\"cancel\",\"bcancel\",\"xcancel\",\"cancelto\"],color:[\"color\",\"definecolor\",\"textcolor\",\"colorbox\",\"fcolorbox\"],enclose:[\"enclose\"],extpfeil:[\"xtwoheadrightarrow\",\"xtwoheadleftarrow\",\"xmapsto\",\"xlongequal\",\"xtofrom\",\"Newextarrow\"],html:[\"href\",\"class\",\"style\",\"cssId\"],mhchem:[\"ce\",\"pu\"],newcommand:[\"newcommand\",\"renewcommand\",\"newenvironment\",\"renewenvironment\",\"def\",\"let\"],unicode:[\"unicode\"],verb:[\"verb\"]})},config:function(t,e){var r,o,i,l,u,m,h=e.parseOptions,g=h.handlers.get(\"macro\"),v=h.handlers.get(\"environment\"),y=h.options.autoload;h.packageData.set(\"autoload\",{Autoload:d});try{for(var x=n(Object.keys(y)),b=x.next();!b.done;b=x.next()){var _=b.value,M=y[_],A=a(2===M.length&&Array.isArray(M[0])?M:[M,[]],2),w=A[0],C=A[1];try{for(var S=(i=void 0,n(w)),P=S.next();!P.done;P=S.next()){var k=P.value;g.lookup(k)&&\"color\"!==k||p.add(k,new s.Macro(k,d,[_,!0]))}}catch(t){i={error:t}}finally{try{P&&!P.done&&(l=S.return)&&l.call(S)}finally{if(i)throw i.error}}try{for(var O=(u=void 0,n(C)),T=O.next();!T.done;T=O.next()){var q=T.value;v.lookup(q)||f.add(q,new s.Macro(q,d,[_,!1]))}}catch(t){u={error:t}}finally{try{T&&!T.done&&(m=O.return)&&m.call(O)}finally{if(u)throw u.error}}}}catch(t){r={error:t}}finally{try{b&&!b.done&&(o=x.return)&&o.call(x)}finally{if(r)throw r.error}}h.packageData.get(\"require\")||c.RequireConfiguration.config(t,e)},init:function(t){t.options.require||u.defaultOptions(t.options,c.RequireConfiguration.options)},priority:10})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Other=MathJax._.input.tex.base.BaseConfiguration.Other,e.BaseTags=MathJax._.input.tex.base.BaseConfiguration.BaseTags,e.BaseConfiguration=MathJax._.input.tex.base.BaseConfiguration.BaseConfiguration},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NodeFactory=MathJax._.input.tex.NodeFactory.NodeFactory},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EncloseConfiguration=e.EncloseMethods=e.ENCLOSE_OPTIONS=void 0;var a=r(0),n=r(1),o=r(3);e.ENCLOSE_OPTIONS={\"data-arrowhead\":1,color:1,mathcolor:1,background:1,mathbackground:1,\"data-padding\":1,\"data-thickness\":1},e.EncloseMethods={},e.EncloseMethods.Enclose=function(t,r){var a=t.GetArgument(r).replace(/,/g,\" \"),n=t.GetBrackets(r,\"\"),i=t.ParseArg(r),s=o.default.keyvalOptions(n,e.ENCLOSE_OPTIONS);s.notation=a,t.Push(t.create(\"node\",\"menclose\",[i],s))},new n.CommandMap(\"enclose\",{enclose:\"Enclose\"},e.EncloseMethods),e.EncloseConfiguration=a.Configuration.create(\"enclose\",{handler:{macro:[\"enclose\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(2),n=r(1),o=r(8),i=r(3),s=r(19),c={NewCommand:function(t,e){var r=i.default.trimSpaces(t.GetArgument(e)),n=t.GetBrackets(e),o=t.GetBrackets(e),l=t.GetArgument(e);if(\"\\\\\"===r.charAt(0)&&(r=r.substr(1)),!r.match(/^(.|[a-z]+)$/i))throw new a.default(\"IllegalControlSequenceName\",\"Illegal control sequence name for %1\",e);if(n&&!(n=i.default.trimSpaces(n)).match(/^[0-9]+$/))throw new a.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",e);s.default.addMacro(t,r,c.Macro,[l,n,o])},NewEnvironment:function(t,e){var r=i.default.trimSpaces(t.GetArgument(e)),n=t.GetBrackets(e),o=t.GetBrackets(e),l=t.GetArgument(e),u=t.GetArgument(e);if(n&&!(n=i.default.trimSpaces(n)).match(/^[0-9]+$/))throw new a.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",e);s.default.addEnvironment(t,r,c.BeginEnv,[!0,l,u,n,o])},MacroDef:function(t,e){var r=s.default.GetCSname(t,e),a=s.default.GetTemplate(t,e,\"\\\\\"+r),n=t.GetArgument(e);a instanceof Array?s.default.addMacro(t,r,c.MacroWithTemplate,[n].concat(a)):s.default.addMacro(t,r,c.Macro,[n,a])},Let:function(t,e){var r=s.default.GetCSname(t,e),a=t.GetNext();\"=\"===a&&(t.i++,a=t.GetNext());var o=t.configuration.handlers;if(\"\\\\\"!==a){t.i++;var i=o.get(\"delimiter\").lookup(a);i?s.default.addDelimiter(t,\"\\\\\"+r,i.char,i.attributes):s.default.addMacro(t,r,c.Macro,[a])}else{e=s.default.GetCSname(t,e);var l=o.get(\"delimiter\").lookup(\"\\\\\"+e);if(l)return void s.default.addDelimiter(t,\"\\\\\"+r,l.char,l.attributes);var u=o.get(\"macro\").applicable(e);if(!u)return;if(u instanceof n.MacroMap){var d=u.lookup(e);return void s.default.addMacro(t,r,d.func,d.args,d.symbol)}l=u.lookup(e);var p=s.default.disassembleSymbol(r,l);s.default.addMacro(t,r,(function(t,e){for(var r=[],a=2;a<arguments.length;a++)r[a-2]=arguments[a];var n=s.default.assembleSymbol(r);return u.parser(t,n)}),p)}},MacroWithTemplate:function(t,e,r,n){for(var o=[],c=4;c<arguments.length;c++)o[c-4]=arguments[c];var l=parseInt(n,10);if(l){var u=[];if(t.GetNext(),o[0]&&!s.default.MatchParam(t,o[0]))throw new a.default(\"MismatchUseDef\",\"Use of %1 doesn't match its definition\",e);for(var d=0;d<l;d++)u.push(s.default.GetParameter(t,e,o[d+1]));r=i.default.substituteArgs(t,u,r)}if(t.string=i.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new a.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is here a recursive macro call?\")},BeginEnv:function(t,e,r,a,n,o){if(e.getProperty(\"end\")&&t.stack.env.closing===e.getName()){delete t.stack.env.closing;var s=t.string.slice(t.i);return t.string=a,t.i=0,t.Parse(),t.string=s,t.i=0,t.itemFactory.create(\"end\").setProperty(\"name\",e.getName())}if(n){var c=[];if(null!=o){var l=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\");c.push(null==l?o:l)}for(var u=c.length;u<n;u++)c.push(t.GetArgument(\"\\\\begin{\"+e.getName()+\"}\"));r=i.default.substituteArgs(t,c,r),a=i.default.substituteArgs(t,[],a)}return t.string=i.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,t.itemFactory.create(\"beginEnv\").setProperty(\"name\",e.getName())}};c.Macro=o.default.Macro,e.default=c},function(t,e,r){\"use strict\";var a;Object.defineProperty(e,\"__esModule\",{value:!0}),e.NewcommandConfiguration=void 0;var n=r(0),o=r(55),i=r(19);r(56);var s=r(9),c=r(1);e.NewcommandConfiguration=n.Configuration.create(\"newcommand\",{handler:{macro:[\"Newcommand-macros\"]},items:(a={},a[o.BeginEnvItem.prototype.kind]=o.BeginEnvItem,a),options:{maxMacros:1e3},init:function(t){new c.DelimiterMap(i.default.NEW_DELIMITER,s.default.delimiter,{}),new c.CommandMap(i.default.NEW_COMMAND,{},{}),new c.EnvironmentMap(i.default.NEW_ENVIRONMENT,s.default.environment,{},{}),t.append(n.Configuration.local({handler:{character:[],delimiter:[i.default.NEW_DELIMITER],macro:[i.default.NEW_DELIMITER,i.default.NEW_COMMAND],environment:[i.default.NEW_ENVIRONMENT]},priority:-1}))}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextMacrosMethods=void 0;var a=r(5),n=r(71),o=r(8);e.TextMacrosMethods={Comment:function(t,e){for(;t.i<t.string.length&&\"\\n\"!==t.string.charAt(t.i);)t.i++;t.i++},Math:function(t,e){t.saveText();for(var r,n,o=t.i,i=0;n=t.GetNext();)switch(r=t.i++,n){case\"\\\\\":\")\"===t.GetCS()&&(n=\"\\\\(\");case\"$\":if(0===i&&e===n){var s=t.texParser.configuration,c=new a.default(t.string.substr(o,r-o),t.stack.env,s).mml();return void t.PushMath(c)}break;case\"{\":i++;break;case\"}\":0===i&&t.Error(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"),i--}t.Error(\"MathNotTerminated\",\"Math-mode is not properly terminated\")},MathModeOnly:function(t,e){t.Error(\"MathModeOnly\",\"'%1' allowed only in math mode\",e)},Misplaced:function(t,e){t.Error(\"Misplaced\",\"'%1' can not be used here\",e)},OpenBrace:function(t,e){var r=t.stack.env;t.envStack.push(r),t.stack.env=Object.assign({},r)},CloseBrace:function(t,e){t.envStack.length?(t.saveText(),t.stack.env=t.envStack.pop()):t.Error(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\")},OpenQuote:function(t,e){t.string.charAt(t.i)===e?(t.text+=\"\\u201c\",t.i++):t.text+=\"\\u2018\"},CloseQuote:function(t,e){t.string.charAt(t.i)===e?(t.text+=\"\\u201d\",t.i++):t.text+=\"\\u2019\"},Tilde:function(t,e){t.text+=\"\\xa0\"},Space:function(t,e){for(t.text+=\" \";t.GetNext().match(/\\s/);)t.i++},SelfQuote:function(t,e){t.text+=e.substr(1)},Insert:function(t,e,r){t.text+=r},Accent:function(t,e,r){var a=t.ParseArg(name),n=t.create(\"token\",\"mo\",{},r);t.addAttributes(n),t.Push(t.create(\"node\",\"mover\",[a,n]))},Emph:function(t,e){var r=\"-tex-mathit\"===t.stack.env.mathvariant?\"normal\":\"-tex-mathit\";t.Push(t.ParseTextArg(e,{mathvariant:r}))},SetFont:function(t,e,r){t.saveText(),t.stack.env.mathvariant=r},SetSize:function(t,e,r){t.saveText(),t.stack.env.mathsize=r},CheckAutoload:function(t,e){var r=t.configuration.packageData.get(\"autoload\"),a=t.texParser;e=e.slice(1);var o=a.lookup(\"macro\",e);if(!o||r&&o._func===r.Autoload){if(a.parse(\"macro\",[a,e]),!o)return;n.retryAfter(Promise.resolve())}a.parse(\"macro\",[t,e])},Macro:o.default.Macro,Spacer:o.default.Spacer,Hskip:o.default.Hskip,rule:o.default.rule,Rule:o.default.Rule,HandleRef:o.default.HandleRef}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PackageError=MathJax._.components.package.PackageError,e.Package=MathJax._.components.package.Package},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ActionConfiguration=e.ActionMethods=void 0;var a=r(0),n=r(5),o=r(1),i=r(8);e.ActionMethods={},e.ActionMethods.Macro=i.default.Macro,e.ActionMethods.Toggle=function(t,e){for(var r,a=[];\"\\\\endtoggle\"!==(r=t.GetArgument(e));)a.push(new n.default(r,t.stack.env,t.configuration).mml());t.Push(t.create(\"node\",\"maction\",a,{actiontype:\"toggle\"}))},e.ActionMethods.Mathtip=function(t,e){var r=t.ParseArg(e),a=t.ParseArg(e);t.Push(t.create(\"node\",\"maction\",[r,a],{actiontype:\"tooltip\"}))},new o.CommandMap(\"action-macros\",{toggle:\"Toggle\",mathtip:\"Mathtip\",texttip:[\"Macro\",\"\\\\mathtip{#1}{\\\\text{#2}}\",2]},e.ActionMethods),e.ActionConfiguration=a.Configuration.create(\"action\",{handler:{macro:[\"action-macros\"]}})},function(t,e,r){\"use strict\";var a,n,o=this&&this.__extends||(a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AmsConfiguration=e.AmsTags=void 0;var i=r(0),s=r(31),c=r(17),l=r(11);r(32);var u=r(1),d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(c.AbstractTags);e.AmsTags=d;e.AmsConfiguration=i.Configuration.create(\"ams\",{handler:{delimiter:[\"AMSsymbols-delimiter\",\"AMSmath-delimiter\"],macro:[\"AMSsymbols-mathchar0mi\",\"AMSsymbols-mathchar0m0\",\"AMSsymbols-delimiter\",\"AMSsymbols-macros\",\"AMSmath-mathchar0mo\",\"AMSmath-macros\",\"AMSmath-delimiter\"],environment:[\"AMSmath-environment\"]},items:(n={},n[s.MultlineItem.prototype.kind]=s.MultlineItem,n),tags:{ams:d},init:function(t){new u.CommandMap(l.NEW_OPS,{},{}),t.append(i.Configuration.local({handler:{macro:[l.NEW_OPS]},priority:-1}))}})},function(t,e,r){\"use strict\";var a,n=this&&this.__extends||(a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.MultlineItem=void 0;var o=r(16),i=r(3),s=r(4),c=r(2),l=r(6),u=function(t){function e(e){for(var r=[],a=1;a<arguments.length;a++)r[a-1]=arguments[a];var n=t.call(this,e)||this;return n.factory.configuration.tags.start(\"multline\",!0,r[0]),n}return n(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"multline\"},enumerable:!1,configurable:!0}),e.prototype.EndEntry=function(){this.table.length&&i.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.getProperty(\"shove\"),e=this.create(\"node\",\"mtd\",this.nodes,t?{columnalign:t}:{});this.setProperty(\"shove\",null),this.row.push(e),this.Clear()},e.prototype.EndRow=function(){if(1!==this.row.length)throw new c.default(\"MultlineRowsOneCol\",\"The rows within the %1 environment must have exactly one column\",\"multline\");var t=this.create(\"node\",\"mtr\",this.row);this.table.push(t),this.row=[]},e.prototype.EndTable=function(){if(t.prototype.EndTable.call(this),this.table.length){var e=this.table.length-1,r=-1;s.default.getAttribute(s.default.getChildren(this.table[0])[0],\"columnalign\")||s.default.setAttribute(s.default.getChildren(this.table[0])[0],\"columnalign\",l.TexConstant.Align.LEFT),s.default.getAttribute(s.default.getChildren(this.table[e])[0],\"columnalign\")||s.default.setAttribute(s.default.getChildren(this.table[e])[0],\"columnalign\",l.TexConstant.Align.RIGHT);var a=this.factory.configuration.tags.getTag();if(a){r=this.arraydef.side===l.TexConstant.Align.LEFT?0:this.table.length-1;var n=this.table[r],o=this.create(\"node\",\"mlabeledtr\",[a].concat(s.default.getChildren(n)));s.default.copyAttributes(n,o),this.table[r]=o}}this.factory.configuration.tags.end()},e}(o.ArrayItem);e.MultlineItem=u},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(11),n=r(1),o=r(6),i=r(9),s=r(3),c=r(7),l=function(t){for(var e=[],r=0,a=t.length;r<a;r++)e[r]=s.default.Em(t[r]);return e.join(\" \")};new n.CharacterMap(\"AMSmath-mathchar0mo\",i.default.mathchar0mo,{iiiint:[\"\\u2a0c\",{texClass:c.TEXCLASS.OP}]}),new n.CommandMap(\"AMSmath-macros\",{mathring:[\"Accent\",\"02DA\"],nobreakspace:\"Tilde\",negmedspace:[\"Spacer\",o.TexConstant.Length.NEGATIVEMEDIUMMATHSPACE],negthickspace:[\"Spacer\",o.TexConstant.Length.NEGATIVETHICKMATHSPACE],idotsint:[\"MultiIntegral\",\"\\\\int\\\\cdots\\\\int\"],dddot:[\"Accent\",\"20DB\"],ddddot:[\"Accent\",\"20DC\"],sideset:[\"Macro\",\"\\\\mathop{\\\\mathop{\\\\rlap{\\\\phantom{#3}}}\\\\nolimits#1\\\\!\\\\mathop{#3}\\\\nolimits#2}\",3],boxed:[\"Macro\",\"\\\\fbox{$\\\\displaystyle{#1}$}\",1],tag:\"HandleTag\",notag:\"HandleNoTag\",eqref:[\"HandleRef\",!0],substack:[\"Macro\",\"\\\\begin{subarray}{c}#1\\\\end{subarray}\",1],injlim:[\"NamedOp\",\"inj&thinsp;lim\"],projlim:[\"NamedOp\",\"proj&thinsp;lim\"],varliminf:[\"Macro\",\"\\\\mathop{\\\\underline{\\\\mmlToken{mi}{lim}}}\"],varlimsup:[\"Macro\",\"\\\\mathop{\\\\overline{\\\\mmlToken{mi}{lim}}}\"],varinjlim:[\"Macro\",\"\\\\mathop{\\\\underrightarrow{\\\\mmlToken{mi}{lim}}}\"],varprojlim:[\"Macro\",\"\\\\mathop{\\\\underleftarrow{\\\\mmlToken{mi}{lim}}}\"],DeclareMathOperator:\"HandleDeclareOp\",operatorname:\"HandleOperatorName\",SkipLimits:\"SkipLimits\",genfrac:\"Genfrac\",frac:[\"Genfrac\",\"\",\"\",\"\",\"\"],tfrac:[\"Genfrac\",\"\",\"\",\"\",\"1\"],dfrac:[\"Genfrac\",\"\",\"\",\"\",\"0\"],binom:[\"Genfrac\",\"(\",\")\",\"0\",\"\"],tbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"1\"],dbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"0\"],cfrac:\"CFrac\",shoveleft:[\"HandleShove\",o.TexConstant.Align.LEFT],shoveright:[\"HandleShove\",o.TexConstant.Align.RIGHT],xrightarrow:[\"xArrow\",8594,5,6],xleftarrow:[\"xArrow\",8592,7,3]},a.AmsMethods),new n.EnvironmentMap(\"AMSmath-environment\",i.default.environment,{\"eqnarray*\":[\"EqnArray\",null,!1,!0,\"rcl\",\"0 \"+o.TexConstant.Length.THICKMATHSPACE,\".5em\"],align:[\"EqnArray\",null,!0,!0,\"rlrlrlrlrlrl\",l([0,2,0,2,0,2,0,2,0,2,0])],\"align*\":[\"EqnArray\",null,!1,!0,\"rlrlrlrlrlrl\",l([0,2,0,2,0,2,0,2,0,2,0])],multline:[\"Multline\",null,!0],\"multline*\":[\"Multline\",null,!1],split:[\"EqnArray\",null,!1,!1,\"rl\",l([0])],gather:[\"EqnArray\",null,!0,!0,\"c\"],\"gather*\":[\"EqnArray\",null,!1,!0,\"c\"],alignat:[\"AlignAt\",null,!0,!0],\"alignat*\":[\"AlignAt\",null,!1,!0],alignedat:[\"AlignAt\",null,!1,!1],aligned:[\"AmsEqnArray\",null,null,null,\"rlrlrlrlrlrl\",l([0,2,0,2,0,2,0,2,0,2,0]),\".5em\",\"D\"],gathered:[\"AmsEqnArray\",null,null,null,\"c\",null,\".5em\",\"D\"],subarray:[\"Array\",null,null,null,null,l([0]),\"0.1em\",\"S\",1],smallmatrix:[\"Array\",null,null,null,\"c\",l([1/3]),\".2em\",\"S\",1],matrix:[\"Array\",null,null,null,\"c\"],pmatrix:[\"Array\",null,\"(\",\")\",\"c\"],bmatrix:[\"Array\",null,\"[\",\"]\",\"c\"],Bmatrix:[\"Array\",null,\"\\\\{\",\"\\\\}\",\"c\"],vmatrix:[\"Array\",null,\"\\\\vert\",\"\\\\vert\",\"c\"],Vmatrix:[\"Array\",null,\"\\\\Vert\",\"\\\\Vert\",\"c\"],cases:[\"Array\",null,\"\\\\{\",\".\",\"ll\",null,\".2em\",\"T\"]},a.AmsMethods),new n.DelimiterMap(\"AMSmath-delimiter\",i.default.delimiter,{\"\\\\lvert\":[\"|\",{texClass:c.TEXCLASS.OPEN}],\"\\\\rvert\":[\"|\",{texClass:c.TEXCLASS.CLOSE}],\"\\\\lVert\":[\"\\u2016\",{texClass:c.TEXCLASS.OPEN}],\"\\\\rVert\":[\"\\u2016\",{texClass:c.TEXCLASS.CLOSE}]}),new n.CharacterMap(\"AMSsymbols-mathchar0mi\",i.default.mathchar0mi,{digamma:\"\\u03dd\",varkappa:\"\\u03f0\",varGamma:[\"\\u0393\",{mathvariant:o.TexConstant.Variant.ITALIC}],varDelta:[\"\\u0394\",{mathvariant:o.TexConstant.Variant.ITALIC}],varTheta:[\"\\u0398\",{mathvariant:o.TexConstant.Variant.ITALIC}],varLambda:[\"\\u039b\",{mathvariant:o.TexConstant.Variant.ITALIC}],varXi:[\"\\u039e\",{mathvariant:o.TexConstant.Variant.ITALIC}],varPi:[\"\\u03a0\",{mathvariant:o.TexConstant.Variant.ITALIC}],varSigma:[\"\\u03a3\",{mathvariant:o.TexConstant.Variant.ITALIC}],varUpsilon:[\"\\u03a5\",{mathvariant:o.TexConstant.Variant.ITALIC}],varPhi:[\"\\u03a6\",{mathvariant:o.TexConstant.Variant.ITALIC}],varPsi:[\"\\u03a8\",{mathvariant:o.TexConstant.Variant.ITALIC}],varOmega:[\"\\u03a9\",{mathvariant:o.TexConstant.Variant.ITALIC}],beth:\"\\u2136\",gimel:\"\\u2137\",daleth:\"\\u2138\",backprime:[\"\\u2035\",{variantForm:!0}],hslash:\"\\u210f\",varnothing:[\"\\u2205\",{variantForm:!0}],blacktriangle:\"\\u25b4\",triangledown:[\"\\u25bd\",{variantForm:!0}],blacktriangledown:\"\\u25be\",square:\"\\u25fb\",Box:\"\\u25fb\",blacksquare:\"\\u25fc\",lozenge:\"\\u25ca\",Diamond:\"\\u25ca\",blacklozenge:\"\\u29eb\",circledS:[\"\\u24c8\",{mathvariant:o.TexConstant.Variant.NORMAL}],bigstar:\"\\u2605\",sphericalangle:\"\\u2222\",measuredangle:\"\\u2221\",nexists:\"\\u2204\",complement:\"\\u2201\",mho:\"\\u2127\",eth:[\"\\xf0\",{mathvariant:o.TexConstant.Variant.NORMAL}],Finv:\"\\u2132\",diagup:\"\\u2571\",Game:\"\\u2141\",diagdown:\"\\u2572\",Bbbk:[\"k\",{mathvariant:o.TexConstant.Variant.DOUBLESTRUCK}],yen:\"\\xa5\",circledR:\"\\xae\",checkmark:\"\\u2713\",maltese:\"\\u2720\"}),new n.CharacterMap(\"AMSsymbols-mathchar0m0\",i.default.mathchar0mo,{dotplus:\"\\u2214\",ltimes:\"\\u22c9\",smallsetminus:[\"\\u2216\",{variantForm:!0}],rtimes:\"\\u22ca\",Cap:\"\\u22d2\",doublecap:\"\\u22d2\",leftthreetimes:\"\\u22cb\",Cup:\"\\u22d3\",doublecup:\"\\u22d3\",rightthreetimes:\"\\u22cc\",barwedge:\"\\u22bc\",curlywedge:\"\\u22cf\",veebar:\"\\u22bb\",curlyvee:\"\\u22ce\",doublebarwedge:\"\\u2a5e\",boxminus:\"\\u229f\",circleddash:\"\\u229d\",boxtimes:\"\\u22a0\",circledast:\"\\u229b\",boxdot:\"\\u22a1\",circledcirc:\"\\u229a\",boxplus:\"\\u229e\",centerdot:[\"\\u22c5\",{variantForm:!0}],divideontimes:\"\\u22c7\",intercal:\"\\u22ba\",leqq:\"\\u2266\",geqq:\"\\u2267\",leqslant:\"\\u2a7d\",geqslant:\"\\u2a7e\",eqslantless:\"\\u2a95\",eqslantgtr:\"\\u2a96\",lesssim:\"\\u2272\",gtrsim:\"\\u2273\",lessapprox:\"\\u2a85\",gtrapprox:\"\\u2a86\",approxeq:\"\\u224a\",lessdot:\"\\u22d6\",gtrdot:\"\\u22d7\",lll:\"\\u22d8\",llless:\"\\u22d8\",ggg:\"\\u22d9\",gggtr:\"\\u22d9\",lessgtr:\"\\u2276\",gtrless:\"\\u2277\",lesseqgtr:\"\\u22da\",gtreqless:\"\\u22db\",lesseqqgtr:\"\\u2a8b\",gtreqqless:\"\\u2a8c\",doteqdot:\"\\u2251\",Doteq:\"\\u2251\",eqcirc:\"\\u2256\",risingdotseq:\"\\u2253\",circeq:\"\\u2257\",fallingdotseq:\"\\u2252\",triangleq:\"\\u225c\",backsim:\"\\u223d\",thicksim:[\"\\u223c\",{variantForm:!0}],backsimeq:\"\\u22cd\",thickapprox:[\"\\u2248\",{variantForm:!0}],subseteqq:\"\\u2ac5\",supseteqq:\"\\u2ac6\",Subset:\"\\u22d0\",Supset:\"\\u22d1\",sqsubset:\"\\u228f\",sqsupset:\"\\u2290\",preccurlyeq:\"\\u227c\",succcurlyeq:\"\\u227d\",curlyeqprec:\"\\u22de\",curlyeqsucc:\"\\u22df\",precsim:\"\\u227e\",succsim:\"\\u227f\",precapprox:\"\\u2ab7\",succapprox:\"\\u2ab8\",vartriangleleft:\"\\u22b2\",lhd:\"\\u22b2\",vartriangleright:\"\\u22b3\",rhd:\"\\u22b3\",trianglelefteq:\"\\u22b4\",unlhd:\"\\u22b4\",trianglerighteq:\"\\u22b5\",unrhd:\"\\u22b5\",vDash:[\"\\u22a8\",{variantForm:!0}],Vdash:\"\\u22a9\",Vvdash:\"\\u22aa\",smallsmile:[\"\\u2323\",{variantForm:!0}],shortmid:[\"\\u2223\",{variantForm:!0}],smallfrown:[\"\\u2322\",{variantForm:!0}],shortparallel:[\"\\u2225\",{variantForm:!0}],bumpeq:\"\\u224f\",between:\"\\u226c\",Bumpeq:\"\\u224e\",pitchfork:\"\\u22d4\",varpropto:[\"\\u221d\",{variantForm:!0}],backepsilon:\"\\u220d\",blacktriangleleft:\"\\u25c2\",blacktriangleright:\"\\u25b8\",therefore:\"\\u2234\",because:\"\\u2235\",eqsim:\"\\u2242\",vartriangle:[\"\\u25b3\",{variantForm:!0}],Join:\"\\u22c8\",nless:\"\\u226e\",ngtr:\"\\u226f\",nleq:\"\\u2270\",ngeq:\"\\u2271\",nleqslant:[\"\\u2a87\",{variantForm:!0}],ngeqslant:[\"\\u2a88\",{variantForm:!0}],nleqq:[\"\\u2270\",{variantForm:!0}],ngeqq:[\"\\u2271\",{variantForm:!0}],lneq:\"\\u2a87\",gneq:\"\\u2a88\",lneqq:\"\\u2268\",gneqq:\"\\u2269\",lvertneqq:[\"\\u2268\",{variantForm:!0}],gvertneqq:[\"\\u2269\",{variantForm:!0}],lnsim:\"\\u22e6\",gnsim:\"\\u22e7\",lnapprox:\"\\u2a89\",gnapprox:\"\\u2a8a\",nprec:\"\\u2280\",nsucc:\"\\u2281\",npreceq:[\"\\u22e0\",{variantForm:!0}],nsucceq:[\"\\u22e1\",{variantForm:!0}],precneqq:\"\\u2ab5\",succneqq:\"\\u2ab6\",precnsim:\"\\u22e8\",succnsim:\"\\u22e9\",precnapprox:\"\\u2ab9\",succnapprox:\"\\u2aba\",nsim:\"\\u2241\",ncong:\"\\u2247\",nshortmid:[\"\\u2224\",{variantForm:!0}],nshortparallel:[\"\\u2226\",{variantForm:!0}],nmid:\"\\u2224\",nparallel:\"\\u2226\",nvdash:\"\\u22ac\",nvDash:\"\\u22ad\",nVdash:\"\\u22ae\",nVDash:\"\\u22af\",ntriangleleft:\"\\u22ea\",ntriangleright:\"\\u22eb\",ntrianglelefteq:\"\\u22ec\",ntrianglerighteq:\"\\u22ed\",nsubseteq:\"\\u2288\",nsupseteq:\"\\u2289\",nsubseteqq:[\"\\u2288\",{variantForm:!0}],nsupseteqq:[\"\\u2289\",{variantForm:!0}],subsetneq:\"\\u228a\",supsetneq:\"\\u228b\",varsubsetneq:[\"\\u228a\",{variantForm:!0}],varsupsetneq:[\"\\u228b\",{variantForm:!0}],subsetneqq:\"\\u2acb\",supsetneqq:\"\\u2acc\",varsubsetneqq:[\"\\u2acb\",{variantForm:!0}],varsupsetneqq:[\"\\u2acc\",{variantForm:!0}],leftleftarrows:\"\\u21c7\",rightrightarrows:\"\\u21c9\",leftrightarrows:\"\\u21c6\",rightleftarrows:\"\\u21c4\",Lleftarrow:\"\\u21da\",Rrightarrow:\"\\u21db\",twoheadleftarrow:\"\\u219e\",twoheadrightarrow:\"\\u21a0\",leftarrowtail:\"\\u21a2\",rightarrowtail:\"\\u21a3\",looparrowleft:\"\\u21ab\",looparrowright:\"\\u21ac\",leftrightharpoons:\"\\u21cb\",rightleftharpoons:[\"\\u21cc\",{variantForm:!0}],curvearrowleft:\"\\u21b6\",curvearrowright:\"\\u21b7\",circlearrowleft:\"\\u21ba\",circlearrowright:\"\\u21bb\",Lsh:\"\\u21b0\",Rsh:\"\\u21b1\",upuparrows:\"\\u21c8\",downdownarrows:\"\\u21ca\",upharpoonleft:\"\\u21bf\",upharpoonright:\"\\u21be\",downharpoonleft:\"\\u21c3\",restriction:\"\\u21be\",multimap:\"\\u22b8\",downharpoonright:\"\\u21c2\",leftrightsquigarrow:\"\\u21ad\",rightsquigarrow:\"\\u21dd\",leadsto:\"\\u21dd\",dashrightarrow:\"\\u21e2\",dashleftarrow:\"\\u21e0\",nleftarrow:\"\\u219a\",nrightarrow:\"\\u219b\",nLeftarrow:\"\\u21cd\",nRightarrow:\"\\u21cf\",nleftrightarrow:\"\\u21ae\",nLeftrightarrow:\"\\u21ce\"}),new n.DelimiterMap(\"AMSsymbols-delimiter\",i.default.delimiter,{\"\\\\ulcorner\":\"\\u231c\",\"\\\\urcorner\":\"\\u231d\",\"\\\\llcorner\":\"\\u231e\",\"\\\\lrcorner\":\"\\u231f\"}),new n.CommandMap(\"AMSsymbols-macros\",{implies:[\"Macro\",\"\\\\;\\\\Longrightarrow\\\\;\"],impliedby:[\"Macro\",\"\\\\;\\\\Longleftarrow\\\\;\"]},a.AmsMethods)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AmsCdConfiguration=void 0;var a=r(0);r(34),e.AmsCdConfiguration=a.Configuration.create(\"amscd\",{handler:{character:[\"amscd_special\"],macro:[\"amscd_macros\"],environment:[\"amscd_environment\"]},options:{amscd:{colspace:\"5pt\",rowspace:\"5pt\",harrowsize:\"2.75em\",varrowsize:\"1.75em\",hideHorizontalLabels:!1}}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(1),n=r(9),o=r(35);new a.EnvironmentMap(\"amscd_environment\",n.default.environment,{CD:\"CD\"},o.default),new a.CommandMap(\"amscd_macros\",{minCDarrowwidth:\"minCDarrowwidth\",minCDarrowheight:\"minCDarrowheight\"},o.default),new a.MacroMap(\"amscd_special\",{\"@\":\"arrow\"},o.default)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(5),n=r(22),o=r(7),i=r(4),s={CD:function(t,e){t.Push(e);var r=t.itemFactory.create(\"array\"),a=t.configuration.options.amscd;return r.setProperties({minw:t.stack.env.CD_minw||a.harrowsize,minh:t.stack.env.CD_minh||a.varrowsize}),r.arraydef={columnalign:\"center\",columnspacing:a.colspace,rowspacing:a.rowspace,displaystyle:!0},r},arrow:function(t,e){var r=t.string.charAt(t.i);if(!r.match(/[><VA.|=]/))return n.Other(t,e);t.i++;var c=t.stack.Top();c.isKind(\"array\")&&!c.Size()||(s.cell(t,e),c=t.stack.Top());for(var l,u=c,d=u.table.length%2==1,p=(u.row.length+(d?0:1))%2;p;)s.cell(t,e),p--;var f={minsize:u.getProperty(\"minw\"),stretchy:!0},m={minsize:u.getProperty(\"minh\"),stretchy:!0,symmetric:!0,lspace:0,rspace:0};if(\".\"===r);else if(\"|\"===r)l=t.create(\"token\",\"mo\",m,\"\\u2225\");else if(\"=\"===r)l=t.create(\"token\",\"mo\",f,\"=\");else{var h={\">\":\"\\u2192\",\"<\":\"\\u2190\",V:\"\\u2193\",A:\"\\u2191\"}[r],g=t.GetUpTo(e+r,r),v=t.GetUpTo(e+r,r);if(\">\"===r||\"<\"===r){if(l=t.create(\"token\",\"mo\",f,h),g||(g=\"\\\\kern \"+u.getProperty(\"minw\")),g||v){var y={width:\".67em\",lspace:\".33em\"};if(l=t.create(\"node\",\"munderover\",[l]),g){var x=new a.default(g,t.stack.env,t.configuration).mml(),b=t.create(\"node\",\"mpadded\",[x],y);i.default.setAttribute(b,\"voffset\",\".1em\"),i.default.setChild(l,l.over,b)}if(v){var _=new a.default(v,t.stack.env,t.configuration).mml();i.default.setChild(l,l.under,t.create(\"node\",\"mpadded\",[_],y))}t.configuration.options.amscd.hideHorizontalLabels&&(l=t.create(\"node\",\"mpadded\",l,{depth:0,height:\".67em\"}))}}else{var M=t.create(\"token\",\"mo\",m,h);l=M,(g||v)&&(l=t.create(\"node\",\"mrow\"),g&&i.default.appendChildren(l,[new a.default(\"\\\\scriptstyle\\\\llap{\"+g+\"}\",t.stack.env,t.configuration).mml()]),M.texClass=o.TEXCLASS.ORD,i.default.appendChildren(l,[M]),v&&i.default.appendChildren(l,[new a.default(\"\\\\scriptstyle\\\\rlap{\"+v+\"}\",t.stack.env,t.configuration).mml()]))}}l&&t.Push(l),s.cell(t,e)},cell:function(t,e){var r=t.stack.Top();(r.table||[]).length%2==0&&0===(r.row||[]).length&&t.Push(t.create(\"node\",\"mpadded\",[],{height:\"8.5pt\",depth:\"2pt\"})),t.Push(t.itemFactory.create(\"cell\").setProperties({isEntry:!0,name:e}))},minCDarrowwidth:function(t,e){t.stack.env.CD_minw=t.GetDimen(e)},minCDarrowheight:function(t,e){t.stack.env.CD_minh=t.GetDimen(e)}};e.default=s},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BboxConfiguration=e.BboxMethods=void 0;var a=r(0),n=r(1),o=r(2);e.BboxMethods={},e.BboxMethods.BBox=function(t,e){for(var r,a,n,c=t.GetBrackets(e,\"\"),l=t.ParseArg(e),u=c.split(/,/),d=0,p=u.length;d<p;d++){var f=u[d].trim(),m=f.match(/^(\\.\\d+|\\d+(\\.\\d*)?)(pt|em|ex|mu|px|in|cm|mm)$/);if(m){if(r)throw new o.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Padding\",e);var h=s(m[1]+m[3]);h&&(r={height:\"+\"+h,depth:\"+\"+h,lspace:h,width:\"+\"+2*parseInt(m[1],10)+m[3]})}else if(f.match(/^([a-z0-9]+|\\#[0-9a-f]{6}|\\#[0-9a-f]{3})$/i)){if(a)throw new o.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Background\",e);a=f}else if(f.match(/^[-a-z]+:/i)){if(n)throw new o.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Style\",e);n=i(f)}else if(\"\"!==f)throw new o.default(\"InvalidBBoxProperty\",'\"%1\" doesn\\'t look like a color, a padding dimension, or a style',f)}r&&(l=t.create(\"node\",\"mpadded\",[l],r)),(a||n)&&(r={},a&&Object.assign(r,{mathbackground:a}),n&&Object.assign(r,{style:n}),l=t.create(\"node\",\"mstyle\",[l],r)),t.Push(l)};var i=function(t){return t},s=function(t){return t};new n.CommandMap(\"bbox\",{bbox:\"BBox\"},e.BboxMethods),e.BboxConfiguration=a.Configuration.create(\"bbox\",{handler:{macro:[\"bbox\"]}})},function(t,e,r){\"use strict\";var a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],a=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.BoldsymbolConfiguration=e.rewriteBoldTokens=e.createBoldToken=e.BoldsymbolMethods=void 0;var n=r(0),o=r(4),i=r(6),s=r(1),c=r(23),l={};function u(t,e,r,a){var n=c.NodeFactory.createToken(t,e,r,a);return\"mtext\"!==e&&t.configuration.parser.stack.env.boldsymbol&&(o.default.setProperty(n,\"fixBold\",!0),t.configuration.addNode(\"fixBold\",n)),n}function d(t){var e,r;try{for(var n=a(t.data.getList(\"fixBold\")),s=n.next();!s.done;s=n.next()){var c=s.value;if(o.default.getProperty(c,\"fixBold\")){var u=o.default.getAttribute(c,\"mathvariant\");null==u?o.default.setAttribute(c,\"mathvariant\",i.TexConstant.Variant.BOLD):o.default.setAttribute(c,\"mathvariant\",l[u]||u),o.default.removeProperties(c,\"fixBold\")}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}}l[i.TexConstant.Variant.NORMAL]=i.TexConstant.Variant.BOLD,l[i.TexConstant.Variant.ITALIC]=i.TexConstant.Variant.BOLDITALIC,l[i.TexConstant.Variant.FRAKTUR]=i.TexConstant.Variant.BOLDFRAKTUR,l[i.TexConstant.Variant.SCRIPT]=i.TexConstant.Variant.BOLDSCRIPT,l[i.TexConstant.Variant.SANSSERIF]=i.TexConstant.Variant.BOLDSANSSERIF,l[\"-tex-calligraphic\"]=\"-tex-bold-calligraphic\",l[\"-tex-oldstyle\"]=\"-tex-bold-oldstyle\",e.BoldsymbolMethods={},e.BoldsymbolMethods.Boldsymbol=function(t,e){var r=t.stack.env.boldsymbol;t.stack.env.boldsymbol=!0;var a=t.ParseArg(e);t.stack.env.boldsymbol=r,t.Push(a)},new s.CommandMap(\"boldsymbol\",{boldsymbol:\"Boldsymbol\"},e.BoldsymbolMethods),e.createBoldToken=u,e.rewriteBoldTokens=d,e.BoldsymbolConfiguration=n.Configuration.create(\"boldsymbol\",{handler:{macro:[\"boldsymbol\"]},nodes:{token:u},postprocessors:[d]})},function(t,e,r){\"use strict\";var a;Object.defineProperty(e,\"__esModule\",{value:!0}),e.BraketConfiguration=void 0;var n=r(0),o=r(39);r(40),e.BraketConfiguration=n.Configuration.create(\"braket\",{handler:{character:[\"Braket-characters\"],macro:[\"Braket-macros\"]},items:(a={},a[o.BraketItem.prototype.kind]=o.BraketItem,a)})},function(t,e,r){\"use strict\";var a,n=this&&this.__extends||(a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BraketItem=void 0;var o=r(13),i=r(7),s=r(3),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"braket\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){return e.isKind(\"close\")?[[this.factory.create(\"mml\",this.toMml())],!0]:e.isKind(\"mml\")?(this.Push(e.toMml()),this.getProperty(\"single\")?[[this.toMml()],!0]:o.BaseItem.fail):t.prototype.checkItem.call(this,e)},e.prototype.toMml=function(){var e=t.prototype.toMml.call(this),r=this.getProperty(\"open\"),a=this.getProperty(\"close\");if(this.getProperty(\"stretchy\"))return s.default.fenced(this.factory.configuration,r,e,a);var n={fence:!0,stretchy:!1,symmetric:!0,texClass:i.TEXCLASS.OPEN},o=this.create(\"token\",\"mo\",n,r);n.texClass=i.TEXCLASS.CLOSE;var c=this.create(\"token\",\"mo\",n,a);return this.create(\"node\",\"mrow\",[o,e,c],{open:r,close:a,texClass:i.TEXCLASS.INNER})},e}(o.BaseItem);e.BraketItem=c},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(1),n=r(41);new a.CommandMap(\"Braket-macros\",{bra:[\"Macro\",\"{\\\\langle {#1} \\\\vert}\",1],ket:[\"Macro\",\"{\\\\vert {#1} \\\\rangle}\",1],braket:[\"Braket\",\"\\u27e8\",\"\\u27e9\",!1,1/0],set:[\"Braket\",\"{\",\"}\",!1,1],Bra:[\"Macro\",\"{\\\\left\\\\langle {#1} \\\\right\\\\vert}\",1],Ket:[\"Macro\",\"{\\\\left\\\\vert {#1} \\\\right\\\\rangle}\",1],Braket:[\"Braket\",\"\\u27e8\",\"\\u27e9\",!0,1/0],Set:[\"Braket\",\"{\",\"}\",!0,1],ketbra:[\"Macro\",\"{\\\\vert {#1} \\\\rangle\\\\langle {#2} \\\\vert}\",2],Ketbra:[\"Macro\",\"{\\\\left\\\\vert {#1} \\\\right\\\\rangle\\\\left\\\\langle {#2} \\\\right\\\\vert}\",2],\"|\":\"Bar\"},n.default),new a.MacroMap(\"Braket-characters\",{\"|\":\"Bar\"},n.default)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(8),n=r(7),o=r(2),i={};i.Macro=a.default.Macro,i.Braket=function(t,e,r,a,n,i){var s=t.GetNext();if(\"\"===s)throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);var c=!0;\"{\"===s&&(t.i++,c=!1),t.Push(t.itemFactory.create(\"braket\").setProperties({barmax:i,barcount:0,open:r,close:a,stretchy:n,single:c}))},i.Bar=function(t,e){var r=\"|\"===e?\"|\":\"\\u2225\",a=t.stack.Top();if(\"braket\"!==a.kind||a.getProperty(\"barcount\")>=a.getProperty(\"barmax\")){var o=t.create(\"token\",\"mo\",{texClass:n.TEXCLASS.ORD,stretchy:!1},r);t.Push(o)}else{if(\"|\"===r&&\"|\"===t.GetNext()&&(t.i++,r=\"\\u2225\"),a.getProperty(\"stretchy\")){var i=t.create(\"node\",\"TeXAtom\",[],{texClass:n.TEXCLASS.CLOSE});t.Push(i),a.setProperty(\"barcount\",a.getProperty(\"barcount\")+1),i=t.create(\"token\",\"mo\",{stretchy:!0,braketbar:!0},r),t.Push(i),i=t.create(\"node\",\"TeXAtom\",[],{texClass:n.TEXCLASS.OPEN}),t.Push(i)}else{var s=t.create(\"token\",\"mo\",{stretchy:!1,braketbar:!0},r);t.Push(s)}}},e.default=i},function(t,e,r){\"use strict\";var a;Object.defineProperty(e,\"__esModule\",{value:!0}),e.BussproofsConfiguration=void 0;var n=r(0),o=r(43),i=r(18);r(45),e.BussproofsConfiguration=n.Configuration.create(\"bussproofs\",{handler:{macro:[\"Bussproofs-macros\"],environment:[\"Bussproofs-environments\"]},items:(a={},a[o.ProofTreeItem.prototype.kind]=o.ProofTreeItem,a),preprocessors:[[i.saveDocument,1]],postprocessors:[[i.clearDocument,3],[i.makeBsprAttributes,2],[i.balanceRules,1]]})},function(t,e,r){\"use strict\";var a,n=this&&this.__extends||(a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.ProofTreeItem=void 0;var o=r(2),i=r(13),s=r(44),c=r(18),l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.leftLabel=null,e.rigthLabel=null,e.innerStack=new s.default(e.factory,{},!0),e}return n(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"proofTree\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){if(t.isKind(\"end\")&&\"prooftree\"===t.getName()){var e=this.toMml();return c.setProperty(e,\"proof\",!0),[[this.factory.create(\"mml\",e),t],!0]}if(t.isKind(\"stop\"))throw new o.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return this.innerStack.Push(t),i.BaseItem.fail},e.prototype.toMml=function(){var e=t.prototype.toMml.call(this),r=this.innerStack.Top();if(r.isKind(\"start\")&&!r.Size())return e;this.innerStack.Push(this.factory.create(\"stop\"));var a=this.innerStack.Top().toMml();return this.create(\"node\",\"mrow\",[a,e],{})},e}(i.BaseItem);e.ProofTreeItem=l},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.Stack.default},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(46),n=r(9),o=r(1);new o.CommandMap(\"Bussproofs-macros\",{AxiomC:\"Axiom\",UnaryInfC:[\"Inference\",1],BinaryInfC:[\"Inference\",2],TrinaryInfC:[\"Inference\",3],QuaternaryInfC:[\"Inference\",4],QuinaryInfC:[\"Inference\",5],RightLabel:[\"Label\",\"right\"],LeftLabel:[\"Label\",\"left\"],AXC:\"Axiom\",UIC:[\"Inference\",1],BIC:[\"Inference\",2],TIC:[\"Inference\",3],RL:[\"Label\",\"right\"],LL:[\"Label\",\"left\"],noLine:[\"SetLine\",\"none\",!1],singleLine:[\"SetLine\",\"solid\",!1],solidLine:[\"SetLine\",\"solid\",!1],dashedLine:[\"SetLine\",\"dashed\",!1],alwaysNoLine:[\"SetLine\",\"none\",!0],alwaysSingleLine:[\"SetLine\",\"solid\",!0],alwaysSolidLine:[\"SetLine\",\"solid\",!0],alwaysDashedLine:[\"SetLine\",\"dashed\",!0],rootAtTop:[\"RootAtTop\",!0],alwaysRootAtTop:[\"RootAtTop\",!0],rootAtBottom:[\"RootAtTop\",!1],alwaysRootAtBottom:[\"RootAtTop\",!1],fCenter:\"FCenter\",Axiom:\"AxiomF\",UnaryInf:[\"InferenceF\",1],BinaryInf:[\"InferenceF\",2],TrinaryInf:[\"InferenceF\",3],QuaternaryInf:[\"InferenceF\",4],QuinaryInf:[\"InferenceF\",5]},a.default),new o.EnvironmentMap(\"Bussproofs-environments\",n.default.environment,{prooftree:[\"Prooftree\",null,!1]},a.default)},function(t,e,r){\"use strict\";var a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var a,n,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(a=o.next()).done;)i.push(a.value)}catch(t){n={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(2),i=r(5),s=r(3),c=r(18),l={Prooftree:function(t,e){return t.Push(e),t.itemFactory.create(\"proofTree\").setProperties({name:e.getName(),line:\"solid\",currentLine:\"solid\",rootAtTop:!1})},Axiom:function(t,e){var r=t.stack.Top();if(\"proofTree\"!==r.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var a=u(t,t.GetArgument(e));c.setProperty(a,\"axiom\",!0),r.Push(a)}},u=function(t,e){var r=s.default.internalMath(t,s.default.trimSpaces(e),0);if(!r[0].childNodes[0].childNodes.length)return t.create(\"node\",\"mrow\",[]);var a=t.create(\"node\",\"mspace\",[],{width:\".5ex\"}),o=t.create(\"node\",\"mspace\",[],{width:\".5ex\"});return t.create(\"node\",\"mrow\",n([a],r,[o]))};function d(t,e,r,a,n,o,i){var s,l,u,d,p=t.create(\"node\",\"mtr\",[t.create(\"node\",\"mtd\",[e],{})],{}),f=t.create(\"node\",\"mtr\",[t.create(\"node\",\"mtd\",r,{})],{}),m=t.create(\"node\",\"mtable\",i?[f,p]:[p,f],{align:\"top 2\",rowlines:o,framespacing:\"0 0\"});if(c.setProperty(m,\"inferenceRule\",i?\"up\":\"down\"),a&&(s=t.create(\"node\",\"mpadded\",[a],{height:\"+.5em\",width:\"+.5em\",voffset:\"-.15em\"}),c.setProperty(s,\"prooflabel\",\"left\")),n&&(l=t.create(\"node\",\"mpadded\",[n],{height:\"+.5em\",width:\"+.5em\",voffset:\"-.15em\"}),c.setProperty(l,\"prooflabel\",\"right\")),a&&n)u=[s,m,l],d=\"both\";else if(a)u=[s,m],d=\"left\";else{if(!n)return m;u=[m,l],d=\"right\"}return m=t.create(\"node\",\"mrow\",u),c.setProperty(m,\"labelledRule\",d),m}function p(t,e){if(\"$\"!==t.GetNext())throw new o.default(\"IllegalUseOfCommand\",\"Use of %1 does not match it's definition.\",e);t.i++;var r=t.GetUpTo(e,\"$\");if(-1===r.indexOf(\"\\\\fCenter\"))throw new o.default(\"IllegalUseOfCommand\",\"Missing \\\\fCenter in %1.\",e);var n=a(r.split(\"\\\\fCenter\"),2),s=n[0],l=n[1],u=new i.default(s,t.stack.env,t.configuration).mml(),d=new i.default(l,t.stack.env,t.configuration).mml(),p=new i.default(\"\\\\fCenter\",t.stack.env,t.configuration).mml(),f=t.create(\"node\",\"mtd\",[u],{}),m=t.create(\"node\",\"mtd\",[p],{}),h=t.create(\"node\",\"mtd\",[d],{}),g=t.create(\"node\",\"mtr\",[f,m,h],{}),v=t.create(\"node\",\"mtable\",[g],{columnspacing:\".5ex\",columnalign:\"center 2\"});return c.setProperty(v,\"sequent\",!0),t.configuration.addNode(\"sequent\",g),v}l.Inference=function(t,e,r){var a=t.stack.Top();if(\"proofTree\"!==a.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");if(a.Size()<r)throw new o.default(\"BadProofTree\",\"Proof tree badly specified.\");var n=a.getProperty(\"rootAtTop\"),i=1!==r||a.Peek()[0].childNodes.length?r:0,s=[];do{s.length&&s.unshift(t.create(\"node\",\"mtd\",[],{})),s.unshift(t.create(\"node\",\"mtd\",[a.Pop()],{rowalign:n?\"top\":\"bottom\"})),r--}while(r>0);var l=t.create(\"node\",\"mtr\",s,{}),p=t.create(\"node\",\"mtable\",[l],{framespacing:\"0 0\"}),f=u(t,t.GetArgument(e)),m=a.getProperty(\"currentLine\");m!==a.getProperty(\"line\")&&a.setProperty(\"currentLine\",a.getProperty(\"line\"));var h=d(t,p,[f],a.getProperty(\"left\"),a.getProperty(\"right\"),m,n);a.setProperty(\"left\",null),a.setProperty(\"right\",null),c.setProperty(h,\"inference\",i),t.configuration.addNode(\"inference\",h),a.Push(h)},l.Label=function(t,e,r){var a=t.stack.Top();if(\"proofTree\"!==a.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var n=s.default.internalMath(t,t.GetArgument(e),0),i=n.length>1?t.create(\"node\",\"mrow\",n,{}):n[0];a.setProperty(r,i)},l.SetLine=function(t,e,r,a){var n=t.stack.Top();if(\"proofTree\"!==n.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");n.setProperty(\"currentLine\",r),a&&n.setProperty(\"line\",r)},l.RootAtTop=function(t,e,r){var a=t.stack.Top();if(\"proofTree\"!==a.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");a.setProperty(\"rootAtTop\",r)},l.AxiomF=function(t,e){var r=t.stack.Top();if(\"proofTree\"!==r.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var a=p(t,e);c.setProperty(a,\"axiom\",!0),r.Push(a)},l.FCenter=function(t,e){},l.InferenceF=function(t,e,r){var a=t.stack.Top();if(\"proofTree\"!==a.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");if(a.Size()<r)throw new o.default(\"BadProofTree\",\"Proof tree badly specified.\");var n=a.getProperty(\"rootAtTop\"),i=1!==r||a.Peek()[0].childNodes.length?r:0,s=[];do{s.length&&s.unshift(t.create(\"node\",\"mtd\",[],{})),s.unshift(t.create(\"node\",\"mtd\",[a.Pop()],{rowalign:n?\"top\":\"bottom\"})),r--}while(r>0);var l=t.create(\"node\",\"mtr\",s,{}),u=t.create(\"node\",\"mtable\",[l],{framespacing:\"0 0\"}),f=p(t,e),m=a.getProperty(\"currentLine\");m!==a.getProperty(\"line\")&&a.setProperty(\"currentLine\",a.getProperty(\"line\"));var h=d(t,u,[f],a.getProperty(\"left\"),a.getProperty(\"right\"),m,n);a.setProperty(\"left\",null),a.setProperty(\"right\",null),c.setProperty(h,\"inference\",i),t.configuration.addNode(\"inference\",h),a.Push(h)},e.default=l},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CancelConfiguration=e.CancelMethods=void 0;var a=r(0),n=r(6),o=r(1),i=r(3),s=r(24);e.CancelMethods={},e.CancelMethods.Cancel=function(t,e,r){var a=t.GetBrackets(e,\"\"),n=t.ParseArg(e),o=i.default.keyvalOptions(a,s.ENCLOSE_OPTIONS);o.notation=r,t.Push(t.create(\"node\",\"menclose\",[n],o))},e.CancelMethods.CancelTo=function(t,e){var r=t.GetBrackets(e,\"\"),a=t.ParseArg(e),o=t.ParseArg(e),c=i.default.keyvalOptions(r,s.ENCLOSE_OPTIONS);c.notation=[n.TexConstant.Notation.UPDIAGONALSTRIKE,n.TexConstant.Notation.UPDIAGONALARROW,n.TexConstant.Notation.NORTHEASTARROW].join(\" \"),a=t.create(\"node\",\"mpadded\",[a],{depth:\"-.1em\",height:\"+.1em\",voffset:\".1em\"}),t.Push(t.create(\"node\",\"msup\",[t.create(\"node\",\"menclose\",[o],c),a]))},new o.CommandMap(\"cancel\",{cancel:[\"Cancel\",n.TexConstant.Notation.UPDIAGONALSTRIKE],bcancel:[\"Cancel\",n.TexConstant.Notation.DOWNDIAGONALSTRIKE],xcancel:[\"Cancel\",n.TexConstant.Notation.UPDIAGONALSTRIKE+\" \"+n.TexConstant.Notation.DOWNDIAGONALSTRIKE],cancelto:\"CancelTo\"},e.CancelMethods),e.CancelConfiguration=a.Configuration.create(\"cancel\",{handler:{macro:[\"cancel\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorConfiguration=void 0;var a=r(1),n=r(0),o=r(49),i=r(50);new a.CommandMap(\"color\",{color:\"Color\",textcolor:\"TextColor\",definecolor:\"DefineColor\",colorbox:\"ColorBox\",fcolorbox:\"FColorBox\"},o.ColorMethods);e.ColorConfiguration=n.Configuration.create(\"color\",{handler:{macro:[\"color\"]},options:{color:{padding:\"5px\",borderWidth:\"2px\"}},config:function(t,e){e.parseOptions.packageData.set(\"color\",{model:new i.ColorModel})}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorMethods=void 0;var a=r(4),n=r(3);function o(t){var e=\"+\"+t,r=t.replace(/^.*?([a-z]*)$/,\"$1\");return{width:\"+\"+2*parseFloat(e)+r,height:e,depth:e,lspace:t}}e.ColorMethods={},e.ColorMethods.Color=function(t,e){var r=t.GetBrackets(e,\"\"),a=t.GetArgument(e),n=t.configuration.packageData.get(\"color\").model.getColor(r,a),o=t.itemFactory.create(\"style\").setProperties({styles:{mathcolor:n}});t.stack.env.color=n,t.Push(o)},e.ColorMethods.TextColor=function(t,e){var r=t.GetBrackets(e,\"\"),a=t.GetArgument(e),n=t.configuration.packageData.get(\"color\").model.getColor(r,a),o=t.stack.env.color;t.stack.env.color=n;var i=t.ParseArg(e);o?t.stack.env.color=o:delete t.stack.env.color;var s=t.create(\"node\",\"mstyle\",[i],{mathcolor:n});t.Push(s)},e.ColorMethods.DefineColor=function(t,e){var r=t.GetArgument(e),a=t.GetArgument(e),n=t.GetArgument(e);t.configuration.packageData.get(\"color\").model.defineColor(a,r,n)},e.ColorMethods.ColorBox=function(t,e){var r=t.GetArgument(e),i=n.default.internalMath(t,t.GetArgument(e)),s=t.configuration.packageData.get(\"color\").model,c=t.create(\"node\",\"mpadded\",i,{mathbackground:s.getColor(\"named\",r)});a.default.setProperties(c,o(t.options.color.padding)),t.Push(c)},e.ColorMethods.FColorBox=function(t,e){var r=t.GetArgument(e),i=t.GetArgument(e),s=n.default.internalMath(t,t.GetArgument(e)),c=t.options.color,l=t.configuration.packageData.get(\"color\").model,u=t.create(\"node\",\"mpadded\",s,{mathbackground:l.getColor(\"named\",i),style:\"border: \"+c.borderWidth+\" solid \"+l.getColor(\"named\",r)});a.default.setProperties(u,o(c.padding)),t.Push(u)}},function(t,e,r){\"use strict\";var a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],a=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorModel=void 0;var n=r(2),o=r(51),i=new Map,s=function(){function t(){this.userColors=new Map}return t.prototype.normalizeColor=function(t,e){if(!t||\"named\"===t)return e;if(i.has(t))return i.get(t)(e);throw new n.default(\"UndefinedColorModel\",\"Color model '%1' not defined\",t)},t.prototype.getColor=function(t,e){return t&&\"named\"!==t?this.normalizeColor(t,e):this.getColorByName(e)},t.prototype.getColorByName=function(t){return this.userColors.has(t)?this.userColors.get(t):o.COLORS.has(t)?o.COLORS.get(t):t},t.prototype.defineColor=function(t,e,r){var a=this.normalizeColor(t,r);this.userColors.set(e,a)},t}();e.ColorModel=s,i.set(\"rgb\",(function(t){var e,r,o=t.trim().split(/\\s*,\\s*/),i=\"#\";if(3!==o.length)throw new n.default(\"ModelArg1\",\"Color values for the %1 model require 3 numbers\",\"rgb\");try{for(var s=a(o),c=s.next();!c.done;c=s.next()){var l=c.value;if(!l.match(/^(\\d+(\\.\\d*)?|\\.\\d+)$/))throw new n.default(\"InvalidDecimalNumber\",\"Invalid decimal number\");var u=parseFloat(l);if(u<0||u>1)throw new n.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"rgb\",\"0\",\"1\");var d=Math.floor(255*u).toString(16);d.length<2&&(d=\"0\"+d),i+=d}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return i})),i.set(\"RGB\",(function(t){var e,r,o=t.trim().split(/\\s*,\\s*/),i=\"#\";if(3!==o.length)throw new n.default(\"ModelArg1\",\"Color values for the %1 model require 3 numbers\",\"RGB\");try{for(var s=a(o),c=s.next();!c.done;c=s.next()){var l=c.value;if(!l.match(/^\\d+$/))throw new n.default(\"InvalidNumber\",\"Invalid number\");var u=parseInt(l);if(u>255)throw new n.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"RGB\",\"0\",\"255\");var d=u.toString(16);d.length<2&&(d=\"0\"+d),i+=d}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return i})),i.set(\"gray\",(function(t){if(!t.match(/^\\s*(\\d+(\\.\\d*)?|\\.\\d+)\\s*$/))throw new n.default(\"InvalidDecimalNumber\",\"Invalid decimal number\");var e=parseFloat(t);if(e<0||e>1)throw new n.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"gray\",\"0\",\"1\");var r=Math.floor(255*e).toString(16);return r.length<2&&(r=\"0\"+r),\"#\"+r+r+r}))},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.COLORS=void 0,e.COLORS=new Map([[\"Apricot\",\"#FBB982\"],[\"Aquamarine\",\"#00B5BE\"],[\"Bittersweet\",\"#C04F17\"],[\"Black\",\"#221E1F\"],[\"Blue\",\"#2D2F92\"],[\"BlueGreen\",\"#00B3B8\"],[\"BlueViolet\",\"#473992\"],[\"BrickRed\",\"#B6321C\"],[\"Brown\",\"#792500\"],[\"BurntOrange\",\"#F7921D\"],[\"CadetBlue\",\"#74729A\"],[\"CarnationPink\",\"#F282B4\"],[\"Cerulean\",\"#00A2E3\"],[\"CornflowerBlue\",\"#41B0E4\"],[\"Cyan\",\"#00AEEF\"],[\"Dandelion\",\"#FDBC42\"],[\"DarkOrchid\",\"#A4538A\"],[\"Emerald\",\"#00A99D\"],[\"ForestGreen\",\"#009B55\"],[\"Fuchsia\",\"#8C368C\"],[\"Goldenrod\",\"#FFDF42\"],[\"Gray\",\"#949698\"],[\"Green\",\"#00A64F\"],[\"GreenYellow\",\"#DFE674\"],[\"JungleGreen\",\"#00A99A\"],[\"Lavender\",\"#F49EC4\"],[\"LimeGreen\",\"#8DC73E\"],[\"Magenta\",\"#EC008C\"],[\"Mahogany\",\"#A9341F\"],[\"Maroon\",\"#AF3235\"],[\"Melon\",\"#F89E7B\"],[\"MidnightBlue\",\"#006795\"],[\"Mulberry\",\"#A93C93\"],[\"NavyBlue\",\"#006EB8\"],[\"OliveGreen\",\"#3C8031\"],[\"Orange\",\"#F58137\"],[\"OrangeRed\",\"#ED135A\"],[\"Orchid\",\"#AF72B0\"],[\"Peach\",\"#F7965A\"],[\"Periwinkle\",\"#7977B8\"],[\"PineGreen\",\"#008B72\"],[\"Plum\",\"#92268F\"],[\"ProcessBlue\",\"#00B0F0\"],[\"Purple\",\"#99479B\"],[\"RawSienna\",\"#974006\"],[\"Red\",\"#ED1B23\"],[\"RedOrange\",\"#F26035\"],[\"RedViolet\",\"#A1246B\"],[\"Rhodamine\",\"#EF559F\"],[\"RoyalBlue\",\"#0071BC\"],[\"RoyalPurple\",\"#613F99\"],[\"RubineRed\",\"#ED017D\"],[\"Salmon\",\"#F69289\"],[\"SeaGreen\",\"#3FBC9D\"],[\"Sepia\",\"#671800\"],[\"SkyBlue\",\"#46C5DD\"],[\"SpringGreen\",\"#C6DC67\"],[\"Tan\",\"#DA9D76\"],[\"TealBlue\",\"#00AEB3\"],[\"Thistle\",\"#D883B7\"],[\"Turquoise\",\"#00B4CE\"],[\"Violet\",\"#58429B\"],[\"VioletRed\",\"#EF58A0\"],[\"White\",\"#FFFFFF\"],[\"WildStrawberry\",\"#EE2967\"],[\"Yellow\",\"#FFF200\"],[\"YellowGreen\",\"#98CC70\"],[\"YellowOrange\",\"#FAA21A\"]])},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorConfiguration=e.ColorV2Methods=void 0;var a=r(1),n=r(0);e.ColorV2Methods={Color:function(t,e){var r=t.GetArgument(e),a=t.stack.env.color;t.stack.env.color=r;var n=t.ParseArg(e);a?t.stack.env.color=a:delete t.stack.env.color;var o=t.create(\"node\",\"mstyle\",[n],{mathcolor:r});t.Push(o)}},new a.CommandMap(\"colorv2\",{color:\"Color\"},e.ColorV2Methods),e.ColorConfiguration=n.Configuration.create(\"colorv2\",{handler:{macro:[\"colorv2\"]}})},function(t,e,r){\"use strict\";var a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],a=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ConfigMacrosConfiguration=void 0;var n=r(0),o=r(10),i=r(1),s=r(12),c=r(25);e.ConfigMacrosConfiguration=n.Configuration.create(\"configmacros\",{init:function(t){new i.CommandMap(\"configmacros-map\",{},{}),t.append(n.Configuration.local({handler:{macro:[\"configmacros-map\"]},priority:3}))},config:function(t,e){var r,n,o=e.parseOptions.handlers.retrieve(\"configmacros-map\"),i=e.parseOptions.options.macros;try{for(var l=a(Object.keys(i)),u=l.next();!u.done;u=l.next()){var d=u.value,p=\"string\"==typeof i[d]?[i[d]]:i[d],f=Array.isArray(p[2])?new s.Macro(d,c.default.MacroWithTemplate,p.slice(0,2).concat(p[2])):new s.Macro(d,c.default.Macro,p);o.add(d,f)}}catch(t){r={error:t}}finally{try{u&&!u.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}},options:{macros:o.expandable({})}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ExtpfeilConfiguration=e.ExtpfeilMethods=void 0;var a=r(0),n=r(1),o=r(11),i=r(19),s=r(26),c=r(2);e.ExtpfeilMethods={},e.ExtpfeilMethods.xArrow=o.AmsMethods.xArrow,e.ExtpfeilMethods.NewExtArrow=function(t,r){var a=t.GetArgument(r),n=t.GetArgument(r),o=t.GetArgument(r);if(!a.match(/^\\\\([a-z]+|.)$/i))throw new c.default(\"NewextarrowArg1\",\"First argument to %1 must be a control sequence name\",r);if(!n.match(/^(\\d+),(\\d+)$/))throw new c.default(\"NewextarrowArg2\",\"Second argument to %1 must be two integers separated by a comma\",r);if(!o.match(/^(\\d+|0x[0-9A-F]+)$/i))throw new c.default(\"NewextarrowArg3\",\"Third argument to %1 must be a unicode character number\",r);a=a.substr(1);var s=n.split(\",\");i.default.addMacro(t,a,e.ExtpfeilMethods.xArrow,[parseInt(o),parseInt(s[0]),parseInt(s[1])])},new n.CommandMap(\"extpfeil\",{xtwoheadrightarrow:[\"xArrow\",8608,12,16],xtwoheadleftarrow:[\"xArrow\",8606,17,13],xmapsto:[\"xArrow\",8614,6,7],xlongequal:[\"xArrow\",61,7,7],xtofrom:[\"xArrow\",8644,12,12],Newextarrow:\"NewExtArrow\"},e.ExtpfeilMethods);e.ExtpfeilConfiguration=a.Configuration.create(\"extpfeil\",{handler:{macro:[\"extpfeil\"]},init:function(t){s.NewcommandConfiguration.init(t)}})},function(t,e,r){\"use strict\";var a,n=this&&this.__extends||(a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BeginEnvItem=void 0;var o=r(2),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"beginEnv\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){if(e.getName()!==this.getName())throw new o.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),e.getName());return[[this.factory.create(\"mml\",this.toMml())],!0]}if(e.isKind(\"stop\"))throw new o.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(r(13).BaseItem);e.BeginEnvItem=i},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(25);new(r(1).CommandMap)(\"Newcommand-macros\",{newcommand:\"NewCommand\",renewcommand:\"NewCommand\",newenvironment:\"NewEnvironment\",renewenvironment:\"NewEnvironment\",def:\"MacroDef\",let:\"Let\"},a.default)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HtmlConfiguration=void 0;var a=r(0),n=r(1),o=r(58);new n.CommandMap(\"html_macros\",{href:\"Href\",class:\"Class\",style:\"Style\",cssId:\"Id\"},o.default),e.HtmlConfiguration=a.Configuration.create(\"html\",{handler:{macro:[\"html_macros\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(4),n={Href:function(t,e){var r=t.GetArgument(e),n=o(t,e);a.default.setAttribute(n,\"href\",r),t.Push(n)},Class:function(t,e){var r=t.GetArgument(e),n=o(t,e),i=a.default.getAttribute(n,\"class\");i&&(r=i+\" \"+r),a.default.setAttribute(n,\"class\",r),t.Push(n)},Style:function(t,e){var r=t.GetArgument(e),n=o(t,e),i=a.default.getAttribute(n,\"style\");i&&(\";\"!==r.charAt(r.length-1)&&(r+=\";\"),r=i+\" \"+r),a.default.setAttribute(n,\"style\",r),t.Push(n)},Id:function(t,e){var r=t.GetArgument(e),n=o(t,e);a.default.setAttribute(n,\"id\",r),t.Push(n)}},o=function(t,e){var r=t.ParseArg(e);if(!a.default.isInferred(r))return r;var n=a.default.getChildren(r);if(1===n.length)return n[0];var o=t.create(\"node\",\"mrow\");return a.default.copyChildren(r,o),a.default.copyAttributes(r,o),o};e.default=n},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MhchemConfiguration=void 0;var a=r(0),n=r(1),o=r(2),i=r(8),s=r(11),c=r(60),l={};l.Macro=i.default.Macro,l.xArrow=s.AmsMethods.xArrow,l.Machine=function(t,e,r){try{var a=t.GetArgument(e),n=c.mhchemParser.go(a,r),i=c.texify.go(n);t.string=i+t.string.substr(t.i),t.i=0}catch(t){throw new o.default(t[0],t[1],t.slice(2))}},new n.CommandMap(\"mhchem\",{ce:[\"Machine\",\"ce\"],pu:[\"Machine\",\"pu\"],longrightleftharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle{-}\\\\!\\\\!{\\\\rightharpoonup}}{\\\\smash{{\\\\leftharpoondown}\\\\!\\\\!{-}}}\"],longRightleftharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle{-}\\\\!\\\\!{\\\\rightharpoonup}}{\\\\smash{\\\\leftharpoondown}}\"],longLeftrightharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle\\\\vphantom{{-}}{\\\\rightharpoonup}}{\\\\smash{{\\\\leftharpoondown}\\\\!\\\\!{-}}}\"],longleftrightarrows:[\"Macro\",\"\\\\stackrel{\\\\longrightarrow}{\\\\smash{\\\\longleftarrow}\\\\Rule{0px}{.25em}{0px}}\"],tripledash:[\"Macro\",\"\\\\vphantom{-}\\\\raise2mu{\\\\kern2mu\\\\tiny\\\\text{-}\\\\kern1mu\\\\text{-}\\\\kern1mu\\\\text{-}\\\\kern2mu}\"],xrightarrow:[\"xArrow\",8594,5,6],xleftarrow:[\"xArrow\",8592,7,3],xleftrightarrow:[\"xArrow\",8596,6,6],xrightleftharpoons:[\"xArrow\",8652,5,7],xRightleftharpoons:[\"xArrow\",8652,5,7],xLeftrightharpoons:[\"xArrow\",8652,5,7]},l),e.MhchemConfiguration=a.Configuration.create(\"mhchem\",{handler:{macro:[\"mhchem\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a={go:function(t,e){if(!t)return[];void 0===e&&(e=\"ce\");var r,n=\"0\",o={};o.parenthesisLevel=0,t=(t=(t=t.replace(/\\n/g,\" \")).replace(/[\\u2212\\u2013\\u2014\\u2010]/g,\"-\")).replace(/[\\u2026]/g,\"...\");for(var i=10,s=[];;){r!==t?(i=10,r=t):i--;var c=a.stateMachines[e],l=c.transitions[n]||c.transitions[\"*\"];t:for(var u=0;u<l.length;u++){var d=a.patterns.match_(l[u].pattern,t);if(d){for(var p=l[u].task,f=0;f<p.action_.length;f++){var m;if(c.actions[p.action_[f].type_])m=c.actions[p.action_[f].type_](o,d.match_,p.action_[f].option);else{if(!a.actions[p.action_[f].type_])throw[\"MhchemBugA\",\"mhchem bug A. Please report. (\"+p.action_[f].type_+\")\"];m=a.actions[p.action_[f].type_](o,d.match_,p.action_[f].option)}a.concatArray(s,m)}if(n=p.nextState||n,!(t.length>0))return s;if(p.revisit||(t=d.remainder),!p.toContinue)break t}}if(i<=0)throw[\"MhchemBugU\",\"mhchem bug U. Please report.\"]}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var r=0;r<e.length;r++)t.push(e[r]);else t.push(e)},patterns:{patterns:{empty:/^$/,else:/^./,else2:/^./,space:/^\\s/,\"space A\":/^\\s(?=[A-Z\\\\$])/,space$:/^\\s$/,\"a-z\":/^[a-z]/,x:/^x/,x$:/^x$/,i$:/^i$/,letters:/^(?:[a-zA-Z\\u03B1-\\u03C9\\u0391-\\u03A9?@]|(?:\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))))+/,\"\\\\greek\":/^\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))/,\"one lowercase latin letter $\":/^(?:([a-z])(?:$|[^a-zA-Z]))$/,\"$one lowercase latin letter$ $\":/^\\$(?:([a-z])(?:$|[^a-zA-Z]))\\$$/,\"one lowercase greek letter $\":/^(?:\\$?[\\u03B1-\\u03C9]\\$?|\\$?\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\\s*\\$?)(?:\\s+|\\{\\}|(?![a-zA-Z]))$/,digits:/^[0-9]+/,\"-9.,9\":/^[+\\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))/,\"-9.,9 no missing 0\":/^[+\\-]?[0-9]+(?:[.,][0-9]+)?/,\"(-)(9.,9)(e)(99)\":function(t){var e=t.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))?(\\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))\\))?(?:([eE]|\\s*(\\*|x|\\\\times|\\u00D7)\\s*10\\^)([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\}))?/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},\"(-)(9)^(-9)\":function(t){var e=t.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+)?)\\^([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\})/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},\"state of aggregation $\":function(t){var e=a.patterns.findObserveGroups(t,\"\",/^\\([a-z]{1,3}(?=[\\),])/,\")\",\"\");if(e&&e.remainder.match(/^($|[\\s,;\\)\\]\\}])/))return e;var r=t.match(/^(?:\\((?:\\\\ca\\s?)?\\$[amothc]\\$\\))/);return r?{match_:r[0],remainder:t.substr(r[0].length)}:null},\"_{(state of aggregation)}$\":/^_\\{(\\([a-z]{1,3}\\))\\}/,\"{[(\":/^(?:\\\\\\{|\\[|\\()/,\")]}\":/^(?:\\)|\\]|\\\\\\})/,\", \":/^[,;]\\s*/,\",\":/^[,;]/,\".\":/^[.]/,\". \":/^([.\\u22C5\\u00B7\\u2022])\\s*/,\"...\":/^\\.\\.\\.(?=$|[^.])/,\"* \":/^([*])\\s*/,\"^{(...)}\":function(t){return a.patterns.findObserveGroups(t,\"^{\",\"\",\"\",\"}\")},\"^($...$)\":function(t){return a.patterns.findObserveGroups(t,\"^\",\"$\",\"$\",\"\")},\"^a\":/^\\^([0-9]+|[^\\\\_])/,\"^\\\\x{}{}\":function(t){return a.patterns.findObserveGroups(t,\"^\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"^\\\\x{}\":function(t){return a.patterns.findObserveGroups(t,\"^\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"^\\\\x\":/^\\^(\\\\[a-zA-Z]+)\\s*/,\"^(-1)\":/^\\^(-?\\d+)/,\"'\":/^'/,\"_{(...)}\":function(t){return a.patterns.findObserveGroups(t,\"_{\",\"\",\"\",\"}\")},\"_($...$)\":function(t){return a.patterns.findObserveGroups(t,\"_\",\"$\",\"$\",\"\")},_9:/^_([+\\-]?[0-9]+|[^\\\\])/,\"_\\\\x{}{}\":function(t){return a.patterns.findObserveGroups(t,\"_\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"_\\\\x{}\":function(t){return a.patterns.findObserveGroups(t,\"_\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"_\\\\x\":/^_(\\\\[a-zA-Z]+)\\s*/,\"^_\":/^(?:\\^(?=_)|\\_(?=\\^)|[\\^_]$)/,\"{}\":/^\\{\\}/,\"{...}\":function(t){return a.patterns.findObserveGroups(t,\"\",\"{\",\"}\",\"\")},\"{(...)}\":function(t){return a.patterns.findObserveGroups(t,\"{\",\"\",\"\",\"}\")},\"$...$\":function(t){return a.patterns.findObserveGroups(t,\"\",\"$\",\"$\",\"\")},\"${(...)}$\":function(t){return a.patterns.findObserveGroups(t,\"${\",\"\",\"\",\"}$\")},\"$(...)$\":function(t){return a.patterns.findObserveGroups(t,\"$\",\"\",\"\",\"$\")},\"=<>\":/^[=<>]/,\"#\":/^[#\\u2261]/,\"+\":/^\\+/,\"-$\":/^-(?=[\\s_},;\\]/]|$|\\([a-z]+\\))/,\"-9\":/^-(?=[0-9])/,\"- orbital overlap\":/^-(?=(?:[spd]|sp)(?:$|[\\s,;\\)\\]\\}]))/,\"-\":/^-/,\"pm-operator\":/^(?:\\\\pm|\\$\\\\pm\\$|\\+-|\\+\\/-)/,operator:/^(?:\\+|(?:[\\-=<>]|<<|>>|\\\\approx|\\$\\\\approx\\$)(?=\\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\\(v\\)|\\^|\\(\\^\\))(?=$|[\\s,;\\)\\]\\}])/,\"\\\\bond{(...)}\":function(t){return a.patterns.findObserveGroups(t,\"\\\\bond{\",\"\",\"\",\"}\")},\"->\":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\\u2192\\u27F6\\u21CC])/,CMT:/^[CMT](?=\\[)/,\"[(...)]\":function(t){return a.patterns.findObserveGroups(t,\"[\",\"\",\"\",\"]\")},\"1st-level escape\":/^(&|\\\\\\\\|\\\\hline)\\s*/,\"\\\\,\":/^(?:\\\\[,\\ ;:])/,\"\\\\x{}{}\":function(t){return a.patterns.findObserveGroups(t,\"\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"\\\\x{}\":function(t){return a.patterns.findObserveGroups(t,\"\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"\\\\ca\":/^\\\\ca(?:\\s+|(?![a-zA-Z]))/,\"\\\\x\":/^(?:\\\\[a-zA-Z]+\\s*|\\\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\\/~|]/,\"\\\\frac{(...)}\":function(t){return a.patterns.findObserveGroups(t,\"\\\\frac{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\overset{(...)}\":function(t){return a.patterns.findObserveGroups(t,\"\\\\overset{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\underset{(...)}\":function(t){return a.patterns.findObserveGroups(t,\"\\\\underset{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\underbrace{(...)}\":function(t){return a.patterns.findObserveGroups(t,\"\\\\underbrace{\",\"\",\"\",\"}_\",\"{\",\"\",\"\",\"}\")},\"\\\\color{(...)}0\":function(t){return a.patterns.findObserveGroups(t,\"\\\\color{\",\"\",\"\",\"}\")},\"\\\\color{(...)}{(...)}1\":function(t){return a.patterns.findObserveGroups(t,\"\\\\color{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\color(...){(...)}2\":function(t){return a.patterns.findObserveGroups(t,\"\\\\color\",\"\\\\\",\"\",/^(?=\\{)/,\"{\",\"\",\"\",\"}\")},\"\\\\ce{(...)}\":function(t){return a.patterns.findObserveGroups(t,\"\\\\ce{\",\"\",\"\",\"}\")},oxidation$:/^(?:[+-][IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\"d-oxidation$\":/^(?:[+-]?\\s?[IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\"roman numeral\":/^[IVX]+/,\"1/2$\":/^[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+(?:\\$[a-z]\\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\\([+\\-]?[0-9]+\\/[0-9]+\\)|[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+|[+\\-]?[0-9]+[.,][0-9]+|[+\\-]?\\.[0-9]+|[+\\-]?[0-9]+)(?:[a-z](?=\\s*[A-Z]))?)|[+\\-]?[a-z](?=\\s*[A-Z])|\\+(?!\\s))/))return{match_:e[0],remainder:t.substr(e[0].length)};var r=a.patterns.findObserveGroups(t,\"\",\"$\",\"$\",\"\");return r&&(e=r.match_.match(/^\\$(?:\\(?[+\\-]?(?:[0-9]*[a-z]?[+\\-])?[0-9]*[a-z](?:[+\\-][0-9]*[a-z]?)?\\)?|\\+|-)\\$$/))?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},\"(KV letters),\":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\\([a-z]+\\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\\ \\+\\-\\,\\.\\(\\)]+[a-z])+[0-9\\ \\+\\-\\,\\.\\(\\)]*|(?:[a-z][0-9\\ \\+\\-\\,\\.\\(\\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,\"/\":/^\\s*(\\/)\\s*/,\"//\":/^\\s*(\\/\\/)\\s*/,\"*\":/^\\s*[*.]\\s*/},findObserveGroups:function(t,e,r,a,n,o,i,s,c,l){var u=function(t,e){if(\"string\"==typeof e)return 0!==t.indexOf(e)?null:e;var r=t.match(e);return r?r[0]:null},d=u(t,e);if(null===d)return null;if(t=t.substr(d.length),null===(d=u(t,r)))return null;var p=function(t,e,r){for(var a=0;e<t.length;){var n=t.charAt(e),o=u(t.substr(e),r);if(null!==o&&0===a)return{endMatchBegin:e,endMatchEnd:e+o.length};if(\"{\"===n)a++;else if(\"}\"===n){if(0===a)throw[\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"];a--}e++}return null}(t,d.length,a||n);if(null===p)return null;var f=t.substring(0,a?p.endMatchEnd:p.endMatchBegin);if(o||i){var m=this.findObserveGroups(t.substr(p.endMatchEnd),o,i,s,c);if(null===m)return null;var h=[f,m.match_];return{match_:l?h.join(\"\"):h,remainder:m.remainder}}return{match_:f,remainder:t.substr(p.endMatchEnd)}},match_:function(t,e){var r=a.patterns.patterns[t];if(void 0===r)throw[\"MhchemBugP\",\"mhchem bug P. Please report. (\"+t+\")\"];if(\"function\"==typeof r)return a.patterns.patterns[t](e);var n=e.match(r);return n?{match_:n[2]?[n[1],n[2]]:n[1]?n[1]:n[0],remainder:e.substr(n[0].length)}:null}},actions:{\"a=\":function(t,e){t.a=(t.a||\"\")+e},\"b=\":function(t,e){t.b=(t.b||\"\")+e},\"p=\":function(t,e){t.p=(t.p||\"\")+e},\"o=\":function(t,e){t.o=(t.o||\"\")+e},\"q=\":function(t,e){t.q=(t.q||\"\")+e},\"d=\":function(t,e){t.d=(t.d||\"\")+e},\"rm=\":function(t,e){t.rm=(t.rm||\"\")+e},\"text=\":function(t,e){t.text_=(t.text_||\"\")+e},insert:function(t,e,r){return{type_:r}},\"insert+p1\":function(t,e,r){return{type_:r,p1:e}},\"insert+p1+p2\":function(t,e,r){return{type_:r,p1:e[0],p2:e[1]}},copy:function(t,e){return e},rm:function(t,e){return{type_:\"rm\",p1:e||\"\"}},text:function(t,e){return a.go(e,\"text\")},\"{text}\":function(t,e){var r=[\"{\"];return a.concatArray(r,a.go(e,\"text\")),r.push(\"}\"),r},\"tex-math\":function(t,e){return a.go(e,\"tex-math\")},\"tex-math tight\":function(t,e){return a.go(e,\"tex-math tight\")},bond:function(t,e,r){return{type_:\"bond\",kind_:r||e}},\"color0-output\":function(t,e){return{type_:\"color0\",color:e[0]}},ce:function(t,e){return a.go(e)},\"1/2\":function(t,e){var r=[];e.match(/^[+\\-]/)&&(r.push(e.substr(0,1)),e=e.substr(1));var a=e.match(/^([0-9]+|\\$[a-z]\\$|[a-z])\\/([0-9]+)(\\$[a-z]\\$|[a-z])?$/);return a[1]=a[1].replace(/\\$/g,\"\"),r.push({type_:\"frac\",p1:a[1],p2:a[2]}),a[3]&&(a[3]=a[3].replace(/\\$/g,\"\"),r.push({type_:\"tex-math\",p1:a[3]})),r},\"9,9\":function(t,e){return a.go(e,\"9,9\")}},createTransitions:function(t){var e,r,a,n,o={};for(e in t)for(r in t[e])for(a=r.split(\"|\"),t[e][r].stateArray=a,n=0;n<a.length;n++)o[a[n]]=[];for(e in t)for(r in t[e])for(a=t[e][r].stateArray||[],n=0;n<a.length;n++){var i=t[e][r];if(i.action_){i.action_=[].concat(i.action_);for(var s=0;s<i.action_.length;s++)\"string\"==typeof i.action_[s]&&(i.action_[s]={type_:i.action_[s]})}else i.action_=[];for(var c=e.split(\"|\"),l=0;l<c.length;l++)if(\"*\"===a[n])for(var u in o)o[u].push({pattern:c[l],task:i});else o[a[n]].push({pattern:c[l],task:i})}return o},stateMachines:{}};a.stateMachines={ce:{transitions:a.createTransitions({empty:{\"*\":{action_:\"output\"}},else:{\"0|1|2\":{action_:\"beginsWithBond=false\",revisit:!0,toContinue:!0}},oxidation$:{0:{action_:\"oxidation-output\"}},CMT:{r:{action_:\"rdt=\",nextState:\"rt\"},rd:{action_:\"rqt=\",nextState:\"rdt\"}},arrowUpDown:{\"0|1|2|as\":{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"1\"}},uprightEntities:{\"0|1|2\":{action_:[\"o=\",\"output\"],nextState:\"1\"}},orbital:{\"0|1|2|3\":{action_:\"o=\",nextState:\"o\"}},\"->\":{\"0|1|2|3\":{action_:\"r=\",nextState:\"r\"},\"a|as\":{action_:[\"output\",\"r=\"],nextState:\"r\"},\"*\":{action_:[\"output\",\"r=\"],nextState:\"r\"}},\"+\":{o:{action_:\"d= kv\",nextState:\"d\"},\"d|D\":{action_:\"d=\",nextState:\"d\"},q:{action_:\"d=\",nextState:\"qd\"},\"qd|qD\":{action_:\"d=\",nextState:\"qd\"},dq:{action_:[\"output\",\"d=\"],nextState:\"d\"},3:{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"0\"}},amount:{\"0|2\":{action_:\"a=\",nextState:\"a\"}},\"pm-operator\":{\"0|1|2|a|as\":{action_:[\"sb=false\",\"output\",{type_:\"operator\",option:\"\\\\pm\"}],nextState:\"0\"}},operator:{\"0|1|2|a|as\":{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"0\"}},\"-$\":{\"o|q\":{action_:[\"charge or bond\",\"output\"],nextState:\"qd\"},d:{action_:\"d=\",nextState:\"d\"},D:{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"},q:{action_:\"d=\",nextState:\"qd\"},qd:{action_:\"d=\",nextState:\"qd\"},\"qD|dq\":{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"}},\"-9\":{\"3|o\":{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"3\"}},\"- orbital overlap\":{o:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"},d:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"}},\"-\":{\"0|1|2\":{action_:[{type_:\"output\",option:1},\"beginsWithBond=true\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"},3:{action_:{type_:\"bond\",option:\"-\"}},a:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"},as:{action_:[{type_:\"output\",option:2},{type_:\"bond\",option:\"-\"}],nextState:\"3\"},b:{action_:\"b=\"},o:{action_:{type_:\"- after o/d\",option:!1},nextState:\"2\"},q:{action_:{type_:\"- after o/d\",option:!1},nextState:\"2\"},\"d|qd|dq\":{action_:{type_:\"- after o/d\",option:!0},nextState:\"2\"},\"D|qD|p\":{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"}},amount2:{\"1|3\":{action_:\"a=\",nextState:\"a\"}},letters:{\"0|1|2|3|a|as|b|p|bp|o\":{action_:\"o=\",nextState:\"o\"},\"q|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"},\"d|D|qd|qD\":{action_:\"o after d\",nextState:\"o\"}},digits:{o:{action_:\"q=\",nextState:\"q\"},\"d|D\":{action_:\"q=\",nextState:\"dq\"},q:{action_:[\"output\",\"o=\"],nextState:\"o\"},a:{action_:\"o=\",nextState:\"o\"}},\"space A\":{\"b|p|bp\":{}},space:{a:{nextState:\"as\"},0:{action_:\"sb=false\"},\"1|2\":{action_:\"sb=true\"},\"r|rt|rd|rdt|rdq\":{action_:\"output\",nextState:\"0\"},\"*\":{action_:[\"output\",\"sb=true\"],nextState:\"1\"}},\"1st-level escape\":{\"1|2\":{action_:[\"output\",{type_:\"insert+p1\",option:\"1st-level escape\"}]},\"*\":{action_:[\"output\",{type_:\"insert+p1\",option:\"1st-level escape\"}],nextState:\"0\"}},\"[(...)]\":{\"r|rt\":{action_:\"rd=\",nextState:\"rd\"},\"rd|rdt\":{action_:\"rq=\",nextState:\"rdq\"}},\"...\":{\"o|d|D|dq|qd|qD\":{action_:[\"output\",{type_:\"bond\",option:\"...\"}],nextState:\"3\"},\"*\":{action_:[{type_:\"output\",option:1},{type_:\"insert\",option:\"ellipsis\"}],nextState:\"1\"}},\". |* \":{\"*\":{action_:[\"output\",{type_:\"insert\",option:\"addition compound\"}],nextState:\"1\"}},\"state of aggregation $\":{\"*\":{action_:[\"output\",\"state of aggregation\"],nextState:\"1\"}},\"{[(\":{\"a|as|o\":{action_:[\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"},\"0|1|2|3\":{action_:[\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"},\"*\":{action_:[\"output\",\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"}},\")]}\":{\"0|1|2|3|b|p|bp|o\":{action_:[\"o=\",\"parenthesisLevel--\"],nextState:\"o\"},\"a|as|d|D|q|qd|qD|dq\":{action_:[\"output\",\"o=\",\"parenthesisLevel--\"],nextState:\"o\"}},\", \":{\"*\":{action_:[\"output\",\"comma\"],nextState:\"0\"}},\"^_\":{\"*\":{}},\"^{(...)}|^($...$)\":{\"0|1|2|as\":{action_:\"b=\",nextState:\"b\"},p:{action_:\"b=\",nextState:\"bp\"},\"3|o\":{action_:\"d= kv\",nextState:\"D\"},q:{action_:\"d=\",nextState:\"qD\"},\"d|D|qd|qD|dq\":{action_:[\"output\",\"d=\"],nextState:\"D\"}},\"^a|^\\\\x{}{}|^\\\\x{}|^\\\\x|'\":{\"0|1|2|as\":{action_:\"b=\",nextState:\"b\"},p:{action_:\"b=\",nextState:\"bp\"},\"3|o\":{action_:\"d= kv\",nextState:\"d\"},q:{action_:\"d=\",nextState:\"qd\"},\"d|qd|D|qD\":{action_:\"d=\"},dq:{action_:[\"output\",\"d=\"],nextState:\"d\"}},\"_{(state of aggregation)}$\":{\"d|D|q|qd|qD|dq\":{action_:[\"output\",\"q=\"],nextState:\"q\"}},\"_{(...)}|_($...$)|_9|_\\\\x{}{}|_\\\\x{}|_\\\\x\":{\"0|1|2|as\":{action_:\"p=\",nextState:\"p\"},b:{action_:\"p=\",nextState:\"bp\"},\"3|o\":{action_:\"q=\",nextState:\"q\"},\"d|D\":{action_:\"q=\",nextState:\"dq\"},\"q|qd|qD|dq\":{action_:[\"output\",\"q=\"],nextState:\"q\"}},\"=<>\":{\"0|1|2|3|a|as|o|q|d|D|qd|qD|dq\":{action_:[{type_:\"output\",option:2},\"bond\"],nextState:\"3\"}},\"#\":{\"0|1|2|3|a|as|o\":{action_:[{type_:\"output\",option:2},{type_:\"bond\",option:\"#\"}],nextState:\"3\"}},\"{}\":{\"*\":{action_:{type_:\"output\",option:1},nextState:\"1\"}},\"{...}\":{\"0|1|2|3|a|as|b|p|bp\":{action_:\"o=\",nextState:\"o\"},\"o|d|D|q|qd|qD|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"}},\"$...$\":{a:{action_:\"a=\"},\"0|1|2|3|as|b|p|bp|o\":{action_:\"o=\",nextState:\"o\"},\"as|o\":{action_:\"o=\"},\"q|d|D|qd|qD|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"}},\"\\\\bond{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"bond\"],nextState:\"3\"}},\"\\\\frac{(...)}\":{\"*\":{action_:[{type_:\"output\",option:1},\"frac-output\"],nextState:\"3\"}},\"\\\\overset{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"overset-output\"],nextState:\"3\"}},\"\\\\underset{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"underset-output\"],nextState:\"3\"}},\"\\\\underbrace{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"underbrace-output\"],nextState:\"3\"}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:[{type_:\"output\",option:2},\"color-output\"],nextState:\"3\"}},\"\\\\color{(...)}0\":{\"*\":{action_:[{type_:\"output\",option:2},\"color0-output\"]}},\"\\\\ce{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"ce\"],nextState:\"3\"}},\"\\\\,\":{\"*\":{action_:[{type_:\"output\",option:1},\"copy\"],nextState:\"1\"}},\"\\\\x{}{}|\\\\x{}|\\\\x\":{\"0|1|2|3|a|as|b|p|bp|o|c0\":{action_:[\"o=\",\"output\"],nextState:\"3\"},\"*\":{action_:[\"output\",\"o=\",\"output\"],nextState:\"3\"}},others:{\"*\":{action_:[{type_:\"output\",option:1},\"copy\"],nextState:\"3\"}},else2:{a:{action_:\"a to o\",nextState:\"o\",revisit:!0},as:{action_:[\"output\",\"sb=true\"],nextState:\"1\",revisit:!0},\"r|rt|rd|rdt|rdq\":{action_:[\"output\"],nextState:\"0\",revisit:!0},\"*\":{action_:[\"output\",\"copy\"],nextState:\"3\"}}}),actions:{\"o after d\":function(t,e){var r;if((t.d||\"\").match(/^[0-9]+$/)){var n=t.d;t.d=void 0,r=this.output(t),t.b=n}else r=this.output(t);return a.actions[\"o=\"](t,e),r},\"d= kv\":function(t,e){t.d=e,t.dType=\"kv\"},\"charge or bond\":function(t,e){if(t.beginsWithBond){var r=[];return a.concatArray(r,this.output(t)),a.concatArray(r,a.actions.bond(t,e,\"-\")),r}t.d=e},\"- after o/d\":function(t,e,r){var n=a.patterns.match_(\"orbital\",t.o||\"\"),o=a.patterns.match_(\"one lowercase greek letter $\",t.o||\"\"),i=a.patterns.match_(\"one lowercase latin letter $\",t.o||\"\"),s=a.patterns.match_(\"$one lowercase latin letter$ $\",t.o||\"\"),c=\"-\"===e&&(n&&\"\"===n.remainder||o||i||s);!c||t.a||t.b||t.p||t.d||t.q||n||!i||(t.o=\"$\"+t.o+\"$\");var l=[];return c?(a.concatArray(l,this.output(t)),l.push({type_:\"hyphen\"})):(n=a.patterns.match_(\"digits\",t.d||\"\"),r&&n&&\"\"===n.remainder?(a.concatArray(l,a.actions[\"d=\"](t,e)),a.concatArray(l,this.output(t))):(a.concatArray(l,this.output(t)),a.concatArray(l,a.actions.bond(t,e,\"-\")))),l},\"a to o\":function(t){t.o=t.a,t.a=void 0},\"sb=true\":function(t){t.sb=!0},\"sb=false\":function(t){t.sb=!1},\"beginsWithBond=true\":function(t){t.beginsWithBond=!0},\"beginsWithBond=false\":function(t){t.beginsWithBond=!1},\"parenthesisLevel++\":function(t){t.parenthesisLevel++},\"parenthesisLevel--\":function(t){t.parenthesisLevel--},\"state of aggregation\":function(t,e){return{type_:\"state of aggregation\",p1:a.go(e,\"o\")}},comma:function(t,e){var r=e.replace(/\\s*$/,\"\");return r!==e&&0===t.parenthesisLevel?{type_:\"comma enumeration L\",p1:r}:{type_:\"comma enumeration M\",p1:r}},output:function(t,e,r){var n,o,i;t.r?(o=\"M\"===t.rdt?a.go(t.rd,\"tex-math\"):\"T\"===t.rdt?[{type_:\"text\",p1:t.rd||\"\"}]:a.go(t.rd),i=\"M\"===t.rqt?a.go(t.rq,\"tex-math\"):\"T\"===t.rqt?[{type_:\"text\",p1:t.rq||\"\"}]:a.go(t.rq),n={type_:\"arrow\",r:t.r,rd:o,rq:i}):(n=[],(t.a||t.b||t.p||t.o||t.q||t.d||r)&&(t.sb&&n.push({type_:\"entitySkip\"}),t.o||t.q||t.d||t.b||t.p||2===r?t.o||t.q||t.d||!t.b&&!t.p?t.o&&\"kv\"===t.dType&&a.patterns.match_(\"d-oxidation$\",t.d||\"\")?t.dType=\"oxidation\":t.o&&\"kv\"===t.dType&&!t.q&&(t.dType=void 0):(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):(t.o=t.a,t.a=void 0),n.push({type_:\"chemfive\",a:a.go(t.a,\"a\"),b:a.go(t.b,\"bd\"),p:a.go(t.p,\"pq\"),o:a.go(t.o,\"o\"),q:a.go(t.q,\"pq\"),d:a.go(t.d,\"oxidation\"===t.dType?\"oxidation\":\"bd\"),dType:t.dType})));for(var s in t)\"parenthesisLevel\"!==s&&\"beginsWithBond\"!==s&&delete t[s];return n},\"oxidation-output\":function(t,e){var r=[\"{\"];return a.concatArray(r,a.go(e,\"oxidation\")),r.push(\"}\"),r},\"frac-output\":function(t,e){return{type_:\"frac-ce\",p1:a.go(e[0]),p2:a.go(e[1])}},\"overset-output\":function(t,e){return{type_:\"overset\",p1:a.go(e[0]),p2:a.go(e[1])}},\"underset-output\":function(t,e){return{type_:\"underset\",p1:a.go(e[0]),p2:a.go(e[1])}},\"underbrace-output\":function(t,e){return{type_:\"underbrace\",p1:a.go(e[0]),p2:a.go(e[1])}},\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:a.go(e[1])}},\"r=\":function(t,e){t.r=e},\"rdt=\":function(t,e){t.rdt=e},\"rd=\":function(t,e){t.rd=e},\"rqt=\":function(t,e){t.rqt=e},\"rq=\":function(t,e){t.rq=e},operator:function(t,e,r){return{type_:\"operator\",kind_:r||e}}}},a:{transitions:a.createTransitions({empty:{\"*\":{}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"1\",revisit:!0}},\"$(...)$\":{\"*\":{action_:\"tex-math tight\",nextState:\"1\"}},\",\":{\"*\":{action_:{type_:\"insert\",option:\"commaDecimal\"}}},else2:{\"*\":{action_:\"copy\"}}}),actions:{}},o:{transitions:a.createTransitions({empty:{\"*\":{}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"1\",revisit:!0}},letters:{\"*\":{action_:\"rm\"}},\"\\\\ca\":{\"*\":{action_:{type_:\"insert\",option:\"circa\"}}},\"\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"{text}\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{}},text:{transitions:a.createTransitions({empty:{\"*\":{action_:\"output\"}},\"{...}\":{\"*\":{action_:\"text=\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"\\\\greek\":{\"*\":{action_:[\"output\",\"rm\"]}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:[\"output\",\"copy\"]}},else:{\"*\":{action_:\"text=\"}}}),actions:{output:function(t){if(t.text_){var e={type_:\"text\",p1:t.text_};for(var r in t)delete t[r];return e}}}},pq:{transitions:a.createTransitions({empty:{\"*\":{}},\"state of aggregation $\":{\"*\":{action_:\"state of aggregation\"}},i$:{0:{nextState:\"!f\",revisit:!0}},\"(KV letters),\":{0:{action_:\"rm\",nextState:\"0\"}},formula$:{0:{nextState:\"f\",revisit:!0}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"!f\",revisit:!0}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"text\"}},\"a-z\":{f:{action_:\"tex-math\"}},letters:{\"*\":{action_:\"rm\"}},\"-9.,9\":{\"*\":{action_:\"9,9\"}},\",\":{\"*\":{action_:{type_:\"insert+p1\",option:\"comma enumeration S\"}}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:\"color-output\"}},\"\\\\color{(...)}0\":{\"*\":{action_:\"color0-output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:\"ce\"}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{\"state of aggregation\":function(t,e){return{type_:\"state of aggregation subscript\",p1:a.go(e,\"o\")}},\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:a.go(e[1],\"pq\")}}}},bd:{transitions:a.createTransitions({empty:{\"*\":{}},x$:{0:{nextState:\"!f\",revisit:!0}},formula$:{0:{nextState:\"f\",revisit:!0}},else:{0:{nextState:\"!f\",revisit:!0}},\"-9.,9 no missing 0\":{\"*\":{action_:\"9,9\"}},\".\":{\"*\":{action_:{type_:\"insert\",option:\"electron dot\"}}},\"a-z\":{f:{action_:\"tex-math\"}},x:{\"*\":{action_:{type_:\"insert\",option:\"KV x\"}}},letters:{\"*\":{action_:\"rm\"}},\"'\":{\"*\":{action_:{type_:\"insert\",option:\"prime\"}}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"text\"}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:\"color-output\"}},\"\\\\color{(...)}0\":{\"*\":{action_:\"color0-output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:\"ce\"}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:a.go(e[1],\"bd\")}}}},oxidation:{transitions:a.createTransitions({empty:{\"*\":{}},\"roman numeral\":{\"*\":{action_:\"roman-numeral\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},else:{\"*\":{action_:\"copy\"}}}),actions:{\"roman-numeral\":function(t,e){return{type_:\"roman numeral\",p1:e||\"\"}}}},\"tex-math\":{transitions:a.createTransitions({empty:{\"*\":{action_:\"output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:[\"output\",\"ce\"]}},\"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"o=\"}},else:{\"*\":{action_:\"o=\"}}}),actions:{output:function(t){if(t.o){var e={type_:\"tex-math\",p1:t.o};for(var r in t)delete t[r];return e}}}},\"tex-math tight\":{transitions:a.createTransitions({empty:{\"*\":{action_:\"output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:[\"output\",\"ce\"]}},\"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"o=\"}},\"-|+\":{\"*\":{action_:\"tight operator\"}},else:{\"*\":{action_:\"o=\"}}}),actions:{\"tight operator\":function(t,e){t.o=(t.o||\"\")+\"{\"+e+\"}\"},output:function(t){if(t.o){var e={type_:\"tex-math\",p1:t.o};for(var r in t)delete t[r];return e}}}},\"9,9\":{transitions:a.createTransitions({empty:{\"*\":{}},\",\":{\"*\":{action_:\"comma\"}},else:{\"*\":{action_:\"copy\"}}}),actions:{comma:function(){return{type_:\"commaDecimal\"}}}},pu:{transitions:a.createTransitions({empty:{\"*\":{action_:\"output\"}},space$:{\"*\":{action_:[\"output\",\"space\"]}},\"{[(|)]}\":{\"0|a\":{action_:\"copy\"}},\"(-)(9)^(-9)\":{0:{action_:\"number^\",nextState:\"a\"}},\"(-)(9.,9)(e)(99)\":{0:{action_:\"enumber\",nextState:\"a\"}},space:{\"0|a\":{}},\"pm-operator\":{\"0|a\":{action_:{type_:\"operator\",option:\"\\\\pm\"},nextState:\"0\"}},operator:{\"0|a\":{action_:\"copy\",nextState:\"0\"}},\"//\":{d:{action_:\"o=\",nextState:\"/\"}},\"/\":{d:{action_:\"o=\",nextState:\"/\"}},\"{...}|else\":{\"0|d\":{action_:\"d=\",nextState:\"d\"},a:{action_:[\"space\",\"d=\"],nextState:\"d\"},\"/|q\":{action_:\"q=\",nextState:\"q\"}}}),actions:{enumber:function(t,e){var r=[];return\"+-\"===e[0]||\"+/-\"===e[0]?r.push(\"\\\\pm \"):e[0]&&r.push(e[0]),e[1]&&(a.concatArray(r,a.go(e[1],\"pu-9,9\")),e[2]&&(e[2].match(/[,.]/)?a.concatArray(r,a.go(e[2],\"pu-9,9\")):r.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),\"e\"===e[3]||\"*\"===e[3].substr(0,1)?r.push({type_:\"cdot\"}):r.push({type_:\"times\"}))),e[3]&&r.push(\"10^{\"+e[5]+\"}\"),r},\"number^\":function(t,e){var r=[];return\"+-\"===e[0]||\"+/-\"===e[0]?r.push(\"\\\\pm \"):e[0]&&r.push(e[0]),a.concatArray(r,a.go(e[1],\"pu-9,9\")),r.push(\"^{\"+e[2]+\"}\"),r},operator:function(t,e,r){return{type_:\"operator\",kind_:r||e}},space:function(){return{type_:\"pu-space-1\"}},output:function(t){var e,r=a.patterns.match_(\"{(...)}\",t.d||\"\");r&&\"\"===r.remainder&&(t.d=r.match_);var n=a.patterns.match_(\"{(...)}\",t.q||\"\");if(n&&\"\"===n.remainder&&(t.q=n.match_),t.d&&(t.d=t.d.replace(/\\u00B0C|\\^oC|\\^{o}C/g,\"{}^{\\\\circ}C\"),t.d=t.d.replace(/\\u00B0F|\\^oF|\\^{o}F/g,\"{}^{\\\\circ}F\")),t.q){t.q=t.q.replace(/\\u00B0C|\\^oC|\\^{o}C/g,\"{}^{\\\\circ}C\"),t.q=t.q.replace(/\\u00B0F|\\^oF|\\^{o}F/g,\"{}^{\\\\circ}F\");var o={d:a.go(t.d,\"pu\"),q:a.go(t.q,\"pu\")};\"//\"===t.o?e={type_:\"pu-frac\",p1:o.d,p2:o.q}:(e=o.d,o.d.length>1||o.q.length>1?e.push({type_:\" / \"}):e.push({type_:\"/\"}),a.concatArray(e,o.q))}else e=a.go(t.d,\"pu-2\");for(var i in t)delete t[i];return e}}},\"pu-2\":{transitions:a.createTransitions({empty:{\"*\":{action_:\"output\"}},\"*\":{\"*\":{action_:[\"output\",\"cdot\"],nextState:\"0\"}},\"\\\\x\":{\"*\":{action_:\"rm=\"}},space:{\"*\":{action_:[\"output\",\"space\"],nextState:\"0\"}},\"^{(...)}|^(-1)\":{1:{action_:\"^(-1)\"}},\"-9.,9\":{0:{action_:\"rm=\",nextState:\"0\"},1:{action_:\"^(-1)\",nextState:\"0\"}},\"{...}|else\":{\"*\":{action_:\"rm=\",nextState:\"1\"}}}),actions:{cdot:function(){return{type_:\"tight cdot\"}},\"^(-1)\":function(t,e){t.rm+=\"^{\"+e+\"}\"},space:function(){return{type_:\"pu-space-2\"}},output:function(t){var e=[];if(t.rm){var r=a.patterns.match_(\"{(...)}\",t.rm||\"\");e=r&&\"\"===r.remainder?a.go(r.match_,\"pu\"):{type_:\"rm\",p1:t.rm}}for(var n in t)delete t[n];return e}}},\"pu-9,9\":{transitions:a.createTransitions({empty:{0:{action_:\"output-0\"},o:{action_:\"output-o\"}},\",\":{0:{action_:[\"output-0\",\"comma\"],nextState:\"o\"}},\".\":{0:{action_:[\"output-0\",\"copy\"],nextState:\"o\"}},else:{\"*\":{action_:\"text=\"}}}),actions:{comma:function(){return{type_:\"commaDecimal\"}},\"output-0\":function(t){var e=[];if(t.text_=t.text_||\"\",t.text_.length>4){var r=t.text_.length%3;0===r&&(r=3);for(var a=t.text_.length-3;a>0;a-=3)e.push(t.text_.substr(a,3)),e.push({type_:\"1000 separator\"});e.push(t.text_.substr(0,r)),e.reverse()}else e.push(t.text_);for(var n in t)delete t[n];return e},\"output-o\":function(t){var e=[];if(t.text_=t.text_||\"\",t.text_.length>4){for(var r=t.text_.length-3,a=0;a<r;a+=3)e.push(t.text_.substr(a,3)),e.push({type_:\"1000 separator\"});e.push(t.text_.substr(a))}else e.push(t.text_);for(var n in t)delete t[n];return e}}}};var n={go:function(t,e){if(!t)return\"\";for(var r=\"\",a=!1,o=0;o<t.length;o++){var i=t[o];\"string\"==typeof i?r+=i:(r+=n._go2(i),\"1st-level escape\"===i.type_&&(a=!0))}return e||a||!r||(r=\"{\"+r+\"}\"),r},_goInner:function(t){return t?n.go(t,!0):t},_go2:function(t){var e;switch(t.type_){case\"chemfive\":e=\"\";var r={a:n._goInner(t.a),b:n._goInner(t.b),p:n._goInner(t.p),o:n._goInner(t.o),q:n._goInner(t.q),d:n._goInner(t.d)};r.a&&(r.a.match(/^[+\\-]/)&&(r.a=\"{\"+r.a+\"}\"),e+=r.a+\"\\\\,\"),(r.b||r.p)&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\\\\hphantom{\"+(r.b||\"\")+\"}}_{\\\\hphantom{\"+(r.p||\"\")+\"}}\",e+=\"{\\\\vphantom{X}}\",e+=\"^{\\\\smash[t]{\\\\vphantom{2}}\\\\llap{\"+(r.b||\"\")+\"}}\",e+=\"_{\\\\vphantom{2}\\\\llap{\\\\smash[t]{\"+(r.p||\"\")+\"}}}\"),r.o&&(r.o.match(/^[+\\-]/)&&(r.o=\"{\"+r.o+\"}\"),e+=r.o),\"kv\"===t.dType?((r.d||r.q)&&(e+=\"{\\\\vphantom{X}}\"),r.d&&(e+=\"^{\"+r.d+\"}\"),r.q&&(e+=\"_{\\\\smash[t]{\"+r.q+\"}}\")):\"oxidation\"===t.dType?(r.d&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\"+r.d+\"}\"),r.q&&(e+=\"{\\\\vphantom{X}}\",e+=\"_{\\\\smash[t]{\"+r.q+\"}}\")):(r.q&&(e+=\"{\\\\vphantom{X}}\",e+=\"_{\\\\smash[t]{\"+r.q+\"}}\"),r.d&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\"+r.d+\"}\"));break;case\"rm\":e=\"\\\\mathrm{\"+t.p1+\"}\";break;case\"text\":t.p1.match(/[\\^_]/)?(t.p1=t.p1.replace(\" \",\"~\").replace(\"-\",\"\\\\text{-}\"),e=\"\\\\mathrm{\"+t.p1+\"}\"):e=\"\\\\text{\"+t.p1+\"}\";break;case\"roman numeral\":e=\"\\\\mathrm{\"+t.p1+\"}\";break;case\"state of aggregation\":e=\"\\\\mskip2mu \"+n._goInner(t.p1);break;case\"state of aggregation subscript\":e=\"\\\\mskip1mu \"+n._goInner(t.p1);break;case\"bond\":if(!(e=n._getBond(t.kind_)))throw[\"MhchemErrorBond\",\"mhchem Error. Unknown bond type (\"+t.kind_+\")\"];break;case\"frac\":var a=\"\\\\frac{\"+t.p1+\"}{\"+t.p2+\"}\";e=\"\\\\mathchoice{\\\\textstyle\"+a+\"}{\"+a+\"}{\"+a+\"}{\"+a+\"}\";break;case\"pu-frac\":var o=\"\\\\frac{\"+n._goInner(t.p1)+\"}{\"+n._goInner(t.p2)+\"}\";e=\"\\\\mathchoice{\\\\textstyle\"+o+\"}{\"+o+\"}{\"+o+\"}{\"+o+\"}\";break;case\"tex-math\":e=t.p1+\" \";break;case\"frac-ce\":e=\"\\\\frac{\"+n._goInner(t.p1)+\"}{\"+n._goInner(t.p2)+\"}\";break;case\"overset\":e=\"\\\\overset{\"+n._goInner(t.p1)+\"}{\"+n._goInner(t.p2)+\"}\";break;case\"underset\":e=\"\\\\underset{\"+n._goInner(t.p1)+\"}{\"+n._goInner(t.p2)+\"}\";break;case\"underbrace\":e=\"\\\\underbrace{\"+n._goInner(t.p1)+\"}_{\"+n._goInner(t.p2)+\"}\";break;case\"color\":e=\"{\\\\color{\"+t.color1+\"}{\"+n._goInner(t.color2)+\"}}\";break;case\"color0\":e=\"\\\\color{\"+t.color+\"}\";break;case\"arrow\":var i={rd:n._goInner(t.rd),rq:n._goInner(t.rq)},s=n._getArrow(t.r);i.rd||i.rq?\"<=>\"===t.r||\"<=>>\"===t.r||\"<<=>\"===t.r||\"<--\\x3e\"===t.r?(s=\"\\\\long\"+s,i.rd&&(s=\"\\\\overset{\"+i.rd+\"}{\"+s+\"}\"),i.rq&&(s=\"\\\\underset{\\\\lower7mu{\"+i.rq+\"}}{\"+s+\"}\"),s=\" {}\\\\mathrel{\"+s+\"}{} \"):(i.rq&&(s+=\"[{\"+i.rq+\"}]\"),s=\" {}\\\\mathrel{\\\\x\"+(s+=\"{\"+i.rd+\"}\")+\"}{} \"):s=\" {}\\\\mathrel{\\\\long\"+s+\"}{} \",e=s;break;case\"operator\":e=n._getOperator(t.kind_);break;case\"1st-level escape\":e=t.p1+\" \";break;case\"space\":e=\" \";break;case\"entitySkip\":case\"pu-space-1\":e=\"~\";break;case\"pu-space-2\":e=\"\\\\mkern3mu \";break;case\"1000 separator\":e=\"\\\\mkern2mu \";break;case\"commaDecimal\":e=\"{,}\";break;case\"comma enumeration L\":e=\"{\"+t.p1+\"}\\\\mkern6mu \";break;case\"comma enumeration M\":e=\"{\"+t.p1+\"}\\\\mkern3mu \";break;case\"comma enumeration S\":e=\"{\"+t.p1+\"}\\\\mkern1mu \";break;case\"hyphen\":e=\"\\\\text{-}\";break;case\"addition compound\":e=\"\\\\,{\\\\cdot}\\\\,\";break;case\"electron dot\":e=\"\\\\mkern1mu \\\\bullet\\\\mkern1mu \";break;case\"KV x\":e=\"{\\\\times}\";break;case\"prime\":e=\"\\\\prime \";break;case\"cdot\":e=\"\\\\cdot \";break;case\"tight cdot\":e=\"\\\\mkern1mu{\\\\cdot}\\\\mkern1mu \";break;case\"times\":e=\"\\\\times \";break;case\"circa\":e=\"{\\\\sim}\";break;case\"^\":e=\"uparrow\";break;case\"v\":e=\"downarrow\";break;case\"ellipsis\":e=\"\\\\ldots \";break;case\"/\":e=\"/\";break;case\" / \":e=\"\\\\,/\\\\,\";break;default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}return e},_getArrow:function(t){switch(t){case\"->\":case\"\\u2192\":case\"\\u27f6\":return\"rightarrow\";case\"<-\":return\"leftarrow\";case\"<->\":return\"leftrightarrow\";case\"<--\\x3e\":return\"leftrightarrows\";case\"<=>\":case\"\\u21cc\":return\"rightleftharpoons\";case\"<=>>\":return\"Rightleftharpoons\";case\"<<=>\":return\"Leftrightharpoons\";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}},_getBond:function(t){switch(t){case\"-\":case\"1\":return\"{-}\";case\"=\":case\"2\":return\"{=}\";case\"#\":case\"3\":return\"{\\\\equiv}\";case\"~\":return\"{\\\\tripledash}\";case\"~-\":return\"{\\\\rlap{\\\\lower.1em{-}}\\\\raise.1em{\\\\tripledash}}\";case\"~=\":case\"~--\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{\\\\tripledash}}-}\";case\"-~-\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{-}}\\\\tripledash}\";case\"...\":return\"{{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";case\"....\":return\"{{\\\\cdot}{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";case\"->\":return\"{\\\\rightarrow}\";case\"<-\":return\"{\\\\leftarrow}\";case\"<\":return\"{<}\";case\">\":return\"{>}\";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}},_getOperator:function(t){switch(t){case\"+\":return\" {}+{} \";case\"-\":return\" {}-{} \";case\"=\":return\" {}={} \";case\"<\":return\" {}<{} \";case\">\":return\" {}>{} \";case\"<<\":return\" {}\\\\ll{} \";case\">>\":return\" {}\\\\gg{} \";case\"\\\\pm\":return\" {}\\\\pm{} \";case\"\\\\approx\":case\"$\\\\approx$\":return\" {}\\\\approx{} \";case\"v\":case\"(v)\":return\" \\\\downarrow{} \";case\"^\":case\"(^)\":return\" \\\\uparrow{} \";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}}};function o(t){}function i(t){}e.mhchemParser=a,e.texify=n,e.assertNever=o,e.assertString=i},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NoErrorsConfiguration=void 0;var a=r(0);e.NoErrorsConfiguration=a.Configuration.create(\"noerrors\",{nodes:{error:function(t,e,r,a){var n=t.create(\"token\",\"mtext\",{},a.replace(/\\n/g,\" \"));return t.create(\"node\",\"merror\",[n],{\"data-mjx-error\":e,title:e})}}})},function(t,e,r){\"use strict\";var a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],a=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.NoUndefinedConfiguration=void 0;var n=r(0);e.NoUndefinedConfiguration=n.Configuration.create(\"noundefined\",{fallback:{macro:function(t,e){var r,n,o=t.create(\"text\",\"\\\\\"+e),i=t.options.noundefined||{},s={};try{for(var c=a([\"color\",\"background\",\"size\"]),l=c.next();!l.done;l=c.next()){var u=l.value;i[u]&&(s[\"math\"+u]=i[u])}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}t.Push(t.create(\"node\",\"mtext\",[],s,o))}},options:{noundefined:{color:\"red\",background:\"\",size:\"\"}},priority:3})},function(t,e,r){\"use strict\";var a;Object.defineProperty(e,\"__esModule\",{value:!0}),e.PhysicsConfiguration=void 0;var n=r(0),o=r(64);r(65),e.PhysicsConfiguration=n.Configuration.create(\"physics\",{handler:{macro:[\"Physics-automatic-bracing-macros\",\"Physics-vector-macros\",\"Physics-vector-chars\",\"Physics-derivative-macros\",\"Physics-expressions-macros\",\"Physics-quick-quad-macros\",\"Physics-bra-ket-macros\",\"Physics-matrix-macros\"],character:[\"Physics-characters\"],environment:[\"Physics-aux-envs\"]},items:(a={},a[o.AutoOpen.prototype.kind]=o.AutoOpen,a)})},function(t,e,r){\"use strict\";var a,n=this&&this.__extends||(a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutoOpen=void 0;var o=r(13),i=r(3),s=r(5),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"auto open\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.toMml=function(){var e=this.factory.configuration.parser,r=this.getProperty(\"right\");if(this.getProperty(\"smash\")){var a=t.prototype.toMml.call(this),n=e.create(\"node\",\"mpadded\",[a],{height:0,depth:0});this.Clear(),this.Push(e.create(\"node\",\"TeXAtom\",[n]))}r&&this.Push(new s.default(r,e.stack.env,e.configuration).mml());var o=t.prototype.toMml.call(this);return i.default.fenced(this.factory.configuration,this.getProperty(\"open\"),o,this.getProperty(\"close\"),this.getProperty(\"big\"))},e.prototype.checkItem=function(e){var r=e.getProperty(\"autoclose\");return r&&r===this.getProperty(\"close\")?this.getProperty(\"ignore\")?(this.Clear(),[[],!0]):[[this.toMml()],!0]:t.prototype.checkItem.call(this,e)},e}(o.BaseItem);e.AutoOpen=c},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(1),n=r(66),o=r(6),i=r(9),s=r(7);new a.CommandMap(\"Physics-automatic-bracing-macros\",{quantity:\"Quantity\",qty:\"Quantity\",pqty:[\"Quantity\",\"(\",\")\",!0],bqty:[\"Quantity\",\"[\",\"]\",!0],vqty:[\"Quantity\",\"|\",\"|\",!0],Bqty:[\"Quantity\",\"{\",\"}\",!0],absolutevalue:[\"Quantity\",\"|\",\"|\",!0],abs:[\"Quantity\",\"|\",\"|\",!0],norm:[\"Quantity\",\"\\\\|\",\"\\\\|\",!0],evaluated:\"Eval\",eval:\"Eval\",order:[\"Quantity\",\"(\",\")\",!0,\"O\",o.TexConstant.Variant.CALLIGRAPHIC],commutator:\"Commutator\",comm:\"Commutator\",anticommutator:[\"Commutator\",\"\\\\{\",\"\\\\}\"],acomm:[\"Commutator\",\"\\\\{\",\"\\\\}\"],poissonbracket:[\"Commutator\",\"\\\\{\",\"\\\\}\"],pb:[\"Commutator\",\"\\\\{\",\"\\\\}\"]},n.default),new a.CharacterMap(\"Physics-vector-chars\",i.default.mathchar0mi,{dotproduct:[\"\\u22c5\",{mathvariant:o.TexConstant.Variant.BOLD}],vdot:[\"\\u22c5\",{mathvariant:o.TexConstant.Variant.BOLD}],crossproduct:\"\\xd7\",cross:\"\\xd7\",cp:\"\\xd7\",gradientnabla:[\"\\u2207\",{mathvariant:o.TexConstant.Variant.BOLD}],real:[\"\\u211c\",{mathvariant:o.TexConstant.Variant.NORMAL}],imaginary:[\"\\u2111\",{mathvariant:o.TexConstant.Variant.NORMAL}]}),new a.CommandMap(\"Physics-vector-macros\",{vectorbold:\"VectorBold\",vb:\"VectorBold\",vectorarrow:[\"StarMacro\",1,\"\\\\vec{\\\\vb\",\"{#1}}\"],va:[\"StarMacro\",1,\"\\\\vec{\\\\vb\",\"{#1}}\"],vectorunit:[\"StarMacro\",1,\"\\\\hat{\\\\vb\",\"{#1}}\"],vu:[\"StarMacro\",1,\"\\\\hat{\\\\vb\",\"{#1}}\"],gradient:[\"OperatorApplication\",\"\\\\gradientnabla\",\"(\",\"[\"],grad:[\"OperatorApplication\",\"\\\\gradientnabla\",\"(\",\"[\"],divergence:[\"VectorOperator\",\"\\\\gradientnabla\\\\vdot\",\"(\",\"[\"],div:[\"VectorOperator\",\"\\\\gradientnabla\\\\vdot\",\"(\",\"[\"],curl:[\"VectorOperator\",\"\\\\gradientnabla\\\\crossproduct\",\"(\",\"[\"],laplacian:[\"OperatorApplication\",\"\\\\nabla^2\",\"(\",\"[\"]},n.default),new a.CommandMap(\"Physics-expressions-macros\",{sin:\"Expression\",sinh:\"Expression\",arcsin:\"Expression\",asin:\"Expression\",cos:\"Expression\",cosh:\"Expression\",arccos:\"Expression\",acos:\"Expression\",tan:\"Expression\",tanh:\"Expression\",arctan:\"Expression\",atan:\"Expression\",csc:\"Expression\",csch:\"Expression\",arccsc:\"Expression\",acsc:\"Expression\",sec:\"Expression\",sech:\"Expression\",arcsec:\"Expression\",asec:\"Expression\",cot:\"Expression\",coth:\"Expression\",arccot:\"Expression\",acot:\"Expression\",exp:[\"Expression\",!1],log:\"Expression\",ln:\"Expression\",det:[\"Expression\",!1],Pr:[\"Expression\",!1],tr:[\"Expression\",!1],trace:[\"Expression\",!1,\"tr\"],Tr:[\"Expression\",!1],Trace:[\"Expression\",!1,\"Tr\"],rank:\"NamedFn\",erf:[\"Expression\",!1],Res:[\"OperatorApplication\",\"{\\\\rm Res}\",\"(\",\"[\",\"{\"],principalvalue:[\"OperatorApplication\",\"{\\\\cal P}\"],pv:[\"OperatorApplication\",\"{\\\\cal P}\"],PV:[\"OperatorApplication\",\"{\\\\rm P.V.}\"],Re:[\"OperatorApplication\",\"{\\\\rm Re}\",\"{\"],Im:[\"OperatorApplication\",\"{\\\\rm Im}\",\"{\"],sine:[\"NamedFn\",\"sin\"],hypsine:[\"NamedFn\",\"sinh\"],arcsine:[\"NamedFn\",\"arcsin\"],asine:[\"NamedFn\",\"asin\"],cosine:[\"NamedFn\",\"cos\"],hypcosine:[\"NamedFn\",\"cosh\"],arccosine:[\"NamedFn\",\"arccos\"],acosine:[\"NamedFn\",\"acos\"],tangent:[\"NamedFn\",\"tan\"],hyptangent:[\"NamedFn\",\"tanh\"],arctangent:[\"NamedFn\",\"arctan\"],atangent:[\"NamedFn\",\"atan\"],cosecant:[\"NamedFn\",\"csc\"],hypcosecant:[\"NamedFn\",\"csch\"],arccosecant:[\"NamedFn\",\"arccsc\"],acosecant:[\"NamedFn\",\"acsc\"],secant:[\"NamedFn\",\"sec\"],hypsecant:[\"NamedFn\",\"sech\"],arcsecant:[\"NamedFn\",\"arcsec\"],asecant:[\"NamedFn\",\"asec\"],cotangent:[\"NamedFn\",\"cot\"],hypcotangent:[\"NamedFn\",\"coth\"],arccotangent:[\"NamedFn\",\"arccot\"],acotangent:[\"NamedFn\",\"acot\"],exponential:[\"NamedFn\",\"exp\"],logarithm:[\"NamedFn\",\"log\"],naturallogarithm:[\"NamedFn\",\"ln\"],determinant:[\"NamedFn\",\"det\"],Probability:[\"NamedFn\",\"Pr\"]},n.default),new a.CommandMap(\"Physics-quick-quad-macros\",{qqtext:\"Qqtext\",qq:\"Qqtext\",qcomma:[\"Macro\",\"\\\\qqtext*{,}\"],qc:[\"Macro\",\"\\\\qqtext*{,}\"],qcc:[\"Qqtext\",\"c.c.\"],qif:[\"Qqtext\",\"if\"],qthen:[\"Qqtext\",\"then\"],qelse:[\"Qqtext\",\"else\"],qotherwise:[\"Qqtext\",\"otherwise\"],qunless:[\"Qqtext\",\"unless\"],qgiven:[\"Qqtext\",\"given\"],qusing:[\"Qqtext\",\"using\"],qassume:[\"Qqtext\",\"assume\"],\"qsince,\":[\"Qqtext\",\"since,\"],qlet:[\"Qqtext\",\"let\"],qfor:[\"Qqtext\",\"for\"],qall:[\"Qqtext\",\"all\"],qeven:[\"Qqtext\",\"even\"],qodd:[\"Qqtext\",\"odd\"],qinteger:[\"Qqtext\",\"integer\"],qand:[\"Qqtext\",\"and\"],qor:[\"Qqtext\",\"or\"],qas:[\"Qqtext\",\"as\"],qin:[\"Qqtext\",\"in\"]},n.default),new a.CommandMap(\"Physics-derivative-macros\",{flatfrac:[\"Macro\",\"\\\\left.#1\\\\middle/#2\\\\right.\",2],differential:[\"Differential\",\"{\\\\rm d}\"],dd:[\"Differential\",\"{\\\\rm d}\"],variation:[\"Differential\",\"\\\\delta\"],var:[\"Differential\",\"\\\\delta\"],derivative:[\"Derivative\",2,\"{\\\\rm d}\"],dv:[\"Derivative\",2,\"{\\\\rm d}\"],partialderivative:[\"Derivative\",3,\"\\\\partial\"],pderivative:[\"Derivative\",3,\"\\\\partial\"],pdv:[\"Derivative\",3,\"\\\\partial\"],functionalderivative:[\"Derivative\",2,\"\\\\delta\"],fderivative:[\"Derivative\",2,\"\\\\delta\"],fdv:[\"Derivative\",2,\"\\\\delta\"]},n.default),new a.CommandMap(\"Physics-bra-ket-macros\",{bra:\"Bra\",ket:\"Ket\",innerproduct:\"BraKet\",braket:\"BraKet\",outerproduct:\"KetBra\",dyad:\"KetBra\",ketbra:\"KetBra\",op:\"KetBra\",expectationvalue:\"Expectation\",expval:\"Expectation\",ev:\"Expectation\",matrixelement:\"MatrixElement\",matrixel:\"MatrixElement\",mel:\"MatrixElement\"},n.default),new a.CommandMap(\"Physics-matrix-macros\",{matrixquantity:\"MatrixQuantity\",mqty:\"MatrixQuantity\",pmqty:[\"Macro\",\"\\\\mqty(#1)\",1],Pmqty:[\"Macro\",\"\\\\mqty*(#1)\",1],bmqty:[\"Macro\",\"\\\\mqty[#1]\",1],vmqty:[\"Macro\",\"\\\\mqty|#1|\",1],smallmatrixquantity:[\"MatrixQuantity\",!0],smqty:[\"MatrixQuantity\",!0],spmqty:[\"Macro\",\"\\\\smqty(#1)\",1],sPmqty:[\"Macro\",\"\\\\smqty*(#1)\",1],sbmqty:[\"Macro\",\"\\\\smqty[#1]\",1],svmqty:[\"Macro\",\"\\\\smqty|#1|\",1],matrixdeterminant:[\"Macro\",\"\\\\vmqty{#1}\",1],mdet:[\"Macro\",\"\\\\vmqty{#1}\",1],smdet:[\"Macro\",\"\\\\svmqty{#1}\",1],identitymatrix:\"IdentityMatrix\",imat:\"IdentityMatrix\",xmatrix:\"XMatrix\",xmat:\"XMatrix\",zeromatrix:[\"Macro\",\"\\\\xmat{0}{#1}{#2}\",2],zmat:[\"Macro\",\"\\\\xmat{0}{#1}{#2}\",2],paulimatrix:\"PauliMatrix\",pmat:\"PauliMatrix\",diagonalmatrix:\"DiagonalMatrix\",dmat:\"DiagonalMatrix\",antidiagonalmatrix:[\"DiagonalMatrix\",!0],admat:[\"DiagonalMatrix\",!0]},n.default),new a.EnvironmentMap(\"Physics-aux-envs\",i.default.environment,{smallmatrix:[\"Array\",null,null,null,\"c\",\"0.333em\",\".2em\",\"S\",1]},n.default),new a.MacroMap(\"Physics-characters\",{\"|\":[\"AutoClose\",s.TEXCLASS.ORD],\")\":\"AutoClose\",\"]\":\"AutoClose\"},n.default)},function(t,e,r){\"use strict\";var a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var a,n,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(a=o.next()).done;)i.push(a.value)}catch(t){n={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i};Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(8),o=r(5),i=r(2),s=r(7),c=r(3),l=r(4),u=r(23),d={},p={\"(\":\")\",\"[\":\"]\",\"{\":\"}\",\"|\":\"|\"},f=/^(b|B)i(g{1,2})$/;d.Quantity=function(t,e,r,a,n,u,d){void 0===r&&(r=\"(\"),void 0===a&&(a=\")\"),void 0===n&&(n=!1),void 0===u&&(u=\"\"),void 0===d&&(d=\"\");var m=!!n&&t.GetStar(),h=t.GetNext(),g=t.i,v=null;if(\"\\\\\"===h){if(t.i++,!(v=t.GetCS()).match(f)){var y=t.create(\"node\",\"mrow\");return t.Push(c.default.fenced(t.configuration,r,y,a)),void(t.i=g)}h=t.GetNext()}var x=p[h];if(n&&\"{\"!==h)throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);if(!x){y=t.create(\"node\",\"mrow\");return t.Push(c.default.fenced(t.configuration,r,y,a)),void(t.i=g)}if(u){var b=t.create(\"token\",\"mi\",{texClass:s.TEXCLASS.OP},u);d&&l.default.setAttribute(b,\"mathvariant\",d),t.Push(t.itemFactory.create(\"fn\",b))}if(\"{\"===h){var _=t.GetArgument(e);return h=n?r:\"\\\\{\",x=n?a:\"\\\\}\",_=m?h+\" \"+_+\" \"+x:v?\"\\\\\"+v+\"l\"+h+\" \"+_+\" \\\\\"+v+\"r\"+x:\"\\\\left\"+h+\" \"+_+\" \\\\right\"+x,void t.Push(new o.default(_,t.stack.env,t.configuration).mml())}n&&(h=r,x=a),t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:h,close:x,big:v}))},d.Eval=function(t,e){var r=t.GetStar(),a=t.GetNext();if(\"{\"!==a){if(\"(\"===a||\"[\"===a)return t.i++,void t.Push(t.itemFactory.create(\"auto open\").setProperties({open:a,close:\"|\",smash:r,right:\"\\\\vphantom{\\\\int}\"}));throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS)}var n=t.GetArgument(e),o=\"\\\\left. \"+(r?\"\\\\smash{\"+n+\"}\":n)+\" \\\\vphantom{\\\\int}\\\\right|\";t.string=t.string.slice(0,t.i)+o+t.string.slice(t.i)},d.Commutator=function(t,e,r,a){void 0===r&&(r=\"[\"),void 0===a&&(a=\"]\");var n=t.GetStar(),s=t.GetNext(),c=null;if(\"\\\\\"===s){if(t.i++,!(c=t.GetCS()).match(f))throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);s=t.GetNext()}if(\"{\"!==s)throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);var l=t.GetArgument(e)+\",\"+t.GetArgument(e);l=n?r+\" \"+l+\" \"+a:c?\"\\\\\"+c+\"l\"+r+\" \"+l+\" \\\\\"+c+\"r\"+a:\"\\\\left\"+r+\" \"+l+\" \\\\right\"+a,t.Push(new o.default(l,t.stack.env,t.configuration).mml())};var m=[65,90],h=[97,122],g=[913,937],v=[945,969],y=[48,57];function x(t,e){return t>=e[0]&&t<=e[1]}function b(t,e,r,a){var n=t.configuration.parser,o=u.NodeFactory.createToken(t,e,r,a),i=a.codePointAt(0);return 1===a.length&&!n.stack.env.font&&n.stack.env.vectorFont&&(x(i,m)||x(i,h)||x(i,g)||x(i,y)||x(i,v)&&n.stack.env.vectorStar||l.default.getAttribute(o,\"accent\"))&&l.default.setAttribute(o,\"mathvariant\",n.stack.env.vectorFont),o}d.VectorBold=function(t,e){var r=t.GetStar(),a=t.GetArgument(e),n=t.configuration.nodeFactory.get(\"token\"),i=t.stack.env.font;delete t.stack.env.font,t.configuration.nodeFactory.set(\"token\",b),t.stack.env.vectorFont=r?\"bold-italic\":\"bold\",t.stack.env.vectorStar=r;var s=new o.default(a,t.stack.env,t.configuration).mml();i&&(t.stack.env.font=i),delete t.stack.env.vectorFont,delete t.stack.env.vectorStar,t.configuration.nodeFactory.set(\"token\",n),t.Push(s)},d.StarMacro=function(t,e,r){for(var a=[],n=3;n<arguments.length;n++)a[n-3]=arguments[n];var o=t.GetStar(),s=[];if(r)for(var l=s.length;l<r;l++)s.push(t.GetArgument(e));var u=a.join(o?\"*\":\"\");if(u=c.default.substituteArgs(t,s,u),t.string=c.default.addArgs(t,u,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new i.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is there a recursive macro call?\")};var _=function(t,e,r,a,n){var i=new o.default(a,t.stack.env,t.configuration).mml();t.Push(t.itemFactory.create(e,i));var s=t.GetNext(),c=p[s];if(c){var l=-1!==n.indexOf(s);if(\"{\"===s){var u=(l?\"\\\\left\\\\{\":\"\")+\" \"+t.GetArgument(r)+\" \"+(l?\"\\\\right\\\\}\":\"\");return t.string=u+t.string.slice(t.i),void(t.i=0)}l&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:s,close:c})))}};function M(t,e,r){var n=a(t,3),o=n[0],i=n[1],s=n[2];return e&&r?\"\\\\left\\\\langle{\"+o+\"}\\\\middle\\\\vert{\"+i+\"}\\\\middle\\\\vert{\"+s+\"}\\\\right\\\\rangle\":e?\"\\\\langle{\"+o+\"}\\\\vert{\"+i+\"}\\\\vert{\"+s+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+o+\"}\\\\right\\\\vert{\"+i+\"}\\\\left\\\\vert{\"+s+\"}\\\\right\\\\rangle\"}d.OperatorApplication=function(t,e,r){for(var a=[],n=3;n<arguments.length;n++)a[n-3]=arguments[n];_(t,\"fn\",e,r,a)},d.VectorOperator=function(t,e,r){for(var a=[],n=3;n<arguments.length;n++)a[n-3]=arguments[n];_(t,\"mml\",e,r,a)},d.Expression=function(t,e,r,a){void 0===r&&(r=!0),void 0===a&&(a=\"\"),a=a||e.slice(1);var n=r?t.GetBrackets(e):null,i=t.create(\"token\",\"mi\",{texClass:s.TEXCLASS.OP},a);if(n){var c=new o.default(n,t.stack.env,t.configuration).mml();i=t.create(\"node\",\"msup\",[i,c])}t.Push(t.itemFactory.create(\"fn\",i)),\"(\"===t.GetNext()&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\"})))},d.Qqtext=function(t,e,r){var a=(t.GetStar()?\"\":\"\\\\quad\")+\"\\\\text{\"+(r||t.GetArgument(e))+\"}\\\\quad \";t.string=t.string.slice(0,t.i)+a+t.string.slice(t.i)},d.Differential=function(t,e,r){var a=t.GetBrackets(e),n=null!=a?\"^{\"+a+\"}\":\" \",i=\"(\"===t.GetNext(),c=\"{\"===t.GetNext(),l=r+n;if(i||c)if(c){l+=t.GetArgument(e);u=new o.default(l,t.stack.env,t.configuration).mml();t.Push(t.create(\"node\",\"TeXAtom\",[u],{texClass:s.TEXCLASS.OP}))}else t.Push(new o.default(l,t.stack.env,t.configuration).mml()),t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\"}));else{l+=t.GetArgument(e,!0)||\"\";var u=new o.default(l,t.stack.env,t.configuration).mml();t.Push(u)}},d.Derivative=function(t,e,r,a){var n=t.GetStar(),i=t.GetBrackets(e),s=1,c=[];for(c.push(t.GetArgument(e));\"{\"===t.GetNext()&&s<r;)c.push(t.GetArgument(e)),s++;var l=!1,u=\" \",d=\" \";r>2&&c.length>2?(u=\"^{\"+(c.length-1)+\"}\",l=!0):null!=i&&(r>2&&c.length>1&&(l=!0),d=u=\"^{\"+i+\"}\");for(var p=n?\"\\\\flatfrac\":\"\\\\frac\",f=c.length>1?c[0]:\"\",m=c.length>1?c[1]:c[0],h=\"\",g=2,v=void 0;v=c[g];g++)h+=a+\" \"+v;var y=p+\"{\"+a+u+f+\"}{\"+a+\" \"+m+d+\" \"+h+\"}\";t.Push(new o.default(y,t.stack.env,t.configuration).mml()),\"(\"===t.GetNext()&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\",ignore:l})))},d.Bra=function(t,e){var r=t.GetStar(),a=t.GetArgument(e),n=\"\",i=!1,s=!1;if(\"\\\\\"===t.GetNext()){var c=t.i;t.i++;var l=t.GetCS(),u=t.lookup(\"macro\",l);u&&\"ket\"===u.symbol?(i=!0,c=t.i,s=t.GetStar(),\"{\"===t.GetNext()?n=t.GetArgument(l,!0):(t.i=c,s=!1)):t.i=c}var d=\"\";d=i?r||s?\"\\\\langle{\"+a+\"}\\\\vert{\"+n+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+a+\"}\\\\middle\\\\vert{\"+n+\"}\\\\right\\\\rangle\":r||s?\"\\\\langle{\"+a+\"}\\\\vert\":\"\\\\left\\\\langle{\"+a+\"}\\\\right\\\\vert{\"+n+\"}\",t.Push(new o.default(d,t.stack.env,t.configuration).mml())},d.Ket=function(t,e){var r=t.GetStar(),a=t.GetArgument(e),n=r?\"\\\\vert{\"+a+\"}\\\\rangle\":\"\\\\left\\\\vert{\"+a+\"}\\\\right\\\\rangle\";t.Push(new o.default(n,t.stack.env,t.configuration).mml())},d.BraKet=function(t,e){var r=t.GetStar(),a=t.GetArgument(e),n=null;\"{\"===t.GetNext()&&(n=t.GetArgument(e,!0));var i=\"\";i=null==n?r?\"\\\\langle{\"+a+\"}\\\\vert{\"+a+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+a+\"}\\\\middle\\\\vert{\"+a+\"}\\\\right\\\\rangle\":r?\"\\\\langle{\"+a+\"}\\\\vert{\"+n+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+a+\"}\\\\middle\\\\vert{\"+n+\"}\\\\right\\\\rangle\",t.Push(new o.default(i,t.stack.env,t.configuration).mml())},d.KetBra=function(t,e){var r=t.GetStar(),a=t.GetArgument(e),n=null;\"{\"===t.GetNext()&&(n=t.GetArgument(e,!0));var i=\"\";i=null==n?r?\"\\\\vert{\"+a+\"}\\\\rangle\\\\!\\\\langle{\"+a+\"}\\\\vert\":\"\\\\left\\\\vert{\"+a+\"}\\\\middle\\\\rangle\\\\!\\\\middle\\\\langle{\"+a+\"}\\\\right\\\\vert\":r?\"\\\\vert{\"+a+\"}\\\\rangle\\\\!\\\\langle{\"+n+\"}\\\\vert\":\"\\\\left\\\\vert{\"+a+\"}\\\\middle\\\\rangle\\\\!\\\\middle\\\\langle{\"+n+\"}\\\\right\\\\vert\",t.Push(new o.default(i,t.stack.env,t.configuration).mml())},d.Expectation=function(t,e){var r=t.GetStar(),a=r&&t.GetStar(),n=t.GetArgument(e),i=null;\"{\"===t.GetNext()&&(i=t.GetArgument(e,!0));var s=n&&i?M([i,n,i],r,a):r?\"\\\\langle {\"+n+\"} \\\\rangle\":\"\\\\left\\\\langle {\"+n+\"} \\\\right\\\\rangle\";t.Push(new o.default(s,t.stack.env,t.configuration).mml())},d.MatrixElement=function(t,e){var r=t.GetStar(),a=r&&t.GetStar(),n=M([t.GetArgument(e),t.GetArgument(e),t.GetArgument(e)],r,a);t.Push(new o.default(n,t.stack.env,t.configuration).mml())},d.MatrixQuantity=function(t,e,r){var a=t.GetStar(),n=r?\"smallmatrix\":\"array\",i=\"\",s=\"\",c=\"\";switch(t.GetNext()){case\"{\":i=t.GetArgument(e);break;case\"(\":t.i++,s=a?\"\\\\lgroup\":\"(\",c=a?\"\\\\rgroup\":\")\",i=t.GetUpTo(e,\")\");break;case\"[\":t.i++,s=\"[\",c=\"]\",i=t.GetUpTo(e,\"]\");break;case\"|\":t.i++,s=\"|\",c=\"|\",i=t.GetUpTo(e,\"|\");break;default:s=\"(\",c=\")\"}var l=(s?\"\\\\left\":\"\")+s+\"\\\\begin{\"+n+\"}{} \"+i+\"\\\\end{\"+n+\"}\"+(s?\"\\\\right\":\"\")+c;t.Push(new o.default(l,t.stack.env,t.configuration).mml())},d.IdentityMatrix=function(t,e){var r=t.GetArgument(e),a=parseInt(r,10);if(isNaN(a))throw new i.default(\"InvalidNumber\",\"Invalid number\");if(a<=1)return t.string=\"1\"+t.string.slice(t.i),void(t.i=0);for(var n=Array(a).fill(\"0\"),o=[],s=0;s<a;s++){var c=n.slice();c[s]=\"1\",o.push(c.join(\" & \"))}t.string=o.join(\"\\\\\\\\ \")+t.string.slice(t.i),t.i=0},d.XMatrix=function(t,e){var r=t.GetStar(),a=t.GetArgument(e),n=t.GetArgument(e),o=t.GetArgument(e),s=parseInt(n,10),c=parseInt(o,10);if(isNaN(s)||isNaN(c)||c.toString()!==o||s.toString()!==n)throw new i.default(\"InvalidNumber\",\"Invalid number\");if(s=s<1?1:s,c=c<1?1:c,!r){var l=Array(c).fill(a).join(\" & \"),u=Array(s).fill(l).join(\"\\\\\\\\ \");return t.string=u+t.string.slice(t.i),void(t.i=0)}var d=\"\";if(1===s&&1===c)d=a;else if(1===s){l=[];for(var p=1;p<=c;p++)l.push(a+\"_{\"+p+\"}\");d=l.join(\" & \")}else if(1===c){for(l=[],p=1;p<=s;p++)l.push(a+\"_{\"+p+\"}\");d=l.join(\"\\\\\\\\ \")}else{var f=[];for(p=1;p<=s;p++){l=[];for(var m=1;m<=c;m++)l.push(a+\"_{{\"+p+\"}{\"+m+\"}}\");f.push(l.join(\" & \"))}d=f.join(\"\\\\\\\\ \")}t.string=d+t.string.slice(t.i),t.i=0},d.PauliMatrix=function(t,e){var r=t.GetArgument(e),a=r.slice(1);switch(r[0]){case\"0\":a+=\" 1 & 0\\\\\\\\ 0 & 1\";break;case\"1\":case\"x\":a+=\" 0 & 1\\\\\\\\ 1 & 0\";break;case\"2\":case\"y\":a+=\" 0 & -i\\\\\\\\ i & 0\";break;case\"3\":case\"z\":a+=\" 1 & 0\\\\\\\\ 0 & -1\"}t.string=a+t.string.slice(t.i),t.i=0},d.DiagonalMatrix=function(t,e,r){if(\"{\"===t.GetNext()){var a=t.i;t.GetArgument(e);var n=t.i;t.i=a+1;for(var o=[],i=\"\",s=t.i;s<n;){try{i=t.GetUpTo(e,\",\")}catch(e){t.i=n,o.push(t.string.slice(s,n-1));break}if(t.i>=n){o.push(t.string.slice(s,n));break}s=t.i,o.push(i)}t.string=function(t,e){for(var r=t.length,a=[],n=0;n<r;n++)a.push(Array(e?r-n:n+1).join(\"&\")+\"\\\\mqty{\"+t[n]+\"}\");return a.join(\"\\\\\\\\ \")}(o,r)+t.string.slice(n),t.i=0}},d.AutoClose=function(t,e,r){var a=t.create(\"token\",\"mo\",{stretchy:!1},e),n=t.itemFactory.create(\"mml\",a).setProperties({autoclose:e});t.Push(n)},d.Macro=n.default.Macro,d.NamedFn=n.default.NamedFn,d.Array=n.default.Array,e.default=d},function(t,e,r){\"use strict\";var a,n=this&&this.__extends||(a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.TagFormatConfiguration=e.tagformatConfig=void 0;var o=r(0),i=r(17),s=0;function c(t,e){var r=e.parseOptions.options.tags;\"base\"!==r&&t.tags.hasOwnProperty(r)&&i.TagsFactory.add(r,t.tags[r]);var a=function(t){function r(){return null!==t&&t.apply(this,arguments)||this}return n(r,t),r.prototype.formatNumber=function(t){return e.parseOptions.options.tagformat.number(t)},r.prototype.formatTag=function(t){return e.parseOptions.options.tagformat.tag(t)},r.prototype.formatId=function(t){return e.parseOptions.options.tagformat.id(t)},r.prototype.formatUrl=function(t,r){return e.parseOptions.options.tagformat.url(t,r)},r}(i.TagsFactory.create(e.parseOptions.options.tags).constructor),o=\"configTags-\"+ ++s;i.TagsFactory.add(o,a),e.parseOptions.options.tags=o}e.tagformatConfig=c,e.TagFormatConfiguration=o.Configuration.create(\"tagformat\",{config:[c,10],options:{tagformat:{number:function(t){return t.toString()},tag:function(t){return\"(\"+t+\")\"},id:function(t){return\"mjx-eqn-\"+t.replace(/\\s/g,\"_\")},url:function(t,e){return e+\"#\"+encodeURIComponent(t)}}}})},function(t,e,r){\"use strict\";var a;Object.defineProperty(e,\"__esModule\",{value:!0}),e.textBase=void 0;var n=r(0),o=r(69),i=r(17),s=r(16),c=r(70),l=r(27);function u(t,e,r,a){var n=t.configuration.packageData.get(\"textmacros\");return t instanceof c.TextParser||(n.texParser=t),[new c.TextParser(e,a?{mathvariant:a}:{},n.parseOptions,r).mml()]}r(72),e.textBase=n.Configuration.local({handler:{character:[\"command\",\"text-special\"],macro:[\"text-macros\"]},fallback:{character:function(t,e){t.text+=e},macro:function(t,e){var r=t.texParser,a=r.lookup(\"macro\",e);a&&a._func!==l.TextMacrosMethods.Macro&&t.Error(\"MathMacro\",\"%1 is only supported in math mode\",\"\\\\\"+e),r.parse(\"macro\",[a?t:r,e])}},items:(a={},a[s.StartItem.prototype.kind]=s.StartItem,a[s.StopItem.prototype.kind]=s.StopItem,a[s.MmlItem.prototype.kind]=s.MmlItem,a[s.StyleItem.prototype.kind]=s.StyleItem,a)}),n.Configuration.create(\"textmacros\",{config:function(t,r){var a=new n.ParserConfiguration([]);a.append(e.textBase),a.init();var s=new o.default(a,[]);s.options=r.parseOptions.options,a.config(r),i.TagsFactory.addTags(a.tags),s.tags=i.TagsFactory.getDefault(),s.tags.configuration=s,s.packageData=r.parseOptions.packageData,s.packageData.set(\"textmacros\",{parseOptions:s,jax:r,texParser:null}),s.options.internalMath=u},preprocessors:[function(t){var e=t.data.packageData.get(\"textmacros\");e.parseOptions.nodeFactory.setMmlFactory(e.jax.mmlFactory)}]})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.ParseOptions.default},function(t,e,r){\"use strict\";var a,n=this&&this.__extends||(a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],a=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var a,n,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(a=o.next()).done;)i.push(a.value)}catch(t){n={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextParser=void 0;var c=r(5),l=r(2),u=r(3),d=r(7),p=r(4),f=r(16),m=function(t){function e(e,r,a,n){var o=t.call(this,e,r,a)||this;return o.level=n,o}return n(e,t),Object.defineProperty(e.prototype,\"texParser\",{get:function(){return this.configuration.packageData.get(\"textmacros\").texParser},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tags\",{get:function(){return this.texParser.tags},enumerable:!1,configurable:!0}),e.prototype.mml=function(){return null!=this.level?this.create(\"node\",\"mstyle\",this.nodes,{displaystyle:!1,scriptlevel:this.level}):1===this.nodes.length?this.nodes[0]:this.create(\"node\",\"inferredMrow\",this.nodes)},e.prototype.Parse=function(){this.text=\"\",this.nodes=[],this.envStack=[],t.prototype.Parse.call(this)},e.prototype.saveText=function(){if(this.text){var t=this.stack.env.mathvariant,e=u.default.internalText(this,this.text,t?{mathvariant:t}:{});this.text=\"\",this.Push(e)}},e.prototype.Push=function(e){if(this.text&&this.saveText(),e instanceof f.StopItem)return t.prototype.Push.call(this,e);e instanceof f.StyleItem?this.stack.env.mathcolor=this.stack.env.color:e instanceof d.AbstractMmlNode&&(this.addAttributes(e),this.nodes.push(e))},e.prototype.PushMath=function(t){var e,r,a=this.stack.env;try{for(var n=o([\"mathsize\",\"mathcolor\"]),i=n.next();!i.done;i=n.next()){var s=i.value;a[s]&&!t.attributes.getExplicit(s)&&(t.isToken||t.isKind(\"mstyle\")||(t=this.create(\"node\",\"mstyle\",[t])),p.default.setAttribute(t,s,a[s]))}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}t.isKind(\"inferredMrow\")&&(t=this.create(\"node\",\"mrow\",t.childNodes)),this.nodes.push(t)},e.prototype.addAttributes=function(t){var e,r,a=this.stack.env;if(t.isToken)try{for(var n=o([\"mathsize\",\"mathcolor\",\"mathvariant\"]),i=n.next();!i.done;i=n.next()){var s=i.value;a[s]&&!t.attributes.getExplicit(s)&&p.default.setAttribute(t,s,a[s])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},e.prototype.ParseTextArg=function(t,r){return new e(this.GetArgument(t),r=Object.assign(Object.assign({},this.stack.env),r),this.configuration).mml()},e.prototype.ParseArg=function(t){return new e(this.GetArgument(t),this.stack.env,this.configuration).mml()},e.prototype.Error=function(t,e){for(var r=[],a=2;a<arguments.length;a++)r[a-2]=arguments[a];throw new(l.default.bind.apply(l.default,s([void 0,t,e],r)))},e}(c.default);e.TextParser=m},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.handleRetriesFor=MathJax._.util.Retries.handleRetriesFor,e.retryAfter=MathJax._.util.Retries.retryAfter},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(1),n=r(6),o=r(27);new a.MacroMap(\"text-special\",{$:\"Math\",\"%\":\"Comment\",\"^\":\"MathModeOnly\",_:\"MathModeOnly\",\"&\":\"Misplaced\",\"#\":\"Misplaced\",\"~\":\"Tilde\",\" \":\"Space\",\"\\t\":\"Space\",\"\\r\":\"Space\",\"\\n\":\"Space\",\"\\xa0\":\"Tilde\",\"{\":\"OpenBrace\",\"}\":\"CloseBrace\",\"`\":\"OpenQuote\",\"'\":\"CloseQuote\"},o.TextMacrosMethods),new a.CommandMap(\"text-macros\",{\"(\":\"Math\",$:\"SelfQuote\",_:\"SelfQuote\",\"%\":\"SelfQuote\",\"{\":\"SelfQuote\",\"}\":\"SelfQuote\",\" \":\"SelfQuote\",\"&\":\"SelfQuote\",\"#\":\"SelfQuote\",\"\\\\\":\"SelfQuote\",\"'\":[\"Accent\",\"\\xb4\"],\"\\u2019\":[\"Accent\",\"\\xb4\"],\"`\":[\"Accent\",\"`\"],\"\\u2018\":[\"Accent\",\"`\"],\"^\":[\"Accent\",\"^\"],'\"':[\"Accent\",\"\\xa8\"],\"~\":[\"Accent\",\"~\"],\"=\":[\"Accent\",\"\\xaf\"],\".\":[\"Accent\",\"\\u02d9\"],u:[\"Accent\",\"\\u02d8\"],v:[\"Accent\",\"\\u02c7\"],emph:\"Emph\",rm:[\"SetFont\",n.TexConstant.Variant.NORMAL],mit:[\"SetFont\",n.TexConstant.Variant.ITALIC],oldstyle:[\"SetFont\",n.TexConstant.Variant.OLDSTYLE],cal:[\"SetFont\",n.TexConstant.Variant.CALLIGRAPHIC],it:[\"SetFont\",\"-tex-mathit\"],bf:[\"SetFont\",n.TexConstant.Variant.BOLD],bbFont:[\"SetFont\",n.TexConstant.Variant.DOUBLESTRUCK],scr:[\"SetFont\",n.TexConstant.Variant.SCRIPT],frak:[\"SetFont\",n.TexConstant.Variant.FRAKTUR],sf:[\"SetFont\",n.TexConstant.Variant.SANSSERIF],tt:[\"SetFont\",n.TexConstant.Variant.MONOSPACE],tiny:[\"SetSize\",.5],Tiny:[\"SetSize\",.6],scriptsize:[\"SetSize\",.7],small:[\"SetSize\",.85],normalsize:[\"SetSize\",1],large:[\"SetSize\",1.2],Large:[\"SetSize\",1.44],LARGE:[\"SetSize\",1.73],huge:[\"SetSize\",2.07],Huge:[\"SetSize\",2.49],mathcal:\"MathModeOnly\",mathscr:\"MathModeOnly\",mathrm:\"MathModeOnly\",mathbf:\"MathModeOnly\",mathbb:\"MathModeOnly\",mathit:\"MathModeOnly\",mathfrak:\"MathModeOnly\",mathsf:\"MathModeOnly\",mathtt:\"MathModeOnly\",Bbb:[\"Macro\",\"{\\\\bbFont #1}\",1],textrm:[\"Macro\",\"{\\\\rm #1}\",1],textit:[\"Macro\",\"{\\\\it #1}\",1],textbf:[\"Macro\",\"{\\\\bf #1}\",1],textsf:[\"Macro\",\"{\\\\sf #1}\",1],texttt:[\"Macro\",\"{\\\\tt #1}\",1],dagger:[\"Insert\",\"\\u2020\"],ddagger:[\"Insert\",\"\\u2021\"],S:[\"Insert\",\"\\xa7\"],\",\":[\"Spacer\",n.TexConstant.Length.THINMATHSPACE],\":\":[\"Spacer\",n.TexConstant.Length.MEDIUMMATHSPACE],\">\":[\"Spacer\",n.TexConstant.Length.MEDIUMMATHSPACE],\";\":[\"Spacer\",n.TexConstant.Length.THICKMATHSPACE],\"!\":[\"Spacer\",n.TexConstant.Length.NEGATIVETHINMATHSPACE],enspace:[\"Spacer\",\".5em\"],quad:[\"Spacer\",\"1em\"],qquad:[\"Spacer\",\"2em\"],thinspace:[\"Spacer\",n.TexConstant.Length.THINMATHSPACE],negthinspace:[\"Spacer\",n.TexConstant.Length.NEGATIVETHINMATHSPACE],hskip:\"Hskip\",hspace:\"Hskip\",kern:\"Hskip\",mskip:\"Hskip\",mspace:\"Hskip\",mkern:\"Hskip\",rule:\"rule\",Rule:[\"Rule\"],Space:[\"Rule\",\"blank\"],color:\"CheckAutoload\",textcolor:\"CheckAutoload\",colorbox:\"CheckAutoload\",fcolorbox:\"CheckAutoload\",href:\"CheckAutoload\",style:\"CheckAutoload\",class:\"CheckAutoload\",cssId:\"CheckAutoload\",unicode:\"CheckAutoload\",ref:[\"HandleRef\",!1],eqref:[\"HandleRef\",!0]},o.TextMacrosMethods)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UnicodeConfiguration=e.UnicodeMethods=void 0;var a=r(0),n=r(2),o=r(1),i=r(3),s=r(4),c=r(74);e.UnicodeMethods={};var l={};e.UnicodeMethods.Unicode=function(t,e){var r=t.GetBrackets(e),a=null,o=null;r&&(r.replace(/ /g,\"\").match(/^(\\d+(\\.\\d*)?|\\.\\d+),(\\d+(\\.\\d*)?|\\.\\d+)$/)?(a=r.replace(/ /g,\"\").split(/,/),o=t.GetBrackets(e)):o=r);var u=i.default.trimSpaces(t.GetArgument(e)).replace(/^0x/,\"x\");if(!u.match(/^(x[0-9A-Fa-f]+|[0-9]+)$/))throw new n.default(\"BadUnicode\",\"Argument to \\\\unicode must be a number\");var d=parseInt(u.match(/^x/)?\"0\"+u:u);l[d]?o||(o=l[d][2]):l[d]=[800,200,o,d],a&&(l[d][0]=Math.floor(1e3*parseFloat(a[0])),l[d][1]=Math.floor(1e3*parseFloat(a[1])));var p=t.stack.env.font,f={};o?(l[d][2]=f.fontfamily=o.replace(/'/g,\"'\"),p&&(p.match(/bold/)&&(f.fontweight=\"bold\"),p.match(/italic|-mathit/)&&(f.fontstyle=\"italic\"))):p&&(f.mathvariant=p);var m=t.create(\"token\",\"mtext\",f,c.numeric(u));s.default.setProperty(m,\"unicode\",!0),t.Push(m)},new o.CommandMap(\"unicode\",{unicode:\"Unicode\"},e.UnicodeMethods),e.UnicodeConfiguration=a.Configuration.create(\"unicode\",{handler:{macro:[\"unicode\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.options=MathJax._.util.Entities.options,e.entities=MathJax._.util.Entities.entities,e.add=MathJax._.util.Entities.add,e.remove=MathJax._.util.Entities.remove,e.translate=MathJax._.util.Entities.translate,e.numeric=MathJax._.util.Entities.numeric},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.VerbConfiguration=e.VerbMethods=void 0;var a=r(0),n=r(6),o=r(1),i=r(2);e.VerbMethods={},e.VerbMethods.Verb=function(t,e){var r=t.GetNext(),a=++t.i;if(\"\"===r)throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",e);for(;t.i<t.string.length&&t.string.charAt(t.i)!==r;)t.i++;if(t.i===t.string.length)throw new i.default(\"NoClosingDelim\",\"Can't find closing delimiter for %1\",t.currentCS);var o=t.string.slice(a,t.i).replace(/ /g,\"\\xa0\");t.i++,t.Push(t.create(\"token\",\"mtext\",{mathvariant:n.TexConstant.Variant.MONOSPACE},o))},new o.CommandMap(\"verb\",{verb:\"Verb\"},e.VerbMethods),e.VerbConfiguration=a.Configuration.create(\"verb\",{handler:{macro:[\"verb\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Loader=MathJax._.components.loader.Loader,e.MathJax=MathJax._.components.loader.MathJax,e.CONFIG=MathJax._.components.loader.CONFIG},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.mathjax=MathJax._.mathjax.mathjax},function(t,e,r){\"use strict\";r.r(e);var a=r(20),n=r(15),o=r(21),i=r(14);Object(a.combineWithMathJax)({_:{input:{tex:{AllPackages:n,autoload:{AutoloadConfiguration:o},require:{RequireConfiguration:i}}}}});var s,c=r(10);function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,a=new Array(e);r<e;r++)a[r]=t[r];return a}if(MathJax.loader&&MathJax.loader.preLoad(\"[tex]/autoload\",\"[tex]/require\"),MathJax.startup){MathJax.config.tex||(MathJax.config.tex={});var u=MathJax.config.tex.packages;MathJax.config.tex.packages=[\"autoload\",\"require\"].concat(function(t){if(Array.isArray(t))return l(t)}(s=n.AllPackages)||function(t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(s)||function(t,e){if(t){if(\"string\"==typeof t)return l(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(t,e):void 0}}(s)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),u&&Object(c.insert)(MathJax.config.tex,{packages:u})}}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/ams.js",
    "content": "!function(t){var e={};function a(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=t,a.c=e,a.d=function(t,e,r){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},a.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var n in t)a.d(r,n,function(e){return t[e]}.bind(null,n));return r},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a(a.s=18)}([function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NEW_OPS=e.AmsMethods=void 0;var r=a(1),n=a(4),i=a(2),o=a(13),l=a(5),s=a(14),m=a(15),u=a(6);e.AmsMethods={},e.AmsMethods.AmsEqnArray=function(t,e,a,n,i,o,l){var s=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),u=m.default.EqnArray(t,e,a,n,i,o,l);return r.default.setArrayAlign(u,s)},e.AmsMethods.AlignAt=function(t,a,n,i){var o,s,m=a.getName(),u=\"\",c=[];if(i||(s=t.GetBrackets(\"\\\\begin{\"+m+\"}\")),(o=t.GetArgument(\"\\\\begin{\"+m+\"}\")).match(/[^0-9]/))throw new l.default(\"PositiveIntegerArg\",\"Argument to %1 must me a positive integer\",\"\\\\begin{\"+m+\"}\");for(var d=parseInt(o,10);d>0;)u+=\"rl\",c.push(\"0em 0em\"),d--;var h=c.join(\" \");if(i)return e.AmsMethods.EqnArray(t,a,n,i,u,h);var p=e.AmsMethods.EqnArray(t,a,n,i,u,h);return r.default.setArrayAlign(p,s)},e.AmsMethods.Multline=function(t,e,a){t.Push(e),r.default.checkEqnEnv(t);var n=t.itemFactory.create(\"multline\",a,t.stack);return n.arraydef={displaystyle:!0,rowspacing:\".5em\",columnwidth:\"100%\",width:t.options.multlineWidth,side:t.options.tagSide,minlabelspacing:t.options.tagIndent},n},e.NEW_OPS=\"ams-declare-ops\",e.AmsMethods.HandleDeclareOp=function(t,a){var n=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",i=r.default.trimSpaces(t.GetArgument(a));\"\\\\\"===i.charAt(0)&&(i=i.substr(1));var o=t.GetArgument(a);o.match(/\\\\text/)||(o=o.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\")),t.configuration.handlers.retrieve(e.NEW_OPS).add(i,new s.Macro(i,e.AmsMethods.Macro,[\"\\\\mathop{\\\\rm \"+o+\"}\"+n]))},e.AmsMethods.HandleOperatorName=function(t,e){var a=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",n=r.default.trimSpaces(t.GetArgument(e));n.match(/\\\\text/)||(n=n.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\")),t.string=\"\\\\mathop{\\\\rm \"+n+\"}\"+a+\" \"+t.string.slice(t.i),t.i=0},e.AmsMethods.SkipLimits=function(t,e){var a=t.GetNext(),r=t.i;\"\\\\\"===a&&++t.i&&\"limits\"!==t.GetCS()&&(t.i=r)},e.AmsMethods.MultiIntegral=function(t,e,a){var r=t.GetNext();if(\"\\\\\"===r){var n=t.i;r=t.GetArgument(e),t.i=n,\"\\\\limits\"===r&&(a=\"\\\\idotsint\"===e?\"\\\\!\\\\!\\\\mathop{\\\\,\\\\,\"+a+\"}\":\"\\\\!\\\\!\\\\!\\\\mathop{\\\\,\\\\,\\\\,\"+a+\"}\")}t.string=a+\" \"+t.string.slice(t.i),t.i=0},e.AmsMethods.xArrow=function(t,e,a,i,l){var s={width:\"+\"+r.default.Em((i+l)/18),lspace:r.default.Em(i/18)},m=t.GetBrackets(e),c=t.ParseArg(e),d=t.create(\"token\",\"mo\",{stretchy:!0,texClass:u.TEXCLASS.REL},String.fromCodePoint(a)),h=t.create(\"node\",\"munderover\",[d]),p=t.create(\"node\",\"mpadded\",[c],s);if(n.default.setAttribute(p,\"voffset\",\".15em\"),n.default.setChild(h,h.over,p),m){var f=new o.default(m,t.stack.env,t.configuration).mml();p=t.create(\"node\",\"mpadded\",[f],s),n.default.setAttribute(p,\"voffset\",\"-.24em\"),n.default.setChild(h,h.under,p)}n.default.setProperty(h,\"subsupOK\",!0),t.Push(h)},e.AmsMethods.HandleShove=function(t,e,a){var r=t.stack.Top();if(\"multline\"!==r.kind)throw new l.default(\"CommandOnlyAllowedInEnv\",\"%1 only allowed in %2 environment\",t.currentCS,\"multline\");if(r.Size())throw new l.default(\"CommandAtTheBeginingOfLine\",\"%1 must come at the beginning of the line\",t.currentCS);r.setProperty(\"shove\",a)},e.AmsMethods.CFrac=function(t,e){var a=r.default.trimSpaces(t.GetBrackets(e,\"\")),s=t.GetArgument(e),m=t.GetArgument(e),u={l:i.TexConstant.Align.LEFT,r:i.TexConstant.Align.RIGHT,\"\":\"\"},c=new o.default(\"\\\\strut\\\\textstyle{\"+s+\"}\",t.stack.env,t.configuration).mml(),d=new o.default(\"\\\\strut\\\\textstyle{\"+m+\"}\",t.stack.env,t.configuration).mml(),h=t.create(\"node\",\"mfrac\",[c,d]);if(null==(a=u[a]))throw new l.default(\"IllegalAlign\",\"Illegal alignment specified in %1\",t.currentCS);a&&n.default.setProperties(h,{numalign:a,denomalign:a}),t.Push(h)},e.AmsMethods.Genfrac=function(t,e,a,i,o,s){null==a&&(a=t.GetDelimiterArg(e)),null==i&&(i=t.GetDelimiterArg(e)),null==o&&(o=t.GetArgument(e)),null==s&&(s=r.default.trimSpaces(t.GetArgument(e)));var m=t.ParseArg(e),u=t.ParseArg(e),c=t.create(\"node\",\"mfrac\",[m,u]);if(\"\"!==o&&n.default.setAttribute(c,\"linethickness\",o),(a||i)&&(n.default.setProperty(c,\"withDelims\",!0),c=r.default.fixedFence(t.configuration,a,c,i)),\"\"!==s){var d=parseInt(s,10),h=[\"D\",\"T\",\"S\",\"SS\"][d];if(null==h)throw new l.default(\"BadMathStyleFor\",\"Bad math style for %1\",t.currentCS);c=t.create(\"node\",\"mstyle\",[c]),\"D\"===h?n.default.setProperties(c,{displaystyle:!0,scriptlevel:0}):n.default.setProperties(c,{displaystyle:!1,scriptlevel:d-1})}t.Push(c)},e.AmsMethods.HandleTag=function(t,e){if(!t.tags.currentTag.taggable&&t.tags.env)throw new l.default(\"CommandNotAllowedInEnv\",\"%1 not allowed in %2 environment\",t.currentCS,t.tags.env);if(t.tags.currentTag.tag)throw new l.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);var a=t.GetStar(),n=r.default.trimSpaces(t.GetArgument(e));t.tags.tag(n,a)},e.AmsMethods.HandleNoTag=m.default.HandleNoTag,e.AmsMethods.HandleRef=m.default.HandleRef,e.AmsMethods.Macro=m.default.Macro,e.AmsMethods.Accent=m.default.Accent,e.AmsMethods.Tilde=m.default.Tilde,e.AmsMethods.Array=m.default.Array,e.AmsMethods.Spacer=m.default.Spacer,e.AmsMethods.NamedOp=m.default.NamedOp,e.AmsMethods.EqnArray=m.default.EqnArray},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.ParseUtil.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},function(t,e,a){\"use strict\";var r,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.MultlineItem=void 0;var i=a(11),o=a(1),l=a(4),s=a(5),m=a(2),u=function(t){function e(e){for(var a=[],r=1;r<arguments.length;r++)a[r-1]=arguments[r];var n=t.call(this,e)||this;return n.factory.configuration.tags.start(\"multline\",!0,a[0]),n}return n(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"multline\"},enumerable:!1,configurable:!0}),e.prototype.EndEntry=function(){this.table.length&&o.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.getProperty(\"shove\"),e=this.create(\"node\",\"mtd\",this.nodes,t?{columnalign:t}:{});this.setProperty(\"shove\",null),this.row.push(e),this.Clear()},e.prototype.EndRow=function(){if(1!==this.row.length)throw new s.default(\"MultlineRowsOneCol\",\"The rows within the %1 environment must have exactly one column\",\"multline\");var t=this.create(\"node\",\"mtr\",this.row);this.table.push(t),this.row=[]},e.prototype.EndTable=function(){if(t.prototype.EndTable.call(this),this.table.length){var e=this.table.length-1,a=-1;l.default.getAttribute(l.default.getChildren(this.table[0])[0],\"columnalign\")||l.default.setAttribute(l.default.getChildren(this.table[0])[0],\"columnalign\",m.TexConstant.Align.LEFT),l.default.getAttribute(l.default.getChildren(this.table[e])[0],\"columnalign\")||l.default.setAttribute(l.default.getChildren(this.table[e])[0],\"columnalign\",m.TexConstant.Align.RIGHT);var r=this.factory.configuration.tags.getTag();if(r){a=this.arraydef.side===m.TexConstant.Align.LEFT?0:this.table.length-1;var n=this.table[a],i=this.create(\"node\",\"mlabeledtr\",[r].concat(l.default.getChildren(n)));l.default.copyAttributes(n,i),this.table[a]=i}}this.factory.configuration.tags.end()},e}(i.ArrayItem);e.MultlineItem=u},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,e.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,e.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,e.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,e.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,e.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,e.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,e.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,e.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,e.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){\"use strict\";var r,n,i=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AmsConfiguration=e.AmsTags=void 0;var o=a(10),l=a(3),s=a(12),m=a(0);a(16);var u=a(7),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e}(s.AbstractTags);e.AmsTags=c;e.AmsConfiguration=o.Configuration.create(\"ams\",{handler:{delimiter:[\"AMSsymbols-delimiter\",\"AMSmath-delimiter\"],macro:[\"AMSsymbols-mathchar0mi\",\"AMSsymbols-mathchar0m0\",\"AMSsymbols-delimiter\",\"AMSsymbols-macros\",\"AMSmath-mathchar0mo\",\"AMSmath-macros\",\"AMSmath-delimiter\"],environment:[\"AMSmath-environment\"]},items:(n={},n[l.MultlineItem.prototype.kind]=l.MultlineItem,n),tags:{ams:c},init:function(t){new u.CommandMap(m.NEW_OPS,{},{}),t.append(o.Configuration.local({handler:{macro:[m.NEW_OPS]},priority:-1}))}})},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StartItem=MathJax._.input.tex.base.BaseItems.StartItem,e.StopItem=MathJax._.input.tex.base.BaseItems.StopItem,e.OpenItem=MathJax._.input.tex.base.BaseItems.OpenItem,e.CloseItem=MathJax._.input.tex.base.BaseItems.CloseItem,e.PrimeItem=MathJax._.input.tex.base.BaseItems.PrimeItem,e.SubsupItem=MathJax._.input.tex.base.BaseItems.SubsupItem,e.OverItem=MathJax._.input.tex.base.BaseItems.OverItem,e.LeftItem=MathJax._.input.tex.base.BaseItems.LeftItem,e.RightItem=MathJax._.input.tex.base.BaseItems.RightItem,e.BeginItem=MathJax._.input.tex.base.BaseItems.BeginItem,e.EndItem=MathJax._.input.tex.base.BaseItems.EndItem,e.StyleItem=MathJax._.input.tex.base.BaseItems.StyleItem,e.PositionItem=MathJax._.input.tex.base.BaseItems.PositionItem,e.CellItem=MathJax._.input.tex.base.BaseItems.CellItem,e.MmlItem=MathJax._.input.tex.base.BaseItems.MmlItem,e.FnItem=MathJax._.input.tex.base.BaseItems.FnItem,e.NotItem=MathJax._.input.tex.base.BaseItems.NotItem,e.DotsItem=MathJax._.input.tex.base.BaseItems.DotsItem,e.ArrayItem=MathJax._.input.tex.base.BaseItems.ArrayItem,e.EqnArrayItem=MathJax._.input.tex.base.BaseItems.EqnArrayItem,e.EquationItem=MathJax._.input.tex.base.BaseItems.EquationItem},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Label=MathJax._.input.tex.Tags.Label,e.TagInfo=MathJax._.input.tex.Tags.TagInfo,e.AbstractTags=MathJax._.input.tex.Tags.AbstractTags,e.NoTags=MathJax._.input.tex.Tags.NoTags,e.AllTags=MathJax._.input.tex.Tags.AllTags,e.TagsFactory=MathJax._.input.tex.Tags.TagsFactory},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexParser.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Symbol=MathJax._.input.tex.Symbol.Symbol,e.Macro=MathJax._.input.tex.Symbol.Macro},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.base.BaseMethods.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=a(0),n=a(7),i=a(2),o=a(17),l=a(1),s=a(6),m=function(t){for(var e=[],a=0,r=t.length;a<r;a++)e[a]=l.default.Em(t[a]);return e.join(\" \")};new n.CharacterMap(\"AMSmath-mathchar0mo\",o.default.mathchar0mo,{iiiint:[\"\\u2a0c\",{texClass:s.TEXCLASS.OP}]}),new n.CommandMap(\"AMSmath-macros\",{mathring:[\"Accent\",\"02DA\"],nobreakspace:\"Tilde\",negmedspace:[\"Spacer\",i.TexConstant.Length.NEGATIVEMEDIUMMATHSPACE],negthickspace:[\"Spacer\",i.TexConstant.Length.NEGATIVETHICKMATHSPACE],idotsint:[\"MultiIntegral\",\"\\\\int\\\\cdots\\\\int\"],dddot:[\"Accent\",\"20DB\"],ddddot:[\"Accent\",\"20DC\"],sideset:[\"Macro\",\"\\\\mathop{\\\\mathop{\\\\rlap{\\\\phantom{#3}}}\\\\nolimits#1\\\\!\\\\mathop{#3}\\\\nolimits#2}\",3],boxed:[\"Macro\",\"\\\\fbox{$\\\\displaystyle{#1}$}\",1],tag:\"HandleTag\",notag:\"HandleNoTag\",eqref:[\"HandleRef\",!0],substack:[\"Macro\",\"\\\\begin{subarray}{c}#1\\\\end{subarray}\",1],injlim:[\"NamedOp\",\"inj&thinsp;lim\"],projlim:[\"NamedOp\",\"proj&thinsp;lim\"],varliminf:[\"Macro\",\"\\\\mathop{\\\\underline{\\\\mmlToken{mi}{lim}}}\"],varlimsup:[\"Macro\",\"\\\\mathop{\\\\overline{\\\\mmlToken{mi}{lim}}}\"],varinjlim:[\"Macro\",\"\\\\mathop{\\\\underrightarrow{\\\\mmlToken{mi}{lim}}}\"],varprojlim:[\"Macro\",\"\\\\mathop{\\\\underleftarrow{\\\\mmlToken{mi}{lim}}}\"],DeclareMathOperator:\"HandleDeclareOp\",operatorname:\"HandleOperatorName\",SkipLimits:\"SkipLimits\",genfrac:\"Genfrac\",frac:[\"Genfrac\",\"\",\"\",\"\",\"\"],tfrac:[\"Genfrac\",\"\",\"\",\"\",\"1\"],dfrac:[\"Genfrac\",\"\",\"\",\"\",\"0\"],binom:[\"Genfrac\",\"(\",\")\",\"0\",\"\"],tbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"1\"],dbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"0\"],cfrac:\"CFrac\",shoveleft:[\"HandleShove\",i.TexConstant.Align.LEFT],shoveright:[\"HandleShove\",i.TexConstant.Align.RIGHT],xrightarrow:[\"xArrow\",8594,5,6],xleftarrow:[\"xArrow\",8592,7,3]},r.AmsMethods),new n.EnvironmentMap(\"AMSmath-environment\",o.default.environment,{\"eqnarray*\":[\"EqnArray\",null,!1,!0,\"rcl\",\"0 \"+i.TexConstant.Length.THICKMATHSPACE,\".5em\"],align:[\"EqnArray\",null,!0,!0,\"rlrlrlrlrlrl\",m([0,2,0,2,0,2,0,2,0,2,0])],\"align*\":[\"EqnArray\",null,!1,!0,\"rlrlrlrlrlrl\",m([0,2,0,2,0,2,0,2,0,2,0])],multline:[\"Multline\",null,!0],\"multline*\":[\"Multline\",null,!1],split:[\"EqnArray\",null,!1,!1,\"rl\",m([0])],gather:[\"EqnArray\",null,!0,!0,\"c\"],\"gather*\":[\"EqnArray\",null,!1,!0,\"c\"],alignat:[\"AlignAt\",null,!0,!0],\"alignat*\":[\"AlignAt\",null,!1,!0],alignedat:[\"AlignAt\",null,!1,!1],aligned:[\"AmsEqnArray\",null,null,null,\"rlrlrlrlrlrl\",m([0,2,0,2,0,2,0,2,0,2,0]),\".5em\",\"D\"],gathered:[\"AmsEqnArray\",null,null,null,\"c\",null,\".5em\",\"D\"],subarray:[\"Array\",null,null,null,null,m([0]),\"0.1em\",\"S\",1],smallmatrix:[\"Array\",null,null,null,\"c\",m([1/3]),\".2em\",\"S\",1],matrix:[\"Array\",null,null,null,\"c\"],pmatrix:[\"Array\",null,\"(\",\")\",\"c\"],bmatrix:[\"Array\",null,\"[\",\"]\",\"c\"],Bmatrix:[\"Array\",null,\"\\\\{\",\"\\\\}\",\"c\"],vmatrix:[\"Array\",null,\"\\\\vert\",\"\\\\vert\",\"c\"],Vmatrix:[\"Array\",null,\"\\\\Vert\",\"\\\\Vert\",\"c\"],cases:[\"Array\",null,\"\\\\{\",\".\",\"ll\",null,\".2em\",\"T\"]},r.AmsMethods),new n.DelimiterMap(\"AMSmath-delimiter\",o.default.delimiter,{\"\\\\lvert\":[\"|\",{texClass:s.TEXCLASS.OPEN}],\"\\\\rvert\":[\"|\",{texClass:s.TEXCLASS.CLOSE}],\"\\\\lVert\":[\"\\u2016\",{texClass:s.TEXCLASS.OPEN}],\"\\\\rVert\":[\"\\u2016\",{texClass:s.TEXCLASS.CLOSE}]}),new n.CharacterMap(\"AMSsymbols-mathchar0mi\",o.default.mathchar0mi,{digamma:\"\\u03dd\",varkappa:\"\\u03f0\",varGamma:[\"\\u0393\",{mathvariant:i.TexConstant.Variant.ITALIC}],varDelta:[\"\\u0394\",{mathvariant:i.TexConstant.Variant.ITALIC}],varTheta:[\"\\u0398\",{mathvariant:i.TexConstant.Variant.ITALIC}],varLambda:[\"\\u039b\",{mathvariant:i.TexConstant.Variant.ITALIC}],varXi:[\"\\u039e\",{mathvariant:i.TexConstant.Variant.ITALIC}],varPi:[\"\\u03a0\",{mathvariant:i.TexConstant.Variant.ITALIC}],varSigma:[\"\\u03a3\",{mathvariant:i.TexConstant.Variant.ITALIC}],varUpsilon:[\"\\u03a5\",{mathvariant:i.TexConstant.Variant.ITALIC}],varPhi:[\"\\u03a6\",{mathvariant:i.TexConstant.Variant.ITALIC}],varPsi:[\"\\u03a8\",{mathvariant:i.TexConstant.Variant.ITALIC}],varOmega:[\"\\u03a9\",{mathvariant:i.TexConstant.Variant.ITALIC}],beth:\"\\u2136\",gimel:\"\\u2137\",daleth:\"\\u2138\",backprime:[\"\\u2035\",{variantForm:!0}],hslash:\"\\u210f\",varnothing:[\"\\u2205\",{variantForm:!0}],blacktriangle:\"\\u25b4\",triangledown:[\"\\u25bd\",{variantForm:!0}],blacktriangledown:\"\\u25be\",square:\"\\u25fb\",Box:\"\\u25fb\",blacksquare:\"\\u25fc\",lozenge:\"\\u25ca\",Diamond:\"\\u25ca\",blacklozenge:\"\\u29eb\",circledS:[\"\\u24c8\",{mathvariant:i.TexConstant.Variant.NORMAL}],bigstar:\"\\u2605\",sphericalangle:\"\\u2222\",measuredangle:\"\\u2221\",nexists:\"\\u2204\",complement:\"\\u2201\",mho:\"\\u2127\",eth:[\"\\xf0\",{mathvariant:i.TexConstant.Variant.NORMAL}],Finv:\"\\u2132\",diagup:\"\\u2571\",Game:\"\\u2141\",diagdown:\"\\u2572\",Bbbk:[\"k\",{mathvariant:i.TexConstant.Variant.DOUBLESTRUCK}],yen:\"\\xa5\",circledR:\"\\xae\",checkmark:\"\\u2713\",maltese:\"\\u2720\"}),new n.CharacterMap(\"AMSsymbols-mathchar0m0\",o.default.mathchar0mo,{dotplus:\"\\u2214\",ltimes:\"\\u22c9\",smallsetminus:[\"\\u2216\",{variantForm:!0}],rtimes:\"\\u22ca\",Cap:\"\\u22d2\",doublecap:\"\\u22d2\",leftthreetimes:\"\\u22cb\",Cup:\"\\u22d3\",doublecup:\"\\u22d3\",rightthreetimes:\"\\u22cc\",barwedge:\"\\u22bc\",curlywedge:\"\\u22cf\",veebar:\"\\u22bb\",curlyvee:\"\\u22ce\",doublebarwedge:\"\\u2a5e\",boxminus:\"\\u229f\",circleddash:\"\\u229d\",boxtimes:\"\\u22a0\",circledast:\"\\u229b\",boxdot:\"\\u22a1\",circledcirc:\"\\u229a\",boxplus:\"\\u229e\",centerdot:[\"\\u22c5\",{variantForm:!0}],divideontimes:\"\\u22c7\",intercal:\"\\u22ba\",leqq:\"\\u2266\",geqq:\"\\u2267\",leqslant:\"\\u2a7d\",geqslant:\"\\u2a7e\",eqslantless:\"\\u2a95\",eqslantgtr:\"\\u2a96\",lesssim:\"\\u2272\",gtrsim:\"\\u2273\",lessapprox:\"\\u2a85\",gtrapprox:\"\\u2a86\",approxeq:\"\\u224a\",lessdot:\"\\u22d6\",gtrdot:\"\\u22d7\",lll:\"\\u22d8\",llless:\"\\u22d8\",ggg:\"\\u22d9\",gggtr:\"\\u22d9\",lessgtr:\"\\u2276\",gtrless:\"\\u2277\",lesseqgtr:\"\\u22da\",gtreqless:\"\\u22db\",lesseqqgtr:\"\\u2a8b\",gtreqqless:\"\\u2a8c\",doteqdot:\"\\u2251\",Doteq:\"\\u2251\",eqcirc:\"\\u2256\",risingdotseq:\"\\u2253\",circeq:\"\\u2257\",fallingdotseq:\"\\u2252\",triangleq:\"\\u225c\",backsim:\"\\u223d\",thicksim:[\"\\u223c\",{variantForm:!0}],backsimeq:\"\\u22cd\",thickapprox:[\"\\u2248\",{variantForm:!0}],subseteqq:\"\\u2ac5\",supseteqq:\"\\u2ac6\",Subset:\"\\u22d0\",Supset:\"\\u22d1\",sqsubset:\"\\u228f\",sqsupset:\"\\u2290\",preccurlyeq:\"\\u227c\",succcurlyeq:\"\\u227d\",curlyeqprec:\"\\u22de\",curlyeqsucc:\"\\u22df\",precsim:\"\\u227e\",succsim:\"\\u227f\",precapprox:\"\\u2ab7\",succapprox:\"\\u2ab8\",vartriangleleft:\"\\u22b2\",lhd:\"\\u22b2\",vartriangleright:\"\\u22b3\",rhd:\"\\u22b3\",trianglelefteq:\"\\u22b4\",unlhd:\"\\u22b4\",trianglerighteq:\"\\u22b5\",unrhd:\"\\u22b5\",vDash:[\"\\u22a8\",{variantForm:!0}],Vdash:\"\\u22a9\",Vvdash:\"\\u22aa\",smallsmile:[\"\\u2323\",{variantForm:!0}],shortmid:[\"\\u2223\",{variantForm:!0}],smallfrown:[\"\\u2322\",{variantForm:!0}],shortparallel:[\"\\u2225\",{variantForm:!0}],bumpeq:\"\\u224f\",between:\"\\u226c\",Bumpeq:\"\\u224e\",pitchfork:\"\\u22d4\",varpropto:[\"\\u221d\",{variantForm:!0}],backepsilon:\"\\u220d\",blacktriangleleft:\"\\u25c2\",blacktriangleright:\"\\u25b8\",therefore:\"\\u2234\",because:\"\\u2235\",eqsim:\"\\u2242\",vartriangle:[\"\\u25b3\",{variantForm:!0}],Join:\"\\u22c8\",nless:\"\\u226e\",ngtr:\"\\u226f\",nleq:\"\\u2270\",ngeq:\"\\u2271\",nleqslant:[\"\\u2a87\",{variantForm:!0}],ngeqslant:[\"\\u2a88\",{variantForm:!0}],nleqq:[\"\\u2270\",{variantForm:!0}],ngeqq:[\"\\u2271\",{variantForm:!0}],lneq:\"\\u2a87\",gneq:\"\\u2a88\",lneqq:\"\\u2268\",gneqq:\"\\u2269\",lvertneqq:[\"\\u2268\",{variantForm:!0}],gvertneqq:[\"\\u2269\",{variantForm:!0}],lnsim:\"\\u22e6\",gnsim:\"\\u22e7\",lnapprox:\"\\u2a89\",gnapprox:\"\\u2a8a\",nprec:\"\\u2280\",nsucc:\"\\u2281\",npreceq:[\"\\u22e0\",{variantForm:!0}],nsucceq:[\"\\u22e1\",{variantForm:!0}],precneqq:\"\\u2ab5\",succneqq:\"\\u2ab6\",precnsim:\"\\u22e8\",succnsim:\"\\u22e9\",precnapprox:\"\\u2ab9\",succnapprox:\"\\u2aba\",nsim:\"\\u2241\",ncong:\"\\u2247\",nshortmid:[\"\\u2224\",{variantForm:!0}],nshortparallel:[\"\\u2226\",{variantForm:!0}],nmid:\"\\u2224\",nparallel:\"\\u2226\",nvdash:\"\\u22ac\",nvDash:\"\\u22ad\",nVdash:\"\\u22ae\",nVDash:\"\\u22af\",ntriangleleft:\"\\u22ea\",ntriangleright:\"\\u22eb\",ntrianglelefteq:\"\\u22ec\",ntrianglerighteq:\"\\u22ed\",nsubseteq:\"\\u2288\",nsupseteq:\"\\u2289\",nsubseteqq:[\"\\u2288\",{variantForm:!0}],nsupseteqq:[\"\\u2289\",{variantForm:!0}],subsetneq:\"\\u228a\",supsetneq:\"\\u228b\",varsubsetneq:[\"\\u228a\",{variantForm:!0}],varsupsetneq:[\"\\u228b\",{variantForm:!0}],subsetneqq:\"\\u2acb\",supsetneqq:\"\\u2acc\",varsubsetneqq:[\"\\u2acb\",{variantForm:!0}],varsupsetneqq:[\"\\u2acc\",{variantForm:!0}],leftleftarrows:\"\\u21c7\",rightrightarrows:\"\\u21c9\",leftrightarrows:\"\\u21c6\",rightleftarrows:\"\\u21c4\",Lleftarrow:\"\\u21da\",Rrightarrow:\"\\u21db\",twoheadleftarrow:\"\\u219e\",twoheadrightarrow:\"\\u21a0\",leftarrowtail:\"\\u21a2\",rightarrowtail:\"\\u21a3\",looparrowleft:\"\\u21ab\",looparrowright:\"\\u21ac\",leftrightharpoons:\"\\u21cb\",rightleftharpoons:[\"\\u21cc\",{variantForm:!0}],curvearrowleft:\"\\u21b6\",curvearrowright:\"\\u21b7\",circlearrowleft:\"\\u21ba\",circlearrowright:\"\\u21bb\",Lsh:\"\\u21b0\",Rsh:\"\\u21b1\",upuparrows:\"\\u21c8\",downdownarrows:\"\\u21ca\",upharpoonleft:\"\\u21bf\",upharpoonright:\"\\u21be\",downharpoonleft:\"\\u21c3\",restriction:\"\\u21be\",multimap:\"\\u22b8\",downharpoonright:\"\\u21c2\",leftrightsquigarrow:\"\\u21ad\",rightsquigarrow:\"\\u21dd\",leadsto:\"\\u21dd\",dashrightarrow:\"\\u21e2\",dashleftarrow:\"\\u21e0\",nleftarrow:\"\\u219a\",nrightarrow:\"\\u219b\",nLeftarrow:\"\\u21cd\",nRightarrow:\"\\u21cf\",nleftrightarrow:\"\\u21ae\",nLeftrightarrow:\"\\u21ce\"}),new n.DelimiterMap(\"AMSsymbols-delimiter\",o.default.delimiter,{\"\\\\ulcorner\":\"\\u231c\",\"\\\\urcorner\":\"\\u231d\",\"\\\\llcorner\":\"\\u231e\",\"\\\\lrcorner\":\"\\u231f\"}),new n.CommandMap(\"AMSsymbols-macros\",{implies:[\"Macro\",\"\\\\;\\\\Longrightarrow\\\\;\"],impliedby:[\"Macro\",\"\\\\;\\\\Longleftarrow\\\\;\"]},r.AmsMethods)},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.ParseMethods.default},function(t,e,a){\"use strict\";a.r(e);var r=a(8),n=a(9),i=a(3),o=a(0);Object(r.combineWithMathJax)({_:{input:{tex:{ams:{AmsConfiguration:n,AmsItems:i,AmsMethods:o}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/amscd.js",
    "content": "!function(e){var t={};function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,\"a\",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p=\"\",a(a.s=11)}([function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=a(7),r=a(8),o=a(9),i=a(10),c={CD:function(e,t){e.Push(t);var a=e.itemFactory.create(\"array\"),n=e.configuration.options.amscd;return a.setProperties({minw:e.stack.env.CD_minw||n.harrowsize,minh:e.stack.env.CD_minh||n.varrowsize}),a.arraydef={columnalign:\"center\",columnspacing:n.colspace,rowspacing:n.rowspace,displaystyle:!0},a},arrow:function(e,t){var a=e.string.charAt(e.i);if(!a.match(/[><VA.|=]/))return r.Other(e,t);e.i++;var l=e.stack.Top();l.isKind(\"array\")&&!l.Size()||(c.cell(e,t),l=e.stack.Top());for(var s,u=l,d=u.table.length%2==1,m=(u.row.length+(d?0:1))%2;m;)c.cell(e,t),m--;var p={minsize:u.getProperty(\"minw\"),stretchy:!0},f={minsize:u.getProperty(\"minh\"),stretchy:!0,symmetric:!0,lspace:0,rspace:0};if(\".\"===a);else if(\"|\"===a)s=e.create(\"token\",\"mo\",f,\"\\u2225\");else if(\"=\"===a)s=e.create(\"token\",\"mo\",p,\"=\");else{var M={\">\":\"\\u2192\",\"<\":\"\\u2190\",V:\"\\u2193\",A:\"\\u2191\"}[a],h=e.GetUpTo(t+a,a),b=e.GetUpTo(t+a,a);if(\">\"===a||\"<\"===a){if(s=e.create(\"token\",\"mo\",p,M),h||(h=\"\\\\kern \"+u.getProperty(\"minw\")),h||b){var _={width:\".67em\",lspace:\".33em\"};if(s=e.create(\"node\",\"munderover\",[s]),h){var x=new n.default(h,e.stack.env,e.configuration).mml(),g=e.create(\"node\",\"mpadded\",[x],_);i.default.setAttribute(g,\"voffset\",\".1em\"),i.default.setChild(s,s.over,g)}if(b){var v=new n.default(b,e.stack.env,e.configuration).mml();i.default.setChild(s,s.under,e.create(\"node\",\"mpadded\",[v],_))}e.configuration.options.amscd.hideHorizontalLabels&&(s=e.create(\"node\",\"mpadded\",s,{depth:0,height:\".67em\"}))}}else{var C=e.create(\"token\",\"mo\",f,M);s=C,(h||b)&&(s=e.create(\"node\",\"mrow\"),h&&i.default.appendChildren(s,[new n.default(\"\\\\scriptstyle\\\\llap{\"+h+\"}\",e.stack.env,e.configuration).mml()]),C.texClass=o.TEXCLASS.ORD,i.default.appendChildren(s,[C]),b&&i.default.appendChildren(s,[new n.default(\"\\\\scriptstyle\\\\rlap{\"+b+\"}\",e.stack.env,e.configuration).mml()]))}}s&&e.Push(s),c.cell(e,t)},cell:function(e,t){var a=e.stack.Top();(a.table||[]).length%2==0&&0===(a.row||[]).length&&e.Push(e.create(\"node\",\"mpadded\",[],{height:\"8.5pt\",depth:\"2pt\"})),e.Push(e.itemFactory.create(\"cell\").setProperties({isEntry:!0,name:t}))},minCDarrowwidth:function(e,t){e.stack.env.CD_minw=e.GetDimen(t)},minCDarrowheight:function(e,t){e.stack.env.CD_minh=e.GetDimen(t)}};t.default=c},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.AmsCdConfiguration=void 0;var n=a(3);a(4),t.AmsCdConfiguration=n.Configuration.create(\"amscd\",{handler:{character:[\"amscd_special\"],macro:[\"amscd_macros\"],environment:[\"amscd_environment\"]},options:{amscd:{colspace:\"5pt\",rowspace:\"5pt\",harrowsize:\"2.75em\",varrowsize:\"1.75em\",hideHorizontalLabels:!1}}})},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=a(5),r=a(6),o=a(1);new n.EnvironmentMap(\"amscd_environment\",r.default.environment,{CD:\"CD\"},o.default),new n.CommandMap(\"amscd_macros\",{minCDarrowwidth:\"minCDarrowwidth\",minCDarrowheight:\"minCDarrowheight\"},o.default),new n.MacroMap(\"amscd_special\",{\"@\":\"arrow\"},o.default)},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.ParseMethods.default},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.TexParser.default},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Other=MathJax._.input.tex.base.BaseConfiguration.Other,t.BaseTags=MathJax._.input.tex.base.BaseConfiguration.BaseTags,t.BaseConfiguration=MathJax._.input.tex.base.BaseConfiguration.BaseConfiguration},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,t.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,t.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,t.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,t.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,t.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,t.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,t.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,t.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,t.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.NodeUtil.default},function(e,t,a){\"use strict\";a.r(t);var n=a(0),r=a(2),o=a(1);Object(n.combineWithMathJax)({_:{input:{tex:{amscd:{AmsCdConfiguration:r,AmsCdMethods:o}}}}}),function(e,t,a){var r,o,i,c=MathJax.config.tex;if(c&&c.packages){var l=c.packages,s=l.indexOf(e);s>=0&&(l[s]=t),a&&c[e]&&(Object(n.combineConfig)(c,(r={},o=t,i=c[e],o in r?Object.defineProperty(r,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[o]=i,r)),delete c[e])}}(\"amsCd\",\"amscd\",!0)}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/autoload.js",
    "content": "!function(e){var t={};function o(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.m=e,o.c=t,o.d=function(e,t,a){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},o.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(o.r(a),Object.defineProperty(a,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var r in e)o.d(a,r,function(t){return e[t]}.bind(null,r));return a},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,\"a\",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p=\"\",o(o.s=8)}([function(e,t,o){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,o){\"use strict\";var a=this&&this.__read||function(e,t){var o=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!o)return e;var a,r,n=o.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(a=n.next()).done;)i.push(a.value)}catch(e){r={error:e}}finally{try{a&&!a.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}return i},r=this&&this.__values||function(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,o=t&&e[t],a=0;if(o)return o.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&a>=e.length&&(e=void 0),{value:e&&e[a++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(t,\"__esModule\",{value:!0}),t.AutoloadConfiguration=void 0;var n=o(2),i=o(3),l=o(4),u=o(5),c=o(6),s=o(7);function p(e,t,o,n){var i,l,s,p;if(c.Package.packages.has(e.options.require.prefix+o)){var x=e.options.autoload[o],M=a(2===x.length&&Array.isArray(x[0])?x:[x,[]],2),b=M[0],h=M[1];try{for(var y=r(b),m=y.next();!m.done;m=y.next()){var _=m.value;f.remove(_)}}catch(e){i={error:e}}finally{try{m&&!m.done&&(l=y.return)&&l.call(y)}finally{if(i)throw i.error}}try{for(var g=r(h),v=g.next();!v.done;v=g.next()){var O=v.value;d.remove(O)}}catch(e){s={error:e}}finally{try{v&&!v.done&&(p=g.return)&&p.call(g)}finally{if(s)throw s.error}}e.string=(n?t:\"\\\\begin{\"+t.slice(1)+\"}\")+e.string.slice(e.i),e.i=0}u.RequireLoad(e,o)}var f=new i.CommandMap(\"autoload-macros\",{},{}),d=new i.CommandMap(\"autoload-environments\",{},{});t.AutoloadConfiguration=n.Configuration.create(\"autoload\",{handler:{macro:[\"autoload-macros\"],environment:[\"autoload-environments\"]},options:{autoload:s.expandable({action:[\"toggle\",\"mathtip\",\"texttip\"],amscd:[[],[\"CD\"]],bbox:[\"bbox\"],boldsymbol:[\"boldsymbol\"],braket:[\"bra\",\"ket\",\"braket\",\"set\",\"Bra\",\"Ket\",\"Braket\",\"Set\",\"ketbra\",\"Ketbra\"],bussproofs:[[],[\"prooftree\"]],cancel:[\"cancel\",\"bcancel\",\"xcancel\",\"cancelto\"],color:[\"color\",\"definecolor\",\"textcolor\",\"colorbox\",\"fcolorbox\"],enclose:[\"enclose\"],extpfeil:[\"xtwoheadrightarrow\",\"xtwoheadleftarrow\",\"xmapsto\",\"xlongequal\",\"xtofrom\",\"Newextarrow\"],html:[\"href\",\"class\",\"style\",\"cssId\"],mhchem:[\"ce\",\"pu\"],newcommand:[\"newcommand\",\"renewcommand\",\"newenvironment\",\"renewenvironment\",\"def\",\"let\"],unicode:[\"unicode\"],verb:[\"verb\"]})},config:function(e,t){var o,n,i,c,s,x,M=t.parseOptions,b=M.handlers.get(\"macro\"),h=M.handlers.get(\"environment\"),y=M.options.autoload;M.packageData.set(\"autoload\",{Autoload:p});try{for(var m=r(Object.keys(y)),_=m.next();!_.done;_=m.next()){var g=_.value,v=y[g],O=a(2===v.length&&Array.isArray(v[0])?v:[v,[]],2),J=O[0],C=O[1];try{for(var P=(i=void 0,r(J)),S=P.next();!S.done;S=P.next()){var w=S.value;b.lookup(w)&&\"color\"!==w||f.add(w,new l.Macro(w,p,[g,!0]))}}catch(e){i={error:e}}finally{try{S&&!S.done&&(c=P.return)&&c.call(P)}finally{if(i)throw i.error}}try{for(var k=(s=void 0,r(C)),q=k.next();!q.done;q=k.next()){var j=q.value;h.lookup(j)||d.add(j,new l.Macro(j,p,[g,!1]))}}catch(e){s={error:e}}finally{try{q&&!q.done&&(x=k.return)&&x.call(k)}finally{if(s)throw s.error}}}}catch(e){o={error:e}}finally{try{_&&!_.done&&(n=m.return)&&n.call(m)}finally{if(o)throw o.error}}M.packageData.get(\"require\")||u.RequireConfiguration.config(e,t)},init:function(e){e.options.require||s.defaultOptions(e.options,u.RequireConfiguration.options)},priority:10})},function(e,t,o){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,o){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,o){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Symbol=MathJax._.input.tex.Symbol.Symbol,t.Macro=MathJax._.input.tex.Symbol.Macro},function(e,t,o){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.RequireLoad=MathJax._.input.tex.require.RequireConfiguration.RequireLoad,t.RequireMethods=MathJax._.input.tex.require.RequireConfiguration.RequireMethods,t.options=MathJax._.input.tex.require.RequireConfiguration.options,t.RequireConfiguration=MathJax._.input.tex.require.RequireConfiguration.RequireConfiguration},function(e,t,o){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PackageError=MathJax._.components.package.PackageError,t.Package=MathJax._.components.package.Package},function(e,t,o){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.APPEND=MathJax._.util.Options.APPEND,t.REMOVE=MathJax._.util.Options.REMOVE,t.Expandable=MathJax._.util.Options.Expandable,t.expandable=MathJax._.util.Options.expandable,t.makeArray=MathJax._.util.Options.makeArray,t.keys=MathJax._.util.Options.keys,t.copy=MathJax._.util.Options.copy,t.insert=MathJax._.util.Options.insert,t.defaultOptions=MathJax._.util.Options.defaultOptions,t.userOptions=MathJax._.util.Options.userOptions,t.selectOptions=MathJax._.util.Options.selectOptions,t.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,t.separateOptions=MathJax._.util.Options.separateOptions},function(e,t,o){\"use strict\";o.r(t);var a=o(0),r=o(1);Object(a.combineWithMathJax)({_:{input:{tex:{autoload:{AutoloadConfiguration:r}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/bbox.js",
    "content": "!function(t){var e={};function a(o){if(e[o])return e[o].exports;var n=e[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=t,a.c=e,a.d=function(t,e,o){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},a.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(a.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var n in t)a.d(o,n,function(e){return t[e]}.bind(null,n));return o},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a(a.s=5)}([function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BboxConfiguration=e.BboxMethods=void 0;var o=a(2),n=a(3),i=a(4);e.BboxMethods={},e.BboxMethods.BBox=function(t,e){for(var a,o,n,l=t.GetBrackets(e,\"\"),c=t.ParseArg(e),p=l.split(/,/),f=0,s=p.length;f<s;f++){var b=p[f].trim(),d=b.match(/^(\\.\\d+|\\d+(\\.\\d*)?)(pt|em|ex|mu|px|in|cm|mm)$/);if(d){if(a)throw new i.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Padding\",e);var M=u(d[1]+d[3]);M&&(a={height:\"+\"+M,depth:\"+\"+M,lspace:M,width:\"+\"+2*parseInt(d[1],10)+d[3]})}else if(b.match(/^([a-z0-9]+|\\#[0-9a-f]{6}|\\#[0-9a-f]{3})$/i)){if(o)throw new i.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Background\",e);o=b}else if(b.match(/^[-a-z]+:/i)){if(n)throw new i.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Style\",e);n=r(b)}else if(\"\"!==b)throw new i.default(\"InvalidBBoxProperty\",'\"%1\" doesn\\'t look like a color, a padding dimension, or a style',b)}a&&(c=t.create(\"node\",\"mpadded\",[c],a)),(o||n)&&(a={},o&&Object.assign(a,{mathbackground:o}),n&&Object.assign(a,{style:n}),c=t.create(\"node\",\"mstyle\",[c],a)),t.Push(c)};var r=function(t){return t},u=function(t){return t};new n.CommandMap(\"bbox\",{bbox:\"BBox\"},e.BboxMethods),e.BboxConfiguration=o.Configuration.create(\"bbox\",{handler:{macro:[\"bbox\"]}})},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,a){\"use strict\";a.r(e);var o=a(0),n=a(1);Object(o.combineWithMathJax)({_:{input:{tex:{bbox:{BboxConfiguration:n}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/boldsymbol.js",
    "content": "!function(t){var e={};function o(a){if(e[a])return e[a].exports;var n=e[a]={i:a,l:!1,exports:{}};return t[a].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=t,o.c=e,o.d=function(t,e,a){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},o.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(o.r(a),Object.defineProperty(a,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var n in t)o.d(a,n,function(e){return t[e]}.bind(null,n));return a},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,\"a\",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p=\"\",o(o.s=7)}([function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,o){\"use strict\";var a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,o=e&&t[e],a=0;if(o)return o.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&a>=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.BoldsymbolConfiguration=e.rewriteBoldTokens=e.createBoldToken=e.BoldsymbolMethods=void 0;var n=o(2),r=o(3),i=o(4),l=o(5),u=o(6),s={};function c(t,e,o,a){var n=u.NodeFactory.createToken(t,e,o,a);return\"mtext\"!==e&&t.configuration.parser.stack.env.boldsymbol&&(r.default.setProperty(n,\"fixBold\",!0),t.configuration.addNode(\"fixBold\",n)),n}function d(t){var e,o;try{for(var n=a(t.data.getList(\"fixBold\")),l=n.next();!l.done;l=n.next()){var u=l.value;if(r.default.getProperty(u,\"fixBold\")){var c=r.default.getAttribute(u,\"mathvariant\");null==c?r.default.setAttribute(u,\"mathvariant\",i.TexConstant.Variant.BOLD):r.default.setAttribute(u,\"mathvariant\",s[c]||c),r.default.removeProperties(u,\"fixBold\")}}}catch(t){e={error:t}}finally{try{l&&!l.done&&(o=n.return)&&o.call(n)}finally{if(e)throw e.error}}}s[i.TexConstant.Variant.NORMAL]=i.TexConstant.Variant.BOLD,s[i.TexConstant.Variant.ITALIC]=i.TexConstant.Variant.BOLDITALIC,s[i.TexConstant.Variant.FRAKTUR]=i.TexConstant.Variant.BOLDFRAKTUR,s[i.TexConstant.Variant.SCRIPT]=i.TexConstant.Variant.BOLDSCRIPT,s[i.TexConstant.Variant.SANSSERIF]=i.TexConstant.Variant.BOLDSANSSERIF,s[\"-tex-calligraphic\"]=\"-tex-bold-calligraphic\",s[\"-tex-oldstyle\"]=\"-tex-bold-oldstyle\",e.BoldsymbolMethods={},e.BoldsymbolMethods.Boldsymbol=function(t,e){var o=t.stack.env.boldsymbol;t.stack.env.boldsymbol=!0;var a=t.ParseArg(e);t.stack.env.boldsymbol=o,t.Push(a)},new l.CommandMap(\"boldsymbol\",{boldsymbol:\"Boldsymbol\"},e.BoldsymbolMethods),e.createBoldToken=c,e.rewriteBoldTokens=d,e.BoldsymbolConfiguration=n.Configuration.create(\"boldsymbol\",{handler:{macro:[\"boldsymbol\"]},nodes:{token:c},postprocessors:[d]})},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NodeFactory=MathJax._.input.tex.NodeFactory.NodeFactory},function(t,e,o){\"use strict\";o.r(e);var a=o(0),n=o(1);Object(a.combineWithMathJax)({_:{input:{tex:{boldsymbol:{BoldsymbolConfiguration:n}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/braket.js",
    "content": "!function(e){var t={};function r(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,a){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(a,o,function(t){return e[t]}.bind(null,o));return a},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=12)}([function(e,t,r){\"use strict\";var a,o=this&&this.__extends||(a=function(e,t){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.BraketItem=void 0;var n=r(6),i=r(2),c=r(7),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),Object.defineProperty(t.prototype,\"kind\",{get:function(){return\"braket\"},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),t.prototype.checkItem=function(t){return t.isKind(\"close\")?[[this.factory.create(\"mml\",this.toMml())],!0]:t.isKind(\"mml\")?(this.Push(t.toMml()),this.getProperty(\"single\")?[[this.toMml()],!0]:n.BaseItem.fail):e.prototype.checkItem.call(this,t)},t.prototype.toMml=function(){var t=e.prototype.toMml.call(this),r=this.getProperty(\"open\"),a=this.getProperty(\"close\");if(this.getProperty(\"stretchy\"))return c.default.fenced(this.factory.configuration,r,t,a);var o={fence:!0,stretchy:!1,symmetric:!0,texClass:i.TEXCLASS.OPEN},n=this.create(\"token\",\"mo\",o,r);o.texClass=i.TEXCLASS.CLOSE;var u=this.create(\"token\",\"mo\",o,a);return this.create(\"node\",\"mrow\",[n,t,u],{open:r,close:a,texClass:i.TEXCLASS.INNER})},t}(n.BaseItem);t.BraketItem=u},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var a=r(10),o=r(2),n=r(11),i={};i.Macro=a.default.Macro,i.Braket=function(e,t,r,a,o,i){var c=e.GetNext();if(\"\"===c)throw new n.default(\"MissingArgFor\",\"Missing argument for %1\",e.currentCS);var u=!0;\"{\"===c&&(e.i++,u=!1),e.Push(e.itemFactory.create(\"braket\").setProperties({barmax:i,barcount:0,open:r,close:a,stretchy:o,single:u}))},i.Bar=function(e,t){var r=\"|\"===t?\"|\":\"\\u2225\",a=e.stack.Top();if(\"braket\"!==a.kind||a.getProperty(\"barcount\")>=a.getProperty(\"barmax\")){var n=e.create(\"token\",\"mo\",{texClass:o.TEXCLASS.ORD,stretchy:!1},r);e.Push(n)}else{if(\"|\"===r&&\"|\"===e.GetNext()&&(e.i++,r=\"\\u2225\"),a.getProperty(\"stretchy\")){var i=e.create(\"node\",\"TeXAtom\",[],{texClass:o.TEXCLASS.CLOSE});e.Push(i),a.setProperty(\"barcount\",a.getProperty(\"barcount\")+1),i=e.create(\"token\",\"mo\",{stretchy:!0,braketbar:!0},r),e.Push(i),i=e.create(\"node\",\"TeXAtom\",[],{texClass:o.TEXCLASS.OPEN}),e.Push(i)}else{var c=e.create(\"token\",\"mo\",{stretchy:!1,braketbar:!0},r);e.Push(c)}}},t.default=i},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,t.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,t.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,t.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,t.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,t.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,t.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,t.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,t.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,t.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,r){\"use strict\";var a;Object.defineProperty(t,\"__esModule\",{value:!0}),t.BraketConfiguration=void 0;var o=r(5),n=r(0);r(8),t.BraketConfiguration=o.Configuration.create(\"braket\",{handler:{character:[\"Braket-characters\"],macro:[\"Braket-macros\"]},items:(a={},a[n.BraketItem.prototype.kind]=n.BraketItem,a)})},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.MmlStack=MathJax._.input.tex.StackItem.MmlStack,t.BaseItem=MathJax._.input.tex.StackItem.BaseItem},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.ParseUtil.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var a=r(9),o=r(1);new a.CommandMap(\"Braket-macros\",{bra:[\"Macro\",\"{\\\\langle {#1} \\\\vert}\",1],ket:[\"Macro\",\"{\\\\vert {#1} \\\\rangle}\",1],braket:[\"Braket\",\"\\u27e8\",\"\\u27e9\",!1,1/0],set:[\"Braket\",\"{\",\"}\",!1,1],Bra:[\"Macro\",\"{\\\\left\\\\langle {#1} \\\\right\\\\vert}\",1],Ket:[\"Macro\",\"{\\\\left\\\\vert {#1} \\\\right\\\\rangle}\",1],Braket:[\"Braket\",\"\\u27e8\",\"\\u27e9\",!0,1/0],Set:[\"Braket\",\"{\",\"}\",!0,1],ketbra:[\"Macro\",\"{\\\\vert {#1} \\\\rangle\\\\langle {#2} \\\\vert}\",2],Ketbra:[\"Macro\",\"{\\\\left\\\\vert {#1} \\\\right\\\\rangle\\\\left\\\\langle {#2} \\\\right\\\\vert}\",2],\"|\":\"Bar\"},o.default),new a.MacroMap(\"Braket-characters\",{\"|\":\"Bar\"},o.default)},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.base.BaseMethods.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.TexError.default},function(e,t,r){\"use strict\";r.r(t);var a=r(3),o=r(4),n=r(0),i=r(1);Object(a.combineWithMathJax)({_:{input:{tex:{braket:{BraketConfiguration:o,BraketItems:n,BraketMethods:i}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/bussproofs.js",
    "content": "!function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=15)}([function(e,t,r){\"use strict\";var o,n=this&&this.__read||function(e,t){var r=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var o,n,a=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(o=a.next()).done;)i.push(o.value)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}return i},a=this&&this.__values||function(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,r=t&&e[t],o=0;if(r)return r.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&o>=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(t,\"__esModule\",{value:!0}),t.clearDocument=t.saveDocument=t.makeBsprAttributes=t.removeProperty=t.getProperty=t.setProperty=t.balanceRules=void 0;var i=r(10),l=r(4),u=null,f=null,s=function(e){return f.root=e,u.outputJax.getBBox(f,u).w},c=function(e){for(var t=0;e&&!i.default.isType(e,\"mtable\");){if(i.default.isType(e,\"text\"))return null;i.default.isType(e,\"mrow\")?(e=e.childNodes[0],t=0):(e=e.parent.childNodes[t],t++)}return e},d=function(e,t){return e.childNodes[\"up\"===t?1:0].childNodes[0].childNodes[0].childNodes[0].childNodes[0]},p=function(e,t){return e.childNodes[t].childNodes[0].childNodes[0]},m=function(e){return p(e,0)},h=function(e){return p(e,e.childNodes.length-1)},y=function(e,t){return e.childNodes[\"up\"===t?0:1].childNodes[0].childNodes[0].childNodes[0]},v=function(e){for(;e&&!i.default.isType(e,\"mtd\");)e=e.parent;return e},P=function(e){return e.parent.childNodes[e.parent.childNodes.indexOf(e)+1]},g=function(e){for(;e&&null==t.getProperty(e,\"inference\");)e=e.parent;return e},b=function(e,t,r){void 0===r&&(r=!1);var o=0;if(e===t)return o;if(e!==t.parent){var n=e.childNodes,a=r?n.length-1:0;i.default.isType(n[a],\"mspace\")&&(o+=s(n[a])),e=t.parent}if(e===t)return o;var l=e.childNodes,u=r?l.length-1:0;return l[u]!==t&&(o+=s(l[u])),o},x=function(e,r){void 0===r&&(r=!1);var o=c(e),n=y(o,t.getProperty(o,\"inferenceRule\"));return b(e,o,r)+(s(o)-s(n))/2},M=function(e,r,o,n){if(void 0===n&&(n=!1),t.getProperty(r,\"inferenceRule\")||t.getProperty(r,\"labelledRule\")){var a=e.nodeFactory.create(\"node\",\"mrow\");r.parent.replaceChild(a,r),a.setChildren([r]),_(r,a),r=a}var u=n?r.childNodes.length-1:0,f=r.childNodes[u];i.default.isType(f,\"mspace\")?i.default.setAttribute(f,\"width\",l.default.Em(l.default.dimen2em(i.default.getAttribute(f,\"width\"))+o)):(f=e.nodeFactory.create(\"node\",\"mspace\",[],{width:l.default.Em(o)}),n?r.appendChild(f):(f.parent=r,r.childNodes.unshift(f)))},_=function(e,r){[\"inference\",\"proof\",\"maxAdjust\",\"labelledRule\"].forEach((function(o){var n=t.getProperty(e,o);null!=n&&(t.setProperty(r,o,n),t.removeProperty(e,o))}))},w=function(e,r,o,n,a){var i=e.nodeFactory.create(\"node\",\"mspace\",[],{width:l.default.Em(a)});if(\"left\"===n){var u=r.childNodes[o].childNodes[0];i.parent=u,u.childNodes.unshift(i)}else r.childNodes[o].appendChild(i);t.setProperty(r.parent,\"sequentAdjust_\"+n,a)},T=function(e,r){for(var o=r.pop();r.length;){var a=r.pop(),i=n(C(o,a),2),l=i[0],u=i[1];t.getProperty(o.parent,\"axiom\")&&(w(e,l<0?o:a,0,\"left\",Math.abs(l)),w(e,u<0?o:a,2,\"right\",Math.abs(u))),o=a}},C=function(e,t){var r=s(e.childNodes[2]),o=s(t.childNodes[2]);return[s(e.childNodes[0])-s(t.childNodes[0]),r-o]};t.balanceRules=function(e){var r,o;f=new e.document.options.MathItem(\"\",null,e.math.display);var n=e.data;!function(e){var r=e.nodeLists.sequent;if(r)for(var o=r.length-1,n=void 0;n=r[o];o--)if(t.getProperty(n,\"sequentProcessed\"))t.removeProperty(n,\"sequentProcessed\");else{var a=[],i=g(n);if(1===t.getProperty(i,\"inference\")){for(a.push(n);1===t.getProperty(i,\"inference\");){i=c(i);var l=m(d(i,t.getProperty(i,\"inferenceRule\"))),u=t.getProperty(l,\"inferenceRule\")?y(l,t.getProperty(l,\"inferenceRule\")):l;t.getProperty(u,\"sequent\")&&(n=u.childNodes[0],a.push(n),t.setProperty(n,\"sequentProcessed\",!0)),i=l}T(e,a)}}}(n);var i=n.nodeLists.inference||[];try{for(var l=a(i),u=l.next();!u.done;u=l.next()){var s=u.value,p=t.getProperty(s,\"proof\"),_=c(s),w=d(_,t.getProperty(_,\"inferenceRule\")),C=m(w);if(t.getProperty(C,\"inference\")){var I=x(C);if(I){M(n,C,-I);var S=b(s,_,!1);M(n,s,I-S)}}var N=h(w);if(null!=t.getProperty(N,\"inference\")){var A=x(N,!0);M(n,N,-A,!0);var j=b(s,_,!0),L=t.getProperty(s,\"maxAdjust\");null!=L&&(A=Math.max(A,L));var k=void 0;if(!p&&(k=v(s))){var O=P(k);if(O){var J=n.nodeFactory.create(\"node\",\"mspace\",[],{width:A-j+\"em\"});O.appendChild(J),s.removeProperty(\"maxAdjust\")}else{var B=g(k);B&&(A=t.getProperty(B,\"maxAdjust\")?Math.max(t.getProperty(B,\"maxAdjust\"),A):A,t.setProperty(B,\"maxAdjust\",A))}}else M(n,t.getProperty(s,\"proof\")?s:s.parent,A-j,!0)}}}catch(e){r={error:e}}finally{try{u&&!u.done&&(o=l.return)&&o.call(l)}finally{if(r)throw r.error}}};var I=((o={}).bspr_maxAdjust=!0,o);t.setProperty=function(e,t,r){i.default.setProperty(e,\"bspr_\"+t,r)},t.getProperty=function(e,t){return i.default.getProperty(e,\"bspr_\"+t)},t.removeProperty=function(e,t){e.removeProperty(\"bspr_\"+t)},t.makeBsprAttributes=function(e){e.data.root.walkTree((function(e,t){var r=[];e.getPropertyNames().forEach((function(t){!I[t]&&t.match(RegExp(\"^bspr_\"))&&r.push(t+\":\"+e.getProperty(t))})),r.length&&i.default.setAttribute(e,\"semantics\",r.join(\";\"))}))},t.saveDocument=function(e){if(!(\"getBBox\"in(u=e.document).outputJax))throw Error(\"The bussproofs extension requires an output jax with a getBBox() method\")},t.clearDocument=function(e){u=null}},function(e,t,r){\"use strict\";var o,n=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.ProofTreeItem=void 0;var a=r(3),i=r(8),l=r(9),u=r(0),f=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.leftLabel=null,t.rigthLabel=null,t.innerStack=new l.default(t.factory,{},!0),t}return n(t,e),Object.defineProperty(t.prototype,\"kind\",{get:function(){return\"proofTree\"},enumerable:!1,configurable:!0}),t.prototype.checkItem=function(e){if(e.isKind(\"end\")&&\"prooftree\"===e.getName()){var t=this.toMml();return u.setProperty(t,\"proof\",!0),[[this.factory.create(\"mml\",t),e],!0]}if(e.isKind(\"stop\"))throw new a.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return this.innerStack.Push(e),i.BaseItem.fail},t.prototype.toMml=function(){var t=e.prototype.toMml.call(this),r=this.innerStack.Top();if(r.isKind(\"start\")&&!r.Size())return t;this.innerStack.Push(this.factory.create(\"stop\"));var o=this.innerStack.Top().toMml();return this.create(\"node\",\"mrow\",[o,t],{})},t}(i.BaseItem);t.ProofTreeItem=f},function(e,t,r){\"use strict\";var o=this&&this.__read||function(e,t){var r=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var o,n,a=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(o=a.next()).done;)i.push(o.value)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}return i},n=this&&this.__spread||function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(o(arguments[t]));return e};Object.defineProperty(t,\"__esModule\",{value:!0});var a=r(3),i=r(12),l=r(4),u=r(0),f={Prooftree:function(e,t){return e.Push(t),e.itemFactory.create(\"proofTree\").setProperties({name:t.getName(),line:\"solid\",currentLine:\"solid\",rootAtTop:!1})},Axiom:function(e,t){var r=e.stack.Top();if(\"proofTree\"!==r.kind)throw new a.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var o=s(e,e.GetArgument(t));u.setProperty(o,\"axiom\",!0),r.Push(o)}},s=function(e,t){var r=l.default.internalMath(e,l.default.trimSpaces(t),0);if(!r[0].childNodes[0].childNodes.length)return e.create(\"node\",\"mrow\",[]);var o=e.create(\"node\",\"mspace\",[],{width:\".5ex\"}),a=e.create(\"node\",\"mspace\",[],{width:\".5ex\"});return e.create(\"node\",\"mrow\",n([o],r,[a]))};function c(e,t,r,o,n,a,i){var l,f,s,c,d=e.create(\"node\",\"mtr\",[e.create(\"node\",\"mtd\",[t],{})],{}),p=e.create(\"node\",\"mtr\",[e.create(\"node\",\"mtd\",r,{})],{}),m=e.create(\"node\",\"mtable\",i?[p,d]:[d,p],{align:\"top 2\",rowlines:a,framespacing:\"0 0\"});if(u.setProperty(m,\"inferenceRule\",i?\"up\":\"down\"),o&&(l=e.create(\"node\",\"mpadded\",[o],{height:\"+.5em\",width:\"+.5em\",voffset:\"-.15em\"}),u.setProperty(l,\"prooflabel\",\"left\")),n&&(f=e.create(\"node\",\"mpadded\",[n],{height:\"+.5em\",width:\"+.5em\",voffset:\"-.15em\"}),u.setProperty(f,\"prooflabel\",\"right\")),o&&n)s=[l,m,f],c=\"both\";else if(o)s=[l,m],c=\"left\";else{if(!n)return m;s=[m,f],c=\"right\"}return m=e.create(\"node\",\"mrow\",s),u.setProperty(m,\"labelledRule\",c),m}function d(e,t){if(\"$\"!==e.GetNext())throw new a.default(\"IllegalUseOfCommand\",\"Use of %1 does not match it's definition.\",t);e.i++;var r=e.GetUpTo(t,\"$\");if(-1===r.indexOf(\"\\\\fCenter\"))throw new a.default(\"IllegalUseOfCommand\",\"Missing \\\\fCenter in %1.\",t);var n=o(r.split(\"\\\\fCenter\"),2),l=n[0],f=n[1],s=new i.default(l,e.stack.env,e.configuration).mml(),c=new i.default(f,e.stack.env,e.configuration).mml(),d=new i.default(\"\\\\fCenter\",e.stack.env,e.configuration).mml(),p=e.create(\"node\",\"mtd\",[s],{}),m=e.create(\"node\",\"mtd\",[d],{}),h=e.create(\"node\",\"mtd\",[c],{}),y=e.create(\"node\",\"mtr\",[p,m,h],{}),v=e.create(\"node\",\"mtable\",[y],{columnspacing:\".5ex\",columnalign:\"center 2\"});return u.setProperty(v,\"sequent\",!0),e.configuration.addNode(\"sequent\",y),v}f.Inference=function(e,t,r){var o=e.stack.Top();if(\"proofTree\"!==o.kind)throw new a.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");if(o.Size()<r)throw new a.default(\"BadProofTree\",\"Proof tree badly specified.\");var n=o.getProperty(\"rootAtTop\"),i=1!==r||o.Peek()[0].childNodes.length?r:0,l=[];do{l.length&&l.unshift(e.create(\"node\",\"mtd\",[],{})),l.unshift(e.create(\"node\",\"mtd\",[o.Pop()],{rowalign:n?\"top\":\"bottom\"})),r--}while(r>0);var f=e.create(\"node\",\"mtr\",l,{}),d=e.create(\"node\",\"mtable\",[f],{framespacing:\"0 0\"}),p=s(e,e.GetArgument(t)),m=o.getProperty(\"currentLine\");m!==o.getProperty(\"line\")&&o.setProperty(\"currentLine\",o.getProperty(\"line\"));var h=c(e,d,[p],o.getProperty(\"left\"),o.getProperty(\"right\"),m,n);o.setProperty(\"left\",null),o.setProperty(\"right\",null),u.setProperty(h,\"inference\",i),e.configuration.addNode(\"inference\",h),o.Push(h)},f.Label=function(e,t,r){var o=e.stack.Top();if(\"proofTree\"!==o.kind)throw new a.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var n=l.default.internalMath(e,e.GetArgument(t),0),i=n.length>1?e.create(\"node\",\"mrow\",n,{}):n[0];o.setProperty(r,i)},f.SetLine=function(e,t,r,o){var n=e.stack.Top();if(\"proofTree\"!==n.kind)throw new a.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");n.setProperty(\"currentLine\",r),o&&n.setProperty(\"line\",r)},f.RootAtTop=function(e,t,r){var o=e.stack.Top();if(\"proofTree\"!==o.kind)throw new a.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");o.setProperty(\"rootAtTop\",r)},f.AxiomF=function(e,t){var r=e.stack.Top();if(\"proofTree\"!==r.kind)throw new a.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var o=d(e,t);u.setProperty(o,\"axiom\",!0),r.Push(o)},f.FCenter=function(e,t){},f.InferenceF=function(e,t,r){var o=e.stack.Top();if(\"proofTree\"!==o.kind)throw new a.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");if(o.Size()<r)throw new a.default(\"BadProofTree\",\"Proof tree badly specified.\");var n=o.getProperty(\"rootAtTop\"),i=1!==r||o.Peek()[0].childNodes.length?r:0,l=[];do{l.length&&l.unshift(e.create(\"node\",\"mtd\",[],{})),l.unshift(e.create(\"node\",\"mtd\",[o.Pop()],{rowalign:n?\"top\":\"bottom\"})),r--}while(r>0);var f=e.create(\"node\",\"mtr\",l,{}),s=e.create(\"node\",\"mtable\",[f],{framespacing:\"0 0\"}),p=d(e,t),m=o.getProperty(\"currentLine\");m!==o.getProperty(\"line\")&&o.setProperty(\"currentLine\",o.getProperty(\"line\"));var h=c(e,s,[p],o.getProperty(\"left\"),o.getProperty(\"right\"),m,n);o.setProperty(\"left\",null),o.setProperty(\"right\",null),u.setProperty(h,\"inference\",i),e.configuration.addNode(\"inference\",h),o.Push(h)},t.default=f},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.TexError.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.ParseUtil.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,r){\"use strict\";var o;Object.defineProperty(t,\"__esModule\",{value:!0}),t.BussproofsConfiguration=void 0;var n=r(7),a=r(1),i=r(0);r(11),t.BussproofsConfiguration=n.Configuration.create(\"bussproofs\",{handler:{macro:[\"Bussproofs-macros\"],environment:[\"Bussproofs-environments\"]},items:(o={},o[a.ProofTreeItem.prototype.kind]=a.ProofTreeItem,o),preprocessors:[[i.saveDocument,1]],postprocessors:[[i.clearDocument,3],[i.makeBsprAttributes,2],[i.balanceRules,1]]})},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.MmlStack=MathJax._.input.tex.StackItem.MmlStack,t.BaseItem=MathJax._.input.tex.StackItem.BaseItem},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.Stack.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.NodeUtil.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var o=r(2),n=r(13),a=r(14);new a.CommandMap(\"Bussproofs-macros\",{AxiomC:\"Axiom\",UnaryInfC:[\"Inference\",1],BinaryInfC:[\"Inference\",2],TrinaryInfC:[\"Inference\",3],QuaternaryInfC:[\"Inference\",4],QuinaryInfC:[\"Inference\",5],RightLabel:[\"Label\",\"right\"],LeftLabel:[\"Label\",\"left\"],AXC:\"Axiom\",UIC:[\"Inference\",1],BIC:[\"Inference\",2],TIC:[\"Inference\",3],RL:[\"Label\",\"right\"],LL:[\"Label\",\"left\"],noLine:[\"SetLine\",\"none\",!1],singleLine:[\"SetLine\",\"solid\",!1],solidLine:[\"SetLine\",\"solid\",!1],dashedLine:[\"SetLine\",\"dashed\",!1],alwaysNoLine:[\"SetLine\",\"none\",!0],alwaysSingleLine:[\"SetLine\",\"solid\",!0],alwaysSolidLine:[\"SetLine\",\"solid\",!0],alwaysDashedLine:[\"SetLine\",\"dashed\",!0],rootAtTop:[\"RootAtTop\",!0],alwaysRootAtTop:[\"RootAtTop\",!0],rootAtBottom:[\"RootAtTop\",!1],alwaysRootAtBottom:[\"RootAtTop\",!1],fCenter:\"FCenter\",Axiom:\"AxiomF\",UnaryInf:[\"InferenceF\",1],BinaryInf:[\"InferenceF\",2],TrinaryInf:[\"InferenceF\",3],QuaternaryInf:[\"InferenceF\",4],QuinaryInf:[\"InferenceF\",5]},o.default),new a.EnvironmentMap(\"Bussproofs-environments\",n.default.environment,{prooftree:[\"Prooftree\",null,!1]},o.default)},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.TexParser.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.ParseMethods.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,r){\"use strict\";r.r(t);var o=r(5),n=r(6),a=r(1),i=r(2),l=r(0);Object(o.combineWithMathJax)({_:{input:{tex:{bussproofs:{BussproofsConfiguration:n,BussproofsItems:a,BussproofsMethods:i,BussproofsUtil:l}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/cancel.js",
    "content": "!function(e){var t={};function n(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)n.d(a,o,function(t){return e[t]}.bind(null,o));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=7)}([function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.CancelConfiguration=t.CancelMethods=void 0;var a=n(2),o=n(3),i=n(4),r=n(5),c=n(6);t.CancelMethods={},t.CancelMethods.Cancel=function(e,t,n){var a=e.GetBrackets(t,\"\"),o=e.ParseArg(t),i=r.default.keyvalOptions(a,c.ENCLOSE_OPTIONS);i.notation=n,e.Push(e.create(\"node\",\"menclose\",[o],i))},t.CancelMethods.CancelTo=function(e,t){var n=e.GetBrackets(t,\"\"),a=e.ParseArg(t),i=e.ParseArg(t),u=r.default.keyvalOptions(n,c.ENCLOSE_OPTIONS);u.notation=[o.TexConstant.Notation.UPDIAGONALSTRIKE,o.TexConstant.Notation.UPDIAGONALARROW,o.TexConstant.Notation.NORTHEASTARROW].join(\" \"),a=e.create(\"node\",\"mpadded\",[a],{depth:\"-.1em\",height:\"+.1em\",voffset:\".1em\"}),e.Push(e.create(\"node\",\"msup\",[e.create(\"node\",\"menclose\",[i],u),a]))},new i.CommandMap(\"cancel\",{cancel:[\"Cancel\",o.TexConstant.Notation.UPDIAGONALSTRIKE],bcancel:[\"Cancel\",o.TexConstant.Notation.DOWNDIAGONALSTRIKE],xcancel:[\"Cancel\",o.TexConstant.Notation.UPDIAGONALSTRIKE+\" \"+o.TexConstant.Notation.DOWNDIAGONALSTRIKE],cancelto:\"CancelTo\"},t.CancelMethods),t.CancelConfiguration=a.Configuration.create(\"cancel\",{handler:{macro:[\"cancel\"]}})},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.ParseUtil.default},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.ENCLOSE_OPTIONS=MathJax._.input.tex.enclose.EncloseConfiguration.ENCLOSE_OPTIONS,t.EncloseMethods=MathJax._.input.tex.enclose.EncloseConfiguration.EncloseMethods,t.EncloseConfiguration=MathJax._.input.tex.enclose.EncloseConfiguration.EncloseConfiguration},function(e,t,n){\"use strict\";n.r(t);var a=n(0),o=n(1);Object(a.combineWithMathJax)({_:{input:{tex:{cancel:{CancelConfiguration:o}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/color.js",
    "content": "!function(e){var o={};function t(r){if(o[r])return o[r].exports;var n=o[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,t),n.l=!0,n.exports}t.m=e,t.c=o,t.d=function(e,o,r){t.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:r})},t.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},t.t=function(e,o){if(1&o&&(e=t(e)),8&o)return e;if(4&o&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&o&&\"string\"!=typeof e)for(var n in e)t.d(r,n,function(o){return e[o]}.bind(null,n));return r},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,\"a\",o),o},t.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},t.p=\"\",t(t.s=10)}([function(e,o,t){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0}),o.ColorMethods=void 0;var r=t(7),n=t(8);function a(e){var o=\"+\"+e,t=e.replace(/^.*?([a-z]*)$/,\"$1\");return{width:\"+\"+2*parseFloat(o)+t,height:o,depth:o,lspace:e}}o.ColorMethods={},o.ColorMethods.Color=function(e,o){var t=e.GetBrackets(o,\"\"),r=e.GetArgument(o),n=e.configuration.packageData.get(\"color\").model.getColor(t,r),a=e.itemFactory.create(\"style\").setProperties({styles:{mathcolor:n}});e.stack.env.color=n,e.Push(a)},o.ColorMethods.TextColor=function(e,o){var t=e.GetBrackets(o,\"\"),r=e.GetArgument(o),n=e.configuration.packageData.get(\"color\").model.getColor(t,r),a=e.stack.env.color;e.stack.env.color=n;var l=e.ParseArg(o);a?e.stack.env.color=a:delete e.stack.env.color;var i=e.create(\"node\",\"mstyle\",[l],{mathcolor:n});e.Push(i)},o.ColorMethods.DefineColor=function(e,o){var t=e.GetArgument(o),r=e.GetArgument(o),n=e.GetArgument(o);e.configuration.packageData.get(\"color\").model.defineColor(r,t,n)},o.ColorMethods.ColorBox=function(e,o){var t=e.GetArgument(o),l=n.default.internalMath(e,e.GetArgument(o)),i=e.configuration.packageData.get(\"color\").model,u=e.create(\"node\",\"mpadded\",l,{mathbackground:i.getColor(\"named\",t)});r.default.setProperties(u,a(e.options.color.padding)),e.Push(u)},o.ColorMethods.FColorBox=function(e,o){var t=e.GetArgument(o),l=e.GetArgument(o),i=n.default.internalMath(e,e.GetArgument(o)),u=e.options.color,d=e.configuration.packageData.get(\"color\").model,c=e.create(\"node\",\"mpadded\",i,{mathbackground:d.getColor(\"named\",l),style:\"border: \"+u.borderWidth+\" solid \"+d.getColor(\"named\",t)});r.default.setProperties(c,a(u.padding)),e.Push(c)}},function(e,o,t){\"use strict\";var r=this&&this.__values||function(e){var o=\"function\"==typeof Symbol&&Symbol.iterator,t=o&&e[o],r=0;if(t)return t.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(o?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(o,\"__esModule\",{value:!0}),o.ColorModel=void 0;var n=t(9),a=t(2),l=new Map,i=function(){function e(){this.userColors=new Map}return e.prototype.normalizeColor=function(e,o){if(!e||\"named\"===e)return o;if(l.has(e))return l.get(e)(o);throw new n.default(\"UndefinedColorModel\",\"Color model '%1' not defined\",e)},e.prototype.getColor=function(e,o){return e&&\"named\"!==e?this.normalizeColor(e,o):this.getColorByName(o)},e.prototype.getColorByName=function(e){return this.userColors.has(e)?this.userColors.get(e):a.COLORS.has(e)?a.COLORS.get(e):e},e.prototype.defineColor=function(e,o,t){var r=this.normalizeColor(e,t);this.userColors.set(o,r)},e}();o.ColorModel=i,l.set(\"rgb\",(function(e){var o,t,a=e.trim().split(/\\s*,\\s*/),l=\"#\";if(3!==a.length)throw new n.default(\"ModelArg1\",\"Color values for the %1 model require 3 numbers\",\"rgb\");try{for(var i=r(a),u=i.next();!u.done;u=i.next()){var d=u.value;if(!d.match(/^(\\d+(\\.\\d*)?|\\.\\d+)$/))throw new n.default(\"InvalidDecimalNumber\",\"Invalid decimal number\");var c=parseFloat(d);if(c<0||c>1)throw new n.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"rgb\",\"0\",\"1\");var s=Math.floor(255*c).toString(16);s.length<2&&(s=\"0\"+s),l+=s}}catch(e){o={error:e}}finally{try{u&&!u.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return l})),l.set(\"RGB\",(function(e){var o,t,a=e.trim().split(/\\s*,\\s*/),l=\"#\";if(3!==a.length)throw new n.default(\"ModelArg1\",\"Color values for the %1 model require 3 numbers\",\"RGB\");try{for(var i=r(a),u=i.next();!u.done;u=i.next()){var d=u.value;if(!d.match(/^\\d+$/))throw new n.default(\"InvalidNumber\",\"Invalid number\");var c=parseInt(d);if(c>255)throw new n.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"RGB\",\"0\",\"255\");var s=c.toString(16);s.length<2&&(s=\"0\"+s),l+=s}}catch(e){o={error:e}}finally{try{u&&!u.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return l})),l.set(\"gray\",(function(e){if(!e.match(/^\\s*(\\d+(\\.\\d*)?|\\.\\d+)\\s*$/))throw new n.default(\"InvalidDecimalNumber\",\"Invalid decimal number\");var o=parseFloat(e);if(o<0||o>1)throw new n.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"gray\",\"0\",\"1\");var t=Math.floor(255*o).toString(16);return t.length<2&&(t=\"0\"+t),\"#\"+t+t+t}))},function(e,o,t){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0}),o.COLORS=void 0,o.COLORS=new Map([[\"Apricot\",\"#FBB982\"],[\"Aquamarine\",\"#00B5BE\"],[\"Bittersweet\",\"#C04F17\"],[\"Black\",\"#221E1F\"],[\"Blue\",\"#2D2F92\"],[\"BlueGreen\",\"#00B3B8\"],[\"BlueViolet\",\"#473992\"],[\"BrickRed\",\"#B6321C\"],[\"Brown\",\"#792500\"],[\"BurntOrange\",\"#F7921D\"],[\"CadetBlue\",\"#74729A\"],[\"CarnationPink\",\"#F282B4\"],[\"Cerulean\",\"#00A2E3\"],[\"CornflowerBlue\",\"#41B0E4\"],[\"Cyan\",\"#00AEEF\"],[\"Dandelion\",\"#FDBC42\"],[\"DarkOrchid\",\"#A4538A\"],[\"Emerald\",\"#00A99D\"],[\"ForestGreen\",\"#009B55\"],[\"Fuchsia\",\"#8C368C\"],[\"Goldenrod\",\"#FFDF42\"],[\"Gray\",\"#949698\"],[\"Green\",\"#00A64F\"],[\"GreenYellow\",\"#DFE674\"],[\"JungleGreen\",\"#00A99A\"],[\"Lavender\",\"#F49EC4\"],[\"LimeGreen\",\"#8DC73E\"],[\"Magenta\",\"#EC008C\"],[\"Mahogany\",\"#A9341F\"],[\"Maroon\",\"#AF3235\"],[\"Melon\",\"#F89E7B\"],[\"MidnightBlue\",\"#006795\"],[\"Mulberry\",\"#A93C93\"],[\"NavyBlue\",\"#006EB8\"],[\"OliveGreen\",\"#3C8031\"],[\"Orange\",\"#F58137\"],[\"OrangeRed\",\"#ED135A\"],[\"Orchid\",\"#AF72B0\"],[\"Peach\",\"#F7965A\"],[\"Periwinkle\",\"#7977B8\"],[\"PineGreen\",\"#008B72\"],[\"Plum\",\"#92268F\"],[\"ProcessBlue\",\"#00B0F0\"],[\"Purple\",\"#99479B\"],[\"RawSienna\",\"#974006\"],[\"Red\",\"#ED1B23\"],[\"RedOrange\",\"#F26035\"],[\"RedViolet\",\"#A1246B\"],[\"Rhodamine\",\"#EF559F\"],[\"RoyalBlue\",\"#0071BC\"],[\"RoyalPurple\",\"#613F99\"],[\"RubineRed\",\"#ED017D\"],[\"Salmon\",\"#F69289\"],[\"SeaGreen\",\"#3FBC9D\"],[\"Sepia\",\"#671800\"],[\"SkyBlue\",\"#46C5DD\"],[\"SpringGreen\",\"#C6DC67\"],[\"Tan\",\"#DA9D76\"],[\"TealBlue\",\"#00AEB3\"],[\"Thistle\",\"#D883B7\"],[\"Turquoise\",\"#00B4CE\"],[\"Violet\",\"#58429B\"],[\"VioletRed\",\"#EF58A0\"],[\"White\",\"#FFFFFF\"],[\"WildStrawberry\",\"#EE2967\"],[\"Yellow\",\"#FFF200\"],[\"YellowGreen\",\"#98CC70\"],[\"YellowOrange\",\"#FAA21A\"]])},function(e,o,t){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0}),o.isObject=MathJax._.components.global.isObject,o.combineConfig=MathJax._.components.global.combineConfig,o.combineDefaults=MathJax._.components.global.combineDefaults,o.combineWithMathJax=MathJax._.components.global.combineWithMathJax,o.MathJax=MathJax._.components.global.MathJax},function(e,o,t){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0}),o.ColorConfiguration=void 0;var r=t(5),n=t(6),a=t(0),l=t(1);new r.CommandMap(\"color\",{color:\"Color\",textcolor:\"TextColor\",definecolor:\"DefineColor\",colorbox:\"ColorBox\",fcolorbox:\"FColorBox\"},a.ColorMethods);o.ColorConfiguration=n.Configuration.create(\"color\",{handler:{macro:[\"color\"]},options:{color:{padding:\"5px\",borderWidth:\"2px\"}},config:function(e,o){o.parseOptions.packageData.set(\"color\",{model:new l.ColorModel})}})},function(e,o,t){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0}),o.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,o.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,o.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,o.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,o.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,o.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,o.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,o.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,o,t){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0}),o.Configuration=MathJax._.input.tex.Configuration.Configuration,o.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,o.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,o,t){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0}),o.default=MathJax._.input.tex.NodeUtil.default},function(e,o,t){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0}),o.default=MathJax._.input.tex.ParseUtil.default},function(e,o,t){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0}),o.default=MathJax._.input.tex.TexError.default},function(e,o,t){\"use strict\";t.r(o);var r=t(3),n=t(4),a=t(2),l=t(0),i=t(1);Object(r.combineWithMathJax)({_:{input:{tex:{color:{ColorConfiguration:n,ColorConstants:a,ColorMethods:l,ColorUtil:i}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/colorV2.js",
    "content": "!function(t){var e={};function o(a){if(e[a])return e[a].exports;var n=e[a]={i:a,l:!1,exports:{}};return t[a].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=t,o.c=e,o.d=function(t,e,a){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},o.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(o.r(a),Object.defineProperty(a,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var n in t)o.d(a,n,function(e){return t[e]}.bind(null,n));return a},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,\"a\",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p=\"\",o(o.s=4)}([function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorConfiguration=e.ColorV2Methods=void 0;var a=o(2),n=o(3);e.ColorV2Methods={Color:function(t,e){var o=t.GetArgument(e),a=t.stack.env.color;t.stack.env.color=o;var n=t.ParseArg(e);a?t.stack.env.color=a:delete t.stack.env.color;var r=t.create(\"node\",\"mstyle\",[n],{mathcolor:o});t.Push(r)}},new a.CommandMap(\"colorv2\",{color:\"Color\"},e.ColorV2Methods),e.ColorConfiguration=n.Configuration.create(\"colorv2\",{handler:{macro:[\"colorv2\"]}})},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,o){\"use strict\";o.r(e);var a=o(0),n=o(1);Object(a.combineWithMathJax)({_:{input:{tex:{colorv2:{ColorV2Configuration:n}}}}}),function(t,e,o){var n,r,i,c=MathJax.config.tex;if(c&&c.packages){var l=c.packages,u=l.indexOf(t);u>=0&&(l[u]=e),o&&c[t]&&(Object(a.combineConfig)(c,(n={},r=e,i=c[t],r in n?Object.defineProperty(n,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[r]=i,n)),delete c[t])}}(\"colorV2\",\"colorv2\",!1)}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/configMacros.js",
    "content": "!function(t){var e={};function a(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,a),o.l=!0,o.exports}a.m=t,a.c=e,a.d=function(t,e,n){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},a.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)a.d(n,o,function(e){return t[e]}.bind(null,o));return n},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a(a.s=7)}([function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,a=e&&t[e],n=0;if(a)return a.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ConfigMacrosConfiguration=void 0;var o=a(2),i=a(3),r=a(4),u=a(5),c=a(6);e.ConfigMacrosConfiguration=o.Configuration.create(\"configmacros\",{init:function(t){new r.CommandMap(\"configmacros-map\",{},{}),t.append(o.Configuration.local({handler:{macro:[\"configmacros-map\"]},priority:3}))},config:function(t,e){var a,o,i=e.parseOptions.handlers.retrieve(\"configmacros-map\"),r=e.parseOptions.options.macros;try{for(var l=n(Object.keys(r)),p=l.next();!p.done;p=l.next()){var s=p.value,f=\"string\"==typeof r[s]?[r[s]]:r[s],M=Array.isArray(f[2])?new u.Macro(s,c.default.MacroWithTemplate,f.slice(0,2).concat(f[2])):new u.Macro(s,c.default.Macro,f);i.add(s,M)}}catch(t){a={error:t}}finally{try{p&&!p.done&&(o=l.return)&&o.call(l)}finally{if(a)throw a.error}}},options:{macros:i.expandable({})}})},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Symbol=MathJax._.input.tex.Symbol.Symbol,e.Macro=MathJax._.input.tex.Symbol.Macro},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.newcommand.NewcommandMethods.default},function(t,e,a){\"use strict\";a.r(e);var n=a(0),o=a(1);Object(n.combineWithMathJax)({_:{input:{tex:{configmacros:{ConfigMacrosConfiguration:o}}}}}),function(t,e,a){var o,i,r,u=MathJax.config.tex;if(u&&u.packages){var c=u.packages,l=c.indexOf(t);l>=0&&(c[l]=e),a&&u[t]&&(Object(n.combineConfig)(u,(o={},i=e,r=u[t],i in o?Object.defineProperty(o,i,{value:r,enumerable:!0,configurable:!0,writable:!0}):o[i]=r,o)),delete u[t])}}(\"configMacros\",\"configmacros\",!1)}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/enclose.js",
    "content": "!function(e){var t={};function a(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,a),o.l=!0,o.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)a.d(n,o,function(t){return e[t]}.bind(null,o));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,\"a\",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p=\"\",a(a.s=5)}([function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.EncloseConfiguration=t.EncloseMethods=t.ENCLOSE_OPTIONS=void 0;var n=a(2),o=a(3),r=a(4);t.ENCLOSE_OPTIONS={\"data-arrowhead\":1,color:1,mathcolor:1,background:1,mathbackground:1,\"data-padding\":1,\"data-thickness\":1},t.EncloseMethods={},t.EncloseMethods.Enclose=function(e,a){var n=e.GetArgument(a).replace(/,/g,\" \"),o=e.GetBrackets(a,\"\"),i=e.ParseArg(a),u=r.default.keyvalOptions(o,t.ENCLOSE_OPTIONS);u.notation=n,e.Push(e.create(\"node\",\"menclose\",[i],u))},new o.CommandMap(\"enclose\",{enclose:\"Enclose\"},t.EncloseMethods),t.EncloseConfiguration=n.Configuration.create(\"enclose\",{handler:{macro:[\"enclose\"]}})},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.ParseUtil.default},function(e,t,a){\"use strict\";a.r(t);var n=a(0),o=a(1);Object(n.combineWithMathJax)({_:{input:{tex:{enclose:{EncloseConfiguration:o}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/extpfeil.js",
    "content": "!function(t){var e={};function a(o){if(e[o])return e[o].exports;var n=e[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=t,a.c=e,a.d=function(t,e,o){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},a.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(a.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var n in t)a.d(o,n,function(e){return t[e]}.bind(null,n));return o},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a(a.s=8)}([function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ExtpfeilConfiguration=e.ExtpfeilMethods=void 0;var o=a(2),n=a(3),r=a(4),i=a(5),u=a(6),l=a(7);e.ExtpfeilMethods={},e.ExtpfeilMethods.xArrow=r.AmsMethods.xArrow,e.ExtpfeilMethods.NewExtArrow=function(t,a){var o=t.GetArgument(a),n=t.GetArgument(a),r=t.GetArgument(a);if(!o.match(/^\\\\([a-z]+|.)$/i))throw new l.default(\"NewextarrowArg1\",\"First argument to %1 must be a control sequence name\",a);if(!n.match(/^(\\d+),(\\d+)$/))throw new l.default(\"NewextarrowArg2\",\"Second argument to %1 must be two integers separated by a comma\",a);if(!r.match(/^(\\d+|0x[0-9A-F]+)$/i))throw new l.default(\"NewextarrowArg3\",\"Third argument to %1 must be a unicode character number\",a);o=o.substr(1);var u=n.split(\",\");i.default.addMacro(t,o,e.ExtpfeilMethods.xArrow,[parseInt(r),parseInt(u[0]),parseInt(u[1])])},new n.CommandMap(\"extpfeil\",{xtwoheadrightarrow:[\"xArrow\",8608,12,16],xtwoheadleftarrow:[\"xArrow\",8606,17,13],xmapsto:[\"xArrow\",8614,6,7],xlongequal:[\"xArrow\",61,7,7],xtofrom:[\"xArrow\",8644,12,12],Newextarrow:\"NewExtArrow\"},e.ExtpfeilMethods);e.ExtpfeilConfiguration=o.Configuration.create(\"extpfeil\",{handler:{macro:[\"extpfeil\"]},init:function(t){u.NewcommandConfiguration.init(t)}})},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AmsMethods=MathJax._.input.tex.ams.AmsMethods.AmsMethods,e.NEW_OPS=MathJax._.input.tex.ams.AmsMethods.NEW_OPS},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.newcommand.NewcommandUtil.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NewcommandConfiguration=MathJax._.input.tex.newcommand.NewcommandConfiguration.NewcommandConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,a){\"use strict\";a.r(e);var o=a(0),n=a(1);Object(o.combineWithMathJax)({_:{input:{tex:{extpfeil:{ExtpfeilConfiguration:n}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/html.js",
    "content": "!function(t){var e={};function a(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=t,a.c=e,a.d=function(t,e,n){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},a.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var r in t)a.d(n,r,function(e){return t[e]}.bind(null,r));return n},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a(a.s=6)}([function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=a(5),r={Href:function(t,e){var a=t.GetArgument(e),r=o(t,e);n.default.setAttribute(r,\"href\",a),t.Push(r)},Class:function(t,e){var a=t.GetArgument(e),r=o(t,e),u=n.default.getAttribute(r,\"class\");u&&(a=u+\" \"+a),n.default.setAttribute(r,\"class\",a),t.Push(r)},Style:function(t,e){var a=t.GetArgument(e),r=o(t,e),u=n.default.getAttribute(r,\"style\");u&&(\";\"!==a.charAt(a.length-1)&&(a+=\";\"),a=u+\" \"+a),n.default.setAttribute(r,\"style\",a),t.Push(r)},Id:function(t,e){var a=t.GetArgument(e),r=o(t,e);n.default.setAttribute(r,\"id\",a),t.Push(r)}},o=function(t,e){var a=t.ParseArg(e);if(!n.default.isInferred(a))return a;var r=n.default.getChildren(a);if(1===r.length)return r[0];var o=t.create(\"node\",\"mrow\");return n.default.copyChildren(a,o),n.default.copyAttributes(a,o),o};e.default=r},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HtmlConfiguration=void 0;var n=a(3),r=a(4),o=a(0);new r.CommandMap(\"html_macros\",{href:\"Href\",class:\"Class\",style:\"Style\",cssId:\"Id\"},o.default),e.HtmlConfiguration=n.Configuration.create(\"html\",{handler:{macro:[\"html_macros\"]}})},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},function(t,e,a){\"use strict\";a.r(e);var n=a(1),r=a(2),o=a(0);Object(n.combineWithMathJax)({_:{input:{tex:{html:{HtmlConfiguration:r,HtmlMethods:o}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/mhchem.js",
    "content": "!function(t){var e={};function a(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,a),o.l=!0,o.exports}a.m=t,a.c=e,a.d=function(t,e,n){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},a.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)a.d(n,o,function(e){return t[e]}.bind(null,o));return n},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a(a.s=8)}([function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MhchemConfiguration=void 0;var n=a(2),o=a(3),r=a(4),i=a(5),c=a(6),u=a(7),p={};p.Macro=i.default.Macro,p.xArrow=c.AmsMethods.xArrow,p.Machine=function(t,e,a){try{var n=t.GetArgument(e),o=u.mhchemParser.go(n,a),i=u.texify.go(o);t.string=i+t.string.substr(t.i),t.i=0}catch(t){throw new r.default(t[0],t[1],t.slice(2))}},new o.CommandMap(\"mhchem\",{ce:[\"Machine\",\"ce\"],pu:[\"Machine\",\"pu\"],longrightleftharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle{-}\\\\!\\\\!{\\\\rightharpoonup}}{\\\\smash{{\\\\leftharpoondown}\\\\!\\\\!{-}}}\"],longRightleftharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle{-}\\\\!\\\\!{\\\\rightharpoonup}}{\\\\smash{\\\\leftharpoondown}}\"],longLeftrightharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle\\\\vphantom{{-}}{\\\\rightharpoonup}}{\\\\smash{{\\\\leftharpoondown}\\\\!\\\\!{-}}}\"],longleftrightarrows:[\"Macro\",\"\\\\stackrel{\\\\longrightarrow}{\\\\smash{\\\\longleftarrow}\\\\Rule{0px}{.25em}{0px}}\"],tripledash:[\"Macro\",\"\\\\vphantom{-}\\\\raise2mu{\\\\kern2mu\\\\tiny\\\\text{-}\\\\kern1mu\\\\text{-}\\\\kern1mu\\\\text{-}\\\\kern2mu}\"],xrightarrow:[\"xArrow\",8594,5,6],xleftarrow:[\"xArrow\",8592,7,3],xleftrightarrow:[\"xArrow\",8596,6,6],xrightleftharpoons:[\"xArrow\",8652,5,7],xRightleftharpoons:[\"xArrow\",8652,5,7],xLeftrightharpoons:[\"xArrow\",8652,5,7]},p),e.MhchemConfiguration=n.Configuration.create(\"mhchem\",{handler:{macro:[\"mhchem\"]}})},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.base.BaseMethods.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AmsMethods=MathJax._.input.tex.ams.AmsMethods.AmsMethods,e.NEW_OPS=MathJax._.input.tex.ams.AmsMethods.NEW_OPS},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n={go:function(t,e){if(!t)return[];void 0===e&&(e=\"ce\");var a,o=\"0\",r={};r.parenthesisLevel=0,t=(t=(t=t.replace(/\\n/g,\" \")).replace(/[\\u2212\\u2013\\u2014\\u2010]/g,\"-\")).replace(/[\\u2026]/g,\"...\");for(var i=10,c=[];;){a!==t?(i=10,a=t):i--;var u=n.stateMachines[e],p=u.transitions[o]||u.transitions[\"*\"];t:for(var s=0;s<p.length;s++){var _=n.patterns.match_(p[s].pattern,t);if(_){for(var d=p[s].task,l=0;l<d.action_.length;l++){var m;if(u.actions[d.action_[l].type_])m=u.actions[d.action_[l].type_](r,_.match_,d.action_[l].option);else{if(!n.actions[d.action_[l].type_])throw[\"MhchemBugA\",\"mhchem bug A. Please report. (\"+d.action_[l].type_+\")\"];m=n.actions[d.action_[l].type_](r,_.match_,d.action_[l].option)}n.concatArray(c,m)}if(o=d.nextState||o,!(t.length>0))return c;if(d.revisit||(t=_.remainder),!d.toContinue)break t}}if(i<=0)throw[\"MhchemBugU\",\"mhchem bug U. Please report.\"]}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var a=0;a<e.length;a++)t.push(e[a]);else t.push(e)},patterns:{patterns:{empty:/^$/,else:/^./,else2:/^./,space:/^\\s/,\"space A\":/^\\s(?=[A-Z\\\\$])/,space$:/^\\s$/,\"a-z\":/^[a-z]/,x:/^x/,x$:/^x$/,i$:/^i$/,letters:/^(?:[a-zA-Z\\u03B1-\\u03C9\\u0391-\\u03A9?@]|(?:\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))))+/,\"\\\\greek\":/^\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))/,\"one lowercase latin letter $\":/^(?:([a-z])(?:$|[^a-zA-Z]))$/,\"$one lowercase latin letter$ $\":/^\\$(?:([a-z])(?:$|[^a-zA-Z]))\\$$/,\"one lowercase greek letter $\":/^(?:\\$?[\\u03B1-\\u03C9]\\$?|\\$?\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\\s*\\$?)(?:\\s+|\\{\\}|(?![a-zA-Z]))$/,digits:/^[0-9]+/,\"-9.,9\":/^[+\\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))/,\"-9.,9 no missing 0\":/^[+\\-]?[0-9]+(?:[.,][0-9]+)?/,\"(-)(9.,9)(e)(99)\":function(t){var e=t.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))?(\\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))\\))?(?:([eE]|\\s*(\\*|x|\\\\times|\\u00D7)\\s*10\\^)([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\}))?/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},\"(-)(9)^(-9)\":function(t){var e=t.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+)?)\\^([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\})/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},\"state of aggregation $\":function(t){var e=n.patterns.findObserveGroups(t,\"\",/^\\([a-z]{1,3}(?=[\\),])/,\")\",\"\");if(e&&e.remainder.match(/^($|[\\s,;\\)\\]\\}])/))return e;var a=t.match(/^(?:\\((?:\\\\ca\\s?)?\\$[amothc]\\$\\))/);return a?{match_:a[0],remainder:t.substr(a[0].length)}:null},\"_{(state of aggregation)}$\":/^_\\{(\\([a-z]{1,3}\\))\\}/,\"{[(\":/^(?:\\\\\\{|\\[|\\()/,\")]}\":/^(?:\\)|\\]|\\\\\\})/,\", \":/^[,;]\\s*/,\",\":/^[,;]/,\".\":/^[.]/,\". \":/^([.\\u22C5\\u00B7\\u2022])\\s*/,\"...\":/^\\.\\.\\.(?=$|[^.])/,\"* \":/^([*])\\s*/,\"^{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"^{\",\"\",\"\",\"}\")},\"^($...$)\":function(t){return n.patterns.findObserveGroups(t,\"^\",\"$\",\"$\",\"\")},\"^a\":/^\\^([0-9]+|[^\\\\_])/,\"^\\\\x{}{}\":function(t){return n.patterns.findObserveGroups(t,\"^\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"^\\\\x{}\":function(t){return n.patterns.findObserveGroups(t,\"^\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"^\\\\x\":/^\\^(\\\\[a-zA-Z]+)\\s*/,\"^(-1)\":/^\\^(-?\\d+)/,\"'\":/^'/,\"_{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"_{\",\"\",\"\",\"}\")},\"_($...$)\":function(t){return n.patterns.findObserveGroups(t,\"_\",\"$\",\"$\",\"\")},_9:/^_([+\\-]?[0-9]+|[^\\\\])/,\"_\\\\x{}{}\":function(t){return n.patterns.findObserveGroups(t,\"_\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"_\\\\x{}\":function(t){return n.patterns.findObserveGroups(t,\"_\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"_\\\\x\":/^_(\\\\[a-zA-Z]+)\\s*/,\"^_\":/^(?:\\^(?=_)|\\_(?=\\^)|[\\^_]$)/,\"{}\":/^\\{\\}/,\"{...}\":function(t){return n.patterns.findObserveGroups(t,\"\",\"{\",\"}\",\"\")},\"{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"{\",\"\",\"\",\"}\")},\"$...$\":function(t){return n.patterns.findObserveGroups(t,\"\",\"$\",\"$\",\"\")},\"${(...)}$\":function(t){return n.patterns.findObserveGroups(t,\"${\",\"\",\"\",\"}$\")},\"$(...)$\":function(t){return n.patterns.findObserveGroups(t,\"$\",\"\",\"\",\"$\")},\"=<>\":/^[=<>]/,\"#\":/^[#\\u2261]/,\"+\":/^\\+/,\"-$\":/^-(?=[\\s_},;\\]/]|$|\\([a-z]+\\))/,\"-9\":/^-(?=[0-9])/,\"- orbital overlap\":/^-(?=(?:[spd]|sp)(?:$|[\\s,;\\)\\]\\}]))/,\"-\":/^-/,\"pm-operator\":/^(?:\\\\pm|\\$\\\\pm\\$|\\+-|\\+\\/-)/,operator:/^(?:\\+|(?:[\\-=<>]|<<|>>|\\\\approx|\\$\\\\approx\\$)(?=\\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\\(v\\)|\\^|\\(\\^\\))(?=$|[\\s,;\\)\\]\\}])/,\"\\\\bond{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\bond{\",\"\",\"\",\"}\")},\"->\":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\\u2192\\u27F6\\u21CC])/,CMT:/^[CMT](?=\\[)/,\"[(...)]\":function(t){return n.patterns.findObserveGroups(t,\"[\",\"\",\"\",\"]\")},\"1st-level escape\":/^(&|\\\\\\\\|\\\\hline)\\s*/,\"\\\\,\":/^(?:\\\\[,\\ ;:])/,\"\\\\x{}{}\":function(t){return n.patterns.findObserveGroups(t,\"\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"\\\\x{}\":function(t){return n.patterns.findObserveGroups(t,\"\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"\\\\ca\":/^\\\\ca(?:\\s+|(?![a-zA-Z]))/,\"\\\\x\":/^(?:\\\\[a-zA-Z]+\\s*|\\\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\\/~|]/,\"\\\\frac{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\frac{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\overset{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\overset{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\underset{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\underset{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\underbrace{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\underbrace{\",\"\",\"\",\"}_\",\"{\",\"\",\"\",\"}\")},\"\\\\color{(...)}0\":function(t){return n.patterns.findObserveGroups(t,\"\\\\color{\",\"\",\"\",\"}\")},\"\\\\color{(...)}{(...)}1\":function(t){return n.patterns.findObserveGroups(t,\"\\\\color{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\color(...){(...)}2\":function(t){return n.patterns.findObserveGroups(t,\"\\\\color\",\"\\\\\",\"\",/^(?=\\{)/,\"{\",\"\",\"\",\"}\")},\"\\\\ce{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\ce{\",\"\",\"\",\"}\")},oxidation$:/^(?:[+-][IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\"d-oxidation$\":/^(?:[+-]?\\s?[IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\"roman numeral\":/^[IVX]+/,\"1/2$\":/^[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+(?:\\$[a-z]\\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\\([+\\-]?[0-9]+\\/[0-9]+\\)|[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+|[+\\-]?[0-9]+[.,][0-9]+|[+\\-]?\\.[0-9]+|[+\\-]?[0-9]+)(?:[a-z](?=\\s*[A-Z]))?)|[+\\-]?[a-z](?=\\s*[A-Z])|\\+(?!\\s))/))return{match_:e[0],remainder:t.substr(e[0].length)};var a=n.patterns.findObserveGroups(t,\"\",\"$\",\"$\",\"\");return a&&(e=a.match_.match(/^\\$(?:\\(?[+\\-]?(?:[0-9]*[a-z]?[+\\-])?[0-9]*[a-z](?:[+\\-][0-9]*[a-z]?)?\\)?|\\+|-)\\$$/))?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},\"(KV letters),\":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\\([a-z]+\\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\\ \\+\\-\\,\\.\\(\\)]+[a-z])+[0-9\\ \\+\\-\\,\\.\\(\\)]*|(?:[a-z][0-9\\ \\+\\-\\,\\.\\(\\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,\"/\":/^\\s*(\\/)\\s*/,\"//\":/^\\s*(\\/\\/)\\s*/,\"*\":/^\\s*[*.]\\s*/},findObserveGroups:function(t,e,a,n,o,r,i,c,u,p){var s=function(t,e){if(\"string\"==typeof e)return 0!==t.indexOf(e)?null:e;var a=t.match(e);return a?a[0]:null},_=s(t,e);if(null===_)return null;if(t=t.substr(_.length),null===(_=s(t,a)))return null;var d=function(t,e,a){for(var n=0;e<t.length;){var o=t.charAt(e),r=s(t.substr(e),a);if(null!==r&&0===n)return{endMatchBegin:e,endMatchEnd:e+r.length};if(\"{\"===o)n++;else if(\"}\"===o){if(0===n)throw[\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"];n--}e++}return null}(t,_.length,n||o);if(null===d)return null;var l=t.substring(0,n?d.endMatchEnd:d.endMatchBegin);if(r||i){var m=this.findObserveGroups(t.substr(d.endMatchEnd),r,i,c,u);if(null===m)return null;var h=[l,m.match_];return{match_:p?h.join(\"\"):h,remainder:m.remainder}}return{match_:l,remainder:t.substr(d.endMatchEnd)}},match_:function(t,e){var a=n.patterns.patterns[t];if(void 0===a)throw[\"MhchemBugP\",\"mhchem bug P. Please report. (\"+t+\")\"];if(\"function\"==typeof a)return n.patterns.patterns[t](e);var o=e.match(a);return o?{match_:o[2]?[o[1],o[2]]:o[1]?o[1]:o[0],remainder:e.substr(o[0].length)}:null}},actions:{\"a=\":function(t,e){t.a=(t.a||\"\")+e},\"b=\":function(t,e){t.b=(t.b||\"\")+e},\"p=\":function(t,e){t.p=(t.p||\"\")+e},\"o=\":function(t,e){t.o=(t.o||\"\")+e},\"q=\":function(t,e){t.q=(t.q||\"\")+e},\"d=\":function(t,e){t.d=(t.d||\"\")+e},\"rm=\":function(t,e){t.rm=(t.rm||\"\")+e},\"text=\":function(t,e){t.text_=(t.text_||\"\")+e},insert:function(t,e,a){return{type_:a}},\"insert+p1\":function(t,e,a){return{type_:a,p1:e}},\"insert+p1+p2\":function(t,e,a){return{type_:a,p1:e[0],p2:e[1]}},copy:function(t,e){return e},rm:function(t,e){return{type_:\"rm\",p1:e||\"\"}},text:function(t,e){return n.go(e,\"text\")},\"{text}\":function(t,e){var a=[\"{\"];return n.concatArray(a,n.go(e,\"text\")),a.push(\"}\"),a},\"tex-math\":function(t,e){return n.go(e,\"tex-math\")},\"tex-math tight\":function(t,e){return n.go(e,\"tex-math tight\")},bond:function(t,e,a){return{type_:\"bond\",kind_:a||e}},\"color0-output\":function(t,e){return{type_:\"color0\",color:e[0]}},ce:function(t,e){return n.go(e)},\"1/2\":function(t,e){var a=[];e.match(/^[+\\-]/)&&(a.push(e.substr(0,1)),e=e.substr(1));var n=e.match(/^([0-9]+|\\$[a-z]\\$|[a-z])\\/([0-9]+)(\\$[a-z]\\$|[a-z])?$/);return n[1]=n[1].replace(/\\$/g,\"\"),a.push({type_:\"frac\",p1:n[1],p2:n[2]}),n[3]&&(n[3]=n[3].replace(/\\$/g,\"\"),a.push({type_:\"tex-math\",p1:n[3]})),a},\"9,9\":function(t,e){return n.go(e,\"9,9\")}},createTransitions:function(t){var e,a,n,o,r={};for(e in t)for(a in t[e])for(n=a.split(\"|\"),t[e][a].stateArray=n,o=0;o<n.length;o++)r[n[o]]=[];for(e in t)for(a in t[e])for(n=t[e][a].stateArray||[],o=0;o<n.length;o++){var i=t[e][a];if(i.action_){i.action_=[].concat(i.action_);for(var c=0;c<i.action_.length;c++)\"string\"==typeof i.action_[c]&&(i.action_[c]={type_:i.action_[c]})}else i.action_=[];for(var u=e.split(\"|\"),p=0;p<u.length;p++)if(\"*\"===n[o])for(var s in r)r[s].push({pattern:u[p],task:i});else r[n[o]].push({pattern:u[p],task:i})}return r},stateMachines:{}};n.stateMachines={ce:{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},else:{\"0|1|2\":{action_:\"beginsWithBond=false\",revisit:!0,toContinue:!0}},oxidation$:{0:{action_:\"oxidation-output\"}},CMT:{r:{action_:\"rdt=\",nextState:\"rt\"},rd:{action_:\"rqt=\",nextState:\"rdt\"}},arrowUpDown:{\"0|1|2|as\":{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"1\"}},uprightEntities:{\"0|1|2\":{action_:[\"o=\",\"output\"],nextState:\"1\"}},orbital:{\"0|1|2|3\":{action_:\"o=\",nextState:\"o\"}},\"->\":{\"0|1|2|3\":{action_:\"r=\",nextState:\"r\"},\"a|as\":{action_:[\"output\",\"r=\"],nextState:\"r\"},\"*\":{action_:[\"output\",\"r=\"],nextState:\"r\"}},\"+\":{o:{action_:\"d= kv\",nextState:\"d\"},\"d|D\":{action_:\"d=\",nextState:\"d\"},q:{action_:\"d=\",nextState:\"qd\"},\"qd|qD\":{action_:\"d=\",nextState:\"qd\"},dq:{action_:[\"output\",\"d=\"],nextState:\"d\"},3:{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"0\"}},amount:{\"0|2\":{action_:\"a=\",nextState:\"a\"}},\"pm-operator\":{\"0|1|2|a|as\":{action_:[\"sb=false\",\"output\",{type_:\"operator\",option:\"\\\\pm\"}],nextState:\"0\"}},operator:{\"0|1|2|a|as\":{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"0\"}},\"-$\":{\"o|q\":{action_:[\"charge or bond\",\"output\"],nextState:\"qd\"},d:{action_:\"d=\",nextState:\"d\"},D:{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"},q:{action_:\"d=\",nextState:\"qd\"},qd:{action_:\"d=\",nextState:\"qd\"},\"qD|dq\":{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"}},\"-9\":{\"3|o\":{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"3\"}},\"- orbital overlap\":{o:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"},d:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"}},\"-\":{\"0|1|2\":{action_:[{type_:\"output\",option:1},\"beginsWithBond=true\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"},3:{action_:{type_:\"bond\",option:\"-\"}},a:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"},as:{action_:[{type_:\"output\",option:2},{type_:\"bond\",option:\"-\"}],nextState:\"3\"},b:{action_:\"b=\"},o:{action_:{type_:\"- after o/d\",option:!1},nextState:\"2\"},q:{action_:{type_:\"- after o/d\",option:!1},nextState:\"2\"},\"d|qd|dq\":{action_:{type_:\"- after o/d\",option:!0},nextState:\"2\"},\"D|qD|p\":{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"}},amount2:{\"1|3\":{action_:\"a=\",nextState:\"a\"}},letters:{\"0|1|2|3|a|as|b|p|bp|o\":{action_:\"o=\",nextState:\"o\"},\"q|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"},\"d|D|qd|qD\":{action_:\"o after d\",nextState:\"o\"}},digits:{o:{action_:\"q=\",nextState:\"q\"},\"d|D\":{action_:\"q=\",nextState:\"dq\"},q:{action_:[\"output\",\"o=\"],nextState:\"o\"},a:{action_:\"o=\",nextState:\"o\"}},\"space A\":{\"b|p|bp\":{}},space:{a:{nextState:\"as\"},0:{action_:\"sb=false\"},\"1|2\":{action_:\"sb=true\"},\"r|rt|rd|rdt|rdq\":{action_:\"output\",nextState:\"0\"},\"*\":{action_:[\"output\",\"sb=true\"],nextState:\"1\"}},\"1st-level escape\":{\"1|2\":{action_:[\"output\",{type_:\"insert+p1\",option:\"1st-level escape\"}]},\"*\":{action_:[\"output\",{type_:\"insert+p1\",option:\"1st-level escape\"}],nextState:\"0\"}},\"[(...)]\":{\"r|rt\":{action_:\"rd=\",nextState:\"rd\"},\"rd|rdt\":{action_:\"rq=\",nextState:\"rdq\"}},\"...\":{\"o|d|D|dq|qd|qD\":{action_:[\"output\",{type_:\"bond\",option:\"...\"}],nextState:\"3\"},\"*\":{action_:[{type_:\"output\",option:1},{type_:\"insert\",option:\"ellipsis\"}],nextState:\"1\"}},\". |* \":{\"*\":{action_:[\"output\",{type_:\"insert\",option:\"addition compound\"}],nextState:\"1\"}},\"state of aggregation $\":{\"*\":{action_:[\"output\",\"state of aggregation\"],nextState:\"1\"}},\"{[(\":{\"a|as|o\":{action_:[\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"},\"0|1|2|3\":{action_:[\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"},\"*\":{action_:[\"output\",\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"}},\")]}\":{\"0|1|2|3|b|p|bp|o\":{action_:[\"o=\",\"parenthesisLevel--\"],nextState:\"o\"},\"a|as|d|D|q|qd|qD|dq\":{action_:[\"output\",\"o=\",\"parenthesisLevel--\"],nextState:\"o\"}},\", \":{\"*\":{action_:[\"output\",\"comma\"],nextState:\"0\"}},\"^_\":{\"*\":{}},\"^{(...)}|^($...$)\":{\"0|1|2|as\":{action_:\"b=\",nextState:\"b\"},p:{action_:\"b=\",nextState:\"bp\"},\"3|o\":{action_:\"d= kv\",nextState:\"D\"},q:{action_:\"d=\",nextState:\"qD\"},\"d|D|qd|qD|dq\":{action_:[\"output\",\"d=\"],nextState:\"D\"}},\"^a|^\\\\x{}{}|^\\\\x{}|^\\\\x|'\":{\"0|1|2|as\":{action_:\"b=\",nextState:\"b\"},p:{action_:\"b=\",nextState:\"bp\"},\"3|o\":{action_:\"d= kv\",nextState:\"d\"},q:{action_:\"d=\",nextState:\"qd\"},\"d|qd|D|qD\":{action_:\"d=\"},dq:{action_:[\"output\",\"d=\"],nextState:\"d\"}},\"_{(state of aggregation)}$\":{\"d|D|q|qd|qD|dq\":{action_:[\"output\",\"q=\"],nextState:\"q\"}},\"_{(...)}|_($...$)|_9|_\\\\x{}{}|_\\\\x{}|_\\\\x\":{\"0|1|2|as\":{action_:\"p=\",nextState:\"p\"},b:{action_:\"p=\",nextState:\"bp\"},\"3|o\":{action_:\"q=\",nextState:\"q\"},\"d|D\":{action_:\"q=\",nextState:\"dq\"},\"q|qd|qD|dq\":{action_:[\"output\",\"q=\"],nextState:\"q\"}},\"=<>\":{\"0|1|2|3|a|as|o|q|d|D|qd|qD|dq\":{action_:[{type_:\"output\",option:2},\"bond\"],nextState:\"3\"}},\"#\":{\"0|1|2|3|a|as|o\":{action_:[{type_:\"output\",option:2},{type_:\"bond\",option:\"#\"}],nextState:\"3\"}},\"{}\":{\"*\":{action_:{type_:\"output\",option:1},nextState:\"1\"}},\"{...}\":{\"0|1|2|3|a|as|b|p|bp\":{action_:\"o=\",nextState:\"o\"},\"o|d|D|q|qd|qD|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"}},\"$...$\":{a:{action_:\"a=\"},\"0|1|2|3|as|b|p|bp|o\":{action_:\"o=\",nextState:\"o\"},\"as|o\":{action_:\"o=\"},\"q|d|D|qd|qD|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"}},\"\\\\bond{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"bond\"],nextState:\"3\"}},\"\\\\frac{(...)}\":{\"*\":{action_:[{type_:\"output\",option:1},\"frac-output\"],nextState:\"3\"}},\"\\\\overset{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"overset-output\"],nextState:\"3\"}},\"\\\\underset{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"underset-output\"],nextState:\"3\"}},\"\\\\underbrace{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"underbrace-output\"],nextState:\"3\"}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:[{type_:\"output\",option:2},\"color-output\"],nextState:\"3\"}},\"\\\\color{(...)}0\":{\"*\":{action_:[{type_:\"output\",option:2},\"color0-output\"]}},\"\\\\ce{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"ce\"],nextState:\"3\"}},\"\\\\,\":{\"*\":{action_:[{type_:\"output\",option:1},\"copy\"],nextState:\"1\"}},\"\\\\x{}{}|\\\\x{}|\\\\x\":{\"0|1|2|3|a|as|b|p|bp|o|c0\":{action_:[\"o=\",\"output\"],nextState:\"3\"},\"*\":{action_:[\"output\",\"o=\",\"output\"],nextState:\"3\"}},others:{\"*\":{action_:[{type_:\"output\",option:1},\"copy\"],nextState:\"3\"}},else2:{a:{action_:\"a to o\",nextState:\"o\",revisit:!0},as:{action_:[\"output\",\"sb=true\"],nextState:\"1\",revisit:!0},\"r|rt|rd|rdt|rdq\":{action_:[\"output\"],nextState:\"0\",revisit:!0},\"*\":{action_:[\"output\",\"copy\"],nextState:\"3\"}}}),actions:{\"o after d\":function(t,e){var a;if((t.d||\"\").match(/^[0-9]+$/)){var o=t.d;t.d=void 0,a=this.output(t),t.b=o}else a=this.output(t);return n.actions[\"o=\"](t,e),a},\"d= kv\":function(t,e){t.d=e,t.dType=\"kv\"},\"charge or bond\":function(t,e){if(t.beginsWithBond){var a=[];return n.concatArray(a,this.output(t)),n.concatArray(a,n.actions.bond(t,e,\"-\")),a}t.d=e},\"- after o/d\":function(t,e,a){var o=n.patterns.match_(\"orbital\",t.o||\"\"),r=n.patterns.match_(\"one lowercase greek letter $\",t.o||\"\"),i=n.patterns.match_(\"one lowercase latin letter $\",t.o||\"\"),c=n.patterns.match_(\"$one lowercase latin letter$ $\",t.o||\"\"),u=\"-\"===e&&(o&&\"\"===o.remainder||r||i||c);!u||t.a||t.b||t.p||t.d||t.q||o||!i||(t.o=\"$\"+t.o+\"$\");var p=[];return u?(n.concatArray(p,this.output(t)),p.push({type_:\"hyphen\"})):(o=n.patterns.match_(\"digits\",t.d||\"\"),a&&o&&\"\"===o.remainder?(n.concatArray(p,n.actions[\"d=\"](t,e)),n.concatArray(p,this.output(t))):(n.concatArray(p,this.output(t)),n.concatArray(p,n.actions.bond(t,e,\"-\")))),p},\"a to o\":function(t){t.o=t.a,t.a=void 0},\"sb=true\":function(t){t.sb=!0},\"sb=false\":function(t){t.sb=!1},\"beginsWithBond=true\":function(t){t.beginsWithBond=!0},\"beginsWithBond=false\":function(t){t.beginsWithBond=!1},\"parenthesisLevel++\":function(t){t.parenthesisLevel++},\"parenthesisLevel--\":function(t){t.parenthesisLevel--},\"state of aggregation\":function(t,e){return{type_:\"state of aggregation\",p1:n.go(e,\"o\")}},comma:function(t,e){var a=e.replace(/\\s*$/,\"\");return a!==e&&0===t.parenthesisLevel?{type_:\"comma enumeration L\",p1:a}:{type_:\"comma enumeration M\",p1:a}},output:function(t,e,a){var o,r,i;t.r?(r=\"M\"===t.rdt?n.go(t.rd,\"tex-math\"):\"T\"===t.rdt?[{type_:\"text\",p1:t.rd||\"\"}]:n.go(t.rd),i=\"M\"===t.rqt?n.go(t.rq,\"tex-math\"):\"T\"===t.rqt?[{type_:\"text\",p1:t.rq||\"\"}]:n.go(t.rq),o={type_:\"arrow\",r:t.r,rd:r,rq:i}):(o=[],(t.a||t.b||t.p||t.o||t.q||t.d||a)&&(t.sb&&o.push({type_:\"entitySkip\"}),t.o||t.q||t.d||t.b||t.p||2===a?t.o||t.q||t.d||!t.b&&!t.p?t.o&&\"kv\"===t.dType&&n.patterns.match_(\"d-oxidation$\",t.d||\"\")?t.dType=\"oxidation\":t.o&&\"kv\"===t.dType&&!t.q&&(t.dType=void 0):(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):(t.o=t.a,t.a=void 0),o.push({type_:\"chemfive\",a:n.go(t.a,\"a\"),b:n.go(t.b,\"bd\"),p:n.go(t.p,\"pq\"),o:n.go(t.o,\"o\"),q:n.go(t.q,\"pq\"),d:n.go(t.d,\"oxidation\"===t.dType?\"oxidation\":\"bd\"),dType:t.dType})));for(var c in t)\"parenthesisLevel\"!==c&&\"beginsWithBond\"!==c&&delete t[c];return o},\"oxidation-output\":function(t,e){var a=[\"{\"];return n.concatArray(a,n.go(e,\"oxidation\")),a.push(\"}\"),a},\"frac-output\":function(t,e){return{type_:\"frac-ce\",p1:n.go(e[0]),p2:n.go(e[1])}},\"overset-output\":function(t,e){return{type_:\"overset\",p1:n.go(e[0]),p2:n.go(e[1])}},\"underset-output\":function(t,e){return{type_:\"underset\",p1:n.go(e[0]),p2:n.go(e[1])}},\"underbrace-output\":function(t,e){return{type_:\"underbrace\",p1:n.go(e[0]),p2:n.go(e[1])}},\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:n.go(e[1])}},\"r=\":function(t,e){t.r=e},\"rdt=\":function(t,e){t.rdt=e},\"rd=\":function(t,e){t.rd=e},\"rqt=\":function(t,e){t.rqt=e},\"rq=\":function(t,e){t.rq=e},operator:function(t,e,a){return{type_:\"operator\",kind_:a||e}}}},a:{transitions:n.createTransitions({empty:{\"*\":{}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"1\",revisit:!0}},\"$(...)$\":{\"*\":{action_:\"tex-math tight\",nextState:\"1\"}},\",\":{\"*\":{action_:{type_:\"insert\",option:\"commaDecimal\"}}},else2:{\"*\":{action_:\"copy\"}}}),actions:{}},o:{transitions:n.createTransitions({empty:{\"*\":{}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"1\",revisit:!0}},letters:{\"*\":{action_:\"rm\"}},\"\\\\ca\":{\"*\":{action_:{type_:\"insert\",option:\"circa\"}}},\"\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"{text}\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{}},text:{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},\"{...}\":{\"*\":{action_:\"text=\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"\\\\greek\":{\"*\":{action_:[\"output\",\"rm\"]}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:[\"output\",\"copy\"]}},else:{\"*\":{action_:\"text=\"}}}),actions:{output:function(t){if(t.text_){var e={type_:\"text\",p1:t.text_};for(var a in t)delete t[a];return e}}}},pq:{transitions:n.createTransitions({empty:{\"*\":{}},\"state of aggregation $\":{\"*\":{action_:\"state of aggregation\"}},i$:{0:{nextState:\"!f\",revisit:!0}},\"(KV letters),\":{0:{action_:\"rm\",nextState:\"0\"}},formula$:{0:{nextState:\"f\",revisit:!0}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"!f\",revisit:!0}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"text\"}},\"a-z\":{f:{action_:\"tex-math\"}},letters:{\"*\":{action_:\"rm\"}},\"-9.,9\":{\"*\":{action_:\"9,9\"}},\",\":{\"*\":{action_:{type_:\"insert+p1\",option:\"comma enumeration S\"}}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:\"color-output\"}},\"\\\\color{(...)}0\":{\"*\":{action_:\"color0-output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:\"ce\"}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{\"state of aggregation\":function(t,e){return{type_:\"state of aggregation subscript\",p1:n.go(e,\"o\")}},\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:n.go(e[1],\"pq\")}}}},bd:{transitions:n.createTransitions({empty:{\"*\":{}},x$:{0:{nextState:\"!f\",revisit:!0}},formula$:{0:{nextState:\"f\",revisit:!0}},else:{0:{nextState:\"!f\",revisit:!0}},\"-9.,9 no missing 0\":{\"*\":{action_:\"9,9\"}},\".\":{\"*\":{action_:{type_:\"insert\",option:\"electron dot\"}}},\"a-z\":{f:{action_:\"tex-math\"}},x:{\"*\":{action_:{type_:\"insert\",option:\"KV x\"}}},letters:{\"*\":{action_:\"rm\"}},\"'\":{\"*\":{action_:{type_:\"insert\",option:\"prime\"}}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"text\"}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:\"color-output\"}},\"\\\\color{(...)}0\":{\"*\":{action_:\"color0-output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:\"ce\"}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:n.go(e[1],\"bd\")}}}},oxidation:{transitions:n.createTransitions({empty:{\"*\":{}},\"roman numeral\":{\"*\":{action_:\"roman-numeral\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},else:{\"*\":{action_:\"copy\"}}}),actions:{\"roman-numeral\":function(t,e){return{type_:\"roman numeral\",p1:e||\"\"}}}},\"tex-math\":{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:[\"output\",\"ce\"]}},\"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"o=\"}},else:{\"*\":{action_:\"o=\"}}}),actions:{output:function(t){if(t.o){var e={type_:\"tex-math\",p1:t.o};for(var a in t)delete t[a];return e}}}},\"tex-math tight\":{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:[\"output\",\"ce\"]}},\"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"o=\"}},\"-|+\":{\"*\":{action_:\"tight operator\"}},else:{\"*\":{action_:\"o=\"}}}),actions:{\"tight operator\":function(t,e){t.o=(t.o||\"\")+\"{\"+e+\"}\"},output:function(t){if(t.o){var e={type_:\"tex-math\",p1:t.o};for(var a in t)delete t[a];return e}}}},\"9,9\":{transitions:n.createTransitions({empty:{\"*\":{}},\",\":{\"*\":{action_:\"comma\"}},else:{\"*\":{action_:\"copy\"}}}),actions:{comma:function(){return{type_:\"commaDecimal\"}}}},pu:{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},space$:{\"*\":{action_:[\"output\",\"space\"]}},\"{[(|)]}\":{\"0|a\":{action_:\"copy\"}},\"(-)(9)^(-9)\":{0:{action_:\"number^\",nextState:\"a\"}},\"(-)(9.,9)(e)(99)\":{0:{action_:\"enumber\",nextState:\"a\"}},space:{\"0|a\":{}},\"pm-operator\":{\"0|a\":{action_:{type_:\"operator\",option:\"\\\\pm\"},nextState:\"0\"}},operator:{\"0|a\":{action_:\"copy\",nextState:\"0\"}},\"//\":{d:{action_:\"o=\",nextState:\"/\"}},\"/\":{d:{action_:\"o=\",nextState:\"/\"}},\"{...}|else\":{\"0|d\":{action_:\"d=\",nextState:\"d\"},a:{action_:[\"space\",\"d=\"],nextState:\"d\"},\"/|q\":{action_:\"q=\",nextState:\"q\"}}}),actions:{enumber:function(t,e){var a=[];return\"+-\"===e[0]||\"+/-\"===e[0]?a.push(\"\\\\pm \"):e[0]&&a.push(e[0]),e[1]&&(n.concatArray(a,n.go(e[1],\"pu-9,9\")),e[2]&&(e[2].match(/[,.]/)?n.concatArray(a,n.go(e[2],\"pu-9,9\")):a.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),\"e\"===e[3]||\"*\"===e[3].substr(0,1)?a.push({type_:\"cdot\"}):a.push({type_:\"times\"}))),e[3]&&a.push(\"10^{\"+e[5]+\"}\"),a},\"number^\":function(t,e){var a=[];return\"+-\"===e[0]||\"+/-\"===e[0]?a.push(\"\\\\pm \"):e[0]&&a.push(e[0]),n.concatArray(a,n.go(e[1],\"pu-9,9\")),a.push(\"^{\"+e[2]+\"}\"),a},operator:function(t,e,a){return{type_:\"operator\",kind_:a||e}},space:function(){return{type_:\"pu-space-1\"}},output:function(t){var e,a=n.patterns.match_(\"{(...)}\",t.d||\"\");a&&\"\"===a.remainder&&(t.d=a.match_);var o=n.patterns.match_(\"{(...)}\",t.q||\"\");if(o&&\"\"===o.remainder&&(t.q=o.match_),t.d&&(t.d=t.d.replace(/\\u00B0C|\\^oC|\\^{o}C/g,\"{}^{\\\\circ}C\"),t.d=t.d.replace(/\\u00B0F|\\^oF|\\^{o}F/g,\"{}^{\\\\circ}F\")),t.q){t.q=t.q.replace(/\\u00B0C|\\^oC|\\^{o}C/g,\"{}^{\\\\circ}C\"),t.q=t.q.replace(/\\u00B0F|\\^oF|\\^{o}F/g,\"{}^{\\\\circ}F\");var r={d:n.go(t.d,\"pu\"),q:n.go(t.q,\"pu\")};\"//\"===t.o?e={type_:\"pu-frac\",p1:r.d,p2:r.q}:(e=r.d,r.d.length>1||r.q.length>1?e.push({type_:\" / \"}):e.push({type_:\"/\"}),n.concatArray(e,r.q))}else e=n.go(t.d,\"pu-2\");for(var i in t)delete t[i];return e}}},\"pu-2\":{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},\"*\":{\"*\":{action_:[\"output\",\"cdot\"],nextState:\"0\"}},\"\\\\x\":{\"*\":{action_:\"rm=\"}},space:{\"*\":{action_:[\"output\",\"space\"],nextState:\"0\"}},\"^{(...)}|^(-1)\":{1:{action_:\"^(-1)\"}},\"-9.,9\":{0:{action_:\"rm=\",nextState:\"0\"},1:{action_:\"^(-1)\",nextState:\"0\"}},\"{...}|else\":{\"*\":{action_:\"rm=\",nextState:\"1\"}}}),actions:{cdot:function(){return{type_:\"tight cdot\"}},\"^(-1)\":function(t,e){t.rm+=\"^{\"+e+\"}\"},space:function(){return{type_:\"pu-space-2\"}},output:function(t){var e=[];if(t.rm){var a=n.patterns.match_(\"{(...)}\",t.rm||\"\");e=a&&\"\"===a.remainder?n.go(a.match_,\"pu\"):{type_:\"rm\",p1:t.rm}}for(var o in t)delete t[o];return e}}},\"pu-9,9\":{transitions:n.createTransitions({empty:{0:{action_:\"output-0\"},o:{action_:\"output-o\"}},\",\":{0:{action_:[\"output-0\",\"comma\"],nextState:\"o\"}},\".\":{0:{action_:[\"output-0\",\"copy\"],nextState:\"o\"}},else:{\"*\":{action_:\"text=\"}}}),actions:{comma:function(){return{type_:\"commaDecimal\"}},\"output-0\":function(t){var e=[];if(t.text_=t.text_||\"\",t.text_.length>4){var a=t.text_.length%3;0===a&&(a=3);for(var n=t.text_.length-3;n>0;n-=3)e.push(t.text_.substr(n,3)),e.push({type_:\"1000 separator\"});e.push(t.text_.substr(0,a)),e.reverse()}else e.push(t.text_);for(var o in t)delete t[o];return e},\"output-o\":function(t){var e=[];if(t.text_=t.text_||\"\",t.text_.length>4){for(var a=t.text_.length-3,n=0;n<a;n+=3)e.push(t.text_.substr(n,3)),e.push({type_:\"1000 separator\"});e.push(t.text_.substr(n))}else e.push(t.text_);for(var o in t)delete t[o];return e}}}};var o={go:function(t,e){if(!t)return\"\";for(var a=\"\",n=!1,r=0;r<t.length;r++){var i=t[r];\"string\"==typeof i?a+=i:(a+=o._go2(i),\"1st-level escape\"===i.type_&&(n=!0))}return e||n||!a||(a=\"{\"+a+\"}\"),a},_goInner:function(t){return t?o.go(t,!0):t},_go2:function(t){var e;switch(t.type_){case\"chemfive\":e=\"\";var a={a:o._goInner(t.a),b:o._goInner(t.b),p:o._goInner(t.p),o:o._goInner(t.o),q:o._goInner(t.q),d:o._goInner(t.d)};a.a&&(a.a.match(/^[+\\-]/)&&(a.a=\"{\"+a.a+\"}\"),e+=a.a+\"\\\\,\"),(a.b||a.p)&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\\\\hphantom{\"+(a.b||\"\")+\"}}_{\\\\hphantom{\"+(a.p||\"\")+\"}}\",e+=\"{\\\\vphantom{X}}\",e+=\"^{\\\\smash[t]{\\\\vphantom{2}}\\\\llap{\"+(a.b||\"\")+\"}}\",e+=\"_{\\\\vphantom{2}\\\\llap{\\\\smash[t]{\"+(a.p||\"\")+\"}}}\"),a.o&&(a.o.match(/^[+\\-]/)&&(a.o=\"{\"+a.o+\"}\"),e+=a.o),\"kv\"===t.dType?((a.d||a.q)&&(e+=\"{\\\\vphantom{X}}\"),a.d&&(e+=\"^{\"+a.d+\"}\"),a.q&&(e+=\"_{\\\\smash[t]{\"+a.q+\"}}\")):\"oxidation\"===t.dType?(a.d&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\"+a.d+\"}\"),a.q&&(e+=\"{\\\\vphantom{X}}\",e+=\"_{\\\\smash[t]{\"+a.q+\"}}\")):(a.q&&(e+=\"{\\\\vphantom{X}}\",e+=\"_{\\\\smash[t]{\"+a.q+\"}}\"),a.d&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\"+a.d+\"}\"));break;case\"rm\":e=\"\\\\mathrm{\"+t.p1+\"}\";break;case\"text\":t.p1.match(/[\\^_]/)?(t.p1=t.p1.replace(\" \",\"~\").replace(\"-\",\"\\\\text{-}\"),e=\"\\\\mathrm{\"+t.p1+\"}\"):e=\"\\\\text{\"+t.p1+\"}\";break;case\"roman numeral\":e=\"\\\\mathrm{\"+t.p1+\"}\";break;case\"state of aggregation\":e=\"\\\\mskip2mu \"+o._goInner(t.p1);break;case\"state of aggregation subscript\":e=\"\\\\mskip1mu \"+o._goInner(t.p1);break;case\"bond\":if(!(e=o._getBond(t.kind_)))throw[\"MhchemErrorBond\",\"mhchem Error. Unknown bond type (\"+t.kind_+\")\"];break;case\"frac\":var n=\"\\\\frac{\"+t.p1+\"}{\"+t.p2+\"}\";e=\"\\\\mathchoice{\\\\textstyle\"+n+\"}{\"+n+\"}{\"+n+\"}{\"+n+\"}\";break;case\"pu-frac\":var r=\"\\\\frac{\"+o._goInner(t.p1)+\"}{\"+o._goInner(t.p2)+\"}\";e=\"\\\\mathchoice{\\\\textstyle\"+r+\"}{\"+r+\"}{\"+r+\"}{\"+r+\"}\";break;case\"tex-math\":e=t.p1+\" \";break;case\"frac-ce\":e=\"\\\\frac{\"+o._goInner(t.p1)+\"}{\"+o._goInner(t.p2)+\"}\";break;case\"overset\":e=\"\\\\overset{\"+o._goInner(t.p1)+\"}{\"+o._goInner(t.p2)+\"}\";break;case\"underset\":e=\"\\\\underset{\"+o._goInner(t.p1)+\"}{\"+o._goInner(t.p2)+\"}\";break;case\"underbrace\":e=\"\\\\underbrace{\"+o._goInner(t.p1)+\"}_{\"+o._goInner(t.p2)+\"}\";break;case\"color\":e=\"{\\\\color{\"+t.color1+\"}{\"+o._goInner(t.color2)+\"}}\";break;case\"color0\":e=\"\\\\color{\"+t.color+\"}\";break;case\"arrow\":var i={rd:o._goInner(t.rd),rq:o._goInner(t.rq)},c=o._getArrow(t.r);i.rd||i.rq?\"<=>\"===t.r||\"<=>>\"===t.r||\"<<=>\"===t.r||\"<--\\x3e\"===t.r?(c=\"\\\\long\"+c,i.rd&&(c=\"\\\\overset{\"+i.rd+\"}{\"+c+\"}\"),i.rq&&(c=\"\\\\underset{\\\\lower7mu{\"+i.rq+\"}}{\"+c+\"}\"),c=\" {}\\\\mathrel{\"+c+\"}{} \"):(i.rq&&(c+=\"[{\"+i.rq+\"}]\"),c=\" {}\\\\mathrel{\\\\x\"+(c+=\"{\"+i.rd+\"}\")+\"}{} \"):c=\" {}\\\\mathrel{\\\\long\"+c+\"}{} \",e=c;break;case\"operator\":e=o._getOperator(t.kind_);break;case\"1st-level escape\":e=t.p1+\" \";break;case\"space\":e=\" \";break;case\"entitySkip\":case\"pu-space-1\":e=\"~\";break;case\"pu-space-2\":e=\"\\\\mkern3mu \";break;case\"1000 separator\":e=\"\\\\mkern2mu \";break;case\"commaDecimal\":e=\"{,}\";break;case\"comma enumeration L\":e=\"{\"+t.p1+\"}\\\\mkern6mu \";break;case\"comma enumeration M\":e=\"{\"+t.p1+\"}\\\\mkern3mu \";break;case\"comma enumeration S\":e=\"{\"+t.p1+\"}\\\\mkern1mu \";break;case\"hyphen\":e=\"\\\\text{-}\";break;case\"addition compound\":e=\"\\\\,{\\\\cdot}\\\\,\";break;case\"electron dot\":e=\"\\\\mkern1mu \\\\bullet\\\\mkern1mu \";break;case\"KV x\":e=\"{\\\\times}\";break;case\"prime\":e=\"\\\\prime \";break;case\"cdot\":e=\"\\\\cdot \";break;case\"tight cdot\":e=\"\\\\mkern1mu{\\\\cdot}\\\\mkern1mu \";break;case\"times\":e=\"\\\\times \";break;case\"circa\":e=\"{\\\\sim}\";break;case\"^\":e=\"uparrow\";break;case\"v\":e=\"downarrow\";break;case\"ellipsis\":e=\"\\\\ldots \";break;case\"/\":e=\"/\";break;case\" / \":e=\"\\\\,/\\\\,\";break;default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}return e},_getArrow:function(t){switch(t){case\"->\":case\"\\u2192\":case\"\\u27f6\":return\"rightarrow\";case\"<-\":return\"leftarrow\";case\"<->\":return\"leftrightarrow\";case\"<--\\x3e\":return\"leftrightarrows\";case\"<=>\":case\"\\u21cc\":return\"rightleftharpoons\";case\"<=>>\":return\"Rightleftharpoons\";case\"<<=>\":return\"Leftrightharpoons\";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}},_getBond:function(t){switch(t){case\"-\":case\"1\":return\"{-}\";case\"=\":case\"2\":return\"{=}\";case\"#\":case\"3\":return\"{\\\\equiv}\";case\"~\":return\"{\\\\tripledash}\";case\"~-\":return\"{\\\\rlap{\\\\lower.1em{-}}\\\\raise.1em{\\\\tripledash}}\";case\"~=\":case\"~--\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{\\\\tripledash}}-}\";case\"-~-\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{-}}\\\\tripledash}\";case\"...\":return\"{{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";case\"....\":return\"{{\\\\cdot}{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";case\"->\":return\"{\\\\rightarrow}\";case\"<-\":return\"{\\\\leftarrow}\";case\"<\":return\"{<}\";case\">\":return\"{>}\";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}},_getOperator:function(t){switch(t){case\"+\":return\" {}+{} \";case\"-\":return\" {}-{} \";case\"=\":return\" {}={} \";case\"<\":return\" {}<{} \";case\">\":return\" {}>{} \";case\"<<\":return\" {}\\\\ll{} \";case\">>\":return\" {}\\\\gg{} \";case\"\\\\pm\":return\" {}\\\\pm{} \";case\"\\\\approx\":case\"$\\\\approx$\":return\" {}\\\\approx{} \";case\"v\":case\"(v)\":return\" \\\\downarrow{} \";case\"^\":case\"(^)\":return\" \\\\uparrow{} \";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}}};function r(t){}function i(t){}e.mhchemParser=n,e.texify=o,e.assertNever=r,e.assertString=i},function(t,e,a){\"use strict\";a.r(e);var n=a(0),o=a(1);Object(n.combineWithMathJax)({_:{input:{tex:{mhchem:{MhchemConfiguration:o}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/newcommand.js",
    "content": "!function(e){var t={};function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,\"a\",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p=\"\",a(a.s=14)}([function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n,r=a(5),i=a(1),o=a(10);!function(e){function t(e,t){return e.string.substr(e.i,t.length)!==t||t.match(/\\\\[a-z]+$/i)&&e.string.charAt(e.i+t.length).match(/[a-z]/i)?0:(e.i+=t.length,1)}e.disassembleSymbol=function(e,t){var a=[e,t.char];if(t.attributes)for(var n in t.attributes)a.push(n),a.push(t.attributes[n]);return a},e.assembleSymbol=function(e){for(var t=e[0],a=e[1],n={},r=2;r<e.length;r+=2)n[e[r]]=e[r+1];return new o.Symbol(t,a,n)},e.GetCSname=function(e,t){if(\"\\\\\"!==e.GetNext())throw new i.default(\"MissingCS\",\"%1 must be followed by a control sequence\",t);return r.default.trimSpaces(e.GetArgument(t)).substr(1)},e.GetTemplate=function(e,t,a){for(var n=e.GetNext(),r=[],o=0,u=e.i;e.i<e.string.length;){if(\"#\"===(n=e.GetNext())){if(u!==e.i&&(r[o]=e.string.substr(u,e.i-u)),!(n=e.string.charAt(++e.i)).match(/^[1-9]$/))throw new i.default(\"CantUseHash2\",\"Illegal use of # in template for %1\",a);if(parseInt(n)!==++o)throw new i.default(\"SequentialParam\",\"Parameters for %1 must be numbered sequentially\",a);u=e.i+1}else if(\"{\"===n)return u!==e.i&&(r[o]=e.string.substr(u,e.i-u)),r.length>0?[o.toString()].concat(r):o;e.i++}throw new i.default(\"MissingReplacementString\",\"Missing replacement string for definition of %1\",t)},e.GetParameter=function(e,a,n){if(null==n)return e.GetArgument(a);for(var r=e.i,o=0,u=0;e.i<e.string.length;){var l=e.string.charAt(e.i);if(\"{\"===l)e.i===r&&(u=1),e.GetArgument(a),o=e.i-r;else{if(t(e,n))return u&&(r++,o-=2),e.string.substr(r,o);if(\"\\\\\"===l){e.i++,o++,u=0;var c=e.string.substr(e.i).match(/[a-z]+|./i);c&&(e.i+=c[0].length,o=e.i-r)}else e.i++,o++,u=0}}throw new i.default(\"RunawayArgument\",\"Runaway argument for %1?\",a)},e.MatchParam=t,e.addDelimiter=function(t,a,n,r){t.configuration.handlers.retrieve(e.NEW_DELIMITER).add(a,new o.Symbol(a,n,r))},e.addMacro=function(t,a,n,r,i){void 0===i&&(i=\"\"),t.configuration.handlers.retrieve(e.NEW_COMMAND).add(a,new o.Macro(i||a,n,r))},e.addEnvironment=function(t,a,n,r){t.configuration.handlers.retrieve(e.NEW_ENVIRONMENT).add(a,new o.Macro(a,n,r))},e.NEW_DELIMITER=\"new-Delimiter\",e.NEW_COMMAND=\"new-Command\",e.NEW_ENVIRONMENT=\"new-Environment\"}(n||(n={})),t.default=n},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.TexError.default},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,a){\"use strict\";var n,r=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var a in t)t.hasOwnProperty(a)&&(e[a]=t[a])})(e,t)},function(e,t){function a(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(a.prototype=t.prototype,new a)});Object.defineProperty(t,\"__esModule\",{value:!0}),t.BeginEnvItem=void 0;var i=a(1),o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r(t,e),Object.defineProperty(t.prototype,\"kind\",{get:function(){return\"beginEnv\"},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),t.prototype.checkItem=function(t){if(t.isKind(\"end\")){if(t.getName()!==this.getName())throw new i.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),t.getName());return[[this.factory.create(\"mml\",this.toMml())],!0]}if(t.isKind(\"stop\"))throw new i.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return e.prototype.checkItem.call(this,t)},t}(a(9).BaseItem);t.BeginEnvItem=o},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=a(1),r=a(2),i=a(12),o=a(5),u=a(0),l={NewCommand:function(e,t){var a=o.default.trimSpaces(e.GetArgument(t)),r=e.GetBrackets(t),i=e.GetBrackets(t),c=e.GetArgument(t);if(\"\\\\\"===a.charAt(0)&&(a=a.substr(1)),!a.match(/^(.|[a-z]+)$/i))throw new n.default(\"IllegalControlSequenceName\",\"Illegal control sequence name for %1\",t);if(r&&!(r=o.default.trimSpaces(r)).match(/^[0-9]+$/))throw new n.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",t);u.default.addMacro(e,a,l.Macro,[c,r,i])},NewEnvironment:function(e,t){var a=o.default.trimSpaces(e.GetArgument(t)),r=e.GetBrackets(t),i=e.GetBrackets(t),c=e.GetArgument(t),s=e.GetArgument(t);if(r&&!(r=o.default.trimSpaces(r)).match(/^[0-9]+$/))throw new n.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",t);u.default.addEnvironment(e,a,l.BeginEnv,[!0,c,s,r,i])},MacroDef:function(e,t){var a=u.default.GetCSname(e,t),n=u.default.GetTemplate(e,t,\"\\\\\"+a),r=e.GetArgument(t);n instanceof Array?u.default.addMacro(e,a,l.MacroWithTemplate,[r].concat(n)):u.default.addMacro(e,a,l.Macro,[r,n])},Let:function(e,t){var a=u.default.GetCSname(e,t),n=e.GetNext();\"=\"===n&&(e.i++,n=e.GetNext());var i=e.configuration.handlers;if(\"\\\\\"!==n){e.i++;var o=i.get(\"delimiter\").lookup(n);o?u.default.addDelimiter(e,\"\\\\\"+a,o.char,o.attributes):u.default.addMacro(e,a,l.Macro,[n])}else{t=u.default.GetCSname(e,t);var c=i.get(\"delimiter\").lookup(\"\\\\\"+t);if(c)return void u.default.addDelimiter(e,\"\\\\\"+a,c.char,c.attributes);var s=i.get(\"macro\").applicable(t);if(!s)return;if(s instanceof r.MacroMap){var f=s.lookup(t);return void u.default.addMacro(e,a,f.func,f.args,f.symbol)}c=s.lookup(t);var m=u.default.disassembleSymbol(a,c);u.default.addMacro(e,a,(function(e,t){for(var a=[],n=2;n<arguments.length;n++)a[n-2]=arguments[n];var r=u.default.assembleSymbol(a);return s.parser(e,r)}),m)}},MacroWithTemplate:function(e,t,a,r){for(var i=[],l=4;l<arguments.length;l++)i[l-4]=arguments[l];var c=parseInt(r,10);if(c){var s=[];if(e.GetNext(),i[0]&&!u.default.MatchParam(e,i[0]))throw new n.default(\"MismatchUseDef\",\"Use of %1 doesn't match its definition\",t);for(var f=0;f<c;f++)s.push(u.default.GetParameter(e,t,i[f+1]));a=o.default.substituteArgs(e,s,a)}if(e.string=o.default.addArgs(e,a,e.string.slice(e.i)),e.i=0,++e.macroCount>e.configuration.options.maxMacros)throw new n.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is here a recursive macro call?\")},BeginEnv:function(e,t,a,n,r,i){if(t.getProperty(\"end\")&&e.stack.env.closing===t.getName()){delete e.stack.env.closing;var u=e.string.slice(e.i);return e.string=n,e.i=0,e.Parse(),e.string=u,e.i=0,e.itemFactory.create(\"end\").setProperty(\"name\",t.getName())}if(r){var l=[];if(null!=i){var c=e.GetBrackets(\"\\\\begin{\"+t.getName()+\"}\");l.push(null==c?i:c)}for(var s=l.length;s<r;s++)l.push(e.GetArgument(\"\\\\begin{\"+t.getName()+\"}\"));a=o.default.substituteArgs(e,l,a),n=o.default.substituteArgs(e,[],n)}return e.string=o.default.addArgs(e,a,e.string.slice(e.i)),e.i=0,e.itemFactory.create(\"beginEnv\").setProperty(\"name\",t.getName())}};l.Macro=i.default.Macro,t.default=l},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.ParseUtil.default},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,a){\"use strict\";var n;Object.defineProperty(t,\"__esModule\",{value:!0}),t.NewcommandConfiguration=void 0;var r=a(8),i=a(3),o=a(0);a(11);var u=a(13),l=a(2);t.NewcommandConfiguration=r.Configuration.create(\"newcommand\",{handler:{macro:[\"Newcommand-macros\"]},items:(n={},n[i.BeginEnvItem.prototype.kind]=i.BeginEnvItem,n),options:{maxMacros:1e3},init:function(e){new l.DelimiterMap(o.default.NEW_DELIMITER,u.default.delimiter,{}),new l.CommandMap(o.default.NEW_COMMAND,{},{}),new l.EnvironmentMap(o.default.NEW_ENVIRONMENT,u.default.environment,{},{}),e.append(r.Configuration.local({handler:{character:[],delimiter:[o.default.NEW_DELIMITER],macro:[o.default.NEW_DELIMITER,o.default.NEW_COMMAND],environment:[o.default.NEW_ENVIRONMENT]},priority:-1}))}})},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.MmlStack=MathJax._.input.tex.StackItem.MmlStack,t.BaseItem=MathJax._.input.tex.StackItem.BaseItem},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Symbol=MathJax._.input.tex.Symbol.Symbol,t.Macro=MathJax._.input.tex.Symbol.Macro},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=a(4);new(a(2).CommandMap)(\"Newcommand-macros\",{newcommand:\"NewCommand\",renewcommand:\"NewCommand\",newenvironment:\"NewEnvironment\",renewenvironment:\"NewEnvironment\",def:\"MacroDef\",let:\"Let\"},n.default)},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.base.BaseMethods.default},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.ParseMethods.default},function(e,t,a){\"use strict\";a.r(t);var n=a(6),r=a(7),i=a(3),o=a(4),u=a(0);Object(n.combineWithMathJax)({_:{input:{tex:{newcommand:{NewcommandConfiguration:r,NewcommandItems:i,NewcommandMethods:o,NewcommandUtil:u}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/noerrors.js",
    "content": "!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=3)}([function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.NoErrorsConfiguration=void 0;var o=n(2);t.NoErrorsConfiguration=o.Configuration.create(\"noerrors\",{nodes:{error:function(e,t,n,o){var r=e.create(\"token\",\"mtext\",{},o.replace(/\\n/g,\" \"));return e.create(\"node\",\"merror\",[r],{\"data-mjx-error\":t,title:t})}}})},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,n){\"use strict\";n.r(t);var o=n(0),r=n(1);Object(o.combineWithMathJax)({_:{input:{tex:{noerrors:{NoErrorsConfiguration:r}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/noundefined.js",
    "content": "!function(e){var n={};function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:o})},t.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&\"object\"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(t.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:e}),2&n&&\"string\"!=typeof e)for(var r in e)t.d(o,r,function(n){return e[n]}.bind(null,r));return o},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p=\"\",t(t.s=3)}([function(e,n,t){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.isObject=MathJax._.components.global.isObject,n.combineConfig=MathJax._.components.global.combineConfig,n.combineDefaults=MathJax._.components.global.combineDefaults,n.combineWithMathJax=MathJax._.components.global.combineWithMathJax,n.MathJax=MathJax._.components.global.MathJax},function(e,n,t){\"use strict\";var o=this&&this.__values||function(e){var n=\"function\"==typeof Symbol&&Symbol.iterator,t=n&&e[n],o=0;if(t)return t.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&o>=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(n?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(n,\"__esModule\",{value:!0}),n.NoUndefinedConfiguration=void 0;var r=t(2);n.NoUndefinedConfiguration=r.Configuration.create(\"noundefined\",{fallback:{macro:function(e,n){var t,r,i=e.create(\"text\",\"\\\\\"+n),a=e.options.noundefined||{},u={};try{for(var f=o([\"color\",\"background\",\"size\"]),c=f.next();!c.done;c=f.next()){var l=c.value;a[l]&&(u[\"math\"+l]=a[l])}}catch(e){t={error:e}}finally{try{c&&!c.done&&(r=f.return)&&r.call(f)}finally{if(t)throw t.error}}e.Push(e.create(\"node\",\"mtext\",[],u,i))}},options:{noundefined:{color:\"red\",background:\"\",size:\"\"}},priority:3})},function(e,n,t){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Configuration=MathJax._.input.tex.Configuration.Configuration,n.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,n.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,n,t){\"use strict\";t.r(n);var o=t(0),r=t(1);Object(o.combineWithMathJax)({_:{input:{tex:{noundefined:{NoUndefinedConfiguration:r}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/physics.js",
    "content": "!function(t){var e={};function a(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.m=t,a.c=e,a.d=function(t,e,r){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},a.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var n in t)a.d(r,n,function(e){return t[e]}.bind(null,n));return r},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a(a.s=17)}([function(t,e,a){\"use strict\";var r,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutoOpen=void 0;var i=a(8),o=a(2),s=a(3),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"auto open\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.toMml=function(){var e=this.factory.configuration.parser,a=this.getProperty(\"right\");if(this.getProperty(\"smash\")){var r=t.prototype.toMml.call(this),n=e.create(\"node\",\"mpadded\",[r],{height:0,depth:0});this.Clear(),this.Push(e.create(\"node\",\"TeXAtom\",[n]))}a&&this.Push(new s.default(a,e.stack.env,e.configuration).mml());var i=t.prototype.toMml.call(this);return o.default.fenced(this.factory.configuration,this.getProperty(\"open\"),i,this.getProperty(\"close\"),this.getProperty(\"big\"))},e.prototype.checkItem=function(e){var a=e.getProperty(\"autoclose\");return a&&a===this.getProperty(\"close\")?this.getProperty(\"ignore\")?(this.Clear(),[[],!0]):[[this.toMml()],!0]:t.prototype.checkItem.call(this,e)},e}(i.BaseItem);e.AutoOpen=c},function(t,e,a){\"use strict\";var r=this&&this.__read||function(t,e){var a=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!a)return t;var r,n,i=a.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)o.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0});var n=a(11),i=a(3),o=a(12),s=a(4),c=a(2),l=a(13),u=a(14),m={},d={\"(\":\")\",\"[\":\"]\",\"{\":\"}\",\"|\":\"|\"},f=/^(b|B)i(g{1,2})$/;m.Quantity=function(t,e,a,r,n,u,m){void 0===a&&(a=\"(\"),void 0===r&&(r=\")\"),void 0===n&&(n=!1),void 0===u&&(u=\"\"),void 0===m&&(m=\"\");var p=!!n&&t.GetStar(),v=t.GetNext(),g=t.i,h=null;if(\"\\\\\"===v){if(t.i++,!(h=t.GetCS()).match(f)){var x=t.create(\"node\",\"mrow\");return t.Push(c.default.fenced(t.configuration,a,x,r)),void(t.i=g)}v=t.GetNext()}var M=d[v];if(n&&\"{\"!==v)throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);if(!M){x=t.create(\"node\",\"mrow\");return t.Push(c.default.fenced(t.configuration,a,x,r)),void(t.i=g)}if(u){var y=t.create(\"token\",\"mi\",{texClass:s.TEXCLASS.OP},u);m&&l.default.setAttribute(y,\"mathvariant\",m),t.Push(t.itemFactory.create(\"fn\",y))}if(\"{\"===v){var b=t.GetArgument(e);return v=n?a:\"\\\\{\",M=n?r:\"\\\\}\",b=p?v+\" \"+b+\" \"+M:h?\"\\\\\"+h+\"l\"+v+\" \"+b+\" \\\\\"+h+\"r\"+M:\"\\\\left\"+v+\" \"+b+\" \\\\right\"+M,void t.Push(new i.default(b,t.stack.env,t.configuration).mml())}n&&(v=a,M=r),t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:v,close:M,big:h}))},m.Eval=function(t,e){var a=t.GetStar(),r=t.GetNext();if(\"{\"!==r){if(\"(\"===r||\"[\"===r)return t.i++,void t.Push(t.itemFactory.create(\"auto open\").setProperties({open:r,close:\"|\",smash:a,right:\"\\\\vphantom{\\\\int}\"}));throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS)}var n=t.GetArgument(e),i=\"\\\\left. \"+(a?\"\\\\smash{\"+n+\"}\":n)+\" \\\\vphantom{\\\\int}\\\\right|\";t.string=t.string.slice(0,t.i)+i+t.string.slice(t.i)},m.Commutator=function(t,e,a,r){void 0===a&&(a=\"[\"),void 0===r&&(r=\"]\");var n=t.GetStar(),s=t.GetNext(),c=null;if(\"\\\\\"===s){if(t.i++,!(c=t.GetCS()).match(f))throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);s=t.GetNext()}if(\"{\"!==s)throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);var l=t.GetArgument(e)+\",\"+t.GetArgument(e);l=n?a+\" \"+l+\" \"+r:c?\"\\\\\"+c+\"l\"+a+\" \"+l+\" \\\\\"+c+\"r\"+r:\"\\\\left\"+a+\" \"+l+\" \\\\right\"+r,t.Push(new i.default(l,t.stack.env,t.configuration).mml())};var p=[65,90],v=[97,122],g=[913,937],h=[945,969],x=[48,57];function M(t,e){return t>=e[0]&&t<=e[1]}function y(t,e,a,r){var n=t.configuration.parser,i=u.NodeFactory.createToken(t,e,a,r),o=r.codePointAt(0);return 1===r.length&&!n.stack.env.font&&n.stack.env.vectorFont&&(M(o,p)||M(o,v)||M(o,g)||M(o,x)||M(o,h)&&n.stack.env.vectorStar||l.default.getAttribute(i,\"accent\"))&&l.default.setAttribute(i,\"mathvariant\",n.stack.env.vectorFont),i}m.VectorBold=function(t,e){var a=t.GetStar(),r=t.GetArgument(e),n=t.configuration.nodeFactory.get(\"token\"),o=t.stack.env.font;delete t.stack.env.font,t.configuration.nodeFactory.set(\"token\",y),t.stack.env.vectorFont=a?\"bold-italic\":\"bold\",t.stack.env.vectorStar=a;var s=new i.default(r,t.stack.env,t.configuration).mml();o&&(t.stack.env.font=o),delete t.stack.env.vectorFont,delete t.stack.env.vectorStar,t.configuration.nodeFactory.set(\"token\",n),t.Push(s)},m.StarMacro=function(t,e,a){for(var r=[],n=3;n<arguments.length;n++)r[n-3]=arguments[n];var i=t.GetStar(),s=[];if(a)for(var l=s.length;l<a;l++)s.push(t.GetArgument(e));var u=r.join(i?\"*\":\"\");if(u=c.default.substituteArgs(t,s,u),t.string=c.default.addArgs(t,u,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new o.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is there a recursive macro call?\")};var b=function(t,e,a,r,n){var o=new i.default(r,t.stack.env,t.configuration).mml();t.Push(t.itemFactory.create(e,o));var s=t.GetNext(),c=d[s];if(c){var l=-1!==n.indexOf(s);if(\"{\"===s){var u=(l?\"\\\\left\\\\{\":\"\")+\" \"+t.GetArgument(a)+\" \"+(l?\"\\\\right\\\\}\":\"\");return t.string=u+t.string.slice(t.i),void(t.i=0)}l&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:s,close:c})))}};function P(t,e,a){var n=r(t,3),i=n[0],o=n[1],s=n[2];return e&&a?\"\\\\left\\\\langle{\"+i+\"}\\\\middle\\\\vert{\"+o+\"}\\\\middle\\\\vert{\"+s+\"}\\\\right\\\\rangle\":e?\"\\\\langle{\"+i+\"}\\\\vert{\"+o+\"}\\\\vert{\"+s+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+i+\"}\\\\right\\\\vert{\"+o+\"}\\\\left\\\\vert{\"+s+\"}\\\\right\\\\rangle\"}m.OperatorApplication=function(t,e,a){for(var r=[],n=3;n<arguments.length;n++)r[n-3]=arguments[n];b(t,\"fn\",e,a,r)},m.VectorOperator=function(t,e,a){for(var r=[],n=3;n<arguments.length;n++)r[n-3]=arguments[n];b(t,\"mml\",e,a,r)},m.Expression=function(t,e,a,r){void 0===a&&(a=!0),void 0===r&&(r=\"\"),r=r||e.slice(1);var n=a?t.GetBrackets(e):null,o=t.create(\"token\",\"mi\",{texClass:s.TEXCLASS.OP},r);if(n){var c=new i.default(n,t.stack.env,t.configuration).mml();o=t.create(\"node\",\"msup\",[o,c])}t.Push(t.itemFactory.create(\"fn\",o)),\"(\"===t.GetNext()&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\"})))},m.Qqtext=function(t,e,a){var r=(t.GetStar()?\"\":\"\\\\quad\")+\"\\\\text{\"+(a||t.GetArgument(e))+\"}\\\\quad \";t.string=t.string.slice(0,t.i)+r+t.string.slice(t.i)},m.Differential=function(t,e,a){var r=t.GetBrackets(e),n=null!=r?\"^{\"+r+\"}\":\" \",o=\"(\"===t.GetNext(),c=\"{\"===t.GetNext(),l=a+n;if(o||c)if(c){l+=t.GetArgument(e);u=new i.default(l,t.stack.env,t.configuration).mml();t.Push(t.create(\"node\",\"TeXAtom\",[u],{texClass:s.TEXCLASS.OP}))}else t.Push(new i.default(l,t.stack.env,t.configuration).mml()),t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\"}));else{l+=t.GetArgument(e,!0)||\"\";var u=new i.default(l,t.stack.env,t.configuration).mml();t.Push(u)}},m.Derivative=function(t,e,a,r){var n=t.GetStar(),o=t.GetBrackets(e),s=1,c=[];for(c.push(t.GetArgument(e));\"{\"===t.GetNext()&&s<a;)c.push(t.GetArgument(e)),s++;var l=!1,u=\" \",m=\" \";a>2&&c.length>2?(u=\"^{\"+(c.length-1)+\"}\",l=!0):null!=o&&(a>2&&c.length>1&&(l=!0),m=u=\"^{\"+o+\"}\");for(var d=n?\"\\\\flatfrac\":\"\\\\frac\",f=c.length>1?c[0]:\"\",p=c.length>1?c[1]:c[0],v=\"\",g=2,h=void 0;h=c[g];g++)v+=r+\" \"+h;var x=d+\"{\"+r+u+f+\"}{\"+r+\" \"+p+m+\" \"+v+\"}\";t.Push(new i.default(x,t.stack.env,t.configuration).mml()),\"(\"===t.GetNext()&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\",ignore:l})))},m.Bra=function(t,e){var a=t.GetStar(),r=t.GetArgument(e),n=\"\",o=!1,s=!1;if(\"\\\\\"===t.GetNext()){var c=t.i;t.i++;var l=t.GetCS(),u=t.lookup(\"macro\",l);u&&\"ket\"===u.symbol?(o=!0,c=t.i,s=t.GetStar(),\"{\"===t.GetNext()?n=t.GetArgument(l,!0):(t.i=c,s=!1)):t.i=c}var m=\"\";m=o?a||s?\"\\\\langle{\"+r+\"}\\\\vert{\"+n+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+r+\"}\\\\middle\\\\vert{\"+n+\"}\\\\right\\\\rangle\":a||s?\"\\\\langle{\"+r+\"}\\\\vert\":\"\\\\left\\\\langle{\"+r+\"}\\\\right\\\\vert{\"+n+\"}\",t.Push(new i.default(m,t.stack.env,t.configuration).mml())},m.Ket=function(t,e){var a=t.GetStar(),r=t.GetArgument(e),n=a?\"\\\\vert{\"+r+\"}\\\\rangle\":\"\\\\left\\\\vert{\"+r+\"}\\\\right\\\\rangle\";t.Push(new i.default(n,t.stack.env,t.configuration).mml())},m.BraKet=function(t,e){var a=t.GetStar(),r=t.GetArgument(e),n=null;\"{\"===t.GetNext()&&(n=t.GetArgument(e,!0));var o=\"\";o=null==n?a?\"\\\\langle{\"+r+\"}\\\\vert{\"+r+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+r+\"}\\\\middle\\\\vert{\"+r+\"}\\\\right\\\\rangle\":a?\"\\\\langle{\"+r+\"}\\\\vert{\"+n+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+r+\"}\\\\middle\\\\vert{\"+n+\"}\\\\right\\\\rangle\",t.Push(new i.default(o,t.stack.env,t.configuration).mml())},m.KetBra=function(t,e){var a=t.GetStar(),r=t.GetArgument(e),n=null;\"{\"===t.GetNext()&&(n=t.GetArgument(e,!0));var o=\"\";o=null==n?a?\"\\\\vert{\"+r+\"}\\\\rangle\\\\!\\\\langle{\"+r+\"}\\\\vert\":\"\\\\left\\\\vert{\"+r+\"}\\\\middle\\\\rangle\\\\!\\\\middle\\\\langle{\"+r+\"}\\\\right\\\\vert\":a?\"\\\\vert{\"+r+\"}\\\\rangle\\\\!\\\\langle{\"+n+\"}\\\\vert\":\"\\\\left\\\\vert{\"+r+\"}\\\\middle\\\\rangle\\\\!\\\\middle\\\\langle{\"+n+\"}\\\\right\\\\vert\",t.Push(new i.default(o,t.stack.env,t.configuration).mml())},m.Expectation=function(t,e){var a=t.GetStar(),r=a&&t.GetStar(),n=t.GetArgument(e),o=null;\"{\"===t.GetNext()&&(o=t.GetArgument(e,!0));var s=n&&o?P([o,n,o],a,r):a?\"\\\\langle {\"+n+\"} \\\\rangle\":\"\\\\left\\\\langle {\"+n+\"} \\\\right\\\\rangle\";t.Push(new i.default(s,t.stack.env,t.configuration).mml())},m.MatrixElement=function(t,e){var a=t.GetStar(),r=a&&t.GetStar(),n=P([t.GetArgument(e),t.GetArgument(e),t.GetArgument(e)],a,r);t.Push(new i.default(n,t.stack.env,t.configuration).mml())},m.MatrixQuantity=function(t,e,a){var r=t.GetStar(),n=a?\"smallmatrix\":\"array\",o=\"\",s=\"\",c=\"\";switch(t.GetNext()){case\"{\":o=t.GetArgument(e);break;case\"(\":t.i++,s=r?\"\\\\lgroup\":\"(\",c=r?\"\\\\rgroup\":\")\",o=t.GetUpTo(e,\")\");break;case\"[\":t.i++,s=\"[\",c=\"]\",o=t.GetUpTo(e,\"]\");break;case\"|\":t.i++,s=\"|\",c=\"|\",o=t.GetUpTo(e,\"|\");break;default:s=\"(\",c=\")\"}var l=(s?\"\\\\left\":\"\")+s+\"\\\\begin{\"+n+\"}{} \"+o+\"\\\\end{\"+n+\"}\"+(s?\"\\\\right\":\"\")+c;t.Push(new i.default(l,t.stack.env,t.configuration).mml())},m.IdentityMatrix=function(t,e){var a=t.GetArgument(e),r=parseInt(a,10);if(isNaN(r))throw new o.default(\"InvalidNumber\",\"Invalid number\");if(r<=1)return t.string=\"1\"+t.string.slice(t.i),void(t.i=0);for(var n=Array(r).fill(\"0\"),i=[],s=0;s<r;s++){var c=n.slice();c[s]=\"1\",i.push(c.join(\" & \"))}t.string=i.join(\"\\\\\\\\ \")+t.string.slice(t.i),t.i=0},m.XMatrix=function(t,e){var a=t.GetStar(),r=t.GetArgument(e),n=t.GetArgument(e),i=t.GetArgument(e),s=parseInt(n,10),c=parseInt(i,10);if(isNaN(s)||isNaN(c)||c.toString()!==i||s.toString()!==n)throw new o.default(\"InvalidNumber\",\"Invalid number\");if(s=s<1?1:s,c=c<1?1:c,!a){var l=Array(c).fill(r).join(\" & \"),u=Array(s).fill(l).join(\"\\\\\\\\ \");return t.string=u+t.string.slice(t.i),void(t.i=0)}var m=\"\";if(1===s&&1===c)m=r;else if(1===s){l=[];for(var d=1;d<=c;d++)l.push(r+\"_{\"+d+\"}\");m=l.join(\" & \")}else if(1===c){for(l=[],d=1;d<=s;d++)l.push(r+\"_{\"+d+\"}\");m=l.join(\"\\\\\\\\ \")}else{var f=[];for(d=1;d<=s;d++){l=[];for(var p=1;p<=c;p++)l.push(r+\"_{{\"+d+\"}{\"+p+\"}}\");f.push(l.join(\" & \"))}m=f.join(\"\\\\\\\\ \")}t.string=m+t.string.slice(t.i),t.i=0},m.PauliMatrix=function(t,e){var a=t.GetArgument(e),r=a.slice(1);switch(a[0]){case\"0\":r+=\" 1 & 0\\\\\\\\ 0 & 1\";break;case\"1\":case\"x\":r+=\" 0 & 1\\\\\\\\ 1 & 0\";break;case\"2\":case\"y\":r+=\" 0 & -i\\\\\\\\ i & 0\";break;case\"3\":case\"z\":r+=\" 1 & 0\\\\\\\\ 0 & -1\"}t.string=r+t.string.slice(t.i),t.i=0},m.DiagonalMatrix=function(t,e,a){if(\"{\"===t.GetNext()){var r=t.i;t.GetArgument(e);var n=t.i;t.i=r+1;for(var i=[],o=\"\",s=t.i;s<n;){try{o=t.GetUpTo(e,\",\")}catch(e){t.i=n,i.push(t.string.slice(s,n-1));break}if(t.i>=n){i.push(t.string.slice(s,n));break}s=t.i,i.push(o)}t.string=function(t,e){for(var a=t.length,r=[],n=0;n<a;n++)r.push(Array(e?a-n:n+1).join(\"&\")+\"\\\\mqty{\"+t[n]+\"}\");return r.join(\"\\\\\\\\ \")}(i,a)+t.string.slice(n),t.i=0}},m.AutoClose=function(t,e,a){var r=t.create(\"token\",\"mo\",{stretchy:!1},e),n=t.itemFactory.create(\"mml\",r).setProperties({autoclose:e});t.Push(n)},m.Macro=n.default.Macro,m.NamedFn=n.default.NamedFn,m.Array=n.default.Array,e.default=m},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.ParseUtil.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexParser.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,e.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,e.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,e.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,e.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,e.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,e.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,e.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,e.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,e.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.PhysicsConfiguration=void 0;var n=a(7),i=a(0);a(9),e.PhysicsConfiguration=n.Configuration.create(\"physics\",{handler:{macro:[\"Physics-automatic-bracing-macros\",\"Physics-vector-macros\",\"Physics-vector-chars\",\"Physics-derivative-macros\",\"Physics-expressions-macros\",\"Physics-quick-quad-macros\",\"Physics-bra-ket-macros\",\"Physics-matrix-macros\"],character:[\"Physics-characters\"],environment:[\"Physics-aux-envs\"]},items:(r={},r[i.AutoOpen.prototype.kind]=i.AutoOpen,r)})},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlStack=MathJax._.input.tex.StackItem.MmlStack,e.BaseItem=MathJax._.input.tex.StackItem.BaseItem},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=a(10),n=a(1),i=a(15),o=a(16),s=a(4);new r.CommandMap(\"Physics-automatic-bracing-macros\",{quantity:\"Quantity\",qty:\"Quantity\",pqty:[\"Quantity\",\"(\",\")\",!0],bqty:[\"Quantity\",\"[\",\"]\",!0],vqty:[\"Quantity\",\"|\",\"|\",!0],Bqty:[\"Quantity\",\"{\",\"}\",!0],absolutevalue:[\"Quantity\",\"|\",\"|\",!0],abs:[\"Quantity\",\"|\",\"|\",!0],norm:[\"Quantity\",\"\\\\|\",\"\\\\|\",!0],evaluated:\"Eval\",eval:\"Eval\",order:[\"Quantity\",\"(\",\")\",!0,\"O\",i.TexConstant.Variant.CALLIGRAPHIC],commutator:\"Commutator\",comm:\"Commutator\",anticommutator:[\"Commutator\",\"\\\\{\",\"\\\\}\"],acomm:[\"Commutator\",\"\\\\{\",\"\\\\}\"],poissonbracket:[\"Commutator\",\"\\\\{\",\"\\\\}\"],pb:[\"Commutator\",\"\\\\{\",\"\\\\}\"]},n.default),new r.CharacterMap(\"Physics-vector-chars\",o.default.mathchar0mi,{dotproduct:[\"\\u22c5\",{mathvariant:i.TexConstant.Variant.BOLD}],vdot:[\"\\u22c5\",{mathvariant:i.TexConstant.Variant.BOLD}],crossproduct:\"\\xd7\",cross:\"\\xd7\",cp:\"\\xd7\",gradientnabla:[\"\\u2207\",{mathvariant:i.TexConstant.Variant.BOLD}],real:[\"\\u211c\",{mathvariant:i.TexConstant.Variant.NORMAL}],imaginary:[\"\\u2111\",{mathvariant:i.TexConstant.Variant.NORMAL}]}),new r.CommandMap(\"Physics-vector-macros\",{vectorbold:\"VectorBold\",vb:\"VectorBold\",vectorarrow:[\"StarMacro\",1,\"\\\\vec{\\\\vb\",\"{#1}}\"],va:[\"StarMacro\",1,\"\\\\vec{\\\\vb\",\"{#1}}\"],vectorunit:[\"StarMacro\",1,\"\\\\hat{\\\\vb\",\"{#1}}\"],vu:[\"StarMacro\",1,\"\\\\hat{\\\\vb\",\"{#1}}\"],gradient:[\"OperatorApplication\",\"\\\\gradientnabla\",\"(\",\"[\"],grad:[\"OperatorApplication\",\"\\\\gradientnabla\",\"(\",\"[\"],divergence:[\"VectorOperator\",\"\\\\gradientnabla\\\\vdot\",\"(\",\"[\"],div:[\"VectorOperator\",\"\\\\gradientnabla\\\\vdot\",\"(\",\"[\"],curl:[\"VectorOperator\",\"\\\\gradientnabla\\\\crossproduct\",\"(\",\"[\"],laplacian:[\"OperatorApplication\",\"\\\\nabla^2\",\"(\",\"[\"]},n.default),new r.CommandMap(\"Physics-expressions-macros\",{sin:\"Expression\",sinh:\"Expression\",arcsin:\"Expression\",asin:\"Expression\",cos:\"Expression\",cosh:\"Expression\",arccos:\"Expression\",acos:\"Expression\",tan:\"Expression\",tanh:\"Expression\",arctan:\"Expression\",atan:\"Expression\",csc:\"Expression\",csch:\"Expression\",arccsc:\"Expression\",acsc:\"Expression\",sec:\"Expression\",sech:\"Expression\",arcsec:\"Expression\",asec:\"Expression\",cot:\"Expression\",coth:\"Expression\",arccot:\"Expression\",acot:\"Expression\",exp:[\"Expression\",!1],log:\"Expression\",ln:\"Expression\",det:[\"Expression\",!1],Pr:[\"Expression\",!1],tr:[\"Expression\",!1],trace:[\"Expression\",!1,\"tr\"],Tr:[\"Expression\",!1],Trace:[\"Expression\",!1,\"Tr\"],rank:\"NamedFn\",erf:[\"Expression\",!1],Res:[\"OperatorApplication\",\"{\\\\rm Res}\",\"(\",\"[\",\"{\"],principalvalue:[\"OperatorApplication\",\"{\\\\cal P}\"],pv:[\"OperatorApplication\",\"{\\\\cal P}\"],PV:[\"OperatorApplication\",\"{\\\\rm P.V.}\"],Re:[\"OperatorApplication\",\"{\\\\rm Re}\",\"{\"],Im:[\"OperatorApplication\",\"{\\\\rm Im}\",\"{\"],sine:[\"NamedFn\",\"sin\"],hypsine:[\"NamedFn\",\"sinh\"],arcsine:[\"NamedFn\",\"arcsin\"],asine:[\"NamedFn\",\"asin\"],cosine:[\"NamedFn\",\"cos\"],hypcosine:[\"NamedFn\",\"cosh\"],arccosine:[\"NamedFn\",\"arccos\"],acosine:[\"NamedFn\",\"acos\"],tangent:[\"NamedFn\",\"tan\"],hyptangent:[\"NamedFn\",\"tanh\"],arctangent:[\"NamedFn\",\"arctan\"],atangent:[\"NamedFn\",\"atan\"],cosecant:[\"NamedFn\",\"csc\"],hypcosecant:[\"NamedFn\",\"csch\"],arccosecant:[\"NamedFn\",\"arccsc\"],acosecant:[\"NamedFn\",\"acsc\"],secant:[\"NamedFn\",\"sec\"],hypsecant:[\"NamedFn\",\"sech\"],arcsecant:[\"NamedFn\",\"arcsec\"],asecant:[\"NamedFn\",\"asec\"],cotangent:[\"NamedFn\",\"cot\"],hypcotangent:[\"NamedFn\",\"coth\"],arccotangent:[\"NamedFn\",\"arccot\"],acotangent:[\"NamedFn\",\"acot\"],exponential:[\"NamedFn\",\"exp\"],logarithm:[\"NamedFn\",\"log\"],naturallogarithm:[\"NamedFn\",\"ln\"],determinant:[\"NamedFn\",\"det\"],Probability:[\"NamedFn\",\"Pr\"]},n.default),new r.CommandMap(\"Physics-quick-quad-macros\",{qqtext:\"Qqtext\",qq:\"Qqtext\",qcomma:[\"Macro\",\"\\\\qqtext*{,}\"],qc:[\"Macro\",\"\\\\qqtext*{,}\"],qcc:[\"Qqtext\",\"c.c.\"],qif:[\"Qqtext\",\"if\"],qthen:[\"Qqtext\",\"then\"],qelse:[\"Qqtext\",\"else\"],qotherwise:[\"Qqtext\",\"otherwise\"],qunless:[\"Qqtext\",\"unless\"],qgiven:[\"Qqtext\",\"given\"],qusing:[\"Qqtext\",\"using\"],qassume:[\"Qqtext\",\"assume\"],\"qsince,\":[\"Qqtext\",\"since,\"],qlet:[\"Qqtext\",\"let\"],qfor:[\"Qqtext\",\"for\"],qall:[\"Qqtext\",\"all\"],qeven:[\"Qqtext\",\"even\"],qodd:[\"Qqtext\",\"odd\"],qinteger:[\"Qqtext\",\"integer\"],qand:[\"Qqtext\",\"and\"],qor:[\"Qqtext\",\"or\"],qas:[\"Qqtext\",\"as\"],qin:[\"Qqtext\",\"in\"]},n.default),new r.CommandMap(\"Physics-derivative-macros\",{flatfrac:[\"Macro\",\"\\\\left.#1\\\\middle/#2\\\\right.\",2],differential:[\"Differential\",\"{\\\\rm d}\"],dd:[\"Differential\",\"{\\\\rm d}\"],variation:[\"Differential\",\"\\\\delta\"],var:[\"Differential\",\"\\\\delta\"],derivative:[\"Derivative\",2,\"{\\\\rm d}\"],dv:[\"Derivative\",2,\"{\\\\rm d}\"],partialderivative:[\"Derivative\",3,\"\\\\partial\"],pderivative:[\"Derivative\",3,\"\\\\partial\"],pdv:[\"Derivative\",3,\"\\\\partial\"],functionalderivative:[\"Derivative\",2,\"\\\\delta\"],fderivative:[\"Derivative\",2,\"\\\\delta\"],fdv:[\"Derivative\",2,\"\\\\delta\"]},n.default),new r.CommandMap(\"Physics-bra-ket-macros\",{bra:\"Bra\",ket:\"Ket\",innerproduct:\"BraKet\",braket:\"BraKet\",outerproduct:\"KetBra\",dyad:\"KetBra\",ketbra:\"KetBra\",op:\"KetBra\",expectationvalue:\"Expectation\",expval:\"Expectation\",ev:\"Expectation\",matrixelement:\"MatrixElement\",matrixel:\"MatrixElement\",mel:\"MatrixElement\"},n.default),new r.CommandMap(\"Physics-matrix-macros\",{matrixquantity:\"MatrixQuantity\",mqty:\"MatrixQuantity\",pmqty:[\"Macro\",\"\\\\mqty(#1)\",1],Pmqty:[\"Macro\",\"\\\\mqty*(#1)\",1],bmqty:[\"Macro\",\"\\\\mqty[#1]\",1],vmqty:[\"Macro\",\"\\\\mqty|#1|\",1],smallmatrixquantity:[\"MatrixQuantity\",!0],smqty:[\"MatrixQuantity\",!0],spmqty:[\"Macro\",\"\\\\smqty(#1)\",1],sPmqty:[\"Macro\",\"\\\\smqty*(#1)\",1],sbmqty:[\"Macro\",\"\\\\smqty[#1]\",1],svmqty:[\"Macro\",\"\\\\smqty|#1|\",1],matrixdeterminant:[\"Macro\",\"\\\\vmqty{#1}\",1],mdet:[\"Macro\",\"\\\\vmqty{#1}\",1],smdet:[\"Macro\",\"\\\\svmqty{#1}\",1],identitymatrix:\"IdentityMatrix\",imat:\"IdentityMatrix\",xmatrix:\"XMatrix\",xmat:\"XMatrix\",zeromatrix:[\"Macro\",\"\\\\xmat{0}{#1}{#2}\",2],zmat:[\"Macro\",\"\\\\xmat{0}{#1}{#2}\",2],paulimatrix:\"PauliMatrix\",pmat:\"PauliMatrix\",diagonalmatrix:\"DiagonalMatrix\",dmat:\"DiagonalMatrix\",antidiagonalmatrix:[\"DiagonalMatrix\",!0],admat:[\"DiagonalMatrix\",!0]},n.default),new r.EnvironmentMap(\"Physics-aux-envs\",o.default.environment,{smallmatrix:[\"Array\",null,null,null,\"c\",\"0.333em\",\".2em\",\"S\",1]},n.default),new r.MacroMap(\"Physics-characters\",{\"|\":[\"AutoClose\",s.TEXCLASS.ORD],\")\":\"AutoClose\",\"]\":\"AutoClose\"},n.default)},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.base.BaseMethods.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NodeFactory=MathJax._.input.tex.NodeFactory.NodeFactory},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.ParseMethods.default},function(t,e,a){\"use strict\";a.r(e);var r=a(5),n=a(6),i=a(0),o=a(1);Object(r.combineWithMathJax)({_:{input:{tex:{physics:{PhysicsConfiguration:n,PhysicsItems:i,PhysicsMethods:o}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/require.js",
    "content": "!function(e){var t={};function a(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,a),o.l=!0,o.exports}a.m=e,a.c=t,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)a.d(r,o,function(t){return e[t]}.bind(null,o));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,\"a\",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p=\"\",a(a.s=9)}([function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isObject=MathJax._.components.global.isObject,t.combineConfig=MathJax._.components.global.combineConfig,t.combineDefaults=MathJax._.components.global.combineDefaults,t.combineWithMathJax=MathJax._.components.global.combineWithMathJax,t.MathJax=MathJax._.components.global.MathJax},function(e,t,a){\"use strict\";var r=this&&this.__values||function(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,a=t&&e[t],r=0;if(a)return a.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(e,t){var a=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!a)return e;var r,o,n=a.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=n.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(a=n.return)&&a.call(n)}finally{if(o)throw o.error}}return i},n=this&&this.__spread||function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(o(arguments[t]));return e};Object.defineProperty(t,\"__esModule\",{value:!0}),t.RequireConfiguration=t.options=t.RequireMethods=t.RequireLoad=void 0;var i=a(2),u=a(3),s=a(4),p=a(0),l=a(5),c=a(6),f=a(7),d=a(8),x=p.MathJax.config;function h(e,t){var a,o=e.parseOptions.options.require,n=e.parseOptions.packageData.get(\"require\").required,u=t.substr(o.prefix.length);if(n.indexOf(u)<0){n.push(u),function(e,t){var a,o;void 0===t&&(t=[]);var n=e.parseOptions.options.require.prefix;try{for(var i=r(t),u=i.next();!u.done;u=i.next()){var s=u.value;s.substr(0,n.length)===n&&h(e,s)}}catch(e){a={error:e}}finally{try{u&&!u.done&&(o=i.return)&&o.call(i)}finally{if(a)throw a.error}}}(e,c.CONFIG.dependencies[t]);var s=i.ConfigurationHandler.get(u);if(s){var p=x[t]||{};s.options&&1===Object.keys(s.options).length&&s.options[u]&&((a={})[u]=p,p=a),e.configuration.add(s,e,p);var l=e.parseOptions.packageData.get(\"require\").configured;s.preprocessors.length&&!l.has(u)&&(l.set(u,!0),f.mathjax.retryAfter(Promise.resolve()))}}}function M(e,t){var a=e.options.require,r=a.allow,o=(\"[\"===t.substr(0,1)?\"\":a.prefix)+t;if(!(r.hasOwnProperty(o)?r[o]:r.hasOwnProperty(t)?r[t]:a.defaultAllow))throw new s.default(\"BadRequire\",'Extension \"%1\" is now allowed to be loaded',o);l.Package.packages.has(o)?h(e.configuration.packageData.get(\"require\").jax,o):f.mathjax.retryAfter(c.Loader.load(o))}t.RequireLoad=M,t.RequireMethods={Require:function(e,t){var a=e.GetArgument(t);if(a.match(/[^_a-zA-Z0-9]/)||\"\"===a)throw new s.default(\"BadPackageName\",\"Argument for %1 is not a valid package name\",t);M(e,a)}},t.options={require:{allow:d.expandable({base:!1,\"all-packages\":!1}),defaultAllow:!0,prefix:\"tex\"}},new u.CommandMap(\"require\",{require:\"Require\"},t.RequireMethods),t.RequireConfiguration=i.Configuration.create(\"require\",{handler:{macro:[\"require\"]},config:function(e,t){t.parseOptions.packageData.set(\"require\",{jax:t,required:n(t.options.packages),configured:new Map});var a=t.parseOptions.options.require,r=a.prefix;if(r.match(/[^_a-zA-Z0-9]/))throw Error(\"Illegal characters used in \\\\require prefix\");c.CONFIG.paths[r]||(c.CONFIG.paths[r]=\"[mathjax]/input/tex/extensions\"),a.prefix=\"[\"+r+\"]/\"},options:t.options})},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Configuration=MathJax._.input.tex.Configuration.Configuration,t.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,t.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,t.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,t.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,t.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,t.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,t.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,t.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,t.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=MathJax._.input.tex.TexError.default},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PackageError=MathJax._.components.package.PackageError,t.Package=MathJax._.components.package.Package},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Loader=MathJax._.components.loader.Loader,t.MathJax=MathJax._.components.loader.MathJax,t.CONFIG=MathJax._.components.loader.CONFIG},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.mathjax=MathJax._.mathjax.mathjax},function(e,t,a){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.APPEND=MathJax._.util.Options.APPEND,t.REMOVE=MathJax._.util.Options.REMOVE,t.Expandable=MathJax._.util.Options.Expandable,t.expandable=MathJax._.util.Options.expandable,t.makeArray=MathJax._.util.Options.makeArray,t.keys=MathJax._.util.Options.keys,t.copy=MathJax._.util.Options.copy,t.insert=MathJax._.util.Options.insert,t.defaultOptions=MathJax._.util.Options.defaultOptions,t.userOptions=MathJax._.util.Options.userOptions,t.selectOptions=MathJax._.util.Options.selectOptions,t.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,t.separateOptions=MathJax._.util.Options.separateOptions},function(e,t,a){\"use strict\";a.r(t);var r=a(0),o=a(1);Object(r.combineWithMathJax)({_:{input:{tex:{require:{RequireConfiguration:o}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/tagFormat.js",
    "content": "!function(t){var n={};function o(e){if(n[e])return n[e].exports;var a=n[e]={i:e,l:!1,exports:{}};return t[e].call(a.exports,a,a.exports,o),a.l=!0,a.exports}o.m=t,o.c=n,o.d=function(t,n,e){o.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:e})},o.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},o.t=function(t,n){if(1&n&&(t=o(t)),8&n)return t;if(4&n&&\"object\"==typeof t&&t&&t.__esModule)return t;var e=Object.create(null);if(o.r(e),Object.defineProperty(e,\"default\",{enumerable:!0,value:t}),2&n&&\"string\"!=typeof t)for(var a in t)o.d(e,a,function(n){return t[n]}.bind(null,a));return e},o.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(n,\"a\",n),n},o.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},o.p=\"\",o(o.s=4)}([function(t,n,o){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.isObject=MathJax._.components.global.isObject,n.combineConfig=MathJax._.components.global.combineConfig,n.combineDefaults=MathJax._.components.global.combineDefaults,n.combineWithMathJax=MathJax._.components.global.combineWithMathJax,n.MathJax=MathJax._.components.global.MathJax},function(t,n,o){\"use strict\";var e,a=this&&this.__extends||(e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var o in n)n.hasOwnProperty(o)&&(t[o]=n[o])})(t,n)},function(t,n){function o(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(o.prototype=n.prototype,new o)});Object.defineProperty(n,\"__esModule\",{value:!0}),n.TagFormatConfiguration=n.tagformatConfig=void 0;var r=o(2),i=o(3),u=0;function s(t,n){var o=n.parseOptions.options.tags;\"base\"!==o&&t.tags.hasOwnProperty(o)&&i.TagsFactory.add(o,t.tags[o]);var e=function(t){function o(){return null!==t&&t.apply(this,arguments)||this}return a(o,t),o.prototype.formatNumber=function(t){return n.parseOptions.options.tagformat.number(t)},o.prototype.formatTag=function(t){return n.parseOptions.options.tagformat.tag(t)},o.prototype.formatId=function(t){return n.parseOptions.options.tagformat.id(t)},o.prototype.formatUrl=function(t,o){return n.parseOptions.options.tagformat.url(t,o)},o}(i.TagsFactory.create(n.parseOptions.options.tags).constructor),r=\"configTags-\"+ ++u;i.TagsFactory.add(r,e),n.parseOptions.options.tags=r}n.tagformatConfig=s,n.TagFormatConfiguration=r.Configuration.create(\"tagformat\",{config:[s,10],options:{tagformat:{number:function(t){return t.toString()},tag:function(t){return\"(\"+t+\")\"},id:function(t){return\"mjx-eqn-\"+t.replace(/\\s/g,\"_\")},url:function(t,n){return n+\"#\"+encodeURIComponent(t)}}}})},function(t,n,o){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Configuration=MathJax._.input.tex.Configuration.Configuration,n.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,n.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,n,o){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Label=MathJax._.input.tex.Tags.Label,n.TagInfo=MathJax._.input.tex.Tags.TagInfo,n.AbstractTags=MathJax._.input.tex.Tags.AbstractTags,n.NoTags=MathJax._.input.tex.Tags.NoTags,n.AllTags=MathJax._.input.tex.Tags.AllTags,n.TagsFactory=MathJax._.input.tex.Tags.TagsFactory},function(t,n,o){\"use strict\";o.r(n);var e=o(0),a=o(1);Object(e.combineWithMathJax)({_:{input:{tex:{tagformat:{TagFormatConfiguration:a}}}}}),function(t,n,o){var a,r,i,u=MathJax.config.tex;if(u&&u.packages){var s=u.packages,f=s.indexOf(t);f>=0&&(s[f]=n),o&&u[t]&&(Object(e.combineConfig)(u,(a={},r=n,i=u[t],r in a?Object.defineProperty(a,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):a[r]=i,a)),delete u[t])}}(\"tagFormat\",\"tagformat\",!0)}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/textmacros.js",
    "content": "!function(t){var e={};function a(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=t,a.c=e,a.d=function(t,e,n){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},a.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var r in t)a.d(n,r,function(e){return t[e]}.bind(null,r));return n},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a(a.s=18)}([function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextMacrosMethods=void 0;var n=a(3),r=a(13),o=a(14);e.TextMacrosMethods={Comment:function(t,e){for(;t.i<t.string.length&&\"\\n\"!==t.string.charAt(t.i);)t.i++;t.i++},Math:function(t,e){t.saveText();for(var a,r,o=t.i,s=0;r=t.GetNext();)switch(a=t.i++,r){case\"\\\\\":\")\"===t.GetCS()&&(r=\"\\\\(\");case\"$\":if(0===s&&e===r){var i=t.texParser.configuration,c=new n.default(t.string.substr(o,a-o),t.stack.env,i).mml();return void t.PushMath(c)}break;case\"{\":s++;break;case\"}\":0===s&&t.Error(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"),s--}t.Error(\"MathNotTerminated\",\"Math-mode is not properly terminated\")},MathModeOnly:function(t,e){t.Error(\"MathModeOnly\",\"'%1' allowed only in math mode\",e)},Misplaced:function(t,e){t.Error(\"Misplaced\",\"'%1' can not be used here\",e)},OpenBrace:function(t,e){var a=t.stack.env;t.envStack.push(a),t.stack.env=Object.assign({},a)},CloseBrace:function(t,e){t.envStack.length?(t.saveText(),t.stack.env=t.envStack.pop()):t.Error(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\")},OpenQuote:function(t,e){t.string.charAt(t.i)===e?(t.text+=\"\\u201c\",t.i++):t.text+=\"\\u2018\"},CloseQuote:function(t,e){t.string.charAt(t.i)===e?(t.text+=\"\\u201d\",t.i++):t.text+=\"\\u2019\"},Tilde:function(t,e){t.text+=\"\\xa0\"},Space:function(t,e){for(t.text+=\" \";t.GetNext().match(/\\s/);)t.i++},SelfQuote:function(t,e){t.text+=e.substr(1)},Insert:function(t,e,a){t.text+=a},Accent:function(t,e,a){var n=t.ParseArg(name),r=t.create(\"token\",\"mo\",{},a);t.addAttributes(r),t.Push(t.create(\"node\",\"mover\",[n,r]))},Emph:function(t,e){var a=\"-tex-mathit\"===t.stack.env.mathvariant?\"normal\":\"-tex-mathit\";t.Push(t.ParseTextArg(e,{mathvariant:a}))},SetFont:function(t,e,a){t.saveText(),t.stack.env.mathvariant=a},SetSize:function(t,e,a){t.saveText(),t.stack.env.mathsize=a},CheckAutoload:function(t,e){var a=t.configuration.packageData.get(\"autoload\"),n=t.texParser;e=e.slice(1);var o=n.lookup(\"macro\",e);if(!o||a&&o._func===a.Autoload){if(n.parse(\"macro\",[n,e]),!o)return;r.retryAfter(Promise.resolve())}n.parse(\"macro\",[t,e])},Macro:o.default.Macro,Spacer:o.default.Spacer,Hskip:o.default.Hskip,rule:o.default.rule,Rule:o.default.Rule,HandleRef:o.default.HandleRef}},function(t,e,a){\"use strict\";var n,r=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a])})(t,e)},function(t,e){function a(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(a.prototype=e.prototype,new a)}),o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,a=e&&t[e],n=0;if(a)return a.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},s=this&&this.__read||function(t,e){var a=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!a)return t;var n,r,o=a.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)s.push(n.value)}catch(t){r={error:t}}finally{try{n&&!n.done&&(a=o.return)&&a.call(o)}finally{if(r)throw r.error}}return s},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(s(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextParser=void 0;var c=a(3),u=a(9),l=a(10),p=a(11),m=a(12),h=a(2),f=function(t){function e(e,a,n,r){var o=t.call(this,e,a,n)||this;return o.level=r,o}return r(e,t),Object.defineProperty(e.prototype,\"texParser\",{get:function(){return this.configuration.packageData.get(\"textmacros\").texParser},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tags\",{get:function(){return this.texParser.tags},enumerable:!1,configurable:!0}),e.prototype.mml=function(){return null!=this.level?this.create(\"node\",\"mstyle\",this.nodes,{displaystyle:!1,scriptlevel:this.level}):1===this.nodes.length?this.nodes[0]:this.create(\"node\",\"inferredMrow\",this.nodes)},e.prototype.Parse=function(){this.text=\"\",this.nodes=[],this.envStack=[],t.prototype.Parse.call(this)},e.prototype.saveText=function(){if(this.text){var t=this.stack.env.mathvariant,e=l.default.internalText(this,this.text,t?{mathvariant:t}:{});this.text=\"\",this.Push(e)}},e.prototype.Push=function(e){if(this.text&&this.saveText(),e instanceof h.StopItem)return t.prototype.Push.call(this,e);e instanceof h.StyleItem?this.stack.env.mathcolor=this.stack.env.color:e instanceof p.AbstractMmlNode&&(this.addAttributes(e),this.nodes.push(e))},e.prototype.PushMath=function(t){var e,a,n=this.stack.env;try{for(var r=o([\"mathsize\",\"mathcolor\"]),s=r.next();!s.done;s=r.next()){var i=s.value;n[i]&&!t.attributes.getExplicit(i)&&(t.isToken||t.isKind(\"mstyle\")||(t=this.create(\"node\",\"mstyle\",[t])),m.default.setAttribute(t,i,n[i]))}}catch(t){e={error:t}}finally{try{s&&!s.done&&(a=r.return)&&a.call(r)}finally{if(e)throw e.error}}t.isKind(\"inferredMrow\")&&(t=this.create(\"node\",\"mrow\",t.childNodes)),this.nodes.push(t)},e.prototype.addAttributes=function(t){var e,a,n=this.stack.env;if(t.isToken)try{for(var r=o([\"mathsize\",\"mathcolor\",\"mathvariant\"]),s=r.next();!s.done;s=r.next()){var i=s.value;n[i]&&!t.attributes.getExplicit(i)&&m.default.setAttribute(t,i,n[i])}}catch(t){e={error:t}}finally{try{s&&!s.done&&(a=r.return)&&a.call(r)}finally{if(e)throw e.error}}},e.prototype.ParseTextArg=function(t,a){return new e(this.GetArgument(t),a=Object.assign(Object.assign({},this.stack.env),a),this.configuration).mml()},e.prototype.ParseArg=function(t){return new e(this.GetArgument(t),this.stack.env,this.configuration).mml()},e.prototype.Error=function(t,e){for(var a=[],n=2;n<arguments.length;n++)a[n-2]=arguments[n];throw new(u.default.bind.apply(u.default,i([void 0,t,e],a)))},e}(c.default);e.TextParser=f},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StartItem=MathJax._.input.tex.base.BaseItems.StartItem,e.StopItem=MathJax._.input.tex.base.BaseItems.StopItem,e.OpenItem=MathJax._.input.tex.base.BaseItems.OpenItem,e.CloseItem=MathJax._.input.tex.base.BaseItems.CloseItem,e.PrimeItem=MathJax._.input.tex.base.BaseItems.PrimeItem,e.SubsupItem=MathJax._.input.tex.base.BaseItems.SubsupItem,e.OverItem=MathJax._.input.tex.base.BaseItems.OverItem,e.LeftItem=MathJax._.input.tex.base.BaseItems.LeftItem,e.RightItem=MathJax._.input.tex.base.BaseItems.RightItem,e.BeginItem=MathJax._.input.tex.base.BaseItems.BeginItem,e.EndItem=MathJax._.input.tex.base.BaseItems.EndItem,e.StyleItem=MathJax._.input.tex.base.BaseItems.StyleItem,e.PositionItem=MathJax._.input.tex.base.BaseItems.PositionItem,e.CellItem=MathJax._.input.tex.base.BaseItems.CellItem,e.MmlItem=MathJax._.input.tex.base.BaseItems.MmlItem,e.FnItem=MathJax._.input.tex.base.BaseItems.FnItem,e.NotItem=MathJax._.input.tex.base.BaseItems.NotItem,e.DotsItem=MathJax._.input.tex.base.BaseItems.DotsItem,e.ArrayItem=MathJax._.input.tex.base.BaseItems.ArrayItem,e.EqnArrayItem=MathJax._.input.tex.base.BaseItems.EqnArrayItem,e.EquationItem=MathJax._.input.tex.base.BaseItems.EquationItem},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexParser.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.textBase=void 0;var r=a(6),o=a(7),s=a(8),i=a(2),c=a(1),u=a(0);function l(t,e,a,n){var r=t.configuration.packageData.get(\"textmacros\");return t instanceof c.TextParser||(r.texParser=t),[new c.TextParser(e,n?{mathvariant:n}:{},r.parseOptions,a).mml()]}a(15),e.textBase=r.Configuration.local({handler:{character:[\"command\",\"text-special\"],macro:[\"text-macros\"]},fallback:{character:function(t,e){t.text+=e},macro:function(t,e){var a=t.texParser,n=a.lookup(\"macro\",e);n&&n._func!==u.TextMacrosMethods.Macro&&t.Error(\"MathMacro\",\"%1 is only supported in math mode\",\"\\\\\"+e),a.parse(\"macro\",[n?t:a,e])}},items:(n={},n[i.StartItem.prototype.kind]=i.StartItem,n[i.StopItem.prototype.kind]=i.StopItem,n[i.MmlItem.prototype.kind]=i.MmlItem,n[i.StyleItem.prototype.kind]=i.StyleItem,n)}),r.Configuration.create(\"textmacros\",{config:function(t,a){var n=new r.ParserConfiguration([]);n.append(e.textBase),n.init();var i=new o.default(n,[]);i.options=a.parseOptions.options,n.config(a),s.TagsFactory.addTags(n.tags),i.tags=s.TagsFactory.getDefault(),i.tags.configuration=i,i.packageData=a.parseOptions.packageData,i.packageData.set(\"textmacros\",{parseOptions:i,jax:a,texParser:null}),i.options.internalMath=l},preprocessors:[function(t){var e=t.data.packageData.get(\"textmacros\");e.parseOptions.nodeFactory.setMmlFactory(e.jax.mmlFactory)}]})},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.ParseOptions.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Label=MathJax._.input.tex.Tags.Label,e.TagInfo=MathJax._.input.tex.Tags.TagInfo,e.AbstractTags=MathJax._.input.tex.Tags.AbstractTags,e.NoTags=MathJax._.input.tex.Tags.NoTags,e.AllTags=MathJax._.input.tex.Tags.AllTags,e.TagsFactory=MathJax._.input.tex.Tags.TagsFactory},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.ParseUtil.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,e.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,e.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,e.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,e.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,e.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,e.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,e.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,e.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,e.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.handleRetriesFor=MathJax._.util.Retries.handleRetriesFor,e.retryAfter=MathJax._.util.Retries.retryAfter},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.base.BaseMethods.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=a(16),r=a(17),o=a(0);new n.MacroMap(\"text-special\",{$:\"Math\",\"%\":\"Comment\",\"^\":\"MathModeOnly\",_:\"MathModeOnly\",\"&\":\"Misplaced\",\"#\":\"Misplaced\",\"~\":\"Tilde\",\" \":\"Space\",\"\\t\":\"Space\",\"\\r\":\"Space\",\"\\n\":\"Space\",\"\\xa0\":\"Tilde\",\"{\":\"OpenBrace\",\"}\":\"CloseBrace\",\"`\":\"OpenQuote\",\"'\":\"CloseQuote\"},o.TextMacrosMethods),new n.CommandMap(\"text-macros\",{\"(\":\"Math\",$:\"SelfQuote\",_:\"SelfQuote\",\"%\":\"SelfQuote\",\"{\":\"SelfQuote\",\"}\":\"SelfQuote\",\" \":\"SelfQuote\",\"&\":\"SelfQuote\",\"#\":\"SelfQuote\",\"\\\\\":\"SelfQuote\",\"'\":[\"Accent\",\"\\xb4\"],\"\\u2019\":[\"Accent\",\"\\xb4\"],\"`\":[\"Accent\",\"`\"],\"\\u2018\":[\"Accent\",\"`\"],\"^\":[\"Accent\",\"^\"],'\"':[\"Accent\",\"\\xa8\"],\"~\":[\"Accent\",\"~\"],\"=\":[\"Accent\",\"\\xaf\"],\".\":[\"Accent\",\"\\u02d9\"],u:[\"Accent\",\"\\u02d8\"],v:[\"Accent\",\"\\u02c7\"],emph:\"Emph\",rm:[\"SetFont\",r.TexConstant.Variant.NORMAL],mit:[\"SetFont\",r.TexConstant.Variant.ITALIC],oldstyle:[\"SetFont\",r.TexConstant.Variant.OLDSTYLE],cal:[\"SetFont\",r.TexConstant.Variant.CALLIGRAPHIC],it:[\"SetFont\",\"-tex-mathit\"],bf:[\"SetFont\",r.TexConstant.Variant.BOLD],bbFont:[\"SetFont\",r.TexConstant.Variant.DOUBLESTRUCK],scr:[\"SetFont\",r.TexConstant.Variant.SCRIPT],frak:[\"SetFont\",r.TexConstant.Variant.FRAKTUR],sf:[\"SetFont\",r.TexConstant.Variant.SANSSERIF],tt:[\"SetFont\",r.TexConstant.Variant.MONOSPACE],tiny:[\"SetSize\",.5],Tiny:[\"SetSize\",.6],scriptsize:[\"SetSize\",.7],small:[\"SetSize\",.85],normalsize:[\"SetSize\",1],large:[\"SetSize\",1.2],Large:[\"SetSize\",1.44],LARGE:[\"SetSize\",1.73],huge:[\"SetSize\",2.07],Huge:[\"SetSize\",2.49],mathcal:\"MathModeOnly\",mathscr:\"MathModeOnly\",mathrm:\"MathModeOnly\",mathbf:\"MathModeOnly\",mathbb:\"MathModeOnly\",mathit:\"MathModeOnly\",mathfrak:\"MathModeOnly\",mathsf:\"MathModeOnly\",mathtt:\"MathModeOnly\",Bbb:[\"Macro\",\"{\\\\bbFont #1}\",1],textrm:[\"Macro\",\"{\\\\rm #1}\",1],textit:[\"Macro\",\"{\\\\it #1}\",1],textbf:[\"Macro\",\"{\\\\bf #1}\",1],textsf:[\"Macro\",\"{\\\\sf #1}\",1],texttt:[\"Macro\",\"{\\\\tt #1}\",1],dagger:[\"Insert\",\"\\u2020\"],ddagger:[\"Insert\",\"\\u2021\"],S:[\"Insert\",\"\\xa7\"],\",\":[\"Spacer\",r.TexConstant.Length.THINMATHSPACE],\":\":[\"Spacer\",r.TexConstant.Length.MEDIUMMATHSPACE],\">\":[\"Spacer\",r.TexConstant.Length.MEDIUMMATHSPACE],\";\":[\"Spacer\",r.TexConstant.Length.THICKMATHSPACE],\"!\":[\"Spacer\",r.TexConstant.Length.NEGATIVETHINMATHSPACE],enspace:[\"Spacer\",\".5em\"],quad:[\"Spacer\",\"1em\"],qquad:[\"Spacer\",\"2em\"],thinspace:[\"Spacer\",r.TexConstant.Length.THINMATHSPACE],negthinspace:[\"Spacer\",r.TexConstant.Length.NEGATIVETHINMATHSPACE],hskip:\"Hskip\",hspace:\"Hskip\",kern:\"Hskip\",mskip:\"Hskip\",mspace:\"Hskip\",mkern:\"Hskip\",rule:\"rule\",Rule:[\"Rule\"],Space:[\"Rule\",\"blank\"],color:\"CheckAutoload\",textcolor:\"CheckAutoload\",colorbox:\"CheckAutoload\",fcolorbox:\"CheckAutoload\",href:\"CheckAutoload\",style:\"CheckAutoload\",class:\"CheckAutoload\",cssId:\"CheckAutoload\",unicode:\"CheckAutoload\",ref:[\"HandleRef\",!1],eqref:[\"HandleRef\",!0]},o.TextMacrosMethods)},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},function(t,e,a){\"use strict\";a.r(e);var n=a(4),r=a(5),o=a(0),s=a(1);Object(n.combineWithMathJax)({_:{input:{tex:{textmacros:{TextMacrosConfiguration:r,TextMacrosMethods:o,TextParser:s}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/unicode.js",
    "content": "!function(t){var e={};function a(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,a),o.l=!0,o.exports}a.m=t,a.c=e,a.d=function(t,e,n){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},a.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)a.d(n,o,function(e){return t[e]}.bind(null,o));return n},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a(a.s=8)}([function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UnicodeConfiguration=e.UnicodeMethods=void 0;var n=a(2),o=a(3),i=a(4),r=a(5),u=a(6),c=a(7);e.UnicodeMethods={};var l={};e.UnicodeMethods.Unicode=function(t,e){var a=t.GetBrackets(e),n=null,i=null;a&&(a.replace(/ /g,\"\").match(/^(\\d+(\\.\\d*)?|\\.\\d+),(\\d+(\\.\\d*)?|\\.\\d+)$/)?(n=a.replace(/ /g,\"\").split(/,/),i=t.GetBrackets(e)):i=a);var d=r.default.trimSpaces(t.GetArgument(e)).replace(/^0x/,\"x\");if(!d.match(/^(x[0-9A-Fa-f]+|[0-9]+)$/))throw new o.default(\"BadUnicode\",\"Argument to \\\\unicode must be a number\");var p=parseInt(d.match(/^x/)?\"0\"+d:d);l[p]?i||(i=l[p][2]):l[p]=[800,200,i,p],n&&(l[p][0]=Math.floor(1e3*parseFloat(n[0])),l[p][1]=Math.floor(1e3*parseFloat(n[1])));var s=t.stack.env.font,f={};i?(l[p][2]=f.fontfamily=i.replace(/'/g,\"'\"),s&&(s.match(/bold/)&&(f.fontweight=\"bold\"),s.match(/italic|-mathit/)&&(f.fontstyle=\"italic\"))):s&&(f.mathvariant=s);var M=t.create(\"token\",\"mtext\",f,c.numeric(d));u.default.setProperty(M,\"unicode\",!0),t.Push(M)},new i.CommandMap(\"unicode\",{unicode:\"Unicode\"},e.UnicodeMethods),e.UnicodeConfiguration=n.Configuration.create(\"unicode\",{handler:{macro:[\"unicode\"]}})},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.ParseUtil.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.NodeUtil.default},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.options=MathJax._.util.Entities.options,e.entities=MathJax._.util.Entities.entities,e.add=MathJax._.util.Entities.add,e.remove=MathJax._.util.Entities.remove,e.translate=MathJax._.util.Entities.translate,e.numeric=MathJax._.util.Entities.numeric},function(t,e,a){\"use strict\";a.r(e);var n=a(0),o=a(1);Object(n.combineWithMathJax)({_:{input:{tex:{unicode:{UnicodeConfiguration:o}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex/extensions/verb.js",
    "content": "!function(t){var e={};function n(a){if(e[a])return e[a].exports;var r=e[a]={i:a,l:!1,exports:{}};return t[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,a){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var r in t)n.d(a,r,function(e){return t[e]}.bind(null,r));return a},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=6)}([function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.VerbConfiguration=e.VerbMethods=void 0;var a=n(2),r=n(3),o=n(4),i=n(5);e.VerbMethods={},e.VerbMethods.Verb=function(t,e){var n=t.GetNext(),a=++t.i;if(\"\"===n)throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",e);for(;t.i<t.string.length&&t.string.charAt(t.i)!==n;)t.i++;if(t.i===t.string.length)throw new i.default(\"NoClosingDelim\",\"Can't find closing delimiter for %1\",t.currentCS);var o=t.string.slice(a,t.i).replace(/ /g,\"\\xa0\");t.i++,t.Push(t.create(\"token\",\"mtext\",{mathvariant:r.TexConstant.Variant.MONOSPACE},o))},new o.CommandMap(\"verb\",{verb:\"Verb\"},e.VerbMethods),e.VerbConfiguration=a.Configuration.create(\"verb\",{handler:{macro:[\"verb\"]}})},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Configuration=MathJax._.input.tex.Configuration.Configuration,e.ConfigurationHandler=MathJax._.input.tex.Configuration.ConfigurationHandler,e.ParserConfiguration=MathJax._.input.tex.Configuration.ParserConfiguration},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TexConstant=MathJax._.input.tex.TexConstants.TexConstant},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractSymbolMap=MathJax._.input.tex.SymbolMap.AbstractSymbolMap,e.RegExpMap=MathJax._.input.tex.SymbolMap.RegExpMap,e.AbstractParseMap=MathJax._.input.tex.SymbolMap.AbstractParseMap,e.CharacterMap=MathJax._.input.tex.SymbolMap.CharacterMap,e.DelimiterMap=MathJax._.input.tex.SymbolMap.DelimiterMap,e.MacroMap=MathJax._.input.tex.SymbolMap.MacroMap,e.CommandMap=MathJax._.input.tex.SymbolMap.CommandMap,e.EnvironmentMap=MathJax._.input.tex.SymbolMap.EnvironmentMap},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=MathJax._.input.tex.TexError.default},function(t,e,n){\"use strict\";n.r(e);var a=n(0),r=n(1);Object(a.combineWithMathJax)({_:{input:{tex:{verb:{VerbConfiguration:r}}}}})}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex-base.js",
    "content": "!function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,\"a\",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p=\"\",r(r.s=38)}([function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var a,s=r(2),l=r(33);!function(t){var e=new Map([[\"autoOP\",!0],[\"fnOP\",!0],[\"movesupsub\",!0],[\"subsupOK\",!0],[\"texprimestyle\",!0],[\"useHeight\",!0],[\"variantForm\",!0],[\"withDelims\",!0],[\"open\",!0],[\"close\",!0]]);function r(t,r){var i,o;try{for(var a=n(Object.keys(r)),s=a.next();!s.done;s=a.next()){var l=s.value,u=r[l];\"texClass\"===l?(t.texClass=u,t.setProperty(l,u)):\"movablelimits\"===l?(t.setProperty(\"movablelimits\",u),(t.isKind(\"mo\")||t.isKind(\"mstyle\"))&&t.attributes.set(\"movablelimits\",u)):\"inferred\"===l||(e.has(l)?t.setProperty(l,u):t.attributes.set(l,u))}}catch(t){i={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}}function i(t,e,r){t.childNodes[e]=r,r&&(r.parent=t)}function a(t,e){return t.isKind(e)}t.createEntity=function(t){return String.fromCodePoint(parseInt(t,16))},t.getChildren=function(t){return t.childNodes},t.getText=function(t){return t.getText()},t.appendChildren=function(t,e){var r,i;try{for(var o=n(e),a=o.next();!a.done;a=o.next()){var s=a.value;t.appendChild(s)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(r)throw r.error}}},t.setAttribute=function(t,e,r){t.attributes.set(e,r)},t.setProperty=function(t,e,r){t.setProperty(e,r)},t.setProperties=r,t.getProperty=function(t,e){return t.getProperty(e)},t.getAttribute=function(t,e){return t.attributes.get(e)},t.removeProperties=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];t.removeProperty.apply(t,o(e))},t.getChildAt=function(t,e){return t.childNodes[e]},t.setChild=i,t.copyChildren=function(t,e){for(var r=t.childNodes,n=0;n<r.length;n++)i(e,n,r[n])},t.copyAttributes=function(t,e){e.attributes=t.attributes,r(e,t.getAllProperties())},t.isType=a,t.isEmbellished=function(t){return t.isEmbellished},t.getTexClass=function(t){return t.texClass},t.getCoreMO=function(t){return t.coreMO()},t.isNode=function(t){return t instanceof s.AbstractMmlNode||t instanceof s.AbstractMmlEmptyNode},t.isInferred=function(t){return t.isInferred},t.getForm=function(t){var e,r;if(!a(t,\"mo\"))return null;var i=t,o=i.getForms();try{for(var s=n(o),u=s.next();!u.done;u=s.next()){var c=u.value,p=l.MmlMo.OPTABLE[c][i.getText()];if(p)return p}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return null}}(a||(a={})),e.default=a},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(e,r){for(var n=[],i=2;i<arguments.length;i++)n[i-2]=arguments[i];this.id=e,this.message=t.processString(r,n)}return t.processString=function(e,r){for(var n=e.split(t.pattern),i=1,o=n.length;i<o;i+=2){var a=n[i].charAt(0);if(a>=\"0\"&&a<=\"9\")n[i]=r[parseInt(n[i],10)-1],\"number\"==typeof n[i]&&(n[i]=n[i].toString());else if(\"{\"===a){if((a=n[i].substr(1))>=\"0\"&&a<=\"9\")n[i]=r[parseInt(n[i].substr(1,n[i].length-2),10)-1],\"number\"==typeof n[i]&&(n[i]=n[i].toString());else n[i].match(/^\\{([a-z]+):%(\\d+)\\|(.*)\\}$/)&&(n[i]=\"%\"+n[i])}null==n[i]&&(n[i]=\"???\")}return n.join(\"\")},t.pattern=/%(\\d+|\\{\\d+\\}|\\{[a-z]+:\\%\\d+(?:\\|(?:%\\{\\d+\\}|%.|[^\\}])*)+\\}|.)/g,t}();e.default=n},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,e.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,e.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,e.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,e.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,e.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,e.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,e.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,e.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,e.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.options=MathJax._.util.Entities.options,e.entities=MathJax._.util.Entities.entities,e.add=MathJax._.util.Entities.add,e.remove=MathJax._.util.Entities.remove,e.translate=MathJax._.util.Entities.translate,e.numeric=MathJax._.util.Entities.numeric},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(5),s=r(17),l=r(1),u=r(2),c=function(){function t(t,e,r){var i,o;this._string=t,this.configuration=r,this.macroCount=0,this.i=0,this.currentCS=\"\";var a,l=e.hasOwnProperty(\"isInner\"),u=e.isInner;if(delete e.isInner,e){a={};try{for(var c=n(Object.keys(e)),p=c.next();!p.done;p=c.next()){var f=p.value;a[f]=e[f]}}catch(t){i={error:t}}finally{try{p&&!p.done&&(o=c.return)&&o.call(c)}finally{if(i)throw i.error}}}this.configuration.pushParser(this),this.stack=new s.default(this.itemFactory,a,!l||u),this.Parse(),this.Push(this.itemFactory.create(\"stop\"))}return Object.defineProperty(t.prototype,\"options\",{get:function(){return this.configuration.options},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"itemFactory\",{get:function(){return this.configuration.itemFactory},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"tags\",{get:function(){return this.configuration.tags},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"string\",{get:function(){return this._string},set:function(t){this._string=t},enumerable:!1,configurable:!0}),t.prototype.parse=function(t,e){return this.configuration.handlers.get(t).parse(e)},t.prototype.lookup=function(t,e){return this.configuration.handlers.get(t).lookup(e)},t.prototype.contains=function(t,e){return this.configuration.handlers.get(t).contains(e)},t.prototype.toString=function(){var t,e,r=\"\";try{for(var i=n(Array.from(this.configuration.handlers.keys())),o=i.next();!o.done;o=i.next()){var a=o.value;r+=a+\": \"+this.configuration.handlers.get(a)+\"\\n\"}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}return r},t.prototype.Parse=function(){for(var t;this.i<this.string.length;)t=this.getCodePoint(),this.i+=t.length,this.parse(\"character\",[this,t])},t.prototype.Push=function(t){t instanceof u.AbstractMmlNode&&t.isInferred?this.PushAll(t.childNodes):this.stack.Push(t)},t.prototype.PushAll=function(t){var e,r;try{for(var i=n(t),o=i.next();!o.done;o=i.next()){var a=o.value;this.stack.Push(a)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},t.prototype.mml=function(){if(!this.stack.Top().isKind(\"mml\"))return null;var t=this.stack.Top().First;return this.configuration.popParser(),t},t.prototype.convertDelimiter=function(t){var e=this.lookup(\"delimiter\",t);return e?e.char:null},t.prototype.getCodePoint=function(){var t=this.string.codePointAt(this.i);return void 0===t?\"\":String.fromCodePoint(t)},t.prototype.nextIsSpace=function(){return!!this.string.charAt(this.i).match(/\\s/)},t.prototype.GetNext=function(){for(;this.nextIsSpace();)this.i++;return this.getCodePoint()},t.prototype.GetCS=function(){var t=this.string.slice(this.i).match(/^(([a-z]+) ?|[\\uD800-\\uDBFF].|.)/i);return t?(this.i+=t[0].length,t[2]||t[1]):(this.i++,\" \")},t.prototype.GetArgument=function(t,e){switch(this.GetNext()){case\"\":if(!e)throw new l.default(\"MissingArgFor\",\"Missing argument for %1\",this.currentCS);return null;case\"}\":if(!e)throw new l.default(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\");return null;case\"\\\\\":return this.i++,\"\\\\\"+this.GetCS();case\"{\":for(var r=++this.i,n=1;this.i<this.string.length;)switch(this.string.charAt(this.i++)){case\"\\\\\":this.i++;break;case\"{\":n++;break;case\"}\":if(0==--n)return this.string.slice(r,this.i-1)}throw new l.default(\"MissingCloseBrace\",\"Missing close brace\")}var i=this.getCodePoint();return this.i+=i.length,i},t.prototype.GetBrackets=function(t,e){if(\"[\"!==this.GetNext())return e;for(var r=++this.i,n=0;this.i<this.string.length;)switch(this.string.charAt(this.i++)){case\"{\":n++;break;case\"\\\\\":this.i++;break;case\"}\":if(n--<=0)throw new l.default(\"ExtraCloseLooking\",\"Extra close brace while looking for %1\",\"']'\");break;case\"]\":if(0===n)return this.string.slice(r,this.i-1)}throw new l.default(\"MissingCloseBracket\",\"Could not find closing ']' for argument to %1\",this.currentCS)},t.prototype.GetDelimiter=function(t,e){var r=this.GetNext();if(this.i+=r.length,this.i<=this.string.length&&(\"\\\\\"===r?r+=this.GetCS():\"{\"===r&&e&&(this.i--,r=this.GetArgument(t)),this.contains(\"delimiter\",r)))return this.convertDelimiter(r);throw new l.default(\"MissingOrUnrecognizedDelim\",\"Missing or unrecognized delimiter for %1\",this.currentCS)},t.prototype.GetDimen=function(t){if(\"{\"===this.GetNext()){var e=this.GetArgument(t),r=i(a.default.matchDimen(e),2),n=r[0],o=r[1];if(n)return n+o}else{e=this.string.slice(this.i);var s=i(a.default.matchDimen(e,!0),3),u=(n=s[0],o=s[1],s[2]);if(n)return this.i+=u,n+o}throw new l.default(\"MissingDimOrUnits\",\"Missing dimension or its units for %1\",this.currentCS)},t.prototype.GetUpTo=function(t,e){for(;this.nextIsSpace();)this.i++;for(var r=this.i,n=0;this.i<this.string.length;){var i=this.i,o=this.GetNext();switch(this.i+=o.length,o){case\"\\\\\":o+=this.GetCS();break;case\"{\":n++;break;case\"}\":if(0===n)throw new l.default(\"ExtraCloseLooking\",\"Extra close brace while looking for %1\",e);n--}if(0===n&&o===e)return this.string.slice(r,i)}throw new l.default(\"TokenNotFoundForCommand\",\"Could not find %1 for %2\",e,this.currentCS)},t.prototype.ParseArg=function(e){return new t(this.GetArgument(e),this.stack.env,this.configuration).mml()},t.prototype.ParseUpTo=function(e,r){return new t(this.GetUpTo(e,r),this.stack.env,this.configuration).mml()},t.prototype.GetDelimiterArg=function(t){var e=a.default.trimSpaces(this.GetArgument(t));if(\"\"===e)return null;if(this.contains(\"delimiter\",e))return e;throw new l.default(\"MissingOrUnrecognizedDelim\",\"Missing or unrecognized delimiter for %1\",this.currentCS)},t.prototype.GetStar=function(){var t=\"*\"===this.GetNext();return t&&this.i++,t},t.prototype.create=function(t){for(var e,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return(e=this.configuration.nodeFactory).create.apply(e,o([t],r))},t}();e.default=c},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(2),s=r(0),l=r(4),u=r(1),c=r(3);r(25),function(t){var e={em:function(t){return t},ex:function(t){return.43*t},pt:function(t){return t/10},pc:function(t){return 1.2*t},px:function(t){return 7.2*t/72},in:function(t){return 7.2*t},cm:function(t){return 7.2*t/2.54},mm:function(t){return 7.2*t/25.4},mu:function(t){return t/18}},r=\"([-+]?([.,]\\\\d+|\\\\d+([.,]\\\\d*)?))\",o=\"(pt|em|ex|mu|px|mm|cm|in|pc)\",p=RegExp(\"^\\\\s*\"+r+\"\\\\s*\"+o+\"\\\\s*$\"),f=RegExp(\"^\\\\s*\"+r+\"\\\\s*\"+o+\" ?\");function h(t,r){void 0===r&&(r=!1);var i=t.match(r?f:p);return i?function(t){var r=n(t,3),i=r[0],o=r[1],a=r[2];if(\"mu\"!==o)return[i,o,a];return[d(e[o](parseFloat(i||\"1\"))).slice(0,-2),\"em\",a]}([i[1].replace(/,/,\".\"),i[4],i[0].length]):[null,null,0]}function d(t){return Math.abs(t)<6e-4?\"0em\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"em\"}function m(t,e,r){\"{\"!==e&&\"}\"!==e||(e=\"\\\\\"+e);var n=\"{\\\\bigg\"+r+\" \"+e+\"}\",i=\"{\\\\big\"+r+\" \"+e+\"}\";return new l.default(\"\\\\mathchoice\"+n+i+i+i,{},t).mml()}function g(t,e,r){e=e.replace(/^\\s+/,c.entities.nbsp).replace(/\\s+$/,c.entities.nbsp);var n=t.create(\"text\",e);return t.create(\"node\",\"mtext\",[],r,n)}function y(t,e,r){if(r.match(/^[a-z]/i)&&e.match(/(^|[^\\\\])(\\\\\\\\)*\\\\[a-z]+$/i)&&(e+=\" \"),e.length+r.length>t.configuration.options.maxBuffer)throw new u.default(\"MaxBufferSize\",\"MathJax internal buffer size exceeded; is there a recursive macro call?\");return e+r}function v(t,e){for(;e>0;)t=t.trim().slice(1,-1),e--;return t.trim()}function b(t,e){for(var r=t.length,n=0,i=\"\",o=0,a=0,s=!0,l=!1;o<r;){var c=t[o++];switch(c){case\" \":break;case\"{\":s?a++:(l=!1,a>n&&(a=n)),n++;break;case\"}\":n&&n--,(s||l)&&(a--,l=!0),s=!1;break;default:if(!n&&-1!==e.indexOf(c))return[l?\"true\":v(i,a),c,t.slice(o)];s=!1,l=!1}i+=c}if(n)throw new u.default(\"ExtraOpenMissingClose\",\"Extra open brace or missing close brace\");return[l?\"true\":v(i,a),\"\",t.slice(o)]}t.matchDimen=h,t.dimen2em=function(t){var r=n(h(t),2),i=r[0],o=r[1],a=parseFloat(i||\"1\"),s=e[o];return s?s(a):0},t.Em=d,t.fenced=function(t,e,r,n,i){void 0===i&&(i=\"\");var o,u=t.nodeFactory,c=u.create(\"node\",\"mrow\",[],{open:e,close:n,texClass:a.TEXCLASS.INNER});if(i)o=new l.default(\"\\\\\"+i+\"l\"+e,t.parser.stack.env,t).mml();else{var p=u.create(\"text\",e);o=u.create(\"node\",\"mo\",[],{fence:!0,stretchy:!0,symmetric:!0,texClass:a.TEXCLASS.OPEN},p)}if(s.default.appendChildren(c,[o]),s.default.isType(r,\"mrow\")&&s.default.isInferred(r)?s.default.appendChildren(c,s.default.getChildren(r)):s.default.appendChildren(c,[r]),i)o=new l.default(\"\\\\\"+i+\"r\"+n,t.parser.stack.env,t).mml();else{var f=u.create(\"text\",n);o=u.create(\"node\",\"mo\",[],{fence:!0,stretchy:!0,symmetric:!0,texClass:a.TEXCLASS.CLOSE},f)}return s.default.appendChildren(c,[o]),c},t.fixedFence=function(t,e,r,n){var i=t.nodeFactory.create(\"node\",\"mrow\",[],{open:e,close:n,texClass:a.TEXCLASS.ORD});return e&&s.default.appendChildren(i,[m(t,e,\"l\")]),s.default.isType(r,\"mrow\")?s.default.appendChildren(i,s.default.getChildren(r)):s.default.appendChildren(i,[r]),n&&s.default.appendChildren(i,[m(t,n,\"r\")]),i},t.mathPalette=m,t.fixInitialMO=function(t,e){for(var r=0,n=e.length;r<n;r++){var i=e[r];if(i&&!s.default.isType(i,\"mspace\")&&(!s.default.isType(i,\"TeXAtom\")||s.default.getChildren(i)[0]&&s.default.getChildren(s.default.getChildren(i)[0]).length)){if(s.default.isEmbellished(i)||s.default.isType(i,\"TeXAtom\")&&s.default.getTexClass(i)===a.TEXCLASS.REL){var o=t.nodeFactory.create(\"node\",\"mi\");e.unshift(o)}break}}},t.internalMath=function(t,e,r,n){if(t.configuration.options.internalMath)return t.configuration.options.internalMath(t,e,r,n);var i,o,a=n||t.stack.env.font,s=a?{mathvariant:a}:{},c=[],p=0,f=0,h=\"\",d=0;if(e.match(/\\\\?[${}\\\\]|\\\\\\(|\\\\(eq)?ref\\s*\\{/)){for(;p<e.length;)if(\"$\"===(i=e.charAt(p++)))\"$\"===h&&0===d?(o=t.create(\"node\",\"TeXAtom\",[new l.default(e.slice(f,p-1),{},t.configuration).mml()]),c.push(o),h=\"\",f=p):\"\"===h&&(f<p-1&&c.push(g(t,e.slice(f,p-1),s)),h=\"$\",f=p);else if(\"{\"===i&&\"\"!==h)d++;else if(\"}\"===i)if(\"}\"===h&&0===d){var m=new l.default(e.slice(f,p),{},t.configuration).mml();o=t.create(\"node\",\"TeXAtom\",[m],s),c.push(o),h=\"\",f=p}else\"\"!==h&&d&&d--;else if(\"\\\\\"===i)if(\"\"===h&&e.substr(p).match(/^(eq)?ref\\s*\\{/)){var y=RegExp[\"$&\"].length;f<p-1&&c.push(g(t,e.slice(f,p-1),s)),h=\"}\",f=p-1,p+=y}else\"(\"===(i=e.charAt(p++))&&\"\"===h?(f<p-2&&c.push(g(t,e.slice(f,p-2),s)),h=\")\",f=p):\")\"===i&&\")\"===h&&0===d?(o=t.create(\"node\",\"TeXAtom\",[new l.default(e.slice(f,p-2),{},t.configuration).mml()]),c.push(o),h=\"\",f=p):i.match(/[${}\\\\]/)&&\"\"===h&&(p--,e=e.substr(0,p-1)+e.substr(p));if(\"\"!==h)throw new u.default(\"MathNotTerminated\",\"Math not terminated in text box\")}return f<e.length&&c.push(g(t,e.slice(f),s)),null!=r?c=[t.create(\"node\",\"mstyle\",c,{displaystyle:!1,scriptlevel:r})]:c.length>1&&(c=[t.create(\"node\",\"mrow\",c)]),c},t.internalText=g,t.trimSpaces=function(t){if(\"string\"!=typeof t)return t;var e=t.trim();return e.match(/\\\\$/)&&t.match(/ $/)&&(e+=\" \"),e},t.setArrayAlign=function(e,r){return\"t\"===(r=t.trimSpaces(r||\"\"))?e.arraydef.align=\"baseline 1\":\"b\"===r?e.arraydef.align=\"baseline -1\":\"c\"===r?e.arraydef.align=\"center\":r&&(e.arraydef.align=r),e},t.substituteArgs=function(t,e,r){for(var n=\"\",i=\"\",o=0;o<r.length;){var a=r.charAt(o++);if(\"\\\\\"===a)n+=a+r.charAt(o++);else if(\"#\"===a)if(\"#\"===(a=r.charAt(o++)))n+=a;else{if(!a.match(/[1-9]/)||parseInt(a,10)>e.length)throw new u.default(\"IllegalMacroParam\",\"Illegal macro parameter reference\");i=y(t,y(t,i,n),e[parseInt(a,10)-1]),n=\"\"}else n+=a}return y(t,i,n)},t.addArgs=y,t.checkEqnEnv=function(t){if(t.stack.global.eqnenv)throw new u.default(\"ErroneousNestingEq\",\"Erroneous nesting of equation structures\");t.stack.global.eqnenv=!0},t.MmlFilterAttribute=function(t,e,r){return r},t.getFontDef=function(t){var e=t.stack.env.font;return e?{mathvariant:e}:{}},t.keyvalOptions=function(t,e,r){var o,a;void 0===e&&(e=null),void 0===r&&(r=!1);var s=function(t){var e,r,i,o,a,s={},l=t;for(;l;)o=(e=n(b(l,[\"=\",\",\"]),3))[0],i=e[1],l=e[2],\"=\"===i?(a=(r=n(b(l,[\",\"]),3))[0],i=r[1],l=r[2],a=\"false\"===a||\"true\"===a?JSON.parse(a):a,s[o]=a):o&&(s[o]=!0);return s}(t);if(e)try{for(var l=i(Object.keys(s)),c=l.next();!c.done;c=l.next()){var p=c.value;if(!e.hasOwnProperty(p)){if(r)throw new u.default(\"InvalidOption\",\"Invalid optional argument: %1\",p);delete s[p]}}}catch(t){o={error:t}}finally{try{c&&!c.done&&(a=l.return)&&a.call(l)}finally{if(o)throw o.error}}return s}}(o||(o={})),e.default=o},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TagsFactory=e.AllTags=e.NoTags=e.AbstractTags=e.TagInfo=e.Label=void 0;var a=r(4),s=function(t,e){void 0===t&&(t=\"???\"),void 0===e&&(e=\"\"),this.tag=t,this.id=e};e.Label=s;var l=function(t,e,r,n,i,o,a,s){void 0===t&&(t=\"\"),void 0===e&&(e=!1),void 0===r&&(r=!1),void 0===n&&(n=null),void 0===i&&(i=\"\"),void 0===o&&(o=\"\"),void 0===a&&(a=!1),void 0===s&&(s=\"\"),this.env=t,this.taggable=e,this.defaultTags=r,this.tag=n,this.tagId=i,this.tagFormat=o,this.noTag=a,this.labelId=s};e.TagInfo=l;var u=function(){function t(){this.counter=0,this.allCounter=0,this.configuration=null,this.ids={},this.allIds={},this.labels={},this.allLabels={},this.redo=!1,this.refUpdate=!1,this.currentTag=new l,this.history=[],this.stack=[],this.enTag=function(t,e){var r=this.configuration.nodeFactory,n=r.create(\"node\",\"mtd\",[t]),i=r.create(\"node\",\"mlabeledtr\",[e,n]);return r.create(\"node\",\"mtable\",[i],{side:this.configuration.options.tagSide,minlabelspacing:this.configuration.options.tagIndent,displaystyle:!0})}}return t.prototype.start=function(t,e,r){this.currentTag&&this.stack.push(this.currentTag),this.currentTag=new l(t,e,r)},Object.defineProperty(t.prototype,\"env\",{get:function(){return this.currentTag.env},enumerable:!1,configurable:!0}),t.prototype.end=function(){this.history.push(this.currentTag),this.currentTag=this.stack.pop()},t.prototype.tag=function(t,e){this.currentTag.tag=t,this.currentTag.tagFormat=e?t:this.formatTag(t),this.currentTag.noTag=!1},t.prototype.notag=function(){this.tag(\"\",!0),this.currentTag.noTag=!0},Object.defineProperty(t.prototype,\"noTag\",{get:function(){return this.currentTag.noTag},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"label\",{get:function(){return this.currentTag.labelId},set:function(t){this.currentTag.labelId=t},enumerable:!1,configurable:!0}),t.prototype.formatUrl=function(t,e){return e+\"#\"+encodeURIComponent(t)},t.prototype.formatTag=function(t){return\"(\"+t+\")\"},t.prototype.formatId=function(t){return\"mjx-eqn-\"+t.replace(/\\s/g,\"_\")},t.prototype.formatNumber=function(t){return t.toString()},t.prototype.autoTag=function(){null==this.currentTag.tag&&(this.counter++,this.tag(this.formatNumber(this.counter),!1))},t.prototype.clearTag=function(){this.label=\"\",this.tag(null,!0),this.currentTag.tagId=\"\"},t.prototype.getTag=function(t){if(void 0===t&&(t=!1),t)return this.autoTag(),this.makeTag();var e=this.currentTag;return e.taggable&&!e.noTag&&(e.defaultTags&&this.autoTag(),e.tag)?this.makeTag():null},t.prototype.resetTag=function(){this.history=[],this.redo=!1,this.refUpdate=!1,this.clearTag()},t.prototype.reset=function(t){void 0===t&&(t=0),this.resetTag(),this.counter=this.allCounter=t,this.allLabels={},this.allIds={}},t.prototype.startEquation=function(t){this.labels={},this.ids={},this.counter=this.allCounter,this.redo=!1;var e=t.inputData.recompile;e&&(this.refUpdate=!0,this.counter=e.counter)},t.prototype.finishEquation=function(t){this.redo&&(t.inputData.recompile={state:t.state(),counter:this.allCounter}),this.refUpdate||(this.allCounter=this.counter),Object.assign(this.allIds,this.ids),Object.assign(this.allLabels,this.labels)},t.prototype.finalize=function(t,e){if(!e.display||this.currentTag.env||null==this.currentTag.tag)return t;var r=this.makeTag();return this.enTag(t,r)},t.prototype.makeId=function(){this.currentTag.tagId=this.formatId(this.configuration.options.useLabelIds&&this.label||this.currentTag.tag)},t.prototype.makeTag=function(){this.makeId(),this.label&&(this.labels[this.label]=new s(this.currentTag.tag,this.currentTag.tagId));var t=new a.default(\"\\\\text{\"+this.currentTag.tagFormat+\"}\",{},this.configuration).mml();return this.configuration.nodeFactory.create(\"node\",\"mtd\",[t],{id:this.currentTag.tagId})},t}();e.AbstractTags=u;var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e.prototype.autoTag=function(){},e.prototype.getTag=function(){return this.currentTag.tag?t.prototype.getTag.call(this):null},e}(u);e.NoTags=c;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e.prototype.finalize=function(t,e){if(!e.display||this.history.find((function(t){return t.taggable})))return t;var r=this.getTag(!0);return this.enTag(t,r)},e}(u);e.AllTags=p,function(t){var e=new Map([[\"none\",c],[\"all\",p]]),r=\"none\";t.OPTIONS={tags:r,tagSide:\"right\",tagIndent:\"0.8em\",multlineWidth:\"85%\",useLabelIds:!0,ignoreDuplicateLabels:!1},t.add=function(t,r){e.set(t,r)},t.addTags=function(e){var r,n;try{for(var i=o(Object.keys(e)),a=i.next();!a.done;a=i.next()){var s=a.value;t.add(s,e[s])}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},t.create=function(t){var n=e.get(t)||e.get(r);if(!n)throw Error(\"Unknown tags class\");return new n},t.setDefault=function(t){r=t},t.getDefault=function(){return t.create(r)}}(e.TagsFactory||(e.TagsFactory={}))},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SubHandlers=e.SubHandler=e.MapHandler=void 0;var o,a=r(26),s=r(27);!function(t){var e=new Map;t.register=function(t){e.set(t.name,t)},t.getMap=function(t){return e.get(t)}}(o=e.MapHandler||(e.MapHandler={}));var l=function(){function t(){this._configuration=new a.PrioritizedList,this._fallback=new s.FunctionList}return t.prototype.add=function(t,e,r){var i,s;void 0===r&&(r=a.PrioritizedList.DEFAULTPRIORITY);try{for(var l=n(t.slice().reverse()),u=l.next();!u.done;u=l.next()){var c=u.value,p=o.getMap(c);if(!p)return void this.warn(\"Configuration \"+c+\" not found! Omitted.\");this._configuration.add(p,r)}}catch(t){i={error:t}}finally{try{u&&!u.done&&(s=l.return)&&s.call(l)}finally{if(i)throw i.error}}e&&this._fallback.add(e,r)},t.prototype.parse=function(t){var e,r;try{for(var o=n(this._configuration),a=o.next();!a.done;a=o.next()){var s=a.value.item.parse(t);if(s)return s}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}var l=i(t,2),u=l[0],c=l[1];this._fallback.toArray()[0].item(u,c)},t.prototype.lookup=function(t){var e=this.applicable(t);return e?e.lookup(t):null},t.prototype.contains=function(t){return!!this.applicable(t)},t.prototype.toString=function(){var t,e,r=[];try{for(var i=n(this._configuration),o=i.next();!o.done;o=i.next()){var a=o.value.item;r.push(a.name)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}return r.join(\", \")},t.prototype.applicable=function(t){var e,r;try{for(var i=n(this._configuration),o=i.next();!o.done;o=i.next()){var a=o.value.item;if(a.contains(t))return a}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return null},t.prototype.retrieve=function(t){var e,r;try{for(var i=n(this._configuration),o=i.next();!o.done;o=i.next()){var a=o.value.item;if(a.name===t)return a}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return null},t.prototype.warn=function(t){console.log(\"TexParser Warning: \"+t)},t}();e.SubHandler=l;var u=function(){function t(){this.map=new Map}return t.prototype.add=function(t,e,r){var i,o;void 0===r&&(r=a.PrioritizedList.DEFAULTPRIORITY);try{for(var s=n(Object.keys(t)),u=s.next();!u.done;u=s.next()){var c=u.value,p=this.get(c);p||(p=new l,this.set(c,p)),p.add(t[c],e[c],r)}}catch(t){i={error:t}}finally{try{u&&!u.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}},t.prototype.set=function(t,e){this.map.set(t,e)},t.prototype.get=function(t){return this.map.get(t)},t.prototype.retrieve=function(t){var e,r;try{for(var i=n(this.map.values()),o=i.next();!o.done;o=i.next()){var a=o.value.retrieve(t);if(a)return a}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return null},t.prototype.keys=function(){return this.map.keys()},t}();e.SubHandlers=u},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TexConstant=void 0,function(t){t.Variant={NORMAL:\"normal\",BOLD:\"bold\",ITALIC:\"italic\",BOLDITALIC:\"bold-italic\",DOUBLESTRUCK:\"double-struck\",FRAKTUR:\"fraktur\",BOLDFRAKTUR:\"bold-fraktur\",SCRIPT:\"script\",BOLDSCRIPT:\"bold-script\",SANSSERIF:\"sans-serif\",BOLDSANSSERIF:\"bold-sans-serif\",SANSSERIFITALIC:\"sans-serif-italic\",SANSSERIFBOLDITALIC:\"sans-serif-bold-italic\",MONOSPACE:\"monospace\",INITIAL:\"inital\",TAILED:\"tailed\",LOOPED:\"looped\",STRETCHED:\"stretched\",CALLIGRAPHIC:\"-tex-calligraphic\",OLDSTYLE:\"-tex-oldstyle\"},t.Form={PREFIX:\"prefix\",INFIX:\"infix\",POSTFIX:\"postfix\"},t.LineBreak={AUTO:\"auto\",NEWLINE:\"newline\",NOBREAK:\"nobreak\",GOODBREAK:\"goodbreak\",BADBREAK:\"badbreak\"},t.LineBreakStyle={BEFORE:\"before\",AFTER:\"after\",DUPLICATE:\"duplicate\",INFIXLINBREAKSTYLE:\"infixlinebreakstyle\"},t.IndentAlign={LEFT:\"left\",CENTER:\"center\",RIGHT:\"right\",AUTO:\"auto\",ID:\"id\",INDENTALIGN:\"indentalign\"},t.IndentShift={INDENTSHIFT:\"indentshift\"},t.LineThickness={THIN:\"thin\",MEDIUM:\"medium\",THICK:\"thick\"},t.Notation={LONGDIV:\"longdiv\",ACTUARIAL:\"actuarial\",PHASORANGLE:\"phasorangle\",RADICAL:\"radical\",BOX:\"box\",ROUNDEDBOX:\"roundedbox\",CIRCLE:\"circle\",LEFT:\"left\",RIGHT:\"right\",TOP:\"top\",BOTTOM:\"bottom\",UPDIAGONALSTRIKE:\"updiagonalstrike\",DOWNDIAGONALSTRIKE:\"downdiagonalstrike\",VERTICALSTRIKE:\"verticalstrike\",HORIZONTALSTRIKE:\"horizontalstrike\",NORTHEASTARROW:\"northeastarrow\",MADRUWB:\"madruwb\",UPDIAGONALARROW:\"updiagonalarrow\"},t.Align={TOP:\"top\",BOTTOM:\"bottom\",CENTER:\"center\",BASELINE:\"baseline\",AXIS:\"axis\",LEFT:\"left\",RIGHT:\"right\"},t.Lines={NONE:\"none\",SOLID:\"solid\",DASHED:\"dashed\"},t.Side={LEFT:\"left\",RIGHT:\"right\",LEFTOVERLAP:\"leftoverlap\",RIGHTOVERLAP:\"rightoverlap\"},t.Width={AUTO:\"auto\",FIT:\"fit\"},t.Actiontype={TOGGLE:\"toggle\",STATUSLINE:\"statusline\",TOOLTIP:\"tooltip\",INPUT:\"input\"},t.Length={VERYVERYTHINMATHSPACE:\"veryverythinmathspace\",VERYTHINMATHSPACE:\"verythinmathspace\",THINMATHSPACE:\"thinmathspace\",MEDIUMMATHSPACE:\"mediummathspace\",THICKMATHSPACE:\"thickmathspace\",VERYTHICKMATHSPACE:\"verythickmathspace\",VERYVERYTHICKMATHSPACE:\"veryverythickmathspace\",NEGATIVEVERYVERYTHINMATHSPACE:\"negativeveryverythinmathspace\",NEGATIVEVERYTHINMATHSPACE:\"negativeverythinmathspace\",NEGATIVETHINMATHSPACE:\"negativethinmathspace\",NEGATIVEMEDIUMMATHSPACE:\"negativemediummathspace\",NEGATIVETHICKMATHSPACE:\"negativethickmathspace\",NEGATIVEVERYTHICKMATHSPACE:\"negativeverythickmathspace\",NEGATIVEVERYVERYTHICKMATHSPACE:\"negativeveryverythickmathspace\"},t.Overflow={LINBREAK:\"linebreak\",SCROLL:\"scroll\",ELIDE:\"elide\",TRUNCATE:\"truncate\",SCALE:\"scale\"},t.Unit={EM:\"em\",EX:\"ex\",PX:\"px\",IN:\"in\",CM:\"cm\",MM:\"mm\",PT:\"pt\",PC:\"pc\"}}(e.TexConstant||(e.TexConstant={}))},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.BaseItem=e.MmlStack=void 0;var l=r(1),u=function(){function t(t){this._nodes=t}return Object.defineProperty(t.prototype,\"nodes\",{get:function(){return this._nodes},enumerable:!1,configurable:!0}),t.prototype.Push=function(){for(var t,e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];(t=this._nodes).push.apply(t,a(e))},t.prototype.Pop=function(){return this._nodes.pop()},Object.defineProperty(t.prototype,\"First\",{get:function(){return this._nodes[this.Size()-1]},set:function(t){this._nodes[this.Size()-1]=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"Last\",{get:function(){return this._nodes[0]},set:function(t){this._nodes[0]=t},enumerable:!1,configurable:!0}),t.prototype.Peek=function(t){return null==t&&(t=1),this._nodes.slice(this.Size()-t)},t.prototype.Size=function(){return this._nodes.length},t.prototype.Clear=function(){this._nodes=[]},t.prototype.toMml=function(t,e){return void 0===t&&(t=!0),1!==this._nodes.length||e?this.create(\"node\",t?\"inferredMrow\":\"mrow\",this._nodes,{}):this.First},t.prototype.create=function(t){for(var e,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return(e=this.factory.configuration.nodeFactory).create.apply(e,a([t],r))},t}();e.MmlStack=u;var c=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var i=t.call(this,r)||this;return i.factory=e,i.global={},i._properties={},i.isOpen&&(i._env={}),i}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"base\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"env\",{get:function(){return this._env},set:function(t){this._env=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"copyEnv\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.getProperty=function(t){return this._properties[t]},e.prototype.setProperty=function(t,e){return this._properties[t]=e,this},Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isFinal\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.isKind=function(t){return t===this.kind},e.prototype.checkItem=function(t){if(t.isKind(\"over\")&&this.isOpen&&(t.setProperty(\"num\",this.toMml(!1)),this.Clear()),t.isKind(\"cell\")&&this.isOpen){if(t.getProperty(\"linebreak\"))return e.fail;throw new l.default(\"Misplaced\",\"Misplaced %1\",t.getName())}if(t.isClose&&this.getErrors(t.kind)){var r=o(this.getErrors(t.kind),2),n=r[0],i=r[1];throw new l.default(n,i,t.getName())}return t.isFinal?(this.Push(t.First),e.fail):e.success},e.prototype.clearEnv=function(){var t,e;try{for(var r=s(Object.keys(this.env)),n=r.next();!n.done;n=r.next()){var i=n.value;delete this.env[i]}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.setProperties=function(t){return Object.assign(this._properties,t),this},e.prototype.getName=function(){return this.getProperty(\"name\")},e.prototype.toString=function(){return this.kind+\"[\"+this.nodes.join(\"; \")+\"]\"},e.prototype.getErrors=function(t){return(this.constructor.errors||{})[t]||e.errors[t]},e.fail=[null,!1],e.success=[null,!0],e.errors={end:[\"MissingBeginExtraEnd\",\"Missing \\\\begin{%1} or extra \\\\end{%1}\"],close:[\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"],right:[\"MissingLeftExtraRight\",\"Missing \\\\left or extra \\\\right\"]},e}(u);e.BaseItem=c},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ParserConfiguration=e.ConfigurationHandler=e.Configuration=void 0;var o,a=r(8),s=r(7),l=r(27),u=r(26),c=r(6),p=function(){function t(t,e,r,n,i,o,a,s,l,u,c,p){void 0===e&&(e={}),void 0===r&&(r={}),void 0===n&&(n={}),void 0===i&&(i={}),void 0===o&&(o={}),void 0===a&&(a={}),void 0===s&&(s=[]),void 0===l&&(l=[]),void 0===u&&(u=null),void 0===c&&(c=null),this.name=t,this.handler=e,this.fallback=r,this.items=n,this.tags=i,this.options=o,this.nodes=a,this.preprocessors=s,this.postprocessors=l,this.initMethod=u,this.configMethod=c,this.priority=p,this.handler=Object.assign({character:[],delimiter:[],macro:[],environment:[]},e)}return t.makeProcessor=function(t,e){return Array.isArray(t)?t:[t,e]},t._create=function(e,r){var n=this;void 0===r&&(r={});var i=r.priority||u.PrioritizedList.DEFAULTPRIORITY,o=r.init?this.makeProcessor(r.init,i):null,a=r.config?this.makeProcessor(r.config,i):null,s=(r.preprocessors||[]).map((function(t){return n.makeProcessor(t,i)})),l=(r.postprocessors||[]).map((function(t){return n.makeProcessor(t,i)}));return new t(e,r.handler||{},r.fallback||{},r.items||{},r.tags||{},r.options||{},r.nodes||{},s,l,o,a,i)},t.create=function(e,r){void 0===r&&(r={});var n=t._create(e,r);return o.set(e,n),n},t.local=function(e){return void 0===e&&(e={}),t._create(\"\",e)},Object.defineProperty(t.prototype,\"init\",{get:function(){return this.initMethod?this.initMethod[0]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"config\",{get:function(){return this.configMethod?this.configMethod[0]:null},enumerable:!1,configurable:!0}),t}();e.Configuration=p,function(t){var e=new Map;t.set=function(t,r){e.set(t,r)},t.get=function(t){return e.get(t)},t.keys=function(){return e.keys()}}(o=e.ConfigurationHandler||(e.ConfigurationHandler={}));var f=function(){function t(t){var e,r,i,o;this.initMethod=new l.FunctionList,this.configMethod=new l.FunctionList,this.configurations=new u.PrioritizedList,this.handlers=new s.SubHandlers,this.items={},this.tags={},this.options={},this.nodes={};try{for(var a=n(t.slice().reverse()),c=a.next();!c.done;c=a.next()){var p=c.value;this.addPackage(p)}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}try{for(var f=n(this.configurations),h=f.next();!h.done;h=f.next()){var d=h.value,m=d.item,g=d.priority;this.append(m,g)}}catch(t){i={error:t}}finally{try{h&&!h.done&&(o=f.return)&&o.call(f)}finally{if(i)throw i.error}}}return t.prototype.init=function(){this.initMethod.execute(this)},t.prototype.config=function(t){var e,r;this.configMethod.execute(this,t);try{for(var i=n(this.configurations),o=i.next();!o.done;o=i.next()){var a=o.value;this.addFilters(t,a.item)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},t.prototype.addPackage=function(t){var e=\"string\"==typeof t?t:t[0],r=o.get(e);r&&this.configurations.add(r,\"string\"==typeof t?r.priority:t[1])},t.prototype.add=function(t,e,r){var i,o;void 0===r&&(r={}),this.append(t),this.configurations.add(t,t.priority),this.init();var s=e.parseOptions;s.nodeFactory.setCreators(t.nodes);try{for(var l=n(Object.keys(t.items)),u=l.next();!u.done;u=l.next()){var p=u.value;s.itemFactory.setNodeClass(p,t.items[p])}}catch(t){i={error:t}}finally{try{u&&!u.done&&(o=l.return)&&o.call(l)}finally{if(i)throw i.error}}c.TagsFactory.addTags(t.tags),a.defaultOptions(s.options,t.options),a.userOptions(s.options,r),this.addFilters(e,t),t.config&&t.config(this,e)},t.prototype.append=function(t,e){e=e||t.priority,t.initMethod&&this.initMethod.add(t.initMethod[0],t.initMethod[1]),t.configMethod&&this.configMethod.add(t.configMethod[0],t.configMethod[1]),this.handlers.add(t.handler,t.fallback,e),Object.assign(this.items,t.items),Object.assign(this.tags,t.tags),a.defaultOptions(this.options,t.options),Object.assign(this.nodes,t.nodes)},t.prototype.addFilters=function(t,e){var r,o,a,s;try{for(var l=n(e.preprocessors),u=l.next();!u.done;u=l.next()){var c=i(u.value,2),p=c[0],f=c[1];t.preFilters.add(p,f)}}catch(t){r={error:t}}finally{try{u&&!u.done&&(o=l.return)&&o.call(l)}finally{if(r)throw r.error}}try{for(var h=n(e.postprocessors),d=h.next();!d.done;d=h.next()){var m=i(d.value,2),g=m[0];f=m[1];t.postFilters.add(g,f)}}catch(t){a={error:t}}finally{try{d&&!d.done&&(s=h.return)&&s.call(h)}finally{if(a)throw a.error}}},t}();e.ParserConfiguration=f},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.EnvironmentMap=e.CommandMap=e.MacroMap=e.DelimiterMap=e.CharacterMap=e.AbstractParseMap=e.RegExpMap=e.AbstractSymbolMap=void 0;var l=r(22),u=r(7),c=function(){function t(t,e){this._name=t,this._parser=e,u.MapHandler.register(this)}return Object.defineProperty(t.prototype,\"name\",{get:function(){return this._name},enumerable:!1,configurable:!0}),t.prototype.parserFor=function(t){return this.contains(t)?this.parser:null},t.prototype.parse=function(t){var e=o(t,2),r=e[0],n=e[1],i=this.parserFor(n),a=this.lookup(n);return i&&a?i(r,a)||!0:null},Object.defineProperty(t.prototype,\"parser\",{get:function(){return this._parser},set:function(t){this._parser=t},enumerable:!1,configurable:!0}),t}();e.AbstractSymbolMap=c;var p=function(t){function e(e,r,n){var i=t.call(this,e,r)||this;return i._regExp=n,i}return i(e,t),e.prototype.contains=function(t){return this._regExp.test(t)},e.prototype.lookup=function(t){return this.contains(t)?t:null},e}(c);e.RegExpMap=p;var f=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.map=new Map,e}return i(e,t),e.prototype.lookup=function(t){return this.map.get(t)},e.prototype.contains=function(t){return this.map.has(t)},e.prototype.add=function(t,e){this.map.set(t,e)},e.prototype.remove=function(t){this.map.delete(t)},e}(c);e.AbstractParseMap=f;var h=function(t){function e(e,r,n){var i,s,u=t.call(this,e,r)||this;try{for(var c=a(Object.keys(n)),p=c.next();!p.done;p=c.next()){var f=p.value,h=n[f],d=o(\"string\"==typeof h?[h,null]:h,2),m=d[0],g=d[1],y=new l.Symbol(f,m,g);u.add(f,y)}}catch(t){i={error:t}}finally{try{p&&!p.done&&(s=c.return)&&s.call(c)}finally{if(i)throw i.error}}return u}return i(e,t),e}(f);e.CharacterMap=h;var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e.prototype.parse=function(e){var r=o(e,2),n=r[0],i=r[1];return t.prototype.parse.call(this,[n,\"\\\\\"+i])},e}(h);e.DelimiterMap=d;var m=function(t){function e(e,r,n){var i,s,u=t.call(this,e,null)||this;try{for(var c=a(Object.keys(r)),p=c.next();!p.done;p=c.next()){var f=p.value,h=r[f],d=o(\"string\"==typeof h?[h]:h),m=d[0],g=d.slice(1),y=new l.Macro(f,n[m],g);u.add(f,y)}}catch(t){i={error:t}}finally{try{p&&!p.done&&(s=c.return)&&s.call(c)}finally{if(i)throw i.error}}return u}return i(e,t),e.prototype.parserFor=function(t){var e=this.lookup(t);return e?e.func:null},e.prototype.parse=function(t){var e=o(t,2),r=e[0],n=e[1],i=this.lookup(n),a=this.parserFor(n);return i&&a?a.apply(void 0,s([r,i.symbol],i.args))||!0:null},e}(f);e.MacroMap=m;var g=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e.prototype.parse=function(t){var e=o(t,2),r=e[0],n=e[1],i=this.lookup(n),a=this.parserFor(n);if(!i||!a)return null;if(!a)return null;var l=r.currentCS;r.currentCS=\"\\\\\"+n;var u=a.apply(void 0,s([r,\"\\\\\"+i.symbol],i.args));return r.currentCS=l,u||!0},e}(m);e.CommandMap=g;var y=function(t){function e(e,r,n,i){var o=t.call(this,e,n,i)||this;return o.parser=r,o}return i(e,t),e.prototype.parse=function(t){var e=o(t,2),r=e[0],n=e[1],i=this.lookup(n),a=this.parserFor(n);return i&&a?(this.parser(r,i.symbol,a,i.args),!0):null},e}(m);e.EnvironmentMap=y},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.EquationItem=e.EqnArrayItem=e.ArrayItem=e.DotsItem=e.NotItem=e.FnItem=e.MmlItem=e.CellItem=e.PositionItem=e.StyleItem=e.EndItem=e.BeginItem=e.RightItem=e.LeftItem=e.OverItem=e.SubsupItem=e.PrimeItem=e.CloseItem=e.OpenItem=e.StopItem=e.StartItem=void 0;var s=r(7),l=r(3),u=r(2),c=r(1),p=r(5),f=r(0),h=r(10),d=function(t){function e(e,r){var n=t.call(this,e)||this;return n.global=r,n}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"start\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"stop\")){var r=this.toMml();return this.global.isInner||(r=this.factory.configuration.tags.finalize(r,this.env)),[[this.factory.create(\"mml\",r)],!0]}return t.prototype.checkItem.call(this,e)},e}(h.BaseItem);e.StartItem=d;var m=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"stop\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(h.BaseItem);e.StopItem=m;var g=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"open\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"close\")){var r=this.toMml(),n=this.create(\"node\",\"TeXAtom\",[r]);return[[this.factory.create(\"mml\",n)],!0]}return t.prototype.checkItem.call(this,e)},e.errors=Object.assign(Object.create(h.BaseItem.errors),{stop:[\"ExtraOpenMissingClose\",\"Extra open brace or missing close brace\"]}),e}(h.BaseItem);e.OpenItem=g;var y=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"close\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(h.BaseItem);e.CloseItem=y;var v=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"prime\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){var e=o(this.Peek(2),2),r=e[0],n=e[1];return!f.default.isType(r,\"msubsup\")||f.default.isType(r,\"msup\")?[[this.create(\"node\",\"msup\",[r,n]),t],!0]:(f.default.setChild(r,r.sup,n),[[r,t],!0])},e}(h.BaseItem);e.PrimeItem=v;var b=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"subsup\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"open\")||e.isKind(\"left\"))return h.BaseItem.success;var r=this.First,n=this.getProperty(\"position\");if(e.isKind(\"mml\")){if(this.getProperty(\"primes\"))if(2!==n)f.default.setChild(r,2,this.getProperty(\"primes\"));else{f.default.setProperty(this.getProperty(\"primes\"),\"variantForm\",!0);var i=this.create(\"node\",\"mrow\",[this.getProperty(\"primes\"),e.First]);e.First=i}return f.default.setChild(r,n,e.First),null!=this.getProperty(\"movesupsub\")&&f.default.setProperty(r,\"movesupsub\",this.getProperty(\"movesupsub\")),[[this.factory.create(\"mml\",r)],!0]}if(t.prototype.checkItem.call(this,e)[1]){var o=this.getErrors([\"\",\"sub\",\"sup\"][n]);throw new(c.default.bind.apply(c.default,a([void 0,o[0],o[1]],o.splice(2))))}return null},e.errors=Object.assign(Object.create(h.BaseItem.errors),{stop:[\"MissingScript\",\"Missing superscript or subscript argument\"],sup:[\"MissingOpenForSup\",\"Missing open brace for superscript\"],sub:[\"MissingOpenForSub\",\"Missing open brace for subscript\"]}),e}(h.BaseItem);e.SubsupItem=b;var T=function(t){function e(e){var r=t.call(this,e)||this;return r.setProperty(\"name\",\"\\\\over\"),r}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"over\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"over\"))throw new c.default(\"AmbiguousUseOf\",\"Ambiguous use of %1\",e.getName());if(e.isClose){var r=this.create(\"node\",\"mfrac\",[this.getProperty(\"num\"),this.toMml(!1)]);return null!=this.getProperty(\"thickness\")&&f.default.setAttribute(r,\"linethickness\",this.getProperty(\"thickness\")),(this.getProperty(\"open\")||this.getProperty(\"close\"))&&(f.default.setProperty(r,\"withDelims\",!0),r=p.default.fixedFence(this.factory.configuration,this.getProperty(\"open\"),r,this.getProperty(\"close\"))),[[this.factory.create(\"mml\",r),e],!0]}return t.prototype.checkItem.call(this,e)},e.prototype.toString=function(){return\"over[\"+this.getProperty(\"num\")+\" / \"+this.nodes.join(\"; \")+\"]\"},e}(h.BaseItem);e.OverItem=T;var P=function(t){function e(e){var r=t.call(this,e)||this;return r.setProperty(\"delim\",\"(\"),r}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"left\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){return e.isKind(\"right\")?[[this.factory.create(\"mml\",p.default.fenced(this.factory.configuration,this.getProperty(\"delim\"),this.toMml(),e.getProperty(\"delim\")))],!0]:t.prototype.checkItem.call(this,e)},e.errors=Object.assign(Object.create(h.BaseItem.errors),{stop:[\"ExtraLeftMissingRight\",\"Extra \\\\left or missing \\\\right\"]}),e}(h.BaseItem);e.LeftItem=P;var S=function(t){function e(e){var r=t.call(this,e)||this;return r.setProperty(\"delim\",\")\"),r}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"right\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(h.BaseItem);e.RightItem=S;var x=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"begin\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){if(e.getName()!==this.getName())throw new c.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),e.getName());return this.getProperty(\"end\")?h.BaseItem.fail:[[this.factory.create(\"mml\",this.toMml())],!0]}if(e.isKind(\"stop\"))throw new c.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(h.BaseItem);e.BeginItem=x;var A=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"end\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(h.BaseItem);e.EndItem=A;var M=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"style\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(!e.isClose)return t.prototype.checkItem.call(this,e);var r=this.create(\"node\",\"mstyle\",this.nodes,this.getProperty(\"styles\"));return[[this.factory.create(\"mml\",r),e],!0]},e}(h.BaseItem);e.StyleItem=M;var O=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"position\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isClose)throw new c.default(\"MissingBoxFor\",\"Missing box for %1\",this.getName());if(e.isFinal){var r=e.toMml();switch(this.getProperty(\"move\")){case\"vertical\":return r=this.create(\"node\",\"mpadded\",[r],{height:this.getProperty(\"dh\"),depth:this.getProperty(\"dd\"),voffset:this.getProperty(\"dh\")}),[[this.factory.create(\"mml\",r)],!0];case\"horizontal\":return[[this.factory.create(\"mml\",this.getProperty(\"left\")),e,this.factory.create(\"mml\",this.getProperty(\"right\"))],!0]}}return t.prototype.checkItem.call(this,e)},e}(h.BaseItem);e.PositionItem=O;var C=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"cell\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(h.BaseItem);e.CellItem=C;var E=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"isFinal\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mml\"},enumerable:!1,configurable:!0}),e}(h.BaseItem);e.MmlItem=E;var w=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"fn\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){var r=this.First;if(r){if(e.isOpen)return h.BaseItem.success;if(!e.isKind(\"fn\")){var n=e.First;if(!e.isKind(\"mml\")||!n)return[[r,e],!0];if(f.default.isType(n,\"mstyle\")&&n.childNodes.length&&f.default.isType(n.childNodes[0].childNodes[0],\"mspace\")||f.default.isType(n,\"mspace\"))return[[r,e],!0];f.default.isEmbellished(n)&&(n=f.default.getCoreMO(n));var i=f.default.getForm(n);if(null!=i&&[0,0,1,1,0,1,1,0,0,0][i[2]])return[[r,e],!0]}var o=this.create(\"token\",\"mo\",{texClass:u.TEXCLASS.NONE},l.entities.ApplyFunction);return[[r,o,e],!0]}return t.prototype.checkItem.apply(this,arguments)},e}(h.BaseItem);e.FnItem=w;var k=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.remap=s.MapHandler.getMap(\"not_remap\"),e}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"not\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){var e,r,n;if(t.isKind(\"open\")||t.isKind(\"left\"))return h.BaseItem.success;if(t.isKind(\"mml\")&&(f.default.isType(t.First,\"mo\")||f.default.isType(t.First,\"mi\")||f.default.isType(t.First,\"mtext\"))&&(e=t.First,1===(r=f.default.getText(e)).length&&!f.default.getProperty(e,\"movesupsub\")&&1===f.default.getChildren(e).length))return this.remap.contains(r)?(n=this.create(\"text\",this.remap.lookup(r).char),f.default.setChild(e,0,n)):(n=this.create(\"text\",\"\\u0338\"),f.default.appendChildren(e,[n])),[[t],!0];n=this.create(\"text\",\"\\u29f8\");var i=this.create(\"node\",\"mtext\",[],{},n),o=this.create(\"node\",\"mpadded\",[i],{width:0});return[[e=this.create(\"node\",\"TeXAtom\",[o],{texClass:u.TEXCLASS.REL}),t],!0]},e}(h.BaseItem);e.NotItem=k;var I=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"dots\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){if(t.isKind(\"open\")||t.isKind(\"left\"))return h.BaseItem.success;var e=this.getProperty(\"ldots\"),r=t.First;if(t.isKind(\"mml\")&&f.default.isEmbellished(r)){var n=f.default.getTexClass(f.default.getCoreMO(r));n!==u.TEXCLASS.BIN&&n!==u.TEXCLASS.REL||(e=this.getProperty(\"cdots\"))}return[[e,t],!0]},e}(h.BaseItem);e.DotsItem=I;var _=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.table=[],e.row=[],e.frame=[],e.hfill=[],e.arraydef={},e.dashed=!1,e}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"array\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"copyEnv\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isClose&&!e.isKind(\"over\")){if(e.getProperty(\"isEntry\"))return this.EndEntry(),this.clearEnv(),h.BaseItem.fail;if(e.getProperty(\"isCR\"))return this.EndEntry(),this.EndRow(),this.clearEnv(),h.BaseItem.fail;this.EndTable(),this.clearEnv();var r=this.arraydef.scriptlevel;delete this.arraydef.scriptlevel;var n=this.create(\"node\",\"mtable\",this.table,this.arraydef);4===this.frame.length?f.default.setAttribute(n,\"frame\",this.dashed?\"dashed\":\"solid\"):this.frame.length&&(this.arraydef.rowlines&&(this.arraydef.rowlines=this.arraydef.rowlines.replace(/none( none)+$/,\"none\")),n=this.create(\"node\",\"menclose\",[n],{notation:this.frame.join(\" \"),isFrame:!0}),\"none\"===(this.arraydef.columnlines||\"none\")&&\"none\"===(this.arraydef.rowlines||\"none\")||f.default.setAttribute(n,\"padding\",0)),r&&(n=this.create(\"node\",\"mstyle\",[n],{scriptlevel:r})),(this.getProperty(\"open\")||this.getProperty(\"close\"))&&(n=p.default.fenced(this.factory.configuration,this.getProperty(\"open\"),n,this.getProperty(\"close\")));var i=this.factory.create(\"mml\",n);if(this.getProperty(\"requireClose\")){if(e.isKind(\"close\"))return[[i],!0];throw new c.default(\"MissingCloseBrace\",\"Missing close brace\")}return[[i,e],!0]}return t.prototype.checkItem.call(this,e)},e.prototype.EndEntry=function(){var t=this.create(\"node\",\"mtd\",this.nodes);this.hfill.length&&(0===this.hfill[0]&&f.default.setAttribute(t,\"columnalign\",\"right\"),this.hfill[this.hfill.length-1]===this.Size()&&f.default.setAttribute(t,\"columnalign\",f.default.getAttribute(t,\"columnalign\")?\"center\":\"left\")),this.row.push(t),this.Clear(),this.hfill=[]},e.prototype.EndRow=function(){var t;this.getProperty(\"isNumbered\")&&3===this.row.length?(this.row.unshift(this.row.pop()),t=this.create(\"node\",\"mlabeledtr\",this.row)):t=this.create(\"node\",\"mtr\",this.row),this.table.push(t),this.row=[]},e.prototype.EndTable=function(){(this.Size()||this.row.length)&&(this.EndEntry(),this.EndRow()),this.checkLines()},e.prototype.checkLines=function(){if(this.arraydef.rowlines){var t=this.arraydef.rowlines.split(/ /);t.length===this.table.length?(this.frame.push(\"bottom\"),t.pop(),this.arraydef.rowlines=t.join(\" \")):t.length<this.table.length-1&&(this.arraydef.rowlines+=\" none\")}if(this.getProperty(\"rowspacing\")){for(var e=this.arraydef.rowspacing.split(/ /);e.length<this.table.length;)e.push(this.getProperty(\"rowspacing\")+\"em\");this.arraydef.rowspacing=e.join(\" \")}},e}(h.BaseItem);e.ArrayItem=_;var L=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var i=t.call(this,e)||this;return i.factory.configuration.tags.start(r[0],r[2],r[1]),i}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"eqnarray\"},enumerable:!1,configurable:!0}),e.prototype.EndEntry=function(){this.row.length&&p.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.create(\"node\",\"mtd\",this.nodes);this.row.push(t),this.Clear()},e.prototype.EndRow=function(){var t=\"mtr\",e=this.factory.configuration.tags.getTag();e&&(this.row=[e].concat(this.row),t=\"mlabeledtr\"),this.factory.configuration.tags.clearTag();var r=this.create(\"node\",t,this.row);this.table.push(r),this.row=[]},e.prototype.EndTable=function(){t.prototype.EndTable.call(this),this.factory.configuration.tags.end()},e}(_);e.EqnArrayItem=L;var N=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var i=t.call(this,e)||this;return i.factory.configuration.tags.start(\"equation\",!0,r[0]),i}return i(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"equation\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){var r=this.toMml(),n=this.factory.configuration.tags.getTag();return this.factory.configuration.tags.end(),[[n?this.factory.configuration.tags.enTag(r,n):r,e],!0]}if(e.isKind(\"stop\"))throw new c.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(h.BaseItem);e.EquationItem=N},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TeX=void 0;var s=r(29),l=r(8),u=r(15),c=r(16),p=r(0),f=r(4),h=r(1),d=r(18),m=r(6),g=r(11);r(21);var y=function(t){function e(r){void 0===r&&(r={});var n=this,i=a(l.separateOptions(r,e.OPTIONS,u.FindTeX.OPTIONS),3),o=i[0],s=i[1],p=i[2];(n=t.call(this,s)||this).findTeX=n.options.FindTeX||new u.FindTeX(p);var f=n.options.packages,h=n.configuration=e.configure(f),g=n._parseOptions=new d.default(h,[n.options,m.TagsFactory.OPTIONS]);return l.userOptions(g.options,o),h.config(n),e.tags(g,h),n.postFilters.add(c.default.cleanSubSup,-6),n.postFilters.add(c.default.setInherited,-5),n.postFilters.add(c.default.moveLimits,-4),n.postFilters.add(c.default.cleanStretchy,-3),n.postFilters.add(c.default.cleanAttributes,-2),n.postFilters.add(c.default.combineRelations,-1),n}return i(e,t),e.configure=function(t){var e=new g.ParserConfiguration(t);return e.init(),e},e.tags=function(t,e){m.TagsFactory.addTags(e.tags),m.TagsFactory.setDefault(t.options.tags),t.tags=m.TagsFactory.getDefault(),t.tags.configuration=t},e.prototype.setMmlFactory=function(e){t.prototype.setMmlFactory.call(this,e),this._parseOptions.nodeFactory.setMmlFactory(e)},Object.defineProperty(e.prototype,\"parseOptions\",{get:function(){return this._parseOptions},enumerable:!1,configurable:!0}),e.prototype.compile=function(t,e){this.parseOptions.clear(),this.executeFilters(this.preFilters,t,e,this.parseOptions);var r,n=t.display;this.latex=t.math,this.parseOptions.tags.startEquation(t);try{r=new f.default(this.latex,{display:n,isInner:!1},this.parseOptions).mml()}catch(t){if(!(t instanceof h.default))throw t;this.parseOptions.error=!0,r=this.options.formatError(this,t)}return r=this.parseOptions.nodeFactory.create(\"node\",\"math\",[r]),n&&p.default.setAttribute(r,\"display\",\"block\"),this.parseOptions.tags.finishEquation(t),this.parseOptions.root=r,this.executeFilters(this.postFilters,t,e,this.parseOptions),this.mathNode=this.parseOptions.root,this.mathNode},e.prototype.findMath=function(t){return this.findTeX.findMath(t)},e.prototype.formatError=function(t){var e=t.message.replace(/\\n.*/,\"\");return this.parseOptions.nodeFactory.create(\"error\",e,t.id,this.latex)},e.NAME=\"TeX\",e.OPTIONS=o(o({},s.AbstractInputJax.OPTIONS),{FindTeX:null,packages:[\"base\"],digits:/^(?:[0-9]+(?:\\{,\\}[0-9]{3})*(?:\\.[0-9]*)?|\\.[0-9]+)/,maxBuffer:5120,formatError:function(t,e){return t.formatError(e)}}),e}(s.AbstractInputJax);e.TeX=y},function(t,e,r){\"use strict\";var n,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindTeX=void 0;var a=r(30),s=r(31),l=r(32),u=function(t){function e(e){var r=t.call(this,e)||this;return r.getPatterns(),r}return i(e,t),e.prototype.getPatterns=function(){var t=this,e=this.options,r=[],n=[],i=[];this.end={},this.env=this.sub=0;var o=1;e.inlineMath.forEach((function(e){return t.addPattern(r,e,!1)})),e.displayMath.forEach((function(e){return t.addPattern(r,e,!0)})),r.length&&n.push(r.sort(s.sortLength).join(\"|\")),e.processEnvironments&&(n.push(\"\\\\\\\\begin\\\\s*\\\\{([^}]*)\\\\}\"),this.env=o,o++),e.processEscapes&&i.push(\"\\\\\\\\([\\\\\\\\$])\"),e.processRefs&&i.push(\"(\\\\\\\\(?:eq)?ref\\\\s*\\\\{[^}]*\\\\})\"),i.length&&(n.push(\"(\"+i.join(\"|\")+\")\"),this.sub=o),this.start=new RegExp(n.join(\"|\"),\"g\"),this.hasPatterns=n.length>0},e.prototype.addPattern=function(t,e,r){var n=o(e,2),i=n[0],a=n[1];t.push(s.quotePattern(i)),this.end[i]=[a,r,this.endPattern(a)]},e.prototype.endPattern=function(t,e){return new RegExp((e||s.quotePattern(t))+\"|\\\\\\\\(?:[a-zA-Z]|.)|[{}]\",\"g\")},e.prototype.findEnd=function(t,e,r,n){for(var i,a=o(n,3),s=a[0],u=a[1],c=a[2],p=c.lastIndex=r.index+r[0].length,f=0;i=c.exec(t);){if((i[1]||i[0])===s&&0===f)return l.protoItem(r[0],t.substr(p,i.index-p),i[0],e,r.index,i.index+i[0].length,u);\"{\"===i[0]?f++:\"}\"===i[0]&&f&&f--}return null},e.prototype.findMathInString=function(t,e,r){var n,i;for(this.start.lastIndex=0;n=this.start.exec(r);){if(void 0!==n[this.env]&&this.env){var o=\"\\\\\\\\end\\\\s*(\\\\{\"+s.quotePattern(n[this.env])+\"\\\\})\";(i=this.findEnd(r,e,n,[\"{\"+n[this.env]+\"}\",!0,this.endPattern(null,o)]))&&(i.math=i.open+i.math+i.close,i.open=i.close=\"\")}else if(void 0!==n[this.sub]&&this.sub){var a=n[this.sub];o=n.index+n[this.sub].length;i=2===a.length?l.protoItem(\"\",a.substr(1),\"\",e,n.index,o):l.protoItem(\"\",a,\"\",e,n.index,o,!1)}else i=this.findEnd(r,e,n,this.end[n[0]]);i&&(t.push(i),this.start.lastIndex=i.end.n)}},e.prototype.findMath=function(t){var e=[];if(this.hasPatterns)for(var r=0,n=t.length;r<n;r++)this.findMathInString(e,r,t[r]);return e},e.OPTIONS={inlineMath:[[\"\\\\(\",\"\\\\)\"]],displayMath:[[\"$$\",\"$$\"],[\"\\\\[\",\"\\\\]\"]],processEscapes:!0,processEnvironments:!0,processRefs:!0},e}(a.AbstractFindMath);e.FindTeX=u},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var i,o=r(2),a=r(0);!function(t){t.cleanStretchy=function(t){var e,r,i=t.data;try{for(var o=n(i.getList(\"fixStretchy\")),s=o.next();!s.done;s=o.next()){var l=s.value;if(a.default.getProperty(l,\"fixStretchy\")){var u=a.default.getForm(l);u&&u[3]&&u[3].stretchy&&a.default.setAttribute(l,\"stretchy\",!1);var c=l.parent;if(!(a.default.getTexClass(l)||u&&u[2])){var p=i.nodeFactory.create(\"node\",\"TeXAtom\",[l]);c.replaceChild(p,l),p.inheritAttributesFrom(l)}a.default.removeProperties(l,\"fixStretchy\")}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},t.cleanAttributes=function(t){t.data.root.walkTree((function(t,e){var r,i,o=t.attributes;if(o)try{for(var a=n(o.getExplicitNames()),s=a.next();!s.done;s=a.next()){var l=s.value;o.attributes[l]===t.attributes.getInherited(l)&&delete o.attributes[l]}}catch(t){r={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(r)throw r.error}}}),{})},t.combineRelations=function(t){var i,s;try{for(var l=n(t.data.getList(\"mo\")),u=l.next();!u.done;u=l.next()){var c=u.value;if(!c.getProperty(\"relationsCombined\")&&c.parent&&(!c.parent||a.default.isType(c.parent,\"mrow\"))&&a.default.getTexClass(c)===o.TEXCLASS.REL){for(var p=c.parent,f=void 0,h=p.childNodes,d=h.indexOf(c)+1,m=a.default.getProperty(c,\"variantForm\");d<h.length&&(f=h[d])&&a.default.isType(f,\"mo\")&&a.default.getTexClass(f)===o.TEXCLASS.REL;){if(m!==a.default.getProperty(f,\"variantForm\")||!r(c,f)){null==c.attributes.getExplicit(\"rspace\")&&a.default.setAttribute(c,\"rspace\",\"0pt\"),null==f.attributes.getExplicit(\"lspace\")&&a.default.setAttribute(f,\"lspace\",\"0pt\");break}a.default.appendChildren(c,a.default.getChildren(f)),e([\"stretchy\",\"rspace\"],c,f),a.default.setProperties(c,f.getAllProperties()),h.splice(d,1),f.parent=null,f.setProperty(\"relationsCombined\",!0)}c.attributes.setInherited(\"form\",c.getForms()[0])}}}catch(t){i={error:t}}finally{try{u&&!u.done&&(s=l.return)&&s.call(l)}finally{if(i)throw i.error}}};var e=function(t,e,r){var n=e.attributes,i=r.attributes;t.forEach((function(t){var e=i.getExplicit(t);null!=e&&n.set(t,e)}))},r=function(t,e){var r,i,o=function(t,e){return t.getExplicitNames().filter((function(r){return r!==e&&(\"stretchy\"!==r||t.getExplicit(\"stretchy\"))}))},a=t.attributes,s=e.attributes,l=o(a,\"lspace\"),u=o(s,\"rspace\");if(l.length!==u.length)return!1;try{for(var c=n(l),p=c.next();!p.done;p=c.next()){var f=p.value;if(a.getExplicit(f)!==s.getExplicit(f))return!1}}catch(t){r={error:t}}finally{try{p&&!p.done&&(i=c.return)&&i.call(c)}finally{if(r)throw r.error}}return!0},i=function(t,e,r){var i,o;try{for(var s=n(t.getList(\"m\"+e+r)),l=s.next();!l.done;l=s.next()){var u=l.value,c=u.childNodes;if(!c[u[e]]||!c[u[r]]){var p=u.parent,f=c[u[e]]?t.nodeFactory.create(\"node\",\"m\"+e,[c[u.base],c[u[e]]]):t.nodeFactory.create(\"node\",\"m\"+r,[c[u.base],c[u[r]]]);a.default.copyAttributes(u,f),p?p.replaceChild(f,u):t.root=f}}}catch(t){i={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}};t.cleanSubSup=function(t){var e=t.data;e.error||(i(e,\"sub\",\"sup\"),i(e,\"under\",\"over\"))};var s=function(t,e,r){var i,o;try{for(var s=n(t.getList(e)),l=s.next();!l.done;l=s.next()){var u=l.value;if(!u.attributes.get(\"displaystyle\")){var c=u.childNodes[u.base],p=c.coreMO();if(c.getProperty(\"movablelimits\")&&!p.attributes.getExplicit(\"movablelimits\")){var f=t.nodeFactory.create(\"node\",r,u.childNodes);a.default.copyAttributes(u,f),u.parent?u.parent.replaceChild(f,u):t.root=f}}}}catch(t){i={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}};t.moveLimits=function(t){var e=t.data;s(e,\"munderover\",\"msubsup\"),s(e,\"munder\",\"msub\"),s(e,\"mover\",\"msup\")},t.setInherited=function(t){t.data.root.setInheritedAttributes({},t.math.display,0,!1)}}(i||(i={})),e.default=i},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(0),s=function(){function t(t,e,r){this._factory=t,this._env=e,this.global={},this.stack=[],this.global={isInner:r},this.stack=[this._factory.create(\"start\",this.global)],e&&(this.stack[0].env=e),this.env=this.stack[0].env}return Object.defineProperty(t.prototype,\"env\",{get:function(){return this._env},set:function(t){this._env=t},enumerable:!1,configurable:!0}),t.prototype.Push=function(){for(var t,e,r=[],s=0;s<arguments.length;s++)r[s]=arguments[s];try{for(var l=n(r),u=l.next();!u.done;u=l.next()){var c=u.value;if(c){var p=a.default.isNode(c)?this._factory.create(\"mml\",c):c;p.global=this.global;var f=i(this.stack.length?this.Top().checkItem(p):[null,!0],2),h=f[0],d=f[1];d&&(h?(this.Pop(),this.Push.apply(this,o(h))):(this.stack.push(p),p.env?(p.copyEnv&&Object.assign(p.env,this.env),this.env=p.env):p.env=this.env))}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}},t.prototype.Pop=function(){var t=this.stack.pop();return t.isOpen||delete t.env,this.env=this.stack.length?this.Top().env:{},t},t.prototype.Top=function(t){return void 0===t&&(t=1),this.stack.length<t?null:this.stack[this.stack.length-t]},t.prototype.Prev=function(t){var e=this.Top();return t?e.First:e.Pop()},t.prototype.toString=function(){return\"stack[\\n  \"+this.stack.join(\"\\n  \")+\"\\n]\"},t}();e.default=s},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(19),s=r(20),l=r(8),u=function(){function t(t,e){void 0===e&&(e=[]),this.options={},this.packageData=new Map,this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.handlers=t.handlers,this.nodeFactory=new s.NodeFactory,this.nodeFactory.configuration=this,this.nodeFactory.setCreators(t.nodes),this.itemFactory=new a.default(t.items),this.itemFactory.configuration=this,l.defaultOptions.apply(void 0,i([this.options],e)),l.defaultOptions(this.options,t.options)}return t.prototype.pushParser=function(t){this.parsers.unshift(t)},t.prototype.popParser=function(){this.parsers.shift()},Object.defineProperty(t.prototype,\"parser\",{get:function(){return this.parsers[0]},enumerable:!1,configurable:!0}),t.prototype.clear=function(){this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.tags.resetTag()},t.prototype.addNode=function(t,e){var r=this.nodeLists[t];r||(r=this.nodeLists[t]=[]),r.push(e)},t.prototype.getList=function(t){var e,r,n=this.nodeLists[t]||[],i=[];try{for(var a=o(n),s=a.next();!s.done;s=a.next()){var l=s.value;this.inTree(l)&&i.push(l)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return this.nodeLists[t]=i,i},t.prototype.inTree=function(t){for(;t&&t!==this.root;)t=t.parent;return!!t},t}();e.default=u},function(t,e,r){\"use strict\";var n,i,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(10),s=r(34),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(a.BaseItem),u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.defaultKind=\"dummy\",e.configuration=null,e}return o(e,t),e.DefaultStackItems=((i={})[l.prototype.kind]=l,i),e}(s.AbstractFactory);e.default=u},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.NodeFactory=void 0;var o=r(0),a=function(){function t(){this.mmlFactory=null,this.factory={node:t.createNode,token:t.createToken,text:t.createText,error:t.createError}}return t.createNode=function(t,e,r,n,i){void 0===r&&(r=[]),void 0===n&&(n={});var a=t.mmlFactory.create(e),s=a.arity;if(s===1/0||-1===s)1===r.length&&r[0].isInferred?a.setChildren(o.default.getChildren(r[0])):a.setChildren(r);else{for(var l=[],u=0,c=void 0;c=r[u];u++)if(c.isInferred){var p=t.mmlFactory.create(\"mrow\",{},o.default.getChildren(c));o.default.copyAttributes(c,p),l.push(p)}else l.push(c);a.setChildren(l)}return i&&a.appendChild(i),o.default.setProperties(a,n),a},t.createToken=function(t,e,r,n){void 0===r&&(r={}),void 0===n&&(n=\"\");var i=t.create(\"text\",n);return t.create(\"node\",e,[],r,i)},t.createText=function(t,e){return null==e?null:t.mmlFactory.create(\"text\").setText(e)},t.createError=function(t,e){var r=t.create(\"text\",e),n=t.create(\"node\",\"mtext\",[],{},r);return t.create(\"node\",\"merror\",[n],{\"data-mjx-error\":e})},t.prototype.setMmlFactory=function(t){this.mmlFactory=t},t.prototype.set=function(t,e){this.factory[t]=e},t.prototype.setCreators=function(t){for(var e in t)this.set(e,t[e])},t.prototype.create=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=this.factory[t]||this.factory.node,o=n.apply(void 0,i([this,e[0]],e.slice(1)));return\"node\"===t&&this.configuration.addNode(e[0],o),o},t.prototype.get=function(t){return this.factory[t]},t}();e.NodeFactory=a},function(t,e,r){\"use strict\";var n,i,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BaseConfiguration=e.BaseTags=e.Other=void 0;var a=r(11),s=r(7),l=r(1),u=r(0),c=r(12),p=r(13),f=r(6);function h(t,e){var r=t.stack.env.font?{mathvariant:t.stack.env.font}:{},n=s.MapHandler.getMap(\"remap\").lookup(e),i=t.create(\"token\",\"mo\",r,n?n.char:e);u.default.setProperty(i,\"fixStretchy\",!0),t.configuration.addNode(\"fixStretchy\",i),t.Push(i)}r(35),new c.CharacterMap(\"remap\",null,{\"-\":\"\\u2212\",\"*\":\"\\u2217\",\"`\":\"\\u2018\"}),e.Other=h;var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(f.AbstractTags);e.BaseTags=d,e.BaseConfiguration=a.Configuration.create(\"base\",{handler:{character:[\"command\",\"special\",\"letter\",\"digit\"],delimiter:[\"delimiter\"],macro:[\"delimiter\",\"macros\",\"mathchar0mi\",\"mathchar0mo\",\"mathchar7\"],environment:[\"environment\"]},fallback:{character:h,macro:function(t,e){throw new l.default(\"UndefinedControlSequence\",\"Undefined control sequence %1\",\"\\\\\"+e)},environment:function(t,e){throw new l.default(\"UnknownEnv\",\"Unknown environment '%1'\",e)}},items:(i={},i[p.StartItem.prototype.kind]=p.StartItem,i[p.StopItem.prototype.kind]=p.StopItem,i[p.OpenItem.prototype.kind]=p.OpenItem,i[p.CloseItem.prototype.kind]=p.CloseItem,i[p.PrimeItem.prototype.kind]=p.PrimeItem,i[p.SubsupItem.prototype.kind]=p.SubsupItem,i[p.OverItem.prototype.kind]=p.OverItem,i[p.LeftItem.prototype.kind]=p.LeftItem,i[p.RightItem.prototype.kind]=p.RightItem,i[p.BeginItem.prototype.kind]=p.BeginItem,i[p.EndItem.prototype.kind]=p.EndItem,i[p.StyleItem.prototype.kind]=p.StyleItem,i[p.PositionItem.prototype.kind]=p.PositionItem,i[p.CellItem.prototype.kind]=p.CellItem,i[p.MmlItem.prototype.kind]=p.MmlItem,i[p.FnItem.prototype.kind]=p.FnItem,i[p.NotItem.prototype.kind]=p.NotItem,i[p.DotsItem.prototype.kind]=p.DotsItem,i[p.ArrayItem.prototype.kind]=p.ArrayItem,i[p.EqnArrayItem.prototype.kind]=p.EqnArrayItem,i[p.EquationItem.prototype.kind]=p.EquationItem,i),options:{maxMacros:1e3,baseURL:\"undefined\"==typeof document||0===document.getElementsByTagName(\"base\").length?\"\":String(document.location).replace(/#.*$/,\"\")},tags:{base:d}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Macro=e.Symbol=void 0;var n=function(){function t(t,e,r){this._symbol=t,this._char=e,this._attributes=r}return Object.defineProperty(t.prototype,\"symbol\",{get:function(){return this._symbol},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"char\",{get:function(){return this._char},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"attributes\",{get:function(){return this._attributes},enumerable:!1,configurable:!0}),t}();e.Symbol=n;var i=function(){function t(t,e,r){void 0===r&&(r=[]),this._symbol=t,this._func=e,this._args=r}return Object.defineProperty(t.prototype,\"symbol\",{get:function(){return this._symbol},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"func\",{get:function(){return this._func},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"args\",{get:function(){return this._args},enumerable:!1,configurable:!0}),t}();e.Macro=i},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(13),o=r(0),a=r(1),s=r(4),l=r(9),u=r(5),c=r(2),p=r(6),f=r(3);r(25),r(36),r(37);var h={},d={fontfamily:1,fontsize:1,fontweight:1,fontstyle:1,color:1,background:1,id:1,class:1,href:1,style:1};function m(t,e){var r=t.stack.env,n=r.inRoot;r.inRoot=!0;var i=new s.default(e,r,t.configuration),o=i.mml(),a=i.stack.global;if(a.leftRoot||a.upRoot){var l={};a.leftRoot&&(l.width=a.leftRoot),a.upRoot&&(l.voffset=a.upRoot,l.height=a.upRoot),o=t.create(\"node\",\"mpadded\",[o],l)}return r.inRoot=n,o}h.Open=function(t,e){t.Push(t.itemFactory.create(\"open\"))},h.Close=function(t,e){t.Push(t.itemFactory.create(\"close\"))},h.Tilde=function(t,e){t.Push(t.create(\"token\",\"mtext\",{},f.entities.nbsp))},h.Space=function(t,e){},h.Superscript=function(t,e){var r,i,s;t.GetNext().match(/\\d/)&&(t.string=t.string.substr(0,t.i+1)+\" \"+t.string.substr(t.i+1));var l=t.stack.Top();l.isKind(\"prime\")?(s=(r=n(l.Peek(2),2))[0],i=r[1],t.stack.Pop()):(s=t.stack.Prev())||(s=t.create(\"token\",\"mi\",{},\"\"));var u=o.default.getProperty(s,\"movesupsub\"),c=o.default.isType(s,\"msubsup\")?s.sup:s.over;if(o.default.isType(s,\"msubsup\")&&!o.default.isType(s,\"msup\")&&o.default.getChildAt(s,s.sup)||o.default.isType(s,\"munderover\")&&!o.default.isType(s,\"mover\")&&o.default.getChildAt(s,s.over)&&!o.default.getProperty(s,\"subsupOK\"))throw new a.default(\"DoubleExponent\",\"Double exponent: use braces to clarify\");o.default.isType(s,\"msubsup\")&&!o.default.isType(s,\"msup\")||(u?((!o.default.isType(s,\"munderover\")||o.default.isType(s,\"mover\")||o.default.getChildAt(s,s.over))&&(s=t.create(\"node\",\"munderover\",[s],{movesupsub:!0})),c=s.over):c=(s=t.create(\"node\",\"msubsup\",[s])).sup),t.Push(t.itemFactory.create(\"subsup\",s).setProperties({position:c,primes:i,movesupsub:u}))},h.Subscript=function(t,e){var r,i,s;t.GetNext().match(/\\d/)&&(t.string=t.string.substr(0,t.i+1)+\" \"+t.string.substr(t.i+1));var l=t.stack.Top();l.isKind(\"prime\")?(s=(r=n(l.Peek(2),2))[0],i=r[1],t.stack.Pop()):(s=t.stack.Prev())||(s=t.create(\"token\",\"mi\",{},\"\"));var u=o.default.getProperty(s,\"movesupsub\"),c=o.default.isType(s,\"msubsup\")?s.sub:s.under;if(o.default.isType(s,\"msubsup\")&&!o.default.isType(s,\"msup\")&&o.default.getChildAt(s,s.sub)||o.default.isType(s,\"munderover\")&&!o.default.isType(s,\"mover\")&&o.default.getChildAt(s,s.under)&&!o.default.getProperty(s,\"subsupOK\"))throw new a.default(\"DoubleSubscripts\",\"Double subscripts: use braces to clarify\");o.default.isType(s,\"msubsup\")&&!o.default.isType(s,\"msup\")||(u?((!o.default.isType(s,\"munderover\")||o.default.isType(s,\"mover\")||o.default.getChildAt(s,s.under))&&(s=t.create(\"node\",\"munderover\",[s],{movesupsub:!0})),c=s.under):c=(s=t.create(\"node\",\"msubsup\",[s])).sub),t.Push(t.itemFactory.create(\"subsup\",s).setProperties({position:c,primes:i,movesupsub:u}))},h.Prime=function(t,e){var r=t.stack.Prev();if(r||(r=t.create(\"node\",\"mi\")),o.default.isType(r,\"msubsup\")&&!o.default.isType(r,\"msup\")&&o.default.getChildAt(r,r.sup))throw new a.default(\"DoubleExponentPrime\",\"Prime causes double exponent: use braces to clarify\");var n=\"\";t.i--;do{n+=f.entities.prime,t.i++,e=t.GetNext()}while(\"'\"===e||e===f.entities.rquote);n=[\"\",\"\\u2032\",\"\\u2033\",\"\\u2034\",\"\\u2057\"][n.length]||n;var i=t.create(\"token\",\"mo\",{},n);t.Push(t.itemFactory.create(\"prime\",r,i))},h.Comment=function(t,e){for(;t.i<t.string.length&&\"\\n\"!==t.string.charAt(t.i);)t.i++},h.Hash=function(t,e){throw new a.default(\"CantUseHash1\",\"You can't use 'macro parameter character #' in math mode\")},h.SetFont=function(t,e,r){t.stack.env.font=r},h.SetStyle=function(t,e,r,n,i){t.stack.env.style=r,t.stack.env.level=i,t.Push(t.itemFactory.create(\"style\").setProperty(\"styles\",{displaystyle:n,scriptlevel:i}))},h.SetSize=function(t,e,r){t.stack.env.size=r,t.Push(t.itemFactory.create(\"style\").setProperty(\"styles\",{mathsize:r+\"em\"}))},h.Spacer=function(t,e,r){var n=t.create(\"node\",\"mspace\",[],{width:r}),i=t.create(\"node\",\"mstyle\",[n],{scriptlevel:0});t.Push(i)},h.LeftRight=function(t,e){var r=e.substr(1);t.Push(t.itemFactory.create(r).setProperty(\"delim\",t.GetDelimiter(e)))},h.Middle=function(t,e){var r=t.GetDelimiter(e),n=t.create(\"node\",\"TeXAtom\",[],{texClass:c.TEXCLASS.CLOSE});if(t.Push(n),!t.stack.Top().isKind(\"left\"))throw new a.default(\"MisplacedMiddle\",\"%1 must be within \\\\left and \\\\right\",t.currentCS);n=t.create(\"token\",\"mo\",{stretchy:!0},r),t.Push(n),n=t.create(\"node\",\"TeXAtom\",[],{texClass:c.TEXCLASS.OPEN}),t.Push(n)},h.NamedFn=function(t,e,r){r||(r=e.substr(1));var n=t.create(\"token\",\"mi\",{texClass:c.TEXCLASS.OP},r);t.Push(t.itemFactory.create(\"fn\",n))},h.NamedOp=function(t,e,r){r||(r=e.substr(1)),r=r.replace(/&thinsp;/,\"\\u2006\");var n=t.create(\"token\",\"mo\",{movablelimits:!0,movesupsub:!0,form:l.TexConstant.Form.PREFIX,texClass:c.TEXCLASS.OP},r);t.Push(n)},h.Limits=function(t,e,r){var n=t.stack.Prev(!0);if(!n||o.default.getTexClass(o.default.getCoreMO(n))!==c.TEXCLASS.OP&&null==o.default.getProperty(n,\"movesupsub\"))throw new a.default(\"MisplacedLimits\",\"%1 is allowed only on operators\",t.currentCS);var i,s=t.stack.Top();o.default.isType(n,\"munderover\")&&!r?(i=t.create(\"node\",\"msubsup\"),o.default.copyChildren(n,i),n=s.Last=i):o.default.isType(n,\"msubsup\")&&r&&(i=t.create(\"node\",\"munderover\"),o.default.copyChildren(n,i),n=s.Last=i),o.default.setProperty(n,\"movesupsub\",!!r),o.default.setProperties(o.default.getCoreMO(n),{movablelimits:!1}),(o.default.getAttribute(n,\"movablelimits\")||o.default.getProperty(n,\"movablelimits\"))&&o.default.setProperties(n,{movablelimits:!1})},h.Over=function(t,e,r,n){var i=t.itemFactory.create(\"over\").setProperty(\"name\",t.currentCS);r||n?(i.setProperty(\"open\",r),i.setProperty(\"close\",n)):e.match(/withdelims$/)&&(i.setProperty(\"open\",t.GetDelimiter(e)),i.setProperty(\"close\",t.GetDelimiter(e))),e.match(/^\\\\above/)?i.setProperty(\"thickness\",t.GetDimen(e)):(e.match(/^\\\\atop/)||r||n)&&i.setProperty(\"thickness\",0),t.Push(i)},h.Frac=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e),i=t.create(\"node\",\"mfrac\",[r,n]);t.Push(i)},h.Sqrt=function(t,e){var r=t.GetBrackets(e),n=t.GetArgument(e);\"\\\\frac\"===n&&(n+=\"{\"+t.GetArgument(n)+\"}{\"+t.GetArgument(n)+\"}\");var i=new s.default(n,t.stack.env,t.configuration).mml();i=r?t.create(\"node\",\"mroot\",[i,m(t,r)]):t.create(\"node\",\"msqrt\",[i]),t.Push(i)},h.Root=function(t,e){var r=t.GetUpTo(e,\"\\\\of\"),n=t.ParseArg(e),i=t.create(\"node\",\"mroot\",[n,m(t,r)]);t.Push(i)},h.MoveRoot=function(t,e,r){if(!t.stack.env.inRoot)throw new a.default(\"MisplacedMoveRoot\",\"%1 can appear only within a root\",t.currentCS);if(t.stack.global[r])throw new a.default(\"MultipleMoveRoot\",\"Multiple use of %1\",t.currentCS);var n=t.GetArgument(e);if(!n.match(/-?[0-9]+/))throw new a.default(\"IntegerArg\",\"The argument to %1 must be an integer\",t.currentCS);\"-\"!==(n=parseInt(n,10)/15+\"em\").substr(0,1)&&(n=\"+\"+n),t.stack.global[r]=n},h.Accent=function(t,e,r,n){var i=t.ParseArg(e),a=u.default.getFontDef(t);a.accent=!0;var s=o.default.createEntity(r),l=t.create(\"token\",\"mo\",a,s);o.default.setAttribute(l,\"stretchy\",!!n);var c=o.default.isEmbellished(i)?o.default.getCoreMO(i):i;o.default.isType(c,\"mo\")&&o.default.setProperties(c,{movablelimits:!1});var p=t.create(\"node\",\"munderover\");o.default.setChild(p,0,i),o.default.setChild(p,1,null),o.default.setChild(p,2,l);var f=t.create(\"node\",\"TeXAtom\",[p]);t.Push(f)},h.UnderOver=function(t,e,r,n,i){var a,s=t.ParseArg(e),l=o.default.getForm(s);(l&&l[3]&&l[3].movablelimits||o.default.getProperty(s,\"movablelimits\"))&&o.default.setProperties(s,{movablelimits:!1}),o.default.isType(s,\"munderover\")&&o.default.isEmbellished(s)&&(o.default.setProperties(o.default.getCoreMO(s),{lspace:0,rspace:0}),a=t.create(\"node\",\"mo\",[],{rspace:0}),s=t.create(\"node\",\"mrow\",[a,s]));var u=t.create(\"node\",\"munderover\",[s]),p=o.default.createEntity(r);a=t.create(\"token\",\"mo\",{stretchy:!0,accent:!i},p),o.default.setChild(u,\"o\"===e.charAt(1)?u.over:u.under,a);var f=u;n&&(f=t.create(\"node\",\"TeXAtom\",[u],{texClass:c.TEXCLASS.OP,movesupsub:!0})),o.default.setProperty(f,\"subsupOK\",!0),t.Push(f)},h.Overset=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e);(o.default.getAttribute(n,\"movablelimits\")||o.default.getProperty(n,\"movablelimits\"))&&o.default.setProperties(n,{movablelimits:!1});var i=t.create(\"node\",\"mover\",[n,r]);t.Push(i)},h.Underset=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e);(o.default.isType(n,\"mo\")||o.default.getProperty(n,\"movablelimits\"))&&o.default.setProperties(n,{movablelimits:!1});var i=t.create(\"node\",\"munder\",[n,r]);t.Push(i)},h.TeXAtom=function(t,e,r){var n,i,o,a={texClass:r};if(r===c.TEXCLASS.OP){a.movesupsub=a.movablelimits=!0;var u=t.GetArgument(e),p=u.match(/^\\s*\\\\rm\\s+([a-zA-Z0-9 ]+)$/);p?(a.mathvariant=l.TexConstant.Variant.NORMAL,i=t.create(\"token\",\"mi\",a,p[1])):(o=new s.default(u,t.stack.env,t.configuration).mml(),i=t.create(\"node\",\"TeXAtom\",[o],a)),n=t.itemFactory.create(\"fn\",i)}else o=t.ParseArg(e),n=t.create(\"node\",\"TeXAtom\",[o],a);t.Push(n)},h.MmlToken=function(t,e){var r,n=t.GetArgument(e),i=t.GetBrackets(e,\"\").replace(/^\\s+/,\"\"),s=t.GetArgument(e),l={};try{r=t.create(\"node\",n)}catch(t){r=null}if(!r||!r.isToken)throw new a.default(\"NotMathMLToken\",\"%1 is not a token element\",n);for(;\"\"!==i;){var c=i.match(/^([a-z]+)\\s*=\\s*('[^']*'|\"[^\"]*\"|[^ ,]*)\\s*,?\\s*/i);if(!c)throw new a.default(\"InvalidMathMLAttr\",\"Invalid MathML attribute: %1\",i);if(!r.attributes.hasDefault(c[1])&&!d[c[1]])throw new a.default(\"UnknownAttrForElement\",\"%1 is not a recognized attribute for %2\",c[1],n);var p=u.default.MmlFilterAttribute(t,c[1],c[2].replace(/^(['\"])(.*)\\1$/,\"$2\"));p&&(\"true\"===p.toLowerCase()?p=!0:\"false\"===p.toLowerCase()&&(p=!1),l[c[1]]=p),i=i.substr(c[0].length)}var f=t.create(\"text\",s);r.appendChild(f),o.default.setProperties(r,l),t.Push(r)},h.Strut=function(t,e){var r=t.create(\"node\",\"mrow\"),n=t.create(\"node\",\"mpadded\",[r],{height:\"8.6pt\",depth:\"3pt\",width:0});t.Push(n)},h.Phantom=function(t,e,r,n){var i=t.create(\"node\",\"mphantom\",[t.ParseArg(e)]);(r||n)&&(i=t.create(\"node\",\"mpadded\",[i]),n&&(o.default.setAttribute(i,\"height\",0),o.default.setAttribute(i,\"depth\",0)),r&&o.default.setAttribute(i,\"width\",0));var a=t.create(\"node\",\"TeXAtom\",[i]);t.Push(a)},h.Smash=function(t,e){var r=u.default.trimSpaces(t.GetBrackets(e,\"\")),n=t.create(\"node\",\"mpadded\",[t.ParseArg(e)]);switch(r){case\"b\":o.default.setAttribute(n,\"depth\",0);break;case\"t\":o.default.setAttribute(n,\"height\",0);break;default:o.default.setAttribute(n,\"height\",0),o.default.setAttribute(n,\"depth\",0)}var i=t.create(\"node\",\"TeXAtom\",[n]);t.Push(i)},h.Lap=function(t,e){var r=t.create(\"node\",\"mpadded\",[t.ParseArg(e)],{width:0});\"\\\\llap\"===e&&o.default.setAttribute(r,\"lspace\",\"-1width\");var n=t.create(\"node\",\"TeXAtom\",[r]);t.Push(n)},h.RaiseLower=function(t,e){var r=t.GetDimen(e),n=t.itemFactory.create(\"position\").setProperties({name:t.currentCS,move:\"vertical\"});\"-\"===r.charAt(0)&&(r=r.slice(1),e=\"raise\"===e.substr(1)?\"\\\\lower\":\"\\\\raise\"),\"\\\\lower\"===e?(n.setProperty(\"dh\",\"-\"+r),n.setProperty(\"dd\",\"+\"+r)):(n.setProperty(\"dh\",\"+\"+r),n.setProperty(\"dd\",\"-\"+r)),t.Push(n)},h.MoveLeftRight=function(t,e){var r=t.GetDimen(e),n=\"-\"===r.charAt(0)?r.slice(1):\"-\"+r;if(\"\\\\moveleft\"===e){var i=r;r=n,n=i}t.Push(t.itemFactory.create(\"position\").setProperties({name:t.currentCS,move:\"horizontal\",left:t.create(\"node\",\"mspace\",[],{width:r}),right:t.create(\"node\",\"mspace\",[],{width:n})}))},h.Hskip=function(t,e){var r=t.create(\"node\",\"mspace\",[],{width:t.GetDimen(e)});t.Push(r)},h.Rule=function(t,e,r){var n={width:t.GetDimen(e),height:t.GetDimen(e),depth:t.GetDimen(e)};\"blank\"!==r&&(n.mathbackground=t.stack.env.color||\"black\");var i=t.create(\"node\",\"mspace\",[],n);t.Push(i)},h.rule=function(t,e){var r=t.GetBrackets(e),n=t.GetDimen(e),i=t.GetDimen(e),a=t.create(\"node\",\"mspace\",[],{width:n,height:i,mathbackground:t.stack.env.color||\"black\"});r&&(a=t.create(\"node\",\"mpadded\",[a],{voffset:r}),r.match(/^\\-/)?(o.default.setAttribute(a,\"height\",r),o.default.setAttribute(a,\"depth\",\"+\"+r.substr(1))):o.default.setAttribute(a,\"height\",\"+\"+r)),t.Push(a)},h.MakeBig=function(t,e,r,n){var i=String(n*=1.411764705882353).replace(/(\\.\\d\\d\\d).+/,\"$1\")+\"em\",o=t.GetDelimiter(e,!0),a=t.create(\"token\",\"mo\",{minsize:i,maxsize:i,fence:!0,stretchy:!0,symmetric:!0},o),s=t.create(\"node\",\"TeXAtom\",[a],{texClass:r});t.Push(s)},h.BuildRel=function(t,e){var r=t.ParseUpTo(e,\"\\\\over\"),n=t.ParseArg(e),i=t.create(\"node\",\"munderover\");o.default.setChild(i,0,n),o.default.setChild(i,1,null),o.default.setChild(i,2,r);var a=t.create(\"node\",\"TeXAtom\",[i],{texClass:c.TEXCLASS.REL});t.Push(a)},h.HBox=function(t,e,r,n){t.PushAll(u.default.internalMath(t,t.GetArgument(e),r,n))},h.FBox=function(t,e){var r=u.default.internalMath(t,t.GetArgument(e)),n=t.create(\"node\",\"menclose\",r,{notation:\"box\"});t.Push(n)},h.Not=function(t,e){t.Push(t.itemFactory.create(\"not\"))},h.Dots=function(t,e){var r=o.default.createEntity(\"2026\"),n=o.default.createEntity(\"22EF\"),i=t.create(\"token\",\"mo\",{stretchy:!1},r),a=t.create(\"token\",\"mo\",{stretchy:!1},n);t.Push(t.itemFactory.create(\"dots\").setProperties({ldots:i,cdots:a}))},h.Matrix=function(t,e,r,n,i,o,s,l,u,c){var p=t.GetNext();if(\"\"===p)throw new a.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);\"{\"===p?t.i++:(t.string=p+\"}\"+t.string.slice(t.i+1),t.i=0);var f=t.itemFactory.create(\"array\").setProperty(\"requireClose\",!0);f.arraydef={rowspacing:s||\"4pt\",columnspacing:o||\"1em\"},u&&f.setProperty(\"isCases\",!0),c&&(f.setProperty(\"isNumbered\",!0),f.arraydef.side=c),(r||n)&&(f.setProperty(\"open\",r),f.setProperty(\"close\",n)),\"D\"===l&&(f.arraydef.displaystyle=!0),null!=i&&(f.arraydef.columnalign=i),t.Push(f)},h.Entry=function(t,e){if(t.Push(t.itemFactory.create(\"cell\").setProperties({isEntry:!0,name:e})),t.stack.Top().getProperty(\"isCases\")){for(var r=t.string,n=0,i=-1,o=t.i,s=r.length;o<s;){var l=r.charAt(o);if(\"{\"===l)n++,o++;else if(\"}\"===l)0===n?s=0:(0===--n&&i<0&&(i=o-t.i),o++);else{if(\"&\"===l&&0===n)throw new a.default(\"ExtraAlignTab\",\"Extra alignment tab in \\\\cases text\");\"\\\\\"===l?r.substr(o).match(/^((\\\\cr)[^a-zA-Z]|\\\\\\\\)/)?s=0:o+=2:o++}}var c=r.substr(t.i,o-t.i);if(!c.match(/^\\s*\\\\text[^a-zA-Z]/)||i!==c.replace(/\\s+$/,\"\").length-1){var p=u.default.internalMath(t,c,0);t.PushAll(p),t.i=o}}},h.Cr=function(t,e){t.Push(t.itemFactory.create(\"cell\").setProperties({isCR:!0,name:e}))},h.CrLaTeX=function(t,e,r){var o;if(void 0===r&&(r=!1),!r&&\"[\"===t.string.charAt(t.i)){var s=t.GetBrackets(e,\"\"),c=n(u.default.matchDimen(s),2),p=c[0],f=c[1];if(s&&!p)throw new a.default(\"BracketMustBeDimension\",\"Bracket argument to %1 must be a dimension\",t.currentCS);o=p+f}t.Push(t.itemFactory.create(\"cell\").setProperties({isCR:!0,name:e,linebreak:!0}));var h,d=t.stack.Top();if(d instanceof i.ArrayItem){if(o&&d.arraydef.rowspacing){var m=d.arraydef.rowspacing.split(/ /);if(!d.getProperty(\"rowspacing\")){var g=u.default.dimen2em(m[0]);d.setProperty(\"rowspacing\",g)}for(var y=d.getProperty(\"rowspacing\");m.length<d.table.length;)m.push(u.default.Em(y));m[d.table.length-1]=u.default.Em(Math.max(0,y+u.default.dimen2em(o))),d.arraydef.rowspacing=m.join(\" \")}}else o&&(h=t.create(\"node\",\"mspace\",[],{depth:o}),t.Push(h)),h=t.create(\"node\",\"mspace\",[],{linebreak:l.TexConstant.LineBreak.NEWLINE}),t.Push(h)},h.HLine=function(t,e,r){null==r&&(r=\"solid\");var n=t.stack.Top();if(!(n instanceof i.ArrayItem)||n.Size())throw new a.default(\"Misplaced\",\"Misplaced %1\",t.currentCS);if(n.table.length){for(var o=n.arraydef.rowlines?n.arraydef.rowlines.split(/ /):[];o.length<n.table.length;)o.push(\"none\");o[n.table.length-1]=r,n.arraydef.rowlines=o.join(\" \")}else n.frame.push(\"top\")},h.HFill=function(t,e){var r=t.stack.Top();if(!(r instanceof i.ArrayItem))throw new a.default(\"UnsupportedHFill\",\"Unsupported use of %1\",t.currentCS);r.hfill.push(r.Size())},h.BeginEnd=function(t,e){var r=t.GetArgument(e);if(r.match(/\\\\/i))throw new a.default(\"InvalidEnv\",\"Invalid environment name '%1'\",r);var n=t.configuration.handlers.get(\"environment\").lookup(r);if(n&&\"\\\\end\"===e){if(!n.args[0]){var i=t.itemFactory.create(\"end\").setProperty(\"name\",r);return void t.Push(i)}t.stack.env.closing=r}if(++t.macroCount>t.configuration.options.maxMacros)throw new a.default(\"MaxMacroSub2\",\"MathJax maximum substitution count exceeded; is there a recursive latex environment?\");t.parse(\"environment\",[t,r])},h.Array=function(t,e,r,n,i,o,a,s,l){i||(i=t.GetArgument(\"\\\\begin{\"+e.getName()+\"}\"));var u=(\"c\"+i).replace(/[^clr|:]/g,\"\").replace(/[^|:]([|:])+/g,\"$1\");i=(i=i.replace(/[^clr]/g,\"\").split(\"\").join(\" \")).replace(/l/g,\"left\").replace(/r/g,\"right\").replace(/c/g,\"center\");var c=t.itemFactory.create(\"array\");return c.arraydef={columnalign:i,columnspacing:o||\"1em\",rowspacing:a||\"4pt\"},u.match(/[|:]/)&&(u.charAt(0).match(/[|:]/)&&(c.frame.push(\"left\"),c.dashed=\":\"===u.charAt(0)),u.charAt(u.length-1).match(/[|:]/)&&c.frame.push(\"right\"),u=u.substr(1,u.length-2),c.arraydef.columnlines=u.split(\"\").join(\" \").replace(/[^|: ]/g,\"none\").replace(/\\|/g,\"solid\").replace(/:/g,\"dashed\")),r&&c.setProperty(\"open\",t.convertDelimiter(r)),n&&c.setProperty(\"close\",t.convertDelimiter(n)),\"D\"===s?c.arraydef.displaystyle=!0:s&&(c.arraydef.displaystyle=!1),\"S\"===s&&(c.arraydef.scriptlevel=1),l&&(c.arraydef.useHeight=!1),t.Push(e),c},h.AlignedArray=function(t,e){var r=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),n=h.Array(t,e);return u.default.setArrayAlign(n,r)},h.Equation=function(t,e,r){return t.Push(e),u.default.checkEqnEnv(t),t.itemFactory.create(\"equation\",r).setProperty(\"name\",e.getName())},h.EqnArray=function(t,e,r,n,i,o){t.Push(e),n&&u.default.checkEqnEnv(t),i=(i=i.replace(/[^clr]/g,\"\").split(\"\").join(\" \")).replace(/l/g,\"left\").replace(/r/g,\"right\").replace(/c/g,\"center\");var a=t.itemFactory.create(\"eqnarray\",e.getName(),r,n,t.stack.global);return a.arraydef={displaystyle:!0,columnalign:i,columnspacing:o||\"1em\",rowspacing:\"3pt\",side:t.options.tagSide,minlabelspacing:t.options.tagIndent},a},h.HandleNoTag=function(t,e){t.tags.notag()},h.HandleLabel=function(t,e){var r=t.GetArgument(e);if(\"\"!==r&&!t.tags.refUpdate){if(t.tags.label)throw new a.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);if(t.tags.label=r,(t.tags.allLabels[r]||t.tags.labels[r])&&!t.options.ignoreDuplicateLabels)throw new a.default(\"MultipleLabel\",\"Label '%1' multiply defined\",r);t.tags.labels[r]=new p.Label}},h.HandleRef=function(t,e,r){var n=t.GetArgument(e),i=t.tags.allLabels[n]||t.tags.labels[n];i||(t.tags.refUpdate||(t.tags.redo=!0),i=new p.Label);var o=i.tag;r&&(o=t.tags.formatTag(o));var a=t.create(\"node\",\"mrow\",u.default.internalMath(t,o),{href:t.tags.formatUrl(i.id,t.options.baseURL),class:\"MathJax_ref\"});t.Push(a)},h.Macro=function(t,e,r,n,i){if(n){var o=[];if(null!=i){var s=t.GetBrackets(e);o.push(null==s?i:s)}for(var l=o.length;l<n;l++)o.push(t.GetArgument(e));r=u.default.substituteArgs(t,o,r)}if(t.string=u.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new a.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is there a recursive macro call?\")},h.MathChoice=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e),i=t.ParseArg(e),o=t.ParseArg(e);t.Push(t.create(\"node\",\"MathChoice\",[r,n,i,o]))},e.default=h},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,i,o=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return a},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o,a=r(0),s=r(9),l=r(5);!function(t){t.variable=function(t,e){var r=l.default.getFontDef(t),n=t.create(\"token\",\"mi\",r,e);t.Push(n)},t.digit=function(t,e){var r,n=t.configuration.options.digits,i=t.string.slice(t.i-1).match(n),o=l.default.getFontDef(t);i?(r=t.create(\"token\",\"mn\",o,i[0].replace(/[{}]/g,\"\")),t.i+=i[0].length-1):r=t.create(\"token\",\"mo\",o,e),t.Push(r)},t.controlSequence=function(t,e){var r=t.GetCS();t.parse(\"macro\",[t,r])},t.mathchar0mi=function(t,e){var r=e.attributes||{mathvariant:s.TexConstant.Variant.ITALIC},n=t.create(\"token\",\"mi\",r,e.char);t.Push(n)},t.mathchar0mo=function(t,e){var r=e.attributes||{};r.stretchy=!1;var n=t.create(\"token\",\"mo\",r,e.char);a.default.setProperty(n,\"fixStretchy\",!0),t.configuration.addNode(\"fixStretchy\",n),t.Push(n)},t.mathchar7=function(t,e){var r=e.attributes||{mathvariant:s.TexConstant.Variant.NORMAL};t.stack.env.font&&(r.mathvariant=t.stack.env.font);var n=t.create(\"token\",\"mi\",r,e.char);t.Push(n)},t.delimiter=function(t,e){var r=e.attributes||{};r=Object.assign({fence:!1,stretchy:!1},r);var n=t.create(\"token\",\"mo\",r,e.char);t.Push(n)},t.environment=function(t,e,r,n){var o=n[0],a=t.itemFactory.create(\"begin\").setProperties({name:e,end:o});a=r.apply(void 0,i([t,a],n.slice(1))),t.Push(a)}}(o||(o={})),e.default=o},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(3).add({NJcy:\"\\u040a\",Nacute:\"\\u0143\",Ncaron:\"\\u0147\",Ncedil:\"\\u0145\",Ncy:\"\\u041d\",NegativeMediumSpace:\"\\u200b\",NegativeThickSpace:\"\\u200b\",NegativeThinSpace:\"\\u200b\",NegativeVeryThinSpace:\"\\u200b\",NewLine:\"\\n\",NoBreak:\"\\u2060\",NonBreakingSpace:\"\\xa0\",Not:\"\\u2aec\",NotCongruent:\"\\u2262\",NotCupCap:\"\\u226d\",NotEqualTilde:\"\\u2242\\u0338\",NotGreaterFullEqual:\"\\u2267\\u0338\",NotGreaterGreater:\"\\u226b\\u0338\",NotGreaterLess:\"\\u2279\",NotGreaterSlantEqual:\"\\u2a7e\\u0338\",NotGreaterTilde:\"\\u2275\",NotHumpDownHump:\"\\u224e\\u0338\",NotHumpEqual:\"\\u224f\\u0338\",NotLeftTriangleBar:\"\\u29cf\\u0338\",NotLessGreater:\"\\u2278\",NotLessLess:\"\\u226a\\u0338\",NotLessSlantEqual:\"\\u2a7d\\u0338\",NotLessTilde:\"\\u2274\",NotNestedGreaterGreater:\"\\u2aa2\\u0338\",NotNestedLessLess:\"\\u2aa1\\u0338\",NotPrecedesEqual:\"\\u2aaf\\u0338\",NotReverseElement:\"\\u220c\",NotRightTriangleBar:\"\\u29d0\\u0338\",NotSquareSubset:\"\\u228f\\u0338\",NotSquareSubsetEqual:\"\\u22e2\",NotSquareSuperset:\"\\u2290\\u0338\",NotSquareSupersetEqual:\"\\u22e3\",NotSubset:\"\\u2282\\u20d2\",NotSucceedsEqual:\"\\u2ab0\\u0338\",NotSucceedsTilde:\"\\u227f\\u0338\",NotSuperset:\"\\u2283\\u20d2\",NotTildeEqual:\"\\u2244\",NotTildeFullEqual:\"\\u2247\",NotTildeTilde:\"\\u2249\",Ntilde:\"\\xd1\",Nu:\"\\u039d\",nGg:\"\\u22d9\\u0338\",nGt:\"\\u226b\\u20d2\",nGtv:\"\\u226b\\u0338\",nLl:\"\\u22d8\\u0338\",nLt:\"\\u226a\\u20d2\",nLtv:\"\\u226a\\u0338\",nabla:\"\\u2207\",nacute:\"\\u0144\",nang:\"\\u2220\\u20d2\",nap:\"\\u2249\",napE:\"\\u2a70\\u0338\",napid:\"\\u224b\\u0338\",napos:\"\\u0149\",napprox:\"\\u2249\",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\",nearrow:\"\\u2197\",nedot:\"\\u2250\\u0338\",nequiv:\"\\u2262\",nesear:\"\\u2928\",nesim:\"\\u2242\\u0338\",nexist:\"\\u2204\",nexists:\"\\u2204\",ngE:\"\\u2267\\u0338\",nge:\"\\u2271\",ngeq:\"\\u2271\",ngeqq:\"\\u2267\\u0338\",ngeqslant:\"\\u2a7e\\u0338\",nges:\"\\u2a7e\\u0338\",ngsim:\"\\u2275\",ngt:\"\\u226f\",ngtr:\"\\u226f\",nhArr:\"\\u21ce\",nhpar:\"\\u2af2\",ni:\"\\u220b\",nis:\"\\u22fc\",nisd:\"\\u22fa\",niv:\"\\u220b\",njcy:\"\\u045a\",nlArr:\"\\u21cd\",nlE:\"\\u2266\\u0338\",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\",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\",nrarrc:\"\\u2933\\u0338\",nrarrw:\"\\u219d\\u0338\",nrightarrow:\"\\u219b\",nrtri:\"\\u22eb\",nrtrie:\"\\u22ed\",nsc:\"\\u2281\",nsccue:\"\\u22e1\",nsce:\"\\u2ab0\\u0338\",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\",num:\"#\",numero:\"\\u2116\",numsp:\"\\u2007\",nvHarr:\"\\u2904\",nvap:\"\\u224d\\u20d2\",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\",nwarrow:\"\\u2196\",nwnear:\"\\u2927\"},\"n\")},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PrioritizedList=MathJax._.util.PrioritizedList.PrioritizedList},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FunctionList=MathJax._.util.FunctionList.FunctionList},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractInputJax=MathJax._.core.InputJax.AbstractInputJax},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractFindMath=MathJax._.core.FindMath.AbstractFindMath},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sortLength=MathJax._.util.string.sortLength,e.quotePattern=MathJax._.util.string.quotePattern,e.unicodeChars=MathJax._.util.string.unicodeChars,e.isPercent=MathJax._.util.string.isPercent,e.split=MathJax._.util.string.split},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMo=MathJax._.core.MmlTree.MmlNodes.mo.MmlMo},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractFactory=MathJax._.core.Tree.Factory.AbstractFactory},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(12),i=r(9),o=r(23),a=r(24),s=r(2);new n.RegExpMap(\"letter\",a.default.variable,/[a-z]/i),new n.RegExpMap(\"digit\",a.default.digit,/[0-9.,]/),new n.RegExpMap(\"command\",a.default.controlSequence,/^\\\\/),new n.MacroMap(\"special\",{\"{\":\"Open\",\"}\":\"Close\",\"~\":\"Tilde\",\"^\":\"Superscript\",_:\"Subscript\",\" \":\"Space\",\"\\t\":\"Space\",\"\\r\":\"Space\",\"\\n\":\"Space\",\"'\":\"Prime\",\"%\":\"Comment\",\"&\":\"Entry\",\"#\":\"Hash\",\"\\xa0\":\"Space\",\"\\u2019\":\"Prime\"},o.default),new n.CharacterMap(\"mathchar0mi\",a.default.mathchar0mi,{alpha:\"\\u03b1\",beta:\"\\u03b2\",gamma:\"\\u03b3\",delta:\"\\u03b4\",epsilon:\"\\u03f5\",zeta:\"\\u03b6\",eta:\"\\u03b7\",theta:\"\\u03b8\",iota:\"\\u03b9\",kappa:\"\\u03ba\",lambda:\"\\u03bb\",mu:\"\\u03bc\",nu:\"\\u03bd\",xi:\"\\u03be\",omicron:\"\\u03bf\",pi:\"\\u03c0\",rho:\"\\u03c1\",sigma:\"\\u03c3\",tau:\"\\u03c4\",upsilon:\"\\u03c5\",phi:\"\\u03d5\",chi:\"\\u03c7\",psi:\"\\u03c8\",omega:\"\\u03c9\",varepsilon:\"\\u03b5\",vartheta:\"\\u03d1\",varpi:\"\\u03d6\",varrho:\"\\u03f1\",varsigma:\"\\u03c2\",varphi:\"\\u03c6\",S:[\"\\xa7\",{mathvariant:i.TexConstant.Variant.NORMAL}],aleph:[\"\\u2135\",{mathvariant:i.TexConstant.Variant.NORMAL}],hbar:[\"\\u210f\",{variantForm:!0}],imath:\"\\u0131\",jmath:\"\\u0237\",ell:\"\\u2113\",wp:[\"\\u2118\",{mathvariant:i.TexConstant.Variant.NORMAL}],Re:[\"\\u211c\",{mathvariant:i.TexConstant.Variant.NORMAL}],Im:[\"\\u2111\",{mathvariant:i.TexConstant.Variant.NORMAL}],partial:[\"\\u2202\",{mathvariant:i.TexConstant.Variant.ITALIC}],infty:[\"\\u221e\",{mathvariant:i.TexConstant.Variant.NORMAL}],prime:[\"\\u2032\",{mathvariant:i.TexConstant.Variant.NORMAL,variantForm:!0}],emptyset:[\"\\u2205\",{mathvariant:i.TexConstant.Variant.NORMAL}],nabla:[\"\\u2207\",{mathvariant:i.TexConstant.Variant.NORMAL}],top:[\"\\u22a4\",{mathvariant:i.TexConstant.Variant.NORMAL}],bot:[\"\\u22a5\",{mathvariant:i.TexConstant.Variant.NORMAL}],angle:[\"\\u2220\",{mathvariant:i.TexConstant.Variant.NORMAL}],triangle:[\"\\u25b3\",{mathvariant:i.TexConstant.Variant.NORMAL}],backslash:[\"\\u2216\",{mathvariant:i.TexConstant.Variant.NORMAL,variantForm:!0}],forall:[\"\\u2200\",{mathvariant:i.TexConstant.Variant.NORMAL}],exists:[\"\\u2203\",{mathvariant:i.TexConstant.Variant.NORMAL}],neg:[\"\\xac\",{mathvariant:i.TexConstant.Variant.NORMAL}],lnot:[\"\\xac\",{mathvariant:i.TexConstant.Variant.NORMAL}],flat:[\"\\u266d\",{mathvariant:i.TexConstant.Variant.NORMAL}],natural:[\"\\u266e\",{mathvariant:i.TexConstant.Variant.NORMAL}],sharp:[\"\\u266f\",{mathvariant:i.TexConstant.Variant.NORMAL}],clubsuit:[\"\\u2663\",{mathvariant:i.TexConstant.Variant.NORMAL}],diamondsuit:[\"\\u2662\",{mathvariant:i.TexConstant.Variant.NORMAL}],heartsuit:[\"\\u2661\",{mathvariant:i.TexConstant.Variant.NORMAL}],spadesuit:[\"\\u2660\",{mathvariant:i.TexConstant.Variant.NORMAL}]}),new n.CharacterMap(\"mathchar0mo\",a.default.mathchar0mo,{surd:\"\\u221a\",coprod:[\"\\u2210\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigvee:[\"\\u22c1\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigwedge:[\"\\u22c0\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],biguplus:[\"\\u2a04\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigcap:[\"\\u22c2\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigcup:[\"\\u22c3\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],int:[\"\\u222b\",{texClass:s.TEXCLASS.OP}],intop:[\"\\u222b\",{texClass:s.TEXCLASS.OP,movesupsub:!0,movablelimits:!0}],iint:[\"\\u222c\",{texClass:s.TEXCLASS.OP}],iiint:[\"\\u222d\",{texClass:s.TEXCLASS.OP}],prod:[\"\\u220f\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],sum:[\"\\u2211\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigotimes:[\"\\u2a02\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigoplus:[\"\\u2a01\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigodot:[\"\\u2a00\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],oint:[\"\\u222e\",{texClass:s.TEXCLASS.OP}],bigsqcup:[\"\\u2a06\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],smallint:[\"\\u222b\",{largeop:!1}],triangleleft:\"\\u25c3\",triangleright:\"\\u25b9\",bigtriangleup:\"\\u25b3\",bigtriangledown:\"\\u25bd\",wedge:\"\\u2227\",land:\"\\u2227\",vee:\"\\u2228\",lor:\"\\u2228\",cap:\"\\u2229\",cup:\"\\u222a\",ddagger:\"\\u2021\",dagger:\"\\u2020\",sqcap:\"\\u2293\",sqcup:\"\\u2294\",uplus:\"\\u228e\",amalg:\"\\u2a3f\",diamond:\"\\u22c4\",bullet:\"\\u2219\",wr:\"\\u2240\",div:\"\\xf7\",odot:[\"\\u2299\",{largeop:!1}],oslash:[\"\\u2298\",{largeop:!1}],otimes:[\"\\u2297\",{largeop:!1}],ominus:[\"\\u2296\",{largeop:!1}],oplus:[\"\\u2295\",{largeop:!1}],mp:\"\\u2213\",pm:\"\\xb1\",circ:\"\\u2218\",bigcirc:\"\\u25ef\",setminus:\"\\u2216\",cdot:\"\\u22c5\",ast:\"\\u2217\",times:\"\\xd7\",star:\"\\u22c6\",propto:\"\\u221d\",sqsubseteq:\"\\u2291\",sqsupseteq:\"\\u2292\",parallel:\"\\u2225\",mid:\"\\u2223\",dashv:\"\\u22a3\",vdash:\"\\u22a2\",leq:\"\\u2264\",le:\"\\u2264\",geq:\"\\u2265\",ge:\"\\u2265\",lt:\"<\",gt:\">\",succ:\"\\u227b\",prec:\"\\u227a\",approx:\"\\u2248\",succeq:\"\\u2ab0\",preceq:\"\\u2aaf\",supset:\"\\u2283\",subset:\"\\u2282\",supseteq:\"\\u2287\",subseteq:\"\\u2286\",in:\"\\u2208\",ni:\"\\u220b\",notin:\"\\u2209\",owns:\"\\u220b\",gg:\"\\u226b\",ll:\"\\u226a\",sim:\"\\u223c\",simeq:\"\\u2243\",perp:\"\\u22a5\",equiv:\"\\u2261\",asymp:\"\\u224d\",smile:\"\\u2323\",frown:\"\\u2322\",ne:\"\\u2260\",neq:\"\\u2260\",cong:\"\\u2245\",doteq:\"\\u2250\",bowtie:\"\\u22c8\",models:\"\\u22a8\",notChar:\"\\u29f8\",Leftrightarrow:\"\\u21d4\",Leftarrow:\"\\u21d0\",Rightarrow:\"\\u21d2\",leftrightarrow:\"\\u2194\",leftarrow:\"\\u2190\",gets:\"\\u2190\",rightarrow:\"\\u2192\",to:[\"\\u2192\",{accent:!1}],mapsto:\"\\u21a6\",leftharpoonup:\"\\u21bc\",leftharpoondown:\"\\u21bd\",rightharpoonup:\"\\u21c0\",rightharpoondown:\"\\u21c1\",nearrow:\"\\u2197\",searrow:\"\\u2198\",nwarrow:\"\\u2196\",swarrow:\"\\u2199\",rightleftharpoons:\"\\u21cc\",hookrightarrow:\"\\u21aa\",hookleftarrow:\"\\u21a9\",longleftarrow:\"\\u27f5\",Longleftarrow:\"\\u27f8\",longrightarrow:\"\\u27f6\",Longrightarrow:\"\\u27f9\",Longleftrightarrow:\"\\u27fa\",longleftrightarrow:\"\\u27f7\",longmapsto:\"\\u27fc\",ldots:\"\\u2026\",cdots:\"\\u22ef\",vdots:\"\\u22ee\",ddots:\"\\u22f1\",dotsc:\"\\u2026\",dotsb:\"\\u22ef\",dotsm:\"\\u22ef\",dotsi:\"\\u22ef\",dotso:\"\\u2026\",ldotp:[\".\",{texClass:s.TEXCLASS.PUNCT}],cdotp:[\"\\u22c5\",{texClass:s.TEXCLASS.PUNCT}],colon:[\":\",{texClass:s.TEXCLASS.PUNCT}]}),new n.CharacterMap(\"mathchar7\",a.default.mathchar7,{Gamma:\"\\u0393\",Delta:\"\\u0394\",Theta:\"\\u0398\",Lambda:\"\\u039b\",Xi:\"\\u039e\",Pi:\"\\u03a0\",Sigma:\"\\u03a3\",Upsilon:\"\\u03a5\",Phi:\"\\u03a6\",Psi:\"\\u03a8\",Omega:\"\\u03a9\",_:\"_\",\"#\":\"#\",$:\"$\",\"%\":\"%\",\"&\":\"&\",And:\"&\"}),new n.DelimiterMap(\"delimiter\",a.default.delimiter,{\"(\":\"(\",\")\":\")\",\"[\":\"[\",\"]\":\"]\",\"<\":\"\\u27e8\",\">\":\"\\u27e9\",\"\\\\lt\":\"\\u27e8\",\"\\\\gt\":\"\\u27e9\",\"/\":\"/\",\"|\":[\"|\",{texClass:s.TEXCLASS.ORD}],\".\":\"\",\"\\\\\\\\\":\"\\\\\",\"\\\\lmoustache\":\"\\u23b0\",\"\\\\rmoustache\":\"\\u23b1\",\"\\\\lgroup\":\"\\u27ee\",\"\\\\rgroup\":\"\\u27ef\",\"\\\\arrowvert\":\"\\u23d0\",\"\\\\Arrowvert\":\"\\u2016\",\"\\\\bracevert\":\"\\u23aa\",\"\\\\Vert\":[\"\\u2225\",{texClass:s.TEXCLASS.ORD}],\"\\\\|\":[\"\\u2225\",{texClass:s.TEXCLASS.ORD}],\"\\\\vert\":[\"|\",{texClass:s.TEXCLASS.ORD}],\"\\\\uparrow\":\"\\u2191\",\"\\\\downarrow\":\"\\u2193\",\"\\\\updownarrow\":\"\\u2195\",\"\\\\Uparrow\":\"\\u21d1\",\"\\\\Downarrow\":\"\\u21d3\",\"\\\\Updownarrow\":\"\\u21d5\",\"\\\\backslash\":\"\\\\\",\"\\\\rangle\":\"\\u27e9\",\"\\\\langle\":\"\\u27e8\",\"\\\\rbrace\":\"}\",\"\\\\lbrace\":\"{\",\"\\\\}\":\"}\",\"\\\\{\":\"{\",\"\\\\rceil\":\"\\u2309\",\"\\\\lceil\":\"\\u2308\",\"\\\\rfloor\":\"\\u230b\",\"\\\\lfloor\":\"\\u230a\",\"\\\\lbrack\":\"[\",\"\\\\rbrack\":\"]\"}),new n.CommandMap(\"macros\",{displaystyle:[\"SetStyle\",\"D\",!0,0],textstyle:[\"SetStyle\",\"T\",!1,0],scriptstyle:[\"SetStyle\",\"S\",!1,1],scriptscriptstyle:[\"SetStyle\",\"SS\",!1,2],rm:[\"SetFont\",i.TexConstant.Variant.NORMAL],mit:[\"SetFont\",i.TexConstant.Variant.ITALIC],oldstyle:[\"SetFont\",i.TexConstant.Variant.OLDSTYLE],cal:[\"SetFont\",i.TexConstant.Variant.CALLIGRAPHIC],it:[\"SetFont\",\"-tex-mathit\"],bf:[\"SetFont\",i.TexConstant.Variant.BOLD],bbFont:[\"SetFont\",i.TexConstant.Variant.DOUBLESTRUCK],scr:[\"SetFont\",i.TexConstant.Variant.SCRIPT],frak:[\"SetFont\",i.TexConstant.Variant.FRAKTUR],sf:[\"SetFont\",i.TexConstant.Variant.SANSSERIF],tt:[\"SetFont\",i.TexConstant.Variant.MONOSPACE],tiny:[\"SetSize\",.5],Tiny:[\"SetSize\",.6],scriptsize:[\"SetSize\",.7],small:[\"SetSize\",.85],normalsize:[\"SetSize\",1],large:[\"SetSize\",1.2],Large:[\"SetSize\",1.44],LARGE:[\"SetSize\",1.73],huge:[\"SetSize\",2.07],Huge:[\"SetSize\",2.49],arcsin:[\"NamedFn\"],arccos:[\"NamedFn\"],arctan:[\"NamedFn\"],arg:[\"NamedFn\"],cos:[\"NamedFn\"],cosh:[\"NamedFn\"],cot:[\"NamedFn\"],coth:[\"NamedFn\"],csc:[\"NamedFn\"],deg:[\"NamedFn\"],det:\"NamedOp\",dim:[\"NamedFn\"],exp:[\"NamedFn\"],gcd:\"NamedOp\",hom:[\"NamedFn\"],inf:\"NamedOp\",ker:[\"NamedFn\"],lg:[\"NamedFn\"],lim:\"NamedOp\",liminf:[\"NamedOp\",\"lim&thinsp;inf\"],limsup:[\"NamedOp\",\"lim&thinsp;sup\"],ln:[\"NamedFn\"],log:[\"NamedFn\"],max:\"NamedOp\",min:\"NamedOp\",Pr:\"NamedOp\",sec:[\"NamedFn\"],sin:[\"NamedFn\"],sinh:[\"NamedFn\"],sup:\"NamedOp\",tan:[\"NamedFn\"],tanh:[\"NamedFn\"],limits:[\"Limits\",1],nolimits:[\"Limits\",0],overline:[\"UnderOver\",\"00AF\",null,1],underline:[\"UnderOver\",\"005F\"],overbrace:[\"UnderOver\",\"23DE\",1],underbrace:[\"UnderOver\",\"23DF\",1],overparen:[\"UnderOver\",\"23DC\"],underparen:[\"UnderOver\",\"23DD\"],overrightarrow:[\"UnderOver\",\"2192\"],underrightarrow:[\"UnderOver\",\"2192\"],overleftarrow:[\"UnderOver\",\"2190\"],underleftarrow:[\"UnderOver\",\"2190\"],overleftrightarrow:[\"UnderOver\",\"2194\"],underleftrightarrow:[\"UnderOver\",\"2194\"],overset:\"Overset\",underset:\"Underset\",stackrel:[\"Macro\",\"\\\\mathrel{\\\\mathop{#2}\\\\limits^{#1}}\",2],over:\"Over\",overwithdelims:\"Over\",atop:\"Over\",atopwithdelims:\"Over\",above:\"Over\",abovewithdelims:\"Over\",brace:[\"Over\",\"{\",\"}\"],brack:[\"Over\",\"[\",\"]\"],choose:[\"Over\",\"(\",\")\"],frac:\"Frac\",sqrt:\"Sqrt\",root:\"Root\",uproot:[\"MoveRoot\",\"upRoot\"],leftroot:[\"MoveRoot\",\"leftRoot\"],left:\"LeftRight\",right:\"LeftRight\",middle:\"Middle\",llap:\"Lap\",rlap:\"Lap\",raise:\"RaiseLower\",lower:\"RaiseLower\",moveleft:\"MoveLeftRight\",moveright:\"MoveLeftRight\",\",\":[\"Spacer\",i.TexConstant.Length.THINMATHSPACE],\":\":[\"Spacer\",i.TexConstant.Length.MEDIUMMATHSPACE],\">\":[\"Spacer\",i.TexConstant.Length.MEDIUMMATHSPACE],\";\":[\"Spacer\",i.TexConstant.Length.THICKMATHSPACE],\"!\":[\"Spacer\",i.TexConstant.Length.NEGATIVETHINMATHSPACE],enspace:[\"Spacer\",\".5em\"],quad:[\"Spacer\",\"1em\"],qquad:[\"Spacer\",\"2em\"],thinspace:[\"Spacer\",i.TexConstant.Length.THINMATHSPACE],negthinspace:[\"Spacer\",i.TexConstant.Length.NEGATIVETHINMATHSPACE],hskip:\"Hskip\",hspace:\"Hskip\",kern:\"Hskip\",mskip:\"Hskip\",mspace:\"Hskip\",mkern:\"Hskip\",rule:\"rule\",Rule:[\"Rule\"],Space:[\"Rule\",\"blank\"],big:[\"MakeBig\",s.TEXCLASS.ORD,.85],Big:[\"MakeBig\",s.TEXCLASS.ORD,1.15],bigg:[\"MakeBig\",s.TEXCLASS.ORD,1.45],Bigg:[\"MakeBig\",s.TEXCLASS.ORD,1.75],bigl:[\"MakeBig\",s.TEXCLASS.OPEN,.85],Bigl:[\"MakeBig\",s.TEXCLASS.OPEN,1.15],biggl:[\"MakeBig\",s.TEXCLASS.OPEN,1.45],Biggl:[\"MakeBig\",s.TEXCLASS.OPEN,1.75],bigr:[\"MakeBig\",s.TEXCLASS.CLOSE,.85],Bigr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.15],biggr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.45],Biggr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.75],bigm:[\"MakeBig\",s.TEXCLASS.REL,.85],Bigm:[\"MakeBig\",s.TEXCLASS.REL,1.15],biggm:[\"MakeBig\",s.TEXCLASS.REL,1.45],Biggm:[\"MakeBig\",s.TEXCLASS.REL,1.75],mathord:[\"TeXAtom\",s.TEXCLASS.ORD],mathop:[\"TeXAtom\",s.TEXCLASS.OP],mathopen:[\"TeXAtom\",s.TEXCLASS.OPEN],mathclose:[\"TeXAtom\",s.TEXCLASS.CLOSE],mathbin:[\"TeXAtom\",s.TEXCLASS.BIN],mathrel:[\"TeXAtom\",s.TEXCLASS.REL],mathpunct:[\"TeXAtom\",s.TEXCLASS.PUNCT],mathinner:[\"TeXAtom\",s.TEXCLASS.INNER],vcenter:[\"TeXAtom\",s.TEXCLASS.VCENTER],buildrel:\"BuildRel\",hbox:[\"HBox\",0],text:\"HBox\",mbox:[\"HBox\",0],fbox:\"FBox\",strut:\"Strut\",mathstrut:[\"Macro\",\"\\\\vphantom{(}\"],phantom:\"Phantom\",vphantom:[\"Phantom\",1,0],hphantom:[\"Phantom\",0,1],smash:\"Smash\",acute:[\"Accent\",\"00B4\"],grave:[\"Accent\",\"0060\"],ddot:[\"Accent\",\"00A8\"],tilde:[\"Accent\",\"007E\"],bar:[\"Accent\",\"00AF\"],breve:[\"Accent\",\"02D8\"],check:[\"Accent\",\"02C7\"],hat:[\"Accent\",\"005E\"],vec:[\"Accent\",\"2192\"],dot:[\"Accent\",\"02D9\"],widetilde:[\"Accent\",\"007E\",1],widehat:[\"Accent\",\"005E\",1],matrix:\"Matrix\",array:\"Matrix\",pmatrix:[\"Matrix\",\"(\",\")\"],cases:[\"Matrix\",\"{\",\"\",\"left left\",null,\".1em\",null,!0],eqalign:[\"Matrix\",null,null,\"right left\",i.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\"],displaylines:[\"Matrix\",null,null,\"center\",null,\".5em\",\"D\"],cr:\"Cr\",\"\\\\\":\"CrLaTeX\",newline:[\"CrLaTeX\",!0],hline:[\"HLine\",\"solid\"],hdashline:[\"HLine\",\"dashed\"],eqalignno:[\"Matrix\",null,null,\"right left\",i.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\",null,\"right\"],leqalignno:[\"Matrix\",null,null,\"right left\",i.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\",null,\"left\"],hfill:\"HFill\",hfil:\"HFill\",hfilll:\"HFill\",bmod:[\"Macro\",'\\\\mmlToken{mo}[lspace=\"thickmathspace\" rspace=\"thickmathspace\"]{mod}'],pmod:[\"Macro\",\"\\\\pod{\\\\mmlToken{mi}{mod}\\\\kern 6mu #1}\",1],mod:[\"Macro\",\"\\\\mathchoice{\\\\kern18mu}{\\\\kern12mu}{\\\\kern12mu}{\\\\kern12mu}\\\\mmlToken{mi}{mod}\\\\,\\\\,#1\",1],pod:[\"Macro\",\"\\\\mathchoice{\\\\kern18mu}{\\\\kern8mu}{\\\\kern8mu}{\\\\kern8mu}(#1)\",1],iff:[\"Macro\",\"\\\\;\\\\Longleftrightarrow\\\\;\"],skew:[\"Macro\",\"{{#2{#3\\\\mkern#1mu}\\\\mkern-#1mu}{}}\",3],mathcal:[\"Macro\",\"{\\\\cal #1}\",1],mathscr:[\"Macro\",\"{\\\\scr #1}\",1],mathrm:[\"Macro\",\"{\\\\rm #1}\",1],mathbf:[\"Macro\",\"{\\\\bf #1}\",1],mathbb:[\"Macro\",\"{\\\\bbFont #1}\",1],Bbb:[\"Macro\",\"{\\\\bbFont #1}\",1],mathit:[\"Macro\",\"{\\\\it #1}\",1],mathfrak:[\"Macro\",\"{\\\\frak #1}\",1],mathsf:[\"Macro\",\"{\\\\sf #1}\",1],mathtt:[\"Macro\",\"{\\\\tt #1}\",1],textrm:[\"HBox\",null,i.TexConstant.Variant.NORMAL],textit:[\"HBox\",null,i.TexConstant.Variant.ITALIC],textbf:[\"HBox\",null,i.TexConstant.Variant.BOLD],textsf:[\"HBox\",null,i.TexConstant.Variant.SANSSERIF],texttt:[\"HBox\",null,i.TexConstant.Variant.MONOSPACE],pmb:[\"Macro\",\"\\\\rlap{#1}\\\\kern1px{#1}\",1],TeX:[\"Macro\",\"T\\\\kern-.14em\\\\lower.5ex{E}\\\\kern-.115em X\"],LaTeX:[\"Macro\",\"L\\\\kern-.325em\\\\raise.21em{\\\\scriptstyle{A}}\\\\kern-.17em\\\\TeX\"],\" \":[\"Macro\",\"\\\\text{ }\"],not:\"Not\",dots:\"Dots\",space:\"Tilde\",\"\\xa0\":\"Tilde\",begin:\"BeginEnd\",end:\"BeginEnd\",label:\"HandleLabel\",ref:\"HandleRef\",nonumber:\"HandleNoTag\",mathchoice:\"MathChoice\",mmlToken:\"MmlToken\"},o.default),new n.EnvironmentMap(\"environment\",a.default.environment,{array:[\"AlignedArray\"],equation:[\"Equation\",null,!0],\"equation*\":[\"Equation\",null,!1],eqnarray:[\"EqnArray\",null,!0,!0,\"rcl\",\"0 \"+i.TexConstant.Length.THICKMATHSPACE,\".5em\"]},o.default),new n.CharacterMap(\"not_remap\",null,{\"\\u2190\":\"\\u219a\",\"\\u2192\":\"\\u219b\",\"\\u2194\":\"\\u21ae\",\"\\u21d0\":\"\\u21cd\",\"\\u21d2\":\"\\u21cf\",\"\\u21d4\":\"\\u21ce\",\"\\u2208\":\"\\u2209\",\"\\u220b\":\"\\u220c\",\"\\u2223\":\"\\u2224\",\"\\u2225\":\"\\u2226\",\"\\u223c\":\"\\u2241\",\"~\":\"\\u2241\",\"\\u2243\":\"\\u2244\",\"\\u2245\":\"\\u2247\",\"\\u2248\":\"\\u2249\",\"\\u224d\":\"\\u226d\",\"=\":\"\\u2260\",\"\\u2261\":\"\\u2262\",\"<\":\"\\u226e\",\">\":\"\\u226f\",\"\\u2264\":\"\\u2270\",\"\\u2265\":\"\\u2271\",\"\\u2272\":\"\\u2274\",\"\\u2273\":\"\\u2275\",\"\\u2276\":\"\\u2278\",\"\\u2277\":\"\\u2279\",\"\\u227a\":\"\\u2280\",\"\\u227b\":\"\\u2281\",\"\\u2282\":\"\\u2284\",\"\\u2283\":\"\\u2285\",\"\\u2286\":\"\\u2288\",\"\\u2287\":\"\\u2289\",\"\\u22a2\":\"\\u22ac\",\"\\u22a8\":\"\\u22ad\",\"\\u22a9\":\"\\u22ae\",\"\\u22ab\":\"\\u22af\",\"\\u227c\":\"\\u22e0\",\"\\u227d\":\"\\u22e1\",\"\\u2291\":\"\\u22e2\",\"\\u2292\":\"\\u22e3\",\"\\u22b2\":\"\\u22ea\",\"\\u22b3\":\"\\u22eb\",\"\\u22b4\":\"\\u22ec\",\"\\u22b5\":\"\\u22ed\",\"\\u2203\":\"\\u2204\"})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(3).add({Pcy:\"\\u041f\",Poincareplane:\"\\u210c\",Pr:\"\\u2abb\",Prime:\"\\u2033\",Proportion:\"\\u2237\",par:\"\\u2225\",para:\"\\xb6\",parallel:\"\\u2225\",parsim:\"\\u2af3\",parsl:\"\\u2afd\",part:\"\\u2202\",pcy:\"\\u043f\",percnt:\"%\",permil:\"\\u2030\",perp:\"\\u22a5\",pertenk:\"\\u2031\",phmmat:\"\\u2133\",phone:\"\\u260e\",pitchfork:\"\\u22d4\",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\",pound:\"\\xa3\",pr:\"\\u227a\",prE:\"\\u2ab3\",prcue:\"\\u227c\",pre:\"\\u2aaf\",prec:\"\\u227a\",precapprox:\"\\u2ab7\",preccurlyeq:\"\\u227c\",preceq:\"\\u2aaf\",precsim:\"\\u227e\",primes:\"\\u2119\",prnE:\"\\u2ab5\",prnap:\"\\u2ab9\",prnsim:\"\\u22e8\",prod:\"\\u220f\",profalar:\"\\u232e\",profline:\"\\u2312\",profsurf:\"\\u2313\",prop:\"\\u221d\",propto:\"\\u221d\",prsim:\"\\u227e\",prurel:\"\\u22b0\",puncsp:\"\\u2008\"},\"p\")},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(3).add({RBarr:\"\\u2910\",REG:\"\\xae\",Racute:\"\\u0154\",Rang:\"\\u27eb\",Rarrtl:\"\\u2916\",Rcaron:\"\\u0158\",Rcedil:\"\\u0156\",Rcy:\"\\u0420\",ReverseElement:\"\\u220b\",ReverseUpEquilibrium:\"\\u296f\",Rho:\"\\u03a1\",RightArrowBar:\"\\u21e5\",RightDoubleBracket:\"\\u27e7\",RightDownTeeVector:\"\\u295d\",RightDownVectorBar:\"\\u2955\",RightTeeVector:\"\\u295b\",RightTriangleBar:\"\\u29d0\",RightUpDownVector:\"\\u294f\",RightUpTeeVector:\"\\u295c\",RightUpVectorBar:\"\\u2954\",RightVectorBar:\"\\u2953\",RoundImplies:\"\\u2970\",RuleDelayed:\"\\u29f4\",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\",rarrw:\"\\u219d\",ratail:\"\\u291a\",ratio:\"\\u2236\",rationals:\"\\u211a\",rbarr:\"\\u290d\",rbbrk:\"\\u2773\",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\",rhard:\"\\u21c1\",rharu:\"\\u21c0\",rharul:\"\\u296c\",rightarrow:\"\\u2192\",rightarrowtail:\"\\u21a3\",rightharpoondown:\"\\u21c1\",rightharpoonup:\"\\u21c0\",rightleftarrows:\"\\u21c4\",rightleftharpoons:\"\\u21cc\",rightsquigarrow:\"\\u219d\",risingdotseq:\"\\u2253\",rlarr:\"\\u21c4\",rlhar:\"\\u21cc\",rlm:\"\\u200f\",rmoustache:\"\\u23b1\",rnmid:\"\\u2aee\",roang:\"\\u27ed\",roarr:\"\\u21fe\",robrk:\"\\u27e7\",ropar:\"\\u2986\",roplus:\"\\u2a2e\",rotimes:\"\\u2a35\",rpar:\")\",rpargt:\"\\u2994\",rppolint:\"\\u2a12\",rrarr:\"\\u21c9\",rsaquo:\"\\u203a\",rsh:\"\\u21b1\",rsqb:\"]\",rsquo:\"\\u2019\",rsquor:\"\\u2019\",rthree:\"\\u22cc\",rtrie:\"\\u22b5\",rtrif:\"\\u25b8\",rtriltri:\"\\u29ce\",ruluhar:\"\\u2968\",rx:\"\\u211e\"},\"r\")},function(t,e,r){\"use strict\";r.r(e);var n=r(28),i=r(14),o=r(11),a=r(16),s=r(15),l=r(7),u=r(20),c=r(0),p=r(24),f=r(18),h=r(5),d=r(17),m=r(10),g=r(19),y=r(22),v=r(12),b=r(6),T=r(9),P=r(1),S=r(4),x=r(21),A=r(13),M=r(23);Object(n.combineWithMathJax)({_:{input:{tex_ts:i,tex:{Configuration:o,FilterUtil:a,FindTeX:s,MapHandler:l,NodeFactory:u,NodeUtil:c,ParseMethods:p,ParseOptions:f,ParseUtil:h,Stack:d,StackItem:m,StackItemFactory:g,Symbol:y,SymbolMap:v,Tags:b,TexConstants:T,TexError:P,TexParser:S,base:{BaseConfiguration:x,BaseItems:A,BaseMethods:M}}}}});var O=r(8);!function(t){if(MathJax.startup){MathJax.startup.registerConstructor(\"tex\",i.TeX),MathJax.startup.useInput(\"tex\"),MathJax.config.tex||(MathJax.config.tex={});var e=MathJax.config.tex.packages;MathJax.config.tex.packages=t,e&&Object(O.insert)(MathJax.config.tex,{packages:e})}}([\"base\"])}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex-full.js",
    "content": "!function(t){var e={};function r(n){if(e[n])return e[n].exports;var a=e[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var a in t)r.d(n,a,function(e){return t[e]}.bind(null,a));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,\"a\",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p=\"\",r(r.s=95)}([function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ParserConfiguration=e.ConfigurationHandler=e.Configuration=void 0;var o,i=r(10),s=r(16),l=r(73),c=r(72),u=r(9),p=function(){function t(t,e,r,n,a,o,i,s,l,c,u,p){void 0===e&&(e={}),void 0===r&&(r={}),void 0===n&&(n={}),void 0===a&&(a={}),void 0===o&&(o={}),void 0===i&&(i={}),void 0===s&&(s=[]),void 0===l&&(l=[]),void 0===c&&(c=null),void 0===u&&(u=null),this.name=t,this.handler=e,this.fallback=r,this.items=n,this.tags=a,this.options=o,this.nodes=i,this.preprocessors=s,this.postprocessors=l,this.initMethod=c,this.configMethod=u,this.priority=p,this.handler=Object.assign({character:[],delimiter:[],macro:[],environment:[]},e)}return t.makeProcessor=function(t,e){return Array.isArray(t)?t:[t,e]},t._create=function(e,r){var n=this;void 0===r&&(r={});var a=r.priority||c.PrioritizedList.DEFAULTPRIORITY,o=r.init?this.makeProcessor(r.init,a):null,i=r.config?this.makeProcessor(r.config,a):null,s=(r.preprocessors||[]).map((function(t){return n.makeProcessor(t,a)})),l=(r.postprocessors||[]).map((function(t){return n.makeProcessor(t,a)}));return new t(e,r.handler||{},r.fallback||{},r.items||{},r.tags||{},r.options||{},r.nodes||{},s,l,o,i,a)},t.create=function(e,r){void 0===r&&(r={});var n=t._create(e,r);return o.set(e,n),n},t.local=function(e){return void 0===e&&(e={}),t._create(\"\",e)},Object.defineProperty(t.prototype,\"init\",{get:function(){return this.initMethod?this.initMethod[0]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"config\",{get:function(){return this.configMethod?this.configMethod[0]:null},enumerable:!1,configurable:!0}),t}();e.Configuration=p,function(t){var e=new Map;t.set=function(t,r){e.set(t,r)},t.get=function(t){return e.get(t)},t.keys=function(){return e.keys()}}(o=e.ConfigurationHandler||(e.ConfigurationHandler={}));var f=function(){function t(t){var e,r,a,o;this.initMethod=new l.FunctionList,this.configMethod=new l.FunctionList,this.configurations=new c.PrioritizedList,this.handlers=new s.SubHandlers,this.items={},this.tags={},this.options={},this.nodes={};try{for(var i=n(t.slice().reverse()),u=i.next();!u.done;u=i.next()){var p=u.value;this.addPackage(p)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}try{for(var f=n(this.configurations),d=f.next();!d.done;d=f.next()){var h=d.value,m=h.item,g=h.priority;this.append(m,g)}}catch(t){a={error:t}}finally{try{d&&!d.done&&(o=f.return)&&o.call(f)}finally{if(a)throw a.error}}}return t.prototype.init=function(){this.initMethod.execute(this)},t.prototype.config=function(t){var e,r;this.configMethod.execute(this,t);try{for(var a=n(this.configurations),o=a.next();!o.done;o=a.next()){var i=o.value;this.addFilters(t,i.item)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}},t.prototype.addPackage=function(t){var e=\"string\"==typeof t?t:t[0],r=o.get(e);r&&this.configurations.add(r,\"string\"==typeof t?r.priority:t[1])},t.prototype.add=function(t,e,r){var a,o;void 0===r&&(r={}),this.append(t),this.configurations.add(t,t.priority),this.init();var s=e.parseOptions;s.nodeFactory.setCreators(t.nodes);try{for(var l=n(Object.keys(t.items)),c=l.next();!c.done;c=l.next()){var p=c.value;s.itemFactory.setNodeClass(p,t.items[p])}}catch(t){a={error:t}}finally{try{c&&!c.done&&(o=l.return)&&o.call(l)}finally{if(a)throw a.error}}u.TagsFactory.addTags(t.tags),i.defaultOptions(s.options,t.options),i.userOptions(s.options,r),this.addFilters(e,t),t.config&&t.config(this,e)},t.prototype.append=function(t,e){e=e||t.priority,t.initMethod&&this.initMethod.add(t.initMethod[0],t.initMethod[1]),t.configMethod&&this.configMethod.add(t.configMethod[0],t.configMethod[1]),this.handlers.add(t.handler,t.fallback,e),Object.assign(this.items,t.items),Object.assign(this.tags,t.tags),i.defaultOptions(this.options,t.options),Object.assign(this.nodes,t.nodes)},t.prototype.addFilters=function(t,e){var r,o,i,s;try{for(var l=n(e.preprocessors),c=l.next();!c.done;c=l.next()){var u=a(c.value,2),p=u[0],f=u[1];t.preFilters.add(p,f)}}catch(t){r={error:t}}finally{try{c&&!c.done&&(o=l.return)&&o.call(l)}finally{if(r)throw r.error}}try{for(var d=n(e.postprocessors),h=d.next();!h.done;h=d.next()){var m=a(h.value,2),g=m[0];f=m[1];t.postFilters.add(g,f)}}catch(t){i={error:t}}finally{try{h&&!h.done&&(s=d.return)&&s.call(d)}finally{if(i)throw i.error}}},t}();e.ParserConfiguration=f},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.EnvironmentMap=e.CommandMap=e.MacroMap=e.DelimiterMap=e.CharacterMap=e.AbstractParseMap=e.RegExpMap=e.AbstractSymbolMap=void 0;var l=r(14),c=r(16),u=function(){function t(t,e){this._name=t,this._parser=e,c.MapHandler.register(this)}return Object.defineProperty(t.prototype,\"name\",{get:function(){return this._name},enumerable:!1,configurable:!0}),t.prototype.parserFor=function(t){return this.contains(t)?this.parser:null},t.prototype.parse=function(t){var e=o(t,2),r=e[0],n=e[1],a=this.parserFor(n),i=this.lookup(n);return a&&i?a(r,i)||!0:null},Object.defineProperty(t.prototype,\"parser\",{get:function(){return this._parser},set:function(t){this._parser=t},enumerable:!1,configurable:!0}),t}();e.AbstractSymbolMap=u;var p=function(t){function e(e,r,n){var a=t.call(this,e,r)||this;return a._regExp=n,a}return a(e,t),e.prototype.contains=function(t){return this._regExp.test(t)},e.prototype.lookup=function(t){return this.contains(t)?t:null},e}(u);e.RegExpMap=p;var f=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.map=new Map,e}return a(e,t),e.prototype.lookup=function(t){return this.map.get(t)},e.prototype.contains=function(t){return this.map.has(t)},e.prototype.add=function(t,e){this.map.set(t,e)},e.prototype.remove=function(t){this.map.delete(t)},e}(u);e.AbstractParseMap=f;var d=function(t){function e(e,r,n){var a,s,c=t.call(this,e,r)||this;try{for(var u=i(Object.keys(n)),p=u.next();!p.done;p=u.next()){var f=p.value,d=n[f],h=o(\"string\"==typeof d?[d,null]:d,2),m=h[0],g=h[1],v=new l.Symbol(f,m,g);c.add(f,v)}}catch(t){a={error:t}}finally{try{p&&!p.done&&(s=u.return)&&s.call(u)}finally{if(a)throw a.error}}return c}return a(e,t),e}(f);e.CharacterMap=d;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),e.prototype.parse=function(e){var r=o(e,2),n=r[0],a=r[1];return t.prototype.parse.call(this,[n,\"\\\\\"+a])},e}(d);e.DelimiterMap=h;var m=function(t){function e(e,r,n){var a,s,c=t.call(this,e,null)||this;try{for(var u=i(Object.keys(r)),p=u.next();!p.done;p=u.next()){var f=p.value,d=r[f],h=o(\"string\"==typeof d?[d]:d),m=h[0],g=h.slice(1),v=new l.Macro(f,n[m],g);c.add(f,v)}}catch(t){a={error:t}}finally{try{p&&!p.done&&(s=u.return)&&s.call(u)}finally{if(a)throw a.error}}return c}return a(e,t),e.prototype.parserFor=function(t){var e=this.lookup(t);return e?e.func:null},e.prototype.parse=function(t){var e=o(t,2),r=e[0],n=e[1],a=this.lookup(n),i=this.parserFor(n);return a&&i?i.apply(void 0,s([r,a.symbol],a.args))||!0:null},e}(f);e.MacroMap=m;var g=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),e.prototype.parse=function(t){var e=o(t,2),r=e[0],n=e[1],a=this.lookup(n),i=this.parserFor(n);if(!a||!i)return null;if(!i)return null;var l=r.currentCS;r.currentCS=\"\\\\\"+n;var c=i.apply(void 0,s([r,\"\\\\\"+a.symbol],a.args));return r.currentCS=l,c||!0},e}(m);e.CommandMap=g;var v=function(t){function e(e,r,n,a){var o=t.call(this,e,n,a)||this;return o.parser=r,o}return a(e,t),e.prototype.parse=function(t){var e=o(t,2),r=e[0],n=e[1],a=this.lookup(n),i=this.parserFor(n);return a&&i?(this.parser(r,a.symbol,i,a.args),!0):null},e}(m);e.EnvironmentMap=v},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(e,r){for(var n=[],a=2;a<arguments.length;a++)n[a-2]=arguments[a];this.id=e,this.message=t.processString(r,n)}return t.processString=function(e,r){for(var n=e.split(t.pattern),a=1,o=n.length;a<o;a+=2){var i=n[a].charAt(0);if(i>=\"0\"&&i<=\"9\")n[a]=r[parseInt(n[a],10)-1],\"number\"==typeof n[a]&&(n[a]=n[a].toString());else if(\"{\"===i){if((i=n[a].substr(1))>=\"0\"&&i<=\"9\")n[a]=r[parseInt(n[a].substr(1,n[a].length-2),10)-1],\"number\"==typeof n[a]&&(n[a]=n[a].toString());else n[a].match(/^\\{([a-z]+):%(\\d+)\\|(.*)\\}$/)&&(n[a]=\"%\"+n[a])}null==n[a]&&(n[a]=\"???\")}return n.join(\"\")},t.pattern=/%(\\d+|\\{\\d+\\}|\\{[a-z]+:\\%\\d+(?:\\|(?:%\\{\\d+\\}|%.|[^\\}])*)+\\}|.)/g,t}();e.default=n},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var i,s=r(5),l=r(80);!function(t){var e=new Map([[\"autoOP\",!0],[\"fnOP\",!0],[\"movesupsub\",!0],[\"subsupOK\",!0],[\"texprimestyle\",!0],[\"useHeight\",!0],[\"variantForm\",!0],[\"withDelims\",!0],[\"open\",!0],[\"close\",!0]]);function r(t,r){var a,o;try{for(var i=n(Object.keys(r)),s=i.next();!s.done;s=i.next()){var l=s.value,c=r[l];\"texClass\"===l?(t.texClass=c,t.setProperty(l,c)):\"movablelimits\"===l?(t.setProperty(\"movablelimits\",c),(t.isKind(\"mo\")||t.isKind(\"mstyle\"))&&t.attributes.set(\"movablelimits\",c)):\"inferred\"===l||(e.has(l)?t.setProperty(l,c):t.attributes.set(l,c))}}catch(t){a={error:t}}finally{try{s&&!s.done&&(o=i.return)&&o.call(i)}finally{if(a)throw a.error}}}function a(t,e,r){t.childNodes[e]=r,r&&(r.parent=t)}function i(t,e){return t.isKind(e)}t.createEntity=function(t){return String.fromCodePoint(parseInt(t,16))},t.getChildren=function(t){return t.childNodes},t.getText=function(t){return t.getText()},t.appendChildren=function(t,e){var r,a;try{for(var o=n(e),i=o.next();!i.done;i=o.next()){var s=i.value;t.appendChild(s)}}catch(t){r={error:t}}finally{try{i&&!i.done&&(a=o.return)&&a.call(o)}finally{if(r)throw r.error}}},t.setAttribute=function(t,e,r){t.attributes.set(e,r)},t.setProperty=function(t,e,r){t.setProperty(e,r)},t.setProperties=r,t.getProperty=function(t,e){return t.getProperty(e)},t.getAttribute=function(t,e){return t.attributes.get(e)},t.removeProperties=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];t.removeProperty.apply(t,o(e))},t.getChildAt=function(t,e){return t.childNodes[e]},t.setChild=a,t.copyChildren=function(t,e){for(var r=t.childNodes,n=0;n<r.length;n++)a(e,n,r[n])},t.copyAttributes=function(t,e){e.attributes=t.attributes,r(e,t.getAllProperties())},t.isType=i,t.isEmbellished=function(t){return t.isEmbellished},t.getTexClass=function(t){return t.texClass},t.getCoreMO=function(t){return t.coreMO()},t.isNode=function(t){return t instanceof s.AbstractMmlNode||t instanceof s.AbstractMmlEmptyNode},t.isInferred=function(t){return t.isInferred},t.getForm=function(t){var e,r;if(!i(t,\"mo\"))return null;var a=t,o=a.getForms();try{for(var s=n(o),c=s.next();!c.done;c=s.next()){var u=c.value,p=l.MmlMo.OPTABLE[u][a.getText()];if(p)return p}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return null}}(i||(i={})),e.default=i},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o,i=r(5),s=r(3),l=r(6),c=r(2),u=r(13);r(71),function(t){var e={em:function(t){return t},ex:function(t){return.43*t},pt:function(t){return t/10},pc:function(t){return 1.2*t},px:function(t){return 7.2*t/72},in:function(t){return 7.2*t},cm:function(t){return 7.2*t/2.54},mm:function(t){return 7.2*t/25.4},mu:function(t){return t/18}},r=\"([-+]?([.,]\\\\d+|\\\\d+([.,]\\\\d*)?))\",o=\"(pt|em|ex|mu|px|mm|cm|in|pc)\",p=RegExp(\"^\\\\s*\"+r+\"\\\\s*\"+o+\"\\\\s*$\"),f=RegExp(\"^\\\\s*\"+r+\"\\\\s*\"+o+\" ?\");function d(t,r){void 0===r&&(r=!1);var a=t.match(r?f:p);return a?function(t){var r=n(t,3),a=r[0],o=r[1],i=r[2];if(\"mu\"!==o)return[a,o,i];return[h(e[o](parseFloat(a||\"1\"))).slice(0,-2),\"em\",i]}([a[1].replace(/,/,\".\"),a[4],a[0].length]):[null,null,0]}function h(t){return Math.abs(t)<6e-4?\"0em\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"em\"}function m(t,e,r){\"{\"!==e&&\"}\"!==e||(e=\"\\\\\"+e);var n=\"{\\\\bigg\"+r+\" \"+e+\"}\",a=\"{\\\\big\"+r+\" \"+e+\"}\";return new l.default(\"\\\\mathchoice\"+n+a+a+a,{},t).mml()}function g(t,e,r){e=e.replace(/^\\s+/,u.entities.nbsp).replace(/\\s+$/,u.entities.nbsp);var n=t.create(\"text\",e);return t.create(\"node\",\"mtext\",[],r,n)}function v(t,e,r){if(r.match(/^[a-z]/i)&&e.match(/(^|[^\\\\])(\\\\\\\\)*\\\\[a-z]+$/i)&&(e+=\" \"),e.length+r.length>t.configuration.options.maxBuffer)throw new c.default(\"MaxBufferSize\",\"MathJax internal buffer size exceeded; is there a recursive macro call?\");return e+r}function y(t,e){for(;e>0;)t=t.trim().slice(1,-1),e--;return t.trim()}function b(t,e){for(var r=t.length,n=0,a=\"\",o=0,i=0,s=!0,l=!1;o<r;){var u=t[o++];switch(u){case\" \":break;case\"{\":s?i++:(l=!1,i>n&&(i=n)),n++;break;case\"}\":n&&n--,(s||l)&&(i--,l=!0),s=!1;break;default:if(!n&&-1!==e.indexOf(u))return[l?\"true\":y(a,i),u,t.slice(o)];s=!1,l=!1}a+=u}if(n)throw new c.default(\"ExtraOpenMissingClose\",\"Extra open brace or missing close brace\");return[l?\"true\":y(a,i),\"\",t.slice(o)]}t.matchDimen=d,t.dimen2em=function(t){var r=n(d(t),2),a=r[0],o=r[1],i=parseFloat(a||\"1\"),s=e[o];return s?s(i):0},t.Em=h,t.fenced=function(t,e,r,n,a){void 0===a&&(a=\"\");var o,c=t.nodeFactory,u=c.create(\"node\",\"mrow\",[],{open:e,close:n,texClass:i.TEXCLASS.INNER});if(a)o=new l.default(\"\\\\\"+a+\"l\"+e,t.parser.stack.env,t).mml();else{var p=c.create(\"text\",e);o=c.create(\"node\",\"mo\",[],{fence:!0,stretchy:!0,symmetric:!0,texClass:i.TEXCLASS.OPEN},p)}if(s.default.appendChildren(u,[o]),s.default.isType(r,\"mrow\")&&s.default.isInferred(r)?s.default.appendChildren(u,s.default.getChildren(r)):s.default.appendChildren(u,[r]),a)o=new l.default(\"\\\\\"+a+\"r\"+n,t.parser.stack.env,t).mml();else{var f=c.create(\"text\",n);o=c.create(\"node\",\"mo\",[],{fence:!0,stretchy:!0,symmetric:!0,texClass:i.TEXCLASS.CLOSE},f)}return s.default.appendChildren(u,[o]),u},t.fixedFence=function(t,e,r,n){var a=t.nodeFactory.create(\"node\",\"mrow\",[],{open:e,close:n,texClass:i.TEXCLASS.ORD});return e&&s.default.appendChildren(a,[m(t,e,\"l\")]),s.default.isType(r,\"mrow\")?s.default.appendChildren(a,s.default.getChildren(r)):s.default.appendChildren(a,[r]),n&&s.default.appendChildren(a,[m(t,n,\"r\")]),a},t.mathPalette=m,t.fixInitialMO=function(t,e){for(var r=0,n=e.length;r<n;r++){var a=e[r];if(a&&!s.default.isType(a,\"mspace\")&&(!s.default.isType(a,\"TeXAtom\")||s.default.getChildren(a)[0]&&s.default.getChildren(s.default.getChildren(a)[0]).length)){if(s.default.isEmbellished(a)||s.default.isType(a,\"TeXAtom\")&&s.default.getTexClass(a)===i.TEXCLASS.REL){var o=t.nodeFactory.create(\"node\",\"mi\");e.unshift(o)}break}}},t.internalMath=function(t,e,r,n){if(t.configuration.options.internalMath)return t.configuration.options.internalMath(t,e,r,n);var a,o,i=n||t.stack.env.font,s=i?{mathvariant:i}:{},u=[],p=0,f=0,d=\"\",h=0;if(e.match(/\\\\?[${}\\\\]|\\\\\\(|\\\\(eq)?ref\\s*\\{/)){for(;p<e.length;)if(\"$\"===(a=e.charAt(p++)))\"$\"===d&&0===h?(o=t.create(\"node\",\"TeXAtom\",[new l.default(e.slice(f,p-1),{},t.configuration).mml()]),u.push(o),d=\"\",f=p):\"\"===d&&(f<p-1&&u.push(g(t,e.slice(f,p-1),s)),d=\"$\",f=p);else if(\"{\"===a&&\"\"!==d)h++;else if(\"}\"===a)if(\"}\"===d&&0===h){var m=new l.default(e.slice(f,p),{},t.configuration).mml();o=t.create(\"node\",\"TeXAtom\",[m],s),u.push(o),d=\"\",f=p}else\"\"!==d&&h&&h--;else if(\"\\\\\"===a)if(\"\"===d&&e.substr(p).match(/^(eq)?ref\\s*\\{/)){var v=RegExp[\"$&\"].length;f<p-1&&u.push(g(t,e.slice(f,p-1),s)),d=\"}\",f=p-1,p+=v}else\"(\"===(a=e.charAt(p++))&&\"\"===d?(f<p-2&&u.push(g(t,e.slice(f,p-2),s)),d=\")\",f=p):\")\"===a&&\")\"===d&&0===h?(o=t.create(\"node\",\"TeXAtom\",[new l.default(e.slice(f,p-2),{},t.configuration).mml()]),u.push(o),d=\"\",f=p):a.match(/[${}\\\\]/)&&\"\"===d&&(p--,e=e.substr(0,p-1)+e.substr(p));if(\"\"!==d)throw new c.default(\"MathNotTerminated\",\"Math not terminated in text box\")}return f<e.length&&u.push(g(t,e.slice(f),s)),null!=r?u=[t.create(\"node\",\"mstyle\",u,{displaystyle:!1,scriptlevel:r})]:u.length>1&&(u=[t.create(\"node\",\"mrow\",u)]),u},t.internalText=g,t.trimSpaces=function(t){if(\"string\"!=typeof t)return t;var e=t.trim();return e.match(/\\\\$/)&&t.match(/ $/)&&(e+=\" \"),e},t.setArrayAlign=function(e,r){return\"t\"===(r=t.trimSpaces(r||\"\"))?e.arraydef.align=\"baseline 1\":\"b\"===r?e.arraydef.align=\"baseline -1\":\"c\"===r?e.arraydef.align=\"center\":r&&(e.arraydef.align=r),e},t.substituteArgs=function(t,e,r){for(var n=\"\",a=\"\",o=0;o<r.length;){var i=r.charAt(o++);if(\"\\\\\"===i)n+=i+r.charAt(o++);else if(\"#\"===i)if(\"#\"===(i=r.charAt(o++)))n+=i;else{if(!i.match(/[1-9]/)||parseInt(i,10)>e.length)throw new c.default(\"IllegalMacroParam\",\"Illegal macro parameter reference\");a=v(t,v(t,a,n),e[parseInt(i,10)-1]),n=\"\"}else n+=i}return v(t,a,n)},t.addArgs=v,t.checkEqnEnv=function(t){if(t.stack.global.eqnenv)throw new c.default(\"ErroneousNestingEq\",\"Erroneous nesting of equation structures\");t.stack.global.eqnenv=!0},t.MmlFilterAttribute=function(t,e,r){return r},t.getFontDef=function(t){var e=t.stack.env.font;return e?{mathvariant:e}:{}},t.keyvalOptions=function(t,e,r){var o,i;void 0===e&&(e=null),void 0===r&&(r=!1);var s=function(t){var e,r,a,o,i,s={},l=t;for(;l;)o=(e=n(b(l,[\"=\",\",\"]),3))[0],a=e[1],l=e[2],\"=\"===a?(i=(r=n(b(l,[\",\"]),3))[0],a=r[1],l=r[2],i=\"false\"===i||\"true\"===i?JSON.parse(i):i,s[o]=i):o&&(s[o]=!0);return s}(t);if(e)try{for(var l=a(Object.keys(s)),u=l.next();!u.done;u=l.next()){var p=u.value;if(!e.hasOwnProperty(p)){if(r)throw new c.default(\"InvalidOption\",\"Invalid optional argument: %1\",p);delete s[p]}}}catch(t){o={error:t}}finally{try{u&&!u.done&&(i=l.return)&&i.call(l)}finally{if(o)throw o.error}}return s}}(o||(o={})),e.default=o},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,e.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,e.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,e.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,e.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,e.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,e.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,e.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,e.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,e.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(4),s=r(23),l=r(2),c=r(5),u=function(){function t(t,e,r){var a,o;this._string=t,this.configuration=r,this.macroCount=0,this.i=0,this.currentCS=\"\";var i,l=e.hasOwnProperty(\"isInner\"),c=e.isInner;if(delete e.isInner,e){i={};try{for(var u=n(Object.keys(e)),p=u.next();!p.done;p=u.next()){var f=p.value;i[f]=e[f]}}catch(t){a={error:t}}finally{try{p&&!p.done&&(o=u.return)&&o.call(u)}finally{if(a)throw a.error}}}this.configuration.pushParser(this),this.stack=new s.default(this.itemFactory,i,!l||c),this.Parse(),this.Push(this.itemFactory.create(\"stop\"))}return Object.defineProperty(t.prototype,\"options\",{get:function(){return this.configuration.options},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"itemFactory\",{get:function(){return this.configuration.itemFactory},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"tags\",{get:function(){return this.configuration.tags},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"string\",{get:function(){return this._string},set:function(t){this._string=t},enumerable:!1,configurable:!0}),t.prototype.parse=function(t,e){return this.configuration.handlers.get(t).parse(e)},t.prototype.lookup=function(t,e){return this.configuration.handlers.get(t).lookup(e)},t.prototype.contains=function(t,e){return this.configuration.handlers.get(t).contains(e)},t.prototype.toString=function(){var t,e,r=\"\";try{for(var a=n(Array.from(this.configuration.handlers.keys())),o=a.next();!o.done;o=a.next()){var i=o.value;r+=i+\": \"+this.configuration.handlers.get(i)+\"\\n\"}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}return r},t.prototype.Parse=function(){for(var t;this.i<this.string.length;)t=this.getCodePoint(),this.i+=t.length,this.parse(\"character\",[this,t])},t.prototype.Push=function(t){t instanceof c.AbstractMmlNode&&t.isInferred?this.PushAll(t.childNodes):this.stack.Push(t)},t.prototype.PushAll=function(t){var e,r;try{for(var a=n(t),o=a.next();!o.done;o=a.next()){var i=o.value;this.stack.Push(i)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}},t.prototype.mml=function(){if(!this.stack.Top().isKind(\"mml\"))return null;var t=this.stack.Top().First;return this.configuration.popParser(),t},t.prototype.convertDelimiter=function(t){var e=this.lookup(\"delimiter\",t);return e?e.char:null},t.prototype.getCodePoint=function(){var t=this.string.codePointAt(this.i);return void 0===t?\"\":String.fromCodePoint(t)},t.prototype.nextIsSpace=function(){return!!this.string.charAt(this.i).match(/\\s/)},t.prototype.GetNext=function(){for(;this.nextIsSpace();)this.i++;return this.getCodePoint()},t.prototype.GetCS=function(){var t=this.string.slice(this.i).match(/^(([a-z]+) ?|[\\uD800-\\uDBFF].|.)/i);return t?(this.i+=t[0].length,t[2]||t[1]):(this.i++,\" \")},t.prototype.GetArgument=function(t,e){switch(this.GetNext()){case\"\":if(!e)throw new l.default(\"MissingArgFor\",\"Missing argument for %1\",this.currentCS);return null;case\"}\":if(!e)throw new l.default(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\");return null;case\"\\\\\":return this.i++,\"\\\\\"+this.GetCS();case\"{\":for(var r=++this.i,n=1;this.i<this.string.length;)switch(this.string.charAt(this.i++)){case\"\\\\\":this.i++;break;case\"{\":n++;break;case\"}\":if(0==--n)return this.string.slice(r,this.i-1)}throw new l.default(\"MissingCloseBrace\",\"Missing close brace\")}var a=this.getCodePoint();return this.i+=a.length,a},t.prototype.GetBrackets=function(t,e){if(\"[\"!==this.GetNext())return e;for(var r=++this.i,n=0;this.i<this.string.length;)switch(this.string.charAt(this.i++)){case\"{\":n++;break;case\"\\\\\":this.i++;break;case\"}\":if(n--<=0)throw new l.default(\"ExtraCloseLooking\",\"Extra close brace while looking for %1\",\"']'\");break;case\"]\":if(0===n)return this.string.slice(r,this.i-1)}throw new l.default(\"MissingCloseBracket\",\"Could not find closing ']' for argument to %1\",this.currentCS)},t.prototype.GetDelimiter=function(t,e){var r=this.GetNext();if(this.i+=r.length,this.i<=this.string.length&&(\"\\\\\"===r?r+=this.GetCS():\"{\"===r&&e&&(this.i--,r=this.GetArgument(t)),this.contains(\"delimiter\",r)))return this.convertDelimiter(r);throw new l.default(\"MissingOrUnrecognizedDelim\",\"Missing or unrecognized delimiter for %1\",this.currentCS)},t.prototype.GetDimen=function(t){if(\"{\"===this.GetNext()){var e=this.GetArgument(t),r=a(i.default.matchDimen(e),2),n=r[0],o=r[1];if(n)return n+o}else{e=this.string.slice(this.i);var s=a(i.default.matchDimen(e,!0),3),c=(n=s[0],o=s[1],s[2]);if(n)return this.i+=c,n+o}throw new l.default(\"MissingDimOrUnits\",\"Missing dimension or its units for %1\",this.currentCS)},t.prototype.GetUpTo=function(t,e){for(;this.nextIsSpace();)this.i++;for(var r=this.i,n=0;this.i<this.string.length;){var a=this.i,o=this.GetNext();switch(this.i+=o.length,o){case\"\\\\\":o+=this.GetCS();break;case\"{\":n++;break;case\"}\":if(0===n)throw new l.default(\"ExtraCloseLooking\",\"Extra close brace while looking for %1\",e);n--}if(0===n&&o===e)return this.string.slice(r,a)}throw new l.default(\"TokenNotFoundForCommand\",\"Could not find %1 for %2\",e,this.currentCS)},t.prototype.ParseArg=function(e){return new t(this.GetArgument(e),this.stack.env,this.configuration).mml()},t.prototype.ParseUpTo=function(e,r){return new t(this.GetUpTo(e,r),this.stack.env,this.configuration).mml()},t.prototype.GetDelimiterArg=function(t){var e=i.default.trimSpaces(this.GetArgument(t));if(\"\"===e)return null;if(this.contains(\"delimiter\",e))return e;throw new l.default(\"MissingOrUnrecognizedDelim\",\"Missing or unrecognized delimiter for %1\",this.currentCS)},t.prototype.GetStar=function(){var t=\"*\"===this.GetNext();return t&&this.i++,t},t.prototype.create=function(t){for(var e,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return(e=this.configuration.nodeFactory).create.apply(e,o([t],r))},t}();e.default=u},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TexConstant=void 0,function(t){t.Variant={NORMAL:\"normal\",BOLD:\"bold\",ITALIC:\"italic\",BOLDITALIC:\"bold-italic\",DOUBLESTRUCK:\"double-struck\",FRAKTUR:\"fraktur\",BOLDFRAKTUR:\"bold-fraktur\",SCRIPT:\"script\",BOLDSCRIPT:\"bold-script\",SANSSERIF:\"sans-serif\",BOLDSANSSERIF:\"bold-sans-serif\",SANSSERIFITALIC:\"sans-serif-italic\",SANSSERIFBOLDITALIC:\"sans-serif-bold-italic\",MONOSPACE:\"monospace\",INITIAL:\"inital\",TAILED:\"tailed\",LOOPED:\"looped\",STRETCHED:\"stretched\",CALLIGRAPHIC:\"-tex-calligraphic\",OLDSTYLE:\"-tex-oldstyle\"},t.Form={PREFIX:\"prefix\",INFIX:\"infix\",POSTFIX:\"postfix\"},t.LineBreak={AUTO:\"auto\",NEWLINE:\"newline\",NOBREAK:\"nobreak\",GOODBREAK:\"goodbreak\",BADBREAK:\"badbreak\"},t.LineBreakStyle={BEFORE:\"before\",AFTER:\"after\",DUPLICATE:\"duplicate\",INFIXLINBREAKSTYLE:\"infixlinebreakstyle\"},t.IndentAlign={LEFT:\"left\",CENTER:\"center\",RIGHT:\"right\",AUTO:\"auto\",ID:\"id\",INDENTALIGN:\"indentalign\"},t.IndentShift={INDENTSHIFT:\"indentshift\"},t.LineThickness={THIN:\"thin\",MEDIUM:\"medium\",THICK:\"thick\"},t.Notation={LONGDIV:\"longdiv\",ACTUARIAL:\"actuarial\",PHASORANGLE:\"phasorangle\",RADICAL:\"radical\",BOX:\"box\",ROUNDEDBOX:\"roundedbox\",CIRCLE:\"circle\",LEFT:\"left\",RIGHT:\"right\",TOP:\"top\",BOTTOM:\"bottom\",UPDIAGONALSTRIKE:\"updiagonalstrike\",DOWNDIAGONALSTRIKE:\"downdiagonalstrike\",VERTICALSTRIKE:\"verticalstrike\",HORIZONTALSTRIKE:\"horizontalstrike\",NORTHEASTARROW:\"northeastarrow\",MADRUWB:\"madruwb\",UPDIAGONALARROW:\"updiagonalarrow\"},t.Align={TOP:\"top\",BOTTOM:\"bottom\",CENTER:\"center\",BASELINE:\"baseline\",AXIS:\"axis\",LEFT:\"left\",RIGHT:\"right\"},t.Lines={NONE:\"none\",SOLID:\"solid\",DASHED:\"dashed\"},t.Side={LEFT:\"left\",RIGHT:\"right\",LEFTOVERLAP:\"leftoverlap\",RIGHTOVERLAP:\"rightoverlap\"},t.Width={AUTO:\"auto\",FIT:\"fit\"},t.Actiontype={TOGGLE:\"toggle\",STATUSLINE:\"statusline\",TOOLTIP:\"tooltip\",INPUT:\"input\"},t.Length={VERYVERYTHINMATHSPACE:\"veryverythinmathspace\",VERYTHINMATHSPACE:\"verythinmathspace\",THINMATHSPACE:\"thinmathspace\",MEDIUMMATHSPACE:\"mediummathspace\",THICKMATHSPACE:\"thickmathspace\",VERYTHICKMATHSPACE:\"verythickmathspace\",VERYVERYTHICKMATHSPACE:\"veryverythickmathspace\",NEGATIVEVERYVERYTHINMATHSPACE:\"negativeveryverythinmathspace\",NEGATIVEVERYTHINMATHSPACE:\"negativeverythinmathspace\",NEGATIVETHINMATHSPACE:\"negativethinmathspace\",NEGATIVEMEDIUMMATHSPACE:\"negativemediummathspace\",NEGATIVETHICKMATHSPACE:\"negativethickmathspace\",NEGATIVEVERYTHICKMATHSPACE:\"negativeverythickmathspace\",NEGATIVEVERYVERYTHICKMATHSPACE:\"negativeveryverythickmathspace\"},t.Overflow={LINBREAK:\"linebreak\",SCROLL:\"scroll\",ELIDE:\"elide\",TRUNCATE:\"truncate\",SCALE:\"scale\"},t.Unit={EM:\"em\",EX:\"ex\",PX:\"px\",IN:\"in\",CM:\"cm\",MM:\"mm\",PT:\"pt\",PC:\"pc\"}}(e.TexConstant||(e.TexConstant={}))},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(15),o=r(3),i=r(2),s=r(6),l=r(7),c=r(4),u=r(5),p=r(9),f=r(13);r(71),r(83),r(84);var d={},h={fontfamily:1,fontsize:1,fontweight:1,fontstyle:1,color:1,background:1,id:1,class:1,href:1,style:1};function m(t,e){var r=t.stack.env,n=r.inRoot;r.inRoot=!0;var a=new s.default(e,r,t.configuration),o=a.mml(),i=a.stack.global;if(i.leftRoot||i.upRoot){var l={};i.leftRoot&&(l.width=i.leftRoot),i.upRoot&&(l.voffset=i.upRoot,l.height=i.upRoot),o=t.create(\"node\",\"mpadded\",[o],l)}return r.inRoot=n,o}d.Open=function(t,e){t.Push(t.itemFactory.create(\"open\"))},d.Close=function(t,e){t.Push(t.itemFactory.create(\"close\"))},d.Tilde=function(t,e){t.Push(t.create(\"token\",\"mtext\",{},f.entities.nbsp))},d.Space=function(t,e){},d.Superscript=function(t,e){var r,a,s;t.GetNext().match(/\\d/)&&(t.string=t.string.substr(0,t.i+1)+\" \"+t.string.substr(t.i+1));var l=t.stack.Top();l.isKind(\"prime\")?(s=(r=n(l.Peek(2),2))[0],a=r[1],t.stack.Pop()):(s=t.stack.Prev())||(s=t.create(\"token\",\"mi\",{},\"\"));var c=o.default.getProperty(s,\"movesupsub\"),u=o.default.isType(s,\"msubsup\")?s.sup:s.over;if(o.default.isType(s,\"msubsup\")&&!o.default.isType(s,\"msup\")&&o.default.getChildAt(s,s.sup)||o.default.isType(s,\"munderover\")&&!o.default.isType(s,\"mover\")&&o.default.getChildAt(s,s.over)&&!o.default.getProperty(s,\"subsupOK\"))throw new i.default(\"DoubleExponent\",\"Double exponent: use braces to clarify\");o.default.isType(s,\"msubsup\")&&!o.default.isType(s,\"msup\")||(c?((!o.default.isType(s,\"munderover\")||o.default.isType(s,\"mover\")||o.default.getChildAt(s,s.over))&&(s=t.create(\"node\",\"munderover\",[s],{movesupsub:!0})),u=s.over):u=(s=t.create(\"node\",\"msubsup\",[s])).sup),t.Push(t.itemFactory.create(\"subsup\",s).setProperties({position:u,primes:a,movesupsub:c}))},d.Subscript=function(t,e){var r,a,s;t.GetNext().match(/\\d/)&&(t.string=t.string.substr(0,t.i+1)+\" \"+t.string.substr(t.i+1));var l=t.stack.Top();l.isKind(\"prime\")?(s=(r=n(l.Peek(2),2))[0],a=r[1],t.stack.Pop()):(s=t.stack.Prev())||(s=t.create(\"token\",\"mi\",{},\"\"));var c=o.default.getProperty(s,\"movesupsub\"),u=o.default.isType(s,\"msubsup\")?s.sub:s.under;if(o.default.isType(s,\"msubsup\")&&!o.default.isType(s,\"msup\")&&o.default.getChildAt(s,s.sub)||o.default.isType(s,\"munderover\")&&!o.default.isType(s,\"mover\")&&o.default.getChildAt(s,s.under)&&!o.default.getProperty(s,\"subsupOK\"))throw new i.default(\"DoubleSubscripts\",\"Double subscripts: use braces to clarify\");o.default.isType(s,\"msubsup\")&&!o.default.isType(s,\"msup\")||(c?((!o.default.isType(s,\"munderover\")||o.default.isType(s,\"mover\")||o.default.getChildAt(s,s.under))&&(s=t.create(\"node\",\"munderover\",[s],{movesupsub:!0})),u=s.under):u=(s=t.create(\"node\",\"msubsup\",[s])).sub),t.Push(t.itemFactory.create(\"subsup\",s).setProperties({position:u,primes:a,movesupsub:c}))},d.Prime=function(t,e){var r=t.stack.Prev();if(r||(r=t.create(\"node\",\"mi\")),o.default.isType(r,\"msubsup\")&&!o.default.isType(r,\"msup\")&&o.default.getChildAt(r,r.sup))throw new i.default(\"DoubleExponentPrime\",\"Prime causes double exponent: use braces to clarify\");var n=\"\";t.i--;do{n+=f.entities.prime,t.i++,e=t.GetNext()}while(\"'\"===e||e===f.entities.rquote);n=[\"\",\"\\u2032\",\"\\u2033\",\"\\u2034\",\"\\u2057\"][n.length]||n;var a=t.create(\"token\",\"mo\",{},n);t.Push(t.itemFactory.create(\"prime\",r,a))},d.Comment=function(t,e){for(;t.i<t.string.length&&\"\\n\"!==t.string.charAt(t.i);)t.i++},d.Hash=function(t,e){throw new i.default(\"CantUseHash1\",\"You can't use 'macro parameter character #' in math mode\")},d.SetFont=function(t,e,r){t.stack.env.font=r},d.SetStyle=function(t,e,r,n,a){t.stack.env.style=r,t.stack.env.level=a,t.Push(t.itemFactory.create(\"style\").setProperty(\"styles\",{displaystyle:n,scriptlevel:a}))},d.SetSize=function(t,e,r){t.stack.env.size=r,t.Push(t.itemFactory.create(\"style\").setProperty(\"styles\",{mathsize:r+\"em\"}))},d.Spacer=function(t,e,r){var n=t.create(\"node\",\"mspace\",[],{width:r}),a=t.create(\"node\",\"mstyle\",[n],{scriptlevel:0});t.Push(a)},d.LeftRight=function(t,e){var r=e.substr(1);t.Push(t.itemFactory.create(r).setProperty(\"delim\",t.GetDelimiter(e)))},d.Middle=function(t,e){var r=t.GetDelimiter(e),n=t.create(\"node\",\"TeXAtom\",[],{texClass:u.TEXCLASS.CLOSE});if(t.Push(n),!t.stack.Top().isKind(\"left\"))throw new i.default(\"MisplacedMiddle\",\"%1 must be within \\\\left and \\\\right\",t.currentCS);n=t.create(\"token\",\"mo\",{stretchy:!0},r),t.Push(n),n=t.create(\"node\",\"TeXAtom\",[],{texClass:u.TEXCLASS.OPEN}),t.Push(n)},d.NamedFn=function(t,e,r){r||(r=e.substr(1));var n=t.create(\"token\",\"mi\",{texClass:u.TEXCLASS.OP},r);t.Push(t.itemFactory.create(\"fn\",n))},d.NamedOp=function(t,e,r){r||(r=e.substr(1)),r=r.replace(/&thinsp;/,\"\\u2006\");var n=t.create(\"token\",\"mo\",{movablelimits:!0,movesupsub:!0,form:l.TexConstant.Form.PREFIX,texClass:u.TEXCLASS.OP},r);t.Push(n)},d.Limits=function(t,e,r){var n=t.stack.Prev(!0);if(!n||o.default.getTexClass(o.default.getCoreMO(n))!==u.TEXCLASS.OP&&null==o.default.getProperty(n,\"movesupsub\"))throw new i.default(\"MisplacedLimits\",\"%1 is allowed only on operators\",t.currentCS);var a,s=t.stack.Top();o.default.isType(n,\"munderover\")&&!r?(a=t.create(\"node\",\"msubsup\"),o.default.copyChildren(n,a),n=s.Last=a):o.default.isType(n,\"msubsup\")&&r&&(a=t.create(\"node\",\"munderover\"),o.default.copyChildren(n,a),n=s.Last=a),o.default.setProperty(n,\"movesupsub\",!!r),o.default.setProperties(o.default.getCoreMO(n),{movablelimits:!1}),(o.default.getAttribute(n,\"movablelimits\")||o.default.getProperty(n,\"movablelimits\"))&&o.default.setProperties(n,{movablelimits:!1})},d.Over=function(t,e,r,n){var a=t.itemFactory.create(\"over\").setProperty(\"name\",t.currentCS);r||n?(a.setProperty(\"open\",r),a.setProperty(\"close\",n)):e.match(/withdelims$/)&&(a.setProperty(\"open\",t.GetDelimiter(e)),a.setProperty(\"close\",t.GetDelimiter(e))),e.match(/^\\\\above/)?a.setProperty(\"thickness\",t.GetDimen(e)):(e.match(/^\\\\atop/)||r||n)&&a.setProperty(\"thickness\",0),t.Push(a)},d.Frac=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e),a=t.create(\"node\",\"mfrac\",[r,n]);t.Push(a)},d.Sqrt=function(t,e){var r=t.GetBrackets(e),n=t.GetArgument(e);\"\\\\frac\"===n&&(n+=\"{\"+t.GetArgument(n)+\"}{\"+t.GetArgument(n)+\"}\");var a=new s.default(n,t.stack.env,t.configuration).mml();a=r?t.create(\"node\",\"mroot\",[a,m(t,r)]):t.create(\"node\",\"msqrt\",[a]),t.Push(a)},d.Root=function(t,e){var r=t.GetUpTo(e,\"\\\\of\"),n=t.ParseArg(e),a=t.create(\"node\",\"mroot\",[n,m(t,r)]);t.Push(a)},d.MoveRoot=function(t,e,r){if(!t.stack.env.inRoot)throw new i.default(\"MisplacedMoveRoot\",\"%1 can appear only within a root\",t.currentCS);if(t.stack.global[r])throw new i.default(\"MultipleMoveRoot\",\"Multiple use of %1\",t.currentCS);var n=t.GetArgument(e);if(!n.match(/-?[0-9]+/))throw new i.default(\"IntegerArg\",\"The argument to %1 must be an integer\",t.currentCS);\"-\"!==(n=parseInt(n,10)/15+\"em\").substr(0,1)&&(n=\"+\"+n),t.stack.global[r]=n},d.Accent=function(t,e,r,n){var a=t.ParseArg(e),i=c.default.getFontDef(t);i.accent=!0;var s=o.default.createEntity(r),l=t.create(\"token\",\"mo\",i,s);o.default.setAttribute(l,\"stretchy\",!!n);var u=o.default.isEmbellished(a)?o.default.getCoreMO(a):a;o.default.isType(u,\"mo\")&&o.default.setProperties(u,{movablelimits:!1});var p=t.create(\"node\",\"munderover\");o.default.setChild(p,0,a),o.default.setChild(p,1,null),o.default.setChild(p,2,l);var f=t.create(\"node\",\"TeXAtom\",[p]);t.Push(f)},d.UnderOver=function(t,e,r,n,a){var i,s=t.ParseArg(e),l=o.default.getForm(s);(l&&l[3]&&l[3].movablelimits||o.default.getProperty(s,\"movablelimits\"))&&o.default.setProperties(s,{movablelimits:!1}),o.default.isType(s,\"munderover\")&&o.default.isEmbellished(s)&&(o.default.setProperties(o.default.getCoreMO(s),{lspace:0,rspace:0}),i=t.create(\"node\",\"mo\",[],{rspace:0}),s=t.create(\"node\",\"mrow\",[i,s]));var c=t.create(\"node\",\"munderover\",[s]),p=o.default.createEntity(r);i=t.create(\"token\",\"mo\",{stretchy:!0,accent:!a},p),o.default.setChild(c,\"o\"===e.charAt(1)?c.over:c.under,i);var f=c;n&&(f=t.create(\"node\",\"TeXAtom\",[c],{texClass:u.TEXCLASS.OP,movesupsub:!0})),o.default.setProperty(f,\"subsupOK\",!0),t.Push(f)},d.Overset=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e);(o.default.getAttribute(n,\"movablelimits\")||o.default.getProperty(n,\"movablelimits\"))&&o.default.setProperties(n,{movablelimits:!1});var a=t.create(\"node\",\"mover\",[n,r]);t.Push(a)},d.Underset=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e);(o.default.isType(n,\"mo\")||o.default.getProperty(n,\"movablelimits\"))&&o.default.setProperties(n,{movablelimits:!1});var a=t.create(\"node\",\"munder\",[n,r]);t.Push(a)},d.TeXAtom=function(t,e,r){var n,a,o,i={texClass:r};if(r===u.TEXCLASS.OP){i.movesupsub=i.movablelimits=!0;var c=t.GetArgument(e),p=c.match(/^\\s*\\\\rm\\s+([a-zA-Z0-9 ]+)$/);p?(i.mathvariant=l.TexConstant.Variant.NORMAL,a=t.create(\"token\",\"mi\",i,p[1])):(o=new s.default(c,t.stack.env,t.configuration).mml(),a=t.create(\"node\",\"TeXAtom\",[o],i)),n=t.itemFactory.create(\"fn\",a)}else o=t.ParseArg(e),n=t.create(\"node\",\"TeXAtom\",[o],i);t.Push(n)},d.MmlToken=function(t,e){var r,n=t.GetArgument(e),a=t.GetBrackets(e,\"\").replace(/^\\s+/,\"\"),s=t.GetArgument(e),l={};try{r=t.create(\"node\",n)}catch(t){r=null}if(!r||!r.isToken)throw new i.default(\"NotMathMLToken\",\"%1 is not a token element\",n);for(;\"\"!==a;){var u=a.match(/^([a-z]+)\\s*=\\s*('[^']*'|\"[^\"]*\"|[^ ,]*)\\s*,?\\s*/i);if(!u)throw new i.default(\"InvalidMathMLAttr\",\"Invalid MathML attribute: %1\",a);if(!r.attributes.hasDefault(u[1])&&!h[u[1]])throw new i.default(\"UnknownAttrForElement\",\"%1 is not a recognized attribute for %2\",u[1],n);var p=c.default.MmlFilterAttribute(t,u[1],u[2].replace(/^(['\"])(.*)\\1$/,\"$2\"));p&&(\"true\"===p.toLowerCase()?p=!0:\"false\"===p.toLowerCase()&&(p=!1),l[u[1]]=p),a=a.substr(u[0].length)}var f=t.create(\"text\",s);r.appendChild(f),o.default.setProperties(r,l),t.Push(r)},d.Strut=function(t,e){var r=t.create(\"node\",\"mrow\"),n=t.create(\"node\",\"mpadded\",[r],{height:\"8.6pt\",depth:\"3pt\",width:0});t.Push(n)},d.Phantom=function(t,e,r,n){var a=t.create(\"node\",\"mphantom\",[t.ParseArg(e)]);(r||n)&&(a=t.create(\"node\",\"mpadded\",[a]),n&&(o.default.setAttribute(a,\"height\",0),o.default.setAttribute(a,\"depth\",0)),r&&o.default.setAttribute(a,\"width\",0));var i=t.create(\"node\",\"TeXAtom\",[a]);t.Push(i)},d.Smash=function(t,e){var r=c.default.trimSpaces(t.GetBrackets(e,\"\")),n=t.create(\"node\",\"mpadded\",[t.ParseArg(e)]);switch(r){case\"b\":o.default.setAttribute(n,\"depth\",0);break;case\"t\":o.default.setAttribute(n,\"height\",0);break;default:o.default.setAttribute(n,\"height\",0),o.default.setAttribute(n,\"depth\",0)}var a=t.create(\"node\",\"TeXAtom\",[n]);t.Push(a)},d.Lap=function(t,e){var r=t.create(\"node\",\"mpadded\",[t.ParseArg(e)],{width:0});\"\\\\llap\"===e&&o.default.setAttribute(r,\"lspace\",\"-1width\");var n=t.create(\"node\",\"TeXAtom\",[r]);t.Push(n)},d.RaiseLower=function(t,e){var r=t.GetDimen(e),n=t.itemFactory.create(\"position\").setProperties({name:t.currentCS,move:\"vertical\"});\"-\"===r.charAt(0)&&(r=r.slice(1),e=\"raise\"===e.substr(1)?\"\\\\lower\":\"\\\\raise\"),\"\\\\lower\"===e?(n.setProperty(\"dh\",\"-\"+r),n.setProperty(\"dd\",\"+\"+r)):(n.setProperty(\"dh\",\"+\"+r),n.setProperty(\"dd\",\"-\"+r)),t.Push(n)},d.MoveLeftRight=function(t,e){var r=t.GetDimen(e),n=\"-\"===r.charAt(0)?r.slice(1):\"-\"+r;if(\"\\\\moveleft\"===e){var a=r;r=n,n=a}t.Push(t.itemFactory.create(\"position\").setProperties({name:t.currentCS,move:\"horizontal\",left:t.create(\"node\",\"mspace\",[],{width:r}),right:t.create(\"node\",\"mspace\",[],{width:n})}))},d.Hskip=function(t,e){var r=t.create(\"node\",\"mspace\",[],{width:t.GetDimen(e)});t.Push(r)},d.Rule=function(t,e,r){var n={width:t.GetDimen(e),height:t.GetDimen(e),depth:t.GetDimen(e)};\"blank\"!==r&&(n.mathbackground=t.stack.env.color||\"black\");var a=t.create(\"node\",\"mspace\",[],n);t.Push(a)},d.rule=function(t,e){var r=t.GetBrackets(e),n=t.GetDimen(e),a=t.GetDimen(e),i=t.create(\"node\",\"mspace\",[],{width:n,height:a,mathbackground:t.stack.env.color||\"black\"});r&&(i=t.create(\"node\",\"mpadded\",[i],{voffset:r}),r.match(/^\\-/)?(o.default.setAttribute(i,\"height\",r),o.default.setAttribute(i,\"depth\",\"+\"+r.substr(1))):o.default.setAttribute(i,\"height\",\"+\"+r)),t.Push(i)},d.MakeBig=function(t,e,r,n){var a=String(n*=1.411764705882353).replace(/(\\.\\d\\d\\d).+/,\"$1\")+\"em\",o=t.GetDelimiter(e,!0),i=t.create(\"token\",\"mo\",{minsize:a,maxsize:a,fence:!0,stretchy:!0,symmetric:!0},o),s=t.create(\"node\",\"TeXAtom\",[i],{texClass:r});t.Push(s)},d.BuildRel=function(t,e){var r=t.ParseUpTo(e,\"\\\\over\"),n=t.ParseArg(e),a=t.create(\"node\",\"munderover\");o.default.setChild(a,0,n),o.default.setChild(a,1,null),o.default.setChild(a,2,r);var i=t.create(\"node\",\"TeXAtom\",[a],{texClass:u.TEXCLASS.REL});t.Push(i)},d.HBox=function(t,e,r,n){t.PushAll(c.default.internalMath(t,t.GetArgument(e),r,n))},d.FBox=function(t,e){var r=c.default.internalMath(t,t.GetArgument(e)),n=t.create(\"node\",\"menclose\",r,{notation:\"box\"});t.Push(n)},d.Not=function(t,e){t.Push(t.itemFactory.create(\"not\"))},d.Dots=function(t,e){var r=o.default.createEntity(\"2026\"),n=o.default.createEntity(\"22EF\"),a=t.create(\"token\",\"mo\",{stretchy:!1},r),i=t.create(\"token\",\"mo\",{stretchy:!1},n);t.Push(t.itemFactory.create(\"dots\").setProperties({ldots:a,cdots:i}))},d.Matrix=function(t,e,r,n,a,o,s,l,c,u){var p=t.GetNext();if(\"\"===p)throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);\"{\"===p?t.i++:(t.string=p+\"}\"+t.string.slice(t.i+1),t.i=0);var f=t.itemFactory.create(\"array\").setProperty(\"requireClose\",!0);f.arraydef={rowspacing:s||\"4pt\",columnspacing:o||\"1em\"},c&&f.setProperty(\"isCases\",!0),u&&(f.setProperty(\"isNumbered\",!0),f.arraydef.side=u),(r||n)&&(f.setProperty(\"open\",r),f.setProperty(\"close\",n)),\"D\"===l&&(f.arraydef.displaystyle=!0),null!=a&&(f.arraydef.columnalign=a),t.Push(f)},d.Entry=function(t,e){if(t.Push(t.itemFactory.create(\"cell\").setProperties({isEntry:!0,name:e})),t.stack.Top().getProperty(\"isCases\")){for(var r=t.string,n=0,a=-1,o=t.i,s=r.length;o<s;){var l=r.charAt(o);if(\"{\"===l)n++,o++;else if(\"}\"===l)0===n?s=0:(0===--n&&a<0&&(a=o-t.i),o++);else{if(\"&\"===l&&0===n)throw new i.default(\"ExtraAlignTab\",\"Extra alignment tab in \\\\cases text\");\"\\\\\"===l?r.substr(o).match(/^((\\\\cr)[^a-zA-Z]|\\\\\\\\)/)?s=0:o+=2:o++}}var u=r.substr(t.i,o-t.i);if(!u.match(/^\\s*\\\\text[^a-zA-Z]/)||a!==u.replace(/\\s+$/,\"\").length-1){var p=c.default.internalMath(t,u,0);t.PushAll(p),t.i=o}}},d.Cr=function(t,e){t.Push(t.itemFactory.create(\"cell\").setProperties({isCR:!0,name:e}))},d.CrLaTeX=function(t,e,r){var o;if(void 0===r&&(r=!1),!r&&\"[\"===t.string.charAt(t.i)){var s=t.GetBrackets(e,\"\"),u=n(c.default.matchDimen(s),2),p=u[0],f=u[1];if(s&&!p)throw new i.default(\"BracketMustBeDimension\",\"Bracket argument to %1 must be a dimension\",t.currentCS);o=p+f}t.Push(t.itemFactory.create(\"cell\").setProperties({isCR:!0,name:e,linebreak:!0}));var d,h=t.stack.Top();if(h instanceof a.ArrayItem){if(o&&h.arraydef.rowspacing){var m=h.arraydef.rowspacing.split(/ /);if(!h.getProperty(\"rowspacing\")){var g=c.default.dimen2em(m[0]);h.setProperty(\"rowspacing\",g)}for(var v=h.getProperty(\"rowspacing\");m.length<h.table.length;)m.push(c.default.Em(v));m[h.table.length-1]=c.default.Em(Math.max(0,v+c.default.dimen2em(o))),h.arraydef.rowspacing=m.join(\" \")}}else o&&(d=t.create(\"node\",\"mspace\",[],{depth:o}),t.Push(d)),d=t.create(\"node\",\"mspace\",[],{linebreak:l.TexConstant.LineBreak.NEWLINE}),t.Push(d)},d.HLine=function(t,e,r){null==r&&(r=\"solid\");var n=t.stack.Top();if(!(n instanceof a.ArrayItem)||n.Size())throw new i.default(\"Misplaced\",\"Misplaced %1\",t.currentCS);if(n.table.length){for(var o=n.arraydef.rowlines?n.arraydef.rowlines.split(/ /):[];o.length<n.table.length;)o.push(\"none\");o[n.table.length-1]=r,n.arraydef.rowlines=o.join(\" \")}else n.frame.push(\"top\")},d.HFill=function(t,e){var r=t.stack.Top();if(!(r instanceof a.ArrayItem))throw new i.default(\"UnsupportedHFill\",\"Unsupported use of %1\",t.currentCS);r.hfill.push(r.Size())},d.BeginEnd=function(t,e){var r=t.GetArgument(e);if(r.match(/\\\\/i))throw new i.default(\"InvalidEnv\",\"Invalid environment name '%1'\",r);var n=t.configuration.handlers.get(\"environment\").lookup(r);if(n&&\"\\\\end\"===e){if(!n.args[0]){var a=t.itemFactory.create(\"end\").setProperty(\"name\",r);return void t.Push(a)}t.stack.env.closing=r}if(++t.macroCount>t.configuration.options.maxMacros)throw new i.default(\"MaxMacroSub2\",\"MathJax maximum substitution count exceeded; is there a recursive latex environment?\");t.parse(\"environment\",[t,r])},d.Array=function(t,e,r,n,a,o,i,s,l){a||(a=t.GetArgument(\"\\\\begin{\"+e.getName()+\"}\"));var c=(\"c\"+a).replace(/[^clr|:]/g,\"\").replace(/[^|:]([|:])+/g,\"$1\");a=(a=a.replace(/[^clr]/g,\"\").split(\"\").join(\" \")).replace(/l/g,\"left\").replace(/r/g,\"right\").replace(/c/g,\"center\");var u=t.itemFactory.create(\"array\");return u.arraydef={columnalign:a,columnspacing:o||\"1em\",rowspacing:i||\"4pt\"},c.match(/[|:]/)&&(c.charAt(0).match(/[|:]/)&&(u.frame.push(\"left\"),u.dashed=\":\"===c.charAt(0)),c.charAt(c.length-1).match(/[|:]/)&&u.frame.push(\"right\"),c=c.substr(1,c.length-2),u.arraydef.columnlines=c.split(\"\").join(\" \").replace(/[^|: ]/g,\"none\").replace(/\\|/g,\"solid\").replace(/:/g,\"dashed\")),r&&u.setProperty(\"open\",t.convertDelimiter(r)),n&&u.setProperty(\"close\",t.convertDelimiter(n)),\"D\"===s?u.arraydef.displaystyle=!0:s&&(u.arraydef.displaystyle=!1),\"S\"===s&&(u.arraydef.scriptlevel=1),l&&(u.arraydef.useHeight=!1),t.Push(e),u},d.AlignedArray=function(t,e){var r=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),n=d.Array(t,e);return c.default.setArrayAlign(n,r)},d.Equation=function(t,e,r){return t.Push(e),c.default.checkEqnEnv(t),t.itemFactory.create(\"equation\",r).setProperty(\"name\",e.getName())},d.EqnArray=function(t,e,r,n,a,o){t.Push(e),n&&c.default.checkEqnEnv(t),a=(a=a.replace(/[^clr]/g,\"\").split(\"\").join(\" \")).replace(/l/g,\"left\").replace(/r/g,\"right\").replace(/c/g,\"center\");var i=t.itemFactory.create(\"eqnarray\",e.getName(),r,n,t.stack.global);return i.arraydef={displaystyle:!0,columnalign:a,columnspacing:o||\"1em\",rowspacing:\"3pt\",side:t.options.tagSide,minlabelspacing:t.options.tagIndent},i},d.HandleNoTag=function(t,e){t.tags.notag()},d.HandleLabel=function(t,e){var r=t.GetArgument(e);if(\"\"!==r&&!t.tags.refUpdate){if(t.tags.label)throw new i.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);if(t.tags.label=r,(t.tags.allLabels[r]||t.tags.labels[r])&&!t.options.ignoreDuplicateLabels)throw new i.default(\"MultipleLabel\",\"Label '%1' multiply defined\",r);t.tags.labels[r]=new p.Label}},d.HandleRef=function(t,e,r){var n=t.GetArgument(e),a=t.tags.allLabels[n]||t.tags.labels[n];a||(t.tags.refUpdate||(t.tags.redo=!0),a=new p.Label);var o=a.tag;r&&(o=t.tags.formatTag(o));var i=t.create(\"node\",\"mrow\",c.default.internalMath(t,o),{href:t.tags.formatUrl(a.id,t.options.baseURL),class:\"MathJax_ref\"});t.Push(i)},d.Macro=function(t,e,r,n,a){if(n){var o=[];if(null!=a){var s=t.GetBrackets(e);o.push(null==s?a:s)}for(var l=o.length;l<n;l++)o.push(t.GetArgument(e));r=c.default.substituteArgs(t,o,r)}if(t.string=c.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new i.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is there a recursive macro call?\")},d.MathChoice=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e),a=t.ParseArg(e),o=t.ParseArg(e);t.Push(t.create(\"node\",\"MathChoice\",[r,n,a,o]))},e.default=d},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TagsFactory=e.AllTags=e.NoTags=e.AbstractTags=e.TagInfo=e.Label=void 0;var i=r(6),s=function(t,e){void 0===t&&(t=\"???\"),void 0===e&&(e=\"\"),this.tag=t,this.id=e};e.Label=s;var l=function(t,e,r,n,a,o,i,s){void 0===t&&(t=\"\"),void 0===e&&(e=!1),void 0===r&&(r=!1),void 0===n&&(n=null),void 0===a&&(a=\"\"),void 0===o&&(o=\"\"),void 0===i&&(i=!1),void 0===s&&(s=\"\"),this.env=t,this.taggable=e,this.defaultTags=r,this.tag=n,this.tagId=a,this.tagFormat=o,this.noTag=i,this.labelId=s};e.TagInfo=l;var c=function(){function t(){this.counter=0,this.allCounter=0,this.configuration=null,this.ids={},this.allIds={},this.labels={},this.allLabels={},this.redo=!1,this.refUpdate=!1,this.currentTag=new l,this.history=[],this.stack=[],this.enTag=function(t,e){var r=this.configuration.nodeFactory,n=r.create(\"node\",\"mtd\",[t]),a=r.create(\"node\",\"mlabeledtr\",[e,n]);return r.create(\"node\",\"mtable\",[a],{side:this.configuration.options.tagSide,minlabelspacing:this.configuration.options.tagIndent,displaystyle:!0})}}return t.prototype.start=function(t,e,r){this.currentTag&&this.stack.push(this.currentTag),this.currentTag=new l(t,e,r)},Object.defineProperty(t.prototype,\"env\",{get:function(){return this.currentTag.env},enumerable:!1,configurable:!0}),t.prototype.end=function(){this.history.push(this.currentTag),this.currentTag=this.stack.pop()},t.prototype.tag=function(t,e){this.currentTag.tag=t,this.currentTag.tagFormat=e?t:this.formatTag(t),this.currentTag.noTag=!1},t.prototype.notag=function(){this.tag(\"\",!0),this.currentTag.noTag=!0},Object.defineProperty(t.prototype,\"noTag\",{get:function(){return this.currentTag.noTag},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"label\",{get:function(){return this.currentTag.labelId},set:function(t){this.currentTag.labelId=t},enumerable:!1,configurable:!0}),t.prototype.formatUrl=function(t,e){return e+\"#\"+encodeURIComponent(t)},t.prototype.formatTag=function(t){return\"(\"+t+\")\"},t.prototype.formatId=function(t){return\"mjx-eqn-\"+t.replace(/\\s/g,\"_\")},t.prototype.formatNumber=function(t){return t.toString()},t.prototype.autoTag=function(){null==this.currentTag.tag&&(this.counter++,this.tag(this.formatNumber(this.counter),!1))},t.prototype.clearTag=function(){this.label=\"\",this.tag(null,!0),this.currentTag.tagId=\"\"},t.prototype.getTag=function(t){if(void 0===t&&(t=!1),t)return this.autoTag(),this.makeTag();var e=this.currentTag;return e.taggable&&!e.noTag&&(e.defaultTags&&this.autoTag(),e.tag)?this.makeTag():null},t.prototype.resetTag=function(){this.history=[],this.redo=!1,this.refUpdate=!1,this.clearTag()},t.prototype.reset=function(t){void 0===t&&(t=0),this.resetTag(),this.counter=this.allCounter=t,this.allLabels={},this.allIds={}},t.prototype.startEquation=function(t){this.labels={},this.ids={},this.counter=this.allCounter,this.redo=!1;var e=t.inputData.recompile;e&&(this.refUpdate=!0,this.counter=e.counter)},t.prototype.finishEquation=function(t){this.redo&&(t.inputData.recompile={state:t.state(),counter:this.allCounter}),this.refUpdate||(this.allCounter=this.counter),Object.assign(this.allIds,this.ids),Object.assign(this.allLabels,this.labels)},t.prototype.finalize=function(t,e){if(!e.display||this.currentTag.env||null==this.currentTag.tag)return t;var r=this.makeTag();return this.enTag(t,r)},t.prototype.makeId=function(){this.currentTag.tagId=this.formatId(this.configuration.options.useLabelIds&&this.label||this.currentTag.tag)},t.prototype.makeTag=function(){this.makeId(),this.label&&(this.labels[this.label]=new s(this.currentTag.tag,this.currentTag.tagId));var t=new i.default(\"\\\\text{\"+this.currentTag.tagFormat+\"}\",{},this.configuration).mml();return this.configuration.nodeFactory.create(\"node\",\"mtd\",[t],{id:this.currentTag.tagId})},t}();e.AbstractTags=c;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),e.prototype.autoTag=function(){},e.prototype.getTag=function(){return this.currentTag.tag?t.prototype.getTag.call(this):null},e}(c);e.NoTags=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),e.prototype.finalize=function(t,e){if(!e.display||this.history.find((function(t){return t.taggable})))return t;var r=this.getTag(!0);return this.enTag(t,r)},e}(c);e.AllTags=p,function(t){var e=new Map([[\"none\",u],[\"all\",p]]),r=\"none\";t.OPTIONS={tags:r,tagSide:\"right\",tagIndent:\"0.8em\",multlineWidth:\"85%\",useLabelIds:!0,ignoreDuplicateLabels:!1},t.add=function(t,r){e.set(t,r)},t.addTags=function(e){var r,n;try{for(var a=o(Object.keys(e)),i=a.next();!i.done;i=a.next()){var s=i.value;t.add(s,e[s])}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}},t.create=function(t){var n=e.get(t)||e.get(r);if(!n)throw Error(\"Unknown tags class\");return new n},t.setDefault=function(t){r=t},t.getDefault=function(){return t.create(r)}}(e.TagsFactory||(e.TagsFactory={}))},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.BaseItem=e.MmlStack=void 0;var l=r(2),c=function(){function t(t){this._nodes=t}return Object.defineProperty(t.prototype,\"nodes\",{get:function(){return this._nodes},enumerable:!1,configurable:!0}),t.prototype.Push=function(){for(var t,e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];(t=this._nodes).push.apply(t,i(e))},t.prototype.Pop=function(){return this._nodes.pop()},Object.defineProperty(t.prototype,\"First\",{get:function(){return this._nodes[this.Size()-1]},set:function(t){this._nodes[this.Size()-1]=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"Last\",{get:function(){return this._nodes[0]},set:function(t){this._nodes[0]=t},enumerable:!1,configurable:!0}),t.prototype.Peek=function(t){return null==t&&(t=1),this._nodes.slice(this.Size()-t)},t.prototype.Size=function(){return this._nodes.length},t.prototype.Clear=function(){this._nodes=[]},t.prototype.toMml=function(t,e){return void 0===t&&(t=!0),1!==this._nodes.length||e?this.create(\"node\",t?\"inferredMrow\":\"mrow\",this._nodes,{}):this.First},t.prototype.create=function(t){for(var e,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return(e=this.factory.configuration.nodeFactory).create.apply(e,i([t],r))},t}();e.MmlStack=c;var u=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var a=t.call(this,r)||this;return a.factory=e,a.global={},a._properties={},a.isOpen&&(a._env={}),a}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"base\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"env\",{get:function(){return this._env},set:function(t){this._env=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"copyEnv\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.getProperty=function(t){return this._properties[t]},e.prototype.setProperty=function(t,e){return this._properties[t]=e,this},Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isFinal\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.isKind=function(t){return t===this.kind},e.prototype.checkItem=function(t){if(t.isKind(\"over\")&&this.isOpen&&(t.setProperty(\"num\",this.toMml(!1)),this.Clear()),t.isKind(\"cell\")&&this.isOpen){if(t.getProperty(\"linebreak\"))return e.fail;throw new l.default(\"Misplaced\",\"Misplaced %1\",t.getName())}if(t.isClose&&this.getErrors(t.kind)){var r=o(this.getErrors(t.kind),2),n=r[0],a=r[1];throw new l.default(n,a,t.getName())}return t.isFinal?(this.Push(t.First),e.fail):e.success},e.prototype.clearEnv=function(){var t,e;try{for(var r=s(Object.keys(this.env)),n=r.next();!n.done;n=r.next()){var a=n.value;delete this.env[a]}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.setProperties=function(t){return Object.assign(this._properties,t),this},e.prototype.getName=function(){return this.getProperty(\"name\")},e.prototype.toString=function(){return this.kind+\"[\"+this.nodes.join(\"; \")+\"]\"},e.prototype.getErrors=function(t){return(this.constructor.errors||{})[t]||e.errors[t]},e.fail=[null,!1],e.success=[null,!0],e.errors={end:[\"MissingBeginExtraEnd\",\"Missing \\\\begin{%1} or extra \\\\end{%1}\"],close:[\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"],right:[\"MissingLeftExtraRight\",\"Missing \\\\left or extra \\\\right\"]},e}(c);e.BaseItem=u},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o,i=r(3),s=r(7),l=r(4);!function(t){t.variable=function(t,e){var r=l.default.getFontDef(t),n=t.create(\"token\",\"mi\",r,e);t.Push(n)},t.digit=function(t,e){var r,n=t.configuration.options.digits,a=t.string.slice(t.i-1).match(n),o=l.default.getFontDef(t);a?(r=t.create(\"token\",\"mn\",o,a[0].replace(/[{}]/g,\"\")),t.i+=a[0].length-1):r=t.create(\"token\",\"mo\",o,e),t.Push(r)},t.controlSequence=function(t,e){var r=t.GetCS();t.parse(\"macro\",[t,r])},t.mathchar0mi=function(t,e){var r=e.attributes||{mathvariant:s.TexConstant.Variant.ITALIC},n=t.create(\"token\",\"mi\",r,e.char);t.Push(n)},t.mathchar0mo=function(t,e){var r=e.attributes||{};r.stretchy=!1;var n=t.create(\"token\",\"mo\",r,e.char);i.default.setProperty(n,\"fixStretchy\",!0),t.configuration.addNode(\"fixStretchy\",n),t.Push(n)},t.mathchar7=function(t,e){var r=e.attributes||{mathvariant:s.TexConstant.Variant.NORMAL};t.stack.env.font&&(r.mathvariant=t.stack.env.font);var n=t.create(\"token\",\"mi\",r,e.char);t.Push(n)},t.delimiter=function(t,e){var r=e.attributes||{};r=Object.assign({fence:!1,stretchy:!1},r);var n=t.create(\"token\",\"mo\",r,e.char);t.Push(n)},t.environment=function(t,e,r,n){var o=n[0],i=t.itemFactory.create(\"begin\").setProperties({name:e,end:o});i=r.apply(void 0,a([t,i],n.slice(1))),t.Push(i)}}(o||(o={})),e.default=o},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.options=MathJax._.util.Entities.options,e.entities=MathJax._.util.Entities.entities,e.add=MathJax._.util.Entities.add,e.remove=MathJax._.util.Entities.remove,e.translate=MathJax._.util.Entities.translate,e.numeric=MathJax._.util.Entities.numeric},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Macro=e.Symbol=void 0;var n=function(){function t(t,e,r){this._symbol=t,this._char=e,this._attributes=r}return Object.defineProperty(t.prototype,\"symbol\",{get:function(){return this._symbol},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"char\",{get:function(){return this._char},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"attributes\",{get:function(){return this._attributes},enumerable:!1,configurable:!0}),t}();e.Symbol=n;var a=function(){function t(t,e,r){void 0===r&&(r=[]),this._symbol=t,this._func=e,this._args=r}return Object.defineProperty(t.prototype,\"symbol\",{get:function(){return this._symbol},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"func\",{get:function(){return this._func},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"args\",{get:function(){return this._args},enumerable:!1,configurable:!0}),t}();e.Macro=a},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.EquationItem=e.EqnArrayItem=e.ArrayItem=e.DotsItem=e.NotItem=e.FnItem=e.MmlItem=e.CellItem=e.PositionItem=e.StyleItem=e.EndItem=e.BeginItem=e.RightItem=e.LeftItem=e.OverItem=e.SubsupItem=e.PrimeItem=e.CloseItem=e.OpenItem=e.StopItem=e.StartItem=void 0;var s=r(16),l=r(13),c=r(5),u=r(2),p=r(4),f=r(3),d=r(11),h=function(t){function e(e,r){var n=t.call(this,e)||this;return n.global=r,n}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"start\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"stop\")){var r=this.toMml();return this.global.isInner||(r=this.factory.configuration.tags.finalize(r,this.env)),[[this.factory.create(\"mml\",r)],!0]}return t.prototype.checkItem.call(this,e)},e}(d.BaseItem);e.StartItem=h;var m=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"stop\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.StopItem=m;var g=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"open\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"close\")){var r=this.toMml(),n=this.create(\"node\",\"TeXAtom\",[r]);return[[this.factory.create(\"mml\",n)],!0]}return t.prototype.checkItem.call(this,e)},e.errors=Object.assign(Object.create(d.BaseItem.errors),{stop:[\"ExtraOpenMissingClose\",\"Extra open brace or missing close brace\"]}),e}(d.BaseItem);e.OpenItem=g;var v=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"close\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.CloseItem=v;var y=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"prime\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){var e=o(this.Peek(2),2),r=e[0],n=e[1];return!f.default.isType(r,\"msubsup\")||f.default.isType(r,\"msup\")?[[this.create(\"node\",\"msup\",[r,n]),t],!0]:(f.default.setChild(r,r.sup,n),[[r,t],!0])},e}(d.BaseItem);e.PrimeItem=y;var b=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"subsup\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"open\")||e.isKind(\"left\"))return d.BaseItem.success;var r=this.First,n=this.getProperty(\"position\");if(e.isKind(\"mml\")){if(this.getProperty(\"primes\"))if(2!==n)f.default.setChild(r,2,this.getProperty(\"primes\"));else{f.default.setProperty(this.getProperty(\"primes\"),\"variantForm\",!0);var a=this.create(\"node\",\"mrow\",[this.getProperty(\"primes\"),e.First]);e.First=a}return f.default.setChild(r,n,e.First),null!=this.getProperty(\"movesupsub\")&&f.default.setProperty(r,\"movesupsub\",this.getProperty(\"movesupsub\")),[[this.factory.create(\"mml\",r)],!0]}if(t.prototype.checkItem.call(this,e)[1]){var o=this.getErrors([\"\",\"sub\",\"sup\"][n]);throw new(u.default.bind.apply(u.default,i([void 0,o[0],o[1]],o.splice(2))))}return null},e.errors=Object.assign(Object.create(d.BaseItem.errors),{stop:[\"MissingScript\",\"Missing superscript or subscript argument\"],sup:[\"MissingOpenForSup\",\"Missing open brace for superscript\"],sub:[\"MissingOpenForSub\",\"Missing open brace for subscript\"]}),e}(d.BaseItem);e.SubsupItem=b;var x=function(t){function e(e){var r=t.call(this,e)||this;return r.setProperty(\"name\",\"\\\\over\"),r}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"over\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"over\"))throw new u.default(\"AmbiguousUseOf\",\"Ambiguous use of %1\",e.getName());if(e.isClose){var r=this.create(\"node\",\"mfrac\",[this.getProperty(\"num\"),this.toMml(!1)]);return null!=this.getProperty(\"thickness\")&&f.default.setAttribute(r,\"linethickness\",this.getProperty(\"thickness\")),(this.getProperty(\"open\")||this.getProperty(\"close\"))&&(f.default.setProperty(r,\"withDelims\",!0),r=p.default.fixedFence(this.factory.configuration,this.getProperty(\"open\"),r,this.getProperty(\"close\"))),[[this.factory.create(\"mml\",r),e],!0]}return t.prototype.checkItem.call(this,e)},e.prototype.toString=function(){return\"over[\"+this.getProperty(\"num\")+\" / \"+this.nodes.join(\"; \")+\"]\"},e}(d.BaseItem);e.OverItem=x;var A=function(t){function e(e){var r=t.call(this,e)||this;return r.setProperty(\"delim\",\"(\"),r}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"left\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){return e.isKind(\"right\")?[[this.factory.create(\"mml\",p.default.fenced(this.factory.configuration,this.getProperty(\"delim\"),this.toMml(),e.getProperty(\"delim\")))],!0]:t.prototype.checkItem.call(this,e)},e.errors=Object.assign(Object.create(d.BaseItem.errors),{stop:[\"ExtraLeftMissingRight\",\"Extra \\\\left or missing \\\\right\"]}),e}(d.BaseItem);e.LeftItem=A;var M=function(t){function e(e){var r=t.call(this,e)||this;return r.setProperty(\"delim\",\")\"),r}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"right\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.RightItem=M;var _=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"begin\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){if(e.getName()!==this.getName())throw new u.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),e.getName());return this.getProperty(\"end\")?d.BaseItem.fail:[[this.factory.create(\"mml\",this.toMml())],!0]}if(e.isKind(\"stop\"))throw new u.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(d.BaseItem);e.BeginItem=_;var C=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"end\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.EndItem=C;var P=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"style\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(!e.isClose)return t.prototype.checkItem.call(this,e);var r=this.create(\"node\",\"mstyle\",this.nodes,this.getProperty(\"styles\"));return[[this.factory.create(\"mml\",r),e],!0]},e}(d.BaseItem);e.StyleItem=P;var w=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"position\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isClose)throw new u.default(\"MissingBoxFor\",\"Missing box for %1\",this.getName());if(e.isFinal){var r=e.toMml();switch(this.getProperty(\"move\")){case\"vertical\":return r=this.create(\"node\",\"mpadded\",[r],{height:this.getProperty(\"dh\"),depth:this.getProperty(\"dd\"),voffset:this.getProperty(\"dh\")}),[[this.factory.create(\"mml\",r)],!0];case\"horizontal\":return[[this.factory.create(\"mml\",this.getProperty(\"left\")),e,this.factory.create(\"mml\",this.getProperty(\"right\"))],!0]}}return t.prototype.checkItem.call(this,e)},e}(d.BaseItem);e.PositionItem=w;var S=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"cell\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.CellItem=S;var T=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"isFinal\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mml\"},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.MmlItem=T;var k=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"fn\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){var r=this.First;if(r){if(e.isOpen)return d.BaseItem.success;if(!e.isKind(\"fn\")){var n=e.First;if(!e.isKind(\"mml\")||!n)return[[r,e],!0];if(f.default.isType(n,\"mstyle\")&&n.childNodes.length&&f.default.isType(n.childNodes[0].childNodes[0],\"mspace\")||f.default.isType(n,\"mspace\"))return[[r,e],!0];f.default.isEmbellished(n)&&(n=f.default.getCoreMO(n));var a=f.default.getForm(n);if(null!=a&&[0,0,1,1,0,1,1,0,0,0][a[2]])return[[r,e],!0]}var o=this.create(\"token\",\"mo\",{texClass:c.TEXCLASS.NONE},l.entities.ApplyFunction);return[[r,o,e],!0]}return t.prototype.checkItem.apply(this,arguments)},e}(d.BaseItem);e.FnItem=k;var O=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.remap=s.MapHandler.getMap(\"not_remap\"),e}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"not\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){var e,r,n;if(t.isKind(\"open\")||t.isKind(\"left\"))return d.BaseItem.success;if(t.isKind(\"mml\")&&(f.default.isType(t.First,\"mo\")||f.default.isType(t.First,\"mi\")||f.default.isType(t.First,\"mtext\"))&&(e=t.First,1===(r=f.default.getText(e)).length&&!f.default.getProperty(e,\"movesupsub\")&&1===f.default.getChildren(e).length))return this.remap.contains(r)?(n=this.create(\"text\",this.remap.lookup(r).char),f.default.setChild(e,0,n)):(n=this.create(\"text\",\"\\u0338\"),f.default.appendChildren(e,[n])),[[t],!0];n=this.create(\"text\",\"\\u29f8\");var a=this.create(\"node\",\"mtext\",[],{},n),o=this.create(\"node\",\"mpadded\",[a],{width:0});return[[e=this.create(\"node\",\"TeXAtom\",[o],{texClass:c.TEXCLASS.REL}),t],!0]},e}(d.BaseItem);e.NotItem=O;var E=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"dots\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){if(t.isKind(\"open\")||t.isKind(\"left\"))return d.BaseItem.success;var e=this.getProperty(\"ldots\"),r=t.First;if(t.isKind(\"mml\")&&f.default.isEmbellished(r)){var n=f.default.getTexClass(f.default.getCoreMO(r));n!==c.TEXCLASS.BIN&&n!==c.TEXCLASS.REL||(e=this.getProperty(\"cdots\"))}return[[e,t],!0]},e}(d.BaseItem);e.DotsItem=E;var I=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.table=[],e.row=[],e.frame=[],e.hfill=[],e.arraydef={},e.dashed=!1,e}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"array\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"copyEnv\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isClose&&!e.isKind(\"over\")){if(e.getProperty(\"isEntry\"))return this.EndEntry(),this.clearEnv(),d.BaseItem.fail;if(e.getProperty(\"isCR\"))return this.EndEntry(),this.EndRow(),this.clearEnv(),d.BaseItem.fail;this.EndTable(),this.clearEnv();var r=this.arraydef.scriptlevel;delete this.arraydef.scriptlevel;var n=this.create(\"node\",\"mtable\",this.table,this.arraydef);4===this.frame.length?f.default.setAttribute(n,\"frame\",this.dashed?\"dashed\":\"solid\"):this.frame.length&&(this.arraydef.rowlines&&(this.arraydef.rowlines=this.arraydef.rowlines.replace(/none( none)+$/,\"none\")),n=this.create(\"node\",\"menclose\",[n],{notation:this.frame.join(\" \"),isFrame:!0}),\"none\"===(this.arraydef.columnlines||\"none\")&&\"none\"===(this.arraydef.rowlines||\"none\")||f.default.setAttribute(n,\"padding\",0)),r&&(n=this.create(\"node\",\"mstyle\",[n],{scriptlevel:r})),(this.getProperty(\"open\")||this.getProperty(\"close\"))&&(n=p.default.fenced(this.factory.configuration,this.getProperty(\"open\"),n,this.getProperty(\"close\")));var a=this.factory.create(\"mml\",n);if(this.getProperty(\"requireClose\")){if(e.isKind(\"close\"))return[[a],!0];throw new u.default(\"MissingCloseBrace\",\"Missing close brace\")}return[[a,e],!0]}return t.prototype.checkItem.call(this,e)},e.prototype.EndEntry=function(){var t=this.create(\"node\",\"mtd\",this.nodes);this.hfill.length&&(0===this.hfill[0]&&f.default.setAttribute(t,\"columnalign\",\"right\"),this.hfill[this.hfill.length-1]===this.Size()&&f.default.setAttribute(t,\"columnalign\",f.default.getAttribute(t,\"columnalign\")?\"center\":\"left\")),this.row.push(t),this.Clear(),this.hfill=[]},e.prototype.EndRow=function(){var t;this.getProperty(\"isNumbered\")&&3===this.row.length?(this.row.unshift(this.row.pop()),t=this.create(\"node\",\"mlabeledtr\",this.row)):t=this.create(\"node\",\"mtr\",this.row),this.table.push(t),this.row=[]},e.prototype.EndTable=function(){(this.Size()||this.row.length)&&(this.EndEntry(),this.EndRow()),this.checkLines()},e.prototype.checkLines=function(){if(this.arraydef.rowlines){var t=this.arraydef.rowlines.split(/ /);t.length===this.table.length?(this.frame.push(\"bottom\"),t.pop(),this.arraydef.rowlines=t.join(\" \")):t.length<this.table.length-1&&(this.arraydef.rowlines+=\" none\")}if(this.getProperty(\"rowspacing\")){for(var e=this.arraydef.rowspacing.split(/ /);e.length<this.table.length;)e.push(this.getProperty(\"rowspacing\")+\"em\");this.arraydef.rowspacing=e.join(\" \")}},e}(d.BaseItem);e.ArrayItem=I;var N=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var a=t.call(this,e)||this;return a.factory.configuration.tags.start(r[0],r[2],r[1]),a}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"eqnarray\"},enumerable:!1,configurable:!0}),e.prototype.EndEntry=function(){this.row.length&&p.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.create(\"node\",\"mtd\",this.nodes);this.row.push(t),this.Clear()},e.prototype.EndRow=function(){var t=\"mtr\",e=this.factory.configuration.tags.getTag();e&&(this.row=[e].concat(this.row),t=\"mlabeledtr\"),this.factory.configuration.tags.clearTag();var r=this.create(\"node\",t,this.row);this.table.push(r),this.row=[]},e.prototype.EndTable=function(){t.prototype.EndTable.call(this),this.factory.configuration.tags.end()},e}(I);e.EqnArrayItem=N;var q=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var a=t.call(this,e)||this;return a.factory.configuration.tags.start(\"equation\",!0,r[0]),a}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"equation\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){var r=this.toMml(),n=this.factory.configuration.tags.getTag();return this.factory.configuration.tags.end(),[[n?this.factory.configuration.tags.enTag(r,n):r,e],!0]}if(e.isKind(\"stop\"))throw new u.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(d.BaseItem);e.EquationItem=q},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SubHandlers=e.SubHandler=e.MapHandler=void 0;var o,i=r(72),s=r(73);!function(t){var e=new Map;t.register=function(t){e.set(t.name,t)},t.getMap=function(t){return e.get(t)}}(o=e.MapHandler||(e.MapHandler={}));var l=function(){function t(){this._configuration=new i.PrioritizedList,this._fallback=new s.FunctionList}return t.prototype.add=function(t,e,r){var a,s;void 0===r&&(r=i.PrioritizedList.DEFAULTPRIORITY);try{for(var l=n(t.slice().reverse()),c=l.next();!c.done;c=l.next()){var u=c.value,p=o.getMap(u);if(!p)return void this.warn(\"Configuration \"+u+\" not found! Omitted.\");this._configuration.add(p,r)}}catch(t){a={error:t}}finally{try{c&&!c.done&&(s=l.return)&&s.call(l)}finally{if(a)throw a.error}}e&&this._fallback.add(e,r)},t.prototype.parse=function(t){var e,r;try{for(var o=n(this._configuration),i=o.next();!i.done;i=o.next()){var s=i.value.item.parse(t);if(s)return s}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}var l=a(t,2),c=l[0],u=l[1];this._fallback.toArray()[0].item(c,u)},t.prototype.lookup=function(t){var e=this.applicable(t);return e?e.lookup(t):null},t.prototype.contains=function(t){return!!this.applicable(t)},t.prototype.toString=function(){var t,e,r=[];try{for(var a=n(this._configuration),o=a.next();!o.done;o=a.next()){var i=o.value.item;r.push(i.name)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}return r.join(\", \")},t.prototype.applicable=function(t){var e,r;try{for(var a=n(this._configuration),o=a.next();!o.done;o=a.next()){var i=o.value.item;if(i.contains(t))return i}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return null},t.prototype.retrieve=function(t){var e,r;try{for(var a=n(this._configuration),o=a.next();!o.done;o=a.next()){var i=o.value.item;if(i.name===t)return i}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return null},t.prototype.warn=function(t){console.log(\"TexParser Warning: \"+t)},t}();e.SubHandler=l;var c=function(){function t(){this.map=new Map}return t.prototype.add=function(t,e,r){var a,o;void 0===r&&(r=i.PrioritizedList.DEFAULTPRIORITY);try{for(var s=n(Object.keys(t)),c=s.next();!c.done;c=s.next()){var u=c.value,p=this.get(u);p||(p=new l,this.set(u,p)),p.add(t[u],e[u],r)}}catch(t){a={error:t}}finally{try{c&&!c.done&&(o=s.return)&&o.call(s)}finally{if(a)throw a.error}}},t.prototype.set=function(t,e){this.map.set(t,e)},t.prototype.get=function(t){return this.map.get(t)},t.prototype.retrieve=function(t){var e,r;try{for(var a=n(this.map.values()),o=a.next();!o.done;o=a.next()){var i=o.value.retrieve(t);if(i)return i}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return null},t.prototype.keys=function(){return this.map.keys()},t}();e.SubHandlers=c},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NEW_OPS=e.AmsMethods=void 0;var n=r(4),a=r(3),o=r(7),i=r(6),s=r(2),l=r(14),c=r(8),u=r(5);e.AmsMethods={},e.AmsMethods.AmsEqnArray=function(t,e,r,a,o,i,s){var l=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),u=c.default.EqnArray(t,e,r,a,o,i,s);return n.default.setArrayAlign(u,l)},e.AmsMethods.AlignAt=function(t,r,a,o){var i,l,c=r.getName(),u=\"\",p=[];if(o||(l=t.GetBrackets(\"\\\\begin{\"+c+\"}\")),(i=t.GetArgument(\"\\\\begin{\"+c+\"}\")).match(/[^0-9]/))throw new s.default(\"PositiveIntegerArg\",\"Argument to %1 must me a positive integer\",\"\\\\begin{\"+c+\"}\");for(var f=parseInt(i,10);f>0;)u+=\"rl\",p.push(\"0em 0em\"),f--;var d=p.join(\" \");if(o)return e.AmsMethods.EqnArray(t,r,a,o,u,d);var h=e.AmsMethods.EqnArray(t,r,a,o,u,d);return n.default.setArrayAlign(h,l)},e.AmsMethods.Multline=function(t,e,r){t.Push(e),n.default.checkEqnEnv(t);var a=t.itemFactory.create(\"multline\",r,t.stack);return a.arraydef={displaystyle:!0,rowspacing:\".5em\",columnwidth:\"100%\",width:t.options.multlineWidth,side:t.options.tagSide,minlabelspacing:t.options.tagIndent},a},e.NEW_OPS=\"ams-declare-ops\",e.AmsMethods.HandleDeclareOp=function(t,r){var a=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",o=n.default.trimSpaces(t.GetArgument(r));\"\\\\\"===o.charAt(0)&&(o=o.substr(1));var i=t.GetArgument(r);i.match(/\\\\text/)||(i=i.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\")),t.configuration.handlers.retrieve(e.NEW_OPS).add(o,new l.Macro(o,e.AmsMethods.Macro,[\"\\\\mathop{\\\\rm \"+i+\"}\"+a]))},e.AmsMethods.HandleOperatorName=function(t,e){var r=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",a=n.default.trimSpaces(t.GetArgument(e));a.match(/\\\\text/)||(a=a.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\")),t.string=\"\\\\mathop{\\\\rm \"+a+\"}\"+r+\" \"+t.string.slice(t.i),t.i=0},e.AmsMethods.SkipLimits=function(t,e){var r=t.GetNext(),n=t.i;\"\\\\\"===r&&++t.i&&\"limits\"!==t.GetCS()&&(t.i=n)},e.AmsMethods.MultiIntegral=function(t,e,r){var n=t.GetNext();if(\"\\\\\"===n){var a=t.i;n=t.GetArgument(e),t.i=a,\"\\\\limits\"===n&&(r=\"\\\\idotsint\"===e?\"\\\\!\\\\!\\\\mathop{\\\\,\\\\,\"+r+\"}\":\"\\\\!\\\\!\\\\!\\\\mathop{\\\\,\\\\,\\\\,\"+r+\"}\")}t.string=r+\" \"+t.string.slice(t.i),t.i=0},e.AmsMethods.xArrow=function(t,e,r,o,s){var l={width:\"+\"+n.default.Em((o+s)/18),lspace:n.default.Em(o/18)},c=t.GetBrackets(e),p=t.ParseArg(e),f=t.create(\"token\",\"mo\",{stretchy:!0,texClass:u.TEXCLASS.REL},String.fromCodePoint(r)),d=t.create(\"node\",\"munderover\",[f]),h=t.create(\"node\",\"mpadded\",[p],l);if(a.default.setAttribute(h,\"voffset\",\".15em\"),a.default.setChild(d,d.over,h),c){var m=new i.default(c,t.stack.env,t.configuration).mml();h=t.create(\"node\",\"mpadded\",[m],l),a.default.setAttribute(h,\"voffset\",\"-.24em\"),a.default.setChild(d,d.under,h)}a.default.setProperty(d,\"subsupOK\",!0),t.Push(d)},e.AmsMethods.HandleShove=function(t,e,r){var n=t.stack.Top();if(\"multline\"!==n.kind)throw new s.default(\"CommandOnlyAllowedInEnv\",\"%1 only allowed in %2 environment\",t.currentCS,\"multline\");if(n.Size())throw new s.default(\"CommandAtTheBeginingOfLine\",\"%1 must come at the beginning of the line\",t.currentCS);n.setProperty(\"shove\",r)},e.AmsMethods.CFrac=function(t,e){var r=n.default.trimSpaces(t.GetBrackets(e,\"\")),l=t.GetArgument(e),c=t.GetArgument(e),u={l:o.TexConstant.Align.LEFT,r:o.TexConstant.Align.RIGHT,\"\":\"\"},p=new i.default(\"\\\\strut\\\\textstyle{\"+l+\"}\",t.stack.env,t.configuration).mml(),f=new i.default(\"\\\\strut\\\\textstyle{\"+c+\"}\",t.stack.env,t.configuration).mml(),d=t.create(\"node\",\"mfrac\",[p,f]);if(null==(r=u[r]))throw new s.default(\"IllegalAlign\",\"Illegal alignment specified in %1\",t.currentCS);r&&a.default.setProperties(d,{numalign:r,denomalign:r}),t.Push(d)},e.AmsMethods.Genfrac=function(t,e,r,o,i,l){null==r&&(r=t.GetDelimiterArg(e)),null==o&&(o=t.GetDelimiterArg(e)),null==i&&(i=t.GetArgument(e)),null==l&&(l=n.default.trimSpaces(t.GetArgument(e)));var c=t.ParseArg(e),u=t.ParseArg(e),p=t.create(\"node\",\"mfrac\",[c,u]);if(\"\"!==i&&a.default.setAttribute(p,\"linethickness\",i),(r||o)&&(a.default.setProperty(p,\"withDelims\",!0),p=n.default.fixedFence(t.configuration,r,p,o)),\"\"!==l){var f=parseInt(l,10),d=[\"D\",\"T\",\"S\",\"SS\"][f];if(null==d)throw new s.default(\"BadMathStyleFor\",\"Bad math style for %1\",t.currentCS);p=t.create(\"node\",\"mstyle\",[p]),\"D\"===d?a.default.setProperties(p,{displaystyle:!0,scriptlevel:0}):a.default.setProperties(p,{displaystyle:!1,scriptlevel:f-1})}t.Push(p)},e.AmsMethods.HandleTag=function(t,e){if(!t.tags.currentTag.taggable&&t.tags.env)throw new s.default(\"CommandNotAllowedInEnv\",\"%1 not allowed in %2 environment\",t.currentCS,t.tags.env);if(t.tags.currentTag.tag)throw new s.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);var r=t.GetStar(),a=n.default.trimSpaces(t.GetArgument(e));t.tags.tag(a,r)},e.AmsMethods.HandleNoTag=c.default.HandleNoTag,e.AmsMethods.HandleRef=c.default.HandleRef,e.AmsMethods.Macro=c.default.Macro,e.AmsMethods.Accent=c.default.Accent,e.AmsMethods.Tilde=c.default.Tilde,e.AmsMethods.Array=c.default.Array,e.AmsMethods.Spacer=c.default.Spacer,e.AmsMethods.NamedOp=c.default.NamedOp,e.AmsMethods.EqnArray=c.default.EqnArray},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.NodeFactory=void 0;var o=r(3),i=function(){function t(){this.mmlFactory=null,this.factory={node:t.createNode,token:t.createToken,text:t.createText,error:t.createError}}return t.createNode=function(t,e,r,n,a){void 0===r&&(r=[]),void 0===n&&(n={});var i=t.mmlFactory.create(e),s=i.arity;if(s===1/0||-1===s)1===r.length&&r[0].isInferred?i.setChildren(o.default.getChildren(r[0])):i.setChildren(r);else{for(var l=[],c=0,u=void 0;u=r[c];c++)if(u.isInferred){var p=t.mmlFactory.create(\"mrow\",{},o.default.getChildren(u));o.default.copyAttributes(u,p),l.push(p)}else l.push(u);i.setChildren(l)}return a&&i.appendChild(a),o.default.setProperties(i,n),i},t.createToken=function(t,e,r,n){void 0===r&&(r={}),void 0===n&&(n=\"\");var a=t.create(\"text\",n);return t.create(\"node\",e,[],r,a)},t.createText=function(t,e){return null==e?null:t.mmlFactory.create(\"text\").setText(e)},t.createError=function(t,e){var r=t.create(\"text\",e),n=t.create(\"node\",\"mtext\",[],{},r);return t.create(\"node\",\"merror\",[n],{\"data-mjx-error\":e})},t.prototype.setMmlFactory=function(t){this.mmlFactory=t},t.prototype.set=function(t,e){this.factory[t]=e},t.prototype.setCreators=function(t){for(var e in t)this.set(e,t[e])},t.prototype.create=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=this.factory[t]||this.factory.node,o=n.apply(void 0,a([this,e[0]],e.slice(1)));return\"node\"===t&&this.configuration.addNode(e[0],o),o},t.prototype.get=function(t){return this.factory[t]},t}();e.NodeFactory=i},function(t,e,r){\"use strict\";var n,a,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BaseConfiguration=e.BaseTags=e.Other=void 0;var i=r(0),s=r(16),l=r(2),c=r(3),u=r(1),p=r(15),f=r(9);function d(t,e){var r=t.stack.env.font?{mathvariant:t.stack.env.font}:{},n=s.MapHandler.getMap(\"remap\").lookup(e),a=t.create(\"token\",\"mo\",r,n?n.char:e);c.default.setProperty(a,\"fixStretchy\",!0),t.configuration.addNode(\"fixStretchy\",a),t.Push(a)}r(82),new u.CharacterMap(\"remap\",null,{\"-\":\"\\u2212\",\"*\":\"\\u2217\",\"`\":\"\\u2018\"}),e.Other=d;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(f.AbstractTags);e.BaseTags=h,e.BaseConfiguration=i.Configuration.create(\"base\",{handler:{character:[\"command\",\"special\",\"letter\",\"digit\"],delimiter:[\"delimiter\"],macro:[\"delimiter\",\"macros\",\"mathchar0mi\",\"mathchar0mo\",\"mathchar7\"],environment:[\"environment\"]},fallback:{character:d,macro:function(t,e){throw new l.default(\"UndefinedControlSequence\",\"Undefined control sequence %1\",\"\\\\\"+e)},environment:function(t,e){throw new l.default(\"UnknownEnv\",\"Unknown environment '%1'\",e)}},items:(a={},a[p.StartItem.prototype.kind]=p.StartItem,a[p.StopItem.prototype.kind]=p.StopItem,a[p.OpenItem.prototype.kind]=p.OpenItem,a[p.CloseItem.prototype.kind]=p.CloseItem,a[p.PrimeItem.prototype.kind]=p.PrimeItem,a[p.SubsupItem.prototype.kind]=p.SubsupItem,a[p.OverItem.prototype.kind]=p.OverItem,a[p.LeftItem.prototype.kind]=p.LeftItem,a[p.RightItem.prototype.kind]=p.RightItem,a[p.BeginItem.prototype.kind]=p.BeginItem,a[p.EndItem.prototype.kind]=p.EndItem,a[p.StyleItem.prototype.kind]=p.StyleItem,a[p.PositionItem.prototype.kind]=p.PositionItem,a[p.CellItem.prototype.kind]=p.CellItem,a[p.MmlItem.prototype.kind]=p.MmlItem,a[p.FnItem.prototype.kind]=p.FnItem,a[p.NotItem.prototype.kind]=p.NotItem,a[p.DotsItem.prototype.kind]=p.DotsItem,a[p.ArrayItem.prototype.kind]=p.ArrayItem,a[p.EqnArrayItem.prototype.kind]=p.EqnArrayItem,a[p.EquationItem.prototype.kind]=p.EquationItem,a),options:{maxMacros:1e3,baseURL:\"undefined\"==typeof document||0===document.getElementsByTagName(\"base\").length?\"\":String(document.location).replace(/#.*$/,\"\")},tags:{base:h}})},function(t,e,r){\"use strict\";var n,a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.clearDocument=e.saveDocument=e.makeBsprAttributes=e.removeProperty=e.getProperty=e.setProperty=e.balanceRules=void 0;var i=r(3),s=r(4),l=null,c=null,u=function(t){return c.root=t,l.outputJax.getBBox(c,l).w},p=function(t){for(var e=0;t&&!i.default.isType(t,\"mtable\");){if(i.default.isType(t,\"text\"))return null;i.default.isType(t,\"mrow\")?(t=t.childNodes[0],e=0):(t=t.parent.childNodes[e],e++)}return t},f=function(t,e){return t.childNodes[\"up\"===e?1:0].childNodes[0].childNodes[0].childNodes[0].childNodes[0]},d=function(t,e){return t.childNodes[e].childNodes[0].childNodes[0]},h=function(t){return d(t,0)},m=function(t){return d(t,t.childNodes.length-1)},g=function(t,e){return t.childNodes[\"up\"===e?0:1].childNodes[0].childNodes[0].childNodes[0]},v=function(t){for(;t&&!i.default.isType(t,\"mtd\");)t=t.parent;return t},y=function(t){return t.parent.childNodes[t.parent.childNodes.indexOf(t)+1]},b=function(t){for(;t&&null==e.getProperty(t,\"inference\");)t=t.parent;return t},x=function(t,e,r){void 0===r&&(r=!1);var n=0;if(t===e)return n;if(t!==e.parent){var a=t.childNodes,o=r?a.length-1:0;i.default.isType(a[o],\"mspace\")&&(n+=u(a[o])),t=e.parent}if(t===e)return n;var s=t.childNodes,l=r?s.length-1:0;return s[l]!==e&&(n+=u(s[l])),n},A=function(t,r){void 0===r&&(r=!1);var n=p(t),a=g(n,e.getProperty(n,\"inferenceRule\"));return x(t,n,r)+(u(n)-u(a))/2},M=function(t,r,n,a){if(void 0===a&&(a=!1),e.getProperty(r,\"inferenceRule\")||e.getProperty(r,\"labelledRule\")){var o=t.nodeFactory.create(\"node\",\"mrow\");r.parent.replaceChild(o,r),o.setChildren([r]),_(r,o),r=o}var l=a?r.childNodes.length-1:0,c=r.childNodes[l];i.default.isType(c,\"mspace\")?i.default.setAttribute(c,\"width\",s.default.Em(s.default.dimen2em(i.default.getAttribute(c,\"width\"))+n)):(c=t.nodeFactory.create(\"node\",\"mspace\",[],{width:s.default.Em(n)}),a?r.appendChild(c):(c.parent=r,r.childNodes.unshift(c)))},_=function(t,r){[\"inference\",\"proof\",\"maxAdjust\",\"labelledRule\"].forEach((function(n){var a=e.getProperty(t,n);null!=a&&(e.setProperty(r,n,a),e.removeProperty(t,n))}))},C=function(t,r,n,a,o){var i=t.nodeFactory.create(\"node\",\"mspace\",[],{width:s.default.Em(o)});if(\"left\"===a){var l=r.childNodes[n].childNodes[0];i.parent=l,l.childNodes.unshift(i)}else r.childNodes[n].appendChild(i);e.setProperty(r.parent,\"sequentAdjust_\"+a,o)},P=function(t,r){for(var n=r.pop();r.length;){var o=r.pop(),i=a(w(n,o),2),s=i[0],l=i[1];e.getProperty(n.parent,\"axiom\")&&(C(t,s<0?n:o,0,\"left\",Math.abs(s)),C(t,l<0?n:o,2,\"right\",Math.abs(l))),n=o}},w=function(t,e){var r=u(t.childNodes[2]),n=u(e.childNodes[2]);return[u(t.childNodes[0])-u(e.childNodes[0]),r-n]};e.balanceRules=function(t){var r,n;c=new t.document.options.MathItem(\"\",null,t.math.display);var a=t.data;!function(t){var r=t.nodeLists.sequent;if(r)for(var n=r.length-1,a=void 0;a=r[n];n--)if(e.getProperty(a,\"sequentProcessed\"))e.removeProperty(a,\"sequentProcessed\");else{var o=[],i=b(a);if(1===e.getProperty(i,\"inference\")){for(o.push(a);1===e.getProperty(i,\"inference\");){i=p(i);var s=h(f(i,e.getProperty(i,\"inferenceRule\"))),l=e.getProperty(s,\"inferenceRule\")?g(s,e.getProperty(s,\"inferenceRule\")):s;e.getProperty(l,\"sequent\")&&(a=l.childNodes[0],o.push(a),e.setProperty(a,\"sequentProcessed\",!0)),i=s}P(t,o)}}}(a);var i=a.nodeLists.inference||[];try{for(var s=o(i),l=s.next();!l.done;l=s.next()){var u=l.value,d=e.getProperty(u,\"proof\"),_=p(u),C=f(_,e.getProperty(_,\"inferenceRule\")),w=h(C);if(e.getProperty(w,\"inference\")){var S=A(w);if(S){M(a,w,-S);var T=x(u,_,!1);M(a,u,S-T)}}var k=m(C);if(null!=e.getProperty(k,\"inference\")){var O=A(k,!0);M(a,k,-O,!0);var E=x(u,_,!0),I=e.getProperty(u,\"maxAdjust\");null!=I&&(O=Math.max(O,I));var N=void 0;if(!d&&(N=v(u))){var q=y(N);if(q){var L=a.nodeFactory.create(\"node\",\"mspace\",[],{width:O-E+\"em\"});q.appendChild(L),u.removeProperty(\"maxAdjust\")}else{var F=b(N);F&&(O=e.getProperty(F,\"maxAdjust\")?Math.max(e.getProperty(F,\"maxAdjust\"),O):O,e.setProperty(F,\"maxAdjust\",O))}}else M(a,e.getProperty(u,\"proof\")?u:u.parent,O-E,!0)}}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}};var S=((n={}).bspr_maxAdjust=!0,n);e.setProperty=function(t,e,r){i.default.setProperty(t,\"bspr_\"+e,r)},e.getProperty=function(t,e){return i.default.getProperty(t,\"bspr_\"+e)},e.removeProperty=function(t,e){t.removeProperty(\"bspr_\"+e)},e.makeBsprAttributes=function(t){t.data.root.walkTree((function(t,e){var r=[];t.getPropertyNames().forEach((function(e){!S[e]&&e.match(RegExp(\"^bspr_\"))&&r.push(e+\":\"+t.getProperty(e))})),r.length&&i.default.setAttribute(t,\"semantics\",r.join(\";\"))}))},e.saveDocument=function(t){if(!(\"getBBox\"in(l=t.document).outputJax))throw Error(\"The bussproofs extension requires an output jax with a getBBox() method\")},e.clearDocument=function(t){l=null}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n,a=r(4),o=r(2),i=r(14);!function(t){function e(t,e){return t.string.substr(t.i,e.length)!==e||e.match(/\\\\[a-z]+$/i)&&t.string.charAt(t.i+e.length).match(/[a-z]/i)?0:(t.i+=e.length,1)}t.disassembleSymbol=function(t,e){var r=[t,e.char];if(e.attributes)for(var n in e.attributes)r.push(n),r.push(e.attributes[n]);return r},t.assembleSymbol=function(t){for(var e=t[0],r=t[1],n={},a=2;a<t.length;a+=2)n[t[a]]=t[a+1];return new i.Symbol(e,r,n)},t.GetCSname=function(t,e){if(\"\\\\\"!==t.GetNext())throw new o.default(\"MissingCS\",\"%1 must be followed by a control sequence\",e);return a.default.trimSpaces(t.GetArgument(e)).substr(1)},t.GetTemplate=function(t,e,r){for(var n=t.GetNext(),a=[],i=0,s=t.i;t.i<t.string.length;){if(\"#\"===(n=t.GetNext())){if(s!==t.i&&(a[i]=t.string.substr(s,t.i-s)),!(n=t.string.charAt(++t.i)).match(/^[1-9]$/))throw new o.default(\"CantUseHash2\",\"Illegal use of # in template for %1\",r);if(parseInt(n)!==++i)throw new o.default(\"SequentialParam\",\"Parameters for %1 must be numbered sequentially\",r);s=t.i+1}else if(\"{\"===n)return s!==t.i&&(a[i]=t.string.substr(s,t.i-s)),a.length>0?[i.toString()].concat(a):i;t.i++}throw new o.default(\"MissingReplacementString\",\"Missing replacement string for definition of %1\",e)},t.GetParameter=function(t,r,n){if(null==n)return t.GetArgument(r);for(var a=t.i,i=0,s=0;t.i<t.string.length;){var l=t.string.charAt(t.i);if(\"{\"===l)t.i===a&&(s=1),t.GetArgument(r),i=t.i-a;else{if(e(t,n))return s&&(a++,i-=2),t.string.substr(a,i);if(\"\\\\\"===l){t.i++,i++,s=0;var c=t.string.substr(t.i).match(/[a-z]+|./i);c&&(t.i+=c[0].length,i=t.i-a)}else t.i++,i++,s=0}}throw new o.default(\"RunawayArgument\",\"Runaway argument for %1?\",r)},t.MatchParam=e,t.addDelimiter=function(e,r,n,a){e.configuration.handlers.retrieve(t.NEW_DELIMITER).add(r,new i.Symbol(r,n,a))},t.addMacro=function(e,r,n,a,o){void 0===o&&(o=\"\"),e.configuration.handlers.retrieve(t.NEW_COMMAND).add(r,new i.Macro(o||r,n,a))},t.addEnvironment=function(e,r,n,a){e.configuration.handlers.retrieve(t.NEW_ENVIRONMENT).add(r,new i.Macro(r,n,a))},t.NEW_DELIMITER=\"new-Delimiter\",t.NEW_COMMAND=\"new-Command\",t.NEW_ENVIRONMENT=\"new-Environment\"}(n||(n={})),e.default=n},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(3),s=function(){function t(t,e,r){this._factory=t,this._env=e,this.global={},this.stack=[],this.global={isInner:r},this.stack=[this._factory.create(\"start\",this.global)],e&&(this.stack[0].env=e),this.env=this.stack[0].env}return Object.defineProperty(t.prototype,\"env\",{get:function(){return this._env},set:function(t){this._env=t},enumerable:!1,configurable:!0}),t.prototype.Push=function(){for(var t,e,r=[],s=0;s<arguments.length;s++)r[s]=arguments[s];try{for(var l=n(r),c=l.next();!c.done;c=l.next()){var u=c.value;if(u){var p=i.default.isNode(u)?this._factory.create(\"mml\",u):u;p.global=this.global;var f=a(this.stack.length?this.Top().checkItem(p):[null,!0],2),d=f[0],h=f[1];h&&(d?(this.Pop(),this.Push.apply(this,o(d))):(this.stack.push(p),p.env?(p.copyEnv&&Object.assign(p.env,this.env),this.env=p.env):p.env=this.env))}}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}},t.prototype.Pop=function(){var t=this.stack.pop();return t.isOpen||delete t.env,this.env=this.stack.length?this.Top().env:{},t},t.prototype.Top=function(t){return void 0===t&&(t=1),this.stack.length<t?null:this.stack[this.stack.length-t]},t.prototype.Prev=function(t){var e=this.Top();return t?e.First:e.Pop()},t.prototype.toString=function(){return\"stack[\\n  \"+this.stack.join(\"\\n  \")+\"\\n]\"},t}();e.default=s},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(34),s=r(18),l=r(10),c=function(){function t(t,e){void 0===e&&(e=[]),this.options={},this.packageData=new Map,this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.handlers=t.handlers,this.nodeFactory=new s.NodeFactory,this.nodeFactory.configuration=this,this.nodeFactory.setCreators(t.nodes),this.itemFactory=new i.default(t.items),this.itemFactory.configuration=this,l.defaultOptions.apply(void 0,a([this.options],e)),l.defaultOptions(this.options,t.options)}return t.prototype.pushParser=function(t){this.parsers.unshift(t)},t.prototype.popParser=function(){this.parsers.shift()},Object.defineProperty(t.prototype,\"parser\",{get:function(){return this.parsers[0]},enumerable:!1,configurable:!0}),t.prototype.clear=function(){this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.tags.resetTag()},t.prototype.addNode=function(t,e){var r=this.nodeLists[t];r||(r=this.nodeLists[t]=[]),r.push(e)},t.prototype.getList=function(t){var e,r,n=this.nodeLists[t]||[],a=[];try{for(var i=o(n),s=i.next();!s.done;s=i.next()){var l=s.value;this.inTree(l)&&a.push(l)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return this.nodeLists[t]=a,a},t.prototype.inTree=function(t){for(;t&&t!==this.root;)t=t.parent;return!!t},t}();e.default=c},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EncloseConfiguration=e.EncloseMethods=e.ENCLOSE_OPTIONS=void 0;var n=r(0),a=r(1),o=r(4);e.ENCLOSE_OPTIONS={\"data-arrowhead\":1,color:1,mathcolor:1,background:1,mathbackground:1,\"data-padding\":1,\"data-thickness\":1},e.EncloseMethods={},e.EncloseMethods.Enclose=function(t,r){var n=t.GetArgument(r).replace(/,/g,\" \"),a=t.GetBrackets(r,\"\"),i=t.ParseArg(r),s=o.default.keyvalOptions(a,e.ENCLOSE_OPTIONS);s.notation=n,t.Push(t.create(\"node\",\"menclose\",[i],s))},new a.CommandMap(\"enclose\",{enclose:\"Enclose\"},e.EncloseMethods),e.EncloseConfiguration=n.Configuration.create(\"enclose\",{handler:{macro:[\"enclose\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(2),a=r(1),o=r(8),i=r(4),s=r(21),l={NewCommand:function(t,e){var r=i.default.trimSpaces(t.GetArgument(e)),a=t.GetBrackets(e),o=t.GetBrackets(e),c=t.GetArgument(e);if(\"\\\\\"===r.charAt(0)&&(r=r.substr(1)),!r.match(/^(.|[a-z]+)$/i))throw new n.default(\"IllegalControlSequenceName\",\"Illegal control sequence name for %1\",e);if(a&&!(a=i.default.trimSpaces(a)).match(/^[0-9]+$/))throw new n.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",e);s.default.addMacro(t,r,l.Macro,[c,a,o])},NewEnvironment:function(t,e){var r=i.default.trimSpaces(t.GetArgument(e)),a=t.GetBrackets(e),o=t.GetBrackets(e),c=t.GetArgument(e),u=t.GetArgument(e);if(a&&!(a=i.default.trimSpaces(a)).match(/^[0-9]+$/))throw new n.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",e);s.default.addEnvironment(t,r,l.BeginEnv,[!0,c,u,a,o])},MacroDef:function(t,e){var r=s.default.GetCSname(t,e),n=s.default.GetTemplate(t,e,\"\\\\\"+r),a=t.GetArgument(e);n instanceof Array?s.default.addMacro(t,r,l.MacroWithTemplate,[a].concat(n)):s.default.addMacro(t,r,l.Macro,[a,n])},Let:function(t,e){var r=s.default.GetCSname(t,e),n=t.GetNext();\"=\"===n&&(t.i++,n=t.GetNext());var o=t.configuration.handlers;if(\"\\\\\"!==n){t.i++;var i=o.get(\"delimiter\").lookup(n);i?s.default.addDelimiter(t,\"\\\\\"+r,i.char,i.attributes):s.default.addMacro(t,r,l.Macro,[n])}else{e=s.default.GetCSname(t,e);var c=o.get(\"delimiter\").lookup(\"\\\\\"+e);if(c)return void s.default.addDelimiter(t,\"\\\\\"+r,c.char,c.attributes);var u=o.get(\"macro\").applicable(e);if(!u)return;if(u instanceof a.MacroMap){var p=u.lookup(e);return void s.default.addMacro(t,r,p.func,p.args,p.symbol)}c=u.lookup(e);var f=s.default.disassembleSymbol(r,c);s.default.addMacro(t,r,(function(t,e){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var a=s.default.assembleSymbol(r);return u.parser(t,a)}),f)}},MacroWithTemplate:function(t,e,r,a){for(var o=[],l=4;l<arguments.length;l++)o[l-4]=arguments[l];var c=parseInt(a,10);if(c){var u=[];if(t.GetNext(),o[0]&&!s.default.MatchParam(t,o[0]))throw new n.default(\"MismatchUseDef\",\"Use of %1 doesn't match its definition\",e);for(var p=0;p<c;p++)u.push(s.default.GetParameter(t,e,o[p+1]));r=i.default.substituteArgs(t,u,r)}if(t.string=i.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new n.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is here a recursive macro call?\")},BeginEnv:function(t,e,r,n,a,o){if(e.getProperty(\"end\")&&t.stack.env.closing===e.getName()){delete t.stack.env.closing;var s=t.string.slice(t.i);return t.string=n,t.i=0,t.Parse(),t.string=s,t.i=0,t.itemFactory.create(\"end\").setProperty(\"name\",e.getName())}if(a){var l=[];if(null!=o){var c=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\");l.push(null==c?o:c)}for(var u=l.length;u<a;u++)l.push(t.GetArgument(\"\\\\begin{\"+e.getName()+\"}\"));r=i.default.substituteArgs(t,l,r),n=i.default.substituteArgs(t,[],n)}return t.string=i.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,t.itemFactory.create(\"beginEnv\").setProperty(\"name\",e.getName())}};l.Macro=o.default.Macro,e.default=l},function(t,e,r){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.NewcommandConfiguration=void 0;var a=r(0),o=r(56),i=r(21);r(89);var s=r(12),l=r(1);e.NewcommandConfiguration=a.Configuration.create(\"newcommand\",{handler:{macro:[\"Newcommand-macros\"]},items:(n={},n[o.BeginEnvItem.prototype.kind]=o.BeginEnvItem,n),options:{maxMacros:1e3},init:function(t){new l.DelimiterMap(i.default.NEW_DELIMITER,s.default.delimiter,{}),new l.CommandMap(i.default.NEW_COMMAND,{},{}),new l.EnvironmentMap(i.default.NEW_ENVIRONMENT,s.default.environment,{},{}),t.append(a.Configuration.local({handler:{character:[],delimiter:[i.default.NEW_DELIMITER],macro:[i.default.NEW_DELIMITER,i.default.NEW_COMMAND],environment:[i.default.NEW_ENVIRONMENT]},priority:-1}))}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextMacrosMethods=void 0;var n=r(6),a=r(92),o=r(8);e.TextMacrosMethods={Comment:function(t,e){for(;t.i<t.string.length&&\"\\n\"!==t.string.charAt(t.i);)t.i++;t.i++},Math:function(t,e){t.saveText();for(var r,a,o=t.i,i=0;a=t.GetNext();)switch(r=t.i++,a){case\"\\\\\":\")\"===t.GetCS()&&(a=\"\\\\(\");case\"$\":if(0===i&&e===a){var s=t.texParser.configuration,l=new n.default(t.string.substr(o,r-o),t.stack.env,s).mml();return void t.PushMath(l)}break;case\"{\":i++;break;case\"}\":0===i&&t.Error(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"),i--}t.Error(\"MathNotTerminated\",\"Math-mode is not properly terminated\")},MathModeOnly:function(t,e){t.Error(\"MathModeOnly\",\"'%1' allowed only in math mode\",e)},Misplaced:function(t,e){t.Error(\"Misplaced\",\"'%1' can not be used here\",e)},OpenBrace:function(t,e){var r=t.stack.env;t.envStack.push(r),t.stack.env=Object.assign({},r)},CloseBrace:function(t,e){t.envStack.length?(t.saveText(),t.stack.env=t.envStack.pop()):t.Error(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\")},OpenQuote:function(t,e){t.string.charAt(t.i)===e?(t.text+=\"\\u201c\",t.i++):t.text+=\"\\u2018\"},CloseQuote:function(t,e){t.string.charAt(t.i)===e?(t.text+=\"\\u201d\",t.i++):t.text+=\"\\u2019\"},Tilde:function(t,e){t.text+=\"\\xa0\"},Space:function(t,e){for(t.text+=\" \";t.GetNext().match(/\\s/);)t.i++},SelfQuote:function(t,e){t.text+=e.substr(1)},Insert:function(t,e,r){t.text+=r},Accent:function(t,e,r){var n=t.ParseArg(name),a=t.create(\"token\",\"mo\",{},r);t.addAttributes(a),t.Push(t.create(\"node\",\"mover\",[n,a]))},Emph:function(t,e){var r=\"-tex-mathit\"===t.stack.env.mathvariant?\"normal\":\"-tex-mathit\";t.Push(t.ParseTextArg(e,{mathvariant:r}))},SetFont:function(t,e,r){t.saveText(),t.stack.env.mathvariant=r},SetSize:function(t,e,r){t.saveText(),t.stack.env.mathsize=r},CheckAutoload:function(t,e){var r=t.configuration.packageData.get(\"autoload\"),n=t.texParser;e=e.slice(1);var o=n.lookup(\"macro\",e);if(!o||r&&o._func===r.Autoload){if(n.parse(\"macro\",[n,e]),!o)return;a.retryAfter(Promise.resolve())}n.parse(\"macro\",[t,e])},Macro:o.default.Macro,Spacer:o.default.Spacer,Hskip:o.default.Hskip,rule:o.default.rule,Rule:o.default.Rule,HandleRef:o.default.HandleRef}},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.RequireConfiguration=e.options=e.RequireMethods=e.RequireLoad=void 0;var i=r(0),s=r(1),l=r(2),c=r(22),u=r(74),p=r(70),f=r(94),d=r(10),h=c.MathJax.config;function m(t,e){var r,a=t.parseOptions.options.require,o=t.parseOptions.packageData.get(\"require\").required,s=e.substr(a.prefix.length);if(o.indexOf(s)<0){o.push(s),function(t,e){var r,a;void 0===e&&(e=[]);var o=t.parseOptions.options.require.prefix;try{for(var i=n(e),s=i.next();!s.done;s=i.next()){var l=s.value;l.substr(0,o.length)===o&&m(t,l)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(r)throw r.error}}}(t,p.CONFIG.dependencies[e]);var l=i.ConfigurationHandler.get(s);if(l){var c=h[e]||{};l.options&&1===Object.keys(l.options).length&&l.options[s]&&((r={})[s]=c,c=r),t.configuration.add(l,t,c);var u=t.parseOptions.packageData.get(\"require\").configured;l.preprocessors.length&&!u.has(s)&&(u.set(s,!0),f.mathjax.retryAfter(Promise.resolve()))}}}function g(t,e){var r=t.options.require,n=r.allow,a=(\"[\"===e.substr(0,1)?\"\":r.prefix)+e;if(!(n.hasOwnProperty(a)?n[a]:n.hasOwnProperty(e)?n[e]:r.defaultAllow))throw new l.default(\"BadRequire\",'Extension \"%1\" is now allowed to be loaded',a);u.Package.packages.has(a)?m(t.configuration.packageData.get(\"require\").jax,a):f.mathjax.retryAfter(p.Loader.load(a))}e.RequireLoad=g,e.RequireMethods={Require:function(t,e){var r=t.GetArgument(e);if(r.match(/[^_a-zA-Z0-9]/)||\"\"===r)throw new l.default(\"BadPackageName\",\"Argument for %1 is not a valid package name\",e);g(t,r)}},e.options={require:{allow:d.expandable({base:!1,\"all-packages\":!1}),defaultAllow:!0,prefix:\"tex\"}},new s.CommandMap(\"require\",{require:\"Require\"},e.RequireMethods),e.RequireConfiguration=i.Configuration.create(\"require\",{handler:{macro:[\"require\"]},config:function(t,e){e.parseOptions.packageData.set(\"require\",{jax:e,required:o(e.options.packages),configured:new Map});var r=e.parseOptions.options.require,n=r.prefix;if(n.match(/[^_a-zA-Z0-9]/))throw Error(\"Illegal characters used in \\\\require prefix\");p.CONFIG.paths[n]||(p.CONFIG.paths[n]=\"[mathjax]/input/tex/extensions\"),r.prefix=\"[\"+n+\"]/\"},options:e.options})},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var a in e=arguments[r])Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t}).apply(this,arguments)},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TeX=void 0;var s=r(76),l=r(10),c=r(32),u=r(33),p=r(3),f=r(6),d=r(2),h=r(24),m=r(9),g=r(0);r(19);var v=function(t){function e(r){void 0===r&&(r={});var n=this,a=i(l.separateOptions(r,e.OPTIONS,c.FindTeX.OPTIONS),3),o=a[0],s=a[1],p=a[2];(n=t.call(this,s)||this).findTeX=n.options.FindTeX||new c.FindTeX(p);var f=n.options.packages,d=n.configuration=e.configure(f),g=n._parseOptions=new h.default(d,[n.options,m.TagsFactory.OPTIONS]);return l.userOptions(g.options,o),d.config(n),e.tags(g,d),n.postFilters.add(u.default.cleanSubSup,-6),n.postFilters.add(u.default.setInherited,-5),n.postFilters.add(u.default.moveLimits,-4),n.postFilters.add(u.default.cleanStretchy,-3),n.postFilters.add(u.default.cleanAttributes,-2),n.postFilters.add(u.default.combineRelations,-1),n}return a(e,t),e.configure=function(t){var e=new g.ParserConfiguration(t);return e.init(),e},e.tags=function(t,e){m.TagsFactory.addTags(e.tags),m.TagsFactory.setDefault(t.options.tags),t.tags=m.TagsFactory.getDefault(),t.tags.configuration=t},e.prototype.setMmlFactory=function(e){t.prototype.setMmlFactory.call(this,e),this._parseOptions.nodeFactory.setMmlFactory(e)},Object.defineProperty(e.prototype,\"parseOptions\",{get:function(){return this._parseOptions},enumerable:!1,configurable:!0}),e.prototype.compile=function(t,e){this.parseOptions.clear(),this.executeFilters(this.preFilters,t,e,this.parseOptions);var r,n=t.display;this.latex=t.math,this.parseOptions.tags.startEquation(t);try{r=new f.default(this.latex,{display:n,isInner:!1},this.parseOptions).mml()}catch(t){if(!(t instanceof d.default))throw t;this.parseOptions.error=!0,r=this.options.formatError(this,t)}return r=this.parseOptions.nodeFactory.create(\"node\",\"math\",[r]),n&&p.default.setAttribute(r,\"display\",\"block\"),this.parseOptions.tags.finishEquation(t),this.parseOptions.root=r,this.executeFilters(this.postFilters,t,e,this.parseOptions),this.mathNode=this.parseOptions.root,this.mathNode},e.prototype.findMath=function(t){return this.findTeX.findMath(t)},e.prototype.formatError=function(t){var e=t.message.replace(/\\n.*/,\"\");return this.parseOptions.nodeFactory.create(\"error\",e,t.id,this.latex)},e.NAME=\"TeX\",e.OPTIONS=o(o({},s.AbstractInputJax.OPTIONS),{FindTeX:null,packages:[\"base\"],digits:/^(?:[0-9]+(?:\\{,\\}[0-9]{3})*(?:\\.[0-9]*)?|\\.[0-9]+)/,maxBuffer:5120,formatError:function(t,e){return t.formatError(e)}}),e}(s.AbstractInputJax);e.TeX=v},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AllPackages=void 0,r(19),r(35),r(36),r(38),r(40),r(41),r(42),r(45),r(48),r(49),r(53),r(54),r(25),r(55),r(57),r(59),r(27),r(60),r(61),r(62),r(65),r(66),r(68),r(69),\"undefined\"!=typeof MathJax&&MathJax.loader&&MathJax.loader.preLoad(\"[tex]/action\",\"[tex]/ams\",\"[tex]/amscd\",\"[tex]/bbox\",\"[tex]/boldsymbol\",\"[tex]/braket\",\"[tex]/bussproofs\",\"[tex]/cancel\",\"[tex]/color\",\"[tex]/colorv2\",\"[tex]/enclose\",\"[tex]/extpfeil\",\"[tex]/html\",\"[tex]/mhchem\",\"[tex]/newcommand\",\"[tex]/noerrors\",\"[tex]/noundefined\",\"[tex]/physics\",\"[tex]/unicode\",\"[tex]/verb\",\"[tex]/configmacros\",\"[tex]/tagformat\",\"[tex]/textmacros\"),e.AllPackages=[\"base\",\"action\",\"ams\",\"amscd\",\"bbox\",\"boldsymbol\",\"braket\",\"bussproofs\",\"cancel\",\"color\",\"enclose\",\"extpfeil\",\"html\",\"mhchem\",\"newcommand\",\"noerrors\",\"noundefined\",\"unicode\",\"verb\",\"configmacros\",\"tagformat\",\"textmacros\"]},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindTeX=void 0;var i=r(77),s=r(78),l=r(79),c=function(t){function e(e){var r=t.call(this,e)||this;return r.getPatterns(),r}return a(e,t),e.prototype.getPatterns=function(){var t=this,e=this.options,r=[],n=[],a=[];this.end={},this.env=this.sub=0;var o=1;e.inlineMath.forEach((function(e){return t.addPattern(r,e,!1)})),e.displayMath.forEach((function(e){return t.addPattern(r,e,!0)})),r.length&&n.push(r.sort(s.sortLength).join(\"|\")),e.processEnvironments&&(n.push(\"\\\\\\\\begin\\\\s*\\\\{([^}]*)\\\\}\"),this.env=o,o++),e.processEscapes&&a.push(\"\\\\\\\\([\\\\\\\\$])\"),e.processRefs&&a.push(\"(\\\\\\\\(?:eq)?ref\\\\s*\\\\{[^}]*\\\\})\"),a.length&&(n.push(\"(\"+a.join(\"|\")+\")\"),this.sub=o),this.start=new RegExp(n.join(\"|\"),\"g\"),this.hasPatterns=n.length>0},e.prototype.addPattern=function(t,e,r){var n=o(e,2),a=n[0],i=n[1];t.push(s.quotePattern(a)),this.end[a]=[i,r,this.endPattern(i)]},e.prototype.endPattern=function(t,e){return new RegExp((e||s.quotePattern(t))+\"|\\\\\\\\(?:[a-zA-Z]|.)|[{}]\",\"g\")},e.prototype.findEnd=function(t,e,r,n){for(var a,i=o(n,3),s=i[0],c=i[1],u=i[2],p=u.lastIndex=r.index+r[0].length,f=0;a=u.exec(t);){if((a[1]||a[0])===s&&0===f)return l.protoItem(r[0],t.substr(p,a.index-p),a[0],e,r.index,a.index+a[0].length,c);\"{\"===a[0]?f++:\"}\"===a[0]&&f&&f--}return null},e.prototype.findMathInString=function(t,e,r){var n,a;for(this.start.lastIndex=0;n=this.start.exec(r);){if(void 0!==n[this.env]&&this.env){var o=\"\\\\\\\\end\\\\s*(\\\\{\"+s.quotePattern(n[this.env])+\"\\\\})\";(a=this.findEnd(r,e,n,[\"{\"+n[this.env]+\"}\",!0,this.endPattern(null,o)]))&&(a.math=a.open+a.math+a.close,a.open=a.close=\"\")}else if(void 0!==n[this.sub]&&this.sub){var i=n[this.sub];o=n.index+n[this.sub].length;a=2===i.length?l.protoItem(\"\",i.substr(1),\"\",e,n.index,o):l.protoItem(\"\",i,\"\",e,n.index,o,!1)}else a=this.findEnd(r,e,n,this.end[n[0]]);a&&(t.push(a),this.start.lastIndex=a.end.n)}},e.prototype.findMath=function(t){var e=[];if(this.hasPatterns)for(var r=0,n=t.length;r<n;r++)this.findMathInString(e,r,t[r]);return e},e.OPTIONS={inlineMath:[[\"\\\\(\",\"\\\\)\"]],displayMath:[[\"$$\",\"$$\"],[\"\\\\[\",\"\\\\]\"]],processEscapes:!0,processEnvironments:!0,processRefs:!0},e}(i.AbstractFindMath);e.FindTeX=c},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var a,o=r(5),i=r(3);!function(t){t.cleanStretchy=function(t){var e,r,a=t.data;try{for(var o=n(a.getList(\"fixStretchy\")),s=o.next();!s.done;s=o.next()){var l=s.value;if(i.default.getProperty(l,\"fixStretchy\")){var c=i.default.getForm(l);c&&c[3]&&c[3].stretchy&&i.default.setAttribute(l,\"stretchy\",!1);var u=l.parent;if(!(i.default.getTexClass(l)||c&&c[2])){var p=a.nodeFactory.create(\"node\",\"TeXAtom\",[l]);u.replaceChild(p,l),p.inheritAttributesFrom(l)}i.default.removeProperties(l,\"fixStretchy\")}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},t.cleanAttributes=function(t){t.data.root.walkTree((function(t,e){var r,a,o=t.attributes;if(o)try{for(var i=n(o.getExplicitNames()),s=i.next();!s.done;s=i.next()){var l=s.value;o.attributes[l]===t.attributes.getInherited(l)&&delete o.attributes[l]}}catch(t){r={error:t}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(r)throw r.error}}}),{})},t.combineRelations=function(t){var a,s;try{for(var l=n(t.data.getList(\"mo\")),c=l.next();!c.done;c=l.next()){var u=c.value;if(!u.getProperty(\"relationsCombined\")&&u.parent&&(!u.parent||i.default.isType(u.parent,\"mrow\"))&&i.default.getTexClass(u)===o.TEXCLASS.REL){for(var p=u.parent,f=void 0,d=p.childNodes,h=d.indexOf(u)+1,m=i.default.getProperty(u,\"variantForm\");h<d.length&&(f=d[h])&&i.default.isType(f,\"mo\")&&i.default.getTexClass(f)===o.TEXCLASS.REL;){if(m!==i.default.getProperty(f,\"variantForm\")||!r(u,f)){null==u.attributes.getExplicit(\"rspace\")&&i.default.setAttribute(u,\"rspace\",\"0pt\"),null==f.attributes.getExplicit(\"lspace\")&&i.default.setAttribute(f,\"lspace\",\"0pt\");break}i.default.appendChildren(u,i.default.getChildren(f)),e([\"stretchy\",\"rspace\"],u,f),i.default.setProperties(u,f.getAllProperties()),d.splice(h,1),f.parent=null,f.setProperty(\"relationsCombined\",!0)}u.attributes.setInherited(\"form\",u.getForms()[0])}}}catch(t){a={error:t}}finally{try{c&&!c.done&&(s=l.return)&&s.call(l)}finally{if(a)throw a.error}}};var e=function(t,e,r){var n=e.attributes,a=r.attributes;t.forEach((function(t){var e=a.getExplicit(t);null!=e&&n.set(t,e)}))},r=function(t,e){var r,a,o=function(t,e){return t.getExplicitNames().filter((function(r){return r!==e&&(\"stretchy\"!==r||t.getExplicit(\"stretchy\"))}))},i=t.attributes,s=e.attributes,l=o(i,\"lspace\"),c=o(s,\"rspace\");if(l.length!==c.length)return!1;try{for(var u=n(l),p=u.next();!p.done;p=u.next()){var f=p.value;if(i.getExplicit(f)!==s.getExplicit(f))return!1}}catch(t){r={error:t}}finally{try{p&&!p.done&&(a=u.return)&&a.call(u)}finally{if(r)throw r.error}}return!0},a=function(t,e,r){var a,o;try{for(var s=n(t.getList(\"m\"+e+r)),l=s.next();!l.done;l=s.next()){var c=l.value,u=c.childNodes;if(!u[c[e]]||!u[c[r]]){var p=c.parent,f=u[c[e]]?t.nodeFactory.create(\"node\",\"m\"+e,[u[c.base],u[c[e]]]):t.nodeFactory.create(\"node\",\"m\"+r,[u[c.base],u[c[r]]]);i.default.copyAttributes(c,f),p?p.replaceChild(f,c):t.root=f}}}catch(t){a={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(a)throw a.error}}};t.cleanSubSup=function(t){var e=t.data;e.error||(a(e,\"sub\",\"sup\"),a(e,\"under\",\"over\"))};var s=function(t,e,r){var a,o;try{for(var s=n(t.getList(e)),l=s.next();!l.done;l=s.next()){var c=l.value;if(!c.attributes.get(\"displaystyle\")){var u=c.childNodes[c.base],p=u.coreMO();if(u.getProperty(\"movablelimits\")&&!p.attributes.getExplicit(\"movablelimits\")){var f=t.nodeFactory.create(\"node\",r,c.childNodes);i.default.copyAttributes(c,f),c.parent?c.parent.replaceChild(f,c):t.root=f}}}}catch(t){a={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(a)throw a.error}}};t.moveLimits=function(t){var e=t.data;s(e,\"munderover\",\"msubsup\"),s(e,\"munder\",\"msub\"),s(e,\"mover\",\"msup\")},t.setInherited=function(t){t.data.root.setInheritedAttributes({},t.math.display,0,!1)}}(a||(a={})),e.default=a},function(t,e,r){\"use strict\";var n,a,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(11),s=r(81),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(i.BaseItem),c=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.defaultKind=\"dummy\",e.configuration=null,e}return o(e,t),e.DefaultStackItems=((a={})[l.prototype.kind]=l,a),e}(s.AbstractFactory);e.default=c},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ActionConfiguration=e.ActionMethods=void 0;var n=r(0),a=r(6),o=r(1),i=r(8);e.ActionMethods={},e.ActionMethods.Macro=i.default.Macro,e.ActionMethods.Toggle=function(t,e){for(var r,n=[];\"\\\\endtoggle\"!==(r=t.GetArgument(e));)n.push(new a.default(r,t.stack.env,t.configuration).mml());t.Push(t.create(\"node\",\"maction\",n,{actiontype:\"toggle\"}))},e.ActionMethods.Mathtip=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e);t.Push(t.create(\"node\",\"maction\",[r,n],{actiontype:\"tooltip\"}))},new o.CommandMap(\"action-macros\",{toggle:\"Toggle\",mathtip:\"Mathtip\",texttip:[\"Macro\",\"\\\\mathtip{#1}{\\\\text{#2}}\",2]},e.ActionMethods),e.ActionConfiguration=n.Configuration.create(\"action\",{handler:{macro:[\"action-macros\"]}})},function(t,e,r){\"use strict\";var n,a,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AmsConfiguration=e.AmsTags=void 0;var i=r(0),s=r(37),l=r(9),c=r(17);r(85);var u=r(1),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(l.AbstractTags);e.AmsTags=p;e.AmsConfiguration=i.Configuration.create(\"ams\",{handler:{delimiter:[\"AMSsymbols-delimiter\",\"AMSmath-delimiter\"],macro:[\"AMSsymbols-mathchar0mi\",\"AMSsymbols-mathchar0m0\",\"AMSsymbols-delimiter\",\"AMSsymbols-macros\",\"AMSmath-mathchar0mo\",\"AMSmath-macros\",\"AMSmath-delimiter\"],environment:[\"AMSmath-environment\"]},items:(a={},a[s.MultlineItem.prototype.kind]=s.MultlineItem,a),tags:{ams:p},init:function(t){new u.CommandMap(c.NEW_OPS,{},{}),t.append(i.Configuration.local({handler:{macro:[c.NEW_OPS]},priority:-1}))}})},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.MultlineItem=void 0;var o=r(15),i=r(4),s=r(3),l=r(2),c=r(7),u=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var a=t.call(this,e)||this;return a.factory.configuration.tags.start(\"multline\",!0,r[0]),a}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"multline\"},enumerable:!1,configurable:!0}),e.prototype.EndEntry=function(){this.table.length&&i.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.getProperty(\"shove\"),e=this.create(\"node\",\"mtd\",this.nodes,t?{columnalign:t}:{});this.setProperty(\"shove\",null),this.row.push(e),this.Clear()},e.prototype.EndRow=function(){if(1!==this.row.length)throw new l.default(\"MultlineRowsOneCol\",\"The rows within the %1 environment must have exactly one column\",\"multline\");var t=this.create(\"node\",\"mtr\",this.row);this.table.push(t),this.row=[]},e.prototype.EndTable=function(){if(t.prototype.EndTable.call(this),this.table.length){var e=this.table.length-1,r=-1;s.default.getAttribute(s.default.getChildren(this.table[0])[0],\"columnalign\")||s.default.setAttribute(s.default.getChildren(this.table[0])[0],\"columnalign\",c.TexConstant.Align.LEFT),s.default.getAttribute(s.default.getChildren(this.table[e])[0],\"columnalign\")||s.default.setAttribute(s.default.getChildren(this.table[e])[0],\"columnalign\",c.TexConstant.Align.RIGHT);var n=this.factory.configuration.tags.getTag();if(n){r=this.arraydef.side===c.TexConstant.Align.LEFT?0:this.table.length-1;var a=this.table[r],o=this.create(\"node\",\"mlabeledtr\",[n].concat(s.default.getChildren(a)));s.default.copyAttributes(a,o),this.table[r]=o}}this.factory.configuration.tags.end()},e}(o.ArrayItem);e.MultlineItem=u},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AmsCdConfiguration=void 0;var n=r(0);r(86),e.AmsCdConfiguration=n.Configuration.create(\"amscd\",{handler:{character:[\"amscd_special\"],macro:[\"amscd_macros\"],environment:[\"amscd_environment\"]},options:{amscd:{colspace:\"5pt\",rowspace:\"5pt\",harrowsize:\"2.75em\",varrowsize:\"1.75em\",hideHorizontalLabels:!1}}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(6),a=r(19),o=r(5),i=r(3),s={CD:function(t,e){t.Push(e);var r=t.itemFactory.create(\"array\"),n=t.configuration.options.amscd;return r.setProperties({minw:t.stack.env.CD_minw||n.harrowsize,minh:t.stack.env.CD_minh||n.varrowsize}),r.arraydef={columnalign:\"center\",columnspacing:n.colspace,rowspacing:n.rowspace,displaystyle:!0},r},arrow:function(t,e){var r=t.string.charAt(t.i);if(!r.match(/[><VA.|=]/))return a.Other(t,e);t.i++;var l=t.stack.Top();l.isKind(\"array\")&&!l.Size()||(s.cell(t,e),l=t.stack.Top());for(var c,u=l,p=u.table.length%2==1,f=(u.row.length+(p?0:1))%2;f;)s.cell(t,e),f--;var d={minsize:u.getProperty(\"minw\"),stretchy:!0},h={minsize:u.getProperty(\"minh\"),stretchy:!0,symmetric:!0,lspace:0,rspace:0};if(\".\"===r);else if(\"|\"===r)c=t.create(\"token\",\"mo\",h,\"\\u2225\");else if(\"=\"===r)c=t.create(\"token\",\"mo\",d,\"=\");else{var m={\">\":\"\\u2192\",\"<\":\"\\u2190\",V:\"\\u2193\",A:\"\\u2191\"}[r],g=t.GetUpTo(e+r,r),v=t.GetUpTo(e+r,r);if(\">\"===r||\"<\"===r){if(c=t.create(\"token\",\"mo\",d,m),g||(g=\"\\\\kern \"+u.getProperty(\"minw\")),g||v){var y={width:\".67em\",lspace:\".33em\"};if(c=t.create(\"node\",\"munderover\",[c]),g){var b=new n.default(g,t.stack.env,t.configuration).mml(),x=t.create(\"node\",\"mpadded\",[b],y);i.default.setAttribute(x,\"voffset\",\".1em\"),i.default.setChild(c,c.over,x)}if(v){var A=new n.default(v,t.stack.env,t.configuration).mml();i.default.setChild(c,c.under,t.create(\"node\",\"mpadded\",[A],y))}t.configuration.options.amscd.hideHorizontalLabels&&(c=t.create(\"node\",\"mpadded\",c,{depth:0,height:\".67em\"}))}}else{var M=t.create(\"token\",\"mo\",h,m);c=M,(g||v)&&(c=t.create(\"node\",\"mrow\"),g&&i.default.appendChildren(c,[new n.default(\"\\\\scriptstyle\\\\llap{\"+g+\"}\",t.stack.env,t.configuration).mml()]),M.texClass=o.TEXCLASS.ORD,i.default.appendChildren(c,[M]),v&&i.default.appendChildren(c,[new n.default(\"\\\\scriptstyle\\\\rlap{\"+v+\"}\",t.stack.env,t.configuration).mml()]))}}c&&t.Push(c),s.cell(t,e)},cell:function(t,e){var r=t.stack.Top();(r.table||[]).length%2==0&&0===(r.row||[]).length&&t.Push(t.create(\"node\",\"mpadded\",[],{height:\"8.5pt\",depth:\"2pt\"})),t.Push(t.itemFactory.create(\"cell\").setProperties({isEntry:!0,name:e}))},minCDarrowwidth:function(t,e){t.stack.env.CD_minw=t.GetDimen(e)},minCDarrowheight:function(t,e){t.stack.env.CD_minh=t.GetDimen(e)}};e.default=s},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BboxConfiguration=e.BboxMethods=void 0;var n=r(0),a=r(1),o=r(2);e.BboxMethods={},e.BboxMethods.BBox=function(t,e){for(var r,n,a,l=t.GetBrackets(e,\"\"),c=t.ParseArg(e),u=l.split(/,/),p=0,f=u.length;p<f;p++){var d=u[p].trim(),h=d.match(/^(\\.\\d+|\\d+(\\.\\d*)?)(pt|em|ex|mu|px|in|cm|mm)$/);if(h){if(r)throw new o.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Padding\",e);var m=s(h[1]+h[3]);m&&(r={height:\"+\"+m,depth:\"+\"+m,lspace:m,width:\"+\"+2*parseInt(h[1],10)+h[3]})}else if(d.match(/^([a-z0-9]+|\\#[0-9a-f]{6}|\\#[0-9a-f]{3})$/i)){if(n)throw new o.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Background\",e);n=d}else if(d.match(/^[-a-z]+:/i)){if(a)throw new o.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Style\",e);a=i(d)}else if(\"\"!==d)throw new o.default(\"InvalidBBoxProperty\",'\"%1\" doesn\\'t look like a color, a padding dimension, or a style',d)}r&&(c=t.create(\"node\",\"mpadded\",[c],r)),(n||a)&&(r={},n&&Object.assign(r,{mathbackground:n}),a&&Object.assign(r,{style:a}),c=t.create(\"node\",\"mstyle\",[c],r)),t.Push(c)};var i=function(t){return t},s=function(t){return t};new a.CommandMap(\"bbox\",{bbox:\"BBox\"},e.BboxMethods),e.BboxConfiguration=n.Configuration.create(\"bbox\",{handler:{macro:[\"bbox\"]}})},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.BoldsymbolConfiguration=e.rewriteBoldTokens=e.createBoldToken=e.BoldsymbolMethods=void 0;var a=r(0),o=r(3),i=r(7),s=r(1),l=r(18),c={};function u(t,e,r,n){var a=l.NodeFactory.createToken(t,e,r,n);return\"mtext\"!==e&&t.configuration.parser.stack.env.boldsymbol&&(o.default.setProperty(a,\"fixBold\",!0),t.configuration.addNode(\"fixBold\",a)),a}function p(t){var e,r;try{for(var a=n(t.data.getList(\"fixBold\")),s=a.next();!s.done;s=a.next()){var l=s.value;if(o.default.getProperty(l,\"fixBold\")){var u=o.default.getAttribute(l,\"mathvariant\");null==u?o.default.setAttribute(l,\"mathvariant\",i.TexConstant.Variant.BOLD):o.default.setAttribute(l,\"mathvariant\",c[u]||u),o.default.removeProperties(l,\"fixBold\")}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}}c[i.TexConstant.Variant.NORMAL]=i.TexConstant.Variant.BOLD,c[i.TexConstant.Variant.ITALIC]=i.TexConstant.Variant.BOLDITALIC,c[i.TexConstant.Variant.FRAKTUR]=i.TexConstant.Variant.BOLDFRAKTUR,c[i.TexConstant.Variant.SCRIPT]=i.TexConstant.Variant.BOLDSCRIPT,c[i.TexConstant.Variant.SANSSERIF]=i.TexConstant.Variant.BOLDSANSSERIF,c[\"-tex-calligraphic\"]=\"-tex-bold-calligraphic\",c[\"-tex-oldstyle\"]=\"-tex-bold-oldstyle\",e.BoldsymbolMethods={},e.BoldsymbolMethods.Boldsymbol=function(t,e){var r=t.stack.env.boldsymbol;t.stack.env.boldsymbol=!0;var n=t.ParseArg(e);t.stack.env.boldsymbol=r,t.Push(n)},new s.CommandMap(\"boldsymbol\",{boldsymbol:\"Boldsymbol\"},e.BoldsymbolMethods),e.createBoldToken=u,e.rewriteBoldTokens=p,e.BoldsymbolConfiguration=a.Configuration.create(\"boldsymbol\",{handler:{macro:[\"boldsymbol\"]},nodes:{token:u},postprocessors:[p]})},function(t,e,r){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.BraketConfiguration=void 0;var a=r(0),o=r(43);r(87),e.BraketConfiguration=a.Configuration.create(\"braket\",{handler:{character:[\"Braket-characters\"],macro:[\"Braket-macros\"]},items:(n={},n[o.BraketItem.prototype.kind]=o.BraketItem,n)})},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BraketItem=void 0;var o=r(11),i=r(5),s=r(4),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"braket\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){return e.isKind(\"close\")?[[this.factory.create(\"mml\",this.toMml())],!0]:e.isKind(\"mml\")?(this.Push(e.toMml()),this.getProperty(\"single\")?[[this.toMml()],!0]:o.BaseItem.fail):t.prototype.checkItem.call(this,e)},e.prototype.toMml=function(){var e=t.prototype.toMml.call(this),r=this.getProperty(\"open\"),n=this.getProperty(\"close\");if(this.getProperty(\"stretchy\"))return s.default.fenced(this.factory.configuration,r,e,n);var a={fence:!0,stretchy:!1,symmetric:!0,texClass:i.TEXCLASS.OPEN},o=this.create(\"token\",\"mo\",a,r);a.texClass=i.TEXCLASS.CLOSE;var l=this.create(\"token\",\"mo\",a,n);return this.create(\"node\",\"mrow\",[o,e,l],{open:r,close:n,texClass:i.TEXCLASS.INNER})},e}(o.BaseItem);e.BraketItem=l},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(8),a=r(5),o=r(2),i={};i.Macro=n.default.Macro,i.Braket=function(t,e,r,n,a,i){var s=t.GetNext();if(\"\"===s)throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);var l=!0;\"{\"===s&&(t.i++,l=!1),t.Push(t.itemFactory.create(\"braket\").setProperties({barmax:i,barcount:0,open:r,close:n,stretchy:a,single:l}))},i.Bar=function(t,e){var r=\"|\"===e?\"|\":\"\\u2225\",n=t.stack.Top();if(\"braket\"!==n.kind||n.getProperty(\"barcount\")>=n.getProperty(\"barmax\")){var o=t.create(\"token\",\"mo\",{texClass:a.TEXCLASS.ORD,stretchy:!1},r);t.Push(o)}else{if(\"|\"===r&&\"|\"===t.GetNext()&&(t.i++,r=\"\\u2225\"),n.getProperty(\"stretchy\")){var i=t.create(\"node\",\"TeXAtom\",[],{texClass:a.TEXCLASS.CLOSE});t.Push(i),n.setProperty(\"barcount\",n.getProperty(\"barcount\")+1),i=t.create(\"token\",\"mo\",{stretchy:!0,braketbar:!0},r),t.Push(i),i=t.create(\"node\",\"TeXAtom\",[],{texClass:a.TEXCLASS.OPEN}),t.Push(i)}else{var s=t.create(\"token\",\"mo\",{stretchy:!1,braketbar:!0},r);t.Push(s)}}},e.default=i},function(t,e,r){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.BussproofsConfiguration=void 0;var a=r(0),o=r(46),i=r(20);r(88),e.BussproofsConfiguration=a.Configuration.create(\"bussproofs\",{handler:{macro:[\"Bussproofs-macros\"],environment:[\"Bussproofs-environments\"]},items:(n={},n[o.ProofTreeItem.prototype.kind]=o.ProofTreeItem,n),preprocessors:[[i.saveDocument,1]],postprocessors:[[i.clearDocument,3],[i.makeBsprAttributes,2],[i.balanceRules,1]]})},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.ProofTreeItem=void 0;var o=r(2),i=r(11),s=r(23),l=r(20),c=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.leftLabel=null,e.rigthLabel=null,e.innerStack=new s.default(e.factory,{},!0),e}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"proofTree\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){if(t.isKind(\"end\")&&\"prooftree\"===t.getName()){var e=this.toMml();return l.setProperty(e,\"proof\",!0),[[this.factory.create(\"mml\",e),t],!0]}if(t.isKind(\"stop\"))throw new o.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return this.innerStack.Push(t),i.BaseItem.fail},e.prototype.toMml=function(){var e=t.prototype.toMml.call(this),r=this.innerStack.Top();if(r.isKind(\"start\")&&!r.Size())return e;this.innerStack.Push(this.factory.create(\"stop\"));var n=this.innerStack.Top().toMml();return this.create(\"node\",\"mrow\",[n,e],{})},e}(i.BaseItem);e.ProofTreeItem=c},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(2),i=r(6),s=r(4),l=r(20),c={Prooftree:function(t,e){return t.Push(e),t.itemFactory.create(\"proofTree\").setProperties({name:e.getName(),line:\"solid\",currentLine:\"solid\",rootAtTop:!1})},Axiom:function(t,e){var r=t.stack.Top();if(\"proofTree\"!==r.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var n=u(t,t.GetArgument(e));l.setProperty(n,\"axiom\",!0),r.Push(n)}},u=function(t,e){var r=s.default.internalMath(t,s.default.trimSpaces(e),0);if(!r[0].childNodes[0].childNodes.length)return t.create(\"node\",\"mrow\",[]);var n=t.create(\"node\",\"mspace\",[],{width:\".5ex\"}),o=t.create(\"node\",\"mspace\",[],{width:\".5ex\"});return t.create(\"node\",\"mrow\",a([n],r,[o]))};function p(t,e,r,n,a,o,i){var s,c,u,p,f=t.create(\"node\",\"mtr\",[t.create(\"node\",\"mtd\",[e],{})],{}),d=t.create(\"node\",\"mtr\",[t.create(\"node\",\"mtd\",r,{})],{}),h=t.create(\"node\",\"mtable\",i?[d,f]:[f,d],{align:\"top 2\",rowlines:o,framespacing:\"0 0\"});if(l.setProperty(h,\"inferenceRule\",i?\"up\":\"down\"),n&&(s=t.create(\"node\",\"mpadded\",[n],{height:\"+.5em\",width:\"+.5em\",voffset:\"-.15em\"}),l.setProperty(s,\"prooflabel\",\"left\")),a&&(c=t.create(\"node\",\"mpadded\",[a],{height:\"+.5em\",width:\"+.5em\",voffset:\"-.15em\"}),l.setProperty(c,\"prooflabel\",\"right\")),n&&a)u=[s,h,c],p=\"both\";else if(n)u=[s,h],p=\"left\";else{if(!a)return h;u=[h,c],p=\"right\"}return h=t.create(\"node\",\"mrow\",u),l.setProperty(h,\"labelledRule\",p),h}function f(t,e){if(\"$\"!==t.GetNext())throw new o.default(\"IllegalUseOfCommand\",\"Use of %1 does not match it's definition.\",e);t.i++;var r=t.GetUpTo(e,\"$\");if(-1===r.indexOf(\"\\\\fCenter\"))throw new o.default(\"IllegalUseOfCommand\",\"Missing \\\\fCenter in %1.\",e);var a=n(r.split(\"\\\\fCenter\"),2),s=a[0],c=a[1],u=new i.default(s,t.stack.env,t.configuration).mml(),p=new i.default(c,t.stack.env,t.configuration).mml(),f=new i.default(\"\\\\fCenter\",t.stack.env,t.configuration).mml(),d=t.create(\"node\",\"mtd\",[u],{}),h=t.create(\"node\",\"mtd\",[f],{}),m=t.create(\"node\",\"mtd\",[p],{}),g=t.create(\"node\",\"mtr\",[d,h,m],{}),v=t.create(\"node\",\"mtable\",[g],{columnspacing:\".5ex\",columnalign:\"center 2\"});return l.setProperty(v,\"sequent\",!0),t.configuration.addNode(\"sequent\",g),v}c.Inference=function(t,e,r){var n=t.stack.Top();if(\"proofTree\"!==n.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");if(n.Size()<r)throw new o.default(\"BadProofTree\",\"Proof tree badly specified.\");var a=n.getProperty(\"rootAtTop\"),i=1!==r||n.Peek()[0].childNodes.length?r:0,s=[];do{s.length&&s.unshift(t.create(\"node\",\"mtd\",[],{})),s.unshift(t.create(\"node\",\"mtd\",[n.Pop()],{rowalign:a?\"top\":\"bottom\"})),r--}while(r>0);var c=t.create(\"node\",\"mtr\",s,{}),f=t.create(\"node\",\"mtable\",[c],{framespacing:\"0 0\"}),d=u(t,t.GetArgument(e)),h=n.getProperty(\"currentLine\");h!==n.getProperty(\"line\")&&n.setProperty(\"currentLine\",n.getProperty(\"line\"));var m=p(t,f,[d],n.getProperty(\"left\"),n.getProperty(\"right\"),h,a);n.setProperty(\"left\",null),n.setProperty(\"right\",null),l.setProperty(m,\"inference\",i),t.configuration.addNode(\"inference\",m),n.Push(m)},c.Label=function(t,e,r){var n=t.stack.Top();if(\"proofTree\"!==n.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var a=s.default.internalMath(t,t.GetArgument(e),0),i=a.length>1?t.create(\"node\",\"mrow\",a,{}):a[0];n.setProperty(r,i)},c.SetLine=function(t,e,r,n){var a=t.stack.Top();if(\"proofTree\"!==a.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");a.setProperty(\"currentLine\",r),n&&a.setProperty(\"line\",r)},c.RootAtTop=function(t,e,r){var n=t.stack.Top();if(\"proofTree\"!==n.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");n.setProperty(\"rootAtTop\",r)},c.AxiomF=function(t,e){var r=t.stack.Top();if(\"proofTree\"!==r.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var n=f(t,e);l.setProperty(n,\"axiom\",!0),r.Push(n)},c.FCenter=function(t,e){},c.InferenceF=function(t,e,r){var n=t.stack.Top();if(\"proofTree\"!==n.kind)throw new o.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");if(n.Size()<r)throw new o.default(\"BadProofTree\",\"Proof tree badly specified.\");var a=n.getProperty(\"rootAtTop\"),i=1!==r||n.Peek()[0].childNodes.length?r:0,s=[];do{s.length&&s.unshift(t.create(\"node\",\"mtd\",[],{})),s.unshift(t.create(\"node\",\"mtd\",[n.Pop()],{rowalign:a?\"top\":\"bottom\"})),r--}while(r>0);var c=t.create(\"node\",\"mtr\",s,{}),u=t.create(\"node\",\"mtable\",[c],{framespacing:\"0 0\"}),d=f(t,e),h=n.getProperty(\"currentLine\");h!==n.getProperty(\"line\")&&n.setProperty(\"currentLine\",n.getProperty(\"line\"));var m=p(t,u,[d],n.getProperty(\"left\"),n.getProperty(\"right\"),h,a);n.setProperty(\"left\",null),n.setProperty(\"right\",null),l.setProperty(m,\"inference\",i),t.configuration.addNode(\"inference\",m),n.Push(m)},e.default=c},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CancelConfiguration=e.CancelMethods=void 0;var n=r(0),a=r(7),o=r(1),i=r(4),s=r(25);e.CancelMethods={},e.CancelMethods.Cancel=function(t,e,r){var n=t.GetBrackets(e,\"\"),a=t.ParseArg(e),o=i.default.keyvalOptions(n,s.ENCLOSE_OPTIONS);o.notation=r,t.Push(t.create(\"node\",\"menclose\",[a],o))},e.CancelMethods.CancelTo=function(t,e){var r=t.GetBrackets(e,\"\"),n=t.ParseArg(e),o=t.ParseArg(e),l=i.default.keyvalOptions(r,s.ENCLOSE_OPTIONS);l.notation=[a.TexConstant.Notation.UPDIAGONALSTRIKE,a.TexConstant.Notation.UPDIAGONALARROW,a.TexConstant.Notation.NORTHEASTARROW].join(\" \"),n=t.create(\"node\",\"mpadded\",[n],{depth:\"-.1em\",height:\"+.1em\",voffset:\".1em\"}),t.Push(t.create(\"node\",\"msup\",[t.create(\"node\",\"menclose\",[o],l),n]))},new o.CommandMap(\"cancel\",{cancel:[\"Cancel\",a.TexConstant.Notation.UPDIAGONALSTRIKE],bcancel:[\"Cancel\",a.TexConstant.Notation.DOWNDIAGONALSTRIKE],xcancel:[\"Cancel\",a.TexConstant.Notation.UPDIAGONALSTRIKE+\" \"+a.TexConstant.Notation.DOWNDIAGONALSTRIKE],cancelto:\"CancelTo\"},e.CancelMethods),e.CancelConfiguration=n.Configuration.create(\"cancel\",{handler:{macro:[\"cancel\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorConfiguration=void 0;var n=r(1),a=r(0),o=r(50),i=r(51);new n.CommandMap(\"color\",{color:\"Color\",textcolor:\"TextColor\",definecolor:\"DefineColor\",colorbox:\"ColorBox\",fcolorbox:\"FColorBox\"},o.ColorMethods);e.ColorConfiguration=a.Configuration.create(\"color\",{handler:{macro:[\"color\"]},options:{color:{padding:\"5px\",borderWidth:\"2px\"}},config:function(t,e){e.parseOptions.packageData.set(\"color\",{model:new i.ColorModel})}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorMethods=void 0;var n=r(3),a=r(4);function o(t){var e=\"+\"+t,r=t.replace(/^.*?([a-z]*)$/,\"$1\");return{width:\"+\"+2*parseFloat(e)+r,height:e,depth:e,lspace:t}}e.ColorMethods={},e.ColorMethods.Color=function(t,e){var r=t.GetBrackets(e,\"\"),n=t.GetArgument(e),a=t.configuration.packageData.get(\"color\").model.getColor(r,n),o=t.itemFactory.create(\"style\").setProperties({styles:{mathcolor:a}});t.stack.env.color=a,t.Push(o)},e.ColorMethods.TextColor=function(t,e){var r=t.GetBrackets(e,\"\"),n=t.GetArgument(e),a=t.configuration.packageData.get(\"color\").model.getColor(r,n),o=t.stack.env.color;t.stack.env.color=a;var i=t.ParseArg(e);o?t.stack.env.color=o:delete t.stack.env.color;var s=t.create(\"node\",\"mstyle\",[i],{mathcolor:a});t.Push(s)},e.ColorMethods.DefineColor=function(t,e){var r=t.GetArgument(e),n=t.GetArgument(e),a=t.GetArgument(e);t.configuration.packageData.get(\"color\").model.defineColor(n,r,a)},e.ColorMethods.ColorBox=function(t,e){var r=t.GetArgument(e),i=a.default.internalMath(t,t.GetArgument(e)),s=t.configuration.packageData.get(\"color\").model,l=t.create(\"node\",\"mpadded\",i,{mathbackground:s.getColor(\"named\",r)});n.default.setProperties(l,o(t.options.color.padding)),t.Push(l)},e.ColorMethods.FColorBox=function(t,e){var r=t.GetArgument(e),i=t.GetArgument(e),s=a.default.internalMath(t,t.GetArgument(e)),l=t.options.color,c=t.configuration.packageData.get(\"color\").model,u=t.create(\"node\",\"mpadded\",s,{mathbackground:c.getColor(\"named\",i),style:\"border: \"+l.borderWidth+\" solid \"+c.getColor(\"named\",r)});n.default.setProperties(u,o(l.padding)),t.Push(u)}},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorModel=void 0;var a=r(2),o=r(52),i=new Map,s=function(){function t(){this.userColors=new Map}return t.prototype.normalizeColor=function(t,e){if(!t||\"named\"===t)return e;if(i.has(t))return i.get(t)(e);throw new a.default(\"UndefinedColorModel\",\"Color model '%1' not defined\",t)},t.prototype.getColor=function(t,e){return t&&\"named\"!==t?this.normalizeColor(t,e):this.getColorByName(e)},t.prototype.getColorByName=function(t){return this.userColors.has(t)?this.userColors.get(t):o.COLORS.has(t)?o.COLORS.get(t):t},t.prototype.defineColor=function(t,e,r){var n=this.normalizeColor(t,r);this.userColors.set(e,n)},t}();e.ColorModel=s,i.set(\"rgb\",(function(t){var e,r,o=t.trim().split(/\\s*,\\s*/),i=\"#\";if(3!==o.length)throw new a.default(\"ModelArg1\",\"Color values for the %1 model require 3 numbers\",\"rgb\");try{for(var s=n(o),l=s.next();!l.done;l=s.next()){var c=l.value;if(!c.match(/^(\\d+(\\.\\d*)?|\\.\\d+)$/))throw new a.default(\"InvalidDecimalNumber\",\"Invalid decimal number\");var u=parseFloat(c);if(u<0||u>1)throw new a.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"rgb\",\"0\",\"1\");var p=Math.floor(255*u).toString(16);p.length<2&&(p=\"0\"+p),i+=p}}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return i})),i.set(\"RGB\",(function(t){var e,r,o=t.trim().split(/\\s*,\\s*/),i=\"#\";if(3!==o.length)throw new a.default(\"ModelArg1\",\"Color values for the %1 model require 3 numbers\",\"RGB\");try{for(var s=n(o),l=s.next();!l.done;l=s.next()){var c=l.value;if(!c.match(/^\\d+$/))throw new a.default(\"InvalidNumber\",\"Invalid number\");var u=parseInt(c);if(u>255)throw new a.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"RGB\",\"0\",\"255\");var p=u.toString(16);p.length<2&&(p=\"0\"+p),i+=p}}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return i})),i.set(\"gray\",(function(t){if(!t.match(/^\\s*(\\d+(\\.\\d*)?|\\.\\d+)\\s*$/))throw new a.default(\"InvalidDecimalNumber\",\"Invalid decimal number\");var e=parseFloat(t);if(e<0||e>1)throw new a.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"gray\",\"0\",\"1\");var r=Math.floor(255*e).toString(16);return r.length<2&&(r=\"0\"+r),\"#\"+r+r+r}))},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.COLORS=void 0,e.COLORS=new Map([[\"Apricot\",\"#FBB982\"],[\"Aquamarine\",\"#00B5BE\"],[\"Bittersweet\",\"#C04F17\"],[\"Black\",\"#221E1F\"],[\"Blue\",\"#2D2F92\"],[\"BlueGreen\",\"#00B3B8\"],[\"BlueViolet\",\"#473992\"],[\"BrickRed\",\"#B6321C\"],[\"Brown\",\"#792500\"],[\"BurntOrange\",\"#F7921D\"],[\"CadetBlue\",\"#74729A\"],[\"CarnationPink\",\"#F282B4\"],[\"Cerulean\",\"#00A2E3\"],[\"CornflowerBlue\",\"#41B0E4\"],[\"Cyan\",\"#00AEEF\"],[\"Dandelion\",\"#FDBC42\"],[\"DarkOrchid\",\"#A4538A\"],[\"Emerald\",\"#00A99D\"],[\"ForestGreen\",\"#009B55\"],[\"Fuchsia\",\"#8C368C\"],[\"Goldenrod\",\"#FFDF42\"],[\"Gray\",\"#949698\"],[\"Green\",\"#00A64F\"],[\"GreenYellow\",\"#DFE674\"],[\"JungleGreen\",\"#00A99A\"],[\"Lavender\",\"#F49EC4\"],[\"LimeGreen\",\"#8DC73E\"],[\"Magenta\",\"#EC008C\"],[\"Mahogany\",\"#A9341F\"],[\"Maroon\",\"#AF3235\"],[\"Melon\",\"#F89E7B\"],[\"MidnightBlue\",\"#006795\"],[\"Mulberry\",\"#A93C93\"],[\"NavyBlue\",\"#006EB8\"],[\"OliveGreen\",\"#3C8031\"],[\"Orange\",\"#F58137\"],[\"OrangeRed\",\"#ED135A\"],[\"Orchid\",\"#AF72B0\"],[\"Peach\",\"#F7965A\"],[\"Periwinkle\",\"#7977B8\"],[\"PineGreen\",\"#008B72\"],[\"Plum\",\"#92268F\"],[\"ProcessBlue\",\"#00B0F0\"],[\"Purple\",\"#99479B\"],[\"RawSienna\",\"#974006\"],[\"Red\",\"#ED1B23\"],[\"RedOrange\",\"#F26035\"],[\"RedViolet\",\"#A1246B\"],[\"Rhodamine\",\"#EF559F\"],[\"RoyalBlue\",\"#0071BC\"],[\"RoyalPurple\",\"#613F99\"],[\"RubineRed\",\"#ED017D\"],[\"Salmon\",\"#F69289\"],[\"SeaGreen\",\"#3FBC9D\"],[\"Sepia\",\"#671800\"],[\"SkyBlue\",\"#46C5DD\"],[\"SpringGreen\",\"#C6DC67\"],[\"Tan\",\"#DA9D76\"],[\"TealBlue\",\"#00AEB3\"],[\"Thistle\",\"#D883B7\"],[\"Turquoise\",\"#00B4CE\"],[\"Violet\",\"#58429B\"],[\"VioletRed\",\"#EF58A0\"],[\"White\",\"#FFFFFF\"],[\"WildStrawberry\",\"#EE2967\"],[\"Yellow\",\"#FFF200\"],[\"YellowGreen\",\"#98CC70\"],[\"YellowOrange\",\"#FAA21A\"]])},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorConfiguration=e.ColorV2Methods=void 0;var n=r(1),a=r(0);e.ColorV2Methods={Color:function(t,e){var r=t.GetArgument(e),n=t.stack.env.color;t.stack.env.color=r;var a=t.ParseArg(e);n?t.stack.env.color=n:delete t.stack.env.color;var o=t.create(\"node\",\"mstyle\",[a],{mathcolor:r});t.Push(o)}},new n.CommandMap(\"colorv2\",{color:\"Color\"},e.ColorV2Methods),e.ColorConfiguration=a.Configuration.create(\"colorv2\",{handler:{macro:[\"colorv2\"]}})},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ConfigMacrosConfiguration=void 0;var a=r(0),o=r(10),i=r(1),s=r(14),l=r(26);e.ConfigMacrosConfiguration=a.Configuration.create(\"configmacros\",{init:function(t){new i.CommandMap(\"configmacros-map\",{},{}),t.append(a.Configuration.local({handler:{macro:[\"configmacros-map\"]},priority:3}))},config:function(t,e){var r,a,o=e.parseOptions.handlers.retrieve(\"configmacros-map\"),i=e.parseOptions.options.macros;try{for(var c=n(Object.keys(i)),u=c.next();!u.done;u=c.next()){var p=u.value,f=\"string\"==typeof i[p]?[i[p]]:i[p],d=Array.isArray(f[2])?new s.Macro(p,l.default.MacroWithTemplate,f.slice(0,2).concat(f[2])):new s.Macro(p,l.default.Macro,f);o.add(p,d)}}catch(t){r={error:t}}finally{try{u&&!u.done&&(a=c.return)&&a.call(c)}finally{if(r)throw r.error}}},options:{macros:o.expandable({})}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ExtpfeilConfiguration=e.ExtpfeilMethods=void 0;var n=r(0),a=r(1),o=r(17),i=r(21),s=r(27),l=r(2);e.ExtpfeilMethods={},e.ExtpfeilMethods.xArrow=o.AmsMethods.xArrow,e.ExtpfeilMethods.NewExtArrow=function(t,r){var n=t.GetArgument(r),a=t.GetArgument(r),o=t.GetArgument(r);if(!n.match(/^\\\\([a-z]+|.)$/i))throw new l.default(\"NewextarrowArg1\",\"First argument to %1 must be a control sequence name\",r);if(!a.match(/^(\\d+),(\\d+)$/))throw new l.default(\"NewextarrowArg2\",\"Second argument to %1 must be two integers separated by a comma\",r);if(!o.match(/^(\\d+|0x[0-9A-F]+)$/i))throw new l.default(\"NewextarrowArg3\",\"Third argument to %1 must be a unicode character number\",r);n=n.substr(1);var s=a.split(\",\");i.default.addMacro(t,n,e.ExtpfeilMethods.xArrow,[parseInt(o),parseInt(s[0]),parseInt(s[1])])},new a.CommandMap(\"extpfeil\",{xtwoheadrightarrow:[\"xArrow\",8608,12,16],xtwoheadleftarrow:[\"xArrow\",8606,17,13],xmapsto:[\"xArrow\",8614,6,7],xlongequal:[\"xArrow\",61,7,7],xtofrom:[\"xArrow\",8644,12,12],Newextarrow:\"NewExtArrow\"},e.ExtpfeilMethods);e.ExtpfeilConfiguration=n.Configuration.create(\"extpfeil\",{handler:{macro:[\"extpfeil\"]},init:function(t){s.NewcommandConfiguration.init(t)}})},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BeginEnvItem=void 0;var o=r(2),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"beginEnv\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){if(e.getName()!==this.getName())throw new o.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),e.getName());return[[this.factory.create(\"mml\",this.toMml())],!0]}if(e.isKind(\"stop\"))throw new o.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(r(11).BaseItem);e.BeginEnvItem=i},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HtmlConfiguration=void 0;var n=r(0),a=r(1),o=r(58);new a.CommandMap(\"html_macros\",{href:\"Href\",class:\"Class\",style:\"Style\",cssId:\"Id\"},o.default),e.HtmlConfiguration=n.Configuration.create(\"html\",{handler:{macro:[\"html_macros\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(3),a={Href:function(t,e){var r=t.GetArgument(e),a=o(t,e);n.default.setAttribute(a,\"href\",r),t.Push(a)},Class:function(t,e){var r=t.GetArgument(e),a=o(t,e),i=n.default.getAttribute(a,\"class\");i&&(r=i+\" \"+r),n.default.setAttribute(a,\"class\",r),t.Push(a)},Style:function(t,e){var r=t.GetArgument(e),a=o(t,e),i=n.default.getAttribute(a,\"style\");i&&(\";\"!==r.charAt(r.length-1)&&(r+=\";\"),r=i+\" \"+r),n.default.setAttribute(a,\"style\",r),t.Push(a)},Id:function(t,e){var r=t.GetArgument(e),a=o(t,e);n.default.setAttribute(a,\"id\",r),t.Push(a)}},o=function(t,e){var r=t.ParseArg(e);if(!n.default.isInferred(r))return r;var a=n.default.getChildren(r);if(1===a.length)return a[0];var o=t.create(\"node\",\"mrow\");return n.default.copyChildren(r,o),n.default.copyAttributes(r,o),o};e.default=a},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MhchemConfiguration=void 0;var n=r(0),a=r(1),o=r(2),i=r(8),s=r(17),l=r(90),c={};c.Macro=i.default.Macro,c.xArrow=s.AmsMethods.xArrow,c.Machine=function(t,e,r){try{var n=t.GetArgument(e),a=l.mhchemParser.go(n,r),i=l.texify.go(a);t.string=i+t.string.substr(t.i),t.i=0}catch(t){throw new o.default(t[0],t[1],t.slice(2))}},new a.CommandMap(\"mhchem\",{ce:[\"Machine\",\"ce\"],pu:[\"Machine\",\"pu\"],longrightleftharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle{-}\\\\!\\\\!{\\\\rightharpoonup}}{\\\\smash{{\\\\leftharpoondown}\\\\!\\\\!{-}}}\"],longRightleftharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle{-}\\\\!\\\\!{\\\\rightharpoonup}}{\\\\smash{\\\\leftharpoondown}}\"],longLeftrightharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle\\\\vphantom{{-}}{\\\\rightharpoonup}}{\\\\smash{{\\\\leftharpoondown}\\\\!\\\\!{-}}}\"],longleftrightarrows:[\"Macro\",\"\\\\stackrel{\\\\longrightarrow}{\\\\smash{\\\\longleftarrow}\\\\Rule{0px}{.25em}{0px}}\"],tripledash:[\"Macro\",\"\\\\vphantom{-}\\\\raise2mu{\\\\kern2mu\\\\tiny\\\\text{-}\\\\kern1mu\\\\text{-}\\\\kern1mu\\\\text{-}\\\\kern2mu}\"],xrightarrow:[\"xArrow\",8594,5,6],xleftarrow:[\"xArrow\",8592,7,3],xleftrightarrow:[\"xArrow\",8596,6,6],xrightleftharpoons:[\"xArrow\",8652,5,7],xRightleftharpoons:[\"xArrow\",8652,5,7],xLeftrightharpoons:[\"xArrow\",8652,5,7]},c),e.MhchemConfiguration=n.Configuration.create(\"mhchem\",{handler:{macro:[\"mhchem\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NoErrorsConfiguration=void 0;var n=r(0);e.NoErrorsConfiguration=n.Configuration.create(\"noerrors\",{nodes:{error:function(t,e,r,n){var a=t.create(\"token\",\"mtext\",{},n.replace(/\\n/g,\" \"));return t.create(\"node\",\"merror\",[a],{\"data-mjx-error\":e,title:e})}}})},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.NoUndefinedConfiguration=void 0;var a=r(0);e.NoUndefinedConfiguration=a.Configuration.create(\"noundefined\",{fallback:{macro:function(t,e){var r,a,o=t.create(\"text\",\"\\\\\"+e),i=t.options.noundefined||{},s={};try{for(var l=n([\"color\",\"background\",\"size\"]),c=l.next();!c.done;c=l.next()){var u=c.value;i[u]&&(s[\"math\"+u]=i[u])}}catch(t){r={error:t}}finally{try{c&&!c.done&&(a=l.return)&&a.call(l)}finally{if(r)throw r.error}}t.Push(t.create(\"node\",\"mtext\",[],s,o))}},options:{noundefined:{color:\"red\",background:\"\",size:\"\"}},priority:3})},function(t,e,r){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.PhysicsConfiguration=void 0;var a=r(0),o=r(63);r(91),e.PhysicsConfiguration=a.Configuration.create(\"physics\",{handler:{macro:[\"Physics-automatic-bracing-macros\",\"Physics-vector-macros\",\"Physics-vector-chars\",\"Physics-derivative-macros\",\"Physics-expressions-macros\",\"Physics-quick-quad-macros\",\"Physics-bra-ket-macros\",\"Physics-matrix-macros\"],character:[\"Physics-characters\"],environment:[\"Physics-aux-envs\"]},items:(n={},n[o.AutoOpen.prototype.kind]=o.AutoOpen,n)})},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutoOpen=void 0;var o=r(11),i=r(4),s=r(6),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"auto open\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.toMml=function(){var e=this.factory.configuration.parser,r=this.getProperty(\"right\");if(this.getProperty(\"smash\")){var n=t.prototype.toMml.call(this),a=e.create(\"node\",\"mpadded\",[n],{height:0,depth:0});this.Clear(),this.Push(e.create(\"node\",\"TeXAtom\",[a]))}r&&this.Push(new s.default(r,e.stack.env,e.configuration).mml());var o=t.prototype.toMml.call(this);return i.default.fenced(this.factory.configuration,this.getProperty(\"open\"),o,this.getProperty(\"close\"),this.getProperty(\"big\"))},e.prototype.checkItem=function(e){var r=e.getProperty(\"autoclose\");return r&&r===this.getProperty(\"close\")?this.getProperty(\"ignore\")?(this.Clear(),[[],!0]):[[this.toMml()],!0]:t.prototype.checkItem.call(this,e)},e}(o.BaseItem);e.AutoOpen=l},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(8),o=r(6),i=r(2),s=r(5),l=r(4),c=r(3),u=r(18),p={},f={\"(\":\")\",\"[\":\"]\",\"{\":\"}\",\"|\":\"|\"},d=/^(b|B)i(g{1,2})$/;p.Quantity=function(t,e,r,n,a,u,p){void 0===r&&(r=\"(\"),void 0===n&&(n=\")\"),void 0===a&&(a=!1),void 0===u&&(u=\"\"),void 0===p&&(p=\"\");var h=!!a&&t.GetStar(),m=t.GetNext(),g=t.i,v=null;if(\"\\\\\"===m){if(t.i++,!(v=t.GetCS()).match(d)){var y=t.create(\"node\",\"mrow\");return t.Push(l.default.fenced(t.configuration,r,y,n)),void(t.i=g)}m=t.GetNext()}var b=f[m];if(a&&\"{\"!==m)throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);if(!b){y=t.create(\"node\",\"mrow\");return t.Push(l.default.fenced(t.configuration,r,y,n)),void(t.i=g)}if(u){var x=t.create(\"token\",\"mi\",{texClass:s.TEXCLASS.OP},u);p&&c.default.setAttribute(x,\"mathvariant\",p),t.Push(t.itemFactory.create(\"fn\",x))}if(\"{\"===m){var A=t.GetArgument(e);return m=a?r:\"\\\\{\",b=a?n:\"\\\\}\",A=h?m+\" \"+A+\" \"+b:v?\"\\\\\"+v+\"l\"+m+\" \"+A+\" \\\\\"+v+\"r\"+b:\"\\\\left\"+m+\" \"+A+\" \\\\right\"+b,void t.Push(new o.default(A,t.stack.env,t.configuration).mml())}a&&(m=r,b=n),t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:m,close:b,big:v}))},p.Eval=function(t,e){var r=t.GetStar(),n=t.GetNext();if(\"{\"!==n){if(\"(\"===n||\"[\"===n)return t.i++,void t.Push(t.itemFactory.create(\"auto open\").setProperties({open:n,close:\"|\",smash:r,right:\"\\\\vphantom{\\\\int}\"}));throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS)}var a=t.GetArgument(e),o=\"\\\\left. \"+(r?\"\\\\smash{\"+a+\"}\":a)+\" \\\\vphantom{\\\\int}\\\\right|\";t.string=t.string.slice(0,t.i)+o+t.string.slice(t.i)},p.Commutator=function(t,e,r,n){void 0===r&&(r=\"[\"),void 0===n&&(n=\"]\");var a=t.GetStar(),s=t.GetNext(),l=null;if(\"\\\\\"===s){if(t.i++,!(l=t.GetCS()).match(d))throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);s=t.GetNext()}if(\"{\"!==s)throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);var c=t.GetArgument(e)+\",\"+t.GetArgument(e);c=a?r+\" \"+c+\" \"+n:l?\"\\\\\"+l+\"l\"+r+\" \"+c+\" \\\\\"+l+\"r\"+n:\"\\\\left\"+r+\" \"+c+\" \\\\right\"+n,t.Push(new o.default(c,t.stack.env,t.configuration).mml())};var h=[65,90],m=[97,122],g=[913,937],v=[945,969],y=[48,57];function b(t,e){return t>=e[0]&&t<=e[1]}function x(t,e,r,n){var a=t.configuration.parser,o=u.NodeFactory.createToken(t,e,r,n),i=n.codePointAt(0);return 1===n.length&&!a.stack.env.font&&a.stack.env.vectorFont&&(b(i,h)||b(i,m)||b(i,g)||b(i,y)||b(i,v)&&a.stack.env.vectorStar||c.default.getAttribute(o,\"accent\"))&&c.default.setAttribute(o,\"mathvariant\",a.stack.env.vectorFont),o}p.VectorBold=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),a=t.configuration.nodeFactory.get(\"token\"),i=t.stack.env.font;delete t.stack.env.font,t.configuration.nodeFactory.set(\"token\",x),t.stack.env.vectorFont=r?\"bold-italic\":\"bold\",t.stack.env.vectorStar=r;var s=new o.default(n,t.stack.env,t.configuration).mml();i&&(t.stack.env.font=i),delete t.stack.env.vectorFont,delete t.stack.env.vectorStar,t.configuration.nodeFactory.set(\"token\",a),t.Push(s)},p.StarMacro=function(t,e,r){for(var n=[],a=3;a<arguments.length;a++)n[a-3]=arguments[a];var o=t.GetStar(),s=[];if(r)for(var c=s.length;c<r;c++)s.push(t.GetArgument(e));var u=n.join(o?\"*\":\"\");if(u=l.default.substituteArgs(t,s,u),t.string=l.default.addArgs(t,u,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new i.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is there a recursive macro call?\")};var A=function(t,e,r,n,a){var i=new o.default(n,t.stack.env,t.configuration).mml();t.Push(t.itemFactory.create(e,i));var s=t.GetNext(),l=f[s];if(l){var c=-1!==a.indexOf(s);if(\"{\"===s){var u=(c?\"\\\\left\\\\{\":\"\")+\" \"+t.GetArgument(r)+\" \"+(c?\"\\\\right\\\\}\":\"\");return t.string=u+t.string.slice(t.i),void(t.i=0)}c&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:s,close:l})))}};function M(t,e,r){var a=n(t,3),o=a[0],i=a[1],s=a[2];return e&&r?\"\\\\left\\\\langle{\"+o+\"}\\\\middle\\\\vert{\"+i+\"}\\\\middle\\\\vert{\"+s+\"}\\\\right\\\\rangle\":e?\"\\\\langle{\"+o+\"}\\\\vert{\"+i+\"}\\\\vert{\"+s+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+o+\"}\\\\right\\\\vert{\"+i+\"}\\\\left\\\\vert{\"+s+\"}\\\\right\\\\rangle\"}p.OperatorApplication=function(t,e,r){for(var n=[],a=3;a<arguments.length;a++)n[a-3]=arguments[a];A(t,\"fn\",e,r,n)},p.VectorOperator=function(t,e,r){for(var n=[],a=3;a<arguments.length;a++)n[a-3]=arguments[a];A(t,\"mml\",e,r,n)},p.Expression=function(t,e,r,n){void 0===r&&(r=!0),void 0===n&&(n=\"\"),n=n||e.slice(1);var a=r?t.GetBrackets(e):null,i=t.create(\"token\",\"mi\",{texClass:s.TEXCLASS.OP},n);if(a){var l=new o.default(a,t.stack.env,t.configuration).mml();i=t.create(\"node\",\"msup\",[i,l])}t.Push(t.itemFactory.create(\"fn\",i)),\"(\"===t.GetNext()&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\"})))},p.Qqtext=function(t,e,r){var n=(t.GetStar()?\"\":\"\\\\quad\")+\"\\\\text{\"+(r||t.GetArgument(e))+\"}\\\\quad \";t.string=t.string.slice(0,t.i)+n+t.string.slice(t.i)},p.Differential=function(t,e,r){var n=t.GetBrackets(e),a=null!=n?\"^{\"+n+\"}\":\" \",i=\"(\"===t.GetNext(),l=\"{\"===t.GetNext(),c=r+a;if(i||l)if(l){c+=t.GetArgument(e);u=new o.default(c,t.stack.env,t.configuration).mml();t.Push(t.create(\"node\",\"TeXAtom\",[u],{texClass:s.TEXCLASS.OP}))}else t.Push(new o.default(c,t.stack.env,t.configuration).mml()),t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\"}));else{c+=t.GetArgument(e,!0)||\"\";var u=new o.default(c,t.stack.env,t.configuration).mml();t.Push(u)}},p.Derivative=function(t,e,r,n){var a=t.GetStar(),i=t.GetBrackets(e),s=1,l=[];for(l.push(t.GetArgument(e));\"{\"===t.GetNext()&&s<r;)l.push(t.GetArgument(e)),s++;var c=!1,u=\" \",p=\" \";r>2&&l.length>2?(u=\"^{\"+(l.length-1)+\"}\",c=!0):null!=i&&(r>2&&l.length>1&&(c=!0),p=u=\"^{\"+i+\"}\");for(var f=a?\"\\\\flatfrac\":\"\\\\frac\",d=l.length>1?l[0]:\"\",h=l.length>1?l[1]:l[0],m=\"\",g=2,v=void 0;v=l[g];g++)m+=n+\" \"+v;var y=f+\"{\"+n+u+d+\"}{\"+n+\" \"+h+p+\" \"+m+\"}\";t.Push(new o.default(y,t.stack.env,t.configuration).mml()),\"(\"===t.GetNext()&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\",ignore:c})))},p.Bra=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),a=\"\",i=!1,s=!1;if(\"\\\\\"===t.GetNext()){var l=t.i;t.i++;var c=t.GetCS(),u=t.lookup(\"macro\",c);u&&\"ket\"===u.symbol?(i=!0,l=t.i,s=t.GetStar(),\"{\"===t.GetNext()?a=t.GetArgument(c,!0):(t.i=l,s=!1)):t.i=l}var p=\"\";p=i?r||s?\"\\\\langle{\"+n+\"}\\\\vert{\"+a+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+n+\"}\\\\middle\\\\vert{\"+a+\"}\\\\right\\\\rangle\":r||s?\"\\\\langle{\"+n+\"}\\\\vert\":\"\\\\left\\\\langle{\"+n+\"}\\\\right\\\\vert{\"+a+\"}\",t.Push(new o.default(p,t.stack.env,t.configuration).mml())},p.Ket=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),a=r?\"\\\\vert{\"+n+\"}\\\\rangle\":\"\\\\left\\\\vert{\"+n+\"}\\\\right\\\\rangle\";t.Push(new o.default(a,t.stack.env,t.configuration).mml())},p.BraKet=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),a=null;\"{\"===t.GetNext()&&(a=t.GetArgument(e,!0));var i=\"\";i=null==a?r?\"\\\\langle{\"+n+\"}\\\\vert{\"+n+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+n+\"}\\\\middle\\\\vert{\"+n+\"}\\\\right\\\\rangle\":r?\"\\\\langle{\"+n+\"}\\\\vert{\"+a+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+n+\"}\\\\middle\\\\vert{\"+a+\"}\\\\right\\\\rangle\",t.Push(new o.default(i,t.stack.env,t.configuration).mml())},p.KetBra=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),a=null;\"{\"===t.GetNext()&&(a=t.GetArgument(e,!0));var i=\"\";i=null==a?r?\"\\\\vert{\"+n+\"}\\\\rangle\\\\!\\\\langle{\"+n+\"}\\\\vert\":\"\\\\left\\\\vert{\"+n+\"}\\\\middle\\\\rangle\\\\!\\\\middle\\\\langle{\"+n+\"}\\\\right\\\\vert\":r?\"\\\\vert{\"+n+\"}\\\\rangle\\\\!\\\\langle{\"+a+\"}\\\\vert\":\"\\\\left\\\\vert{\"+n+\"}\\\\middle\\\\rangle\\\\!\\\\middle\\\\langle{\"+a+\"}\\\\right\\\\vert\",t.Push(new o.default(i,t.stack.env,t.configuration).mml())},p.Expectation=function(t,e){var r=t.GetStar(),n=r&&t.GetStar(),a=t.GetArgument(e),i=null;\"{\"===t.GetNext()&&(i=t.GetArgument(e,!0));var s=a&&i?M([i,a,i],r,n):r?\"\\\\langle {\"+a+\"} \\\\rangle\":\"\\\\left\\\\langle {\"+a+\"} \\\\right\\\\rangle\";t.Push(new o.default(s,t.stack.env,t.configuration).mml())},p.MatrixElement=function(t,e){var r=t.GetStar(),n=r&&t.GetStar(),a=M([t.GetArgument(e),t.GetArgument(e),t.GetArgument(e)],r,n);t.Push(new o.default(a,t.stack.env,t.configuration).mml())},p.MatrixQuantity=function(t,e,r){var n=t.GetStar(),a=r?\"smallmatrix\":\"array\",i=\"\",s=\"\",l=\"\";switch(t.GetNext()){case\"{\":i=t.GetArgument(e);break;case\"(\":t.i++,s=n?\"\\\\lgroup\":\"(\",l=n?\"\\\\rgroup\":\")\",i=t.GetUpTo(e,\")\");break;case\"[\":t.i++,s=\"[\",l=\"]\",i=t.GetUpTo(e,\"]\");break;case\"|\":t.i++,s=\"|\",l=\"|\",i=t.GetUpTo(e,\"|\");break;default:s=\"(\",l=\")\"}var c=(s?\"\\\\left\":\"\")+s+\"\\\\begin{\"+a+\"}{} \"+i+\"\\\\end{\"+a+\"}\"+(s?\"\\\\right\":\"\")+l;t.Push(new o.default(c,t.stack.env,t.configuration).mml())},p.IdentityMatrix=function(t,e){var r=t.GetArgument(e),n=parseInt(r,10);if(isNaN(n))throw new i.default(\"InvalidNumber\",\"Invalid number\");if(n<=1)return t.string=\"1\"+t.string.slice(t.i),void(t.i=0);for(var a=Array(n).fill(\"0\"),o=[],s=0;s<n;s++){var l=a.slice();l[s]=\"1\",o.push(l.join(\" & \"))}t.string=o.join(\"\\\\\\\\ \")+t.string.slice(t.i),t.i=0},p.XMatrix=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),a=t.GetArgument(e),o=t.GetArgument(e),s=parseInt(a,10),l=parseInt(o,10);if(isNaN(s)||isNaN(l)||l.toString()!==o||s.toString()!==a)throw new i.default(\"InvalidNumber\",\"Invalid number\");if(s=s<1?1:s,l=l<1?1:l,!r){var c=Array(l).fill(n).join(\" & \"),u=Array(s).fill(c).join(\"\\\\\\\\ \");return t.string=u+t.string.slice(t.i),void(t.i=0)}var p=\"\";if(1===s&&1===l)p=n;else if(1===s){c=[];for(var f=1;f<=l;f++)c.push(n+\"_{\"+f+\"}\");p=c.join(\" & \")}else if(1===l){for(c=[],f=1;f<=s;f++)c.push(n+\"_{\"+f+\"}\");p=c.join(\"\\\\\\\\ \")}else{var d=[];for(f=1;f<=s;f++){c=[];for(var h=1;h<=l;h++)c.push(n+\"_{{\"+f+\"}{\"+h+\"}}\");d.push(c.join(\" & \"))}p=d.join(\"\\\\\\\\ \")}t.string=p+t.string.slice(t.i),t.i=0},p.PauliMatrix=function(t,e){var r=t.GetArgument(e),n=r.slice(1);switch(r[0]){case\"0\":n+=\" 1 & 0\\\\\\\\ 0 & 1\";break;case\"1\":case\"x\":n+=\" 0 & 1\\\\\\\\ 1 & 0\";break;case\"2\":case\"y\":n+=\" 0 & -i\\\\\\\\ i & 0\";break;case\"3\":case\"z\":n+=\" 1 & 0\\\\\\\\ 0 & -1\"}t.string=n+t.string.slice(t.i),t.i=0},p.DiagonalMatrix=function(t,e,r){if(\"{\"===t.GetNext()){var n=t.i;t.GetArgument(e);var a=t.i;t.i=n+1;for(var o=[],i=\"\",s=t.i;s<a;){try{i=t.GetUpTo(e,\",\")}catch(e){t.i=a,o.push(t.string.slice(s,a-1));break}if(t.i>=a){o.push(t.string.slice(s,a));break}s=t.i,o.push(i)}t.string=function(t,e){for(var r=t.length,n=[],a=0;a<r;a++)n.push(Array(e?r-a:a+1).join(\"&\")+\"\\\\mqty{\"+t[a]+\"}\");return n.join(\"\\\\\\\\ \")}(o,r)+t.string.slice(a),t.i=0}},p.AutoClose=function(t,e,r){var n=t.create(\"token\",\"mo\",{stretchy:!1},e),a=t.itemFactory.create(\"mml\",n).setProperties({autoclose:e});t.Push(a)},p.Macro=a.default.Macro,p.NamedFn=a.default.NamedFn,p.Array=a.default.Array,e.default=p},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.TagFormatConfiguration=e.tagformatConfig=void 0;var o=r(0),i=r(9),s=0;function l(t,e){var r=e.parseOptions.options.tags;\"base\"!==r&&t.tags.hasOwnProperty(r)&&i.TagsFactory.add(r,t.tags[r]);var n=function(t){function r(){return null!==t&&t.apply(this,arguments)||this}return a(r,t),r.prototype.formatNumber=function(t){return e.parseOptions.options.tagformat.number(t)},r.prototype.formatTag=function(t){return e.parseOptions.options.tagformat.tag(t)},r.prototype.formatId=function(t){return e.parseOptions.options.tagformat.id(t)},r.prototype.formatUrl=function(t,r){return e.parseOptions.options.tagformat.url(t,r)},r}(i.TagsFactory.create(e.parseOptions.options.tags).constructor),o=\"configTags-\"+ ++s;i.TagsFactory.add(o,n),e.parseOptions.options.tags=o}e.tagformatConfig=l,e.TagFormatConfiguration=o.Configuration.create(\"tagformat\",{config:[l,10],options:{tagformat:{number:function(t){return t.toString()},tag:function(t){return\"(\"+t+\")\"},id:function(t){return\"mjx-eqn-\"+t.replace(/\\s/g,\"_\")},url:function(t,e){return e+\"#\"+encodeURIComponent(t)}}}})},function(t,e,r){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.textBase=void 0;var a=r(0),o=r(24),i=r(9),s=r(15),l=r(67),c=r(28);function u(t,e,r,n){var a=t.configuration.packageData.get(\"textmacros\");return t instanceof l.TextParser||(a.texParser=t),[new l.TextParser(e,n?{mathvariant:n}:{},a.parseOptions,r).mml()]}r(93),e.textBase=a.Configuration.local({handler:{character:[\"command\",\"text-special\"],macro:[\"text-macros\"]},fallback:{character:function(t,e){t.text+=e},macro:function(t,e){var r=t.texParser,n=r.lookup(\"macro\",e);n&&n._func!==c.TextMacrosMethods.Macro&&t.Error(\"MathMacro\",\"%1 is only supported in math mode\",\"\\\\\"+e),r.parse(\"macro\",[n?t:r,e])}},items:(n={},n[s.StartItem.prototype.kind]=s.StartItem,n[s.StopItem.prototype.kind]=s.StopItem,n[s.MmlItem.prototype.kind]=s.MmlItem,n[s.StyleItem.prototype.kind]=s.StyleItem,n)}),a.Configuration.create(\"textmacros\",{config:function(t,r){var n=new a.ParserConfiguration([]);n.append(e.textBase),n.init();var s=new o.default(n,[]);s.options=r.parseOptions.options,n.config(r),i.TagsFactory.addTags(n.tags),s.tags=i.TagsFactory.getDefault(),s.tags.configuration=s,s.packageData=r.parseOptions.packageData,s.packageData.set(\"textmacros\",{parseOptions:s,jax:r,texParser:null}),s.options.internalMath=u},preprocessors:[function(t){var e=t.data.packageData.get(\"textmacros\");e.parseOptions.nodeFactory.setMmlFactory(e.jax.mmlFactory)}]})},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextParser=void 0;var l=r(6),c=r(2),u=r(4),p=r(5),f=r(3),d=r(15),h=function(t){function e(e,r,n,a){var o=t.call(this,e,r,n)||this;return o.level=a,o}return a(e,t),Object.defineProperty(e.prototype,\"texParser\",{get:function(){return this.configuration.packageData.get(\"textmacros\").texParser},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tags\",{get:function(){return this.texParser.tags},enumerable:!1,configurable:!0}),e.prototype.mml=function(){return null!=this.level?this.create(\"node\",\"mstyle\",this.nodes,{displaystyle:!1,scriptlevel:this.level}):1===this.nodes.length?this.nodes[0]:this.create(\"node\",\"inferredMrow\",this.nodes)},e.prototype.Parse=function(){this.text=\"\",this.nodes=[],this.envStack=[],t.prototype.Parse.call(this)},e.prototype.saveText=function(){if(this.text){var t=this.stack.env.mathvariant,e=u.default.internalText(this,this.text,t?{mathvariant:t}:{});this.text=\"\",this.Push(e)}},e.prototype.Push=function(e){if(this.text&&this.saveText(),e instanceof d.StopItem)return t.prototype.Push.call(this,e);e instanceof d.StyleItem?this.stack.env.mathcolor=this.stack.env.color:e instanceof p.AbstractMmlNode&&(this.addAttributes(e),this.nodes.push(e))},e.prototype.PushMath=function(t){var e,r,n=this.stack.env;try{for(var a=o([\"mathsize\",\"mathcolor\"]),i=a.next();!i.done;i=a.next()){var s=i.value;n[s]&&!t.attributes.getExplicit(s)&&(t.isToken||t.isKind(\"mstyle\")||(t=this.create(\"node\",\"mstyle\",[t])),f.default.setAttribute(t,s,n[s]))}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}t.isKind(\"inferredMrow\")&&(t=this.create(\"node\",\"mrow\",t.childNodes)),this.nodes.push(t)},e.prototype.addAttributes=function(t){var e,r,n=this.stack.env;if(t.isToken)try{for(var a=o([\"mathsize\",\"mathcolor\",\"mathvariant\"]),i=a.next();!i.done;i=a.next()){var s=i.value;n[s]&&!t.attributes.getExplicit(s)&&f.default.setAttribute(t,s,n[s])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}},e.prototype.ParseTextArg=function(t,r){return new e(this.GetArgument(t),r=Object.assign(Object.assign({},this.stack.env),r),this.configuration).mml()},e.prototype.ParseArg=function(t){return new e(this.GetArgument(t),this.stack.env,this.configuration).mml()},e.prototype.Error=function(t,e){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];throw new(c.default.bind.apply(c.default,s([void 0,t,e],r)))},e}(l.default);e.TextParser=h},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UnicodeConfiguration=e.UnicodeMethods=void 0;var n=r(0),a=r(2),o=r(1),i=r(4),s=r(3),l=r(13);e.UnicodeMethods={};var c={};e.UnicodeMethods.Unicode=function(t,e){var r=t.GetBrackets(e),n=null,o=null;r&&(r.replace(/ /g,\"\").match(/^(\\d+(\\.\\d*)?|\\.\\d+),(\\d+(\\.\\d*)?|\\.\\d+)$/)?(n=r.replace(/ /g,\"\").split(/,/),o=t.GetBrackets(e)):o=r);var u=i.default.trimSpaces(t.GetArgument(e)).replace(/^0x/,\"x\");if(!u.match(/^(x[0-9A-Fa-f]+|[0-9]+)$/))throw new a.default(\"BadUnicode\",\"Argument to \\\\unicode must be a number\");var p=parseInt(u.match(/^x/)?\"0\"+u:u);c[p]?o||(o=c[p][2]):c[p]=[800,200,o,p],n&&(c[p][0]=Math.floor(1e3*parseFloat(n[0])),c[p][1]=Math.floor(1e3*parseFloat(n[1])));var f=t.stack.env.font,d={};o?(c[p][2]=d.fontfamily=o.replace(/'/g,\"'\"),f&&(f.match(/bold/)&&(d.fontweight=\"bold\"),f.match(/italic|-mathit/)&&(d.fontstyle=\"italic\"))):f&&(d.mathvariant=f);var h=t.create(\"token\",\"mtext\",d,l.numeric(u));s.default.setProperty(h,\"unicode\",!0),t.Push(h)},new o.CommandMap(\"unicode\",{unicode:\"Unicode\"},e.UnicodeMethods),e.UnicodeConfiguration=n.Configuration.create(\"unicode\",{handler:{macro:[\"unicode\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.VerbConfiguration=e.VerbMethods=void 0;var n=r(0),a=r(7),o=r(1),i=r(2);e.VerbMethods={},e.VerbMethods.Verb=function(t,e){var r=t.GetNext(),n=++t.i;if(\"\"===r)throw new i.default(\"MissingArgFor\",\"Missing argument for %1\",e);for(;t.i<t.string.length&&t.string.charAt(t.i)!==r;)t.i++;if(t.i===t.string.length)throw new i.default(\"NoClosingDelim\",\"Can't find closing delimiter for %1\",t.currentCS);var o=t.string.slice(n,t.i).replace(/ /g,\"\\xa0\");t.i++,t.Push(t.create(\"token\",\"mtext\",{mathvariant:a.TexConstant.Variant.MONOSPACE},o))},new o.CommandMap(\"verb\",{verb:\"Verb\"},e.VerbMethods),e.VerbConfiguration=n.Configuration.create(\"verb\",{handler:{macro:[\"verb\"]}})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Loader=MathJax._.components.loader.Loader,e.MathJax=MathJax._.components.loader.MathJax,e.CONFIG=MathJax._.components.loader.CONFIG},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(13).add({NJcy:\"\\u040a\",Nacute:\"\\u0143\",Ncaron:\"\\u0147\",Ncedil:\"\\u0145\",Ncy:\"\\u041d\",NegativeMediumSpace:\"\\u200b\",NegativeThickSpace:\"\\u200b\",NegativeThinSpace:\"\\u200b\",NegativeVeryThinSpace:\"\\u200b\",NewLine:\"\\n\",NoBreak:\"\\u2060\",NonBreakingSpace:\"\\xa0\",Not:\"\\u2aec\",NotCongruent:\"\\u2262\",NotCupCap:\"\\u226d\",NotEqualTilde:\"\\u2242\\u0338\",NotGreaterFullEqual:\"\\u2267\\u0338\",NotGreaterGreater:\"\\u226b\\u0338\",NotGreaterLess:\"\\u2279\",NotGreaterSlantEqual:\"\\u2a7e\\u0338\",NotGreaterTilde:\"\\u2275\",NotHumpDownHump:\"\\u224e\\u0338\",NotHumpEqual:\"\\u224f\\u0338\",NotLeftTriangleBar:\"\\u29cf\\u0338\",NotLessGreater:\"\\u2278\",NotLessLess:\"\\u226a\\u0338\",NotLessSlantEqual:\"\\u2a7d\\u0338\",NotLessTilde:\"\\u2274\",NotNestedGreaterGreater:\"\\u2aa2\\u0338\",NotNestedLessLess:\"\\u2aa1\\u0338\",NotPrecedesEqual:\"\\u2aaf\\u0338\",NotReverseElement:\"\\u220c\",NotRightTriangleBar:\"\\u29d0\\u0338\",NotSquareSubset:\"\\u228f\\u0338\",NotSquareSubsetEqual:\"\\u22e2\",NotSquareSuperset:\"\\u2290\\u0338\",NotSquareSupersetEqual:\"\\u22e3\",NotSubset:\"\\u2282\\u20d2\",NotSucceedsEqual:\"\\u2ab0\\u0338\",NotSucceedsTilde:\"\\u227f\\u0338\",NotSuperset:\"\\u2283\\u20d2\",NotTildeEqual:\"\\u2244\",NotTildeFullEqual:\"\\u2247\",NotTildeTilde:\"\\u2249\",Ntilde:\"\\xd1\",Nu:\"\\u039d\",nGg:\"\\u22d9\\u0338\",nGt:\"\\u226b\\u20d2\",nGtv:\"\\u226b\\u0338\",nLl:\"\\u22d8\\u0338\",nLt:\"\\u226a\\u20d2\",nLtv:\"\\u226a\\u0338\",nabla:\"\\u2207\",nacute:\"\\u0144\",nang:\"\\u2220\\u20d2\",nap:\"\\u2249\",napE:\"\\u2a70\\u0338\",napid:\"\\u224b\\u0338\",napos:\"\\u0149\",napprox:\"\\u2249\",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\",nearrow:\"\\u2197\",nedot:\"\\u2250\\u0338\",nequiv:\"\\u2262\",nesear:\"\\u2928\",nesim:\"\\u2242\\u0338\",nexist:\"\\u2204\",nexists:\"\\u2204\",ngE:\"\\u2267\\u0338\",nge:\"\\u2271\",ngeq:\"\\u2271\",ngeqq:\"\\u2267\\u0338\",ngeqslant:\"\\u2a7e\\u0338\",nges:\"\\u2a7e\\u0338\",ngsim:\"\\u2275\",ngt:\"\\u226f\",ngtr:\"\\u226f\",nhArr:\"\\u21ce\",nhpar:\"\\u2af2\",ni:\"\\u220b\",nis:\"\\u22fc\",nisd:\"\\u22fa\",niv:\"\\u220b\",njcy:\"\\u045a\",nlArr:\"\\u21cd\",nlE:\"\\u2266\\u0338\",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\",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\",nrarrc:\"\\u2933\\u0338\",nrarrw:\"\\u219d\\u0338\",nrightarrow:\"\\u219b\",nrtri:\"\\u22eb\",nrtrie:\"\\u22ed\",nsc:\"\\u2281\",nsccue:\"\\u22e1\",nsce:\"\\u2ab0\\u0338\",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\",num:\"#\",numero:\"\\u2116\",numsp:\"\\u2007\",nvHarr:\"\\u2904\",nvap:\"\\u224d\\u20d2\",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\",nwarrow:\"\\u2196\",nwnear:\"\\u2927\"},\"n\")},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PrioritizedList=MathJax._.util.PrioritizedList.PrioritizedList},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FunctionList=MathJax._.util.FunctionList.FunctionList},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PackageError=MathJax._.components.package.PackageError,e.Package=MathJax._.components.package.Package},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,o=r.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutoloadConfiguration=void 0;var o=r(0),i=r(1),s=r(14),l=r(29),c=r(74),u=r(10);function p(t,e,r,o){var i,s,u,p;if(c.Package.packages.has(t.options.require.prefix+r)){var h=t.options.autoload[r],m=n(2===h.length&&Array.isArray(h[0])?h:[h,[]],2),g=m[0],v=m[1];try{for(var y=a(g),b=y.next();!b.done;b=y.next()){var x=b.value;f.remove(x)}}catch(t){i={error:t}}finally{try{b&&!b.done&&(s=y.return)&&s.call(y)}finally{if(i)throw i.error}}try{for(var A=a(v),M=A.next();!M.done;M=A.next()){var _=M.value;d.remove(_)}}catch(t){u={error:t}}finally{try{M&&!M.done&&(p=A.return)&&p.call(A)}finally{if(u)throw u.error}}t.string=(o?e:\"\\\\begin{\"+e.slice(1)+\"}\")+t.string.slice(t.i),t.i=0}l.RequireLoad(t,r)}var f=new i.CommandMap(\"autoload-macros\",{},{}),d=new i.CommandMap(\"autoload-environments\",{},{});e.AutoloadConfiguration=o.Configuration.create(\"autoload\",{handler:{macro:[\"autoload-macros\"],environment:[\"autoload-environments\"]},options:{autoload:u.expandable({action:[\"toggle\",\"mathtip\",\"texttip\"],amscd:[[],[\"CD\"]],bbox:[\"bbox\"],boldsymbol:[\"boldsymbol\"],braket:[\"bra\",\"ket\",\"braket\",\"set\",\"Bra\",\"Ket\",\"Braket\",\"Set\",\"ketbra\",\"Ketbra\"],bussproofs:[[],[\"prooftree\"]],cancel:[\"cancel\",\"bcancel\",\"xcancel\",\"cancelto\"],color:[\"color\",\"definecolor\",\"textcolor\",\"colorbox\",\"fcolorbox\"],enclose:[\"enclose\"],extpfeil:[\"xtwoheadrightarrow\",\"xtwoheadleftarrow\",\"xmapsto\",\"xlongequal\",\"xtofrom\",\"Newextarrow\"],html:[\"href\",\"class\",\"style\",\"cssId\"],mhchem:[\"ce\",\"pu\"],newcommand:[\"newcommand\",\"renewcommand\",\"newenvironment\",\"renewenvironment\",\"def\",\"let\"],unicode:[\"unicode\"],verb:[\"verb\"]})},config:function(t,e){var r,o,i,c,u,h,m=e.parseOptions,g=m.handlers.get(\"macro\"),v=m.handlers.get(\"environment\"),y=m.options.autoload;m.packageData.set(\"autoload\",{Autoload:p});try{for(var b=a(Object.keys(y)),x=b.next();!x.done;x=b.next()){var A=x.value,M=y[A],_=n(2===M.length&&Array.isArray(M[0])?M:[M,[]],2),C=_[0],P=_[1];try{for(var w=(i=void 0,a(C)),S=w.next();!S.done;S=w.next()){var T=S.value;g.lookup(T)&&\"color\"!==T||f.add(T,new s.Macro(T,p,[A,!0]))}}catch(t){i={error:t}}finally{try{S&&!S.done&&(c=w.return)&&c.call(w)}finally{if(i)throw i.error}}try{for(var k=(u=void 0,a(P)),O=k.next();!O.done;O=k.next()){var E=O.value;v.lookup(E)||d.add(E,new s.Macro(E,p,[A,!1]))}}catch(t){u={error:t}}finally{try{O&&!O.done&&(h=k.return)&&h.call(k)}finally{if(u)throw u.error}}}}catch(t){r={error:t}}finally{try{x&&!x.done&&(o=b.return)&&o.call(b)}finally{if(r)throw r.error}}m.packageData.get(\"require\")||l.RequireConfiguration.config(t,e)},init:function(t){t.options.require||u.defaultOptions(t.options,l.RequireConfiguration.options)},priority:10})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractInputJax=MathJax._.core.InputJax.AbstractInputJax},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractFindMath=MathJax._.core.FindMath.AbstractFindMath},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sortLength=MathJax._.util.string.sortLength,e.quotePattern=MathJax._.util.string.quotePattern,e.unicodeChars=MathJax._.util.string.unicodeChars,e.isPercent=MathJax._.util.string.isPercent,e.split=MathJax._.util.string.split},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMo=MathJax._.core.MmlTree.MmlNodes.mo.MmlMo},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractFactory=MathJax._.core.Tree.Factory.AbstractFactory},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),a=r(7),o=r(8),i=r(12),s=r(5);new n.RegExpMap(\"letter\",i.default.variable,/[a-z]/i),new n.RegExpMap(\"digit\",i.default.digit,/[0-9.,]/),new n.RegExpMap(\"command\",i.default.controlSequence,/^\\\\/),new n.MacroMap(\"special\",{\"{\":\"Open\",\"}\":\"Close\",\"~\":\"Tilde\",\"^\":\"Superscript\",_:\"Subscript\",\" \":\"Space\",\"\\t\":\"Space\",\"\\r\":\"Space\",\"\\n\":\"Space\",\"'\":\"Prime\",\"%\":\"Comment\",\"&\":\"Entry\",\"#\":\"Hash\",\"\\xa0\":\"Space\",\"\\u2019\":\"Prime\"},o.default),new n.CharacterMap(\"mathchar0mi\",i.default.mathchar0mi,{alpha:\"\\u03b1\",beta:\"\\u03b2\",gamma:\"\\u03b3\",delta:\"\\u03b4\",epsilon:\"\\u03f5\",zeta:\"\\u03b6\",eta:\"\\u03b7\",theta:\"\\u03b8\",iota:\"\\u03b9\",kappa:\"\\u03ba\",lambda:\"\\u03bb\",mu:\"\\u03bc\",nu:\"\\u03bd\",xi:\"\\u03be\",omicron:\"\\u03bf\",pi:\"\\u03c0\",rho:\"\\u03c1\",sigma:\"\\u03c3\",tau:\"\\u03c4\",upsilon:\"\\u03c5\",phi:\"\\u03d5\",chi:\"\\u03c7\",psi:\"\\u03c8\",omega:\"\\u03c9\",varepsilon:\"\\u03b5\",vartheta:\"\\u03d1\",varpi:\"\\u03d6\",varrho:\"\\u03f1\",varsigma:\"\\u03c2\",varphi:\"\\u03c6\",S:[\"\\xa7\",{mathvariant:a.TexConstant.Variant.NORMAL}],aleph:[\"\\u2135\",{mathvariant:a.TexConstant.Variant.NORMAL}],hbar:[\"\\u210f\",{variantForm:!0}],imath:\"\\u0131\",jmath:\"\\u0237\",ell:\"\\u2113\",wp:[\"\\u2118\",{mathvariant:a.TexConstant.Variant.NORMAL}],Re:[\"\\u211c\",{mathvariant:a.TexConstant.Variant.NORMAL}],Im:[\"\\u2111\",{mathvariant:a.TexConstant.Variant.NORMAL}],partial:[\"\\u2202\",{mathvariant:a.TexConstant.Variant.ITALIC}],infty:[\"\\u221e\",{mathvariant:a.TexConstant.Variant.NORMAL}],prime:[\"\\u2032\",{mathvariant:a.TexConstant.Variant.NORMAL,variantForm:!0}],emptyset:[\"\\u2205\",{mathvariant:a.TexConstant.Variant.NORMAL}],nabla:[\"\\u2207\",{mathvariant:a.TexConstant.Variant.NORMAL}],top:[\"\\u22a4\",{mathvariant:a.TexConstant.Variant.NORMAL}],bot:[\"\\u22a5\",{mathvariant:a.TexConstant.Variant.NORMAL}],angle:[\"\\u2220\",{mathvariant:a.TexConstant.Variant.NORMAL}],triangle:[\"\\u25b3\",{mathvariant:a.TexConstant.Variant.NORMAL}],backslash:[\"\\u2216\",{mathvariant:a.TexConstant.Variant.NORMAL,variantForm:!0}],forall:[\"\\u2200\",{mathvariant:a.TexConstant.Variant.NORMAL}],exists:[\"\\u2203\",{mathvariant:a.TexConstant.Variant.NORMAL}],neg:[\"\\xac\",{mathvariant:a.TexConstant.Variant.NORMAL}],lnot:[\"\\xac\",{mathvariant:a.TexConstant.Variant.NORMAL}],flat:[\"\\u266d\",{mathvariant:a.TexConstant.Variant.NORMAL}],natural:[\"\\u266e\",{mathvariant:a.TexConstant.Variant.NORMAL}],sharp:[\"\\u266f\",{mathvariant:a.TexConstant.Variant.NORMAL}],clubsuit:[\"\\u2663\",{mathvariant:a.TexConstant.Variant.NORMAL}],diamondsuit:[\"\\u2662\",{mathvariant:a.TexConstant.Variant.NORMAL}],heartsuit:[\"\\u2661\",{mathvariant:a.TexConstant.Variant.NORMAL}],spadesuit:[\"\\u2660\",{mathvariant:a.TexConstant.Variant.NORMAL}]}),new n.CharacterMap(\"mathchar0mo\",i.default.mathchar0mo,{surd:\"\\u221a\",coprod:[\"\\u2210\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigvee:[\"\\u22c1\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigwedge:[\"\\u22c0\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],biguplus:[\"\\u2a04\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigcap:[\"\\u22c2\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigcup:[\"\\u22c3\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],int:[\"\\u222b\",{texClass:s.TEXCLASS.OP}],intop:[\"\\u222b\",{texClass:s.TEXCLASS.OP,movesupsub:!0,movablelimits:!0}],iint:[\"\\u222c\",{texClass:s.TEXCLASS.OP}],iiint:[\"\\u222d\",{texClass:s.TEXCLASS.OP}],prod:[\"\\u220f\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],sum:[\"\\u2211\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigotimes:[\"\\u2a02\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigoplus:[\"\\u2a01\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigodot:[\"\\u2a00\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],oint:[\"\\u222e\",{texClass:s.TEXCLASS.OP}],bigsqcup:[\"\\u2a06\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],smallint:[\"\\u222b\",{largeop:!1}],triangleleft:\"\\u25c3\",triangleright:\"\\u25b9\",bigtriangleup:\"\\u25b3\",bigtriangledown:\"\\u25bd\",wedge:\"\\u2227\",land:\"\\u2227\",vee:\"\\u2228\",lor:\"\\u2228\",cap:\"\\u2229\",cup:\"\\u222a\",ddagger:\"\\u2021\",dagger:\"\\u2020\",sqcap:\"\\u2293\",sqcup:\"\\u2294\",uplus:\"\\u228e\",amalg:\"\\u2a3f\",diamond:\"\\u22c4\",bullet:\"\\u2219\",wr:\"\\u2240\",div:\"\\xf7\",odot:[\"\\u2299\",{largeop:!1}],oslash:[\"\\u2298\",{largeop:!1}],otimes:[\"\\u2297\",{largeop:!1}],ominus:[\"\\u2296\",{largeop:!1}],oplus:[\"\\u2295\",{largeop:!1}],mp:\"\\u2213\",pm:\"\\xb1\",circ:\"\\u2218\",bigcirc:\"\\u25ef\",setminus:\"\\u2216\",cdot:\"\\u22c5\",ast:\"\\u2217\",times:\"\\xd7\",star:\"\\u22c6\",propto:\"\\u221d\",sqsubseteq:\"\\u2291\",sqsupseteq:\"\\u2292\",parallel:\"\\u2225\",mid:\"\\u2223\",dashv:\"\\u22a3\",vdash:\"\\u22a2\",leq:\"\\u2264\",le:\"\\u2264\",geq:\"\\u2265\",ge:\"\\u2265\",lt:\"<\",gt:\">\",succ:\"\\u227b\",prec:\"\\u227a\",approx:\"\\u2248\",succeq:\"\\u2ab0\",preceq:\"\\u2aaf\",supset:\"\\u2283\",subset:\"\\u2282\",supseteq:\"\\u2287\",subseteq:\"\\u2286\",in:\"\\u2208\",ni:\"\\u220b\",notin:\"\\u2209\",owns:\"\\u220b\",gg:\"\\u226b\",ll:\"\\u226a\",sim:\"\\u223c\",simeq:\"\\u2243\",perp:\"\\u22a5\",equiv:\"\\u2261\",asymp:\"\\u224d\",smile:\"\\u2323\",frown:\"\\u2322\",ne:\"\\u2260\",neq:\"\\u2260\",cong:\"\\u2245\",doteq:\"\\u2250\",bowtie:\"\\u22c8\",models:\"\\u22a8\",notChar:\"\\u29f8\",Leftrightarrow:\"\\u21d4\",Leftarrow:\"\\u21d0\",Rightarrow:\"\\u21d2\",leftrightarrow:\"\\u2194\",leftarrow:\"\\u2190\",gets:\"\\u2190\",rightarrow:\"\\u2192\",to:[\"\\u2192\",{accent:!1}],mapsto:\"\\u21a6\",leftharpoonup:\"\\u21bc\",leftharpoondown:\"\\u21bd\",rightharpoonup:\"\\u21c0\",rightharpoondown:\"\\u21c1\",nearrow:\"\\u2197\",searrow:\"\\u2198\",nwarrow:\"\\u2196\",swarrow:\"\\u2199\",rightleftharpoons:\"\\u21cc\",hookrightarrow:\"\\u21aa\",hookleftarrow:\"\\u21a9\",longleftarrow:\"\\u27f5\",Longleftarrow:\"\\u27f8\",longrightarrow:\"\\u27f6\",Longrightarrow:\"\\u27f9\",Longleftrightarrow:\"\\u27fa\",longleftrightarrow:\"\\u27f7\",longmapsto:\"\\u27fc\",ldots:\"\\u2026\",cdots:\"\\u22ef\",vdots:\"\\u22ee\",ddots:\"\\u22f1\",dotsc:\"\\u2026\",dotsb:\"\\u22ef\",dotsm:\"\\u22ef\",dotsi:\"\\u22ef\",dotso:\"\\u2026\",ldotp:[\".\",{texClass:s.TEXCLASS.PUNCT}],cdotp:[\"\\u22c5\",{texClass:s.TEXCLASS.PUNCT}],colon:[\":\",{texClass:s.TEXCLASS.PUNCT}]}),new n.CharacterMap(\"mathchar7\",i.default.mathchar7,{Gamma:\"\\u0393\",Delta:\"\\u0394\",Theta:\"\\u0398\",Lambda:\"\\u039b\",Xi:\"\\u039e\",Pi:\"\\u03a0\",Sigma:\"\\u03a3\",Upsilon:\"\\u03a5\",Phi:\"\\u03a6\",Psi:\"\\u03a8\",Omega:\"\\u03a9\",_:\"_\",\"#\":\"#\",$:\"$\",\"%\":\"%\",\"&\":\"&\",And:\"&\"}),new n.DelimiterMap(\"delimiter\",i.default.delimiter,{\"(\":\"(\",\")\":\")\",\"[\":\"[\",\"]\":\"]\",\"<\":\"\\u27e8\",\">\":\"\\u27e9\",\"\\\\lt\":\"\\u27e8\",\"\\\\gt\":\"\\u27e9\",\"/\":\"/\",\"|\":[\"|\",{texClass:s.TEXCLASS.ORD}],\".\":\"\",\"\\\\\\\\\":\"\\\\\",\"\\\\lmoustache\":\"\\u23b0\",\"\\\\rmoustache\":\"\\u23b1\",\"\\\\lgroup\":\"\\u27ee\",\"\\\\rgroup\":\"\\u27ef\",\"\\\\arrowvert\":\"\\u23d0\",\"\\\\Arrowvert\":\"\\u2016\",\"\\\\bracevert\":\"\\u23aa\",\"\\\\Vert\":[\"\\u2225\",{texClass:s.TEXCLASS.ORD}],\"\\\\|\":[\"\\u2225\",{texClass:s.TEXCLASS.ORD}],\"\\\\vert\":[\"|\",{texClass:s.TEXCLASS.ORD}],\"\\\\uparrow\":\"\\u2191\",\"\\\\downarrow\":\"\\u2193\",\"\\\\updownarrow\":\"\\u2195\",\"\\\\Uparrow\":\"\\u21d1\",\"\\\\Downarrow\":\"\\u21d3\",\"\\\\Updownarrow\":\"\\u21d5\",\"\\\\backslash\":\"\\\\\",\"\\\\rangle\":\"\\u27e9\",\"\\\\langle\":\"\\u27e8\",\"\\\\rbrace\":\"}\",\"\\\\lbrace\":\"{\",\"\\\\}\":\"}\",\"\\\\{\":\"{\",\"\\\\rceil\":\"\\u2309\",\"\\\\lceil\":\"\\u2308\",\"\\\\rfloor\":\"\\u230b\",\"\\\\lfloor\":\"\\u230a\",\"\\\\lbrack\":\"[\",\"\\\\rbrack\":\"]\"}),new n.CommandMap(\"macros\",{displaystyle:[\"SetStyle\",\"D\",!0,0],textstyle:[\"SetStyle\",\"T\",!1,0],scriptstyle:[\"SetStyle\",\"S\",!1,1],scriptscriptstyle:[\"SetStyle\",\"SS\",!1,2],rm:[\"SetFont\",a.TexConstant.Variant.NORMAL],mit:[\"SetFont\",a.TexConstant.Variant.ITALIC],oldstyle:[\"SetFont\",a.TexConstant.Variant.OLDSTYLE],cal:[\"SetFont\",a.TexConstant.Variant.CALLIGRAPHIC],it:[\"SetFont\",\"-tex-mathit\"],bf:[\"SetFont\",a.TexConstant.Variant.BOLD],bbFont:[\"SetFont\",a.TexConstant.Variant.DOUBLESTRUCK],scr:[\"SetFont\",a.TexConstant.Variant.SCRIPT],frak:[\"SetFont\",a.TexConstant.Variant.FRAKTUR],sf:[\"SetFont\",a.TexConstant.Variant.SANSSERIF],tt:[\"SetFont\",a.TexConstant.Variant.MONOSPACE],tiny:[\"SetSize\",.5],Tiny:[\"SetSize\",.6],scriptsize:[\"SetSize\",.7],small:[\"SetSize\",.85],normalsize:[\"SetSize\",1],large:[\"SetSize\",1.2],Large:[\"SetSize\",1.44],LARGE:[\"SetSize\",1.73],huge:[\"SetSize\",2.07],Huge:[\"SetSize\",2.49],arcsin:[\"NamedFn\"],arccos:[\"NamedFn\"],arctan:[\"NamedFn\"],arg:[\"NamedFn\"],cos:[\"NamedFn\"],cosh:[\"NamedFn\"],cot:[\"NamedFn\"],coth:[\"NamedFn\"],csc:[\"NamedFn\"],deg:[\"NamedFn\"],det:\"NamedOp\",dim:[\"NamedFn\"],exp:[\"NamedFn\"],gcd:\"NamedOp\",hom:[\"NamedFn\"],inf:\"NamedOp\",ker:[\"NamedFn\"],lg:[\"NamedFn\"],lim:\"NamedOp\",liminf:[\"NamedOp\",\"lim&thinsp;inf\"],limsup:[\"NamedOp\",\"lim&thinsp;sup\"],ln:[\"NamedFn\"],log:[\"NamedFn\"],max:\"NamedOp\",min:\"NamedOp\",Pr:\"NamedOp\",sec:[\"NamedFn\"],sin:[\"NamedFn\"],sinh:[\"NamedFn\"],sup:\"NamedOp\",tan:[\"NamedFn\"],tanh:[\"NamedFn\"],limits:[\"Limits\",1],nolimits:[\"Limits\",0],overline:[\"UnderOver\",\"00AF\",null,1],underline:[\"UnderOver\",\"005F\"],overbrace:[\"UnderOver\",\"23DE\",1],underbrace:[\"UnderOver\",\"23DF\",1],overparen:[\"UnderOver\",\"23DC\"],underparen:[\"UnderOver\",\"23DD\"],overrightarrow:[\"UnderOver\",\"2192\"],underrightarrow:[\"UnderOver\",\"2192\"],overleftarrow:[\"UnderOver\",\"2190\"],underleftarrow:[\"UnderOver\",\"2190\"],overleftrightarrow:[\"UnderOver\",\"2194\"],underleftrightarrow:[\"UnderOver\",\"2194\"],overset:\"Overset\",underset:\"Underset\",stackrel:[\"Macro\",\"\\\\mathrel{\\\\mathop{#2}\\\\limits^{#1}}\",2],over:\"Over\",overwithdelims:\"Over\",atop:\"Over\",atopwithdelims:\"Over\",above:\"Over\",abovewithdelims:\"Over\",brace:[\"Over\",\"{\",\"}\"],brack:[\"Over\",\"[\",\"]\"],choose:[\"Over\",\"(\",\")\"],frac:\"Frac\",sqrt:\"Sqrt\",root:\"Root\",uproot:[\"MoveRoot\",\"upRoot\"],leftroot:[\"MoveRoot\",\"leftRoot\"],left:\"LeftRight\",right:\"LeftRight\",middle:\"Middle\",llap:\"Lap\",rlap:\"Lap\",raise:\"RaiseLower\",lower:\"RaiseLower\",moveleft:\"MoveLeftRight\",moveright:\"MoveLeftRight\",\",\":[\"Spacer\",a.TexConstant.Length.THINMATHSPACE],\":\":[\"Spacer\",a.TexConstant.Length.MEDIUMMATHSPACE],\">\":[\"Spacer\",a.TexConstant.Length.MEDIUMMATHSPACE],\";\":[\"Spacer\",a.TexConstant.Length.THICKMATHSPACE],\"!\":[\"Spacer\",a.TexConstant.Length.NEGATIVETHINMATHSPACE],enspace:[\"Spacer\",\".5em\"],quad:[\"Spacer\",\"1em\"],qquad:[\"Spacer\",\"2em\"],thinspace:[\"Spacer\",a.TexConstant.Length.THINMATHSPACE],negthinspace:[\"Spacer\",a.TexConstant.Length.NEGATIVETHINMATHSPACE],hskip:\"Hskip\",hspace:\"Hskip\",kern:\"Hskip\",mskip:\"Hskip\",mspace:\"Hskip\",mkern:\"Hskip\",rule:\"rule\",Rule:[\"Rule\"],Space:[\"Rule\",\"blank\"],big:[\"MakeBig\",s.TEXCLASS.ORD,.85],Big:[\"MakeBig\",s.TEXCLASS.ORD,1.15],bigg:[\"MakeBig\",s.TEXCLASS.ORD,1.45],Bigg:[\"MakeBig\",s.TEXCLASS.ORD,1.75],bigl:[\"MakeBig\",s.TEXCLASS.OPEN,.85],Bigl:[\"MakeBig\",s.TEXCLASS.OPEN,1.15],biggl:[\"MakeBig\",s.TEXCLASS.OPEN,1.45],Biggl:[\"MakeBig\",s.TEXCLASS.OPEN,1.75],bigr:[\"MakeBig\",s.TEXCLASS.CLOSE,.85],Bigr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.15],biggr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.45],Biggr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.75],bigm:[\"MakeBig\",s.TEXCLASS.REL,.85],Bigm:[\"MakeBig\",s.TEXCLASS.REL,1.15],biggm:[\"MakeBig\",s.TEXCLASS.REL,1.45],Biggm:[\"MakeBig\",s.TEXCLASS.REL,1.75],mathord:[\"TeXAtom\",s.TEXCLASS.ORD],mathop:[\"TeXAtom\",s.TEXCLASS.OP],mathopen:[\"TeXAtom\",s.TEXCLASS.OPEN],mathclose:[\"TeXAtom\",s.TEXCLASS.CLOSE],mathbin:[\"TeXAtom\",s.TEXCLASS.BIN],mathrel:[\"TeXAtom\",s.TEXCLASS.REL],mathpunct:[\"TeXAtom\",s.TEXCLASS.PUNCT],mathinner:[\"TeXAtom\",s.TEXCLASS.INNER],vcenter:[\"TeXAtom\",s.TEXCLASS.VCENTER],buildrel:\"BuildRel\",hbox:[\"HBox\",0],text:\"HBox\",mbox:[\"HBox\",0],fbox:\"FBox\",strut:\"Strut\",mathstrut:[\"Macro\",\"\\\\vphantom{(}\"],phantom:\"Phantom\",vphantom:[\"Phantom\",1,0],hphantom:[\"Phantom\",0,1],smash:\"Smash\",acute:[\"Accent\",\"00B4\"],grave:[\"Accent\",\"0060\"],ddot:[\"Accent\",\"00A8\"],tilde:[\"Accent\",\"007E\"],bar:[\"Accent\",\"00AF\"],breve:[\"Accent\",\"02D8\"],check:[\"Accent\",\"02C7\"],hat:[\"Accent\",\"005E\"],vec:[\"Accent\",\"2192\"],dot:[\"Accent\",\"02D9\"],widetilde:[\"Accent\",\"007E\",1],widehat:[\"Accent\",\"005E\",1],matrix:\"Matrix\",array:\"Matrix\",pmatrix:[\"Matrix\",\"(\",\")\"],cases:[\"Matrix\",\"{\",\"\",\"left left\",null,\".1em\",null,!0],eqalign:[\"Matrix\",null,null,\"right left\",a.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\"],displaylines:[\"Matrix\",null,null,\"center\",null,\".5em\",\"D\"],cr:\"Cr\",\"\\\\\":\"CrLaTeX\",newline:[\"CrLaTeX\",!0],hline:[\"HLine\",\"solid\"],hdashline:[\"HLine\",\"dashed\"],eqalignno:[\"Matrix\",null,null,\"right left\",a.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\",null,\"right\"],leqalignno:[\"Matrix\",null,null,\"right left\",a.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\",null,\"left\"],hfill:\"HFill\",hfil:\"HFill\",hfilll:\"HFill\",bmod:[\"Macro\",'\\\\mmlToken{mo}[lspace=\"thickmathspace\" rspace=\"thickmathspace\"]{mod}'],pmod:[\"Macro\",\"\\\\pod{\\\\mmlToken{mi}{mod}\\\\kern 6mu #1}\",1],mod:[\"Macro\",\"\\\\mathchoice{\\\\kern18mu}{\\\\kern12mu}{\\\\kern12mu}{\\\\kern12mu}\\\\mmlToken{mi}{mod}\\\\,\\\\,#1\",1],pod:[\"Macro\",\"\\\\mathchoice{\\\\kern18mu}{\\\\kern8mu}{\\\\kern8mu}{\\\\kern8mu}(#1)\",1],iff:[\"Macro\",\"\\\\;\\\\Longleftrightarrow\\\\;\"],skew:[\"Macro\",\"{{#2{#3\\\\mkern#1mu}\\\\mkern-#1mu}{}}\",3],mathcal:[\"Macro\",\"{\\\\cal #1}\",1],mathscr:[\"Macro\",\"{\\\\scr #1}\",1],mathrm:[\"Macro\",\"{\\\\rm #1}\",1],mathbf:[\"Macro\",\"{\\\\bf #1}\",1],mathbb:[\"Macro\",\"{\\\\bbFont #1}\",1],Bbb:[\"Macro\",\"{\\\\bbFont #1}\",1],mathit:[\"Macro\",\"{\\\\it #1}\",1],mathfrak:[\"Macro\",\"{\\\\frak #1}\",1],mathsf:[\"Macro\",\"{\\\\sf #1}\",1],mathtt:[\"Macro\",\"{\\\\tt #1}\",1],textrm:[\"HBox\",null,a.TexConstant.Variant.NORMAL],textit:[\"HBox\",null,a.TexConstant.Variant.ITALIC],textbf:[\"HBox\",null,a.TexConstant.Variant.BOLD],textsf:[\"HBox\",null,a.TexConstant.Variant.SANSSERIF],texttt:[\"HBox\",null,a.TexConstant.Variant.MONOSPACE],pmb:[\"Macro\",\"\\\\rlap{#1}\\\\kern1px{#1}\",1],TeX:[\"Macro\",\"T\\\\kern-.14em\\\\lower.5ex{E}\\\\kern-.115em X\"],LaTeX:[\"Macro\",\"L\\\\kern-.325em\\\\raise.21em{\\\\scriptstyle{A}}\\\\kern-.17em\\\\TeX\"],\" \":[\"Macro\",\"\\\\text{ }\"],not:\"Not\",dots:\"Dots\",space:\"Tilde\",\"\\xa0\":\"Tilde\",begin:\"BeginEnd\",end:\"BeginEnd\",label:\"HandleLabel\",ref:\"HandleRef\",nonumber:\"HandleNoTag\",mathchoice:\"MathChoice\",mmlToken:\"MmlToken\"},o.default),new n.EnvironmentMap(\"environment\",i.default.environment,{array:[\"AlignedArray\"],equation:[\"Equation\",null,!0],\"equation*\":[\"Equation\",null,!1],eqnarray:[\"EqnArray\",null,!0,!0,\"rcl\",\"0 \"+a.TexConstant.Length.THICKMATHSPACE,\".5em\"]},o.default),new n.CharacterMap(\"not_remap\",null,{\"\\u2190\":\"\\u219a\",\"\\u2192\":\"\\u219b\",\"\\u2194\":\"\\u21ae\",\"\\u21d0\":\"\\u21cd\",\"\\u21d2\":\"\\u21cf\",\"\\u21d4\":\"\\u21ce\",\"\\u2208\":\"\\u2209\",\"\\u220b\":\"\\u220c\",\"\\u2223\":\"\\u2224\",\"\\u2225\":\"\\u2226\",\"\\u223c\":\"\\u2241\",\"~\":\"\\u2241\",\"\\u2243\":\"\\u2244\",\"\\u2245\":\"\\u2247\",\"\\u2248\":\"\\u2249\",\"\\u224d\":\"\\u226d\",\"=\":\"\\u2260\",\"\\u2261\":\"\\u2262\",\"<\":\"\\u226e\",\">\":\"\\u226f\",\"\\u2264\":\"\\u2270\",\"\\u2265\":\"\\u2271\",\"\\u2272\":\"\\u2274\",\"\\u2273\":\"\\u2275\",\"\\u2276\":\"\\u2278\",\"\\u2277\":\"\\u2279\",\"\\u227a\":\"\\u2280\",\"\\u227b\":\"\\u2281\",\"\\u2282\":\"\\u2284\",\"\\u2283\":\"\\u2285\",\"\\u2286\":\"\\u2288\",\"\\u2287\":\"\\u2289\",\"\\u22a2\":\"\\u22ac\",\"\\u22a8\":\"\\u22ad\",\"\\u22a9\":\"\\u22ae\",\"\\u22ab\":\"\\u22af\",\"\\u227c\":\"\\u22e0\",\"\\u227d\":\"\\u22e1\",\"\\u2291\":\"\\u22e2\",\"\\u2292\":\"\\u22e3\",\"\\u22b2\":\"\\u22ea\",\"\\u22b3\":\"\\u22eb\",\"\\u22b4\":\"\\u22ec\",\"\\u22b5\":\"\\u22ed\",\"\\u2203\":\"\\u2204\"})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(13).add({Pcy:\"\\u041f\",Poincareplane:\"\\u210c\",Pr:\"\\u2abb\",Prime:\"\\u2033\",Proportion:\"\\u2237\",par:\"\\u2225\",para:\"\\xb6\",parallel:\"\\u2225\",parsim:\"\\u2af3\",parsl:\"\\u2afd\",part:\"\\u2202\",pcy:\"\\u043f\",percnt:\"%\",permil:\"\\u2030\",perp:\"\\u22a5\",pertenk:\"\\u2031\",phmmat:\"\\u2133\",phone:\"\\u260e\",pitchfork:\"\\u22d4\",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\",pound:\"\\xa3\",pr:\"\\u227a\",prE:\"\\u2ab3\",prcue:\"\\u227c\",pre:\"\\u2aaf\",prec:\"\\u227a\",precapprox:\"\\u2ab7\",preccurlyeq:\"\\u227c\",preceq:\"\\u2aaf\",precsim:\"\\u227e\",primes:\"\\u2119\",prnE:\"\\u2ab5\",prnap:\"\\u2ab9\",prnsim:\"\\u22e8\",prod:\"\\u220f\",profalar:\"\\u232e\",profline:\"\\u2312\",profsurf:\"\\u2313\",prop:\"\\u221d\",propto:\"\\u221d\",prsim:\"\\u227e\",prurel:\"\\u22b0\",puncsp:\"\\u2008\"},\"p\")},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(13).add({RBarr:\"\\u2910\",REG:\"\\xae\",Racute:\"\\u0154\",Rang:\"\\u27eb\",Rarrtl:\"\\u2916\",Rcaron:\"\\u0158\",Rcedil:\"\\u0156\",Rcy:\"\\u0420\",ReverseElement:\"\\u220b\",ReverseUpEquilibrium:\"\\u296f\",Rho:\"\\u03a1\",RightArrowBar:\"\\u21e5\",RightDoubleBracket:\"\\u27e7\",RightDownTeeVector:\"\\u295d\",RightDownVectorBar:\"\\u2955\",RightTeeVector:\"\\u295b\",RightTriangleBar:\"\\u29d0\",RightUpDownVector:\"\\u294f\",RightUpTeeVector:\"\\u295c\",RightUpVectorBar:\"\\u2954\",RightVectorBar:\"\\u2953\",RoundImplies:\"\\u2970\",RuleDelayed:\"\\u29f4\",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\",rarrw:\"\\u219d\",ratail:\"\\u291a\",ratio:\"\\u2236\",rationals:\"\\u211a\",rbarr:\"\\u290d\",rbbrk:\"\\u2773\",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\",rhard:\"\\u21c1\",rharu:\"\\u21c0\",rharul:\"\\u296c\",rightarrow:\"\\u2192\",rightarrowtail:\"\\u21a3\",rightharpoondown:\"\\u21c1\",rightharpoonup:\"\\u21c0\",rightleftarrows:\"\\u21c4\",rightleftharpoons:\"\\u21cc\",rightsquigarrow:\"\\u219d\",risingdotseq:\"\\u2253\",rlarr:\"\\u21c4\",rlhar:\"\\u21cc\",rlm:\"\\u200f\",rmoustache:\"\\u23b1\",rnmid:\"\\u2aee\",roang:\"\\u27ed\",roarr:\"\\u21fe\",robrk:\"\\u27e7\",ropar:\"\\u2986\",roplus:\"\\u2a2e\",rotimes:\"\\u2a35\",rpar:\")\",rpargt:\"\\u2994\",rppolint:\"\\u2a12\",rrarr:\"\\u21c9\",rsaquo:\"\\u203a\",rsh:\"\\u21b1\",rsqb:\"]\",rsquo:\"\\u2019\",rsquor:\"\\u2019\",rthree:\"\\u22cc\",rtrie:\"\\u22b5\",rtrif:\"\\u25b8\",rtriltri:\"\\u29ce\",ruluhar:\"\\u2968\",rx:\"\\u211e\"},\"r\")},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(17),a=r(1),o=r(7),i=r(12),s=r(4),l=r(5),c=function(t){for(var e=[],r=0,n=t.length;r<n;r++)e[r]=s.default.Em(t[r]);return e.join(\" \")};new a.CharacterMap(\"AMSmath-mathchar0mo\",i.default.mathchar0mo,{iiiint:[\"\\u2a0c\",{texClass:l.TEXCLASS.OP}]}),new a.CommandMap(\"AMSmath-macros\",{mathring:[\"Accent\",\"02DA\"],nobreakspace:\"Tilde\",negmedspace:[\"Spacer\",o.TexConstant.Length.NEGATIVEMEDIUMMATHSPACE],negthickspace:[\"Spacer\",o.TexConstant.Length.NEGATIVETHICKMATHSPACE],idotsint:[\"MultiIntegral\",\"\\\\int\\\\cdots\\\\int\"],dddot:[\"Accent\",\"20DB\"],ddddot:[\"Accent\",\"20DC\"],sideset:[\"Macro\",\"\\\\mathop{\\\\mathop{\\\\rlap{\\\\phantom{#3}}}\\\\nolimits#1\\\\!\\\\mathop{#3}\\\\nolimits#2}\",3],boxed:[\"Macro\",\"\\\\fbox{$\\\\displaystyle{#1}$}\",1],tag:\"HandleTag\",notag:\"HandleNoTag\",eqref:[\"HandleRef\",!0],substack:[\"Macro\",\"\\\\begin{subarray}{c}#1\\\\end{subarray}\",1],injlim:[\"NamedOp\",\"inj&thinsp;lim\"],projlim:[\"NamedOp\",\"proj&thinsp;lim\"],varliminf:[\"Macro\",\"\\\\mathop{\\\\underline{\\\\mmlToken{mi}{lim}}}\"],varlimsup:[\"Macro\",\"\\\\mathop{\\\\overline{\\\\mmlToken{mi}{lim}}}\"],varinjlim:[\"Macro\",\"\\\\mathop{\\\\underrightarrow{\\\\mmlToken{mi}{lim}}}\"],varprojlim:[\"Macro\",\"\\\\mathop{\\\\underleftarrow{\\\\mmlToken{mi}{lim}}}\"],DeclareMathOperator:\"HandleDeclareOp\",operatorname:\"HandleOperatorName\",SkipLimits:\"SkipLimits\",genfrac:\"Genfrac\",frac:[\"Genfrac\",\"\",\"\",\"\",\"\"],tfrac:[\"Genfrac\",\"\",\"\",\"\",\"1\"],dfrac:[\"Genfrac\",\"\",\"\",\"\",\"0\"],binom:[\"Genfrac\",\"(\",\")\",\"0\",\"\"],tbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"1\"],dbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"0\"],cfrac:\"CFrac\",shoveleft:[\"HandleShove\",o.TexConstant.Align.LEFT],shoveright:[\"HandleShove\",o.TexConstant.Align.RIGHT],xrightarrow:[\"xArrow\",8594,5,6],xleftarrow:[\"xArrow\",8592,7,3]},n.AmsMethods),new a.EnvironmentMap(\"AMSmath-environment\",i.default.environment,{\"eqnarray*\":[\"EqnArray\",null,!1,!0,\"rcl\",\"0 \"+o.TexConstant.Length.THICKMATHSPACE,\".5em\"],align:[\"EqnArray\",null,!0,!0,\"rlrlrlrlrlrl\",c([0,2,0,2,0,2,0,2,0,2,0])],\"align*\":[\"EqnArray\",null,!1,!0,\"rlrlrlrlrlrl\",c([0,2,0,2,0,2,0,2,0,2,0])],multline:[\"Multline\",null,!0],\"multline*\":[\"Multline\",null,!1],split:[\"EqnArray\",null,!1,!1,\"rl\",c([0])],gather:[\"EqnArray\",null,!0,!0,\"c\"],\"gather*\":[\"EqnArray\",null,!1,!0,\"c\"],alignat:[\"AlignAt\",null,!0,!0],\"alignat*\":[\"AlignAt\",null,!1,!0],alignedat:[\"AlignAt\",null,!1,!1],aligned:[\"AmsEqnArray\",null,null,null,\"rlrlrlrlrlrl\",c([0,2,0,2,0,2,0,2,0,2,0]),\".5em\",\"D\"],gathered:[\"AmsEqnArray\",null,null,null,\"c\",null,\".5em\",\"D\"],subarray:[\"Array\",null,null,null,null,c([0]),\"0.1em\",\"S\",1],smallmatrix:[\"Array\",null,null,null,\"c\",c([1/3]),\".2em\",\"S\",1],matrix:[\"Array\",null,null,null,\"c\"],pmatrix:[\"Array\",null,\"(\",\")\",\"c\"],bmatrix:[\"Array\",null,\"[\",\"]\",\"c\"],Bmatrix:[\"Array\",null,\"\\\\{\",\"\\\\}\",\"c\"],vmatrix:[\"Array\",null,\"\\\\vert\",\"\\\\vert\",\"c\"],Vmatrix:[\"Array\",null,\"\\\\Vert\",\"\\\\Vert\",\"c\"],cases:[\"Array\",null,\"\\\\{\",\".\",\"ll\",null,\".2em\",\"T\"]},n.AmsMethods),new a.DelimiterMap(\"AMSmath-delimiter\",i.default.delimiter,{\"\\\\lvert\":[\"|\",{texClass:l.TEXCLASS.OPEN}],\"\\\\rvert\":[\"|\",{texClass:l.TEXCLASS.CLOSE}],\"\\\\lVert\":[\"\\u2016\",{texClass:l.TEXCLASS.OPEN}],\"\\\\rVert\":[\"\\u2016\",{texClass:l.TEXCLASS.CLOSE}]}),new a.CharacterMap(\"AMSsymbols-mathchar0mi\",i.default.mathchar0mi,{digamma:\"\\u03dd\",varkappa:\"\\u03f0\",varGamma:[\"\\u0393\",{mathvariant:o.TexConstant.Variant.ITALIC}],varDelta:[\"\\u0394\",{mathvariant:o.TexConstant.Variant.ITALIC}],varTheta:[\"\\u0398\",{mathvariant:o.TexConstant.Variant.ITALIC}],varLambda:[\"\\u039b\",{mathvariant:o.TexConstant.Variant.ITALIC}],varXi:[\"\\u039e\",{mathvariant:o.TexConstant.Variant.ITALIC}],varPi:[\"\\u03a0\",{mathvariant:o.TexConstant.Variant.ITALIC}],varSigma:[\"\\u03a3\",{mathvariant:o.TexConstant.Variant.ITALIC}],varUpsilon:[\"\\u03a5\",{mathvariant:o.TexConstant.Variant.ITALIC}],varPhi:[\"\\u03a6\",{mathvariant:o.TexConstant.Variant.ITALIC}],varPsi:[\"\\u03a8\",{mathvariant:o.TexConstant.Variant.ITALIC}],varOmega:[\"\\u03a9\",{mathvariant:o.TexConstant.Variant.ITALIC}],beth:\"\\u2136\",gimel:\"\\u2137\",daleth:\"\\u2138\",backprime:[\"\\u2035\",{variantForm:!0}],hslash:\"\\u210f\",varnothing:[\"\\u2205\",{variantForm:!0}],blacktriangle:\"\\u25b4\",triangledown:[\"\\u25bd\",{variantForm:!0}],blacktriangledown:\"\\u25be\",square:\"\\u25fb\",Box:\"\\u25fb\",blacksquare:\"\\u25fc\",lozenge:\"\\u25ca\",Diamond:\"\\u25ca\",blacklozenge:\"\\u29eb\",circledS:[\"\\u24c8\",{mathvariant:o.TexConstant.Variant.NORMAL}],bigstar:\"\\u2605\",sphericalangle:\"\\u2222\",measuredangle:\"\\u2221\",nexists:\"\\u2204\",complement:\"\\u2201\",mho:\"\\u2127\",eth:[\"\\xf0\",{mathvariant:o.TexConstant.Variant.NORMAL}],Finv:\"\\u2132\",diagup:\"\\u2571\",Game:\"\\u2141\",diagdown:\"\\u2572\",Bbbk:[\"k\",{mathvariant:o.TexConstant.Variant.DOUBLESTRUCK}],yen:\"\\xa5\",circledR:\"\\xae\",checkmark:\"\\u2713\",maltese:\"\\u2720\"}),new a.CharacterMap(\"AMSsymbols-mathchar0m0\",i.default.mathchar0mo,{dotplus:\"\\u2214\",ltimes:\"\\u22c9\",smallsetminus:[\"\\u2216\",{variantForm:!0}],rtimes:\"\\u22ca\",Cap:\"\\u22d2\",doublecap:\"\\u22d2\",leftthreetimes:\"\\u22cb\",Cup:\"\\u22d3\",doublecup:\"\\u22d3\",rightthreetimes:\"\\u22cc\",barwedge:\"\\u22bc\",curlywedge:\"\\u22cf\",veebar:\"\\u22bb\",curlyvee:\"\\u22ce\",doublebarwedge:\"\\u2a5e\",boxminus:\"\\u229f\",circleddash:\"\\u229d\",boxtimes:\"\\u22a0\",circledast:\"\\u229b\",boxdot:\"\\u22a1\",circledcirc:\"\\u229a\",boxplus:\"\\u229e\",centerdot:[\"\\u22c5\",{variantForm:!0}],divideontimes:\"\\u22c7\",intercal:\"\\u22ba\",leqq:\"\\u2266\",geqq:\"\\u2267\",leqslant:\"\\u2a7d\",geqslant:\"\\u2a7e\",eqslantless:\"\\u2a95\",eqslantgtr:\"\\u2a96\",lesssim:\"\\u2272\",gtrsim:\"\\u2273\",lessapprox:\"\\u2a85\",gtrapprox:\"\\u2a86\",approxeq:\"\\u224a\",lessdot:\"\\u22d6\",gtrdot:\"\\u22d7\",lll:\"\\u22d8\",llless:\"\\u22d8\",ggg:\"\\u22d9\",gggtr:\"\\u22d9\",lessgtr:\"\\u2276\",gtrless:\"\\u2277\",lesseqgtr:\"\\u22da\",gtreqless:\"\\u22db\",lesseqqgtr:\"\\u2a8b\",gtreqqless:\"\\u2a8c\",doteqdot:\"\\u2251\",Doteq:\"\\u2251\",eqcirc:\"\\u2256\",risingdotseq:\"\\u2253\",circeq:\"\\u2257\",fallingdotseq:\"\\u2252\",triangleq:\"\\u225c\",backsim:\"\\u223d\",thicksim:[\"\\u223c\",{variantForm:!0}],backsimeq:\"\\u22cd\",thickapprox:[\"\\u2248\",{variantForm:!0}],subseteqq:\"\\u2ac5\",supseteqq:\"\\u2ac6\",Subset:\"\\u22d0\",Supset:\"\\u22d1\",sqsubset:\"\\u228f\",sqsupset:\"\\u2290\",preccurlyeq:\"\\u227c\",succcurlyeq:\"\\u227d\",curlyeqprec:\"\\u22de\",curlyeqsucc:\"\\u22df\",precsim:\"\\u227e\",succsim:\"\\u227f\",precapprox:\"\\u2ab7\",succapprox:\"\\u2ab8\",vartriangleleft:\"\\u22b2\",lhd:\"\\u22b2\",vartriangleright:\"\\u22b3\",rhd:\"\\u22b3\",trianglelefteq:\"\\u22b4\",unlhd:\"\\u22b4\",trianglerighteq:\"\\u22b5\",unrhd:\"\\u22b5\",vDash:[\"\\u22a8\",{variantForm:!0}],Vdash:\"\\u22a9\",Vvdash:\"\\u22aa\",smallsmile:[\"\\u2323\",{variantForm:!0}],shortmid:[\"\\u2223\",{variantForm:!0}],smallfrown:[\"\\u2322\",{variantForm:!0}],shortparallel:[\"\\u2225\",{variantForm:!0}],bumpeq:\"\\u224f\",between:\"\\u226c\",Bumpeq:\"\\u224e\",pitchfork:\"\\u22d4\",varpropto:[\"\\u221d\",{variantForm:!0}],backepsilon:\"\\u220d\",blacktriangleleft:\"\\u25c2\",blacktriangleright:\"\\u25b8\",therefore:\"\\u2234\",because:\"\\u2235\",eqsim:\"\\u2242\",vartriangle:[\"\\u25b3\",{variantForm:!0}],Join:\"\\u22c8\",nless:\"\\u226e\",ngtr:\"\\u226f\",nleq:\"\\u2270\",ngeq:\"\\u2271\",nleqslant:[\"\\u2a87\",{variantForm:!0}],ngeqslant:[\"\\u2a88\",{variantForm:!0}],nleqq:[\"\\u2270\",{variantForm:!0}],ngeqq:[\"\\u2271\",{variantForm:!0}],lneq:\"\\u2a87\",gneq:\"\\u2a88\",lneqq:\"\\u2268\",gneqq:\"\\u2269\",lvertneqq:[\"\\u2268\",{variantForm:!0}],gvertneqq:[\"\\u2269\",{variantForm:!0}],lnsim:\"\\u22e6\",gnsim:\"\\u22e7\",lnapprox:\"\\u2a89\",gnapprox:\"\\u2a8a\",nprec:\"\\u2280\",nsucc:\"\\u2281\",npreceq:[\"\\u22e0\",{variantForm:!0}],nsucceq:[\"\\u22e1\",{variantForm:!0}],precneqq:\"\\u2ab5\",succneqq:\"\\u2ab6\",precnsim:\"\\u22e8\",succnsim:\"\\u22e9\",precnapprox:\"\\u2ab9\",succnapprox:\"\\u2aba\",nsim:\"\\u2241\",ncong:\"\\u2247\",nshortmid:[\"\\u2224\",{variantForm:!0}],nshortparallel:[\"\\u2226\",{variantForm:!0}],nmid:\"\\u2224\",nparallel:\"\\u2226\",nvdash:\"\\u22ac\",nvDash:\"\\u22ad\",nVdash:\"\\u22ae\",nVDash:\"\\u22af\",ntriangleleft:\"\\u22ea\",ntriangleright:\"\\u22eb\",ntrianglelefteq:\"\\u22ec\",ntrianglerighteq:\"\\u22ed\",nsubseteq:\"\\u2288\",nsupseteq:\"\\u2289\",nsubseteqq:[\"\\u2288\",{variantForm:!0}],nsupseteqq:[\"\\u2289\",{variantForm:!0}],subsetneq:\"\\u228a\",supsetneq:\"\\u228b\",varsubsetneq:[\"\\u228a\",{variantForm:!0}],varsupsetneq:[\"\\u228b\",{variantForm:!0}],subsetneqq:\"\\u2acb\",supsetneqq:\"\\u2acc\",varsubsetneqq:[\"\\u2acb\",{variantForm:!0}],varsupsetneqq:[\"\\u2acc\",{variantForm:!0}],leftleftarrows:\"\\u21c7\",rightrightarrows:\"\\u21c9\",leftrightarrows:\"\\u21c6\",rightleftarrows:\"\\u21c4\",Lleftarrow:\"\\u21da\",Rrightarrow:\"\\u21db\",twoheadleftarrow:\"\\u219e\",twoheadrightarrow:\"\\u21a0\",leftarrowtail:\"\\u21a2\",rightarrowtail:\"\\u21a3\",looparrowleft:\"\\u21ab\",looparrowright:\"\\u21ac\",leftrightharpoons:\"\\u21cb\",rightleftharpoons:[\"\\u21cc\",{variantForm:!0}],curvearrowleft:\"\\u21b6\",curvearrowright:\"\\u21b7\",circlearrowleft:\"\\u21ba\",circlearrowright:\"\\u21bb\",Lsh:\"\\u21b0\",Rsh:\"\\u21b1\",upuparrows:\"\\u21c8\",downdownarrows:\"\\u21ca\",upharpoonleft:\"\\u21bf\",upharpoonright:\"\\u21be\",downharpoonleft:\"\\u21c3\",restriction:\"\\u21be\",multimap:\"\\u22b8\",downharpoonright:\"\\u21c2\",leftrightsquigarrow:\"\\u21ad\",rightsquigarrow:\"\\u21dd\",leadsto:\"\\u21dd\",dashrightarrow:\"\\u21e2\",dashleftarrow:\"\\u21e0\",nleftarrow:\"\\u219a\",nrightarrow:\"\\u219b\",nLeftarrow:\"\\u21cd\",nRightarrow:\"\\u21cf\",nleftrightarrow:\"\\u21ae\",nLeftrightarrow:\"\\u21ce\"}),new a.DelimiterMap(\"AMSsymbols-delimiter\",i.default.delimiter,{\"\\\\ulcorner\":\"\\u231c\",\"\\\\urcorner\":\"\\u231d\",\"\\\\llcorner\":\"\\u231e\",\"\\\\lrcorner\":\"\\u231f\"}),new a.CommandMap(\"AMSsymbols-macros\",{implies:[\"Macro\",\"\\\\;\\\\Longrightarrow\\\\;\"],impliedby:[\"Macro\",\"\\\\;\\\\Longleftarrow\\\\;\"]},n.AmsMethods)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),a=r(12),o=r(39);new n.EnvironmentMap(\"amscd_environment\",a.default.environment,{CD:\"CD\"},o.default),new n.CommandMap(\"amscd_macros\",{minCDarrowwidth:\"minCDarrowwidth\",minCDarrowheight:\"minCDarrowheight\"},o.default),new n.MacroMap(\"amscd_special\",{\"@\":\"arrow\"},o.default)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),a=r(44);new n.CommandMap(\"Braket-macros\",{bra:[\"Macro\",\"{\\\\langle {#1} \\\\vert}\",1],ket:[\"Macro\",\"{\\\\vert {#1} \\\\rangle}\",1],braket:[\"Braket\",\"\\u27e8\",\"\\u27e9\",!1,1/0],set:[\"Braket\",\"{\",\"}\",!1,1],Bra:[\"Macro\",\"{\\\\left\\\\langle {#1} \\\\right\\\\vert}\",1],Ket:[\"Macro\",\"{\\\\left\\\\vert {#1} \\\\right\\\\rangle}\",1],Braket:[\"Braket\",\"\\u27e8\",\"\\u27e9\",!0,1/0],Set:[\"Braket\",\"{\",\"}\",!0,1],ketbra:[\"Macro\",\"{\\\\vert {#1} \\\\rangle\\\\langle {#2} \\\\vert}\",2],Ketbra:[\"Macro\",\"{\\\\left\\\\vert {#1} \\\\right\\\\rangle\\\\left\\\\langle {#2} \\\\right\\\\vert}\",2],\"|\":\"Bar\"},a.default),new n.MacroMap(\"Braket-characters\",{\"|\":\"Bar\"},a.default)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(47),a=r(12),o=r(1);new o.CommandMap(\"Bussproofs-macros\",{AxiomC:\"Axiom\",UnaryInfC:[\"Inference\",1],BinaryInfC:[\"Inference\",2],TrinaryInfC:[\"Inference\",3],QuaternaryInfC:[\"Inference\",4],QuinaryInfC:[\"Inference\",5],RightLabel:[\"Label\",\"right\"],LeftLabel:[\"Label\",\"left\"],AXC:\"Axiom\",UIC:[\"Inference\",1],BIC:[\"Inference\",2],TIC:[\"Inference\",3],RL:[\"Label\",\"right\"],LL:[\"Label\",\"left\"],noLine:[\"SetLine\",\"none\",!1],singleLine:[\"SetLine\",\"solid\",!1],solidLine:[\"SetLine\",\"solid\",!1],dashedLine:[\"SetLine\",\"dashed\",!1],alwaysNoLine:[\"SetLine\",\"none\",!0],alwaysSingleLine:[\"SetLine\",\"solid\",!0],alwaysSolidLine:[\"SetLine\",\"solid\",!0],alwaysDashedLine:[\"SetLine\",\"dashed\",!0],rootAtTop:[\"RootAtTop\",!0],alwaysRootAtTop:[\"RootAtTop\",!0],rootAtBottom:[\"RootAtTop\",!1],alwaysRootAtBottom:[\"RootAtTop\",!1],fCenter:\"FCenter\",Axiom:\"AxiomF\",UnaryInf:[\"InferenceF\",1],BinaryInf:[\"InferenceF\",2],TrinaryInf:[\"InferenceF\",3],QuaternaryInf:[\"InferenceF\",4],QuinaryInf:[\"InferenceF\",5]},n.default),new o.EnvironmentMap(\"Bussproofs-environments\",a.default.environment,{prooftree:[\"Prooftree\",null,!1]},n.default)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(26);new(r(1).CommandMap)(\"Newcommand-macros\",{newcommand:\"NewCommand\",renewcommand:\"NewCommand\",newenvironment:\"NewEnvironment\",renewenvironment:\"NewEnvironment\",def:\"MacroDef\",let:\"Let\"},n.default)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n={go:function(t,e){if(!t)return[];void 0===e&&(e=\"ce\");var r,a=\"0\",o={};o.parenthesisLevel=0,t=(t=(t=t.replace(/\\n/g,\" \")).replace(/[\\u2212\\u2013\\u2014\\u2010]/g,\"-\")).replace(/[\\u2026]/g,\"...\");for(var i=10,s=[];;){r!==t?(i=10,r=t):i--;var l=n.stateMachines[e],c=l.transitions[a]||l.transitions[\"*\"];t:for(var u=0;u<c.length;u++){var p=n.patterns.match_(c[u].pattern,t);if(p){for(var f=c[u].task,d=0;d<f.action_.length;d++){var h;if(l.actions[f.action_[d].type_])h=l.actions[f.action_[d].type_](o,p.match_,f.action_[d].option);else{if(!n.actions[f.action_[d].type_])throw[\"MhchemBugA\",\"mhchem bug A. Please report. (\"+f.action_[d].type_+\")\"];h=n.actions[f.action_[d].type_](o,p.match_,f.action_[d].option)}n.concatArray(s,h)}if(a=f.nextState||a,!(t.length>0))return s;if(f.revisit||(t=p.remainder),!f.toContinue)break t}}if(i<=0)throw[\"MhchemBugU\",\"mhchem bug U. Please report.\"]}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var r=0;r<e.length;r++)t.push(e[r]);else t.push(e)},patterns:{patterns:{empty:/^$/,else:/^./,else2:/^./,space:/^\\s/,\"space A\":/^\\s(?=[A-Z\\\\$])/,space$:/^\\s$/,\"a-z\":/^[a-z]/,x:/^x/,x$:/^x$/,i$:/^i$/,letters:/^(?:[a-zA-Z\\u03B1-\\u03C9\\u0391-\\u03A9?@]|(?:\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))))+/,\"\\\\greek\":/^\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))/,\"one lowercase latin letter $\":/^(?:([a-z])(?:$|[^a-zA-Z]))$/,\"$one lowercase latin letter$ $\":/^\\$(?:([a-z])(?:$|[^a-zA-Z]))\\$$/,\"one lowercase greek letter $\":/^(?:\\$?[\\u03B1-\\u03C9]\\$?|\\$?\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\\s*\\$?)(?:\\s+|\\{\\}|(?![a-zA-Z]))$/,digits:/^[0-9]+/,\"-9.,9\":/^[+\\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))/,\"-9.,9 no missing 0\":/^[+\\-]?[0-9]+(?:[.,][0-9]+)?/,\"(-)(9.,9)(e)(99)\":function(t){var e=t.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))?(\\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))\\))?(?:([eE]|\\s*(\\*|x|\\\\times|\\u00D7)\\s*10\\^)([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\}))?/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},\"(-)(9)^(-9)\":function(t){var e=t.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+)?)\\^([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\})/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},\"state of aggregation $\":function(t){var e=n.patterns.findObserveGroups(t,\"\",/^\\([a-z]{1,3}(?=[\\),])/,\")\",\"\");if(e&&e.remainder.match(/^($|[\\s,;\\)\\]\\}])/))return e;var r=t.match(/^(?:\\((?:\\\\ca\\s?)?\\$[amothc]\\$\\))/);return r?{match_:r[0],remainder:t.substr(r[0].length)}:null},\"_{(state of aggregation)}$\":/^_\\{(\\([a-z]{1,3}\\))\\}/,\"{[(\":/^(?:\\\\\\{|\\[|\\()/,\")]}\":/^(?:\\)|\\]|\\\\\\})/,\", \":/^[,;]\\s*/,\",\":/^[,;]/,\".\":/^[.]/,\". \":/^([.\\u22C5\\u00B7\\u2022])\\s*/,\"...\":/^\\.\\.\\.(?=$|[^.])/,\"* \":/^([*])\\s*/,\"^{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"^{\",\"\",\"\",\"}\")},\"^($...$)\":function(t){return n.patterns.findObserveGroups(t,\"^\",\"$\",\"$\",\"\")},\"^a\":/^\\^([0-9]+|[^\\\\_])/,\"^\\\\x{}{}\":function(t){return n.patterns.findObserveGroups(t,\"^\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"^\\\\x{}\":function(t){return n.patterns.findObserveGroups(t,\"^\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"^\\\\x\":/^\\^(\\\\[a-zA-Z]+)\\s*/,\"^(-1)\":/^\\^(-?\\d+)/,\"'\":/^'/,\"_{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"_{\",\"\",\"\",\"}\")},\"_($...$)\":function(t){return n.patterns.findObserveGroups(t,\"_\",\"$\",\"$\",\"\")},_9:/^_([+\\-]?[0-9]+|[^\\\\])/,\"_\\\\x{}{}\":function(t){return n.patterns.findObserveGroups(t,\"_\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"_\\\\x{}\":function(t){return n.patterns.findObserveGroups(t,\"_\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"_\\\\x\":/^_(\\\\[a-zA-Z]+)\\s*/,\"^_\":/^(?:\\^(?=_)|\\_(?=\\^)|[\\^_]$)/,\"{}\":/^\\{\\}/,\"{...}\":function(t){return n.patterns.findObserveGroups(t,\"\",\"{\",\"}\",\"\")},\"{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"{\",\"\",\"\",\"}\")},\"$...$\":function(t){return n.patterns.findObserveGroups(t,\"\",\"$\",\"$\",\"\")},\"${(...)}$\":function(t){return n.patterns.findObserveGroups(t,\"${\",\"\",\"\",\"}$\")},\"$(...)$\":function(t){return n.patterns.findObserveGroups(t,\"$\",\"\",\"\",\"$\")},\"=<>\":/^[=<>]/,\"#\":/^[#\\u2261]/,\"+\":/^\\+/,\"-$\":/^-(?=[\\s_},;\\]/]|$|\\([a-z]+\\))/,\"-9\":/^-(?=[0-9])/,\"- orbital overlap\":/^-(?=(?:[spd]|sp)(?:$|[\\s,;\\)\\]\\}]))/,\"-\":/^-/,\"pm-operator\":/^(?:\\\\pm|\\$\\\\pm\\$|\\+-|\\+\\/-)/,operator:/^(?:\\+|(?:[\\-=<>]|<<|>>|\\\\approx|\\$\\\\approx\\$)(?=\\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\\(v\\)|\\^|\\(\\^\\))(?=$|[\\s,;\\)\\]\\}])/,\"\\\\bond{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\bond{\",\"\",\"\",\"}\")},\"->\":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\\u2192\\u27F6\\u21CC])/,CMT:/^[CMT](?=\\[)/,\"[(...)]\":function(t){return n.patterns.findObserveGroups(t,\"[\",\"\",\"\",\"]\")},\"1st-level escape\":/^(&|\\\\\\\\|\\\\hline)\\s*/,\"\\\\,\":/^(?:\\\\[,\\ ;:])/,\"\\\\x{}{}\":function(t){return n.patterns.findObserveGroups(t,\"\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"\\\\x{}\":function(t){return n.patterns.findObserveGroups(t,\"\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"\\\\ca\":/^\\\\ca(?:\\s+|(?![a-zA-Z]))/,\"\\\\x\":/^(?:\\\\[a-zA-Z]+\\s*|\\\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\\/~|]/,\"\\\\frac{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\frac{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\overset{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\overset{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\underset{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\underset{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\underbrace{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\underbrace{\",\"\",\"\",\"}_\",\"{\",\"\",\"\",\"}\")},\"\\\\color{(...)}0\":function(t){return n.patterns.findObserveGroups(t,\"\\\\color{\",\"\",\"\",\"}\")},\"\\\\color{(...)}{(...)}1\":function(t){return n.patterns.findObserveGroups(t,\"\\\\color{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\color(...){(...)}2\":function(t){return n.patterns.findObserveGroups(t,\"\\\\color\",\"\\\\\",\"\",/^(?=\\{)/,\"{\",\"\",\"\",\"}\")},\"\\\\ce{(...)}\":function(t){return n.patterns.findObserveGroups(t,\"\\\\ce{\",\"\",\"\",\"}\")},oxidation$:/^(?:[+-][IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\"d-oxidation$\":/^(?:[+-]?\\s?[IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\"roman numeral\":/^[IVX]+/,\"1/2$\":/^[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+(?:\\$[a-z]\\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\\([+\\-]?[0-9]+\\/[0-9]+\\)|[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+|[+\\-]?[0-9]+[.,][0-9]+|[+\\-]?\\.[0-9]+|[+\\-]?[0-9]+)(?:[a-z](?=\\s*[A-Z]))?)|[+\\-]?[a-z](?=\\s*[A-Z])|\\+(?!\\s))/))return{match_:e[0],remainder:t.substr(e[0].length)};var r=n.patterns.findObserveGroups(t,\"\",\"$\",\"$\",\"\");return r&&(e=r.match_.match(/^\\$(?:\\(?[+\\-]?(?:[0-9]*[a-z]?[+\\-])?[0-9]*[a-z](?:[+\\-][0-9]*[a-z]?)?\\)?|\\+|-)\\$$/))?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},\"(KV letters),\":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\\([a-z]+\\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\\ \\+\\-\\,\\.\\(\\)]+[a-z])+[0-9\\ \\+\\-\\,\\.\\(\\)]*|(?:[a-z][0-9\\ \\+\\-\\,\\.\\(\\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,\"/\":/^\\s*(\\/)\\s*/,\"//\":/^\\s*(\\/\\/)\\s*/,\"*\":/^\\s*[*.]\\s*/},findObserveGroups:function(t,e,r,n,a,o,i,s,l,c){var u=function(t,e){if(\"string\"==typeof e)return 0!==t.indexOf(e)?null:e;var r=t.match(e);return r?r[0]:null},p=u(t,e);if(null===p)return null;if(t=t.substr(p.length),null===(p=u(t,r)))return null;var f=function(t,e,r){for(var n=0;e<t.length;){var a=t.charAt(e),o=u(t.substr(e),r);if(null!==o&&0===n)return{endMatchBegin:e,endMatchEnd:e+o.length};if(\"{\"===a)n++;else if(\"}\"===a){if(0===n)throw[\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"];n--}e++}return null}(t,p.length,n||a);if(null===f)return null;var d=t.substring(0,n?f.endMatchEnd:f.endMatchBegin);if(o||i){var h=this.findObserveGroups(t.substr(f.endMatchEnd),o,i,s,l);if(null===h)return null;var m=[d,h.match_];return{match_:c?m.join(\"\"):m,remainder:h.remainder}}return{match_:d,remainder:t.substr(f.endMatchEnd)}},match_:function(t,e){var r=n.patterns.patterns[t];if(void 0===r)throw[\"MhchemBugP\",\"mhchem bug P. Please report. (\"+t+\")\"];if(\"function\"==typeof r)return n.patterns.patterns[t](e);var a=e.match(r);return a?{match_:a[2]?[a[1],a[2]]:a[1]?a[1]:a[0],remainder:e.substr(a[0].length)}:null}},actions:{\"a=\":function(t,e){t.a=(t.a||\"\")+e},\"b=\":function(t,e){t.b=(t.b||\"\")+e},\"p=\":function(t,e){t.p=(t.p||\"\")+e},\"o=\":function(t,e){t.o=(t.o||\"\")+e},\"q=\":function(t,e){t.q=(t.q||\"\")+e},\"d=\":function(t,e){t.d=(t.d||\"\")+e},\"rm=\":function(t,e){t.rm=(t.rm||\"\")+e},\"text=\":function(t,e){t.text_=(t.text_||\"\")+e},insert:function(t,e,r){return{type_:r}},\"insert+p1\":function(t,e,r){return{type_:r,p1:e}},\"insert+p1+p2\":function(t,e,r){return{type_:r,p1:e[0],p2:e[1]}},copy:function(t,e){return e},rm:function(t,e){return{type_:\"rm\",p1:e||\"\"}},text:function(t,e){return n.go(e,\"text\")},\"{text}\":function(t,e){var r=[\"{\"];return n.concatArray(r,n.go(e,\"text\")),r.push(\"}\"),r},\"tex-math\":function(t,e){return n.go(e,\"tex-math\")},\"tex-math tight\":function(t,e){return n.go(e,\"tex-math tight\")},bond:function(t,e,r){return{type_:\"bond\",kind_:r||e}},\"color0-output\":function(t,e){return{type_:\"color0\",color:e[0]}},ce:function(t,e){return n.go(e)},\"1/2\":function(t,e){var r=[];e.match(/^[+\\-]/)&&(r.push(e.substr(0,1)),e=e.substr(1));var n=e.match(/^([0-9]+|\\$[a-z]\\$|[a-z])\\/([0-9]+)(\\$[a-z]\\$|[a-z])?$/);return n[1]=n[1].replace(/\\$/g,\"\"),r.push({type_:\"frac\",p1:n[1],p2:n[2]}),n[3]&&(n[3]=n[3].replace(/\\$/g,\"\"),r.push({type_:\"tex-math\",p1:n[3]})),r},\"9,9\":function(t,e){return n.go(e,\"9,9\")}},createTransitions:function(t){var e,r,n,a,o={};for(e in t)for(r in t[e])for(n=r.split(\"|\"),t[e][r].stateArray=n,a=0;a<n.length;a++)o[n[a]]=[];for(e in t)for(r in t[e])for(n=t[e][r].stateArray||[],a=0;a<n.length;a++){var i=t[e][r];if(i.action_){i.action_=[].concat(i.action_);for(var s=0;s<i.action_.length;s++)\"string\"==typeof i.action_[s]&&(i.action_[s]={type_:i.action_[s]})}else i.action_=[];for(var l=e.split(\"|\"),c=0;c<l.length;c++)if(\"*\"===n[a])for(var u in o)o[u].push({pattern:l[c],task:i});else o[n[a]].push({pattern:l[c],task:i})}return o},stateMachines:{}};n.stateMachines={ce:{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},else:{\"0|1|2\":{action_:\"beginsWithBond=false\",revisit:!0,toContinue:!0}},oxidation$:{0:{action_:\"oxidation-output\"}},CMT:{r:{action_:\"rdt=\",nextState:\"rt\"},rd:{action_:\"rqt=\",nextState:\"rdt\"}},arrowUpDown:{\"0|1|2|as\":{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"1\"}},uprightEntities:{\"0|1|2\":{action_:[\"o=\",\"output\"],nextState:\"1\"}},orbital:{\"0|1|2|3\":{action_:\"o=\",nextState:\"o\"}},\"->\":{\"0|1|2|3\":{action_:\"r=\",nextState:\"r\"},\"a|as\":{action_:[\"output\",\"r=\"],nextState:\"r\"},\"*\":{action_:[\"output\",\"r=\"],nextState:\"r\"}},\"+\":{o:{action_:\"d= kv\",nextState:\"d\"},\"d|D\":{action_:\"d=\",nextState:\"d\"},q:{action_:\"d=\",nextState:\"qd\"},\"qd|qD\":{action_:\"d=\",nextState:\"qd\"},dq:{action_:[\"output\",\"d=\"],nextState:\"d\"},3:{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"0\"}},amount:{\"0|2\":{action_:\"a=\",nextState:\"a\"}},\"pm-operator\":{\"0|1|2|a|as\":{action_:[\"sb=false\",\"output\",{type_:\"operator\",option:\"\\\\pm\"}],nextState:\"0\"}},operator:{\"0|1|2|a|as\":{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"0\"}},\"-$\":{\"o|q\":{action_:[\"charge or bond\",\"output\"],nextState:\"qd\"},d:{action_:\"d=\",nextState:\"d\"},D:{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"},q:{action_:\"d=\",nextState:\"qd\"},qd:{action_:\"d=\",nextState:\"qd\"},\"qD|dq\":{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"}},\"-9\":{\"3|o\":{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"3\"}},\"- orbital overlap\":{o:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"},d:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"}},\"-\":{\"0|1|2\":{action_:[{type_:\"output\",option:1},\"beginsWithBond=true\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"},3:{action_:{type_:\"bond\",option:\"-\"}},a:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"},as:{action_:[{type_:\"output\",option:2},{type_:\"bond\",option:\"-\"}],nextState:\"3\"},b:{action_:\"b=\"},o:{action_:{type_:\"- after o/d\",option:!1},nextState:\"2\"},q:{action_:{type_:\"- after o/d\",option:!1},nextState:\"2\"},\"d|qd|dq\":{action_:{type_:\"- after o/d\",option:!0},nextState:\"2\"},\"D|qD|p\":{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"}},amount2:{\"1|3\":{action_:\"a=\",nextState:\"a\"}},letters:{\"0|1|2|3|a|as|b|p|bp|o\":{action_:\"o=\",nextState:\"o\"},\"q|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"},\"d|D|qd|qD\":{action_:\"o after d\",nextState:\"o\"}},digits:{o:{action_:\"q=\",nextState:\"q\"},\"d|D\":{action_:\"q=\",nextState:\"dq\"},q:{action_:[\"output\",\"o=\"],nextState:\"o\"},a:{action_:\"o=\",nextState:\"o\"}},\"space A\":{\"b|p|bp\":{}},space:{a:{nextState:\"as\"},0:{action_:\"sb=false\"},\"1|2\":{action_:\"sb=true\"},\"r|rt|rd|rdt|rdq\":{action_:\"output\",nextState:\"0\"},\"*\":{action_:[\"output\",\"sb=true\"],nextState:\"1\"}},\"1st-level escape\":{\"1|2\":{action_:[\"output\",{type_:\"insert+p1\",option:\"1st-level escape\"}]},\"*\":{action_:[\"output\",{type_:\"insert+p1\",option:\"1st-level escape\"}],nextState:\"0\"}},\"[(...)]\":{\"r|rt\":{action_:\"rd=\",nextState:\"rd\"},\"rd|rdt\":{action_:\"rq=\",nextState:\"rdq\"}},\"...\":{\"o|d|D|dq|qd|qD\":{action_:[\"output\",{type_:\"bond\",option:\"...\"}],nextState:\"3\"},\"*\":{action_:[{type_:\"output\",option:1},{type_:\"insert\",option:\"ellipsis\"}],nextState:\"1\"}},\". |* \":{\"*\":{action_:[\"output\",{type_:\"insert\",option:\"addition compound\"}],nextState:\"1\"}},\"state of aggregation $\":{\"*\":{action_:[\"output\",\"state of aggregation\"],nextState:\"1\"}},\"{[(\":{\"a|as|o\":{action_:[\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"},\"0|1|2|3\":{action_:[\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"},\"*\":{action_:[\"output\",\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"}},\")]}\":{\"0|1|2|3|b|p|bp|o\":{action_:[\"o=\",\"parenthesisLevel--\"],nextState:\"o\"},\"a|as|d|D|q|qd|qD|dq\":{action_:[\"output\",\"o=\",\"parenthesisLevel--\"],nextState:\"o\"}},\", \":{\"*\":{action_:[\"output\",\"comma\"],nextState:\"0\"}},\"^_\":{\"*\":{}},\"^{(...)}|^($...$)\":{\"0|1|2|as\":{action_:\"b=\",nextState:\"b\"},p:{action_:\"b=\",nextState:\"bp\"},\"3|o\":{action_:\"d= kv\",nextState:\"D\"},q:{action_:\"d=\",nextState:\"qD\"},\"d|D|qd|qD|dq\":{action_:[\"output\",\"d=\"],nextState:\"D\"}},\"^a|^\\\\x{}{}|^\\\\x{}|^\\\\x|'\":{\"0|1|2|as\":{action_:\"b=\",nextState:\"b\"},p:{action_:\"b=\",nextState:\"bp\"},\"3|o\":{action_:\"d= kv\",nextState:\"d\"},q:{action_:\"d=\",nextState:\"qd\"},\"d|qd|D|qD\":{action_:\"d=\"},dq:{action_:[\"output\",\"d=\"],nextState:\"d\"}},\"_{(state of aggregation)}$\":{\"d|D|q|qd|qD|dq\":{action_:[\"output\",\"q=\"],nextState:\"q\"}},\"_{(...)}|_($...$)|_9|_\\\\x{}{}|_\\\\x{}|_\\\\x\":{\"0|1|2|as\":{action_:\"p=\",nextState:\"p\"},b:{action_:\"p=\",nextState:\"bp\"},\"3|o\":{action_:\"q=\",nextState:\"q\"},\"d|D\":{action_:\"q=\",nextState:\"dq\"},\"q|qd|qD|dq\":{action_:[\"output\",\"q=\"],nextState:\"q\"}},\"=<>\":{\"0|1|2|3|a|as|o|q|d|D|qd|qD|dq\":{action_:[{type_:\"output\",option:2},\"bond\"],nextState:\"3\"}},\"#\":{\"0|1|2|3|a|as|o\":{action_:[{type_:\"output\",option:2},{type_:\"bond\",option:\"#\"}],nextState:\"3\"}},\"{}\":{\"*\":{action_:{type_:\"output\",option:1},nextState:\"1\"}},\"{...}\":{\"0|1|2|3|a|as|b|p|bp\":{action_:\"o=\",nextState:\"o\"},\"o|d|D|q|qd|qD|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"}},\"$...$\":{a:{action_:\"a=\"},\"0|1|2|3|as|b|p|bp|o\":{action_:\"o=\",nextState:\"o\"},\"as|o\":{action_:\"o=\"},\"q|d|D|qd|qD|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"}},\"\\\\bond{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"bond\"],nextState:\"3\"}},\"\\\\frac{(...)}\":{\"*\":{action_:[{type_:\"output\",option:1},\"frac-output\"],nextState:\"3\"}},\"\\\\overset{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"overset-output\"],nextState:\"3\"}},\"\\\\underset{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"underset-output\"],nextState:\"3\"}},\"\\\\underbrace{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"underbrace-output\"],nextState:\"3\"}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:[{type_:\"output\",option:2},\"color-output\"],nextState:\"3\"}},\"\\\\color{(...)}0\":{\"*\":{action_:[{type_:\"output\",option:2},\"color0-output\"]}},\"\\\\ce{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"ce\"],nextState:\"3\"}},\"\\\\,\":{\"*\":{action_:[{type_:\"output\",option:1},\"copy\"],nextState:\"1\"}},\"\\\\x{}{}|\\\\x{}|\\\\x\":{\"0|1|2|3|a|as|b|p|bp|o|c0\":{action_:[\"o=\",\"output\"],nextState:\"3\"},\"*\":{action_:[\"output\",\"o=\",\"output\"],nextState:\"3\"}},others:{\"*\":{action_:[{type_:\"output\",option:1},\"copy\"],nextState:\"3\"}},else2:{a:{action_:\"a to o\",nextState:\"o\",revisit:!0},as:{action_:[\"output\",\"sb=true\"],nextState:\"1\",revisit:!0},\"r|rt|rd|rdt|rdq\":{action_:[\"output\"],nextState:\"0\",revisit:!0},\"*\":{action_:[\"output\",\"copy\"],nextState:\"3\"}}}),actions:{\"o after d\":function(t,e){var r;if((t.d||\"\").match(/^[0-9]+$/)){var a=t.d;t.d=void 0,r=this.output(t),t.b=a}else r=this.output(t);return n.actions[\"o=\"](t,e),r},\"d= kv\":function(t,e){t.d=e,t.dType=\"kv\"},\"charge or bond\":function(t,e){if(t.beginsWithBond){var r=[];return n.concatArray(r,this.output(t)),n.concatArray(r,n.actions.bond(t,e,\"-\")),r}t.d=e},\"- after o/d\":function(t,e,r){var a=n.patterns.match_(\"orbital\",t.o||\"\"),o=n.patterns.match_(\"one lowercase greek letter $\",t.o||\"\"),i=n.patterns.match_(\"one lowercase latin letter $\",t.o||\"\"),s=n.patterns.match_(\"$one lowercase latin letter$ $\",t.o||\"\"),l=\"-\"===e&&(a&&\"\"===a.remainder||o||i||s);!l||t.a||t.b||t.p||t.d||t.q||a||!i||(t.o=\"$\"+t.o+\"$\");var c=[];return l?(n.concatArray(c,this.output(t)),c.push({type_:\"hyphen\"})):(a=n.patterns.match_(\"digits\",t.d||\"\"),r&&a&&\"\"===a.remainder?(n.concatArray(c,n.actions[\"d=\"](t,e)),n.concatArray(c,this.output(t))):(n.concatArray(c,this.output(t)),n.concatArray(c,n.actions.bond(t,e,\"-\")))),c},\"a to o\":function(t){t.o=t.a,t.a=void 0},\"sb=true\":function(t){t.sb=!0},\"sb=false\":function(t){t.sb=!1},\"beginsWithBond=true\":function(t){t.beginsWithBond=!0},\"beginsWithBond=false\":function(t){t.beginsWithBond=!1},\"parenthesisLevel++\":function(t){t.parenthesisLevel++},\"parenthesisLevel--\":function(t){t.parenthesisLevel--},\"state of aggregation\":function(t,e){return{type_:\"state of aggregation\",p1:n.go(e,\"o\")}},comma:function(t,e){var r=e.replace(/\\s*$/,\"\");return r!==e&&0===t.parenthesisLevel?{type_:\"comma enumeration L\",p1:r}:{type_:\"comma enumeration M\",p1:r}},output:function(t,e,r){var a,o,i;t.r?(o=\"M\"===t.rdt?n.go(t.rd,\"tex-math\"):\"T\"===t.rdt?[{type_:\"text\",p1:t.rd||\"\"}]:n.go(t.rd),i=\"M\"===t.rqt?n.go(t.rq,\"tex-math\"):\"T\"===t.rqt?[{type_:\"text\",p1:t.rq||\"\"}]:n.go(t.rq),a={type_:\"arrow\",r:t.r,rd:o,rq:i}):(a=[],(t.a||t.b||t.p||t.o||t.q||t.d||r)&&(t.sb&&a.push({type_:\"entitySkip\"}),t.o||t.q||t.d||t.b||t.p||2===r?t.o||t.q||t.d||!t.b&&!t.p?t.o&&\"kv\"===t.dType&&n.patterns.match_(\"d-oxidation$\",t.d||\"\")?t.dType=\"oxidation\":t.o&&\"kv\"===t.dType&&!t.q&&(t.dType=void 0):(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):(t.o=t.a,t.a=void 0),a.push({type_:\"chemfive\",a:n.go(t.a,\"a\"),b:n.go(t.b,\"bd\"),p:n.go(t.p,\"pq\"),o:n.go(t.o,\"o\"),q:n.go(t.q,\"pq\"),d:n.go(t.d,\"oxidation\"===t.dType?\"oxidation\":\"bd\"),dType:t.dType})));for(var s in t)\"parenthesisLevel\"!==s&&\"beginsWithBond\"!==s&&delete t[s];return a},\"oxidation-output\":function(t,e){var r=[\"{\"];return n.concatArray(r,n.go(e,\"oxidation\")),r.push(\"}\"),r},\"frac-output\":function(t,e){return{type_:\"frac-ce\",p1:n.go(e[0]),p2:n.go(e[1])}},\"overset-output\":function(t,e){return{type_:\"overset\",p1:n.go(e[0]),p2:n.go(e[1])}},\"underset-output\":function(t,e){return{type_:\"underset\",p1:n.go(e[0]),p2:n.go(e[1])}},\"underbrace-output\":function(t,e){return{type_:\"underbrace\",p1:n.go(e[0]),p2:n.go(e[1])}},\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:n.go(e[1])}},\"r=\":function(t,e){t.r=e},\"rdt=\":function(t,e){t.rdt=e},\"rd=\":function(t,e){t.rd=e},\"rqt=\":function(t,e){t.rqt=e},\"rq=\":function(t,e){t.rq=e},operator:function(t,e,r){return{type_:\"operator\",kind_:r||e}}}},a:{transitions:n.createTransitions({empty:{\"*\":{}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"1\",revisit:!0}},\"$(...)$\":{\"*\":{action_:\"tex-math tight\",nextState:\"1\"}},\",\":{\"*\":{action_:{type_:\"insert\",option:\"commaDecimal\"}}},else2:{\"*\":{action_:\"copy\"}}}),actions:{}},o:{transitions:n.createTransitions({empty:{\"*\":{}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"1\",revisit:!0}},letters:{\"*\":{action_:\"rm\"}},\"\\\\ca\":{\"*\":{action_:{type_:\"insert\",option:\"circa\"}}},\"\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"{text}\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{}},text:{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},\"{...}\":{\"*\":{action_:\"text=\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"\\\\greek\":{\"*\":{action_:[\"output\",\"rm\"]}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:[\"output\",\"copy\"]}},else:{\"*\":{action_:\"text=\"}}}),actions:{output:function(t){if(t.text_){var e={type_:\"text\",p1:t.text_};for(var r in t)delete t[r];return e}}}},pq:{transitions:n.createTransitions({empty:{\"*\":{}},\"state of aggregation $\":{\"*\":{action_:\"state of aggregation\"}},i$:{0:{nextState:\"!f\",revisit:!0}},\"(KV letters),\":{0:{action_:\"rm\",nextState:\"0\"}},formula$:{0:{nextState:\"f\",revisit:!0}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"!f\",revisit:!0}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"text\"}},\"a-z\":{f:{action_:\"tex-math\"}},letters:{\"*\":{action_:\"rm\"}},\"-9.,9\":{\"*\":{action_:\"9,9\"}},\",\":{\"*\":{action_:{type_:\"insert+p1\",option:\"comma enumeration S\"}}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:\"color-output\"}},\"\\\\color{(...)}0\":{\"*\":{action_:\"color0-output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:\"ce\"}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{\"state of aggregation\":function(t,e){return{type_:\"state of aggregation subscript\",p1:n.go(e,\"o\")}},\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:n.go(e[1],\"pq\")}}}},bd:{transitions:n.createTransitions({empty:{\"*\":{}},x$:{0:{nextState:\"!f\",revisit:!0}},formula$:{0:{nextState:\"f\",revisit:!0}},else:{0:{nextState:\"!f\",revisit:!0}},\"-9.,9 no missing 0\":{\"*\":{action_:\"9,9\"}},\".\":{\"*\":{action_:{type_:\"insert\",option:\"electron dot\"}}},\"a-z\":{f:{action_:\"tex-math\"}},x:{\"*\":{action_:{type_:\"insert\",option:\"KV x\"}}},letters:{\"*\":{action_:\"rm\"}},\"'\":{\"*\":{action_:{type_:\"insert\",option:\"prime\"}}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"text\"}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:\"color-output\"}},\"\\\\color{(...)}0\":{\"*\":{action_:\"color0-output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:\"ce\"}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:n.go(e[1],\"bd\")}}}},oxidation:{transitions:n.createTransitions({empty:{\"*\":{}},\"roman numeral\":{\"*\":{action_:\"roman-numeral\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},else:{\"*\":{action_:\"copy\"}}}),actions:{\"roman-numeral\":function(t,e){return{type_:\"roman numeral\",p1:e||\"\"}}}},\"tex-math\":{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:[\"output\",\"ce\"]}},\"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"o=\"}},else:{\"*\":{action_:\"o=\"}}}),actions:{output:function(t){if(t.o){var e={type_:\"tex-math\",p1:t.o};for(var r in t)delete t[r];return e}}}},\"tex-math tight\":{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:[\"output\",\"ce\"]}},\"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"o=\"}},\"-|+\":{\"*\":{action_:\"tight operator\"}},else:{\"*\":{action_:\"o=\"}}}),actions:{\"tight operator\":function(t,e){t.o=(t.o||\"\")+\"{\"+e+\"}\"},output:function(t){if(t.o){var e={type_:\"tex-math\",p1:t.o};for(var r in t)delete t[r];return e}}}},\"9,9\":{transitions:n.createTransitions({empty:{\"*\":{}},\",\":{\"*\":{action_:\"comma\"}},else:{\"*\":{action_:\"copy\"}}}),actions:{comma:function(){return{type_:\"commaDecimal\"}}}},pu:{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},space$:{\"*\":{action_:[\"output\",\"space\"]}},\"{[(|)]}\":{\"0|a\":{action_:\"copy\"}},\"(-)(9)^(-9)\":{0:{action_:\"number^\",nextState:\"a\"}},\"(-)(9.,9)(e)(99)\":{0:{action_:\"enumber\",nextState:\"a\"}},space:{\"0|a\":{}},\"pm-operator\":{\"0|a\":{action_:{type_:\"operator\",option:\"\\\\pm\"},nextState:\"0\"}},operator:{\"0|a\":{action_:\"copy\",nextState:\"0\"}},\"//\":{d:{action_:\"o=\",nextState:\"/\"}},\"/\":{d:{action_:\"o=\",nextState:\"/\"}},\"{...}|else\":{\"0|d\":{action_:\"d=\",nextState:\"d\"},a:{action_:[\"space\",\"d=\"],nextState:\"d\"},\"/|q\":{action_:\"q=\",nextState:\"q\"}}}),actions:{enumber:function(t,e){var r=[];return\"+-\"===e[0]||\"+/-\"===e[0]?r.push(\"\\\\pm \"):e[0]&&r.push(e[0]),e[1]&&(n.concatArray(r,n.go(e[1],\"pu-9,9\")),e[2]&&(e[2].match(/[,.]/)?n.concatArray(r,n.go(e[2],\"pu-9,9\")):r.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),\"e\"===e[3]||\"*\"===e[3].substr(0,1)?r.push({type_:\"cdot\"}):r.push({type_:\"times\"}))),e[3]&&r.push(\"10^{\"+e[5]+\"}\"),r},\"number^\":function(t,e){var r=[];return\"+-\"===e[0]||\"+/-\"===e[0]?r.push(\"\\\\pm \"):e[0]&&r.push(e[0]),n.concatArray(r,n.go(e[1],\"pu-9,9\")),r.push(\"^{\"+e[2]+\"}\"),r},operator:function(t,e,r){return{type_:\"operator\",kind_:r||e}},space:function(){return{type_:\"pu-space-1\"}},output:function(t){var e,r=n.patterns.match_(\"{(...)}\",t.d||\"\");r&&\"\"===r.remainder&&(t.d=r.match_);var a=n.patterns.match_(\"{(...)}\",t.q||\"\");if(a&&\"\"===a.remainder&&(t.q=a.match_),t.d&&(t.d=t.d.replace(/\\u00B0C|\\^oC|\\^{o}C/g,\"{}^{\\\\circ}C\"),t.d=t.d.replace(/\\u00B0F|\\^oF|\\^{o}F/g,\"{}^{\\\\circ}F\")),t.q){t.q=t.q.replace(/\\u00B0C|\\^oC|\\^{o}C/g,\"{}^{\\\\circ}C\"),t.q=t.q.replace(/\\u00B0F|\\^oF|\\^{o}F/g,\"{}^{\\\\circ}F\");var o={d:n.go(t.d,\"pu\"),q:n.go(t.q,\"pu\")};\"//\"===t.o?e={type_:\"pu-frac\",p1:o.d,p2:o.q}:(e=o.d,o.d.length>1||o.q.length>1?e.push({type_:\" / \"}):e.push({type_:\"/\"}),n.concatArray(e,o.q))}else e=n.go(t.d,\"pu-2\");for(var i in t)delete t[i];return e}}},\"pu-2\":{transitions:n.createTransitions({empty:{\"*\":{action_:\"output\"}},\"*\":{\"*\":{action_:[\"output\",\"cdot\"],nextState:\"0\"}},\"\\\\x\":{\"*\":{action_:\"rm=\"}},space:{\"*\":{action_:[\"output\",\"space\"],nextState:\"0\"}},\"^{(...)}|^(-1)\":{1:{action_:\"^(-1)\"}},\"-9.,9\":{0:{action_:\"rm=\",nextState:\"0\"},1:{action_:\"^(-1)\",nextState:\"0\"}},\"{...}|else\":{\"*\":{action_:\"rm=\",nextState:\"1\"}}}),actions:{cdot:function(){return{type_:\"tight cdot\"}},\"^(-1)\":function(t,e){t.rm+=\"^{\"+e+\"}\"},space:function(){return{type_:\"pu-space-2\"}},output:function(t){var e=[];if(t.rm){var r=n.patterns.match_(\"{(...)}\",t.rm||\"\");e=r&&\"\"===r.remainder?n.go(r.match_,\"pu\"):{type_:\"rm\",p1:t.rm}}for(var a in t)delete t[a];return e}}},\"pu-9,9\":{transitions:n.createTransitions({empty:{0:{action_:\"output-0\"},o:{action_:\"output-o\"}},\",\":{0:{action_:[\"output-0\",\"comma\"],nextState:\"o\"}},\".\":{0:{action_:[\"output-0\",\"copy\"],nextState:\"o\"}},else:{\"*\":{action_:\"text=\"}}}),actions:{comma:function(){return{type_:\"commaDecimal\"}},\"output-0\":function(t){var e=[];if(t.text_=t.text_||\"\",t.text_.length>4){var r=t.text_.length%3;0===r&&(r=3);for(var n=t.text_.length-3;n>0;n-=3)e.push(t.text_.substr(n,3)),e.push({type_:\"1000 separator\"});e.push(t.text_.substr(0,r)),e.reverse()}else e.push(t.text_);for(var a in t)delete t[a];return e},\"output-o\":function(t){var e=[];if(t.text_=t.text_||\"\",t.text_.length>4){for(var r=t.text_.length-3,n=0;n<r;n+=3)e.push(t.text_.substr(n,3)),e.push({type_:\"1000 separator\"});e.push(t.text_.substr(n))}else e.push(t.text_);for(var a in t)delete t[a];return e}}}};var a={go:function(t,e){if(!t)return\"\";for(var r=\"\",n=!1,o=0;o<t.length;o++){var i=t[o];\"string\"==typeof i?r+=i:(r+=a._go2(i),\"1st-level escape\"===i.type_&&(n=!0))}return e||n||!r||(r=\"{\"+r+\"}\"),r},_goInner:function(t){return t?a.go(t,!0):t},_go2:function(t){var e;switch(t.type_){case\"chemfive\":e=\"\";var r={a:a._goInner(t.a),b:a._goInner(t.b),p:a._goInner(t.p),o:a._goInner(t.o),q:a._goInner(t.q),d:a._goInner(t.d)};r.a&&(r.a.match(/^[+\\-]/)&&(r.a=\"{\"+r.a+\"}\"),e+=r.a+\"\\\\,\"),(r.b||r.p)&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\\\\hphantom{\"+(r.b||\"\")+\"}}_{\\\\hphantom{\"+(r.p||\"\")+\"}}\",e+=\"{\\\\vphantom{X}}\",e+=\"^{\\\\smash[t]{\\\\vphantom{2}}\\\\llap{\"+(r.b||\"\")+\"}}\",e+=\"_{\\\\vphantom{2}\\\\llap{\\\\smash[t]{\"+(r.p||\"\")+\"}}}\"),r.o&&(r.o.match(/^[+\\-]/)&&(r.o=\"{\"+r.o+\"}\"),e+=r.o),\"kv\"===t.dType?((r.d||r.q)&&(e+=\"{\\\\vphantom{X}}\"),r.d&&(e+=\"^{\"+r.d+\"}\"),r.q&&(e+=\"_{\\\\smash[t]{\"+r.q+\"}}\")):\"oxidation\"===t.dType?(r.d&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\"+r.d+\"}\"),r.q&&(e+=\"{\\\\vphantom{X}}\",e+=\"_{\\\\smash[t]{\"+r.q+\"}}\")):(r.q&&(e+=\"{\\\\vphantom{X}}\",e+=\"_{\\\\smash[t]{\"+r.q+\"}}\"),r.d&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\"+r.d+\"}\"));break;case\"rm\":e=\"\\\\mathrm{\"+t.p1+\"}\";break;case\"text\":t.p1.match(/[\\^_]/)?(t.p1=t.p1.replace(\" \",\"~\").replace(\"-\",\"\\\\text{-}\"),e=\"\\\\mathrm{\"+t.p1+\"}\"):e=\"\\\\text{\"+t.p1+\"}\";break;case\"roman numeral\":e=\"\\\\mathrm{\"+t.p1+\"}\";break;case\"state of aggregation\":e=\"\\\\mskip2mu \"+a._goInner(t.p1);break;case\"state of aggregation subscript\":e=\"\\\\mskip1mu \"+a._goInner(t.p1);break;case\"bond\":if(!(e=a._getBond(t.kind_)))throw[\"MhchemErrorBond\",\"mhchem Error. Unknown bond type (\"+t.kind_+\")\"];break;case\"frac\":var n=\"\\\\frac{\"+t.p1+\"}{\"+t.p2+\"}\";e=\"\\\\mathchoice{\\\\textstyle\"+n+\"}{\"+n+\"}{\"+n+\"}{\"+n+\"}\";break;case\"pu-frac\":var o=\"\\\\frac{\"+a._goInner(t.p1)+\"}{\"+a._goInner(t.p2)+\"}\";e=\"\\\\mathchoice{\\\\textstyle\"+o+\"}{\"+o+\"}{\"+o+\"}{\"+o+\"}\";break;case\"tex-math\":e=t.p1+\" \";break;case\"frac-ce\":e=\"\\\\frac{\"+a._goInner(t.p1)+\"}{\"+a._goInner(t.p2)+\"}\";break;case\"overset\":e=\"\\\\overset{\"+a._goInner(t.p1)+\"}{\"+a._goInner(t.p2)+\"}\";break;case\"underset\":e=\"\\\\underset{\"+a._goInner(t.p1)+\"}{\"+a._goInner(t.p2)+\"}\";break;case\"underbrace\":e=\"\\\\underbrace{\"+a._goInner(t.p1)+\"}_{\"+a._goInner(t.p2)+\"}\";break;case\"color\":e=\"{\\\\color{\"+t.color1+\"}{\"+a._goInner(t.color2)+\"}}\";break;case\"color0\":e=\"\\\\color{\"+t.color+\"}\";break;case\"arrow\":var i={rd:a._goInner(t.rd),rq:a._goInner(t.rq)},s=a._getArrow(t.r);i.rd||i.rq?\"<=>\"===t.r||\"<=>>\"===t.r||\"<<=>\"===t.r||\"<--\\x3e\"===t.r?(s=\"\\\\long\"+s,i.rd&&(s=\"\\\\overset{\"+i.rd+\"}{\"+s+\"}\"),i.rq&&(s=\"\\\\underset{\\\\lower7mu{\"+i.rq+\"}}{\"+s+\"}\"),s=\" {}\\\\mathrel{\"+s+\"}{} \"):(i.rq&&(s+=\"[{\"+i.rq+\"}]\"),s=\" {}\\\\mathrel{\\\\x\"+(s+=\"{\"+i.rd+\"}\")+\"}{} \"):s=\" {}\\\\mathrel{\\\\long\"+s+\"}{} \",e=s;break;case\"operator\":e=a._getOperator(t.kind_);break;case\"1st-level escape\":e=t.p1+\" \";break;case\"space\":e=\" \";break;case\"entitySkip\":case\"pu-space-1\":e=\"~\";break;case\"pu-space-2\":e=\"\\\\mkern3mu \";break;case\"1000 separator\":e=\"\\\\mkern2mu \";break;case\"commaDecimal\":e=\"{,}\";break;case\"comma enumeration L\":e=\"{\"+t.p1+\"}\\\\mkern6mu \";break;case\"comma enumeration M\":e=\"{\"+t.p1+\"}\\\\mkern3mu \";break;case\"comma enumeration S\":e=\"{\"+t.p1+\"}\\\\mkern1mu \";break;case\"hyphen\":e=\"\\\\text{-}\";break;case\"addition compound\":e=\"\\\\,{\\\\cdot}\\\\,\";break;case\"electron dot\":e=\"\\\\mkern1mu \\\\bullet\\\\mkern1mu \";break;case\"KV x\":e=\"{\\\\times}\";break;case\"prime\":e=\"\\\\prime \";break;case\"cdot\":e=\"\\\\cdot \";break;case\"tight cdot\":e=\"\\\\mkern1mu{\\\\cdot}\\\\mkern1mu \";break;case\"times\":e=\"\\\\times \";break;case\"circa\":e=\"{\\\\sim}\";break;case\"^\":e=\"uparrow\";break;case\"v\":e=\"downarrow\";break;case\"ellipsis\":e=\"\\\\ldots \";break;case\"/\":e=\"/\";break;case\" / \":e=\"\\\\,/\\\\,\";break;default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}return e},_getArrow:function(t){switch(t){case\"->\":case\"\\u2192\":case\"\\u27f6\":return\"rightarrow\";case\"<-\":return\"leftarrow\";case\"<->\":return\"leftrightarrow\";case\"<--\\x3e\":return\"leftrightarrows\";case\"<=>\":case\"\\u21cc\":return\"rightleftharpoons\";case\"<=>>\":return\"Rightleftharpoons\";case\"<<=>\":return\"Leftrightharpoons\";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}},_getBond:function(t){switch(t){case\"-\":case\"1\":return\"{-}\";case\"=\":case\"2\":return\"{=}\";case\"#\":case\"3\":return\"{\\\\equiv}\";case\"~\":return\"{\\\\tripledash}\";case\"~-\":return\"{\\\\rlap{\\\\lower.1em{-}}\\\\raise.1em{\\\\tripledash}}\";case\"~=\":case\"~--\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{\\\\tripledash}}-}\";case\"-~-\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{-}}\\\\tripledash}\";case\"...\":return\"{{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";case\"....\":return\"{{\\\\cdot}{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";case\"->\":return\"{\\\\rightarrow}\";case\"<-\":return\"{\\\\leftarrow}\";case\"<\":return\"{<}\";case\">\":return\"{>}\";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}},_getOperator:function(t){switch(t){case\"+\":return\" {}+{} \";case\"-\":return\" {}-{} \";case\"=\":return\" {}={} \";case\"<\":return\" {}<{} \";case\">\":return\" {}>{} \";case\"<<\":return\" {}\\\\ll{} \";case\">>\":return\" {}\\\\gg{} \";case\"\\\\pm\":return\" {}\\\\pm{} \";case\"\\\\approx\":case\"$\\\\approx$\":return\" {}\\\\approx{} \";case\"v\":case\"(v)\":return\" \\\\downarrow{} \";case\"^\":case\"(^)\":return\" \\\\uparrow{} \";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}}};function o(t){}function i(t){}e.mhchemParser=n,e.texify=a,e.assertNever=o,e.assertString=i},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),a=r(64),o=r(7),i=r(12),s=r(5);new n.CommandMap(\"Physics-automatic-bracing-macros\",{quantity:\"Quantity\",qty:\"Quantity\",pqty:[\"Quantity\",\"(\",\")\",!0],bqty:[\"Quantity\",\"[\",\"]\",!0],vqty:[\"Quantity\",\"|\",\"|\",!0],Bqty:[\"Quantity\",\"{\",\"}\",!0],absolutevalue:[\"Quantity\",\"|\",\"|\",!0],abs:[\"Quantity\",\"|\",\"|\",!0],norm:[\"Quantity\",\"\\\\|\",\"\\\\|\",!0],evaluated:\"Eval\",eval:\"Eval\",order:[\"Quantity\",\"(\",\")\",!0,\"O\",o.TexConstant.Variant.CALLIGRAPHIC],commutator:\"Commutator\",comm:\"Commutator\",anticommutator:[\"Commutator\",\"\\\\{\",\"\\\\}\"],acomm:[\"Commutator\",\"\\\\{\",\"\\\\}\"],poissonbracket:[\"Commutator\",\"\\\\{\",\"\\\\}\"],pb:[\"Commutator\",\"\\\\{\",\"\\\\}\"]},a.default),new n.CharacterMap(\"Physics-vector-chars\",i.default.mathchar0mi,{dotproduct:[\"\\u22c5\",{mathvariant:o.TexConstant.Variant.BOLD}],vdot:[\"\\u22c5\",{mathvariant:o.TexConstant.Variant.BOLD}],crossproduct:\"\\xd7\",cross:\"\\xd7\",cp:\"\\xd7\",gradientnabla:[\"\\u2207\",{mathvariant:o.TexConstant.Variant.BOLD}],real:[\"\\u211c\",{mathvariant:o.TexConstant.Variant.NORMAL}],imaginary:[\"\\u2111\",{mathvariant:o.TexConstant.Variant.NORMAL}]}),new n.CommandMap(\"Physics-vector-macros\",{vectorbold:\"VectorBold\",vb:\"VectorBold\",vectorarrow:[\"StarMacro\",1,\"\\\\vec{\\\\vb\",\"{#1}}\"],va:[\"StarMacro\",1,\"\\\\vec{\\\\vb\",\"{#1}}\"],vectorunit:[\"StarMacro\",1,\"\\\\hat{\\\\vb\",\"{#1}}\"],vu:[\"StarMacro\",1,\"\\\\hat{\\\\vb\",\"{#1}}\"],gradient:[\"OperatorApplication\",\"\\\\gradientnabla\",\"(\",\"[\"],grad:[\"OperatorApplication\",\"\\\\gradientnabla\",\"(\",\"[\"],divergence:[\"VectorOperator\",\"\\\\gradientnabla\\\\vdot\",\"(\",\"[\"],div:[\"VectorOperator\",\"\\\\gradientnabla\\\\vdot\",\"(\",\"[\"],curl:[\"VectorOperator\",\"\\\\gradientnabla\\\\crossproduct\",\"(\",\"[\"],laplacian:[\"OperatorApplication\",\"\\\\nabla^2\",\"(\",\"[\"]},a.default),new n.CommandMap(\"Physics-expressions-macros\",{sin:\"Expression\",sinh:\"Expression\",arcsin:\"Expression\",asin:\"Expression\",cos:\"Expression\",cosh:\"Expression\",arccos:\"Expression\",acos:\"Expression\",tan:\"Expression\",tanh:\"Expression\",arctan:\"Expression\",atan:\"Expression\",csc:\"Expression\",csch:\"Expression\",arccsc:\"Expression\",acsc:\"Expression\",sec:\"Expression\",sech:\"Expression\",arcsec:\"Expression\",asec:\"Expression\",cot:\"Expression\",coth:\"Expression\",arccot:\"Expression\",acot:\"Expression\",exp:[\"Expression\",!1],log:\"Expression\",ln:\"Expression\",det:[\"Expression\",!1],Pr:[\"Expression\",!1],tr:[\"Expression\",!1],trace:[\"Expression\",!1,\"tr\"],Tr:[\"Expression\",!1],Trace:[\"Expression\",!1,\"Tr\"],rank:\"NamedFn\",erf:[\"Expression\",!1],Res:[\"OperatorApplication\",\"{\\\\rm Res}\",\"(\",\"[\",\"{\"],principalvalue:[\"OperatorApplication\",\"{\\\\cal P}\"],pv:[\"OperatorApplication\",\"{\\\\cal P}\"],PV:[\"OperatorApplication\",\"{\\\\rm P.V.}\"],Re:[\"OperatorApplication\",\"{\\\\rm Re}\",\"{\"],Im:[\"OperatorApplication\",\"{\\\\rm Im}\",\"{\"],sine:[\"NamedFn\",\"sin\"],hypsine:[\"NamedFn\",\"sinh\"],arcsine:[\"NamedFn\",\"arcsin\"],asine:[\"NamedFn\",\"asin\"],cosine:[\"NamedFn\",\"cos\"],hypcosine:[\"NamedFn\",\"cosh\"],arccosine:[\"NamedFn\",\"arccos\"],acosine:[\"NamedFn\",\"acos\"],tangent:[\"NamedFn\",\"tan\"],hyptangent:[\"NamedFn\",\"tanh\"],arctangent:[\"NamedFn\",\"arctan\"],atangent:[\"NamedFn\",\"atan\"],cosecant:[\"NamedFn\",\"csc\"],hypcosecant:[\"NamedFn\",\"csch\"],arccosecant:[\"NamedFn\",\"arccsc\"],acosecant:[\"NamedFn\",\"acsc\"],secant:[\"NamedFn\",\"sec\"],hypsecant:[\"NamedFn\",\"sech\"],arcsecant:[\"NamedFn\",\"arcsec\"],asecant:[\"NamedFn\",\"asec\"],cotangent:[\"NamedFn\",\"cot\"],hypcotangent:[\"NamedFn\",\"coth\"],arccotangent:[\"NamedFn\",\"arccot\"],acotangent:[\"NamedFn\",\"acot\"],exponential:[\"NamedFn\",\"exp\"],logarithm:[\"NamedFn\",\"log\"],naturallogarithm:[\"NamedFn\",\"ln\"],determinant:[\"NamedFn\",\"det\"],Probability:[\"NamedFn\",\"Pr\"]},a.default),new n.CommandMap(\"Physics-quick-quad-macros\",{qqtext:\"Qqtext\",qq:\"Qqtext\",qcomma:[\"Macro\",\"\\\\qqtext*{,}\"],qc:[\"Macro\",\"\\\\qqtext*{,}\"],qcc:[\"Qqtext\",\"c.c.\"],qif:[\"Qqtext\",\"if\"],qthen:[\"Qqtext\",\"then\"],qelse:[\"Qqtext\",\"else\"],qotherwise:[\"Qqtext\",\"otherwise\"],qunless:[\"Qqtext\",\"unless\"],qgiven:[\"Qqtext\",\"given\"],qusing:[\"Qqtext\",\"using\"],qassume:[\"Qqtext\",\"assume\"],\"qsince,\":[\"Qqtext\",\"since,\"],qlet:[\"Qqtext\",\"let\"],qfor:[\"Qqtext\",\"for\"],qall:[\"Qqtext\",\"all\"],qeven:[\"Qqtext\",\"even\"],qodd:[\"Qqtext\",\"odd\"],qinteger:[\"Qqtext\",\"integer\"],qand:[\"Qqtext\",\"and\"],qor:[\"Qqtext\",\"or\"],qas:[\"Qqtext\",\"as\"],qin:[\"Qqtext\",\"in\"]},a.default),new n.CommandMap(\"Physics-derivative-macros\",{flatfrac:[\"Macro\",\"\\\\left.#1\\\\middle/#2\\\\right.\",2],differential:[\"Differential\",\"{\\\\rm d}\"],dd:[\"Differential\",\"{\\\\rm d}\"],variation:[\"Differential\",\"\\\\delta\"],var:[\"Differential\",\"\\\\delta\"],derivative:[\"Derivative\",2,\"{\\\\rm d}\"],dv:[\"Derivative\",2,\"{\\\\rm d}\"],partialderivative:[\"Derivative\",3,\"\\\\partial\"],pderivative:[\"Derivative\",3,\"\\\\partial\"],pdv:[\"Derivative\",3,\"\\\\partial\"],functionalderivative:[\"Derivative\",2,\"\\\\delta\"],fderivative:[\"Derivative\",2,\"\\\\delta\"],fdv:[\"Derivative\",2,\"\\\\delta\"]},a.default),new n.CommandMap(\"Physics-bra-ket-macros\",{bra:\"Bra\",ket:\"Ket\",innerproduct:\"BraKet\",braket:\"BraKet\",outerproduct:\"KetBra\",dyad:\"KetBra\",ketbra:\"KetBra\",op:\"KetBra\",expectationvalue:\"Expectation\",expval:\"Expectation\",ev:\"Expectation\",matrixelement:\"MatrixElement\",matrixel:\"MatrixElement\",mel:\"MatrixElement\"},a.default),new n.CommandMap(\"Physics-matrix-macros\",{matrixquantity:\"MatrixQuantity\",mqty:\"MatrixQuantity\",pmqty:[\"Macro\",\"\\\\mqty(#1)\",1],Pmqty:[\"Macro\",\"\\\\mqty*(#1)\",1],bmqty:[\"Macro\",\"\\\\mqty[#1]\",1],vmqty:[\"Macro\",\"\\\\mqty|#1|\",1],smallmatrixquantity:[\"MatrixQuantity\",!0],smqty:[\"MatrixQuantity\",!0],spmqty:[\"Macro\",\"\\\\smqty(#1)\",1],sPmqty:[\"Macro\",\"\\\\smqty*(#1)\",1],sbmqty:[\"Macro\",\"\\\\smqty[#1]\",1],svmqty:[\"Macro\",\"\\\\smqty|#1|\",1],matrixdeterminant:[\"Macro\",\"\\\\vmqty{#1}\",1],mdet:[\"Macro\",\"\\\\vmqty{#1}\",1],smdet:[\"Macro\",\"\\\\svmqty{#1}\",1],identitymatrix:\"IdentityMatrix\",imat:\"IdentityMatrix\",xmatrix:\"XMatrix\",xmat:\"XMatrix\",zeromatrix:[\"Macro\",\"\\\\xmat{0}{#1}{#2}\",2],zmat:[\"Macro\",\"\\\\xmat{0}{#1}{#2}\",2],paulimatrix:\"PauliMatrix\",pmat:\"PauliMatrix\",diagonalmatrix:\"DiagonalMatrix\",dmat:\"DiagonalMatrix\",antidiagonalmatrix:[\"DiagonalMatrix\",!0],admat:[\"DiagonalMatrix\",!0]},a.default),new n.EnvironmentMap(\"Physics-aux-envs\",i.default.environment,{smallmatrix:[\"Array\",null,null,null,\"c\",\"0.333em\",\".2em\",\"S\",1]},a.default),new n.MacroMap(\"Physics-characters\",{\"|\":[\"AutoClose\",s.TEXCLASS.ORD],\")\":\"AutoClose\",\"]\":\"AutoClose\"},a.default)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.handleRetriesFor=MathJax._.util.Retries.handleRetriesFor,e.retryAfter=MathJax._.util.Retries.retryAfter},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(1),a=r(7),o=r(28);new n.MacroMap(\"text-special\",{$:\"Math\",\"%\":\"Comment\",\"^\":\"MathModeOnly\",_:\"MathModeOnly\",\"&\":\"Misplaced\",\"#\":\"Misplaced\",\"~\":\"Tilde\",\" \":\"Space\",\"\\t\":\"Space\",\"\\r\":\"Space\",\"\\n\":\"Space\",\"\\xa0\":\"Tilde\",\"{\":\"OpenBrace\",\"}\":\"CloseBrace\",\"`\":\"OpenQuote\",\"'\":\"CloseQuote\"},o.TextMacrosMethods),new n.CommandMap(\"text-macros\",{\"(\":\"Math\",$:\"SelfQuote\",_:\"SelfQuote\",\"%\":\"SelfQuote\",\"{\":\"SelfQuote\",\"}\":\"SelfQuote\",\" \":\"SelfQuote\",\"&\":\"SelfQuote\",\"#\":\"SelfQuote\",\"\\\\\":\"SelfQuote\",\"'\":[\"Accent\",\"\\xb4\"],\"\\u2019\":[\"Accent\",\"\\xb4\"],\"`\":[\"Accent\",\"`\"],\"\\u2018\":[\"Accent\",\"`\"],\"^\":[\"Accent\",\"^\"],'\"':[\"Accent\",\"\\xa8\"],\"~\":[\"Accent\",\"~\"],\"=\":[\"Accent\",\"\\xaf\"],\".\":[\"Accent\",\"\\u02d9\"],u:[\"Accent\",\"\\u02d8\"],v:[\"Accent\",\"\\u02c7\"],emph:\"Emph\",rm:[\"SetFont\",a.TexConstant.Variant.NORMAL],mit:[\"SetFont\",a.TexConstant.Variant.ITALIC],oldstyle:[\"SetFont\",a.TexConstant.Variant.OLDSTYLE],cal:[\"SetFont\",a.TexConstant.Variant.CALLIGRAPHIC],it:[\"SetFont\",\"-tex-mathit\"],bf:[\"SetFont\",a.TexConstant.Variant.BOLD],bbFont:[\"SetFont\",a.TexConstant.Variant.DOUBLESTRUCK],scr:[\"SetFont\",a.TexConstant.Variant.SCRIPT],frak:[\"SetFont\",a.TexConstant.Variant.FRAKTUR],sf:[\"SetFont\",a.TexConstant.Variant.SANSSERIF],tt:[\"SetFont\",a.TexConstant.Variant.MONOSPACE],tiny:[\"SetSize\",.5],Tiny:[\"SetSize\",.6],scriptsize:[\"SetSize\",.7],small:[\"SetSize\",.85],normalsize:[\"SetSize\",1],large:[\"SetSize\",1.2],Large:[\"SetSize\",1.44],LARGE:[\"SetSize\",1.73],huge:[\"SetSize\",2.07],Huge:[\"SetSize\",2.49],mathcal:\"MathModeOnly\",mathscr:\"MathModeOnly\",mathrm:\"MathModeOnly\",mathbf:\"MathModeOnly\",mathbb:\"MathModeOnly\",mathit:\"MathModeOnly\",mathfrak:\"MathModeOnly\",mathsf:\"MathModeOnly\",mathtt:\"MathModeOnly\",Bbb:[\"Macro\",\"{\\\\bbFont #1}\",1],textrm:[\"Macro\",\"{\\\\rm #1}\",1],textit:[\"Macro\",\"{\\\\it #1}\",1],textbf:[\"Macro\",\"{\\\\bf #1}\",1],textsf:[\"Macro\",\"{\\\\sf #1}\",1],texttt:[\"Macro\",\"{\\\\tt #1}\",1],dagger:[\"Insert\",\"\\u2020\"],ddagger:[\"Insert\",\"\\u2021\"],S:[\"Insert\",\"\\xa7\"],\",\":[\"Spacer\",a.TexConstant.Length.THINMATHSPACE],\":\":[\"Spacer\",a.TexConstant.Length.MEDIUMMATHSPACE],\">\":[\"Spacer\",a.TexConstant.Length.MEDIUMMATHSPACE],\";\":[\"Spacer\",a.TexConstant.Length.THICKMATHSPACE],\"!\":[\"Spacer\",a.TexConstant.Length.NEGATIVETHINMATHSPACE],enspace:[\"Spacer\",\".5em\"],quad:[\"Spacer\",\"1em\"],qquad:[\"Spacer\",\"2em\"],thinspace:[\"Spacer\",a.TexConstant.Length.THINMATHSPACE],negthinspace:[\"Spacer\",a.TexConstant.Length.NEGATIVETHINMATHSPACE],hskip:\"Hskip\",hspace:\"Hskip\",kern:\"Hskip\",mskip:\"Hskip\",mspace:\"Hskip\",mkern:\"Hskip\",rule:\"rule\",Rule:[\"Rule\"],Space:[\"Rule\",\"blank\"],color:\"CheckAutoload\",textcolor:\"CheckAutoload\",colorbox:\"CheckAutoload\",fcolorbox:\"CheckAutoload\",href:\"CheckAutoload\",style:\"CheckAutoload\",class:\"CheckAutoload\",cssId:\"CheckAutoload\",unicode:\"CheckAutoload\",ref:[\"HandleRef\",!1],eqref:[\"HandleRef\",!0]},o.TextMacrosMethods)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.mathjax=MathJax._.mathjax.mathjax},function(t,e,r){\"use strict\";r.r(e);var n=r(22),a=r(30),o=r(31),i=r(0),s=r(33),l=r(32),c=r(16),u=r(18),p=r(3),f=r(12),d=r(24),h=r(4),m=r(23),g=r(11),v=r(34),y=r(14),b=r(1),x=r(9),A=r(7),M=r(2),_=r(6),C=r(35),P=r(38),w=r(39),S=r(36),T=r(37),k=r(17),O=r(75),E=r(19),I=r(15),N=r(8),q=r(40),L=r(41),F=r(42),B=r(43),R=r(44),G=r(45),j=r(46),D=r(47),$=r(20),H=r(48),V=r(53),X=r(49),z=r(52),U=r(50),K=r(51),J=r(54),Q=r(25),W=r(55),Z=r(57),Y=r(58),tt=r(59),et=r(27),rt=r(56),nt=r(26),at=r(21),ot=r(60),it=r(61),st=r(62),lt=r(63),ct=r(64),ut=r(29),pt=r(65),ft=r(66),dt=r(28),ht=r(67),mt=r(68),gt=r(69);Object(n.combineWithMathJax)({_:{input:{tex_ts:a,tex:{AllPackages:o,Configuration:i,FilterUtil:s,FindTeX:l,MapHandler:c,NodeFactory:u,NodeUtil:p,ParseMethods:f,ParseOptions:d,ParseUtil:h,Stack:m,StackItem:g,StackItemFactory:v,Symbol:y,SymbolMap:b,Tags:x,TexConstants:A,TexError:M,TexParser:_,action:{ActionConfiguration:C},amscd:{AmsCdConfiguration:P,AmsCdMethods:w},ams:{AmsConfiguration:S,AmsItems:T,AmsMethods:k},autoload:{AutoloadConfiguration:O},base:{BaseConfiguration:E,BaseItems:I,BaseMethods:N},bbox:{BboxConfiguration:q},boldsymbol:{BoldsymbolConfiguration:L},braket:{BraketConfiguration:F,BraketItems:B,BraketMethods:R},bussproofs:{BussproofsConfiguration:G,BussproofsItems:j,BussproofsMethods:D,BussproofsUtil:$},cancel:{CancelConfiguration:H},colorv2:{ColorV2Configuration:V},color:{ColorConfiguration:X,ColorConstants:z,ColorMethods:U,ColorUtil:K},configmacros:{ConfigMacrosConfiguration:J},enclose:{EncloseConfiguration:Q},extpfeil:{ExtpfeilConfiguration:W},html:{HtmlConfiguration:Z,HtmlMethods:Y},mhchem:{MhchemConfiguration:tt},newcommand:{NewcommandConfiguration:et,NewcommandItems:rt,NewcommandMethods:nt,NewcommandUtil:at},noerrors:{NoErrorsConfiguration:ot},noundefined:{NoUndefinedConfiguration:it},physics:{PhysicsConfiguration:st,PhysicsItems:lt,PhysicsMethods:ct},require:{RequireConfiguration:ut},tagformat:{TagFormatConfiguration:pt},textmacros:{TextMacrosConfiguration:ft,TextMacrosMethods:dt,TextParser:ht},unicode:{UnicodeConfiguration:mt},verb:{VerbConfiguration:gt}}}}});var vt,yt=r(10);function bt(t,e,r){var a,o,i,s=MathJax.config.tex;if(s&&s.packages){var l=s.packages,c=l.indexOf(t);c>=0&&(l[c]=e),r&&s[t]&&(Object(n.combineConfig)(s,(a={},o=e,i=s[t],o in a?Object.defineProperty(a,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):a[o]=i,a)),delete s[t])}}function xt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}r(70).Loader.preLoad(\"input/tex-base\",\"[tex]/all-packages\",\"[tex]/require\"),function(t){if(MathJax.startup){MathJax.startup.registerConstructor(\"tex\",a.TeX),MathJax.startup.useInput(\"tex\"),MathJax.config.tex||(MathJax.config.tex={});var e=MathJax.config.tex.packages;MathJax.config.tex.packages=t,e&&Object(yt.insert)(MathJax.config.tex,{packages:e})}}([\"require\"].concat(function(t){if(Array.isArray(t))return xt(t)}(vt=o.AllPackages)||function(t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(vt)||function(t,e){if(t){if(\"string\"==typeof t)return xt(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===r&&t.constructor&&(r=t.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(t):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?xt(t,e):void 0}}(vt)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())),bt(\"amsCd\",\"amscd\",!0),bt(\"colorV2\",\"colorv2\",!1),bt(\"configMacros\",\"configmacros\",!1),bt(\"tagFormat\",\"tagformat\",!0)}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/input/tex.js",
    "content": "!function(t){var e={};function r(n){if(e[n])return e[n].exports;var a=e[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var a in t)r.d(n,a,function(e){return t[e]}.bind(null,a));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,\"a\",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p=\"\",r(r.s=54)}([function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(e,r){for(var n=[],a=2;a<arguments.length;a++)n[a-2]=arguments[a];this.id=e,this.message=t.processString(r,n)}return t.processString=function(e,r){for(var n=e.split(t.pattern),a=1,i=n.length;a<i;a+=2){var o=n[a].charAt(0);if(o>=\"0\"&&o<=\"9\")n[a]=r[parseInt(n[a],10)-1],\"number\"==typeof n[a]&&(n[a]=n[a].toString());else if(\"{\"===o){if((o=n[a].substr(1))>=\"0\"&&o<=\"9\")n[a]=r[parseInt(n[a].substr(1,n[a].length-2),10)-1],\"number\"==typeof n[a]&&(n[a]=n[a].toString());else n[a].match(/^\\{([a-z]+):%(\\d+)\\|(.*)\\}$/)&&(n[a]=\"%\"+n[a])}null==n[a]&&(n[a]=\"???\")}return n.join(\"\")},t.pattern=/%(\\d+|\\{\\d+\\}|\\{[a-z]+:\\%\\d+(?:\\|(?:%\\{\\d+\\}|%.|[^\\}])*)+\\}|.)/g,t}();e.default=n},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o,s=r(5),l=r(46);!function(t){var e=new Map([[\"autoOP\",!0],[\"fnOP\",!0],[\"movesupsub\",!0],[\"subsupOK\",!0],[\"texprimestyle\",!0],[\"useHeight\",!0],[\"variantForm\",!0],[\"withDelims\",!0],[\"open\",!0],[\"close\",!0]]);function r(t,r){var a,i;try{for(var o=n(Object.keys(r)),s=o.next();!s.done;s=o.next()){var l=s.value,u=r[l];\"texClass\"===l?(t.texClass=u,t.setProperty(l,u)):\"movablelimits\"===l?(t.setProperty(\"movablelimits\",u),(t.isKind(\"mo\")||t.isKind(\"mstyle\"))&&t.attributes.set(\"movablelimits\",u)):\"inferred\"===l||(e.has(l)?t.setProperty(l,u):t.attributes.set(l,u))}}catch(t){a={error:t}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(a)throw a.error}}}function a(t,e,r){t.childNodes[e]=r,r&&(r.parent=t)}function o(t,e){return t.isKind(e)}t.createEntity=function(t){return String.fromCodePoint(parseInt(t,16))},t.getChildren=function(t){return t.childNodes},t.getText=function(t){return t.getText()},t.appendChildren=function(t,e){var r,a;try{for(var i=n(e),o=i.next();!o.done;o=i.next()){var s=o.value;t.appendChild(s)}}catch(t){r={error:t}}finally{try{o&&!o.done&&(a=i.return)&&a.call(i)}finally{if(r)throw r.error}}},t.setAttribute=function(t,e,r){t.attributes.set(e,r)},t.setProperty=function(t,e,r){t.setProperty(e,r)},t.setProperties=r,t.getProperty=function(t,e){return t.getProperty(e)},t.getAttribute=function(t,e){return t.attributes.get(e)},t.removeProperties=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];t.removeProperty.apply(t,i(e))},t.getChildAt=function(t,e){return t.childNodes[e]},t.setChild=a,t.copyChildren=function(t,e){for(var r=t.childNodes,n=0;n<r.length;n++)a(e,n,r[n])},t.copyAttributes=function(t,e){e.attributes=t.attributes,r(e,t.getAllProperties())},t.isType=o,t.isEmbellished=function(t){return t.isEmbellished},t.getTexClass=function(t){return t.texClass},t.getCoreMO=function(t){return t.coreMO()},t.isNode=function(t){return t instanceof s.AbstractMmlNode||t instanceof s.AbstractMmlEmptyNode},t.isInferred=function(t){return t.isInferred},t.getForm=function(t){var e,r;if(!o(t,\"mo\"))return null;var a=t,i=a.getForms();try{for(var s=n(i),u=s.next();!u.done;u=s.next()){var c=u.value,f=l.MmlMo.OPTABLE[c][a.getText()];if(f)return f}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return null}}(o||(o={})),e.default=o},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},s=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.EnvironmentMap=e.CommandMap=e.MacroMap=e.DelimiterMap=e.CharacterMap=e.AbstractParseMap=e.RegExpMap=e.AbstractSymbolMap=void 0;var l=r(10),u=r(12),c=function(){function t(t,e){this._name=t,this._parser=e,u.MapHandler.register(this)}return Object.defineProperty(t.prototype,\"name\",{get:function(){return this._name},enumerable:!1,configurable:!0}),t.prototype.parserFor=function(t){return this.contains(t)?this.parser:null},t.prototype.parse=function(t){var e=i(t,2),r=e[0],n=e[1],a=this.parserFor(n),o=this.lookup(n);return a&&o?a(r,o)||!0:null},Object.defineProperty(t.prototype,\"parser\",{get:function(){return this._parser},set:function(t){this._parser=t},enumerable:!1,configurable:!0}),t}();e.AbstractSymbolMap=c;var f=function(t){function e(e,r,n){var a=t.call(this,e,r)||this;return a._regExp=n,a}return a(e,t),e.prototype.contains=function(t){return this._regExp.test(t)},e.prototype.lookup=function(t){return this.contains(t)?t:null},e}(c);e.RegExpMap=f;var p=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.map=new Map,e}return a(e,t),e.prototype.lookup=function(t){return this.map.get(t)},e.prototype.contains=function(t){return this.map.has(t)},e.prototype.add=function(t,e){this.map.set(t,e)},e.prototype.remove=function(t){this.map.delete(t)},e}(c);e.AbstractParseMap=p;var d=function(t){function e(e,r,n){var a,s,u=t.call(this,e,r)||this;try{for(var c=o(Object.keys(n)),f=c.next();!f.done;f=c.next()){var p=f.value,d=n[p],h=i(\"string\"==typeof d?[d,null]:d,2),m=h[0],g=h[1],y=new l.Symbol(p,m,g);u.add(p,y)}}catch(t){a={error:t}}finally{try{f&&!f.done&&(s=c.return)&&s.call(c)}finally{if(a)throw a.error}}return u}return a(e,t),e}(p);e.CharacterMap=d;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),e.prototype.parse=function(e){var r=i(e,2),n=r[0],a=r[1];return t.prototype.parse.call(this,[n,\"\\\\\"+a])},e}(d);e.DelimiterMap=h;var m=function(t){function e(e,r,n){var a,s,u=t.call(this,e,null)||this;try{for(var c=o(Object.keys(r)),f=c.next();!f.done;f=c.next()){var p=f.value,d=r[p],h=i(\"string\"==typeof d?[d]:d),m=h[0],g=h.slice(1),y=new l.Macro(p,n[m],g);u.add(p,y)}}catch(t){a={error:t}}finally{try{f&&!f.done&&(s=c.return)&&s.call(c)}finally{if(a)throw a.error}}return u}return a(e,t),e.prototype.parserFor=function(t){var e=this.lookup(t);return e?e.func:null},e.prototype.parse=function(t){var e=i(t,2),r=e[0],n=e[1],a=this.lookup(n),o=this.parserFor(n);return a&&o?o.apply(void 0,s([r,a.symbol],a.args))||!0:null},e}(p);e.MacroMap=m;var g=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),e.prototype.parse=function(t){var e=i(t,2),r=e[0],n=e[1],a=this.lookup(n),o=this.parserFor(n);if(!a||!o)return null;if(!o)return null;var l=r.currentCS;r.currentCS=\"\\\\\"+n;var u=o.apply(void 0,s([r,\"\\\\\"+a.symbol],a.args));return r.currentCS=l,u||!0},e}(m);e.CommandMap=g;var y=function(t){function e(e,r,n,a){var i=t.call(this,e,n,a)||this;return i.parser=r,i}return a(e,t),e.prototype.parse=function(t){var e=i(t,2),r=e[0],n=e[1],a=this.lookup(n),o=this.parserFor(n);return a&&o?(this.parser(r,a.symbol,o,a.args),!0):null},e}(m);e.EnvironmentMap=y},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var i,o=r(5),s=r(1),l=r(8),u=r(0),c=r(11);r(33),function(t){var e={em:function(t){return t},ex:function(t){return.43*t},pt:function(t){return t/10},pc:function(t){return 1.2*t},px:function(t){return 7.2*t/72},in:function(t){return 7.2*t},cm:function(t){return 7.2*t/2.54},mm:function(t){return 7.2*t/25.4},mu:function(t){return t/18}},r=\"([-+]?([.,]\\\\d+|\\\\d+([.,]\\\\d*)?))\",i=\"(pt|em|ex|mu|px|mm|cm|in|pc)\",f=RegExp(\"^\\\\s*\"+r+\"\\\\s*\"+i+\"\\\\s*$\"),p=RegExp(\"^\\\\s*\"+r+\"\\\\s*\"+i+\" ?\");function d(t,r){void 0===r&&(r=!1);var a=t.match(r?p:f);return a?function(t){var r=n(t,3),a=r[0],i=r[1],o=r[2];if(\"mu\"!==i)return[a,i,o];return[h(e[i](parseFloat(a||\"1\"))).slice(0,-2),\"em\",o]}([a[1].replace(/,/,\".\"),a[4],a[0].length]):[null,null,0]}function h(t){return Math.abs(t)<6e-4?\"0em\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"em\"}function m(t,e,r){\"{\"!==e&&\"}\"!==e||(e=\"\\\\\"+e);var n=\"{\\\\bigg\"+r+\" \"+e+\"}\",a=\"{\\\\big\"+r+\" \"+e+\"}\";return new l.default(\"\\\\mathchoice\"+n+a+a+a,{},t).mml()}function g(t,e,r){e=e.replace(/^\\s+/,c.entities.nbsp).replace(/\\s+$/,c.entities.nbsp);var n=t.create(\"text\",e);return t.create(\"node\",\"mtext\",[],r,n)}function y(t,e,r){if(r.match(/^[a-z]/i)&&e.match(/(^|[^\\\\])(\\\\\\\\)*\\\\[a-z]+$/i)&&(e+=\" \"),e.length+r.length>t.configuration.options.maxBuffer)throw new u.default(\"MaxBufferSize\",\"MathJax internal buffer size exceeded; is there a recursive macro call?\");return e+r}function v(t,e){for(;e>0;)t=t.trim().slice(1,-1),e--;return t.trim()}function b(t,e){for(var r=t.length,n=0,a=\"\",i=0,o=0,s=!0,l=!1;i<r;){var c=t[i++];switch(c){case\" \":break;case\"{\":s?o++:(l=!1,o>n&&(o=n)),n++;break;case\"}\":n&&n--,(s||l)&&(o--,l=!0),s=!1;break;default:if(!n&&-1!==e.indexOf(c))return[l?\"true\":v(a,o),c,t.slice(i)];s=!1,l=!1}a+=c}if(n)throw new u.default(\"ExtraOpenMissingClose\",\"Extra open brace or missing close brace\");return[l?\"true\":v(a,o),\"\",t.slice(i)]}t.matchDimen=d,t.dimen2em=function(t){var r=n(d(t),2),a=r[0],i=r[1],o=parseFloat(a||\"1\"),s=e[i];return s?s(o):0},t.Em=h,t.fenced=function(t,e,r,n,a){void 0===a&&(a=\"\");var i,u=t.nodeFactory,c=u.create(\"node\",\"mrow\",[],{open:e,close:n,texClass:o.TEXCLASS.INNER});if(a)i=new l.default(\"\\\\\"+a+\"l\"+e,t.parser.stack.env,t).mml();else{var f=u.create(\"text\",e);i=u.create(\"node\",\"mo\",[],{fence:!0,stretchy:!0,symmetric:!0,texClass:o.TEXCLASS.OPEN},f)}if(s.default.appendChildren(c,[i]),s.default.isType(r,\"mrow\")&&s.default.isInferred(r)?s.default.appendChildren(c,s.default.getChildren(r)):s.default.appendChildren(c,[r]),a)i=new l.default(\"\\\\\"+a+\"r\"+n,t.parser.stack.env,t).mml();else{var p=u.create(\"text\",n);i=u.create(\"node\",\"mo\",[],{fence:!0,stretchy:!0,symmetric:!0,texClass:o.TEXCLASS.CLOSE},p)}return s.default.appendChildren(c,[i]),c},t.fixedFence=function(t,e,r,n){var a=t.nodeFactory.create(\"node\",\"mrow\",[],{open:e,close:n,texClass:o.TEXCLASS.ORD});return e&&s.default.appendChildren(a,[m(t,e,\"l\")]),s.default.isType(r,\"mrow\")?s.default.appendChildren(a,s.default.getChildren(r)):s.default.appendChildren(a,[r]),n&&s.default.appendChildren(a,[m(t,n,\"r\")]),a},t.mathPalette=m,t.fixInitialMO=function(t,e){for(var r=0,n=e.length;r<n;r++){var a=e[r];if(a&&!s.default.isType(a,\"mspace\")&&(!s.default.isType(a,\"TeXAtom\")||s.default.getChildren(a)[0]&&s.default.getChildren(s.default.getChildren(a)[0]).length)){if(s.default.isEmbellished(a)||s.default.isType(a,\"TeXAtom\")&&s.default.getTexClass(a)===o.TEXCLASS.REL){var i=t.nodeFactory.create(\"node\",\"mi\");e.unshift(i)}break}}},t.internalMath=function(t,e,r,n){if(t.configuration.options.internalMath)return t.configuration.options.internalMath(t,e,r,n);var a,i,o=n||t.stack.env.font,s=o?{mathvariant:o}:{},c=[],f=0,p=0,d=\"\",h=0;if(e.match(/\\\\?[${}\\\\]|\\\\\\(|\\\\(eq)?ref\\s*\\{/)){for(;f<e.length;)if(\"$\"===(a=e.charAt(f++)))\"$\"===d&&0===h?(i=t.create(\"node\",\"TeXAtom\",[new l.default(e.slice(p,f-1),{},t.configuration).mml()]),c.push(i),d=\"\",p=f):\"\"===d&&(p<f-1&&c.push(g(t,e.slice(p,f-1),s)),d=\"$\",p=f);else if(\"{\"===a&&\"\"!==d)h++;else if(\"}\"===a)if(\"}\"===d&&0===h){var m=new l.default(e.slice(p,f),{},t.configuration).mml();i=t.create(\"node\",\"TeXAtom\",[m],s),c.push(i),d=\"\",p=f}else\"\"!==d&&h&&h--;else if(\"\\\\\"===a)if(\"\"===d&&e.substr(f).match(/^(eq)?ref\\s*\\{/)){var y=RegExp[\"$&\"].length;p<f-1&&c.push(g(t,e.slice(p,f-1),s)),d=\"}\",p=f-1,f+=y}else\"(\"===(a=e.charAt(f++))&&\"\"===d?(p<f-2&&c.push(g(t,e.slice(p,f-2),s)),d=\")\",p=f):\")\"===a&&\")\"===d&&0===h?(i=t.create(\"node\",\"TeXAtom\",[new l.default(e.slice(p,f-2),{},t.configuration).mml()]),c.push(i),d=\"\",p=f):a.match(/[${}\\\\]/)&&\"\"===d&&(f--,e=e.substr(0,f-1)+e.substr(f));if(\"\"!==d)throw new u.default(\"MathNotTerminated\",\"Math not terminated in text box\")}return p<e.length&&c.push(g(t,e.slice(p),s)),null!=r?c=[t.create(\"node\",\"mstyle\",c,{displaystyle:!1,scriptlevel:r})]:c.length>1&&(c=[t.create(\"node\",\"mrow\",c)]),c},t.internalText=g,t.trimSpaces=function(t){if(\"string\"!=typeof t)return t;var e=t.trim();return e.match(/\\\\$/)&&t.match(/ $/)&&(e+=\" \"),e},t.setArrayAlign=function(e,r){return\"t\"===(r=t.trimSpaces(r||\"\"))?e.arraydef.align=\"baseline 1\":\"b\"===r?e.arraydef.align=\"baseline -1\":\"c\"===r?e.arraydef.align=\"center\":r&&(e.arraydef.align=r),e},t.substituteArgs=function(t,e,r){for(var n=\"\",a=\"\",i=0;i<r.length;){var o=r.charAt(i++);if(\"\\\\\"===o)n+=o+r.charAt(i++);else if(\"#\"===o)if(\"#\"===(o=r.charAt(i++)))n+=o;else{if(!o.match(/[1-9]/)||parseInt(o,10)>e.length)throw new u.default(\"IllegalMacroParam\",\"Illegal macro parameter reference\");a=y(t,y(t,a,n),e[parseInt(o,10)-1]),n=\"\"}else n+=o}return y(t,a,n)},t.addArgs=y,t.checkEqnEnv=function(t){if(t.stack.global.eqnenv)throw new u.default(\"ErroneousNestingEq\",\"Erroneous nesting of equation structures\");t.stack.global.eqnenv=!0},t.MmlFilterAttribute=function(t,e,r){return r},t.getFontDef=function(t){var e=t.stack.env.font;return e?{mathvariant:e}:{}},t.keyvalOptions=function(t,e,r){var i,o;void 0===e&&(e=null),void 0===r&&(r=!1);var s=function(t){var e,r,a,i,o,s={},l=t;for(;l;)i=(e=n(b(l,[\"=\",\",\"]),3))[0],a=e[1],l=e[2],\"=\"===a?(o=(r=n(b(l,[\",\"]),3))[0],a=r[1],l=r[2],o=\"false\"===o||\"true\"===o?JSON.parse(o):o,s[i]=o):i&&(s[i]=!0);return s}(t);if(e)try{for(var l=a(Object.keys(s)),c=l.next();!c.done;c=l.next()){var f=c.value;if(!e.hasOwnProperty(f)){if(r)throw new u.default(\"InvalidOption\",\"Invalid optional argument: %1\",f);delete s[f]}}}catch(t){i={error:t}}finally{try{c&&!c.done&&(o=l.return)&&o.call(l)}finally{if(i)throw i.error}}return s}}(i||(i={})),e.default=i},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ParserConfiguration=e.ConfigurationHandler=e.Configuration=void 0;var i,o=r(6),s=r(12),l=r(35),u=r(34),c=r(9),f=function(){function t(t,e,r,n,a,i,o,s,l,u,c,f){void 0===e&&(e={}),void 0===r&&(r={}),void 0===n&&(n={}),void 0===a&&(a={}),void 0===i&&(i={}),void 0===o&&(o={}),void 0===s&&(s=[]),void 0===l&&(l=[]),void 0===u&&(u=null),void 0===c&&(c=null),this.name=t,this.handler=e,this.fallback=r,this.items=n,this.tags=a,this.options=i,this.nodes=o,this.preprocessors=s,this.postprocessors=l,this.initMethod=u,this.configMethod=c,this.priority=f,this.handler=Object.assign({character:[],delimiter:[],macro:[],environment:[]},e)}return t.makeProcessor=function(t,e){return Array.isArray(t)?t:[t,e]},t._create=function(e,r){var n=this;void 0===r&&(r={});var a=r.priority||u.PrioritizedList.DEFAULTPRIORITY,i=r.init?this.makeProcessor(r.init,a):null,o=r.config?this.makeProcessor(r.config,a):null,s=(r.preprocessors||[]).map((function(t){return n.makeProcessor(t,a)})),l=(r.postprocessors||[]).map((function(t){return n.makeProcessor(t,a)}));return new t(e,r.handler||{},r.fallback||{},r.items||{},r.tags||{},r.options||{},r.nodes||{},s,l,i,o,a)},t.create=function(e,r){void 0===r&&(r={});var n=t._create(e,r);return i.set(e,n),n},t.local=function(e){return void 0===e&&(e={}),t._create(\"\",e)},Object.defineProperty(t.prototype,\"init\",{get:function(){return this.initMethod?this.initMethod[0]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"config\",{get:function(){return this.configMethod?this.configMethod[0]:null},enumerable:!1,configurable:!0}),t}();e.Configuration=f,function(t){var e=new Map;t.set=function(t,r){e.set(t,r)},t.get=function(t){return e.get(t)},t.keys=function(){return e.keys()}}(i=e.ConfigurationHandler||(e.ConfigurationHandler={}));var p=function(){function t(t){var e,r,a,i;this.initMethod=new l.FunctionList,this.configMethod=new l.FunctionList,this.configurations=new u.PrioritizedList,this.handlers=new s.SubHandlers,this.items={},this.tags={},this.options={},this.nodes={};try{for(var o=n(t.slice().reverse()),c=o.next();!c.done;c=o.next()){var f=c.value;this.addPackage(f)}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}try{for(var p=n(this.configurations),d=p.next();!d.done;d=p.next()){var h=d.value,m=h.item,g=h.priority;this.append(m,g)}}catch(t){a={error:t}}finally{try{d&&!d.done&&(i=p.return)&&i.call(p)}finally{if(a)throw a.error}}}return t.prototype.init=function(){this.initMethod.execute(this)},t.prototype.config=function(t){var e,r;this.configMethod.execute(this,t);try{for(var a=n(this.configurations),i=a.next();!i.done;i=a.next()){var o=i.value;this.addFilters(t,o.item)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}},t.prototype.addPackage=function(t){var e=\"string\"==typeof t?t:t[0],r=i.get(e);r&&this.configurations.add(r,\"string\"==typeof t?r.priority:t[1])},t.prototype.add=function(t,e,r){var a,i;void 0===r&&(r={}),this.append(t),this.configurations.add(t,t.priority),this.init();var s=e.parseOptions;s.nodeFactory.setCreators(t.nodes);try{for(var l=n(Object.keys(t.items)),u=l.next();!u.done;u=l.next()){var f=u.value;s.itemFactory.setNodeClass(f,t.items[f])}}catch(t){a={error:t}}finally{try{u&&!u.done&&(i=l.return)&&i.call(l)}finally{if(a)throw a.error}}c.TagsFactory.addTags(t.tags),o.defaultOptions(s.options,t.options),o.userOptions(s.options,r),this.addFilters(e,t),t.config&&t.config(this,e)},t.prototype.append=function(t,e){e=e||t.priority,t.initMethod&&this.initMethod.add(t.initMethod[0],t.initMethod[1]),t.configMethod&&this.configMethod.add(t.configMethod[0],t.configMethod[1]),this.handlers.add(t.handler,t.fallback,e),Object.assign(this.items,t.items),Object.assign(this.tags,t.tags),o.defaultOptions(this.options,t.options),Object.assign(this.nodes,t.nodes)},t.prototype.addFilters=function(t,e){var r,i,o,s;try{for(var l=n(e.preprocessors),u=l.next();!u.done;u=l.next()){var c=a(u.value,2),f=c[0],p=c[1];t.preFilters.add(f,p)}}catch(t){r={error:t}}finally{try{u&&!u.done&&(i=l.return)&&i.call(l)}finally{if(r)throw r.error}}try{for(var d=n(e.postprocessors),h=d.next();!h.done;h=d.next()){var m=a(h.value,2),g=m[0];p=m[1];t.postFilters.add(g,p)}}catch(t){o={error:t}}finally{try{h&&!h.done&&(s=d.return)&&s.call(d)}finally{if(o)throw o.error}}},t}();e.ParserConfiguration=p},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,e.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,e.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,e.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,e.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,e.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,e.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,e.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,e.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,e.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TexConstant=void 0,function(t){t.Variant={NORMAL:\"normal\",BOLD:\"bold\",ITALIC:\"italic\",BOLDITALIC:\"bold-italic\",DOUBLESTRUCK:\"double-struck\",FRAKTUR:\"fraktur\",BOLDFRAKTUR:\"bold-fraktur\",SCRIPT:\"script\",BOLDSCRIPT:\"bold-script\",SANSSERIF:\"sans-serif\",BOLDSANSSERIF:\"bold-sans-serif\",SANSSERIFITALIC:\"sans-serif-italic\",SANSSERIFBOLDITALIC:\"sans-serif-bold-italic\",MONOSPACE:\"monospace\",INITIAL:\"inital\",TAILED:\"tailed\",LOOPED:\"looped\",STRETCHED:\"stretched\",CALLIGRAPHIC:\"-tex-calligraphic\",OLDSTYLE:\"-tex-oldstyle\"},t.Form={PREFIX:\"prefix\",INFIX:\"infix\",POSTFIX:\"postfix\"},t.LineBreak={AUTO:\"auto\",NEWLINE:\"newline\",NOBREAK:\"nobreak\",GOODBREAK:\"goodbreak\",BADBREAK:\"badbreak\"},t.LineBreakStyle={BEFORE:\"before\",AFTER:\"after\",DUPLICATE:\"duplicate\",INFIXLINBREAKSTYLE:\"infixlinebreakstyle\"},t.IndentAlign={LEFT:\"left\",CENTER:\"center\",RIGHT:\"right\",AUTO:\"auto\",ID:\"id\",INDENTALIGN:\"indentalign\"},t.IndentShift={INDENTSHIFT:\"indentshift\"},t.LineThickness={THIN:\"thin\",MEDIUM:\"medium\",THICK:\"thick\"},t.Notation={LONGDIV:\"longdiv\",ACTUARIAL:\"actuarial\",PHASORANGLE:\"phasorangle\",RADICAL:\"radical\",BOX:\"box\",ROUNDEDBOX:\"roundedbox\",CIRCLE:\"circle\",LEFT:\"left\",RIGHT:\"right\",TOP:\"top\",BOTTOM:\"bottom\",UPDIAGONALSTRIKE:\"updiagonalstrike\",DOWNDIAGONALSTRIKE:\"downdiagonalstrike\",VERTICALSTRIKE:\"verticalstrike\",HORIZONTALSTRIKE:\"horizontalstrike\",NORTHEASTARROW:\"northeastarrow\",MADRUWB:\"madruwb\",UPDIAGONALARROW:\"updiagonalarrow\"},t.Align={TOP:\"top\",BOTTOM:\"bottom\",CENTER:\"center\",BASELINE:\"baseline\",AXIS:\"axis\",LEFT:\"left\",RIGHT:\"right\"},t.Lines={NONE:\"none\",SOLID:\"solid\",DASHED:\"dashed\"},t.Side={LEFT:\"left\",RIGHT:\"right\",LEFTOVERLAP:\"leftoverlap\",RIGHTOVERLAP:\"rightoverlap\"},t.Width={AUTO:\"auto\",FIT:\"fit\"},t.Actiontype={TOGGLE:\"toggle\",STATUSLINE:\"statusline\",TOOLTIP:\"tooltip\",INPUT:\"input\"},t.Length={VERYVERYTHINMATHSPACE:\"veryverythinmathspace\",VERYTHINMATHSPACE:\"verythinmathspace\",THINMATHSPACE:\"thinmathspace\",MEDIUMMATHSPACE:\"mediummathspace\",THICKMATHSPACE:\"thickmathspace\",VERYTHICKMATHSPACE:\"verythickmathspace\",VERYVERYTHICKMATHSPACE:\"veryverythickmathspace\",NEGATIVEVERYVERYTHINMATHSPACE:\"negativeveryverythinmathspace\",NEGATIVEVERYTHINMATHSPACE:\"negativeverythinmathspace\",NEGATIVETHINMATHSPACE:\"negativethinmathspace\",NEGATIVEMEDIUMMATHSPACE:\"negativemediummathspace\",NEGATIVETHICKMATHSPACE:\"negativethickmathspace\",NEGATIVEVERYTHICKMATHSPACE:\"negativeverythickmathspace\",NEGATIVEVERYVERYTHICKMATHSPACE:\"negativeveryverythickmathspace\"},t.Overflow={LINBREAK:\"linebreak\",SCROLL:\"scroll\",ELIDE:\"elide\",TRUNCATE:\"truncate\",SCALE:\"scale\"},t.Unit={EM:\"em\",EX:\"ex\",PX:\"px\",IN:\"in\",CM:\"cm\",MM:\"mm\",PT:\"pt\",PC:\"pc\"}}(e.TexConstant||(e.TexConstant={}))},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(3),s=r(24),l=r(0),u=r(5),c=function(){function t(t,e,r){var a,i;this._string=t,this.configuration=r,this.macroCount=0,this.i=0,this.currentCS=\"\";var o,l=e.hasOwnProperty(\"isInner\"),u=e.isInner;if(delete e.isInner,e){o={};try{for(var c=n(Object.keys(e)),f=c.next();!f.done;f=c.next()){var p=f.value;o[p]=e[p]}}catch(t){a={error:t}}finally{try{f&&!f.done&&(i=c.return)&&i.call(c)}finally{if(a)throw a.error}}}this.configuration.pushParser(this),this.stack=new s.default(this.itemFactory,o,!l||u),this.Parse(),this.Push(this.itemFactory.create(\"stop\"))}return Object.defineProperty(t.prototype,\"options\",{get:function(){return this.configuration.options},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"itemFactory\",{get:function(){return this.configuration.itemFactory},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"tags\",{get:function(){return this.configuration.tags},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"string\",{get:function(){return this._string},set:function(t){this._string=t},enumerable:!1,configurable:!0}),t.prototype.parse=function(t,e){return this.configuration.handlers.get(t).parse(e)},t.prototype.lookup=function(t,e){return this.configuration.handlers.get(t).lookup(e)},t.prototype.contains=function(t,e){return this.configuration.handlers.get(t).contains(e)},t.prototype.toString=function(){var t,e,r=\"\";try{for(var a=n(Array.from(this.configuration.handlers.keys())),i=a.next();!i.done;i=a.next()){var o=i.value;r+=o+\": \"+this.configuration.handlers.get(o)+\"\\n\"}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}return r},t.prototype.Parse=function(){for(var t;this.i<this.string.length;)t=this.getCodePoint(),this.i+=t.length,this.parse(\"character\",[this,t])},t.prototype.Push=function(t){t instanceof u.AbstractMmlNode&&t.isInferred?this.PushAll(t.childNodes):this.stack.Push(t)},t.prototype.PushAll=function(t){var e,r;try{for(var a=n(t),i=a.next();!i.done;i=a.next()){var o=i.value;this.stack.Push(o)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}},t.prototype.mml=function(){if(!this.stack.Top().isKind(\"mml\"))return null;var t=this.stack.Top().First;return this.configuration.popParser(),t},t.prototype.convertDelimiter=function(t){var e=this.lookup(\"delimiter\",t);return e?e.char:null},t.prototype.getCodePoint=function(){var t=this.string.codePointAt(this.i);return void 0===t?\"\":String.fromCodePoint(t)},t.prototype.nextIsSpace=function(){return!!this.string.charAt(this.i).match(/\\s/)},t.prototype.GetNext=function(){for(;this.nextIsSpace();)this.i++;return this.getCodePoint()},t.prototype.GetCS=function(){var t=this.string.slice(this.i).match(/^(([a-z]+) ?|[\\uD800-\\uDBFF].|.)/i);return t?(this.i+=t[0].length,t[2]||t[1]):(this.i++,\" \")},t.prototype.GetArgument=function(t,e){switch(this.GetNext()){case\"\":if(!e)throw new l.default(\"MissingArgFor\",\"Missing argument for %1\",this.currentCS);return null;case\"}\":if(!e)throw new l.default(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\");return null;case\"\\\\\":return this.i++,\"\\\\\"+this.GetCS();case\"{\":for(var r=++this.i,n=1;this.i<this.string.length;)switch(this.string.charAt(this.i++)){case\"\\\\\":this.i++;break;case\"{\":n++;break;case\"}\":if(0==--n)return this.string.slice(r,this.i-1)}throw new l.default(\"MissingCloseBrace\",\"Missing close brace\")}var a=this.getCodePoint();return this.i+=a.length,a},t.prototype.GetBrackets=function(t,e){if(\"[\"!==this.GetNext())return e;for(var r=++this.i,n=0;this.i<this.string.length;)switch(this.string.charAt(this.i++)){case\"{\":n++;break;case\"\\\\\":this.i++;break;case\"}\":if(n--<=0)throw new l.default(\"ExtraCloseLooking\",\"Extra close brace while looking for %1\",\"']'\");break;case\"]\":if(0===n)return this.string.slice(r,this.i-1)}throw new l.default(\"MissingCloseBracket\",\"Could not find closing ']' for argument to %1\",this.currentCS)},t.prototype.GetDelimiter=function(t,e){var r=this.GetNext();if(this.i+=r.length,this.i<=this.string.length&&(\"\\\\\"===r?r+=this.GetCS():\"{\"===r&&e&&(this.i--,r=this.GetArgument(t)),this.contains(\"delimiter\",r)))return this.convertDelimiter(r);throw new l.default(\"MissingOrUnrecognizedDelim\",\"Missing or unrecognized delimiter for %1\",this.currentCS)},t.prototype.GetDimen=function(t){if(\"{\"===this.GetNext()){var e=this.GetArgument(t),r=a(o.default.matchDimen(e),2),n=r[0],i=r[1];if(n)return n+i}else{e=this.string.slice(this.i);var s=a(o.default.matchDimen(e,!0),3),u=(n=s[0],i=s[1],s[2]);if(n)return this.i+=u,n+i}throw new l.default(\"MissingDimOrUnits\",\"Missing dimension or its units for %1\",this.currentCS)},t.prototype.GetUpTo=function(t,e){for(;this.nextIsSpace();)this.i++;for(var r=this.i,n=0;this.i<this.string.length;){var a=this.i,i=this.GetNext();switch(this.i+=i.length,i){case\"\\\\\":i+=this.GetCS();break;case\"{\":n++;break;case\"}\":if(0===n)throw new l.default(\"ExtraCloseLooking\",\"Extra close brace while looking for %1\",e);n--}if(0===n&&i===e)return this.string.slice(r,a)}throw new l.default(\"TokenNotFoundForCommand\",\"Could not find %1 for %2\",e,this.currentCS)},t.prototype.ParseArg=function(e){return new t(this.GetArgument(e),this.stack.env,this.configuration).mml()},t.prototype.ParseUpTo=function(e,r){return new t(this.GetUpTo(e,r),this.stack.env,this.configuration).mml()},t.prototype.GetDelimiterArg=function(t){var e=o.default.trimSpaces(this.GetArgument(t));if(\"\"===e)return null;if(this.contains(\"delimiter\",e))return e;throw new l.default(\"MissingOrUnrecognizedDelim\",\"Missing or unrecognized delimiter for %1\",this.currentCS)},t.prototype.GetStar=function(){var t=\"*\"===this.GetNext();return t&&this.i++,t},t.prototype.create=function(t){for(var e,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return(e=this.configuration.nodeFactory).create.apply(e,i([t],r))},t}();e.default=c},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TagsFactory=e.AllTags=e.NoTags=e.AbstractTags=e.TagInfo=e.Label=void 0;var o=r(8),s=function(t,e){void 0===t&&(t=\"???\"),void 0===e&&(e=\"\"),this.tag=t,this.id=e};e.Label=s;var l=function(t,e,r,n,a,i,o,s){void 0===t&&(t=\"\"),void 0===e&&(e=!1),void 0===r&&(r=!1),void 0===n&&(n=null),void 0===a&&(a=\"\"),void 0===i&&(i=\"\"),void 0===o&&(o=!1),void 0===s&&(s=\"\"),this.env=t,this.taggable=e,this.defaultTags=r,this.tag=n,this.tagId=a,this.tagFormat=i,this.noTag=o,this.labelId=s};e.TagInfo=l;var u=function(){function t(){this.counter=0,this.allCounter=0,this.configuration=null,this.ids={},this.allIds={},this.labels={},this.allLabels={},this.redo=!1,this.refUpdate=!1,this.currentTag=new l,this.history=[],this.stack=[],this.enTag=function(t,e){var r=this.configuration.nodeFactory,n=r.create(\"node\",\"mtd\",[t]),a=r.create(\"node\",\"mlabeledtr\",[e,n]);return r.create(\"node\",\"mtable\",[a],{side:this.configuration.options.tagSide,minlabelspacing:this.configuration.options.tagIndent,displaystyle:!0})}}return t.prototype.start=function(t,e,r){this.currentTag&&this.stack.push(this.currentTag),this.currentTag=new l(t,e,r)},Object.defineProperty(t.prototype,\"env\",{get:function(){return this.currentTag.env},enumerable:!1,configurable:!0}),t.prototype.end=function(){this.history.push(this.currentTag),this.currentTag=this.stack.pop()},t.prototype.tag=function(t,e){this.currentTag.tag=t,this.currentTag.tagFormat=e?t:this.formatTag(t),this.currentTag.noTag=!1},t.prototype.notag=function(){this.tag(\"\",!0),this.currentTag.noTag=!0},Object.defineProperty(t.prototype,\"noTag\",{get:function(){return this.currentTag.noTag},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"label\",{get:function(){return this.currentTag.labelId},set:function(t){this.currentTag.labelId=t},enumerable:!1,configurable:!0}),t.prototype.formatUrl=function(t,e){return e+\"#\"+encodeURIComponent(t)},t.prototype.formatTag=function(t){return\"(\"+t+\")\"},t.prototype.formatId=function(t){return\"mjx-eqn-\"+t.replace(/\\s/g,\"_\")},t.prototype.formatNumber=function(t){return t.toString()},t.prototype.autoTag=function(){null==this.currentTag.tag&&(this.counter++,this.tag(this.formatNumber(this.counter),!1))},t.prototype.clearTag=function(){this.label=\"\",this.tag(null,!0),this.currentTag.tagId=\"\"},t.prototype.getTag=function(t){if(void 0===t&&(t=!1),t)return this.autoTag(),this.makeTag();var e=this.currentTag;return e.taggable&&!e.noTag&&(e.defaultTags&&this.autoTag(),e.tag)?this.makeTag():null},t.prototype.resetTag=function(){this.history=[],this.redo=!1,this.refUpdate=!1,this.clearTag()},t.prototype.reset=function(t){void 0===t&&(t=0),this.resetTag(),this.counter=this.allCounter=t,this.allLabels={},this.allIds={}},t.prototype.startEquation=function(t){this.labels={},this.ids={},this.counter=this.allCounter,this.redo=!1;var e=t.inputData.recompile;e&&(this.refUpdate=!0,this.counter=e.counter)},t.prototype.finishEquation=function(t){this.redo&&(t.inputData.recompile={state:t.state(),counter:this.allCounter}),this.refUpdate||(this.allCounter=this.counter),Object.assign(this.allIds,this.ids),Object.assign(this.allLabels,this.labels)},t.prototype.finalize=function(t,e){if(!e.display||this.currentTag.env||null==this.currentTag.tag)return t;var r=this.makeTag();return this.enTag(t,r)},t.prototype.makeId=function(){this.currentTag.tagId=this.formatId(this.configuration.options.useLabelIds&&this.label||this.currentTag.tag)},t.prototype.makeTag=function(){this.makeId(),this.label&&(this.labels[this.label]=new s(this.currentTag.tag,this.currentTag.tagId));var t=new o.default(\"\\\\text{\"+this.currentTag.tagFormat+\"}\",{},this.configuration).mml();return this.configuration.nodeFactory.create(\"node\",\"mtd\",[t],{id:this.currentTag.tagId})},t}();e.AbstractTags=u;var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),e.prototype.autoTag=function(){},e.prototype.getTag=function(){return this.currentTag.tag?t.prototype.getTag.call(this):null},e}(u);e.NoTags=c;var f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),e.prototype.finalize=function(t,e){if(!e.display||this.history.find((function(t){return t.taggable})))return t;var r=this.getTag(!0);return this.enTag(t,r)},e}(u);e.AllTags=f,function(t){var e=new Map([[\"none\",c],[\"all\",f]]),r=\"none\";t.OPTIONS={tags:r,tagSide:\"right\",tagIndent:\"0.8em\",multlineWidth:\"85%\",useLabelIds:!0,ignoreDuplicateLabels:!1},t.add=function(t,r){e.set(t,r)},t.addTags=function(e){var r,n;try{for(var a=i(Object.keys(e)),o=a.next();!o.done;o=a.next()){var s=o.value;t.add(s,e[s])}}catch(t){r={error:t}}finally{try{o&&!o.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}},t.create=function(t){var n=e.get(t)||e.get(r);if(!n)throw Error(\"Unknown tags class\");return new n},t.setDefault=function(t){r=t},t.getDefault=function(){return t.create(r)}}(e.TagsFactory||(e.TagsFactory={}))},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Macro=e.Symbol=void 0;var n=function(){function t(t,e,r){this._symbol=t,this._char=e,this._attributes=r}return Object.defineProperty(t.prototype,\"symbol\",{get:function(){return this._symbol},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"char\",{get:function(){return this._char},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"attributes\",{get:function(){return this._attributes},enumerable:!1,configurable:!0}),t}();e.Symbol=n;var a=function(){function t(t,e,r){void 0===r&&(r=[]),this._symbol=t,this._func=e,this._args=r}return Object.defineProperty(t.prototype,\"symbol\",{get:function(){return this._symbol},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"func\",{get:function(){return this._func},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"args\",{get:function(){return this._args},enumerable:!1,configurable:!0}),t}();e.Macro=a},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.options=MathJax._.util.Entities.options,e.entities=MathJax._.util.Entities.entities,e.add=MathJax._.util.Entities.add,e.remove=MathJax._.util.Entities.remove,e.translate=MathJax._.util.Entities.translate,e.numeric=MathJax._.util.Entities.numeric},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SubHandlers=e.SubHandler=e.MapHandler=void 0;var i,o=r(34),s=r(35);!function(t){var e=new Map;t.register=function(t){e.set(t.name,t)},t.getMap=function(t){return e.get(t)}}(i=e.MapHandler||(e.MapHandler={}));var l=function(){function t(){this._configuration=new o.PrioritizedList,this._fallback=new s.FunctionList}return t.prototype.add=function(t,e,r){var a,s;void 0===r&&(r=o.PrioritizedList.DEFAULTPRIORITY);try{for(var l=n(t.slice().reverse()),u=l.next();!u.done;u=l.next()){var c=u.value,f=i.getMap(c);if(!f)return void this.warn(\"Configuration \"+c+\" not found! Omitted.\");this._configuration.add(f,r)}}catch(t){a={error:t}}finally{try{u&&!u.done&&(s=l.return)&&s.call(l)}finally{if(a)throw a.error}}e&&this._fallback.add(e,r)},t.prototype.parse=function(t){var e,r;try{for(var i=n(this._configuration),o=i.next();!o.done;o=i.next()){var s=o.value.item.parse(t);if(s)return s}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}var l=a(t,2),u=l[0],c=l[1];this._fallback.toArray()[0].item(u,c)},t.prototype.lookup=function(t){var e=this.applicable(t);return e?e.lookup(t):null},t.prototype.contains=function(t){return!!this.applicable(t)},t.prototype.toString=function(){var t,e,r=[];try{for(var a=n(this._configuration),i=a.next();!i.done;i=a.next()){var o=i.value.item;r.push(o.name)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}return r.join(\", \")},t.prototype.applicable=function(t){var e,r;try{for(var a=n(this._configuration),i=a.next();!i.done;i=a.next()){var o=i.value.item;if(o.contains(t))return o}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return null},t.prototype.retrieve=function(t){var e,r;try{for(var a=n(this._configuration),i=a.next();!i.done;i=a.next()){var o=i.value.item;if(o.name===t)return o}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return null},t.prototype.warn=function(t){console.log(\"TexParser Warning: \"+t)},t}();e.SubHandler=l;var u=function(){function t(){this.map=new Map}return t.prototype.add=function(t,e,r){var a,i;void 0===r&&(r=o.PrioritizedList.DEFAULTPRIORITY);try{for(var s=n(Object.keys(t)),u=s.next();!u.done;u=s.next()){var c=u.value,f=this.get(c);f||(f=new l,this.set(c,f)),f.add(t[c],e[c],r)}}catch(t){a={error:t}}finally{try{u&&!u.done&&(i=s.return)&&i.call(s)}finally{if(a)throw a.error}}},t.prototype.set=function(t,e){this.map.set(t,e)},t.prototype.get=function(t){return this.map.get(t)},t.prototype.retrieve=function(t){var e,r;try{for(var a=n(this.map.values()),i=a.next();!i.done;i=a.next()){var o=i.value.retrieve(t);if(o)return o}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return null},t.prototype.keys=function(){return this.map.keys()},t}();e.SubHandlers=u},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.BaseItem=e.MmlStack=void 0;var l=r(0),u=function(){function t(t){this._nodes=t}return Object.defineProperty(t.prototype,\"nodes\",{get:function(){return this._nodes},enumerable:!1,configurable:!0}),t.prototype.Push=function(){for(var t,e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];(t=this._nodes).push.apply(t,o(e))},t.prototype.Pop=function(){return this._nodes.pop()},Object.defineProperty(t.prototype,\"First\",{get:function(){return this._nodes[this.Size()-1]},set:function(t){this._nodes[this.Size()-1]=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"Last\",{get:function(){return this._nodes[0]},set:function(t){this._nodes[0]=t},enumerable:!1,configurable:!0}),t.prototype.Peek=function(t){return null==t&&(t=1),this._nodes.slice(this.Size()-t)},t.prototype.Size=function(){return this._nodes.length},t.prototype.Clear=function(){this._nodes=[]},t.prototype.toMml=function(t,e){return void 0===t&&(t=!0),1!==this._nodes.length||e?this.create(\"node\",t?\"inferredMrow\":\"mrow\",this._nodes,{}):this.First},t.prototype.create=function(t){for(var e,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return(e=this.factory.configuration.nodeFactory).create.apply(e,o([t],r))},t}();e.MmlStack=u;var c=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var a=t.call(this,r)||this;return a.factory=e,a.global={},a._properties={},a.isOpen&&(a._env={}),a}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"base\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"env\",{get:function(){return this._env},set:function(t){this._env=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"copyEnv\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.getProperty=function(t){return this._properties[t]},e.prototype.setProperty=function(t,e){return this._properties[t]=e,this},Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isFinal\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.isKind=function(t){return t===this.kind},e.prototype.checkItem=function(t){if(t.isKind(\"over\")&&this.isOpen&&(t.setProperty(\"num\",this.toMml(!1)),this.Clear()),t.isKind(\"cell\")&&this.isOpen){if(t.getProperty(\"linebreak\"))return e.fail;throw new l.default(\"Misplaced\",\"Misplaced %1\",t.getName())}if(t.isClose&&this.getErrors(t.kind)){var r=i(this.getErrors(t.kind),2),n=r[0],a=r[1];throw new l.default(n,a,t.getName())}return t.isFinal?(this.Push(t.First),e.fail):e.success},e.prototype.clearEnv=function(){var t,e;try{for(var r=s(Object.keys(this.env)),n=r.next();!n.done;n=r.next()){var a=n.value;delete this.env[a]}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.setProperties=function(t){return Object.assign(this._properties,t),this},e.prototype.getName=function(){return this.getProperty(\"name\")},e.prototype.toString=function(){return this.kind+\"[\"+this.nodes.join(\"; \")+\"]\"},e.prototype.getErrors=function(t){return(this.constructor.errors||{})[t]||e.errors[t]},e.fail=[null,!1],e.success=[null,!0],e.errors={end:[\"MissingBeginExtraEnd\",\"Missing \\\\begin{%1} or extra \\\\end{%1}\"],close:[\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"],right:[\"MissingLeftExtraRight\",\"Missing \\\\left or extra \\\\right\"]},e}(u);e.BaseItem=c},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(i(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.EquationItem=e.EqnArrayItem=e.ArrayItem=e.DotsItem=e.NotItem=e.FnItem=e.MmlItem=e.CellItem=e.PositionItem=e.StyleItem=e.EndItem=e.BeginItem=e.RightItem=e.LeftItem=e.OverItem=e.SubsupItem=e.PrimeItem=e.CloseItem=e.OpenItem=e.StopItem=e.StartItem=void 0;var s=r(12),l=r(11),u=r(5),c=r(0),f=r(3),p=r(1),d=r(13),h=function(t){function e(e,r){var n=t.call(this,e)||this;return n.global=r,n}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"start\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"stop\")){var r=this.toMml();return this.global.isInner||(r=this.factory.configuration.tags.finalize(r,this.env)),[[this.factory.create(\"mml\",r)],!0]}return t.prototype.checkItem.call(this,e)},e}(d.BaseItem);e.StartItem=h;var m=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"stop\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.StopItem=m;var g=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"open\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"close\")){var r=this.toMml(),n=this.create(\"node\",\"TeXAtom\",[r]);return[[this.factory.create(\"mml\",n)],!0]}return t.prototype.checkItem.call(this,e)},e.errors=Object.assign(Object.create(d.BaseItem.errors),{stop:[\"ExtraOpenMissingClose\",\"Extra open brace or missing close brace\"]}),e}(d.BaseItem);e.OpenItem=g;var y=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"close\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.CloseItem=y;var v=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"prime\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){var e=i(this.Peek(2),2),r=e[0],n=e[1];return!p.default.isType(r,\"msubsup\")||p.default.isType(r,\"msup\")?[[this.create(\"node\",\"msup\",[r,n]),t],!0]:(p.default.setChild(r,r.sup,n),[[r,t],!0])},e}(d.BaseItem);e.PrimeItem=v;var b=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"subsup\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"open\")||e.isKind(\"left\"))return d.BaseItem.success;var r=this.First,n=this.getProperty(\"position\");if(e.isKind(\"mml\")){if(this.getProperty(\"primes\"))if(2!==n)p.default.setChild(r,2,this.getProperty(\"primes\"));else{p.default.setProperty(this.getProperty(\"primes\"),\"variantForm\",!0);var a=this.create(\"node\",\"mrow\",[this.getProperty(\"primes\"),e.First]);e.First=a}return p.default.setChild(r,n,e.First),null!=this.getProperty(\"movesupsub\")&&p.default.setProperty(r,\"movesupsub\",this.getProperty(\"movesupsub\")),[[this.factory.create(\"mml\",r)],!0]}if(t.prototype.checkItem.call(this,e)[1]){var i=this.getErrors([\"\",\"sub\",\"sup\"][n]);throw new(c.default.bind.apply(c.default,o([void 0,i[0],i[1]],i.splice(2))))}return null},e.errors=Object.assign(Object.create(d.BaseItem.errors),{stop:[\"MissingScript\",\"Missing superscript or subscript argument\"],sup:[\"MissingOpenForSup\",\"Missing open brace for superscript\"],sub:[\"MissingOpenForSub\",\"Missing open brace for subscript\"]}),e}(d.BaseItem);e.SubsupItem=b;var A=function(t){function e(e){var r=t.call(this,e)||this;return r.setProperty(\"name\",\"\\\\over\"),r}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"over\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"over\"))throw new c.default(\"AmbiguousUseOf\",\"Ambiguous use of %1\",e.getName());if(e.isClose){var r=this.create(\"node\",\"mfrac\",[this.getProperty(\"num\"),this.toMml(!1)]);return null!=this.getProperty(\"thickness\")&&p.default.setAttribute(r,\"linethickness\",this.getProperty(\"thickness\")),(this.getProperty(\"open\")||this.getProperty(\"close\"))&&(p.default.setProperty(r,\"withDelims\",!0),r=f.default.fixedFence(this.factory.configuration,this.getProperty(\"open\"),r,this.getProperty(\"close\"))),[[this.factory.create(\"mml\",r),e],!0]}return t.prototype.checkItem.call(this,e)},e.prototype.toString=function(){return\"over[\"+this.getProperty(\"num\")+\" / \"+this.nodes.join(\"; \")+\"]\"},e}(d.BaseItem);e.OverItem=A;var M=function(t){function e(e){var r=t.call(this,e)||this;return r.setProperty(\"delim\",\"(\"),r}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"left\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){return e.isKind(\"right\")?[[this.factory.create(\"mml\",f.default.fenced(this.factory.configuration,this.getProperty(\"delim\"),this.toMml(),e.getProperty(\"delim\")))],!0]:t.prototype.checkItem.call(this,e)},e.errors=Object.assign(Object.create(d.BaseItem.errors),{stop:[\"ExtraLeftMissingRight\",\"Extra \\\\left or missing \\\\right\"]}),e}(d.BaseItem);e.LeftItem=M;var x=function(t){function e(e){var r=t.call(this,e)||this;return r.setProperty(\"delim\",\")\"),r}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"right\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.RightItem=x;var T=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"begin\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){if(e.getName()!==this.getName())throw new c.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),e.getName());return this.getProperty(\"end\")?d.BaseItem.fail:[[this.factory.create(\"mml\",this.toMml())],!0]}if(e.isKind(\"stop\"))throw new c.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(d.BaseItem);e.BeginItem=T;var w=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"end\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.EndItem=w;var S=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"style\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(!e.isClose)return t.prototype.checkItem.call(this,e);var r=this.create(\"node\",\"mstyle\",this.nodes,this.getProperty(\"styles\"));return[[this.factory.create(\"mml\",r),e],!0]},e}(d.BaseItem);e.StyleItem=S;var P=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"position\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isClose)throw new c.default(\"MissingBoxFor\",\"Missing box for %1\",this.getName());if(e.isFinal){var r=e.toMml();switch(this.getProperty(\"move\")){case\"vertical\":return r=this.create(\"node\",\"mpadded\",[r],{height:this.getProperty(\"dh\"),depth:this.getProperty(\"dd\"),voffset:this.getProperty(\"dh\")}),[[this.factory.create(\"mml\",r)],!0];case\"horizontal\":return[[this.factory.create(\"mml\",this.getProperty(\"left\")),e,this.factory.create(\"mml\",this.getProperty(\"right\"))],!0]}}return t.prototype.checkItem.call(this,e)},e}(d.BaseItem);e.PositionItem=P;var C=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"cell\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.CellItem=C;var O=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"isFinal\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mml\"},enumerable:!1,configurable:!0}),e}(d.BaseItem);e.MmlItem=O;var E=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"fn\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){var r=this.First;if(r){if(e.isOpen)return d.BaseItem.success;if(!e.isKind(\"fn\")){var n=e.First;if(!e.isKind(\"mml\")||!n)return[[r,e],!0];if(p.default.isType(n,\"mstyle\")&&n.childNodes.length&&p.default.isType(n.childNodes[0].childNodes[0],\"mspace\")||p.default.isType(n,\"mspace\"))return[[r,e],!0];p.default.isEmbellished(n)&&(n=p.default.getCoreMO(n));var a=p.default.getForm(n);if(null!=a&&[0,0,1,1,0,1,1,0,0,0][a[2]])return[[r,e],!0]}var i=this.create(\"token\",\"mo\",{texClass:u.TEXCLASS.NONE},l.entities.ApplyFunction);return[[r,i,e],!0]}return t.prototype.checkItem.apply(this,arguments)},e}(d.BaseItem);e.FnItem=E;var k=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.remap=s.MapHandler.getMap(\"not_remap\"),e}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"not\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){var e,r,n;if(t.isKind(\"open\")||t.isKind(\"left\"))return d.BaseItem.success;if(t.isKind(\"mml\")&&(p.default.isType(t.First,\"mo\")||p.default.isType(t.First,\"mi\")||p.default.isType(t.First,\"mtext\"))&&(e=t.First,1===(r=p.default.getText(e)).length&&!p.default.getProperty(e,\"movesupsub\")&&1===p.default.getChildren(e).length))return this.remap.contains(r)?(n=this.create(\"text\",this.remap.lookup(r).char),p.default.setChild(e,0,n)):(n=this.create(\"text\",\"\\u0338\"),p.default.appendChildren(e,[n])),[[t],!0];n=this.create(\"text\",\"\\u29f8\");var a=this.create(\"node\",\"mtext\",[],{},n),i=this.create(\"node\",\"mpadded\",[a],{width:0});return[[e=this.create(\"node\",\"TeXAtom\",[i],{texClass:u.TEXCLASS.REL}),t],!0]},e}(d.BaseItem);e.NotItem=k;var _=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"dots\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){if(t.isKind(\"open\")||t.isKind(\"left\"))return d.BaseItem.success;var e=this.getProperty(\"ldots\"),r=t.First;if(t.isKind(\"mml\")&&p.default.isEmbellished(r)){var n=p.default.getTexClass(p.default.getCoreMO(r));n!==u.TEXCLASS.BIN&&n!==u.TEXCLASS.REL||(e=this.getProperty(\"cdots\"))}return[[e,t],!0]},e}(d.BaseItem);e.DotsItem=_;var I=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.table=[],e.row=[],e.frame=[],e.hfill=[],e.arraydef={},e.dashed=!1,e}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"array\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"copyEnv\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isClose&&!e.isKind(\"over\")){if(e.getProperty(\"isEntry\"))return this.EndEntry(),this.clearEnv(),d.BaseItem.fail;if(e.getProperty(\"isCR\"))return this.EndEntry(),this.EndRow(),this.clearEnv(),d.BaseItem.fail;this.EndTable(),this.clearEnv();var r=this.arraydef.scriptlevel;delete this.arraydef.scriptlevel;var n=this.create(\"node\",\"mtable\",this.table,this.arraydef);4===this.frame.length?p.default.setAttribute(n,\"frame\",this.dashed?\"dashed\":\"solid\"):this.frame.length&&(this.arraydef.rowlines&&(this.arraydef.rowlines=this.arraydef.rowlines.replace(/none( none)+$/,\"none\")),n=this.create(\"node\",\"menclose\",[n],{notation:this.frame.join(\" \"),isFrame:!0}),\"none\"===(this.arraydef.columnlines||\"none\")&&\"none\"===(this.arraydef.rowlines||\"none\")||p.default.setAttribute(n,\"padding\",0)),r&&(n=this.create(\"node\",\"mstyle\",[n],{scriptlevel:r})),(this.getProperty(\"open\")||this.getProperty(\"close\"))&&(n=f.default.fenced(this.factory.configuration,this.getProperty(\"open\"),n,this.getProperty(\"close\")));var a=this.factory.create(\"mml\",n);if(this.getProperty(\"requireClose\")){if(e.isKind(\"close\"))return[[a],!0];throw new c.default(\"MissingCloseBrace\",\"Missing close brace\")}return[[a,e],!0]}return t.prototype.checkItem.call(this,e)},e.prototype.EndEntry=function(){var t=this.create(\"node\",\"mtd\",this.nodes);this.hfill.length&&(0===this.hfill[0]&&p.default.setAttribute(t,\"columnalign\",\"right\"),this.hfill[this.hfill.length-1]===this.Size()&&p.default.setAttribute(t,\"columnalign\",p.default.getAttribute(t,\"columnalign\")?\"center\":\"left\")),this.row.push(t),this.Clear(),this.hfill=[]},e.prototype.EndRow=function(){var t;this.getProperty(\"isNumbered\")&&3===this.row.length?(this.row.unshift(this.row.pop()),t=this.create(\"node\",\"mlabeledtr\",this.row)):t=this.create(\"node\",\"mtr\",this.row),this.table.push(t),this.row=[]},e.prototype.EndTable=function(){(this.Size()||this.row.length)&&(this.EndEntry(),this.EndRow()),this.checkLines()},e.prototype.checkLines=function(){if(this.arraydef.rowlines){var t=this.arraydef.rowlines.split(/ /);t.length===this.table.length?(this.frame.push(\"bottom\"),t.pop(),this.arraydef.rowlines=t.join(\" \")):t.length<this.table.length-1&&(this.arraydef.rowlines+=\" none\")}if(this.getProperty(\"rowspacing\")){for(var e=this.arraydef.rowspacing.split(/ /);e.length<this.table.length;)e.push(this.getProperty(\"rowspacing\")+\"em\");this.arraydef.rowspacing=e.join(\" \")}},e}(d.BaseItem);e.ArrayItem=I;var N=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var a=t.call(this,e)||this;return a.factory.configuration.tags.start(r[0],r[2],r[1]),a}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"eqnarray\"},enumerable:!1,configurable:!0}),e.prototype.EndEntry=function(){this.row.length&&f.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.create(\"node\",\"mtd\",this.nodes);this.row.push(t),this.Clear()},e.prototype.EndRow=function(){var t=\"mtr\",e=this.factory.configuration.tags.getTag();e&&(this.row=[e].concat(this.row),t=\"mlabeledtr\"),this.factory.configuration.tags.clearTag();var r=this.create(\"node\",t,this.row);this.table.push(r),this.row=[]},e.prototype.EndTable=function(){t.prototype.EndTable.call(this),this.factory.configuration.tags.end()},e}(I);e.EqnArrayItem=N;var L=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var a=t.call(this,e)||this;return a.factory.configuration.tags.start(\"equation\",!0,r[0]),a}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"equation\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){var r=this.toMml(),n=this.factory.configuration.tags.getTag();return this.factory.configuration.tags.end(),[[n?this.factory.configuration.tags.enTag(r,n):r,e],!0]}if(e.isKind(\"stop\"))throw new c.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(d.BaseItem);e.EquationItem=L},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0});var a=r(14),i=r(1),o=r(0),s=r(8),l=r(7),u=r(3),c=r(5),f=r(9),p=r(11);r(33),r(49),r(50);var d={},h={fontfamily:1,fontsize:1,fontweight:1,fontstyle:1,color:1,background:1,id:1,class:1,href:1,style:1};function m(t,e){var r=t.stack.env,n=r.inRoot;r.inRoot=!0;var a=new s.default(e,r,t.configuration),i=a.mml(),o=a.stack.global;if(o.leftRoot||o.upRoot){var l={};o.leftRoot&&(l.width=o.leftRoot),o.upRoot&&(l.voffset=o.upRoot,l.height=o.upRoot),i=t.create(\"node\",\"mpadded\",[i],l)}return r.inRoot=n,i}d.Open=function(t,e){t.Push(t.itemFactory.create(\"open\"))},d.Close=function(t,e){t.Push(t.itemFactory.create(\"close\"))},d.Tilde=function(t,e){t.Push(t.create(\"token\",\"mtext\",{},p.entities.nbsp))},d.Space=function(t,e){},d.Superscript=function(t,e){var r,a,s;t.GetNext().match(/\\d/)&&(t.string=t.string.substr(0,t.i+1)+\" \"+t.string.substr(t.i+1));var l=t.stack.Top();l.isKind(\"prime\")?(s=(r=n(l.Peek(2),2))[0],a=r[1],t.stack.Pop()):(s=t.stack.Prev())||(s=t.create(\"token\",\"mi\",{},\"\"));var u=i.default.getProperty(s,\"movesupsub\"),c=i.default.isType(s,\"msubsup\")?s.sup:s.over;if(i.default.isType(s,\"msubsup\")&&!i.default.isType(s,\"msup\")&&i.default.getChildAt(s,s.sup)||i.default.isType(s,\"munderover\")&&!i.default.isType(s,\"mover\")&&i.default.getChildAt(s,s.over)&&!i.default.getProperty(s,\"subsupOK\"))throw new o.default(\"DoubleExponent\",\"Double exponent: use braces to clarify\");i.default.isType(s,\"msubsup\")&&!i.default.isType(s,\"msup\")||(u?((!i.default.isType(s,\"munderover\")||i.default.isType(s,\"mover\")||i.default.getChildAt(s,s.over))&&(s=t.create(\"node\",\"munderover\",[s],{movesupsub:!0})),c=s.over):c=(s=t.create(\"node\",\"msubsup\",[s])).sup),t.Push(t.itemFactory.create(\"subsup\",s).setProperties({position:c,primes:a,movesupsub:u}))},d.Subscript=function(t,e){var r,a,s;t.GetNext().match(/\\d/)&&(t.string=t.string.substr(0,t.i+1)+\" \"+t.string.substr(t.i+1));var l=t.stack.Top();l.isKind(\"prime\")?(s=(r=n(l.Peek(2),2))[0],a=r[1],t.stack.Pop()):(s=t.stack.Prev())||(s=t.create(\"token\",\"mi\",{},\"\"));var u=i.default.getProperty(s,\"movesupsub\"),c=i.default.isType(s,\"msubsup\")?s.sub:s.under;if(i.default.isType(s,\"msubsup\")&&!i.default.isType(s,\"msup\")&&i.default.getChildAt(s,s.sub)||i.default.isType(s,\"munderover\")&&!i.default.isType(s,\"mover\")&&i.default.getChildAt(s,s.under)&&!i.default.getProperty(s,\"subsupOK\"))throw new o.default(\"DoubleSubscripts\",\"Double subscripts: use braces to clarify\");i.default.isType(s,\"msubsup\")&&!i.default.isType(s,\"msup\")||(u?((!i.default.isType(s,\"munderover\")||i.default.isType(s,\"mover\")||i.default.getChildAt(s,s.under))&&(s=t.create(\"node\",\"munderover\",[s],{movesupsub:!0})),c=s.under):c=(s=t.create(\"node\",\"msubsup\",[s])).sub),t.Push(t.itemFactory.create(\"subsup\",s).setProperties({position:c,primes:a,movesupsub:u}))},d.Prime=function(t,e){var r=t.stack.Prev();if(r||(r=t.create(\"node\",\"mi\")),i.default.isType(r,\"msubsup\")&&!i.default.isType(r,\"msup\")&&i.default.getChildAt(r,r.sup))throw new o.default(\"DoubleExponentPrime\",\"Prime causes double exponent: use braces to clarify\");var n=\"\";t.i--;do{n+=p.entities.prime,t.i++,e=t.GetNext()}while(\"'\"===e||e===p.entities.rquote);n=[\"\",\"\\u2032\",\"\\u2033\",\"\\u2034\",\"\\u2057\"][n.length]||n;var a=t.create(\"token\",\"mo\",{},n);t.Push(t.itemFactory.create(\"prime\",r,a))},d.Comment=function(t,e){for(;t.i<t.string.length&&\"\\n\"!==t.string.charAt(t.i);)t.i++},d.Hash=function(t,e){throw new o.default(\"CantUseHash1\",\"You can't use 'macro parameter character #' in math mode\")},d.SetFont=function(t,e,r){t.stack.env.font=r},d.SetStyle=function(t,e,r,n,a){t.stack.env.style=r,t.stack.env.level=a,t.Push(t.itemFactory.create(\"style\").setProperty(\"styles\",{displaystyle:n,scriptlevel:a}))},d.SetSize=function(t,e,r){t.stack.env.size=r,t.Push(t.itemFactory.create(\"style\").setProperty(\"styles\",{mathsize:r+\"em\"}))},d.Spacer=function(t,e,r){var n=t.create(\"node\",\"mspace\",[],{width:r}),a=t.create(\"node\",\"mstyle\",[n],{scriptlevel:0});t.Push(a)},d.LeftRight=function(t,e){var r=e.substr(1);t.Push(t.itemFactory.create(r).setProperty(\"delim\",t.GetDelimiter(e)))},d.Middle=function(t,e){var r=t.GetDelimiter(e),n=t.create(\"node\",\"TeXAtom\",[],{texClass:c.TEXCLASS.CLOSE});if(t.Push(n),!t.stack.Top().isKind(\"left\"))throw new o.default(\"MisplacedMiddle\",\"%1 must be within \\\\left and \\\\right\",t.currentCS);n=t.create(\"token\",\"mo\",{stretchy:!0},r),t.Push(n),n=t.create(\"node\",\"TeXAtom\",[],{texClass:c.TEXCLASS.OPEN}),t.Push(n)},d.NamedFn=function(t,e,r){r||(r=e.substr(1));var n=t.create(\"token\",\"mi\",{texClass:c.TEXCLASS.OP},r);t.Push(t.itemFactory.create(\"fn\",n))},d.NamedOp=function(t,e,r){r||(r=e.substr(1)),r=r.replace(/&thinsp;/,\"\\u2006\");var n=t.create(\"token\",\"mo\",{movablelimits:!0,movesupsub:!0,form:l.TexConstant.Form.PREFIX,texClass:c.TEXCLASS.OP},r);t.Push(n)},d.Limits=function(t,e,r){var n=t.stack.Prev(!0);if(!n||i.default.getTexClass(i.default.getCoreMO(n))!==c.TEXCLASS.OP&&null==i.default.getProperty(n,\"movesupsub\"))throw new o.default(\"MisplacedLimits\",\"%1 is allowed only on operators\",t.currentCS);var a,s=t.stack.Top();i.default.isType(n,\"munderover\")&&!r?(a=t.create(\"node\",\"msubsup\"),i.default.copyChildren(n,a),n=s.Last=a):i.default.isType(n,\"msubsup\")&&r&&(a=t.create(\"node\",\"munderover\"),i.default.copyChildren(n,a),n=s.Last=a),i.default.setProperty(n,\"movesupsub\",!!r),i.default.setProperties(i.default.getCoreMO(n),{movablelimits:!1}),(i.default.getAttribute(n,\"movablelimits\")||i.default.getProperty(n,\"movablelimits\"))&&i.default.setProperties(n,{movablelimits:!1})},d.Over=function(t,e,r,n){var a=t.itemFactory.create(\"over\").setProperty(\"name\",t.currentCS);r||n?(a.setProperty(\"open\",r),a.setProperty(\"close\",n)):e.match(/withdelims$/)&&(a.setProperty(\"open\",t.GetDelimiter(e)),a.setProperty(\"close\",t.GetDelimiter(e))),e.match(/^\\\\above/)?a.setProperty(\"thickness\",t.GetDimen(e)):(e.match(/^\\\\atop/)||r||n)&&a.setProperty(\"thickness\",0),t.Push(a)},d.Frac=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e),a=t.create(\"node\",\"mfrac\",[r,n]);t.Push(a)},d.Sqrt=function(t,e){var r=t.GetBrackets(e),n=t.GetArgument(e);\"\\\\frac\"===n&&(n+=\"{\"+t.GetArgument(n)+\"}{\"+t.GetArgument(n)+\"}\");var a=new s.default(n,t.stack.env,t.configuration).mml();a=r?t.create(\"node\",\"mroot\",[a,m(t,r)]):t.create(\"node\",\"msqrt\",[a]),t.Push(a)},d.Root=function(t,e){var r=t.GetUpTo(e,\"\\\\of\"),n=t.ParseArg(e),a=t.create(\"node\",\"mroot\",[n,m(t,r)]);t.Push(a)},d.MoveRoot=function(t,e,r){if(!t.stack.env.inRoot)throw new o.default(\"MisplacedMoveRoot\",\"%1 can appear only within a root\",t.currentCS);if(t.stack.global[r])throw new o.default(\"MultipleMoveRoot\",\"Multiple use of %1\",t.currentCS);var n=t.GetArgument(e);if(!n.match(/-?[0-9]+/))throw new o.default(\"IntegerArg\",\"The argument to %1 must be an integer\",t.currentCS);\"-\"!==(n=parseInt(n,10)/15+\"em\").substr(0,1)&&(n=\"+\"+n),t.stack.global[r]=n},d.Accent=function(t,e,r,n){var a=t.ParseArg(e),o=u.default.getFontDef(t);o.accent=!0;var s=i.default.createEntity(r),l=t.create(\"token\",\"mo\",o,s);i.default.setAttribute(l,\"stretchy\",!!n);var c=i.default.isEmbellished(a)?i.default.getCoreMO(a):a;i.default.isType(c,\"mo\")&&i.default.setProperties(c,{movablelimits:!1});var f=t.create(\"node\",\"munderover\");i.default.setChild(f,0,a),i.default.setChild(f,1,null),i.default.setChild(f,2,l);var p=t.create(\"node\",\"TeXAtom\",[f]);t.Push(p)},d.UnderOver=function(t,e,r,n,a){var o,s=t.ParseArg(e),l=i.default.getForm(s);(l&&l[3]&&l[3].movablelimits||i.default.getProperty(s,\"movablelimits\"))&&i.default.setProperties(s,{movablelimits:!1}),i.default.isType(s,\"munderover\")&&i.default.isEmbellished(s)&&(i.default.setProperties(i.default.getCoreMO(s),{lspace:0,rspace:0}),o=t.create(\"node\",\"mo\",[],{rspace:0}),s=t.create(\"node\",\"mrow\",[o,s]));var u=t.create(\"node\",\"munderover\",[s]),f=i.default.createEntity(r);o=t.create(\"token\",\"mo\",{stretchy:!0,accent:!a},f),i.default.setChild(u,\"o\"===e.charAt(1)?u.over:u.under,o);var p=u;n&&(p=t.create(\"node\",\"TeXAtom\",[u],{texClass:c.TEXCLASS.OP,movesupsub:!0})),i.default.setProperty(p,\"subsupOK\",!0),t.Push(p)},d.Overset=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e);(i.default.getAttribute(n,\"movablelimits\")||i.default.getProperty(n,\"movablelimits\"))&&i.default.setProperties(n,{movablelimits:!1});var a=t.create(\"node\",\"mover\",[n,r]);t.Push(a)},d.Underset=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e);(i.default.isType(n,\"mo\")||i.default.getProperty(n,\"movablelimits\"))&&i.default.setProperties(n,{movablelimits:!1});var a=t.create(\"node\",\"munder\",[n,r]);t.Push(a)},d.TeXAtom=function(t,e,r){var n,a,i,o={texClass:r};if(r===c.TEXCLASS.OP){o.movesupsub=o.movablelimits=!0;var u=t.GetArgument(e),f=u.match(/^\\s*\\\\rm\\s+([a-zA-Z0-9 ]+)$/);f?(o.mathvariant=l.TexConstant.Variant.NORMAL,a=t.create(\"token\",\"mi\",o,f[1])):(i=new s.default(u,t.stack.env,t.configuration).mml(),a=t.create(\"node\",\"TeXAtom\",[i],o)),n=t.itemFactory.create(\"fn\",a)}else i=t.ParseArg(e),n=t.create(\"node\",\"TeXAtom\",[i],o);t.Push(n)},d.MmlToken=function(t,e){var r,n=t.GetArgument(e),a=t.GetBrackets(e,\"\").replace(/^\\s+/,\"\"),s=t.GetArgument(e),l={};try{r=t.create(\"node\",n)}catch(t){r=null}if(!r||!r.isToken)throw new o.default(\"NotMathMLToken\",\"%1 is not a token element\",n);for(;\"\"!==a;){var c=a.match(/^([a-z]+)\\s*=\\s*('[^']*'|\"[^\"]*\"|[^ ,]*)\\s*,?\\s*/i);if(!c)throw new o.default(\"InvalidMathMLAttr\",\"Invalid MathML attribute: %1\",a);if(!r.attributes.hasDefault(c[1])&&!h[c[1]])throw new o.default(\"UnknownAttrForElement\",\"%1 is not a recognized attribute for %2\",c[1],n);var f=u.default.MmlFilterAttribute(t,c[1],c[2].replace(/^(['\"])(.*)\\1$/,\"$2\"));f&&(\"true\"===f.toLowerCase()?f=!0:\"false\"===f.toLowerCase()&&(f=!1),l[c[1]]=f),a=a.substr(c[0].length)}var p=t.create(\"text\",s);r.appendChild(p),i.default.setProperties(r,l),t.Push(r)},d.Strut=function(t,e){var r=t.create(\"node\",\"mrow\"),n=t.create(\"node\",\"mpadded\",[r],{height:\"8.6pt\",depth:\"3pt\",width:0});t.Push(n)},d.Phantom=function(t,e,r,n){var a=t.create(\"node\",\"mphantom\",[t.ParseArg(e)]);(r||n)&&(a=t.create(\"node\",\"mpadded\",[a]),n&&(i.default.setAttribute(a,\"height\",0),i.default.setAttribute(a,\"depth\",0)),r&&i.default.setAttribute(a,\"width\",0));var o=t.create(\"node\",\"TeXAtom\",[a]);t.Push(o)},d.Smash=function(t,e){var r=u.default.trimSpaces(t.GetBrackets(e,\"\")),n=t.create(\"node\",\"mpadded\",[t.ParseArg(e)]);switch(r){case\"b\":i.default.setAttribute(n,\"depth\",0);break;case\"t\":i.default.setAttribute(n,\"height\",0);break;default:i.default.setAttribute(n,\"height\",0),i.default.setAttribute(n,\"depth\",0)}var a=t.create(\"node\",\"TeXAtom\",[n]);t.Push(a)},d.Lap=function(t,e){var r=t.create(\"node\",\"mpadded\",[t.ParseArg(e)],{width:0});\"\\\\llap\"===e&&i.default.setAttribute(r,\"lspace\",\"-1width\");var n=t.create(\"node\",\"TeXAtom\",[r]);t.Push(n)},d.RaiseLower=function(t,e){var r=t.GetDimen(e),n=t.itemFactory.create(\"position\").setProperties({name:t.currentCS,move:\"vertical\"});\"-\"===r.charAt(0)&&(r=r.slice(1),e=\"raise\"===e.substr(1)?\"\\\\lower\":\"\\\\raise\"),\"\\\\lower\"===e?(n.setProperty(\"dh\",\"-\"+r),n.setProperty(\"dd\",\"+\"+r)):(n.setProperty(\"dh\",\"+\"+r),n.setProperty(\"dd\",\"-\"+r)),t.Push(n)},d.MoveLeftRight=function(t,e){var r=t.GetDimen(e),n=\"-\"===r.charAt(0)?r.slice(1):\"-\"+r;if(\"\\\\moveleft\"===e){var a=r;r=n,n=a}t.Push(t.itemFactory.create(\"position\").setProperties({name:t.currentCS,move:\"horizontal\",left:t.create(\"node\",\"mspace\",[],{width:r}),right:t.create(\"node\",\"mspace\",[],{width:n})}))},d.Hskip=function(t,e){var r=t.create(\"node\",\"mspace\",[],{width:t.GetDimen(e)});t.Push(r)},d.Rule=function(t,e,r){var n={width:t.GetDimen(e),height:t.GetDimen(e),depth:t.GetDimen(e)};\"blank\"!==r&&(n.mathbackground=t.stack.env.color||\"black\");var a=t.create(\"node\",\"mspace\",[],n);t.Push(a)},d.rule=function(t,e){var r=t.GetBrackets(e),n=t.GetDimen(e),a=t.GetDimen(e),o=t.create(\"node\",\"mspace\",[],{width:n,height:a,mathbackground:t.stack.env.color||\"black\"});r&&(o=t.create(\"node\",\"mpadded\",[o],{voffset:r}),r.match(/^\\-/)?(i.default.setAttribute(o,\"height\",r),i.default.setAttribute(o,\"depth\",\"+\"+r.substr(1))):i.default.setAttribute(o,\"height\",\"+\"+r)),t.Push(o)},d.MakeBig=function(t,e,r,n){var a=String(n*=1.411764705882353).replace(/(\\.\\d\\d\\d).+/,\"$1\")+\"em\",i=t.GetDelimiter(e,!0),o=t.create(\"token\",\"mo\",{minsize:a,maxsize:a,fence:!0,stretchy:!0,symmetric:!0},i),s=t.create(\"node\",\"TeXAtom\",[o],{texClass:r});t.Push(s)},d.BuildRel=function(t,e){var r=t.ParseUpTo(e,\"\\\\over\"),n=t.ParseArg(e),a=t.create(\"node\",\"munderover\");i.default.setChild(a,0,n),i.default.setChild(a,1,null),i.default.setChild(a,2,r);var o=t.create(\"node\",\"TeXAtom\",[a],{texClass:c.TEXCLASS.REL});t.Push(o)},d.HBox=function(t,e,r,n){t.PushAll(u.default.internalMath(t,t.GetArgument(e),r,n))},d.FBox=function(t,e){var r=u.default.internalMath(t,t.GetArgument(e)),n=t.create(\"node\",\"menclose\",r,{notation:\"box\"});t.Push(n)},d.Not=function(t,e){t.Push(t.itemFactory.create(\"not\"))},d.Dots=function(t,e){var r=i.default.createEntity(\"2026\"),n=i.default.createEntity(\"22EF\"),a=t.create(\"token\",\"mo\",{stretchy:!1},r),o=t.create(\"token\",\"mo\",{stretchy:!1},n);t.Push(t.itemFactory.create(\"dots\").setProperties({ldots:a,cdots:o}))},d.Matrix=function(t,e,r,n,a,i,s,l,u,c){var f=t.GetNext();if(\"\"===f)throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);\"{\"===f?t.i++:(t.string=f+\"}\"+t.string.slice(t.i+1),t.i=0);var p=t.itemFactory.create(\"array\").setProperty(\"requireClose\",!0);p.arraydef={rowspacing:s||\"4pt\",columnspacing:i||\"1em\"},u&&p.setProperty(\"isCases\",!0),c&&(p.setProperty(\"isNumbered\",!0),p.arraydef.side=c),(r||n)&&(p.setProperty(\"open\",r),p.setProperty(\"close\",n)),\"D\"===l&&(p.arraydef.displaystyle=!0),null!=a&&(p.arraydef.columnalign=a),t.Push(p)},d.Entry=function(t,e){if(t.Push(t.itemFactory.create(\"cell\").setProperties({isEntry:!0,name:e})),t.stack.Top().getProperty(\"isCases\")){for(var r=t.string,n=0,a=-1,i=t.i,s=r.length;i<s;){var l=r.charAt(i);if(\"{\"===l)n++,i++;else if(\"}\"===l)0===n?s=0:(0===--n&&a<0&&(a=i-t.i),i++);else{if(\"&\"===l&&0===n)throw new o.default(\"ExtraAlignTab\",\"Extra alignment tab in \\\\cases text\");\"\\\\\"===l?r.substr(i).match(/^((\\\\cr)[^a-zA-Z]|\\\\\\\\)/)?s=0:i+=2:i++}}var c=r.substr(t.i,i-t.i);if(!c.match(/^\\s*\\\\text[^a-zA-Z]/)||a!==c.replace(/\\s+$/,\"\").length-1){var f=u.default.internalMath(t,c,0);t.PushAll(f),t.i=i}}},d.Cr=function(t,e){t.Push(t.itemFactory.create(\"cell\").setProperties({isCR:!0,name:e}))},d.CrLaTeX=function(t,e,r){var i;if(void 0===r&&(r=!1),!r&&\"[\"===t.string.charAt(t.i)){var s=t.GetBrackets(e,\"\"),c=n(u.default.matchDimen(s),2),f=c[0],p=c[1];if(s&&!f)throw new o.default(\"BracketMustBeDimension\",\"Bracket argument to %1 must be a dimension\",t.currentCS);i=f+p}t.Push(t.itemFactory.create(\"cell\").setProperties({isCR:!0,name:e,linebreak:!0}));var d,h=t.stack.Top();if(h instanceof a.ArrayItem){if(i&&h.arraydef.rowspacing){var m=h.arraydef.rowspacing.split(/ /);if(!h.getProperty(\"rowspacing\")){var g=u.default.dimen2em(m[0]);h.setProperty(\"rowspacing\",g)}for(var y=h.getProperty(\"rowspacing\");m.length<h.table.length;)m.push(u.default.Em(y));m[h.table.length-1]=u.default.Em(Math.max(0,y+u.default.dimen2em(i))),h.arraydef.rowspacing=m.join(\" \")}}else i&&(d=t.create(\"node\",\"mspace\",[],{depth:i}),t.Push(d)),d=t.create(\"node\",\"mspace\",[],{linebreak:l.TexConstant.LineBreak.NEWLINE}),t.Push(d)},d.HLine=function(t,e,r){null==r&&(r=\"solid\");var n=t.stack.Top();if(!(n instanceof a.ArrayItem)||n.Size())throw new o.default(\"Misplaced\",\"Misplaced %1\",t.currentCS);if(n.table.length){for(var i=n.arraydef.rowlines?n.arraydef.rowlines.split(/ /):[];i.length<n.table.length;)i.push(\"none\");i[n.table.length-1]=r,n.arraydef.rowlines=i.join(\" \")}else n.frame.push(\"top\")},d.HFill=function(t,e){var r=t.stack.Top();if(!(r instanceof a.ArrayItem))throw new o.default(\"UnsupportedHFill\",\"Unsupported use of %1\",t.currentCS);r.hfill.push(r.Size())},d.BeginEnd=function(t,e){var r=t.GetArgument(e);if(r.match(/\\\\/i))throw new o.default(\"InvalidEnv\",\"Invalid environment name '%1'\",r);var n=t.configuration.handlers.get(\"environment\").lookup(r);if(n&&\"\\\\end\"===e){if(!n.args[0]){var a=t.itemFactory.create(\"end\").setProperty(\"name\",r);return void t.Push(a)}t.stack.env.closing=r}if(++t.macroCount>t.configuration.options.maxMacros)throw new o.default(\"MaxMacroSub2\",\"MathJax maximum substitution count exceeded; is there a recursive latex environment?\");t.parse(\"environment\",[t,r])},d.Array=function(t,e,r,n,a,i,o,s,l){a||(a=t.GetArgument(\"\\\\begin{\"+e.getName()+\"}\"));var u=(\"c\"+a).replace(/[^clr|:]/g,\"\").replace(/[^|:]([|:])+/g,\"$1\");a=(a=a.replace(/[^clr]/g,\"\").split(\"\").join(\" \")).replace(/l/g,\"left\").replace(/r/g,\"right\").replace(/c/g,\"center\");var c=t.itemFactory.create(\"array\");return c.arraydef={columnalign:a,columnspacing:i||\"1em\",rowspacing:o||\"4pt\"},u.match(/[|:]/)&&(u.charAt(0).match(/[|:]/)&&(c.frame.push(\"left\"),c.dashed=\":\"===u.charAt(0)),u.charAt(u.length-1).match(/[|:]/)&&c.frame.push(\"right\"),u=u.substr(1,u.length-2),c.arraydef.columnlines=u.split(\"\").join(\" \").replace(/[^|: ]/g,\"none\").replace(/\\|/g,\"solid\").replace(/:/g,\"dashed\")),r&&c.setProperty(\"open\",t.convertDelimiter(r)),n&&c.setProperty(\"close\",t.convertDelimiter(n)),\"D\"===s?c.arraydef.displaystyle=!0:s&&(c.arraydef.displaystyle=!1),\"S\"===s&&(c.arraydef.scriptlevel=1),l&&(c.arraydef.useHeight=!1),t.Push(e),c},d.AlignedArray=function(t,e){var r=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),n=d.Array(t,e);return u.default.setArrayAlign(n,r)},d.Equation=function(t,e,r){return t.Push(e),u.default.checkEqnEnv(t),t.itemFactory.create(\"equation\",r).setProperty(\"name\",e.getName())},d.EqnArray=function(t,e,r,n,a,i){t.Push(e),n&&u.default.checkEqnEnv(t),a=(a=a.replace(/[^clr]/g,\"\").split(\"\").join(\" \")).replace(/l/g,\"left\").replace(/r/g,\"right\").replace(/c/g,\"center\");var o=t.itemFactory.create(\"eqnarray\",e.getName(),r,n,t.stack.global);return o.arraydef={displaystyle:!0,columnalign:a,columnspacing:i||\"1em\",rowspacing:\"3pt\",side:t.options.tagSide,minlabelspacing:t.options.tagIndent},o},d.HandleNoTag=function(t,e){t.tags.notag()},d.HandleLabel=function(t,e){var r=t.GetArgument(e);if(\"\"!==r&&!t.tags.refUpdate){if(t.tags.label)throw new o.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);if(t.tags.label=r,(t.tags.allLabels[r]||t.tags.labels[r])&&!t.options.ignoreDuplicateLabels)throw new o.default(\"MultipleLabel\",\"Label '%1' multiply defined\",r);t.tags.labels[r]=new f.Label}},d.HandleRef=function(t,e,r){var n=t.GetArgument(e),a=t.tags.allLabels[n]||t.tags.labels[n];a||(t.tags.refUpdate||(t.tags.redo=!0),a=new f.Label);var i=a.tag;r&&(i=t.tags.formatTag(i));var o=t.create(\"node\",\"mrow\",u.default.internalMath(t,i),{href:t.tags.formatUrl(a.id,t.options.baseURL),class:\"MathJax_ref\"});t.Push(o)},d.Macro=function(t,e,r,n,a){if(n){var i=[];if(null!=a){var s=t.GetBrackets(e);i.push(null==s?a:s)}for(var l=i.length;l<n;l++)i.push(t.GetArgument(e));r=u.default.substituteArgs(t,i,r)}if(t.string=u.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new o.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is there a recursive macro call?\")},d.MathChoice=function(t,e){var r=t.ParseArg(e),n=t.ParseArg(e),a=t.ParseArg(e),i=t.ParseArg(e);t.Push(t.create(\"node\",\"MathChoice\",[r,n,a,i]))},e.default=d},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var i,o=r(1),s=r(7),l=r(3);!function(t){t.variable=function(t,e){var r=l.default.getFontDef(t),n=t.create(\"token\",\"mi\",r,e);t.Push(n)},t.digit=function(t,e){var r,n=t.configuration.options.digits,a=t.string.slice(t.i-1).match(n),i=l.default.getFontDef(t);a?(r=t.create(\"token\",\"mn\",i,a[0].replace(/[{}]/g,\"\")),t.i+=a[0].length-1):r=t.create(\"token\",\"mo\",i,e),t.Push(r)},t.controlSequence=function(t,e){var r=t.GetCS();t.parse(\"macro\",[t,r])},t.mathchar0mi=function(t,e){var r=e.attributes||{mathvariant:s.TexConstant.Variant.ITALIC},n=t.create(\"token\",\"mi\",r,e.char);t.Push(n)},t.mathchar0mo=function(t,e){var r=e.attributes||{};r.stretchy=!1;var n=t.create(\"token\",\"mo\",r,e.char);o.default.setProperty(n,\"fixStretchy\",!0),t.configuration.addNode(\"fixStretchy\",n),t.Push(n)},t.mathchar7=function(t,e){var r=e.attributes||{mathvariant:s.TexConstant.Variant.NORMAL};t.stack.env.font&&(r.mathvariant=t.stack.env.font);var n=t.create(\"token\",\"mi\",r,e.char);t.Push(n)},t.delimiter=function(t,e){var r=e.attributes||{};r=Object.assign({fence:!1,stretchy:!1},r);var n=t.create(\"token\",\"mo\",r,e.char);t.Push(n)},t.environment=function(t,e,r,n){var i=n[0],o=t.itemFactory.create(\"begin\").setProperties({name:e,end:i});o=r.apply(void 0,a([t,o],n.slice(1))),t.Push(o)}}(i||(i={})),e.default=i},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NEW_OPS=e.AmsMethods=void 0;var n=r(3),a=r(1),i=r(7),o=r(8),s=r(0),l=r(10),u=r(15),c=r(5);e.AmsMethods={},e.AmsMethods.AmsEqnArray=function(t,e,r,a,i,o,s){var l=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),c=u.default.EqnArray(t,e,r,a,i,o,s);return n.default.setArrayAlign(c,l)},e.AmsMethods.AlignAt=function(t,r,a,i){var o,l,u=r.getName(),c=\"\",f=[];if(i||(l=t.GetBrackets(\"\\\\begin{\"+u+\"}\")),(o=t.GetArgument(\"\\\\begin{\"+u+\"}\")).match(/[^0-9]/))throw new s.default(\"PositiveIntegerArg\",\"Argument to %1 must me a positive integer\",\"\\\\begin{\"+u+\"}\");for(var p=parseInt(o,10);p>0;)c+=\"rl\",f.push(\"0em 0em\"),p--;var d=f.join(\" \");if(i)return e.AmsMethods.EqnArray(t,r,a,i,c,d);var h=e.AmsMethods.EqnArray(t,r,a,i,c,d);return n.default.setArrayAlign(h,l)},e.AmsMethods.Multline=function(t,e,r){t.Push(e),n.default.checkEqnEnv(t);var a=t.itemFactory.create(\"multline\",r,t.stack);return a.arraydef={displaystyle:!0,rowspacing:\".5em\",columnwidth:\"100%\",width:t.options.multlineWidth,side:t.options.tagSide,minlabelspacing:t.options.tagIndent},a},e.NEW_OPS=\"ams-declare-ops\",e.AmsMethods.HandleDeclareOp=function(t,r){var a=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",i=n.default.trimSpaces(t.GetArgument(r));\"\\\\\"===i.charAt(0)&&(i=i.substr(1));var o=t.GetArgument(r);o.match(/\\\\text/)||(o=o.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\")),t.configuration.handlers.retrieve(e.NEW_OPS).add(i,new l.Macro(i,e.AmsMethods.Macro,[\"\\\\mathop{\\\\rm \"+o+\"}\"+a]))},e.AmsMethods.HandleOperatorName=function(t,e){var r=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",a=n.default.trimSpaces(t.GetArgument(e));a.match(/\\\\text/)||(a=a.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\")),t.string=\"\\\\mathop{\\\\rm \"+a+\"}\"+r+\" \"+t.string.slice(t.i),t.i=0},e.AmsMethods.SkipLimits=function(t,e){var r=t.GetNext(),n=t.i;\"\\\\\"===r&&++t.i&&\"limits\"!==t.GetCS()&&(t.i=n)},e.AmsMethods.MultiIntegral=function(t,e,r){var n=t.GetNext();if(\"\\\\\"===n){var a=t.i;n=t.GetArgument(e),t.i=a,\"\\\\limits\"===n&&(r=\"\\\\idotsint\"===e?\"\\\\!\\\\!\\\\mathop{\\\\,\\\\,\"+r+\"}\":\"\\\\!\\\\!\\\\!\\\\mathop{\\\\,\\\\,\\\\,\"+r+\"}\")}t.string=r+\" \"+t.string.slice(t.i),t.i=0},e.AmsMethods.xArrow=function(t,e,r,i,s){var l={width:\"+\"+n.default.Em((i+s)/18),lspace:n.default.Em(i/18)},u=t.GetBrackets(e),f=t.ParseArg(e),p=t.create(\"token\",\"mo\",{stretchy:!0,texClass:c.TEXCLASS.REL},String.fromCodePoint(r)),d=t.create(\"node\",\"munderover\",[p]),h=t.create(\"node\",\"mpadded\",[f],l);if(a.default.setAttribute(h,\"voffset\",\".15em\"),a.default.setChild(d,d.over,h),u){var m=new o.default(u,t.stack.env,t.configuration).mml();h=t.create(\"node\",\"mpadded\",[m],l),a.default.setAttribute(h,\"voffset\",\"-.24em\"),a.default.setChild(d,d.under,h)}a.default.setProperty(d,\"subsupOK\",!0),t.Push(d)},e.AmsMethods.HandleShove=function(t,e,r){var n=t.stack.Top();if(\"multline\"!==n.kind)throw new s.default(\"CommandOnlyAllowedInEnv\",\"%1 only allowed in %2 environment\",t.currentCS,\"multline\");if(n.Size())throw new s.default(\"CommandAtTheBeginingOfLine\",\"%1 must come at the beginning of the line\",t.currentCS);n.setProperty(\"shove\",r)},e.AmsMethods.CFrac=function(t,e){var r=n.default.trimSpaces(t.GetBrackets(e,\"\")),l=t.GetArgument(e),u=t.GetArgument(e),c={l:i.TexConstant.Align.LEFT,r:i.TexConstant.Align.RIGHT,\"\":\"\"},f=new o.default(\"\\\\strut\\\\textstyle{\"+l+\"}\",t.stack.env,t.configuration).mml(),p=new o.default(\"\\\\strut\\\\textstyle{\"+u+\"}\",t.stack.env,t.configuration).mml(),d=t.create(\"node\",\"mfrac\",[f,p]);if(null==(r=c[r]))throw new s.default(\"IllegalAlign\",\"Illegal alignment specified in %1\",t.currentCS);r&&a.default.setProperties(d,{numalign:r,denomalign:r}),t.Push(d)},e.AmsMethods.Genfrac=function(t,e,r,i,o,l){null==r&&(r=t.GetDelimiterArg(e)),null==i&&(i=t.GetDelimiterArg(e)),null==o&&(o=t.GetArgument(e)),null==l&&(l=n.default.trimSpaces(t.GetArgument(e)));var u=t.ParseArg(e),c=t.ParseArg(e),f=t.create(\"node\",\"mfrac\",[u,c]);if(\"\"!==o&&a.default.setAttribute(f,\"linethickness\",o),(r||i)&&(a.default.setProperty(f,\"withDelims\",!0),f=n.default.fixedFence(t.configuration,r,f,i)),\"\"!==l){var p=parseInt(l,10),d=[\"D\",\"T\",\"S\",\"SS\"][p];if(null==d)throw new s.default(\"BadMathStyleFor\",\"Bad math style for %1\",t.currentCS);f=t.create(\"node\",\"mstyle\",[f]),\"D\"===d?a.default.setProperties(f,{displaystyle:!0,scriptlevel:0}):a.default.setProperties(f,{displaystyle:!1,scriptlevel:p-1})}t.Push(f)},e.AmsMethods.HandleTag=function(t,e){if(!t.tags.currentTag.taggable&&t.tags.env)throw new s.default(\"CommandNotAllowedInEnv\",\"%1 not allowed in %2 environment\",t.currentCS,t.tags.env);if(t.tags.currentTag.tag)throw new s.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);var r=t.GetStar(),a=n.default.trimSpaces(t.GetArgument(e));t.tags.tag(a,r)},e.AmsMethods.HandleNoTag=u.default.HandleNoTag,e.AmsMethods.HandleRef=u.default.HandleRef,e.AmsMethods.Macro=u.default.Macro,e.AmsMethods.Accent=u.default.Accent,e.AmsMethods.Tilde=u.default.Tilde,e.AmsMethods.Array=u.default.Array,e.AmsMethods.Spacer=u.default.Spacer,e.AmsMethods.NamedOp=u.default.NamedOp,e.AmsMethods.EqnArray=u.default.EqnArray},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(0),a=r(2),i=r(15),o=r(3),s=r(19),l={NewCommand:function(t,e){var r=o.default.trimSpaces(t.GetArgument(e)),a=t.GetBrackets(e),i=t.GetBrackets(e),u=t.GetArgument(e);if(\"\\\\\"===r.charAt(0)&&(r=r.substr(1)),!r.match(/^(.|[a-z]+)$/i))throw new n.default(\"IllegalControlSequenceName\",\"Illegal control sequence name for %1\",e);if(a&&!(a=o.default.trimSpaces(a)).match(/^[0-9]+$/))throw new n.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",e);s.default.addMacro(t,r,l.Macro,[u,a,i])},NewEnvironment:function(t,e){var r=o.default.trimSpaces(t.GetArgument(e)),a=t.GetBrackets(e),i=t.GetBrackets(e),u=t.GetArgument(e),c=t.GetArgument(e);if(a&&!(a=o.default.trimSpaces(a)).match(/^[0-9]+$/))throw new n.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",e);s.default.addEnvironment(t,r,l.BeginEnv,[!0,u,c,a,i])},MacroDef:function(t,e){var r=s.default.GetCSname(t,e),n=s.default.GetTemplate(t,e,\"\\\\\"+r),a=t.GetArgument(e);n instanceof Array?s.default.addMacro(t,r,l.MacroWithTemplate,[a].concat(n)):s.default.addMacro(t,r,l.Macro,[a,n])},Let:function(t,e){var r=s.default.GetCSname(t,e),n=t.GetNext();\"=\"===n&&(t.i++,n=t.GetNext());var i=t.configuration.handlers;if(\"\\\\\"!==n){t.i++;var o=i.get(\"delimiter\").lookup(n);o?s.default.addDelimiter(t,\"\\\\\"+r,o.char,o.attributes):s.default.addMacro(t,r,l.Macro,[n])}else{e=s.default.GetCSname(t,e);var u=i.get(\"delimiter\").lookup(\"\\\\\"+e);if(u)return void s.default.addDelimiter(t,\"\\\\\"+r,u.char,u.attributes);var c=i.get(\"macro\").applicable(e);if(!c)return;if(c instanceof a.MacroMap){var f=c.lookup(e);return void s.default.addMacro(t,r,f.func,f.args,f.symbol)}u=c.lookup(e);var p=s.default.disassembleSymbol(r,u);s.default.addMacro(t,r,(function(t,e){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var a=s.default.assembleSymbol(r);return c.parser(t,a)}),p)}},MacroWithTemplate:function(t,e,r,a){for(var i=[],l=4;l<arguments.length;l++)i[l-4]=arguments[l];var u=parseInt(a,10);if(u){var c=[];if(t.GetNext(),i[0]&&!s.default.MatchParam(t,i[0]))throw new n.default(\"MismatchUseDef\",\"Use of %1 doesn't match its definition\",e);for(var f=0;f<u;f++)c.push(s.default.GetParameter(t,e,i[f+1]));r=o.default.substituteArgs(t,c,r)}if(t.string=o.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new n.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is here a recursive macro call?\")},BeginEnv:function(t,e,r,n,a,i){if(e.getProperty(\"end\")&&t.stack.env.closing===e.getName()){delete t.stack.env.closing;var s=t.string.slice(t.i);return t.string=n,t.i=0,t.Parse(),t.string=s,t.i=0,t.itemFactory.create(\"end\").setProperty(\"name\",e.getName())}if(a){var l=[];if(null!=i){var u=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\");l.push(null==u?i:u)}for(var c=l.length;c<a;c++)l.push(t.GetArgument(\"\\\\begin{\"+e.getName()+\"}\"));r=o.default.substituteArgs(t,l,r),n=o.default.substituteArgs(t,[],n)}return t.string=o.default.addArgs(t,r,t.string.slice(t.i)),t.i=0,t.itemFactory.create(\"beginEnv\").setProperty(\"name\",e.getName())}};l.Macro=i.default.Macro,e.default=l},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n,a=r(3),i=r(0),o=r(10);!function(t){function e(t,e){return t.string.substr(t.i,e.length)!==e||e.match(/\\\\[a-z]+$/i)&&t.string.charAt(t.i+e.length).match(/[a-z]/i)?0:(t.i+=e.length,1)}t.disassembleSymbol=function(t,e){var r=[t,e.char];if(e.attributes)for(var n in e.attributes)r.push(n),r.push(e.attributes[n]);return r},t.assembleSymbol=function(t){for(var e=t[0],r=t[1],n={},a=2;a<t.length;a+=2)n[t[a]]=t[a+1];return new o.Symbol(e,r,n)},t.GetCSname=function(t,e){if(\"\\\\\"!==t.GetNext())throw new i.default(\"MissingCS\",\"%1 must be followed by a control sequence\",e);return a.default.trimSpaces(t.GetArgument(e)).substr(1)},t.GetTemplate=function(t,e,r){for(var n=t.GetNext(),a=[],o=0,s=t.i;t.i<t.string.length;){if(\"#\"===(n=t.GetNext())){if(s!==t.i&&(a[o]=t.string.substr(s,t.i-s)),!(n=t.string.charAt(++t.i)).match(/^[1-9]$/))throw new i.default(\"CantUseHash2\",\"Illegal use of # in template for %1\",r);if(parseInt(n)!==++o)throw new i.default(\"SequentialParam\",\"Parameters for %1 must be numbered sequentially\",r);s=t.i+1}else if(\"{\"===n)return s!==t.i&&(a[o]=t.string.substr(s,t.i-s)),a.length>0?[o.toString()].concat(a):o;t.i++}throw new i.default(\"MissingReplacementString\",\"Missing replacement string for definition of %1\",e)},t.GetParameter=function(t,r,n){if(null==n)return t.GetArgument(r);for(var a=t.i,o=0,s=0;t.i<t.string.length;){var l=t.string.charAt(t.i);if(\"{\"===l)t.i===a&&(s=1),t.GetArgument(r),o=t.i-a;else{if(e(t,n))return s&&(a++,o-=2),t.string.substr(a,o);if(\"\\\\\"===l){t.i++,o++,s=0;var u=t.string.substr(t.i).match(/[a-z]+|./i);u&&(t.i+=u[0].length,o=t.i-a)}else t.i++,o++,s=0}}throw new i.default(\"RunawayArgument\",\"Runaway argument for %1?\",r)},t.MatchParam=e,t.addDelimiter=function(e,r,n,a){e.configuration.handlers.retrieve(t.NEW_DELIMITER).add(r,new o.Symbol(r,n,a))},t.addMacro=function(e,r,n,a,i){void 0===i&&(i=\"\"),e.configuration.handlers.retrieve(t.NEW_COMMAND).add(r,new o.Macro(i||r,n,a))},t.addEnvironment=function(e,r,n,a){e.configuration.handlers.retrieve(t.NEW_ENVIRONMENT).add(r,new o.Macro(r,n,a))},t.NEW_DELIMITER=\"new-Delimiter\",t.NEW_COMMAND=\"new-Command\",t.NEW_ENVIRONMENT=\"new-Environment\"}(n||(n={})),e.default=n},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return(i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var a in e=arguments[r])Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t}).apply(this,arguments)},o=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TeX=void 0;var s=r(42),l=r(6),u=r(22),c=r(23),f=r(1),p=r(8),d=r(0),h=r(25),m=r(9),g=r(4);r(28);var y=function(t){function e(r){void 0===r&&(r={});var n=this,a=o(l.separateOptions(r,e.OPTIONS,u.FindTeX.OPTIONS),3),i=a[0],s=a[1],f=a[2];(n=t.call(this,s)||this).findTeX=n.options.FindTeX||new u.FindTeX(f);var p=n.options.packages,d=n.configuration=e.configure(p),g=n._parseOptions=new h.default(d,[n.options,m.TagsFactory.OPTIONS]);return l.userOptions(g.options,i),d.config(n),e.tags(g,d),n.postFilters.add(c.default.cleanSubSup,-6),n.postFilters.add(c.default.setInherited,-5),n.postFilters.add(c.default.moveLimits,-4),n.postFilters.add(c.default.cleanStretchy,-3),n.postFilters.add(c.default.cleanAttributes,-2),n.postFilters.add(c.default.combineRelations,-1),n}return a(e,t),e.configure=function(t){var e=new g.ParserConfiguration(t);return e.init(),e},e.tags=function(t,e){m.TagsFactory.addTags(e.tags),m.TagsFactory.setDefault(t.options.tags),t.tags=m.TagsFactory.getDefault(),t.tags.configuration=t},e.prototype.setMmlFactory=function(e){t.prototype.setMmlFactory.call(this,e),this._parseOptions.nodeFactory.setMmlFactory(e)},Object.defineProperty(e.prototype,\"parseOptions\",{get:function(){return this._parseOptions},enumerable:!1,configurable:!0}),e.prototype.compile=function(t,e){this.parseOptions.clear(),this.executeFilters(this.preFilters,t,e,this.parseOptions);var r,n=t.display;this.latex=t.math,this.parseOptions.tags.startEquation(t);try{r=new p.default(this.latex,{display:n,isInner:!1},this.parseOptions).mml()}catch(t){if(!(t instanceof d.default))throw t;this.parseOptions.error=!0,r=this.options.formatError(this,t)}return r=this.parseOptions.nodeFactory.create(\"node\",\"math\",[r]),n&&f.default.setAttribute(r,\"display\",\"block\"),this.parseOptions.tags.finishEquation(t),this.parseOptions.root=r,this.executeFilters(this.postFilters,t,e,this.parseOptions),this.mathNode=this.parseOptions.root,this.mathNode},e.prototype.findMath=function(t){return this.findTeX.findMath(t)},e.prototype.formatError=function(t){var e=t.message.replace(/\\n.*/,\"\");return this.parseOptions.nodeFactory.create(\"error\",e,t.id,this.latex)},e.NAME=\"TeX\",e.OPTIONS=i(i({},s.AbstractInputJax.OPTIONS),{FindTeX:null,packages:[\"base\"],digits:/^(?:[0-9]+(?:\\{,\\}[0-9]{3})*(?:\\.[0-9]*)?|\\.[0-9]+)/,maxBuffer:5120,formatError:function(t,e){return t.formatError(e)}}),e}(s.AbstractInputJax);e.TeX=y},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.components.global.isObject,e.combineConfig=MathJax._.components.global.combineConfig,e.combineDefaults=MathJax._.components.global.combineDefaults,e.combineWithMathJax=MathJax._.components.global.combineWithMathJax,e.MathJax=MathJax._.components.global.MathJax},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindTeX=void 0;var o=r(43),s=r(44),l=r(45),u=function(t){function e(e){var r=t.call(this,e)||this;return r.getPatterns(),r}return a(e,t),e.prototype.getPatterns=function(){var t=this,e=this.options,r=[],n=[],a=[];this.end={},this.env=this.sub=0;var i=1;e.inlineMath.forEach((function(e){return t.addPattern(r,e,!1)})),e.displayMath.forEach((function(e){return t.addPattern(r,e,!0)})),r.length&&n.push(r.sort(s.sortLength).join(\"|\")),e.processEnvironments&&(n.push(\"\\\\\\\\begin\\\\s*\\\\{([^}]*)\\\\}\"),this.env=i,i++),e.processEscapes&&a.push(\"\\\\\\\\([\\\\\\\\$])\"),e.processRefs&&a.push(\"(\\\\\\\\(?:eq)?ref\\\\s*\\\\{[^}]*\\\\})\"),a.length&&(n.push(\"(\"+a.join(\"|\")+\")\"),this.sub=i),this.start=new RegExp(n.join(\"|\"),\"g\"),this.hasPatterns=n.length>0},e.prototype.addPattern=function(t,e,r){var n=i(e,2),a=n[0],o=n[1];t.push(s.quotePattern(a)),this.end[a]=[o,r,this.endPattern(o)]},e.prototype.endPattern=function(t,e){return new RegExp((e||s.quotePattern(t))+\"|\\\\\\\\(?:[a-zA-Z]|.)|[{}]\",\"g\")},e.prototype.findEnd=function(t,e,r,n){for(var a,o=i(n,3),s=o[0],u=o[1],c=o[2],f=c.lastIndex=r.index+r[0].length,p=0;a=c.exec(t);){if((a[1]||a[0])===s&&0===p)return l.protoItem(r[0],t.substr(f,a.index-f),a[0],e,r.index,a.index+a[0].length,u);\"{\"===a[0]?p++:\"}\"===a[0]&&p&&p--}return null},e.prototype.findMathInString=function(t,e,r){var n,a;for(this.start.lastIndex=0;n=this.start.exec(r);){if(void 0!==n[this.env]&&this.env){var i=\"\\\\\\\\end\\\\s*(\\\\{\"+s.quotePattern(n[this.env])+\"\\\\})\";(a=this.findEnd(r,e,n,[\"{\"+n[this.env]+\"}\",!0,this.endPattern(null,i)]))&&(a.math=a.open+a.math+a.close,a.open=a.close=\"\")}else if(void 0!==n[this.sub]&&this.sub){var o=n[this.sub];i=n.index+n[this.sub].length;a=2===o.length?l.protoItem(\"\",o.substr(1),\"\",e,n.index,i):l.protoItem(\"\",o,\"\",e,n.index,i,!1)}else a=this.findEnd(r,e,n,this.end[n[0]]);a&&(t.push(a),this.start.lastIndex=a.end.n)}},e.prototype.findMath=function(t){var e=[];if(this.hasPatterns)for(var r=0,n=t.length;r<n;r++)this.findMathInString(e,r,t[r]);return e},e.OPTIONS={inlineMath:[[\"\\\\(\",\"\\\\)\"]],displayMath:[[\"$$\",\"$$\"],[\"\\\\[\",\"\\\\]\"]],processEscapes:!0,processEnvironments:!0,processRefs:!0},e}(o.AbstractFindMath);e.FindTeX=u},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var a,i=r(5),o=r(1);!function(t){t.cleanStretchy=function(t){var e,r,a=t.data;try{for(var i=n(a.getList(\"fixStretchy\")),s=i.next();!s.done;s=i.next()){var l=s.value;if(o.default.getProperty(l,\"fixStretchy\")){var u=o.default.getForm(l);u&&u[3]&&u[3].stretchy&&o.default.setAttribute(l,\"stretchy\",!1);var c=l.parent;if(!(o.default.getTexClass(l)||u&&u[2])){var f=a.nodeFactory.create(\"node\",\"TeXAtom\",[l]);c.replaceChild(f,l),f.inheritAttributesFrom(l)}o.default.removeProperties(l,\"fixStretchy\")}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},t.cleanAttributes=function(t){t.data.root.walkTree((function(t,e){var r,a,i=t.attributes;if(i)try{for(var o=n(i.getExplicitNames()),s=o.next();!s.done;s=o.next()){var l=s.value;i.attributes[l]===t.attributes.getInherited(l)&&delete i.attributes[l]}}catch(t){r={error:t}}finally{try{s&&!s.done&&(a=o.return)&&a.call(o)}finally{if(r)throw r.error}}}),{})},t.combineRelations=function(t){var a,s;try{for(var l=n(t.data.getList(\"mo\")),u=l.next();!u.done;u=l.next()){var c=u.value;if(!c.getProperty(\"relationsCombined\")&&c.parent&&(!c.parent||o.default.isType(c.parent,\"mrow\"))&&o.default.getTexClass(c)===i.TEXCLASS.REL){for(var f=c.parent,p=void 0,d=f.childNodes,h=d.indexOf(c)+1,m=o.default.getProperty(c,\"variantForm\");h<d.length&&(p=d[h])&&o.default.isType(p,\"mo\")&&o.default.getTexClass(p)===i.TEXCLASS.REL;){if(m!==o.default.getProperty(p,\"variantForm\")||!r(c,p)){null==c.attributes.getExplicit(\"rspace\")&&o.default.setAttribute(c,\"rspace\",\"0pt\"),null==p.attributes.getExplicit(\"lspace\")&&o.default.setAttribute(p,\"lspace\",\"0pt\");break}o.default.appendChildren(c,o.default.getChildren(p)),e([\"stretchy\",\"rspace\"],c,p),o.default.setProperties(c,p.getAllProperties()),d.splice(h,1),p.parent=null,p.setProperty(\"relationsCombined\",!0)}c.attributes.setInherited(\"form\",c.getForms()[0])}}}catch(t){a={error:t}}finally{try{u&&!u.done&&(s=l.return)&&s.call(l)}finally{if(a)throw a.error}}};var e=function(t,e,r){var n=e.attributes,a=r.attributes;t.forEach((function(t){var e=a.getExplicit(t);null!=e&&n.set(t,e)}))},r=function(t,e){var r,a,i=function(t,e){return t.getExplicitNames().filter((function(r){return r!==e&&(\"stretchy\"!==r||t.getExplicit(\"stretchy\"))}))},o=t.attributes,s=e.attributes,l=i(o,\"lspace\"),u=i(s,\"rspace\");if(l.length!==u.length)return!1;try{for(var c=n(l),f=c.next();!f.done;f=c.next()){var p=f.value;if(o.getExplicit(p)!==s.getExplicit(p))return!1}}catch(t){r={error:t}}finally{try{f&&!f.done&&(a=c.return)&&a.call(c)}finally{if(r)throw r.error}}return!0},a=function(t,e,r){var a,i;try{for(var s=n(t.getList(\"m\"+e+r)),l=s.next();!l.done;l=s.next()){var u=l.value,c=u.childNodes;if(!c[u[e]]||!c[u[r]]){var f=u.parent,p=c[u[e]]?t.nodeFactory.create(\"node\",\"m\"+e,[c[u.base],c[u[e]]]):t.nodeFactory.create(\"node\",\"m\"+r,[c[u.base],c[u[r]]]);o.default.copyAttributes(u,p),f?f.replaceChild(p,u):t.root=p}}}catch(t){a={error:t}}finally{try{l&&!l.done&&(i=s.return)&&i.call(s)}finally{if(a)throw a.error}}};t.cleanSubSup=function(t){var e=t.data;e.error||(a(e,\"sub\",\"sup\"),a(e,\"under\",\"over\"))};var s=function(t,e,r){var a,i;try{for(var s=n(t.getList(e)),l=s.next();!l.done;l=s.next()){var u=l.value;if(!u.attributes.get(\"displaystyle\")){var c=u.childNodes[u.base],f=c.coreMO();if(c.getProperty(\"movablelimits\")&&!f.attributes.getExplicit(\"movablelimits\")){var p=t.nodeFactory.create(\"node\",r,u.childNodes);o.default.copyAttributes(u,p),u.parent?u.parent.replaceChild(p,u):t.root=p}}}}catch(t){a={error:t}}finally{try{l&&!l.done&&(i=s.return)&&i.call(s)}finally{if(a)throw a.error}}};t.moveLimits=function(t){var e=t.data;s(e,\"munderover\",\"msubsup\"),s(e,\"munder\",\"msub\"),s(e,\"mover\",\"msup\")},t.setInherited=function(t){t.data.root.setInheritedAttributes({},t.math.display,0,!1)}}(a||(a={})),e.default=a},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(1),s=function(){function t(t,e,r){this._factory=t,this._env=e,this.global={},this.stack=[],this.global={isInner:r},this.stack=[this._factory.create(\"start\",this.global)],e&&(this.stack[0].env=e),this.env=this.stack[0].env}return Object.defineProperty(t.prototype,\"env\",{get:function(){return this._env},set:function(t){this._env=t},enumerable:!1,configurable:!0}),t.prototype.Push=function(){for(var t,e,r=[],s=0;s<arguments.length;s++)r[s]=arguments[s];try{for(var l=n(r),u=l.next();!u.done;u=l.next()){var c=u.value;if(c){var f=o.default.isNode(c)?this._factory.create(\"mml\",c):c;f.global=this.global;var p=a(this.stack.length?this.Top().checkItem(f):[null,!0],2),d=p[0],h=p[1];h&&(d?(this.Pop(),this.Push.apply(this,i(d))):(this.stack.push(f),f.env?(f.copyEnv&&Object.assign(f.env,this.env),this.env=f.env):f.env=this.env))}}}catch(e){t={error:e}}finally{try{u&&!u.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}},t.prototype.Pop=function(){var t=this.stack.pop();return t.isOpen||delete t.env,this.env=this.stack.length?this.Top().env:{},t},t.prototype.Top=function(t){return void 0===t&&(t=1),this.stack.length<t?null:this.stack[this.stack.length-t]},t.prototype.Prev=function(t){var e=this.Top();return t?e.First:e.Pop()},t.prototype.toString=function(){return\"stack[\\n  \"+this.stack.join(\"\\n  \")+\"\\n]\"},t}();e.default=s},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(26),s=r(27),l=r(6),u=function(){function t(t,e){void 0===e&&(e=[]),this.options={},this.packageData=new Map,this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.handlers=t.handlers,this.nodeFactory=new s.NodeFactory,this.nodeFactory.configuration=this,this.nodeFactory.setCreators(t.nodes),this.itemFactory=new o.default(t.items),this.itemFactory.configuration=this,l.defaultOptions.apply(void 0,a([this.options],e)),l.defaultOptions(this.options,t.options)}return t.prototype.pushParser=function(t){this.parsers.unshift(t)},t.prototype.popParser=function(){this.parsers.shift()},Object.defineProperty(t.prototype,\"parser\",{get:function(){return this.parsers[0]},enumerable:!1,configurable:!0}),t.prototype.clear=function(){this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.tags.resetTag()},t.prototype.addNode=function(t,e){var r=this.nodeLists[t];r||(r=this.nodeLists[t]=[]),r.push(e)},t.prototype.getList=function(t){var e,r,n=this.nodeLists[t]||[],a=[];try{for(var o=i(n),s=o.next();!s.done;s=o.next()){var l=s.value;this.inTree(l)&&a.push(l)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return this.nodeLists[t]=a,a},t.prototype.inTree=function(t){for(;t&&t!==this.root;)t=t.parent;return!!t},t}();e.default=u},function(t,e,r){\"use strict\";var n,a,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(13),s=r(47),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e}(o.BaseItem),u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.defaultKind=\"dummy\",e.configuration=null,e}return i(e,t),e.DefaultStackItems=((a={})[l.prototype.kind]=l,a),e}(s.AbstractFactory);e.default=u},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},a=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.NodeFactory=void 0;var i=r(1),o=function(){function t(){this.mmlFactory=null,this.factory={node:t.createNode,token:t.createToken,text:t.createText,error:t.createError}}return t.createNode=function(t,e,r,n,a){void 0===r&&(r=[]),void 0===n&&(n={});var o=t.mmlFactory.create(e),s=o.arity;if(s===1/0||-1===s)1===r.length&&r[0].isInferred?o.setChildren(i.default.getChildren(r[0])):o.setChildren(r);else{for(var l=[],u=0,c=void 0;c=r[u];u++)if(c.isInferred){var f=t.mmlFactory.create(\"mrow\",{},i.default.getChildren(c));i.default.copyAttributes(c,f),l.push(f)}else l.push(c);o.setChildren(l)}return a&&o.appendChild(a),i.default.setProperties(o,n),o},t.createToken=function(t,e,r,n){void 0===r&&(r={}),void 0===n&&(n=\"\");var a=t.create(\"text\",n);return t.create(\"node\",e,[],r,a)},t.createText=function(t,e){return null==e?null:t.mmlFactory.create(\"text\").setText(e)},t.createError=function(t,e){var r=t.create(\"text\",e),n=t.create(\"node\",\"mtext\",[],{},r);return t.create(\"node\",\"merror\",[n],{\"data-mjx-error\":e})},t.prototype.setMmlFactory=function(t){this.mmlFactory=t},t.prototype.set=function(t,e){this.factory[t]=e},t.prototype.setCreators=function(t){for(var e in t)this.set(e,t[e])},t.prototype.create=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=this.factory[t]||this.factory.node,i=n.apply(void 0,a([this,e[0]],e.slice(1)));return\"node\"===t&&this.configuration.addNode(e[0],i),i},t.prototype.get=function(t){return this.factory[t]},t}();e.NodeFactory=o},function(t,e,r){\"use strict\";var n,a,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BaseConfiguration=e.BaseTags=e.Other=void 0;var o=r(4),s=r(12),l=r(0),u=r(1),c=r(2),f=r(14),p=r(9);function d(t,e){var r=t.stack.env.font?{mathvariant:t.stack.env.font}:{},n=s.MapHandler.getMap(\"remap\").lookup(e),a=t.create(\"token\",\"mo\",r,n?n.char:e);u.default.setProperty(a,\"fixStretchy\",!0),t.configuration.addNode(\"fixStretchy\",a),t.Push(a)}r(48),new c.CharacterMap(\"remap\",null,{\"-\":\"\\u2212\",\"*\":\"\\u2217\",\"`\":\"\\u2018\"}),e.Other=d;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e}(p.AbstractTags);e.BaseTags=h,e.BaseConfiguration=o.Configuration.create(\"base\",{handler:{character:[\"command\",\"special\",\"letter\",\"digit\"],delimiter:[\"delimiter\"],macro:[\"delimiter\",\"macros\",\"mathchar0mi\",\"mathchar0mo\",\"mathchar7\"],environment:[\"environment\"]},fallback:{character:d,macro:function(t,e){throw new l.default(\"UndefinedControlSequence\",\"Undefined control sequence %1\",\"\\\\\"+e)},environment:function(t,e){throw new l.default(\"UnknownEnv\",\"Unknown environment '%1'\",e)}},items:(a={},a[f.StartItem.prototype.kind]=f.StartItem,a[f.StopItem.prototype.kind]=f.StopItem,a[f.OpenItem.prototype.kind]=f.OpenItem,a[f.CloseItem.prototype.kind]=f.CloseItem,a[f.PrimeItem.prototype.kind]=f.PrimeItem,a[f.SubsupItem.prototype.kind]=f.SubsupItem,a[f.OverItem.prototype.kind]=f.OverItem,a[f.LeftItem.prototype.kind]=f.LeftItem,a[f.RightItem.prototype.kind]=f.RightItem,a[f.BeginItem.prototype.kind]=f.BeginItem,a[f.EndItem.prototype.kind]=f.EndItem,a[f.StyleItem.prototype.kind]=f.StyleItem,a[f.PositionItem.prototype.kind]=f.PositionItem,a[f.CellItem.prototype.kind]=f.CellItem,a[f.MmlItem.prototype.kind]=f.MmlItem,a[f.FnItem.prototype.kind]=f.FnItem,a[f.NotItem.prototype.kind]=f.NotItem,a[f.DotsItem.prototype.kind]=f.DotsItem,a[f.ArrayItem.prototype.kind]=f.ArrayItem,a[f.EqnArrayItem.prototype.kind]=f.EqnArrayItem,a[f.EquationItem.prototype.kind]=f.EquationItem,a),options:{maxMacros:1e3,baseURL:\"undefined\"==typeof document||0===document.getElementsByTagName(\"base\").length?\"\":String(document.location).replace(/#.*$/,\"\")},tags:{base:h}})},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.MultlineItem=void 0;var i=r(14),o=r(3),s=r(1),l=r(0),u=r(7),c=function(t){function e(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var a=t.call(this,e)||this;return a.factory.configuration.tags.start(\"multline\",!0,r[0]),a}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"multline\"},enumerable:!1,configurable:!0}),e.prototype.EndEntry=function(){this.table.length&&o.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.getProperty(\"shove\"),e=this.create(\"node\",\"mtd\",this.nodes,t?{columnalign:t}:{});this.setProperty(\"shove\",null),this.row.push(e),this.Clear()},e.prototype.EndRow=function(){if(1!==this.row.length)throw new l.default(\"MultlineRowsOneCol\",\"The rows within the %1 environment must have exactly one column\",\"multline\");var t=this.create(\"node\",\"mtr\",this.row);this.table.push(t),this.row=[]},e.prototype.EndTable=function(){if(t.prototype.EndTable.call(this),this.table.length){var e=this.table.length-1,r=-1;s.default.getAttribute(s.default.getChildren(this.table[0])[0],\"columnalign\")||s.default.setAttribute(s.default.getChildren(this.table[0])[0],\"columnalign\",u.TexConstant.Align.LEFT),s.default.getAttribute(s.default.getChildren(this.table[e])[0],\"columnalign\")||s.default.setAttribute(s.default.getChildren(this.table[e])[0],\"columnalign\",u.TexConstant.Align.RIGHT);var n=this.factory.configuration.tags.getTag();if(n){r=this.arraydef.side===u.TexConstant.Align.LEFT?0:this.table.length-1;var a=this.table[r],i=this.create(\"node\",\"mlabeledtr\",[n].concat(s.default.getChildren(a)));s.default.copyAttributes(a,i),this.table[r]=i}}this.factory.configuration.tags.end()},e}(i.ArrayItem);e.MultlineItem=c},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.RequireConfiguration=e.options=e.RequireMethods=e.RequireLoad=void 0;var o=r(4),s=r(2),l=r(0),u=r(21),c=r(36),f=r(31),p=r(52),d=r(6),h=u.MathJax.config;function m(t,e){var r,a=t.parseOptions.options.require,i=t.parseOptions.packageData.get(\"require\").required,s=e.substr(a.prefix.length);if(i.indexOf(s)<0){i.push(s),function(t,e){var r,a;void 0===e&&(e=[]);var i=t.parseOptions.options.require.prefix;try{for(var o=n(e),s=o.next();!s.done;s=o.next()){var l=s.value;l.substr(0,i.length)===i&&m(t,l)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(a=o.return)&&a.call(o)}finally{if(r)throw r.error}}}(t,f.CONFIG.dependencies[e]);var l=o.ConfigurationHandler.get(s);if(l){var u=h[e]||{};l.options&&1===Object.keys(l.options).length&&l.options[s]&&((r={})[s]=u,u=r),t.configuration.add(l,t,u);var c=t.parseOptions.packageData.get(\"require\").configured;l.preprocessors.length&&!c.has(s)&&(c.set(s,!0),p.mathjax.retryAfter(Promise.resolve()))}}}function g(t,e){var r=t.options.require,n=r.allow,a=(\"[\"===e.substr(0,1)?\"\":r.prefix)+e;if(!(n.hasOwnProperty(a)?n[a]:n.hasOwnProperty(e)?n[e]:r.defaultAllow))throw new l.default(\"BadRequire\",'Extension \"%1\" is now allowed to be loaded',a);c.Package.packages.has(a)?m(t.configuration.packageData.get(\"require\").jax,a):p.mathjax.retryAfter(f.Loader.load(a))}e.RequireLoad=g,e.RequireMethods={Require:function(t,e){var r=t.GetArgument(e);if(r.match(/[^_a-zA-Z0-9]/)||\"\"===r)throw new l.default(\"BadPackageName\",\"Argument for %1 is not a valid package name\",e);g(t,r)}},e.options={require:{allow:d.expandable({base:!1,\"all-packages\":!1}),defaultAllow:!0,prefix:\"tex\"}},new s.CommandMap(\"require\",{require:\"Require\"},e.RequireMethods),e.RequireConfiguration=o.Configuration.create(\"require\",{handler:{macro:[\"require\"]},config:function(t,e){e.parseOptions.packageData.set(\"require\",{jax:e,required:i(e.options.packages),configured:new Map});var r=e.parseOptions.options.require,n=r.prefix;if(n.match(/[^_a-zA-Z0-9]/))throw Error(\"Illegal characters used in \\\\require prefix\");f.CONFIG.paths[n]||(f.CONFIG.paths[n]=\"[mathjax]/input/tex/extensions\"),r.prefix=\"[\"+n+\"]/\"},options:e.options})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Loader=MathJax._.components.loader.Loader,e.MathJax=MathJax._.components.loader.MathJax,e.CONFIG=MathJax._.components.loader.CONFIG},function(t,e,r){\"use strict\";var n,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BeginEnvItem=void 0;var i=r(0),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return a(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"beginEnv\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){if(e.getName()!==this.getName())throw new i.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),e.getName());return[[this.factory.create(\"mml\",this.toMml())],!0]}if(e.isKind(\"stop\"))throw new i.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(r(13).BaseItem);e.BeginEnvItem=o},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(11).add({NJcy:\"\\u040a\",Nacute:\"\\u0143\",Ncaron:\"\\u0147\",Ncedil:\"\\u0145\",Ncy:\"\\u041d\",NegativeMediumSpace:\"\\u200b\",NegativeThickSpace:\"\\u200b\",NegativeThinSpace:\"\\u200b\",NegativeVeryThinSpace:\"\\u200b\",NewLine:\"\\n\",NoBreak:\"\\u2060\",NonBreakingSpace:\"\\xa0\",Not:\"\\u2aec\",NotCongruent:\"\\u2262\",NotCupCap:\"\\u226d\",NotEqualTilde:\"\\u2242\\u0338\",NotGreaterFullEqual:\"\\u2267\\u0338\",NotGreaterGreater:\"\\u226b\\u0338\",NotGreaterLess:\"\\u2279\",NotGreaterSlantEqual:\"\\u2a7e\\u0338\",NotGreaterTilde:\"\\u2275\",NotHumpDownHump:\"\\u224e\\u0338\",NotHumpEqual:\"\\u224f\\u0338\",NotLeftTriangleBar:\"\\u29cf\\u0338\",NotLessGreater:\"\\u2278\",NotLessLess:\"\\u226a\\u0338\",NotLessSlantEqual:\"\\u2a7d\\u0338\",NotLessTilde:\"\\u2274\",NotNestedGreaterGreater:\"\\u2aa2\\u0338\",NotNestedLessLess:\"\\u2aa1\\u0338\",NotPrecedesEqual:\"\\u2aaf\\u0338\",NotReverseElement:\"\\u220c\",NotRightTriangleBar:\"\\u29d0\\u0338\",NotSquareSubset:\"\\u228f\\u0338\",NotSquareSubsetEqual:\"\\u22e2\",NotSquareSuperset:\"\\u2290\\u0338\",NotSquareSupersetEqual:\"\\u22e3\",NotSubset:\"\\u2282\\u20d2\",NotSucceedsEqual:\"\\u2ab0\\u0338\",NotSucceedsTilde:\"\\u227f\\u0338\",NotSuperset:\"\\u2283\\u20d2\",NotTildeEqual:\"\\u2244\",NotTildeFullEqual:\"\\u2247\",NotTildeTilde:\"\\u2249\",Ntilde:\"\\xd1\",Nu:\"\\u039d\",nGg:\"\\u22d9\\u0338\",nGt:\"\\u226b\\u20d2\",nGtv:\"\\u226b\\u0338\",nLl:\"\\u22d8\\u0338\",nLt:\"\\u226a\\u20d2\",nLtv:\"\\u226a\\u0338\",nabla:\"\\u2207\",nacute:\"\\u0144\",nang:\"\\u2220\\u20d2\",nap:\"\\u2249\",napE:\"\\u2a70\\u0338\",napid:\"\\u224b\\u0338\",napos:\"\\u0149\",napprox:\"\\u2249\",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\",nearrow:\"\\u2197\",nedot:\"\\u2250\\u0338\",nequiv:\"\\u2262\",nesear:\"\\u2928\",nesim:\"\\u2242\\u0338\",nexist:\"\\u2204\",nexists:\"\\u2204\",ngE:\"\\u2267\\u0338\",nge:\"\\u2271\",ngeq:\"\\u2271\",ngeqq:\"\\u2267\\u0338\",ngeqslant:\"\\u2a7e\\u0338\",nges:\"\\u2a7e\\u0338\",ngsim:\"\\u2275\",ngt:\"\\u226f\",ngtr:\"\\u226f\",nhArr:\"\\u21ce\",nhpar:\"\\u2af2\",ni:\"\\u220b\",nis:\"\\u22fc\",nisd:\"\\u22fa\",niv:\"\\u220b\",njcy:\"\\u045a\",nlArr:\"\\u21cd\",nlE:\"\\u2266\\u0338\",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\",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\",nrarrc:\"\\u2933\\u0338\",nrarrw:\"\\u219d\\u0338\",nrightarrow:\"\\u219b\",nrtri:\"\\u22eb\",nrtrie:\"\\u22ed\",nsc:\"\\u2281\",nsccue:\"\\u22e1\",nsce:\"\\u2ab0\\u0338\",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\",num:\"#\",numero:\"\\u2116\",numsp:\"\\u2007\",nvHarr:\"\\u2904\",nvap:\"\\u224d\\u20d2\",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\",nwarrow:\"\\u2196\",nwnear:\"\\u2927\"},\"n\")},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PrioritizedList=MathJax._.util.PrioritizedList.PrioritizedList},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FunctionList=MathJax._.util.FunctionList.FunctionList},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PackageError=MathJax._.components.package.PackageError,e.Package=MathJax._.components.package.Package},function(t,e,r){\"use strict\";var n,a,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AmsConfiguration=e.AmsTags=void 0;var o=r(4),s=r(29),l=r(9),u=r(17);r(51);var c=r(2),f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e}(l.AbstractTags);e.AmsTags=f;e.AmsConfiguration=o.Configuration.create(\"ams\",{handler:{delimiter:[\"AMSsymbols-delimiter\",\"AMSmath-delimiter\"],macro:[\"AMSsymbols-mathchar0mi\",\"AMSsymbols-mathchar0m0\",\"AMSsymbols-delimiter\",\"AMSsymbols-macros\",\"AMSmath-mathchar0mo\",\"AMSmath-macros\",\"AMSmath-delimiter\"],environment:[\"AMSmath-environment\"]},items:(a={},a[s.MultlineItem.prototype.kind]=s.MultlineItem,a),tags:{ams:f},init:function(t){new c.CommandMap(u.NEW_OPS,{},{}),t.append(o.Configuration.local({handler:{macro:[u.NEW_OPS]},priority:-1}))}})},function(t,e,r){\"use strict\";var n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutoloadConfiguration=void 0;var i=r(4),o=r(2),s=r(10),l=r(30),u=r(36),c=r(6);function f(t,e,r,i){var o,s,c,f;if(u.Package.packages.has(t.options.require.prefix+r)){var h=t.options.autoload[r],m=n(2===h.length&&Array.isArray(h[0])?h:[h,[]],2),g=m[0],y=m[1];try{for(var v=a(g),b=v.next();!b.done;b=v.next()){var A=b.value;p.remove(A)}}catch(t){o={error:t}}finally{try{b&&!b.done&&(s=v.return)&&s.call(v)}finally{if(o)throw o.error}}try{for(var M=a(y),x=M.next();!x.done;x=M.next()){var T=x.value;d.remove(T)}}catch(t){c={error:t}}finally{try{x&&!x.done&&(f=M.return)&&f.call(M)}finally{if(c)throw c.error}}t.string=(i?e:\"\\\\begin{\"+e.slice(1)+\"}\")+t.string.slice(t.i),t.i=0}l.RequireLoad(t,r)}var p=new o.CommandMap(\"autoload-macros\",{},{}),d=new o.CommandMap(\"autoload-environments\",{},{});e.AutoloadConfiguration=i.Configuration.create(\"autoload\",{handler:{macro:[\"autoload-macros\"],environment:[\"autoload-environments\"]},options:{autoload:c.expandable({action:[\"toggle\",\"mathtip\",\"texttip\"],amscd:[[],[\"CD\"]],bbox:[\"bbox\"],boldsymbol:[\"boldsymbol\"],braket:[\"bra\",\"ket\",\"braket\",\"set\",\"Bra\",\"Ket\",\"Braket\",\"Set\",\"ketbra\",\"Ketbra\"],bussproofs:[[],[\"prooftree\"]],cancel:[\"cancel\",\"bcancel\",\"xcancel\",\"cancelto\"],color:[\"color\",\"definecolor\",\"textcolor\",\"colorbox\",\"fcolorbox\"],enclose:[\"enclose\"],extpfeil:[\"xtwoheadrightarrow\",\"xtwoheadleftarrow\",\"xmapsto\",\"xlongequal\",\"xtofrom\",\"Newextarrow\"],html:[\"href\",\"class\",\"style\",\"cssId\"],mhchem:[\"ce\",\"pu\"],newcommand:[\"newcommand\",\"renewcommand\",\"newenvironment\",\"renewenvironment\",\"def\",\"let\"],unicode:[\"unicode\"],verb:[\"verb\"]})},config:function(t,e){var r,i,o,u,c,h,m=e.parseOptions,g=m.handlers.get(\"macro\"),y=m.handlers.get(\"environment\"),v=m.options.autoload;m.packageData.set(\"autoload\",{Autoload:f});try{for(var b=a(Object.keys(v)),A=b.next();!A.done;A=b.next()){var M=A.value,x=v[M],T=n(2===x.length&&Array.isArray(x[0])?x:[x,[]],2),w=T[0],S=T[1];try{for(var P=(o=void 0,a(w)),C=P.next();!C.done;C=P.next()){var O=C.value;g.lookup(O)&&\"color\"!==O||p.add(O,new s.Macro(O,f,[M,!0]))}}catch(t){o={error:t}}finally{try{C&&!C.done&&(u=P.return)&&u.call(P)}finally{if(o)throw o.error}}try{for(var E=(c=void 0,a(S)),k=E.next();!k.done;k=E.next()){var _=k.value;y.lookup(_)||d.add(_,new s.Macro(_,f,[M,!1]))}}catch(t){c={error:t}}finally{try{k&&!k.done&&(h=E.return)&&h.call(E)}finally{if(c)throw c.error}}}}catch(t){r={error:t}}finally{try{A&&!A.done&&(i=b.return)&&i.call(b)}finally{if(r)throw r.error}}m.packageData.get(\"require\")||l.RequireConfiguration.config(t,e)},init:function(t){t.options.require||c.defaultOptions(t.options,l.RequireConfiguration.options)},priority:10})},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ConfigMacrosConfiguration=void 0;var a=r(4),i=r(6),o=r(2),s=r(10),l=r(18);e.ConfigMacrosConfiguration=a.Configuration.create(\"configmacros\",{init:function(t){new o.CommandMap(\"configmacros-map\",{},{}),t.append(a.Configuration.local({handler:{macro:[\"configmacros-map\"]},priority:3}))},config:function(t,e){var r,a,i=e.parseOptions.handlers.retrieve(\"configmacros-map\"),o=e.parseOptions.options.macros;try{for(var u=n(Object.keys(o)),c=u.next();!c.done;c=u.next()){var f=c.value,p=\"string\"==typeof o[f]?[o[f]]:o[f],d=Array.isArray(p[2])?new s.Macro(f,l.default.MacroWithTemplate,p.slice(0,2).concat(p[2])):new s.Macro(f,l.default.Macro,p);i.add(f,d)}}catch(t){r={error:t}}finally{try{c&&!c.done&&(a=u.return)&&a.call(u)}finally{if(r)throw r.error}}},options:{macros:i.expandable({})}})},function(t,e,r){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.NewcommandConfiguration=void 0;var a=r(4),i=r(32),o=r(19);r(53);var s=r(16),l=r(2);e.NewcommandConfiguration=a.Configuration.create(\"newcommand\",{handler:{macro:[\"Newcommand-macros\"]},items:(n={},n[i.BeginEnvItem.prototype.kind]=i.BeginEnvItem,n),options:{maxMacros:1e3},init:function(t){new l.DelimiterMap(o.default.NEW_DELIMITER,s.default.delimiter,{}),new l.CommandMap(o.default.NEW_COMMAND,{},{}),new l.EnvironmentMap(o.default.NEW_ENVIRONMENT,s.default.environment,{},{}),t.append(a.Configuration.local({handler:{character:[],delimiter:[o.default.NEW_DELIMITER],macro:[o.default.NEW_DELIMITER,o.default.NEW_COMMAND],environment:[o.default.NEW_ENVIRONMENT]},priority:-1}))}})},function(t,e,r){\"use strict\";var n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.NoUndefinedConfiguration=void 0;var a=r(4);e.NoUndefinedConfiguration=a.Configuration.create(\"noundefined\",{fallback:{macro:function(t,e){var r,a,i=t.create(\"text\",\"\\\\\"+e),o=t.options.noundefined||{},s={};try{for(var l=n([\"color\",\"background\",\"size\"]),u=l.next();!u.done;u=l.next()){var c=u.value;o[c]&&(s[\"math\"+c]=o[c])}}catch(t){r={error:t}}finally{try{u&&!u.done&&(a=l.return)&&a.call(l)}finally{if(r)throw r.error}}t.Push(t.create(\"node\",\"mtext\",[],s,i))}},options:{noundefined:{color:\"red\",background:\"\",size:\"\"}},priority:3})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractInputJax=MathJax._.core.InputJax.AbstractInputJax},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractFindMath=MathJax._.core.FindMath.AbstractFindMath},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sortLength=MathJax._.util.string.sortLength,e.quotePattern=MathJax._.util.string.quotePattern,e.unicodeChars=MathJax._.util.string.unicodeChars,e.isPercent=MathJax._.util.string.isPercent,e.split=MathJax._.util.string.split},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMo=MathJax._.core.MmlTree.MmlNodes.mo.MmlMo},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractFactory=MathJax._.core.Tree.Factory.AbstractFactory},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(2),a=r(7),i=r(15),o=r(16),s=r(5);new n.RegExpMap(\"letter\",o.default.variable,/[a-z]/i),new n.RegExpMap(\"digit\",o.default.digit,/[0-9.,]/),new n.RegExpMap(\"command\",o.default.controlSequence,/^\\\\/),new n.MacroMap(\"special\",{\"{\":\"Open\",\"}\":\"Close\",\"~\":\"Tilde\",\"^\":\"Superscript\",_:\"Subscript\",\" \":\"Space\",\"\\t\":\"Space\",\"\\r\":\"Space\",\"\\n\":\"Space\",\"'\":\"Prime\",\"%\":\"Comment\",\"&\":\"Entry\",\"#\":\"Hash\",\"\\xa0\":\"Space\",\"\\u2019\":\"Prime\"},i.default),new n.CharacterMap(\"mathchar0mi\",o.default.mathchar0mi,{alpha:\"\\u03b1\",beta:\"\\u03b2\",gamma:\"\\u03b3\",delta:\"\\u03b4\",epsilon:\"\\u03f5\",zeta:\"\\u03b6\",eta:\"\\u03b7\",theta:\"\\u03b8\",iota:\"\\u03b9\",kappa:\"\\u03ba\",lambda:\"\\u03bb\",mu:\"\\u03bc\",nu:\"\\u03bd\",xi:\"\\u03be\",omicron:\"\\u03bf\",pi:\"\\u03c0\",rho:\"\\u03c1\",sigma:\"\\u03c3\",tau:\"\\u03c4\",upsilon:\"\\u03c5\",phi:\"\\u03d5\",chi:\"\\u03c7\",psi:\"\\u03c8\",omega:\"\\u03c9\",varepsilon:\"\\u03b5\",vartheta:\"\\u03d1\",varpi:\"\\u03d6\",varrho:\"\\u03f1\",varsigma:\"\\u03c2\",varphi:\"\\u03c6\",S:[\"\\xa7\",{mathvariant:a.TexConstant.Variant.NORMAL}],aleph:[\"\\u2135\",{mathvariant:a.TexConstant.Variant.NORMAL}],hbar:[\"\\u210f\",{variantForm:!0}],imath:\"\\u0131\",jmath:\"\\u0237\",ell:\"\\u2113\",wp:[\"\\u2118\",{mathvariant:a.TexConstant.Variant.NORMAL}],Re:[\"\\u211c\",{mathvariant:a.TexConstant.Variant.NORMAL}],Im:[\"\\u2111\",{mathvariant:a.TexConstant.Variant.NORMAL}],partial:[\"\\u2202\",{mathvariant:a.TexConstant.Variant.ITALIC}],infty:[\"\\u221e\",{mathvariant:a.TexConstant.Variant.NORMAL}],prime:[\"\\u2032\",{mathvariant:a.TexConstant.Variant.NORMAL,variantForm:!0}],emptyset:[\"\\u2205\",{mathvariant:a.TexConstant.Variant.NORMAL}],nabla:[\"\\u2207\",{mathvariant:a.TexConstant.Variant.NORMAL}],top:[\"\\u22a4\",{mathvariant:a.TexConstant.Variant.NORMAL}],bot:[\"\\u22a5\",{mathvariant:a.TexConstant.Variant.NORMAL}],angle:[\"\\u2220\",{mathvariant:a.TexConstant.Variant.NORMAL}],triangle:[\"\\u25b3\",{mathvariant:a.TexConstant.Variant.NORMAL}],backslash:[\"\\u2216\",{mathvariant:a.TexConstant.Variant.NORMAL,variantForm:!0}],forall:[\"\\u2200\",{mathvariant:a.TexConstant.Variant.NORMAL}],exists:[\"\\u2203\",{mathvariant:a.TexConstant.Variant.NORMAL}],neg:[\"\\xac\",{mathvariant:a.TexConstant.Variant.NORMAL}],lnot:[\"\\xac\",{mathvariant:a.TexConstant.Variant.NORMAL}],flat:[\"\\u266d\",{mathvariant:a.TexConstant.Variant.NORMAL}],natural:[\"\\u266e\",{mathvariant:a.TexConstant.Variant.NORMAL}],sharp:[\"\\u266f\",{mathvariant:a.TexConstant.Variant.NORMAL}],clubsuit:[\"\\u2663\",{mathvariant:a.TexConstant.Variant.NORMAL}],diamondsuit:[\"\\u2662\",{mathvariant:a.TexConstant.Variant.NORMAL}],heartsuit:[\"\\u2661\",{mathvariant:a.TexConstant.Variant.NORMAL}],spadesuit:[\"\\u2660\",{mathvariant:a.TexConstant.Variant.NORMAL}]}),new n.CharacterMap(\"mathchar0mo\",o.default.mathchar0mo,{surd:\"\\u221a\",coprod:[\"\\u2210\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigvee:[\"\\u22c1\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigwedge:[\"\\u22c0\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],biguplus:[\"\\u2a04\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigcap:[\"\\u22c2\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigcup:[\"\\u22c3\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],int:[\"\\u222b\",{texClass:s.TEXCLASS.OP}],intop:[\"\\u222b\",{texClass:s.TEXCLASS.OP,movesupsub:!0,movablelimits:!0}],iint:[\"\\u222c\",{texClass:s.TEXCLASS.OP}],iiint:[\"\\u222d\",{texClass:s.TEXCLASS.OP}],prod:[\"\\u220f\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],sum:[\"\\u2211\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigotimes:[\"\\u2a02\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigoplus:[\"\\u2a01\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],bigodot:[\"\\u2a00\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],oint:[\"\\u222e\",{texClass:s.TEXCLASS.OP}],bigsqcup:[\"\\u2a06\",{texClass:s.TEXCLASS.OP,movesupsub:!0}],smallint:[\"\\u222b\",{largeop:!1}],triangleleft:\"\\u25c3\",triangleright:\"\\u25b9\",bigtriangleup:\"\\u25b3\",bigtriangledown:\"\\u25bd\",wedge:\"\\u2227\",land:\"\\u2227\",vee:\"\\u2228\",lor:\"\\u2228\",cap:\"\\u2229\",cup:\"\\u222a\",ddagger:\"\\u2021\",dagger:\"\\u2020\",sqcap:\"\\u2293\",sqcup:\"\\u2294\",uplus:\"\\u228e\",amalg:\"\\u2a3f\",diamond:\"\\u22c4\",bullet:\"\\u2219\",wr:\"\\u2240\",div:\"\\xf7\",odot:[\"\\u2299\",{largeop:!1}],oslash:[\"\\u2298\",{largeop:!1}],otimes:[\"\\u2297\",{largeop:!1}],ominus:[\"\\u2296\",{largeop:!1}],oplus:[\"\\u2295\",{largeop:!1}],mp:\"\\u2213\",pm:\"\\xb1\",circ:\"\\u2218\",bigcirc:\"\\u25ef\",setminus:\"\\u2216\",cdot:\"\\u22c5\",ast:\"\\u2217\",times:\"\\xd7\",star:\"\\u22c6\",propto:\"\\u221d\",sqsubseteq:\"\\u2291\",sqsupseteq:\"\\u2292\",parallel:\"\\u2225\",mid:\"\\u2223\",dashv:\"\\u22a3\",vdash:\"\\u22a2\",leq:\"\\u2264\",le:\"\\u2264\",geq:\"\\u2265\",ge:\"\\u2265\",lt:\"<\",gt:\">\",succ:\"\\u227b\",prec:\"\\u227a\",approx:\"\\u2248\",succeq:\"\\u2ab0\",preceq:\"\\u2aaf\",supset:\"\\u2283\",subset:\"\\u2282\",supseteq:\"\\u2287\",subseteq:\"\\u2286\",in:\"\\u2208\",ni:\"\\u220b\",notin:\"\\u2209\",owns:\"\\u220b\",gg:\"\\u226b\",ll:\"\\u226a\",sim:\"\\u223c\",simeq:\"\\u2243\",perp:\"\\u22a5\",equiv:\"\\u2261\",asymp:\"\\u224d\",smile:\"\\u2323\",frown:\"\\u2322\",ne:\"\\u2260\",neq:\"\\u2260\",cong:\"\\u2245\",doteq:\"\\u2250\",bowtie:\"\\u22c8\",models:\"\\u22a8\",notChar:\"\\u29f8\",Leftrightarrow:\"\\u21d4\",Leftarrow:\"\\u21d0\",Rightarrow:\"\\u21d2\",leftrightarrow:\"\\u2194\",leftarrow:\"\\u2190\",gets:\"\\u2190\",rightarrow:\"\\u2192\",to:[\"\\u2192\",{accent:!1}],mapsto:\"\\u21a6\",leftharpoonup:\"\\u21bc\",leftharpoondown:\"\\u21bd\",rightharpoonup:\"\\u21c0\",rightharpoondown:\"\\u21c1\",nearrow:\"\\u2197\",searrow:\"\\u2198\",nwarrow:\"\\u2196\",swarrow:\"\\u2199\",rightleftharpoons:\"\\u21cc\",hookrightarrow:\"\\u21aa\",hookleftarrow:\"\\u21a9\",longleftarrow:\"\\u27f5\",Longleftarrow:\"\\u27f8\",longrightarrow:\"\\u27f6\",Longrightarrow:\"\\u27f9\",Longleftrightarrow:\"\\u27fa\",longleftrightarrow:\"\\u27f7\",longmapsto:\"\\u27fc\",ldots:\"\\u2026\",cdots:\"\\u22ef\",vdots:\"\\u22ee\",ddots:\"\\u22f1\",dotsc:\"\\u2026\",dotsb:\"\\u22ef\",dotsm:\"\\u22ef\",dotsi:\"\\u22ef\",dotso:\"\\u2026\",ldotp:[\".\",{texClass:s.TEXCLASS.PUNCT}],cdotp:[\"\\u22c5\",{texClass:s.TEXCLASS.PUNCT}],colon:[\":\",{texClass:s.TEXCLASS.PUNCT}]}),new n.CharacterMap(\"mathchar7\",o.default.mathchar7,{Gamma:\"\\u0393\",Delta:\"\\u0394\",Theta:\"\\u0398\",Lambda:\"\\u039b\",Xi:\"\\u039e\",Pi:\"\\u03a0\",Sigma:\"\\u03a3\",Upsilon:\"\\u03a5\",Phi:\"\\u03a6\",Psi:\"\\u03a8\",Omega:\"\\u03a9\",_:\"_\",\"#\":\"#\",$:\"$\",\"%\":\"%\",\"&\":\"&\",And:\"&\"}),new n.DelimiterMap(\"delimiter\",o.default.delimiter,{\"(\":\"(\",\")\":\")\",\"[\":\"[\",\"]\":\"]\",\"<\":\"\\u27e8\",\">\":\"\\u27e9\",\"\\\\lt\":\"\\u27e8\",\"\\\\gt\":\"\\u27e9\",\"/\":\"/\",\"|\":[\"|\",{texClass:s.TEXCLASS.ORD}],\".\":\"\",\"\\\\\\\\\":\"\\\\\",\"\\\\lmoustache\":\"\\u23b0\",\"\\\\rmoustache\":\"\\u23b1\",\"\\\\lgroup\":\"\\u27ee\",\"\\\\rgroup\":\"\\u27ef\",\"\\\\arrowvert\":\"\\u23d0\",\"\\\\Arrowvert\":\"\\u2016\",\"\\\\bracevert\":\"\\u23aa\",\"\\\\Vert\":[\"\\u2225\",{texClass:s.TEXCLASS.ORD}],\"\\\\|\":[\"\\u2225\",{texClass:s.TEXCLASS.ORD}],\"\\\\vert\":[\"|\",{texClass:s.TEXCLASS.ORD}],\"\\\\uparrow\":\"\\u2191\",\"\\\\downarrow\":\"\\u2193\",\"\\\\updownarrow\":\"\\u2195\",\"\\\\Uparrow\":\"\\u21d1\",\"\\\\Downarrow\":\"\\u21d3\",\"\\\\Updownarrow\":\"\\u21d5\",\"\\\\backslash\":\"\\\\\",\"\\\\rangle\":\"\\u27e9\",\"\\\\langle\":\"\\u27e8\",\"\\\\rbrace\":\"}\",\"\\\\lbrace\":\"{\",\"\\\\}\":\"}\",\"\\\\{\":\"{\",\"\\\\rceil\":\"\\u2309\",\"\\\\lceil\":\"\\u2308\",\"\\\\rfloor\":\"\\u230b\",\"\\\\lfloor\":\"\\u230a\",\"\\\\lbrack\":\"[\",\"\\\\rbrack\":\"]\"}),new n.CommandMap(\"macros\",{displaystyle:[\"SetStyle\",\"D\",!0,0],textstyle:[\"SetStyle\",\"T\",!1,0],scriptstyle:[\"SetStyle\",\"S\",!1,1],scriptscriptstyle:[\"SetStyle\",\"SS\",!1,2],rm:[\"SetFont\",a.TexConstant.Variant.NORMAL],mit:[\"SetFont\",a.TexConstant.Variant.ITALIC],oldstyle:[\"SetFont\",a.TexConstant.Variant.OLDSTYLE],cal:[\"SetFont\",a.TexConstant.Variant.CALLIGRAPHIC],it:[\"SetFont\",\"-tex-mathit\"],bf:[\"SetFont\",a.TexConstant.Variant.BOLD],bbFont:[\"SetFont\",a.TexConstant.Variant.DOUBLESTRUCK],scr:[\"SetFont\",a.TexConstant.Variant.SCRIPT],frak:[\"SetFont\",a.TexConstant.Variant.FRAKTUR],sf:[\"SetFont\",a.TexConstant.Variant.SANSSERIF],tt:[\"SetFont\",a.TexConstant.Variant.MONOSPACE],tiny:[\"SetSize\",.5],Tiny:[\"SetSize\",.6],scriptsize:[\"SetSize\",.7],small:[\"SetSize\",.85],normalsize:[\"SetSize\",1],large:[\"SetSize\",1.2],Large:[\"SetSize\",1.44],LARGE:[\"SetSize\",1.73],huge:[\"SetSize\",2.07],Huge:[\"SetSize\",2.49],arcsin:[\"NamedFn\"],arccos:[\"NamedFn\"],arctan:[\"NamedFn\"],arg:[\"NamedFn\"],cos:[\"NamedFn\"],cosh:[\"NamedFn\"],cot:[\"NamedFn\"],coth:[\"NamedFn\"],csc:[\"NamedFn\"],deg:[\"NamedFn\"],det:\"NamedOp\",dim:[\"NamedFn\"],exp:[\"NamedFn\"],gcd:\"NamedOp\",hom:[\"NamedFn\"],inf:\"NamedOp\",ker:[\"NamedFn\"],lg:[\"NamedFn\"],lim:\"NamedOp\",liminf:[\"NamedOp\",\"lim&thinsp;inf\"],limsup:[\"NamedOp\",\"lim&thinsp;sup\"],ln:[\"NamedFn\"],log:[\"NamedFn\"],max:\"NamedOp\",min:\"NamedOp\",Pr:\"NamedOp\",sec:[\"NamedFn\"],sin:[\"NamedFn\"],sinh:[\"NamedFn\"],sup:\"NamedOp\",tan:[\"NamedFn\"],tanh:[\"NamedFn\"],limits:[\"Limits\",1],nolimits:[\"Limits\",0],overline:[\"UnderOver\",\"00AF\",null,1],underline:[\"UnderOver\",\"005F\"],overbrace:[\"UnderOver\",\"23DE\",1],underbrace:[\"UnderOver\",\"23DF\",1],overparen:[\"UnderOver\",\"23DC\"],underparen:[\"UnderOver\",\"23DD\"],overrightarrow:[\"UnderOver\",\"2192\"],underrightarrow:[\"UnderOver\",\"2192\"],overleftarrow:[\"UnderOver\",\"2190\"],underleftarrow:[\"UnderOver\",\"2190\"],overleftrightarrow:[\"UnderOver\",\"2194\"],underleftrightarrow:[\"UnderOver\",\"2194\"],overset:\"Overset\",underset:\"Underset\",stackrel:[\"Macro\",\"\\\\mathrel{\\\\mathop{#2}\\\\limits^{#1}}\",2],over:\"Over\",overwithdelims:\"Over\",atop:\"Over\",atopwithdelims:\"Over\",above:\"Over\",abovewithdelims:\"Over\",brace:[\"Over\",\"{\",\"}\"],brack:[\"Over\",\"[\",\"]\"],choose:[\"Over\",\"(\",\")\"],frac:\"Frac\",sqrt:\"Sqrt\",root:\"Root\",uproot:[\"MoveRoot\",\"upRoot\"],leftroot:[\"MoveRoot\",\"leftRoot\"],left:\"LeftRight\",right:\"LeftRight\",middle:\"Middle\",llap:\"Lap\",rlap:\"Lap\",raise:\"RaiseLower\",lower:\"RaiseLower\",moveleft:\"MoveLeftRight\",moveright:\"MoveLeftRight\",\",\":[\"Spacer\",a.TexConstant.Length.THINMATHSPACE],\":\":[\"Spacer\",a.TexConstant.Length.MEDIUMMATHSPACE],\">\":[\"Spacer\",a.TexConstant.Length.MEDIUMMATHSPACE],\";\":[\"Spacer\",a.TexConstant.Length.THICKMATHSPACE],\"!\":[\"Spacer\",a.TexConstant.Length.NEGATIVETHINMATHSPACE],enspace:[\"Spacer\",\".5em\"],quad:[\"Spacer\",\"1em\"],qquad:[\"Spacer\",\"2em\"],thinspace:[\"Spacer\",a.TexConstant.Length.THINMATHSPACE],negthinspace:[\"Spacer\",a.TexConstant.Length.NEGATIVETHINMATHSPACE],hskip:\"Hskip\",hspace:\"Hskip\",kern:\"Hskip\",mskip:\"Hskip\",mspace:\"Hskip\",mkern:\"Hskip\",rule:\"rule\",Rule:[\"Rule\"],Space:[\"Rule\",\"blank\"],big:[\"MakeBig\",s.TEXCLASS.ORD,.85],Big:[\"MakeBig\",s.TEXCLASS.ORD,1.15],bigg:[\"MakeBig\",s.TEXCLASS.ORD,1.45],Bigg:[\"MakeBig\",s.TEXCLASS.ORD,1.75],bigl:[\"MakeBig\",s.TEXCLASS.OPEN,.85],Bigl:[\"MakeBig\",s.TEXCLASS.OPEN,1.15],biggl:[\"MakeBig\",s.TEXCLASS.OPEN,1.45],Biggl:[\"MakeBig\",s.TEXCLASS.OPEN,1.75],bigr:[\"MakeBig\",s.TEXCLASS.CLOSE,.85],Bigr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.15],biggr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.45],Biggr:[\"MakeBig\",s.TEXCLASS.CLOSE,1.75],bigm:[\"MakeBig\",s.TEXCLASS.REL,.85],Bigm:[\"MakeBig\",s.TEXCLASS.REL,1.15],biggm:[\"MakeBig\",s.TEXCLASS.REL,1.45],Biggm:[\"MakeBig\",s.TEXCLASS.REL,1.75],mathord:[\"TeXAtom\",s.TEXCLASS.ORD],mathop:[\"TeXAtom\",s.TEXCLASS.OP],mathopen:[\"TeXAtom\",s.TEXCLASS.OPEN],mathclose:[\"TeXAtom\",s.TEXCLASS.CLOSE],mathbin:[\"TeXAtom\",s.TEXCLASS.BIN],mathrel:[\"TeXAtom\",s.TEXCLASS.REL],mathpunct:[\"TeXAtom\",s.TEXCLASS.PUNCT],mathinner:[\"TeXAtom\",s.TEXCLASS.INNER],vcenter:[\"TeXAtom\",s.TEXCLASS.VCENTER],buildrel:\"BuildRel\",hbox:[\"HBox\",0],text:\"HBox\",mbox:[\"HBox\",0],fbox:\"FBox\",strut:\"Strut\",mathstrut:[\"Macro\",\"\\\\vphantom{(}\"],phantom:\"Phantom\",vphantom:[\"Phantom\",1,0],hphantom:[\"Phantom\",0,1],smash:\"Smash\",acute:[\"Accent\",\"00B4\"],grave:[\"Accent\",\"0060\"],ddot:[\"Accent\",\"00A8\"],tilde:[\"Accent\",\"007E\"],bar:[\"Accent\",\"00AF\"],breve:[\"Accent\",\"02D8\"],check:[\"Accent\",\"02C7\"],hat:[\"Accent\",\"005E\"],vec:[\"Accent\",\"2192\"],dot:[\"Accent\",\"02D9\"],widetilde:[\"Accent\",\"007E\",1],widehat:[\"Accent\",\"005E\",1],matrix:\"Matrix\",array:\"Matrix\",pmatrix:[\"Matrix\",\"(\",\")\"],cases:[\"Matrix\",\"{\",\"\",\"left left\",null,\".1em\",null,!0],eqalign:[\"Matrix\",null,null,\"right left\",a.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\"],displaylines:[\"Matrix\",null,null,\"center\",null,\".5em\",\"D\"],cr:\"Cr\",\"\\\\\":\"CrLaTeX\",newline:[\"CrLaTeX\",!0],hline:[\"HLine\",\"solid\"],hdashline:[\"HLine\",\"dashed\"],eqalignno:[\"Matrix\",null,null,\"right left\",a.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\",null,\"right\"],leqalignno:[\"Matrix\",null,null,\"right left\",a.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\",null,\"left\"],hfill:\"HFill\",hfil:\"HFill\",hfilll:\"HFill\",bmod:[\"Macro\",'\\\\mmlToken{mo}[lspace=\"thickmathspace\" rspace=\"thickmathspace\"]{mod}'],pmod:[\"Macro\",\"\\\\pod{\\\\mmlToken{mi}{mod}\\\\kern 6mu #1}\",1],mod:[\"Macro\",\"\\\\mathchoice{\\\\kern18mu}{\\\\kern12mu}{\\\\kern12mu}{\\\\kern12mu}\\\\mmlToken{mi}{mod}\\\\,\\\\,#1\",1],pod:[\"Macro\",\"\\\\mathchoice{\\\\kern18mu}{\\\\kern8mu}{\\\\kern8mu}{\\\\kern8mu}(#1)\",1],iff:[\"Macro\",\"\\\\;\\\\Longleftrightarrow\\\\;\"],skew:[\"Macro\",\"{{#2{#3\\\\mkern#1mu}\\\\mkern-#1mu}{}}\",3],mathcal:[\"Macro\",\"{\\\\cal #1}\",1],mathscr:[\"Macro\",\"{\\\\scr #1}\",1],mathrm:[\"Macro\",\"{\\\\rm #1}\",1],mathbf:[\"Macro\",\"{\\\\bf #1}\",1],mathbb:[\"Macro\",\"{\\\\bbFont #1}\",1],Bbb:[\"Macro\",\"{\\\\bbFont #1}\",1],mathit:[\"Macro\",\"{\\\\it #1}\",1],mathfrak:[\"Macro\",\"{\\\\frak #1}\",1],mathsf:[\"Macro\",\"{\\\\sf #1}\",1],mathtt:[\"Macro\",\"{\\\\tt #1}\",1],textrm:[\"HBox\",null,a.TexConstant.Variant.NORMAL],textit:[\"HBox\",null,a.TexConstant.Variant.ITALIC],textbf:[\"HBox\",null,a.TexConstant.Variant.BOLD],textsf:[\"HBox\",null,a.TexConstant.Variant.SANSSERIF],texttt:[\"HBox\",null,a.TexConstant.Variant.MONOSPACE],pmb:[\"Macro\",\"\\\\rlap{#1}\\\\kern1px{#1}\",1],TeX:[\"Macro\",\"T\\\\kern-.14em\\\\lower.5ex{E}\\\\kern-.115em X\"],LaTeX:[\"Macro\",\"L\\\\kern-.325em\\\\raise.21em{\\\\scriptstyle{A}}\\\\kern-.17em\\\\TeX\"],\" \":[\"Macro\",\"\\\\text{ }\"],not:\"Not\",dots:\"Dots\",space:\"Tilde\",\"\\xa0\":\"Tilde\",begin:\"BeginEnd\",end:\"BeginEnd\",label:\"HandleLabel\",ref:\"HandleRef\",nonumber:\"HandleNoTag\",mathchoice:\"MathChoice\",mmlToken:\"MmlToken\"},i.default),new n.EnvironmentMap(\"environment\",o.default.environment,{array:[\"AlignedArray\"],equation:[\"Equation\",null,!0],\"equation*\":[\"Equation\",null,!1],eqnarray:[\"EqnArray\",null,!0,!0,\"rcl\",\"0 \"+a.TexConstant.Length.THICKMATHSPACE,\".5em\"]},i.default),new n.CharacterMap(\"not_remap\",null,{\"\\u2190\":\"\\u219a\",\"\\u2192\":\"\\u219b\",\"\\u2194\":\"\\u21ae\",\"\\u21d0\":\"\\u21cd\",\"\\u21d2\":\"\\u21cf\",\"\\u21d4\":\"\\u21ce\",\"\\u2208\":\"\\u2209\",\"\\u220b\":\"\\u220c\",\"\\u2223\":\"\\u2224\",\"\\u2225\":\"\\u2226\",\"\\u223c\":\"\\u2241\",\"~\":\"\\u2241\",\"\\u2243\":\"\\u2244\",\"\\u2245\":\"\\u2247\",\"\\u2248\":\"\\u2249\",\"\\u224d\":\"\\u226d\",\"=\":\"\\u2260\",\"\\u2261\":\"\\u2262\",\"<\":\"\\u226e\",\">\":\"\\u226f\",\"\\u2264\":\"\\u2270\",\"\\u2265\":\"\\u2271\",\"\\u2272\":\"\\u2274\",\"\\u2273\":\"\\u2275\",\"\\u2276\":\"\\u2278\",\"\\u2277\":\"\\u2279\",\"\\u227a\":\"\\u2280\",\"\\u227b\":\"\\u2281\",\"\\u2282\":\"\\u2284\",\"\\u2283\":\"\\u2285\",\"\\u2286\":\"\\u2288\",\"\\u2287\":\"\\u2289\",\"\\u22a2\":\"\\u22ac\",\"\\u22a8\":\"\\u22ad\",\"\\u22a9\":\"\\u22ae\",\"\\u22ab\":\"\\u22af\",\"\\u227c\":\"\\u22e0\",\"\\u227d\":\"\\u22e1\",\"\\u2291\":\"\\u22e2\",\"\\u2292\":\"\\u22e3\",\"\\u22b2\":\"\\u22ea\",\"\\u22b3\":\"\\u22eb\",\"\\u22b4\":\"\\u22ec\",\"\\u22b5\":\"\\u22ed\",\"\\u2203\":\"\\u2204\"})},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(11).add({Pcy:\"\\u041f\",Poincareplane:\"\\u210c\",Pr:\"\\u2abb\",Prime:\"\\u2033\",Proportion:\"\\u2237\",par:\"\\u2225\",para:\"\\xb6\",parallel:\"\\u2225\",parsim:\"\\u2af3\",parsl:\"\\u2afd\",part:\"\\u2202\",pcy:\"\\u043f\",percnt:\"%\",permil:\"\\u2030\",perp:\"\\u22a5\",pertenk:\"\\u2031\",phmmat:\"\\u2133\",phone:\"\\u260e\",pitchfork:\"\\u22d4\",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\",pound:\"\\xa3\",pr:\"\\u227a\",prE:\"\\u2ab3\",prcue:\"\\u227c\",pre:\"\\u2aaf\",prec:\"\\u227a\",precapprox:\"\\u2ab7\",preccurlyeq:\"\\u227c\",preceq:\"\\u2aaf\",precsim:\"\\u227e\",primes:\"\\u2119\",prnE:\"\\u2ab5\",prnap:\"\\u2ab9\",prnsim:\"\\u22e8\",prod:\"\\u220f\",profalar:\"\\u232e\",profline:\"\\u2312\",profsurf:\"\\u2313\",prop:\"\\u221d\",propto:\"\\u221d\",prsim:\"\\u227e\",prurel:\"\\u22b0\",puncsp:\"\\u2008\"},\"p\")},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),r(11).add({RBarr:\"\\u2910\",REG:\"\\xae\",Racute:\"\\u0154\",Rang:\"\\u27eb\",Rarrtl:\"\\u2916\",Rcaron:\"\\u0158\",Rcedil:\"\\u0156\",Rcy:\"\\u0420\",ReverseElement:\"\\u220b\",ReverseUpEquilibrium:\"\\u296f\",Rho:\"\\u03a1\",RightArrowBar:\"\\u21e5\",RightDoubleBracket:\"\\u27e7\",RightDownTeeVector:\"\\u295d\",RightDownVectorBar:\"\\u2955\",RightTeeVector:\"\\u295b\",RightTriangleBar:\"\\u29d0\",RightUpDownVector:\"\\u294f\",RightUpTeeVector:\"\\u295c\",RightUpVectorBar:\"\\u2954\",RightVectorBar:\"\\u2953\",RoundImplies:\"\\u2970\",RuleDelayed:\"\\u29f4\",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\",rarrw:\"\\u219d\",ratail:\"\\u291a\",ratio:\"\\u2236\",rationals:\"\\u211a\",rbarr:\"\\u290d\",rbbrk:\"\\u2773\",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\",rhard:\"\\u21c1\",rharu:\"\\u21c0\",rharul:\"\\u296c\",rightarrow:\"\\u2192\",rightarrowtail:\"\\u21a3\",rightharpoondown:\"\\u21c1\",rightharpoonup:\"\\u21c0\",rightleftarrows:\"\\u21c4\",rightleftharpoons:\"\\u21cc\",rightsquigarrow:\"\\u219d\",risingdotseq:\"\\u2253\",rlarr:\"\\u21c4\",rlhar:\"\\u21cc\",rlm:\"\\u200f\",rmoustache:\"\\u23b1\",rnmid:\"\\u2aee\",roang:\"\\u27ed\",roarr:\"\\u21fe\",robrk:\"\\u27e7\",ropar:\"\\u2986\",roplus:\"\\u2a2e\",rotimes:\"\\u2a35\",rpar:\")\",rpargt:\"\\u2994\",rppolint:\"\\u2a12\",rrarr:\"\\u21c9\",rsaquo:\"\\u203a\",rsh:\"\\u21b1\",rsqb:\"]\",rsquo:\"\\u2019\",rsquor:\"\\u2019\",rthree:\"\\u22cc\",rtrie:\"\\u22b5\",rtrif:\"\\u25b8\",rtriltri:\"\\u29ce\",ruluhar:\"\\u2968\",rx:\"\\u211e\"},\"r\")},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(17),a=r(2),i=r(7),o=r(16),s=r(3),l=r(5),u=function(t){for(var e=[],r=0,n=t.length;r<n;r++)e[r]=s.default.Em(t[r]);return e.join(\" \")};new a.CharacterMap(\"AMSmath-mathchar0mo\",o.default.mathchar0mo,{iiiint:[\"\\u2a0c\",{texClass:l.TEXCLASS.OP}]}),new a.CommandMap(\"AMSmath-macros\",{mathring:[\"Accent\",\"02DA\"],nobreakspace:\"Tilde\",negmedspace:[\"Spacer\",i.TexConstant.Length.NEGATIVEMEDIUMMATHSPACE],negthickspace:[\"Spacer\",i.TexConstant.Length.NEGATIVETHICKMATHSPACE],idotsint:[\"MultiIntegral\",\"\\\\int\\\\cdots\\\\int\"],dddot:[\"Accent\",\"20DB\"],ddddot:[\"Accent\",\"20DC\"],sideset:[\"Macro\",\"\\\\mathop{\\\\mathop{\\\\rlap{\\\\phantom{#3}}}\\\\nolimits#1\\\\!\\\\mathop{#3}\\\\nolimits#2}\",3],boxed:[\"Macro\",\"\\\\fbox{$\\\\displaystyle{#1}$}\",1],tag:\"HandleTag\",notag:\"HandleNoTag\",eqref:[\"HandleRef\",!0],substack:[\"Macro\",\"\\\\begin{subarray}{c}#1\\\\end{subarray}\",1],injlim:[\"NamedOp\",\"inj&thinsp;lim\"],projlim:[\"NamedOp\",\"proj&thinsp;lim\"],varliminf:[\"Macro\",\"\\\\mathop{\\\\underline{\\\\mmlToken{mi}{lim}}}\"],varlimsup:[\"Macro\",\"\\\\mathop{\\\\overline{\\\\mmlToken{mi}{lim}}}\"],varinjlim:[\"Macro\",\"\\\\mathop{\\\\underrightarrow{\\\\mmlToken{mi}{lim}}}\"],varprojlim:[\"Macro\",\"\\\\mathop{\\\\underleftarrow{\\\\mmlToken{mi}{lim}}}\"],DeclareMathOperator:\"HandleDeclareOp\",operatorname:\"HandleOperatorName\",SkipLimits:\"SkipLimits\",genfrac:\"Genfrac\",frac:[\"Genfrac\",\"\",\"\",\"\",\"\"],tfrac:[\"Genfrac\",\"\",\"\",\"\",\"1\"],dfrac:[\"Genfrac\",\"\",\"\",\"\",\"0\"],binom:[\"Genfrac\",\"(\",\")\",\"0\",\"\"],tbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"1\"],dbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"0\"],cfrac:\"CFrac\",shoveleft:[\"HandleShove\",i.TexConstant.Align.LEFT],shoveright:[\"HandleShove\",i.TexConstant.Align.RIGHT],xrightarrow:[\"xArrow\",8594,5,6],xleftarrow:[\"xArrow\",8592,7,3]},n.AmsMethods),new a.EnvironmentMap(\"AMSmath-environment\",o.default.environment,{\"eqnarray*\":[\"EqnArray\",null,!1,!0,\"rcl\",\"0 \"+i.TexConstant.Length.THICKMATHSPACE,\".5em\"],align:[\"EqnArray\",null,!0,!0,\"rlrlrlrlrlrl\",u([0,2,0,2,0,2,0,2,0,2,0])],\"align*\":[\"EqnArray\",null,!1,!0,\"rlrlrlrlrlrl\",u([0,2,0,2,0,2,0,2,0,2,0])],multline:[\"Multline\",null,!0],\"multline*\":[\"Multline\",null,!1],split:[\"EqnArray\",null,!1,!1,\"rl\",u([0])],gather:[\"EqnArray\",null,!0,!0,\"c\"],\"gather*\":[\"EqnArray\",null,!1,!0,\"c\"],alignat:[\"AlignAt\",null,!0,!0],\"alignat*\":[\"AlignAt\",null,!1,!0],alignedat:[\"AlignAt\",null,!1,!1],aligned:[\"AmsEqnArray\",null,null,null,\"rlrlrlrlrlrl\",u([0,2,0,2,0,2,0,2,0,2,0]),\".5em\",\"D\"],gathered:[\"AmsEqnArray\",null,null,null,\"c\",null,\".5em\",\"D\"],subarray:[\"Array\",null,null,null,null,u([0]),\"0.1em\",\"S\",1],smallmatrix:[\"Array\",null,null,null,\"c\",u([1/3]),\".2em\",\"S\",1],matrix:[\"Array\",null,null,null,\"c\"],pmatrix:[\"Array\",null,\"(\",\")\",\"c\"],bmatrix:[\"Array\",null,\"[\",\"]\",\"c\"],Bmatrix:[\"Array\",null,\"\\\\{\",\"\\\\}\",\"c\"],vmatrix:[\"Array\",null,\"\\\\vert\",\"\\\\vert\",\"c\"],Vmatrix:[\"Array\",null,\"\\\\Vert\",\"\\\\Vert\",\"c\"],cases:[\"Array\",null,\"\\\\{\",\".\",\"ll\",null,\".2em\",\"T\"]},n.AmsMethods),new a.DelimiterMap(\"AMSmath-delimiter\",o.default.delimiter,{\"\\\\lvert\":[\"|\",{texClass:l.TEXCLASS.OPEN}],\"\\\\rvert\":[\"|\",{texClass:l.TEXCLASS.CLOSE}],\"\\\\lVert\":[\"\\u2016\",{texClass:l.TEXCLASS.OPEN}],\"\\\\rVert\":[\"\\u2016\",{texClass:l.TEXCLASS.CLOSE}]}),new a.CharacterMap(\"AMSsymbols-mathchar0mi\",o.default.mathchar0mi,{digamma:\"\\u03dd\",varkappa:\"\\u03f0\",varGamma:[\"\\u0393\",{mathvariant:i.TexConstant.Variant.ITALIC}],varDelta:[\"\\u0394\",{mathvariant:i.TexConstant.Variant.ITALIC}],varTheta:[\"\\u0398\",{mathvariant:i.TexConstant.Variant.ITALIC}],varLambda:[\"\\u039b\",{mathvariant:i.TexConstant.Variant.ITALIC}],varXi:[\"\\u039e\",{mathvariant:i.TexConstant.Variant.ITALIC}],varPi:[\"\\u03a0\",{mathvariant:i.TexConstant.Variant.ITALIC}],varSigma:[\"\\u03a3\",{mathvariant:i.TexConstant.Variant.ITALIC}],varUpsilon:[\"\\u03a5\",{mathvariant:i.TexConstant.Variant.ITALIC}],varPhi:[\"\\u03a6\",{mathvariant:i.TexConstant.Variant.ITALIC}],varPsi:[\"\\u03a8\",{mathvariant:i.TexConstant.Variant.ITALIC}],varOmega:[\"\\u03a9\",{mathvariant:i.TexConstant.Variant.ITALIC}],beth:\"\\u2136\",gimel:\"\\u2137\",daleth:\"\\u2138\",backprime:[\"\\u2035\",{variantForm:!0}],hslash:\"\\u210f\",varnothing:[\"\\u2205\",{variantForm:!0}],blacktriangle:\"\\u25b4\",triangledown:[\"\\u25bd\",{variantForm:!0}],blacktriangledown:\"\\u25be\",square:\"\\u25fb\",Box:\"\\u25fb\",blacksquare:\"\\u25fc\",lozenge:\"\\u25ca\",Diamond:\"\\u25ca\",blacklozenge:\"\\u29eb\",circledS:[\"\\u24c8\",{mathvariant:i.TexConstant.Variant.NORMAL}],bigstar:\"\\u2605\",sphericalangle:\"\\u2222\",measuredangle:\"\\u2221\",nexists:\"\\u2204\",complement:\"\\u2201\",mho:\"\\u2127\",eth:[\"\\xf0\",{mathvariant:i.TexConstant.Variant.NORMAL}],Finv:\"\\u2132\",diagup:\"\\u2571\",Game:\"\\u2141\",diagdown:\"\\u2572\",Bbbk:[\"k\",{mathvariant:i.TexConstant.Variant.DOUBLESTRUCK}],yen:\"\\xa5\",circledR:\"\\xae\",checkmark:\"\\u2713\",maltese:\"\\u2720\"}),new a.CharacterMap(\"AMSsymbols-mathchar0m0\",o.default.mathchar0mo,{dotplus:\"\\u2214\",ltimes:\"\\u22c9\",smallsetminus:[\"\\u2216\",{variantForm:!0}],rtimes:\"\\u22ca\",Cap:\"\\u22d2\",doublecap:\"\\u22d2\",leftthreetimes:\"\\u22cb\",Cup:\"\\u22d3\",doublecup:\"\\u22d3\",rightthreetimes:\"\\u22cc\",barwedge:\"\\u22bc\",curlywedge:\"\\u22cf\",veebar:\"\\u22bb\",curlyvee:\"\\u22ce\",doublebarwedge:\"\\u2a5e\",boxminus:\"\\u229f\",circleddash:\"\\u229d\",boxtimes:\"\\u22a0\",circledast:\"\\u229b\",boxdot:\"\\u22a1\",circledcirc:\"\\u229a\",boxplus:\"\\u229e\",centerdot:[\"\\u22c5\",{variantForm:!0}],divideontimes:\"\\u22c7\",intercal:\"\\u22ba\",leqq:\"\\u2266\",geqq:\"\\u2267\",leqslant:\"\\u2a7d\",geqslant:\"\\u2a7e\",eqslantless:\"\\u2a95\",eqslantgtr:\"\\u2a96\",lesssim:\"\\u2272\",gtrsim:\"\\u2273\",lessapprox:\"\\u2a85\",gtrapprox:\"\\u2a86\",approxeq:\"\\u224a\",lessdot:\"\\u22d6\",gtrdot:\"\\u22d7\",lll:\"\\u22d8\",llless:\"\\u22d8\",ggg:\"\\u22d9\",gggtr:\"\\u22d9\",lessgtr:\"\\u2276\",gtrless:\"\\u2277\",lesseqgtr:\"\\u22da\",gtreqless:\"\\u22db\",lesseqqgtr:\"\\u2a8b\",gtreqqless:\"\\u2a8c\",doteqdot:\"\\u2251\",Doteq:\"\\u2251\",eqcirc:\"\\u2256\",risingdotseq:\"\\u2253\",circeq:\"\\u2257\",fallingdotseq:\"\\u2252\",triangleq:\"\\u225c\",backsim:\"\\u223d\",thicksim:[\"\\u223c\",{variantForm:!0}],backsimeq:\"\\u22cd\",thickapprox:[\"\\u2248\",{variantForm:!0}],subseteqq:\"\\u2ac5\",supseteqq:\"\\u2ac6\",Subset:\"\\u22d0\",Supset:\"\\u22d1\",sqsubset:\"\\u228f\",sqsupset:\"\\u2290\",preccurlyeq:\"\\u227c\",succcurlyeq:\"\\u227d\",curlyeqprec:\"\\u22de\",curlyeqsucc:\"\\u22df\",precsim:\"\\u227e\",succsim:\"\\u227f\",precapprox:\"\\u2ab7\",succapprox:\"\\u2ab8\",vartriangleleft:\"\\u22b2\",lhd:\"\\u22b2\",vartriangleright:\"\\u22b3\",rhd:\"\\u22b3\",trianglelefteq:\"\\u22b4\",unlhd:\"\\u22b4\",trianglerighteq:\"\\u22b5\",unrhd:\"\\u22b5\",vDash:[\"\\u22a8\",{variantForm:!0}],Vdash:\"\\u22a9\",Vvdash:\"\\u22aa\",smallsmile:[\"\\u2323\",{variantForm:!0}],shortmid:[\"\\u2223\",{variantForm:!0}],smallfrown:[\"\\u2322\",{variantForm:!0}],shortparallel:[\"\\u2225\",{variantForm:!0}],bumpeq:\"\\u224f\",between:\"\\u226c\",Bumpeq:\"\\u224e\",pitchfork:\"\\u22d4\",varpropto:[\"\\u221d\",{variantForm:!0}],backepsilon:\"\\u220d\",blacktriangleleft:\"\\u25c2\",blacktriangleright:\"\\u25b8\",therefore:\"\\u2234\",because:\"\\u2235\",eqsim:\"\\u2242\",vartriangle:[\"\\u25b3\",{variantForm:!0}],Join:\"\\u22c8\",nless:\"\\u226e\",ngtr:\"\\u226f\",nleq:\"\\u2270\",ngeq:\"\\u2271\",nleqslant:[\"\\u2a87\",{variantForm:!0}],ngeqslant:[\"\\u2a88\",{variantForm:!0}],nleqq:[\"\\u2270\",{variantForm:!0}],ngeqq:[\"\\u2271\",{variantForm:!0}],lneq:\"\\u2a87\",gneq:\"\\u2a88\",lneqq:\"\\u2268\",gneqq:\"\\u2269\",lvertneqq:[\"\\u2268\",{variantForm:!0}],gvertneqq:[\"\\u2269\",{variantForm:!0}],lnsim:\"\\u22e6\",gnsim:\"\\u22e7\",lnapprox:\"\\u2a89\",gnapprox:\"\\u2a8a\",nprec:\"\\u2280\",nsucc:\"\\u2281\",npreceq:[\"\\u22e0\",{variantForm:!0}],nsucceq:[\"\\u22e1\",{variantForm:!0}],precneqq:\"\\u2ab5\",succneqq:\"\\u2ab6\",precnsim:\"\\u22e8\",succnsim:\"\\u22e9\",precnapprox:\"\\u2ab9\",succnapprox:\"\\u2aba\",nsim:\"\\u2241\",ncong:\"\\u2247\",nshortmid:[\"\\u2224\",{variantForm:!0}],nshortparallel:[\"\\u2226\",{variantForm:!0}],nmid:\"\\u2224\",nparallel:\"\\u2226\",nvdash:\"\\u22ac\",nvDash:\"\\u22ad\",nVdash:\"\\u22ae\",nVDash:\"\\u22af\",ntriangleleft:\"\\u22ea\",ntriangleright:\"\\u22eb\",ntrianglelefteq:\"\\u22ec\",ntrianglerighteq:\"\\u22ed\",nsubseteq:\"\\u2288\",nsupseteq:\"\\u2289\",nsubseteqq:[\"\\u2288\",{variantForm:!0}],nsupseteqq:[\"\\u2289\",{variantForm:!0}],subsetneq:\"\\u228a\",supsetneq:\"\\u228b\",varsubsetneq:[\"\\u228a\",{variantForm:!0}],varsupsetneq:[\"\\u228b\",{variantForm:!0}],subsetneqq:\"\\u2acb\",supsetneqq:\"\\u2acc\",varsubsetneqq:[\"\\u2acb\",{variantForm:!0}],varsupsetneqq:[\"\\u2acc\",{variantForm:!0}],leftleftarrows:\"\\u21c7\",rightrightarrows:\"\\u21c9\",leftrightarrows:\"\\u21c6\",rightleftarrows:\"\\u21c4\",Lleftarrow:\"\\u21da\",Rrightarrow:\"\\u21db\",twoheadleftarrow:\"\\u219e\",twoheadrightarrow:\"\\u21a0\",leftarrowtail:\"\\u21a2\",rightarrowtail:\"\\u21a3\",looparrowleft:\"\\u21ab\",looparrowright:\"\\u21ac\",leftrightharpoons:\"\\u21cb\",rightleftharpoons:[\"\\u21cc\",{variantForm:!0}],curvearrowleft:\"\\u21b6\",curvearrowright:\"\\u21b7\",circlearrowleft:\"\\u21ba\",circlearrowright:\"\\u21bb\",Lsh:\"\\u21b0\",Rsh:\"\\u21b1\",upuparrows:\"\\u21c8\",downdownarrows:\"\\u21ca\",upharpoonleft:\"\\u21bf\",upharpoonright:\"\\u21be\",downharpoonleft:\"\\u21c3\",restriction:\"\\u21be\",multimap:\"\\u22b8\",downharpoonright:\"\\u21c2\",leftrightsquigarrow:\"\\u21ad\",rightsquigarrow:\"\\u21dd\",leadsto:\"\\u21dd\",dashrightarrow:\"\\u21e2\",dashleftarrow:\"\\u21e0\",nleftarrow:\"\\u219a\",nrightarrow:\"\\u219b\",nLeftarrow:\"\\u21cd\",nRightarrow:\"\\u21cf\",nleftrightarrow:\"\\u21ae\",nLeftrightarrow:\"\\u21ce\"}),new a.DelimiterMap(\"AMSsymbols-delimiter\",o.default.delimiter,{\"\\\\ulcorner\":\"\\u231c\",\"\\\\urcorner\":\"\\u231d\",\"\\\\llcorner\":\"\\u231e\",\"\\\\lrcorner\":\"\\u231f\"}),new a.CommandMap(\"AMSsymbols-macros\",{implies:[\"Macro\",\"\\\\;\\\\Longrightarrow\\\\;\"],impliedby:[\"Macro\",\"\\\\;\\\\Longleftarrow\\\\;\"]},n.AmsMethods)},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.mathjax=MathJax._.mathjax.mathjax},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(18);new(r(2).CommandMap)(\"Newcommand-macros\",{newcommand:\"NewCommand\",renewcommand:\"NewCommand\",newenvironment:\"NewEnvironment\",renewenvironment:\"NewEnvironment\",def:\"MacroDef\",let:\"Let\"},n.default)},function(t,e,r){\"use strict\";r.r(e);var n=r(21),a=r(20),i=r(4),o=r(23),s=r(22),l=r(12),u=r(27),c=r(1),f=r(16),p=r(25),d=r(3),h=r(24),m=r(13),g=r(26),y=r(10),v=r(2),b=r(9),A=r(7),M=r(0),x=r(8),T=r(37),w=r(29),S=r(17),P=r(38),C=r(28),O=r(14),E=r(15),k=r(39),_=r(40),I=r(32),N=r(18),L=r(19),F=r(41),q=r(30);Object(n.combineWithMathJax)({_:{input:{tex_ts:a,tex:{Configuration:i,FilterUtil:o,FindTeX:s,MapHandler:l,NodeFactory:u,NodeUtil:c,ParseMethods:f,ParseOptions:p,ParseUtil:d,Stack:h,StackItem:m,StackItemFactory:g,Symbol:y,SymbolMap:v,Tags:b,TexConstants:A,TexError:M,TexParser:x,ams:{AmsConfiguration:T,AmsItems:w,AmsMethods:S},autoload:{AutoloadConfiguration:P},base:{BaseConfiguration:C,BaseItems:O,BaseMethods:E},configmacros:{ConfigMacrosConfiguration:k},newcommand:{NewcommandConfiguration:_,NewcommandItems:I,NewcommandMethods:N,NewcommandUtil:L},noundefined:{NoUndefinedConfiguration:F},require:{RequireConfiguration:q}}}}});var R=r(6);r(31).Loader.preLoad(\"input/tex-base\",\"[tex]/ams\",\"[tex]/newcommand\",\"[tex]/noundefined\",\"[tex]/require\",\"[tex]/autoload\",\"[tex]/configmacros\"),function(t){if(MathJax.startup){MathJax.startup.registerConstructor(\"tex\",a.TeX),MathJax.startup.useInput(\"tex\"),MathJax.config.tex||(MathJax.config.tex={});var e=MathJax.config.tex.packages;MathJax.config.tex.packages=t,e&&Object(R.insert)(MathJax.config.tex,{packages:e})}}([\"base\",\"ams\",\"newcommand\",\"noundefined\",\"require\",\"autoload\",\"configmacros\"])}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/output/chtml/fonts/tex.js",
    "content": "!function(){\"use strict\";var c={8667:function(c,f){f.q=void 0,f.q=\"3.2.2\"},2308:function(c,f,i){var t,e=this&&this.__extends||(t=function(c,f){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(c,f){c.__proto__=f}||function(c,f){for(var i in f)Object.prototype.hasOwnProperty.call(f,i)&&(c[i]=f[i])},t(c,f)},function(c,f){if(\"function\"!=typeof f&&null!==f)throw new TypeError(\"Class extends value \"+String(f)+\" is not a constructor or null\");function i(){this.constructor=c}t(c,f),c.prototype=null===f?Object.create(f):(i.prototype=f.prototype,new i)}),s=this&&this.__assign||function(){return s=Object.assign||function(c){for(var f,i=1,t=arguments.length;i<t;i++)for(var e in f=arguments[i])Object.prototype.hasOwnProperty.call(f,e)&&(c[e]=f[e]);return c},s.apply(this,arguments)};Object.defineProperty(f,\"__esModule\",{value:!0}),f.TeXFont=void 0;var r=i(73),o=i(2176),a=i(7841),S=i(5031),l=i(6051),n=i(9236),B=i(1937),d=i(4244),u=i(482),k=i(196),I=i(527),A=i(3518),p=i(965),m=i(9169),h=i(6736),M=i(2290),x=i(3012),H=i(8787),_=i(5392),E=i(6318),y=i(5351),R=i(873),v=i(7611),D=i(6590),b=i(8798),T=i(2138),X=i(7481),O=function(c){function f(){return null!==c&&c.apply(this,arguments)||this}return e(f,c),f.defaultCssFamilyPrefix=\"MJXZERO\",f.defaultVariantClasses={normal:\"mjx-n\",bold:\"mjx-b\",italic:\"mjx-i\",\"bold-italic\":\"mjx-b mjx-i\",\"double-struck\":\"mjx-ds mjx-b\",fraktur:\"mjx-fr\",\"bold-fraktur\":\"mjx-fr mjx-b\",script:\"mjx-sc mjx-i\",\"bold-script\":\"mjx-sc mjx-b mjx-i\",\"sans-serif\":\"mjx-ss\",\"bold-sans-serif\":\"mjx-ss mjx-b\",\"sans-serif-italic\":\"mjx-ss mjx-i\",\"sans-serif-bold-italic\":\"mjx-ss mjx-b mjx-i\",monospace:\"mjx-ty\",\"-smallop\":\"mjx-sop\",\"-largeop\":\"mjx-lop\",\"-size3\":\"mjx-s3\",\"-size4\":\"mjx-s4\",\"-tex-calligraphic\":\"mjx-cal mjx-i\",\"-tex-bold-calligraphic\":\"mjx-cal mjx-b\",\"-tex-mathit\":\"mjx-mit mjx-i\",\"-tex-oldstyle\":\"mjx-os\",\"-tex-bold-oldstyle\":\"mjx-os mjx-b\",\"-tex-variant\":\"mjx-var\"},f.defaultVariantLetters={normal:\"\",bold:\"B\",italic:\"MI\",\"bold-italic\":\"BI\",\"double-struck\":\"A\",fraktur:\"FR\",\"bold-fraktur\":\"FRB\",script:\"SC\",\"bold-script\":\"SCB\",\"sans-serif\":\"SS\",\"bold-sans-serif\":\"SSB\",\"sans-serif-italic\":\"SSI\",\"sans-serif-bold-italic\":\"SSBI\",monospace:\"T\",\"-smallop\":\"S1\",\"-largeop\":\"S2\",\"-size3\":\"S3\",\"-size4\":\"S4\",\"-tex-calligraphic\":\"C\",\"-tex-bold-calligraphic\":\"CB\",\"-tex-mathit\":\"MI\",\"-tex-oldstyle\":\"C\",\"-tex-bold-oldstyle\":\"CB\",\"-tex-variant\":\"A\"},f.defaultDelimiters=X.delimiters,f.defaultChars={normal:I.normal,bold:S.bold,italic:d.italic,\"bold-italic\":a.boldItalic,\"double-struck\":l.doubleStruck,fraktur:B.fraktur,\"bold-fraktur\":n.frakturBold,script:x.script,\"bold-script\":M.scriptBold,\"sans-serif\":h.sansSerif,\"bold-sans-serif\":p.sansSerifBold,\"sans-serif-italic\":m.sansSerifItalic,\"sans-serif-bold-italic\":A.sansSerifBoldItalic,monospace:k.monospace,\"-smallop\":H.smallop,\"-largeop\":u.largeop,\"-size3\":D.texSize3,\"-size4\":b.texSize4,\"-tex-calligraphic\":E.texCalligraphic,\"-tex-bold-calligraphic\":_.texCalligraphicBold,\"-tex-mathit\":y.texMathit,\"-tex-oldstyle\":v.texOldstyle,\"-tex-bold-oldstyle\":R.texOldstyleBold,\"-tex-variant\":T.texVariant},f.defaultStyles=s(s({},r.CHTMLFontData.defaultStyles),{\".MJX-TEX\":{\"font-family\":\"MJXZERO, MJXTEX\"},\".TEX-B\":{\"font-family\":\"MJXZERO, MJXTEX-B\"},\".TEX-I\":{\"font-family\":\"MJXZERO, MJXTEX-I\"},\".TEX-MI\":{\"font-family\":\"MJXZERO, MJXTEX-MI\"},\".TEX-BI\":{\"font-family\":\"MJXZERO, MJXTEX-BI\"},\".TEX-S1\":{\"font-family\":\"MJXZERO, MJXTEX-S1\"},\".TEX-S2\":{\"font-family\":\"MJXZERO, MJXTEX-S2\"},\".TEX-S3\":{\"font-family\":\"MJXZERO, MJXTEX-S3\"},\".TEX-S4\":{\"font-family\":\"MJXZERO, MJXTEX-S4\"},\".TEX-A\":{\"font-family\":\"MJXZERO, MJXTEX-A\"},\".TEX-C\":{\"font-family\":\"MJXZERO, MJXTEX-C\"},\".TEX-CB\":{\"font-family\":\"MJXZERO, MJXTEX-CB\"},\".TEX-FR\":{\"font-family\":\"MJXZERO, MJXTEX-FR\"},\".TEX-FRB\":{\"font-family\":\"MJXZERO, MJXTEX-FRB\"},\".TEX-SS\":{\"font-family\":\"MJXZERO, MJXTEX-SS\"},\".TEX-SSB\":{\"font-family\":\"MJXZERO, MJXTEX-SSB\"},\".TEX-SSI\":{\"font-family\":\"MJXZERO, MJXTEX-SSI\"},\".TEX-SC\":{\"font-family\":\"MJXZERO, MJXTEX-SC\"},\".TEX-T\":{\"font-family\":\"MJXZERO, MJXTEX-T\"},\".TEX-V\":{\"font-family\":\"MJXZERO, MJXTEX-V\"},\".TEX-VB\":{\"font-family\":\"MJXZERO, MJXTEX-VB\"},\"mjx-stretchy-v mjx-c, mjx-stretchy-h mjx-c\":{\"font-family\":\"MJXZERO, MJXTEX-S1, MJXTEX-S4, MJXTEX, MJXTEX-A ! important\"}}),f.defaultFonts=s(s({},r.CHTMLFontData.defaultFonts),{\"@font-face /* 1 */\":{\"font-family\":\"MJXTEX\",src:'url(\"%%URL%%/MathJax_Main-Regular.woff\") format(\"woff\")'},\"@font-face /* 2 */\":{\"font-family\":\"MJXTEX-B\",src:'url(\"%%URL%%/MathJax_Main-Bold.woff\") format(\"woff\")'},\"@font-face /* 3 */\":{\"font-family\":\"MJXTEX-I\",src:'url(\"%%URL%%/MathJax_Math-Italic.woff\") format(\"woff\")'},\"@font-face /* 4 */\":{\"font-family\":\"MJXTEX-MI\",src:'url(\"%%URL%%/MathJax_Main-Italic.woff\") format(\"woff\")'},\"@font-face /* 5 */\":{\"font-family\":\"MJXTEX-BI\",src:'url(\"%%URL%%/MathJax_Math-BoldItalic.woff\") format(\"woff\")'},\"@font-face /* 6 */\":{\"font-family\":\"MJXTEX-S1\",src:'url(\"%%URL%%/MathJax_Size1-Regular.woff\") format(\"woff\")'},\"@font-face /* 7 */\":{\"font-family\":\"MJXTEX-S2\",src:'url(\"%%URL%%/MathJax_Size2-Regular.woff\") format(\"woff\")'},\"@font-face /* 8 */\":{\"font-family\":\"MJXTEX-S3\",src:'url(\"%%URL%%/MathJax_Size3-Regular.woff\") format(\"woff\")'},\"@font-face /* 9 */\":{\"font-family\":\"MJXTEX-S4\",src:'url(\"%%URL%%/MathJax_Size4-Regular.woff\") format(\"woff\")'},\"@font-face /* 10 */\":{\"font-family\":\"MJXTEX-A\",src:'url(\"%%URL%%/MathJax_AMS-Regular.woff\") format(\"woff\")'},\"@font-face /* 11 */\":{\"font-family\":\"MJXTEX-C\",src:'url(\"%%URL%%/MathJax_Calligraphic-Regular.woff\") format(\"woff\")'},\"@font-face /* 12 */\":{\"font-family\":\"MJXTEX-CB\",src:'url(\"%%URL%%/MathJax_Calligraphic-Bold.woff\") format(\"woff\")'},\"@font-face /* 13 */\":{\"font-family\":\"MJXTEX-FR\",src:'url(\"%%URL%%/MathJax_Fraktur-Regular.woff\") format(\"woff\")'},\"@font-face /* 14 */\":{\"font-family\":\"MJXTEX-FRB\",src:'url(\"%%URL%%/MathJax_Fraktur-Bold.woff\") format(\"woff\")'},\"@font-face /* 15 */\":{\"font-family\":\"MJXTEX-SS\",src:'url(\"%%URL%%/MathJax_SansSerif-Regular.woff\") format(\"woff\")'},\"@font-face /* 16 */\":{\"font-family\":\"MJXTEX-SSB\",src:'url(\"%%URL%%/MathJax_SansSerif-Bold.woff\") format(\"woff\")'},\"@font-face /* 17 */\":{\"font-family\":\"MJXTEX-SSI\",src:'url(\"%%URL%%/MathJax_SansSerif-Italic.woff\") format(\"woff\")'},\"@font-face /* 18 */\":{\"font-family\":\"MJXTEX-SC\",src:'url(\"%%URL%%/MathJax_Script-Regular.woff\") format(\"woff\")'},\"@font-face /* 19 */\":{\"font-family\":\"MJXTEX-T\",src:'url(\"%%URL%%/MathJax_Typewriter-Regular.woff\") format(\"woff\")'},\"@font-face /* 20 */\":{\"font-family\":\"MJXTEX-V\",src:'url(\"%%URL%%/MathJax_Vector-Regular.woff\") format(\"woff\")'},\"@font-face /* 21 */\":{\"font-family\":\"MJXTEX-VB\",src:'url(\"%%URL%%/MathJax_Vector-Bold.woff\") format(\"woff\")'}}),f}((0,o.CommonTeXFontMixin)(r.CHTMLFontData));f.TeXFont=O},7841:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.boldItalic=void 0;var t=i(73),e=i(3869);f.boldItalic=(0,t.AddCSS)(e.boldItalic,{305:{f:\"B\"},567:{f:\"B\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"},10744:{c:\"/\"}})},5031:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.bold=void 0;var t=i(73),e=i(7557);f.bold=(0,t.AddCSS)(e.bold,{183:{c:\"\\\\22C5\"},305:{f:\"\"},567:{f:\"\"},697:{c:\"\\\\2032\"},8194:{c:\"\"},8195:{c:\"\"},8196:{c:\"\"},8197:{c:\"\"},8198:{c:\"\"},8201:{c:\"\"},8202:{c:\"\"},8213:{c:\"\\\\2014\"},8214:{c:\"\\\\2225\"},8215:{c:\"_\"},8226:{c:\"\\\\2219\"},8243:{c:\"\\\\2032\\\\2032\"},8244:{c:\"\\\\2032\\\\2032\\\\2032\"},8254:{c:\"\\\\2C9\"},8260:{c:\"/\"},8279:{c:\"\\\\2032\\\\2032\\\\2032\\\\2032\"},8407:{c:\"\\\\2192\",f:\"VB\"},8602:{c:\"\\\\2190\\\\338\"},8603:{c:\"\\\\2192\\\\338\"},8622:{c:\"\\\\2194\\\\338\"},8653:{c:\"\\\\21D0\\\\338\"},8654:{c:\"\\\\21D4\\\\338\"},8655:{c:\"\\\\21D2\\\\338\"},8708:{c:\"\\\\2203\\\\338\"},8710:{c:\"\\\\394\"},8716:{c:\"\\\\220B\\\\338\"},8740:{c:\"\\\\2223\\\\338\"},8742:{c:\"\\\\2225\\\\338\"},8769:{c:\"\\\\223C\\\\338\"},8772:{c:\"\\\\2243\\\\338\"},8775:{c:\"\\\\2245\\\\338\"},8777:{c:\"\\\\2248\\\\338\"},8802:{c:\"\\\\2261\\\\338\"},8813:{c:\"\\\\224D\\\\338\"},8814:{c:\"<\\\\338\"},8815:{c:\">\\\\338\"},8816:{c:\"\\\\2264\\\\338\"},8817:{c:\"\\\\2265\\\\338\"},8832:{c:\"\\\\227A\\\\338\"},8833:{c:\"\\\\227B\\\\338\"},8836:{c:\"\\\\2282\\\\338\"},8837:{c:\"\\\\2283\\\\338\"},8840:{c:\"\\\\2286\\\\338\"},8841:{c:\"\\\\2287\\\\338\"},8876:{c:\"\\\\22A2\\\\338\"},8877:{c:\"\\\\22A8\\\\338\"},8930:{c:\"\\\\2291\\\\338\"},8931:{c:\"\\\\2292\\\\338\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},9653:{c:\"\\\\25B3\"},9663:{c:\"\\\\25BD\"},10072:{c:\"\\\\2223\"},10744:{c:\"/\",f:\"BI\"},10799:{c:\"\\\\D7\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"}})},6051:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.doubleStruck=void 0;var t=i(5674);Object.defineProperty(f,\"doubleStruck\",{enumerable:!0,get:function(){return t.doubleStruck}})},9236:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.frakturBold=void 0;var t=i(73),e=i(7002);f.frakturBold=(0,t.AddCSS)(e.frakturBold,{8260:{c:\"/\"}})},1937:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.fraktur=void 0;var t=i(73),e=i(9349);f.fraktur=(0,t.AddCSS)(e.fraktur,{8260:{c:\"/\"}})},4244:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.italic=void 0;var t=i(73),e=i(9741);f.italic=(0,t.AddCSS)(e.italic,{47:{f:\"I\"},989:{c:\"\\\\E008\",f:\"A\"},8213:{c:\"\\\\2014\"},8215:{c:\"_\"},8260:{c:\"/\",f:\"I\"},8710:{c:\"\\\\394\",f:\"I\"},10744:{c:\"/\",f:\"I\"}})},482:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.largeop=void 0;var t=i(73),e=i(2827);f.largeop=(0,t.AddCSS)(e.largeop,{8214:{f:\"S1\"},8260:{c:\"/\"},8593:{f:\"S1\"},8595:{f:\"S1\"},8657:{f:\"S1\"},8659:{f:\"S1\"},8739:{f:\"S1\"},8741:{f:\"S1\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},9168:{f:\"S1\"},10072:{c:\"\\\\2223\",f:\"S1\"},10764:{c:\"\\\\222C\\\\222C\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"}})},196:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.monospace=void 0;var t=i(73),e=i(2970);f.monospace=(0,t.AddCSS)(e.monospace,{697:{c:\"\\\\2032\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},932:{c:\"T\"},935:{c:\"X\"},8215:{c:\"_\"},8243:{c:\"\\\\2032\\\\2032\"},8244:{c:\"\\\\2032\\\\2032\\\\2032\"},8260:{c:\"/\"},8279:{c:\"\\\\2032\\\\2032\\\\2032\\\\2032\"},8710:{c:\"\\\\394\"}})},527:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.normal=void 0;var t=i(73),e=i(1668);f.normal=(0,t.AddCSS)(e.normal,{163:{f:\"MI\"},165:{f:\"A\"},174:{f:\"A\"},183:{c:\"\\\\22C5\"},240:{f:\"A\"},697:{c:\"\\\\2032\"},913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},932:{c:\"T\"},935:{c:\"X\"},8192:{c:\"\"},8193:{c:\"\"},8194:{c:\"\"},8195:{c:\"\"},8196:{c:\"\"},8197:{c:\"\"},8198:{c:\"\"},8201:{c:\"\"},8202:{c:\"\"},8203:{c:\"\"},8204:{c:\"\"},8213:{c:\"\\\\2014\"},8214:{c:\"\\\\2225\"},8215:{c:\"_\"},8226:{c:\"\\\\2219\"},8243:{c:\"\\\\2032\\\\2032\"},8244:{c:\"\\\\2032\\\\2032\\\\2032\"},8245:{f:\"A\"},8246:{c:\"\\\\2035\\\\2035\",f:\"A\"},8247:{c:\"\\\\2035\\\\2035\\\\2035\",f:\"A\"},8254:{c:\"\\\\2C9\"},8260:{c:\"/\"},8279:{c:\"\\\\2032\\\\2032\\\\2032\\\\2032\"},8288:{c:\"\"},8289:{c:\"\"},8290:{c:\"\"},8291:{c:\"\"},8292:{c:\"\"},8407:{c:\"\\\\2192\",f:\"V\"},8450:{c:\"C\",f:\"A\"},8459:{c:\"H\",f:\"SC\"},8460:{c:\"H\",f:\"FR\"},8461:{c:\"H\",f:\"A\"},8462:{c:\"h\",f:\"I\"},8463:{f:\"A\"},8464:{c:\"I\",f:\"SC\"},8465:{c:\"I\",f:\"FR\"},8466:{c:\"L\",f:\"SC\"},8469:{c:\"N\",f:\"A\"},8473:{c:\"P\",f:\"A\"},8474:{c:\"Q\",f:\"A\"},8475:{c:\"R\",f:\"SC\"},8476:{c:\"R\",f:\"FR\"},8477:{c:\"R\",f:\"A\"},8484:{c:\"Z\",f:\"A\"},8486:{c:\"\\\\3A9\"},8487:{f:\"A\"},8488:{c:\"Z\",f:\"FR\"},8492:{c:\"B\",f:\"SC\"},8493:{c:\"C\",f:\"FR\"},8496:{c:\"E\",f:\"SC\"},8497:{c:\"F\",f:\"SC\"},8498:{f:\"A\"},8499:{c:\"M\",f:\"SC\"},8502:{f:\"A\"},8503:{f:\"A\"},8504:{f:\"A\"},8513:{f:\"A\"},8602:{f:\"A\"},8603:{f:\"A\"},8606:{f:\"A\"},8608:{f:\"A\"},8610:{f:\"A\"},8611:{f:\"A\"},8619:{f:\"A\"},8620:{f:\"A\"},8621:{f:\"A\"},8622:{f:\"A\"},8624:{f:\"A\"},8625:{f:\"A\"},8630:{f:\"A\"},8631:{f:\"A\"},8634:{f:\"A\"},8635:{f:\"A\"},8638:{f:\"A\"},8639:{f:\"A\"},8642:{f:\"A\"},8643:{f:\"A\"},8644:{f:\"A\"},8646:{f:\"A\"},8647:{f:\"A\"},8648:{f:\"A\"},8649:{f:\"A\"},8650:{f:\"A\"},8651:{f:\"A\"},8653:{f:\"A\"},8654:{f:\"A\"},8655:{f:\"A\"},8666:{f:\"A\"},8667:{f:\"A\"},8669:{f:\"A\"},8672:{f:\"A\"},8674:{f:\"A\"},8705:{f:\"A\"},8708:{c:\"\\\\2203\\\\338\"},8710:{c:\"\\\\394\"},8716:{c:\"\\\\220B\\\\338\"},8717:{f:\"A\"},8719:{f:\"S1\"},8720:{f:\"S1\"},8721:{f:\"S1\"},8724:{f:\"A\"},8737:{f:\"A\"},8738:{f:\"A\"},8740:{f:\"A\"},8742:{f:\"A\"},8748:{f:\"S1\"},8749:{f:\"S1\"},8750:{f:\"S1\"},8756:{f:\"A\"},8757:{f:\"A\"},8765:{f:\"A\"},8769:{f:\"A\"},8770:{f:\"A\"},8772:{c:\"\\\\2243\\\\338\"},8775:{c:\"\\\\2246\",f:\"A\"},8777:{c:\"\\\\2248\\\\338\"},8778:{f:\"A\"},8782:{f:\"A\"},8783:{f:\"A\"},8785:{f:\"A\"},8786:{f:\"A\"},8787:{f:\"A\"},8790:{f:\"A\"},8791:{f:\"A\"},8796:{f:\"A\"},8802:{c:\"\\\\2261\\\\338\"},8806:{f:\"A\"},8807:{f:\"A\"},8808:{f:\"A\"},8809:{f:\"A\"},8812:{f:\"A\"},8813:{c:\"\\\\224D\\\\338\"},8814:{f:\"A\"},8815:{f:\"A\"},8816:{f:\"A\"},8817:{f:\"A\"},8818:{f:\"A\"},8819:{f:\"A\"},8820:{c:\"\\\\2272\\\\338\"},8821:{c:\"\\\\2273\\\\338\"},8822:{f:\"A\"},8823:{f:\"A\"},8824:{c:\"\\\\2276\\\\338\"},8825:{c:\"\\\\2277\\\\338\"},8828:{f:\"A\"},8829:{f:\"A\"},8830:{f:\"A\"},8831:{f:\"A\"},8832:{f:\"A\"},8833:{f:\"A\"},8836:{c:\"\\\\2282\\\\338\"},8837:{c:\"\\\\2283\\\\338\"},8840:{f:\"A\"},8841:{f:\"A\"},8842:{f:\"A\"},8843:{f:\"A\"},8847:{f:\"A\"},8848:{f:\"A\"},8858:{f:\"A\"},8859:{f:\"A\"},8861:{f:\"A\"},8862:{f:\"A\"},8863:{f:\"A\"},8864:{f:\"A\"},8865:{f:\"A\"},8873:{f:\"A\"},8874:{f:\"A\"},8876:{f:\"A\"},8877:{f:\"A\"},8878:{f:\"A\"},8879:{f:\"A\"},8882:{f:\"A\"},8883:{f:\"A\"},8884:{f:\"A\"},8885:{f:\"A\"},8888:{f:\"A\"},8890:{f:\"A\"},8891:{f:\"A\"},8892:{f:\"A\"},8896:{f:\"S1\"},8897:{f:\"S1\"},8898:{f:\"S1\"},8899:{f:\"S1\"},8903:{f:\"A\"},8905:{f:\"A\"},8906:{f:\"A\"},8907:{f:\"A\"},8908:{f:\"A\"},8909:{f:\"A\"},8910:{f:\"A\"},8911:{f:\"A\"},8912:{f:\"A\"},8913:{f:\"A\"},8914:{f:\"A\"},8915:{f:\"A\"},8916:{f:\"A\"},8918:{f:\"A\"},8919:{f:\"A\"},8920:{f:\"A\"},8921:{f:\"A\"},8922:{f:\"A\"},8923:{f:\"A\"},8926:{f:\"A\"},8927:{f:\"A\"},8928:{f:\"A\"},8929:{f:\"A\"},8930:{c:\"\\\\2291\\\\338\"},8931:{c:\"\\\\2292\\\\338\"},8934:{f:\"A\"},8935:{f:\"A\"},8936:{f:\"A\"},8937:{f:\"A\"},8938:{f:\"A\"},8939:{f:\"A\"},8940:{f:\"A\"},8941:{f:\"A\"},8965:{c:\"\\\\22BC\",f:\"A\"},8966:{c:\"\\\\2A5E\",f:\"A\"},8988:{c:\"\\\\250C\",f:\"A\"},8989:{c:\"\\\\2510\",f:\"A\"},8990:{c:\"\\\\2514\",f:\"A\"},8991:{c:\"\\\\2518\",f:\"A\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},9168:{f:\"S1\"},9416:{f:\"A\"},9484:{f:\"A\"},9488:{f:\"A\"},9492:{f:\"A\"},9496:{f:\"A\"},9585:{f:\"A\"},9586:{f:\"A\"},9632:{f:\"A\"},9633:{f:\"A\"},9642:{c:\"\\\\25A0\",f:\"A\"},9650:{f:\"A\"},9652:{c:\"\\\\25B2\",f:\"A\"},9653:{c:\"\\\\25B3\"},9654:{f:\"A\"},9656:{c:\"\\\\25B6\",f:\"A\"},9660:{f:\"A\"},9662:{c:\"\\\\25BC\",f:\"A\"},9663:{c:\"\\\\25BD\"},9664:{f:\"A\"},9666:{c:\"\\\\25C0\",f:\"A\"},9674:{f:\"A\"},9723:{c:\"\\\\25A1\",f:\"A\"},9724:{c:\"\\\\25A0\",f:\"A\"},9733:{f:\"A\"},10003:{f:\"A\"},10016:{f:\"A\"},10072:{c:\"\\\\2223\"},10731:{f:\"A\"},10744:{c:\"/\",f:\"I\"},10752:{f:\"S1\"},10753:{f:\"S1\"},10754:{f:\"S1\"},10756:{f:\"S1\"},10758:{f:\"S1\"},10764:{c:\"\\\\222C\\\\222C\",f:\"S1\"},10799:{c:\"\\\\D7\"},10846:{f:\"A\"},10877:{f:\"A\"},10878:{f:\"A\"},10885:{f:\"A\"},10886:{f:\"A\"},10887:{f:\"A\"},10888:{f:\"A\"},10889:{f:\"A\"},10890:{f:\"A\"},10891:{f:\"A\"},10892:{f:\"A\"},10901:{f:\"A\"},10902:{f:\"A\"},10933:{f:\"A\"},10934:{f:\"A\"},10935:{f:\"A\"},10936:{f:\"A\"},10937:{f:\"A\"},10938:{f:\"A\"},10949:{f:\"A\"},10950:{f:\"A\"},10955:{f:\"A\"},10956:{f:\"A\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"},57350:{f:\"A\"},57351:{f:\"A\"},57352:{f:\"A\"},57353:{f:\"A\"},57356:{f:\"A\"},57357:{f:\"A\"},57358:{f:\"A\"},57359:{f:\"A\"},57360:{f:\"A\"},57361:{f:\"A\"},57366:{f:\"A\"},57367:{f:\"A\"},57368:{f:\"A\"},57369:{f:\"A\"},57370:{f:\"A\"},57371:{f:\"A\"},119808:{c:\"A\",f:\"B\"},119809:{c:\"B\",f:\"B\"},119810:{c:\"C\",f:\"B\"},119811:{c:\"D\",f:\"B\"},119812:{c:\"E\",f:\"B\"},119813:{c:\"F\",f:\"B\"},119814:{c:\"G\",f:\"B\"},119815:{c:\"H\",f:\"B\"},119816:{c:\"I\",f:\"B\"},119817:{c:\"J\",f:\"B\"},119818:{c:\"K\",f:\"B\"},119819:{c:\"L\",f:\"B\"},119820:{c:\"M\",f:\"B\"},119821:{c:\"N\",f:\"B\"},119822:{c:\"O\",f:\"B\"},119823:{c:\"P\",f:\"B\"},119824:{c:\"Q\",f:\"B\"},119825:{c:\"R\",f:\"B\"},119826:{c:\"S\",f:\"B\"},119827:{c:\"T\",f:\"B\"},119828:{c:\"U\",f:\"B\"},119829:{c:\"V\",f:\"B\"},119830:{c:\"W\",f:\"B\"},119831:{c:\"X\",f:\"B\"},119832:{c:\"Y\",f:\"B\"},119833:{c:\"Z\",f:\"B\"},119834:{c:\"a\",f:\"B\"},119835:{c:\"b\",f:\"B\"},119836:{c:\"c\",f:\"B\"},119837:{c:\"d\",f:\"B\"},119838:{c:\"e\",f:\"B\"},119839:{c:\"f\",f:\"B\"},119840:{c:\"g\",f:\"B\"},119841:{c:\"h\",f:\"B\"},119842:{c:\"i\",f:\"B\"},119843:{c:\"j\",f:\"B\"},119844:{c:\"k\",f:\"B\"},119845:{c:\"l\",f:\"B\"},119846:{c:\"m\",f:\"B\"},119847:{c:\"n\",f:\"B\"},119848:{c:\"o\",f:\"B\"},119849:{c:\"p\",f:\"B\"},119850:{c:\"q\",f:\"B\"},119851:{c:\"r\",f:\"B\"},119852:{c:\"s\",f:\"B\"},119853:{c:\"t\",f:\"B\"},119854:{c:\"u\",f:\"B\"},119855:{c:\"v\",f:\"B\"},119856:{c:\"w\",f:\"B\"},119857:{c:\"x\",f:\"B\"},119858:{c:\"y\",f:\"B\"},119859:{c:\"z\",f:\"B\"},119860:{c:\"A\",f:\"I\"},119861:{c:\"B\",f:\"I\"},119862:{c:\"C\",f:\"I\"},119863:{c:\"D\",f:\"I\"},119864:{c:\"E\",f:\"I\"},119865:{c:\"F\",f:\"I\"},119866:{c:\"G\",f:\"I\"},119867:{c:\"H\",f:\"I\"},119868:{c:\"I\",f:\"I\"},119869:{c:\"J\",f:\"I\"},119870:{c:\"K\",f:\"I\"},119871:{c:\"L\",f:\"I\"},119872:{c:\"M\",f:\"I\"},119873:{c:\"N\",f:\"I\"},119874:{c:\"O\",f:\"I\"},119875:{c:\"P\",f:\"I\"},119876:{c:\"Q\",f:\"I\"},119877:{c:\"R\",f:\"I\"},119878:{c:\"S\",f:\"I\"},119879:{c:\"T\",f:\"I\"},119880:{c:\"U\",f:\"I\"},119881:{c:\"V\",f:\"I\"},119882:{c:\"W\",f:\"I\"},119883:{c:\"X\",f:\"I\"},119884:{c:\"Y\",f:\"I\"},119885:{c:\"Z\",f:\"I\"},119886:{c:\"a\",f:\"I\"},119887:{c:\"b\",f:\"I\"},119888:{c:\"c\",f:\"I\"},119889:{c:\"d\",f:\"I\"},119890:{c:\"e\",f:\"I\"},119891:{c:\"f\",f:\"I\"},119892:{c:\"g\",f:\"I\"},119894:{c:\"i\",f:\"I\"},119895:{c:\"j\",f:\"I\"},119896:{c:\"k\",f:\"I\"},119897:{c:\"l\",f:\"I\"},119898:{c:\"m\",f:\"I\"},119899:{c:\"n\",f:\"I\"},119900:{c:\"o\",f:\"I\"},119901:{c:\"p\",f:\"I\"},119902:{c:\"q\",f:\"I\"},119903:{c:\"r\",f:\"I\"},119904:{c:\"s\",f:\"I\"},119905:{c:\"t\",f:\"I\"},119906:{c:\"u\",f:\"I\"},119907:{c:\"v\",f:\"I\"},119908:{c:\"w\",f:\"I\"},119909:{c:\"x\",f:\"I\"},119910:{c:\"y\",f:\"I\"},119911:{c:\"z\",f:\"I\"},119912:{c:\"A\",f:\"BI\"},119913:{c:\"B\",f:\"BI\"},119914:{c:\"C\",f:\"BI\"},119915:{c:\"D\",f:\"BI\"},119916:{c:\"E\",f:\"BI\"},119917:{c:\"F\",f:\"BI\"},119918:{c:\"G\",f:\"BI\"},119919:{c:\"H\",f:\"BI\"},119920:{c:\"I\",f:\"BI\"},119921:{c:\"J\",f:\"BI\"},119922:{c:\"K\",f:\"BI\"},119923:{c:\"L\",f:\"BI\"},119924:{c:\"M\",f:\"BI\"},119925:{c:\"N\",f:\"BI\"},119926:{c:\"O\",f:\"BI\"},119927:{c:\"P\",f:\"BI\"},119928:{c:\"Q\",f:\"BI\"},119929:{c:\"R\",f:\"BI\"},119930:{c:\"S\",f:\"BI\"},119931:{c:\"T\",f:\"BI\"},119932:{c:\"U\",f:\"BI\"},119933:{c:\"V\",f:\"BI\"},119934:{c:\"W\",f:\"BI\"},119935:{c:\"X\",f:\"BI\"},119936:{c:\"Y\",f:\"BI\"},119937:{c:\"Z\",f:\"BI\"},119938:{c:\"a\",f:\"BI\"},119939:{c:\"b\",f:\"BI\"},119940:{c:\"c\",f:\"BI\"},119941:{c:\"d\",f:\"BI\"},119942:{c:\"e\",f:\"BI\"},119943:{c:\"f\",f:\"BI\"},119944:{c:\"g\",f:\"BI\"},119945:{c:\"h\",f:\"BI\"},119946:{c:\"i\",f:\"BI\"},119947:{c:\"j\",f:\"BI\"},119948:{c:\"k\",f:\"BI\"},119949:{c:\"l\",f:\"BI\"},119950:{c:\"m\",f:\"BI\"},119951:{c:\"n\",f:\"BI\"},119952:{c:\"o\",f:\"BI\"},119953:{c:\"p\",f:\"BI\"},119954:{c:\"q\",f:\"BI\"},119955:{c:\"r\",f:\"BI\"},119956:{c:\"s\",f:\"BI\"},119957:{c:\"t\",f:\"BI\"},119958:{c:\"u\",f:\"BI\"},119959:{c:\"v\",f:\"BI\"},119960:{c:\"w\",f:\"BI\"},119961:{c:\"x\",f:\"BI\"},119962:{c:\"y\",f:\"BI\"},119963:{c:\"z\",f:\"BI\"},119964:{c:\"A\",f:\"SC\"},119966:{c:\"C\",f:\"SC\"},119967:{c:\"D\",f:\"SC\"},119970:{c:\"G\",f:\"SC\"},119973:{c:\"J\",f:\"SC\"},119974:{c:\"K\",f:\"SC\"},119977:{c:\"N\",f:\"SC\"},119978:{c:\"O\",f:\"SC\"},119979:{c:\"P\",f:\"SC\"},119980:{c:\"Q\",f:\"SC\"},119982:{c:\"S\",f:\"SC\"},119983:{c:\"T\",f:\"SC\"},119984:{c:\"U\",f:\"SC\"},119985:{c:\"V\",f:\"SC\"},119986:{c:\"W\",f:\"SC\"},119987:{c:\"X\",f:\"SC\"},119988:{c:\"Y\",f:\"SC\"},119989:{c:\"Z\",f:\"SC\"},120068:{c:\"A\",f:\"FR\"},120069:{c:\"B\",f:\"FR\"},120071:{c:\"D\",f:\"FR\"},120072:{c:\"E\",f:\"FR\"},120073:{c:\"F\",f:\"FR\"},120074:{c:\"G\",f:\"FR\"},120077:{c:\"J\",f:\"FR\"},120078:{c:\"K\",f:\"FR\"},120079:{c:\"L\",f:\"FR\"},120080:{c:\"M\",f:\"FR\"},120081:{c:\"N\",f:\"FR\"},120082:{c:\"O\",f:\"FR\"},120083:{c:\"P\",f:\"FR\"},120084:{c:\"Q\",f:\"FR\"},120086:{c:\"S\",f:\"FR\"},120087:{c:\"T\",f:\"FR\"},120088:{c:\"U\",f:\"FR\"},120089:{c:\"V\",f:\"FR\"},120090:{c:\"W\",f:\"FR\"},120091:{c:\"X\",f:\"FR\"},120092:{c:\"Y\",f:\"FR\"},120094:{c:\"a\",f:\"FR\"},120095:{c:\"b\",f:\"FR\"},120096:{c:\"c\",f:\"FR\"},120097:{c:\"d\",f:\"FR\"},120098:{c:\"e\",f:\"FR\"},120099:{c:\"f\",f:\"FR\"},120100:{c:\"g\",f:\"FR\"},120101:{c:\"h\",f:\"FR\"},120102:{c:\"i\",f:\"FR\"},120103:{c:\"j\",f:\"FR\"},120104:{c:\"k\",f:\"FR\"},120105:{c:\"l\",f:\"FR\"},120106:{c:\"m\",f:\"FR\"},120107:{c:\"n\",f:\"FR\"},120108:{c:\"o\",f:\"FR\"},120109:{c:\"p\",f:\"FR\"},120110:{c:\"q\",f:\"FR\"},120111:{c:\"r\",f:\"FR\"},120112:{c:\"s\",f:\"FR\"},120113:{c:\"t\",f:\"FR\"},120114:{c:\"u\",f:\"FR\"},120115:{c:\"v\",f:\"FR\"},120116:{c:\"w\",f:\"FR\"},120117:{c:\"x\",f:\"FR\"},120118:{c:\"y\",f:\"FR\"},120119:{c:\"z\",f:\"FR\"},120120:{c:\"A\",f:\"A\"},120121:{c:\"B\",f:\"A\"},120123:{c:\"D\",f:\"A\"},120124:{c:\"E\",f:\"A\"},120125:{c:\"F\",f:\"A\"},120126:{c:\"G\",f:\"A\"},120128:{c:\"I\",f:\"A\"},120129:{c:\"J\",f:\"A\"},120130:{c:\"K\",f:\"A\"},120131:{c:\"L\",f:\"A\"},120132:{c:\"M\",f:\"A\"},120134:{c:\"O\",f:\"A\"},120138:{c:\"S\",f:\"A\"},120139:{c:\"T\",f:\"A\"},120140:{c:\"U\",f:\"A\"},120141:{c:\"V\",f:\"A\"},120142:{c:\"W\",f:\"A\"},120143:{c:\"X\",f:\"A\"},120144:{c:\"Y\",f:\"A\"},120172:{c:\"A\",f:\"FRB\"},120173:{c:\"B\",f:\"FRB\"},120174:{c:\"C\",f:\"FRB\"},120175:{c:\"D\",f:\"FRB\"},120176:{c:\"E\",f:\"FRB\"},120177:{c:\"F\",f:\"FRB\"},120178:{c:\"G\",f:\"FRB\"},120179:{c:\"H\",f:\"FRB\"},120180:{c:\"I\",f:\"FRB\"},120181:{c:\"J\",f:\"FRB\"},120182:{c:\"K\",f:\"FRB\"},120183:{c:\"L\",f:\"FRB\"},120184:{c:\"M\",f:\"FRB\"},120185:{c:\"N\",f:\"FRB\"},120186:{c:\"O\",f:\"FRB\"},120187:{c:\"P\",f:\"FRB\"},120188:{c:\"Q\",f:\"FRB\"},120189:{c:\"R\",f:\"FRB\"},120190:{c:\"S\",f:\"FRB\"},120191:{c:\"T\",f:\"FRB\"},120192:{c:\"U\",f:\"FRB\"},120193:{c:\"V\",f:\"FRB\"},120194:{c:\"W\",f:\"FRB\"},120195:{c:\"X\",f:\"FRB\"},120196:{c:\"Y\",f:\"FRB\"},120197:{c:\"Z\",f:\"FRB\"},120198:{c:\"a\",f:\"FRB\"},120199:{c:\"b\",f:\"FRB\"},120200:{c:\"c\",f:\"FRB\"},120201:{c:\"d\",f:\"FRB\"},120202:{c:\"e\",f:\"FRB\"},120203:{c:\"f\",f:\"FRB\"},120204:{c:\"g\",f:\"FRB\"},120205:{c:\"h\",f:\"FRB\"},120206:{c:\"i\",f:\"FRB\"},120207:{c:\"j\",f:\"FRB\"},120208:{c:\"k\",f:\"FRB\"},120209:{c:\"l\",f:\"FRB\"},120210:{c:\"m\",f:\"FRB\"},120211:{c:\"n\",f:\"FRB\"},120212:{c:\"o\",f:\"FRB\"},120213:{c:\"p\",f:\"FRB\"},120214:{c:\"q\",f:\"FRB\"},120215:{c:\"r\",f:\"FRB\"},120216:{c:\"s\",f:\"FRB\"},120217:{c:\"t\",f:\"FRB\"},120218:{c:\"u\",f:\"FRB\"},120219:{c:\"v\",f:\"FRB\"},120220:{c:\"w\",f:\"FRB\"},120221:{c:\"x\",f:\"FRB\"},120222:{c:\"y\",f:\"FRB\"},120223:{c:\"z\",f:\"FRB\"},120224:{c:\"A\",f:\"SS\"},120225:{c:\"B\",f:\"SS\"},120226:{c:\"C\",f:\"SS\"},120227:{c:\"D\",f:\"SS\"},120228:{c:\"E\",f:\"SS\"},120229:{c:\"F\",f:\"SS\"},120230:{c:\"G\",f:\"SS\"},120231:{c:\"H\",f:\"SS\"},120232:{c:\"I\",f:\"SS\"},120233:{c:\"J\",f:\"SS\"},120234:{c:\"K\",f:\"SS\"},120235:{c:\"L\",f:\"SS\"},120236:{c:\"M\",f:\"SS\"},120237:{c:\"N\",f:\"SS\"},120238:{c:\"O\",f:\"SS\"},120239:{c:\"P\",f:\"SS\"},120240:{c:\"Q\",f:\"SS\"},120241:{c:\"R\",f:\"SS\"},120242:{c:\"S\",f:\"SS\"},120243:{c:\"T\",f:\"SS\"},120244:{c:\"U\",f:\"SS\"},120245:{c:\"V\",f:\"SS\"},120246:{c:\"W\",f:\"SS\"},120247:{c:\"X\",f:\"SS\"},120248:{c:\"Y\",f:\"SS\"},120249:{c:\"Z\",f:\"SS\"},120250:{c:\"a\",f:\"SS\"},120251:{c:\"b\",f:\"SS\"},120252:{c:\"c\",f:\"SS\"},120253:{c:\"d\",f:\"SS\"},120254:{c:\"e\",f:\"SS\"},120255:{c:\"f\",f:\"SS\"},120256:{c:\"g\",f:\"SS\"},120257:{c:\"h\",f:\"SS\"},120258:{c:\"i\",f:\"SS\"},120259:{c:\"j\",f:\"SS\"},120260:{c:\"k\",f:\"SS\"},120261:{c:\"l\",f:\"SS\"},120262:{c:\"m\",f:\"SS\"},120263:{c:\"n\",f:\"SS\"},120264:{c:\"o\",f:\"SS\"},120265:{c:\"p\",f:\"SS\"},120266:{c:\"q\",f:\"SS\"},120267:{c:\"r\",f:\"SS\"},120268:{c:\"s\",f:\"SS\"},120269:{c:\"t\",f:\"SS\"},120270:{c:\"u\",f:\"SS\"},120271:{c:\"v\",f:\"SS\"},120272:{c:\"w\",f:\"SS\"},120273:{c:\"x\",f:\"SS\"},120274:{c:\"y\",f:\"SS\"},120275:{c:\"z\",f:\"SS\"},120276:{c:\"A\",f:\"SSB\"},120277:{c:\"B\",f:\"SSB\"},120278:{c:\"C\",f:\"SSB\"},120279:{c:\"D\",f:\"SSB\"},120280:{c:\"E\",f:\"SSB\"},120281:{c:\"F\",f:\"SSB\"},120282:{c:\"G\",f:\"SSB\"},120283:{c:\"H\",f:\"SSB\"},120284:{c:\"I\",f:\"SSB\"},120285:{c:\"J\",f:\"SSB\"},120286:{c:\"K\",f:\"SSB\"},120287:{c:\"L\",f:\"SSB\"},120288:{c:\"M\",f:\"SSB\"},120289:{c:\"N\",f:\"SSB\"},120290:{c:\"O\",f:\"SSB\"},120291:{c:\"P\",f:\"SSB\"},120292:{c:\"Q\",f:\"SSB\"},120293:{c:\"R\",f:\"SSB\"},120294:{c:\"S\",f:\"SSB\"},120295:{c:\"T\",f:\"SSB\"},120296:{c:\"U\",f:\"SSB\"},120297:{c:\"V\",f:\"SSB\"},120298:{c:\"W\",f:\"SSB\"},120299:{c:\"X\",f:\"SSB\"},120300:{c:\"Y\",f:\"SSB\"},120301:{c:\"Z\",f:\"SSB\"},120302:{c:\"a\",f:\"SSB\"},120303:{c:\"b\",f:\"SSB\"},120304:{c:\"c\",f:\"SSB\"},120305:{c:\"d\",f:\"SSB\"},120306:{c:\"e\",f:\"SSB\"},120307:{c:\"f\",f:\"SSB\"},120308:{c:\"g\",f:\"SSB\"},120309:{c:\"h\",f:\"SSB\"},120310:{c:\"i\",f:\"SSB\"},120311:{c:\"j\",f:\"SSB\"},120312:{c:\"k\",f:\"SSB\"},120313:{c:\"l\",f:\"SSB\"},120314:{c:\"m\",f:\"SSB\"},120315:{c:\"n\",f:\"SSB\"},120316:{c:\"o\",f:\"SSB\"},120317:{c:\"p\",f:\"SSB\"},120318:{c:\"q\",f:\"SSB\"},120319:{c:\"r\",f:\"SSB\"},120320:{c:\"s\",f:\"SSB\"},120321:{c:\"t\",f:\"SSB\"},120322:{c:\"u\",f:\"SSB\"},120323:{c:\"v\",f:\"SSB\"},120324:{c:\"w\",f:\"SSB\"},120325:{c:\"x\",f:\"SSB\"},120326:{c:\"y\",f:\"SSB\"},120327:{c:\"z\",f:\"SSB\"},120328:{c:\"A\",f:\"SSI\"},120329:{c:\"B\",f:\"SSI\"},120330:{c:\"C\",f:\"SSI\"},120331:{c:\"D\",f:\"SSI\"},120332:{c:\"E\",f:\"SSI\"},120333:{c:\"F\",f:\"SSI\"},120334:{c:\"G\",f:\"SSI\"},120335:{c:\"H\",f:\"SSI\"},120336:{c:\"I\",f:\"SSI\"},120337:{c:\"J\",f:\"SSI\"},120338:{c:\"K\",f:\"SSI\"},120339:{c:\"L\",f:\"SSI\"},120340:{c:\"M\",f:\"SSI\"},120341:{c:\"N\",f:\"SSI\"},120342:{c:\"O\",f:\"SSI\"},120343:{c:\"P\",f:\"SSI\"},120344:{c:\"Q\",f:\"SSI\"},120345:{c:\"R\",f:\"SSI\"},120346:{c:\"S\",f:\"SSI\"},120347:{c:\"T\",f:\"SSI\"},120348:{c:\"U\",f:\"SSI\"},120349:{c:\"V\",f:\"SSI\"},120350:{c:\"W\",f:\"SSI\"},120351:{c:\"X\",f:\"SSI\"},120352:{c:\"Y\",f:\"SSI\"},120353:{c:\"Z\",f:\"SSI\"},120354:{c:\"a\",f:\"SSI\"},120355:{c:\"b\",f:\"SSI\"},120356:{c:\"c\",f:\"SSI\"},120357:{c:\"d\",f:\"SSI\"},120358:{c:\"e\",f:\"SSI\"},120359:{c:\"f\",f:\"SSI\"},120360:{c:\"g\",f:\"SSI\"},120361:{c:\"h\",f:\"SSI\"},120362:{c:\"i\",f:\"SSI\"},120363:{c:\"j\",f:\"SSI\"},120364:{c:\"k\",f:\"SSI\"},120365:{c:\"l\",f:\"SSI\"},120366:{c:\"m\",f:\"SSI\"},120367:{c:\"n\",f:\"SSI\"},120368:{c:\"o\",f:\"SSI\"},120369:{c:\"p\",f:\"SSI\"},120370:{c:\"q\",f:\"SSI\"},120371:{c:\"r\",f:\"SSI\"},120372:{c:\"s\",f:\"SSI\"},120373:{c:\"t\",f:\"SSI\"},120374:{c:\"u\",f:\"SSI\"},120375:{c:\"v\",f:\"SSI\"},120376:{c:\"w\",f:\"SSI\"},120377:{c:\"x\",f:\"SSI\"},120378:{c:\"y\",f:\"SSI\"},120379:{c:\"z\",f:\"SSI\"},120432:{c:\"A\",f:\"T\"},120433:{c:\"B\",f:\"T\"},120434:{c:\"C\",f:\"T\"},120435:{c:\"D\",f:\"T\"},120436:{c:\"E\",f:\"T\"},120437:{c:\"F\",f:\"T\"},120438:{c:\"G\",f:\"T\"},120439:{c:\"H\",f:\"T\"},120440:{c:\"I\",f:\"T\"},120441:{c:\"J\",f:\"T\"},120442:{c:\"K\",f:\"T\"},120443:{c:\"L\",f:\"T\"},120444:{c:\"M\",f:\"T\"},120445:{c:\"N\",f:\"T\"},120446:{c:\"O\",f:\"T\"},120447:{c:\"P\",f:\"T\"},120448:{c:\"Q\",f:\"T\"},120449:{c:\"R\",f:\"T\"},120450:{c:\"S\",f:\"T\"},120451:{c:\"T\",f:\"T\"},120452:{c:\"U\",f:\"T\"},120453:{c:\"V\",f:\"T\"},120454:{c:\"W\",f:\"T\"},120455:{c:\"X\",f:\"T\"},120456:{c:\"Y\",f:\"T\"},120457:{c:\"Z\",f:\"T\"},120458:{c:\"a\",f:\"T\"},120459:{c:\"b\",f:\"T\"},120460:{c:\"c\",f:\"T\"},120461:{c:\"d\",f:\"T\"},120462:{c:\"e\",f:\"T\"},120463:{c:\"f\",f:\"T\"},120464:{c:\"g\",f:\"T\"},120465:{c:\"h\",f:\"T\"},120466:{c:\"i\",f:\"T\"},120467:{c:\"j\",f:\"T\"},120468:{c:\"k\",f:\"T\"},120469:{c:\"l\",f:\"T\"},120470:{c:\"m\",f:\"T\"},120471:{c:\"n\",f:\"T\"},120472:{c:\"o\",f:\"T\"},120473:{c:\"p\",f:\"T\"},120474:{c:\"q\",f:\"T\"},120475:{c:\"r\",f:\"T\"},120476:{c:\"s\",f:\"T\"},120477:{c:\"t\",f:\"T\"},120478:{c:\"u\",f:\"T\"},120479:{c:\"v\",f:\"T\"},120480:{c:\"w\",f:\"T\"},120481:{c:\"x\",f:\"T\"},120482:{c:\"y\",f:\"T\"},120483:{c:\"z\",f:\"T\"},120488:{c:\"A\",f:\"B\"},120489:{c:\"B\",f:\"B\"},120490:{c:\"\\\\393\",f:\"B\"},120491:{c:\"\\\\394\",f:\"B\"},120492:{c:\"E\",f:\"B\"},120493:{c:\"Z\",f:\"B\"},120494:{c:\"H\",f:\"B\"},120495:{c:\"\\\\398\",f:\"B\"},120496:{c:\"I\",f:\"B\"},120497:{c:\"K\",f:\"B\"},120498:{c:\"\\\\39B\",f:\"B\"},120499:{c:\"M\",f:\"B\"},120500:{c:\"N\",f:\"B\"},120501:{c:\"\\\\39E\",f:\"B\"},120502:{c:\"O\",f:\"B\"},120503:{c:\"\\\\3A0\",f:\"B\"},120504:{c:\"P\",f:\"B\"},120506:{c:\"\\\\3A3\",f:\"B\"},120507:{c:\"T\",f:\"B\"},120508:{c:\"\\\\3A5\",f:\"B\"},120509:{c:\"\\\\3A6\",f:\"B\"},120510:{c:\"X\",f:\"B\"},120511:{c:\"\\\\3A8\",f:\"B\"},120512:{c:\"\\\\3A9\",f:\"B\"},120513:{c:\"\\\\2207\",f:\"B\"},120546:{c:\"A\",f:\"I\"},120547:{c:\"B\",f:\"I\"},120548:{c:\"\\\\393\",f:\"I\"},120549:{c:\"\\\\394\",f:\"I\"},120550:{c:\"E\",f:\"I\"},120551:{c:\"Z\",f:\"I\"},120552:{c:\"H\",f:\"I\"},120553:{c:\"\\\\398\",f:\"I\"},120554:{c:\"I\",f:\"I\"},120555:{c:\"K\",f:\"I\"},120556:{c:\"\\\\39B\",f:\"I\"},120557:{c:\"M\",f:\"I\"},120558:{c:\"N\",f:\"I\"},120559:{c:\"\\\\39E\",f:\"I\"},120560:{c:\"O\",f:\"I\"},120561:{c:\"\\\\3A0\",f:\"I\"},120562:{c:\"P\",f:\"I\"},120564:{c:\"\\\\3A3\",f:\"I\"},120565:{c:\"T\",f:\"I\"},120566:{c:\"\\\\3A5\",f:\"I\"},120567:{c:\"\\\\3A6\",f:\"I\"},120568:{c:\"X\",f:\"I\"},120569:{c:\"\\\\3A8\",f:\"I\"},120570:{c:\"\\\\3A9\",f:\"I\"},120572:{c:\"\\\\3B1\",f:\"I\"},120573:{c:\"\\\\3B2\",f:\"I\"},120574:{c:\"\\\\3B3\",f:\"I\"},120575:{c:\"\\\\3B4\",f:\"I\"},120576:{c:\"\\\\3B5\",f:\"I\"},120577:{c:\"\\\\3B6\",f:\"I\"},120578:{c:\"\\\\3B7\",f:\"I\"},120579:{c:\"\\\\3B8\",f:\"I\"},120580:{c:\"\\\\3B9\",f:\"I\"},120581:{c:\"\\\\3BA\",f:\"I\"},120582:{c:\"\\\\3BB\",f:\"I\"},120583:{c:\"\\\\3BC\",f:\"I\"},120584:{c:\"\\\\3BD\",f:\"I\"},120585:{c:\"\\\\3BE\",f:\"I\"},120586:{c:\"\\\\3BF\",f:\"I\"},120587:{c:\"\\\\3C0\",f:\"I\"},120588:{c:\"\\\\3C1\",f:\"I\"},120589:{c:\"\\\\3C2\",f:\"I\"},120590:{c:\"\\\\3C3\",f:\"I\"},120591:{c:\"\\\\3C4\",f:\"I\"},120592:{c:\"\\\\3C5\",f:\"I\"},120593:{c:\"\\\\3C6\",f:\"I\"},120594:{c:\"\\\\3C7\",f:\"I\"},120595:{c:\"\\\\3C8\",f:\"I\"},120596:{c:\"\\\\3C9\",f:\"I\"},120597:{c:\"\\\\2202\"},120598:{c:\"\\\\3F5\",f:\"I\"},120599:{c:\"\\\\3D1\",f:\"I\"},120600:{c:\"\\\\E009\",f:\"A\"},120601:{c:\"\\\\3D5\",f:\"I\"},120602:{c:\"\\\\3F1\",f:\"I\"},120603:{c:\"\\\\3D6\",f:\"I\"},120604:{c:\"A\",f:\"BI\"},120605:{c:\"B\",f:\"BI\"},120606:{c:\"\\\\393\",f:\"BI\"},120607:{c:\"\\\\394\",f:\"BI\"},120608:{c:\"E\",f:\"BI\"},120609:{c:\"Z\",f:\"BI\"},120610:{c:\"H\",f:\"BI\"},120611:{c:\"\\\\398\",f:\"BI\"},120612:{c:\"I\",f:\"BI\"},120613:{c:\"K\",f:\"BI\"},120614:{c:\"\\\\39B\",f:\"BI\"},120615:{c:\"M\",f:\"BI\"},120616:{c:\"N\",f:\"BI\"},120617:{c:\"\\\\39E\",f:\"BI\"},120618:{c:\"O\",f:\"BI\"},120619:{c:\"\\\\3A0\",f:\"BI\"},120620:{c:\"P\",f:\"BI\"},120622:{c:\"\\\\3A3\",f:\"BI\"},120623:{c:\"T\",f:\"BI\"},120624:{c:\"\\\\3A5\",f:\"BI\"},120625:{c:\"\\\\3A6\",f:\"BI\"},120626:{c:\"X\",f:\"BI\"},120627:{c:\"\\\\3A8\",f:\"BI\"},120628:{c:\"\\\\3A9\",f:\"BI\"},120630:{c:\"\\\\3B1\",f:\"BI\"},120631:{c:\"\\\\3B2\",f:\"BI\"},120632:{c:\"\\\\3B3\",f:\"BI\"},120633:{c:\"\\\\3B4\",f:\"BI\"},120634:{c:\"\\\\3B5\",f:\"BI\"},120635:{c:\"\\\\3B6\",f:\"BI\"},120636:{c:\"\\\\3B7\",f:\"BI\"},120637:{c:\"\\\\3B8\",f:\"BI\"},120638:{c:\"\\\\3B9\",f:\"BI\"},120639:{c:\"\\\\3BA\",f:\"BI\"},120640:{c:\"\\\\3BB\",f:\"BI\"},120641:{c:\"\\\\3BC\",f:\"BI\"},120642:{c:\"\\\\3BD\",f:\"BI\"},120643:{c:\"\\\\3BE\",f:\"BI\"},120644:{c:\"\\\\3BF\",f:\"BI\"},120645:{c:\"\\\\3C0\",f:\"BI\"},120646:{c:\"\\\\3C1\",f:\"BI\"},120647:{c:\"\\\\3C2\",f:\"BI\"},120648:{c:\"\\\\3C3\",f:\"BI\"},120649:{c:\"\\\\3C4\",f:\"BI\"},120650:{c:\"\\\\3C5\",f:\"BI\"},120651:{c:\"\\\\3C6\",f:\"BI\"},120652:{c:\"\\\\3C7\",f:\"BI\"},120653:{c:\"\\\\3C8\",f:\"BI\"},120654:{c:\"\\\\3C9\",f:\"BI\"},120655:{c:\"\\\\2202\",f:\"B\"},120656:{c:\"\\\\3F5\",f:\"BI\"},120657:{c:\"\\\\3D1\",f:\"BI\"},120658:{c:\"\\\\E009\",f:\"A\"},120659:{c:\"\\\\3D5\",f:\"BI\"},120660:{c:\"\\\\3F1\",f:\"BI\"},120661:{c:\"\\\\3D6\",f:\"BI\"},120662:{c:\"A\",f:\"SSB\"},120663:{c:\"B\",f:\"SSB\"},120664:{c:\"\\\\393\",f:\"SSB\"},120665:{c:\"\\\\394\",f:\"SSB\"},120666:{c:\"E\",f:\"SSB\"},120667:{c:\"Z\",f:\"SSB\"},120668:{c:\"H\",f:\"SSB\"},120669:{c:\"\\\\398\",f:\"SSB\"},120670:{c:\"I\",f:\"SSB\"},120671:{c:\"K\",f:\"SSB\"},120672:{c:\"\\\\39B\",f:\"SSB\"},120673:{c:\"M\",f:\"SSB\"},120674:{c:\"N\",f:\"SSB\"},120675:{c:\"\\\\39E\",f:\"SSB\"},120676:{c:\"O\",f:\"SSB\"},120677:{c:\"\\\\3A0\",f:\"SSB\"},120678:{c:\"P\",f:\"SSB\"},120680:{c:\"\\\\3A3\",f:\"SSB\"},120681:{c:\"T\",f:\"SSB\"},120682:{c:\"\\\\3A5\",f:\"SSB\"},120683:{c:\"\\\\3A6\",f:\"SSB\"},120684:{c:\"X\",f:\"SSB\"},120685:{c:\"\\\\3A8\",f:\"SSB\"},120686:{c:\"\\\\3A9\",f:\"SSB\"},120782:{c:\"0\",f:\"B\"},120783:{c:\"1\",f:\"B\"},120784:{c:\"2\",f:\"B\"},120785:{c:\"3\",f:\"B\"},120786:{c:\"4\",f:\"B\"},120787:{c:\"5\",f:\"B\"},120788:{c:\"6\",f:\"B\"},120789:{c:\"7\",f:\"B\"},120790:{c:\"8\",f:\"B\"},120791:{c:\"9\",f:\"B\"},120802:{c:\"0\",f:\"SS\"},120803:{c:\"1\",f:\"SS\"},120804:{c:\"2\",f:\"SS\"},120805:{c:\"3\",f:\"SS\"},120806:{c:\"4\",f:\"SS\"},120807:{c:\"5\",f:\"SS\"},120808:{c:\"6\",f:\"SS\"},120809:{c:\"7\",f:\"SS\"},120810:{c:\"8\",f:\"SS\"},120811:{c:\"9\",f:\"SS\"},120812:{c:\"0\",f:\"SSB\"},120813:{c:\"1\",f:\"SSB\"},120814:{c:\"2\",f:\"SSB\"},120815:{c:\"3\",f:\"SSB\"},120816:{c:\"4\",f:\"SSB\"},120817:{c:\"5\",f:\"SSB\"},120818:{c:\"6\",f:\"SSB\"},120819:{c:\"7\",f:\"SSB\"},120820:{c:\"8\",f:\"SSB\"},120821:{c:\"9\",f:\"SSB\"},120822:{c:\"0\",f:\"T\"},120823:{c:\"1\",f:\"T\"},120824:{c:\"2\",f:\"T\"},120825:{c:\"3\",f:\"T\"},120826:{c:\"4\",f:\"T\"},120827:{c:\"5\",f:\"T\"},120828:{c:\"6\",f:\"T\"},120829:{c:\"7\",f:\"T\"},120830:{c:\"8\",f:\"T\"},120831:{c:\"9\",f:\"T\"}})},3518:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.sansSerifBoldItalic=void 0;var t=i(73),e=i(6949);f.sansSerifBoldItalic=(0,t.AddCSS)(e.sansSerifBoldItalic,{305:{f:\"SSB\"},567:{f:\"SSB\"}})},965:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.sansSerifBold=void 0;var t=i(73),e=i(5193);f.sansSerifBold=(0,t.AddCSS)(e.sansSerifBold,{8213:{c:\"\\\\2014\"},8215:{c:\"_\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"}})},9169:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.sansSerifItalic=void 0;var t=i(73),e=i(2632);f.sansSerifItalic=(0,t.AddCSS)(e.sansSerifItalic,{913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},932:{c:\"T\"},935:{c:\"X\"},8213:{c:\"\\\\2014\"},8215:{c:\"_\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"}})},6736:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.sansSerif=void 0;var t=i(73),e=i(4214);f.sansSerif=(0,t.AddCSS)(e.sansSerif,{913:{c:\"A\"},914:{c:\"B\"},917:{c:\"E\"},918:{c:\"Z\"},919:{c:\"H\"},921:{c:\"I\"},922:{c:\"K\"},924:{c:\"M\"},925:{c:\"N\"},927:{c:\"O\"},929:{c:\"P\"},932:{c:\"T\"},935:{c:\"X\"},8213:{c:\"\\\\2014\"},8215:{c:\"_\"},8260:{c:\"/\"},8710:{c:\"\\\\394\"}})},2290:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.scriptBold=void 0;var t=i(6466);Object.defineProperty(f,\"scriptBold\",{enumerable:!0,get:function(){return t.scriptBold}})},3012:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.script=void 0;var t=i(3776);Object.defineProperty(f,\"script\",{enumerable:!0,get:function(){return t.script}})},8787:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.smallop=void 0;var t=i(73),e=i(7405);f.smallop=(0,t.AddCSS)(e.smallop,{8260:{c:\"/\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},10072:{c:\"\\\\2223\"},10764:{c:\"\\\\222C\\\\222C\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"}})},5392:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texCalligraphicBold=void 0;var t=i(73),e=i(8105);f.texCalligraphicBold=(0,t.AddCSS)(e.texCalligraphicBold,{305:{f:\"B\"},567:{f:\"B\"}})},6318:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texCalligraphic=void 0;var t=i(2518);Object.defineProperty(f,\"texCalligraphic\",{enumerable:!0,get:function(){return t.texCalligraphic}})},5351:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texMathit=void 0;var t=i(5595);Object.defineProperty(f,\"texMathit\",{enumerable:!0,get:function(){return t.texMathit}})},873:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texOldstyleBold=void 0;var t=i(6357);Object.defineProperty(f,\"texOldstyleBold\",{enumerable:!0,get:function(){return t.texOldstyleBold}})},7611:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texOldstyle=void 0;var t=i(9474);Object.defineProperty(f,\"texOldstyle\",{enumerable:!0,get:function(){return t.texOldstyle}})},6590:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texSize3=void 0;var t=i(73),e=i(584);f.texSize3=(0,t.AddCSS)(e.texSize3,{8260:{c:\"/\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"}})},8798:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texSize4=void 0;var t=i(73),e=i(4324);f.texSize4=(0,t.AddCSS)(e.texSize4,{8260:{c:\"/\"},9001:{c:\"\\\\27E8\"},9002:{c:\"\\\\27E9\"},12296:{c:\"\\\\27E8\"},12297:{c:\"\\\\27E9\"},57685:{c:\"\\\\E153\\\\E152\"},57686:{c:\"\\\\E151\\\\E150\"}})},2138:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texVariant=void 0;var t=i(73),e=i(8135);f.texVariant=(0,t.AddCSS)(e.texVariant,{1008:{c:\"\\\\E009\"},8463:{f:\"\"},8740:{c:\"\\\\E006\"},8742:{c:\"\\\\E007\"},8808:{c:\"\\\\E00C\"},8809:{c:\"\\\\E00D\"},8816:{c:\"\\\\E011\"},8817:{c:\"\\\\E00E\"},8840:{c:\"\\\\E016\"},8841:{c:\"\\\\E018\"},8842:{c:\"\\\\E01A\"},8843:{c:\"\\\\E01B\"},10887:{c:\"\\\\E010\"},10888:{c:\"\\\\E00F\"},10955:{c:\"\\\\E017\"},10956:{c:\"\\\\E019\"}})},2176:function(c,f){var i,t=this&&this.__extends||(i=function(c,f){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(c,f){c.__proto__=f}||function(c,f){for(var i in f)Object.prototype.hasOwnProperty.call(f,i)&&(c[i]=f[i])},i(c,f)},function(c,f){if(\"function\"!=typeof f&&null!==f)throw new TypeError(\"Class extends value \"+String(f)+\" is not a constructor or null\");function t(){this.constructor=c}i(c,f),c.prototype=null===f?Object.create(f):(t.prototype=f.prototype,new t)}),e=this&&this.__assign||function(){return e=Object.assign||function(c){for(var f,i=1,t=arguments.length;i<t;i++)for(var e in f=arguments[i])Object.prototype.hasOwnProperty.call(f,e)&&(c[e]=f[e]);return c},e.apply(this,arguments)},s=this&&this.__read||function(c,f){var i=\"function\"==typeof Symbol&&c[Symbol.iterator];if(!i)return c;var t,e,s=i.call(c),r=[];try{for(;(void 0===f||f-- >0)&&!(t=s.next()).done;)r.push(t.value)}catch(c){e={error:c}}finally{try{t&&!t.done&&(i=s.return)&&i.call(s)}finally{if(e)throw e.error}}return r},r=this&&this.__spreadArray||function(c,f,i){if(i||2===arguments.length)for(var t,e=0,s=f.length;e<s;e++)!t&&e in f||(t||(t=Array.prototype.slice.call(f,0,e)),t[e]=f[e]);return c.concat(t||Array.prototype.slice.call(f))};Object.defineProperty(f,\"__esModule\",{value:!0}),f.CommonTeXFontMixin=void 0,f.CommonTeXFontMixin=function(c){var f;return f=function(c){function f(){return null!==c&&c.apply(this,arguments)||this}return t(f,c),f.prototype.getDelimiterData=function(c){return this.getChar(\"-smallop\",c)||this.getChar(\"-size4\",c)},f}(c),f.NAME=\"TeX\",f.defaultVariants=r(r([],s(c.defaultVariants),!1),[[\"-smallop\",\"normal\"],[\"-largeop\",\"normal\"],[\"-size3\",\"normal\"],[\"-size4\",\"normal\"],[\"-tex-calligraphic\",\"italic\"],[\"-tex-bold-calligraphic\",\"bold-italic\"],[\"-tex-oldstyle\",\"normal\"],[\"-tex-bold-oldstyle\",\"bold\"],[\"-tex-mathit\",\"italic\"],[\"-tex-variant\",\"normal\"]],!1),f.defaultCssFonts=e(e({},c.defaultCssFonts),{\"-smallop\":[\"serif\",!1,!1],\"-largeop\":[\"serif\",!1,!1],\"-size3\":[\"serif\",!1,!1],\"-size4\":[\"serif\",!1,!1],\"-tex-calligraphic\":[\"cursive\",!0,!1],\"-tex-bold-calligraphic\":[\"cursive\",!0,!0],\"-tex-oldstyle\":[\"serif\",!1,!1],\"-tex-bold-oldstyle\":[\"serif\",!1,!0],\"-tex-mathit\":[\"serif\",!0,!1]}),f.defaultSizeVariants=[\"normal\",\"-smallop\",\"-largeop\",\"-size3\",\"-size4\",\"-tex-variant\"],f.defaultStretchVariants=[\"-size4\"],f}},3869:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.boldItalic=void 0,f.boldItalic={47:[.711,.21,.894],305:[.452,.008,.394,{sk:.0319}],567:[.451,.201,.439,{sk:.0958}],8260:[.711,.21,.894],8710:[.711,0,.958,{sk:.192}],10744:[.711,.21,.894]}},7557:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.bold=void 0,f.bold={33:[.705,0,.35],34:[.694,-.329,.603],35:[.694,.193,.958],36:[.75,.056,.575],37:[.75,.056,.958],38:[.705,.011,.894],39:[.694,-.329,.319],40:[.75,.249,.447],41:[.75,.249,.447],42:[.75,-.306,.575],43:[.633,.131,.894],44:[.171,.194,.319],45:[.278,-.166,.383],46:[.171,0,.319],47:[.75,.25,.575],58:[.444,0,.319],59:[.444,.194,.319],60:[.587,.085,.894],61:[.393,-.109,.894],62:[.587,.085,.894],63:[.7,0,.543],64:[.699,.006,.894],91:[.75,.25,.319],92:[.75,.25,.575],93:[.75,.25,.319],94:[.694,-.52,.575],95:[-.01,.061,.575],96:[.706,-.503,.575],123:[.75,.25,.575],124:[.75,.249,.319],125:[.75,.25,.575],126:[.344,-.202,.575],168:[.695,-.535,.575],172:[.371,-.061,.767],175:[.607,-.54,.575],176:[.702,-.536,.575],177:[.728,.035,.894],180:[.706,-.503,.575],183:[.336,-.166,.319],215:[.53,.028,.894],247:[.597,.096,.894],305:[.442,0,.278,{sk:.0278}],567:[.442,.205,.306,{sk:.0833}],697:[.563,-.033,.344],710:[.694,-.52,.575],711:[.66,-.515,.575],713:[.607,-.54,.575],714:[.706,-.503,.575],715:[.706,-.503,.575],728:[.694,-.5,.575],729:[.695,-.525,.575],730:[.702,-.536,.575],732:[.694,-.552,.575],768:[.706,-.503,0],769:[.706,-.503,0],770:[.694,-.52,0],771:[.694,-.552,0],772:[.607,-.54,0],774:[.694,-.5,0],775:[.695,-.525,0],776:[.695,-.535,0],778:[.702,-.536,0],779:[.714,-.511,0],780:[.66,-.515,0],824:[.711,.21,0],8194:[0,0,.5],8195:[0,0,.999],8196:[0,0,.333],8197:[0,0,.25],8198:[0,0,.167],8201:[0,0,.167],8202:[0,0,.083],8211:[.3,-.249,.575],8212:[.3,-.249,1.15],8213:[.3,-.249,1.15],8214:[.75,.248,.575],8215:[-.01,.061,.575],8216:[.694,-.329,.319],8217:[.694,-.329,.319],8220:[.694,-.329,.603],8221:[.694,-.329,.603],8224:[.702,.211,.511],8225:[.702,.202,.511],8226:[.474,-.028,.575],8230:[.171,0,1.295],8242:[.563,-.033,.344],8243:[.563,0,.688],8244:[.563,0,1.032],8254:[.607,-.54,.575],8260:[.75,.25,.575],8279:[.563,0,1.376],8407:[.723,-.513,.575],8463:[.694,.008,.668,{sk:-.0319}],8467:[.702,.019,.474,{sk:.128}],8472:[.461,.21,.74],8501:[.694,0,.703],8592:[.518,.017,1.15],8593:[.694,.193,.575],8594:[.518,.017,1.15],8595:[.694,.194,.575],8596:[.518,.017,1.15],8597:[.767,.267,.575],8598:[.724,.194,1.15],8599:[.724,.193,1.15],8600:[.694,.224,1.15],8601:[.694,.224,1.15],8602:[.711,.21,1.15],8603:[.711,.21,1.15],8614:[.518,.017,1.15],8617:[.518,.017,1.282],8618:[.518,.017,1.282],8622:[.711,.21,1.15],8636:[.518,-.22,1.15],8637:[.281,.017,1.15],8640:[.518,-.22,1.15],8641:[.281,.017,1.15],8652:[.718,.017,1.15],8653:[.711,.21,1.15],8654:[.711,.21,1.15],8655:[.711,.21,1.15],8656:[.547,.046,1.15],8657:[.694,.193,.703],8658:[.547,.046,1.15],8659:[.694,.194,.703],8660:[.547,.046,1.15],8661:[.767,.267,.703],8704:[.694,.016,.639],8707:[.694,0,.639],8708:[.711,.21,.639],8709:[.767,.073,.575],8710:[.698,0,.958],8712:[.587,.086,.767],8713:[.711,.21,.767],8715:[.587,.086,.767],8716:[.711,.21,.767],8722:[.281,-.221,.894],8723:[.537,.227,.894],8725:[.75,.25,.575],8726:[.75,.25,.575],8727:[.472,-.028,.575],8728:[.474,-.028,.575],8729:[.474,-.028,.575],8730:[.82,.18,.958,{ic:.03}],8733:[.451,.008,.894],8734:[.452,.008,1.15],8736:[.714,0,.722],8739:[.75,.249,.319],8740:[.75,.249,.319],8741:[.75,.248,.575],8742:[.75,.248,.575],8743:[.604,.017,.767],8744:[.604,.016,.767],8745:[.603,.016,.767],8746:[.604,.016,.767],8747:[.711,.211,.569,{ic:.063}],8764:[.391,-.109,.894],8768:[.583,.082,.319],8769:[.711,.21,.894],8771:[.502,0,.894],8772:[.711,.21,.894],8773:[.638,.027,.894],8775:[.711,.21,.894],8776:[.524,-.032,.894],8777:[.711,.21,.894],8781:[.533,.032,.894],8784:[.721,-.109,.894],8800:[.711,.21,.894],8801:[.505,0,.894],8802:[.711,.21,.894],8804:[.697,.199,.894],8805:[.697,.199,.894],8810:[.617,.116,1.15],8811:[.618,.116,1.15],8813:[.711,.21,.894],8814:[.711,.21,.894],8815:[.711,.21,.894],8816:[.711,.21,.894],8817:[.711,.21,.894],8826:[.585,.086,.894],8827:[.586,.086,.894],8832:[.711,.21,.894],8833:[.711,.21,.894],8834:[.587,.085,.894],8835:[.587,.086,.894],8836:[.711,.21,.894],8837:[.711,.21,.894],8838:[.697,.199,.894],8839:[.697,.199,.894],8840:[.711,.21,.894],8841:[.711,.21,.894],8846:[.604,.016,.767],8849:[.697,.199,.894],8850:[.697,.199,.894],8851:[.604,0,.767],8852:[.604,0,.767],8853:[.632,.132,.894],8854:[.632,.132,.894],8855:[.632,.132,.894],8856:[.632,.132,.894],8857:[.632,.132,.894],8866:[.693,0,.703],8867:[.693,0,.703],8868:[.694,0,.894],8869:[.693,0,.894],8872:[.75,.249,.974],8876:[.711,.21,.703],8877:[.75,.249,.974],8900:[.523,.021,.575],8901:[.336,-.166,.319],8902:[.502,0,.575],8904:[.54,.039,1],8930:[.711,.21,.894],8931:[.711,.21,.894],8942:[.951,.029,.319],8943:[.336,-.166,1.295],8945:[.871,-.101,1.323],8968:[.75,.248,.511],8969:[.75,.248,.511],8970:[.749,.248,.511],8971:[.749,.248,.511],8994:[.405,-.108,1.15],8995:[.392,-.126,1.15],9001:[.75,.249,.447],9002:[.75,.249,.447],9651:[.711,0,1.022],9653:[.711,0,1.022],9657:[.54,.039,.575],9661:[.5,.21,1.022],9663:[.5,.21,1.022],9667:[.539,.038,.575],9711:[.711,.211,1.15],9824:[.719,.129,.894],9825:[.711,.024,.894],9826:[.719,.154,.894],9827:[.719,.129,.894],9837:[.75,.017,.447],9838:[.741,.223,.447],9839:[.724,.224,.447],10072:[.75,.249,.319],10216:[.75,.249,.447],10217:[.75,.249,.447],10229:[.518,.017,1.805],10230:[.518,.017,1.833],10231:[.518,.017,2.126],10232:[.547,.046,1.868],10233:[.547,.046,1.87],10234:[.547,.046,2.126],10236:[.518,.017,1.833],10744:[.711,.21,.894],10799:[.53,.028,.894],10815:[.686,0,.9],10927:[.696,.199,.894],10928:[.697,.199,.894],12296:[.75,.249,.447],12297:[.75,.249,.447]}},7481:function(c,f,i){Object.defineProperty(f,\"__esModule\",{value:!0}),f.delimiters=f.VSIZES=f.HDW3=f.HDW2=f.HDW1=void 0;var t=i(4228);f.HDW1=[.75,.25,.875],f.HDW2=[.85,.349,.667],f.HDW3=[.583,.082,.5],f.VSIZES=[1,1.2,1.8,2.4,3];var e={c:47,dir:t.V,sizes:f.VSIZES},s={c:175,dir:t.H,sizes:[.5],stretch:[0,175],HDW:[.59,-.544,.5]},r={c:710,dir:t.H,sizes:[.5,.556,1,1.444,1.889]},o={c:732,dir:t.H,sizes:[.5,.556,1,1.444,1.889]},a={c:8211,dir:t.H,sizes:[.5],stretch:[0,8211],HDW:[.285,-.248,.5]},S={c:8592,dir:t.H,sizes:[1],stretch:[8592,8722],HDW:f.HDW3},l={c:8594,dir:t.H,sizes:[1],stretch:[0,8722,8594],HDW:f.HDW3},n={c:8596,dir:t.H,sizes:[1],stretch:[8592,8722,8594],HDW:f.HDW3},B={c:8612,dir:t.H,stretch:[8592,8722,8739],HDW:f.HDW3,min:1.278},d={c:8614,dir:t.H,sizes:[1],stretch:[8739,8722,8594],HDW:f.HDW3},u={c:8656,dir:t.H,sizes:[1],stretch:[8656,61],HDW:f.HDW3},k={c:8658,dir:t.H,sizes:[1],stretch:[0,61,8658],HDW:f.HDW3},I={c:8660,dir:t.H,sizes:[1],stretch:[8656,61,8658],HDW:f.HDW3},A={c:8722,dir:t.H,sizes:[.778],stretch:[0,8722],HDW:f.HDW3},p={c:8739,dir:t.V,sizes:[1],stretch:[0,8739],HDW:[.627,.015,.333]},m={c:9180,dir:t.H,sizes:[.778,1],schar:[8994,8994],variants:[5,0],stretch:[57680,57684,57681],HDW:[.32,.2,.5]},h={c:9181,dir:t.H,sizes:[.778,1],schar:[8995,8995],variants:[5,0],stretch:[57682,57684,57683],HDW:[.32,.2,.5]},M={c:9182,dir:t.H,stretch:[57680,57684,57681,57685],HDW:[.32,.2,.5],min:1.8},x={c:9183,dir:t.H,stretch:[57682,57684,57683,57686],HDW:[.32,.2,.5],min:1.8},H={c:10216,dir:t.V,sizes:f.VSIZES},_={c:10217,dir:t.V,sizes:f.VSIZES},E={c:10502,dir:t.H,stretch:[8656,61,8739],HDW:f.HDW3,min:1.278},y={c:10503,dir:t.H,stretch:[8872,61,8658],HDW:f.HDW3,min:1.278};f.delimiters={40:{dir:t.V,sizes:f.VSIZES,stretch:[9115,9116,9117],HDW:[.85,.349,.875]},41:{dir:t.V,sizes:f.VSIZES,stretch:[9118,9119,9120],HDW:[.85,.349,.875]},45:A,47:e,61:{dir:t.H,sizes:[.778],stretch:[0,61],HDW:f.HDW3},91:{dir:t.V,sizes:f.VSIZES,stretch:[9121,9122,9123],HDW:f.HDW2},92:{dir:t.V,sizes:f.VSIZES},93:{dir:t.V,sizes:f.VSIZES,stretch:[9124,9125,9126],HDW:f.HDW2},94:r,95:a,123:{dir:t.V,sizes:f.VSIZES,stretch:[9127,9130,9129,9128],HDW:[.85,.349,.889]},124:{dir:t.V,sizes:[1],stretch:[0,8739],HDW:[.75,.25,.333]},125:{dir:t.V,sizes:f.VSIZES,stretch:[9131,9130,9133,9132],HDW:[.85,.349,.889]},126:o,175:s,710:r,713:s,732:o,770:r,771:o,818:a,8211:a,8212:a,8213:a,8214:{dir:t.V,sizes:[.602,1],schar:[0,8741],variants:[1,0],stretch:[0,8741],HDW:[.602,0,.556]},8215:a,8254:s,8407:l,8592:S,8593:{dir:t.V,sizes:[.888],stretch:[8593,9168],HDW:[.6,0,.667]},8594:l,8595:{dir:t.V,sizes:[.888],stretch:[0,9168,8595],HDW:[.6,0,.667]},8596:n,8597:{dir:t.V,sizes:[1.044],stretch:[8593,9168,8595],HDW:f.HDW1},8606:{dir:t.H,sizes:[1],stretch:[8606,8722],HDW:f.HDW3},8608:{dir:t.H,sizes:[1],stretch:[0,8722,8608],HDW:f.HDW3},8612:B,8613:{dir:t.V,stretch:[8593,9168,8869],HDW:f.HDW1,min:1.555},8614:d,8615:{dir:t.V,stretch:[8868,9168,8595],HDW:f.HDW1,min:1.555},8624:{dir:t.V,sizes:[.722],stretch:[8624,9168],HDW:f.HDW1},8625:{dir:t.V,sizes:[.722],stretch:[8625,9168],HDW:f.HDW1},8636:{dir:t.H,sizes:[1],stretch:[8636,8722],HDW:f.HDW3},8637:{dir:t.H,sizes:[1],stretch:[8637,8722],HDW:f.HDW3},8638:{dir:t.V,sizes:[.888],stretch:[8638,9168],HDW:f.HDW1},8639:{dir:t.V,sizes:[.888],stretch:[8639,9168],HDW:f.HDW1},8640:{dir:t.H,sizes:[1],stretch:[0,8722,8640],HDW:f.HDW3},8641:{dir:t.H,sizes:[1],stretch:[0,8722,8641],HDW:f.HDW3},8642:{dir:t.V,sizes:[.888],stretch:[0,9168,8642],HDW:f.HDW1},8643:{dir:t.V,sizes:[.888],stretch:[0,9168,8643],HDW:f.HDW1},8656:u,8657:{dir:t.V,sizes:[.888],stretch:[8657,8214],HDW:[.599,0,.778]},8658:k,8659:{dir:t.V,sizes:[.888],stretch:[0,8214,8659],HDW:[.6,0,.778]},8660:I,8661:{dir:t.V,sizes:[1.044],stretch:[8657,8214,8659],HDW:[.75,.25,.778]},8666:{dir:t.H,sizes:[1],stretch:[8666,8801],HDW:[.464,-.036,.5]},8667:{dir:t.H,sizes:[1],stretch:[0,8801,8667],HDW:[.464,-.036,.5]},8722:A,8725:e,8730:{dir:t.V,sizes:f.VSIZES,stretch:[57345,57344,9143],fullExt:[.65,2.3],HDW:[.85,.35,1.056]},8739:p,8741:{dir:t.V,sizes:[1],stretch:[0,8741],HDW:[.627,.015,.556]},8968:{dir:t.V,sizes:f.VSIZES,stretch:[9121,9122],HDW:f.HDW2},8969:{dir:t.V,sizes:f.VSIZES,stretch:[9124,9125],HDW:f.HDW2},8970:{dir:t.V,sizes:f.VSIZES,stretch:[0,9122,9123],HDW:f.HDW2},8971:{dir:t.V,sizes:f.VSIZES,stretch:[0,9125,9126],HDW:f.HDW2},8978:m,8994:m,8995:h,9001:H,9002:_,9130:{dir:t.V,sizes:[.32],stretch:[9130,9130,9130],HDW:[.29,.015,.889]},9135:a,9136:{dir:t.V,sizes:[.989],stretch:[9127,9130,9133],HDW:[.75,.25,.889]},9137:{dir:t.V,sizes:[.989],stretch:[9131,9130,9129],HDW:[.75,.25,.889]},9140:{dir:t.H,stretch:[9484,8722,9488],HDW:f.HDW3,min:1},9141:{dir:t.H,stretch:[9492,8722,9496],HDW:f.HDW3,min:1},9168:{dir:t.V,sizes:[.602,1],schar:[0,8739],variants:[1,0],stretch:[0,8739],HDW:[.602,0,.333]},9180:m,9181:h,9182:M,9183:x,9184:{dir:t.H,stretch:[714,713,715],HDW:[.59,-.544,.5],min:1},9185:{dir:t.H,stretch:[715,713,714],HDW:[.59,-.544,.5],min:1},9472:a,10072:p,10216:H,10217:_,10222:{dir:t.V,sizes:[.989],stretch:[9127,9130,9129],HDW:[.75,.25,.889]},10223:{dir:t.V,sizes:[.989],stretch:[9131,9130,9133],HDW:[.75,.25,.889]},10229:S,10230:l,10231:n,10232:u,10233:k,10234:I,10235:B,10236:d,10237:E,10238:y,10502:E,10503:y,10574:{dir:t.H,stretch:[8636,8722,8640],HDW:f.HDW3,min:2},10575:{dir:t.V,stretch:[8638,9168,8642],HDW:f.HDW1,min:1.776},10576:{dir:t.H,stretch:[8637,8722,8641],HDW:f.HDW3,min:2},10577:{dir:t.V,stretch:[8639,9168,8643],HDW:f.HDW1,min:.5},10586:{dir:t.H,stretch:[8636,8722,8739],HDW:f.HDW3,min:1.278},10587:{dir:t.H,stretch:[8739,8722,8640],HDW:f.HDW3,min:1.278},10588:{dir:t.V,stretch:[8638,9168,8869],HDW:f.HDW1,min:1.556},10589:{dir:t.V,stretch:[8868,9168,8642],HDW:f.HDW1,min:1.556},10590:{dir:t.H,stretch:[8637,8722,8739],HDW:f.HDW3,min:1.278},10591:{dir:t.H,stretch:[8739,8722,8641],HDW:f.HDW3,min:1.278},10592:{dir:t.V,stretch:[8639,9168,8869],HDW:f.HDW1,min:1.776},10593:{dir:t.V,stretch:[8868,9168,8643],HDW:f.HDW1,min:1.776},12296:H,12297:_,65079:M,65080:x}},5674:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.doubleStruck=void 0,f.doubleStruck={}},7002:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.frakturBold=void 0,f.frakturBold={33:[.689,.012,.349],34:[.695,-.432,.254],38:[.696,.016,.871],39:[.695,-.436,.25],40:[.737,.186,.459],41:[.735,.187,.459],42:[.692,-.449,.328],43:[.598,.082,.893],44:[.107,.191,.328],45:[.275,-.236,.893],46:[.102,.015,.328],47:[.721,.182,.593],48:[.501,.012,.593],49:[.489,0,.593],50:[.491,0,.593],51:[.487,.193,.593],52:[.495,.196,.593],53:[.481,.19,.593],54:[.704,.012,.593],55:[.479,.197,.593],56:[.714,.005,.593],57:[.487,.195,.593],58:[.457,.012,.255],59:[.458,.19,.255],61:[.343,-.168,.582],63:[.697,.014,.428],91:[.74,.13,.257],93:[.738,.132,.257],94:[.734,-.452,.59],8216:[.708,-.411,.254],8217:[.692,-.394,.254],8260:[.721,.182,.593],58113:[.63,.027,.587],58114:[.693,.212,.394,{ic:.014}],58115:[.681,.219,.387],58116:[.473,.212,.593],58117:[.684,.027,.393],58120:[.679,.22,.981],58121:[.717,.137,.727]}},9349:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.fraktur=void 0,f.fraktur={33:[.689,.012,.296],34:[.695,-.432,.215],38:[.698,.011,.738],39:[.695,-.436,.212],40:[.737,.186,.389],41:[.735,.187,.389],42:[.692,-.449,.278],43:[.598,.082,.756],44:[.107,.191,.278],45:[.275,-.236,.756],46:[.102,.015,.278],47:[.721,.182,.502],48:[.492,.013,.502],49:[.468,0,.502],50:[.474,0,.502],51:[.473,.182,.502],52:[.476,.191,.502],53:[.458,.184,.502],54:[.7,.013,.502],55:[.468,.181,.502],56:[.705,.01,.502],57:[.469,.182,.502],58:[.457,.012,.216],59:[.458,.189,.216],61:[.368,-.132,.756],63:[.693,.011,.362],91:[.74,.13,.278],93:[.738,.131,.278],94:[.734,-.452,.5],8216:[.708,-.41,.215],8217:[.692,-.395,.215],8260:[.721,.182,.502],58112:[.683,.032,.497],58113:[.616,.03,.498],58114:[.68,.215,.333],58115:[.679,.224,.329],58116:[.471,.214,.503],58117:[.686,.02,.333],58118:[.577,.021,.334,{ic:.013}],58119:[.475,.022,.501,{ic:.013}]}},9741:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.italic=void 0,f.italic={33:[.716,0,.307,{ic:.073}],34:[.694,-.379,.514,{ic:.024}],35:[.694,.194,.818,{ic:.01}],37:[.75,.056,.818,{ic:.029}],38:[.716,.022,.767,{ic:.035}],39:[.694,-.379,.307,{ic:.07}],40:[.75,.25,.409,{ic:.108}],41:[.75,.25,.409],42:[.75,-.32,.511,{ic:.073}],43:[.557,.057,.767],44:[.121,.194,.307],45:[.251,-.18,.358],46:[.121,0,.307],47:[.716,.215,.778],48:[.665,.021,.511,{ic:.051}],49:[.666,0,.511],50:[.666,.022,.511,{ic:.04}],51:[.666,.022,.511,{ic:.051}],52:[.666,.194,.511],53:[.666,.022,.511,{ic:.056}],54:[.665,.022,.511,{ic:.054}],55:[.666,.022,.511,{ic:.123}],56:[.666,.021,.511,{ic:.042}],57:[.666,.022,.511,{ic:.042}],58:[.431,0,.307],59:[.431,.194,.307],61:[.367,-.133,.767],63:[.716,0,.511,{ic:.04}],64:[.705,.011,.767,{ic:.022}],91:[.75,.25,.307,{ic:.139}],93:[.75,.25,.307,{ic:.052}],94:[.694,-.527,.511,{ic:.017}],95:[-.025,.062,.511,{ic:.043}],126:[.318,-.208,.511,{ic:.06}],305:[.441,.01,.307,{ic:.033}],567:[.442,.204,.332],768:[.697,-.5,0],769:[.697,-.5,0,{ic:.039}],770:[.694,-.527,0,{ic:.017}],771:[.668,-.558,0,{ic:.06}],772:[.589,-.544,0,{ic:.054}],774:[.694,-.515,0,{ic:.062}],775:[.669,-.548,0],776:[.669,-.554,0,{ic:.045}],778:[.716,-.542,0],779:[.697,-.503,0,{ic:.065}],780:[.638,-.502,0,{ic:.029}],989:[.605,.085,.778],8211:[.285,-.248,.511,{ic:.043}],8212:[.285,-.248,1.022,{ic:.016}],8213:[.285,-.248,1.022,{ic:.016}],8215:[-.025,.062,.511,{ic:.043}],8216:[.694,-.379,.307,{ic:.055}],8217:[.694,-.379,.307,{ic:.07}],8220:[.694,-.379,.514,{ic:.092}],8221:[.694,-.379,.514,{ic:.024}],8260:[.716,.215,.778],8463:[.695,.013,.54,{ic:.022}],8710:[.716,0,.833,{sk:.167}],10744:[.716,.215,.778]}},2827:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.largeop=void 0,f.largeop={40:[1.15,.649,.597],41:[1.15,.649,.597],47:[1.15,.649,.811],91:[1.15,.649,.472],92:[1.15,.649,.811],93:[1.15,.649,.472],123:[1.15,.649,.667],125:[1.15,.649,.667],710:[.772,-.565,1],732:[.75,-.611,1],770:[.772,-.565,0],771:[.75,-.611,0],8214:[.602,0,.778],8260:[1.15,.649,.811],8593:[.6,0,.667],8595:[.6,0,.667],8657:[.599,0,.778],8659:[.6,0,.778],8719:[.95,.45,1.278],8720:[.95,.45,1.278],8721:[.95,.45,1.444],8730:[1.15,.65,1,{ic:.02}],8739:[.627,.015,.333],8741:[.627,.015,.556],8747:[1.36,.862,.556,{ic:.388}],8748:[1.36,.862,1.084,{ic:.388}],8749:[1.36,.862,1.592,{ic:.388}],8750:[1.36,.862,.556,{ic:.388}],8896:[.95,.45,1.111],8897:[.95,.45,1.111],8898:[.949,.45,1.111],8899:[.95,.449,1.111],8968:[1.15,.649,.528],8969:[1.15,.649,.528],8970:[1.15,.649,.528],8971:[1.15,.649,.528],9001:[1.15,.649,.611],9002:[1.15,.649,.611],9168:[.602,0,.667],10072:[.627,.015,.333],10216:[1.15,.649,.611],10217:[1.15,.649,.611],10752:[.949,.449,1.511],10753:[.949,.449,1.511],10754:[.949,.449,1.511],10756:[.95,.449,1.111],10758:[.95,.45,1.111],10764:[1.36,.862,2.168,{ic:.388}],12296:[1.15,.649,.611],12297:[1.15,.649,.611]}},2970:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.monospace=void 0,f.monospace={32:[0,0,.525],33:[.622,0,.525],34:[.623,-.333,.525],35:[.611,0,.525],36:[.694,.082,.525],37:[.694,.083,.525],38:[.622,.011,.525],39:[.611,-.287,.525],40:[.694,.082,.525],41:[.694,.082,.525],42:[.52,-.09,.525],43:[.531,-.081,.525],44:[.14,.139,.525],45:[.341,-.271,.525],46:[.14,0,.525],47:[.694,.083,.525],58:[.431,0,.525],59:[.431,.139,.525],60:[.557,-.055,.525],61:[.417,-.195,.525],62:[.557,-.055,.525],63:[.617,0,.525],64:[.617,.006,.525],91:[.694,.082,.525],92:[.694,.083,.525],93:[.694,.082,.525],94:[.611,-.46,.525],95:[-.025,.095,.525],96:[.681,-.357,.525],123:[.694,.083,.525],124:[.694,.082,.525],125:[.694,.083,.525],126:[.611,-.466,.525],127:[.612,-.519,.525],160:[0,0,.525],305:[.431,0,.525],567:[.431,.228,.525],697:[.623,-.334,.525],768:[.611,-.485,0],769:[.611,-.485,0],770:[.611,-.46,0],771:[.611,-.466,0],772:[.577,-.5,0],774:[.611,-.504,0],776:[.612,-.519,0],778:[.619,-.499,0],780:[.577,-.449,0],913:[.623,0,.525],914:[.611,0,.525],915:[.611,0,.525],916:[.623,0,.525],917:[.611,0,.525],918:[.611,0,.525],919:[.611,0,.525],920:[.621,.01,.525],921:[.611,0,.525],922:[.611,0,.525],923:[.623,0,.525],924:[.611,0,.525],925:[.611,0,.525],926:[.611,0,.525],927:[.621,.01,.525],928:[.611,0,.525],929:[.611,0,.525],931:[.611,0,.525],932:[.611,0,.525],933:[.622,0,.525],934:[.611,0,.525],935:[.611,0,.525],936:[.611,0,.525],937:[.622,0,.525],8215:[-.025,.095,.525],8242:[.623,-.334,.525],8243:[.623,0,1.05],8244:[.623,0,1.575],8260:[.694,.083,.525],8279:[.623,0,2.1],8710:[.623,0,.525]}},1668:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.normal=void 0,f.normal={32:[0,0,.25],33:[.716,0,.278],34:[.694,-.379,.5],35:[.694,.194,.833],36:[.75,.056,.5],37:[.75,.056,.833],38:[.716,.022,.778],39:[.694,-.379,.278],40:[.75,.25,.389],41:[.75,.25,.389],42:[.75,-.32,.5],43:[.583,.082,.778],44:[.121,.194,.278],45:[.252,-.179,.333],46:[.12,0,.278],47:[.75,.25,.5],48:[.666,.022,.5],49:[.666,0,.5],50:[.666,0,.5],51:[.665,.022,.5],52:[.677,0,.5],53:[.666,.022,.5],54:[.666,.022,.5],55:[.676,.022,.5],56:[.666,.022,.5],57:[.666,.022,.5],58:[.43,0,.278],59:[.43,.194,.278],60:[.54,.04,.778],61:[.583,.082,.778],62:[.54,.04,.778],63:[.705,0,.472],64:[.705,.011,.778],65:[.716,0,.75],66:[.683,0,.708],67:[.705,.021,.722],68:[.683,0,.764],69:[.68,0,.681],70:[.68,0,.653],71:[.705,.022,.785],72:[.683,0,.75],73:[.683,0,.361],74:[.683,.022,.514],75:[.683,0,.778],76:[.683,0,.625],77:[.683,0,.917],78:[.683,0,.75],79:[.705,.022,.778],80:[.683,0,.681],81:[.705,.193,.778],82:[.683,.022,.736],83:[.705,.022,.556],84:[.677,0,.722],85:[.683,.022,.75],86:[.683,.022,.75],87:[.683,.022,1.028],88:[.683,0,.75],89:[.683,0,.75],90:[.683,0,.611],91:[.75,.25,.278],92:[.75,.25,.5],93:[.75,.25,.278],94:[.694,-.531,.5],95:[-.025,.062,.5],96:[.699,-.505,.5],97:[.448,.011,.5],98:[.694,.011,.556],99:[.448,.011,.444],100:[.694,.011,.556],101:[.448,.011,.444],102:[.705,0,.306,{ic:.066}],103:[.453,.206,.5],104:[.694,0,.556],105:[.669,0,.278],106:[.669,.205,.306],107:[.694,0,.528],108:[.694,0,.278],109:[.442,0,.833],110:[.442,0,.556],111:[.448,.01,.5],112:[.442,.194,.556],113:[.442,.194,.528],114:[.442,0,.392],115:[.448,.011,.394],116:[.615,.01,.389],117:[.442,.011,.556],118:[.431,.011,.528],119:[.431,.011,.722],120:[.431,0,.528],121:[.431,.204,.528],122:[.431,0,.444],123:[.75,.25,.5],124:[.75,.249,.278],125:[.75,.25,.5],126:[.318,-.215,.5],160:[0,0,.25],163:[.714,.011,.769],165:[.683,0,.75],168:[.669,-.554,.5],172:[.356,-.089,.667],174:[.709,.175,.947],175:[.59,-.544,.5],176:[.715,-.542,.5],177:[.666,0,.778],180:[.699,-.505,.5],183:[.31,-.19,.278],215:[.491,-.009,.778],240:[.749,.021,.556],247:[.537,.036,.778],305:[.442,0,.278,{sk:.0278}],567:[.442,.205,.306,{sk:.0833}],697:[.56,-.043,.275],710:[.694,-.531,.5],711:[.644,-.513,.5],713:[.59,-.544,.5],714:[.699,-.505,.5],715:[.699,-.505,.5],728:[.694,-.515,.5],729:[.669,-.549,.5],730:[.715,-.542,.5],732:[.668,-.565,.5],768:[.699,-.505,0],769:[.699,-.505,0],770:[.694,-.531,0],771:[.668,-.565,0],772:[.59,-.544,0],774:[.694,-.515,0],775:[.669,-.549,0],776:[.669,-.554,0],778:[.715,-.542,0],779:[.701,-.51,0],780:[.644,-.513,0],824:[.716,.215,0],913:[.716,0,.75],914:[.683,0,.708],915:[.68,0,.625],916:[.716,0,.833],917:[.68,0,.681],918:[.683,0,.611],919:[.683,0,.75],920:[.705,.022,.778],921:[.683,0,.361],922:[.683,0,.778],923:[.716,0,.694],924:[.683,0,.917],925:[.683,0,.75],926:[.677,0,.667],927:[.705,.022,.778],928:[.68,0,.75],929:[.683,0,.681],931:[.683,0,.722],932:[.677,0,.722],933:[.705,0,.778],934:[.683,0,.722],935:[.683,0,.75],936:[.683,0,.778],937:[.704,0,.722],8192:[0,0,.5],8193:[0,0,1],8194:[0,0,.5],8195:[0,0,1],8196:[0,0,.333],8197:[0,0,.25],8198:[0,0,.167],8201:[0,0,.167],8202:[0,0,.1],8203:[0,0,0],8204:[0,0,0],8211:[.285,-.248,.5],8212:[.285,-.248,1],8213:[.285,-.248,1],8214:[.75,.25,.5],8215:[-.025,.062,.5],8216:[.694,-.379,.278],8217:[.694,-.379,.278],8220:[.694,-.379,.5],8221:[.694,-.379,.5],8224:[.705,.216,.444],8225:[.705,.205,.444],8226:[.444,-.055,.5],8230:[.12,0,1.172],8242:[.56,-.043,.275],8243:[.56,0,.55],8244:[.56,0,.825],8245:[.56,-.043,.275],8246:[.56,0,.55],8247:[.56,0,.825],8254:[.59,-.544,.5],8260:[.75,.25,.5],8279:[.56,0,1.1],8288:[0,0,0],8289:[0,0,0],8290:[0,0,0],8291:[0,0,0],8292:[0,0,0],8407:[.714,-.516,.5],8450:[.702,.019,.722],8459:[.717,.036,.969,{ic:.272,sk:.333}],8460:[.666,.133,.72],8461:[.683,0,.778],8462:[.694,.011,.576,{sk:-.0278}],8463:[.695,.013,.54,{ic:.022}],8464:[.717,.017,.809,{ic:.137,sk:.333}],8465:[.686,.026,.554],8466:[.717,.017,.874,{ic:.161,sk:.306}],8467:[.705,.02,.417,{sk:.111}],8469:[.683,.02,.722],8472:[.453,.216,.636,{sk:.111}],8473:[.683,0,.611],8474:[.701,.181,.778],8475:[.717,.017,.85,{ic:.037,sk:.194}],8476:[.686,.026,.828],8477:[.683,0,.722],8484:[.683,0,.667],8486:[.704,0,.722],8487:[.684,.022,.722],8488:[.729,.139,.602],8492:[.708,.028,.908,{ic:.02,sk:.194}],8493:[.685,.024,.613],8496:[.707,.008,.562,{ic:.156,sk:.139}],8497:[.735,.036,.895,{ic:.095,sk:.222}],8498:[.695,0,.556],8499:[.721,.05,1.08,{ic:.136,sk:.444}],8501:[.694,0,.611],8502:[.763,.021,.667,{ic:.02}],8503:[.764,.043,.444],8504:[.764,.043,.667],8513:[.705,.023,.639],8592:[.511,.011,1],8593:[.694,.193,.5],8594:[.511,.011,1],8595:[.694,.194,.5],8596:[.511,.011,1],8597:[.772,.272,.5],8598:[.72,.195,1],8599:[.72,.195,1],8600:[.695,.22,1],8601:[.695,.22,1],8602:[.437,-.06,1],8603:[.437,-.06,1],8606:[.417,-.083,1],8608:[.417,-.083,1],8610:[.417,-.083,1.111],8611:[.417,-.083,1.111],8614:[.511,.011,1],8617:[.511,.011,1.126],8618:[.511,.011,1.126],8619:[.575,.041,1],8620:[.575,.041,1],8621:[.417,-.083,1.389],8622:[.437,-.06,1],8624:[.722,0,.5],8625:[.722,0,.5],8630:[.461,0,1],8631:[.46,0,1],8634:[.65,.083,.778],8635:[.65,.083,.778],8636:[.511,-.23,1],8637:[.27,.011,1],8638:[.694,.194,.417],8639:[.694,.194,.417],8640:[.511,-.23,1],8641:[.27,.011,1],8642:[.694,.194,.417],8643:[.694,.194,.417],8644:[.667,0,1],8646:[.667,0,1],8647:[.583,.083,1],8648:[.694,.193,.833],8649:[.583,.083,1],8650:[.694,.194,.833],8651:[.514,.014,1],8652:[.671,.011,1],8653:[.534,.035,1],8654:[.534,.037,1],8655:[.534,.035,1],8656:[.525,.024,1],8657:[.694,.194,.611],8658:[.525,.024,1],8659:[.694,.194,.611],8660:[.526,.025,1],8661:[.772,.272,.611],8666:[.611,.111,1],8667:[.611,.111,1],8669:[.417,-.083,1],8672:[.437,-.064,1.334],8674:[.437,-.064,1.334],8704:[.694,.022,.556],8705:[.846,.021,.5],8706:[.715,.022,.531,{ic:.035,sk:.0833}],8707:[.694,0,.556],8708:[.716,.215,.556],8709:[.772,.078,.5],8710:[.716,0,.833],8711:[.683,.033,.833],8712:[.54,.04,.667],8713:[.716,.215,.667],8715:[.54,.04,.667],8716:[.716,.215,.667],8717:[.44,0,.429,{ic:.027}],8719:[.75,.25,.944],8720:[.75,.25,.944],8721:[.75,.25,1.056],8722:[.583,.082,.778],8723:[.5,.166,.778],8724:[.766,.093,.778],8725:[.75,.25,.5],8726:[.75,.25,.5],8727:[.465,-.035,.5],8728:[.444,-.055,.5],8729:[.444,-.055,.5],8730:[.8,.2,.833,{ic:.02}],8733:[.442,.011,.778],8734:[.442,.011,1],8736:[.694,0,.722],8737:[.714,.02,.722],8738:[.551,.051,.722],8739:[.75,.249,.278],8740:[.75,.252,.278,{ic:.019}],8741:[.75,.25,.5],8742:[.75,.25,.5,{ic:.018}],8743:[.598,.022,.667],8744:[.598,.022,.667],8745:[.598,.022,.667],8746:[.598,.022,.667],8747:[.716,.216,.417,{ic:.055}],8748:[.805,.306,.819,{ic:.138}],8749:[.805,.306,1.166,{ic:.138}],8750:[.805,.306,.472,{ic:.138}],8756:[.471,.082,.667],8757:[.471,.082,.667],8764:[.367,-.133,.778],8765:[.367,-.133,.778],8768:[.583,.083,.278],8769:[.467,-.032,.778],8770:[.463,-.034,.778],8771:[.464,-.036,.778],8772:[.716,.215,.778],8773:[.589,-.022,.778],8775:[.652,.155,.778],8776:[.483,-.055,.778],8777:[.716,.215,.778],8778:[.579,.039,.778],8781:[.484,-.016,.778],8782:[.492,-.008,.778],8783:[.492,-.133,.778],8784:[.67,-.133,.778],8785:[.609,.108,.778],8786:[.601,.101,.778],8787:[.601,.102,.778],8790:[.367,-.133,.778],8791:[.721,-.133,.778],8796:[.859,-.133,.778],8800:[.716,.215,.778],8801:[.464,-.036,.778],8802:[.716,.215,.778],8804:[.636,.138,.778],8805:[.636,.138,.778],8806:[.753,.175,.778],8807:[.753,.175,.778],8808:[.752,.286,.778],8809:[.752,.286,.778],8810:[.568,.067,1],8811:[.567,.067,1],8812:[.75,.25,.5],8813:[.716,.215,.778],8814:[.708,.209,.778],8815:[.708,.209,.778],8816:[.801,.303,.778],8817:[.801,.303,.778],8818:[.732,.228,.778],8819:[.732,.228,.778],8820:[.732,.228,.778],8821:[.732,.228,.778],8822:[.681,.253,.778],8823:[.681,.253,.778],8824:[.716,.253,.778],8825:[.716,.253,.778],8826:[.539,.041,.778],8827:[.539,.041,.778],8828:[.58,.153,.778],8829:[.58,.154,.778],8830:[.732,.228,.778],8831:[.732,.228,.778],8832:[.705,.208,.778],8833:[.705,.208,.778],8834:[.54,.04,.778],8835:[.54,.04,.778],8836:[.716,.215,.778],8837:[.716,.215,.778],8838:[.636,.138,.778],8839:[.636,.138,.778],8840:[.801,.303,.778],8841:[.801,.303,.778],8842:[.635,.241,.778],8843:[.635,.241,.778],8846:[.598,.022,.667],8847:[.539,.041,.778],8848:[.539,.041,.778],8849:[.636,.138,.778],8850:[.636,.138,.778],8851:[.598,0,.667],8852:[.598,0,.667],8853:[.583,.083,.778],8854:[.583,.083,.778],8855:[.583,.083,.778],8856:[.583,.083,.778],8857:[.583,.083,.778],8858:[.582,.082,.778],8859:[.582,.082,.778],8861:[.582,.082,.778],8862:[.689,0,.778],8863:[.689,0,.778],8864:[.689,0,.778],8865:[.689,0,.778],8866:[.694,0,.611],8867:[.694,0,.611],8868:[.668,0,.778],8869:[.668,0,.778],8872:[.75,.249,.867],8873:[.694,0,.722],8874:[.694,0,.889],8876:[.695,0,.611],8877:[.695,0,.611],8878:[.695,0,.722],8879:[.695,0,.722],8882:[.539,.041,.778],8883:[.539,.041,.778],8884:[.636,.138,.778],8885:[.636,.138,.778],8888:[.408,-.092,1.111],8890:[.431,.212,.556],8891:[.716,0,.611],8892:[.716,0,.611],8896:[.75,.249,.833],8897:[.75,.249,.833],8898:[.75,.249,.833],8899:[.75,.249,.833],8900:[.488,-.012,.5],8901:[.31,-.19,.278],8902:[.486,-.016,.5],8903:[.545,.044,.778],8904:[.505,.005,.9],8905:[.492,-.008,.778],8906:[.492,-.008,.778],8907:[.694,.022,.778],8908:[.694,.022,.778],8909:[.464,-.036,.778],8910:[.578,.021,.76],8911:[.578,.022,.76],8912:[.54,.04,.778],8913:[.54,.04,.778],8914:[.598,.022,.667],8915:[.598,.022,.667],8916:[.736,.022,.667],8918:[.541,.041,.778],8919:[.541,.041,.778],8920:[.568,.067,1.333],8921:[.568,.067,1.333],8922:[.886,.386,.778],8923:[.886,.386,.778],8926:[.734,0,.778],8927:[.734,0,.778],8928:[.801,.303,.778],8929:[.801,.303,.778],8930:[.716,.215,.778],8931:[.716,.215,.778],8934:[.73,.359,.778],8935:[.73,.359,.778],8936:[.73,.359,.778],8937:[.73,.359,.778],8938:[.706,.208,.778],8939:[.706,.208,.778],8940:[.802,.303,.778],8941:[.801,.303,.778],8942:[1.3,.03,.278],8943:[.31,-.19,1.172],8945:[1.52,-.1,1.282],8965:[.716,0,.611],8966:[.813,.097,.611],8968:[.75,.25,.444],8969:[.75,.25,.444],8970:[.75,.25,.444],8971:[.75,.25,.444],8988:[.694,-.306,.5],8989:[.694,-.306,.5],8990:[.366,.022,.5],8991:[.366,.022,.5],8994:[.388,-.122,1],8995:[.378,-.134,1],9001:[.75,.25,.389],9002:[.75,.25,.389],9136:[.744,.244,.412],9137:[.744,.244,.412],9168:[.602,0,.667],9416:[.709,.175,.902],9484:[.694,-.306,.5],9488:[.694,-.306,.5],9492:[.366,.022,.5],9496:[.366,.022,.5],9585:[.694,.195,.889],9586:[.694,.195,.889],9632:[.689,0,.778],9633:[.689,0,.778],9642:[.689,0,.778],9650:[.575,.02,.722],9651:[.716,0,.889],9652:[.575,.02,.722],9653:[.716,0,.889],9654:[.539,.041,.778],9656:[.539,.041,.778],9657:[.505,.005,.5],9660:[.576,.019,.722],9661:[.5,.215,.889],9662:[.576,.019,.722],9663:[.5,.215,.889],9664:[.539,.041,.778],9666:[.539,.041,.778],9667:[.505,.005,.5],9674:[.716,.132,.667],9711:[.715,.215,1],9723:[.689,0,.778],9724:[.689,0,.778],9733:[.694,.111,.944],9824:[.727,.13,.778],9825:[.716,.033,.778],9826:[.727,.162,.778],9827:[.726,.13,.778],9837:[.75,.022,.389],9838:[.734,.223,.389],9839:[.723,.223,.389],10003:[.706,.034,.833],10016:[.716,.022,.833],10072:[.75,.249,.278],10216:[.75,.25,.389],10217:[.75,.25,.389],10222:[.744,.244,.412],10223:[.744,.244,.412],10229:[.511,.011,1.609],10230:[.511,.011,1.638],10231:[.511,.011,1.859],10232:[.525,.024,1.609],10233:[.525,.024,1.638],10234:[.525,.024,1.858],10236:[.511,.011,1.638],10731:[.716,.132,.667],10744:[.716,.215,.778],10752:[.75,.25,1.111],10753:[.75,.25,1.111],10754:[.75,.25,1.111],10756:[.75,.249,.833],10758:[.75,.249,.833],10764:[.805,.306,1.638,{ic:.138}],10799:[.491,-.009,.778],10815:[.683,0,.75],10846:[.813,.097,.611],10877:[.636,.138,.778],10878:[.636,.138,.778],10885:[.762,.29,.778],10886:[.762,.29,.778],10887:[.635,.241,.778],10888:[.635,.241,.778],10889:[.761,.387,.778],10890:[.761,.387,.778],10891:[1.003,.463,.778],10892:[1.003,.463,.778],10901:[.636,.138,.778],10902:[.636,.138,.778],10927:[.636,.138,.778],10928:[.636,.138,.778],10933:[.752,.286,.778],10934:[.752,.286,.778],10935:[.761,.294,.778],10936:[.761,.294,.778],10937:[.761,.337,.778],10938:[.761,.337,.778],10949:[.753,.215,.778],10950:[.753,.215,.778],10955:[.783,.385,.778],10956:[.783,.385,.778],12296:[.75,.25,.389],12297:[.75,.25,.389],57350:[.43,.023,.222,{ic:.018}],57351:[.431,.024,.389,{ic:.018}],57352:[.605,.085,.778],57353:[.434,.006,.667,{ic:.067}],57356:[.752,.284,.778],57357:[.752,.284,.778],57358:[.919,.421,.778],57359:[.801,.303,.778],57360:[.801,.303,.778],57361:[.919,.421,.778],57366:[.828,.33,.778],57367:[.752,.332,.778],57368:[.828,.33,.778],57369:[.752,.333,.778],57370:[.634,.255,.778],57371:[.634,.254,.778],119808:[.698,0,.869],119809:[.686,0,.818],119810:[.697,.011,.831],119811:[.686,0,.882],119812:[.68,0,.756],119813:[.68,0,.724],119814:[.697,.01,.904],119815:[.686,0,.9],119816:[.686,0,.436],119817:[.686,.011,.594],119818:[.686,0,.901],119819:[.686,0,.692],119820:[.686,0,1.092],119821:[.686,0,.9],119822:[.696,.01,.864],119823:[.686,0,.786],119824:[.696,.193,.864],119825:[.686,.011,.862],119826:[.697,.011,.639],119827:[.675,0,.8],119828:[.686,.011,.885],119829:[.686,.007,.869],119830:[.686,.007,1.189],119831:[.686,0,.869],119832:[.686,0,.869],119833:[.686,0,.703],119834:[.453,.006,.559],119835:[.694,.006,.639],119836:[.453,.006,.511],119837:[.694,.006,.639],119838:[.452,.006,.527],119839:[.7,0,.351,{ic:.101}],119840:[.455,.201,.575],119841:[.694,0,.639],119842:[.695,0,.319],119843:[.695,.2,.351],119844:[.694,0,.607],119845:[.694,0,.319],119846:[.45,0,.958],119847:[.45,0,.639],119848:[.452,.005,.575],119849:[.45,.194,.639],119850:[.45,.194,.607],119851:[.45,0,.474],119852:[.453,.006,.454],119853:[.635,.005,.447],119854:[.45,.006,.639],119855:[.444,0,.607],119856:[.444,0,.831],119857:[.444,0,.607],119858:[.444,.2,.607],119859:[.444,0,.511],119860:[.716,0,.75,{sk:.139}],119861:[.683,0,.759,{sk:.0833}],119862:[.705,.022,.715,{ic:.045,sk:.0833}],119863:[.683,0,.828,{sk:.0556}],119864:[.68,0,.738,{ic:.026,sk:.0833}],119865:[.68,0,.643,{ic:.106,sk:.0833}],119866:[.705,.022,.786,{sk:.0833}],119867:[.683,0,.831,{ic:.057,sk:.0556}],119868:[.683,0,.44,{ic:.064,sk:.111}],119869:[.683,.022,.555,{ic:.078,sk:.167}],119870:[.683,0,.849,{ic:.04,sk:.0556}],119871:[.683,0,.681,{sk:.0278}],119872:[.683,0,.97,{ic:.081,sk:.0833}],119873:[.683,0,.803,{ic:.085,sk:.0833}],119874:[.704,.022,.763,{sk:.0833}],119875:[.683,0,.642,{ic:.109,sk:.0833}],119876:[.704,.194,.791,{sk:.0833}],119877:[.683,.021,.759,{sk:.0833}],119878:[.705,.022,.613,{ic:.032,sk:.0833}],119879:[.677,0,.584,{ic:.12,sk:.0833}],119880:[.683,.022,.683,{ic:.084,sk:.0278}],119881:[.683,.022,.583,{ic:.186}],119882:[.683,.022,.944,{ic:.104}],119883:[.683,0,.828,{ic:.024,sk:.0833}],119884:[.683,0,.581,{ic:.182}],119885:[.683,0,.683,{ic:.04,sk:.0833}],119886:[.441,.01,.529],119887:[.694,.011,.429],119888:[.442,.011,.433,{sk:.0556}],119889:[.694,.01,.52,{sk:.167}],119890:[.442,.011,.466,{sk:.0556}],119891:[.705,.205,.49,{ic:.06,sk:.167}],119892:[.442,.205,.477,{sk:.0278}],119894:[.661,.011,.345],119895:[.661,.204,.412],119896:[.694,.011,.521],119897:[.694,.011,.298,{sk:.0833}],119898:[.442,.011,.878],119899:[.442,.011,.6],119900:[.441,.011,.485,{sk:.0556}],119901:[.442,.194,.503,{sk:.0833}],119902:[.442,.194,.446,{ic:.014,sk:.0833}],119903:[.442,.011,.451,{sk:.0556}],119904:[.442,.01,.469,{sk:.0556}],119905:[.626,.011,.361,{sk:.0833}],119906:[.442,.011,.572,{sk:.0278}],119907:[.443,.011,.485,{sk:.0278}],119908:[.443,.011,.716,{sk:.0833}],119909:[.442,.011,.572,{sk:.0278}],119910:[.442,.205,.49,{sk:.0556}],119911:[.442,.011,.465,{sk:.0556}],119912:[.711,0,.869,{sk:.16}],119913:[.686,0,.866,{sk:.0958}],119914:[.703,.017,.817,{ic:.038,sk:.0958}],119915:[.686,0,.938,{sk:.0639}],119916:[.68,0,.81,{ic:.015,sk:.0958}],119917:[.68,0,.689,{ic:.12,sk:.0958}],119918:[.703,.016,.887,{sk:.0958}],119919:[.686,0,.982,{ic:.045,sk:.0639}],119920:[.686,0,.511,{ic:.062,sk:.128}],119921:[.686,.017,.631,{ic:.063,sk:.192}],119922:[.686,0,.971,{ic:.032,sk:.0639}],119923:[.686,0,.756,{sk:.0319}],119924:[.686,0,1.142,{ic:.077,sk:.0958}],119925:[.686,0,.95,{ic:.077,sk:.0958}],119926:[.703,.017,.837,{sk:.0958}],119927:[.686,0,.723,{ic:.124,sk:.0958}],119928:[.703,.194,.869,{sk:.0958}],119929:[.686,.017,.872,{sk:.0958}],119930:[.703,.017,.693,{ic:.021,sk:.0958}],119931:[.675,0,.637,{ic:.135,sk:.0958}],119932:[.686,.016,.8,{ic:.077,sk:.0319}],119933:[.686,.016,.678,{ic:.208}],119934:[.686,.017,1.093,{ic:.114}],119935:[.686,0,.947,{sk:.0958}],119936:[.686,0,.675,{ic:.201}],119937:[.686,0,.773,{ic:.032,sk:.0958}],119938:[.452,.008,.633],119939:[.694,.008,.521],119940:[.451,.008,.513,{sk:.0639}],119941:[.694,.008,.61,{sk:.192}],119942:[.452,.008,.554,{sk:.0639}],119943:[.701,.201,.568,{ic:.056,sk:.192}],119944:[.452,.202,.545,{sk:.0319}],119945:[.694,.008,.668,{sk:-.0319}],119946:[.694,.008,.405],119947:[.694,.202,.471],119948:[.694,.008,.604],119949:[.694,.008,.348,{sk:.0958}],119950:[.452,.008,1.032],119951:[.452,.008,.713],119952:[.452,.008,.585,{sk:.0639}],119953:[.452,.194,.601,{sk:.0958}],119954:[.452,.194,.542,{sk:.0958}],119955:[.452,.008,.529,{sk:.0639}],119956:[.451,.008,.531,{sk:.0639}],119957:[.643,.007,.415,{sk:.0958}],119958:[.452,.008,.681,{sk:.0319}],119959:[.453,.008,.567,{sk:.0319}],119960:[.453,.008,.831,{sk:.0958}],119961:[.452,.008,.659,{sk:.0319}],119962:[.452,.202,.59,{sk:.0639}],119963:[.452,.008,.555,{sk:.0639}],119964:[.717,.008,.803,{ic:.213,sk:.389}],119966:[.728,.026,.666,{ic:.153,sk:.278}],119967:[.708,.031,.774,{ic:.081,sk:.111}],119970:[.717,.037,.61,{ic:.128,sk:.25}],119973:[.717,.314,1.052,{ic:.081,sk:.417}],119974:[.717,.037,.914,{ic:.29,sk:.361}],119977:[.726,.036,.902,{ic:.306,sk:.389}],119978:[.707,.008,.738,{ic:.067,sk:.167}],119979:[.716,.037,1.013,{ic:.018,sk:.222}],119980:[.717,.017,.883,{sk:.278}],119982:[.708,.036,.868,{ic:.148,sk:.333}],119983:[.735,.037,.747,{ic:.249,sk:.222}],119984:[.717,.017,.8,{ic:.16,sk:.25}],119985:[.717,.017,.622,{ic:.228,sk:.222}],119986:[.717,.017,.805,{ic:.221,sk:.25}],119987:[.717,.017,.944,{ic:.187,sk:.278}],119988:[.716,.017,.71,{ic:.249,sk:.194}],119989:[.717,.016,.821,{ic:.211,sk:.306}],120068:[.696,.026,.718],120069:[.691,.027,.884],120071:[.685,.027,.832],120072:[.685,.024,.663],120073:[.686,.153,.611],120074:[.69,.026,.785],120077:[.686,.139,.552],120078:[.68,.027,.668,{ic:.014}],120079:[.686,.026,.666],120080:[.692,.027,1.05],120081:[.686,.025,.832],120082:[.729,.027,.827],120083:[.692,.218,.828],120084:[.729,.069,.827],120086:[.692,.027,.829],120087:[.701,.027,.669],120088:[.697,.027,.646,{ic:.019}],120089:[.686,.026,.831],120090:[.686,.027,1.046],120091:[.688,.027,.719],120092:[.686,.218,.833],120094:[.47,.035,.5],120095:[.685,.031,.513],120096:[.466,.029,.389],120097:[.609,.033,.499],120098:[.467,.03,.401],120099:[.681,.221,.326],120100:[.47,.209,.504],120101:[.688,.205,.521],120102:[.673,.02,.279],120103:[.672,.208,.281],120104:[.689,.025,.389],120105:[.685,.02,.28],120106:[.475,.026,.767],120107:[.475,.022,.527],120108:[.48,.028,.489],120109:[.541,.212,.5],120110:[.479,.219,.489],120111:[.474,.021,.389],120112:[.478,.029,.443],120113:[.64,.02,.333,{ic:.015}],120114:[.474,.023,.517],120115:[.53,.028,.512],120116:[.532,.028,.774],120117:[.472,.188,.389],120118:[.528,.218,.499],120119:[.471,.214,.391],120120:[.701,0,.722],120121:[.683,0,.667],120123:[.683,0,.722],120124:[.683,0,.667],120125:[.683,0,.611],120126:[.702,.019,.778],120128:[.683,0,.389],120129:[.683,.077,.5],120130:[.683,0,.778],120131:[.683,0,.667],120132:[.683,0,.944],120134:[.701,.019,.778],120138:[.702,.012,.556],120139:[.683,0,.667],120140:[.683,.019,.722],120141:[.683,.02,.722],120142:[.683,.019,1],120143:[.683,0,.722],120144:[.683,0,.722],120172:[.686,.031,.847],120173:[.684,.031,1.044],120174:[.676,.032,.723],120175:[.683,.029,.982],120176:[.686,.029,.783],120177:[.684,.146,.722],120178:[.687,.029,.927],120179:[.683,.126,.851],120180:[.681,.025,.655],120181:[.68,.141,.652],120182:[.681,.026,.789,{ic:.017}],120183:[.683,.028,.786],120184:[.683,.032,1.239],120185:[.679,.03,.983],120186:[.726,.03,.976],120187:[.688,.223,.977],120188:[.726,.083,.976],120189:[.688,.028,.978],120190:[.685,.031,.978],120191:[.686,.03,.79,{ic:.012}],120192:[.688,.039,.851,{ic:.02}],120193:[.685,.029,.982],120194:[.683,.03,1.235],120195:[.681,.035,.849],120196:[.688,.214,.984],120197:[.677,.148,.711],120198:[.472,.032,.603],120199:[.69,.032,.59],120200:[.473,.026,.464],120201:[.632,.028,.589],120202:[.471,.027,.472],120203:[.687,.222,.388],120204:[.472,.208,.595],120205:[.687,.207,.615],120206:[.686,.025,.331],120207:[.682,.203,.332],120208:[.682,.025,.464],120209:[.681,.024,.337],120210:[.476,.031,.921],120211:[.473,.028,.654],120212:[.482,.034,.609],120213:[.557,.207,.604],120214:[.485,.211,.596],120215:[.472,.026,.46],120216:[.479,.034,.523],120217:[.648,.027,.393,{ic:.014}],120218:[.472,.032,.589,{ic:.014}],120219:[.546,.027,.604],120220:[.549,.032,.918],120221:[.471,.188,.459],120222:[.557,.221,.589],120223:[.471,.214,.461],120224:[.694,0,.667],120225:[.694,0,.667],120226:[.705,.011,.639],120227:[.694,0,.722],120228:[.691,0,.597],120229:[.691,0,.569],120230:[.704,.011,.667],120231:[.694,0,.708],120232:[.694,0,.278],120233:[.694,.022,.472],120234:[.694,0,.694],120235:[.694,0,.542],120236:[.694,0,.875],120237:[.694,0,.708],120238:[.715,.022,.736],120239:[.694,0,.639],120240:[.715,.125,.736],120241:[.694,0,.646],120242:[.716,.022,.556],120243:[.688,0,.681],120244:[.694,.022,.688],120245:[.694,0,.667],120246:[.694,0,.944],120247:[.694,0,.667],120248:[.694,0,.667],120249:[.694,0,.611],120250:[.46,.01,.481],120251:[.694,.011,.517],120252:[.46,.01,.444],120253:[.694,.01,.517],120254:[.461,.01,.444],120255:[.705,0,.306,{ic:.041}],120256:[.455,.206,.5],120257:[.694,0,.517],120258:[.68,0,.239],120259:[.68,.205,.267],120260:[.694,0,.489],120261:[.694,0,.239],120262:[.455,0,.794],120263:[.455,0,.517],120264:[.46,.01,.5],120265:[.455,.194,.517],120266:[.455,.194,.517],120267:[.455,0,.342],120268:[.46,.01,.383],120269:[.571,.01,.361],120270:[.444,.01,.517],120271:[.444,0,.461],120272:[.444,0,.683],120273:[.444,0,.461],120274:[.444,.204,.461],120275:[.444,0,.435],120276:[.694,0,.733],120277:[.694,0,.733],120278:[.704,.011,.703],120279:[.694,0,.794],120280:[.691,0,.642],120281:[.691,0,.611],120282:[.705,.011,.733],120283:[.694,0,.794],120284:[.694,0,.331],120285:[.694,.022,.519],120286:[.694,0,.764],120287:[.694,0,.581],120288:[.694,0,.978],120289:[.694,0,.794],120290:[.716,.022,.794],120291:[.694,0,.703],120292:[.716,.106,.794],120293:[.694,0,.703],120294:[.716,.022,.611],120295:[.688,0,.733],120296:[.694,.022,.764],120297:[.694,0,.733],120298:[.694,0,1.039],120299:[.694,0,.733],120300:[.694,0,.733],120301:[.694,0,.672],120302:[.475,.011,.525],120303:[.694,.01,.561],120304:[.475,.011,.489],120305:[.694,.011,.561],120306:[.474,.01,.511],120307:[.705,0,.336,{ic:.045}],120308:[.469,.206,.55],120309:[.694,0,.561],120310:[.695,0,.256],120311:[.695,.205,.286],120312:[.694,0,.531],120313:[.694,0,.256],120314:[.469,0,.867],120315:[.468,0,.561],120316:[.474,.011,.55],120317:[.469,.194,.561],120318:[.469,.194,.561],120319:[.469,0,.372],120320:[.474,.01,.422],120321:[.589,.01,.404],120322:[.458,.011,.561],120323:[.458,0,.5],120324:[.458,0,.744],120325:[.458,0,.5],120326:[.458,.205,.5],120327:[.458,0,.476],120328:[.694,0,.667],120329:[.694,0,.667,{ic:.029}],120330:[.705,.01,.639,{ic:.08}],120331:[.694,0,.722,{ic:.025}],120332:[.691,0,.597,{ic:.091}],120333:[.691,0,.569,{ic:.104}],120334:[.705,.011,.667,{ic:.063}],120335:[.694,0,.708,{ic:.06}],120336:[.694,0,.278,{ic:.06}],120337:[.694,.022,.472,{ic:.063}],120338:[.694,0,.694,{ic:.091}],120339:[.694,0,.542],120340:[.694,0,.875,{ic:.054}],120341:[.694,0,.708,{ic:.058}],120342:[.716,.022,.736,{ic:.027}],120343:[.694,0,.639,{ic:.051}],120344:[.716,.125,.736,{ic:.027}],120345:[.694,0,.646,{ic:.052}],120346:[.716,.022,.556,{ic:.053}],120347:[.688,0,.681,{ic:.109}],120348:[.694,.022,.688,{ic:.059}],120349:[.694,0,.667,{ic:.132}],120350:[.694,0,.944,{ic:.132}],120351:[.694,0,.667,{ic:.091}],120352:[.694,0,.667,{ic:.143}],120353:[.694,0,.611,{ic:.091}],120354:[.461,.01,.481],120355:[.694,.011,.517,{ic:.022}],120356:[.46,.011,.444,{ic:.055}],120357:[.694,.01,.517,{ic:.071}],120358:[.46,.011,.444,{ic:.028}],120359:[.705,0,.306,{ic:.188}],120360:[.455,.206,.5,{ic:.068}],120361:[.694,0,.517],120362:[.68,0,.239,{ic:.076}],120363:[.68,.204,.267,{ic:.069}],120364:[.694,0,.489,{ic:.054}],120365:[.694,0,.239,{ic:.072}],120366:[.455,0,.794],120367:[.454,0,.517],120368:[.461,.011,.5,{ic:.023}],120369:[.455,.194,.517,{ic:.021}],120370:[.455,.194,.517,{ic:.021}],120371:[.455,0,.342,{ic:.082}],120372:[.461,.011,.383,{ic:.053}],120373:[.571,.011,.361,{ic:.049}],120374:[.444,.01,.517,{ic:.02}],120375:[.444,0,.461,{ic:.079}],120376:[.444,0,.683,{ic:.079}],120377:[.444,0,.461,{ic:.076}],120378:[.444,.205,.461,{ic:.079}],120379:[.444,0,.435,{ic:.059}],120432:[.623,0,.525],120433:[.611,0,.525],120434:[.622,.011,.525],120435:[.611,0,.525],120436:[.611,0,.525],120437:[.611,0,.525],120438:[.622,.011,.525],120439:[.611,0,.525],120440:[.611,0,.525],120441:[.611,.011,.525],120442:[.611,0,.525],120443:[.611,0,.525],120444:[.611,0,.525],120445:[.611,0,.525],120446:[.621,.01,.525],120447:[.611,0,.525],120448:[.621,.138,.525],120449:[.611,.011,.525],120450:[.622,.011,.525],120451:[.611,0,.525],120452:[.611,.011,.525],120453:[.611,.007,.525],120454:[.611,.007,.525],120455:[.611,0,.525],120456:[.611,0,.525],120457:[.611,0,.525],120458:[.439,.006,.525],120459:[.611,.006,.525],120460:[.44,.006,.525],120461:[.611,.006,.525],120462:[.44,.006,.525],120463:[.617,0,.525],120464:[.442,.229,.525],120465:[.611,0,.525],120466:[.612,0,.525],120467:[.612,.228,.525],120468:[.611,0,.525],120469:[.611,0,.525],120470:[.436,0,.525,{ic:.011}],120471:[.436,0,.525],120472:[.44,.006,.525],120473:[.437,.221,.525],120474:[.437,.221,.525,{ic:.02}],120475:[.437,0,.525],120476:[.44,.006,.525],120477:[.554,.006,.525],120478:[.431,.005,.525],120479:[.431,0,.525],120480:[.431,0,.525],120481:[.431,0,.525],120482:[.431,.228,.525],120483:[.431,0,.525],120488:[.698,0,.869],120489:[.686,0,.818],120490:[.68,0,.692],120491:[.698,0,.958],120492:[.68,0,.756],120493:[.686,0,.703],120494:[.686,0,.9],120495:[.696,.01,.894],120496:[.686,0,.436],120497:[.686,0,.901],120498:[.698,0,.806],120499:[.686,0,1.092],120500:[.686,0,.9],120501:[.675,0,.767],120502:[.696,.01,.864],120503:[.68,0,.9],120504:[.686,0,.786],120506:[.686,0,.831],120507:[.675,0,.8],120508:[.697,0,.894],120509:[.686,0,.831],120510:[.686,0,.869],120511:[.686,0,.894],120512:[.696,0,.831],120513:[.686,.024,.958],120546:[.716,0,.75,{sk:.139}],120547:[.683,0,.759,{sk:.0833}],120548:[.68,0,.615,{ic:.106,sk:.0833}],120549:[.716,0,.833,{sk:.167}],120550:[.68,0,.738,{ic:.026,sk:.0833}],120551:[.683,0,.683,{ic:.04,sk:.0833}],120552:[.683,0,.831,{ic:.057,sk:.0556}],120553:[.704,.022,.763,{sk:.0833}],120554:[.683,0,.44,{ic:.064,sk:.111}],120555:[.683,0,.849,{ic:.04,sk:.0556}],120556:[.716,0,.694,{sk:.167}],120557:[.683,0,.97,{ic:.081,sk:.0833}],120558:[.683,0,.803,{ic:.085,sk:.0833}],120559:[.677,0,.742,{ic:.035,sk:.0833}],120560:[.704,.022,.763,{sk:.0833}],120561:[.68,0,.831,{ic:.056,sk:.0556}],120562:[.683,0,.642,{ic:.109,sk:.0833}],120564:[.683,0,.78,{ic:.026,sk:.0833}],120565:[.677,0,.584,{ic:.12,sk:.0833}],120566:[.705,0,.583,{ic:.117,sk:.0556}],120567:[.683,0,.667,{sk:.0833}],120568:[.683,0,.828,{ic:.024,sk:.0833}],120569:[.683,0,.612,{ic:.08,sk:.0556}],120570:[.704,0,.772,{ic:.014,sk:.0833}],120572:[.442,.011,.64,{sk:.0278}],120573:[.705,.194,.566,{sk:.0833}],120574:[.441,.216,.518,{ic:.025}],120575:[.717,.01,.444,{sk:.0556}],120576:[.452,.022,.466,{sk:.0833}],120577:[.704,.204,.438,{ic:.033,sk:.0833}],120578:[.442,.216,.497,{sk:.0556}],120579:[.705,.01,.469,{sk:.0833}],120580:[.442,.01,.354,{sk:.0556}],120581:[.442,.011,.576],120582:[.694,.012,.583],120583:[.442,.216,.603,{sk:.0278}],120584:[.442,0,.494,{ic:.036,sk:.0278}],120585:[.704,.205,.438,{sk:.111}],120586:[.441,.011,.485,{sk:.0556}],120587:[.431,.011,.57],120588:[.442,.216,.517,{sk:.0833}],120589:[.442,.107,.363,{ic:.042,sk:.0833}],120590:[.431,.011,.571],120591:[.431,.013,.437,{ic:.08,sk:.0278}],120592:[.443,.01,.54,{sk:.0278}],120593:[.442,.218,.654,{sk:.0833}],120594:[.442,.204,.626,{sk:.0556}],120595:[.694,.205,.651,{sk:.111}],120596:[.443,.011,.622],120597:[.715,.022,.531,{ic:.035,sk:.0833}],120598:[.431,.011,.406,{sk:.0556}],120599:[.705,.011,.591,{sk:.0833}],120600:[.434,.006,.667,{ic:.067}],120601:[.694,.205,.596,{sk:.0833}],120602:[.442,.194,.517,{sk:.0833}],120603:[.431,.01,.828],120604:[.711,0,.869,{sk:.16}],120605:[.686,0,.866,{sk:.0958}],120606:[.68,0,.657,{ic:.12,sk:.0958}],120607:[.711,0,.958,{sk:.192}],120608:[.68,0,.81,{ic:.015,sk:.0958}],120609:[.686,0,.773,{ic:.032,sk:.0958}],120610:[.686,0,.982,{ic:.045,sk:.0639}],120611:[.702,.017,.867,{sk:.0958}],120612:[.686,0,.511,{ic:.062,sk:.128}],120613:[.686,0,.971,{ic:.032,sk:.0639}],120614:[.711,0,.806,{sk:.192}],120615:[.686,0,1.142,{ic:.077,sk:.0958}],120616:[.686,0,.95,{ic:.077,sk:.0958}],120617:[.675,0,.841,{ic:.026,sk:.0958}],120618:[.703,.017,.837,{sk:.0958}],120619:[.68,0,.982,{ic:.044,sk:.0639}],120620:[.686,0,.723,{ic:.124,sk:.0958}],120622:[.686,0,.885,{ic:.017,sk:.0958}],120623:[.675,0,.637,{ic:.135,sk:.0958}],120624:[.703,0,.671,{ic:.131,sk:.0639}],120625:[.686,0,.767,{sk:.0958}],120626:[.686,0,.947,{sk:.0958}],120627:[.686,0,.714,{ic:.076,sk:.0639}],120628:[.703,0,.879,{sk:.0958}],120630:[.452,.008,.761,{sk:.0319}],120631:[.701,.194,.66,{sk:.0958}],120632:[.451,.211,.59,{ic:.027}],120633:[.725,.008,.522,{sk:.0639}],120634:[.461,.017,.529,{sk:.0958}],120635:[.711,.202,.508,{ic:.013,sk:.0958}],120636:[.452,.211,.6,{sk:.0639}],120637:[.702,.008,.562,{sk:.0958}],120638:[.452,.008,.412,{sk:.0639}],120639:[.452,.008,.668],120640:[.694,.013,.671],120641:[.452,.211,.708,{sk:.0319}],120642:[.452,0,.577,{ic:.031,sk:.0319}],120643:[.711,.201,.508,{sk:.128}],120644:[.452,.008,.585,{sk:.0639}],120645:[.444,.008,.682],120646:[.451,.211,.612,{sk:.0958}],120647:[.451,.105,.424,{ic:.033,sk:.0958}],120648:[.444,.008,.686],120649:[.444,.013,.521,{ic:.089,sk:.0319}],120650:[.453,.008,.631,{sk:.0319}],120651:[.452,.216,.747,{sk:.0958}],120652:[.452,.201,.718,{sk:.0639}],120653:[.694,.202,.758,{sk:.128}],120654:[.453,.008,.718],120655:[.71,.017,.628,{ic:.029,sk:.0958}],120656:[.444,.007,.483,{sk:.0639}],120657:[.701,.008,.692,{sk:.0958}],120658:[.434,.006,.667,{ic:.067}],120659:[.694,.202,.712,{sk:.0958}],120660:[.451,.194,.612,{sk:.0958}],120661:[.444,.008,.975],120662:[.694,0,.733],120663:[.694,0,.733],120664:[.691,0,.581],120665:[.694,0,.917],120666:[.691,0,.642],120667:[.694,0,.672],120668:[.694,0,.794],120669:[.716,.022,.856],120670:[.694,0,.331],120671:[.694,0,.764],120672:[.694,0,.672],120673:[.694,0,.978],120674:[.694,0,.794],120675:[.688,0,.733],120676:[.716,.022,.794],120677:[.691,0,.794],120678:[.694,0,.703],120680:[.694,0,.794],120681:[.688,0,.733],120682:[.715,0,.856],120683:[.694,0,.794],120684:[.694,0,.733],120685:[.694,0,.856],120686:[.716,0,.794],120782:[.654,.01,.575],120783:[.655,0,.575],120784:[.654,0,.575],120785:[.655,.011,.575],120786:[.656,0,.575],120787:[.655,.011,.575],120788:[.655,.011,.575],120789:[.676,.011,.575],120790:[.654,.011,.575],120791:[.654,.011,.575],120802:[.678,.022,.5],120803:[.678,0,.5],120804:[.677,0,.5],120805:[.678,.022,.5],120806:[.656,0,.5],120807:[.656,.021,.5],120808:[.677,.022,.5],120809:[.656,.011,.5],120810:[.678,.022,.5],120811:[.677,.022,.5],120812:[.715,.022,.55],120813:[.716,0,.55],120814:[.716,0,.55],120815:[.716,.022,.55],120816:[.694,0,.55],120817:[.694,.022,.55],120818:[.716,.022,.55],120819:[.695,.011,.55],120820:[.715,.022,.55],120821:[.716,.022,.55],120822:[.621,.01,.525],120823:[.622,0,.525],120824:[.622,0,.525],120825:[.622,.011,.525],120826:[.624,0,.525],120827:[.611,.01,.525],120828:[.622,.011,.525],120829:[.627,.01,.525],120830:[.621,.01,.525],120831:[.622,.011,.525]}},6949:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.sansSerifBoldItalic=void 0,f.sansSerifBoldItalic={305:[.458,0,.256],567:[.458,.205,.286]}},5193:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.sansSerifBold=void 0,f.sansSerifBold={33:[.694,0,.367],34:[.694,-.442,.558],35:[.694,.193,.917],36:[.75,.056,.55],37:[.75,.056,1.029],38:[.716,.022,.831],39:[.694,-.442,.306],40:[.75,.249,.428],41:[.75,.25,.428],42:[.75,-.293,.55],43:[.617,.116,.856],44:[.146,.106,.306],45:[.273,-.186,.367],46:[.146,0,.306],47:[.75,.249,.55],58:[.458,0,.306],59:[.458,.106,.306],61:[.407,-.094,.856],63:[.705,0,.519],64:[.704,.011,.733],91:[.75,.25,.343],93:[.75,.25,.343],94:[.694,-.537,.55],95:[-.023,.11,.55],126:[.344,-.198,.55],305:[.458,0,.256],567:[.458,.205,.286],768:[.694,-.537,0],769:[.694,-.537,0],770:[.694,-.537,0],771:[.694,-.548,0],772:[.66,-.56,0],774:[.694,-.552,0],775:[.695,-.596,0],776:[.695,-.595,0],778:[.694,-.538,0],779:[.694,-.537,0],780:[.657,-.5,0],8211:[.327,-.24,.55],8212:[.327,-.24,1.1],8213:[.327,-.24,1.1],8215:[-.023,.11,.55],8216:[.694,-.443,.306],8217:[.694,-.442,.306],8220:[.694,-.443,.558],8221:[.694,-.442,.558],8260:[.75,.249,.55],8710:[.694,0,.917]}},2632:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.sansSerifItalic=void 0,f.sansSerifItalic={33:[.694,0,.319,{ic:.036}],34:[.694,-.471,.5],35:[.694,.194,.833,{ic:.018}],36:[.75,.056,.5,{ic:.065}],37:[.75,.056,.833],38:[.716,.022,.758],39:[.694,-.471,.278,{ic:.057}],40:[.75,.25,.389,{ic:.102}],41:[.75,.25,.389],42:[.75,-.306,.5,{ic:.068}],43:[.583,.083,.778],44:[.098,.125,.278],45:[.259,-.186,.333],46:[.098,0,.278],47:[.75,.25,.5,{ic:.1}],48:[.678,.022,.5,{ic:.049}],49:[.678,0,.5],50:[.678,0,.5,{ic:.051}],51:[.678,.022,.5,{ic:.044}],52:[.656,0,.5,{ic:.021}],53:[.656,.022,.5,{ic:.055}],54:[.678,.022,.5,{ic:.048}],55:[.656,.011,.5,{ic:.096}],56:[.678,.022,.5,{ic:.054}],57:[.677,.022,.5,{ic:.045}],58:[.444,0,.278],59:[.444,.125,.278],61:[.37,-.13,.778,{ic:.018}],63:[.704,0,.472,{ic:.064}],64:[.705,.01,.667,{ic:.04}],91:[.75,.25,.289,{ic:.136}],93:[.75,.25,.289,{ic:.064}],94:[.694,-.527,.5,{ic:.033}],95:[-.038,.114,.5,{ic:.065}],126:[.327,-.193,.5,{ic:.06}],305:[.444,0,.239,{ic:.019}],567:[.444,.204,.267,{ic:.019}],768:[.694,-.527,0],769:[.694,-.527,0,{ic:.063}],770:[.694,-.527,0,{ic:.033}],771:[.677,-.543,0,{ic:.06}],772:[.631,-.552,0,{ic:.064}],774:[.694,-.508,0,{ic:.073}],775:[.68,-.576,0],776:[.68,-.582,0,{ic:.04}],778:[.693,-.527,0],779:[.694,-.527,0,{ic:.063}],780:[.654,-.487,0,{ic:.06}],913:[.694,0,.667],914:[.694,0,.667,{ic:.029}],915:[.691,0,.542,{ic:.104}],916:[.694,0,.833],917:[.691,0,.597,{ic:.091}],918:[.694,0,.611,{ic:.091}],919:[.694,0,.708,{ic:.06}],920:[.715,.022,.778,{ic:.026}],921:[.694,0,.278,{ic:.06}],922:[.694,0,.694,{ic:.091}],923:[.694,0,.611],924:[.694,0,.875,{ic:.054}],925:[.694,0,.708,{ic:.058}],926:[.688,0,.667,{ic:.098}],927:[.716,.022,.736,{ic:.027}],928:[.691,0,.708,{ic:.06}],929:[.694,0,.639,{ic:.051}],931:[.694,0,.722,{ic:.091}],932:[.688,0,.681,{ic:.109}],933:[.716,0,.778,{ic:.065}],934:[.694,0,.722,{ic:.021}],935:[.694,0,.667,{ic:.091}],936:[.694,0,.778,{ic:.076}],937:[.716,0,.722,{ic:.047}],8211:[.312,-.236,.5,{ic:.065}],8212:[.312,-.236,1,{ic:.065}],8213:[.312,-.236,1,{ic:.065}],8215:[-.038,.114,.5,{ic:.065}],8216:[.694,-.471,.278,{ic:.058}],8217:[.694,-.471,.278,{ic:.057}],8220:[.694,-.471,.5,{ic:.114}],8221:[.694,-.471,.5],8260:[.75,.25,.5,{ic:.1}],8710:[.694,0,.833]}},4214:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.sansSerif=void 0,f.sansSerif={33:[.694,0,.319],34:[.694,-.471,.5],35:[.694,.194,.833],36:[.75,.056,.5],37:[.75,.056,.833],38:[.716,.022,.758],39:[.694,-.471,.278],40:[.75,.25,.389],41:[.75,.25,.389],42:[.75,-.306,.5],43:[.583,.082,.778],44:[.098,.125,.278],45:[.259,-.186,.333],46:[.098,0,.278],47:[.75,.25,.5],58:[.444,0,.278],59:[.444,.125,.278],61:[.37,-.13,.778],63:[.704,0,.472],64:[.704,.011,.667],91:[.75,.25,.289],93:[.75,.25,.289],94:[.694,-.527,.5],95:[-.038,.114,.5],126:[.327,-.193,.5],305:[.444,0,.239],567:[.444,.205,.267],768:[.694,-.527,0],769:[.694,-.527,0],770:[.694,-.527,0],771:[.677,-.543,0],772:[.631,-.552,0],774:[.694,-.508,0],775:[.68,-.576,0],776:[.68,-.582,0],778:[.694,-.527,0],779:[.694,-.527,0],780:[.654,-.487,0],913:[.694,0,.667],914:[.694,0,.667],915:[.691,0,.542],916:[.694,0,.833],917:[.691,0,.597],918:[.694,0,.611],919:[.694,0,.708],920:[.716,.021,.778],921:[.694,0,.278],922:[.694,0,.694],923:[.694,0,.611],924:[.694,0,.875],925:[.694,0,.708],926:[.688,0,.667],927:[.715,.022,.736],928:[.691,0,.708],929:[.694,0,.639],931:[.694,0,.722],932:[.688,0,.681],933:[.716,0,.778],934:[.694,0,.722],935:[.694,0,.667],936:[.694,0,.778],937:[.716,0,.722],8211:[.312,-.236,.5],8212:[.312,-.236,1],8213:[.312,-.236,1],8215:[-.038,.114,.5],8216:[.694,-.471,.278],8217:[.694,-.471,.278],8220:[.694,-.471,.5],8221:[.694,-.471,.5],8260:[.75,.25,.5],8710:[.694,0,.833]}},6466:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.scriptBold=void 0,f.scriptBold={}},3776:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.script=void 0,f.script={}},7405:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.smallop=void 0,f.smallop={40:[.85,.349,.458],41:[.85,.349,.458],47:[.85,.349,.578],91:[.85,.349,.417],92:[.85,.349,.578],93:[.85,.349,.417],123:[.85,.349,.583],125:[.85,.349,.583],710:[.744,-.551,.556],732:[.722,-.597,.556],770:[.744,-.551,0],771:[.722,-.597,0],8214:[.602,0,.778],8260:[.85,.349,.578],8593:[.6,0,.667],8595:[.6,0,.667],8657:[.599,0,.778],8659:[.6,0,.778],8719:[.75,.25,.944],8720:[.75,.25,.944],8721:[.75,.25,1.056],8730:[.85,.35,1,{ic:.02}],8739:[.627,.015,.333],8741:[.627,.015,.556],8747:[.805,.306,.472,{ic:.138}],8748:[.805,.306,.819,{ic:.138}],8749:[.805,.306,1.166,{ic:.138}],8750:[.805,.306,.472,{ic:.138}],8896:[.75,.249,.833],8897:[.75,.249,.833],8898:[.75,.249,.833],8899:[.75,.249,.833],8968:[.85,.349,.472],8969:[.85,.349,.472],8970:[.85,.349,.472],8971:[.85,.349,.472],9001:[.85,.35,.472],9002:[.85,.35,.472],9168:[.602,0,.667],10072:[.627,.015,.333],10216:[.85,.35,.472],10217:[.85,.35,.472],10752:[.75,.25,1.111],10753:[.75,.25,1.111],10754:[.75,.25,1.111],10756:[.75,.249,.833],10758:[.75,.249,.833],10764:[.805,.306,1.638,{ic:.138}],12296:[.85,.35,.472],12297:[.85,.35,.472]}},8105:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texCalligraphicBold=void 0,f.texCalligraphicBold={65:[.751,.049,.921,{ic:.068,sk:.224}],66:[.705,.017,.748,{sk:.16}],67:[.703,.02,.613,{sk:.16}],68:[.686,0,.892,{sk:.0958}],69:[.703,.016,.607,{ic:.02,sk:.128}],70:[.686,.03,.814,{ic:.116,sk:.128}],71:[.703,.113,.682,{sk:.128}],72:[.686,.048,.987,{sk:.128}],73:[.686,0,.642,{ic:.104,sk:.0319}],74:[.686,.114,.779,{ic:.158,sk:.192}],75:[.703,.017,.871,{sk:.0639}],76:[.703,.017,.788,{sk:.16}],77:[.703,.049,1.378,{sk:.16}],78:[.84,.049,.937,{ic:.168,sk:.0958}],79:[.703,.017,.906,{sk:.128}],80:[.686,.067,.81,{ic:.036,sk:.0958}],81:[.703,.146,.939,{sk:.128}],82:[.686,.017,.99,{sk:.0958}],83:[.703,.016,.696,{ic:.025,sk:.16}],84:[.72,.069,.644,{ic:.303,sk:.0319}],85:[.686,.024,.715,{ic:.056,sk:.0958}],86:[.686,.077,.737,{ic:.037,sk:.0319}],87:[.686,.077,1.169,{ic:.037,sk:.0958}],88:[.686,0,.817,{ic:.089,sk:.16}],89:[.686,.164,.759,{ic:.038,sk:.0958}],90:[.686,0,.818,{ic:.035,sk:.16}],305:[.452,.008,.394,{sk:.0319}],567:[.451,.201,.439,{sk:.0958}]}},2518:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texCalligraphic=void 0,f.texCalligraphic={65:[.728,.05,.798,{ic:.021,sk:.194}],66:[.705,.022,.657,{sk:.139}],67:[.705,.025,.527,{sk:.139}],68:[.683,0,.771,{sk:.0833}],69:[.705,.022,.528,{ic:.036,sk:.111}],70:[.683,.032,.719,{ic:.11,sk:.111}],71:[.704,.119,.595,{sk:.111}],72:[.683,.048,.845,{sk:.111}],73:[.683,0,.545,{ic:.097,sk:.0278}],74:[.683,.119,.678,{ic:.161,sk:.167}],75:[.705,.022,.762,{sk:.0556}],76:[.705,.022,.69,{sk:.139}],77:[.705,.05,1.201,{sk:.139}],78:[.789,.05,.82,{ic:.159,sk:.0833}],79:[.705,.022,.796,{sk:.111}],80:[.683,.057,.696,{ic:.037,sk:.0833}],81:[.705,.131,.817,{sk:.111}],82:[.682,.022,.848,{sk:.0833}],83:[.705,.022,.606,{ic:.036,sk:.139}],84:[.717,.068,.545,{ic:.288,sk:.0278}],85:[.683,.028,.626,{ic:.061,sk:.0833}],86:[.683,.052,.613,{ic:.045,sk:.0278}],87:[.683,.053,.988,{ic:.046,sk:.0833}],88:[.683,0,.713,{ic:.094,sk:.139}],89:[.683,.143,.668,{ic:.046,sk:.0833}],90:[.683,0,.725,{ic:.042,sk:.139}]}},5595:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texMathit=void 0,f.texMathit={65:[.716,0,.743],66:[.683,0,.704],67:[.705,.021,.716],68:[.683,0,.755],69:[.68,0,.678],70:[.68,0,.653],71:[.705,.022,.774],72:[.683,0,.743],73:[.683,0,.386],74:[.683,.021,.525],75:[.683,0,.769],76:[.683,0,.627],77:[.683,0,.897],78:[.683,0,.743],79:[.704,.022,.767],80:[.683,0,.678],81:[.704,.194,.767],82:[.683,.022,.729],83:[.705,.022,.562],84:[.677,0,.716],85:[.683,.022,.743],86:[.683,.022,.743],87:[.683,.022,.999],88:[.683,0,.743],89:[.683,0,.743],90:[.683,0,.613],97:[.442,.011,.511],98:[.694,.011,.46],99:[.441,.01,.46],100:[.694,.011,.511],101:[.442,.01,.46],102:[.705,.204,.307],103:[.442,.205,.46],104:[.694,.011,.511],105:[.656,.01,.307],106:[.656,.204,.307],107:[.694,.011,.46],108:[.694,.011,.256],109:[.442,.011,.818],110:[.442,.011,.562],111:[.442,.011,.511],112:[.442,.194,.511],113:[.442,.194,.46],114:[.442,.011,.422],115:[.442,.011,.409],116:[.626,.011,.332],117:[.441,.011,.537],118:[.443,.01,.46],119:[.443,.011,.664],120:[.442,.011,.464],121:[.441,.205,.486],122:[.442,.011,.409]}},6357:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texOldstyleBold=void 0,f.texOldstyleBold={48:[.46,.017,.575],49:[.461,0,.575],50:[.46,0,.575],51:[.461,.211,.575],52:[.469,.194,.575],53:[.461,.211,.575],54:[.66,.017,.575],55:[.476,.211,.575],56:[.661,.017,.575],57:[.461,.21,.575],65:[.751,.049,.921,{ic:.068,sk:.224}],66:[.705,.017,.748,{sk:.16}],67:[.703,.02,.613,{sk:.16}],68:[.686,0,.892,{sk:.0958}],69:[.703,.016,.607,{ic:.02,sk:.128}],70:[.686,.03,.814,{ic:.116,sk:.128}],71:[.703,.113,.682,{sk:.128}],72:[.686,.048,.987,{sk:.128}],73:[.686,0,.642,{ic:.104,sk:.0319}],74:[.686,.114,.779,{ic:.158,sk:.192}],75:[.703,.017,.871,{sk:.0639}],76:[.703,.017,.788,{sk:.16}],77:[.703,.049,1.378,{sk:.16}],78:[.84,.049,.937,{ic:.168,sk:.0958}],79:[.703,.017,.906,{sk:.128}],80:[.686,.067,.81,{ic:.036,sk:.0958}],81:[.703,.146,.939,{sk:.128}],82:[.686,.017,.99,{sk:.0958}],83:[.703,.016,.696,{ic:.025,sk:.16}],84:[.72,.069,.644,{ic:.303,sk:.0319}],85:[.686,.024,.715,{ic:.056,sk:.0958}],86:[.686,.077,.737,{ic:.037,sk:.0319}],87:[.686,.077,1.169,{ic:.037,sk:.0958}],88:[.686,0,.817,{ic:.089,sk:.16}],89:[.686,.164,.759,{ic:.038,sk:.0958}],90:[.686,0,.818,{ic:.035,sk:.16}]}},9474:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texOldstyle=void 0,f.texOldstyle={48:[.452,.022,.5],49:[.453,0,.5],50:[.453,0,.5],51:[.452,.216,.5],52:[.464,.194,.5],53:[.453,.216,.5],54:[.665,.022,.5],55:[.463,.216,.5],56:[.666,.021,.5],57:[.453,.216,.5],65:[.728,.05,.798,{ic:.021,sk:.194}],66:[.705,.022,.657,{sk:.139}],67:[.705,.025,.527,{sk:.139}],68:[.683,0,.771,{sk:.0833}],69:[.705,.022,.528,{ic:.036,sk:.111}],70:[.683,.032,.719,{ic:.11,sk:.111}],71:[.704,.119,.595,{sk:.111}],72:[.683,.048,.845,{sk:.111}],73:[.683,0,.545,{ic:.097,sk:.0278}],74:[.683,.119,.678,{ic:.161,sk:.167}],75:[.705,.022,.762,{sk:.0556}],76:[.705,.022,.69,{sk:.139}],77:[.705,.05,1.201,{sk:.139}],78:[.789,.05,.82,{ic:.159,sk:.0833}],79:[.705,.022,.796,{sk:.111}],80:[.683,.057,.696,{ic:.037,sk:.0833}],81:[.705,.131,.817,{sk:.111}],82:[.682,.022,.848,{sk:.0833}],83:[.705,.022,.606,{ic:.036,sk:.139}],84:[.717,.068,.545,{ic:.288,sk:.0278}],85:[.683,.028,.626,{ic:.061,sk:.0833}],86:[.683,.052,.613,{ic:.045,sk:.0278}],87:[.683,.053,.988,{ic:.046,sk:.0833}],88:[.683,0,.713,{ic:.094,sk:.139}],89:[.683,.143,.668,{ic:.046,sk:.0833}],90:[.683,0,.725,{ic:.042,sk:.139}]}},584:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texSize3=void 0,f.texSize3={40:[1.45,.949,.736],41:[1.45,.949,.736],47:[1.45,.949,1.044],91:[1.45,.949,.528],92:[1.45,.949,1.044],93:[1.45,.949,.528],123:[1.45,.949,.75],125:[1.45,.949,.75],710:[.772,-.564,1.444],732:[.749,-.61,1.444],770:[.772,-.564,0],771:[.749,-.61,0],8260:[1.45,.949,1.044],8730:[1.45,.95,1,{ic:.02}],8968:[1.45,.949,.583],8969:[1.45,.949,.583],8970:[1.45,.949,.583],8971:[1.45,.949,.583],9001:[1.45,.95,.75],9002:[1.45,.949,.75],10216:[1.45,.95,.75],10217:[1.45,.949,.75],12296:[1.45,.95,.75],12297:[1.45,.949,.75]}},4324:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texSize4=void 0,f.texSize4={40:[1.75,1.249,.792],41:[1.75,1.249,.792],47:[1.75,1.249,1.278],91:[1.75,1.249,.583],92:[1.75,1.249,1.278],93:[1.75,1.249,.583],123:[1.75,1.249,.806],125:[1.75,1.249,.806],710:[.845,-.561,1.889,{ic:.013}],732:[.823,-.583,1.889],770:[.845,-.561,0,{ic:.013}],771:[.823,-.583,0],8260:[1.75,1.249,1.278],8730:[1.75,1.25,1,{ic:.02}],8968:[1.75,1.249,.639],8969:[1.75,1.249,.639],8970:[1.75,1.249,.639],8971:[1.75,1.249,.639],9001:[1.75,1.248,.806],9002:[1.75,1.248,.806],9115:[1.154,.655,.875],9116:[.61,.01,.875],9117:[1.165,.644,.875],9118:[1.154,.655,.875],9119:[.61,.01,.875],9120:[1.165,.644,.875],9121:[1.154,.645,.667],9122:[.602,0,.667],9123:[1.155,.644,.667],9124:[1.154,.645,.667],9125:[.602,0,.667],9126:[1.155,.644,.667],9127:[.899,.01,.889],9128:[1.16,.66,.889],9129:[.01,.899,.889],9130:[.29,.015,.889],9131:[.899,.01,.889],9132:[1.16,.66,.889],9133:[.01,.899,.889],9143:[.935,.885,1.056],10216:[1.75,1.248,.806],10217:[1.75,1.248,.806],12296:[1.75,1.248,.806],12297:[1.75,1.248,.806],57344:[.625,.014,1.056],57345:[.605,.014,1.056,{ic:.02}],57680:[.12,.213,.45,{ic:.01}],57681:[.12,.213,.45,{ic:.024}],57682:[.333,0,.45,{ic:.01}],57683:[.333,0,.45,{ic:.024}],57684:[.32,.2,.4,{ic:.01}],57685:[.333,0,.9,{ic:.01}],57686:[.12,.213,.9,{ic:.01}]}},8135:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.texVariant=void 0,f.texVariant={710:[.845,-.561,2.333,{ic:.013}],732:[.899,-.628,2.333],770:[.845,-.561,0,{ic:.013}],771:[.899,-.628,0],1008:[.434,.006,.667,{ic:.067}],8463:[.695,.013,.54,{ic:.022}],8592:[.437,-.064,.5],8594:[.437,-.064,.5],8652:[.514,.014,1],8708:[.86,.166,.556],8709:[.587,0,.778],8722:[.27,-.23,.5],8726:[.43,.023,.778],8733:[.472,-.028,.778],8739:[.43,.023,.222],8740:[.43,.023,.222,{ic:.018}],8741:[.431,.023,.389],8742:[.431,.024,.389,{ic:.018}],8764:[.365,-.132,.778],8776:[.481,-.05,.778],8808:[.752,.284,.778],8809:[.752,.284,.778],8816:[.919,.421,.778],8817:[.919,.421,.778],8840:[.828,.33,.778],8841:[.828,.33,.778],8842:[.634,.255,.778],8843:[.634,.254,.778],8872:[.694,0,.611],8901:[.189,0,.278],8994:[.378,-.122,.778],8995:[.378,-.143,.778],9651:[.575,.02,.722],9661:[.576,.019,.722],10887:[.801,.303,.778],10888:[.801,.303,.778],10955:[.752,.332,.778],10956:[.752,.333,.778]}},8955:function(c,f){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,f.PV=MathJax._.components.global.combineDefaults,f.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},5074:function(c,f){MathJax._.util.Options.isObject,MathJax._.util.Options.APPEND,MathJax._.util.Options.REMOVE,MathJax._.util.Options.OPTIONS,MathJax._.util.Options.Expandable,MathJax._.util.Options.expandable,MathJax._.util.Options.makeArray,MathJax._.util.Options.keys,MathJax._.util.Options.copy,MathJax._.util.Options.insert,MathJax._.util.Options.defaultOptions,MathJax._.util.Options.userOptions,MathJax._.util.Options.selectOptions,f.Pp=MathJax._.util.Options.selectOptionsFromKeys,MathJax._.util.Options.separateOptions,MathJax._.util.Options.lookup},73:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.CHTMLFontData=MathJax._.output.chtml.FontData.CHTMLFontData,f.AddCSS=MathJax._.output.chtml.FontData.AddCSS},4228:function(c,f){Object.defineProperty(f,\"__esModule\",{value:!0}),f.enum=MathJax._.output.common.FontData.enum,f.V=MathJax._.output.common.FontData.V,f.H=MathJax._.output.common.FontData.H,f.NOSTRETCH=MathJax._.output.common.FontData.NOSTRETCH,f.FontData=MathJax._.output.common.FontData.FontData},4629:function(c,f){MathJax._.components.package.PackageError,f.GL=MathJax._.components.package.Package}},f={};function i(t){var e=f[t];if(void 0!==e)return e.exports;var s=f[t]={exports:{}};return c[t].call(s.exports,s,s.exports,i),s.exports}!function(){var c=i(8955),f=i(8667),t=i(2308),e=i(7841),s=i(5031),r=i(9236),o=i(1937),a=i(4244),S=i(482),l=i(196),n=i(527),B=i(3518),d=i(965),u=i(9169),k=i(6736),I=i(8787),A=i(5392),p=i(6590),m=i(8798),h=i(2138),M=i(3869),x=i(7557),H=i(7481),_=i(5674),E=i(7002),y=i(9349),R=i(9741),v=i(2827),D=i(2970),b=i(1668),T=i(6949),X=i(5193),O=i(2632),F=i(4214),C=i(6466),W=i(3776),J=i(7405),j=i(8105),z=i(2518),V=i(5595),P=i(6357),g=i(9474),w=i(584),Z=i(4324),L=i(8135);MathJax.loader&&MathJax.loader.checkVersion(\"output/chtml/fonts/tex\",f.q,\"chtml-font\"),(0,c.r8)({_:{output:{chtml:{fonts:{tex_ts:t,tex:{\"bold-italic\":e,bold:s,\"fraktur-bold\":r,fraktur:o,italic:a,largeop:S,monospace:l,normal:n,\"sans-serif-bold-italic\":B,\"sans-serif-bold\":d,\"sans-serif-italic\":u,\"sans-serif\":k,smallop:I,\"tex-calligraphic-bold\":A,\"tex-size3\":p,\"tex-size4\":m,\"tex-variant\":h}}},common:{fonts:{tex:{\"bold-italic\":M,bold:x,delimiters:H,\"double-struck\":_,\"fraktur-bold\":E,fraktur:y,italic:R,largeop:v,monospace:D,normal:b,\"sans-serif-bold-italic\":T,\"sans-serif-bold\":X,\"sans-serif-italic\":O,\"sans-serif\":F,\"script-bold\":C,script:W,smallop:J,\"tex-calligraphic-bold\":j,\"tex-calligraphic\":z,\"tex-mathit\":V,\"tex-oldstyle-bold\":P,\"tex-oldstyle\":g,\"tex-size3\":w,\"tex-size4\":Z,\"tex-variant\":L}}}}}});var U=i(4629),N=i(5074);if(MathJax.startup){(0,c.PV)(MathJax.config,\"chtml\",{fontURL:U.GL.resolvePath(\"output/chtml/fonts/woff-v2\",!1)});var K=(0,N.Pp)(MathJax.config.chtml||{},t.TeXFont.OPTIONS);(0,c.PV)(MathJax.config,\"chtml\",{font:new t.TeXFont(K)})}}()}();"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/output/chtml.js",
    "content": "!function(){\"use strict\";var t,e,r,o,n,i,a,s,l,c,h,u,p,d,f,m,y,v,b,g,x,M,_,w,j,C,O,S,T,B,L,P,A,H,k,N,D,E,W,R,I,F,J,V,z,U,X,q,K,Q,G,Y,Z,$,tt,et,rt,ot,nt,it,at,st,lt,ct,ht,ut,pt={7306:function(t,e){e.q=void 0,e.q=\"3.2.2\"},7016:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},i.apply(this,arguments)},a=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),s=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),l=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&a(e,t,r);return s(e,t),e},c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTML=void 0;var h=r(716),u=r(5888),p=r(4477),d=r(7427),f=r(4142),m=l(r(6914)),y=r(6720),v=function(t){function e(e){void 0===e&&(e=null);var r=t.call(this,e,p.CHTMLWrapperFactory,f.TeXFont)||this;return r.chtmlStyles=null,r.font.adaptiveCSS(r.options.adaptiveCSS),r.wrapperUsage=new d.Usage,r}return n(e,t),e.prototype.escaped=function(t,e){return this.setDocument(e),this.html(\"span\",{},[this.text(t.math)])},e.prototype.styleSheet=function(r){if(this.chtmlStyles){if(this.options.adaptiveCSS){var o=new u.CssStyles;this.addWrapperStyles(o),this.updateFontStyles(o),this.adaptor.insertRules(this.chtmlStyles,o.getStyleRules())}return this.chtmlStyles}var n=this.chtmlStyles=t.prototype.styleSheet.call(this,r);return this.adaptor.setAttribute(n,\"id\",e.STYLESHEETID),this.wrapperUsage.update(),n},e.prototype.updateFontStyles=function(t){t.addStyles(this.font.updateStyles({}))},e.prototype.addWrapperStyles=function(e){var r,o;if(this.options.adaptiveCSS)try{for(var n=c(this.wrapperUsage.update()),i=n.next();!i.done;i=n.next()){var a=i.value,s=this.factory.getNodeClass(a);s&&this.addClassStyles(s,e)}}catch(t){r={error:t}}finally{try{i&&!i.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}else t.prototype.addWrapperStyles.call(this,e)},e.prototype.addClassStyles=function(e,r){var o,n=e;n.autoStyle&&\"unknown\"!==n.kind&&r.addStyles(((o={})[\"mjx-\"+n.kind]={display:\"inline-block\",\"text-align\":\"left\"},o)),this.wrapperUsage.add(n.kind),t.prototype.addClassStyles.call(this,e,r)},e.prototype.processMath=function(t,e){this.factory.wrap(t).toCHTML(e)},e.prototype.clearCache=function(){this.cssStyles.clear(),this.font.clearCache(),this.wrapperUsage.clear(),this.chtmlStyles=null},e.prototype.reset=function(){this.clearCache()},e.prototype.unknownText=function(t,e,r){void 0===r&&(r=null);var o={},n=100/this.math.metrics.scale;if(100!==n&&(o[\"font-size\"]=this.fixed(n,1)+\"%\",o.padding=m.em(75/n)+\" 0 \"+m.em(20/n)+\" 0\"),\"-explicitFont\"!==e){var i=(0,y.unicodeChars)(t);(1!==i.length||i[0]<119808||i[0]>120831)&&this.cssFontStyles(this.font.getCssFont(e),o)}if(null!==r){var a=this.math.metrics;o.width=Math.round(r*a.em*a.scale)+\"px\"}return this.html(\"mjx-utext\",{variant:e,style:o},[this.text(t)])},e.prototype.measureTextNode=function(t){var e=this.adaptor,r=e.clone(t);e.setStyle(r,\"font-family\",e.getStyle(r,\"font-family\").replace(/MJXZERO, /g,\"\"));var o=this.html(\"mjx-measure-text\",{style:{position:\"absolute\",\"white-space\":\"nowrap\"}},[r]);e.append(e.parent(this.math.start.node),this.container),e.append(this.container,o);var n=e.nodeSize(r,this.math.metrics.em)[0]/this.math.metrics.scale;return e.remove(this.container),e.remove(o),{w:n,h:.75,d:.2}},e.NAME=\"CHTML\",e.OPTIONS=i(i({},h.CommonOutputJax.OPTIONS),{adaptiveCSS:!0,matchFontHeight:!0}),e.commonStyles={'mjx-container[jax=\"CHTML\"]':{\"line-height\":0},'mjx-container [space=\"1\"]':{\"margin-left\":\".111em\"},'mjx-container [space=\"2\"]':{\"margin-left\":\".167em\"},'mjx-container [space=\"3\"]':{\"margin-left\":\".222em\"},'mjx-container [space=\"4\"]':{\"margin-left\":\".278em\"},'mjx-container [space=\"5\"]':{\"margin-left\":\".333em\"},'mjx-container [rspace=\"1\"]':{\"margin-right\":\".111em\"},'mjx-container [rspace=\"2\"]':{\"margin-right\":\".167em\"},'mjx-container [rspace=\"3\"]':{\"margin-right\":\".222em\"},'mjx-container [rspace=\"4\"]':{\"margin-right\":\".278em\"},'mjx-container [rspace=\"5\"]':{\"margin-right\":\".333em\"},'mjx-container [size=\"s\"]':{\"font-size\":\"70.7%\"},'mjx-container [size=\"ss\"]':{\"font-size\":\"50%\"},'mjx-container [size=\"Tn\"]':{\"font-size\":\"60%\"},'mjx-container [size=\"sm\"]':{\"font-size\":\"85%\"},'mjx-container [size=\"lg\"]':{\"font-size\":\"120%\"},'mjx-container [size=\"Lg\"]':{\"font-size\":\"144%\"},'mjx-container [size=\"LG\"]':{\"font-size\":\"173%\"},'mjx-container [size=\"hg\"]':{\"font-size\":\"207%\"},'mjx-container [size=\"HG\"]':{\"font-size\":\"249%\"},'mjx-container [width=\"full\"]':{width:\"100%\"},\"mjx-box\":{display:\"inline-block\"},\"mjx-block\":{display:\"block\"},\"mjx-itable\":{display:\"inline-table\"},\"mjx-row\":{display:\"table-row\"},\"mjx-row > *\":{display:\"table-cell\"},\"mjx-mtext\":{display:\"inline-block\"},\"mjx-mstyle\":{display:\"inline-block\"},\"mjx-merror\":{display:\"inline-block\",color:\"red\",\"background-color\":\"yellow\"},\"mjx-mphantom\":{visibility:\"hidden\"},\"_::-webkit-full-page-media, _:future, :root mjx-container\":{\"will-change\":\"opacity\"}},e.STYLESHEETID=\"MJX-CHTML-styles\",e}(h.CommonOutputJax);e.CHTML=v},2098:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},i.apply(this,arguments)},a=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),s=this&&this.__exportStar||function(t,e){for(var r in t)\"default\"===r||Object.prototype.hasOwnProperty.call(e,r)||a(e,t,r)},l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},c=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AddCSS=e.CHTMLFontData=void 0;var h=r(9250),u=r(7427),p=r(6914);s(r(9250),e);var d=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.charUsage=new u.Usage,e.delimUsage=new u.Usage,e}return n(e,t),e.charOptions=function(e,r){return t.charOptions.call(this,e,r)},e.prototype.adaptiveCSS=function(t){this.options.adaptiveCSS=t},e.prototype.clearCache=function(){this.options.adaptiveCSS&&(this.charUsage.clear(),this.delimUsage.clear())},e.prototype.createVariant=function(e,r,o){void 0===r&&(r=null),void 0===o&&(o=null),t.prototype.createVariant.call(this,e,r,o);var n=this.constructor;this.variant[e].classes=n.defaultVariantClasses[e],this.variant[e].letter=n.defaultVariantLetters[e]},e.prototype.defineChars=function(r,o){var n,i;t.prototype.defineChars.call(this,r,o);var a=this.variant[r].letter;try{for(var s=l(Object.keys(o)),c=s.next();!c.done;c=s.next()){var h=c.value,u=e.charOptions(o,parseInt(h));void 0===u.f&&(u.f=a)}}catch(t){n={error:t}}finally{try{c&&!c.done&&(i=s.return)&&i.call(s)}finally{if(n)throw n.error}}},Object.defineProperty(e.prototype,\"styles\",{get:function(){var t=this.constructor,e=i({},t.defaultStyles);return this.addFontURLs(e,t.defaultFonts,this.options.fontURL),this.options.adaptiveCSS?this.updateStyles(e):this.allStyles(e),e},enumerable:!1,configurable:!0}),e.prototype.updateStyles=function(t){var e,r,o,n;try{for(var i=l(this.delimUsage.update()),a=i.next();!a.done;a=i.next()){var s=a.value;this.addDelimiterStyles(t,s,this.delimiters[s])}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}try{for(var h=l(this.charUsage.update()),u=h.next();!u.done;u=h.next()){var p=c(u.value,2),d=p[0],f=(s=p[1],this.variant[d]);this.addCharStyles(t,f.letter,s,f.chars[s])}}catch(t){o={error:t}}finally{try{u&&!u.done&&(n=h.return)&&n.call(h)}finally{if(o)throw o.error}}return t},e.prototype.allStyles=function(t){var e,r,o,n,i,a;try{for(var s=l(Object.keys(this.delimiters)),c=s.next();!c.done;c=s.next()){var h=c.value,u=parseInt(h);this.addDelimiterStyles(t,u,this.delimiters[u])}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}try{for(var p=l(Object.keys(this.variant)),d=p.next();!d.done;d=p.next()){var f=d.value,m=this.variant[f],y=m.letter;try{for(var v=(i=void 0,l(Object.keys(m.chars))),b=v.next();!b.done;b=v.next()){h=b.value,u=parseInt(h);var g=m.chars[u];(g[3]||{}).smp||(g.length<4&&(g[3]={}),this.addCharStyles(t,y,u,g))}}catch(t){i={error:t}}finally{try{b&&!b.done&&(a=v.return)&&a.call(v)}finally{if(i)throw i.error}}}}catch(t){o={error:t}}finally{try{d&&!d.done&&(n=p.return)&&n.call(p)}finally{if(o)throw o.error}}},e.prototype.addFontURLs=function(t,e,r){var o,n;try{for(var a=l(Object.keys(e)),s=a.next();!s.done;s=a.next()){var c=s.value,h=i({},e[c]);h.src=h.src.replace(/%%URL%%/,r),t[c]=h}}catch(t){o={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}},e.prototype.addDelimiterStyles=function(t,e,r){var o=this.charSelector(e);r.c&&r.c!==e&&(t[\".mjx-stretched mjx-c\"+(o=this.charSelector(r.c))+\"::before\"]={content:this.charContent(r.c)}),r.stretch&&(1===r.dir?this.addDelimiterVStyles(t,o,r):this.addDelimiterHStyles(t,o,r))},e.prototype.addDelimiterVStyles=function(t,e,r){var o=r.HDW,n=c(r.stretch,4),i=n[0],a=n[1],s=n[2],l=n[3],h=this.addDelimiterVPart(t,e,\"beg\",i,o);this.addDelimiterVPart(t,e,\"ext\",a,o);var u=this.addDelimiterVPart(t,e,\"end\",s,o),p={};if(l){var d=this.addDelimiterVPart(t,e,\"mid\",l,o);p.height=\"50%\",t[\"mjx-stretchy-v\"+e+\" > mjx-mid\"]={\"margin-top\":this.em(-d/2),\"margin-bottom\":this.em(-d/2)}}h&&(p[\"border-top-width\"]=this.em0(h-.03)),u&&(p[\"border-bottom-width\"]=this.em0(u-.03),t[\"mjx-stretchy-v\"+e+\" > mjx-end\"]={\"margin-top\":this.em(-u)}),Object.keys(p).length&&(t[\"mjx-stretchy-v\"+e+\" > mjx-ext\"]=p)},e.prototype.addDelimiterVPart=function(t,e,r,o,n){if(!o)return 0;var i=this.getDelimiterData(o),a=(n[2]-i[2])/2,s={content:this.charContent(o)};return\"ext\"!==r?s.padding=this.padding(i,a):(s.width=this.em0(n[2]),a&&(s[\"padding-left\"]=this.em0(a))),t[\"mjx-stretchy-v\"+e+\" mjx-\"+r+\" mjx-c::before\"]=s,i[0]+i[1]},e.prototype.addDelimiterHStyles=function(t,e,r){var o=c(r.stretch,4),n=o[0],i=o[1],a=o[2],s=o[3],l=r.HDW;this.addDelimiterHPart(t,e,\"beg\",n,l),this.addDelimiterHPart(t,e,\"ext\",i,l),this.addDelimiterHPart(t,e,\"end\",a,l),s&&(this.addDelimiterHPart(t,e,\"mid\",s,l),t[\"mjx-stretchy-h\"+e+\" > mjx-ext\"]={width:\"50%\"})},e.prototype.addDelimiterHPart=function(t,e,r,o,n){if(o){var i=this.getDelimiterData(o)[3],a={content:i&&i.c?'\"'+i.c+'\"':this.charContent(o)};a.padding=this.padding(n,0,-n[2]),t[\"mjx-stretchy-h\"+e+\" mjx-\"+r+\" mjx-c::before\"]=a}},e.prototype.addCharStyles=function(t,e,r,o){var n=o[3],i=void 0!==n.f?n.f:e;t[\"mjx-c\"+this.charSelector(r)+(i?\".TEX-\"+i:\"\")+\"::before\"]={padding:this.padding(o,0,n.ic||0),content:null!=n.c?'\"'+n.c+'\"':this.charContent(r)}},e.prototype.getDelimiterData=function(t){return this.getChar(\"-smallop\",t)},e.prototype.em=function(t){return(0,p.em)(t)},e.prototype.em0=function(t){return(0,p.em)(Math.max(0,t))},e.prototype.padding=function(t,e,r){var o=c(t,3),n=o[0],i=o[1];return void 0===e&&(e=0),void 0===r&&(r=0),[n,o[2]+r,i,e].map(this.em0).join(\" \")},e.prototype.charContent=function(t){return'\"'+(t>=32&&t<=126&&34!==t&&39!==t&&92!==t?String.fromCharCode(t):\"\\\\\"+t.toString(16).toUpperCase())+'\"'},e.prototype.charSelector=function(t){return\".mjx-c\"+t.toString(16).toUpperCase()},e.OPTIONS=i(i({},h.FontData.OPTIONS),{fontURL:\"js/output/chtml/fonts/tex-woff-v2\"}),e.JAX=\"CHTML\",e.defaultVariantClasses={},e.defaultVariantLetters={},e.defaultStyles={\"mjx-c::before\":{display:\"block\",width:0}},e.defaultFonts={\"@font-face /* 0 */\":{\"font-family\":\"MJXZERO\",src:'url(\"%%URL%%/MathJax_Zero.woff\") format(\"woff\")'}},e}(h.FontData);e.CHTMLFontData=d,e.AddCSS=function(t,e){var r,o;try{for(var n=l(Object.keys(e)),i=n.next();!i.done;i=n.next()){var a=i.value,s=parseInt(a);Object.assign(h.FontData.charOptions(t,s),e[s])}}catch(t){r={error:t}}finally{try{i&&!i.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}return t}},4458:function(t,e,r){var o=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),n=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&o(e,t,r);return n(e,t),e},a=this&&this.__exportStar||function(t,e){for(var r in t)\"default\"===r||Object.prototype.hasOwnProperty.call(e,r)||o(e,t,r)},s=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.Arrow=e.DiagonalArrow=e.DiagonalStrike=e.Border2=e.Border=e.RenderElement=void 0;var l=i(r(5373));a(r(5373),e);e.RenderElement=function(t,e){return void 0===e&&(e=\"\"),function(r,o){var n=r.adjustBorder(r.html(\"mjx-\"+t));if(e){var i=r.getOffset(e);if(r.thickness!==l.THICKNESS||i){var a=\"translate\".concat(e,\"(\").concat(r.em(r.thickness/2-i),\")\");r.adaptor.setStyle(n,\"transform\",a)}}r.adaptor.append(r.chtml,n)}};e.Border=function(t){return l.CommonBorder((function(e,r){e.adaptor.setStyle(r,\"border-\"+t,e.em(e.thickness)+\" solid\")}))(t)};e.Border2=function(t,e,r){return l.CommonBorder2((function(t,o){var n=t.em(t.thickness)+\" solid\";t.adaptor.setStyle(o,\"border-\"+e,n),t.adaptor.setStyle(o,\"border-\"+r,n)}))(t,e,r)};e.DiagonalStrike=function(t,e){return l.CommonDiagonalStrike((function(t){return function(r,o){var n=r.getBBox(),i=n.w,a=n.h,l=n.d,c=s(r.getArgMod(i,a+l),2),h=c[0],u=c[1],p=e*r.thickness/2,d=r.adjustBorder(r.html(t,{style:{width:r.em(u),transform:\"rotate(\"+r.fixed(-e*h)+\"rad) translateY(\"+p+\"em)\"}}));r.adaptor.append(r.chtml,d)}}))(t)};e.DiagonalArrow=function(t){return l.CommonDiagonalArrow((function(t,e){t.adaptor.append(t.chtml,e)}))(t)};e.Arrow=function(t){return l.CommonArrow((function(t,e){t.adaptor.append(t.chtml,e)}))(t)}},7427:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.Usage=void 0;var r=function(){function t(){this.used=new Set,this.needsUpdate=[]}return t.prototype.add=function(t){var e=JSON.stringify(t);this.used.has(e)||this.needsUpdate.push(t),this.used.add(e)},t.prototype.has=function(t){return this.used.has(JSON.stringify(t))},t.prototype.clear=function(){this.used.clear(),this.needsUpdate=[]},t.prototype.update=function(){var t=this.needsUpdate;return this.needsUpdate=[],t},t}();e.Usage=r},6617:function(t,e,r){var o,n,i=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),s=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),l=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&a(e,t,r);return s(e,t),e},c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},h=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLWrapper=e.SPACE=e.FONTSIZE=void 0;var u=l(r(6914)),p=r(1541),d=r(3717);e.FONTSIZE={\"70.7%\":\"s\",\"70%\":\"s\",\"50%\":\"ss\",\"60%\":\"Tn\",\"85%\":\"sm\",\"120%\":\"lg\",\"144%\":\"Lg\",\"173%\":\"LG\",\"207%\":\"hg\",\"249%\":\"HG\"},e.SPACE=((n={})[u.em(2/18)]=\"1\",n[u.em(3/18)]=\"2\",n[u.em(4/18)]=\"3\",n[u.em(5/18)]=\"4\",n[u.em(6/18)]=\"5\",n);var f=function(t){function r(){var e=null!==t&&t.apply(this,arguments)||this;return e.chtml=null,e}return i(r,t),r.prototype.toCHTML=function(t){var e,r,o=this.standardCHTMLnode(t);try{for(var n=c(this.childNodes),i=n.next();!i.done;i=n.next()){i.value.toCHTML(o)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},r.prototype.standardCHTMLnode=function(t){this.markUsed();var e=this.createCHTMLnode(t);return this.handleStyles(),this.handleVariant(),this.handleScale(),this.handleColor(),this.handleSpace(),this.handleAttributes(),this.handlePWidth(),e},r.prototype.markUsed=function(){this.jax.wrapperUsage.add(this.kind)},r.prototype.createCHTMLnode=function(t){var e=this.node.attributes.get(\"href\");return e&&(t=this.adaptor.append(t,this.html(\"a\",{href:e}))),this.chtml=this.adaptor.append(t,this.html(\"mjx-\"+this.node.kind)),this.chtml},r.prototype.handleStyles=function(){if(this.styles){var t=this.styles.cssText;if(t){this.adaptor.setAttribute(this.chtml,\"style\",t);var e=this.styles.get(\"font-family\");e&&this.adaptor.setStyle(this.chtml,\"font-family\",\"MJXZERO, \"+e)}}},r.prototype.handleVariant=function(){this.node.isToken&&\"-explicitFont\"!==this.variant&&this.adaptor.setAttribute(this.chtml,\"class\",(this.font.getVariant(this.variant)||this.font.getVariant(\"normal\")).classes)},r.prototype.handleScale=function(){this.setScale(this.chtml,this.bbox.rscale)},r.prototype.setScale=function(t,r){var o=Math.abs(r-1)<.001?1:r;if(t&&1!==o){var n=this.percent(o);e.FONTSIZE[n]?this.adaptor.setAttribute(t,\"size\",e.FONTSIZE[n]):this.adaptor.setStyle(t,\"fontSize\",n)}return t},r.prototype.handleSpace=function(){var t,r;try{for(var o=c([[this.bbox.L,\"space\",\"marginLeft\"],[this.bbox.R,\"rspace\",\"marginRight\"]]),n=o.next();!n.done;n=o.next()){var i=n.value,a=h(i,3),s=a[0],l=a[1],u=a[2];if(s){var p=this.em(s);e.SPACE[p]?this.adaptor.setAttribute(this.chtml,l,e.SPACE[p]):this.adaptor.setStyle(this.chtml,u,p)}}}catch(e){t={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}},r.prototype.handleColor=function(){var t=this.node.attributes,e=t.getExplicit(\"mathcolor\"),r=t.getExplicit(\"color\"),o=t.getExplicit(\"mathbackground\"),n=t.getExplicit(\"background\");(e||r)&&this.adaptor.setStyle(this.chtml,\"color\",e||r),(o||n)&&this.adaptor.setStyle(this.chtml,\"backgroundColor\",o||n)},r.prototype.handleAttributes=function(){var t,e,o,n,i=this.node.attributes,a=i.getAllDefaults(),s=r.skipAttributes;try{for(var l=c(i.getExplicitNames()),h=l.next();!h.done;h=l.next()){var u=h.value;!1!==s[u]&&(u in a||s[u]||this.adaptor.hasAttribute(this.chtml,u))||this.adaptor.setAttribute(this.chtml,u,i.getExplicit(u))}}catch(e){t={error:e}}finally{try{h&&!h.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}if(i.get(\"class\")){var p=i.get(\"class\").trim().split(/ +/);try{for(var d=c(p),f=d.next();!f.done;f=d.next()){var m=f.value;this.adaptor.addClass(this.chtml,m)}}catch(t){o={error:t}}finally{try{f&&!f.done&&(n=d.return)&&n.call(d)}finally{if(o)throw o.error}}}},r.prototype.handlePWidth=function(){this.bbox.pwidth&&(this.bbox.pwidth===d.BBox.fullWidth?this.adaptor.setAttribute(this.chtml,\"width\",\"full\"):this.adaptor.setStyle(this.chtml,\"width\",this.bbox.pwidth))},r.prototype.setIndent=function(t,e,r){var o=this.adaptor;if(\"center\"===e||\"left\"===e){var n=this.getBBox().L;o.setStyle(t,\"margin-left\",this.em(r+n))}if(\"center\"===e||\"right\"===e){var i=this.getBBox().R;o.setStyle(t,\"margin-right\",this.em(-r+i))}},r.prototype.drawBBox=function(){var t=this.getBBox(),e=t.w,r=t.h,o=t.d,n=t.R,i=this.html(\"mjx-box\",{style:{opacity:.25,\"margin-left\":this.em(-e-n)}},[this.html(\"mjx-box\",{style:{height:this.em(r),width:this.em(e),\"background-color\":\"red\"}}),this.html(\"mjx-box\",{style:{height:this.em(o),width:this.em(e),\"margin-left\":this.em(-e),\"vertical-align\":this.em(-o),\"background-color\":\"green\"}})]),a=this.chtml||this.parent.chtml,s=this.adaptor.getAttribute(a,\"size\");s&&this.adaptor.setAttribute(i,\"size\",s);var l=this.adaptor.getStyle(a,\"fontSize\");l&&this.adaptor.setStyle(i,\"fontSize\",l),this.adaptor.append(this.adaptor.parent(a),i),this.adaptor.setStyle(a,\"backgroundColor\",\"#FFEE00\")},r.prototype.html=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r=[]),this.jax.html(t,e,r)},r.prototype.text=function(t){return this.jax.text(t)},r.prototype.char=function(t){return this.font.charSelector(t).substr(1)},r.kind=\"unknown\",r.autoStyle=!0,r}(p.CommonWrapper);e.CHTMLWrapper=f},4477:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLWrapperFactory=void 0;var i=r(1475),a=r(8369),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.defaultNodes=a.CHTMLWrappers,e}(i.CommonWrapperFactory);e.CHTMLWrapperFactory=s},8369:function(t,e,r){var o;Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLWrappers=void 0;var n=r(6617),i=r(4155),a=r(3271),s=r(3292),l=r(7013),c=r(9821),h=r(6359),u=r(6024),p=r(7215),d=r(3215),f=r(3126),m=r(7047),y=r(7837),v=r(5437),b=r(7111),g=r(513),x=r(6577),M=r(1096),_=r(6918),w=r(7500),j=r(8709),C=r(7918),O=r(1315),S=r(7795),T=r(518),B=r(1114);e.CHTMLWrappers=((o={})[i.CHTMLmath.kind]=i.CHTMLmath,o[f.CHTMLmrow.kind]=f.CHTMLmrow,o[f.CHTMLinferredMrow.kind]=f.CHTMLinferredMrow,o[a.CHTMLmi.kind]=a.CHTMLmi,o[s.CHTMLmo.kind]=s.CHTMLmo,o[l.CHTMLmn.kind]=l.CHTMLmn,o[c.CHTMLms.kind]=c.CHTMLms,o[h.CHTMLmtext.kind]=h.CHTMLmtext,o[u.CHTMLmspace.kind]=u.CHTMLmspace,o[p.CHTMLmpadded.kind]=p.CHTMLmpadded,o[d.CHTMLmenclose.kind]=d.CHTMLmenclose,o[y.CHTMLmfrac.kind]=y.CHTMLmfrac,o[v.CHTMLmsqrt.kind]=v.CHTMLmsqrt,o[b.CHTMLmroot.kind]=b.CHTMLmroot,o[g.CHTMLmsub.kind]=g.CHTMLmsub,o[g.CHTMLmsup.kind]=g.CHTMLmsup,o[g.CHTMLmsubsup.kind]=g.CHTMLmsubsup,o[x.CHTMLmunder.kind]=x.CHTMLmunder,o[x.CHTMLmover.kind]=x.CHTMLmover,o[x.CHTMLmunderover.kind]=x.CHTMLmunderover,o[M.CHTMLmmultiscripts.kind]=M.CHTMLmmultiscripts,o[m.CHTMLmfenced.kind]=m.CHTMLmfenced,o[_.CHTMLmtable.kind]=_.CHTMLmtable,o[w.CHTMLmtr.kind]=w.CHTMLmtr,o[w.CHTMLmlabeledtr.kind]=w.CHTMLmlabeledtr,o[j.CHTMLmtd.kind]=j.CHTMLmtd,o[C.CHTMLmaction.kind]=C.CHTMLmaction,o[O.CHTMLmglyph.kind]=O.CHTMLmglyph,o[S.CHTMLsemantics.kind]=S.CHTMLsemantics,o[S.CHTMLannotation.kind]=S.CHTMLannotation,o[S.CHTMLannotationXML.kind]=S.CHTMLannotationXML,o[S.CHTMLxml.kind]=S.CHTMLxml,o[T.CHTMLTeXAtom.kind]=T.CHTMLTeXAtom,o[B.CHTMLTextNode.kind]=B.CHTMLTextNode,o[n.CHTMLWrapper.kind]=n.CHTMLWrapper,o)},518:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLTeXAtom=void 0;var i=r(6617),a=r(3438),s=r(4282),l=r(8921),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(e){if(t.prototype.toCHTML.call(this,e),this.adaptor.setAttribute(this.chtml,\"texclass\",l.TEXCLASSNAMES[this.node.texClass]),this.node.texClass===l.TEXCLASS.VCENTER){var r=this.childNodes[0].getBBox(),o=r.h,n=(o+r.d)/2+this.font.params.axis_height-o;this.adaptor.setStyle(this.chtml,\"verticalAlign\",this.em(n))}},e.kind=s.TeXAtom.prototype.kind,e}((0,a.CommonTeXAtomMixin)(i.CHTMLWrapper));e.CHTMLTeXAtom=c},1114:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLTextNode=void 0;var a=r(8921),s=r(6617),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e,r;this.markUsed();var o=this.adaptor,n=this.parent.variant,a=this.node.getText();if(0!==a.length)if(\"-explicitFont\"===n)o.append(t,this.jax.unknownText(a,n,this.getBBox().w));else{var s=this.remappedText(a,n);try{for(var l=i(s),c=l.next();!c.done;c=l.next()){var h=c.value,u=this.getVariantChar(n,h)[3],p=u.f?\" TEX-\"+u.f:\"\",d=u.unknown?this.jax.unknownText(String.fromCodePoint(h),n):this.html(\"mjx-c\",{class:this.char(h)+p});o.append(t,d),!u.unknown&&this.font.charUsage.add([n,h])}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=l.return)&&r.call(l)}finally{if(e)throw e.error}}}},e.kind=a.TextNode.prototype.kind,e.autoStyle=!1,e.styles={\"mjx-c\":{display:\"inline-block\"},\"mjx-utext\":{display:\"inline-block\",padding:\".75em 0 .2em 0\"}},e}((0,r(555).CommonTextNodeMixin)(s.CHTMLWrapper));e.CHTMLTextNode=l},7918:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmaction=void 0;var i=r(6617),a=r(3345),s=r(3345),l=r(3969),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t);this.selected.toCHTML(e),this.action(this,this.data)},e.prototype.setEventHandler=function(t,e){this.chtml.addEventListener(t,e)},e.kind=l.MmlMaction.prototype.kind,e.styles={\"mjx-maction\":{position:\"relative\"},\"mjx-maction > mjx-tool\":{display:\"none\",position:\"absolute\",bottom:0,right:0,width:0,height:0,\"z-index\":500},\"mjx-tool > mjx-tip\":{display:\"inline-block\",padding:\".2em\",border:\"1px solid #888\",\"font-size\":\"70%\",\"background-color\":\"#F8F8F8\",color:\"black\",\"box-shadow\":\"2px 2px 5px #AAAAAA\"},\"mjx-maction[toggle]\":{cursor:\"pointer\"},\"mjx-status\":{display:\"block\",position:\"fixed\",left:\"1em\",bottom:\"1em\",\"min-width\":\"25%\",padding:\".2em .4em\",border:\"1px solid #888\",\"font-size\":\"90%\",\"background-color\":\"#F8F8F8\",color:\"black\"}},e.actions=new Map([[\"toggle\",[function(t,e){t.adaptor.setAttribute(t.chtml,\"toggle\",t.node.attributes.get(\"selection\"));var r=t.factory.jax.math,o=t.factory.jax.document,n=t.node;t.setEventHandler(\"click\",(function(t){r.end.node||(r.start.node=r.end.node=r.typesetRoot,r.start.n=r.end.n=0),n.nextToggleSelection(),r.rerender(o),t.stopPropagation()}))},{}]],[\"tooltip\",[function(t,e){var r=t.childNodes[1];if(r)if(r.node.isKind(\"mtext\")){var o=r.node.getText();t.adaptor.setAttribute(t.chtml,\"title\",o)}else{var n=t.adaptor,i=n.append(t.chtml,t.html(\"mjx-tool\",{style:{bottom:t.em(-t.dy),right:t.em(-t.dx)}},[t.html(\"mjx-tip\")]));r.toCHTML(n.firstChild(i)),t.setEventHandler(\"mouseover\",(function(r){e.stopTimers(t,e);var o=setTimeout((function(){return n.setStyle(i,\"display\",\"block\")}),e.postDelay);e.hoverTimer.set(t,o),r.stopPropagation()})),t.setEventHandler(\"mouseout\",(function(r){e.stopTimers(t,e);var o=setTimeout((function(){return n.setStyle(i,\"display\",\"\")}),e.clearDelay);e.clearTimer.set(t,o),r.stopPropagation()}))}},s.TooltipData]],[\"statusline\",[function(t,e){var r=t.childNodes[1];if(r&&r.node.isKind(\"mtext\")){var o=t.adaptor,n=r.node.getText();o.setAttribute(t.chtml,\"statusline\",n),t.setEventHandler(\"mouseover\",(function(r){if(null===e.status){var i=o.body(o.document);e.status=o.append(i,t.html(\"mjx-status\",{},[t.text(n)]))}r.stopPropagation()})),t.setEventHandler(\"mouseout\",(function(t){e.status&&(o.remove(e.status),e.status=null),t.stopPropagation()}))}},{status:null}]]]),e}((0,a.CommonMactionMixin)(i.CHTMLWrapper));e.CHTMLmaction=c},4155:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmath=void 0;var a=r(6617),s=r(2057),l=r(304),c=r(3717),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(e){t.prototype.toCHTML.call(this,e);var r=this.chtml,o=this.adaptor;\"block\"===this.node.attributes.get(\"display\")?(o.setAttribute(r,\"display\",\"true\"),o.setAttribute(e,\"display\",\"true\"),this.handleDisplay(e)):this.handleInline(e),o.addClass(r,\"MJX-TEX\")},e.prototype.handleDisplay=function(t){var e=this.adaptor,r=i(this.getAlignShift(),2),o=r[0],n=r[1];if(\"center\"!==o&&e.setAttribute(t,\"justify\",o),this.bbox.pwidth===c.BBox.fullWidth){if(e.setAttribute(t,\"width\",\"full\"),this.jax.table){var a=this.jax.table.getOuterBBox(),s=a.L,l=a.w,h=a.R;\"right\"===o?h=Math.max(h||-n,-n):\"left\"===o?s=Math.max(s||n,n):\"center\"===o&&(l+=2*Math.abs(n));var u=this.em(Math.max(0,s+l+h));e.setStyle(t,\"min-width\",u),e.setStyle(this.jax.table.chtml,\"min-width\",u)}}else this.setIndent(this.chtml,o,n)},e.prototype.handleInline=function(t){var e=this.adaptor,r=e.getStyle(this.chtml,\"margin-right\");r&&(e.setStyle(this.chtml,\"margin-right\",\"\"),e.setStyle(t,\"margin-right\",r),e.setStyle(t,\"width\",\"0\"))},e.prototype.setChildPWidths=function(e,r,o){return void 0===r&&(r=null),void 0===o&&(o=!0),!!this.parent&&t.prototype.setChildPWidths.call(this,e,r,o)},e.kind=l.MmlMath.prototype.kind,e.styles={\"mjx-math\":{\"line-height\":0,\"text-align\":\"left\",\"text-indent\":0,\"font-style\":\"normal\",\"font-weight\":\"normal\",\"font-size\":\"100%\",\"font-size-adjust\":\"none\",\"letter-spacing\":\"normal\",\"border-collapse\":\"collapse\",\"word-wrap\":\"normal\",\"word-spacing\":\"normal\",\"white-space\":\"nowrap\",direction:\"ltr\",padding:\"1px 0\"},'mjx-container[jax=\"CHTML\"][display=\"true\"]':{display:\"block\",\"text-align\":\"center\",margin:\"1em 0\"},'mjx-container[jax=\"CHTML\"][display=\"true\"][width=\"full\"]':{display:\"flex\"},'mjx-container[jax=\"CHTML\"][display=\"true\"] mjx-math':{padding:0},'mjx-container[jax=\"CHTML\"][justify=\"left\"]':{\"text-align\":\"left\"},'mjx-container[jax=\"CHTML\"][justify=\"right\"]':{\"text-align\":\"right\"}},e}((0,s.CommonMathMixin)(a.CHTMLWrapper));e.CHTMLmath=h},3215:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return a(e,t),e},l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},c=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmenclose=void 0;var h=r(6617),u=r(6200),p=s(r(4458)),d=r(4374),f=r(6914);function m(t,e){return Math.atan2(t,e).toFixed(3).replace(/\\.?0+$/,\"\")}var y=m(p.ARROWDX,p.ARROWY),v=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e,r,o,n,i=this.adaptor,a=this.standardCHTMLnode(t),s=i.append(a,this.html(\"mjx-box\"));this.renderChild?this.renderChild(this,s):this.childNodes[0].toCHTML(s);try{for(var c=l(Object.keys(this.notations)),h=c.next();!h.done;h=c.next()){var u=h.value,d=this.notations[u];!d.renderChild&&d.renderer(this,s)}}catch(t){e={error:t}}finally{try{h&&!h.done&&(r=c.return)&&r.call(c)}finally{if(e)throw e.error}}var f=this.getPadding();try{for(var m=l(p.sideNames),y=m.next();!y.done;y=m.next()){var v=y.value,b=p.sideIndex[v];f[b]>0&&i.setStyle(s,\"padding-\"+v,this.em(f[b]))}}catch(t){o={error:t}}finally{try{y&&!y.done&&(n=m.return)&&n.call(m)}finally{if(o)throw o.error}}},e.prototype.arrow=function(t,e,r,o,n){void 0===o&&(o=\"\"),void 0===n&&(n=0);var i=this.getBBox().w,a={width:this.em(t)};i!==t&&(a.left=this.em((i-t)/2)),e&&(a.transform=\"rotate(\"+this.fixed(e)+\"rad)\");var s=this.html(\"mjx-arrow\",{style:a},[this.html(\"mjx-aline\"),this.html(\"mjx-rthead\"),this.html(\"mjx-rbhead\")]);return r&&(this.adaptor.append(s,this.html(\"mjx-lthead\")),this.adaptor.append(s,this.html(\"mjx-lbhead\")),this.adaptor.setAttribute(s,\"double\",\"true\")),this.adjustArrow(s,r),this.moveArrow(s,o,n),s},e.prototype.adjustArrow=function(t,e){var r=this,o=this.thickness,n=this.arrowhead;if(n.x!==p.ARROWX||n.y!==p.ARROWY||n.dx!==p.ARROWDX||o!==p.THICKNESS){var i=c([o*n.x,o*n.y].map((function(t){return r.em(t)})),2),a=i[0],s=i[1],l=m(n.dx,n.y),h=c(this.adaptor.childNodes(t),5),u=h[0],d=h[1],f=h[2],y=h[3],v=h[4];this.adjustHead(d,[s,\"0\",\"1px\",a],l),this.adjustHead(f,[\"1px\",\"0\",s,a],\"-\"+l),this.adjustHead(y,[s,a,\"1px\",\"0\"],\"-\"+l),this.adjustHead(v,[\"1px\",a,s,\"0\"],l),this.adjustLine(u,o,n.x,e)}},e.prototype.adjustHead=function(t,e,r){t&&(this.adaptor.setStyle(t,\"border-width\",e.join(\" \")),this.adaptor.setStyle(t,\"transform\",\"skewX(\"+r+\"rad)\"))},e.prototype.adjustLine=function(t,e,r,o){this.adaptor.setStyle(t,\"borderTop\",this.em(e)+\" solid\"),this.adaptor.setStyle(t,\"top\",this.em(-e/2)),this.adaptor.setStyle(t,\"right\",this.em(e*(r-1))),o&&this.adaptor.setStyle(t,\"left\",this.em(e*(r-1)))},e.prototype.moveArrow=function(t,e,r){if(r){var o=this.adaptor.getStyle(t,\"transform\");this.adaptor.setStyle(t,\"transform\",\"translate\".concat(e,\"(\").concat(this.em(-r),\")\").concat(o?\" \"+o:\"\"))}},e.prototype.adjustBorder=function(t){return this.thickness!==p.THICKNESS&&this.adaptor.setStyle(t,\"borderWidth\",this.em(this.thickness)),t},e.prototype.adjustThickness=function(t){return this.thickness!==p.THICKNESS&&this.adaptor.setStyle(t,\"strokeWidth\",this.fixed(this.thickness)),t},e.prototype.fixed=function(t,e){return void 0===e&&(e=3),Math.abs(t)<6e-4?\"0\":t.toFixed(e).replace(/\\.?0+$/,\"\")},e.prototype.em=function(e){return t.prototype.em.call(this,e)},e.kind=d.MmlMenclose.prototype.kind,e.styles={\"mjx-menclose\":{position:\"relative\"},\"mjx-menclose > mjx-dstrike\":{display:\"inline-block\",left:0,top:0,position:\"absolute\",\"border-top\":p.SOLID,\"transform-origin\":\"top left\"},\"mjx-menclose > mjx-ustrike\":{display:\"inline-block\",left:0,bottom:0,position:\"absolute\",\"border-top\":p.SOLID,\"transform-origin\":\"bottom left\"},\"mjx-menclose > mjx-hstrike\":{\"border-top\":p.SOLID,position:\"absolute\",left:0,right:0,bottom:\"50%\",transform:\"translateY(\"+(0,f.em)(p.THICKNESS/2)+\")\"},\"mjx-menclose > mjx-vstrike\":{\"border-left\":p.SOLID,position:\"absolute\",top:0,bottom:0,right:\"50%\",transform:\"translateX(\"+(0,f.em)(p.THICKNESS/2)+\")\"},\"mjx-menclose > mjx-rbox\":{position:\"absolute\",top:0,bottom:0,right:0,left:0,border:p.SOLID,\"border-radius\":(0,f.em)(p.THICKNESS+p.PADDING)},\"mjx-menclose > mjx-cbox\":{position:\"absolute\",top:0,bottom:0,right:0,left:0,border:p.SOLID,\"border-radius\":\"50%\"},\"mjx-menclose > mjx-arrow\":{position:\"absolute\",left:0,bottom:\"50%\",height:0,width:0},\"mjx-menclose > mjx-arrow > *\":{display:\"block\",position:\"absolute\",\"transform-origin\":\"bottom\",\"border-left\":(0,f.em)(p.THICKNESS*p.ARROWX)+\" solid\",\"border-right\":0,\"box-sizing\":\"border-box\"},\"mjx-menclose > mjx-arrow > mjx-aline\":{left:0,top:(0,f.em)(-p.THICKNESS/2),right:(0,f.em)(p.THICKNESS*(p.ARROWX-1)),height:0,\"border-top\":(0,f.em)(p.THICKNESS)+\" solid\",\"border-left\":0},\"mjx-menclose > mjx-arrow[double] > mjx-aline\":{left:(0,f.em)(p.THICKNESS*(p.ARROWX-1)),height:0},\"mjx-menclose > mjx-arrow > mjx-rthead\":{transform:\"skewX(\"+y+\"rad)\",right:0,bottom:\"-1px\",\"border-bottom\":\"1px solid transparent\",\"border-top\":(0,f.em)(p.THICKNESS*p.ARROWY)+\" solid transparent\"},\"mjx-menclose > mjx-arrow > mjx-rbhead\":{transform:\"skewX(-\"+y+\"rad)\",\"transform-origin\":\"top\",right:0,top:\"-1px\",\"border-top\":\"1px solid transparent\",\"border-bottom\":(0,f.em)(p.THICKNESS*p.ARROWY)+\" solid transparent\"},\"mjx-menclose > mjx-arrow > mjx-lthead\":{transform:\"skewX(-\"+y+\"rad)\",left:0,bottom:\"-1px\",\"border-left\":0,\"border-right\":(0,f.em)(p.THICKNESS*p.ARROWX)+\" solid\",\"border-bottom\":\"1px solid transparent\",\"border-top\":(0,f.em)(p.THICKNESS*p.ARROWY)+\" solid transparent\"},\"mjx-menclose > mjx-arrow > mjx-lbhead\":{transform:\"skewX(\"+y+\"rad)\",\"transform-origin\":\"top\",left:0,top:\"-1px\",\"border-left\":0,\"border-right\":(0,f.em)(p.THICKNESS*p.ARROWX)+\" solid\",\"border-top\":\"1px solid transparent\",\"border-bottom\":(0,f.em)(p.THICKNESS*p.ARROWY)+\" solid transparent\"},\"mjx-menclose > dbox\":{position:\"absolute\",top:0,bottom:0,left:(0,f.em)(-1.5*p.PADDING),width:(0,f.em)(3*p.PADDING),border:(0,f.em)(p.THICKNESS)+\" solid\",\"border-radius\":\"50%\",\"clip-path\":\"inset(0 0 0 \"+(0,f.em)(1.5*p.PADDING)+\")\",\"box-sizing\":\"border-box\"}},e.notations=new Map([p.Border(\"top\"),p.Border(\"right\"),p.Border(\"bottom\"),p.Border(\"left\"),p.Border2(\"actuarial\",\"top\",\"right\"),p.Border2(\"madruwb\",\"bottom\",\"right\"),p.DiagonalStrike(\"up\",1),p.DiagonalStrike(\"down\",-1),[\"horizontalstrike\",{renderer:p.RenderElement(\"hstrike\",\"Y\"),bbox:function(t){return[0,t.padding,0,t.padding]}}],[\"verticalstrike\",{renderer:p.RenderElement(\"vstrike\",\"X\"),bbox:function(t){return[t.padding,0,t.padding,0]}}],[\"box\",{renderer:function(t,e){t.adaptor.setStyle(e,\"border\",t.em(t.thickness)+\" solid\")},bbox:p.fullBBox,border:p.fullBorder,remove:\"left right top bottom\"}],[\"roundedbox\",{renderer:p.RenderElement(\"rbox\"),bbox:p.fullBBox}],[\"circle\",{renderer:p.RenderElement(\"cbox\"),bbox:p.fullBBox}],[\"phasorangle\",{renderer:function(t,e){var r=t.getBBox(),o=r.h,n=r.d,i=c(t.getArgMod(1.75*t.padding,o+n),2),a=i[0],s=i[1],l=t.thickness*Math.sin(a)*.9;t.adaptor.setStyle(e,\"border-bottom\",t.em(t.thickness)+\" solid\");var h=t.adjustBorder(t.html(\"mjx-ustrike\",{style:{width:t.em(s),transform:\"translateX(\"+t.em(l)+\") rotate(\"+t.fixed(-a)+\"rad)\"}}));t.adaptor.append(t.chtml,h)},bbox:function(t){var e=t.padding/2,r=t.thickness;return[2*e,e,e+r,3*e+r]},border:function(t){return[0,0,t.thickness,0]},remove:\"bottom\"}],p.Arrow(\"up\"),p.Arrow(\"down\"),p.Arrow(\"left\"),p.Arrow(\"right\"),p.Arrow(\"updown\"),p.Arrow(\"leftright\"),p.DiagonalArrow(\"updiagonal\"),p.DiagonalArrow(\"northeast\"),p.DiagonalArrow(\"southeast\"),p.DiagonalArrow(\"northwest\"),p.DiagonalArrow(\"southwest\"),p.DiagonalArrow(\"northeastsouthwest\"),p.DiagonalArrow(\"northwestsoutheast\"),[\"longdiv\",{renderer:function(t,e){var r=t.adaptor;r.setStyle(e,\"border-top\",t.em(t.thickness)+\" solid\");var o=r.append(t.chtml,t.html(\"dbox\")),n=t.thickness,i=t.padding;n!==p.THICKNESS&&r.setStyle(o,\"border-width\",t.em(n)),i!==p.PADDING&&(r.setStyle(o,\"left\",t.em(-1.5*i)),r.setStyle(o,\"width\",t.em(3*i)),r.setStyle(o,\"clip-path\",\"inset(0 0 0 \"+t.em(1.5*i)+\")\"))},bbox:function(t){var e=t.padding,r=t.thickness;return[e+r,e,e,2*e+r/2]}}],[\"radical\",{renderer:function(t,e){t.msqrt.toCHTML(e);var r=t.sqrtTRBL();t.adaptor.setStyle(t.msqrt.chtml,\"margin\",r.map((function(e){return t.em(-e)})).join(\" \"))},init:function(t){t.msqrt=t.createMsqrt(t.childNodes[0])},bbox:function(t){return t.sqrtTRBL()},renderChild:!0}]]),e}((0,u.CommonMencloseMixin)(h.CHTMLWrapper));e.CHTMLmenclose=v},7047:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmfenced=void 0;var i=r(6617),a=r(1346),s=r(7451),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t);this.mrow.toCHTML(e)},e.kind=s.MmlMfenced.prototype.kind,e}((0,a.CommonMfencedMixin)(i.CHTMLWrapper));e.CHTMLmfenced=l},7837:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},i.apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmfrac=void 0;var a=r(6617),s=r(5705),l=r(848),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){this.standardCHTMLnode(t);var e=this.node.attributes.getList(\"linethickness\",\"bevelled\"),r=e.linethickness,o=e.bevelled,n=this.isDisplay();if(o)this.makeBevelled(n);else{var i=this.length2em(String(r),.06);0===i?this.makeAtop(n):this.makeFraction(n,i)}},e.prototype.makeFraction=function(t,e){var r,o,n=this.node.attributes.getList(\"numalign\",\"denomalign\"),a=n.numalign,s=n.denomalign,l=t?{type:\"d\"}:{},c=this.node.getProperty(\"withDelims\")?i(i({},l),{delims:\"true\"}):i({},l),h=\"center\"!==a?{align:a}:{},u=\"center\"!==s?{align:s}:{},p=i({},l),d=i({},l),f=this.font.params;if(.06!==e){var m=f.axis_height,y=this.em(e),v=this.getTUV(t,e),b=v.T,g=v.u,x=v.v,M=(t?this.em(3*e):y)+\" -.1em\";l.style={height:y,\"border-top\":y+\" solid\",margin:M};var _=this.em(Math.max(0,g));d.style={height:_,\"vertical-align\":\"-\"+_},p.style={height:this.em(Math.max(0,x))},c.style={\"vertical-align\":this.em(m-b)}}this.adaptor.append(this.chtml,this.html(\"mjx-frac\",c,[r=this.html(\"mjx-num\",h,[this.html(\"mjx-nstrut\",d)]),this.html(\"mjx-dbox\",{},[this.html(\"mjx-dtable\",{},[this.html(\"mjx-line\",l),this.html(\"mjx-row\",{},[o=this.html(\"mjx-den\",u,[this.html(\"mjx-dstrut\",p)])])])])])),this.childNodes[0].toCHTML(r),this.childNodes[1].toCHTML(o)},e.prototype.makeAtop=function(t){var e,r,o=this.node.attributes.getList(\"numalign\",\"denomalign\"),n=o.numalign,a=o.denomalign,s=t?{type:\"d\",atop:!0}:{atop:!0},l=this.node.getProperty(\"withDelims\")?i(i({},s),{delims:!0}):i({},s),c=\"center\"!==n?{align:n}:{},h=\"center\"!==a?{align:a}:{},u=this.getUVQ(t),p=u.v,d=u.q;c.style={\"padding-bottom\":this.em(d)},l.style={\"vertical-align\":this.em(-p)},this.adaptor.append(this.chtml,this.html(\"mjx-frac\",l,[e=this.html(\"mjx-num\",c),r=this.html(\"mjx-den\",h)])),this.childNodes[0].toCHTML(e),this.childNodes[1].toCHTML(r)},e.prototype.makeBevelled=function(t){var e=this.adaptor;e.setAttribute(this.chtml,\"bevelled\",\"ture\");var r=e.append(this.chtml,this.html(\"mjx-num\"));this.childNodes[0].toCHTML(r),this.bevel.toCHTML(this.chtml);var o=e.append(this.chtml,this.html(\"mjx-den\"));this.childNodes[1].toCHTML(o);var n=this.getBevelData(t),i=n.u,a=n.v,s=n.delta,l=n.nbox,c=n.dbox;i&&e.setStyle(r,\"verticalAlign\",this.em(i/l.scale)),a&&e.setStyle(o,\"verticalAlign\",this.em(a/c.scale));var h=this.em(-s/2);e.setStyle(this.bevel.chtml,\"marginLeft\",h),e.setStyle(this.bevel.chtml,\"marginRight\",h)},e.kind=l.MmlMfrac.prototype.kind,e.styles={\"mjx-frac\":{display:\"inline-block\",\"vertical-align\":\"0.17em\",padding:\"0 .22em\"},'mjx-frac[type=\"d\"]':{\"vertical-align\":\".04em\"},\"mjx-frac[delims]\":{padding:\"0 .1em\"},\"mjx-frac[atop]\":{padding:\"0 .12em\"},\"mjx-frac[atop][delims]\":{padding:\"0\"},\"mjx-dtable\":{display:\"inline-table\",width:\"100%\"},\"mjx-dtable > *\":{\"font-size\":\"2000%\"},\"mjx-dbox\":{display:\"block\",\"font-size\":\"5%\"},\"mjx-num\":{display:\"block\",\"text-align\":\"center\"},\"mjx-den\":{display:\"block\",\"text-align\":\"center\"},\"mjx-mfrac[bevelled] > mjx-num\":{display:\"inline-block\"},\"mjx-mfrac[bevelled] > mjx-den\":{display:\"inline-block\"},'mjx-den[align=\"right\"], mjx-num[align=\"right\"]':{\"text-align\":\"right\"},'mjx-den[align=\"left\"], mjx-num[align=\"left\"]':{\"text-align\":\"left\"},\"mjx-nstrut\":{display:\"inline-block\",height:\".054em\",width:0,\"vertical-align\":\"-.054em\"},'mjx-nstrut[type=\"d\"]':{height:\".217em\",\"vertical-align\":\"-.217em\"},\"mjx-dstrut\":{display:\"inline-block\",height:\".505em\",width:0},'mjx-dstrut[type=\"d\"]':{height:\".726em\"},\"mjx-line\":{display:\"block\",\"box-sizing\":\"border-box\",\"min-height\":\"1px\",height:\".06em\",\"border-top\":\".06em solid\",margin:\".06em -.1em\",overflow:\"hidden\"},'mjx-line[type=\"d\"]':{margin:\".18em -.1em\"}},e}((0,s.CommonMfracMixin)(a.CHTMLWrapper));e.CHTMLmfrac=c},1315:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmglyph=void 0;var i=r(6617),a=r(7969),s=r(910),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t);if(this.charWrapper)this.charWrapper.toCHTML(e);else{var r=this.node.attributes.getList(\"src\",\"alt\"),o=r.src,n=r.alt,i={width:this.em(this.width),height:this.em(this.height)};this.valign&&(i.verticalAlign=this.em(this.valign));var a=this.html(\"img\",{src:o,style:i,alt:n,title:n});this.adaptor.append(e,a)}},e.kind=s.MmlMglyph.prototype.kind,e.styles={\"mjx-mglyph > img\":{display:\"inline-block\",border:0,padding:0}},e}((0,a.CommonMglyphMixin)(i.CHTMLWrapper));e.CHTMLmglyph=l},3271:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmi=void 0;var i=r(6617),a=r(1419),s=r(7754),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlMi.prototype.kind,e}((0,a.CommonMiMixin)(i.CHTMLWrapper));e.CHTMLmi=l},1096:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmmultiscripts=void 0;var a=r(513),s=r(9906),l=r(7764),c=r(6720),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t),r=this.scriptData,o=this.node.getProperty(\"scriptalign\")||\"right left\",n=i((0,c.split)(o+\" \"+o),2),a=n[0],s=n[1],l=this.combinePrePost(r.sub,r.psub),h=this.combinePrePost(r.sup,r.psup),u=i(this.getUVQ(l,h),2),p=u[0],d=u[1];if(r.numPrescripts){var f=this.addScripts(p,-d,!0,r.psub,r.psup,this.firstPrescript,r.numPrescripts);\"right\"!==a&&this.adaptor.setAttribute(f,\"script-align\",a)}if(this.childNodes[0].toCHTML(e),r.numScripts){f=this.addScripts(p,-d,!1,r.sub,r.sup,1,r.numScripts);\"left\"!==s&&this.adaptor.setAttribute(f,\"script-align\",s)}},e.prototype.addScripts=function(t,e,r,o,n,i,a){for(var s=this.adaptor,l=t-n.d+(e-o.h),c=t<0&&0===e?o.h+t:t,h=l>0?{style:{height:this.em(l)}}:{},u=c?{style:{\"vertical-align\":this.em(c)}}:{},p=this.html(\"mjx-row\"),d=this.html(\"mjx-row\",h),f=this.html(\"mjx-row\"),m=\"mjx-\"+(r?\"pre\":\"\")+\"scripts\",y=i+2*a;i<y;)this.childNodes[i++].toCHTML(s.append(f,this.html(\"mjx-cell\"))),this.childNodes[i++].toCHTML(s.append(p,this.html(\"mjx-cell\")));return s.append(this.chtml,this.html(m,u,[p,d,f]))},e.kind=l.MmlMmultiscripts.prototype.kind,e.styles={\"mjx-prescripts\":{display:\"inline-table\",\"padding-left\":\".05em\"},\"mjx-scripts\":{display:\"inline-table\",\"padding-right\":\".05em\"},\"mjx-prescripts > mjx-row > mjx-cell\":{\"text-align\":\"right\"},'[script-align=\"left\"] > mjx-row > mjx-cell':{\"text-align\":\"left\"},'[script-align=\"center\"] > mjx-row > mjx-cell':{\"text-align\":\"center\"},'[script-align=\"right\"] > mjx-row > mjx-cell':{\"text-align\":\"right\"}},e}((0,s.CommonMmultiscriptsMixin)(a.CHTMLmsubsup));e.CHTMLmmultiscripts=h},7013:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmn=void 0;var i=r(6617),a=r(2304),s=r(3235),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlMn.prototype.kind,e}((0,a.CommonMnMixin)(i.CHTMLWrapper));e.CHTMLmn=l},3292:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmo=void 0;var a=r(6617),s=r(437),l=r(9946),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e,r,o=this.node.attributes,n=o.get(\"symmetric\")&&2!==this.stretch.dir,a=0!==this.stretch.dir;a&&null===this.size&&this.getStretchedVariant([]);var s=this.standardCHTMLnode(t);if(a&&this.size<0)this.stretchHTML(s);else{if(n||o.get(\"largeop\")){var l=this.em(this.getCenterOffset());\"0\"!==l&&this.adaptor.setStyle(s,\"verticalAlign\",l)}this.node.getProperty(\"mathaccent\")&&(this.adaptor.setStyle(s,\"width\",\"0\"),this.adaptor.setStyle(s,\"margin-left\",this.em(this.getAccentOffset())));try{for(var c=i(this.childNodes),h=c.next();!h.done;h=c.next()){h.value.toCHTML(s)}}catch(t){e={error:t}}finally{try{h&&!h.done&&(r=c.return)&&r.call(c)}finally{if(e)throw e.error}}}},e.prototype.stretchHTML=function(t){var e=this.getText().codePointAt(0);this.font.delimUsage.add(e),this.childNodes[0].markUsed();var r=this.stretch,o=r.stretch,n=[];o[0]&&n.push(this.html(\"mjx-beg\",{},[this.html(\"mjx-c\")])),n.push(this.html(\"mjx-ext\",{},[this.html(\"mjx-c\")])),4===o.length&&n.push(this.html(\"mjx-mid\",{},[this.html(\"mjx-c\")]),this.html(\"mjx-ext\",{},[this.html(\"mjx-c\")])),o[2]&&n.push(this.html(\"mjx-end\",{},[this.html(\"mjx-c\")]));var i={},a=this.bbox,l=a.h,c=a.d,h=a.w;1===r.dir?(n.push(this.html(\"mjx-mark\")),i.height=this.em(l+c),i.verticalAlign=this.em(-c)):i.width=this.em(h);var u=s.DirectionVH[r.dir],p={class:this.char(r.c||e),style:i},d=this.html(\"mjx-stretchy-\"+u,p,n);this.adaptor.append(t,d)},e.kind=l.MmlMo.prototype.kind,e.styles={\"mjx-stretchy-h\":{display:\"inline-table\",width:\"100%\"},\"mjx-stretchy-h > *\":{display:\"table-cell\",width:0},\"mjx-stretchy-h > * > mjx-c\":{display:\"inline-block\",transform:\"scalex(1.0000001)\"},\"mjx-stretchy-h > * > mjx-c::before\":{display:\"inline-block\",width:\"initial\"},\"mjx-stretchy-h > mjx-ext\":{\"/* IE */ overflow\":\"hidden\",\"/* others */ overflow\":\"clip visible\",width:\"100%\"},\"mjx-stretchy-h > mjx-ext > mjx-c::before\":{transform:\"scalex(500)\"},\"mjx-stretchy-h > mjx-ext > mjx-c\":{width:0},\"mjx-stretchy-h > mjx-beg > mjx-c\":{\"margin-right\":\"-.1em\"},\"mjx-stretchy-h > mjx-end > mjx-c\":{\"margin-left\":\"-.1em\"},\"mjx-stretchy-v\":{display:\"inline-block\"},\"mjx-stretchy-v > *\":{display:\"block\"},\"mjx-stretchy-v > mjx-beg\":{height:0},\"mjx-stretchy-v > mjx-end > mjx-c\":{display:\"block\"},\"mjx-stretchy-v > * > mjx-c\":{transform:\"scaley(1.0000001)\",\"transform-origin\":\"left center\",overflow:\"hidden\"},\"mjx-stretchy-v > mjx-ext\":{display:\"block\",height:\"100%\",\"box-sizing\":\"border-box\",border:\"0px solid transparent\",\"/* IE */ overflow\":\"hidden\",\"/* others */ overflow\":\"visible clip\"},\"mjx-stretchy-v > mjx-ext > mjx-c::before\":{width:\"initial\",\"box-sizing\":\"border-box\"},\"mjx-stretchy-v > mjx-ext > mjx-c\":{transform:\"scaleY(500) translateY(.075em)\",overflow:\"visible\"},\"mjx-mark\":{display:\"inline-block\",height:\"0px\"}},e}((0,s.CommonMoMixin)(a.CHTMLWrapper));e.CHTMLmo=c},7215:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmpadded=void 0;var s=r(6617),l=r(7481),c=r(189),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e,r,o=this.standardCHTMLnode(t),n=[],s={},l=i(this.getDimens(),9),c=l[2],h=l[3],u=l[4],p=l[5],d=l[6],f=l[7],m=l[8];if(p&&(s.width=this.em(c+p)),(h||u)&&(s.margin=this.em(h)+\" 0 \"+this.em(u)),d+m||f){s.position=\"relative\";var y=this.html(\"mjx-rbox\",{style:{left:this.em(d+m),top:this.em(-f),\"max-width\":s.width}});d+m&&this.childNodes[0].getBBox().pwidth&&(this.adaptor.setAttribute(y,\"width\",\"full\"),this.adaptor.setStyle(y,\"left\",this.em(d))),n.push(y)}o=this.adaptor.append(o,this.html(\"mjx-block\",{style:s},n));try{for(var v=a(this.childNodes),b=v.next();!b.done;b=v.next()){b.value.toCHTML(n[0]||o)}}catch(t){e={error:t}}finally{try{b&&!b.done&&(r=v.return)&&r.call(v)}finally{if(e)throw e.error}}},e.kind=c.MmlMpadded.prototype.kind,e.styles={\"mjx-mpadded\":{display:\"inline-block\"},\"mjx-rbox\":{display:\"inline-block\",position:\"relative\"}},e}((0,l.CommonMpaddedMixin)(s.CHTMLWrapper));e.CHTMLmpadded=h},7111:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmroot=void 0;var a=r(5437),s=r(5997),l=r(4664),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.addRoot=function(t,e,r,o){e.toCHTML(t);var n=i(this.getRootDimens(r,o),3),a=n[0],s=n[1],l=n[2];this.adaptor.setStyle(t,\"verticalAlign\",this.em(s)),this.adaptor.setStyle(t,\"width\",this.em(a)),l&&this.adaptor.setStyle(this.adaptor.firstChild(t),\"paddingLeft\",this.em(l))},e.kind=l.MmlMroot.prototype.kind,e}((0,s.CommonMrootMixin)(a.CHTMLmsqrt));e.CHTMLmroot=c},3126:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLinferredMrow=e.CHTMLmrow=void 0;var a=r(6617),s=r(9323),l=r(9323),c=r(1691),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e,r,o=this.node.isInferred?this.chtml=t:this.standardCHTMLnode(t),n=!1;try{for(var a=i(this.childNodes),s=a.next();!s.done;s=a.next()){var l=s.value;l.toCHTML(o),l.bbox.w<0&&(n=!0)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}if(n){var c=this.getBBox().w;c&&(this.adaptor.setStyle(o,\"width\",this.em(Math.max(0,c))),c<0&&this.adaptor.setStyle(o,\"marginRight\",this.em(c)))}},e.kind=c.MmlMrow.prototype.kind,e}((0,s.CommonMrowMixin)(a.CHTMLWrapper));e.CHTMLmrow=h;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=c.MmlInferredMrow.prototype.kind,e}((0,l.CommonInferredMrowMixin)(h));e.CHTMLinferredMrow=u},9821:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLms=void 0;var i=r(6617),a=r(6920),s=r(4042),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlMs.prototype.kind,e}((0,a.CommonMsMixin)(i.CHTMLWrapper));e.CHTMLms=l},6024:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmspace=void 0;var i=r(6617),a=r(37),s=r(1465),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t),r=this.getBBox(),o=r.w,n=r.h,i=r.d;o<0&&(this.adaptor.setStyle(e,\"marginRight\",this.em(o)),o=0),o&&this.adaptor.setStyle(e,\"width\",this.em(o)),(n=Math.max(0,n+i))&&this.adaptor.setStyle(e,\"height\",this.em(Math.max(0,n))),i&&this.adaptor.setStyle(e,\"verticalAlign\",this.em(-i))},e.kind=s.MmlMspace.prototype.kind,e}((0,a.CommonMspaceMixin)(i.CHTMLWrapper));e.CHTMLmspace=l},5437:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmsqrt=void 0;var a=r(6617),s=r(222),l=r(4655),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e,r,o,n,a=this.childNodes[this.surd],s=this.childNodes[this.base],l=a.getBBox(),c=s.getOuterBBox(),h=i(this.getPQ(l),2)[1],u=this.font.params.rule_thickness,p=c.h+h+u,d=this.standardCHTMLnode(t);null!=this.root&&(o=this.adaptor.append(d,this.html(\"mjx-root\")),n=this.childNodes[this.root]);var f=this.adaptor.append(d,this.html(\"mjx-sqrt\",{},[e=this.html(\"mjx-surd\"),r=this.html(\"mjx-box\",{style:{paddingTop:this.em(h)}})]));this.addRoot(o,n,l,p),a.toCHTML(e),s.toCHTML(r),a.size<0&&this.adaptor.addClass(f,\"mjx-tall\")},e.prototype.addRoot=function(t,e,r,o){},e.kind=l.MmlMsqrt.prototype.kind,e.styles={\"mjx-root\":{display:\"inline-block\",\"white-space\":\"nowrap\"},\"mjx-surd\":{display:\"inline-block\",\"vertical-align\":\"top\"},\"mjx-sqrt\":{display:\"inline-block\",\"padding-top\":\".07em\"},\"mjx-sqrt > mjx-box\":{\"border-top\":\".07em solid\"},\"mjx-sqrt.mjx-tall > mjx-box\":{\"padding-left\":\".3em\",\"margin-left\":\"-.3em\"}},e}((0,s.CommonMsqrtMixin)(a.CHTMLWrapper));e.CHTMLmsqrt=c},513:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmsubsup=e.CHTMLmsup=e.CHTMLmsub=void 0;var a=r(7322),s=r(3069),l=r(3069),c=r(3069),h=r(5857),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=h.MmlMsub.prototype.kind,e}((0,s.CommonMsubMixin)(a.CHTMLscriptbase));e.CHTMLmsub=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=h.MmlMsup.prototype.kind,e}((0,l.CommonMsupMixin)(a.CHTMLscriptbase));e.CHTMLmsup=p;var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e=this.adaptor,r=this.standardCHTMLnode(t),o=i([this.baseChild,this.supChild,this.subChild],3),n=o[0],a=o[1],s=o[2],l=i(this.getUVQ(),3),c=l[1],h=l[2],u={\"vertical-align\":this.em(c)};n.toCHTML(r);var p=e.append(r,this.html(\"mjx-script\",{style:u}));a.toCHTML(p),e.append(p,this.html(\"mjx-spacer\",{style:{\"margin-top\":this.em(h)}})),s.toCHTML(p);var d=this.getAdjustedIc();d&&e.setStyle(a.chtml,\"marginLeft\",this.em(d/a.bbox.rscale)),this.baseRemoveIc&&e.setStyle(p,\"marginLeft\",this.em(-this.baseIc))},e.kind=h.MmlMsubsup.prototype.kind,e.styles={\"mjx-script\":{display:\"inline-block\",\"padding-right\":\".05em\",\"padding-left\":\".033em\"},\"mjx-script > mjx-spacer\":{display:\"block\"}},e}((0,c.CommonMsubsupMixin)(a.CHTMLscriptbase));e.CHTMLmsubsup=d},6918:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmtable=void 0;var s=r(6617),l=r(8589),c=r(4859),h=r(6720),u=function(t){function e(e,r,o){void 0===o&&(o=null);var n=t.call(this,e,r,o)||this;return n.itable=n.html(\"mjx-itable\"),n.labels=n.html(\"mjx-itable\"),n}return n(e,t),e.prototype.getAlignShift=function(){var e=t.prototype.getAlignShift.call(this);return this.isTop||(e[1]=0),e},e.prototype.toCHTML=function(t){var e,r,o=this.standardCHTMLnode(t);this.adaptor.append(o,this.html(\"mjx-table\",{},[this.itable]));try{for(var n=i(this.childNodes),a=n.next();!a.done;a=n.next()){a.value.toCHTML(this.itable)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}this.padRows(),this.handleColumnSpacing(),this.handleColumnLines(),this.handleColumnWidths(),this.handleRowSpacing(),this.handleRowLines(),this.handleRowHeights(),this.handleFrame(),this.handleWidth(),this.handleLabels(),this.handleAlign(),this.handleJustify(),this.shiftColor()},e.prototype.shiftColor=function(){var t=this.adaptor,e=t.getStyle(this.chtml,\"backgroundColor\");e&&(t.setStyle(this.chtml,\"backgroundColor\",\"\"),t.setStyle(this.itable,\"backgroundColor\",e))},e.prototype.padRows=function(){var t,e,r=this.adaptor;try{for(var o=i(r.childNodes(this.itable)),n=o.next();!n.done;n=o.next())for(var a=n.value;r.childNodes(a).length<this.numCols;)r.append(a,this.html(\"mjx-mtd\",{extra:!0}))}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}},e.prototype.handleColumnSpacing=function(){var t,e,r,o,n=this.childNodes[0]?1/this.childNodes[0].getBBox().rscale:1,a=this.getEmHalfSpacing(this.fSpace[0],this.cSpace,n),s=this.frame;try{for(var l=i(this.tableRows),c=l.next();!c.done;c=l.next()){var h=c.value,u=0;try{for(var p=(r=void 0,i(h.tableCells)),d=p.next();!d.done;d=p.next()){var f=d.value,m=a[u++],y=a[u],v=f?f.chtml:this.adaptor.childNodes(h.chtml)[u];(u>1&&\"0.4em\"!==m||s&&1===u)&&this.adaptor.setStyle(v,\"paddingLeft\",m),(u<this.numCols&&\"0.4em\"!==y||s&&u===this.numCols)&&this.adaptor.setStyle(v,\"paddingRight\",y)}}catch(t){r={error:t}}finally{try{d&&!d.done&&(o=p.return)&&o.call(p)}finally{if(r)throw r.error}}}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}},e.prototype.handleColumnLines=function(){var t,e,r,o;if(\"none\"!==this.node.attributes.get(\"columnlines\")){var n=this.getColumnAttributes(\"columnlines\");try{for(var a=i(this.childNodes),s=a.next();!s.done;s=a.next()){var l=s.value,c=0;try{for(var h=(r=void 0,i(this.adaptor.childNodes(l.chtml).slice(1))),u=h.next();!u.done;u=h.next()){var p=u.value,d=n[c++];\"none\"!==d&&this.adaptor.setStyle(p,\"borderLeft\",\".07em \"+d)}}catch(t){r={error:t}}finally{try{u&&!u.done&&(o=h.return)&&o.call(h)}finally{if(r)throw r.error}}}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}}},e.prototype.handleColumnWidths=function(){var t,e,r,o;try{for(var n=i(this.childNodes),a=n.next();!a.done;a=n.next()){var s=a.value,l=0;try{for(var c=(r=void 0,i(this.adaptor.childNodes(s.chtml))),h=c.next();!h.done;h=c.next()){var u=h.value,p=this.cWidths[l++];if(null!==p){var d=\"number\"==typeof p?this.em(p):p;this.adaptor.setStyle(u,\"width\",d),this.adaptor.setStyle(u,\"maxWidth\",d),this.adaptor.setStyle(u,\"minWidth\",d)}}}catch(t){r={error:t}}finally{try{h&&!h.done&&(o=c.return)&&o.call(c)}finally{if(r)throw r.error}}}}catch(e){t={error:e}}finally{try{a&&!a.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.handleRowSpacing=function(){var t,e,r,o,n=this.childNodes[0]?1/this.childNodes[0].getBBox().rscale:1,a=this.getEmHalfSpacing(this.fSpace[1],this.rSpace,n),s=this.frame,l=0;try{for(var c=i(this.childNodes),h=c.next();!h.done;h=c.next()){var u=h.value,p=a[l++],d=a[l];try{for(var f=(r=void 0,i(u.childNodes)),m=f.next();!m.done;m=f.next()){var y=m.value;(l>1&&\"0.215em\"!==p||s&&1===l)&&this.adaptor.setStyle(y.chtml,\"paddingTop\",p),(l<this.numRows&&\"0.215em\"!==d||s&&l===this.numRows)&&this.adaptor.setStyle(y.chtml,\"paddingBottom\",d)}}catch(t){r={error:t}}finally{try{m&&!m.done&&(o=f.return)&&o.call(f)}finally{if(r)throw r.error}}}}catch(e){t={error:e}}finally{try{h&&!h.done&&(e=c.return)&&e.call(c)}finally{if(t)throw t.error}}},e.prototype.handleRowLines=function(){var t,e,r,o;if(\"none\"!==this.node.attributes.get(\"rowlines\")){var n=this.getRowAttributes(\"rowlines\"),a=0;try{for(var s=i(this.childNodes.slice(1)),l=s.next();!l.done;l=s.next()){var c=l.value,h=n[a++];if(\"none\"!==h)try{for(var u=(r=void 0,i(this.adaptor.childNodes(c.chtml))),p=u.next();!p.done;p=u.next()){var d=p.value;this.adaptor.setStyle(d,\"borderTop\",\".07em \"+h)}}catch(t){r={error:t}}finally{try{p&&!p.done&&(o=u.return)&&o.call(u)}finally{if(r)throw r.error}}}}catch(e){t={error:e}}finally{try{l&&!l.done&&(e=s.return)&&e.call(s)}finally{if(t)throw t.error}}}},e.prototype.handleRowHeights=function(){this.node.attributes.get(\"equalrows\")&&this.handleEqualRows()},e.prototype.handleEqualRows=function(){for(var t=this.getRowHalfSpacing(),e=this.getTableData(),r=e.H,o=e.D,n=e.NH,i=e.ND,a=this.getEqualRowHeight(),s=0;s<this.numRows;s++){var l=this.childNodes[s];this.setRowHeight(l,a+t[s]+t[s+1]+this.rLines[s]),a!==n[s]+i[s]&&this.setRowBaseline(l,a,(a-r[s]+o[s])/2)}},e.prototype.setRowHeight=function(t,e){this.adaptor.setStyle(t.chtml,\"height\",this.em(e))},e.prototype.setRowBaseline=function(t,e,r){var o,n,a=t.node.attributes.get(\"rowalign\");try{for(var s=i(t.childNodes),l=s.next();!l.done;l=s.next()){var c=l.value;if(this.setCellBaseline(c,a,e,r))break}}catch(t){o={error:t}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(o)throw o.error}}},e.prototype.setCellBaseline=function(t,e,r,o){var n=t.node.attributes.get(\"rowalign\");if(\"baseline\"===n||\"axis\"===n){var i=this.adaptor,a=i.lastChild(t.chtml);i.setStyle(a,\"height\",this.em(r)),i.setStyle(a,\"verticalAlign\",this.em(-o));var s=t.parent;if(!(s.node.isKind(\"mlabeledtr\")&&t===s.childNodes[0]||\"baseline\"!==e&&\"axis\"!==e))return!0}return!1},e.prototype.handleFrame=function(){this.frame&&this.fLine&&this.adaptor.setStyle(this.itable,\"border\",\".07em \"+this.node.attributes.get(\"frame\"))},e.prototype.handleWidth=function(){var t=this.adaptor,e=this.getBBox(),r=e.w,o=e.L,n=e.R;t.setStyle(this.chtml,\"minWidth\",this.em(o+r+n));var i=this.node.attributes.get(\"width\");if((0,h.isPercent)(i))t.setStyle(this.chtml,\"width\",\"\"),t.setAttribute(this.chtml,\"width\",\"full\");else if(!this.hasLabels){if(\"auto\"===i)return;i=this.em(this.length2em(i)+2*this.fLine)}var a=t.firstChild(this.chtml);if(t.setStyle(a,\"width\",i),t.setStyle(a,\"minWidth\",this.em(r)),o||n){t.setStyle(this.chtml,\"margin\",\"\");var s=this.node.attributes.get(\"data-width-includes-label\")?\"padding\":\"margin\";o===n?t.setStyle(a,s,\"0 \"+this.em(n)):t.setStyle(a,s,\"0 \"+this.em(n)+\" 0 \"+this.em(o))}t.setAttribute(this.itable,\"width\",\"full\")},e.prototype.handleAlign=function(){var t=a(this.getAlignmentRow(),2),e=t[0],r=t[1];if(null===r)\"axis\"!==e&&this.adaptor.setAttribute(this.chtml,\"align\",e);else{var o=this.getVerticalPosition(r,e);this.adaptor.setAttribute(this.chtml,\"align\",\"top\"),this.adaptor.setStyle(this.chtml,\"verticalAlign\",this.em(o))}},e.prototype.handleJustify=function(){var t=this.getAlignShift()[0];\"center\"!==t&&this.adaptor.setAttribute(this.chtml,\"justify\",t)},e.prototype.handleLabels=function(){if(this.hasLabels){var t=this.labels,e=this.node.attributes,r=this.adaptor,o=e.get(\"side\");r.setAttribute(this.chtml,\"side\",o),r.setAttribute(t,\"align\",o),r.setStyle(t,o,\"0\");var n=a(this.addLabelPadding(o),2),i=n[0],s=n[1];if(s){var l=r.firstChild(this.chtml);this.setIndent(l,i,s)}this.updateRowHeights(),this.addLabelSpacing()}},e.prototype.addLabelPadding=function(t){var e=a(this.getPadAlignShift(t),3),r=e[1],o=e[2],n={};if(\"right\"===t&&!this.node.attributes.get(\"data-width-includes-label\")){var i=this.node.attributes.get(\"width\"),s=this.getBBox(),l=s.w,c=s.L,u=s.R;n.style={width:(0,h.isPercent)(i)?\"calc(\"+i+\" + \"+this.em(c+u)+\")\":this.em(c+l+u)}}return this.adaptor.append(this.chtml,this.html(\"mjx-labels\",n,[this.labels])),[r,o]},e.prototype.updateRowHeights=function(){for(var t=this.getTableData(),e=t.H,r=t.D,o=t.NH,n=t.ND,i=this.getRowHalfSpacing(),a=0;a<this.numRows;a++){var s=this.childNodes[a];this.setRowHeight(s,e[a]+r[a]+i[a]+i[a+1]+this.rLines[a]),e[a]!==o[a]||r[a]!==n[a]?this.setRowBaseline(s,e[a]+r[a],r[a]):s.node.isKind(\"mlabeledtr\")&&this.setCellBaseline(s.childNodes[0],\"\",e[a]+r[a],r[a])}},e.prototype.addLabelSpacing=function(){for(var t=this.adaptor,e=this.node.attributes.get(\"equalrows\"),r=this.getTableData(),o=r.H,n=r.D,i=e?this.getEqualRowHeight():0,a=this.getRowHalfSpacing(),s=this.fLine,l=t.firstChild(this.labels),c=0;c<this.numRows;c++){this.childNodes[c].node.isKind(\"mlabeledtr\")?(s&&t.insert(this.html(\"mjx-mtr\",{style:{height:this.em(s)}}),l),t.setStyle(l,\"height\",this.em((e?i:o[c]+n[c])+a[c]+a[c+1])),l=t.next(l),s=this.rLines[c]):s+=a[c]+(e?i:o[c]+n[c])+a[c+1]+this.rLines[c]}},e.kind=c.MmlMtable.prototype.kind,e.styles={\"mjx-mtable\":{\"vertical-align\":\".25em\",\"text-align\":\"center\",position:\"relative\",\"box-sizing\":\"border-box\",\"border-spacing\":0,\"border-collapse\":\"collapse\"},'mjx-mstyle[size=\"s\"] mjx-mtable':{\"vertical-align\":\".354em\"},\"mjx-labels\":{position:\"absolute\",left:0,top:0},\"mjx-table\":{display:\"inline-block\",\"vertical-align\":\"-.5ex\",\"box-sizing\":\"border-box\"},\"mjx-table > mjx-itable\":{\"vertical-align\":\"middle\",\"text-align\":\"left\",\"box-sizing\":\"border-box\"},\"mjx-labels > mjx-itable\":{position:\"absolute\",top:0},'mjx-mtable[justify=\"left\"]':{\"text-align\":\"left\"},'mjx-mtable[justify=\"right\"]':{\"text-align\":\"right\"},'mjx-mtable[justify=\"left\"][side=\"left\"]':{\"padding-right\":\"0 ! important\"},'mjx-mtable[justify=\"left\"][side=\"right\"]':{\"padding-left\":\"0 ! important\"},'mjx-mtable[justify=\"right\"][side=\"left\"]':{\"padding-right\":\"0 ! important\"},'mjx-mtable[justify=\"right\"][side=\"right\"]':{\"padding-left\":\"0 ! important\"},\"mjx-mtable[align]\":{\"vertical-align\":\"baseline\"},'mjx-mtable[align=\"top\"] > mjx-table':{\"vertical-align\":\"top\"},'mjx-mtable[align=\"bottom\"] > mjx-table':{\"vertical-align\":\"bottom\"},'mjx-mtable[side=\"right\"] mjx-labels':{\"min-width\":\"100%\"}},e}((0,l.CommonMtableMixin)(s.CHTMLWrapper));e.CHTMLmtable=u},8709:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmtd=void 0;var i=r(6617),a=r(7805),s=r(2321),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(e){t.prototype.toCHTML.call(this,e);var r=this.node.attributes.get(\"rowalign\"),o=this.node.attributes.get(\"columnalign\");r!==this.parent.node.attributes.get(\"rowalign\")&&this.adaptor.setAttribute(this.chtml,\"rowalign\",r),\"center\"===o||\"mlabeledtr\"===this.parent.kind&&this===this.parent.childNodes[0]&&o===this.parent.parent.node.attributes.get(\"side\")||this.adaptor.setStyle(this.chtml,\"textAlign\",o),this.parent.parent.node.getProperty(\"useHeight\")&&this.adaptor.append(this.chtml,this.html(\"mjx-tstrut\"))},e.kind=s.MmlMtd.prototype.kind,e.styles={\"mjx-mtd\":{display:\"table-cell\",\"text-align\":\"center\",padding:\".215em .4em\"},\"mjx-mtd:first-child\":{\"padding-left\":0},\"mjx-mtd:last-child\":{\"padding-right\":0},\"mjx-mtable > * > mjx-itable > *:first-child > mjx-mtd\":{\"padding-top\":0},\"mjx-mtable > * > mjx-itable > *:last-child > mjx-mtd\":{\"padding-bottom\":0},\"mjx-tstrut\":{display:\"inline-block\",height:\"1em\",\"vertical-align\":\"-.25em\"},'mjx-labels[align=\"left\"] > mjx-mtr > mjx-mtd':{\"text-align\":\"left\"},'mjx-labels[align=\"right\"] > mjx-mtr > mjx-mtd':{\"text-align\":\"right\"},\"mjx-mtd[extra]\":{padding:0},'mjx-mtd[rowalign=\"top\"]':{\"vertical-align\":\"top\"},'mjx-mtd[rowalign=\"center\"]':{\"vertical-align\":\"middle\"},'mjx-mtd[rowalign=\"bottom\"]':{\"vertical-align\":\"bottom\"},'mjx-mtd[rowalign=\"baseline\"]':{\"vertical-align\":\"baseline\"},'mjx-mtd[rowalign=\"axis\"]':{\"vertical-align\":\".25em\"}},e}((0,a.CommonMtdMixin)(i.CHTMLWrapper));e.CHTMLmtd=l},6359:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmtext=void 0;var i=r(6617),a=r(8325),s=r(6277),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlMtext.prototype.kind,e}((0,a.CommonMtextMixin)(i.CHTMLWrapper));e.CHTMLmtext=l},7500:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmlabeledtr=e.CHTMLmtr=void 0;var i=r(6617),a=r(4818),s=r(4818),l=r(4393),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(e){t.prototype.toCHTML.call(this,e);var r=this.node.attributes.get(\"rowalign\");\"baseline\"!==r&&this.adaptor.setAttribute(this.chtml,\"rowalign\",r)},e.kind=l.MmlMtr.prototype.kind,e.styles={\"mjx-mtr\":{display:\"table-row\"},'mjx-mtr[rowalign=\"top\"] > mjx-mtd':{\"vertical-align\":\"top\"},'mjx-mtr[rowalign=\"center\"] > mjx-mtd':{\"vertical-align\":\"middle\"},'mjx-mtr[rowalign=\"bottom\"] > mjx-mtd':{\"vertical-align\":\"bottom\"},'mjx-mtr[rowalign=\"baseline\"] > mjx-mtd':{\"vertical-align\":\"baseline\"},'mjx-mtr[rowalign=\"axis\"] > mjx-mtd':{\"vertical-align\":\".25em\"}},e}((0,a.CommonMtrMixin)(i.CHTMLWrapper));e.CHTMLmtr=c;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(e){t.prototype.toCHTML.call(this,e);var r=this.adaptor.firstChild(this.chtml);if(r){this.adaptor.remove(r);var o=this.node.attributes.get(\"rowalign\"),n=\"baseline\"!==o&&\"axis\"!==o?{rowalign:o}:{},i=this.html(\"mjx-mtr\",n,[r]);this.adaptor.append(this.parent.labels,i)}},e.prototype.markUsed=function(){t.prototype.markUsed.call(this),this.jax.wrapperUsage.add(c.kind)},e.kind=l.MmlMlabeledtr.prototype.kind,e.styles={\"mjx-mlabeledtr\":{display:\"table-row\"},'mjx-mlabeledtr[rowalign=\"top\"] > mjx-mtd':{\"vertical-align\":\"top\"},'mjx-mlabeledtr[rowalign=\"center\"] > mjx-mtd':{\"vertical-align\":\"middle\"},'mjx-mlabeledtr[rowalign=\"bottom\"] > mjx-mtd':{\"vertical-align\":\"bottom\"},'mjx-mlabeledtr[rowalign=\"baseline\"] > mjx-mtd':{\"vertical-align\":\"baseline\"},'mjx-mlabeledtr[rowalign=\"axis\"] > mjx-mtd':{\"vertical-align\":\".25em\"}},e}((0,s.CommonMlabeledtrMixin)(c));e.CHTMLmlabeledtr=h},6577:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLmunderover=e.CHTMLmover=e.CHTMLmunder=void 0;var i=r(513),a=r(9690),s=r(9690),l=r(9690),c=r(3102),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(e){if(this.hasMovableLimits())return t.prototype.toCHTML.call(this,e),void this.adaptor.setAttribute(this.chtml,\"limits\",\"false\");this.chtml=this.standardCHTMLnode(e);var r=this.adaptor.append(this.adaptor.append(this.chtml,this.html(\"mjx-row\")),this.html(\"mjx-base\")),o=this.adaptor.append(this.adaptor.append(this.chtml,this.html(\"mjx-row\")),this.html(\"mjx-under\"));this.baseChild.toCHTML(r),this.scriptChild.toCHTML(o);var n=this.baseChild.getOuterBBox(),i=this.scriptChild.getOuterBBox(),a=this.getUnderKV(n,i)[0],s=this.isLineBelow?0:this.getDelta(!0);this.adaptor.setStyle(o,\"paddingTop\",this.em(a)),this.setDeltaW([r,o],this.getDeltaW([n,i],[0,-s])),this.adjustUnderDepth(o,i)},e.kind=c.MmlMunder.prototype.kind,e.styles={\"mjx-over\":{\"text-align\":\"left\"},'mjx-munder:not([limits=\"false\"])':{display:\"inline-table\"},\"mjx-munder > mjx-row\":{\"text-align\":\"left\"},\"mjx-under\":{\"padding-bottom\":\".1em\"}},e}((0,a.CommonMunderMixin)(i.CHTMLmsub));e.CHTMLmunder=h;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(e){if(this.hasMovableLimits())return t.prototype.toCHTML.call(this,e),void this.adaptor.setAttribute(this.chtml,\"limits\",\"false\");this.chtml=this.standardCHTMLnode(e);var r=this.adaptor.append(this.chtml,this.html(\"mjx-over\")),o=this.adaptor.append(this.chtml,this.html(\"mjx-base\"));this.scriptChild.toCHTML(r),this.baseChild.toCHTML(o);var n=this.scriptChild.getOuterBBox(),i=this.baseChild.getOuterBBox();this.adjustBaseHeight(o,i);var a=this.getOverKU(i,n)[0],s=this.isLineAbove?0:this.getDelta();this.adaptor.setStyle(r,\"paddingBottom\",this.em(a)),this.setDeltaW([o,r],this.getDeltaW([i,n],[0,s])),this.adjustOverDepth(r,n)},e.kind=c.MmlMover.prototype.kind,e.styles={'mjx-mover:not([limits=\"false\"])':{\"padding-top\":\".1em\"},'mjx-mover:not([limits=\"false\"]) > *':{display:\"block\",\"text-align\":\"left\"}},e}((0,s.CommonMoverMixin)(i.CHTMLmsup));e.CHTMLmover=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(e){if(this.hasMovableLimits())return t.prototype.toCHTML.call(this,e),void this.adaptor.setAttribute(this.chtml,\"limits\",\"false\");this.chtml=this.standardCHTMLnode(e);var r=this.adaptor.append(this.chtml,this.html(\"mjx-over\")),o=this.adaptor.append(this.adaptor.append(this.chtml,this.html(\"mjx-box\")),this.html(\"mjx-munder\")),n=this.adaptor.append(this.adaptor.append(o,this.html(\"mjx-row\")),this.html(\"mjx-base\")),i=this.adaptor.append(this.adaptor.append(o,this.html(\"mjx-row\")),this.html(\"mjx-under\"));this.overChild.toCHTML(r),this.baseChild.toCHTML(n),this.underChild.toCHTML(i);var a=this.overChild.getOuterBBox(),s=this.baseChild.getOuterBBox(),l=this.underChild.getOuterBBox();this.adjustBaseHeight(n,s);var c=this.getOverKU(s,a)[0],h=this.getUnderKV(s,l)[0],u=this.getDelta();this.adaptor.setStyle(r,\"paddingBottom\",this.em(c)),this.adaptor.setStyle(i,\"paddingTop\",this.em(h)),this.setDeltaW([n,i,r],this.getDeltaW([s,l,a],[0,this.isLineBelow?0:-u,this.isLineAbove?0:u])),this.adjustOverDepth(r,a),this.adjustUnderDepth(i,l)},e.prototype.markUsed=function(){t.prototype.markUsed.call(this),this.jax.wrapperUsage.add(i.CHTMLmsubsup.kind)},e.kind=c.MmlMunderover.prototype.kind,e.styles={'mjx-munderover:not([limits=\"false\"])':{\"padding-top\":\".1em\"},'mjx-munderover:not([limits=\"false\"]) > *':{display:\"block\"}},e}((0,l.CommonMunderoverMixin)(i.CHTMLmsubsup));e.CHTMLmunderover=p},7322:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLscriptbase=void 0;var s=r(6617),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){this.chtml=this.standardCHTMLnode(t);var e=i(this.getOffset(),2),r=e[0],o=e[1],n=r-(this.baseRemoveIc?this.baseIc:0),a={\"vertical-align\":this.em(o)};n&&(a[\"margin-left\"]=this.em(n)),this.baseChild.toCHTML(this.chtml),this.scriptChild.toCHTML(this.adaptor.append(this.chtml,this.html(\"mjx-script\",{style:a})))},e.prototype.setDeltaW=function(t,e){for(var r=0;r<e.length;r++)e[r]&&this.adaptor.setStyle(t[r],\"paddingLeft\",this.em(e[r]))},e.prototype.adjustOverDepth=function(t,e){e.d>=0||this.adaptor.setStyle(t,\"marginBottom\",this.em(e.d*e.rscale))},e.prototype.adjustUnderDepth=function(t,e){var r,o;if(!(e.d>=0)){var n=this.adaptor,i=this.em(e.d),s=this.html(\"mjx-box\",{style:{\"margin-bottom\":i,\"vertical-align\":i}});try{for(var l=a(n.childNodes(n.firstChild(t))),c=l.next();!c.done;c=l.next()){var h=c.value;n.append(s,h)}}catch(t){r={error:t}}finally{try{c&&!c.done&&(o=l.return)&&o.call(l)}finally{if(r)throw r.error}}n.append(n.firstChild(t),s)}},e.prototype.adjustBaseHeight=function(t,e){if(this.node.attributes.get(\"accent\")){var r=this.font.params.x_height*e.scale;e.h<r&&(this.adaptor.setStyle(t,\"paddingTop\",this.em(r-e.h)),e.h=r)}},e.kind=\"scriptbase\",e}((0,r(7091).CommonScriptbaseMixin)(s.CHTMLWrapper));e.CHTMLscriptbase=l},7795:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CHTMLxml=e.CHTMLannotationXML=e.CHTMLannotation=e.CHTMLsemantics=void 0;var i=r(6617),a=r(3191),s=r(9167),l=r(8921),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t);this.childNodes.length&&this.childNodes[0].toCHTML(e)},e.kind=s.MmlSemantics.prototype.kind,e}((0,a.CommonSemanticsMixin)(i.CHTMLWrapper));e.CHTMLsemantics=c;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(e){t.prototype.toCHTML.call(this,e)},e.prototype.computeBBox=function(){return this.bbox},e.kind=s.MmlAnnotation.prototype.kind,e}(i.CHTMLWrapper);e.CHTMLannotation=h;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlAnnotationXML.prototype.kind,e.styles={\"mjx-annotation-xml\":{\"font-family\":\"initial\",\"line-height\":\"normal\"}},e}(i.CHTMLWrapper);e.CHTMLannotationXML=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toCHTML=function(t){this.chtml=this.adaptor.append(t,this.adaptor.clone(this.node.getXML()))},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.jax.measureXMLnode(this.node.getXML()),o=r.w,n=r.h,i=r.d;t.w=o,t.h=n,t.d=i},e.prototype.getStyles=function(){},e.prototype.getScale=function(){},e.prototype.getVariant=function(){},e.kind=l.XMLNode.prototype.kind,e.autoStyle=!1,e}(i.CHTMLWrapper);e.CHTMLxml=p},9250:function(t,e,r){var o=this&&this.__assign||function(){return o=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},o.apply(this,arguments)},n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FontData=e.NOSTRETCH=e.H=e.V=void 0;var s=r(9077);e.V=1,e.H=2,e.NOSTRETCH={dir:0};var l=function(){function t(t){var e,r,l,c;void 0===t&&(t=null),this.variant={},this.delimiters={},this.cssFontMap={},this.remapChars={},this.skewIcFactor=.75;var h=this.constructor;this.options=(0,s.userOptions)((0,s.defaultOptions)({},h.OPTIONS),t),this.params=o({},h.defaultParams),this.sizeVariants=i([],n(h.defaultSizeVariants),!1),this.stretchVariants=i([],n(h.defaultStretchVariants),!1),this.cssFontMap=o({},h.defaultCssFonts);try{for(var u=a(Object.keys(this.cssFontMap)),p=u.next();!p.done;p=u.next()){var d=p.value;\"unknown\"===this.cssFontMap[d][0]&&(this.cssFontMap[d][0]=this.options.unknownFamily)}}catch(t){e={error:t}}finally{try{p&&!p.done&&(r=u.return)&&r.call(u)}finally{if(e)throw e.error}}this.cssFamilyPrefix=h.defaultCssFamilyPrefix,this.createVariants(h.defaultVariants),this.defineDelimiters(h.defaultDelimiters);try{for(var f=a(Object.keys(h.defaultChars)),m=f.next();!m.done;m=f.next()){var y=m.value;this.defineChars(y,h.defaultChars[y])}}catch(t){l={error:t}}finally{try{m&&!m.done&&(c=f.return)&&c.call(f)}finally{if(l)throw l.error}}this.defineRemap(\"accent\",h.defaultAccentMap),this.defineRemap(\"mo\",h.defaultMoMap),this.defineRemap(\"mn\",h.defaultMnMap)}return t.charOptions=function(t,e){var r=t[e];return 3===r.length&&(r[3]={}),r[3]},Object.defineProperty(t.prototype,\"styles\",{get:function(){return this._styles},set:function(t){this._styles=t},enumerable:!1,configurable:!0}),t.prototype.createVariant=function(t,e,r){void 0===e&&(e=null),void 0===r&&(r=null);var o={linked:[],chars:e?Object.create(this.variant[e].chars):{}};r&&this.variant[r]&&(Object.assign(o.chars,this.variant[r].chars),this.variant[r].linked.push(o.chars),o.chars=Object.create(o.chars)),this.remapSmpChars(o.chars,t),this.variant[t]=o},t.prototype.remapSmpChars=function(t,e){var r,o,i,s,l=this.constructor;if(l.VariantSmp[e]){var c=l.SmpRemap,h=[null,null,l.SmpRemapGreekU,l.SmpRemapGreekL];try{for(var u=a(l.SmpRanges),p=u.next();!p.done;p=u.next()){var d=n(p.value,3),f=d[0],m=d[1],y=d[2],v=l.VariantSmp[e][f];if(v){for(var b=m;b<=y;b++)if(930!==b){var g=v+b-m;t[b]=this.smpChar(c[g]||g)}if(h[f])try{for(var x=(i=void 0,a(Object.keys(h[f]).map((function(t){return parseInt(t)})))),M=x.next();!M.done;M=x.next()){t[b=M.value]=this.smpChar(v+h[f][b])}}catch(t){i={error:t}}finally{try{M&&!M.done&&(s=x.return)&&s.call(x)}finally{if(i)throw i.error}}}}}catch(t){r={error:t}}finally{try{p&&!p.done&&(o=u.return)&&o.call(u)}finally{if(r)throw r.error}}}\"bold\"===e&&(t[988]=this.smpChar(120778),t[989]=this.smpChar(120779))},t.prototype.smpChar=function(t){return[,,,{smp:t}]},t.prototype.createVariants=function(t){var e,r;try{for(var o=a(t),n=o.next();!n.done;n=o.next()){var i=n.value;this.createVariant(i[0],i[1],i[2])}}catch(t){e={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},t.prototype.defineChars=function(t,e){var r,o,n=this.variant[t];Object.assign(n.chars,e);try{for(var i=a(n.linked),s=i.next();!s.done;s=i.next()){var l=s.value;Object.assign(l,e)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(o=i.return)&&o.call(i)}finally{if(r)throw r.error}}},t.prototype.defineDelimiters=function(t){Object.assign(this.delimiters,t)},t.prototype.defineRemap=function(t,e){this.remapChars.hasOwnProperty(t)||(this.remapChars[t]={}),Object.assign(this.remapChars[t],e)},t.prototype.getDelimiter=function(t){return this.delimiters[t]},t.prototype.getSizeVariant=function(t,e){return this.delimiters[t].variants&&(e=this.delimiters[t].variants[e]),this.sizeVariants[e]},t.prototype.getStretchVariant=function(t,e){return this.stretchVariants[this.delimiters[t].stretchv?this.delimiters[t].stretchv[e]:0]},t.prototype.getChar=function(t,e){return this.variant[t].chars[e]},t.prototype.getVariant=function(t){return this.variant[t]},t.prototype.getCssFont=function(t){return this.cssFontMap[t]||[\"serif\",!1,!1]},t.prototype.getFamily=function(t){return this.cssFamilyPrefix?this.cssFamilyPrefix+\", \"+t:t},t.prototype.getRemappedChar=function(t,e){return(this.remapChars[t]||{})[e]},t.OPTIONS={unknownFamily:\"serif\"},t.JAX=\"common\",t.NAME=\"\",t.defaultVariants=[[\"normal\"],[\"bold\",\"normal\"],[\"italic\",\"normal\"],[\"bold-italic\",\"italic\",\"bold\"],[\"double-struck\",\"bold\"],[\"fraktur\",\"normal\"],[\"bold-fraktur\",\"bold\",\"fraktur\"],[\"script\",\"italic\"],[\"bold-script\",\"bold-italic\",\"script\"],[\"sans-serif\",\"normal\"],[\"bold-sans-serif\",\"bold\",\"sans-serif\"],[\"sans-serif-italic\",\"italic\",\"sans-serif\"],[\"sans-serif-bold-italic\",\"bold-italic\",\"bold-sans-serif\"],[\"monospace\",\"normal\"]],t.defaultCssFonts={normal:[\"unknown\",!1,!1],bold:[\"unknown\",!1,!0],italic:[\"unknown\",!0,!1],\"bold-italic\":[\"unknown\",!0,!0],\"double-struck\":[\"unknown\",!1,!0],fraktur:[\"unknown\",!1,!1],\"bold-fraktur\":[\"unknown\",!1,!0],script:[\"cursive\",!1,!1],\"bold-script\":[\"cursive\",!1,!0],\"sans-serif\":[\"sans-serif\",!1,!1],\"bold-sans-serif\":[\"sans-serif\",!1,!0],\"sans-serif-italic\":[\"sans-serif\",!0,!1],\"sans-serif-bold-italic\":[\"sans-serif\",!0,!0],monospace:[\"monospace\",!1,!1]},t.defaultCssFamilyPrefix=\"\",t.VariantSmp={bold:[119808,119834,120488,120514,120782],italic:[119860,119886,120546,120572],\"bold-italic\":[119912,119938,120604,120630],script:[119964,119990],\"bold-script\":[120016,120042],fraktur:[120068,120094],\"double-struck\":[120120,120146,,,120792],\"bold-fraktur\":[120172,120198],\"sans-serif\":[120224,120250,,,120802],\"bold-sans-serif\":[120276,120302,120662,120688,120812],\"sans-serif-italic\":[120328,120354],\"sans-serif-bold-italic\":[120380,120406,120720,120746],monospace:[120432,120458,,,120822]},t.SmpRanges=[[0,65,90],[1,97,122],[2,913,937],[3,945,969],[4,48,57]],t.SmpRemap={119893:8462,119965:8492,119968:8496,119969:8497,119971:8459,119972:8464,119975:8466,119976:8499,119981:8475,119994:8495,119996:8458,120004:8500,120070:8493,120075:8460,120076:8465,120085:8476,120093:8488,120122:8450,120127:8461,120133:8469,120135:8473,120136:8474,120137:8477,120145:8484},t.SmpRemapGreekU={8711:25,1012:17},t.SmpRemapGreekL={977:27,981:29,982:31,1008:28,1009:30,1013:26,8706:25},t.defaultAccentMap={768:\"\\u02cb\",769:\"\\u02ca\",770:\"\\u02c6\",771:\"\\u02dc\",772:\"\\u02c9\",774:\"\\u02d8\",775:\"\\u02d9\",776:\"\\xa8\",778:\"\\u02da\",780:\"\\u02c7\",8594:\"\\u20d7\",8242:\"'\",8243:\"''\",8244:\"'''\",8245:\"`\",8246:\"``\",8247:\"```\",8279:\"''''\",8400:\"\\u21bc\",8401:\"\\u21c0\",8406:\"\\u2190\",8417:\"\\u2194\",8432:\"*\",8411:\"...\",8412:\"....\",8428:\"\\u21c1\",8429:\"\\u21bd\",8430:\"\\u2190\",8431:\"\\u2192\"},t.defaultMoMap={45:\"\\u2212\"},t.defaultMnMap={45:\"\\u2212\"},t.defaultParams={x_height:.442,quad:1,num1:.676,num2:.394,num3:.444,denom1:.686,denom2:.345,sup1:.413,sup2:.363,sup3:.289,sub1:.15,sub2:.247,sup_drop:.386,sub_drop:.05,delim1:2.39,delim2:1,axis_height:.25,rule_thickness:.06,big_op_spacing1:.111,big_op_spacing2:.167,big_op_spacing3:.2,big_op_spacing4:.6,big_op_spacing5:.1,surd_height:.075,scriptspace:.05,nulldelimiterspace:.12,delimiterfactor:901,delimitershortfall:.3,min_rule_thickness:1.25,separation_factor:1.75,extra_ic:.033},t.defaultDelimiters={},t.defaultChars={},t.defaultSizeVariants=[],t.defaultStretchVariants=[],t}();e.FontData=l},5373:function(t,e){var r=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonArrow=e.CommonDiagonalArrow=e.CommonDiagonalStrike=e.CommonBorder2=e.CommonBorder=e.arrowBBox=e.diagonalArrowDef=e.arrowDef=e.arrowBBoxW=e.arrowBBoxHD=e.arrowHead=e.fullBorder=e.fullPadding=e.fullBBox=e.sideNames=e.sideIndex=e.SOLID=e.PADDING=e.THICKNESS=e.ARROWY=e.ARROWDX=e.ARROWX=void 0,e.ARROWX=4,e.ARROWDX=1,e.ARROWY=2,e.THICKNESS=.067,e.PADDING=.2,e.SOLID=e.THICKNESS+\"em solid\",e.sideIndex={top:0,right:1,bottom:2,left:3},e.sideNames=Object.keys(e.sideIndex),e.fullBBox=function(t){return new Array(4).fill(t.thickness+t.padding)},e.fullPadding=function(t){return new Array(4).fill(t.padding)},e.fullBorder=function(t){return new Array(4).fill(t.thickness)};e.arrowHead=function(t){return Math.max(t.padding,t.thickness*(t.arrowhead.x+t.arrowhead.dx+1))};e.arrowBBoxHD=function(t,e){if(t.childNodes[0]){var r=t.childNodes[0].getBBox(),o=r.h,n=r.d;e[0]=e[2]=Math.max(0,t.thickness*t.arrowhead.y-(o+n)/2)}return e};e.arrowBBoxW=function(t,e){if(t.childNodes[0]){var r=t.childNodes[0].getBBox().w;e[1]=e[3]=Math.max(0,t.thickness*t.arrowhead.y-r/2)}return e},e.arrowDef={up:[-Math.PI/2,!1,!0,\"verticalstrike\"],down:[Math.PI/2,!1,!0,\"verticakstrike\"],right:[0,!1,!1,\"horizontalstrike\"],left:[Math.PI,!1,!1,\"horizontalstrike\"],updown:[Math.PI/2,!0,!0,\"verticalstrike uparrow downarrow\"],leftright:[0,!0,!1,\"horizontalstrike leftarrow rightarrow\"]},e.diagonalArrowDef={updiagonal:[-1,0,!1,\"updiagonalstrike northeastarrow\"],northeast:[-1,0,!1,\"updiagonalstrike updiagonalarrow\"],southeast:[1,0,!1,\"downdiagonalstrike\"],northwest:[1,Math.PI,!1,\"downdiagonalstrike\"],southwest:[-1,Math.PI,!1,\"updiagonalstrike\"],northeastsouthwest:[-1,0,!0,\"updiagonalstrike northeastarrow updiagonalarrow southwestarrow\"],northwestsoutheast:[1,0,!0,\"downdiagonalstrike northwestarrow southeastarrow\"]},e.arrowBBox={up:function(t){return(0,e.arrowBBoxW)(t,[(0,e.arrowHead)(t),0,t.padding,0])},down:function(t){return(0,e.arrowBBoxW)(t,[t.padding,0,(0,e.arrowHead)(t),0])},right:function(t){return(0,e.arrowBBoxHD)(t,[0,(0,e.arrowHead)(t),0,t.padding])},left:function(t){return(0,e.arrowBBoxHD)(t,[0,t.padding,0,(0,e.arrowHead)(t)])},updown:function(t){return(0,e.arrowBBoxW)(t,[(0,e.arrowHead)(t),0,(0,e.arrowHead)(t),0])},leftright:function(t){return(0,e.arrowBBoxHD)(t,[0,(0,e.arrowHead)(t),0,(0,e.arrowHead)(t)])}};e.CommonBorder=function(t){return function(r){var o=e.sideIndex[r];return[r,{renderer:t,bbox:function(t){var e=[0,0,0,0];return e[o]=t.thickness+t.padding,e},border:function(t){var e=[0,0,0,0];return e[o]=t.thickness,e}}]}};e.CommonBorder2=function(t){return function(r,o,n){var i=e.sideIndex[o],a=e.sideIndex[n];return[r,{renderer:t,bbox:function(t){var e=t.thickness+t.padding,r=[0,0,0,0];return r[i]=r[a]=e,r},border:function(t){var e=[0,0,0,0];return e[i]=e[a]=t.thickness,e},remove:o+\" \"+n}]}};e.CommonDiagonalStrike=function(t){return function(r){var o=\"mjx-\"+r.charAt(0)+\"strike\";return[r+\"diagonalstrike\",{renderer:t(o),bbox:e.fullBBox}]}};e.CommonDiagonalArrow=function(t){return function(o){var n=r(e.diagonalArrowDef[o],4),i=n[0],a=n[1],s=n[2];return[o+\"arrow\",{renderer:function(e,o){var n=r(e.arrowAW(),2),l=n[0],c=n[1],h=e.arrow(c,i*(l-a),s);t(e,h)},bbox:function(t){var e=t.arrowData(),o=e.a,n=e.x,i=e.y,a=r([t.arrowhead.x,t.arrowhead.y,t.arrowhead.dx],3),s=a[0],l=a[1],c=a[2],h=r(t.getArgMod(s+c,l),2),u=h[0],p=h[1],d=i+(u>o?t.thickness*p*Math.sin(u-o):0),f=n+(u>Math.PI/2-o?t.thickness*p*Math.sin(u+o-Math.PI/2):0);return[d,f,d,f]},remove:n[3]}]}};e.CommonArrow=function(t){return function(o){var n=r(e.arrowDef[o],4),i=n[0],a=n[1],s=n[2],l=n[3];return[o+\"arrow\",{renderer:function(e,o){var n=e.getBBox(),l=n.w,c=n.h,h=n.d,u=r(s?[c+h,\"X\"]:[l,\"Y\"],2),p=u[0],d=u[1],f=e.getOffset(d),m=e.arrow(p,i,a,d,f);t(e,m)},bbox:e.arrowBBox[o],remove:l}]}}},716:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},i.apply(this,arguments)},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonOutputJax=void 0;var l=r(3985),c=r(4769),h=r(9077),u=r(6914),p=r(5878),d=r(5888),f=function(t){function e(e,r,o){void 0===e&&(e=null),void 0===r&&(r=null),void 0===o&&(o=null);var n=this,i=a((0,h.separateOptions)(e,o.OPTIONS),2),s=i[0],l=i[1];return(n=t.call(this,s)||this).factory=n.options.wrapperFactory||new r,n.factory.jax=n,n.cssStyles=n.options.cssStyles||new d.CssStyles,n.font=n.options.font||new o(l),n.unknownCache=new Map,n}return n(e,t),e.prototype.typeset=function(t,e){this.setDocument(e);var r=this.createNode();return this.toDOM(t,r,e),r},e.prototype.createNode=function(){var t=this.constructor.NAME;return this.html(\"mjx-container\",{class:\"MathJax\",jax:t})},e.prototype.setScale=function(t){var e=this.math.metrics.scale*this.options.scale;1!==e&&this.adaptor.setStyle(t,\"fontSize\",(0,u.percent)(e))},e.prototype.toDOM=function(t,e,r){void 0===r&&(r=null),this.setDocument(r),this.math=t,this.pxPerEm=t.metrics.ex/this.font.params.x_height,t.root.setTeXclass(null),this.setScale(e),this.nodeMap=new Map,this.container=e,this.processMath(t.root,e),this.nodeMap=null,this.executeFilters(this.postFilters,t,r,e)},e.prototype.getBBox=function(t,e){this.setDocument(e),this.math=t,t.root.setTeXclass(null),this.nodeMap=new Map;var r=this.factory.wrap(t.root).getOuterBBox();return this.nodeMap=null,r},e.prototype.getMetrics=function(t){var e,r;this.setDocument(t);var o=this.adaptor,n=this.getMetricMaps(t);try{for(var i=s(t.math),a=i.next();!a.done;a=i.next()){var l=a.value,h=o.parent(l.start.node);if(l.state()<c.STATE.METRICS&&h){var u=n[l.display?1:0].get(h),p=u.em,d=u.ex,f=u.containerWidth,m=u.lineWidth,y=u.scale,v=u.family;l.setMetrics(p,d,f,m,y),this.options.mtextInheritFont&&(l.outputData.mtextFamily=v),this.options.merrorInheritFont&&(l.outputData.merrorFamily=v),l.state(c.STATE.METRICS)}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},e.prototype.getMetricsFor=function(t,e){var r=this.options.mtextInheritFont||this.options.merrorInheritFont,o=this.getTestElement(t,e),n=this.measureMetrics(o,r);return this.adaptor.remove(o),n},e.prototype.getMetricMaps=function(t){var e,r,o,n,i,a,l,h,u,p,d=this.adaptor,f=[new Map,new Map];try{for(var m=s(t.math),y=m.next();!y.done;y=m.next()){var v=y.value;if((O=d.parent(v.start.node))&&v.state()<c.STATE.METRICS){var b=f[v.display?1:0];b.has(O)||b.set(O,this.getTestElement(O,v.display))}}}catch(t){e={error:t}}finally{try{y&&!y.done&&(r=m.return)&&r.call(m)}finally{if(e)throw e.error}}var g=this.options.mtextInheritFont||this.options.merrorInheritFont,x=[new Map,new Map];try{for(var M=s(x.keys()),_=M.next();!_.done;_=M.next()){var w=_.value;try{for(var j=(i=void 0,s(f[w].keys())),C=j.next();!C.done;C=j.next()){var O=C.value;x[w].set(O,this.measureMetrics(f[w].get(O),g))}}catch(t){i={error:t}}finally{try{C&&!C.done&&(a=j.return)&&a.call(j)}finally{if(i)throw i.error}}}}catch(t){o={error:t}}finally{try{_&&!_.done&&(n=M.return)&&n.call(M)}finally{if(o)throw o.error}}try{for(var S=s(x.keys()),T=S.next();!T.done;T=S.next()){w=T.value;try{for(var B=(u=void 0,s(f[w].values())),L=B.next();!L.done;L=B.next()){O=L.value;d.remove(O)}}catch(t){u={error:t}}finally{try{L&&!L.done&&(p=B.return)&&p.call(B)}finally{if(u)throw u.error}}}}catch(t){l={error:t}}finally{try{T&&!T.done&&(h=S.return)&&h.call(S)}finally{if(l)throw l.error}}return x},e.prototype.getTestElement=function(t,e){var r=this.adaptor;if(!this.testInline){this.testInline=this.html(\"mjx-test\",{style:{display:\"inline-block\",width:\"100%\",\"font-style\":\"normal\",\"font-weight\":\"normal\",\"font-size\":\"100%\",\"font-size-adjust\":\"none\",\"text-indent\":0,\"text-transform\":\"none\",\"letter-spacing\":\"normal\",\"word-spacing\":\"normal\",overflow:\"hidden\",height:\"1px\",\"margin-right\":\"-1px\"}},[this.html(\"mjx-left-box\",{style:{display:\"inline-block\",width:0,float:\"left\"}}),this.html(\"mjx-ex-box\",{style:{position:\"absolute\",overflow:\"hidden\",width:\"1px\",height:\"60ex\"}}),this.html(\"mjx-right-box\",{style:{display:\"inline-block\",width:0,float:\"right\"}})]),this.testDisplay=r.clone(this.testInline),r.setStyle(this.testDisplay,\"display\",\"table\"),r.setStyle(this.testDisplay,\"margin-right\",\"\"),r.setStyle(r.firstChild(this.testDisplay),\"display\",\"none\");var o=r.lastChild(this.testDisplay);r.setStyle(o,\"display\",\"table-cell\"),r.setStyle(o,\"width\",\"10000em\"),r.setStyle(o,\"float\",\"\")}return r.append(t,r.clone(e?this.testDisplay:this.testInline))},e.prototype.measureMetrics=function(t,e){var r=this.adaptor,o=e?r.fontFamily(t):\"\",n=r.fontSize(t),i=a(r.nodeSize(r.childNode(t,1)),2),s=i[0],l=i[1],c=s?l/60:n*this.options.exFactor;return{em:n,ex:c,containerWidth:s?\"table\"===r.getStyle(t,\"display\")?r.nodeSize(r.lastChild(t))[0]-1:r.nodeBBox(r.lastChild(t)).left-r.nodeBBox(r.firstChild(t)).left-2:1e6,lineWidth:1e6,scale:Math.max(this.options.minScale,this.options.matchFontHeight?c/this.font.params.x_height/n:1),family:o}},e.prototype.styleSheet=function(t){var e,r;if(this.setDocument(t),this.cssStyles.clear(),this.cssStyles.addStyles(this.constructor.commonStyles),\"getStyles\"in t)try{for(var o=s(t.getStyles()),n=o.next();!n.done;n=o.next()){var i=n.value;this.cssStyles.addStyles(i)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return this.addWrapperStyles(this.cssStyles),this.addFontStyles(this.cssStyles),this.html(\"style\",{id:\"MJX-styles\"},[this.text(\"\\n\"+this.cssStyles.cssText+\"\\n\")])},e.prototype.addFontStyles=function(t){t.addStyles(this.font.styles)},e.prototype.addWrapperStyles=function(t){var e,r;try{for(var o=s(this.factory.getKinds()),n=o.next();!n.done;n=o.next()){var i=n.value;this.addClassStyles(this.factory.getNodeClass(i),t)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},e.prototype.addClassStyles=function(t,e){e.addStyles(t.styles)},e.prototype.setDocument=function(t){t&&(this.document=t,this.adaptor.document=t.document)},e.prototype.html=function(t,e,r,o){return void 0===e&&(e={}),void 0===r&&(r=[]),this.adaptor.node(t,e,r,o)},e.prototype.text=function(t){return this.adaptor.text(t)},e.prototype.fixed=function(t,e){return void 0===e&&(e=3),Math.abs(t)<6e-4?\"0\":t.toFixed(e).replace(/\\.?0+$/,\"\")},e.prototype.measureText=function(t,e,r){void 0===r&&(r=[\"\",!1,!1]);var o=this.unknownText(t,e);if(\"-explicitFont\"===e){var n=this.cssFontStyles(r);this.adaptor.setAttributes(o,{style:n})}return this.measureTextNodeWithCache(o,t,e,r)},e.prototype.measureTextNodeWithCache=function(t,e,r,o){void 0===o&&(o=[\"\",!1,!1]),\"-explicitFont\"===r&&(r=[o[0],o[1]?\"T\":\"F\",o[2]?\"T\":\"F\",\"\"].join(\"-\")),this.unknownCache.has(r)||this.unknownCache.set(r,new Map);var n=this.unknownCache.get(r),i=n.get(e);if(i)return i;var a=this.measureTextNode(t);return n.set(e,a),a},e.prototype.measureXMLnode=function(t){var e=this.adaptor,r=this.html(\"mjx-xml-block\",{style:{display:\"inline-block\"}},[e.clone(t)]),o=this.html(\"mjx-baseline\",{style:{display:\"inline-block\",width:0,height:0}}),n=this.html(\"mjx-measure-xml\",{style:{position:\"absolute\",display:\"inline-block\",\"font-family\":\"initial\",\"line-height\":\"normal\"}},[o,r]);e.append(e.parent(this.math.start.node),this.container),e.append(this.container,n);var i=this.math.metrics.em*this.math.metrics.scale,a=e.nodeBBox(r),s=a.left,l=a.right,c=a.bottom,h=a.top,u=(l-s)/i,p=(e.nodeBBox(o).top-h)/i,d=(c-h)/i-p;return e.remove(this.container),e.remove(n),{w:u,h:p,d:d}},e.prototype.cssFontStyles=function(t,e){void 0===e&&(e={});var r=a(t,3),o=r[0],n=r[1],i=r[2];return e[\"font-family\"]=this.font.getFamily(o),n&&(e[\"font-style\"]=\"italic\"),i&&(e[\"font-weight\"]=\"bold\"),e},e.prototype.getFontData=function(t){return t||(t=new p.Styles),[this.font.getFamily(t.get(\"font-family\")),\"italic\"===t.get(\"font-style\"),\"bold\"===t.get(\"font-weight\")]},e.NAME=\"Common\",e.OPTIONS=i(i({},l.AbstractOutputJax.OPTIONS),{scale:1,minScale:.5,mtextInheritFont:!1,merrorInheritFont:!1,mtextFont:\"\",merrorFont:\"serif\",mathmlSpacing:!1,skipAttributes:{},exFactor:.5,displayAlign:\"center\",displayIndent:\"0\",wrapperFactory:null,font:null,cssStyles:null}),e.commonStyles={},e}(l.AbstractOutputJax);e.CommonOutputJax=f},1541:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return a(e,t),e},l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},c=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},h=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonWrapper=void 0;var u=r(9879),p=r(8921),d=r(6720),f=s(r(6914)),m=r(5878),y=r(3717),v=r(9250),b=2/18;function g(t,e){return t?e<b?0:b:e}var x=function(t){function e(e,r,o){void 0===o&&(o=null);var n=t.call(this,e,r)||this;return n.parent=null,n.removedStyles=null,n.styles=null,n.variant=\"\",n.bboxComputed=!1,n.stretch=v.NOSTRETCH,n.font=null,n.parent=o,n.font=e.jax.font,n.bbox=y.BBox.zero(),n.getStyles(),n.getVariant(),n.getScale(),n.getSpace(),n.childNodes=r.childNodes.map((function(t){var e=n.wrap(t);return e.bbox.pwidth&&(r.notParent||r.isKind(\"math\"))&&(n.bbox.pwidth=y.BBox.fullWidth),e})),n}return n(e,t),Object.defineProperty(e.prototype,\"jax\",{get:function(){return this.factory.jax},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"adaptor\",{get:function(){return this.factory.jax.adaptor},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"metrics\",{get:function(){return this.factory.jax.math.metrics},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!this.node.notParent&&!this.node.isToken},enumerable:!1,configurable:!0}),e.prototype.wrap=function(t,e){void 0===e&&(e=null);var r=this.factory.wrap(t,e||this);return e&&e.childNodes.push(r),this.jax.nodeMap.set(t,r),r},e.prototype.getBBox=function(t){if(void 0===t&&(t=!0),this.bboxComputed)return this.bbox;var e=t?this.bbox:y.BBox.zero();return this.computeBBox(e),this.bboxComputed=t,e},e.prototype.getOuterBBox=function(t){var e,r;void 0===t&&(t=!0);var o=this.getBBox(t);if(!this.styles)return o;var n=new y.BBox;Object.assign(n,o);try{for(var i=l(y.BBox.StyleAdjust),a=i.next();!a.done;a=i.next()){var s=c(a.value,2),h=s[0],u=s[1],p=this.styles.get(h);p&&(n[u]+=this.length2em(p,1,n.rscale))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return n},e.prototype.computeBBox=function(t,e){var r,o;void 0===e&&(e=!1),t.empty();try{for(var n=l(this.childNodes),i=n.next();!i.done;i=n.next()){var a=i.value;t.append(a.getOuterBBox())}}catch(t){r={error:t}}finally{try{i&&!i.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}t.clean(),this.fixesPWidth&&this.setChildPWidths(e)&&this.computeBBox(t,!0)},e.prototype.setChildPWidths=function(t,e,r){var o,n;if(void 0===e&&(e=null),void 0===r&&(r=!0),t)return!1;r&&(this.bbox.pwidth=\"\");var i=!1;try{for(var a=l(this.childNodes),s=a.next();!s.done;s=a.next()){var c=s.value,h=c.getOuterBBox();h.pwidth&&c.setChildPWidths(t,null===e?h.w:e,r)&&(i=!0)}}catch(t){o={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i},e.prototype.invalidateBBox=function(){this.bboxComputed&&(this.bboxComputed=!1,this.parent&&this.parent.invalidateBBox())},e.prototype.copySkewIC=function(t){var e=this.childNodes[0];(null==e?void 0:e.bbox.sk)&&(t.sk=e.bbox.sk),(null==e?void 0:e.bbox.dx)&&(t.dx=e.bbox.dx);var r=this.childNodes[this.childNodes.length-1];(null==r?void 0:r.bbox.ic)&&(t.ic=r.bbox.ic,t.w+=t.ic)},e.prototype.getStyles=function(){var t=this.node.attributes.getExplicit(\"style\");if(t)for(var r=this.styles=new m.Styles(t),o=0,n=e.removeStyles.length;o<n;o++){var i=e.removeStyles[o];r.get(i)&&(this.removedStyles||(this.removedStyles={}),this.removedStyles[i]=r.get(i),r.set(i,\"\"))}},e.prototype.getVariant=function(){if(this.node.isToken){var t=this.node.attributes,r=t.get(\"mathvariant\");if(!t.getExplicit(\"mathvariant\")){var o=t.getList(\"fontfamily\",\"fontweight\",\"fontstyle\");if(this.removedStyles){var n=this.removedStyles;n.fontFamily&&(o.family=n.fontFamily),n.fontWeight&&(o.weight=n.fontWeight),n.fontStyle&&(o.style=n.fontStyle)}o.fontfamily&&(o.family=o.fontfamily),o.fontweight&&(o.weight=o.fontweight),o.fontstyle&&(o.style=o.fontstyle),o.weight&&o.weight.match(/^\\d+$/)&&(o.weight=parseInt(o.weight)>600?\"bold\":\"normal\"),o.family?r=this.explicitVariant(o.family,o.weight,o.style):(this.node.getProperty(\"variantForm\")&&(r=\"-tex-variant\"),r=(e.BOLDVARIANTS[o.weight]||{})[r]||r,r=(e.ITALICVARIANTS[o.style]||{})[r]||r)}this.variant=r}},e.prototype.explicitVariant=function(t,e,r){var o=this.styles;return o||(o=this.styles=new m.Styles),o.set(\"fontFamily\",t),e&&o.set(\"fontWeight\",e),r&&o.set(\"fontStyle\",r),\"-explicitFont\"},e.prototype.getScale=function(){var t=1,e=this.parent,r=e?e.bbox.scale:1,o=this.node.attributes,n=Math.min(o.get(\"scriptlevel\"),2),i=o.get(\"fontsize\"),a=this.node.isToken||this.node.isKind(\"mstyle\")?o.get(\"mathsize\"):o.getInherited(\"mathsize\");if(0!==n){t=Math.pow(o.get(\"scriptsizemultiplier\"),n);var s=this.length2em(o.get(\"scriptminsize\"),.8,1);t<s&&(t=s)}this.removedStyles&&this.removedStyles.fontSize&&!i&&(i=this.removedStyles.fontSize),i&&!o.getExplicit(\"mathsize\")&&(a=i),\"1\"!==a&&(t*=this.length2em(a,1,1)),this.bbox.scale=t,this.bbox.rscale=t/r},e.prototype.getSpace=function(){var t=this.isTopEmbellished(),e=this.node.hasSpacingAttributes();this.jax.options.mathmlSpacing||e?t&&this.getMathMLSpacing():this.getTeXSpacing(t,e)},e.prototype.getMathMLSpacing=function(){var t=this.node.coreMO(),e=t.coreParent(),r=e.parent;if(r&&r.isKind(\"mrow\")&&1!==r.childNodes.length){var o=t.attributes,n=o.get(\"scriptlevel\")>0;this.bbox.L=o.isSet(\"lspace\")?Math.max(0,this.length2em(o.get(\"lspace\"))):g(n,t.lspace),this.bbox.R=o.isSet(\"rspace\")?Math.max(0,this.length2em(o.get(\"rspace\"))):g(n,t.rspace);var i=r.childIndex(e);if(0!==i){var a=r.childNodes[i-1];if(a.isEmbellished){var s=this.jax.nodeMap.get(a).getBBox();s.R&&(this.bbox.L=Math.max(0,this.bbox.L-s.R))}}}},e.prototype.getTeXSpacing=function(t,e){if(!e){var r=this.node.texSpacing();r&&(this.bbox.L=this.length2em(r))}if(t||e){var o=this.node.coreMO().attributes;o.isSet(\"lspace\")&&(this.bbox.L=Math.max(0,this.length2em(o.get(\"lspace\")))),o.isSet(\"rspace\")&&(this.bbox.R=Math.max(0,this.length2em(o.get(\"rspace\"))))}},e.prototype.isTopEmbellished=function(){return this.node.isEmbellished&&!(this.node.parent&&this.node.parent.isEmbellished)},e.prototype.core=function(){return this.jax.nodeMap.get(this.node.core())},e.prototype.coreMO=function(){return this.jax.nodeMap.get(this.node.coreMO())},e.prototype.getText=function(){var t,e,r=\"\";if(this.node.isToken)try{for(var o=l(this.node.childNodes),n=o.next();!n.done;n=o.next()){var i=n.value;i instanceof p.TextNode&&(r+=i.getText())}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return r},e.prototype.canStretch=function(t){if(this.stretch=v.NOSTRETCH,this.node.isEmbellished){var e=this.core();e&&e.node!==this.node&&e.canStretch(t)&&(this.stretch=e.stretch)}return 0!==this.stretch.dir},e.prototype.getAlignShift=function(){var t,e=(t=this.node.attributes).getList.apply(t,h([],c(p.indentAttributes),!1)),r=e.indentalign,o=e.indentshift,n=e.indentalignfirst,i=e.indentshiftfirst;return\"indentalign\"!==n&&(r=n),\"auto\"===r&&(r=this.jax.options.displayAlign),\"indentshift\"!==i&&(o=i),\"auto\"===o&&(o=this.jax.options.displayIndent,\"right\"!==r||o.match(/^\\s*0[a-z]*\\s*$/)||(o=(\"-\"+o.trim()).replace(/^--/,\"\"))),[r,this.length2em(o,this.metrics.containerWidth)]},e.prototype.getAlignX=function(t,e,r){return\"right\"===r?t-(e.w+e.R)*e.rscale:\"left\"===r?e.L*e.rscale:(t-e.w*e.rscale)/2},e.prototype.getAlignY=function(t,e,r,o,n){return\"top\"===n?t-r:\"bottom\"===n?o-e:\"center\"===n?(t-r-(e-o))/2:0},e.prototype.getWrapWidth=function(t){return this.childNodes[t].getBBox().w},e.prototype.getChildAlign=function(t){return\"left\"},e.prototype.percent=function(t){return f.percent(t)},e.prototype.em=function(t){return f.em(t)},e.prototype.px=function(t,e){return void 0===e&&(e=-f.BIGDIMEN),f.px(t,e,this.metrics.em)},e.prototype.length2em=function(t,e,r){return void 0===e&&(e=1),void 0===r&&(r=null),null===r&&(r=this.bbox.scale),f.length2em(t,e,r,this.jax.pxPerEm)},e.prototype.unicodeChars=function(t,e){void 0===e&&(e=this.variant);var r=(0,d.unicodeChars)(t),o=this.font.getVariant(e);if(o&&o.chars){var n=o.chars;r=r.map((function(t){return((n[t]||[])[3]||{}).smp||t}))}return r},e.prototype.remapChars=function(t){return t},e.prototype.mmlText=function(t){return this.node.factory.create(\"text\").setText(t)},e.prototype.mmlNode=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r=[]),this.node.factory.create(t,e,r)},e.prototype.createMo=function(t){var e=this.node.factory,r=e.create(\"text\").setText(t),o=e.create(\"mo\",{stretchy:!0},[r]);o.inheritAttributesFrom(this.node);var n=this.wrap(o);return n.parent=this,n},e.prototype.getVariantChar=function(t,e){var r=this.font.getChar(t,e)||[0,0,0,{unknown:!0}];return 3===r.length&&(r[3]={}),r},e.kind=\"unknown\",e.styles={},e.removeStyles=[\"fontSize\",\"fontFamily\",\"fontWeight\",\"fontStyle\",\"fontVariant\",\"font\"],e.skipAttributes={fontfamily:!0,fontsize:!0,fontweight:!0,fontstyle:!0,color:!0,background:!0,class:!0,href:!0,style:!0,xmlns:!0},e.BOLDVARIANTS={bold:{normal:\"bold\",italic:\"bold-italic\",fraktur:\"bold-fraktur\",script:\"bold-script\",\"sans-serif\":\"bold-sans-serif\",\"sans-serif-italic\":\"sans-serif-bold-italic\"},normal:{bold:\"normal\",\"bold-italic\":\"italic\",\"bold-fraktur\":\"fraktur\",\"bold-script\":\"script\",\"bold-sans-serif\":\"sans-serif\",\"sans-serif-bold-italic\":\"sans-serif-italic\"}},e.ITALICVARIANTS={italic:{normal:\"italic\",bold:\"bold-italic\",\"sans-serif\":\"sans-serif-italic\",\"bold-sans-serif\":\"sans-serif-bold-italic\"},normal:{italic:\"normal\",\"bold-italic\":\"bold\",\"sans-serif-italic\":\"sans-serif\",\"sans-serif-bold-italic\":\"bold-sans-serif\"}},e}(u.AbstractWrapper);e.CommonWrapper=x},1475:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonWrapperFactory=void 0;var i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.jax=null,e}return n(e,t),Object.defineProperty(e.prototype,\"Wrappers\",{get:function(){return this.node},enumerable:!1,configurable:!0}),e.defaultNodes={},e}(r(2506).AbstractWrapperFactory);e.CommonWrapperFactory=i},3438:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonTeXAtomMixin=void 0;var i=r(8921);e.CommonTeXAtomMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.computeBBox=function(e,r){if(void 0===r&&(r=!1),t.prototype.computeBBox.call(this,e,r),this.childNodes[0]&&this.childNodes[0].bbox.ic&&(e.ic=this.childNodes[0].bbox.ic),this.node.texClass===i.TEXCLASS.VCENTER){var o=e.h,n=(o+e.d)/2+this.font.params.axis_height-o;e.h+=n,e.d-=n}},e}(t)}},555:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonTextNodeMixin=void 0,e.CommonTextNodeMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.computeBBox=function(t,e){var r,o;void 0===e&&(e=!1);var a=this.parent.variant,s=this.node.getText();if(\"-explicitFont\"===a){var l=this.jax.getFontData(this.parent.styles),c=this.jax.measureText(s,a,l),h=c.w,u=c.h,p=c.d;t.h=u,t.d=p,t.w=h}else{var d=this.remappedText(s,a);t.empty();try{for(var f=n(d),m=f.next();!m.done;m=f.next()){var y=m.value,v=i(this.getVariantChar(a,y),4),b=(u=v[0],p=v[1],h=v[2],v[3]);if(b.unknown){var g=this.jax.measureText(String.fromCodePoint(y),a);h=g.w,u=g.h,p=g.d}t.w+=h,u>t.h&&(t.h=u),p>t.d&&(t.d=p),t.ic=b.ic||0,t.sk=b.sk||0,t.dx=b.dx||0}}catch(t){r={error:t}}finally{try{m&&!m.done&&(o=f.return)&&o.call(f)}finally{if(r)throw r.error}}d.length>1&&(t.sk=0),t.clean()}},e.prototype.remappedText=function(t,e){var r=this.parent.stretch.c;return r?[r]:this.parent.remapChars(this.unicodeChars(t,e))},e.prototype.getStyles=function(){},e.prototype.getVariant=function(){},e.prototype.getScale=function(){},e.prototype.getSpace=function(){},e}(t)}},3345:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMactionMixin=e.TooltipData=void 0;var s=r(6720);e.TooltipData={dx:\".2em\",dy:\".1em\",postDelay:600,clearDelay:100,hoverTimer:new Map,clearTimer:new Map,stopTimers:function(t,e){e.clearTimer.has(t)&&(clearTimeout(e.clearTimer.get(t)),e.clearTimer.delete(t)),e.hoverTimer.has(t)&&(clearTimeout(e.hoverTimer.get(t)),e.hoverTimer.delete(t))}},e.CommonMactionMixin=function(t){return function(t){function r(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,a([],i(e),!1))||this,n=o.constructor.actions,s=o.node.attributes.get(\"actiontype\"),l=i(n.get(s)||[function(t,e){},{}],2),c=l[0],h=l[1];return o.action=c,o.data=h,o.getParameters(),o}return n(r,t),Object.defineProperty(r.prototype,\"selected\",{get:function(){var t=this.node.attributes.get(\"selection\"),e=Math.max(1,Math.min(this.childNodes.length,t))-1;return this.childNodes[e]||this.wrap(this.node.selected)},enumerable:!1,configurable:!0}),r.prototype.getParameters=function(){var t=this.node.attributes.get(\"data-offsets\"),r=i((0,s.split)(t||\"\"),2),o=r[0],n=r[1];this.dx=this.length2em(o||e.TooltipData.dx),this.dy=this.length2em(n||e.TooltipData.dy)},r.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.updateFrom(this.selected.getOuterBBox()),this.selected.setChildPWidths(e)},r}(t)}},2057:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMathMixin=void 0,e.CommonMathMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.getWrapWidth=function(t){return this.parent?this.getBBox().w:this.metrics.containerWidth/this.jax.pxPerEm},e}(t)}},6200:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return a(e,t),e},l=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},c=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},h=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMencloseMixin=void 0;var u=s(r(5373)),p=r(6720);e.CommonMencloseMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,c([],l(e),!1))||this;return o.notations={},o.renderChild=null,o.msqrt=null,o.padding=u.PADDING,o.thickness=u.THICKNESS,o.arrowhead={x:u.ARROWX,y:u.ARROWY,dx:u.ARROWDX},o.TRBL=[0,0,0,0],o.getParameters(),o.getNotations(),o.removeRedundantNotations(),o.initializeNotations(),o.TRBL=o.getBBoxExtenders(),o}return n(e,t),e.prototype.getParameters=function(){var t=this.node.attributes,e=t.get(\"data-padding\");void 0!==e&&(this.padding=this.length2em(e,u.PADDING));var r=t.get(\"data-thickness\");void 0!==r&&(this.thickness=this.length2em(r,u.THICKNESS));var o=t.get(\"data-arrowhead\");if(void 0!==o){var n=l((0,p.split)(o),3),i=n[0],a=n[1],s=n[2];this.arrowhead={x:i?parseFloat(i):u.ARROWX,y:a?parseFloat(a):u.ARROWY,dx:s?parseFloat(s):u.ARROWDX}}},e.prototype.getNotations=function(){var t,e,r=this.constructor.notations;try{for(var o=h((0,p.split)(this.node.attributes.get(\"notation\"))),n=o.next();!n.done;n=o.next()){var i=n.value,a=r.get(i);a&&(this.notations[i]=a,a.renderChild&&(this.renderChild=a.renderer))}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}},e.prototype.removeRedundantNotations=function(){var t,e,r,o;try{for(var n=h(Object.keys(this.notations)),i=n.next();!i.done;i=n.next()){var a=i.value;if(this.notations[a]){var s=this.notations[a].remove||\"\";try{for(var l=(r=void 0,h(s.split(/ /))),c=l.next();!c.done;c=l.next()){var u=c.value;delete this.notations[u]}}catch(t){r={error:t}}finally{try{c&&!c.done&&(o=l.return)&&o.call(l)}finally{if(r)throw r.error}}}}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.initializeNotations=function(){var t,e;try{for(var r=h(Object.keys(this.notations)),o=r.next();!o.done;o=r.next()){var n=o.value,i=this.notations[n].init;i&&i(this)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=l(this.TRBL,4),o=r[0],n=r[1],i=r[2],a=r[3],s=this.childNodes[0].getBBox();t.combine(s,a,0),t.h+=o,t.d+=i,t.w+=n,this.setChildPWidths(e)},e.prototype.getBBoxExtenders=function(){var t,e,r=[0,0,0,0];try{for(var o=h(Object.keys(this.notations)),n=o.next();!n.done;n=o.next()){var i=n.value;this.maximizeEntries(r,this.notations[i].bbox(this))}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return r},e.prototype.getPadding=function(){var t,e,r=this,o=[0,0,0,0];try{for(var n=h(Object.keys(this.notations)),i=n.next();!i.done;i=n.next()){var a=i.value,s=this.notations[a].border;s&&this.maximizeEntries(o,s(this))}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return[0,1,2,3].map((function(t){return r.TRBL[t]-o[t]}))},e.prototype.maximizeEntries=function(t,e){for(var r=0;r<t.length;r++)t[r]<e[r]&&(t[r]=e[r])},e.prototype.getOffset=function(t){var e=l(this.TRBL,4),r=e[0],o=e[1],n=e[2],i=e[3],a=(\"X\"===t?o-i:n-r)/2;return Math.abs(a)>.001?a:0},e.prototype.getArgMod=function(t,e){return[Math.atan2(e,t),Math.sqrt(t*t+e*e)]},e.prototype.arrow=function(t,e,r,o,n){return void 0===o&&(o=\"\"),void 0===n&&(n=0),null},e.prototype.arrowData=function(){var t=l([this.padding,this.thickness],2),e=t[0],r=t[1]*(this.arrowhead.x+Math.max(1,this.arrowhead.dx)),o=this.childNodes[0].getBBox(),n=o.h,i=o.d,a=o.w,s=n+i,c=Math.sqrt(s*s+a*a),h=Math.max(e,r*a/c),u=Math.max(e,r*s/c),p=l(this.getArgMod(a+2*h,s+2*u),2);return{a:p[0],W:p[1],x:h,y:u}},e.prototype.arrowAW=function(){var t=this.childNodes[0].getBBox(),e=t.h,r=t.d,o=t.w,n=l(this.TRBL,4),i=n[0],a=n[1],s=n[2],c=n[3];return this.getArgMod(c+o+a,i+e+r+s)},e.prototype.createMsqrt=function(t){var e=this.node.factory.create(\"msqrt\");e.inheritAttributesFrom(this.node),e.childNodes[0]=t.node;var r=this.wrap(e);return r.parent=this,r},e.prototype.sqrtTRBL=function(){var t=this.msqrt.getBBox(),e=this.msqrt.childNodes[0].getBBox();return[t.h-e.h,0,t.d-e.d,t.w-e.w]},e}(t)}},1346:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMfencedMixin=void 0,e.CommonMfencedMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;return o.mrow=null,o.createMrow(),o.addMrowChildren(),o}return o(e,t),e.prototype.createMrow=function(){var t=this.node.factory.create(\"inferredMrow\");t.inheritAttributesFrom(this.node),this.mrow=this.wrap(t),this.mrow.parent=this},e.prototype.addMrowChildren=function(){var t,e,r=this.node,o=this.mrow;this.addMo(r.open),this.childNodes.length&&o.childNodes.push(this.childNodes[0]);var n=0;try{for(var i=a(this.childNodes.slice(1)),s=i.next();!s.done;s=i.next()){var l=s.value;this.addMo(r.separators[n++]),o.childNodes.push(l)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}this.addMo(r.close),o.stretchChildren()},e.prototype.addMo=function(t){if(t){var e=this.wrap(t);this.mrow.childNodes.push(e),e.parent=this.mrow}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.updateFrom(this.mrow.getOuterBBox()),this.setChildPWidths(e)},e}(t)}},5705:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMfracMixin=void 0,e.CommonMfracMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;if(o.bevel=null,o.pad=o.node.getProperty(\"withDelims\")?0:o.font.params.nulldelimiterspace,o.node.attributes.get(\"bevelled\")){var a=o.getBevelData(o.isDisplay()).H,s=o.bevel=o.createMo(\"/\");s.node.attributes.set(\"symmetric\",!0),s.canStretch(1),s.getStretchedVariant([a],!0)}return o}return o(e,t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.empty();var r=this.node.attributes.getList(\"linethickness\",\"bevelled\"),o=r.linethickness,n=r.bevelled,i=this.isDisplay(),a=null;if(n)this.getBevelledBBox(t,i);else{var s=this.length2em(String(o),.06);a=-2*this.pad,0===s?this.getAtopBBox(t,i):(this.getFractionBBox(t,i,s),a-=.2),a+=t.w}t.clean(),this.setChildPWidths(e,a)},e.prototype.getFractionBBox=function(t,e,r){var o=this.childNodes[0].getOuterBBox(),n=this.childNodes[1].getOuterBBox(),i=this.font.params.axis_height,a=this.getTUV(e,r),s=a.T,l=a.u,c=a.v;t.combine(o,0,i+s+Math.max(o.d*o.rscale,l)),t.combine(n,0,i-s-Math.max(n.h*n.rscale,c)),t.w+=2*this.pad+.2},e.prototype.getTUV=function(t,e){var r=this.font.params,o=r.axis_height,n=(t?3.5:1.5)*e;return{T:(t?3.5:1.5)*e,u:(t?r.num1:r.num2)-o-n,v:(t?r.denom1:r.denom2)+o-n}},e.prototype.getAtopBBox=function(t,e){var r=this.getUVQ(e),o=r.u,n=r.v,i=r.nbox,a=r.dbox;t.combine(i,0,o),t.combine(a,0,-n),t.w+=2*this.pad},e.prototype.getUVQ=function(t){var e=this.childNodes[0].getOuterBBox(),r=this.childNodes[1].getOuterBBox(),o=this.font.params,i=n(t?[o.num1,o.denom1]:[o.num3,o.denom2],2),a=i[0],s=i[1],l=(t?7:3)*o.rule_thickness,c=a-e.d*e.scale-(r.h*r.scale-s);return c<l&&(a+=(l-c)/2,s+=(l-c)/2,c=l),{u:a,v:s,q:c,nbox:e,dbox:r}},e.prototype.getBevelledBBox=function(t,e){var r=this.getBevelData(e),o=r.u,n=r.v,i=r.delta,a=r.nbox,s=r.dbox,l=this.bevel.getOuterBBox();t.combine(a,0,o),t.combine(l,t.w-i/2,0),t.combine(s,t.w-i/2,n)},e.prototype.getBevelData=function(t){var e=this.childNodes[0].getOuterBBox(),r=this.childNodes[1].getOuterBBox(),o=t?.4:.15,n=Math.max(e.scale*(e.h+e.d),r.scale*(r.h+r.d))+2*o,i=this.font.params.axis_height;return{H:n,delta:o,u:e.scale*(e.d-e.h)/2+i+o,v:r.scale*(r.d-r.h)/2+i-o,nbox:e,dbox:r}},e.prototype.canStretch=function(t){return!1},e.prototype.isDisplay=function(){var t=this.node.attributes.getList(\"displaystyle\",\"scriptlevel\"),e=t.displaystyle,r=t.scriptlevel;return e&&0===r},e.prototype.getWrapWidth=function(t){var e=this.node.attributes;return e.get(\"bevelled\")?this.childNodes[t].getOuterBBox().w:this.getBBox().w-(this.length2em(e.get(\"linethickness\"))?.2:0)-2*this.pad},e.prototype.getChildAlign=function(t){var e=this.node.attributes;return e.get(\"bevelled\")?\"left\":e.get([\"numalign\",\"denomalign\"][t])},e}(t)}},7969:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMglyphMixin=void 0,e.CommonMglyphMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;return o.getParameters(),o}return o(e,t),e.prototype.getParameters=function(){var t=this.node.attributes.getList(\"width\",\"height\",\"valign\",\"src\",\"index\"),e=t.width,r=t.height,o=t.valign,n=t.src,i=t.index;if(n)this.width=\"auto\"===e?1:this.length2em(e),this.height=\"auto\"===r?1:this.length2em(r),this.valign=this.length2em(o||\"0\");else{var a=String.fromCodePoint(parseInt(i)),s=this.node.factory;this.charWrapper=this.wrap(s.create(\"text\").setText(a)),this.charWrapper.parent=this}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),this.charWrapper?t.updateFrom(this.charWrapper.getBBox()):(t.w=this.width,t.h=this.height+this.valign,t.d=-this.valign)},e}(t)}},1419:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMiMixin=void 0,e.CommonMiMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.computeBBox=function(e,r){void 0===r&&(r=!1),t.prototype.computeBBox.call(this,e),this.copySkewIC(e)},e}(t)}},9906:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMmultiscriptsMixin=e.ScriptNames=e.NextScript=void 0;var l=r(3717);e.NextScript={base:\"subList\",subList:\"supList\",supList:\"subList\",psubList:\"psupList\",psupList:\"psubList\"},e.ScriptNames=[\"sup\",\"sup\",\"psup\",\"psub\"],e.CommonMmultiscriptsMixin=function(t){return function(t){function r(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,a([],i(e),!1))||this;return o.scriptData=null,o.firstPrescript=0,o.getScriptData(),o}return n(r,t),r.prototype.combinePrePost=function(t,e){var r=new l.BBox(t);return r.combine(e,0,0),r},r.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.font.params.scriptspace,o=this.scriptData,n=this.combinePrePost(o.sub,o.psub),a=this.combinePrePost(o.sup,o.psup),s=i(this.getUVQ(n,a),2),l=s[0],c=s[1];if(t.empty(),o.numPrescripts&&(t.combine(o.psup,r,l),t.combine(o.psub,r,c)),t.append(o.base),o.numScripts){var h=t.w;t.combine(o.sup,h,l),t.combine(o.sub,h,c),t.w+=r}t.clean(),this.setChildPWidths(e)},r.prototype.getScriptData=function(){var t=this.scriptData={base:null,sub:l.BBox.empty(),sup:l.BBox.empty(),psub:l.BBox.empty(),psup:l.BBox.empty(),numPrescripts:0,numScripts:0},e=this.getScriptBBoxLists();this.combineBBoxLists(t.sub,t.sup,e.subList,e.supList),this.combineBBoxLists(t.psub,t.psup,e.psubList,e.psupList),t.base=e.base[0],t.numPrescripts=e.psubList.length,t.numScripts=e.subList.length},r.prototype.getScriptBBoxLists=function(){var t,r,o={base:[],subList:[],supList:[],psubList:[],psupList:[]},n=\"base\";try{for(var i=s(this.childNodes),a=i.next();!a.done;a=i.next()){var l=a.value;l.node.isKind(\"mprescripts\")?n=\"psubList\":(o[n].push(l.getOuterBBox()),n=e.NextScript[n])}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return this.firstPrescript=o.subList.length+o.supList.length+2,this.padLists(o.subList,o.supList),this.padLists(o.psubList,o.psupList),o},r.prototype.padLists=function(t,e){t.length>e.length&&e.push(l.BBox.empty())},r.prototype.combineBBoxLists=function(t,e,r,o){for(var n=0;n<r.length;n++){var a=i(this.getScaledWHD(r[n]),3),s=a[0],l=a[1],c=a[2],h=i(this.getScaledWHD(o[n]),3),u=h[0],p=h[1],d=h[2],f=Math.max(s,u);t.w+=f,e.w+=f,l>t.h&&(t.h=l),c>t.d&&(t.d=c),p>e.h&&(e.h=p),d>e.d&&(e.d=d)}},r.prototype.getScaledWHD=function(t){var e=t.w,r=t.h,o=t.d,n=t.rscale;return[e*n,r*n,o*n]},r.prototype.getUVQ=function(e,r){var o;if(!this.UVQ){var n=i([0,0,0],3),a=n[0],s=n[1],l=n[2];0===e.h&&0===e.d?a=this.getU():0===r.h&&0===r.d?a=-this.getV():(a=(o=i(t.prototype.getUVQ.call(this,e,r),3))[0],s=o[1],l=o[2]),this.UVQ=[a,s,l]}return this.UVQ},r}(t)}},2304:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMnMixin=void 0,e.CommonMnMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.remapChars=function(t){if(t.length){var e=this.font.getRemappedChar(\"mn\",t[0]);if(e){var r=this.unicodeChars(e,this.variant);1===r.length?t[0]=r[0]:t=r.concat(t.slice(1))}}return t},e}(t)}},437:function(t,e,r){var o,n,i=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__assign||function(){return a=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},a.apply(this,arguments)},s=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},l=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMoMixin=e.DirectionVH=void 0;var h=r(3717),u=r(6720),p=r(9250);e.DirectionVH=((n={})[1]=\"v\",n[2]=\"h\",n),e.CommonMoMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,l([],s(e),!1))||this;return o.size=null,o.isAccent=o.node.isAccent,o}return i(e,t),e.prototype.computeBBox=function(t,e){if(void 0===e&&(e=!1),this.protoBBox(t),this.node.attributes.get(\"symmetric\")&&2!==this.stretch.dir){var r=this.getCenterOffset(t);t.h+=r,t.d-=r}this.node.getProperty(\"mathaccent\")&&(0===this.stretch.dir||this.size>=0)&&(t.w=0)},e.prototype.protoBBox=function(e){var r=0!==this.stretch.dir;r&&null===this.size&&this.getStretchedVariant([0]),r&&this.size<0||(t.prototype.computeBBox.call(this,e),this.copySkewIC(e))},e.prototype.getAccentOffset=function(){var t=h.BBox.empty();return this.protoBBox(t),-t.w/2},e.prototype.getCenterOffset=function(e){return void 0===e&&(e=null),e||(e=h.BBox.empty(),t.prototype.computeBBox.call(this,e)),(e.h+e.d)/2+this.font.params.axis_height-e.h},e.prototype.getVariant=function(){this.node.attributes.get(\"largeop\")?this.variant=this.node.attributes.get(\"displaystyle\")?\"-largeop\":\"-smallop\":this.node.attributes.getExplicit(\"mathvariant\")||!1!==this.node.getProperty(\"pseudoscript\")?t.prototype.getVariant.call(this):this.variant=\"-tex-variant\"},e.prototype.canStretch=function(t){if(0!==this.stretch.dir)return this.stretch.dir===t;if(!this.node.attributes.get(\"stretchy\"))return!1;var e=this.getText();if(1!==Array.from(e).length)return!1;var r=this.font.getDelimiter(e.codePointAt(0));return this.stretch=r&&r.dir===t?r:p.NOSTRETCH,0!==this.stretch.dir},e.prototype.getStretchedVariant=function(t,e){var r,o;if(void 0===e&&(e=!1),0!==this.stretch.dir){var n=this.getWH(t),i=this.getSize(\"minsize\",0),s=this.getSize(\"maxsize\",1/0),l=this.node.getProperty(\"mathaccent\");n=Math.max(i,Math.min(s,n));var h=this.font.params.delimiterfactor/1e3,u=this.font.params.delimitershortfall,p=i||e?n:l?Math.min(n/h,n+u):Math.max(n*h,n-u),d=this.stretch,f=d.c||this.getText().codePointAt(0),m=0;if(d.sizes)try{for(var y=c(d.sizes),v=y.next();!v.done;v=y.next()){if(v.value>=p)return l&&m&&m--,this.variant=this.font.getSizeVariant(f,m),this.size=m,void(d.schar&&d.schar[m]&&(this.stretch=a(a({},this.stretch),{c:d.schar[m]})));m++}}catch(t){r={error:t}}finally{try{v&&!v.done&&(o=y.return)&&o.call(y)}finally{if(r)throw r.error}}d.stretch?(this.size=-1,this.invalidateBBox(),this.getStretchBBox(t,this.checkExtendedHeight(n,d),d)):(this.variant=this.font.getSizeVariant(f,m-1),this.size=m-1)}},e.prototype.getSize=function(t,e){var r=this.node.attributes;return r.isSet(t)&&(e=this.length2em(r.get(t),1,1)),e},e.prototype.getWH=function(t){if(0===t.length)return 0;if(1===t.length)return t[0];var e=s(t,2),r=e[0],o=e[1],n=this.font.params.axis_height;return this.node.attributes.get(\"symmetric\")?2*Math.max(r-n,o+n):r+o},e.prototype.getStretchBBox=function(t,e,r){var o;r.hasOwnProperty(\"min\")&&r.min>e&&(e=r.min);var n=s(r.HDW,3),i=n[0],a=n[1],l=n[2];1===this.stretch.dir?(i=(o=s(this.getBaseline(t,e,r),2))[0],a=o[1]):l=e,this.bbox.h=i,this.bbox.d=a,this.bbox.w=l},e.prototype.getBaseline=function(t,e,r){var o=2===t.length&&t[0]+t[1]===e,n=this.node.attributes.get(\"symmetric\"),i=s(o?t:[e,0],2),a=i[0],l=i[1],c=s([a+l,0],2),h=c[0],u=c[1];if(n){var p=this.font.params.axis_height;o&&(h=2*Math.max(a-p,l+p)),u=h/2-p}else if(o)u=l;else{var d=s(r.HDW||[.75,.25],2),f=d[0],m=d[1];u=m*(h/(f+m))}return[h-u,u]},e.prototype.checkExtendedHeight=function(t,e){if(e.fullExt){var r=s(e.fullExt,2),o=r[0],n=r[1];t=n+Math.ceil(Math.max(0,t-n)/o)*o}return t},e.prototype.remapChars=function(t){var e=this.node.getProperty(\"primes\");if(e)return(0,u.unicodeChars)(e);if(1===t.length){var r=this.node.coreParent().parent,o=this.isAccent&&!r.isKind(\"mrow\")?\"accent\":\"mo\",n=this.font.getRemappedChar(o,t[0]);n&&(t=this.unicodeChars(n,this.variant))}return t},e}(t)}},7481:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMpaddedMixin=void 0,e.CommonMpaddedMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.getDimens=function(){var t=this.node.attributes.getList(\"width\",\"height\",\"depth\",\"lspace\",\"voffset\"),e=this.childNodes[0].getBBox(),r=e.w,o=e.h,n=e.d,i=r,a=o,s=n,l=0,c=0,h=0;\"\"!==t.width&&(r=this.dimen(t.width,e,\"w\",0)),\"\"!==t.height&&(o=this.dimen(t.height,e,\"h\",0)),\"\"!==t.depth&&(n=this.dimen(t.depth,e,\"d\",0)),\"\"!==t.voffset&&(c=this.dimen(t.voffset,e)),\"\"!==t.lspace&&(l=this.dimen(t.lspace,e));var u=this.node.attributes.get(\"data-align\");return u&&(h=this.getAlignX(r,e,u)),[a,s,i,o-a,n-s,r-i,l,c,h]},e.prototype.dimen=function(t,e,r,o){void 0===r&&(r=\"\"),void 0===o&&(o=null);var n=(t=String(t)).match(/width|height|depth/),i=n?e[n[0].charAt(0)]:r?e[r]:0,a=this.length2em(t,i)||0;return t.match(/^[-+]/)&&r&&(a+=i),null!=o&&(a=Math.max(o,a)),a},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=n(this.getDimens(),6),o=r[0],i=r[1],a=r[2],s=r[3],l=r[4],c=r[5];t.w=a+c,t.h=o+s,t.d=i+l,this.setChildPWidths(e,t.w)},e.prototype.getWrapWidth=function(t){return this.getBBox().w},e.prototype.getChildAlign=function(t){return this.node.attributes.get(\"data-align\")||\"left\"},e}(t)}},5997:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMrootMixin=void 0,e.CommonMrootMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"surd\",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"root\",{get:function(){return 1},enumerable:!1,configurable:!0}),e.prototype.combineRootBBox=function(t,e,r){var o=this.childNodes[this.root].getOuterBBox(),n=this.getRootDimens(e,r)[1];t.combine(o,0,n)},e.prototype.getRootDimens=function(t,e){var r=this.childNodes[this.surd],o=this.childNodes[this.root].getOuterBBox(),n=(r.size<0?.5:.6)*t.w,i=o.w,a=o.rscale,s=Math.max(i,n/a),l=Math.max(0,s-i);return[s*a-n,this.rootHeight(o,t,r.size,e),l]},e.prototype.rootHeight=function(t,e,r,o){var n=e.h+e.d;return(r<0?1.9:.55*n)-(n-o)+Math.max(0,t.d*t.rscale)},e}(t)}},9323:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonInferredMrowMixin=e.CommonMrowMixin=void 0;var l=r(3717);e.CommonMrowMixin=function(t){return function(t){function e(){for(var e,r,o=[],n=0;n<arguments.length;n++)o[n]=arguments[n];var c=t.apply(this,a([],i(o),!1))||this;c.stretchChildren();try{for(var h=s(c.childNodes),u=h.next();!u.done;u=h.next()){var p=u.value;if(p.bbox.pwidth){c.bbox.pwidth=l.BBox.fullWidth;break}}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=h.return)&&r.call(h)}finally{if(e)throw e.error}}return c}return n(e,t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.stretchChildren=function(){var t,e,r,o,n,i,a=[];try{for(var l=s(this.childNodes),c=l.next();!c.done;c=l.next()){(j=c.value).canStretch(1)&&a.push(j)}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}var h=a.length,u=this.childNodes.length;if(h&&u>1){var p=0,d=0,f=h>1&&h===u;try{for(var m=s(this.childNodes),y=m.next();!y.done;y=m.next()){var v=0===(j=y.value).stretch.dir;if(f||v){var b=j.getOuterBBox(v),g=b.h,x=b.d,M=b.rscale;(g*=M)>p&&(p=g),(x*=M)>d&&(d=x)}}}catch(t){r={error:t}}finally{try{y&&!y.done&&(o=m.return)&&o.call(m)}finally{if(r)throw r.error}}try{for(var _=s(a),w=_.next();!w.done;w=_.next()){var j;(j=w.value).coreMO().getStretchedVariant([p,d])}}catch(t){n={error:t}}finally{try{w&&!w.done&&(i=_.return)&&i.call(_)}finally{if(n)throw n.error}}}},e}(t)},e.CommonInferredMrowMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getScale=function(){this.bbox.scale=this.parent.bbox.scale,this.bbox.rscale=1},e}(t)}},6920:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsMixin=void 0,e.CommonMsMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this,a=o.node.attributes,s=a.getList(\"lquote\",\"rquote\");return\"monospace\"!==o.variant&&(a.isSet(\"lquote\")||'\"'!==s.lquote||(s.lquote=\"\\u201c\"),a.isSet(\"rquote\")||'\"'!==s.rquote||(s.rquote=\"\\u201d\")),o.childNodes.unshift(o.createText(s.lquote)),o.childNodes.push(o.createText(s.rquote)),o}return o(e,t),e.prototype.createText=function(t){var e=this.wrap(this.mmlText(t));return e.parent=this,e},e}(t)}},37:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMspaceMixin=void 0,e.CommonMspaceMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.node.attributes;t.w=this.length2em(r.get(\"width\"),0),t.h=this.length2em(r.get(\"height\"),0),t.d=this.length2em(r.get(\"depth\"),0)},e.prototype.handleVariant=function(){},e}(t)}},222:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsqrtMixin=void 0;var s=r(3717);e.CommonMsqrtMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,a([],i(e),!1))||this,n=o.createMo(\"\\u221a\");n.canStretch(1);var s=o.childNodes[o.base].getOuterBBox(),l=s.h,c=s.d,h=o.font.params.rule_thickness,u=o.node.attributes.get(\"displaystyle\")?o.font.params.x_height:h;return o.surdH=l+c+2*h+u/4,n.getStretchedVariant([o.surdH-c,c],!0),o}return n(e,t),Object.defineProperty(e.prototype,\"base\",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"surd\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"root\",{get:function(){return null},enumerable:!1,configurable:!0}),e.prototype.createMo=function(e){var r=t.prototype.createMo.call(this,e);return this.childNodes.push(r),r},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.childNodes[this.surd].getBBox(),o=new s.BBox(this.childNodes[this.base].getOuterBBox()),n=this.getPQ(r)[1],a=this.font.params.rule_thickness,l=o.h+n+a,c=i(this.getRootDimens(r,l),1)[0];t.h=l+a,this.combineRootBBox(t,r,l),t.combine(r,c,l-r.h),t.combine(o,c+r.w,0),t.clean(),this.setChildPWidths(e)},e.prototype.combineRootBBox=function(t,e,r){},e.prototype.getPQ=function(t){var e=this.font.params.rule_thickness,r=this.node.attributes.get(\"displaystyle\")?this.font.params.x_height:e;return[r,t.h+t.d>this.surdH?(t.h+t.d-(this.surdH-2*e-r/2))/2:e+r/4]},e.prototype.getRootDimens=function(t,e){return[0,0,0,0]},e}(t)}},3069:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsubsupMixin=e.CommonMsupMixin=e.CommonMsubMixin=void 0,e.CommonMsubMixin=function(t){var e;return e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"scriptChild\",{get:function(){return this.childNodes[this.node.sub]},enumerable:!1,configurable:!0}),e.prototype.getOffset=function(){return[0,-this.getV()]},e}(t),e.useIC=!1,e},e.CommonMsupMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"scriptChild\",{get:function(){return this.childNodes[this.node.sup]},enumerable:!1,configurable:!0}),e.prototype.getOffset=function(){return[this.getAdjustedIc()-(this.baseRemoveIc?0:this.baseIc),this.getU()]},e}(t)},e.CommonMsubsupMixin=function(t){var e;return e=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.UVQ=null,e}return o(e,t),Object.defineProperty(e.prototype,\"subChild\",{get:function(){return this.childNodes[this.node.sub]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"supChild\",{get:function(){return this.childNodes[this.node.sup]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.baseChild.getOuterBBox(),o=n([this.subChild.getOuterBBox(),this.supChild.getOuterBBox()],2),i=o[0],a=o[1];t.empty(),t.append(r);var s=this.getBaseWidth(),l=this.getAdjustedIc(),c=n(this.getUVQ(),2),h=c[0],u=c[1];t.combine(i,s,u),t.combine(a,s+l,h),t.w+=this.font.params.scriptspace,t.clean(),this.setChildPWidths(e)},e.prototype.getUVQ=function(t,e){void 0===t&&(t=this.subChild.getOuterBBox()),void 0===e&&(e=this.supChild.getOuterBBox());var r=this.baseCore.getOuterBBox();if(this.UVQ)return this.UVQ;var o=this.font.params,i=3*o.rule_thickness,a=this.length2em(this.node.attributes.get(\"subscriptshift\"),o.sub2),s=this.baseCharZero(r.d*this.baseScale+o.sub_drop*t.rscale),l=n([this.getU(),Math.max(s,a)],2),c=l[0],h=l[1],u=c-e.d*e.rscale-(t.h*t.rscale-h);if(u<i){h+=i-u;var p=.8*o.x_height-(c-e.d*e.rscale);p>0&&(c+=p,h-=p)}return c=Math.max(this.length2em(this.node.attributes.get(\"superscriptshift\"),c),c),h=Math.max(this.length2em(this.node.attributes.get(\"subscriptshift\"),h),h),u=c-e.d*e.rscale-(t.h*t.rscale-h),this.UVQ=[c,-h,u],this.UVQ},e}(t),e.useIC=!1,e}},8589:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtableMixin=void 0;var l=r(3717),c=r(6720),h=r(1490);e.CommonMtableMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,a([],i(e),!1))||this;o.numCols=0,o.numRows=0,o.data=null,o.pwidthCells=[],o.pWidth=0,o.numCols=(0,h.max)(o.tableRows.map((function(t){return t.numCells}))),o.numRows=o.childNodes.length,o.hasLabels=o.childNodes.reduce((function(t,e){return t||e.node.isKind(\"mlabeledtr\")}),!1),o.findContainer(),o.isTop=!o.container||o.container.node.isKind(\"math\")&&!o.container.parent,o.isTop&&(o.jax.table=o),o.getPercentageWidth();var n=o.node.attributes;return o.frame=\"none\"!==n.get(\"frame\"),o.fLine=o.frame&&n.get(\"frame\")?.07:0,o.fSpace=o.frame?o.convertLengths(o.getAttributeArray(\"framespacing\")):[0,0],o.cSpace=o.convertLengths(o.getColumnAttributes(\"columnspacing\")),o.rSpace=o.convertLengths(o.getRowAttributes(\"rowspacing\")),o.cLines=o.getColumnAttributes(\"columnlines\").map((function(t){return\"none\"===t?0:.07})),o.rLines=o.getRowAttributes(\"rowlines\").map((function(t){return\"none\"===t?0:.07})),o.cWidths=o.getColumnWidths(),o.stretchRows(),o.stretchColumns(),o}return n(e,t),Object.defineProperty(e.prototype,\"tableRows\",{get:function(){return this.childNodes},enumerable:!1,configurable:!0}),e.prototype.findContainer=function(){for(var t=this,e=t.parent;e&&(e.node.notParent||e.node.isKind(\"mrow\"));)t=e,e=e.parent;this.container=e,this.containerI=t.node.childPosition()},e.prototype.getPercentageWidth=function(){if(this.hasLabels)this.bbox.pwidth=l.BBox.fullWidth;else{var t=this.node.attributes.get(\"width\");(0,c.isPercent)(t)&&(this.bbox.pwidth=t)}},e.prototype.stretchRows=function(){for(var t=this.node.attributes.get(\"equalrows\"),e=t?this.getEqualRowHeight():0,r=t?this.getTableData():{H:[0],D:[0]},o=r.H,n=r.D,i=this.tableRows,a=0;a<this.numRows;a++){var s=t?[(e+o[a]-n[a])/2,(e-o[a]+n[a])/2]:null;i[a].stretchChildren(s)}},e.prototype.stretchColumns=function(){for(var t=0;t<this.numCols;t++){var e=\"number\"==typeof this.cWidths[t]?this.cWidths[t]:null;this.stretchColumn(t,e)}},e.prototype.stretchColumn=function(t,e){var r,o,n,i,a,l,c=[];try{for(var h=s(this.tableRows),u=h.next();!u.done;u=h.next()){if(v=u.value.getChild(t))0===(_=v.childNodes[0]).stretch.dir&&_.canStretch(2)&&c.push(_)}}catch(t){r={error:t}}finally{try{u&&!u.done&&(o=h.return)&&o.call(h)}finally{if(r)throw r.error}}var p=c.length,d=this.childNodes.length;if(p&&d>1){if(null===e){e=0;var f=p>1&&p===d;try{for(var m=s(this.tableRows),y=m.next();!y.done;y=m.next()){var v;if(v=y.value.getChild(t)){var b=0===(_=v.childNodes[0]).stretch.dir;if(f||b){var g=_.getBBox(b).w;g>e&&(e=g)}}}}catch(t){n={error:t}}finally{try{y&&!y.done&&(i=m.return)&&i.call(m)}finally{if(n)throw n.error}}}try{for(var x=s(c),M=x.next();!M.done;M=x.next()){var _;(_=M.value).coreMO().getStretchedVariant([e])}}catch(t){a={error:t}}finally{try{M&&!M.done&&(l=x.return)&&l.call(x)}finally{if(a)throw a.error}}}},e.prototype.getTableData=function(){if(this.data)return this.data;for(var t=new Array(this.numRows).fill(0),e=new Array(this.numRows).fill(0),r=new Array(this.numCols).fill(0),o=new Array(this.numRows),n=new Array(this.numRows),i=[0],a=this.tableRows,s=0;s<a.length;s++){for(var l=0,c=a[s],h=c.node.attributes.get(\"rowalign\"),u=0;u<c.numCells;u++){var p=c.getChild(u);l=this.updateHDW(p,u,s,h,t,e,r,l),this.recordPWidthCell(p,u)}o[s]=t[s],n[s]=e[s],c.labeled&&(l=this.updateHDW(c.childNodes[0],0,s,h,t,e,i,l)),this.extendHD(s,t,e,l),this.extendHD(s,o,n,l)}var d=i[0];return this.data={H:t,D:e,W:r,NH:o,ND:n,L:d},this.data},e.prototype.updateHDW=function(t,e,r,o,n,i,a,s){var l=t.getBBox(),c=l.h,h=l.d,u=l.w,p=t.parent.bbox.rscale;1!==t.parent.bbox.rscale&&(c*=p,h*=p,u*=p),this.node.getProperty(\"useHeight\")&&(c<.75&&(c=.75),h<.25&&(h=.25));var d=0;return\"baseline\"!==(o=t.node.attributes.get(\"rowalign\")||o)&&\"axis\"!==o&&(d=c+h,c=h=0),c>n[r]&&(n[r]=c),h>i[r]&&(i[r]=h),d>s&&(s=d),a&&u>a[e]&&(a[e]=u),s},e.prototype.extendHD=function(t,e,r,o){var n=(o-(e[t]+r[t]))/2;n<1e-5||(e[t]+=n,r[t]+=n)},e.prototype.recordPWidthCell=function(t,e){t.childNodes[0]&&t.childNodes[0].getBBox().pwidth&&this.pwidthCells.push([t,e])},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r,o,n=this.getTableData(),a=n.H,s=n.D;if(this.node.attributes.get(\"equalrows\")){var l=this.getEqualRowHeight();r=(0,h.sum)([].concat(this.rLines,this.rSpace))+l*this.numRows}else r=(0,h.sum)(a.concat(s,this.rLines,this.rSpace));r+=2*(this.fLine+this.fSpace[1]);var u=this.getComputedWidths();o=(0,h.sum)(u.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]);var p=this.node.attributes.get(\"width\");\"auto\"!==p&&(o=Math.max(this.length2em(p,0)+2*this.fLine,o));var d=i(this.getBBoxHD(r),2),f=d[0],m=d[1];t.h=f,t.d=m,t.w=o;var y=i(this.getBBoxLR(),2),v=y[0],b=y[1];t.L=v,t.R=b,(0,c.isPercent)(p)||this.setColumnPWidths()},e.prototype.setChildPWidths=function(t,e,r){var o=this.node.attributes.get(\"width\");if(!(0,c.isPercent)(o))return!1;this.hasLabels||(this.bbox.pwidth=\"\",this.container.bbox.pwidth=\"\");var n=this.bbox,i=n.w,a=n.L,s=n.R,l=this.node.attributes.get(\"data-width-includes-label\"),u=Math.max(i,this.length2em(o,Math.max(e,a+i+s)))-(l?a+s:0),p=this.node.attributes.get(\"equalcolumns\")?Array(this.numCols).fill(this.percent(1/Math.max(1,this.numCols))):this.getColumnAttributes(\"columnwidth\",0);this.cWidths=this.getColumnWidthsFixed(p,u);var d=this.getComputedWidths();return this.pWidth=(0,h.sum)(d.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]),this.isTop&&(this.bbox.w=this.pWidth),this.setColumnPWidths(),this.pWidth!==i&&this.parent.invalidateBBox(),this.pWidth!==i},e.prototype.setColumnPWidths=function(){var t,e,r=this.cWidths;try{for(var o=s(this.pwidthCells),n=o.next();!n.done;n=o.next()){var a=i(n.value,2),l=a[0],c=a[1];l.setChildPWidths(!1,r[c])&&(l.invalidateBBox(),l.getBBox())}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}},e.prototype.getBBoxHD=function(t){var e=i(this.getAlignmentRow(),2),r=e[0],o=e[1];if(null===o){var n=this.font.params.axis_height,a=t/2;return{top:[0,t],center:[a,a],bottom:[t,0],baseline:[a,a],axis:[a+n,a-n]}[r]||[a,a]}var s=this.getVerticalPosition(o,r);return[s,t-s]},e.prototype.getBBoxLR=function(){if(this.hasLabels){var t=this.node.attributes,e=t.get(\"side\"),r=i(this.getPadAlignShift(e),2),o=r[0],n=r[1],a=this.hasLabels&&!!t.get(\"data-width-includes-label\");return a&&this.frame&&this.fSpace[0]&&(o-=this.fSpace[0]),\"center\"!==n||a?\"left\"===e?[o,0]:[0,o]:[o,o]}return[0,0]},e.prototype.getPadAlignShift=function(t){var e=this.getTableData().L+this.length2em(this.node.attributes.get(\"minlabelspacing\")),r=i(null==this.styles?[\"\",\"\"]:[this.styles.get(\"padding-left\"),this.styles.get(\"padding-right\")],2),o=r[0],n=r[1];(o||n)&&(e=Math.max(e,this.length2em(o||\"0\"),this.length2em(n||\"0\")));var a=i(this.getAlignShift(),2),s=a[0],l=a[1];return s===t&&(l=\"left\"===t?Math.max(e,l)-e:Math.min(-e,l)+e),[e,s,l]},e.prototype.getAlignShift=function(){return this.isTop?t.prototype.getAlignShift.call(this):[this.container.getChildAlign(this.containerI),0]},e.prototype.getWidth=function(){return this.pWidth||this.getBBox().w},e.prototype.getEqualRowHeight=function(){var t=this.getTableData(),e=t.H,r=t.D,o=Array.from(e.keys()).map((function(t){return e[t]+r[t]}));return Math.max.apply(Math,o)},e.prototype.getComputedWidths=function(){var t=this,e=this.getTableData().W,r=Array.from(e.keys()).map((function(r){return\"number\"==typeof t.cWidths[r]?t.cWidths[r]:e[r]}));return this.node.attributes.get(\"equalcolumns\")&&(r=Array(r.length).fill((0,h.max)(r))),r},e.prototype.getColumnWidths=function(){var t=this.node.attributes.get(\"width\");if(this.node.attributes.get(\"equalcolumns\"))return this.getEqualColumns(t);var e=this.getColumnAttributes(\"columnwidth\",0);return\"auto\"===t?this.getColumnWidthsAuto(e):(0,c.isPercent)(t)?this.getColumnWidthsPercent(e):this.getColumnWidthsFixed(e,this.length2em(t))},e.prototype.getEqualColumns=function(t){var e,r=Math.max(1,this.numCols);if(\"auto\"===t){var o=this.getTableData().W;e=(0,h.max)(o)}else if((0,c.isPercent)(t))e=this.percent(1/r);else{var n=(0,h.sum)([].concat(this.cLines,this.cSpace))+2*this.fSpace[0];e=Math.max(0,this.length2em(t)-n)/r}return Array(this.numCols).fill(e)},e.prototype.getColumnWidthsAuto=function(t){var e=this;return t.map((function(t){return\"auto\"===t||\"fit\"===t?null:(0,c.isPercent)(t)?t:e.length2em(t)}))},e.prototype.getColumnWidthsPercent=function(t){var e=this,r=t.indexOf(\"fit\")>=0,o=(r?this.getTableData():{W:null}).W;return Array.from(t.keys()).map((function(n){var i=t[n];return\"fit\"===i?null:\"auto\"===i?r?o[n]:null:(0,c.isPercent)(i)?i:e.length2em(i)}))},e.prototype.getColumnWidthsFixed=function(t,e){var r=this,o=Array.from(t.keys()),n=o.filter((function(e){return\"fit\"===t[e]})),i=o.filter((function(e){return\"auto\"===t[e]})),a=n.length||i.length,s=(a?this.getTableData():{W:null}).W,l=e-(0,h.sum)([].concat(this.cLines,this.cSpace))-2*this.fSpace[0],c=l;o.forEach((function(e){var o=t[e];c-=\"fit\"===o||\"auto\"===o?s[e]:r.length2em(o,l)}));var u=a&&c>0?c/a:0;return o.map((function(e){var o=t[e];return\"fit\"===o?s[e]+u:\"auto\"===o?s[e]+(0===n.length?u:0):r.length2em(o,l)}))},e.prototype.getVerticalPosition=function(t,e){for(var r=this.node.attributes.get(\"equalrows\"),o=this.getTableData(),n=o.H,a=o.D,s=r?this.getEqualRowHeight():0,l=this.getRowHalfSpacing(),c=this.fLine,h=0;h<t;h++)c+=l[h]+(r?s:n[h]+a[h])+l[h+1]+this.rLines[h];var u=i(r?[(s+n[t]-a[t])/2,(s-n[t]+a[t])/2]:[n[t],a[t]],2),p=u[0],d=u[1];return c+={top:0,center:l[t]+(p+d)/2,bottom:l[t]+p+d+l[t+1],baseline:l[t]+p,axis:l[t]+p-.25}[e]||0},e.prototype.getEmHalfSpacing=function(t,e,r){void 0===r&&(r=1);var o=this.em(t*r),n=this.addEm(e,2/r);return n.unshift(o),n.push(o),n},e.prototype.getRowHalfSpacing=function(){var t=this.rSpace.map((function(t){return t/2}));return t.unshift(this.fSpace[1]),t.push(this.fSpace[1]),t},e.prototype.getColumnHalfSpacing=function(){var t=this.cSpace.map((function(t){return t/2}));return t.unshift(this.fSpace[0]),t.push(this.fSpace[0]),t},e.prototype.getAlignmentRow=function(){var t=i((0,c.split)(this.node.attributes.get(\"align\")),2),e=t[0],r=t[1];if(null==r)return[e,null];var o=parseInt(r);return o<0&&(o+=this.numRows+1),[e,o<1||o>this.numRows?null:o-1]},e.prototype.getColumnAttributes=function(t,e){void 0===e&&(e=1);var r=this.numCols-e,o=this.getAttributeArray(t);if(0===o.length)return null;for(;o.length<r;)o.push(o[o.length-1]);return o.length>r&&o.splice(r),o},e.prototype.getRowAttributes=function(t,e){void 0===e&&(e=1);var r=this.numRows-e,o=this.getAttributeArray(t);if(0===o.length)return null;for(;o.length<r;)o.push(o[o.length-1]);return o.length>r&&o.splice(r),o},e.prototype.getAttributeArray=function(t){var e=this.node.attributes.get(t);return e?(0,c.split)(e):[this.node.attributes.getDefault(t)]},e.prototype.addEm=function(t,e){var r=this;return void 0===e&&(e=1),t?t.map((function(t){return r.em(t/e)})):null},e.prototype.convertLengths=function(t){var e=this;return t?t.map((function(t){return e.length2em(t)})):null},e}(t)}},7805:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtdMixin=void 0,e.CommonMtdMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.invalidateBBox=function(){this.bboxComputed=!1},e.prototype.getWrapWidth=function(t){var e=this.parent.parent,r=this.parent,o=this.node.childPosition()-(r.labeled?1:0);return\"number\"==typeof e.cWidths[o]?e.cWidths[o]:e.getTableData().W[o]},e.prototype.getChildAlign=function(t){return this.node.attributes.get(\"columnalign\")},e}(t)}},8325:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtextMixin=void 0,e.CommonMtextMixin=function(t){var e;return e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.getVariant=function(){var e=this.jax.options,r=this.jax.math.outputData,o=(!!r.merrorFamily||!!e.merrorFont)&&this.node.Parent.isKind(\"merror\");if(r.mtextFamily||e.mtextFont||o){var n=this.node.attributes.get(\"mathvariant\"),i=this.constructor.INHERITFONTS[n]||this.jax.font.getCssFont(n),a=i[0]||(o?r.merrorFamily||e.merrorFont:r.mtextFamily||e.mtextFont);this.variant=this.explicitVariant(a,i[2]?\"bold\":\"\",i[1]?\"italic\":\"\")}else t.prototype.getVariant.call(this)},e}(t),e.INHERITFONTS={normal:[\"\",!1,!1],bold:[\"\",!1,!0],italic:[\"\",!0,!1],\"bold-italic\":[\"\",!0,!0]},e}},4818:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMlabeledtrMixin=e.CommonMtrMixin=void 0,e.CommonMtrMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"numCells\",{get:function(){return this.childNodes.length},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"labeled\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tableCells\",{get:function(){return this.childNodes},enumerable:!1,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t]},e.prototype.getChildBBoxes=function(){return this.childNodes.map((function(t){return t.getBBox()}))},e.prototype.stretchChildren=function(t){var e,r,o,i,a,s;void 0===t&&(t=null);var l=[],c=this.labeled?this.childNodes.slice(1):this.childNodes;try{for(var h=n(c),u=h.next();!u.done;u=h.next()){(C=u.value.childNodes[0]).canStretch(1)&&l.push(C)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=h.return)&&r.call(h)}finally{if(e)throw e.error}}var p=l.length,d=this.childNodes.length;if(p&&d>1){if(null===t){var f=0,m=0,y=p>1&&p===d;try{for(var v=n(c),b=v.next();!b.done;b=v.next()){var g=0===(C=b.value.childNodes[0]).stretch.dir;if(y||g){var x=C.getBBox(g),M=x.h,_=x.d;M>f&&(f=M),_>m&&(m=_)}}}catch(t){o={error:t}}finally{try{b&&!b.done&&(i=v.return)&&i.call(v)}finally{if(o)throw o.error}}t=[f,m]}try{for(var w=n(l),j=w.next();!j.done;j=w.next()){var C;(C=j.value).coreMO().getStretchedVariant(t)}}catch(t){a={error:t}}finally{try{j&&!j.done&&(s=w.return)&&s.call(w)}finally{if(a)throw a.error}}}},e}(t)},e.CommonMlabeledtrMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"numCells\",{get:function(){return Math.max(0,this.childNodes.length-1)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"labeled\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tableCells\",{get:function(){return this.childNodes.slice(1)},enumerable:!1,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t+1]},e.prototype.getChildBBoxes=function(){return this.childNodes.slice(1).map((function(t){return t.getBBox()}))},e}(t)}},9690:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMunderoverMixin=e.CommonMoverMixin=e.CommonMunderMixin=void 0,e.CommonMunderMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;return o.stretchChildren(),o}return o(e,t),Object.defineProperty(e.prototype,\"scriptChild\",{get:function(){return this.childNodes[this.node.under]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(e,r){if(void 0===r&&(r=!1),this.hasMovableLimits())t.prototype.computeBBox.call(this,e,r);else{e.empty();var o=this.baseChild.getOuterBBox(),i=this.scriptChild.getOuterBBox(),a=this.getUnderKV(o,i)[1],s=this.isLineBelow?0:this.getDelta(!0),l=n(this.getDeltaW([o,i],[0,-s]),2),c=l[0],h=l[1];e.combine(o,c,0),e.combine(i,h,a),e.d+=this.font.params.big_op_spacing5,e.clean(),this.setChildPWidths(r)}},e}(t)},e.CommonMoverMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;return o.stretchChildren(),o}return o(e,t),Object.defineProperty(e.prototype,\"scriptChild\",{get:function(){return this.childNodes[this.node.over]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(e){if(this.hasMovableLimits())t.prototype.computeBBox.call(this,e);else{e.empty();var r=this.baseChild.getOuterBBox(),o=this.scriptChild.getOuterBBox();this.node.attributes.get(\"accent\")&&(r.h=Math.max(r.h,this.font.params.x_height*r.scale));var i=this.getOverKU(r,o)[1],a=this.isLineAbove?0:this.getDelta(),s=n(this.getDeltaW([r,o],[0,a]),2),l=s[0],c=s[1];e.combine(r,l,0),e.combine(o,c,i),e.h+=this.font.params.big_op_spacing5,e.clean()}},e}(t)},e.CommonMunderoverMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;return o.stretchChildren(),o}return o(e,t),Object.defineProperty(e.prototype,\"underChild\",{get:function(){return this.childNodes[this.node.under]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"overChild\",{get:function(){return this.childNodes[this.node.over]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"subChild\",{get:function(){return this.underChild},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"supChild\",{get:function(){return this.overChild},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(e){if(this.hasMovableLimits())t.prototype.computeBBox.call(this,e);else{e.empty();var r=this.overChild.getOuterBBox(),o=this.baseChild.getOuterBBox(),i=this.underChild.getOuterBBox();this.node.attributes.get(\"accent\")&&(o.h=Math.max(o.h,this.font.params.x_height*o.scale));var a=this.getOverKU(o,r)[1],s=this.getUnderKV(o,i)[1],l=this.getDelta(),c=n(this.getDeltaW([o,i,r],[0,this.isLineBelow?0:-l,this.isLineAbove?0:l]),3),h=c[0],u=c[1],p=c[2];e.combine(o,h,0),e.combine(r,p,a),e.combine(i,u,s);var d=this.font.params.big_op_spacing5;e.h+=d,e.d+=d,e.clean()}},e}(t)}},7091:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonScriptbaseMixin=void 0;var l=r(8921);e.CommonScriptbaseMixin=function(t){var e;return e=function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,a([],i(e),!1))||this;o.baseScale=1,o.baseIc=0,o.baseRemoveIc=!1,o.baseIsChar=!1,o.baseHasAccentOver=null,o.baseHasAccentUnder=null,o.isLineAbove=!1,o.isLineBelow=!1,o.isMathAccent=!1;var n=o.baseCore=o.getBaseCore();return n?(o.setBaseAccentsFor(n),o.baseScale=o.getBaseScale(),o.baseIc=o.getBaseIc(),o.baseIsChar=o.isCharBase(),o.isMathAccent=o.baseIsChar&&o.scriptChild&&!!o.scriptChild.coreMO().node.getProperty(\"mathaccent\"),o.checkLineAccents(),o.baseRemoveIc=!o.isLineAbove&&!o.isLineBelow&&(!o.constructor.useIC||o.isMathAccent),o):o}return n(e,t),Object.defineProperty(e.prototype,\"baseChild\",{get:function(){return this.childNodes[this.node.base]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"scriptChild\",{get:function(){return this.childNodes[1]},enumerable:!1,configurable:!0}),e.prototype.getBaseCore=function(){for(var t=this.getSemanticBase()||this.childNodes[0];t&&(1===t.childNodes.length&&(t.node.isKind(\"mrow\")||t.node.isKind(\"TeXAtom\")&&t.node.texClass!==l.TEXCLASS.VCENTER||t.node.isKind(\"mstyle\")||t.node.isKind(\"mpadded\")||t.node.isKind(\"mphantom\")||t.node.isKind(\"semantics\"))||t.node.isKind(\"munderover\")&&t.isMathAccent);)this.setBaseAccentsFor(t),t=t.childNodes[0];return t||(this.baseHasAccentOver=this.baseHasAccentUnder=!1),t||this.childNodes[0]},e.prototype.setBaseAccentsFor=function(t){t.node.isKind(\"munderover\")&&(null===this.baseHasAccentOver&&(this.baseHasAccentOver=!!t.node.attributes.get(\"accent\")),null===this.baseHasAccentUnder&&(this.baseHasAccentUnder=!!t.node.attributes.get(\"accentunder\")))},e.prototype.getSemanticBase=function(){var t=this.node.attributes.getExplicit(\"data-semantic-fencepointer\");return this.getBaseFence(this.baseChild,t)},e.prototype.getBaseFence=function(t,e){var r,o;if(!t||!t.node.attributes||!e)return null;if(t.node.attributes.getExplicit(\"data-semantic-id\")===e)return t;try{for(var n=s(t.childNodes),i=n.next();!i.done;i=n.next()){var a=i.value,l=this.getBaseFence(a,e);if(l)return l}}catch(t){r={error:t}}finally{try{i&&!i.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}return null},e.prototype.getBaseScale=function(){for(var t=this.baseCore,e=1;t&&t!==this;){e*=t.getOuterBBox().rscale,t=t.parent}return e},e.prototype.getBaseIc=function(){return this.baseCore.getOuterBBox().ic*this.baseScale},e.prototype.getAdjustedIc=function(){var t=this.baseCore.getOuterBBox();return(t.ic?1.05*t.ic+.05:0)*this.baseScale},e.prototype.isCharBase=function(){var t=this.baseCore;return(t.node.isKind(\"mo\")&&null===t.size||t.node.isKind(\"mi\")||t.node.isKind(\"mn\"))&&1===t.bbox.rscale&&1===Array.from(t.getText()).length},e.prototype.checkLineAccents=function(){if(this.node.isKind(\"munderover\"))if(this.node.isKind(\"mover\"))this.isLineAbove=this.isLineAccent(this.scriptChild);else if(this.node.isKind(\"munder\"))this.isLineBelow=this.isLineAccent(this.scriptChild);else{this.isLineAbove=this.isLineAccent(this.overChild),this.isLineBelow=this.isLineAccent(this.underChild)}},e.prototype.isLineAccent=function(t){var e=t.coreMO().node;return e.isToken&&\"\\u2015\"===e.getText()},e.prototype.getBaseWidth=function(){var t=this.baseChild.getOuterBBox();return t.w*t.rscale-(this.baseRemoveIc?this.baseIc:0)+this.font.params.extra_ic},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.getBaseWidth(),o=i(this.getOffset(),2),n=o[0],a=o[1];t.append(this.baseChild.getOuterBBox()),t.combine(this.scriptChild.getOuterBBox(),r+n,a),t.w+=this.font.params.scriptspace,t.clean(),this.setChildPWidths(e)},e.prototype.getOffset=function(){return[0,0]},e.prototype.baseCharZero=function(t){var e=!!this.baseCore.node.attributes.get(\"largeop\"),r=this.baseScale;return this.baseIsChar&&!e&&1===r?0:t},e.prototype.getV=function(){var t=this.baseCore.getOuterBBox(),e=this.scriptChild.getOuterBBox(),r=this.font.params,o=this.length2em(this.node.attributes.get(\"subscriptshift\"),r.sub1);return Math.max(this.baseCharZero(t.d*this.baseScale+r.sub_drop*e.rscale),o,e.h*e.rscale-.8*r.x_height)},e.prototype.getU=function(){var t=this.baseCore.getOuterBBox(),e=this.scriptChild.getOuterBBox(),r=this.font.params,o=this.node.attributes.getList(\"displaystyle\",\"superscriptshift\"),n=this.node.getProperty(\"texprimestyle\")?r.sup3:o.displaystyle?r.sup1:r.sup2,i=this.length2em(o.superscriptshift,n);return Math.max(this.baseCharZero(t.h*this.baseScale-r.sup_drop*e.rscale),i,e.d*e.rscale+1/4*r.x_height)},e.prototype.hasMovableLimits=function(){var t=this.node.attributes.get(\"displaystyle\"),e=this.baseChild.coreMO().node;return!t&&!!e.attributes.get(\"movablelimits\")},e.prototype.getOverKU=function(t,e){var r=this.node.attributes.get(\"accent\"),o=this.font.params,n=e.d*e.rscale,i=o.rule_thickness*o.separation_factor,a=this.baseHasAccentOver?i:0,s=this.isLineAbove?3*o.rule_thickness:i,l=(r?s:Math.max(o.big_op_spacing1,o.big_op_spacing3-Math.max(0,n)))-a;return[l,t.h*t.rscale+l+n]},e.prototype.getUnderKV=function(t,e){var r=this.node.attributes.get(\"accentunder\"),o=this.font.params,n=e.h*e.rscale,i=o.rule_thickness*o.separation_factor,a=this.baseHasAccentUnder?i:0,s=this.isLineBelow?3*o.rule_thickness:i,l=(r?s:Math.max(o.big_op_spacing2,o.big_op_spacing4-n))-a;return[l,-(t.d*t.rscale+l+n)]},e.prototype.getDeltaW=function(t,e){var r,o,n,l;void 0===e&&(e=[0,0,0]);var c=this.node.attributes.get(\"align\"),h=t.map((function(t){return t.w*t.rscale}));h[0]-=this.baseRemoveIc&&!this.baseCore.node.attributes.get(\"largeop\")?this.baseIc:0;var u=Math.max.apply(Math,a([],i(h),!1)),p=[],d=0;try{for(var f=s(h.keys()),m=f.next();!m.done;m=f.next()){var y=m.value;p[y]=(\"center\"===c?(u-h[y])/2:\"right\"===c?u-h[y]:0)+e[y],p[y]<d&&(d=-p[y])}}catch(t){r={error:t}}finally{try{m&&!m.done&&(o=f.return)&&o.call(f)}finally{if(r)throw r.error}}if(d)try{for(var v=s(p.keys()),b=v.next();!b.done;b=v.next()){y=b.value;p[y]+=d}}catch(t){n={error:t}}finally{try{b&&!b.done&&(l=v.return)&&l.call(v)}finally{if(n)throw n.error}}return[1,2].map((function(e){return p[e]+=t[e]?t[e].dx*t[0].scale:0})),p},e.prototype.getDelta=function(t){void 0===t&&(t=!1);var e=this.node.attributes.get(\"accent\"),r=this.baseCore.getOuterBBox(),o=r.sk,n=r.ic;return((e&&!t?o:0)+this.font.skewIcFactor*n)*this.baseScale},e.prototype.stretchChildren=function(){var t,e,r,o,n,i,a=[];try{for(var l=s(this.childNodes),c=l.next();!c.done;c=l.next()){(_=c.value).canStretch(2)&&a.push(_)}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}var h=a.length,u=this.childNodes.length;if(h&&u>1){var p=0,d=h>1&&h===u;try{for(var f=s(this.childNodes),m=f.next();!m.done;m=f.next()){var y=0===(_=m.value).stretch.dir;if(d||y){var v=_.getOuterBBox(y),b=v.w,g=v.rscale;b*g>p&&(p=b*g)}}}catch(t){r={error:t}}finally{try{m&&!m.done&&(o=f.return)&&o.call(f)}finally{if(r)throw r.error}}try{for(var x=s(a),M=x.next();!M.done;M=x.next()){var _;(_=M.value).coreMO().getStretchedVariant([p/_.bbox.rscale])}}catch(t){n={error:t}}finally{try{M&&!M.done&&(i=x.return)&&i.call(x)}finally{if(n)throw n.error}}}},e}(t),e.useIC=!0,e}},3191:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonSemanticsMixin=void 0,e.CommonSemanticsMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.computeBBox=function(t,e){if(void 0===e&&(e=!1),this.childNodes.length){var r=this.childNodes[0].getBBox(),o=r.w,n=r.h,i=r.d;t.w=o,t.h=n,t.d=i}},e}(t)}},8723:function(t,e){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,e.PV=MathJax._.components.global.combineDefaults,e.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},4769:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},8921:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,e.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,e.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,e.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,e.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,e.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,e.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,e.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,e.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,e.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},4282:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.TeXAtom=MathJax._.core.MmlTree.MmlNodes.TeXAtom.TeXAtom},3969:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMaction=MathJax._.core.MmlTree.MmlNodes.maction.MmlMaction},304:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMath=MathJax._.core.MmlTree.MmlNodes.math.MmlMath},4374:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMenclose=MathJax._.core.MmlTree.MmlNodes.menclose.MmlMenclose},7451:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMfenced=MathJax._.core.MmlTree.MmlNodes.mfenced.MmlMfenced},848:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMfrac=MathJax._.core.MmlTree.MmlNodes.mfrac.MmlMfrac},910:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMglyph=MathJax._.core.MmlTree.MmlNodes.mglyph.MmlMglyph},7754:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMi=MathJax._.core.MmlTree.MmlNodes.mi.MmlMi},7764:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMmultiscripts=MathJax._.core.MmlTree.MmlNodes.mmultiscripts.MmlMmultiscripts,e.MmlMprescripts=MathJax._.core.MmlTree.MmlNodes.mmultiscripts.MmlMprescripts,e.MmlNone=MathJax._.core.MmlTree.MmlNodes.mmultiscripts.MmlNone},3235:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMn=MathJax._.core.MmlTree.MmlNodes.mn.MmlMn},9946:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMo=MathJax._.core.MmlTree.MmlNodes.mo.MmlMo},189:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMpadded=MathJax._.core.MmlTree.MmlNodes.mpadded.MmlMpadded},4664:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMroot=MathJax._.core.MmlTree.MmlNodes.mroot.MmlMroot},1691:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMrow=MathJax._.core.MmlTree.MmlNodes.mrow.MmlMrow,e.MmlInferredMrow=MathJax._.core.MmlTree.MmlNodes.mrow.MmlInferredMrow},4042:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMs=MathJax._.core.MmlTree.MmlNodes.ms.MmlMs},1465:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMspace=MathJax._.core.MmlTree.MmlNodes.mspace.MmlMspace},4655:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMsqrt=MathJax._.core.MmlTree.MmlNodes.msqrt.MmlMsqrt},5857:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMsubsup=MathJax._.core.MmlTree.MmlNodes.msubsup.MmlMsubsup,e.MmlMsub=MathJax._.core.MmlTree.MmlNodes.msubsup.MmlMsub,e.MmlMsup=MathJax._.core.MmlTree.MmlNodes.msubsup.MmlMsup},4859:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtable=MathJax._.core.MmlTree.MmlNodes.mtable.MmlMtable},2321:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtd=MathJax._.core.MmlTree.MmlNodes.mtd.MmlMtd},6277:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtext=MathJax._.core.MmlTree.MmlNodes.mtext.MmlMtext},4393:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtr=MathJax._.core.MmlTree.MmlNodes.mtr.MmlMtr,e.MmlMlabeledtr=MathJax._.core.MmlTree.MmlNodes.mtr.MmlMlabeledtr},3102:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMunderover=MathJax._.core.MmlTree.MmlNodes.munderover.MmlMunderover,e.MmlMunder=MathJax._.core.MmlTree.MmlNodes.munderover.MmlMunder,e.MmlMover=MathJax._.core.MmlTree.MmlNodes.munderover.MmlMover},9167:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlSemantics=MathJax._.core.MmlTree.MmlNodes.semantics.MmlSemantics,e.MmlAnnotationXML=MathJax._.core.MmlTree.MmlNodes.semantics.MmlAnnotationXML,e.MmlAnnotation=MathJax._.core.MmlTree.MmlNodes.semantics.MmlAnnotation},3985:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractOutputJax=MathJax._.core.OutputJax.AbstractOutputJax},9879:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractWrapper=MathJax._.core.Tree.Wrapper.AbstractWrapper},2506:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractWrapperFactory=MathJax._.core.Tree.WrapperFactory.AbstractWrapperFactory},3717:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.BBox=MathJax._.util.BBox.BBox},9077:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.util.Options.isObject,e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.OPTIONS=MathJax._.util.Options.OPTIONS,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions,e.lookup=MathJax._.util.Options.lookup},5888:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.CssStyles=MathJax._.util.StyleList.CssStyles},5878:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.Styles=MathJax._.util.Styles.Styles},6914:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.BIGDIMEN=MathJax._.util.lengths.BIGDIMEN,e.UNITS=MathJax._.util.lengths.UNITS,e.RELUNITS=MathJax._.util.lengths.RELUNITS,e.MATHSPACE=MathJax._.util.lengths.MATHSPACE,e.length2em=MathJax._.util.lengths.length2em,e.percent=MathJax._.util.lengths.percent,e.em=MathJax._.util.lengths.em,e.emRounded=MathJax._.util.lengths.emRounded,e.px=MathJax._.util.lengths.px},1490:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.sum=MathJax._.util.numeric.sum,e.max=MathJax._.util.numeric.max},6720:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.sortLength=MathJax._.util.string.sortLength,e.quotePattern=MathJax._.util.string.quotePattern,e.unicodeChars=MathJax._.util.string.unicodeChars,e.unicodeString=MathJax._.util.string.unicodeString,e.isPercent=MathJax._.util.string.isPercent,e.split=MathJax._.util.string.split},4142:function(t,e,r){r.r(e),r.d(e,{TeXFont:function(){return u}});var o=r(2098);function n(t){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},n(t)}function i(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function a(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function s(t,e){return s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},s(t,e)}function l(t){var e=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,o=h(t);if(e){var n=h(this).constructor;r=Reflect.construct(o,arguments,n)}else r=o.apply(this,arguments);return c(this,r)}}function c(t,e){if(e&&(\"object\"===n(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}function h(t){return h=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},h(t)}var u=function(t){!function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),e&&s(t,e)}(c,t);var e,r,o,n=l(c);function c(){return a(this,c),n.apply(this,arguments)}return e=c,r&&i(e.prototype,r),o&&i(e,o),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(o.FontData);u.OPTIONS={fontURL:\".\"}}},dt={};function ft(t){var e=dt[t];if(void 0!==e)return e.exports;var r=dt[t]={exports:{}};return pt[t].call(r.exports,r,r.exports,ft),r.exports}ft.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return ft.d(e,{a:e}),e},ft.d=function(t,e){for(var r in e)ft.o(e,r)&&!ft.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},ft.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},ft.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},t=ft(8723),e=ft(7306),r=ft(7016),o=ft(2098),n=ft(4458),i=ft(7427),a=ft(6617),s=ft(4477),l=ft(8369),c=ft(518),h=ft(1114),u=ft(7918),p=ft(4155),d=ft(3215),f=ft(7047),m=ft(7837),y=ft(1315),v=ft(3271),b=ft(1096),g=ft(7013),x=ft(3292),M=ft(7215),_=ft(7111),w=ft(3126),j=ft(9821),C=ft(6024),O=ft(5437),S=ft(513),T=ft(6918),B=ft(8709),L=ft(6359),P=ft(7500),A=ft(6577),H=ft(7322),k=ft(7795),N=ft(9250),D=ft(5373),E=ft(716),W=ft(1541),R=ft(1475),I=ft(3438),F=ft(555),J=ft(3345),V=ft(2057),z=ft(6200),U=ft(1346),X=ft(5705),q=ft(7969),K=ft(1419),Q=ft(9906),G=ft(2304),Y=ft(437),Z=ft(7481),$=ft(5997),tt=ft(9323),et=ft(6920),rt=ft(37),ot=ft(222),nt=ft(3069),it=ft(8589),at=ft(7805),st=ft(8325),lt=ft(4818),ct=ft(9690),ht=ft(7091),ut=ft(3191),MathJax.loader&&MathJax.loader.checkVersion(\"output/chtml\",e.q,\"output\"),(0,t.r8)({_:{output:{chtml_ts:r,chtml:{FontData:o,Notation:n,Usage:i,Wrapper:a,WrapperFactory:s,Wrappers_ts:l,Wrappers:{TeXAtom:c,TextNode:h,maction:u,math:p,menclose:d,mfenced:f,mfrac:m,mglyph:y,mi:v,mmultiscripts:b,mn:g,mo:x,mpadded:M,mroot:_,mrow:w,ms:j,mspace:C,msqrt:O,msubsup:S,mtable:T,mtd:B,mtext:L,mtr:P,munderover:A,scriptbase:H,semantics:k}},common:{FontData:N,Notation:D,OutputJax:E,Wrapper:W,WrapperFactory:R,Wrappers:{TeXAtom:I,TextNode:F,maction:J,math:V,menclose:z,mfenced:U,mfrac:X,mglyph:q,mi:K,mmultiscripts:Q,mn:G,mo:Y,mpadded:Z,mroot:$,mrow:tt,ms:et,mspace:rt,msqrt:ot,msubsup:nt,mtable:it,mtd:at,mtext:st,mtr:lt,munderover:ct,scriptbase:ht,semantics:ut}}}}}),MathJax.loader&&(0,t.PV)(MathJax.config.loader,\"output/chtml\",{checkReady:function(){return MathJax.loader.load(\"output/chtml/fonts/tex\")}}),MathJax.startup&&(MathJax.startup.registerConstructor(\"chtml\",r.CHTML),MathJax.startup.useOutput(\"chtml\"))}();"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/output/svg/fonts/tex.js",
    "content": "!function(){\"use strict\";var Q={8667:function(Q,T){T.q=void 0,T.q=\"3.2.2\"},2176:function(Q,T){var L,H=this&&this.__extends||(L=function(Q,T){return L=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Q,T){Q.__proto__=T}||function(Q,T){for(var L in T)Object.prototype.hasOwnProperty.call(T,L)&&(Q[L]=T[L])},L(Q,T)},function(Q,T){if(\"function\"!=typeof T&&null!==T)throw new TypeError(\"Class extends value \"+String(T)+\" is not a constructor or null\");function H(){this.constructor=Q}L(Q,T),Q.prototype=null===T?Object.create(T):(H.prototype=T.prototype,new H)}),V=this&&this.__assign||function(){return V=Object.assign||function(Q){for(var T,L=1,H=arguments.length;L<H;L++)for(var V in T=arguments[L])Object.prototype.hasOwnProperty.call(T,V)&&(Q[V]=T[V]);return Q},V.apply(this,arguments)},M=this&&this.__read||function(Q,T){var L=\"function\"==typeof Symbol&&Q[Symbol.iterator];if(!L)return Q;var H,V,M=L.call(Q),Z=[];try{for(;(void 0===T||T-- >0)&&!(H=M.next()).done;)Z.push(H.value)}catch(Q){V={error:Q}}finally{try{H&&!H.done&&(L=M.return)&&L.call(M)}finally{if(V)throw V.error}}return Z},Z=this&&this.__spreadArray||function(Q,T,L){if(L||2===arguments.length)for(var H,V=0,M=T.length;V<M;V++)!H&&V in T||(H||(H=Array.prototype.slice.call(T,0,V)),H[V]=T[V]);return Q.concat(H||Array.prototype.slice.call(T))};Object.defineProperty(T,\"__esModule\",{value:!0}),T.CommonTeXFontMixin=void 0,T.CommonTeXFontMixin=function(Q){var T;return T=function(Q){function T(){return null!==Q&&Q.apply(this,arguments)||this}return H(T,Q),T.prototype.getDelimiterData=function(Q){return this.getChar(\"-smallop\",Q)||this.getChar(\"-size4\",Q)},T}(Q),T.NAME=\"TeX\",T.defaultVariants=Z(Z([],M(Q.defaultVariants),!1),[[\"-smallop\",\"normal\"],[\"-largeop\",\"normal\"],[\"-size3\",\"normal\"],[\"-size4\",\"normal\"],[\"-tex-calligraphic\",\"italic\"],[\"-tex-bold-calligraphic\",\"bold-italic\"],[\"-tex-oldstyle\",\"normal\"],[\"-tex-bold-oldstyle\",\"bold\"],[\"-tex-mathit\",\"italic\"],[\"-tex-variant\",\"normal\"]],!1),T.defaultCssFonts=V(V({},Q.defaultCssFonts),{\"-smallop\":[\"serif\",!1,!1],\"-largeop\":[\"serif\",!1,!1],\"-size3\":[\"serif\",!1,!1],\"-size4\":[\"serif\",!1,!1],\"-tex-calligraphic\":[\"cursive\",!0,!1],\"-tex-bold-calligraphic\":[\"cursive\",!0,!0],\"-tex-oldstyle\":[\"serif\",!1,!1],\"-tex-bold-oldstyle\":[\"serif\",!1,!0],\"-tex-mathit\":[\"serif\",!0,!1]}),T.defaultSizeVariants=[\"normal\",\"-smallop\",\"-largeop\",\"-size3\",\"-size4\",\"-tex-variant\"],T.defaultStretchVariants=[\"-size4\"],T}},3869:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.boldItalic=void 0,T.boldItalic={47:[.711,.21,.894],305:[.452,.008,.394,{sk:.0319}],567:[.451,.201,.439,{sk:.0958}],8260:[.711,.21,.894],8710:[.711,0,.958,{sk:.192}],10744:[.711,.21,.894]}},7557:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.bold=void 0,T.bold={33:[.705,0,.35],34:[.694,-.329,.603],35:[.694,.193,.958],36:[.75,.056,.575],37:[.75,.056,.958],38:[.705,.011,.894],39:[.694,-.329,.319],40:[.75,.249,.447],41:[.75,.249,.447],42:[.75,-.306,.575],43:[.633,.131,.894],44:[.171,.194,.319],45:[.278,-.166,.383],46:[.171,0,.319],47:[.75,.25,.575],58:[.444,0,.319],59:[.444,.194,.319],60:[.587,.085,.894],61:[.393,-.109,.894],62:[.587,.085,.894],63:[.7,0,.543],64:[.699,.006,.894],91:[.75,.25,.319],92:[.75,.25,.575],93:[.75,.25,.319],94:[.694,-.52,.575],95:[-.01,.061,.575],96:[.706,-.503,.575],123:[.75,.25,.575],124:[.75,.249,.319],125:[.75,.25,.575],126:[.344,-.202,.575],168:[.695,-.535,.575],172:[.371,-.061,.767],175:[.607,-.54,.575],176:[.702,-.536,.575],177:[.728,.035,.894],180:[.706,-.503,.575],183:[.336,-.166,.319],215:[.53,.028,.894],247:[.597,.096,.894],305:[.442,0,.278,{sk:.0278}],567:[.442,.205,.306,{sk:.0833}],697:[.563,-.033,.344],710:[.694,-.52,.575],711:[.66,-.515,.575],713:[.607,-.54,.575],714:[.706,-.503,.575],715:[.706,-.503,.575],728:[.694,-.5,.575],729:[.695,-.525,.575],730:[.702,-.536,.575],732:[.694,-.552,.575],768:[.706,-.503,0],769:[.706,-.503,0],770:[.694,-.52,0],771:[.694,-.552,0],772:[.607,-.54,0],774:[.694,-.5,0],775:[.695,-.525,0],776:[.695,-.535,0],778:[.702,-.536,0],779:[.714,-.511,0],780:[.66,-.515,0],824:[.711,.21,0],8194:[0,0,.5],8195:[0,0,.999],8196:[0,0,.333],8197:[0,0,.25],8198:[0,0,.167],8201:[0,0,.167],8202:[0,0,.083],8211:[.3,-.249,.575],8212:[.3,-.249,1.15],8213:[.3,-.249,1.15],8214:[.75,.248,.575],8215:[-.01,.061,.575],8216:[.694,-.329,.319],8217:[.694,-.329,.319],8220:[.694,-.329,.603],8221:[.694,-.329,.603],8224:[.702,.211,.511],8225:[.702,.202,.511],8226:[.474,-.028,.575],8230:[.171,0,1.295],8242:[.563,-.033,.344],8243:[.563,0,.688],8244:[.563,0,1.032],8254:[.607,-.54,.575],8260:[.75,.25,.575],8279:[.563,0,1.376],8407:[.723,-.513,.575],8463:[.694,.008,.668,{sk:-.0319}],8467:[.702,.019,.474,{sk:.128}],8472:[.461,.21,.74],8501:[.694,0,.703],8592:[.518,.017,1.15],8593:[.694,.193,.575],8594:[.518,.017,1.15],8595:[.694,.194,.575],8596:[.518,.017,1.15],8597:[.767,.267,.575],8598:[.724,.194,1.15],8599:[.724,.193,1.15],8600:[.694,.224,1.15],8601:[.694,.224,1.15],8602:[.711,.21,1.15],8603:[.711,.21,1.15],8614:[.518,.017,1.15],8617:[.518,.017,1.282],8618:[.518,.017,1.282],8622:[.711,.21,1.15],8636:[.518,-.22,1.15],8637:[.281,.017,1.15],8640:[.518,-.22,1.15],8641:[.281,.017,1.15],8652:[.718,.017,1.15],8653:[.711,.21,1.15],8654:[.711,.21,1.15],8655:[.711,.21,1.15],8656:[.547,.046,1.15],8657:[.694,.193,.703],8658:[.547,.046,1.15],8659:[.694,.194,.703],8660:[.547,.046,1.15],8661:[.767,.267,.703],8704:[.694,.016,.639],8707:[.694,0,.639],8708:[.711,.21,.639],8709:[.767,.073,.575],8710:[.698,0,.958],8712:[.587,.086,.767],8713:[.711,.21,.767],8715:[.587,.086,.767],8716:[.711,.21,.767],8722:[.281,-.221,.894],8723:[.537,.227,.894],8725:[.75,.25,.575],8726:[.75,.25,.575],8727:[.472,-.028,.575],8728:[.474,-.028,.575],8729:[.474,-.028,.575],8730:[.82,.18,.958,{ic:.03}],8733:[.451,.008,.894],8734:[.452,.008,1.15],8736:[.714,0,.722],8739:[.75,.249,.319],8740:[.75,.249,.319],8741:[.75,.248,.575],8742:[.75,.248,.575],8743:[.604,.017,.767],8744:[.604,.016,.767],8745:[.603,.016,.767],8746:[.604,.016,.767],8747:[.711,.211,.569,{ic:.063}],8764:[.391,-.109,.894],8768:[.583,.082,.319],8769:[.711,.21,.894],8771:[.502,0,.894],8772:[.711,.21,.894],8773:[.638,.027,.894],8775:[.711,.21,.894],8776:[.524,-.032,.894],8777:[.711,.21,.894],8781:[.533,.032,.894],8784:[.721,-.109,.894],8800:[.711,.21,.894],8801:[.505,0,.894],8802:[.711,.21,.894],8804:[.697,.199,.894],8805:[.697,.199,.894],8810:[.617,.116,1.15],8811:[.618,.116,1.15],8813:[.711,.21,.894],8814:[.711,.21,.894],8815:[.711,.21,.894],8816:[.711,.21,.894],8817:[.711,.21,.894],8826:[.585,.086,.894],8827:[.586,.086,.894],8832:[.711,.21,.894],8833:[.711,.21,.894],8834:[.587,.085,.894],8835:[.587,.086,.894],8836:[.711,.21,.894],8837:[.711,.21,.894],8838:[.697,.199,.894],8839:[.697,.199,.894],8840:[.711,.21,.894],8841:[.711,.21,.894],8846:[.604,.016,.767],8849:[.697,.199,.894],8850:[.697,.199,.894],8851:[.604,0,.767],8852:[.604,0,.767],8853:[.632,.132,.894],8854:[.632,.132,.894],8855:[.632,.132,.894],8856:[.632,.132,.894],8857:[.632,.132,.894],8866:[.693,0,.703],8867:[.693,0,.703],8868:[.694,0,.894],8869:[.693,0,.894],8872:[.75,.249,.974],8876:[.711,.21,.703],8877:[.75,.249,.974],8900:[.523,.021,.575],8901:[.336,-.166,.319],8902:[.502,0,.575],8904:[.54,.039,1],8930:[.711,.21,.894],8931:[.711,.21,.894],8942:[.951,.029,.319],8943:[.336,-.166,1.295],8945:[.871,-.101,1.323],8968:[.75,.248,.511],8969:[.75,.248,.511],8970:[.749,.248,.511],8971:[.749,.248,.511],8994:[.405,-.108,1.15],8995:[.392,-.126,1.15],9001:[.75,.249,.447],9002:[.75,.249,.447],9651:[.711,0,1.022],9653:[.711,0,1.022],9657:[.54,.039,.575],9661:[.5,.21,1.022],9663:[.5,.21,1.022],9667:[.539,.038,.575],9711:[.711,.211,1.15],9824:[.719,.129,.894],9825:[.711,.024,.894],9826:[.719,.154,.894],9827:[.719,.129,.894],9837:[.75,.017,.447],9838:[.741,.223,.447],9839:[.724,.224,.447],10072:[.75,.249,.319],10216:[.75,.249,.447],10217:[.75,.249,.447],10229:[.518,.017,1.805],10230:[.518,.017,1.833],10231:[.518,.017,2.126],10232:[.547,.046,1.868],10233:[.547,.046,1.87],10234:[.547,.046,2.126],10236:[.518,.017,1.833],10744:[.711,.21,.894],10799:[.53,.028,.894],10815:[.686,0,.9],10927:[.696,.199,.894],10928:[.697,.199,.894],12296:[.75,.249,.447],12297:[.75,.249,.447]}},7481:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.delimiters=T.VSIZES=T.HDW3=T.HDW2=T.HDW1=void 0;var H=L(4228);T.HDW1=[.75,.25,.875],T.HDW2=[.85,.349,.667],T.HDW3=[.583,.082,.5],T.VSIZES=[1,1.2,1.8,2.4,3];var V={c:47,dir:H.V,sizes:T.VSIZES},M={c:175,dir:H.H,sizes:[.5],stretch:[0,175],HDW:[.59,-.544,.5]},Z={c:710,dir:H.H,sizes:[.5,.556,1,1.444,1.889]},i={c:732,dir:H.H,sizes:[.5,.556,1,1.444,1.889]},t={c:8211,dir:H.H,sizes:[.5],stretch:[0,8211],HDW:[.285,-.248,.5]},e={c:8592,dir:H.H,sizes:[1],stretch:[8592,8722],HDW:T.HDW3},s={c:8594,dir:H.H,sizes:[1],stretch:[0,8722,8594],HDW:T.HDW3},c={c:8596,dir:H.H,sizes:[1],stretch:[8592,8722,8594],HDW:T.HDW3},r={c:8612,dir:H.H,stretch:[8592,8722,8739],HDW:T.HDW3,min:1.278},o={c:8614,dir:H.H,sizes:[1],stretch:[8739,8722,8594],HDW:T.HDW3},a={c:8656,dir:H.H,sizes:[1],stretch:[8656,61],HDW:T.HDW3},l={c:8658,dir:H.H,sizes:[1],stretch:[0,61,8658],HDW:T.HDW3},n={c:8660,dir:H.H,sizes:[1],stretch:[8656,61,8658],HDW:T.HDW3},d={c:8722,dir:H.H,sizes:[.778],stretch:[0,8722],HDW:T.HDW3},k={c:8739,dir:H.V,sizes:[1],stretch:[0,8739],HDW:[.627,.015,.333]},u={c:9180,dir:H.H,sizes:[.778,1],schar:[8994,8994],variants:[5,0],stretch:[57680,57684,57681],HDW:[.32,.2,.5]},f={c:9181,dir:H.H,sizes:[.778,1],schar:[8995,8995],variants:[5,0],stretch:[57682,57684,57683],HDW:[.32,.2,.5]},p={c:9182,dir:H.H,stretch:[57680,57684,57681,57685],HDW:[.32,.2,.5],min:1.8},h={c:9183,dir:H.H,stretch:[57682,57684,57683,57686],HDW:[.32,.2,.5],min:1.8},v={c:10216,dir:H.V,sizes:T.VSIZES},_={c:10217,dir:H.V,sizes:T.VSIZES},D={c:10502,dir:H.H,stretch:[8656,61,8739],HDW:T.HDW3,min:1.278},b={c:10503,dir:H.H,stretch:[8872,61,8658],HDW:T.HDW3,min:1.278};T.delimiters={40:{dir:H.V,sizes:T.VSIZES,stretch:[9115,9116,9117],HDW:[.85,.349,.875]},41:{dir:H.V,sizes:T.VSIZES,stretch:[9118,9119,9120],HDW:[.85,.349,.875]},45:d,47:V,61:{dir:H.H,sizes:[.778],stretch:[0,61],HDW:T.HDW3},91:{dir:H.V,sizes:T.VSIZES,stretch:[9121,9122,9123],HDW:T.HDW2},92:{dir:H.V,sizes:T.VSIZES},93:{dir:H.V,sizes:T.VSIZES,stretch:[9124,9125,9126],HDW:T.HDW2},94:Z,95:t,123:{dir:H.V,sizes:T.VSIZES,stretch:[9127,9130,9129,9128],HDW:[.85,.349,.889]},124:{dir:H.V,sizes:[1],stretch:[0,8739],HDW:[.75,.25,.333]},125:{dir:H.V,sizes:T.VSIZES,stretch:[9131,9130,9133,9132],HDW:[.85,.349,.889]},126:i,175:M,710:Z,713:M,732:i,770:Z,771:i,818:t,8211:t,8212:t,8213:t,8214:{dir:H.V,sizes:[.602,1],schar:[0,8741],variants:[1,0],stretch:[0,8741],HDW:[.602,0,.556]},8215:t,8254:M,8407:s,8592:e,8593:{dir:H.V,sizes:[.888],stretch:[8593,9168],HDW:[.6,0,.667]},8594:s,8595:{dir:H.V,sizes:[.888],stretch:[0,9168,8595],HDW:[.6,0,.667]},8596:c,8597:{dir:H.V,sizes:[1.044],stretch:[8593,9168,8595],HDW:T.HDW1},8606:{dir:H.H,sizes:[1],stretch:[8606,8722],HDW:T.HDW3},8608:{dir:H.H,sizes:[1],stretch:[0,8722,8608],HDW:T.HDW3},8612:r,8613:{dir:H.V,stretch:[8593,9168,8869],HDW:T.HDW1,min:1.555},8614:o,8615:{dir:H.V,stretch:[8868,9168,8595],HDW:T.HDW1,min:1.555},8624:{dir:H.V,sizes:[.722],stretch:[8624,9168],HDW:T.HDW1},8625:{dir:H.V,sizes:[.722],stretch:[8625,9168],HDW:T.HDW1},8636:{dir:H.H,sizes:[1],stretch:[8636,8722],HDW:T.HDW3},8637:{dir:H.H,sizes:[1],stretch:[8637,8722],HDW:T.HDW3},8638:{dir:H.V,sizes:[.888],stretch:[8638,9168],HDW:T.HDW1},8639:{dir:H.V,sizes:[.888],stretch:[8639,9168],HDW:T.HDW1},8640:{dir:H.H,sizes:[1],stretch:[0,8722,8640],HDW:T.HDW3},8641:{dir:H.H,sizes:[1],stretch:[0,8722,8641],HDW:T.HDW3},8642:{dir:H.V,sizes:[.888],stretch:[0,9168,8642],HDW:T.HDW1},8643:{dir:H.V,sizes:[.888],stretch:[0,9168,8643],HDW:T.HDW1},8656:a,8657:{dir:H.V,sizes:[.888],stretch:[8657,8214],HDW:[.599,0,.778]},8658:l,8659:{dir:H.V,sizes:[.888],stretch:[0,8214,8659],HDW:[.6,0,.778]},8660:n,8661:{dir:H.V,sizes:[1.044],stretch:[8657,8214,8659],HDW:[.75,.25,.778]},8666:{dir:H.H,sizes:[1],stretch:[8666,8801],HDW:[.464,-.036,.5]},8667:{dir:H.H,sizes:[1],stretch:[0,8801,8667],HDW:[.464,-.036,.5]},8722:d,8725:V,8730:{dir:H.V,sizes:T.VSIZES,stretch:[57345,57344,9143],fullExt:[.65,2.3],HDW:[.85,.35,1.056]},8739:k,8741:{dir:H.V,sizes:[1],stretch:[0,8741],HDW:[.627,.015,.556]},8968:{dir:H.V,sizes:T.VSIZES,stretch:[9121,9122],HDW:T.HDW2},8969:{dir:H.V,sizes:T.VSIZES,stretch:[9124,9125],HDW:T.HDW2},8970:{dir:H.V,sizes:T.VSIZES,stretch:[0,9122,9123],HDW:T.HDW2},8971:{dir:H.V,sizes:T.VSIZES,stretch:[0,9125,9126],HDW:T.HDW2},8978:u,8994:u,8995:f,9001:v,9002:_,9130:{dir:H.V,sizes:[.32],stretch:[9130,9130,9130],HDW:[.29,.015,.889]},9135:t,9136:{dir:H.V,sizes:[.989],stretch:[9127,9130,9133],HDW:[.75,.25,.889]},9137:{dir:H.V,sizes:[.989],stretch:[9131,9130,9129],HDW:[.75,.25,.889]},9140:{dir:H.H,stretch:[9484,8722,9488],HDW:T.HDW3,min:1},9141:{dir:H.H,stretch:[9492,8722,9496],HDW:T.HDW3,min:1},9168:{dir:H.V,sizes:[.602,1],schar:[0,8739],variants:[1,0],stretch:[0,8739],HDW:[.602,0,.333]},9180:u,9181:f,9182:p,9183:h,9184:{dir:H.H,stretch:[714,713,715],HDW:[.59,-.544,.5],min:1},9185:{dir:H.H,stretch:[715,713,714],HDW:[.59,-.544,.5],min:1},9472:t,10072:k,10216:v,10217:_,10222:{dir:H.V,sizes:[.989],stretch:[9127,9130,9129],HDW:[.75,.25,.889]},10223:{dir:H.V,sizes:[.989],stretch:[9131,9130,9133],HDW:[.75,.25,.889]},10229:e,10230:s,10231:c,10232:a,10233:l,10234:n,10235:r,10236:o,10237:D,10238:b,10502:D,10503:b,10574:{dir:H.H,stretch:[8636,8722,8640],HDW:T.HDW3,min:2},10575:{dir:H.V,stretch:[8638,9168,8642],HDW:T.HDW1,min:1.776},10576:{dir:H.H,stretch:[8637,8722,8641],HDW:T.HDW3,min:2},10577:{dir:H.V,stretch:[8639,9168,8643],HDW:T.HDW1,min:.5},10586:{dir:H.H,stretch:[8636,8722,8739],HDW:T.HDW3,min:1.278},10587:{dir:H.H,stretch:[8739,8722,8640],HDW:T.HDW3,min:1.278},10588:{dir:H.V,stretch:[8638,9168,8869],HDW:T.HDW1,min:1.556},10589:{dir:H.V,stretch:[8868,9168,8642],HDW:T.HDW1,min:1.556},10590:{dir:H.H,stretch:[8637,8722,8739],HDW:T.HDW3,min:1.278},10591:{dir:H.H,stretch:[8739,8722,8641],HDW:T.HDW3,min:1.278},10592:{dir:H.V,stretch:[8639,9168,8869],HDW:T.HDW1,min:1.776},10593:{dir:H.V,stretch:[8868,9168,8643],HDW:T.HDW1,min:1.776},12296:v,12297:_,65079:p,65080:h}},5674:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.doubleStruck=void 0,T.doubleStruck={}},7002:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.frakturBold=void 0,T.frakturBold={33:[.689,.012,.349],34:[.695,-.432,.254],38:[.696,.016,.871],39:[.695,-.436,.25],40:[.737,.186,.459],41:[.735,.187,.459],42:[.692,-.449,.328],43:[.598,.082,.893],44:[.107,.191,.328],45:[.275,-.236,.893],46:[.102,.015,.328],47:[.721,.182,.593],48:[.501,.012,.593],49:[.489,0,.593],50:[.491,0,.593],51:[.487,.193,.593],52:[.495,.196,.593],53:[.481,.19,.593],54:[.704,.012,.593],55:[.479,.197,.593],56:[.714,.005,.593],57:[.487,.195,.593],58:[.457,.012,.255],59:[.458,.19,.255],61:[.343,-.168,.582],63:[.697,.014,.428],91:[.74,.13,.257],93:[.738,.132,.257],94:[.734,-.452,.59],8216:[.708,-.411,.254],8217:[.692,-.394,.254],8260:[.721,.182,.593],58113:[.63,.027,.587],58114:[.693,.212,.394,{ic:.014}],58115:[.681,.219,.387],58116:[.473,.212,.593],58117:[.684,.027,.393],58120:[.679,.22,.981],58121:[.717,.137,.727]}},9349:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.fraktur=void 0,T.fraktur={33:[.689,.012,.296],34:[.695,-.432,.215],38:[.698,.011,.738],39:[.695,-.436,.212],40:[.737,.186,.389],41:[.735,.187,.389],42:[.692,-.449,.278],43:[.598,.082,.756],44:[.107,.191,.278],45:[.275,-.236,.756],46:[.102,.015,.278],47:[.721,.182,.502],48:[.492,.013,.502],49:[.468,0,.502],50:[.474,0,.502],51:[.473,.182,.502],52:[.476,.191,.502],53:[.458,.184,.502],54:[.7,.013,.502],55:[.468,.181,.502],56:[.705,.01,.502],57:[.469,.182,.502],58:[.457,.012,.216],59:[.458,.189,.216],61:[.368,-.132,.756],63:[.693,.011,.362],91:[.74,.13,.278],93:[.738,.131,.278],94:[.734,-.452,.5],8216:[.708,-.41,.215],8217:[.692,-.395,.215],8260:[.721,.182,.502],58112:[.683,.032,.497],58113:[.616,.03,.498],58114:[.68,.215,.333],58115:[.679,.224,.329],58116:[.471,.214,.503],58117:[.686,.02,.333],58118:[.577,.021,.334,{ic:.013}],58119:[.475,.022,.501,{ic:.013}]}},9741:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.italic=void 0,T.italic={33:[.716,0,.307,{ic:.073}],34:[.694,-.379,.514,{ic:.024}],35:[.694,.194,.818,{ic:.01}],37:[.75,.056,.818,{ic:.029}],38:[.716,.022,.767,{ic:.035}],39:[.694,-.379,.307,{ic:.07}],40:[.75,.25,.409,{ic:.108}],41:[.75,.25,.409],42:[.75,-.32,.511,{ic:.073}],43:[.557,.057,.767],44:[.121,.194,.307],45:[.251,-.18,.358],46:[.121,0,.307],47:[.716,.215,.778],48:[.665,.021,.511,{ic:.051}],49:[.666,0,.511],50:[.666,.022,.511,{ic:.04}],51:[.666,.022,.511,{ic:.051}],52:[.666,.194,.511],53:[.666,.022,.511,{ic:.056}],54:[.665,.022,.511,{ic:.054}],55:[.666,.022,.511,{ic:.123}],56:[.666,.021,.511,{ic:.042}],57:[.666,.022,.511,{ic:.042}],58:[.431,0,.307],59:[.431,.194,.307],61:[.367,-.133,.767],63:[.716,0,.511,{ic:.04}],64:[.705,.011,.767,{ic:.022}],91:[.75,.25,.307,{ic:.139}],93:[.75,.25,.307,{ic:.052}],94:[.694,-.527,.511,{ic:.017}],95:[-.025,.062,.511,{ic:.043}],126:[.318,-.208,.511,{ic:.06}],305:[.441,.01,.307,{ic:.033}],567:[.442,.204,.332],768:[.697,-.5,0],769:[.697,-.5,0,{ic:.039}],770:[.694,-.527,0,{ic:.017}],771:[.668,-.558,0,{ic:.06}],772:[.589,-.544,0,{ic:.054}],774:[.694,-.515,0,{ic:.062}],775:[.669,-.548,0],776:[.669,-.554,0,{ic:.045}],778:[.716,-.542,0],779:[.697,-.503,0,{ic:.065}],780:[.638,-.502,0,{ic:.029}],989:[.605,.085,.778],8211:[.285,-.248,.511,{ic:.043}],8212:[.285,-.248,1.022,{ic:.016}],8213:[.285,-.248,1.022,{ic:.016}],8215:[-.025,.062,.511,{ic:.043}],8216:[.694,-.379,.307,{ic:.055}],8217:[.694,-.379,.307,{ic:.07}],8220:[.694,-.379,.514,{ic:.092}],8221:[.694,-.379,.514,{ic:.024}],8260:[.716,.215,.778],8463:[.695,.013,.54,{ic:.022}],8710:[.716,0,.833,{sk:.167}],10744:[.716,.215,.778]}},2827:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.largeop=void 0,T.largeop={40:[1.15,.649,.597],41:[1.15,.649,.597],47:[1.15,.649,.811],91:[1.15,.649,.472],92:[1.15,.649,.811],93:[1.15,.649,.472],123:[1.15,.649,.667],125:[1.15,.649,.667],710:[.772,-.565,1],732:[.75,-.611,1],770:[.772,-.565,0],771:[.75,-.611,0],8214:[.602,0,.778],8260:[1.15,.649,.811],8593:[.6,0,.667],8595:[.6,0,.667],8657:[.599,0,.778],8659:[.6,0,.778],8719:[.95,.45,1.278],8720:[.95,.45,1.278],8721:[.95,.45,1.444],8730:[1.15,.65,1,{ic:.02}],8739:[.627,.015,.333],8741:[.627,.015,.556],8747:[1.36,.862,.556,{ic:.388}],8748:[1.36,.862,1.084,{ic:.388}],8749:[1.36,.862,1.592,{ic:.388}],8750:[1.36,.862,.556,{ic:.388}],8896:[.95,.45,1.111],8897:[.95,.45,1.111],8898:[.949,.45,1.111],8899:[.95,.449,1.111],8968:[1.15,.649,.528],8969:[1.15,.649,.528],8970:[1.15,.649,.528],8971:[1.15,.649,.528],9001:[1.15,.649,.611],9002:[1.15,.649,.611],9168:[.602,0,.667],10072:[.627,.015,.333],10216:[1.15,.649,.611],10217:[1.15,.649,.611],10752:[.949,.449,1.511],10753:[.949,.449,1.511],10754:[.949,.449,1.511],10756:[.95,.449,1.111],10758:[.95,.45,1.111],10764:[1.36,.862,2.168,{ic:.388}],12296:[1.15,.649,.611],12297:[1.15,.649,.611]}},2970:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.monospace=void 0,T.monospace={32:[0,0,.525],33:[.622,0,.525],34:[.623,-.333,.525],35:[.611,0,.525],36:[.694,.082,.525],37:[.694,.083,.525],38:[.622,.011,.525],39:[.611,-.287,.525],40:[.694,.082,.525],41:[.694,.082,.525],42:[.52,-.09,.525],43:[.531,-.081,.525],44:[.14,.139,.525],45:[.341,-.271,.525],46:[.14,0,.525],47:[.694,.083,.525],58:[.431,0,.525],59:[.431,.139,.525],60:[.557,-.055,.525],61:[.417,-.195,.525],62:[.557,-.055,.525],63:[.617,0,.525],64:[.617,.006,.525],91:[.694,.082,.525],92:[.694,.083,.525],93:[.694,.082,.525],94:[.611,-.46,.525],95:[-.025,.095,.525],96:[.681,-.357,.525],123:[.694,.083,.525],124:[.694,.082,.525],125:[.694,.083,.525],126:[.611,-.466,.525],127:[.612,-.519,.525],160:[0,0,.525],305:[.431,0,.525],567:[.431,.228,.525],697:[.623,-.334,.525],768:[.611,-.485,0],769:[.611,-.485,0],770:[.611,-.46,0],771:[.611,-.466,0],772:[.577,-.5,0],774:[.611,-.504,0],776:[.612,-.519,0],778:[.619,-.499,0],780:[.577,-.449,0],913:[.623,0,.525],914:[.611,0,.525],915:[.611,0,.525],916:[.623,0,.525],917:[.611,0,.525],918:[.611,0,.525],919:[.611,0,.525],920:[.621,.01,.525],921:[.611,0,.525],922:[.611,0,.525],923:[.623,0,.525],924:[.611,0,.525],925:[.611,0,.525],926:[.611,0,.525],927:[.621,.01,.525],928:[.611,0,.525],929:[.611,0,.525],931:[.611,0,.525],932:[.611,0,.525],933:[.622,0,.525],934:[.611,0,.525],935:[.611,0,.525],936:[.611,0,.525],937:[.622,0,.525],8215:[-.025,.095,.525],8242:[.623,-.334,.525],8243:[.623,0,1.05],8244:[.623,0,1.575],8260:[.694,.083,.525],8279:[.623,0,2.1],8710:[.623,0,.525]}},1668:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.normal=void 0,T.normal={32:[0,0,.25],33:[.716,0,.278],34:[.694,-.379,.5],35:[.694,.194,.833],36:[.75,.056,.5],37:[.75,.056,.833],38:[.716,.022,.778],39:[.694,-.379,.278],40:[.75,.25,.389],41:[.75,.25,.389],42:[.75,-.32,.5],43:[.583,.082,.778],44:[.121,.194,.278],45:[.252,-.179,.333],46:[.12,0,.278],47:[.75,.25,.5],48:[.666,.022,.5],49:[.666,0,.5],50:[.666,0,.5],51:[.665,.022,.5],52:[.677,0,.5],53:[.666,.022,.5],54:[.666,.022,.5],55:[.676,.022,.5],56:[.666,.022,.5],57:[.666,.022,.5],58:[.43,0,.278],59:[.43,.194,.278],60:[.54,.04,.778],61:[.583,.082,.778],62:[.54,.04,.778],63:[.705,0,.472],64:[.705,.011,.778],65:[.716,0,.75],66:[.683,0,.708],67:[.705,.021,.722],68:[.683,0,.764],69:[.68,0,.681],70:[.68,0,.653],71:[.705,.022,.785],72:[.683,0,.75],73:[.683,0,.361],74:[.683,.022,.514],75:[.683,0,.778],76:[.683,0,.625],77:[.683,0,.917],78:[.683,0,.75],79:[.705,.022,.778],80:[.683,0,.681],81:[.705,.193,.778],82:[.683,.022,.736],83:[.705,.022,.556],84:[.677,0,.722],85:[.683,.022,.75],86:[.683,.022,.75],87:[.683,.022,1.028],88:[.683,0,.75],89:[.683,0,.75],90:[.683,0,.611],91:[.75,.25,.278],92:[.75,.25,.5],93:[.75,.25,.278],94:[.694,-.531,.5],95:[-.025,.062,.5],96:[.699,-.505,.5],97:[.448,.011,.5],98:[.694,.011,.556],99:[.448,.011,.444],100:[.694,.011,.556],101:[.448,.011,.444],102:[.705,0,.306,{ic:.066}],103:[.453,.206,.5],104:[.694,0,.556],105:[.669,0,.278],106:[.669,.205,.306],107:[.694,0,.528],108:[.694,0,.278],109:[.442,0,.833],110:[.442,0,.556],111:[.448,.01,.5],112:[.442,.194,.556],113:[.442,.194,.528],114:[.442,0,.392],115:[.448,.011,.394],116:[.615,.01,.389],117:[.442,.011,.556],118:[.431,.011,.528],119:[.431,.011,.722],120:[.431,0,.528],121:[.431,.204,.528],122:[.431,0,.444],123:[.75,.25,.5],124:[.75,.249,.278],125:[.75,.25,.5],126:[.318,-.215,.5],160:[0,0,.25],163:[.714,.011,.769],165:[.683,0,.75],168:[.669,-.554,.5],172:[.356,-.089,.667],174:[.709,.175,.947],175:[.59,-.544,.5],176:[.715,-.542,.5],177:[.666,0,.778],180:[.699,-.505,.5],183:[.31,-.19,.278],215:[.491,-.009,.778],240:[.749,.021,.556],247:[.537,.036,.778],305:[.442,0,.278,{sk:.0278}],567:[.442,.205,.306,{sk:.0833}],697:[.56,-.043,.275],710:[.694,-.531,.5],711:[.644,-.513,.5],713:[.59,-.544,.5],714:[.699,-.505,.5],715:[.699,-.505,.5],728:[.694,-.515,.5],729:[.669,-.549,.5],730:[.715,-.542,.5],732:[.668,-.565,.5],768:[.699,-.505,0],769:[.699,-.505,0],770:[.694,-.531,0],771:[.668,-.565,0],772:[.59,-.544,0],774:[.694,-.515,0],775:[.669,-.549,0],776:[.669,-.554,0],778:[.715,-.542,0],779:[.701,-.51,0],780:[.644,-.513,0],824:[.716,.215,0],913:[.716,0,.75],914:[.683,0,.708],915:[.68,0,.625],916:[.716,0,.833],917:[.68,0,.681],918:[.683,0,.611],919:[.683,0,.75],920:[.705,.022,.778],921:[.683,0,.361],922:[.683,0,.778],923:[.716,0,.694],924:[.683,0,.917],925:[.683,0,.75],926:[.677,0,.667],927:[.705,.022,.778],928:[.68,0,.75],929:[.683,0,.681],931:[.683,0,.722],932:[.677,0,.722],933:[.705,0,.778],934:[.683,0,.722],935:[.683,0,.75],936:[.683,0,.778],937:[.704,0,.722],8192:[0,0,.5],8193:[0,0,1],8194:[0,0,.5],8195:[0,0,1],8196:[0,0,.333],8197:[0,0,.25],8198:[0,0,.167],8201:[0,0,.167],8202:[0,0,.1],8203:[0,0,0],8204:[0,0,0],8211:[.285,-.248,.5],8212:[.285,-.248,1],8213:[.285,-.248,1],8214:[.75,.25,.5],8215:[-.025,.062,.5],8216:[.694,-.379,.278],8217:[.694,-.379,.278],8220:[.694,-.379,.5],8221:[.694,-.379,.5],8224:[.705,.216,.444],8225:[.705,.205,.444],8226:[.444,-.055,.5],8230:[.12,0,1.172],8242:[.56,-.043,.275],8243:[.56,0,.55],8244:[.56,0,.825],8245:[.56,-.043,.275],8246:[.56,0,.55],8247:[.56,0,.825],8254:[.59,-.544,.5],8260:[.75,.25,.5],8279:[.56,0,1.1],8288:[0,0,0],8289:[0,0,0],8290:[0,0,0],8291:[0,0,0],8292:[0,0,0],8407:[.714,-.516,.5],8450:[.702,.019,.722],8459:[.717,.036,.969,{ic:.272,sk:.333}],8460:[.666,.133,.72],8461:[.683,0,.778],8462:[.694,.011,.576,{sk:-.0278}],8463:[.695,.013,.54,{ic:.022}],8464:[.717,.017,.809,{ic:.137,sk:.333}],8465:[.686,.026,.554],8466:[.717,.017,.874,{ic:.161,sk:.306}],8467:[.705,.02,.417,{sk:.111}],8469:[.683,.02,.722],8472:[.453,.216,.636,{sk:.111}],8473:[.683,0,.611],8474:[.701,.181,.778],8475:[.717,.017,.85,{ic:.037,sk:.194}],8476:[.686,.026,.828],8477:[.683,0,.722],8484:[.683,0,.667],8486:[.704,0,.722],8487:[.684,.022,.722],8488:[.729,.139,.602],8492:[.708,.028,.908,{ic:.02,sk:.194}],8493:[.685,.024,.613],8496:[.707,.008,.562,{ic:.156,sk:.139}],8497:[.735,.036,.895,{ic:.095,sk:.222}],8498:[.695,0,.556],8499:[.721,.05,1.08,{ic:.136,sk:.444}],8501:[.694,0,.611],8502:[.763,.021,.667,{ic:.02}],8503:[.764,.043,.444],8504:[.764,.043,.667],8513:[.705,.023,.639],8592:[.511,.011,1],8593:[.694,.193,.5],8594:[.511,.011,1],8595:[.694,.194,.5],8596:[.511,.011,1],8597:[.772,.272,.5],8598:[.72,.195,1],8599:[.72,.195,1],8600:[.695,.22,1],8601:[.695,.22,1],8602:[.437,-.06,1],8603:[.437,-.06,1],8606:[.417,-.083,1],8608:[.417,-.083,1],8610:[.417,-.083,1.111],8611:[.417,-.083,1.111],8614:[.511,.011,1],8617:[.511,.011,1.126],8618:[.511,.011,1.126],8619:[.575,.041,1],8620:[.575,.041,1],8621:[.417,-.083,1.389],8622:[.437,-.06,1],8624:[.722,0,.5],8625:[.722,0,.5],8630:[.461,0,1],8631:[.46,0,1],8634:[.65,.083,.778],8635:[.65,.083,.778],8636:[.511,-.23,1],8637:[.27,.011,1],8638:[.694,.194,.417],8639:[.694,.194,.417],8640:[.511,-.23,1],8641:[.27,.011,1],8642:[.694,.194,.417],8643:[.694,.194,.417],8644:[.667,0,1],8646:[.667,0,1],8647:[.583,.083,1],8648:[.694,.193,.833],8649:[.583,.083,1],8650:[.694,.194,.833],8651:[.514,.014,1],8652:[.671,.011,1],8653:[.534,.035,1],8654:[.534,.037,1],8655:[.534,.035,1],8656:[.525,.024,1],8657:[.694,.194,.611],8658:[.525,.024,1],8659:[.694,.194,.611],8660:[.526,.025,1],8661:[.772,.272,.611],8666:[.611,.111,1],8667:[.611,.111,1],8669:[.417,-.083,1],8672:[.437,-.064,1.334],8674:[.437,-.064,1.334],8704:[.694,.022,.556],8705:[.846,.021,.5],8706:[.715,.022,.531,{ic:.035,sk:.0833}],8707:[.694,0,.556],8708:[.716,.215,.556],8709:[.772,.078,.5],8710:[.716,0,.833],8711:[.683,.033,.833],8712:[.54,.04,.667],8713:[.716,.215,.667],8715:[.54,.04,.667],8716:[.716,.215,.667],8717:[.44,0,.429,{ic:.027}],8719:[.75,.25,.944],8720:[.75,.25,.944],8721:[.75,.25,1.056],8722:[.583,.082,.778],8723:[.5,.166,.778],8724:[.766,.093,.778],8725:[.75,.25,.5],8726:[.75,.25,.5],8727:[.465,-.035,.5],8728:[.444,-.055,.5],8729:[.444,-.055,.5],8730:[.8,.2,.833,{ic:.02}],8733:[.442,.011,.778],8734:[.442,.011,1],8736:[.694,0,.722],8737:[.714,.02,.722],8738:[.551,.051,.722],8739:[.75,.249,.278],8740:[.75,.252,.278,{ic:.019}],8741:[.75,.25,.5],8742:[.75,.25,.5,{ic:.018}],8743:[.598,.022,.667],8744:[.598,.022,.667],8745:[.598,.022,.667],8746:[.598,.022,.667],8747:[.716,.216,.417,{ic:.055}],8748:[.805,.306,.819,{ic:.138}],8749:[.805,.306,1.166,{ic:.138}],8750:[.805,.306,.472,{ic:.138}],8756:[.471,.082,.667],8757:[.471,.082,.667],8764:[.367,-.133,.778],8765:[.367,-.133,.778],8768:[.583,.083,.278],8769:[.467,-.032,.778],8770:[.463,-.034,.778],8771:[.464,-.036,.778],8772:[.716,.215,.778],8773:[.589,-.022,.778],8775:[.652,.155,.778],8776:[.483,-.055,.778],8777:[.716,.215,.778],8778:[.579,.039,.778],8781:[.484,-.016,.778],8782:[.492,-.008,.778],8783:[.492,-.133,.778],8784:[.67,-.133,.778],8785:[.609,.108,.778],8786:[.601,.101,.778],8787:[.601,.102,.778],8790:[.367,-.133,.778],8791:[.721,-.133,.778],8796:[.859,-.133,.778],8800:[.716,.215,.778],8801:[.464,-.036,.778],8802:[.716,.215,.778],8804:[.636,.138,.778],8805:[.636,.138,.778],8806:[.753,.175,.778],8807:[.753,.175,.778],8808:[.752,.286,.778],8809:[.752,.286,.778],8810:[.568,.067,1],8811:[.567,.067,1],8812:[.75,.25,.5],8813:[.716,.215,.778],8814:[.708,.209,.778],8815:[.708,.209,.778],8816:[.801,.303,.778],8817:[.801,.303,.778],8818:[.732,.228,.778],8819:[.732,.228,.778],8820:[.732,.228,.778],8821:[.732,.228,.778],8822:[.681,.253,.778],8823:[.681,.253,.778],8824:[.716,.253,.778],8825:[.716,.253,.778],8826:[.539,.041,.778],8827:[.539,.041,.778],8828:[.58,.153,.778],8829:[.58,.154,.778],8830:[.732,.228,.778],8831:[.732,.228,.778],8832:[.705,.208,.778],8833:[.705,.208,.778],8834:[.54,.04,.778],8835:[.54,.04,.778],8836:[.716,.215,.778],8837:[.716,.215,.778],8838:[.636,.138,.778],8839:[.636,.138,.778],8840:[.801,.303,.778],8841:[.801,.303,.778],8842:[.635,.241,.778],8843:[.635,.241,.778],8846:[.598,.022,.667],8847:[.539,.041,.778],8848:[.539,.041,.778],8849:[.636,.138,.778],8850:[.636,.138,.778],8851:[.598,0,.667],8852:[.598,0,.667],8853:[.583,.083,.778],8854:[.583,.083,.778],8855:[.583,.083,.778],8856:[.583,.083,.778],8857:[.583,.083,.778],8858:[.582,.082,.778],8859:[.582,.082,.778],8861:[.582,.082,.778],8862:[.689,0,.778],8863:[.689,0,.778],8864:[.689,0,.778],8865:[.689,0,.778],8866:[.694,0,.611],8867:[.694,0,.611],8868:[.668,0,.778],8869:[.668,0,.778],8872:[.75,.249,.867],8873:[.694,0,.722],8874:[.694,0,.889],8876:[.695,0,.611],8877:[.695,0,.611],8878:[.695,0,.722],8879:[.695,0,.722],8882:[.539,.041,.778],8883:[.539,.041,.778],8884:[.636,.138,.778],8885:[.636,.138,.778],8888:[.408,-.092,1.111],8890:[.431,.212,.556],8891:[.716,0,.611],8892:[.716,0,.611],8896:[.75,.249,.833],8897:[.75,.249,.833],8898:[.75,.249,.833],8899:[.75,.249,.833],8900:[.488,-.012,.5],8901:[.31,-.19,.278],8902:[.486,-.016,.5],8903:[.545,.044,.778],8904:[.505,.005,.9],8905:[.492,-.008,.778],8906:[.492,-.008,.778],8907:[.694,.022,.778],8908:[.694,.022,.778],8909:[.464,-.036,.778],8910:[.578,.021,.76],8911:[.578,.022,.76],8912:[.54,.04,.778],8913:[.54,.04,.778],8914:[.598,.022,.667],8915:[.598,.022,.667],8916:[.736,.022,.667],8918:[.541,.041,.778],8919:[.541,.041,.778],8920:[.568,.067,1.333],8921:[.568,.067,1.333],8922:[.886,.386,.778],8923:[.886,.386,.778],8926:[.734,0,.778],8927:[.734,0,.778],8928:[.801,.303,.778],8929:[.801,.303,.778],8930:[.716,.215,.778],8931:[.716,.215,.778],8934:[.73,.359,.778],8935:[.73,.359,.778],8936:[.73,.359,.778],8937:[.73,.359,.778],8938:[.706,.208,.778],8939:[.706,.208,.778],8940:[.802,.303,.778],8941:[.801,.303,.778],8942:[1.3,.03,.278],8943:[.31,-.19,1.172],8945:[1.52,-.1,1.282],8965:[.716,0,.611],8966:[.813,.097,.611],8968:[.75,.25,.444],8969:[.75,.25,.444],8970:[.75,.25,.444],8971:[.75,.25,.444],8988:[.694,-.306,.5],8989:[.694,-.306,.5],8990:[.366,.022,.5],8991:[.366,.022,.5],8994:[.388,-.122,1],8995:[.378,-.134,1],9001:[.75,.25,.389],9002:[.75,.25,.389],9136:[.744,.244,.412],9137:[.744,.244,.412],9168:[.602,0,.667],9416:[.709,.175,.902],9484:[.694,-.306,.5],9488:[.694,-.306,.5],9492:[.366,.022,.5],9496:[.366,.022,.5],9585:[.694,.195,.889],9586:[.694,.195,.889],9632:[.689,0,.778],9633:[.689,0,.778],9642:[.689,0,.778],9650:[.575,.02,.722],9651:[.716,0,.889],9652:[.575,.02,.722],9653:[.716,0,.889],9654:[.539,.041,.778],9656:[.539,.041,.778],9657:[.505,.005,.5],9660:[.576,.019,.722],9661:[.5,.215,.889],9662:[.576,.019,.722],9663:[.5,.215,.889],9664:[.539,.041,.778],9666:[.539,.041,.778],9667:[.505,.005,.5],9674:[.716,.132,.667],9711:[.715,.215,1],9723:[.689,0,.778],9724:[.689,0,.778],9733:[.694,.111,.944],9824:[.727,.13,.778],9825:[.716,.033,.778],9826:[.727,.162,.778],9827:[.726,.13,.778],9837:[.75,.022,.389],9838:[.734,.223,.389],9839:[.723,.223,.389],10003:[.706,.034,.833],10016:[.716,.022,.833],10072:[.75,.249,.278],10216:[.75,.25,.389],10217:[.75,.25,.389],10222:[.744,.244,.412],10223:[.744,.244,.412],10229:[.511,.011,1.609],10230:[.511,.011,1.638],10231:[.511,.011,1.859],10232:[.525,.024,1.609],10233:[.525,.024,1.638],10234:[.525,.024,1.858],10236:[.511,.011,1.638],10731:[.716,.132,.667],10744:[.716,.215,.778],10752:[.75,.25,1.111],10753:[.75,.25,1.111],10754:[.75,.25,1.111],10756:[.75,.249,.833],10758:[.75,.249,.833],10764:[.805,.306,1.638,{ic:.138}],10799:[.491,-.009,.778],10815:[.683,0,.75],10846:[.813,.097,.611],10877:[.636,.138,.778],10878:[.636,.138,.778],10885:[.762,.29,.778],10886:[.762,.29,.778],10887:[.635,.241,.778],10888:[.635,.241,.778],10889:[.761,.387,.778],10890:[.761,.387,.778],10891:[1.003,.463,.778],10892:[1.003,.463,.778],10901:[.636,.138,.778],10902:[.636,.138,.778],10927:[.636,.138,.778],10928:[.636,.138,.778],10933:[.752,.286,.778],10934:[.752,.286,.778],10935:[.761,.294,.778],10936:[.761,.294,.778],10937:[.761,.337,.778],10938:[.761,.337,.778],10949:[.753,.215,.778],10950:[.753,.215,.778],10955:[.783,.385,.778],10956:[.783,.385,.778],12296:[.75,.25,.389],12297:[.75,.25,.389],57350:[.43,.023,.222,{ic:.018}],57351:[.431,.024,.389,{ic:.018}],57352:[.605,.085,.778],57353:[.434,.006,.667,{ic:.067}],57356:[.752,.284,.778],57357:[.752,.284,.778],57358:[.919,.421,.778],57359:[.801,.303,.778],57360:[.801,.303,.778],57361:[.919,.421,.778],57366:[.828,.33,.778],57367:[.752,.332,.778],57368:[.828,.33,.778],57369:[.752,.333,.778],57370:[.634,.255,.778],57371:[.634,.254,.778],119808:[.698,0,.869],119809:[.686,0,.818],119810:[.697,.011,.831],119811:[.686,0,.882],119812:[.68,0,.756],119813:[.68,0,.724],119814:[.697,.01,.904],119815:[.686,0,.9],119816:[.686,0,.436],119817:[.686,.011,.594],119818:[.686,0,.901],119819:[.686,0,.692],119820:[.686,0,1.092],119821:[.686,0,.9],119822:[.696,.01,.864],119823:[.686,0,.786],119824:[.696,.193,.864],119825:[.686,.011,.862],119826:[.697,.011,.639],119827:[.675,0,.8],119828:[.686,.011,.885],119829:[.686,.007,.869],119830:[.686,.007,1.189],119831:[.686,0,.869],119832:[.686,0,.869],119833:[.686,0,.703],119834:[.453,.006,.559],119835:[.694,.006,.639],119836:[.453,.006,.511],119837:[.694,.006,.639],119838:[.452,.006,.527],119839:[.7,0,.351,{ic:.101}],119840:[.455,.201,.575],119841:[.694,0,.639],119842:[.695,0,.319],119843:[.695,.2,.351],119844:[.694,0,.607],119845:[.694,0,.319],119846:[.45,0,.958],119847:[.45,0,.639],119848:[.452,.005,.575],119849:[.45,.194,.639],119850:[.45,.194,.607],119851:[.45,0,.474],119852:[.453,.006,.454],119853:[.635,.005,.447],119854:[.45,.006,.639],119855:[.444,0,.607],119856:[.444,0,.831],119857:[.444,0,.607],119858:[.444,.2,.607],119859:[.444,0,.511],119860:[.716,0,.75,{sk:.139}],119861:[.683,0,.759,{sk:.0833}],119862:[.705,.022,.715,{ic:.045,sk:.0833}],119863:[.683,0,.828,{sk:.0556}],119864:[.68,0,.738,{ic:.026,sk:.0833}],119865:[.68,0,.643,{ic:.106,sk:.0833}],119866:[.705,.022,.786,{sk:.0833}],119867:[.683,0,.831,{ic:.057,sk:.0556}],119868:[.683,0,.44,{ic:.064,sk:.111}],119869:[.683,.022,.555,{ic:.078,sk:.167}],119870:[.683,0,.849,{ic:.04,sk:.0556}],119871:[.683,0,.681,{sk:.0278}],119872:[.683,0,.97,{ic:.081,sk:.0833}],119873:[.683,0,.803,{ic:.085,sk:.0833}],119874:[.704,.022,.763,{sk:.0833}],119875:[.683,0,.642,{ic:.109,sk:.0833}],119876:[.704,.194,.791,{sk:.0833}],119877:[.683,.021,.759,{sk:.0833}],119878:[.705,.022,.613,{ic:.032,sk:.0833}],119879:[.677,0,.584,{ic:.12,sk:.0833}],119880:[.683,.022,.683,{ic:.084,sk:.0278}],119881:[.683,.022,.583,{ic:.186}],119882:[.683,.022,.944,{ic:.104}],119883:[.683,0,.828,{ic:.024,sk:.0833}],119884:[.683,0,.581,{ic:.182}],119885:[.683,0,.683,{ic:.04,sk:.0833}],119886:[.441,.01,.529],119887:[.694,.011,.429],119888:[.442,.011,.433,{sk:.0556}],119889:[.694,.01,.52,{sk:.167}],119890:[.442,.011,.466,{sk:.0556}],119891:[.705,.205,.49,{ic:.06,sk:.167}],119892:[.442,.205,.477,{sk:.0278}],119894:[.661,.011,.345],119895:[.661,.204,.412],119896:[.694,.011,.521],119897:[.694,.011,.298,{sk:.0833}],119898:[.442,.011,.878],119899:[.442,.011,.6],119900:[.441,.011,.485,{sk:.0556}],119901:[.442,.194,.503,{sk:.0833}],119902:[.442,.194,.446,{ic:.014,sk:.0833}],119903:[.442,.011,.451,{sk:.0556}],119904:[.442,.01,.469,{sk:.0556}],119905:[.626,.011,.361,{sk:.0833}],119906:[.442,.011,.572,{sk:.0278}],119907:[.443,.011,.485,{sk:.0278}],119908:[.443,.011,.716,{sk:.0833}],119909:[.442,.011,.572,{sk:.0278}],119910:[.442,.205,.49,{sk:.0556}],119911:[.442,.011,.465,{sk:.0556}],119912:[.711,0,.869,{sk:.16}],119913:[.686,0,.866,{sk:.0958}],119914:[.703,.017,.817,{ic:.038,sk:.0958}],119915:[.686,0,.938,{sk:.0639}],119916:[.68,0,.81,{ic:.015,sk:.0958}],119917:[.68,0,.689,{ic:.12,sk:.0958}],119918:[.703,.016,.887,{sk:.0958}],119919:[.686,0,.982,{ic:.045,sk:.0639}],119920:[.686,0,.511,{ic:.062,sk:.128}],119921:[.686,.017,.631,{ic:.063,sk:.192}],119922:[.686,0,.971,{ic:.032,sk:.0639}],119923:[.686,0,.756,{sk:.0319}],119924:[.686,0,1.142,{ic:.077,sk:.0958}],119925:[.686,0,.95,{ic:.077,sk:.0958}],119926:[.703,.017,.837,{sk:.0958}],119927:[.686,0,.723,{ic:.124,sk:.0958}],119928:[.703,.194,.869,{sk:.0958}],119929:[.686,.017,.872,{sk:.0958}],119930:[.703,.017,.693,{ic:.021,sk:.0958}],119931:[.675,0,.637,{ic:.135,sk:.0958}],119932:[.686,.016,.8,{ic:.077,sk:.0319}],119933:[.686,.016,.678,{ic:.208}],119934:[.686,.017,1.093,{ic:.114}],119935:[.686,0,.947,{sk:.0958}],119936:[.686,0,.675,{ic:.201}],119937:[.686,0,.773,{ic:.032,sk:.0958}],119938:[.452,.008,.633],119939:[.694,.008,.521],119940:[.451,.008,.513,{sk:.0639}],119941:[.694,.008,.61,{sk:.192}],119942:[.452,.008,.554,{sk:.0639}],119943:[.701,.201,.568,{ic:.056,sk:.192}],119944:[.452,.202,.545,{sk:.0319}],119945:[.694,.008,.668,{sk:-.0319}],119946:[.694,.008,.405],119947:[.694,.202,.471],119948:[.694,.008,.604],119949:[.694,.008,.348,{sk:.0958}],119950:[.452,.008,1.032],119951:[.452,.008,.713],119952:[.452,.008,.585,{sk:.0639}],119953:[.452,.194,.601,{sk:.0958}],119954:[.452,.194,.542,{sk:.0958}],119955:[.452,.008,.529,{sk:.0639}],119956:[.451,.008,.531,{sk:.0639}],119957:[.643,.007,.415,{sk:.0958}],119958:[.452,.008,.681,{sk:.0319}],119959:[.453,.008,.567,{sk:.0319}],119960:[.453,.008,.831,{sk:.0958}],119961:[.452,.008,.659,{sk:.0319}],119962:[.452,.202,.59,{sk:.0639}],119963:[.452,.008,.555,{sk:.0639}],119964:[.717,.008,.803,{ic:.213,sk:.389}],119966:[.728,.026,.666,{ic:.153,sk:.278}],119967:[.708,.031,.774,{ic:.081,sk:.111}],119970:[.717,.037,.61,{ic:.128,sk:.25}],119973:[.717,.314,1.052,{ic:.081,sk:.417}],119974:[.717,.037,.914,{ic:.29,sk:.361}],119977:[.726,.036,.902,{ic:.306,sk:.389}],119978:[.707,.008,.738,{ic:.067,sk:.167}],119979:[.716,.037,1.013,{ic:.018,sk:.222}],119980:[.717,.017,.883,{sk:.278}],119982:[.708,.036,.868,{ic:.148,sk:.333}],119983:[.735,.037,.747,{ic:.249,sk:.222}],119984:[.717,.017,.8,{ic:.16,sk:.25}],119985:[.717,.017,.622,{ic:.228,sk:.222}],119986:[.717,.017,.805,{ic:.221,sk:.25}],119987:[.717,.017,.944,{ic:.187,sk:.278}],119988:[.716,.017,.71,{ic:.249,sk:.194}],119989:[.717,.016,.821,{ic:.211,sk:.306}],120068:[.696,.026,.718],120069:[.691,.027,.884],120071:[.685,.027,.832],120072:[.685,.024,.663],120073:[.686,.153,.611],120074:[.69,.026,.785],120077:[.686,.139,.552],120078:[.68,.027,.668,{ic:.014}],120079:[.686,.026,.666],120080:[.692,.027,1.05],120081:[.686,.025,.832],120082:[.729,.027,.827],120083:[.692,.218,.828],120084:[.729,.069,.827],120086:[.692,.027,.829],120087:[.701,.027,.669],120088:[.697,.027,.646,{ic:.019}],120089:[.686,.026,.831],120090:[.686,.027,1.046],120091:[.688,.027,.719],120092:[.686,.218,.833],120094:[.47,.035,.5],120095:[.685,.031,.513],120096:[.466,.029,.389],120097:[.609,.033,.499],120098:[.467,.03,.401],120099:[.681,.221,.326],120100:[.47,.209,.504],120101:[.688,.205,.521],120102:[.673,.02,.279],120103:[.672,.208,.281],120104:[.689,.025,.389],120105:[.685,.02,.28],120106:[.475,.026,.767],120107:[.475,.022,.527],120108:[.48,.028,.489],120109:[.541,.212,.5],120110:[.479,.219,.489],120111:[.474,.021,.389],120112:[.478,.029,.443],120113:[.64,.02,.333,{ic:.015}],120114:[.474,.023,.517],120115:[.53,.028,.512],120116:[.532,.028,.774],120117:[.472,.188,.389],120118:[.528,.218,.499],120119:[.471,.214,.391],120120:[.701,0,.722],120121:[.683,0,.667],120123:[.683,0,.722],120124:[.683,0,.667],120125:[.683,0,.611],120126:[.702,.019,.778],120128:[.683,0,.389],120129:[.683,.077,.5],120130:[.683,0,.778],120131:[.683,0,.667],120132:[.683,0,.944],120134:[.701,.019,.778],120138:[.702,.012,.556],120139:[.683,0,.667],120140:[.683,.019,.722],120141:[.683,.02,.722],120142:[.683,.019,1],120143:[.683,0,.722],120144:[.683,0,.722],120172:[.686,.031,.847],120173:[.684,.031,1.044],120174:[.676,.032,.723],120175:[.683,.029,.982],120176:[.686,.029,.783],120177:[.684,.146,.722],120178:[.687,.029,.927],120179:[.683,.126,.851],120180:[.681,.025,.655],120181:[.68,.141,.652],120182:[.681,.026,.789,{ic:.017}],120183:[.683,.028,.786],120184:[.683,.032,1.239],120185:[.679,.03,.983],120186:[.726,.03,.976],120187:[.688,.223,.977],120188:[.726,.083,.976],120189:[.688,.028,.978],120190:[.685,.031,.978],120191:[.686,.03,.79,{ic:.012}],120192:[.688,.039,.851,{ic:.02}],120193:[.685,.029,.982],120194:[.683,.03,1.235],120195:[.681,.035,.849],120196:[.688,.214,.984],120197:[.677,.148,.711],120198:[.472,.032,.603],120199:[.69,.032,.59],120200:[.473,.026,.464],120201:[.632,.028,.589],120202:[.471,.027,.472],120203:[.687,.222,.388],120204:[.472,.208,.595],120205:[.687,.207,.615],120206:[.686,.025,.331],120207:[.682,.203,.332],120208:[.682,.025,.464],120209:[.681,.024,.337],120210:[.476,.031,.921],120211:[.473,.028,.654],120212:[.482,.034,.609],120213:[.557,.207,.604],120214:[.485,.211,.596],120215:[.472,.026,.46],120216:[.479,.034,.523],120217:[.648,.027,.393,{ic:.014}],120218:[.472,.032,.589,{ic:.014}],120219:[.546,.027,.604],120220:[.549,.032,.918],120221:[.471,.188,.459],120222:[.557,.221,.589],120223:[.471,.214,.461],120224:[.694,0,.667],120225:[.694,0,.667],120226:[.705,.011,.639],120227:[.694,0,.722],120228:[.691,0,.597],120229:[.691,0,.569],120230:[.704,.011,.667],120231:[.694,0,.708],120232:[.694,0,.278],120233:[.694,.022,.472],120234:[.694,0,.694],120235:[.694,0,.542],120236:[.694,0,.875],120237:[.694,0,.708],120238:[.715,.022,.736],120239:[.694,0,.639],120240:[.715,.125,.736],120241:[.694,0,.646],120242:[.716,.022,.556],120243:[.688,0,.681],120244:[.694,.022,.688],120245:[.694,0,.667],120246:[.694,0,.944],120247:[.694,0,.667],120248:[.694,0,.667],120249:[.694,0,.611],120250:[.46,.01,.481],120251:[.694,.011,.517],120252:[.46,.01,.444],120253:[.694,.01,.517],120254:[.461,.01,.444],120255:[.705,0,.306,{ic:.041}],120256:[.455,.206,.5],120257:[.694,0,.517],120258:[.68,0,.239],120259:[.68,.205,.267],120260:[.694,0,.489],120261:[.694,0,.239],120262:[.455,0,.794],120263:[.455,0,.517],120264:[.46,.01,.5],120265:[.455,.194,.517],120266:[.455,.194,.517],120267:[.455,0,.342],120268:[.46,.01,.383],120269:[.571,.01,.361],120270:[.444,.01,.517],120271:[.444,0,.461],120272:[.444,0,.683],120273:[.444,0,.461],120274:[.444,.204,.461],120275:[.444,0,.435],120276:[.694,0,.733],120277:[.694,0,.733],120278:[.704,.011,.703],120279:[.694,0,.794],120280:[.691,0,.642],120281:[.691,0,.611],120282:[.705,.011,.733],120283:[.694,0,.794],120284:[.694,0,.331],120285:[.694,.022,.519],120286:[.694,0,.764],120287:[.694,0,.581],120288:[.694,0,.978],120289:[.694,0,.794],120290:[.716,.022,.794],120291:[.694,0,.703],120292:[.716,.106,.794],120293:[.694,0,.703],120294:[.716,.022,.611],120295:[.688,0,.733],120296:[.694,.022,.764],120297:[.694,0,.733],120298:[.694,0,1.039],120299:[.694,0,.733],120300:[.694,0,.733],120301:[.694,0,.672],120302:[.475,.011,.525],120303:[.694,.01,.561],120304:[.475,.011,.489],120305:[.694,.011,.561],120306:[.474,.01,.511],120307:[.705,0,.336,{ic:.045}],120308:[.469,.206,.55],120309:[.694,0,.561],120310:[.695,0,.256],120311:[.695,.205,.286],120312:[.694,0,.531],120313:[.694,0,.256],120314:[.469,0,.867],120315:[.468,0,.561],120316:[.474,.011,.55],120317:[.469,.194,.561],120318:[.469,.194,.561],120319:[.469,0,.372],120320:[.474,.01,.422],120321:[.589,.01,.404],120322:[.458,.011,.561],120323:[.458,0,.5],120324:[.458,0,.744],120325:[.458,0,.5],120326:[.458,.205,.5],120327:[.458,0,.476],120328:[.694,0,.667],120329:[.694,0,.667,{ic:.029}],120330:[.705,.01,.639,{ic:.08}],120331:[.694,0,.722,{ic:.025}],120332:[.691,0,.597,{ic:.091}],120333:[.691,0,.569,{ic:.104}],120334:[.705,.011,.667,{ic:.063}],120335:[.694,0,.708,{ic:.06}],120336:[.694,0,.278,{ic:.06}],120337:[.694,.022,.472,{ic:.063}],120338:[.694,0,.694,{ic:.091}],120339:[.694,0,.542],120340:[.694,0,.875,{ic:.054}],120341:[.694,0,.708,{ic:.058}],120342:[.716,.022,.736,{ic:.027}],120343:[.694,0,.639,{ic:.051}],120344:[.716,.125,.736,{ic:.027}],120345:[.694,0,.646,{ic:.052}],120346:[.716,.022,.556,{ic:.053}],120347:[.688,0,.681,{ic:.109}],120348:[.694,.022,.688,{ic:.059}],120349:[.694,0,.667,{ic:.132}],120350:[.694,0,.944,{ic:.132}],120351:[.694,0,.667,{ic:.091}],120352:[.694,0,.667,{ic:.143}],120353:[.694,0,.611,{ic:.091}],120354:[.461,.01,.481],120355:[.694,.011,.517,{ic:.022}],120356:[.46,.011,.444,{ic:.055}],120357:[.694,.01,.517,{ic:.071}],120358:[.46,.011,.444,{ic:.028}],120359:[.705,0,.306,{ic:.188}],120360:[.455,.206,.5,{ic:.068}],120361:[.694,0,.517],120362:[.68,0,.239,{ic:.076}],120363:[.68,.204,.267,{ic:.069}],120364:[.694,0,.489,{ic:.054}],120365:[.694,0,.239,{ic:.072}],120366:[.455,0,.794],120367:[.454,0,.517],120368:[.461,.011,.5,{ic:.023}],120369:[.455,.194,.517,{ic:.021}],120370:[.455,.194,.517,{ic:.021}],120371:[.455,0,.342,{ic:.082}],120372:[.461,.011,.383,{ic:.053}],120373:[.571,.011,.361,{ic:.049}],120374:[.444,.01,.517,{ic:.02}],120375:[.444,0,.461,{ic:.079}],120376:[.444,0,.683,{ic:.079}],120377:[.444,0,.461,{ic:.076}],120378:[.444,.205,.461,{ic:.079}],120379:[.444,0,.435,{ic:.059}],120432:[.623,0,.525],120433:[.611,0,.525],120434:[.622,.011,.525],120435:[.611,0,.525],120436:[.611,0,.525],120437:[.611,0,.525],120438:[.622,.011,.525],120439:[.611,0,.525],120440:[.611,0,.525],120441:[.611,.011,.525],120442:[.611,0,.525],120443:[.611,0,.525],120444:[.611,0,.525],120445:[.611,0,.525],120446:[.621,.01,.525],120447:[.611,0,.525],120448:[.621,.138,.525],120449:[.611,.011,.525],120450:[.622,.011,.525],120451:[.611,0,.525],120452:[.611,.011,.525],120453:[.611,.007,.525],120454:[.611,.007,.525],120455:[.611,0,.525],120456:[.611,0,.525],120457:[.611,0,.525],120458:[.439,.006,.525],120459:[.611,.006,.525],120460:[.44,.006,.525],120461:[.611,.006,.525],120462:[.44,.006,.525],120463:[.617,0,.525],120464:[.442,.229,.525],120465:[.611,0,.525],120466:[.612,0,.525],120467:[.612,.228,.525],120468:[.611,0,.525],120469:[.611,0,.525],120470:[.436,0,.525,{ic:.011}],120471:[.436,0,.525],120472:[.44,.006,.525],120473:[.437,.221,.525],120474:[.437,.221,.525,{ic:.02}],120475:[.437,0,.525],120476:[.44,.006,.525],120477:[.554,.006,.525],120478:[.431,.005,.525],120479:[.431,0,.525],120480:[.431,0,.525],120481:[.431,0,.525],120482:[.431,.228,.525],120483:[.431,0,.525],120488:[.698,0,.869],120489:[.686,0,.818],120490:[.68,0,.692],120491:[.698,0,.958],120492:[.68,0,.756],120493:[.686,0,.703],120494:[.686,0,.9],120495:[.696,.01,.894],120496:[.686,0,.436],120497:[.686,0,.901],120498:[.698,0,.806],120499:[.686,0,1.092],120500:[.686,0,.9],120501:[.675,0,.767],120502:[.696,.01,.864],120503:[.68,0,.9],120504:[.686,0,.786],120506:[.686,0,.831],120507:[.675,0,.8],120508:[.697,0,.894],120509:[.686,0,.831],120510:[.686,0,.869],120511:[.686,0,.894],120512:[.696,0,.831],120513:[.686,.024,.958],120546:[.716,0,.75,{sk:.139}],120547:[.683,0,.759,{sk:.0833}],120548:[.68,0,.615,{ic:.106,sk:.0833}],120549:[.716,0,.833,{sk:.167}],120550:[.68,0,.738,{ic:.026,sk:.0833}],120551:[.683,0,.683,{ic:.04,sk:.0833}],120552:[.683,0,.831,{ic:.057,sk:.0556}],120553:[.704,.022,.763,{sk:.0833}],120554:[.683,0,.44,{ic:.064,sk:.111}],120555:[.683,0,.849,{ic:.04,sk:.0556}],120556:[.716,0,.694,{sk:.167}],120557:[.683,0,.97,{ic:.081,sk:.0833}],120558:[.683,0,.803,{ic:.085,sk:.0833}],120559:[.677,0,.742,{ic:.035,sk:.0833}],120560:[.704,.022,.763,{sk:.0833}],120561:[.68,0,.831,{ic:.056,sk:.0556}],120562:[.683,0,.642,{ic:.109,sk:.0833}],120564:[.683,0,.78,{ic:.026,sk:.0833}],120565:[.677,0,.584,{ic:.12,sk:.0833}],120566:[.705,0,.583,{ic:.117,sk:.0556}],120567:[.683,0,.667,{sk:.0833}],120568:[.683,0,.828,{ic:.024,sk:.0833}],120569:[.683,0,.612,{ic:.08,sk:.0556}],120570:[.704,0,.772,{ic:.014,sk:.0833}],120572:[.442,.011,.64,{sk:.0278}],120573:[.705,.194,.566,{sk:.0833}],120574:[.441,.216,.518,{ic:.025}],120575:[.717,.01,.444,{sk:.0556}],120576:[.452,.022,.466,{sk:.0833}],120577:[.704,.204,.438,{ic:.033,sk:.0833}],120578:[.442,.216,.497,{sk:.0556}],120579:[.705,.01,.469,{sk:.0833}],120580:[.442,.01,.354,{sk:.0556}],120581:[.442,.011,.576],120582:[.694,.012,.583],120583:[.442,.216,.603,{sk:.0278}],120584:[.442,0,.494,{ic:.036,sk:.0278}],120585:[.704,.205,.438,{sk:.111}],120586:[.441,.011,.485,{sk:.0556}],120587:[.431,.011,.57],120588:[.442,.216,.517,{sk:.0833}],120589:[.442,.107,.363,{ic:.042,sk:.0833}],120590:[.431,.011,.571],120591:[.431,.013,.437,{ic:.08,sk:.0278}],120592:[.443,.01,.54,{sk:.0278}],120593:[.442,.218,.654,{sk:.0833}],120594:[.442,.204,.626,{sk:.0556}],120595:[.694,.205,.651,{sk:.111}],120596:[.443,.011,.622],120597:[.715,.022,.531,{ic:.035,sk:.0833}],120598:[.431,.011,.406,{sk:.0556}],120599:[.705,.011,.591,{sk:.0833}],120600:[.434,.006,.667,{ic:.067}],120601:[.694,.205,.596,{sk:.0833}],120602:[.442,.194,.517,{sk:.0833}],120603:[.431,.01,.828],120604:[.711,0,.869,{sk:.16}],120605:[.686,0,.866,{sk:.0958}],120606:[.68,0,.657,{ic:.12,sk:.0958}],120607:[.711,0,.958,{sk:.192}],120608:[.68,0,.81,{ic:.015,sk:.0958}],120609:[.686,0,.773,{ic:.032,sk:.0958}],120610:[.686,0,.982,{ic:.045,sk:.0639}],120611:[.702,.017,.867,{sk:.0958}],120612:[.686,0,.511,{ic:.062,sk:.128}],120613:[.686,0,.971,{ic:.032,sk:.0639}],120614:[.711,0,.806,{sk:.192}],120615:[.686,0,1.142,{ic:.077,sk:.0958}],120616:[.686,0,.95,{ic:.077,sk:.0958}],120617:[.675,0,.841,{ic:.026,sk:.0958}],120618:[.703,.017,.837,{sk:.0958}],120619:[.68,0,.982,{ic:.044,sk:.0639}],120620:[.686,0,.723,{ic:.124,sk:.0958}],120622:[.686,0,.885,{ic:.017,sk:.0958}],120623:[.675,0,.637,{ic:.135,sk:.0958}],120624:[.703,0,.671,{ic:.131,sk:.0639}],120625:[.686,0,.767,{sk:.0958}],120626:[.686,0,.947,{sk:.0958}],120627:[.686,0,.714,{ic:.076,sk:.0639}],120628:[.703,0,.879,{sk:.0958}],120630:[.452,.008,.761,{sk:.0319}],120631:[.701,.194,.66,{sk:.0958}],120632:[.451,.211,.59,{ic:.027}],120633:[.725,.008,.522,{sk:.0639}],120634:[.461,.017,.529,{sk:.0958}],120635:[.711,.202,.508,{ic:.013,sk:.0958}],120636:[.452,.211,.6,{sk:.0639}],120637:[.702,.008,.562,{sk:.0958}],120638:[.452,.008,.412,{sk:.0639}],120639:[.452,.008,.668],120640:[.694,.013,.671],120641:[.452,.211,.708,{sk:.0319}],120642:[.452,0,.577,{ic:.031,sk:.0319}],120643:[.711,.201,.508,{sk:.128}],120644:[.452,.008,.585,{sk:.0639}],120645:[.444,.008,.682],120646:[.451,.211,.612,{sk:.0958}],120647:[.451,.105,.424,{ic:.033,sk:.0958}],120648:[.444,.008,.686],120649:[.444,.013,.521,{ic:.089,sk:.0319}],120650:[.453,.008,.631,{sk:.0319}],120651:[.452,.216,.747,{sk:.0958}],120652:[.452,.201,.718,{sk:.0639}],120653:[.694,.202,.758,{sk:.128}],120654:[.453,.008,.718],120655:[.71,.017,.628,{ic:.029,sk:.0958}],120656:[.444,.007,.483,{sk:.0639}],120657:[.701,.008,.692,{sk:.0958}],120658:[.434,.006,.667,{ic:.067}],120659:[.694,.202,.712,{sk:.0958}],120660:[.451,.194,.612,{sk:.0958}],120661:[.444,.008,.975],120662:[.694,0,.733],120663:[.694,0,.733],120664:[.691,0,.581],120665:[.694,0,.917],120666:[.691,0,.642],120667:[.694,0,.672],120668:[.694,0,.794],120669:[.716,.022,.856],120670:[.694,0,.331],120671:[.694,0,.764],120672:[.694,0,.672],120673:[.694,0,.978],120674:[.694,0,.794],120675:[.688,0,.733],120676:[.716,.022,.794],120677:[.691,0,.794],120678:[.694,0,.703],120680:[.694,0,.794],120681:[.688,0,.733],120682:[.715,0,.856],120683:[.694,0,.794],120684:[.694,0,.733],120685:[.694,0,.856],120686:[.716,0,.794],120782:[.654,.01,.575],120783:[.655,0,.575],120784:[.654,0,.575],120785:[.655,.011,.575],120786:[.656,0,.575],120787:[.655,.011,.575],120788:[.655,.011,.575],120789:[.676,.011,.575],120790:[.654,.011,.575],120791:[.654,.011,.575],120802:[.678,.022,.5],120803:[.678,0,.5],120804:[.677,0,.5],120805:[.678,.022,.5],120806:[.656,0,.5],120807:[.656,.021,.5],120808:[.677,.022,.5],120809:[.656,.011,.5],120810:[.678,.022,.5],120811:[.677,.022,.5],120812:[.715,.022,.55],120813:[.716,0,.55],120814:[.716,0,.55],120815:[.716,.022,.55],120816:[.694,0,.55],120817:[.694,.022,.55],120818:[.716,.022,.55],120819:[.695,.011,.55],120820:[.715,.022,.55],120821:[.716,.022,.55],120822:[.621,.01,.525],120823:[.622,0,.525],120824:[.622,0,.525],120825:[.622,.011,.525],120826:[.624,0,.525],120827:[.611,.01,.525],120828:[.622,.011,.525],120829:[.627,.01,.525],120830:[.621,.01,.525],120831:[.622,.011,.525]}},6949:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.sansSerifBoldItalic=void 0,T.sansSerifBoldItalic={305:[.458,0,.256],567:[.458,.205,.286]}},5193:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.sansSerifBold=void 0,T.sansSerifBold={33:[.694,0,.367],34:[.694,-.442,.558],35:[.694,.193,.917],36:[.75,.056,.55],37:[.75,.056,1.029],38:[.716,.022,.831],39:[.694,-.442,.306],40:[.75,.249,.428],41:[.75,.25,.428],42:[.75,-.293,.55],43:[.617,.116,.856],44:[.146,.106,.306],45:[.273,-.186,.367],46:[.146,0,.306],47:[.75,.249,.55],58:[.458,0,.306],59:[.458,.106,.306],61:[.407,-.094,.856],63:[.705,0,.519],64:[.704,.011,.733],91:[.75,.25,.343],93:[.75,.25,.343],94:[.694,-.537,.55],95:[-.023,.11,.55],126:[.344,-.198,.55],305:[.458,0,.256],567:[.458,.205,.286],768:[.694,-.537,0],769:[.694,-.537,0],770:[.694,-.537,0],771:[.694,-.548,0],772:[.66,-.56,0],774:[.694,-.552,0],775:[.695,-.596,0],776:[.695,-.595,0],778:[.694,-.538,0],779:[.694,-.537,0],780:[.657,-.5,0],8211:[.327,-.24,.55],8212:[.327,-.24,1.1],8213:[.327,-.24,1.1],8215:[-.023,.11,.55],8216:[.694,-.443,.306],8217:[.694,-.442,.306],8220:[.694,-.443,.558],8221:[.694,-.442,.558],8260:[.75,.249,.55],8710:[.694,0,.917]}},2632:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.sansSerifItalic=void 0,T.sansSerifItalic={33:[.694,0,.319,{ic:.036}],34:[.694,-.471,.5],35:[.694,.194,.833,{ic:.018}],36:[.75,.056,.5,{ic:.065}],37:[.75,.056,.833],38:[.716,.022,.758],39:[.694,-.471,.278,{ic:.057}],40:[.75,.25,.389,{ic:.102}],41:[.75,.25,.389],42:[.75,-.306,.5,{ic:.068}],43:[.583,.083,.778],44:[.098,.125,.278],45:[.259,-.186,.333],46:[.098,0,.278],47:[.75,.25,.5,{ic:.1}],48:[.678,.022,.5,{ic:.049}],49:[.678,0,.5],50:[.678,0,.5,{ic:.051}],51:[.678,.022,.5,{ic:.044}],52:[.656,0,.5,{ic:.021}],53:[.656,.022,.5,{ic:.055}],54:[.678,.022,.5,{ic:.048}],55:[.656,.011,.5,{ic:.096}],56:[.678,.022,.5,{ic:.054}],57:[.677,.022,.5,{ic:.045}],58:[.444,0,.278],59:[.444,.125,.278],61:[.37,-.13,.778,{ic:.018}],63:[.704,0,.472,{ic:.064}],64:[.705,.01,.667,{ic:.04}],91:[.75,.25,.289,{ic:.136}],93:[.75,.25,.289,{ic:.064}],94:[.694,-.527,.5,{ic:.033}],95:[-.038,.114,.5,{ic:.065}],126:[.327,-.193,.5,{ic:.06}],305:[.444,0,.239,{ic:.019}],567:[.444,.204,.267,{ic:.019}],768:[.694,-.527,0],769:[.694,-.527,0,{ic:.063}],770:[.694,-.527,0,{ic:.033}],771:[.677,-.543,0,{ic:.06}],772:[.631,-.552,0,{ic:.064}],774:[.694,-.508,0,{ic:.073}],775:[.68,-.576,0],776:[.68,-.582,0,{ic:.04}],778:[.693,-.527,0],779:[.694,-.527,0,{ic:.063}],780:[.654,-.487,0,{ic:.06}],913:[.694,0,.667],914:[.694,0,.667,{ic:.029}],915:[.691,0,.542,{ic:.104}],916:[.694,0,.833],917:[.691,0,.597,{ic:.091}],918:[.694,0,.611,{ic:.091}],919:[.694,0,.708,{ic:.06}],920:[.715,.022,.778,{ic:.026}],921:[.694,0,.278,{ic:.06}],922:[.694,0,.694,{ic:.091}],923:[.694,0,.611],924:[.694,0,.875,{ic:.054}],925:[.694,0,.708,{ic:.058}],926:[.688,0,.667,{ic:.098}],927:[.716,.022,.736,{ic:.027}],928:[.691,0,.708,{ic:.06}],929:[.694,0,.639,{ic:.051}],931:[.694,0,.722,{ic:.091}],932:[.688,0,.681,{ic:.109}],933:[.716,0,.778,{ic:.065}],934:[.694,0,.722,{ic:.021}],935:[.694,0,.667,{ic:.091}],936:[.694,0,.778,{ic:.076}],937:[.716,0,.722,{ic:.047}],8211:[.312,-.236,.5,{ic:.065}],8212:[.312,-.236,1,{ic:.065}],8213:[.312,-.236,1,{ic:.065}],8215:[-.038,.114,.5,{ic:.065}],8216:[.694,-.471,.278,{ic:.058}],8217:[.694,-.471,.278,{ic:.057}],8220:[.694,-.471,.5,{ic:.114}],8221:[.694,-.471,.5],8260:[.75,.25,.5,{ic:.1}],8710:[.694,0,.833]}},4214:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.sansSerif=void 0,T.sansSerif={33:[.694,0,.319],34:[.694,-.471,.5],35:[.694,.194,.833],36:[.75,.056,.5],37:[.75,.056,.833],38:[.716,.022,.758],39:[.694,-.471,.278],40:[.75,.25,.389],41:[.75,.25,.389],42:[.75,-.306,.5],43:[.583,.082,.778],44:[.098,.125,.278],45:[.259,-.186,.333],46:[.098,0,.278],47:[.75,.25,.5],58:[.444,0,.278],59:[.444,.125,.278],61:[.37,-.13,.778],63:[.704,0,.472],64:[.704,.011,.667],91:[.75,.25,.289],93:[.75,.25,.289],94:[.694,-.527,.5],95:[-.038,.114,.5],126:[.327,-.193,.5],305:[.444,0,.239],567:[.444,.205,.267],768:[.694,-.527,0],769:[.694,-.527,0],770:[.694,-.527,0],771:[.677,-.543,0],772:[.631,-.552,0],774:[.694,-.508,0],775:[.68,-.576,0],776:[.68,-.582,0],778:[.694,-.527,0],779:[.694,-.527,0],780:[.654,-.487,0],913:[.694,0,.667],914:[.694,0,.667],915:[.691,0,.542],916:[.694,0,.833],917:[.691,0,.597],918:[.694,0,.611],919:[.694,0,.708],920:[.716,.021,.778],921:[.694,0,.278],922:[.694,0,.694],923:[.694,0,.611],924:[.694,0,.875],925:[.694,0,.708],926:[.688,0,.667],927:[.715,.022,.736],928:[.691,0,.708],929:[.694,0,.639],931:[.694,0,.722],932:[.688,0,.681],933:[.716,0,.778],934:[.694,0,.722],935:[.694,0,.667],936:[.694,0,.778],937:[.716,0,.722],8211:[.312,-.236,.5],8212:[.312,-.236,1],8213:[.312,-.236,1],8215:[-.038,.114,.5],8216:[.694,-.471,.278],8217:[.694,-.471,.278],8220:[.694,-.471,.5],8221:[.694,-.471,.5],8260:[.75,.25,.5],8710:[.694,0,.833]}},6466:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.scriptBold=void 0,T.scriptBold={}},3776:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.script=void 0,T.script={}},7405:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.smallop=void 0,T.smallop={40:[.85,.349,.458],41:[.85,.349,.458],47:[.85,.349,.578],91:[.85,.349,.417],92:[.85,.349,.578],93:[.85,.349,.417],123:[.85,.349,.583],125:[.85,.349,.583],710:[.744,-.551,.556],732:[.722,-.597,.556],770:[.744,-.551,0],771:[.722,-.597,0],8214:[.602,0,.778],8260:[.85,.349,.578],8593:[.6,0,.667],8595:[.6,0,.667],8657:[.599,0,.778],8659:[.6,0,.778],8719:[.75,.25,.944],8720:[.75,.25,.944],8721:[.75,.25,1.056],8730:[.85,.35,1,{ic:.02}],8739:[.627,.015,.333],8741:[.627,.015,.556],8747:[.805,.306,.472,{ic:.138}],8748:[.805,.306,.819,{ic:.138}],8749:[.805,.306,1.166,{ic:.138}],8750:[.805,.306,.472,{ic:.138}],8896:[.75,.249,.833],8897:[.75,.249,.833],8898:[.75,.249,.833],8899:[.75,.249,.833],8968:[.85,.349,.472],8969:[.85,.349,.472],8970:[.85,.349,.472],8971:[.85,.349,.472],9001:[.85,.35,.472],9002:[.85,.35,.472],9168:[.602,0,.667],10072:[.627,.015,.333],10216:[.85,.35,.472],10217:[.85,.35,.472],10752:[.75,.25,1.111],10753:[.75,.25,1.111],10754:[.75,.25,1.111],10756:[.75,.249,.833],10758:[.75,.249,.833],10764:[.805,.306,1.638,{ic:.138}],12296:[.85,.35,.472],12297:[.85,.35,.472]}},8105:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texCalligraphicBold=void 0,T.texCalligraphicBold={65:[.751,.049,.921,{ic:.068,sk:.224}],66:[.705,.017,.748,{sk:.16}],67:[.703,.02,.613,{sk:.16}],68:[.686,0,.892,{sk:.0958}],69:[.703,.016,.607,{ic:.02,sk:.128}],70:[.686,.03,.814,{ic:.116,sk:.128}],71:[.703,.113,.682,{sk:.128}],72:[.686,.048,.987,{sk:.128}],73:[.686,0,.642,{ic:.104,sk:.0319}],74:[.686,.114,.779,{ic:.158,sk:.192}],75:[.703,.017,.871,{sk:.0639}],76:[.703,.017,.788,{sk:.16}],77:[.703,.049,1.378,{sk:.16}],78:[.84,.049,.937,{ic:.168,sk:.0958}],79:[.703,.017,.906,{sk:.128}],80:[.686,.067,.81,{ic:.036,sk:.0958}],81:[.703,.146,.939,{sk:.128}],82:[.686,.017,.99,{sk:.0958}],83:[.703,.016,.696,{ic:.025,sk:.16}],84:[.72,.069,.644,{ic:.303,sk:.0319}],85:[.686,.024,.715,{ic:.056,sk:.0958}],86:[.686,.077,.737,{ic:.037,sk:.0319}],87:[.686,.077,1.169,{ic:.037,sk:.0958}],88:[.686,0,.817,{ic:.089,sk:.16}],89:[.686,.164,.759,{ic:.038,sk:.0958}],90:[.686,0,.818,{ic:.035,sk:.16}],305:[.452,.008,.394,{sk:.0319}],567:[.451,.201,.439,{sk:.0958}]}},2518:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texCalligraphic=void 0,T.texCalligraphic={65:[.728,.05,.798,{ic:.021,sk:.194}],66:[.705,.022,.657,{sk:.139}],67:[.705,.025,.527,{sk:.139}],68:[.683,0,.771,{sk:.0833}],69:[.705,.022,.528,{ic:.036,sk:.111}],70:[.683,.032,.719,{ic:.11,sk:.111}],71:[.704,.119,.595,{sk:.111}],72:[.683,.048,.845,{sk:.111}],73:[.683,0,.545,{ic:.097,sk:.0278}],74:[.683,.119,.678,{ic:.161,sk:.167}],75:[.705,.022,.762,{sk:.0556}],76:[.705,.022,.69,{sk:.139}],77:[.705,.05,1.201,{sk:.139}],78:[.789,.05,.82,{ic:.159,sk:.0833}],79:[.705,.022,.796,{sk:.111}],80:[.683,.057,.696,{ic:.037,sk:.0833}],81:[.705,.131,.817,{sk:.111}],82:[.682,.022,.848,{sk:.0833}],83:[.705,.022,.606,{ic:.036,sk:.139}],84:[.717,.068,.545,{ic:.288,sk:.0278}],85:[.683,.028,.626,{ic:.061,sk:.0833}],86:[.683,.052,.613,{ic:.045,sk:.0278}],87:[.683,.053,.988,{ic:.046,sk:.0833}],88:[.683,0,.713,{ic:.094,sk:.139}],89:[.683,.143,.668,{ic:.046,sk:.0833}],90:[.683,0,.725,{ic:.042,sk:.139}]}},5595:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texMathit=void 0,T.texMathit={65:[.716,0,.743],66:[.683,0,.704],67:[.705,.021,.716],68:[.683,0,.755],69:[.68,0,.678],70:[.68,0,.653],71:[.705,.022,.774],72:[.683,0,.743],73:[.683,0,.386],74:[.683,.021,.525],75:[.683,0,.769],76:[.683,0,.627],77:[.683,0,.897],78:[.683,0,.743],79:[.704,.022,.767],80:[.683,0,.678],81:[.704,.194,.767],82:[.683,.022,.729],83:[.705,.022,.562],84:[.677,0,.716],85:[.683,.022,.743],86:[.683,.022,.743],87:[.683,.022,.999],88:[.683,0,.743],89:[.683,0,.743],90:[.683,0,.613],97:[.442,.011,.511],98:[.694,.011,.46],99:[.441,.01,.46],100:[.694,.011,.511],101:[.442,.01,.46],102:[.705,.204,.307],103:[.442,.205,.46],104:[.694,.011,.511],105:[.656,.01,.307],106:[.656,.204,.307],107:[.694,.011,.46],108:[.694,.011,.256],109:[.442,.011,.818],110:[.442,.011,.562],111:[.442,.011,.511],112:[.442,.194,.511],113:[.442,.194,.46],114:[.442,.011,.422],115:[.442,.011,.409],116:[.626,.011,.332],117:[.441,.011,.537],118:[.443,.01,.46],119:[.443,.011,.664],120:[.442,.011,.464],121:[.441,.205,.486],122:[.442,.011,.409]}},6357:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texOldstyleBold=void 0,T.texOldstyleBold={48:[.46,.017,.575],49:[.461,0,.575],50:[.46,0,.575],51:[.461,.211,.575],52:[.469,.194,.575],53:[.461,.211,.575],54:[.66,.017,.575],55:[.476,.211,.575],56:[.661,.017,.575],57:[.461,.21,.575],65:[.751,.049,.921,{ic:.068,sk:.224}],66:[.705,.017,.748,{sk:.16}],67:[.703,.02,.613,{sk:.16}],68:[.686,0,.892,{sk:.0958}],69:[.703,.016,.607,{ic:.02,sk:.128}],70:[.686,.03,.814,{ic:.116,sk:.128}],71:[.703,.113,.682,{sk:.128}],72:[.686,.048,.987,{sk:.128}],73:[.686,0,.642,{ic:.104,sk:.0319}],74:[.686,.114,.779,{ic:.158,sk:.192}],75:[.703,.017,.871,{sk:.0639}],76:[.703,.017,.788,{sk:.16}],77:[.703,.049,1.378,{sk:.16}],78:[.84,.049,.937,{ic:.168,sk:.0958}],79:[.703,.017,.906,{sk:.128}],80:[.686,.067,.81,{ic:.036,sk:.0958}],81:[.703,.146,.939,{sk:.128}],82:[.686,.017,.99,{sk:.0958}],83:[.703,.016,.696,{ic:.025,sk:.16}],84:[.72,.069,.644,{ic:.303,sk:.0319}],85:[.686,.024,.715,{ic:.056,sk:.0958}],86:[.686,.077,.737,{ic:.037,sk:.0319}],87:[.686,.077,1.169,{ic:.037,sk:.0958}],88:[.686,0,.817,{ic:.089,sk:.16}],89:[.686,.164,.759,{ic:.038,sk:.0958}],90:[.686,0,.818,{ic:.035,sk:.16}]}},9474:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texOldstyle=void 0,T.texOldstyle={48:[.452,.022,.5],49:[.453,0,.5],50:[.453,0,.5],51:[.452,.216,.5],52:[.464,.194,.5],53:[.453,.216,.5],54:[.665,.022,.5],55:[.463,.216,.5],56:[.666,.021,.5],57:[.453,.216,.5],65:[.728,.05,.798,{ic:.021,sk:.194}],66:[.705,.022,.657,{sk:.139}],67:[.705,.025,.527,{sk:.139}],68:[.683,0,.771,{sk:.0833}],69:[.705,.022,.528,{ic:.036,sk:.111}],70:[.683,.032,.719,{ic:.11,sk:.111}],71:[.704,.119,.595,{sk:.111}],72:[.683,.048,.845,{sk:.111}],73:[.683,0,.545,{ic:.097,sk:.0278}],74:[.683,.119,.678,{ic:.161,sk:.167}],75:[.705,.022,.762,{sk:.0556}],76:[.705,.022,.69,{sk:.139}],77:[.705,.05,1.201,{sk:.139}],78:[.789,.05,.82,{ic:.159,sk:.0833}],79:[.705,.022,.796,{sk:.111}],80:[.683,.057,.696,{ic:.037,sk:.0833}],81:[.705,.131,.817,{sk:.111}],82:[.682,.022,.848,{sk:.0833}],83:[.705,.022,.606,{ic:.036,sk:.139}],84:[.717,.068,.545,{ic:.288,sk:.0278}],85:[.683,.028,.626,{ic:.061,sk:.0833}],86:[.683,.052,.613,{ic:.045,sk:.0278}],87:[.683,.053,.988,{ic:.046,sk:.0833}],88:[.683,0,.713,{ic:.094,sk:.139}],89:[.683,.143,.668,{ic:.046,sk:.0833}],90:[.683,0,.725,{ic:.042,sk:.139}]}},584:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texSize3=void 0,T.texSize3={40:[1.45,.949,.736],41:[1.45,.949,.736],47:[1.45,.949,1.044],91:[1.45,.949,.528],92:[1.45,.949,1.044],93:[1.45,.949,.528],123:[1.45,.949,.75],125:[1.45,.949,.75],710:[.772,-.564,1.444],732:[.749,-.61,1.444],770:[.772,-.564,0],771:[.749,-.61,0],8260:[1.45,.949,1.044],8730:[1.45,.95,1,{ic:.02}],8968:[1.45,.949,.583],8969:[1.45,.949,.583],8970:[1.45,.949,.583],8971:[1.45,.949,.583],9001:[1.45,.95,.75],9002:[1.45,.949,.75],10216:[1.45,.95,.75],10217:[1.45,.949,.75],12296:[1.45,.95,.75],12297:[1.45,.949,.75]}},4324:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texSize4=void 0,T.texSize4={40:[1.75,1.249,.792],41:[1.75,1.249,.792],47:[1.75,1.249,1.278],91:[1.75,1.249,.583],92:[1.75,1.249,1.278],93:[1.75,1.249,.583],123:[1.75,1.249,.806],125:[1.75,1.249,.806],710:[.845,-.561,1.889,{ic:.013}],732:[.823,-.583,1.889],770:[.845,-.561,0,{ic:.013}],771:[.823,-.583,0],8260:[1.75,1.249,1.278],8730:[1.75,1.25,1,{ic:.02}],8968:[1.75,1.249,.639],8969:[1.75,1.249,.639],8970:[1.75,1.249,.639],8971:[1.75,1.249,.639],9001:[1.75,1.248,.806],9002:[1.75,1.248,.806],9115:[1.154,.655,.875],9116:[.61,.01,.875],9117:[1.165,.644,.875],9118:[1.154,.655,.875],9119:[.61,.01,.875],9120:[1.165,.644,.875],9121:[1.154,.645,.667],9122:[.602,0,.667],9123:[1.155,.644,.667],9124:[1.154,.645,.667],9125:[.602,0,.667],9126:[1.155,.644,.667],9127:[.899,.01,.889],9128:[1.16,.66,.889],9129:[.01,.899,.889],9130:[.29,.015,.889],9131:[.899,.01,.889],9132:[1.16,.66,.889],9133:[.01,.899,.889],9143:[.935,.885,1.056],10216:[1.75,1.248,.806],10217:[1.75,1.248,.806],12296:[1.75,1.248,.806],12297:[1.75,1.248,.806],57344:[.625,.014,1.056],57345:[.605,.014,1.056,{ic:.02}],57680:[.12,.213,.45,{ic:.01}],57681:[.12,.213,.45,{ic:.024}],57682:[.333,0,.45,{ic:.01}],57683:[.333,0,.45,{ic:.024}],57684:[.32,.2,.4,{ic:.01}],57685:[.333,0,.9,{ic:.01}],57686:[.12,.213,.9,{ic:.01}]}},8135:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texVariant=void 0,T.texVariant={710:[.845,-.561,2.333,{ic:.013}],732:[.899,-.628,2.333],770:[.845,-.561,0,{ic:.013}],771:[.899,-.628,0],1008:[.434,.006,.667,{ic:.067}],8463:[.695,.013,.54,{ic:.022}],8592:[.437,-.064,.5],8594:[.437,-.064,.5],8652:[.514,.014,1],8708:[.86,.166,.556],8709:[.587,0,.778],8722:[.27,-.23,.5],8726:[.43,.023,.778],8733:[.472,-.028,.778],8739:[.43,.023,.222],8740:[.43,.023,.222,{ic:.018}],8741:[.431,.023,.389],8742:[.431,.024,.389,{ic:.018}],8764:[.365,-.132,.778],8776:[.481,-.05,.778],8808:[.752,.284,.778],8809:[.752,.284,.778],8816:[.919,.421,.778],8817:[.919,.421,.778],8840:[.828,.33,.778],8841:[.828,.33,.778],8842:[.634,.255,.778],8843:[.634,.254,.778],8872:[.694,0,.611],8901:[.189,0,.278],8994:[.378,-.122,.778],8995:[.378,-.143,.778],9651:[.575,.02,.722],9661:[.576,.019,.722],10887:[.801,.303,.778],10888:[.801,.303,.778],10955:[.752,.332,.778],10956:[.752,.333,.778]}},1054:function(Q,T,L){var H,V=this&&this.__extends||(H=function(Q,T){return H=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Q,T){Q.__proto__=T}||function(Q,T){for(var L in T)Object.prototype.hasOwnProperty.call(T,L)&&(Q[L]=T[L])},H(Q,T)},function(Q,T){if(\"function\"!=typeof T&&null!==T)throw new TypeError(\"Class extends value \"+String(T)+\" is not a constructor or null\");function L(){this.constructor=Q}H(Q,T),Q.prototype=null===T?Object.create(T):(L.prototype=T.prototype,new L)}),M=this&&this.__values||function(Q){var T=\"function\"==typeof Symbol&&Symbol.iterator,L=T&&Q[T],H=0;if(L)return L.call(Q);if(Q&&\"number\"==typeof Q.length)return{next:function(){return Q&&H>=Q.length&&(Q=void 0),{value:Q&&Q[H++],done:!Q}}};throw new TypeError(T?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(T,\"__esModule\",{value:!0}),T.TeXFont=void 0;var Z=L(9403),i=L(2176),t=L(8681),e=L(7293),s=L(59),c=L(3566),r=L(8745),o=L(181),a=L(6560),l=L(1500),n=L(2418),d=L(353),k=L(1082),u=L(67),f=L(9007),p=L(3377),h=L(8318),v=L(2226),_=L(6385),D=L(871),b=L(6819),x=L(4025),W=L(2698),y=L(5211),O=L(8742),m=L(2989),S=L(7481),P=function(Q){function T(T){var L,H;void 0===T&&(T=null);var V=Q.call(this,T)||this,Z=V.constructor;try{for(var i=M(Object.keys(Z.variantCacheIds)),t=i.next();!t.done;t=i.next()){var e=t.value;V.variant[e].cacheID=\"TEX-\"+Z.variantCacheIds[e]}}catch(Q){L={error:Q}}finally{try{t&&!t.done&&(H=i.return)&&H.call(i)}finally{if(L)throw L.error}}return V}return V(T,Q),T.defaultDelimiters=S.delimiters,T.defaultChars={normal:n.normal,bold:e.bold,italic:o.italic,\"bold-italic\":t.boldItalic,\"double-struck\":s.doubleStruck,fraktur:r.fraktur,\"bold-fraktur\":c.frakturBold,script:h.script,\"bold-script\":p.scriptBold,\"sans-serif\":f.sansSerif,\"bold-sans-serif\":k.sansSerifBold,\"sans-serif-italic\":u.sansSerifItalic,\"sans-serif-bold-italic\":d.sansSerifBoldItalic,monospace:l.monospace,\"-smallop\":v.smallop,\"-largeop\":a.largeop,\"-size3\":y.texSize3,\"-size4\":O.texSize4,\"-tex-calligraphic\":D.texCalligraphic,\"-tex-bold-calligraphic\":_.texCalligraphicBold,\"-tex-mathit\":b.texMathit,\"-tex-oldstyle\":W.texOldstyle,\"-tex-bold-oldstyle\":x.texOldstyleBold,\"-tex-variant\":m.texVariant},T.variantCacheIds={normal:\"N\",bold:\"B\",italic:\"I\",\"bold-italic\":\"BI\",\"double-struck\":\"D\",fraktur:\"F\",\"bold-fraktur\":\"BF\",script:\"S\",\"bold-script\":\"BS\",\"sans-serif\":\"SS\",\"bold-sans-serif\":\"BSS\",\"sans-serif-italic\":\"SSI\",\"sans-serif-bold-italic\":\"SSBI\",monospace:\"M\",\"-smallop\":\"SO\",\"-largeop\":\"LO\",\"-size3\":\"S3\",\"-size4\":\"S4\",\"-tex-calligraphic\":\"C\",\"-tex-bold-calligraphic\":\"BC\",\"-tex-mathit\":\"MI\",\"-tex-oldstyle\":\"OS\",\"-tex-bold-oldstyle\":\"BOS\",\"-tex-variant\":\"V\"},T}((0,i.CommonTeXFontMixin)(Z.SVGFontData));T.TeXFont=P},8681:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.boldItalic=void 0;var H=L(9403),V=L(3869);T.boldItalic=(0,H.AddPaths)(V.boldItalic,{47:\"189 -210Q179 -210 170 -203T160 -179Q160 -171 162 -166Q164 -163 420 266T679 698Q686 711 704 711Q714 711 723 704T733 681Q733 672 730 667Q723 654 469 228T211 -201Q202 -210 189 -210\",305:\"24 296Q24 305 34 328T63 380T115 430T187 452Q205 452 223 448T262 435T295 406T308 360Q308 345 287 290T240 170T207 87Q202 67 202 57Q202 42 215 42Q235 42 257 64Q288 92 302 140Q307 156 310 159T330 162H336H347Q367 162 367 148Q367 140 357 117T329 65T276 14T201 -8Q158 -8 121 15T83 84Q83 104 133 229T184 358Q189 376 189 388Q189 402 177 402Q156 402 134 380Q103 352 89 304Q84 288 81 285T61 282H55H44Q24 282 24 296\",567:\"297 360T297 373T294 392T288 400T278 401H276Q237 398 200 363Q181 343 170 325T156 299T149 287T129 282H123H116Q102 282 97 284T92 298Q93 303 98 315T118 349T151 390T201 427T267 451H279Q357 451 388 422T420 354V339L370 138Q321 -60 317 -69Q287 -157 163 -194Q133 -201 99 -201Q39 -201 14 -178T-12 -125Q-12 -94 11 -69T68 -43Q93 -43 108 -57T123 -95Q123 -121 100 -151H104Q131 -151 155 -125T193 -60Q195 -54 244 141T294 345Q297 360 297 373\",8260:\"189 -210Q179 -210 170 -203T160 -179Q160 -171 162 -166Q164 -163 420 266T679 698Q686 711 704 711Q714 711 723 704T733 681Q733 672 730 667Q723 654 469 228T211 -201Q202 -210 189 -210\",8710:\"65 0Q59 6 59 9T61 16Q64 20 334 357T608 698Q616 706 629 710Q630 710 634 710T644 710T656 711Q686 711 694 703Q698 699 700 693Q706 674 805 345T904 14Q904 7 894 1L479 0H65ZM630 342L567 551L232 134L462 133H693Q693 137 630 342\",10744:\"189 -210Q179 -210 170 -203T160 -179Q160 -171 162 -166Q164 -163 420 266T679 698Q686 711 704 711Q714 711 723 704T733 681Q733 672 730 667Q723 654 469 228T211 -201Q202 -210 189 -210\"},{})},7293:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.bold=void 0;var H=L(9403),V=L(7557);T.bold=(0,H.AddPaths)(V.bold,{33:\"89 629Q89 663 116 684T171 705Q215 705 237 681T260 634Q260 619 233 434T204 244Q201 237 175 237Q150 237 146 244Q144 248 117 433T89 629ZM90 86Q90 125 116 148T177 171Q211 169 235 146T259 86Q259 48 235 25T175 1Q138 1 114 24T90 86\",34:\"38 572T38 608T61 669T121 694Q167 694 196 657T225 559Q225 520 214 482T186 418T151 370T119 339T99 329T82 340T70 360Q70 365 74 369T92 385T122 414Q142 441 154 471T170 518L172 535L166 532Q160 530 148 527T122 523Q85 523 62 547ZM305 572T305 608T328 669T388 694Q434 694 463 657T492 559Q492 520 481 482T453 418T418 370T386 339T366 329T349 340T337 360Q337 365 341 369T359 385T389 414Q409 441 421 471T436 518L439 535L433 532Q427 530 415 527T389 523Q352 523 329 547\",35:\"64 362Q64 380 87 393H363L366 404Q379 443 390 480T409 542T424 590T435 628T443 655T451 674T458 686T467 692T478 694Q490 694 499 686T509 662Q505 643 427 395Q427 393 523 393H620L623 404Q630 426 652 498T691 624T711 681Q718 694 735 694Q748 694 757 685T766 662Q762 643 684 395Q684 393 777 393H871Q872 392 875 390T881 386T887 381T891 374T893 363Q893 345 871 333L767 332H664L660 319Q660 318 638 245T614 171Q614 169 742 169H871L877 165Q883 161 885 159T890 151T893 138Q893 120 871 109L732 108H594L590 95Q587 84 546 -46Q508 -175 505 -178Q498 -193 478 -193Q462 -193 455 -183T448 -164Q448 -156 530 106Q530 108 434 108H337L333 95Q330 84 289 -46Q251 -175 248 -178Q240 -193 222 -193Q206 -193 199 -183T191 -164Q191 -154 273 106Q273 108 180 108L87 109Q64 117 64 139Q64 156 87 169H293L321 262Q326 277 331 294T340 321L343 330Q343 332 215 332L87 333Q64 343 64 362ZM600 330Q600 332 504 332H407L403 319Q403 318 381 245T357 171Q357 169 453 169H550L578 262Q583 277 588 294T597 321L600 330\",36:\"64 494Q64 541 80 579T120 638T171 674T219 693T253 698H256V750H318V699H323Q355 694 380 686T433 663T480 620T506 556Q510 539 510 520Q510 480 488 463T440 445L422 447Q407 451 398 459Q370 478 370 515Q370 542 384 559T412 580L427 584Q424 589 418 596T386 617T324 636H318V434Q411 419 460 355T510 217Q510 196 507 175T492 122T461 67T404 23T318 -4V-56H256V-5H254Q252 -3 240 -3Q194 4 160 23T108 64T80 112T67 156T64 190Q64 218 81 240T134 262Q171 262 187 240T204 193T190 150T153 125Q146 125 144 123Q142 123 149 113T174 89T218 66Q247 58 255 58Q256 58 256 173V287L239 291Q160 308 112 365T64 494ZM255 636Q246 635 236 632T206 620T173 591T160 543Q160 472 256 448V542Q256 636 255 636ZM320 59Q324 59 333 61T356 70T384 89T406 120T415 167Q415 200 395 225T356 260T318 274V59H320\",37:\"65 549Q65 609 84 652T132 714T187 742T236 750Q265 750 296 734T355 697T431 661T541 644Q662 644 736 730Q751 749 767 749T790 739T797 719Q797 710 768 672T504 329Q212 -47 211 -48Q203 -55 191 -55Q161 -55 161 -25Q161 -17 163 -12L642 609Q608 595 542 595Q515 595 488 599T441 608T405 619T381 628L373 632Q373 630 375 619T380 589T383 548Q383 455 343 401T235 347Q217 347 198 351T154 368T110 403T78 462T65 549ZM320 549Q320 633 295 665T235 698H234Q214 698 196 674Q182 650 182 549Q182 509 183 486T190 441T207 409T238 399Q269 399 294 431T320 549ZM745 -56Q727 -56 708 -52T664 -35T620 0T588 59T575 146T588 232T620 291T663 325T708 343T747 347Q810 347 851 294T893 146Q893 89 879 48T841 -15T794 -46T745 -56ZM830 146Q830 230 805 262T745 295H744Q724 295 706 271Q692 247 692 146Q692 106 693 83T700 38T717 6T748 -4Q779 -4 804 28T830 146\",38:\"255 -11Q209 -11 164 4T84 56T48 146Q48 159 50 171Q57 197 72 218T99 249T152 292Q204 333 204 334L194 356Q185 379 176 421T166 511Q166 538 168 551Q182 613 226 654T332 704Q334 704 343 704T358 705Q412 702 444 661T476 565V559Q476 489 334 371L330 368L335 357Q382 272 485 165L496 154L506 163Q543 200 597 273L671 382H601V444H610L732 441Q821 441 830 444H836V382H741L709 335Q702 324 687 302T665 270T646 244T625 216T605 191T581 162T553 132L537 116Q544 109 557 98T605 69T673 51Q711 51 739 70T767 115V118H829V114Q829 70 786 30T668 -11Q570 -11 474 37L451 49L441 43Q352 -11 255 -11ZM415 564Q415 596 400 625T356 654Q329 654 310 634T285 588Q283 580 283 554Q283 475 309 417L325 431Q415 512 415 564ZM192 182Q192 126 213 89T279 51Q348 51 400 83L389 91Q362 112 338 137T295 186T264 229T240 265T227 286Q226 285 222 280T217 272T211 263T205 251T200 238T196 222T193 204T192 182\",39:\"74 572T74 608T97 669T157 694Q203 694 232 657T261 559Q261 520 250 482T222 418T187 370T155 339T135 329Q128 329 117 340T106 359Q106 365 117 375T144 399T176 440T203 505Q204 511 205 518T208 530V535L202 532Q196 530 184 527T158 523Q121 523 98 547\",40:\"103 166T103 251T121 412T165 541T225 639T287 708T341 750H356H361Q382 750 382 736Q382 732 365 714T323 661T274 576T232 439T214 250Q214 -62 381 -229Q382 -231 382 -234Q382 -249 360 -249H356H341Q314 -231 287 -207T226 -138T165 -41T121 89\",41:\"231 251Q231 354 214 439T173 575T123 661T81 714T64 735Q64 744 73 749H75Q77 749 79 749T84 750T90 750H105Q132 732 159 708T220 639T281 542T325 413T343 251T325 89T281 -40T221 -138T159 -207T105 -249H90Q80 -249 76 -249T68 -245T64 -234Q64 -230 81 -212T123 -160T172 -75T214 61T231 251\",42:\"235 706Q235 724 251 737T287 750Q306 750 322 738T339 706Q339 685 318 580V579Q429 663 436 666Q441 668 449 668Q471 668 486 650T501 612Q501 582 478 572Q476 570 414 549L354 528L414 507Q420 505 430 502T445 497T458 492T470 488T479 483T487 478T493 471T497 463T500 454T501 443Q501 423 486 406T449 388H446Q435 388 370 437Q339 461 318 477V476Q339 371 339 350Q339 332 323 319T287 306T251 319T235 350Q235 371 256 476V477Q145 393 138 390Q133 388 125 388Q103 388 88 406T73 444Q73 474 96 484Q98 486 160 507L220 528L160 549Q154 551 144 554T129 559T116 564T104 568T95 573T87 578T81 585T77 593T74 602T73 613Q73 633 88 650T125 668H128Q139 668 204 619Q235 595 256 579V580Q235 685 235 706\",43:\"64 232T64 250T87 281H416V444Q416 608 418 612Q426 633 446 633T475 613Q477 608 477 444V281H807Q808 280 811 278T817 274T823 269T827 262T829 251Q829 230 807 221L642 220H477V57Q477 -107 475 -112Q468 -131 446 -131Q425 -131 418 -112Q416 -107 416 57V220H251L87 221Q64 232 64 250\",44:\"74 85Q74 120 97 145T159 171Q200 171 226 138Q258 101 258 37Q258 -5 246 -44T218 -109T183 -155T152 -184T135 -194Q129 -194 118 -183T106 -164Q106 -157 115 -149Q121 -145 130 -137T161 -100T195 -35Q197 -28 200 -17T204 3T205 11T199 9T183 3T159 0Q120 0 97 26T74 85\",45:\"13 166V278H318V166H13\",46:\"74 85Q74 121 99 146T156 171Q200 171 222 143T245 85Q245 56 224 29T160 1Q118 1 96 27T74 85\",47:\"451 730Q460 750 479 750Q492 750 501 740T510 718Q508 708 318 244L122 -232Q112 -250 95 -250Q82 -250 73 -241T64 -218Q66 -205 258 261T451 730\",58:\"74 359Q74 394 98 419T158 444Q200 444 222 417T245 358Q245 329 224 302T160 274Q116 274 95 301T74 359ZM74 85Q74 121 99 146T156 171Q200 171 222 143T245 85Q245 56 224 29T160 1Q118 1 96 27T74 85\",59:\"74 359Q74 394 98 419T158 444Q200 444 222 417T245 358Q245 329 224 302T160 274Q116 274 95 301T74 359ZM74 50T74 86T97 146T158 171Q204 171 226 132T248 38Q248 -23 223 -80T171 -165T135 -194Q129 -194 118 -183T106 -164Q106 -163 106 -160L107 -158Q108 -155 121 -142T150 -107T177 -58Q189 -32 194 3Q195 6 193 6Q172 0 158 0Q121 0 98 25\",60:\"797 -56Q797 -68 790 -76T767 -85H759L434 70Q108 226 105 229Q96 238 96 250Q96 263 105 272Q109 276 271 354T595 508T757 585Q763 587 766 587Q780 587 788 578T797 556Q797 544 788 535Q784 531 490 391L197 251Q213 242 359 173T644 37T788 -34Q797 -43 797 -56\",61:\"87 333Q64 343 64 362Q64 383 84 391Q89 393 448 393H807Q808 392 811 390T817 386T823 381T827 374T829 363Q829 345 807 333H87ZM87 109Q64 118 64 139Q64 159 86 168Q89 169 448 169H807L812 166Q816 163 818 162T823 157T827 149T829 139Q829 118 807 109H87\",62:\"127 -85Q110 -85 103 -75T96 -55Q96 -41 106 -34Q119 -24 308 65Q361 90 411 114L696 250L427 379Q106 533 103 537Q96 545 96 557Q96 568 104 577T128 587Q137 586 460 431T788 272Q797 263 797 250Q797 238 788 229Q785 226 459 70L135 -85H127\",63:\"65 570Q65 628 119 664T259 700Q326 700 372 688T440 654T469 613T478 569Q478 505 412 465Q287 391 287 294V283Q287 250 284 244T263 237H256H249Q232 237 229 242T225 272V287Q227 364 253 418Q274 463 311 504Q335 530 335 575Q335 622 323 635T259 648Q231 648 209 644T179 636T170 630L172 628Q174 627 177 625T183 620T190 611T197 601T202 587T204 570Q204 539 185 519T134 499Q105 499 85 517T65 570ZM171 86Q171 125 197 148T258 171Q292 169 316 146T340 86Q340 48 316 25T256 1Q218 1 195 24T171 86\",64:\"64 347Q64 511 171 605T434 699Q487 699 500 698Q624 684 703 621T811 464Q828 414 828 344Q828 232 788 179T691 125Q673 125 657 127T628 132T606 140T588 148T576 156T568 162L566 164Q565 164 549 154T504 135T444 125Q349 125 284 183T218 347Q218 455 284 512T448 569Q554 569 610 479H638Q670 479 674 471Q676 468 676 340V258Q676 213 679 199T694 178Q701 174 713 177Q767 187 767 340Q767 489 678 569T446 649Q299 649 213 566T126 346Q126 307 134 269T166 189T225 116T320 65T455 45H463Q606 51 721 91L746 99H782H801Q829 99 829 85Q829 78 825 75T804 65Q800 63 797 62Q625 -6 451 -6Q271 -6 168 91T64 347ZM547 468Q526 493 504 505T444 517T377 476T346 347Q346 306 354 271T386 206T448 177Q505 177 547 226V468\",91:\"128 -250V750H293V689H189V-189H293V-250H128\",92:\"64 718Q63 731 72 740T94 750Q106 750 113 743Q118 741 122 732L318 256Q508 -208 510 -218Q511 -231 502 -240T480 -250Q460 -250 451 -230Q451 -229 259 238T64 718\",93:\"25 689V750H190V-250H25V-189H129V689H25\",94:\"207 632L287 694Q289 693 368 632T448 570T431 545T413 520Q410 520 350 559L287 597L224 559Q164 520 161 520Q160 520 143 544T126 570T207 632\",95:\"0 -61V-10H574V-61H0\",96:\"114 634Q114 663 136 684T183 706Q191 706 196 705T208 700T219 693T232 681T245 666T262 645T282 620Q332 558 337 553Q338 552 318 527L299 503L223 543Q215 547 202 553T183 563T167 571T153 580T141 587T131 595T124 603T118 612T115 622T114 634\",123:\"504 -207T504 -225T500 -246T476 -250H469Q257 -250 227 -145L225 -135L224 0Q224 15 224 30T224 59T224 84T224 106T223 122T223 133V137Q222 138 221 144T213 162T195 185Q171 206 141 215Q123 222 107 223T84 225T74 229T70 250T73 270T83 276T106 276T141 285Q171 294 195 315Q201 321 206 328T214 341T219 352T222 360L223 363V367Q223 371 223 378T223 394T224 415T224 441T224 470T224 501L225 636Q249 739 426 749Q428 749 443 749T466 750H473Q495 750 499 747T504 725T501 704T480 699Q381 693 357 645Q352 634 351 617T350 497V412Q350 350 338 329Q325 303 298 284T251 258T227 251Q226 251 226 250L227 249Q231 248 238 246T265 236T299 217T329 184T349 137Q350 131 350 3T352 -130Q358 -160 392 -178T480 -199Q497 -200 500 -203\",124:\"160 -249Q138 -249 129 -225V250Q129 725 131 729Q139 750 159 750T190 725V-225Q181 -249 160 -249\",125:\"70 726Q71 744 74 747T99 750H106Q323 750 349 636L350 501Q350 486 350 470T350 441T350 416T350 394T351 378T351 367V363Q352 362 353 356T361 338T379 315Q403 294 433 285Q451 278 467 277T490 275T500 271T504 250T501 230T491 224T468 224T433 215Q403 206 379 185Q373 179 368 172T360 159T355 148T352 140L351 137V133Q351 129 351 122T351 106T350 85T350 59T350 31T350 0L349 -135L347 -145Q317 -250 106 -250H99Q79 -250 75 -247T70 -226Q70 -208 73 -204T95 -199Q193 -193 217 -145Q222 -134 223 -117T224 3Q224 20 224 48T223 86Q223 145 237 175T301 232Q335 249 347 249Q348 249 348 250L347 251Q343 252 336 254T309 264T275 284T245 316T225 363Q224 369 224 497T222 631Q216 660 182 678T95 699Q77 700 74 704T70 726\",126:\"343 202Q320 202 278 225T215 249Q181 249 146 214L134 202L115 219Q111 222 106 226T98 234L96 236Q158 306 165 313Q199 344 230 344Q239 344 244 343Q262 339 300 318T359 297Q393 297 428 332L440 344L459 327Q463 324 468 320T476 312L478 310Q416 240 409 233Q375 202 343 202\",168:\"96 615Q96 650 120 672T178 695Q214 693 234 669T255 615Q255 583 232 559T176 535Q147 535 122 556T96 615ZM319 615Q319 651 343 673T399 695Q426 695 452 675T478 615Q478 578 454 557T395 535Q364 537 342 559T319 615\",172:\"680 371Q683 369 688 366T695 361T698 356T701 346T701 332T702 308V216Q702 196 702 168T703 130Q703 90 697 76T671 61Q650 61 643 81Q641 86 641 198V310H364L87 311Q64 319 64 341Q64 362 84 369Q89 371 385 371H680\",175:\"80 540V607H494V540H80\",176:\"160 618Q160 653 193 677T279 702H284Q381 702 407 647Q414 634 414 618Q414 607 410 596T395 570T355 546T287 536T220 545T181 568T165 594T160 618ZM352 618Q352 645 341 652T301 659H292Q286 659 278 659T268 660Q247 660 236 653T224 638T222 619Q222 591 234 585T287 578Q315 578 326 580T345 590T352 618\",177:\"64 328T64 346T87 377H416V542L417 707Q431 728 443 728Q467 728 475 709Q477 704 477 540V377H807Q808 376 811 374T817 370T823 365T827 358T829 347Q829 326 807 317L642 316H477V25H807Q808 24 811 22T817 18T823 13T827 6T829 -5Q829 -26 807 -35H87Q64 -24 64 -6T87 25H416V316H251L87 317Q64 328 64 346\",180:\"391 706Q419 706 439 683T460 634Q460 608 441 593T366 550Q356 545 351 543L275 503L256 527Q236 552 237 553Q242 558 292 620Q299 629 309 641T324 659T336 673T346 685T354 693T363 699T371 703T380 705T391 706\",183:\"74 251Q74 286 99 311T156 336Q200 336 222 308T245 250Q245 221 224 194T160 166T96 193T74 251\",215:\"168 500Q168 515 178 522T195 530H198Q207 530 218 521T282 458Q312 428 331 409L447 294L563 409Q674 520 682 525Q687 529 695 529Q711 529 718 520T726 499V498Q726 489 720 481T666 427Q631 392 606 367L490 251L606 135Q717 23 721 17T726 2Q726 -9 719 -18T695 -28H692Q685 -28 674 -18T608 47Q581 74 563 92L447 207L331 91Q217 -22 208 -27Q206 -28 203 -28H197Q168 -28 168 2Q168 13 178 24T288 135L404 250L288 366Q177 479 173 485T168 500\",247:\"344 495Q344 535 372 566T447 597Q490 597 519 566T548 495Q548 452 518 423T446 393Q404 393 374 423T344 495ZM87 221Q64 230 64 251T84 279Q89 281 448 281H806Q807 280 810 278T816 274T822 269T826 262T828 251Q828 230 806 221H87ZM344 -36T344 6T373 78T446 108Q487 108 517 79T548 6Q548 -35 519 -65T446 -96Q406 -96 375 -66\",305:\"247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247\",567:\"28 -163Q58 -168 64 -168Q124 -168 135 -77Q137 -65 137 141T136 353Q132 371 120 377T72 385H52V408Q52 431 54 431L58 432Q62 432 70 432T87 433T108 434T133 436Q151 437 171 438T202 441T214 442H218V184Q217 -36 217 -59T211 -98Q195 -145 153 -175T58 -205Q9 -205 -23 -179T-55 -117Q-55 -94 -40 -79T-2 -64T36 -79T52 -118Q52 -143 28 -163\",697:\"240 563Q278 563 304 539T331 480V473Q331 462 316 431T217 236Q199 200 174 151T136 78T123 50Q113 33 105 33Q101 33 72 45T38 60Q35 63 35 65Q35 77 101 293T171 517Q182 542 202 552T240 563\",710:\"207 632L287 694Q289 693 368 632T448 570T431 545T413 520Q410 520 350 559L287 597L224 559Q164 520 161 520Q160 520 143 544T126 570T207 632\",711:\"131 603Q130 604 136 618T150 646T158 659L223 635L287 611L351 635L416 659Q417 660 424 647T437 619T443 603Q440 601 364 558T287 515T210 558T131 603\",713:\"80 540V607H494V540H80\",714:\"391 706Q419 706 439 683T460 634Q460 608 441 593T366 550Q356 545 351 543L275 503L256 527Q236 552 237 553Q242 558 292 620Q299 629 309 641T324 659T336 673T346 685T354 693T363 699T371 703T380 705T391 706\",715:\"114 634Q114 663 136 684T183 706Q191 706 196 705T208 700T219 693T232 681T245 666T262 645T282 620Q332 558 337 553Q338 552 318 527L299 503L223 543Q215 547 202 553T183 563T167 571T153 580T141 587T131 595T124 603T118 612T115 622T114 634\",728:\"287 500Q208 500 155 558T102 689V694H153V685Q153 681 154 674T164 648T186 615T226 590T287 578Q347 578 382 611T421 685V694H472V689Q472 623 422 562T287 500\",729:\"202 610Q202 647 227 671T283 695Q324 695 348 669T372 610T350 551T287 525Q248 525 225 551T202 610\",730:\"160 618Q160 653 193 677T279 702H284Q381 702 407 647Q414 634 414 618Q414 607 410 596T395 570T355 546T287 536T220 545T181 568T165 594T160 618ZM352 618Q352 645 341 652T301 659H292Q286 659 278 659T268 660Q247 660 236 653T224 638T222 619Q222 591 234 585T287 578Q315 578 326 580T345 590T352 618\",732:\"343 552Q320 552 278 575T215 599Q181 599 146 564L134 552L115 569Q111 572 106 576T98 584L96 586Q158 656 165 663Q199 694 230 694Q239 694 244 693Q262 689 300 668T359 647Q393 647 428 682L440 694L459 677Q463 674 468 670T476 662L478 660Q416 590 409 583Q375 552 343 552\",768:\"-461 634Q-461 663 -439 684T-392 706Q-384 706 -379 705T-367 700T-356 693T-343 681T-330 666T-313 645T-293 620Q-243 558 -238 553Q-237 552 -257 527L-276 503L-352 543Q-360 547 -373 553T-392 563T-408 571T-422 580T-434 587T-444 595T-451 603T-457 612T-460 622T-461 634\",769:\"-184 706Q-156 706 -136 683T-115 634Q-115 608 -134 593T-209 550Q-219 545 -224 543L-300 503L-319 527Q-339 552 -338 553Q-333 558 -283 620Q-276 629 -266 641T-251 659T-239 673T-229 685T-221 693T-212 699T-204 703T-195 705T-184 706\",770:\"-368 632L-288 694Q-286 693 -207 632T-127 570T-144 545T-162 520Q-165 520 -225 559L-288 597L-351 559Q-411 520 -414 520Q-415 520 -432 544T-449 570T-368 632\",771:\"-232 552Q-255 552 -297 575T-360 599Q-394 599 -429 564L-441 552L-460 569Q-464 572 -469 576T-476 584L-479 586Q-417 656 -410 663Q-376 694 -345 694Q-336 694 -331 693Q-313 689 -275 668T-216 647Q-182 647 -147 682L-135 694L-116 677Q-112 674 -107 670T-100 662L-97 660Q-159 590 -166 583Q-200 552 -232 552\",772:\"-495 540V607H-81V540H-495\",774:\"-288 500Q-367 500 -420 558T-473 689V694H-422V685Q-422 681 -421 674T-411 648T-389 615T-349 590T-288 578Q-228 578 -193 611T-154 685V694H-103V689Q-103 623 -153 562T-288 500\",775:\"-373 610Q-373 647 -348 671T-292 695Q-251 695 -227 669T-203 610T-225 551T-288 525Q-327 525 -350 551T-373 610\",776:\"-479 615Q-479 650 -456 672T-397 695Q-361 693 -341 669T-320 615Q-320 583 -343 559T-399 535Q-428 535 -453 556T-479 615ZM-256 615Q-256 651 -232 673T-176 695Q-149 695 -123 675T-97 615Q-97 578 -121 557T-180 535Q-211 537 -233 559T-256 615\",778:\"-415 618Q-415 653 -382 677T-296 702H-291Q-194 702 -168 647Q-161 634 -161 618Q-161 607 -165 596T-180 570T-220 546T-288 536T-355 545T-394 568T-410 594T-415 618ZM-223 618Q-223 645 -234 652T-274 659H-283Q-289 659 -297 659T-307 660Q-328 660 -339 653T-351 638T-353 619Q-353 591 -341 585T-288 578Q-260 578 -249 580T-230 590T-223 618\",779:\"-389 511L-442 543Q-442 544 -424 606T-404 674Q-390 705 -361 713Q-360 713 -356 713T-349 714Q-340 714 -330 712Q-273 690 -273 644Q-273 621 -290 604L-342 554L-389 511ZM-198 511L-251 543Q-251 544 -233 606T-213 674Q-199 705 -170 713Q-169 713 -165 713T-158 714Q-127 714 -105 693T-82 647Q-82 638 -84 631T-89 618T-99 604T-112 590T-130 574T-151 554L-198 511\",780:\"-444 603Q-445 604 -439 618T-425 646T-417 659L-352 635L-288 611L-224 635L-159 659Q-158 660 -151 647T-138 619T-132 603Q-135 601 -211 558T-288 515T-365 558T-444 603\",824:\"-705 -210Q-715 -210 -724 -203T-734 -179Q-734 -171 -732 -166Q-730 -163 -474 266T-215 698Q-208 711 -190 711Q-180 711 -171 704T-161 681Q-161 672 -164 667Q-171 654 -425 228T-683 -201Q-692 -210 -705 -210\",8194:\"\",8195:\"\",8196:\"\",8197:\"\",8198:\"\",8201:\"\",8202:\"\",8211:\"0 249V300H574V249H0\",8212:\"0 249V300H1149V249H0\",8213:\"0 249V300H1149V249H0\",8214:\"205 -225Q201 -234 199 -237T191 -244T175 -248T161 -246Q151 -240 146 -229Q145 -224 145 251Q145 725 146 730Q156 750 176 750Q193 748 205 727V-225ZM369 727L372 732Q375 737 377 740T385 747T398 750Q406 750 413 747Q423 740 428 730Q430 720 430 251Q430 -219 428 -229Q423 -240 413 -246Q408 -248 400 -248Q393 -248 388 -247T379 -242T375 -236T371 -230L369 -225V727\",8215:\"0 -61V-10H574V-61H0\",8216:\"58 461Q58 503 70 542T99 607T134 654T165 684T184 694T201 683T213 664Q213 658 202 648T175 624T143 583T116 518Q115 512 114 505T112 493L111 488Q132 500 161 500Q198 500 221 475T245 414T222 354T161 329Q112 329 85 369T58 461\",8217:\"74 572T74 608T97 669T157 694Q203 694 232 657T261 559Q261 520 250 482T222 418T187 370T155 339T135 329Q128 329 117 340T106 359Q106 365 117 375T144 399T176 440T203 505Q204 511 205 518T208 530V535L202 532Q196 530 184 527T158 523Q121 523 98 547\",8220:\"110 461Q110 502 121 541T150 606T185 653T217 684T235 694Q242 694 254 682T266 664Q266 659 254 648T226 623T193 578T167 511Q164 500 164 494T164 487Q188 500 212 500Q251 500 274 475T297 414Q297 378 274 354T212 329Q167 329 139 367T110 461ZM377 461Q377 502 388 541T417 606T452 653T484 684T502 694Q509 694 521 682T533 664Q533 659 521 648T493 623T460 578T434 511Q431 500 431 494T431 487Q455 500 479 500Q518 500 541 475T564 414Q564 378 541 354T479 329Q434 329 406 367T377 461\",8221:\"38 572T38 608T61 669T121 694Q167 694 196 657T225 559Q225 520 214 482T186 418T151 370T119 339T99 329T82 340T70 360Q70 365 74 369T92 385T122 414Q142 441 154 471T170 518L172 535L166 532Q160 530 148 527T122 523Q85 523 62 547ZM305 572T305 608T328 669T388 694Q434 694 463 657T492 559Q492 520 481 482T453 418T418 370T386 339T366 329T349 340T337 360Q337 365 341 369T359 385T389 414Q409 441 421 471T436 518L439 535L433 532Q427 530 415 527T389 523Q352 523 329 547\",8224:\"231 470Q232 471 232 473Q232 477 213 540T193 636Q192 642 192 651T204 677T239 700Q249 702 255 702Q300 702 315 660Q317 653 317 636Q317 603 298 539T279 472V470Q280 470 318 488T383 506Q408 506 423 493T442 467T446 444T443 421T424 396T383 382Q355 382 318 400T279 418Q278 416 285 392T303 334T316 284Q318 268 318 234Q318 149 311 45T296 -127T284 -203Q279 -211 255 -211Q237 -211 233 -210T226 -203Q222 -195 214 -129T199 41T192 234V245Q192 286 212 349Q233 413 231 418Q229 418 192 400T128 382Q102 382 86 396T67 421T64 444T67 466T86 492T128 506Q155 506 192 488T231 470\",8225:\"193 637Q193 663 206 679T231 698T255 702T279 699T304 679T317 637Q317 605 299 557T280 504Q280 503 281 503T320 521T382 539Q410 539 428 521T446 476Q446 454 432 434T383 414H377Q358 414 320 431T281 449L280 448Q280 444 298 396T317 316Q318 310 318 301T306 275T271 252Q261 250 255 250Q210 250 195 292Q193 299 193 316Q193 347 211 395T230 448Q230 449 229 449Q227 449 196 434Q151 414 133 414H127Q102 414 87 427T68 452T64 477Q64 503 81 521T127 539Q143 539 164 532T204 515T226 504Q230 502 230 504Q230 508 212 556T193 637ZM193 184Q193 210 206 226T231 245T255 249T279 246T304 226T317 184Q317 153 299 106T280 53Q280 51 282 51T322 68T383 86Q411 86 428 69T445 24T428 -21T382 -39Q358 -39 322 -22T282 -4Q280 -3 280 -3T280 -6Q281 -13 299 -59T317 -136Q318 -142 318 -151T306 -177T271 -200Q261 -202 255 -202Q210 -202 195 -160Q193 -153 193 -136Q193 -106 211 -60T230 -6Q230 -4 228 -4T188 -21T128 -39Q100 -39 83 -22T65 24Q65 53 82 69T127 86Q150 86 187 69T228 51Q230 50 230 50T230 53Q229 58 211 105T193 184\",8226:\"64 251Q64 303 80 344T121 409T175 448T230 469T275 474Q277 474 283 474T292 473Q385 473 447 415T510 251Q510 149 449 89T287 28T126 88T64 251\",8230:\"74 85Q74 121 99 146T156 171Q200 171 222 143T245 85Q245 56 224 29T160 1Q118 1 96 27T74 85ZM562 85Q562 121 587 146T644 171Q688 171 710 143T733 85Q733 56 712 29T648 1Q606 1 584 27T562 85ZM1050 85Q1050 121 1075 146T1132 171Q1176 171 1198 143T1221 85Q1221 56 1200 29T1136 1Q1094 1 1072 27T1050 85\",8242:\"240 563Q278 563 304 539T331 480V473Q331 462 316 431T217 236Q199 200 174 151T136 78T123 50Q113 33 105 33Q101 33 72 45T38 60Q35 63 35 65Q35 77 101 293T171 517Q182 542 202 552T240 563\",8254:\"80 540V607H494V540H80\",8260:\"451 730Q460 750 479 750Q492 750 501 740T510 718Q508 708 318 244L122 -232Q112 -250 95 -250Q82 -250 73 -241T64 -218Q66 -205 258 261T451 730\",8407:\"406 694Q406 704 413 713T433 723Q448 723 454 719T467 701Q483 665 522 648Q542 637 542 619Q542 605 536 599T514 586Q468 569 431 532Q411 513 399 513Q386 513 378 522T369 543Q369 557 381 568Q385 572 387 574L400 588H228L56 589Q33 598 33 618Q33 636 56 649H426Q406 676 406 694\",8463:\"477 56Q477 48 479 46T490 43Q522 45 544 75T577 140Q582 156 585 159T605 162H611H622Q642 162 642 148Q642 138 632 114T602 62T550 13T478 -8Q429 -8 394 17T358 83Q358 95 395 199T433 350Q433 400 394 400H388H383Q335 400 291 363Q256 332 236 298Q233 293 202 170T169 40Q160 18 141 5T99 -8Q70 -8 58 9T45 39Q45 51 116 336L167 540H80V607H184L188 622H184Q183 622 179 622T169 623T157 624T146 624T136 624T131 625Q119 628 119 642Q119 647 123 661T129 679Q133 684 142 685T220 690Q293 694 307 694Q324 694 328 679Q328 673 311 607H494V540H294Q286 507 278 473T264 420L260 403Q260 400 269 408Q327 451 393 451H401H410Q425 451 439 450T476 442T515 424T544 391T556 337Q556 286 517 179T477 56\",8467:\"245 -19Q228 -19 212 -16T184 -6T162 9T143 27T129 46T118 66T111 84T106 99T102 111L101 116L69 89L36 62Q31 60 24 62Q-1 88 -1 98Q-1 101 1 105Q1 106 73 170L95 189V197Q95 242 112 317T159 476T241 624T353 701Q357 702 367 702Q428 702 444 641Q446 630 446 606Q446 454 241 246L215 220L212 203Q203 150 203 114Q203 113 203 106T204 95T205 82T209 67T214 54T223 43T236 35T253 32Q277 32 305 44T352 70T389 98T407 112Q409 113 412 113Q420 113 432 95Q445 77 443 70Q440 64 416 44T342 3T245 -19ZM387 615Q387 651 366 651Q342 651 321 604T276 470L241 331Q246 331 280 373T350 486T387 615\",8472:\"399 159Q410 159 421 151T433 126Q433 104 410 85Q408 84 410 78Q411 72 414 66T428 51T455 43Q483 43 506 55T543 83T568 125T584 166T594 206Q595 211 596 214Q610 273 610 301Q610 365 542 365H538Q483 365 429 344T337 292T269 229T225 175T210 150L255 99Q261 92 274 78T292 58T305 41T316 22T321 3T324 -23Q324 -87 283 -148T174 -210H171Q161 -210 152 -209T128 -201T101 -180T81 -141T72 -78Q72 -72 72 -60T73 -45Q79 4 102 65L108 81Q84 117 84 167Q84 273 140 367T269 461Q285 461 285 447Q285 440 282 431Q278 418 276 415T264 410Q228 404 201 336T174 219Q174 218 176 202L184 214Q252 303 348 360T549 417Q614 417 658 391T719 317Q726 292 726 260Q726 148 646 70T451 -8Q407 -8 377 17T346 92Q346 159 396 159H399ZM178 -160Q200 -160 216 -132T232 -75Q232 -63 228 -56T203 -26Q196 -18 192 -14Q185 -5 176 5T161 20T156 27L153 28Q151 28 146 8T137 -42T132 -89Q132 -160 178 -160\",8501:\"590 427Q581 427 579 433T575 450T568 470V468L532 288L541 281Q620 220 634 165L637 154V124Q637 74 628 46Q623 32 612 16T592 0Q580 0 578 19T569 69T538 121Q532 126 385 240T236 355Q234 355 231 338T225 291T222 237Q222 222 223 213T225 201T228 195T231 190Q238 179 261 160T300 119T316 73Q316 41 291 23T231 1Q226 0 149 0H98Q73 0 69 3T64 24Q64 43 67 47T85 51H89Q119 51 134 55T152 64T154 76Q154 95 125 141T96 220Q96 243 104 270T123 319T145 360T164 391T172 404T150 421T102 468T68 529L65 541V570Q65 620 74 648Q79 664 91 679T111 694Q122 694 123 675T132 625T164 573Q168 569 319 452T471 335Q471 337 486 409T502 488Q502 489 491 493T467 511T448 546V573Q448 602 452 624T462 659T474 680T486 691T493 694Q499 694 502 691T507 682T513 673Q517 667 534 651T557 630Q558 629 590 616T631 587Q638 577 638 543Q637 489 622 458T590 427\",8592:\"1063 281Q1084 268 1084 251Q1084 231 1063 221L649 220H235Q340 133 364 17Q368 1 368 -2Q368 -16 343 -17Q340 -17 338 -17H332Q317 -17 314 -14T305 6Q298 34 285 62T247 126T179 189T78 233Q64 237 64 251Q64 261 74 265T108 277T154 297Q212 328 251 379T305 495Q309 511 313 514T333 518H338Q363 517 367 510Q368 507 368 503Q368 500 364 484Q345 401 287 331Q254 295 235 282L649 281H1063\",8593:\"33 396Q14 396 14 423Q14 445 18 449T41 459Q72 466 99 478T147 505T185 537T215 571T238 604T254 635T264 661T270 678L272 685Q276 694 288 694Q298 692 300 689T307 672Q331 592 392 535T535 459Q553 454 557 450T561 423Q561 396 542 396Q531 396 501 405T418 443T329 517L319 529L318 179V-171Q307 -193 288 -193Q265 -193 258 -171L257 179V529L247 517Q209 473 158 444T76 405T33 396\",8594:\"65 251Q65 270 87 281H500L914 282Q881 304 842 357T785 482Q781 500 781 501Q781 512 792 517Q794 518 812 518H817Q832 518 835 515T844 495Q864 412 923 351T1065 270Q1085 263 1085 251Q1085 240 1077 236T1044 225T995 204Q937 173 898 122T844 6Q840 -10 836 -13T816 -17H811Q786 -16 782 -9Q781 -6 781 -2Q781 1 785 17Q813 138 914 220H500L87 221Q65 228 65 251\",8595:\"14 77Q14 104 33 104Q44 104 74 96T156 57T247 -17L257 -29V321Q257 669 259 675Q268 694 289 694Q295 693 300 691T307 686T313 679T318 672V321L319 -29L329 -17Q366 26 417 55T499 94T542 104Q561 104 561 77Q561 56 557 51T535 41Q481 28 438 0T370 -58T330 -119T308 -167T302 -187Q297 -194 288 -194Q278 -194 273 -186T265 -165T251 -127T220 -77Q151 15 41 41Q22 46 18 50T14 77\",8596:\"305 495Q309 511 313 514T333 518H338Q363 517 367 510Q368 507 368 503Q368 500 364 484Q345 401 287 331Q254 295 235 282L404 281H744L914 282Q880 305 839 362T785 484Q781 500 781 503Q781 517 806 518Q809 518 811 518H817Q832 518 835 515T844 495Q864 412 923 351T1065 270Q1085 263 1085 251Q1085 240 1077 236T1044 225T995 204Q937 173 898 122T844 6Q840 -10 836 -13T816 -17H811Q786 -16 782 -9Q781 -6 781 -2Q781 1 785 17Q813 138 914 220H235Q340 133 364 17Q368 1 368 -2Q368 -16 343 -17Q340 -17 338 -17H332Q317 -17 314 -14T305 6Q298 34 285 62T247 126T179 189T78 233Q64 237 64 251Q64 261 74 265T108 277T154 297Q212 328 251 379T305 495\",8597:\"33 469Q14 469 14 496Q14 518 18 522T41 532Q121 551 182 608T268 745Q275 767 288 767Q299 767 303 755T320 713T355 650Q424 558 535 532Q553 527 557 523T561 496Q561 469 542 469Q531 469 501 478T418 516T329 590L319 602L318 426V74L319 -102L329 -90Q366 -47 417 -18T499 21T542 31Q561 31 561 4Q561 -17 557 -22T535 -32Q454 -51 393 -108T307 -245Q300 -267 288 -267Q279 -267 274 -259T266 -238T250 -200T220 -150Q151 -58 41 -32Q22 -27 18 -23T14 4Q14 31 33 31Q44 31 74 23T156 -16T247 -90L257 -102V602L247 590Q209 546 158 517T76 478T33 469\",8598:\"429 724Q438 724 452 711T466 690Q466 681 452 671Q361 602 242 599H218L756 135Q832 69 913 -1T1036 -108L1077 -143Q1084 -151 1084 -163Q1084 -180 1074 -187T1054 -194H1052Q1043 -194 939 -105Q866 -42 812 5Q180 549 178 549V546Q179 542 179 539Q183 520 183 483Q183 435 172 390T149 323T130 296Q121 292 115 295Q85 312 85 328Q85 331 95 350T115 406T125 486Q125 540 110 583T79 648T64 675Q64 681 68 687T81 693Q87 693 94 690Q162 657 232 657Q296 657 349 681T420 722Q422 724 429 724\",8599:\"1069 693Q1076 693 1080 687T1085 675Q1085 671 1076 656T1055 621T1034 565T1024 486Q1024 442 1034 406T1054 351T1064 328Q1064 321 1057 313T1042 300L1034 295Q1030 293 1027 293Q1023 293 1020 295T1014 301T1009 308T1005 316T1001 324Q980 368 971 419Q966 442 966 484V492Q966 528 972 553Q971 553 757 368T328 -3T107 -191Q103 -193 94 -193Q78 -193 71 -184T64 -164Q64 -153 72 -143Q79 -136 382 124L934 599H909Q837 599 760 634T683 690Q683 697 696 710T722 724Q726 724 742 714T779 691T838 668T920 657Q959 657 991 666T1043 684T1069 693\",8600:\"65 663Q65 680 74 687T93 694H96Q104 694 118 683T204 610Q280 545 338 495Q969 -49 971 -49L970 -46Q970 -42 970 -39Q966 -20 966 18Q966 65 977 110T1001 177T1019 204Q1028 208 1034 205Q1064 188 1064 172Q1064 169 1054 150T1034 94T1024 14Q1024 -28 1033 -64T1054 -120T1075 -155T1085 -175Q1085 -181 1081 -187T1068 -193Q1062 -193 1055 -190Q987 -157 919 -157Q817 -157 739 -215Q727 -224 720 -224Q712 -224 697 -210Q683 -199 683 -190T697 -171Q788 -102 907 -99H931L393 365Q317 431 236 501T114 608L72 643Q65 651 65 663\",8601:\"80 -193Q73 -193 69 -187T64 -175Q64 -172 79 -150T109 -84T125 14Q125 58 115 94T95 149T85 172Q85 179 92 187T108 200L115 205Q119 207 122 207Q126 207 129 205T135 199T140 192T144 184T148 176Q169 132 178 81Q183 58 183 17Q183 -7 182 -24T178 -48L177 -53Q178 -53 389 129T816 498T1043 692Q1049 694 1054 694Q1070 694 1077 684T1085 664Q1085 653 1077 643Q1070 636 767 376L215 -98L240 -99Q312 -99 389 -134T466 -190Q466 -197 452 -210T429 -224Q422 -224 411 -215Q330 -157 229 -157Q190 -157 158 -166T106 -184T80 -193\",8614:\"65 426Q74 448 95 448Q112 448 125 426V281H500L914 282Q881 304 842 357T785 482Q781 500 781 501Q781 512 792 517Q794 518 812 518H817Q832 518 835 515T844 495Q864 412 923 351T1065 270Q1085 263 1085 251Q1085 240 1077 236T1044 225T995 204Q937 173 898 122T844 6Q840 -10 836 -13T816 -17H811Q786 -16 782 -9Q781 -6 781 -2Q781 1 785 17Q813 138 914 220H500L135 221Q134 221 133 221T130 220H125V76Q115 54 95 54Q73 54 65 76V426\",8617:\"1029 475Q1029 505 1068 505Q1129 501 1173 463T1218 363Q1218 296 1170 259T1066 221H1063L649 220H235Q340 133 364 17Q368 1 368 -2Q368 -16 343 -17Q340 -17 338 -17H332Q317 -17 314 -14T305 6Q298 34 285 62T247 126T179 189T78 233Q64 237 64 251Q64 261 74 265T108 277T154 297Q212 328 251 379T305 495Q309 511 313 514T333 518H338Q363 517 367 510Q368 507 368 503Q368 500 364 484Q345 401 287 331Q254 295 235 282L649 281H1063Q1105 284 1131 305T1158 361Q1158 385 1146 401Q1122 441 1063 444Q1029 446 1029 475\",8618:\"225 221H218Q159 221 112 260T65 363Q65 431 116 468T221 505Q254 503 254 474Q254 456 245 450T216 443T188 438Q152 427 137 401Q125 385 125 362Q125 334 147 310Q171 288 221 281H632L1046 282Q1013 304 974 357T917 482Q913 500 913 501Q913 512 924 517Q926 518 944 518H949Q964 518 967 515T976 495Q996 412 1055 351T1197 270Q1217 263 1217 251Q1217 240 1209 236T1176 225T1127 204Q1069 173 1030 122T976 6Q972 -10 968 -13T948 -17H943Q918 -16 914 -9Q913 -6 913 -2Q913 1 917 17Q945 138 1046 220H632L225 221\",8636:\"1063 281Q1084 268 1084 251Q1084 231 1063 221L572 220Q79 220 77 221Q64 225 64 244Q64 250 64 254T67 261T71 265T78 268T85 272Q142 302 189 345T258 421T296 484T315 516Q319 518 337 518Q358 518 363 512Q370 504 367 496Q360 469 319 404T219 290L209 282L636 281H1063\",8637:\"1063 281Q1084 268 1084 251Q1084 231 1063 221L636 220H209L219 212Q278 162 319 97T367 5Q370 -3 363 -11Q358 -17 337 -17H332Q318 -17 314 -14T302 7Q278 55 246 95T185 160T130 202T88 228L70 237Q64 243 64 257Q64 274 75 279Q78 281 571 281H1063\",8640:\"65 251Q65 270 87 281H513L940 282L930 290Q871 338 830 403T782 496Q779 510 791 517Q794 518 812 518H817Q831 518 835 515T847 494Q871 445 903 404T966 338T1022 298T1064 272T1083 259Q1085 255 1085 245Q1085 225 1072 221Q1070 220 578 220L87 221Q65 228 65 251\",8641:\"84 279Q89 281 580 281Q1070 281 1074 279Q1085 275 1085 256Q1085 245 1083 241T1066 230Q919 153 847 7Q839 -11 835 -14T817 -17H812Q791 -17 786 -11Q779 -3 782 5Q789 31 830 96T930 212L940 220H513L87 221Q64 229 64 250Q64 272 84 279\",8652:\"65 451Q65 470 87 481H513L940 482L930 490Q871 538 830 603T782 696Q779 710 791 717Q794 718 812 718H817Q831 718 835 715T847 694Q871 645 903 604T966 538T1022 498T1064 472T1083 459Q1085 455 1085 445Q1085 425 1072 421Q1070 420 578 420L87 421Q65 428 65 451ZM1063 281Q1084 268 1084 251Q1084 231 1063 221L636 220H209L219 212Q278 162 319 97T367 5Q370 -3 363 -11Q358 -17 337 -17H332Q318 -17 314 -14T302 7Q278 55 246 95T185 160T130 202T88 228L70 237Q64 243 64 257Q64 274 75 279Q78 281 571 281H1063\",8656:\"1063 169L1068 166Q1072 163 1074 162T1079 157T1083 149T1085 139Q1085 118 1063 109L733 108H404L412 99Q455 50 488 -10Q498 -27 493 -37Q487 -46 465 -46H460Q446 -46 439 -39T426 -18T399 25T344 89Q239 194 99 229Q96 230 92 231T85 232T79 234T73 235T69 237T66 240T65 244T64 250Q64 267 90 271Q197 295 286 361T430 525Q439 542 442 544T460 547H465Q487 547 492 539Q496 531 496 530Q496 521 471 482T414 405L404 394L733 393H1063Q1064 392 1069 389T1076 384T1082 375T1085 362Q1085 344 1063 333L700 332H338L324 321Q283 290 230 264L205 250Q266 224 323 180L338 170L700 169H1063\",8657:\"672 343Q672 326 670 320T657 313Q644 313 602 335Q577 349 557 361T527 381T509 395T499 403T495 406T494 118Q494 -166 492 -174Q484 -193 465 -193H463Q456 -193 453 -192T444 -186T433 -170V465L423 477Q407 495 394 514T367 554T351 579Q349 576 339 560T313 520T279 477L269 465V-22V-102Q269 -132 269 -145T268 -169T266 -180T260 -185T253 -191Q248 -193 239 -193H237Q218 -193 210 -174Q208 -166 208 118Q208 406 207 406L199 399Q191 392 165 374T100 335Q58 313 45 313Q35 313 33 319T30 343V349Q30 359 30 362T35 369T45 374T66 383T100 401Q267 499 333 680Q339 694 351 694Q361 694 365 687T380 652T407 597Q442 536 489 489T573 420T638 383T670 365Q672 361 672 343\",8658:\"64 362Q64 380 87 393H416L745 394L735 405Q708 436 681 477T654 531Q654 547 679 547H684H689Q703 547 710 540T723 519T750 475T806 411Q914 303 1059 271Q1060 271 1063 270T1068 269T1072 268T1076 266T1079 264T1082 260T1083 256T1084 250Q1084 242 1080 238T1063 231T1035 225T992 211T934 185Q797 112 719 -24Q710 -40 706 -43T689 -46H684Q653 -46 653 -31Q653 -24 661 -10Q694 50 737 99L745 108H416L87 109Q64 117 64 139Q64 156 87 169H449L812 170L826 180Q842 193 860 204T892 223T918 237T937 246L944 250L919 264Q866 290 825 321L811 332H449L87 333Q64 343 64 362\",8659:\"30 157Q30 174 32 180T46 187Q59 187 104 163Q154 136 198 101L207 94Q208 94 208 382Q208 666 210 674Q219 694 241 694Q254 692 262 683Q266 679 267 674Q269 658 269 522V35L279 23Q295 5 308 -14T335 -54T351 -79Q353 -76 363 -60T389 -20T423 23L433 35V671Q439 682 444 686T452 692T463 693H465Q484 693 492 674Q494 666 494 382Q494 94 495 94L504 101Q547 135 593 160T652 187Q665 191 671 177Q672 175 672 157Q672 137 669 134T636 116Q606 101 578 83T528 47T486 9T452 -30T424 -68T403 -103T387 -134T377 -159T370 -176L367 -184Q360 -194 351 -194Q345 -194 342 -192T334 -182T327 -166T315 -137T295 -97Q260 -36 213 11T129 80T63 117T32 136Q30 139 30 157\",8660:\"336 497Q358 541 363 544Q367 547 379 547H384Q401 547 405 545Q418 538 414 525T389 474T346 408L335 393H814L803 408Q781 436 760 474T735 525T744 545Q748 547 765 547Q771 547 774 547T780 546T786 544T790 541T794 535T799 527T805 514T813 497Q841 446 877 406T950 340T1014 301T1068 276L1096 265Q1102 259 1102 251Q1102 240 1085 232Q981 195 902 121Q835 56 798 -25Q791 -40 787 -43T765 -46T744 -44Q735 -40 735 -30Q735 -15 760 28T806 98L814 108H335L343 98Q361 75 378 46T404 -1T414 -24Q418 -37 405 -44Q401 -46 384 -46T363 -43T351 -25Q314 56 247 121Q216 150 182 173T125 206T79 226T53 237Q47 243 47 251Q47 254 47 256T49 261T52 264T57 267T61 268T66 270T71 272Q246 335 336 497ZM985 251Q932 280 882 323L871 332H278Q264 321 253 311T237 297T214 282T164 251L176 244Q221 218 278 169H871Q928 218 973 244L985 251\",8661:\"49 441Q30 441 30 464V471V480Q30 498 44 502Q237 573 331 750Q337 767 351 767Q360 767 368 753T400 702T460 629Q504 584 552 554T632 511T666 497Q672 493 672 471Q672 454 670 449Q664 441 653 441Q639 443 591 465T508 513L495 522L494 386V114L495 -22L508 -13Q543 12 591 34T653 59Q672 59 672 36V29V20Q672 2 658 -2Q465 -71 367 -257Q360 -267 351 -267Q343 -267 336 -257T320 -231T292 -187T242 -129Q198 -84 150 -54T70 -11T36 3Q30 7 30 29Q30 46 32 51Q38 59 49 59Q63 57 111 35T194 -13L208 -22V522L194 513Q159 488 111 466T49 441ZM422 584Q411 594 400 606T383 626T366 648T351 667Q349 665 339 652T314 620T280 584L269 573V-73L280 -84Q305 -108 351 -166Q353 -164 363 -151T389 -119T422 -84L433 -73V573L422 584\",8704:\"1 664Q-2 685 23 693H27Q46 693 54 680T102 578L148 475H492L533 570Q541 586 548 603T560 630T569 650T576 667T582 678T588 686T594 691T600 693T609 694Q622 694 631 684T639 662Q637 653 492 325T341 -8Q333 -16 320 -16Q306 -16 298 -8Q294 -4 147 326L1 656V664ZM464 414H319Q175 414 175 413L319 88L464 414\",8707:\"81 347Q81 359 84 363T104 378H513V633H300L87 634Q64 642 64 664Q64 685 84 692Q89 694 321 694H552Q571 681 574 669V25Q567 7 552 1H87Q64 12 64 30T87 61H513V317H308Q103 317 99 319Q81 328 81 347\",8709:\"285 711Q307 711 326 708T357 701T370 698Q371 698 375 710T383 735T389 750Q395 767 415 767Q431 767 438 757T446 738T436 701T426 670Q426 668 433 664Q468 633 489 588Q511 542 519 488T528 344Q528 286 524 243T508 150T466 63T394 6Q345 -17 287 -17Q265 -17 246 -14T216 -7T203 -4Q191 -47 183 -60T159 -73Q146 -73 137 -63T128 -44Q128 -38 138 -7L148 24L141 30Q134 35 120 49Q94 77 78 113T56 194T48 268T46 344Q46 388 47 416T56 494T78 577T122 644T194 694Q239 711 285 711ZM351 639Q350 639 346 642T337 648T325 654T306 658T283 660Q254 660 221 638T181 567Q171 513 171 375Q171 164 182 129L351 639ZM402 356Q402 516 395 555Q395 557 395 559T394 563T394 566L393 568L223 57Q252 34 286 34H288Q318 34 346 53T387 109Q402 152 402 329V356\",8710:\"901 12Q901 7 892 0H479Q65 0 62 2Q56 6 56 11Q56 14 242 347T433 685Q438 694 450 696Q454 698 480 698H506L523 687Q526 683 711 354T899 17Q901 13 901 12ZM653 137L427 538L202 137L315 136H540L653 137\",8712:\"97 251Q97 393 194 484T417 586Q418 586 436 586T482 586T538 587H648Q649 586 652 584T658 580T664 575T668 568T670 557Q670 536 648 527L534 526Q515 526 491 526T457 526T435 526T417 525T404 523T390 521T374 517Q298 498 243 447T167 324Q159 295 159 283Q159 281 403 281H648Q649 280 652 278T658 274T664 269T668 262T670 251Q670 230 648 221L403 220Q159 220 159 218Q159 206 166 182T190 122T247 50T341 -6Q380 -20 405 -22T534 -25H648Q649 -26 654 -29T661 -34T667 -43T670 -56Q670 -74 648 -85L541 -86Q419 -86 396 -82Q276 -65 187 24T97 251\",8713:\"126 -210Q116 -210 107 -203T97 -179Q97 -171 99 -166Q99 -165 111 -145T150 -80T203 8Q97 104 97 251Q97 393 194 484T417 586Q418 586 436 586T482 586T538 587H549Q565 614 582 643T608 685L616 698Q623 711 641 711Q651 711 660 704T670 681Q670 672 667 667Q666 666 661 657T644 627T620 587H648Q649 586 652 584T658 580T664 575T668 568T670 557Q670 536 648 527L584 526L437 281H648Q649 280 652 278T658 274T664 269T668 262T670 251Q670 230 648 221L403 220H401L283 23Q311 5 341 -6Q380 -20 405 -22T534 -25H648Q649 -26 654 -29T661 -34T667 -43T670 -56Q670 -74 648 -85L541 -86Q419 -86 396 -82Q320 -71 252 -29Q152 -197 148 -201Q139 -210 126 -210ZM235 62L330 220Q159 219 159 218Q159 196 176 150T235 62ZM366 281L513 526Q503 526 487 526T465 526T448 525T433 525T422 525T412 524T403 523T394 521T385 519T374 517Q298 498 243 447T167 324Q159 295 159 283Q159 281 366 281\",8715:\"96 251Q96 268 119 281H363Q607 281 607 283Q607 295 600 319T576 379T519 451T425 507Q386 521 361 523T233 526L119 527Q96 535 96 557Q96 578 116 585Q121 587 229 587Q238 587 257 587T288 588Q366 588 435 568T568 488Q670 388 670 251Q670 155 621 78T499 -39T345 -85Q336 -86 225 -86L119 -85Q96 -77 96 -55Q96 -38 119 -25H233Q356 -24 371 -21Q373 -21 393 -16Q468 3 523 55T599 177Q607 206 607 218Q607 220 363 220L119 221Q96 229 96 251\",8722:\"119 221Q96 230 96 251T116 279Q121 281 448 281H775Q776 280 779 278T785 274T791 269T795 262T797 251Q797 230 775 221H119\",8723:\"64 155Q64 172 87 185H416V476H251L87 477Q64 485 64 507Q64 528 84 535Q89 537 448 537H807Q808 536 811 534T817 530T823 525T827 518T829 507Q829 486 807 477L642 476H477V185H807Q808 184 811 182T817 178T823 173T827 166T829 155Q829 134 807 125L642 124H477V-39Q477 -203 475 -208Q466 -227 446 -227Q427 -227 417 -205L416 -41V124H251L87 125Q64 133 64 155\",8725:\"451 730Q460 750 479 750Q492 750 501 740T510 718Q508 708 318 244L122 -232Q112 -250 95 -250Q82 -250 73 -241T64 -218Q66 -205 258 261T451 730\",8726:\"64 718Q63 731 72 740T94 750Q106 750 113 743Q118 741 122 732L318 256Q508 -208 510 -218Q511 -231 502 -240T480 -250Q460 -250 451 -230Q451 -229 259 238T64 718\",8727:\"236 431Q237 447 251 459T287 472T323 459T338 431Q338 423 328 363L317 300Q318 300 340 317T392 356T435 387Q442 390 450 390Q470 390 485 374T501 335Q501 326 500 320T494 309T486 300T473 293T458 287T438 280T414 272L353 250L414 228Q422 225 436 221T457 214T472 208T485 201T493 192T499 181T501 166Q501 141 484 126T450 111Q447 111 445 111T441 111T437 112T433 114T428 117T422 121T414 127T404 135T391 145T374 158L317 200L328 137Q338 77 338 69Q336 52 321 40T287 28T253 40T236 69Q236 77 246 137L257 200Q256 200 234 183T182 144T139 113Q132 110 124 110Q104 110 89 126T73 165Q73 174 74 180T80 191T88 200T101 207T116 213T136 220T160 228L221 250L160 272Q152 275 138 279T117 286T102 292T89 299T81 308T75 319T73 334Q73 359 90 374T124 389Q127 389 129 389T133 389T137 388T141 386T146 383T152 379T160 373T170 365T183 355T200 342L257 300L246 363Q236 423 236 431\",8728:\"64 251Q64 303 80 344T121 409T175 448T230 469T275 474Q277 474 283 474T292 473Q385 473 447 415T510 251Q510 149 449 89T287 28T126 88T64 251ZM448 251Q448 325 405 369T286 413Q215 413 171 371T126 251Q126 177 168 133T287 89Q361 89 404 132T448 251\",8729:\"64 251Q64 303 80 344T121 409T175 448T230 469T275 474Q277 474 283 474T292 473Q385 473 447 415T510 251Q510 149 449 89T287 28T126 88T64 251\",8730:\"107 178Q100 178 89 188T78 207Q78 216 84 220Q85 221 124 248T207 304T260 338Q269 340 275 335Q276 334 370 156L463 -20L698 393Q928 800 935 811Q944 820 954 820Q972 820 980 811T988 789Q988 781 858 553Q776 409 718 306Q452 -166 447 -171Q439 -179 422 -180Q405 -180 400 -175Q399 -174 346 -73T241 128T187 229L151 205Q111 178 107 178\",8733:\"65 222Q65 282 88 329T144 401T208 438T261 451H273Q312 451 320 450Q456 431 526 330L537 316Q638 451 778 451Q813 451 830 445V388Q821 391 799 391Q758 391 721 377T660 342T618 301T592 266L584 251Q648 152 697 114Q748 74 804 74H806Q823 74 829 77Q830 77 830 38V-1L820 -3Q801 -7 786 -7H771Q699 -7 632 25T527 114L516 128Q414 -8 276 -8Q192 -8 129 56T65 222ZM256 53Q296 53 332 67T392 102T434 143T461 178L469 193Q405 292 356 330Q308 369 251 369H243Q196 369 156 328T116 221Q116 191 124 161T158 99T225 55Q234 53 256 53\",8734:\"65 219Q65 318 132 385T302 452Q473 452 573 331L589 312L596 320Q710 452 857 452Q948 452 1016 386T1084 225Q1084 125 1017 59T848 -8Q679 -8 576 113L560 132L553 124Q439 -8 292 -8Q200 -8 133 58T65 219ZM1033 224Q1033 291 987 340T875 389Q748 389 648 261Q641 253 642 251Q717 163 748 137Q813 81 880 81Q941 81 987 120T1033 224ZM275 56Q315 56 353 70T418 104T466 144T497 178L507 192Q507 193 474 230T441 269Q355 362 267 362Q210 362 163 324T116 221Q116 150 162 103T275 56\",8736:\"71 0L68 2Q65 3 63 5T58 11T55 20Q55 21 56 23V25Q55 27 55 30Q55 31 56 33V35Q55 37 55 40Q55 42 57 48Q67 63 346 381Q421 467 518 578Q607 680 623 697T647 714Q656 714 661 708T666 694V692Q676 687 676 674Q676 668 673 663Q672 662 637 622T534 503T400 350L147 61L386 60H653Q666 50 666 40V38Q676 31 676 20Q676 8 661 0H71\",8739:\"160 -249Q138 -249 129 -225V250Q129 725 131 729Q139 750 159 750T190 725V-225Q181 -249 160 -249\",8741:\"205 -225Q201 -234 199 -237T191 -244T175 -248T161 -246Q151 -240 146 -229Q145 -224 145 251Q145 725 146 730Q156 750 176 750Q193 748 205 727V-225ZM369 727L372 732Q375 737 377 740T385 747T398 750Q406 750 413 747Q423 740 428 730Q430 720 430 251Q430 -219 428 -229Q423 -240 413 -246Q408 -248 400 -248Q393 -248 388 -247T379 -242T375 -236T371 -230L369 -225V727\",8743:\"95 -16Q78 -16 71 -6T64 14Q64 20 65 22L212 308Q359 593 361 595Q370 604 385 604Q398 602 405 595Q407 593 554 308L701 22Q702 20 702 15Q702 1 693 -8T671 -17Q661 -17 651 -9Q647 -5 515 251L383 506L251 251Q119 -5 116 -8Q108 -16 95 -16\",8744:\"64 572Q64 585 72 594T94 604T116 595Q119 592 251 336L383 81L515 336Q647 592 651 596Q661 604 671 604Q684 604 693 595T702 572Q702 567 701 565L554 279Q407 -6 405 -8Q404 -9 401 -11T397 -14Q392 -16 383 -16H380Q369 -16 361 -8Q359 -6 212 279L65 565Q65 566 65 568T64 572\",8745:\"94 -16Q73 -16 64 8V209Q64 239 64 287Q65 418 69 432Q70 434 70 435Q84 487 125 523T216 575T299 597T354 603H372Q444 603 501 590T591 558T648 515T681 471T696 435Q696 434 697 432Q701 417 702 309Q702 303 702 287Q702 239 702 209V8Q693 -16 672 -16Q650 -16 643 3Q641 8 641 201Q641 397 640 403Q631 472 558 507T383 542Q339 542 298 535T219 511T156 468T126 403Q125 397 125 201Q125 8 123 3Q116 -16 94 -16\",8746:\"672 603Q693 603 702 579V378Q702 348 702 300Q701 169 697 155Q696 153 696 152Q676 78 593 31T383 -16Q265 -16 179 28T70 152Q70 153 69 155Q65 170 64 278Q64 285 64 300Q64 348 64 378Q64 579 65 583Q74 604 94 604T123 584Q125 579 125 386Q125 190 126 184Q135 115 210 80T383 44Q426 44 467 51T546 75T609 119T640 184Q641 190 641 386Q641 579 643 584Q650 603 672 603\",8747:\"204 -71Q204 -108 181 -124T137 -141Q132 -141 132 -142Q142 -161 154 -161Q164 -161 186 -152Q200 -145 210 -135T228 -107T241 -77T249 -38T254 -2T258 38T262 74Q282 265 334 489Q334 490 337 503T341 523T347 544T355 569T365 594T379 620T397 643T420 666T447 685T481 700Q511 711 539 711T587 696T616 656T628 612T632 573Q632 536 610 519T562 501Q534 501 513 519T492 571Q492 608 515 624T559 641Q564 641 564 642Q554 661 542 661Q532 661 510 652Q496 645 486 635T468 607T455 577T447 538T442 502T438 462T434 426Q414 235 362 11Q352 -35 347 -54T328 -101T291 -152Q235 -208 162 -211Q147 -211 136 -208T109 -196T83 -165T67 -108Q64 -94 64 -73Q64 -37 86 -19T134 -1Q162 -1 183 -19T204 -71\",8764:\"64 155Q64 210 84 262T150 353T257 391Q300 391 341 371T417 321T484 264T557 215T637 194Q702 194 745 244T788 367Q796 391 808 391Q815 391 821 381T828 353V342Q828 252 776 181T637 109Q594 109 552 129T476 179T409 236T336 285T256 306Q193 306 149 258T105 132Q98 109 86 109Q76 109 70 122T64 155\",8768:\"64 561Q64 570 76 576T108 583Q174 583 214 535T254 407Q254 368 238 324T202 248T166 173T149 92Q149 43 169 2T217 -39Q231 -40 242 -46T254 -60Q254 -69 241 -75T210 -82Q145 -82 105 -34T64 93Q64 133 80 177T116 253T152 328T169 408Q169 461 148 500T105 540Q92 540 78 545T64 561\",8771:\"64 295Q64 378 117 440T257 502Q298 502 339 485T416 443T486 394T560 352T637 335Q693 335 740 373T788 478Q796 502 808 502Q815 502 821 492T828 465V455Q828 365 771 308T640 250Q603 250 562 265T501 294T439 336L370 382Q308 417 256 417Q205 417 164 388T110 317Q110 316 109 304T107 286T103 270T97 255T86 250Q76 250 70 263T64 295ZM64 6T64 27T87 56H93Q99 56 110 56T137 56T173 56T217 56T267 57T323 57T383 57T448 57H807Q808 56 811 54T815 52T819 49T823 45T826 40T828 34T829 27Q829 7 807 -3H87Q64 6 64 27\",8773:\"64 402Q64 457 84 509T150 600T257 638Q300 638 341 618T417 569T484 511T557 462T637 441Q702 441 745 491T788 614Q796 638 808 638Q815 638 821 628T828 600V589Q828 499 776 428T637 356Q594 356 552 376T476 425T409 483T336 532T256 553Q193 553 149 505T105 379Q98 356 86 356Q76 356 70 369T64 402ZM87 197Q64 207 64 226Q64 247 84 255Q89 257 448 257H807Q808 256 811 254T817 250T823 245T827 238T829 227Q829 209 807 197H87ZM87 -27Q64 -18 64 3Q64 23 86 32Q89 33 448 33H807L812 30Q816 27 818 26T823 21T827 13T829 3Q829 -18 807 -27H87\",8776:\"64 345Q64 423 119 473T250 524Q301 524 356 503T451 455T542 407T636 385Q700 385 743 417T786 481Q786 493 791 508T807 524Q817 524 823 512T829 479Q829 404 776 352T638 300Q590 300 537 321T443 369T352 417T256 439Q207 439 166 417T110 359Q109 357 107 341T100 312T85 300Q77 300 71 313T64 345ZM64 77Q64 155 119 205T250 256Q302 256 357 235T451 187T541 139T636 117Q699 117 742 148T786 213Q786 231 792 243T808 256T823 242T829 208Q829 134 776 83T640 32Q591 32 537 53T443 101T352 149T256 171Q206 171 165 148T110 91Q109 89 107 73T100 44T85 32Q77 32 71 45T64 77\",8781:\"798 533Q812 533 820 524T829 502T819 480T769 440Q655 355 537 330Q492 322 447 322Q401 322 356 330Q289 344 219 381T118 443T73 481Q64 490 64 503Q64 517 72 525T94 533Q99 533 102 532Q107 531 138 507T209 456T314 405T446 382Q604 382 765 515Q788 533 798 533ZM95 -32Q81 -32 73 -23T64 -1Q64 10 74 21T124 61Q213 127 293 153T421 179L422 180Q424 180 426 180T432 180T441 180T452 179Q612 179 769 61Q811 29 820 19T829 -1Q829 -14 821 -23T798 -32Q788 -32 765 -14Q608 118 446 118Q287 118 128 -14Q105 -32 95 -32\",8784:\"87 333Q64 343 64 362Q64 383 84 391Q89 393 448 393H807Q808 392 811 390T817 386T823 381T827 374T829 363Q829 345 807 333H87ZM87 109Q64 118 64 139Q64 159 86 168Q89 169 448 169H807L812 166Q816 163 818 162T823 157T827 149T829 139Q829 118 807 109H87ZM362 635Q362 671 387 696T444 721Q488 721 510 693T533 635Q533 606 512 579T448 551Q406 551 384 577T362 635\",8800:\"189 -210Q179 -210 170 -203T160 -179Q160 -171 162 -166Q165 -163 327 109H87Q64 118 64 139Q64 159 86 168Q89 169 363 169L461 333H87Q64 343 64 362Q64 383 84 391Q89 393 448 393H496Q533 455 583 539T656 660T679 698Q686 711 704 711Q714 711 723 704T733 681Q733 672 730 667Q729 664 709 631T645 523T567 393H807Q808 392 811 390T817 386T823 381T827 374T829 363Q829 345 807 333H532L433 169H807L812 166Q816 163 818 162T823 157T827 149T829 139Q829 118 807 109H398Q217 -195 211 -201Q202 -210 189 -210\",8801:\"87 445Q64 454 64 475Q64 497 84 503Q89 505 448 505H807Q808 504 812 502T818 497T823 492T827 484T829 474Q829 456 807 445H87ZM87 221Q64 230 64 251T84 279Q89 281 448 281H807Q808 280 811 278T817 274T823 269T827 262T829 251Q829 230 807 221H87ZM64 6T64 27T87 56H93Q99 56 110 56T137 56T173 56T217 56T267 57T323 57T383 57T448 57H807Q808 56 811 54T815 52T819 49T823 45T826 40T828 34T829 27Q829 7 807 -3H87Q64 6 64 27\",8804:\"797 55Q797 45 790 35T767 25H759L434 180Q108 336 105 339Q96 348 96 360Q96 378 114 388Q126 394 439 544T757 695Q763 697 766 697Q780 697 788 688T797 666Q797 654 788 645Q784 641 507 509T197 361L466 232Q785 80 790 74Q797 66 797 55ZM119 -199Q96 -191 96 -169Q96 -160 102 -152T119 -140H124Q130 -140 140 -140T164 -140T197 -140T237 -140T283 -139T334 -139T389 -139T448 -139H775Q797 -153 797 -169Q797 -187 775 -199H119\",8805:\"127 25Q110 25 103 34T96 54Q96 66 105 75Q109 80 439 238L696 361Q113 637 105 645Q96 654 96 667Q96 679 104 688T128 697Q137 696 460 541T788 382Q797 373 797 360Q797 348 788 339Q785 336 459 180L135 25H127ZM119 -199Q96 -191 96 -169Q96 -160 102 -152T119 -140H124Q130 -140 140 -140T164 -140T197 -140T237 -140T283 -139T334 -139T389 -139T448 -139H775Q797 -153 797 -169Q797 -187 775 -199H119\",8810:\"734 -74T734 -86T727 -107T704 -116H702Q694 -116 584 -55Q473 7 380 58Q87 219 73 229Q64 238 64 250Q64 263 73 272Q87 282 380 443Q695 616 699 617H700Q718 617 726 607T734 588Q734 568 717 560Q705 554 435 404L157 250L439 94Q721 -61 726 -66Q734 -74 734 -86ZM1085 -74T1085 -86T1078 -107T1055 -116H1053Q1045 -116 935 -55Q824 7 731 58Q438 219 424 229Q415 238 415 250Q415 263 424 272Q438 282 731 443Q1046 616 1050 617H1051Q1069 617 1077 607T1085 588Q1085 568 1068 560Q1056 554 786 404L508 250L790 94Q1072 -61 1077 -66Q1085 -74 1085 -86\",8811:\"64 588Q64 600 72 609T94 618H95Q103 618 209 559Q322 496 419 443Q712 282 725 272Q734 263 734 250Q734 238 725 229Q714 220 415 55T110 -113Q103 -116 95 -116Q78 -116 71 -106T64 -86Q64 -74 72 -66Q77 -61 359 94L641 250L363 404Q277 452 173 509Q95 552 82 560T66 576V577Q64 585 64 588ZM415 588Q415 600 423 609T445 618H446Q454 618 560 559Q673 496 770 443Q1063 282 1076 272Q1085 263 1085 250Q1085 238 1076 229Q1065 220 766 55T461 -113Q454 -116 446 -116Q429 -116 422 -106T415 -86Q415 -74 423 -66Q428 -61 710 94L992 250L714 404Q628 452 524 509Q446 552 433 560T417 576V577Q415 585 415 588\",8826:\"797 -57Q797 -65 790 -75T766 -86Q748 -86 741 -74T733 -43T719 8T681 72Q647 112 588 141T475 185T343 207T230 216T136 219Q96 219 96 250Q96 280 132 280H136Q193 281 239 283T347 292T457 310T556 342T643 391T703 460T735 553Q741 585 763 585Q781 585 789 575T797 556Q797 540 792 513T758 434T682 345Q605 285 481 254L462 249Q483 246 526 233T633 185T733 104Q767 63 782 15T797 -57\",8827:\"96 556Q96 568 104 577T126 586Q152 586 158 553Q164 503 188 462T247 394T331 345T429 313T539 294T649 284T758 280H760Q797 280 797 250Q797 219 760 219H758Q627 217 529 204T347 160T216 77T158 -54Q152 -86 126 -86Q110 -86 103 -76T96 -57Q96 -41 101 -14T135 65T211 154Q288 214 412 245L431 250Q410 252 367 265T259 314T160 395Q127 435 112 483T96 556\",8834:\"96 251Q96 389 191 482T417 586Q418 586 428 586T456 586T496 586T546 587T601 587H775Q776 586 779 584T785 580T791 575T795 568T797 557Q797 536 775 527L597 526Q411 525 395 522Q390 521 370 516Q285 494 222 424T158 251Q158 131 246 53Q313 -9 408 -23Q417 -24 597 -25H775Q776 -26 781 -29T788 -34T794 -43T797 -56Q797 -74 775 -85H493Q407 -85 376 -79Q257 -55 177 35T96 251\",8835:\"96 -55Q96 -38 119 -25H296Q482 -24 498 -21Q503 -20 523 -15Q609 7 672 77T735 251T665 431T485 524Q476 525 296 526L119 527Q96 535 96 557Q96 578 116 585Q121 587 300 587Q451 586 476 585T522 579Q632 556 714 468T796 251Q796 112 695 13Q612 -65 497 -82Q473 -86 289 -86L119 -85Q96 -77 96 -55\",8838:\"96 361Q96 499 191 592T417 696Q418 696 428 696T456 696T496 696T546 697T601 697H775Q776 696 779 694T785 690T791 685T795 678T797 667Q797 646 775 637L597 636Q411 635 395 632Q390 631 370 626Q285 604 222 534T158 361Q158 241 246 163Q313 101 408 87Q417 86 597 85H775Q776 84 781 81T788 76T794 67T797 54Q797 36 775 25H493Q407 25 376 31Q257 55 177 145T96 361ZM149 -199Q127 -191 127 -169T149 -140H154Q160 -140 169 -140T192 -140T224 -140T262 -140T306 -139T354 -139T407 -139T463 -139H775Q776 -140 779 -142T785 -146T791 -151T795 -158T797 -169Q797 -190 775 -199H149\",8839:\"96 55Q96 72 119 85H296Q482 86 498 89Q503 90 523 95Q609 117 672 187T735 361T665 541T485 634Q476 635 296 636L119 637Q96 645 96 667Q96 688 116 695Q121 697 300 697Q451 696 476 695T522 689Q632 666 714 578T796 361Q796 222 695 123Q612 45 497 28Q473 24 289 24L119 25Q96 33 96 55ZM119 -199Q96 -190 96 -169T116 -141Q121 -139 433 -139H745Q766 -152 766 -170Q766 -190 745 -199H119\",8846:\"672 603Q693 603 702 579V378Q702 348 702 300Q701 169 697 155Q696 153 696 152Q676 78 593 31T383 -16Q265 -16 179 28T70 152Q70 153 69 155Q65 170 64 278Q64 285 64 300Q64 348 64 378Q64 579 65 583Q74 604 94 604T123 584Q125 579 125 386Q125 190 126 184Q135 115 210 80T383 44Q426 44 467 51T546 75T609 119T640 184Q641 190 641 386Q641 579 643 584Q650 603 672 603ZM353 412Q353 420 353 435T352 456Q352 483 358 495T385 507Q403 506 409 494T415 457Q415 451 415 436T414 411V341H558Q579 329 579 311Q579 289 558 281L486 280H414V136Q400 114 384 114Q363 114 354 136L353 208V280H281L209 281Q187 289 187 310Q187 328 209 341H353V412\",8849:\"127 25Q111 29 104 49V362L105 675Q114 693 127 696H132Q138 696 149 696T174 696T208 696T249 696T297 697T350 697T407 697T468 697H806Q828 683 828 666Q828 646 806 637L485 636H165V85H805Q806 84 809 82T813 80T817 77T821 73T824 68T826 62T827 55Q827 34 806 25H127ZM96 -190T96 -169T119 -140H125Q131 -140 141 -140T167 -140T201 -140T242 -140T290 -139T344 -139T402 -139T463 -139H805Q806 -140 809 -142T813 -144T817 -147T821 -151T824 -156T826 -162T827 -169Q827 -190 806 -199H119Q96 -190 96 -169\",8850:\"66 55Q66 74 89 85H728V636H408L88 637Q66 645 66 667T88 696H94Q99 696 110 696T135 696T169 696T210 696T258 697T311 697T368 697T429 697H767Q786 684 789 672V49Q782 31 767 25H88Q66 32 66 55ZM88 -199Q66 -191 66 -169Q66 -148 87 -140Q91 -139 433 -139H775Q776 -140 779 -142T783 -144T787 -147T791 -151T794 -156T796 -162T797 -169Q797 -189 775 -199H88\",8851:\"131 25Q121 1 100 1Q81 1 71 23L70 301Q70 579 72 583Q77 598 90 602Q95 604 385 604H674Q693 591 696 579V25Q686 1 665 1Q646 1 636 23L635 283V543H131V25\",8852:\"696 25Q689 7 674 1H93Q77 7 71 23L70 301Q70 579 72 583Q80 604 100 604T131 579V61H635V579Q644 603 666 603Q687 603 696 579V25\",8853:\"64 250Q64 350 98 426T189 546T307 610T434 632Q485 632 496 631Q572 621 635 592Q669 575 699 550T760 484T809 384T828 250Q828 77 725 -27T446 -132Q272 -132 168 -27T64 250ZM416 282V570H414Q341 564 285 535T202 475T156 397T134 332T128 287Q127 283 127 282H416ZM765 288Q760 344 743 389T700 462T647 512T589 543T538 560T499 568L483 570H478V282H766L765 288ZM416 -69V220H127Q130 195 131 189T138 155T150 115T168 76T196 35T234 0T286 -35Q337 -61 410 -69H416ZM483 -69Q554 -60 607 -33T687 21T733 93T756 156T764 209Q766 217 766 220H478V-69H483\",8854:\"64 250Q64 350 98 426T189 546T307 610T434 632Q485 632 496 631Q572 621 635 592Q669 575 699 550T760 484T809 384T828 250Q828 77 725 -27T446 -132Q272 -132 168 -27T64 250ZM765 288Q753 424 666 497T446 571T227 498T128 288L127 282H766L765 288ZM446 -70Q578 -70 666 4T765 213L766 220H127Q130 195 131 189T138 155T150 115T168 76T196 35T234 0T286 -35Q353 -70 446 -70\",8855:\"64 250Q64 350 98 426T189 546T307 610T434 632Q485 632 496 631Q572 621 635 592Q669 575 699 550T760 484T809 384T828 250Q828 77 725 -27T446 -132Q272 -132 168 -27T64 250ZM647 512Q567 571 447 571Q340 571 262 523Q237 507 237 505L342 399L447 295L657 505L647 512ZM298 356L192 461Q180 445 161 411Q126 341 126 251Q126 128 192 40L403 250L298 356ZM701 41Q704 41 719 63T750 138T767 250Q767 310 750 362T719 437T701 460L491 250L701 41ZM238 -5Q238 -8 261 -22T336 -53T447 -70Q567 -70 647 -11L657 -4L447 206L342 101Q238 -1 238 -5\",8856:\"64 250Q64 350 98 426T189 546T307 610T434 632Q485 632 496 631Q572 621 635 592Q669 575 699 550T760 484T809 384T828 250Q828 77 725 -27T446 -132Q272 -132 168 -27T64 250ZM657 505Q656 506 650 510T638 518T623 527T604 537T581 547T553 556T522 563T486 569T446 571Q305 571 216 487T126 251Q126 128 192 40L657 505ZM447 -70Q591 -70 679 16T767 250Q767 308 751 360T719 436T701 460L469 228Q238 -1 238 -5Q238 -8 261 -22T336 -53T447 -70\",8857:\"64 250Q64 350 98 426T189 546T307 610T434 632Q485 632 496 631Q572 621 635 592Q669 575 699 550T760 484T809 384T828 250Q828 77 725 -27T446 -132Q272 -132 168 -27T64 250ZM767 252Q767 395 681 483T446 571Q303 571 215 486T126 249Q126 107 212 19T446 -70Q596 -70 681 18T767 252ZM335 251Q335 297 368 329T441 361Q498 361 527 327T557 250Q557 202 525 171T446 140Q397 140 366 173T335 251\",8866:\"65 672Q76 693 91 693Q115 693 123 674Q125 669 125 523V378H615Q618 376 622 373T628 369T632 366T635 362T636 356T637 347Q637 328 619 319Q615 317 370 317H125V171Q125 25 123 20Q114 1 94 1Q73 1 65 23V672\",8867:\"64 327T64 347T89 378H577V525L578 672Q592 693 604 693Q629 693 638 669V25Q628 1 607 1Q588 1 578 23L577 170V317H88Q64 327 64 347\",8868:\"64 664Q64 675 71 683T87 693H93Q99 693 110 693T137 693T173 693T217 694T267 694T323 694T383 694T448 694H807Q808 693 811 691T817 687T823 682T827 675T829 664Q829 643 807 634L642 633H477V25Q467 1 446 1Q427 1 417 23L416 328V633H251L87 634Q64 643 64 664\",8869:\"65 31Q65 38 66 41T71 50T87 61H416V366L417 672Q431 693 443 693Q468 693 477 669V61H807Q808 60 811 58T817 54T823 49T827 42T829 31Q829 10 807 1H87Q65 10 65 31\",8872:\"160 -249Q138 -249 129 -225V250Q129 725 131 729Q139 750 159 750T190 725V392Q219 393 537 393H896Q897 392 900 390T906 386T912 381T916 374T918 363Q918 345 896 333H190V169H896L900 166Q905 163 907 162T912 157T916 149T918 139Q918 118 896 109H190V-225Q181 -249 160 -249\",8900:\"280 522Q281 523 285 523H289Q301 523 366 457Q404 420 431 393Q533 291 546 277T560 250Q560 239 548 226T431 108Q313 -10 304 -16Q297 -21 287 -21Q278 -21 275 -19Q270 -17 146 107T18 238Q15 242 15 251Q15 258 18 263Q20 268 145 392T274 519L280 522ZM388 350L288 449L188 350L89 250L288 52L487 250L388 350\",8901:\"74 251Q74 286 99 311T156 336Q200 336 222 308T245 250Q245 221 224 194T160 166T96 193T74 251\",8902:\"270 491Q274 502 287 502Q298 502 304 491Q304 486 323 396T342 303L438 314Q520 324 534 324Q540 324 545 320T550 307Q550 298 539 290T456 243Q377 198 377 197L416 111Q456 26 456 22Q457 21 457 18Q457 11 451 6T438 0H437Q432 0 415 16Q387 42 358 68L287 133L216 68Q193 47 167 23Q142 0 136 0Q129 0 123 5T117 18Q117 21 118 22Q118 26 158 111L197 197Q197 198 156 221T72 269T26 298Q24 304 24 307Q24 315 29 319T40 324Q53 324 136 314L232 303Q232 306 251 396T270 491\",8904:\"906 251Q906 456 905 456Q550 252 549 251Q549 250 726 148T905 45T906 251ZM967 -14Q958 -38 939 -38H937Q928 -38 923 -35Q919 -34 748 64T500 209L71 -38Q69 -39 63 -39Q42 -39 33 -16V518Q45 540 63 540H65Q72 540 174 481Q247 439 302 407L500 292Q578 339 750 438T929 539H933Q958 539 967 515V-14ZM449 251L94 456Q93 456 93 251Q93 45 94 45L106 52Q119 59 139 71T186 98T242 131T301 165T357 197T404 225T437 244L449 251\",8942:\"74 55Q74 91 99 116T156 141Q200 141 222 113T245 55Q245 26 224 -1T160 -29Q118 -29 96 -3T74 55ZM74 465Q74 501 99 526T156 551Q200 551 222 523T245 465Q245 436 224 409T160 381Q118 381 96 407T74 465ZM74 865Q74 901 99 926T156 951Q200 951 222 923T245 865Q245 836 224 809T160 781Q118 781 96 807T74 865\",8943:\"74 251Q74 286 99 311T156 336Q200 336 222 308T245 250Q245 221 224 194T160 166T96 193T74 251ZM562 251Q562 286 587 311T644 336Q688 336 710 308T733 250Q733 221 712 194T648 166T584 193T562 251ZM1050 251Q1050 286 1075 311T1132 336Q1176 336 1198 308T1221 250Q1221 221 1200 194T1136 166T1072 193T1050 251\",8945:\"129 785Q129 821 154 846T211 871Q255 871 277 843T300 785Q300 756 279 729T215 701Q173 701 151 727T129 785ZM576 485Q576 521 601 546T658 571Q702 571 724 543T747 485Q747 456 726 429T662 401Q620 401 598 427T576 485ZM1023 185Q1023 221 1048 246T1105 271Q1149 271 1171 243T1194 185Q1194 156 1173 129T1109 101Q1067 101 1045 127T1023 185\",8968:\"194 728Q199 743 216 749H220Q223 749 229 749T245 749T265 750T289 750T316 750T345 750H471Q472 749 477 746T484 741T490 732T493 719Q493 701 471 690L362 689H254V-224Q244 -248 223 -248T194 -226V728\",8969:\"317 -224Q307 -248 286 -248Q267 -248 257 -226L256 231V689H148L40 690Q17 698 17 720Q17 741 37 748Q42 750 169 750H295Q314 737 317 725V-224\",8970:\"194 728Q204 749 220 749Q245 749 254 725V-188H471Q472 -189 477 -192T484 -197T490 -206T493 -219Q493 -237 471 -248H216Q200 -242 194 -226V728\",8971:\"17 -219Q17 -201 40 -188H256V270L257 728Q271 749 283 749Q308 749 317 725V-224Q310 -242 295 -248H40L38 -247Q35 -246 34 -245T30 -243T25 -239T21 -234T18 -227T17 -219\",8994:\"95 108Q85 108 75 114T65 139Q65 159 129 227Q316 405 573 405Q654 405 729 387T854 344T950 286T1015 232T1053 191Q1078 160 1083 152Q1084 148 1084 139Q1084 121 1074 115T1054 108Q1040 108 1029 122T990 167T922 223Q819 291 680 309Q641 315 575 315Q508 315 469 309Q303 288 197 201Q168 179 148 155T118 119T95 108\",8995:\"1054 392Q1067 392 1076 384T1085 362Q1085 351 1079 342T1050 310Q983 243 901 200Q753 126 575 126Q494 126 420 141T298 176T205 225T140 272T100 310Q64 346 64 362Q64 370 67 374Q75 393 93 393Q107 393 124 375Q272 214 575 214Q877 214 1025 375Q1039 392 1054 392\",9001:\"127 243V259L223 491Q251 557 286 642Q318 719 324 732T340 748H341Q347 750 351 750Q365 750 373 740T382 723Q382 713 286 482L190 251Q190 249 286 20T382 -219Q382 -232 373 -240T352 -249Q332 -249 323 -229Q320 -220 223 10L127 243\",9002:\"64 720Q64 732 72 741T94 750Q106 750 113 743Q118 741 122 732L319 259V243L122 -231Q112 -249 95 -249Q83 -249 74 -240T64 -218Q64 -210 160 20L256 251L160 482Q64 715 64 720\",9651:\"91 1Q69 10 69 31Q69 39 81 59T168 197Q327 447 485 697Q493 711 510 711Q523 711 532 702Q536 697 743 371T951 41Q953 35 953 31Q953 12 931 1H91ZM690 340Q651 401 604 476T534 586L512 621Q511 622 507 616Q498 604 332 342L154 62L333 61H689L867 62L690 340\",9653:\"91 1Q69 10 69 31Q69 39 81 59T168 197Q327 447 485 697Q493 711 510 711Q523 711 532 702Q536 697 743 371T951 41Q953 35 953 31Q953 12 931 1H91ZM690 340Q651 401 604 476T534 586L512 621Q511 622 507 616Q498 604 332 342L154 62L333 61H689L867 62L690 340\",9657:\"33 518Q45 540 63 540H65Q72 540 174 481Q247 439 302 407Q529 276 533 272Q542 263 542 250Q542 238 533 229Q528 224 304 95T71 -38Q69 -39 63 -39Q42 -39 33 -16V518ZM449 251L94 456Q93 456 93 251Q93 45 94 45L106 52Q119 59 139 71T186 98T242 131T301 165T357 197T404 225T437 244L449 251\",9661:\"68 470Q68 481 75 489T91 499H93Q296 500 512 500H931Q932 499 937 496T945 490T950 482T953 469Q953 465 951 459Q950 455 743 129T532 -202Q524 -210 511 -210Q497 -210 489 -202Q486 -199 281 124T71 456Q68 462 68 470ZM154 439Q155 437 332 158T510 -122Q510 -123 533 -87T600 18T688 157Q866 437 866 438Q867 439 805 439T511 439H154\",9663:\"68 470Q68 481 75 489T91 499H93Q296 500 512 500H931Q932 499 937 496T945 490T950 482T953 469Q953 465 951 459Q950 455 743 129T532 -202Q524 -210 511 -210Q497 -210 489 -202Q486 -199 281 124T71 456Q68 462 68 470ZM154 439Q155 437 332 158T510 -122Q510 -123 533 -87T600 18T688 157Q866 437 866 438Q867 439 805 439T511 439H154\",9667:\"542 -14Q533 -38 514 -38H512Q503 -38 498 -35Q494 -34 270 95T42 229Q33 238 33 251Q33 259 35 264Q36 265 38 268T42 272Q48 278 271 407T504 539H508Q533 539 542 515V-14ZM481 251Q481 456 480 456Q125 252 124 251Q124 250 301 148T480 45T481 251\",9711:\"65 42T65 250T204 584T574 711Q795 711 935 594Q955 577 974 555T1022 490T1067 385T1084 250Q1084 42 945 -84T574 -211T204 -85ZM1024 250Q1024 431 903 540T578 650Q482 650 404 627T274 565T189 474T140 366T125 250Q125 123 186 31T347 -106T573 -150Q772 -150 898 -45T1024 250\",9824:\"675 -18Q536 -18 527 62V70H477V55Q479 14 487 -21T502 -75T509 -101Q509 -120 491 -127Q487 -129 447 -129Q446 -129 439 -129T427 -130Q384 -130 384 -101Q384 -95 391 -76T406 -21T416 55V70H366Q364 52 360 40T342 14T300 -8T230 -17H218Q110 -17 75 117Q64 163 64 209Q64 290 116 357T261 495Q363 574 414 690Q425 719 445 719Q467 719 478 693Q507 627 547 578T623 503T702 438T777 357Q829 285 829 202V197Q826 128 808 81T762 15T714 -11T675 -18\",9825:\"65 491Q65 602 121 656T246 710Q375 710 440 624L447 615Q519 711 638 711Q723 711 775 652T828 491Q828 390 770 313T581 129Q539 95 514 63T483 14T469 -13T446 -24Q434 -24 427 -17T416 0T400 32T371 74Q352 97 310 131T229 199T151 276T89 374T65 491ZM249 649Q188 649 157 603T125 489Q125 409 181 338T352 176Q408 131 437 87L446 73L456 87Q479 121 507 147T579 207T659 278Q768 387 768 489Q768 506 766 524T756 566T731 611T687 642Q668 649 638 649Q609 649 593 644Q547 633 516 604T478 534Q473 505 447 505H445Q420 505 416 534Q407 577 372 608T285 648Q277 649 249 649\",9826:\"409 686Q410 688 412 691T415 696T418 701T421 706T424 709T427 713T431 715T435 717T440 718T446 719Q455 719 460 717T472 704T488 679T516 633T563 567Q624 485 687 422T787 330T826 296T828 282Q828 270 825 265T801 245Q696 161 612 59T477 -133Q465 -154 447 -154Q439 -154 434 -152T425 -146T414 -130T399 -104T372 -62T330 -3Q270 78 207 142T107 234T70 265Q64 274 64 282Q64 296 90 317Q284 472 409 686ZM749 282Q745 286 721 307T681 343T635 388T581 446T525 516T465 601Q462 606 457 613T450 624L447 627V628Q446 628 436 611T402 561T348 489T266 396T155 292L145 282Q147 280 185 245T257 177T343 79T442 -57Q446 -64 447 -64V-63Q450 -59 475 -22T530 56T619 160T749 282\",9827:\"240 527Q240 611 301 665T446 719T590 665T652 527Q652 431 571 373Q578 363 584 352T593 335T597 329L604 335Q611 341 617 345T637 356T667 366Q672 366 680 367T694 368Q767 368 814 310T861 177Q861 109 819 57T713 -12Q690 -17 656 -17Q535 -13 527 62V70H477V55Q479 14 487 -21T502 -75T509 -101Q509 -120 491 -127Q487 -129 447 -129Q446 -129 439 -129T427 -130Q384 -130 384 -101Q384 -95 391 -76T406 -21T416 55V70H366V62Q356 -12 237 -17Q130 -17 71 60Q32 111 32 178Q32 251 78 309T198 368Q217 368 233 364T260 354T279 343T291 333T296 329L300 336Q304 343 310 354T322 373Q240 432 240 527\",9837:\"230 480Q293 480 337 440T381 330V322Q381 240 323 161Q258 71 123 -11L114 -16L97 -17Q70 -17 66 -7Q64 -3 64 366V641Q64 717 65 731T75 748Q78 750 95 750Q117 750 122 742T127 694Q127 685 127 653T126 595V454Q183 480 230 480ZM242 333Q242 405 212 405H207Q147 405 130 370L127 364L126 219Q126 77 128 77Q133 82 140 90T167 127T202 183T229 253T242 333\",9838:\"345 -223Q333 -223 330 -214T327 -178V-116Q327 -23 326 -23L203 -82Q90 -134 77 -140Q65 -142 59 -130Q57 -126 57 295V595Q57 643 57 667T58 704T60 719T63 724Q93 741 101 741Q113 741 116 732T119 680V597Q119 467 120 467Q121 468 180 495T301 552T369 584Q381 586 387 574Q389 570 389 187V-88Q389 -132 389 -154T388 -188T386 -202T383 -206Q353 -223 345 -223ZM327 271Q327 421 326 421L120 323L119 173V23Q120 23 223 72L327 121V271\",9839:\"140 628Q151 628 154 620T158 591V549V484L166 488Q175 492 192 500T223 516L288 548V622V674Q288 681 288 685T289 693T289 699T291 703T295 707T298 709T304 712T311 716Q326 724 332 724Q343 724 346 715T350 685V644V579Q358 583 364 583Q376 583 380 574Q382 570 382 514V481Q382 459 380 454T363 441L350 435V135Q358 139 364 139Q376 139 380 130Q382 126 382 70V37Q382 15 380 10T363 -3L350 -9V-76Q350 -102 348 -106T328 -119Q312 -128 306 -128Q288 -128 288 -99V-77V-40L280 -44Q271 -48 254 -56T223 -72L158 -104V-150V-180Q158 -198 155 -202T135 -216Q119 -224 114 -224Q96 -224 96 -192V-172V-135Q86 -140 81 -140Q70 -140 66 -129Q64 -126 64 -70V-54Q64 -18 66 -12T83 3L96 9V309Q86 304 81 304Q70 304 66 315Q64 318 64 374V407Q64 429 66 434T83 447L96 453V602Q99 609 100 610T118 619Q134 628 140 628ZM288 254Q288 404 287 404L158 340V40L166 44Q175 48 192 56T223 72L288 104V254\",10072:\"160 -249Q138 -249 129 -225V250Q129 725 131 729Q139 750 159 750T190 725V-225Q181 -249 160 -249\",10216:\"127 243V259L223 491Q251 557 286 642Q318 719 324 732T340 748H341Q347 750 351 750Q365 750 373 740T382 723Q382 713 286 482L190 251Q190 249 286 20T382 -219Q382 -232 373 -240T352 -249Q332 -249 323 -229Q320 -220 223 10L127 243\",10217:\"64 720Q64 732 72 741T94 750Q106 750 113 743Q118 741 122 732L319 259V243L122 -231Q112 -249 95 -249Q83 -249 74 -240T64 -218Q64 -210 160 20L256 251L160 482Q64 715 64 720\",10229:\"1063 221L649 220H235Q340 133 364 17Q368 1 368 -2Q368 -16 343 -17Q340 -17 338 -17H332Q317 -17 314 -14T305 6Q298 34 285 62T247 126T179 189T78 233Q64 237 64 251Q64 261 74 265T108 277T154 297Q212 328 251 379T305 495Q309 511 313 514T333 518H338Q363 517 367 510Q368 507 368 503Q368 500 364 484Q345 401 287 331Q254 295 235 282L649 281H1063L1065 280Q1079 281 1392 281H1719Q1720 280 1723 278T1729 274T1735 269T1739 262T1741 251Q1741 230 1719 221H1063\",10230:\"119 221Q96 230 96 251T116 279Q121 281 448 281H1188L1602 282Q1569 304 1530 357T1473 482Q1469 500 1469 501Q1469 512 1480 517Q1482 518 1500 518H1505Q1520 518 1523 515T1532 495Q1552 412 1611 351T1753 270Q1773 263 1773 251Q1773 240 1765 236T1732 225T1683 204Q1625 173 1586 122T1532 6Q1528 -10 1524 -13T1504 -17H1499Q1474 -16 1470 -9Q1469 -6 1469 -2Q1469 1 1473 17Q1501 138 1602 220H1188L775 221H119\",10231:\"1063 221L649 220H235Q340 133 364 17Q368 1 368 -2Q368 -16 343 -17Q340 -17 338 -17H332Q317 -17 314 -14T305 6Q298 34 285 62T247 126T179 189T78 233Q64 237 64 251Q64 261 74 265T108 277T154 297Q212 328 251 379T305 495Q309 511 313 514T333 518H338Q363 517 367 510Q368 507 368 503Q368 500 364 484Q345 401 287 331Q254 295 235 282L649 281H1476L1890 282Q1857 304 1818 357T1761 482Q1757 500 1757 501Q1757 512 1768 517Q1770 518 1788 518H1793Q1808 518 1811 515T1820 495Q1840 412 1899 351T2041 270Q2061 263 2061 251Q2061 240 2053 236T2020 225T1971 204Q1913 173 1874 122T1820 6Q1816 -10 1812 -13T1792 -17H1787Q1762 -16 1758 -9Q1757 -6 1757 -2Q1757 1 1761 17Q1789 138 1890 220H1476L1063 221\",10232:\"1063 333L700 332H338L324 321Q283 290 230 264L205 250Q266 224 323 180L338 170L700 169H1063L1064 168Q1080 169 1423 169H1782L1786 166Q1791 163 1793 162T1798 157T1802 149T1804 139Q1804 118 1782 109H1063L733 108H404L412 99Q455 50 488 -10Q498 -27 493 -37Q487 -46 465 -46H460Q446 -46 439 -39T426 -18T399 25T344 89Q239 194 99 229Q96 230 92 231T85 232T79 234T73 235T69 237T66 240T65 244T64 250Q64 267 90 271Q197 295 286 361T430 525Q439 542 442 544T460 547H465Q487 547 492 539Q496 531 496 530Q496 521 471 482T414 405L404 394L733 393H1063Q1064 392 1065 392Q1081 393 1423 393H1782Q1783 392 1786 390T1792 386T1798 381T1802 374T1804 363Q1804 345 1782 333H1063\",10233:\"87 109Q64 118 64 139Q64 159 86 168Q89 169 448 169H1169L1532 170L1546 180Q1562 193 1580 204T1612 223T1638 237T1657 246L1664 250L1639 264Q1586 290 1545 321L1531 332H1169L807 333H87Q64 343 64 362Q64 383 84 391Q89 393 448 393H1136L1465 394L1455 405Q1428 436 1401 477T1374 531Q1374 547 1399 547H1404H1409Q1423 547 1430 540T1443 519T1470 475T1526 411Q1634 303 1779 271Q1780 271 1783 270T1788 269T1792 268T1796 266T1799 264T1802 260T1803 256T1804 250Q1804 242 1800 238T1783 231T1755 225T1712 211T1654 185Q1517 112 1439 -24Q1430 -40 1426 -43T1409 -46H1404Q1373 -46 1373 -31Q1373 -24 1381 -10Q1414 50 1457 99L1465 108H1136L807 109H87\",10234:\"1063 333L700 332H338L324 321Q283 290 230 264L205 250Q266 224 323 180L338 170L700 169H1425L1788 170L1802 180Q1818 193 1836 204T1868 223T1894 237T1913 246L1920 250L1895 264Q1842 290 1801 321L1787 332H1425L1063 333ZM733 393H1392L1721 394L1711 405Q1684 436 1657 477T1630 531Q1630 547 1655 547H1660H1665Q1679 547 1686 540T1699 519T1726 475T1782 411Q1890 303 2035 271Q2036 271 2039 270T2044 269T2048 268T2052 266T2055 264T2058 260T2059 256T2060 250Q2060 242 2056 238T2039 231T2011 225T1968 211T1910 185Q1773 112 1695 -24Q1686 -40 1682 -43T1665 -46H1660Q1629 -46 1629 -31Q1629 -24 1637 -10Q1670 50 1713 99L1721 108H1392L1063 109L733 108H404L412 99Q455 50 488 -10Q498 -27 493 -37Q487 -46 465 -46H460Q446 -46 439 -39T426 -18T399 25T344 89Q239 194 99 229Q96 230 92 231T85 232T79 234T73 235T69 237T66 240T65 244T64 250Q64 267 90 271Q197 295 286 361T430 525Q439 542 442 544T460 547H465Q487 547 492 539Q496 531 496 530Q496 521 471 482T414 405L404 394L733 393\",10236:\"65 426Q74 448 95 448Q112 448 125 426V281H130L132 280H134Q162 281 448 281H1188L1602 282Q1569 304 1530 357T1473 482Q1469 500 1469 501Q1469 512 1480 517Q1482 518 1500 518H1505Q1520 518 1523 515T1532 495Q1552 412 1611 351T1753 270Q1773 263 1773 251Q1773 240 1765 236T1732 225T1683 204Q1625 173 1586 122T1532 6Q1528 -10 1524 -13T1504 -17H1499Q1474 -16 1470 -9Q1469 -6 1469 -2Q1469 1 1473 17Q1501 138 1602 220H1188L775 221H135Q133 220 130 220H125V76Q115 54 95 54Q73 54 65 76V426\",10744:\"189 -210Q179 -210 170 -203T160 -179Q160 -171 162 -166Q164 -163 420 266T679 698Q686 711 704 711Q714 711 723 704T733 681Q733 672 730 667Q723 654 469 228T211 -201Q202 -210 189 -210\",10799:\"168 500Q168 515 178 522T195 530H198Q207 530 218 521T282 458Q312 428 331 409L447 294L563 409Q674 520 682 525Q687 529 695 529Q711 529 718 520T726 499V498Q726 489 720 481T666 427Q631 392 606 367L490 251L606 135Q717 23 721 17T726 2Q726 -9 719 -18T695 -28H692Q685 -28 674 -18T608 47Q581 74 563 92L447 207L331 91Q217 -22 208 -27Q206 -28 203 -28H197Q168 -28 168 2Q168 13 178 24T288 135L404 250L288 366Q177 479 173 485T168 500\",10815:\"39 655Q39 675 43 680T69 686Q110 684 225 684Q267 684 303 684T360 685T385 686Q401 686 405 680T409 651Q409 632 403 628T367 624H348H301V62H598V624H551H532Q502 624 496 628T490 651Q490 673 494 679T514 686Q518 686 558 685T675 684T792 685T836 686Q852 686 856 680T860 651Q860 632 854 628T818 624H799H752V62H799H809Q846 62 853 59T860 36V31V21Q860 6 850 2Q846 0 450 0H156Q75 0 60 1T40 11V18Q39 26 39 31Q39 54 44 58T82 63Q84 63 90 63T100 62H147V624H100H90Q53 624 46 627T39 650V655\",10927:\"796 54Q796 40 788 32T767 24Q741 24 735 57Q729 107 705 148T646 216T563 264T465 297T356 316T245 326T136 330H134Q96 330 96 360Q96 391 134 391H136Q193 392 239 394T347 403T457 421T556 453T643 502T703 571T735 664Q741 696 763 696Q781 696 789 686T797 667Q797 651 792 624T758 545T682 456Q605 396 481 365L462 360Q483 357 526 344T633 296T733 215Q767 173 781 128T796 54ZM119 -199Q96 -190 96 -169T116 -141Q121 -139 448 -139H775Q776 -140 779 -142T785 -146T791 -151T795 -158T797 -169Q797 -190 775 -199H119\",10928:\"127 24Q115 24 106 32T97 55Q97 95 124 156T211 265Q288 325 412 356L431 361Q410 363 367 376T259 425T160 506Q127 546 112 594T96 667Q96 679 104 688T126 697Q152 697 158 664Q164 614 188 573T247 505T331 456T429 424T539 405T649 395T758 391Q797 391 797 360Q797 330 761 330H758Q701 329 655 327T547 318T437 300T337 268T251 219T190 150T158 57Q151 24 127 24ZM119 -199Q96 -190 96 -169T116 -141Q121 -139 448 -139H775Q776 -140 779 -142T785 -146T791 -151T795 -158T797 -169Q797 -190 775 -199H119\",12296:\"127 243V259L223 491Q251 557 286 642Q318 719 324 732T340 748H341Q347 750 351 750Q365 750 373 740T382 723Q382 713 286 482L190 251Q190 249 286 20T382 -219Q382 -232 373 -240T352 -249Q332 -249 323 -229Q320 -220 223 10L127 243\",12297:\"64 720Q64 732 72 741T94 750Q106 750 113 743Q118 741 122 732L319 259V243L122 -231Q112 -249 95 -249Q83 -249 74 -240T64 -218Q64 -210 160 20L256 251L160 482Q64 715 64 720\"},{8243:\"\\u2032\\u2032\",8244:\"\\u2032\\u2032\\u2032\",8279:\"\\u2032\\u2032\\u2032\\u2032\",8602:\"\\u2190\\u0338\",8603:\"\\u2192\\u0338\",8622:\"\\u2194\\u0338\",8653:\"\\u21d0\\u0338\",8654:\"\\u21d4\\u0338\",8655:\"\\u21d2\\u0338\",8708:\"\\u2203\\u0338\",8716:\"\\u220b\\u0338\",8740:\"\\u2223\\u0338\",8742:\"\\u2225\\u0338\",8769:\"\\u223c\\u0338\",8772:\"\\u2243\\u0338\",8775:\"\\u2245\\u0338\",8777:\"\\u2248\\u0338\",8802:\"\\u2261\\u0338\",8813:\"\\u224d\\u0338\",8814:\"<\\u0338\",8815:\">\\u0338\",8816:\"\\u2264\\u0338\",8817:\"\\u2265\\u0338\",8832:\"\\u227a\\u0338\",8833:\"\\u227b\\u0338\",8836:\"\\u2282\\u0338\",8837:\"\\u2283\\u0338\",8840:\"\\u2286\\u0338\",8841:\"\\u2287\\u0338\",8876:\"\\u22a2\\u0338\",8877:\"\\u22a8\\u0338\",8930:\"\\u2291\\u0338\",8931:\"\\u2292\\u0338\"})},59:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.doubleStruck=void 0;var H=L(5674);Object.defineProperty(T,\"doubleStruck\",{enumerable:!0,get:function(){return H.doubleStruck}})},3566:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.frakturBold=void 0;var H=L(9403),V=L(7002);T.frakturBold=(0,H.AddPaths)(V.frakturBold,{33:\"121 621Q121 657 132 673T177 689Q223 689 223 644V635Q223 604 222 595Q221 590 210 490T187 292T175 190V186L166 185L156 184Q156 185 139 393T121 621ZM107 47Q107 70 127 87T174 104Q201 104 221 89T241 48Q241 24 222 6T174 -12Q147 -12 127 6T107 47\",34:\"53 695Q74 695 90 679V622L65 433L52 432H39L27 516Q10 626 10 655Q10 680 26 688Q33 693 39 693Q49 695 53 695ZM151 668Q151 691 191 691Q217 691 224 685T231 661V652Q230 634 219 531L207 433L195 432Q183 432 183 433L168 541Q151 664 151 668\",38:\"290 -14Q186 -14 115 41T44 185Q44 222 54 249T88 300T131 336T189 371Q216 387 216 388Q185 459 185 510Q185 563 206 601T263 659T334 687T405 696Q476 696 503 668T531 603Q531 565 513 536T450 476Q423 459 370 432L334 413L354 384Q474 212 560 139L563 137Q611 185 611 250Q611 295 577 329Q549 356 496 357Q439 357 433 354Q432 354 432 379V403L437 402Q443 402 479 401T557 400Q653 400 735 403T831 407H836Q833 352 833 351L821 352Q809 352 792 352T756 352T720 353T696 354Q680 354 680 353L681 346Q682 339 683 327T685 306Q685 283 681 260T669 218T653 182T635 152T619 129T606 114L602 109Q604 107 618 99T659 81T707 71Q742 71 767 99T804 155L815 183Q815 184 821 183T833 180T839 177Q837 169 834 156T816 110T782 52T727 5T648 -16Q569 -16 499 35H498Q496 35 466 23T387 -1T290 -14ZM418 592Q418 617 398 639T352 661T302 642T278 574Q278 545 288 514T306 465T319 444Q342 456 353 463T382 488T409 529T418 584V592ZM159 239Q159 158 222 98T364 38Q386 38 447 57L469 63L434 98Q349 185 286 275Q258 316 238 345Q233 353 232 353Q159 316 159 239\",39:\"80 645T80 662T93 687T123 695Q158 695 158 659Q158 649 157 643L123 437Q123 436 114 436H104Q104 442 92 538Q80 645 80 662\",40:\"347 719Q325 708 311 698T272 656T233 580T207 455T195 267Q195 30 247 -79Q261 -110 291 -136Q320 -163 347 -172V-179Q347 -186 344 -186Q338 -186 328 -184T287 -165T230 -123Q134 -25 134 271Q134 417 158 514T226 662T335 734L346 737Q347 737 347 728V719\",41:\"264 262Q264 366 253 446T226 572T186 649T145 692T105 714V725Q105 735 107 735Q108 734 121 731T154 719T196 692T242 641T284 560T314 437T326 268Q326 112 299 7Q279 -78 239 -124T116 -185L105 -187V-179L106 -171L109 -169Q130 -161 138 -158T165 -146T190 -127T210 -101T229 -64T243 -12T255 58T261 148T264 262\",42:\"40 516L62 529Q85 542 110 556T140 574L126 582Q112 591 104 595T80 607T40 629Q53 642 57 645L65 652L78 642Q106 620 132 603L152 589V595Q152 630 149 681V692H179V689Q178 681 174 638T171 593Q173 593 240 639L258 652Q260 652 267 643L276 633L260 625Q190 587 175 576Q173 575 180 570Q183 569 186 567Q213 549 256 527L277 515L256 495Q246 501 228 515T194 539T170 554V543Q170 486 178 449H148V456Q152 492 152 550L151 562Q150 562 102 528L53 495Q40 514 40 516\",43:\"422 584L471 598Q472 598 472 440V282H837Q833 273 829 263L821 244L647 243H472V-63L448 -73L423 -82Q422 -82 422 81V243H239Q56 243 56 244Q60 253 65 263L73 282H422V584\",44:\"118 61Q118 80 135 93T169 107Q190 107 221 65T253 -23Q253 -39 251 -49T237 -80T198 -133Q148 -191 144 -191Q142 -191 137 -182T132 -172Q143 -161 160 -131T183 -83Q185 -77 185 -62Q185 -54 184 -48T182 -38T177 -28T171 -19T162 -8T150 6Q130 28 124 38T118 61\",45:\"54 236L73 275H453Q833 275 833 274Q830 265 825 255L818 236H54\",46:\"103 23T103 44T120 83T170 102Q200 102 218 84T237 44Q237 20 216 3T168 -15Q138 -15 121 4\",47:\"272 270Q503 721 506 721L509 720Q512 720 518 719T529 717L550 713L91 -181L66 -182Q41 -182 41 -181L272 270\",48:\"238 -12Q162 -12 102 42T42 185Q42 303 130 393Q163 425 208 452T284 490L313 501Q323 499 339 495T395 472T464 426Q533 357 533 273Q533 201 483 133T364 27T238 -12ZM428 208Q428 255 402 297T342 365T280 404T241 419Q214 419 178 374T142 259Q142 206 168 164T225 99Q259 74 310 74Q326 74 337 75T366 82T396 103T417 141Q428 171 428 208\",49:\"95 481Q102 481 217 485T383 489Q384 489 384 485Q367 397 367 165Q367 58 369 54Q374 46 380 44T410 42H466H546V40Q547 38 547 19L548 0H54V23Q54 29 54 34T54 44L55 47Q79 47 134 46T202 45Q226 45 234 52Q240 57 241 64T245 105Q254 236 254 320V347Q254 369 252 382T240 409T211 431L97 450L96 465Q95 480 95 481\",50:\"307 335Q307 374 283 397T224 421Q187 421 112 387Q105 384 100 382T95 381Q90 387 86 394L77 407L86 413Q219 491 298 491Q370 491 399 460T428 388Q428 373 424 358T409 326T391 297T363 264T335 235T301 202T269 171L199 104Q194 99 205 97Q209 96 214 96Q527 105 544 105Q553 107 563 102Q563 100 557 79T545 34T537 2H377Q338 2 247 2T130 4H44V26L104 77Q185 145 212 172T267 235Q307 291 307 335\",51:\"102 402L108 408Q115 413 122 418T141 431T165 447T194 461T227 474T263 483T302 487H307Q413 487 452 420Q465 400 465 371Q465 334 445 303T396 253T347 225T317 213Q314 213 314 211Q316 209 316 205Q317 201 320 201Q337 201 359 198T411 184T465 156T506 109T523 39Q523 -62 436 -127T229 -193Q179 -193 130 -178T56 -150T31 -133Q31 -132 41 -122L52 -112L63 -117Q128 -148 201 -148Q282 -148 331 -104T381 20Q381 71 363 100T304 145Q243 166 149 166H137V204H146Q179 204 211 210T275 229T326 268T346 329Q346 372 314 401Q292 423 245 423Q188 423 125 383L102 402\",52:\"346 -196Q344 -196 335 -187L336 -148Q337 -127 337 -55V0H13V29L187 253Q362 477 362 479L368 480Q375 481 387 483T411 487T434 491T452 494L459 495Q460 495 470 482V453Q470 389 466 230T461 62Q461 61 513 61T565 60L555 29L546 -1H461V-15Q461 -48 463 -100T465 -154L457 -157Q449 -160 434 -165T405 -175Q347 -196 346 -196ZM339 265V341Q339 362 335 362Q327 362 219 217T110 65V61H337V117Q338 133 338 187T339 265\",53:\"232 192Q176 192 122 152L95 162V481H306Q516 481 516 479Q514 477 501 433L486 389L319 388H152V386V382Q152 379 152 374T151 365Q147 329 146 260V218H149Q211 242 284 242Q353 242 402 224T474 176T508 117T518 55Q518 -62 432 -126T220 -190Q184 -190 151 -185T96 -172T57 -157T31 -145T20 -139T19 -138Q19 -136 27 -125L35 -112L51 -120Q114 -152 174 -152Q257 -152 314 -100T371 46Q371 107 340 149T232 192\",54:\"48 251Q48 330 76 403T150 529T253 623T370 683T485 704Q494 704 520 701T547 695Q547 692 542 659T536 625Q531 624 524 624L512 623L502 628Q489 635 468 640Q452 645 423 645Q403 645 379 640T320 617T255 568T201 481T171 348Q170 341 170 330V325L183 333Q275 385 357 385H361Q464 385 514 312Q546 267 546 217Q546 127 457 58T262 -12Q225 -12 189 3T120 49T68 132T48 251ZM448 165Q448 228 406 274T289 320Q264 320 236 312T190 295T173 284Q173 266 176 241T189 178T214 112T259 61T326 39Q372 39 410 75T448 165\",55:\"57 376L87 479H591V455L584 446Q544 399 491 328T349 117T185 -169L171 -196H159Q152 -197 102 -197Q58 -197 58 -196T56 -185L54 -175L299 158L443 359Q446 367 444 370H254L71 365L57 376\",56:\"88 533Q88 573 120 610T194 668T268 701T307 714Q324 714 352 711T422 695T486 659Q518 625 518 585Q518 536 479 489T384 406L371 398L385 390Q387 389 400 382T420 370T442 356T466 339T489 319T510 295T526 269T538 238T542 204Q542 125 463 60T256 -5Q145 -5 92 52Q45 97 45 165Q45 204 64 237T109 290T163 324T209 345T228 353L214 364Q199 375 179 392T138 431T103 480T88 533ZM405 557Q405 568 402 581T387 612T350 644T286 663Q283 663 280 663T274 664H272Q256 664 228 636T199 572Q199 547 238 507Q268 475 320 437L334 427Q345 433 358 443T388 483T405 549V557ZM304 42Q366 42 398 76T431 155Q431 178 420 200T396 238T359 270T321 296T283 318L263 328Q262 328 230 312Q190 290 175 266T160 198Q160 132 202 87T304 42\",57:\"549 220Q549 23 429 -82T105 -195H84V-189Q84 -179 85 -174V-164H93Q184 -156 238 -132T334 -56Q361 -23 376 16T394 78L397 100L363 88Q329 75 291 61T244 45Q237 44 218 44Q154 44 94 97Q29 152 29 240Q29 350 108 404Q145 429 257 480Q270 487 279 487Q403 487 470 421Q549 347 549 220ZM408 217Q408 276 390 320T346 385T297 415T259 424Q218 424 185 393T151 286Q151 216 213 154Q252 115 321 115Q368 115 388 134T408 217\",58:\"57 398Q57 419 72 438T117 457Q154 457 174 439T194 398Q194 379 176 361T119 343Q85 343 71 362T57 398ZM62 19T62 43T77 85T115 104Q153 104 175 86T197 42Q197 14 171 1T119 -12Q96 -12 79 3\",59:\"56 399Q56 424 73 440T104 456Q114 458 120 458Q149 458 170 440T192 399Q192 380 174 362T120 344Q85 344 71 362T56 399ZM78 53Q78 67 84 76T90 86Q90 88 98 92T116 98Q117 98 121 98T128 99Q152 97 181 58T211 -24Q211 -77 128 -165Q124 -170 121 -173T116 -178T113 -181T110 -185T106 -190L97 -184L88 -177L95 -168Q143 -104 143 -65Q143 -51 137 -40T113 -7T81 35Q78 41 78 53\",61:\"559 342L549 304H22L27 319Q29 328 30 333T33 343H296Q559 343 559 342ZM559 206L549 168H22L27 183Q29 192 30 197T33 207H296Q559 207 559 206\",63:\"121 590Q121 575 128 562T144 542T152 533T115 512L78 491Q55 499 47 516Q40 530 40 553Q40 601 77 632Q155 697 257 697H268Q316 697 355 679Q422 646 422 576Q422 518 388 476Q383 468 376 461T358 444T340 428T316 410T290 390L230 344Q180 307 180 275Q180 261 187 248T202 227L209 219Q209 215 176 193L142 170Q114 177 100 194T84 226V239Q84 259 93 276T113 302T150 331T192 362Q203 370 219 382T247 403T267 422Q312 471 312 546Q312 593 282 623T207 653Q170 653 146 636T121 590ZM95 23T95 49T117 94T173 113Q204 113 223 96T242 54Q242 27 221 7T167 -14Q136 -14 116 4\",91:\"226 711T225 711T86 699V-93H89Q94 -93 157 -96T223 -100H226V-119H223Q134 -119 42 -130H36V740H42Q61 738 156 736H226V723Q226 711 225 711\",93:\"69 732Q116 733 146 734T184 736T197 737T206 738H208V-132Q190 -129 160 -127T99 -125T66 -124H14V-103H19Q20 -103 84 -98T152 -92H158V699H151Q148 700 85 703T18 708H14V732H69\",94:\"1 463T1 464T148 599T296 734Q584 486 584 485L561 472Q538 459 537 461Q296 672 293 672L161 563Q133 539 97 509T44 466L28 452Q27 452 14 457\",8216:\"187 456Q187 437 169 424T138 411Q114 411 84 454T53 538Q53 565 75 597Q109 648 155 697L166 708L181 694L173 681Q124 610 124 577Q124 549 155 511T187 456\",8217:\"125 524Q125 545 92 588T58 651Q58 661 61 667Q65 674 80 683T107 692Q131 692 162 645T193 564Q193 540 176 509T144 460T87 394L78 400L68 406L79 421Q125 489 125 524\",8260:\"272 270Q503 721 506 721L509 720Q512 720 518 719T529 717L550 713L91 -181L66 -182Q41 -182 41 -181L272 270\",58113:\"388 427Q320 485 242 524T128 563H116Q95 563 87 561L77 559Q72 563 69 566T65 570T65 572L75 576Q106 592 154 611T212 630Q230 630 262 622T358 581T492 498L508 486Q512 463 512 396Q512 246 469 112L465 102Q453 94 341 25Q252 -27 247 -27Q243 -27 174 24T97 84Q90 100 90 214Q90 285 98 345Q100 360 102 363T118 377Q175 422 262 465Q264 463 270 460L277 456Q277 455 267 447T244 428T228 414Q206 382 206 269Q206 187 214 164T259 110Q286 89 342 58Q391 131 391 313Q391 355 388 412V427\",58114:\"39 362L37 366L38 368L82 405H133V474Q135 563 143 589T198 658Q210 669 224 676T247 687L255 690H253Q241 690 253 692Q254 692 256 692T260 693Q263 693 262 691L261 690Q300 690 361 662L373 656L388 666Q404 675 405 675L406 674Q406 672 406 670T406 664L408 655L301 555Q300 555 287 564T254 584T221 597Q190 597 176 583T161 550Q161 525 184 495T232 440T261 405H387V399Q377 389 364 379L340 359H258V315Q258 52 228 -18L172 -120L121 -211H109Q102 -212 96 -212L109 -174Q131 -108 135 -80T139 53V76V157V362H39\",58115:\"41 352Q40 354 39 355T37 358L36 360H37Q48 370 61 380L84 400H108Q131 400 131 402Q121 424 104 501L100 519Q109 560 134 602T196 664Q230 681 271 681Q291 681 316 669T358 644L373 631Q373 630 304 553Q299 548 294 547Q292 547 290 546H287Q286 546 274 562T243 593T205 609Q180 609 165 596T150 562Q150 526 191 488L217 462Q248 431 253 405V400H381L384 394L349 352H251V332Q249 271 231 17L227 -37L120 -217L109 -218Q103 -219 97 -219Q97 -218 101 -206T110 -177T118 -151Q126 -129 128 -120T136 -46T141 127Q141 250 136 340V352H41\",58116:\"107 370Q127 384 172 409T255 454T294 473L306 468Q356 446 425 431L435 429L524 468Q528 465 531 461Q499 395 499 271V263Q499 146 509 71T519 -8Q519 -28 512 -45Q510 -50 435 -123T355 -197Q296 -212 257 -212Q209 -212 164 -196T98 -167T67 -143L133 -44H144Q167 -88 216 -111T320 -134Q371 -134 390 -118T410 -69Q410 -52 404 -12T392 60T385 92L193 -29L158 5Q124 39 110 51L96 63V71Q94 79 94 121Q94 130 94 148T93 174Q93 230 96 275T103 344T107 370ZM221 397Q200 334 200 254Q200 170 210 140Q216 126 234 109T268 81L283 71L383 119V127Q384 132 384 241L385 347L368 349Q325 357 290 369T240 389T221 397\",58117:\"103 453Q103 631 95 661Q95 663 102 667T110 672L114 664Q117 655 123 641T131 621L140 597L154 606Q208 641 275 673L297 684Q300 683 302 682T307 679T310 678L314 676Q283 658 256 625Q238 601 231 579T223 515L224 512L282 548Q339 583 341 583T365 548T386 509Q326 443 318 443L316 446Q314 448 311 452T304 460T294 470T283 480T272 488T260 494T248 497Q231 497 223 474Q220 468 218 440T215 407V401H345L309 360H218V314Q218 181 221 139V129L253 108Q306 73 310 73Q315 73 343 83L373 92L374 87Q375 82 375 79T375 74T360 65T308 36T229 -13L208 -27L192 -13Q149 24 90 61Q89 61 89 62L90 68Q91 73 93 87T97 125T100 191T103 291V360H33V366L34 371L85 405H94L103 404V453\",58120:\"602 575Q505 508 505 489Q505 488 505 482T506 463T507 432Q507 314 456 237L449 226L434 216Q420 208 325 143L316 137Q453 82 488 82Q527 82 585 127L596 136Q597 136 599 126L602 115Q578 85 511 27T428 -31Q400 -31 308 10T170 51Q143 51 123 43T92 24T54 -15L34 6L41 14Q65 41 170 129L188 144L204 145Q254 147 293 164T350 208Q378 249 378 344Q378 422 362 478T320 563T268 605T213 618Q177 618 156 600T134 561Q134 539 162 508T217 446T245 394Q245 368 213 337T85 250L62 262Q73 269 86 279T116 308T133 338T108 378T57 439T32 499Q32 556 117 617T291 679Q350 679 393 658Q415 647 433 631T462 600T480 572T490 550T494 541T499 544T516 556T547 578T603 613T689 662L720 679L730 670Q742 659 756 649T785 629T810 615T836 601T855 590Q855 587 860 536T870 419T875 312Q875 114 800 -25Q794 -35 781 -47Q584 -220 398 -220Q322 -220 278 -190Q253 -173 239 -155L244 -150Q248 -145 255 -138T271 -120T290 -100T310 -80T328 -63T341 -51T349 -46Q350 -46 351 -46T354 -47Q357 -47 357 -52Q359 -68 364 -83T383 -118T424 -151T491 -166Q559 -166 613 -129Q629 -118 641 -108T674 -68T710 1T735 107T746 260Q746 433 727 507Q727 512 685 535T615 570L602 575\",58121:\"351 571Q317 571 247 563T171 555Q153 555 133 563T107 584Q94 605 98 609Q101 615 138 658T190 717H207Q204 710 204 699Q204 673 231 666Q235 665 264 665Q296 665 345 667T426 669Q474 669 501 660T545 626Q553 612 553 594Q553 531 498 474T379 384Q371 379 371 378Q371 376 390 376H411H434Q520 376 602 318Q621 303 627 288T633 234Q633 59 540 -34Q465 -109 348 -130Q308 -137 235 -137Q159 -136 143 -129Q132 -125 132 -118V-53Q118 -24 90 -24Q69 -24 37 -39L27 -44L25 -42Q23 -39 21 -35T17 -30Q17 -28 40 -14T103 19T177 44Q183 45 205 45Q219 45 227 44T245 37T259 20T264 -12Q264 -33 262 -48T259 -80Q259 -93 260 -95Q271 -110 305 -110Q343 -110 383 -86T443 -33Q491 34 491 154Q491 223 467 249Q428 288 334 288H322Q288 288 237 276L222 273L206 286L262 367Q279 369 303 377T358 403T410 452T431 524Q431 531 431 533T427 545T416 558T392 566T351 571\"},{})},8745:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.fraktur=void 0;var H=L(9403),V=L(9349);T.fraktur=(0,H.AddPaths)(V.fraktur,{33:\"102 582T102 620T112 673T152 689Q190 689 190 638Q190 605 167 373L148 187L133 184Q102 582 102 620ZM91 24T91 48T107 88T148 104Q171 104 187 87T204 48Q204 22 188 5T149 -12Q124 -12 108 6\",34:\"33 436Q8 603 8 648Q8 663 9 671T19 687T43 695Q63 695 74 681Q76 678 76 650V623L66 532Q57 443 55 436V432H33V436ZM128 666Q128 691 162 691T196 668Q196 634 186 531Q176 441 176 432H166Q155 432 155 434L142 545Q135 603 130 647Q128 664 128 666\",38:\"181 520Q181 604 231 650T328 697L330 698Q333 698 335 698Q336 698 340 698T346 697Q390 697 418 670T446 604Q446 554 414 511Q384 467 300 417L283 406Q281 405 296 374T347 286T425 182Q466 135 469 135Q470 135 473 140T480 152T486 165Q509 210 509 263Q509 282 507 292Q498 317 488 332T465 352T443 359T418 361Q388 361 357 358L346 356L347 374Q347 394 348 396V399H355Q366 396 535 396Q663 396 689 398L703 399Q703 398 702 375T700 351L688 353Q655 356 601 357Q553 357 553 355Q562 332 562 294Q562 280 561 267T555 241T548 218T539 195T529 175T518 156T508 141T497 126L489 115L496 107Q549 54 596 54Q623 54 644 67T677 101T697 140T708 174L710 187Q710 188 710 188L711 190Q714 190 723 187T733 183Q733 179 732 172T726 145T714 107T694 66T665 27T623 0T569 -11Q500 -11 443 41L434 49L425 42Q348 -9 275 -9Q251 -9 233 -6Q187 -1 152 18T98 60T67 111T52 159T49 195Q49 231 60 261T96 315T141 354T197 390L208 397Q181 459 181 520ZM374 577Q374 607 356 629T311 651Q289 651 271 636Q242 614 242 559Q242 533 249 502T262 453T270 435T279 440T298 453T314 464Q374 503 374 577ZM127 217Q127 145 173 89T291 32Q318 32 347 42T393 63T409 75Q384 100 325 184T227 351Q223 366 220 366Q215 366 178 338Q127 298 127 217\",39:\"69 666Q69 680 79 687T104 695Q112 695 117 694T128 684T134 659L104 438Q104 436 96 436T88 438Q88 447 79 540T69 655V666\",40:\"293 737V719Q291 718 285 714T276 708T268 702T258 695T250 686T241 674Q164 570 164 282Q164 -37 230 -119Q273 -171 292 -171Q293 -171 293 -179V-186H289Q270 -180 259 -175Q175 -132 145 -23T114 275Q114 491 157 598T293 737\",41:\"223 259Q223 386 212 474T178 609T136 677T89 714V735Q121 726 139 713Q276 622 276 273Q276 98 246 -23Q225 -106 189 -139T89 -187V-170L101 -165Q148 -146 172 -110T210 13T223 259\",42:\"118 573Q118 575 76 602L34 629L50 647L55 652L66 642Q76 633 91 620T117 598L128 590Q128 663 125 687V692H151V689V687Q151 685 151 683T150 678T150 672Q145 628 144 605V592L219 652L232 634Q232 632 220 624Q195 610 155 582L146 575L158 567Q178 552 197 540T225 523T233 516Q233 515 226 506T217 495L152 549L143 555V530Q144 509 145 492T148 466T149 454Q149 449 142 449H125V462Q128 522 128 549V562L115 552Q88 531 59 506L45 495Q44 495 39 505T34 516L118 573\",43:\"357 584L399 598V282H709L702 263L696 243H399V-64L379 -73L358 -82Q357 -82 357 81V243H47L51 253Q52 256 54 263T58 272L62 282H357V584\",44:\"99 62Q99 82 114 94T144 107Q159 107 178 77T205 26Q213 5 213 -23Q213 -49 207 -65T181 -113Q128 -189 122 -191Q121 -191 116 -184T111 -174Q111 -173 122 -155T145 -111T156 -62Q156 -44 152 -34T127 4L104 37Q99 49 99 62\",45:\"46 236L62 274Q62 275 384 275H706L699 255L693 236H46\",46:\"87 43Q87 69 104 85T142 102Q164 102 182 86T200 44Q200 20 183 3T141 -15Q118 -15 103 2T87 43\",47:\"230 270Q426 721 428 721Q437 719 447 717L466 713L448 672Q78 -180 77 -181Q77 -182 55 -182L34 -181L230 270\",48:\"212 -13Q184 -13 156 -2T101 32T59 97T42 195Q42 311 132 396Q170 433 211 462T262 492Q272 492 301 477T366 434T429 360T456 258Q456 161 378 74T212 -13ZM381 209Q381 257 365 295T328 355T282 390T243 408T223 413Q220 413 204 403T167 376T137 341Q119 305 119 250Q119 168 159 114T263 59Q308 59 344 93T381 209\",49:\"123 459Q145 459 170 460T217 462T256 464T284 466L295 467Q296 467 296 467T297 468Q299 468 302 466T307 462L309 459Q307 454 304 424T299 341T297 235Q297 139 298 101T302 55T313 44Q316 43 367 43L460 46Q460 35 459 22V-1H450Q402 2 281 6Q222 6 171 4T91 1T56 -1L47 -2V43H121H170Q195 43 201 45T209 56Q212 69 212 214Q212 333 209 365T194 409Q183 417 161 423T121 430L104 432Q103 432 103 446V459H123\",50:\"104 384Q115 394 133 409T199 449T281 474Q321 474 351 447T385 378Q385 328 333 255T228 127T176 72Q176 67 183 65Q184 65 203 65T260 67T331 69L475 73L484 67Q484 64 472 33L460 1H60V17L107 61Q210 159 249 208Q309 283 309 331Q309 363 285 389T228 415Q212 415 184 403T134 379L114 367L104 384\",51:\"305 328Q305 372 279 396T214 421H211Q172 421 128 384L107 398L116 405Q151 437 191 455T251 473H260Q314 473 341 455T382 394Q384 386 384 367T382 338Q362 263 271 217L256 210L257 206L259 202Q260 202 272 201T296 198T324 192T355 179T384 157T410 123T427 75Q429 64 429 41Q429 -59 353 -120T183 -182L88 -164Q81 -162 69 -157T48 -147T39 -141Q39 -139 46 -127L53 -114L69 -122Q129 -149 171 -149Q218 -149 253 -131T305 -83T330 -26T338 29Q338 41 336 55T328 89T308 127T273 153Q228 171 162 171Q158 171 152 171T142 170H127V204H134Q232 214 275 257Q305 292 305 328\",52:\"299 -179Q306 -156 306 -48V0H11V7Q10 10 10 18Q10 23 154 236L298 449Q298 450 339 463L379 476Q385 473 384 470V466Q384 463 384 457T384 444T383 427T383 408Q381 328 381 248Q381 46 384 40H387Q422 40 460 44Q465 44 470 44T478 44L481 45Q481 43 478 24T473 1Q473 -1 464 -1Q462 -1 451 -1T430 0H387V-76L389 -156V-161L311 -191Q299 -181 299 -179ZM299 364H287L277 352Q234 297 186 224T112 104T79 43Q79 42 192 42H306V115Q306 300 299 359V364\",53:\"334 25Q334 99 296 134T207 169Q154 169 107 123L98 114L89 120L80 125V458H420Q420 456 409 418L397 379Q397 378 264 378H131Q130 377 128 376T125 374T124 371T122 368T122 363T121 356T121 345V279V190L130 186L140 190Q196 214 260 214Q311 214 348 197T404 153T431 99T440 42T433 -16T406 -76T356 -130T276 -169T163 -184H156Q110 -184 57 -163L47 -159L53 -147L58 -134Q61 -134 74 -139T110 -148T156 -153Q206 -153 243 -135T299 -87T326 -30T334 25\",54:\"45 240Q45 328 73 406T143 536T235 626T327 681T399 699Q400 699 404 699T411 700Q424 700 441 696T459 689Q459 671 451 637Q451 633 447 632L444 629L434 633Q413 640 384 640H377Q299 640 222 565Q182 531 156 463T129 315V306H136L149 315Q229 376 316 376H318Q393 376 432 326T471 213Q471 129 402 58T237 -13T93 59T45 240ZM391 172Q391 231 354 272T258 314Q230 314 200 302T154 279T133 262L134 249Q154 32 266 32Q315 32 353 64T391 172\",55:\"395 377L391 382H225Q59 382 59 383L74 423Q89 464 89 465Q90 468 94 468Q146 460 350 458H498V442L473 406Q241 75 125 -156L113 -181H40L37 -168L57 -140Q115 -58 199 70T339 287T395 377\",56:\"220 -10Q168 -10 131 6T75 50T48 103T40 157Q40 223 77 266Q103 295 156 328T225 375Q247 393 247 394L206 361Q205 361 193 368T164 391T131 426T102 474T90 531Q90 580 114 615Q146 660 238 698L254 705L262 704Q288 704 332 693T402 656Q434 620 434 568Q434 518 401 475T321 402L305 391L336 368Q339 366 353 356T372 343T389 330T406 316T420 301T434 283T445 265T454 244T458 222T461 195Q461 106 389 48T220 -10ZM350 545Q350 578 337 601T304 634T266 649T234 653L224 654L204 639Q196 634 191 629T182 621T176 614T173 609T170 603T168 597Q165 585 165 567Q165 497 261 424L273 415Q350 467 350 545ZM261 405L263 407Q262 407 261 405ZM258 403Q257 403 255 401L254 399L256 400Q258 402 258 403ZM252 398Q251 398 249 396L248 394L250 395Q252 397 252 398ZM245 36Q276 36 300 45T338 69T360 102T371 136T374 168Q374 211 341 255Q324 275 305 289T235 332Q231 330 215 321T193 307T173 292T153 271T138 247T127 216T123 177Q123 146 132 117T170 62T245 36\",57:\"353 93T352 93T320 79T251 49T201 34Q127 37 87 79Q28 138 28 234Q28 273 37 304T60 355T101 396T152 429T218 462L234 469H243Q348 461 395 417Q466 348 466 201Q466 72 397 -29T211 -163Q155 -179 91 -182H72V-154H80Q144 -154 202 -131T297 -60Q318 -31 333 7T352 68L357 92Q353 93 352 93ZM369 208Q369 240 362 272T339 339T290 394T214 415Q171 415 144 372T116 266Q116 193 154 144T238 95H249Q369 95 369 208\",58:\"50 377T50 400T64 440T99 457Q128 457 146 440T165 399Q165 375 146 359T102 342T64 359ZM53 19T53 43T66 86T103 105Q129 105 148 87T168 41Q168 17 147 3T102 -12Q80 -12 67 3\",59:\"47 399Q47 424 62 441T101 458T143 442T162 400T144 359T101 343Q78 343 63 360T47 399ZM76 86Q76 88 80 91T91 96T106 99Q119 99 131 86Q179 35 179 -25Q179 -64 146 -115T89 -189Q86 -187 83 -185T79 -182T76 -180T75 -177T77 -173T80 -168Q121 -108 121 -64Q121 -44 94 -5T66 52Q66 66 71 75T76 86\",61:\"725 366Q724 365 721 349T716 331V329H385Q54 329 54 331Q55 332 59 349T63 368H394Q725 368 725 366ZM725 169Q724 168 721 152T716 134V132H385Q54 132 54 134Q55 135 59 152T63 171H394Q725 171 725 169\",63:\"46 557Q46 613 103 653T227 693Q287 693 322 659T357 564Q357 517 326 469T259 390T191 326T160 272Q160 240 187 221Q193 217 193 216Q182 209 170 200L147 184Q127 192 113 209T98 250Q98 290 193 376Q287 454 287 542Q287 581 262 616T188 652Q143 652 126 631T108 588Q108 559 140 527L79 490Q46 515 46 557ZM108 47Q108 68 123 85T160 103Q179 103 198 90T217 46Q215 24 201 7T164 -11Q142 -11 125 6T108 47\",91:\"262 -119Q224 -120 191 -123T141 -128T118 -130Q117 -130 117 305V740H122Q141 737 219 736H278V723Q278 711 277 711L159 699V-93H162Q167 -93 220 -96T276 -100Q278 -100 278 -109V-119H262\",93:\"64 733Q89 733 110 734T143 737T158 738H160V-131H154Q101 -125 40 -124H-4V-103H1Q3 -102 57 -98T113 -92H118V700L64 703Q7 707 3 708H-4V732H21Q34 733 64 733\",94:\"0 464L250 734L262 722Q274 712 384 598L495 486Q483 478 467 467L456 459L248 672L154 580L23 452Q17 454 10 458T0 464\",8216:\"117 410Q97 410 71 455T45 539Q45 588 129 694L140 708Q142 708 153 694L147 682Q106 609 106 582V577V571Q106 548 132 511T158 455Q158 434 143 422T117 410\",8217:\"105 529Q105 546 77 588T49 651Q49 658 51 666Q53 672 67 682T92 692Q111 692 137 644T163 563Q163 534 143 497T99 428T74 395Q72 395 65 400T58 407Q105 476 105 523V529\",8260:\"230 270Q426 721 428 721Q437 719 447 717L466 713L448 672Q78 -180 77 -181Q77 -182 55 -182L34 -181L230 270\",58112:\"427 436Q427 434 427 425T429 398T430 362Q430 222 396 109L393 99L305 33Q218 -32 216 -32Q208 -29 142 22L91 68L78 81L77 94Q75 130 75 173Q75 245 87 347L135 385Q178 418 184 424L177 428Q174 429 170 431Q116 454 96 473T75 534Q79 608 154 683Q164 677 164 673Q164 670 157 662T144 637T137 598Q137 552 182 518T280 470T380 447T427 436ZM342 371L275 394L208 417Q203 417 192 399T168 334T156 229Q153 187 153 157Q153 141 156 135Q158 125 208 88T280 51Q306 51 326 120T346 297Q346 339 344 354T342 371\",58113:\"39 551L35 569L52 577Q72 586 98 595T140 610T158 616Q174 612 200 604T293 560T412 477Q414 475 417 472Q428 462 430 450T432 376Q432 223 401 124Q395 106 393 103T382 92Q351 68 281 20T206 -29Q201 -31 137 26L100 60L78 83L77 112Q76 132 76 170Q76 259 86 342L88 360L101 371Q116 386 163 422T215 459Q216 459 224 455T233 450L229 446Q225 442 218 434T203 419Q179 394 175 389T168 372Q156 334 156 262Q156 167 164 137Q168 125 196 102T252 62L278 45Q279 45 285 52T302 78T322 126T339 205T346 316Q346 367 344 389L343 406L326 423Q228 520 113 559L100 564L70 557L39 551\",58114:\"123 386L120 431Q116 476 116 511V520Q116 593 174 649Q207 680 236 680Q258 680 284 664T312 648Q318 648 327 656Q328 657 330 659Q337 664 337 661Q337 660 338 657Q338 652 339 648L268 566L260 574Q234 600 206 600Q182 600 164 585T145 541Q145 492 211 386L267 385H324L299 354H214V312Q214 86 193 -58L192 -69L116 -215H108Q92 -215 92 -212Q93 -211 100 -189T116 -135T128 -80Q134 -41 134 22Q134 54 130 185T125 349V354H29L59 385H91Q123 385 123 386\",58115:\"91 530Q91 564 116 600T164 656T194 678Q195 678 200 678T209 679Q268 679 316 639L293 593Q267 547 263 546H262Q260 546 256 553Q222 613 180 613Q160 613 146 599T132 564T170 474T210 388H318L296 356H206V322Q204 284 204 255Q202 221 202 161V99Q202 28 194 -22T160 -124Q148 -146 116 -199L101 -224L91 -220Q85 -218 84 -217T83 -215L101 -161Q116 -114 119 -73T122 108Q119 334 117 352V356H72L28 357L66 388H92Q118 388 118 389L109 433Q91 514 91 530\",58116:\"254 -150Q293 -150 328 -126T363 -54Q363 -38 352 29T339 98L250 34Q160 -30 159 -30L77 64V71Q74 95 74 174Q74 212 75 243T79 294T83 328T87 352T90 366L117 384Q206 446 238 464L250 471Q277 455 306 443T350 427L365 423Q367 423 405 443T443 465L449 455Q431 414 426 362T418 201Q418 135 420 121Q438 -4 438 -19Q438 -26 438 -31T434 -42T429 -51T420 -63T408 -77T391 -95T370 -119T346 -147T325 -170T309 -187T291 -200T274 -207T252 -213T225 -214Q175 -214 132 -196T70 -160L52 -143Q52 -138 90 -48Q90 -47 95 -47H101Q108 -81 146 -115T254 -150ZM341 136Q341 157 344 242T347 348V355L334 356Q299 359 262 367T203 383T179 391Q177 391 173 377T163 323T158 227Q158 164 161 128V121L174 106Q203 75 223 59L341 127V136\",58117:\"92 446Q92 603 82 664Q94 670 95 670L96 666Q98 661 101 651T108 633Q121 598 121 597L141 612Q247 686 250 686Q251 686 266 679Q261 674 243 659T213 632T190 597T173 546Q172 541 171 530T170 511T170 502Q171 502 222 542L273 582Q308 522 315 504L279 449L269 462Q231 506 215 506Q202 506 190 490Q164 458 164 395V390H279L266 373L254 355H167V306Q169 252 169 217Q170 195 170 147V117L200 92Q234 64 237 64Q243 64 277 81L311 99V75Q310 75 242 27L174 -20L156 -3Q88 60 81 60L79 62Q80 60 82 62Q87 67 87 290V355H57L26 356L73 390H92V446\",58118:\"117 531Q117 533 137 544T178 566L198 577Q200 577 204 575T208 572V570Q208 568 208 566T207 560Q197 496 197 397V392H321L295 353H199V260Q199 157 200 145V122L269 68Q271 67 274 67Q282 67 310 83T342 100Q343 100 345 92T346 83L211 -21L172 12Q117 59 117 63Q117 65 117 87T119 150T120 238V353H75L29 354L65 391H118V460Q117 498 117 531\",58119:\"337 91V78L324 71Q288 53 256 29T206 -8T180 -22Q174 -22 158 -9Q82 46 60 46H59L63 51Q67 56 73 68T85 96Q101 158 101 254Q101 300 95 330T83 370T66 394L53 388Q48 385 41 382T24 374Q22 376 20 378T16 381T13 383T10 385V386L119 475Q150 439 160 430L171 422V409Q173 377 173 300Q173 228 166 183T152 122T145 102Q207 81 242 58L337 104V111Q340 146 340 227Q340 320 339 351T338 408V423L422 469Q425 465 429 462L426 438Q413 354 413 251Q413 152 423 119Q426 110 435 96T452 82Q454 82 509 103Q514 98 514 89Q514 87 507 81T472 51T409 -7L395 -20Q393 -18 390 -17Q386 -14 382 -6Q380 -2 379 1Q369 24 361 40T348 62T341 73T338 84L337 91\"},{})},181:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.italic=void 0;var H=L(9403),V=L(9741);T.italic=(0,H.AddPaths)(V.italic,{33:\"330 716Q351 716 365 703T380 670V659L304 433Q230 207 227 204Q225 198 205 198Q184 198 184 207T220 439T260 669Q270 694 297 708Q300 709 304 710T311 713T316 714Q324 716 330 716ZM107 51Q110 83 133 102T179 121Q207 121 219 105T231 72Q231 45 209 23T156 0Q138 0 123 11T107 51\",34:\"214 620Q214 647 236 670T289 694Q312 694 326 677T341 633V624Q341 588 327 550T294 482T253 428T216 392T196 379Q191 379 184 388T176 401Q176 404 195 421T243 472T287 547Q299 576 299 582L295 580Q291 578 282 576T264 573Q241 573 228 585T214 620ZM411 620Q411 647 433 670T486 694Q509 694 523 677T538 633V624Q538 588 524 550T491 482T450 428T413 392T393 379Q388 379 381 388T373 401Q373 404 392 421T440 472T484 547Q496 576 496 582L492 580Q488 578 479 576T461 573Q438 573 425 585T411 620\",35:\"281 327H228Q186 327 175 330T164 347Q164 359 176 365Q179 367 292 367H404L563 688Q569 694 578 694T593 686T597 670Q597 667 531 535L448 367H614L773 688Q779 694 787 694Q796 694 802 688T808 674V672L807 670Q807 667 732 517L658 368L736 367H814Q828 357 828 347Q828 336 812 327H637L599 250Q561 174 561 173H662H724Q760 173 769 170T779 153T770 136T729 132Q721 132 696 132T651 133H540L380 -188Q374 -194 366 -194Q357 -194 351 -188T345 -174L346 -172V-170Q346 -167 412 -35L495 133H330L170 -188Q164 -194 156 -194Q147 -194 141 -188T135 -174L136 -172V-170Q136 -167 211 -17L285 133H207L130 134Q115 140 115 153Q115 164 131 173H306L344 250Q382 326 382 327H281ZM592 327H427L389 250Q351 174 351 173H516L554 250Q592 326 592 327\",37:\"301 348Q257 348 231 383T205 480Q205 553 244 629T346 736Q370 750 394 750Q416 750 429 742T458 714Q512 644 606 644Q722 644 802 732Q817 750 827 750Q835 750 841 744T847 730Q847 725 827 700T689 540Q586 421 512 335Q180 -50 176 -52Q172 -56 165 -56Q157 -56 151 -50T145 -35Q145 -29 162 -9T330 186Q392 258 430 302Q711 627 711 628L701 624Q652 607 604 607Q551 607 494 634L479 642V624Q479 544 439 467Q414 416 377 382T301 348ZM270 443Q270 385 303 385H306H308Q326 385 348 407Q384 441 409 504T434 627Q434 713 390 713Q358 713 328 663Q307 631 289 556T270 451V443ZM608 -56Q573 -56 543 -23T513 76Q513 129 536 190T604 296L627 318Q670 347 704 347Q747 347 767 310T788 222Q788 126 732 35T608 -56ZM742 222Q742 310 699 310Q677 310 655 285T620 227Q608 197 593 138T578 42V36Q578 -18 613 -18Q657 -18 699 64T742 222\",38:\"209 444Q209 546 278 631T424 716Q473 716 501 683T530 601Q530 554 511 535T467 515Q446 515 437 527T427 553Q427 578 446 594T481 610H483V617Q480 641 464 660T419 679Q367 679 328 603Q316 578 305 538T288 470L282 443L295 449Q308 455 330 462T371 469Q397 469 413 450T430 404Q430 363 400 329T331 295Q291 295 256 322Q255 322 246 293T227 223T217 158Q217 117 232 88T273 43T327 22T387 15Q457 15 512 37T599 93T652 169T680 248T688 317T678 380T659 423T647 437Q643 435 637 431T613 416T581 392T554 364T538 332Q540 310 541 310Q554 335 587 335Q601 335 613 327T626 300Q626 290 622 279T603 255T563 242Q532 245 512 263T491 320Q494 351 511 377T547 418T600 456T652 494Q676 512 697 539T728 582T738 601Q738 602 736 602Q732 602 726 604T714 616T707 638Q707 661 724 677T764 694Q799 694 802 660Q802 625 767 562T688 467L694 458Q700 449 702 444T711 428T720 408T727 385T733 358T735 327Q735 281 724 235T685 141T617 59T515 1T375 -22Q270 -22 199 34T127 181Q127 216 147 270T207 374L216 386Q209 421 209 444ZM386 412Q386 432 366 432Q345 432 325 418T294 390T284 375Q284 371 289 362T306 343T335 332Q355 332 367 350T383 384T386 412\",39:\"250 620Q250 647 272 670T325 694Q348 694 362 677T377 633V624Q377 566 343 506T275 412T231 379Q226 379 220 388T213 401T232 421T279 472T323 547Q335 573 335 582L331 580Q327 578 318 576T300 573Q277 573 264 585T250 620\",40:\"241 -250Q203 -212 174 -140T144 39Q144 158 180 288T296 544T481 746L487 750H499Q517 750 517 740Q517 736 495 716Q399 630 331 491T236 228T208 3Q208 -73 224 -130T255 -214T271 -244Q271 -250 252 -250H241\",41:\"326 497Q326 546 320 588T304 655T285 699T269 728T262 740Q262 746 267 749L272 750Q276 750 281 750H293Q331 712 360 640T390 461Q390 332 339 171T188 -116Q161 -150 121 -188T47 -250H35Q17 -250 17 -240Q17 -236 39 -216Q135 -130 203 9T298 272T326 497\",42:\"560 658Q569 658 576 649T584 631Q584 625 583 620T577 611T569 603T556 595T540 587T519 578T494 566L428 536Q427 535 433 531T479 502Q525 475 532 469T539 450Q538 435 525 424T497 412Q489 412 482 418T442 456Q400 497 400 494L387 420Q376 353 373 343T352 323Q345 320 336 320H331Q322 320 316 327T309 343Q309 347 334 420L359 496Q358 496 297 456T234 414Q228 411 221 411Q212 411 204 417T195 439Q198 458 209 465T283 502L353 534L300 566Q255 593 247 599T239 616Q239 631 252 644T282 658Q290 658 295 654T335 615L378 573L391 647Q393 657 395 671T398 691T400 706T404 720T408 730T414 739T423 744T434 749Q435 749 439 749T445 750Q467 748 469 728Q469 723 457 685T432 610L420 573L481 613Q548 658 560 658\",43:\"139 237T139 250T151 266T198 270H293H431L465 407Q469 424 476 452Q494 528 500 542T519 557Q526 557 532 552T538 538Q538 536 507 409T472 272Q472 270 604 270Q737 270 741 268Q753 261 753 250Q753 237 742 233T696 229Q687 229 655 229T599 230H462L461 226Q461 224 427 91T392 -47Q387 -57 374 -57Q367 -57 361 -51T355 -37Q355 -31 388 99L421 230H288Q267 230 238 230T199 229Q163 229 151 233\",44:\"106 46Q106 68 121 90T167 120Q168 120 173 120T180 121Q232 121 232 59V54Q232 18 219 -20T186 -88T145 -143T109 -181T88 -194Q84 -194 77 -185T69 -171Q69 -168 70 -166T76 -161T85 -154T101 -139T124 -114Q146 -88 162 -58T183 -12T188 7Q187 7 183 5T172 2T156 0Q129 0 118 14T106 46\",45:\"205 180H131Q102 180 93 181T84 190Q90 238 103 251H334Q341 244 341 241Q341 236 336 214T327 186Q325 181 312 181T205 180\",46:\"107 50Q107 76 129 98T181 121Q203 121 217 108T231 72Q231 47 210 24T156 0Q135 0 121 13T107 50\",47:\"166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183Q157 -157 378 274T602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 691 406 241T170 -212Q166 -215 159 -215\",48:\"414 665Q562 665 562 490Q562 426 534 318Q451 -21 251 -21Q222 -21 202 -15Q155 2 134 40T110 144Q110 201 127 286T187 470T287 614Q348 665 414 665ZM187 98Q187 59 208 37T260 15Q320 15 365 83Q394 128 440 312T487 547Q487 580 471 600T433 627Q428 628 408 628Q381 628 353 609T311 569Q279 526 239 364T190 143Q187 120 187 98\",49:\"248 491Q228 491 228 502Q228 516 236 532Q237 536 246 537T275 541T314 552Q350 567 382 595T430 644L446 664Q450 666 454 666Q468 666 468 658Q468 647 395 359Q321 63 321 59Q321 52 334 50T388 46H422Q428 37 428 35Q428 19 421 5Q416 0 405 0Q400 0 361 1T263 2Q215 2 185 2T142 1T127 0Q110 0 110 11Q110 13 113 25T118 40Q120 46 146 46Q196 46 212 49T235 61Q238 66 295 295L353 526L340 519Q328 512 302 503T248 491\",50:\"159 404Q159 433 176 476T222 562T297 635T395 666Q466 666 508 617T551 497Q551 473 545 446Q534 388 482 333Q441 292 355 240T264 184Q216 151 179 101L171 91Q171 90 177 90Q206 90 269 77T366 64Q385 64 390 65Q418 73 441 98T475 156Q479 168 481 170T495 173H518Q524 167 524 166T521 152Q502 86 459 32T353 -22Q315 -22 259 15T172 53Q156 53 143 36T126 1L121 -16Q119 -22 98 -22H82Q76 -16 76 -13T80 5T98 50T132 111T189 178T274 242Q327 273 364 305T420 370T447 427T460 483Q466 514 466 538Q466 586 443 607T389 629Q338 629 293 584T226 487T204 399Q204 390 204 386T209 378T222 373Q258 376 282 422T307 493Q307 506 302 517T297 531Q297 537 308 546T327 551Q329 550 333 543T340 523T344 497Q344 450 306 393T216 336Q186 336 173 355T159 396V404\",51:\"296 531Q296 536 307 544T322 553Q330 553 338 534T346 501Q346 468 319 440T258 412Q232 412 216 430T200 478Q200 552 281 618Q345 666 416 666Q489 666 525 625T562 530Q562 473 525 419T430 335L416 329Q479 288 479 206Q479 142 440 89T344 7T229 -22Q173 -22 135 12T96 106Q96 192 157 192Q192 192 197 157Q197 134 184 117T142 96Q153 47 180 29Q201 15 232 15Q249 15 275 22Q307 34 331 57Q363 90 379 153T396 246Q396 261 393 272T384 290T371 301T355 308T341 311T326 312H316H307Q287 312 282 313T276 320Q276 323 279 337T283 352Q284 356 290 357T325 358Q364 359 368 360Q386 365 400 372T433 397T464 448T485 527Q487 535 487 556Q487 629 414 629Q350 629 298 580T245 476Q245 450 263 450H264Q280 450 294 463T308 496Q308 508 302 518T296 531\",52:\"448 34Q453 34 463 22T473 5Q473 -2 457 -7Q417 -22 383 -23H366L350 -91Q348 -98 345 -111T340 -130T335 -146T330 -161T325 -172T318 -182T310 -188T299 -193T286 -194Q256 -194 253 -165Q253 -159 271 -83T292 -5Q231 29 169 29Q114 29 91 14Q72 -2 65 1Q46 20 46 28Q46 35 55 43T77 60T96 74Q306 257 396 623Q410 666 444 666Q459 666 468 657T478 634Q478 627 470 595T440 504T387 381T303 239T187 99L164 75H178Q217 75 260 59L304 43Q304 48 325 127Q342 195 346 207T358 228Q372 242 391 242Q403 242 413 235T423 214Q423 205 402 116T378 25Q378 23 387 23Q405 23 418 25T439 31T448 34\",53:\"196 304Q189 309 189 314Q189 317 231 487T275 660Q278 666 283 666Q287 666 302 658T346 643T413 635Q447 635 481 642T537 658T559 666Q561 666 564 663T567 658Q565 637 557 629Q528 600 474 573T359 545Q342 545 327 546T304 550T294 552L291 540Q288 529 283 507T273 465L251 379Q307 420 364 420Q415 420 456 382T497 261Q497 165 429 82T262 -20Q256 -20 247 -21T233 -22Q176 -22 141 15T106 112Q106 208 173 208Q192 208 203 197T214 169Q214 143 195 125T156 107H153V100Q155 73 174 47T239 21Q245 21 259 23Q355 46 392 200Q393 205 394 207Q412 276 412 312Q412 352 396 367T358 383Q288 383 233 314Q226 306 224 305T209 304H196\",54:\"377 434Q425 434 457 404T499 341T509 278Q509 243 496 194T456 105T383 27Q322 -22 256 -22Q142 -22 122 114Q120 130 120 159Q120 221 135 292T195 452T310 599Q390 665 465 665Q565 665 565 583V574Q565 543 546 524Q528 506 504 506Q491 506 478 514T465 543Q465 585 515 602Q505 626 466 626Q419 626 372 587Q334 557 305 503T266 409L255 370Q287 410 339 429Q361 434 377 434ZM424 333Q424 359 411 378T365 397Q318 397 282 356T230 257T205 157T197 94Q197 67 211 45T260 22Q313 22 341 57T386 151Q424 283 424 333\",55:\"466 519Q448 519 435 528T416 550T400 571T376 581Q324 581 271 540T186 437Q185 435 183 432T181 428T179 426T177 424T174 423T171 422T165 422H159Q141 422 141 423Q136 423 136 431Q136 433 190 548T247 665Q249 666 266 666H282Q288 660 288 657Q288 655 284 646T276 628L273 620Q337 666 390 666Q413 666 425 652T438 620T444 584T457 559Q460 557 470 557Q497 557 524 582T571 635T594 665Q595 666 612 666H628Q634 660 634 657Q634 653 618 629T572 556T510 441T437 269T367 43Q356 -22 304 -22Q291 -22 278 -14T263 14Q263 36 281 95T354 269T486 507Q497 524 495 524Q482 519 466 519\",56:\"209 449Q209 545 278 605T416 666Q482 666 517 631T553 546Q553 513 539 482T504 430T463 394T426 370L410 360L430 343Q471 309 483 278T495 211Q495 141 441 75Q363 -21 253 -21Q182 -21 141 18T99 117Q99 161 119 201T170 268T222 308T259 331L272 338L259 349Q212 389 209 449ZM492 542Q492 586 469 605T415 625Q360 625 320 587T279 505Q279 495 281 487T286 474T295 460T306 449T321 436T337 422Q379 386 380 386Q389 386 420 412T472 471Q492 513 492 542ZM163 118Q163 76 189 49T258 21Q316 21 368 64T420 170Q420 193 412 208T395 233T350 271L302 312Q298 312 284 303T249 276T209 235T177 181T163 118\",57:\"297 211Q258 211 230 228T189 273T169 323T163 367Q163 411 183 472T254 585Q327 656 401 665Q403 665 412 665T427 666Q458 664 481 652T518 622T539 580T550 535T553 491Q553 448 544 395T515 277T454 148T358 37Q282 -22 213 -22Q166 -22 137 -1T107 55V64Q107 88 114 104T134 127T154 136T169 138Q185 138 196 128T207 101Q207 82 196 68T172 48L161 43Q161 40 167 36T187 26T219 21Q286 21 344 99Q364 126 382 169T408 241T417 275L412 269Q406 263 395 253T370 234T337 218T297 211ZM476 552Q476 626 417 626Q368 626 330 584Q312 563 300 533T270 433Q248 341 248 312Q248 286 262 267T310 248Q353 248 387 287T440 380T467 480T476 552\",58:\"184 358Q184 385 206 408T258 431Q279 431 293 418T308 383Q308 354 284 332T233 310Q212 310 198 324T184 358ZM107 50Q107 76 129 98T181 121Q203 121 217 108T231 72Q231 47 210 24T156 0Q135 0 121 13T107 50\",59:\"184 358Q184 385 206 408T258 431Q279 431 293 418T308 383Q308 354 284 332T233 310Q212 310 198 324T184 358ZM107 47Q107 77 130 99T180 121Q226 121 226 61Q226 25 214 -14T182 -84T144 -140T109 -180T88 -194T77 -185T70 -172Q70 -169 84 -155T121 -112T161 -48Q180 -10 180 3Q180 4 174 2Q172 2 166 1T156 0Q135 0 121 13T107 47\",61:\"776 357T776 347T761 327H470Q180 327 176 329Q164 334 164 347Q164 359 176 365Q179 367 470 367H761Q776 357 776 347ZM116 143T116 153T131 173H422Q713 173 717 171Q728 166 728 153T717 135Q713 133 422 133H131Q116 143 116 153\",63:\"235 431Q217 431 206 442T195 468Q195 490 215 537T280 638T380 707Q403 716 423 716Q425 716 429 716T436 715Q485 715 518 681T551 590Q551 543 530 503T482 439Q471 428 400 375T318 310Q300 287 300 259Q300 236 315 236Q333 236 352 251T384 300Q386 306 407 306H423Q429 300 429 297Q429 272 393 235T308 198Q287 198 269 215T251 270Q251 330 293 374L374 436Q377 438 401 456T432 480T457 503T481 531T494 561T501 598Q501 614 499 626Q482 678 430 678H426Q392 678 362 660T311 615T280 571T264 540L259 528Q259 527 266 526T283 516T294 492Q294 466 276 449T235 431ZM209 51Q212 83 235 102T281 121Q309 121 321 105T333 72Q333 45 311 23T258 0Q240 0 225 11T209 51\",64:\"198 250Q198 155 248 91T394 26Q514 26 640 80L650 84H675H683Q709 84 709 76Q709 73 708 71Q706 64 660 45T534 8T383 -11T260 24T181 115Q152 168 152 248Q152 410 268 552Q303 590 324 608Q439 705 551 705Q611 705 658 683T733 623T775 543T789 454Q789 380 766 304T720 192Q677 125 617 125Q591 125 573 137T548 160T541 176Q541 178 540 178L534 173Q527 168 515 160T488 144T454 131T417 125Q361 125 320 166T279 284Q279 393 356 481T523 569Q570 569 603 537Q623 515 632 490L637 480L657 479Q684 479 684 470Q684 465 650 333L617 199V185Q616 162 628 162Q677 162 712 278Q743 381 743 442Q743 555 687 611T553 668Q467 668 385 608T250 450T198 250ZM598 445Q598 453 594 470T569 510T518 532Q463 532 410 448T356 271Q356 220 374 191T423 162Q482 162 552 255L575 348Q598 440 598 445\",91:\"205 -221Q205 -239 194 -250H137H106Q73 -250 73 -242Q73 -232 194 255T321 747L324 750H381H417Q435 750 440 748T446 739Q446 730 443 723T437 712L434 710H350L349 706Q349 704 235 249T120 -208Q120 -210 159 -210Q166 -210 175 -210T187 -209Q205 -209 205 -221\",93:\"227 721Q227 739 238 750H295H326Q359 750 359 742Q359 732 238 245T111 -247L108 -250H51H15Q-3 -250 -8 -248T-14 -239Q-14 -230 -11 -223T-5 -212L-2 -210H82L83 -206Q83 -204 197 251T312 708Q312 710 273 710Q266 710 257 710T245 709Q227 709 227 721\",94:\"528 555Q528 549 514 538T496 527Q491 527 470 554Q458 569 449 580L414 625L353 578Q339 567 323 555T298 536L290 529Q286 527 285 527Q279 527 273 533T264 546L260 553Q260 559 263 562Q265 564 342 628T421 693T425 694Q430 694 433 691Q528 563 528 555\",95:\"98 -62Q91 -58 91 -51Q91 -31 100 -26Q102 -25 324 -25H442H500Q536 -25 545 -27T554 -36Q554 -50 548 -56Q546 -60 538 -61Q520 -62 319 -62H98\",126:\"266 208Q262 208 255 215T247 228Q247 233 250 236T274 259Q335 318 369 318Q394 318 420 292T464 265Q485 265 516 291T550 318Q554 318 562 311T571 297Q570 293 551 273T502 231T451 209H447Q421 209 396 235T355 261Q334 261 301 235T266 208\",305:\"75 287Q75 292 82 313T103 362T142 413T196 441H214Q248 441 270 419T293 357Q292 338 289 330T245 208Q193 72 193 46Q193 26 209 26Q228 26 247 43Q273 71 292 136Q295 148 297 150T311 153H317Q327 153 330 153T337 150T340 143Q340 133 330 105T292 41T228 -8Q220 -10 204 -10Q160 -10 141 15T122 71Q122 98 171 227T221 384Q221 396 218 400T203 405Q175 403 156 374T128 312T116 279Q115 278 97 278H81Q75 284 75 287\",567:\"75 284T75 287T81 305T101 343T133 389T180 426T240 442Q273 440 300 420T327 350V332L278 134Q267 92 253 37T233 -45T225 -73Q208 -123 162 -163T54 -204Q8 -204 -15 -181Q-32 -164 -32 -140Q-32 -112 -14 -96T27 -79Q48 -79 57 -91T67 -114Q67 -146 39 -166L44 -167H59H60Q112 -167 145 -74Q148 -65 198 134T251 347Q252 353 252 370Q252 382 251 388T245 399T230 405Q204 405 175 378Q157 360 145 337T126 298T117 280T98 278H81Q75 284 75 287\",768:\"-222 651Q-222 668 -206 682T-174 697Q-155 697 -145 680Q-140 671 -107 599T-74 526Q-74 522 -88 511T-107 500Q-109 500 -113 502T-167 568T-219 637Q-222 643 -222 651\",769:\"-148 500Q-154 500 -163 511T-173 528Q-173 529 -172 530V532Q-170 534 -97 610T-21 688Q-8 697 4 697Q19 697 29 688T39 663T30 638Q26 631 -50 573L-135 507Q-144 500 -148 500\",770:\"17 555Q17 549 3 538T-15 527Q-20 527 -41 554Q-53 569 -62 580L-97 625L-158 578Q-172 567 -188 555T-212 536L-221 529Q-225 527 -226 527Q-232 527 -238 533T-248 546L-251 553Q-251 559 -248 562Q-246 564 -169 628T-90 693T-86 694Q-81 694 -78 691Q17 563 17 555\",771:\"-245 558Q-249 558 -256 565T-264 578Q-264 583 -261 586T-237 609Q-176 668 -142 668Q-117 668 -91 642T-47 615Q-26 615 5 641T39 668Q43 668 51 661T60 647Q59 643 40 623T-9 581T-60 559H-64Q-90 559 -115 585T-156 611Q-177 611 -210 585T-245 558\",772:\"-275 544Q-282 548 -282 554Q-282 561 -279 573T-271 588Q-269 589 -111 589H-27H12Q38 589 46 587T54 578Q54 574 51 563T47 550Q45 546 32 545Q15 544 -118 544H-275\",774:\"-237 641Q-237 694 -218 694H-213Q-195 694 -195 684Q-195 683 -195 679T-197 667T-198 650Q-198 611 -176 589T-117 566Q-74 566 -34 597T23 678Q27 689 30 691T43 694Q62 694 62 684Q62 671 49 645T14 589T-46 537T-123 515Q-175 515 -206 550T-237 641\",775:\"-165 599Q-162 631 -139 650T-93 669Q-65 669 -53 653T-41 620Q-41 593 -63 571T-116 548Q-134 548 -149 559T-165 599\",776:\"-251 601Q-251 626 -230 647T-180 669Q-139 669 -133 625Q-133 595 -155 575T-203 554Q-223 554 -237 567T-251 601ZM-72 599Q-72 632 -48 650T-2 669Q18 669 31 657T45 623Q45 592 22 573T-25 554Q-68 554 -72 599\",778:\"-199 610Q-199 654 -161 685T-79 716Q-39 716 -16 693Q3 674 3 647Q3 607 -34 575T-118 542Q-199 542 -199 610ZM-41 631T-41 655T-83 679H-89Q-129 679 -142 656Q-146 650 -151 632T-156 604Q-156 578 -113 578H-108Q-94 578 -86 579T-69 586T-52 605Q-41 631 -41 655\",779:\"-217 503Q-221 503 -234 510T-248 523Q-248 528 -205 602Q-200 610 -192 623T-180 644T-170 661T-159 676T-151 686T-142 694T-134 696Q-132 697 -121 697Q-88 694 -88 664Q-88 652 -97 640T-152 574Q-214 504 -217 503ZM-64 503Q-68 503 -81 510T-95 523Q-95 528 -52 602Q-47 610 -39 623T-27 644T-17 661T-6 676T2 686T11 694T19 696Q21 697 32 697Q65 694 65 664Q65 652 56 640T1 574Q-61 504 -64 503\",780:\"11 637Q16 637 22 624T29 607Q29 606 27 602Q26 600 -47 552T-125 502H-127Q-133 502 -184 553Q-236 602 -236 608Q-236 612 -224 625T-206 638L-202 637L-196 632Q-190 628 -179 620T-158 603L-116 570Q-109 572 -52 604T11 637\",989:\"477 261Q477 257 473 256T455 253T417 251T348 250H235L155 -77L146 -82Q137 -85 109 -85Q55 -85 55 -77L139 261Q224 596 226 598Q229 603 239 603Q240 603 254 603T290 603T341 604T405 605T477 605Q656 603 687 602T719 596Q719 589 692 588T513 585H319L282 427L242 272Q242 270 351 270Q388 270 410 270T444 269T460 267T469 265T477 261\",8211:\"98 248Q91 252 91 259Q91 279 100 284Q102 285 324 285H442H500Q536 285 545 283T554 274Q554 260 548 254Q546 250 538 249Q520 248 319 248H98\",8212:\"124 248Q117 252 117 259Q117 279 126 284Q128 285 579 285T1033 284Q1037 280 1037 278Q1038 276 1038 274Q1038 253 1029 250Q1026 248 575 248H124\",8213:\"124 248Q117 252 117 259Q117 279 126 284Q128 285 579 285T1033 284Q1037 280 1037 278Q1038 276 1038 274Q1038 253 1029 250Q1026 248 575 248H124\",8215:\"98 -62Q91 -58 91 -51Q91 -31 100 -26Q102 -25 324 -25H442H500Q536 -25 545 -27T554 -36Q554 -50 548 -56Q546 -60 538 -61Q520 -62 319 -62H98\",8216:\"249 379Q228 379 213 396T197 448Q197 533 271 627L278 635Q286 643 295 652T314 671T332 687T344 694Q349 694 355 685T362 671Q362 668 345 654T301 608T256 537Q238 493 240 491Q241 491 245 493T258 498T275 500Q296 500 311 488T326 454Q326 426 304 403T249 379\",8217:\"250 620Q250 647 272 670T325 694Q348 694 362 677T377 633V624Q377 566 343 506T275 412T231 379Q226 379 220 388T213 401T232 421T279 472T323 547Q335 573 335 582L331 580Q327 578 318 576T300 573Q277 573 264 585T250 620\",8220:\"295 379Q274 379 259 396T243 448Q243 533 317 627Q326 638 354 666T391 694Q395 694 402 686T409 673Q409 668 392 654T348 608T302 537Q284 493 286 491Q287 491 291 493T304 498T321 500Q342 500 357 488T372 454Q372 426 350 403T295 379ZM492 379Q471 379 456 396T440 448Q440 533 514 627Q523 638 551 666T588 694Q592 694 599 685T606 672T589 654T544 608T499 537Q481 493 483 491Q484 491 488 493T501 498T518 500Q539 500 554 488T569 454Q569 426 547 403T492 379\",8221:\"214 620Q214 647 236 670T289 694Q312 694 326 677T341 633V624Q341 588 327 550T294 482T253 428T216 392T196 379Q191 379 184 388T176 401Q176 404 195 421T243 472T287 547Q299 576 299 582L295 580Q291 578 282 576T264 573Q241 573 228 585T214 620ZM411 620Q411 647 433 670T486 694Q509 694 523 677T538 633V624Q538 588 524 550T491 482T450 428T413 392T393 379Q388 379 381 388T373 401Q373 404 392 421T440 472T484 547Q496 576 496 582L492 580Q488 578 479 576T461 573Q438 573 425 585T411 620\",8260:\"166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183Q157 -157 378 274T602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 691 406 241T170 -212Q166 -215 159 -215\",8463:\"150 475Q147 475 118 466T82 457Q73 457 64 467T54 487Q54 490 55 492Q63 506 64 506Q67 512 118 526Q162 541 169 546Q173 559 175 575Q181 596 181 604Q181 613 166 617Q164 617 153 618T135 619Q119 619 114 621T109 630Q109 636 114 656T122 681Q125 685 202 688Q272 695 286 695Q304 695 304 684Q304 682 291 628L278 577L386 612Q466 635 476 635T492 627T499 607Q499 593 489 586Q485 583 373 546L262 512Q262 511 248 455T233 397T236 397T244 404Q295 441 357 441Q405 441 445 417T485 333Q485 284 449 178T412 58T426 44Q447 44 466 68Q485 87 500 130L509 152H531H543Q562 152 562 144Q562 128 546 93T494 23T415 -13Q385 -13 359 3T322 44Q318 52 318 77Q318 99 352 196T386 337Q386 386 346 386Q318 386 286 370Q267 361 245 338T211 292Q207 287 193 235T162 113T138 21Q128 7 122 4Q105 -12 83 -12Q66 -12 54 -2T42 26Q42 45 98 257L151 475H150\",8710:\"574 715L582 716Q589 716 595 716Q612 716 616 714Q621 712 621 709Q622 707 705 359T788 8Q786 5 785 3L781 0H416Q52 0 50 2T48 6Q48 9 305 358T567 711Q572 712 574 715ZM599 346L538 602L442 474Q347 345 252 217T157 87T409 86T661 88L654 120Q646 151 629 220T599 346\",10744:\"166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183Q157 -157 378 274T602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 691 406 241T170 -212Q166 -215 159 -215\"},{})},6560:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.largeop=void 0;var H=L(9403),V=L(2827);T.largeop=(0,H.AddPaths)(V.largeop,{40:\"180 96T180 250T205 541T266 770T353 944T444 1069T527 1150H555Q561 1144 561 1141Q561 1137 545 1120T504 1072T447 995T386 878T330 721T288 513T272 251Q272 133 280 56Q293 -87 326 -209T399 -405T475 -531T536 -609T561 -640Q561 -643 555 -649H527Q483 -612 443 -568T353 -443T266 -270T205 -41\",41:\"35 1138Q35 1150 51 1150H56H69Q113 1113 153 1069T243 944T330 771T391 541T416 250T391 -40T330 -270T243 -443T152 -568T69 -649H56Q43 -649 39 -647T35 -637Q65 -607 110 -548Q283 -316 316 56Q324 133 324 251Q324 368 316 445Q278 877 48 1123Q36 1137 35 1138\",47:\"78 -649Q56 -646 56 -625Q56 -614 382 261T712 1140Q716 1150 732 1150Q754 1147 754 1126Q754 1116 428 240T98 -639Q94 -649 78 -649\",91:\"224 -649V1150H455V1099H275V-598H455V-649H224\",92:\"754 -625Q754 -649 731 -649Q715 -649 712 -639Q709 -635 383 242T55 1124Q54 1135 61 1142T80 1150Q92 1150 98 1140Q101 1137 427 262T754 -625\",93:\"16 1099V1150H247V-649H16V-598H196V1099H16\",123:\"547 -643L541 -649H528Q515 -649 503 -645Q324 -582 293 -466Q289 -449 289 -428T287 -200L286 42L284 53Q274 98 248 135T196 190T146 222L121 235Q119 239 119 250Q119 262 121 266T133 273Q262 336 284 449L286 460L287 701Q287 737 287 794Q288 949 292 963Q293 966 293 967Q325 1080 508 1148Q516 1150 527 1150H541L547 1144V1130Q547 1117 546 1115T536 1109Q480 1086 437 1046T381 950L379 940L378 699Q378 657 378 594Q377 452 374 438Q373 437 373 436Q350 348 243 282Q192 257 186 254L176 251L188 245Q211 236 234 223T287 189T340 135T373 65Q373 64 374 63Q377 49 378 -93Q378 -156 378 -198L379 -438L381 -449Q393 -504 436 -544T536 -608Q544 -611 545 -613T547 -629V-643\",125:\"119 1130Q119 1144 121 1147T135 1150H139Q151 1150 182 1138T252 1105T326 1046T373 964Q378 942 378 702Q378 469 379 462Q386 394 439 339Q482 296 535 272Q544 268 545 266T547 251Q547 241 547 238T542 231T531 227T510 217T477 194Q390 129 379 39Q378 32 378 -201Q378 -441 373 -463Q342 -580 165 -644Q152 -649 139 -649Q125 -649 122 -646T119 -629Q119 -622 119 -619T121 -614T124 -610T132 -607T143 -602Q195 -579 235 -539T285 -447Q286 -435 287 -199T289 51Q294 74 300 91T329 138T390 197Q412 213 436 226T475 244L489 250L472 258Q455 265 430 279T377 313T327 366T293 434Q289 451 289 472T287 699Q286 941 285 948Q279 978 262 1005T227 1048T184 1080T151 1100T129 1109L127 1110Q119 1113 119 1130\",710:\"1004 603Q1004 600 999 583T991 565L960 574Q929 582 866 599T745 631L500 698Q497 698 254 631Q197 616 134 599T39 574L8 565Q5 565 0 582T-5 603L26 614Q58 624 124 646T248 687L499 772Q999 604 1004 603\",732:\"296 691Q258 691 216 683T140 663T79 639T34 619T16 611Q13 619 8 628L0 644L36 662Q206 749 321 749Q410 749 517 710T703 670Q741 670 783 678T859 698T920 722T965 742T983 750Q986 742 991 733L999 717L963 699Q787 611 664 611Q594 611 484 651T296 691\",770:\"4 603Q4 600 -1 583T-9 565L-40 574Q-71 582 -134 599T-255 631L-500 698Q-503 698 -746 631Q-803 616 -866 599T-961 574L-992 565Q-995 565 -1000 582T-1005 603L-974 614Q-942 624 -876 646T-752 687L-501 772Q-1 604 4 603\",771:\"-704 691Q-742 691 -784 683T-860 663T-921 639T-966 619T-984 611Q-987 619 -992 628L-1000 644L-964 662Q-794 749 -679 749Q-590 749 -483 710T-297 670Q-259 670 -217 678T-141 698T-80 722T-35 742T-17 750Q-14 742 -9 733L-1 717L-37 699Q-213 611 -336 611Q-405 611 -515 651T-704 691\",8214:\"257 0V602H300V0H257ZM478 0V602H521V0H478\",8260:\"78 -649Q56 -646 56 -625Q56 -614 382 261T712 1140Q716 1150 732 1150Q754 1147 754 1126Q754 1116 428 240T98 -639Q94 -649 78 -649\",8593:\"112 421L120 424Q127 427 136 430T161 441T191 458T224 481T260 510T295 546T328 591L333 600L340 589Q380 527 431 489T555 421V377L543 381Q445 418 368 492L355 504V0H312V504L299 492Q222 418 124 381L112 377V421\",8595:\"312 96V600H355V96L368 108Q445 182 543 219L555 223V179L546 176Q538 173 529 169T505 158T475 141T442 119T407 90T372 53T339 9L334 0L327 11Q287 73 236 111T112 179V223L124 219Q222 182 299 108L312 96\",8657:\"142 329Q300 419 389 599Q389 598 399 579T420 541T452 494T497 438T558 383T636 329T708 294L721 289V246Q718 246 694 256T623 293T532 356L522 364L521 182V0H478V405L466 417Q436 450 389 516Q388 515 378 500T352 463T312 417L300 405V0H257V364L247 356Q202 320 155 293T82 256L57 246V289L70 294Q101 305 142 329\",8659:\"257 236V600H300V195L312 183Q342 150 389 84Q390 85 400 100T426 137T466 183L478 195V600H521V418L522 236L532 244Q576 280 623 307T696 344L721 354V311L708 306Q677 295 636 271Q478 181 389 1Q389 2 379 21T358 59T326 106T281 162T220 217T142 271T70 306L57 311V354Q60 354 83 345T154 308T247 244L257 236\",8719:\"220 812Q220 813 218 819T214 829T208 840T199 853T185 866T166 878T140 887T107 893T66 896H56V950H1221V896H1211Q1080 896 1058 812V-311Q1076 -396 1211 -396H1221V-450H725V-396H735Q864 -396 888 -314Q889 -312 889 -311V896H388V292L389 -311Q405 -396 542 -396H552V-450H56V-396H66Q195 -396 219 -314Q220 -312 220 -311V812\",8720:\"220 812Q220 813 218 819T214 829T208 840T199 853T185 866T166 878T140 887T107 893T66 896H56V950H552V896H542Q411 896 389 812L388 208V-396H889V812Q889 813 887 819T883 829T877 840T868 853T854 866T835 878T809 887T776 893T735 896H725V950H1221V896H1211Q1080 896 1058 812V-311Q1076 -396 1211 -396H1221V-450H56V-396H66Q195 -396 219 -314Q220 -312 220 -311V812\",8721:\"60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948\",8730:\"1001 1150Q1017 1150 1020 1132Q1020 1127 741 244L460 -643Q453 -650 436 -650H424Q423 -647 423 -645T421 -640T419 -631T415 -617T408 -594T399 -560T385 -512T367 -448T343 -364T312 -259L203 119L138 41L111 67L212 188L264 248L472 -474L983 1140Q988 1150 1001 1150\",8739:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612\",8741:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612ZM368 612Q373 627 388 627Q404 627 409 612Q410 610 410 306T409 0Q406 -15 389 -15Q371 -15 368 0V10Q368 19 368 35T368 73T368 122T367 179T367 241T367 306T367 370T367 433T367 489T368 538T368 576T368 602V612\",8747:\"114 -798Q132 -824 165 -824H167Q195 -824 223 -764T275 -600T320 -391T362 -164Q365 -143 367 -133Q439 292 523 655T645 1127Q651 1145 655 1157T672 1201T699 1257T733 1306T777 1346T828 1360Q884 1360 912 1325T944 1245Q944 1220 932 1205T909 1186T887 1183Q866 1183 849 1198T832 1239Q832 1287 885 1296L882 1300Q879 1303 874 1307T866 1313Q851 1323 833 1323Q819 1323 807 1311T775 1255T736 1139T689 936T633 628Q574 293 510 -5T410 -437T355 -629Q278 -862 165 -862Q125 -862 92 -831T55 -746Q55 -711 74 -698T112 -685Q133 -685 150 -700T167 -741Q167 -789 114 -798\",8748:\"114 -798Q132 -824 165 -824H167Q195 -824 223 -764T275 -600T320 -391T362 -164Q365 -143 367 -133Q439 292 523 655T645 1127Q651 1145 655 1157T672 1201T699 1257T733 1306T777 1346T828 1360Q884 1360 912 1325T944 1245Q944 1220 932 1205T909 1186T887 1183Q866 1183 849 1198T832 1239Q832 1287 885 1296L882 1300Q879 1303 874 1307T866 1313Q851 1323 833 1323Q819 1323 807 1311T775 1255T736 1139T689 936T633 628Q574 293 510 -5T410 -437T355 -629Q278 -862 165 -862Q125 -862 92 -831T55 -746Q55 -711 74 -698T112 -685Q133 -685 150 -700T167 -741Q167 -789 114 -798ZM642 -798Q660 -824 693 -824H695Q723 -824 751 -764T803 -600T848 -391T890 -164Q893 -143 895 -133Q967 292 1051 655T1173 1127Q1179 1145 1183 1157T1200 1201T1227 1257T1261 1306T1305 1346T1356 1360Q1412 1360 1440 1325T1472 1245Q1472 1220 1460 1205T1437 1186T1415 1183Q1394 1183 1377 1198T1360 1239Q1360 1287 1413 1296L1410 1300Q1407 1303 1402 1307T1394 1313Q1379 1323 1361 1323Q1347 1323 1335 1311T1303 1255T1264 1139T1217 936T1161 628Q1102 293 1038 -5T938 -437T883 -629Q806 -862 693 -862Q653 -862 620 -831T583 -746Q583 -711 602 -698T640 -685Q661 -685 678 -700T695 -741Q695 -789 642 -798\",8749:\"114 -798Q132 -824 165 -824H167Q195 -824 223 -764T275 -600T320 -391T362 -164Q365 -143 367 -133Q439 292 523 655T645 1127Q651 1145 655 1157T672 1201T699 1257T733 1306T777 1346T828 1360Q884 1360 912 1325T944 1245Q944 1220 932 1205T909 1186T887 1183Q866 1183 849 1198T832 1239Q832 1287 885 1296L882 1300Q879 1303 874 1307T866 1313Q851 1323 833 1323Q819 1323 807 1311T775 1255T736 1139T689 936T633 628Q574 293 510 -5T410 -437T355 -629Q278 -862 165 -862Q125 -862 92 -831T55 -746Q55 -711 74 -698T112 -685Q133 -685 150 -700T167 -741Q167 -789 114 -798ZM642 -798Q660 -824 693 -824H695Q723 -824 751 -764T803 -600T848 -391T890 -164Q893 -143 895 -133Q967 292 1051 655T1173 1127Q1179 1145 1183 1157T1200 1201T1227 1257T1261 1306T1305 1346T1356 1360Q1412 1360 1440 1325T1472 1245Q1472 1220 1460 1205T1437 1186T1415 1183Q1394 1183 1377 1198T1360 1239Q1360 1287 1413 1296L1410 1300Q1407 1303 1402 1307T1394 1313Q1379 1323 1361 1323Q1347 1323 1335 1311T1303 1255T1264 1139T1217 936T1161 628Q1102 293 1038 -5T938 -437T883 -629Q806 -862 693 -862Q653 -862 620 -831T583 -746Q583 -711 602 -698T640 -685Q661 -685 678 -700T695 -741Q695 -789 642 -798ZM1150 -798Q1168 -824 1201 -824H1203Q1231 -824 1259 -764T1311 -600T1356 -391T1398 -164Q1401 -143 1403 -133Q1475 292 1559 655T1681 1127Q1687 1145 1691 1157T1708 1201T1735 1257T1769 1306T1813 1346T1864 1360Q1920 1360 1948 1325T1980 1245Q1980 1220 1968 1205T1945 1186T1923 1183Q1902 1183 1885 1198T1868 1239Q1868 1287 1921 1296L1918 1300Q1915 1303 1910 1307T1902 1313Q1887 1323 1869 1323Q1855 1323 1843 1311T1811 1255T1772 1139T1725 936T1669 628Q1610 293 1546 -5T1446 -437T1391 -629Q1314 -862 1201 -862Q1161 -862 1128 -831T1091 -746Q1091 -711 1110 -698T1148 -685Q1169 -685 1186 -700T1203 -741Q1203 -789 1150 -798\",8750:\"114 -798Q132 -824 165 -824H167Q195 -824 223 -764T275 -600T320 -391T362 -164Q365 -143 367 -133Q382 -52 390 2Q314 40 276 99Q230 167 230 249Q230 363 305 436T484 519H494L503 563Q587 939 632 1087T727 1298Q774 1360 828 1360Q884 1360 912 1325T944 1245Q944 1220 932 1205T909 1186T887 1183Q866 1183 849 1198T832 1239Q832 1287 885 1296L882 1300Q879 1303 874 1307T866 1313Q851 1323 833 1323Q766 1323 688 929Q662 811 610 496Q770 416 770 249Q770 147 701 68T516 -21H506L497 -65Q407 -464 357 -623T237 -837Q203 -862 165 -862Q125 -862 92 -831T55 -746Q55 -711 74 -698T112 -685Q133 -685 150 -700T167 -741Q167 -789 114 -798ZM480 478Q460 478 435 470T380 444T327 401T287 335T271 249Q271 124 375 56L397 43L431 223L485 478H480ZM519 20Q545 20 578 33T647 72T706 144T730 249Q730 383 603 455Q603 454 597 421T582 343T569 276Q516 22 515 20H519\",8896:\"1055 -401Q1055 -419 1042 -434T1007 -450Q977 -450 963 -423Q959 -417 757 167L555 750L353 167Q151 -417 147 -423Q134 -450 104 -450Q84 -450 70 -436T55 -401Q55 -394 56 -390Q59 -381 284 270T512 925Q525 950 555 950Q583 950 597 926Q599 923 825 270T1054 -391Q1055 -394 1055 -401\",8897:\"55 900Q55 919 69 934T103 950Q134 950 147 924Q152 913 353 333L555 -250L757 333Q958 913 963 924Q978 950 1007 950Q1028 950 1041 935T1055 901Q1055 894 1054 891Q1052 884 826 231T597 -426Q583 -450 556 -450Q527 -450 512 -424Q510 -421 285 229T56 890Q55 893 55 900\",8898:\"57 516Q68 602 104 675T190 797T301 882T423 933T542 949Q594 949 606 948Q780 928 901 815T1048 545Q1053 516 1053 475T1055 49Q1055 -406 1054 -410Q1051 -427 1037 -438T1006 -450T976 -439T958 -411Q957 -407 957 37Q957 484 956 494Q945 643 831 747T554 852Q481 852 411 826Q301 786 232 696T154 494Q153 484 153 37Q153 -407 152 -411Q148 -428 135 -439T104 -450T73 -439T56 -410Q55 -406 55 49Q56 505 57 516\",8899:\"56 911Q58 926 71 938T103 950Q120 950 134 939T152 911Q153 907 153 463Q153 16 154 6Q165 -143 279 -247T556 -352Q716 -352 830 -248T956 6Q957 16 957 463Q957 907 958 911Q962 928 975 939T1006 950T1037 939T1054 911Q1055 906 1055 451Q1054 -5 1053 -16Q1029 -207 889 -328T555 -449Q363 -449 226 -331T62 -45Q57 -16 57 25T55 451Q55 906 56 911\",8968:\"224 -649V1150H511V1099H275V-649H224\",8969:\"16 1099V1150H303V-649H252V1099H16\",8970:\"224 -649V1150H275V-598H511V-649H224\",8971:\"252 -598V1150H303V-649H16V-598H252\",9001:\"112 244V258L473 1130Q482 1150 498 1150Q511 1150 517 1142T523 1125V1118L344 685Q304 587 257 473T187 305L165 251L344 -184L523 -616V-623Q524 -634 517 -641T499 -649Q484 -649 473 -629L112 244\",9002:\"112 -649Q103 -649 95 -642T87 -623V-616L266 -184L445 251Q445 252 356 466T178 898T86 1123Q85 1134 93 1142T110 1150Q126 1150 133 1137Q134 1136 317 695L498 258V244L317 -194Q134 -635 133 -636Q126 -649 112 -649\",9168:\"312 0V602H355V0H312\",10072:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612\",10216:\"112 244V258L473 1130Q482 1150 498 1150Q511 1150 517 1142T523 1125V1118L344 685Q304 587 257 473T187 305L165 251L344 -184L523 -616V-623Q524 -634 517 -641T499 -649Q484 -649 473 -629L112 244\",10217:\"112 -649Q103 -649 95 -642T87 -623V-616L266 -184L445 251Q445 252 356 466T178 898T86 1123Q85 1134 93 1142T110 1150Q126 1150 133 1137Q134 1136 317 695L498 258V244L317 -194Q134 -635 133 -636Q126 -649 112 -649\",10752:\"668 944Q697 949 744 949Q803 949 814 948Q916 937 1006 902T1154 826T1262 730T1336 638T1380 563Q1454 415 1454 250Q1454 113 1402 -14T1258 -238T1036 -391T755 -449Q608 -449 477 -392T255 -240T110 -16T56 250Q56 387 105 510T239 723T434 871T668 944ZM755 -352Q922 -352 1061 -269T1278 -48T1356 250Q1356 479 1202 652T809 850Q798 851 747 851Q634 851 527 806T337 682T204 491T154 251Q154 128 201 17T329 -176T521 -304T755 -352ZM665 250Q665 290 692 315T758 341Q792 339 818 315T845 250Q845 211 819 186T755 160Q716 160 691 186T665 250\",10753:\"668 944Q697 949 744 949Q803 949 814 948Q916 937 1006 902T1154 826T1262 730T1336 638T1380 563Q1454 415 1454 250Q1454 113 1402 -14T1258 -238T1036 -391T755 -449Q608 -449 477 -392T255 -240T110 -16T56 250Q56 387 105 510T239 723T434 871T668 944ZM706 299V850H704Q519 832 386 725T198 476Q181 433 169 379T156 300Q156 299 431 299H706ZM1116 732Q1054 778 982 807T871 842T810 849L804 850V299H1079Q1354 299 1354 300Q1354 311 1352 329T1336 402T1299 506T1228 620T1116 732ZM706 -350V201H431Q156 201 156 200Q156 189 158 171T174 98T211 -6T282 -120T395 -232Q428 -257 464 -277T527 -308T587 -328T636 -339T678 -346T706 -350ZM1354 200Q1354 201 1079 201H804V-350Q808 -349 838 -345T887 -338T940 -323T1010 -295Q1038 -282 1067 -265T1144 -208T1229 -121T1301 0T1349 158Q1354 188 1354 200\",10754:\"668 944Q697 949 744 949Q803 949 814 948Q916 937 1006 902T1154 826T1262 730T1336 638T1380 563Q1454 415 1454 250Q1454 113 1402 -14T1258 -238T1036 -391T755 -449Q608 -449 477 -392T255 -240T110 -16T56 250Q56 387 105 510T239 723T434 871T668 944ZM1143 709Q1138 714 1129 722T1086 752T1017 791T925 826T809 850Q798 851 747 851H728Q659 851 571 823T408 741Q367 713 367 709L755 320L1143 709ZM297 639Q296 639 282 622T247 570T205 491T169 382T154 250T168 118T204 9T247 -70T282 -122L297 -139L685 250L297 639ZM1213 -139Q1214 -139 1228 -122T1263 -70T1305 9T1341 118T1356 250T1342 382T1306 491T1263 570T1228 622L1213 639L825 250L1213 -139ZM367 -209Q373 -215 384 -224T434 -258T514 -302T622 -336T755 -352T887 -338T996 -302T1075 -259T1126 -224L1143 -209L755 180Q754 180 561 -14T367 -209\",10756:\"56 911Q58 926 71 938T103 950Q120 950 134 939T152 911Q153 907 153 463Q153 16 154 6Q165 -143 279 -247T556 -352Q716 -352 830 -248T956 6Q957 16 957 463Q957 907 958 911Q962 928 975 939T1006 950T1037 939T1054 911Q1055 906 1055 451Q1054 -5 1053 -16Q1029 -207 889 -328T555 -449Q363 -449 226 -331T62 -45Q57 -16 57 25T55 451Q55 906 56 911ZM507 554Q511 570 523 581T554 593Q571 593 585 582T603 554Q604 551 604 443V338H709Q817 338 820 337Q835 334 847 321T859 290Q859 254 819 241Q816 240 709 240H604V134Q604 48 604 34T598 11Q583 -15 555 -15Q526 -15 512 11Q507 20 507 34T506 134V240H401H344Q292 240 278 246Q251 259 251 290Q251 309 264 321T290 337Q293 338 401 338H506V443Q506 551 507 554\",10758:\"56 911Q60 927 72 938T103 950Q120 950 134 939T152 911Q153 907 153 277V-352H957V277Q957 907 958 911Q962 928 975 939T1006 950T1036 939T1054 911V891Q1054 871 1054 836T1054 754T1054 647T1055 525T1055 390T1055 250T1055 111T1055 -24T1055 -147T1054 -253T1054 -335T1054 -391V-411Q1047 -442 1016 -449Q1011 -450 552 -450L94 -449Q63 -439 56 -411V-391Q56 -371 56 -336T56 -254T56 -147T55 -25T55 110T55 250T55 389T55 524T55 647T56 753T56 835T56 891V911\",12296:\"112 244V258L473 1130Q482 1150 498 1150Q511 1150 517 1142T523 1125V1118L344 685Q304 587 257 473T187 305L165 251L344 -184L523 -616V-623Q524 -634 517 -641T499 -649Q484 -649 473 -629L112 244\",12297:\"112 -649Q103 -649 95 -642T87 -623V-616L266 -184L445 251Q445 252 356 466T178 898T86 1123Q85 1134 93 1142T110 1150Q126 1150 133 1137Q134 1136 317 695L498 258V244L317 -194Q134 -635 133 -636Q126 -649 112 -649\"},{10764:\"\\u222c\\u222c\"})},1500:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.monospace=void 0;var H=L(9403),V=L(2970);T.monospace=(0,H.AddPaths)(V.monospace,{32:\"\",33:\"206 565Q206 590 222 606T265 622Q287 621 303 606T319 565T314 392L308 216Q299 194 273 194H262Q247 194 241 195T228 200T217 216L211 392Q206 539 206 565ZM206 56Q206 83 223 99T265 115Q288 113 304 99T320 58Q320 33 303 17T262 0Q237 0 222 17T206 56\",34:\"122 575Q122 593 137 608T173 623Q196 623 210 608T225 575Q225 562 218 464Q212 373 211 361T201 341Q193 333 173 333Q154 333 146 341Q138 348 137 360T129 464Q122 561 122 575ZM299 575Q299 593 314 608T350 623Q373 623 387 608T402 575Q402 562 395 464Q389 373 388 361T378 341Q370 333 350 333Q331 333 323 341Q315 348 314 360T306 464Q299 561 299 575\",35:\"93 163Q74 163 65 164T46 173T36 198Q36 210 40 215T61 233H131V236Q132 239 140 307T149 377Q149 379 105 379L61 380Q36 392 36 414Q36 450 86 450Q91 450 99 450T112 449H159Q163 480 167 517Q168 524 170 545T174 573T180 591T191 607T210 611Q223 611 232 604T243 588L245 580Q245 565 238 511T230 451Q230 449 282 449H333Q337 480 341 517Q342 524 343 537T345 556T348 573T352 589T359 600T370 608T384 611Q395 611 406 602T419 580Q419 565 412 511T404 451Q404 449 431 449H442Q477 449 485 429Q489 421 489 414Q489 392 463 380L428 379H394V376Q393 373 385 305T376 235Q376 233 419 233H463L468 230Q472 227 473 227T477 223T482 218T486 213T488 206T489 198Q489 162 436 162Q430 162 422 162T412 163H366V161Q364 159 357 92Q356 85 355 73T353 54T350 37T346 22T339 11T328 3T314 0Q303 0 292 9T279 31Q279 37 287 96T295 162Q295 163 244 163H192V161Q190 159 183 92Q182 85 181 73T179 54T176 37T172 22T165 11T154 3T140 0Q129 0 118 9T105 31Q105 37 113 96T121 162Q121 163 93 163ZM323 377Q323 379 272 379H220V376Q219 373 211 305T202 235Q202 233 253 233H305V236Q306 239 314 307T323 377\",36:\"415 397Q392 397 377 411T362 448Q362 464 376 485Q369 498 362 506T346 520T332 528T315 533T300 538V445L301 353L311 350Q382 334 424 284T466 174Q466 115 425 65T303 -2L300 -3V-30Q300 -64 291 -74Q283 -82 262 -82H255Q234 -82 225 -60L224 -32V-4L213 -2Q152 6 106 51T59 170V180Q59 197 74 213Q89 227 110 227T146 213T162 174Q162 156 147 137Q153 123 161 112T176 95T191 85T205 79T216 76T224 74V283L213 285Q147 298 103 343T58 449Q58 516 108 560T224 614V643V654Q224 666 226 673T237 687T264 694Q289 693 294 683T300 642V615H303Q355 607 390 587T440 540T460 493T466 453Q466 425 451 411T415 397ZM137 452Q137 425 158 404T198 376T223 369Q224 369 224 453T223 537Q198 532 168 509T137 452ZM301 75Q307 75 325 83T365 116T387 171Q387 238 300 267V171Q300 75 301 75\",37:\"35 560Q35 607 54 645T110 693Q111 693 116 693T125 694Q165 692 187 651T210 560Q210 506 186 467T123 428Q84 428 60 466T35 560ZM139 560Q139 574 136 587T130 608T124 615Q122 617 120 614Q106 595 106 561Q106 516 121 506Q123 504 125 507Q139 526 139 560ZM123 -83Q107 -83 98 -73T88 -48Q88 -43 89 -41Q90 -37 229 316T370 675Q381 694 400 694Q416 694 426 684T436 659Q436 654 435 652Q434 647 295 294T153 -65Q144 -83 123 -83ZM314 50Q314 104 338 143T400 183Q439 183 464 144T489 50T465 -43T402 -82Q358 -82 336 -41T314 50ZM417 50Q417 71 413 85T405 102L401 106Q386 95 386 50Q386 29 390 15T398 -2L402 -6Q417 5 417 50\",38:\"96 462Q96 546 132 584T211 622Q255 622 284 583T314 474Q314 395 224 305L208 288Q213 275 226 251L265 185L269 179Q273 184 299 246L332 333L342 363Q342 364 341 365Q334 365 334 393Q334 406 334 410T340 420T356 431H412H440Q467 431 478 424T490 393Q490 376 484 367T470 357T448 355H441H415L399 312Q349 176 322 127L315 115L323 106Q360 65 393 65Q405 65 410 80T416 109Q416 140 452 140Q487 140 487 105Q487 56 460 23T391 -11L286 41L273 53L262 42Q212 -11 151 -11Q97 -11 63 33T28 143Q28 161 30 176T38 205T47 227T60 247T72 261T84 274T94 283L122 311L119 323Q96 392 96 462ZM243 474Q243 533 218 545L215 546Q212 546 210 546Q182 546 169 501Q167 492 167 466Q167 419 179 368L188 377Q234 425 242 461Q243 465 243 474ZM217 129Q185 174 154 235Q121 214 115 176Q113 168 113 143Q113 83 139 67Q141 66 152 66Q191 66 228 112L217 129\",39:\"205 554Q205 577 221 594T263 611Q302 611 325 577T349 490Q349 409 298 347Q285 330 258 309T214 287Q203 289 189 302T175 327Q175 341 185 349T213 369T245 402Q269 437 273 483V497Q264 496 263 496Q240 496 223 513T205 554\",40:\"437 -53Q437 -82 399 -82H394Q377 -82 342 -55Q259 7 213 102T166 306Q166 412 211 507T342 667Q377 694 393 694H399Q437 694 437 665Q437 654 426 643T397 620T356 584T311 525Q301 511 290 488T264 412T250 306Q250 191 300 105T422 -27Q437 -37 437 -53\",41:\"87 664Q87 694 126 694Q138 694 147 690T183 667Q266 605 312 510T358 306Q358 193 307 93T161 -70Q142 -82 126 -82Q105 -82 96 -73T87 -53Q87 -47 88 -44Q92 -36 116 -19T173 34T230 119Q273 206 273 306Q273 408 231 494T109 635Q87 649 87 664\",42:\"222 487Q224 501 235 510T262 520Q279 520 289 510T302 487Q302 458 301 429Q301 421 301 413T301 398T300 386T300 377V374Q300 373 301 373Q304 373 353 403T416 434Q432 434 444 423T456 393Q456 389 456 386T454 379T451 373T448 368T442 363T436 358T427 353T417 348T405 342T391 334Q345 309 339 305L388 279Q400 273 412 266T432 255T441 250Q456 238 456 218Q456 200 445 189T417 177Q403 177 354 207T301 238Q300 238 300 237V234Q300 231 300 226T300 214T301 199T301 182Q302 153 302 124Q300 109 289 100T262 90T235 100T222 124Q222 153 223 182Q223 190 223 198T223 213T224 225T224 234V237Q224 238 223 238Q220 238 171 208T108 177Q92 177 80 188T68 218Q68 237 79 246T134 277Q180 303 185 306L136 332Q124 338 112 345T92 356T83 361Q68 373 68 393Q68 411 79 422T107 434Q121 434 170 404T223 373Q224 373 224 374V377Q224 380 224 385T224 397T223 412T223 429Q222 458 222 487\",43:\"147 271Q138 271 122 271T98 270Q68 270 53 277T38 306T53 335T98 342Q105 342 121 342T147 341H227V423L228 505Q241 531 262 531Q268 531 273 530T282 525T287 519T293 511L297 505V341H377H430Q457 341 467 338T483 321Q487 313 487 306Q487 295 480 286T463 273Q457 271 377 271H297V107Q281 81 262 81Q250 81 242 87T230 100L228 107L227 189V271H147\",44:\"193 37T193 70T213 121T260 140Q302 140 327 108T353 36Q353 -7 336 -43T294 -98T249 -128T215 -139Q204 -139 189 -125Q177 -111 174 -101Q172 -84 183 -77T217 -61T253 -33Q261 -24 272 1L265 0Q234 0 214 18\",45:\"57 306Q57 333 86 341H438Q468 332 468 306T438 271H86Q57 280 57 306\",46:\"193 70Q193 105 214 122T258 140Q291 140 311 120T332 70Q332 44 314 23T262 1Q234 1 214 18T193 70\",47:\"94 -83Q78 -83 68 -73T58 -48Q58 -44 60 -36Q62 -31 227 314T399 673Q410 694 431 694Q445 694 455 684T466 659Q466 656 464 648Q463 643 298 298T125 -62Q114 -83 94 -83\",58:\"193 361Q193 396 214 413T258 431Q291 431 311 411T332 361Q332 335 314 314T262 292Q234 292 214 309T193 361ZM193 70Q193 105 214 122T258 140Q291 140 311 120T332 70Q332 44 314 23T262 1Q234 1 214 18T193 70\",59:\"193 361Q193 396 214 413T258 431Q291 431 311 411T332 361Q332 335 314 314T262 292Q234 292 214 309T193 361ZM193 70Q193 105 214 122T259 140Q301 140 319 108T337 33Q337 -38 291 -88T214 -139Q203 -139 189 -126T175 -97Q175 -85 182 -78T200 -66T225 -50T249 -17Q256 -3 256 0Q252 1 248 1Q242 2 235 5T218 15T200 36T193 70\",60:\"468 90Q468 76 458 66T433 55Q426 55 419 58Q413 61 243 168T68 280Q57 291 57 306T68 332Q72 335 241 442T416 553Q424 557 432 557Q447 557 457 547T468 522T456 496Q454 494 305 399L158 306L305 213Q341 190 390 159Q443 125 452 119T464 106V105Q468 97 468 90\",61:\"38 382Q38 409 67 417H457Q487 408 487 382Q487 358 461 348H64Q51 352 45 360T38 376V382ZM67 195Q38 204 38 230Q38 255 62 264Q66 265 264 265H461L464 264Q467 262 469 261T475 256T481 249T485 240T487 230Q487 204 457 195H67\",62:\"57 522Q57 539 67 548T90 557Q98 557 105 554Q111 551 281 444T456 332Q468 320 468 306T456 280Q452 276 282 169T105 58Q98 55 91 55Q79 55 68 63T57 90Q57 105 68 116Q70 118 219 213L366 306L219 399Q75 491 71 494Q57 507 57 522\",63:\"62 493Q62 540 107 578T253 617Q366 617 414 578T462 490Q462 459 445 434T411 400L394 390Q315 347 296 287Q294 278 293 247V217Q285 201 278 198T246 194T216 197T201 215V245V253Q201 379 351 456Q366 464 375 477Q377 482 377 490Q377 517 339 528T251 540Q182 540 159 517Q166 503 166 490Q166 468 151 453T114 438Q96 438 79 451T62 493ZM190 58Q190 85 208 100T249 115Q272 113 288 99T304 58Q304 33 287 17T246 0T206 16T190 58\",64:\"44 306Q44 445 125 531T302 617Q332 617 358 607T411 574T456 502T479 387Q481 361 481 321Q481 203 421 143Q381 103 332 103Q266 103 225 165T183 307Q183 390 227 449T332 508Q358 508 378 498Q350 541 304 541Q229 541 172 473T115 305Q115 208 171 140T306 71H310Q358 71 397 105Q409 115 436 115Q458 115 462 113Q481 106 481 86Q481 73 468 61Q401 -6 305 -6Q262 -6 217 14T133 71T69 170T44 306ZM410 306Q410 361 386 396T333 431Q300 431 277 394T254 305Q254 256 276 218T332 180Q364 180 387 217T410 306\",91:\"237 -82Q221 -78 214 -58V305Q214 669 216 673Q220 687 231 690T278 694H350H461Q462 693 467 690T474 685T478 679T482 670T483 656Q483 632 471 625T428 617Q422 617 406 617T379 618H298V-7H379H420Q459 -7 471 -13T483 -45Q483 -55 483 -59T477 -70T461 -82H237\",92:\"58 659Q58 673 68 683T93 694Q114 694 125 673Q132 659 297 314T464 -36Q466 -44 466 -48Q466 -66 454 -74T431 -83Q410 -83 399 -62Q391 -47 226 298T60 648Q58 656 58 659\",93:\"41 656Q41 681 53 688T99 695Q107 695 133 695T177 694H288Q307 681 310 669V-58Q303 -76 288 -82H64Q41 -73 41 -45Q41 -21 53 -14T96 -6Q102 -6 118 -6T145 -7H226V618H145H100Q67 618 54 625T41 656\",94:\"138 460Q121 460 109 479T96 512Q96 527 106 534Q109 536 178 571T253 609Q256 611 264 611Q272 610 343 574Q357 567 369 561T389 550T402 543T411 538T416 535T420 532T422 529T425 525Q428 518 428 512Q428 498 416 479T386 460H384Q377 460 316 496L262 526L208 496Q147 460 138 460\",95:\"57 -60Q57 -33 86 -25H438Q468 -34 468 -60T438 -95H86Q57 -86 57 -60\",96:\"176 479Q176 563 227 622T310 681Q324 680 337 667T350 641Q350 627 340 619T312 599T280 566Q256 531 252 485V471Q261 472 262 472Q285 472 302 455T320 414Q320 389 303 373T261 357Q223 357 200 391T176 479\",123:\"430 -7H436Q449 -7 456 -8T469 -19T475 -45Q475 -69 466 -76T434 -83H419Q386 -82 363 -80T308 -69T253 -41T223 7L221 17L220 118V220L218 224Q215 229 214 230T210 235T204 241T195 246T184 252T170 257T151 262T127 265Q118 267 100 267T69 270T52 283Q50 288 50 306V314Q50 335 67 341Q68 342 102 343T172 355T217 386L220 392V493L221 595Q225 611 230 621T251 650T304 679T395 693L406 694Q418 694 426 694Q458 694 466 685Q475 676 475 656T466 627Q458 618 430 618Q319 618 305 587L304 486Q304 476 304 458T305 431Q305 385 295 358T251 311L243 306Q243 305 254 298T281 274T302 231Q304 223 304 125L305 25Q309 16 316 10T352 -1T430 -7\",124:\"228 668Q241 694 262 694Q268 694 273 693T282 688T287 682T293 674L297 668V-57Q282 -82 262 -82Q239 -82 228 -57V668\",125:\"49 655Q49 674 56 682T73 692T106 694Q141 693 167 690T224 677T275 647T303 595L305 392Q313 367 347 356T417 344T457 341Q475 335 475 306Q475 292 473 285T464 273T451 269T430 267Q352 262 327 246Q311 236 305 220L303 17L301 7Q294 -16 277 -33T242 -60T196 -74T150 -80T106 -83Q78 -83 72 -82T58 -74Q49 -65 49 -44Q49 -24 58 -16Q66 -7 94 -7Q143 -7 171 -1T207 10T220 25V125Q220 223 222 231Q228 257 243 274T270 299L281 306Q234 329 222 381Q220 387 220 486V587Q212 597 207 601T173 612T94 618Q66 618 58 627Q49 635 49 655\",126:\"125 467Q113 467 100 480T87 509Q88 520 111 543Q172 602 209 609Q219 611 224 611Q246 611 263 596T290 566T304 551Q319 551 367 594Q383 610 396 610H400Q411 610 424 597T437 568Q436 557 413 534Q348 469 305 466Q278 466 260 481T234 511T220 526Q205 526 157 483Q141 467 129 467H125\",127:\"104 565Q104 590 120 600T155 611Q175 611 180 610Q217 599 217 565Q217 545 202 532T166 519H159H155Q120 519 107 547Q104 553 104 565ZM307 565Q307 580 317 593T346 610Q348 610 350 610T354 611Q355 612 367 612Q395 611 408 597T421 565T409 534T365 519H358Q336 519 322 532T307 565\",160:\"\",305:\"411 76Q441 76 451 69T462 38Q462 29 462 26T460 18T453 9T440 1H94Q72 8 72 33V38Q72 46 72 49T74 58T81 68T94 76H233V355H167L102 356Q80 363 80 393Q80 418 91 425T138 432Q145 432 165 432T200 431H295Q297 429 303 425T310 420T314 415T317 404T317 389T318 363Q318 354 318 314T317 241V76H378H411\",567:\"75 -91T100 -91T138 -107T152 -144V-150L160 -151H193H203Q241 -151 267 -121Q284 -97 288 -73T292 23V151V355H218L145 356Q123 365 123 387V393Q123 422 145 430H148Q151 430 156 430T169 430T185 430T205 431T227 431T251 431H354Q356 430 360 427T365 424T369 420T372 416T373 410T375 402T376 391T377 376T377 356Q377 345 377 286T376 176Q376 -67 371 -88Q362 -123 342 -151T299 -194Q254 -228 180 -228Q84 -226 56 -177Q49 -162 48 -148Q48 -122 61 -107\",697:\"211 572Q211 593 226 608T262 623Q281 623 297 610T313 573Q313 561 307 465Q301 370 299 357T284 336Q279 334 262 334Q240 334 231 343Q226 350 225 362T217 465Q211 549 211 572\",768:\"-409 569Q-409 586 -399 596T-377 610Q-376 610 -372 610T-365 611Q-355 610 -284 588T-210 563Q-195 556 -195 537Q-195 533 -197 522T-208 498T-229 485Q-238 485 -312 508T-388 533Q-400 538 -405 552Q-409 559 -409 569\",769:\"-297 485Q-315 485 -323 505T-331 537Q-331 556 -316 563Q-307 569 -170 610Q-169 610 -165 610T-157 611Q-141 609 -131 600T-119 584T-117 569Q-117 555 -124 545T-138 533Q-140 531 -214 508T-297 485\",770:\"-387 460Q-404 460 -416 479T-429 512Q-429 527 -419 534Q-416 536 -347 571T-272 609Q-269 611 -261 611Q-254 610 -182 574Q-168 567 -156 561T-136 550T-123 543T-114 538T-109 535T-105 532T-103 529T-100 525Q-97 518 -97 512Q-97 498 -109 479T-139 460H-141Q-148 460 -209 496L-263 526L-317 496Q-378 460 -387 460\",771:\"-400 467Q-412 467 -425 480T-438 509Q-437 520 -414 543Q-353 602 -316 609Q-306 611 -301 611Q-279 611 -262 596T-235 566T-221 551Q-206 551 -158 594Q-142 610 -129 610H-125Q-114 610 -101 597T-88 568Q-89 557 -112 534Q-177 469 -220 466Q-247 466 -265 481T-291 511T-305 526Q-320 526 -368 483Q-384 467 -396 467H-400\",772:\"-429 500Q-440 504 -445 511T-450 522T-452 536Q-452 552 -451 556Q-445 571 -434 574T-379 578Q-369 578 -330 578T-261 577H-96Q-94 575 -90 573T-85 569T-81 564T-77 558T-75 550T-74 538Q-74 522 -78 515T-96 500H-429\",774:\"-446 579Q-446 611 -412 611H-407Q-383 609 -378 599T-358 587Q-340 583 -263 583H-235Q-159 583 -152 593Q-145 611 -120 611H-117H-115Q-79 611 -79 577Q-80 552 -95 536T-140 514T-191 506T-251 504H-263H-274Q-311 504 -334 505T-386 513T-431 536T-446 579\",776:\"-421 565Q-421 590 -405 600T-370 611Q-350 611 -345 610Q-308 599 -308 565Q-308 545 -323 532T-359 519H-366H-370Q-405 519 -418 547Q-421 553 -421 565ZM-218 565Q-218 580 -208 593T-179 610Q-177 610 -175 610T-171 611Q-170 612 -158 612Q-130 611 -117 597T-104 565T-116 534T-160 519H-167Q-189 519 -203 532T-218 565\",778:\"-344 558Q-344 583 -321 601T-262 619Q-225 619 -204 600T-182 560Q-182 536 -205 518T-264 499Q-301 499 -322 519T-344 558ZM-223 559Q-223 570 -234 579T-261 588T-289 580T-303 559Q-303 549 -293 540T-263 530T-234 539T-223 559\",780:\"-427 525Q-427 542 -417 559T-392 577Q-385 577 -323 553L-263 530L-203 553Q-143 576 -136 576Q-118 576 -109 559T-99 525Q-99 508 -107 502T-161 481Q-177 475 -186 472Q-256 449 -263 449Q-272 449 -339 472T-412 498Q-420 501 -423 508T-427 520V525\",913:\"191 76Q212 75 220 68T229 38Q229 10 208 1H129H80Q48 1 38 7T28 38Q28 51 29 57T40 69T70 76Q89 76 89 78Q90 79 117 205T173 461T205 599Q212 623 250 623H262H273Q312 623 319 599Q322 591 350 461T406 205T435 78Q435 76 454 76H458Q484 76 493 59Q496 53 496 38Q496 11 478 3Q474 1 395 1H317Q295 8 295 38Q295 65 311 73Q316 75 333 76L348 77V78Q348 80 341 112L334 143H190L183 112Q176 80 176 78Q175 76 178 76Q180 76 191 76ZM318 221Q313 238 288 366T263 519Q263 526 262 527Q261 527 261 520Q261 493 236 365T206 221Q206 219 262 219T318 221\",914:\"39 1Q17 10 17 32V38V46Q17 65 34 73Q40 76 61 76H84V535H61H54Q27 535 19 553Q17 557 17 573Q17 583 17 587T23 599T39 610Q40 611 179 611Q320 610 332 607Q332 607 339 605Q394 591 427 547T461 454Q461 413 436 378T369 325L358 320Q405 311 443 270T482 169Q482 112 445 64T345 3L334 1H39ZM309 533Q302 535 234 535H168V356H230Q284 357 296 358T323 368Q346 380 361 402T377 452Q377 482 358 505T309 533ZM398 176Q396 218 371 246T315 279Q310 280 237 280H168V76H239Q316 77 327 81Q329 82 334 84Q398 107 398 176\",915:\"466 611Q468 609 473 606T479 602T483 598T486 593T487 586T488 576T488 562V526V488Q488 452 470 444Q466 442 446 442Q421 442 413 450Q406 457 405 463T404 501V535H185V76H222H239Q260 76 270 69T281 38Q281 12 270 6T209 0H155H104Q48 0 37 5T25 38Q25 59 35 69Q44 76 76 76H101V535H76H64Q36 535 27 552Q25 557 25 573T27 594Q33 606 43 608T106 611H258H466\",916:\"232 622H237Q242 622 249 622T264 623H293Q295 622 300 619T308 613T314 608T319 601Q322 597 405 316T489 19Q489 9 473 1Q471 0 262 0T51 1Q35 9 35 19Q35 34 118 315T205 601Q214 616 232 622ZM267 501Q266 504 265 510T263 521T261 526V523Q261 508 211 332Q142 91 138 82H386Q385 84 345 224Q281 439 267 501\",917:\"374 271Q374 241 367 232T332 223Q307 223 299 231Q290 240 290 263V279H173V76H418V118V144Q418 167 426 176T460 186Q491 186 500 166Q502 161 502 93V52Q502 25 499 17T480 1H41Q19 9 19 32V38Q19 63 36 73Q42 76 65 76H89V535H65H55Q44 535 38 537T25 548T19 573Q19 602 41 610H47Q53 610 63 610T88 610T121 610T160 611T204 611T251 611H458Q460 609 465 606T471 602T475 598T478 593T479 586T480 576T480 562V526V488Q480 452 462 444Q458 442 438 442Q413 442 405 450Q398 457 397 463T396 501V535H173V355H290V371Q290 394 299 403T332 412Q363 412 372 392Q374 387 374 317V271\",918:\"71 1Q60 5 55 11T49 23T48 39V46Q48 56 58 73T131 183Q171 242 197 282L366 535H144V501Q144 470 143 464T135 450Q127 442 102 442H94Q71 442 62 461Q60 466 60 527L61 589Q70 607 83 610H88Q93 610 102 610T124 610T154 610T188 611T227 611T270 611H454Q456 609 461 606T467 601T471 597T474 591T475 584T476 572V565Q476 555 466 538T393 428Q353 369 327 329L158 76H397V120V146Q397 169 405 179T439 189Q470 189 479 169Q481 164 481 95V48Q481 24 478 16T459 1H71\",919:\"16 571Q16 597 27 604T74 611H125H208Q223 602 226 596T230 573Q230 559 227 551T217 540T204 536T186 535H165V356H359V535H338H333Q306 535 297 552Q295 556 295 573Q295 586 295 590T301 600T317 611H486Q501 602 504 596T508 573Q508 559 505 551T495 540T482 536T464 535H443V76H464H470Q482 76 489 75T502 64T508 38Q508 10 486 1H317Q306 5 301 11T296 21T295 38V44Q295 66 311 73Q318 76 338 76H359V280H165V76H186H192Q204 76 211 75T224 64T230 38Q230 10 208 1H39Q28 5 23 11T18 21T17 38V44Q17 66 33 73Q40 76 60 76H81V535H60Q45 535 38 536T24 545T16 571\",920:\"102 588Q140 621 240 621Q323 621 335 620Q393 613 422 588Q450 560 459 493T468 306Q468 185 460 118T422 23Q382 -10 289 -10H262H235Q142 -10 102 23Q74 50 65 118T56 306Q56 427 64 494T102 588ZM262 66Q285 66 300 67T329 74T351 86T366 108T376 138T381 181T383 235T384 306Q384 452 371 492T304 544Q296 545 251 545Q230 545 215 543T188 534T169 520T155 497T147 466T143 423T141 371T140 306Q140 247 141 215T146 151T158 107T179 82T212 69T262 66ZM179 356Q187 378 219 378H223Q240 377 249 372T260 360L261 355Q261 353 262 353T263 355Q263 362 272 369Q280 377 304 377H310Q325 377 331 374T346 356V256Q338 241 331 238T309 234H304Q280 234 272 242Q263 249 263 256Q263 258 262 258T261 256Q261 249 252 242Q244 234 220 234H216Q186 234 179 256V356\",921:\"400 76Q431 76 441 69T452 38Q452 29 452 26T450 18T443 9T430 1H95Q84 6 79 12T73 23T72 38Q72 65 90 73Q96 76 157 76H220V535H157H124Q93 535 83 542T72 573Q72 603 93 610Q97 611 264 611H430Q432 609 436 607T444 602T449 594Q452 588 452 573Q452 546 434 538Q428 535 367 535H304V76H367H400\",922:\"18 549T18 573T29 604T70 611H118H193Q207 603 210 596T214 573Q214 549 198 538Q191 535 172 535H152V421Q152 344 152 326T153 309L242 422L329 534Q327 535 322 536T314 538T308 542T303 548T300 558T298 573Q298 600 316 608Q322 611 392 611H463Q477 602 481 595T485 573Q485 535 446 535H441H420L281 357L436 77L454 76Q473 75 478 73Q495 62 495 38Q495 10 473 1H345Q334 5 329 11T324 21T323 38Q323 51 324 56T332 68T355 77L233 296L152 192V76H172Q191 76 198 73Q214 63 214 38Q214 9 193 1H41Q18 8 18 38Q18 61 35 73Q42 76 61 76H81V535H61Q42 535 35 538Q18 549 18 573\",923:\"30 38Q30 57 38 66T70 76Q88 76 88 78Q89 79 117 207T173 466T205 602Q213 617 231 622H236Q241 622 249 622T264 623H294Q315 609 319 602Q321 598 350 468T407 208T435 78Q436 76 454 76Q470 76 478 73Q495 62 495 38Q495 10 473 1H313Q290 10 290 38Q290 56 297 65T310 74T331 76Q350 76 350 78Q349 80 328 176T285 383T263 520Q263 526 262 527Q261 527 261 521Q261 497 240 388T198 181T174 78Q174 76 193 76Q220 75 227 65Q234 56 234 38Q234 28 234 24T228 13T212 1H52Q30 9 30 32V38\",924:\"50 535Q37 536 31 537T18 547T12 573Q12 598 22 604T62 611H91H121Q147 611 158 607T178 587Q183 579 222 446T261 293Q261 289 262 288Q263 288 263 292Q263 311 298 434T346 588Q353 603 365 607T402 611H435H450Q488 611 500 605T512 573Q512 556 506 547T493 537T474 535H459V76H474Q487 75 493 74T505 64T512 38Q512 11 494 3Q490 1 424 1H386Q355 1 345 7T335 38Q335 55 341 64T354 74T373 76H388V302Q388 512 387 519Q382 482 346 359T304 228Q292 204 262 204T220 228Q215 237 179 359T137 519Q136 512 136 302V76H151Q164 75 170 74T182 64T189 38Q189 11 171 3Q167 1 101 1H63Q32 1 22 7T12 38Q12 55 18 64T31 74T50 76H65V535H50\",925:\"20 571Q20 598 30 604T73 611H105H136Q152 611 160 611T177 607T189 601T198 587T206 568T217 537T231 497Q354 142 365 95L368 84V535H347H342Q314 535 306 552Q304 556 304 573Q304 586 304 590T310 600T326 611H482Q497 602 500 596T504 573Q504 559 501 551T491 540T478 536T460 535H439V25Q432 7 424 4T389 0H374Q334 0 322 31L293 115Q171 468 159 517L156 528V76H177H183Q195 76 202 75T215 64T221 38Q221 10 199 1H43Q32 5 27 11T22 21T21 38V44Q21 66 37 73Q44 76 64 76H85V535H64Q49 535 42 536T28 545T20 571\",926:\"37 555V569Q37 605 60 610H66Q71 610 81 610T105 610T137 610T175 611T217 611T264 611H465Q467 609 471 606T477 602T481 599T484 594T485 588T487 580T487 570T487 554Q487 526 486 520T478 506Q470 498 445 498T412 506Q403 515 403 531V539H121V531Q121 498 86 498H79H71Q48 498 39 517Q37 522 37 555ZM109 318V346Q109 366 113 374T132 389H170Q193 379 193 359V354H331V359Q331 379 354 389H392Q407 381 411 373T415 342V318V290Q415 270 411 262T392 247H354Q331 257 331 277V282H193V277Q193 257 170 247H132Q117 255 113 263T109 294V318ZM56 1Q41 7 37 15T33 42V58V80Q33 101 41 110T77 119Q87 118 91 118T103 114T114 103T117 83V72H407V83Q407 101 416 110T449 119T482 110Q489 103 490 97T491 59V41Q491 24 487 16T469 1H56\",927:\"102 588Q140 621 240 621Q323 621 335 620Q393 613 422 588Q450 560 459 493T468 306Q468 185 460 118T422 23Q382 -10 289 -10H262H235Q142 -10 102 23Q74 50 65 118T56 306Q56 427 64 494T102 588ZM363 513Q357 523 347 530T324 540T302 544T280 546H268Q192 546 167 521Q150 501 145 452T140 300Q140 235 142 197T151 130T172 89T207 71T262 65Q317 65 341 81T374 144T384 300Q384 474 363 513\",928:\"60 535Q45 535 38 536T24 545T16 571Q16 603 36 609Q41 611 264 611H486Q501 602 504 596T508 573Q508 559 505 551T495 540T482 536T464 535H443V76H464H470Q482 76 489 75T502 64T508 38Q508 10 486 1H317Q306 5 301 11T296 21T295 38V44Q295 66 311 73Q318 76 338 76H359V535H165V76H186H192Q204 76 211 75T224 64T230 38Q230 10 208 1H39Q28 5 23 11T18 21T17 38V44Q17 66 33 73Q40 76 60 76H81V535H60\",929:\"41 1Q19 9 19 32V38Q19 63 36 73Q42 76 65 76H89V535H65H55Q38 535 29 543T19 576Q19 603 41 610H49Q57 610 70 610T100 610T136 611T175 611Q190 611 216 611T255 612Q321 612 363 598T441 537Q480 486 480 427V421Q480 354 447 311T378 251Q339 230 275 230H239H173V76H197Q220 76 227 73Q244 62 244 38Q244 10 222 1H41ZM396 421Q396 461 369 491T300 533Q294 534 233 535H173V306H233Q294 307 300 308Q345 319 370 352T396 421\",931:\"40 575Q40 576 40 579T41 583T41 588T43 593T46 597T50 602T55 606T63 610H68Q74 610 84 610T108 610T139 610T176 611T219 611T264 611H462Q464 609 469 606T475 602T479 598T482 593T483 586T484 576T484 562V526V488Q484 452 466 444Q462 442 442 442Q417 442 409 450Q402 457 401 463T400 501V535H153Q153 533 218 430Q233 405 250 378T276 336T286 319Q290 311 290 307Q290 296 239 211Q229 194 223 184L161 78H400V112Q400 142 401 149T409 163Q418 172 442 172Q473 172 482 152Q484 147 484 86V49Q484 25 481 17T462 1H63Q41 10 41 31Q41 39 43 44Q43 45 81 109T157 238L195 303Q195 307 119 430T41 557T40 575\",932:\"129 38Q129 51 129 55T135 65T151 76H220V535H110V501Q110 470 109 464T101 450Q93 442 68 442H60Q37 442 28 461Q26 466 26 527L27 589Q36 607 49 610H55Q61 610 72 610T97 610T131 610T170 611T215 611T264 611H476Q478 609 483 606T489 602T493 598T496 593T497 586T498 576T498 562V526V488Q498 452 480 444Q476 442 456 442Q431 442 423 450Q416 457 415 463T414 501V535H304V76H374Q389 67 392 61T396 38Q396 10 374 1H151Q140 5 135 11T130 21T129 38\",933:\"38 494Q38 549 74 585T152 621Q168 621 179 619T209 606T241 566T262 492Q262 494 265 507T270 526T276 547T285 569T298 589T315 606T337 617T365 622Q416 622 451 584T486 494Q486 470 469 461Q464 459 445 459H437Q416 459 406 476Q404 479 403 502T393 541T365 558Q350 558 340 548T323 519T312 475T307 419T305 354T304 282Q304 254 304 239V76H358Q372 67 376 60T380 38Q380 10 358 1H167Q145 9 145 32V38Q145 54 148 60T167 76H220V239Q220 256 220 289T220 338T219 383T217 426T214 463T209 497T201 522T189 543T174 555Q168 558 159 558Q139 558 131 541T121 502T118 476Q108 459 84 459H79H71Q38 459 38 494\",934:\"139 573V578Q139 603 161 610H166Q172 610 182 610T204 610T232 611T264 611H364Q379 602 382 595T385 573Q385 544 364 536L334 535H304V441H306Q313 440 325 438T367 426T421 403T464 364T483 306Q483 251 430 216T317 172Q315 172 313 172T308 170H306H304V76H364Q379 67 382 60T385 38Q385 28 385 24T379 12T364 1H161Q139 8 139 33V38Q139 46 139 49T141 58T148 68T161 76H220V170H218Q211 171 199 173T157 185T103 208T60 248T41 306Q41 361 94 396T208 439Q210 439 212 439T216 440L218 441H220V535H190L161 536Q139 543 139 573ZM124 306Q124 286 147 271T194 252L218 247Q220 247 220 306V364H218Q212 364 192 359T148 340T124 306ZM400 305Q400 325 377 340T330 360L306 364Q304 364 304 306Q304 247 306 247Q312 247 332 252T376 271T400 305\",935:\"39 571Q39 597 49 604T93 611H141H218Q233 602 236 595T239 573Q239 538 210 535Q202 535 202 534T215 507T243 454L257 428L307 535H298Q266 538 266 573Q266 584 267 588T273 598T289 611H366H401Q442 611 454 605T466 573Q466 546 448 538Q442 535 421 535H398L299 327Q299 323 362 201L426 77L449 76Q467 76 475 75T489 65T495 38Q495 11 477 3Q473 1 395 1H317Q295 8 295 38Q295 73 325 76L334 77Q333 78 314 117T276 196L257 235L239 196Q221 157 204 118T186 77Q190 76 196 76Q211 74 218 67T227 55T228 38Q228 28 227 24T221 13T206 1H50Q28 9 28 32V38Q28 63 45 73Q51 76 73 76H96L214 324Q215 327 162 431L108 535H85H79Q67 535 60 536T46 546T39 571\",936:\"37 439Q38 451 40 457T52 469T77 475H79Q96 475 107 473T132 456T152 411Q152 409 153 396T154 372V365Q154 291 198 261Q215 251 219 251Q220 251 220 393V535H193L167 536Q145 545 145 567V573Q145 602 167 610Q168 611 264 611H358Q372 602 376 595T380 573Q380 545 358 536L331 535H304V393Q304 251 305 251Q307 251 310 252T323 259T339 272T355 295T367 331Q368 337 370 372Q370 382 371 395T372 411Q376 434 384 448T404 467T425 474T447 475Q461 474 467 473T480 463T487 437Q487 419 481 412Q476 403 459 398Q457 390 453 344T431 263Q415 228 383 205T332 177T306 172H304V76H358Q372 67 376 60T380 38Q380 10 358 1H167Q145 9 145 32V38Q145 54 148 60T167 76H220V172H218Q211 172 192 177T141 205T93 263Q74 298 71 343T67 391L66 398Q47 403 42 411T37 433V439\",937:\"40 404Q40 498 106 560T258 622Q357 622 420 558T484 406Q484 359 469 311T428 205T392 117Q382 84 382 78Q382 76 402 76H421V87Q421 110 431 116T457 123Q474 123 483 114Q490 107 491 100T492 61V42Q492 11 474 3Q470 1 397 1H324Q302 9 302 32V39Q302 104 351 225T400 405Q400 462 361 504T262 546Q200 546 162 504T124 405Q124 346 171 230T223 42V36Q223 11 205 3Q201 1 128 1H55Q39 7 33 23L32 60V80Q32 94 34 102T44 116T68 123Q103 123 103 87V76H123Q142 76 142 78Q142 100 117 156T66 282T40 404\",8215:\"57 -60Q57 -33 86 -25H438Q468 -34 468 -60T438 -95H86Q57 -86 57 -60\",8242:\"211 572Q211 593 226 608T262 623Q281 623 297 610T313 573Q313 561 307 465Q301 370 299 357T284 336Q279 334 262 334Q240 334 231 343Q226 350 225 362T217 465Q211 549 211 572\",8260:\"94 -83Q78 -83 68 -73T58 -48Q58 -44 60 -36Q62 -31 227 314T399 673Q410 694 431 694Q445 694 455 684T466 659Q466 656 464 648Q463 643 298 298T125 -62Q114 -83 94 -83\",8710:\"232 622H237Q242 622 249 622T264 623H293Q295 622 300 619T308 613T314 608T319 601Q322 597 405 316T489 19Q489 9 473 1Q471 0 262 0T51 1Q35 9 35 19Q35 34 118 315T205 601Q214 616 232 622ZM267 501Q266 504 265 510T263 521T261 526V523Q261 508 211 332Q142 91 138 82H386Q385 84 345 224Q281 439 267 501\"},{8243:\"\\u2032\\u2032\",8244:\"\\u2032\\u2032\\u2032\",8279:\"\\u2032\\u2032\\u2032\\u2032\"})},2418:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.normal=void 0;var H=L(9403),V=L(1668);T.normal=(0,H.AddPaths)(V.normal,{32:\"\",33:\"78 661Q78 682 96 699T138 716T180 700T199 661Q199 654 179 432T158 206Q156 198 139 198Q121 198 119 206Q118 209 98 431T78 661ZM79 61Q79 89 97 105T141 121Q164 119 181 104T198 61Q198 31 181 16T139 1Q114 1 97 16T79 61\",34:\"34 634Q34 659 50 676T93 694Q121 694 144 668T168 579Q168 525 146 476T101 403T73 379Q69 379 60 388T50 401Q50 404 62 417T88 448T116 500T131 572Q131 584 130 584T125 581T112 576T94 573Q69 573 52 590T34 634ZM238 634Q238 659 254 676T297 694Q325 694 348 668T372 579Q372 525 350 476T305 403T277 379Q273 379 264 388T254 401Q254 404 266 417T292 448T320 500T335 572Q335 584 334 584T329 581T316 576T298 573Q273 573 256 590T238 634\",35:\"56 347Q56 360 70 367H313L355 524Q394 676 401 686Q406 694 416 694Q434 694 436 676Q436 672 396 522Q355 374 355 369L354 367H543L585 524Q626 679 630 685Q636 694 646 694Q653 694 659 689T665 678Q665 668 626 522Q585 374 585 369L584 367H762Q777 359 777 347Q777 334 767 331T722 327H667H572L552 251L531 174Q531 173 647 173H720Q756 173 766 170T777 153T762 133H519L477 -24Q436 -179 432 -185Q426 -194 416 -194Q409 -194 403 -189T397 -177Q397 -167 436 -21Q477 125 477 131L478 133H289L247 -24Q206 -179 202 -185Q196 -194 186 -194Q179 -194 173 -189T167 -177Q167 -167 206 -21Q247 125 247 131L248 133H70Q56 140 56 153Q56 168 72 173H260L280 249L301 326Q301 327 186 327H72Q56 332 56 347ZM531 326Q531 327 437 327H342L322 251L301 174Q301 173 395 173H490L510 249L531 326\",36:\"162 187Q162 164 146 149T109 133H103V130Q108 115 115 105Q122 92 131 82T150 64T170 52T190 44T206 40T220 37L227 36V313Q190 320 162 335Q116 358 86 404T55 508Q55 567 85 614T165 685Q186 696 225 704H227V750H273V704L286 703Q369 690 413 631Q441 588 444 531Q444 514 443 509Q439 490 425 479T391 468Q368 468 353 483T337 522Q337 546 353 560T390 575L394 576V578Q386 599 372 614T342 637T314 649T288 656L273 658V408L288 405Q329 394 355 376Q396 348 420 300T444 199Q444 130 408 76T313 1Q286 -9 276 -9H273V-56H227V-10H221Q202 -6 193 -4T155 11T108 41T74 94T55 176V182Q55 227 95 238Q103 240 108 240Q129 240 145 226T162 187ZM225 657Q219 657 204 651T169 632T135 594T121 538Q121 512 131 491T156 457T187 435T213 423T227 420V539Q227 657 225 657ZM378 169Q378 230 339 265T274 301Q273 301 273 169V37Q324 50 351 87T378 169\",37:\"465 605Q428 605 394 614T340 632T319 641Q332 608 332 548Q332 458 293 403T202 347Q145 347 101 402T56 548Q56 637 101 693T202 750Q241 750 272 719Q359 642 464 642Q580 642 650 732Q662 748 668 749Q670 750 673 750Q682 750 688 743T693 726Q178 -47 170 -52Q166 -56 160 -56Q147 -56 142 -45Q137 -36 142 -27Q143 -24 363 304Q469 462 525 546T581 630Q528 605 465 605ZM207 385Q235 385 263 427T292 548Q292 617 267 664T200 712Q193 712 186 709T167 698T147 668T134 615Q132 595 132 548V527Q132 436 165 403Q183 385 203 385H207ZM500 146Q500 234 544 290T647 347Q699 347 737 292T776 146T737 0T646 -56Q590 -56 545 0T500 146ZM651 -18Q679 -18 707 24T736 146Q736 215 711 262T644 309Q637 309 630 306T611 295T591 265T578 212Q577 200 577 146V124Q577 -18 647 -18H651\",38:\"156 540Q156 620 201 668T302 716Q354 716 377 671T401 578Q401 505 287 386L274 373Q309 285 416 148L429 132L437 142Q474 191 543 309L562 341V349Q562 368 541 376T498 385H493V431H502L626 428Q709 428 721 431H727V385H712Q688 384 669 379T639 369T618 354T603 337T591 316T578 295Q537 223 506 176T464 117T454 104Q454 102 471 85T497 62Q543 24 585 24Q618 24 648 48T682 113V121H722V112Q721 94 714 75T692 32T646 -7T574 -22Q491 -19 414 42L402 51L391 42Q312 -22 224 -22Q144 -22 93 25T42 135Q42 153 46 169T55 197T74 225T96 249T125 278T156 308L195 347L190 360Q185 372 182 382T174 411T165 448T159 491T156 540ZM361 576Q361 613 348 646T305 679Q272 679 252 649T232 572Q232 497 255 426L259 411L267 420Q361 519 361 576ZM140 164Q140 103 167 64T240 24Q271 24 304 36T356 61T374 77Q295 156 235 262L220 292L210 310L193 293Q177 277 169 268T151 229T140 164\",39:\"78 634Q78 659 95 676T138 694Q166 694 189 668T212 579Q212 525 190 476T146 403T118 379Q114 379 105 388T95 401Q95 404 107 417T133 448T161 500T176 572Q176 584 175 584T170 581T157 576T139 573Q114 573 96 590T78 634\",40:\"94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250\",41:\"60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749\",42:\"215 721Q216 732 225 741T248 750Q263 750 273 742T284 721L270 571L327 613Q383 654 388 657T399 660Q412 660 423 650T435 624T424 600T376 575Q363 569 355 566L289 534L355 504L424 470Q435 462 435 447Q435 431 424 420T399 409Q393 409 388 412T327 456L270 498L277 423L284 348Q280 320 250 320T215 348L229 498L172 456Q116 415 111 412T100 409Q87 409 76 420T64 447Q64 461 75 470L144 504L210 534L144 566Q136 570 122 576Q83 593 74 600T64 624Q64 639 75 649T100 660Q106 660 111 657T172 613L229 571Q229 578 222 643T215 721\",43:\"56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250\",44:\"78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17\",45:\"11 179V252H277V179H11\",46:\"78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60\",47:\"423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750\",48:\"96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597\",49:\"213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578\",50:\"109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429\",51:\"127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463\",52:\"462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293\",53:\"164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157\",54:\"42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397\",55:\"55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458\",56:\"70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21\",57:\"352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248\",58:\"78 370Q78 394 95 412T138 430Q162 430 180 414T199 371Q199 346 182 328T139 310T96 327T78 370ZM78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60\",59:\"78 370Q78 394 95 412T138 430Q162 430 180 414T199 371Q199 346 182 328T139 310T96 327T78 370ZM78 60Q78 85 94 103T137 121Q202 121 202 8Q202 -44 183 -94T144 -169T118 -194Q115 -194 106 -186T95 -174Q94 -171 107 -155T137 -107T160 -38Q161 -32 162 -22T165 -4T165 4Q165 5 161 4T142 0Q110 0 94 18T78 60\",60:\"694 -11T694 -19T688 -33T678 -40Q671 -40 524 29T234 166L90 235Q83 240 83 250Q83 261 91 266Q664 540 678 540Q681 540 687 534T694 519T687 505Q686 504 417 376L151 250L417 124Q686 -4 687 -5Q694 -11 694 -19\",61:\"56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153\",62:\"84 520Q84 528 88 533T96 539L99 540Q106 540 253 471T544 334L687 265Q694 260 694 250T687 235Q685 233 395 96L107 -40H101Q83 -38 83 -20Q83 -19 83 -17Q82 -10 98 -1Q117 9 248 71Q326 108 378 132L626 250L378 368Q90 504 86 509Q84 513 84 520\",63:\"226 668Q190 668 162 656T124 632L114 621Q116 621 119 620T130 616T145 607T157 591T162 567Q162 544 147 529T109 514T71 528T55 566Q55 625 100 661T199 704Q201 704 210 704T224 705H228Q281 705 320 692T378 656T407 612T416 567Q416 503 361 462Q267 395 247 303Q242 279 242 241V224Q242 205 239 202T222 198T205 201T202 218V249Q204 320 220 371T255 445T292 491T315 537Q317 546 317 574V587Q317 604 315 615T304 640T277 661T226 668ZM162 61Q162 89 180 105T224 121Q247 119 264 104T281 61Q281 31 264 16T222 1Q197 1 180 16T162 61\",64:\"56 347Q56 429 86 498T164 612T270 680T386 705Q522 705 622 603T722 349Q722 126 608 126Q541 126 513 176Q512 177 512 179T510 182L509 183Q508 183 503 177T487 163T464 146T429 132T385 126Q311 126 251 186T190 347Q190 448 251 508T385 568Q426 568 460 548T509 511T531 479H555Q580 479 582 478Q586 477 587 468Q588 454 588 338V260Q588 200 593 182T619 163Q641 163 655 178T674 223T680 273T682 325V330Q682 426 647 500Q611 569 544 618T388 668Q271 668 184 577T96 347Q96 216 180 121T396 26Q421 26 446 28T493 34T535 43T573 52T605 63T629 72T647 80T657 84H716Q722 78 722 74Q722 65 675 45T547 7T392 -11Q255 -11 156 90T56 347ZM274 347Q274 266 308 214T390 162Q420 162 449 182T498 235L504 245V449L498 459Q453 532 387 532Q347 532 311 483T274 347\",65:\"255 0Q240 3 140 3Q48 3 39 0H32V46H47Q119 49 139 88Q140 91 192 245T295 553T348 708Q351 716 366 716H376Q396 715 400 709Q402 707 508 390L617 67Q624 54 636 51T687 46H717V0H708Q699 3 581 3Q458 3 437 0H427V46H440Q510 46 510 64Q510 66 486 138L462 209H229L209 150Q189 91 189 85Q189 72 209 59T259 46H264V0H255ZM447 255L345 557L244 256Q244 255 345 255H447\",66:\"131 622Q124 629 120 631T104 634T61 637H28V683H229H267H346Q423 683 459 678T531 651Q574 627 599 590T624 512Q624 461 583 419T476 360L466 357Q539 348 595 302T651 187Q651 119 600 67T469 3Q456 1 242 0H28V46H61Q103 47 112 49T131 61V622ZM511 513Q511 560 485 594T416 636Q415 636 403 636T371 636T333 637Q266 637 251 636T232 628Q229 624 229 499V374H312L396 375L406 377Q410 378 417 380T442 393T474 417T499 456T511 513ZM537 188Q537 239 509 282T430 336L329 337H229V200V116Q229 57 234 52Q240 47 334 47H383Q425 47 443 53Q486 67 511 104T537 188\",67:\"56 342Q56 428 89 500T174 615T283 681T391 705Q394 705 400 705T408 704Q499 704 569 636L582 624L612 663Q639 700 643 704Q644 704 647 704T653 705H657Q660 705 666 699V419L660 413H626Q620 419 619 430Q610 512 571 572T476 651Q457 658 426 658Q322 658 252 588Q173 509 173 342Q173 221 211 151Q232 111 263 84T328 45T384 29T428 24Q517 24 571 93T626 244Q626 251 632 257H660L666 251V236Q661 133 590 56T403 -21Q262 -21 159 83T56 342\",68:\"130 622Q123 629 119 631T103 634T60 637H27V683H228Q399 682 419 682T461 676Q504 667 546 641T626 573T685 470T708 336Q708 210 634 116T442 3Q429 1 228 0H27V46H60Q102 47 111 49T130 61V622ZM593 338Q593 439 571 501T493 602Q439 637 355 637H322H294Q238 637 234 628Q231 624 231 344Q231 62 232 59Q233 49 248 48T339 46H350Q456 46 515 95Q561 133 577 191T593 338\",69:\"128 619Q121 626 117 628T101 631T58 634H25V680H597V676Q599 670 611 560T625 444V440H585V444Q584 447 582 465Q578 500 570 526T553 571T528 601T498 619T457 629T411 633T353 634Q266 634 251 633T233 622Q233 622 233 621Q232 619 232 497V376H286Q359 378 377 385Q413 401 416 469Q416 471 416 473V493H456V213H416V233Q415 268 408 288T383 317T349 328T297 330Q290 330 286 330H232V196V114Q232 57 237 52Q243 47 289 47H340H391Q428 47 452 50T505 62T552 92T584 146Q594 172 599 200T607 247T612 270V273H652V270Q651 267 632 137T610 3V0H25V46H58Q100 47 109 49T128 61V619\",70:\"128 619Q121 626 117 628T101 631T58 634H25V680H582V676Q584 670 596 560T610 444V440H570V444Q563 493 561 501Q555 538 543 563T516 601T477 622T431 631T374 633H334H286Q252 633 244 631T233 621Q232 619 232 490V363H284Q287 363 303 363T327 364T349 367T372 373T389 385Q407 403 410 459V480H450V200H410V221Q407 276 389 296Q381 303 371 307T348 313T327 316T303 317T284 317H232V189L233 61Q240 54 245 52T270 48T333 46H360V0H348Q324 3 182 3Q51 3 36 0H25V46H58Q100 47 109 49T128 61V619\",71:\"56 342Q56 428 89 500T174 615T283 681T391 705Q394 705 400 705T408 704Q499 704 569 636L582 624L612 663Q639 700 643 704Q644 704 647 704T653 705H657Q660 705 666 699V419L660 413H626Q620 419 619 430Q610 512 571 572T476 651Q457 658 426 658Q401 658 376 654T316 633T254 592T205 519T177 411Q173 369 173 335Q173 259 192 201T238 111T302 58T370 31T431 24Q478 24 513 45T559 100Q562 110 562 160V212Q561 213 557 216T551 220T542 223T526 225T502 226T463 227H437V273H449L609 270Q715 270 727 273H735V227H721Q674 227 668 215Q666 211 666 108V6Q660 0 657 0Q653 0 639 10Q617 25 600 42L587 54Q571 27 524 3T406 -22Q317 -22 238 22T108 151T56 342\",72:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H302Q262 636 251 634T233 622L232 500V378H517V622Q510 629 506 631T490 634T447 637H414V683H425Q446 680 569 680Q704 680 713 683H724V637H691Q651 636 640 634T622 622V61Q628 51 639 49T691 46H724V0H713Q692 3 569 3Q434 3 425 0H414V46H447Q489 47 498 49T517 61V332H232V197L233 61Q239 51 250 49T302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622\",73:\"328 0Q307 3 180 3T32 0H21V46H43Q92 46 106 49T126 60Q128 63 128 342Q128 620 126 623Q122 628 118 630T96 635T43 637H21V683H32Q53 680 180 680T328 683H339V637H317Q268 637 254 634T234 623Q232 620 232 342Q232 63 234 60Q238 55 242 53T264 48T317 46H339V0H328\",74:\"89 177Q115 177 133 160T152 112Q152 88 137 72T102 52Q99 51 101 49Q106 43 129 29Q159 15 190 15Q232 15 256 48T286 126Q286 127 286 142T286 183T286 238T287 306T287 378Q287 403 287 429T287 479T287 524T286 563T286 593T286 614V621Q281 630 263 633T182 637H154V683H166Q187 680 332 680Q439 680 457 683H465V637H449Q422 637 401 634Q393 631 389 623Q388 621 388 376T387 123Q377 61 322 20T194 -22Q188 -22 177 -21T160 -20Q96 -9 61 29T25 110Q25 144 44 160T89 177\",75:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H313Q235 637 233 620Q232 618 232 462L233 307L379 449Q425 494 479 546Q518 584 524 591T531 607V608Q531 630 503 636Q501 636 498 636T493 637H489V683H499Q517 680 630 680Q704 680 716 683H722V637H708Q633 633 589 597Q584 592 495 506T406 419T515 254T631 80Q644 60 662 54T715 46H736V0H728Q719 3 615 3Q493 3 472 0H461V46H469Q515 46 515 72Q515 78 512 84L336 351Q332 348 278 296L232 251V156Q232 62 235 58Q243 47 302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622\",76:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q48 680 182 680Q324 680 348 683H360V637H333Q273 637 258 635T233 622L232 342V129Q232 57 237 52Q243 47 313 47Q384 47 410 53Q470 70 498 110T536 221Q536 226 537 238T540 261T542 272T562 273H582V268Q580 265 568 137T554 5V0H25V46H58Q100 47 109 49T128 61V622\",77:\"132 622Q125 629 121 631T105 634T62 637H29V683H135Q221 683 232 682T249 675Q250 674 354 398L458 124L562 398Q666 674 668 675Q671 681 683 682T781 683H887V637H854Q814 636 803 634T785 622V61Q791 51 802 49T854 46H887V0H876Q855 3 736 3Q605 3 596 0H585V46H618Q660 47 669 49T688 61V347Q688 424 688 461T688 546T688 613L687 632Q454 14 450 7Q446 1 430 1T410 7Q409 9 292 316L176 624V606Q175 588 175 543T175 463T175 356L176 86Q187 50 261 46H278V0H269Q254 3 154 3Q52 3 37 0H29V46H46Q78 48 98 56T122 69T132 86V622\",78:\"42 46Q74 48 94 56T118 69T128 86V634H124Q114 637 52 637H25V683H232L235 680Q237 679 322 554T493 303L578 178V598Q572 608 568 613T544 627T492 637H475V683H483Q498 680 600 680Q706 680 715 683H724V637H707Q634 633 622 598L621 302V6L614 0H600Q585 0 582 3T481 150T282 443T171 605V345L172 86Q183 50 257 46H274V0H265Q250 3 150 3Q48 3 33 0H25V46H42\",79:\"56 340Q56 423 86 494T164 610T270 680T388 705Q521 705 621 601T722 341Q722 260 693 191T617 75T510 4T388 -22T267 3T160 74T85 189T56 340ZM467 647Q426 665 388 665Q360 665 331 654T269 620T213 549T179 439Q174 411 174 354Q174 144 277 61Q327 20 385 20H389H391Q474 20 537 99Q603 188 603 354Q603 411 598 439Q577 592 467 647\",80:\"130 622Q123 629 119 631T103 634T60 637H27V683H214Q237 683 276 683T331 684Q419 684 471 671T567 616Q624 563 624 489Q624 421 573 372T451 307Q429 302 328 301H234V181Q234 62 237 58Q245 47 304 46H337V0H326Q305 3 182 3Q47 3 38 0H27V46H60Q102 47 111 49T130 61V622ZM507 488Q507 514 506 528T500 564T483 597T450 620T397 635Q385 637 307 637H286Q237 637 234 628Q231 624 231 483V342H302H339Q390 342 423 349T481 382Q507 411 507 488\",81:\"56 341Q56 499 157 602T388 705Q521 705 621 601T722 341Q722 275 703 218T660 127T603 63T555 25T525 9Q524 8 524 8H523Q524 5 526 -1T537 -21T555 -47T581 -67T615 -76Q653 -76 678 -56T706 -3Q707 10 716 10Q721 10 728 5L727 -13Q727 -88 697 -140T606 -193Q563 -193 538 -166T498 -83Q483 -23 483 -8L471 -11Q459 -14 435 -18T388 -22Q254 -22 155 81T56 341ZM607 339Q607 429 586 496T531 598T461 649T390 665T318 649T248 598T192 496T170 339Q170 143 277 57Q301 39 305 39L304 42Q304 44 304 46Q301 53 301 68Q301 101 325 128T391 155Q454 155 495 70L501 58Q549 91 578 164Q607 234 607 339ZM385 18Q404 18 425 23T459 33T472 40Q471 47 468 57T449 88T412 115Q398 117 386 117Q367 117 353 102T338 67Q338 48 351 33T385 18\",82:\"130 622Q123 629 119 631T103 634T60 637H27V683H202H236H300Q376 683 417 677T500 648Q595 600 609 517Q610 512 610 501Q610 468 594 439T556 392T511 361T472 343L456 338Q459 335 467 332Q497 316 516 298T545 254T559 211T568 155T578 94Q588 46 602 31T640 16H645Q660 16 674 32T692 87Q692 98 696 101T712 105T728 103T732 90Q732 59 716 27T672 -16Q656 -22 630 -22Q481 -16 458 90Q456 101 456 163T449 246Q430 304 373 320L363 322L297 323H231V192L232 61Q238 51 249 49T301 46H334V0H323Q302 3 181 3Q59 3 38 0H27V46H60Q102 47 111 49T130 61V622ZM491 499V509Q491 527 490 539T481 570T462 601T424 623T362 636Q360 636 340 636T304 637H283Q238 637 234 628Q231 624 231 492V360H289Q390 360 434 378T489 456Q491 467 491 499\",83:\"55 507Q55 590 112 647T243 704H257Q342 704 405 641L426 672Q431 679 436 687T446 700L449 704Q450 704 453 704T459 705H463Q466 705 472 699V462L466 456H448Q437 456 435 459T430 479Q413 605 329 646Q292 662 254 662Q201 662 168 626T135 542Q135 508 152 480T200 435Q210 431 286 412T370 389Q427 367 463 314T500 191Q500 110 448 45T301 -21Q245 -21 201 -4T140 27L122 41Q118 36 107 21T87 -7T78 -21Q76 -22 68 -22H64Q61 -22 55 -16V101Q55 220 56 222Q58 227 76 227H89Q95 221 95 214Q95 182 105 151T139 90T205 42T305 24Q352 24 386 62T420 155Q420 198 398 233T340 281Q284 295 266 300Q261 301 239 306T206 314T174 325T141 343T112 367T85 402Q55 451 55 507\",84:\"36 443Q37 448 46 558T55 671V677H666V671Q667 666 676 556T685 443V437H645V443Q645 445 642 478T631 544T610 593Q593 614 555 625Q534 630 478 630H451H443Q417 630 414 618Q413 616 413 339V63Q420 53 439 50T528 46H558V0H545L361 3Q186 1 177 0H164V46H194Q264 46 283 49T309 63V339V550Q309 620 304 625T271 630H244H224Q154 630 119 601Q101 585 93 554T81 486T76 443V437H36V443\",85:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H302Q262 636 251 634T233 622L232 418V291Q232 189 240 145T280 67Q325 24 389 24Q454 24 506 64T571 183Q575 206 575 410V598Q569 608 565 613T541 627T489 637H472V683H481Q496 680 598 680T715 683H724V637H707Q634 633 622 598L621 399Q620 194 617 180Q617 179 615 171Q595 83 531 31T389 -22Q304 -22 226 33T130 192Q129 201 128 412V622\",86:\"114 620Q113 621 110 624T107 627T103 630T98 632T91 634T80 635T67 636T48 637H19V683H28Q46 680 152 680Q273 680 294 683H305V637H284Q223 634 223 620Q223 618 313 372T404 126L490 358Q575 588 575 597Q575 616 554 626T508 637H503V683H512Q527 680 627 680Q718 680 724 683H730V637H723Q648 637 627 596Q627 595 515 291T401 -14Q396 -22 382 -22H374H367Q353 -22 348 -14Q346 -12 231 303Q114 617 114 620\",87:\"792 683Q810 680 914 680Q991 680 1003 683H1009V637H996Q931 633 915 598Q912 591 863 438T766 135T716 -17Q711 -22 694 -22Q676 -22 673 -15Q671 -13 593 231L514 477L435 234Q416 174 391 92T358 -6T341 -22H331Q314 -21 310 -15Q309 -14 208 302T104 622Q98 632 87 633Q73 637 35 637H18V683H27Q69 681 154 681Q164 681 181 681T216 681T249 682T276 683H287H298V637H285Q213 637 213 620Q213 616 289 381L364 144L427 339Q490 535 492 546Q487 560 482 578T475 602T468 618T461 628T449 633T433 636T408 637H380V683H388Q397 680 508 680Q629 680 650 683H660V637H647Q576 637 576 619L727 146Q869 580 869 600Q869 605 863 612T839 627T794 637H783V683H792\",88:\"270 0Q252 3 141 3Q46 3 31 0H23V46H40Q129 50 161 88Q165 94 244 216T324 339Q324 341 235 480T143 622Q133 631 119 634T57 637H37V683H46Q64 680 172 680Q297 680 318 683H329V637H324Q307 637 286 632T263 621Q263 618 322 525T384 431Q385 431 437 511T489 593Q490 595 490 599Q490 611 477 622T436 637H428V683H437Q455 680 566 680Q661 680 676 683H684V637H667Q585 634 551 599Q548 596 478 491Q412 388 412 387Q412 385 514 225T620 62Q628 53 642 50T695 46H726V0H717Q699 3 591 3Q466 3 445 0H434V46H440Q454 46 476 51T499 64Q499 67 463 124T390 238L353 295L350 292Q348 290 343 283T331 265T312 236T286 195Q219 88 218 84Q218 70 234 59T272 46H280V0H270\",89:\"518 0Q497 3 374 3Q253 3 232 0H221V46H254Q313 47 321 58Q324 62 324 167V273L221 446Q117 620 114 623Q106 631 91 634T31 637H11V683H20Q29 680 148 680Q273 680 294 683H305V637H287Q239 636 236 621Q236 619 321 475L407 332L483 460Q502 492 527 534Q563 594 563 604Q563 632 517 637H508V683H517H525Q533 683 545 683T571 682T600 681T626 681Q695 681 731 683H738V637H723Q640 633 613 588Q612 587 517 427L425 273V169V95Q425 66 428 59T444 49Q459 46 506 46H528V0H518\",90:\"69 443Q69 452 74 554T80 683H549Q555 677 555 664Q555 649 554 648Q552 645 366 348T179 50T192 49T263 49H275H302Q333 49 353 50T401 59T447 78T482 115T507 173Q513 200 520 273V282H560V274Q560 272 552 143T543 8V0H302L61 1L58 3Q55 8 55 21V35Q59 43 153 193T340 489T432 637H343Q259 637 214 625T141 573Q109 523 109 445Q109 443 89 443H69\",91:\"118 -250V750H255V710H158V-210H255V-250H118\",92:\"56 731Q56 740 62 745T75 750Q85 750 92 740Q96 733 270 255T444 -231Q444 -239 438 -244T424 -250Q414 -250 407 -240Q404 -236 230 242T56 731\",93:\"22 710V750H159V-250H22V-210H119V710H22\",94:\"112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560\",95:\"0 -62V-25H499V-62H0\",96:\"106 655Q106 671 119 685T150 699Q166 699 177 688Q190 671 222 629T275 561T295 533T282 519L267 505L196 563Q119 626 113 634Q106 643 106 655\",97:\"137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106\",98:\"307 -11Q234 -11 168 55L158 37Q156 34 153 28T147 17T143 10L138 1L118 0H98V298Q98 599 97 603Q94 622 83 628T38 637H20V660Q20 683 22 683L32 684Q42 685 61 686T98 688Q115 689 135 690T165 693T176 694H179V543Q179 391 180 391L183 394Q186 397 192 401T207 411T228 421T254 431T286 439T323 442Q401 442 461 379T522 216Q522 115 458 52T307 -11ZM182 98Q182 97 187 90T196 79T206 67T218 55T233 44T250 35T271 29T295 26Q330 26 363 46T412 113Q424 148 424 212Q424 287 412 323Q385 405 300 405Q270 405 239 390T188 347L182 339V98\",99:\"370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320\",100:\"376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342\",101:\"28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275\",102:\"273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273\",103:\"329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75\",104:\"41 46H55Q94 46 102 60V68Q102 77 102 91T102 124T102 167T103 217T103 272T103 329Q103 366 103 407T103 482T102 542T102 586T102 603Q99 622 88 628T43 637H25V660Q25 683 27 683L37 684Q47 685 66 686T103 688Q120 689 140 690T170 693T181 694H184V367Q244 442 328 442Q451 442 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41\",105:\"69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247\",106:\"98 609Q98 637 116 653T160 669Q183 667 200 652T217 609Q217 579 200 564T158 549Q133 549 116 564T98 609ZM28 -163Q58 -168 64 -168Q124 -168 135 -77Q137 -65 137 141T136 353Q132 371 120 377T72 385H52V408Q52 431 54 431L58 432Q62 432 70 432T87 433T108 434T133 436Q151 437 171 438T202 441T214 442H218V184Q217 -36 217 -59T211 -98Q195 -145 153 -175T58 -205Q9 -205 -23 -179T-55 -117Q-55 -94 -40 -79T-2 -64T36 -79T52 -118Q52 -143 28 -163\",107:\"36 46H50Q89 46 97 60V68Q97 77 97 91T97 124T98 167T98 217T98 272T98 329Q98 366 98 407T98 482T98 542T97 586T97 603Q94 622 83 628T38 637H20V660Q20 683 22 683L32 684Q42 685 61 686T98 688Q115 689 135 690T165 693T176 694H179V463L180 233L240 287Q300 341 304 347Q310 356 310 364Q310 383 289 385H284V431H293Q308 428 412 428Q475 428 484 431H489V385H476Q407 380 360 341Q286 278 286 274Q286 273 349 181T420 79Q434 60 451 53T500 46H511V0H505Q496 3 418 3Q322 3 307 0H299V46H306Q330 48 330 65Q330 72 326 79Q323 84 276 153T228 222L176 176V120V84Q176 65 178 59T189 49Q210 46 238 46H254V0H246Q231 3 137 3T28 0H20V46H36\",108:\"42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42\",109:\"41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41\",110:\"41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41\",111:\"28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30\",112:\"36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218\",113:\"33 218Q33 308 95 374T236 441H246Q330 441 381 372L387 364Q388 364 404 403L420 442H457V156Q457 -132 458 -134Q462 -142 470 -145Q491 -148 519 -148H535V-194H527L504 -193Q480 -192 453 -192T415 -191Q312 -191 303 -194H295V-148H311Q339 -148 360 -145Q369 -141 371 -135T373 -106V-41V49Q313 -11 236 -11Q154 -11 94 53T33 218ZM376 300Q346 389 278 401Q275 401 269 401T261 402Q211 400 171 350T131 214Q131 137 165 82T253 27Q296 27 328 54T376 118V300\",114:\"36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36\",115:\"295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316\",116:\"27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27\",117:\"383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58\",118:\"338 431Q344 429 422 429Q479 429 503 431H508V385H497Q439 381 423 345Q421 341 356 172T288 -2Q283 -11 263 -11Q244 -11 239 -2Q99 359 98 364Q93 378 82 381T43 385H19V431H25L33 430Q41 430 53 430T79 430T104 429T122 428Q217 428 232 431H240V385H226Q187 384 184 370Q184 366 235 234L286 102L377 341V349Q377 363 367 372T349 383T335 385H331V431H338\",119:\"90 368Q84 378 76 380T40 385H18V431H24L43 430Q62 430 84 429T116 428Q206 428 221 431H229V385H215Q177 383 177 368Q177 367 221 239L265 113L339 328L333 345Q323 374 316 379Q308 384 278 385H258V431H264Q270 428 348 428Q439 428 454 431H461V385H452Q404 385 404 369Q404 366 418 324T449 234T481 143L496 100L537 219Q579 341 579 347Q579 363 564 373T530 385H522V431H529Q541 428 624 428Q692 428 698 431H703V385H697Q696 385 691 385T682 384Q635 377 619 334L559 161Q546 124 528 71Q508 12 503 1T487 -11H479Q460 -11 456 -4Q455 -3 407 133L361 267Q359 263 266 -4Q261 -11 243 -11H238Q225 -11 220 -3L90 368\",120:\"201 0Q189 3 102 3Q26 3 17 0H11V46H25Q48 47 67 52T96 61T121 78T139 96T160 122T180 150L226 210L168 288Q159 301 149 315T133 336T122 351T113 363T107 370T100 376T94 379T88 381T80 383Q74 383 44 385H16V431H23Q59 429 126 429Q219 429 229 431H237V385Q201 381 201 369Q201 367 211 353T239 315T268 274L272 270L297 304Q329 345 329 358Q329 364 327 369T322 376T317 380T310 384L307 385H302V431H309Q324 428 408 428Q487 428 493 431H499V385H492Q443 385 411 368Q394 360 377 341T312 257L296 236L358 151Q424 61 429 57T446 50Q464 46 499 46H516V0H510H502Q494 1 482 1T457 2T432 2T414 3Q403 3 377 3T327 1L304 0H295V46H298Q309 46 320 51T331 63Q331 65 291 120L250 175Q249 174 219 133T185 88Q181 83 181 74Q181 63 188 55T206 46Q208 46 208 23V0H201\",121:\"69 -66Q91 -66 104 -80T118 -116Q118 -134 109 -145T91 -160Q84 -163 97 -166Q104 -168 111 -168Q131 -168 148 -159T175 -138T197 -106T213 -75T225 -43L242 0L170 183Q150 233 125 297Q101 358 96 368T80 381Q79 382 78 382Q66 385 34 385H19V431H26L46 430Q65 430 88 429T122 428Q129 428 142 428T171 429T200 430T224 430L233 431H241V385H232Q183 385 185 366L286 112Q286 113 332 227L376 341V350Q376 365 366 373T348 383T334 385H331V431H337H344Q351 431 361 431T382 430T405 429T422 429Q477 429 503 431H508V385H497Q441 380 422 345Q420 343 378 235T289 9T227 -131Q180 -204 113 -204Q69 -204 44 -177T19 -116Q19 -89 35 -78T69 -66\",122:\"42 263Q44 270 48 345T53 423V431H393Q399 425 399 415Q399 403 398 402L381 378Q364 355 331 309T265 220L134 41L182 40H206Q254 40 283 46T331 77Q352 105 359 185L361 201Q361 202 381 202H401V196Q401 195 393 103T384 6V0H209L34 1L31 3Q28 8 28 17Q28 30 29 31T160 210T294 394H236Q169 393 152 388Q127 382 113 367Q89 344 82 264V255H42V263\",123:\"434 -231Q434 -244 428 -250H410Q281 -250 230 -184Q225 -177 222 -172T217 -161T213 -148T211 -133T210 -111T209 -84T209 -47T209 0Q209 21 209 53Q208 142 204 153Q203 154 203 155Q189 191 153 211T82 231Q71 231 68 234T65 250T68 266T82 269Q116 269 152 289T203 345Q208 356 208 377T209 529V579Q209 634 215 656T244 698Q270 724 324 740Q361 748 377 749Q379 749 390 749T408 750H428Q434 744 434 732Q434 719 431 716Q429 713 415 713Q362 710 332 689T296 647Q291 634 291 499V417Q291 370 288 353T271 314Q240 271 184 255L170 250L184 245Q202 239 220 230T262 196T290 137Q291 131 291 1Q291 -134 296 -147Q306 -174 339 -192T415 -213Q429 -213 431 -216Q434 -219 434 -231\",124:\"139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139\",125:\"65 731Q65 745 68 747T88 750Q171 750 216 725T279 670Q288 649 289 635T291 501Q292 362 293 357Q306 312 345 291T417 269Q428 269 431 266T434 250T431 234T417 231Q380 231 345 210T298 157Q293 143 292 121T291 -28V-79Q291 -134 285 -156T256 -198Q202 -250 89 -250Q71 -250 68 -247T65 -230Q65 -224 65 -223T66 -218T69 -214T77 -213Q91 -213 108 -210T146 -200T183 -177T207 -139Q208 -134 209 3L210 139Q223 196 280 230Q315 247 330 250Q305 257 280 270Q225 304 212 352L210 362L209 498Q208 635 207 640Q195 680 154 696T77 713Q68 713 67 716T65 731\",126:\"179 251Q164 251 151 245T131 234T111 215L97 227L83 238Q83 239 95 253T121 283T142 304Q165 318 187 318T253 300T320 282Q335 282 348 288T368 299T388 318L402 306L416 295Q375 236 344 222Q330 215 313 215Q292 215 248 233T179 251\",160:\"\",163:\"699 578Q699 473 635 473Q597 473 595 508Q595 559 654 569V576Q654 619 637 648T581 677Q545 677 513 647T463 561Q460 554 437 464T414 371Q414 370 458 370H502Q508 364 508 362Q505 334 495 324H402L382 241Q377 224 373 206T366 180T361 163T358 151T354 142T350 133T344 120Q340 112 338 107T336 101L354 90Q398 63 422 54T476 44Q515 44 539 73T574 133Q578 144 580 146T598 148Q622 148 622 139Q622 138 620 130Q602 74 555 32T447 -11Q395 -11 317 38L294 51Q271 28 233 9T155 -10Q117 -10 103 5T88 39Q88 73 126 106T224 139Q236 139 247 138T266 134L273 132Q275 132 302 239L323 324H259Q253 330 253 332Q253 350 265 370H300L334 371L355 453Q356 457 360 477T366 501T372 522T379 545T387 565T397 587T409 606T425 627Q453 664 497 689T583 714Q640 714 669 676T699 578ZM245 76Q211 85 195 85Q173 85 158 71T142 42Q142 26 160 26H163Q211 30 245 76\",165:\"515 0Q494 3 374 3Q256 3 235 0H224V46H257Q316 47 324 58Q327 62 327 137V213H133Q121 213 113 213T97 213T86 213T78 213T73 214T70 215T69 216T68 218T67 220Q64 225 66 231T73 240Q76 242 202 242H327V273L247 407H115Q81 407 75 408T67 414Q64 419 66 425T73 434Q76 436 153 436Q228 436 228 437Q227 440 173 530T115 623Q101 637 31 637H11V683H20Q66 681 153 681Q169 681 202 681T262 682L288 683H298V637H280Q230 636 230 621Q230 619 250 584Q255 576 264 561T286 526T305 494L340 437L403 436H467L513 514Q564 596 564 605Q564 608 560 616Q550 634 517 637H508V683H516Q531 680 633 680Q722 680 731 683H738V637H723Q644 632 617 595Q614 591 568 515T521 437T597 436T676 434Q681 432 683 426T682 414T671 409T589 407H503L422 273V242H547Q673 242 676 240Q681 238 683 232T682 220Q682 219 682 218T681 217T679 216T677 215T672 214T664 213T652 213T637 213T616 213H422V139V87Q422 64 425 58T441 49Q456 46 503 46H525V0H515ZM449 406Q449 407 403 407Q358 407 358 406L370 387Q381 368 392 350L404 331Q447 404 449 406\",168:\"95 612Q95 633 112 651T153 669T193 652T210 612Q210 588 194 571T152 554L127 560Q95 577 95 612ZM289 611Q289 634 304 649T335 668Q336 668 340 668T346 669Q369 669 386 652T404 612T387 572T346 554Q323 554 306 570T289 611\",172:\"56 323T56 336T70 356H596Q603 353 611 343V102Q598 89 591 89Q587 89 584 90T579 94T575 98T572 102L571 209V316H70Q56 323 56 336\",174:\"915 266Q915 140 852 38T689 -120T474 -175Q312 -175 188 -71T38 190Q32 220 32 266V287Q32 345 57 416T129 545Q192 624 282 666T464 709Q513 709 522 708Q599 698 665 666T776 590T853 493T900 387T915 287V266ZM875 285Q875 339 853 399T789 517T676 616T519 668Q510 669 465 669Q380 669 299 630T155 514T77 336Q72 312 72 285V266V256Q72 123 163 11Q290 -135 474 -135Q614 -135 727 -46Q875 81 875 266V285ZM276 457Q275 458 274 460T272 463T270 465T267 467T264 469T258 471T252 472T243 473T232 474T218 474H204V514H335Q477 514 499 510Q560 502 610 467T661 375Q661 362 658 350T648 327T635 308T618 292T601 280T583 269T568 262T554 256L547 253Q548 252 556 247T570 237T586 223T602 202T614 174Q616 169 626 123T638 72Q652 23 683 23Q715 23 720 68Q721 78 724 81T740 84T756 82T760 70Q760 47 747 25T715 -7Q700 -14 673 -14Q672 -14 662 -14T643 -12T619 -7T593 2T568 16T547 37T534 67Q531 80 531 97Q531 103 531 116T532 136Q532 218 472 236Q466 238 413 239H360V148L361 58Q366 47 375 44T418 40H432V0H424Q409 3 318 3T212 0H204V40H218Q242 40 253 42T268 47T276 58V457ZM376 473Q365 471 363 464T360 430V366V276H416Q421 276 434 276T453 276T469 277T486 279T501 282T517 287T529 294T542 305Q561 324 561 375Q561 424 545 444T482 472Q478 473 427 474Q415 474 403 474T384 474L376 473\",175:\"69 544V590H430V544H69\",176:\"147 628Q147 669 179 692T244 715Q298 715 325 689T352 629Q352 592 323 567T249 542Q202 542 175 567T147 628ZM313 628Q313 660 300 669T259 678H253Q248 678 242 678T234 679Q217 679 207 674T192 659T188 644T187 629Q187 600 198 590Q210 579 250 579H265Q279 579 288 581T305 595T313 628\",177:\"56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333\",180:\"349 699Q367 699 380 686T393 656Q393 651 392 647T387 637T380 627T367 616T351 602T330 585T303 563L232 505L217 519Q203 533 204 533Q204 534 229 567T282 636T313 678L316 681Q318 684 321 686T328 692T337 697T349 699\",183:\"78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250\",215:\"630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29\",240:\"75 566V604Q75 624 79 629T102 635Q124 635 127 629T131 588L133 550L191 588L249 628L231 635Q176 654 124 657Q116 657 106 658L95 659Q94 661 94 687T95 715Q99 717 113 717Q195 717 282 679L309 668L331 681Q351 697 391 721Q428 748 435 748Q437 749 446 749Q470 749 473 746Q478 744 478 681V621Q466 615 456 615Q435 615 424 624L422 661V699L382 675L344 648Q353 639 366 630Q480 538 504 413Q509 393 509 333V313Q509 284 507 257T495 184T466 102T413 33T329 -16Q311 -21 275 -21Q226 -21 195 -10Q150 7 110 50T53 141Q42 179 42 227Q42 332 101 403T245 474Q282 474 314 461T359 436T380 415Q386 405 389 408Q389 426 378 475Q368 505 355 529T329 567T306 590T288 603L282 606L120 501Q116 500 102 500Q84 500 75 506V566ZM388 225Q388 376 309 410Q299 416 273 419Q216 419 191 390Q174 371 168 342T162 218Q162 112 184 79Q212 39 273 39Q312 39 342 62T380 121Q388 159 388 225\",247:\"318 466Q318 500 339 518T386 537Q418 537 438 517T458 466Q458 438 440 417T388 396Q355 396 337 417T318 466ZM56 237T56 250T70 270H706Q721 262 721 250T706 230H70Q56 237 56 250ZM318 34Q318 68 339 86T386 105Q418 105 438 85T458 34Q458 6 440 -15T388 -36Q355 -36 337 -15T318 34\",305:\"247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247\",567:\"28 -163Q58 -168 64 -168Q124 -168 135 -77Q137 -65 137 141T136 353Q132 371 120 377T72 385H52V408Q52 431 54 431L58 432Q62 432 70 432T87 433T108 434T133 436Q151 437 171 438T202 441T214 442H218V184Q217 -36 217 -59T211 -98Q195 -145 153 -175T58 -205Q9 -205 -23 -179T-55 -117Q-55 -94 -40 -79T-2 -64T36 -79T52 -118Q52 -143 28 -163\",697:\"79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43\",710:\"112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560\",711:\"114 611L127 630L136 644Q138 644 193 612Q248 581 250 581L306 612Q361 644 363 644L385 611L318 562L249 513L114 611\",713:\"69 544V590H430V544H69\",714:\"349 699Q367 699 380 686T393 656Q393 651 392 647T387 637T380 627T367 616T351 602T330 585T303 563L232 505L217 519Q203 533 204 533Q204 534 229 567T282 636T313 678L316 681Q318 684 321 686T328 692T337 697T349 699\",715:\"106 655Q106 671 119 685T150 699Q166 699 177 688Q190 671 222 629T275 561T295 533T282 519L267 505L196 563Q119 626 113 634Q106 643 106 655\",728:\"250 515Q179 515 138 565T92 683V694H129V689Q129 688 129 683T130 675Q137 631 169 599T248 567Q304 567 337 608T370 689V694H407V683Q403 617 361 566T250 515\",729:\"190 609Q190 637 208 653T252 669Q275 667 292 652T309 609Q309 579 292 564T250 549Q225 549 208 564T190 609\",730:\"147 628Q147 669 179 692T244 715Q298 715 325 689T352 629Q352 592 323 567T249 542Q202 542 175 567T147 628ZM313 628Q313 660 300 669T259 678H253Q248 678 242 678T234 679Q217 679 207 674T192 659T188 644T187 629Q187 600 198 590Q210 579 250 579H265Q279 579 288 581T305 595T313 628\",732:\"179 601Q164 601 151 595T131 584T111 565L97 577L83 588Q83 589 95 603T121 633T142 654Q165 668 187 668T253 650T320 632Q335 632 348 638T368 649T388 668L402 656L416 645Q375 586 344 572Q330 565 313 565Q292 565 248 583T179 601\",768:\"-394 655Q-394 671 -381 685T-350 699Q-334 699 -323 688Q-310 671 -278 629T-225 561T-205 533T-218 519L-233 505L-304 563Q-381 626 -387 634Q-394 643 -394 655\",769:\"-151 699Q-133 699 -120 686T-107 656Q-107 651 -108 647T-113 637T-120 627T-133 616T-149 602T-170 585T-197 563L-268 505L-283 519Q-297 533 -296 533Q-296 534 -271 567T-218 636T-187 678L-184 681Q-182 684 -179 686T-172 692T-163 697T-151 699\",770:\"-388 560L-251 694L-243 686Q-113 562 -113 560L-139 531Q-141 532 -197 581L-250 627L-305 580Q-318 569 -331 557T-352 538L-360 532Q-362 530 -375 546L-388 560\",771:\"-321 601Q-336 601 -349 595T-369 584T-389 565L-403 577L-417 588Q-417 589 -405 603T-379 633T-358 654Q-335 668 -313 668T-247 650T-180 632Q-165 632 -152 638T-132 649T-112 668L-98 656L-84 645Q-125 586 -156 572Q-170 565 -187 565Q-208 565 -252 583T-321 601\",772:\"-431 544V590H-70V544H-431\",774:\"-250 515Q-321 515 -362 565T-408 683V694H-371V689Q-371 688 -371 683T-370 675Q-363 631 -331 599T-252 567Q-196 567 -163 608T-130 689V694H-93V683Q-97 617 -139 566T-250 515\",775:\"-310 609Q-310 637 -292 653T-248 669Q-225 667 -208 652T-191 609Q-191 579 -208 564T-250 549Q-275 549 -292 564T-310 609\",776:\"-405 612Q-405 633 -388 651T-347 669T-307 652T-290 612Q-290 588 -306 571T-348 554L-373 560Q-405 577 -405 612ZM-211 611Q-211 634 -196 649T-165 668Q-164 668 -160 668T-154 669Q-131 669 -114 652T-96 612T-113 572T-154 554Q-177 554 -194 570T-211 611\",778:\"-353 628Q-353 669 -321 692T-256 715Q-202 715 -175 689T-148 629Q-148 592 -177 567T-251 542Q-298 542 -325 567T-353 628ZM-187 628Q-187 660 -200 669T-241 678H-247Q-252 678 -258 678T-266 679Q-283 679 -293 674T-308 659T-312 644T-313 629Q-313 600 -302 590Q-290 579 -250 579H-235Q-221 579 -212 581T-195 595T-187 628\",779:\"-292 701Q-278 701 -262 690T-246 658Q-246 649 -250 641Q-252 637 -297 574T-344 510L-378 528Q-378 530 -355 598T-327 676Q-316 701 -292 701ZM-126 701Q-112 701 -96 690T-80 658Q-80 649 -84 641Q-86 637 -131 574T-178 510L-212 528Q-212 530 -189 598T-161 676Q-150 701 -126 701\",780:\"-386 611L-373 630L-364 644Q-362 644 -307 612Q-252 581 -250 581L-194 612Q-139 644 -137 644L-115 611L-182 562L-251 513L-386 611\",824:\"-612 -215T-619 -215T-631 -212T-637 -204T-639 -197Q-639 -190 -634 -183Q-621 -157 -400 274T-176 707Q-173 716 -160 716Q-153 716 -148 712T-142 703T-140 696Q-140 691 -372 241T-608 -212Q-612 -215 -619 -215\",913:\"255 0Q240 3 140 3Q48 3 39 0H32V46H47Q119 49 139 88Q140 91 192 245T295 553T348 708Q351 716 366 716H376Q396 715 400 709Q402 707 508 390L617 67Q624 54 636 51T687 46H717V0H708Q699 3 581 3Q458 3 437 0H427V46H440Q510 46 510 64Q510 66 486 138L462 209H229L209 150Q189 91 189 85Q189 72 209 59T259 46H264V0H255ZM447 255L345 557L244 256Q244 255 345 255H447\",914:\"131 622Q124 629 120 631T104 634T61 637H28V683H229H267H346Q423 683 459 678T531 651Q574 627 599 590T624 512Q624 461 583 419T476 360L466 357Q539 348 595 302T651 187Q651 119 600 67T469 3Q456 1 242 0H28V46H61Q103 47 112 49T131 61V622ZM511 513Q511 560 485 594T416 636Q415 636 403 636T371 636T333 637Q266 637 251 636T232 628Q229 624 229 499V374H312L396 375L406 377Q410 378 417 380T442 393T474 417T499 456T511 513ZM537 188Q537 239 509 282T430 336L329 337H229V200V116Q229 57 234 52Q240 47 334 47H383Q425 47 443 53Q486 67 511 104T537 188\",915:\"128 619Q121 626 117 628T101 631T58 634H25V680H554V676Q556 670 568 560T582 444V440H542V444Q542 445 538 478T523 545T492 598Q454 634 349 634H334Q264 634 249 633T233 621Q232 618 232 339L233 61Q240 54 245 52T270 48T333 46H360V0H348Q324 3 182 3Q51 3 36 0H25V46H58Q100 47 109 49T128 61V619\",916:\"51 0Q46 4 46 7Q46 9 215 357T388 709Q391 716 416 716Q439 716 444 709Q447 705 616 357T786 7Q786 4 781 0H51ZM507 344L384 596L137 92L383 91H630Q630 93 507 344\",917:\"128 619Q121 626 117 628T101 631T58 634H25V680H597V676Q599 670 611 560T625 444V440H585V444Q584 447 582 465Q578 500 570 526T553 571T528 601T498 619T457 629T411 633T353 634Q266 634 251 633T233 622Q233 622 233 621Q232 619 232 497V376H286Q359 378 377 385Q413 401 416 469Q416 471 416 473V493H456V213H416V233Q415 268 408 288T383 317T349 328T297 330Q290 330 286 330H232V196V114Q232 57 237 52Q243 47 289 47H340H391Q428 47 452 50T505 62T552 92T584 146Q594 172 599 200T607 247T612 270V273H652V270Q651 267 632 137T610 3V0H25V46H58Q100 47 109 49T128 61V619\",918:\"69 443Q69 452 74 554T80 683H549Q555 677 555 664Q555 649 554 648Q552 645 366 348T179 50T192 49T263 49H275H302Q333 49 353 50T401 59T447 78T482 115T507 173Q513 200 520 273V282H560V274Q560 272 552 143T543 8V0H302L61 1L58 3Q55 8 55 21V35Q59 43 153 193T340 489T432 637H343Q259 637 214 625T141 573Q109 523 109 445Q109 443 89 443H69\",919:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H302Q262 636 251 634T233 622L232 500V378H517V622Q510 629 506 631T490 634T447 637H414V683H425Q446 680 569 680Q704 680 713 683H724V637H691Q651 636 640 634T622 622V61Q628 51 639 49T691 46H724V0H713Q692 3 569 3Q434 3 425 0H414V46H447Q489 47 498 49T517 61V332H232V197L233 61Q239 51 250 49T302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622\",920:\"56 340Q56 423 86 494T164 610T270 680T388 705Q521 705 621 601T722 341Q722 260 693 191T617 75T510 4T388 -22T267 3T160 74T85 189T56 340ZM610 339Q610 428 590 495T535 598T463 651T384 668Q332 668 289 638T221 566Q168 485 168 339Q168 274 176 235Q189 158 228 105T324 28Q356 16 388 16Q415 16 442 24T501 54T555 111T594 205T610 339ZM223 263V422H263V388H514V422H554V263H514V297H263V263H223\",921:\"328 0Q307 3 180 3T32 0H21V46H43Q92 46 106 49T126 60Q128 63 128 342Q128 620 126 623Q122 628 118 630T96 635T43 637H21V683H32Q53 680 180 680T328 683H339V637H317Q268 637 254 634T234 623Q232 620 232 342Q232 63 234 60Q238 55 242 53T264 48T317 46H339V0H328\",922:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H313Q235 637 233 620Q232 618 232 462L233 307L379 449Q425 494 479 546Q518 584 524 591T531 607V608Q531 630 503 636Q501 636 498 636T493 637H489V683H499Q517 680 630 680Q704 680 716 683H722V637H708Q633 633 589 597Q584 592 495 506T406 419T515 254T631 80Q644 60 662 54T715 46H736V0H728Q719 3 615 3Q493 3 472 0H461V46H469Q515 46 515 72Q515 78 512 84L336 351Q332 348 278 296L232 251V156Q232 62 235 58Q243 47 302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622\",923:\"320 708Q326 716 340 716H348H355Q367 716 372 708Q374 706 423 547T523 226T575 62Q581 52 591 50T634 46H661V0H653Q644 3 532 3Q411 3 390 0H379V46H392Q464 46 464 65Q463 70 390 305T316 539L246 316Q177 95 177 84Q177 72 198 59T248 46H253V0H245Q230 3 130 3Q47 3 38 0H32V46H45Q112 51 127 91Q128 92 224 399T320 708\",924:\"132 622Q125 629 121 631T105 634T62 637H29V683H135Q221 683 232 682T249 675Q250 674 354 398L458 124L562 398Q666 674 668 675Q671 681 683 682T781 683H887V637H854Q814 636 803 634T785 622V61Q791 51 802 49T854 46H887V0H876Q855 3 736 3Q605 3 596 0H585V46H618Q660 47 669 49T688 61V347Q688 424 688 461T688 546T688 613L687 632Q454 14 450 7Q446 1 430 1T410 7Q409 9 292 316L176 624V606Q175 588 175 543T175 463T175 356L176 86Q187 50 261 46H278V0H269Q254 3 154 3Q52 3 37 0H29V46H46Q78 48 98 56T122 69T132 86V622\",925:\"42 46Q74 48 94 56T118 69T128 86V634H124Q114 637 52 637H25V683H232L235 680Q237 679 322 554T493 303L578 178V598Q572 608 568 613T544 627T492 637H475V683H483Q498 680 600 680Q706 680 715 683H724V637H707Q634 633 622 598L621 302V6L614 0H600Q585 0 582 3T481 150T282 443T171 605V345L172 86Q183 50 257 46H274V0H265Q250 3 150 3Q48 3 33 0H25V46H42\",926:\"47 509L55 676Q55 677 333 677T611 676L619 509Q619 508 599 508T579 510Q579 529 575 557T564 589Q550 594 333 594T102 589Q95 586 91 558T87 510Q87 508 67 508T47 509ZM139 260V445H179V394H487V445H527V260H487V311H179V260H139ZM50 0L42 180H62Q82 180 82 178Q82 133 89 105Q92 93 95 90T108 86Q137 83 333 83Q530 83 558 86Q568 87 571 90T577 105Q584 133 584 178Q584 180 604 180H624L616 0H50\",927:\"56 340Q56 423 86 494T164 610T270 680T388 705Q521 705 621 601T722 341Q722 260 693 191T617 75T510 4T388 -22T267 3T160 74T85 189T56 340ZM467 647Q426 665 388 665Q360 665 331 654T269 620T213 549T179 439Q174 411 174 354Q174 144 277 61Q327 20 385 20H389H391Q474 20 537 99Q603 188 603 354Q603 411 598 439Q577 592 467 647\",928:\"128 619Q121 626 117 628T101 631T58 634H25V680H724V634H691Q651 633 640 631T622 619V61Q628 51 639 49T691 46H724V0H713Q692 3 569 3Q434 3 425 0H414V46H447Q489 47 498 49T517 61V634H232V348L233 61Q239 51 250 49T302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V619\",929:\"130 622Q123 629 119 631T103 634T60 637H27V683H214Q237 683 276 683T331 684Q419 684 471 671T567 616Q624 563 624 489Q624 421 573 372T451 307Q429 302 328 301H234V181Q234 62 237 58Q245 47 304 46H337V0H326Q305 3 182 3Q47 3 38 0H27V46H60Q102 47 111 49T130 61V622ZM507 488Q507 514 506 528T500 564T483 597T450 620T397 635Q385 637 307 637H286Q237 637 234 628Q231 624 231 483V342H302H339Q390 342 423 349T481 382Q507 411 507 488\",931:\"666 247Q664 244 652 126T638 4V0H351Q131 0 95 0T57 5V6Q54 12 57 17L73 36Q89 54 121 90T182 159L305 299L56 644L55 658Q55 677 60 681Q63 683 351 683H638V679Q640 674 652 564T666 447V443H626V447Q618 505 604 543T559 605Q529 626 478 631T333 637H294H189L293 494Q314 465 345 422Q400 346 400 340Q400 338 399 337L154 57Q407 57 428 58Q476 60 508 68T551 83T575 103Q595 125 608 162T624 225L626 251H666V247\",932:\"36 443Q37 448 46 558T55 671V677H666V671Q667 666 676 556T685 443V437H645V443Q645 445 642 478T631 544T610 593Q593 614 555 625Q534 630 478 630H451H443Q417 630 414 618Q413 616 413 339V63Q420 53 439 50T528 46H558V0H545L361 3Q186 1 177 0H164V46H194Q264 46 283 49T309 63V339V550Q309 620 304 625T271 630H244H224Q154 630 119 601Q101 585 93 554T81 486T76 443V437H36V443\",933:\"55 551Q55 604 91 654T194 705Q240 705 277 681T334 624T367 556T385 498L389 474L392 488Q394 501 400 521T414 566T438 615T473 659T521 692T584 705Q620 705 648 689T691 647T714 597T722 551Q722 540 719 538T699 536Q680 536 677 541Q677 542 677 544T676 548Q676 576 650 596T588 616H582Q538 616 505 582Q466 543 454 477T441 318Q441 301 441 269T442 222V61Q448 55 452 53T478 48T542 46H569V0H557Q533 3 389 3T221 0H209V46H236Q256 46 270 46T295 47T311 48T322 51T328 54T332 57T337 61V209Q337 383 333 415Q313 616 189 616Q154 616 128 597T101 548Q101 540 97 538T78 536Q63 536 59 538T55 551\",934:\"312 622Q310 623 307 625T303 629T297 631T286 634T270 635T246 636T211 637H184V683H196Q220 680 361 680T526 683H538V637H511Q468 637 447 635T422 631T411 622V533L425 531Q525 519 595 466T665 342Q665 301 642 267T583 209T506 172T425 152L411 150V61Q417 55 421 53T447 48T511 46H538V0H526Q502 3 361 3T196 0H184V46H211Q231 46 245 46T270 47T286 48T297 51T303 54T307 57T312 61V150H310Q309 151 289 153T232 166T160 195Q149 201 136 210T103 238T69 284T56 342Q56 414 128 467T294 530Q309 532 310 533H312V622ZM170 342Q170 207 307 188H312V495H309Q301 495 282 491T231 469T186 423Q170 389 170 342ZM415 188Q487 199 519 236T551 342Q551 384 539 414T507 459T470 481T434 491T415 495H410V188H415\",935:\"270 0Q252 3 141 3Q46 3 31 0H23V46H40Q129 50 161 88Q165 94 244 216T324 339Q324 341 235 480T143 622Q133 631 119 634T57 637H37V683H46Q64 680 172 680Q297 680 318 683H329V637H324Q307 637 286 632T263 621Q263 618 322 525T384 431Q385 431 437 511T489 593Q490 595 490 599Q490 611 477 622T436 637H428V683H437Q455 680 566 680Q661 680 676 683H684V637H667Q585 634 551 599Q548 596 478 491Q412 388 412 387Q412 385 514 225T620 62Q628 53 642 50T695 46H726V0H717Q699 3 591 3Q466 3 445 0H434V46H440Q454 46 476 51T499 64Q499 67 463 124T390 238L353 295L350 292Q348 290 343 283T331 265T312 236T286 195Q219 88 218 84Q218 70 234 59T272 46H280V0H270\",936:\"340 622Q338 623 335 625T331 629T325 631T314 634T298 635T274 636T239 637H212V683H224Q248 680 389 680T554 683H566V637H539Q479 637 464 635T439 622L438 407Q438 192 439 192Q443 193 449 195T474 207T507 232T536 276T557 344Q560 365 562 417T573 493Q587 536 620 544Q627 546 671 546H715L722 540V515Q714 509 708 509Q680 505 671 476T658 392T644 307Q599 177 451 153L438 151V106L439 61Q446 54 451 52T476 48T539 46H566V0H554Q530 3 389 3T224 0H212V46H239Q259 46 273 46T298 47T314 48T325 51T331 54T335 57T340 61V151Q126 178 117 406Q115 503 69 509Q55 509 55 526Q55 541 59 543T86 546H107H120Q150 546 161 543T184 528Q198 514 204 493Q212 472 213 420T226 316T272 230Q287 216 303 207T330 194L339 192Q340 192 340 407V622\",937:\"55 454Q55 503 75 546T127 617T197 665T272 695T337 704H352Q396 704 404 703Q527 687 596 615T666 454Q666 392 635 330T559 200T499 83V80H543Q589 81 600 83T617 93Q622 102 629 135T636 172L637 177H677V175L660 89Q645 3 644 2V0H552H488Q461 0 456 3T451 20Q451 89 499 235T548 455Q548 512 530 555T483 622T424 656T361 668Q332 668 303 658T243 626T193 560T174 456Q174 380 222 233T270 20Q270 7 263 0H77V2Q76 3 61 89L44 175V177H84L85 172Q85 171 88 155T96 119T104 93Q109 86 120 84T178 80H222V83Q206 132 162 199T87 329T55 454\",8192:\"\",8193:\"\",8194:\"\",8195:\"\",8196:\"\",8197:\"\",8198:\"\",8201:\"\",8202:\"\",8203:\"\",8204:\"\",8211:\"0 248V285H499V248H0\",8212:\"0 248V285H999V248H0\",8213:\"0 248V285H999V248H0\",8214:\"133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739\",8215:\"0 -62V-25H499V-62H0\",8216:\"64 494Q64 548 86 597T131 670T160 694Q163 694 172 685T182 672Q182 669 170 656T144 625T116 573T101 501Q101 489 102 489T107 491T120 497T138 500Q163 500 180 483T198 440T181 397T139 379Q110 379 87 405T64 494\",8217:\"78 634Q78 659 95 676T138 694Q166 694 189 668T212 579Q212 525 190 476T146 403T118 379Q114 379 105 388T95 401Q95 404 107 417T133 448T161 500T176 572Q176 584 175 584T170 581T157 576T139 573Q114 573 96 590T78 634\",8220:\"128 494Q128 528 137 560T158 616T185 658T209 685T223 694T236 685T245 670Q244 668 231 654T204 622T178 571T164 501Q164 489 165 489T170 491T183 497T201 500Q226 500 244 483T262 440T245 397T202 379Q173 379 151 405T128 494ZM332 494Q332 528 341 560T362 616T389 658T413 685T427 694T439 685T449 672Q449 669 437 656T411 625T383 573T368 501Q368 489 369 489T374 491T387 497T405 500Q430 500 448 483T466 440T449 397T406 379Q377 379 355 405T332 494\",8221:\"34 634Q34 659 50 676T93 694Q121 694 144 668T168 579Q168 525 146 476T101 403T73 379Q69 379 60 388T50 401Q50 404 62 417T88 448T116 500T131 572Q131 584 130 584T125 581T112 576T94 573Q69 573 52 590T34 634ZM238 634Q238 659 254 676T297 694Q325 694 348 668T372 579Q372 525 350 476T305 403T277 379Q273 379 264 388T254 401Q254 404 266 417T292 448T320 500T335 572Q335 584 334 584T329 581T316 576T298 573Q273 573 256 590T238 634\",8224:\"182 675Q195 705 222 705Q234 705 243 700T253 691T263 675L262 655Q262 620 252 549T240 454V449Q250 451 288 461T346 472T377 461T389 431Q389 417 379 404T346 390Q327 390 288 401T243 412H240V405Q245 367 250 339T258 301T261 274T263 225Q263 124 255 -41T239 -213Q236 -216 222 -216H217Q206 -216 204 -212T200 -186Q199 -175 199 -168Q181 38 181 225Q181 265 182 280T191 327T204 405V412H201Q196 412 157 401T98 390Q76 390 66 403T55 431T65 458T98 472Q116 472 155 462T205 449Q204 452 204 460T201 490T193 547Q182 619 182 655V675\",8225:\"181 658Q181 705 222 705T263 658Q263 633 252 572T240 497Q240 496 241 496Q243 496 285 507T345 519Q365 519 376 508T388 478Q388 466 384 458T375 447T361 438H344Q318 438 282 448T241 459Q240 458 240 456Q240 449 251 384T263 297Q263 278 255 267T238 253T222 250T206 252T190 266T181 297Q181 323 192 383T204 458Q204 459 203 459Q198 459 162 449T101 438H84Q74 443 70 446T61 457T56 478Q56 497 67 508T99 519Q117 519 159 508T203 496Q204 496 204 499Q204 507 193 572T181 658ZM181 202Q181 249 222 249T263 202Q263 185 259 161T249 103T240 48V41H243Q248 41 287 52T346 63T377 52T389 22Q389 8 379 -5T346 -19Q327 -19 288 -8T243 3H240V-4Q243 -24 249 -58T259 -117T263 -158Q263 -177 255 -188T238 -202T222 -205T206 -203T190 -189T181 -158Q181 -141 185 -117T195 -59T204 -4V3H201Q196 3 157 -8T98 -19Q76 -19 66 -6T55 22T65 49T98 63Q117 63 156 52T201 41H204V48Q201 68 195 102T185 161T181 202\",8226:\"55 251Q55 328 112 386T249 444T386 388T444 249Q444 171 388 113T250 55Q170 55 113 112T55 251\",8230:\"78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60ZM525 60Q525 84 542 102T585 120Q609 120 627 104T646 61Q646 36 629 18T586 0T543 17T525 60ZM972 60Q972 84 989 102T1032 120Q1056 120 1074 104T1093 61Q1093 36 1076 18T1033 0T990 17T972 60\",8242:\"79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43\",8245:\"12 501Q12 527 31 542T63 558Q73 560 77 560Q114 560 128 528Q133 518 188 293T244 61Q244 56 223 50T195 43Q192 43 190 45T102 263T14 486Q12 496 12 501\",8254:\"69 544V590H430V544H69\",8260:\"423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750\",8288:\"\",8289:\"\",8290:\"\",8291:\"\",8292:\"\",8407:\"377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694\",8450:\"684 131Q684 125 672 109T633 71T573 29T489 -5T386 -19Q330 -19 276 -3T174 46T91 134T44 261Q39 283 39 341T44 421Q66 538 143 611T341 699Q344 699 364 700T395 701Q449 698 503 677T585 655Q603 655 611 662T620 678T625 694T639 702Q650 702 657 690V481L653 474Q640 467 628 472Q624 476 618 496T595 541Q562 587 507 625T390 663H381Q337 663 299 625Q212 547 212 336Q212 249 233 179Q274 30 405 30Q533 30 641 130Q658 147 666 147Q671 147 677 143T684 131ZM250 625Q264 643 261 643Q238 635 214 620T161 579T110 510T79 414Q74 384 74 341T79 268Q89 213 113 169T164 101T217 61T260 39L277 34Q270 41 264 48Q199 111 181 254Q178 281 178 344T181 434Q200 559 250 625ZM621 565V625Q617 623 613 623Q603 619 590 619H575L588 605Q608 583 610 579L621 565\",8459:\"331 505Q331 519 382 574T472 629H480Q512 629 529 614T547 576Q547 555 534 532T520 504Q520 493 549 493Q590 493 623 506T668 533L681 546Q731 600 772 641T832 700T852 717Q857 717 860 711T865 697L866 690Q866 688 813 617T708 475T656 403Q682 403 714 404H771L780 416Q1004 707 1167 707Q1209 707 1225 689T1241 646Q1241 604 1209 547T1118 447Q1081 422 1034 405T952 382T888 374T857 370H852L826 334Q733 204 708 144Q691 104 691 76Q691 29 748 29Q768 31 791 48T831 83T862 122T881 146Q883 148 900 148H917Q921 143 921 140T914 127Q810 -8 723 -8Q611 -4 611 100Q611 142 631 191T676 275T721 337T742 367Q716 367 685 366H628L620 355Q618 352 558 268Q486 168 461 141Q405 79 339 34T215 -28Q188 -36 153 -36Q86 -36 58 -11T29 46Q29 82 55 120T123 158Q144 158 154 146T164 119Q164 102 143 89T100 75Q92 75 86 76T77 80T72 82Q67 82 67 60Q67 28 99 14T170 0Q214 0 272 47T419 224L505 340L518 357Q513 357 504 356T467 347T415 330T360 300T308 253Q296 238 295 237H278H274Q256 237 256 243Q256 248 263 256Q291 294 330 321T407 362T476 382T530 393T552 398Q556 402 573 423T600 454Q602 457 604 460T608 465L610 467Q565 455 532 455Q465 455 449 483Q447 487 447 498Q447 513 463 538T479 579Q479 593 463 593Q436 593 385 519Q374 504 371 502T360 499H353H349Q331 499 331 505ZM1195 634Q1195 643 1195 648T1185 662T1157 671Q1130 671 1092 644T1019 579T952 502T901 436L882 409L891 410Q900 411 913 412T934 415Q1081 439 1144 520Q1195 590 1195 634\",8460:\"11 -16L1 0Q7 6 25 27T57 62T91 88T128 101Q159 99 195 66L203 59L211 67Q239 95 239 133Q239 158 210 213T152 330T123 430Q123 477 173 536T269 630T320 666Q376 610 440 606H443Q457 606 466 611T519 647L542 664Q543 664 543 654V643L522 622Q434 537 403 537Q388 537 366 543T329 555T293 570T270 580L261 585L253 574Q206 517 206 475Q206 452 218 416T242 356L255 331Q256 331 270 345T324 391T421 459L437 468H453Q545 463 608 421L618 415L623 392Q644 307 644 233Q644 97 612 9Q604 -10 601 -15T581 -35Q505 -104 467 -124Q446 -133 431 -133Q414 -132 399 -126T376 -115T368 -107Q368 -106 392 -75L415 -43Q432 -67 444 -73T472 -79H474Q479 -79 484 -78T501 -69T521 -50T538 -13T551 46Q558 97 558 180Q558 232 557 245Q553 277 547 300T528 349T488 389T424 404Q344 404 276 295Q272 288 273 285Q300 216 300 168Q300 161 300 156T298 145T297 137T293 129T289 123T283 116T277 107Q212 23 178 -13L166 -26L149 -9Q108 32 81 32Q63 32 21 -7L11 -16\",8461:\"14 666Q14 675 26 683H344L351 679Q361 665 351 655Q344 648 317 648Q287 645 282 641Q270 637 269 623T266 497V370H511V497Q511 519 510 553Q509 615 507 626T496 641H495Q489 645 459 648Q420 648 420 665Q420 672 426 679L433 683H751Q762 676 762 666Q762 648 724 648Q684 645 677 632Q675 626 675 341Q675 57 677 52Q684 38 724 35Q762 35 762 16Q762 6 751 -1H433L426 3Q420 10 420 17Q420 35 459 35Q501 38 506 52Q511 64 511 190V323H266V190Q266 60 271 52Q276 38 317 35Q342 35 351 28Q360 17 351 3L344 -1H26Q14 5 14 16Q14 35 53 35Q94 38 99 52Q104 60 104 341T99 632Q93 645 53 648Q14 648 14 666ZM233 341V553Q233 635 239 648H131Q134 641 135 638T137 603T139 517T139 341Q139 131 138 89T132 37Q131 36 131 35H239Q233 47 233 129V341ZM639 341V489Q639 548 639 576T640 620T642 639T646 648H537L542 639Q546 625 546 341Q546 130 545 88T538 37Q537 36 537 35H646Q643 41 643 42T641 55T639 84T639 140V341\",8462:\"137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683\",8463:\"150 475Q147 475 118 466T82 457Q73 457 64 467T54 487Q54 490 55 492Q63 506 64 506Q67 512 118 526Q162 541 169 546Q173 559 175 575Q181 596 181 604Q181 613 166 617Q164 617 153 618T135 619Q119 619 114 621T109 630Q109 636 114 656T122 681Q125 685 202 688Q272 695 286 695Q304 695 304 684Q304 682 291 628L278 577L386 612Q466 635 476 635T492 627T499 607Q499 593 489 586Q485 583 373 546L262 512Q262 511 248 455T233 397T236 397T244 404Q295 441 357 441Q405 441 445 417T485 333Q485 284 449 178T412 58T426 44Q447 44 466 68Q485 87 500 130L509 152H531H543Q562 152 562 144Q562 128 546 93T494 23T415 -13Q385 -13 359 3T322 44Q318 52 318 77Q318 99 352 196T386 337Q386 386 346 386Q318 386 286 370Q267 361 245 338T211 292Q207 287 193 235T162 113T138 21Q128 7 122 4Q105 -12 83 -12Q66 -12 54 -2T42 26Q42 45 98 257L151 475H150\",8464:\"487 225Q398 255 398 342Q398 410 455 492Q491 545 552 582T669 636T800 673T918 712Q930 717 933 717Q939 717 942 706T946 689Q946 686 915 664T830 591T729 480Q691 429 657 351T615 260Q628 260 663 279T733 339T769 426Q769 442 767 459T764 479Q764 484 766 486Q769 488 781 493T797 498Q802 498 803 494T808 472Q813 442 813 425Q813 369 761 315Q692 246 605 224L592 220L584 209Q547 155 487 106T358 25Q270 -17 191 -17Q143 -17 101 1T59 59Q59 96 85 127T148 158Q169 158 179 146T189 119Q189 102 167 89T125 75Q116 75 109 77T101 81T97 80Q96 77 96 72Q96 50 123 36T204 21H216Q249 21 302 49T411 134Q439 161 459 187Q487 220 487 225ZM460 334Q460 308 472 290T498 268L510 263Q515 263 545 313T626 438T723 561Q751 589 775 609T808 636T817 644H816Q813 644 732 618Q681 601 645 584T585 548T549 514T518 476Q460 390 460 334\",8465:\"190 601Q161 601 137 587T97 553T71 512T55 477T48 463Q44 465 39 468L30 473L35 488Q73 594 106 636T199 685Q200 686 211 686Q250 686 326 652T417 617Q435 617 455 626T497 652T522 670Q532 660 532 654Q469 591 390 550L378 543L343 556Q223 601 190 601ZM378 208Q378 249 369 318T360 424Q360 430 360 439T361 451L362 462Q416 526 482 571L495 580L503 577L511 575L499 562Q442 502 442 465Q442 436 452 368T462 246Q462 169 442 128T385 56Q292 -26 195 -26Q150 -26 104 14L96 21L43 -16Q43 -15 43 -14T41 -10T38 0L48 13Q76 50 123 97L150 125Q154 131 159 131Q166 131 171 116T182 81T193 53Q199 43 216 33T261 22Q307 22 344 68Q378 113 378 208\",8466:\"572 704Q607 704 607 693Q607 681 590 664H588Q586 664 584 664T578 663Q504 658 434 592T363 457Q363 426 386 401Q417 371 481 361Q490 360 527 360H562Q565 363 595 404T666 494T755 596T854 682T945 717Q986 717 1010 696T1035 637Q1035 593 996 531T873 414Q809 378 753 360T674 338T651 333Q650 333 633 308T588 245T544 185Q498 126 426 78L413 68H414Q498 47 575 47Q626 47 676 74T755 139L762 148H779H783Q802 148 802 142Q802 137 795 129Q760 81 691 33T544 -16Q470 -16 366 20L341 29L331 24Q239 -17 155 -17H141Q90 -17 61 -12T23 1T14 22Q14 44 39 65T103 95Q126 101 180 101Q224 101 258 98T309 90T330 86Q332 86 353 103T389 135Q401 146 412 158T431 179T450 203T466 225T485 252T505 280L535 322H509Q391 322 340 362T289 452Q289 495 321 547T396 630Q438 665 486 684T572 704ZM978 635Q978 644 977 650T973 661T968 668T961 673T954 676T946 678T938 680Q929 680 925 677Q893 659 795 531T682 377Q683 377 711 385T755 401T801 421T856 453T906 495Q927 516 952 557T978 635ZM274 50Q274 51 258 54T216 61T166 65Q160 65 151 65T140 64Q115 58 102 48T88 31Q88 20 159 20Q191 20 219 27T261 42L274 50\",8467:\"345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634\",8469:\"20 664Q20 666 31 683H142Q256 683 258 681Q259 680 279 653T342 572T422 468L582 259V425Q582 451 582 490T583 541Q583 611 573 628T522 648Q500 648 493 654Q484 665 493 679L500 683H691Q702 676 702 666Q702 657 698 652Q688 648 680 648Q633 648 627 612Q624 601 624 294V-8Q616 -20 607 -20Q601 -20 596 -15Q593 -13 371 270L156 548L153 319Q153 284 153 234T152 167Q152 103 156 78T172 44T213 34Q236 34 242 28Q253 17 242 3L236 -1H36Q24 6 24 16Q24 34 56 34Q58 35 69 36T86 40T100 50T109 72Q111 83 111 345V603L96 619Q72 643 44 648Q20 648 20 664ZM413 419L240 648H120L136 628Q137 626 361 341T587 54L589 68Q589 78 589 121V192L413 419\",8472:\"300 74Q300 133 338 133Q350 133 356 126T363 109Q363 88 340 76Q340 71 342 62T358 39T393 26Q435 26 474 67T532 182T551 290Q551 325 535 349T484 373Q430 373 378 348T291 289T228 218T187 157T174 130Q254 30 265 10Q276 -15 276 -41Q276 -101 235 -158T142 -216Q112 -216 90 -195T67 -118Q67 -40 104 64L110 81Q81 118 81 174Q81 268 134 360T247 453Q252 453 255 451T258 447L259 445Q259 432 253 420Q251 416 242 416Q209 411 176 341T142 203Q142 193 143 184T146 170T149 165L158 180Q215 280 303 345T485 410Q548 410 586 368T625 255Q625 157 553 74T389 -10H383Q349 -10 325 14Q302 37 300 74ZM105 -123Q105 -134 106 -141T110 -158T122 -173T145 -178Q155 -178 160 -176Q184 -163 199 -132T214 -73Q214 -69 214 -66T213 -59T212 -53T209 -47T205 -41T199 -33T193 -25T184 -14T174 -1L165 10Q156 22 148 32L139 43Q138 43 130 15T113 -54T105 -123\",8473:\"16 666Q16 675 28 683H195Q334 683 370 682T437 672Q511 657 554 611T597 495Q597 343 404 309Q402 308 401 308Q381 303 319 303H261V181Q261 157 262 120Q262 60 267 50T304 36Q310 35 313 35Q352 35 352 17Q352 10 346 3L339 -1H28Q16 5 16 16Q16 35 53 35Q68 36 75 37T87 42T95 52Q98 61 98 341T95 630Q91 640 83 643T53 648Q16 648 16 666ZM235 35Q228 46 227 84Q226 129 226 337V621L230 635L237 648H128Q128 647 133 632Q136 620 136 341Q136 64 133 50L128 35H235ZM301 341H313Q339 341 354 344T389 362T417 410T426 498Q426 586 401 616T322 647Q301 647 293 643Q271 637 264 621Q261 617 261 479V341H301ZM429 350Q431 350 443 353T476 367T515 391T548 432T562 490Q562 550 524 592Q507 607 484 619Q481 621 448 635L433 639L439 621Q462 578 462 506Q462 448 454 413T437 366T428 350H429\",8474:\"480 -10Q480 -13 486 -24T507 -50T541 -80T588 -104T648 -114Q666 -114 688 -110T714 -106Q724 -106 728 -114T729 -130Q723 -145 663 -163T548 -181Q503 -181 463 -169T395 -139T343 -97T307 -56T284 -19L280 -3L262 1Q188 24 131 81Q57 155 37 275Q34 292 34 342T37 410Q58 528 131 601Q179 652 248 676T388 701Q485 701 562 661Q698 595 731 448Q742 410 742 341T731 235Q707 141 646 81Q616 50 575 27T493 -5L480 -10ZM568 342Q568 613 437 659L395 666Q329 666 286 626Q232 570 213 439Q210 408 210 342T213 246Q231 113 286 57Q309 37 342 23Q357 19 389 19Q420 19 437 23Q469 38 491 57Q568 134 568 342ZM174 341V354Q174 393 175 419T183 484T205 561T246 635L249 639Q246 639 224 627T193 608Q189 606 183 601T169 589T155 577Q69 491 69 344Q69 133 231 52Q247 42 247 46Q247 46 246 48Q231 69 222 85T200 141T177 239Q174 269 174 341ZM708 341Q708 410 689 467T640 556T588 606T546 630Q532 638 531 638Q530 638 531 635Q563 590 577 543Q602 472 602 341V316Q602 264 599 230T580 144T531 48Q529 44 532 45T546 52Q575 68 596 84T642 128T683 200T706 299Q708 327 708 341ZM391 -17H333Q329 -15 326 -15Q324 -15 324 -17Q324 -21 362 -68Q424 -130 506 -143Q518 -144 544 -144Q569 -144 577 -143L589 -141L575 -139Q544 -127 509 -101T453 -37L442 -19L391 -17\",8475:\"224 266Q185 266 156 286T127 354Q127 419 176 487T282 594Q346 642 433 679T615 717Q732 717 802 680L815 673Q824 680 840 690T860 700Q864 700 867 693T872 680L873 673Q873 668 858 659L845 651L853 642Q887 605 887 561Q887 500 840 439Q790 379 681 336Q693 312 693 292Q692 276 689 263T672 229T653 198T620 152L575 87Q557 57 557 33Q557 24 560 17T566 8L569 5Q546 5 508 25T470 76Q470 83 473 92T545 198T616 310Q616 317 615 318T612 319Q603 319 575 315H560L545 291Q492 201 429 135T277 23Q202 -17 142 -17H130Q50 -17 16 17Q-2 35 -2 57Q-2 95 24 126T88 158Q106 158 116 147T127 121Q127 110 122 102Q116 93 99 84T63 75Q58 75 53 76T47 77T45 75T44 67Q45 52 57 42T88 27T120 21T144 19Q174 19 208 36T267 76T324 134T369 189T406 239Q462 319 504 374T616 503T755 631L770 644Q767 647 753 654T697 670T602 680Q493 680 399 631T247 516Q218 485 193 440T168 359Q168 328 188 316T234 303Q255 303 273 315T304 340T343 389T390 448Q428 490 441 510T456 548Q456 557 458 559Q459 560 476 567T496 575Q505 575 505 558Q505 511 434 412Q429 406 427 403Q397 360 378 343Q342 308 300 287T224 266ZM819 564Q819 595 800 619L784 606Q729 557 692 512T605 387L591 365L610 364Q622 364 631 363T641 361Q643 361 651 363Q725 388 772 449T819 564ZM794 141Q794 123 725 63T612 3Q609 3 612 5Q612 5 615 7Q639 19 678 57T742 131L755 148H772H780Q794 148 794 141ZM588 -3Q590 0 593 0H594L593 -1Q592 -1 590 -2L588 -3\",8476:\"27 496Q31 569 102 627T234 685Q236 685 241 685T251 686Q287 686 318 672T367 638T399 598T418 564L423 550Q424 554 434 567T463 601T505 639T561 671T626 685Q672 685 688 659T710 572Q713 533 721 523T766 513Q781 513 787 514T794 516Q796 512 798 509T801 504T802 501T787 493Q702 461 624 401L607 389Q655 383 688 358L697 352V342Q699 330 699 297Q704 209 710 173T734 103Q751 69 765 69Q769 69 806 83L824 90V74Q823 73 759 24T693 -26Q692 -26 660 32L628 90L629 111Q631 159 631 177Q631 278 614 300Q584 340 523 340Q500 340 467 333T431 325Q429 325 429 322Q428 321 426 308T420 275T410 230T392 178T366 125L358 112L342 99Q306 70 269 38T213 -10T193 -26Q192 -26 163 0T116 26Q82 26 50 -8L42 -16L35 -8L27 0L35 10Q43 21 58 38T104 80T158 106Q179 106 218 65L235 48Q238 48 255 60T295 99T329 158Q352 231 352 359Q352 555 242 614Q210 628 187 628Q140 628 116 600T91 548Q91 522 138 464T185 382V376Q185 345 158 313T103 263L76 246Q74 244 64 253L54 260L65 267Q91 285 100 302Q111 318 111 337Q111 355 69 410T27 496ZM562 628Q504 628 443 507L435 491L436 479Q437 471 437 446Q437 396 432 351L529 389L602 426Q673 462 673 463H672Q644 470 637 483T622 553Q608 628 562 628\",8477:\"17 665Q17 672 28 683H221Q415 681 439 677Q461 673 481 667T516 654T544 639T566 623T584 607T597 592T607 578T614 565T618 554L621 548Q626 530 626 497Q626 447 613 419Q578 348 473 326L455 321Q462 310 473 292T517 226T578 141T637 72T686 35Q705 30 705 16Q705 7 693 -1H510Q503 6 404 159L306 310H268V183Q270 67 271 59Q274 42 291 38Q295 37 319 35Q344 35 353 28Q362 17 353 3L346 -1H28Q16 5 16 16Q16 35 55 35Q96 38 101 52Q106 60 106 341T101 632Q95 645 55 648Q17 648 17 665ZM241 35Q238 42 237 45T235 78T233 163T233 337V621L237 635L244 648H133Q136 641 137 638T139 603T141 517T141 341Q141 131 140 89T134 37Q133 36 133 35H241ZM457 496Q457 540 449 570T425 615T400 634T377 643Q374 643 339 648Q300 648 281 635Q271 628 270 610T268 481V346H284Q327 346 375 352Q421 364 439 392T457 496ZM492 537T492 496T488 427T478 389T469 371T464 361Q464 360 465 360Q469 360 497 370Q593 400 593 495Q593 592 477 630L457 637L461 626Q474 611 488 561Q492 537 492 496ZM464 243Q411 317 410 317Q404 317 401 315Q384 315 370 312H346L526 35H619L606 50Q553 109 464 243\",8484:\"39 -1Q29 9 29 12Q29 23 60 77T219 337L410 648H364Q261 648 210 628Q168 612 142 588T109 545T97 509T88 490Q85 489 80 489Q72 489 61 503L70 588Q72 607 75 628T79 662T81 675Q84 677 88 681Q90 683 341 683H592Q604 673 604 666Q604 662 412 348L221 37Q221 35 301 35Q406 35 446 48Q504 68 543 111T597 212Q602 239 617 239Q624 239 629 234T635 223Q635 215 621 113T604 8L597 1Q595 -1 317 -1H39ZM148 637L166 648H112V632Q111 629 110 622T108 612Q108 608 110 608T116 612T129 623T148 637ZM552 646Q552 648 504 648Q452 648 450 643Q448 639 266 343T77 37Q77 35 128 35H179L366 339L552 646ZM572 35Q581 89 581 97L561 77Q542 59 526 48L508 37L539 35H572\",8486:\"55 454Q55 503 75 546T127 617T197 665T272 695T337 704H352Q396 704 404 703Q527 687 596 615T666 454Q666 392 635 330T559 200T499 83V80H543Q589 81 600 83T617 93Q622 102 629 135T636 172L637 177H677V175L660 89Q645 3 644 2V0H552H488Q461 0 456 3T451 20Q451 89 499 235T548 455Q548 512 530 555T483 622T424 656T361 668Q332 668 303 658T243 626T193 560T174 456Q174 380 222 233T270 20Q270 7 263 0H77V2Q76 3 61 89L44 175V177H84L85 172Q85 171 88 155T96 119T104 93Q109 86 120 84T178 80H222V83Q206 132 162 199T87 329T55 454\",8487:\"126 584Q119 584 110 539T97 493Q95 490 73 490Q44 490 44 501Q44 515 62 590Q75 672 82 679Q84 684 177 684Q193 684 214 684T241 685Q265 685 271 682T277 664V648Q271 572 229 434T186 231Q186 173 203 132T247 70T302 42T360 33Q391 33 419 42T474 72T517 133T533 231Q533 297 491 437T442 648Q442 675 446 679Q448 684 542 684Q635 684 637 681Q640 678 657 594T675 501Q675 490 646 490Q624 490 622 493Q620 493 609 538T593 584Q591 585 585 585T569 586T551 588H513Q514 586 518 573T538 531T582 453Q647 340 660 277Q663 259 663 232Q663 194 657 177Q652 151 629 112T560 39Q495 -5 424 -19Q403 -22 360 -22Q318 -22 297 -19Q239 -8 193 18T120 74T80 131T62 177Q56 194 56 229Q56 281 74 328T137 453Q160 491 174 518T193 555T201 575T206 588H168Q160 587 150 587T134 586T126 584\",8488:\"148 590Q95 592 91 627V633L160 729H176Q169 713 169 705Q169 670 244 670Q269 670 305 672T357 675Q405 675 432 661T468 609Q469 605 469 596Q469 572 460 540Q433 463 301 372Q325 378 359 378Q431 378 472 350T519 297Q532 249 532 198Q532 115 500 40T442 -57Q335 -139 202 -139Q165 -139 125 -131L112 -129V-100Q112 -49 106 -33T75 -17Q55 -17 31 -35L22 -42L11 -26L22 -18Q94 36 151 36H160Q171 36 178 33T188 27T194 13T196 -5T197 -32Q198 -79 206 -90Q217 -107 251 -107Q336 -107 389 -33T442 155Q442 240 407 274Q362 319 285 319Q236 319 192 298Q188 298 181 309L224 372Q227 373 234 374T246 376T257 379T271 384T285 391T302 402T321 417Q384 471 384 540Q384 562 366 581T306 600Q292 600 233 595T148 590\",8492:\"256 262Q161 262 161 351Q161 408 203 471T289 570Q380 645 475 676T617 707L627 708Q637 708 644 708Q759 708 831 675L844 669L857 677Q892 700 896 700Q902 700 907 685Q907 683 907 681T908 678T909 676T909 673Q909 671 909 670T906 667T903 664T897 660T889 655L878 647L889 636Q928 598 928 548Q928 529 923 510T907 474T886 442T861 412T837 388T815 368T800 355Q847 323 847 270V263Q847 205 806 145Q766 82 695 37T564 -8Q527 -8 506 10T484 58Q484 85 501 117T543 172Q607 226 685 228Q695 228 698 226Q703 220 692 206Q684 194 682 193T665 191Q625 189 595 172T550 133T529 93T522 66Q522 29 576 29Q642 29 705 109Q785 211 785 270Q785 287 779 300T769 316T755 327L740 319Q682 290 634 290Q611 290 592 294H588L565 261Q559 252 544 231T522 201T504 178T481 151T455 123Q394 63 314 18T159 -28Q103 -28 67 -6T31 54Q31 88 57 123T123 158Q144 158 154 146T164 119Q164 102 142 89T100 75Q94 75 87 77T76 80L72 81Q69 78 69 65Q69 35 102 22T175 9Q184 9 198 11Q248 23 300 70T403 187T508 331T636 489T789 629L801 639Q796 642 786 647T732 661T633 670Q592 670 558 665Q481 651 409 613T286 520Q274 507 258 485T222 424T202 354Q202 299 269 299Q282 299 295 301T318 307T339 317T358 329T376 345T391 362T406 380T420 398T433 417T445 435Q496 512 496 547Q496 559 497 560T516 569Q526 574 530 574Q538 574 538 540Q538 414 427 325Q342 262 256 262ZM689 382Q708 382 753 375L765 387Q860 482 860 555Q860 594 839 610L822 592Q794 563 752 511T680 420T651 380Q655 381 660 381Q664 382 689 382ZM697 344Q692 345 681 345H675Q671 345 665 345T655 344T650 344L648 342Q646 339 645 338Q643 333 639 327H653Q670 329 676 330Q706 342 706 343Q702 344 697 344\",8493:\"299 585Q333 609 384 634T470 672L505 685Q506 685 513 662T531 613T548 580Q553 576 563 576Q575 576 605 585Q607 585 607 575V564Q537 532 496 527Q475 542 456 567T427 610T415 627Q410 627 398 618T382 603Q373 588 373 558T386 475T400 399Q400 337 366 303Q343 281 309 266T254 247T226 242L214 257Q214 258 223 260T251 272T287 299Q304 316 304 360Q304 396 289 451T274 532Q274 553 277 561V564H269Q205 558 172 501T139 358Q139 207 226 127T443 46Q448 46 457 46T470 47L485 48L601 106Q602 106 602 93V80Q551 48 517 25T474 -4T460 -13T443 -19Q409 -24 367 -24Q360 -24 351 -24T335 -23T326 -22Q190 -2 125 87T59 319V328Q62 412 96 487L101 500L118 512Q189 563 245 591L266 601L299 585\",8496:\"280 398L279 400Q278 402 277 405T275 413T272 426T271 443Q271 494 302 544T379 629T472 685T553 707H565H573Q630 707 664 689Q718 661 718 604Q718 548 662 492T553 436Q525 436 508 451T490 492Q490 534 531 579T619 630Q632 630 632 623Q632 619 624 606Q614 593 602 592T578 580Q566 568 549 541T532 497Q532 474 565 474Q577 474 587 476Q600 481 611 489Q630 503 651 535T672 596Q672 660 553 660H548Q494 660 450 616Q421 587 384 531T343 439Q341 420 344 415H345Q346 415 352 415T369 417T391 418Q421 418 440 412T466 398T473 382Q473 367 452 353T398 339Q370 339 348 345T315 359L304 366Q297 365 284 360T234 321T163 234Q120 160 120 117Q120 83 149 57T252 30Q311 30 357 60Q386 79 414 114T452 179Q454 186 454 200Q454 230 415 242Q401 246 373 246Q353 246 347 244Q328 236 313 219T288 184T274 149T265 121T261 109Q260 107 247 102T230 97Q223 97 223 105Q223 148 271 216T386 284Q446 284 483 260T520 195Q520 121 427 57T239 -8Q192 -8 152 2T79 46T46 133Q46 212 107 285T269 394L280 398ZM427 376Q427 377 402 380Q386 380 386 379L425 375L427 376\",8497:\"258 428Q258 489 322 562T482 685T661 735Q726 735 824 693T977 651Q990 651 990 644Q990 639 971 612T948 581Q947 580 938 580Q878 580 784 621T617 663Q544 663 480 635T379 568T320 492T299 431Q299 387 362 387Q404 387 438 402T493 438T527 486T546 531T551 563Q551 569 550 575T549 584T549 590Q551 593 563 602T579 611Q584 611 592 605T608 584T616 548Q616 513 595 477T554 423Q518 392 464 372T349 351Q258 351 258 428ZM324 187T305 187T286 196Q286 202 301 217Q327 242 383 262T484 290L527 297L567 356Q624 441 643 467T688 521Q715 550 752 581T795 613T804 603T808 587T778 547T702 444T626 300H637Q663 302 685 306L697 308L703 317Q745 376 792 400Q806 406 818 406Q849 406 849 375Q847 355 831 338T797 312T763 296L747 290Q744 289 735 266T724 241Q722 240 702 232T664 217T645 210Q638 210 638 218Q638 224 653 246T669 270Q669 271 668 271Q663 270 624 264L607 263Q570 199 529 152Q513 133 484 106T409 45T305 -13T193 -36Q109 -36 74 -10T39 50Q39 86 64 121T128 158Q171 158 171 121Q171 97 141 83Q125 75 107 75Q93 75 80 83Q76 71 76 62Q76 29 117 15T207 0Q324 0 494 248L501 258H495Q368 239 330 195Q324 187 305 187ZM775 335Q806 358 806 368Q805 369 804 369Q800 369 791 360Q774 336 775 335\",8498:\"457 681Q471 695 477 695Q485 695 497 681V12L484 -1H68Q55 14 55 19T68 39H457V328H215L211 335Q198 346 211 359L217 368H457V681\",8499:\"112 -7Q86 -7 58 6T30 48T54 103T113 130Q129 130 141 121T153 94Q153 71 132 59T90 47H80Q95 30 133 30Q180 30 228 63T311 137T402 249T500 361Q566 425 703 529T910 693Q942 721 945 721T958 716T970 709Q974 704 964 691Q961 688 905 622T847 554L595 181Q553 121 527 77T496 19L492 5Q497 5 531 46Q579 98 685 224T850 409L972 524Q994 543 1004 556Q1012 567 1097 643T1186 720Q1194 720 1206 715T1215 703Q1215 701 1191 671T1133 599T1080 530Q1036 461 983 357T862 152Q802 64 799 17Q799 7 800 5T811 2Q836 2 882 37T969 126Q972 130 974 134T978 138T983 139T996 140H1012Q1018 134 1018 132Q1018 122 981 83T889 4T795 -35Q761 -35 745 -12T728 48Q728 122 781 190Q833 269 890 370L927 434L914 422Q848 360 752 245Q643 117 582 51T498 -33T461 -50Q424 -48 424 -4Q424 84 481 172L714 495Q591 406 523 333Q507 316 430 226T313 95Q263 48 221 24T162 -4T120 -7H112\",8501:\"55 613Q55 643 61 663T74 688T85 694Q94 694 94 681Q98 632 134 588L412 285Q416 311 430 397T447 509V519L438 526Q407 554 398 571T388 617T394 664T407 688T418 694Q425 694 427 684Q429 675 454 635T488 586Q490 584 496 579T513 563T537 540Q555 516 555 487Q555 460 549 441T537 416T528 409Q519 409 517 415T513 435T503 463Q492 481 490 481Q454 264 454 246Q454 237 479 212T529 152T555 79Q555 32 538 9Q531 1 524 1Q516 1 516 13Q512 62 476 106Q468 115 337 258T195 412L193 406Q191 401 189 394T183 377T176 352T171 322T167 284T165 240Q165 224 166 220Q171 199 211 152T252 70Q252 45 235 29T203 8T175 1Q170 0 115 0H79Q60 0 58 3T55 20Q55 31 58 34Q60 37 76 37Q112 39 126 46T140 70Q140 96 112 148T83 236Q83 281 102 334T140 419T159 452Q55 556 55 613\",8502:\"56 706V726Q56 763 76 763Q83 763 87 759T98 741Q108 726 116 721L127 717L340 715Q547 712 564 709Q575 705 587 692Q599 680 605 663L609 650V137H676Q687 124 687 115Q687 110 678 100T622 43L558 -21H-9Q-22 -6 -22 -1T-13 14T42 72L107 137H569V339Q569 541 567 546Q558 555 554 557L545 563H329Q118 566 101 569Q90 573 78 586Q54 610 54 661Q54 670 56 706\",8503:\"56 750Q68 764 76 764Q88 764 97 743T125 717Q131 715 240 715T358 713Q421 691 421 640Q421 608 399 588T358 566Q353 566 352 565T351 557L356 526Q356 488 379 346T402 97Q400 21 385 -12Q366 -43 351 -43Q335 -43 329 -10Q316 40 316 64Q316 67 315 67Q313 67 269 26L222 -21H-9Q-22 -7 -22 -1Q-22 4 -14 14T42 73L107 137H311V564H211H164Q115 564 93 573T60 615Q56 630 56 690V750\",8504:\"62 757Q69 764 75 764Q87 764 97 741Q102 731 105 728T117 721L129 715H349Q569 715 580 710Q618 701 635 670Q640 661 640 639Q640 609 622 590Q617 583 604 575T580 566H573V553Q575 547 576 531T582 469T600 353Q624 205 624 104Q624 46 617 17T591 -32Q581 -43 573 -43Q550 -43 540 44Q535 73 533 319V564H322Q117 566 100 570Q90 573 77 586Q54 609 54 663Q54 689 55 706Q55 738 56 745T62 757\",8513:\"239 665Q194 665 154 653T90 629T66 617Q59 617 53 623T46 637Q46 652 66 659Q129 695 197 701Q218 705 248 705Q293 705 335 693Q371 684 435 644Q543 562 573 417Q577 393 577 341Q577 290 573 266Q531 83 384 10Q346 -9 315 -16T234 -23H206Q202 -23 183 -23T152 -21T120 -18T88 -10T63 3T44 24L37 35V297L50 310H235Q248 297 248 290Q248 285 235 270H77V103Q77 88 77 80T77 63T78 50T80 43T82 38T85 35T89 32T95 30Q126 20 206 17Q289 17 330 30Q407 55 460 120T533 275Q538 305 538 342Q538 486 452 575T239 665\",8592:\"944 261T944 250T929 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270H929Q944 261 944 250\",8593:\"27 414Q17 414 17 433Q17 437 17 439T17 444T19 447T20 450T22 452T26 453T30 454T36 456Q80 467 120 494T180 549Q227 607 238 678Q240 694 251 694Q259 694 261 684Q261 677 265 659T284 608T320 549Q340 525 363 507T405 479T440 463T467 455T479 451Q483 447 483 433Q483 413 472 413Q467 413 458 416Q342 448 277 545L270 555V-179Q262 -193 252 -193H250H248Q236 -193 230 -179V555L223 545Q192 499 146 467T70 424T27 414\",8594:\"56 237T56 250T70 270H835Q719 357 692 493Q692 494 692 496T691 499Q691 511 708 511H711Q720 511 723 510T729 506T732 497T735 481T743 456Q765 389 816 336T935 261Q944 258 944 250Q944 244 939 241T915 231T877 212Q836 186 806 152T761 85T740 35T732 4Q730 -6 727 -8T711 -11Q691 -11 691 0Q691 7 696 25Q728 151 835 230H70Q56 237 56 250\",8595:\"473 86Q483 86 483 67Q483 63 483 61T483 56T481 53T480 50T478 48T474 47T470 46T464 44Q428 35 391 14T316 -55T264 -168Q264 -170 263 -173T262 -180T261 -184Q259 -194 251 -194Q242 -194 238 -176T221 -121T180 -49Q169 -34 155 -21T125 2T95 20T67 33T44 42T27 47L21 49Q17 53 17 67Q17 87 28 87Q33 87 42 84Q158 52 223 -45L230 -55V312Q230 391 230 482T229 591Q229 662 231 676T243 693Q244 694 251 694Q264 692 270 679V-55L277 -45Q307 1 353 33T430 76T473 86\",8596:\"263 479Q267 501 271 506T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270H835Q729 349 696 475Q691 493 691 500Q691 511 711 511Q720 511 723 510T729 506T732 497T735 481T743 456Q765 389 816 336T935 261Q944 258 944 250Q944 244 939 241T915 231T877 212Q836 186 806 152T761 85T740 35T732 4Q730 -6 727 -8T711 -11Q691 -11 691 0Q691 7 696 25Q728 151 835 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q144 292 194 349T263 479\",8597:\"27 492Q17 492 17 511Q17 515 17 517T17 522T19 525T20 528T22 530T26 531T30 532T36 534Q80 545 120 572T180 627Q210 664 223 701T238 755T250 772T261 762Q261 757 264 741T282 691T319 628Q352 589 390 566T454 536L479 529Q483 525 483 511Q483 491 472 491Q467 491 458 494Q342 526 277 623L270 633V-133L277 -123Q307 -77 353 -45T430 -2T473 8Q483 8 483 -11Q483 -15 483 -17T483 -22T481 -25T480 -28T478 -30T474 -31T470 -32T464 -34Q407 -49 364 -84T300 -157T270 -223T261 -262Q259 -272 250 -272Q242 -272 239 -255T223 -201T180 -127Q169 -112 155 -99T125 -76T95 -58T67 -45T44 -36T27 -31L21 -29Q17 -25 17 -11Q17 9 28 9Q33 9 42 6Q158 -26 223 -123L230 -133V633L223 623Q192 577 146 545T70 502T27 492\",8598:\"204 662Q257 662 301 676T369 705T394 720Q398 720 407 711T417 697Q417 688 389 671T310 639T212 623Q176 623 153 628Q151 628 221 557T546 232Q942 -164 943 -168Q944 -170 944 -174Q944 -182 938 -188T924 -195Q922 -195 916 -193Q912 -191 517 204Q440 281 326 394T166 553L121 598Q126 589 126 541Q126 438 70 349Q59 332 52 332Q48 332 39 341T29 355Q29 358 38 372T57 407T77 464T86 545Q86 583 78 614T63 663T55 683Q55 693 65 693Q73 693 82 688Q136 662 204 662\",8599:\"582 697Q582 701 591 710T605 720Q607 720 630 706T697 677T795 662Q830 662 863 670T914 686T934 694Q942 694 944 685Q944 680 936 663T921 615T913 545Q913 490 927 446T956 379T970 355Q970 351 961 342T947 332Q940 332 929 349Q874 436 874 541Q874 590 878 598L832 553Q787 508 673 395T482 204Q87 -191 83 -193Q77 -195 75 -195Q67 -195 61 -189T55 -174Q55 -170 56 -168Q58 -164 453 232Q707 487 777 557T847 628Q824 623 787 623Q689 623 599 679Q582 690 582 697\",8600:\"55 675Q55 683 60 689T75 695Q77 695 83 693Q87 691 482 296Q532 246 605 174T717 62T799 -20T859 -80T878 -97Q874 -93 874 -41Q874 64 929 151Q940 168 947 168Q951 168 960 159T970 145Q970 143 956 121T928 54T913 -45Q913 -83 920 -114T936 -163T944 -185Q942 -194 934 -194Q932 -194 914 -186T864 -170T795 -162Q743 -162 698 -176T630 -205T605 -220Q601 -220 592 -211T582 -197Q582 -187 611 -170T691 -138T787 -123Q824 -123 847 -128Q848 -128 778 -57T453 268Q58 664 56 668Q55 670 55 675\",8601:\"126 -41Q126 -92 121 -97Q121 -98 139 -80T200 -20T281 61T394 173T517 296Q909 690 916 693Q922 695 924 695Q932 695 938 689T944 674Q944 670 943 668Q942 664 546 268Q292 13 222 -57T153 -128Q176 -123 212 -123Q310 -123 400 -179Q417 -190 417 -197Q417 -201 408 -210T394 -220Q392 -220 369 -206T302 -177T204 -162Q131 -162 67 -194Q63 -195 59 -192T55 -183Q55 -180 62 -163T78 -115T86 -45Q86 10 72 54T44 120T29 145Q29 149 38 158T52 168Q59 168 70 151Q126 62 126 -41\",8602:\"942 250Q942 244 928 230H511L457 148Q440 124 420 93Q404 68 400 64T389 60Q381 60 375 66T368 81Q368 88 415 159L462 230H175L188 214Q210 188 235 145T264 85Q264 75 260 74T231 72L206 74L191 103Q169 142 164 150Q130 195 64 239Q56 244 56 250T64 261Q115 294 142 323T191 397L206 428H231Q255 428 259 426T264 414Q260 397 235 355T188 288L175 272L331 270Q488 270 491 272Q491 275 542 352T597 432Q602 437 609 437Q617 437 622 432T628 417T582 341L537 272L735 270H931Q942 257 942 250\",8603:\"54 250Q54 258 66 270H277L488 272L542 350Q596 431 602 435Q604 437 609 437Q617 437 622 432T628 417T582 341L537 272L608 270H751L822 272L808 288Q786 313 761 355T733 414Q733 424 737 426T766 428H793L806 397Q829 354 864 314Q896 284 928 263Q942 257 942 250T928 237Q887 208 864 185Q829 147 806 103L793 74L766 72Q742 72 738 73T733 85Q735 102 756 137T797 198L817 225L822 230H511L457 148Q440 124 420 93Q404 68 400 64T389 60Q381 60 375 66T368 81Q368 88 415 159L462 230H264L66 232Q54 239 54 250\",8606:\"56 250Q103 277 142 322T199 417H221Q244 417 244 416Q244 414 237 397T208 344T158 278L151 270H276L285 277Q322 306 349 345T388 417H434Q434 413 424 392T393 338T349 279L340 270H634Q933 270 937 266L938 265Q944 259 944 250T938 235L937 234Q933 230 634 230H340L349 221Q372 196 393 163T424 108T434 83H388Q377 116 350 155T285 223L276 230H151L158 222Q186 191 207 156T236 104T244 84Q244 83 221 83H199Q181 133 142 178T56 250\",8608:\"943 250Q895 221 856 177T801 83H778Q755 83 755 84Q755 86 762 103T791 156T841 222L848 230H723L714 223Q677 194 650 155T611 83H565Q565 87 575 108T606 162T650 221L659 230H365Q66 230 62 234L61 235Q55 241 55 250T61 265L62 266Q66 270 365 270H659L650 279Q627 304 606 337T575 392T565 417H611Q622 384 649 345T714 277L723 270H848L841 278Q813 309 792 344T763 396T755 416Q755 417 778 417H801Q817 367 856 323T943 250\",8610:\"56 250Q103 277 142 322T199 417H221Q244 417 244 416Q244 414 237 397T208 344T158 278L151 270H873L882 277Q919 306 946 345T985 417H1031Q1031 413 1021 392T990 338T946 279L937 270V230L946 221Q969 196 990 163T1021 108T1031 83H985Q974 116 947 155T882 223L873 230H151L158 222Q186 191 207 156T236 104T244 84Q244 83 221 83H199Q181 133 142 178T56 250\",8611:\"1054 250Q1006 221 967 177T912 83H889Q866 83 866 84Q866 86 873 103T902 156T952 222L959 230H237L228 223Q191 194 164 155T125 83H79Q79 87 89 108T120 162T164 221L173 230V270L164 279Q141 304 120 337T89 392T79 417H125Q136 384 163 345T228 277L237 270H959L952 278Q924 309 903 344T874 396T866 416Q866 417 889 417H912Q928 367 967 323T1054 250\",8614:\"95 155V109Q95 83 92 73T75 63Q61 63 58 74T54 130Q54 140 54 180T55 250Q55 421 57 425Q61 437 75 437Q88 437 91 428T95 393V345V270H835Q719 357 692 493Q692 494 692 496T691 499Q691 511 708 511H711Q720 511 723 510T729 506T732 497T735 481T743 456Q765 389 816 336T935 261Q944 258 944 250Q944 244 939 241T915 231T877 212Q836 186 806 152T761 85T740 35T732 4Q730 -6 727 -8T711 -11Q691 -11 691 0Q691 7 696 25Q728 151 835 230H95V155\",8617:\"903 424T903 444T929 464Q976 464 1023 434T1070 347Q1070 316 1055 292T1016 256T971 237T929 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270H926Q929 270 941 271T960 275T978 280T998 290T1015 307Q1030 325 1030 347Q1030 355 1027 364T1014 387T983 411T929 424H928Q903 424 903 444\",8618:\"55 347Q55 380 72 404T113 441T159 458T197 464Q222 464 222 444Q222 429 204 426T157 417T110 387Q95 369 95 347Q95 339 98 330T111 307T142 283T196 270H961Q845 357 818 493Q818 494 818 496T817 499Q817 511 834 511H837Q846 511 849 510T855 506T858 497T861 481T869 456Q891 389 942 336T1061 261Q1070 258 1070 250Q1070 244 1065 241T1041 231T1003 212Q962 186 932 152T887 85T866 35T858 4Q856 -6 853 -8T837 -11Q817 -11 817 0Q817 7 822 25Q854 151 961 230H196Q149 230 102 260T55 347\",8619:\"56 250Q103 277 142 322T199 417H221Q244 417 244 416Q244 414 237 397T208 344T158 278L151 270H622V305Q622 356 624 388T635 460T661 521T709 559T785 575Q813 575 833 573T880 561T923 534T952 483T964 405Q964 374 959 350T942 307T918 276T884 255T847 242T804 235T760 231T713 230H662V-27Q654 -41 644 -41H642H640Q628 -41 622 -27V230H151L158 222Q186 191 207 156T236 104T244 84Q244 83 221 83H199Q181 133 142 178T56 250ZM924 403Q924 474 894 505T794 536Q758 536 734 526T696 500T675 453T665 395T662 319V270H699Q826 270 875 295T924 403\",8620:\"35 405Q35 454 48 489T86 542T137 567T195 575Q229 575 251 571T301 554T345 510T370 429Q377 384 377 305V270H848L841 278Q813 309 792 344T763 396T755 416Q755 417 778 417H801Q817 367 856 323T943 250Q896 221 857 177T801 83H778Q755 83 755 84Q755 86 762 103T791 156T841 222L848 230H377V-27Q369 -41 359 -41H357Q342 -41 337 -25V230H286Q247 231 225 232T169 238T115 255T75 284T45 333T35 405ZM75 406Q75 322 123 296T300 270H337V319Q335 432 317 477T240 534Q232 535 197 535Q140 535 108 507T75 406\",8621:\"57 250Q159 311 200 417H246L242 407Q215 340 159 278L152 270H276L315 310Q354 349 358 351Q366 356 376 351Q378 350 455 273L530 196L606 273Q683 350 686 351Q694 354 703 351Q705 350 782 273L858 196L933 273Q1010 350 1012 351Q1022 356 1030 351Q1034 349 1073 310L1112 270H1236L1229 278Q1173 340 1146 407L1142 417H1188Q1233 306 1331 250Q1231 192 1188 83H1142L1146 93Q1173 160 1229 222L1236 230H1168Q1155 230 1139 230T1119 229Q1112 229 1108 229T1099 231T1092 233T1085 238T1078 245T1068 256T1056 269L1021 304L984 267Q948 230 910 191T867 149Q857 144 848 150Q844 151 770 227T694 304T618 228T540 150Q531 144 521 149Q517 152 479 191T404 267L367 304L332 269Q328 264 320 256T310 246T303 239T296 234T289 231T280 229T269 229Q265 229 249 229T220 230H152L159 222Q215 160 242 93L246 83H223L200 84L195 96Q152 190 57 250\",8622:\"491 272Q491 275 542 352T597 432Q602 437 609 437Q617 437 622 432T628 417T582 341L537 272L608 270H751L822 272L808 288Q786 313 761 355T733 414Q733 424 737 426T766 428H793L806 397Q829 354 864 314Q896 284 928 263Q942 257 942 250T928 237Q887 208 864 185Q829 147 806 103L793 74L766 72Q742 72 738 73T733 85Q735 102 756 137T797 198L817 225L822 230H511L457 148Q440 124 420 93Q404 68 400 64T389 60Q381 60 375 66T368 81Q368 88 415 159L462 230H175L188 214Q210 188 235 145T264 85Q264 75 260 74T231 72L206 74L191 103Q169 142 164 150Q130 195 64 239Q56 244 56 250T64 261Q115 294 142 323T191 397L206 428H231Q255 428 259 426T264 414Q260 397 235 355T188 288L175 272L331 270Q488 270 491 272\",8624:\"56 555Q74 567 79 570T107 592T141 625T170 667T198 722H221Q244 722 244 721Q244 718 236 699T207 647T161 587L151 576L291 575H292H293H294H296H297H298H299H300H301H302H304H305H306H307H308H309H310H311H312H314H315H316H317H318H319H320H321H322H323H324H325H327H328H329H330H331H332H333H334H335H336H337H338H339H340H341H342H343H345Q435 574 438 570L439 569L440 568Q444 564 444 287Q444 15 442 12Q436 0 424 0T406 12Q404 15 404 275V535H151L162 523Q187 495 207 462T236 410T244 389H198L193 402Q171 457 131 497T56 555\",8625:\"301 722Q339 618 443 555L437 551Q431 547 422 541T401 526T377 504T352 477T327 443T306 402L301 389H255Q255 392 263 410T291 461T337 523L348 535H95V275Q95 15 93 12Q87 0 75 0T57 12Q55 15 55 287Q55 564 59 568L60 569Q64 573 76 573T208 575L348 576L338 587Q314 613 294 646T264 698T255 721Q255 722 278 722H301\",8630:\"361 210Q373 210 373 182V177Q373 155 370 151T348 139Q303 118 267 84T216 28T201 1Q197 -1 196 -1Q189 -1 184 8Q166 39 143 64T99 104T61 129T32 144T19 150Q17 152 17 179Q17 203 21 208Q28 210 39 206Q106 178 157 135L175 119V126Q179 130 179 155Q182 173 193 201Q228 305 312 374T510 459Q532 461 551 461H567Q678 461 784 386Q835 344 861 301Q902 245 926 173T950 32Q950 15 944 8Q930 -6 917 8Q910 12 910 43Q901 208 801 314T561 421Q453 421 359 359Q300 319 263 258T217 126L216 125Q216 124 216 123T217 122Q219 122 229 131T260 156T301 181Q314 189 336 199T361 210\",8631:\"972 209Q980 209 981 204T982 179Q982 155 979 151T957 139Q915 121 878 86T815 8Q808 -1 803 -1Q801 -1 797 1Q797 6 783 28T732 84T650 139L628 150Q626 152 626 177Q626 201 630 206Q636 210 637 210Q650 210 697 181Q727 166 764 137L784 119L782 132Q767 239 689 318T499 417Q474 421 442 421Q343 421 261 369T130 219Q86 121 86 28Q86 15 79 8Q73 1 66 1T53 8Q46 15 46 30Q46 102 77 192T186 361Q274 443 386 459Q396 460 426 460Q515 460 588 431T703 361T773 271T812 187T822 132Q822 123 825 123Q936 209 972 209\",8634:\"369 543T369 563T397 583Q408 583 440 579L454 577L464 581Q492 592 516 609T552 638T565 650Q604 638 607 637Q606 636 598 628T585 614T570 601T548 584T523 568L510 560L516 558Q522 555 527 553T541 546T559 536T580 523T603 506T626 485Q722 384 722 250Q722 106 622 12T387 -83Q253 -83 155 12T56 250Q56 357 110 433T235 545Q244 550 252 550Q270 550 270 531Q270 522 261 515T238 501T202 477T159 433Q95 352 95 250Q95 131 178 45T388 -42Q511 -42 596 43T682 250Q682 340 636 408T522 511Q495 526 488 526Q488 525 488 525T487 522T485 515L490 506Q505 481 516 451T531 404T535 384L532 385Q529 386 524 387T513 390L491 397L488 408Q472 483 413 542L399 543Q369 543 369 563\",8635:\"170 637L213 650Q270 597 313 581L323 577L337 579Q369 583 380 583Q408 583 408 563T380 543H378L364 542Q305 483 289 408L286 397L264 390Q259 389 254 388T245 385L242 384Q242 387 246 403T261 450T287 506L292 515Q291 519 291 521T290 524T289 526Q284 526 265 517T216 486T160 434T114 354T95 249Q95 132 178 45T388 -42Q513 -42 597 44T682 250Q682 337 638 404T532 506Q529 508 525 510T519 514T515 516T511 519T509 522T508 526T507 531Q507 550 525 550Q533 550 542 545Q569 532 596 511T653 454T702 366T721 250Q721 151 672 74T547 -43T388 -83Q254 -83 155 12T56 250Q56 385 151 485Q164 498 179 509T205 528T228 542T247 551T260 558L267 560L254 568Q215 590 170 637\",8636:\"62 230Q56 236 55 244Q55 252 57 255T69 265Q114 292 151 326T208 391T243 448T265 491T273 509Q276 511 288 511Q304 511 306 505Q309 501 303 484Q293 456 279 430T251 383T223 344T196 313T173 291T156 276L148 270H929Q944 261 944 250T929 230H62\",8637:\"55 256Q56 264 62 270H929Q944 261 944 250T929 230H148Q149 229 165 215T196 185T231 145T270 87T303 16Q309 -1 306 -5Q304 -11 288 -11Q279 -11 276 -10T269 -4T264 10T253 36T231 75Q172 173 69 235Q59 242 57 245T55 256\",8638:\"188 258V694H208L215 682Q246 628 293 594T375 551V528Q375 505 374 505Q369 505 351 510T299 534T237 578L228 587V205Q228 -178 226 -182Q221 -194 208 -194T190 -182Q188 -178 188 258\",8639:\"41 551Q76 559 123 592T201 682L208 694H228V258Q228 -178 226 -182Q221 -194 208 -194T190 -182Q188 -178 188 205V587L179 578Q151 552 117 534T65 511T42 505Q41 505 41 528V551\",8640:\"691 500Q691 511 711 511Q720 511 723 510T730 504T735 490T746 464T768 425Q796 378 835 339T897 285T933 263Q941 258 942 256T944 245T937 230H70Q56 237 56 250T70 270H852Q802 308 762 364T707 455T691 500\",8641:\"56 237T56 250T70 270H937Q944 263 944 256Q944 251 944 250T943 246T940 242T933 238Q794 153 734 7Q729 -7 726 -9T711 -11Q695 -11 693 -5Q690 -1 696 16Q721 84 763 139T852 230H70Q56 237 56 250\",8642:\"190 682Q195 694 208 694T226 683Q228 679 228 296V-87L237 -78Q265 -52 299 -34T351 -11T374 -5Q375 -5 375 -28V-51Q340 -60 293 -92T215 -182L208 -194H188V242Q188 678 190 682\",8643:\"188 295V573Q188 657 189 672T200 692Q206 694 208 694Q221 694 226 683Q228 679 228 242V-194H208L201 -182Q170 -128 123 -94T41 -51V-28Q41 -5 42 -5Q47 -5 65 -10T117 -34T179 -78L188 -87V295\",8644:\"943 500Q895 471 856 427T801 333H778Q755 333 755 334Q755 336 762 353T791 406T841 472L848 480H459Q70 480 67 482Q55 488 55 500T67 518Q70 520 459 520H848L841 528Q813 559 792 594T763 646T755 666Q755 667 778 667H801Q817 617 856 573T943 500ZM56 167Q102 194 141 238T198 333H221Q244 333 244 332Q221 265 161 198L151 187H539Q928 187 930 186Q944 182 944 167Q944 155 934 149Q930 147 541 147H151L160 137Q185 110 205 77T235 24T244 1Q244 0 221 0H199Q158 106 56 167\",8646:\"56 500Q103 527 142 572T199 667H221Q244 667 244 666Q244 664 237 647T208 594T158 528L151 520H539Q928 520 932 518Q944 513 944 500T932 482Q928 480 539 480H151L158 472Q186 441 207 406T236 354T244 334Q244 333 221 333H199Q181 383 142 428T56 500ZM943 167Q835 101 801 0H778Q755 0 755 1T758 9T765 25T771 39Q800 94 839 137L848 147H458Q68 147 66 149Q55 154 55 167Q55 182 69 186Q71 187 460 187H848L838 198Q811 228 791 261T762 314L755 332Q755 333 778 333H801Q841 227 943 167\",8647:\"930 437Q944 426 944 416T934 399Q930 397 540 397H150L159 387Q185 360 205 328T234 277T243 252Q243 237 217 191T159 113L150 103H540Q930 103 934 101Q944 94 944 84Q944 71 930 64L540 63H151Q180 34 203 -2T236 -61L244 -83H198Q178 -31 142 11T66 77L55 83L65 89Q157 145 197 246Q199 250 190 269Q150 359 65 411L55 417L66 423Q106 447 142 489T198 583H244Q202 488 151 437H930\",8648:\"83 551Q190 590 250 694Q251 689 263 671T307 621T380 567Q409 551 416 551Q422 551 447 563T511 608T577 684L582 694Q642 591 749 551V528Q749 505 748 505Q745 505 724 515T669 546T612 590L602 599V-181Q595 -193 585 -193H582H581Q568 -193 565 -183L563 -179L562 209V598L552 589Q517 556 473 531T414 506H412Q411 506 393 514T361 530T324 553T280 589L270 598V-179Q255 -192 250 -193H247Q237 -193 230 -181V599L220 590Q197 567 164 546T110 515T84 505Q83 505 83 528V551\",8649:\"55 416Q55 427 70 437H848Q819 466 796 502T764 561L755 583H801Q821 531 857 489T933 423L944 417L934 411Q843 355 802 254Q800 250 809 231Q849 141 934 89L944 83L933 77Q893 53 857 11T801 -83H755Q797 12 848 63H459L70 64Q55 70 55 84Q55 94 65 101Q69 103 459 103H849L840 113Q806 148 779 196T756 254Q756 255 760 264T770 286T786 315T809 351T840 387L849 397H459Q69 397 65 399Q55 406 55 416\",8650:\"230 681Q240 694 251 694Q260 693 270 680V-98L280 -89Q297 -73 314 -60T348 -38T374 -24T397 -13T412 -6H414Q428 -6 473 -32T552 -89L562 -98V291L563 680Q570 693 582 693Q593 694 602 681V-99L612 -90Q635 -68 668 -47T723 -15T748 -5Q749 -5 749 -28V-51Q642 -91 582 -194L577 -184Q551 -141 512 -108T447 -63T416 -51T385 -63T321 -108T255 -184L250 -194Q189 -89 83 -51V-28Q83 -5 84 -5Q88 -5 109 -15T164 -46T220 -90L230 -99V681\",8651:\"195 504L198 514H221Q244 514 244 512Q244 508 239 490T215 437T171 376L162 367H545Q928 367 932 365Q944 360 944 347T932 329Q928 327 492 327H55V347L67 354Q113 379 146 420T195 504ZM67 171Q70 173 507 173H944V153L932 146Q839 95 804 -4L801 -14H778Q755 -14 755 -12Q768 59 828 124L837 133H454Q71 133 67 135Q55 140 55 153Q55 165 67 171\",8652:\"691 660Q691 671 711 671Q720 671 723 670T730 664T735 650T746 624T768 585Q797 538 836 499T897 445T933 423Q941 418 942 416T944 405T937 390H70Q56 397 56 410T70 430H852Q802 468 762 524T707 615T691 660ZM55 256Q56 264 62 270H929Q944 261 944 250T929 230H148Q149 229 165 215T196 185T231 145T270 87T303 16Q309 -1 306 -5Q304 -11 288 -11Q279 -11 276 -10T269 -4T264 10T253 36T231 75Q172 173 69 235Q59 242 57 245T55 256\",8653:\"397 525Q410 525 414 524T418 516Q418 506 394 467T331 381L319 367H473L624 369L657 445Q674 487 684 507T699 531T709 534Q717 534 722 528T728 516Q728 510 695 434Q689 418 683 402T672 377T668 367H928Q942 355 942 347Q942 341 928 327H791Q651 327 651 325Q649 324 620 251T586 174Q586 172 757 172H928Q942 158 942 152Q942 143 928 132H568L537 54Q510 -9 503 -22T486 -35Q479 -35 473 -29T466 -17T495 61L526 132H319L331 118Q364 81 391 37T418 -17Q418 -23 415 -24T401 -26Q398 -26 397 -26L384 -24L377 -13Q344 49 301 97T218 170T143 210T84 233T55 245Q54 253 59 256T86 267Q281 327 377 512L384 525H397ZM606 325Q606 327 439 327H275Q258 312 179 265L148 249Q228 206 262 181L275 172H544L575 247L606 325\",8654:\"395 -24T395 -19T417 57T440 132H255L266 116Q308 64 340 -6Q342 -17 337 -21Q335 -26 320 -26T302 -19Q302 -15 294 4T265 54T217 117T145 182T49 236Q30 243 33 254Q40 261 49 263Q98 283 142 315T214 379T263 442T293 493T302 519Q305 525 320 525T337 521Q342 516 340 505Q308 435 266 383L255 370L384 367H515Q561 522 569 530Q574 534 580 534Q587 534 594 528T602 516Q602 512 580 441T557 367H651L742 370L731 383Q689 435 657 505Q655 516 660 521Q662 525 677 525T695 519Q695 515 703 496T732 446T780 383T853 317T949 263Q967 258 964 245Q959 240 949 236Q897 215 852 182T779 116T731 52T703 3T695 -19Q692 -26 677 -26T660 -21Q655 -17 657 -6Q670 21 682 42T702 77T717 99T728 114T735 122T739 126T740 130T613 132H482L460 54Q440 -9 433 -23T415 -37Q408 -37 402 -31ZM502 325Q502 327 360 327H217L195 310Q173 291 120 256L111 250Q114 248 143 229T195 190L217 172H335L453 174L502 325ZM886 250Q885 251 865 263T831 286T802 310L780 327H544L535 299Q531 283 511 223L495 174L637 172H780L802 190Q843 225 877 243L886 250\",8655:\"346 174Q348 176 378 249T411 325Q411 327 239 327H68Q55 342 55 347Q55 354 68 367H428L459 445Q487 509 494 521T510 534Q517 534 524 527T531 516Q531 515 502 438L471 367H677L666 381Q631 421 605 463T578 516Q578 522 582 523T599 525H615L619 512Q659 437 714 383T812 309T896 272T942 254Q943 246 938 243T911 232Q718 172 619 -13L615 -24L599 -26Q578 -26 578 -17Q578 -11 587 6T617 53T666 118L677 132H373L339 54Q323 12 313 -8T298 -32T288 -35Q280 -35 275 -29T269 -17Q269 -14 298 57T328 132H68Q55 145 55 152Q55 156 56 158T62 165T68 172H206Q346 172 346 174ZM848 249Q763 297 735 318L722 327H455L422 252L391 174Q391 172 557 172H722L735 181Q773 210 819 234L848 249\",8656:\"944 153Q944 140 929 133H318L328 123Q379 69 414 0Q419 -13 419 -17Q419 -24 399 -24Q388 -24 385 -23T377 -12Q332 77 253 144T72 237Q62 240 59 242T56 250T59 257T70 262T89 268T119 278T160 296Q303 366 377 512Q382 522 385 523T401 525Q419 524 419 515Q419 510 414 500Q379 431 328 377L318 367H929Q944 359 944 347Q944 336 930 328L602 327H274L264 319Q225 289 147 250Q148 249 165 241T210 217T264 181L274 173H930Q931 172 933 171T936 169T938 167T941 164T942 162T943 158T944 153\",8657:\"228 -179Q227 -180 226 -182T223 -186T221 -189T218 -192T214 -193T208 -194Q196 -194 189 -181L188 125V430L176 419Q122 369 59 338Q46 330 40 330Q38 330 31 337V350Q31 362 33 365T46 374Q60 381 77 390T128 426T190 484T247 567T292 677Q295 688 298 692Q302 694 305 694Q313 694 318 677Q334 619 363 568T420 485T481 427T532 391T564 374Q575 368 577 365T579 350V337Q572 330 570 330Q564 330 551 338Q487 370 435 419L423 430L422 125V-181Q409 -194 401 -194Q397 -194 394 -193T388 -189T385 -184T382 -180V-177V475L373 487Q331 541 305 602Q304 601 300 591T290 571T278 548T260 519T238 488L229 476L228 148V-179\",8658:\"580 514Q580 525 596 525Q601 525 604 525T609 525T613 524T615 523T617 520T619 517T622 512Q659 438 720 381T831 300T927 263Q944 258 944 250T935 239T898 228T840 204Q696 134 622 -12Q618 -21 615 -22T600 -24Q580 -24 580 -17Q580 -13 585 0Q620 69 671 123L681 133H70Q56 140 56 153Q56 168 72 173H725L735 181Q774 211 852 250Q851 251 834 259T789 283T735 319L725 327H72Q56 332 56 347Q56 360 70 367H681L671 377Q638 412 609 458T580 514\",8659:\"401 694Q412 694 422 681V375L423 70L435 81Q487 130 551 162Q564 170 570 170Q572 170 579 163V150Q579 138 577 135T564 126Q541 114 518 99T453 48T374 -46T318 -177Q313 -194 305 -194T293 -178T272 -119T225 -31Q158 70 46 126Q35 132 33 135T31 150V163Q38 170 40 170Q46 170 59 162Q122 131 176 81L188 70V375L189 681Q199 694 208 694Q219 694 228 680V352L229 25L238 12Q279 -42 305 -102Q344 -23 373 13L382 25V678Q387 692 401 694\",8660:\"308 524Q318 526 323 526Q340 526 340 514Q340 507 336 499Q326 476 314 454T292 417T274 391T260 374L255 368Q255 367 500 367Q744 367 744 368L739 374Q734 379 726 390T707 416T685 453T663 499Q658 511 658 515Q658 525 680 525Q687 524 690 523T695 519T701 507Q766 359 902 287Q921 276 939 269T961 259T966 250Q966 246 965 244T960 240T949 236T930 228T902 213Q763 137 701 -7Q697 -16 695 -19T690 -23T680 -25Q658 -25 658 -15Q658 -11 663 1Q673 24 685 46T707 83T725 109T739 126L744 132Q744 133 500 133Q255 133 255 132L260 126Q265 121 273 110T292 84T314 47T336 1Q341 -11 341 -15Q341 -25 319 -25Q312 -24 309 -23T304 -19T298 -7Q233 141 97 213Q83 221 70 227T51 235T41 239T35 243T34 250T35 256T40 261T51 265T70 273T97 287Q235 363 299 509Q305 522 308 524ZM792 319L783 327H216Q183 294 120 256L110 250L120 244Q173 212 207 181L216 173H783L792 181Q826 212 879 244L889 250L879 256Q826 288 792 319\",8661:\"290 755Q298 772 305 772T318 757T343 706T393 633Q431 588 473 558T545 515T579 497V484Q579 464 570 464Q564 464 550 470Q485 497 423 550L422 400V100L423 -50Q485 3 550 30Q565 36 570 36Q579 36 579 16V3Q575 -1 549 -12T480 -53T393 -132Q361 -172 342 -208T318 -258T305 -272T293 -258T268 -208T217 -132Q170 -80 128 -51T61 -12T31 3V16Q31 36 40 36Q46 36 61 30Q86 19 109 6T146 -18T173 -38T188 -50V550Q186 549 173 539T147 519T110 495T61 470Q46 464 40 464Q31 464 31 484V497Q34 500 63 513T135 557T217 633Q267 692 290 755ZM374 598Q363 610 351 625T332 651T316 676T305 695L294 676Q282 657 267 636T236 598L228 589V-89L236 -98Q247 -110 259 -125T278 -151T294 -176T305 -195L316 -176Q328 -157 343 -136T374 -98L382 -89V589L374 598\",8666:\"944 54Q942 44 929 36H372Q372 34 377 26T395 -4T422 -58Q442 -109 442 -110T408 -111H374L370 -100Q282 124 87 243L76 250L87 257Q284 377 370 600L374 611H408Q442 611 442 610Q423 550 381 480Q380 478 379 475T376 471T374 468T372 465V464H929Q942 456 944 446Q944 442 943 439T941 434T938 430T935 428T931 426T928 424H344L336 414Q277 336 200 277L191 270H560Q929 270 933 268Q944 262 944 250Q944 237 933 232Q929 230 560 230H191L200 223Q279 162 336 86L344 76H928Q929 76 931 75T934 73T938 70T941 66T943 61T944 54\",8667:\"56 250Q56 260 68 270H808L799 277Q720 338 663 414L655 424H363Q71 424 68 426Q55 432 55 444T68 462Q71 464 349 464H627Q627 466 622 474T604 504T577 558Q557 609 557 610T591 611H626L629 600Q717 376 912 257L923 250L912 243Q715 123 629 -100L626 -111H591Q557 -111 557 -110Q576 -50 618 20Q619 22 620 25T623 29T625 32T626 35L627 36H349Q71 36 68 38Q55 44 55 56T68 74Q71 76 363 76H655L663 86Q722 164 799 223L808 230H438L68 231Q56 236 56 250\",8669:\"76 230Q68 230 62 237T56 250Q56 257 63 264T91 291Q102 300 108 306L159 351Q168 356 177 351L218 316L303 239L353 195Q376 214 403 239L488 316L529 351Q538 356 546 351Q548 350 594 310L638 270H848L841 278Q813 309 792 344T763 396T755 416Q755 417 778 417H801Q817 367 856 323T943 250Q895 221 856 177T801 83H778Q755 83 755 84Q755 86 762 103T791 156T841 222L848 230H737Q625 230 622 232Q620 233 599 251T558 288L537 306Q537 305 451 228T362 149Q353 146 345 149Q341 150 255 227T169 306Q167 306 129 270Q123 265 115 257T102 245T93 237T84 232T76 230\",8672:\"292 419Q292 400 261 347T211 275H306H364Q400 275 411 271T422 250T411 230T366 225H306H211Q214 222 232 197T271 136T292 82Q292 71 285 68T262 64H250H241Q221 64 216 67T205 83Q186 127 153 167T78 230Q64 238 64 250Q64 258 69 263T82 272T106 288T139 318Q162 342 177 365T198 402T209 425T223 436Q224 437 252 437H258Q292 437 292 419ZM501 237T501 250T515 270H819Q834 262 834 250T819 230H515Q501 237 501 250ZM918 237T918 250T932 270H1236Q1251 262 1251 250T1236 230H932Q918 237 918 250\",8674:\"84 237T84 250T98 270H402Q417 262 417 250T402 230H98Q84 237 84 250ZM501 237T501 250T515 270H819Q834 262 834 250T819 230H515Q501 237 501 250ZM1022 417Q1022 437 1055 437H1067Q1090 437 1097 434T1109 417Q1128 373 1161 333T1236 270Q1251 261 1251 250Q1251 241 1244 236T1216 217T1175 182Q1149 155 1133 128T1109 85T1097 66Q1093 64 1065 64H1053Q1031 64 1025 72T1027 100Q1036 124 1049 147T1073 185T1091 210T1101 223L1103 225H1008H950Q914 225 903 229T892 250T903 270T948 275H1008H1103L1101 277Q1100 280 1091 291T1067 325T1039 374Q1022 408 1022 417\",8704:\"0 673Q0 684 7 689T20 694Q32 694 38 680T82 567L126 451H430L473 566Q483 593 494 622T512 668T519 685Q524 694 538 694Q556 692 556 674Q556 670 426 329T293 -15Q288 -22 278 -22T263 -15Q260 -11 131 328T0 673ZM414 410Q414 411 278 411T142 410L278 55L414 410\",8705:\"404 269Q412 269 418 267T428 261T435 253T441 245L444 240V172Q444 103 443 96Q440 81 431 65T403 27T344 -7T250 -21T156 -8T97 27T69 65T58 96Q56 103 56 413Q56 722 58 729Q74 822 215 845Q221 846 229 846H243Q282 846 290 845Q422 826 443 729Q444 722 444 653V586L442 583Q441 580 440 578T436 573T430 567T423 562T415 558T404 556Q377 556 367 583Q364 590 364 654V719Q363 721 360 726T355 733Q326 766 250 766H249Q235 766 219 765T174 752T137 719V107Q145 83 178 71T251 58H254Q340 58 364 107V172Q364 176 364 187T363 204Q363 269 404 269\",8706:\"202 508Q179 508 169 520T158 547Q158 557 164 577T185 624T230 675T301 710L333 715H345Q378 715 384 714Q447 703 489 661T549 568T566 457Q566 362 519 240T402 53Q321 -22 223 -22Q123 -22 73 56Q42 102 42 148V159Q42 276 129 370T322 465Q383 465 414 434T455 367L458 378Q478 461 478 515Q478 603 437 639T344 676Q266 676 223 612Q264 606 264 572Q264 547 246 528T202 508ZM430 306Q430 372 401 400T333 428Q270 428 222 382Q197 354 183 323T150 221Q132 149 132 116Q132 21 232 21Q244 21 250 22Q327 35 374 112Q389 137 409 196T430 306\",8707:\"56 661T56 674T70 694H487Q497 686 500 679V15Q497 10 487 1L279 0H70Q56 7 56 20T70 40H460V327H84Q70 334 70 347T84 367H460V654H70Q56 661 56 674\",8709:\"331 696Q335 708 339 722T345 744T350 759T357 769T367 772Q374 772 381 767T388 754Q388 746 377 712L366 673L378 661Q460 575 460 344Q460 281 456 234T432 126T373 27Q319 -22 250 -22Q214 -22 180 -7Q168 -3 168 -4L159 -33Q148 -71 142 -75Q138 -78 132 -78Q124 -78 118 -72T111 -60Q111 -52 122 -18L133 21L125 29Q39 111 39 344Q39 596 137 675Q187 716 251 716Q265 716 278 714T296 710T315 703T331 696ZM276 676Q264 679 246 679Q196 679 159 631Q134 597 128 536T121 356Q121 234 127 174T151 80L234 366Q253 430 275 506T308 618L318 654Q318 656 294 669L276 676ZM181 42Q207 16 250 16Q291 16 324 47Q354 78 366 136T378 356Q378 470 372 528T349 616L348 613Q348 611 264 326L181 42\",8710:\"51 0Q46 4 46 7Q46 9 215 357T388 709Q391 716 416 716Q439 716 444 709Q447 705 616 357T786 7Q786 4 781 0H51ZM507 344L384 596L137 92L383 91H630Q630 93 507 344\",8711:\"46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596\",8712:\"84 250Q84 372 166 450T360 539Q361 539 377 539T419 540T469 540H568Q583 532 583 520Q583 511 570 501L466 500Q355 499 329 494Q280 482 242 458T183 409T147 354T129 306T124 272V270H568Q583 262 583 250T568 230H124V228Q124 207 134 177T167 112T231 48T328 7Q355 1 466 0H570Q583 -10 583 -20Q583 -32 568 -40H471Q464 -40 446 -40T417 -41Q262 -41 172 45Q84 127 84 250\",8713:\"196 25Q84 109 84 250Q84 372 166 450T360 539Q361 539 375 539T413 540T460 540L547 707Q550 716 563 716Q570 716 575 712T581 703T583 696T505 540H568Q583 532 583 520Q583 511 570 501L484 500L366 270H568Q583 262 583 250T568 230H346L247 38Q284 16 328 7Q355 1 466 0H570Q583 -10 583 -20Q583 -32 568 -40H471Q464 -40 447 -40T419 -41Q304 -41 228 3Q117 -211 115 -212Q111 -215 104 -215T92 -212T86 -204T84 -197Q84 -190 89 -183L196 25ZM214 61L301 230H124V228Q124 196 147 147T214 61ZM321 270L440 500Q353 499 329 494Q280 482 242 458T183 409T147 354T129 306T124 272V270H321\",8715:\"83 520Q83 532 98 540H195Q202 540 220 540T249 541Q404 541 494 455Q582 374 582 250Q582 165 539 99T434 0T304 -39Q297 -40 195 -40H98Q83 -32 83 -20Q83 -10 96 0H200Q311 1 337 6Q369 14 401 28Q422 39 445 55Q484 85 508 127T537 191T542 228V230H98Q84 237 84 250T98 270H542V272Q542 280 539 295T527 336T497 391T445 445Q422 461 401 472Q386 479 374 483T347 491T325 495T298 498T273 499T239 500T200 500L96 501Q83 511 83 520\",8717:\"154 -1Q122 -1 112 3T102 26Q102 63 158 63H178Q192 64 206 65T228 66T240 68Q301 85 324 146L329 157H244Q158 157 153 161Q149 162 145 169T140 183Q140 201 158 215L167 221H256L344 223L349 237Q352 262 352 287Q352 308 351 315Q341 352 315 368T256 385Q231 385 206 376T166 356T149 346Q143 346 138 364T132 388Q132 396 147 406Q198 440 252 440Q291 440 318 435Q421 404 451 301Q456 288 456 248V234Q456 151 391 86Q330 25 240 3Q212 -1 154 -1\",8719:\"158 656Q147 684 131 694Q110 707 69 710H55V750H888V710H874Q840 708 820 698T795 678T786 656V-155Q798 -206 874 -210H888V-250H570V-210H584Q618 -208 638 -197T663 -178T673 -155V710H270V277L271 -155Q283 -206 359 -210H373V-250H55V-210H69Q103 -208 123 -197T148 -178T158 -155V656\",8720:\"158 656Q147 684 131 694Q110 707 69 710H55V750H373V710H359Q325 708 305 698T280 678T271 656L270 223V-210H673V656Q666 672 663 679T639 697T584 710H570V750H888V710H874Q840 708 820 698T795 678T786 656V-155Q798 -206 874 -210H888V-250H55V-210H69Q103 -208 123 -197T148 -178T158 -155V656\",8721:\"61 748Q64 750 489 750H913L954 640Q965 609 976 579T993 533T999 516H979L959 517Q936 579 886 621T777 682Q724 700 655 705T436 710H319Q183 710 183 709Q186 706 348 484T511 259Q517 250 513 244L490 216Q466 188 420 134T330 27L149 -187Q149 -188 362 -188Q388 -188 436 -188T506 -189Q679 -189 778 -162T936 -43Q946 -27 959 6H999L913 -249L489 -250Q65 -250 62 -248Q56 -246 56 -239Q56 -234 118 -161Q186 -81 245 -11L428 206Q428 207 242 462L57 717L56 728Q56 744 61 748\",8722:\"84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250\",8723:\"56 467T56 480T70 500H707Q722 492 722 480T707 460H409V187H707Q722 179 722 167Q722 154 707 147H409V0V-93Q409 -144 406 -155T389 -166Q376 -166 372 -155T368 -105Q368 -96 368 -62T369 -2V147H70Q56 154 56 167T70 187H369V460H70Q56 467 56 480\",8724:\"339 717Q339 739 354 752T388 766Q410 766 424 751T439 716T424 681T390 666Q369 666 354 681T339 717ZM57 237T57 250T71 270H369V425L370 581Q380 594 389 594Q402 594 409 579V270H707Q722 262 722 250T707 230H409V-79Q401 -93 391 -93H389H387Q375 -93 369 -79V230H71Q57 237 57 250\",8725:\"423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750\",8726:\"56 731Q56 740 62 745T75 750Q85 750 92 740Q96 733 270 255T444 -231Q444 -239 438 -244T424 -250Q414 -250 407 -240Q404 -236 230 242T56 731\",8727:\"229 286Q216 420 216 436Q216 454 240 464Q241 464 245 464T251 465Q263 464 273 456T283 436Q283 419 277 356T270 286L328 328Q384 369 389 372T399 375Q412 375 423 365T435 338Q435 325 425 315Q420 312 357 282T289 250L355 219L425 184Q434 175 434 161Q434 146 425 136T401 125Q393 125 383 131T328 171L270 213Q283 79 283 63Q283 53 276 44T250 35Q231 35 224 44T216 63Q216 80 222 143T229 213L171 171Q115 130 110 127Q106 124 100 124Q87 124 76 134T64 161Q64 166 64 169T67 175T72 181T81 188T94 195T113 204T138 215T170 230T210 250L74 315Q65 324 65 338Q65 353 74 363T98 374Q106 374 116 368T171 328L229 286\",8728:\"55 251Q55 328 112 386T249 444T386 388T444 249Q444 171 388 113T250 55Q170 55 113 112T55 251ZM245 403Q188 403 142 361T96 250Q96 183 141 140T250 96Q284 96 313 109T354 135T375 160Q403 197 403 250Q403 313 360 358T245 403\",8729:\"55 251Q55 328 112 386T249 444T386 388T444 249Q444 171 388 113T250 55Q170 55 113 112T55 251\",8730:\"95 178Q89 178 81 186T72 200T103 230T169 280T207 309Q209 311 212 311H213Q219 311 227 294T281 177Q300 134 312 108L397 -77Q398 -77 501 136T707 565T814 786Q820 800 834 800Q841 800 846 794T853 782V776L620 293L385 -193Q381 -200 366 -200Q357 -200 354 -197Q352 -195 256 15L160 225L144 214Q129 202 113 190T95 178\",8733:\"56 124T56 216T107 375T238 442Q260 442 280 438T319 425T352 407T382 385T406 361T427 336T442 315T455 297T462 285L469 297Q555 442 679 442Q687 442 722 437V398H718Q710 400 694 400Q657 400 623 383T567 343T527 294T503 253T495 235Q495 231 520 192T554 143Q625 44 696 44Q717 44 719 46H722V-5Q695 -11 678 -11Q552 -11 457 141Q455 145 454 146L447 134Q362 -11 235 -11Q157 -11 107 56ZM93 213Q93 143 126 87T220 31Q258 31 292 48T349 88T389 137T413 178T421 196Q421 200 396 239T362 288Q322 345 288 366T213 387Q163 387 128 337T93 213\",8734:\"55 217Q55 305 111 373T254 442Q342 442 419 381Q457 350 493 303L507 284L514 294Q618 442 747 442Q833 442 888 374T944 214Q944 128 889 59T743 -11Q657 -11 580 50Q542 81 506 128L492 147L485 137Q381 -11 252 -11Q166 -11 111 57T55 217ZM907 217Q907 285 869 341T761 397Q740 397 720 392T682 378T648 359T619 335T594 310T574 285T559 263T548 246L543 238L574 198Q605 158 622 138T664 94T714 61T765 51Q827 51 867 100T907 217ZM92 214Q92 145 131 89T239 33Q357 33 456 193L425 233Q364 312 334 337Q285 380 233 380Q171 380 132 331T92 214\",8736:\"71 0L68 2Q65 3 63 5T58 11T55 20Q55 22 57 28Q67 43 346 361Q397 420 474 508Q595 648 616 671T647 694T661 688T666 674Q666 668 663 663Q662 662 627 622T524 503T390 350L120 41L386 40H653Q666 30 666 20Q666 8 651 0H71\",8737:\"71 0L68 2Q65 3 63 5T58 11T55 20Q55 22 57 28Q64 38 348 373T638 712Q644 714 646 714Q653 714 659 709T666 694V693Q666 687 633 647Q619 631 576 580Q528 524 495 485Q336 296 329 289Q328 288 348 264T395 182T433 54L434 40H651Q666 32 666 20T651 0H436Q431 -20 416 -20Q400 -20 396 -4V0H71ZM394 40Q394 51 389 76T366 149T319 234L302 256L119 41L256 40H394\",8738:\"666 -32Q666 -51 646 -51Q639 -51 365 85L75 228Q55 238 55 250Q55 257 59 262T68 268L72 270L611 536Q642 551 647 551T659 547T666 532Q666 521 657 515L525 449Q525 448 535 424T556 352T566 250T556 148T536 77T525 51L657 -15Q666 -21 666 -32ZM526 250Q526 297 517 342T499 409T488 431Q487 431 304 341T121 250T304 159T488 69Q526 143 526 250\",8739:\"139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139\",8740:\"118 737Q131 750 138 750L151 746L158 739V579L160 421L213 470Q269 519 276 519Q284 519 290 513T296 499V498Q296 493 291 488T244 445Q225 428 213 417L158 368V-239Q143 -252 136 -252L124 -248L120 -241L118 44V328L62 279Q4 231 0 230Q-8 230 -14 236T-20 250Q-20 257 -11 265T62 332L118 384V737\",8741:\"133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739\",8742:\"131 737Q134 739 138 743T144 748T151 750T171 737V199L327 357V737Q340 750 347 750Q351 750 353 749T360 743T367 737V397L429 457Q493 518 498 519Q506 519 512 512T518 500Q518 489 442 417L367 339V-237Q352 -250 346 -250L333 -243L327 -237V301L171 143V-237Q156 -250 151 -250T131 -237V101L69 41Q24 -3 15 -12T0 -21Q-8 -21 -14 -14T-20 -2Q-20 5 -7 19T56 81L131 159V737\",8743:\"318 591Q325 598 333 598Q344 598 348 591Q349 590 414 445T545 151T611 -4Q609 -22 591 -22Q588 -22 586 -21T581 -20T577 -17T575 -13T572 -9T570 -4L333 528L96 -4Q87 -20 80 -21Q78 -22 75 -22Q57 -22 55 -4Q55 2 120 150T251 444T318 591\",8744:\"55 580Q56 587 61 592T75 598Q86 598 96 580L333 48L570 580Q579 596 586 597Q588 598 591 598Q609 598 611 580Q611 574 546 426T415 132T348 -15Q343 -22 333 -22T318 -15Q317 -14 252 131T121 425T55 580\",8745:\"88 -21T75 -21T55 -7V200Q55 231 55 280Q56 414 60 428Q61 430 61 431Q77 500 152 549T332 598Q443 598 522 544T610 405Q611 399 611 194V-7Q604 -22 591 -22Q582 -22 572 -9L570 405Q563 433 556 449T529 485Q498 519 445 538T334 558Q251 558 179 518T96 401Q95 396 95 193V-7Q88 -21 75 -21\",8746:\"591 598H592Q604 598 611 583V376Q611 345 611 296Q610 162 606 148Q605 146 605 145Q586 68 507 23T333 -22Q268 -22 209 -1T106 66T56 173Q55 180 55 384L56 585Q66 598 75 598Q85 598 95 585V378L96 172L98 162Q112 95 181 57T332 18Q415 18 487 58T570 175Q571 180 571 383V583Q579 598 591 598\",8747:\"151 -112Q151 -150 106 -161Q106 -165 114 -172T134 -179Q155 -179 170 -146Q181 -120 188 -64T206 101T232 310Q256 472 277 567Q308 716 392 716Q434 716 453 681T472 613Q472 590 458 577T424 564Q404 564 390 578T376 612Q376 650 421 661Q421 663 418 667T407 675T393 679Q387 679 380 675Q360 665 350 619T326 438Q302 190 253 -57Q235 -147 201 -186Q174 -213 138 -216Q93 -216 74 -181T55 -113Q55 -91 69 -78T103 -64Q123 -64 137 -78T151 -112\",8748:\"113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q220 -247 232 -218T251 -133T262 -15T276 155T297 367Q300 390 305 438T314 512T325 580T340 647T361 703T390 751T428 784T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q475 768 460 756T434 716T418 652T407 559T398 444T387 300T369 133Q349 -38 337 -102T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244ZM460 -244Q460 -246 466 -251T486 -263T514 -269Q532 -269 546 -260Q567 -247 579 -218T598 -133T609 -15T623 155T644 367Q647 390 652 438T661 512T672 580T687 647T708 703T737 751T775 784T826 804Q828 804 835 804T848 805Q899 802 928 769T957 695Q957 669 941 657T908 645Q889 645 874 658T859 694Q859 705 863 714T873 729T885 737T895 742L899 743Q899 745 892 751T872 762T845 768Q822 768 807 756T781 716T765 652T754 559T745 444T734 300T716 133Q696 -38 684 -102T650 -207Q603 -306 516 -306Q466 -306 434 -272T402 -196Q402 -170 418 -158T451 -146Q470 -146 485 -159T500 -195Q500 -206 496 -215T486 -230T474 -238T464 -242L460 -244\",8749:\"113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q220 -247 232 -218T251 -133T262 -15T276 155T297 367Q300 390 305 438T314 512T325 580T340 647T361 703T390 751T428 784T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q475 768 460 756T434 716T418 652T407 559T398 444T387 300T369 133Q349 -38 337 -102T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244ZM460 -244Q460 -246 466 -251T486 -263T514 -269Q532 -269 546 -260Q567 -247 579 -218T598 -133T609 -15T623 155T644 367Q647 390 652 438T661 512T672 580T687 647T708 703T737 751T775 784T826 804Q828 804 835 804T848 805Q899 802 928 769T957 695Q957 669 941 657T908 645Q889 645 874 658T859 694Q859 705 863 714T873 729T885 737T895 742L899 743Q899 745 892 751T872 762T845 768Q822 768 807 756T781 716T765 652T754 559T745 444T734 300T716 133Q696 -38 684 -102T650 -207Q603 -306 516 -306Q466 -306 434 -272T402 -196Q402 -170 418 -158T451 -146Q470 -146 485 -159T500 -195Q500 -206 496 -215T486 -230T474 -238T464 -242L460 -244ZM807 -244Q807 -246 813 -251T833 -263T861 -269Q880 -269 893 -260Q914 -247 926 -218T945 -133T956 -15T970 155T991 367Q994 390 999 438T1008 512T1019 580T1034 647T1055 703T1084 751T1122 784T1173 804Q1175 804 1182 804T1195 805Q1246 802 1275 769T1304 695Q1304 669 1288 657T1255 645Q1236 645 1221 658T1206 694Q1206 705 1210 714T1220 729T1232 737T1242 742L1246 743Q1246 745 1239 751T1219 762T1192 768Q1169 768 1154 756T1128 716T1112 652T1101 559T1092 444T1081 300T1063 133Q1043 -38 1031 -102T997 -207Q950 -306 863 -306Q813 -306 781 -272T749 -196Q749 -170 765 -158T798 -146Q817 -146 832 -159T847 -195Q847 -206 843 -215T833 -230T821 -238T811 -242L807 -244\",8750:\"269 74L256 80Q244 85 227 97T191 128T161 179T148 250Q148 332 199 379T302 433L306 434L307 444Q309 456 313 495T321 553T331 607T345 664T365 712T393 756T431 785T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q471 768 454 752T427 693T414 626T406 536Q405 530 405 527L397 425L404 422Q410 419 421 413T445 399T470 376T494 345T511 303T518 250Q518 205 502 169T460 112T410 80T364 66L360 65L359 55Q357 38 353 4T346 -43T340 -81T333 -118T326 -148T316 -179T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q231 -241 242 -183T266 33L269 74ZM272 122Q272 156 300 391Q300 392 299 392Q287 392 263 379T213 331T187 249Q187 211 205 180T239 137T272 116V122ZM366 107Q378 107 402 119T453 167T479 249Q479 340 394 383V377Q394 375 394 374T393 371T393 366T392 357T391 342T389 321T386 291T382 251T377 199T369 133Q366 112 366 107\",8756:\"273 411Q273 437 291 454T334 471Q358 471 375 454T393 411T376 368T333 351Q307 351 290 368T273 411ZM84 38Q110 38 126 21T143 -22Q143 -46 127 -64T83 -82Q57 -82 41 -65T24 -22Q24 4 41 21T84 38ZM524 -22Q524 4 541 21T584 38Q608 38 625 21T643 -22Q643 -45 627 -63T583 -82Q557 -82 541 -65T524 -22\",8757:\"23 411Q23 437 41 454T84 471Q108 471 125 454T143 411T126 368T83 351Q57 351 40 368T23 411ZM523 411Q523 437 541 454T584 471Q608 471 625 454T643 411T626 368T583 351Q557 351 540 368T523 411ZM274 -22Q274 4 291 21T334 38Q356 38 374 22T392 -22T375 -65T333 -82Q307 -82 291 -65T274 -22\",8764:\"55 166Q55 241 101 304T222 367Q260 367 296 349T362 304T421 252T484 208T554 189Q616 189 655 236T694 338Q694 350 698 358T708 367Q722 367 722 334Q722 260 677 197T562 134H554Q517 134 481 152T414 196T355 248T292 293T223 311Q179 311 145 286Q109 257 96 218T80 156T69 133Q55 133 55 166\",8765:\"222 133Q147 133 102 197T56 335Q56 362 66 365Q71 369 77 364Q83 356 84 335T90 298Q102 254 137 222T223 189Q258 189 292 206T355 250T413 301T477 346T550 367Q628 367 673 309T722 171Q722 133 708 133Q703 133 699 141T694 162Q694 220 655 265T555 311Q519 311 485 293T421 248T363 196T298 152T222 133\",8768:\"55 569Q55 583 83 583Q122 583 151 565T194 519T215 464T222 411Q222 360 194 304T139 193T111 89Q111 38 134 -7T195 -55Q222 -57 222 -69Q222 -83 189 -83Q130 -83 93 -33T55 90Q55 130 72 174T110 252T148 328T166 411Q166 462 144 507T83 555Q55 556 55 569\",8769:\"220 366Q258 366 297 347T361 308T391 288Q394 288 464 370Q494 407 510 425T535 454T546 465T552 467H553Q560 467 566 461T573 448Q573 439 499 350Q424 266 424 261Q424 259 442 247T492 222T554 209Q607 209 646 243Q671 268 680 295T690 341T702 366Q719 366 719 314Q716 265 695 226Q682 199 664 179Q614 132 555 132Q517 132 477 151T412 190T383 210T347 172T278 89T233 37Q228 32 220 32Q210 32 206 38T201 48Q201 57 266 137Q272 144 275 148Q351 231 351 237Q351 239 333 251T283 276T221 289Q159 289 123 248T86 166Q86 156 82 145T73 132Q55 132 55 172Q55 220 79 272Q95 301 111 319Q161 366 220 366\",8770:\"55 439T55 443T56 449T62 456T68 463H706Q720 449 720 443T706 423H68Q55 439 55 443ZM56 72Q56 112 73 152T130 225T224 257Q259 257 294 240T360 199T419 149T484 107T553 90Q603 90 643 125T691 223Q693 257 704 257Q717 257 717 221Q717 147 671 91T554 34Q517 34 481 51T414 93T355 142T291 184T222 201Q172 201 131 167T84 67Q81 34 71 34Q56 37 56 72\",8771:\"55 283Q55 356 103 409T217 463Q262 463 297 447T395 382Q431 355 446 344T493 320T554 307H558Q613 307 652 344T694 433Q694 464 708 464T722 432Q722 356 673 304T564 251H554Q510 251 465 275T387 329T310 382T223 407H219Q164 407 122 367Q91 333 85 295T76 253T69 250Q55 250 55 283ZM56 56Q56 71 72 76H706Q722 70 722 56Q722 44 707 36H70Q56 43 56 56\",8773:\"55 388Q55 463 101 526T222 589Q260 589 296 571T362 526T421 474T484 430T554 411Q616 411 655 458T694 560Q694 572 698 580T708 589Q722 589 722 556Q722 482 677 419T562 356H554Q517 356 481 374T414 418T355 471T292 515T223 533Q179 533 145 508Q109 479 96 440T80 378T69 355Q55 355 55 388ZM56 236Q56 249 70 256H707Q722 248 722 236Q722 225 708 217L390 216H72Q56 221 56 236ZM56 42Q56 57 72 62H708Q722 52 722 42Q722 30 707 22H70Q56 29 56 42\",8775:\"55 417Q55 479 101 528T222 578Q259 578 294 564T393 507Q413 493 434 480T469 460T484 454L537 549Q587 639 595 647Q600 652 607 652Q615 652 621 647T628 634Q628 625 575 536Q524 446 524 443Q527 440 555 440Q603 440 644 469T691 547Q694 578 706 578T718 556Q718 555 718 551T717 545Q717 488 684 445T595 387Q582 384 558 384Q530 384 508 389L493 394L404 238L557 236H708Q720 224 720 217T706 196H379L291 43L499 41H708Q720 29 720 21T706 1H268L226 -71Q186 -143 179 -148Q173 -155 165 -155T152 -150T146 -137Q146 -133 184 -64L222 1H144L66 3L59 7Q54 14 54 20Q54 29 66 41H246L333 194Q333 196 202 196H68Q55 211 55 218T66 236H213L357 238L457 409L437 421Q432 423 393 450T307 500T222 523Q171 523 129 491T84 414Q82 383 70 383Q55 383 55 417\",8776:\"55 319Q55 360 72 393T114 444T163 472T205 482Q207 482 213 482T223 483Q262 483 296 468T393 413L443 381Q502 346 553 346Q609 346 649 375T694 454Q694 465 698 474T708 483Q722 483 722 452Q722 386 675 338T555 289Q514 289 468 310T388 357T308 404T224 426Q164 426 125 393T83 318Q81 289 69 289Q55 289 55 319ZM55 85Q55 126 72 159T114 210T163 238T205 248Q207 248 213 248T223 249Q262 249 296 234T393 179L443 147Q502 112 553 112Q609 112 649 141T694 220Q694 249 708 249T722 217Q722 153 675 104T555 55Q514 55 468 76T388 123T308 170T224 192Q164 192 125 159T83 84Q80 55 69 55Q55 55 55 85\",8778:\"220 523Q163 523 124 486T84 412Q81 383 69 383Q56 383 56 413Q56 441 67 470Q78 508 111 537T187 575Q203 579 219 579Q248 579 271 572Q304 565 393 508Q498 439 551 439Q620 439 662 486Q688 512 693 557Q693 565 697 572T707 579Q719 579 719 548Q719 483 673 434T550 384Q512 384 467 405T386 453T305 501T220 523ZM222 288Q164 288 124 251T84 177Q81 148 69 148Q56 148 56 178Q56 206 67 235Q78 274 111 302T187 339Q198 343 220 343Q244 343 259 341T308 322T393 272Q496 203 553 203Q612 203 651 241T691 312Q693 343 705 343Q719 343 719 313Q719 245 673 199Q626 148 552 148Q513 148 467 170T385 218T304 266T222 288ZM51 -19Q51 -6 62 -1H387Q713 -1 715 -3Q725 -10 725 -20Q725 -27 718 -34Q714 -38 672 -38T387 -39H62Q51 -25 51 -19\",8781:\"55 464Q55 471 60 477T74 484Q80 484 108 464T172 420T268 376T389 356Q436 356 483 368T566 399T630 436T675 467T695 482Q701 484 703 484Q711 484 716 478T722 464Q722 454 707 442Q550 316 389 316Q338 316 286 329T195 362T124 402T76 437T57 456Q55 462 55 464ZM57 45Q66 58 109 88T230 151T381 183Q438 183 494 168T587 135T658 94T703 61T720 45Q722 39 722 36Q722 28 717 22T703 16Q697 16 669 36T606 80T510 124T389 144Q341 144 294 132T211 101T147 64T102 33T82 18Q76 16 74 16Q66 16 61 22T55 36Q55 39 57 45\",8782:\"245 367Q251 415 288 453T392 492Q445 492 485 456T532 367H707Q722 359 722 347Q722 334 711 331T665 327H608H509Q500 332 498 336Q496 338 493 363T472 411Q443 451 389 451H387Q335 451 305 411Q290 392 287 374T282 344T268 327H72Q56 332 56 347Q56 360 70 367H245ZM56 153Q56 168 72 173H268Q277 168 279 164Q281 162 284 137T305 89Q334 49 389 49H391Q442 49 472 89Q487 108 490 126T495 156T509 173H608H666Q701 173 711 170T722 153T707 133H532Q526 81 486 45T389 8Q331 8 291 45T245 133H70Q56 140 56 153\",8783:\"245 367Q251 415 288 453T392 492Q445 492 485 456T532 367H707Q722 359 722 347Q722 334 711 331T665 327H608H509Q500 332 498 336Q496 338 493 363T472 411Q443 451 389 451H387Q335 451 305 411Q290 392 287 374T282 344T268 327H72Q56 332 56 347Q56 360 70 367H245ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153\",8784:\"56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153ZM329 610Q329 634 346 652T389 670Q413 670 431 654T450 611Q450 586 433 568T390 550T347 567T329 610\",8785:\"421 474T389 474T339 493T321 541Q321 566 337 587T391 609Q456 602 456 541Q456 512 439 493ZM56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153ZM421 -108T389 -108T339 -89T321 -41Q321 -16 337 5T391 27Q456 20 456 -41Q456 -70 439 -89\",8786:\"15 541Q15 569 33 585T75 601T117 585T135 541Q135 514 118 498T75 481T32 498T15 541ZM56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153ZM642 -41Q642 -17 658 0T702 18Q726 18 744 3T762 -41Q762 -67 745 -84T702 -101Q676 -101 659 -85T642 -41\",8787:\"642 541Q642 569 660 585T702 601T744 585T762 541Q762 515 745 498T702 481Q676 481 659 497T642 541ZM56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153ZM14 -41Q14 -15 31 1T74 18Q101 18 118 0T135 -41Q135 -64 118 -83T75 -102Q51 -102 33 -85T14 -41\",8790:\"56 347Q56 360 70 367H707Q722 359 722 347Q722 334 711 331T658 327H586H465L472 318Q496 288 496 250T472 182L465 173H586H663Q700 173 711 170T722 153T707 133H70Q56 140 56 153Q56 168 72 173H312L305 182Q281 212 281 250T305 318L312 327H72Q56 332 56 347ZM473 250Q473 265 472 273T460 297T428 327H349Q328 313 318 298T306 273T304 250Q304 235 305 227T317 203T349 173H428Q449 187 459 202T471 227T473 250\",8791:\"279 612Q279 656 310 688T388 721Q433 721 465 689T498 612Q498 573 470 538T389 503Q336 503 308 538T279 612ZM458 614Q458 637 452 651T433 672T411 679T383 680T352 675T333 664T324 647T321 629T320 611Q320 593 321 584T332 562T359 545Q366 543 389 543H391Q406 543 414 544T435 552T452 573T458 614ZM56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153\",8796:\"192 482H190Q187 483 185 484T181 488T177 493T175 501Q175 506 178 512Q184 523 278 687T375 853Q379 857 383 857Q385 857 387 858T390 859Q397 859 403 853Q405 851 499 687T600 512Q603 506 603 501Q603 488 587 482H192ZM548 523L389 798Q388 798 309 661T230 523T389 522T548 523ZM56 347Q56 360 70 367H708Q723 359 723 347Q723 336 709 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H709Q723 163 723 153Q723 140 708 133H70Q56 140 56 153\",8800:\"166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183L306 133H70Q56 140 56 153Q56 168 72 173H327L406 327H72Q56 332 56 347Q56 360 70 367H426Q597 702 602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 692 471 367H707Q722 359 722 347Q722 336 708 328L451 327L371 173H708Q722 163 722 153Q722 140 707 133H351Q175 -210 170 -212Q166 -215 159 -215\",8801:\"56 444Q56 457 70 464H707Q722 456 722 444Q722 430 706 424H72Q56 429 56 444ZM56 237T56 250T70 270H707Q722 262 722 250T707 230H70Q56 237 56 250ZM56 56Q56 71 72 76H706Q722 70 722 56Q722 44 707 36H70Q56 43 56 56\",8804:\"674 636Q682 636 688 630T694 615T687 601Q686 600 417 472L151 346L399 228Q687 92 691 87Q694 81 694 76Q694 58 676 56H670L382 192Q92 329 90 331Q83 336 83 348Q84 359 96 365Q104 369 382 500T665 634Q669 636 674 636ZM84 -118Q84 -108 99 -98H678Q694 -104 694 -118Q694 -130 679 -138H98Q84 -131 84 -118\",8805:\"83 616Q83 624 89 630T99 636Q107 636 253 568T543 431T687 361Q694 356 694 346T687 331Q685 329 395 192L107 56H101Q83 58 83 76Q83 77 83 79Q82 86 98 95Q117 105 248 167Q326 204 378 228L626 346L360 472Q291 505 200 548Q112 589 98 597T83 616ZM84 -118Q84 -108 99 -98H678Q694 -104 694 -118Q694 -130 679 -138H98Q84 -131 84 -118\",8806:\"674 753Q682 753 688 747T694 732T687 718Q686 717 417 589L151 463L399 345Q687 209 691 204Q694 198 694 193Q694 175 676 173H670L382 309Q92 446 90 448Q83 453 83 465Q84 476 96 482Q104 486 382 617T665 751Q669 753 674 753ZM84 39Q84 49 99 59H678Q694 53 694 39Q694 26 679 19H98Q84 26 84 39ZM83 -157Q83 -153 84 -150T86 -145T89 -141T92 -139T96 -137T99 -135H678Q694 -146 694 -155Q694 -168 679 -175H98Q84 -168 83 -157\",8807:\"83 733Q83 741 89 747T99 753Q107 753 253 685T543 548T687 478Q694 473 694 463T687 448Q685 446 395 309L107 173H101Q83 175 83 193Q83 194 83 196Q82 203 98 212Q117 222 248 284Q326 321 378 345L626 463L360 589Q291 622 200 665Q112 706 98 714T83 733ZM84 39Q84 49 99 59H678Q694 53 694 39Q694 26 679 19H98Q84 26 84 39ZM83 -157Q83 -153 84 -150T86 -145T89 -141T92 -139T96 -137T99 -135H678Q694 -146 694 -155Q694 -168 679 -175H98Q84 -168 83 -157\",8808:\"86 472Q93 477 381 614T673 752Q680 752 686 746T693 732T689 721Q686 715 418 590L151 461L418 332Q684 207 689 201Q693 195 693 190Q693 183 687 177T675 170Q668 170 380 307T86 450Q82 454 82 461Q82 467 86 472ZM82 33Q82 37 83 40T89 47T95 54H473L520 105Q569 156 571 156Q573 157 578 157Q586 157 592 151T598 136Q598 130 562 92L526 56L604 54H682Q693 43 693 35Q693 31 692 28T686 21T680 14H489L342 -139L513 -142H682Q693 -148 693 -160Q693 -167 680 -182H304L258 -230Q248 -240 237 -251T221 -268T211 -278T203 -284T197 -286Q189 -286 184 -280T178 -264Q178 -257 213 -219L249 -182H171L93 -179L86 -175Q82 -170 82 -163Q82 -155 95 -142H289L360 -64L433 14H262L93 16Q82 23 82 33\",8809:\"89 745Q95 752 100 752Q106 752 394 615T689 472Q693 468 693 461T689 450Q684 445 396 308T100 170Q95 170 89 176T82 190Q82 195 86 201Q91 208 358 332L624 461L358 590Q90 715 86 721Q82 725 82 731Q82 739 89 745ZM82 33Q82 37 83 40T89 47T95 54H473L520 105Q569 156 571 156Q573 157 578 157Q586 157 592 151T598 136Q598 130 562 92L526 56L604 54H682Q693 43 693 35Q693 31 692 28T686 21T680 14H489L342 -139L513 -142H682Q693 -148 693 -160Q693 -167 680 -182H304L258 -230Q248 -240 237 -251T221 -268T211 -278T203 -284T197 -286Q189 -286 184 -280T178 -264Q178 -257 213 -219L249 -182H171L93 -179L86 -175Q82 -170 82 -163Q82 -155 95 -142H289L360 -64L433 14H262L93 16Q82 23 82 33\",8810:\"639 -48Q639 -54 634 -60T619 -67H618Q612 -67 536 -26Q430 33 329 88Q61 235 59 239Q56 243 56 250T59 261Q62 266 336 415T615 567L619 568Q622 567 625 567Q639 562 639 548Q639 540 633 534Q632 532 374 391L117 250L374 109Q632 -32 633 -34Q639 -40 639 -48ZM944 -48Q944 -54 939 -60T924 -67H923Q917 -67 841 -26Q735 33 634 88Q366 235 364 239Q361 243 361 250T364 261Q367 266 641 415T920 567L924 568Q927 567 930 567Q944 562 944 548Q944 540 938 534Q937 532 679 391L422 250L679 109Q937 -32 938 -34Q944 -40 944 -48\",8811:\"55 539T55 547T60 561T74 567Q81 567 207 498Q297 449 365 412Q633 265 636 261Q639 255 639 250Q639 241 626 232Q614 224 365 88Q83 -65 79 -66Q76 -67 73 -67Q65 -67 60 -61T55 -47Q55 -39 61 -33Q62 -33 95 -15T193 39T320 109L321 110H322L323 111H324L325 112L326 113H327L329 114H330L331 115H332L333 116L334 117H335L336 118H337L338 119H339L340 120L341 121H342L343 122H344L345 123H346L347 124L348 125H349L351 126H352L353 127H354L355 128L356 129H357L358 130H359L360 131H361L362 132L363 133H364L365 134H366L367 135H368L369 136H370L371 137L372 138H373L374 139H375L376 140L378 141L576 251Q63 530 62 533Q55 539 55 547ZM360 539T360 547T365 561T379 567Q386 567 512 498Q602 449 670 412Q938 265 941 261Q944 255 944 250Q944 241 931 232Q919 224 670 88Q388 -65 384 -66Q381 -67 378 -67Q370 -67 365 -61T360 -47Q360 -39 366 -33Q367 -33 400 -15T498 39T625 109L626 110H627L628 111H629L630 112L631 113H632L634 114H635L636 115H637L638 116L639 117H640L641 118H642L643 119H644L645 120L646 121H647L648 122H649L650 123H651L652 124L653 125H654L656 126H657L658 127H659L660 128L661 129H662L663 130H664L665 131H666L667 132L668 133H669L670 134H671L672 135H673L674 136H675L676 137L677 138H678L679 139H680L681 140L683 141L881 251Q368 530 367 533Q360 539 360 547\",8812:\"104 730Q104 749 123 749Q130 749 138 745Q186 717 237 671L250 659L261 670Q297 703 332 726T375 750T389 744T395 730Q395 721 390 717T364 699T322 668Q290 641 283 632Q280 628 281 627T293 612Q425 454 425 250Q425 144 388 51T293 -112Q282 -125 281 -126T283 -132Q306 -162 379 -209Q395 -219 395 -230Q395 -238 389 -244T375 -250T335 -228T262 -171L250 -159L238 -170Q202 -203 167 -226T124 -250T110 -244T104 -230Q104 -219 121 -209Q199 -156 216 -132Q219 -128 218 -127T206 -112Q74 46 74 250T206 612Q217 625 218 626T216 632Q199 656 121 709Q104 719 104 730ZM249 -94Q364 61 364 250Q364 430 265 574Q253 590 249 594L242 583Q134 439 134 250Q134 114 192 -1Q212 -44 242 -83L249 -94\",8814:\"693 -14T693 -20T687 -33T675 -41Q667 -41 506 37L344 112Q342 112 262 -46Q184 -196 176 -205Q172 -209 168 -209T162 -208Q155 -208 151 -203T146 -190Q146 -178 171 -137Q193 -91 251 21L306 132L198 183Q142 208 118 220T88 238T82 249Q82 253 86 261Q92 267 278 357L464 443L529 572Q561 637 577 667T597 703T607 708Q615 708 622 702T629 688Q629 680 575 579L524 474Q524 473 545 482T598 508Q666 541 673 541T686 535T693 521Q693 512 679 504T589 459L493 414L360 150Q366 148 378 142T431 116T529 70Q686 -8 689 -10Q693 -14 693 -20ZM380 277L433 383Q432 385 292 319T151 250T237 209T324 170L380 277\",8815:\"82 514T82 520T89 533T100 541Q106 541 271 463Q434 386 435 386L515 543Q593 699 600 706Q604 708 607 708Q615 708 622 702T629 688T549 526Q509 445 491 407T473 368Q522 343 580 317Q636 291 660 278T688 261T693 250V249Q693 241 681 234T580 184Q533 161 502 146Q317 59 315 59Q312 56 246 -74Q197 -170 186 -189T168 -209Q164 -209 162 -208Q155 -208 151 -203T146 -190Q146 -187 200 -79L253 28L218 11Q182 -6 144 -23T100 -41Q95 -41 89 -35T82 -21Q82 -12 96 -4T186 41L284 88L349 217Q377 273 395 311T413 350Q413 351 253 428Q101 498 86 510Q82 514 82 520ZM624 250Q461 330 455 330Q454 331 453 329T448 321T441 308T430 287T416 259T398 223L342 114L624 250\",8816:\"82 -124Q82 -120 83 -117T89 -110T95 -103H220L284 50Q346 204 344 206L218 268Q153 297 123 313T87 333T82 344T86 355Q104 369 291 455Q491 552 491 553L542 673Q581 767 590 784T609 801Q616 801 622 795T629 781Q629 773 586 677Q546 581 546 577L609 606Q669 635 673 635Q680 635 686 629T693 615Q693 610 692 608T670 593T604 561L524 521L400 226L542 157Q617 123 649 107T687 85T694 72Q694 66 690 60T679 54Q664 54 526 121Q513 127 495 136T464 150T438 162T416 173T399 180T388 185L384 186Q383 186 322 41L262 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L464 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 174 -213T202 -143H146L93 -141Q82 -134 82 -124ZM418 370L466 495Q464 495 308 420T151 344T204 317T311 267T364 244Q364 247 418 370\",8817:\"97 54Q82 54 82 72Q82 79 86 84Q95 91 222 153L351 215L398 324L442 433L258 519Q95 597 87 604Q82 608 82 615T88 628T102 635Q107 635 424 484L458 468L524 630Q593 789 597 795Q601 801 609 801Q616 801 622 795T629 781L562 615L493 450L589 406Q665 371 679 362T694 344Q694 339 693 337T677 326T631 302T538 257Q504 241 465 223T406 195T386 186Q384 185 322 39L262 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L464 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 174 -213T202 -143H146L93 -141Q82 -134 82 -124Q82 -120 83 -117T89 -110T95 -103H220L273 26Q326 156 326 157L218 106Q109 54 97 54ZM553 379Q480 412 480 415Q479 415 460 372T423 285T406 241Q408 240 516 291T624 344L553 379\",8818:\"674 732Q682 732 688 726T694 711T687 697Q686 696 417 568L151 442L399 324Q687 188 691 183Q694 177 694 172Q694 154 676 152H670L382 288Q92 425 90 427Q83 432 83 444Q84 455 96 461Q104 465 382 596T665 730Q669 732 674 732ZM56 -194Q56 -107 106 -51T222 6Q260 6 296 -12T362 -56T420 -108T483 -153T554 -171Q616 -171 654 -128T694 -29Q696 6 708 6Q722 6 722 -26Q722 -102 676 -164T557 -227Q518 -227 481 -209T415 -165T358 -113T294 -69T223 -51Q163 -51 125 -93T83 -196Q81 -228 69 -228Q56 -228 56 -202V-194\",8819:\"90 697Q83 704 83 712T88 726T99 732Q107 732 253 664T543 527T687 457Q694 452 694 442T687 427Q685 425 395 288L107 152H101Q83 154 83 172Q83 173 83 175Q82 182 98 191Q117 201 248 263Q326 300 378 324L626 442L360 568Q91 696 90 697ZM56 -194Q56 -107 106 -51T222 6Q260 6 296 -12T362 -56T420 -108T483 -153T554 -171Q616 -171 654 -128T694 -29Q696 6 708 6Q722 6 722 -26Q722 -102 676 -164T557 -227Q518 -227 481 -209T415 -165T358 -113T294 -69T223 -51Q163 -51 125 -93T83 -196Q81 -228 69 -228Q56 -228 56 -202V-194\",8822:\"734 181Q734 173 728 167T714 161Q711 161 386 280T54 404Q44 408 44 421Q44 432 52 437Q66 443 388 562T714 681Q721 681 727 675T734 661Q734 651 722 645Q711 639 462 546Q441 539 420 531L122 421L420 311L723 198Q734 192 734 181ZM44 247Q44 255 50 261T63 267Q66 267 391 148T723 24Q734 18 734 7T723 -10Q716 -14 391 -133T63 -253Q56 -253 50 -247T44 -233Q44 -223 55 -217Q67 -210 317 -118Q337 -110 357 -103L655 7L357 117L54 230Q44 236 44 247\",8823:\"83 661Q83 668 88 674T104 681Q111 679 396 560Q686 437 687 436Q694 431 694 421T687 406Q686 405 543 344T253 222T101 161Q83 163 83 180Q83 194 95 199Q96 199 130 213T232 257T361 311L621 421L357 532Q307 553 233 584Q121 631 102 640T83 661ZM673 267Q694 267 694 248Q694 237 687 232Q684 229 420 118L156 7L416 -103L683 -215Q694 -222 694 -233Q694 -251 676 -253Q670 -253 524 -192T235 -70T90 -8Q83 -1 83 7Q83 19 94 24Q97 25 378 144T667 266Q669 267 673 267\",8826:\"84 249Q84 262 91 266T117 270Q120 270 126 270T137 269Q388 273 512 333T653 512Q657 539 676 539Q685 538 689 532T694 520V515Q689 469 672 431T626 366T569 320T500 286T435 265T373 249Q379 248 404 242T440 233T477 221T533 199Q681 124 694 -17Q694 -41 674 -41Q658 -41 653 -17Q646 41 613 84T533 154T418 197T284 220T137 229H114Q104 229 98 230T88 235T84 249\",8827:\"84 517Q84 539 102 539Q115 539 119 529T125 503T137 459T171 404Q277 275 640 269H661Q694 269 694 249T661 229H640Q526 227 439 214T283 173T173 98T124 -17Q118 -41 103 -41Q83 -41 83 -17Q88 29 105 67T151 132T208 178T277 212T342 233T404 249Q401 250 380 254T345 263T302 276T245 299Q125 358 92 468Q84 502 84 517\",8828:\"112 270Q83 270 83 290Q83 301 94 307Q98 310 118 310Q516 310 620 464Q635 486 642 510T651 548T657 571T675 580Q693 577 693 559V552Q684 472 628 410T465 314Q436 303 372 290Q373 290 388 287T425 278T465 266Q674 199 693 28L694 17Q688 5 683 3Q677 0 673 0Q656 0 653 24Q623 270 118 270H112ZM110 116Q83 116 83 136T110 156H113Q134 156 160 155T231 146T318 128T407 95T489 44T550 -30T583 -131Q583 -153 563 -153Q556 -153 553 -152T547 -145T542 -127Q531 -54 478 0Q425 53 333 83T123 116H110\",8829:\"668 310Q694 310 694 290Q694 285 691 279Q684 271 664 270Q550 268 464 257T301 220T179 146T124 27Q119 0 103 0T83 16Q83 21 83 31T92 68T113 121T157 177T229 231Q295 268 405 290Q404 290 389 293T352 302T312 314Q138 371 96 500Q83 541 83 562Q83 568 89 574T103 580Q115 580 120 570T126 542T138 497T173 442Q289 310 659 310H668ZM194 -131Q201 -60 241 -6T343 82T477 133T628 155Q632 155 644 155T661 156Q685 155 690 147Q694 143 694 136Q694 132 693 129T689 124T685 120T681 117L656 116Q596 114 543 106T436 79T342 35T272 -33T235 -127Q231 -154 212 -154Q203 -153 199 -147T194 -136V-131\",8830:\"84 442Q84 455 91 459T117 463Q120 463 126 463T137 462Q388 466 512 526T653 705Q657 732 676 732Q685 731 689 725T694 714V708Q689 662 672 624T626 559T569 513T500 479T435 458T373 442Q379 441 404 435T440 426T477 414T533 392Q592 362 630 319T681 241T694 174Q694 153 674 153Q662 153 657 163T652 188T640 231T606 287Q500 416 137 422H114Q104 422 98 423T88 428T84 442ZM56 -194Q56 -107 106 -51T222 6Q260 6 296 -12T362 -56T420 -108T483 -153T554 -171Q616 -171 654 -128T694 -29Q696 6 708 6Q722 6 722 -26Q722 -102 676 -164T557 -227Q518 -227 481 -209T415 -165T358 -113T294 -69T223 -51Q163 -51 125 -93T83 -196Q81 -228 69 -228Q56 -228 56 -202V-194\",8831:\"84 710Q84 732 102 732Q115 732 119 722T125 696T137 652T171 597Q277 468 640 462H661Q694 462 694 442T661 422H640Q578 421 526 417T415 403T309 376T222 333T156 268T124 179Q122 162 118 158T103 153Q100 153 98 153T95 154T93 155T90 158T85 163Q83 167 83 176Q88 222 105 260T151 325T208 371T277 405T342 426T404 442Q401 443 380 447T345 456T302 469T245 492Q125 551 92 661Q84 695 84 710ZM56 -194Q56 -107 106 -51T222 6Q260 6 296 -12T362 -56T420 -108T483 -153T554 -171Q616 -171 654 -128T694 -29Q696 6 708 6Q722 6 722 -26Q722 -102 676 -164T557 -227Q518 -227 481 -209T415 -165T358 -113T294 -69T223 -51Q163 -51 125 -93T83 -196Q81 -228 69 -228Q56 -228 56 -202V-194\",8832:\"386 292Q388 292 439 393T543 598T598 703Q599 703 603 704T609 705Q616 705 622 699T629 685T533 494Q440 308 440 305Q451 310 462 312Q547 342 592 388T651 505Q654 525 658 532T673 539Q680 539 686 533T693 519Q693 495 678 450Q638 341 500 283Q433 259 418 259Q416 259 411 251T406 241T415 239Q482 224 544 190Q674 121 691 -10Q693 -28 691 -32Q684 -43 672 -43Q664 -43 658 -37Q656 -33 650 -6T634 47T589 109T500 168Q473 179 436 190T388 201H386L284 -1Q261 -45 232 -101T191 -181T178 -206Q176 -206 172 -207T166 -208Q160 -208 153 -202T146 -188Q146 -185 246 12Q344 206 344 210Q344 213 305 217T213 225T124 228H95Q82 241 82 248Q82 253 95 268H124Q172 268 236 273T343 283T386 292\",8833:\"103 -43Q96 -43 89 -39T82 -26L84 -10Q105 141 275 212Q342 236 355 236Q360 236 364 245L369 256H360Q284 280 275 283Q115 351 86 490Q82 507 82 517Q82 526 88 532T103 538Q110 538 115 534Q119 531 122 517T128 486T143 444T174 397T231 351T320 310Q371 292 389 292L491 496Q595 701 598 703Q599 703 603 704T609 705Q616 705 622 699T629 685Q629 684 531 485Q431 296 431 288Q431 278 520 273T651 268H680Q693 253 693 248Q693 241 680 228H651Q591 228 491 218T386 201L284 -1Q261 -45 232 -101T191 -181T178 -206Q176 -206 172 -207T166 -208Q160 -208 153 -202T146 -188Q146 -182 302 125L335 190L324 185Q313 185 289 172Q241 153 208 128T159 78T135 31T124 -11T118 -37Q112 -43 103 -43\",8834:\"84 250Q84 372 166 450T360 539Q361 539 370 539T395 539T430 540T475 540T524 540H679Q694 532 694 520Q694 511 681 501L522 500H470H441Q366 500 338 496T266 472Q244 461 224 446T179 404T139 337T124 250V245Q124 157 185 89Q244 25 328 7Q348 2 366 2T522 0H681Q694 -10 694 -20Q694 -32 679 -40H526Q510 -40 480 -40T434 -41Q350 -41 289 -25T172 45Q84 127 84 250\",8835:\"83 520Q83 532 98 540H251Q267 540 297 540T343 541Q427 541 488 525T605 455Q693 374 693 250Q693 165 650 99T545 0T415 -39Q407 -40 251 -40H98Q83 -32 83 -20Q83 -10 96 0H255H308H337Q412 0 439 4T512 28Q533 39 553 54T599 96T639 163T654 250Q654 341 592 411Q557 449 512 472Q468 491 439 495T335 500H306H255L96 501Q83 511 83 520\",8838:\"84 346Q84 468 166 546T360 635Q361 635 370 635T395 635T430 636T475 636T524 636H679Q694 628 694 616Q694 607 681 597L522 596H470H441Q366 596 338 592T266 568Q244 557 224 542T179 500T139 433T124 346V341Q124 253 185 185Q244 121 328 103Q348 98 366 98T522 96H681Q694 86 694 76Q694 64 679 56H526Q510 56 480 56T434 55Q350 55 289 71T172 141Q84 223 84 346ZM104 -131T104 -118T118 -98H679Q694 -106 694 -118T679 -138H118Q104 -131 104 -118\",8839:\"83 616Q83 628 98 636H251Q267 636 297 636T343 637Q427 637 488 621T605 551Q693 470 693 346Q693 261 650 195T545 96T415 57Q407 56 251 56H98Q83 64 83 76Q83 86 96 96H255H308H337Q412 96 439 100T512 124Q533 135 553 150T599 192T639 259T654 346Q654 437 592 507Q557 545 512 568Q468 587 439 591T335 596H306H255L96 597Q83 607 83 616ZM84 -131T84 -118T98 -98H659Q674 -106 674 -118T659 -138H98Q84 -131 84 -118\",8840:\"146 -283Q146 -282 174 -213T202 -143H115Q102 -127 102 -123T115 -103H220L291 68L278 73Q203 101 153 157T86 288Q83 309 83 344Q83 380 86 399Q107 480 160 539Q222 601 298 621Q328 630 345 631T435 635L526 637L560 715Q587 778 593 789T609 801Q616 801 622 795T629 781Q629 780 625 771T614 742T600 706L571 637Q571 635 626 635H680Q693 620 693 613T689 601L682 597L618 595H553L449 346Q425 288 399 223T359 127T346 95H356Q365 95 381 95T417 94T463 93T515 93H682Q693 82 693 74T680 53H511Q420 55 335 55L329 57L262 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L464 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283ZM509 590Q509 595 438 595Q354 595 318 586Q246 567 195 516T126 395Q123 378 123 344T126 293Q141 229 184 181T291 110L306 104L406 346L509 590\",8841:\"82 606T82 613T95 635H251H348Q408 635 435 632T502 615L515 608L520 617Q520 619 558 708Q584 774 591 787T609 801Q616 801 622 795T629 781Q629 775 562 615L551 590L569 577Q646 527 678 437Q691 398 691 344T678 250Q653 182 597 132T469 64Q427 53 366 53H326L295 -25L262 -103H660Q673 -118 673 -124Q673 -129 669 -136L662 -141L453 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 174 -213T202 -143H95Q82 -128 82 -123T95 -103H220L251 -25L284 53H189L93 55L86 59Q82 64 82 71T95 93H302L400 333Q498 569 498 573L444 590Q431 593 260 595L93 597L86 601Q82 606 82 613ZM652 344V354Q652 451 575 521Q571 526 557 538T537 551Q534 551 533 548Q533 543 438 319L344 95L371 93H386Q487 93 557 150T649 293Q652 309 652 344\",8842:\"693 72Q693 68 692 66T686 59T680 52H524Q398 52 367 53T309 63Q236 82 180 132T98 250Q84 288 84 343Q84 397 98 437Q126 515 193 568T346 632Q347 632 373 633T440 634T520 635H680Q693 620 693 615Q693 608 680 595H526Q364 595 353 592Q279 582 221 539T138 430Q124 392 124 343Q124 296 138 257Q163 192 221 149T353 95Q364 92 526 92H680Q693 79 693 72ZM102 -132T102 -125T115 -103H382L420 -68Q429 -60 438 -52T452 -39T463 -28T472 -20T478 -14T483 -10T487 -7T490 -6T493 -5T496 -5Q502 -5 508 -12T515 -28Q515 -34 513 -37Q512 -38 507 -42T492 -55T475 -70L440 -101L562 -103H682Q693 -114 693 -122T680 -143H395L355 -179Q289 -241 280 -241Q273 -241 267 -235T260 -221T265 -208T300 -174L335 -143H224L113 -141L106 -137Q102 -132 102 -125\",8843:\"82 615Q82 620 95 635H251Q378 635 409 634T469 623Q540 605 596 555T678 437Q691 397 691 343T678 250Q649 172 581 119T426 55Q415 52 251 52H95Q93 55 89 59T84 65T82 72Q82 79 95 92H249Q411 92 422 95Q496 105 554 148T638 257Q651 296 651 343Q651 391 638 430Q613 495 555 538T422 592Q411 595 249 595H95Q82 608 82 615ZM82 -132T82 -125T95 -103H380L420 -57Q452 -21 460 -14T474 -6Q482 -6 488 -12T495 -25T451 -81L433 -101L549 -103H662Q673 -114 673 -122T660 -143H395L355 -190Q311 -239 309 -239Q305 -241 302 -241Q294 -241 287 -235T280 -221T324 -163L342 -143H218L93 -141L86 -137Q82 -132 82 -125\",8846:\"591 598H592Q604 598 611 583V376Q611 345 611 296Q610 162 606 148Q605 146 605 145Q586 68 507 23T333 -22Q268 -22 209 -1T106 66T56 173Q55 180 55 384L56 585Q66 598 75 598Q85 598 95 585V378L96 172L98 162Q112 95 181 57T332 18Q415 18 487 58T570 175Q571 180 571 383V583Q579 598 591 598ZM313 406Q313 417 313 435T312 459Q312 483 316 493T333 503T349 494T353 461V406V325H515Q516 325 519 323T527 316T531 305T527 294T520 287T515 285H353V204V152Q353 127 350 117T333 107T316 117T312 152Q312 158 312 175T313 204V285H151Q150 285 147 287T139 294T135 305T139 316T146 323T151 325H313V406\",8847:\"83 523Q87 535 99 539H679Q694 531 694 519Q694 506 679 499H123V-1H678Q694 -7 694 -21Q694 -34 679 -41H98Q93 -38 84 -28L83 247V523\",8848:\"64 506T64 519T78 539H699Q706 536 714 526V-28Q706 -38 699 -41H78Q64 -34 64 -21Q64 -6 80 -1H674V499H78Q64 506 64 519\",8849:\"94 620Q98 632 110 636H699Q714 628 714 616T699 596H134V96H698Q714 90 714 76Q714 64 699 56H109Q104 59 95 69L94 344V620ZM84 -118Q84 -103 100 -98H698Q714 -104 714 -118Q714 -130 699 -138H98Q84 -131 84 -118\",8850:\"64 603T64 616T78 636H668Q675 633 683 623V69Q675 59 668 56H78Q64 63 64 76Q64 91 80 96H643V596H78Q64 603 64 616ZM64 -118Q64 -108 79 -98H678Q694 -104 694 -118Q694 -130 679 -138H78Q64 -131 64 -118\",8851:\"83 0Q79 0 76 1T71 3T67 6T65 9T63 13T61 16V301L62 585Q70 595 76 598H592Q602 590 605 583V15Q598 2 587 0Q583 0 580 1T575 3T571 6T569 9T567 13T565 16V558H101V15Q94 2 83 0\",8852:\"77 0Q65 4 61 16V301L62 585Q72 598 81 598Q94 598 101 583V40H565V583Q573 598 585 598Q598 598 605 583V15Q602 10 592 1L335 0H77\",8853:\"56 250Q56 394 156 488T384 583Q530 583 626 485T722 250Q722 110 625 14T390 -83Q249 -83 153 14T56 250ZM364 542Q308 539 251 509T148 418T96 278V270H369V542H364ZM681 278Q675 338 650 386T592 462T522 509T458 535T412 542H409V270H681V278ZM96 222Q104 150 139 95T219 12T302 -29T366 -42H369V230H96V222ZM681 222V230H409V-42H412Q429 -42 456 -36T521 -10T590 37T649 113T681 222\",8854:\"56 250Q56 394 156 488T384 583Q530 583 626 485T722 250Q722 110 625 14T390 -83Q249 -83 153 14T56 250ZM681 278Q669 385 591 463T381 542Q283 542 196 471T96 278V270H681V278ZM275 -42T388 -42T585 32T681 222V230H96V222Q108 107 191 33\",8855:\"56 250Q56 394 156 488T384 583Q530 583 626 485T722 250Q722 110 625 14T390 -83Q249 -83 153 14T56 250ZM582 471Q531 510 496 523Q446 542 381 542Q324 542 272 519T196 471L389 278L485 375L582 471ZM167 442Q95 362 95 250Q95 137 167 58L359 250L167 442ZM610 58Q682 138 682 250Q682 363 610 442L418 250L610 58ZM196 29Q209 16 230 2T295 -27T388 -42Q409 -42 429 -40T465 -33T496 -23T522 -11T544 1T561 13T574 22T582 29L388 222L196 29\",8856:\"56 250Q56 394 156 488T384 583Q530 583 626 485T722 250Q722 110 625 14T390 -83Q249 -83 153 14T56 250ZM582 471Q581 472 571 480T556 491T539 502T517 514T491 525T460 534T424 539T381 542Q272 542 184 460T95 251Q95 198 113 150T149 80L167 58L582 471ZM388 -42Q513 -42 597 44T682 250Q682 363 610 442L196 29Q209 16 229 2T295 -27T388 -42\",8857:\"56 250Q56 394 156 488T384 583Q530 583 626 485T722 250Q722 110 625 14T390 -83Q249 -83 153 14T56 250ZM682 250Q682 322 649 387T546 497T381 542Q272 542 184 459T95 250Q95 132 178 45T389 -42Q515 -42 598 45T682 250ZM311 250Q311 285 332 304T375 328Q376 328 382 328T392 329Q424 326 445 305T466 250Q466 217 445 195T389 172Q354 172 333 195T311 250\",8858:\"57 250Q57 327 87 392T166 497T270 560T382 582H394Q512 582 610 500Q721 401 721 250Q721 112 626 15T389 -82Q251 -82 154 13T57 250ZM682 129T682 250T596 457T390 543Q269 543 183 457T96 250Q96 132 180 45T389 -43Q511 -43 596 43ZM250 250Q250 316 295 352T384 388Q451 388 489 347T528 250Q528 192 487 152T389 112Q331 112 291 152T250 250ZM488 250Q488 290 460 319T389 349Q348 349 319 320T290 250Q290 208 320 180T389 151Q431 151 459 181T488 250\",8859:\"57 250Q57 327 87 392T166 497T270 560T382 582H394Q512 582 610 500Q721 401 721 250Q721 112 626 15T389 -82Q251 -82 154 13T57 250ZM682 129T682 250T596 457T390 543Q269 543 183 457T96 250Q96 132 180 45T389 -43Q511 -43 596 43ZM204 339Q204 357 215 366T238 375Q247 375 283 348Q300 336 311 328L368 286Q369 286 366 323T359 398T355 437Q357 456 379 465Q380 465 384 465T391 466Q403 465 412 457T423 437Q423 436 420 398T413 323T410 286L467 328Q476 334 486 341T501 353T513 361T523 368T529 372T535 374T541 375Q554 375 564 365T575 339Q575 325 566 318T519 292Q504 285 496 281L430 250L496 219Q552 192 559 188T572 175Q575 168 575 161Q575 148 566 137T541 126H538Q530 126 499 149Q480 163 467 172L410 214Q409 214 412 177T419 102T423 63Q423 59 421 54T411 43T389 36T368 42T357 54T355 63Q355 64 358 102T365 177T368 214L311 172Q302 165 293 159T279 148T268 140T260 134T254 131T250 128T246 127T242 126T238 126Q223 126 214 135T204 161T213 183T282 219L348 250L282 281Q226 308 219 312T206 325Q204 330 204 339\",8861:\"57 250Q57 327 87 392T166 497T270 560T382 582H394Q512 582 610 500Q721 401 721 250Q721 112 626 15T389 -82Q251 -82 154 13T57 250ZM682 129T682 250T596 457T390 543Q269 543 183 457T96 250Q96 132 180 45T389 -43Q511 -43 596 43ZM223 250Q223 263 233 267T280 271Q289 271 325 271T389 270H490Q535 270 545 267T555 250Q555 241 549 235Q544 231 527 231T389 230Q239 230 235 232Q223 236 223 250\",8862:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM369 365V649H95V365H369ZM682 365V649H409V365H682ZM369 40V325H95V40H369ZM682 40V325H409V40H682\",8863:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM682 365V649H95V365H682ZM682 40V325H95V40H682\",8864:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H707Q714 686 722 676V13Q714 3 707 0H71ZM123 649Q147 625 214 555T335 430T389 374L654 649H123ZM95 70Q99 74 229 209T360 345L95 619V70ZM682 70V619L418 346Q417 344 549 207L682 70ZM654 41L400 304L388 315L123 41L256 40H522L654 41\",8865:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM682 40V649H95V40H682ZM330 345Q330 371 347 388T390 405Q412 405 430 389T448 345Q448 317 430 301T389 285T348 301T330 345\",8866:\"55 678Q55 679 56 681T58 684T61 688T65 691T70 693T77 694Q88 692 95 679V367H540Q555 359 555 347Q555 334 540 327H95V15Q88 2 77 0Q73 0 70 1T65 3T61 6T59 9T57 13T55 16V678\",8867:\"515 678Q515 679 516 681T518 684T521 688T525 691T530 693T537 694Q548 692 555 679V15Q548 2 537 0Q533 0 530 1T525 3T521 6T519 9T517 13T515 16V327H71Q70 327 67 329T59 336T55 347T59 358T66 365T71 367H515V678\",8868:\"55 642T55 648T59 659T66 666T71 668H708Q723 660 723 648T708 628H409V15Q402 2 391 0Q387 0 384 1T379 3T375 6T373 9T371 13T369 16V628H71Q70 628 67 630T59 637\",8869:\"369 652Q369 653 370 655T372 658T375 662T379 665T384 667T391 668Q402 666 409 653V40H708Q723 32 723 20T708 0H71Q70 0 67 2T59 9T55 20T59 31T66 38T71 40H369V652\",8872:\"139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V367H796Q811 359 811 347Q811 336 797 328L479 327H161L159 328V172L161 173H797Q798 172 800 171T803 169T805 167T808 164T809 162T810 158T811 153Q811 140 796 133H159V-235Q151 -249 141 -249H139\",8873:\"55 678Q55 679 56 681T58 684T61 688T65 691T70 693T77 694Q88 692 95 679V15Q88 2 77 0Q73 0 70 1T65 3T61 6T59 9T57 13T55 16V678ZM249 678Q249 679 250 681T252 684T255 688T259 691T264 693T271 694Q282 692 289 679V367H651Q666 359 666 347Q666 334 651 327H289V15Q282 2 271 0Q267 0 264 1T259 3T255 6T253 9T251 13T249 16V678\",8874:\"55 678Q55 679 56 681T58 684T61 688T65 691T70 693T77 694Q88 692 95 679V15Q88 2 77 0Q73 0 70 1T65 3T61 6T59 9T57 13T55 16V678ZM237 678Q237 679 238 681T240 684T243 688T247 691T252 693T259 694Q270 692 277 679V15Q270 2 259 0Q255 0 252 1T247 3T243 6T241 9T239 13T237 16V678ZM419 678Q419 679 420 681T422 684T425 688T429 691T434 693T441 694Q452 692 459 679V367H818Q833 359 833 347Q833 334 818 327H459V15Q452 2 441 0Q437 0 434 1T429 3T425 6T423 9T421 13T419 16V678\",8876:\"56 681Q70 695 76 695T96 681V368H243L381 530Q521 692 525 692Q537 700 547 688Q554 682 554 674Q554 671 553 669T548 661T539 649T522 631T499 604T465 565T421 512Q296 373 296 368H416H476Q525 368 539 365T554 348Q554 334 543 328H261L96 141V12Q81 -1 75 -1Q65 -1 58 10L56 50V92L18 48Q7 37 -1 28T-13 14T-19 6T-23 1T-27 0T-33 -1Q-42 -1 -48 4T-55 19Q-55 24 -47 34T12 103L56 155V681ZM205 326Q205 328 152 328H96V263Q96 203 98 203Q99 203 123 231T174 290T205 326\",8877:\"56 681Q70 695 76 695T96 681V466H327L425 579Q522 692 527 692Q529 693 534 693Q542 693 547 688T553 674Q553 668 549 663Q549 662 538 650T504 611T463 563L381 468L461 466H543Q554 453 554 446T541 426H345L209 272L376 270H543Q554 257 554 251T541 230H174L96 141V12Q81 -1 75 -1Q65 -1 58 10L56 50V92L18 48Q7 37 -1 28T-13 14T-19 6T-23 1T-27 0T-33 -1Q-42 -1 -48 4T-55 19Q-55 24 -47 34T12 103L56 155V681ZM267 399L292 426H96V270H158L201 321Q256 382 267 399ZM118 228L119 229Q119 230 109 230H96V201L107 212Q118 227 118 228\",8878:\"56 681Q70 695 77 695T96 683V428L98 175L252 323V681Q264 695 272 695Q278 695 292 681V526Q292 368 296 368Q298 368 447 510Q638 695 642 695H645Q651 695 658 688T665 673Q665 666 661 661Q659 660 639 641T578 582T505 512L356 370L505 368H654Q665 357 665 349Q665 343 652 328H314L303 317L292 308V12Q289 10 285 6T279 1T272 -1Q265 -1 252 12V139Q252 266 249 266L96 119V12Q80 -1 76 -1T70 0T63 6T56 12V79L29 55Q-26 -1 -35 -1Q-42 -1 -48 5T-55 19Q-55 25 -51 30T-15 66Q5 86 18 99L56 135V681\",8879:\"56 681Q70 695 77 695T96 683V428L98 175L252 323V681Q264 695 272 695Q278 695 292 681V466H401L503 563L621 679Q637 695 645 695Q652 695 658 688T665 673Q665 670 663 666Q663 665 651 652T611 612T561 563L458 468L556 466H654Q665 455 665 447T652 426H416L294 308L292 288V270H652Q665 255 665 250T652 230H292V12Q289 10 285 6T279 1T272 -1Q265 -1 252 12V139Q252 266 249 266L96 119V12Q80 -1 76 -1T70 0T63 6T56 12V79L29 55Q-26 -1 -35 -1Q-42 -1 -48 5T-55 19Q-55 25 -51 30T-15 66Q5 86 18 99L56 135V681ZM358 426H292V361L325 392L358 426\",8882:\"694 -26Q686 -40 676 -41H670L382 95Q92 232 90 234Q83 239 83 249Q83 262 96 267Q101 270 379 401T665 537Q671 539 674 539Q686 539 694 524V-26ZM654 11T654 249T653 487T402 369T151 249L275 190Q399 131 524 72T652 11Q654 11 654 249\",8883:\"83 523Q83 524 85 527T92 535T103 539Q107 539 389 406T680 268Q694 260 694 249Q694 239 687 234Q685 232 395 95L107 -41H101Q90 -40 83 -26V523ZM376 368Q323 393 254 425T155 472L125 487Q123 487 123 249T125 11Q127 12 252 71T502 190L626 249L376 368\",8884:\"694 71Q686 58 676 56H670L382 192Q92 329 90 331Q83 336 83 346Q83 359 96 364Q101 367 379 498T665 634Q671 636 674 636Q686 636 694 621V71ZM654 108T654 346T653 584T402 466T151 346L275 287Q399 228 524 169T652 108Q654 108 654 346ZM83 -120Q83 -116 84 -113T86 -108T89 -104T92 -102T96 -100T99 -98H678Q679 -98 681 -99T684 -101T688 -104T691 -108T693 -113T694 -120Q692 -130 679 -138H98Q84 -130 83 -120\",8885:\"83 620Q83 621 85 624T92 632T103 636Q107 636 389 503T680 365Q694 357 694 346Q694 336 687 331Q685 329 395 192L107 56H101Q90 58 83 71V620ZM376 465Q323 490 254 522T155 570L125 584Q123 584 123 346T125 108Q127 109 252 168T502 287L626 346L376 465ZM83 -120Q83 -116 84 -113T86 -108T89 -104T92 -102T96 -100T99 -98H678Q679 -98 681 -99T684 -101T688 -104T691 -108T693 -113T694 -120Q692 -130 679 -138H98Q84 -130 83 -120\",8888:\"1055 250Q1055 190 1012 141T896 92Q858 92 828 106T781 140T755 180T741 214L738 228V230H405Q71 230 68 232Q55 238 55 250T68 268Q71 270 405 270H738V272L740 280Q742 287 745 297T754 321T771 348T796 374T832 396T881 408H891Q969 408 1012 360T1055 250ZM896 132Q948 132 981 166T1014 250Q1014 301 985 330T920 367Q914 368 891 368Q853 368 816 338T778 250Q778 198 812 165T896 132\",8890:\"318 -182Q302 -212 280 -212H278H275Q249 -212 239 -182L238 84V351H162L87 352Q57 362 57 391T84 429Q89 431 280 431H470L474 429Q477 427 479 426T484 423T490 417T495 410T499 402T500 391Q500 365 470 352L394 351H318V-182\",8891:\"56 697Q56 706 62 711T75 716Q86 716 90 709Q91 708 104 680T147 592T199 483L305 261L411 483Q443 548 481 629Q512 694 518 705T535 716Q543 716 549 710T555 700Q555 693 501 577T388 340T325 210Q316 194 305 194Q292 194 285 210Q282 219 224 339T111 574T56 697ZM55 14T55 20T59 31T66 38T71 40H540Q555 32 555 20T540 0H71Q70 0 67 2T59 9\",8892:\"55 698Q56 708 70 716H540Q554 708 555 698Q555 694 554 691T552 686T549 682T546 680T542 678T539 676H71Q70 676 68 677T65 679T61 682T58 686T56 691T55 698ZM555 18Q554 12 549 6T536 0H535Q525 0 515 17T459 132Q430 194 410 235L305 455L199 233Q176 185 147 125T105 36T90 7Q85 0 75 0Q63 0 58 11Q55 15 55 21Q58 31 170 266T285 507Q295 522 305 522T320 515Q322 513 439 268L555 24V18\",8896:\"119 -249T97 -249T65 -235T55 -207Q55 -201 56 -198Q58 -190 218 268T380 729Q392 750 416 750Q438 750 451 732Q453 728 534 498T695 36L775 -194Q777 -204 777 -208Q777 -222 767 -235T735 -249Q713 -249 700 -231Q696 -225 557 177L416 579L276 177Q136 -226 132 -231Q119 -249 97 -249\",8897:\"55 708Q55 729 68 739T96 750Q119 750 132 731Q136 726 276 323L416 -79L557 323Q696 725 700 731Q713 749 735 749Q756 749 766 736T777 708Q777 700 696 466T533 1T451 -232Q436 -249 416 -249Q402 -249 391 -241Q384 -236 380 -226Q368 -198 219 230Q55 697 55 708\",8898:\"139 -217Q127 -241 114 -246Q106 -249 97 -249Q67 -249 57 -220Q55 -214 55 102Q55 152 55 221T54 312Q54 422 60 464T91 554Q120 612 165 654T257 714T337 741T392 749Q393 750 402 750Q414 750 422 749Q557 749 660 659T776 430Q777 422 777 102Q777 -214 775 -220Q765 -249 735 -249Q716 -249 708 -241T694 -217L692 428L690 441Q674 540 597 603T416 666H409Q388 666 364 662T294 638T212 581Q156 523 142 441L140 428L139 105V-217\",8899:\"96 750Q103 750 109 748T120 744T127 737T133 730T137 723T139 718V395L140 73L142 60Q159 -43 237 -104T416 -166Q521 -166 597 -103T690 60L692 73L694 718Q708 749 735 749Q765 749 775 720Q777 714 777 398Q777 78 776 71Q766 -51 680 -140Q571 -249 416 -249H411Q261 -249 152 -140Q66 -51 56 71Q55 78 55 398Q55 714 57 720Q60 734 70 740Q80 750 96 750\",8900:\"242 486Q245 488 250 488Q256 488 258 486Q262 484 373 373T486 258T488 250T486 242T373 127T258 14Q256 12 250 12Q245 12 242 14Q237 16 127 126T14 242Q12 245 12 250T14 258Q16 263 126 373T242 486ZM439 250L250 439L61 250L250 61L439 250\",8901:\"78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250\",8902:\"210 282Q210 284 225 381T241 480Q241 484 245 484Q249 486 251 486Q258 486 260 477T272 406Q275 390 276 380Q290 286 290 282L388 299Q484 314 487 314H488Q497 314 497 302Q497 297 434 266Q416 257 404 251L315 206L361 118Q372 98 383 75T401 40L407 28Q407 16 395 16Q394 16 392 16L390 17L250 159L110 17L108 16Q106 16 105 16Q93 16 93 28L99 40Q105 52 116 75T139 118L185 206L96 251Q6 296 4 300Q3 301 3 302Q3 314 12 314H13Q16 314 112 299L210 282\",8903:\"366 543Q374 545 382 545Q405 545 419 538Q429 534 443 521T462 496Q466 478 466 467Q466 438 444 412Q422 390 388 390Q352 390 331 412Q311 434 311 467Q311 499 331 518Q345 533 366 543ZM146 472Q146 479 153 485T166 492Q171 492 187 476T279 385L386 278L495 385Q600 492 608 492Q615 492 621 486T628 472Q628 467 614 452T531 367L435 270H706Q720 256 720 250Q720 241 706 230H435L531 132Q600 63 614 48T628 27Q628 20 622 14T608 7Q600 7 495 114L386 221L279 114Q204 39 188 23T166 7Q159 7 153 13T146 27Q146 32 160 47T244 132L339 230H68Q55 243 55 250Q55 255 68 270H339L244 367Q175 436 161 451T146 472ZM466 34Q466 4 447 -20T388 -44Q353 -44 331 -22Q311 1 311 34Q311 66 331 85Q347 101 366 110Q374 112 382 112Q405 112 419 105Q429 100 443 87T462 63Q466 45 466 34\",8904:\"833 50T833 250T832 450T659 351T487 250T658 150T832 50Q833 50 833 250ZM873 10Q866 -5 854 -5Q851 -5 845 -3L449 226L260 115Q51 -5 43 -5Q39 -5 35 -1T28 7L26 11V489Q33 505 43 505Q51 505 260 385L449 274L845 503Q851 505 853 505Q866 505 873 490V10ZM412 250L67 450Q66 450 66 250T67 50Q69 51 240 150T412 250\",8905:\"146 479Q159 492 166 492Q171 492 189 475T279 386L386 279L495 386Q598 492 608 492Q615 492 621 486T628 472Q628 464 522 357L415 250L522 144Q628 37 628 28Q628 21 622 15T608 8Q599 8 495 115L386 221L279 115Q204 40 188 24T166 8Q162 8 160 9T153 15T146 21V479ZM186 77L359 250L186 424V77\",8906:\"146 472Q146 479 152 485T166 492Q171 492 189 475T279 386L386 279L495 386Q598 492 608 492Q615 492 628 479V21Q615 8 608 8Q599 8 495 115L386 221L279 115Q204 40 188 24T166 8Q159 8 153 14T146 28Q146 37 253 144L359 250L253 357Q146 464 146 472ZM588 77V424L499 337L415 250L588 77\",8907:\"55 674Q55 682 62 688T76 694H77Q83 694 100 677T208 561Q320 440 410 342Q462 286 541 201Q677 55 699 30T722 -2Q722 -9 716 -15T701 -22T688 -17Q687 -15 542 141T394 301L388 306L240 146Q119 15 101 -3T75 -22T61 -16T55 -2Q55 4 67 19T158 117Q190 151 209 172L361 336L209 500Q62 657 57 667Q55 671 55 674\",8908:\"84 -22T76 -22T62 -16T55 -2Q55 4 78 30T249 215Q321 293 367 342Q672 672 683 682Q695 694 702 694Q710 694 716 688T722 674Q722 668 710 653T619 555Q587 521 568 500L416 336L568 172Q715 15 720 5Q722 1 722 -2Q722 -9 716 -15T702 -22H700Q693 -22 671 1T537 146L389 306Q387 304 340 253T237 143T135 33L89 -17Q84 -22 76 -22\",8909:\"56 433Q56 464 71 464Q74 464 77 461Q82 454 82 438T91 397T123 347Q166 307 222 307Q264 307 308 331T386 385T465 438T556 463Q631 463 676 408T722 283Q722 250 708 250Q704 250 699 257Q695 265 693 286T682 330Q670 350 655 367Q612 407 556 407Q514 407 470 383T393 329T314 276T222 251Q148 251 102 306T56 433ZM57 56Q57 71 73 76H706Q722 70 722 56Q722 44 707 36H71Q57 43 57 56\",8910:\"83 558Q83 566 89 572T104 578Q108 578 116 577T146 570T190 555T239 526T286 480Q308 453 325 420T351 358T367 304T376 265T380 251T381 253Q381 262 395 312Q428 434 492 499T642 576Q654 578 655 578Q664 578 670 572T676 558Q676 543 657 540T599 524T525 476Q406 362 400 29V8Q400 -21 380 -21Q369 -21 362 -11Q360 -7 360 12Q360 115 348 200T308 360T231 480T111 537Q83 540 83 558\",8911:\"104 -22Q95 -22 89 -16T83 -2Q83 11 98 16T135 23T192 46T256 103Q360 233 360 549Q360 554 360 557T361 563T362 567T364 569T367 572T371 576Q377 578 380 578Q401 578 401 547Q401 543 401 537T400 527Q409 53 648 19Q676 16 676 -2Q676 -10 670 -16T655 -22Q654 -22 642 -20Q556 -9 492 56T395 244Q381 294 381 303Q381 305 380 305T374 275T352 201T310 110T234 27T117 -20Q105 -22 104 -22\",8912:\"84 250Q84 372 166 450T360 539Q361 539 370 539T395 539T430 540T475 540T524 540H679Q694 532 694 520Q694 511 681 501L522 500H470H441Q366 500 338 496T266 472Q244 461 224 446T179 404T139 337T124 250V245Q124 157 185 89Q244 25 328 7Q348 2 366 2T522 0H681Q694 -10 694 -20Q694 -32 679 -40H526Q510 -40 480 -40T434 -41Q350 -41 289 -25T172 45Q84 127 84 250ZM694 134Q694 123 679 114H425H384Q350 114 326 121T277 154Q238 193 238 251Q238 322 295 361Q318 378 339 382T412 387Q423 387 459 387T520 386H679Q694 377 694 366Q694 354 679 346H519Q493 346 458 346T411 347Q360 347 341 342T303 315Q278 287 278 250Q278 210 301 187T351 156Q358 154 519 154H679Q694 146 694 134\",8913:\"83 520Q83 532 98 540H251Q267 540 297 540T343 541Q427 541 488 525T605 455Q693 374 693 250Q693 165 650 99T545 0T415 -39Q407 -40 251 -40H98Q83 -32 83 -20Q83 -10 96 0H255H308H337Q412 0 439 4T512 28Q533 39 553 54T599 96T639 163T654 250Q654 341 592 411Q557 449 512 472Q468 491 439 495T335 500H306H255L96 501Q83 511 83 520ZM83 366Q83 376 96 386H244Q280 386 317 386T378 386L402 387Q456 387 498 348T540 250Q540 203 512 168T446 120Q427 114 353 114H99Q84 120 84 134Q84 147 98 154H258Q284 154 319 154T366 153Q416 153 436 158T474 185Q500 214 500 250Q500 290 477 313T426 344Q419 346 258 346H98Q83 354 83 366\",8914:\"88 -21T75 -21T55 -7V200Q55 231 55 280Q56 414 60 428Q61 430 61 431Q77 500 152 549T332 598Q443 598 522 544T610 405Q611 399 611 194V-7Q604 -22 591 -22Q582 -22 572 -9L570 405Q563 433 556 449T529 485Q498 519 445 538T334 558Q251 558 179 518T96 401Q95 396 95 193V-7Q88 -21 75 -21ZM229 -21H227Q215 -21 209 -7V166Q209 304 209 327T215 363Q226 398 259 421T333 444Q380 444 414 416T455 347Q457 339 457 166V-7Q449 -21 439 -21H437H435Q423 -21 417 -7V164Q417 303 417 325T411 358Q387 403 333 403T255 358Q250 347 250 325T249 164V-7Q241 -21 231 -21H229\",8915:\"591 598H592Q604 598 611 583V376Q611 345 611 296Q610 162 606 148Q605 146 605 145Q586 68 507 23T333 -22Q268 -22 209 -1T106 66T56 173Q55 180 55 384L56 585Q66 598 75 598Q85 598 95 585V378L96 172L98 162Q112 95 181 57T332 18Q415 18 487 58T570 175Q571 180 571 383V583Q579 598 591 598ZM437 598Q450 598 457 583V410Q457 237 455 229Q448 189 414 161T333 132Q291 132 255 157T211 230Q209 237 209 412L210 585Q220 598 229 598Q242 598 249 583V412Q249 273 249 251T255 218Q279 173 333 173T411 218Q416 229 416 251T417 412V583Q425 598 437 598\",8916:\"76 -22Q64 -22 56 -7V176L57 360L59 370Q66 401 83 426T123 468T171 495T221 513T265 522T298 527L311 528H314V625L315 723Q325 736 334 736Q346 736 354 721V528H356L368 527Q380 526 399 523T441 515T490 498T537 472T578 433T606 379Q611 359 611 171V-7Q604 -21 591 -21T571 -7V170Q571 313 571 337T565 375Q555 408 526 432T461 467T402 482T365 487H354V-7Q347 -21 334 -21T314 -7V487H303Q251 484 207 467Q121 438 99 367L97 357L96 174V-9Q86 -22 76 -22\",8918:\"86 261Q92 267 381 404T673 541Q680 541 686 535T693 521T689 510Q684 504 418 379L151 250L418 121Q686 -4 689 -10Q693 -14 693 -21T687 -34T675 -41Q668 -41 380 96T86 239Q82 244 82 250Q82 257 86 261ZM610 250Q610 224 592 198T531 172Q498 172 475 195Q453 214 453 250Q453 308 513 328Q515 330 535 330Q569 328 589 304T610 250\",8919:\"82 521Q82 529 89 535T100 541Q107 541 395 404T689 261Q693 257 693 250T689 239Q684 234 396 97T100 -41Q95 -41 89 -35T82 -21Q82 -12 96 -4Q118 9 358 121L624 250L358 379Q91 503 86 510Q82 514 82 521ZM165 250Q165 282 188 306T239 330Q262 330 275 323Q303 312 318 283Q322 272 322 250Q322 213 300 195Q277 172 246 172Q224 172 213 177Q165 200 165 250\",8920:\"639 -48Q639 -54 634 -60T619 -67H618Q612 -67 536 -26Q430 33 329 88Q61 235 59 239Q56 243 56 250T59 261Q62 266 336 415T615 567L619 568Q622 567 625 567Q639 562 639 548Q639 540 633 534Q632 532 374 391L117 250L374 109Q632 -32 633 -34Q639 -40 639 -48ZM958 -48Q958 -54 953 -60T938 -67H937Q931 -67 855 -26Q749 33 648 88Q380 235 378 239Q375 243 375 250T378 261Q381 266 655 415T934 567L938 568Q941 567 944 567Q958 562 958 548Q958 540 952 534Q951 532 693 391L436 250L693 109Q951 -32 952 -34Q958 -40 958 -48ZM1277 -48Q1277 -54 1272 -60T1257 -67H1256Q1250 -67 1174 -26Q1068 33 967 88Q699 235 697 239Q694 243 694 250T697 261Q700 266 974 415T1253 567L1257 568Q1260 567 1263 567Q1277 562 1277 548Q1277 540 1271 534Q1270 532 1012 391L755 250L1012 109Q1270 -32 1271 -34Q1277 -40 1277 -48\",8921:\"75 -67Q65 -67 60 -61T55 -48Q55 -40 61 -34Q62 -32 329 109L595 250L329 391Q62 532 61 534Q55 540 55 548Q55 562 69 567H77Q81 567 222 493T506 342T653 264Q667 250 653 236Q649 234 504 157T220 7T77 -67H75ZM364 547Q364 563 381 567L384 568Q387 568 518 499T795 353T955 269Q967 261 967 250T955 231Q925 216 780 139T513 -3T383 -67Q373 -67 369 -60T364 -47Q364 -40 370 -34Q373 -31 639 109L904 250L639 391Q373 531 370 534Q364 540 364 547ZM674 538T674 548T681 562T693 567Q699 567 816 505Q915 453 993 412Q1050 382 1132 339Q1241 282 1259 271T1277 250Q1277 241 1263 232Q1246 221 985 84Q698 -67 692 -67Q674 -67 674 -47Q674 -38 680 -33Q683 -30 947 109L1213 250L947 391Q683 530 680 533Q674 538 674 548\",8922:\"674 445Q674 438 669 432T655 425T369 531T90 640Q83 645 83 655Q83 668 95 673Q644 886 654 886Q662 886 668 880T674 866Q674 856 663 850Q649 843 411 751L160 655L407 560Q474 534 561 501Q646 469 660 462T674 445ZM84 250Q84 260 99 270H658Q674 264 674 250Q674 238 659 230H98Q84 237 84 250ZM83 55Q83 68 94 73Q98 76 104 76Q108 75 383 -30T664 -138Q674 -144 674 -155Q674 -165 667 -170Q664 -173 385 -279T104 -386Q85 -386 83 -368Q83 -354 92 -349Q93 -349 347 -251L597 -155L346 -59Q296 -40 223 -12Q118 28 101 36T83 55\",8923:\"111 425T102 425T88 431T83 445V446Q83 455 96 461Q111 469 203 504Q287 536 350 560L597 655L346 751Q94 848 92 850Q83 856 83 866Q83 873 88 879T104 886Q109 885 386 779T667 670Q674 665 674 655T667 640Q665 638 388 532ZM84 250Q84 260 99 270H658Q674 264 674 250Q674 238 659 230H98Q84 237 84 250ZM653 76Q656 76 660 75T669 68T674 56Q674 46 665 40Q663 38 411 -59L160 -155L410 -251Q664 -349 665 -349Q674 -354 674 -368Q672 -386 654 -386Q650 -386 371 -279T90 -170Q83 -165 83 -155Q83 -144 93 -138Q645 76 653 76\",8926:\"113 424Q83 424 83 444Q83 453 96 464H121Q181 466 234 474T341 501T435 545T505 613T542 707Q545 734 564 734Q583 731 583 714Q583 658 560 613T500 538T414 486T321 453T229 434T156 426T113 424ZM112 270Q83 270 83 290Q83 301 94 307Q98 310 118 310Q624 310 653 556Q657 580 675 580Q693 577 693 559V552Q684 472 628 410T465 314Q436 303 372 290Q373 290 388 287T425 278T465 266Q674 199 693 28L694 17L692 14Q691 11 689 8T683 3T673 0Q657 0 653 24Q623 270 118 270H112\",8927:\"195 713Q195 725 201 729T214 734Q227 734 231 722T238 691T255 641T299 580Q405 474 656 464H681Q694 451 694 443Q694 424 670 424H664Q535 424 415 465T235 595Q195 657 195 713ZM668 310Q694 310 694 290Q694 285 691 279Q684 271 664 270Q550 268 464 257T301 220T179 146T124 27Q119 0 103 0T83 16Q83 21 83 31T92 68T113 121T157 177T229 231Q295 268 405 290Q404 290 389 293T352 302T312 314Q138 371 96 500Q83 541 83 562Q83 568 89 574T103 580Q115 580 120 570T126 542T138 497T173 442Q289 310 659 310H668\",8928:\"82 344Q82 349 95 364H124Q266 364 398 390L429 397L509 595Q519 619 536 659Q581 766 590 783T609 801Q616 801 622 795T629 781Q629 776 553 595Q533 548 516 506T489 439T480 415Q482 415 505 426T538 444Q632 498 651 601Q654 621 658 628T673 635Q680 635 686 629T693 615Q693 591 678 546Q636 433 484 375L458 364L451 348Q443 332 443 329T455 324Q480 316 503 307T560 277T619 233T664 170T691 86Q693 68 691 64Q684 53 672 53Q664 53 658 59Q657 60 650 97T617 174T538 244Q515 257 476 273T428 289Q425 289 412 256Q381 179 344 90L262 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L464 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 174 -213T202 -143H95Q82 -128 82 -123T95 -103H220L302 97Q384 288 384 299Q384 302 341 308T235 319T124 324H95Q82 337 82 344ZM399 338Q403 338 406 346L409 353L375 344Q375 343 384 341T399 338\",8929:\"146 -283Q146 -282 174 -213T202 -143H95Q82 -127 82 -123T95 -103H220L300 93Q343 196 374 270Q385 294 386 299L373 295Q331 287 289 268Q241 249 208 224T159 174T135 127T124 85T118 59Q112 53 103 53Q91 53 84 64Q82 68 84 86Q96 185 174 248T375 337L400 344Q399 344 381 348T351 355T316 364T276 379T235 398T193 424T155 456T122 497T98 546Q82 587 82 615Q82 622 88 628T102 635Q112 635 116 628T124 601Q128 579 134 562T159 515T207 463T290 418T415 384L422 381L506 586Q571 744 584 772T609 801Q616 801 622 795T629 781T544 577Q525 529 504 478T473 402T462 375Q480 373 500 373Q579 364 651 364H680Q682 361 686 357T691 351T693 344Q693 337 680 324H651Q553 324 451 310L433 308L349 104L262 -101L473 -103H682Q694 -115 694 -123Q694 -133 682 -141L464 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283\",8934:\"86 450Q93 455 380 592T673 730Q680 730 686 724T693 710Q693 702 688 699Q686 693 417 568L151 439L417 310Q685 185 688 179Q693 176 693 168Q693 161 687 155T675 148Q668 148 380 285T86 428Q74 438 86 450ZM55 -205Q55 -175 64 -142T92 -76T145 -22T222 -1Q288 -1 362 -66Q369 -72 372 -75T378 -79T382 -81T384 -79Q389 -74 439 21Q483 100 490 111T504 122Q510 122 518 118T526 103Q526 101 510 69T467 -12T419 -99L413 -112L433 -128Q498 -180 553 -180Q605 -180 646 -139Q672 -112 681 -77T693 -21T706 -1Q719 -1 719 -33Q719 -39 717 -57Q708 -141 655 -190Q625 -224 586 -232Q568 -237 551 -237Q487 -237 413 -172L391 -155Q391 -157 335 -255Q297 -325 286 -342T268 -359Q260 -359 254 -353T248 -339T304 -230L359 -126Q359 -124 337 -107T302 -81Q262 -57 221 -57Q170 -57 130 -93T84 -201Q82 -236 70 -236Q55 -236 55 -205\",8935:\"88 723Q95 730 99 730Q106 730 394 593T688 450Q693 447 693 439T688 428Q683 423 395 286T99 148Q94 148 88 155T82 168Q82 175 86 179Q89 184 357 310L624 439L357 568Q88 694 86 699Q81 703 81 711T88 723ZM55 -205Q55 -175 64 -142T92 -76T145 -22T222 -1Q288 -1 362 -66Q369 -72 372 -75T378 -79T382 -81T384 -79Q389 -74 439 21Q483 100 490 111T504 122Q510 122 518 118T526 103Q526 101 510 69T467 -12T419 -99L413 -112L433 -128Q498 -180 553 -180Q605 -180 646 -139Q672 -112 681 -77T693 -21T706 -1Q719 -1 719 -33Q719 -39 717 -57Q708 -141 655 -190Q625 -224 586 -232Q568 -237 551 -237Q487 -237 413 -172L391 -155Q391 -157 335 -255Q297 -325 286 -342T268 -359Q260 -359 254 -353T248 -339T304 -230L359 -126Q359 -124 337 -107T302 -81Q262 -57 221 -57Q170 -57 130 -93T84 -201Q82 -236 70 -236Q55 -236 55 -205\",8936:\"95 419Q81 433 81 439T95 459H124Q318 459 455 501Q515 521 556 550T615 607T641 659T652 702T659 725Q667 730 673 730Q680 730 686 724T693 710Q693 682 677 641Q668 616 654 594T622 554T586 522T545 497T504 477T464 462T428 452T397 444T375 439Q379 437 410 430T476 411T551 379T625 321T677 237Q693 196 693 168Q693 161 687 155T673 148Q662 148 658 154T651 181Q638 253 591 300T455 377Q318 419 124 419H95ZM55 -205Q55 -175 64 -142T92 -76T145 -22T222 -1Q288 -1 362 -66Q369 -72 372 -75T378 -79T382 -81T384 -79Q389 -74 439 21Q483 100 490 111T504 122Q510 122 518 118T526 103Q526 101 510 69T467 -12T419 -99L413 -112L433 -128Q498 -180 553 -180Q605 -180 646 -139Q672 -112 681 -77T693 -21T706 -1Q719 -1 719 -33Q719 -39 717 -57Q708 -141 655 -190Q625 -224 586 -232Q568 -237 551 -237Q487 -237 413 -172L391 -155Q391 -157 335 -255Q297 -325 286 -342T268 -359Q260 -359 254 -353T248 -339T304 -230L359 -126Q359 -124 337 -107T302 -81Q262 -57 221 -57Q170 -57 130 -93T84 -201Q82 -236 70 -236Q55 -236 55 -205\",8937:\"679 459Q693 445 693 439Q693 430 679 419H651Q455 419 319 377Q231 347 184 300T124 181Q120 161 116 155T102 148Q95 148 89 154T82 168Q82 192 97 237Q111 275 137 306T188 355T249 391T307 414T361 429T399 439Q397 440 364 447T298 467T224 499T149 557T97 641Q82 686 82 710Q82 717 88 723T102 730L115 725Q118 722 124 697Q137 625 184 578T319 501Q456 459 651 459H679ZM55 -205Q55 -175 64 -142T92 -76T145 -22T222 -1Q288 -1 362 -66Q369 -72 372 -75T378 -79T382 -81T384 -79Q389 -74 439 21Q483 100 490 111T504 122Q510 122 518 118T526 103Q526 101 510 69T467 -12T419 -99L413 -112L433 -128Q498 -180 553 -180Q605 -180 646 -139Q672 -112 681 -77T693 -21T706 -1Q719 -1 719 -33Q719 -39 717 -57Q708 -141 655 -190Q625 -224 586 -232Q568 -237 551 -237Q487 -237 413 -172L391 -155Q391 -157 335 -255Q297 -325 286 -342T268 -359Q260 -359 254 -353T248 -339T304 -230L359 -126Q359 -124 337 -107T302 -81Q262 -57 221 -57Q170 -57 130 -93T84 -201Q82 -236 70 -236Q55 -236 55 -205\",8938:\"693 -30Q686 -41 673 -41Q661 -41 506 34L346 110L280 -44Q228 -162 216 -185T193 -208Q177 -208 173 -192Q173 -186 242 -30T311 128Q271 145 184 186T86 236Q82 240 82 246Q82 251 86 259Q96 267 271 350L449 434L506 565Q537 635 551 664T571 700T582 706Q587 706 593 701T600 690Q600 679 553 572Q504 463 504 461L586 501Q672 539 673 539Q679 539 693 525V-30ZM653 10V488L566 445L480 405L422 276Q415 260 405 236T388 199T376 171T368 151T366 145Q368 143 510 77T653 10ZM422 374Q422 376 420 376T285 313T151 248Q315 168 326 163Q415 356 422 374\",8939:\"82 525Q96 539 102 539Q103 539 122 530T186 501T266 463L426 388Q428 388 495 541Q564 694 569 699Q573 706 581 706Q587 706 593 702T600 691Q600 676 533 528Q515 486 506 465T485 418T470 381T466 370Q466 369 575 316Q676 269 689 259Q693 253 693 248Q693 242 689 236Q688 235 506 145Q328 63 324 59Q324 50 266 -70Q224 -169 214 -188T193 -208Q177 -208 173 -192Q173 -183 222 -77Q244 -29 257 2T269 34L186 -6Q108 -43 99 -43Q93 -43 82 -30V525ZM271 416Q129 485 126 485H125Q122 485 122 250Q122 10 124 10L211 50L295 92L411 350Q411 351 271 416ZM624 248L449 332L440 319Q434 297 393 214Q353 121 353 119Q355 119 489 182T624 248\",8940:\"82 -123Q82 -114 93 -103H166L238 -101L293 50Q349 200 349 204L220 266Q166 291 140 304T100 325T84 336T82 344Q82 353 94 360Q112 372 282 453L473 541L482 568Q487 578 529 693Q559 785 569 795Q573 802 581 802Q587 802 593 797T599 786Q599 775 564 675L526 570Q526 568 561 584T633 617T673 635Q679 635 693 621V66Q686 54 679 54Q665 54 526 119Q491 137 458 153T405 177T386 184Q385 182 334 42T282 -101T482 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L473 -143H266L238 -219Q217 -278 210 -290T193 -303Q178 -303 173 -287Q173 -279 198 -214L222 -145Q222 -143 158 -143L93 -141L86 -136Q82 -131 82 -123ZM653 106V584L506 513L453 370Q442 339 428 300T407 243T400 224Q403 222 527 164T653 106ZM453 486Q453 488 451 488T300 417T151 344L224 308Q247 298 285 279T331 257L364 241L453 486\",8941:\"82 621Q96 635 102 635T249 568L420 486L449 473L469 533Q563 789 569 797Q573 801 581 801Q598 801 600 786Q602 781 544 617L484 455Q531 435 584 408Q677 364 689 355Q693 351 693 344Q693 339 692 337T676 325T631 302T538 257Q504 241 465 223T406 195T386 186Q384 184 333 44T282 -101Q282 -103 482 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L473 -143H266L238 -219Q217 -278 210 -290T193 -303Q178 -303 173 -287Q173 -279 198 -214L222 -145Q222 -143 158 -143L93 -141L86 -136Q82 -131 82 -123Q82 -114 93 -103H166L238 -101L333 159Q326 159 220 106Q110 54 97 54Q89 54 82 66V621ZM298 501Q155 567 142 575L122 584V344Q122 106 124 106Q125 106 180 132T291 185T351 213Q355 217 393 326L433 435Q433 436 298 501ZM549 381Q472 417 471 417L406 241Q408 240 516 291T624 344L549 381\",8942:\"78 30Q78 54 95 72T138 90Q162 90 180 74T199 31Q199 6 182 -12T139 -30T96 -13T78 30ZM78 440Q78 464 95 482T138 500Q162 500 180 484T199 441Q199 416 182 398T139 380T96 397T78 440ZM78 840Q78 864 95 882T138 900Q162 900 180 884T199 841Q199 816 182 798T139 780T96 797T78 840\",8943:\"78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250ZM525 250Q525 274 542 292T585 310Q609 310 627 294T646 251Q646 226 629 208T586 190T543 207T525 250ZM972 250Q972 274 989 292T1032 310Q1056 310 1074 294T1093 251Q1093 226 1076 208T1033 190T990 207T972 250\",8945:\"133 760Q133 784 150 802T193 820Q217 820 235 804T254 761Q254 736 237 718T194 700T151 717T133 760ZM580 460Q580 484 597 502T640 520Q664 520 682 504T701 461Q701 436 684 418T641 400T598 417T580 460ZM1027 160Q1027 184 1044 202T1087 220Q1111 220 1129 204T1148 161Q1148 136 1131 118T1088 100T1045 117T1027 160\",8965:\"55 698Q56 708 70 716H540Q554 708 555 698Q555 694 554 691T552 686T549 682T546 680T542 678T539 676H71Q70 676 68 677T65 679T61 682T58 686T56 691T55 698ZM555 18Q554 12 549 6T536 0H535Q525 0 515 17T459 132Q430 194 410 235L305 455L199 233Q176 185 147 125T105 36T90 7Q85 0 75 0Q63 0 58 11Q55 15 55 21Q58 31 170 266T285 507Q295 522 305 522T320 515Q322 513 439 268L555 24V18\",8966:\"55 795Q56 806 70 813H540Q554 806 555 795Q555 791 554 788T552 783T549 779T546 777T542 775T539 773H71Q70 773 68 774T65 776T61 779T58 783T56 788T55 795ZM55 601Q56 612 70 619H540Q554 612 555 601Q555 597 554 594T552 589T549 585T546 583T542 581T539 579H71Q70 579 68 580T65 582T61 585T58 589T56 594T55 601ZM75 -97Q67 -97 61 -91T55 -81Q55 -71 169 166T285 410Q295 425 305 425Q311 425 316 422T323 414L325 410Q327 404 441 167T555 -81Q555 -85 549 -91T535 -97T520 -90Q519 -89 506 -61T463 27T411 136L305 358L199 136Q167 71 129 -10Q98 -75 92 -86T75 -97\",8968:\"174 734Q178 746 190 750H298H369Q400 750 411 747T422 730T411 713T372 709Q365 709 345 709T310 710H214V-235Q206 -248 196 -250Q192 -250 189 -249T184 -247T180 -244T178 -241T176 -237T174 -234V734\",8969:\"21 717T21 730T32 746T75 750H147H256Q266 742 269 735V-235Q262 -248 251 -250Q247 -250 244 -249T239 -247T235 -244T233 -241T231 -237T229 -234V710H133Q119 710 99 710T71 709Q43 709 32 713\",8970:\"174 734Q174 735 175 737T177 740T180 744T184 747T189 749T196 750Q206 748 214 735V-210H310H373Q401 -210 411 -213T422 -230T411 -247T369 -251Q362 -251 338 -251T298 -250H190Q178 -246 174 -234V734\",8971:\"229 734Q229 735 230 737T232 740T235 744T239 747T244 749T251 750Q262 748 269 735V-235Q266 -240 256 -249L147 -250H77Q43 -250 32 -247T21 -230T32 -213T72 -209Q79 -209 99 -209T133 -210H229V734\",8988:\"76 306Q62 306 59 319T55 386V500V596Q55 664 57 676T68 692Q71 694 250 694Q428 694 432 692Q444 685 444 674Q444 665 432 656Q428 654 261 654H95V487Q95 355 95 336T90 312Q84 306 76 306\",8989:\"424 306Q418 306 413 310T406 318L404 321V654H238Q71 654 68 656Q55 662 55 674T68 692Q71 694 250 694H379Q432 694 438 688Q443 683 443 662T444 500T444 338T438 312Q432 306 424 306\",8990:\"55 172V287Q55 341 58 353T76 366Q88 366 95 351V18H261Q428 18 432 16Q444 9 444 -2Q444 -11 432 -20Q428 -22 250 -22H120Q67 -22 61 -16Q56 -11 56 10T55 172\",8991:\"404 351Q410 366 424 366Q437 366 440 353T444 288V172V72Q444 8 443 -4T432 -20Q428 -22 250 -22Q71 -22 68 -20Q55 -14 55 -2T68 16Q71 18 238 18H404V351\",8994:\"55 141Q55 149 72 174T125 234T209 303T329 360T478 388H526Q649 383 765 319Q814 291 858 250T923 179T944 141Q944 133 938 128T924 122Q914 124 912 125T902 139Q766 328 500 328Q415 328 342 308T225 258T150 199T102 148T84 124Q81 122 75 122Q55 127 55 141\",8995:\"923 378Q944 378 944 358Q944 345 912 311T859 259Q710 134 500 134Q288 134 140 259Q55 336 55 358Q55 366 61 372T75 378Q78 378 84 376Q86 376 101 356T147 310T221 257T339 212T500 193Q628 193 734 236Q841 282 903 363Q914 378 923 378\",9001:\"333 -232Q332 -239 327 -244T313 -250Q303 -250 296 -240Q293 -233 202 6T110 250T201 494T296 740Q299 745 306 749L309 750Q312 750 313 750Q331 750 333 732Q333 727 243 489Q152 252 152 250T243 11Q333 -227 333 -232\",9002:\"55 732Q56 739 61 744T75 750Q85 750 92 740Q95 733 186 494T278 250T187 6T92 -240Q85 -250 75 -250Q67 -250 62 -245T55 -232Q55 -227 145 11Q236 248 236 250T145 489Q55 727 55 732\",9136:\"357 741V726Q357 720 349 715Q261 655 242 539Q240 526 240 454T239 315T239 247Q240 235 240 124V40Q240 -17 233 -53T201 -130Q155 -206 78 -244H69H64Q58 -244 57 -243T56 -234Q56 -232 56 -231V-225Q56 -218 63 -215Q153 -153 170 -39Q172 -25 173 119V219Q173 245 174 249Q173 258 173 376V460Q173 515 178 545T201 611Q244 695 327 741L334 744H354L357 741\",9137:\"78 744Q153 706 196 640T239 492V376Q239 341 239 314T238 271T238 253Q239 251 239 223V119V49Q239 -39 254 -85Q263 -111 275 -134T301 -172T326 -197T346 -213T356 -221T357 -232V-241L354 -244H334Q264 -209 222 -146T174 -12Q173 -6 173 95Q173 134 173 191T174 250Q173 258 173 382V451Q173 542 159 585Q145 626 120 658T75 706T56 723V731Q56 741 57 742T66 744H78\",9168:\"312 0V602H355V0H312\",9416:\"451 -175Q328 -175 226 -115T66 47T8 267Q8 303 15 342T39 431T94 531T186 622Q239 663 307 686T424 709H440Q604 709 716 622Q757 592 788 555T838 482T869 414T886 350T892 301T894 267Q894 147 835 45T674 -116T451 -175ZM854 268Q854 375 802 467T657 614T450 670Q283 670 166 552T49 267Q49 99 167 -18T453 -136Q617 -136 735 -18T854 268ZM273 378Q273 430 309 474T409 527Q411 527 417 527T428 528Q498 528 549 484L567 505Q583 528 590 528H594Q600 528 606 522V350L600 344H586Q577 344 574 344T569 347T566 357Q542 491 432 491Q389 491 365 465T340 407Q340 391 344 378T358 356T377 340T400 328T421 321T443 316T459 313Q499 305 517 300T559 279T601 238Q629 195 629 148Q629 80 583 33T471 -14Q392 -14 330 30Q312 6 293 -13Q292 -14 285 -14Q279 -14 273 -8V77V138Q273 160 275 165T286 170H294H307Q313 164 313 158Q313 108 350 67T471 26Q512 26 537 54T562 119Q562 137 558 151T544 176T527 193T504 205T483 212T459 218T441 222Q391 232 368 241T318 273Q273 316 273 378\",9484:\"76 306Q62 306 59 319T55 386V500V596Q55 664 57 676T68 692Q71 694 250 694Q428 694 432 692Q444 685 444 674Q444 665 432 656Q428 654 261 654H95V487Q95 355 95 336T90 312Q84 306 76 306\",9488:\"424 306Q418 306 413 310T406 318L404 321V654H238Q71 654 68 656Q55 662 55 674T68 692Q71 694 250 694H379Q432 694 438 688Q443 683 443 662T444 500T444 338T438 312Q432 306 424 306\",9492:\"55 172V287Q55 341 58 353T76 366Q88 366 95 351V18H261Q428 18 432 16Q444 9 444 -2Q444 -11 432 -20Q428 -22 250 -22H120Q67 -22 61 -16Q56 -11 56 10T55 172\",9496:\"404 351Q410 366 424 366Q437 366 440 353T444 288V172V72Q444 8 443 -4T432 -20Q428 -22 250 -22Q71 -22 68 -20Q55 -14 55 -2T68 16Q71 18 238 18H404V351\",9585:\"19 -195Q13 -195 7 -188T0 -176Q0 -169 18 -151L822 683Q835 694 840 694T852 688T860 674Q860 667 810 614T460 252Q57 -167 44 -179Q27 -195 19 -195\",9586:\"0 675Q0 681 6 687T19 694Q27 694 44 678L460 247Q759 -62 809 -115T860 -175Q860 -183 852 -189T840 -195Q835 -195 822 -184L18 649Q0 667 0 675\",9632:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71\",9633:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM682 40V649H95V40H682\",9642:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71\",9650:\"99 -20Q84 -11 84 0Q84 5 148 145T278 424L342 563Q347 575 360 575Q368 575 375 570Q376 569 441 430T571 148T637 0Q637 -11 622 -20H99\",9651:\"75 0L72 2Q69 3 67 5T62 11T59 20Q59 24 62 30Q65 37 245 370T428 707Q428 708 430 710T436 714T444 716Q451 716 455 712Q459 710 644 368L828 27V20Q828 7 814 0H75ZM610 347L444 653Q443 653 278 347T113 40H775Q775 42 610 347\",9652:\"99 -20Q84 -11 84 0Q84 5 148 145T278 424L342 563Q347 575 360 575Q368 575 375 570Q376 569 441 430T571 148T637 0Q637 -11 622 -20H99\",9653:\"75 0L72 2Q69 3 67 5T62 11T59 20Q59 24 62 30Q65 37 245 370T428 707Q428 708 430 710T436 714T444 716Q451 716 455 712Q459 710 644 368L828 27V20Q828 7 814 0H75ZM610 347L444 653Q443 653 278 347T113 40H775Q775 42 610 347\",9654:\"83 523Q83 524 85 527T92 535T103 539Q107 539 389 406T680 268Q694 260 694 249Q694 239 687 234Q685 232 395 95L107 -41H101Q90 -40 83 -26V523\",9656:\"83 523Q83 524 85 527T92 535T103 539Q107 539 389 406T680 268Q694 260 694 249Q694 239 687 234Q685 232 395 95L107 -41H101Q90 -40 83 -26V523\",9657:\"26 489Q33 505 43 505Q51 505 260 385Q464 266 471 259Q473 257 473 250Q473 242 469 239Q459 231 260 115Q51 -5 43 -5Q39 -5 35 -1T28 7L26 11V489ZM412 250L67 450Q66 450 66 250T67 50Q69 51 240 150T412 250\",9660:\"84 556Q84 567 99 576H622Q637 567 637 556Q637 551 572 409T441 127T375 -14Q368 -19 360 -19H358Q349 -19 342 -7T296 92Q249 193 211 275Q84 550 84 556\",9661:\"59 480Q59 485 61 489T66 495T72 498L75 500H814Q828 493 828 480V474L644 132Q458 -210 455 -212Q451 -215 444 -215T433 -212Q429 -210 342 -49T164 282T64 466Q59 478 59 480ZM775 460H113Q113 459 278 153T444 -153T610 153T775 460\",9662:\"84 556Q84 567 99 576H622Q637 567 637 556Q637 551 572 409T441 127T375 -14Q368 -19 360 -19H358Q349 -19 342 -7T296 92Q249 193 211 275Q84 550 84 556\",9663:\"59 480Q59 485 61 489T66 495T72 498L75 500H814Q828 493 828 480V474L644 132Q458 -210 455 -212Q451 -215 444 -215T433 -212Q429 -210 342 -49T164 282T64 466Q59 478 59 480ZM775 460H113Q113 459 278 153T444 -153T610 153T775 460\",9664:\"694 -26Q686 -40 676 -41H670L382 95Q92 232 90 234Q83 239 83 249Q83 262 96 267Q101 270 379 401T665 537Q671 539 674 539Q686 539 694 524V-26\",9666:\"694 -26Q686 -40 676 -41H670L382 95Q92 232 90 234Q83 239 83 249Q83 262 96 267Q101 270 379 401T665 537Q671 539 674 539Q686 539 694 524V-26\",9667:\"473 10Q466 -5 454 -5Q451 -5 445 -3Q444 -3 343 56T140 173T35 234Q26 239 26 250T35 266Q40 269 240 384T445 503Q451 505 453 505Q466 505 473 490V10ZM433 50T433 250T432 450T259 351T87 250T258 150T432 50Q433 50 433 250\",9674:\"318 709Q325 716 332 716Q340 716 344 713T474 511Q611 298 611 292Q611 285 526 152Q494 103 474 72Q347 -128 344 -130Q340 -132 333 -132T322 -130Q319 -128 257 -31T131 169T60 278Q56 285 56 292Q56 298 60 305Q73 326 194 516T318 709ZM567 290T567 291T451 475T333 658L100 293Q100 288 215 108L333 -74Q334 -74 450 108\",9711:\"56 250Q56 353 95 442T196 589T335 681T491 715Q573 715 635 693Q694 673 747 635T846 543T917 412T944 250Q944 58 815 -78T500 -215Q457 -215 429 -210Q274 -183 165 -56T56 250ZM500 -176Q664 -176 784 -54T904 250Q904 418 799 536T543 674Q534 675 493 675Q425 675 357 647T229 567T133 432T96 250Q96 160 129 80T217 -56T346 -144T500 -176\",9723:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM682 40V649H95V40H682\",9724:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71\",9733:\"367 395Q374 416 398 492T442 627T463 688Q463 692 467 692Q471 694 472 694Q478 694 484 680T523 562Q553 469 576 400L577 395H731H819Q872 395 883 394T895 384Q895 380 891 376T832 333Q794 305 767 285Q643 195 643 194L690 47Q737 -96 737 -103Q737 -111 727 -111Q721 -111 594 -18L472 71L350 -18Q223 -111 217 -111Q207 -111 207 -103Q207 -96 254 47L301 194Q301 195 241 239T118 328T51 378Q49 382 49 384Q49 392 58 393T110 395H213H367\",9824:\"181 -21Q134 -21 96 27T55 193Q55 224 58 247T82 317T143 410Q172 443 234 498Q282 543 314 598T360 687T380 725Q386 727 389 727Q395 727 398 725T406 716T413 702T423 677T439 641Q481 556 544 498Q633 420 678 353T723 204Q723 142 711 94T669 12T590 -21Q520 -21 490 8T459 66V70H409V62Q409 22 416 -17T430 -82T437 -112Q437 -131 407 -131Q403 -131 397 -131T389 -130T382 -130T372 -131Q341 -131 341 -111Q341 -107 348 -82T362 -18T369 62V70H319V66Q319 57 314 44T297 16T257 -10T191 -21H181\",9825:\"55 490Q55 557 71 604T114 674T167 706T222 716Q279 716 322 684T389 605Q391 610 395 617T414 643T447 677T494 704T555 716Q642 716 682 652T723 490Q723 455 718 426T684 342T602 227Q573 196 537 161T485 110T449 63T412 -8Q408 -22 404 -27T389 -33Q382 -33 379 -31T372 -23T366 -8T355 18T335 54Q319 81 298 104T239 163T176 227Q102 310 79 371T55 490ZM198 674Q143 664 119 613T95 491Q95 415 137 346Q174 282 265 194T384 48L389 39Q391 42 397 54T406 71T415 86T427 104T442 122T464 146T491 172Q571 249 613 303Q683 396 683 487Q683 581 649 631Q613 676 556 676Q495 676 457 634T410 538Q407 514 390 514Q386 514 380 517Q372 520 369 536T355 581T319 635Q277 675 223 675H217H208L204 674Q200 674 198 674\",9826:\"370 714Q370 717 375 722T388 727Q398 727 403 721T417 697Q420 692 421 689Q536 465 709 304Q723 291 723 282T709 260Q529 93 406 -153Q402 -162 390 -162H389Q379 -162 376 -158T357 -125Q247 89 89 241L64 265Q55 272 55 282Q55 287 57 290T64 300T77 312T98 331T127 361Q197 435 258 523T344 663L370 714ZM655 299Q568 384 508 470T389 662L376 638Q362 613 341 577T289 497T215 399T123 299L105 282L123 265Q210 180 270 94T389 -98L402 -74Q416 -49 437 -13T489 67T563 165T655 265L673 282L655 299\",9827:\"213 532Q213 615 265 670T389 726Q461 726 513 671T565 532Q565 511 562 492T553 458T541 432T526 409T512 393T498 379L490 371L511 326Q512 326 516 330T528 341T546 353T572 363T606 368Q664 368 707 315T750 174Q750 87 699 33T579 -22Q567 -22 553 -20T517 -10T479 16T459 63V70H409V62Q409 22 416 -17T430 -82T437 -112Q437 -131 407 -131Q403 -131 397 -131T389 -130T382 -130T372 -131Q341 -131 341 -111Q341 -107 348 -82T362 -18T369 62V70H319V63Q315 25 281 2T197 -22Q132 -22 80 32T28 174Q28 255 69 311T175 368Q192 368 207 364T232 353T250 341T262 331T267 326L288 371L280 378Q272 385 267 391T253 407T238 430T226 457T217 492T213 532\",9837:\"200 467Q254 467 293 428T332 321Q332 147 104 -11L88 -22H75Q62 -22 56 -16L55 362V647Q55 743 60 748Q63 750 76 750H83Q87 750 95 744V434L104 440Q144 467 200 467ZM237 322Q237 360 225 388T183 417Q158 417 134 407T101 378Q96 370 96 349T95 197V34Q152 91 194 167T237 322\",9838:\"65 721Q78 734 94 734Q100 734 104 727V444L116 449Q129 454 157 465T208 486Q313 527 314 527Q318 527 324 521V-210Q306 -223 294 -223Q289 -223 284 -216V-13L270 -18Q257 -24 231 -34T180 -54Q77 -96 74 -96T65 -90V721ZM104 13Q282 84 283 85Q284 85 284 252Q284 418 283 418L230 396L140 360L104 346V13\",9839:\"101 -223Q94 -223 93 -217T91 -188V-151Q91 -88 90 -88Q87 -88 80 -92T68 -96Q62 -96 56 -90L55 -50V-22Q55 -8 58 -4T78 5L91 10V177Q91 343 90 343Q87 343 80 339T68 335Q62 335 56 341L55 381V409Q55 423 58 427T78 436L91 441V543V616Q91 643 93 648T106 656Q119 662 126 659Q130 657 130 645T131 554V456L257 503V607L258 710L260 712Q261 715 272 719T286 723Q293 723 295 715T297 671V617Q297 519 298 519Q301 519 307 522T319 526Q327 526 333 521V437L330 435Q328 432 312 427L297 421V254Q297 88 298 88Q301 88 307 91T319 95Q327 95 333 90V6L330 4Q328 1 312 -4L297 -10V-78V-122Q297 -145 295 -149T282 -156Q274 -160 268 -160Q257 -160 257 -130V-89V-25L131 -72V-210Q123 -215 116 -218T104 -222L101 -223ZM257 72V406L131 359V25L257 72\",10003:\"84 231Q84 244 114 264T170 285Q176 285 183 274T224 205Q267 129 268 129Q271 141 279 163T318 250T389 378T502 523T662 673Q702 706 732 706H734Q749 706 749 695Q749 682 730 666T660 607T559 505Q387 299 328 29Q324 0 295 -17T245 -34H241Q234 -34 225 -21T185 46Q166 79 154 101Q84 223 84 231\",10016:\"195 702T195 706T201 716H632Q638 710 638 706T636 700T621 690Q436 581 427 374V357H430Q554 357 645 421Q682 447 711 483T755 542T770 567Q775 572 786 563V131Q777 125 774 125T762 139Q709 228 642 274T482 333Q452 337 430 337H427V320Q430 279 437 247T462 170T521 82T621 4Q630 -2 633 -4T637 -7T638 -12Q638 -16 632 -22H201Q195 -16 195 -12T197 -6T212 4Q397 113 406 320V337H403Q279 337 188 273Q151 247 122 211T78 152T63 127Q58 122 48 131V563Q54 569 59 569Q62 569 71 555Q124 466 191 420T351 361Q381 357 403 357H406V374Q403 415 396 447T371 525T312 613T212 690Q199 697 197 699\",10072:\"139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139\",10216:\"333 -232Q332 -239 327 -244T313 -250Q303 -250 296 -240Q293 -233 202 6T110 250T201 494T296 740Q299 745 306 749L309 750Q312 750 313 750Q331 750 333 732Q333 727 243 489Q152 252 152 250T243 11Q333 -227 333 -232\",10217:\"55 732Q56 739 61 744T75 750Q85 750 92 740Q95 733 186 494T278 250T187 6T92 -240Q85 -250 75 -250Q67 -250 62 -245T55 -232Q55 -227 145 11Q236 248 236 250T145 489Q55 727 55 732\",10222:\"357 741V726Q357 720 349 715Q261 655 242 539Q240 526 240 394V331Q240 259 239 250Q240 242 240 119V49Q240 -42 254 -85Q263 -111 275 -134T301 -172T326 -197T346 -213T356 -221T357 -232V-241L354 -244H334Q264 -209 222 -146T174 -12Q173 -6 173 95Q173 134 173 191T174 250Q173 260 173 376V460Q173 515 178 545T201 611Q244 695 327 741L334 744H354L357 741\",10223:\"78 744Q153 706 196 640T239 492V376Q239 339 239 311T238 269T238 252Q240 236 240 124V40Q240 -18 233 -53T202 -130Q156 -206 79 -244H70H65Q58 -244 57 -242T56 -231T57 -220T64 -215Q153 -154 170 -39Q173 -18 174 119V247Q173 249 173 382V451Q173 542 159 585Q145 626 120 658T75 706T56 723V731Q56 741 57 742T66 744H78\",10229:\"165 270H1510Q1525 262 1525 250T1510 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270\",10230:\"84 237T84 250T98 270H1444Q1328 357 1301 493Q1301 494 1301 496T1300 499Q1300 511 1317 511H1320Q1329 511 1332 510T1338 506T1341 497T1344 481T1352 456Q1374 389 1425 336T1544 261Q1553 258 1553 250Q1553 244 1548 241T1524 231T1486 212Q1445 186 1415 152T1370 85T1349 35T1341 4Q1339 -6 1336 -8T1320 -11Q1300 -11 1300 0Q1300 7 1305 25Q1337 151 1444 230H98Q84 237 84 250\",10231:\"165 270H1694Q1578 357 1551 493Q1551 494 1551 496T1550 499Q1550 511 1567 511H1570Q1579 511 1582 510T1588 506T1591 497T1594 481T1602 456Q1624 389 1675 336T1794 261Q1803 258 1803 250Q1803 244 1798 241T1774 231T1736 212Q1695 186 1665 152T1620 85T1599 35T1591 4Q1589 -6 1586 -8T1570 -11Q1550 -11 1550 0Q1550 7 1555 25Q1587 151 1694 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270\",10232:\"274 173H1539Q1540 172 1542 171T1545 169T1547 167T1550 164T1551 162T1552 158T1553 153Q1553 140 1538 133H318L328 123Q379 69 414 0Q419 -13 419 -17Q419 -24 399 -24Q388 -24 385 -23T377 -12Q332 77 253 144T72 237Q62 240 59 242T56 250T59 257T70 262T89 268T119 278T160 296Q303 366 377 512Q382 522 385 523T401 525Q419 524 419 515Q419 510 414 500Q379 431 328 377L318 367H1538Q1553 359 1553 347Q1553 336 1539 328L1221 327H903L900 328L602 327H274L264 319Q225 289 147 250Q148 249 165 241T210 217T264 181L274 173\",10233:\"1218 514Q1218 525 1234 525Q1239 525 1242 525T1247 525T1251 524T1253 523T1255 520T1257 517T1260 512Q1297 438 1358 381T1469 300T1565 263Q1582 258 1582 250T1573 239T1536 228T1478 204Q1334 134 1260 -12Q1256 -21 1253 -22T1238 -24Q1218 -24 1218 -17Q1218 -13 1223 0Q1258 69 1309 123L1319 133H70Q56 140 56 153Q56 168 72 173H1363L1373 181Q1412 211 1490 250Q1489 251 1472 259T1427 283T1373 319L1363 327H710L707 328L390 327H72Q56 332 56 347Q56 360 70 367H1319L1309 377Q1276 412 1247 458T1218 514\",10234:\"1438 514Q1438 525 1454 525Q1459 525 1462 525T1467 525T1471 524T1473 523T1475 520T1477 517T1480 512Q1517 438 1578 381T1689 300T1785 263Q1802 258 1802 250T1793 239T1756 228T1698 204Q1554 134 1480 -12Q1476 -21 1473 -22T1458 -24Q1438 -24 1438 -17Q1438 -13 1443 0Q1478 69 1529 123L1539 133H318L328 123Q379 69 414 0Q419 -13 419 -17Q419 -24 399 -24Q388 -24 385 -23T377 -12Q332 77 253 144T72 237Q62 240 59 242T56 250T59 257T70 262T89 268T119 278T160 296Q303 366 377 512Q382 522 385 523T401 525Q419 524 419 515Q419 510 414 500Q379 431 328 377L318 367H1539L1529 377Q1496 412 1467 458T1438 514ZM274 173H1583L1593 181Q1632 211 1710 250Q1709 251 1692 259T1647 283T1593 319L1583 327H930L927 328L602 327H274L264 319Q225 289 147 250Q148 249 165 241T210 217T264 181L274 173\",10236:\"95 155V109Q95 83 92 73T75 63Q61 63 58 74T54 130Q54 140 54 180T55 250Q55 421 57 425Q61 437 75 437Q88 437 91 428T95 393V345V270H1444Q1328 357 1301 493Q1301 494 1301 496T1300 499Q1300 511 1317 511H1320Q1329 511 1332 510T1338 506T1341 497T1344 481T1352 456Q1374 389 1425 336T1544 261Q1553 258 1553 250Q1553 244 1548 241T1524 231T1486 212Q1445 186 1415 152T1370 85T1349 35T1341 4Q1339 -6 1336 -8T1320 -11Q1300 -11 1300 0Q1300 7 1305 25Q1337 151 1444 230H95V155\",10731:\"318 709Q325 716 332 716Q340 716 344 713T474 511Q611 298 611 292Q611 285 526 152Q494 103 474 72Q347 -128 344 -130Q340 -132 333 -132T322 -130Q319 -128 257 -31T131 169T60 278Q56 285 56 292Q56 298 60 305Q73 326 194 516T318 709\",10744:\"166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183Q157 -157 378 274T602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 691 406 241T170 -212Q166 -215 159 -215\",10752:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM555 -165Q672 -165 767 -108T916 44T970 250Q970 418 861 532T600 664Q591 665 548 665Q446 665 353 614T200 466T140 250V243Q140 88 248 -30Q262 -46 280 -62T338 -105T434 -148T555 -165ZM478 250Q478 288 503 307T551 326Q586 326 609 305T632 250Q632 217 610 196T555 174T500 196T478 250\",10753:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM513 478Q513 664 512 664Q504 664 481 660T406 637T313 588Q281 564 255 537T211 483T181 431T161 382T150 342T144 310T141 292H513V478ZM798 588Q758 616 711 634T639 658T602 663L597 664V292H969Q969 293 967 309T960 341T949 381T930 430T900 482T856 537T798 588ZM513 -164V208H141Q142 205 144 189T149 160T158 125T173 83T196 39T229 -9Q249 -34 273 -55T318 -92T363 -119T405 -138T444 -150T475 -158T499 -162T513 -164ZM775 -103Q801 -87 823 -68T863 -30T894 10T919 49T937 88T950 123T959 154T964 180T968 198L969 208H597V-164Q599 -163 616 -161T647 -155T683 -145T728 -128T775 -103\",10754:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM600 664Q591 665 548 665Q414 665 306 583L292 573L423 441L555 310L687 441L818 573L804 583Q714 650 600 664ZM364 118L495 250L364 382L232 513L223 500Q140 391 140 250Q140 107 223 0L232 -13L364 118ZM970 250Q970 389 887 501L878 512Q878 513 861 496T812 447T746 381L615 250L746 118L878 -13L887 0Q970 109 970 250ZM687 59L555 190L423 59L292 -73L306 -83Q416 -166 555 -166T804 -83L818 -73L687 59\",10756:\"96 750Q103 750 109 748T120 744T127 737T133 730T137 723T139 718V395L140 73L142 60Q159 -43 237 -104T416 -166Q521 -166 597 -103T690 60L692 73L694 718Q708 749 735 749Q765 749 775 720Q777 714 777 398Q777 78 776 71Q766 -51 680 -140Q571 -249 416 -249H411Q261 -249 152 -140Q66 -51 56 71Q55 78 55 398Q55 714 57 720Q60 734 70 740Q80 750 96 750ZM223 276Q223 282 224 287T227 296T232 302T238 308T243 313T250 316L254 319H374V376V406Q374 438 382 454T418 470Q443 467 450 453T458 410V376V319H579Q580 319 583 317T589 313T594 308T600 302T604 295T608 287T609 276Q609 253 587 241Q577 235 513 235H458V178Q458 176 458 166T459 148Q459 84 415 84Q401 84 390 93T375 117Q374 120 374 178V235H319Q317 235 307 235T290 234Q223 234 223 276\",10758:\"777 -217Q766 -244 745 -249H88Q64 -242 57 -220Q55 -214 55 250T57 720Q60 734 70 740Q80 750 96 750Q127 750 137 720Q139 714 139 274V-166H693V274Q693 714 695 720Q705 749 735 749Q766 749 775 719Q777 713 777 248V-217\",10799:\"630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29\",10815:\"28 660Q28 676 31 679T46 683H50Q87 681 182 681Q217 681 247 681T294 682T315 682Q321 682 323 682T328 679T331 673T332 660Q332 643 328 640T304 637Q239 637 231 626Q229 620 229 334V46H520V334Q520 620 518 626Q510 637 445 637Q426 637 422 640T417 660Q417 675 420 678T432 682H435Q437 682 467 682T569 681T671 681T703 682Q714 682 717 679T721 660Q721 643 717 640T693 637Q628 637 620 626Q619 623 619 342Q619 60 620 57Q628 46 693 46Q714 46 717 43T721 23Q721 5 715 1Q713 0 374 0Q36 0 34 1Q28 5 28 23Q28 40 31 43T56 46Q121 46 129 57Q131 63 131 342Q131 620 129 626Q121 637 56 637Q35 637 32 640T28 660\",10846:\"55 795Q56 806 70 813H540Q554 806 555 795Q555 791 554 788T552 783T549 779T546 777T542 775T539 773H71Q70 773 68 774T65 776T61 779T58 783T56 788T55 795ZM55 601Q56 612 70 619H540Q554 612 555 601Q555 597 554 594T552 589T549 585T546 583T542 581T539 579H71Q70 579 68 580T65 582T61 585T58 589T56 594T55 601ZM75 -97Q67 -97 61 -91T55 -81Q55 -71 169 166T285 410Q295 425 305 425Q311 425 316 422T323 414L325 410Q327 404 441 167T555 -81Q555 -85 549 -91T535 -97T520 -90Q519 -89 506 -61T463 27T411 136L305 358L199 136Q167 71 129 -10Q98 -75 92 -86T75 -97\",10877:\"674 636Q682 636 688 630T694 615T687 601Q686 600 417 472L151 346L399 228Q687 92 691 87Q694 81 694 76Q694 58 676 56H670L382 192Q92 329 90 331Q83 336 83 348Q84 359 96 365Q104 369 382 500T665 634Q669 636 674 636ZM94 170Q102 172 104 172Q110 171 254 103T535 -30T678 -98Q694 -106 694 -118Q694 -136 676 -138H670L382 -2Q92 135 90 137Q83 142 83 154Q84 164 94 170\",10878:\"83 616Q83 624 89 630T99 636Q107 636 253 568T543 431T687 361Q694 356 694 346T687 331Q685 329 395 192L107 56H101Q83 58 83 76Q83 77 83 79Q82 86 98 95Q117 105 248 167Q326 204 378 228L626 346L360 472Q291 505 200 548Q112 589 98 597T83 616ZM674 172Q692 172 694 154Q694 142 687 137Q685 135 395 -2L107 -138H101Q83 -136 83 -118Q83 -106 96 -100Q100 -98 380 35T665 170T674 172\",10885:\"667 761Q669 762 673 762Q682 762 688 756T694 741Q694 731 687 727Q684 724 420 613L156 502L416 392Q476 367 544 338T647 295T682 280Q694 274 694 262Q694 244 676 242Q670 242 524 303T235 425T90 487Q83 493 83 501Q83 514 94 519Q97 520 378 639T667 761ZM55 -23Q55 43 103 90T223 138Q265 138 316 114Q342 100 393 68L443 36Q502 0 554 0Q609 0 650 32T694 109Q694 138 708 138Q710 138 713 136T719 127T722 108Q722 37 673 -9T557 -56Q514 -56 468 -35T387 13T308 60T223 82Q167 82 127 50T83 -27Q81 -56 69 -56Q55 -56 55 -23ZM55 -257Q55 -191 103 -144T223 -96Q265 -96 316 -120Q342 -134 393 -166L443 -198Q502 -234 554 -234Q609 -234 650 -202T694 -125Q694 -96 708 -96Q710 -96 713 -98T719 -107T722 -126Q722 -197 673 -243T557 -290Q514 -290 468 -269T387 -221T308 -174T223 -152Q167 -152 127 -184T83 -261Q80 -290 69 -290Q55 -290 55 -257\",10886:\"90 727Q83 734 83 743Q83 751 89 756T104 762Q111 760 396 641Q686 518 687 517Q694 512 694 502T687 487Q686 486 543 425T253 303T101 242Q83 244 83 262Q83 274 95 280Q96 280 130 294T232 338T361 392L621 502L357 613Q93 724 90 727ZM55 -23Q55 43 103 90T223 138Q265 138 316 114Q342 100 393 68L443 36Q502 0 554 0Q609 0 650 32T694 109Q694 138 708 138Q710 138 713 136T719 127T722 108Q722 37 673 -9T557 -56Q514 -56 468 -35T387 13T308 60T223 82Q167 82 127 50T83 -27Q81 -56 69 -56Q55 -56 55 -23ZM55 -257Q55 -191 103 -144T223 -96Q265 -96 316 -120Q342 -134 393 -166L443 -198Q502 -234 554 -234Q609 -234 650 -202T694 -125Q694 -96 708 -96Q710 -96 713 -98T719 -107T722 -126Q722 -197 673 -243T557 -290Q514 -290 468 -269T387 -221T308 -174T223 -152Q167 -152 127 -184T83 -261Q80 -290 69 -290Q55 -290 55 -257\",10887:\"380 497Q445 528 522 564T636 618T673 635Q680 635 686 628T693 615T689 603Q686 599 418 472L151 343L418 215Q686 88 689 83Q693 79 693 72T687 59T675 52Q669 52 381 189T86 332Q82 337 82 344Q82 350 86 355Q91 359 380 497ZM82 -130T82 -124T95 -103H380L431 -54Q476 -6 486 -6Q491 -6 498 -12T505 -27Q505 -28 505 -29T504 -32Q503 -33 498 -38T485 -53T469 -70L438 -103H680Q682 -106 686 -110T691 -116T693 -123Q693 -130 680 -143H398L346 -192Q300 -241 291 -241Q271 -241 271 -221Q271 -209 306 -179L340 -143H95Q82 -130 82 -124\",10888:\"82 614Q82 620 86 625T94 632T100 635Q106 635 394 498T689 355Q693 349 693 343Q693 338 689 332Q683 327 395 190T100 52Q95 52 89 58T82 72Q82 80 95 88Q114 99 358 215L624 343L358 472Q89 599 86 603Q82 607 82 614ZM82 -130T82 -124T95 -103H380L431 -54Q476 -6 486 -6Q491 -6 498 -12T505 -27Q505 -28 505 -29T504 -32Q503 -33 498 -38T485 -53T469 -70L438 -103H680Q682 -106 686 -110T691 -116T693 -123Q693 -130 680 -143H398L346 -192Q300 -241 291 -241Q271 -241 271 -221Q271 -209 306 -179L340 -143H95Q82 -130 82 -124\",10889:\"86 512Q93 518 381 639T673 761Q680 761 686 755T693 741Q693 733 688 730Q685 723 419 612L155 501L419 390Q685 277 688 272Q693 269 693 261Q693 254 687 248T675 241Q669 241 381 362T86 490Q74 500 86 512ZM70 -59Q57 -59 57 -24Q57 40 104 87Q116 102 146 118Q186 136 231 136Q232 136 242 135T258 133T276 128T302 118T334 101T377 74Q386 69 396 63T411 53T417 50Q435 87 453 134Q491 223 495 227Q498 230 505 230Q513 230 519 225T526 212Q526 203 491 118T453 30Q453 22 489 10T553 -3Q589 -3 622 14Q653 28 669 50T688 90T694 122T706 136Q718 136 718 114Q718 113 718 109T717 103Q717 31 668 -14T554 -60Q529 -60 499 -50T451 -32T433 -24Q431 -24 404 -90T375 -157Q375 -159 402 -178T473 -218T553 -239Q599 -239 641 -211T691 -130Q694 -99 706 -99T718 -122Q718 -123 718 -127T717 -133Q717 -204 668 -249T559 -295Q512 -295 470 -275T355 -206L322 -290Q313 -310 304 -332T289 -367T282 -382Q277 -387 270 -387Q262 -387 255 -382T248 -368Q248 -361 322 -186Q311 -177 280 -166T222 -155Q189 -155 153 -173Q122 -186 106 -208T87 -248T82 -280T71 -294Q57 -294 57 -259Q57 -195 104 -148Q122 -126 155 -113T220 -99Q245 -99 276 -109T324 -127T342 -135Q397 -2 397 1Q386 10 367 23T302 58T222 80Q175 80 132 52T84 -28Q82 -59 70 -59\",10890:\"86 730Q81 734 81 740Q81 747 88 754T99 761Q103 761 392 640T688 512Q693 509 693 501T688 490Q682 484 394 363T99 241Q94 241 88 248T82 261Q82 268 86 272Q89 277 355 390L619 501L355 612Q89 723 86 730ZM70 -59Q57 -59 57 -24Q57 40 104 87Q116 102 146 118Q186 136 231 136Q232 136 242 135T258 133T276 128T302 118T334 101T377 74Q386 69 396 63T411 53T417 50Q435 87 453 134Q491 223 495 227Q498 230 505 230Q513 230 519 225T526 212Q526 203 491 118T453 30Q453 22 489 10T553 -3Q589 -3 622 14Q653 28 669 50T688 90T694 122T706 136Q718 136 718 114Q718 113 718 109T717 103Q717 31 668 -14T554 -60Q529 -60 499 -50T451 -32T433 -24Q431 -24 404 -90T375 -157Q375 -159 402 -178T473 -218T553 -239Q599 -239 641 -211T691 -130Q694 -99 706 -99T718 -122Q718 -123 718 -127T717 -133Q717 -204 668 -249T559 -295Q512 -295 470 -275T355 -206L322 -290Q313 -310 304 -332T289 -367T282 -382Q277 -387 270 -387Q262 -387 255 -382T248 -368Q248 -361 322 -186Q311 -177 280 -166T222 -155Q189 -155 153 -173Q122 -186 106 -208T87 -248T82 -280T71 -294Q57 -294 57 -259Q57 -195 104 -148Q122 -126 155 -113T220 -99Q245 -99 276 -109T324 -127T342 -135Q397 -2 397 1Q386 10 367 23T302 58T222 80Q175 80 132 52T84 -28Q82 -59 70 -59\",10891:\"674 1003Q681 1003 687 999T694 983Q694 973 683 967Q669 959 420 868L162 772L422 676Q683 579 685 577Q694 571 694 560Q694 550 687 546T673 541Q669 542 384 647T93 755Q83 760 83 772Q83 783 91 788Q98 791 383 897T674 1003ZM84 354T84 367T98 387H679Q694 379 694 367Q694 354 679 347H98Q84 354 84 367ZM84 160T84 173T98 193H679Q694 185 694 173Q694 160 679 153H98Q84 160 84 173ZM94 -3Q102 -1 104 -1Q107 -2 392 -107T684 -215Q694 -219 694 -232Q694 -241 687 -247Q686 -248 395 -357Q106 -463 101 -463Q83 -461 83 -443Q83 -431 94 -426Q97 -423 357 -328L615 -232L355 -136Q94 -39 92 -37Q83 -31 83 -21Q83 -9 94 -3\",10892:\"104 541Q98 541 91 545T83 560Q83 571 92 577Q94 579 355 676L615 772L357 868Q108 959 94 967Q83 973 83 983Q83 989 87 996T104 1003Q109 1002 396 896T687 787Q694 781 694 772Q694 759 684 755Q678 752 393 647T104 541ZM84 367Q84 380 98 387H679Q694 379 694 367Q694 356 680 348L390 347H100Q84 352 84 367ZM84 173Q84 188 100 193H680Q694 183 694 173Q694 160 679 153H98Q84 160 84 173ZM674 -1Q682 -1 688 -6T694 -20Q694 -31 685 -37Q683 -39 422 -136L162 -232L420 -328Q680 -423 683 -426Q694 -431 694 -443Q694 -461 676 -463Q671 -463 382 -357Q91 -248 90 -247Q83 -242 83 -232Q83 -220 93 -215Q667 -1 674 -1\",10901:\"674 636Q682 636 688 631T694 616Q694 605 687 601Q685 599 395 462L107 326H101Q83 328 83 345Q83 358 96 365Q102 367 382 500T665 634Q671 636 674 636ZM674 442Q692 442 694 424Q694 412 687 407Q686 406 417 278L151 152L399 34Q687 -102 691 -107Q694 -113 694 -118Q694 -136 676 -138H670L382 -2Q92 135 90 137Q83 142 83 154Q84 165 96 171Q104 175 382 306T665 440Q669 442 674 442\",10902:\"83 616Q83 624 89 630T99 636Q107 636 253 568T543 431T687 361Q694 354 694 346Q694 328 676 326H670L382 462Q317 493 226 535Q119 585 101 595T83 616ZM94 440Q102 442 104 442Q110 441 254 373T535 240T678 172Q679 172 680 171Q694 164 694 153T687 137Q685 135 395 -2L107 -138H101Q83 -136 83 -118Q83 -106 93 -101L128 -84Q163 -68 230 -36T361 26L626 152L360 278Q91 406 90 407Q83 412 83 424Q84 434 94 440\",10927:\"84 346Q84 359 91 363T117 367Q120 367 126 367T137 366Q388 370 512 430T653 609Q657 636 676 636Q685 635 689 629T694 618V612Q689 566 672 528T626 463T569 417T500 383T435 362T373 346Q379 345 404 339T440 330T477 318T533 296Q592 266 630 223T681 145T694 78Q694 57 674 57Q662 57 657 67T652 92T640 135T606 191Q500 320 137 326H114Q104 326 98 327T88 332T84 346ZM84 -131T84 -118T98 -98H679Q694 -106 694 -118T679 -138H98Q84 -131 84 -118\",10928:\"84 614Q84 636 102 636Q115 636 119 626T125 600T137 556T171 501Q277 372 640 366H661Q694 366 694 346T661 326H640Q578 325 526 321T415 307T309 280T222 237T156 172T124 83Q122 66 118 62T103 57Q100 57 98 57T95 58T93 59T90 62T85 67Q83 71 83 80Q88 126 105 164T151 229T208 275T277 309T342 330T404 346Q401 347 380 351T345 360T302 373T245 396Q125 455 92 565Q84 599 84 614ZM84 -131T84 -118T98 -98H679Q694 -106 694 -118T679 -138H98Q84 -131 84 -118\",10933:\"653 734Q653 738 660 745T673 752T686 745T693 723Q672 555 466 485Q390 463 378 463Q373 463 373 461Q373 458 378 458Q390 458 466 436Q562 404 620 350Q682 283 693 198Q693 183 686 176Q681 170 674 170T660 176T653 187Q653 192 652 200T646 228T631 265T602 307T555 350Q435 431 151 441H95Q82 454 82 460T95 481H151Q165 482 197 483T238 485Q427 500 528 554T649 707Q653 729 653 734ZM82 33Q82 37 83 40T89 47T95 54H473L520 105Q569 156 571 156Q573 157 578 157Q586 157 592 151T598 136Q598 130 562 92L526 56L604 54H682Q693 43 693 35Q693 31 692 28T686 21T680 14H489L342 -139L513 -142H682Q693 -148 693 -160Q693 -167 680 -182H304L258 -230Q248 -240 237 -251T221 -268T211 -278T203 -284T197 -286Q189 -286 184 -280T178 -264Q178 -257 213 -219L249 -182H171L93 -179L86 -175Q82 -170 82 -163Q82 -155 95 -142H289L360 -64L433 14H262L93 16Q82 23 82 33\",10934:\"693 466T693 460T680 441H624Q608 439 577 438T538 436Q349 421 248 367T126 214Q122 192 122 187Q122 183 116 177T102 170Q95 170 89 176Q82 183 82 198Q93 283 155 350Q213 404 309 436Q385 458 398 458Q402 458 402 461Q402 463 398 463Q385 463 309 485Q103 555 82 723Q82 738 89 745T102 752T115 745T122 734Q122 721 126 701T155 640T220 572Q340 490 624 481H680Q693 466 693 460ZM82 33Q82 37 83 40T89 47T95 54H473L520 105Q569 156 571 156Q573 157 578 157Q586 157 592 151T598 136Q598 130 562 92L526 56L604 54H682Q693 43 693 35Q693 31 692 28T686 21T680 14H489L342 -139L513 -142H682Q693 -148 693 -160Q693 -167 680 -182H304L258 -230Q248 -240 237 -251T221 -268T211 -278T203 -284T197 -286Q189 -286 184 -280T178 -264Q178 -257 213 -219L249 -182H171L93 -179L86 -175Q82 -170 82 -163Q82 -155 95 -142H289L360 -64L433 14H262L93 16Q82 23 82 33\",10935:\"82 494T82 501T95 521H171Q405 527 511 569Q630 618 651 732Q652 734 653 740T655 748T658 754T663 759T672 761L686 754Q693 747 693 734Q684 668 648 623Q627 591 573 557T442 507L417 501Q428 496 442 494Q520 478 573 444T648 378Q684 333 693 267Q693 254 686 247Q673 234 659 245Q657 247 651 269Q630 383 511 432Q406 474 171 481H95Q82 494 82 501ZM70 -59Q57 -59 57 -26Q57 30 90 73T177 132Q191 136 226 136Q228 136 239 136T253 135T267 132T287 125T311 113T346 95T391 67Q462 20 502 5Q519 1 553 1Q586 1 602 5Q641 18 664 45T691 107Q694 136 704 136Q717 136 717 115V105Q717 39 671 -9T554 -58Q518 -58 481 -43T382 14Q302 63 273 74Q255 78 222 78Q188 78 173 74Q90 46 84 -28Q82 -59 70 -59ZM71 -294Q57 -294 57 -262Q57 -205 90 -162T177 -104Q191 -99 226 -99Q266 -103 277 -106Q310 -119 391 -168Q455 -212 502 -231Q519 -235 553 -235Q586 -235 602 -231Q640 -218 661 -195T686 -151T693 -115T704 -99Q717 -99 717 -121V-131Q717 -198 671 -246T556 -294Q519 -294 482 -279T382 -222Q307 -175 273 -162Q255 -157 222 -157Q188 -157 173 -162Q133 -175 110 -201T84 -264Q82 -294 71 -294\",10936:\"693 501Q693 493 679 481H604Q369 474 264 432Q143 382 124 269Q116 246 115 245Q101 234 88 247Q82 254 82 267Q89 329 126 378Q147 410 201 444T333 494L357 501Q354 502 340 505T318 510T295 516T269 525T243 535T215 548T188 565Q142 599 126 623Q89 672 82 734Q82 761 102 761L115 756Q116 755 124 732Q143 619 264 569Q371 527 604 521H679Q693 507 693 501ZM70 -59Q57 -59 57 -26Q57 30 90 73T177 132Q191 136 226 136Q228 136 239 136T253 135T267 132T287 125T311 113T346 95T391 67Q462 20 502 5Q519 1 553 1Q586 1 602 5Q641 18 664 45T691 107Q694 136 704 136Q717 136 717 115V105Q717 39 671 -9T554 -58Q518 -58 481 -43T382 14Q302 63 273 74Q255 78 222 78Q188 78 173 74Q90 46 84 -28Q82 -59 70 -59ZM71 -294Q57 -294 57 -262Q57 -205 90 -162T177 -104Q191 -99 226 -99Q266 -103 277 -106Q310 -119 391 -168Q455 -212 502 -231Q519 -235 553 -235Q586 -235 602 -231Q640 -218 661 -195T686 -151T693 -115T704 -99Q717 -99 717 -121V-131Q717 -198 671 -246T556 -294Q519 -294 482 -279T382 -222Q307 -175 273 -162Q255 -157 222 -157Q188 -157 173 -162Q133 -175 110 -201T84 -264Q82 -294 71 -294\",10937:\"82 494T82 501T95 521H171Q256 523 317 528T441 548T543 584T613 644T651 732Q652 734 653 740T655 748T658 754T663 759T672 761L686 754Q693 747 693 734Q686 686 664 647T615 586T548 545T482 518T417 501Q419 500 451 493T517 471T590 434T657 367T693 267Q693 241 673 241Q664 241 659 245Q656 249 650 273T635 323T593 380T511 432Q406 474 171 481H95Q82 494 82 501ZM57 -26Q57 39 101 87T219 136Q254 136 277 130Q320 114 382 72Q419 50 424 45Q426 45 459 110Q496 178 497 179Q500 180 504 180Q509 180 517 175T526 161Q526 158 495 90L462 25Q462 21 502 5Q519 1 553 1Q586 1 602 5Q641 18 664 45T691 107Q694 136 706 136T718 115Q718 114 718 111T717 105Q717 39 671 -9T554 -58L459 -33Q450 -29 444 -27T437 -26L371 -155L391 -168Q485 -235 538 -235H553Q586 -235 602 -230Q683 -204 691 -128Q694 -99 706 -99T718 -120Q718 -121 718 -124T717 -130Q717 -199 670 -246T557 -294T393 -228Q353 -205 351 -201Q348 -201 315 -266Q294 -310 285 -323T268 -337Q259 -337 254 -331T248 -317Q248 -305 282 -246L313 -181Q313 -177 273 -161Q255 -157 222 -157Q188 -157 173 -161Q134 -174 113 -198T88 -242T82 -278T71 -294Q57 -294 57 -261Q57 -204 91 -161T179 -104Q195 -99 228 -99Q274 -102 315 -124Q337 -132 337 -130L404 -1L384 12Q319 58 273 74Q255 79 222 79Q188 79 173 74Q133 61 112 37T88 -7T82 -43T70 -59Q57 -59 57 -26\",10938:\"693 501Q693 493 679 481H604Q548 479 509 477T418 469T331 454T257 429T194 392T150 340T124 270Q117 247 115 245Q101 236 88 247Q82 254 82 267Q89 330 126 379Q147 411 202 444T333 494L357 501Q239 531 188 565Q142 599 126 623Q89 672 82 734Q82 761 102 761L115 756Q116 755 124 732Q133 678 166 640T241 579T349 544T470 527T604 521H679Q693 507 693 501ZM57 -26Q57 39 101 87T219 136Q254 136 277 130Q320 114 382 72Q419 50 424 45Q426 45 459 110Q496 178 497 179Q500 180 504 180Q509 180 517 175T526 161Q526 158 495 90L462 25Q462 21 502 5Q519 1 553 1Q586 1 602 5Q641 18 664 45T691 107Q694 136 706 136T718 115Q718 114 718 111T717 105Q717 39 671 -9T554 -58L459 -33Q450 -29 444 -27T437 -26L371 -155L391 -168Q485 -235 538 -235H553Q586 -235 602 -230Q683 -204 691 -128Q694 -99 706 -99T718 -120Q718 -121 718 -124T717 -130Q717 -199 670 -246T557 -294T393 -228Q353 -205 351 -201Q348 -201 315 -266Q294 -310 285 -323T268 -337Q259 -337 254 -331T248 -317Q248 -305 282 -246L313 -181Q313 -177 273 -161Q255 -157 222 -157Q188 -157 173 -161Q134 -174 113 -198T88 -242T82 -278T71 -294Q57 -294 57 -261Q57 -204 91 -161T179 -104Q195 -99 228 -99Q274 -102 315 -124Q337 -132 337 -130L404 -1L384 12Q319 58 273 74Q255 79 222 79Q188 79 173 74Q133 61 112 37T88 -7T82 -43T70 -59Q57 -59 57 -26\",10949:\"84 463Q84 585 166 663T360 752Q361 752 370 752T395 752T430 752T475 753T524 753H679Q694 746 694 733Q694 724 681 714L522 713H470H441Q366 713 338 709T266 685Q244 674 224 659T179 617T139 550T124 463V458Q124 370 185 302Q244 238 328 220Q348 215 366 215T522 213H681Q694 203 694 193Q694 180 679 173H526Q510 173 480 173T434 172Q350 172 289 188T172 258Q84 340 84 463ZM84 -14T84 -1T98 19H679Q694 11 694 -1Q694 -14 679 -21H98Q84 -14 84 -1ZM84 -208T84 -195T98 -175H679Q694 -183 694 -195Q694 -208 679 -215H98Q84 -208 84 -195\",10950:\"83 733Q83 746 98 753H251Q267 753 297 753T343 754Q427 754 488 738T605 668Q693 587 693 463Q693 378 650 312T545 213T415 174Q407 173 251 173H98Q83 180 83 193Q83 203 96 213H255H308H337Q412 213 439 217T512 241Q533 252 553 267T599 309T639 376T654 463Q654 554 592 624Q557 662 512 685Q468 704 439 708T335 713H306H255L96 714Q83 724 83 733ZM84 -14T84 -1T98 19H679Q694 11 694 -1Q694 -14 679 -21H98Q84 -14 84 -1ZM84 -208T84 -195T98 -175H679Q694 -183 694 -195Q694 -208 679 -215H98Q84 -208 84 -195\",10955:\"693 221Q693 214 680 201H524Q398 201 367 202T309 212Q236 230 180 280T98 398Q84 438 84 492T98 585Q126 663 193 716T346 781Q347 781 373 781T440 782T520 783H680Q682 780 686 776T691 770T693 763T680 743H526Q364 743 353 741Q279 730 221 687T138 578Q124 540 124 492T138 405Q163 340 221 297T353 243Q364 241 526 241H680Q682 238 686 234T691 228T693 221ZM82 -48T82 -41T95 -19H462L513 41L569 105Q574 110 582 110T596 104T602 90Q602 87 600 83Q600 77 555 30L515 -17L600 -19H682Q693 -30 693 -38T680 -59H480L415 -137L349 -213L515 -215H682Q693 -226 693 -233T680 -255H313L260 -317Q224 -360 212 -372T192 -385Q184 -385 179 -377T173 -362Q174 -361 218 -306L260 -255H178L93 -253L86 -248Q82 -243 82 -235Q82 -226 93 -215H195L295 -213L362 -137L426 -59H260L93 -57L86 -53Q82 -48 82 -41\",10956:\"82 759T82 763T83 769T89 776T95 783H251Q378 783 409 782T469 772Q540 753 596 703T678 585Q691 546 691 492T678 398Q649 320 581 267T426 203Q415 201 251 201H95Q82 214 82 221Q82 225 83 227T89 234T95 241H249Q411 241 422 243Q496 253 554 296T638 405Q651 444 651 492Q651 539 638 578Q613 643 555 686T422 741Q411 743 249 743H95Q82 759 82 763ZM82 -48T82 -41T95 -19H462L513 41L569 105Q574 110 582 110T596 104T602 90Q602 87 600 83Q600 77 555 30L515 -17L600 -19H682Q693 -30 693 -38T680 -59H480L415 -137L349 -213L515 -215H682Q693 -226 693 -233T680 -255H313L260 -317Q224 -360 212 -372T192 -385Q184 -385 179 -377T173 -362Q174 -361 218 -306L260 -255H178L93 -253L86 -248Q82 -243 82 -235Q82 -226 93 -215H195L295 -213L362 -137L426 -59H260L93 -57L86 -53Q82 -48 82 -41\",12296:\"333 -232Q332 -239 327 -244T313 -250Q303 -250 296 -240Q293 -233 202 6T110 250T201 494T296 740Q299 745 306 749L309 750Q312 750 313 750Q331 750 333 732Q333 727 243 489Q152 252 152 250T243 11Q333 -227 333 -232\",12297:\"55 732Q56 739 61 744T75 750Q85 750 92 740Q95 733 186 494T278 250T187 6T92 -240Q85 -250 75 -250Q67 -250 62 -245T55 -232Q55 -227 145 11Q236 248 236 250T145 489Q55 727 55 732\",57350:\"91 417Q104 430 111 430T131 417V301L171 341Q201 373 207 378T220 384Q227 384 233 377T240 366Q240 357 187 299L131 244V-10Q116 -23 111 -23T91 -10V201L49 157Q20 127 14 121T0 115Q-8 115 -14 121T-20 132Q-20 139 17 178Q29 191 36 199L91 257V417\",57351:\"56 417Q68 431 76 431L89 426L96 419V317L98 215L193 273L291 330V375L293 419Q301 431 311 431Q331 431 331 388L333 355L356 370Q381 384 388 384Q394 384 400 377T407 363Q407 354 367 328L331 308V-10Q316 -23 310 -23Q300 -23 293 -12L291 135V284L98 168L96 77V-12Q84 -24 76 -24L62 -19L58 -12L56 66V144L31 128Q5 114 -2 114Q-8 114 -14 121T-20 136Q-20 142 -14 147T20 170L56 190V417\",57352:\"477 261Q477 257 473 256T455 253T417 251T348 250H235L155 -77L146 -82Q137 -85 109 -85Q55 -85 55 -77L139 261Q224 596 226 598Q229 603 239 603Q240 603 254 603T290 603T341 604T405 605T477 605Q656 603 687 602T719 596Q719 589 692 588T513 585H319L282 427L242 272Q242 270 351 270Q388 270 410 270T444 269T460 267T469 265T477 261\",57353:\"228 325Q170 322 156 316T127 309Q108 309 104 314Q99 319 99 322T108 341Q125 376 171 400T268 425H271Q302 425 319 396Q328 377 328 358Q328 332 324 314Q311 270 286 221Q274 194 274 192H275Q339 234 484 325T639 421Q669 434 691 434T723 425T734 406Q734 394 719 381Q715 376 644 330L575 287L566 267Q543 233 526 176Q520 160 515 143T508 115T506 105Q506 103 533 103Q585 103 607 110T641 118Q670 118 670 107Q670 100 661 85Q643 50 598 27T504 3Q465 3 450 36Q441 51 441 73Q441 84 444 96Q452 146 484 205L497 236L324 125Q143 12 135 10Q103 -6 77 -6Q61 -6 49 2T37 21Q37 36 49 46T124 96L195 141L204 156Q219 179 243 248T264 323Q264 325 228 325\",57356:\"86 472Q93 477 381 614T673 752Q680 752 686 746T693 732T689 721Q686 715 418 590L151 461L418 332Q684 207 689 201Q693 195 693 190Q693 183 687 177T675 170Q668 170 380 307T86 450Q82 454 82 461Q82 467 86 472ZM369 101V126Q369 156 382 156H384Q385 157 386 157Q409 157 409 115V98V54H680Q693 39 693 34T680 14H409V-142H680Q693 -155 693 -162Q693 -167 680 -182H409V-273Q396 -284 388 -284Q382 -284 369 -275V-182H95Q82 -167 82 -162Q82 -155 95 -142H369V14H95Q93 17 89 21T84 27T82 34T83 40T89 47T95 54H369V101\",57357:\"89 745Q95 752 100 752Q106 752 394 615T689 472Q693 468 693 461T689 450Q684 445 396 308T100 170Q95 170 89 176T82 190Q82 195 86 201Q91 208 358 332L624 461L358 590Q90 715 86 721Q82 725 82 731Q82 739 89 745ZM369 101V126Q369 156 382 156H384Q385 157 386 157Q409 157 409 115V98V54H680Q693 39 693 34T680 14H409V-142H680Q693 -155 693 -162Q693 -167 680 -182H409V-273Q396 -284 388 -284Q382 -284 369 -275V-182H95Q82 -167 82 -162Q82 -155 95 -142H369V14H95Q93 17 89 21T84 27T82 34T83 40T89 47T95 54H369V101\",57358:\"97 172Q82 172 82 190Q82 197 86 201Q94 209 173 246T327 319T402 357Q405 360 434 448T462 539L278 628Q96 713 86 721Q82 725 82 732T88 745T102 752Q103 752 125 742T198 709T293 666Q342 642 385 622T453 590T478 579Q479 579 506 659T562 824T598 915Q602 919 609 919T622 913T629 901Q629 898 571 728Q546 656 531 608T518 559Q555 539 602 519Q664 488 679 479T694 461Q694 457 689 450Q680 443 616 413T494 356T435 326L389 190L342 57L513 55H682Q694 43 694 34Q694 28 689 21L682 17L506 15H329L322 -8Q320 -13 310 -41T295 -85L275 -141H680Q682 -143 684 -146T688 -151T691 -156T693 -162Q693 -172 682 -179L473 -181H262L220 -303Q192 -388 185 -404T166 -421Q160 -421 153 -415T146 -403Q146 -400 179 -302T220 -185Q220 -181 158 -181L93 -179L86 -174Q82 -169 82 -161Q82 -152 93 -141H164L233 -139L260 -63L286 15H189L93 17L86 21Q82 26 82 34Q82 44 93 55H198L300 57L342 179Q350 204 361 238T378 286T382 301L246 237Q111 172 97 172ZM624 461Q621 464 560 492Q512 518 503 518Q500 518 500 517Q499 513 488 479T465 413T453 379L624 461\",57359:\"97 54Q82 54 82 72Q82 79 86 84Q95 91 222 153L351 215L398 324L442 433L258 519Q95 597 87 604Q82 608 82 615T88 628T102 635Q107 635 424 484L458 468L524 630Q593 789 597 795Q601 801 609 801Q616 801 622 795T629 781L562 615L493 450L589 406Q665 371 679 362T694 344Q694 339 693 337T677 326T631 302T538 257Q504 241 465 223T406 195T386 186Q383 185 344 92T306 -3L486 81Q662 168 673 168Q680 168 686 162T693 148T689 137Q688 136 482 35L280 -59L233 -176Q184 -291 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -279 185 -186T224 -90Q225 -88 223 -88Q219 -88 193 -101Q109 -143 98 -143Q82 -138 82 -122Q82 -116 85 -113T108 -98T171 -67L249 -30L289 61Q297 81 307 107T321 144T326 157L218 106Q109 54 97 54ZM553 379Q480 412 480 415Q479 415 460 372T423 285T406 241Q408 240 516 291T624 344L553 379\",57360:\"102 168Q103 168 151 146T247 102T295 81Q299 85 322 144T344 206L218 268Q153 297 123 313T87 333T82 344T86 355Q104 369 291 455Q491 552 491 553L542 673Q581 767 590 784T609 801Q616 801 622 795T629 781Q629 773 586 677Q546 581 546 577L609 606Q669 635 673 635Q680 635 686 629T693 615Q693 610 692 608T670 593T604 561L524 521L400 226L542 157Q617 123 649 107T687 85T694 72Q694 66 690 60T679 54Q665 54 526 119Q394 186 386 186Q385 186 342 88L331 61L509 -23Q680 -105 688 -111Q693 -115 693 -122T688 -135T675 -141H673Q664 -141 491 -59Q320 21 316 21H315L249 -136Q183 -293 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 154 -261T181 -197T213 -119L280 41Q280 46 186 86Q157 101 121 119Q92 133 87 136T82 148Q82 155 88 161T102 168ZM418 370L466 495Q464 495 308 420T151 344T204 317T311 267T364 244Q364 247 418 370\",57361:\"82 34Q82 44 93 55H198L300 57L342 179Q351 207 362 238T378 286T384 303T238 377Q109 435 86 450Q82 454 82 460T86 472Q90 476 302 579L511 679Q512 679 553 795Q569 842 577 866T592 903T600 917T608 919Q615 919 622 912T629 901Q629 899 595 799Q589 777 581 753T569 717T564 703L618 728Q666 752 673 752T686 746T693 732Q693 723 683 717T615 683L546 650L491 488Q464 410 450 368T438 326Q493 297 562 266Q660 219 677 209T694 190Q694 183 690 177T678 171Q664 171 546 228L424 286Q422 286 382 172L342 57L513 55H682Q694 43 694 34Q694 28 689 21L682 17L506 15H329L322 -8Q320 -13 310 -41T295 -85L275 -141H680Q682 -143 684 -146T688 -151T691 -156T693 -162Q693 -172 682 -179L473 -181H262L220 -303Q192 -388 185 -404T166 -421Q160 -421 153 -415T146 -403Q146 -400 179 -302T220 -185Q220 -181 158 -181L93 -179L86 -174Q82 -169 82 -161Q82 -152 93 -141H164L233 -139L260 -63L286 15H189L93 17L86 21Q82 26 82 34ZM495 623Q495 626 493 626T321 544T151 461L398 343Q399 343 405 360T423 415T446 483Q457 513 469 551T488 606T495 623\",57366:\"82 -6Q82 1 95 14H262L295 94Q331 171 331 174Q324 175 312 178T267 194T206 227T146 283T98 368Q84 406 84 461T98 554Q126 632 194 685T349 750Q360 752 480 752H591L604 783Q620 819 624 821Q631 828 640 828Q653 825 658 810Q658 808 646 781L635 754Q635 752 658 752Q680 752 686 746Q693 739 693 732Q693 728 692 726T686 719T680 712H615L506 466Q479 407 451 344T408 248T393 214Q393 210 535 210H680Q693 194 693 190T680 170H373L340 92L304 14H680Q693 1 693 -6Q693 -11 680 -26H286L253 -103L218 -179L451 -181H682Q694 -193 694 -201Q694 -212 682 -219L440 -221H200L178 -270Q160 -309 154 -319T139 -330Q122 -330 118 -312L155 -223Q155 -221 126 -221H95Q82 -206 82 -201T95 -181H175L206 -108Q237 -35 242 -30Q242 -26 169 -26H95Q82 -11 82 -6ZM571 710Q571 712 469 712Q443 712 416 712T371 711T351 710Q279 700 221 656T138 548Q124 508 124 461T138 374Q186 245 351 212L460 459Q571 709 571 710\",57367:\"82 -14T82 -7T95 15H431L529 170H435Q341 170 333 175Q149 218 98 368Q84 406 84 461Q84 515 98 555Q126 633 193 686T346 750Q347 750 373 750T440 751T520 752H680Q693 739 693 732Q693 727 680 712H526Q364 712 353 710Q268 700 207 646T126 512Q123 496 123 461T126 410Q141 350 180 304T280 232Q312 217 344 214T464 210H555L589 261Q613 301 620 311T635 321Q644 321 650 315T657 301Q657 296 651 286T630 252T604 212Q604 210 642 210H680Q693 197 693 190Q693 186 692 184T686 177T680 170H578L526 92L478 17L580 15H682Q693 4 693 -4T680 -25H451L353 -179L518 -181H682Q694 -193 694 -201Q694 -211 682 -219L504 -221H326L293 -272Q257 -332 246 -332Q238 -332 232 -326T225 -313Q225 -310 226 -308Q226 -305 251 -265T278 -223Q278 -221 186 -221H95Q93 -218 89 -214T84 -208T82 -201T95 -181H306L404 -25H249L93 -23L86 -19Q82 -14 82 -7\",57368:\"82 732Q82 739 95 752H251H348Q420 752 460 744T551 708Q566 697 566 701Q618 815 624 821Q631 828 640 828Q653 825 658 810L600 677Q600 671 615 656T653 605T689 517Q692 496 692 461T689 406Q668 325 615 266Q572 221 513 196T391 170H373L340 92L304 14H680Q693 1 693 -6Q693 -11 680 -26H286L253 -103L218 -179L451 -181H682Q694 -193 694 -201Q694 -212 682 -219L440 -221H200L178 -270Q160 -309 154 -319T139 -330Q122 -330 118 -312L155 -223Q155 -221 126 -221H95Q82 -206 82 -201T95 -181H175L206 -108Q237 -35 242 -30Q242 -26 169 -26H95Q82 -11 82 -6Q82 1 95 14H262L295 92L331 170H95Q93 172 91 175T87 180T84 185T82 191Q82 199 93 210H220L349 212L549 659Q507 692 462 702T338 712H249H95Q82 727 82 732ZM652 473Q652 513 636 552T603 611T582 632Q581 632 487 422T393 210Q424 210 460 220T535 253T605 316T649 410Q652 427 652 461V473\",57369:\"82 732Q82 739 95 752H251Q415 752 426 750Q539 736 615 657Q667 599 689 517Q692 496 692 461T689 406Q668 325 615 266Q522 170 382 170H355L326 95Q319 80 311 59T298 28T293 17Q293 15 486 15H680Q693 0 693 -6T680 -25H275L213 -179L449 -181H682Q693 -192 693 -199T680 -221H198L178 -270Q153 -333 139 -333Q132 -333 126 -327T119 -314T135 -266T153 -223Q153 -221 124 -221H95Q82 -207 82 -201T95 -181H171L233 -25H162L93 -23L86 -19Q82 -14 82 -7T95 15H251L313 170H202L93 172L86 177Q82 182 82 190Q82 199 93 210H211L329 212L349 261Q366 301 372 311T386 321Q392 321 399 315T407 302Q407 295 390 254T373 210Q374 209 377 209Q412 209 444 217Q512 231 564 273T638 377Q651 414 651 461Q651 509 638 548Q613 613 555 656T422 710Q411 712 249 712H95Q82 727 82 732\",57370:\"693 -115T693 -122T680 -144H315L269 -199Q221 -255 213 -255H212Q203 -255 197 -248T193 -231Q195 -225 229 -184L262 -144H186L113 -142L106 -137Q102 -130 102 -125Q102 -119 115 -104H298L426 52H386Q342 54 309 63Q236 79 180 129T98 249Q84 289 84 343Q84 398 98 436Q126 514 193 567T346 632Q347 632 373 632T440 633T520 634H680Q682 631 686 627T691 621T693 614T680 594H526Q364 594 353 592Q268 581 207 528T126 394Q123 378 123 343T126 292Q141 231 181 185T280 114Q329 92 415 92H462L506 147Q554 203 562 203H563Q572 203 578 196T582 178Q579 173 546 132L513 94L598 92H682Q693 81 693 73T680 52H480L349 -102L515 -104H682Q693 -115 693 -122\",57371:\"82 610T82 614T83 620T89 627T95 634H251Q378 634 409 633T469 623Q540 604 596 554T678 436Q691 397 691 343T678 249Q653 181 597 131T469 63Q427 52 362 52H315L213 -102L438 -104H662Q673 -115 673 -123Q673 -129 660 -144H186L151 -197Q114 -250 109 -253Q106 -254 104 -254Q100 -254 98 -253Q91 -253 87 -248T82 -235Q82 -230 109 -186L138 -144H115Q82 -144 82 -125Q82 -119 95 -104H166L266 49Q266 52 182 52H95Q82 65 82 72Q82 76 83 78T89 85T95 92H295L329 143Q365 195 369 198Q372 203 380 203Q385 203 391 197T398 185Q398 184 398 184L399 182Q399 175 369 129L344 94Q344 92 376 92Q402 92 422 94Q496 104 554 147T638 256Q651 295 651 343Q651 390 638 429Q613 494 555 537T422 592Q411 594 249 594H95Q82 610 82 614\",119808:\"296 0Q278 3 164 3Q58 3 49 0H40V62H92Q144 62 144 64Q388 682 397 689Q403 698 434 698Q463 698 471 689Q475 686 538 530T663 218L724 64Q724 62 776 62H828V0H817Q796 3 658 3Q509 3 485 0H472V62H517Q561 62 561 63L517 175H262L240 120Q218 65 217 64Q217 62 261 62H306V0H296ZM390 237L492 238L440 365Q390 491 388 491Q287 239 287 237H390\",119809:\"720 510Q720 476 704 448T665 404T619 377T580 362L564 359L583 356Q602 353 632 342T690 312Q712 292 725 276Q752 235 752 189V183Q752 160 741 125Q698 18 547 2Q543 1 288 0H39V62H147V624H39V686H264H409Q502 686 542 681T624 655Q720 607 720 510ZM563 513Q563 553 548 578T518 611T486 622Q479 624 385 624H293V382H375Q458 383 467 385Q563 405 563 513ZM590 192Q590 307 505 329Q504 330 503 330L398 331H293V62H391H400H444Q496 62 528 75T580 131Q590 155 590 192\",119810:\"64 343Q64 502 174 599T468 697Q502 697 533 691T586 674T623 655T647 639T657 632L694 663Q703 670 711 677T723 687T730 692T735 695T740 696T746 697Q759 697 762 692T766 668V627V489V449Q766 428 762 424T742 419H732H720Q699 419 697 436Q690 498 657 545Q611 618 532 632Q522 634 496 634Q356 634 286 553Q232 488 232 343T286 133Q355 52 497 52Q597 52 650 112T704 237Q704 248 709 251T729 254H735Q750 254 755 253T763 248T766 234Q766 136 680 63T469 -11Q285 -11 175 86T64 343\",119811:\"39 624V686H270H310H408Q500 686 545 680T638 649Q768 584 805 438Q817 388 817 338Q817 171 702 75Q628 17 515 2Q504 1 270 0H39V62H147V624H39ZM655 337Q655 370 655 390T650 442T639 494T616 540T580 580T526 607T451 623Q443 624 368 624H298V62H377H387H407Q445 62 472 65T540 83T606 129Q629 156 640 195T653 262T655 337\",119812:\"723 286Q721 284 700 145T677 3V0H39V62H147V618H39V680H660V676Q662 670 675 552T691 428V424H629V428Q629 429 627 448T618 494T601 541Q574 593 527 605T382 618H374H304V384H336Q338 384 347 384T361 384T376 386T392 390T407 397T421 407T432 423Q442 444 443 482V501H505V205H443V224Q442 258 435 278T411 307T380 318T336 322H304V62H375H394Q429 62 449 62T497 66T541 76T577 95T609 126T632 170T651 232Q661 287 661 289H723V286\",119813:\"425 0L228 3Q63 3 51 0H39V62H147V618H39V680H644V676Q647 670 659 552T675 428V424H613Q613 433 605 477Q599 511 589 535T562 574T530 599T488 612T441 617T387 618H368H304V371H333Q389 373 411 390T437 468V488H499V192H437V212Q436 244 430 263T408 292T378 305T333 309H304V62H439V0H425\",119814:\"465 -10Q281 -10 173 88T64 343Q64 413 85 471T143 568T217 631T298 670Q371 697 449 697Q452 697 459 697T470 696Q502 696 531 690T582 675T618 658T644 641T656 632L732 695Q734 697 745 697Q758 697 761 692T765 668V627V489V449Q765 428 761 424T741 419H731H724Q705 419 702 422T695 444Q683 520 631 577T495 635Q364 635 295 563Q261 528 247 477T232 343Q232 296 236 260T256 185T296 120T366 76T472 52Q481 51 498 51Q544 51 573 67T607 108Q608 111 608 164V214H464V276H479Q506 273 680 273Q816 273 834 276H845V214H765V113V51Q765 16 763 8T750 0Q742 2 709 16T658 40L648 46Q592 -10 465 -10\",119815:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H51Q75 683 226 683Q376 683 400 686H412V624H304V388H595V624H487V686H499Q523 683 673 683Q824 683 848 686H860V624H752V62H860V0H848Q824 3 674 3Q523 3 499 0H487V62H595V326H304V62H412V0H400\",119816:\"397 0Q370 3 218 3Q65 3 38 0H25V62H139V624H25V686H38Q65 683 218 683Q370 683 397 686H410V624H296V62H410V0H397\",119817:\"174 114Q174 96 169 82T159 63T144 47L155 45Q183 40 203 40Q271 40 290 104Q294 118 294 150T295 380V624H154V686H169Q196 683 365 683Q499 683 517 686H527V624H446V379Q446 183 446 153T441 108Q413 32 315 2Q266 -11 208 -11Q160 -11 118 -2T42 37T8 114V122Q8 150 30 174T91 198T152 174T174 122V114\",119818:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H51Q75 683 226 683Q376 683 400 686H412V624H304V338L472 483L634 624H565V686H576Q597 683 728 683Q814 683 829 686H836V624H730L614 524Q507 432 497 422Q496 422 498 418T514 395T553 342T627 241L759 63L805 62H852V0H842Q830 3 701 3Q550 3 526 0H513V62H549Q584 62 584 63Q583 65 486 196T388 328L304 256V62H412V0H400\",119819:\"643 285Q641 280 629 148T612 4V0H39V62H147V624H39V686H51Q75 683 228 683Q415 685 425 686H439V624H304V62H352H378Q492 62 539 138Q551 156 558 178T569 214T576 255T581 289H643V285\",119820:\"314 0Q296 3 181 3T48 0H39V62H147V624H39V686H305Q316 679 323 667Q330 653 434 414L546 157L658 414Q766 662 773 674Q778 681 788 686H1052V624H944V62H1052V0H1040Q1016 3 874 3T708 0H696V62H804V341L803 618L786 580Q770 543 735 462T671 315Q540 13 536 9Q528 1 507 1Q485 1 477 9Q472 14 408 162T281 457T217 603Q215 603 215 334V62H323V0H314\",119821:\"314 0Q296 3 181 3T48 0H39V62H147V624H39V686H171H265Q288 686 297 686T309 684T315 679Q317 676 500 455T684 233V624H576V686H585Q603 683 718 683T851 686H860V624H752V319Q752 15 750 11Q747 4 742 2T718 0H712Q708 0 706 0T700 0T696 1T693 2T690 4T687 7T684 11T679 16T674 23Q671 27 437 311L215 579V62H323V0H314\",119822:\"64 339Q64 431 96 502T182 614T295 675T420 696Q469 696 481 695Q620 680 709 589T798 339Q798 173 697 82T432 -10Q262 -10 163 85T64 339ZM625 454Q618 502 600 538T562 593T515 624T469 639T431 642Q331 642 276 563Q232 493 232 353Q232 315 234 285T244 216T267 148T308 94T372 56Q405 46 432 46Q517 46 567 106T627 267Q631 299 631 353Q631 418 625 454\",119823:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H253Q435 686 470 685T536 678Q585 668 621 648T675 605T705 557T718 514T721 483T718 451T704 409T673 362T616 322T530 293Q500 288 399 287H304V62H412V0H400ZM553 475Q553 554 537 582T459 622Q451 623 373 624H298V343H372Q457 344 480 350Q527 362 540 390T553 475\",119824:\"64 339Q64 431 96 502T182 614T295 675T420 696Q469 696 481 695Q620 680 709 589T798 339Q798 255 768 184Q720 77 611 26L600 21Q635 -26 682 -26H696Q769 -26 769 0Q769 7 774 12T787 18Q805 18 805 -7V-13Q803 -64 785 -106T737 -171Q720 -183 697 -191Q687 -193 668 -193Q636 -193 613 -182T575 -144T552 -94T532 -27Q531 -23 530 -16T528 -6T526 -3L512 -5Q499 -7 477 -8T431 -10Q393 -10 382 -9Q238 8 151 97T64 339ZM326 80Q326 113 356 138T430 163Q492 163 542 100L553 86Q554 85 561 91T578 108Q637 179 637 330Q637 430 619 498T548 604Q500 641 425 641Q408 641 390 637T347 623T299 590T259 535Q226 469 226 338Q226 244 246 180T318 79L325 74Q326 74 326 80ZM506 58Q480 112 433 112Q412 112 395 104T378 77Q378 44 431 44Q480 44 506 58\",119825:\"394 0Q370 3 222 3Q75 3 51 0H39V62H147V624H39V686H234Q256 686 299 686T362 687Q479 687 554 669T681 593Q716 550 716 497Q716 390 568 338Q569 337 572 336T577 332Q605 317 623 300T650 258T662 218T668 172Q678 98 689 76Q707 40 748 40Q770 40 780 54T795 88T801 111Q805 117 827 117H831Q846 117 852 113T858 92Q857 78 852 63T834 30T797 1T739 -11Q630 -11 580 12T511 87Q506 104 506 168Q506 170 506 178T507 194Q507 289 438 313Q424 318 356 318H298V62H406V0H394ZM366 369Q459 370 490 381Q548 402 548 476V498V517Q548 578 513 600Q479 624 392 624H358H298V369H366\",119826:\"64 493Q64 582 120 636T264 696H272Q280 697 285 697Q380 697 454 645L480 669Q484 672 488 676T495 683T500 688T504 691T508 693T511 695T514 696T517 697T522 697Q536 697 539 691T542 652V577Q542 557 542 532T543 500Q543 472 540 465T524 458H511H505Q489 458 485 461T479 478Q472 529 449 564T393 614T336 634T287 639Q228 639 203 610T177 544Q177 517 195 493T247 457Q253 454 343 436T475 391Q574 326 574 207V200Q574 163 559 120Q517 12 389 -9Q380 -10 346 -10Q308 -10 275 -5T221 7T184 22T160 35T151 40L126 17Q122 14 118 10T111 3T106 -2T102 -5T98 -7T95 -9T92 -10T89 -11T84 -11Q70 -11 67 -4T64 35V108Q64 128 64 153T63 185Q63 203 63 211T69 223T77 227T94 228H100Q118 228 122 225T126 205Q130 125 193 88T345 51Q408 51 434 82T460 157Q460 196 439 221T388 257Q384 259 305 276T221 295Q155 313 110 366T64 493\",119827:\"41 425Q41 426 51 545T62 669V675H737V669Q738 665 748 546T758 425V419H696V425Q687 517 669 555T595 607Q578 612 522 613H478V62H631V0H615Q585 3 399 3Q214 3 184 0H168V62H321V613H277H263Q164 613 134 561Q113 527 103 425V419H41V425\",119828:\"570 686Q588 683 703 683T836 686H845V624H737V420Q737 390 737 345T738 284Q738 205 729 164T689 83Q614 -11 465 -11Q321 -11 240 51T148 207Q147 214 147 421V624H39V686H51Q75 683 226 683Q376 683 400 686H412V624H304V405V370V268Q304 181 311 146T346 87Q387 52 466 52Q642 52 667 195Q668 204 669 415V624H561V686H570\",119829:\"592 686H604Q615 685 631 685T666 684T700 684T724 683Q829 683 835 686H843V624H744L611 315Q584 254 546 165Q492 40 482 19T461 -6L460 -7H409Q398 -4 391 9Q385 20 257 315L124 624H25V686H36Q57 683 190 683Q340 683 364 686H377V624H289L384 403L480 185L492 212Q504 240 529 298T575 405L670 624H582V686H592\",119830:\"915 686L1052 683Q1142 683 1157 686H1164V624H1073L957 320Q930 249 900 170T855 52T839 10Q834 0 826 -5Q821 -7 799 -7H792Q777 -7 772 -5T759 10Q759 11 748 39T716 122T676 228L594 442L512 228Q486 159 455 78Q433 19 428 9T416 -5Q411 -7 389 -7H379Q356 -7 349 10Q349 12 334 51T288 170T231 320L116 624H24V686H35Q44 683 183 683Q331 683 355 686H368V624H323Q278 624 278 623L437 207L499 369L561 531L526 624H434V686H445Q454 683 593 683Q741 683 765 686H778V624H733Q688 624 688 623L847 207Q848 207 927 415T1006 624H905V686H915\",119831:\"327 0Q306 3 174 3Q52 3 43 0H33V62H98L162 63L360 333L157 624H48V686H59Q80 683 217 683Q368 683 395 686H408V624H335L393 540L452 458L573 623Q573 624 528 624H483V686H494Q515 683 646 683Q769 683 778 686H787V624H658L575 511Q493 398 493 397L508 376Q522 356 553 312T611 229L727 62H835V0H824Q803 3 667 3Q516 3 489 0H476V62H513L549 63L401 274L247 63Q247 62 292 62H338V0H327\",119832:\"605 0Q581 3 434 3Q286 3 262 0H250V62H358V275L126 624H19V686H30Q54 683 189 683Q361 685 370 686H383V624H308L319 608Q330 591 353 556T396 491L484 359L660 623Q660 624 623 624H585V686H595Q613 683 728 683Q832 683 841 686H849V624H742L509 274V62H618V0H605\",119833:\"80 430L92 686H358Q624 686 628 684Q638 679 638 656Q638 640 637 639Q637 638 445 353Q401 288 351 214T277 103L253 67L256 66Q258 66 265 66T279 66T298 66H343Q380 66 406 68T464 81T518 110T557 164T579 250Q583 278 583 298Q583 299 614 299H645V291Q643 281 636 150T627 8V0H353Q79 0 75 2Q64 7 64 31Q64 48 66 52L259 340L451 623Q451 624 384 624Q294 623 259 612Q155 581 143 446Q142 440 142 432V430H80\",119834:\"64 349Q64 399 107 426T255 453Q346 453 402 423T473 341Q478 327 478 310T479 196V77Q493 63 529 62Q549 62 553 57T558 31Q558 9 552 5T514 0H497H481Q375 0 367 56L356 46Q300 -6 210 -6Q130 -6 81 30T32 121Q32 188 111 226T332 272H350V292Q350 313 348 327T337 361T306 391T248 402T194 399H189Q204 376 204 354Q204 327 187 306T134 284Q97 284 81 305T64 349ZM164 121Q164 89 186 67T238 45Q274 45 307 63T346 108L350 117V226H347Q248 218 206 189T164 121\",119835:\"32 686L123 690Q214 694 215 694H221V409Q289 450 378 450Q479 450 539 387T600 221Q600 122 535 58T358 -6H355Q272 -6 203 53L160 1L129 0H98V301Q98 362 98 435T99 525Q99 591 97 604T83 620Q69 624 42 624H29V686H32ZM227 105L232 99Q237 93 242 87T258 73T280 59T306 49T339 45Q380 45 411 66T451 131Q457 160 457 230Q457 264 456 284T448 329T430 367T396 389T343 398Q282 398 235 355L227 348V105\",119836:\"447 131H458Q478 131 478 117Q478 112 471 95T439 51T377 9Q330 -6 286 -6Q196 -6 135 35Q39 96 39 222Q39 324 101 384Q169 453 286 453Q359 453 411 431T464 353Q464 319 445 302T395 284Q360 284 343 305T325 353Q325 380 338 396H333Q317 398 295 398H292Q280 398 271 397T245 390T218 373T197 338T183 283Q182 275 182 231Q182 199 184 180T193 132T220 85T270 57Q289 50 317 50H326Q385 50 414 115Q419 127 423 129T447 131\",119837:\"351 686L442 690Q533 694 534 694H540V389Q540 327 540 253T539 163Q539 97 541 83T555 66Q569 62 596 62H609V31Q609 0 608 0Q588 0 510 -3T412 -6Q411 -6 411 16V38L401 31Q337 -6 265 -6Q159 -6 99 58T38 224Q38 265 51 303T92 375T165 429T272 449Q359 449 417 412V507V555Q417 597 415 607T402 620Q388 624 361 624H348V686H351ZM411 350Q362 399 291 399Q278 399 256 392T218 371Q195 351 189 320T182 238V221Q182 179 183 159T191 115T212 74Q241 46 288 46Q358 46 404 100L411 109V350\",119838:\"32 225Q32 332 102 392T272 452H283Q382 452 436 401Q494 343 494 243Q494 226 486 222T440 217Q431 217 394 217T327 218H175V209Q175 177 179 154T196 107T236 69T306 50Q312 49 323 49Q376 49 410 85Q421 99 427 111T434 127T442 133T463 135H468Q494 135 494 117Q494 110 489 97T468 66T431 32T373 5T292 -6Q181 -6 107 55T32 225ZM383 276Q377 346 348 374T280 402Q253 402 230 390T195 357Q179 331 176 279V266H383V276\",119839:\"308 0Q290 3 172 3Q58 3 49 0H40V62H109V382H42V444H109V503L110 562L112 572Q127 625 178 658T316 699Q318 699 330 699T348 700Q381 698 404 687T436 658T449 629T452 606Q452 576 432 557T383 537Q355 537 335 555T314 605Q314 635 328 649H325Q311 649 293 644T253 618T227 560Q226 555 226 498V444H340V382H232V62H318V0H308\",119840:\"50 300Q50 368 105 409T255 450Q328 450 376 426L388 420Q435 455 489 455Q517 455 533 441T554 414T558 389Q558 367 544 353T508 339Q484 339 471 354T458 387Q458 397 462 400Q464 401 461 400Q459 400 454 399Q429 392 427 390Q454 353 459 328Q461 315 461 300Q461 240 419 202Q364 149 248 149Q185 149 136 172Q129 158 129 148Q129 105 170 93Q176 91 263 91Q273 91 298 91T334 91T366 89T400 85T432 77T466 64Q544 22 544 -69Q544 -114 506 -145Q438 -201 287 -201Q149 -201 90 -161T30 -70Q30 -58 33 -47T42 -27T54 -13T69 -1T82 6T94 12T101 15Q66 57 66 106Q66 151 90 187L97 197L89 204Q50 243 50 300ZM485 403H492Q491 404 488 404L485 403V403ZM255 200Q279 200 295 206T319 219T331 242T335 268T336 300Q336 337 333 352T317 380Q298 399 255 399Q228 399 211 392T187 371T178 345T176 312V300V289Q176 235 194 219Q215 200 255 200ZM287 -150Q357 -150 400 -128T443 -71Q443 -65 442 -61T436 -50T420 -37T389 -27T339 -21L308 -20Q276 -20 253 -20Q190 -20 180 -20T156 -26Q130 -38 130 -69Q130 -105 173 -127T287 -150\",119841:\"40 686L131 690Q222 694 223 694H229V533L230 372L238 381Q248 394 264 407T317 435T398 450Q428 450 448 447T491 434T529 402T551 346Q553 335 554 198V62H623V0H614Q596 3 489 3Q374 3 365 0H356V62H425V194V275Q425 348 416 373T371 399Q326 399 288 370T238 290Q236 281 235 171V62H304V0H295Q277 3 171 3Q64 3 46 0H37V62H106V332Q106 387 106 453T107 534Q107 593 105 605T91 620Q77 624 50 624H37V686H40\",119842:\"72 610Q72 649 98 672T159 695Q193 693 217 670T241 610Q241 572 217 549T157 525Q120 525 96 548T72 610ZM46 442L136 446L226 450H232V62H294V0H286Q271 3 171 3Q67 3 49 0H40V62H109V209Q109 358 108 362Q103 380 55 380H43V442H46\",119843:\"104 610Q104 649 130 672T191 695Q225 693 249 670T273 610Q273 572 249 549T189 525Q152 525 128 548T104 610ZM78 442L173 446L268 450H274V196Q274 -5 274 -37T269 -83Q256 -132 201 -166T71 -200Q10 -200 -30 -173T-71 -102Q-71 -70 -51 -51T-1 -31Q27 -31 48 -49T69 -100Q69 -121 53 -147H56Q66 -149 77 -149H80Q90 -149 100 -146T127 -125T149 -73Q151 -55 151 149V362Q150 364 148 366T145 370T142 373T138 375T133 377T124 378T113 379T97 380H75V442H78\",119844:\"32 686L123 690Q214 694 215 694H221V255L377 382H346V444H355Q370 441 476 441Q544 441 556 444H562V382H476L347 277L515 62H587V0H579Q564 3 476 3Q370 3 352 0H343V62H358L373 63L260 206L237 189L216 172V62H285V0H277Q259 3 157 3Q46 3 37 0H29V62H98V332Q98 387 98 453T99 534Q99 593 97 605T83 620Q69 624 42 624H29V686H32\",119845:\"43 686L134 690Q225 694 226 694H232V62H301V0H292Q274 3 170 3Q67 3 49 0H40V62H109V332Q109 387 109 453T110 534Q110 593 108 605T94 620Q80 624 53 624H40V686H43\",119846:\"40 442Q217 450 218 450H224V365Q226 367 235 378T254 397T278 416T314 435T362 448Q376 450 400 450H406Q503 450 534 393Q545 376 545 370Q545 368 555 379Q611 450 716 450Q774 450 809 434Q850 414 861 379T873 276V213V198V62H942V0H933Q915 3 809 3Q702 3 684 0H675V62H744V194V275Q744 348 735 373T690 399Q645 399 607 370T557 290Q555 281 554 171V62H623V0H614Q596 3 489 3Q374 3 365 0H356V62H425V194V275Q425 348 416 373T371 399Q326 399 288 370T238 290Q236 281 235 171V62H304V0H295Q277 3 171 3Q64 3 46 0H37V62H106V210V303Q106 353 104 363T91 376Q77 380 50 380H37V442H40\",119847:\"40 442Q217 450 218 450H224V407L225 365Q233 378 245 391T289 422T362 448Q374 450 398 450Q428 450 448 447T491 434T529 402T551 346Q553 335 554 198V62H623V0H614Q596 3 489 3Q374 3 365 0H356V62H425V194V275Q425 348 416 373T371 399Q326 399 288 370T238 290Q236 281 235 171V62H304V0H295Q277 3 171 3Q64 3 46 0H37V62H106V210V303Q106 353 104 363T91 376Q77 380 50 380H37V442H40\",119848:\"287 -5Q228 -5 182 10T109 48T63 102T39 161T32 219Q32 272 50 314T94 382T154 423T214 446T265 452H279Q319 452 326 451Q428 439 485 376T542 221Q542 156 514 108T442 33Q384 -5 287 -5ZM399 230V250Q399 280 398 298T391 338T372 372T338 392T282 401Q241 401 212 380Q190 363 183 334T175 230Q175 202 175 189T177 153T183 118T195 91T215 68T245 56T287 50Q348 50 374 84Q388 101 393 132T399 230\",119849:\"32 442L123 446Q214 450 215 450H221V409Q222 409 229 413T251 423T284 436T328 446T382 450Q480 450 540 388T600 223Q600 128 539 61T361 -6H354Q292 -6 236 28L227 34V-132H296V-194H287Q269 -191 163 -191Q56 -191 38 -194H29V-132H98V113V284Q98 330 97 348T93 370T83 376Q69 380 42 380H29V442H32ZM457 224Q457 303 427 349T350 395Q282 395 235 352L227 345V104L233 97Q274 45 337 45Q383 45 420 86T457 224\",119850:\"38 220Q38 273 54 314T95 380T152 421T211 443T264 449Q368 449 429 386L438 377L484 450H540V-132H609V-194H600Q582 -191 475 -191Q360 -191 351 -194H342V-132H411V42Q409 41 399 34T383 25T367 16T347 7T324 1T296 -4T264 -6Q162 -6 100 56T38 220ZM287 46Q368 46 417 127V301L412 312Q398 347 369 371T302 395Q282 395 263 388T225 362T194 308T182 221Q182 126 214 86T287 46\",119851:\"405 293T374 293T324 312T305 361Q305 378 312 394Q315 397 315 399Q305 399 294 394T266 375T238 329T222 249Q221 241 221 149V62H308V0H298Q280 3 161 3Q47 3 38 0H29V62H98V210V303Q98 353 96 363T83 376Q69 380 42 380H29V442H32L118 446Q204 450 205 450H210V414L211 378Q247 449 315 449H321Q384 449 413 422T442 360Q442 332 424 313\",119852:\"38 315Q38 339 45 360T70 404T127 440T223 453Q273 453 320 436L338 445L357 453H366Q380 453 383 447T386 403V387V355Q386 331 383 326T365 321H355H349Q333 321 329 324T324 341Q317 406 224 406H216Q123 406 123 353Q123 334 143 321T188 304T244 294T285 286Q305 281 325 273T373 237T412 172Q414 162 414 142Q414 -6 230 -6Q154 -6 117 22L68 -6H58Q44 -6 41 0T38 42V73Q38 85 38 101T37 122Q37 144 42 148T68 153H75Q87 153 91 151T97 147T103 132Q131 46 220 46H230Q257 46 265 47Q330 58 330 108Q330 127 316 142Q300 156 284 162Q271 168 212 178T122 202Q38 243 38 315\",119853:\"272 49Q320 49 320 136V145V177H382V143Q382 106 380 99Q374 62 349 36T285 -2L272 -5H247Q173 -5 134 27Q109 46 102 74T94 160Q94 171 94 199T95 245V382H21V433H25Q58 433 90 456Q121 479 140 523T162 621V635H224V444H363V382H224V239V207V149Q224 98 228 81T249 55Q261 49 272 49\",119854:\"40 442L134 446Q228 450 229 450H235V273V165Q235 90 238 74T254 52Q268 46 304 46H319Q352 46 380 67T419 121L420 123Q424 135 425 199Q425 201 425 207Q425 233 425 249V316Q425 354 423 363T410 376Q396 380 369 380H356V442L554 450V267Q554 84 556 79Q561 62 610 62H623V31Q623 0 622 0Q603 0 527 -3T432 -6Q431 -6 431 25V56L420 45Q373 6 332 -1Q313 -6 281 -6Q208 -6 165 14T109 87L107 98L106 230Q106 358 104 366Q96 380 50 380H37V442H40\",119855:\"401 444Q413 441 495 441Q568 441 574 444H580V382H510L409 156Q348 18 339 6Q331 -4 320 -4Q318 -4 313 -4T303 -3H288Q273 -3 264 12T221 102Q206 135 197 156L96 382H26V444H34Q49 441 145 441Q252 441 270 444H279V382H231L284 264Q335 149 338 149Q338 150 389 264T442 381Q442 382 418 382H394V444H401\",119856:\"624 444Q636 441 722 441Q797 441 800 444H805V382H741L593 11Q592 10 590 8T586 4T584 2T581 0T579 -2T575 -3T571 -3T567 -4T561 -4T553 -4H542Q525 -4 518 6T490 70Q474 110 463 137L415 257L367 137Q357 111 341 72Q320 17 313 7T289 -4H277Q259 -4 253 -2T238 11L90 382H25V444H32Q47 441 140 441Q243 441 261 444H270V382H222L310 164L382 342L366 382H303V444H310Q322 441 407 441Q508 441 523 444H531V382H506Q481 382 481 380Q482 376 529 259T577 142L674 382H617V444H624\",119857:\"227 0Q212 3 121 3Q40 3 28 0H21V62H117L245 213L109 382H26V444H34Q49 441 143 441Q247 441 265 444H274V382H246L281 339Q315 297 316 297Q320 297 354 341L389 382H352V444H360Q375 441 466 441Q547 441 559 444H566V382H471L355 246L504 63L545 62H586V0H578Q563 3 469 3Q365 3 347 0H338V62H366Q366 63 326 112T285 163L198 63L217 62H235V0H227\",119858:\"84 -102Q84 -110 87 -119T102 -138T133 -149Q148 -148 162 -143T186 -131T206 -114T222 -95T234 -76T243 -59T249 -45T252 -37L269 0L96 382H26V444H34Q49 441 146 441Q252 441 270 444H279V382H255Q232 382 232 380L337 151L442 382H394V444H401Q413 441 495 441Q568 441 574 444H580V382H510L406 152Q298 -84 297 -87Q269 -139 225 -169T131 -200Q85 -200 54 -172T23 -100Q23 -64 44 -50T87 -35Q111 -35 130 -50T152 -92V-100H84V-102\",119859:\"48 262Q48 264 54 349T60 436V444H252Q289 444 336 444T394 445Q441 445 450 441T459 418Q459 406 458 404Q456 399 327 229T194 55H237Q260 56 268 56T297 58T325 65T348 77T370 98T384 128T395 170Q400 197 400 216Q400 217 431 217H462V211Q461 208 453 108T444 6V0H245Q46 0 43 2Q32 7 32 28V33Q32 41 40 52T84 112Q129 170 164 217L298 393H256Q189 392 165 380Q124 360 115 303Q110 280 110 256Q110 254 79 254H48V262\",119860:\"208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260\",119861:\"231 637Q204 637 199 638T194 649Q194 676 205 682Q206 683 335 683Q594 683 608 681Q671 671 713 636T756 544Q756 480 698 429T565 360L555 357Q619 348 660 311T702 219Q702 146 630 78T453 1Q446 0 242 0Q42 0 39 2Q35 5 35 10Q35 17 37 24Q42 43 47 45Q51 46 62 46H68Q95 46 128 49Q142 52 147 61Q150 65 219 339T288 628Q288 635 231 637ZM649 544Q649 574 634 600T585 634Q578 636 493 637Q473 637 451 637T416 636H403Q388 635 384 626Q382 622 352 506Q352 503 351 500L320 374H401Q482 374 494 376Q554 386 601 434T649 544ZM595 229Q595 273 572 302T512 336Q506 337 429 337Q311 337 310 336Q310 334 293 263T258 122L240 52Q240 48 252 48T333 46Q422 46 429 47Q491 54 543 105T595 229\",119862:\"50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252\",119863:\"287 628Q287 635 230 637Q207 637 200 638T193 647Q193 655 197 667T204 682Q206 683 403 683Q570 682 590 682T630 676Q702 659 752 597T803 431Q803 275 696 151T444 3L430 1L236 0H125H72Q48 0 41 2T33 11Q33 13 36 25Q40 41 44 43T67 46Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628ZM703 469Q703 507 692 537T666 584T629 613T590 629T555 636Q553 636 541 636T512 636T479 637H436Q392 637 386 627Q384 623 313 339T242 52Q242 48 253 48T330 47Q335 47 349 47T373 46Q499 46 581 128Q617 164 640 212T683 339T703 469\",119864:\"492 213Q472 213 472 226Q472 230 477 250T482 285Q482 316 461 323T364 330H312Q311 328 277 192T243 52Q243 48 254 48T334 46Q428 46 458 48T518 61Q567 77 599 117T670 248Q680 270 683 272Q690 274 698 274Q718 274 718 261Q613 7 608 2Q605 0 322 0H133Q31 0 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 659Q197 676 203 680H757Q764 676 764 669Q764 664 751 557T737 447Q735 440 717 440H705Q698 445 698 453L701 476Q704 500 704 528Q704 558 697 578T678 609T643 625T596 632T532 634H485Q397 633 392 631Q388 629 386 622Q385 619 355 499T324 377Q347 376 372 376H398Q464 376 489 391T534 472Q538 488 540 490T557 493Q562 493 565 493T570 492T572 491T574 487T577 483L544 351Q511 218 508 216Q505 213 492 213\",119865:\"48 1Q31 1 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 659Q197 676 203 680H742Q749 676 749 669Q749 664 736 557T722 447Q720 440 702 440H690Q683 445 683 453Q683 454 686 477T689 530Q689 560 682 579T663 610T626 626T575 633T503 634H480Q398 633 393 631Q388 629 386 623Q385 622 352 492L320 363H375Q378 363 398 363T426 364T448 367T472 374T489 386Q502 398 511 419T524 457T529 475Q532 480 548 480H560Q567 475 567 470Q567 467 536 339T502 207Q500 200 482 200H470Q463 206 463 212Q463 215 468 234T473 274Q473 303 453 310T364 317H309L277 190Q245 66 245 60Q245 46 334 46H359Q365 40 365 39T363 19Q359 6 353 0H336Q295 2 185 2Q120 2 86 2T48 1\",119866:\"50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q492 659 471 656T418 643T357 615T294 567T236 496T189 394T158 260Q156 242 156 221Q156 173 170 136T206 79T256 45T308 28T353 24Q407 24 452 47T514 106Q517 114 529 161T541 214Q541 222 528 224T468 227H431Q425 233 425 235T427 254Q431 267 437 273H454Q494 271 594 271Q634 271 659 271T695 272T707 272Q721 272 721 263Q721 261 719 249Q714 230 709 228Q706 227 694 227Q674 227 653 224Q646 221 643 215T629 164Q620 131 614 108Q589 6 586 3Q584 1 581 1Q571 1 553 21T530 52Q530 53 528 52T522 47Q448 -22 322 -22Q201 -22 126 55T50 252\",119867:\"228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 219 683Q260 681 355 681Q389 681 418 681T463 682T483 682Q499 682 499 672Q499 670 497 658Q492 641 487 638H485Q483 638 480 638T473 638T464 637T455 637Q416 636 405 634T387 623Q384 619 355 500Q348 474 340 442T328 395L324 380Q324 378 469 378H614L615 381Q615 384 646 504Q674 619 674 627T617 637Q594 637 587 639T580 648Q580 650 582 660Q586 677 588 679T604 682Q609 682 646 681T740 680Q802 680 835 681T871 682Q888 682 888 672Q888 645 876 638H874Q872 638 869 638T862 638T853 637T844 637Q805 636 794 634T776 623Q773 618 704 340T634 58Q634 51 638 51Q646 48 692 46H723Q729 38 729 37T726 19Q722 6 716 0H701Q664 2 567 2Q533 2 504 2T458 2T437 1Q420 1 420 10Q420 15 423 24Q428 43 433 45Q437 46 448 46H454Q481 46 514 49Q520 50 522 50T528 55T534 64T540 82T547 110T558 153Q565 181 569 198Q602 330 602 331T457 332H312L279 197Q245 63 245 58Q245 51 253 49T303 46H334Q340 38 340 37T337 19Q333 6 327 0H312Q275 2 178 2Q144 2 115 2T69 2T48 1Q31 1 31 10Q31 12 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637\",119868:\"43 1Q26 1 26 10Q26 12 29 24Q34 43 39 45Q42 46 54 46H60Q120 46 136 53Q137 53 138 54Q143 56 149 77T198 273Q210 318 216 344Q286 624 286 626Q284 630 284 631Q274 637 213 637H193Q184 643 189 662Q193 677 195 680T209 683H213Q285 681 359 681Q481 681 487 683H497Q504 676 504 672T501 655T494 639Q491 637 471 637Q440 637 407 634Q393 631 388 623Q381 609 337 432Q326 385 315 341Q245 65 245 59Q245 52 255 50T307 46H339Q345 38 345 37T342 19Q338 6 332 0H316Q279 2 179 2Q143 2 113 2T65 2T43 1\",119869:\"447 625Q447 637 354 637H329Q323 642 323 645T325 664Q329 677 335 683H352Q393 681 498 681Q541 681 568 681T605 682T619 682Q633 682 633 672Q633 670 630 658Q626 642 623 640T604 637Q552 637 545 623Q541 610 483 376Q420 128 419 127Q397 64 333 21T195 -22Q137 -22 97 8T57 88Q57 130 80 152T132 174Q177 174 182 130Q182 98 164 80T123 56Q115 54 115 53T122 44Q148 15 197 15Q235 15 271 47T324 130Q328 142 387 380T447 625\",119870:\"285 628Q285 635 228 637Q205 637 198 638T191 647Q191 649 193 661Q199 681 203 682Q205 683 214 683H219Q260 681 355 681Q389 681 418 681T463 682T483 682Q500 682 500 674Q500 669 497 660Q496 658 496 654T495 648T493 644T490 641T486 639T479 638T470 637T456 637Q416 636 405 634T387 623L306 305Q307 305 490 449T678 597Q692 611 692 620Q692 635 667 637Q651 637 651 648Q651 650 654 662T659 677Q662 682 676 682Q680 682 711 681T791 680Q814 680 839 681T869 682Q889 682 889 672Q889 650 881 642Q878 637 862 637Q787 632 726 586Q710 576 656 534T556 455L509 418L518 396Q527 374 546 329T581 244Q656 67 661 61Q663 59 666 57Q680 47 717 46H738Q744 38 744 37T741 19Q737 6 731 0H720Q680 3 625 3Q503 3 488 0H478Q472 6 472 9T474 27Q478 40 480 43T491 46H494Q544 46 544 71Q544 75 517 141T485 216L427 354L359 301L291 248L268 155Q245 63 245 58Q245 51 253 49T303 46H334Q340 37 340 35Q340 19 333 5Q328 0 317 0Q314 0 280 1T180 2Q118 2 85 2T49 1Q31 1 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628\",119871:\"228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637\",119872:\"289 629Q289 635 232 637Q208 637 201 638T194 648Q194 649 196 659Q197 662 198 666T199 671T201 676T203 679T207 681T212 683T220 683T232 684Q238 684 262 684T307 683Q386 683 398 683T414 678Q415 674 451 396L487 117L510 154Q534 190 574 254T662 394Q837 673 839 675Q840 676 842 678T846 681L852 683H948Q965 683 988 683T1017 684Q1051 684 1051 673Q1051 668 1048 656T1045 643Q1041 637 1008 637Q968 636 957 634T939 623Q936 618 867 340T797 59Q797 55 798 54T805 50T822 48T855 46H886Q892 37 892 35Q892 19 885 5Q880 0 869 0Q864 0 828 1T736 2Q675 2 644 2T609 1Q592 1 592 11Q592 13 594 25Q598 41 602 43T625 46Q652 46 685 49Q699 52 704 61Q706 65 742 207T813 490T848 631L654 322Q458 10 453 5Q451 4 449 3Q444 0 433 0Q418 0 415 7Q413 11 374 317L335 624L267 354Q200 88 200 79Q206 46 272 46H282Q288 41 289 37T286 19Q282 3 278 1Q274 0 267 0Q265 0 255 0T221 1T157 2Q127 2 95 1T58 0Q43 0 39 2T35 11Q35 13 38 25T43 40Q45 46 65 46Q135 46 154 86Q158 92 223 354T289 629\",119873:\"234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637\",119874:\"740 435Q740 320 676 213T511 42T304 -22Q207 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435ZM637 476Q637 565 591 615T476 665Q396 665 322 605Q242 542 200 428T157 216Q157 126 200 73T314 19Q404 19 485 98T608 313Q637 408 637 476\",119875:\"287 628Q287 635 230 637Q206 637 199 638T192 648Q192 649 194 659Q200 679 203 681T397 683Q587 682 600 680Q664 669 707 631T751 530Q751 453 685 389Q616 321 507 303Q500 302 402 301H307L277 182Q247 66 247 59Q247 55 248 54T255 50T272 48T305 46H336Q342 37 342 35Q342 19 335 5Q330 0 319 0Q316 0 282 1T182 2Q120 2 87 2T51 1Q33 1 33 11Q33 13 36 25Q40 41 44 43T67 46Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628ZM645 554Q645 567 643 575T634 597T609 619T560 635Q553 636 480 637Q463 637 445 637T416 636T404 636Q391 635 386 627Q384 621 367 550T332 412T314 344Q314 342 395 342H407H430Q542 342 590 392Q617 419 631 471T645 554\",119876:\"399 -80Q399 -47 400 -30T402 -11V-7L387 -11Q341 -22 303 -22Q208 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435Q740 255 592 107Q529 47 461 16L444 8V3Q444 2 449 -24T470 -66T516 -82Q551 -82 583 -60T625 -3Q631 11 638 11Q647 11 649 2Q649 -6 639 -34T611 -100T557 -165T481 -194Q399 -194 399 -87V-80ZM636 468Q636 523 621 564T580 625T530 655T477 665Q429 665 379 640Q277 591 215 464T153 216Q153 110 207 59Q231 38 236 38V46Q236 86 269 120T347 155Q372 155 390 144T417 114T429 82T435 55L448 64Q512 108 557 185T619 334T636 468ZM314 18Q362 18 404 39L403 49Q399 104 366 115Q354 117 347 117Q344 117 341 117T337 118Q317 118 296 98T274 52Q274 18 314 18\",119877:\"230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554\",119878:\"308 24Q367 24 416 76T466 197Q466 260 414 284Q308 311 278 321T236 341Q176 383 176 462Q176 523 208 573T273 648Q302 673 343 688T407 704H418H425Q521 704 564 640Q565 640 577 653T603 682T623 704Q624 704 627 704T632 705Q645 705 645 698T617 577T585 459T569 456Q549 456 549 465Q549 471 550 475Q550 478 551 494T553 520Q553 554 544 579T526 616T501 641Q465 662 419 662Q362 662 313 616T263 510Q263 480 278 458T319 427Q323 425 389 408T456 390Q490 379 522 342T554 242Q554 216 546 186Q541 164 528 137T492 78T426 18T332 -20Q320 -22 298 -22Q199 -22 144 33L134 44L106 13Q83 -14 78 -18T65 -22Q52 -22 52 -14Q52 -11 110 221Q112 227 130 227H143Q149 221 149 216Q149 214 148 207T144 186T142 153Q144 114 160 87T203 47T255 29T308 24\",119879:\"40 437Q21 437 21 445Q21 450 37 501T71 602L88 651Q93 669 101 677H569H659Q691 677 697 676T704 667Q704 661 687 553T668 444Q668 437 649 437Q640 437 637 437T631 442L629 445Q629 451 635 490T641 551Q641 586 628 604T573 629Q568 630 515 631Q469 631 457 630T439 622Q438 621 368 343T298 60Q298 48 386 46Q418 46 427 45T436 36Q436 31 433 22Q429 4 424 1L422 0Q419 0 415 0Q410 0 363 1T228 2Q99 2 64 0H49Q43 6 43 9T45 27Q49 40 55 46H83H94Q174 46 189 55Q190 56 191 56Q196 59 201 76T241 233Q258 301 269 344Q339 619 339 625Q339 630 310 630H279Q212 630 191 624Q146 614 121 583T67 467Q60 445 57 441T43 437H40\",119880:\"107 637Q73 637 71 641Q70 643 70 649Q70 673 81 682Q83 683 98 683Q139 681 234 681Q268 681 297 681T342 682T362 682Q378 682 378 672Q378 670 376 658Q371 641 366 638H364Q362 638 359 638T352 638T343 637T334 637Q295 636 284 634T266 623Q265 621 238 518T184 302T154 169Q152 155 152 140Q152 86 183 55T269 24Q336 24 403 69T501 205L552 406Q599 598 599 606Q599 633 535 637Q511 637 511 648Q511 650 513 660Q517 676 519 679T529 683Q532 683 561 682T645 680Q696 680 723 681T752 682Q767 682 767 672Q767 650 759 642Q756 637 737 637Q666 633 648 597Q646 592 598 404Q557 235 548 205Q515 105 433 42T263 -22Q171 -22 116 34T60 167V183Q60 201 115 421Q164 622 164 628Q164 635 107 637\",119881:\"52 648Q52 670 65 683H76Q118 680 181 680Q299 680 320 683H330Q336 677 336 674T334 656Q329 641 325 637H304Q282 635 274 635Q245 630 242 620Q242 618 271 369T301 118L374 235Q447 352 520 471T595 594Q599 601 599 609Q599 633 555 637Q537 637 537 648Q537 649 539 661Q542 675 545 679T558 683Q560 683 570 683T604 682T668 681Q737 681 755 683H762Q769 676 769 672Q769 655 760 640Q757 637 743 637Q730 636 719 635T698 630T682 623T670 615T660 608T652 599T645 592L452 282Q272 -9 266 -16Q263 -18 259 -21L241 -22H234Q216 -22 216 -15Q213 -9 177 305Q139 623 138 626Q133 637 76 637H59Q52 642 52 648\",119882:\"436 683Q450 683 486 682T553 680Q604 680 638 681T677 682Q695 682 695 674Q695 670 692 659Q687 641 683 639T661 637Q636 636 621 632T600 624T597 615Q597 603 613 377T629 138L631 141Q633 144 637 151T649 170T666 200T690 241T720 295T759 362Q863 546 877 572T892 604Q892 619 873 628T831 637Q817 637 817 647Q817 650 819 660Q823 676 825 679T839 682Q842 682 856 682T895 682T949 681Q1015 681 1034 683Q1048 683 1048 672Q1048 666 1045 655T1038 640T1028 637Q1006 637 988 631T958 617T939 600T927 584L923 578L754 282Q586 -14 585 -15Q579 -22 561 -22Q546 -22 542 -17Q539 -14 523 229T506 480L494 462Q472 425 366 239Q222 -13 220 -15T215 -19Q210 -22 197 -22Q178 -22 176 -15Q176 -12 154 304T131 622Q129 631 121 633T82 637H58Q51 644 51 648Q52 671 64 683H76Q118 680 176 680Q301 680 313 683H323Q329 677 329 674T327 656Q322 641 318 637H297Q236 634 232 620Q262 160 266 136L501 550L499 587Q496 629 489 632Q483 636 447 637Q428 637 422 639T416 648Q416 650 418 660Q419 664 420 669T421 676T424 680T428 682T436 683\",119883:\"42 0H40Q26 0 26 11Q26 15 29 27Q33 41 36 43T55 46Q141 49 190 98Q200 108 306 224T411 342Q302 620 297 625Q288 636 234 637H206Q200 643 200 645T202 664Q206 677 212 683H226Q260 681 347 681Q380 681 408 681T453 682T473 682Q490 682 490 671Q490 670 488 658Q484 643 481 640T465 637Q434 634 411 620L488 426L541 485Q646 598 646 610Q646 628 622 635Q617 635 609 637Q594 637 594 648Q594 650 596 664Q600 677 606 683H618Q619 683 643 683T697 681T738 680Q828 680 837 683H845Q852 676 852 672Q850 647 840 637H824Q790 636 763 628T722 611T698 593L687 584Q687 585 592 480L505 384Q505 383 536 304T601 142T638 56Q648 47 699 46Q734 46 734 37Q734 35 732 23Q728 7 725 4T711 1Q708 1 678 1T589 2Q528 2 496 2T461 1Q444 1 444 10Q444 11 446 25Q448 35 450 39T455 44T464 46T480 47T506 54Q523 62 523 64Q522 64 476 181L429 299Q241 95 236 84Q232 76 232 72Q232 53 261 47Q262 47 267 47T273 46Q276 46 277 46T280 45T283 42T284 35Q284 26 282 19Q279 6 276 4T261 1Q258 1 243 1T201 2T142 2Q64 2 42 0\",119884:\"66 637Q54 637 49 637T39 638T32 641T30 647T33 664T42 682Q44 683 56 683Q104 680 165 680Q288 680 306 683H316Q322 677 322 674T320 656Q316 643 310 637H298Q242 637 242 624Q242 619 292 477T343 333L346 336Q350 340 358 349T379 373T411 410T454 461Q546 568 561 587T577 618Q577 634 545 637Q528 637 528 647Q528 649 530 661Q533 676 535 679T549 683Q551 683 578 682T657 680Q684 680 713 681T746 682Q763 682 763 673Q763 669 760 657T755 643Q753 637 734 637Q662 632 617 587Q608 578 477 424L348 273L322 169Q295 62 295 57Q295 46 363 46Q379 46 384 45T390 35Q390 33 388 23Q384 6 382 4T366 1Q361 1 324 1T232 2Q170 2 138 2T102 1Q84 1 84 9Q84 14 87 24Q88 27 89 30T90 35T91 39T93 42T96 44T101 45T107 45T116 46T129 46Q168 47 180 50T198 63Q201 68 227 171L252 274L129 623Q128 624 127 625T125 627T122 629T118 631T113 633T105 634T96 635T83 636T66 637\",119885:\"58 8Q58 23 64 35Q64 36 329 334T596 635L586 637Q575 637 512 637H500H476Q442 637 420 635T365 624T311 598T266 548T228 469Q227 466 226 463T224 458T223 453T222 450L221 448Q218 443 202 443Q185 443 182 453L214 561Q228 606 241 651Q249 679 253 681Q256 683 487 683H718Q723 678 723 675Q723 673 717 649Q189 54 188 52L185 49H274Q369 50 377 51Q452 60 500 100T579 247Q587 272 590 277T603 282H607Q628 282 628 271Q547 5 541 2Q538 0 300 0H124Q58 0 58 8\",119886:\"33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328\",119887:\"73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325\",119888:\"34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159\",119889:\"366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326\",119890:\"39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353\",119891:\"118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162\",119892:\"311 43Q296 30 267 15T206 0Q143 0 105 45T66 160Q66 265 143 353T314 442Q361 442 401 394L404 398Q406 401 409 404T418 412T431 419T447 422Q461 422 470 413T480 394Q480 379 423 152T363 -80Q345 -134 286 -169T151 -205Q10 -205 10 -137Q10 -111 28 -91T74 -71Q89 -71 102 -80T116 -111Q116 -121 114 -130T107 -144T99 -154T92 -162L90 -164H91Q101 -167 151 -167Q189 -167 211 -155Q234 -144 254 -122T282 -75Q288 -56 298 -13Q311 35 311 43ZM384 328L380 339Q377 350 375 354T369 368T359 382T346 393T328 402T306 405Q262 405 221 352Q191 313 171 233T151 117Q151 38 213 38Q269 38 323 108L331 118L384 328\",119894:\"184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287\",119895:\"297 596Q297 627 318 644T361 661Q378 661 389 651T403 623Q403 595 384 576T340 557Q322 557 310 567T297 596ZM288 376Q288 405 262 405Q240 405 220 393T185 362T161 325T144 293L137 279Q135 278 121 278H107Q101 284 101 286T105 299Q126 348 164 391T252 441Q253 441 260 441T272 442Q296 441 316 432Q341 418 354 401T367 348V332L318 133Q267 -67 264 -75Q246 -125 194 -164T75 -204Q25 -204 7 -183T-12 -137Q-12 -110 7 -91T53 -71Q70 -71 82 -81T95 -112Q95 -148 63 -167Q69 -168 77 -168Q111 -168 139 -140T182 -74L193 -32Q204 11 219 72T251 197T278 308T289 365Q289 372 288 376\",119896:\"121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647\",119897:\"117 59Q117 26 142 26Q179 26 205 131Q211 151 215 152Q217 153 225 153H229Q238 153 241 153T246 151T248 144Q247 138 245 128T234 90T214 43T183 6T137 -11Q101 -11 70 11T38 85Q38 97 39 102L104 360Q167 615 167 623Q167 626 166 628T162 632T157 634T149 635T141 636T132 637T122 637Q112 637 109 637T101 638T95 641T94 647Q94 649 96 661Q101 680 107 682T179 688Q194 689 213 690T243 693T254 694Q266 694 266 686Q266 675 193 386T118 83Q118 81 118 75T117 65V59\",119898:\"21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287\",119899:\"21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287\",119900:\"201 -11Q126 -11 80 38T34 156Q34 221 64 279T146 380Q222 441 301 441Q333 441 341 440Q354 437 367 433T402 417T438 387T464 338T476 268Q476 161 390 75T201 -11ZM121 120Q121 70 147 48T206 26Q250 26 289 58T351 142Q360 163 374 216T388 308Q388 352 370 375Q346 405 306 405Q243 405 195 347Q158 303 140 230T121 120\",119901:\"23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102\",119902:\"33 157Q33 258 109 349T280 441Q340 441 372 389Q373 390 377 395T388 406T404 418Q438 442 450 442Q454 442 457 439T460 434Q460 425 391 149Q320 -135 320 -139Q320 -147 365 -148H390Q396 -156 396 -157T393 -175Q389 -188 383 -194H370Q339 -192 262 -192Q234 -192 211 -192T174 -192T157 -193Q143 -193 143 -185Q143 -182 145 -170Q149 -154 152 -151T172 -148Q220 -148 230 -141Q238 -136 258 -53T279 32Q279 33 272 29Q224 -10 172 -10Q117 -10 75 30T33 157ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326\",119903:\"21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287\",119904:\"131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289\",119905:\"26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26\",119906:\"21 287Q21 295 30 318T55 370T99 420T158 442Q204 442 227 417T250 358Q250 340 216 246T182 105Q182 62 196 45T238 27T291 44T328 78L339 95Q341 99 377 247Q407 367 413 387T427 416Q444 431 463 431Q480 431 488 421T496 402L420 84Q419 79 419 68Q419 43 426 35T447 26Q469 29 482 57T512 145Q514 153 532 153Q551 153 551 144Q550 139 549 130T540 98T523 55T498 17T462 -8Q454 -10 438 -10Q372 -10 347 46Q345 45 336 36T318 21T296 6T267 -6T233 -11Q189 -11 155 7Q103 38 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287\",119907:\"173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380\",119908:\"580 385Q580 406 599 424T641 443Q659 443 674 425T690 368Q690 339 671 253Q656 197 644 161T609 80T554 12T482 -11Q438 -11 404 5T355 48Q354 47 352 44Q311 -11 252 -11Q226 -11 202 -5T155 14T118 53T104 116Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 293 29 315T52 366T96 418T161 441Q204 441 227 416T250 358Q250 340 217 250T184 111Q184 65 205 46T258 26Q301 26 334 87L339 96V119Q339 122 339 128T340 136T341 143T342 152T345 165T348 182T354 206T362 238T373 281Q402 395 406 404Q419 431 449 431Q468 431 475 421T483 402Q483 389 454 274T422 142Q420 131 420 107V100Q420 85 423 71T442 42T487 26Q558 26 600 148Q609 171 620 213T632 273Q632 306 619 325T593 357T580 385\",119909:\"52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289\",119910:\"21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287\",119911:\"347 338Q337 338 294 349T231 360Q211 360 197 356T174 346T162 335T155 324L153 320Q150 317 138 317Q117 317 117 325Q117 330 120 339Q133 378 163 406T229 440Q241 442 246 442Q271 442 291 425T329 392T367 375Q389 375 411 408T434 441Q435 442 449 442H462Q468 436 468 434Q468 430 463 420T449 399T432 377T418 358L411 349Q368 298 275 214T160 106L148 94L163 93Q185 93 227 82T290 71Q328 71 360 90T402 140Q406 149 409 151T424 153Q443 153 443 143Q443 138 442 134Q425 72 376 31T278 -11Q252 -11 232 6T193 40T155 57Q111 57 76 -3Q70 -11 59 -11H54H41Q35 -5 35 -2Q35 13 93 84Q132 129 225 214T340 322Q352 338 347 338\",119912:\"65 0Q45 0 45 18Q48 52 61 60Q65 62 81 62Q155 62 165 74Q166 74 265 228T465 539T569 699Q576 707 583 709T611 711T637 710T649 700Q650 697 695 380L741 63L784 62H827Q839 50 839 45L835 29Q831 9 827 5T806 0Q803 0 790 0T743 1T657 2Q585 2 547 1T504 0Q481 0 481 17Q484 54 497 60Q501 62 541 62Q580 62 580 63Q580 68 573 121T564 179V181H308L271 124Q236 69 236 67T283 62H287Q316 62 316 46Q316 26 307 8Q302 3 295 0L262 1Q242 2 168 2Q119 2 93 1T65 0ZM537 372Q533 402 528 435T521 486T518 504V505Q517 505 433 375L348 244L451 243Q555 243 555 244L537 372\",119913:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 449 686H477H586Q684 686 733 677T817 634Q853 598 853 547Q853 499 826 460T761 401T695 371T654 360H653L662 358Q670 357 683 354T712 344T744 327T774 303T795 269T804 224Q804 148 732 79T533 1Q524 0 288 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624ZM703 550Q703 571 695 586T675 609T656 619T643 623L545 624H447L417 504Q386 384 386 383T470 382Q554 383 565 385Q632 397 667 447T703 550ZM651 240Q651 265 645 282T626 309T608 322T592 329Q587 330 479 331H373L340 198Q307 65 306 64Q306 62 406 62L507 63L519 65Q565 76 596 107T639 171T651 240\",119914:\"380 -17Q335 -17 293 -10T207 16T130 65T76 144T55 256Q55 306 70 361T122 476T211 582T345 663T525 702H545Q673 702 731 634L777 668Q783 672 789 677T800 685T808 691T814 695T818 698T822 700T825 702T828 703T830 703T833 703Q855 703 855 690Q855 686 823 558T789 426Q786 421 782 420T756 419Q734 420 729 421T724 432Q724 434 725 447T726 472Q726 552 678 604Q640 640 586 640H574Q533 640 494 632T409 604T324 541T260 437Q243 397 227 333T210 219Q210 152 237 117Q255 90 299 68T420 46H429Q506 46 580 100T678 234Q683 249 687 251T712 254H723Q743 254 743 240Q743 232 736 213T710 162T663 100T586 40T477 -5Q433 -17 380 -17\",119915:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 437 686Q659 686 668 685Q727 680 772 662T842 621T883 568T905 517T913 475Q914 466 914 434Q914 373 892 307T828 179T712 69T548 7Q517 2 494 2T279 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624ZM768 475Q768 515 753 544T718 588T666 611T613 622T563 624H538H532H452L382 344Q311 64 311 63T363 62H405Q490 62 545 76T656 142Q696 185 724 265T760 399T768 475\",119916:\"257 618H231Q198 618 198 636Q202 672 214 678L219 680H811Q817 677 820 673T824 666L825 664Q825 659 814 549T799 433Q793 424 771 424Q752 424 746 427T740 441Q740 445 742 466T744 505Q744 561 722 585T646 616Q639 617 545 618H456Q456 617 427 502T398 385Q398 384 435 384Q461 385 471 385T499 391T526 405T545 433T562 478Q566 494 571 497T595 501H604Q622 501 626 486Q626 482 593 349T557 213Q552 205 530 205Q499 205 499 219Q499 222 503 242T508 281Q508 308 491 314T429 322Q425 322 423 322H382L317 64Q317 62 390 62Q460 62 493 64T569 80T640 124Q665 149 686 187T719 253T733 283Q739 289 760 289Q791 289 791 274Q791 267 763 201T706 71L678 8Q676 4 667 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L163 66Q163 67 231 341T301 616Q301 618 257 618\",119917:\"257 618H231Q198 618 198 636Q202 672 214 678L219 680H795Q801 677 804 673T808 666L809 664Q809 659 798 549T783 433Q777 424 755 424Q736 424 730 427T724 444Q724 448 725 468T727 507V524Q727 541 724 554T713 577T698 594T676 605T653 612T625 616T597 617T566 618T538 618H456L455 614Q455 611 424 491L394 371H429Q454 372 463 372T491 378T517 392T536 419T552 464Q556 481 561 484T586 488Q603 488 607 486Q616 482 616 473Q616 467 584 337T549 201Q542 192 521 192Q503 192 497 195T490 209Q490 212 492 224Q499 251 499 269Q499 288 489 296T465 306T417 308L379 309L348 188Q341 161 334 129T322 80L318 65L317 62H375H409Q430 62 438 59T447 45Q444 8 431 2L426 0L377 1Q347 2 231 2Q152 2 111 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L163 66Q163 67 231 341T301 616Q301 618 257 618\",119918:\"379 -16Q233 -16 145 52T56 255Q56 310 73 368T127 483T216 586T347 663T518 702H540Q562 702 582 700T616 696T644 689T667 681T686 670T702 659T717 647T731 635L776 668Q782 672 788 677T799 685T807 691T813 695T817 698T821 700T824 702T827 703T829 703T832 703Q854 703 854 690Q854 686 822 558T788 426Q785 421 781 420T755 419Q734 420 729 422T723 432Q723 434 724 446T725 469Q725 531 702 571T642 628Q616 640 575 640Q468 640 390 593T272 464Q247 415 229 340T210 214Q210 166 228 132T277 79T343 54T419 46Q445 46 465 50T500 59T526 76T544 96T557 123T566 150T574 182T581 214H519Q511 214 498 214T479 213Q443 213 443 230Q443 250 452 268Q457 273 464 276L514 275Q546 274 657 274Q735 274 768 275T803 276Q826 276 826 258Q823 224 810 216Q806 214 771 214H736Q736 211 710 109T683 5Q678 0 671 0Q666 0 637 14T597 36Q593 38 590 40T585 44T582 44T576 40Q511 -16 379 -16\",119919:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 239 686Q290 684 403 684Q475 684 512 685T553 686Q576 686 576 668Q572 632 560 626Q555 624 506 624H457L399 389Q399 388 547 388H695L753 623Q753 624 709 624H686Q665 624 660 626T650 639Q653 678 668 684Q672 686 681 686Q685 686 726 685T847 684Q902 684 937 684T986 685T1004 686Q1027 686 1027 668Q1023 632 1011 626Q1006 624 957 624H908L839 344Q768 64 768 63T812 62H839Q871 62 871 44Q867 6 854 2L850 0L808 1Q782 2 675 2Q600 2 560 1T516 0Q499 0 494 15Q498 54 511 60Q515 62 564 62H613L614 66L679 324Q679 326 531 326H383L382 322L317 64Q317 62 361 62H388Q420 62 420 44Q416 6 403 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624\",119920:\"247 624Q242 624 233 624T220 623Q186 623 186 640Q186 647 190 664T202 684Q206 686 226 686Q277 684 393 684Q435 684 471 684T528 685T553 686Q573 686 573 670Q573 650 564 632Q556 624 537 624H501H449L380 344Q309 64 309 63T356 62Q361 62 370 62T384 63Q417 63 417 46Q417 26 408 8Q403 3 396 0L352 1Q325 2 216 2T82 1L45 0Q30 7 30 16Q33 51 46 60Q51 62 102 62H154L294 623Q294 624 247 624\",119921:\"205 131Q205 105 192 84T165 54L152 45Q152 44 160 42T182 37T213 35H216Q255 35 289 65Q314 90 329 129Q331 136 392 378T453 623Q453 624 393 624H332Q318 631 318 640Q318 647 322 664T334 684Q338 686 359 686Q413 684 533 684Q566 684 605 685T652 686Q677 686 685 683T694 669Q694 664 691 652Q686 631 681 628T647 624H602L542 380Q531 336 518 285T500 212T487 161T475 122T463 97T448 74T429 55Q351 -17 213 -17Q142 -17 99 7T43 70Q42 75 42 93Q42 143 73 168T139 194Q168 194 186 177T205 131\",119922:\"536 0Q522 6 522 18Q522 35 533 57Q539 62 557 62Q595 62 601 65L472 330L365 255L342 160Q318 65 317 64Q317 62 361 62H388Q420 62 420 44Q416 6 403 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 239 686Q290 684 403 684Q475 684 512 685T553 686Q576 686 576 668Q572 632 560 626Q555 624 506 624H457L422 481Q386 339 386 337L785 621Q779 624 749 624Q726 624 726 641Q726 645 730 659Q734 675 736 679T747 686L786 685Q812 684 888 684Q908 684 934 685T968 686Q1003 686 1003 669Q1003 646 991 629Q985 624 967 624Q918 624 888 617Q884 617 874 613L865 609Q864 608 732 515T599 420Q599 418 686 242T775 65Q784 62 829 62Q847 62 850 61T860 54Q862 52 862 43Q862 10 845 1Q844 1 842 1T836 0T797 1T694 2Q599 2 573 1L536 0\",119923:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 239 686Q290 684 409 684Q454 684 492 684T552 685T579 686Q603 686 603 668Q599 632 587 626Q583 624 520 624H457L388 344Q317 64 317 63T353 62H390Q418 62 440 64T493 78T548 110T598 169T643 261Q651 282 655 285T680 289Q696 289 700 288T709 279Q711 274 711 269Q710 265 663 138T613 8Q611 4 602 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624\",119924:\"258 624H231Q214 624 208 626T199 639Q203 678 216 684Q220 686 347 686H473Q474 685 478 682T484 677Q487 673 535 413L584 153L608 187Q631 221 672 281T761 410Q935 663 943 671Q949 678 962 686H1082H1166Q1201 686 1210 683T1219 668Q1215 632 1203 626Q1199 624 1149 624H1100L1031 344Q960 64 960 63T1004 62H1031Q1063 62 1063 44Q1060 7 1046 2Q1042 0 1034 0Q1030 0 990 1T875 2Q804 2 767 1T725 0H723Q707 0 703 15Q707 54 720 60Q724 62 773 62H822Q961 618 961 619L754 318Q546 15 543 12Q531 0 510 0Q500 0 495 0T484 5T477 19Q477 20 421 315L367 604L299 335Q234 72 234 68Q234 62 302 62Q334 62 334 46Q332 8 317 2Q313 0 306 0Q301 0 267 1T181 2Q125 2 96 1T63 0Q48 0 43 15Q43 19 47 35Q52 55 57 58T94 62Q147 64 164 69L233 345Q302 619 302 622Q302 624 258 624\",119925:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 344 686H434Q464 686 477 680Q480 677 607 454Q738 227 739 227Q742 227 789 418T836 618Q836 620 835 620L821 622Q811 622 779 624Q755 624 749 625T740 632Q737 635 737 644Q737 656 742 669T754 685Q755 685 757 685T763 686Q768 686 803 685T890 684Q925 684 951 684T990 685T1006 686Q1014 686 1016 684Q1027 679 1027 668Q1023 632 1011 626Q1007 624 978 624Q912 622 907 617Q907 616 831 314T753 8Q749 0 723 0H712Q699 0 692 7Q692 8 671 44T607 155T526 296L361 580L296 323Q234 74 234 68T302 62H307Q334 62 334 44Q330 6 317 2L313 0L280 1Q260 2 181 2Q125 2 96 1T63 0Q48 0 43 15Q43 19 47 35Q52 55 57 58T94 62Q147 64 164 69L233 345Q302 619 302 622Q302 624 258 624\",119926:\"53 245Q53 297 70 356T125 478T216 590T349 671T523 703Q656 703 735 637T815 445Q815 378 791 307Q727 104 527 17Q437 -17 344 -17Q289 -17 242 -5T150 35T79 116T53 245ZM664 489Q664 575 618 611T511 648Q463 648 416 627T334 570Q297 531 270 472T230 355T213 261T208 206Q208 177 215 151T237 98T284 56T358 40Q440 40 510 98T618 270Q664 400 664 489\",119927:\"162 62L302 623Q302 624 258 624H234Q214 624 209 626T200 638Q200 677 217 684Q220 686 439 686Q667 685 684 682Q686 681 693 680Q713 677 733 671T782 649T829 602T847 528Q847 450 784 382T604 293Q571 288 469 287H373L346 176Q340 151 333 122T321 78L317 64Q317 62 361 62H387Q420 62 420 44Q417 10 404 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q43 0 43 17Q43 21 47 33Q52 54 57 58T89 62H113H162ZM692 558Q692 611 617 622Q610 623 529 624H452L381 343H458H492Q604 343 641 389Q662 414 677 471T692 558\",119928:\"53 245Q53 297 70 356T125 478T216 590T349 671T523 703Q656 703 735 637T815 445Q815 410 808 370T781 277T729 178T643 87T519 14L525 4Q540 -19 553 -25T592 -32Q632 -32 654 -24T680 -7T689 10T704 18Q713 18 717 12T722 0Q722 -8 711 -36T681 -101T624 -166T541 -194Q513 -194 494 -183T465 -157T450 -118T444 -79T443 -41V-7L433 -9Q391 -17 344 -17Q301 -17 263 -10T185 15T118 62T71 138T53 245ZM666 482Q666 529 652 563T614 615T565 640T512 648Q412 648 335 573Q268 506 235 389T201 202Q201 164 210 136T230 95T259 66L262 76Q269 109 302 135T382 162Q401 162 415 159T449 140T484 92L491 78L496 82Q502 86 505 88T515 97T528 107T541 120T555 137T570 156T585 179T599 205T612 235Q629 278 647 351T666 482ZM439 56Q439 58 439 62T435 75T426 92T410 106T383 112Q353 112 332 96T311 63Q311 38 355 38H366Q391 39 415 45T439 56\",119929:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 422 686H446H525Q634 686 698 674T806 620Q843 583 843 535Q843 505 833 478T805 432T768 396T728 370T690 352T662 342L651 338L654 336Q658 334 667 327T688 310Q719 278 719 237Q719 222 710 165T701 94Q701 35 748 35Q775 35 793 57T819 101Q822 112 826 114T843 117H849Q881 117 881 99Q881 78 852 39T781 -11Q765 -17 728 -17Q537 -13 537 94Q537 110 552 169T567 243Q567 292 529 309Q517 316 508 316T441 318H375L374 314Q374 312 343 189T311 64Q311 62 355 62H382Q414 62 414 44Q410 6 397 2L393 0L351 1Q325 2 221 2Q147 2 108 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624ZM687 555Q687 617 589 623Q581 624 513 624H451L420 498Q413 468 405 436T392 388L388 371Q388 369 458 369Q464 369 485 369T515 369T541 372T570 377T596 386T624 400Q649 417 664 457T683 522T687 555\",119930:\"354 45Q429 45 467 91T506 184Q506 225 477 250Q461 262 384 279T294 300Q238 318 210 362T182 452Q182 493 202 540T257 623Q338 702 449 702Q491 702 501 701Q571 690 610 654Q614 649 617 650Q618 650 650 675T683 702Q685 703 692 703Q714 703 714 690Q714 686 687 578T658 466Q653 458 629 458Q606 458 602 463Q600 465 599 466Q599 467 599 469T598 473Q598 475 599 487T600 511Q600 584 557 614T454 645Q386 645 347 606T308 520Q308 506 311 496T323 477T338 464T360 454T384 446T413 439T441 433Q523 416 549 401Q581 384 602 352Q631 309 631 254Q631 214 615 170T567 83T478 12T347 -16Q322 -16 300 -14T261 -8T230 0T205 10T187 20T172 30L162 37L130 11Q124 7 119 3T110 -4T104 -9T100 -13T96 -15T93 -16T91 -17T88 -17H82Q76 -17 73 -16T69 -14T66 -10T63 -5L90 107Q97 133 106 170Q116 211 120 219T136 228H148Q167 228 173 227T179 218Q179 216 176 200T173 168Q173 102 227 74T354 45\",119931:\"498 62Q511 58 511 43Q511 10 494 1L490 0Q487 0 482 0T424 1T271 2Q201 2 157 2T94 1T72 0H70Q46 0 46 17Q49 54 62 60L66 62H137Q208 62 209 63L218 98Q227 134 244 203T278 339L347 613H300Q262 612 246 611T198 599T146 564Q128 545 114 512T91 454T79 425Q73 419 52 419Q22 419 22 434Q22 440 41 498T80 611L100 666Q105 673 111 675H434Q758 675 762 673Q772 668 772 657Q772 655 756 549T738 434Q735 419 711 419H707Q690 419 686 421Q677 425 677 434Q676 436 678 449T683 485T686 529Q686 553 679 569T662 594T631 607T593 612T544 613H502L433 340Q418 279 400 207T374 100L365 65L364 62H498\",119932:\"856 686Q877 686 877 668Q877 663 873 649T867 631Q861 624 828 624Q762 622 757 617Q757 613 705 409T651 200Q620 112 540 48T328 -16Q251 -16 196 2T113 51T75 112T63 176Q63 202 70 232T117 422Q129 469 141 520T160 598L167 623Q167 624 123 624H96Q79 624 73 626T64 639Q68 678 81 684Q85 686 104 686Q155 684 268 684Q340 684 377 685T418 686Q441 686 441 668Q437 632 425 626Q421 624 371 624H322L270 415Q224 232 217 198T209 141Q209 45 336 45Q372 45 406 52T475 77T540 128T585 211L590 229Q594 247 601 274T617 336T636 409T654 482T670 547T681 595T686 618Q686 620 685 620H683Q681 621 678 621T671 622Q660 622 630 624Q616 624 610 624T598 626T589 630T587 640Q587 647 590 659Q594 677 598 681T613 686Q618 686 653 685T740 684Q775 684 801 684T840 685T856 686\",119933:\"401 686Q415 680 415 668Q415 651 404 629Q398 624 356 624Q318 624 318 623Q318 620 337 508T377 284L397 174L472 285Q548 396 623 507T699 620Q698 621 652 624Q634 624 627 627T619 641Q619 648 622 658Q627 677 631 681T650 686Q654 686 686 685T766 684Q794 684 823 684T858 685Q874 685 878 683T886 671Q886 667 882 651Q877 632 873 628T850 624Q800 624 779 617Q774 617 770 613Q767 610 560 304T350 -5Q346 -9 332 -16H306H291Q270 -16 267 -2Q267 -1 260 37T238 161T210 313L156 624H116H94Q62 624 62 642Q66 678 78 684Q82 686 99 686Q144 684 246 684Q330 684 368 685L401 686\",119934:\"111 624Q109 624 102 624T91 623Q61 623 61 640Q61 660 70 678Q78 686 98 686Q140 684 239 684Q277 684 309 684T360 685T383 686H385Q407 686 407 668Q404 634 391 626Q387 624 348 624Q307 624 307 622Q307 618 332 409Q359 198 359 195L570 532L564 576L558 622V624H522H504Q472 624 472 641Q475 678 488 684L493 686L529 685Q551 684 645 684Q716 684 753 685T795 686Q818 686 818 669Q815 632 802 626Q798 624 759 624Q718 624 718 622Q718 615 743 410Q770 199 770 196Q770 195 806 253T903 406Q1035 618 1035 619Q1025 624 968 624Q943 624 943 641Q943 648 946 659Q950 675 952 679T963 686L998 685Q1020 684 1093 684Q1113 684 1139 685T1173 686Q1207 686 1207 669Q1207 664 1204 652Q1199 631 1194 628T1164 624Q1113 622 1101 615Q1098 612 905 305Q715 -1 709 -7Q699 -17 673 -17Q645 -17 639 -8L581 441Q581 444 442 221Q331 44 314 18T288 -14Q279 -17 263 -17H254Q229 -17 227 -5Q225 2 186 311L147 620V624H111\",119935:\"931 686Q953 686 953 670Q953 650 944 632Q936 624 924 624H914Q823 624 803 611Q800 609 696 503T591 396Q591 394 667 229L743 62H787H814Q846 62 846 44Q843 7 829 2Q825 0 817 0Q813 0 775 1T664 2Q590 2 551 1T508 0H507Q484 0 484 18Q484 19 488 37Q492 56 497 58T534 62L566 63Q567 64 520 169T471 274Q469 274 369 172T268 67L315 62Q320 62 328 62L335 61Q347 58 347 44Q344 10 331 2L326 0L287 1Q263 2 177 2Q95 2 78 1L53 0Q38 6 38 17Q38 40 50 57Q56 62 78 62Q169 62 188 75Q194 77 435 324L444 334L439 347Q437 351 373 492L313 624H268H246Q220 624 212 632Q210 636 210 642Q210 655 215 669T227 684Q230 686 247 686Q295 684 398 684Q438 684 472 684T527 685T551 686Q567 686 572 671Q572 667 568 651Q563 631 558 628T523 624T492 623H488L526 540Q563 457 564 457Q564 456 574 466T604 496T645 537L724 619Q716 622 677 624H673Q645 624 645 640Q645 660 654 678Q659 683 666 686L704 685Q728 684 813 684Q847 684 873 684T913 685T931 686\",119936:\"97 624H73Q40 624 40 640Q40 660 49 678Q57 686 77 686Q122 684 228 684Q269 684 304 684T360 685T385 686Q406 686 406 668Q406 662 403 653Q398 631 393 628T361 624H353Q321 624 321 623T376 491T432 360L448 377Q465 394 493 424T553 490L673 620Q662 624 630 624Q606 624 606 640Q608 678 623 684Q627 686 634 686Q638 686 671 685T755 684Q777 684 805 685T841 686Q861 686 868 683T876 669Q876 664 873 652Q868 631 863 628T829 624Q764 622 747 611Q727 590 590 441L437 275L411 170Q385 65 384 64Q384 62 429 62H453Q473 62 478 60T487 48Q488 44 484 29Q479 6 473 3Q468 0 454 0Q450 0 436 0T386 1T294 2Q220 2 181 1T138 0Q121 0 116 15Q120 54 133 60Q137 62 187 62H236L289 275L142 624H97\",119937:\"223 430Q192 430 192 448Q192 450 225 561T261 677Q265 683 270 684Q273 686 534 686Q796 686 797 685Q805 682 805 673Q805 668 804 661T800 648T798 641Q796 637 531 352L266 67L329 66H364Q412 66 446 70T523 96T596 157Q617 186 630 220T649 273T663 297Q667 299 684 299H688Q715 299 715 281Q715 278 673 145T628 8Q626 4 617 0H348Q289 0 221 0T139 -1Q112 -1 99 -1T78 1T69 5T68 12Q68 16 71 31T77 49L84 57Q91 65 104 79T133 110T170 151T213 196L610 624H540Q533 624 514 624T488 624T467 623T443 620T422 616T398 609T373 600Q292 560 255 449Q251 436 246 433T223 430\",119938:\"222 -8Q140 -8 89 34T38 158Q38 191 48 227Q72 329 151 390T327 452Q361 452 385 443T421 425T433 416H434L441 421Q448 426 460 430T486 435Q509 435 523 422T538 386Q538 380 522 315T488 179T467 93Q466 87 466 72Q466 42 483 42Q505 42 521 75Q531 94 541 134Q546 155 550 158T571 162H576H587Q607 162 607 148Q606 142 604 132T590 94T566 47T528 9T474 -8Q396 -8 358 40Q295 -8 222 -8ZM404 351Q383 401 324 401Q300 401 270 385T221 330Q206 296 186 220Q166 136 166 106Q166 72 184 58T228 43Q256 43 284 57T328 84T343 103Q343 106 374 228L404 351\",119939:\"220 -8Q142 -8 94 35T45 155V167Q45 187 52 218T104 426L153 622H149Q148 622 144 622T134 623T122 624T111 624T101 624T96 625Q84 628 84 642Q84 647 88 661T94 679Q98 684 109 685T185 690Q258 694 272 694Q289 694 293 679Q293 676 263 553L232 429L244 434Q256 440 281 446T331 452Q417 452 465 407T513 285Q513 235 494 184T439 90T346 20T220 -8ZM385 337Q385 400 318 400Q269 400 226 360Q214 349 211 341T191 268Q162 149 162 113Q162 44 226 44Q269 44 299 76T339 135T362 215Q364 222 365 226Q385 303 385 337\",119940:\"362 325Q362 344 371 361T390 386L399 394Q390 401 355 401Q276 401 231 338Q207 301 189 230T170 122Q170 43 264 43Q392 43 457 105Q472 120 480 117Q486 114 497 102T509 83Q509 79 502 70T477 47T432 21T360 1T259 -8Q194 -8 148 9T80 54T49 109T40 167Q40 280 129 365T352 451Q390 451 396 450Q448 442 473 416T499 358T477 302T421 274H417Q393 274 378 288T362 325\",119941:\"222 -8Q140 -8 89 34T38 158Q38 220 68 285T151 391Q230 452 329 452Q382 452 416 428L422 424Q423 424 447 523L472 622H468Q467 622 463 622T453 623T441 624T430 624T420 624T415 625Q403 628 403 642Q403 647 407 661T413 679Q417 684 428 685T504 690Q577 694 591 694Q608 694 612 679L467 91Q466 87 466 72Q466 43 483 43Q518 43 541 134Q546 155 550 158T571 162H576H587Q607 162 607 148Q606 142 604 132T590 94T566 47T528 9T474 -8Q396 -8 358 40Q295 -8 222 -8ZM404 351Q383 401 324 401Q300 401 270 385T221 330Q206 296 186 220Q166 136 166 106Q166 72 184 58T228 43Q256 43 284 57T328 84T343 103Q343 106 374 228L404 351\",119942:\"260 -8Q196 -8 151 9T83 54T52 111T42 169Q42 188 44 210Q50 240 58 266Q127 434 335 451L338 452Q342 452 345 452Q347 452 353 452T363 451Q426 451 464 424T502 352Q502 289 442 250Q381 211 222 211H184Q184 210 181 196T175 162T171 126Q171 43 264 43Q391 43 457 105Q472 120 480 117Q486 114 497 102T509 83Q509 79 502 70T477 47T432 21T360 1T260 -8ZM237 262Q427 266 427 349Q427 368 409 384T354 401Q316 401 287 388T242 354T216 314T202 278L197 263Q197 262 237 262\",119943:\"584 444Q597 439 597 426Q597 409 586 387Q580 382 505 382H434V380Q432 378 421 314T395 162T368 30Q324 -164 203 -199Q194 -201 175 -201Q123 -201 94 -177T64 -117T88 -58T145 -33Q169 -33 184 -47T200 -84Q200 -122 166 -150L174 -151H185Q202 -148 217 -112Q222 -94 240 9Q246 40 262 132T293 303T307 382H247H210Q190 382 182 385T173 400Q177 436 189 442Q193 444 256 444H318L319 446Q337 565 355 602Q373 640 404 664T458 694T503 701Q569 701 596 676T624 617Q624 581 599 557T544 533Q520 533 504 547T488 585Q488 596 491 606T499 624T508 637T516 646L520 650Q515 650 509 651Q459 651 459 561V554L458 518L452 484Q446 448 445 447V444H584\",119944:\"227 0Q142 0 93 43T43 166Q43 207 58 252T104 341T188 414T310 451L313 452Q316 452 319 452Q321 452 326 452T335 451Q367 451 390 443T425 425L436 416L443 421Q450 426 462 430T488 435Q511 435 525 422T540 386Q540 378 483 151T424 -82Q401 -139 335 -170T167 -202Q72 -202 36 -183T0 -125Q0 -90 24 -67T81 -43Q103 -43 119 -56T136 -99Q133 -124 114 -149L123 -150H183Q222 -150 254 -127T299 -74Q300 -71 306 -47T318 -1T324 23Q323 23 310 18T274 6T227 0ZM407 353Q406 354 404 358T400 365T395 371T388 379T381 385T371 391T360 396T346 400T329 401Q300 401 277 389T240 355T219 317T205 280Q171 148 171 109Q171 77 190 64T235 51T296 67Q322 82 337 98L345 106L407 353\",119945:\"477 56Q477 48 479 46T490 43Q522 45 544 75T577 140Q582 156 585 159T605 162H611H622Q642 162 642 148Q642 138 632 114T602 62T550 13T478 -8Q429 -8 394 17T358 83Q358 95 395 199T433 350Q433 400 394 400H388H383Q335 400 291 363Q256 332 236 298Q233 293 202 170T169 40Q160 18 141 5T99 -8Q70 -8 58 9T45 39Q45 51 116 336L188 622H184Q183 622 179 622T169 623T157 624T146 624T136 624T131 625Q119 628 119 642Q119 647 123 661T129 679Q133 684 144 685T220 690Q293 694 307 694Q324 694 328 679Q328 672 294 540Q286 507 278 473T264 420L260 403Q260 400 269 408Q327 451 393 451H401H410Q425 451 439 450T476 442T515 424T544 391T556 337Q556 286 517 179T477 56\",119946:\"205 615Q205 646 229 670T283 694Q310 694 324 679T339 641Q339 610 315 586T258 562Q235 562 220 577T205 615ZM24 296Q24 305 34 328T63 380T115 430T187 452Q205 452 223 448T262 435T295 406T308 360Q308 345 287 290T240 170T207 87Q202 67 202 57Q202 42 215 42Q235 42 257 64Q288 92 302 140Q307 156 310 159T330 162H336H347Q367 162 367 148Q367 140 357 117T329 65T276 14T201 -8Q158 -8 121 15T83 84Q83 104 133 229T184 358Q189 376 189 388Q189 402 177 402Q156 402 134 380Q103 352 89 304Q84 288 81 285T61 282H55H44Q24 282 24 296\",119947:\"321 616Q321 648 346 671T400 694Q425 694 440 680T456 640Q456 609 431 586T376 562Q353 562 337 577T321 616ZM297 360T297 373T294 392T288 400T278 401H276Q241 399 210 372T158 303Q151 287 148 285T129 282H123H116Q102 282 97 284T92 298Q96 331 153 391T279 451Q357 451 388 422T420 354V339L371 142Q363 111 353 71T339 13T329 -30T318 -64T308 -88T296 -109T283 -125T264 -142Q190 -202 88 -202Q44 -202 16 -181T-12 -125Q-12 -93 11 -68T68 -43Q92 -43 108 -58T124 -93Q124 -121 106 -144Q101 -150 103 -150Q120 -150 147 -128T191 -64Q194 -57 242 136T294 345Q297 360 297 373\",119948:\"99 -8Q71 -8 58 9T45 39Q45 51 116 336L188 622H184Q183 622 179 622T169 623T157 624T146 624T136 624T131 625Q119 628 119 642Q119 647 123 661T129 679Q133 684 144 685T220 690Q293 694 307 694Q324 694 328 679Q328 674 280 482Q231 290 231 287Q231 285 234 286Q259 302 294 334T356 390T420 433T493 452Q528 452 546 427T564 364Q564 308 538 282T480 256Q456 256 441 269T425 308Q425 339 444 359T483 384L502 389Q502 395 496 398Q493 400 483 400Q465 400 449 395T409 374T373 347T323 305T268 257Q274 256 282 256Q312 251 329 247T371 232T411 202Q431 181 431 146Q431 132 427 110T422 73Q422 44 440 44H442Q462 44 478 64T502 102T514 141Q518 157 522 159T547 162H558Q578 162 578 148Q578 118 537 56T440 -7H432Q374 -7 337 21T299 94Q299 103 301 116T304 139Q304 164 281 181T235 202L212 206H211Q176 47 160 24Q137 -8 99 -8\",119949:\"157 -8Q138 -8 118 -4T77 11T41 42T27 91V106L156 622H152Q151 622 147 622T137 623T125 624T114 624T104 624T99 625Q87 628 87 642Q87 647 91 661T97 679Q101 684 112 685T188 690Q261 694 275 694Q292 694 296 679L151 91Q150 85 150 71Q150 42 167 42Q186 42 205 75Q216 96 225 134Q230 155 234 158T255 162H260H271Q291 162 291 148Q290 145 289 140T283 118T271 87T254 54T229 23T197 1T157 -8\",119950:\"24 296Q25 302 27 312T41 350T65 397T104 435T159 452Q203 452 234 435Q268 419 285 384L295 392Q305 401 317 410T349 429T389 445Q411 451 446 451Q560 451 592 383Q593 380 594 379L595 375L604 384Q675 452 762 452Q893 452 916 367Q918 356 918 334Q918 285 881 183T841 66Q838 43 849 43Q876 43 901 69T940 138Q945 156 949 159T969 162H975H986Q1006 162 1006 148Q1006 138 996 115T966 63T914 13T841 -8Q794 -8 758 16T721 82Q721 96 758 199T796 351Q796 401 753 401Q702 401 662 369T599 298Q597 294 567 172T533 40Q525 22 506 7T462 -8Q435 -8 422 8T409 39Q409 48 425 114T458 248T476 320Q478 330 478 348T474 377T462 393T449 399T433 400H428Q380 400 336 363Q301 332 281 298Q278 293 247 170T214 40Q206 22 187 7T143 -8T104 7T90 39Q90 47 108 124T146 274L164 347Q166 355 166 372Q166 401 149 401Q129 401 115 379T89 306Q84 288 80 285T55 282H44Q24 282 24 296\",119951:\"24 296Q25 302 27 312T41 350T65 397T104 435T159 452Q203 452 234 435Q268 419 285 384L293 391Q363 452 454 452Q575 446 597 367Q599 356 599 334Q599 285 562 183T522 66Q519 43 530 43Q557 43 582 69T621 138Q626 156 630 159T650 162H656H667Q687 162 687 148Q687 138 677 115T647 63T595 13T522 -8Q475 -8 439 16T402 82Q402 96 439 199T477 351Q477 401 434 401Q421 401 409 398Q341 388 285 305L278 295L247 170Q216 46 214 40Q206 22 187 7T143 -8T104 7T90 39Q90 47 108 124T146 274L164 347Q166 355 166 372Q166 401 149 401Q129 401 115 379T89 306Q84 288 80 285T55 282H44Q24 282 24 296\",119952:\"254 -8Q191 -8 146 9T80 54T49 111T39 169Q39 206 53 247T96 329T176 402T292 446Q317 451 336 451L344 452Q353 452 359 452Q457 452 516 408T576 279Q576 169 488 81T254 -8ZM349 400Q321 400 287 385T231 338Q206 301 188 228T170 126Q170 99 178 83Q198 44 260 44Q367 44 409 157Q419 185 432 238T445 317Q445 336 443 348Q435 372 416 384T384 398T349 400\",119953:\"24 296Q25 302 27 312T41 350T65 397T103 435T157 452Q235 452 273 404Q336 452 409 452Q434 452 458 448T507 432T550 402T581 354T593 285Q593 221 564 159T480 53Q401 -8 302 -8Q290 -8 279 -7T259 -3T242 3T228 9T218 14T212 18L209 20Q208 19 190 -55T171 -131T198 -132H213Q240 -132 240 -150Q237 -187 223 -192Q219 -194 212 -194Q208 -194 176 -193T95 -192Q48 -192 24 -193T-3 -194Q-11 -194 -16 -190T-22 -182T-23 -176Q-20 -142 -7 -134Q-3 -132 20 -132H44L164 354Q165 357 165 372Q165 401 148 401Q113 401 90 310Q85 289 82 286T60 282H55H44Q24 282 24 296ZM465 339Q465 373 447 387T403 401Q375 401 347 387T303 360T288 341Q288 338 257 216L227 93Q248 43 306 43Q332 43 361 59T410 115Q425 147 445 224Q465 309 465 339\",119954:\"38 159Q38 209 58 260T113 355T205 425T327 452Q338 452 348 451T366 449T382 444T394 440T405 434T414 429T422 423T429 418Q440 429 481 440T533 452Q540 452 545 447T550 437Q550 432 481 152Q410 -130 410 -131T437 -132H452Q479 -132 479 -150Q476 -187 462 -192Q458 -194 451 -194Q447 -194 414 -193T330 -192Q277 -192 249 -193T217 -194Q202 -194 197 -179Q197 -175 201 -159Q206 -139 211 -136T243 -132H283L319 15L307 10Q295 4 270 -2T220 -8Q134 -8 86 37T38 159ZM402 353Q402 358 395 368T369 390T324 401Q301 401 282 394T249 369T226 338T208 297T196 258T186 218Q166 141 166 107Q166 44 229 44Q265 44 294 61T337 95Q341 100 371 222T402 353\",119955:\"24 296Q24 298 28 313T42 352T67 398T104 436T154 452Q198 452 230 437T273 404L282 411Q334 452 393 452Q441 452 470 423T500 350Q500 301 473 279T418 256Q395 256 379 270T363 308Q363 366 424 386Q424 388 420 391T405 398T385 401Q363 401 343 390Q321 380 289 341L252 192Q214 42 212 39Q190 -8 142 -8Q117 -8 103 7T89 39Q89 52 127 202T165 369Q165 402 148 402Q139 402 128 393T110 369Q100 348 90 310Q85 289 82 286T60 282H55H44Q24 282 24 296\",119956:\"140 290Q140 311 148 336T176 388T235 433T326 451H336Q355 451 373 449T418 439T460 412T476 363Q476 333 456 311T406 289Q384 289 371 302T357 335Q357 351 364 364T379 384L386 391Q386 392 381 394T362 398T330 400Q299 400 278 393T247 373T235 352T232 335Q232 322 242 312Q258 299 315 290T403 260Q457 224 457 167Q457 152 453 134T435 90T397 43T330 7T229 -8Q133 -8 95 22T57 91Q57 127 81 152T139 177Q161 177 177 164T194 121Q189 80 153 56Q179 43 236 43Q275 43 303 52T343 75T361 101T366 124Q366 148 338 161T272 180T232 186Q187 198 164 227T140 290\",119957:\"82 382H55Q21 382 21 399Q21 422 33 439Q39 444 93 444H144L162 517Q163 522 167 541T174 567T181 589T192 611T206 627T226 639T253 643Q276 643 291 630T306 594Q306 586 288 514Q284 499 280 481T273 454L271 445Q271 444 317 444Q322 444 331 444T345 445Q377 445 377 428Q377 408 368 390Q360 382 341 382H306H255Q182 86 182 75Q182 43 201 43H204Q242 46 279 81Q298 101 309 119T323 145T330 157T350 162H356H363Q377 162 382 160T387 146Q385 136 372 114T337 64T275 14T192 -7Q131 -7 95 19T59 90V105L128 381Q128 382 82 382\",119958:\"189 389Q189 397 187 399T176 401Q150 399 126 372T89 304Q84 288 81 285T61 282H55H44Q24 282 24 296Q24 307 35 331T65 383T117 431T187 452Q237 452 272 427T308 362Q308 347 273 254T238 111Q238 43 291 43Q319 43 344 58T380 86T391 103T426 247T464 396Q472 414 491 429T535 444T574 429T588 397Q588 390 570 315T534 168L516 97Q514 89 514 72Q514 42 531 42Q544 42 556 56Q574 76 589 134Q594 155 598 158T619 162H624H635Q655 162 655 148Q654 142 652 132T638 94T614 47T575 9T520 -8Q509 -8 498 -7T478 -3T461 2T446 8T434 16T424 23T416 29T410 35T406 39L405 41L397 34Q347 -7 288 -7H281Q148 -7 122 78Q116 95 116 125V136Q116 174 152 273T189 389\",119959:\"380 367Q380 397 406 425T465 453Q493 453 516 430T540 357Q540 314 524 250T467 115T373 13Q338 -8 292 -8Q218 -8 167 23T116 129Q116 178 152 275T189 388Q189 396 187 398T176 401Q148 398 125 372T89 304Q84 288 81 285T61 282H55H44Q24 282 24 296Q24 306 34 330T64 382T116 431T189 452Q231 452 269 429T308 362Q308 346 273 255T238 114Q238 43 306 43Q336 43 363 65T407 118T437 182T456 239T462 268Q462 290 417 315Q380 335 380 367\",119960:\"636 367Q636 400 664 426T719 453Q748 453 772 431T796 357Q796 321 782 256T727 112T633 6Q604 -8 567 -8Q466 -8 415 43Q414 42 410 38T403 31T396 25T388 18T378 11T367 5T355 0T340 -4T324 -7T306 -8Q249 -8 209 5T151 40T125 84T117 129Q117 176 153 274T190 388Q190 408 158 396Q112 376 90 306Q85 288 81 285T61 282H55H44Q24 282 24 296Q24 305 34 328T63 380T114 430T187 452Q240 452 274 427T309 362Q309 346 275 255T240 117Q240 43 317 43Q325 43 333 45T347 50T359 57T369 66T377 75T383 83T388 90L390 95Q390 99 389 110T387 129Q387 139 391 167Q393 177 419 282T448 396Q456 414 475 429T519 444Q546 444 559 428T572 397Q572 384 542 265T511 114Q511 43 579 43Q608 43 633 66T673 122T699 188T714 244L718 267Q718 291 673 315Q636 335 636 367\",119961:\"74 282H63Q43 282 43 296Q43 298 45 307T56 332T76 365T110 401T159 433Q200 451 233 451H236Q273 451 282 450Q358 437 382 400L392 410Q434 452 483 452Q538 452 568 421T599 346Q599 303 573 280T517 256Q494 256 478 270T462 308Q462 343 488 367Q501 377 520 385Q520 386 516 389T502 396T480 400T462 398Q429 383 415 341Q354 116 354 80T405 44Q449 44 485 74T535 142Q539 156 542 159T562 162H568H579Q599 162 599 148Q599 135 586 111T550 60T485 12T397 -8Q313 -8 266 35L258 44Q215 -7 161 -7H156Q99 -7 71 25T43 95Q43 143 70 165T125 188Q148 188 164 174T180 136Q180 101 154 77Q141 67 122 59Q124 54 136 49T161 43Q183 43 200 61T226 103Q287 328 287 364T236 400Q200 400 164 377T107 302Q103 288 100 285T80 282H74\",119962:\"206 -150Q240 -150 268 -134T314 -95T344 -48T362 -7T367 14Q339 -7 280 -7Q230 -7 195 5T144 39T122 79T115 122Q115 175 152 274T189 388Q189 396 187 398T176 401Q148 398 125 372T89 304Q84 288 81 285T61 282H55H44Q24 282 24 296Q24 306 34 329T64 381T116 431T188 452Q239 452 273 427T308 361Q308 347 273 253T237 109Q237 43 291 43T388 98Q388 99 425 246T463 396Q471 414 490 429T534 444T573 430T587 399Q587 386 537 186T483 -25Q461 -84 410 -126T296 -188Q248 -202 204 -202Q127 -202 96 -175T64 -114Q64 -82 86 -57T144 -31Q169 -31 184 -45T199 -83Q199 -89 198 -94T196 -104T193 -113T189 -120T184 -128T179 -134T173 -141T168 -147Q189 -150 206 -150\",119963:\"66 -8H60Q34 -8 34 5Q34 9 42 22T70 59T115 110Q162 156 255 229T381 332L389 339H381Q348 332 298 329T212 325T172 321Q168 318 151 318H146Q116 318 116 332Q116 334 118 342Q128 374 154 402Q205 452 265 452Q304 452 352 422T426 392Q441 392 462 421T485 451T508 452H518Q539 452 539 438Q539 431 516 401T458 334Q412 289 312 210Q229 146 191 111L183 103H195Q203 103 213 104T240 107T268 110Q301 114 337 116T391 119T428 123T455 134T469 157Q473 166 495 166Q521 166 525 161Q532 156 528 141Q510 81 456 37T337 -7Q297 -7 251 22T177 52Q154 52 134 38T100 8L88 -7Q86 -8 66 -8\",119964:\"76 60Q83 29 135 29Q190 29 264 81Q280 93 280 95T277 99T265 106T248 118Q189 166 189 237Q189 307 245 388Q267 421 299 436Q336 455 386 455Q488 455 550 403L559 395L571 405Q727 544 944 679L957 687L966 701Q968 704 970 707T973 712T975 714T978 716T982 717T989 717H995Q1004 717 1007 717T1013 714T1016 708Q1016 705 829 403L636 92L630 83Q659 93 685 110T728 143L745 158Q758 158 752 138L748 127L740 119Q676 58 605 42L593 22Q590 17 587 12T583 6T579 2T573 0T564 0H530H484Q480 3 480 8Q480 15 489 26T498 39T497 40Q477 40 423 49T327 74L316 78L302 68Q200 -8 121 -8Q85 -8 60 7T35 53T60 113T123 144Q144 144 153 132T162 106Q162 89 143 75T99 61Q90 61 76 65V60ZM904 614L905 615Q901 615 840 573T700 469T581 369L587 359Q600 340 608 315T618 273T622 238T624 216L764 414Q904 612 904 614ZM525 363Q493 405 379 418H375Q342 418 309 378Q251 300 251 234Q251 174 306 137Q318 128 322 131Q323 132 329 139Q351 161 362 180Q430 273 509 348L525 363ZM579 205Q579 245 571 278T556 323T546 337L521 311Q461 248 422 196T362 121L353 111Q427 85 499 79Q517 77 520 77L525 76L549 111Q551 114 556 121T563 131T568 138T573 147T575 157T577 169T578 185T579 205\",119966:\"367 89Q367 84 353 77T334 70Q325 70 312 83T298 120Q298 169 364 233T496 298Q538 298 563 275T588 220V213Q588 132 501 53T306 -26Q251 -26 211 6T170 114Q171 148 181 184T205 248T232 298T255 334T265 349T246 350Q127 350 77 390T26 480Q26 533 71 581T178 656T295 683Q312 683 312 676Q312 674 311 672L302 660Q294 648 292 647L286 646Q280 646 276 646Q197 641 145 583T93 476Q93 387 265 387Q271 387 277 387T287 388T292 388T313 414T373 483T451 562Q618 712 732 727Q733 727 740 727T753 728Q790 727 804 708T819 665Q819 643 810 617T773 553T699 481T572 414T385 361Q381 361 367 341Q247 172 247 86Q247 11 325 11Q404 11 465 95Q518 165 528 208Q529 212 529 220Q529 237 518 249T480 261Q431 261 387 209T343 126Q343 111 355 101T367 89ZM777 658Q777 691 738 691Q704 691 658 662T570 590T491 504T432 432T410 400H411Q416 400 440 405T505 423T589 455T675 506T743 576Q777 627 777 658\",119967:\"251 272Q199 272 168 298T136 374Q136 432 175 496T267 603Q321 645 395 676T552 708Q610 708 655 694T724 659T763 618T784 584L790 569Q792 569 800 572T819 576T840 578Q855 578 855 571Q855 566 846 554T829 541Q824 541 817 539T804 533T799 529Q802 517 802 483Q802 376 742 256T585 53T392 -31Q353 -31 300 -7L289 -2L277 -6Q242 -17 192 -17Q141 -17 113 -13T77 -3T68 14Q68 20 73 28T93 45T131 58Q152 62 197 62Q241 62 272 48L282 44Q308 65 334 93Q380 145 467 266T622 454Q644 476 664 493T694 517T720 534T740 547Q699 671 540 671Q461 671 385 625T276 534Q265 520 251 499T219 438T202 368Q202 309 267 309Q325 309 396 383T491 545Q492 548 493 552Q494 558 496 559T511 564Q513 565 514 565Q523 568 527 568Q534 568 534 560Q534 554 529 537Q507 442 420 357T251 272ZM332 20Q332 19 341 15T368 6T400 2Q425 2 457 13T531 49T614 125T690 248Q750 376 750 476V490L738 479Q698 436 646 366T554 239T455 121T332 20ZM226 20Q226 25 186 25Q181 25 174 24H166Q161 24 158 23H152Q170 21 197 21Q205 21 213 21T223 20H226\",119970:\"206 318L249 320Q249 327 259 352T282 399Q312 447 366 510T465 610Q588 717 661 717Q695 717 716 701T738 653T704 577Q663 522 610 474T512 397T424 346T359 315T333 306Q331 304 327 290T323 267Q323 229 368 229Q402 229 439 254T505 312T571 382T638 435Q642 437 644 437Q658 437 658 409Q655 403 647 399T624 379T595 326Q583 296 564 267T523 179Q504 126 483 91T423 27Q335 -37 231 -37Q191 -37 157 -30T95 -2T67 53Q67 89 94 123T159 158Q180 158 190 146T200 119Q200 102 178 89T136 75Q128 75 120 78T110 81Q105 81 105 62Q105 38 129 24T180 5T238 1H244Q282 1 319 32Q349 55 371 85T436 190L465 239Q413 192 354 192Q300 192 274 217T245 276Q245 284 242 284Q220 280 187 280Q106 280 59 315T12 409Q12 457 43 508T118 597T210 659T295 683Q308 683 308 675Q308 670 299 658T282 646Q266 646 240 633Q182 606 118 511Q76 448 76 400Q76 368 105 343T206 318ZM677 660Q677 680 646 680Q616 680 565 629Q537 601 514 571Q493 544 455 492T389 398T360 355Q366 357 386 367Q463 406 534 473T641 591T677 660\",119973:\"829 148Q845 148 845 143T841 130T823 109T788 83T730 54T644 22Q637 20 634 19T627 16T622 13T618 10T612 3T604 -6Q510 -112 396 -203T201 -312Q190 -314 171 -314H166Q156 -314 147 -312T123 -304T101 -283T92 -245Q92 -203 117 -160T175 -93Q214 -65 280 -41T390 -6T509 22L532 27L547 47Q673 219 673 225L665 228Q657 231 648 235T627 249T606 270T591 300T584 341Q584 389 614 447T686 544Q735 588 799 615T959 667T1108 713Q1118 717 1119 717Q1125 717 1129 705T1133 689Q1133 686 1115 673Q1051 627 1001 579T918 481T867 403T828 328T805 277Q802 271 801 267T798 261T798 259Q849 270 900 317Q956 371 956 421Q956 438 953 457T950 480Q950 481 950 482L951 484Q953 487 966 492T985 498Q989 498 994 473Q1000 441 1000 423Q1000 362 934 302T790 223L775 220L767 207Q757 191 731 158T685 98T662 63Q662 61 690 70T755 99T811 142L816 148H829ZM646 332Q646 308 659 291T685 268L698 263L735 320Q828 465 865 511Q923 582 1003 643L1005 645Q1004 645 924 620Q775 572 716 492Q646 401 646 332ZM184 -278Q233 -278 311 -212T444 -80L498 -15H496Q468 -20 424 -30T293 -70T174 -133Q167 -140 158 -153T138 -190T127 -232Q127 -278 184 -278\",119974:\"521 506Q521 493 549 493Q608 493 660 527Q667 531 690 555L736 604Q750 619 777 646T825 694T848 716T852 717Q857 717 860 711T865 697L866 690Q866 687 812 615Q654 404 654 401Q655 401 656 401T659 402T665 403T680 404Q718 404 734 374Q735 370 743 376Q745 377 752 382Q806 416 852 466T933 563T982 623Q1028 666 1075 686T1155 706Q1165 706 1173 705T1186 703T1194 699T1199 695T1201 692T1202 688V687L1204 677Q1204 667 1191 670Q1189 670 1183 670T1174 671Q1137 671 1086 643T1001 564Q970 517 899 449T749 339L739 333L736 322Q730 295 703 253T652 165T628 77Q628 21 681 21Q692 21 698 23Q751 46 817 134L827 148H844Q861 148 864 146Q869 140 859 127Q818 75 761 29T665 -17Q649 -17 633 -12T598 4T569 40T558 100Q558 128 563 152T585 205T609 245T643 294Q647 300 645 300Q633 297 615 297Q607 297 600 298T589 300T584 301Q581 301 569 284T536 236T488 171T418 97T331 28Q233 -37 155 -37Q104 -37 68 -17T29 44Q29 82 55 120T123 158Q144 158 154 146T164 119Q164 102 143 89T100 75Q92 75 86 76T77 80T72 82Q68 82 68 59Q68 37 85 23T123 5T167 0Q203 0 238 21T311 85T382 174T468 288T563 410Q576 426 588 440T607 462T615 472L605 468Q568 456 533 456H527Q490 456 463 483Q451 496 451 508T468 545T486 581Q486 593 465 593Q448 593 425 568T384 518T364 493Q364 492 347 492Q326 492 326 499T351 537T414 599T477 630Q509 630 528 615T547 576Q547 556 534 533T521 506ZM675 357Q675 368 665 368Q656 368 644 363Q631 355 616 333H628Q640 334 672 341Q675 354 675 357\",119977:\"764 513Q764 482 772 423T780 330Q780 304 778 285T775 256T773 245Q778 252 826 328T932 484T1042 617Q1077 652 1114 678T1173 715T1200 726Q1208 726 1208 717Q1208 711 1206 695L1203 679L1199 675Q1197 675 1187 670T1161 657T1133 639Q1050 583 959 456Q906 381 858 307T779 179T725 83T691 18T679 -6Q677 -8 660 -8H656Q639 -8 639 -1Q639 4 646 17Q685 93 685 173V196Q685 233 681 288T676 380Q676 438 687 487L664 454Q505 230 454 170Q366 64 290 14T163 -36H152Q87 -36 58 -11T29 46Q29 82 55 120T123 158Q144 158 154 146T164 119Q164 102 143 89T100 75Q92 75 86 76T77 80T72 82Q67 82 67 59Q67 37 89 19T167 1Q187 1 197 3Q221 9 246 22T292 52T336 91T375 132T411 174T440 212T463 245T478 266Q779 695 784 698Q786 700 802 700H818Q824 694 824 692T809 668T779 604T764 513\",119978:\"259 -8Q230 -7 205 0T153 24T112 74T96 153Q96 254 174 379T374 599T607 707H621Q732 707 778 661Q805 634 805 598Q805 558 775 517T696 452L684 447V441Q684 378 626 273T484 97Q379 7 288 -7Q279 -8 259 -8ZM760 594Q760 670 608 670Q562 670 493 622T347 472Q174 240 174 131Q174 76 205 53T279 29Q294 29 306 32Q405 60 507 205Q592 325 616 401Q625 426 625 435Q625 436 621 436T603 440T569 449Q524 466 515 475Q513 477 513 481T525 496T541 508L548 504Q555 501 565 497T587 488T609 480T625 476Q627 476 626 481Q626 486 623 494T613 513T589 533T548 541Q495 541 413 454T286 281Q265 241 254 201T240 141T235 120Q234 118 217 111T197 104Q195 104 192 107T189 112Q190 125 193 147T220 231T280 348Q335 428 407 493T539 576Q548 578 563 578Q594 578 617 568T653 546T672 518T681 494T683 482Q683 481 684 481Q690 481 707 495T742 538T760 594\",119979:\"571 345Q571 384 612 418T687 452Q698 452 698 445Q698 436 679 417Q677 415 670 415Q650 412 633 389T615 350Q615 340 621 331T634 319T643 315L663 342Q751 462 817 536Q873 595 896 614L907 625Q843 680 701 680Q594 680 499 632T344 516Q317 486 296 449T267 384Q262 366 262 354Q262 332 276 316T326 299H327Q374 299 426 338Q481 376 537 456T597 598Q597 616 599 617Q601 619 614 624T630 630Q639 630 639 604V587V581Q639 519 597 456Q544 377 462 320T318 262Q278 262 250 282T222 350Q222 418 285 504Q360 597 480 656T702 716Q773 716 825 707T898 688T951 660Q962 670 985 685T1012 700Q1018 700 1022 690T1026 673Q1026 670 1019 664Q988 633 988 631Q988 630 999 618T1020 580T1031 522Q1031 471 1003 419T928 330Q854 275 765 264Q757 262 733 262H714L701 245Q615 121 473 42T218 -37Q159 -37 125 -15T90 46Q90 82 116 120T185 158Q203 158 213 147T224 121Q224 110 219 102Q198 75 159 75Q154 75 149 76T143 77T140 77Q137 72 137 53Q138 37 149 26T177 9T205 2T228 0Q313 0 419 74T602 257L620 281L614 285Q607 289 601 294T587 306T576 323T571 345ZM950 529Q950 576 943 576Q940 576 840 439T741 299H751Q804 300 845 334T924 438Q949 490 950 529\",119980:\"330 387Q330 331 402 331Q463 331 514 371T589 459T613 542Q613 559 608 570T598 588T593 596Q593 601 617 610Q632 617 636 616Q675 585 675 527Q675 464 629 409T516 324T387 294Q271 294 271 394V402Q271 438 292 478Q344 582 457 649T672 717Q765 717 825 675T885 548Q885 433 771 298T498 76Q493 73 491 72T486 69T484 67T485 66Q539 41 607 41Q655 41 703 71T780 139L787 148H804Q806 148 809 148Q826 149 826 140Q826 128 786 91T687 19T589 -16H576Q503 -16 414 20L396 27Q279 -17 192 -17Q130 -17 92 2T54 53Q54 92 107 123T222 155Q303 155 401 106L431 91L441 97Q476 118 527 157Q622 236 711 361T801 573Q801 591 795 607T775 641T732 668T660 679Q592 679 528 644T422 560T355 464T330 387ZM201 20Q232 20 267 27T322 40T342 49Q342 52 315 60T243 77T160 86Q150 88 144 88Q130 88 122 79T112 62L111 53Q111 20 201 20\",119982:\"346 463Q346 419 406 386T576 352H588L613 384L681 476Q767 594 842 651T973 708Q1016 708 1016 661Q1016 621 987 562T894 449Q802 375 696 338L682 334L665 312Q638 279 605 233T547 158T482 97Q418 46 332 5T158 -36Q87 -36 58 -11T29 48Q29 82 55 120T123 158Q144 158 154 146T164 119Q164 102 143 89T100 75Q92 75 86 76T77 80T72 82Q67 82 67 59Q67 28 98 14T166 0Q232 0 320 55T491 226Q530 279 551 305L558 314Q558 315 543 315Q417 321 353 365T289 460Q289 566 488 632Q578 662 660 665H679Q685 660 685 657T676 642Q670 633 666 629L664 628Q663 628 661 628T655 628Q606 628 546 615T426 568T350 486Q346 475 346 463ZM976 653Q976 671 959 671Q938 671 919 661T883 629T858 593T835 554Q832 548 830 545Q802 495 775 455T734 400T721 382L736 388Q876 449 946 568Q948 572 949 573Q976 622 976 653\",119983:\"354 350Q264 350 264 426Q264 442 265 448Q279 514 347 582T503 692T662 735Q719 735 774 714T882 672T983 651Q996 651 996 644Q996 639 977 612T954 581Q953 580 938 580Q909 582 884 587L869 591L870 587Q870 583 849 557T796 491T748 422Q729 391 692 313T620 188Q555 105 454 34T253 -37Q214 -37 181 -30T120 -2T92 53Q92 89 119 123T184 158Q205 158 215 146T225 119Q225 102 203 89T161 75Q153 75 145 78T135 81Q130 81 130 62Q130 39 153 24T204 5T267 0Q311 0 358 29T454 117T539 226T629 358T710 476Q726 496 744 516T778 551T807 577T828 595L836 601L785 623Q743 642 713 651T668 661T626 663Q564 663 509 644T418 596T356 535T317 475T305 431Q305 416 312 408Q323 388 369 388Q429 388 465 411T530 480Q557 526 557 565Q557 573 556 579T555 587T555 590Q555 591 568 600T584 611Q588 612 600 603Q622 581 622 549Q622 516 600 475T536 405Q454 350 354 350\",119984:\"55 377Q55 443 122 523T290 660T478 717Q533 717 575 689T618 594Q618 565 611 538T585 477T552 422T506 355T458 288L357 146Q307 68 307 31Q307 20 318 20Q326 20 331 21Q367 27 411 57T490 128L767 500L861 617H908H939Q953 617 956 616T960 609Q960 605 928 566T816 423T648 198Q587 113 571 86Q540 34 540 21Q540 20 545 20Q580 25 623 55T696 124Q702 132 704 133T722 134H739Q744 130 744 127T735 113Q713 80 655 38T548 -14Q527 -17 524 -17Q475 -17 473 47V63L462 55Q364 -17 302 -17Q235 -17 235 69Q235 88 239 105T248 135T268 171T292 205T328 251T369 304Q376 313 395 338T423 374T450 408T476 445T499 479T519 514T534 546T545 579T548 608Q548 647 522 663T460 680Q355 680 243 591T99 406Q97 399 97 383V377Q97 339 153 339Q169 339 175 340Q215 350 241 373T298 444Q333 496 349 535T367 588T374 603Q402 616 408 616Q416 616 416 608Q416 563 393 492T320 378Q233 302 140 302H132Q75 302 57 353Q55 361 55 377\",119985:\"540 717Q542 717 545 717Q562 717 562 710Q562 708 557 702T541 678T517 632T485 544T448 407Q447 405 443 388T438 366T433 345T427 321T420 299T411 274T400 250T387 223T372 197Q363 181 364 181L388 203Q476 284 527 354T620 490T718 612Q754 647 790 673T835 700Q839 700 842 691T848 672L850 662Q850 657 842 653Q803 630 768 600T699 527T653 467T610 405Q554 322 518 282T368 138Q307 84 273 51T231 9T218 -5L207 -17H175Q169 -11 169 -9Q169 -4 183 10Q227 56 258 120T302 234T330 350T356 445Q357 450 360 458L362 464Q317 434 276 434Q221 437 221 479Q221 498 240 521T259 552Q259 565 235 565Q209 565 174 546T105 482Q103 480 102 478T99 474T97 472T95 470T93 468T90 467T86 467T81 467H75Q56 467 56 475Q56 482 82 511T156 570T253 601Q289 601 311 590T334 557Q334 543 312 517T289 478Q289 471 297 471Q327 471 378 514Q384 519 390 531T412 571T451 632Q482 675 524 717H540\",119986:\"232 504Q232 492 263 492Q304 492 356 515L367 520L379 537Q443 632 515 705L527 717H543H552Q564 717 564 709Q564 705 562 703T554 694T540 677T518 643T488 589T448 504T398 385Q368 309 353 281L349 270L523 472L669 634Q726 695 737 706T757 717H765Q786 717 786 710Q786 704 776 691T738 627T675 497Q630 394 609 354T541 244Q456 120 449 111L447 107L448 108Q630 240 700 327Q734 368 788 463Q821 520 841 550T898 619T980 683Q1010 700 1018 700Q1020 700 1023 697T1026 692Q1026 688 1024 671T1020 652Q1018 650 1007 645T988 635Q940 609 902 565T842 477T781 374T699 272Q653 226 535 133Q423 47 373 -2L358 -17H342Q320 -17 320 -11Q320 -7 328 5T354 46T390 112Q416 161 439 217T488 326T564 453L589 490Q587 490 523 414T352 217T166 14Q138 -16 137 -16Q136 -17 120 -17Q106 -17 103 -16T99 -9Q99 -5 100 -3T106 3T116 14T132 35T154 72T184 129T222 212T270 327Q310 426 337 471L326 467Q278 455 243 455Q209 455 188 462T161 478T155 496Q155 508 176 533T198 576Q198 579 198 581T192 588T178 593Q151 593 100 519Q89 504 86 502T75 499H68Q46 499 46 506Q46 510 63 534T112 587T170 627Q178 629 195 629Q235 629 252 613T270 577Q270 556 251 532T232 504\",119987:\"351 351Q308 351 290 373T272 426Q272 487 329 566T478 688Q538 717 584 717Q635 717 681 696T745 620Q752 598 752 564T745 498L741 485Q742 486 769 516T825 573T889 634T962 689T1027 716Q1035 717 1060 717Q1083 716 1096 714T1120 705T1131 686Q1131 668 1109 647T1055 626Q1035 626 1026 638T1016 663Q1016 667 1020 679H1015Q971 671 886 589T728 413L688 360Q688 359 725 359H750Q762 359 766 357T770 348Q769 345 761 335T750 322Q748 321 704 321H660Q651 311 632 282T589 199T565 107Q565 25 653 20Q684 20 720 44T779 95T826 152T850 183L856 184Q861 184 865 184Q888 184 888 173Q883 163 845 117Q770 37 723 10T638 -17Q584 -14 554 17T523 101Q523 147 534 167L532 166Q530 164 526 160T518 153Q378 15 256 -15Q250 -16 226 -16Q161 -16 132 7T103 59Q103 93 129 125T194 158Q232 158 232 121Q233 118 233 113T221 96T188 77Q182 75 168 75T150 78V70Q150 43 178 32T241 20Q340 20 527 286L552 321H524Q489 321 489 330Q489 333 497 344T509 358Q511 359 545 359H579Q580 362 597 389T631 445T661 514T675 586Q675 637 645 658T572 680Q506 680 444 632T348 527T314 434Q314 388 361 388H364H366Q380 388 389 390T416 408T457 454Q487 497 505 536T526 594L529 613Q531 615 545 622T560 630Q568 630 573 613T578 577Q578 518 532 455Q504 413 453 382T351 351\",119988:\"155 280Q116 280 87 300T57 368Q57 409 87 466T192 589Q269 653 345 684T472 716Q572 716 613 675Q644 644 644 599Q644 585 643 574T637 550T629 529T616 505T600 481T578 450T554 416Q494 330 493 328L480 306Q466 278 466 256Q466 227 492 227H496Q514 227 534 234Q541 237 544 241T571 279L762 559Q777 579 792 595Q818 620 856 646T919 686T946 700Q951 700 955 692T959 677Q959 673 947 665T911 639T866 595Q816 538 749 408T640 225Q574 138 464 61T248 -17Q190 -17 144 1T98 62Q98 81 109 102T131 135Q156 156 183 158Q226 158 226 121Q226 111 224 107Q215 93 196 84T162 74Q154 74 147 77H144V70Q146 41 185 31T263 20Q363 20 493 175L507 192H504Q500 191 498 191Q484 189 476 189Q430 189 405 219T379 287Q379 294 379 299T382 311T385 322T391 335T398 347T408 363T420 379T434 399T450 422Q455 429 469 449T488 475T504 499T520 523T533 543T544 565T552 583T557 603T559 620Q559 680 467 680Q402 680 333 646T213 563T131 462T98 373Q98 343 119 330T169 317Q187 317 212 333Q242 354 291 423T352 555Q354 562 355 588Q355 612 356 612Q357 614 371 622T387 630Q391 630 397 623T409 597T415 556Q415 507 380 448T294 344Q216 280 155 280\",119989:\"221 428Q221 487 280 555T425 670T583 717H587Q641 717 665 695T689 646Q689 625 674 600T658 564Q658 550 671 541T695 530T710 528L718 539Q779 613 821 646Q894 707 964 707H970Q1010 707 1025 675Q1032 661 1032 645Q1032 626 1022 607Q1008 579 980 560T897 522Q867 512 836 505T788 496L771 493Q768 493 760 477T736 429T702 370Q700 367 698 363Q696 360 696 359H805Q809 355 809 350Q809 340 791 322Q789 321 728 321H668Q562 179 433 88L419 78L434 73Q505 54 554 54Q609 54 654 82T720 140H752Q758 134 758 132Q758 128 747 113Q711 67 657 32T552 -14Q540 -16 517 -16T480 -15T439 -3T375 27L354 38L338 30Q257 -8 191 -8H184Q154 -8 133 -5T103 1T88 10T83 19T83 29Q83 35 86 44T100 65T127 88T173 105T241 112Q286 112 342 99L360 95L372 105Q434 157 523 270L560 320Q560 321 533 321L507 322Q502 325 502 330Q502 339 521 358Q523 359 556 359H588L669 474L682 491Q676 492 665 494T647 498T632 503T614 510T596 521Q556 547 556 570Q556 585 579 618T603 663Q603 679 568 679Q510 679 452 650T354 581T288 500T262 431Q262 407 280 397T321 387Q331 387 341 390T360 398T376 409T390 423T400 435T409 447L414 454Q457 514 460 562Q460 575 461 576Q461 577 475 586T492 595Q496 595 503 588T514 572Q520 559 520 539Q520 473 452 412T308 351Q269 351 245 370T221 428ZM989 642Q989 667 953 671Q905 671 871 644Q853 632 832 604T799 554T787 531H788Q801 531 842 539T916 561Q989 592 989 642ZM198 29Q230 29 257 36T295 52L306 59Q306 63 259 73Q251 74 209 74Q177 74 158 66T134 48L130 40Q130 29 198 29\",120068:\"22 505Q22 563 94 624T271 685H280Q416 685 443 560Q447 535 447 504Q444 414 405 330L399 319L229 155Q233 154 241 153T253 150T265 145T281 135T301 119T328 93L357 64L402 92Q438 116 473 137L500 154V339Q500 528 495 593V601L559 649Q621 696 624 696L638 686L629 677Q599 650 593 638Q582 614 581 504Q580 490 580 443Q580 314 584 238Q584 235 584 224T584 210T585 199T586 187T588 176T591 164T595 152T601 137T609 121Q630 77 640 77Q661 77 703 101Q704 95 706 90L707 86V84L636 29Q618 15 601 2T574 -19T564 -25L500 121Q499 121 399 48L299 -26Q298 -26 291 -15T272 11T245 42T209 69T165 80Q120 80 58 43L48 37L40 42L32 48L122 117Q196 173 241 211Q319 280 343 327T368 447Q368 535 317 582Q264 633 199 633Q155 633 122 605T86 542Q86 518 133 467T181 387Q181 348 140 309Q113 281 73 260L64 255L50 265L59 273Q112 307 112 345Q112 363 90 387T45 441T22 505\",120069:\"48 506Q48 568 120 629T268 691Q362 691 425 594L431 585L441 594Q478 628 528 657T629 686Q665 686 687 670Q703 658 718 584T753 506Q756 505 763 505Q778 505 804 512L815 516L820 496Q820 494 808 490T774 476T732 454Q720 445 708 437L675 415L640 394L625 383Q626 382 635 382Q652 382 670 379T712 364T754 336T784 289T797 220Q797 172 776 122Q769 106 766 102T745 84Q654 11 619 -8T538 -27Q483 -27 387 10T249 47Q218 47 186 34T133 8T112 -5T104 7T97 21L196 82Q259 120 284 140Q333 181 351 214Q368 251 368 353Q368 588 228 620Q222 621 205 621Q160 621 139 596Q117 569 117 548Q117 526 162 470T208 387Q208 352 179 320T104 264Q88 256 86 256Q83 256 70 266L82 274Q134 309 134 343Q134 352 130 359Q118 377 100 401T72 439T56 470T48 506ZM453 528Q457 496 457 419L458 357L488 367Q554 390 622 425Q673 449 673 453L671 454Q669 456 665 460T657 473T648 498T639 541Q629 597 616 613Q599 633 567 633Q534 633 493 599Q471 577 457 540L453 528ZM713 176Q713 252 661 295T528 339Q512 339 494 336T466 330T455 325Q454 325 452 311T444 270T425 217L420 207L304 118L319 116Q381 111 475 74T602 37Q655 37 684 79T713 176\",120071:\"346 611Q300 611 261 604T194 584T144 555T107 519T82 481T65 443T55 410T50 383T48 367L37 372L27 378V393Q33 524 115 603Q160 648 230 666T365 685Q423 685 434 684Q745 653 745 405Q745 281 694 151L687 133L657 103Q524 -27 470 -27Q456 -27 331 18T157 64Q122 64 84 28Q67 9 57 -6L50 -16L43 -8L35 0Q35 3 46 22T83 74T141 133H154Q208 136 253 161T299 230Q299 259 277 290T232 348T209 392Q209 434 254 479T358 556L368 561L382 550Q382 549 381 548T377 545T371 541Q353 527 326 496T298 444Q298 430 343 365T389 277Q389 240 353 202T267 136L252 127Q304 118 400 83T513 47Q548 47 582 79T635 145Q671 208 671 323Q671 390 651 441T599 524T523 576T436 603T346 611\",120072:\"301 564Q240 564 203 507T165 361Q165 280 190 218T260 119T358 64T474 46Q491 46 499 47L511 48L628 106V80L499 -5Q498 -6 497 -7T494 -10T490 -12T485 -15T478 -17T468 -19T456 -21T439 -22T418 -23T392 -24Q252 -20 169 67T86 315Q86 409 124 491Q128 500 139 508Q211 560 272 591L293 601L325 585L338 594Q374 617 422 639T502 674L532 685Q533 685 540 663T557 614T574 581Q580 575 591 575Q600 575 616 580T634 585V564L623 559Q572 535 532 529L522 527Q491 547 442 627Q442 628 440 627T435 624T428 620Q410 610 405 597T399 559V553Q399 534 409 487Q419 431 427 369L476 400Q526 431 526 432Q531 426 537 420Q565 382 602 359Q611 353 610 352Q609 351 575 332T537 312Q536 312 505 335T463 358Q451 358 439 352T425 337Q394 243 263 223L251 221L243 229L235 236L245 239Q274 247 303 266Q320 277 325 290T330 336Q330 394 315 451T300 531Q300 549 303 561Q303 564 301 564\",120073:\"198 617Q177 617 159 609T128 587T106 557T91 524T82 494T76 472L75 463Q74 463 67 468T59 474Q59 488 63 510T80 564T114 622T170 667T253 686Q272 686 295 680Q330 672 384 645T468 598Q498 580 524 580Q549 580 595 626L612 643V616L599 599Q522 500 482 500Q466 500 435 514L420 521Q388 516 349 486T309 415Q309 396 323 366T352 315T367 294Q367 293 375 301T398 322T429 352L490 410Q537 355 542 332Q542 330 531 315T510 286L499 273Q479 313 449 313Q437 313 419 303T390 282L378 271L394 250Q444 183 470 129Q484 96 484 71Q484 -19 402 -86T223 -153H220Q175 -153 137 -120Q103 -89 103 -8Q103 12 106 40T109 96Q109 132 103 146T72 161Q46 161 16 143L14 154L11 165Q88 219 143 219Q163 219 177 197T192 127Q192 102 186 65T179 4Q179 -60 210 -88T272 -117Q319 -117 362 -75T405 33Q405 72 363 139T278 271T235 368Q235 385 243 404T264 439T292 472T324 500T353 522T374 538L382 543Q382 544 351 562T274 598T198 617\",120074:\"373 560Q373 543 378 509T388 448T394 421Q396 421 416 433T474 474T548 537L538 543Q481 570 452 628L487 659Q521 690 522 690L526 684Q529 677 535 667T551 646T575 625T607 608Q617 606 621 606Q644 606 660 622L664 600L497 455Q495 453 527 453H546Q628 453 665 407L666 406Q710 357 710 297Q710 196 631 109L621 98L577 69Q471 -7 452 -15Q413 -26 370 -26Q239 -26 155 59Q66 148 66 319Q66 442 113 505L191 552Q269 600 270 600H271Q273 600 280 596T293 589T299 586Q300 586 357 623Q413 659 415 659L426 649Q373 604 373 560ZM219 228Q305 262 305 329V343Q305 384 294 434T282 519Q282 562 287 567Q287 569 286 569Q222 556 191 520Q144 464 144 362Q144 213 228 128T420 42Q514 42 568 103T622 255V260Q622 320 578 357Q526 400 453 400Q434 400 410 396L399 394L400 378V372Q400 330 388 301T348 254T305 232T252 217Q245 215 242 214L234 213L226 220L219 228\",120077:\"194 601Q175 601 155 590T121 564T95 533T76 506L69 495Q55 503 55 507Q55 509 60 521Q87 586 132 636T222 686Q251 686 289 660T363 607T422 580Q442 580 466 588T506 604L522 612V591L487 574Q371 517 359 517H357Q332 522 280 561T194 601ZM383 39Q383 96 356 203T329 361Q329 364 329 370T330 378L331 388L339 399Q362 429 394 462T446 513T469 531Q470 531 477 527T484 521L474 509Q411 434 411 379Q411 341 434 223T458 82Q458 1 390 -69T239 -139Q191 -139 162 -123T123 -83T108 -30T101 23T88 64T52 80Q27 80 -4 64L-10 80Q-5 85 13 98T63 128T118 144Q149 144 163 129T179 93T182 38T187 -19Q199 -96 278 -96Q294 -96 309 -91T343 -73T372 -31T383 39\",120078:\"154 37Q219 41 219 142Q219 203 190 302T160 434Q160 445 172 472T209 534T269 602T354 657T460 680H472Q576 680 618 617V599Q618 578 615 555T608 517T602 501Q596 495 587 495Q586 495 586 499Q586 500 586 505T585 513Q567 628 415 628Q384 628 356 621T302 596T260 546T244 466Q244 416 258 377L261 367L276 382Q294 401 317 422T386 471T468 500Q500 500 518 477T544 422T554 386Q555 382 560 376T576 364T601 357Q612 357 623 361Q623 360 621 351T617 340L541 305L465 272Q469 271 476 270T488 266T502 260L512 255L519 242Q533 211 546 157T564 93Q584 53 617 53Q649 53 682 74V54L675 46Q646 17 612 -5T554 -27Q546 -27 538 -23T517 -9T494 28T478 91Q465 172 448 200T378 228Q337 228 289 207L288 196Q288 160 284 138Q283 125 262 98Q185 1 112 -24L102 -27L91 -25Q47 -13 17 31Q17 33 49 69L80 106Q111 37 154 37ZM421 434Q411 436 405 436Q370 436 336 407T275 337L267 325L271 313Q288 257 288 234Q289 234 395 276T502 319Q501 320 499 323T493 330T485 345T475 371Q473 378 468 388T449 416T421 434\",120079:\"251 231Q251 254 206 341T160 468Q160 529 238 605Q313 677 425 685L432 686Q440 686 445 686Q520 686 545 657T571 576Q571 548 568 517T564 480Q564 466 572 460T608 452H623V431L619 430Q618 430 611 428T591 423T566 417L516 404Q497 415 491 419T480 433T475 461Q475 470 477 498T480 546Q480 561 480 569T474 592T459 615T429 631T379 638Q322 638 283 606T239 526Q237 480 280 394Q319 310 320 268V250Q308 235 244 169L203 128H210Q215 128 256 112T357 80T466 64Q526 64 564 88T625 186L629 196Q643 187 644 186Q618 70 604 41Q577 -15 513 -24Q496 -26 476 -26Q418 -26 344 -3T211 45T133 69Q115 69 97 50T65 7T49 -20L45 -16Q41 -11 37 -6T33 0Q33 8 66 69T111 134Q251 156 251 231\",120080:\"687 578Q690 586 719 612T794 665T877 692Q909 692 926 670T953 614T973 570Q983 561 1000 560Q1023 560 1048 569V553L1034 546Q1003 528 972 504T933 466Q905 403 905 264Q905 205 909 172T920 126T940 91Q951 74 959 74T997 87L1027 100V79L956 27Q940 15 922 2T894 -19L885 -26Q883 -26 854 27L825 80V192Q826 314 830 341Q831 345 833 356Q840 398 844 404Q871 444 920 489L917 491Q914 493 911 495T903 501T898 508Q893 516 877 562T852 616Q840 628 818 628Q751 628 702 541L697 532L700 515Q708 467 708 419Q706 348 690 276T662 169T643 126L634 116Q626 105 611 87T581 51L522 -22L514 -15Q470 21 452 21Q431 21 394 -16L384 5L386 9L426 60Q449 87 460 95T486 104Q487 104 491 104T497 103Q514 99 541 81L559 69Q595 96 606 169T618 350Q618 486 598 543T517 601Q484 601 458 570T432 523Q432 516 434 492T436 443Q436 250 369 133L363 122L280 50Q207 -16 192 -27L182 -18Q136 26 106 26Q83 26 62 9T37 -16L27 0L33 10Q41 22 54 39T94 81T143 106Q178 106 225 62L235 53Q283 82 307 117Q352 190 352 359Q352 408 345 451T320 534T267 597T183 621Q159 621 147 617T120 598Q97 574 96 556Q96 528 143 469T191 377T161 311T102 262T70 245Q69 245 59 252T49 260L56 264Q63 268 73 275T94 291T111 312T118 338Q118 355 95 384T50 446T27 506Q31 567 101 626T255 686Q297 686 330 671T382 632T409 595T421 572V571L430 580Q454 610 496 634T588 659H590Q655 659 683 585L687 578\",120081:\"112 334Q112 356 70 410T27 497Q27 553 94 619T229 685Q230 685 236 685T246 686Q303 686 349 654Q373 636 392 607T419 558L426 538L454 576Q474 604 486 618T520 651T569 678T633 686Q668 684 687 673T713 651T730 609Q730 608 732 600T736 588T741 578T747 568T754 561T765 555T779 553Q789 553 817 562Q819 557 819 555V547L790 526Q743 492 730 479T712 447Q697 369 697 281Q697 166 726 108Q741 76 755 68Q759 66 767 66Q789 66 825 93V82Q825 71 822 70Q821 69 763 27T701 -18L692 -25L668 15Q662 25 650 45T635 70L627 85V107Q627 122 626 162T624 285Q624 381 632 398Q638 409 651 425T675 454T696 477T707 489H696Q683 490 679 492T669 507T653 551Q642 588 627 608T584 628Q572 628 560 625T538 616T519 602T502 586T486 568T473 549T463 532T454 517T448 504L445 497Q437 480 437 474Q437 472 439 461T444 421T446 348Q446 205 405 124Q396 105 392 100T368 78Q312 32 278 9T235 -18T214 -22Q191 -22 170 -10T139 12T129 25T160 66T192 105Q193 102 194 98T200 83T213 64T233 49T261 42Q303 42 339 90Q373 134 373 268Q373 397 339 493T235 618Q215 628 191 628Q155 628 126 604T97 548Q97 524 120 493T168 431T192 381Q192 346 164 318T86 260L70 250L54 266L63 272Q112 300 112 334\",120082:\"428 596Q412 596 386 595T350 593Q289 593 270 625Q267 632 267 640Q267 656 280 672T312 705T336 729H343Q351 729 351 728Q342 710 342 703Q342 683 382 676T493 662T604 643Q648 627 677 599T720 535T739 466T744 392Q744 317 732 260T696 166T659 116T621 83Q617 80 615 78Q485 -27 377 -27Q320 -25 272 -9T187 21T122 36H116Q65 36 29 -13L27 -15L12 0Q12 1 32 26T76 78T109 109Q145 123 166 150T187 207Q187 244 134 318T80 412Q80 454 112 498T176 566T213 590Q216 590 224 585L234 580L225 573Q216 566 207 557T188 536T172 511T165 484Q165 448 213 368T261 259Q261 241 252 219T228 179T200 146T176 122L167 112Q170 111 174 111Q188 110 233 91T339 55T453 37Q508 37 556 68T626 152Q655 219 655 328Q655 543 532 582Q484 596 428 596\",120083:\"112 339Q112 354 91 380T49 438T28 497Q28 565 95 628T242 692Q261 692 277 689T307 682T331 670T351 655T367 637T379 619T388 600T395 582T401 565T405 550Q409 554 422 570T453 603T500 641Q573 692 637 692Q656 692 670 686T692 672T705 647T713 618T718 584Q720 568 721 562T728 546T742 534T768 530Q776 531 782 532T791 535T796 536Q799 536 804 521Q801 519 789 513T764 499T738 480Q697 447 680 414Q677 407 677 396Q677 370 713 312T750 210Q750 125 686 57T560 -11Q540 -11 475 13L410 37V31Q410 -9 412 -50T417 -118T420 -150Q419 -150 373 -184T326 -218L305 -208Q305 -207 307 -196T314 -165T322 -116T328 -46T331 43V63L318 66Q270 80 250 80Q233 80 213 70Q183 57 138 -3L128 -16L118 5L125 20Q193 154 282 154Q309 154 331 146V287Q331 444 327 469Q321 522 301 560Q284 590 251 611T184 633Q146 633 119 607T92 550Q92 539 94 534Q100 516 143 460T186 386Q186 366 170 336T119 281Q102 264 70 250L49 260L56 266Q64 271 72 278T90 296T106 317T112 339ZM602 345Q602 357 608 371T622 397T642 421T661 441T678 456L686 462Q663 473 652 486T639 512T634 553Q631 594 624 608T593 631Q587 632 567 632Q539 632 497 600T416 497L410 484V122L467 103Q481 99 502 92T533 82T557 75T578 69T594 66T610 64Q647 64 672 87T697 144Q697 180 650 250T602 345\",120084:\"428 596Q412 596 386 595T350 593Q313 593 291 605T268 638Q268 644 269 648T274 658T284 669T301 689T326 718L336 729H343Q351 729 351 728Q342 710 342 703Q342 683 382 676T493 662T604 643Q744 592 744 398Q744 299 708 213T646 104L603 68L614 55Q670 -5 710 -5Q726 -5 744 1T772 14L781 20Q782 20 782 7V-6L771 -13Q673 -69 665 -69L647 -63Q552 -30 514 8H512Q509 8 500 3T471 -9T428 -23Q405 -27 377 -27Q305 -24 228 6T124 36Q69 36 27 -16Q23 -13 19 -8L11 0L27 20Q93 102 109 109Q145 123 166 150T187 207Q187 244 134 318T80 412Q80 454 112 498T176 566T213 590Q216 590 224 585L234 580L225 573Q216 566 207 557T188 536T172 511T165 484Q165 448 213 368T261 259Q261 241 252 219T228 179T200 146T176 122L167 112Q170 111 174 111Q188 110 233 91T339 55T453 37Q508 37 556 68T626 152Q655 219 655 328Q655 543 532 582Q484 596 428 596\",120086:\"750 276Q750 141 645 57T378 -27Q224 -27 146 67Q66 163 66 307Q66 361 80 412T127 515T217 609T356 676L388 684L420 692L442 681Q545 625 586 608T654 591Q688 591 710 609T737 646L742 665Q742 665 756 654L752 642Q736 594 706 566T621 515L607 510Q580 513 528 542T421 599T335 627Q272 627 214 569Q139 500 139 373Q139 308 159 247T217 136T316 56T455 26Q520 26 566 43T634 90T666 148T676 207Q676 264 649 297T580 338Q574 339 552 339Q516 339 442 325T327 310H324Q303 310 290 312T259 328T232 369Q230 375 230 390Q230 426 259 461Q286 488 338 507Q351 498 351 495L346 492Q342 490 339 488T330 482T320 473T312 462T305 447T303 428Q303 368 366 368Q393 368 487 388T613 409Q656 409 696 385T748 306Q750 294 750 276\",120087:\"289 686Q338 686 439 668T565 649Q606 649 641 672Q656 683 664 690T674 700L675 701Q676 698 676 692V681L641 636Q608 591 602 588Q577 575 528 575Q490 575 438 583L426 585L416 578Q335 520 335 465Q335 437 393 366T452 259Q452 226 406 171Q387 146 351 115L341 106L358 97Q438 58 475 58Q525 58 598 124L608 133Q617 119 617 118Q617 114 606 103Q513 0 448 -27L438 -25Q401 -19 337 14T234 48Q186 48 122 -3L112 -11L106 -3L101 5L110 15Q160 63 209 105L224 117H310Q384 163 384 210Q384 238 329 303T263 398Q262 400 262 404Q262 427 290 476T368 580Q383 596 381 596Q315 622 228 622Q159 622 118 593T76 516Q76 482 96 461T139 431L107 399L75 367Q34 403 34 472Q34 525 64 572T148 652Q207 686 289 686\",120088:\"160 247Q160 291 110 382T59 505Q59 542 106 597T207 690L218 697L229 682Q229 680 216 669T187 644T158 604T144 552Q144 526 165 482T207 387T228 291Q228 277 228 267T224 247T219 232T210 217T199 202T184 184T166 163L118 107Q124 105 132 105T160 98T220 77Q298 47 317 47Q354 47 409 105Q444 142 451 161T458 244V277Q458 339 455 457T447 596L575 686L591 676L583 668Q550 632 541 587T532 449V372V298Q532 198 550 147Q572 79 605 79Q617 79 631 84T656 95L665 100V79L595 27Q578 15 560 2T532 -19L523 -26Q522 -26 490 42L458 111L397 50Q389 42 374 27T355 8T340 -5T325 -16T311 -22T294 -26T274 -27Q232 -25 152 6T35 37Q28 36 19 30T4 18T-8 4T-16 -5Q-25 10 -25 11T-20 18Q-5 34 15 57L54 101Q70 103 86 116Q94 121 113 140T137 166Q160 201 160 247\",120089:\"54 266Q118 307 118 339Q118 360 74 413T27 493Q26 530 59 578T133 651Q187 686 256 686Q299 686 332 673T382 640T409 600T424 567T429 553Q431 553 463 586T542 653T624 686Q663 686 715 652T798 617Q812 617 825 622V606L815 599Q785 576 762 546Q724 495 724 432Q724 397 737 317T750 217Q750 148 711 96Q697 75 639 34T578 -10Q563 -21 555 -23T522 -26Q458 -26 363 29Q253 89 211 89Q192 89 173 83T139 67T114 49T96 34L90 27L80 43L95 59Q121 87 148 110T191 143T213 154Q261 154 300 195Q328 222 340 267T352 406Q352 562 255 611Q222 627 187 627H182Q143 627 115 598Q96 579 96 559Q96 528 144 470T192 381Q192 348 156 314T80 256L70 250L54 266ZM727 548Q701 550 650 583T567 617Q560 617 554 615Q532 610 501 580T445 501L437 485V465Q432 326 378 223L294 150Q321 143 421 87T560 31Q608 31 634 64Q660 102 660 198Q660 226 655 292T650 387Q650 418 658 452L660 462L735 548H727ZM264 150Q265 151 263 151H261Q261 150 264 150ZM280 150H276V149Q280 149 280 150\",120090:\"32 501Q35 564 103 625T264 686Q326 686 365 652Q402 618 420 564L441 585Q486 630 539 670L559 686L572 672Q637 606 665 559L682 576Q787 686 845 686Q877 686 929 656T992 623Q999 621 1016 621Q1041 621 1054 628L1051 617L1047 606Q1042 602 1037 597Q983 557 969 522T954 434Q954 394 961 336T968 221Q968 201 966 184T963 155T956 131T948 113T936 96T923 82T906 66T887 50L816 -2Q815 -3 810 -6T801 -11T791 -16T777 -20T759 -23T735 -25Q691 -25 619 4T505 37H496L463 21Q420 0 389 -20L378 -27H362Q316 -27 275 -9T202 28T150 46H146Q114 46 59 -5L48 -16L41 -6Q40 -4 38 -2T34 2L33 4Q33 8 77 54Q111 87 142 112L154 122H166Q239 127 288 182Q346 244 346 406Q346 489 326 537T259 610Q227 628 195 628Q155 628 128 606T101 549Q101 517 146 465T192 382Q192 348 156 310T85 254L75 250L64 258L55 266Q56 267 74 276T105 301T118 339Q118 362 75 413T32 501ZM952 547Q927 555 877 586T796 617Q744 617 682 525L676 516L677 498Q678 486 678 425Q678 301 652 206Q649 195 613 151T577 102Q577 100 582 100Q618 100 720 51Q761 32 790 32H794Q843 32 869 83Q884 110 884 189Q884 233 879 294T873 400Q874 433 879 451T889 478T915 507T952 547ZM241 105Q249 98 263 88T317 60T393 42Q478 42 547 109Q607 171 607 358Q607 371 607 380T604 417T595 467T577 517T546 566T500 601L479 580Q449 550 433 526L426 516V503Q426 311 357 200L352 191L296 149Q241 107 241 105\",120091:\"96 511L78 527L149 603Q207 666 227 686L237 685Q278 680 306 667T351 631T376 588T395 533L400 516L406 527Q439 600 523 653Q538 664 587 688Q589 688 596 672T613 635T629 606Q643 588 665 588Q677 588 693 596L709 603V585L607 526Q583 536 554 564T512 614Q461 571 435 507T405 381V367H581L563 347Q561 344 558 341T553 335T549 330T546 326L545 325H541Q537 325 488 329T411 334H405V325Q405 198 454 123Q497 54 568 54Q594 54 619 64T660 84L676 95V74L565 -16L553 -20Q528 -27 512 -27Q492 -27 475 -21T444 -5T418 19T398 47T382 77T371 105T363 128T358 145L357 151Q354 151 339 136T294 91T232 37Q152 -22 113 -22Q90 -22 69 -9T38 17T28 32Q28 33 58 68L86 101Q94 81 115 64T165 47Q206 47 249 84Q302 128 325 222Q334 263 336 312V334H312Q198 334 163 324H161Q162 326 182 348L198 367H336V398Q333 508 308 550Q295 570 274 585T227 601Q204 601 181 589T145 565T115 533T96 511\",120092:\"123 345Q123 358 75 415T27 496Q27 533 63 578T121 639Q181 685 256 685Q305 685 332 676T384 635Q419 588 425 542Q468 585 526 628T618 686Q632 667 658 645T704 609T724 594Q740 512 740 385V375V361Q740 128 682 -3Q656 -64 554 -141T361 -218Q319 -218 287 -203T243 -173T230 -150Q230 -148 267 -109L304 -69Q311 -115 341 -142T411 -170Q474 -170 534 -119T624 11Q660 111 660 312Q660 447 633 528L612 549Q578 583 552 596L543 601L528 592Q501 574 483 558Q454 528 436 494L431 484V473Q431 330 376 230Q366 213 359 206T306 159L250 112Q278 105 327 82T399 58Q421 58 440 69T471 92T484 104H485L493 90L480 73Q453 39 429 13Q393 -22 372 -22Q342 -22 260 15T153 53Q97 53 48 -16L38 5Q46 22 74 54T128 108L143 122H155Q226 127 275 168Q352 236 352 399Q352 501 309 564T197 628Q156 628 129 607T102 553Q102 517 147 463T192 383Q192 323 75 250L59 266Q123 314 123 345\",120094:\"86 363Q86 365 128 391T212 444L255 470Q256 470 263 465T283 453T308 442Q338 431 346 431Q350 431 358 436L414 465L421 459L418 434Q404 339 404 262Q404 147 408 119L425 97Q443 74 444 74L467 86L491 97Q492 97 497 83L436 28Q377 -26 374 -26L331 46L329 91L155 -35Q152 -35 114 10T68 65L67 86Q66 100 66 156Q66 177 66 198T68 236T71 268T74 296T77 320T80 338T83 351T86 360V363ZM314 365Q285 367 255 374T206 386L187 392Q181 392 172 376T154 311T145 197Q145 124 151 118Q156 110 187 78L208 56H214Q221 57 253 76L308 109L329 123V136Q328 143 328 257V365H314\",120095:\"177 427Q177 364 181 364Q184 364 192 370T223 395T271 433Q317 469 323 469Q325 469 338 462T377 440T432 413L440 409L441 396Q441 394 441 372T442 334Q442 203 425 108L423 97L400 83Q347 49 296 21T222 -19T196 -31Q192 -29 149 12T87 71L89 89Q100 155 100 319Q100 500 94 627Q94 632 94 638T94 648T94 656T93 662V664Q93 668 97 669T106 670H110Q114 653 118 633L127 596Q127 595 132 597Q136 599 195 642L255 685L272 673Q269 670 256 659T233 637T211 609T190 565T179 508Q177 494 177 427ZM295 377L274 385Q273 385 264 381T242 370T223 361Q213 355 188 340L178 333V123L198 103Q259 42 285 42Q299 42 314 55T339 85Q363 132 363 232Q363 310 358 343V349L345 355Q330 363 295 377\",120096:\"72 208Q72 323 84 361Q84 363 167 414Q248 466 250 466Q255 465 260 465Q283 460 307 450T344 430L357 422L306 343L301 342L296 340Q267 362 247 372T216 384T177 390Q154 349 154 238Q154 220 156 158V145L168 132Q179 121 208 93T244 59Q245 58 246 58Q255 58 302 83T350 108L352 104Q355 100 356 96L358 92Q358 91 274 32T187 -29L177 -20Q160 -6 120 36T77 84Q77 87 75 118T72 208\",120097:\"13 542Q13 544 77 576T147 609Q154 609 185 598T283 551T414 464L427 454V440Q427 436 427 412T428 372Q428 315 426 270T418 197T409 152T400 121T394 103L304 35Q285 21 261 2T225 -25L214 -33Q149 7 97 59L76 80L75 91V171Q75 221 76 254T79 299T80 313Q80 315 78 321Q78 323 78 326L77 330Q79 336 132 384T211 447L219 445Q221 445 224 444L228 443Q229 443 228 441T221 432T206 415L191 395Q175 378 162 339Q152 306 152 250Q152 217 159 140V134L171 121Q194 99 235 74T284 48Q296 48 310 75T337 156T349 267Q349 346 336 400L315 420Q246 489 176 525Q127 545 94 545H73L27 527L13 542\",120098:\"353 103Q353 97 358 87L337 71Q293 38 247 6Q191 -30 189 -30Q188 -30 173 -16T130 26T76 85L74 99Q70 139 70 190Q70 228 73 271T79 338T84 365L94 372Q105 378 126 392T166 417L246 467Q283 417 349 369L364 358L355 349Q249 249 169 180L151 166L152 152V139L165 126Q186 105 215 84T260 62Q267 62 309 82L353 103ZM267 323Q246 337 230 350T204 371T189 385T179 394T174 397Q149 381 149 219V211Q151 211 171 223T220 258T268 299L282 313L267 323\",120099:\"128 387Q128 391 112 456T92 546V555L101 568Q133 617 183 670L193 681L204 673Q238 648 262 648Q276 648 292 656L302 661L308 653Q308 652 278 618L249 585H234Q194 587 159 595Q158 595 156 596H153L150 597Q151 593 152 581T154 564T157 547T164 524T176 494Q199 436 203 400V392H207L323 386Q323 384 309 368L296 351H203V176Q201 -9 198 -32Q194 -61 166 -114Q158 -129 153 -138Q114 -214 110 -221Q105 -221 98 -220L87 -219V-216Q88 -215 106 -150T124 -82Q128 -73 129 155V351H30L64 386H96Q128 386 128 387\",120100:\"27 -144L17 -131L82 -75L146 -20L126 6Q99 37 92 48L78 65L77 79Q75 103 75 158Q75 217 78 268T86 343T91 368Q92 370 109 382T157 413T222 452Q240 465 249 469L251 470Q296 443 350 428L365 424L437 465L442 459Q442 456 441 453T437 444T432 424T427 385T423 317T421 215V133L423 119Q423 111 455 -17Q455 -21 380 -108T290 -201Q290 -202 284 -204T269 -207T252 -209Q172 -209 75 -135L62 -126Q60 -126 44 -135L27 -144ZM349 351Q267 359 178 389Q177 387 173 376T166 358T161 337T157 303T155 259Q155 195 159 135L160 124L170 112Q180 101 204 77T230 53Q231 53 286 88L340 123V141Q340 235 348 329Q348 334 348 339T348 348L349 351ZM364 -59Q364 -37 358 -1T347 64T341 93Q336 93 252 28T149 -57Q226 -134 293 -134Q325 -134 344 -118T364 -69V-59\",120101:\"88 427Q88 486 87 545T84 634T81 667Q81 673 82 673T89 676H94L117 600L200 661Q208 667 218 674T233 684L238 688L254 678Q222 646 216 637Q164 572 164 483V442V371Q187 390 244 431T312 478Q344 446 411 423L428 417L429 396Q434 297 434 218Q430 8 406 -34Q346 -111 262 -195L251 -205L249 -203Q248 -203 244 -199T236 -193Q226 -183 227 -182Q228 -182 244 -169T278 -140T301 -121Q330 -89 340 -22Q355 60 355 171Q355 200 353 244T348 321T344 354Q333 363 307 376T260 390Q241 390 179 350L164 341V121Q180 96 201 66L213 50Q210 46 172 11T131 -24Q130 -24 123 -11T102 25T77 65V78Q80 104 84 227T88 427\",120102:\"72 617Q72 618 102 645T133 673H134Q134 668 175 627L187 615L130 555L116 568Q72 615 72 617ZM27 369Q21 376 14 382L26 392Q83 440 119 474Q158 435 169 427L179 420L176 395Q166 302 166 227Q166 171 174 139Q178 119 186 103T202 81L208 75Q255 100 261 100Q262 100 264 92T267 83Q267 80 208 30T145 -20Q143 -20 118 17L91 55Q98 117 98 193Q98 339 88 369Q71 390 68 390Q63 390 39 376L27 369\",120103:\"101 644L132 672L145 657Q155 642 169 628L182 614L169 600Q148 579 140 570L125 555L112 568Q109 570 91 592T72 615Q72 617 101 644ZM19 -208Q-9 -185 -9 -183Q57 -134 80 -106Q103 -81 110 -19T118 179Q118 294 113 329T86 383Q78 389 76 389Q73 389 57 379L39 367Q26 380 26 381L33 387Q40 393 53 405T79 428L130 474Q147 457 186 428L195 422L196 376Q196 130 192 58T174 -35Q172 -39 104 -114T19 -208\",120104:\"93 348Q93 379 90 503T87 658V670Q87 671 94 671L100 672L112 636Q124 603 124 600L144 616Q196 659 234 682L246 689Q252 686 256 685T268 680L254 667Q225 641 211 626T184 579T168 505V497L178 504Q203 523 237 544L300 584L310 573Q359 522 359 481Q359 476 359 472T358 464T355 456T351 448T346 440T340 433T332 424T323 414T312 402T299 389L255 343L300 342H346L320 309H177V128L193 113Q214 92 244 68L254 60L303 84Q351 108 352 108L362 96Q355 85 277 30T194 -25L170 -4Q146 18 120 41T89 68Q94 85 94 168Q94 184 94 218T93 268V309H58L24 310L51 342H93V348ZM172 342Q217 342 252 374T287 445Q287 472 255 504Q242 517 241 517Q202 498 187 468T168 365V342H172\",120105:\"221 76L267 99Q268 98 269 96T271 88T270 82L262 76Q255 69 241 57T214 34L148 -20L98 56L99 89Q107 247 107 373Q107 494 101 621Q101 653 99 659V665L106 668L113 672L118 655Q122 642 131 617L138 597Q140 597 157 611L240 670L264 685Q265 685 270 680T276 674T269 667T247 647T219 617Q197 587 186 551T173 493T171 438Q171 376 175 282T179 147V117Q184 109 201 93T221 76\",120106:\"20 367L8 379Q9 380 63 425T118 471Q130 460 143 446L168 421V398L169 376L295 475Q362 433 415 418V399Q415 380 416 380T437 394T484 428T529 462L544 474L556 467Q590 449 614 438T646 424L653 421L665 417L664 412Q664 411 664 407T664 397T663 384Q660 342 660 335Q658 303 658 245Q658 186 660 152L661 126L669 115Q680 96 697 79L707 83Q716 87 723 90T735 96T741 100T746 102L747 103V102L750 95Q753 88 753 87L631 -18Q630 -17 622 -3T589 43L576 60L579 72Q592 146 592 218Q592 265 584 321Q581 345 578 350T560 363Q535 376 496 386L481 390Q475 387 425 358L415 351V238V157Q415 142 415 135T417 120T421 110T430 98T441 81L465 47Q462 44 458 41T443 28T420 8L380 -26L333 47L336 62Q339 77 342 109T345 184Q345 223 341 285T333 348Q322 364 258 382L240 388L169 347L168 240Q168 118 171 110L174 106Q178 101 183 93T195 78L217 48Q217 47 196 30T154 -5T133 -21L130 -16Q127 -10 122 0T111 19Q89 56 89 60Q95 76 95 153Q95 239 88 337V365L62 391L20 367\",120107:\"31 368Q20 379 20 380T72 427L121 470L129 463Q137 455 155 441T176 425V367L320 475L329 469Q351 454 385 437T434 417L432 402Q429 362 429 231V128L439 111Q442 107 445 102T449 95T453 90T456 86T459 84T463 82T467 82Q468 82 489 93T511 105T514 95V88L395 -18L340 65L341 77Q347 111 348 178Q348 343 343 353V358L332 363Q298 377 264 382Q260 382 254 382L249 383Q247 383 211 362L176 341V229V147Q176 134 176 127T177 115T179 106T183 99T189 91T197 81Q201 76 206 69T214 57L217 53Q217 52 175 15T132 -22Q132 -20 114 5T88 41Q84 45 84 50Q94 116 94 203Q94 227 93 263T92 324L90 364L67 388L50 378Q32 368 31 368\",120108:\"67 121Q70 265 84 359V364L97 371Q137 394 177 421T238 464T260 480L278 468Q295 457 327 442T394 418L406 414Q412 388 412 300Q412 263 410 228T405 170T399 130T393 103T391 92L381 86Q274 19 165 -28L161 -24Q157 -21 151 -15T136 -2T118 14T101 30T86 46T74 60L67 68V121ZM335 278Q335 286 335 303T334 335L333 349V356H326Q288 360 208 388L183 397Q178 393 172 383T154 333T142 239Q142 192 151 134Q152 124 155 120T175 99Q197 77 219 64T251 47T267 44T281 52T302 80T320 124Q335 182 335 278\",120109:\"23 25Q15 33 12 38L35 59Q82 102 87 105V351L68 378Q42 414 42 422Q42 437 67 472T114 530L125 541Q126 541 132 537T138 532Q121 507 121 488Q121 453 160 413L167 405L166 390L165 372Q169 372 233 421T305 478Q307 479 315 472Q395 421 423 415Q424 415 424 415T425 414L426 410Q426 407 426 401T426 388Q430 335 430 272Q430 139 408 80Q407 78 340 22L273 -33Q200 23 165 23Q164 23 164 -32Q165 -89 168 -155V-170L93 -212L78 -203Q85 -48 87 16V47H79Q53 44 23 25ZM319 41Q346 94 349 212Q349 278 343 343V351L330 357Q318 363 270 381L255 387L245 383Q212 370 178 345L166 336V287Q165 260 165 166V94H175Q219 90 299 51L319 41ZM132 57L129 60Q130 58 132 57ZM158 29Q159 29 155 34T145 45T138 50Q155 29 158 29\",120110:\"399 19Q399 -123 407 -174V-179L332 -219L322 -210L312 -202L314 -185Q320 -83 323 54V95L311 85Q255 40 162 -19Q146 -29 145 -27Q140 -22 103 20L63 65V73Q61 83 61 115Q61 122 61 135T60 154Q60 263 79 353L83 368L94 375Q123 391 147 405T186 429T212 446T229 458T238 466T243 470T247 471L260 464Q274 457 295 448T330 434L341 432L410 479L412 478Q414 476 416 475T419 473L417 461Q399 358 399 19ZM316 367Q287 370 252 377T196 391L176 397H175Q173 397 166 382T149 314T139 187V158Q139 138 141 132T155 114Q158 111 160 109Q210 58 211 58L218 62Q226 67 240 75T266 91L319 124V196Q319 334 325 361V367H316\",120111:\"357 398Q364 398 375 403L386 408Q386 404 387 400V393L369 377Q361 370 350 360T336 347T327 340T316 336T303 335Q270 335 234 371L224 379Q220 375 214 370T198 355L182 340V243Q182 164 183 152T189 129Q195 117 211 100T239 72T254 60T298 81Q342 101 343 101Q344 100 345 92T346 82L200 -21Q174 -5 117 55L97 75L99 92Q106 147 106 196Q106 216 104 282T97 355Q95 359 95 361Q95 364 77 378L65 387L48 380Q30 372 29 372Q28 371 23 375T17 380Q17 384 50 415T107 467L115 474L128 461Q171 421 182 414V382L235 425Q247 435 261 446T283 462L290 468L295 460Q335 398 357 398\",120112:\"272 33Q284 33 290 70T296 138Q296 181 290 198T262 230Q257 232 246 232Q231 232 218 227T156 194L108 167L101 176Q90 192 75 219L69 230V284Q69 346 70 357V377L146 427Q181 450 202 464T223 477L225 476Q227 475 229 474Q231 472 242 466T270 450T296 431Q309 418 326 418Q342 418 361 429T392 450T403 459Q406 445 406 442Q406 440 384 421T338 382L316 363Q315 362 310 362Q292 362 251 371T173 396Q156 403 155 403Q143 386 143 342Q143 305 150 278T168 244Q171 242 181 242L190 243L315 300Q330 295 357 274Q358 273 362 270T366 266T369 261T372 253T373 239T374 217T374 185Q374 157 372 133T368 98T363 71T358 50L336 40Q288 20 255 2T211 -22T198 -29L190 -22Q181 -14 168 -3T138 19T104 38T70 46Q50 46 32 37T3 20T-9 11L-18 23L-1 41Q46 89 62 99T112 110Q141 110 157 103T225 62Q268 33 272 33\",120113:\"228 640L242 627L227 613Q213 599 211 593T203 553Q197 500 196 435V389H301L272 353H195V274Q195 178 196 159L197 123Q249 71 273 68H280L312 83Q344 99 345 99Q348 99 348 78Q348 76 314 52T246 4L212 -20Q211 -20 164 19T112 62Q112 122 113 196Q113 228 113 262T114 318T114 341V353H27L62 389H116L117 431V558L228 640\",120114:\"171 315Q171 252 165 199T153 124L147 103Q147 102 196 80L244 57L335 107V116Q339 161 339 268Q339 315 338 351T337 412V424L420 468Q424 465 427 461L424 435Q412 331 412 226Q412 170 415 145T434 96Q442 84 452 83Q461 83 492 96L506 102Q507 102 510 96T513 88L493 71Q445 32 401 -9Q392 -18 388 -17L384 -16Q358 39 355 44Q336 77 333 77Q261 45 203 -9Q186 -23 181 -23Q177 -23 162 -11T121 18T69 44L57 48L61 54Q65 60 71 73T82 102Q100 156 100 262Q100 305 93 335T80 373T62 396L23 376Q18 377 9 386L119 474Q149 437 171 421V339V315\",120115:\"55 418Q55 443 100 503Q121 530 123 530Q125 528 127 528T131 528T134 528T135 524T131 516Q123 499 123 486Q123 457 159 416L169 405L170 388L171 372Q171 371 244 424L317 477L334 466Q394 428 432 416L433 402Q433 400 433 377T434 336V305Q434 195 420 131Q413 94 406 87Q403 84 298 29L192 -28L172 -8Q139 25 106 52L92 64V70Q95 97 95 198Q95 293 94 318L92 355L84 367Q55 406 55 418ZM174 306Q174 297 173 255T171 184Q171 153 175 136T198 100Q207 94 224 80T255 57T282 49Q304 49 328 80Q359 129 359 243Q359 284 352 345Q351 358 348 360Q333 373 304 384T265 396L251 390Q215 372 186 351L175 344V337Q175 319 174 306\",120116:\"45 425Q45 439 82 485T126 532Q127 532 128 532T131 531T137 529L132 519Q121 499 121 483Q121 473 131 454T156 419L167 408L169 376L185 388Q237 425 291 473L301 466Q337 443 394 416L419 405L418 387V369Q419 369 487 418T560 471L581 459Q597 450 621 437T664 415T684 406Q688 406 688 323Q688 254 679 193T662 103T648 71Q647 70 554 20L464 -28L443 -15Q416 1 386 17T343 40T331 49Q331 52 333 73T337 133T339 216Q339 309 334 339Q333 341 316 353T277 377T246 389Q235 389 201 369T166 346Q166 345 164 247Q164 232 164 210T163 179Q163 139 170 116T205 57L212 48L136 -27Q115 16 87 44L78 53L80 67Q88 124 88 211Q88 282 87 315T83 356T74 371Q45 410 45 425ZM591 352Q580 359 565 365T540 374T517 381T504 385L418 342L417 318V220Q417 212 417 194T417 170T418 152T420 134T424 120T431 106T440 95T454 83Q508 44 544 44Q566 44 583 77Q603 120 605 235Q605 289 600 322Q598 343 597 345T591 352\",120117:\"14 377Q63 428 117 472Q130 462 144 449L193 408V392V376L247 420Q300 464 301 464L310 451Q331 417 363 390L333 365Q303 340 301 340Q293 343 277 364T250 386Q241 386 215 361L195 341Q194 333 193 327T191 318T190 304T188 269Q188 220 192 148Q193 122 195 118T210 101Q255 60 271 60Q276 60 278 61L318 82Q327 86 336 91T351 98L356 101Q359 82 356 79Q354 77 283 27T210 -24L192 -7Q160 23 137 40L126 49L116 40Q66 -13 66 -54Q66 -117 167 -140L179 -142V-147L180 -152L123 -188L112 -185Q58 -170 31 -145Q10 -122 10 -96Q10 -80 22 -53Q44 -10 95 49Q97 51 100 54T104 59T107 64T109 71T111 81T112 97T113 119T114 149T114 188Q114 284 108 347V354L96 365Q76 385 67 385Q62 385 45 377L27 368L14 377\",120118:\"74 58Q89 124 89 241Q89 265 89 278T89 305T88 324T87 336T84 346T81 352T77 359T71 368Q57 388 52 398L45 409Q62 454 98 507L113 528Q128 528 128 524Q128 523 125 518T120 503T117 483V471Q123 456 130 445Q135 438 140 432T148 422T153 415T157 409T160 405T162 402T163 399T163 395V384V365Q165 365 237 419L311 473Q383 430 420 416Q426 414 426 411V404Q426 398 426 388T427 367Q431 233 431 201Q431 -3 391 -52Q387 -58 305 -138T221 -218L218 -217Q216 -216 211 -214T202 -210L184 -202L199 -194Q259 -162 288 -127T334 -19T350 184Q350 257 342 328L340 356Q282 390 262 390Q248 390 178 346L163 336V111L216 45L131 -26L124 -15Q114 3 85 44L74 58\",120119:\"47 335L36 347L52 362Q112 421 167 461L181 471L192 465Q236 444 260 417T284 369Q284 355 276 343T233 291Q195 246 195 245T205 242T241 228T300 198L302 187Q314 138 314 74Q314 -24 291 -95Q290 -100 222 -157L154 -214H145Q102 -214 53 -189T-7 -117Q41 -21 183 122L207 147Q205 149 186 157T140 172T100 180H97V192L140 231Q192 280 199 293Q205 303 205 315Q205 339 185 363T137 388Q119 388 63 347L47 335ZM179 -153Q212 -153 226 -113T240 14Q240 67 233 98T223 132T211 143L222 130Q216 125 206 116T170 82T124 33T88 -20T72 -70Q72 -99 105 -126T179 -153\",120120:\"130 -1H63Q34 -1 26 2T17 17Q17 24 22 29T35 35Q49 35 64 44T88 66Q101 93 210 383Q331 693 335 697T346 701T357 697Q358 696 493 399Q621 104 633 83Q656 35 686 35Q693 35 698 30T703 17Q703 5 693 2T643 -1H541Q388 -1 386 1Q378 6 378 16Q378 24 383 29T397 35Q412 35 434 45T456 65Q456 93 428 170L419 197H197L195 179Q184 134 184 97Q184 82 186 71T190 55T198 45T205 39T214 36L219 35Q241 31 241 17Q241 5 233 2T196 -1H130ZM493 68Q493 51 481 35H619Q604 56 515 256Q486 321 468 361L348 637Q347 637 330 592T313 543Q313 538 358 436T448 219T493 68ZM404 235Q404 239 355 355T295 488L275 430Q241 348 208 232H306Q404 232 404 235ZM155 48Q151 55 148 88V117L135 86Q118 47 117 46L110 37L135 35H159Q157 41 155 48\",120121:\"11 665Q11 672 22 683H213Q407 681 431 677Q582 649 582 515Q582 488 573 468Q554 413 484 372L474 366H475Q620 317 620 178Q620 115 568 69T420 6Q393 1 207 -1H22Q11 10 11 18Q11 35 51 35Q79 37 88 39T102 52Q107 70 107 341T102 630Q97 640 88 643T51 648H46Q11 648 11 665ZM142 341Q142 129 141 88T134 37Q133 36 133 35H240L233 48L229 61V623L233 635L240 648H133L138 639Q142 621 142 341ZM284 370Q365 378 391 411T417 508Q417 551 406 581T378 624T347 643T320 648Q298 648 278 635Q267 628 266 611T264 492V370H284ZM546 515Q546 551 531 577T494 617T454 635T422 641L411 643L420 630Q439 604 445 579T452 510V504Q452 481 451 467T441 430T415 383Q420 383 439 391T483 413T527 455T546 515ZM585 185Q585 221 570 249T534 294T490 320T453 334T436 337L435 336L440 330Q445 325 452 315T467 288T479 246T484 188Q484 145 474 110T454 62T442 48Q442 47 444 47Q450 47 470 54T517 75T564 119T585 185ZM449 184Q449 316 358 332Q355 332 335 333T302 335H264V199Q266 68 270 57Q275 50 289 43Q300 37 324 37Q449 37 449 184\",120123:\"16 666Q16 675 28 683H193Q329 683 364 682T430 672Q534 650 600 585T686 423Q688 406 688 352Q688 274 673 226Q641 130 565 72T381 1Q368 -1 195 -1H28Q16 5 16 16Q16 35 53 35Q68 36 75 37T87 42T95 52Q98 61 98 341T95 630Q91 640 83 643T53 648Q16 648 16 666ZM237 646Q237 648 184 648H128Q128 647 133 632Q136 620 136 341Q136 64 133 50L128 35H237L230 48L226 61V343Q228 620 231 633Q232 636 237 646ZM264 61Q278 40 310 35Q363 35 401 55T461 112T496 193T513 295Q515 333 515 349Q515 411 504 459Q481 598 373 641Q351 648 321 648Q304 648 292 643T277 635T264 621V61ZM461 628Q462 627 471 616T489 594T509 559T529 509T544 441T550 352Q550 165 479 75L468 59Q474 61 484 65T522 87T573 128T618 195T650 290Q654 322 654 354Q654 418 638 464T581 552Q559 576 529 595T480 621L461 628\",120124:\"12 666Q12 675 24 683H582Q590 680 593 672V588Q593 514 591 502T575 490Q567 490 563 495T555 517Q552 556 517 590Q486 623 445 634T340 648H282Q266 636 264 620T260 492V370H277Q329 375 358 391T404 439Q420 480 420 506Q420 529 436 529Q445 529 451 521Q455 517 455 361Q455 333 455 298T456 253Q456 217 453 207T437 197Q420 196 420 217Q420 240 406 270Q377 328 284 335H260V201Q261 174 261 134Q262 73 264 61T278 38Q281 36 282 35H331Q400 35 449 50Q571 93 602 179Q605 203 622 203Q629 203 634 197T640 183Q638 181 624 95T604 3L600 -1H24Q12 5 12 16Q12 35 51 35Q92 38 97 52Q102 60 102 341T97 632Q91 645 51 648Q12 648 12 666ZM137 341Q137 131 136 89T130 37Q129 36 129 35H235Q233 41 231 48L226 61V623L231 635L235 648H129Q132 641 133 638T135 603T137 517T137 341ZM557 603V648H504Q504 646 515 639Q527 634 542 619L557 603ZM420 317V397L406 383Q394 370 380 363L366 355Q373 350 382 346Q400 333 409 328L420 317ZM582 61L586 88Q585 88 582 83Q557 61 526 46L511 37L542 35H577Q577 36 578 39T580 49T582 61\",120125:\"584 499Q569 490 566 490Q558 490 552 497T546 515Q546 535 533 559Q526 574 506 593T469 621Q415 648 326 648Q293 648 287 647T275 641Q264 630 263 617Q262 609 260 492V370L275 372Q323 376 350 392T393 441Q409 473 409 506Q409 529 427 529Q437 529 442 519Q444 511 444 362Q444 212 442 206Q436 197 426 197Q409 197 409 217Q409 265 375 299Q346 328 280 335H260V206Q260 70 262 63Q265 46 276 41T326 35Q362 35 366 28Q377 17 366 3L360 -1H24Q12 5 12 16Q12 35 51 35Q92 38 97 52Q102 60 102 341T97 632Q91 645 51 648Q12 648 12 666Q12 675 24 683H573Q576 678 584 670V499ZM137 341Q137 131 136 89T130 37Q129 36 129 35H182Q233 35 233 39Q226 54 225 92T224 346L226 623L231 635L235 648H129Q132 641 133 638T135 603T137 517T137 341ZM549 603V648H495L506 641Q531 621 533 619L549 603ZM409 317V395L400 386Q390 376 375 366L357 355L373 346Q394 331 397 328L409 317\",120126:\"737 285Q749 277 749 268Q749 260 744 255T730 250Q695 250 677 217Q666 195 666 119Q666 52 664 50Q656 36 555 3Q483 -16 415 -19Q364 -19 348 -17Q226 -3 146 70T44 261Q39 283 39 341T44 421Q66 538 143 611T341 699Q344 699 364 700T395 701Q449 698 503 677T585 655Q603 655 611 662T620 678T625 694T639 702Q650 702 657 690V481L653 474Q640 467 628 472Q624 476 618 496T595 541Q562 587 507 625T390 663H381Q337 663 299 625Q213 547 213 337Q213 75 341 23Q357 19 397 19Q440 19 462 22T492 30T513 45V119Q513 184 506 203Q491 237 435 250Q421 250 415 257Q404 267 415 281L421 285H737ZM250 43Q250 45 243 55T225 87T203 139T185 224T177 343V361Q184 533 250 625Q264 643 261 643Q238 635 214 620T161 579T110 510T79 414Q74 384 74 341T79 268Q106 117 230 52L250 43ZM621 565V625Q617 623 613 623Q603 619 590 619H575L588 605Q608 583 610 579L621 565ZM655 250H517L524 241Q548 213 548 149V114V39Q549 39 562 44T592 55T615 63L630 70V134Q632 190 634 204T648 237Q655 245 655 250\",120128:\"20 666Q20 676 31 683H358Q369 676 369 666Q369 648 331 648Q288 645 282 632Q278 626 278 341Q278 57 282 50Q286 42 295 40T331 35Q369 35 369 16Q369 6 358 -1H31Q20 4 20 16Q20 35 58 35Q84 37 93 39T107 50Q113 60 113 341Q113 623 107 632Q101 645 58 648Q20 648 20 666ZM249 35Q246 40 246 41T244 54T242 83T242 139V341Q242 632 244 639L249 648H140Q146 634 147 596T149 341Q149 124 148 86T140 35H249\",120129:\"79 103Q108 103 129 83T151 38Q151 9 130 -15Q116 -34 130 -37Q133 -39 157 -39Q208 -39 219 -8L226 3V305Q226 612 224 621Q220 636 211 641T166 647Q137 647 128 654Q119 665 128 679L135 683H466Q478 677 478 666Q478 647 439 647Q399 644 393 632Q388 620 388 347Q386 69 384 59Q364 -6 316 -39T184 -77H172Q102 -77 56 -48T6 30Q6 62 26 82T79 103ZM353 354Q353 556 354 596T361 645Q362 646 362 647H253Q257 639 258 628T261 547T262 312V-4L255 -17Q248 -29 250 -29Q253 -29 258 -28T277 -20T302 -5T327 22T348 65Q350 74 353 354ZM115 36Q115 47 105 57T79 67Q73 67 67 66T52 56T44 34Q44 9 62 -8Q66 -11 71 -15T81 -22T86 -24L90 -13Q100 3 102 5Q115 22 115 36\",120130:\"22 666Q22 676 33 683H351L358 679Q368 665 358 655Q351 648 324 648Q288 645 280 637Q275 631 274 605T273 477L275 343L382 446Q473 530 492 553T512 599Q512 617 502 631T475 648Q455 651 455 666Q455 677 465 680T510 683H593H720Q732 676 732 666Q732 659 727 654T713 648Q670 648 589 581Q567 562 490 489T413 415Q413 413 554 245T711 61Q737 35 751 35Q758 35 763 29T768 15Q768 6 758 -1H624Q491 -1 486 3Q480 10 480 17Q480 25 487 30T506 35Q518 36 520 38T520 48L400 195L302 310L286 297L273 283V170Q275 65 277 57Q280 41 300 38Q302 37 324 35Q349 35 358 28Q367 17 358 3L351 -1H33Q22 4 22 16Q22 35 60 35Q101 38 106 52Q111 60 111 341T106 632Q100 645 60 648Q22 648 22 666ZM240 341V553Q240 635 246 648H138Q141 641 142 638T144 603T146 517T146 341Q146 131 145 89T139 37Q138 36 138 35H246Q240 47 240 129V341ZM595 632L615 648H535L542 637Q542 636 544 625T549 610V595L562 606Q565 608 577 618T595 632ZM524 226L386 388Q386 389 378 382T358 361Q330 338 330 333Q330 332 330 332L331 330L533 90Q558 55 558 41V35H684L671 50Q667 54 524 226\",120131:\"12 666Q12 675 24 683H333L340 679Q350 665 340 655Q333 648 309 648Q287 646 279 643T266 630Q264 623 264 346Q264 68 266 57Q274 40 284 35H340Q413 37 460 55Q514 78 553 117T602 197Q605 221 622 221Q629 221 634 215T640 201Q638 194 625 105T611 12Q611 6 600 -1H24Q12 5 12 16Q12 35 51 35Q92 38 97 52Q102 60 102 341T97 632Q91 645 51 648Q12 648 12 666ZM137 341Q137 131 136 89T130 37Q129 36 129 35H237Q235 41 233 48L229 61L226 339Q226 621 229 628Q230 630 231 636T233 643V648H129Q132 641 133 638T135 603T137 517T137 341ZM580 48Q580 59 583 74T586 97Q586 98 585 97T579 92T571 86Q549 64 513 43L500 35H577L580 48\",120132:\"18 666Q18 677 27 680T73 683H146Q261 683 266 679L465 215Q469 215 566 443Q663 676 668 681Q673 683 790 683H908L915 679Q924 664 915 655Q912 648 897 648Q851 639 835 606L833 346Q833 86 835 79Q838 69 849 58T873 41Q877 40 887 38T901 35Q926 35 926 16Q926 6 915 -1H604L597 3Q588 19 597 28Q600 35 615 35Q660 42 673 68L679 79V339Q679 409 679 443T679 520T679 580T677 597Q646 521 584 375T473 117T424 3Q416 -1 410 -1T401 1Q399 3 273 301L148 599L146 343Q146 86 148 79Q152 69 163 58T186 41Q190 40 200 38T215 35Q226 35 235 28Q244 17 235 3L228 -1H28Q17 4 17 17Q17 35 39 35Q84 42 97 68L104 79V639L88 641Q72 644 53 648Q34 648 26 651T18 666ZM457 166Q451 169 449 171T435 198T404 268T344 412L244 648H157L166 637Q169 633 293 346L413 66Q424 88 435 117L457 166ZM817 646Q817 648 766 648H715V72L708 57Q701 45 697 41L695 37Q695 35 757 35H819L813 46Q802 61 800 76Q797 105 797 346L799 612L804 626Q812 638 815 641L817 646ZM124 42Q119 42 119 38Q119 35 128 35Q132 35 132 36Q125 42 124 42\",120134:\"131 601Q180 652 249 676T387 701Q485 701 562 661Q628 629 671 575T731 448Q742 410 742 341T731 234Q707 140 646 81Q549 -19 389 -19Q228 -19 131 81Q57 155 37 274Q34 292 34 341Q34 392 37 410Q58 528 131 601ZM568 341Q568 613 437 659Q406 664 395 665Q329 665 286 625Q232 571 213 439Q210 408 210 341Q210 275 213 245Q232 111 286 57Q309 37 342 23Q357 19 389 19Q420 19 437 23Q469 38 491 57Q568 132 568 341ZM174 341Q174 403 177 441T197 535T249 639Q246 639 224 627T193 608Q189 606 183 601T169 589T155 577Q69 488 69 344Q69 133 231 52Q244 45 246 45Q248 45 246 48Q231 69 222 85T200 141T177 239Q174 269 174 341ZM708 341Q708 415 684 475T635 563T582 610Q578 612 565 619T546 630Q533 637 531 637Q530 637 530 636V635L531 634Q562 591 577 543Q602 471 602 341V316Q602 264 599 230T580 144T531 48L530 47V46Q530 45 531 45Q533 45 547 52T583 75T622 105Q708 195 708 341\",120138:\"54 238Q72 238 72 212Q72 174 106 121Q113 110 132 90T166 59Q221 23 264 23Q315 23 348 41Q368 50 384 79Q393 102 393 129Q393 181 356 219T221 299Q120 343 74 390T28 501Q28 561 55 610Q98 682 212 699Q214 699 231 700T261 701Q309 698 340 687T408 675Q431 678 445 690T465 702Q474 702 481 690V497L477 490Q464 481 450 490Q446 500 446 501Q446 546 386 606T260 666Q215 666 182 639T148 565Q148 528 186 496T319 428Q352 414 370 405T418 379T468 338T506 284Q528 239 528 191Q528 102 456 46T266 -10Q211 -10 176 2T110 15Q86 9 73 -1T53 -12Q44 -12 37 -1V112V182Q37 214 40 226T54 238ZM446 619Q446 648 444 648Q439 646 435 644Q425 644 415 639H404L417 624Q435 606 439 601L446 592V619ZM124 619L128 635Q126 635 108 617Q64 576 64 502Q64 489 65 479T76 449T102 414T150 376T228 335Q335 291 381 245T427 128Q427 94 419 75L415 61Q421 61 448 88Q490 127 490 190Q490 233 475 264Q456 299 430 321Q402 349 369 367T287 404T204 441Q138 481 119 526Q113 544 113 565Q113 596 124 619ZM75 43Q76 43 90 46T110 50H119L106 64L74 101Q72 101 72 72T75 43\",120139:\"33 672Q36 680 44 683H624Q632 680 635 672V490L631 483Q621 479 617 479Q611 479 606 485T600 499Q600 525 584 552Q577 567 558 588T524 617Q479 642 426 646L415 648V355Q415 62 422 52Q425 42 434 40T473 35Q500 35 509 28Q518 17 509 3L502 -1H166L160 3Q149 17 160 28Q167 35 195 35Q224 37 234 39T249 52Q253 66 253 355V648L242 646Q192 642 144 617Q129 609 110 588T84 552Q69 527 69 499Q69 490 64 484T50 478Q39 478 33 490V672ZM113 639L126 648H69V597L84 612Q93 623 113 639ZM389 35Q382 46 381 86Q380 134 380 350V648H289V350Q289 199 288 131T286 53T280 35H389ZM600 597V648H542L555 639Q575 623 584 612L600 597\",120140:\"16 666Q16 677 28 683H341L348 679Q359 665 348 654Q342 648 315 648Q270 644 266 632Q262 627 262 598T261 399Q261 372 261 325T260 260Q260 149 274 99T339 30Q355 25 393 25Q430 25 457 33T494 49T519 72Q562 115 575 205Q576 219 576 379Q576 538 575 550Q568 597 550 622T506 648Q498 648 493 654T487 667T499 683H697Q709 675 709 667T704 654T690 648Q653 648 633 597Q624 573 622 546T619 377Q617 193 613 174Q596 95 544 41Q477 -19 355 -19H344Q275 -16 226 5T153 57T120 110T106 154Q101 172 99 399Q99 618 95 632Q88 644 53 648Q16 648 16 666ZM228 639L233 648H128Q128 647 133 632Q135 621 135 412Q135 197 137 185Q148 115 181 79Q209 51 235 41Q242 36 258 31T277 25Q276 27 268 38T254 59T241 92T228 145Q226 161 226 399Q226 632 228 639ZM604 621Q606 626 619 648H577L586 634Q587 632 591 625T595 614L597 608L604 621\",120141:\"316 683Q327 676 327 666Q327 648 302 648Q272 642 258 628Q249 621 249 608Q252 589 263 556T289 485T322 406T357 325T388 256T411 205L420 185Q423 185 473 317Q547 497 547 590Q547 621 541 632T516 648Q501 648 498 654Q488 664 498 679L504 683H607H660Q695 683 707 680T719 667Q719 660 714 654T700 648Q678 648 658 628L642 614L513 301Q484 231 449 148T397 25T380 -15Q373 -20 368 -20Q361 -20 358 -15Q354 -13 287 135T149 438T67 610Q45 648 18 648Q11 648 6 653T0 666Q0 677 9 680T59 683H164H316ZM216 614Q216 620 216 622T216 628T216 633T217 635T218 638T219 640T221 644T224 648H84L96 632Q118 592 236 330L367 43L387 88L404 132L380 185Q250 468 222 568Q216 590 216 614ZM576 645Q584 628 584 597L587 568L598 597Q609 624 618 637L624 648H600Q576 648 576 645\",120142:\"785 664Q785 670 795 683H982Q994 675 994 665Q994 650 975 648Q953 643 939 619Q931 593 823 292T710 -15Q706 -19 699 -19T688 -15Q682 -6 639 107T555 328T513 437Q513 438 500 409T462 325T413 212Q315 -14 310 -17Q308 -19 302 -19T288 -15L57 619Q45 643 24 648Q5 650 5 665Q5 677 17 683H146H200Q256 683 270 681T285 666Q285 659 280 654T268 648Q253 648 239 634Q230 630 230 619Q230 598 264 481L362 192Q363 193 428 341T493 492Q493 496 473 546T446 608Q426 648 399 648Q392 648 387 653T382 667Q382 678 393 683H679Q690 670 690 665Q690 662 685 655T673 648Q653 648 633 632L622 625V610Q626 576 657 479T719 300T751 218Q754 218 779 294Q847 492 847 581Q847 648 802 648Q796 648 791 652T785 664ZM194 623Q194 630 199 648H82L90 632Q99 616 199 332L302 50Q303 50 322 94T342 141Q342 142 305 245T231 467T194 623ZM585 620Q585 634 593 648H530Q466 648 466 645Q479 632 595 323L699 54Q701 56 718 103T735 154L702 245Q585 562 585 620ZM884 572L890 587Q896 602 903 620T915 645Q915 648 893 648H868L875 634Q883 598 883 576Q883 572 884 572\",120143:\"22 666Q22 677 31 680T80 683H184H335Q346 675 346 667Q346 660 341 655Q335 648 315 648Q280 644 273 637Q273 630 300 583T356 492T386 448Q430 504 450 535T474 577T478 601Q478 620 469 634T444 648Q428 648 428 666Q428 678 436 680T488 683H559H630Q673 683 681 681T690 666Q690 648 673 648Q652 648 619 637Q571 615 517 550Q490 517 450 464T410 408Q415 399 501 273T617 106Q648 61 661 48T688 35Q705 35 705 16Q705 5 695 -1H539Q384 -1 379 3Q373 10 373 17Q373 27 380 31T408 35Q459 40 459 49Q459 59 418 129T335 259Q334 260 332 260Q328 260 273 197Q210 127 208 117Q199 104 199 82Q199 57 213 46T239 35Q247 35 252 29T257 15Q257 10 256 7T253 3T248 0L246 -1H28Q16 7 16 15T21 29T35 35Q61 35 117 88Q289 279 304 297Q307 303 255 377Q117 586 79 626Q60 648 39 648Q32 648 27 653T22 666ZM237 639V648H173Q113 647 113 646Q113 642 137 612Q186 546 302 373T453 139Q497 63 497 43Q497 39 495 35H559Q622 35 622 37Q622 38 583 94T486 233T373 399T277 552T237 639ZM553 637L566 648H504L508 637Q510 630 515 615V603L528 615Q529 616 539 625T553 637ZM170 46Q169 49 167 58T164 70V83L137 59L113 35H175Q175 38 170 46\",120144:\"16 659T16 667T28 683H295Q306 676 306 666Q306 648 284 648Q258 648 255 641Q255 634 265 615T339 479Q418 339 421 339L455 394Q489 448 523 502L557 557Q560 566 560 582Q560 637 504 648Q489 648 486 655Q475 664 486 679L493 683H693Q704 675 704 667Q704 650 684 648Q672 645 653 623Q633 604 614 576T517 426L439 301V183Q442 62 444 59Q449 35 504 35Q521 35 528 30Q538 16 528 3L521 -1H195L188 3Q178 16 188 30Q195 35 213 35Q266 35 273 59Q274 61 277 163V261L75 621Q64 638 58 643T37 648Q28 648 22 653ZM219 637V648H101Q110 634 215 446L313 270V166Q310 59 306 48L301 35H415L410 48Q404 65 404 175V290L317 443Q230 601 226 612Q219 625 219 637ZM608 630L624 648H575Q584 632 588 623L595 610L608 630\",120172:\"821 97Q822 97 824 88T827 77L793 53Q676 -25 670 -28Q669 -29 656 -27L583 123Q583 124 467 46L352 -31L341 -20Q305 18 264 47T192 77Q161 77 60 32L49 40Q37 47 38 49Q39 49 93 83T212 160T297 219Q411 312 411 452Q411 519 360 571T233 624Q180 624 157 601T133 548Q133 524 160 496T214 441T241 393Q241 356 199 321T100 256L86 249L77 256Q68 263 67 263L84 274Q101 286 118 304T135 339T109 384T56 446T29 504Q29 566 118 624Q207 686 309 686Q349 686 360 685Q405 678 439 661T491 625T520 583T534 543T537 511Q537 436 491 344L478 318L455 299Q420 272 308 179L284 160L294 158Q348 154 426 89L437 79Q513 110 579 153V175Q579 183 579 227T580 330T581 446T582 542L583 582L664 630Q681 640 703 653T734 673L744 679Q750 678 756 676L767 674L716 623V585Q716 568 712 463T708 289V250Q708 237 709 218T710 195L711 180L739 130Q768 79 771 79Q775 79 796 88T821 97\",120173:\"160 345Q160 357 144 376T109 413T73 458T57 509Q57 544 95 584Q142 631 205 657T331 684Q382 684 427 658T500 585L505 577L521 588Q537 599 562 614T616 646T679 673T738 684Q790 684 807 666T840 587Q850 552 863 532T888 508Q894 505 906 505Q917 505 930 507T953 512T963 514L964 504Q965 495 965 494T914 467T808 413T745 384H751Q782 380 802 377T854 362T904 334T937 287T951 217Q951 178 937 143T908 91Q903 86 820 34L734 -21L718 -24Q679 -31 639 -31Q561 -31 451 4T271 40Q190 40 119 -2L99 -13L91 1L84 15L86 16Q88 18 132 42T233 100T315 152Q377 199 386 233Q388 240 393 297T399 363Q399 487 353 551Q337 573 306 597T238 622Q201 622 179 602T157 557T214 476T272 396Q272 371 229 334T143 272T96 246Q95 246 85 252T74 259T95 273T138 306T160 345ZM529 443Q529 409 528 385T526 353L525 346Q526 346 649 390T773 435Q749 451 742 464T727 518Q727 519 725 532T721 548T717 562T712 577T706 589T698 601T688 608T675 614T658 616Q626 616 576 582T525 528Q525 527 526 518T528 489T529 443ZM772 57Q774 57 778 58T792 64T808 77T821 103T827 144Q827 222 784 266T660 322Q652 323 611 323H596Q577 323 535 316L523 314Q520 291 505 255L500 241L356 138L366 137Q443 131 518 110T650 72T748 54Q763 54 772 57\",120174:\"460 -32Q373 -32 305 -11T193 45T122 124T83 214T72 303Q72 395 114 476L119 486L313 592L338 568L359 580Q418 615 479 638T568 668T606 675Q607 675 608 676H610Q612 676 615 661T630 621T660 578Q673 568 694 568Q717 568 721 570H726Q724 565 722 559L717 549L706 545Q608 513 583 513Q568 517 559 522T533 546T493 603L490 609Q452 599 452 558Q452 537 469 481T486 393Q486 353 474 331T422 285T296 231L272 223L262 230L253 237Q279 246 314 274T351 338Q351 376 334 442T316 532Q316 546 319 552Q319 554 316 554Q304 554 288 547T250 523T214 466T199 371Q199 218 299 133T541 47Q571 47 585 51T652 81L712 108Q716 104 716 81L706 74Q695 68 673 54T633 29L550 -22L540 -24Q492 -32 460 -32\",120175:\"380 596Q307 596 250 582T158 546T100 493T67 433T56 373V361Q55 361 43 366L31 372V384Q31 455 69 523T173 627Q213 650 284 666T444 683H452Q629 683 735 629Q896 548 896 369Q896 263 839 163Q835 155 818 140Q746 82 662 27T563 -29Q525 -29 386 16T183 62Q147 62 127 52T63 1L48 -14L40 -4L31 5Q83 73 172 149L186 161H199Q291 161 329 181Q357 199 357 231Q357 258 301 316T245 396Q245 423 282 458T349 512T403 543L413 548L425 545L438 541Q373 491 373 462Q373 446 399 415T453 349T480 288Q480 251 433 212Q394 180 348 156L334 148L353 145Q408 134 513 105T654 76Q711 76 745 132T780 277Q780 434 676 517Q637 549 562 572T380 596\",120176:\"527 55Q574 55 619 69T691 97L717 111V85L562 -18Q520 -29 443 -29Q379 -29 325 -15T235 21T180 61T146 98Q74 186 74 307Q74 395 109 472Q113 482 123 489T190 533Q251 568 295 591L308 598L350 580L361 586Q403 612 464 636T564 673T609 686Q610 686 610 685Q612 683 616 670T627 636T646 601Q666 572 686 572H692Q713 572 726 576H728L725 565L723 554L692 544Q660 535 629 526T595 516Q585 514 574 519Q563 527 543 552T507 597T490 617Q467 604 456 579V564Q456 535 473 471T492 393L494 381L613 460L622 446Q630 433 650 411T696 371L703 365L614 312H596L580 322Q568 329 553 340T528 355T510 360Q496 358 491 354T484 345T471 326T435 297Q408 278 370 261T307 235T277 227Q273 227 266 234L256 240L267 245Q280 251 294 258T330 288T353 336Q353 373 335 444T316 530V537Q316 549 322 567Q270 554 233 499T196 370Q196 253 287 157Q392 55 527 55\",120177:\"424 522Q265 596 208 596Q193 596 180 593T150 579T116 542T89 474Q86 465 86 463L59 481L63 494Q87 578 137 627Q191 684 285 684Q334 684 406 658T538 607T621 581Q644 581 706 629L721 640Q722 640 725 630L727 620Q701 592 654 548T582 486L569 487Q533 490 485 504L468 508Q449 503 429 495T387 466T365 422Q365 373 439 299L453 310Q473 325 528 370L588 418Q614 398 642 368T668 331Q667 331 628 296L590 262L582 274Q557 311 526 311Q511 311 487 297T462 278Q462 277 492 244T551 166T581 88Q581 54 570 25T536 -27T505 -56T478 -76Q376 -146 274 -146H270Q199 -146 162 -118T124 -15Q124 12 128 30T132 96V107Q132 144 117 157Q102 169 85 169Q74 169 59 165T32 156T20 151Q20 152 19 158T17 167Q17 168 17 168T17 169T19 170T22 172T27 175T35 179Q131 230 195 230Q231 230 259 202Q270 190 270 171Q269 150 253 87T236 -16Q236 -67 261 -87T322 -107Q380 -107 428 -68Q467 -35 467 30Q467 60 447 91T383 171T316 251Q290 286 278 308T263 339T261 359Q261 384 284 418Q322 469 424 522\",120178:\"742 611Q784 611 812 631V611Q807 607 783 591T718 544T629 476L606 458Q608 458 628 457T667 453T713 443T762 423T804 388T836 335Q844 313 844 289Q844 231 814 182T746 103Q720 82 655 48T546 -18L520 -21Q456 -29 432 -29Q313 -29 223 33Q204 45 183 65T135 119T91 207T74 320Q74 428 109 480Q116 491 127 497T215 546L308 595L343 583L355 591Q387 613 433 636T488 660H489L491 659Q493 658 495 657T500 655L509 650L500 645Q479 635 460 612T441 552Q441 535 447 498T459 433T466 405L625 513L643 526Q620 530 585 546T535 586Q535 587 532 592T527 602T525 610Q525 613 577 649L630 687Q632 687 638 675T653 649T686 623T742 611ZM349 313Q349 328 327 413T305 510V516Q305 531 308 542T314 559T317 566T315 567Q297 567 270 548Q233 524 212 490T191 392Q191 337 206 288T244 207T284 156T316 128Q410 51 535 51Q632 51 675 102T718 217Q718 269 690 314T599 375Q574 381 535 381Q501 381 477 377L466 376Q469 364 469 349Q469 314 457 295T408 258Q366 236 308 219L288 213L279 220L270 227Q284 232 294 236T309 243T320 252T326 260T331 270T336 281Q349 310 349 313\",120179:\"288 139Q288 172 255 224T189 335T156 442Q156 495 242 579Q289 625 361 668Q364 671 368 673T376 678T380 681L384 683L392 676Q401 670 414 661T443 642T477 626T509 619Q543 619 618 668Q625 672 628 674T631 675Q632 673 633 663T633 651L564 595Q556 589 545 580T528 566T516 556T505 548T497 543T488 539T481 537T472 535T463 534T451 534H442Q385 534 304 581L291 589Q290 588 285 583T277 575T269 566T262 555T257 543T255 529V522Q255 507 260 487T276 446T293 409T311 376L321 359Q321 358 322 358T324 359T327 361T333 366Q386 409 481 460L503 472L543 471Q586 471 599 470Q692 459 714 430Q725 416 738 360T752 245Q752 184 742 127T725 51T703 -8Q700 -13 619 -64T518 -123Q508 -126 493 -126Q438 -126 398 -86L427 -52Q456 -17 457 -17Q460 -17 465 -16H473Q474 -21 481 -32T504 -56T539 -69Q572 -69 599 -34Q625 4 625 158Q625 264 609 311T532 378Q508 386 484 386Q455 386 419 372T360 345T337 330L346 313Q375 263 386 227Q389 215 389 202Q389 192 388 184T384 168T376 152T365 138T350 121T331 103T307 81T278 54L194 -24Q130 30 99 30Q85 30 64 20T31 1T16 -10Q15 -11 13 -7Q12 -6 11 -3Q8 4 6 8L32 35Q88 88 117 107T169 126Q177 126 182 125Q218 118 252 84L263 73Q288 113 288 139\",120180:\"500 615Q523 615 550 628T595 655T614 668L623 654L607 642Q512 569 440 534L427 527L413 529Q384 535 340 547T265 565T209 572Q173 572 145 556T101 522T60 465Q58 460 54 460T41 468L32 477L37 487Q96 599 139 640Q187 681 247 681Q275 681 283 680Q313 674 398 645T500 615ZM418 170Q418 186 410 260T401 382Q403 418 403 424L405 433L415 444Q482 515 571 571L582 578Q591 573 607 568L597 560Q522 504 522 450Q522 427 533 357T545 241V228Q545 190 536 159T508 106T478 73T446 48Q343 -25 238 -25Q179 -25 118 15L107 22L79 5Q51 -12 51 -12L38 2L55 18Q106 67 175 122L192 136Q202 130 206 123Q223 91 252 61Q263 50 266 48T278 39T297 32T320 30Q357 30 389 68Q415 102 418 170\",120181:\"65 510Q68 517 74 528T101 569T144 620T202 661T274 680Q308 680 389 628T503 576Q530 576 596 600Q615 607 616 607Q616 602 615 596V585Q605 581 576 568T531 548T485 531T418 509L400 503L358 522Q347 527 327 537T299 550T277 560T257 568T239 573T220 577T201 578H196Q181 578 169 575T135 554T88 502L83 496Q82 496 74 502T65 510ZM424 4Q424 50 395 151T365 313V320Q365 352 369 361T405 403Q431 432 465 462T521 508T547 525L549 524Q551 524 554 523T560 521L571 517L552 498Q515 461 499 430Q485 399 485 366Q485 326 512 231T539 84Q539 -14 460 -77T273 -141Q248 -141 234 -140T198 -131T160 -106T134 -59Q128 -40 124 -16T117 22T108 49T91 69T59 75T15 65L1 59Q-8 76 -7 77Q4 85 22 97T88 129T170 149Q218 149 234 125Q242 112 242 43V21Q242 -17 248 -41T274 -85T322 -105H325H330Q363 -105 396 -75Q424 -47 424 4\",120182:\"234 109Q234 144 194 245T153 404Q153 445 180 490Q232 572 325 626T517 681H524Q612 681 661 658Q683 647 699 632T717 604Q717 600 708 545L699 490L690 489Q681 488 679 488Q675 488 669 504T640 546T577 592Q520 620 446 620Q415 620 386 614T327 594T280 553T262 487Q262 468 265 447T271 413T279 384T285 362L295 371Q320 396 352 421T439 474T538 502Q577 502 596 484T627 428Q642 386 651 373T677 360H682Q698 360 727 369L724 357Q724 354 724 351T722 346V344Q559 289 539 283Q582 272 589 271L615 265L637 189Q662 109 663 108Q668 97 682 84Q698 68 722 68H730H738Q762 68 799 91L803 80L806 70Q795 59 770 40T703 -3T631 -26Q598 -26 578 -8Q548 24 536 92Q524 154 509 183T477 218T428 224Q409 224 385 220T346 212L331 207Q330 205 330 201T331 189T332 178Q332 158 325 116L305 96Q269 60 240 38Q171 -21 123 -21Q72 -21 33 18L20 32L62 74Q96 107 102 112T116 118Q120 118 122 113T131 95T150 69Q171 48 190 48Q198 48 206 51T224 69T234 109ZM519 367Q497 432 450 432Q379 432 313 333L300 314L304 299Q306 294 309 280T315 260L321 235L542 313Q530 325 519 367\",120183:\"277 226Q277 248 253 286T203 369T178 449Q178 490 212 533T284 607Q380 683 532 683Q610 683 639 660T668 583Q668 568 666 546T663 509Q663 478 683 460Q691 452 719 452L738 450Q732 437 729 437Q728 437 652 416T573 394Q554 394 541 409T527 444Q527 449 532 487T538 542Q536 584 501 606T418 628Q389 628 364 620T317 587T295 523Q295 478 333 401T372 276Q372 269 371 267Q371 264 318 206L264 149Q284 141 317 130T433 101T577 82Q619 82 652 95T701 127T728 164T742 196L744 209Q744 210 749 208T759 203T764 199T760 185T751 154T744 129Q714 42 680 13Q628 -28 566 -28Q490 -28 403 -5T249 42T153 66T106 53T70 15T47 -16Q46 -17 30 -5L39 13Q85 100 138 148L147 156L161 157Q218 165 246 179T277 226\",120184:\"134 338Q134 357 81 417T27 504Q27 516 34 530Q55 568 110 615Q190 683 305 683H314Q445 683 495 580L501 569L512 577Q608 646 681 646Q759 646 801 585L808 576L816 583Q860 619 921 650T1041 682Q1063 682 1077 675T1096 660T1112 631T1132 596Q1160 555 1188 555Q1204 555 1228 564Q1230 565 1231 562Q1231 560 1232 554V547L1215 538Q1179 521 1114 475Q1112 474 1106 470T1099 464T1093 459T1088 452T1085 441T1082 425T1081 404T1079 376T1079 339Q1079 282 1084 236T1098 160T1117 112T1138 85T1159 77Q1166 77 1180 81T1207 90L1219 94Q1220 94 1221 86T1222 76L1045 -32Q1044 -32 1004 15L964 64V167Q965 334 970 372V378L994 402Q1032 440 1057 460Q1061 463 1066 467Q1070 469 1070 470T1068 471T1060 474T1050 481Q1040 488 1021 531T996 583Q979 609 947 609Q922 609 887 592T820 537L821 524Q825 484 825 448Q825 268 768 155L759 137L589 -28L579 -20Q533 17 507 17Q475 17 449 -7L436 -18L424 2L441 20Q446 25 456 36T471 52T484 65T497 79T509 90T522 99T534 106T548 112T561 115T576 117Q602 117 639 86Q648 81 648 81Q650 82 657 94T668 112Q711 202 711 373Q711 484 677 533T600 583Q592 583 583 581T569 577T554 568T542 560T528 549T516 539L519 523Q527 485 527 461Q527 444 522 407Q506 266 447 150L437 130L217 -25L208 -15Q165 28 126 28Q89 28 62 1Q47 -14 43 -14Q42 -14 36 -8L28 0L44 17Q96 73 120 92T166 117Q182 123 204 123Q239 123 284 78L295 67Q307 72 337 102Q400 178 400 346Q400 508 325 571Q270 618 208 618Q180 618 168 614T140 594Q124 578 124 564Q124 540 182 480T240 396Q240 359 197 321Q154 285 94 252L80 245L76 248L67 257L61 262L71 268Q82 275 94 284T120 309T134 338\",120185:\"522 492Q521 492 517 502T512 513Q542 444 542 333Q542 226 503 137L498 125L396 53Q308 -8 292 -17T260 -27Q226 -27 191 -9T136 29L145 39Q162 56 192 89L230 129L235 128H241Q276 57 332 57Q358 57 391 80Q403 89 409 100T422 143T428 227Q428 329 406 408T347 530T272 594T196 615Q152 615 135 596T118 558Q118 535 146 502T203 438T232 385Q232 357 195 322T122 265T83 243Q82 242 72 249T61 258L66 262Q72 265 82 273T103 292Q125 314 125 333Q125 351 101 376T51 432T26 492Q26 549 108 614T290 679Q326 679 335 678Q353 675 370 670T400 658T425 642T445 625T463 606T477 588T487 571T495 556T500 543L504 535L523 553Q553 581 569 595T619 632T686 667T757 678Q778 678 793 675T819 664T833 651T844 633T852 617Q884 548 910 548H916Q938 548 962 556L967 542Q967 540 947 531Q909 509 883 492T847 467T838 458Q825 419 825 328Q825 234 833 191T858 121Q875 94 892 77Q898 71 907 71Q912 71 928 76T957 87T971 91L972 88Q972 84 972 81L973 73L957 63Q891 21 806 -23L794 -30L783 -14Q766 13 728 60L713 79V372L724 384Q743 406 765 427T800 460L813 471Q809 472 806 472Q783 479 766 503T741 551T715 594T672 614Q644 614 622 595Q597 576 572 550T534 508L522 492\",120186:\"254 595Q269 583 269 581L262 577Q256 573 247 566T228 549T212 527T205 502Q205 480 266 386T328 277Q328 234 239 150L221 134L231 133Q264 131 376 99T516 62Q567 50 604 50Q614 50 626 52Q643 57 662 71T703 115T739 198T753 323Q753 454 692 517Q652 555 584 565T382 577Q365 577 357 577H308L300 591L292 606Q292 608 342 665L392 724L403 725Q406 725 411 726H416L417 725L412 715Q408 705 408 698Q408 684 423 679Q431 677 516 672T663 655Q757 634 806 593T873 463Q881 421 881 380Q881 340 874 306Q859 223 809 147Q801 134 789 124Q595 -30 456 -30Q395 -30 289 3T147 36Q134 36 121 33T98 26T76 15T59 4T44 -8T32 -17L22 -7L12 4L56 59L100 114L116 118Q217 142 217 199Q217 230 185 276T120 365T87 430Q87 435 109 464T172 534T254 595\",120187:\"247 398Q247 372 206 334T126 272T83 247Q82 247 72 253T61 261Q60 261 61 262T66 265Q127 306 127 343Q127 364 63 430Q42 451 38 458T33 480V490V497Q33 526 63 567Q112 632 170 660T282 688Q341 688 384 667Q454 633 482 566Q483 565 484 566T496 574Q562 623 630 653Q699 681 751 681Q778 681 797 673Q818 662 830 609Q835 580 843 564Q863 524 895 524H901Q917 524 932 528Q936 522 938 518T942 513T942 511Q873 480 836 454Q789 423 789 395Q789 362 834 298T880 200Q880 170 867 145T820 81Q733 -20 647 -20Q581 -20 499 21V9Q499 -16 502 -53T509 -116L512 -141L370 -223L357 -216Q344 -209 344 -208L348 -196Q370 -113 370 33V52L355 58Q307 76 284 76Q258 76 228 60T183 29T141 -11Q137 -7 133 -2L126 7L134 18Q181 89 210 121T278 170Q304 179 328 179Q336 179 358 177L370 175Q368 268 367 359Q367 416 363 434Q362 438 362 441Q348 527 302 574T203 621Q169 621 148 599T127 557Q127 535 187 476T247 398ZM673 315Q673 357 786 442Q786 443 776 444T750 449T727 462Q719 471 716 484V496Q715 507 715 515Q715 571 698 588Q680 611 643 611Q592 611 547 571Q534 558 511 522L499 505V139L543 123Q702 64 744 64Q770 64 781 79T793 112Q793 143 733 217T673 315\",120188:\"254 595Q269 583 269 581L262 577Q256 573 247 566T228 549T212 527T205 502Q205 480 266 386T328 277Q328 234 239 150L221 134L231 133Q264 131 376 99T516 62Q567 50 604 50Q614 50 626 52Q643 57 662 71T703 115T739 198T753 323Q753 454 692 517Q652 555 584 565T382 577Q365 577 357 577H308L300 591L292 606Q292 608 342 665L392 724L403 725Q406 725 411 726H416L417 725L412 715Q408 705 408 698Q408 684 423 679Q431 677 516 672T663 655Q757 634 806 593T873 463Q881 421 881 380Q881 340 874 306Q864 250 838 196T791 126Q748 93 733 82L715 69Q714 68 723 60T748 40T774 23Q806 2 832 2Q849 2 870 6T904 14L917 17Q917 12 918 6V-3L882 -22Q806 -60 778 -73L755 -83Q640 -36 596 -7L586 0L576 -4Q513 -30 457 -30Q394 -30 289 2T149 35Q119 35 93 22T52 -4T36 -17T24 -7T12 4L56 59L100 114L116 118Q217 142 217 199Q217 230 185 276T120 365T87 430Q87 435 109 464T172 534T254 595\",120189:\"31 498Q34 541 76 586T176 659T279 688H290Q377 688 429 653T506 569L511 558L526 572Q620 663 707 682Q722 685 737 685Q781 685 804 665T830 619T838 565T854 525Q866 511 897 511Q917 511 925 513L937 515Q938 515 941 509T944 501T925 493T870 470T803 438Q735 406 735 401Q735 400 741 399T767 390T814 374L828 367L829 307Q829 233 833 202T852 144Q873 109 896 90Q906 82 928 82T976 95V92Q976 88 978 72L807 -28Q768 39 733 87L718 108V149Q718 230 714 257T693 298Q654 333 580 333Q524 333 520 329Q520 300 489 224T443 133Q441 131 333 53T223 -27Q221 -26 204 -11T169 16T136 28Q110 28 66 -8L56 -16Q52 -13 40 -1L48 7Q165 124 211 124Q232 124 287 77L298 67Q309 73 337 97Q397 150 397 347Q397 419 379 474T330 560T269 604T207 619Q177 619 152 601T126 563Q126 540 185 479T244 387Q240 336 160 289Q144 278 98 255L80 246L62 261L79 272Q96 283 113 301T130 337Q130 353 115 373T81 410T47 451T31 498ZM524 358Q537 358 657 405T777 457Q777 459 768 459Q749 462 738 474T723 499T714 539Q706 585 697 599Q681 618 657 618Q632 618 597 595T532 515L525 502L524 441Q524 375 523 369Q523 358 524 358\",120190:\"457 -31Q356 -31 272 6T135 120T82 304Q82 372 106 430T170 527T241 588T305 626Q341 643 386 657T460 678T495 685T554 660T674 609T778 584Q800 584 818 591T848 610T866 633T878 651T883 659L893 649L901 639Q879 574 803 532T666 490Q661 490 657 490T650 491T641 492T633 495T622 500T610 505T595 513T577 522T554 533T527 547Q436 594 415 602Q393 608 374 608Q303 608 253 545T202 386Q202 229 307 135T568 41Q674 41 748 85T822 198Q822 244 779 283T639 322Q595 322 499 303T383 283Q358 283 335 290T291 318T270 374Q270 418 313 460T424 510H431L435 505L440 500Q425 496 403 475T380 427Q380 382 431 373Q437 372 475 372Q543 372 626 388T742 404Q831 404 868 362T905 260Q905 182 831 108Q692 -31 457 -31\",120191:\"666 641Q737 641 794 686L802 662Q790 648 734 596L677 541L664 538Q630 528 583 528Q540 528 482 537L461 541Q402 512 402 456Q402 427 439 387T512 311T549 253Q549 220 455 139L440 126Q541 75 586 75Q600 75 619 80T654 94T685 110T709 124T719 130Q722 125 725 119L730 108Q700 72 568 -18Q551 -30 542 -30Q495 -30 404 6T270 42H263Q213 42 142 -11L131 -19L129 -8Q126 1 126 4Q218 84 301 126L316 134H406L413 142Q436 165 436 189Q436 202 421 221T364 281Q336 307 318 328T296 356T283 381L290 394Q338 478 410 540Q419 549 417 549Q415 550 369 558T268 575T195 584Q153 584 127 567T100 523Q100 499 116 479T151 447T170 433Q170 429 171 428Q171 427 131 394T88 359Q82 363 73 370T47 403T31 457Q31 513 79 565T197 648T332 679Q369 679 490 660T666 641\",120192:\"273 244Q273 281 244 331T186 428T155 502Q155 524 165 536Q239 634 333 688Q338 684 345 680L356 672L344 664Q310 642 295 624T280 582Q280 550 303 505T348 407T371 300Q371 270 362 248L247 123L358 92Q452 64 484 64Q507 64 523 72Q553 87 573 109Q583 121 586 146T593 283Q594 303 594 344Q594 401 591 461T584 558L581 595Q598 600 623 611T672 634T719 659T754 678L768 686Q770 686 784 673L782 670Q781 668 777 664T768 655Q747 635 738 616T721 535T714 359Q714 205 723 176Q727 164 744 133T771 89Q780 75 804 75Q814 75 853 87L867 92L871 73L671 -39L654 -10Q636 20 619 50T600 83Q600 84 589 75T539 34Q478 -16 475 -19Q469 -22 449 -28T414 -34Q410 -34 394 -32Q356 -28 282 -2L237 15Q169 38 126 38Q106 38 85 27T51 4T37 -8T27 -1T18 8Q18 10 70 63T124 116Q154 123 176 131T223 154T260 191T273 244\",120193:\"133 343Q133 360 79 416T25 496Q25 523 58 563T118 624Q197 685 293 685Q331 685 339 684Q453 665 489 558L493 546Q521 570 553 596T640 653T725 684Q753 684 783 672T844 641T889 618Q895 616 912 616Q924 616 936 617T956 620T965 622T966 612V604L952 595Q924 576 895 549Q864 517 856 496T847 448V434Q847 395 848 388L859 323Q874 241 874 212Q874 142 830 96Q796 62 724 14Q661 -29 603 -29Q555 -29 421 28T242 86Q182 86 110 31Q105 28 102 26T99 25Q88 36 88 42Q95 54 222 142Q252 163 262 165Q319 183 344 218Q378 266 378 377Q378 444 362 494T319 571T266 610T212 623Q181 623 156 603T131 562Q131 539 154 512T206 458T243 416Q246 409 246 399Q246 387 242 377T225 351T178 311T94 259L79 251Q72 256 68 261T62 268L61 270L70 277Q131 318 133 343ZM822 526Q778 531 719 564T628 597Q611 597 579 574Q543 543 513 506L505 495L506 473Q506 469 506 461T507 449Q507 348 467 271L462 261L404 218L348 174Q349 173 356 173Q384 169 450 144L546 105Q665 56 708 56Q737 56 746 72T756 118Q756 129 755 135L741 219Q725 314 725 334V344Q725 416 736 431Q748 450 815 510L832 526H822\",120194:\"133 317T133 338T80 413T26 496Q26 532 83 591Q100 608 111 616T151 644T219 672T304 682Q381 682 434 646T506 564L510 557Q513 557 534 573L677 665L707 683L790 561L803 572Q933 682 1001 682Q1037 682 1098 650T1193 616Q1208 616 1222 619L1235 622Q1239 622 1239 616Q1239 611 1240 609Q1240 608 1206 577T1138 503T1104 430Q1104 409 1123 330T1142 208Q1142 183 1136 147Q1127 118 1117 106Q1114 103 1031 48T935 -14Q930 -18 908 -22T862 -27Q826 -27 759 -6T647 26Q597 38 578 38Q573 38 561 33T533 20T505 4T480 -10L469 -16L452 -26L439 -28Q423 -30 411 -30Q358 -30 279 7T169 45Q125 45 58 -5L47 -14L41 -4L35 8Q35 11 56 29T113 75T181 125L200 139H217Q279 143 320 180T377 270T394 393Q394 453 378 498T334 568T277 605T213 617Q177 617 155 607Q140 600 130 587T119 560Q119 545 137 522T177 479T217 434T236 393Q236 324 98 251L89 246L76 253L63 261Q91 275 112 296ZM1088 526Q1066 526 1004 556T909 586Q863 586 816 539L802 526L804 514Q814 461 814 411Q814 319 781 238Q772 214 760 198T730 165T702 136L715 133Q759 122 848 90T973 57Q1003 57 1017 80Q1022 93 1022 116Q1022 152 1003 241T983 377V391Q983 405 985 409T1002 429Q1019 450 1045 475T1090 514L1107 528Q1104 527 1102 527T1096 527T1088 526ZM699 358Q699 391 696 419T688 467T675 503T660 530T642 550T626 563T608 574T593 582Q581 575 559 554T524 512Q523 510 523 477Q523 315 444 218L435 207L368 169Q301 132 301 131Q307 128 315 125L377 99Q476 57 515 57Q534 57 608 94L627 102L636 111Q699 187 699 358\",120195:\"273 679Q354 674 408 633T477 525L484 533Q496 548 524 574T571 615Q594 633 625 649T675 673T699 681Q724 632 747 607Q754 601 756 599T765 594T777 591T794 590Q818 590 834 594V585L835 577L704 513L693 518Q657 534 631 560T597 599Q596 601 581 584Q495 490 489 379V366H562L681 369Q682 369 679 366T668 355T651 341L620 314H485V295Q490 190 543 125T686 60Q720 60 789 88L801 93V89Q798 83 798 66Q781 59 685 -10L665 -25L634 -30Q596 -35 594 -35Q570 -35 536 -23T477 19Q461 37 445 67T418 118L409 138Q401 131 388 120T340 79T273 28T206 -12T151 -31Q129 -31 90 -12T32 22L113 101Q114 101 120 96T136 84T160 69T189 56T221 51Q256 51 305 90Q376 149 376 301V315H293Q276 315 251 315T210 314T190 313L168 312Q168 313 200 340L231 368L238 367Q275 367 311 366H378V387Q376 470 355 512T291 572Q274 579 252 579Q223 579 197 568T156 544T131 519T117 508Q112 512 108 518L99 527L117 545Q177 604 255 665L273 679\",120196:\"34 496Q34 518 53 549T107 610T195 661T310 682Q357 682 398 663T460 611Q467 600 475 583T489 554T495 542Q495 544 531 570T617 629T700 676L724 688Q742 670 756 657T784 635T806 621T830 606T856 592Q878 416 878 340Q878 154 805 -3L798 -20L779 -40Q706 -113 613 -163T421 -214Q359 -214 317 -196T256 -160L306 -63L313 -64L320 -66L326 -79Q337 -104 349 -120T392 -151T470 -166Q576 -166 644 -101Q750 7 750 292Q750 426 721 495T617 565H611Q563 565 513 509L506 501L508 493Q508 490 509 475T510 445Q510 319 458 236L451 225L436 216Q406 198 365 169T318 134L332 127Q336 126 397 103T489 80H493Q527 80 593 129L604 137L607 127Q610 119 610 116Q610 114 592 95T543 46T484 -4Q450 -27 446 -27Q441 -27 402 -18Q365 -9 290 20T188 50Q135 50 64 -7L52 -17L43 -7L34 2L51 19Q118 87 177 132L192 143H215Q259 145 289 155T335 184T355 214T366 245Q382 306 382 388Q382 426 381 436Q368 520 318 570T214 621Q184 621 165 608T142 583T137 562Q137 541 163 508L201 469Q245 425 251 408Q253 403 253 398Q253 383 240 366T212 335T161 295Q128 271 99 253L89 247L77 256L65 266L76 273Q125 301 134 329Q136 334 136 342Q136 357 124 372T88 410T49 455Q34 479 34 496\",120197:\"278 601Q242 601 212 591T167 570T121 533Q114 528 111 525L93 550Q223 661 244 667Q299 677 356 677Q415 677 456 666T515 634T541 596T549 555Q549 513 529 478T480 421T424 388T377 372Q365 370 365 367Q365 365 389 365T450 358T523 337T588 282T623 183Q624 177 624 161Q624 20 524 -60Q415 -148 285 -148Q242 -148 213 -139Q181 -131 159 -109Q136 -87 127 -56T114 6T104 49Q94 69 57 69Q38 69 13 58L1 53Q1 55 0 59T-3 68T-4 76Q78 130 138 142Q150 144 162 144Q213 144 227 120T242 31Q242 -30 263 -66T345 -102Q397 -102 444 -52T491 107Q491 172 471 211T428 265Q392 288 306 288Q269 288 233 284L218 282Q208 289 208 291L229 324L251 359Q250 360 248 360Q239 360 248 371L256 381H273Q344 385 378 409T413 495Q413 537 384 569T278 601\",120198:\"80 129V151Q80 241 99 363Q99 367 111 372T172 401T285 465L297 472Q340 455 405 443L423 440L455 453Q486 467 489 467L497 461L494 451Q480 390 480 292V283Q480 207 483 155L484 143L535 80L558 90L582 99Q586 95 586 83Q586 81 513 25L443 -29Q410 16 386 40L371 55V61Q371 63 371 67T370 74V80L278 25Q186 -29 184 -31Q182 -32 160 -12T112 35T80 75V129ZM359 366Q334 366 300 371T243 382L221 388Q218 388 212 375T200 323T194 228Q194 191 197 152L198 139L217 120Q245 92 269 74L279 66L304 78Q338 95 349 100L369 110V152Q368 164 368 210T367 275Q367 358 366 361V366H359\",120199:\"99 398Q99 610 86 662Q86 665 95 669T106 674L108 669Q109 664 112 654T119 635Q122 626 125 616T130 601L131 596Q214 649 273 678Q295 690 298 690Q299 690 304 688T313 682L317 679Q275 653 240 612Q210 569 210 469V459Q210 450 210 432T211 406L212 378L285 425Q301 435 321 447T350 466L360 472Q360 473 361 473T368 471T401 456T465 429L501 414V408Q504 386 504 309Q504 255 500 203T491 125T485 97Q485 95 445 74T343 23T237 -24L214 -32Q197 -22 165 3T109 49T87 73Q99 169 99 398ZM386 251Q386 320 380 347V350L305 374L282 382L214 348L213 274Q213 184 214 165V131L230 119Q288 76 349 54Q386 137 386 251\",120200:\"227 393Q215 393 210 351T205 269Q205 161 213 153Q220 145 244 125T290 88L312 72L365 92Q414 113 418 113V93L365 60Q255 -9 221 -26L211 -18Q158 21 91 88L90 107Q87 167 87 225Q87 267 90 302T96 351T100 366L295 473L311 470Q340 464 368 454T410 437T424 429L347 334L342 333H337L325 342Q299 363 271 378T228 393H227\",120201:\"88 117Q88 177 91 231T97 310T102 341Q102 343 118 357T168 397T239 447L257 459L268 454L278 449Q242 416 238 412L219 394Q219 391 216 378T211 349T206 307T203 249Q203 211 206 166L208 148Q224 132 261 108T333 70Q341 66 342 67T350 79Q393 157 393 302Q393 368 388 406V411L371 424Q199 558 101 558Q69 558 28 545L18 542L8 549L-1 557L24 569Q61 587 147 621L177 632Q179 631 194 627T216 621T240 613T269 602T302 589T340 571T382 549T431 522T484 488Q504 475 504 472Q511 449 511 365Q511 248 474 129L468 108L451 96Q427 77 347 28T254 -28Q235 -20 174 21T89 86L88 117\",120202:\"309 69Q391 98 416 108Q418 106 422 100T425 92Q419 86 326 30T229 -27Q228 -27 207 -13T154 27T97 76L85 87L84 106Q81 152 81 194Q81 295 93 359L95 369L286 471L313 449Q376 397 414 372L428 362Q428 360 375 318L188 181V170Q188 156 189 153V148L203 138Q228 119 266 94T309 69ZM209 389Q208 388 204 366T194 307T187 244Q187 225 188 225T201 233L245 261Q283 284 291 291Q324 313 324 316L296 334Q280 343 259 357T224 380L210 390Q209 390 209 389\",120203:\"128 400Q127 401 121 422T108 478T99 540V555L111 569Q135 597 165 626T214 671T235 687L249 678Q263 668 282 659T315 650Q335 650 362 666L372 654L286 569H271Q205 576 173 586V583Q173 558 208 492T252 401Q253 399 310 399T367 398L332 355H254V311Q251 160 235 16Q230 -28 226 -36Q225 -38 221 -45Q171 -140 121 -211L113 -222H104Q94 -222 94 -220Q94 -215 105 -187L121 -145Q139 -80 139 35V93Q139 222 135 314L134 354Q134 355 84 355H35L84 399H106Q128 399 128 400\",120204:\"92 71Q92 74 91 88T88 128T86 183Q86 230 91 275T102 342T109 366Q115 372 207 422T305 472Q407 426 431 426Q435 426 476 445L519 465L525 463L532 461Q497 392 497 268Q496 255 496 233Q496 179 516 92T539 -10L541 -22L526 -38Q441 -126 355 -194L339 -206L327 -207Q324 -207 319 -207T310 -208Q242 -208 171 -179T73 -131L56 -141Q40 -150 38 -150Q17 -140 17 -137Q17 -136 18 -136T98 -79L176 -23Q174 -21 134 24T92 71ZM226 393Q224 393 221 372T214 312T210 235Q210 182 214 144L215 132L230 118Q281 70 301 66Q304 66 331 80T373 105L384 112L383 165Q383 224 387 309Q387 314 387 319T387 329T388 336T388 341V343Q388 344 381 344T339 354T249 384Q246 385 243 386T236 389T231 391T228 392L226 393ZM414 -80Q414 -64 411 -43T403 -1T394 37T386 66T382 79Q381 79 286 15T189 -52Q312 -125 365 -125Q397 -125 405 -115T414 -80\",120205:\"95 661Q95 662 103 667T113 672L126 634L137 596L147 602Q235 656 275 677L292 687L303 680Q305 679 307 677T312 674L313 672L310 670Q307 669 301 667T289 660T274 649T259 634Q250 622 244 611T233 585T226 560T222 528T221 497T220 456T219 413V377L232 384Q244 391 271 409T339 455L362 471L383 461Q425 440 491 415L504 410V406Q507 399 507 269Q507 76 486 -21Q485 -30 483 -33T461 -57Q382 -139 299 -207L281 -197L263 -186L266 -185Q268 -184 280 -177T312 -155Q344 -130 353 -116Q394 -59 394 117Q394 162 391 216T386 301T382 335Q382 338 365 346T323 364T281 376L250 362Q220 347 219 347Q213 336 213 232Q213 177 217 144L218 128L224 119Q244 92 263 71L272 60Q206 21 157 -24Q156 -24 151 -16T132 11T98 52L89 62L91 103Q104 289 104 436Q104 471 103 506T101 568T99 616T96 649L95 661\",120206:\"73 613L164 686L184 666Q200 650 214 637T235 620T242 614T203 577T162 540Q158 540 122 570T73 613ZM92 58Q92 63 94 83T98 142T101 234Q101 318 97 358V366L59 387L40 379L21 371Q20 371 12 376T3 382L38 406Q78 431 125 466L138 477Q149 468 186 444L219 422V389Q215 324 215 247Q215 136 222 123Q226 113 238 98T258 83Q263 83 292 94L322 104Q322 103 324 97T327 89Q327 88 317 82T272 52T190 -7Q166 -25 164 -25L112 35Q92 55 92 58\",120207:\"74 611L155 682Q172 666 186 655T208 636L235 614Q227 606 191 574L154 540L135 556Q101 582 84 601L74 611ZM10 377L144 477Q145 476 184 453T229 428L233 425V416Q238 346 238 252Q238 93 215 -16L213 -30L185 -57Q29 -203 19 -203Q17 -203 -19 -189L-9 -183Q52 -146 78 -116T114 -37Q120 31 120 192V237Q120 327 113 351T72 380L53 372Q34 362 32 364L10 377\",120208:\"106 72Q110 105 111 193T114 294V308H74L34 309L83 346H115V430Q114 591 106 652Q105 662 107 665T114 668T123 672Q125 672 139 635L152 597L154 598Q156 600 160 602T167 607Q193 625 226 644T279 672T302 682L312 676L321 670L312 665Q281 649 263 626T241 587T233 547Q232 541 231 530T230 510T230 501Q231 501 265 522T334 564T369 583L380 570Q428 509 428 481Q428 475 427 470T423 459T416 448T404 434T389 418T369 397T344 371L321 347L365 346H409L372 308H227V294Q227 272 230 208T234 138Q234 136 256 119T302 84L324 68L372 88Q421 108 422 108T432 90L421 83Q373 53 270 -5L234 -25L204 -1Q172 25 124 60L106 72ZM336 434Q336 452 327 472T308 503T297 514Q296 514 290 510T275 499T264 490Q230 458 230 358V346H247Q268 346 276 350T302 372Q328 398 335 423Q335 424 335 428T336 434\",120209:\"111 275Q111 406 108 518T104 650V657Q105 657 109 660T117 665T122 666L133 629L144 594L161 606Q218 642 272 670L294 681Q295 681 300 677T306 672L302 669Q298 666 292 662T278 651T263 637T251 621Q232 587 227 530T222 343Q222 226 230 125L231 112L244 98L258 83Q271 87 285 92L312 102V84Q297 72 231 24T163 -23L100 55Q110 141 111 275\",120210:\"115 203Q115 257 114 291T112 338T111 355Q111 357 93 370L75 384L54 375Q32 366 31 365Q27 365 16 378Q25 383 89 430L152 476Q175 453 228 420Q229 420 229 418T229 410T227 394L225 369Q279 400 315 425T363 461T376 471Q480 424 514 416V412Q514 411 514 404T513 392L511 376L520 382Q529 387 548 399T584 422Q599 432 618 444T648 463L657 469H658Q661 469 681 461T735 440T796 420Q803 418 803 416Q801 414 798 390T791 325T788 247Q788 220 790 172T794 123Q799 115 814 97T835 78H838Q841 78 867 89L895 101Q896 101 896 100T897 92T900 78L873 62Q810 23 761 -12L736 -30Q735 -30 729 -22T707 7T671 48L661 59Q674 93 674 207V219Q674 341 670 344Q655 353 591 372L576 376L544 364Q511 351 510 351Q507 349 507 224V132L535 95Q541 87 548 78T560 63L563 58Q563 57 504 15T444 -28L385 53L387 67Q396 114 396 206Q396 289 393 334Q393 346 390 348Q369 358 306 373Q301 373 265 361L228 349V335Q227 322 227 284Q227 206 231 157Q231 151 231 144T232 133V129Q232 125 259 90Q286 56 286 53Q287 53 284 51T273 43T258 31L173 -31L166 -20Q160 -11 145 7T119 38T108 59Q108 62 110 81T113 133T115 203\",120211:\"608 88Q572 65 535 37T477 -8T455 -25Q432 7 389 53L375 68L378 82Q386 160 386 195V221Q386 284 385 307L384 344Q352 359 306 373L286 379L213 353V273Q214 229 214 161V129L275 62L163 -28L150 -14Q136 0 121 16T91 44Q86 48 86 50Q95 83 96 148Q96 224 89 340L88 366L79 374Q69 384 67 385L64 388L55 383Q52 382 44 378T33 373L21 367L13 374Q5 379 5 381Q5 384 69 428L133 473Q135 473 147 464T179 443T215 424L214 400V376Q271 404 342 457L363 472Q363 473 364 473Q366 473 375 469T418 449T502 414L512 411V407Q502 330 502 217V197V132L523 109Q527 104 533 97T543 87T547 83L550 80L578 92Q603 103 604 103Q606 103 608 88\",120212:\"107 102Q107 178 112 242T123 334T129 362Q129 363 140 368T199 400T315 469L336 482L346 476Q409 439 498 414L514 410L515 389Q515 208 502 141Q494 101 491 94Q490 89 478 81Q430 51 375 23T288 -20T254 -34Q250 -34 200 -1T119 56L108 65L107 76V102ZM389 355Q367 358 346 363T309 372T282 381T264 388L257 390H256Q254 390 249 381T238 348T227 293Q226 280 226 237Q226 183 231 146L232 131L244 122Q285 91 323 74T374 57H377L380 68Q405 154 405 267Q405 315 401 349V354L389 355\",120213:\"66 435Q66 445 117 501T173 557Q174 557 183 555T193 551Q174 526 174 509Q174 496 190 472T233 428V386L377 482L399 471Q450 445 509 425Q519 421 519 420L518 419Q518 418 518 416T517 410Q517 405 518 381T519 335Q519 222 501 137Q492 84 489 84L473 75Q457 66 423 44T354 -6L338 -19L329 -13Q320 -8 313 -4T297 4T284 10T270 14T258 17T245 20T233 22V12L241 -161L214 -172Q187 -184 160 -195T131 -207Q127 -207 112 -202L113 -188Q113 -182 115 -77T118 31Q118 32 109 32Q63 27 23 0L10 -9Q5 -4 -1 8Q1 13 52 57T114 101H115L117 123Q117 141 117 230V359L110 367Q85 394 71 421Q66 433 66 435ZM384 83Q386 83 389 110T396 180T400 254Q400 294 395 339L394 349L379 355Q308 383 294 383Q290 383 263 372L234 360L233 245V130Q270 125 305 113T361 92T384 83\",120214:\"362 -196Q375 -92 375 47V78L282 24Q189 -29 188 -30Q187 -30 139 21T90 75Q87 84 87 158Q88 206 94 259T107 342L113 372L308 478L322 473Q374 452 421 444L433 442L503 485Q515 479 515 477Q485 378 485 56Q485 -100 494 -164V-171L381 -211L371 -207L362 -202V-196ZM280 72Q301 77 323 86T358 101T372 110Q372 268 377 346L378 358H374Q368 360 358 360T323 365T257 380L234 386Q231 386 229 379Q215 353 211 310T207 180Q207 152 208 150Q210 142 235 114T280 72\",120215:\"23 367Q21 370 18 374T14 380L13 382L151 472L236 411L238 381L290 426Q298 432 307 439T322 452T333 461T342 467L344 469Q382 410 404 399Q410 397 416 397Q423 397 432 399T446 403L451 405Q453 405 453 399V393Q430 374 404 356T364 328T350 318L349 317Q321 320 276 356Q257 371 256 371Q253 374 249 366T242 351Q232 321 232 236Q232 214 232 205T232 182T233 162T235 148T238 137T242 129T249 120T257 114T268 105T281 95Q313 70 314 70L358 85Q377 92 389 96T402 100V90L403 80L229 -26L221 -18Q195 6 166 29T121 63T105 76T106 82T110 97T114 121T117 158T119 208Q119 269 114 329L113 341L103 350Q90 362 67 380L45 374L23 367\",120216:\"189 331Q190 304 196 282T207 252T214 244Q239 244 348 292L371 302L382 297Q398 290 415 279T433 265Q442 238 442 166Q442 103 423 45Q416 42 380 29T310 3T244 -26L227 -34Q139 40 73 40Q61 40 48 37T24 30T6 22T-8 14L-13 11Q-14 11 -18 18T-23 26T38 75T102 125Q107 128 146 131H153Q192 131 296 56Q318 40 318 43Q323 48 323 114Q323 157 321 177L319 194Q308 208 291 216T261 225Q239 225 160 185L123 167Q85 205 79 227Q78 230 78 304V377L171 428Q264 479 265 478Q268 478 287 465T334 440T384 427Q423 427 475 463L478 453Q481 446 481 442Q481 439 410 391L339 342H331Q309 345 277 361T222 391T198 406T195 399T191 372T189 331\",120217:\"328 69Q401 102 403 102Q404 102 405 94T406 84Q406 83 318 28L230 -27Q223 -21 206 -5T171 25T132 54L124 60V71Q129 154 129 297V359H43L44 363Q44 365 44 367L45 369L48 372Q51 374 57 378T68 387L90 405H129V553L285 648Q304 641 306 640L260 598V592Q259 589 255 505T249 413V405H353V402Q353 399 328 379L303 360H245V319Q245 150 253 125Q257 115 276 101T311 78T328 69\",120218:\"444 -31Q444 -29 384 66Q382 66 364 58T309 30T231 -17Q214 -29 212 -29L197 -20Q172 -4 140 11T88 34L68 42Q68 43 73 49T85 67T100 98T113 149T118 221Q118 272 105 332L100 356L58 383L23 365L9 379L76 425Q141 472 144 472Q144 471 183 443L221 414V404Q224 365 224 275V253Q224 159 196 113Q191 104 193 104Q203 104 285 72L308 62L374 89L375 106Q375 266 373 340Q373 364 371 396V424L430 445L491 467Q493 467 499 463T505 457Q505 456 503 442Q488 335 488 187V158L529 81L534 80Q541 80 568 90L598 101Q605 94 602 87L524 27Q445 -32 444 -31\",120219:\"95 67Q104 80 104 193Q104 261 100 321L98 355L91 363Q56 402 56 421Q56 441 82 472T132 524T159 546Q174 542 175 542Q159 520 159 501Q159 481 205 432L221 415L220 401Q219 394 219 387L288 429Q309 441 325 451T347 465T358 472T365 476L504 415V409Q504 408 505 374T507 318Q507 155 474 91L469 80L343 26Q314 14 281 0T232 -20L216 -27L202 -15Q192 -5 152 28Q141 35 126 45T103 60T95 67ZM386 349Q302 389 287 389Q271 383 253 375L220 361V136Q226 120 256 100T312 68T342 56Q355 56 360 68Q389 134 389 258Q389 310 386 341V349\",120220:\"90 58T90 59T92 64T97 78T102 105T107 150T109 218Q109 290 103 350V356L83 377Q55 407 55 425Q55 445 138 528Q158 549 162 549L164 548Q165 548 167 548T170 547L175 546L172 540Q168 533 165 523T161 502Q161 479 216 430L229 419V382Q232 382 366 471Q407 445 500 408L511 404V387L512 370L595 420Q678 469 679 469L693 462Q756 431 795 417L815 409L814 380Q812 187 782 96Q774 71 766 62T744 48T684 25T577 -23L557 -32L546 -26Q536 -19 519 -10T481 10T436 31T393 47Q384 50 380 50Q380 52 381 58T384 77T387 104Q391 174 391 256V292L390 333L377 340Q350 357 304 373L294 376L227 355V348Q224 322 224 243Q228 117 232 112L235 108Q238 103 245 95T257 80L281 50Q281 49 227 10T172 -29L159 -13Q133 19 116 36T94 56ZM652 64Q658 64 667 84T685 162T697 303V336L686 341Q653 356 619 367L591 376Q590 376 553 361T514 344T512 324T510 275T508 221Q508 167 510 152T521 126Q537 112 590 88T652 64\",120221:\"8 -90Q8 -68 13 -63Q13 -56 53 -8T120 63L128 71L129 85Q133 120 134 182Q134 308 131 331T106 365Q100 367 97 369L75 381L35 365L20 377Q20 378 47 397T110 440T161 471L253 413V396Q253 378 254 378L309 422Q364 466 365 466Q365 467 366 466T370 461T376 454Q403 419 426 396L441 380L438 377Q438 376 433 372T420 359T404 344L372 314Q351 320 338 327T310 344T277 364Q261 364 252 316Q251 306 251 235Q251 136 255 129Q257 127 258 124T268 113T298 92Q334 68 335 68Q340 70 349 73T377 84T408 95T421 99Q422 99 422 90L423 82L334 26Q246 -28 243 -28L200 8Q156 43 148 43Q144 43 130 36T99 9T83 -36Q83 -67 121 -89T198 -118L237 -124V-129L238 -133L193 -160Q183 -166 171 -173T152 -184L146 -188Q140 -187 131 -185T98 -173T56 -154T23 -127T8 -90\",120222:\"280 53Q272 47 246 27T199 -10T176 -27L167 -18Q137 17 107 44L90 60L93 71Q108 130 109 290V331Q109 339 109 344T108 353T107 359T105 364T102 369T97 374T91 381Q60 412 60 432Q60 448 86 479T138 534L164 557Q168 553 180 553Q163 532 163 511Q165 491 186 468Q206 443 231 423V404L232 385L371 477L389 468Q439 441 498 418L512 412V386Q512 360 507 190T500 14Q488 -26 445 -67Q401 -111 355 -148T282 -203T249 -221Q247 -220 230 -210T213 -199T229 -191T269 -172T306 -151Q361 -120 379 14Q391 92 391 182Q391 218 386 305Q384 339 380 341Q363 353 330 366T288 379Q282 379 258 368L230 356V181V141Q230 127 232 120T236 108T251 89T275 59L280 53\",120223:\"153 371Q141 371 126 365T100 354T78 340L65 331L57 338L50 346L62 356Q133 419 222 471Q274 453 306 422T338 366Q338 356 329 346T283 301L243 264L262 257Q298 246 361 214Q378 154 378 73Q378 33 371 -9T356 -74T345 -104Q340 -106 267 -160L191 -214H177Q60 -214 13 -150Q-7 -122 -7 -115Q-7 -112 19 -77T106 25T241 149Q241 152 227 158T181 173T109 185V190L108 194L158 229Q212 267 223 278T234 306Q234 329 208 350T153 371ZM258 1Q258 42 257 68T254 105T252 118Q235 105 210 85T144 22T102 -45Q102 -79 146 -106T234 -133H238Q248 -128 254 -80Q258 -58 258 1\",120224:\"183 181Q183 179 152 91T118 0H28L154 346L280 693Q281 694 333 694H385L511 349Q636 4 638 2Q638 0 584 0H530L464 183H184L183 181ZM324 606Q319 578 292 492T238 332T210 256Q210 254 324 254T438 255L429 281L419 308Q409 336 395 378T365 465T339 551T324 611V606\",120225:\"425 363Q438 363 465 353T526 324T585 270T610 192Q610 132 561 78T426 7Q404 2 387 2T240 0H90V694H227Q373 693 396 689Q484 673 533 623T583 517Q583 494 574 473T551 437T520 409T487 388T456 374T433 366L425 363ZM490 516Q490 527 485 539T467 568T423 599T347 621Q340 622 262 623H188V399H261H286Q432 399 478 475Q490 496 490 516ZM514 190Q514 245 462 280T343 322Q336 323 259 323H188V71H274Q365 72 388 77Q445 88 479 121T514 190\",120226:\"59 347Q59 440 100 521T218 654T392 705Q473 705 550 680Q577 670 577 667Q576 666 572 642T564 595T559 571Q515 601 479 613T392 626Q300 626 232 549T164 347Q164 231 229 150T397 68Q453 68 489 80T568 120L581 129L582 110Q584 91 585 71T587 46Q580 40 566 31T502 5T396 -11Q296 -11 218 41T99 174T59 347\",120227:\"88 0V694H237H258H316Q383 694 425 686T511 648Q578 604 622 525T666 343Q666 190 564 86Q494 18 400 3Q387 1 237 0H88ZM565 341Q565 409 546 463T495 550T429 600T359 621Q348 623 267 623H189V71H267Q272 71 286 71T310 70Q461 70 527 184Q565 251 565 341\",120228:\"86 0V691H541V611H366L190 612V397H513V321H190V85H372L554 86V0H86\",120229:\"86 0V691H526V611H358L190 612V384H485V308H190V0H86\",120230:\"59 346Q59 499 157 601T384 704Q436 704 466 700T541 679Q551 674 560 670T575 664T583 660T588 658T590 656Q590 652 582 605T573 557L564 564Q489 626 392 626Q301 626 233 549T164 347T233 145T392 68Q441 68 506 84V223H388V299H599V38L588 33Q494 -11 393 -11Q296 -11 219 40T100 172T59 346\",120231:\"86 0V694H190V399H517V694H621V0H517V323H190V0H86\",120232:\"87 0V694H191V0H87\",120233:\"181 53Q200 53 215 56T241 66T259 79T272 95T280 109T285 122L287 129V694H388V415V229Q388 135 385 112T369 63Q364 51 355 39T328 12T280 -12T212 -22Q172 -22 130 -12T66 8T43 20L46 42Q50 65 54 88L58 110Q58 111 65 104Q107 53 181 53\",120234:\"88 0V694H188V519L189 343L525 694H638L375 419L651 0H541L309 351L188 225V0H88\",120235:\"87 0V694H191V79L297 80H451L499 81V0H87\",120236:\"92 0V694H228L233 680Q236 675 284 547T382 275T436 106Q446 149 497 292T594 558L640 680L645 694H782V0H689V305L688 606Q688 577 500 78L479 23H392L364 96Q364 97 342 156T296 280T246 418T203 544T186 609V588Q185 568 185 517T185 427T185 305V0H92\",120237:\"88 0V694H235L252 659Q261 639 364 428T526 84V694H619V0H472L455 35Q453 39 330 294T185 601L181 611V0H88\",120238:\"55 345Q55 504 149 609T361 715Q386 715 406 713Q521 696 600 592T680 344Q680 193 590 86T368 -22Q239 -22 147 84T55 345ZM276 59T368 59T518 146T576 360Q576 473 525 545T401 634Q371 637 362 637Q284 637 222 562T159 360T217 147\",120239:\"88 0V694H230Q347 693 370 692T410 686Q487 667 535 611T583 485Q583 409 527 348T379 276Q369 274 279 274H192V0H88ZM486 485Q486 523 471 551T432 593T391 612T357 621Q350 622 268 623H189V347H268Q350 348 357 349Q370 351 383 354T416 368T450 391T475 429T486 485\",120240:\"55 345Q55 504 149 609T361 715Q386 715 406 713Q521 696 600 592T680 344Q680 284 665 231T629 143T587 85T551 48L536 35L648 -120L652 -125H531L452 -8L440 -12Q407 -22 369 -22Q239 -22 147 85T55 345ZM579 345Q579 473 517 555T369 637Q279 637 218 554T156 345Q156 223 215 141T368 58Q376 58 382 58T392 58T397 59T401 60T403 61H404Q404 63 360 128T315 194H421L453 150Q485 105 486 105Q490 108 496 113T517 138T545 182T567 247T579 334V345\",120241:\"88 0V694H227H259H302Q365 694 399 689T474 663Q528 637 558 595T589 504Q589 482 584 462T569 426T547 396T522 372T495 353T470 338T449 328T434 322L429 320L440 300Q452 280 477 238T523 160L617 1L565 0Q513 0 512 1Q512 2 424 156L337 309H189V0H88ZM492 504Q492 600 367 620Q354 622 271 623H189V385H271Q363 386 388 392Q432 402 462 430T492 504\",120242:\"55 514Q55 589 115 652T283 716Q315 716 345 711T396 699T432 685T457 672T467 667Q467 666 459 618T449 568Q383 634 282 634Q214 634 182 600T150 525Q150 507 155 492T172 465T194 446T222 432T247 423T272 416T289 412Q353 396 378 384Q432 358 466 307T500 194Q500 110 438 44T272 -22Q215 -22 159 -5T73 28T44 50Q45 51 49 75T57 122T62 146L65 143Q68 140 74 136T88 125T107 111T131 98T160 85T194 74T232 66T274 63H286Q327 63 366 96T406 182Q406 245 352 280Q329 296 265 310T173 339Q124 363 90 409T55 514\",120243:\"36 608V688H644V608H518L392 609V0H288V609L162 608H36\",120244:\"87 450V694H191V449Q192 203 193 194Q200 148 220 117T266 72T311 54T347 49Q404 49 446 84T501 178Q505 195 505 218T507 449V694H600V450Q600 414 600 356Q599 198 595 181Q594 178 594 177Q575 89 505 34T345 -22Q258 -22 184 34T89 196Q88 205 87 450\",120245:\"14 692Q14 694 68 694H122L146 633Q325 165 339 90Q340 87 341 87Q341 124 530 619L558 694H605Q652 694 652 692Q650 690 523 354T390 10L387 0H279L276 10Q271 18 144 354T14 692\",120246:\"115 694Q115 693 156 550T233 266T270 90L271 85Q272 86 272 92Q272 153 405 616L427 694H524L553 590Q672 174 681 95L682 84L684 95Q689 138 728 287T803 563T841 692Q841 694 885 694T929 693Q929 691 829 346L730 0H679L628 1L606 75Q478 524 470 600L469 611L467 600Q458 518 338 101L310 0H213L114 346Q14 691 14 693Q14 694 64 694H115\",120247:\"14 0Q16 5 144 184T275 367L153 528Q121 571 88 615T42 674T28 694H150L228 584Q315 463 316 461L326 448L497 694H610L609 692Q606 689 492 528Q440 454 409 410T378 366Q378 365 515 182L652 0H531L326 292Q326 293 299 254T226 146L128 0H14\",120248:\"4 693L64 694H125L174 621Q335 378 340 364L341 362Q361 398 395 450L558 694H663L383 277V0H282V278L143 485Q112 531 75 586T21 668L4 693\",120249:\"69 617V694H555V643L373 362Q190 81 190 79H234Q244 79 272 79T344 80T419 81H560V0H55V53L237 334Q420 615 420 617Q413 618 387 618Q380 618 334 618T245 617H69\",120250:\"236 387Q209 387 184 382T141 370T111 355T91 342T83 337L82 355Q80 373 79 393T77 417Q77 419 81 421Q86 423 91 426Q155 460 227 460H238Q319 460 368 400Q393 371 400 341T408 252Q408 240 408 207T407 152V0H317V39L306 32Q244 -10 159 -10H152Q109 -10 77 22Q38 61 38 126Q38 142 39 146Q55 199 130 223T295 252H314V277Q314 305 313 310Q308 342 287 364T236 387ZM303 186Q124 180 124 126Q124 105 144 86T208 66Q284 66 309 124Q314 137 314 166V186H303\",120251:\"303 -11Q280 -11 259 -6T222 6T194 21T176 33T168 38V0H75V694H165V550L166 405Q247 455 336 455Q397 455 439 389T482 226Q482 115 428 52T303 -11ZM390 221Q390 283 361 331T265 379Q214 379 177 342L168 334V118Q203 66 258 66Q316 66 353 106T390 221\",120252:\"34 223Q34 327 99 393T245 460Q290 460 301 459Q328 455 354 445T395 427T410 415L396 338L386 344Q377 349 362 357T335 370Q305 381 258 381H252Q182 381 146 315Q126 275 126 224Q126 158 159 113T255 68Q329 68 394 106L408 114L410 93Q411 72 412 52L414 32Q407 27 394 20T338 2T252 -10Q156 -10 95 58T34 223\",120253:\"33 224Q33 321 81 388T197 455Q277 455 342 414L351 408V694H441V0H348V44L338 37Q278 -10 198 -10Q177 -10 168 -8Q99 11 62 90Q33 148 33 224ZM348 337Q307 378 263 378Q260 378 256 378T251 379Q239 379 223 374T182 355T142 305T126 220Q126 90 225 67Q231 66 250 66H255Q306 66 342 115L348 124V337\",120254:\"28 226Q28 329 91 395T235 461Q258 461 279 456T325 436T368 397T399 332T415 238V219H113V215Q113 163 151 114T248 65Q273 65 298 70T341 82T373 96T396 108L403 113Q403 106 406 76T409 38Q409 34 408 33T393 24Q325 -10 252 -10Q155 -10 92 59T28 226ZM340 289L338 297Q335 305 333 310T327 326T317 343T304 358T286 372T263 381T233 385Q212 385 193 376T162 353T140 325T127 301T123 289H340\",120255:\"262 705H267Q300 705 347 694V612L336 616Q303 628 274 628H266Q224 628 199 605Q187 590 184 579T181 541V507V444H287V371H184V0H94V371H27V444H94V492Q94 544 95 550Q102 617 151 661T262 705\",120256:\"55 286Q55 357 105 406T224 455Q280 455 323 421L322 423L318 427Q318 428 339 434T396 448T465 455H471L478 416L485 377Q484 377 474 379T445 383T401 385Q397 385 391 385T381 384L362 383L357 387Q358 386 364 375T375 354T384 325T389 287Q389 217 340 168T221 119Q178 119 138 142Q133 145 131 143Q125 131 125 117Q125 82 155 72L227 71Q230 71 251 71T280 71T310 69T343 65T373 57T403 46T428 30T449 7Q471 -26 471 -62V-71Q471 -136 384 -178Q326 -206 250 -206Q159 -206 102 -172T30 -92Q28 -84 28 -68T31 -37T40 -12T52 7T64 21T75 31T82 38Q60 68 60 106Q60 145 80 180L86 189L80 199Q55 240 55 286ZM304 233T304 287T279 362T220 383Q189 383 165 361T140 287Q140 243 161 217T220 191Q253 191 278 212ZM250 -134Q298 -134 331 -122T375 -96T387 -69Q387 -21 306 -7Q288 -5 216 -5Q161 -5 153 -7Q146 -9 139 -13T122 -31T113 -66Q113 -75 113 -80T127 -97T166 -121Q203 -134 250 -134\",120257:\"163 395Q223 455 307 455Q417 455 438 354Q442 331 443 164V0H350V157Q349 315 348 320Q334 378 259 378H253Q224 378 204 358Q180 334 173 301T165 209Q165 198 165 172T166 129V0H73V694H163V395\",120258:\"67 576V680H171V576H67ZM74 0V444H164V0H74\",120259:\"88 576V680H192V576H88ZM31 -126Q40 -126 48 -125T62 -122T73 -117T82 -111T89 -105T94 -99T98 -92L102 -86V444H192V180Q191 -45 191 -70T184 -113Q171 -152 140 -178T63 -205Q34 -205 4 -197T-43 -181T-59 -171T-51 -133T-41 -96L-38 -99Q-34 -102 -28 -106T-13 -115T7 -123T31 -126\",120260:\"76 0V694H163V257L340 444H449L286 272L292 263Q296 259 378 138T463 12L471 0H372L309 92Q294 114 277 139T250 179T237 198L228 211L160 139V0H76\",120261:\"74 0V694H164V0H74\",120262:\"160 392Q223 455 304 455Q359 455 386 436T430 383L437 391Q495 455 584 455Q694 455 715 354Q719 331 720 164V0H627V157Q626 315 625 320Q611 378 536 378H530Q501 378 481 358Q457 334 450 301T442 209Q442 198 442 172T443 129V0H350V157Q349 315 348 320Q334 378 259 378H253Q224 378 204 358Q180 334 173 301T165 209Q165 198 165 172T166 129V0H73V450H160V392\",120263:\"160 392Q214 446 283 454Q285 454 292 454T303 455H306Q417 455 438 354Q442 331 443 164V0H350V157Q349 315 348 320Q334 378 259 378H253Q224 378 204 358Q180 334 173 301T165 209Q165 198 165 172T166 129V0H73V450H160V392\",120264:\"28 222Q28 323 95 391T244 460Q275 460 281 459Q364 445 417 377T471 219Q471 124 408 57T250 -10Q158 -10 93 57T28 222ZM377 230Q377 277 364 310T328 358T287 379T248 385Q233 385 219 382T186 369T155 342T132 297T122 230Q122 146 159 108T250 69H253Q263 69 274 70T305 81T339 106T365 154T377 230\",120265:\"166 404Q194 424 241 439T337 455H341Q410 455 451 370Q483 307 483 222Q483 128 433 59T306 -10Q282 -10 260 -5T222 7T194 21T176 33T168 38V-194H75V444H165V424L166 404ZM390 222Q390 287 354 331T266 376T177 340L168 332V118Q200 66 257 66Q313 66 351 112T390 222\",120266:\"33 220Q33 325 87 389T206 454Q286 454 341 406L351 398V455H441V-194H348V41L338 35Q276 -8 198 -11Q171 -11 154 -5Q102 12 68 74T33 220ZM126 220Q126 160 161 113T251 65Q305 65 351 123V298L350 301Q349 304 347 308T342 319T336 331T327 343T315 355T300 365T283 373Q273 375 256 375Q208 375 167 332T126 220\",120267:\"171 389Q237 455 320 455H327V373H317Q262 369 220 336T167 248Q165 239 164 119V0H74V450H159V377L171 389\",120268:\"33 326Q33 376 60 408T117 450T175 460H190Q245 460 272 454T345 429Q345 428 338 388L331 349Q278 386 188 386H183Q119 386 119 336Q119 307 142 295T210 276T278 256Q360 213 360 130Q360 108 354 88T332 43T281 5T195 -10Q152 -10 111 1T49 22T28 35Q29 36 32 56T39 95T43 115T51 110T72 99T102 85T143 73T193 68Q274 68 274 123Q274 152 248 167Q234 178 187 186T115 207Q66 229 46 273Q33 298 33 326\",120269:\"333 27Q333 24 314 16T257 -1T184 -10H172Q146 -10 128 14T105 58T99 91Q95 113 95 251V371H18V444H98V571H182V444H316V371H182V253Q183 128 189 104Q199 68 234 68Q277 72 314 98Q315 93 323 61T333 27\",120270:\"353 39Q352 38 344 34T331 27T315 19T295 11T270 3T241 -3T207 -8T168 -10H162Q148 -10 137 -8T111 2T87 30T74 81Q73 89 73 268V444H166V268L167 92Q171 79 174 74T192 64T238 59Q317 59 344 116Q349 128 349 148T350 291V444H443V0H353V39\",120271:\"178 0Q15 441 14 442Q14 444 60 444Q107 444 107 442Q108 441 136 364T196 194T232 67Q233 98 280 234T356 442Q356 444 401 444T446 442L282 0H178\",120272:\"14 444H105L108 434Q192 160 200 74V65L201 75Q206 144 282 399L296 444H381L399 381Q480 112 480 69L481 70Q481 113 562 386L580 444H668L534 1L483 0H432L429 10Q343 294 338 367L337 377Q336 375 336 370Q336 340 313 250T269 88T245 11L242 0H195L148 1L14 444\",120273:\"187 229L6 444H107L227 294L344 444H393L442 443Q439 437 299 268L267 229L460 0H359L294 88Q280 107 262 131T236 166L227 177L100 0H0Q1 1 47 58T140 171T187 229\",120274:\"113 -204Q83 -204 63 -200L43 -197Q43 -196 40 -157T36 -117L48 -121Q79 -133 114 -133Q124 -133 130 -132T145 -121T163 -94Q169 -82 184 -42T200 1L188 29Q176 57 152 115T107 223T62 330T26 416L14 443Q14 444 61 444H109L122 411Q230 155 236 75L237 65V74Q245 161 348 424L356 444H401Q446 444 446 443L396 313Q345 183 293 49T236 -93Q191 -204 123 -204H113\",120275:\"42 370V444H400V395L156 76L279 77H402V0H28V51L273 371L157 370H42\",120276:\"110 0H86Q42 0 42 27Q42 37 148 350T258 667Q269 687 291 692Q295 694 366 694H399Q432 694 448 689T474 667Q477 663 583 350T690 27Q690 0 642 0H617H592Q582 0 575 1T561 2T549 6T541 11T533 18T527 26T522 37T517 49T512 64T506 81L490 130H225Q225 128 208 79T189 27Q185 19 180 14T170 7T156 3T143 1T127 0T110 0ZM439 279Q359 524 359 547L357 555L355 543Q347 503 270 263L259 231H357Q455 231 455 232L439 279\",120277:\"119 1Q98 5 92 28V667Q98 686 118 693Q121 694 272 694H289H346Q439 694 500 681T600 625Q640 580 640 513Q640 451 601 414T504 364L518 361Q568 351 602 329T649 280T666 235T671 197Q671 172 665 147T642 91T586 37T488 5Q456 1 282 1H119ZM489 509Q489 532 479 548T450 573T421 585T394 591Q387 592 315 593H247V404H298H325Q432 404 466 444Q489 470 489 509ZM517 194Q517 235 502 261T458 299T407 313T353 317H329H322H247V101H319H357Q387 101 407 103T452 111T492 133T514 171Q516 176 517 194\",120278:\"423 -11Q339 -11 275 9T171 62T106 143T71 240T61 347Q61 450 93 527Q157 664 313 694Q357 704 416 704Q479 704 517 699T608 676Q634 667 635 660Q635 653 624 592L612 528L609 524Q604 521 601 521Q595 521 583 531T555 555T505 578T428 589H424Q298 589 250 494Q224 438 224 347Q224 292 233 251T265 175T329 122T432 104Q488 104 524 115T604 158Q607 160 610 162T615 165T619 168L621 170Q625 172 630 170T637 163Q638 160 642 109T647 54Q646 49 625 37T568 11T499 -7Q463 -11 423 -11\",120279:\"119 1Q98 5 92 28V667Q98 686 118 693H124Q131 693 142 693T168 694T200 694T237 694H296Q416 694 450 692T525 677Q732 617 732 342Q732 169 644 81Q593 32 528 16T372 0Q356 0 324 0T276 1H119ZM573 349Q573 387 571 413T559 473T532 527T482 567T403 591Q395 592 320 593H250V101H321Q418 102 456 114Q553 144 569 263Q573 303 573 349\",120280:\"277 122Q280 122 380 123T544 125Q552 125 557 125T565 124T569 124Q595 115 595 75V62V47Q595 9 569 2Q564 0 341 0L119 1Q99 7 92 28V664Q98 683 118 690Q121 691 335 691T554 689Q580 682 580 644V632V618Q580 582 554 573Q553 573 551 573T542 572T527 572Q464 572 364 573T260 575H253V412H385H459Q524 412 536 404T549 357Q549 341 549 334T542 318T523 305Q518 303 385 303H253V122H277\",120281:\"512 572Q451 572 356 573T258 575H253V400H370H431Q494 400 506 392T518 345Q518 307 507 299T437 291H370H253V161Q253 141 253 113T254 75Q254 23 245 12T195 0H170L119 1Q99 7 92 28V664Q98 683 118 690Q121 691 327 691T538 689Q564 682 564 644V632V618Q564 582 538 573Q537 573 535 573T526 572T512 572\",120282:\"61 347Q61 405 70 454T105 550T171 631T276 685T426 705Q483 705 537 693T620 668T650 646Q650 645 649 637T645 612T639 578L627 514L624 510Q620 507 615 507T597 520T566 548T512 577T430 590Q223 590 223 347T431 104Q478 104 506 112Q508 112 508 164V215H471L434 216L428 222L427 268Q427 315 429 318Q432 323 444 323T544 324H652Q655 320 659 317V45L656 43Q654 39 624 27T536 2T424 -11Q366 -11 317 -2T219 33T137 97T82 200T61 347\",120283:\"92 667Q101 694 143 694H172H198Q244 694 251 669Q253 663 253 539V415H540V539Q540 558 540 585T539 621Q539 673 550 683T611 694H621H646Q671 694 683 690T700 669Q702 663 702 347T700 25Q696 9 684 5T646 0H621H606Q560 0 550 11T539 76Q539 85 539 116T540 169V306H253V169Q253 147 253 116T254 75Q254 23 245 12T194 0H170L119 1Q99 7 92 28V667\",120284:\"85 667Q94 694 136 694H165H191Q237 694 244 669Q246 663 246 347T244 25Q235 0 192 0H163L112 1Q92 7 85 28V667\",120285:\"236 -22Q190 -22 144 -11T72 12T46 29Q63 147 69 153Q80 164 92 146Q124 91 191 91Q222 91 242 102T267 134Q268 139 268 402Q268 663 270 669Q275 687 294 692Q298 694 347 694H367Q393 694 406 690T425 669Q427 663 427 399Q427 132 426 125Q421 87 404 58T366 15T318 -9T273 -20T236 -22\",120286:\"92 667Q101 694 139 694H163H186Q225 694 234 671Q236 663 236 529L237 392L533 682Q550 694 590 694H623H681Q695 680 695 672Q695 670 693 664Q688 657 561 533L431 405L698 33Q701 28 701 23Q701 7 683 0H626H604Q571 0 564 2T545 13Q544 14 530 33T489 90T437 162L332 307Q331 307 284 260L236 214V122V65Q236 32 231 19T210 2Q205 0 161 0L119 1Q99 7 92 28V667\",120287:\"92 667Q98 684 109 689T142 694H172H198Q244 694 251 669Q253 663 253 389V116L278 117Q410 119 490 119H495Q511 119 517 115T534 93V63V48Q534 9 508 2Q503 0 310 0L119 1Q99 7 92 28V667\",120288:\"92 667Q98 684 109 689T146 695Q152 695 167 695T192 694Q200 694 214 694T234 695Q291 695 305 664Q313 651 400 419T487 165Q487 162 488 162T489 165Q489 187 574 413T671 664Q679 680 695 688Q708 694 785 694H828Q855 694 867 689T884 669Q886 663 886 347T884 25Q876 0 832 0H817H802Q758 0 750 25Q748 31 748 293V555L746 544Q737 509 692 386T606 160T564 52Q548 22 502 22H487H472Q423 22 410 52Q407 59 367 160T283 385T231 546L230 548Q229 548 229 293Q229 31 227 25Q222 9 211 5T176 0H158L119 1Q99 7 92 28V667\",120289:\"92 667Q98 684 109 689T146 694H185Q273 694 279 692Q301 689 315 669Q322 660 419 453L554 163L562 143Q564 143 564 401Q564 663 566 669Q574 694 618 694H633H648Q692 694 700 669Q702 663 702 347T700 25Q696 10 683 5T642 0H596H551Q520 0 505 4T478 25Q471 34 374 241L239 532Q231 550 231 552L229 479Q229 440 229 293Q229 31 227 25Q222 9 211 5T176 0H158L119 1Q99 7 92 28V667\",120290:\"362 715Q364 715 376 715T394 716H400Q542 716 626 643T727 426Q731 395 731 342Q731 271 722 225Q674 -22 396 -22Q320 -22 259 -3T148 68T77 201Q62 257 62 342Q62 447 86 522T173 649Q245 707 362 715ZM568 433Q551 623 396 623Q383 623 370 622T333 612T292 591T257 550T233 485Q223 442 223 350Q223 276 232 227T267 137Q309 74 397 74Q433 74 461 85T507 113T537 156T556 205T566 260T569 310T570 357Q570 409 568 433\",120291:\"641 470Q641 426 630 391T603 334T561 295T513 271T459 259T408 254T361 253H350H337H253V142Q253 125 253 100T254 67Q254 32 249 19T227 2Q222 0 170 0L119 1Q99 7 92 28V667Q98 686 118 693Q121 694 271 694Q428 693 462 688Q641 656 641 470ZM487 467Q487 495 485 510T474 546T442 578T382 592Q375 593 310 593H250V347H309H339Q364 347 380 348T418 354T451 368T474 395T486 438Q487 444 487 467\",120292:\"450 -20Q444 -20 429 -21T396 -22Q320 -22 259 -3T148 68T77 201Q62 257 62 342Q62 447 86 522T173 649Q245 707 362 715Q364 715 376 715T394 716Q732 716 732 340Q732 268 719 210T686 120T647 68T615 39T601 29T638 -22T676 -73Q679 -78 679 -83Q679 -98 661 -106H593Q526 -106 521 -104Q514 -103 507 -97T496 -84T477 -55L454 -19L450 -20ZM554 509Q516 622 391 622Q294 622 250 535Q220 475 220 345Q220 299 222 266T234 198T258 140T299 99T363 74Q378 71 393 71H395L381 92Q367 114 353 136T338 161Q336 165 336 170Q336 186 352 193L361 194Q370 194 384 194T412 194H452Q457 194 460 194T466 194T471 192T476 191T480 188T483 185T487 180T492 174T497 167T504 158L526 129Q532 127 552 175Q573 231 573 348Q573 455 554 509\",120293:\"654 24Q654 9 644 5T612 0H577L521 1Q509 5 503 13Q498 20 421 160L343 304H250V168Q250 147 250 118T251 78Q251 24 242 12T192 0H168L119 1Q99 7 92 28V667Q98 686 118 693H124Q131 693 141 693T165 694T195 694T229 694T280 694T332 695Q389 695 428 691T510 675T582 637T627 569Q641 532 641 493Q641 377 537 331L497 317L493 316L571 177Q653 28 654 24ZM487 472T487 492T485 525T476 553T450 577T404 591Q398 592 322 593H250V391H321Q327 391 353 391T385 392T412 395T438 401T457 412T474 430T483 456\",120294:\"61 503Q61 547 72 583T110 650T186 698T305 716Q405 716 496 671Q513 664 514 657Q514 656 513 648T509 623T503 589L491 525L488 521Q484 518 479 518H475L461 532Q430 565 395 581T305 598Q201 598 201 523Q201 480 240 462T345 431T443 394Q549 324 549 204Q549 160 538 123T502 51T427 -2T308 -22Q180 -22 69 41Q50 52 49 57Q49 58 50 66T54 91T60 125L72 189L75 193Q80 196 84 196Q87 196 104 182T145 149T212 117T304 102Q408 102 408 188Q408 215 396 234T362 263T319 278T267 290T219 302Q149 324 105 380T61 503\",120295:\"67 687Q70 688 366 688Q661 688 666 686Q692 680 692 641V629V615Q692 579 666 570H660Q655 569 648 569Q645 569 624 569T581 570Q505 570 475 572H447V302Q447 31 445 25Q436 0 393 0H364L313 1Q293 7 286 28L285 300V572H257Q227 570 151 570Q130 570 109 570T84 569Q77 569 72 570H66Q48 577 44 588T40 631L41 661Q47 680 67 687\",120296:\"92 667Q101 694 143 694H172H200Q242 694 251 671Q253 663 253 430Q254 189 255 185Q262 134 288 107T384 79Q498 79 516 168Q520 191 521 431Q521 663 523 671Q532 694 572 694H596H618Q639 694 648 692T665 679Q671 672 671 653Q672 632 672 555V432Q671 200 670 190Q652 79 581 29T383 -22Q137 -22 98 166Q92 195 92 303V667\",120297:\"27 667Q27 683 39 688T75 694H101Q155 694 159 692Q182 687 194 665Q202 652 283 419T374 142Q376 165 473 445Q552 664 553 666Q568 694 618 694H639H658Q681 694 693 689T705 667Q705 660 592 347Q481 32 477 28Q466 7 441 1H292Q266 7 255 28Q251 32 140 347Q27 660 27 667\",120298:\"994 694Q1012 683 1014 668Q1014 661 977 519T896 217T845 26Q831 0 783 0H747H711Q685 0 672 5T649 26Q644 36 583 272T517 548Q516 552 516 551Q503 479 437 227Q389 37 383 26Q367 0 323 0H288H254Q207 0 193 26Q191 32 108 346T24 665Q24 685 44 693Q47 694 98 694H115Q152 694 168 668Q174 657 235 417T297 144Q297 134 300 153Q307 204 362 421T427 668Q441 694 488 694H523Q586 694 597 688Q612 683 620 661T651 549Q664 496 673 462Q744 194 750 146V140Q767 223 800 354T857 576T883 668Q897 694 938 694H958H994\",120299:\"52 1Q37 11 37 23Q37 26 39 32Q39 34 158 202L275 369Q275 370 221 441T112 586T55 663Q53 669 53 672Q53 687 68 693H72Q77 693 84 693T99 694T118 694T139 694H176Q203 694 212 692T230 682Q231 681 239 669T265 634T296 591L358 504L418 591Q481 682 486 686Q491 691 499 692Q505 694 569 694H632Q650 685 650 672Q650 667 646 660Q643 654 592 582T491 440T441 369T566 201T693 29Q694 27 694 23Q694 11 677 0H607L537 1Q523 6 519 10T437 131Q422 153 411 170T390 200T375 222T365 237T359 245L357 247L348 232Q339 218 319 188T283 131Q222 37 211 22T186 1H52\",120300:\"635 694H668Q688 694 698 690T708 670Q708 664 704 658L446 278L445 152V27Q442 20 440 17T433 9T419 1L368 0H339Q316 0 305 5T288 26Q286 31 286 154V278L157 468Q135 500 101 550Q43 635 34 650T24 671Q24 686 39 693Q42 694 105 694H122H132Q163 694 180 689T214 666Q225 654 336 485Q373 425 373 420L374 418Q375 419 375 421Q378 432 418 493T496 609T536 667Q543 676 551 681T572 689T591 693T615 694T635 694\",120301:\"411 584Q243 581 131 581Q122 581 116 581T106 582T102 582Q84 589 80 600T76 640L77 667Q83 686 103 693Q106 694 343 694Q579 694 584 692Q592 691 599 684T609 668Q610 665 610 646Q610 614 608 608Q605 603 434 361L261 116Q340 117 402 118T490 119T533 120T560 120H572Q605 120 614 95Q616 89 616 60V46Q616 9 590 2Q585 0 339 0Q92 0 87 2Q79 3 72 10T62 26Q61 29 61 49Q61 84 63 90Q65 94 152 217T325 461T411 584\",120302:\"255 394Q218 394 186 383T138 358T109 333T94 321H91Q88 321 86 322T83 325T80 331T79 339T78 349T77 362T75 377Q72 410 72 420Q72 423 72 425T73 429T74 431T77 433T80 435T85 437Q166 475 262 475Q360 475 413 440Q462 406 471 341Q472 332 472 181Q472 155 472 119T473 73Q473 20 462 10T398 0H380Q349 0 337 8T324 48V65Q298 30 257 10T172 -11Q109 -11 70 37T31 145Q31 276 307 289H321V309Q321 337 318 352T300 381T255 394ZM176 146Q176 116 190 97T231 77Q251 77 266 85Q322 110 322 185Q322 189 322 192T322 198L321 201V234L308 232Q176 220 176 146\",120303:\"54 667Q63 694 102 694H127H151Q190 694 199 671Q201 663 201 544L202 422L211 428Q270 468 355 468Q523 468 523 231Q523 -10 321 -10Q286 -10 261 -2T204 33Q197 11 187 6T142 0H126L81 1Q61 7 54 28V667ZM372 230Q372 317 355 349T280 382Q251 382 204 356V107Q235 76 274 76Q301 76 320 84T349 105T364 139T371 180T372 230\",120304:\"188 233Q188 199 190 177T200 131T225 95T271 83H281Q356 83 421 130Q433 138 434 139Q446 141 448 131Q449 128 453 84T457 36Q455 30 432 20T364 -1T273 -11Q37 -11 37 232Q37 456 244 474Q246 474 257 474T276 475Q349 475 400 455Q443 436 448 431L451 425Q451 419 443 377Q442 372 441 366T439 356T438 348T436 340T435 334T433 330T431 327T429 325T426 324Q420 324 406 336Q376 362 350 372T281 382Q254 382 236 373T208 352T194 317T189 278T188 233\",120305:\"225 -11Q192 -11 164 -3T104 29T55 102T37 227Q37 321 63 376Q111 469 223 469Q292 469 349 433L359 426V546Q359 564 359 589T358 623Q358 675 369 684T433 694H451Q497 694 505 669Q507 663 507 347T505 25Q500 9 487 5T450 0H432H413Q356 0 356 36V40Q298 -11 225 -11ZM356 359Q326 382 286 382Q239 382 215 358Q189 330 189 256V229V203V195Q189 102 231 86Q251 76 274 76Q318 76 356 114V359\",120306:\"30 231Q30 301 51 351T107 426T181 463T262 474H268Q293 474 312 472T366 459T422 427T462 363T480 260Q480 230 466 222T405 213Q395 213 364 213T311 214H173V211Q173 183 183 148T216 96Q244 76 287 76Q319 76 350 85T399 104T433 125T451 136Q463 138 465 128Q466 125 469 84T473 39Q471 29 423 13T330 -9Q321 -10 286 -10Q213 -10 161 11T81 68T42 144T30 231ZM353 292Q350 324 342 344T320 373T294 384T264 387Q191 387 175 286V282H353V292\",120307:\"67 458H78V502V509Q78 538 79 556T90 604T117 651T169 685T253 704Q254 704 258 704T265 705T275 705T287 704Q364 704 381 687V638V607Q381 591 378 585T366 579Q362 581 351 591T323 610T282 618Q238 618 226 587Q224 581 223 519V458H253Q288 458 298 453Q315 441 315 415Q315 399 312 390T299 377T282 372T259 371H255H226V201Q226 31 224 25Q215 0 174 0H150L106 1Q86 7 79 28L78 199V371H69Q29 371 29 412Q29 425 30 431T40 447T67 458\",120308:\"63 108Q63 142 83 176L76 184Q35 227 35 300Q35 469 243 469Q330 469 385 437L397 443Q451 469 508 469Q515 468 517 466T522 456T528 425Q534 392 534 386Q532 379 523 377Q520 377 509 381T477 390T431 398L425 399Q453 362 453 297Q453 268 445 242T417 189T351 146T242 130Q169 130 119 153Q117 141 117 136Q117 95 155 83Q161 81 252 81Q354 80 362 79Q437 71 475 48T526 -24Q532 -42 532 -65Q532 -116 489 -156T341 -204Q323 -206 274 -206H256Q39 -206 18 -84Q17 -79 17 -68Q17 15 82 42L76 53Q63 79 63 108ZM310 300Q310 359 298 377T238 396Q217 396 204 390T186 368T179 339T178 300Q178 245 189 224T244 203T299 224T310 300ZM414 -66Q414 -55 411 -47T401 -32T387 -21T368 -14T346 -10T322 -7T297 -6T271 -6T246 -6H193Q163 -6 154 -10T140 -30Q135 -45 135 -62Q135 -134 274 -134Q414 -134 414 -66\",120309:\"53 667Q62 694 101 694H126H148Q191 694 198 669Q200 663 200 526V390Q263 469 361 469Q390 469 412 465T456 449T491 413T507 351Q508 342 508 185Q508 31 506 25Q498 0 450 0H432H413Q368 0 359 23Q357 31 357 186Q356 345 355 350Q349 369 336 376Q324 381 301 381H298Q269 381 242 362Q217 342 210 316T202 239Q202 229 202 202T203 157V82Q203 24 195 12T146 0H125L80 1Q60 7 53 28V667\",120310:\"72 574Q55 583 51 591T46 619V636L47 670L48 673Q50 676 52 678T56 684T63 690T73 694H81Q89 694 102 694T129 695H181Q193 687 196 685T203 676T207 661T208 634Q208 603 204 593T181 574H72ZM54 431Q63 458 102 458H127H149Q192 458 199 433Q201 427 201 229T199 25Q190 0 149 0H125L81 1Q61 7 54 28V431\",120311:\"70 634V648Q70 686 96 693Q100 695 151 695H176Q201 695 213 691T230 670Q232 665 232 634V620Q232 582 206 575Q202 573 151 573H126Q101 573 89 577T72 598Q70 603 70 634ZM-41 -84Q-1 -105 28 -105Q67 -105 78 -85Q83 -77 83 -48T84 180Q84 427 86 433Q93 458 136 458H158H180Q201 458 209 456T225 443Q230 436 231 418Q232 397 232 313V183V124V40Q232 -55 228 -87T203 -147Q166 -205 78 -205Q31 -205 -20 -189T-71 -159Q-71 -156 -62 -124T-52 -89Q-49 -84 -41 -84\",120312:\"496 23Q496 9 487 5T457 0H427H398Q367 0 354 11Q352 12 288 99L226 183L191 150V90V54Q191 30 186 18T165 2Q160 0 124 0L90 1Q70 7 63 28V667Q72 694 108 694H128H146Q183 694 192 671Q194 663 194 496L195 325L254 383Q266 394 281 409T301 429T316 441T329 450T341 455T357 458T376 458H409H436Q461 458 470 454T480 437Q480 430 477 427T445 395Q417 368 396 347L319 271Q319 270 358 217T442 103T494 32Q496 30 496 23\",120313:\"54 667Q63 694 102 694H127H149Q192 694 199 669Q201 663 201 347T199 25Q190 0 149 0H125L81 1Q61 7 54 28V667\",120314:\"197 386Q256 468 366 468Q404 468 430 461T471 438T491 413T503 385Q563 469 666 469Q731 469 769 446T814 350Q815 343 815 185Q815 31 813 25Q808 9 796 5T758 0H737L692 1Q672 7 665 28L664 186V206V290Q664 349 655 365T610 381Q581 381 560 370T529 341T515 311T510 291Q509 286 509 157V82Q509 24 501 12T452 0H431L386 1Q366 7 359 28L358 186V206V290Q358 349 349 365T304 381Q275 381 254 370T223 341T209 311T204 291Q203 286 203 157V82Q203 24 195 12T146 0H125L80 1Q60 7 53 28V437Q58 453 80 464H122H142Q167 464 178 460T195 439Q197 434 197 409V386\",120315:\"197 386Q264 468 350 468Q375 468 390 467T429 460T466 443T492 408T507 351Q508 342 508 185Q508 31 506 25Q498 0 450 0H432H413Q368 0 359 23Q357 31 357 186Q356 345 355 350Q349 369 336 376Q324 381 301 381H298Q269 381 242 362Q217 342 210 316T202 239Q202 229 202 202T203 157V82Q203 24 195 12T146 0H125L80 1Q60 7 53 28V437Q58 453 80 464H122H142Q167 464 178 460T195 439Q197 434 197 409V386\",120316:\"274 -11Q32 -11 32 225Q32 346 85 406T249 474H266H271Q302 474 325 471T385 458T451 419T498 346Q518 300 518 225Q518 -11 274 -11ZM367 233Q367 322 350 354T270 387Q240 387 222 377T195 344T184 298T182 233Q182 151 198 117T275 83H282Q318 83 339 104Q355 119 361 146T367 233\",120317:\"125 458H139Q174 458 185 452T202 420L211 426Q245 448 288 458T354 469Q356 469 361 469T369 468Q443 468 481 412Q523 355 523 223Q523 164 509 120T473 51T423 12T371 -7T323 -11Q260 -11 204 33V-65Q204 -80 204 -102T205 -131Q205 -162 200 -175T178 -192Q173 -194 126 -194L81 -193Q61 -187 54 -166V431Q58 447 81 458H125ZM372 230Q372 376 282 376Q247 376 204 352V107L208 103Q213 99 218 95T232 87T251 79T274 76Q323 76 349 116Q372 153 372 230\",120318:\"226 -11Q37 -11 37 236Q37 294 51 338T86 407T135 445T186 464T233 469H235Q300 469 349 422L359 413V425Q359 452 376 464Q384 469 433 469H455Q498 469 505 444Q507 438 507 137Q507 -163 505 -169Q500 -185 487 -189T450 -194H432H413Q367 -194 358 -171Q356 -163 356 -63V40L348 33Q296 -11 231 -11H226ZM281 375Q188 375 188 228Q188 77 275 77Q322 77 359 120V328Q338 357 324 366T281 375\",120319:\"54 437Q58 453 81 464H122H147Q186 464 194 439Q196 434 196 405V377L203 387Q245 456 324 468Q325 468 331 468T340 469Q347 469 356 462V360Q350 355 346 354T339 353T326 353T300 347Q260 337 234 311T202 252Q201 247 201 138Q201 122 201 98T202 66Q202 33 197 20T175 2Q170 0 125 0L81 1Q61 7 54 28V437\",120320:\"37 328Q37 392 75 433T203 474Q254 474 265 473Q319 465 370 442Q378 439 380 432Q380 426 372 384Q364 336 359 333Q358 331 355 331Q348 331 337 341Q282 388 216 388H208Q190 388 180 387T161 377T151 351Q151 333 164 323T224 306L267 297Q314 285 355 246T396 144Q396 17 282 -5Q260 -10 218 -10Q170 -10 124 2T55 26T30 44Q30 48 39 99T49 153Q52 159 60 159Q66 159 70 153Q100 120 133 101T218 82Q231 82 238 83T258 87T277 101T283 126Q283 149 260 160T200 176T153 186Q109 201 73 236T37 328\",120321:\"225 267Q225 202 226 169T232 115T244 88T265 82Q295 84 318 100T345 116Q352 116 354 110T364 77Q373 46 373 43Q373 28 312 9T190 -10Q160 -10 139 1T107 29T89 77T82 136T80 210V258V371H66H59Q39 371 27 386Q20 394 20 417Q21 432 23 437Q35 458 60 458H65H83V510L84 562Q93 589 131 589H154H174Q216 589 223 564Q225 558 225 508V458H274Q330 458 338 453Q355 441 355 415Q355 388 338 376Q330 371 274 371H225V267\",120322:\"53 431Q62 459 100 459Q105 459 114 459T127 458H152Q192 458 201 435Q203 427 203 262Q204 86 208 77Q209 74 216 71Q227 66 258 66H264Q334 66 354 140L356 150L357 290Q357 427 359 435Q365 449 377 453T412 458H432H450Q498 458 506 433Q508 427 508 229T506 25Q498 0 451 0H434H418Q386 0 374 7T360 43V58L352 49Q298 -11 199 -11Q135 -9 101 11T56 80Q52 100 52 273L53 431\",120323:\"26 429T26 435T32 448T44 456Q48 458 85 458H99Q145 458 161 431Q162 429 207 285L251 145L294 284Q333 410 341 430Q351 451 374 456Q379 458 420 458H430Q450 458 457 456T471 443Q473 437 473 435Q473 426 443 325T381 126L350 28Q339 7 316 2Q312 0 250 0Q187 0 183 2Q160 7 149 28L136 68Q124 109 106 166T70 283T39 385\",120324:\"699 458Q717 447 719 432Q719 426 666 230T610 27Q602 10 588 5T548 0H512H482Q431 0 420 17T384 135Q356 241 352 298V308L351 295Q348 251 322 145T290 28Q279 0 233 0H212H191Q146 0 133 27Q130 33 77 229T24 430Q24 449 44 457Q47 458 79 458Q122 458 126 456Q154 450 163 419L233 153Q241 187 272 304T307 431Q318 458 368 458Q394 458 398 456Q421 451 430 431Q434 423 509 147L547 286Q582 416 588 429Q600 454 624 457Q632 458 647 458H663H699\",120325:\"92 0Q87 0 77 0T62 -1Q24 -1 24 22Q24 29 33 41T106 136Q185 237 184 238Q184 239 147 284T73 376T33 427Q31 430 31 436Q31 451 45 457Q48 458 96 458H122Q152 458 163 450T208 394L247 345L282 394Q288 403 297 416T309 434T319 444T328 452T338 455T352 458T372 458H393H440Q457 449 457 435Q457 428 450 419T379 328Q308 239 308 237L389 137Q409 112 436 79Q475 31 475 23Q475 -1 436 -1Q432 -1 422 -1T407 0Q360 0 352 3Q343 6 336 16T291 83L247 151L245 148Q243 145 239 139T229 124T218 106T204 84Q167 24 160 15T141 1L92 0\",120326:\"454 458Q473 446 473 430Q473 426 394 184L311 -68Q291 -119 245 -162T123 -205Q51 -205 46 -190Q44 -187 40 -142T36 -92Q36 -90 36 -88L37 -87Q41 -80 46 -80Q48 -80 73 -92T126 -105Q146 -105 161 -98T185 -76T197 -53T206 -28L215 0L122 212Q29 427 29 435Q29 448 46 457Q49 458 91 458Q93 458 106 458T125 457T140 454T157 446T170 431Q183 410 224 305T266 158Q266 152 266 151Q267 151 268 163Q271 206 302 310T342 432Q354 458 398 458H418H454\",120327:\"268 376Q250 376 180 375T92 374Q69 374 63 380Q46 390 46 419Q46 428 49 437Q57 451 73 457Q76 458 242 458T413 456Q420 455 427 448Q439 438 439 413Q439 392 433 385Q432 383 318 236T204 88Q235 88 306 89T395 90H399Q408 90 414 89T427 84T438 70T442 45Q442 9 416 2Q411 0 236 0H136Q73 0 62 1T41 12Q31 23 31 47Q31 68 36 77Q37 78 51 97T96 155T153 228L268 376\",120328:\"28 0L429 694H533L585 350Q596 275 610 182T632 46L638 3V0H530L528 18Q527 25 515 103T503 183H223L135 29L118 1L73 0H28ZM492 254Q492 256 473 398T454 589V610Q433 552 290 301L264 255L378 254H492\",120329:\"501 363Q557 355 605 316T653 222Q653 148 586 85T403 2Q394 1 240 0Q90 0 90 1L100 46Q109 90 128 177T164 348L238 694H375Q518 693 546 688Q614 674 655 635T696 544Q696 490 648 441T516 368L501 363ZM601 530Q601 568 566 590T479 621Q472 622 394 623H320L297 513Q292 489 286 459T276 415L273 401V399H339H372Q504 399 571 466Q601 498 601 530ZM257 322Q256 320 230 197T203 73Q203 71 289 71Q379 72 387 73Q459 84 507 122T556 210Q556 255 519 283T428 320Q415 322 336 323Q257 323 257 322\",120330:\"124 266Q124 372 179 473T333 639T544 705Q592 705 635 697T698 679L718 670Q719 669 701 621T681 572L676 576Q670 580 661 586T641 598T614 611T583 620Q558 625 526 625Q406 625 318 516T230 276Q230 238 236 212Q251 148 294 108T412 68Q469 68 508 80T598 123Q608 129 608 128Q606 109 603 87L598 45L573 33Q521 7 486 -1T394 -10Q358 -10 346 -8Q260 5 202 62Q124 145 124 266\",120331:\"162 348L236 694H385Q535 693 543 692Q600 682 641 654T705 586T737 506T747 425Q747 296 672 187Q625 114 548 62T384 1Q376 0 262 0Q88 0 88 1L98 46Q107 90 126 177T162 348ZM622 533Q575 624 443 624Q434 624 419 624T399 623H321L263 348Q249 283 234 213T212 107L204 72Q204 71 289 71Q374 72 386 74Q501 94 573 193T646 422Q646 487 622 533\",120332:\"86 2Q88 4 160 346T233 689Q233 691 461 691Q688 691 688 689Q685 686 671 611H495L320 612L319 609Q319 607 297 501L274 397H436Q597 397 597 396L596 391Q595 386 593 376T589 358L581 322L420 321Q258 321 258 320Q209 89 208 87Q208 85 390 85Q417 85 460 85T518 86L572 85Q556 8 554 2V0H86V2\",120333:\"86 2Q88 4 160 346T233 689Q233 691 453 691T673 689Q670 686 656 611H488L320 612Q314 579 302 523T281 427T272 385Q272 384 419 384H567L551 308H255L223 156Q216 124 207 82T194 20L190 2Q190 0 138 0H86V2\",120334:\"125 267Q125 375 182 476T337 641T544 705Q598 705 644 693T710 669T730 655L712 609L693 560L692 557L681 567Q618 626 526 626Q447 626 378 573T269 440T229 277Q229 185 276 127T406 68Q422 68 451 71T502 78T524 84L526 93Q528 102 532 119T539 153L553 222Q553 223 495 223Q436 223 436 224Q436 230 444 262L452 299H662V296Q661 290 635 166T607 40Q606 37 576 25T492 1T391 -11Q272 -11 199 66T125 267\",120335:\"517 2Q518 3 551 161T585 322Q586 323 557 323T422 323H259L190 0H138Q86 0 86 1L96 46Q105 90 124 177T160 348L234 694H337V691Q336 690 306 545T275 399H602L603 403Q603 407 634 551L665 694H768V691Q768 690 695 348T621 2V0H517V2\",120336:\"161 348L235 694H338V691Q338 690 265 348T191 2V0H139Q87 0 87 1L96 46Q106 90 125 177T161 348\",120337:\"377 424L435 694H535V691Q534 685 476 412T416 135Q401 74 350 26T210 -22Q165 -22 124 -11T65 9T46 21L54 41Q62 61 70 83T81 109Q82 111 85 106Q86 105 87 103Q93 94 103 84T135 64T185 53Q238 53 272 76T317 142Q317 145 325 182T348 289T377 424\",120338:\"236 223Q235 222 213 113T188 2V0H138Q88 0 88 1L98 46Q107 90 126 177T162 348L236 694H285Q335 694 335 693L330 671Q326 649 316 603T298 518Q289 477 280 433T266 366L261 343L672 694H729L784 693L465 420L651 0H596L541 1L384 350Q383 351 310 288T236 223\",120339:\"161 348L235 694H338V691Q338 690 273 385T208 79Q278 80 362 80H516Q502 11 499 2V0H293Q87 0 87 1L96 46Q106 90 125 177T161 348\",120340:\"375 691Q456 215 459 124V106Q488 177 762 641L793 694H929V691Q929 690 856 348T782 2V0H689V2Q691 4 753 304Q817 604 818 606Q819 611 817 608Q817 607 815 603Q798 559 540 117L484 22H440L397 23L393 42Q393 47 373 169T334 422T315 594V609L250 306Q186 3 185 2Q185 0 138 0Q92 0 92 1L102 46Q111 90 130 177T166 348L240 694H375V691\",120341:\"311 609Q310 608 246 306T181 2V0H134Q88 0 88 1L98 46Q107 90 126 177T162 348L236 694H382L383 691Q383 688 418 561T493 286T541 97L544 84L545 89Q545 90 553 128T578 246T610 394L674 694H766V691Q766 690 693 348T619 2V0H472L469 13Q468 17 393 293T312 605L311 609\",120342:\"118 254Q118 366 174 473T324 648T517 716Q627 716 695 638T763 435Q763 321 706 215T555 43T362 -22Q256 -22 187 56T118 254ZM380 58Q452 58 518 116T622 263T661 442Q661 496 646 535T608 594T567 622T534 634Q516 636 496 636Q400 636 313 528T225 264Q225 172 267 115T380 58\",120343:\"162 348L236 694H378Q522 693 530 692Q604 680 647 635T690 524Q690 474 665 430T612 359Q550 299 465 280Q443 275 343 274H250V271Q250 269 235 201T206 68T192 2V0H140Q88 0 88 1L98 46Q107 90 126 177T162 348ZM594 513Q594 560 562 588T477 622Q470 623 394 623H321L293 487L263 349V347H342H347H375Q530 347 578 449Q594 483 594 513\",120344:\"118 254Q118 366 174 473T324 648T517 716Q627 716 695 638T763 435Q763 305 693 194T543 36Q547 29 586 -47T625 -125H504L450 -8Q406 -22 363 -22Q256 -22 187 56T118 254ZM661 437Q661 532 616 584T506 636Q428 636 361 578T257 433T220 258Q220 167 264 113T380 58Q390 58 397 58T408 59T413 60T417 61Q417 63 387 127T356 193Q356 194 409 194H462L485 150L508 105Q509 103 532 125T567 161Q661 278 661 437\",120345:\"162 348L236 694H375H414H445Q507 694 538 690T606 668Q698 623 698 534V528Q698 447 608 377Q582 358 555 345T512 326L497 321L617 0H565L513 1L402 309H255L189 0H138Q88 0 88 1L98 46Q107 90 126 177T162 348ZM603 525Q603 603 499 620Q486 622 403 623H321L297 506Q292 482 285 449T274 402L271 387V385H346Q350 385 363 385T386 384Q548 384 592 479Q603 503 603 525\",120346:\"161 478Q161 568 242 642T435 716Q527 716 599 673L609 667Q595 633 589 615L571 568Q570 568 564 575T546 592T518 611T475 628T417 635Q351 635 305 596T259 507Q259 465 290 444T372 411T432 396Q473 385 509 343T545 236Q545 140 464 59T270 -22Q155 -22 54 48L92 146Q93 146 101 138T124 117T161 92T216 72T288 63Q360 63 403 109T447 204Q447 220 444 233T435 256T421 273T404 285T385 295T366 301T347 306T331 310T315 314T292 321T265 331T235 346T207 367T183 395T168 431T161 478\",120347:\"165 608L182 687Q182 688 486 688H790L789 685L781 645L773 609H521L457 306Q393 3 392 2Q392 0 340 0H288V2Q289 5 353 304T417 605V609L291 608H165\",120348:\"340 -22Q251 -22 191 33T131 177V187Q131 192 131 195T132 205T133 215T136 231T141 253T147 285T156 328T168 384T184 457L235 694H338V691Q338 690 288 451T236 210Q234 194 234 177Q234 138 247 111T280 72T319 54T357 49Q408 49 449 74T510 128Q516 136 521 143T530 158T538 175T545 194T553 220T560 250T569 289T579 336T591 395T606 464L655 694H747V691Q651 243 645 213Q623 149 587 102Q482 -22 340 -22\",120349:\"220 348L161 694H216Q270 694 270 693L283 613Q334 313 346 215Q359 102 359 96Q359 87 358 84Q388 162 684 657L706 694H753Q799 694 799 693L387 0H333Q279 0 279 1L272 45Q264 89 249 177T220 348\",120350:\"596 540Q596 562 597 585T599 609Q599 588 436 255Q402 185 362 104L310 0H213V3Q213 6 188 347T161 694H263L265 664Q290 327 293 184Q293 112 289 85Q290 85 290 87Q290 95 301 123T332 194T373 282T419 380T463 469T498 541T517 579L574 694H671V689L674 646Q678 603 682 538T691 401T699 263T703 160Q703 102 700 87Q719 154 930 576L989 694H1076Q1076 693 903 347L730 0H628V4L626 26Q624 48 622 85T616 168T609 267T603 369T598 464T596 540\",120351:\"14 0Q17 3 184 184T352 367L265 529Q244 567 222 609T188 672L176 692Q176 694 236 694H297L338 612Q387 515 400 489L421 448L645 694H758L708 640Q481 393 456 368Q455 366 500 281T596 104T652 0H531L388 293L128 0H14\",120352:\"151 692Q151 694 212 694H272L418 362L696 683L705 694H758L809 693Q809 692 630 490T444 280Q442 275 413 139L383 1L333 0Q282 0 282 2Q283 3 312 141L341 278L246 484L151 692\",120353:\"67 54Q551 615 551 617Q543 618 517 618Q510 618 463 618T376 617Q200 617 200 618T209 657L216 694H459Q702 694 702 692Q702 689 697 667L692 643L207 80H392Q493 81 577 81Q577 70 560 2V0H55V2L67 54\",120354:\"313 386Q286 386 260 381T217 369T186 355T164 342T155 337Q154 338 159 377T165 418Q251 461 320 461Q322 461 328 461T337 460Q397 460 435 424T473 329Q473 325 473 318T472 308Q432 110 407 2V0H317V2L325 38Q295 21 269 10Q215 -10 156 -10H149Q76 -10 62 69Q61 75 61 90Q61 127 73 150T116 194Q146 215 207 231T348 252H368L373 277Q378 302 378 318Q378 367 339 384Q332 386 313 386ZM150 116Q150 93 171 79T223 65Q259 65 293 85T341 135Q343 140 348 160T353 184Q353 186 342 186Q298 186 231 174T153 134Q150 127 150 116\",120355:\"302 -11Q266 -11 235 1T190 26L176 38Q170 8 168 2V0H121Q75 0 75 1L84 46Q94 90 113 177T149 348L223 694H267Q312 694 312 693T282 551T251 407Q251 406 256 408T271 415Q347 454 430 454H438Q501 454 528 374Q539 339 539 299Q539 179 466 84T302 -11ZM443 275Q443 317 421 348T346 379Q318 379 296 369Q269 359 238 332L193 118L198 109Q220 65 269 65Q350 65 396 130T443 275\",120356:\"75 164Q75 226 100 282T165 377T252 437T342 460H347Q447 460 499 417L483 378Q468 339 468 338Q466 338 455 347T424 366T385 378Q355 382 334 382Q262 382 215 318T168 177Q168 120 196 95T259 69H269Q345 69 420 108Q432 114 432 113T427 72L422 32L402 22Q382 12 344 2T259 -11Q214 -11 180 2T126 36T95 81T79 126T75 164\",120357:\"73 156Q73 224 102 293T184 408T294 455Q375 455 432 413Q438 407 438 410T469 553L499 694H588V691Q588 690 515 348T441 2V0H348V2Q357 29 357 43L352 41Q332 24 288 7T196 -10H190Q178 -10 166 -7T134 8T98 46T75 113Q73 129 73 156ZM419 335Q419 339 412 348T386 368T342 379Q284 379 243 343T184 261T167 168Q167 122 191 94T263 66Q321 66 367 116L374 124L397 229Q419 333 419 335\",120358:\"248 -11Q170 -11 121 41T71 173Q71 265 133 349T285 454Q305 460 318 460H328Q368 460 399 448Q472 414 472 309Q472 274 464 234L462 219H159Q156 198 156 185Q156 137 179 107T237 68Q246 66 268 66Q345 66 427 113V109Q426 108 422 73T417 37Q417 34 409 29Q329 -11 248 -11ZM401 299Q399 337 376 361T316 385Q291 385 266 371Q220 350 184 289H401V299\",120359:\"381 443Q381 440 374 407T366 371H315Q263 371 263 369Q262 368 224 186Q215 145 205 97T189 25L184 2V0H94V2L99 25Q104 48 114 96T134 186Q172 368 173 369Q173 371 139 371H106V373L114 410L121 444H155L188 445L191 455L212 551Q232 612 288 658T415 705Q438 705 464 701T494 694Q478 614 477 614L467 618Q457 621 440 624T406 629H400Q333 629 306 579Q301 568 289 507L275 444H328Q381 444 381 443\",120360:\"113 252Q113 334 177 394T311 454Q332 454 350 451T379 442T398 432T410 424L413 421Q412 423 411 424L409 426Q409 429 434 436T496 449T560 455H568V451Q568 447 567 429T566 394L565 377L553 379Q522 385 479 385Q463 385 456 384L443 383L436 392Q454 357 454 324Q454 243 390 182T249 120Q233 120 219 122T195 128T178 136T167 142L163 145Q149 131 149 105Q149 78 171 72L242 71Q246 71 269 71T303 71T336 68T372 62T403 51T432 32Q461 8 461 -40Q461 -112 383 -159T211 -206Q123 -206 68 -172T12 -86Q12 -55 31 -23T82 32Q90 38 89 39Q89 40 87 44T82 59T80 82Q80 134 126 189Q113 228 113 252ZM369 319Q369 354 350 368T304 383Q274 383 252 369T218 333T202 291T197 255Q197 221 217 206T263 191Q317 191 343 233T369 319ZM373 -59Q373 -41 362 -30T330 -13T291 -7T247 -5H216Q167 -5 158 -6T139 -12Q123 -20 110 -38T97 -76Q97 -102 133 -118T221 -134Q242 -134 267 -130T316 -118T357 -94T373 -59\",120361:\"416 321Q416 379 336 379Q276 379 237 302Q226 276 209 202T180 66T166 2V0H119Q73 0 73 1L82 46Q92 90 111 177T147 348L221 694H265Q310 694 310 693T279 544L247 395Q325 455 403 455Q513 455 513 358Q513 334 508 309Q507 304 476 156T443 2V0H350V2L357 34Q364 65 373 110T392 200T409 281T416 321\",120362:\"189 578Q190 579 199 627T211 678V680H315V678Q313 675 304 627T293 578V576H189V578ZM168 442T168 443T213 444T258 443T212 225T164 2V0H74V2Q75 7 121 224\",120363:\"211 577L233 680H284Q336 680 336 679L315 576H263Q211 576 211 577ZM19 -204Q-12 -204 -40 -196T-82 -179T-96 -170Q-96 -168 -78 -132L-61 -95L-54 -103Q-32 -126 3 -126Q26 -126 50 -116Q76 -101 83 -85Q84 -79 140 180T196 443Q196 444 241 444T286 443Q286 441 232 186T175 -75Q163 -120 122 -162T19 -204\",120364:\"150 348L224 694H310V691Q218 259 218 258L232 270Q245 281 274 306T327 351L435 444H489L542 443Q542 442 443 357L344 272L471 1L422 0H372L366 14Q359 27 347 54T323 105L273 210Q271 210 231 174L190 139L160 0H118Q76 0 76 1L86 46Q95 90 114 177T150 348\",120365:\"148 348L222 694H311V691Q311 690 238 348T164 2V0H119Q74 0 74 1L84 46Q93 90 112 177T148 348\",120366:\"416 321Q416 379 336 379Q276 379 237 302Q226 276 209 202T180 66T166 2V0H119Q73 0 73 2L121 226L169 449Q169 450 213 450H256L249 421Q248 417 247 412T246 404T245 398T244 394T244 392Q250 398 261 407T307 433T379 454H392H400Q451 454 472 439Q482 434 489 427T500 412T506 399T510 388L511 384Q511 384 517 388Q563 431 620 446Q648 455 680 455Q790 455 790 358Q790 334 785 309Q784 304 753 156T720 2V0H627V2L634 34Q641 65 650 110T669 200T686 281T693 321Q693 379 613 379Q553 379 514 302Q503 276 486 202T457 66T443 2V0H350V2L357 34Q364 65 373 110T392 200T409 281T416 321\",120367:\"416 321Q416 379 336 379Q276 379 237 302Q226 276 209 202T180 66T166 2V0H119Q73 0 73 2L121 226L169 449Q169 450 213 450H256L249 421Q248 417 247 412T246 404T245 398T244 394T244 392Q250 398 261 407T307 433T379 454H392Q416 454 433 452T470 440T502 411T513 358Q513 334 508 309Q507 304 476 156T443 2V0H350V2L357 34Q364 65 373 110T392 200T409 281T416 321\",120368:\"69 169Q69 238 107 306T211 417T348 461Q419 461 471 412T523 271Q523 161 438 75T247 -11Q170 -11 120 39T69 169ZM432 279Q432 338 401 361T333 385Q280 385 240 352T182 273T164 178Q164 119 195 94T265 68Q306 68 344 94Q380 115 406 169T432 279\",120369:\"259 443Q251 405 251 404L260 409Q269 414 286 421T324 436T375 449T434 455Q482 455 510 417T538 303Q538 169 463 79T302 -11Q226 -11 176 39V36Q175 35 151 -80L127 -193Q127 -194 80 -194H34V-191L102 127L169 443Q169 444 214 444T259 443ZM269 65Q332 65 386 124T441 262Q441 304 422 334T370 373Q356 375 339 375Q293 375 238 331L193 118Q200 103 206 94T229 75T269 65\",120370:\"72 149Q72 272 146 363T304 455Q340 455 371 442T409 423T436 398Q438 411 442 427L448 455H538L400 -193Q400 -194 354 -194Q307 -194 307 -193L356 37V41Q355 41 350 38T332 27T302 13Q247 -10 191 -10H179Q138 -10 105 32T72 149ZM414 298Q402 376 341 376Q277 376 223 317T169 182Q169 121 198 93T265 65Q319 65 365 111L377 123L414 298\",120371:\"240 377L244 380Q248 384 255 390T272 404T296 419T325 434T361 446T401 454Q403 454 408 454T416 455H424L421 442Q419 435 413 405T406 373Q351 373 294 336T216 237Q213 231 201 173T178 60T164 2V0H119Q74 0 74 2L122 226L170 449Q170 450 213 450H255L247 414Q246 409 245 403T243 393T241 385T240 379T240 377\",120372:\"99 299Q99 318 106 341T133 393T195 441T298 461Q336 461 370 453T420 437L436 429Q436 428 421 389T405 350Q356 386 273 386H265Q248 386 237 384T211 371T191 337Q189 329 189 326Q189 320 190 315T194 306T200 299T209 293T218 289T228 285T239 283T251 281T263 278L270 276Q278 275 283 274T298 270T316 264T333 255T351 243T367 228T380 209T388 186T391 157Q391 96 341 43T193 -11Q171 -11 150 -8T114 -1T84 9T61 19T45 28T35 33Q35 36 67 116L76 109Q132 67 211 67Q258 67 279 88T301 135Q301 159 280 170T224 187T180 197Q141 212 120 239T99 299\",120373:\"245 68Q267 68 289 75T322 90L334 98Q338 94 338 28V24L324 19Q268 -4 218 -8Q198 -11 177 -11Q118 -11 118 75Q118 98 123 127Q125 137 149 251T174 369Q174 371 135 371H97V373L105 410L112 444H152L192 445L200 478Q208 512 213 541L219 571H261Q303 571 303 570T290 506L276 444H343Q410 444 410 443Q410 440 403 407T395 371H328Q261 371 261 369Q211 152 211 118Q211 68 245 68\",120374:\"166 -10H160Q146 -10 137 -8T115 0T97 22T90 63Q90 79 130 268L167 443Q167 444 214 444Q260 444 260 443L224 273Q187 97 187 86Q187 70 202 65T250 59Q303 59 336 83T379 139Q380 143 412 292T444 443Q444 444 491 444Q537 444 537 443T491 225T443 2V0H353V2L361 38L352 34Q344 29 326 22T286 7T232 -5T166 -10\",120375:\"177 6L108 442V444H201V442Q202 441 213 371T235 213T246 90V65Q259 117 429 406L450 444H495Q540 444 540 443Q539 442 411 221L282 1L230 0H178L177 6\",120376:\"148 5Q147 8 128 222T109 440L108 444H199V442Q200 441 204 385T214 253T219 140Q219 108 215 76Q215 72 214 67V65L215 66Q219 95 278 221L390 444H475V437Q497 203 497 121Q497 90 494 70Q494 67 494 67L496 73Q520 143 654 405L674 444H718Q762 444 762 443L534 1L483 0H432V5Q429 28 422 126T413 283Q413 343 416 370L417 378Q416 377 416 376Q401 303 248 12L242 0H148V5\",120377:\"317 229Q453 9 460 0H409L359 1L312 88Q266 176 265 176Q265 177 254 165T223 132T182 88L100 0H1L15 14Q29 28 61 59T118 115L236 229L226 244Q108 433 100 444H201L290 294L438 444H537L528 435Q526 432 512 418T468 376T418 327L317 229\",120378:\"11 -117L20 -120Q28 -124 46 -128T84 -132H100Q124 -122 149 -85Q200 -6 200 1Q200 17 155 204T109 442Q109 444 156 444H203Q203 443 208 419T221 357T235 277T248 190T254 114Q254 81 250 67V65Q251 65 251 67Q256 94 297 177Q339 259 422 397L450 444H540Q540 443 386 186T219 -90Q179 -153 145 -179T73 -205Q52 -205 34 -202Q29 -202 21 -201T7 -198L1 -197Q1 -196 6 -157T11 -117\",120379:\"129 408L136 444H315Q494 444 494 443Q494 441 489 419L484 396L164 76L291 77Q418 77 418 76T411 41T402 2V0H215Q28 0 28 2L34 27L38 50L360 371L240 370Q121 370 121 371Q124 388 129 408\",120432:\"191 76Q212 75 220 68T229 38Q229 10 208 1H129H80Q48 1 38 7T28 38Q28 51 29 57T40 69T70 76Q89 76 89 78Q90 79 117 205T173 461T205 599Q212 623 250 623H262H273Q312 623 319 599Q322 591 350 461T406 205T435 78Q435 76 454 76H458Q484 76 493 59Q496 53 496 38Q496 11 478 3Q474 1 395 1H317Q295 8 295 38Q295 65 311 73Q316 75 333 76L348 77V78Q348 80 341 112L334 143H190L183 112Q176 80 176 78Q175 76 178 76Q180 76 191 76ZM318 221Q313 238 288 366T263 519Q263 526 262 527Q261 527 261 520Q261 493 236 365T206 221Q206 219 262 219T318 221\",120433:\"39 1Q17 10 17 32V38V46Q17 65 34 73Q40 76 61 76H84V535H61H54Q27 535 19 553Q17 557 17 573Q17 583 17 587T23 599T39 610Q40 611 179 611Q320 610 332 607Q332 607 339 605Q394 591 427 547T461 454Q461 413 436 378T369 325L358 320Q405 311 443 270T482 169Q482 112 445 64T345 3L334 1H39ZM309 533Q302 535 234 535H168V356H230Q284 357 296 358T323 368Q346 380 361 402T377 452Q377 482 358 505T309 533ZM398 176Q396 218 371 246T315 279Q310 280 237 280H168V76H239Q316 77 327 81Q329 82 334 84Q398 107 398 176\",120434:\"40 305Q40 437 110 529T281 622Q315 622 343 611T387 589T404 578Q409 585 415 596T425 611T435 618T452 622Q472 622 478 609T485 566Q485 559 485 540T484 508V460Q484 413 478 403T442 393Q417 393 409 402Q400 409 400 420Q400 428 395 445T380 487T347 528T295 546Q235 546 180 483T124 306Q124 245 141 197T186 121T241 80T296 66Q346 66 373 103T400 178Q400 209 435 209H442H450Q484 209 484 172Q480 96 421 43T281 -11Q177 -11 109 84T40 305\",120435:\"38 1Q16 8 16 38Q16 62 32 73Q39 76 58 76H78V535H58Q40 535 32 538Q16 548 16 573Q16 587 17 591Q23 604 34 607T83 611H166H176Q188 611 209 611T239 612Q299 612 337 597T415 530Q485 438 485 300Q485 180 431 100T301 3L291 1H38ZM400 301Q400 363 385 410T346 482T303 519T267 534Q261 535 210 535H162V76H214L267 77Q323 89 361 148T400 301\",120436:\"374 271Q374 241 367 232T332 223Q307 223 299 231Q290 240 290 263V279H173V76H418V118V144Q418 167 426 176T460 186Q491 186 500 166Q502 161 502 93V52Q502 25 499 17T480 1H41Q19 9 19 32V38Q19 63 36 73Q42 76 65 76H89V535H65H55Q44 535 38 537T25 548T19 573Q19 602 41 610H47Q53 610 63 610T88 610T121 610T160 611T204 611T251 611H458Q460 609 465 606T471 602T475 598T478 593T479 586T480 576T480 562V526V488Q480 452 462 444Q458 442 438 442Q413 442 405 450Q398 457 397 463T396 501V535H173V355H290V371Q290 394 299 403T332 412Q363 412 372 392Q374 387 374 317V271\",120437:\"384 260Q384 230 377 221T342 212Q317 212 309 220Q300 229 300 252V268H179V76H249Q264 67 267 61T271 38Q271 10 249 1H44Q22 9 22 32V38Q22 63 39 73Q45 76 69 76H95V535H69H59Q42 535 32 542T22 573Q22 602 44 610H50Q56 610 66 610T91 610T125 610T164 611T208 611T257 611H468Q470 609 475 606T481 602T485 598T488 593T489 586T490 576T490 562V526V488Q490 452 472 444Q468 442 448 442Q423 442 415 450Q408 457 407 463T406 501V535H179V344H300V360Q300 383 309 392T342 401Q373 401 382 381Q384 376 384 306V260\",120438:\"38 306Q38 447 105 534T261 622Q280 622 298 618T329 608T350 596T366 585L371 581Q373 581 377 591T390 612T417 622Q437 622 443 609T450 566Q450 559 450 540T449 508V460Q449 413 443 403T407 393Q392 393 386 394T373 402T364 426Q360 472 335 509T271 546Q214 546 168 477T121 308Q121 210 164 138T271 65Q293 65 310 78T337 109T352 147T360 180T362 195Q362 196 333 196L304 197Q282 204 282 227V234Q282 247 282 251T288 261T304 272H474Q488 263 492 256T496 234Q496 211 479 199Q475 197 461 196H449V21Q441 6 434 3T412 -1H407H402Q385 -1 379 3T364 28Q350 14 322 2T260 -11Q173 -11 106 76T38 306\",120439:\"16 571Q16 597 27 604T74 611H125H208Q223 602 226 596T230 573Q230 559 227 551T217 540T204 536T186 535H165V356H359V535H338H333Q306 535 297 552Q295 556 295 573Q295 586 295 590T301 600T317 611H486Q501 602 504 596T508 573Q508 559 505 551T495 540T482 536T464 535H443V76H464H470Q482 76 489 75T502 64T508 38Q508 10 486 1H317Q306 5 301 11T296 21T295 38V44Q295 66 311 73Q318 76 338 76H359V280H165V76H186H192Q204 76 211 75T224 64T230 38Q230 10 208 1H39Q28 5 23 11T18 21T17 38V44Q17 66 33 73Q40 76 60 76H81V535H60Q45 535 38 536T24 545T16 571\",120440:\"400 76Q431 76 441 69T452 38Q452 29 452 26T450 18T443 9T430 1H95Q84 6 79 12T73 23T72 38Q72 65 90 73Q96 76 157 76H220V535H157H124Q93 535 83 542T72 573Q72 603 93 610Q97 611 264 611H430Q432 609 436 607T444 602T449 594Q452 588 452 573Q452 546 434 538Q428 535 367 535H304V76H367H400\",120441:\"202 543T202 573T224 610H228Q231 610 237 610T251 610T269 610T291 611T315 611T342 611H457Q471 602 475 595T479 573Q479 549 462 538Q454 535 432 535H408V328Q408 159 408 133T402 93Q386 48 340 19T229 -11Q158 -11 108 16T57 100Q57 129 73 141T108 154Q128 154 143 140T159 102Q159 93 155 79Q188 65 228 65H230Q290 65 318 106Q323 115 323 139T324 329V535H274L224 536Q202 543 202 573\",120442:\"18 549T18 573T29 604T70 611H118H193Q207 603 210 596T214 573Q214 549 198 538Q191 535 172 535H152V421Q152 344 152 326T153 309L242 422L329 534Q327 535 322 536T314 538T308 542T303 548T300 558T298 573Q298 600 316 608Q322 611 392 611H463Q477 602 481 595T485 573Q485 535 446 535H441H420L281 357L436 77L454 76Q473 75 478 73Q495 62 495 38Q495 10 473 1H345Q334 5 329 11T324 21T323 38Q323 51 324 56T332 68T355 77L233 296L152 192V76H172Q191 76 198 73Q214 63 214 38Q214 9 193 1H41Q18 8 18 38Q18 61 35 73Q42 76 61 76H81V535H61Q42 535 35 538Q18 549 18 573\",120443:\"27 594Q34 605 43 608T84 611H154H213Q258 611 269 605T281 573Q281 546 263 538Q257 535 222 535H185V76H404V118V145Q404 168 411 177T446 186H453Q478 186 486 167Q488 161 488 93V50Q488 24 485 17T466 1L258 0H147H99Q47 0 36 6T25 38Q25 59 35 69Q44 76 76 76H101V535H76H64Q36 535 27 552Q25 557 25 573T27 594\",120444:\"50 535Q37 536 31 537T18 547T12 573Q12 598 22 604T62 611H91H121Q147 611 158 607T178 587Q183 579 222 446T261 293Q261 289 262 288Q263 288 263 292Q263 311 298 434T346 588Q353 603 365 607T402 611H435H450Q488 611 500 605T512 573Q512 556 506 547T493 537T474 535H459V76H474Q487 75 493 74T505 64T512 38Q512 11 494 3Q490 1 424 1H386Q355 1 345 7T335 38Q335 55 341 64T354 74T373 76H388V302Q388 512 387 519Q382 482 346 359T304 228Q292 204 262 204T220 228Q215 237 179 359T137 519Q136 512 136 302V76H151Q164 75 170 74T182 64T189 38Q189 11 171 3Q167 1 101 1H63Q32 1 22 7T12 38Q12 55 18 64T31 74T50 76H65V535H50\",120445:\"20 571Q20 598 30 604T73 611H105H136Q152 611 160 611T177 607T189 601T198 587T206 568T217 537T231 497Q354 142 365 95L368 84V535H347H342Q314 535 306 552Q304 556 304 573Q304 586 304 590T310 600T326 611H482Q497 602 500 596T504 573Q504 559 501 551T491 540T478 536T460 535H439V25Q432 7 424 4T389 0H374Q334 0 322 31L293 115Q171 468 159 517L156 528V76H177H183Q195 76 202 75T215 64T221 38Q221 10 199 1H43Q32 5 27 11T22 21T21 38V44Q21 66 37 73Q44 76 64 76H85V535H64Q49 535 42 536T28 545T20 571\",120446:\"102 588Q140 621 240 621Q323 621 335 620Q393 613 422 588Q450 560 459 493T468 306Q468 185 460 118T422 23Q382 -10 289 -10H262H235Q142 -10 102 23Q74 50 65 118T56 306Q56 427 64 494T102 588ZM363 513Q357 523 347 530T324 540T302 544T280 546H268Q192 546 167 521Q150 501 145 452T140 300Q140 235 142 197T151 130T172 89T207 71T262 65Q317 65 341 81T374 144T384 300Q384 474 363 513\",120447:\"41 1Q19 9 19 32V38Q19 63 36 73Q42 76 65 76H89V535H65H55Q38 535 29 543T19 576Q19 603 41 610H49Q57 610 70 610T100 610T136 611T175 611Q190 611 216 611T255 612Q321 612 363 598T441 537Q480 486 480 427V421Q480 354 447 311T378 251Q339 230 275 230H239H173V76H197Q220 76 227 73Q244 62 244 38Q244 10 222 1H41ZM396 421Q396 461 369 491T300 533Q294 534 233 535H173V306H233Q294 307 300 308Q345 319 370 352T396 421\",120448:\"56 306Q56 380 58 426T68 510T87 568T120 600T170 617T240 621Q323 621 335 620Q393 613 422 588Q450 560 459 493T468 306Q468 124 447 66Q433 23 394 6L424 -53Q454 -112 454 -118Q454 -128 441 -138H377Q367 -135 363 -129T333 -69L304 -11H254Q205 -10 180 -8T128 6T91 36T70 92T58 178T56 306ZM227 151Q227 171 262 171H276H281Q292 171 296 171T305 170T313 165T317 158T323 145T332 127L353 88Q356 88 361 95T372 131T382 202Q384 228 384 306Q384 452 371 492T304 544Q296 545 251 545Q230 545 215 543T188 534T169 520T155 497T147 466T143 423T141 371T140 306Q140 248 141 217T146 154T157 109T178 83T212 68T262 65H266L264 70Q261 75 256 85T247 105Q227 145 227 151\",120449:\"16 571Q16 598 27 605T76 612Q84 612 108 612T148 611Q268 611 294 605Q346 592 389 550T432 440Q432 394 410 359Q393 329 366 310L358 303Q387 273 399 239Q405 219 405 178T408 106T421 68Q426 65 428 65Q433 65 435 74T438 96T441 112Q450 130 480 130H485Q519 130 522 100Q522 79 516 56T488 11T434 -11Q421 -11 408 -8T377 5T344 37T324 93Q322 101 322 154L321 209Q304 257 257 267Q252 268 207 268H165V76H186H192Q204 76 211 75T224 64T230 38Q230 10 208 1H39Q28 5 23 11T18 21T17 38V44Q17 66 33 73Q40 76 60 76H81V535H60Q45 535 38 536T24 545T16 571ZM348 440Q348 478 321 502T260 532Q252 534 208 535H165V344H208Q212 344 223 344T239 345T252 346T266 348T278 351T293 358Q348 387 348 440\",120450:\"52 454Q52 524 107 572T229 621Q266 621 274 620Q326 610 360 588L371 581Q377 594 379 598T386 610T397 619T412 622Q433 622 439 610T446 570Q446 563 446 545T445 515V479Q445 441 444 432T436 417Q428 408 403 408T370 417Q361 424 361 434Q361 439 360 448T351 476T331 509T295 535T238 546Q194 546 163 522T132 458Q132 435 148 412Q155 401 166 393T192 380T218 371T247 364T270 359Q341 342 349 339Q389 325 418 296T461 229Q472 201 472 164Q469 92 417 41T287 -11Q240 -11 200 -1T143 19L126 29Q117 6 109 -2Q100 -11 84 -11Q64 -11 58 1T51 42Q51 49 51 66T52 95V135Q52 173 53 180T61 194Q70 203 95 203Q119 203 127 194Q136 186 136 168Q143 66 284 66H290Q325 66 350 85Q391 115 391 165Q391 204 369 228T322 260Q320 260 255 275T185 293Q123 309 88 355T52 454\",120451:\"129 38Q129 51 129 55T135 65T151 76H220V535H110V501Q110 470 109 464T101 450Q93 442 68 442H60Q37 442 28 461Q26 466 26 527L27 589Q36 607 49 610H55Q61 610 72 610T97 610T131 610T170 611T215 611T264 611H476Q478 609 483 606T489 602T493 598T496 593T497 586T498 576T498 562V526V488Q498 452 480 444Q476 442 456 442Q431 442 423 450Q416 457 415 463T414 501V535H304V76H374Q389 67 392 61T396 38Q396 10 374 1H151Q140 5 135 11T130 21T129 38\",120452:\"-3 573Q-3 597 8 604T50 612Q57 612 77 612T111 611H200Q214 602 218 595T222 573Q222 549 205 538Q198 535 175 535H151V359Q151 333 151 291Q152 177 156 162Q157 160 157 159Q165 123 193 95T262 66Q303 66 330 94T367 159Q371 175 371 191T373 359V535H349H339Q328 535 322 537T309 548T303 573T306 595T325 611H506Q520 602 524 595T528 573Q528 549 511 538Q504 535 481 535H457V364Q457 189 456 182Q448 101 394 45T262 -11Q189 -11 132 43T68 182Q67 189 67 364V535H43H33Q22 535 16 537T3 548T-3 573\",120453:\"19 578Q19 585 20 590T23 598T29 604T38 608T48 610T62 611T78 612T97 611T119 611H195Q210 602 213 596T217 573Q217 561 216 555T206 542T179 535H164Q166 529 188 435T235 231T261 94L262 84V88Q263 91 263 94Q265 121 289 231T336 438L360 535H345Q308 535 308 566V573Q308 586 308 590T314 600T330 611H484Q499 602 502 595T505 573Q505 560 504 554T493 541T465 535H447L384 278Q321 19 319 14Q309 -7 278 -7H262H246Q215 -7 205 14Q203 19 140 278L78 535H59Q45 535 38 536T25 547T19 573V578\",120454:\"459 611Q491 611 501 605T512 573Q512 538 482 535H474L439 276Q406 26 402 11Q398 2 389 -3Q387 -3 386 -4L380 -7H359H349Q324 -7 313 13Q307 29 285 139T263 275Q263 283 262 283Q261 282 261 274Q261 248 239 137T211 13Q200 -7 175 -7H165H144Q136 -3 127 3Q121 10 117 36T85 276L50 535H42Q26 536 19 545T12 564V573Q12 603 33 610Q37 611 101 611H134Q165 611 175 604T186 573Q186 563 186 559T182 547T169 538T143 535H122V531Q124 517 133 446T155 266T172 96V84L173 102Q176 157 192 243T215 346Q227 367 259 367H262H265Q297 367 309 346Q316 329 332 243T351 102L352 84V96Q356 161 368 266T390 444T402 531V535H381Q366 535 359 536T345 547T338 573Q338 600 356 608Q362 611 425 611H459\",120455:\"39 571Q39 597 49 604T93 611H141H218Q233 602 236 595T239 573Q239 538 210 535Q202 535 202 534T215 507T243 454L257 428L307 535H298Q266 538 266 573Q266 584 267 588T273 598T289 611H366H401Q442 611 454 605T466 573Q466 546 448 538Q442 535 421 535H398L299 327Q299 323 362 201L426 77L449 76Q467 76 475 75T489 65T495 38Q495 11 477 3Q473 1 395 1H317Q295 8 295 38Q295 73 325 76L334 77Q333 78 314 117T276 196L257 235L239 196Q221 157 204 118T186 77Q190 76 196 76Q211 74 218 67T227 55T228 38Q228 28 227 24T221 13T206 1H50Q28 9 28 32V38Q28 63 45 73Q51 76 73 76H96L214 324Q215 327 162 431L108 535H85H79Q67 535 60 536T46 546T39 571\",120456:\"20 573Q20 597 30 604T72 611H121H198Q212 602 216 595T220 573Q220 568 219 563T217 555T214 549T211 544T207 541T203 538T198 537T194 536T190 536L188 535Q179 535 179 534L188 516Q196 497 208 470T232 415T252 363T261 332Q261 329 262 329T263 332Q263 354 333 508L345 534Q345 535 336 535Q305 538 305 567V573Q305 589 308 595T327 611H483Q505 598 505 573Q505 549 488 538Q481 535 460 535H438L304 245V76H325H331Q343 76 350 75T363 64T369 38Q369 10 347 1H178Q167 5 162 11T157 21T156 38V44Q156 66 172 73Q180 76 199 76H220V245L86 535H64Q44 535 36 538Q20 548 20 573\",120457:\"71 1Q60 5 55 11T49 23T48 39V46Q48 56 58 73T131 183Q171 242 197 282L366 535H144V501Q144 470 143 464T135 450Q127 442 102 442H94Q71 442 62 461Q60 466 60 527L61 589Q70 607 83 610H88Q93 610 102 610T124 610T154 610T188 611T227 611T270 611H454Q456 609 461 606T467 601T471 597T474 591T475 584T476 572V565Q476 555 466 538T393 428Q353 369 327 329L158 76H397V120V146Q397 169 405 179T439 189Q470 189 479 169Q481 164 481 95V48Q481 24 478 16T459 1H71\",120458:\"126 306Q105 306 90 321T74 359Q74 439 211 439Q268 439 276 438Q343 426 383 390T430 306Q431 301 431 190V81Q446 79 465 78T492 76T509 72T521 60T524 38Q524 11 506 3Q502 1 466 1Q426 1 406 5T379 14T355 36L345 30Q284 -6 205 -6Q135 -6 92 39T48 141Q48 182 79 212T158 256T252 278T342 285H347V290Q347 315 325 335T267 362Q258 363 224 363Q189 363 185 362H179L178 358Q178 353 178 352T176 345T174 337T170 330T165 322T158 316T150 311T139 308T126 306ZM132 140Q132 115 157 93T224 70Q269 70 302 87T344 133Q346 139 347 175V211H339Q256 209 194 190T132 140\",120459:\"4 573Q4 596 15 603T52 611H90H124Q146 611 155 608T171 591Q173 586 173 491V396L182 402Q217 424 256 431Q280 437 309 437Q376 437 434 379T492 217Q492 162 473 118T422 47T358 8T293 -6Q229 -6 174 38Q171 13 163 7T135 1H131H122Q99 1 90 23L89 279V535H58L27 536Q4 543 4 573ZM409 215Q409 269 377 315T283 361Q255 361 224 344T177 297L173 290V167Q189 124 213 97T278 70Q330 70 369 111T409 215\",120460:\"291 -6Q196 -6 131 60T66 216Q66 296 119 361Q154 403 200 421T273 439Q275 440 293 440H313Q400 440 433 409Q454 388 454 359Q454 335 439 321T402 306Q380 306 365 321T350 357V362L340 363Q339 363 326 363T303 364Q280 364 266 362Q217 352 184 313T151 215Q151 153 199 112T313 70Q341 70 357 85T381 118T394 140Q402 146 424 146Q443 146 447 144Q466 137 466 117Q466 106 457 88T429 47T374 10T291 -6\",120461:\"266 573Q266 596 277 603T314 611H352H385Q411 611 419 607T435 586V76H498Q512 67 516 60T520 38Q520 9 498 1H436Q429 1 417 1T398 0Q375 0 363 7T351 34V43L342 36Q288 -6 223 -6Q143 -6 87 58T31 216Q31 307 88 372T230 437Q292 437 342 405L351 399V535H320L289 536Q266 543 266 573ZM351 290Q347 302 337 316T302 346T244 361Q193 361 154 319T115 215Q115 152 152 111T235 70Q314 70 351 170V290\",120462:\"48 217Q48 295 100 361T248 439L258 440Q268 440 274 440Q329 438 369 416T428 359T456 292T464 228Q464 215 461 208T454 198T442 190L288 189H135L138 179Q153 132 199 102T303 71Q336 71 353 86T380 120T398 143Q404 146 422 146Q453 146 462 126Q464 120 464 116Q464 84 416 39T285 -6Q187 -6 118 59T48 217ZM377 264Q371 291 365 306T341 338T294 362Q288 363 264 363Q225 363 190 336T139 264H377\",120463:\"43 395Q44 405 44 408T47 416T53 423T66 431H176V461Q176 500 182 518Q201 570 252 593T353 617Q399 614 418 593T437 548Q437 528 424 514T387 499Q365 499 353 511T338 537V541H328Q275 536 261 494Q260 490 260 460V431H327Q334 431 346 431T364 432Q392 432 404 425T416 393T405 362T365 355H327H260V76H319Q375 76 388 71T401 38Q401 27 400 23T395 12T379 1H58Q47 6 42 12T36 23T35 38Q35 65 53 73Q59 76 117 76H176V355H121H93Q64 355 54 362T43 395\",120464:\"60 274Q60 337 107 386T233 436Q278 436 316 417L329 410L338 416Q384 442 427 442T489 423T509 381T494 345T460 332Q449 332 440 338Q432 341 427 348T419 360T415 365Q414 364 410 364L383 355Q406 320 406 274Q406 211 358 162T233 112Q189 112 155 128L146 133Q142 125 142 115Q142 99 150 85T175 71Q182 72 187 70Q188 70 195 70T218 70T254 69Q259 69 275 69T297 69T318 68T340 66T361 62T384 57T405 49T428 38Q495 -1 495 -76Q495 -143 427 -186T262 -229Q161 -229 94 -185T29 -73Q30 -60 33 -48T39 -26T47 -8T57 8T67 20T77 30T86 38L91 43Q91 44 86 53T75 80T70 117Q70 142 89 183L83 194Q60 232 60 274ZM321 274Q321 312 296 337T230 362Q197 362 171 338T145 274Q145 235 170 211T233 187Q273 187 297 212T321 274ZM422 -78Q422 -54 408 -38T366 -15T315 -6T255 -4H200Q198 -4 193 -4T183 -3Q148 -3 125 -26T102 -78Q102 -110 151 -132T261 -154Q321 -154 371 -132T422 -78\",120465:\"4 573Q4 596 15 603T52 611H90H124Q146 611 155 608T171 591Q173 586 173 489Q173 394 175 394L186 402Q197 410 219 420T269 434Q278 436 306 436Q343 436 371 423Q411 402 423 365T436 265Q436 257 436 239T435 211V198V76H498Q512 67 516 60T520 38Q520 9 498 1H308Q286 10 286 32V38V46Q286 65 303 73Q309 76 329 76H351V188Q351 204 351 230T352 266Q352 321 341 341T288 361Q253 361 222 341T176 274L174 264L173 170V76H236Q250 67 254 60T258 38Q258 9 236 1H27Q4 8 4 38Q4 53 8 60T27 76H89V535H58L27 536Q4 543 4 573\",120466:\"202 538T202 559T218 596T260 612Q283 612 300 597T317 560Q317 538 300 523T260 507Q235 507 219 522ZM411 76Q441 76 451 69T462 38Q462 29 462 26T460 18T453 9T440 1H94Q72 8 72 33V38Q72 46 72 49T74 58T81 68T94 76H233V355H167L102 356Q80 363 80 393Q80 418 91 425T138 432Q145 432 165 432T200 431H295Q297 429 303 425T310 420T314 415T317 404T317 389T318 363Q318 354 318 314T317 241V76H378H411\",120467:\"261 559Q261 580 277 596T319 612Q342 612 359 597T376 560T360 523T320 507Q296 507 279 523T261 559ZM75 -91T100 -91T138 -107T152 -144V-150L160 -151H193H203Q241 -151 267 -121Q284 -97 288 -73T292 23V151V355H218L145 356Q123 365 123 387V393Q123 422 145 430H148Q151 430 156 430T169 430T185 430T205 431T227 431T251 431H354Q356 430 360 427T365 424T369 420T372 416T373 410T375 402T376 391T377 376T377 356Q377 345 377 286T376 176Q376 -67 371 -88Q362 -123 342 -151T299 -194Q254 -228 180 -228Q84 -226 56 -177Q49 -162 48 -148Q48 -122 61 -107\",120468:\"13 42Q13 63 23 69T69 76H102V535H69H54Q34 535 24 542T13 573Q13 588 15 593Q22 605 29 608T56 611H95Q113 611 122 611T140 610T152 609T159 607T163 603T167 597T173 589V413L174 237L295 355H275Q260 355 253 356T239 367T232 393Q232 419 243 425T304 431H359H464Q479 422 482 415T485 393Q485 364 464 356L431 355H398L293 254L427 76H486Q501 67 504 60T507 38Q507 28 507 24T501 12T486 1H314Q292 8 292 38Q292 62 308 73Q312 75 326 76L338 77L290 140Q279 154 267 171T248 196L242 204L207 171L173 139V76H206H221Q241 76 251 69T262 38Q262 11 244 3Q240 1 138 1Q123 1 100 1T70 0Q32 0 23 7T13 42\",120469:\"51 573Q51 602 73 610H76Q79 610 84 610T97 610T113 610T133 611T155 611T179 611H282Q301 598 304 586V76H452Q466 67 470 60T474 38Q474 10 452 1H73Q51 9 51 32V38Q51 54 54 60T73 76H220V535H146L73 536Q51 545 51 567V573\",120470:\"133 76Q156 74 164 67T172 38Q172 9 151 1H11Q-12 8 -12 38Q-12 61 5 73Q10 75 28 76H45V355H28Q10 356 5 358Q-12 370 -12 393Q-12 419 11 431H52H70Q91 431 100 427T116 405Q163 436 200 436Q255 436 281 390L285 394Q289 398 292 400T301 407T314 415T329 423T346 429T366 434T389 436H392Q425 436 448 411Q469 390 474 360T480 268V232V203V76H497Q520 74 528 67T536 38Q536 9 515 1H396Q374 9 374 32V38Q374 73 402 76H409V191V242Q409 317 404 339T375 361Q343 361 323 332T299 264Q298 258 298 165V76H315Q338 74 346 67T354 38Q354 9 333 1H214Q192 9 192 32V38Q192 73 220 76H227V191V242Q227 317 222 339T193 361Q161 361 141 332T117 264Q116 258 116 165V76H133\",120471:\"89 431Q94 431 105 431T122 432Q173 432 173 399Q173 394 175 394Q176 394 190 404T233 425T298 436Q343 436 371 423Q411 402 423 365T436 265Q436 257 436 239T435 211V198V76H498Q512 67 516 60T520 38Q520 9 498 1H308Q286 9 286 32V38V45Q286 65 303 73Q309 76 329 76H351V188Q351 204 351 230T352 266Q352 321 341 341T288 361Q253 361 222 341T176 274L174 264L173 170V76H236Q250 67 254 60T258 38Q258 9 236 1H27Q4 8 4 38Q4 53 8 60T27 76H89V355H58L27 356Q4 363 4 393Q4 408 8 415T27 431H89\",120472:\"52 216Q52 318 118 379T261 440Q343 440 407 378T472 216Q472 121 410 58T262 -6Q176 -6 114 58T52 216ZM388 225Q388 281 351 322T261 364Q213 364 175 325T136 225Q136 158 174 114T262 70T350 114T388 225\",120473:\"89 431Q93 431 104 431T121 432Q173 432 173 401V396L182 402Q237 437 305 437Q376 437 434 378T492 217Q492 146 459 93T382 17T291 -6Q261 -6 232 5T188 26L174 37Q173 37 173 -54V-146H236Q250 -155 254 -162T258 -184Q258 -213 236 -221H27Q4 -214 4 -184Q4 -169 8 -162T27 -146H89V355H58L27 356Q4 363 4 393Q4 408 8 415T27 431H89ZM409 215Q409 269 377 315T283 361Q255 361 224 344T177 297L173 290V167Q189 124 213 97T278 70Q330 70 369 111T409 215\",120474:\"34 215Q34 309 91 368T222 436Q224 436 231 436T242 437Q309 437 372 390V401Q372 419 381 428T414 437Q426 437 432 436T444 430T456 412V-146H489H504Q524 -146 534 -153T545 -184Q545 -211 527 -219Q523 -221 414 -221Q398 -221 374 -221T342 -222Q304 -222 294 -216T283 -184Q283 -157 301 -149Q307 -146 339 -146H372V-51Q372 43 371 43L364 38Q357 33 345 26T318 12T280 -1T236 -6Q155 -6 95 55T34 215ZM117 215Q117 152 157 111T250 70Q289 70 318 92T363 146Q372 163 372 192V215L371 263Q339 360 254 360Q206 360 162 321T117 215\",120475:\"327 76Q359 76 369 70T380 38Q380 10 359 1H47Q24 8 24 38Q24 54 28 61T47 76H145V355H96L47 356Q24 363 24 393Q24 409 28 416T47 431H207Q223 419 226 414T229 393V387V369Q297 437 394 437Q436 437 461 417T487 368Q487 347 473 332T438 317Q428 317 420 320T407 327T398 337T393 347T390 356L388 361Q348 356 324 345Q228 299 228 170Q228 161 228 151T229 138V76H293H327\",120476:\"72 317Q72 361 108 396T229 439Q231 439 245 439T268 440Q303 439 324 435T353 427T363 423L372 432Q380 440 397 440Q430 440 430 395Q430 390 430 380T429 366V335Q429 311 422 302T387 293Q364 293 355 300T346 316T343 336T325 353Q306 364 257 364Q209 364 178 351T147 317Q147 284 231 272Q327 256 357 247Q458 210 458 129V121Q458 74 413 34T271 -6Q246 -6 224 -3T189 5T165 14T150 22T144 26Q142 23 139 18T135 11T132 6T128 1T124 -2T119 -4T113 -5T104 -6Q84 -6 78 6T71 43Q71 48 71 60T72 79Q72 132 73 141T81 157Q90 166 115 166Q135 166 142 162T157 140Q168 108 191 90T260 70Q297 70 323 76T361 91T379 110T384 129Q384 157 346 171T247 195T165 212Q119 228 96 256T72 317\",120477:\"25 395Q26 405 26 408T29 416T35 423T48 431H145V481L146 532Q154 547 161 550T184 554H189Q218 554 227 534Q229 529 229 480V431H405Q406 430 411 427T418 422T422 416T426 407T427 393Q427 387 427 382T424 374T421 368T417 363T413 360T408 358L405 356L317 355H229V249Q229 237 229 214T228 179Q228 126 241 98T295 70Q354 70 365 149Q366 167 375 174Q383 182 407 182H415Q438 182 446 166Q448 161 448 148Q448 84 398 39T282 -6Q226 -6 189 29T146 128Q145 134 145 247V355H96H72Q45 355 35 362T25 395\",120478:\"4 393Q4 416 15 423T52 431H90Q141 431 151 429T168 417Q171 412 173 409V254L174 100Q182 70 244 70Q320 70 344 119Q349 130 350 144T351 248V355H320L289 356Q266 363 266 393Q266 408 270 415T289 431H351H386Q409 431 418 428T433 411Q435 406 435 241V76H498Q512 67 516 60T520 38Q520 9 498 1H436H394Q372 1 364 5T351 26L342 21Q293 -5 227 -5Q118 -5 96 67Q91 82 90 101T89 227V355H58L27 356Q4 363 4 393\",120479:\"24 392Q24 417 36 424T79 432Q85 432 103 432T132 431H215Q229 422 233 415T237 393Q237 355 198 355H193H172L262 77L352 355H331H323Q288 355 288 393Q288 409 291 415T310 431H478Q491 423 495 416T500 393Q500 364 478 356L452 355H426L374 190Q320 24 318 20Q307 -4 273 -4H262H251Q217 -4 206 20Q204 24 150 190L98 355H72L47 356Q24 363 24 392\",120480:\"54 355Q16 355 16 388V393Q16 423 37 430Q41 431 125 431H162Q206 431 218 425T230 393Q230 366 212 358Q206 355 174 355Q141 355 141 354L150 296Q181 110 181 89V84Q182 85 183 96Q185 118 199 173T218 237Q223 247 245 259H264H268Q294 259 309 240Q315 229 329 174T343 92Q343 84 344 84V86Q344 88 344 91T345 97Q347 125 356 187T374 301T383 354Q383 355 350 355H333Q314 355 304 362T294 393Q294 420 312 428Q318 431 401 431H440Q485 431 496 425T508 393Q508 382 508 377T498 363T470 355L455 354Q455 353 441 271T413 104T396 16Q384 -4 355 -4H351Q315 -4 305 9T280 79Q278 90 276 96Q265 149 265 169Q265 176 264 169Q263 166 263 162Q261 130 248 79T230 18Q220 -4 183 -4H175L151 -3Q134 5 127 17L112 102Q97 188 83 270T69 354Q62 355 54 355\",120481:\"35 393Q35 417 46 424T89 432Q95 432 112 432T141 431H223Q238 422 241 415T244 393Q244 389 244 383T237 367T216 355Q209 355 209 354L234 319Q259 286 260 286L308 354Q308 355 301 355Q285 356 278 365T270 384L271 393Q271 420 289 428Q295 431 376 431H459Q460 430 465 427T472 422T476 416T480 407T481 393Q481 368 470 362T434 355H425H392L344 290Q295 225 295 223Q294 223 309 203T350 149L405 77L439 76H453Q474 76 484 69T495 38Q495 10 473 1H303Q281 9 281 32V38Q281 49 282 54T290 67T313 76Q324 76 324 77L259 173L197 77Q202 76 209 76Q225 75 233 68T241 55T242 38Q242 28 242 24T236 12T221 1H51Q29 9 29 32V38Q29 48 29 51T31 59T38 67T51 76H117L171 149Q224 222 224 223L124 355H90H78Q54 355 45 361T35 393\",120482:\"26 393Q26 417 37 424T80 431H134H217Q232 422 235 416T239 393Q239 379 236 371T226 360T214 356T197 355L179 354V353L188 330Q197 306 209 272T235 201T259 133T271 89V84L274 95Q279 122 298 185T335 300T352 354Q352 355 331 355Q312 355 304 358Q288 368 288 393Q288 408 291 415T310 431H478Q479 430 484 427T491 422T495 416T499 407T500 393Q500 376 493 367T479 357T458 355H452Q426 355 425 353Q420 337 351 124T280 -94Q240 -195 168 -220Q147 -228 125 -228Q89 -228 66 -201T42 -139Q42 -116 56 -102T93 -87Q117 -87 130 -102T144 -135V-138H126Q121 -148 121 -150T130 -152Q182 -147 207 -87Q211 -78 223 -40T236 1Q230 10 102 355H75L49 356Q26 363 26 393\",120483:\"56 1Q40 7 37 14T34 41Q34 59 36 64Q39 67 43 73Q65 95 191 213T341 355H133V334Q133 306 124 297Q116 289 91 289H83Q60 289 51 308Q49 313 49 361L50 409Q59 427 72 430H78Q83 430 92 430T115 430T144 430T179 431T219 431T262 431H450Q452 430 455 428T459 424T463 422T466 419T468 416T469 413T470 409T471 404T472 398T472 391Q472 374 469 368L462 358Q453 349 315 218Q210 122 164 76H391V103Q391 136 400 146Q409 155 433 155Q464 155 473 135Q475 130 475 78V46Q475 24 472 16T453 1H56\",120488:\"296 0Q278 3 164 3Q58 3 49 0H40V62H92Q144 62 144 64Q388 682 397 689Q403 698 434 698Q463 698 471 689Q475 686 538 530T663 218L724 64Q724 62 776 62H828V0H817Q796 3 658 3Q509 3 485 0H472V62H517Q561 62 561 63L517 175H262L240 120Q218 65 217 64Q217 62 261 62H306V0H296ZM390 237L492 238L440 365Q390 491 388 491Q287 239 287 237H390\",120489:\"720 510Q720 476 704 448T665 404T619 377T580 362L564 359L583 356Q602 353 632 342T690 312Q712 292 725 276Q752 235 752 189V183Q752 160 741 125Q698 18 547 2Q543 1 288 0H39V62H147V624H39V686H264H409Q502 686 542 681T624 655Q720 607 720 510ZM563 513Q563 553 548 578T518 611T486 622Q479 624 385 624H293V382H375Q458 383 467 385Q563 405 563 513ZM590 192Q590 307 505 329Q504 330 503 330L398 331H293V62H391H400H444Q496 62 528 75T580 131Q590 155 590 192\",120490:\"425 0L228 3Q63 3 51 0H39V62H147V618H39V680H612V676Q614 670 627 552T643 428V424H581V428Q580 430 576 461T562 524T532 576Q512 596 481 605T426 616T357 618H304V62H439V0H425\",120491:\"901 12Q901 7 892 0H479Q65 0 62 2Q56 6 56 11Q56 14 242 347T433 685Q438 694 450 696Q454 698 480 698H506L523 687Q526 683 711 354T899 17Q901 13 901 12ZM653 137L427 538L202 137L315 136H540L653 137\",120492:\"723 286Q721 284 700 145T677 3V0H39V62H147V618H39V680H660V676Q662 670 675 552T691 428V424H629V428Q629 429 627 448T618 494T601 541Q574 593 527 605T382 618H374H304V384H336Q338 384 347 384T361 384T376 386T392 390T407 397T421 407T432 423Q442 444 443 482V501H505V205H443V224Q442 258 435 278T411 307T380 318T336 322H304V62H375H394Q429 62 449 62T497 66T541 76T577 95T609 126T632 170T651 232Q661 287 661 289H723V286\",120493:\"80 430L92 686H358Q624 686 628 684Q638 679 638 656Q638 640 637 639Q637 638 445 353Q401 288 351 214T277 103L253 67L256 66Q258 66 265 66T279 66T298 66H343Q380 66 406 68T464 81T518 110T557 164T579 250Q583 278 583 298Q583 299 614 299H645V291Q643 281 636 150T627 8V0H353Q79 0 75 2Q64 7 64 31Q64 48 66 52L259 340L451 623Q451 624 384 624Q294 623 259 612Q155 581 143 446Q142 440 142 432V430H80\",120494:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H51Q75 683 226 683Q376 683 400 686H412V624H304V388H595V624H487V686H499Q523 683 673 683Q824 683 848 686H860V624H752V62H860V0H848Q824 3 674 3Q523 3 499 0H487V62H595V326H304V62H412V0H400\",120495:\"629 -10T446 -10T164 89T64 340Q64 380 71 420T102 510T163 596T266 662T418 696H438Q488 696 499 695Q582 686 644 655T741 584T796 495T823 409T829 338Q829 188 729 89ZM439 645Q416 645 390 638T333 615T275 564T236 480Q221 423 221 341Q221 272 230 228Q247 144 301 94T447 43T592 93T663 228Q672 272 672 341Q672 645 439 645ZM286 242V446H348V412H545V446H607V242H545V276H348V242H286\",120496:\"397 0Q370 3 218 3Q65 3 38 0H25V62H139V624H25V686H38Q65 683 218 683Q370 683 397 686H410V624H296V62H410V0H397\",120497:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H51Q75 683 226 683Q376 683 400 686H412V624H304V338L472 483L634 624H565V686H576Q597 683 728 683Q814 683 829 686H836V624H730L614 524Q507 432 497 422Q496 422 498 418T514 395T553 342T627 241L759 63L805 62H852V0H842Q830 3 701 3Q550 3 526 0H513V62H549Q584 62 584 63Q583 65 486 196T388 328L304 256V62H412V0H400\",120498:\"285 0Q267 3 154 3Q56 3 47 0H40V62H131Q131 63 167 160T244 369T321 578T359 678Q366 698 393 698H404H413Q437 698 446 678Q448 672 560 369T674 62H765V0H754Q733 3 604 3Q453 3 429 0H416V62H461L507 63L355 470Q353 468 279 265L203 63L249 62H294V0H285\",120499:\"314 0Q296 3 181 3T48 0H39V62H147V624H39V686H305Q316 679 323 667Q330 653 434 414L546 157L658 414Q766 662 773 674Q778 681 788 686H1052V624H944V62H1052V0H1040Q1016 3 874 3T708 0H696V62H804V341L803 618L786 580Q770 543 735 462T671 315Q540 13 536 9Q528 1 507 1Q485 1 477 9Q472 14 408 162T281 457T217 603Q215 603 215 334V62H323V0H314\",120500:\"314 0Q296 3 181 3T48 0H39V62H147V624H39V686H171H265Q288 686 297 686T309 684T315 679Q317 676 500 455T684 233V624H576V686H585Q603 683 718 683T851 686H860V624H752V319Q752 15 750 11Q747 4 742 2T718 0H712Q708 0 706 0T700 0T696 1T693 2T690 4T687 7T684 11T679 16T674 23Q671 27 437 311L215 579V62H323V0H314\",120501:\"54 465L63 674Q63 675 383 675T703 674L712 465Q712 464 681 464H650V467Q650 490 646 516T632 545Q612 550 383 550H283Q169 550 149 548T124 531Q123 530 123 529Q116 506 116 467V464H85Q54 464 54 465ZM160 256V447H222V414H544V447H606V256H544V289H222V256H160ZM57 0L48 222H110V219Q110 147 125 133Q127 130 130 129T160 127T235 126T383 126Q482 126 530 126T604 127T635 129T641 133Q656 146 656 219V222H718L709 0H57\",120502:\"64 339Q64 431 96 502T182 614T295 675T420 696Q469 696 481 695Q620 680 709 589T798 339Q798 173 697 82T432 -10Q262 -10 163 85T64 339ZM625 454Q618 502 600 538T562 593T515 624T469 639T431 642Q331 642 276 563Q232 493 232 353Q232 315 234 285T244 216T267 148T308 94T372 56Q405 46 432 46Q517 46 567 106T627 267Q631 299 631 353Q631 418 625 454\",120503:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V618H39V680H860V618H752V62H860V0H848Q824 3 674 3Q523 3 499 0H487V62H595V618H304V62H412V0H400\",120504:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H253Q435 686 470 685T536 678Q585 668 621 648T675 605T705 557T718 514T721 483T718 451T704 409T673 362T616 322T530 293Q500 288 399 287H304V62H412V0H400ZM553 475Q553 554 537 582T459 622Q451 623 373 624H298V343H372Q457 344 480 350Q527 362 540 390T553 475\",120506:\"766 271Q764 266 750 137T735 4V0H407Q74 0 71 4L70 5Q64 9 64 18Q64 24 82 41T213 158L359 288Q360 288 320 336T214 460Q67 633 66 635Q64 638 64 655Q64 679 75 684Q78 686 407 686H735V682Q738 676 751 558T766 434V430H735Q704 430 704 431Q704 434 703 444T696 477T681 520T654 563T613 598Q578 615 527 619T371 624H281L396 489Q506 358 513 351Q517 342 512 334Q503 325 371 208Q338 179 303 147T249 99L231 83L243 81Q258 81 364 81Q382 81 418 81T470 82T513 83T554 88T587 96T619 109T645 129Q689 173 702 260L704 274Q704 275 735 275H766V271\",120507:\"41 425Q41 426 51 545T62 669V675H737V669Q738 665 748 546T758 425V419H696V425Q687 517 669 555T595 607Q578 612 522 613H478V62H631V0H615Q585 3 399 3Q214 3 184 0H168V62H321V613H277H263Q164 613 134 561Q113 527 103 425V419H41V425\",120508:\"64 556Q69 619 114 658T224 697Q271 697 310 677T375 622T417 554T444 484L447 477V479Q456 516 473 551T516 620T582 676T670 697Q735 697 780 656T829 556Q829 539 818 532H772Q761 539 761 548Q761 571 681 571Q664 571 653 570T623 562T587 537T555 490Q536 448 531 410T525 300V210V62H660V0H646L447 3Q257 1 247 0H233V62H368V210V301Q368 373 363 410T338 490Q324 518 307 536T270 561T240 569T212 571Q132 571 132 548Q132 539 121 532H75Q64 538 64 556\",120509:\"609 0Q582 3 415 3T221 0H207V62H342V168L328 169Q193 180 117 241Q64 286 64 343T117 445Q193 506 328 517L342 518V624H207V686H221Q248 683 415 683T609 686H623V624H488V518L502 517Q637 506 713 445Q766 400 766 343T713 241Q637 180 502 169L488 168V62H623V0H609ZM342 219T342 343T340 467Q328 467 304 459Q277 451 261 439T237 409T228 378T226 343Q226 314 229 296T250 259T301 228Q331 219 341 219Q342 219 342 343ZM604 343Q604 365 602 379T591 413T560 446T503 464L489 467Q488 467 488 343T489 219Q499 219 529 228Q554 236 570 248T593 277T602 308T604 343\",120510:\"327 0Q306 3 174 3Q52 3 43 0H33V62H98L162 63L360 333L157 624H48V686H59Q80 683 217 683Q368 683 395 686H408V624H335L393 540L452 458L573 623Q573 624 528 624H483V686H494Q515 683 646 683Q769 683 778 686H787V624H658L575 511Q493 398 493 397L508 376Q522 356 553 312T611 229L727 62H835V0H824Q803 3 667 3Q516 3 489 0H476V62H513L549 63L401 274L247 63Q247 62 292 62H338V0H327\",120511:\"64 515Q64 532 71 536T104 540H139Q200 540 207 538Q225 533 236 521T253 489T260 454T264 414Q264 340 287 296T347 237Q369 226 373 226Q374 226 374 425V624H239V686H253Q280 683 447 683T641 686H655V624H520V226L522 227Q525 228 531 229T552 240T580 261T606 298T624 354Q627 368 628 394T631 440T637 482T654 518T686 538Q693 540 754 540H794Q817 540 823 536T829 515Q829 500 824 495T811 489T796 483T782 461T775 408Q767 212 568 175Q526 168 521 168Q520 168 520 115V62H655V0H641Q614 3 447 3T253 0H239V62H374V168L364 169Q290 178 243 203Q126 261 118 409Q117 443 111 461T98 484T83 489T70 495T64 515\",120512:\"598 645T415 645T232 458Q232 385 275 239T318 26Q318 8 311 4T272 -1Q265 -1 240 -1T196 0H88V3Q86 5 70 108Q52 211 51 212V215H113V212Q123 149 132 133Q136 124 149 122T202 118Q241 118 241 119Q241 132 132 277Q64 378 64 457Q64 564 158 630T403 696Q487 696 543 685T661 638Q722 599 744 549T766 458Q766 434 761 410T749 368T729 327T709 293T684 258T663 229Q632 187 614 160T592 126L589 119Q589 118 628 118Q667 119 680 121T698 133Q702 140 706 160T714 196L717 212V215H779V212Q778 211 760 108Q744 5 742 3V0H634H562Q528 0 520 4T512 26Q512 92 555 238T598 458Q598 645 415 645\",120513:\"56 673Q56 679 65 686H892Q901 679 901 673Q901 668 714 331T521 -15Q518 -18 506 -24H452Q440 -19 436 -15Q431 -8 337 162T150 501L57 669Q57 670 56 672V673ZM528 136L758 553H297Q298 551 414 341L528 136\",120546:\"208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260\",120547:\"231 637Q204 637 199 638T194 649Q194 676 205 682Q206 683 335 683Q594 683 608 681Q671 671 713 636T756 544Q756 480 698 429T565 360L555 357Q619 348 660 311T702 219Q702 146 630 78T453 1Q446 0 242 0Q42 0 39 2Q35 5 35 10Q35 17 37 24Q42 43 47 45Q51 46 62 46H68Q95 46 128 49Q142 52 147 61Q150 65 219 339T288 628Q288 635 231 637ZM649 544Q649 574 634 600T585 634Q578 636 493 637Q473 637 451 637T416 636H403Q388 635 384 626Q382 622 352 506Q352 503 351 500L320 374H401Q482 374 494 376Q554 386 601 434T649 544ZM595 229Q595 273 572 302T512 336Q506 337 429 337Q311 337 310 336Q310 334 293 263T258 122L240 52Q240 48 252 48T333 46Q422 46 429 47Q491 54 543 105T595 229\",120548:\"49 1Q31 1 31 10Q31 12 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 661Q197 674 203 680H714Q721 676 721 669Q721 664 708 557T694 447Q692 440 674 440H662Q655 445 655 454Q655 455 658 480T661 534Q661 572 652 592Q638 619 603 626T501 634H471Q398 633 393 630Q389 628 386 622Q385 619 315 341T245 60Q245 46 333 46H345Q366 46 366 35Q366 33 363 21T358 6Q356 1 339 1Q334 1 292 1T187 2Q122 2 88 2T49 1\",120549:\"574 715L582 716Q589 716 595 716Q612 716 616 714Q621 712 621 709Q622 707 705 359T788 8Q786 5 785 3L781 0H416Q52 0 50 2T48 6Q48 9 305 358T567 711Q572 712 574 715ZM599 346L538 602L442 474Q347 345 252 217T157 87T409 86T661 88L654 120Q646 151 629 220T599 346\",120550:\"492 213Q472 213 472 226Q472 230 477 250T482 285Q482 316 461 323T364 330H312Q311 328 277 192T243 52Q243 48 254 48T334 46Q428 46 458 48T518 61Q567 77 599 117T670 248Q680 270 683 272Q690 274 698 274Q718 274 718 261Q613 7 608 2Q605 0 322 0H133Q31 0 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 659Q197 676 203 680H757Q764 676 764 669Q764 664 751 557T737 447Q735 440 717 440H705Q698 445 698 453L701 476Q704 500 704 528Q704 558 697 578T678 609T643 625T596 632T532 634H485Q397 633 392 631Q388 629 386 622Q385 619 355 499T324 377Q347 376 372 376H398Q464 376 489 391T534 472Q538 488 540 490T557 493Q562 493 565 493T570 492T572 491T574 487T577 483L544 351Q511 218 508 216Q505 213 492 213\",120551:\"58 8Q58 23 64 35Q64 36 329 334T596 635L586 637Q575 637 512 637H500H476Q442 637 420 635T365 624T311 598T266 548T228 469Q227 466 226 463T224 458T223 453T222 450L221 448Q218 443 202 443Q185 443 182 453L214 561Q228 606 241 651Q249 679 253 681Q256 683 487 683H718Q723 678 723 675Q723 673 717 649Q189 54 188 52L185 49H274Q369 50 377 51Q452 60 500 100T579 247Q587 272 590 277T603 282H607Q628 282 628 271Q547 5 541 2Q538 0 300 0H124Q58 0 58 8\",120552:\"228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 219 683Q260 681 355 681Q389 681 418 681T463 682T483 682Q499 682 499 672Q499 670 497 658Q492 641 487 638H485Q483 638 480 638T473 638T464 637T455 637Q416 636 405 634T387 623Q384 619 355 500Q348 474 340 442T328 395L324 380Q324 378 469 378H614L615 381Q615 384 646 504Q674 619 674 627T617 637Q594 637 587 639T580 648Q580 650 582 660Q586 677 588 679T604 682Q609 682 646 681T740 680Q802 680 835 681T871 682Q888 682 888 672Q888 645 876 638H874Q872 638 869 638T862 638T853 637T844 637Q805 636 794 634T776 623Q773 618 704 340T634 58Q634 51 638 51Q646 48 692 46H723Q729 38 729 37T726 19Q722 6 716 0H701Q664 2 567 2Q533 2 504 2T458 2T437 1Q420 1 420 10Q420 15 423 24Q428 43 433 45Q437 46 448 46H454Q481 46 514 49Q520 50 522 50T528 55T534 64T540 82T547 110T558 153Q565 181 569 198Q602 330 602 331T457 332H312L279 197Q245 63 245 58Q245 51 253 49T303 46H334Q340 38 340 37T337 19Q333 6 327 0H312Q275 2 178 2Q144 2 115 2T69 2T48 1Q31 1 31 10Q31 12 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637\",120553:\"740 435Q740 320 676 213T511 42T304 -22Q207 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435ZM640 466Q640 523 625 565T583 628T532 658T479 668Q370 668 273 559T151 255Q150 245 150 213Q150 156 165 116T207 55T259 26T313 17Q385 17 451 63T561 184Q590 234 615 312T640 466ZM510 276Q510 278 512 288L515 298Q515 299 384 299H253L250 285Q246 271 244 268T231 265H227Q216 265 214 266T207 274Q207 278 223 345T244 416Q247 419 260 419H263Q280 419 280 408Q280 406 278 396L275 386Q275 385 406 385H537L540 399Q544 413 546 416T559 419H563Q574 419 576 418T583 410Q583 403 566 339Q549 271 544 267Q542 265 538 265H530H527Q510 265 510 276\",120554:\"43 1Q26 1 26 10Q26 12 29 24Q34 43 39 45Q42 46 54 46H60Q120 46 136 53Q137 53 138 54Q143 56 149 77T198 273Q210 318 216 344Q286 624 286 626Q284 630 284 631Q274 637 213 637H193Q184 643 189 662Q193 677 195 680T209 683H213Q285 681 359 681Q481 681 487 683H497Q504 676 504 672T501 655T494 639Q491 637 471 637Q440 637 407 634Q393 631 388 623Q381 609 337 432Q326 385 315 341Q245 65 245 59Q245 52 255 50T307 46H339Q345 38 345 37T342 19Q338 6 332 0H316Q279 2 179 2Q143 2 113 2T65 2T43 1\",120555:\"285 628Q285 635 228 637Q205 637 198 638T191 647Q191 649 193 661Q199 681 203 682Q205 683 214 683H219Q260 681 355 681Q389 681 418 681T463 682T483 682Q500 682 500 674Q500 669 497 660Q496 658 496 654T495 648T493 644T490 641T486 639T479 638T470 637T456 637Q416 636 405 634T387 623L306 305Q307 305 490 449T678 597Q692 611 692 620Q692 635 667 637Q651 637 651 648Q651 650 654 662T659 677Q662 682 676 682Q680 682 711 681T791 680Q814 680 839 681T869 682Q889 682 889 672Q889 650 881 642Q878 637 862 637Q787 632 726 586Q710 576 656 534T556 455L509 418L518 396Q527 374 546 329T581 244Q656 67 661 61Q663 59 666 57Q680 47 717 46H738Q744 38 744 37T741 19Q737 6 731 0H720Q680 3 625 3Q503 3 488 0H478Q472 6 472 9T474 27Q478 40 480 43T491 46H494Q544 46 544 71Q544 75 517 141T485 216L427 354L359 301L291 248L268 155Q245 63 245 58Q245 51 253 49T303 46H334Q340 37 340 35Q340 19 333 5Q328 0 317 0Q314 0 280 1T180 2Q118 2 85 2T49 1Q31 1 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628\",120556:\"135 2Q114 2 90 2T60 1Q35 1 35 11Q35 28 42 40Q45 46 55 46Q119 46 151 94Q153 97 325 402T498 709Q505 716 526 716Q543 716 549 710Q550 709 560 548T580 224T591 57Q594 52 595 52Q603 47 638 46H663Q670 39 670 35Q669 12 657 0H644Q613 2 530 2Q497 2 469 2T424 2T405 1Q388 1 388 10Q388 15 391 24Q392 27 393 32T395 38T397 41T401 44T406 45T415 46Q473 46 487 64L472 306Q468 365 465 426T459 518L457 550Q456 550 328 322T198 88Q196 80 196 77Q196 49 243 46Q261 46 261 35Q261 34 259 22Q256 7 254 4T240 0Q237 0 211 1T135 2\",120557:\"289 629Q289 635 232 637Q208 637 201 638T194 648Q194 649 196 659Q197 662 198 666T199 671T201 676T203 679T207 681T212 683T220 683T232 684Q238 684 262 684T307 683Q386 683 398 683T414 678Q415 674 451 396L487 117L510 154Q534 190 574 254T662 394Q837 673 839 675Q840 676 842 678T846 681L852 683H948Q965 683 988 683T1017 684Q1051 684 1051 673Q1051 668 1048 656T1045 643Q1041 637 1008 637Q968 636 957 634T939 623Q936 618 867 340T797 59Q797 55 798 54T805 50T822 48T855 46H886Q892 37 892 35Q892 19 885 5Q880 0 869 0Q864 0 828 1T736 2Q675 2 644 2T609 1Q592 1 592 11Q592 13 594 25Q598 41 602 43T625 46Q652 46 685 49Q699 52 704 61Q706 65 742 207T813 490T848 631L654 322Q458 10 453 5Q451 4 449 3Q444 0 433 0Q418 0 415 7Q413 11 374 317L335 624L267 354Q200 88 200 79Q206 46 272 46H282Q288 41 289 37T286 19Q282 3 278 1Q274 0 267 0Q265 0 255 0T221 1T157 2Q127 2 95 1T58 0Q43 0 39 2T35 11Q35 13 38 25T43 40Q45 46 65 46Q135 46 154 86Q158 92 223 354T289 629\",120558:\"234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637\",120559:\"222 668Q222 670 229 677H654Q677 677 705 677T740 678Q764 678 770 676T777 667Q777 662 764 594Q761 579 757 559T751 528L749 519Q747 512 729 512H717Q710 519 710 525Q712 532 715 559T719 591Q718 595 711 595Q682 598 486 598Q252 598 246 592Q239 587 228 552L216 517Q214 512 197 512H185Q178 517 178 522Q178 524 198 591T222 668ZM227 262Q218 262 215 262T209 266L207 270L227 356Q247 435 250 439Q253 443 260 443H267H280Q287 438 287 433Q287 430 285 420T280 402L278 393Q278 392 431 392H585L590 415Q595 436 598 439T612 443H628Q635 438 635 433Q635 431 615 351T594 268Q592 262 575 262H572Q556 262 556 272Q556 280 560 293L565 313H258L252 292Q248 271 245 267T230 262H227ZM60 0Q53 4 53 11Q53 14 68 89T84 169Q88 176 98 176H104H116Q123 169 123 163Q122 160 117 127T112 88Q112 80 243 80H351H454Q554 80 574 81T597 88V89Q603 100 610 121T622 157T630 174Q633 176 646 176H658Q665 171 665 166Q665 164 643 89T618 7Q616 2 607 1T548 0H335H60\",120560:\"740 435Q740 320 676 213T511 42T304 -22Q207 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435ZM637 476Q637 565 591 615T476 665Q396 665 322 605Q242 542 200 428T157 216Q157 126 200 73T314 19Q404 19 485 98T608 313Q637 408 637 476\",120561:\"48 1Q31 1 31 10Q31 12 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 661Q197 674 203 680H541Q621 680 709 680T812 681Q841 681 855 681T877 679T886 676T887 670Q887 663 885 656Q880 637 875 635Q871 634 860 634H854Q827 634 794 631Q780 628 775 619Q773 614 704 338T634 58Q634 51 638 51Q646 48 692 46H723Q729 38 729 37T726 19Q722 6 716 0H701Q664 2 567 2Q533 2 504 2T458 2T437 1Q420 1 420 10Q420 15 423 24Q428 43 433 45Q437 46 448 46H454Q481 46 514 49Q528 52 533 61Q536 67 572 209T642 491T678 632Q678 634 533 634H388Q387 631 316 347T245 59Q245 55 246 54T253 50T270 48T303 46H334Q340 38 340 37T337 19Q333 6 327 0H312Q275 2 178 2Q144 2 115 2T69 2T48 1\",120562:\"287 628Q287 635 230 637Q206 637 199 638T192 648Q192 649 194 659Q200 679 203 681T397 683Q587 682 600 680Q664 669 707 631T751 530Q751 453 685 389Q616 321 507 303Q500 302 402 301H307L277 182Q247 66 247 59Q247 55 248 54T255 50T272 48T305 46H336Q342 37 342 35Q342 19 335 5Q330 0 319 0Q316 0 282 1T182 2Q120 2 87 2T51 1Q33 1 33 11Q33 13 36 25Q40 41 44 43T67 46Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628ZM645 554Q645 567 643 575T634 597T609 619T560 635Q553 636 480 637Q463 637 445 637T416 636T404 636Q391 635 386 627Q384 621 367 550T332 412T314 344Q314 342 395 342H407H430Q542 342 590 392Q617 419 631 471T645 554\",120564:\"65 0Q58 4 58 11Q58 16 114 67Q173 119 222 164L377 304Q378 305 340 386T261 552T218 644Q217 648 219 660Q224 678 228 681Q231 683 515 683H799Q804 678 806 674Q806 667 793 559T778 448Q774 443 759 443Q747 443 743 445T739 456Q739 458 741 477T743 516Q743 552 734 574T710 609T663 627T596 635T502 637Q480 637 469 637H339Q344 627 411 486T478 341V339Q477 337 477 336L457 318Q437 300 398 265T322 196L168 57Q167 56 188 56T258 56H359Q426 56 463 58T537 69T596 97T639 146T680 225Q686 243 689 246T702 250H705Q726 250 726 239Q726 238 683 123T639 5Q637 1 610 1Q577 0 348 0H65\",120565:\"40 437Q21 437 21 445Q21 450 37 501T71 602L88 651Q93 669 101 677H569H659Q691 677 697 676T704 667Q704 661 687 553T668 444Q668 437 649 437Q640 437 637 437T631 442L629 445Q629 451 635 490T641 551Q641 586 628 604T573 629Q568 630 515 631Q469 631 457 630T439 622Q438 621 368 343T298 60Q298 48 386 46Q418 46 427 45T436 36Q436 31 433 22Q429 4 424 1L422 0Q419 0 415 0Q410 0 363 1T228 2Q99 2 64 0H49Q43 6 43 9T45 27Q49 40 55 46H83H94Q174 46 189 55Q190 56 191 56Q196 59 201 76T241 233Q258 301 269 344Q339 619 339 625Q339 630 310 630H279Q212 630 191 624Q146 614 121 583T67 467Q60 445 57 441T43 437H40\",120566:\"45 535Q34 535 31 536T28 544Q28 554 39 578T70 631T126 683T206 705Q230 705 251 698T295 671T330 612T344 514Q344 477 342 473V472Q343 472 347 480T361 509T380 547Q471 704 596 704Q615 704 625 702Q659 692 679 663T700 595Q700 565 696 552T687 537T670 535Q656 535 653 536T649 543Q649 544 649 550T650 562Q650 589 629 605T575 621Q502 621 448 547T365 361Q290 70 290 60Q290 46 379 46H404Q410 40 410 39T408 19Q404 6 398 0H381Q340 2 225 2Q184 2 149 2T94 2T69 1Q61 1 58 1T53 4T51 10Q51 11 53 23Q54 25 55 30T56 36T58 40T60 43T62 44T67 46T73 46T82 46H89Q144 46 163 49T190 62L198 93Q206 124 217 169T241 262T262 350T274 404Q281 445 281 486V494Q281 621 185 621Q147 621 116 601T74 550Q71 539 66 537T45 535\",120567:\"356 624Q356 637 267 637H243Q237 642 237 645T239 664Q243 677 249 683H264Q342 681 429 681Q565 681 571 683H583Q589 677 589 674T587 656Q582 641 578 637H540Q516 637 504 637T479 633T463 630T454 623T448 613T443 597T438 576Q436 566 434 556T430 539L428 533Q442 533 472 526T543 502T613 451T642 373Q642 301 567 241T386 158L336 150Q332 150 331 146Q310 66 310 60Q310 46 399 46H424Q430 40 430 39T428 19Q424 6 418 0H401Q360 2 247 2Q207 2 173 2T119 2T95 1Q87 1 84 1T79 4T77 10Q77 11 79 23Q80 25 81 30T82 36T84 40T86 43T88 44T93 46T99 46T108 46H115Q170 46 189 49T216 62Q220 74 228 107L239 150L223 152Q139 164 82 205T24 311Q24 396 125 462Q207 517 335 533L346 578Q356 619 356 624ZM130 291Q130 203 241 188H249Q249 190 287 342L325 495H324Q313 495 291 491T229 466T168 414Q130 357 130 291ZM536 393Q536 440 507 463T418 496L341 187L351 189Q443 201 487 255Q536 314 536 393\",120568:\"42 0H40Q26 0 26 11Q26 15 29 27Q33 41 36 43T55 46Q141 49 190 98Q200 108 306 224T411 342Q302 620 297 625Q288 636 234 637H206Q200 643 200 645T202 664Q206 677 212 683H226Q260 681 347 681Q380 681 408 681T453 682T473 682Q490 682 490 671Q490 670 488 658Q484 643 481 640T465 637Q434 634 411 620L488 426L541 485Q646 598 646 610Q646 628 622 635Q617 635 609 637Q594 637 594 648Q594 650 596 664Q600 677 606 683H618Q619 683 643 683T697 681T738 680Q828 680 837 683H845Q852 676 852 672Q850 647 840 637H824Q790 636 763 628T722 611T698 593L687 584Q687 585 592 480L505 384Q505 383 536 304T601 142T638 56Q648 47 699 46Q734 46 734 37Q734 35 732 23Q728 7 725 4T711 1Q708 1 678 1T589 2Q528 2 496 2T461 1Q444 1 444 10Q444 11 446 25Q448 35 450 39T455 44T464 46T480 47T506 54Q523 62 523 64Q522 64 476 181L429 299Q241 95 236 84Q232 76 232 72Q232 53 261 47Q262 47 267 47T273 46Q276 46 277 46T280 45T283 42T284 35Q284 26 282 19Q279 6 276 4T261 1Q258 1 243 1T201 2T142 2Q64 2 42 0\",120569:\"216 151Q48 174 48 329Q48 361 56 403T65 458Q65 482 58 494T43 507T28 510T21 520Q21 528 23 534T29 544L32 546H72H94Q110 546 119 544T139 536T154 514T159 476V465Q159 445 149 399T138 314Q142 229 197 201Q223 187 226 190L233 218Q240 246 253 300T280 407Q333 619 333 625Q333 637 244 637H220Q214 642 214 645T216 664Q220 677 226 683H241Q321 681 405 681Q543 681 549 683H560Q566 677 566 674T564 656Q559 641 555 637H517Q448 636 436 628Q429 623 423 600T373 404L320 192Q370 201 419 248Q451 281 469 317T500 400T518 457Q529 486 542 505T569 532T594 543T621 546H644H669Q692 546 692 536Q691 509 676 509Q623 509 593 399Q587 377 579 355T552 301T509 244T446 195T359 159Q324 151 314 151Q311 151 310 150T298 106T287 60Q287 46 376 46H401Q407 40 407 39T405 19Q401 6 395 0H378Q337 2 224 2Q184 2 150 2T96 2T72 1Q64 1 61 1T56 4T54 10Q54 11 56 23Q57 25 58 30T59 36T61 40T63 43T65 44T70 46T76 46T85 46H92Q147 46 166 49T193 62L204 106Q216 149 216 151\",120570:\"125 84Q127 78 194 76H243V78Q243 122 208 215T165 350Q164 359 162 389Q162 522 272 610Q328 656 396 680T525 704Q628 704 698 661Q734 637 755 601T781 544T786 504Q786 439 747 374T635 226T537 109Q518 81 518 77Q537 76 557 76Q608 76 620 78T640 92Q646 100 656 119T673 155T683 172Q690 173 698 173Q718 173 718 162Q718 161 681 82T642 2Q639 0 550 0H461Q455 5 455 9T458 28Q472 78 510 149T584 276T648 402T677 525Q677 594 636 631T530 668Q476 668 423 641T335 568Q284 499 271 400Q270 388 270 348Q270 298 277 228T285 115Q285 82 280 49T271 6Q269 1 258 1T175 0H87Q83 3 80 7V18Q80 22 82 98Q84 156 85 163T91 172Q94 173 104 173T119 172Q124 169 124 126Q125 104 125 84\",120572:\"34 156Q34 270 120 356T309 442Q379 442 421 402T478 304Q484 275 485 237V208Q534 282 560 374Q564 388 566 390T582 393Q603 393 603 385Q603 376 594 346T558 261T497 161L486 147L487 123Q489 67 495 47T514 26Q528 28 540 37T557 60Q559 67 562 68T577 70Q597 70 597 62Q597 56 591 43Q579 19 556 5T512 -10H505Q438 -10 414 62L411 69L400 61Q390 53 370 41T325 18T267 -2T203 -11Q124 -11 79 39T34 156ZM208 26Q257 26 306 47T379 90L403 112Q401 255 396 290Q382 405 304 405Q235 405 183 332Q156 292 139 224T121 120Q121 71 146 49T208 26\",120573:\"29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431\",120574:\"31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249\",120575:\"195 609Q195 656 227 686T302 717Q319 716 351 709T407 697T433 690Q451 682 451 662Q451 644 438 628T403 612Q382 612 348 641T288 671T249 657T235 628Q235 584 334 463Q401 379 401 292Q401 169 340 80T205 -10H198Q127 -10 83 36T36 153Q36 286 151 382Q191 413 252 434Q252 435 245 449T230 481T214 521T201 566T195 609ZM112 130Q112 83 136 55T204 27Q233 27 256 51T291 111T309 178T316 232Q316 267 309 298T295 344T269 400L259 396Q215 381 183 342T137 256T118 179T112 130\",120576:\"190 -22Q124 -22 76 11T27 107Q27 174 97 232L107 239L99 248Q76 273 76 304Q76 364 144 408T290 452H302Q360 452 405 421Q428 405 428 392Q428 381 417 369T391 356Q382 356 371 365T338 383T283 392Q217 392 167 368T116 308Q116 289 133 272Q142 263 145 262T157 264Q188 278 238 278H243Q308 278 308 247Q308 206 223 206Q177 206 142 219L132 212Q68 169 68 112Q68 39 201 39Q253 39 286 49T328 72T345 94T362 105Q376 103 376 88Q376 79 365 62T334 26T275 -8T190 -22\",120577:\"296 643Q298 704 324 704Q342 704 342 687Q342 682 339 664T336 633Q336 623 337 618T338 611Q339 612 341 612Q343 614 354 616T374 618L384 619H394Q471 619 471 586Q467 548 386 546H372Q338 546 320 564L311 558Q235 506 175 398T114 190Q114 171 116 155T125 127T137 104T153 86T171 72T192 61T213 53T235 46T256 39L322 16Q389 -10 389 -80Q389 -119 364 -154T300 -202Q292 -204 274 -204Q247 -204 225 -196Q210 -192 193 -182T172 -167Q167 -159 173 -148Q180 -139 191 -139Q195 -139 221 -153T283 -168Q298 -166 310 -152T322 -117Q322 -91 302 -75T250 -51T183 -29T116 4T65 62T44 160Q44 287 121 410T293 590L302 595Q296 613 296 643\",120578:\"21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q156 442 175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336V326Q503 302 439 53Q381 -182 377 -189Q364 -216 332 -216Q319 -216 310 -208T299 -186Q299 -177 358 57L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287\",120579:\"35 200Q35 302 74 415T180 610T319 704Q320 704 327 704T339 705Q393 701 423 656Q462 596 462 495Q462 380 417 261T302 66T168 -10H161Q125 -10 99 10T60 63T41 130T35 200ZM383 566Q383 668 330 668Q294 668 260 623T204 521T170 421T157 371Q206 370 254 370L351 371Q352 372 359 404T375 484T383 566ZM113 132Q113 26 166 26Q181 26 198 36T239 74T287 161T335 307L340 324H145Q145 321 136 286T120 208T113 132\",120580:\"139 -10Q111 -10 92 0T64 25T52 52T48 74Q48 89 55 109T85 199T135 375L137 384Q139 394 140 397T145 409T151 422T160 431T173 439T190 442Q202 442 213 435T225 410Q225 404 214 358T181 238T137 107Q126 74 126 54Q126 43 126 39T130 31T142 27H147Q206 27 255 78Q272 98 281 114T290 138T295 149T313 153Q321 153 324 153T329 152T332 149T332 143Q332 106 276 48T145 -10H139\",120581:\"83 -11Q70 -11 62 -4T51 8T49 17Q49 30 96 217T147 414Q160 442 193 442Q205 441 213 435T223 422T225 412Q225 401 208 337L192 270Q193 269 208 277T235 292Q252 304 306 349T396 412T467 431Q489 431 500 420T512 391Q512 366 494 347T449 327Q430 327 418 338T405 368Q405 370 407 380L397 375Q368 360 315 315L253 266L240 257H245Q262 257 300 251T366 230Q422 203 422 150Q422 140 417 114T411 67Q411 26 437 26Q484 26 513 137Q516 149 519 151T535 153Q554 153 554 144Q554 121 527 64T457 -7Q447 -10 431 -10Q386 -10 360 17T333 90Q333 108 336 122T339 146Q339 170 320 186T271 209T222 218T185 221H180L155 122Q129 22 126 16Q113 -11 83 -11\",120582:\"166 673Q166 685 183 694H202Q292 691 316 644Q322 629 373 486T474 207T524 67Q531 47 537 34T546 15T551 6T555 2T556 -2T550 -11H482Q457 3 450 18T399 152L354 277L340 262Q327 246 293 207T236 141Q211 112 174 69Q123 9 111 -1T83 -12Q47 -12 47 20Q47 37 61 52T199 187Q229 216 266 252T321 306L338 322Q338 323 288 462T234 612Q214 657 183 657Q166 657 166 673\",120583:\"58 -216Q44 -216 34 -208T23 -186Q23 -176 96 116T173 414Q186 442 219 442Q231 441 239 435T249 423T251 413Q251 401 220 279T187 142Q185 131 185 107V99Q185 26 252 26Q261 26 270 27T287 31T302 38T315 45T327 55T338 65T348 77T356 88T365 100L372 110L408 253Q444 395 448 404Q461 431 491 431Q504 431 512 424T523 412T525 402L449 84Q448 79 448 68Q448 43 455 35T476 26Q485 27 496 35Q517 55 537 131Q543 151 547 152Q549 153 557 153H561Q580 153 580 144Q580 138 575 117T555 63T523 13Q510 0 491 -8Q483 -10 467 -10Q446 -10 429 -4T402 11T385 29T376 44T374 51L368 45Q362 39 350 30T324 12T288 -4T246 -11Q199 -11 153 12L129 -85Q108 -167 104 -180T92 -202Q76 -216 58 -216\",120584:\"74 431Q75 431 146 436T219 442Q231 442 231 434Q231 428 185 241L137 51H140L150 55Q161 59 177 67T214 86T261 119T312 165Q410 264 445 394Q458 442 496 442Q509 442 519 434T530 411Q530 390 516 352T469 262T388 162T267 70T106 5Q81 -2 71 -2Q66 -2 59 -1T51 1Q45 5 45 11Q45 13 88 188L132 364Q133 377 125 380T86 385H65Q59 391 59 393T61 412Q65 431 74 431\",120585:\"268 632Q268 704 296 704Q314 704 314 687Q314 682 311 664T308 635T309 620V616H315Q342 619 360 619Q443 619 443 586Q439 548 358 546H344Q326 546 317 549T290 566Q257 550 226 505T195 405Q195 381 201 364T211 342T218 337Q266 347 298 347Q375 347 375 314Q374 297 359 288T327 277T280 275Q234 275 208 283L195 286Q149 260 119 214T88 130Q88 116 90 108Q101 79 129 63T229 20Q238 17 243 15Q337 -21 354 -33Q383 -53 383 -94Q383 -137 351 -171T273 -205Q240 -205 202 -190T158 -167Q156 -163 156 -159Q156 -151 161 -146T176 -140Q182 -140 189 -143Q232 -168 274 -168Q286 -168 292 -165Q313 -151 313 -129Q313 -112 301 -104T232 -75Q214 -68 204 -64Q198 -62 171 -52T136 -38T107 -24T78 -8T56 12T36 37T26 66T21 103Q21 149 55 206T145 301L154 307L148 313Q141 319 136 323T124 338T111 358T103 382T99 413Q99 471 143 524T259 602L271 607Q268 618 268 632\",120586:\"201 -11Q126 -11 80 38T34 156Q34 221 64 279T146 380Q222 441 301 441Q333 441 341 440Q354 437 367 433T402 417T438 387T464 338T476 268Q476 161 390 75T201 -11ZM121 120Q121 70 147 48T206 26Q250 26 289 58T351 142Q360 163 374 216T388 308Q388 352 370 375Q346 405 306 405Q243 405 195 347Q158 303 140 230T121 120\",120587:\"132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11\",120588:\"58 -216Q25 -216 23 -186Q23 -176 73 26T127 234Q143 289 182 341Q252 427 341 441Q343 441 349 441T359 442Q432 442 471 394T510 276Q510 219 486 165T425 74T345 13T266 -10H255H248Q197 -10 165 35L160 41L133 -71Q108 -168 104 -181T92 -202Q76 -216 58 -216ZM424 322Q424 359 407 382T357 405Q322 405 287 376T231 300Q217 269 193 170L176 102Q193 26 260 26Q298 26 334 62Q367 92 389 158T418 266T424 322\",120589:\"31 207Q31 306 115 374T302 442Q341 442 373 430T405 400Q405 392 399 383T379 374Q373 375 348 390T296 405Q222 405 160 357T98 249Q98 232 103 218T112 195T132 175T154 159T186 141T219 122Q234 114 255 102T286 85T299 78L302 74Q306 71 308 69T315 61T322 51T328 40T332 25T334 8Q334 -31 305 -69T224 -107Q194 -107 163 -92Q156 -88 156 -80Q156 -73 162 -67T178 -61Q186 -61 190 -63Q209 -71 224 -71Q244 -71 253 -59T263 -30Q263 -25 263 -21T260 -12T255 -4T248 3T239 9T227 17T213 25T195 34T174 46Q170 48 150 58T122 74T97 90T70 112T51 137T36 169T31 207\",120590:\"184 -11Q116 -11 74 34T31 147Q31 247 104 333T274 430Q275 431 414 431H552Q553 430 555 429T559 427T562 425T565 422T567 420T569 416T570 412T571 407T572 401Q572 357 507 357Q500 357 490 357T476 358H416L421 348Q439 310 439 263Q439 153 359 71T184 -11ZM361 278Q361 358 276 358Q152 358 115 184Q114 180 114 178Q106 141 106 117Q106 67 131 47T188 26Q242 26 287 73Q316 103 334 153T356 233T361 278\",120591:\"39 284Q18 284 18 294Q18 301 45 338T99 398Q134 425 164 429Q170 431 332 431Q492 431 497 429Q517 424 517 402Q517 388 508 376T485 360Q479 358 389 358T299 356Q298 355 283 274T251 109T233 20Q228 5 215 -4T186 -13Q153 -13 153 20V30L203 192Q214 228 227 272T248 336L254 357Q254 358 208 358Q206 358 197 358T183 359Q105 359 61 295Q56 287 53 286T39 284\",120592:\"413 384Q413 406 432 424T473 443Q492 443 507 425T523 367Q523 334 508 270T468 153Q424 63 373 27T282 -10H268Q220 -10 186 2T135 36T111 78T104 121Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 299 34 333T82 404T161 441Q200 441 225 419T250 355Q248 336 247 334Q247 331 232 291T201 199T185 118Q185 68 211 47T275 26Q317 26 355 57T416 132T452 216T465 277Q465 301 457 318T439 343T421 361T413 384\",120593:\"92 210Q92 176 106 149T142 108T185 85T220 72L235 70L237 71L250 112Q268 170 283 211T322 299T370 375T429 423T502 442Q547 442 582 410T618 302Q618 224 575 152T457 35T299 -10Q273 -10 273 -12L266 -48Q260 -83 252 -125T241 -179Q236 -203 215 -212Q204 -218 190 -218Q159 -215 159 -185Q159 -175 214 -2L209 0Q204 2 195 5T173 14T147 28T120 46T94 71T71 103T56 142T50 190Q50 238 76 311T149 431H162Q183 431 183 423Q183 417 175 409Q134 361 114 300T92 210ZM574 278Q574 320 550 344T486 369Q437 369 394 329T323 218Q309 184 295 109L286 64Q304 62 306 62Q423 62 498 131T574 278\",120594:\"576 -125Q576 -147 547 -175T487 -204H476Q394 -204 363 -157Q334 -114 293 26L284 59Q283 58 248 19T170 -66T92 -151T53 -191Q49 -194 43 -194Q36 -194 31 -189T25 -177T38 -154T151 -30L272 102L265 131Q189 405 135 405Q104 405 87 358Q86 351 68 351Q48 351 48 361Q48 369 56 386T89 423T148 442Q224 442 258 400Q276 375 297 320T330 222L341 180Q344 180 455 303T573 429Q579 431 582 431Q600 431 600 414Q600 407 587 392T477 270Q356 138 353 134L362 102Q392 -10 428 -89T490 -168Q504 -168 517 -156T536 -126Q539 -116 543 -115T557 -114T571 -115Q576 -118 576 -125\",120595:\"161 441Q202 441 226 417T250 358Q250 338 218 252T187 127Q190 85 214 61Q235 43 257 37Q275 29 288 29H289L371 360Q455 691 456 692Q459 694 472 694Q492 694 492 687Q492 678 411 356Q329 28 329 27T335 26Q421 26 498 114T576 278Q576 302 568 319T550 343T532 361T524 384Q524 405 541 424T583 443Q602 443 618 425T634 366Q634 337 623 288T605 220Q573 125 492 57T329 -11H319L296 -104Q272 -198 272 -199Q270 -205 252 -205H239Q233 -199 233 -197Q233 -192 256 -102T279 -9Q272 -8 265 -8Q106 14 106 139Q106 174 139 264T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 299 34 333T82 404T161 441\",120596:\"495 384Q495 406 514 424T555 443Q574 443 589 425T604 364Q604 334 592 278T555 155T483 38T377 -11Q297 -11 267 66Q266 68 260 61Q201 -11 125 -11Q15 -11 15 139Q15 230 56 325T123 434Q135 441 147 436Q160 429 160 418Q160 406 140 379T94 306T62 208Q61 202 61 187Q61 124 85 100T143 76Q201 76 245 129L253 137V156Q258 297 317 297Q348 297 348 261Q348 243 338 213T318 158L308 135Q309 133 310 129T318 115T334 97T358 83T393 76Q456 76 501 148T546 274Q546 305 533 325T508 357T495 384\",120597:\"202 508Q179 508 169 520T158 547Q158 557 164 577T185 624T230 675T301 710L333 715H345Q378 715 384 714Q447 703 489 661T549 568T566 457Q566 362 519 240T402 53Q321 -22 223 -22Q123 -22 73 56Q42 102 42 148V159Q42 276 129 370T322 465Q383 465 414 434T455 367L458 378Q478 461 478 515Q478 603 437 639T344 676Q266 676 223 612Q264 606 264 572Q264 547 246 528T202 508ZM430 306Q430 372 401 400T333 428Q270 428 222 382Q197 354 183 323T150 221Q132 149 132 116Q132 21 232 21Q244 21 250 22Q327 35 374 112Q389 137 409 196T430 306\",120598:\"227 -11Q149 -11 95 41T40 174Q40 262 87 322Q121 367 173 396T287 430Q289 431 329 431H367Q382 426 382 411Q382 385 341 385H325H312Q191 385 154 277L150 265H327Q340 256 340 246Q340 228 320 219H138V217Q128 187 128 143Q128 77 160 52T231 26Q258 26 284 36T326 57T343 68Q350 68 354 58T358 39Q358 36 357 35Q354 31 337 21T289 0T227 -11\",120599:\"537 500Q537 474 533 439T524 383L521 362Q558 355 561 351Q563 349 563 345Q563 321 552 318Q542 318 521 323L510 326Q496 261 459 187T362 51T241 -11Q100 -11 100 105Q100 139 127 242T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Q21 291 27 313T47 368T79 418Q103 442 134 442Q169 442 201 419T233 344Q232 330 206 228T180 98Q180 26 247 26Q292 26 332 90T404 260L427 349Q422 349 398 359T339 392T289 440Q265 476 265 520Q265 590 312 647T417 705Q463 705 491 670T528 592T537 500ZM464 564Q464 668 413 668Q373 668 339 622T304 522Q304 494 317 470T349 431T388 406T421 391T435 387H436L443 415Q450 443 457 485T464 564\",120600:\"228 325Q170 322 156 316T127 309Q108 309 104 314Q99 319 99 322T108 341Q125 376 171 400T268 425H271Q302 425 319 396Q328 377 328 358Q328 332 324 314Q311 270 286 221Q274 194 274 192H275Q339 234 484 325T639 421Q669 434 691 434T723 425T734 406Q734 394 719 381Q715 376 644 330L575 287L566 267Q543 233 526 176Q520 160 515 143T508 115T506 105Q506 103 533 103Q585 103 607 110T641 118Q670 118 670 107Q670 100 661 85Q643 50 598 27T504 3Q465 3 450 36Q441 51 441 73Q441 84 444 96Q452 146 484 205L497 236L324 125Q143 12 135 10Q103 -6 77 -6Q61 -6 49 2T37 21Q37 36 49 46T124 96L195 141L204 156Q219 179 243 248T264 323Q264 325 228 325\",120601:\"409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282\",120602:\"205 -174Q136 -174 102 -153T67 -76Q67 -25 91 85T127 234Q143 289 182 341Q252 427 341 441Q343 441 349 441T359 442Q432 442 471 394T510 276Q510 169 431 80T253 -10Q226 -10 204 -2T169 19T146 44T132 64L128 73Q128 72 124 53T116 5T112 -44Q112 -68 117 -78T150 -95T236 -102Q327 -102 356 -111T386 -154Q386 -166 384 -178Q381 -190 378 -192T361 -194H348Q342 -188 342 -179Q342 -169 315 -169Q294 -169 264 -171T205 -174ZM424 322Q424 359 407 382T357 405Q322 405 287 376T231 300Q221 276 204 217Q188 152 188 116Q188 68 210 47T259 26Q297 26 334 62Q367 92 389 158T418 266T424 322\",120603:\"206 -10Q158 -10 136 24T114 110Q114 233 199 349L205 358H184Q144 358 121 347Q108 340 95 330T75 312T61 295T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 532 431Q799 431 803 430Q823 423 823 402Q823 377 801 364Q790 358 766 358Q748 358 748 357Q748 355 749 348T752 327T754 297Q754 258 738 207T693 107T618 24T520 -10Q488 -10 466 2T432 36T416 77T411 120Q411 128 410 128T404 122Q373 71 323 31T206 -10ZM714 296Q714 316 707 358H251Q250 357 244 348T230 328T212 301T193 267T176 229T164 187T159 144Q159 62 222 62Q290 62 349 127T432 285Q433 286 434 288T435 291T437 293T440 294T444 294T452 294H466Q472 288 472 286Q472 285 464 244T456 170Q456 62 534 62Q604 62 659 139T714 296\",120604:\"65 0Q45 0 45 18Q48 52 61 60Q65 62 81 62Q155 62 165 74Q166 74 265 228T465 539T569 699Q576 707 583 709T611 711T637 710T649 700Q650 697 695 380L741 63L784 62H827Q839 50 839 45L835 29Q831 9 827 5T806 0Q803 0 790 0T743 1T657 2Q585 2 547 1T504 0Q481 0 481 17Q484 54 497 60Q501 62 541 62Q580 62 580 63Q580 68 573 121T564 179V181H308L271 124Q236 69 236 67T283 62H287Q316 62 316 46Q316 26 307 8Q302 3 295 0L262 1Q242 2 168 2Q119 2 93 1T65 0ZM537 372Q533 402 528 435T521 486T518 504V505Q517 505 433 375L348 244L451 243Q555 243 555 244L537 372\",120605:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 449 686H477H586Q684 686 733 677T817 634Q853 598 853 547Q853 499 826 460T761 401T695 371T654 360H653L662 358Q670 357 683 354T712 344T744 327T774 303T795 269T804 224Q804 148 732 79T533 1Q524 0 288 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624ZM703 550Q703 571 695 586T675 609T656 619T643 623L545 624H447L417 504Q386 384 386 383T470 382Q554 383 565 385Q632 397 667 447T703 550ZM651 240Q651 265 645 282T626 309T608 322T592 329Q587 330 479 331H373L340 198Q307 65 306 64Q306 62 406 62L507 63L519 65Q565 76 596 107T639 171T651 240\",120606:\"257 618H231Q198 618 198 636Q202 672 214 678L219 680H763Q769 677 772 673T776 666L777 664Q777 659 766 549T751 433Q745 424 723 424Q704 424 699 427T693 441Q693 444 695 467T697 513Q697 543 689 563T670 594T636 610T592 617T534 618H516H456L455 614Q455 613 387 339T317 64Q317 62 375 62H411Q430 62 438 59T447 44Q444 7 430 2Q426 0 416 0Q409 0 359 1T231 2Q152 2 111 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L163 66Q163 67 231 341T301 616Q301 618 257 618\",120607:\"65 0Q59 6 59 9T61 16Q64 20 334 357T608 698Q616 706 629 710Q630 710 634 710T644 710T656 711Q686 711 694 703Q698 699 700 693Q706 674 805 345T904 14Q904 7 894 1L479 0H65ZM630 342L567 551L232 134L462 133H693Q693 137 630 342\",120608:\"257 618H231Q198 618 198 636Q202 672 214 678L219 680H811Q817 677 820 673T824 666L825 664Q825 659 814 549T799 433Q793 424 771 424Q752 424 746 427T740 441Q740 445 742 466T744 505Q744 561 722 585T646 616Q639 617 545 618H456Q456 617 427 502T398 385Q398 384 435 384Q461 385 471 385T499 391T526 405T545 433T562 478Q566 494 571 497T595 501H604Q622 501 626 486Q626 482 593 349T557 213Q552 205 530 205Q499 205 499 219Q499 222 503 242T508 281Q508 308 491 314T429 322Q425 322 423 322H382L317 64Q317 62 390 62Q460 62 493 64T569 80T640 124Q665 149 686 187T719 253T733 283Q739 289 760 289Q791 289 791 274Q791 267 763 201T706 71L678 8Q676 4 667 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L163 66Q163 67 231 341T301 616Q301 618 257 618\",120609:\"223 430Q192 430 192 448Q192 450 225 561T261 677Q265 683 270 684Q273 686 534 686Q796 686 797 685Q805 682 805 673Q805 668 804 661T800 648T798 641Q796 637 531 352L266 67L329 66H364Q412 66 446 70T523 96T596 157Q617 186 630 220T649 273T663 297Q667 299 684 299H688Q715 299 715 281Q715 278 673 145T628 8Q626 4 617 0H348Q289 0 221 0T139 -1Q112 -1 99 -1T78 1T69 5T68 12Q68 16 71 31T77 49L84 57Q91 65 104 79T133 110T170 151T213 196L610 624H540Q533 624 514 624T488 624T467 623T443 620T422 616T398 609T373 600Q292 560 255 449Q251 436 246 433T223 430\",120610:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 239 686Q290 684 403 684Q475 684 512 685T553 686Q576 686 576 668Q572 632 560 626Q555 624 506 624H457L399 389Q399 388 547 388H695L753 623Q753 624 709 624H686Q665 624 660 626T650 639Q653 678 668 684Q672 686 681 686Q685 686 726 685T847 684Q902 684 937 684T986 685T1004 686Q1027 686 1027 668Q1023 632 1011 626Q1006 624 957 624H908L839 344Q768 64 768 63T812 62H839Q871 62 871 44Q867 6 854 2L850 0L808 1Q782 2 675 2Q600 2 560 1T516 0Q499 0 494 15Q498 54 511 60Q515 62 564 62H613L614 66L679 324Q679 326 531 326H383L382 322L317 64Q317 62 361 62H388Q420 62 420 44Q416 6 403 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624\",120611:\"358 -17Q218 -17 136 49T54 243Q54 298 70 356T123 474T211 582T338 663T504 702H527Q578 702 590 701Q709 688 776 622T844 441Q844 379 825 315T765 192T668 86T532 11T358 -17ZM700 474Q700 525 685 561T642 616T587 643T528 652Q390 652 301 534Q252 472 225 373T198 210Q198 160 214 125T256 71T311 44T372 36Q484 36 571 119Q639 189 669 299T700 474ZM366 428Q366 425 364 419T362 411H466L570 412L573 422Q576 437 581 441T604 445Q620 445 623 444Q636 440 636 429Q636 423 616 340T593 253Q586 243 572 243H566Q545 243 539 249Q536 251 535 253T534 258T534 263T535 270T537 277H329L326 266Q323 251 318 247T295 243Q279 243 276 244Q263 248 263 259Q263 265 283 346Q288 366 295 394Q304 431 308 438T326 445H334H338Q366 445 366 428\",120612:\"247 624Q242 624 233 624T220 623Q186 623 186 640Q186 647 190 664T202 684Q206 686 226 686Q277 684 393 684Q435 684 471 684T528 685T553 686Q573 686 573 670Q573 650 564 632Q556 624 537 624H501H449L380 344Q309 64 309 63T356 62Q361 62 370 62T384 63Q417 63 417 46Q417 26 408 8Q403 3 396 0L352 1Q325 2 216 2T82 1L45 0Q30 7 30 16Q33 51 46 60Q51 62 102 62H154L294 623Q294 624 247 624\",120613:\"536 0Q522 6 522 18Q522 35 533 57Q539 62 557 62Q595 62 601 65L472 330L365 255L342 160Q318 65 317 64Q317 62 361 62H388Q420 62 420 44Q416 6 403 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 239 686Q290 684 403 684Q475 684 512 685T553 686Q576 686 576 668Q572 632 560 626Q555 624 506 624H457L422 481Q386 339 386 337L785 621Q779 624 749 624Q726 624 726 641Q726 645 730 659Q734 675 736 679T747 686L786 685Q812 684 888 684Q908 684 934 685T968 686Q1003 686 1003 669Q1003 646 991 629Q985 624 967 624Q918 624 888 617Q884 617 874 613L865 609Q864 608 732 515T599 420Q599 418 686 242T775 65Q784 62 829 62Q847 62 850 61T860 54Q862 52 862 43Q862 10 845 1Q844 1 842 1T836 0T797 1T694 2Q599 2 573 1L536 0\",120614:\"439 0Q425 6 425 18Q425 35 436 57Q442 62 485 62Q525 62 525 64L478 483Q478 484 465 463T422 394T350 277Q222 69 222 68Q223 67 224 67Q229 64 271 62Q290 62 297 59T305 45Q305 38 302 28Q297 9 293 5T274 0Q270 0 238 1T159 2Q133 2 105 2T72 1Q56 1 52 3T44 15Q44 19 48 35Q53 55 58 58T89 62Q142 64 151 73Q154 76 345 387T538 699Q550 711 570 711H580H592Q613 711 618 695Q619 692 654 379T690 63Q690 62 726 62H746Q776 62 776 44Q773 7 759 2Q755 0 747 0Q743 0 707 1T600 2Q502 2 476 1L439 0\",120615:\"258 624H231Q214 624 208 626T199 639Q203 678 216 684Q220 686 347 686H473Q474 685 478 682T484 677Q487 673 535 413L584 153L608 187Q631 221 672 281T761 410Q935 663 943 671Q949 678 962 686H1082H1166Q1201 686 1210 683T1219 668Q1215 632 1203 626Q1199 624 1149 624H1100L1031 344Q960 64 960 63T1004 62H1031Q1063 62 1063 44Q1060 7 1046 2Q1042 0 1034 0Q1030 0 990 1T875 2Q804 2 767 1T725 0H723Q707 0 703 15Q707 54 720 60Q724 62 773 62H822Q961 618 961 619L754 318Q546 15 543 12Q531 0 510 0Q500 0 495 0T484 5T477 19Q477 20 421 315L367 604L299 335Q234 72 234 68Q234 62 302 62Q334 62 334 46Q332 8 317 2Q313 0 306 0Q301 0 267 1T181 2Q125 2 96 1T63 0Q48 0 43 15Q43 19 47 35Q52 55 57 58T94 62Q147 64 164 69L233 345Q302 619 302 622Q302 624 258 624\",120616:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 344 686H434Q464 686 477 680Q480 677 607 454Q738 227 739 227Q742 227 789 418T836 618Q836 620 835 620L821 622Q811 622 779 624Q755 624 749 625T740 632Q737 635 737 644Q737 656 742 669T754 685Q755 685 757 685T763 686Q768 686 803 685T890 684Q925 684 951 684T990 685T1006 686Q1014 686 1016 684Q1027 679 1027 668Q1023 632 1011 626Q1007 624 978 624Q912 622 907 617Q907 616 831 314T753 8Q749 0 723 0H712Q699 0 692 7Q692 8 671 44T607 155T526 296L361 580L296 323Q234 74 234 68T302 62H307Q334 62 334 44Q330 6 317 2L313 0L280 1Q260 2 181 2Q125 2 96 1T63 0Q48 0 43 15Q43 19 47 35Q52 55 57 58T94 62Q147 64 164 69L233 345Q302 619 302 622Q302 624 258 624\",120617:\"206 466Q175 466 175 484Q175 487 201 574T230 666Q235 673 241 675H547Q853 675 857 673Q867 668 867 657Q867 655 850 569T832 478Q827 466 808 466H802H795Q773 466 771 481Q771 486 775 508T779 541V549H774Q755 552 505 552Q281 551 267 548Q262 548 255 533T242 496T233 472Q228 466 206 466ZM259 255H252Q231 255 228 270Q228 275 248 355T270 439Q277 448 288 448H298Q321 448 326 440Q331 434 326 414Q326 413 486 413H647L650 424Q654 441 658 444T678 448H683H693Q702 448 705 446T714 432L694 348Q674 267 669 261Q664 255 652 255H643Q622 255 617 261Q613 265 613 272T613 283T616 289Q616 290 456 290H295L294 285Q293 280 292 275T288 265T281 257Q278 255 259 255ZM150 131Q150 124 281 123Q346 123 390 123Q640 123 664 126Q668 127 675 127Q686 131 704 198Q708 213 713 216T733 220H738Q755 220 759 218Q768 213 768 203Q768 198 741 105T710 8Q708 4 699 0H388Q77 0 73 2Q62 7 62 18Q62 27 81 115Q99 206 102 212Q106 220 120 220H129Q140 220 145 220T155 215T160 202Q160 196 159 192Q150 145 150 131\",120618:\"53 245Q53 297 70 356T125 478T216 590T349 671T523 703Q656 703 735 637T815 445Q815 378 791 307Q727 104 527 17Q437 -17 344 -17Q289 -17 242 -5T150 35T79 116T53 245ZM664 489Q664 575 618 611T511 648Q463 648 416 627T334 570Q297 531 270 472T230 355T213 261T208 206Q208 177 215 151T237 98T284 56T358 40Q440 40 510 98T618 270Q664 400 664 489\",120619:\"257 618H231Q198 618 198 636Q202 672 214 678L219 680H1011Q1022 675 1026 665Q1022 626 1009 620Q1005 618 956 618H907L906 614Q906 613 838 339T768 64Q768 62 812 62H839Q871 62 871 44Q867 6 854 2L850 0L808 1Q782 2 675 2Q600 2 560 1T516 0Q499 0 494 15Q498 54 511 60Q515 62 564 62H613L614 66Q614 67 682 341T752 616Q752 618 604 618H456L455 614Q455 613 387 339T317 64Q317 62 361 62H388Q420 62 420 44Q416 6 403 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L163 66Q163 67 231 341T301 616Q301 618 257 618\",120620:\"162 62L302 623Q302 624 258 624H234Q214 624 209 626T200 638Q200 677 217 684Q220 686 439 686Q667 685 684 682Q686 681 693 680Q713 677 733 671T782 649T829 602T847 528Q847 450 784 382T604 293Q571 288 469 287H373L346 176Q340 151 333 122T321 78L317 64Q317 62 361 62H387Q420 62 420 44Q417 10 404 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q43 0 43 17Q43 21 47 33Q52 54 57 58T89 62H113H162ZM692 558Q692 611 617 622Q610 623 529 624H452L381 343H458H492Q604 343 641 389Q662 414 677 471T692 558\",120622:\"847 430Q828 430 823 434T817 450Q817 454 817 466T818 487Q818 526 809 551T784 591T737 613T675 622T590 624H528H430L513 487Q594 351 596 345Q596 335 590 330Q583 323 418 204L250 81L363 80Q533 80 591 89T694 142Q739 185 765 252Q772 268 776 271T799 274Q816 274 820 272Q832 266 830 254Q829 250 784 130T736 7Q732 3 725 0H405Q84 0 80 2Q69 7 69 18Q69 26 75 32Q76 32 98 48T168 100T255 164L432 293Q429 300 329 465T225 637Q223 675 245 686H888Q900 680 902 671Q902 667 890 556T876 441Q871 430 847 430\",120623:\"498 62Q511 58 511 43Q511 10 494 1L490 0Q487 0 482 0T424 1T271 2Q201 2 157 2T94 1T72 0H70Q46 0 46 17Q49 54 62 60L66 62H137Q208 62 209 63L218 98Q227 134 244 203T278 339L347 613H300Q262 612 246 611T198 599T146 564Q128 545 114 512T91 454T79 425Q73 419 52 419Q22 419 22 434Q22 440 41 498T80 611L100 666Q105 673 111 675H434Q758 675 762 673Q772 668 772 657Q772 655 756 549T738 434Q735 419 711 419H707Q690 419 686 421Q677 425 677 434Q676 436 678 449T683 485T686 529Q686 553 679 569T662 594T631 607T593 612T544 613H502L433 340Q418 279 400 207T374 100L365 65L364 62H498\",120624:\"32 544Q32 586 91 644T229 703Q277 703 311 683T363 628T389 560T397 491V478L404 491Q455 589 526 646T677 703Q730 703 766 671T802 584Q802 551 793 541T766 531H757L736 532L732 535L729 539V549Q731 569 715 575T658 581H650Q545 581 477 443Q453 392 443 351Q441 345 424 273T389 133T371 64Q371 62 428 62H461Q483 62 492 59T501 44Q498 10 485 2L480 0L431 1Q401 2 278 2T127 1L85 0Q71 5 71 17Q71 24 74 33Q77 46 78 49T84 57T95 61T118 62H154H216Q232 126 249 193T273 287T287 345T296 388T299 416T300 452Q294 581 198 581Q154 581 132 575T106 562T99 546T86 533Q82 531 60 531L39 532Q32 537 32 544\",120625:\"323 624H293Q267 624 261 626T251 639Q255 678 268 684Q272 686 293 686Q348 684 475 684Q557 684 600 685T647 686H648Q671 686 671 668Q667 632 655 626Q650 624 588 624H525L500 520Q500 519 520 518T579 507T656 480Q737 440 737 372Q737 294 648 237Q562 180 426 169L412 168L399 118Q386 66 386 65L385 62H443H479Q498 62 506 59T515 44Q511 8 499 2L494 0L447 1Q417 2 298 2Q212 2 167 1T118 0Q100 0 95 15Q99 54 112 60Q116 62 179 62H241Q242 64 254 114T266 167Q266 168 262 168Q256 168 237 170T180 181T110 205T54 249T29 316Q29 391 112 446T327 516Q345 518 349 518Q351 518 353 518L355 519Q356 520 368 570T381 623Q381 624 323 624ZM342 466Q341 467 339 467Q320 467 283 455T225 420Q181 361 181 296Q181 273 193 257T222 233T254 222T277 219L280 220Q281 220 311 342T342 466ZM583 389Q583 409 576 423T557 444T533 456T509 463T492 467H486L455 343Q444 300 437 271T428 231T426 219Q430 219 445 222T483 232T521 250Q551 269 567 310T583 389\",120626:\"931 686Q953 686 953 670Q953 650 944 632Q936 624 924 624H914Q823 624 803 611Q800 609 696 503T591 396Q591 394 667 229L743 62H787H814Q846 62 846 44Q843 7 829 2Q825 0 817 0Q813 0 775 1T664 2Q590 2 551 1T508 0H507Q484 0 484 18Q484 19 488 37Q492 56 497 58T534 62L566 63Q567 64 520 169T471 274Q469 274 369 172T268 67L315 62Q320 62 328 62L335 61Q347 58 347 44Q344 10 331 2L326 0L287 1Q263 2 177 2Q95 2 78 1L53 0Q38 6 38 17Q38 40 50 57Q56 62 78 62Q169 62 188 75Q194 77 435 324L444 334L439 347Q437 351 373 492L313 624H268H246Q220 624 212 632Q210 636 210 642Q210 655 215 669T227 684Q230 686 247 686Q295 684 398 684Q438 684 472 684T527 685T551 686Q567 686 572 671Q572 667 568 651Q563 631 558 628T523 624T492 623H488L526 540Q563 457 564 457Q564 456 574 466T604 496T645 537L724 619Q716 622 677 624H673Q645 624 645 640Q645 660 654 678Q659 683 666 686L704 685Q728 684 813 684Q847 684 873 684T913 685T931 686\",120627:\"205 471Q205 445 196 403T186 333Q186 303 194 281T218 248T240 233T262 224L361 623Q361 624 303 624Q296 624 284 624T266 623Q232 623 232 641Q232 648 235 657Q240 678 244 682T268 686H273Q329 684 457 684Q502 684 540 684T599 685T626 686H628Q651 686 651 668Q649 633 631 624H505L407 227Q410 228 416 229T439 239T472 259T507 294T539 345Q549 365 563 416T597 498T649 538Q657 540 717 540Q725 540 737 540T755 541Q790 541 790 524Q790 512 784 497Q780 491 767 490T742 477Q736 471 731 463T722 449T715 433T710 419T705 403T701 389Q686 340 658 302T599 240T530 201T463 179T404 169L391 168L379 116Q365 67 365 63Q365 62 422 62H455Q477 62 486 59T495 44Q492 10 479 2L474 0L427 1Q397 2 278 2T131 1L90 0Q76 5 76 17Q76 24 79 33Q82 46 83 49T89 57T100 61T123 62H159H221Q247 162 247 168H244Q241 169 239 169Q202 176 178 182T123 207T74 252Q46 291 46 351Q46 375 52 404T59 454Q59 489 40 489Q32 489 27 494T22 507Q22 535 37 538Q40 540 99 540H128Q168 540 186 528T205 471\",120628:\"162 119Q181 115 235 115L273 116Q273 133 231 222T180 345Q173 368 173 391V406V414Q173 477 214 540Q255 600 315 635Q353 661 423 682T585 703Q656 703 711 690T799 656T851 608T879 555T886 503Q886 449 860 401Q840 359 810 322T725 230T643 146Q619 117 619 116T650 115Q707 115 722 120Q730 123 750 165T775 210Q779 212 796 212Q828 212 828 196Q828 191 807 144T764 52L743 7Q740 4 740 4T733 2T717 0T686 0H632H573Q535 0 526 3T517 17Q517 44 544 103T617 243T671 341Q729 454 729 535Q729 599 686 625T583 652Q549 652 517 645T450 616T388 561T344 470T327 340Q327 304 331 237T336 135Q336 93 330 50T313 2Q308 0 208 0H142Q107 0 100 4T93 25Q93 28 93 41T95 77T96 118L100 199Q105 208 109 210T131 212Q147 212 151 210T161 199V160Q161 131 162 125V119\",120630:\"39 166Q39 213 59 261T117 353T219 424T362 452Q420 452 466 433T536 384T573 325T586 269V265Q593 272 609 308T636 381Q640 397 644 399T669 402H680Q700 402 700 388Q700 379 691 351T659 276T604 188L593 173L595 153Q600 79 612 43H618Q634 45 642 51T653 64T658 71Q661 73 684 73Q712 73 712 59Q712 39 685 16T603 -7Q588 -7 575 -5T551 2T532 12T516 24T503 37T494 49T487 60T481 69L469 61Q362 -8 251 -8Q159 -8 99 36T39 166ZM260 43Q310 43 361 63T438 101T465 124Q458 240 453 277Q435 401 354 401Q291 401 245 355Q230 337 217 313Q201 279 186 216T170 126Q170 72 208 54Q230 43 260 43\",120631:\"59 -194H49Q31 -194 28 -182Q28 -178 107 139T192 473Q212 533 248 580T324 652T395 689T450 701H461Q514 701 551 688T605 652T630 607T637 561Q637 546 634 526T611 465T556 393Q572 382 590 347T608 262Q608 146 522 69T299 -8Q279 -8 261 -6T228 2T204 13T183 26T169 37T157 48L150 56L120 -64Q113 -90 104 -128Q93 -175 89 -184T73 -194H59ZM531 592Q531 651 463 651Q399 651 341 600T253 466Q250 458 217 327T182 185Q180 176 180 159Q180 108 212 76T301 44Q330 44 354 51T393 65T423 91T444 118T459 151T468 179T475 206Q490 264 491 296Q491 313 489 326T484 345L482 350Q481 350 477 348T464 344T444 340T413 335T372 333T334 334T301 340T274 355T265 380Q265 444 397 444Q425 444 445 441T476 436L485 433Q489 433 499 458Q509 482 520 527T531 592ZM424 390Q424 393 389 393Q383 393 374 393T362 392Q348 392 333 388Q345 384 379 384Q424 384 424 390\",120632:\"5 269Q5 285 19 312T57 368T124 421T215 451H241Q274 451 303 439T353 406T389 361T416 311T432 266T442 232L444 220L446 216L450 226Q473 278 513 357T561 441Q566 444 584 444H594Q617 444 617 430Q617 426 596 389T536 273T462 110L452 84L451 70Q447 12 427 -76T388 -192Q375 -211 355 -211Q339 -211 332 -198T325 -171Q325 -114 386 64L393 84V98Q393 181 371 241Q360 280 319 303T210 327Q158 327 126 317T84 296T68 272T59 258Q55 256 36 256Q23 256 18 256T9 260T5 269\",120633:\"216 610Q216 640 229 664T262 700T299 719T327 725Q330 725 406 709T487 690Q513 681 513 651Q513 627 494 607T450 587Q417 587 378 631Q346 663 314 663Q286 663 272 639Q271 637 271 634Q271 609 344 536L397 484Q438 448 458 410T478 313Q478 234 443 147T338 18Q298 -8 249 -8Q214 -8 180 0T113 26T60 81T39 168Q39 200 50 237T87 316T160 391T272 442L260 465Q216 553 216 610ZM348 235Q348 274 336 313T310 372L298 392Q295 391 290 390T269 380T241 359T212 323T185 267Q157 168 157 130Q157 83 186 63T255 43Q280 43 300 67Q317 89 332 138T348 235\",120634:\"224 -17Q126 -17 81 22T36 112Q36 178 84 226L93 236L88 246Q79 264 79 289Q79 341 124 388Q201 461 333 461Q402 461 455 425Q480 409 481 390Q481 365 464 350T428 334Q415 334 387 352T313 370Q141 370 141 293Q141 275 146 270Q147 270 148 270T155 272Q202 291 263 291H270Q349 291 349 244Q349 195 281 183Q274 182 239 182Q201 182 184 185T137 200Q123 188 112 168T100 129T112 98T148 81T189 75T237 74H243H251Q288 74 310 75T359 86T398 112Q405 124 417 124Q426 124 432 117T439 100Q439 88 427 70T390 32T322 -3T224 -17ZM286 238Q286 240 253 240Q245 240 234 239T216 237T209 235Q209 232 250 232Q286 232 286 238\",120635:\"361 711Q373 711 381 703T389 683Q389 681 388 676T383 656T376 618V612H379Q385 618 429 618Q521 618 521 572Q521 551 506 534Q483 510 415 507Q385 507 371 511T336 536L326 528Q254 472 204 381T154 209Q154 190 157 177Q159 165 162 154T170 135T182 119T195 106T212 95T229 86T249 78T269 72T290 66T311 60Q385 37 388 36Q437 14 454 -36Q456 -46 456 -64Q456 -83 455 -90Q445 -132 413 -167T333 -202Q300 -202 257 -191T206 -169Q203 -164 203 -158Q203 -148 210 -140T231 -130Q239 -130 263 -139T326 -151H329Q337 -151 342 -150T352 -143T357 -123Q356 -117 355 -113T350 -104T344 -96T335 -90T324 -85T310 -80T294 -74T275 -68T254 -62Q253 -62 231 -56T205 -48T179 -39T150 -26T125 -10T100 11T80 37T62 70T53 109T48 157Q48 281 123 396T317 586V612Q319 638 320 649T325 678T338 703T361 711ZM454 564Q445 567 424 567Q407 567 398 565T387 563Q387 558 411 558Q434 558 450 562L454 564\",120636:\"24 296Q25 302 27 312T41 350T65 397T103 435T157 452Q202 452 233 435Q267 419 284 384L294 392Q304 401 316 410T348 429T388 445Q410 451 445 451H453Q468 451 482 450T519 443T558 425T587 391T600 337V327Q600 311 538 64Q484 -158 478 -168Q457 -211 409 -211Q386 -211 372 -197T357 -161Q357 -158 415 80Q476 330 477 348Q477 366 473 377T461 393T448 399T432 400H427Q379 400 335 363Q300 332 280 298Q277 293 246 170T213 40Q205 22 186 7T142 -8T103 7T89 39Q89 49 106 117T142 260T164 351Q166 363 166 372Q166 402 148 402Q126 402 110 369Q100 350 90 310Q85 289 82 286T60 282H55H44Q24 282 24 296\",120637:\"213 -8Q130 -8 85 50T40 200V207Q40 303 83 428Q122 535 189 608Q279 702 381 702Q410 702 437 693T492 661T537 593T554 486Q554 428 539 362T495 230T425 111T330 25T213 -8ZM433 562Q433 600 419 625T377 651Q363 651 348 644T311 619T268 557T229 453Q225 441 217 411T208 378H401Q433 500 433 562ZM161 140Q161 43 217 43Q249 43 280 74Q310 103 332 150T378 287Q385 313 385 315Q385 316 289 316H192Q191 308 183 275T169 205T161 140\",120638:\"161 -8Q111 -8 75 16T38 85Q38 95 48 121T80 214T123 368L124 374Q126 381 127 386T132 399T139 414T149 428T162 440T180 448T203 452Q226 452 241 439T257 404Q257 386 230 290T171 111Q157 73 157 57Q157 43 166 43Q209 43 258 69T322 144Q326 157 330 159T348 162H355H366Q386 162 386 148Q386 143 383 132T367 100T335 61Q301 27 253 10T161 -8\",120639:\"258 405Q258 394 251 364T237 308T230 281T238 284T270 306T330 349Q365 377 389 394T450 427T519 444Q545 444 559 430T574 391Q574 360 551 336T491 312Q469 312 454 326T439 364Q439 372 438 372Q433 372 395 344T320 289T283 260H285Q287 260 290 260T297 259Q495 248 495 146Q495 132 491 110T486 74Q486 43 505 43Q520 43 531 53Q559 72 578 141Q582 157 586 159T611 162H622Q642 162 642 148T627 100T578 29T504 -7H495Q435 -7 399 22T363 96Q363 111 366 122T369 142Q369 155 364 165T347 182T326 193T298 200T269 204T238 207T212 210L211 206L190 123L169 40Q161 22 142 7T98 -8T59 7T45 39Q45 48 67 139T112 317L134 404Q142 424 161 438T204 452Q226 452 242 440T258 405\",120640:\"95 -13Q70 -13 55 4T40 41Q40 65 61 88Q65 92 210 207T357 322L235 602Q217 640 185 643Q182 643 178 644T173 645Q161 651 161 666Q161 677 167 684T181 692Q189 694 212 694Q335 694 358 660Q362 653 500 340T647 18Q652 10 652 6Q652 -8 622 -8H589H538L526 -5Q506 1 500 8Q494 16 444 128Q442 133 440 138L387 259L265 134Q156 20 137 4T95 -13\",120641:\"294 -8Q265 -8 244 -5T213 1T201 4Q200 4 192 -32T172 -111T155 -168Q134 -211 86 -211Q62 -211 48 -196T34 -158Q37 -144 103 123T174 404Q182 424 201 438T244 452Q271 452 284 436T298 404Q298 392 267 269T235 114Q235 43 305 43Q342 43 375 68T418 110Q420 112 455 253T492 397Q514 444 562 444Q587 444 601 429T615 397Q615 387 599 320T563 178T542 93Q540 81 540 72Q540 42 558 42Q580 42 596 75Q606 94 616 134Q621 155 624 158T646 162H651H662Q682 162 682 148Q681 142 679 132T665 94T641 47T602 9T548 -8Q523 -8 502 -3T468 11T446 27T432 40L429 46Q367 -8 294 -8\",120642:\"88 382Q70 382 65 385T59 402T64 427T78 443Q79 444 157 448T247 452Q256 452 261 448T266 440L267 437Q267 432 223 252L177 71L192 77Q293 117 371 199T480 388Q489 424 511 438T556 452Q579 452 593 438T608 402Q608 378 593 340T540 251T446 152T299 62T96 -1Q91 -2 78 -2Q38 -2 38 15Q38 22 82 198L127 379Q124 382 88 382\",120643:\"287 648Q291 671 293 680T305 700T329 711Q339 711 347 705T356 687Q356 680 351 653T345 619Q345 615 346 615Q358 618 398 618Q490 618 490 572Q490 553 476 536T434 512Q411 508 378 508H366Q332 508 306 534L298 525Q271 496 254 456T237 375Q237 336 244 336Q272 346 319 346H325Q354 346 372 344T406 331T422 300Q422 252 350 238Q332 236 303 236Q286 236 269 238T240 242T218 247T202 252L196 254Q191 254 174 237T141 191T124 139Q124 108 151 92T267 46Q285 40 295 37Q308 33 332 25T366 13T392 3T415 -8T432 -20T445 -36T451 -55T454 -80Q454 -118 427 -153T358 -199Q349 -201 327 -201Q313 -201 298 -200T271 -196T246 -191T226 -185T210 -180T200 -176L196 -174Q187 -170 187 -158T196 -138T216 -130Q217 -130 254 -140T329 -151Q349 -151 349 -135Q349 -127 340 -122T293 -104Q260 -93 238 -85Q130 -48 115 -41Q71 -19 47 15T23 88Q23 126 48 179T130 277L144 288L136 297Q99 336 99 390Q99 456 148 514T285 602V619Q285 624 286 635T287 648ZM355 563Q362 560 376 558Q424 558 423 564Q405 567 390 567Q369 567 355 563ZM279 292Q297 287 315 287Q355 287 355 293Q355 296 321 296Q316 296 308 296L301 295Q295 295 289 294L279 292\",120644:\"254 -8Q191 -8 146 9T80 54T49 111T39 169Q39 206 53 247T96 329T176 402T292 446Q317 451 336 451L344 452Q353 452 359 452Q457 452 516 408T576 279Q576 169 488 81T254 -8ZM349 400Q321 400 287 385T231 338Q206 301 188 228T170 126Q170 99 178 83Q198 44 260 44Q367 44 409 157Q419 185 432 238T445 317Q445 336 443 348Q435 372 416 384T384 398T349 400\",120645:\"55 289H43Q23 289 23 303Q23 308 33 322Q116 434 199 443Q200 444 418 444Q591 444 617 444T652 439Q674 426 674 400Q674 378 661 360T625 335Q621 334 549 333H479L477 321Q476 312 476 279Q476 219 491 174T521 104T536 65Q536 38 511 15T457 -8Q403 -8 386 94Q384 110 384 139Q384 181 391 229T406 304L413 331Q413 333 365 333H316L315 329Q315 328 312 314T301 272T288 220Q274 167 258 103Q244 49 240 38T228 18Q225 16 224 14Q200 -8 172 -8Q146 -8 132 7T118 44Q118 54 121 61Q122 65 142 102T190 195T235 293Q250 329 250 333Q177 333 166 332Q115 328 88 301L77 290L55 289\",120646:\"307 -8Q277 -8 251 0T215 14L205 20Q203 18 193 -25T171 -114T155 -168Q134 -211 87 -211Q64 -211 49 -198T34 -162Q34 -158 137 254Q153 299 179 334T232 390T277 419T311 434Q357 451 403 451Q435 451 455 449T506 435T560 400Q603 357 603 285Q603 172 520 82T307 -8ZM474 343Q474 364 458 382T409 400H406Q339 400 299 341Q281 313 264 257Q261 248 242 170T222 89Q222 84 230 74T260 54T308 43Q334 43 365 57T417 110Q437 145 456 228Q474 298 474 332V343\",120647:\"33 209Q33 277 80 334T195 421T330 451H344Q410 451 439 429Q457 417 457 402Q457 386 445 375T420 363Q415 363 406 368T383 383T354 398Q347 400 330 400Q256 400 196 361T135 265V257Q135 242 147 225T174 199L358 107Q400 77 400 28T362 -63T271 -105Q254 -105 229 -99T195 -86Q188 -82 188 -71Q188 -56 197 -50T216 -44Q225 -44 237 -48T270 -53H282Q293 -44 293 -31Q293 -19 283 -10Q278 -4 200 33T115 76Q77 98 55 133T33 209\",120648:\"35 151Q35 190 51 236T99 327T184 404T306 443Q307 443 316 443T342 443T378 444T425 444T476 444Q606 444 626 444T655 439Q677 426 677 400Q677 358 639 340Q625 333 563 333Q510 333 510 331Q518 319 518 272Q518 155 437 74T226 -8Q123 -8 79 41T35 151ZM396 278Q396 314 375 323T305 332Q249 332 222 310T180 243Q171 219 162 178T153 116V110Q153 43 234 43Q347 43 382 199Q383 203 383 204Q396 255 396 278\",120649:\"55 289H43Q23 289 23 303Q23 308 33 322Q116 434 199 443Q200 444 386 444Q571 444 577 442Q588 441 599 432T610 402Q610 359 572 340Q561 335 547 334T452 333H353V331Q352 330 342 261T320 119T306 40Q300 18 281 3Q257 -13 233 -13Q210 -13 196 0T181 35Q181 44 182 48Q183 53 229 187T279 331Q279 333 228 333H209Q163 333 136 328T88 301L77 290L55 289\",120650:\"189 388Q189 396 187 398T176 401Q144 399 122 369T89 304Q84 288 81 285T61 282H55H44Q24 282 24 296Q24 306 34 330T64 382T116 431T188 452Q232 452 270 430T308 361Q308 345 275 258T241 123Q241 44 336 44H344Q380 44 415 73T474 140T511 214T526 267Q526 280 513 292Q505 301 486 311T456 333T444 367Q444 400 471 426T529 453Q555 453 579 431T604 358Q604 327 592 271T557 172Q550 157 541 142T510 97T464 47T404 9T328 -8Q264 -8 219 5T154 41T125 85T117 131Q117 182 153 277T189 388\",120651:\"238 4Q230 5 218 8T174 26T118 58T73 112T53 190Q53 219 60 246Q77 313 103 362T143 426T163 443Q165 444 186 444Q217 444 217 432Q217 425 188 392Q157 351 137 291T116 206Q116 127 263 109L276 107L288 139Q347 304 414 378T566 452Q621 449 662 412T703 286Q698 167 598 82T357 -8H332V-11Q332 -12 327 -46T317 -116T310 -157Q306 -180 286 -198T234 -216Q211 -216 197 -203T183 -168Q183 -160 184 -155Q184 -152 198 -112T225 -34T238 4ZM637 260Q637 303 607 322T541 341Q502 341 466 319T405 264Q368 218 356 159Q348 111 348 104Q348 103 361 103Q502 103 569 152T637 260\",120652:\"58 -194Q32 -194 32 -164Q32 -153 46 -139L175 -13Q296 104 296 106Q271 232 226 308Q165 401 141 401Q128 401 117 390T100 365Q94 350 91 349T69 346H45Q35 348 35 359Q35 380 62 411T133 450Q143 452 165 452Q286 452 329 402Q347 379 366 333T394 254T404 215Q404 213 405 213Q405 212 420 227T463 268T520 324Q637 437 640 438Q647 444 661 444Q667 444 676 438T685 419Q685 405 670 389T549 271L420 145Q433 85 444 53Q466 -25 509 -88T575 -151Q590 -151 600 -140T617 -114T626 -98Q629 -96 650 -96H655Q681 -96 681 -108Q681 -114 679 -119Q670 -148 646 -169T591 -199Q581 -201 550 -201Q422 -201 381 -143Q345 -88 316 20L311 39L230 -40Q144 -126 114 -153Q85 -182 77 -188T58 -194\",120653:\"244 141Q244 117 254 98T277 70T305 55T329 48T342 47L344 48L424 366Q501 678 505 686Q508 691 512 692T533 694T555 693T562 688T565 683Q565 678 486 362T406 45Q406 43 415 43Q467 49 514 78T590 143T636 213T653 266Q653 282 641 293T613 311T585 332T572 367Q572 397 598 425T657 453Q684 453 708 430T732 358Q732 330 723 287T706 225Q671 124 578 58T401 -8H393L370 -101Q346 -196 345 -197Q340 -202 316 -202H306Q286 -202 286 -188Q286 -187 296 -144T318 -57T331 -8Q331 -6 328 -6Q290 -6 233 11T148 62Q119 97 119 146Q119 181 154 275T190 388Q190 401 181 401Q154 401 129 375T90 306Q85 288 81 285T61 282H55H44Q24 282 24 296Q24 306 34 329T64 381T116 431T189 452Q237 452 273 428T309 362Q309 343 277 260T244 141\",120654:\"532 367Q532 399 559 426T618 453Q645 453 668 430T691 357Q691 319 677 261T649 171Q640 149 626 125T586 68T521 14T438 -7Q401 -7 372 7T333 30T311 57Q246 -8 165 -8Q119 -8 82 19T30 102Q24 126 24 163V178Q24 210 37 255Q61 346 118 424Q141 451 161 451Q174 451 184 443T194 419Q194 402 179 387Q91 273 91 206Q91 159 122 138T189 117T281 145V173Q283 223 294 253Q304 276 323 289T364 303Q386 303 400 287T415 250Q415 219 385 157L378 144Q378 142 388 136T419 124T462 117Q522 117 566 165T610 255Q610 288 561 320Q532 337 532 367\",120655:\"230 475Q202 475 189 492T175 526T186 570T221 631T288 687T389 710Q430 710 438 709Q495 701 537 679T601 629T637 568T653 509T657 459Q657 409 640 341Q617 248 581 180T507 75T424 16T348 -11T282 -17Q171 -17 113 37Q60 88 60 159Q60 192 71 231Q96 336 184 402Q264 462 366 462Q407 462 439 448T497 389L502 380Q503 381 508 403T519 463T525 531Q523 580 499 610T447 648T387 657Q324 657 283 616Q271 604 276 604Q279 604 286 600T302 583T311 555Q311 523 287 499T230 475ZM196 110Q196 41 287 41Q351 41 398 88Q422 111 437 151Q473 243 473 298Q473 386 409 409Q408 409 383 411Q316 411 278 373Q265 360 259 351T241 311T217 226Q196 143 196 110\",120656:\"415 89Q423 89 429 74T436 46Q436 43 434 39Q432 36 420 29T380 11T322 -5Q311 -7 281 -7Q216 -7 168 10T94 54T56 110T44 167V181Q44 262 94 329Q104 343 119 357T162 391T234 425T327 443Q328 443 348 443T383 444Q434 444 442 438Q450 430 450 416Q446 392 424 383L376 382Q306 381 278 369Q230 349 208 294Q199 274 199 268Q199 267 291 267Q305 267 325 267T353 268Q383 268 394 263T406 241Q406 214 380 206Q375 205 279 205T183 203Q174 176 174 140Q174 87 208 65T292 43Q295 43 300 43T307 44Q337 49 372 69T415 89\",120657:\"114 132Q114 153 140 253T166 372Q166 402 148 402Q126 402 110 369Q100 350 90 310Q85 289 82 286T60 282H55H44Q24 282 24 296Q25 302 27 312T41 350T65 397T104 435T158 452Q184 452 211 445T263 414T288 354V339L265 245Q237 134 237 118V107V102Q237 87 239 77T257 56T300 43Q395 43 455 254Q479 346 479 347L460 354Q294 408 294 528Q294 606 350 653T464 701Q536 701 579 659Q634 601 634 491Q634 468 630 438T623 388L620 370Q624 370 631 369T647 364T656 352Q656 347 653 335Q647 317 642 316Q640 315 637 315Q635 315 619 317Q606 319 605 316Q605 315 603 308Q587 248 550 177T457 57Q379 -8 293 -8Q192 -8 153 23T114 116V132ZM519 566Q519 600 507 625T464 651Q425 651 391 617T356 529Q356 501 370 478T404 441T443 417T477 404L491 400Q493 400 499 428T512 497T519 566\",120658:\"228 325Q170 322 156 316T127 309Q108 309 104 314Q99 319 99 322T108 341Q125 376 171 400T268 425H271Q302 425 319 396Q328 377 328 358Q328 332 324 314Q311 270 286 221Q274 194 274 192H275Q339 234 484 325T639 421Q669 434 691 434T723 425T734 406Q734 394 719 381Q715 376 644 330L575 287L566 267Q543 233 526 176Q520 160 515 143T508 115T506 105Q506 103 533 103Q585 103 607 110T641 118Q670 118 670 107Q670 100 661 85Q643 50 598 27T504 3Q465 3 450 36Q441 51 441 73Q441 84 444 96Q452 146 484 205L497 236L324 125Q143 12 135 10Q103 -6 77 -6Q61 -6 49 2T37 21Q37 36 49 46T124 96L195 141L204 156Q219 179 243 248T264 323Q264 325 228 325\",120659:\"274 -7Q232 -4 195 7T125 38T71 94T51 176V190Q51 213 60 242T95 307T156 373T255 425T393 451L397 452L427 568Q434 597 443 636Q452 677 456 685T472 694H486H495Q517 694 517 680L514 665Q510 650 503 621T489 564L460 451H469Q527 447 574 430T657 370T693 266Q693 163 599 82T350 -7H346L322 -100Q301 -190 295 -197Q291 -202 283 -202H269H258Q238 -202 238 -188Q238 -186 260 -96L283 -7H274ZM449 400Q448 400 404 225T359 47T366 45Q464 55 516 119Q542 149 558 199T575 295Q575 387 462 398L449 400ZM384 398Q384 399 381 399Q350 399 298 378T214 308Q168 236 168 149Q168 68 259 49Q282 44 294 44H295L384 398\",120660:\"371 -168Q357 -168 323 -171T245 -175Q143 -175 109 -150T75 -66Q75 -5 100 108T137 254Q153 299 179 334T232 390T277 419T311 434Q357 451 403 451Q435 451 455 449T506 435T560 400Q603 357 603 282Q603 213 569 148T465 38T304 -8Q273 -8 247 -2T204 14T176 31T159 46T152 53Q152 52 148 27T144 -16Q144 -36 150 -44T189 -58T293 -64Q405 -65 432 -75Q466 -88 466 -127Q466 -140 459 -172Q455 -188 451 -191T426 -194H420Q405 -194 400 -191T395 -176Q396 -170 394 -169T378 -168Q373 -168 371 -168ZM236 116Q236 77 258 60T311 43Q369 43 407 94Q429 123 451 206T474 331Q474 400 409 400H406Q339 400 299 341Q276 305 256 227T236 116\",120661:\"55 289H43Q23 289 23 303Q23 308 33 322Q116 434 199 443Q200 444 562 444Q922 444 928 442Q961 434 961 400Q961 376 944 355T886 333H870Q872 322 872 295V279Q872 230 842 165T751 46T618 -8Q581 -8 554 6T513 45T494 84T484 119Q484 121 478 114Q477 113 476 111Q384 -7 268 -7H265Q251 -7 237 -4T199 11T162 54T147 132Q147 149 149 166T155 198T165 229T176 256T189 281T200 301T211 319T220 333H199Q120 333 88 301L77 290L55 289ZM639 103Q674 103 712 122T780 188T811 295Q811 318 808 330V333H289Q274 318 244 263T214 169Q214 133 236 118T288 103Q351 103 412 153T494 278Q497 290 502 292T529 295Q546 295 551 293T556 283Q556 281 553 260T550 218Q550 153 576 128T639 103\",120662:\"110 0H86Q42 0 42 27Q42 37 148 350T258 667Q269 687 291 692Q295 694 366 694H399Q432 694 448 689T474 667Q477 663 583 350T690 27Q690 0 642 0H617H592Q582 0 575 1T561 2T549 6T541 11T533 18T527 26T522 37T517 49T512 64T506 81L490 130H225Q225 128 208 79T189 27Q185 19 180 14T170 7T156 3T143 1T127 0T110 0ZM439 279Q359 524 359 547L357 555L355 543Q347 503 270 263L259 231H357Q455 231 455 232L439 279\",120663:\"119 1Q98 5 92 28V667Q98 686 118 693Q121 694 272 694H289H346Q439 694 500 681T600 625Q640 580 640 513Q640 451 601 414T504 364L518 361Q568 351 602 329T649 280T666 235T671 197Q671 172 665 147T642 91T586 37T488 5Q456 1 282 1H119ZM489 509Q489 532 479 548T450 573T421 585T394 591Q387 592 315 593H247V404H298H325Q432 404 466 444Q489 470 489 509ZM517 194Q517 235 502 261T458 299T407 313T353 317H329H322H247V101H319H357Q387 101 407 103T452 111T492 133T514 171Q516 176 517 194\",120664:\"92 664Q98 683 118 690Q121 691 312 691T508 689Q534 682 534 644V632V618Q534 582 508 573L502 572Q496 572 489 572Q486 572 463 572T416 573Q333 573 291 575H253V303Q253 31 251 25Q242 0 199 0H170L119 1Q99 7 92 28V664\",120665:\"381 692Q386 694 458 694Q516 694 527 693T549 687Q564 680 575 663Q576 658 715 349T856 27Q856 6 838 1H826Q815 1 795 1T747 1T686 1T616 0T539 0T458 0T378 0T300 0T230 0T169 1T122 1T90 1H78Q60 6 60 27Q62 38 201 349T341 663Q356 687 381 692ZM627 148Q626 149 581 250T492 453L447 554Q447 553 446 552Q444 546 326 278L268 148Q268 147 448 147Q627 147 627 148\",120666:\"277 122Q280 122 380 123T544 125Q552 125 557 125T565 124T569 124Q595 115 595 75V62V47Q595 9 569 2Q564 0 341 0L119 1Q99 7 92 28V664Q98 683 118 690Q121 691 335 691T554 689Q580 682 580 644V632V618Q580 582 554 573Q553 573 551 573T542 572T527 572Q464 572 364 573T260 575H253V412H385H459Q524 412 536 404T549 357Q549 341 549 334T542 318T523 305Q518 303 385 303H253V122H277\",120667:\"411 584Q243 581 131 581Q122 581 116 581T106 582T102 582Q84 589 80 600T76 640L77 667Q83 686 103 693Q106 694 343 694Q579 694 584 692Q592 691 599 684T609 668Q610 665 610 646Q610 614 608 608Q605 603 434 361L261 116Q340 117 402 118T490 119T533 120T560 120H572Q605 120 614 95Q616 89 616 60V46Q616 9 590 2Q585 0 339 0Q92 0 87 2Q79 3 72 10T62 26Q61 29 61 49Q61 84 63 90Q65 94 152 217T325 461T411 584\",120668:\"92 667Q101 694 143 694H172H198Q244 694 251 669Q253 663 253 539V415H540V539Q540 558 540 585T539 621Q539 673 550 683T611 694H621H646Q671 694 683 690T700 669Q702 663 702 347T700 25Q696 9 684 5T646 0H621H606Q560 0 550 11T539 76Q539 85 539 116T540 169V306H253V169Q253 147 253 116T254 75Q254 23 245 12T194 0H170L119 1Q99 7 92 28V667\",120669:\"62 340Q62 716 425 716Q511 716 576 696T681 642T747 559T783 458T793 341Q793 264 777 203T721 89T608 7T428 -22Q62 -22 62 340ZM638 333Q638 365 637 387T632 441T621 495T600 542T567 583T518 611T451 628Q443 629 427 629Q402 629 378 624T327 608T276 571T240 511Q217 453 217 345Q217 254 231 204T279 120Q333 69 428 69Q522 69 576 120Q638 183 638 333ZM279 349V373Q279 413 305 420Q309 422 427 422H487Q550 422 563 414T576 369V349Q576 345 576 337T577 324Q577 284 550 277Q545 275 428 275H369Q306 275 293 283T279 329V349\",120670:\"85 667Q94 694 136 694H165H191Q237 694 244 669Q246 663 246 347T244 25Q235 0 192 0H163L112 1Q92 7 85 28V667\",120671:\"92 667Q101 694 139 694H163H186Q225 694 234 671Q236 663 236 529L237 392L533 682Q550 694 590 694H623H681Q695 680 695 672Q695 670 693 664Q688 657 561 533L431 405L698 33Q701 28 701 23Q701 7 683 0H626H604Q571 0 564 2T545 13Q544 14 530 33T489 90T437 162L332 307Q331 307 284 260L236 214V122V65Q236 32 231 19T210 2Q205 0 161 0L119 1Q99 7 92 28V667\",120672:\"106 0H83Q41 0 41 28Q41 39 133 349T229 667Q242 694 296 694H335H375Q403 694 418 689T442 667Q445 660 537 350T630 28Q630 11 619 6T584 0H555H526Q478 0 465 27Q462 32 431 136T366 372T325 555V546Q320 503 287 376T222 141T186 27Q184 22 177 15T165 6Q154 0 106 0\",120673:\"92 667Q98 684 109 689T146 695Q152 695 167 695T192 694Q200 694 214 694T234 695Q291 695 305 664Q313 651 400 419T487 165Q487 162 488 162T489 165Q489 187 574 413T671 664Q679 680 695 688Q708 694 785 694H828Q855 694 867 689T884 669Q886 663 886 347T884 25Q876 0 832 0H817H802Q758 0 750 25Q748 31 748 293V555L746 544Q737 509 692 386T606 160T564 52Q548 22 502 22H487H472Q423 22 410 52Q407 59 367 160T283 385T231 546L230 548Q229 548 229 293Q229 31 227 25Q222 9 211 5T176 0H158L119 1Q99 7 92 28V667\",120674:\"92 667Q98 684 109 689T146 694H185Q273 694 279 692Q301 689 315 669Q322 660 419 453L554 163L562 143Q564 143 564 401Q564 663 566 669Q574 694 618 694H633H648Q692 694 700 669Q702 663 702 347T700 25Q696 10 683 5T642 0H596H551Q520 0 505 4T478 25Q471 34 374 241L239 532Q231 550 231 552L229 479Q229 440 229 293Q229 31 227 25Q222 9 211 5T176 0H158L119 1Q99 7 92 28V667\",120675:\"627 553Q609 553 512 554T366 555Q316 555 220 554T105 553Q96 553 90 553T82 554T78 554Q61 560 57 571T52 605V623L53 661Q59 680 79 687Q82 688 366 688Q649 688 654 686Q680 679 680 639V621V603Q680 563 654 554Q653 554 651 554T642 554T627 553ZM149 423Q152 424 366 424Q579 424 584 422Q610 415 610 376V358V340Q610 300 584 293Q579 291 366 291H232Q162 291 150 293T129 306Q122 315 122 360L123 397Q129 416 149 423ZM108 135Q143 135 226 134T363 133Q407 133 507 134T632 135H645Q675 135 684 110Q686 104 686 68V49Q686 9 660 2Q655 0 364 0L74 1Q57 7 49 21L47 28L46 65V83Q46 126 72 133Q80 135 108 135\",120676:\"362 715Q364 715 376 715T394 716H400Q542 716 626 643T727 426Q731 395 731 342Q731 271 722 225Q674 -22 396 -22Q320 -22 259 -3T148 68T77 201Q62 257 62 342Q62 447 86 522T173 649Q245 707 362 715ZM568 433Q551 623 396 623Q383 623 370 622T333 612T292 591T257 550T233 485Q223 442 223 350Q223 276 232 227T267 137Q309 74 397 74Q433 74 461 85T507 113T537 156T556 205T566 260T569 310T570 357Q570 409 568 433\",120677:\"92 664Q98 683 118 690Q121 691 396 691T676 689Q695 684 700 666Q702 660 702 345Q702 31 700 25Q696 9 684 5T646 0H621H596Q571 0 559 4T542 25Q540 31 540 307V582H253V307Q253 31 251 25Q242 0 199 0H170L119 1Q99 7 92 28V664\",120678:\"641 470Q641 426 630 391T603 334T561 295T513 271T459 259T408 254T361 253H350H337H253V142Q253 125 253 100T254 67Q254 32 249 19T227 2Q222 0 170 0L119 1Q99 7 92 28V667Q98 686 118 693Q121 694 271 694Q428 693 462 688Q641 656 641 470ZM487 467Q487 495 485 510T474 546T442 578T382 592Q375 593 310 593H250V347H309H339Q364 347 380 348T418 354T451 368T474 395T486 438Q487 444 487 467\",120680:\"322 124Q326 124 457 125T672 127H689Q721 127 730 102Q732 96 732 64V48Q732 9 706 2Q701 0 394 0L89 1Q76 5 69 13T62 29V36Q62 37 62 38Q62 47 70 58T126 126Q161 167 185 196Q302 335 302 336L187 463Q74 584 68 594Q61 603 61 639L62 667Q68 686 88 693Q91 694 396 694T706 692Q732 686 732 647V635V621Q732 585 706 576Q705 576 702 576T691 576T670 575L302 578Q302 577 394 475T490 371Q498 362 498 347Q498 336 488 323T408 226L322 124\",120681:\"67 687Q70 688 366 688Q661 688 666 686Q692 680 692 641V629V615Q692 579 666 570H660Q655 569 648 569Q645 569 624 569T581 570Q505 570 475 572H447V302Q447 31 445 25Q436 0 393 0H364L313 1Q293 7 286 28L285 300V572H257Q227 570 151 570Q130 570 109 570T84 569Q77 569 72 570H66Q48 577 44 588T40 631L41 661Q47 680 67 687\",120682:\"62 560Q62 607 94 644T169 698T253 715Q273 715 286 713T322 704T363 677T398 625Q413 597 423 556L428 540Q429 541 436 566T454 620T494 677T561 713Q570 715 593 715Q682 715 737 668T793 560Q793 549 793 545T786 533T767 520H670Q646 532 644 551T632 579Q618 594 591 594Q539 594 524 530T509 321V216Q509 31 507 25Q498 0 455 0H426L375 1Q355 7 348 28L347 232Q346 344 346 441Q346 442 343 468T335 521T312 571T266 594Q252 594 247 593Q228 586 220 576T212 557T209 539T191 523L185 520H88Q75 527 69 534T63 545T62 560\",120683:\"62 292T62 347T80 445T124 511T183 552T243 574T292 584L315 587H319V627L320 667Q329 694 370 694H397H422Q466 694 473 669Q475 663 475 625V587H478Q479 587 500 584T548 575T608 553T668 513T713 446T732 347Q732 253 674 187Q655 167 628 152T576 128T530 116T493 109L478 107H475V69V50Q475 9 449 2Q444 0 395 0L347 1Q327 7 320 28L319 67V107H315L292 110Q269 114 243 119T184 142T124 182T80 249ZM319 197T319 347T318 497Q316 497 307 494T284 485T262 471Q220 438 220 347Q220 285 239 249Q248 234 261 223T286 208T308 200L317 197Q319 197 319 347ZM572 347V357Q572 387 569 407T548 452T496 491Q495 491 494 491T487 493T475 497V197Q518 210 541 232T571 303Q572 312 572 347\",120684:\"52 1Q37 11 37 23Q37 26 39 32Q39 34 158 202L275 369Q275 370 221 441T112 586T55 663Q53 669 53 672Q53 687 68 693H72Q77 693 84 693T99 694T118 694T139 694H176Q203 694 212 692T230 682Q231 681 239 669T265 634T296 591L358 504L418 591Q481 682 486 686Q491 691 499 692Q505 694 569 694H632Q650 685 650 672Q650 667 646 660Q643 654 592 582T491 440T441 369T566 201T693 29Q694 27 694 23Q694 11 677 0H607L537 1Q523 6 519 10T437 131Q422 153 411 170T390 200T375 222T365 237T359 245L357 247L348 232Q339 218 319 188T283 131Q222 37 211 22T186 1H52\",120685:\"61 585Q62 594 62 597T64 606T73 616T89 626H138Q196 626 208 620Q243 602 253 546T261 431T271 309T325 219Q342 205 349 205Q350 205 350 436L351 667Q360 694 401 694H428H454Q495 694 504 671Q506 663 506 436L507 205Q542 222 561 251T586 318T593 392T595 472T602 546Q614 614 661 625Q665 626 708 626H730Q766 626 780 618T794 582Q794 548 768 540Q755 538 754 501T750 410T736 298T680 191T560 120Q550 116 512 109H506V70V50Q506 9 480 2Q475 0 426 0L378 1Q358 7 351 28L350 68V109L335 111Q298 117 267 129T214 156T175 191T146 229T127 272T115 314T109 357T106 395T105 429Q104 537 87 540Q66 548 63 565Q61 570 61 585\",120686:\"241 122Q225 154 191 199T131 278T83 363T61 464Q61 497 68 527T94 591T145 650T228 693T349 715Q354 715 370 715T396 716Q539 716 622 668Q658 647 682 617T715 556T728 505T732 465Q732 415 711 365T663 280T602 200T552 122H632Q649 122 669 122T693 123H697Q736 123 742 98Q744 92 744 62V47Q744 9 718 2Q713 0 591 0L471 1Q454 7 446 21Q444 27 444 45Q444 96 463 154T506 257T549 360T569 469Q569 504 563 530T538 580T485 616T396 629Q313 629 268 594T223 468Q223 419 243 361T286 258T330 152T350 41Q350 14 335 7T276 -1Q267 -1 241 -1T197 0L77 1Q57 7 50 28L49 59V74Q49 114 75 121Q81 123 100 123Q104 123 124 123T161 122H241\",120782:\"266 654H280H282Q500 654 524 418Q529 370 529 320Q529 125 456 52Q397 -10 287 -10Q110 -10 63 154Q45 212 45 316Q45 504 113 585Q140 618 185 636T266 654ZM374 548Q347 604 286 604Q247 604 218 575Q197 552 193 511T188 311Q188 159 196 116Q202 87 225 64T287 41Q339 41 367 87Q379 107 382 152T386 329Q386 518 374 548\",120783:\"481 0L294 3Q136 3 109 0H96V62H227V304Q227 546 225 546Q169 529 97 529H80V591H97Q231 591 308 647L319 655H333Q355 655 359 644Q361 640 361 351V62H494V0H481\",120784:\"175 580Q175 578 185 572T205 551T215 510Q215 467 191 449T137 430Q107 430 83 448T58 511Q58 558 91 592T168 640T259 654Q328 654 383 637Q451 610 484 563T517 459Q517 401 482 360T368 262Q340 243 265 184L210 140H274Q416 140 429 145Q439 148 447 186T455 237H517V233Q516 230 501 119Q489 9 486 4V0H57V25Q57 51 58 54Q60 57 109 106T215 214T288 291Q364 377 364 458Q364 515 328 553T231 592Q214 592 201 589T181 584T175 580\",120785:\"80 503Q80 565 133 610T274 655Q366 655 421 623T491 538Q493 528 493 510Q493 446 453 407T361 348L376 344Q452 324 489 281T526 184Q526 152 514 121T474 58T392 8T265 -11Q175 -11 111 34T48 152Q50 187 72 209T132 232Q171 232 193 208T216 147Q216 136 214 126T207 108T197 94T187 84T178 77T170 72L168 71Q168 70 179 65T215 54T266 48H270Q331 48 350 105Q358 128 358 185Q358 239 348 268T309 313Q292 321 242 322Q205 322 198 324T191 341V348Q191 366 196 369T232 375Q239 375 247 376T260 377T268 378Q284 383 297 393T326 436T341 517Q341 536 339 547T331 573T308 593T266 600Q248 600 241 599Q214 593 183 576Q234 556 234 503Q234 462 210 444T157 426Q126 426 103 446T80 503\",120786:\"531 0Q510 3 381 3Q238 3 214 0H201V62H313V155H32V217L205 434Q342 606 362 630T387 655L391 656Q395 656 401 656T414 656H427Q447 656 451 645Q453 641 453 429V217H542V155H453V62H542V0H531ZM324 217V494L103 218L213 217H324\",120787:\"100 565V605Q100 637 102 646T113 655Q116 655 139 647T202 631T286 623Q332 623 372 631T434 647T459 655Q466 655 469 651T472 643T472 629Q472 613 463 601Q370 487 219 487Q195 487 183 488T169 490T168 433V376Q169 376 174 379T188 387T211 397T244 405T288 409Q390 409 453 352T517 201Q517 106 445 48T253 -11Q169 -11 113 37T57 154Q57 187 79 208T131 229T183 209T206 154Q206 99 155 83Q152 82 157 78Q196 47 253 47Q347 47 358 135Q358 137 358 138Q360 158 360 209Q360 277 355 301T337 338Q315 358 282 358Q202 358 160 303Q153 294 149 292T130 290Q107 290 102 301Q100 304 100 474V565\",120788:\"48 318Q48 395 68 456T120 553T193 613T273 646T350 655Q425 655 461 616T497 524Q497 485 475 468T428 451Q399 451 378 470T357 521Q357 565 403 588Q375 601 351 601Q313 601 282 584Q242 565 222 526Q199 473 199 367Q201 369 210 380T227 396T246 410T275 422T312 426Q438 426 494 332Q526 285 526 208V199Q526 112 465 53Q428 17 388 3T285 -11Q236 -11 195 7T135 43T104 80Q48 165 48 318ZM375 231V244V268Q375 295 373 310T364 342T341 366T299 374H297Q231 374 208 287Q200 257 200 196Q201 120 209 100Q231 47 288 47Q351 47 368 90Q375 112 375 231\",120789:\"256 -11Q231 -11 208 5T185 65Q185 105 193 146T212 220T241 289T275 349T312 402T346 445T377 479T397 502L400 504H301Q156 503 150 497Q142 491 134 456T126 407H64V411Q65 414 82 544T99 675T130 676H161V673Q161 669 162 666T167 661T173 657T181 654T190 652T200 651T210 650T220 649T229 648Q237 648 254 647T276 646Q277 646 426 644H558V620V607Q558 596 551 586T509 537Q489 515 476 500Q390 401 384 393Q349 339 337 259T324 113T322 38Q307 -11 256 -11\",120790:\"80 474Q80 561 139 607T278 654Q357 654 411 632Q490 593 494 509Q494 424 416 376L407 371L418 364Q432 356 447 345T481 312T513 260T526 192Q526 100 461 45T285 -11Q184 -11 116 32T48 164Q48 181 50 196T58 225T69 249T84 270T100 286T117 300T134 311T149 321T162 329L152 336Q120 360 100 397T80 474ZM347 404Q404 446 404 503Q404 579 317 599Q309 600 276 600Q178 600 170 538Q170 532 171 527T173 518T178 509T184 501T194 492T205 484T219 476T235 467T254 456T275 445L347 404ZM289 47Q323 47 351 54T402 82T425 137Q425 147 421 161Q411 183 391 197T303 249Q224 293 223 293Q220 291 215 288T197 273T175 248T157 213T149 167Q149 109 188 78T289 47\",120791:\"178 59Q206 48 238 48Q311 48 345 102Q370 138 375 259V278Q374 278 369 271T350 252T322 232Q297 220 258 220Q172 220 110 275T48 438V446Q54 561 146 618Q199 654 278 654Q321 654 329 653Q526 621 526 330Q526 252 507 190T457 92T388 31T312 -2T240 -11Q165 -11 121 25T77 120Q77 159 99 176T147 193T194 177T217 122Q217 113 216 106T211 92T205 82T198 73T191 67T184 62T178 59ZM374 446V465Q374 523 364 552T315 598Q309 600 293 601Q227 601 210 562Q199 539 199 433Q199 343 204 319T235 279Q250 272 274 271H282Q293 271 303 274T327 288T353 323T371 385Q374 403 374 446\",120802:\"117 621Q174 678 247 678Q305 678 351 647Q396 617 424 557Q460 472 460 328Q460 271 455 224Q448 154 427 104T376 27T314 -10T249 -22Q201 -22 160 1T91 67Q39 154 39 316Q39 541 117 621ZM250 55Q274 55 293 66T324 93T344 136T357 185T364 240T366 291T367 340Q367 373 367 393T363 449T352 507T332 553T299 589T250 601Q217 601 194 584T159 542T141 479T133 411T132 340V331Q132 299 133 277T137 219T147 157T167 107T201 68T250 55\",120803:\"94 612Q172 616 211 632T284 678H307V73H430V0H88V73H213V317Q213 560 212 560Q210 558 197 554T155 546T96 540L83 539V612H94\",120804:\"222 599Q190 599 166 585T128 550T108 509T97 474T93 459L67 492L42 526L47 539Q72 608 120 642T225 677Q304 677 355 644Q449 579 449 454Q449 373 361 290Q351 280 315 250T199 144Q156 103 137 85L293 86H449V0H50V79L216 242Q284 302 317 349T351 456Q351 517 315 558T222 599\",120805:\"333 521Q333 554 313 579T243 604Q154 604 99 514L78 546Q56 577 56 579Q56 580 62 589T82 611T114 637T162 662T222 677Q224 677 231 677T242 678H245Q318 678 374 634T430 520Q430 483 417 452T382 398T351 369T329 354L328 353Q369 333 373 330Q408 306 432 268T457 184Q457 103 397 41T242 -22Q131 -22 51 58L42 68L49 105L55 142L58 138Q62 134 66 130T77 120T91 108T108 96T129 83T152 72T179 63T209 57T242 54Q285 54 319 86T353 184Q353 231 331 267T260 315L213 316H166V354Q166 392 167 392Q233 395 257 405Q290 418 311 450T333 521\",120806:\"271 654L272 656H380V235H471V159H380V0H286V159H28V235L149 443Q269 652 271 654ZM292 235V607Q292 604 290 591T286 571T280 548T269 517T252 476T226 422T189 354T140 267Q136 260 132 253T126 240L123 236Q123 235 207 235H292\",120807:\"257 350Q236 350 218 342T189 323T171 301T160 281L157 273Q157 272 116 272H75V656H416V577H162V486Q162 396 163 396T174 403T207 418T258 426Q339 426 394 360T449 203Q449 113 386 46T226 -21H223Q188 -21 156 -11T102 13T64 42T41 66T33 77Q34 78 44 95T64 128L73 144Q93 112 117 93Q165 54 223 54Q270 54 306 86T345 197Q345 350 257 350\",120808:\"42 318Q42 396 61 460T109 564T173 629T237 666T289 677H301H317Q359 677 408 658V621Q408 585 407 585H406Q359 605 308 605Q246 605 203 556T146 421Q143 403 144 403Q145 402 152 409Q216 469 299 469Q333 469 357 457T407 405Q457 330 457 226Q457 126 402 57Q340 -22 251 -22Q216 -22 183 -7T116 43T63 149T42 318ZM260 393Q216 393 188 365T150 306T141 243Q141 153 172 104Q192 68 230 56Q238 54 251 54Q311 54 342 116Q360 152 360 226Q360 297 344 332Q320 382 277 392Q275 392 270 392T260 393\",120809:\"42 570V656H457V577L447 564Q345 439 295 289T244 0V-11H145V12Q160 330 356 550Q360 556 365 561T374 571L208 570H42\",120810:\"55 500Q55 568 109 623T250 678Q327 678 385 627T444 501Q444 445 410 410T336 357L329 353H330Q378 335 417 293T456 184Q456 93 393 36T249 -22T106 35T43 184Q43 251 82 293T169 353Q171 354 166 356Q165 356 163 357Q113 378 84 416T55 500ZM358 496Q358 557 325 581T250 605Q206 605 174 580T141 496Q141 446 171 420T250 393Q298 393 328 419T358 496ZM245 316Q205 316 172 285T139 185V179Q139 79 222 57Q231 55 250 55H254Q295 55 327 84Q360 120 360 188Q360 254 326 285Q295 316 245 316\",120811:\"44 476Q57 561 116 619T245 677H255Q308 677 349 647Q392 619 424 545T457 334Q457 178 382 78T205 -22Q168 -22 135 -10T86 14L72 25Q73 25 91 58L110 91Q127 78 136 72T163 60T203 54Q238 54 265 71T308 110T335 164T350 214T357 253V257L347 248Q284 187 200 187Q165 187 140 201T87 258Q42 332 42 430Q42 458 44 476ZM269 604Q265 605 254 605Q222 605 199 591T164 554T148 517T141 487Q140 478 140 430T141 373Q146 335 164 307T207 269Q223 263 247 263Q299 266 328 308T358 417Q358 435 356 456T346 511T318 570T269 604\",120812:\"274 -22Q227 -22 190 -9T128 24T87 76T62 135T49 204T44 271T43 336V343V362Q43 407 45 440T56 524T86 613T141 677Q197 715 264 715Q314 715 353 702T418 669T460 616T487 555T500 483T505 413T506 343Q506 310 506 293T503 241T498 185T486 133T467 83T437 42T397 8T343 -13T274 -22ZM355 355V401Q355 448 354 476T349 537T336 587T311 617T272 629Q270 629 266 629T261 628Q219 618 207 568T194 419V355Q194 203 200 156T231 85Q250 66 275 66Q299 66 318 85Q342 109 348 156T355 355\",120813:\"118 560H116Q107 560 100 561T85 572T76 600Q76 612 77 618T83 632T99 644Q102 645 135 646T207 660T275 700Q292 716 310 716Q353 716 360 691Q362 685 362 386V87H446Q464 76 468 69T473 44Q473 12 446 1H118Q105 7 100 13T94 25T93 44V62Q100 79 119 87H210V329Q210 571 208 571Q182 560 118 560\",120814:\"339 477Q339 505 332 531T301 579T242 601Q165 601 136 503Q133 493 130 490T121 486Q116 486 94 514Q86 523 82 528Q46 572 46 577Q46 591 77 632T147 691Q192 716 257 716Q305 716 351 700Q416 674 455 615T494 481Q494 421 463 376T356 266Q326 240 287 205T224 146T199 122H331Q359 122 392 122T431 123H445Q485 123 492 98Q494 92 494 62V47Q494 9 468 2Q463 0 272 0L83 1Q63 7 56 28L55 57V89Q59 97 215 261Q255 303 275 327T317 394T339 477\",120815:\"61 624Q62 630 83 650T153 693T262 716Q328 716 373 698T438 650T465 593T473 536Q473 438 375 376L387 371Q450 350 476 305T503 208Q503 164 492 126T456 53T380 -2T261 -22Q224 -22 189 -15T130 2T86 24T57 43T46 53Q46 56 53 99T62 145Q65 152 71 152Q76 152 90 143T123 121T175 99T248 87Q302 87 321 113T341 202Q341 264 329 292T279 329L232 331L190 332L184 338V411Q190 417 192 417Q193 418 205 419T232 421T252 424Q280 430 299 461T318 539V551Q318 599 283 609Q276 611 257 611Q225 611 199 601T159 577T136 554T120 543T102 560T76 597T62 618T61 624\",120816:\"278 693H282Q285 693 291 693T305 694T322 694T342 694H377Q402 694 411 691T430 677Q434 670 434 646T435 456V249H461H472Q509 249 516 224Q518 219 518 194Q518 178 518 171T511 155T492 142Q488 140 461 140H435V86V53Q435 9 409 2Q405 0 366 0H351Q306 0 298 25Q296 31 296 86V140H179H123Q99 140 80 129T50 106T37 95Q31 95 31 163V208Q31 246 33 251Q251 673 262 684Q268 691 278 693ZM302 249V416L301 576Q301 536 165 276L151 250L226 249H302\",120817:\"109 282Q87 290 83 310V666Q83 667 84 670T87 676T91 682T98 688T108 693Q112 694 269 694T431 692Q457 686 457 648V637V624Q457 588 431 581Q426 579 326 579H227V510Q227 442 229 442Q243 450 288 450Q377 450 435 399T494 222Q494 -22 241 -22Q202 -22 167 -11T109 16T69 49T45 79T37 94T69 151Q91 185 97 185Q105 185 112 170Q127 135 160 111T240 87Q266 87 284 94T311 111T325 142T331 179T332 226Q332 307 324 335T281 363Q228 363 197 306Q189 289 172 282H109\",120818:\"414 589Q410 589 389 600T334 612Q275 612 243 575Q209 538 202 433V422L209 431Q243 487 317 487Q392 487 440 442Q478 402 490 357T503 236Q503 113 454 54Q421 13 381 -4T279 -22Q263 -22 250 -21T214 -15T173 1T133 30T96 77T68 146T50 242Q46 278 46 336Q46 406 52 447Q84 698 312 715L315 716Q318 716 321 716Q323 716 328 716T337 715Q398 715 425 688V596Q419 591 414 589ZM282 87Q324 89 336 117T348 231Q348 310 343 343T324 388T277 399Q249 399 231 373T208 317T202 253Q202 201 207 168T224 117T249 93T282 87\",120819:\"135 38Q135 190 198 335T353 572H215Q185 572 151 572T110 571H96Q55 571 48 596Q46 602 46 633V648Q46 686 72 693Q76 695 124 695Q134 695 183 695T274 694Q472 694 477 692Q503 686 503 648V637Q503 612 502 605T491 588Q300 349 292 46V36Q292 -4 266 -9Q262 -11 214 -11H192Q160 -11 148 -3T135 38\",120820:\"61 518Q61 574 79 614T128 676T192 706T263 715H270Q298 715 318 714T373 701T430 671T470 612T488 517Q488 459 458 423T390 376Q388 375 393 373Q395 372 398 371Q503 330 503 204Q503 -22 275 -22Q209 -22 163 -3T92 49T57 120T46 204Q46 230 50 252T61 289T77 318T96 339T116 353T134 363T148 369T158 373T160 376Q118 389 90 424T61 518ZM344 538Q344 563 340 578T326 600T307 609T279 612Q232 612 218 594T204 518Q204 459 216 439T275 418Q328 418 338 450Q344 464 344 515V538ZM248 88T274 88T315 94T338 117T346 149T349 197Q349 269 342 290Q338 309 320 320T274 331Q246 331 229 320T207 290Q200 269 200 197Q201 163 202 149T210 118T232 94\",120821:\"347 272Q346 272 342 266T330 250T309 230T276 214T230 207Q185 207 150 223Q116 240 90 276T54 357Q46 393 46 468Q46 469 46 484T47 502T48 520T51 540T55 559T61 579T69 599T81 620T96 640T115 661Q174 716 276 716Q299 716 317 714T369 698T426 658T471 580T499 456Q503 402 503 342Q503 115 392 29Q322 -22 231 -22Q163 -22 115 7L82 31Q76 38 81 46Q116 112 127 123Q130 126 134 126T148 116T179 97T226 87Q287 87 318 132Q323 139 326 146T332 165T337 182T340 204T342 225T345 249T347 272ZM201 547T201 454T211 329T262 294Q276 294 285 296T310 312T335 355Q347 391 347 447Q347 520 340 550T317 595Q300 612 277 612Q226 612 214 580\",120822:\"42 305Q42 450 111 535T257 621Q335 621 390 562Q482 468 482 306Q482 174 418 82T262 -10T106 82T42 305ZM257 545Q209 545 168 481T126 320Q126 220 162 147Q204 65 262 65Q318 65 358 139T398 320V328Q395 411 364 470T284 543Q270 545 257 545\",120823:\"99 461Q99 470 99 474T104 487T120 498T151 502Q213 517 251 596Q264 622 283 622Q308 622 319 597V76H373H401Q428 76 439 69T450 38Q450 11 428 1H127Q104 10 104 38Q104 62 115 69T153 76H181H235V269Q235 461 234 461Q184 426 137 424H133Q124 424 119 425T109 431T99 447V461\",120824:\"52 462Q52 528 110 575T247 622H250Q343 622 407 565T472 421Q472 371 446 324T390 248T308 178Q307 177 275 151T214 101L185 77Q185 76 286 76H388V87Q388 105 397 114T430 123T463 114Q470 107 471 100T472 61V42Q472 24 468 16T450 1H75Q53 10 53 32V38V48Q53 57 63 67T127 122Q153 144 169 157L289 256Q388 345 388 419Q388 473 346 509T231 545H224Q176 545 146 499L144 494Q155 476 155 459Q154 459 155 455T154 444T148 430T136 417T114 408Q113 408 110 408T104 407Q80 407 66 422T52 462\",120825:\"260 546Q233 546 211 541T180 531T171 524L174 514Q177 505 177 497Q177 476 162 461T125 446Q106 446 90 459T73 504Q76 540 98 565T150 601T203 616T239 621Q241 622 265 622Q322 620 362 602T420 558T444 513T451 478Q451 386 369 329L375 326Q381 323 386 320T401 311T419 298T436 283T452 263T466 240T475 212T479 180Q479 99 416 44T259 -11T105 28T44 130Q44 154 59 168T95 183Q117 183 132 169T148 131Q148 119 139 101Q175 65 260 65Q316 65 355 97T395 179Q395 211 375 240Q336 292 253 292H234H215Q194 292 185 299T175 330Q175 350 184 359Q192 368 238 370T309 384Q336 398 351 423T367 474Q367 496 350 513Q321 546 260 546\",120826:\"235 1Q213 10 213 32V38V46Q213 65 230 73Q236 76 274 76H314V168H183L52 169Q37 175 33 182T29 205V218L30 244Q53 283 155 443T264 613Q276 623 298 623H323H363Q378 616 385 601V244H429H450Q474 244 484 237T495 206Q495 179 477 171Q471 168 429 168H385V76H425H442Q466 76 476 69T487 38Q487 10 465 1H235ZM314 244V554L117 245L215 244H314\",120827:\"387 189Q387 244 354 278T273 313Q230 313 205 301T163 271T138 249H120Q102 249 97 251Q85 258 83 266T80 311Q80 320 80 359T81 430Q81 587 82 591Q88 605 103 610H108Q112 610 120 610T138 610T163 610T192 611T225 611T260 611H415Q416 610 421 607T428 602T432 596T436 587T437 573Q437 567 437 562T434 554T431 548T427 543T423 540T418 538L415 536L289 535H164V363L170 366Q175 368 184 372T207 380T238 386T276 389Q357 389 414 331T472 187Q472 116 412 53T245 -10Q218 -10 209 -9Q126 5 89 48T52 137Q52 164 68 177T104 191Q130 191 143 175T156 141Q156 132 154 125T149 113T146 107Q146 104 155 95T188 76T245 65Q298 65 342 98T387 189\",120828:\"357 536Q357 546 318 546Q258 546 205 497T133 357V353L144 361Q210 402 285 402Q362 402 414 350Q479 285 479 193Q479 111 418 50T263 -11Q234 -11 207 -3T149 26T97 81T60 171T45 301Q45 444 129 533T319 622Q388 622 421 589T454 510Q454 491 442 475T402 458Q373 458 362 475T350 510Q350 520 354 528L357 536ZM319 326T269 326T179 298T136 223Q136 202 143 174T176 112T237 68Q246 66 265 66Q319 66 360 107Q395 146 395 197Q395 250 356 289Q319 326 269 326\",120829:\"204 -10Q162 -10 162 40Q162 146 198 261T310 477Q311 478 321 491T342 517T358 535H128V524Q128 506 119 497Q111 489 86 489H78Q55 489 46 508Q44 513 44 557V580Q44 605 52 616T88 627H93Q114 627 125 611H458Q474 598 477 593T480 573Q480 559 478 553T469 543T446 521T408 477Q252 290 246 49Q246 43 246 37T246 27T245 22Q243 11 233 1T204 -10\",120830:\"58 460Q58 523 117 572T254 621Q290 621 298 620Q376 607 421 560T466 460Q466 441 460 424T443 393T421 370T397 352T374 340T357 332L350 330L356 328Q363 325 371 321T392 310T415 295T439 274T459 249T473 217T479 179Q479 102 418 46T262 -10T106 46T45 179Q45 202 52 222T70 257T96 284T123 305T148 319T167 328L174 330L170 332Q166 333 159 336T145 343Q104 362 81 393T58 460ZM382 458Q382 491 349 518T263 546Q215 546 179 521T142 458Q142 421 178 395T262 368Q315 368 348 396T382 458ZM396 178Q396 223 358 257T263 292Q206 292 167 258T128 178Q128 137 163 102T262 66Q324 66 360 101T396 178\",120831:\"392 259Q333 210 236 210H233Q163 210 109 262Q46 325 46 411T99 550Q164 622 264 622Q293 622 319 615T376 587T428 532T464 440T479 304Q479 167 400 78T217 -11Q140 -11 105 22T70 101Q70 124 84 138T122 153Q150 153 162 137T174 101Q174 91 168 76Q179 65 216 65Q267 65 300 93Q322 109 339 130T366 173T380 210T388 242T392 259ZM388 389Q388 438 357 492T268 546T185 520Q129 479 129 415Q129 384 138 363Q145 349 156 334T195 302T255 285Q305 285 345 313T388 389\"},{8243:\"\\u2032\\u2032\",8244:\"\\u2032\\u2032\\u2032\",8246:\"\\u2035\\u2035\",8247:\"\\u2035\\u2035\\u2035\",8279:\"\\u2032\\u2032\\u2032\\u2032\",8708:\"\\u2203\\u0338\",8716:\"\\u220b\\u0338\",8772:\"\\u2243\\u0338\",8777:\"\\u2248\\u0338\",8802:\"\\u2261\\u0338\",8813:\"\\u224d\\u0338\",8820:\"\\u2272\\u0338\",8821:\"\\u2273\\u0338\",8824:\"\\u2276\\u0338\",8825:\"\\u2277\\u0338\",8836:\"\\u2282\\u0338\",8837:\"\\u2283\\u0338\",8930:\"\\u2291\\u0338\",8931:\"\\u2292\\u0338\",10764:\"\\u222c\\u222c\"})},353:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.sansSerifBoldItalic=void 0;var H=L(9403),V=L(6949);T.sansSerifBoldItalic=(0,H.AddPaths)(V.sansSerifBoldItalic,{305:\"54 431Q63 458 102 458H127H149Q192 458 199 433Q201 427 201 229T199 25Q190 0 149 0H125L81 1Q61 7 54 28V431\",567:\"-38 -84Q-36 -84 -14 -95T33 -106H38Q70 -103 78 -86Q83 -78 83 -49T84 180Q84 427 86 433Q93 458 136 458H158H180Q201 458 209 456T225 443Q230 436 231 418Q232 397 232 313V183V124V40Q232 -55 228 -87T203 -147Q166 -205 78 -205Q31 -205 -20 -189T-71 -159Q-71 -156 -59 -123Q-50 -96 -47 -91T-38 -84\"},{})},1082:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.sansSerifBold=void 0;var H=L(9403),V=L(5193);T.sansSerifBold=(0,H.AddPaths)(V.sansSerifBold,{33:\"111 669Q111 680 111 682T113 689T121 693T137 694H184H249Q255 686 256 681Q244 220 239 213Q236 208 229 208T183 207T137 207T127 213T118 431T111 669ZM110 71V95Q110 137 136 144Q140 146 183 146H200Q246 146 254 121Q256 115 256 73V51Q256 9 230 2Q225 0 181 0L138 1Q121 7 113 21L111 28L110 71\",34:\"38 687Q42 693 45 693Q46 694 111 694H176Q179 690 183 687V556L144 501Q139 494 134 486T126 474T120 465T114 457T110 451T106 447T102 445T98 443T94 443T89 442H73H62Q37 442 37 453Q37 458 55 501T74 546Q74 548 59 548L44 549L38 555V687ZM275 687Q279 693 282 693Q283 694 348 694H413Q416 690 420 687V556L381 501Q376 494 371 486T363 474T357 465T351 457T347 451T343 447T339 445T335 443T331 443T326 442H310H299Q274 442 274 453Q274 458 292 501T311 546Q311 548 296 548L281 549L275 555V687\",35:\"61 365Q61 370 62 375T65 383T69 390T74 395T80 399T85 403T90 406L94 407H344L381 536Q418 668 426 680Q431 687 445 692Q451 694 457 694Q477 694 488 682T500 651Q500 645 466 528T431 409Q431 407 504 407H577L609 521Q651 668 656 675Q669 693 691 693Q710 693 721 680T733 651Q733 645 699 528T664 409Q664 407 743 407H823L827 405Q831 403 834 402T841 397T848 389T853 379T855 365Q855 337 823 324L731 323H639L619 253Q599 181 598 180V177H823L827 175Q831 173 834 172T841 167T848 159T853 149T855 135Q855 107 823 94L698 93H573L540 -21Q498 -168 493 -175Q480 -193 458 -193Q439 -193 428 -180T416 -151Q416 -144 450 -27T485 91Q485 93 412 93H340L307 -21Q265 -168 260 -175Q247 -193 225 -193Q206 -193 195 -180T183 -151Q183 -144 217 -27T252 91Q252 93 173 93L94 94Q61 105 61 135Q61 140 62 145T65 153T69 160T74 165T80 169T85 173T90 176L94 177H185L277 178L297 248L318 320V323H206L94 324Q61 335 61 365ZM551 320V323H479Q406 323 405 322Q404 319 385 249T365 178T438 177L510 178L530 248L551 320\",36:\"231 712L232 716Q232 719 232 722T234 729T239 736T246 743T256 748T271 750Q318 750 318 711V703Q393 692 451 656Q469 645 470 640Q470 635 461 587L453 537Q445 529 442 529Q438 529 424 540T384 565T330 585Q328 585 325 585T320 586L318 587V434Q322 433 333 429T350 424T365 418T382 409T399 397T419 380Q488 313 488 213Q488 24 334 -5L318 -8V-17Q318 -56 279 -56H272Q253 -56 243 -46T232 -30T231 -18V-8H224Q170 2 127 20T68 50T49 67Q49 71 58 122T68 176Q71 182 79 182Q83 182 98 169T145 138T216 110Q228 108 229 108H231V288Q167 299 114 356T61 496Q61 537 70 570T94 624T126 661T162 684T195 696T219 701L228 702H231V712ZM231 521Q231 583 230 583Q226 582 220 579T204 561T193 521Q193 491 212 472Q226 458 230 458Q231 458 231 521ZM318 112Q356 131 356 187Q356 237 318 263V112\",37:\"61 549Q61 733 218 749Q220 749 228 749T241 750Q286 750 321 735T369 708T389 683Q422 634 422 548V538Q422 519 420 501T408 453T381 401T328 364T243 347Q61 347 61 549ZM292 549Q292 663 242 663Q221 663 211 648T198 615T196 566V548Q196 471 206 454Q218 434 242 434Q292 434 292 549ZM243 -55Q223 -55 212 -42T201 -13Q201 -2 207 7Q209 11 480 371T758 738Q770 750 788 750Q805 750 817 738T830 709Q830 694 820 681L544 315Q273 -43 269 -47Q258 -55 243 -55ZM606 146Q606 330 763 346Q764 346 773 346T786 347Q831 347 866 332T914 305T934 280Q966 233 966 146V135Q966 115 964 97T952 49T925 -2T872 -40T788 -56Q606 -56 606 146ZM742 146V132Q742 107 743 93T748 62T762 39T787 31Q819 31 832 79Q837 97 837 146Q837 260 787 260Q767 260 757 246T744 214T742 169V146\",38:\"757 117Q762 117 769 110V3Q759 -7 718 -14T641 -22T571 -15T518 1T477 19T453 31L437 23Q350 -19 257 -22Q158 -22 103 30T47 155Q47 188 57 216T87 263T119 292T151 313L182 333L187 336L181 349Q150 431 150 506Q150 605 211 660T347 716Q417 716 471 668T526 543Q526 517 518 495T471 432T360 343L342 330Q342 327 358 306T402 250T458 189L467 181Q518 225 556 289T607 395L620 437Q622 443 630 443Q631 443 679 430Q718 420 725 418T733 409Q733 402 722 365T670 255T573 123Q562 111 563 111Q589 94 644 94Q678 94 703 100T740 111T757 117ZM397 544Q397 573 384 601T346 629Q320 629 299 607T277 538Q277 484 295 429Q301 413 301 412Q302 409 309 415Q397 476 397 544ZM227 258Q197 228 197 177Q197 150 207 126T234 95Q242 93 251 93Q288 93 337 107L349 110L328 131Q266 196 234 248L227 258\",39:\"81 687Q85 693 88 693Q89 694 154 694H219Q222 690 226 687V556L187 501Q182 494 177 486T169 474T163 465T157 457T153 451T149 447T145 445T141 443T137 443T132 442H116H105Q80 442 80 453Q80 458 98 501T117 546Q117 548 102 548L87 549L81 555V687\",40:\"79 250Q79 352 100 441T152 585T213 678T266 733L287 749Q288 750 324 750H359Q366 741 366 738Q366 734 356 721T329 682T296 623T262 531T238 407Q230 346 230 250Q230 142 244 55T278 -82T318 -165T352 -215T366 -238Q366 -242 359 -249H286L277 -242Q79 -74 79 250\",41:\"61 737Q61 750 85 750H106H141L150 742Q348 574 348 250T150 -242L141 -249L106 -250H87Q61 -250 61 -238Q61 -233 74 -216Q157 -113 183 51Q197 130 197 250T183 449Q174 505 158 554T126 634T95 687T71 722T61 737\",42:\"241 579Q241 582 228 639T215 702Q215 722 233 736T271 750Q296 750 315 736T334 702V697Q334 693 328 664T314 607L308 579L352 620Q389 654 397 660T417 668Q447 668 464 647T482 602Q482 591 479 583T472 569T459 559T443 552T421 546T397 538L342 521L397 504Q405 501 420 497T442 490T458 483T472 473T479 460T482 440Q482 416 465 395T417 374Q406 375 398 381T352 422L308 463L314 435Q321 407 327 378T334 345Q336 333 327 319T296 295Q288 293 275 293Q241 293 227 311T215 345Q215 349 221 378T234 435L241 463L197 422Q160 388 152 382T132 374Q102 374 85 395T67 440Q67 451 70 459T77 473T90 483T106 490T128 496T152 504L207 521L152 538Q144 541 129 545T107 552T91 559T77 569T70 582T67 602Q67 626 84 647T132 668Q143 667 151 661T197 620L241 579\",43:\"61 250Q61 276 94 292H386V436V535Q386 577 388 589T401 607Q411 617 427 617Q458 617 468 587Q470 581 470 436V292H762L766 290Q770 288 773 287T780 282T787 274T792 264T794 250Q794 222 762 209L616 208H470V64Q470 -81 468 -87Q458 -116 428 -116T388 -87Q386 -81 386 64V208H240L94 209Q61 220 61 250\",44:\"81 139Q85 145 88 145Q89 146 154 146H219Q222 142 226 139V8L187 -47Q182 -54 177 -62T169 -74T163 -83T157 -91T153 -97T149 -101T145 -103T141 -105T137 -105T132 -106H116H105Q80 -106 80 -95Q80 -90 98 -47T117 -2Q117 0 102 0L87 1L81 7V139\",45:\"12 230Q12 257 26 265T80 274Q88 274 114 274T158 273T201 273T235 274Q276 274 290 266T305 230T291 194T235 185Q226 185 201 185T159 186Q143 186 119 186T85 185Q43 185 28 193T12 230\",46:\"219 146Q222 142 226 139V7L222 4L219 1L154 0Q102 0 94 0T82 6Q80 9 80 74L81 139Q85 145 88 145Q89 146 154 146H219\",47:\"103 -249Q81 -249 71 -235T61 -207Q61 -201 62 -198Q64 -192 235 265T409 727Q418 750 445 750Q464 750 476 737T488 707Q488 701 313 234Q143 -225 137 -232Q126 -249 103 -249\",58:\"226 319L219 313H87L81 319L80 384Q80 437 80 445T86 456Q89 458 154 458H219Q222 454 226 451V319ZM219 146Q222 142 226 139V7L222 4L219 1L154 0Q102 0 94 0T82 6Q80 9 80 74L81 139Q85 145 88 145Q89 146 154 146H219\",59:\"226 319L219 313H87L81 319L80 384Q80 437 80 445T86 456Q89 458 154 458H219Q222 454 226 451V319ZM81 139Q85 145 88 145Q89 146 154 146H219Q222 142 226 139V8L187 -47Q182 -54 177 -62T169 -74T163 -83T157 -91T153 -97T149 -101T145 -103T141 -105T137 -105T132 -106H116H105Q80 -106 80 -95Q80 -90 98 -47T117 -2Q117 0 102 0L87 1L81 7V139\",61:\"94 324Q61 335 61 366Q61 396 91 405Q96 407 429 407H762Q763 406 767 404T774 400T781 395T787 387T792 378T794 365Q794 338 762 324H94ZM94 94Q61 105 61 135Q61 149 69 160T92 175Q97 177 430 177H762L766 175Q770 173 773 172T780 167T787 159T792 149T794 135Q794 107 762 94H94\",63:\"61 644Q61 652 87 666T157 693T244 705Q344 705 400 671T457 551Q457 516 446 490T422 451T387 421T356 391Q330 361 318 332T305 292T303 252Q303 218 300 213T290 208T244 207H220Q194 207 188 213Q187 214 186 215V255Q187 282 188 296T198 345T229 417T288 496Q306 515 306 559Q306 596 296 607T253 618Q214 618 185 607T143 583T120 558T103 547Q99 547 95 551Q93 553 77 597T61 644ZM171 71V95Q171 137 197 144Q201 146 244 146H261Q307 146 315 121Q317 115 317 73V51Q317 9 291 2Q286 0 242 0L199 1Q182 7 174 21L172 28L171 71\",64:\"61 264T61 347T82 494T136 596T217 660T311 694T410 704Q460 704 471 703Q534 694 577 666Q633 623 651 552T670 370V342Q670 249 633 195Q583 116 454 116Q238 116 238 347Q238 443 276 499Q328 578 456 578Q488 578 494 577L504 575Q475 617 430 617H421Q196 617 196 347Q196 215 253 143Q310 76 427 76Q499 76 561 102L575 107H664Q671 97 671 94V89L663 81Q566 -11 422 -11Q365 -11 316 -2T219 33T137 97T82 200ZM469 490Q459 492 453 492Q429 492 405 472Q374 439 374 347Q374 233 423 210Q436 202 454 202L486 210Q536 228 536 347Q536 461 486 484Q476 490 469 490\",91:\"318 -206Q318 -235 305 -243T255 -251Q248 -251 229 -251T198 -250H143Q112 -250 99 -246T81 -225Q79 -219 79 250T81 725Q85 741 98 745T143 750H198Q210 750 229 750T255 751Q291 751 304 743T318 707Q318 680 301 668Q293 663 255 663H224V-163H255Q293 -163 301 -168Q318 -180 318 -206\",93:\"24 706Q24 734 39 742T90 751Q97 751 114 751T143 750H198Q230 750 243 746T261 725Q263 719 263 250T261 -225Q257 -241 244 -245T198 -250H143Q131 -250 112 -250T86 -251Q50 -251 37 -243T24 -207Q24 -180 41 -168Q49 -163 87 -163H118V663H87H71Q24 663 24 706\",94:\"108 550Q108 554 135 589T190 658T219 692Q221 694 275 694Q328 694 330 693Q331 692 381 629T438 557Q441 553 441 549T434 538L399 537Q363 537 362 538Q361 538 318 575L275 611Q274 611 231 575Q188 538 187 538Q186 537 150 537L115 538Q108 545 108 550\",95:\"0 -66Q0 -32 26 -25Q30 -23 274 -23Q469 -23 497 -23T532 -28Q549 -40 549 -67Q549 -93 532 -105Q525 -109 498 -109T275 -110Q31 -110 26 -108Q0 -101 0 -66\",126:\"92 215Q92 259 122 301T204 344Q238 344 264 329T310 300T343 285Q356 285 361 295T369 322T377 344H450Q457 334 457 330Q457 281 427 240T344 198Q312 198 285 213T239 242T206 257Q188 257 182 230T172 199L137 198H120Q102 198 97 200T92 215\",305:\"54 431Q63 458 102 458H127H149Q192 458 199 433Q201 427 201 229T199 25Q190 0 149 0H125L81 1Q61 7 54 28V431\",567:\"-38 -84Q-36 -84 -14 -95T33 -106H38Q70 -103 78 -86Q83 -78 83 -49T84 180Q84 427 86 433Q93 458 136 458H158H180Q201 458 209 456T225 443Q230 436 231 418Q232 397 232 313V183V124V40Q232 -55 228 -87T203 -147Q166 -205 78 -205Q31 -205 -20 -189T-71 -159Q-71 -156 -59 -123Q-50 -96 -47 -91T-38 -84\",768:\"-458 682Q-458 690 -452 692T-426 694H-381H-314L-312 691Q-311 691 -305 682T-287 655T-263 622L-218 555V549Q-218 544 -224 538L-259 537Q-295 537 -296 538Q-298 539 -376 606T-456 676Q-458 680 -458 682\",769:\"-290 537H-310Q-334 537 -334 549Q-334 553 -311 588T-264 656L-241 690Q-240 690 -239 691T-236 693Q-235 694 -167 694H-100Q-93 684 -93 681T-94 677Q-95 675 -173 607T-255 538Q-256 537 -290 537\",770:\"-442 550Q-442 554 -415 589T-360 658T-331 692Q-329 694 -275 694Q-222 694 -220 693Q-219 692 -169 629T-112 557Q-109 552 -109 549Q-109 545 -116 538L-151 537Q-187 537 -188 538Q-189 538 -232 575L-275 611Q-276 611 -319 575Q-362 538 -363 538Q-364 537 -400 537L-435 538Q-442 545 -442 550\",771:\"-458 565Q-458 609 -428 651T-346 694Q-312 694 -286 679T-240 650T-207 635Q-194 635 -189 645T-181 672T-173 694H-100Q-93 684 -93 680Q-93 631 -123 590T-206 548Q-238 548 -265 563T-311 592T-344 607Q-362 607 -368 580T-378 549L-413 548H-430Q-448 548 -453 550T-458 565\",772:\"-84 660Q-81 656 -77 653V567L-81 564L-84 561L-274 560H-383Q-469 560 -471 565L-472 566Q-474 569 -474 611L-473 653Q-469 659 -466 659Q-465 660 -274 660H-84\",774:\"-123 694Q-80 694 -80 657Q-80 626 -99 601T-161 563Q-199 552 -275 552Q-352 552 -389 563Q-470 586 -470 655Q-470 667 -468 673Q-457 694 -435 694H-431Q-408 694 -396 685Q-387 676 -387 671Q-384 661 -275 661Q-167 661 -164 671Q-164 674 -163 677T-151 687T-123 694\",775:\"-329 596Q-346 602 -351 611T-356 638V646Q-356 653 -356 654T-356 661T-355 668T-353 673T-351 679T-347 684T-341 689T-332 693T-274 695H-221Q-202 683 -198 676T-194 645Q-194 632 -195 625T-202 610T-221 596H-329\",776:\"-331 695Q-312 683 -308 676T-304 645Q-304 632 -304 626T-311 610T-331 596L-380 595H-408Q-448 595 -457 617Q-459 621 -459 645T-457 673Q-448 696 -409 696Q-405 696 -396 696T-380 695H-331ZM-247 644Q-247 658 -246 665T-239 680T-221 694Q-217 695 -169 695H-143Q-102 695 -93 672Q-91 664 -91 645V635Q-91 613 -106 602Q-113 597 -121 596T-171 595L-219 596Q-232 600 -238 608T-246 622T-247 644\",778:\"-365 616Q-365 658 -331 676T-256 694Q-253 694 -247 694T-236 693Q-166 693 -139 666Q-119 644 -119 616T-139 565Q-166 538 -237 538H-242Q-365 538 -365 616ZM-181 616Q-181 641 -195 647T-242 654Q-258 654 -266 654T-284 650T-298 638T-303 616Q-303 592 -289 585T-242 577Q-209 577 -195 584T-181 616\",779:\"-426 686Q-424 694 -394 694H-350H-283Q-277 686 -277 682Q-277 673 -317 608T-361 538L-396 537H-420Q-432 537 -436 539T-440 548Q-440 560 -434 616Q-432 633 -430 650T-427 677L-426 686ZM-243 686Q-241 694 -211 694H-167H-100Q-94 686 -94 682Q-94 673 -134 608T-178 538L-213 537H-237Q-249 537 -253 539T-257 548Q-257 560 -251 616Q-249 633 -247 650T-244 677L-243 686\",780:\"-442 645Q-442 657 -418 657H-398Q-393 657 -388 657T-379 657T-371 656T-365 656H-363L-319 620L-276 583Q-275 583 -232 619Q-189 656 -188 656Q-187 657 -151 657H-116Q-109 649 -109 645Q-109 642 -112 637Q-118 629 -168 566T-220 501Q-222 500 -275 500Q-329 500 -331 501Q-442 634 -442 645\",8211:\"0 284Q0 318 26 325Q30 327 274 327Q469 327 497 327T532 322Q549 310 549 283Q549 257 532 245Q525 241 498 241T275 240Q31 240 26 242Q0 249 0 284\",8212:\"0 284Q0 318 26 325Q30 327 549 327T1073 325Q1099 318 1099 284Q1099 249 1073 242Q1068 240 549 240Q31 240 26 242Q0 249 0 284\",8213:\"0 284Q0 318 26 325Q30 327 549 327T1073 325Q1099 318 1099 284Q1099 249 1073 242Q1068 240 549 240Q31 240 26 242Q0 249 0 284\",8215:\"0 -66Q0 -32 26 -25Q30 -23 274 -23Q469 -23 497 -23T532 -28Q549 -40 549 -67Q549 -93 532 -105Q525 -109 498 -109T275 -110Q31 -110 26 -108Q0 -101 0 -66\",8216:\"87 443L81 449V581L119 636Q125 644 131 653T141 667T148 677T154 685T158 689T163 692T167 693T173 694H190H201Q226 694 226 683Q226 678 208 635T189 590Q189 588 204 588H219Q222 584 226 581V449L219 443H87\",8217:\"81 687Q85 693 88 693Q89 694 154 694H219Q222 690 226 687V556L187 501Q182 494 177 486T169 474T163 465T157 457T153 451T149 447T145 445T141 443T137 443T132 442H116H105Q80 442 80 453Q80 458 98 501T117 546Q117 548 102 548L87 549L81 555V687\",8220:\"144 443L138 449V581L176 636Q182 644 188 653T198 667T205 677T211 685T215 689T220 692T224 693T230 694H247H258Q283 694 283 683Q283 678 265 635T246 590Q246 588 261 588H276Q279 584 283 581V449L276 443H144ZM381 443L375 449V581L413 636Q419 644 425 653T435 667T442 677T448 685T452 689T457 692T461 693T467 694H484H495Q520 694 520 683Q520 678 502 635T483 590Q483 588 498 588H513Q516 584 520 581V449L513 443H381\",8221:\"38 687Q42 693 45 693Q46 694 111 694H176Q179 690 183 687V556L144 501Q139 494 134 486T126 474T120 465T114 457T110 451T106 447T102 445T98 443T94 443T89 442H73H62Q37 442 37 453Q37 458 55 501T74 546Q74 548 59 548L44 549L38 555V687ZM275 687Q279 693 282 693Q283 694 348 694H413Q416 690 420 687V556L381 501Q376 494 371 486T363 474T357 465T351 457T347 451T343 447T339 445T335 443T331 443T326 442H310H299Q274 442 274 453Q274 458 292 501T311 546Q311 548 296 548L281 549L275 555V687\",8260:\"103 -249Q81 -249 71 -235T61 -207Q61 -201 62 -198Q64 -192 235 265T409 727Q418 750 445 750Q464 750 476 737T488 707Q488 701 313 234Q143 -225 137 -232Q126 -249 103 -249\",8710:\"381 692Q386 694 458 694Q516 694 527 693T549 687Q564 680 575 663Q576 658 715 349T856 27Q856 6 838 1H826Q815 1 795 1T747 1T686 1T616 0T539 0T458 0T378 0T300 0T230 0T169 1T122 1T90 1H78Q60 6 60 27Q62 38 201 349T341 663Q356 687 381 692ZM627 148Q626 149 581 250T492 453L447 554Q447 553 446 552Q444 546 326 278L268 148Q268 147 448 147Q627 147 627 148\"},{})},67:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.sansSerifItalic=void 0;var H=L(9403),V=L(2632);T.sansSerifItalic=(0,H.AddPaths)(V.sansSerifItalic,{33:\"160 187L257 694H306Q355 694 355 693L238 186H199Q160 186 160 187ZM110 2Q111 3 120 49T131 96Q131 98 180 98T229 96L219 50Q209 3 208 2V0H110V2\",34:\"171 647L180 694H229Q278 694 278 693L276 686Q275 680 273 668T268 644L258 597L182 471H157Q133 471 133 472L189 595Q189 596 174 596H160V598Q160 601 171 647ZM365 647L374 694H423Q472 694 472 693L470 686Q469 680 467 668T462 644L452 597L376 471H351Q327 471 327 472L383 595Q383 596 368 596H354V598Q354 601 365 647\",35:\"793 170Q809 162 809 149Q809 145 807 141T802 135T796 132L793 130H547L472 -27Q397 -184 394 -187Q389 -194 379 -194Q367 -194 362 -183Q359 -179 359 -173Q360 -168 431 -20L503 129Q503 130 410 130H317L242 -27Q167 -184 164 -187Q159 -194 149 -194Q137 -194 132 -183Q129 -179 129 -173Q130 -168 201 -19L273 130H187L100 131Q87 141 87 150Q87 162 102 170H294L331 248Q339 265 349 286T365 318L370 328Q370 330 258 330Q145 330 142 332Q129 338 129 351Q129 362 140 368Q146 370 267 370L391 371L467 527Q542 684 544 686Q544 688 549 691T560 694H562Q565 693 567 692T571 690T575 686T578 681T579 672Q577 665 507 520T436 373L435 370H528L621 371L692 518Q767 675 769 677Q775 694 789 694Q798 694 804 688T809 672Q806 664 737 519L665 371L751 370Q835 370 841 368Q851 362 851 350Q851 337 841 334T799 330H765H741H645L606 250L568 170H793ZM600 328Q600 330 508 330H415Q412 326 338 171Q338 170 431 170H524L561 248Q569 265 579 286T595 318L600 328\",36:\"228 70Q233 92 246 155T270 266T280 316Q271 318 265 320T237 333T200 360T172 403T159 468Q159 537 205 600T325 691Q352 701 360 701Q361 701 361 701T362 703T364 711T368 727L372 750H409Q445 750 445 749L436 705Q436 703 450 702T494 691T554 657L565 649Q562 642 548 604L534 568Q511 591 484 605T440 621L424 623L419 624L372 405Q399 400 424 384Q490 338 490 247V240Q490 156 430 85Q374 13 294 -5L284 -7L280 -30Q279 -35 278 -41T275 -52L274 -55Q274 -56 237 -56Q201 -56 201 -54Q202 -53 205 -34T211 -11Q211 -9 206 -9Q154 -2 115 19Q80 35 56 59L88 141L99 131Q109 121 119 113T141 99T160 89T180 82T197 77T214 73T228 70ZM303 426Q304 427 313 471T332 564T345 620L335 616Q287 596 263 549Q252 525 252 499Q252 470 267 451T298 426Q303 424 303 426ZM302 75Q305 75 315 80T340 98T367 125T390 164T399 214Q399 247 384 268T349 297Q338 247 326 186L302 75\",37:\"268 347Q224 347 195 386T165 488Q165 517 173 552Q191 637 246 693T349 749Q389 749 414 725T448 673T456 614Q456 506 396 427T268 347ZM372 604Q372 674 339 674Q311 674 290 633T261 549T253 482V474Q253 438 272 426Q277 424 286 424Q319 424 345 485T372 604ZM189 -56Q179 -56 173 -49T167 -37Q167 -30 347 198Q425 296 475 360Q780 745 785 747Q790 750 796 750Q814 748 814 730Q814 725 811 719L204 -49Q198 -56 189 -56ZM523 87Q523 184 583 265T713 347Q758 347 786 308T815 207Q815 110 757 28T629 -55Q576 -55 550 -12T523 87ZM729 200Q729 271 696 271Q675 271 658 247T631 189T616 125T611 76Q611 21 644 21H647Q672 21 700 77T729 200\",38:\"219 -22Q158 -22 117 13T71 111Q71 131 74 150T84 185T98 215T118 241T137 262T159 281T179 295T199 308L214 318L258 348L256 362Q254 373 254 413V435Q254 483 271 537T325 641T411 708Q427 715 441 715Q446 716 455 716Q504 716 534 681T565 590Q565 522 519 468T377 347L358 334Q359 333 363 320T374 290T387 262Q404 227 428 187T460 139Q521 183 574 251T651 362T674 409L710 398Q746 388 747 388Q747 381 720 333T635 213T517 94L510 87Q542 57 598 57Q649 57 708 72Q716 75 718 75L709 34L701 -7Q636 -22 578 -22Q531 -22 498 -8T428 34L408 25Q314 -22 219 -22ZM480 579Q480 640 436 640Q410 640 385 615T351 554Q340 513 340 457Q340 413 343 410Q343 406 360 419Q431 471 455 505T480 579ZM245 57Q279 59 311 67T359 81T375 89T358 113T318 178T281 260L274 277L245 257Q167 205 167 135Q167 110 174 93T194 69T217 60T237 57H245\",39:\"228 647L237 694H286Q335 694 335 693L334 686Q332 680 330 668T325 644L315 597L239 471H214Q190 471 190 472L246 595Q246 596 231 596H217V598Q217 601 228 647\",40:\"195 37Q195 -7 200 -47T213 -113T231 -166T250 -204T268 -232T280 -250H204L194 -238Q104 -124 104 55Q104 238 181 432T405 740L417 750H454Q491 750 491 749L468 729Q446 709 411 667T337 565T262 405T208 188Q195 110 195 37\",41:\"300 463Q300 634 222 740L214 750H290L299 740Q300 738 309 726T323 707T337 682T353 651T367 613T379 566T387 510T390 444Q390 314 344 156T203 -125Q179 -155 145 -191Q111 -224 89 -241L78 -250H2Q4 -248 27 -227T65 -189T107 -140T155 -71T200 16T244 129T278 266Q300 372 300 463\",42:\"193 608Q193 628 210 644T246 660Q250 660 252 660T257 658T264 654T272 648T284 638T302 623Q340 590 340 593Q341 594 345 623T354 682T360 715Q365 729 378 739T407 750Q424 750 433 740T443 720Q443 712 427 652L410 591L462 623Q505 650 514 655T534 660Q549 660 558 650T568 625Q568 617 567 611T560 599T551 590T536 580T519 571T496 561T470 548L429 528L474 500Q482 495 492 489T506 481T516 475T523 469T527 464T529 458T530 450Q530 430 514 414T479 397H475Q468 397 460 402T423 433Q414 440 404 448T388 461L383 465L365 344Q348 306 314 306Q302 306 292 313T281 338Q281 347 297 404L313 464L260 433Q201 397 195 397H189Q173 397 165 407T156 432Q156 438 157 443T161 452T166 460T175 468T185 475T198 482T212 489T230 497T250 506L295 528L250 556Q203 582 202 585Q193 591 193 608\",43:\"108 244T108 250T112 261T119 268T124 270H426V272Q428 274 457 419Q489 565 492 573Q497 583 508 583Q516 583 522 577T528 565Q528 553 498 417Q491 384 483 346T471 288L467 270H760Q775 262 775 250T760 230H458Q456 221 426 77T394 -71Q389 -83 375 -83Q367 -83 362 -78T356 -64Q356 -58 387 84Q394 118 401 155T413 210L417 229Q417 230 271 230H124Q123 230 120 232T112 239\",44:\"90 2Q91 3 100 49T111 96Q111 98 160 98T209 96L199 50Q189 3 188 2Q188 0 149 -63L112 -125H63L120 0H105Q90 0 90 2\",45:\"66 257V259H332V257L324 220L317 186H184Q51 186 51 187T58 220T66 257\",46:\"90 2Q91 3 100 49T111 96Q111 98 160 98T209 96L199 50Q189 3 188 2V0H90V2\",47:\"564 744L568 747Q573 750 579 750Q588 750 594 744T599 729Q597 721 321 241T41 -243Q37 -250 27 -250Q6 -250 6 -230Q6 -228 8 -222Q9 -219 285 261T564 744\",48:\"245 -22Q209 -22 181 -11T135 20T107 65T92 116T88 171Q88 235 114 354T194 557Q226 606 269 635T340 671T392 678H395Q422 678 446 670T495 643T534 582T549 481Q549 430 534 350T499 213Q459 89 379 25Q315 -22 247 -22H245ZM430 582Q408 601 378 601Q313 601 269 534Q234 475 205 341Q181 232 181 174Q181 104 209 76Q231 54 260 54T318 73T368 125Q410 194 447 375Q460 445 460 487Q460 555 430 582\",49:\"234 613Q277 613 331 628T428 678H439Q451 678 451 676Q450 671 387 373T323 74T384 73H445L430 0H259L88 1L104 73H229L332 560Q278 541 198 539Q198 540 198 541T199 546T200 554T202 564T205 576L213 612H219Q221 612 226 612T234 613\",50:\"190 460Q189 460 181 475T164 507T155 527Q155 535 182 571Q259 678 380 678Q462 678 506 630T551 513V507Q551 418 487 349Q469 329 441 305T391 265T344 232T316 212Q158 87 158 86T188 85Q194 85 234 85T311 86Q467 86 467 85Q451 9 449 2V0H50Q54 18 58 40L67 79L133 133Q246 226 269 243Q369 318 410 373T452 492Q452 535 433 560T393 592T350 599Q311 599 279 578T231 532T203 484T190 460\",51:\"446 542Q446 576 424 590T372 605Q330 605 288 583T216 524Q209 515 208 516Q207 517 192 549L178 580L187 589Q224 627 276 652T386 678Q456 678 500 642T544 550Q544 515 530 482T495 427T453 387T418 362L403 353L413 348Q440 335 462 313Q500 271 500 217Q500 135 423 57T236 -22T63 59L56 68L85 141Q106 112 125 98Q177 54 254 54Q315 54 355 105T396 218Q396 242 393 254Q380 301 335 313Q327 315 280 316Q233 316 233 318L249 392Q298 392 322 399Q373 408 409 453T446 542\",52:\"78 235L411 656H465Q519 656 519 655T475 447T430 237V235H521V233L505 160Q505 159 459 159H414L380 0H286L320 159H62L63 164Q64 169 66 179T70 198L78 235ZM342 235L421 607Q420 607 419 604Q409 535 197 267Q173 236 173 235H342\",53:\"330 350Q263 350 214 272H133V275Q134 276 174 467L214 655Q214 656 385 656H555V653Q555 652 554 647T550 631T546 613L539 577H284L265 486Q261 464 256 441T248 406L246 395L250 398Q255 401 264 406T286 415T315 423T350 427Q412 427 455 381T498 256Q498 150 415 64T222 -22Q186 -22 155 -12T105 12T74 41T55 65T50 77L51 79Q61 89 78 112L104 145L107 138Q110 130 114 123T125 106T142 88T165 72T196 60T236 55Q282 55 316 79T366 140T389 208T396 267Q396 310 378 330T337 350H330\",54:\"437 605Q397 605 361 585T301 536T261 477T236 426T228 401L236 408Q244 414 260 424T296 445T345 462T402 469H404Q422 469 434 467T465 446T498 394Q515 351 515 307Q515 254 497 193T439 85Q352 -22 246 -22Q220 -22 196 -14T148 15T109 78T94 179Q94 272 123 373Q163 505 257 591T450 678Q474 678 498 674T535 664T548 656L540 621L532 586L520 590Q509 594 485 599T437 605ZM339 392Q281 392 233 334T185 163V158Q185 87 230 61Q244 54 262 54Q325 54 371 122Q395 158 407 217T419 298Q419 337 401 364T339 392\",55:\"173 614L181 656H389Q596 656 596 655L595 650Q594 645 592 635T588 616L580 578L554 551Q313 307 245 4L242 -11H192Q143 -11 143 -10Q144 0 148 17T169 89T212 198T285 327T393 470Q423 504 472 550Q479 555 485 561T496 571L329 570Q163 570 163 571L164 577Q166 583 168 593T173 614\",56:\"159 470Q159 547 229 612T394 678Q467 678 510 636T554 533Q554 512 549 493T535 458T515 429T492 405T467 386T443 372T423 362T409 356L404 354Q404 353 405 353Q411 353 432 341T476 295T500 218Q500 134 424 56T246 -22Q175 -22 126 22T77 143Q77 204 110 251T188 327L202 334Q216 340 229 346T243 353T235 358T214 372T189 393T168 426T159 470ZM467 527Q467 605 375 605Q317 605 281 566T244 472Q244 429 271 411T334 392Q392 392 429 430T467 527ZM405 228Q405 262 384 289T315 316Q257 316 216 266T174 144Q174 95 199 75T262 54Q329 54 367 109T405 228\",57:\"220 594Q303 677 389 677Q545 677 545 479Q545 413 526 327Q493 175 398 77T202 -22Q124 -22 77 25L130 91L137 83Q169 54 218 54Q255 54 290 76T347 129Q364 151 380 182T403 232T411 256Q410 255 390 241T353 217T303 197T236 187Q195 187 173 209Q155 226 140 263T124 352Q124 392 135 435Q154 527 220 594ZM455 497Q455 605 383 605Q340 605 305 577T246 492Q220 411 220 360Q220 278 279 264Q280 264 287 264T299 263Q347 263 387 302Q455 375 455 497\",58:\"174 396L184 444H233Q282 444 282 443Q277 421 272 394L262 346H213Q164 346 164 347Q169 369 174 396ZM90 2Q91 3 100 49T111 96Q111 98 160 98T209 96L199 50Q189 3 188 2V0H90V2\",59:\"174 396L184 444H233Q282 444 282 443Q277 421 272 394L262 346H213Q164 346 164 347Q169 369 174 396ZM90 2Q91 3 100 49T111 96Q111 98 160 98T209 96L199 50Q189 3 188 2Q188 0 149 -63L112 -125H63L120 0H105Q90 0 90 2\",61:\"142 368Q145 370 463 370Q780 370 784 368Q796 364 796 350T784 332Q780 330 463 330Q145 330 142 332Q129 338 129 351Q129 362 142 368ZM88 137T88 150T102 170H738Q739 170 742 168T750 161T754 150T750 139T743 132T738 130H102Q88 137 88 150\",63:\"194 652Q194 654 218 666T284 691T362 704Q444 704 490 678T536 583Q536 541 516 500T459 433Q415 400 387 371T343 313T321 266T307 216L301 186H262Q223 186 223 187Q224 199 228 218T250 288T294 377Q317 413 344 440T391 481T414 499Q442 527 442 574Q442 584 441 590T433 607T409 623T362 629Q335 629 310 624T267 610T235 595T214 582T205 576L200 614Q194 651 194 652ZM173 2Q174 3 183 49T194 96Q194 98 243 98T292 96L282 50Q272 3 271 2V0H173V2\",64:\"120 267Q120 377 179 478T336 642T538 705Q610 705 658 662T707 513Q707 425 681 331Q658 241 590 179T447 117Q386 117 343 163T300 288Q300 397 374 486T544 576Q575 576 608 562Q590 628 517 628Q406 628 309 522T212 278Q212 179 267 122T404 65T550 91H631Q513 -10 390 -10Q265 -10 193 70T120 267ZM600 397Q600 441 581 471T530 501Q476 501 433 436T390 298Q390 254 409 224T462 193Q512 193 556 257T600 397\",91:\"148 252L253 750H339Q425 750 425 749L424 744Q423 739 421 729T417 711L409 675L367 674H325L235 252Q145 -167 145 -172Q145 -174 187 -174H229V-176Q213 -240 213 -250H127Q41 -250 41 -248Q41 -245 148 252\",93:\"353 749Q353 746 303 512T200 27T141 -250H-31Q-31 -240 -15 -176V-174H70L250 674H208L165 675L181 750H267Q353 750 353 749\",94:\"190 527L360 694H434L484 611Q533 528 533 527H457L390 632L385 639L266 527H190\",95:\"59 -75L66 -38H316Q565 -38 565 -39T558 -75T549 -112Q549 -114 299 -114Q50 -114 50 -113L52 -108Q53 -103 55 -93T59 -75\",126:\"330 327Q356 326 388 298T446 269Q470 269 484 327H522Q560 327 560 325L557 316Q554 306 549 292T535 263T512 232T480 208Q453 193 429 193T370 222T315 251Q285 251 275 193H199V197Q214 257 251 292T330 327\",305:\"168 442T168 443T213 444T258 443T212 225T164 2V0H74V2Q75 7 121 224\",567:\"-54 -96L-48 -104Q-41 -111 -27 -118T7 -126Q60 -126 82 -87Q85 -81 140 181L196 443Q196 444 241 444T286 443Q286 441 232 186T175 -75Q163 -120 122 -162T19 -204Q-13 -204 -41 -196T-83 -180T-96 -170Q-55 -96 -54 -96\",768:\"-262 681L-270 694H-177L-132 612Q-89 530 -87 528Q-87 527 -125 527H-163L-208 598Q-254 670 -262 681\",769:\"-96 625L-29 694H63Q42 673 -31 605L-114 527H-190L-176 541Q-160 559 -96 625\",770:\"-310 527L-140 694H-66L-16 611Q33 528 33 527H-43L-110 632L-115 639L-234 527H-310\",771:\"-170 677Q-144 676 -112 648T-54 619Q-30 619 -16 677H22Q60 677 60 675L57 666Q54 656 49 642T35 613T12 582T-20 558Q-47 543 -71 543T-130 572T-185 601Q-215 601 -225 543H-301V547Q-286 607 -249 642T-170 677\",772:\"-314 553L-297 631H-116Q64 631 64 630Q60 612 56 591L47 553L-133 552Q-314 552 -314 553\",774:\"-142 508Q-205 508 -244 548T-284 652Q-284 666 -281 683L-280 694H-204Q-205 689 -205 677Q-205 650 -196 631T-173 604T-147 593T-125 590Q-85 590 -50 618T-5 686L-2 694H73V690Q53 610 -10 559T-142 508\",775:\"-180 578Q-179 579 -170 627T-158 678V680H-54V678Q-56 675 -65 627T-76 578V576H-180V578\",776:\"-273 584Q-272 585 -262 632L-252 678V680H-154V678L-164 632Q-174 585 -175 584Q-175 582 -224 582T-273 584ZM-78 586Q-78 587 -69 632T-58 678V680H40L39 677Q39 676 38 670T34 651T29 628L19 583L-30 582H-79L-78 586\",778:\"-227 597Q-227 639 -186 666T-102 693H-97Q-29 693 -8 649Q-2 637 -2 623Q-2 582 -43 555T-132 527Q-171 527 -199 546T-227 597ZM-59 619Q-59 635 -68 643T-104 652Q-142 652 -156 636T-171 602Q-171 569 -123 569Q-119 569 -111 570T-99 571Q-59 582 -59 619\",779:\"-236 619L-195 694H-149Q-103 694 -103 693L-211 527H-287L-282 536Q-281 539 -236 619ZM-70 619L-29 694H17Q63 694 63 693L-45 527H-121L-116 536Q-115 539 -70 619\",780:\"-283 654H-207L-140 549L-135 542L-16 654H60L-109 487H-147L-184 488L-234 570Q-283 653 -283 654\",913:\"28 0L429 694H533L585 350Q596 275 610 182T632 46L638 3V0H530L528 18Q527 25 515 103T503 183H223L135 29L118 1L73 0H28ZM492 254Q492 256 473 398T454 589V610Q433 552 290 301L264 255L378 254H492\",914:\"501 363Q557 355 605 316T653 222Q653 148 586 85T403 2Q394 1 240 0Q90 0 90 1L100 46Q109 90 128 177T164 348L238 694H375Q518 693 546 688Q614 674 655 635T696 544Q696 490 648 441T516 368L501 363ZM601 530Q601 568 566 590T479 621Q472 622 394 623H320L297 513Q292 489 286 459T276 415L273 401V399H339H372Q504 399 571 466Q601 498 601 530ZM257 322Q256 320 230 197T203 73Q203 71 289 71Q379 72 387 73Q459 84 507 122T556 210Q556 255 519 283T428 320Q415 322 336 323Q257 323 257 322\",915:\"87 2Q88 4 160 346T234 689Q234 691 440 691T646 689Q643 686 629 611H475L321 612Q193 4 191 2V0H87V2\",916:\"273 343L510 694H617Q790 2 790 0H416L42 1L273 343ZM539 576Q536 597 536 600Q536 602 535 605Q534 607 534 607Q527 580 222 130L201 98H651L648 110Q645 123 639 149T627 198Q554 489 539 576\",917:\"86 2Q88 4 160 346T233 689Q233 691 461 691Q688 691 688 689Q685 686 671 611H495L320 612L319 609Q319 607 297 501L274 397H436Q597 397 597 396L596 391Q595 386 593 376T589 358L581 322L420 321Q258 321 258 320Q209 89 208 87Q208 85 390 85Q417 85 460 85T518 86L572 85Q556 8 554 2V0H86V2\",918:\"67 54Q551 615 551 617Q543 618 517 618Q510 618 463 618T376 617Q200 617 200 618T209 657L216 694H459Q702 694 702 692Q702 689 697 667L692 643L207 80H392Q493 81 577 81Q577 70 560 2V0H55V2L67 54\",919:\"517 2Q518 3 551 161T585 322Q586 323 557 323T422 323H259L190 0H138Q86 0 86 1L96 46Q105 90 124 177T160 348L234 694H337V691Q336 690 306 545T275 399H602L603 403Q603 407 634 551L665 694H768V691Q768 690 695 348T621 2V0H517V2\",920:\"119 260Q119 348 157 433T254 579T387 677T533 715Q701 715 772 574Q804 511 804 431Q804 315 744 209T586 41T384 -22Q262 -22 191 59T119 260ZM706 426Q706 524 655 582T525 640Q454 640 395 600T293 502Q256 447 237 383T218 266Q218 168 269 112T401 55Q518 55 612 166T706 426ZM283 349L293 397H473Q652 397 652 396Q647 374 642 347L632 299H452Q273 299 273 300Q278 322 283 349\",921:\"161 348L235 694H338V691Q338 690 265 348T191 2V0H139Q87 0 87 1L96 46Q106 90 125 177T161 348\",922:\"236 223Q235 222 213 113T188 2V0H138Q88 0 88 1L98 46Q107 90 126 177T162 348L236 694H285Q335 694 335 693L330 671Q326 649 316 603T298 518Q289 477 280 433T266 366L261 343L672 694H729L784 693L465 420L651 0H596L541 1L384 350Q383 351 310 288T236 223\",923:\"28 0L401 694H504V690Q505 686 543 345T582 1Q582 0 528 0H473V3Q472 6 460 113T435 359T422 558Q422 593 424 603L425 610L424 608Q414 572 343 431Q287 316 143 49L117 1L73 0H28\",924:\"375 691Q456 215 459 124V106Q488 177 762 641L793 694H929V691Q929 690 856 348T782 2V0H689V2Q691 4 753 304Q817 604 818 606Q819 611 817 608Q817 607 815 603Q798 559 540 117L484 22H440L397 23L393 42Q393 47 373 169T334 422T315 594V609L250 306Q186 3 185 2Q185 0 138 0Q92 0 92 1L102 46Q111 90 130 177T166 348L240 694H375V691\",925:\"311 609Q310 608 246 306T181 2V0H134Q88 0 88 1L98 46Q107 90 126 177T162 348L236 694H382L383 691Q383 688 418 561T493 286T541 97L544 84L545 89Q545 90 553 128T578 246T610 394L674 694H766V691Q766 690 693 348T619 2V0H472L469 13Q468 17 393 293T312 605L311 609\",926:\"193 687Q193 688 479 688H765V686Q764 685 755 642L747 600H461L175 601Q175 602 184 645L193 687ZM196 400Q196 401 418 401T640 400L622 315Q622 314 400 314T178 315L196 400ZM42 2Q43 3 51 44T60 87H64Q68 87 75 87T93 87T119 87T151 88T190 88T237 88T291 88T352 88H643Q638 66 634 44T627 13T624 2V0H42V2\",927:\"118 254Q118 366 174 473T324 648T517 716Q627 716 695 638T763 435Q763 321 706 215T555 43T362 -22Q256 -22 187 56T118 254ZM380 58Q452 58 518 116T622 263T661 442Q661 496 646 535T608 594T567 622T534 634Q516 636 496 636Q400 636 313 528T225 264Q225 172 267 115T380 58\",928:\"86 2Q88 4 160 346T233 689Q233 691 501 691Q768 691 768 689Q766 688 694 346T621 2V0H517V2Q518 3 582 304T646 609L648 615H321L190 0H86V2\",929:\"162 348L236 694H378Q522 693 530 692Q604 680 647 635T690 524Q690 474 665 430T612 359Q550 299 465 280Q443 275 343 274H250V271Q250 269 235 201T206 68T192 2V0H140Q88 0 88 1L98 46Q107 90 126 177T162 348ZM594 513Q594 560 562 588T477 622Q470 623 394 623H321L293 487L263 349V347H342H347H375Q530 347 578 449Q594 483 594 513\",931:\"194 655L202 694H508Q813 694 813 693Q809 675 805 653L797 614H559L321 615Q327 606 405 478L485 347Q449 311 348 203T247 86Q247 84 294 84Q303 84 359 84T465 85H684Q684 84 675 42L666 0H360L55 1L195 154Q346 319 347 320L359 333L273 473Q187 614 186 614L187 620Q188 625 190 635T194 655\",932:\"165 608L182 687Q182 688 486 688H790L789 685L781 645L773 609H521L457 306Q393 3 392 2Q392 0 340 0H288V2Q289 5 353 304T417 605V609L291 608H165\",933:\"357 637Q320 637 297 612T266 555H173Q178 576 188 598Q214 651 265 683T373 716Q497 716 497 542V509L504 526Q579 715 711 715Q773 715 808 677T843 589Q843 576 840 555H747L748 557Q748 559 748 563T749 574V580Q749 604 731 622Q715 638 693 638Q591 638 543 465Q531 425 506 309T462 98T441 2V0H337V2Q425 401 436 486Q438 504 438 526Q438 637 364 637H357\",934:\"124 308Q124 399 208 481T433 587Q437 587 437 589Q438 590 449 643L459 694H508Q557 694 557 693Q557 691 546 641T535 587Q543 587 562 583T614 565T674 531T722 472T743 387Q743 288 656 209T449 110L433 106Q411 3 410 2Q410 0 361 0H312L313 3Q313 5 324 56L335 107H331L321 108Q311 110 297 114T266 124T228 141T190 168Q124 225 124 308ZM227 315Q227 282 239 257T270 218T306 197T338 186L350 184H351L386 346Q420 507 420 509H419Q411 509 393 505T342 485T284 444Q227 387 227 315ZM642 381Q642 413 629 437T599 475T563 496T533 507T519 510Q518 510 484 348T450 184Q544 201 593 258T642 381\",935:\"14 0Q17 3 184 184T352 367L265 529Q244 567 222 609T188 672L176 692Q176 694 236 694H297L338 612Q387 515 400 489L421 448L645 694H758L708 640Q481 393 456 368Q455 366 500 281T596 104T652 0H531L388 293L128 0H14\",936:\"325 556Q325 524 310 447T294 330Q294 289 304 260Q314 234 333 216T364 192T380 187L488 694H585V691Q584 689 531 438L478 188H479Q485 188 503 195T555 231T613 305Q637 352 654 435Q662 470 669 496T681 538T690 562T698 578T704 587Q719 609 733 615T772 621H802H854V619L838 546Q838 545 832 545Q775 539 749 418Q716 274 638 196Q616 173 590 156T543 131T503 117T473 110T460 106Q460 105 450 54T438 2V0H340V2Q341 3 351 54T362 106Q363 107 358 108T344 111T322 117T295 128T267 145T239 171T216 207T200 256T194 319Q194 356 203 408T213 483Q213 517 203 530T182 544T171 546Q184 609 187 619V621H239Q286 621 294 620T309 612Q325 596 325 556\",937:\"148 407Q148 475 182 534T269 633T386 694T511 716Q622 716 695 658T769 507Q769 461 747 409T699 321T628 225T562 136Q533 90 533 86Q542 85 557 85Q564 85 583 85T614 86Q695 86 695 85Q679 9 677 2V0H425Q426 3 433 30T447 72T480 131T549 241L554 248Q558 254 563 261T576 281T592 306T609 335T625 366T640 400T653 434T661 466T664 498Q664 562 618 601T497 640Q416 640 351 596T262 482Q250 441 250 392T276 237T302 70V56Q302 28 296 2V0H44V2L62 85Q62 86 143 86L225 85V88Q224 89 224 89T224 91T224 95T223 101T222 110T220 123T216 140T209 163T200 191T188 227Q148 344 148 407\",8211:\"59 275L66 312H316Q565 312 565 311T558 275T549 238Q549 236 299 236Q50 236 50 237L52 242Q53 247 55 257T59 275\",8212:\"59 275L66 312H566Q1065 312 1065 311T1058 275T1049 238Q1049 236 549 236Q50 236 50 237L52 242Q53 247 55 257T59 275\",8213:\"59 275L66 312H566Q1065 312 1065 311T1058 275T1049 238Q1049 236 549 236Q50 236 50 237L52 242Q53 247 55 257T59 275\",8215:\"59 -75L66 -38H316Q565 -38 565 -39T558 -75T549 -112Q549 -114 299 -114Q50 -114 50 -113L52 -108Q53 -103 55 -93T59 -75\",8216:\"309 567L299 520Q289 474 288 473Q288 471 239 471T190 473L192 480Q193 486 196 499T201 522L211 569L287 694H312L335 693L332 685Q328 677 321 661T307 630L279 570L294 569Q309 569 309 567\",8217:\"228 647L237 694H286Q335 694 335 693L334 686Q332 680 330 668T325 644L315 597L239 471H214Q190 471 190 472L246 595Q246 596 231 596H217V598Q217 601 228 647\",8220:\"393 567L383 520Q373 474 372 473Q372 471 323 471T274 473L276 480Q277 486 280 499T285 522L295 569L371 694H396L419 693L416 685Q412 677 405 661T391 630L363 570L378 569Q393 569 393 567ZM587 567L577 520Q567 474 566 473Q566 471 517 471T468 473L470 480Q471 486 474 499T479 522L489 569L565 694H590L613 693L610 685Q606 677 599 661T585 630L557 570L572 569Q587 569 587 567\",8221:\"171 647L180 694H229Q278 694 278 693L276 686Q275 680 273 668T268 644L258 597L182 471H157Q133 471 133 472L189 595Q189 596 174 596H160V598Q160 601 171 647ZM365 647L374 694H423Q472 694 472 693L470 686Q469 680 467 668T462 644L452 597L376 471H351Q327 471 327 472L383 595Q383 596 368 596H354V598Q354 601 365 647\",8260:\"564 744L568 747Q573 750 579 750Q588 750 594 744T599 729Q597 721 321 241T41 -243Q37 -250 27 -250Q6 -250 6 -230Q6 -228 8 -222Q9 -219 285 261T564 744\",8710:\"273 343L510 694H617Q790 2 790 0H416L42 1L273 343ZM539 576Q536 597 536 600Q536 602 535 605Q534 607 534 607Q527 580 222 130L201 98H651L648 110Q645 123 639 149T627 198Q554 489 539 576\"},{})},9007:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.sansSerif=void 0;var H=L(9403),V=L(4214);T.sansSerif=(0,H.AddPaths)(V.sansSerif,{33:\"120 187Q120 225 115 440T110 693Q110 694 159 694T208 693Q208 655 203 440T198 187Q198 186 159 186T120 187ZM110 0V98H208V0H110\",34:\"33 596V694H131V597L82 471H32L47 532Q62 593 63 594Q63 596 48 596H33ZM227 596V694H325V597L276 471H226L241 532Q256 593 257 594Q257 596 242 596H227\",35:\"56 350Q56 363 70 370H192Q314 370 314 371L356 526Q396 676 401 685Q406 694 416 694Q423 694 429 689T436 677Q436 673 396 523T355 371Q355 370 449 370Q544 370 544 371L586 526Q628 682 630 685Q636 694 646 694Q653 694 659 689T665 678Q665 670 645 593T605 444L585 371Q585 370 673 370H762Q777 362 777 350Q777 337 767 334T723 330H668H573L567 305Q560 282 545 226L530 171L646 170H721Q756 170 766 167T777 150Q777 138 762 130H640Q518 130 518 129L476 -26Q434 -182 432 -185Q426 -194 416 -194Q409 -194 403 -189T397 -178Q397 -170 417 -93T457 56L477 129Q477 130 383 130Q288 130 288 129L246 -26Q204 -182 202 -185Q196 -194 186 -194Q179 -194 173 -189T167 -178Q167 -170 187 -94T227 56L247 129Q247 130 159 130H70Q56 137 56 150Q56 165 72 170H259L265 195Q273 222 287 275L302 330H186L70 331Q63 334 58 339Q56 343 56 350ZM489 170L532 330H343L337 305Q330 282 315 226L300 171L394 170H489\",36:\"55 509Q55 585 103 638T213 701V750H286V703H289Q312 703 354 689Q372 682 399 666T427 646L413 569Q413 568 403 575Q352 615 291 624H286V405Q357 389 400 331T444 199Q444 128 402 69T286 -7V-56H213V-9Q167 -3 125 14T63 44T44 60Q44 61 52 101L59 140L69 132Q78 125 87 119T107 107T124 97T141 90T157 84T173 80T187 76T201 73T213 70V317L202 319Q141 335 98 386T55 509ZM213 424V620L203 615Q143 587 143 522Q143 455 213 424ZM356 187Q356 208 350 227T334 258T315 280T298 293T287 297Q286 297 286 186V75Q356 110 356 187\",37:\"56 549Q56 639 98 694T195 750Q248 750 290 694T332 548Q332 455 290 401T195 347Q141 347 99 403T56 549ZM248 549Q248 602 234 638T195 674Q145 674 145 549Q145 423 195 423Q219 423 233 459T248 549ZM197 -56Q187 -56 182 -49T176 -35Q176 -33 178 -27Q179 -25 399 356T623 741Q626 750 639 750Q648 750 654 744T659 729Q657 721 435 336T207 -52Q203 -56 197 -56ZM500 146Q500 235 542 291T639 347Q692 347 734 293T776 146Q776 53 733 -1T639 -56Q587 -56 544 -2T500 146ZM692 146Q692 199 678 235T639 271Q589 271 589 146Q589 20 639 20Q663 20 677 56T692 146\",38:\"156 502Q156 600 198 658T302 716Q367 716 405 665T444 549Q444 531 442 523Q426 446 304 348L287 334Q305 297 340 249T402 170T430 139T443 149T472 181T509 231T549 303T583 394Q584 398 586 404Q587 408 587 409Q588 409 626 399T665 388Q663 381 660 369T644 322T614 253T567 176T502 98L491 87Q534 57 584 57Q653 57 700 75Q702 75 702 34T700 -7Q652 -22 586 -22H580Q505 -22 434 26L421 34Q419 33 405 25T374 11T336 -4T285 -17T226 -22Q143 -22 93 31T42 152Q42 184 51 211T81 260T111 291T144 317L184 348L178 365Q156 430 156 502ZM359 552Q359 588 345 614T302 640Q292 640 282 636T260 622T241 590T233 535Q236 474 253 417L257 407L271 419Q312 454 330 479Q359 514 359 552ZM345 102Q262 190 216 277Q215 277 204 267T180 247T165 236Q135 208 135 159Q135 123 152 97T198 61Q207 58 227 58Q286 58 357 89L345 102\",39:\"90 596V694H188V597L139 471H89L104 532Q119 593 120 594Q120 596 105 596H90\",40:\"74 250Q74 564 240 733L257 750H333L323 739Q167 573 167 250T323 -239L333 -250H257L240 -233Q74 -63 74 250\",41:\"221 -73T221 250T65 739L55 750H131L148 733Q314 567 314 250T148 -233L131 -250H55L65 -239Q221 -73 221 250\",42:\"208 717Q211 731 222 740T250 750Q265 750 277 741T291 717Q291 706 290 675T286 617L285 591L329 622Q369 651 376 655T393 659Q411 659 423 647T436 616Q436 609 434 603T429 594T419 585T407 577T389 567T368 556L316 528L368 500Q421 472 429 464Q436 455 436 440Q436 422 423 409T393 396Q390 396 388 396T384 397T380 398T375 401T367 406T358 413T346 422T329 434L285 465Q284 465 285 438T289 381T291 347Q291 327 278 317T250 306Q234 306 222 315T208 339Q208 350 209 381T212 439L214 465L170 434Q130 405 123 401T106 397Q88 397 76 409T63 440Q63 447 65 453T70 462T80 471T92 479T110 489T131 500L183 528L131 556Q78 584 70 592Q63 601 63 616Q63 634 76 647T106 660Q109 660 111 660T115 659T119 658T124 655T132 650T141 643T153 634T170 622L214 591L212 617Q211 643 210 674T208 717\",43:\"56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250\",44:\"90 0V98H188V1L139 -125H89L104 -64Q119 -3 120 -2Q120 0 105 0H90\",45:\"11 186V259H277V186H11\",46:\"90 0V98H188V0H90\",47:\"423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750\",58:\"90 346V444H188V346H90ZM90 0V98H188V0H90\",59:\"90 346V444H188V346H90ZM90 0V98H188V1L139 -125H89L104 -64Q119 -3 120 -2Q120 0 105 0H90\",61:\"56 350Q56 363 70 370H707Q722 362 722 350Q722 339 708 331L390 330H72Q56 335 56 350ZM56 150Q56 165 72 170H708Q722 160 722 150Q722 138 707 130H70Q56 137 56 150\",63:\"55 652Q63 658 77 666T132 689T214 704T265 703Q303 698 332 684T376 653T401 615T413 578T416 546Q416 475 360 426Q325 396 303 365T273 303T263 256T261 216V186H183V225Q184 281 194 322Q206 368 232 409T276 469T306 495Q323 517 323 550Q323 596 297 612T223 629Q187 629 157 618Q122 607 91 583L83 576L55 652ZM173 0V98H271V0H173\",64:\"422 576Q440 576 456 573T480 566L488 563Q488 565 484 571T472 588T452 607T424 622T387 629Q294 629 220 550T146 347Q146 233 210 155T365 66Q376 65 400 65Q465 68 517 86L532 91H612L598 76Q511 -11 388 -11Q250 -11 153 93T56 347Q56 454 107 538T231 663T378 704Q446 704 492 680T564 608T599 506T611 376Q611 320 607 299Q595 227 546 173T422 118Q343 118 288 185T232 347Q232 444 287 510T422 576ZM520 347Q520 429 487 465T421 501Q385 501 354 461T323 347Q323 270 355 232T422 193Q454 193 487 229T520 347\",91:\"94 -250V750H266V674H181V-174H266V-250H94\",93:\"22 674V750H194V-250H22V-174H107V674H22\",94:\"146 612L212 694H287L353 612Q417 532 420 529Q421 528 418 527Q414 527 383 527H345L250 639Q244 633 199 580L154 527H116Q79 528 79 529Q82 532 146 612\",95:\"0 -114V-38H499V-114H0\",126:\"83 204Q86 254 113 290T186 327Q211 327 251 299T312 270Q337 270 340 315V327H416V316Q413 258 382 226T315 193Q289 193 249 221T187 250Q162 250 159 205V193H83V204\",305:\"74 0V444H164V0H74\",567:\"-35 -95Q-4 -126 34 -126Q58 -126 76 -116T100 -88Q102 -82 102 181V444H192V180Q191 -45 191 -70T184 -113Q171 -152 140 -178T63 -205Q34 -205 4 -197T-43 -181T-59 -171L-47 -133L-35 -95\",768:\"-415 692L-417 694H-324L-262 612Q-249 594 -233 572T-208 539L-200 528L-237 527H-275L-344 608Q-359 625 -378 647T-406 680T-415 692\",769:\"-239 612L-177 694H-84L-86 692Q-86 691 -95 681T-123 648T-157 608L-226 527H-264L-301 528L-293 539Q-285 550 -269 572T-239 612\",770:\"-354 612L-288 694H-213L-147 612Q-83 532 -80 529Q-79 528 -82 527Q-86 527 -117 527H-155L-250 639Q-256 633 -301 580L-346 527H-384Q-421 528 -421 529Q-418 532 -354 612\",771:\"-417 554Q-414 604 -387 640T-314 677Q-289 677 -249 649T-188 620Q-163 620 -160 665V677H-84V666Q-87 608 -118 576T-185 543Q-211 543 -251 571T-313 600Q-338 600 -341 555V543H-417V554\",772:\"-431 552V631H-70V552H-431\",774:\"-250 508Q-331 508 -379 567T-427 689V694H-351V685Q-348 649 -321 620T-250 591Q-206 591 -180 619T-150 685V694H-74V689Q-74 624 -122 566T-250 508\",775:\"-302 576V680H-198V576H-302\",776:\"-397 582V680H-299V582H-397ZM-202 582V680H-104V582H-202\",778:\"-319 611Q-319 649 -285 671T-211 694Q-164 694 -132 671T-99 611Q-99 572 -133 550T-209 527T-285 549T-319 611ZM-155 610Q-155 635 -171 643T-215 651Q-263 651 -263 610Q-263 570 -211 570H-209H-207Q-155 570 -155 610\",779:\"-250 693Q-317 544 -323 527H-399L-343 694H-296Q-250 694 -250 693ZM-84 693Q-151 544 -157 527H-233L-177 694H-130Q-84 694 -84 693\",780:\"-421 652Q-422 653 -419 654Q-415 654 -384 654H-346L-301 601Q-287 585 -275 571T-258 551T-250 542L-155 654H-117Q-80 653 -80 652Q-83 649 -147 569L-213 487H-288L-354 569Q-418 649 -421 652\",913:\"183 181Q183 179 152 91T118 0H28L154 346L280 693Q281 694 333 694H385L511 349Q636 4 638 2Q638 0 584 0H530L464 183H184L183 181ZM324 606Q319 578 292 492T238 332T210 256Q210 254 324 254T438 255L429 281L419 308Q409 336 395 378T365 465T339 551T324 611V606\",914:\"425 363Q438 363 465 353T526 324T585 270T610 192Q610 132 561 78T426 7Q404 2 387 2T240 0H90V694H227Q373 693 396 689Q484 673 533 623T583 517Q583 494 574 473T551 437T520 409T487 388T456 374T433 366L425 363ZM490 516Q490 527 485 539T467 568T423 599T347 621Q340 622 262 623H188V399H261H286Q432 399 478 475Q490 496 490 516ZM514 190Q514 245 462 280T343 322Q336 323 259 323H188V71H274Q365 72 388 77Q445 88 479 121T514 190\",915:\"87 0V691H499V611H345L191 612V0H87\",916:\"203 348L362 694H470L629 348Q789 2 790 1Q790 0 416 0T42 1Q43 2 203 348ZM630 98Q630 100 584 198T481 422T407 603L405 610L403 600Q388 544 191 122L180 99L405 98H630\",917:\"86 0V691H541V611H366L190 612V397H513V321H190V85H372L554 86V0H86\",918:\"69 617V694H555V643L373 362Q190 81 190 79H234Q244 79 272 79T344 80T419 81H560V0H55V53L237 334Q420 615 420 617Q413 618 387 618Q380 618 334 618T245 617H69\",919:\"86 0V694H190V399H517V694H621V0H517V323H190V0H86\",920:\"56 344Q56 430 86 502T164 619T271 690T388 716Q448 716 506 691T613 619T692 501T722 344Q722 188 624 84T389 -21Q252 -21 154 83T56 344ZM624 345Q624 423 597 488T513 596T380 639Q343 639 305 621T232 568T175 475T153 344Q153 216 222 136T388 56Q487 56 555 138T624 345ZM209 299V397H568V299H209\",921:\"87 0V694H191V0H87\",922:\"88 0V694H188V519L189 343L525 694H638L375 419L651 0H541L309 351L188 225V0H88\",923:\"294 606Q294 574 252 430T163 144T117 0H72Q28 0 28 1T141 348L254 694H357L469 348Q582 2 582 1T527 0L473 1L469 11Q469 13 427 141T343 411T296 599L294 610V606\",924:\"92 0V694H228L233 680Q236 675 284 547T382 275T436 106Q446 149 497 292T594 558L640 680L645 694H782V0H689V305L688 606Q688 577 500 78L479 23H392L364 96Q364 97 342 156T296 280T246 418T203 544T186 609V588Q185 568 185 517T185 427T185 305V0H92\",925:\"88 0V694H235L252 659Q261 639 364 428T526 84V694H619V0H472L455 35Q453 39 330 294T185 601L181 611V0H88\",926:\"47 600V688H619V600H47ZM111 314V401H555V314H111ZM42 0V88H624V0H42\",927:\"55 345Q55 504 149 609T361 715Q386 715 406 713Q521 696 600 592T680 344Q680 193 590 86T368 -22Q239 -22 147 84T55 345ZM276 59T368 59T518 146T576 360Q576 473 525 545T401 634Q371 637 362 637Q284 637 222 562T159 360T217 147\",928:\"86 0V691H621V0H517V615H190V0H86\",929:\"88 0V694H230Q347 693 370 692T410 686Q487 667 535 611T583 485Q583 409 527 348T379 276Q369 274 279 274H192V0H88ZM486 485Q486 523 471 551T432 593T391 612T357 621Q350 622 268 623H189V347H268Q350 348 357 349Q370 351 383 354T416 368T450 391T475 429T486 485\",931:\"55 0Q56 3 171 167T288 332Q288 334 172 474L55 615V694H666V614H428L190 615L412 347L322 218Q236 97 228 84L447 85H666V0H55\",932:\"36 608V688H644V608H518L392 609V0H288V609L162 608H36\",933:\"55 565Q59 625 105 670T219 716H222Q310 716 353 627Q376 583 386 524L389 510L393 532Q397 555 407 584T433 644T482 695T557 716Q621 716 669 673T722 565V555H629V563Q627 592 607 615T557 638Q530 638 511 629T479 598T459 553T447 488T442 411T441 319V202V0H337V202Q337 453 331 497Q313 634 226 638Q185 638 167 612T148 563V555H55V565\",934:\"666 347Q666 326 661 302T638 247T594 190T520 140T413 107H410V0H312V54Q312 107 311 107Q286 107 229 128T125 192Q55 260 55 347Q55 396 77 438T131 507T200 552T265 579T311 587Q312 587 312 641V694H410V587H413Q476 576 524 552T598 502T640 444T661 390T666 347ZM310 510Q305 510 291 507T252 492T208 464T172 416T157 347T171 279T204 233T247 205T286 190T310 184H312V347Q312 510 310 510ZM564 347Q564 385 549 416T514 463T470 491T433 505T414 509L410 510V184Q413 184 426 187T464 200T510 227T548 275T564 347\",935:\"14 0Q16 5 144 184T275 367L153 528Q121 571 88 615T42 674T28 694H150L228 584Q315 463 316 461L326 448L497 694H610L609 692Q606 689 492 528Q440 454 409 410T378 366Q378 365 515 182L652 0H531L326 292Q326 293 299 254T226 146L128 0H14\",936:\"340 187V694H438V187Q481 206 495 219Q518 239 533 267T553 332T560 386T562 435Q562 576 593 608Q608 621 637 621H670H722V545H719Q718 545 715 545T710 544Q679 536 666 487Q664 474 662 429T654 344T633 259T580 175T486 119Q450 109 438 108V0H340V108L326 110Q122 149 117 415Q116 460 111 487Q98 536 67 544Q65 544 62 544T58 545H55V621H107Q160 621 163 620Q191 613 202 573Q213 536 213 473T220 351T256 249Q262 239 270 230T285 216T301 205T316 197T329 192T340 187\",937:\"55 462Q55 561 141 638T359 716Q492 716 579 640T666 462Q666 407 642 347T579 222T529 126Q515 91 515 86Q517 85 528 85Q530 85 552 85T596 86H677V0H425V14Q429 79 465 168L492 228Q494 232 504 254T516 283T527 310T539 340T548 368T556 399T560 428T562 460Q562 531 510 585T361 639Q263 639 211 585T159 460Q159 422 170 378T192 309T229 228L256 168Q292 79 296 14V0H44V86H125Q146 86 168 86T193 85L206 86Q206 103 183 148T131 241T79 352T55 462\",8211:\"0 236V312H499V236H0\",8212:\"0 236V312H999V236H0\",8213:\"0 236V312H999V236H0\",8215:\"0 -114V-38H499V-114H0\",8216:\"90 568L140 694H189L174 633Q159 572 158 571Q158 569 173 569H188V471H90V568\",8217:\"90 596V694H188V597L139 471H89L104 532Q119 593 120 594Q120 596 105 596H90\",8220:\"174 568L224 694H273L258 633Q243 572 242 571Q242 569 257 569H272V471H174V568ZM368 568L418 694H467L452 633Q437 572 436 571Q436 569 451 569H466V471H368V568\",8221:\"33 596V694H131V597L82 471H32L47 532Q62 593 63 594Q63 596 48 596H33ZM227 596V694H325V597L276 471H226L241 532Q256 593 257 594Q257 596 242 596H227\",8260:\"423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750\",8710:\"203 348L362 694H470L629 348Q789 2 790 1Q790 0 416 0T42 1Q43 2 203 348ZM630 98Q630 100 584 198T481 422T407 603L405 610L403 600Q388 544 191 122L180 99L405 98H630\"},{})},3377:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.scriptBold=void 0;var H=L(6466);Object.defineProperty(T,\"scriptBold\",{enumerable:!0,get:function(){return H.scriptBold}})},8318:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.script=void 0;var H=L(3776);Object.defineProperty(T,\"script\",{enumerable:!0,get:function(){return H.script}})},2226:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.smallop=void 0;var H=L(9403),V=L(7405);T.smallop=(0,H.AddPaths)(V.smallop,{40:\"152 251Q152 646 388 850H416Q422 844 422 841Q422 837 403 816T357 753T302 649T255 482T236 250Q236 124 255 19T301 -147T356 -251T403 -315T422 -340Q422 -343 416 -349H388Q359 -325 332 -296T271 -213T212 -97T170 56T152 251\",41:\"305 251Q305 -145 69 -349H56Q43 -349 39 -347T35 -338Q37 -333 60 -307T108 -239T160 -136T204 27T221 250T204 473T160 636T108 740T60 807T35 839Q35 850 50 850H56H69Q197 743 256 566Q305 425 305 251\",47:\"481 838Q489 850 500 850Q508 850 515 844T522 827Q521 824 311 248T96 -337Q90 -349 77 -349Q68 -349 62 -343T55 -326Q56 -323 266 253T481 838\",91:\"202 -349V850H394V810H242V-309H394V-349H202\",92:\"522 -326Q522 -337 515 -343T500 -349Q487 -349 481 -337Q477 -328 267 248T55 827Q54 835 60 842T76 850Q89 850 96 838Q100 829 310 253T522 -326\",93:\"22 810V850H214V-349H22V-309H174V810H22\",123:\"477 -343L471 -349H458Q432 -349 367 -325T273 -263Q258 -245 250 -212L249 -51Q249 -27 249 12Q248 118 244 128Q243 129 243 130Q220 189 121 228Q109 232 107 235T105 250Q105 256 105 257T105 261T107 265T111 268T118 272T128 276T142 283T162 291Q224 324 243 371Q243 372 244 373Q248 384 249 469Q249 475 249 489Q249 528 249 552L250 714Q253 728 256 736T271 761T299 789T347 816T422 843Q440 849 441 849H443Q445 849 447 849T452 850T457 850H471L477 844V830Q477 820 476 817T470 811T459 807T437 801T404 785Q353 760 338 724Q333 710 333 550Q333 526 333 492T334 447Q334 393 327 368T295 318Q257 280 181 255L169 251L184 245Q318 198 332 112Q333 106 333 -49Q333 -209 338 -223Q351 -255 391 -277T469 -309Q477 -311 477 -329V-343\",125:\"110 849L115 850Q120 850 125 850Q151 850 215 826T309 764Q324 747 332 714L333 552Q333 528 333 489Q334 383 338 373Q339 372 339 371Q353 336 391 310T469 271Q477 268 477 251Q477 241 476 237T472 232T456 225T428 214Q357 179 339 130Q339 129 338 128Q334 117 333 32Q333 26 333 12Q333 -27 333 -51L332 -212Q328 -228 323 -240T302 -271T255 -307T175 -338Q139 -349 125 -349T108 -346T105 -329Q105 -314 107 -312T130 -304Q233 -271 248 -209Q249 -203 249 -49V57Q249 106 253 125T273 167Q307 213 398 245L413 251L401 255Q265 300 250 389Q249 395 249 550Q249 710 244 724Q224 774 112 811Q105 813 105 830Q105 845 110 849\",710:\"279 669Q273 669 142 610T9 551L0 569Q-8 585 -8 587Q-8 588 -7 588L12 598Q30 608 66 628T136 666L277 744L564 587L555 569Q549 556 547 554T544 552Q539 555 410 612T279 669\",732:\"374 597Q337 597 269 627T160 658Q101 658 34 606L24 597L12 611Q1 624 1 626Q1 627 27 648T55 671Q120 722 182 722Q219 722 286 692T395 661Q454 661 521 713L531 722L543 708Q554 695 554 693Q554 692 528 671T500 648Q434 597 374 597\",770:\"-277 669Q-283 669 -414 610T-547 551L-556 569Q-564 585 -564 587Q-564 588 -563 588L-544 598Q-526 608 -490 628T-420 666L-279 744L8 587L-1 569Q-7 556 -9 554T-12 552Q-17 555 -146 612T-277 669\",771:\"-182 597Q-219 597 -287 627T-396 658Q-455 658 -522 606L-532 597L-544 611Q-555 624 -555 626Q-555 627 -529 648T-501 671Q-436 722 -374 722Q-337 722 -270 692T-161 661Q-102 661 -35 713L-25 722L-13 708Q-2 695 -2 693Q-2 692 -28 671T-56 648Q-122 597 -182 597\",8214:\"257 0V602H300V0H257ZM478 0V602H521V0H478\",8260:\"481 838Q489 850 500 850Q508 850 515 844T522 827Q521 824 311 248T96 -337Q90 -349 77 -349Q68 -349 62 -343T55 -326Q56 -323 266 253T481 838\",8593:\"112 421L120 424Q127 427 136 430T161 441T191 458T224 481T260 510T295 546T328 591L333 600L340 589Q380 527 431 489T555 421V377L543 381Q445 418 368 492L355 504V0H312V504L299 492Q222 418 124 381L112 377V421\",8595:\"312 96V600H355V96L368 108Q445 182 543 219L555 223V179L546 176Q538 173 529 169T505 158T475 141T442 119T407 90T372 53T339 9L334 0L327 11Q287 73 236 111T112 179V223L124 219Q222 182 299 108L312 96\",8657:\"142 329Q300 419 389 599Q389 598 399 579T420 541T452 494T497 438T558 383T636 329T708 294L721 289V246Q718 246 694 256T623 293T532 356L522 364L521 182V0H478V405L466 417Q436 450 389 516Q388 515 378 500T352 463T312 417L300 405V0H257V364L247 356Q202 320 155 293T82 256L57 246V289L70 294Q101 305 142 329\",8659:\"257 236V600H300V195L312 183Q342 150 389 84Q390 85 400 100T426 137T466 183L478 195V600H521V418L522 236L532 244Q576 280 623 307T696 344L721 354V311L708 306Q677 295 636 271Q478 181 389 1Q389 2 379 21T358 59T326 106T281 162T220 217T142 271T70 306L57 311V354Q60 354 83 345T154 308T247 244L257 236\",8719:\"158 656Q147 684 131 694Q110 707 69 710H55V750H888V710H874Q840 708 820 698T795 678T786 656V-155Q798 -206 874 -210H888V-250H570V-210H584Q618 -208 638 -197T663 -178T673 -155V710H270V277L271 -155Q283 -206 359 -210H373V-250H55V-210H69Q103 -208 123 -197T148 -178T158 -155V656\",8720:\"158 656Q147 684 131 694Q110 707 69 710H55V750H373V710H359Q325 708 305 698T280 678T271 656L270 223V-210H673V656Q666 672 663 679T639 697T584 710H570V750H888V710H874Q840 708 820 698T795 678T786 656V-155Q798 -206 874 -210H888V-250H55V-210H69Q103 -208 123 -197T148 -178T158 -155V656\",8721:\"61 748Q64 750 489 750H913L954 640Q965 609 976 579T993 533T999 516H979L959 517Q936 579 886 621T777 682Q724 700 655 705T436 710H319Q183 710 183 709Q186 706 348 484T511 259Q517 250 513 244L490 216Q466 188 420 134T330 27L149 -187Q149 -188 362 -188Q388 -188 436 -188T506 -189Q679 -189 778 -162T936 -43Q946 -27 959 6H999L913 -249L489 -250Q65 -250 62 -248Q56 -246 56 -239Q56 -234 118 -161Q186 -81 245 -11L428 206Q428 207 242 462L57 717L56 728Q56 744 61 748\",8730:\"263 249Q264 249 315 130T417 -108T470 -228L725 302Q981 837 982 839Q989 850 1001 850Q1008 850 1013 844T1020 832V826L741 243Q645 43 540 -176Q479 -303 469 -324T453 -348Q449 -350 436 -350L424 -349L315 -96Q206 156 205 156L171 130Q138 104 137 104L111 130L263 249\",8739:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612\",8741:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612ZM368 612Q373 627 388 627Q404 627 409 612Q410 610 410 306T409 0Q406 -15 389 -15Q371 -15 368 0V10Q368 19 368 35T368 73T368 122T367 179T367 241T367 306T367 370T367 433T367 489T368 538T368 576T368 602V612\",8747:\"113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q220 -247 232 -218T251 -133T262 -15T276 155T297 367Q300 390 305 438T314 512T325 580T340 647T361 703T390 751T428 784T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q475 768 460 756T434 716T418 652T407 559T398 444T387 300T369 133Q349 -38 337 -102T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244\",8748:\"113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q220 -247 232 -218T251 -133T262 -15T276 155T297 367Q300 390 305 438T314 512T325 580T340 647T361 703T390 751T428 784T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q475 768 460 756T434 716T418 652T407 559T398 444T387 300T369 133Q349 -38 337 -102T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244ZM460 -244Q460 -246 466 -251T486 -263T514 -269Q532 -269 546 -260Q567 -247 579 -218T598 -133T609 -15T623 155T644 367Q647 390 652 438T661 512T672 580T687 647T708 703T737 751T775 784T826 804Q828 804 835 804T848 805Q899 802 928 769T957 695Q957 669 941 657T908 645Q889 645 874 658T859 694Q859 705 863 714T873 729T885 737T895 742L899 743Q899 745 892 751T872 762T845 768Q822 768 807 756T781 716T765 652T754 559T745 444T734 300T716 133Q696 -38 684 -102T650 -207Q603 -306 516 -306Q466 -306 434 -272T402 -196Q402 -170 418 -158T451 -146Q470 -146 485 -159T500 -195Q500 -206 496 -215T486 -230T474 -238T464 -242L460 -244\",8749:\"113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q220 -247 232 -218T251 -133T262 -15T276 155T297 367Q300 390 305 438T314 512T325 580T340 647T361 703T390 751T428 784T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q475 768 460 756T434 716T418 652T407 559T398 444T387 300T369 133Q349 -38 337 -102T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244ZM460 -244Q460 -246 466 -251T486 -263T514 -269Q532 -269 546 -260Q567 -247 579 -218T598 -133T609 -15T623 155T644 367Q647 390 652 438T661 512T672 580T687 647T708 703T737 751T775 784T826 804Q828 804 835 804T848 805Q899 802 928 769T957 695Q957 669 941 657T908 645Q889 645 874 658T859 694Q859 705 863 714T873 729T885 737T895 742L899 743Q899 745 892 751T872 762T845 768Q822 768 807 756T781 716T765 652T754 559T745 444T734 300T716 133Q696 -38 684 -102T650 -207Q603 -306 516 -306Q466 -306 434 -272T402 -196Q402 -170 418 -158T451 -146Q470 -146 485 -159T500 -195Q500 -206 496 -215T486 -230T474 -238T464 -242L460 -244ZM807 -244Q807 -246 813 -251T833 -263T861 -269Q880 -269 893 -260Q914 -247 926 -218T945 -133T956 -15T970 155T991 367Q994 390 999 438T1008 512T1019 580T1034 647T1055 703T1084 751T1122 784T1173 804Q1175 804 1182 804T1195 805Q1246 802 1275 769T1304 695Q1304 669 1288 657T1255 645Q1236 645 1221 658T1206 694Q1206 705 1210 714T1220 729T1232 737T1242 742L1246 743Q1246 745 1239 751T1219 762T1192 768Q1169 768 1154 756T1128 716T1112 652T1101 559T1092 444T1081 300T1063 133Q1043 -38 1031 -102T997 -207Q950 -306 863 -306Q813 -306 781 -272T749 -196Q749 -170 765 -158T798 -146Q817 -146 832 -159T847 -195Q847 -206 843 -215T833 -230T821 -238T811 -242L807 -244\",8750:\"269 74L256 80Q244 85 227 97T191 128T161 179T148 250Q148 332 199 379T302 433L306 434L307 444Q309 456 313 495T321 553T331 607T345 664T365 712T393 756T431 785T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q471 768 454 752T427 693T414 626T406 536Q405 530 405 527L397 425L404 422Q410 419 421 413T445 399T470 376T494 345T511 303T518 250Q518 205 502 169T460 112T410 80T364 66L360 65L359 55Q357 38 353 4T346 -43T340 -81T333 -118T326 -148T316 -179T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q231 -241 242 -183T266 33L269 74ZM272 122Q272 156 300 391Q300 392 299 392Q287 392 263 379T213 331T187 249Q187 211 205 180T239 137T272 116V122ZM366 107Q378 107 402 119T453 167T479 249Q479 340 394 383V377Q394 375 394 374T393 371T393 366T392 357T391 342T389 321T386 291T382 251T377 199T369 133Q366 112 366 107\",8896:\"119 -249T97 -249T65 -235T55 -207Q55 -201 56 -198Q58 -190 218 268T380 729Q392 750 416 750Q438 750 451 732Q453 728 534 498T695 36L775 -194Q777 -204 777 -208Q777 -222 767 -235T735 -249Q713 -249 700 -231Q696 -225 557 177L416 579L276 177Q136 -226 132 -231Q119 -249 97 -249\",8897:\"55 708Q55 729 68 739T96 750Q119 750 132 731Q136 726 276 323L416 -79L557 323Q696 725 700 731Q713 749 735 749Q756 749 766 736T777 708Q777 700 696 466T533 1T451 -232Q436 -249 416 -249Q402 -249 391 -241Q384 -236 380 -226Q368 -198 219 230Q55 697 55 708\",8898:\"139 -217Q127 -241 114 -246Q106 -249 97 -249Q67 -249 57 -220Q55 -214 55 102Q55 152 55 221T54 312Q54 422 60 464T91 554Q120 612 165 654T257 714T337 741T392 749Q393 750 402 750Q414 750 422 749Q557 749 660 659T776 430Q777 422 777 102Q777 -214 775 -220Q765 -249 735 -249Q716 -249 708 -241T694 -217L692 428L690 441Q674 540 597 603T416 666H409Q388 666 364 662T294 638T212 581Q156 523 142 441L140 428L139 105V-217\",8899:\"96 750Q103 750 109 748T120 744T127 737T133 730T137 723T139 718V395L140 73L142 60Q159 -43 237 -104T416 -166Q521 -166 597 -103T690 60L692 73L694 718Q708 749 735 749Q765 749 775 720Q777 714 777 398Q777 78 776 71Q766 -51 680 -140Q571 -249 416 -249H411Q261 -249 152 -140Q66 -51 56 71Q55 78 55 398Q55 714 57 720Q60 734 70 740Q80 750 96 750\",8968:\"202 -349V850H449V810H242V-349H202\",8969:\"22 810V850H269V-349H229V810H22\",8970:\"202 -349V850H242V-309H449V-349H202\",8971:\"229 -309V850H269V-349H22V-309H229\",9001:\"373 850Q392 850 394 832Q394 825 267 538L139 250L267 -38Q394 -325 394 -332Q392 -350 375 -350Q361 -350 356 -338Q354 -331 289 -186T161 103T97 250T160 397T289 685T356 838Q362 850 373 850\",9002:\"77 832Q77 837 82 843T98 850Q110 849 115 838Q117 831 182 686T310 397T374 250T311 103T182 -185T115 -338Q110 -350 96 -350Q79 -350 77 -332Q77 -325 204 -38L332 250L204 538Q77 825 77 832\",9168:\"312 0V602H355V0H312\",10072:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612\",10216:\"373 850Q392 850 394 832Q394 825 267 538L139 250L267 -38Q394 -325 394 -332Q392 -350 375 -350Q361 -350 356 -338Q354 -331 289 -186T161 103T97 250T160 397T289 685T356 838Q362 850 373 850\",10217:\"77 832Q77 837 82 843T98 850Q110 849 115 838Q117 831 182 686T310 397T374 250T311 103T182 -185T115 -338Q110 -350 96 -350Q79 -350 77 -332Q77 -325 204 -38L332 250L204 538Q77 825 77 832\",10752:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM555 -165Q672 -165 767 -108T916 44T970 250Q970 418 861 532T600 664Q591 665 548 665Q446 665 353 614T200 466T140 250V243Q140 88 248 -30Q262 -46 280 -62T338 -105T434 -148T555 -165ZM478 250Q478 288 503 307T551 326Q586 326 609 305T632 250Q632 217 610 196T555 174T500 196T478 250\",10753:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM513 478Q513 664 512 664Q504 664 481 660T406 637T313 588Q281 564 255 537T211 483T181 431T161 382T150 342T144 310T141 292H513V478ZM798 588Q758 616 711 634T639 658T602 663L597 664V292H969Q969 293 967 309T960 341T949 381T930 430T900 482T856 537T798 588ZM513 -164V208H141Q142 205 144 189T149 160T158 125T173 83T196 39T229 -9Q249 -34 273 -55T318 -92T363 -119T405 -138T444 -150T475 -158T499 -162T513 -164ZM775 -103Q801 -87 823 -68T863 -30T894 10T919 49T937 88T950 123T959 154T964 180T968 198L969 208H597V-164Q599 -163 616 -161T647 -155T683 -145T728 -128T775 -103\",10754:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM600 664Q591 665 548 665Q414 665 306 583L292 573L423 441L555 310L687 441L818 573L804 583Q714 650 600 664ZM364 118L495 250L364 382L232 513L223 500Q140 391 140 250Q140 107 223 0L232 -13L364 118ZM970 250Q970 389 887 501L878 512Q878 513 861 496T812 447T746 381L615 250L746 118L878 -13L887 0Q970 109 970 250ZM687 59L555 190L423 59L292 -73L306 -83Q416 -166 555 -166T804 -83L818 -73L687 59\",10756:\"96 750Q103 750 109 748T120 744T127 737T133 730T137 723T139 718V395L140 73L142 60Q159 -43 237 -104T416 -166Q521 -166 597 -103T690 60L692 73L694 718Q708 749 735 749Q765 749 775 720Q777 714 777 398Q777 78 776 71Q766 -51 680 -140Q571 -249 416 -249H411Q261 -249 152 -140Q66 -51 56 71Q55 78 55 398Q55 714 57 720Q60 734 70 740Q80 750 96 750ZM223 276Q223 282 224 287T227 296T232 302T238 308T243 313T250 316L254 319H374V376V406Q374 438 382 454T418 470Q443 467 450 453T458 410V376V319H579Q580 319 583 317T589 313T594 308T600 302T604 295T608 287T609 276Q609 253 587 241Q577 235 513 235H458V178Q458 176 458 166T459 148Q459 84 415 84Q401 84 390 93T375 117Q374 120 374 178V235H319Q317 235 307 235T290 234Q223 234 223 276\",10758:\"777 -217Q766 -244 745 -249H88Q64 -242 57 -220Q55 -214 55 250T57 720Q60 734 70 740Q80 750 96 750Q127 750 137 720Q139 714 139 274V-166H693V274Q693 714 695 720Q705 749 735 749Q766 749 775 719Q777 713 777 248V-217\",12296:\"373 850Q392 850 394 832Q394 825 267 538L139 250L267 -38Q394 -325 394 -332Q392 -350 375 -350Q361 -350 356 -338Q354 -331 289 -186T161 103T97 250T160 397T289 685T356 838Q362 850 373 850\",12297:\"77 832Q77 837 82 843T98 850Q110 849 115 838Q117 831 182 686T310 397T374 250T311 103T182 -185T115 -338Q110 -350 96 -350Q79 -350 77 -332Q77 -325 204 -38L332 250L204 538Q77 825 77 832\"},{10764:\"\\u222c\\u222c\"})},6385:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texCalligraphicBold=void 0;var H=L(9403),V=L(8105);T.texCalligraphicBold=(0,H.AddPaths)(V.texCalligraphicBold,{65:\"761 751Q784 751 784 728V711Q784 570 795 417T820 191Q844 76 865 76Q868 76 902 93T962 112H973Q989 104 989 94Q989 92 987 86Q978 47 846 -11Q812 -25 779 -26Q722 -26 708 9Q688 47 669 161H524L379 162L359 136Q286 43 234 -3T142 -49T71 -19T39 55Q39 92 60 131T103 174Q113 174 117 167T124 149T136 128T166 110Q183 105 190 105Q230 105 341 246Q401 322 453 397T531 514T582 601T611 651H640V663Q640 692 676 718T745 750Q747 750 752 750T761 751ZM658 266Q653 312 649 377T644 489T641 541V556L557 415Q500 325 448 253Q467 261 524 261H568H658V266\",66:\"441 83Q571 83 571 195Q571 246 538 279T466 322T386 333Q378 333 357 330T329 327Q307 327 307 345Q307 354 313 365T347 396T419 430Q546 472 581 498Q594 508 594 535Q594 574 567 589T508 604Q469 604 442 583Q390 546 342 457T265 256Q237 148 186 60Q167 29 144 13Q105 -15 68 -17H65Q40 -17 40 1Q40 7 53 29T87 100T124 210Q162 373 190 575Q188 575 174 567T138 550T98 542Q75 542 75 560Q75 588 123 618Q135 625 203 659T281 696Q299 703 316 703Q339 703 339 685Q339 656 328 583L333 588Q338 592 346 599T367 615T394 634T428 654T467 674T511 690T559 701T611 705Q651 704 681 689Q739 659 739 598Q739 507 595 427L584 421Q585 420 595 416T610 410T626 402T644 392T660 380T677 365T691 347T703 325T710 299T715 268Q717 193 665 130Q622 73 531 28T348 -17Q275 -17 225 10Q206 19 200 24T193 36Q193 57 231 86T311 119H322Q386 83 441 83\",67:\"243 -20Q135 -20 78 48T20 218Q20 280 39 344T98 470T193 580T324 661T488 702H490Q491 702 493 702T498 703T507 703T518 702H526Q599 702 599 631Q599 597 577 550T541 486Q523 463 490 447T431 430Q423 430 419 433Q409 437 409 450Q410 456 432 499T454 567Q454 586 446 594T415 603Q316 603 254 532Q216 487 190 421T164 284Q164 228 181 186T226 122T282 90T340 80Q377 80 405 96T449 131T492 167T553 187H555Q580 187 580 168Q580 153 551 123T476 60T367 4T243 -20\",68:\"107 0Q92 5 92 18Q92 33 113 53T160 86Q170 91 182 94T197 100L206 120Q248 226 273 337T304 501T309 585Q278 585 234 577T179 557Q172 550 166 532T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q281 686 447 686H480H517Q692 686 784 631Q885 571 885 450Q885 339 805 239T586 75T286 1Q276 0 187 0H107ZM741 391Q741 424 731 452T694 510T613 558T481 584Q476 584 468 584T457 585L449 586V579Q441 501 425 424T391 292T357 193T330 125T319 100H324Q511 100 628 175Q688 215 714 275T741 391\",69:\"495 516Q485 516 478 520T470 532Q470 537 476 550T482 570Q482 589 465 596T401 603Q344 603 319 582Q295 558 295 519Q295 493 312 474T355 445T407 432T455 427Q477 427 477 409Q477 395 453 371T389 333Q380 330 345 327T279 312T223 272Q181 223 181 176Q181 131 225 107T324 83Q366 83 395 98T448 136T487 167Q517 185 547 187H551Q574 187 574 170Q574 151 535 113T421 36T271 -15Q260 -16 226 -16Q181 -16 152 -9Q104 4 71 33T37 111Q37 140 50 176T106 263T216 356Q215 357 207 362T190 374T172 392T156 419T150 456Q150 521 208 580T341 670T474 702Q475 703 499 703Q528 703 547 701T586 693T615 673T627 637Q627 584 581 550T495 516\",70:\"812 567Q804 567 795 570T786 579Q786 586 647 586H559L558 582Q558 575 539 510T506 407L498 384H775Q788 378 790 368Q790 328 746 298T665 268Q646 268 642 284H457L447 261Q396 150 360 94Q329 46 270 8T149 -30Q123 -30 100 -24T63 -10T37 9T22 26T17 36Q17 59 56 88T135 119Q145 119 149 117T165 104Q187 78 227 72Q232 72 234 76Q245 93 273 145T350 323T424 570L428 586H276Q265 575 239 563T190 551Q180 551 174 556T167 569Q167 580 179 597T213 634T278 668T371 685Q374 686 624 686Q863 685 888 682Q917 678 927 663Q930 658 930 650Q930 624 888 596T812 567\",71:\"50 279Q50 361 88 438T190 570T335 661T503 702H514Q524 703 532 703Q671 703 671 626Q671 580 614 514T495 447Q472 447 472 465Q472 477 499 511T527 562Q527 582 507 592T433 602Q351 602 302 569Q252 535 223 469T194 344Q194 266 237 217T352 168Q401 168 442 205T505 316Q515 345 551 368T622 393H625Q649 393 649 376Q649 371 635 318T612 237Q580 129 540 62T442 -49Q353 -114 264 -114Q259 -114 252 -114L246 -113Q190 -113 142 -107T81 -96Q71 -90 71 -81Q71 -57 110 -30T187 2Q196 2 236 -4T338 -14Q371 -14 377 -9Q410 24 446 113L451 127Q353 68 253 68Q157 68 104 129T50 279\",72:\"42 447Q20 447 20 465Q20 481 47 515T119 589T239 657T392 686Q443 686 463 664T484 616Q484 570 473 506T452 401L441 360Q441 359 550 359H660L663 370Q684 435 716 522T758 624Q771 646 806 666T870 686Q894 686 894 668Q894 667 867 597T804 416T752 218Q737 135 737 93Q737 77 746 65T778 53Q799 53 803 54T814 63Q831 86 864 103T924 120Q946 120 946 100Q945 85 931 63T888 16T806 -27T684 -48H681Q625 -48 603 -10Q593 4 593 29Q593 71 603 131T624 230L634 269Q632 269 624 266Q610 261 600 261T507 259H411L399 222Q344 62 322 21Q301 -7 268 -24T209 -41H207Q187 -41 185 -25Q185 -17 192 2T220 71T261 184Q284 256 284 258Q284 259 227 259H170Q169 259 166 261T162 264T158 266T156 271T155 277Q155 296 184 320T250 356Q259 358 286 359Q312 359 312 360Q314 372 318 385Q332 450 339 526Q339 530 339 535T340 543Q340 586 296 586Q255 586 227 576T188 553T165 523T146 497Q127 476 97 462T42 447\",73:\"56 499Q32 499 32 516Q32 540 64 580T165 649Q241 682 365 685Q366 685 376 685T405 685T445 686T496 686T553 686H732Q746 677 746 668Q746 646 711 620T642 587L572 586H503Q479 546 458 479T424 352T383 224T318 111L309 101L412 100H514L523 109Q567 150 618 153Q644 153 644 135Q644 132 642 124Q629 86 581 52T476 6Q454 2 433 2T216 0Q-11 0 -15 2Q-27 6 -27 18Q-27 37 2 61T59 93Q77 100 142 100H198Q255 177 299 369Q337 513 382 574L391 586H348Q261 586 176 576Q163 543 124 521T56 499\",74:\"286 390Q263 390 263 407Q263 432 293 481T367 566Q511 687 724 687Q738 687 761 687T793 686H923Q937 677 937 668Q937 648 905 623T842 589Q829 587 817 586T802 585T795 583T788 578Q709 506 632 189Q622 153 615 134T588 81T537 17Q482 -39 404 -76T247 -114Q192 -114 158 -100Q53 -61 53 32Q53 59 58 73T79 102Q126 147 177 147Q200 147 200 128Q200 123 198 112T196 96Q196 47 238 17T345 -13Q362 -13 377 -9T404 0T426 16T444 34T459 55T470 76T478 97T483 116T488 132L490 141Q511 222 520 257T554 364T608 486T675 576L685 586H634H612Q532 586 484 564Q453 549 436 526T409 478T395 447Q378 424 345 407T286 390\",75:\"98 542Q75 542 75 560Q75 588 123 618Q132 624 199 657T275 694Q291 703 315 703Q327 703 332 699T338 690T339 670Q339 596 323 505T283 337T237 194T198 90L181 53Q170 31 136 8T68 -17H65Q40 -17 40 0L76 92Q112 185 150 322T194 564V578L168 565Q125 542 98 542ZM834 142Q834 125 819 100T774 48T692 3T576 -16H560Q540 -16 508 6Q469 33 422 108T342 267T309 398Q309 411 310 417T320 442T347 482Q401 542 517 615T710 702Q712 702 721 702T735 703Q772 703 791 690Q819 674 819 646T792 597T733 574H722Q704 584 704 599Q706 607 700 610T672 617L660 613Q609 595 524 538T423 450V440Q423 376 488 247T604 83Q621 70 640 70Q677 70 701 82Q713 87 718 101T737 132T783 160Q792 163 807 163Q834 163 834 142\",76:\"63 -17Q41 -17 41 0Q41 22 85 54Q101 68 113 92T133 141T154 219T182 315Q230 462 306 553Q345 599 391 632T478 678T543 697T582 703Q584 703 589 703T598 702Q643 702 666 676T689 613Q689 588 683 575Q674 551 632 524T552 496Q530 496 530 512Q530 517 531 525T533 538Q533 559 522 577T480 596H476Q462 596 451 588T415 544Q350 447 310 281Q284 181 261 136L255 124H285Q342 123 441 107T583 90L596 89Q603 116 647 144T729 173Q751 173 751 157Q751 118 685 60T523 -15Q514 -16 479 -16Q421 -16 320 0T171 18H155L142 10Q98 -17 63 -17\",77:\"38 20Q38 59 60 99T104 139Q106 139 126 125T176 106H181Q200 106 221 139T286 281Q322 370 342 451T368 581T376 634Q384 657 420 680T487 703Q502 703 507 696T522 649Q538 589 554 537Q579 453 609 372T660 248T686 202Q687 201 739 244T830 322L1166 642Q1225 700 1230 701Q1230 701 1237 703Q1258 703 1258 667L1253 637Q1248 607 1241 558T1227 451T1214 326T1209 202Q1209 77 1232 77Q1237 77 1269 94T1326 112H1329Q1353 112 1353 94Q1353 81 1334 60Q1311 37 1248 7T1150 -24H1141H1135Q1085 -24 1074 26Q1064 75 1064 134Q1064 239 1086 426Q1087 430 1087 434L1061 410Q871 227 783 149L694 76Q653 44 647 40T631 34Q620 34 616 37T594 63Q546 125 514 198Q467 307 423 449L418 466L412 444Q376 310 306 153Q278 88 251 45T201 -18T163 -43T131 -49Q102 -48 70 -31T38 20\",78:\"47 139Q81 105 122 105Q137 105 147 117Q159 134 182 199T234 381T274 610Q275 634 284 647Q297 666 327 684T389 703Q403 703 408 695T428 645Q480 490 567 298Q628 163 673 103Q674 102 674 102T675 106Q732 331 803 551Q842 674 875 725Q908 775 966 807T1081 840H1084Q1105 840 1105 803Q1105 768 1088 733T1051 689Q1045 686 1032 686Q986 683 948 663T901 624Q881 579 837 430T760 154L726 28Q725 28 725 28T723 25Q716 0 682 -24T611 -48Q600 -48 595 -45T576 -23Q522 44 480 124Q417 243 332 463L328 473L325 457Q291 293 227 124Q159 -49 72 -49Q38 -49 5 -28Q-24 -8 -24 21Q-24 58 -3 98T41 139H47\",79:\"433 703Q456 703 456 685Q456 672 441 655T407 627Q402 623 378 611T328 579T276 524Q207 434 207 324Q207 222 270 153T441 84Q566 84 651 177T737 400V405Q737 496 693 549T576 603Q542 603 510 560Q490 537 472 502T442 454Q397 412 346 409Q320 409 320 427Q320 430 322 436Q331 465 360 507T433 594T542 671T677 703Q776 703 829 636T882 468Q882 369 831 277T702 122T528 21T343 -17Q214 -17 139 61T63 257Q63 336 94 409T173 534T272 625T367 684T432 703H433\",80:\"170 -67Q147 -67 147 -49Q147 -42 162 -8T204 99T253 254Q274 332 288 415T305 542L308 585Q277 585 234 577T179 557Q172 550 166 532T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q279 686 448 686H495H537Q622 686 678 677T784 637Q846 598 846 533Q846 452 776 375T597 252T378 206H366L358 181Q341 130 316 68T282 -7Q262 -33 230 -50T170 -67ZM701 468Q701 512 661 540T570 577T461 586H448V582Q446 576 443 545T428 447T395 301L389 280Q390 280 398 284T419 295T441 303Q443 304 484 306T572 321T651 359Q701 402 701 468\",81:\"874 453Q874 372 836 298T750 177T638 89T543 33T486 8L483 7Q485 5 523 -7T622 -32T726 -46Q741 -46 746 -45T755 -41T762 -27Q770 -1 806 23T878 50H890Q905 42 905 33Q905 -8 838 -68T670 -145Q662 -146 628 -146Q538 -146 389 -100T164 -50Q132 -50 132 -32T162 11T227 47Q231 48 286 51T394 62T518 100T641 180Q730 271 730 387Q730 478 673 540T520 602Q410 602 337 525T264 355Q264 284 310 244T420 203Q476 203 568 222Q594 222 594 204Q594 184 565 161T508 128Q433 103 316 103Q227 103 174 157T120 290Q120 382 182 471T343 620T548 697Q578 703 601 703Q604 703 611 703T623 702Q663 702 687 696Q760 679 817 618T874 453\",82:\"159 0Q159 5 172 34T205 114T245 229T284 386T309 575V585H304Q303 585 295 585T282 584Q233 579 207 570T175 553T165 531T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q279 686 448 686H505H582Q683 686 745 672T834 611Q842 594 842 565Q842 523 824 484T780 419T722 370T669 336T632 318L619 312L626 302Q640 279 667 227T696 172Q717 133 735 112T762 88T784 84Q824 84 872 118T957 153Q981 153 981 136Q981 114 937 78T820 13T684 -17Q646 -17 616 8T569 66T526 151T477 234Q461 256 446 265Q437 272 421 274Q400 274 400 291Q400 311 430 336T495 371Q496 371 543 374T627 392T681 436Q699 467 699 503Q699 550 644 568T471 586H449V582Q449 581 447 559T438 499T422 413T393 298T348 165Q313 73 296 45Q282 24 249 4T185 -17Q159 -17 159 0\",83:\"204 476Q204 525 248 577T372 666T539 703T674 683T721 612Q721 588 714 569Q704 547 669 524T601 499Q573 499 573 516Q573 521 575 527T577 543Q577 563 568 574T548 588L539 590Q490 603 444 603Q418 603 394 597T364 583Q348 567 348 533Q348 493 382 466T459 425T555 387T633 330Q662 292 662 249Q662 153 544 69T257 -16Q218 -16 208 -15Q118 1 64 46Q25 76 25 126Q25 185 82 235T203 290H207Q229 290 231 274Q231 243 180 213Q173 209 172 206T170 189T171 170T183 150T216 121Q273 83 356 83Q412 83 459 100Q493 111 507 141Q518 165 518 185Q518 208 506 228T478 262T437 288T398 306T360 320Q316 335 285 352T239 384T215 416T205 443T204 467V476\",84:\"61 462H59Q38 462 38 479Q38 528 109 594T289 683L304 685L837 687L846 693Q889 720 923 720Q947 720 947 702Q945 671 892 631T776 583Q774 583 772 583T769 582T766 582L764 581H758Q753 581 744 581T722 580T693 580T662 580H563L514 385Q507 355 493 299T475 225T460 172T443 119T426 76T402 24Q386 -11 355 -33T304 -61T266 -69Q242 -69 242 -50Q243 -45 253 -25T278 32T307 115L364 340Q405 511 413 538T436 580H207Q202 572 200 568T197 561T195 552T190 537Q176 511 135 487T61 462\",85:\"124 586Q107 586 74 569T15 552H13Q-10 552 -10 570Q-10 605 70 645T222 686Q283 686 283 631Q283 590 246 504T172 326T135 181Q135 130 157 107T205 83Q221 83 259 106Q347 165 453 301T604 548Q607 557 612 569T619 587T624 600T628 612T632 621T637 628T641 634T647 640T654 645T662 652Q706 686 748 686Q771 686 771 669Q771 656 754 614T700 467T630 229Q615 168 610 105Q610 88 617 78L641 90Q681 111 706 112Q733 112 733 95Q733 82 714 60Q694 40 633 10Q567 -23 532 -24Q507 -24 495 -17Q466 -4 466 32Q466 96 500 225Q277 -17 102 -17Q56 -17 23 17T-10 118Q-10 164 13 234T64 363T115 481T139 567Q139 586 124 586\",86:\"25 608Q25 628 60 657T148 686Q184 683 213 671T273 625T327 538T363 394T380 184L381 134L399 148Q503 226 574 302T667 415T689 467Q688 474 684 482T672 502T645 521T600 532Q576 532 576 567Q576 604 597 644T641 685H649Q701 685 737 648T774 545Q774 457 703 333T461 66Q397 13 332 -32T255 -77Q237 -77 237 -30V-23Q241 20 241 109Q241 483 115 569Q91 586 50 589Q25 589 25 608\",87:\"25 607Q25 629 62 657T142 686Q205 686 248 647T312 541T339 411T347 275Q347 249 345 203V189Q375 219 449 316T587 516Q629 584 629 587Q629 589 626 597T622 607Q622 629 658 656T732 686H744Q755 680 757 678Q757 677 769 649T799 577T835 475T874 339T904 183Q908 157 910 151L925 169Q997 252 1059 343T1121 474Q1120 498 1103 513T1059 532Q1036 532 1036 568Q1036 600 1053 636T1090 683L1097 686H1109Q1147 684 1176 652T1206 551Q1206 460 1131 320T897 7Q859 -33 840 -52T816 -74T804 -77Q788 -77 784 -32Q783 -28 783 -26Q774 108 744 239T691 436T665 501Q664 501 649 475T602 400T528 289T420 146T280 -15Q243 -56 231 -66T210 -77Q191 -77 191 -40Q191 -38 195 -4T204 91T209 217Q209 290 202 351T177 469T126 557T45 589Q25 589 25 607\",88:\"762 562Q762 579 737 584T711 604Q711 630 753 658T834 686Q864 686 885 669T906 627Q906 580 834 522T614 379L584 362V357Q585 354 589 315T597 233T603 183Q610 132 627 116T671 100Q678 100 704 113T754 126T778 107Q776 79 733 45T626 2Q615 1 578 1Q542 1 535 3Q521 7 510 15T491 31T477 54T467 78T460 108T456 137T452 170T449 201Q447 220 445 240T442 270L441 281Q435 281 357 233Q240 165 206 135Q200 128 200 124Q200 113 208 108T226 101T244 96T252 82Q252 61 214 31T129 1H120Q97 1 77 16T56 60Q56 105 133 168T414 345Q428 352 431 354T433 359Q422 493 414 522Q407 551 395 566T373 583T350 586H341L332 580Q290 560 265 560Q243 560 243 577Q243 585 248 596T269 624T306 653T365 676T447 686H456Q472 686 484 683T514 671T543 637T562 576Q565 557 570 501L577 437Q577 436 613 457T694 506T756 551Q762 558 762 562\",89:\"73 555Q49 555 49 573Q49 602 110 644T239 686Q319 686 376 624Q416 584 444 511T483 361T499 240T503 173Q503 165 504 165Q506 165 524 184T556 218Q631 297 674 377T718 485Q718 505 699 526Q673 552 628 552Q619 552 613 562T607 590Q607 617 621 645T658 685Q661 686 671 686Q718 686 757 652T797 545Q797 476 749 369T602 146Q500 29 371 -67T176 -164Q112 -164 74 -120T36 -29Q36 5 55 36T95 67Q104 67 108 59T115 39T128 12T154 -12Q183 -30 216 -30Q239 -30 305 7L361 44L367 49V54Q367 95 364 143T351 273T312 429T243 546Q206 581 156 588L146 581Q108 555 73 555\",90:\"622 574Q522 579 420 579H396Q373 579 364 574T351 550Q339 516 297 490T218 462Q195 462 195 479Q195 487 197 492Q218 565 313 625T509 685Q564 685 650 683T755 680Q787 680 807 683T831 686Q853 686 853 669Q853 657 826 626Q742 532 641 437L619 415L622 414Q626 414 631 414T642 414Q697 411 697 388Q697 367 670 345T607 323Q605 323 592 325T546 329H522L490 302Q457 274 400 226T289 136L260 113L318 112Q345 111 452 109T587 106H627Q650 143 656 170Q666 197 710 225T788 253Q811 253 811 237Q811 211 781 160T710 77Q619 0 515 0Q507 0 497 0T484 1Q434 1 319 3T177 6Q123 6 95 2Q83 2 71 0H68Q46 0 46 17Q46 28 58 44Q68 56 100 80T210 165T383 307L408 329H361L314 330Q297 338 297 350Q297 368 320 388T368 413Q375 415 441 415H506L647 555L664 574H622\",305:\"24 296Q24 305 34 328T63 380T115 430T187 452Q205 452 223 448T262 435T295 406T308 360Q308 345 287 290T240 170T207 87Q202 67 202 57Q202 42 215 42Q235 42 257 64Q288 92 302 140Q307 156 310 159T330 162H336H347Q367 162 367 148Q367 140 357 117T329 65T276 14T201 -8Q158 -8 121 15T83 84Q83 104 133 229T184 358Q189 376 189 388Q189 402 177 402Q156 402 134 380Q103 352 89 304Q84 288 81 285T61 282H55H44Q24 282 24 296\",567:\"297 360T297 373T294 392T288 400T278 401H276Q237 398 200 363Q181 343 170 325T156 299T149 287T129 282H123H116Q102 282 97 284T92 298Q93 303 98 315T118 349T151 390T201 427T267 451H279Q357 451 388 422T420 354V339L370 138Q321 -60 317 -69Q287 -157 163 -194Q133 -201 99 -201Q39 -201 14 -178T-12 -125Q-12 -94 11 -69T68 -43Q93 -43 108 -57T123 -95Q123 -121 100 -151H104Q131 -151 155 -125T193 -60Q195 -54 244 141T294 345Q297 360 297 373\"},{})},871:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texCalligraphic=void 0;var H=L(9403),V=L(2518);T.texCalligraphic=(0,H.AddPaths)(V.texCalligraphic,{65:\"576 668Q576 688 606 708T660 728Q676 728 675 712V571Q675 409 688 252Q696 122 720 57Q722 53 723 50T728 46T732 43T737 41T743 39L754 45Q788 61 803 61Q819 61 819 47Q818 43 814 35Q799 15 755 -7T675 -30Q659 -30 648 -25T630 -8T621 11T614 34Q603 77 599 106T594 146T591 160V163H460L329 164L316 145Q241 35 196 -7T119 -50T59 -24T30 43Q30 75 46 100T74 125Q81 125 83 120T88 104T96 84Q118 57 151 57Q189 57 277 182Q432 400 542 625L559 659H567Q574 659 575 660T576 668ZM584 249Q579 333 577 386T575 473T574 520V581L563 560Q497 426 412 290L372 228L370 224H371L383 228L393 232H586L584 249\",66:\"304 342Q292 342 292 353Q292 372 323 391Q331 396 417 428T533 487Q563 512 563 555V562Q563 575 557 589T530 618T475 636Q429 636 396 613T330 539Q263 446 210 238Q196 183 173 120Q135 31 121 16Q108 1 85 -10T47 -22T32 -10Q32 -5 44 18T77 93T112 206Q135 296 154 395T182 550T191 615Q191 616 190 616Q188 616 179 611T157 601T131 594Q113 594 113 605Q113 623 144 644Q154 650 205 676T267 703Q277 705 279 705Q295 705 295 693Q295 686 288 635T278 575Q278 572 287 582Q336 635 402 669T540 704Q603 704 633 673T664 599Q664 559 638 523T580 462Q553 440 504 413L491 407L504 402Q566 381 596 338T627 244Q627 172 575 110T444 13T284 -22Q208 -22 158 28Q144 42 146 50Q150 67 178 85T230 103Q236 103 246 95T267 75T302 56T357 47Q436 47 486 93Q526 136 526 198V210Q526 228 518 249T491 292T436 330T350 345Q335 345 321 344T304 342\",67:\"201 -25Q167 -25 136 -14T75 23T29 94T12 202Q12 290 50 394T161 574Q227 642 303 673T433 704Q435 705 457 705Q533 701 533 640Q533 606 507 548T464 474Q431 444 396 444Q381 444 381 453Q381 459 388 473T407 513T428 563Q433 580 433 594Q433 636 381 636Q314 636 260 594T175 489T128 363T112 247Q112 157 153 101T273 44Q347 44 398 121Q413 144 437 157T481 171Q496 171 496 160Q496 150 476 123Q426 56 350 16T201 -25\",68:\"37 475Q19 475 19 487Q19 536 103 604T327 682H356Q386 683 408 683H419Q475 683 506 681T582 668T667 633Q766 571 766 450Q766 365 723 287T611 152T455 57T279 6Q248 1 160 0Q148 0 131 0T108 -1Q72 -1 72 11Q72 24 90 40T133 64L144 68L152 88Q247 328 272 587Q275 613 272 613Q272 613 269 613Q225 610 195 602T149 579T129 556T119 532Q118 530 116 525T113 518Q102 502 80 490T37 475ZM665 407Q665 596 412 613Q403 614 383 614Q370 614 370 612Q370 598 363 542T323 357T242 103L228 69H265Q391 73 481 119Q536 148 575 188T633 268T658 338T665 392V407\",69:\"144 470Q144 556 240 630T451 705Q564 705 564 637Q564 611 540 573Q529 559 505 547T464 534Q448 534 448 545Q448 552 455 562Q463 577 463 591Q463 600 462 604T456 616T436 627T400 635Q396 635 390 635T380 636Q291 636 258 568Q245 544 245 516Q245 463 290 438T391 410Q415 410 415 398Q415 392 407 380T376 356T326 341Q288 340 260 327Q218 311 187 276T143 208T130 151Q130 113 156 88T211 55T268 47Q349 47 403 125Q415 144 439 157T483 171Q499 171 499 160Q499 148 475 120T413 59T315 3T197 -22Q124 -22 77 14T30 105Q30 126 39 154T66 216T122 288T209 354L223 362Q144 400 144 470\",70:\"199 579Q181 579 181 590Q181 598 188 611T212 639T260 666T335 682Q336 682 349 682T383 682T431 682T493 683T561 683Q776 682 784 681Q826 673 829 647Q829 620 797 600T744 580Q728 580 728 595Q729 607 713 610Q698 613 598 614H500L499 610Q499 598 467 486T428 367Q428 365 551 365H674Q683 360 684 355Q687 346 677 329Q666 312 642 299T598 285Q586 285 582 296H402L394 277Q386 258 373 229T346 167T315 102T286 51Q265 22 225 -5T133 -32Q108 -32 87 -25T54 -7T33 15T21 35T18 47Q18 60 44 80T98 103Q108 103 111 101T119 88Q130 66 150 54T179 39T195 37Q199 37 203 43Q217 67 245 125T318 300T391 532Q393 543 398 564T406 598T409 613T339 614H269Q229 579 199 579\",71:\"216 68Q155 68 115 100T59 177T44 273Q44 299 50 333T73 421T133 533T239 632Q346 704 466 704Q508 704 515 703Q555 696 577 681T599 635Q599 605 570 560T523 496Q490 466 455 466Q440 466 440 475T469 526T499 589Q499 605 489 617Q460 636 403 636Q343 636 295 611T220 548T174 464T150 382T144 318Q144 241 180 189T287 137Q325 137 359 160Q428 205 466 322Q472 342 501 359T551 376Q557 376 560 373T564 368L565 365Q560 341 551 302T512 173T451 31Q359 -119 204 -119Q163 -118 127 -109T74 -91T53 -77Q52 -75 52 -71Q52 -54 79 -35T132 -14H140L151 -19Q210 -49 281 -49H289Q312 -49 329 -31Q351 -7 372 36T405 109T416 142L408 136Q401 131 392 125T369 111T338 96T303 82T261 72T216 68\",72:\"18 487Q18 496 29 517T67 566T127 621T216 665T330 683Q359 683 376 669T397 643T400 622Q400 584 382 488T348 343Q348 342 467 342H587L594 366Q615 440 648 534T690 641Q701 656 723 669T764 683Q783 683 783 672L750 578Q716 485 677 346T625 101Q624 92 623 82T622 65T621 56Q621 20 658 20Q666 20 701 25Q709 52 736 69T785 87Q803 87 803 75T791 44T754 3T685 -33T588 -48Q568 -48 562 -46Q522 -31 522 13V23Q531 129 562 250L569 281L565 280Q561 278 556 277T549 274L438 273H328L321 249Q307 202 275 107T232 0Q219 -16 196 -28T155 -41Q149 -41 145 -39T140 -34T139 -29Q139 -24 148 -3T181 86T233 247Q240 270 240 272Q240 273 194 273H169Q139 273 139 285Q139 295 153 308T187 332Q206 341 236 342L260 343L264 359Q278 414 289 482T300 578Q300 613 260 613H254Q198 613 169 592Q148 578 127 544T104 508Q72 478 37 475Q18 475 18 487\",73:\"174 0H31Q-13 0 -21 2T-30 12Q-30 23 -17 36Q9 60 42 68L155 70Q187 102 214 179T257 333T302 491T366 610L369 614H305Q221 611 188 607T145 596T128 569Q119 543 94 529T47 512Q28 512 28 524Q28 527 32 539Q56 614 159 654Q218 678 312 682Q314 682 339 682T404 682T481 683H632Q642 678 642 671Q642 657 621 641T577 617Q570 615 507 614H444Q427 592 406 542Q382 478 355 366T310 209Q280 123 238 78L230 69H330Q442 70 442 74Q443 74 443 77T447 87T460 105Q490 134 527 137Q545 137 545 125Q545 120 542 112Q531 78 491 49T399 7Q379 2 360 2T174 0\",74:\"148 78Q148 16 189 -17T286 -50Q319 -50 348 -33T396 10T426 59T444 101L471 204Q498 306 521 372Q575 532 649 605L659 614H591Q517 613 494 607Q433 591 400 550T360 477Q353 454 325 437T275 419Q256 419 260 435Q280 523 376 597T583 681Q603 683 713 683H830Q839 674 839 671Q839 654 810 634T754 614Q735 614 721 601Q688 571 654 495T600 351T561 209T541 132Q507 29 412 -45T213 -119Q141 -119 94 -77T47 33Q47 55 50 69T58 90T71 103Q105 131 135 131Q152 131 152 120Q152 119 151 114T149 99T148 78\",75:\"194 618Q193 618 182 613T156 601T131 594Q113 594 113 605Q113 623 144 644Q154 650 205 676T267 703Q277 705 279 705Q295 705 295 691Q295 569 250 397Q225 306 197 217T151 81T128 25Q120 8 94 -7T47 -22Q32 -22 32 -10L64 76Q95 163 133 295T185 530Q198 611 194 618ZM331 429Q331 383 364 290T449 117T542 36Q574 36 607 51T652 103Q660 124 677 133T709 143Q727 143 727 128Q727 119 723 111Q704 56 639 17T497 -22H493Q463 -22 425 16Q401 40 382 71Q335 138 296 243T256 399Q256 434 288 473Q342 540 471 622T670 705Q691 704 703 696Q732 678 732 644Q732 613 714 600T677 586Q671 586 667 587T660 592T657 604V619Q657 647 629 647Q623 647 620 646Q576 635 495 583T365 482Q331 448 331 429\",76:\"62 -22T47 -22T32 -11Q32 -1 56 24T83 55Q113 96 138 172T180 320T234 473T323 609Q364 649 419 677T531 705Q559 705 578 696T604 671T615 645T618 623V611Q618 582 615 571T598 548Q581 531 558 520T518 509Q503 509 503 520Q503 523 505 536T507 560Q507 590 494 610T452 630Q423 630 410 617Q367 578 333 492T271 301T233 170Q211 123 204 112L198 103L224 102Q281 102 369 79T509 52H523Q535 64 544 87T579 128Q616 152 641 152Q656 152 656 142Q656 101 588 40T433 -22Q381 -22 289 1T156 28L141 29L131 20Q111 0 87 -11\",77:\"28 9Q28 37 43 63T73 90Q77 90 83 84T103 70T141 57H146Q162 57 178 79T222 167Q266 279 295 371T334 513T349 598T358 651T371 677Q397 705 432 705Q442 705 445 699T452 666Q453 661 453 659Q475 538 509 405T568 207L574 192Q581 178 587 164T594 150Q596 150 635 189T693 248Q765 324 863 438T1024 626T1089 701Q1093 705 1100 705Q1111 705 1111 682Q1111 675 1108 660T1099 611T1086 540Q1041 277 1041 144Q1041 98 1044 75T1050 48T1059 42Q1064 41 1075 46Q1102 61 1121 61Q1137 61 1137 50Q1137 28 1087 0T1000 -29Q983 -29 972 -23T955 -9T945 16T942 45T941 83V96Q941 158 952 256T974 422L985 489Q984 489 939 436T821 300T698 164Q665 128 620 85T568 37Q564 34 558 34Q550 34 546 37T535 54Q512 91 496 127T450 259T389 498L384 518Q349 367 294 223T198 15Q155 -50 117 -50Q87 -50 61 -35T30 -6Q28 2 28 9\",78:\"343 705Q358 705 358 698Q360 696 370 658T411 524T484 319Q536 174 590 82L595 73L615 152Q646 274 683 407Q729 571 752 637T799 727Q852 780 937 788Q939 788 947 788T958 789H962Q979 789 979 765Q979 722 951 692Q942 683 924 683Q888 681 859 672T818 654T803 639Q784 608 708 322T631 15Q631 14 630 15Q630 17 629 15Q628 14 628 12Q621 -4 601 -17T560 -31Q550 -31 546 -28T530 -7Q484 67 458 123T398 272Q352 392 314 514L306 535V534Q306 533 296 488T272 379T234 239T185 100T127 -7T61 -50Q34 -50 4 -34T-27 8Q-27 33 -12 61T18 90Q21 90 36 77T87 57H92Q109 57 123 78T162 173Q206 299 232 417T265 599T276 667Q284 681 304 693T343 705\",79:\"308 428Q289 428 289 438Q289 457 318 508T378 593Q417 638 475 671T599 705Q688 705 732 643T777 483Q777 380 733 285T620 123T464 18T293 -22Q188 -22 123 51T58 245Q58 327 87 403T159 533T249 626T333 685T388 705Q404 705 404 693Q404 674 363 649Q333 632 304 606T239 537T181 429T158 290Q158 179 214 114T364 48Q489 48 583 165T677 438Q677 473 670 505T648 568T601 617T528 636Q518 636 513 635Q486 629 460 600T419 544T392 490Q383 470 372 459Q341 430 308 428\",80:\"37 475Q19 475 19 487Q19 536 103 604T327 682Q329 682 344 682T380 682T421 683H463Q625 683 695 615Q718 591 726 564Q733 547 733 525Q733 412 607 312T321 205H312Q293 205 293 217Q293 224 302 236T333 260T385 274Q558 287 614 407Q633 445 633 477Q633 515 612 543T556 585T481 607T399 614H370L368 603Q352 463 312 312T242 82T202 -13Q190 -33 164 -45T121 -57Q108 -57 108 -45Q108 -40 120 -10T151 73T192 190T233 349T266 539Q267 546 269 565T272 598T274 613H270Q209 613 163 588Q131 572 113 518Q102 502 80 490T37 475\",81:\"114 286Q114 358 151 433T249 569T392 667T558 705Q653 705 713 641T774 460Q774 389 750 322T687 206T600 114T504 46T412 4L399 -2Q542 -62 636 -62Q660 -62 670 -54T686 -27T700 0Q734 34 770 34Q787 34 787 23Q787 -18 720 -74T563 -131Q485 -131 350 -83T145 -34Q127 -34 127 -22Q127 -12 144 5T190 31L200 34L237 35Q386 38 467 79Q550 120 612 210T675 416Q675 510 625 573T484 636Q410 636 346 587T248 469T214 333Q214 306 221 281T243 229T288 188T360 172Q403 172 441 188T490 205Q510 205 510 192Q505 162 432 132T287 102Q206 102 160 155T114 286\",82:\"37 475Q19 475 19 487Q19 503 35 530T83 589T180 647T327 682H374Q387 682 417 682T464 683Q519 683 559 679T642 663T708 625T731 557Q731 481 668 411T504 300Q506 296 512 286T528 257T553 202Q594 105 611 82Q635 47 665 47Q708 47 742 93Q758 113 786 128Q804 136 819 137Q837 137 837 125Q837 115 818 92T767 43T687 -2T589 -22Q549 -22 517 22T467 120T422 221T362 273Q346 273 346 287Q348 301 373 320T436 342Q437 342 446 343T462 345T481 348T504 353T527 362T553 375T577 393Q598 412 614 443T630 511Q630 545 613 566T541 600T393 614Q370 614 370 613L366 584Q349 446 311 307T243 96L213 25Q205 8 179 -7T132 -22Q125 -22 120 -18T117 -8Q117 -5 130 26T163 113T205 239T246 408T274 606V614Q273 614 259 613T231 609T198 602T163 588Q131 572 113 518Q102 502 80 490T37 475\",83:\"554 512Q536 512 536 522Q536 525 539 539T542 564Q542 588 528 604Q515 616 482 625T410 635Q374 635 349 624T312 594T295 561T290 532Q290 505 303 482T342 442T378 419T409 404Q435 391 451 383T494 357T535 323T562 282T574 231Q574 133 464 56T220 -22Q138 -22 78 21T18 123Q18 184 61 227T156 274Q178 274 178 263Q178 260 177 258Q172 247 164 239T151 227T136 218L127 213L124 202Q118 186 118 163Q120 124 165 86T292 48Q374 48 423 86T473 186V193Q473 267 347 327Q268 364 239 389Q191 431 191 486Q191 547 242 600T356 679T470 705Q472 705 478 705T489 704Q551 704 596 682T642 610Q642 566 621 545Q592 516 554 512\",84:\"49 475Q34 475 34 490Q34 552 106 611T261 681Q272 683 507 683H742Q790 717 816 717Q833 717 833 708Q833 682 795 653T714 615Q691 610 588 609Q490 609 490 607L483 580Q476 554 462 496T435 392Q410 289 395 231T363 116T335 34T309 -15T279 -47T242 -64Q231 -68 218 -68Q203 -68 203 -57Q203 -52 211 -38Q224 -7 234 20T251 66T268 123T283 179T304 261T328 360Q342 415 360 488Q380 567 384 582T397 605Q400 607 401 609H302H244Q200 609 188 607T167 596Q145 572 145 541Q145 520 109 498T49 475\",85:\"8 592Q8 616 70 649T193 683Q246 683 246 631Q246 587 205 492T124 297T83 143Q83 101 100 75T154 48Q202 48 287 135T450 342T560 553Q589 635 593 640Q603 656 626 668T669 683H670Q687 683 687 672T670 616T617 463T547 220Q525 137 521 68Q521 54 522 50T533 42L543 47Q573 61 588 61Q604 61 604 47Q599 16 506 -22Q486 -28 468 -28T436 -18T421 18Q421 92 468 258Q468 259 467 257T459 248Q426 206 391 167T303 81T194 6T83 -22Q66 -22 58 -20Q25 -11 4 19T-17 99Q-17 146 8 220T64 358T120 488T146 586Q146 604 141 608T123 613H120Q99 613 72 597T25 580Q8 580 8 592\",86:\"25 633Q25 647 47 665T100 683Q291 683 291 306Q291 264 288 213T282 132L279 102Q281 102 308 126T378 191T464 279T545 381T596 479Q600 490 600 502Q600 527 581 550T523 577Q505 577 505 601Q505 622 516 647T542 681Q546 683 558 683Q605 679 631 645T658 559Q658 423 487 215Q409 126 308 37T190 -52Q177 -52 177 -28Q177 -26 183 15T196 127T203 270Q203 356 192 421T165 523T126 583T83 613T41 620Q25 620 25 633\",87:\"25 633Q25 647 46 665T103 683Q168 683 207 632Q228 608 243 568Q269 485 269 374Q269 324 265 271T256 184L251 150L252 152Q254 153 257 157T264 167T274 180T286 197Q359 293 424 398T519 558T549 616Q549 618 547 624T545 638Q550 654 572 668T615 683Q626 683 632 672T657 595Q726 370 741 128L742 110Q752 122 767 142T823 217T894 321T950 424T976 511Q976 544 958 560T918 577Q906 577 906 602Q906 629 918 651T942 681Q948 683 954 683Q983 683 1008 658T1034 569T999 421T915 257T813 109T724 -3T681 -49Q666 -59 660 -45Q659 -41 657 35T639 233T591 477Q573 551 570 551Q569 551 554 523T507 439T433 315T323 155T182 -25Q160 -52 151 -53Q137 -53 137 -30Q137 -29 148 25T170 168T181 338Q181 424 168 483T131 571T87 609T40 620Q25 620 25 633\",88:\"324 614Q291 576 250 573Q231 573 231 584Q231 589 232 592Q235 601 244 614T271 643T324 671T400 683H403Q462 683 481 610Q485 594 490 545T498 454L501 413Q504 413 551 442T648 509T705 561Q707 565 707 578Q707 610 682 614Q667 614 667 626Q667 641 695 662T755 683Q765 683 775 680T796 662T807 623Q807 596 792 572T713 499T530 376L505 361V356Q508 346 511 278T524 148T557 75Q569 69 580 69Q585 69 593 77Q624 108 660 110Q667 110 670 110T676 106T678 94Q668 59 624 30T510 0Q487 0 471 9T445 32T430 71T422 117T417 173Q416 183 416 188Q413 214 411 244T407 286T405 299Q403 299 344 263T223 182T154 122Q152 118 152 105Q152 69 180 69Q183 69 187 66T191 60L192 58V56Q192 41 163 21T105 0Q94 0 84 3T63 21T52 60Q52 77 56 90T85 131T155 191Q197 223 259 263T362 327T402 352L391 489Q391 492 390 505T387 526T384 547T379 568T372 586T361 602T348 611Q346 612 341 613T333 614H324\",89:\"65 599Q65 618 107 650T204 683Q267 683 312 643T380 533T414 385T424 217Q424 186 423 160T422 123Q426 123 468 170T567 304T650 469Q661 503 661 519Q661 546 639 570Q615 591 583 591Q569 591 569 616Q569 640 582 661T613 683Q624 683 638 679T671 664T702 625T714 558Q714 472 639 329T426 45Q361 -21 282 -82T154 -143Q97 -143 64 -104T31 -20Q31 4 44 25T70 46Q78 46 81 39T87 16T97 -9Q127 -51 182 -51Q184 -51 187 -50H190Q233 -41 314 25Q330 36 330 40Q336 79 336 178Q336 508 223 594Q199 614 158 619L148 620L139 611Q111 586 83 586Q65 586 65 599\",90:\"694 220Q708 220 708 210Q708 195 695 167T658 105T593 42T502 3Q492 1 458 1Q400 1 293 11T150 22Q116 22 92 11T51 0Q37 0 37 10Q37 21 63 44T179 146T367 319L391 343H343L296 344Q285 350 285 358Q285 365 289 372T300 383T313 392T324 398L329 400H450L561 518Q597 558 607 571L621 587H596Q553 589 484 599T383 609Q342 609 326 596T301 555Q294 533 263 514T208 492Q189 492 189 503Q189 510 197 528T215 559Q249 607 318 645T466 683Q504 683 573 673T669 662L690 661Q734 682 748 683Q767 683 767 673Q767 666 746 640Q655 531 555 428L529 400Q529 399 543 399Q604 397 604 366Q604 350 587 337T551 322Q541 322 539 323Q529 328 529 334Q529 339 487 342L470 343L446 320Q272 153 200 96L235 95Q297 95 392 86T533 74H554Q586 116 597 159Q604 179 635 199T694 220\"},{})},6819:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texMathit=void 0;var H=L(9403),V=L(5595);T.texMathit=(0,H.AddPaths)(V.texMathit,{65:\"85 46Q112 48 132 56T161 73T176 92T185 104Q185 106 353 407T524 709Q527 716 551 716Q568 716 572 712Q573 711 574 710Q576 708 594 384Q613 54 617 52H618Q626 46 672 46H689Q696 41 696 36Q696 13 683 0H670Q639 2 557 2Q526 2 500 2T459 2T441 1Q425 1 425 10Q425 12 427 24Q428 27 429 31T430 36T432 40T434 43T437 45T443 46T450 46Q514 46 514 69Q514 74 511 136L506 209H292L260 152Q222 84 222 74Q222 48 264 46Q280 46 280 35Q280 33 278 21Q275 7 272 4T259 0Q256 0 232 1T159 2Q135 2 109 1T78 0Q58 0 58 10Q58 14 61 26T66 40Q68 46 85 46ZM504 260Q503 263 496 407T486 553L466 520Q446 486 402 406L318 256Q318 255 411 255H504V260\",66:\"57 11Q57 38 69 45L74 46Q78 46 85 46T99 46Q134 47 145 50T162 62Q164 66 233 344T303 626Q303 627 302 629V631Q296 637 241 637H223Q217 642 217 645T219 664Q223 677 229 683H411L593 682L605 680Q616 678 628 675T660 662T694 639T720 601T732 547Q732 519 726 503Q710 452 662 414T556 360L545 357L556 355Q604 346 641 312T678 221Q678 155 622 92T482 8Q459 2 439 2T256 0H154H105Q74 0 66 2T57 11ZM629 549Q628 550 629 557T627 576T619 600T601 622T570 636Q564 637 490 637Q472 637 454 637T424 636T411 636Q399 635 395 622T364 500Q333 377 332 376Q332 374 408 374L485 375L495 377Q547 390 588 437T629 549ZM504 336Q500 337 410 337Q323 337 322 336Q322 334 305 263T270 122T252 51Q252 47 337 46Q346 46 361 46T384 45Q425 45 455 55T515 95Q574 156 574 235Q574 276 555 304T504 336\",67:\"395 -21Q279 -21 215 56T150 244Q150 402 265 543Q339 630 421 667T562 704Q596 704 604 703Q627 698 647 689T679 669T699 649T711 633T716 627L753 665Q790 704 792 704Q793 705 798 705Q812 705 812 698Q812 694 780 561Q744 422 744 421Q742 416 739 415T721 413H705Q699 419 699 426Q701 432 701 444Q705 464 705 493Q705 524 700 551T681 604T643 644T583 659Q480 659 387 570Q321 502 287 397T252 213Q252 123 297 74Q347 24 421 24Q500 24 564 89T653 240Q656 253 659 255T677 257Q700 257 700 248Q700 242 694 222Q681 183 656 143T593 65T504 3T395 -21\",68:\"56 11Q56 38 68 45L72 46Q77 46 84 46T98 46Q133 47 144 50T161 62Q163 66 232 344T302 626Q302 627 302 629L301 631Q295 637 240 637H222Q216 642 216 645T218 664Q222 677 228 683H403Q582 683 589 682Q672 674 723 608T775 440Q775 312 709 209T562 54Q502 14 432 2Q423 1 243 0H148H102Q72 0 64 2T56 11ZM254 51Q254 46 348 46Q395 46 422 50T484 71Q585 121 633 255Q679 396 679 477Q679 522 665 554T629 603T587 626T548 636Q547 636 536 636T510 636T480 637Q420 637 411 636T398 627Q396 623 325 339T254 51\",69:\"248 634Q216 634 214 638Q213 641 213 646Q213 674 224 678Q226 680 481 680H736Q743 676 743 669Q743 665 729 557T713 447Q711 440 690 440H675Q667 445 667 454Q667 455 671 481T675 536Q675 583 658 604T592 632Q574 634 475 634Q439 634 424 633T405 631T399 625Q397 622 367 501T336 377Q336 376 367 376H388Q451 376 477 389Q493 399 503 419T520 462T528 489Q531 493 549 493Q557 493 561 492T566 491T569 488T572 483L539 351Q507 221 503 216Q503 216 500 213H484Q468 213 465 216Q461 219 461 225Q461 228 466 250T472 290Q472 317 452 323T368 330H324Q323 326 289 191T255 51T331 46H360Q413 46 444 49T511 67T570 113Q589 137 608 175T638 242T652 272Q656 274 670 274Q693 274 693 262L648 148Q590 4 588 2Q585 0 323 0H61Q54 4 54 11Q54 27 61 41Q65 46 95 46Q131 47 142 50T159 62L194 200Q229 337 264 477T299 623Q299 630 292 631T248 634\",70:\"299 623Q299 630 292 631T247 634H219Q213 640 213 642T215 661Q218 673 225 680H724Q731 676 731 669Q731 665 717 557T701 447Q699 440 678 440H663Q656 444 656 452Q656 457 659 485T663 538Q663 586 644 607T566 633Q564 633 535 633T486 634H458Q404 634 399 625Q396 620 364 492L332 363H380Q446 365 464 373Q496 389 514 458Q518 477 523 479Q527 480 541 480H556Q563 475 563 470Q563 467 532 339T498 207Q496 200 475 200H460Q453 207 453 212Q454 213 456 225T461 254T464 278Q464 304 445 310T369 317H321L289 190Q257 66 257 59Q257 54 261 52T283 48T337 46Q348 46 352 46T360 45T366 42T368 37Q368 32 365 23Q360 4 355 2Q352 1 342 1Q336 1 297 1T199 2Q138 2 106 2T71 1H68Q54 1 54 11Q54 38 66 45L70 46Q75 46 82 46T96 46Q131 47 142 50T159 62L194 200Q229 337 264 477T299 623\",71:\"632 -1Q629 -1 622 5T604 25T583 53Q508 -22 394 -22Q287 -22 219 52T150 244Q150 402 265 543Q339 630 421 667T562 704Q596 704 604 703Q627 698 647 689T679 669T699 649T711 633T716 627L753 665Q790 704 792 704Q793 705 798 705Q812 705 812 698Q812 694 780 561Q744 422 744 421Q742 416 739 415T721 413H705Q699 419 699 426Q701 432 701 444Q705 464 705 493Q705 524 700 551T681 604T643 644T583 659Q480 659 387 570Q319 501 286 394T252 208Q252 156 269 118T314 61T369 33T425 24Q470 24 509 46T566 104Q571 116 583 162T595 214Q595 222 583 223Q561 227 517 227H495Q488 230 488 238Q488 254 495 268Q500 273 511 273Q515 273 532 273T581 272T649 271Q731 271 752 273H761Q767 267 767 264T765 246Q761 233 755 227H742Q698 227 693 213L639 4Q636 -1 632 -1\",72:\"61 0Q54 7 54 11Q54 27 61 41Q65 46 95 46Q131 47 142 50T159 62Q161 66 230 344T300 626Q300 627 300 629L299 631Q293 637 238 637H220Q214 642 214 645T216 664Q220 677 226 683H239Q307 681 372 681Q480 681 486 683H496Q502 677 502 674T500 656Q496 643 490 637H472Q418 637 406 630Q400 627 396 612T367 500Q360 474 352 442T340 395L336 380Q336 378 466 378H596Q657 622 657 626Q657 627 656 629V631Q650 637 595 637H577Q571 642 571 645T573 664Q577 677 583 683H596Q664 681 729 681Q837 681 843 683H853Q860 676 860 672Q858 647 848 637H819Q783 636 772 634T756 623Q753 618 684 340T614 57Q614 50 621 49T666 46Q697 46 699 40Q701 37 698 21Q693 3 689 1Q686 0 677 0Q673 0 657 0T611 1T546 2Q453 2 428 0H418Q411 7 411 11Q411 27 418 41Q422 46 452 46Q488 47 499 50T516 62Q517 64 550 196T584 331Q584 332 454 332H324L291 197Q257 64 257 56Q257 50 265 49T309 46Q340 46 342 40Q344 37 341 21Q336 3 332 1Q329 0 320 0Q316 0 300 0T254 1T189 2Q96 2 71 0H61\",73:\"235 637Q217 637 213 638T209 649Q209 673 220 682Q222 683 237 683Q278 681 369 681Q404 681 441 682T483 683Q499 683 503 681T508 672Q508 670 505 658T500 643Q498 637 464 637Q425 635 415 633T398 621Q396 618 327 340T257 58T260 52T278 48T322 46Q349 46 349 36Q349 31 346 22Q342 4 337 1Q336 1 334 1T329 0Q325 0 307 0T258 1T190 2Q95 2 67 0H56Q49 7 49 11Q51 38 62 46H91Q129 47 141 50T159 62Q161 66 230 344T300 625Q300 637 235 637\",74:\"361 637Q333 637 331 641Q330 644 330 649Q330 673 341 682Q343 683 360 683Q405 681 500 681Q551 681 577 681T607 682Q622 682 622 673Q622 665 616 647Q614 640 610 639T587 637Q547 636 541 624Q538 618 477 374T413 124Q391 64 333 22T207 -21T109 12T78 86Q78 130 101 150T149 170Q193 170 196 129Q196 100 178 80T137 58L132 57Q134 52 138 46T160 28T205 16Q242 16 273 48T319 122Q322 129 383 371T444 627Q444 637 361 637\",75:\"668 621Q668 635 645 637Q629 637 629 648Q629 650 632 662T637 677Q640 682 653 682Q657 682 688 681T764 680Q786 680 810 681T839 682Q859 682 859 672Q859 655 852 643Q849 637 839 637Q804 637 768 621T717 595T697 578Q696 578 600 497L505 417L508 408Q543 311 574 227T618 106T632 69Q645 47 688 46H707Q713 38 713 37T710 19Q706 6 700 0H688Q659 2 587 2Q557 2 532 2T492 2T474 1Q458 1 458 10Q458 13 460 23Q464 39 466 42T480 46Q526 46 526 72Q526 75 476 213L427 350Q426 350 396 325T334 272T302 242Q302 241 299 230T290 194T279 150Q257 61 257 55Q257 50 265 49T309 46H337Q343 40 343 38T341 19Q337 6 331 0H316Q280 2 190 2Q158 2 131 2T89 2T70 1Q54 1 54 11Q54 38 66 45L70 46Q75 46 82 46T96 46Q131 47 142 50T159 62Q161 66 230 344T300 626Q300 627 300 629L299 631Q293 637 238 637H220Q214 642 214 645T216 664Q220 677 226 683H239Q307 681 372 681Q386 681 414 681T464 682L487 683H496Q502 677 502 674T500 656Q495 641 491 637H462Q426 636 415 634T399 623Q396 618 358 467L320 314Q321 314 484 452Q510 474 552 509Q625 570 646 590T668 621\",76:\"61 0Q54 4 54 11Q54 27 61 41Q65 46 95 46Q131 47 142 50T159 62Q161 66 230 344T300 626Q300 627 300 629L299 631Q293 637 238 637H220Q214 642 214 645T216 664Q220 677 226 683H240Q275 681 371 681Q407 681 438 681T487 682T509 682Q527 682 527 674Q527 670 524 659Q523 657 523 654T522 649T520 645T519 642T517 640T515 639T512 638T507 637T502 637T494 637H478Q433 636 417 633T396 617Q395 614 325 334T255 51Q255 47 319 47Q387 47 410 52Q459 65 494 98T543 163T570 229T589 273H622Q628 264 628 262Q628 259 584 133T539 5Q537 1 511 1Q482 0 296 0H61\",77:\"72 1Q58 1 58 11Q58 33 66 41Q68 46 87 46Q150 50 168 84Q172 91 238 356T304 626Q304 627 304 629L303 631Q297 637 242 637H224Q218 642 218 645T220 664Q224 677 230 683H326H394Q417 683 422 682T429 676L480 127L502 163Q523 199 560 262T642 400Q801 668 805 676L817 683H1003Q1010 678 1010 672Q1010 650 997 637H979Q915 637 906 623Q903 618 834 340T764 57Q764 50 771 49T817 46H845Q851 38 851 37T848 19Q845 7 838 0H824Q789 2 701 2Q670 2 644 2T603 2T584 1Q569 1 569 11Q569 13 571 25Q576 42 581 45L586 46Q590 46 597 46T611 46Q646 47 657 50T674 62L813 616L634 313Q453 7 452 7Q446 0 428 0Q409 0 407 6Q405 10 379 304T351 604L285 348Q220 83 220 82Q220 65 233 57T279 46H295Q301 38 301 37T298 19Q295 7 288 0H275Q244 2 171 2Q145 2 123 2T88 2T72 1\",78:\"633 637Q624 637 621 639T617 650Q617 670 630 683H641Q682 680 736 680Q836 680 845 683H853Q860 676 860 672Q858 647 848 637H832Q764 633 750 598Q746 590 673 300Q656 230 638 156T610 44L600 7Q598 0 576 0H559Q553 6 448 297L342 588Q341 588 279 336T216 81Q216 49 274 46Q293 46 295 40Q297 37 294 21Q293 19 292 16T291 11T290 7T289 4T287 2T284 1T280 1T275 0T263 0T229 1T167 2Q91 2 70 0H61Q54 7 54 11T57 27Q61 41 64 43T83 46Q146 50 164 84Q167 90 235 362L303 634Q300 635 253 637H220Q214 643 214 645T216 664Q220 677 226 683H314Q386 683 397 683T410 677Q412 675 501 428L591 179Q591 178 592 180T595 189T600 209T610 246T624 303T645 385Q698 595 698 606Q698 618 683 627T633 637\",79:\"149 237Q149 326 186 413T282 563T412 665T552 704Q619 704 667 678T741 611T777 528T788 444Q788 328 728 219T572 44T377 -22Q275 -22 212 50T149 237ZM688 487Q688 570 650 617T548 665Q467 665 398 592T291 413T253 203Q253 119 290 70T387 20Q440 20 489 52T573 135T635 249T675 373T688 487\",80:\"62 0Q55 7 55 11Q55 27 62 41Q66 46 96 46Q132 47 143 50T160 62Q162 66 231 344T301 626Q301 627 300 629V631Q294 637 239 637H221Q215 642 215 645T217 664Q221 677 227 683H404H431H502Q578 683 615 675T684 636Q729 595 729 531Q729 462 671 396T524 308Q499 302 404 301H318L288 182Q258 63 258 55T310 46Q341 46 343 40Q345 37 342 21Q337 3 333 1Q330 0 321 0Q317 0 301 0T255 1T190 2Q97 2 72 0H62ZM626 555V562Q626 620 552 635Q546 636 481 637Q466 637 450 637T423 636T412 636Q401 635 398 627Q396 622 361 484Q353 452 344 416T330 362L325 344Q325 342 390 342H427Q523 342 567 386Q596 415 611 473T626 555\",81:\"460 -107Q460 -72 464 -42T468 -7L457 -10Q446 -14 424 -18T379 -22Q276 -22 213 50T149 237Q149 326 186 413T282 563T412 665T552 704Q664 704 726 631T788 442Q788 305 703 180Q627 64 517 13L506 8Q506 7 508 -12T513 -38T522 -59T538 -79T565 -85Q604 -85 634 -59T672 0Q676 11 684 11Q693 11 695 2Q695 -1 690 -20T673 -69T644 -126T599 -174T538 -194Q464 -194 460 -110Q460 -108 460 -107ZM689 481Q689 578 646 621T551 665Q468 665 391 586Q321 512 285 399T249 202Q249 106 295 58Q310 41 314 41Q315 41 315 46Q315 83 344 118T420 154Q450 154 473 135Q493 114 500 69L502 58L512 65Q571 110 613 192T672 348T689 481ZM472 49Q472 118 415 118Q393 118 373 98T353 51Q353 18 386 18H387Q424 18 472 40V49\",82:\"62 0Q55 7 55 11Q55 27 62 41Q66 46 96 46Q132 47 143 50T160 62Q162 66 231 344T301 626Q301 627 300 629V631Q294 637 239 637H221Q215 642 215 645T217 664Q221 677 227 683H386Q554 682 569 679Q571 678 580 676Q643 662 680 623T717 533Q717 473 667 420T528 337L538 330Q563 314 578 286T594 228Q594 212 588 147T581 65Q581 36 589 26T616 16H618Q637 16 652 37Q668 57 677 94Q679 105 701 105T723 95Q723 89 717 72T698 33T662 -5T610 -22Q555 -22 513 3T471 88Q471 107 486 168T502 244Q502 303 452 320Q445 322 382 323H320L288 192Q255 63 255 55T307 46Q338 46 340 40Q342 37 339 21Q335 3 330 1Q326 0 320 0Q317 0 306 0T265 1T190 2Q99 2 73 0H62ZM612 558Q612 566 612 568T610 581T603 597T590 611T567 625T532 635Q526 636 470 637Q458 637 445 637T422 636T412 636Q402 635 397 627L390 598Q383 570 373 532T354 455T337 389T330 361Q356 360 384 360H415Q483 360 527 382Q557 399 574 424T604 498Q612 533 612 558\",83:\"198 460Q198 551 269 628T432 705Q516 705 557 644L583 673Q589 679 593 684T600 693T605 698T609 702T611 704T614 705T618 705H620Q633 705 633 698T605 577T573 459L570 456H554Q546 456 543 456T536 457T532 460T531 466Q531 469 533 489T536 532Q536 573 525 600T496 640T462 657T427 662Q369 662 325 612T281 503Q281 475 290 458T318 430T356 415T407 401T463 383Q506 360 522 323T538 258V244Q538 141 465 60T300 -22Q198 -22 152 41L143 31Q137 25 126 12T106 -10T95 -21L92 -22Q88 -22 86 -22Q81 -22 78 -20T74 -16V-14Q74 -11 132 221Q134 227 155 227H171Q177 221 177 215Q177 212 175 205T171 182T169 147Q171 99 195 70T246 33T306 25Q358 25 400 70T453 169Q455 180 455 203V210Q455 263 414 285Q409 288 347 305Q271 328 254 339Q239 350 224 371Q198 409 198 460\",84:\"178 437Q173 442 171 446Q171 451 238 654Q243 670 250 677H681H762Q792 677 799 676T806 667Q806 661 788 553T768 444Q768 437 746 437Q727 437 723 445Q723 450 729 492T736 562Q736 589 728 602T693 624Q675 630 622 630H595Q575 630 571 629T564 623Q562 621 492 342T422 59Q422 48 502 46H542Q548 38 548 37T545 19Q541 6 535 0H517Q475 2 357 2Q315 2 279 2T223 2T198 1Q179 1 179 9Q179 14 182 24Q187 42 190 44Q194 46 206 46H232Q289 47 301 49T326 65L395 344Q465 619 465 626Q465 629 462 629Q456 631 411 631Q364 631 336 625T288 597T255 549T224 467Q215 442 210 437H178\",85:\"636 637Q627 637 624 639T620 650Q620 670 633 683H644Q702 681 753 681Q760 681 772 681T796 681T820 682T838 683H845H853Q860 676 860 672Q858 647 848 637H832Q764 633 750 598Q745 588 698 400T648 204Q627 140 584 86Q484 -22 378 -22Q300 -22 247 31T194 167Q194 176 194 182T196 198T200 218T207 248T217 288T231 346T250 422Q300 618 300 626Q300 627 300 629L299 631Q293 637 238 637H220Q214 642 214 645T216 664Q220 677 226 683H239Q307 681 372 681Q480 681 486 683H496Q502 677 502 674T500 656Q496 643 490 637H472Q418 637 406 630Q400 627 394 603T344 410Q299 232 292 198T284 135Q284 102 294 78T322 44T355 29T387 24Q455 24 515 74T604 211Q605 215 653 404T701 607Q701 618 686 627T636 637\",86:\"667 637Q657 637 654 639T650 650Q650 670 663 683H675Q704 681 772 681Q793 681 818 682T847 683Q868 683 868 672Q868 670 865 658T860 643Q857 637 848 637Q785 637 749 587L394 -15Q387 -22 366 -22Q346 -22 342 -16Q341 -13 313 303Q285 622 285 623Q283 631 273 634T229 637Q205 637 205 648Q205 654 208 666T217 682Q219 683 230 683Q276 680 329 680Q444 680 456 683H466Q472 677 472 674T470 656Q466 643 460 637H448Q384 637 384 615Q385 612 406 371T427 126Q427 125 495 240T632 473T704 596Q707 604 707 609Q707 633 667 637\",87:\"234 637H226Q205 637 205 648Q205 673 216 682Q218 683 231 683Q265 681 340 681Q371 681 404 682T443 683Q458 683 462 681T467 672Q467 670 464 658T459 643Q457 637 434 637Q407 636 394 632T378 623T376 613Q376 589 385 377T394 149L511 361Q542 419 596 519L613 551L612 585Q610 621 610 624Q608 637 559 637H555Q537 637 537 647Q537 654 540 664Q544 677 550 683H561Q600 680 656 680Q771 680 783 683H792Q798 677 798 675T796 658Q792 643 790 640T778 637H774Q721 637 708 620L717 385Q726 150 727 149Q727 148 752 193T812 303T882 433T942 546T969 596Q970 600 970 606Q970 610 969 613T966 620T961 625T955 628T949 631T941 633T934 634T927 636T920 637Q903 637 903 648Q903 650 905 664Q909 677 915 683H928Q960 681 1031 681Q1050 681 1073 681T1101 682Q1124 682 1124 672Q1124 655 1117 643Q1114 637 1104 637Q1085 637 1069 632T1043 618T1026 603T1014 588L1009 580L687 -16Q681 -22 660 -22Q643 -22 637 -16Q635 -14 627 223Q617 441 617 464L602 441Q578 397 487 228Q456 171 423 110T372 17T355 -15Q348 -22 328 -22Q312 -22 308 -20T303 -9Q303 -5 291 310T277 627Q273 636 234 637\",88:\"684 0Q670 0 634 1T569 2Q512 2 482 2T449 1Q433 1 433 10Q433 11 435 25Q437 34 438 37T442 43T448 45T459 46T476 49Q506 58 506 64Q506 65 467 179T426 295L382 244Q339 194 295 142T249 86Q245 79 245 72Q245 48 279 46Q293 46 293 32Q293 13 280 0H268Q206 2 151 2Q70 2 64 0Q50 0 50 11Q50 15 53 27Q57 41 60 43T78 46Q154 49 205 100Q207 103 312 225L411 341L407 353Q404 360 381 428T336 560T310 627Q301 636 255 637H229Q223 643 223 645T225 664Q229 677 235 683H246Q288 680 346 680Q462 680 477 683H487Q493 677 493 674T491 656Q488 644 485 641T471 637Q461 635 454 635Q419 626 421 619Q421 617 453 524T486 430T554 509T624 593Q631 604 631 611Q631 622 621 629T598 637Q583 637 583 648Q583 650 585 660Q589 676 591 679T602 683Q606 683 637 682T715 680Q742 680 771 681T804 682Q825 682 825 672Q825 650 817 642Q814 637 797 637Q739 634 700 608Q684 597 659 569T505 389L501 384L557 222Q612 61 616 57Q625 47 671 46Q691 46 697 45T704 36Q704 35 702 23Q701 19 700 14T699 7T696 3T692 1T684 0\",89:\"232 637Q198 637 198 647Q198 651 201 664T210 682Q212 683 223 683Q269 680 325 680Q443 680 455 683H465Q472 676 472 672Q472 656 465 642Q460 637 441 637Q395 634 395 623Q395 621 438 478T482 334T583 460T688 591Q688 593 694 601T700 617Q700 637 668 637H666Q655 637 655 648Q655 654 658 664Q660 672 660 673T663 678T668 682T677 683Q680 683 704 682T776 680Q801 680 828 681T858 682Q875 682 875 673Q875 669 872 657T867 643Q865 637 848 637Q788 634 749 597Q733 581 608 424L487 273L461 170Q454 145 448 118T438 76T434 60Q434 54 436 52T452 48T496 46H514Q520 41 520 38T518 19Q514 6 508 0H495Q427 2 364 2Q350 2 323 2T272 0H250H241Q234 7 234 11Q234 27 241 41Q245 46 275 46Q312 47 323 50T340 64Q340 65 344 79T355 120T368 171L393 274L341 448Q288 622 286 626Q278 636 232 637\",90:\"203 452Q203 455 236 565T270 677Q270 681 274 681Q276 683 488 683H699Q704 678 704 675Q704 663 697 649Q697 647 449 348L201 50L266 49H301Q442 49 495 116Q525 155 556 251Q563 274 565 278T579 282H585Q609 285 609 271Q609 270 570 142T528 8T518 1T466 0H303Q253 0 197 0T131 -1Q112 -1 102 -1T87 1T81 3T80 8Q80 30 89 39Q90 41 204 178T446 470T575 626L584 637H512H504H475Q446 637 426 635T378 624T330 597T289 546T254 467Q247 446 243 444Q239 442 226 442Q203 442 203 452\",97:\"418 53Q418 26 438 26Q466 26 494 131Q500 151 504 152Q507 153 516 153H521Q531 153 534 153T540 150T543 144Q543 141 540 126T529 88T509 43T477 5T434 -11Q404 -11 383 3T354 30T347 48H346Q345 47 342 45T337 40Q282 -11 228 -11Q172 -11 137 34T101 146Q101 260 177 351T333 442Q343 442 352 441T369 437T382 431T393 425T402 417T409 410T414 402T419 396Q423 406 436 414T461 422Q475 422 484 413T494 395Q494 384 459 244T420 88Q418 80 418 58V53ZM397 323Q397 344 382 374T333 405Q302 405 271 372Q249 349 235 316T203 215Q184 135 184 108V100V94Q184 54 207 35Q218 26 235 26Q279 26 330 91Q343 109 346 118T372 217Q397 317 397 323\",98:\"158 683Q163 683 223 688T300 694Q312 694 312 685T279 544Q243 405 243 403L256 412Q268 422 292 432T338 442Q395 442 431 398T467 284Q467 175 393 82T229 -11Q175 -11 142 32T108 142Q108 176 115 207T166 412Q177 458 190 510T209 588T216 616Q216 629 209 632T170 637H149Q143 643 143 645T145 664Q150 683 158 683ZM178 109Q178 27 234 27Q247 27 254 29Q295 44 323 94Q343 129 363 208T384 332Q384 354 382 361Q369 405 332 405Q282 405 228 326L222 317L205 250Q178 142 178 109\",99:\"257 -10Q183 -10 143 37T103 155Q103 257 173 341T337 440Q341 441 348 441H358Q421 441 445 415T469 356Q469 320 450 305T410 289Q392 289 381 299T370 325Q370 362 404 378L414 383Q392 402 365 405Q322 405 285 375T227 294Q217 271 202 213T187 119Q187 27 263 27Q299 27 330 40Q361 51 386 71T424 106T440 121Q444 121 455 110T466 96Q466 92 458 81T432 54T390 24T331 0T257 -10\",100:\"418 54Q418 26 438 26Q466 26 494 131Q500 151 504 152Q507 153 516 153H521H526Q543 153 543 144Q543 143 541 129Q531 91 521 65T487 14T434 -11T383 3T354 30T347 48H346Q345 47 342 45T337 40Q282 -11 228 -11Q172 -11 137 34T101 146Q101 255 174 348T337 441Q354 441 368 437T390 427T404 414T413 404T417 400L471 616Q471 629 464 632T425 637H404Q398 643 398 645T400 664Q405 683 413 683Q418 683 478 688T555 694Q567 694 567 686Q567 676 495 389L419 86Q418 80 418 61V54ZM397 323Q397 329 394 340T385 367T365 394T333 405Q302 405 271 372Q249 349 235 316T203 215Q184 135 184 108V100Q184 71 191 56Q204 26 235 26Q267 26 300 57T344 112Q347 117 372 217T397 323\",101:\"107 166Q107 230 131 283T193 369T270 420T345 441Q346 441 352 441T361 442H364Q409 442 439 418T470 355Q470 270 366 239Q308 223 218 223H205Q189 164 189 125Q189 83 206 55T261 27Q309 27 353 50T426 109Q436 121 440 121T453 111T466 97Q469 92 455 77Q424 41 372 16T258 -10Q184 -10 146 41T107 166ZM416 333T416 354T401 390T360 405Q322 405 292 384T246 336T223 288T215 261Q215 260 240 260Q262 261 276 262T314 266T353 275T384 291T408 317\",102:\"351 608Q351 642 389 661Q368 668 365 668Q358 668 352 664Q349 663 347 661T342 654T337 647T333 637T330 627T327 614T324 601T321 587T318 571L291 432Q291 431 343 431H394Q400 426 400 423T398 404Q394 390 389 386L335 385H282L255 246Q212 20 189 -51Q136 -199 58 -204Q22 -204 0 -185T-23 -134Q-23 -100 -3 -85T37 -69Q54 -69 65 -80T76 -108Q76 -115 75 -119Q70 -134 61 -144T46 -158L39 -161Q39 -162 42 -163T50 -166T61 -168Q77 -168 91 -145Q98 -128 105 -95L125 -1Q145 90 146 98Q149 109 163 180T189 317T202 384T158 385H114Q108 390 108 393T110 412Q113 424 120 431H165Q211 431 211 433Q213 435 219 473T237 561T266 639Q282 667 310 686T367 705Q402 705 426 686T450 635Q450 600 430 585T390 569Q373 569 362 580T351 608\",103:\"103 163Q106 263 173 347T320 441Q322 441 329 441T341 442Q387 439 419 398Q420 399 420 400Q421 402 425 406T440 416T464 422Q476 421 485 413T494 396Q494 386 465 268T407 38T377 -77Q365 -123 310 -164T179 -205Q46 -205 46 -139Q46 -114 64 -97T106 -79Q127 -79 136 -91T146 -115Q146 -127 141 -138T130 -155T124 -162T125 -163Q133 -166 170 -168Q200 -168 217 -162Q242 -153 264 -130T297 -78Q298 -74 305 -46T320 10T327 38Q326 38 317 31T291 15T256 2Q249 1 231 1Q182 1 143 38T103 163ZM398 324Q398 330 395 346T375 383T332 405Q330 405 326 405T320 404Q291 396 263 365Q230 324 208 239T185 115Q185 38 238 38Q258 38 279 50T312 77T336 106L348 122Q349 125 373 223T398 324\",104:\"398 44Q398 26 414 26Q431 26 451 43Q477 71 496 136Q499 148 501 150T515 153H521Q531 153 534 153T541 150T544 143Q544 133 534 105T496 41T432 -8Q424 -10 408 -10Q370 -10 348 12T326 72Q326 93 342 135Q397 288 397 349Q397 367 396 372Q386 405 357 405Q283 405 228 310Q217 290 212 274T180 152Q153 42 148 26T135 3Q121 -11 102 -11Q89 -11 80 -3T69 19L216 616Q216 629 209 632T170 637H149Q143 643 143 645T145 664Q150 683 158 683Q163 683 223 688T300 694Q312 694 312 685Q312 674 277 539Q241 395 241 393Q242 394 249 399T259 407T271 415T285 424T300 431T318 437T338 440T362 442Q423 442 449 410T475 338Q475 290 437 178T398 44\",105:\"234 599Q234 620 251 638T292 656Q306 656 319 647T332 617Q332 594 313 577T273 560Q260 560 247 569T234 599ZM75 287Q75 292 82 313T103 362T142 413T196 441H214Q248 441 270 419T293 357Q292 338 289 330T245 208Q193 72 193 46Q193 26 209 26Q228 26 247 43Q273 71 292 136Q295 148 297 150T311 153H317Q327 153 330 153T337 150T340 143Q340 133 330 105T292 41T228 -8Q220 -10 204 -10Q160 -10 141 15T122 71Q122 98 171 227T221 384Q221 396 218 400T203 405Q175 403 156 374T128 312T116 279Q115 278 97 278H81Q75 284 75 287\",106:\"266 600Q266 622 283 639T322 656Q340 656 352 645T364 616Q364 596 347 578T305 560Q291 560 279 569T266 600ZM75 287Q75 293 86 316T117 369T168 420T236 442Q282 442 304 415T327 358V332L278 134Q269 98 260 60T246 3T236 -36T227 -66T220 -85T213 -101T204 -114Q181 -150 139 -177T46 -204Q8 -204 -12 -186T-32 -140Q-32 -112 -14 -96T27 -79Q48 -79 57 -91T67 -114Q67 -146 38 -166Q42 -168 49 -168Q75 -168 98 -147T130 -108T146 -71Q150 -59 199 138T250 346Q253 359 253 373Q253 405 230 405Q206 405 184 386T149 345T126 301L117 280Q115 278 98 278H81Q75 284 75 287\",107:\"158 683Q163 683 223 688T300 694Q312 694 312 686Q312 679 262 478L211 273Q212 272 219 276T248 299T296 349Q317 371 328 382T360 410T399 434T439 442Q462 442 480 427T498 373Q498 329 479 313T437 296Q420 296 409 305T398 331Q398 357 413 372T445 391Q454 392 448 399Q445 405 431 405Q408 405 377 385Q351 368 314 327T250 261Q243 257 243 254Q249 254 279 243T328 220Q366 192 366 146Q366 131 361 109T355 62V54Q355 26 376 26Q379 26 387 28Q420 36 443 130Q449 151 454 152Q457 153 465 153H470Q484 153 488 152T492 144Q492 141 489 126T476 88T454 42T420 5T372 -11Q331 -11 306 17T280 88Q280 100 283 119T287 146Q287 172 265 190T221 215T198 220Q197 220 173 121Q152 37 148 24T135 3Q121 -11 102 -11Q89 -11 80 -3T69 19L216 616Q216 629 209 632T170 637H149Q143 643 143 645T145 664Q150 683 158 683\",108:\"162 61Q162 26 183 26Q211 26 239 131Q245 151 249 152Q252 153 261 153H266H271Q288 153 288 144Q288 143 286 129Q276 91 266 65T232 14T179 -11Q144 -11 116 12T87 81Q87 96 88 102L216 616Q216 629 209 632T170 637H149Q143 643 143 645T145 664Q150 683 158 683Q163 683 223 688T300 694Q312 694 312 686Q312 676 240 389L164 86Q162 74 162 61\",109:\"81 278Q75 284 75 289Q77 299 89 338Q101 373 114 396T142 428T166 439T186 442H189Q225 440 251 417Q266 401 271 384L275 374L286 386Q342 442 414 442Q428 442 440 440T461 435T479 427T493 418T503 407T511 397T516 387T520 378T523 370L524 366Q546 395 583 418T667 442Q729 442 755 411T782 338Q782 290 743 178T704 45Q704 26 720 26Q773 26 802 136Q805 148 807 150T822 153H828Q838 153 841 153T848 150T851 143Q851 137 843 115T821 63T778 12T715 -10Q671 -10 652 16T632 71Q632 88 668 191T704 349Q704 367 703 372Q693 405 664 405Q637 405 613 393T571 360T547 329T534 309Q523 290 518 274T487 151Q455 24 452 16Q438 -11 408 -11T376 18Q376 26 411 167T447 314Q449 325 449 346Q449 372 444 384Q431 405 408 405Q334 405 276 305Q266 289 262 273T231 151Q199 24 196 16Q182 -11 152 -11T120 18Q120 26 159 182T200 347Q202 361 202 372Q202 405 181 405Q168 405 159 391Q145 374 132 328T117 280T98 278H81\",110:\"449 44Q449 26 465 26Q482 26 502 43Q528 71 547 136Q550 148 552 150T566 153H572Q582 153 585 153T592 150T595 143Q595 133 585 105T547 41T483 -8Q475 -10 459 -10Q421 -10 399 12T377 72Q377 93 393 135Q448 288 448 349Q448 367 447 372Q437 405 408 405Q381 405 357 393T315 360T291 329T278 309Q267 290 262 274T231 151Q199 24 196 16Q182 -11 152 -11T120 18Q120 23 159 181Q199 343 199 346Q202 360 202 372Q202 406 183 406Q163 406 148 374Q142 360 135 338T124 299T117 280T98 278H81Q75 284 75 287Q76 293 78 303T90 341T110 388T141 425T184 442Q195 442 204 441T221 436T235 429T247 421T256 412T262 403T267 394T271 387T273 381L274 378V374L287 387Q342 442 414 442Q474 442 500 410T526 338Q526 290 488 178T449 44\",111:\"103 155Q103 266 185 354T366 442Q435 442 476 394T517 275Q517 169 436 79T255 -11Q194 -11 149 32T103 155ZM187 119Q187 67 209 47T260 26Q290 26 321 47Q354 68 380 113T426 260Q432 291 432 315Q432 361 408 385Q388 405 358 405Q319 405 283 374T227 294Q217 271 202 213T187 119\",112:\"81 278Q75 284 75 287Q93 379 131 417Q154 442 189 442Q222 440 243 423T272 382L280 390Q335 442 389 442Q446 442 482 398T518 284Q518 212 480 137T375 19Q321 -10 291 -10H282H278Q237 -10 204 28L202 32L181 -51Q160 -135 160 -139Q160 -147 205 -148H230Q236 -155 236 -157T233 -175Q230 -187 227 -190T214 -194Q211 -194 202 -194T169 -193T108 -192Q40 -192 21 -194H13Q6 -187 6 -183T9 -167Q13 -153 16 -151T39 -148Q73 -147 78 -136Q82 -128 139 104Q199 337 199 347Q202 362 202 372Q202 406 182 406Q169 406 159 391Q145 374 132 328T117 280T98 278H81ZM221 111Q234 26 286 26Q307 26 336 47T385 116Q398 147 416 217T435 332Q435 354 433 361Q420 405 383 405Q333 405 279 326L273 317L221 111\",113:\"228 -11Q172 -11 137 33T101 147Q101 205 125 266T201 377T318 441Q322 442 333 442Q388 442 420 394L429 403Q439 413 455 423T481 437T494 442Q498 442 501 439T504 434Q504 425 435 149Q364 -135 364 -139Q364 -147 409 -148H434Q440 -155 440 -157T437 -175Q433 -191 429 -193Q425 -194 418 -194Q416 -194 406 -194T372 -193T309 -192Q259 -192 233 -192T204 -193Q190 -193 190 -184Q190 -181 192 -169Q196 -153 199 -151T219 -148Q266 -148 277 -141Q283 -137 305 -51L325 29L316 22Q270 -11 228 -11ZM397 323Q397 329 394 340T385 367T365 394T333 405Q302 405 271 372Q249 349 235 316T203 215Q184 135 184 108V100Q184 71 191 56Q204 26 235 26Q267 26 300 57T344 112Q347 117 372 217T397 323\",114:\"81 278Q75 284 75 289Q77 301 89 339Q122 442 183 442Q219 442 241 425T271 384L283 396Q327 442 384 442Q424 442 454 421T484 362Q484 327 464 312T424 296Q407 296 396 305T385 331Q385 352 394 365T414 384T424 390Q409 405 378 405Q322 405 276 315L268 300L234 161Q200 25 196 16Q182 -11 152 -11T120 18Q120 23 159 181Q199 343 199 346Q202 360 202 372Q202 405 182 405Q164 405 150 377T128 316T117 280Q115 278 98 278H81\",115:\"153 285Q153 349 197 395T311 442Q355 442 386 420T418 356Q418 321 401 308T365 294Q336 294 331 326Q331 336 334 345T343 359T353 368T362 374L366 376Q365 379 362 383T344 396T308 404Q265 404 246 377T226 325T244 289T287 275T339 258T383 212Q395 188 395 163Q395 132 379 95T333 32Q279 -11 207 -11Q154 -11 115 13T76 86Q76 108 83 123T102 145T121 153T135 156Q154 156 164 145T175 117Q175 82 142 66L132 62Q131 62 131 61Q131 57 139 49T166 34T210 26Q250 26 277 44T312 83T321 123Q321 153 301 166T248 185T204 198Q176 211 162 241Q153 258 153 285\",116:\"94 385Q87 392 87 395Q87 399 90 411T95 425Q97 430 103 430T149 431H196L215 511Q218 521 222 539T228 565T234 585T242 603T251 615T264 623T281 626Q311 626 315 597Q315 591 296 513T275 433Q275 431 320 431H366Q373 424 373 420Q373 398 360 385H263L189 86Q188 80 188 61V54Q188 29 201 27Q213 23 229 30Q253 37 276 66T316 138Q321 149 324 151T342 153H347Q364 153 364 146T360 130Q331 63 290 26T202 -11Q158 -11 135 18T111 81Q111 93 129 168T166 314L184 383Q184 385 139 385H94\",117:\"75 287Q75 299 89 333T135 404T205 441Q246 441 269 420T293 357Q292 338 259 245T225 95Q225 26 274 26Q301 26 324 43T358 77T369 99Q369 102 406 249T446 404Q460 431 490 431T522 402Q522 394 485 245T446 89Q443 74 443 56Q443 28 461 26Q487 26 507 86Q524 130 524 146Q524 147 530 153H547Q570 153 570 144Q570 138 561 109T544 62Q530 29 512 12Q492 -11 454 -11Q429 -9 410 2T385 23T376 41L363 28Q350 16 325 3T269 -10Q204 -10 176 25T148 108Q148 161 184 262T221 383Q221 405 206 405Q178 405 158 375T128 313T116 279Q115 278 97 278H81Q75 284 75 287\",118:\"387 386Q387 407 406 425T445 443Q466 443 479 423T492 371Q492 330 473 253Q411 18 307 -8Q298 -10 279 -10Q208 -10 179 26T149 114Q149 162 185 261T221 384Q221 405 206 405Q177 405 157 375T128 313T116 279Q115 278 97 278H81Q75 284 75 287T79 304T93 342T119 388T158 425T210 441H218Q243 441 268 421T293 357Q292 337 259 245T226 102Q226 26 285 26Q328 26 360 72T422 237Q429 265 429 290Q428 324 408 349T387 386\",119:\"591 386Q591 407 610 425T649 443Q670 443 683 423T696 371Q696 327 672 232T621 85Q575 -11 493 -11Q469 -11 449 -6T418 8T398 24T386 38L382 43Q347 -10 293 -10H286Q221 -10 186 21T150 115Q150 164 185 262T221 384Q221 405 206 405Q177 405 157 375T128 313T116 279Q115 278 97 278H81Q75 284 75 287T79 304T93 342T119 388T158 425T210 441H218Q243 441 268 421T293 357Q292 336 260 246T227 108Q227 26 292 26H295Q332 26 361 93L366 103V119Q366 122 367 133T369 150Q372 167 401 282T433 404Q446 431 477 431Q507 431 509 402Q509 396 500 358T474 254T446 140Q444 126 444 104V92Q444 66 459 46T502 26H505Q527 28 545 43T577 88T602 149T623 226Q633 265 633 290Q632 324 612 349T591 386\",120:\"275 356Q275 383 262 394T233 405Q196 405 166 371T121 289Q119 280 116 279T98 278H81Q77 282 76 283T75 288T78 300Q88 332 109 363T153 411Q195 442 235 442Q306 442 333 386Q373 442 427 442Q461 442 487 421T513 364T494 312T453 296Q436 296 425 305T414 331Q414 352 424 366T446 386L456 390Q448 404 421 404H418Q382 404 358 341Q355 332 328 227T298 105Q295 90 295 75Q295 26 339 26Q365 26 388 43T424 82T444 123T451 146L457 153H474Q490 153 493 152T496 144Q496 133 486 110T456 58T404 10T333 -11Q276 -11 237 45Q197 -11 146 -11Q108 -11 83 10T58 67Q58 99 76 117T119 135Q136 135 147 124T158 96Q158 89 157 85Q149 57 125 45L115 41Q125 26 151 26Q171 26 187 45T214 93Q217 102 244 210T273 330Q275 339 275 356\",121:\"75 287Q75 299 89 333T135 404T205 441Q246 441 269 420T293 357Q292 338 259 245T225 95Q225 26 274 26Q325 26 367 93L405 245Q442 393 446 404Q460 431 490 431T522 402Q522 400 416 -24Q389 -102 327 -153T196 -205Q152 -205 122 -181T91 -119Q91 -84 110 -67T152 -49Q170 -49 180 -60T191 -87Q191 -108 174 -128Q167 -134 157 -138T146 -144Q155 -153 159 -156T173 -163T199 -167Q229 -167 255 -149T297 -105T325 -52T342 -6T347 15Q315 -10 269 -10Q204 -10 176 25T148 108Q148 161 184 262T221 383Q221 405 206 405Q178 405 158 375T128 313T116 279Q115 278 97 278H81Q75 284 75 287\",122:\"160 317Q158 317 155 317Q136 317 136 324Q136 351 171 396T260 442Q292 442 321 410T365 375H369Q384 375 404 408L425 441Q427 442 444 442H460Q466 436 466 434Q466 419 426 367Q387 314 294 222T178 105L170 95L181 94Q198 93 236 81T295 68Q328 68 356 89T395 141Q398 150 401 151T419 153Q441 153 441 144Q441 110 394 50T282 -11Q251 -11 221 23T171 57Q157 57 143 47T121 26T104 3T95 -10Q93 -11 76 -11H60Q54 -5 54 -2Q54 3 61 14Q103 88 233 215Q349 329 349 338L302 351Q269 362 247 362Q227 362 212 356T192 342T183 327T178 320Q175 317 160 317\"},{})},4025:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texOldstyleBold=void 0;var H=L(9403),V=L(6357);T.texOldstyleBold=(0,H.AddPaths)(V.texOldstyleBold,{48:\"259 460H279Q352 460 403 444T491 378Q528 320 528 219Q528 100 475 45Q417 -17 287 -17Q152 -17 99 44T46 219Q46 246 47 265T57 318T82 376T131 422T210 454Q234 460 259 460ZM389 229V271Q389 351 371 380T280 409Q232 409 208 385Q194 371 190 345T185 229V210Q185 108 194 83Q208 35 287 35Q317 35 336 42Q372 55 380 85T389 204V229\",49:\"119 417Q191 417 240 428T310 450T338 461Q353 461 357 452T361 400Q361 389 361 342T360 254V62H420H456Q483 62 488 58T494 35V29Q494 13 491 7T473 0Q468 0 424 1T295 2T167 1T117 0Q114 0 111 0T107 1Q96 8 96 27V35Q96 54 102 58T140 62H170H229V213Q229 363 228 363Q220 360 196 358T150 356L130 355H93Q84 360 82 365T80 386Q80 404 81 407T95 417H119\",50:\"214 399Q202 399 191 398T175 395T170 392L171 390Q172 389 174 386T178 379T181 369T182 355Q182 328 165 312T123 296Q99 296 82 312T64 356Q64 397 105 428T253 460Q301 460 337 456T411 441T476 403T514 338Q516 328 516 310V304Q516 257 470 227Q456 217 427 205T376 184L354 176Q350 174 325 162T277 139L254 128Q414 129 428 130H439Q450 148 453 166T460 188T486 193H493Q515 193 517 178Q517 171 502 94T484 11Q481 3 472 2T410 0H269Q65 0 62 2Q55 5 53 10T51 32Q51 54 56 58Q60 62 173 131Q296 207 318 224Q368 264 368 308Q368 342 342 363T283 392T214 399\",51:\"80 309Q80 367 131 414T276 461Q388 461 441 417T494 313Q494 265 463 223T373 155L361 151L376 147Q436 132 480 92T525 -15T487 -127T393 -192T274 -211Q179 -211 114 -167T48 -53Q48 -18 69 5T128 29Q168 29 188 5T208 -50Q208 -59 207 -67T203 -81T197 -92T190 -101T183 -109T177 -114T170 -118L167 -121Q160 -125 164 -127Q167 -129 176 -133Q215 -152 268 -152H273Q337 -152 356 -92Q364 -69 364 -14Q364 45 352 74T303 120Q287 125 240 125H230Q201 125 196 127T191 146V152Q192 170 196 173T233 178Q234 178 241 178T252 179T262 181T274 183T285 188T297 195T308 205T319 218T328 235T337 257Q345 280 345 320V330Q345 345 343 355T335 379T312 399T270 407Q226 407 177 377Q226 356 226 310Q226 270 204 253T153 235Q123 235 102 253T80 309\",52:\"180 0Q155 0 124 0T84 -1Q48 -1 40 3T32 27V37Q32 59 34 63T204 265T377 465Q380 468 383 468H387Q391 468 398 468T411 469Q432 469 438 468T449 459Q451 455 451 258V62H489H498Q531 62 536 58T542 31Q542 9 537 5T504 0H489H451V-132H489H498Q530 -132 536 -136T542 -163Q542 -181 538 -187T522 -194Q518 -194 483 -193T378 -192Q281 -192 256 -193L217 -194Q203 -189 203 -169V-163V-158Q203 -140 209 -136T246 -132H265H314V0H180ZM325 62V320L105 63L215 62H325\",53:\"131 29Q159 26 175 12T194 -13T197 -35V-41Q197 -58 195 -66Q191 -76 185 -84T173 -97T161 -105T152 -109L148 -110Q148 -112 158 -121T195 -141T252 -152Q274 -152 280 -151Q335 -137 349 -104T363 9Q363 85 356 114T322 157Q305 166 286 166Q251 166 223 154T182 131T162 109Q154 98 150 96T130 93Q107 93 102 104Q100 107 100 279V371V424Q100 461 110 461Q114 461 123 458T149 450T183 441Q234 429 286 429Q313 429 340 432T387 440T422 449T447 457T458 461Q472 461 472 435Q472 420 470 418Q464 405 438 379T352 325T226 297Q189 297 171 301H168V182Q169 182 174 185T190 194T213 205T248 213T292 217Q391 217 454 159T517 5Q517 -92 444 -151T255 -211Q167 -211 112 -160T57 -44Q57 -12 76 8T131 29\",54:\"48 316Q48 398 70 462T124 562T198 621T274 652T339 660Q377 660 384 659Q497 632 497 532Q497 507 482 487T431 466Q397 466 381 486T365 530Q365 569 405 593Q382 603 381 603Q361 607 350 607Q316 607 279 589T221 533Q199 489 196 385L195 370Q196 371 203 379T217 395T237 410T263 424Q283 431 313 431Q409 431 468 368Q526 310 526 208Q526 131 492 81T405 5Q359 -17 289 -17Q256 -17 227 -11T163 17T105 73T65 170T48 316ZM293 380Q244 380 220 331T196 212Q196 104 216 80Q240 41 292 41Q295 41 301 41T309 42Q338 46 355 62Q372 81 375 108T379 230Q378 314 372 333Q358 375 299 380H293\",55:\"95 210H88Q66 210 64 225Q64 229 82 345T102 465Q106 476 125 476H131Q162 476 162 458Q162 451 213 448Q221 448 238 447T260 446Q261 446 410 444Q436 444 468 444T509 445Q544 445 551 440T558 413V404Q558 395 547 380T478 301L392 202Q354 150 339 81T321 -104V-132Q321 -187 286 -203Q273 -211 255 -211Q236 -211 217 -199T190 -160Q189 -153 189 -130Q194 17 282 156Q309 200 370 270Q404 307 400 307H293Q151 306 146 303Q140 300 132 259T120 215Q115 210 95 210\",56:\"48 164Q48 199 59 228T92 277T128 307T163 329Q159 332 155 336Q135 346 110 382Q80 427 80 477Q80 564 147 620Q202 660 264 660Q266 660 275 660T290 661Q384 661 439 619T494 506Q494 486 489 468T477 437T459 413T440 395T421 380T406 370L410 368Q414 365 421 361T437 351T456 335T476 316T495 291T511 262T522 228T526 189Q526 93 460 38T282 -17Q242 -17 205 -9T130 19T71 75T48 164ZM406 506Q406 545 379 576T283 607Q218 606 193 585T168 536Q168 522 172 513T195 490T224 471T275 443L346 403Q406 446 406 506ZM291 42Q365 42 395 70T425 134V141Q425 170 401 190T319 242Q308 248 302 251Q286 260 266 271T235 288L225 294Q222 292 217 289T198 274T175 249T157 212T148 163Q148 116 179 79T291 42\",57:\"175 -140Q198 -152 236 -152Q294 -152 332 -116Q356 -91 366 -54T379 62V78L376 74Q372 70 366 64T352 50T333 35T308 23Q289 17 262 17Q168 17 108 77T48 235Q48 273 59 317Q81 381 141 421T276 461Q279 461 285 461T295 460Q326 460 354 454T415 426T471 371T510 277T526 136Q526 42 501 -28T432 -136T341 -192T240 -210Q199 -210 169 -201T121 -178T94 -146T80 -112T77 -82Q77 -51 95 -33T143 -15Q170 -15 189 -33T209 -81Q209 -116 175 -140ZM377 244V274Q377 300 376 316T368 352T348 384T312 405Q307 406 283 406Q257 406 238 396T213 376T205 361Q196 341 196 259V233V181Q196 122 211 96T278 69H298Q330 82 345 104Q367 134 376 190Q377 200 377 244\",65:\"761 751Q784 751 784 728V711Q784 570 795 417T820 191Q844 76 865 76Q868 76 902 93T962 112H973Q989 104 989 94Q989 92 987 86Q978 47 846 -11Q812 -25 779 -26Q722 -26 708 9Q688 47 669 161H524L379 162L359 136Q286 43 234 -3T142 -49T71 -19T39 55Q39 92 60 131T103 174Q113 174 117 167T124 149T136 128T166 110Q183 105 190 105Q230 105 341 246Q401 322 453 397T531 514T582 601T611 651H640V663Q640 692 676 718T745 750Q747 750 752 750T761 751ZM658 266Q653 312 649 377T644 489T641 541V556L557 415Q500 325 448 253Q467 261 524 261H568H658V266\",66:\"441 83Q571 83 571 195Q571 246 538 279T466 322T386 333Q378 333 357 330T329 327Q307 327 307 345Q307 354 313 365T347 396T419 430Q546 472 581 498Q594 508 594 535Q594 574 567 589T508 604Q469 604 442 583Q390 546 342 457T265 256Q237 148 186 60Q167 29 144 13Q105 -15 68 -17H65Q40 -17 40 1Q40 7 53 29T87 100T124 210Q162 373 190 575Q188 575 174 567T138 550T98 542Q75 542 75 560Q75 588 123 618Q135 625 203 659T281 696Q299 703 316 703Q339 703 339 685Q339 656 328 583L333 588Q338 592 346 599T367 615T394 634T428 654T467 674T511 690T559 701T611 705Q651 704 681 689Q739 659 739 598Q739 507 595 427L584 421Q585 420 595 416T610 410T626 402T644 392T660 380T677 365T691 347T703 325T710 299T715 268Q717 193 665 130Q622 73 531 28T348 -17Q275 -17 225 10Q206 19 200 24T193 36Q193 57 231 86T311 119H322Q386 83 441 83\",67:\"243 -20Q135 -20 78 48T20 218Q20 280 39 344T98 470T193 580T324 661T488 702H490Q491 702 493 702T498 703T507 703T518 702H526Q599 702 599 631Q599 597 577 550T541 486Q523 463 490 447T431 430Q423 430 419 433Q409 437 409 450Q410 456 432 499T454 567Q454 586 446 594T415 603Q316 603 254 532Q216 487 190 421T164 284Q164 228 181 186T226 122T282 90T340 80Q377 80 405 96T449 131T492 167T553 187H555Q580 187 580 168Q580 153 551 123T476 60T367 4T243 -20\",68:\"107 0Q92 5 92 18Q92 33 113 53T160 86Q170 91 182 94T197 100L206 120Q248 226 273 337T304 501T309 585Q278 585 234 577T179 557Q172 550 166 532T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q281 686 447 686H480H517Q692 686 784 631Q885 571 885 450Q885 339 805 239T586 75T286 1Q276 0 187 0H107ZM741 391Q741 424 731 452T694 510T613 558T481 584Q476 584 468 584T457 585L449 586V579Q441 501 425 424T391 292T357 193T330 125T319 100H324Q511 100 628 175Q688 215 714 275T741 391\",69:\"495 516Q485 516 478 520T470 532Q470 537 476 550T482 570Q482 589 465 596T401 603Q344 603 319 582Q295 558 295 519Q295 493 312 474T355 445T407 432T455 427Q477 427 477 409Q477 395 453 371T389 333Q380 330 345 327T279 312T223 272Q181 223 181 176Q181 131 225 107T324 83Q366 83 395 98T448 136T487 167Q517 185 547 187H551Q574 187 574 170Q574 151 535 113T421 36T271 -15Q260 -16 226 -16Q181 -16 152 -9Q104 4 71 33T37 111Q37 140 50 176T106 263T216 356Q215 357 207 362T190 374T172 392T156 419T150 456Q150 521 208 580T341 670T474 702Q475 703 499 703Q528 703 547 701T586 693T615 673T627 637Q627 584 581 550T495 516\",70:\"812 567Q804 567 795 570T786 579Q786 586 647 586H559L558 582Q558 575 539 510T506 407L498 384H775Q788 378 790 368Q790 328 746 298T665 268Q646 268 642 284H457L447 261Q396 150 360 94Q329 46 270 8T149 -30Q123 -30 100 -24T63 -10T37 9T22 26T17 36Q17 59 56 88T135 119Q145 119 149 117T165 104Q187 78 227 72Q232 72 234 76Q245 93 273 145T350 323T424 570L428 586H276Q265 575 239 563T190 551Q180 551 174 556T167 569Q167 580 179 597T213 634T278 668T371 685Q374 686 624 686Q863 685 888 682Q917 678 927 663Q930 658 930 650Q930 624 888 596T812 567\",71:\"50 279Q50 361 88 438T190 570T335 661T503 702H514Q524 703 532 703Q671 703 671 626Q671 580 614 514T495 447Q472 447 472 465Q472 477 499 511T527 562Q527 582 507 592T433 602Q351 602 302 569Q252 535 223 469T194 344Q194 266 237 217T352 168Q401 168 442 205T505 316Q515 345 551 368T622 393H625Q649 393 649 376Q649 371 635 318T612 237Q580 129 540 62T442 -49Q353 -114 264 -114Q259 -114 252 -114L246 -113Q190 -113 142 -107T81 -96Q71 -90 71 -81Q71 -57 110 -30T187 2Q196 2 236 -4T338 -14Q371 -14 377 -9Q410 24 446 113L451 127Q353 68 253 68Q157 68 104 129T50 279\",72:\"42 447Q20 447 20 465Q20 481 47 515T119 589T239 657T392 686Q443 686 463 664T484 616Q484 570 473 506T452 401L441 360Q441 359 550 359H660L663 370Q684 435 716 522T758 624Q771 646 806 666T870 686Q894 686 894 668Q894 667 867 597T804 416T752 218Q737 135 737 93Q737 77 746 65T778 53Q799 53 803 54T814 63Q831 86 864 103T924 120Q946 120 946 100Q945 85 931 63T888 16T806 -27T684 -48H681Q625 -48 603 -10Q593 4 593 29Q593 71 603 131T624 230L634 269Q632 269 624 266Q610 261 600 261T507 259H411L399 222Q344 62 322 21Q301 -7 268 -24T209 -41H207Q187 -41 185 -25Q185 -17 192 2T220 71T261 184Q284 256 284 258Q284 259 227 259H170Q169 259 166 261T162 264T158 266T156 271T155 277Q155 296 184 320T250 356Q259 358 286 359Q312 359 312 360Q314 372 318 385Q332 450 339 526Q339 530 339 535T340 543Q340 586 296 586Q255 586 227 576T188 553T165 523T146 497Q127 476 97 462T42 447\",73:\"56 499Q32 499 32 516Q32 540 64 580T165 649Q241 682 365 685Q366 685 376 685T405 685T445 686T496 686T553 686H732Q746 677 746 668Q746 646 711 620T642 587L572 586H503Q479 546 458 479T424 352T383 224T318 111L309 101L412 100H514L523 109Q567 150 618 153Q644 153 644 135Q644 132 642 124Q629 86 581 52T476 6Q454 2 433 2T216 0Q-11 0 -15 2Q-27 6 -27 18Q-27 37 2 61T59 93Q77 100 142 100H198Q255 177 299 369Q337 513 382 574L391 586H348Q261 586 176 576Q163 543 124 521T56 499\",74:\"286 390Q263 390 263 407Q263 432 293 481T367 566Q511 687 724 687Q738 687 761 687T793 686H923Q937 677 937 668Q937 648 905 623T842 589Q829 587 817 586T802 585T795 583T788 578Q709 506 632 189Q622 153 615 134T588 81T537 17Q482 -39 404 -76T247 -114Q192 -114 158 -100Q53 -61 53 32Q53 59 58 73T79 102Q126 147 177 147Q200 147 200 128Q200 123 198 112T196 96Q196 47 238 17T345 -13Q362 -13 377 -9T404 0T426 16T444 34T459 55T470 76T478 97T483 116T488 132L490 141Q511 222 520 257T554 364T608 486T675 576L685 586H634H612Q532 586 484 564Q453 549 436 526T409 478T395 447Q378 424 345 407T286 390\",75:\"98 542Q75 542 75 560Q75 588 123 618Q132 624 199 657T275 694Q291 703 315 703Q327 703 332 699T338 690T339 670Q339 596 323 505T283 337T237 194T198 90L181 53Q170 31 136 8T68 -17H65Q40 -17 40 0L76 92Q112 185 150 322T194 564V578L168 565Q125 542 98 542ZM834 142Q834 125 819 100T774 48T692 3T576 -16H560Q540 -16 508 6Q469 33 422 108T342 267T309 398Q309 411 310 417T320 442T347 482Q401 542 517 615T710 702Q712 702 721 702T735 703Q772 703 791 690Q819 674 819 646T792 597T733 574H722Q704 584 704 599Q706 607 700 610T672 617L660 613Q609 595 524 538T423 450V440Q423 376 488 247T604 83Q621 70 640 70Q677 70 701 82Q713 87 718 101T737 132T783 160Q792 163 807 163Q834 163 834 142\",76:\"63 -17Q41 -17 41 0Q41 22 85 54Q101 68 113 92T133 141T154 219T182 315Q230 462 306 553Q345 599 391 632T478 678T543 697T582 703Q584 703 589 703T598 702Q643 702 666 676T689 613Q689 588 683 575Q674 551 632 524T552 496Q530 496 530 512Q530 517 531 525T533 538Q533 559 522 577T480 596H476Q462 596 451 588T415 544Q350 447 310 281Q284 181 261 136L255 124H285Q342 123 441 107T583 90L596 89Q603 116 647 144T729 173Q751 173 751 157Q751 118 685 60T523 -15Q514 -16 479 -16Q421 -16 320 0T171 18H155L142 10Q98 -17 63 -17\",77:\"38 20Q38 59 60 99T104 139Q106 139 126 125T176 106H181Q200 106 221 139T286 281Q322 370 342 451T368 581T376 634Q384 657 420 680T487 703Q502 703 507 696T522 649Q538 589 554 537Q579 453 609 372T660 248T686 202Q687 201 739 244T830 322L1166 642Q1225 700 1230 701Q1230 701 1237 703Q1258 703 1258 667L1253 637Q1248 607 1241 558T1227 451T1214 326T1209 202Q1209 77 1232 77Q1237 77 1269 94T1326 112H1329Q1353 112 1353 94Q1353 81 1334 60Q1311 37 1248 7T1150 -24H1141H1135Q1085 -24 1074 26Q1064 75 1064 134Q1064 239 1086 426Q1087 430 1087 434L1061 410Q871 227 783 149L694 76Q653 44 647 40T631 34Q620 34 616 37T594 63Q546 125 514 198Q467 307 423 449L418 466L412 444Q376 310 306 153Q278 88 251 45T201 -18T163 -43T131 -49Q102 -48 70 -31T38 20\",78:\"47 139Q81 105 122 105Q137 105 147 117Q159 134 182 199T234 381T274 610Q275 634 284 647Q297 666 327 684T389 703Q403 703 408 695T428 645Q480 490 567 298Q628 163 673 103Q674 102 674 102T675 106Q732 331 803 551Q842 674 875 725Q908 775 966 807T1081 840H1084Q1105 840 1105 803Q1105 768 1088 733T1051 689Q1045 686 1032 686Q986 683 948 663T901 624Q881 579 837 430T760 154L726 28Q725 28 725 28T723 25Q716 0 682 -24T611 -48Q600 -48 595 -45T576 -23Q522 44 480 124Q417 243 332 463L328 473L325 457Q291 293 227 124Q159 -49 72 -49Q38 -49 5 -28Q-24 -8 -24 21Q-24 58 -3 98T41 139H47\",79:\"433 703Q456 703 456 685Q456 672 441 655T407 627Q402 623 378 611T328 579T276 524Q207 434 207 324Q207 222 270 153T441 84Q566 84 651 177T737 400V405Q737 496 693 549T576 603Q542 603 510 560Q490 537 472 502T442 454Q397 412 346 409Q320 409 320 427Q320 430 322 436Q331 465 360 507T433 594T542 671T677 703Q776 703 829 636T882 468Q882 369 831 277T702 122T528 21T343 -17Q214 -17 139 61T63 257Q63 336 94 409T173 534T272 625T367 684T432 703H433\",80:\"170 -67Q147 -67 147 -49Q147 -42 162 -8T204 99T253 254Q274 332 288 415T305 542L308 585Q277 585 234 577T179 557Q172 550 166 532T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q279 686 448 686H495H537Q622 686 678 677T784 637Q846 598 846 533Q846 452 776 375T597 252T378 206H366L358 181Q341 130 316 68T282 -7Q262 -33 230 -50T170 -67ZM701 468Q701 512 661 540T570 577T461 586H448V582Q446 576 443 545T428 447T395 301L389 280Q390 280 398 284T419 295T441 303Q443 304 484 306T572 321T651 359Q701 402 701 468\",81:\"874 453Q874 372 836 298T750 177T638 89T543 33T486 8L483 7Q485 5 523 -7T622 -32T726 -46Q741 -46 746 -45T755 -41T762 -27Q770 -1 806 23T878 50H890Q905 42 905 33Q905 -8 838 -68T670 -145Q662 -146 628 -146Q538 -146 389 -100T164 -50Q132 -50 132 -32T162 11T227 47Q231 48 286 51T394 62T518 100T641 180Q730 271 730 387Q730 478 673 540T520 602Q410 602 337 525T264 355Q264 284 310 244T420 203Q476 203 568 222Q594 222 594 204Q594 184 565 161T508 128Q433 103 316 103Q227 103 174 157T120 290Q120 382 182 471T343 620T548 697Q578 703 601 703Q604 703 611 703T623 702Q663 702 687 696Q760 679 817 618T874 453\",82:\"159 0Q159 5 172 34T205 114T245 229T284 386T309 575V585H304Q303 585 295 585T282 584Q233 579 207 570T175 553T165 531T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q279 686 448 686H505H582Q683 686 745 672T834 611Q842 594 842 565Q842 523 824 484T780 419T722 370T669 336T632 318L619 312L626 302Q640 279 667 227T696 172Q717 133 735 112T762 88T784 84Q824 84 872 118T957 153Q981 153 981 136Q981 114 937 78T820 13T684 -17Q646 -17 616 8T569 66T526 151T477 234Q461 256 446 265Q437 272 421 274Q400 274 400 291Q400 311 430 336T495 371Q496 371 543 374T627 392T681 436Q699 467 699 503Q699 550 644 568T471 586H449V582Q449 581 447 559T438 499T422 413T393 298T348 165Q313 73 296 45Q282 24 249 4T185 -17Q159 -17 159 0\",83:\"204 476Q204 525 248 577T372 666T539 703T674 683T721 612Q721 588 714 569Q704 547 669 524T601 499Q573 499 573 516Q573 521 575 527T577 543Q577 563 568 574T548 588L539 590Q490 603 444 603Q418 603 394 597T364 583Q348 567 348 533Q348 493 382 466T459 425T555 387T633 330Q662 292 662 249Q662 153 544 69T257 -16Q218 -16 208 -15Q118 1 64 46Q25 76 25 126Q25 185 82 235T203 290H207Q229 290 231 274Q231 243 180 213Q173 209 172 206T170 189T171 170T183 150T216 121Q273 83 356 83Q412 83 459 100Q493 111 507 141Q518 165 518 185Q518 208 506 228T478 262T437 288T398 306T360 320Q316 335 285 352T239 384T215 416T205 443T204 467V476\",84:\"61 462H59Q38 462 38 479Q38 528 109 594T289 683L304 685L837 687L846 693Q889 720 923 720Q947 720 947 702Q945 671 892 631T776 583Q774 583 772 583T769 582T766 582L764 581H758Q753 581 744 581T722 580T693 580T662 580H563L514 385Q507 355 493 299T475 225T460 172T443 119T426 76T402 24Q386 -11 355 -33T304 -61T266 -69Q242 -69 242 -50Q243 -45 253 -25T278 32T307 115L364 340Q405 511 413 538T436 580H207Q202 572 200 568T197 561T195 552T190 537Q176 511 135 487T61 462\",85:\"124 586Q107 586 74 569T15 552H13Q-10 552 -10 570Q-10 605 70 645T222 686Q283 686 283 631Q283 590 246 504T172 326T135 181Q135 130 157 107T205 83Q221 83 259 106Q347 165 453 301T604 548Q607 557 612 569T619 587T624 600T628 612T632 621T637 628T641 634T647 640T654 645T662 652Q706 686 748 686Q771 686 771 669Q771 656 754 614T700 467T630 229Q615 168 610 105Q610 88 617 78L641 90Q681 111 706 112Q733 112 733 95Q733 82 714 60Q694 40 633 10Q567 -23 532 -24Q507 -24 495 -17Q466 -4 466 32Q466 96 500 225Q277 -17 102 -17Q56 -17 23 17T-10 118Q-10 164 13 234T64 363T115 481T139 567Q139 586 124 586\",86:\"25 608Q25 628 60 657T148 686Q184 683 213 671T273 625T327 538T363 394T380 184L381 134L399 148Q503 226 574 302T667 415T689 467Q688 474 684 482T672 502T645 521T600 532Q576 532 576 567Q576 604 597 644T641 685H649Q701 685 737 648T774 545Q774 457 703 333T461 66Q397 13 332 -32T255 -77Q237 -77 237 -30V-23Q241 20 241 109Q241 483 115 569Q91 586 50 589Q25 589 25 608\",87:\"25 607Q25 629 62 657T142 686Q205 686 248 647T312 541T339 411T347 275Q347 249 345 203V189Q375 219 449 316T587 516Q629 584 629 587Q629 589 626 597T622 607Q622 629 658 656T732 686H744Q755 680 757 678Q757 677 769 649T799 577T835 475T874 339T904 183Q908 157 910 151L925 169Q997 252 1059 343T1121 474Q1120 498 1103 513T1059 532Q1036 532 1036 568Q1036 600 1053 636T1090 683L1097 686H1109Q1147 684 1176 652T1206 551Q1206 460 1131 320T897 7Q859 -33 840 -52T816 -74T804 -77Q788 -77 784 -32Q783 -28 783 -26Q774 108 744 239T691 436T665 501Q664 501 649 475T602 400T528 289T420 146T280 -15Q243 -56 231 -66T210 -77Q191 -77 191 -40Q191 -38 195 -4T204 91T209 217Q209 290 202 351T177 469T126 557T45 589Q25 589 25 607\",88:\"762 562Q762 579 737 584T711 604Q711 630 753 658T834 686Q864 686 885 669T906 627Q906 580 834 522T614 379L584 362V357Q585 354 589 315T597 233T603 183Q610 132 627 116T671 100Q678 100 704 113T754 126T778 107Q776 79 733 45T626 2Q615 1 578 1Q542 1 535 3Q521 7 510 15T491 31T477 54T467 78T460 108T456 137T452 170T449 201Q447 220 445 240T442 270L441 281Q435 281 357 233Q240 165 206 135Q200 128 200 124Q200 113 208 108T226 101T244 96T252 82Q252 61 214 31T129 1H120Q97 1 77 16T56 60Q56 105 133 168T414 345Q428 352 431 354T433 359Q422 493 414 522Q407 551 395 566T373 583T350 586H341L332 580Q290 560 265 560Q243 560 243 577Q243 585 248 596T269 624T306 653T365 676T447 686H456Q472 686 484 683T514 671T543 637T562 576Q565 557 570 501L577 437Q577 436 613 457T694 506T756 551Q762 558 762 562\",89:\"73 555Q49 555 49 573Q49 602 110 644T239 686Q319 686 376 624Q416 584 444 511T483 361T499 240T503 173Q503 165 504 165Q506 165 524 184T556 218Q631 297 674 377T718 485Q718 505 699 526Q673 552 628 552Q619 552 613 562T607 590Q607 617 621 645T658 685Q661 686 671 686Q718 686 757 652T797 545Q797 476 749 369T602 146Q500 29 371 -67T176 -164Q112 -164 74 -120T36 -29Q36 5 55 36T95 67Q104 67 108 59T115 39T128 12T154 -12Q183 -30 216 -30Q239 -30 305 7L361 44L367 49V54Q367 95 364 143T351 273T312 429T243 546Q206 581 156 588L146 581Q108 555 73 555\",90:\"622 574Q522 579 420 579H396Q373 579 364 574T351 550Q339 516 297 490T218 462Q195 462 195 479Q195 487 197 492Q218 565 313 625T509 685Q564 685 650 683T755 680Q787 680 807 683T831 686Q853 686 853 669Q853 657 826 626Q742 532 641 437L619 415L622 414Q626 414 631 414T642 414Q697 411 697 388Q697 367 670 345T607 323Q605 323 592 325T546 329H522L490 302Q457 274 400 226T289 136L260 113L318 112Q345 111 452 109T587 106H627Q650 143 656 170Q666 197 710 225T788 253Q811 253 811 237Q811 211 781 160T710 77Q619 0 515 0Q507 0 497 0T484 1Q434 1 319 3T177 6Q123 6 95 2Q83 2 71 0H68Q46 0 46 17Q46 28 58 44Q68 56 100 80T210 165T383 307L408 329H361L314 330Q297 338 297 350Q297 368 320 388T368 413Q375 415 441 415H506L647 555L664 574H622\"},{})},2698:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texOldstyle=void 0;var H=L(9403),V=L(9474);T.texOldstyle=(0,H.AddPaths)(V.texOldstyle,{48:\"39 213Q39 274 53 319T89 389T139 429T192 448T242 452Q347 452 400 400Q460 335 460 213Q460 -22 250 -22Q39 -22 39 213ZM364 242Q364 279 363 301T355 348T338 385T306 406T254 415Q250 415 245 415T238 416Q217 416 190 404T150 368Q136 339 136 221Q136 114 146 78T200 23Q219 16 250 16Q280 16 299 23Q341 41 352 77T364 221V242\",49:\"116 410Q176 412 215 423T269 443T288 453H291Q293 453 301 447V254Q301 62 303 60Q307 52 322 49T394 46Q418 46 422 43T426 23Q426 8 424 4T411 0Q407 0 369 1T258 2T148 1T106 0Q96 0 94 4T91 23Q91 40 95 43T123 46Q180 46 195 49T215 61Q216 63 216 220V376Q192 367 119 364H93L86 371V403L92 410H116\",50:\"55 334Q55 386 105 419T236 453Q333 453 390 413T448 307Q448 278 437 256T406 218T365 193T318 172T277 151L248 134Q219 118 191 102T163 84T267 83L382 85H391Q399 99 406 126Q410 143 413 145T429 148Q440 148 442 147T449 139Q449 137 435 73T420 7Q420 6 414 0H233Q94 0 71 0T46 5Q46 5 46 6Q44 8 44 24Q44 39 46 41Q47 44 98 78T212 155T294 212Q347 257 347 304Q347 354 306 380T203 407Q150 407 120 377Q118 375 123 373Q146 362 146 332Q146 315 133 302T101 288Q85 288 70 298T55 334\",51:\"69 312Q69 377 122 414T233 452Q333 452 381 409T430 313Q430 268 402 223T311 149L301 144Q307 143 317 140T355 123T402 92T439 44T456 -25Q456 -101 396 -158T241 -216Q154 -216 98 -173T42 -68Q42 -58 44 -50T50 -35T57 -25T66 -17T75 -13T82 -10L87 -8Q92 -7 102 -7Q132 -7 147 -25T162 -66Q162 -112 118 -125L113 -126Q113 -129 127 -140T173 -162T239 -173Q268 -173 292 -158Q345 -124 345 -24Q345 33 329 67Q298 125 229 125H210H172Q166 131 166 142Q166 159 172 161Q178 161 208 164T244 169Q251 169 263 176T291 199T316 245T327 314Q327 413 238 413Q182 413 130 369Q177 350 181 312Q181 289 166 273T125 257Q102 257 86 272T69 312\",52:\"163 0Q139 0 109 0T71 -1Q43 -1 36 2T28 15V27V46L190 270Q325 457 330 462Q333 464 352 464H371L377 458V46H464L471 40V6L464 0H377V-65V-108Q377 -131 379 -137T391 -144Q409 -148 446 -148H464Q468 -151 471 -155V-187L464 -194H453Q395 -192 325 -192Q222 -192 210 -194H199L193 -188V-154L199 -148H228Q241 -148 250 -148T265 -146T275 -145T281 -143T284 -141T286 -138T289 -134V0H163ZM295 46V350L75 46H295\",53:\"159 -44Q159 -66 145 -80T109 -96H102L107 -105Q148 -173 228 -173Q255 -173 280 -162Q351 -128 351 -6V8Q351 67 344 98T316 151Q288 176 255 176Q175 176 136 109Q129 100 114 100Q97 100 95 106Q93 110 93 277V403Q93 451 98 451Q100 452 103 452Q105 452 124 445T177 431T251 423Q294 423 328 430T380 445T401 453Q410 453 410 435V422Q332 331 203 331Q152 331 140 339Q139 339 139 254V168Q194 214 256 214Q332 214 390 154T448 0Q448 -95 381 -155T229 -216Q153 -216 104 -166T50 -49Q50 -15 66 -1T105 13Q128 13 143 -3T159 -44\",54:\"42 313Q42 401 68 472T133 583T215 644T296 665H304Q317 665 329 664T360 657T393 640T418 608T432 557Q432 533 422 519T401 502T380 498Q358 498 343 512T328 550Q328 591 367 601L372 602Q372 604 365 609T341 620T307 626Q260 626 226 600T174 537Q147 483 143 376V356Q192 434 266 434Q317 434 357 409Q406 375 435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM251 396Q211 396 178 354T145 217Q145 159 152 122T166 73T187 47Q216 21 252 21Q294 21 321 47Q342 68 349 99T356 203V232Q356 264 354 285T345 331T322 373T280 395Q274 396 251 396\",55:\"75 246Q64 246 62 247T55 255Q55 259 72 357T90 458L94 462H99Q104 463 109 463H121Q128 460 128 452Q128 445 134 441T165 435T233 432T356 431H478L485 425V392L414 298Q408 290 385 260T358 223T337 191T317 154T302 116T289 68T282 14T275 -55T274 -137Q274 -173 272 -177Q262 -216 223 -216Q170 -216 170 -157V-148Q172 -78 189 -12T237 109T288 196T338 266Q345 275 348 279Q395 340 395 342Q396 343 376 343T274 343Q122 342 117 339T103 294T90 248Q88 246 75 246\",56:\"69 496Q69 570 124 618T247 666Q321 666 375 624T429 515Q429 468 405 433T320 361L346 344Q385 320 403 301T439 250Q456 212 456 181V172V160Q456 141 449 119T426 71T386 26T326 -8T246 -21Q160 -21 102 30T43 155Q43 265 167 332L176 337L161 347Q105 384 87 423Q69 458 69 496ZM371 513Q371 567 334 596T249 626Q198 626 163 598T127 532Q127 521 129 511T138 492T150 476T167 460T185 447T207 433T228 420L284 384L294 391Q346 424 363 469Q371 486 371 513ZM190 21T250 21T351 56T393 140Q393 180 362 213Q354 221 317 246T246 292L212 313Q210 313 200 307T173 287T142 256T117 212T106 157Q106 100 148 61\",57:\"171 -101Q171 -118 163 -130T146 -146T134 -151Q132 -151 132 -152Q132 -154 140 -159T167 -168T206 -173Q274 -173 317 -108Q356 -50 356 79V86L350 77Q308 9 231 9Q150 9 92 81Q42 141 42 228Q42 289 64 333Q93 390 142 421T235 452Q237 452 244 452T255 453Q289 453 321 439T386 391T437 290T457 128Q457 -29 381 -122T206 -216Q148 -216 108 -187T67 -104Q67 -75 84 -62T119 -49Q141 -49 156 -63T171 -101ZM242 46Q293 46 324 94T355 223Q355 323 337 356Q316 401 275 410Q267 412 248 412Q206 412 179 386Q155 360 149 328T143 224Q143 120 163 88Q192 46 242 46\",65:\"576 668Q576 688 606 708T660 728Q676 728 675 712V571Q675 409 688 252Q696 122 720 57Q722 53 723 50T728 46T732 43T737 41T743 39L754 45Q788 61 803 61Q819 61 819 47Q818 43 814 35Q799 15 755 -7T675 -30Q659 -30 648 -25T630 -8T621 11T614 34Q603 77 599 106T594 146T591 160V163H460L329 164L316 145Q241 35 196 -7T119 -50T59 -24T30 43Q30 75 46 100T74 125Q81 125 83 120T88 104T96 84Q118 57 151 57Q189 57 277 182Q432 400 542 625L559 659H567Q574 659 575 660T576 668ZM584 249Q579 333 577 386T575 473T574 520V581L563 560Q497 426 412 290L372 228L370 224H371L383 228L393 232H586L584 249\",66:\"304 342Q292 342 292 353Q292 372 323 391Q331 396 417 428T533 487Q563 512 563 555V562Q563 575 557 589T530 618T475 636Q429 636 396 613T330 539Q263 446 210 238Q196 183 173 120Q135 31 121 16Q108 1 85 -10T47 -22T32 -10Q32 -5 44 18T77 93T112 206Q135 296 154 395T182 550T191 615Q191 616 190 616Q188 616 179 611T157 601T131 594Q113 594 113 605Q113 623 144 644Q154 650 205 676T267 703Q277 705 279 705Q295 705 295 693Q295 686 288 635T278 575Q278 572 287 582Q336 635 402 669T540 704Q603 704 633 673T664 599Q664 559 638 523T580 462Q553 440 504 413L491 407L504 402Q566 381 596 338T627 244Q627 172 575 110T444 13T284 -22Q208 -22 158 28Q144 42 146 50Q150 67 178 85T230 103Q236 103 246 95T267 75T302 56T357 47Q436 47 486 93Q526 136 526 198V210Q526 228 518 249T491 292T436 330T350 345Q335 345 321 344T304 342\",67:\"201 -25Q167 -25 136 -14T75 23T29 94T12 202Q12 290 50 394T161 574Q227 642 303 673T433 704Q435 705 457 705Q533 701 533 640Q533 606 507 548T464 474Q431 444 396 444Q381 444 381 453Q381 459 388 473T407 513T428 563Q433 580 433 594Q433 636 381 636Q314 636 260 594T175 489T128 363T112 247Q112 157 153 101T273 44Q347 44 398 121Q413 144 437 157T481 171Q496 171 496 160Q496 150 476 123Q426 56 350 16T201 -25\",68:\"37 475Q19 475 19 487Q19 536 103 604T327 682H356Q386 683 408 683H419Q475 683 506 681T582 668T667 633Q766 571 766 450Q766 365 723 287T611 152T455 57T279 6Q248 1 160 0Q148 0 131 0T108 -1Q72 -1 72 11Q72 24 90 40T133 64L144 68L152 88Q247 328 272 587Q275 613 272 613Q272 613 269 613Q225 610 195 602T149 579T129 556T119 532Q118 530 116 525T113 518Q102 502 80 490T37 475ZM665 407Q665 596 412 613Q403 614 383 614Q370 614 370 612Q370 598 363 542T323 357T242 103L228 69H265Q391 73 481 119Q536 148 575 188T633 268T658 338T665 392V407\",69:\"144 470Q144 556 240 630T451 705Q564 705 564 637Q564 611 540 573Q529 559 505 547T464 534Q448 534 448 545Q448 552 455 562Q463 577 463 591Q463 600 462 604T456 616T436 627T400 635Q396 635 390 635T380 636Q291 636 258 568Q245 544 245 516Q245 463 290 438T391 410Q415 410 415 398Q415 392 407 380T376 356T326 341Q288 340 260 327Q218 311 187 276T143 208T130 151Q130 113 156 88T211 55T268 47Q349 47 403 125Q415 144 439 157T483 171Q499 171 499 160Q499 148 475 120T413 59T315 3T197 -22Q124 -22 77 14T30 105Q30 126 39 154T66 216T122 288T209 354L223 362Q144 400 144 470\",70:\"199 579Q181 579 181 590Q181 598 188 611T212 639T260 666T335 682Q336 682 349 682T383 682T431 682T493 683T561 683Q776 682 784 681Q826 673 829 647Q829 620 797 600T744 580Q728 580 728 595Q729 607 713 610Q698 613 598 614H500L499 610Q499 598 467 486T428 367Q428 365 551 365H674Q683 360 684 355Q687 346 677 329Q666 312 642 299T598 285Q586 285 582 296H402L394 277Q386 258 373 229T346 167T315 102T286 51Q265 22 225 -5T133 -32Q108 -32 87 -25T54 -7T33 15T21 35T18 47Q18 60 44 80T98 103Q108 103 111 101T119 88Q130 66 150 54T179 39T195 37Q199 37 203 43Q217 67 245 125T318 300T391 532Q393 543 398 564T406 598T409 613T339 614H269Q229 579 199 579\",71:\"216 68Q155 68 115 100T59 177T44 273Q44 299 50 333T73 421T133 533T239 632Q346 704 466 704Q508 704 515 703Q555 696 577 681T599 635Q599 605 570 560T523 496Q490 466 455 466Q440 466 440 475T469 526T499 589Q499 605 489 617Q460 636 403 636Q343 636 295 611T220 548T174 464T150 382T144 318Q144 241 180 189T287 137Q325 137 359 160Q428 205 466 322Q472 342 501 359T551 376Q557 376 560 373T564 368L565 365Q560 341 551 302T512 173T451 31Q359 -119 204 -119Q163 -118 127 -109T74 -91T53 -77Q52 -75 52 -71Q52 -54 79 -35T132 -14H140L151 -19Q210 -49 281 -49H289Q312 -49 329 -31Q351 -7 372 36T405 109T416 142L408 136Q401 131 392 125T369 111T338 96T303 82T261 72T216 68\",72:\"18 487Q18 496 29 517T67 566T127 621T216 665T330 683Q359 683 376 669T397 643T400 622Q400 584 382 488T348 343Q348 342 467 342H587L594 366Q615 440 648 534T690 641Q701 656 723 669T764 683Q783 683 783 672L750 578Q716 485 677 346T625 101Q624 92 623 82T622 65T621 56Q621 20 658 20Q666 20 701 25Q709 52 736 69T785 87Q803 87 803 75T791 44T754 3T685 -33T588 -48Q568 -48 562 -46Q522 -31 522 13V23Q531 129 562 250L569 281L565 280Q561 278 556 277T549 274L438 273H328L321 249Q307 202 275 107T232 0Q219 -16 196 -28T155 -41Q149 -41 145 -39T140 -34T139 -29Q139 -24 148 -3T181 86T233 247Q240 270 240 272Q240 273 194 273H169Q139 273 139 285Q139 295 153 308T187 332Q206 341 236 342L260 343L264 359Q278 414 289 482T300 578Q300 613 260 613H254Q198 613 169 592Q148 578 127 544T104 508Q72 478 37 475Q18 475 18 487\",73:\"174 0H31Q-13 0 -21 2T-30 12Q-30 23 -17 36Q9 60 42 68L155 70Q187 102 214 179T257 333T302 491T366 610L369 614H305Q221 611 188 607T145 596T128 569Q119 543 94 529T47 512Q28 512 28 524Q28 527 32 539Q56 614 159 654Q218 678 312 682Q314 682 339 682T404 682T481 683H632Q642 678 642 671Q642 657 621 641T577 617Q570 615 507 614H444Q427 592 406 542Q382 478 355 366T310 209Q280 123 238 78L230 69H330Q442 70 442 74Q443 74 443 77T447 87T460 105Q490 134 527 137Q545 137 545 125Q545 120 542 112Q531 78 491 49T399 7Q379 2 360 2T174 0\",74:\"148 78Q148 16 189 -17T286 -50Q319 -50 348 -33T396 10T426 59T444 101L471 204Q498 306 521 372Q575 532 649 605L659 614H591Q517 613 494 607Q433 591 400 550T360 477Q353 454 325 437T275 419Q256 419 260 435Q280 523 376 597T583 681Q603 683 713 683H830Q839 674 839 671Q839 654 810 634T754 614Q735 614 721 601Q688 571 654 495T600 351T561 209T541 132Q507 29 412 -45T213 -119Q141 -119 94 -77T47 33Q47 55 50 69T58 90T71 103Q105 131 135 131Q152 131 152 120Q152 119 151 114T149 99T148 78\",75:\"194 618Q193 618 182 613T156 601T131 594Q113 594 113 605Q113 623 144 644Q154 650 205 676T267 703Q277 705 279 705Q295 705 295 691Q295 569 250 397Q225 306 197 217T151 81T128 25Q120 8 94 -7T47 -22Q32 -22 32 -10L64 76Q95 163 133 295T185 530Q198 611 194 618ZM331 429Q331 383 364 290T449 117T542 36Q574 36 607 51T652 103Q660 124 677 133T709 143Q727 143 727 128Q727 119 723 111Q704 56 639 17T497 -22H493Q463 -22 425 16Q401 40 382 71Q335 138 296 243T256 399Q256 434 288 473Q342 540 471 622T670 705Q691 704 703 696Q732 678 732 644Q732 613 714 600T677 586Q671 586 667 587T660 592T657 604V619Q657 647 629 647Q623 647 620 646Q576 635 495 583T365 482Q331 448 331 429\",76:\"62 -22T47 -22T32 -11Q32 -1 56 24T83 55Q113 96 138 172T180 320T234 473T323 609Q364 649 419 677T531 705Q559 705 578 696T604 671T615 645T618 623V611Q618 582 615 571T598 548Q581 531 558 520T518 509Q503 509 503 520Q503 523 505 536T507 560Q507 590 494 610T452 630Q423 630 410 617Q367 578 333 492T271 301T233 170Q211 123 204 112L198 103L224 102Q281 102 369 79T509 52H523Q535 64 544 87T579 128Q616 152 641 152Q656 152 656 142Q656 101 588 40T433 -22Q381 -22 289 1T156 28L141 29L131 20Q111 0 87 -11\",77:\"28 9Q28 37 43 63T73 90Q77 90 83 84T103 70T141 57H146Q162 57 178 79T222 167Q266 279 295 371T334 513T349 598T358 651T371 677Q397 705 432 705Q442 705 445 699T452 666Q453 661 453 659Q475 538 509 405T568 207L574 192Q581 178 587 164T594 150Q596 150 635 189T693 248Q765 324 863 438T1024 626T1089 701Q1093 705 1100 705Q1111 705 1111 682Q1111 675 1108 660T1099 611T1086 540Q1041 277 1041 144Q1041 98 1044 75T1050 48T1059 42Q1064 41 1075 46Q1102 61 1121 61Q1137 61 1137 50Q1137 28 1087 0T1000 -29Q983 -29 972 -23T955 -9T945 16T942 45T941 83V96Q941 158 952 256T974 422L985 489Q984 489 939 436T821 300T698 164Q665 128 620 85T568 37Q564 34 558 34Q550 34 546 37T535 54Q512 91 496 127T450 259T389 498L384 518Q349 367 294 223T198 15Q155 -50 117 -50Q87 -50 61 -35T30 -6Q28 2 28 9\",78:\"343 705Q358 705 358 698Q360 696 370 658T411 524T484 319Q536 174 590 82L595 73L615 152Q646 274 683 407Q729 571 752 637T799 727Q852 780 937 788Q939 788 947 788T958 789H962Q979 789 979 765Q979 722 951 692Q942 683 924 683Q888 681 859 672T818 654T803 639Q784 608 708 322T631 15Q631 14 630 15Q630 17 629 15Q628 14 628 12Q621 -4 601 -17T560 -31Q550 -31 546 -28T530 -7Q484 67 458 123T398 272Q352 392 314 514L306 535V534Q306 533 296 488T272 379T234 239T185 100T127 -7T61 -50Q34 -50 4 -34T-27 8Q-27 33 -12 61T18 90Q21 90 36 77T87 57H92Q109 57 123 78T162 173Q206 299 232 417T265 599T276 667Q284 681 304 693T343 705\",79:\"308 428Q289 428 289 438Q289 457 318 508T378 593Q417 638 475 671T599 705Q688 705 732 643T777 483Q777 380 733 285T620 123T464 18T293 -22Q188 -22 123 51T58 245Q58 327 87 403T159 533T249 626T333 685T388 705Q404 705 404 693Q404 674 363 649Q333 632 304 606T239 537T181 429T158 290Q158 179 214 114T364 48Q489 48 583 165T677 438Q677 473 670 505T648 568T601 617T528 636Q518 636 513 635Q486 629 460 600T419 544T392 490Q383 470 372 459Q341 430 308 428\",80:\"37 475Q19 475 19 487Q19 536 103 604T327 682Q329 682 344 682T380 682T421 683H463Q625 683 695 615Q718 591 726 564Q733 547 733 525Q733 412 607 312T321 205H312Q293 205 293 217Q293 224 302 236T333 260T385 274Q558 287 614 407Q633 445 633 477Q633 515 612 543T556 585T481 607T399 614H370L368 603Q352 463 312 312T242 82T202 -13Q190 -33 164 -45T121 -57Q108 -57 108 -45Q108 -40 120 -10T151 73T192 190T233 349T266 539Q267 546 269 565T272 598T274 613H270Q209 613 163 588Q131 572 113 518Q102 502 80 490T37 475\",81:\"114 286Q114 358 151 433T249 569T392 667T558 705Q653 705 713 641T774 460Q774 389 750 322T687 206T600 114T504 46T412 4L399 -2Q542 -62 636 -62Q660 -62 670 -54T686 -27T700 0Q734 34 770 34Q787 34 787 23Q787 -18 720 -74T563 -131Q485 -131 350 -83T145 -34Q127 -34 127 -22Q127 -12 144 5T190 31L200 34L237 35Q386 38 467 79Q550 120 612 210T675 416Q675 510 625 573T484 636Q410 636 346 587T248 469T214 333Q214 306 221 281T243 229T288 188T360 172Q403 172 441 188T490 205Q510 205 510 192Q505 162 432 132T287 102Q206 102 160 155T114 286\",82:\"37 475Q19 475 19 487Q19 503 35 530T83 589T180 647T327 682H374Q387 682 417 682T464 683Q519 683 559 679T642 663T708 625T731 557Q731 481 668 411T504 300Q506 296 512 286T528 257T553 202Q594 105 611 82Q635 47 665 47Q708 47 742 93Q758 113 786 128Q804 136 819 137Q837 137 837 125Q837 115 818 92T767 43T687 -2T589 -22Q549 -22 517 22T467 120T422 221T362 273Q346 273 346 287Q348 301 373 320T436 342Q437 342 446 343T462 345T481 348T504 353T527 362T553 375T577 393Q598 412 614 443T630 511Q630 545 613 566T541 600T393 614Q370 614 370 613L366 584Q349 446 311 307T243 96L213 25Q205 8 179 -7T132 -22Q125 -22 120 -18T117 -8Q117 -5 130 26T163 113T205 239T246 408T274 606V614Q273 614 259 613T231 609T198 602T163 588Q131 572 113 518Q102 502 80 490T37 475\",83:\"554 512Q536 512 536 522Q536 525 539 539T542 564Q542 588 528 604Q515 616 482 625T410 635Q374 635 349 624T312 594T295 561T290 532Q290 505 303 482T342 442T378 419T409 404Q435 391 451 383T494 357T535 323T562 282T574 231Q574 133 464 56T220 -22Q138 -22 78 21T18 123Q18 184 61 227T156 274Q178 274 178 263Q178 260 177 258Q172 247 164 239T151 227T136 218L127 213L124 202Q118 186 118 163Q120 124 165 86T292 48Q374 48 423 86T473 186V193Q473 267 347 327Q268 364 239 389Q191 431 191 486Q191 547 242 600T356 679T470 705Q472 705 478 705T489 704Q551 704 596 682T642 610Q642 566 621 545Q592 516 554 512\",84:\"49 475Q34 475 34 490Q34 552 106 611T261 681Q272 683 507 683H742Q790 717 816 717Q833 717 833 708Q833 682 795 653T714 615Q691 610 588 609Q490 609 490 607L483 580Q476 554 462 496T435 392Q410 289 395 231T363 116T335 34T309 -15T279 -47T242 -64Q231 -68 218 -68Q203 -68 203 -57Q203 -52 211 -38Q224 -7 234 20T251 66T268 123T283 179T304 261T328 360Q342 415 360 488Q380 567 384 582T397 605Q400 607 401 609H302H244Q200 609 188 607T167 596Q145 572 145 541Q145 520 109 498T49 475\",85:\"8 592Q8 616 70 649T193 683Q246 683 246 631Q246 587 205 492T124 297T83 143Q83 101 100 75T154 48Q202 48 287 135T450 342T560 553Q589 635 593 640Q603 656 626 668T669 683H670Q687 683 687 672T670 616T617 463T547 220Q525 137 521 68Q521 54 522 50T533 42L543 47Q573 61 588 61Q604 61 604 47Q599 16 506 -22Q486 -28 468 -28T436 -18T421 18Q421 92 468 258Q468 259 467 257T459 248Q426 206 391 167T303 81T194 6T83 -22Q66 -22 58 -20Q25 -11 4 19T-17 99Q-17 146 8 220T64 358T120 488T146 586Q146 604 141 608T123 613H120Q99 613 72 597T25 580Q8 580 8 592\",86:\"25 633Q25 647 47 665T100 683Q291 683 291 306Q291 264 288 213T282 132L279 102Q281 102 308 126T378 191T464 279T545 381T596 479Q600 490 600 502Q600 527 581 550T523 577Q505 577 505 601Q505 622 516 647T542 681Q546 683 558 683Q605 679 631 645T658 559Q658 423 487 215Q409 126 308 37T190 -52Q177 -52 177 -28Q177 -26 183 15T196 127T203 270Q203 356 192 421T165 523T126 583T83 613T41 620Q25 620 25 633\",87:\"25 633Q25 647 46 665T103 683Q168 683 207 632Q228 608 243 568Q269 485 269 374Q269 324 265 271T256 184L251 150L252 152Q254 153 257 157T264 167T274 180T286 197Q359 293 424 398T519 558T549 616Q549 618 547 624T545 638Q550 654 572 668T615 683Q626 683 632 672T657 595Q726 370 741 128L742 110Q752 122 767 142T823 217T894 321T950 424T976 511Q976 544 958 560T918 577Q906 577 906 602Q906 629 918 651T942 681Q948 683 954 683Q983 683 1008 658T1034 569T999 421T915 257T813 109T724 -3T681 -49Q666 -59 660 -45Q659 -41 657 35T639 233T591 477Q573 551 570 551Q569 551 554 523T507 439T433 315T323 155T182 -25Q160 -52 151 -53Q137 -53 137 -30Q137 -29 148 25T170 168T181 338Q181 424 168 483T131 571T87 609T40 620Q25 620 25 633\",88:\"324 614Q291 576 250 573Q231 573 231 584Q231 589 232 592Q235 601 244 614T271 643T324 671T400 683H403Q462 683 481 610Q485 594 490 545T498 454L501 413Q504 413 551 442T648 509T705 561Q707 565 707 578Q707 610 682 614Q667 614 667 626Q667 641 695 662T755 683Q765 683 775 680T796 662T807 623Q807 596 792 572T713 499T530 376L505 361V356Q508 346 511 278T524 148T557 75Q569 69 580 69Q585 69 593 77Q624 108 660 110Q667 110 670 110T676 106T678 94Q668 59 624 30T510 0Q487 0 471 9T445 32T430 71T422 117T417 173Q416 183 416 188Q413 214 411 244T407 286T405 299Q403 299 344 263T223 182T154 122Q152 118 152 105Q152 69 180 69Q183 69 187 66T191 60L192 58V56Q192 41 163 21T105 0Q94 0 84 3T63 21T52 60Q52 77 56 90T85 131T155 191Q197 223 259 263T362 327T402 352L391 489Q391 492 390 505T387 526T384 547T379 568T372 586T361 602T348 611Q346 612 341 613T333 614H324\",89:\"65 599Q65 618 107 650T204 683Q267 683 312 643T380 533T414 385T424 217Q424 186 423 160T422 123Q426 123 468 170T567 304T650 469Q661 503 661 519Q661 546 639 570Q615 591 583 591Q569 591 569 616Q569 640 582 661T613 683Q624 683 638 679T671 664T702 625T714 558Q714 472 639 329T426 45Q361 -21 282 -82T154 -143Q97 -143 64 -104T31 -20Q31 4 44 25T70 46Q78 46 81 39T87 16T97 -9Q127 -51 182 -51Q184 -51 187 -50H190Q233 -41 314 25Q330 36 330 40Q336 79 336 178Q336 508 223 594Q199 614 158 619L148 620L139 611Q111 586 83 586Q65 586 65 599\",90:\"694 220Q708 220 708 210Q708 195 695 167T658 105T593 42T502 3Q492 1 458 1Q400 1 293 11T150 22Q116 22 92 11T51 0Q37 0 37 10Q37 21 63 44T179 146T367 319L391 343H343L296 344Q285 350 285 358Q285 365 289 372T300 383T313 392T324 398L329 400H450L561 518Q597 558 607 571L621 587H596Q553 589 484 599T383 609Q342 609 326 596T301 555Q294 533 263 514T208 492Q189 492 189 503Q189 510 197 528T215 559Q249 607 318 645T466 683Q504 683 573 673T669 662L690 661Q734 682 748 683Q767 683 767 673Q767 666 746 640Q655 531 555 428L529 400Q529 399 543 399Q604 397 604 366Q604 350 587 337T551 322Q541 322 539 323Q529 328 529 334Q529 339 487 342L470 343L446 320Q272 153 200 96L235 95Q297 95 392 86T533 74H554Q586 116 597 159Q604 179 635 199T694 220\"},{})},5211:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texSize3=void 0;var H=L(9403),V=L(584);T.texSize3=(0,H.AddPaths)(V.texSize3,{40:\"701 -940Q701 -943 695 -949H664Q662 -947 636 -922T591 -879T537 -818T475 -737T412 -636T350 -511T295 -362T250 -186T221 17T209 251Q209 962 573 1361Q596 1386 616 1405T649 1437T664 1450H695Q701 1444 701 1441Q701 1436 681 1415T629 1356T557 1261T476 1118T400 927T340 675T308 359Q306 321 306 250Q306 -139 400 -430T690 -924Q701 -936 701 -940\",41:\"34 1438Q34 1446 37 1448T50 1450H56H71Q73 1448 99 1423T144 1380T198 1319T260 1238T323 1137T385 1013T440 864T485 688T514 485T526 251Q526 134 519 53Q472 -519 162 -860Q139 -885 119 -904T86 -936T71 -949H56Q43 -949 39 -947T34 -937Q88 -883 140 -813Q428 -430 428 251Q428 453 402 628T338 922T245 1146T145 1309T46 1425Q44 1427 42 1429T39 1433T36 1436L34 1438\",47:\"81 -949Q71 -949 63 -941T55 -921Q55 -917 56 -915Q59 -906 498 264T939 1438Q945 1450 960 1450Q972 1450 980 1441T988 1421Q982 1403 839 1020L398 -155Q107 -934 103 -938Q96 -949 81 -949\",91:\"247 -949V1450H516V1388H309V-887H516V-949H247\",92:\"988 -922Q988 -933 980 -941T962 -949Q947 -949 940 -938Q936 -934 645 -155L204 1020Q56 1416 56 1424Q56 1433 62 1441T84 1450Q97 1448 103 1439Q107 1435 398 656L839 -519Q988 -918 988 -922\",93:\"11 1388V1450H280V-949H11V-887H218V1388H11\",123:\"618 -943L612 -949H582L568 -943Q472 -903 411 -841T332 -703Q327 -682 327 -653T325 -350Q324 -28 323 -18Q317 24 301 61T264 124T221 171T179 205T147 225T132 234Q130 238 130 250Q130 255 130 258T131 264T132 267T134 269T139 272T144 275Q207 308 256 367Q310 436 323 519Q324 529 325 851Q326 1124 326 1154T332 1205Q369 1358 566 1443L582 1450H612L618 1444V1429Q618 1413 616 1411L608 1406Q599 1402 585 1393T552 1372T515 1343T479 1305T449 1257T429 1200Q425 1180 425 1152T423 851Q422 579 422 549T416 498Q407 459 388 424T346 364T297 318T250 284T214 264T197 254L188 251L205 242Q290 200 345 138T416 3Q421 -18 421 -48T423 -349Q423 -397 423 -472Q424 -677 428 -694Q429 -697 429 -699Q434 -722 443 -743T465 -782T491 -816T519 -845T548 -868T574 -886T595 -899T610 -908L616 -910Q618 -912 618 -928V-943\",125:\"131 1414T131 1429T133 1447T148 1450H153H167L182 1444Q276 1404 336 1343T415 1207Q421 1184 421 1154T423 851L424 531L426 517Q434 462 460 415T518 339T571 296T608 274Q615 270 616 267T618 251Q618 241 618 238T615 232T608 227Q542 194 491 132T426 -15L424 -29L423 -350Q422 -622 422 -652T415 -706Q397 -780 337 -841T182 -943L167 -949H153Q137 -949 134 -946T131 -928Q131 -914 132 -911T144 -904Q146 -903 148 -902Q299 -820 323 -680Q324 -663 325 -349T327 -19Q355 145 541 241L561 250L541 260Q356 355 327 520Q326 537 325 850T323 1181Q315 1227 293 1267T244 1332T193 1374T151 1401T132 1413Q131 1414 131 1429\",710:\"1439 564Q1434 564 1080 631T722 698Q719 698 362 631Q7 564 4 564L0 583Q-4 602 -4 603L720 772L1083 688Q1446 603 1447 603Q1447 602 1443 583L1439 564\",732:\"1 643Q1 646 76 671T271 722T476 749Q555 749 626 736T742 706T856 676T999 662Q1088 662 1192 684T1363 727T1432 749Q1432 745 1437 731T1442 716Q1442 714 1381 693T1212 645T1012 611Q1000 610 955 610Q851 610 701 653T444 697Q355 697 251 676T80 632T11 610Q11 614 6 628T1 643\",770:\"-5 564Q-9 564 -363 631T-722 698Q-725 698 -1082 631Q-1437 564 -1440 564L-1444 583Q-1448 602 -1448 603L-724 772L-361 688Q2 603 3 603Q3 602 -1 583L-5 564\",771:\"-1443 643Q-1443 646 -1368 671T-1173 722T-968 749Q-889 749 -818 736T-702 706T-588 676T-445 662Q-356 662 -252 684T-81 727T-12 749Q-12 745 -7 731T-2 716Q-2 714 -63 693T-232 645T-432 611Q-444 610 -489 610Q-593 610 -743 653T-1000 697Q-1089 697 -1193 676T-1364 632T-1433 610Q-1433 614 -1438 628T-1443 643\",8260:\"81 -949Q71 -949 63 -941T55 -921Q55 -917 56 -915Q59 -906 498 264T939 1438Q945 1450 960 1450Q972 1450 980 1441T988 1421Q982 1403 839 1020L398 -155Q107 -934 103 -938Q96 -949 81 -949\",8730:\"424 -948Q422 -947 313 -434T202 80L170 31Q165 24 157 10Q137 -21 137 -21Q131 -16 124 -8L111 5L264 248L473 -720Q473 -717 727 359T983 1440Q989 1450 1001 1450Q1007 1450 1013 1445T1020 1433Q1020 1425 742 244T460 -941Q458 -950 439 -950H436Q424 -950 424 -948\",8968:\"246 -949V1450H571V1388H308V-949H246\",8969:\"11 1388V1450H336V-949H274V1388H11\",8970:\"246 -949V1450H308V-887H571V-949H246\",8971:\"274 -887V1450H336V-949H11V-887H274\",9001:\"126 242V259L361 845Q595 1431 597 1435Q610 1450 624 1450Q634 1450 644 1443T654 1419V1411L422 831Q190 253 190 250T422 -331L654 -910V-919Q654 -936 644 -943T624 -950Q612 -950 597 -935Q595 -931 361 -345L126 242\",9002:\"94 1424Q94 1426 97 1432T107 1444T124 1450Q141 1450 152 1435Q154 1431 388 845L623 259V242L388 -345Q153 -933 152 -934Q142 -949 127 -949H125Q95 -949 95 -919V-910L327 -331Q559 247 559 250T327 831Q94 1411 94 1424\",10216:\"126 242V259L361 845Q595 1431 597 1435Q610 1450 624 1450Q634 1450 644 1443T654 1419V1411L422 831Q190 253 190 250T422 -331L654 -910V-919Q654 -936 644 -943T624 -950Q612 -950 597 -935Q595 -931 361 -345L126 242\",10217:\"94 1424Q94 1426 97 1432T107 1444T124 1450Q141 1450 152 1435Q154 1431 388 845L623 259V242L388 -345Q153 -933 152 -934Q142 -949 127 -949H125Q95 -949 95 -919V-910L327 -331Q559 247 559 250T327 831Q94 1411 94 1424\",12296:\"126 242V259L361 845Q595 1431 597 1435Q610 1450 624 1450Q634 1450 644 1443T654 1419V1411L422 831Q190 253 190 250T422 -331L654 -910V-919Q654 -936 644 -943T624 -950Q612 -950 597 -935Q595 -931 361 -345L126 242\",12297:\"94 1424Q94 1426 97 1432T107 1444T124 1450Q141 1450 152 1435Q154 1431 388 845L623 259V242L388 -345Q153 -933 152 -934Q142 -949 127 -949H125Q95 -949 95 -919V-910L327 -331Q559 247 559 250T327 831Q94 1411 94 1424\"},{})},8742:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texSize4=void 0;var H=L(9403),V=L(4324);T.texSize4=(0,H.AddPaths)(V.texSize4,{40:\"758 -1237T758 -1240T752 -1249H736Q718 -1249 717 -1248Q711 -1245 672 -1199Q237 -706 237 251T672 1700Q697 1730 716 1749Q718 1750 735 1750H752Q758 1744 758 1741Q758 1737 740 1713T689 1644T619 1537T540 1380T463 1176Q348 802 348 251Q348 -242 441 -599T744 -1218Q758 -1237 758 -1240\",41:\"33 1741Q33 1750 51 1750H60H65Q73 1750 81 1743T119 1700Q554 1207 554 251Q554 -707 119 -1199Q76 -1250 66 -1250Q65 -1250 62 -1250T56 -1249Q55 -1249 53 -1249T49 -1250Q33 -1250 33 -1239Q33 -1236 50 -1214T98 -1150T163 -1052T238 -910T311 -727Q443 -335 443 251Q443 402 436 532T405 831T339 1142T224 1438T50 1716Q33 1737 33 1741\",47:\"1166 1738Q1176 1750 1189 1750T1211 1742T1221 1721Q1221 1720 1221 1718T1220 1715Q1219 1708 666 238T111 -1237Q102 -1249 86 -1249Q74 -1249 65 -1240T56 -1220Q56 -1219 56 -1217T57 -1214Q58 -1207 611 263T1166 1738\",91:\"269 -1249V1750H577V1677H342V-1176H577V-1249H269\",92:\"56 1720Q56 1732 64 1741T85 1750Q104 1750 111 1738Q113 1734 666 264T1220 -1214Q1220 -1215 1220 -1217T1221 -1220Q1221 -1231 1212 -1240T1191 -1249Q1175 -1249 1166 -1237Q1164 -1233 611 237T57 1715Q57 1716 56 1718V1720\",93:\"5 1677V1750H313V-1249H5V-1176H240V1677H5\",123:\"661 -1243L655 -1249H622L604 -1240Q503 -1190 434 -1107T348 -909Q346 -897 346 -499L345 -98L343 -82Q335 3 287 87T157 223Q146 232 145 236Q144 240 144 250Q144 265 145 268T157 278Q242 333 288 417T343 583L345 600L346 1001Q346 1398 348 1410Q379 1622 600 1739L622 1750H655L661 1744V1727V1721Q661 1712 661 1710T657 1705T648 1700T630 1690T602 1668Q589 1659 574 1643T531 1593T484 1508T459 1398Q458 1389 458 1001Q458 614 457 605Q441 435 301 316Q254 277 202 251L250 222Q260 216 301 185Q443 66 457 -104Q458 -113 458 -501Q458 -888 459 -897Q463 -944 478 -988T509 -1060T548 -1114T580 -1149T602 -1167Q620 -1183 634 -1192T653 -1202T659 -1207T661 -1220V-1226V-1243\",125:\"144 1727Q144 1743 146 1746T162 1750H167H183L203 1740Q274 1705 325 1658T403 1562T440 1478T456 1410Q458 1398 458 1001Q459 661 459 624T465 558Q470 526 480 496T502 441T529 395T559 356T588 325T615 301T637 284T654 273L660 269V266Q660 263 660 259T661 250V239Q661 236 661 234T660 232T656 229T649 224Q577 179 528 105T465 -57Q460 -86 460 -123T458 -499V-661Q458 -857 457 -893T447 -955Q425 -1048 359 -1120T203 -1239L183 -1249H168Q150 -1249 147 -1246T144 -1226Q144 -1213 145 -1210T153 -1202Q169 -1193 186 -1181T232 -1140T282 -1081T322 -1000T345 -897Q346 -888 346 -501Q346 -113 347 -104Q359 58 503 184Q554 226 603 250Q504 299 430 393T347 605Q346 614 346 1002Q346 1389 345 1398Q338 1493 288 1573T153 1703Q146 1707 145 1710T144 1727\",710:\"5 561Q-4 561 -9 582T-14 618Q-14 623 -13 625Q-11 628 461 736T943 845Q945 845 1417 738T1896 628Q1902 628 1902 618Q1902 607 1897 584T1883 561Q1881 561 1412 654L945 750L476 654Q6 561 5 561\",732:\"1212 583Q1124 583 1048 603T923 647T799 691T635 711Q524 711 375 679T120 615L16 583Q14 584 12 587T9 592Q-2 650 2 659Q2 669 38 687Q54 696 146 723T309 767Q527 823 666 823Q759 823 837 803T964 759T1088 715T1252 695Q1363 695 1512 727T1764 791T1871 823Q1872 822 1874 819T1878 814Q1885 783 1885 753Q1885 748 1884 747Q1884 738 1849 719Q1836 712 1740 682T1484 617T1212 583\",770:\"-1884 561Q-1893 561 -1898 582T-1903 618Q-1903 623 -1902 625Q-1900 628 -1428 736T-946 845Q-944 845 -472 738T7 628Q13 628 13 618Q13 607 8 584T-6 561Q-8 561 -477 654L-944 750L-1413 654Q-1883 561 -1884 561\",771:\"-677 583Q-765 583 -841 603T-966 647T-1090 691T-1254 711Q-1365 711 -1514 679T-1768 615L-1873 583Q-1875 584 -1877 587T-1880 592Q-1891 650 -1887 659Q-1887 669 -1851 687Q-1835 696 -1743 723T-1580 767Q-1362 823 -1223 823Q-1130 823 -1052 803T-925 759T-801 715T-637 695Q-526 695 -377 727T-125 791T-18 823Q-17 822 -15 819T-11 814Q-4 782 -4 753Q-4 748 -5 747Q-5 738 -40 719Q-53 712 -149 682T-405 617T-677 583\",8260:\"1166 1738Q1176 1750 1189 1750T1211 1742T1221 1721Q1221 1720 1221 1718T1220 1715Q1219 1708 666 238T111 -1237Q102 -1249 86 -1249Q74 -1249 65 -1240T56 -1220Q56 -1219 56 -1217T57 -1214Q58 -1207 611 263T1166 1738\",8730:\"983 1739Q988 1750 1001 1750Q1008 1750 1013 1745T1020 1733Q1020 1726 742 244T460 -1241Q458 -1250 439 -1250H436Q424 -1250 424 -1248L410 -1166Q395 -1083 367 -920T312 -601L201 44L137 -83L111 -57L187 96L264 247Q265 246 369 -357Q470 -958 473 -963L727 384Q979 1729 983 1739\",8968:\"269 -1249V1750H633V1677H342V-1249H269\",8969:\"5 1677V1750H369V-1249H296V1677H5\",8970:\"269 -1249V1750H342V-1176H633V-1249H269\",8971:\"296 -1176V1750H369V-1249H5V-1176H296\",9001:\"140 242V260L386 994Q633 1729 635 1732Q643 1745 657 1749Q658 1749 662 1749T668 1750Q682 1749 692 1740T702 1714V1705L214 251L703 -1204L702 -1213Q702 -1230 692 -1239T667 -1248H664Q647 -1248 635 -1231Q633 -1228 386 -493L140 242\",9002:\"103 1714Q103 1732 114 1741T137 1750Q157 1750 170 1732Q172 1729 419 994L665 260V242L419 -493Q172 -1228 170 -1231Q158 -1248 141 -1248H138Q123 -1248 113 -1239T103 -1213V-1204L591 251L103 1705V1714\",9115:\"837 1154Q843 1148 843 1145Q843 1141 818 1106T753 1002T667 841T574 604T494 299Q417 -84 417 -609Q417 -641 416 -647T411 -654Q409 -655 366 -655Q299 -655 297 -654Q292 -652 292 -643T291 -583Q293 -400 304 -242T347 110T432 470T574 813T785 1136Q787 1139 790 1142T794 1147T796 1150T799 1152T802 1153T807 1154T813 1154H819H837\",9116:\"413 -9Q412 -9 407 -9T388 -10T354 -10Q300 -10 297 -9Q294 -8 293 -5Q291 5 291 127V300Q291 602 292 605L296 609Q298 610 366 610Q382 610 392 610T407 610T412 609Q416 609 416 592T417 473V127Q417 -9 413 -9\",9117:\"843 -635Q843 -638 837 -644H820Q801 -644 800 -643Q792 -635 785 -626Q684 -503 605 -363T473 -75T385 216T330 518T302 809T291 1093Q291 1144 291 1153T296 1164Q298 1165 366 1165Q409 1165 411 1164Q415 1163 416 1157T417 1119Q417 529 517 109T833 -617Q843 -631 843 -635\",9118:\"31 1143Q31 1154 49 1154H59Q72 1154 75 1152T89 1136Q190 1013 269 873T401 585T489 294T544 -8T572 -299T583 -583Q583 -634 583 -643T577 -654Q575 -655 508 -655Q465 -655 463 -654Q459 -653 458 -647T457 -609Q457 -58 371 340T100 1037Q87 1059 61 1098T31 1143\",9119:\"579 -9Q578 -9 573 -9T554 -10T520 -10Q466 -10 463 -9Q460 -8 459 -5Q457 5 457 127V300Q457 602 458 605L462 609Q464 610 532 610Q548 610 558 610T573 610T578 609Q582 609 582 592T583 473V127Q583 -9 579 -9\",9120:\"56 -644H50Q31 -644 31 -635Q31 -632 37 -622Q69 -579 100 -527Q286 -228 371 170T457 1119Q457 1161 462 1164Q464 1165 520 1165Q575 1165 577 1164Q582 1162 582 1153T583 1093Q581 910 570 752T527 400T442 40T300 -303T89 -626Q78 -640 75 -642T61 -644H56\",9121:\"319 -645V1154H666V1070H403V-645H319\",9122:\"319 0V602H403V0H319\",9123:\"319 -644V1155H403V-560H666V-644H319\",9124:\"0 1070V1154H347V-645H263V1070H0\",9125:\"263 0V602H347V0H263\",9126:\"263 -560V1155H347V-644H0V-560H263\",9127:\"712 899L718 893V876V865Q718 854 704 846Q627 793 577 710T510 525Q510 524 509 521Q505 493 504 349Q504 345 504 334Q504 277 504 240Q504 -2 503 -4Q502 -8 494 -9T444 -10Q392 -10 390 -9Q387 -8 386 -5Q384 5 384 230Q384 262 384 312T383 382Q383 481 392 535T434 656Q510 806 664 892L677 899H712\",9128:\"389 1159Q391 1160 455 1160Q496 1160 498 1159Q501 1158 502 1155Q504 1145 504 924Q504 691 503 682Q494 549 425 439T243 259L229 250L243 241Q349 175 421 66T503 -182Q504 -191 504 -424Q504 -600 504 -629T499 -659H498Q496 -660 444 -660T390 -659Q387 -658 386 -655Q384 -645 384 -425V-282Q384 -176 377 -116T342 10Q325 54 301 92T255 155T214 196T183 222T171 232Q170 233 170 250T171 268Q171 269 191 284T240 331T300 407T354 524T383 679Q384 691 384 925Q384 1152 385 1155L389 1159\",9129:\"718 -893L712 -899H677L666 -893Q542 -825 468 -714T385 -476Q384 -466 384 -282Q384 3 385 5L389 9Q392 10 444 10Q486 10 494 9T503 4Q504 2 504 -239V-310V-366Q504 -470 508 -513T530 -609Q546 -657 569 -698T617 -767T661 -812T699 -843T717 -856T718 -876V-893\",9130:\"384 150V266Q384 304 389 309Q391 310 455 310Q496 310 498 309Q502 308 503 298Q504 283 504 150Q504 32 504 12T499 -9H498Q496 -10 444 -10T390 -9Q386 -8 385 2Q384 17 384 150\",9131:\"170 875Q170 892 172 895T189 899H194H211L222 893Q345 826 420 715T503 476Q504 467 504 230Q504 51 504 21T499 -9H498Q496 -10 444 -10Q402 -10 394 -9T385 -4Q384 -2 384 240V311V366Q384 469 380 513T358 609Q342 657 319 698T271 767T227 812T189 843T171 856T170 875\",9132:\"389 1159Q391 1160 455 1160Q496 1160 498 1159Q501 1158 502 1155Q504 1145 504 925V782Q504 676 511 616T546 490Q563 446 587 408T633 345T674 304T705 278T717 268Q718 267 718 250T717 232Q717 231 697 216T648 169T588 93T534 -24T505 -179Q504 -191 504 -425Q504 -600 504 -629T499 -659H498Q496 -660 444 -660T390 -659Q387 -658 386 -655Q384 -645 384 -424Q384 -191 385 -182Q394 -49 463 61T645 241L659 250L645 259Q539 325 467 434T385 682Q384 692 384 873Q384 1153 385 1155L389 1159\",9133:\"384 -239V-57Q384 4 389 9Q391 10 455 10Q496 10 498 9Q501 8 502 5Q504 -5 504 -230Q504 -261 504 -311T505 -381Q505 -486 492 -551T435 -691Q357 -820 222 -893L211 -899H195Q176 -899 173 -896T170 -874Q170 -858 171 -855T184 -846Q262 -793 312 -709T378 -525Q378 -524 379 -522Q383 -493 384 -351Q384 -345 384 -334Q384 -276 384 -239\",9143:\"742 -871Q740 -873 737 -876T733 -880T730 -882T724 -884T714 -885H702L222 569L180 484Q138 399 137 399Q131 404 124 412L111 425L265 736L702 -586V168L703 922Q713 935 722 935Q734 935 742 920V-871\",10216:\"140 242V260L386 994Q633 1729 635 1732Q643 1745 657 1749Q658 1749 662 1749T668 1750Q682 1749 692 1740T702 1714V1705L214 251L703 -1204L702 -1213Q702 -1230 692 -1239T667 -1248H664Q647 -1248 635 -1231Q633 -1228 386 -493L140 242\",10217:\"103 1714Q103 1732 114 1741T137 1750Q157 1750 170 1732Q172 1729 419 994L665 260V242L419 -493Q172 -1228 170 -1231Q158 -1248 141 -1248H138Q123 -1248 113 -1239T103 -1213V-1204L591 251L103 1705V1714\",12296:\"140 242V260L386 994Q633 1729 635 1732Q643 1745 657 1749Q658 1749 662 1749T668 1750Q682 1749 692 1740T702 1714V1705L214 251L703 -1204L702 -1213Q702 -1230 692 -1239T667 -1248H664Q647 -1248 635 -1231Q633 -1228 386 -493L140 242\",12297:\"103 1714Q103 1732 114 1741T137 1750Q157 1750 170 1732Q172 1729 419 994L665 260V242L419 -493Q172 -1228 170 -1231Q158 -1248 141 -1248H138Q123 -1248 113 -1239T103 -1213V-1204L591 251L103 1705V1714\",57344:\"722 -14H720Q708 -14 702 0V306L703 612Q713 625 722 625Q734 625 742 610V0Q734 -14 724 -14H722\",57345:\"702 589Q706 601 718 605H1061Q1076 597 1076 585Q1076 572 1061 565H742V0Q734 -14 724 -14H722H720Q708 -14 702 0V589\",57680:\"-18 -213L-24 -207V-172L-16 -158Q75 2 260 84Q334 113 415 119Q418 119 427 119T440 120Q454 120 457 117T460 98V60V25Q460 7 457 4T441 0Q308 0 193 -55T25 -205Q21 -211 18 -212T-1 -213H-18\",57681:\"-10 60Q-10 104 -10 111T-5 118Q-1 120 10 120Q96 120 190 84Q375 2 466 -158L474 -172V-207L468 -213H451H447Q437 -213 434 -213T428 -209T423 -202T414 -187T396 -163Q331 -82 224 -41T9 0Q-4 0 -7 3T-10 25V60\",57682:\"-24 327L-18 333H-1Q11 333 15 333T22 329T27 322T35 308T54 284Q115 203 225 162T441 120Q454 120 457 117T460 95V60V28Q460 8 457 4T442 0Q355 0 260 36Q75 118 -16 278L-24 292V327\",57683:\"-10 60V95Q-10 113 -7 116T9 120Q151 120 250 171T396 284Q404 293 412 305T424 324T431 331Q433 333 451 333H468L474 327V292L466 278Q375 118 190 36Q95 0 8 0Q-5 0 -7 3T-10 24V60\",57684:\"-10 0V120H410V0H-10\"},{57685:\"\\ue153\\ue152\",57686:\"\\ue151\\ue150\"})},2989:function(Q,T,L){Object.defineProperty(T,\"__esModule\",{value:!0}),T.texVariant=void 0;var H=L(9403),V=L(8135);T.texVariant=(0,H.AddPaths)(V.texVariant,{710:\"1 561Q-3 563 -6 577T-12 604L-14 618Q-14 625 -7 628T23 635Q31 636 36 637Q63 641 621 745Q1148 845 1165 845Q1167 845 1752 739L2338 630Q2346 630 2346 618Q2340 565 2332 561Q2329 561 1749 654Q1617 675 1466 699T1241 736T1167 748Q1165 748 1093 737T867 700T583 654Q3 561 1 561\",732:\"804 788Q717 788 606 772T397 732T213 685T75 645T18 628Q11 628 11 632Q8 637 4 668T2 704Q2 713 36 732Q55 739 242 795Q622 898 826 898Q893 898 947 895Q1009 887 1056 872T1187 819Q1286 776 1356 758T1527 739Q1614 739 1725 755T1934 795T2118 842T2256 882T2313 899Q2320 899 2320 895Q2323 890 2327 860T2329 824Q2329 818 2296 795Q2273 787 2089 732Q1810 657 1598 632Q1562 629 1492 629Q1389 629 1320 644T1144 708Q1048 751 977 769T804 788\",770:\"-2332 561Q-2336 563 -2340 577T-2346 604L-2347 618Q-2347 625 -2340 628T-2310 635Q-2302 636 -2297 637Q-2270 641 -1712 745Q-1185 845 -1168 845Q-1166 845 -581 739L5 630Q13 630 13 618Q7 565 -1 561Q-4 561 -584 654Q-716 675 -867 699T-1092 736T-1166 748Q-1168 748 -1240 737T-1466 700T-1750 654Q-2330 561 -2332 561\",771:\"-1529 788Q-1616 788 -1727 772T-1936 732T-2120 685T-2258 645T-2315 628Q-2322 628 -2322 632Q-2325 637 -2329 668T-2331 704Q-2331 713 -2297 732Q-2278 739 -2091 795Q-1711 898 -1507 898Q-1440 898 -1386 895Q-1324 887 -1277 872T-1146 819Q-1047 776 -977 758T-806 739Q-719 739 -608 755T-399 795T-215 842T-77 882T-20 899Q-13 899 -13 895Q-10 890 -6 860T-4 824Q-4 818 -37 795Q-60 787 -244 732Q-523 657 -735 632Q-771 629 -841 629Q-944 629 -1013 644T-1189 708Q-1285 751 -1356 769T-1529 788\",1008:\"228 325Q170 322 156 316T127 309Q108 309 104 314Q99 319 99 322T108 341Q125 376 171 400T268 425H271Q302 425 319 396Q328 377 328 358Q328 332 324 314Q311 270 286 221Q274 194 274 192H275Q339 234 484 325T639 421Q669 434 691 434T723 425T734 406Q734 394 719 381Q715 376 644 330L575 287L566 267Q543 233 526 176Q520 160 515 143T508 115T506 105Q506 103 533 103Q585 103 607 110T641 118Q670 118 670 107Q670 100 661 85Q643 50 598 27T504 3Q465 3 450 36Q441 51 441 73Q441 84 444 96Q452 146 484 205L497 236L324 125Q143 12 135 10Q103 -6 77 -6Q61 -6 49 2T37 21Q37 36 49 46T124 96L195 141L204 156Q219 179 243 248T264 323Q264 325 228 325\",8463:\"182 599Q182 611 174 615T133 619Q118 619 114 621T109 630Q109 636 114 656T122 681Q125 685 202 688Q272 695 286 695Q304 695 304 684Q304 682 295 644T282 597Q282 592 360 592H399Q430 592 445 587T460 563Q460 552 451 541L442 535H266L251 468Q247 453 243 436T236 409T233 399Q233 395 244 404Q295 441 357 441Q405 441 445 417T485 333Q485 284 449 178T412 58T426 44Q447 44 466 68Q485 87 500 130L509 152H531H543Q562 152 562 144Q562 128 546 93T494 23T415 -13Q385 -13 359 3T322 44Q318 52 318 77Q318 99 352 196T386 337Q386 386 346 386Q318 386 286 370Q267 361 245 338T211 292Q207 287 193 235T162 113T138 21Q128 7 122 4Q105 -12 83 -12Q66 -12 54 -2T42 26L166 530Q166 534 161 534T129 535Q127 535 122 535T112 534Q74 534 74 562Q74 570 77 576T84 585T96 589T109 591T124 592T138 592L182 595V599\",8592:\"292 419Q292 400 261 347T211 275H306Q319 275 338 275T364 276Q399 276 410 271T422 250T411 230T366 225H306H211Q214 222 232 197T271 136T292 82Q292 71 285 68T262 64H250H241Q221 64 216 67T205 83Q186 127 153 167T78 230Q64 238 64 250Q64 258 69 263T82 272T106 288T139 318Q162 342 177 365T198 402T209 425T223 436Q224 437 252 437H258Q292 437 292 419\",8594:\"188 417Q188 437 221 437H233Q256 437 263 434T275 417Q294 373 327 333T402 270Q417 261 417 250Q417 241 410 236T382 217T341 182Q315 155 299 128T275 85T263 66Q259 64 231 64H219Q197 64 191 72T193 100Q202 124 215 147T239 185T257 210T267 223L269 225H174H116Q80 225 69 229T58 250T70 271T114 276Q121 276 140 276T174 275H269L267 277Q266 280 257 291T233 325T205 374Q188 408 188 417\",8652:\"755 512Q755 514 778 514H801L804 503Q805 501 812 486T824 462T839 437T862 408T892 381T932 354L944 347V327H507Q70 327 67 329Q55 335 55 347T67 365Q70 367 454 367H837L828 376Q803 403 785 437T761 489T755 512ZM55 153V173H492Q928 173 932 171Q944 166 944 153T932 135Q928 133 545 133H162L171 124Q198 95 216 61T239 8L244 -12Q244 -14 221 -14H198L195 -4Q160 95 67 146L55 153\",8708:\"55 676Q55 688 66 694H199L333 696L351 772Q364 827 370 843T386 860Q393 860 399 854T406 841Q406 836 391 765L375 696Q375 694 431 694H484Q491 688 497 681V12L493 5L486 1L353 -1H219L202 -79Q184 -153 180 -159Q175 -166 165 -166Q146 -166 146 -148Q146 -141 161 -76T177 -4Q177 -1 122 -1H68Q55 12 55 20T66 39H126L186 41L219 181Q226 215 234 251T246 305T251 325Q251 328 166 328H79Q68 345 68 347Q68 352 75 359L82 368H262L291 505Q298 539 306 575T319 630T324 650V654H68Q55 669 55 676ZM457 368V654H411Q366 654 366 652Q365 651 361 634T349 580T333 514Q303 373 302 372V368H457ZM457 39V328H375Q293 328 293 325Q292 322 260 183T228 41T344 39H457\",8709:\"624 470Q624 468 639 446T668 382T683 291Q683 181 612 99T437 -1Q425 -2 387 -2T337 -1Q245 18 193 70L179 81L131 39Q96 8 89 3T75 -3Q55 -3 55 17Q55 24 61 30T111 73Q154 113 151 113Q151 114 140 130T115 177T95 241Q94 253 94 291T95 341Q112 431 173 495Q265 587 385 587Q410 587 437 581Q522 571 582 513L595 501L642 541Q689 586 695 586Q696 586 697 586T699 587Q706 587 713 583T720 568Q720 560 711 551T664 510Q651 499 642 490T628 475T624 470ZM564 477Q517 522 448 539Q428 546 375 546Q290 546 229 492T144 370Q133 332 133 279Q136 228 151 195Q157 179 168 160T184 141Q186 141 375 307T564 477ZM642 290Q642 318 637 343T625 386T611 416T598 436T593 444Q590 444 402 277T213 108Q213 104 231 89T293 55T392 37Q495 37 568 111T642 290\",8722:\"84 237T84 250T98 270H402Q417 262 417 250T402 230H98Q84 237 84 250\",8726:\"91 404T91 410T97 423T111 430Q117 430 395 224Q676 13 678 10Q685 3 685 -3T678 -16T664 -23Q658 -23 380 184T98 397Q91 404 91 410\",8733:\"56 250Q56 346 122 409T276 472Q349 472 407 430T486 326L489 316Q490 317 493 326T501 345T514 367T531 393Q557 425 602 448T698 472Q722 472 722 452Q722 437 702 435T642 421T571 377Q520 323 520 250Q520 179 568 126T693 68Q722 66 722 48Q722 28 698 28Q636 28 576 67T493 174L490 184Q489 181 483 167T475 150T468 136T458 120T447 107T432 90T412 73Q350 28 277 28Q188 28 122 91T56 250ZM199 68T278 68T408 122T459 250Q459 322 414 370T308 430Q302 431 273 431Q204 431 150 380T96 250Q96 176 147 122\",8739:\"91 417Q104 430 111 430T131 417V-10Q116 -23 111 -23T91 -10V417\",8740:\"91 417Q104 430 111 430T131 417V301L171 341Q201 373 207 378T220 384Q227 384 233 377T240 366Q240 357 187 299L131 244V-10Q116 -23 111 -23T91 -10V201L49 157Q20 127 14 121T0 115Q-8 115 -14 121T-20 132Q-20 139 17 178Q29 191 36 199L91 257V417\",8741:\"55 417Q69 431 76 431T95 419V-12Q84 -23 76 -23Q72 -23 69 -22T62 -16T55 -10V417ZM293 419Q300 431 310 431L324 424L331 417V-10Q316 -23 309 -23L297 -19L293 -12V419\",8742:\"56 417Q68 431 76 431L89 426L96 419V317L98 215L193 273L291 330V375L293 419Q301 431 311 431Q331 431 331 388L333 355L356 370Q381 384 388 384Q394 384 400 377T407 363Q407 354 367 328L331 308V-10Q316 -23 310 -23Q300 -23 293 -12L291 135V284L98 168L96 77V-12Q84 -24 76 -24L62 -19L58 -12L56 66V144L31 128Q5 114 -2 114Q-8 114 -14 121T-20 136Q-20 142 -14 147T20 170L56 190V417\",8764:\"73 132Q55 132 55 172Q55 220 79 272Q95 301 111 319Q148 353 195 363Q199 364 212 364Q262 364 294 350T408 272Q472 222 522 212Q537 208 555 208Q606 208 646 243Q671 268 680 296T691 342T702 365Q713 365 716 354T719 314Q714 236 664 179L660 176Q657 173 654 170T644 163T631 154T615 146T596 139T574 134T549 132Q510 132 465 156T386 211T307 265T223 290Q162 290 124 249T86 165Q86 155 82 144T73 132\",8776:\"55 326Q55 394 101 437T226 481Q268 479 313 460T392 419T469 379T555 361Q622 361 662 401Q686 423 688 450Q693 479 702 479H705Q719 479 719 442Q719 367 670 327T554 286Q512 286 466 304T386 345T307 385T220 404Q184 404 157 394T120 374L111 363Q86 339 86 317Q86 288 71 288Q55 288 55 326ZM55 90Q55 164 105 205T226 246Q269 243 314 224T392 183T470 144T558 126Q622 126 662 166Q686 187 688 214Q693 244 704 244Q716 244 719 210Q719 165 702 132T658 82T605 58T552 50T498 58T447 77T384 110Q322 146 302 152Q263 168 220 168Q179 168 144 152Q128 147 107 125T86 81Q86 52 71 52Q55 52 55 90\",8808:\"86 472Q93 477 381 614T673 752Q680 752 686 746T693 732T689 721Q686 715 418 590L151 461L418 332Q684 207 689 201Q693 195 693 190Q693 183 687 177T675 170Q668 170 380 307T86 450Q82 454 82 461Q82 467 86 472ZM369 101V126Q369 156 382 156H384Q385 157 386 157Q409 157 409 115V98V54H680Q693 39 693 34T680 14H409V-142H680Q693 -155 693 -162Q693 -167 680 -182H409V-273Q396 -284 388 -284Q382 -284 369 -275V-182H95Q82 -167 82 -162Q82 -155 95 -142H369V14H95Q93 17 89 21T84 27T82 34T83 40T89 47T95 54H369V101\",8809:\"89 745Q95 752 100 752Q106 752 394 615T689 472Q693 468 693 461T689 450Q684 445 396 308T100 170Q95 170 89 176T82 190Q82 195 86 201Q91 208 358 332L624 461L358 590Q90 715 86 721Q82 725 82 731Q82 739 89 745ZM369 101V126Q369 156 382 156H384Q385 157 386 157Q409 157 409 115V98V54H680Q693 39 693 34T680 14H409V-142H680Q693 -155 693 -162Q693 -167 680 -182H409V-273Q396 -284 388 -284Q382 -284 369 -275V-182H95Q82 -167 82 -162Q82 -155 95 -142H369V14H95Q93 17 89 21T84 27T82 34T83 40T89 47T95 54H369V101\",8816:\"82 34Q82 44 93 55H198L300 57L342 179Q351 207 362 238T378 286T384 303T238 377Q109 435 86 450Q82 454 82 460T86 472Q90 476 302 579L511 679Q512 679 553 795Q569 842 577 866T592 903T600 917T608 919Q615 919 622 912T629 901Q629 899 595 799Q589 777 581 753T569 717T564 703L618 728Q666 752 673 752T686 746T693 732Q693 723 683 717T615 683L546 650L491 488Q464 410 450 368T438 326Q493 297 562 266Q660 219 677 209T694 190Q694 183 690 177T678 171Q664 171 546 228L424 286Q422 286 382 172L342 57L513 55H682Q694 43 694 34Q694 28 689 21L682 17L506 15H329L322 -8Q320 -13 310 -41T295 -85L275 -141H680Q682 -143 684 -146T688 -151T691 -156T693 -162Q693 -172 682 -179L473 -181H262L220 -303Q192 -388 185 -404T166 -421Q160 -421 153 -415T146 -403Q146 -400 179 -302T220 -185Q220 -181 158 -181L93 -179L86 -174Q82 -169 82 -161Q82 -152 93 -141H164L233 -139L260 -63L286 15H189L93 17L86 21Q82 26 82 34ZM495 623Q495 626 493 626T321 544T151 461L398 343Q399 343 405 360T423 415T446 483Q457 513 469 551T488 606T495 623\",8817:\"97 172Q82 172 82 190Q82 197 86 201Q94 209 173 246T327 319T402 357Q405 360 434 448T462 539L278 628Q96 713 86 721Q82 725 82 732T88 745T102 752Q103 752 125 742T198 709T293 666Q342 642 385 622T453 590T478 579Q479 579 506 659T562 824T598 915Q602 919 609 919T622 913T629 901Q629 898 571 728Q546 656 531 608T518 559Q555 539 602 519Q664 488 679 479T694 461Q694 457 689 450Q680 443 616 413T494 356T435 326L389 190L342 57L513 55H682Q694 43 694 34Q694 28 689 21L682 17L506 15H329L322 -8Q320 -13 310 -41T295 -85L275 -141H680Q682 -143 684 -146T688 -151T691 -156T693 -162Q693 -172 682 -179L473 -181H262L220 -303Q192 -388 185 -404T166 -421Q160 -421 153 -415T146 -403Q146 -400 179 -302T220 -185Q220 -181 158 -181L93 -179L86 -174Q82 -169 82 -161Q82 -152 93 -141H164L233 -139L260 -63L286 15H189L93 17L86 21Q82 26 82 34Q82 44 93 55H198L300 57L342 179Q350 204 361 238T378 286T382 301L246 237Q111 172 97 172ZM624 461Q621 464 560 492Q512 518 503 518Q500 518 500 517Q499 513 488 479T465 413T453 379L624 461\",8840:\"82 -6Q82 1 95 14H262L295 94Q331 171 331 174Q324 175 312 178T267 194T206 227T146 283T98 368Q84 406 84 461T98 554Q126 632 194 685T349 750Q360 752 480 752H591L604 783Q620 819 624 821Q631 828 640 828Q653 825 658 810Q658 808 646 781L635 754Q635 752 658 752Q680 752 686 746Q693 739 693 732Q693 728 692 726T686 719T680 712H615L506 466Q479 407 451 344T408 248T393 214Q393 210 535 210H680Q693 194 693 190T680 170H373L340 92L304 14H680Q693 1 693 -6Q693 -11 680 -26H286L253 -103L218 -179L451 -181H682Q694 -193 694 -201Q694 -212 682 -219L440 -221H200L178 -270Q160 -309 154 -319T139 -330Q122 -330 118 -312L155 -223Q155 -221 126 -221H95Q82 -206 82 -201T95 -181H175L206 -108Q237 -35 242 -30Q242 -26 169 -26H95Q82 -11 82 -6ZM571 710Q571 712 469 712Q443 712 416 712T371 711T351 710Q279 700 221 656T138 548Q124 508 124 461T138 374Q186 245 351 212L460 459Q571 709 571 710\",8841:\"82 732Q82 739 95 752H251H348Q420 752 460 744T551 708Q566 697 566 701Q618 815 624 821Q631 828 640 828Q653 825 658 810L600 677Q600 671 615 656T653 605T689 517Q692 496 692 461T689 406Q668 325 615 266Q572 221 513 196T391 170H373L340 92L304 14H680Q693 1 693 -6Q693 -11 680 -26H286L253 -103L218 -179L451 -181H682Q694 -193 694 -201Q694 -212 682 -219L440 -221H200L178 -270Q160 -309 154 -319T139 -330Q122 -330 118 -312L155 -223Q155 -221 126 -221H95Q82 -206 82 -201T95 -181H175L206 -108Q237 -35 242 -30Q242 -26 169 -26H95Q82 -11 82 -6Q82 1 95 14H262L295 92L331 170H95Q93 172 91 175T87 180T84 185T82 191Q82 199 93 210H220L349 212L549 659Q507 692 462 702T338 712H249H95Q82 727 82 732ZM652 473Q652 513 636 552T603 611T582 632Q581 632 487 422T393 210Q424 210 460 220T535 253T605 316T649 410Q652 427 652 461V473\",8842:\"693 -115T693 -122T680 -144H315L269 -199Q221 -255 213 -255H212Q203 -255 197 -248T193 -231Q195 -225 229 -184L262 -144H186L113 -142L106 -137Q102 -130 102 -125Q102 -119 115 -104H298L426 52H386Q342 54 309 63Q236 79 180 129T98 249Q84 289 84 343Q84 398 98 436Q126 514 193 567T346 632Q347 632 373 632T440 633T520 634H680Q682 631 686 627T691 621T693 614T680 594H526Q364 594 353 592Q268 581 207 528T126 394Q123 378 123 343T126 292Q141 231 181 185T280 114Q329 92 415 92H462L506 147Q554 203 562 203H563Q572 203 578 196T582 178Q579 173 546 132L513 94L598 92H682Q693 81 693 73T680 52H480L349 -102L515 -104H682Q693 -115 693 -122\",8843:\"82 610T82 614T83 620T89 627T95 634H251Q378 634 409 633T469 623Q540 604 596 554T678 436Q691 397 691 343T678 249Q653 181 597 131T469 63Q427 52 362 52H315L213 -102L438 -104H662Q673 -115 673 -123Q673 -129 660 -144H186L151 -197Q114 -250 109 -253Q106 -254 104 -254Q100 -254 98 -253Q91 -253 87 -248T82 -235Q82 -230 109 -186L138 -144H115Q82 -144 82 -125Q82 -119 95 -104H166L266 49Q266 52 182 52H95Q82 65 82 72Q82 76 83 78T89 85T95 92H295L329 143Q365 195 369 198Q372 203 380 203Q385 203 391 197T398 185Q398 184 398 184L399 182Q399 175 369 129L344 94Q344 92 376 92Q402 92 422 94Q496 104 554 147T638 256Q651 295 651 343Q651 390 638 429Q613 494 555 537T422 592Q411 594 249 594H95Q82 610 82 614\",8872:\"55 678Q55 679 56 681T58 684T61 688T65 691T70 693T77 694Q88 692 95 679V464H540Q554 456 555 446Q555 442 554 439T552 434T549 430T546 428T542 426T539 424H95V270H539Q540 270 542 269T545 267T549 264T552 260T554 255T555 248Q554 238 540 230H95V15Q88 2 77 0Q73 0 70 1T65 3T61 6T59 9T57 13T55 16V678\",8901:\"71 0Q59 4 55 16V96L56 176Q59 180 66 187L70 189H209Q219 181 222 174V15Q219 10 209 1L140 0H71\",8994:\"77 122Q68 122 63 126T57 135T55 142Q55 151 68 176T111 235T177 302T271 356T388 378Q451 378 508 355T602 300T668 233T709 174T722 142Q722 124 704 122Q692 122 685 134T658 179T606 243Q511 338 390 338Q354 338 320 329Q251 312 193 263T97 141Q87 123 77 122\",8995:\"389 143Q324 143 266 164T171 215T107 277T67 330T55 358T60 371T77 378Q85 377 92 367T116 331T158 280Q256 182 389 182Q475 182 552 227T675 351Q688 378 704 378Q722 376 722 358Q722 352 710 330T670 276T605 215T511 164T389 143\",9651:\"99 -20Q84 -11 84 0Q84 5 148 145T278 424L342 563Q347 575 360 575Q368 575 375 570Q376 569 441 430T571 148T637 0Q637 -11 622 -20H99ZM476 260L360 509L248 266Q137 24 135 22Q135 20 360 20Q586 20 586 21L476 260\",9661:\"84 556Q84 567 99 576H622Q637 567 637 556Q637 551 572 409T441 127T375 -14Q368 -19 360 -19H358Q349 -19 342 -7T296 92Q249 193 211 275Q84 550 84 556ZM586 534Q586 536 361 536Q135 536 135 535L358 52L361 47L473 290Q584 532 586 534\",10887:\"102 168Q103 168 151 146T247 102T295 81Q299 85 322 144T344 206L218 268Q153 297 123 313T87 333T82 344T86 355Q104 369 291 455Q491 552 491 553L542 673Q581 767 590 784T609 801Q616 801 622 795T629 781Q629 773 586 677Q546 581 546 577L609 606Q669 635 673 635Q680 635 686 629T693 615Q693 610 692 608T670 593T604 561L524 521L400 226L542 157Q617 123 649 107T687 85T694 72Q694 66 690 60T679 54Q665 54 526 119Q394 186 386 186Q385 186 342 88L331 61L509 -23Q680 -105 688 -111Q693 -115 693 -122T688 -135T675 -141H673Q664 -141 491 -59Q320 21 316 21H315L249 -136Q183 -293 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 154 -261T181 -197T213 -119L280 41Q280 46 186 86Q157 101 121 119Q92 133 87 136T82 148Q82 155 88 161T102 168ZM418 370L466 495Q464 495 308 420T151 344T204 317T311 267T364 244Q364 247 418 370\",10888:\"97 54Q82 54 82 72Q82 79 86 84Q95 91 222 153L351 215L398 324L442 433L258 519Q95 597 87 604Q82 608 82 615T88 628T102 635Q107 635 424 484L458 468L524 630Q593 789 597 795Q601 801 609 801Q616 801 622 795T629 781L562 615L493 450L589 406Q665 371 679 362T694 344Q694 339 693 337T677 326T631 302T538 257Q504 241 465 223T406 195T386 186Q383 185 344 92T306 -3L486 81Q662 168 673 168Q680 168 686 162T693 148T689 137Q688 136 482 35L280 -59L233 -176Q184 -291 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -279 185 -186T224 -90Q225 -88 223 -88Q219 -88 193 -101Q109 -143 98 -143Q82 -138 82 -122Q82 -116 85 -113T108 -98T171 -67L249 -30L289 61Q297 81 307 107T321 144T326 157L218 106Q109 54 97 54ZM553 379Q480 412 480 415Q479 415 460 372T423 285T406 241Q408 240 516 291T624 344L553 379\",10955:\"82 -14T82 -7T95 15H431L529 170H435Q341 170 333 175Q149 218 98 368Q84 406 84 461Q84 515 98 555Q126 633 193 686T346 750Q347 750 373 750T440 751T520 752H680Q693 739 693 732Q693 727 680 712H526Q364 712 353 710Q268 700 207 646T126 512Q123 496 123 461T126 410Q141 350 180 304T280 232Q312 217 344 214T464 210H555L589 261Q613 301 620 311T635 321Q644 321 650 315T657 301Q657 296 651 286T630 252T604 212Q604 210 642 210H680Q693 197 693 190Q693 186 692 184T686 177T680 170H578L526 92L478 17L580 15H682Q693 4 693 -4T680 -25H451L353 -179L518 -181H682Q694 -193 694 -201Q694 -211 682 -219L504 -221H326L293 -272Q257 -332 246 -332Q238 -332 232 -326T225 -313Q225 -310 226 -308Q226 -305 251 -265T278 -223Q278 -221 186 -221H95Q93 -218 89 -214T84 -208T82 -201T95 -181H306L404 -25H249L93 -23L86 -19Q82 -14 82 -7\",10956:\"82 732Q82 739 95 752H251Q415 752 426 750Q539 736 615 657Q667 599 689 517Q692 496 692 461T689 406Q668 325 615 266Q522 170 382 170H355L326 95Q319 80 311 59T298 28T293 17Q293 15 486 15H680Q693 0 693 -6T680 -25H275L213 -179L449 -181H682Q693 -192 693 -199T680 -221H198L178 -270Q153 -333 139 -333Q132 -333 126 -327T119 -314T135 -266T153 -223Q153 -221 124 -221H95Q82 -207 82 -201T95 -181H171L233 -25H162L93 -23L86 -19Q82 -14 82 -7T95 15H251L313 170H202L93 172L86 177Q82 182 82 190Q82 199 93 210H211L329 212L349 261Q366 301 372 311T386 321Q392 321 399 315T407 302Q407 295 390 254T373 210Q374 209 377 209Q412 209 444 217Q512 231 564 273T638 377Q651 414 651 461Q651 509 638 548Q613 613 555 656T422 710Q411 712 249 712H95Q82 727 82 732\"},{})},8955:function(Q,T){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,T.PV=MathJax._.components.global.combineDefaults,T.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},5074:function(Q,T){MathJax._.util.Options.isObject,MathJax._.util.Options.APPEND,MathJax._.util.Options.REMOVE,MathJax._.util.Options.OPTIONS,MathJax._.util.Options.Expandable,MathJax._.util.Options.expandable,MathJax._.util.Options.makeArray,MathJax._.util.Options.keys,MathJax._.util.Options.copy,MathJax._.util.Options.insert,MathJax._.util.Options.defaultOptions,MathJax._.util.Options.userOptions,MathJax._.util.Options.selectOptions,T.Pp=MathJax._.util.Options.selectOptionsFromKeys,MathJax._.util.Options.separateOptions,MathJax._.util.Options.lookup},4228:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.enum=MathJax._.output.common.FontData.enum,T.V=MathJax._.output.common.FontData.V,T.H=MathJax._.output.common.FontData.H,T.NOSTRETCH=MathJax._.output.common.FontData.NOSTRETCH,T.FontData=MathJax._.output.common.FontData.FontData},9403:function(Q,T){Object.defineProperty(T,\"__esModule\",{value:!0}),T.SVGFontData=MathJax._.output.svg.FontData.SVGFontData,T.AddPaths=MathJax._.output.svg.FontData.AddPaths}},T={};function L(H){var V=T[H];if(void 0!==V)return V.exports;var M=T[H]={exports:{}};return Q[H].call(M.exports,M,M.exports,L),M.exports}!function(){var Q=L(8955),T=L(8667),H=L(3869),V=L(7557),M=L(7481),Z=L(5674),i=L(7002),t=L(9349),e=L(9741),s=L(2827),c=L(2970),r=L(1668),o=L(6949),a=L(5193),l=L(2632),n=L(4214),d=L(6466),k=L(3776),u=L(7405),f=L(8105),p=L(2518),h=L(5595),v=L(6357),_=L(9474),D=L(584),b=L(4324),x=L(8135),W=L(1054),y=L(8681),O=L(7293),m=L(3566),S=L(8745),P=L(181),z=L(6560),j=L(1500),g=L(2418),I=L(353),B=L(1082),J=L(67),A=L(9007),C=L(2226),E=L(6385),F=L(871),w=L(6819),X=L(4025),N=L(2698),q=L(5211),G=L(8742),R=L(2989);MathJax.loader&&MathJax.loader.checkVersion(\"output/svg/fonts/tex\",T.q,\"svg-font\"),(0,Q.r8)({_:{output:{common:{fonts:{tex:{\"bold-italic\":H,bold:V,delimiters:M,\"double-struck\":Z,\"fraktur-bold\":i,fraktur:t,italic:e,largeop:s,monospace:c,normal:r,\"sans-serif-bold-italic\":o,\"sans-serif-bold\":a,\"sans-serif-italic\":l,\"sans-serif\":n,\"script-bold\":d,script:k,smallop:u,\"tex-calligraphic-bold\":f,\"tex-calligraphic\":p,\"tex-mathit\":h,\"tex-oldstyle-bold\":v,\"tex-oldstyle\":_,\"tex-size3\":D,\"tex-size4\":b,\"tex-variant\":x}}},svg:{fonts:{tex_ts:W,tex:{\"bold-italic\":y,bold:O,\"fraktur-bold\":m,fraktur:S,italic:P,largeop:z,monospace:j,normal:g,\"sans-serif-bold-italic\":I,\"sans-serif-bold\":B,\"sans-serif-italic\":J,\"sans-serif\":A,smallop:C,\"tex-calligraphic-bold\":E,\"tex-calligraphic\":F,\"tex-mathit\":w,\"tex-oldstyle-bold\":X,\"tex-oldstyle\":N,\"tex-size3\":q,\"tex-size4\":G,\"tex-variant\":R}}}}}});var K=L(5074);if(MathJax.startup){var U=(0,K.Pp)(MathJax.config.svg||{},W.TeXFont.OPTIONS);(0,Q.PV)(MathJax.config,\"svg\",{font:new W.TeXFont(U)})}}()}();"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/output/svg.js",
    "content": "!function(){\"use strict\";var t,e,r,o,n,i,a,s,l,c,h,u,p,d,f,y,m,v,g,b,x,_,M,w,S,O,C,B,j,P,A,V,T,k,G,N,L,D,W,E,R,I,F,H,J,X,z,q,K,U,Q,Y,Z,$,tt,et,rt,ot,nt,it,at,st,lt,ct,ht,ut,pt,dt,ft={7306:function(t,e){e.q=void 0,e.q=\"3.2.2\"},9250:function(t,e,r){var o=this&&this.__assign||function(){return o=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},o.apply(this,arguments)},n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FontData=e.NOSTRETCH=e.H=e.V=void 0;var s=r(9077);e.V=1,e.H=2,e.NOSTRETCH={dir:0};var l=function(){function t(t){var e,r,l,c;void 0===t&&(t=null),this.variant={},this.delimiters={},this.cssFontMap={},this.remapChars={},this.skewIcFactor=.75;var h=this.constructor;this.options=(0,s.userOptions)((0,s.defaultOptions)({},h.OPTIONS),t),this.params=o({},h.defaultParams),this.sizeVariants=i([],n(h.defaultSizeVariants),!1),this.stretchVariants=i([],n(h.defaultStretchVariants),!1),this.cssFontMap=o({},h.defaultCssFonts);try{for(var u=a(Object.keys(this.cssFontMap)),p=u.next();!p.done;p=u.next()){var d=p.value;\"unknown\"===this.cssFontMap[d][0]&&(this.cssFontMap[d][0]=this.options.unknownFamily)}}catch(t){e={error:t}}finally{try{p&&!p.done&&(r=u.return)&&r.call(u)}finally{if(e)throw e.error}}this.cssFamilyPrefix=h.defaultCssFamilyPrefix,this.createVariants(h.defaultVariants),this.defineDelimiters(h.defaultDelimiters);try{for(var f=a(Object.keys(h.defaultChars)),y=f.next();!y.done;y=f.next()){var m=y.value;this.defineChars(m,h.defaultChars[m])}}catch(t){l={error:t}}finally{try{y&&!y.done&&(c=f.return)&&c.call(f)}finally{if(l)throw l.error}}this.defineRemap(\"accent\",h.defaultAccentMap),this.defineRemap(\"mo\",h.defaultMoMap),this.defineRemap(\"mn\",h.defaultMnMap)}return t.charOptions=function(t,e){var r=t[e];return 3===r.length&&(r[3]={}),r[3]},Object.defineProperty(t.prototype,\"styles\",{get:function(){return this._styles},set:function(t){this._styles=t},enumerable:!1,configurable:!0}),t.prototype.createVariant=function(t,e,r){void 0===e&&(e=null),void 0===r&&(r=null);var o={linked:[],chars:e?Object.create(this.variant[e].chars):{}};r&&this.variant[r]&&(Object.assign(o.chars,this.variant[r].chars),this.variant[r].linked.push(o.chars),o.chars=Object.create(o.chars)),this.remapSmpChars(o.chars,t),this.variant[t]=o},t.prototype.remapSmpChars=function(t,e){var r,o,i,s,l=this.constructor;if(l.VariantSmp[e]){var c=l.SmpRemap,h=[null,null,l.SmpRemapGreekU,l.SmpRemapGreekL];try{for(var u=a(l.SmpRanges),p=u.next();!p.done;p=u.next()){var d=n(p.value,3),f=d[0],y=d[1],m=d[2],v=l.VariantSmp[e][f];if(v){for(var g=y;g<=m;g++)if(930!==g){var b=v+g-y;t[g]=this.smpChar(c[b]||b)}if(h[f])try{for(var x=(i=void 0,a(Object.keys(h[f]).map((function(t){return parseInt(t)})))),_=x.next();!_.done;_=x.next()){t[g=_.value]=this.smpChar(v+h[f][g])}}catch(t){i={error:t}}finally{try{_&&!_.done&&(s=x.return)&&s.call(x)}finally{if(i)throw i.error}}}}}catch(t){r={error:t}}finally{try{p&&!p.done&&(o=u.return)&&o.call(u)}finally{if(r)throw r.error}}}\"bold\"===e&&(t[988]=this.smpChar(120778),t[989]=this.smpChar(120779))},t.prototype.smpChar=function(t){return[,,,{smp:t}]},t.prototype.createVariants=function(t){var e,r;try{for(var o=a(t),n=o.next();!n.done;n=o.next()){var i=n.value;this.createVariant(i[0],i[1],i[2])}}catch(t){e={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},t.prototype.defineChars=function(t,e){var r,o,n=this.variant[t];Object.assign(n.chars,e);try{for(var i=a(n.linked),s=i.next();!s.done;s=i.next()){var l=s.value;Object.assign(l,e)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(o=i.return)&&o.call(i)}finally{if(r)throw r.error}}},t.prototype.defineDelimiters=function(t){Object.assign(this.delimiters,t)},t.prototype.defineRemap=function(t,e){this.remapChars.hasOwnProperty(t)||(this.remapChars[t]={}),Object.assign(this.remapChars[t],e)},t.prototype.getDelimiter=function(t){return this.delimiters[t]},t.prototype.getSizeVariant=function(t,e){return this.delimiters[t].variants&&(e=this.delimiters[t].variants[e]),this.sizeVariants[e]},t.prototype.getStretchVariant=function(t,e){return this.stretchVariants[this.delimiters[t].stretchv?this.delimiters[t].stretchv[e]:0]},t.prototype.getChar=function(t,e){return this.variant[t].chars[e]},t.prototype.getVariant=function(t){return this.variant[t]},t.prototype.getCssFont=function(t){return this.cssFontMap[t]||[\"serif\",!1,!1]},t.prototype.getFamily=function(t){return this.cssFamilyPrefix?this.cssFamilyPrefix+\", \"+t:t},t.prototype.getRemappedChar=function(t,e){return(this.remapChars[t]||{})[e]},t.OPTIONS={unknownFamily:\"serif\"},t.JAX=\"common\",t.NAME=\"\",t.defaultVariants=[[\"normal\"],[\"bold\",\"normal\"],[\"italic\",\"normal\"],[\"bold-italic\",\"italic\",\"bold\"],[\"double-struck\",\"bold\"],[\"fraktur\",\"normal\"],[\"bold-fraktur\",\"bold\",\"fraktur\"],[\"script\",\"italic\"],[\"bold-script\",\"bold-italic\",\"script\"],[\"sans-serif\",\"normal\"],[\"bold-sans-serif\",\"bold\",\"sans-serif\"],[\"sans-serif-italic\",\"italic\",\"sans-serif\"],[\"sans-serif-bold-italic\",\"bold-italic\",\"bold-sans-serif\"],[\"monospace\",\"normal\"]],t.defaultCssFonts={normal:[\"unknown\",!1,!1],bold:[\"unknown\",!1,!0],italic:[\"unknown\",!0,!1],\"bold-italic\":[\"unknown\",!0,!0],\"double-struck\":[\"unknown\",!1,!0],fraktur:[\"unknown\",!1,!1],\"bold-fraktur\":[\"unknown\",!1,!0],script:[\"cursive\",!1,!1],\"bold-script\":[\"cursive\",!1,!0],\"sans-serif\":[\"sans-serif\",!1,!1],\"bold-sans-serif\":[\"sans-serif\",!1,!0],\"sans-serif-italic\":[\"sans-serif\",!0,!1],\"sans-serif-bold-italic\":[\"sans-serif\",!0,!0],monospace:[\"monospace\",!1,!1]},t.defaultCssFamilyPrefix=\"\",t.VariantSmp={bold:[119808,119834,120488,120514,120782],italic:[119860,119886,120546,120572],\"bold-italic\":[119912,119938,120604,120630],script:[119964,119990],\"bold-script\":[120016,120042],fraktur:[120068,120094],\"double-struck\":[120120,120146,,,120792],\"bold-fraktur\":[120172,120198],\"sans-serif\":[120224,120250,,,120802],\"bold-sans-serif\":[120276,120302,120662,120688,120812],\"sans-serif-italic\":[120328,120354],\"sans-serif-bold-italic\":[120380,120406,120720,120746],monospace:[120432,120458,,,120822]},t.SmpRanges=[[0,65,90],[1,97,122],[2,913,937],[3,945,969],[4,48,57]],t.SmpRemap={119893:8462,119965:8492,119968:8496,119969:8497,119971:8459,119972:8464,119975:8466,119976:8499,119981:8475,119994:8495,119996:8458,120004:8500,120070:8493,120075:8460,120076:8465,120085:8476,120093:8488,120122:8450,120127:8461,120133:8469,120135:8473,120136:8474,120137:8477,120145:8484},t.SmpRemapGreekU={8711:25,1012:17},t.SmpRemapGreekL={977:27,981:29,982:31,1008:28,1009:30,1013:26,8706:25},t.defaultAccentMap={768:\"\\u02cb\",769:\"\\u02ca\",770:\"\\u02c6\",771:\"\\u02dc\",772:\"\\u02c9\",774:\"\\u02d8\",775:\"\\u02d9\",776:\"\\xa8\",778:\"\\u02da\",780:\"\\u02c7\",8594:\"\\u20d7\",8242:\"'\",8243:\"''\",8244:\"'''\",8245:\"`\",8246:\"``\",8247:\"```\",8279:\"''''\",8400:\"\\u21bc\",8401:\"\\u21c0\",8406:\"\\u2190\",8417:\"\\u2194\",8432:\"*\",8411:\"...\",8412:\"....\",8428:\"\\u21c1\",8429:\"\\u21bd\",8430:\"\\u2190\",8431:\"\\u2192\"},t.defaultMoMap={45:\"\\u2212\"},t.defaultMnMap={45:\"\\u2212\"},t.defaultParams={x_height:.442,quad:1,num1:.676,num2:.394,num3:.444,denom1:.686,denom2:.345,sup1:.413,sup2:.363,sup3:.289,sub1:.15,sub2:.247,sup_drop:.386,sub_drop:.05,delim1:2.39,delim2:1,axis_height:.25,rule_thickness:.06,big_op_spacing1:.111,big_op_spacing2:.167,big_op_spacing3:.2,big_op_spacing4:.6,big_op_spacing5:.1,surd_height:.075,scriptspace:.05,nulldelimiterspace:.12,delimiterfactor:901,delimitershortfall:.3,min_rule_thickness:1.25,separation_factor:1.75,extra_ic:.033},t.defaultDelimiters={},t.defaultChars={},t.defaultSizeVariants=[],t.defaultStretchVariants=[],t}();e.FontData=l},5373:function(t,e){var r=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonArrow=e.CommonDiagonalArrow=e.CommonDiagonalStrike=e.CommonBorder2=e.CommonBorder=e.arrowBBox=e.diagonalArrowDef=e.arrowDef=e.arrowBBoxW=e.arrowBBoxHD=e.arrowHead=e.fullBorder=e.fullPadding=e.fullBBox=e.sideNames=e.sideIndex=e.SOLID=e.PADDING=e.THICKNESS=e.ARROWY=e.ARROWDX=e.ARROWX=void 0,e.ARROWX=4,e.ARROWDX=1,e.ARROWY=2,e.THICKNESS=.067,e.PADDING=.2,e.SOLID=e.THICKNESS+\"em solid\",e.sideIndex={top:0,right:1,bottom:2,left:3},e.sideNames=Object.keys(e.sideIndex),e.fullBBox=function(t){return new Array(4).fill(t.thickness+t.padding)},e.fullPadding=function(t){return new Array(4).fill(t.padding)},e.fullBorder=function(t){return new Array(4).fill(t.thickness)};e.arrowHead=function(t){return Math.max(t.padding,t.thickness*(t.arrowhead.x+t.arrowhead.dx+1))};e.arrowBBoxHD=function(t,e){if(t.childNodes[0]){var r=t.childNodes[0].getBBox(),o=r.h,n=r.d;e[0]=e[2]=Math.max(0,t.thickness*t.arrowhead.y-(o+n)/2)}return e};e.arrowBBoxW=function(t,e){if(t.childNodes[0]){var r=t.childNodes[0].getBBox().w;e[1]=e[3]=Math.max(0,t.thickness*t.arrowhead.y-r/2)}return e},e.arrowDef={up:[-Math.PI/2,!1,!0,\"verticalstrike\"],down:[Math.PI/2,!1,!0,\"verticakstrike\"],right:[0,!1,!1,\"horizontalstrike\"],left:[Math.PI,!1,!1,\"horizontalstrike\"],updown:[Math.PI/2,!0,!0,\"verticalstrike uparrow downarrow\"],leftright:[0,!0,!1,\"horizontalstrike leftarrow rightarrow\"]},e.diagonalArrowDef={updiagonal:[-1,0,!1,\"updiagonalstrike northeastarrow\"],northeast:[-1,0,!1,\"updiagonalstrike updiagonalarrow\"],southeast:[1,0,!1,\"downdiagonalstrike\"],northwest:[1,Math.PI,!1,\"downdiagonalstrike\"],southwest:[-1,Math.PI,!1,\"updiagonalstrike\"],northeastsouthwest:[-1,0,!0,\"updiagonalstrike northeastarrow updiagonalarrow southwestarrow\"],northwestsoutheast:[1,0,!0,\"downdiagonalstrike northwestarrow southeastarrow\"]},e.arrowBBox={up:function(t){return(0,e.arrowBBoxW)(t,[(0,e.arrowHead)(t),0,t.padding,0])},down:function(t){return(0,e.arrowBBoxW)(t,[t.padding,0,(0,e.arrowHead)(t),0])},right:function(t){return(0,e.arrowBBoxHD)(t,[0,(0,e.arrowHead)(t),0,t.padding])},left:function(t){return(0,e.arrowBBoxHD)(t,[0,t.padding,0,(0,e.arrowHead)(t)])},updown:function(t){return(0,e.arrowBBoxW)(t,[(0,e.arrowHead)(t),0,(0,e.arrowHead)(t),0])},leftright:function(t){return(0,e.arrowBBoxHD)(t,[0,(0,e.arrowHead)(t),0,(0,e.arrowHead)(t)])}};e.CommonBorder=function(t){return function(r){var o=e.sideIndex[r];return[r,{renderer:t,bbox:function(t){var e=[0,0,0,0];return e[o]=t.thickness+t.padding,e},border:function(t){var e=[0,0,0,0];return e[o]=t.thickness,e}}]}};e.CommonBorder2=function(t){return function(r,o,n){var i=e.sideIndex[o],a=e.sideIndex[n];return[r,{renderer:t,bbox:function(t){var e=t.thickness+t.padding,r=[0,0,0,0];return r[i]=r[a]=e,r},border:function(t){var e=[0,0,0,0];return e[i]=e[a]=t.thickness,e},remove:o+\" \"+n}]}};e.CommonDiagonalStrike=function(t){return function(r){var o=\"mjx-\"+r.charAt(0)+\"strike\";return[r+\"diagonalstrike\",{renderer:t(o),bbox:e.fullBBox}]}};e.CommonDiagonalArrow=function(t){return function(o){var n=r(e.diagonalArrowDef[o],4),i=n[0],a=n[1],s=n[2];return[o+\"arrow\",{renderer:function(e,o){var n=r(e.arrowAW(),2),l=n[0],c=n[1],h=e.arrow(c,i*(l-a),s);t(e,h)},bbox:function(t){var e=t.arrowData(),o=e.a,n=e.x,i=e.y,a=r([t.arrowhead.x,t.arrowhead.y,t.arrowhead.dx],3),s=a[0],l=a[1],c=a[2],h=r(t.getArgMod(s+c,l),2),u=h[0],p=h[1],d=i+(u>o?t.thickness*p*Math.sin(u-o):0),f=n+(u>Math.PI/2-o?t.thickness*p*Math.sin(u+o-Math.PI/2):0);return[d,f,d,f]},remove:n[3]}]}};e.CommonArrow=function(t){return function(o){var n=r(e.arrowDef[o],4),i=n[0],a=n[1],s=n[2],l=n[3];return[o+\"arrow\",{renderer:function(e,o){var n=e.getBBox(),l=n.w,c=n.h,h=n.d,u=r(s?[c+h,\"X\"]:[l,\"Y\"],2),p=u[0],d=u[1],f=e.getOffset(d),y=e.arrow(p,i,a,d,f);t(e,y)},bbox:e.arrowBBox[o],remove:l}]}}},716:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},i.apply(this,arguments)},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonOutputJax=void 0;var l=r(3985),c=r(4769),h=r(9077),u=r(6914),p=r(5878),d=r(5888),f=function(t){function e(e,r,o){void 0===e&&(e=null),void 0===r&&(r=null),void 0===o&&(o=null);var n=this,i=a((0,h.separateOptions)(e,o.OPTIONS),2),s=i[0],l=i[1];return(n=t.call(this,s)||this).factory=n.options.wrapperFactory||new r,n.factory.jax=n,n.cssStyles=n.options.cssStyles||new d.CssStyles,n.font=n.options.font||new o(l),n.unknownCache=new Map,n}return n(e,t),e.prototype.typeset=function(t,e){this.setDocument(e);var r=this.createNode();return this.toDOM(t,r,e),r},e.prototype.createNode=function(){var t=this.constructor.NAME;return this.html(\"mjx-container\",{class:\"MathJax\",jax:t})},e.prototype.setScale=function(t){var e=this.math.metrics.scale*this.options.scale;1!==e&&this.adaptor.setStyle(t,\"fontSize\",(0,u.percent)(e))},e.prototype.toDOM=function(t,e,r){void 0===r&&(r=null),this.setDocument(r),this.math=t,this.pxPerEm=t.metrics.ex/this.font.params.x_height,t.root.setTeXclass(null),this.setScale(e),this.nodeMap=new Map,this.container=e,this.processMath(t.root,e),this.nodeMap=null,this.executeFilters(this.postFilters,t,r,e)},e.prototype.getBBox=function(t,e){this.setDocument(e),this.math=t,t.root.setTeXclass(null),this.nodeMap=new Map;var r=this.factory.wrap(t.root).getOuterBBox();return this.nodeMap=null,r},e.prototype.getMetrics=function(t){var e,r;this.setDocument(t);var o=this.adaptor,n=this.getMetricMaps(t);try{for(var i=s(t.math),a=i.next();!a.done;a=i.next()){var l=a.value,h=o.parent(l.start.node);if(l.state()<c.STATE.METRICS&&h){var u=n[l.display?1:0].get(h),p=u.em,d=u.ex,f=u.containerWidth,y=u.lineWidth,m=u.scale,v=u.family;l.setMetrics(p,d,f,y,m),this.options.mtextInheritFont&&(l.outputData.mtextFamily=v),this.options.merrorInheritFont&&(l.outputData.merrorFamily=v),l.state(c.STATE.METRICS)}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},e.prototype.getMetricsFor=function(t,e){var r=this.options.mtextInheritFont||this.options.merrorInheritFont,o=this.getTestElement(t,e),n=this.measureMetrics(o,r);return this.adaptor.remove(o),n},e.prototype.getMetricMaps=function(t){var e,r,o,n,i,a,l,h,u,p,d=this.adaptor,f=[new Map,new Map];try{for(var y=s(t.math),m=y.next();!m.done;m=y.next()){var v=m.value;if((C=d.parent(v.start.node))&&v.state()<c.STATE.METRICS){var g=f[v.display?1:0];g.has(C)||g.set(C,this.getTestElement(C,v.display))}}}catch(t){e={error:t}}finally{try{m&&!m.done&&(r=y.return)&&r.call(y)}finally{if(e)throw e.error}}var b=this.options.mtextInheritFont||this.options.merrorInheritFont,x=[new Map,new Map];try{for(var _=s(x.keys()),M=_.next();!M.done;M=_.next()){var w=M.value;try{for(var S=(i=void 0,s(f[w].keys())),O=S.next();!O.done;O=S.next()){var C=O.value;x[w].set(C,this.measureMetrics(f[w].get(C),b))}}catch(t){i={error:t}}finally{try{O&&!O.done&&(a=S.return)&&a.call(S)}finally{if(i)throw i.error}}}}catch(t){o={error:t}}finally{try{M&&!M.done&&(n=_.return)&&n.call(_)}finally{if(o)throw o.error}}try{for(var B=s(x.keys()),j=B.next();!j.done;j=B.next()){w=j.value;try{for(var P=(u=void 0,s(f[w].values())),A=P.next();!A.done;A=P.next()){C=A.value;d.remove(C)}}catch(t){u={error:t}}finally{try{A&&!A.done&&(p=P.return)&&p.call(P)}finally{if(u)throw u.error}}}}catch(t){l={error:t}}finally{try{j&&!j.done&&(h=B.return)&&h.call(B)}finally{if(l)throw l.error}}return x},e.prototype.getTestElement=function(t,e){var r=this.adaptor;if(!this.testInline){this.testInline=this.html(\"mjx-test\",{style:{display:\"inline-block\",width:\"100%\",\"font-style\":\"normal\",\"font-weight\":\"normal\",\"font-size\":\"100%\",\"font-size-adjust\":\"none\",\"text-indent\":0,\"text-transform\":\"none\",\"letter-spacing\":\"normal\",\"word-spacing\":\"normal\",overflow:\"hidden\",height:\"1px\",\"margin-right\":\"-1px\"}},[this.html(\"mjx-left-box\",{style:{display:\"inline-block\",width:0,float:\"left\"}}),this.html(\"mjx-ex-box\",{style:{position:\"absolute\",overflow:\"hidden\",width:\"1px\",height:\"60ex\"}}),this.html(\"mjx-right-box\",{style:{display:\"inline-block\",width:0,float:\"right\"}})]),this.testDisplay=r.clone(this.testInline),r.setStyle(this.testDisplay,\"display\",\"table\"),r.setStyle(this.testDisplay,\"margin-right\",\"\"),r.setStyle(r.firstChild(this.testDisplay),\"display\",\"none\");var o=r.lastChild(this.testDisplay);r.setStyle(o,\"display\",\"table-cell\"),r.setStyle(o,\"width\",\"10000em\"),r.setStyle(o,\"float\",\"\")}return r.append(t,r.clone(e?this.testDisplay:this.testInline))},e.prototype.measureMetrics=function(t,e){var r=this.adaptor,o=e?r.fontFamily(t):\"\",n=r.fontSize(t),i=a(r.nodeSize(r.childNode(t,1)),2),s=i[0],l=i[1],c=s?l/60:n*this.options.exFactor;return{em:n,ex:c,containerWidth:s?\"table\"===r.getStyle(t,\"display\")?r.nodeSize(r.lastChild(t))[0]-1:r.nodeBBox(r.lastChild(t)).left-r.nodeBBox(r.firstChild(t)).left-2:1e6,lineWidth:1e6,scale:Math.max(this.options.minScale,this.options.matchFontHeight?c/this.font.params.x_height/n:1),family:o}},e.prototype.styleSheet=function(t){var e,r;if(this.setDocument(t),this.cssStyles.clear(),this.cssStyles.addStyles(this.constructor.commonStyles),\"getStyles\"in t)try{for(var o=s(t.getStyles()),n=o.next();!n.done;n=o.next()){var i=n.value;this.cssStyles.addStyles(i)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return this.addWrapperStyles(this.cssStyles),this.addFontStyles(this.cssStyles),this.html(\"style\",{id:\"MJX-styles\"},[this.text(\"\\n\"+this.cssStyles.cssText+\"\\n\")])},e.prototype.addFontStyles=function(t){t.addStyles(this.font.styles)},e.prototype.addWrapperStyles=function(t){var e,r;try{for(var o=s(this.factory.getKinds()),n=o.next();!n.done;n=o.next()){var i=n.value;this.addClassStyles(this.factory.getNodeClass(i),t)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},e.prototype.addClassStyles=function(t,e){e.addStyles(t.styles)},e.prototype.setDocument=function(t){t&&(this.document=t,this.adaptor.document=t.document)},e.prototype.html=function(t,e,r,o){return void 0===e&&(e={}),void 0===r&&(r=[]),this.adaptor.node(t,e,r,o)},e.prototype.text=function(t){return this.adaptor.text(t)},e.prototype.fixed=function(t,e){return void 0===e&&(e=3),Math.abs(t)<6e-4?\"0\":t.toFixed(e).replace(/\\.?0+$/,\"\")},e.prototype.measureText=function(t,e,r){void 0===r&&(r=[\"\",!1,!1]);var o=this.unknownText(t,e);if(\"-explicitFont\"===e){var n=this.cssFontStyles(r);this.adaptor.setAttributes(o,{style:n})}return this.measureTextNodeWithCache(o,t,e,r)},e.prototype.measureTextNodeWithCache=function(t,e,r,o){void 0===o&&(o=[\"\",!1,!1]),\"-explicitFont\"===r&&(r=[o[0],o[1]?\"T\":\"F\",o[2]?\"T\":\"F\",\"\"].join(\"-\")),this.unknownCache.has(r)||this.unknownCache.set(r,new Map);var n=this.unknownCache.get(r),i=n.get(e);if(i)return i;var a=this.measureTextNode(t);return n.set(e,a),a},e.prototype.measureXMLnode=function(t){var e=this.adaptor,r=this.html(\"mjx-xml-block\",{style:{display:\"inline-block\"}},[e.clone(t)]),o=this.html(\"mjx-baseline\",{style:{display:\"inline-block\",width:0,height:0}}),n=this.html(\"mjx-measure-xml\",{style:{position:\"absolute\",display:\"inline-block\",\"font-family\":\"initial\",\"line-height\":\"normal\"}},[o,r]);e.append(e.parent(this.math.start.node),this.container),e.append(this.container,n);var i=this.math.metrics.em*this.math.metrics.scale,a=e.nodeBBox(r),s=a.left,l=a.right,c=a.bottom,h=a.top,u=(l-s)/i,p=(e.nodeBBox(o).top-h)/i,d=(c-h)/i-p;return e.remove(this.container),e.remove(n),{w:u,h:p,d:d}},e.prototype.cssFontStyles=function(t,e){void 0===e&&(e={});var r=a(t,3),o=r[0],n=r[1],i=r[2];return e[\"font-family\"]=this.font.getFamily(o),n&&(e[\"font-style\"]=\"italic\"),i&&(e[\"font-weight\"]=\"bold\"),e},e.prototype.getFontData=function(t){return t||(t=new p.Styles),[this.font.getFamily(t.get(\"font-family\")),\"italic\"===t.get(\"font-style\"),\"bold\"===t.get(\"font-weight\")]},e.NAME=\"Common\",e.OPTIONS=i(i({},l.AbstractOutputJax.OPTIONS),{scale:1,minScale:.5,mtextInheritFont:!1,merrorInheritFont:!1,mtextFont:\"\",merrorFont:\"serif\",mathmlSpacing:!1,skipAttributes:{},exFactor:.5,displayAlign:\"center\",displayIndent:\"0\",wrapperFactory:null,font:null,cssStyles:null}),e.commonStyles={},e}(l.AbstractOutputJax);e.CommonOutputJax=f},1541:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return a(e,t),e},l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},c=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},h=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonWrapper=void 0;var u=r(9879),p=r(8921),d=r(6720),f=s(r(6914)),y=r(5878),m=r(3717),v=r(9250),g=2/18;function b(t,e){return t?e<g?0:g:e}var x=function(t){function e(e,r,o){void 0===o&&(o=null);var n=t.call(this,e,r)||this;return n.parent=null,n.removedStyles=null,n.styles=null,n.variant=\"\",n.bboxComputed=!1,n.stretch=v.NOSTRETCH,n.font=null,n.parent=o,n.font=e.jax.font,n.bbox=m.BBox.zero(),n.getStyles(),n.getVariant(),n.getScale(),n.getSpace(),n.childNodes=r.childNodes.map((function(t){var e=n.wrap(t);return e.bbox.pwidth&&(r.notParent||r.isKind(\"math\"))&&(n.bbox.pwidth=m.BBox.fullWidth),e})),n}return n(e,t),Object.defineProperty(e.prototype,\"jax\",{get:function(){return this.factory.jax},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"adaptor\",{get:function(){return this.factory.jax.adaptor},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"metrics\",{get:function(){return this.factory.jax.math.metrics},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!this.node.notParent&&!this.node.isToken},enumerable:!1,configurable:!0}),e.prototype.wrap=function(t,e){void 0===e&&(e=null);var r=this.factory.wrap(t,e||this);return e&&e.childNodes.push(r),this.jax.nodeMap.set(t,r),r},e.prototype.getBBox=function(t){if(void 0===t&&(t=!0),this.bboxComputed)return this.bbox;var e=t?this.bbox:m.BBox.zero();return this.computeBBox(e),this.bboxComputed=t,e},e.prototype.getOuterBBox=function(t){var e,r;void 0===t&&(t=!0);var o=this.getBBox(t);if(!this.styles)return o;var n=new m.BBox;Object.assign(n,o);try{for(var i=l(m.BBox.StyleAdjust),a=i.next();!a.done;a=i.next()){var s=c(a.value,2),h=s[0],u=s[1],p=this.styles.get(h);p&&(n[u]+=this.length2em(p,1,n.rscale))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return n},e.prototype.computeBBox=function(t,e){var r,o;void 0===e&&(e=!1),t.empty();try{for(var n=l(this.childNodes),i=n.next();!i.done;i=n.next()){var a=i.value;t.append(a.getOuterBBox())}}catch(t){r={error:t}}finally{try{i&&!i.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}t.clean(),this.fixesPWidth&&this.setChildPWidths(e)&&this.computeBBox(t,!0)},e.prototype.setChildPWidths=function(t,e,r){var o,n;if(void 0===e&&(e=null),void 0===r&&(r=!0),t)return!1;r&&(this.bbox.pwidth=\"\");var i=!1;try{for(var a=l(this.childNodes),s=a.next();!s.done;s=a.next()){var c=s.value,h=c.getOuterBBox();h.pwidth&&c.setChildPWidths(t,null===e?h.w:e,r)&&(i=!0)}}catch(t){o={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i},e.prototype.invalidateBBox=function(){this.bboxComputed&&(this.bboxComputed=!1,this.parent&&this.parent.invalidateBBox())},e.prototype.copySkewIC=function(t){var e=this.childNodes[0];(null==e?void 0:e.bbox.sk)&&(t.sk=e.bbox.sk),(null==e?void 0:e.bbox.dx)&&(t.dx=e.bbox.dx);var r=this.childNodes[this.childNodes.length-1];(null==r?void 0:r.bbox.ic)&&(t.ic=r.bbox.ic,t.w+=t.ic)},e.prototype.getStyles=function(){var t=this.node.attributes.getExplicit(\"style\");if(t)for(var r=this.styles=new y.Styles(t),o=0,n=e.removeStyles.length;o<n;o++){var i=e.removeStyles[o];r.get(i)&&(this.removedStyles||(this.removedStyles={}),this.removedStyles[i]=r.get(i),r.set(i,\"\"))}},e.prototype.getVariant=function(){if(this.node.isToken){var t=this.node.attributes,r=t.get(\"mathvariant\");if(!t.getExplicit(\"mathvariant\")){var o=t.getList(\"fontfamily\",\"fontweight\",\"fontstyle\");if(this.removedStyles){var n=this.removedStyles;n.fontFamily&&(o.family=n.fontFamily),n.fontWeight&&(o.weight=n.fontWeight),n.fontStyle&&(o.style=n.fontStyle)}o.fontfamily&&(o.family=o.fontfamily),o.fontweight&&(o.weight=o.fontweight),o.fontstyle&&(o.style=o.fontstyle),o.weight&&o.weight.match(/^\\d+$/)&&(o.weight=parseInt(o.weight)>600?\"bold\":\"normal\"),o.family?r=this.explicitVariant(o.family,o.weight,o.style):(this.node.getProperty(\"variantForm\")&&(r=\"-tex-variant\"),r=(e.BOLDVARIANTS[o.weight]||{})[r]||r,r=(e.ITALICVARIANTS[o.style]||{})[r]||r)}this.variant=r}},e.prototype.explicitVariant=function(t,e,r){var o=this.styles;return o||(o=this.styles=new y.Styles),o.set(\"fontFamily\",t),e&&o.set(\"fontWeight\",e),r&&o.set(\"fontStyle\",r),\"-explicitFont\"},e.prototype.getScale=function(){var t=1,e=this.parent,r=e?e.bbox.scale:1,o=this.node.attributes,n=Math.min(o.get(\"scriptlevel\"),2),i=o.get(\"fontsize\"),a=this.node.isToken||this.node.isKind(\"mstyle\")?o.get(\"mathsize\"):o.getInherited(\"mathsize\");if(0!==n){t=Math.pow(o.get(\"scriptsizemultiplier\"),n);var s=this.length2em(o.get(\"scriptminsize\"),.8,1);t<s&&(t=s)}this.removedStyles&&this.removedStyles.fontSize&&!i&&(i=this.removedStyles.fontSize),i&&!o.getExplicit(\"mathsize\")&&(a=i),\"1\"!==a&&(t*=this.length2em(a,1,1)),this.bbox.scale=t,this.bbox.rscale=t/r},e.prototype.getSpace=function(){var t=this.isTopEmbellished(),e=this.node.hasSpacingAttributes();this.jax.options.mathmlSpacing||e?t&&this.getMathMLSpacing():this.getTeXSpacing(t,e)},e.prototype.getMathMLSpacing=function(){var t=this.node.coreMO(),e=t.coreParent(),r=e.parent;if(r&&r.isKind(\"mrow\")&&1!==r.childNodes.length){var o=t.attributes,n=o.get(\"scriptlevel\")>0;this.bbox.L=o.isSet(\"lspace\")?Math.max(0,this.length2em(o.get(\"lspace\"))):b(n,t.lspace),this.bbox.R=o.isSet(\"rspace\")?Math.max(0,this.length2em(o.get(\"rspace\"))):b(n,t.rspace);var i=r.childIndex(e);if(0!==i){var a=r.childNodes[i-1];if(a.isEmbellished){var s=this.jax.nodeMap.get(a).getBBox();s.R&&(this.bbox.L=Math.max(0,this.bbox.L-s.R))}}}},e.prototype.getTeXSpacing=function(t,e){if(!e){var r=this.node.texSpacing();r&&(this.bbox.L=this.length2em(r))}if(t||e){var o=this.node.coreMO().attributes;o.isSet(\"lspace\")&&(this.bbox.L=Math.max(0,this.length2em(o.get(\"lspace\")))),o.isSet(\"rspace\")&&(this.bbox.R=Math.max(0,this.length2em(o.get(\"rspace\"))))}},e.prototype.isTopEmbellished=function(){return this.node.isEmbellished&&!(this.node.parent&&this.node.parent.isEmbellished)},e.prototype.core=function(){return this.jax.nodeMap.get(this.node.core())},e.prototype.coreMO=function(){return this.jax.nodeMap.get(this.node.coreMO())},e.prototype.getText=function(){var t,e,r=\"\";if(this.node.isToken)try{for(var o=l(this.node.childNodes),n=o.next();!n.done;n=o.next()){var i=n.value;i instanceof p.TextNode&&(r+=i.getText())}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return r},e.prototype.canStretch=function(t){if(this.stretch=v.NOSTRETCH,this.node.isEmbellished){var e=this.core();e&&e.node!==this.node&&e.canStretch(t)&&(this.stretch=e.stretch)}return 0!==this.stretch.dir},e.prototype.getAlignShift=function(){var t,e=(t=this.node.attributes).getList.apply(t,h([],c(p.indentAttributes),!1)),r=e.indentalign,o=e.indentshift,n=e.indentalignfirst,i=e.indentshiftfirst;return\"indentalign\"!==n&&(r=n),\"auto\"===r&&(r=this.jax.options.displayAlign),\"indentshift\"!==i&&(o=i),\"auto\"===o&&(o=this.jax.options.displayIndent,\"right\"!==r||o.match(/^\\s*0[a-z]*\\s*$/)||(o=(\"-\"+o.trim()).replace(/^--/,\"\"))),[r,this.length2em(o,this.metrics.containerWidth)]},e.prototype.getAlignX=function(t,e,r){return\"right\"===r?t-(e.w+e.R)*e.rscale:\"left\"===r?e.L*e.rscale:(t-e.w*e.rscale)/2},e.prototype.getAlignY=function(t,e,r,o,n){return\"top\"===n?t-r:\"bottom\"===n?o-e:\"center\"===n?(t-r-(e-o))/2:0},e.prototype.getWrapWidth=function(t){return this.childNodes[t].getBBox().w},e.prototype.getChildAlign=function(t){return\"left\"},e.prototype.percent=function(t){return f.percent(t)},e.prototype.em=function(t){return f.em(t)},e.prototype.px=function(t,e){return void 0===e&&(e=-f.BIGDIMEN),f.px(t,e,this.metrics.em)},e.prototype.length2em=function(t,e,r){return void 0===e&&(e=1),void 0===r&&(r=null),null===r&&(r=this.bbox.scale),f.length2em(t,e,r,this.jax.pxPerEm)},e.prototype.unicodeChars=function(t,e){void 0===e&&(e=this.variant);var r=(0,d.unicodeChars)(t),o=this.font.getVariant(e);if(o&&o.chars){var n=o.chars;r=r.map((function(t){return((n[t]||[])[3]||{}).smp||t}))}return r},e.prototype.remapChars=function(t){return t},e.prototype.mmlText=function(t){return this.node.factory.create(\"text\").setText(t)},e.prototype.mmlNode=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r=[]),this.node.factory.create(t,e,r)},e.prototype.createMo=function(t){var e=this.node.factory,r=e.create(\"text\").setText(t),o=e.create(\"mo\",{stretchy:!0},[r]);o.inheritAttributesFrom(this.node);var n=this.wrap(o);return n.parent=this,n},e.prototype.getVariantChar=function(t,e){var r=this.font.getChar(t,e)||[0,0,0,{unknown:!0}];return 3===r.length&&(r[3]={}),r},e.kind=\"unknown\",e.styles={},e.removeStyles=[\"fontSize\",\"fontFamily\",\"fontWeight\",\"fontStyle\",\"fontVariant\",\"font\"],e.skipAttributes={fontfamily:!0,fontsize:!0,fontweight:!0,fontstyle:!0,color:!0,background:!0,class:!0,href:!0,style:!0,xmlns:!0},e.BOLDVARIANTS={bold:{normal:\"bold\",italic:\"bold-italic\",fraktur:\"bold-fraktur\",script:\"bold-script\",\"sans-serif\":\"bold-sans-serif\",\"sans-serif-italic\":\"sans-serif-bold-italic\"},normal:{bold:\"normal\",\"bold-italic\":\"italic\",\"bold-fraktur\":\"fraktur\",\"bold-script\":\"script\",\"bold-sans-serif\":\"sans-serif\",\"sans-serif-bold-italic\":\"sans-serif-italic\"}},e.ITALICVARIANTS={italic:{normal:\"italic\",bold:\"bold-italic\",\"sans-serif\":\"sans-serif-italic\",\"bold-sans-serif\":\"sans-serif-bold-italic\"},normal:{italic:\"normal\",\"bold-italic\":\"bold\",\"sans-serif-italic\":\"sans-serif\",\"sans-serif-bold-italic\":\"bold-sans-serif\"}},e}(u.AbstractWrapper);e.CommonWrapper=x},1475:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonWrapperFactory=void 0;var i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.jax=null,e}return n(e,t),Object.defineProperty(e.prototype,\"Wrappers\",{get:function(){return this.node},enumerable:!1,configurable:!0}),e.defaultNodes={},e}(r(2506).AbstractWrapperFactory);e.CommonWrapperFactory=i},3438:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonTeXAtomMixin=void 0;var i=r(8921);e.CommonTeXAtomMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.computeBBox=function(e,r){if(void 0===r&&(r=!1),t.prototype.computeBBox.call(this,e,r),this.childNodes[0]&&this.childNodes[0].bbox.ic&&(e.ic=this.childNodes[0].bbox.ic),this.node.texClass===i.TEXCLASS.VCENTER){var o=e.h,n=(o+e.d)/2+this.font.params.axis_height-o;e.h+=n,e.d-=n}},e}(t)}},555:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonTextNodeMixin=void 0,e.CommonTextNodeMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.computeBBox=function(t,e){var r,o;void 0===e&&(e=!1);var a=this.parent.variant,s=this.node.getText();if(\"-explicitFont\"===a){var l=this.jax.getFontData(this.parent.styles),c=this.jax.measureText(s,a,l),h=c.w,u=c.h,p=c.d;t.h=u,t.d=p,t.w=h}else{var d=this.remappedText(s,a);t.empty();try{for(var f=n(d),y=f.next();!y.done;y=f.next()){var m=y.value,v=i(this.getVariantChar(a,m),4),g=(u=v[0],p=v[1],h=v[2],v[3]);if(g.unknown){var b=this.jax.measureText(String.fromCodePoint(m),a);h=b.w,u=b.h,p=b.d}t.w+=h,u>t.h&&(t.h=u),p>t.d&&(t.d=p),t.ic=g.ic||0,t.sk=g.sk||0,t.dx=g.dx||0}}catch(t){r={error:t}}finally{try{y&&!y.done&&(o=f.return)&&o.call(f)}finally{if(r)throw r.error}}d.length>1&&(t.sk=0),t.clean()}},e.prototype.remappedText=function(t,e){var r=this.parent.stretch.c;return r?[r]:this.parent.remapChars(this.unicodeChars(t,e))},e.prototype.getStyles=function(){},e.prototype.getVariant=function(){},e.prototype.getScale=function(){},e.prototype.getSpace=function(){},e}(t)}},3345:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMactionMixin=e.TooltipData=void 0;var s=r(6720);e.TooltipData={dx:\".2em\",dy:\".1em\",postDelay:600,clearDelay:100,hoverTimer:new Map,clearTimer:new Map,stopTimers:function(t,e){e.clearTimer.has(t)&&(clearTimeout(e.clearTimer.get(t)),e.clearTimer.delete(t)),e.hoverTimer.has(t)&&(clearTimeout(e.hoverTimer.get(t)),e.hoverTimer.delete(t))}},e.CommonMactionMixin=function(t){return function(t){function r(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,a([],i(e),!1))||this,n=o.constructor.actions,s=o.node.attributes.get(\"actiontype\"),l=i(n.get(s)||[function(t,e){},{}],2),c=l[0],h=l[1];return o.action=c,o.data=h,o.getParameters(),o}return n(r,t),Object.defineProperty(r.prototype,\"selected\",{get:function(){var t=this.node.attributes.get(\"selection\"),e=Math.max(1,Math.min(this.childNodes.length,t))-1;return this.childNodes[e]||this.wrap(this.node.selected)},enumerable:!1,configurable:!0}),r.prototype.getParameters=function(){var t=this.node.attributes.get(\"data-offsets\"),r=i((0,s.split)(t||\"\"),2),o=r[0],n=r[1];this.dx=this.length2em(o||e.TooltipData.dx),this.dy=this.length2em(n||e.TooltipData.dy)},r.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.updateFrom(this.selected.getOuterBBox()),this.selected.setChildPWidths(e)},r}(t)}},2057:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMathMixin=void 0,e.CommonMathMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.getWrapWidth=function(t){return this.parent?this.getBBox().w:this.metrics.containerWidth/this.jax.pxPerEm},e}(t)}},6200:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return a(e,t),e},l=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},c=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},h=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMencloseMixin=void 0;var u=s(r(5373)),p=r(6720);e.CommonMencloseMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,c([],l(e),!1))||this;return o.notations={},o.renderChild=null,o.msqrt=null,o.padding=u.PADDING,o.thickness=u.THICKNESS,o.arrowhead={x:u.ARROWX,y:u.ARROWY,dx:u.ARROWDX},o.TRBL=[0,0,0,0],o.getParameters(),o.getNotations(),o.removeRedundantNotations(),o.initializeNotations(),o.TRBL=o.getBBoxExtenders(),o}return n(e,t),e.prototype.getParameters=function(){var t=this.node.attributes,e=t.get(\"data-padding\");void 0!==e&&(this.padding=this.length2em(e,u.PADDING));var r=t.get(\"data-thickness\");void 0!==r&&(this.thickness=this.length2em(r,u.THICKNESS));var o=t.get(\"data-arrowhead\");if(void 0!==o){var n=l((0,p.split)(o),3),i=n[0],a=n[1],s=n[2];this.arrowhead={x:i?parseFloat(i):u.ARROWX,y:a?parseFloat(a):u.ARROWY,dx:s?parseFloat(s):u.ARROWDX}}},e.prototype.getNotations=function(){var t,e,r=this.constructor.notations;try{for(var o=h((0,p.split)(this.node.attributes.get(\"notation\"))),n=o.next();!n.done;n=o.next()){var i=n.value,a=r.get(i);a&&(this.notations[i]=a,a.renderChild&&(this.renderChild=a.renderer))}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}},e.prototype.removeRedundantNotations=function(){var t,e,r,o;try{for(var n=h(Object.keys(this.notations)),i=n.next();!i.done;i=n.next()){var a=i.value;if(this.notations[a]){var s=this.notations[a].remove||\"\";try{for(var l=(r=void 0,h(s.split(/ /))),c=l.next();!c.done;c=l.next()){var u=c.value;delete this.notations[u]}}catch(t){r={error:t}}finally{try{c&&!c.done&&(o=l.return)&&o.call(l)}finally{if(r)throw r.error}}}}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.initializeNotations=function(){var t,e;try{for(var r=h(Object.keys(this.notations)),o=r.next();!o.done;o=r.next()){var n=o.value,i=this.notations[n].init;i&&i(this)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=l(this.TRBL,4),o=r[0],n=r[1],i=r[2],a=r[3],s=this.childNodes[0].getBBox();t.combine(s,a,0),t.h+=o,t.d+=i,t.w+=n,this.setChildPWidths(e)},e.prototype.getBBoxExtenders=function(){var t,e,r=[0,0,0,0];try{for(var o=h(Object.keys(this.notations)),n=o.next();!n.done;n=o.next()){var i=n.value;this.maximizeEntries(r,this.notations[i].bbox(this))}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return r},e.prototype.getPadding=function(){var t,e,r=this,o=[0,0,0,0];try{for(var n=h(Object.keys(this.notations)),i=n.next();!i.done;i=n.next()){var a=i.value,s=this.notations[a].border;s&&this.maximizeEntries(o,s(this))}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return[0,1,2,3].map((function(t){return r.TRBL[t]-o[t]}))},e.prototype.maximizeEntries=function(t,e){for(var r=0;r<t.length;r++)t[r]<e[r]&&(t[r]=e[r])},e.prototype.getOffset=function(t){var e=l(this.TRBL,4),r=e[0],o=e[1],n=e[2],i=e[3],a=(\"X\"===t?o-i:n-r)/2;return Math.abs(a)>.001?a:0},e.prototype.getArgMod=function(t,e){return[Math.atan2(e,t),Math.sqrt(t*t+e*e)]},e.prototype.arrow=function(t,e,r,o,n){return void 0===o&&(o=\"\"),void 0===n&&(n=0),null},e.prototype.arrowData=function(){var t=l([this.padding,this.thickness],2),e=t[0],r=t[1]*(this.arrowhead.x+Math.max(1,this.arrowhead.dx)),o=this.childNodes[0].getBBox(),n=o.h,i=o.d,a=o.w,s=n+i,c=Math.sqrt(s*s+a*a),h=Math.max(e,r*a/c),u=Math.max(e,r*s/c),p=l(this.getArgMod(a+2*h,s+2*u),2);return{a:p[0],W:p[1],x:h,y:u}},e.prototype.arrowAW=function(){var t=this.childNodes[0].getBBox(),e=t.h,r=t.d,o=t.w,n=l(this.TRBL,4),i=n[0],a=n[1],s=n[2],c=n[3];return this.getArgMod(c+o+a,i+e+r+s)},e.prototype.createMsqrt=function(t){var e=this.node.factory.create(\"msqrt\");e.inheritAttributesFrom(this.node),e.childNodes[0]=t.node;var r=this.wrap(e);return r.parent=this,r},e.prototype.sqrtTRBL=function(){var t=this.msqrt.getBBox(),e=this.msqrt.childNodes[0].getBBox();return[t.h-e.h,0,t.d-e.d,t.w-e.w]},e}(t)}},1346:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMfencedMixin=void 0,e.CommonMfencedMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;return o.mrow=null,o.createMrow(),o.addMrowChildren(),o}return o(e,t),e.prototype.createMrow=function(){var t=this.node.factory.create(\"inferredMrow\");t.inheritAttributesFrom(this.node),this.mrow=this.wrap(t),this.mrow.parent=this},e.prototype.addMrowChildren=function(){var t,e,r=this.node,o=this.mrow;this.addMo(r.open),this.childNodes.length&&o.childNodes.push(this.childNodes[0]);var n=0;try{for(var i=a(this.childNodes.slice(1)),s=i.next();!s.done;s=i.next()){var l=s.value;this.addMo(r.separators[n++]),o.childNodes.push(l)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}this.addMo(r.close),o.stretchChildren()},e.prototype.addMo=function(t){if(t){var e=this.wrap(t);this.mrow.childNodes.push(e),e.parent=this.mrow}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.updateFrom(this.mrow.getOuterBBox()),this.setChildPWidths(e)},e}(t)}},5705:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMfracMixin=void 0,e.CommonMfracMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;if(o.bevel=null,o.pad=o.node.getProperty(\"withDelims\")?0:o.font.params.nulldelimiterspace,o.node.attributes.get(\"bevelled\")){var a=o.getBevelData(o.isDisplay()).H,s=o.bevel=o.createMo(\"/\");s.node.attributes.set(\"symmetric\",!0),s.canStretch(1),s.getStretchedVariant([a],!0)}return o}return o(e,t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.empty();var r=this.node.attributes.getList(\"linethickness\",\"bevelled\"),o=r.linethickness,n=r.bevelled,i=this.isDisplay(),a=null;if(n)this.getBevelledBBox(t,i);else{var s=this.length2em(String(o),.06);a=-2*this.pad,0===s?this.getAtopBBox(t,i):(this.getFractionBBox(t,i,s),a-=.2),a+=t.w}t.clean(),this.setChildPWidths(e,a)},e.prototype.getFractionBBox=function(t,e,r){var o=this.childNodes[0].getOuterBBox(),n=this.childNodes[1].getOuterBBox(),i=this.font.params.axis_height,a=this.getTUV(e,r),s=a.T,l=a.u,c=a.v;t.combine(o,0,i+s+Math.max(o.d*o.rscale,l)),t.combine(n,0,i-s-Math.max(n.h*n.rscale,c)),t.w+=2*this.pad+.2},e.prototype.getTUV=function(t,e){var r=this.font.params,o=r.axis_height,n=(t?3.5:1.5)*e;return{T:(t?3.5:1.5)*e,u:(t?r.num1:r.num2)-o-n,v:(t?r.denom1:r.denom2)+o-n}},e.prototype.getAtopBBox=function(t,e){var r=this.getUVQ(e),o=r.u,n=r.v,i=r.nbox,a=r.dbox;t.combine(i,0,o),t.combine(a,0,-n),t.w+=2*this.pad},e.prototype.getUVQ=function(t){var e=this.childNodes[0].getOuterBBox(),r=this.childNodes[1].getOuterBBox(),o=this.font.params,i=n(t?[o.num1,o.denom1]:[o.num3,o.denom2],2),a=i[0],s=i[1],l=(t?7:3)*o.rule_thickness,c=a-e.d*e.scale-(r.h*r.scale-s);return c<l&&(a+=(l-c)/2,s+=(l-c)/2,c=l),{u:a,v:s,q:c,nbox:e,dbox:r}},e.prototype.getBevelledBBox=function(t,e){var r=this.getBevelData(e),o=r.u,n=r.v,i=r.delta,a=r.nbox,s=r.dbox,l=this.bevel.getOuterBBox();t.combine(a,0,o),t.combine(l,t.w-i/2,0),t.combine(s,t.w-i/2,n)},e.prototype.getBevelData=function(t){var e=this.childNodes[0].getOuterBBox(),r=this.childNodes[1].getOuterBBox(),o=t?.4:.15,n=Math.max(e.scale*(e.h+e.d),r.scale*(r.h+r.d))+2*o,i=this.font.params.axis_height;return{H:n,delta:o,u:e.scale*(e.d-e.h)/2+i+o,v:r.scale*(r.d-r.h)/2+i-o,nbox:e,dbox:r}},e.prototype.canStretch=function(t){return!1},e.prototype.isDisplay=function(){var t=this.node.attributes.getList(\"displaystyle\",\"scriptlevel\"),e=t.displaystyle,r=t.scriptlevel;return e&&0===r},e.prototype.getWrapWidth=function(t){var e=this.node.attributes;return e.get(\"bevelled\")?this.childNodes[t].getOuterBBox().w:this.getBBox().w-(this.length2em(e.get(\"linethickness\"))?.2:0)-2*this.pad},e.prototype.getChildAlign=function(t){var e=this.node.attributes;return e.get(\"bevelled\")?\"left\":e.get([\"numalign\",\"denomalign\"][t])},e}(t)}},7969:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMglyphMixin=void 0,e.CommonMglyphMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;return o.getParameters(),o}return o(e,t),e.prototype.getParameters=function(){var t=this.node.attributes.getList(\"width\",\"height\",\"valign\",\"src\",\"index\"),e=t.width,r=t.height,o=t.valign,n=t.src,i=t.index;if(n)this.width=\"auto\"===e?1:this.length2em(e),this.height=\"auto\"===r?1:this.length2em(r),this.valign=this.length2em(o||\"0\");else{var a=String.fromCodePoint(parseInt(i)),s=this.node.factory;this.charWrapper=this.wrap(s.create(\"text\").setText(a)),this.charWrapper.parent=this}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),this.charWrapper?t.updateFrom(this.charWrapper.getBBox()):(t.w=this.width,t.h=this.height+this.valign,t.d=-this.valign)},e}(t)}},1419:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMiMixin=void 0,e.CommonMiMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.computeBBox=function(e,r){void 0===r&&(r=!1),t.prototype.computeBBox.call(this,e),this.copySkewIC(e)},e}(t)}},9906:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMmultiscriptsMixin=e.ScriptNames=e.NextScript=void 0;var l=r(3717);e.NextScript={base:\"subList\",subList:\"supList\",supList:\"subList\",psubList:\"psupList\",psupList:\"psubList\"},e.ScriptNames=[\"sup\",\"sup\",\"psup\",\"psub\"],e.CommonMmultiscriptsMixin=function(t){return function(t){function r(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,a([],i(e),!1))||this;return o.scriptData=null,o.firstPrescript=0,o.getScriptData(),o}return n(r,t),r.prototype.combinePrePost=function(t,e){var r=new l.BBox(t);return r.combine(e,0,0),r},r.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.font.params.scriptspace,o=this.scriptData,n=this.combinePrePost(o.sub,o.psub),a=this.combinePrePost(o.sup,o.psup),s=i(this.getUVQ(n,a),2),l=s[0],c=s[1];if(t.empty(),o.numPrescripts&&(t.combine(o.psup,r,l),t.combine(o.psub,r,c)),t.append(o.base),o.numScripts){var h=t.w;t.combine(o.sup,h,l),t.combine(o.sub,h,c),t.w+=r}t.clean(),this.setChildPWidths(e)},r.prototype.getScriptData=function(){var t=this.scriptData={base:null,sub:l.BBox.empty(),sup:l.BBox.empty(),psub:l.BBox.empty(),psup:l.BBox.empty(),numPrescripts:0,numScripts:0},e=this.getScriptBBoxLists();this.combineBBoxLists(t.sub,t.sup,e.subList,e.supList),this.combineBBoxLists(t.psub,t.psup,e.psubList,e.psupList),t.base=e.base[0],t.numPrescripts=e.psubList.length,t.numScripts=e.subList.length},r.prototype.getScriptBBoxLists=function(){var t,r,o={base:[],subList:[],supList:[],psubList:[],psupList:[]},n=\"base\";try{for(var i=s(this.childNodes),a=i.next();!a.done;a=i.next()){var l=a.value;l.node.isKind(\"mprescripts\")?n=\"psubList\":(o[n].push(l.getOuterBBox()),n=e.NextScript[n])}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return this.firstPrescript=o.subList.length+o.supList.length+2,this.padLists(o.subList,o.supList),this.padLists(o.psubList,o.psupList),o},r.prototype.padLists=function(t,e){t.length>e.length&&e.push(l.BBox.empty())},r.prototype.combineBBoxLists=function(t,e,r,o){for(var n=0;n<r.length;n++){var a=i(this.getScaledWHD(r[n]),3),s=a[0],l=a[1],c=a[2],h=i(this.getScaledWHD(o[n]),3),u=h[0],p=h[1],d=h[2],f=Math.max(s,u);t.w+=f,e.w+=f,l>t.h&&(t.h=l),c>t.d&&(t.d=c),p>e.h&&(e.h=p),d>e.d&&(e.d=d)}},r.prototype.getScaledWHD=function(t){var e=t.w,r=t.h,o=t.d,n=t.rscale;return[e*n,r*n,o*n]},r.prototype.getUVQ=function(e,r){var o;if(!this.UVQ){var n=i([0,0,0],3),a=n[0],s=n[1],l=n[2];0===e.h&&0===e.d?a=this.getU():0===r.h&&0===r.d?a=-this.getV():(a=(o=i(t.prototype.getUVQ.call(this,e,r),3))[0],s=o[1],l=o[2]),this.UVQ=[a,s,l]}return this.UVQ},r}(t)}},2304:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMnMixin=void 0,e.CommonMnMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.remapChars=function(t){if(t.length){var e=this.font.getRemappedChar(\"mn\",t[0]);if(e){var r=this.unicodeChars(e,this.variant);1===r.length?t[0]=r[0]:t=r.concat(t.slice(1))}}return t},e}(t)}},437:function(t,e,r){var o,n,i=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__assign||function(){return a=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},a.apply(this,arguments)},s=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},l=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},c=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMoMixin=e.DirectionVH=void 0;var h=r(3717),u=r(6720),p=r(9250);e.DirectionVH=((n={})[1]=\"v\",n[2]=\"h\",n),e.CommonMoMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,l([],s(e),!1))||this;return o.size=null,o.isAccent=o.node.isAccent,o}return i(e,t),e.prototype.computeBBox=function(t,e){if(void 0===e&&(e=!1),this.protoBBox(t),this.node.attributes.get(\"symmetric\")&&2!==this.stretch.dir){var r=this.getCenterOffset(t);t.h+=r,t.d-=r}this.node.getProperty(\"mathaccent\")&&(0===this.stretch.dir||this.size>=0)&&(t.w=0)},e.prototype.protoBBox=function(e){var r=0!==this.stretch.dir;r&&null===this.size&&this.getStretchedVariant([0]),r&&this.size<0||(t.prototype.computeBBox.call(this,e),this.copySkewIC(e))},e.prototype.getAccentOffset=function(){var t=h.BBox.empty();return this.protoBBox(t),-t.w/2},e.prototype.getCenterOffset=function(e){return void 0===e&&(e=null),e||(e=h.BBox.empty(),t.prototype.computeBBox.call(this,e)),(e.h+e.d)/2+this.font.params.axis_height-e.h},e.prototype.getVariant=function(){this.node.attributes.get(\"largeop\")?this.variant=this.node.attributes.get(\"displaystyle\")?\"-largeop\":\"-smallop\":this.node.attributes.getExplicit(\"mathvariant\")||!1!==this.node.getProperty(\"pseudoscript\")?t.prototype.getVariant.call(this):this.variant=\"-tex-variant\"},e.prototype.canStretch=function(t){if(0!==this.stretch.dir)return this.stretch.dir===t;if(!this.node.attributes.get(\"stretchy\"))return!1;var e=this.getText();if(1!==Array.from(e).length)return!1;var r=this.font.getDelimiter(e.codePointAt(0));return this.stretch=r&&r.dir===t?r:p.NOSTRETCH,0!==this.stretch.dir},e.prototype.getStretchedVariant=function(t,e){var r,o;if(void 0===e&&(e=!1),0!==this.stretch.dir){var n=this.getWH(t),i=this.getSize(\"minsize\",0),s=this.getSize(\"maxsize\",1/0),l=this.node.getProperty(\"mathaccent\");n=Math.max(i,Math.min(s,n));var h=this.font.params.delimiterfactor/1e3,u=this.font.params.delimitershortfall,p=i||e?n:l?Math.min(n/h,n+u):Math.max(n*h,n-u),d=this.stretch,f=d.c||this.getText().codePointAt(0),y=0;if(d.sizes)try{for(var m=c(d.sizes),v=m.next();!v.done;v=m.next()){if(v.value>=p)return l&&y&&y--,this.variant=this.font.getSizeVariant(f,y),this.size=y,void(d.schar&&d.schar[y]&&(this.stretch=a(a({},this.stretch),{c:d.schar[y]})));y++}}catch(t){r={error:t}}finally{try{v&&!v.done&&(o=m.return)&&o.call(m)}finally{if(r)throw r.error}}d.stretch?(this.size=-1,this.invalidateBBox(),this.getStretchBBox(t,this.checkExtendedHeight(n,d),d)):(this.variant=this.font.getSizeVariant(f,y-1),this.size=y-1)}},e.prototype.getSize=function(t,e){var r=this.node.attributes;return r.isSet(t)&&(e=this.length2em(r.get(t),1,1)),e},e.prototype.getWH=function(t){if(0===t.length)return 0;if(1===t.length)return t[0];var e=s(t,2),r=e[0],o=e[1],n=this.font.params.axis_height;return this.node.attributes.get(\"symmetric\")?2*Math.max(r-n,o+n):r+o},e.prototype.getStretchBBox=function(t,e,r){var o;r.hasOwnProperty(\"min\")&&r.min>e&&(e=r.min);var n=s(r.HDW,3),i=n[0],a=n[1],l=n[2];1===this.stretch.dir?(i=(o=s(this.getBaseline(t,e,r),2))[0],a=o[1]):l=e,this.bbox.h=i,this.bbox.d=a,this.bbox.w=l},e.prototype.getBaseline=function(t,e,r){var o=2===t.length&&t[0]+t[1]===e,n=this.node.attributes.get(\"symmetric\"),i=s(o?t:[e,0],2),a=i[0],l=i[1],c=s([a+l,0],2),h=c[0],u=c[1];if(n){var p=this.font.params.axis_height;o&&(h=2*Math.max(a-p,l+p)),u=h/2-p}else if(o)u=l;else{var d=s(r.HDW||[.75,.25],2),f=d[0],y=d[1];u=y*(h/(f+y))}return[h-u,u]},e.prototype.checkExtendedHeight=function(t,e){if(e.fullExt){var r=s(e.fullExt,2),o=r[0],n=r[1];t=n+Math.ceil(Math.max(0,t-n)/o)*o}return t},e.prototype.remapChars=function(t){var e=this.node.getProperty(\"primes\");if(e)return(0,u.unicodeChars)(e);if(1===t.length){var r=this.node.coreParent().parent,o=this.isAccent&&!r.isKind(\"mrow\")?\"accent\":\"mo\",n=this.font.getRemappedChar(o,t[0]);n&&(t=this.unicodeChars(n,this.variant))}return t},e}(t)}},7481:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMpaddedMixin=void 0,e.CommonMpaddedMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.getDimens=function(){var t=this.node.attributes.getList(\"width\",\"height\",\"depth\",\"lspace\",\"voffset\"),e=this.childNodes[0].getBBox(),r=e.w,o=e.h,n=e.d,i=r,a=o,s=n,l=0,c=0,h=0;\"\"!==t.width&&(r=this.dimen(t.width,e,\"w\",0)),\"\"!==t.height&&(o=this.dimen(t.height,e,\"h\",0)),\"\"!==t.depth&&(n=this.dimen(t.depth,e,\"d\",0)),\"\"!==t.voffset&&(c=this.dimen(t.voffset,e)),\"\"!==t.lspace&&(l=this.dimen(t.lspace,e));var u=this.node.attributes.get(\"data-align\");return u&&(h=this.getAlignX(r,e,u)),[a,s,i,o-a,n-s,r-i,l,c,h]},e.prototype.dimen=function(t,e,r,o){void 0===r&&(r=\"\"),void 0===o&&(o=null);var n=(t=String(t)).match(/width|height|depth/),i=n?e[n[0].charAt(0)]:r?e[r]:0,a=this.length2em(t,i)||0;return t.match(/^[-+]/)&&r&&(a+=i),null!=o&&(a=Math.max(o,a)),a},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=n(this.getDimens(),6),o=r[0],i=r[1],a=r[2],s=r[3],l=r[4],c=r[5];t.w=a+c,t.h=o+s,t.d=i+l,this.setChildPWidths(e,t.w)},e.prototype.getWrapWidth=function(t){return this.getBBox().w},e.prototype.getChildAlign=function(t){return this.node.attributes.get(\"data-align\")||\"left\"},e}(t)}},5997:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMrootMixin=void 0,e.CommonMrootMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"surd\",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"root\",{get:function(){return 1},enumerable:!1,configurable:!0}),e.prototype.combineRootBBox=function(t,e,r){var o=this.childNodes[this.root].getOuterBBox(),n=this.getRootDimens(e,r)[1];t.combine(o,0,n)},e.prototype.getRootDimens=function(t,e){var r=this.childNodes[this.surd],o=this.childNodes[this.root].getOuterBBox(),n=(r.size<0?.5:.6)*t.w,i=o.w,a=o.rscale,s=Math.max(i,n/a),l=Math.max(0,s-i);return[s*a-n,this.rootHeight(o,t,r.size,e),l]},e.prototype.rootHeight=function(t,e,r,o){var n=e.h+e.d;return(r<0?1.9:.55*n)-(n-o)+Math.max(0,t.d*t.rscale)},e}(t)}},9323:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonInferredMrowMixin=e.CommonMrowMixin=void 0;var l=r(3717);e.CommonMrowMixin=function(t){return function(t){function e(){for(var e,r,o=[],n=0;n<arguments.length;n++)o[n]=arguments[n];var c=t.apply(this,a([],i(o),!1))||this;c.stretchChildren();try{for(var h=s(c.childNodes),u=h.next();!u.done;u=h.next()){var p=u.value;if(p.bbox.pwidth){c.bbox.pwidth=l.BBox.fullWidth;break}}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=h.return)&&r.call(h)}finally{if(e)throw e.error}}return c}return n(e,t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.stretchChildren=function(){var t,e,r,o,n,i,a=[];try{for(var l=s(this.childNodes),c=l.next();!c.done;c=l.next()){(S=c.value).canStretch(1)&&a.push(S)}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}var h=a.length,u=this.childNodes.length;if(h&&u>1){var p=0,d=0,f=h>1&&h===u;try{for(var y=s(this.childNodes),m=y.next();!m.done;m=y.next()){var v=0===(S=m.value).stretch.dir;if(f||v){var g=S.getOuterBBox(v),b=g.h,x=g.d,_=g.rscale;(b*=_)>p&&(p=b),(x*=_)>d&&(d=x)}}}catch(t){r={error:t}}finally{try{m&&!m.done&&(o=y.return)&&o.call(y)}finally{if(r)throw r.error}}try{for(var M=s(a),w=M.next();!w.done;w=M.next()){var S;(S=w.value).coreMO().getStretchedVariant([p,d])}}catch(t){n={error:t}}finally{try{w&&!w.done&&(i=M.return)&&i.call(M)}finally{if(n)throw n.error}}}},e}(t)},e.CommonInferredMrowMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getScale=function(){this.bbox.scale=this.parent.bbox.scale,this.bbox.rscale=1},e}(t)}},6920:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsMixin=void 0,e.CommonMsMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this,a=o.node.attributes,s=a.getList(\"lquote\",\"rquote\");return\"monospace\"!==o.variant&&(a.isSet(\"lquote\")||'\"'!==s.lquote||(s.lquote=\"\\u201c\"),a.isSet(\"rquote\")||'\"'!==s.rquote||(s.rquote=\"\\u201d\")),o.childNodes.unshift(o.createText(s.lquote)),o.childNodes.push(o.createText(s.rquote)),o}return o(e,t),e.prototype.createText=function(t){var e=this.wrap(this.mmlText(t));return e.parent=this,e},e}(t)}},37:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMspaceMixin=void 0,e.CommonMspaceMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.node.attributes;t.w=this.length2em(r.get(\"width\"),0),t.h=this.length2em(r.get(\"height\"),0),t.d=this.length2em(r.get(\"depth\"),0)},e.prototype.handleVariant=function(){},e}(t)}},222:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsqrtMixin=void 0;var s=r(3717);e.CommonMsqrtMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,a([],i(e),!1))||this,n=o.createMo(\"\\u221a\");n.canStretch(1);var s=o.childNodes[o.base].getOuterBBox(),l=s.h,c=s.d,h=o.font.params.rule_thickness,u=o.node.attributes.get(\"displaystyle\")?o.font.params.x_height:h;return o.surdH=l+c+2*h+u/4,n.getStretchedVariant([o.surdH-c,c],!0),o}return n(e,t),Object.defineProperty(e.prototype,\"base\",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"surd\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"root\",{get:function(){return null},enumerable:!1,configurable:!0}),e.prototype.createMo=function(e){var r=t.prototype.createMo.call(this,e);return this.childNodes.push(r),r},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.childNodes[this.surd].getBBox(),o=new s.BBox(this.childNodes[this.base].getOuterBBox()),n=this.getPQ(r)[1],a=this.font.params.rule_thickness,l=o.h+n+a,c=i(this.getRootDimens(r,l),1)[0];t.h=l+a,this.combineRootBBox(t,r,l),t.combine(r,c,l-r.h),t.combine(o,c+r.w,0),t.clean(),this.setChildPWidths(e)},e.prototype.combineRootBBox=function(t,e,r){},e.prototype.getPQ=function(t){var e=this.font.params.rule_thickness,r=this.node.attributes.get(\"displaystyle\")?this.font.params.x_height:e;return[r,t.h+t.d>this.surdH?(t.h+t.d-(this.surdH-2*e-r/2))/2:e+r/4]},e.prototype.getRootDimens=function(t,e){return[0,0,0,0]},e}(t)}},3069:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsubsupMixin=e.CommonMsupMixin=e.CommonMsubMixin=void 0,e.CommonMsubMixin=function(t){var e;return e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"scriptChild\",{get:function(){return this.childNodes[this.node.sub]},enumerable:!1,configurable:!0}),e.prototype.getOffset=function(){return[0,-this.getV()]},e}(t),e.useIC=!1,e},e.CommonMsupMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"scriptChild\",{get:function(){return this.childNodes[this.node.sup]},enumerable:!1,configurable:!0}),e.prototype.getOffset=function(){return[this.getAdjustedIc()-(this.baseRemoveIc?0:this.baseIc),this.getU()]},e}(t)},e.CommonMsubsupMixin=function(t){var e;return e=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.UVQ=null,e}return o(e,t),Object.defineProperty(e.prototype,\"subChild\",{get:function(){return this.childNodes[this.node.sub]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"supChild\",{get:function(){return this.childNodes[this.node.sup]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.baseChild.getOuterBBox(),o=n([this.subChild.getOuterBBox(),this.supChild.getOuterBBox()],2),i=o[0],a=o[1];t.empty(),t.append(r);var s=this.getBaseWidth(),l=this.getAdjustedIc(),c=n(this.getUVQ(),2),h=c[0],u=c[1];t.combine(i,s,u),t.combine(a,s+l,h),t.w+=this.font.params.scriptspace,t.clean(),this.setChildPWidths(e)},e.prototype.getUVQ=function(t,e){void 0===t&&(t=this.subChild.getOuterBBox()),void 0===e&&(e=this.supChild.getOuterBBox());var r=this.baseCore.getOuterBBox();if(this.UVQ)return this.UVQ;var o=this.font.params,i=3*o.rule_thickness,a=this.length2em(this.node.attributes.get(\"subscriptshift\"),o.sub2),s=this.baseCharZero(r.d*this.baseScale+o.sub_drop*t.rscale),l=n([this.getU(),Math.max(s,a)],2),c=l[0],h=l[1],u=c-e.d*e.rscale-(t.h*t.rscale-h);if(u<i){h+=i-u;var p=.8*o.x_height-(c-e.d*e.rscale);p>0&&(c+=p,h-=p)}return c=Math.max(this.length2em(this.node.attributes.get(\"superscriptshift\"),c),c),h=Math.max(this.length2em(this.node.attributes.get(\"subscriptshift\"),h),h),u=c-e.d*e.rscale-(t.h*t.rscale-h),this.UVQ=[c,-h,u],this.UVQ},e}(t),e.useIC=!1,e}},8589:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtableMixin=void 0;var l=r(3717),c=r(6720),h=r(1490);e.CommonMtableMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,a([],i(e),!1))||this;o.numCols=0,o.numRows=0,o.data=null,o.pwidthCells=[],o.pWidth=0,o.numCols=(0,h.max)(o.tableRows.map((function(t){return t.numCells}))),o.numRows=o.childNodes.length,o.hasLabels=o.childNodes.reduce((function(t,e){return t||e.node.isKind(\"mlabeledtr\")}),!1),o.findContainer(),o.isTop=!o.container||o.container.node.isKind(\"math\")&&!o.container.parent,o.isTop&&(o.jax.table=o),o.getPercentageWidth();var n=o.node.attributes;return o.frame=\"none\"!==n.get(\"frame\"),o.fLine=o.frame&&n.get(\"frame\")?.07:0,o.fSpace=o.frame?o.convertLengths(o.getAttributeArray(\"framespacing\")):[0,0],o.cSpace=o.convertLengths(o.getColumnAttributes(\"columnspacing\")),o.rSpace=o.convertLengths(o.getRowAttributes(\"rowspacing\")),o.cLines=o.getColumnAttributes(\"columnlines\").map((function(t){return\"none\"===t?0:.07})),o.rLines=o.getRowAttributes(\"rowlines\").map((function(t){return\"none\"===t?0:.07})),o.cWidths=o.getColumnWidths(),o.stretchRows(),o.stretchColumns(),o}return n(e,t),Object.defineProperty(e.prototype,\"tableRows\",{get:function(){return this.childNodes},enumerable:!1,configurable:!0}),e.prototype.findContainer=function(){for(var t=this,e=t.parent;e&&(e.node.notParent||e.node.isKind(\"mrow\"));)t=e,e=e.parent;this.container=e,this.containerI=t.node.childPosition()},e.prototype.getPercentageWidth=function(){if(this.hasLabels)this.bbox.pwidth=l.BBox.fullWidth;else{var t=this.node.attributes.get(\"width\");(0,c.isPercent)(t)&&(this.bbox.pwidth=t)}},e.prototype.stretchRows=function(){for(var t=this.node.attributes.get(\"equalrows\"),e=t?this.getEqualRowHeight():0,r=t?this.getTableData():{H:[0],D:[0]},o=r.H,n=r.D,i=this.tableRows,a=0;a<this.numRows;a++){var s=t?[(e+o[a]-n[a])/2,(e-o[a]+n[a])/2]:null;i[a].stretchChildren(s)}},e.prototype.stretchColumns=function(){for(var t=0;t<this.numCols;t++){var e=\"number\"==typeof this.cWidths[t]?this.cWidths[t]:null;this.stretchColumn(t,e)}},e.prototype.stretchColumn=function(t,e){var r,o,n,i,a,l,c=[];try{for(var h=s(this.tableRows),u=h.next();!u.done;u=h.next()){if(v=u.value.getChild(t))0===(M=v.childNodes[0]).stretch.dir&&M.canStretch(2)&&c.push(M)}}catch(t){r={error:t}}finally{try{u&&!u.done&&(o=h.return)&&o.call(h)}finally{if(r)throw r.error}}var p=c.length,d=this.childNodes.length;if(p&&d>1){if(null===e){e=0;var f=p>1&&p===d;try{for(var y=s(this.tableRows),m=y.next();!m.done;m=y.next()){var v;if(v=m.value.getChild(t)){var g=0===(M=v.childNodes[0]).stretch.dir;if(f||g){var b=M.getBBox(g).w;b>e&&(e=b)}}}}catch(t){n={error:t}}finally{try{m&&!m.done&&(i=y.return)&&i.call(y)}finally{if(n)throw n.error}}}try{for(var x=s(c),_=x.next();!_.done;_=x.next()){var M;(M=_.value).coreMO().getStretchedVariant([e])}}catch(t){a={error:t}}finally{try{_&&!_.done&&(l=x.return)&&l.call(x)}finally{if(a)throw a.error}}}},e.prototype.getTableData=function(){if(this.data)return this.data;for(var t=new Array(this.numRows).fill(0),e=new Array(this.numRows).fill(0),r=new Array(this.numCols).fill(0),o=new Array(this.numRows),n=new Array(this.numRows),i=[0],a=this.tableRows,s=0;s<a.length;s++){for(var l=0,c=a[s],h=c.node.attributes.get(\"rowalign\"),u=0;u<c.numCells;u++){var p=c.getChild(u);l=this.updateHDW(p,u,s,h,t,e,r,l),this.recordPWidthCell(p,u)}o[s]=t[s],n[s]=e[s],c.labeled&&(l=this.updateHDW(c.childNodes[0],0,s,h,t,e,i,l)),this.extendHD(s,t,e,l),this.extendHD(s,o,n,l)}var d=i[0];return this.data={H:t,D:e,W:r,NH:o,ND:n,L:d},this.data},e.prototype.updateHDW=function(t,e,r,o,n,i,a,s){var l=t.getBBox(),c=l.h,h=l.d,u=l.w,p=t.parent.bbox.rscale;1!==t.parent.bbox.rscale&&(c*=p,h*=p,u*=p),this.node.getProperty(\"useHeight\")&&(c<.75&&(c=.75),h<.25&&(h=.25));var d=0;return\"baseline\"!==(o=t.node.attributes.get(\"rowalign\")||o)&&\"axis\"!==o&&(d=c+h,c=h=0),c>n[r]&&(n[r]=c),h>i[r]&&(i[r]=h),d>s&&(s=d),a&&u>a[e]&&(a[e]=u),s},e.prototype.extendHD=function(t,e,r,o){var n=(o-(e[t]+r[t]))/2;n<1e-5||(e[t]+=n,r[t]+=n)},e.prototype.recordPWidthCell=function(t,e){t.childNodes[0]&&t.childNodes[0].getBBox().pwidth&&this.pwidthCells.push([t,e])},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r,o,n=this.getTableData(),a=n.H,s=n.D;if(this.node.attributes.get(\"equalrows\")){var l=this.getEqualRowHeight();r=(0,h.sum)([].concat(this.rLines,this.rSpace))+l*this.numRows}else r=(0,h.sum)(a.concat(s,this.rLines,this.rSpace));r+=2*(this.fLine+this.fSpace[1]);var u=this.getComputedWidths();o=(0,h.sum)(u.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]);var p=this.node.attributes.get(\"width\");\"auto\"!==p&&(o=Math.max(this.length2em(p,0)+2*this.fLine,o));var d=i(this.getBBoxHD(r),2),f=d[0],y=d[1];t.h=f,t.d=y,t.w=o;var m=i(this.getBBoxLR(),2),v=m[0],g=m[1];t.L=v,t.R=g,(0,c.isPercent)(p)||this.setColumnPWidths()},e.prototype.setChildPWidths=function(t,e,r){var o=this.node.attributes.get(\"width\");if(!(0,c.isPercent)(o))return!1;this.hasLabels||(this.bbox.pwidth=\"\",this.container.bbox.pwidth=\"\");var n=this.bbox,i=n.w,a=n.L,s=n.R,l=this.node.attributes.get(\"data-width-includes-label\"),u=Math.max(i,this.length2em(o,Math.max(e,a+i+s)))-(l?a+s:0),p=this.node.attributes.get(\"equalcolumns\")?Array(this.numCols).fill(this.percent(1/Math.max(1,this.numCols))):this.getColumnAttributes(\"columnwidth\",0);this.cWidths=this.getColumnWidthsFixed(p,u);var d=this.getComputedWidths();return this.pWidth=(0,h.sum)(d.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]),this.isTop&&(this.bbox.w=this.pWidth),this.setColumnPWidths(),this.pWidth!==i&&this.parent.invalidateBBox(),this.pWidth!==i},e.prototype.setColumnPWidths=function(){var t,e,r=this.cWidths;try{for(var o=s(this.pwidthCells),n=o.next();!n.done;n=o.next()){var a=i(n.value,2),l=a[0],c=a[1];l.setChildPWidths(!1,r[c])&&(l.invalidateBBox(),l.getBBox())}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}},e.prototype.getBBoxHD=function(t){var e=i(this.getAlignmentRow(),2),r=e[0],o=e[1];if(null===o){var n=this.font.params.axis_height,a=t/2;return{top:[0,t],center:[a,a],bottom:[t,0],baseline:[a,a],axis:[a+n,a-n]}[r]||[a,a]}var s=this.getVerticalPosition(o,r);return[s,t-s]},e.prototype.getBBoxLR=function(){if(this.hasLabels){var t=this.node.attributes,e=t.get(\"side\"),r=i(this.getPadAlignShift(e),2),o=r[0],n=r[1],a=this.hasLabels&&!!t.get(\"data-width-includes-label\");return a&&this.frame&&this.fSpace[0]&&(o-=this.fSpace[0]),\"center\"!==n||a?\"left\"===e?[o,0]:[0,o]:[o,o]}return[0,0]},e.prototype.getPadAlignShift=function(t){var e=this.getTableData().L+this.length2em(this.node.attributes.get(\"minlabelspacing\")),r=i(null==this.styles?[\"\",\"\"]:[this.styles.get(\"padding-left\"),this.styles.get(\"padding-right\")],2),o=r[0],n=r[1];(o||n)&&(e=Math.max(e,this.length2em(o||\"0\"),this.length2em(n||\"0\")));var a=i(this.getAlignShift(),2),s=a[0],l=a[1];return s===t&&(l=\"left\"===t?Math.max(e,l)-e:Math.min(-e,l)+e),[e,s,l]},e.prototype.getAlignShift=function(){return this.isTop?t.prototype.getAlignShift.call(this):[this.container.getChildAlign(this.containerI),0]},e.prototype.getWidth=function(){return this.pWidth||this.getBBox().w},e.prototype.getEqualRowHeight=function(){var t=this.getTableData(),e=t.H,r=t.D,o=Array.from(e.keys()).map((function(t){return e[t]+r[t]}));return Math.max.apply(Math,o)},e.prototype.getComputedWidths=function(){var t=this,e=this.getTableData().W,r=Array.from(e.keys()).map((function(r){return\"number\"==typeof t.cWidths[r]?t.cWidths[r]:e[r]}));return this.node.attributes.get(\"equalcolumns\")&&(r=Array(r.length).fill((0,h.max)(r))),r},e.prototype.getColumnWidths=function(){var t=this.node.attributes.get(\"width\");if(this.node.attributes.get(\"equalcolumns\"))return this.getEqualColumns(t);var e=this.getColumnAttributes(\"columnwidth\",0);return\"auto\"===t?this.getColumnWidthsAuto(e):(0,c.isPercent)(t)?this.getColumnWidthsPercent(e):this.getColumnWidthsFixed(e,this.length2em(t))},e.prototype.getEqualColumns=function(t){var e,r=Math.max(1,this.numCols);if(\"auto\"===t){var o=this.getTableData().W;e=(0,h.max)(o)}else if((0,c.isPercent)(t))e=this.percent(1/r);else{var n=(0,h.sum)([].concat(this.cLines,this.cSpace))+2*this.fSpace[0];e=Math.max(0,this.length2em(t)-n)/r}return Array(this.numCols).fill(e)},e.prototype.getColumnWidthsAuto=function(t){var e=this;return t.map((function(t){return\"auto\"===t||\"fit\"===t?null:(0,c.isPercent)(t)?t:e.length2em(t)}))},e.prototype.getColumnWidthsPercent=function(t){var e=this,r=t.indexOf(\"fit\")>=0,o=(r?this.getTableData():{W:null}).W;return Array.from(t.keys()).map((function(n){var i=t[n];return\"fit\"===i?null:\"auto\"===i?r?o[n]:null:(0,c.isPercent)(i)?i:e.length2em(i)}))},e.prototype.getColumnWidthsFixed=function(t,e){var r=this,o=Array.from(t.keys()),n=o.filter((function(e){return\"fit\"===t[e]})),i=o.filter((function(e){return\"auto\"===t[e]})),a=n.length||i.length,s=(a?this.getTableData():{W:null}).W,l=e-(0,h.sum)([].concat(this.cLines,this.cSpace))-2*this.fSpace[0],c=l;o.forEach((function(e){var o=t[e];c-=\"fit\"===o||\"auto\"===o?s[e]:r.length2em(o,l)}));var u=a&&c>0?c/a:0;return o.map((function(e){var o=t[e];return\"fit\"===o?s[e]+u:\"auto\"===o?s[e]+(0===n.length?u:0):r.length2em(o,l)}))},e.prototype.getVerticalPosition=function(t,e){for(var r=this.node.attributes.get(\"equalrows\"),o=this.getTableData(),n=o.H,a=o.D,s=r?this.getEqualRowHeight():0,l=this.getRowHalfSpacing(),c=this.fLine,h=0;h<t;h++)c+=l[h]+(r?s:n[h]+a[h])+l[h+1]+this.rLines[h];var u=i(r?[(s+n[t]-a[t])/2,(s-n[t]+a[t])/2]:[n[t],a[t]],2),p=u[0],d=u[1];return c+={top:0,center:l[t]+(p+d)/2,bottom:l[t]+p+d+l[t+1],baseline:l[t]+p,axis:l[t]+p-.25}[e]||0},e.prototype.getEmHalfSpacing=function(t,e,r){void 0===r&&(r=1);var o=this.em(t*r),n=this.addEm(e,2/r);return n.unshift(o),n.push(o),n},e.prototype.getRowHalfSpacing=function(){var t=this.rSpace.map((function(t){return t/2}));return t.unshift(this.fSpace[1]),t.push(this.fSpace[1]),t},e.prototype.getColumnHalfSpacing=function(){var t=this.cSpace.map((function(t){return t/2}));return t.unshift(this.fSpace[0]),t.push(this.fSpace[0]),t},e.prototype.getAlignmentRow=function(){var t=i((0,c.split)(this.node.attributes.get(\"align\")),2),e=t[0],r=t[1];if(null==r)return[e,null];var o=parseInt(r);return o<0&&(o+=this.numRows+1),[e,o<1||o>this.numRows?null:o-1]},e.prototype.getColumnAttributes=function(t,e){void 0===e&&(e=1);var r=this.numCols-e,o=this.getAttributeArray(t);if(0===o.length)return null;for(;o.length<r;)o.push(o[o.length-1]);return o.length>r&&o.splice(r),o},e.prototype.getRowAttributes=function(t,e){void 0===e&&(e=1);var r=this.numRows-e,o=this.getAttributeArray(t);if(0===o.length)return null;for(;o.length<r;)o.push(o[o.length-1]);return o.length>r&&o.splice(r),o},e.prototype.getAttributeArray=function(t){var e=this.node.attributes.get(t);return e?(0,c.split)(e):[this.node.attributes.getDefault(t)]},e.prototype.addEm=function(t,e){var r=this;return void 0===e&&(e=1),t?t.map((function(t){return r.em(t/e)})):null},e.prototype.convertLengths=function(t){var e=this;return t?t.map((function(t){return e.length2em(t)})):null},e}(t)}},7805:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtdMixin=void 0,e.CommonMtdMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.invalidateBBox=function(){this.bboxComputed=!1},e.prototype.getWrapWidth=function(t){var e=this.parent.parent,r=this.parent,o=this.node.childPosition()-(r.labeled?1:0);return\"number\"==typeof e.cWidths[o]?e.cWidths[o]:e.getTableData().W[o]},e.prototype.getChildAlign=function(t){return this.node.attributes.get(\"columnalign\")},e}(t)}},8325:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtextMixin=void 0,e.CommonMtextMixin=function(t){var e;return e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.getVariant=function(){var e=this.jax.options,r=this.jax.math.outputData,o=(!!r.merrorFamily||!!e.merrorFont)&&this.node.Parent.isKind(\"merror\");if(r.mtextFamily||e.mtextFont||o){var n=this.node.attributes.get(\"mathvariant\"),i=this.constructor.INHERITFONTS[n]||this.jax.font.getCssFont(n),a=i[0]||(o?r.merrorFamily||e.merrorFont:r.mtextFamily||e.mtextFont);this.variant=this.explicitVariant(a,i[2]?\"bold\":\"\",i[1]?\"italic\":\"\")}else t.prototype.getVariant.call(this)},e}(t),e.INHERITFONTS={normal:[\"\",!1,!1],bold:[\"\",!1,!0],italic:[\"\",!0,!1],\"bold-italic\":[\"\",!0,!0]},e}},4818:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMlabeledtrMixin=e.CommonMtrMixin=void 0,e.CommonMtrMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"numCells\",{get:function(){return this.childNodes.length},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"labeled\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tableCells\",{get:function(){return this.childNodes},enumerable:!1,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t]},e.prototype.getChildBBoxes=function(){return this.childNodes.map((function(t){return t.getBBox()}))},e.prototype.stretchChildren=function(t){var e,r,o,i,a,s;void 0===t&&(t=null);var l=[],c=this.labeled?this.childNodes.slice(1):this.childNodes;try{for(var h=n(c),u=h.next();!u.done;u=h.next()){(O=u.value.childNodes[0]).canStretch(1)&&l.push(O)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=h.return)&&r.call(h)}finally{if(e)throw e.error}}var p=l.length,d=this.childNodes.length;if(p&&d>1){if(null===t){var f=0,y=0,m=p>1&&p===d;try{for(var v=n(c),g=v.next();!g.done;g=v.next()){var b=0===(O=g.value.childNodes[0]).stretch.dir;if(m||b){var x=O.getBBox(b),_=x.h,M=x.d;_>f&&(f=_),M>y&&(y=M)}}}catch(t){o={error:t}}finally{try{g&&!g.done&&(i=v.return)&&i.call(v)}finally{if(o)throw o.error}}t=[f,y]}try{for(var w=n(l),S=w.next();!S.done;S=w.next()){var O;(O=S.value).coreMO().getStretchedVariant(t)}}catch(t){a={error:t}}finally{try{S&&!S.done&&(s=w.return)&&s.call(w)}finally{if(a)throw a.error}}}},e}(t)},e.CommonMlabeledtrMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,\"numCells\",{get:function(){return Math.max(0,this.childNodes.length-1)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"labeled\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tableCells\",{get:function(){return this.childNodes.slice(1)},enumerable:!1,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t+1]},e.prototype.getChildBBoxes=function(){return this.childNodes.slice(1).map((function(t){return t.getBBox()}))},e}(t)}},9690:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMunderoverMixin=e.CommonMoverMixin=e.CommonMunderMixin=void 0,e.CommonMunderMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;return o.stretchChildren(),o}return o(e,t),Object.defineProperty(e.prototype,\"scriptChild\",{get:function(){return this.childNodes[this.node.under]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(e,r){if(void 0===r&&(r=!1),this.hasMovableLimits())t.prototype.computeBBox.call(this,e,r);else{e.empty();var o=this.baseChild.getOuterBBox(),i=this.scriptChild.getOuterBBox(),a=this.getUnderKV(o,i)[1],s=this.isLineBelow?0:this.getDelta(!0),l=n(this.getDeltaW([o,i],[0,-s]),2),c=l[0],h=l[1];e.combine(o,c,0),e.combine(i,h,a),e.d+=this.font.params.big_op_spacing5,e.clean(),this.setChildPWidths(r)}},e}(t)},e.CommonMoverMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;return o.stretchChildren(),o}return o(e,t),Object.defineProperty(e.prototype,\"scriptChild\",{get:function(){return this.childNodes[this.node.over]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(e){if(this.hasMovableLimits())t.prototype.computeBBox.call(this,e);else{e.empty();var r=this.baseChild.getOuterBBox(),o=this.scriptChild.getOuterBBox();this.node.attributes.get(\"accent\")&&(r.h=Math.max(r.h,this.font.params.x_height*r.scale));var i=this.getOverKU(r,o)[1],a=this.isLineAbove?0:this.getDelta(),s=n(this.getDeltaW([r,o],[0,a]),2),l=s[0],c=s[1];e.combine(r,l,0),e.combine(o,c,i),e.h+=this.font.params.big_op_spacing5,e.clean()}},e}(t)},e.CommonMunderoverMixin=function(t){return function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,i([],n(e),!1))||this;return o.stretchChildren(),o}return o(e,t),Object.defineProperty(e.prototype,\"underChild\",{get:function(){return this.childNodes[this.node.under]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"overChild\",{get:function(){return this.childNodes[this.node.over]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"subChild\",{get:function(){return this.underChild},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"supChild\",{get:function(){return this.overChild},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(e){if(this.hasMovableLimits())t.prototype.computeBBox.call(this,e);else{e.empty();var r=this.overChild.getOuterBBox(),o=this.baseChild.getOuterBBox(),i=this.underChild.getOuterBBox();this.node.attributes.get(\"accent\")&&(o.h=Math.max(o.h,this.font.params.x_height*o.scale));var a=this.getOverKU(o,r)[1],s=this.getUnderKV(o,i)[1],l=this.getDelta(),c=n(this.getDeltaW([o,i,r],[0,this.isLineBelow?0:-l,this.isLineAbove?0:l]),3),h=c[0],u=c[1],p=c[2];e.combine(o,h,0),e.combine(r,p,a),e.combine(i,u,s);var d=this.font.params.big_op_spacing5;e.h+=d,e.d+=d,e.clean()}},e}(t)}},7091:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))},s=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonScriptbaseMixin=void 0;var l=r(8921);e.CommonScriptbaseMixin=function(t){var e;return e=function(t){function e(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var o=t.apply(this,a([],i(e),!1))||this;o.baseScale=1,o.baseIc=0,o.baseRemoveIc=!1,o.baseIsChar=!1,o.baseHasAccentOver=null,o.baseHasAccentUnder=null,o.isLineAbove=!1,o.isLineBelow=!1,o.isMathAccent=!1;var n=o.baseCore=o.getBaseCore();return n?(o.setBaseAccentsFor(n),o.baseScale=o.getBaseScale(),o.baseIc=o.getBaseIc(),o.baseIsChar=o.isCharBase(),o.isMathAccent=o.baseIsChar&&o.scriptChild&&!!o.scriptChild.coreMO().node.getProperty(\"mathaccent\"),o.checkLineAccents(),o.baseRemoveIc=!o.isLineAbove&&!o.isLineBelow&&(!o.constructor.useIC||o.isMathAccent),o):o}return n(e,t),Object.defineProperty(e.prototype,\"baseChild\",{get:function(){return this.childNodes[this.node.base]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"scriptChild\",{get:function(){return this.childNodes[1]},enumerable:!1,configurable:!0}),e.prototype.getBaseCore=function(){for(var t=this.getSemanticBase()||this.childNodes[0];t&&(1===t.childNodes.length&&(t.node.isKind(\"mrow\")||t.node.isKind(\"TeXAtom\")&&t.node.texClass!==l.TEXCLASS.VCENTER||t.node.isKind(\"mstyle\")||t.node.isKind(\"mpadded\")||t.node.isKind(\"mphantom\")||t.node.isKind(\"semantics\"))||t.node.isKind(\"munderover\")&&t.isMathAccent);)this.setBaseAccentsFor(t),t=t.childNodes[0];return t||(this.baseHasAccentOver=this.baseHasAccentUnder=!1),t||this.childNodes[0]},e.prototype.setBaseAccentsFor=function(t){t.node.isKind(\"munderover\")&&(null===this.baseHasAccentOver&&(this.baseHasAccentOver=!!t.node.attributes.get(\"accent\")),null===this.baseHasAccentUnder&&(this.baseHasAccentUnder=!!t.node.attributes.get(\"accentunder\")))},e.prototype.getSemanticBase=function(){var t=this.node.attributes.getExplicit(\"data-semantic-fencepointer\");return this.getBaseFence(this.baseChild,t)},e.prototype.getBaseFence=function(t,e){var r,o;if(!t||!t.node.attributes||!e)return null;if(t.node.attributes.getExplicit(\"data-semantic-id\")===e)return t;try{for(var n=s(t.childNodes),i=n.next();!i.done;i=n.next()){var a=i.value,l=this.getBaseFence(a,e);if(l)return l}}catch(t){r={error:t}}finally{try{i&&!i.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}return null},e.prototype.getBaseScale=function(){for(var t=this.baseCore,e=1;t&&t!==this;){e*=t.getOuterBBox().rscale,t=t.parent}return e},e.prototype.getBaseIc=function(){return this.baseCore.getOuterBBox().ic*this.baseScale},e.prototype.getAdjustedIc=function(){var t=this.baseCore.getOuterBBox();return(t.ic?1.05*t.ic+.05:0)*this.baseScale},e.prototype.isCharBase=function(){var t=this.baseCore;return(t.node.isKind(\"mo\")&&null===t.size||t.node.isKind(\"mi\")||t.node.isKind(\"mn\"))&&1===t.bbox.rscale&&1===Array.from(t.getText()).length},e.prototype.checkLineAccents=function(){if(this.node.isKind(\"munderover\"))if(this.node.isKind(\"mover\"))this.isLineAbove=this.isLineAccent(this.scriptChild);else if(this.node.isKind(\"munder\"))this.isLineBelow=this.isLineAccent(this.scriptChild);else{this.isLineAbove=this.isLineAccent(this.overChild),this.isLineBelow=this.isLineAccent(this.underChild)}},e.prototype.isLineAccent=function(t){var e=t.coreMO().node;return e.isToken&&\"\\u2015\"===e.getText()},e.prototype.getBaseWidth=function(){var t=this.baseChild.getOuterBBox();return t.w*t.rscale-(this.baseRemoveIc?this.baseIc:0)+this.font.params.extra_ic},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.getBaseWidth(),o=i(this.getOffset(),2),n=o[0],a=o[1];t.append(this.baseChild.getOuterBBox()),t.combine(this.scriptChild.getOuterBBox(),r+n,a),t.w+=this.font.params.scriptspace,t.clean(),this.setChildPWidths(e)},e.prototype.getOffset=function(){return[0,0]},e.prototype.baseCharZero=function(t){var e=!!this.baseCore.node.attributes.get(\"largeop\"),r=this.baseScale;return this.baseIsChar&&!e&&1===r?0:t},e.prototype.getV=function(){var t=this.baseCore.getOuterBBox(),e=this.scriptChild.getOuterBBox(),r=this.font.params,o=this.length2em(this.node.attributes.get(\"subscriptshift\"),r.sub1);return Math.max(this.baseCharZero(t.d*this.baseScale+r.sub_drop*e.rscale),o,e.h*e.rscale-.8*r.x_height)},e.prototype.getU=function(){var t=this.baseCore.getOuterBBox(),e=this.scriptChild.getOuterBBox(),r=this.font.params,o=this.node.attributes.getList(\"displaystyle\",\"superscriptshift\"),n=this.node.getProperty(\"texprimestyle\")?r.sup3:o.displaystyle?r.sup1:r.sup2,i=this.length2em(o.superscriptshift,n);return Math.max(this.baseCharZero(t.h*this.baseScale-r.sup_drop*e.rscale),i,e.d*e.rscale+1/4*r.x_height)},e.prototype.hasMovableLimits=function(){var t=this.node.attributes.get(\"displaystyle\"),e=this.baseChild.coreMO().node;return!t&&!!e.attributes.get(\"movablelimits\")},e.prototype.getOverKU=function(t,e){var r=this.node.attributes.get(\"accent\"),o=this.font.params,n=e.d*e.rscale,i=o.rule_thickness*o.separation_factor,a=this.baseHasAccentOver?i:0,s=this.isLineAbove?3*o.rule_thickness:i,l=(r?s:Math.max(o.big_op_spacing1,o.big_op_spacing3-Math.max(0,n)))-a;return[l,t.h*t.rscale+l+n]},e.prototype.getUnderKV=function(t,e){var r=this.node.attributes.get(\"accentunder\"),o=this.font.params,n=e.h*e.rscale,i=o.rule_thickness*o.separation_factor,a=this.baseHasAccentUnder?i:0,s=this.isLineBelow?3*o.rule_thickness:i,l=(r?s:Math.max(o.big_op_spacing2,o.big_op_spacing4-n))-a;return[l,-(t.d*t.rscale+l+n)]},e.prototype.getDeltaW=function(t,e){var r,o,n,l;void 0===e&&(e=[0,0,0]);var c=this.node.attributes.get(\"align\"),h=t.map((function(t){return t.w*t.rscale}));h[0]-=this.baseRemoveIc&&!this.baseCore.node.attributes.get(\"largeop\")?this.baseIc:0;var u=Math.max.apply(Math,a([],i(h),!1)),p=[],d=0;try{for(var f=s(h.keys()),y=f.next();!y.done;y=f.next()){var m=y.value;p[m]=(\"center\"===c?(u-h[m])/2:\"right\"===c?u-h[m]:0)+e[m],p[m]<d&&(d=-p[m])}}catch(t){r={error:t}}finally{try{y&&!y.done&&(o=f.return)&&o.call(f)}finally{if(r)throw r.error}}if(d)try{for(var v=s(p.keys()),g=v.next();!g.done;g=v.next()){m=g.value;p[m]+=d}}catch(t){n={error:t}}finally{try{g&&!g.done&&(l=v.return)&&l.call(v)}finally{if(n)throw n.error}}return[1,2].map((function(e){return p[e]+=t[e]?t[e].dx*t[0].scale:0})),p},e.prototype.getDelta=function(t){void 0===t&&(t=!1);var e=this.node.attributes.get(\"accent\"),r=this.baseCore.getOuterBBox(),o=r.sk,n=r.ic;return((e&&!t?o:0)+this.font.skewIcFactor*n)*this.baseScale},e.prototype.stretchChildren=function(){var t,e,r,o,n,i,a=[];try{for(var l=s(this.childNodes),c=l.next();!c.done;c=l.next()){(M=c.value).canStretch(2)&&a.push(M)}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}var h=a.length,u=this.childNodes.length;if(h&&u>1){var p=0,d=h>1&&h===u;try{for(var f=s(this.childNodes),y=f.next();!y.done;y=f.next()){var m=0===(M=y.value).stretch.dir;if(d||m){var v=M.getOuterBBox(m),g=v.w,b=v.rscale;g*b>p&&(p=g*b)}}}catch(t){r={error:t}}finally{try{y&&!y.done&&(o=f.return)&&o.call(f)}finally{if(r)throw r.error}}try{for(var x=s(a),_=x.next();!_.done;_=x.next()){var M;(M=_.value).coreMO().getStretchedVariant([p/M.bbox.rscale])}}catch(t){n={error:t}}finally{try{_&&!_.done&&(i=x.return)&&i.call(x)}finally{if(n)throw n.error}}}},e}(t),e.useIC=!0,e}},3191:function(t,e){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonSemanticsMixin=void 0,e.CommonSemanticsMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.computeBBox=function(t,e){if(void 0===e&&(e=!1),this.childNodes.length){var r=this.childNodes[0].getBBox(),o=r.w,n=r.h,i=r.d;t.w=o,t.h=n,t.d=i}},e}(t)}},6582:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},i.apply(this,arguments)},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVG=e.XLINKNS=e.SVGNS=void 0;var s=r(716),l=r(9416),c=r(4142),h=r(4129),u=r(6720),p=r(6914);e.SVGNS=\"http://www.w3.org/2000/svg\",e.XLINKNS=\"http://www.w3.org/1999/xlink\";var d=function(t){function r(e){void 0===e&&(e=null);var r=t.call(this,e,l.SVGWrapperFactory,c.TeXFont)||this;return r.minwidth=0,r.shift=0,r.container=null,r.svgStyles=null,r.fontCache=new h.FontCache(r),r}return n(r,t),r.prototype.initialize=function(){\"global\"===this.options.fontCache&&this.fontCache.clearCache()},r.prototype.clearFontCache=function(){this.fontCache.clearCache()},r.prototype.reset=function(){this.clearFontCache()},r.prototype.setScale=function(t){1!==this.options.scale&&this.adaptor.setStyle(t,\"fontSize\",(0,p.percent)(this.options.scale))},r.prototype.escaped=function(t,e){return this.setDocument(e),this.html(\"span\",{},[this.text(t.math)])},r.prototype.styleSheet=function(e){if(this.svgStyles)return this.svgStyles;var o=this.svgStyles=t.prototype.styleSheet.call(this,e);return this.adaptor.setAttribute(o,\"id\",r.STYLESHEETID),o},r.prototype.pageElements=function(t){return\"global\"!==this.options.fontCache||this.findCache(t)?null:this.svg(\"svg\",{id:r.FONTCACHEID,style:{display:\"none\"}},[this.fontCache.getCache()])},r.prototype.findCache=function(t){for(var e=this.adaptor,o=e.tags(e.body(t.document),\"svg\"),n=o.length-1;n>=0;n--)if(this.adaptor.getAttribute(o[n],\"id\")===r.FONTCACHEID)return!0;return!1},r.prototype.processMath=function(t,e){var r=this.container;this.container=e;var o=this.factory.wrap(t),n=a(this.createRoot(o),2),i=n[0],s=n[1];this.typesetSVG(o,i,s),this.container=r},r.prototype.createRoot=function(t){var r=t.getOuterBBox(),o=r.w,n=r.h,i=r.d,a=r.pwidth,s=t.metrics.em/1e3,l=Math.max(o,s),c=Math.max(n+i,s),h=this.svg(\"g\",{stroke:\"currentColor\",fill:\"currentColor\",\"stroke-width\":0,transform:\"scale(1,-1)\"}),u=this.adaptor,p=u.append(this.container,this.svg(\"svg\",{xmlns:e.SVGNS,width:this.ex(l),height:this.ex(c),role:\"img\",focusable:!1,style:{\"vertical-align\":this.ex(-i)},viewBox:[0,this.fixed(1e3*-n,1),this.fixed(1e3*l,1),this.fixed(1e3*c,1)].join(\" \")},[h]));if(.001===l&&(u.setAttribute(p,\"preserveAspectRatio\",\"xMidYMid slice\"),o<0&&u.setStyle(this.container,\"margin-right\",this.ex(o))),a){u.setStyle(p,\"min-width\",this.ex(l)),u.setAttribute(p,\"width\",a),u.removeAttribute(p,\"viewBox\");var d=this.fixed(t.metrics.ex/(1e3*this.font.params.x_height),6);u.setAttribute(h,\"transform\",\"scale(\".concat(d,\",-\").concat(d,\") translate(0, \").concat(this.fixed(1e3*-n,1),\")\"))}return\"none\"!==this.options.fontCache&&u.setAttribute(p,\"xmlns:xlink\",e.XLINKNS),[p,h]},r.prototype.typesetSVG=function(t,e,r){var o=this.adaptor;if(this.minwidth=this.shift=0,\"local\"===this.options.fontCache&&(this.fontCache.clearCache(),this.fontCache.useLocalID(this.options.localID),o.insert(this.fontCache.getCache(),r)),t.toSVG(r),this.fontCache.clearLocalID(),this.minwidth)o.setStyle(e,\"minWidth\",this.ex(this.minwidth)),o.setStyle(this.container,\"minWidth\",this.ex(this.minwidth));else if(this.shift){var n=o.getAttribute(this.container,\"justify\")||\"center\";this.setIndent(e,n,this.shift)}},r.prototype.setIndent=function(t,e,r){\"center\"!==e&&\"left\"!==e||this.adaptor.setStyle(t,\"margin-left\",this.ex(r)),\"center\"!==e&&\"right\"!==e||this.adaptor.setStyle(t,\"margin-right\",this.ex(-r))},r.prototype.ex=function(t){return t/=this.font.params.x_height,Math.abs(t)<.001?\"0\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"ex\"},r.prototype.svg=function(t,r,o){return void 0===r&&(r={}),void 0===o&&(o=[]),this.html(t,r,o,e.SVGNS)},r.prototype.unknownText=function(t,e){var r=this.math.metrics,o=this.font.params.x_height/r.ex*r.em*1e3,n=this.svg(\"text\",{\"data-variant\":e,transform:\"scale(1,-1)\",\"font-size\":this.fixed(o,1)+\"px\"},[this.text(t)]),i=this.adaptor;if(\"-explicitFont\"!==e){var s=(0,u.unicodeChars)(t);if(1!==s.length||s[0]<119808||s[0]>120831){var l=a(this.font.getCssFont(e),3),c=l[0],h=l[1],p=l[2];i.setAttribute(n,\"font-family\",c),h&&i.setAttribute(n,\"font-style\",\"italic\"),p&&i.setAttribute(n,\"font-weight\",\"bold\")}}return n},r.prototype.measureTextNode=function(t){var e=this.adaptor;t=e.clone(t),e.removeAttribute(t,\"transform\");var r=this.fixed(1e3*this.font.params.x_height,1),o=this.svg(\"svg\",{position:\"absolute\",visibility:\"hidden\",width:\"1ex\",height:\"1ex\",viewBox:[0,0,r,r].join(\" \")},[t]);e.append(e.body(e.document),o);var n=e.nodeSize(t,1e3,!0)[0];return e.remove(o),{w:n,h:.75,d:.2}},r.NAME=\"SVG\",r.OPTIONS=i(i({},s.CommonOutputJax.OPTIONS),{internalSpeechTitles:!0,titleID:0,fontCache:\"local\",localID:null}),r.commonStyles={'mjx-container[jax=\"SVG\"]':{direction:\"ltr\"},'mjx-container[jax=\"SVG\"] > svg':{overflow:\"visible\",\"min-height\":\"1px\",\"min-width\":\"1px\"},'mjx-container[jax=\"SVG\"] > svg a':{fill:\"blue\",stroke:\"blue\"}},r.FONTCACHEID=\"MJX-SVG-global-cache\",r.STYLESHEETID=\"MJX-SVG-styles\",r}(s.CommonOutputJax);e.SVG=d},4129:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.FontCache=void 0;var r=function(){function t(t){this.cache=new Map,this.defs=null,this.localID=\"\",this.nextID=0,this.jax=t}return t.prototype.cachePath=function(t,e,r){var o=\"MJX-\"+this.localID+(this.jax.font.getVariant(t).cacheID||\"\")+\"-\"+e;return this.cache.has(o)||(this.cache.set(o,r),this.jax.adaptor.append(this.defs,this.jax.svg(\"path\",{id:o,d:r}))),o},t.prototype.clearLocalID=function(){this.localID=\"\"},t.prototype.useLocalID=function(t){void 0===t&&(t=null),this.localID=(null==t?++this.nextID:t)+(\"\"===t?\"\":\"-\")},t.prototype.clearCache=function(){this.cache=new Map,this.defs=this.jax.svg(\"defs\")},t.prototype.getCache=function(){return this.defs},t}();e.FontCache=r},9708:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,o=arguments.length;r<o;r++)for(var n in e=arguments[r])Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t},i.apply(this,arguments)},a=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),s=this&&this.__exportStar||function(t,e){for(var r in t)\"default\"===r||Object.prototype.hasOwnProperty.call(e,r)||a(e,t,r)},l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AddPaths=e.SVGFontData=void 0;var c=r(9250);s(r(9250),e);var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.charOptions=function(e,r){return t.charOptions.call(this,e,r)},e.OPTIONS=i(i({},c.FontData.OPTIONS),{dynamicPrefix:\"./output/svg/fonts\"}),e.JAX=\"SVG\",e}(c.FontData);e.SVGFontData=h,e.AddPaths=function(t,e,r){var o,n,i,a;try{for(var s=l(Object.keys(e)),c=s.next();!c.done;c=s.next()){var u=c.value,p=parseInt(u);h.charOptions(t,p).p=e[p]}}catch(t){o={error:t}}finally{try{c&&!c.done&&(n=s.return)&&n.call(s)}finally{if(o)throw o.error}}try{for(var d=l(Object.keys(r)),f=d.next();!f.done;f=d.next()){u=f.value,p=parseInt(u);h.charOptions(t,p).c=r[p]}}catch(t){i={error:t}}finally{try{f&&!f.done&&(a=d.return)&&a.call(d)}finally{if(i)throw i.error}}return t}},9737:function(t,e,r){var o=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),n=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&o(e,t,r);return n(e,t),e},a=this&&this.__exportStar||function(t,e){for(var r in t)\"default\"===r||Object.prototype.hasOwnProperty.call(e,r)||o(e,t,r)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.Arrow=e.DiagonalArrow=e.DiagonalStrike=e.Border2=e.Border=e.RenderLine=e.lineOffset=e.lineData=e.computeLineData=void 0;var s=i(r(5373));a(r(5373),e),e.computeLineData={top:function(t,e,r,o){return[0,t-o,r,t-o]},right:function(t,e,r,o){return[r-o,-e,r-o,t]},bottom:function(t,e,r,o){return[0,o-e,r,o-e]},left:function(t,e,r,o){return[o,-e,o,t]},vertical:function(t,e,r,o){return[r/2,t,r/2,-e]},horizontal:function(t,e,r,o){return[0,(t-e)/2,r,(t-e)/2]},up:function(t,e,r,o){return[o,o-e,r-o,t-o]},down:function(t,e,r,o){return[o,t-o,r-o,o-e]}};e.lineData=function(t,r,o){void 0===o&&(o=\"\");var n=t.getBBox(),i=n.h,a=n.d,s=n.w,l=t.thickness/2;return(0,e.lineOffset)(e.computeLineData[r](i,a,s,l),t,o)};e.lineOffset=function(t,e,r){if(r){var o=e.getOffset(r);o&&(\"X\"===r?(t[0]-=o,t[2]-=o):(t[1]-=o,t[3]-=o))}return t};e.RenderLine=function(t,r){return void 0===r&&(r=\"\"),function(o,n){var i=o.line((0,e.lineData)(o,t,r));o.adaptor.append(o.element,i)}};e.Border=function(t){return s.CommonBorder((function(r,o){r.adaptor.append(r.element,r.line((0,e.lineData)(r,t)))}))(t)};e.Border2=function(t,r,o){return s.CommonBorder2((function(t,n){t.adaptor.append(t.element,t.line((0,e.lineData)(t,r))),t.adaptor.append(t.element,t.line((0,e.lineData)(t,o)))}))(t,r,o)};e.DiagonalStrike=function(t){return s.CommonDiagonalStrike((function(r){return function(r,o){r.adaptor.append(r.element,r.line((0,e.lineData)(r,t)))}}))(t)};e.DiagonalArrow=function(t){return s.CommonDiagonalArrow((function(t,e){t.adaptor.append(t.element,e)}))(t)};e.Arrow=function(t){return s.CommonArrow((function(t,e){t.adaptor.append(t.element,e)}))(t)}},9321:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGWrapper=void 0;var s=r(3717),l=r(1541),c=r(6582),h=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.element=null,e.dx=0,e}return n(e,t),e.prototype.toSVG=function(t){this.addChildren(this.standardSVGnode(t))},e.prototype.addChildren=function(t){var e,r,o=0;try{for(var n=i(this.childNodes),a=n.next();!a.done;a=n.next()){var s=a.value;s.toSVG(t);var l=s.getOuterBBox();s.element&&s.place(o+l.L*l.rscale,0),o+=(l.L+l.w+l.R)*l.rscale}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},e.prototype.standardSVGnode=function(t){var e=this.createSVGnode(t);return this.handleStyles(),this.handleScale(),this.handleBorder(),this.handleColor(),this.handleAttributes(),e},e.prototype.createSVGnode=function(t){this.element=this.svg(\"g\",{\"data-mml-node\":this.node.kind});var e=this.node.attributes.get(\"href\");if(e){t=this.adaptor.append(t,this.svg(\"a\",{href:e}));var r=this.getOuterBBox(),o=r.h,n=r.d,i=r.w;this.adaptor.append(this.element,this.svg(\"rect\",{\"data-hitbox\":!0,fill:\"none\",stroke:\"none\",\"pointer-events\":\"all\",width:this.fixed(i),height:this.fixed(o+n),y:this.fixed(-n)}))}return this.adaptor.append(t,this.element),this.element},e.prototype.handleStyles=function(){var t=this;if(this.styles){var e=this.styles.cssText;e&&this.adaptor.setAttribute(this.element,\"style\",e),s.BBox.StyleAdjust.forEach((function(e){var r=a(e,3),o=r[0];if(0===r[2]){var n=t.styles.get(o);n&&(t.dx+=t.length2em(n,1,t.bbox.rscale))}}))}},e.prototype.handleScale=function(){if(1!==this.bbox.rscale){var t=\"scale(\"+this.fixed(this.bbox.rscale/1e3,3)+\")\";this.adaptor.setAttribute(this.element,\"transform\",t)}},e.prototype.handleColor=function(){var t,e=this.adaptor,r=this.node.attributes,o=r.getExplicit(\"mathcolor\"),n=r.getExplicit(\"color\"),i=r.getExplicit(\"mathbackground\"),a=r.getExplicit(\"background\"),s=(null===(t=this.styles)||void 0===t?void 0:t.get(\"background-color\"))||\"\";if((o||n)&&(e.setAttribute(this.element,\"fill\",o||n),e.setAttribute(this.element,\"stroke\",o||n)),i||a||s){var l=this.getOuterBBox(),c=l.h,h=l.d,u=l.w,p=this.svg(\"rect\",{fill:i||a||s,x:this.fixed(-this.dx),y:this.fixed(-h),width:this.fixed(u),height:this.fixed(c+h),\"data-bgcolor\":!0}),d=e.firstChild(this.element);d?e.insert(p,d):e.append(this.element,p)}},e.prototype.handleBorder=function(){var t,r,o,n;if(this.styles){var s=Array(4).fill(0),l=Array(4),c=Array(4);try{for(var h=i([[\"Top\",0],[\"Right\",1],[\"Bottom\",2],[\"Left\",3]]),u=h.next();!u.done;u=h.next()){var p=a(u.value,2),d=p[0],f=p[1],y=\"border\"+d,m=this.styles.get(y+\"Width\");m&&(s[f]=Math.max(0,this.length2em(m,1,this.bbox.rscale)),l[f]=this.styles.get(y+\"Style\")||\"solid\",c[f]=this.styles.get(y+\"Color\")||\"currentColor\")}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=h.return)&&r.call(h)}finally{if(t)throw t.error}}var v=e.borderFuzz,g=this.getOuterBBox(),b=a([g.h+v,g.d+v,g.w+v],3),x=b[0],_=b[1],M=b[2],w=[M,x],S=[-v,x],O=[M,-_],C=[-v,-_],B=[M-s[1],x-s[0]],j=[-v+s[3],x-s[0]],P=[M-s[1],-_+s[2]],A=[-v+s[3],-_+s[2]],V=[[S,w,B,j],[O,w,B,P],[C,O,P,A],[C,S,j,A]],T=this.adaptor.firstChild(this.element);try{for(var k=i([0,1,2,3]),G=k.next();!G.done;G=k.next()){if(s[f=G.value]){var N=V[f];\"dashed\"===l[f]||\"dotted\"===l[f]?this.addBorderBroken(N,c[f],l[f],s[f],f):this.addBorderSolid(N,c[f],T)}}}catch(t){o={error:t}}finally{try{G&&!G.done&&(n=k.return)&&n.call(k)}finally{if(o)throw o.error}}}},e.prototype.addBorderSolid=function(t,e,r){var o=this,n=this.svg(\"polygon\",{points:t.map((function(t){var e=a(t,2),r=e[0],n=e[1];return\"\".concat(o.fixed(r-o.dx),\",\").concat(o.fixed(n))})).join(\" \"),stroke:\"none\",fill:e});r?this.adaptor.insert(n,r):this.adaptor.append(this.element,n)},e.prototype.addBorderBroken=function(t,e,r,o,n){var i=\"dotted\"===r,s=o/2,l=a([[s,-s,-s,-s],[-s,s,-s,-s],[s,s,-s,s],[s,s,s,-s]][n],4),c=l[0],h=l[1],u=l[2],p=l[3],d=a(t,2),f=d[0],y=d[1],m=f[0]+c-this.dx,v=f[1]+h,g=y[0]+u-this.dx,b=y[1]+p,x=Math.abs(n%2?b-v:g-m),_=i?Math.ceil(x/(2*o)):Math.ceil((x-o)/(4*o)),M=x/(4*_+1),w=this.svg(\"line\",{x1:this.fixed(m),y1:this.fixed(v),x2:this.fixed(g),y2:this.fixed(b),\"stroke-width\":this.fixed(o),stroke:e,\"stroke-linecap\":i?\"round\":\"square\",\"stroke-dasharray\":i?[1,this.fixed(x/_-.002)].join(\" \"):[this.fixed(M),this.fixed(3*M)].join(\" \")}),S=this.adaptor,O=S.firstChild(this.element);O?S.insert(w,O):S.append(this.element,w)},e.prototype.handleAttributes=function(){var t,r,o,n,a=this.node.attributes,s=a.getAllDefaults(),l=e.skipAttributes;try{for(var c=i(a.getExplicitNames()),h=c.next();!h.done;h=c.next()){var u=h.value;!1!==l[u]&&(u in s||l[u]||this.adaptor.hasAttribute(this.element,u))||this.adaptor.setAttribute(this.element,u,a.getExplicit(u))}}catch(e){t={error:e}}finally{try{h&&!h.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}if(a.get(\"class\")){var p=a.get(\"class\").trim().split(/ +/);try{for(var d=i(p),f=d.next();!f.done;f=d.next()){var y=f.value;this.adaptor.addClass(this.element,y)}}catch(t){o={error:t}}finally{try{f&&!f.done&&(n=d.return)&&n.call(d)}finally{if(o)throw o.error}}}},e.prototype.place=function(t,e,r){if(void 0===r&&(r=null),(t+=this.dx)||e){r||(r=this.element,e=this.handleId(e));var o=\"translate(\".concat(this.fixed(t),\",\").concat(this.fixed(e),\")\"),n=this.adaptor.getAttribute(r,\"transform\")||\"\";this.adaptor.setAttribute(r,\"transform\",o+(n?\" \"+n:\"\"))}},e.prototype.handleId=function(t){if(!this.node.attributes||!this.node.attributes.get(\"id\"))return t;var e=this.adaptor,r=this.getBBox().h,o=e.childNodes(this.element);o.forEach((function(t){return e.remove(t)}));var n=this.svg(\"g\",{\"data-idbox\":!0,transform:\"translate(0,\".concat(this.fixed(-r),\")\")},o);return e.append(this.element,this.svg(\"text\",{\"data-id-align\":!0},[this.text(\"\")])),e.append(this.element,n),t+r},e.prototype.firstChild=function(){var t=this.adaptor,e=t.firstChild(this.element);return e&&\"text\"===t.kind(e)&&t.getAttribute(e,\"data-id-align\")&&(e=t.firstChild(t.next(e))),e&&\"rect\"===t.kind(e)&&t.getAttribute(e,\"data-hitbox\")&&(e=t.next(e)),e},e.prototype.placeChar=function(t,e,r,o,n){var s,l;void 0===n&&(n=null),null===n&&(n=this.variant);var c=t.toString(16).toUpperCase(),h=a(this.getVariantChar(n,t),4),u=h[2],p=h[3];if(\"p\"in p){var d=p.p?\"M\"+p.p+\"Z\":\"\";this.place(e,r,this.adaptor.append(o,this.charNode(n,c,d)))}else if(\"c\"in p){var f=this.adaptor.append(o,this.svg(\"g\",{\"data-c\":c}));this.place(e,r,f),e=0;try{for(var y=i(this.unicodeChars(p.c,n)),m=y.next();!m.done;m=y.next()){var v=m.value;e+=this.placeChar(v,e,r,f,n)}}catch(t){s={error:t}}finally{try{m&&!m.done&&(l=y.return)&&l.call(y)}finally{if(s)throw s.error}}}else if(p.unknown){var g=String.fromCodePoint(t),b=this.adaptor.append(o,this.jax.unknownText(g,n));return this.place(e,r,b),this.jax.measureTextNodeWithCache(b,g,n).w}return u},e.prototype.charNode=function(t,e,r){return\"none\"!==this.jax.options.fontCache?this.useNode(t,e,r):this.pathNode(e,r)},e.prototype.pathNode=function(t,e){return this.svg(\"path\",{\"data-c\":t,d:e})},e.prototype.useNode=function(t,e,r){var o=this.svg(\"use\",{\"data-c\":e}),n=\"#\"+this.jax.fontCache.cachePath(t,e,r);return this.adaptor.setAttribute(o,\"href\",n,c.XLINKNS),o},e.prototype.drawBBox=function(){var t=this.getBBox(),e=t.w,r=t.h,o=t.d,n=this.svg(\"g\",{style:{opacity:.25}},[this.svg(\"rect\",{fill:\"red\",height:this.fixed(r),width:this.fixed(e)}),this.svg(\"rect\",{fill:\"green\",height:this.fixed(o),width:this.fixed(e),y:this.fixed(-o)})]),i=this.element||this.parent.element;this.adaptor.append(i,n)},e.prototype.html=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r=[]),this.jax.html(t,e,r)},e.prototype.svg=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r=[]),this.jax.svg(t,e,r)},e.prototype.text=function(t){return this.jax.text(t)},e.prototype.fixed=function(t,e){return void 0===e&&(e=1),this.jax.fixed(1e3*t,e)},e.kind=\"unknown\",e.borderFuzz=.005,e}(l.CommonWrapper);e.SVGWrapper=h},9416:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGWrapperFactory=void 0;var i=r(1475),a=r(4687),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.jax=null,e}return n(e,t),e.defaultNodes=a.SVGWrappers,e}(i.CommonWrapperFactory);e.SVGWrapperFactory=s},4687:function(t,e,r){var o;Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGWrappers=void 0;var n=r(9321),i=r(1211),a=r(322),s=r(2983),l=r(6760),c=r(9810),h=r(3677),u=r(1941),p=r(3007),d=r(2458),f=r(4539),y=r(438),m=r(9295),v=r(9948),g=r(8798),b=r(5258),x=r(7522),_=r(4299),M=r(4750),w=r(451),S=r(4682),O=r(2673),C=r(4601),B=r(144),j=r(6965),P=r(4916),A=r(484),V=r(7455);e.SVGWrappers=((o={})[i.SVGmath.kind]=i.SVGmath,o[a.SVGmrow.kind]=a.SVGmrow,o[a.SVGinferredMrow.kind]=a.SVGinferredMrow,o[s.SVGmi.kind]=s.SVGmi,o[l.SVGmo.kind]=l.SVGmo,o[c.SVGmn.kind]=c.SVGmn,o[h.SVGms.kind]=h.SVGms,o[u.SVGmtext.kind]=u.SVGmtext,o[p.SVGmerror.kind]=p.SVGmerror,o[d.SVGmspace.kind]=d.SVGmspace,o[f.SVGmpadded.kind]=f.SVGmpadded,o[y.SVGmphantom.kind]=y.SVGmphantom,o[m.SVGmfrac.kind]=m.SVGmfrac,o[v.SVGmsqrt.kind]=v.SVGmsqrt,o[g.SVGmroot.kind]=g.SVGmroot,o[b.SVGmfenced.kind]=b.SVGmfenced,o[x.SVGmsub.kind]=x.SVGmsub,o[x.SVGmsup.kind]=x.SVGmsup,o[x.SVGmsubsup.kind]=x.SVGmsubsup,o[_.SVGmunder.kind]=_.SVGmunder,o[_.SVGmover.kind]=_.SVGmover,o[_.SVGmunderover.kind]=_.SVGmunderover,o[M.SVGmmultiscripts.kind]=M.SVGmmultiscripts,o[w.SVGmtable.kind]=w.SVGmtable,o[S.SVGmtr.kind]=S.SVGmtr,o[S.SVGmlabeledtr.kind]=S.SVGmlabeledtr,o[O.SVGmtd.kind]=O.SVGmtd,o[C.SVGmaction.kind]=C.SVGmaction,o[B.SVGmenclose.kind]=B.SVGmenclose,o[j.SVGsemantics.kind]=j.SVGsemantics,o[j.SVGannotation.kind]=j.SVGannotation,o[j.SVGannotationXML.kind]=j.SVGannotationXML,o[j.SVGxml.kind]=j.SVGxml,o[P.SVGmglyph.kind]=P.SVGmglyph,o[A.SVGTeXAtom.kind]=A.SVGTeXAtom,o[V.SVGTextNode.kind]=V.SVGTextNode,o[n.SVGWrapper.kind]=n.SVGWrapper,o)},484:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGTeXAtom=void 0;var i=r(9321),a=r(3438),s=r(4282),l=r(8921),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(e){if(t.prototype.toSVG.call(this,e),this.adaptor.setAttribute(this.element,\"data-mjx-texclass\",l.TEXCLASSNAMES[this.node.texClass]),this.node.texClass===l.TEXCLASS.VCENTER){var r=this.childNodes[0].getBBox(),o=r.h,n=(o+r.d)/2+this.font.params.axis_height-o,i=\"translate(0 \"+this.fixed(n)+\")\";this.adaptor.setAttribute(this.element,\"transform\",i)}},e.kind=s.TeXAtom.prototype.kind,e}((0,a.CommonTeXAtomMixin)(i.SVGWrapper));e.SVGTeXAtom=c},7455:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGTextNode=void 0;var a=r(8921),s=r(9321),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e,r,o=this.node.getText(),n=this.parent.variant;if(0!==o.length)if(\"-explicitFont\"===n)this.element=this.adaptor.append(t,this.jax.unknownText(o,n));else{var a=this.remappedText(o,n);this.parent.childNodes.length>1&&(t=this.element=this.adaptor.append(t,this.svg(\"g\",{\"data-mml-node\":\"text\"})));var s=0;try{for(var l=i(a),c=l.next();!c.done;c=l.next()){var h=c.value;s+=this.placeChar(h,s,0,t,n)}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=l.return)&&r.call(l)}finally{if(e)throw e.error}}}},e.kind=a.TextNode.prototype.kind,e.styles={'mjx-container[jax=\"SVG\"] path[data-c], mjx-container[jax=\"SVG\"] use[data-c]':{\"stroke-width\":3}},e}((0,r(555).CommonTextNodeMixin)(s.SVGWrapper));e.SVGTextNode=l},4601:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmaction=void 0;var i=r(9321),a=r(3345),s=r(3345),l=r(3969),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),r=this.selected,o=r.getOuterBBox(),n=o.h,i=o.d,a=o.w;this.adaptor.append(this.element,this.svg(\"rect\",{width:this.fixed(a),height:this.fixed(n+i),y:this.fixed(-i),fill:\"none\",\"pointer-events\":\"all\"})),r.toSVG(e);var s=r.getOuterBBox();r.element&&r.place(s.L*s.rscale,0),this.action(this,this.data)},e.prototype.setEventHandler=function(t,e){this.element.addEventListener(t,e)},e.kind=l.MmlMaction.prototype.kind,e.styles={'[jax=\"SVG\"] mjx-tool':{display:\"inline-block\",position:\"relative\",width:0,height:0},'[jax=\"SVG\"] mjx-tool > mjx-tip':{position:\"absolute\",top:0,left:0},\"mjx-tool > mjx-tip\":{display:\"inline-block\",padding:\".2em\",border:\"1px solid #888\",\"font-size\":\"70%\",\"background-color\":\"#F8F8F8\",color:\"black\",\"box-shadow\":\"2px 2px 5px #AAAAAA\"},'g[data-mml-node=\"maction\"][data-toggle]':{cursor:\"pointer\"},\"mjx-status\":{display:\"block\",position:\"fixed\",left:\"1em\",bottom:\"1em\",\"min-width\":\"25%\",padding:\".2em .4em\",border:\"1px solid #888\",\"font-size\":\"90%\",\"background-color\":\"#F8F8F8\",color:\"black\"}},e.actions=new Map([[\"toggle\",[function(t,e){t.adaptor.setAttribute(t.element,\"data-toggle\",t.node.attributes.get(\"selection\"));var r=t.factory.jax.math,o=t.factory.jax.document,n=t.node;t.setEventHandler(\"click\",(function(t){r.end.node||(r.start.node=r.end.node=r.typesetRoot,r.start.n=r.end.n=0),n.nextToggleSelection(),r.rerender(o),t.stopPropagation()}))},{}]],[\"tooltip\",[function(t,e){var r=t.childNodes[1];if(r){var o=t.firstChild();if(r.node.isKind(\"mtext\")){var n=r.node.getText();t.adaptor.insert(t.svg(\"title\",{},[t.text(n)]),o)}else{var i=t.adaptor,a=t.jax.container,s=t.node.factory.create(\"math\",{},[t.childNodes[1].node]),l=t.html(\"mjx-tool\",{},[t.html(\"mjx-tip\")]),c=i.append(o,t.svg(\"foreignObject\",{style:{display:\"none\"}},[l]));t.jax.processMath(s,i.firstChild(l)),t.childNodes[1].node.parent=t.node,t.setEventHandler(\"mouseover\",(function(r){e.stopTimers(t,e),e.hoverTimer.set(t,setTimeout((function(){i.setStyle(l,\"left\",\"0\"),i.setStyle(l,\"top\",\"0\"),i.append(a,l);var e=i.nodeBBox(l),r=i.nodeBBox(t.element),o=(r.right-e.left)/t.metrics.em+t.dx,n=(r.bottom-e.bottom)/t.metrics.em+t.dy;i.setStyle(l,\"left\",t.px(o)),i.setStyle(l,\"top\",t.px(n))}),e.postDelay)),r.stopPropagation()})),t.setEventHandler(\"mouseout\",(function(r){e.stopTimers(t,e);var o=setTimeout((function(){return i.append(c,l)}),e.clearDelay);e.clearTimer.set(t,o),r.stopPropagation()}))}}},s.TooltipData]],[\"statusline\",[function(t,e){var r=t.childNodes[1];if(r&&r.node.isKind(\"mtext\")){var o=t.adaptor,n=r.node.getText();o.setAttribute(t.element,\"data-statusline\",n),t.setEventHandler(\"mouseover\",(function(r){if(null===e.status){var i=o.body(o.document);e.status=o.append(i,t.html(\"mjx-status\",{},[t.text(n)]))}r.stopPropagation()})),t.setEventHandler(\"mouseout\",(function(t){e.status&&(o.remove(e.status),e.status=null),t.stopPropagation()}))}},{status:null}]]]),e}((0,a.CommonMactionMixin)(i.SVGWrapper));e.SVGmaction=c},1211:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmath=void 0;var s=r(9321),l=r(2057),c=r(304),h=r(3717),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(e){t.prototype.toSVG.call(this,e);var r=this.adaptor;\"block\"===this.node.attributes.get(\"display\")&&(r.setAttribute(this.jax.container,\"display\",\"true\"),this.handleDisplay()),this.jax.document.options.internalSpeechTitles&&this.handleSpeech()},e.prototype.handleDisplay=function(){var t=i(this.getAlignShift(),2),e=t[0],r=t[1];if(\"center\"!==e&&this.adaptor.setAttribute(this.jax.container,\"justify\",e),this.bbox.pwidth===h.BBox.fullWidth){if(this.adaptor.setAttribute(this.jax.container,\"width\",\"full\"),this.jax.table){var o=this.jax.table.getOuterBBox(),n=o.L,a=o.w,s=o.R;\"right\"===e?s=Math.max(s||-r,-r):\"left\"===e?n=Math.max(n||r,r):\"center\"===e&&(a+=2*Math.abs(r)),this.jax.minwidth=Math.max(0,n+a+s)}}else this.jax.shift=r},e.prototype.handleSpeech=function(){var t,e,r=this.adaptor,o=this.node.attributes,n=o.get(\"aria-label\")||o.get(\"data-semantic-speech\");if(n){var i=this.getTitleID(),s=this.svg(\"title\",{id:i},[this.text(n)]);r.insert(s,r.firstChild(this.element)),r.setAttribute(this.element,\"aria-labeledby\",i),r.removeAttribute(this.element,\"aria-label\");try{for(var l=a(this.childNodes[0].childNodes),c=l.next();!c.done;c=l.next()){var h=c.value;r.setAttribute(h.element,\"aria-hidden\",\"true\")}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}}},e.prototype.getTitleID=function(){return\"mjx-svg-title-\"+String(this.jax.options.titleID++)},e.prototype.setChildPWidths=function(e,r,o){return void 0===r&&(r=null),void 0===o&&(o=!0),t.prototype.setChildPWidths.call(this,e,this.parent?r:this.metrics.containerWidth/this.jax.pxPerEm,!1)},e.kind=c.MmlMath.prototype.kind,e.styles={'mjx-container[jax=\"SVG\"][display=\"true\"]':{display:\"block\",\"text-align\":\"center\",margin:\"1em 0\"},'mjx-container[jax=\"SVG\"][display=\"true\"][width=\"full\"]':{display:\"flex\"},'mjx-container[jax=\"SVG\"][justify=\"left\"]':{\"text-align\":\"left\"},'mjx-container[jax=\"SVG\"][justify=\"right\"]':{\"text-align\":\"right\"}},e}((0,l.CommonMathMixin)(s.SVGWrapper));e.SVGmath=u},144:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__createBinding||(Object.create?function(t,e,r,o){void 0===o&&(o=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!(\"get\"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,o,n)}:function(t,e,r,o){void 0===o&&(o=r),t[o]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return a(e,t),e},l=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},c=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmenclose=void 0;var h=r(9321),u=r(6200),p=s(r(9737)),d=r(4374),f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e,r,o=this.standardSVGnode(t),n=this.getBBoxExtenders()[3],i={};n>0&&(i.transform=\"translate(\"+this.fixed(n)+\", 0)\");var a=this.adaptor.append(o,this.svg(\"g\",i));this.renderChild?this.renderChild(this,a):this.childNodes[0].toSVG(a);try{for(var s=l(Object.keys(this.notations)),c=s.next();!c.done;c=s.next()){var h=c.value,u=this.notations[h];!u.renderChild&&u.renderer(this,o)}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}},e.prototype.arrow=function(t,e,r,o,n){void 0===o&&(o=\"\"),void 0===n&&(n=0);var i=this.getBBox(),a=i.w,s=(t-a)/2,l=(i.h-i.d)/2,h=this.thickness,u=h/2,p=c([h*this.arrowhead.x,h*this.arrowhead.y,h*this.arrowhead.dx],3),d=p[0],f=p[1],y=p[2],m=r?this.fill(\"M\",a+s,l,\"l\",-(d+y),f,\"l\",y,u-f,\"L\",d-s,l+u,\"l\",y,f-u,\"l\",-(d+y),-f,\"l\",d+y,-f,\"l\",-y,f-u,\"L\",a+s-d,l-u,\"l\",-y,u-f,\"Z\"):this.fill(\"M\",a+s,l,\"l\",-(d+y),f,\"l\",y,u-f,\"L\",-s,l+u,\"l\",0,-h,\"L\",a+s-d,l-u,\"l\",-y,u-f,\"Z\"),v=[];if(n&&v.push(\"X\"===o?\"translate(\".concat(this.fixed(-n),\" 0)\"):\"translate(0 \".concat(this.fixed(n),\")\")),e){var g=this.jax.fixed(180*-e/Math.PI);v.push(\"rotate(\".concat(g,\" \").concat(this.fixed(a/2),\" \").concat(this.fixed(l),\")\"))}return v.length&&this.adaptor.setAttribute(m,\"transform\",v.join(\" \")),m},e.prototype.line=function(t){var e=c(t,4),r=e[0],o=e[1],n=e[2],i=e[3];return this.svg(\"line\",{x1:this.fixed(r),y1:this.fixed(o),x2:this.fixed(n),y2:this.fixed(i),\"stroke-width\":this.fixed(this.thickness)})},e.prototype.box=function(t,e,r,o){void 0===o&&(o=0);var n=this.thickness,i={x:this.fixed(n/2),y:this.fixed(n/2-r),width:this.fixed(t-n),height:this.fixed(e+r-n),fill:\"none\",\"stroke-width\":this.fixed(n)};return o&&(i.rx=this.fixed(o)),this.svg(\"rect\",i)},e.prototype.ellipse=function(t,e,r){var o=this.thickness;return this.svg(\"ellipse\",{rx:this.fixed((t-o)/2),ry:this.fixed((e+r-o)/2),cx:this.fixed(t/2),cy:this.fixed((e-r)/2),fill:\"none\",\"stroke-width\":this.fixed(o)})},e.prototype.path=function(t){for(var e=this,r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return this.svg(\"path\",{d:r.map((function(t){return\"string\"==typeof t?t:e.fixed(t)})).join(\" \"),style:{\"stroke-width\":this.fixed(this.thickness)},\"stroke-linecap\":\"round\",\"stroke-linejoin\":t,fill:\"none\"})},e.prototype.fill=function(){for(var t=this,e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return this.svg(\"path\",{d:e.map((function(e){return\"string\"==typeof e?e:t.fixed(e)})).join(\" \")})},e.kind=d.MmlMenclose.prototype.kind,e.notations=new Map([p.Border(\"top\"),p.Border(\"right\"),p.Border(\"bottom\"),p.Border(\"left\"),p.Border2(\"actuarial\",\"top\",\"right\"),p.Border2(\"madruwb\",\"bottom\",\"right\"),p.DiagonalStrike(\"up\"),p.DiagonalStrike(\"down\"),[\"horizontalstrike\",{renderer:p.RenderLine(\"horizontal\",\"Y\"),bbox:function(t){return[0,t.padding,0,t.padding]}}],[\"verticalstrike\",{renderer:p.RenderLine(\"vertical\",\"X\"),bbox:function(t){return[t.padding,0,t.padding,0]}}],[\"box\",{renderer:function(t,e){var r=t.getBBox(),o=r.w,n=r.h,i=r.d;t.adaptor.append(t.element,t.box(o,n,i))},bbox:p.fullBBox,border:p.fullBorder,remove:\"left right top bottom\"}],[\"roundedbox\",{renderer:function(t,e){var r=t.getBBox(),o=r.w,n=r.h,i=r.d,a=t.thickness+t.padding;t.adaptor.append(t.element,t.box(o,n,i,a))},bbox:p.fullBBox}],[\"circle\",{renderer:function(t,e){var r=t.getBBox(),o=r.w,n=r.h,i=r.d;t.adaptor.append(t.element,t.ellipse(o,n,i))},bbox:p.fullBBox}],[\"phasorangle\",{renderer:function(t,e){var r=t.getBBox(),o=r.w,n=r.h,i=r.d,a=t.getArgMod(1.75*t.padding,n+i)[0],s=t.thickness/2,l=n+i,c=Math.cos(a);t.adaptor.append(t.element,t.path(\"mitre\",\"M\",o,s-i,\"L\",s+c*s,s-i,\"L\",c*l+s,l-i-s))},bbox:function(t){var e=t.padding/2,r=t.thickness;return[2*e,e,e+r,3*e+r]},border:function(t){return[0,0,t.thickness,0]},remove:\"bottom\"}],p.Arrow(\"up\"),p.Arrow(\"down\"),p.Arrow(\"left\"),p.Arrow(\"right\"),p.Arrow(\"updown\"),p.Arrow(\"leftright\"),p.DiagonalArrow(\"updiagonal\"),p.DiagonalArrow(\"northeast\"),p.DiagonalArrow(\"southeast\"),p.DiagonalArrow(\"northwest\"),p.DiagonalArrow(\"southwest\"),p.DiagonalArrow(\"northeastsouthwest\"),p.DiagonalArrow(\"northwestsoutheast\"),[\"longdiv\",{renderer:function(t,e){var r=t.getBBox(),o=r.w,n=r.h,i=r.d,a=t.thickness/2,s=t.padding;t.adaptor.append(t.element,t.path(\"round\",\"M\",a,a-i,\"a\",s-a/2,(n+i)/2-4*a,0,\"0,1\",0,n+i-2*a,\"L\",o-a,n-a))},bbox:function(t){var e=t.padding,r=t.thickness;return[e+r,e,e,2*e+r/2]}}],[\"radical\",{renderer:function(t,e){t.msqrt.toSVG(e);var r=t.sqrtTRBL()[3];t.place(-r,0,e)},init:function(t){t.msqrt=t.createMsqrt(t.childNodes[0])},bbox:function(t){return t.sqrtTRBL()},renderChild:!0}]]),e}((0,u.CommonMencloseMixin)(h.SVGWrapper));e.SVGmenclose=f},3007:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmerror=void 0;var i=r(9321),a=r(8078),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),r=this.getBBox(),o=r.h,n=r.d,i=r.w;this.adaptor.append(this.element,this.svg(\"rect\",{\"data-background\":!0,width:this.fixed(i),height:this.fixed(o+n),y:this.fixed(-n)}));var a=this.node.attributes.get(\"title\");a&&this.adaptor.append(this.element,this.svg(\"title\",{},[this.adaptor.text(a)])),this.addChildren(e)},e.kind=a.MmlMerror.prototype.kind,e.styles={'g[data-mml-node=\"merror\"] > g':{fill:\"red\",stroke:\"red\"},'g[data-mml-node=\"merror\"] > rect[data-background]':{fill:\"yellow\",stroke:\"none\"}},e}(i.SVGWrapper);e.SVGmerror=s},5258:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmfenced=void 0;var a=r(9321),s=r(1346),l=r(7451),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t);this.setChildrenParent(this.mrow),this.mrow.toSVG(e),this.setChildrenParent(this)},e.prototype.setChildrenParent=function(t){var e,r;try{for(var o=i(this.childNodes),n=o.next();!n.done;n=o.next()){n.value.parent=t}}catch(t){e={error:t}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},e.kind=l.MmlMfenced.prototype.kind,e}((0,s.CommonMfencedMixin)(a.SVGWrapper));e.SVGmfenced=c},9295:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmfrac=void 0;var a=r(9321),s=r(5705),l=r(848),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){this.standardSVGnode(t);var e=this.node.attributes.getList(\"linethickness\",\"bevelled\"),r=e.linethickness,o=e.bevelled,n=this.isDisplay();if(o)this.makeBevelled(n);else{var i=this.length2em(String(r),.06);0===i?this.makeAtop(n):this.makeFraction(n,i)}},e.prototype.makeFraction=function(t,e){var r=this.element,o=this.node.attributes.getList(\"numalign\",\"denomalign\"),n=o.numalign,a=o.denomalign,s=i(this.childNodes,2),l=s[0],c=s[1],h=l.getOuterBBox(),u=c.getOuterBBox(),p=this.font.params,d=p.axis_height,f=this.node.getProperty(\"withDelims\")?0:p.nulldelimiterspace,y=Math.max((h.L+h.w+h.R)*h.rscale,(u.L+u.w+u.R)*u.rscale),m=this.getAlignX(y,h,n)+.1+f,v=this.getAlignX(y,u,a)+.1+f,g=this.getTUV(t,e),b=g.T,x=g.u,_=g.v;l.toSVG(r),l.place(m,d+b+Math.max(h.d*h.rscale,x)),c.toSVG(r),c.place(v,d-b-Math.max(u.h*u.rscale,_)),this.adaptor.append(r,this.svg(\"rect\",{width:this.fixed(y+.2),height:this.fixed(e),x:this.fixed(f),y:this.fixed(d-e/2)}))},e.prototype.makeAtop=function(t){var e=this.element,r=this.node.attributes.getList(\"numalign\",\"denomalign\"),o=r.numalign,n=r.denomalign,a=i(this.childNodes,2),s=a[0],l=a[1],c=s.getOuterBBox(),h=l.getOuterBBox(),u=this.font.params,p=this.node.getProperty(\"withDelims\")?0:u.nulldelimiterspace,d=Math.max((c.L+c.w+c.R)*c.rscale,(h.L+h.w+h.R)*h.rscale),f=this.getAlignX(d,c,o)+p,y=this.getAlignX(d,h,n)+p,m=this.getUVQ(t),v=m.u,g=m.v;s.toSVG(e),s.place(f,v),l.toSVG(e),l.place(y,-g)},e.prototype.makeBevelled=function(t){var e=this.element,r=i(this.childNodes,2),o=r[0],n=r[1],a=this.getBevelData(t),s=a.u,l=a.v,c=a.delta,h=a.nbox,u=a.dbox,p=(h.L+h.w+h.R)*h.rscale;o.toSVG(e),this.bevel.toSVG(e),n.toSVG(e),o.place(h.L*h.rscale,s),this.bevel.place(p-c/2,0),n.place(p+this.bevel.getOuterBBox().w+u.L*u.rscale-c,l)},e.kind=l.MmlMfrac.prototype.kind,e}((0,s.CommonMfracMixin)(a.SVGWrapper));e.SVGmfrac=c},4916:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmglyph=void 0;var i=r(9321),a=r(7969),s=r(910),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t);if(this.charWrapper)this.charWrapper.toSVG(e);else{var r=this.node.attributes.getList(\"src\",\"alt\"),o=r.src,n=r.alt,i=this.fixed(this.height),a={width:this.fixed(this.width),height:i,transform:\"translate(0 \"+this.fixed(this.height+(this.valign||0))+\") matrix(1 0 0 -1 0 0)\",preserveAspectRatio:\"none\",\"aria-label\":n,href:o},s=this.svg(\"image\",a);this.adaptor.append(e,s)}},e.kind=s.MmlMglyph.prototype.kind,e}((0,a.CommonMglyphMixin)(i.SVGWrapper));e.SVGmglyph=l},2983:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmi=void 0;var i=r(9321),a=r(1419),s=r(7754),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlMi.prototype.kind,e}((0,a.CommonMiMixin)(i.SVGWrapper));e.SVGmi=l},4750:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmmultiscripts=e.AlignX=void 0;var a=r(7522),s=r(9906),l=r(7764),c=r(6720);function h(t){return{left:function(t,e){return 0},center:function(t,e){return(e-t)/2},right:function(t,e){return e-t}}[t]||function(t,e){return 0}}e.AlignX=h;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),r=this.scriptData,o=this.node.getProperty(\"scriptalign\")||\"right left\",n=i((0,c.split)(o+\" \"+o),2),a=n[0],s=n[1],l=this.combinePrePost(r.sub,r.psub),h=this.combinePrePost(r.sup,r.psup),u=i(this.getUVQ(l,h),2),p=u[0],d=u[1],f=0;r.numPrescripts&&(f=this.addScripts(.05,p,d,this.firstPrescript,r.numPrescripts,a));var y=this.baseChild;y.toSVG(e),y.place(f,0),f+=y.getOuterBBox().w,r.numScripts&&this.addScripts(f,p,d,1,r.numScripts,s)},e.prototype.addScripts=function(t,e,r,o,n,a){var s=this.adaptor,l=h(a),c=s.append(this.element,this.svg(\"g\")),u=s.append(this.element,this.svg(\"g\"));this.place(t,e,c),this.place(t,r,u);for(var p=o+2*n,d=0;o<p;){var f=i([this.childNodes[o++],this.childNodes[o++]],2),y=f[0],m=f[1],v=i([y.getOuterBBox(),m.getOuterBBox()],2),g=v[0],b=v[1],x=i([g.rscale,b.rscale],2),_=x[0],M=x[1],w=Math.max(g.w*_,b.w*M);y.toSVG(u),m.toSVG(c),y.place(d+l(g.w*_,w),0),m.place(d+l(b.w*M,w),0),d+=w}return t+d},e.kind=l.MmlMmultiscripts.prototype.kind,e}((0,s.CommonMmultiscriptsMixin)(a.SVGmsubsup));e.SVGmmultiscripts=u},9810:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmn=void 0;var i=r(9321),a=r(2304),s=r(3235),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlMn.prototype.kind,e}((0,a.CommonMnMixin)(i.SVGWrapper));e.SVGmn=l},6760:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,r=e&&t[e],o=0;if(r)return r.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&o>=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},a=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmo=void 0;var s=r(9321),l=r(437),c=r(9946),h=.1,u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.node.attributes,r=e.get(\"symmetric\")&&2!==this.stretch.dir,o=0!==this.stretch.dir;o&&null===this.size&&this.getStretchedVariant([]);var n=this.standardSVGnode(t);if(o&&this.size<0)this.stretchSVG();else{var i=r||e.get(\"largeop\")?this.fixed(this.getCenterOffset()):\"0\",a=this.node.getProperty(\"mathaccent\")?this.fixed(this.getAccentOffset()):\"0\";\"0\"===i&&\"0\"===a||this.adaptor.setAttribute(n,\"transform\",\"translate(\".concat(a,\" \").concat(i,\")\")),this.addChildren(n)}},e.prototype.stretchSVG=function(){var t=this.stretch.stretch,e=this.getStretchVariants(),r=this.getBBox();1===this.stretch.dir?this.stretchVertical(t,e,r):this.stretchHorizontal(t,e,r)},e.prototype.getStretchVariants=function(){var t,e,r=this.stretch.c||this.getText().codePointAt(0),o=[];try{for(var n=i(this.stretch.stretch.keys()),a=n.next();!a.done;a=n.next()){var s=a.value;o[s]=this.font.getStretchVariant(r,s)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return o},e.prototype.stretchVertical=function(t,e,r){var o=r.h,n=r.d,i=r.w,s=this.addTop(t[0],e[0],o,i),l=this.addBot(t[2],e[2],n,i);if(4===t.length){var c=a(this.addMidV(t[3],e[3],i),2),h=c[0],u=c[1];this.addExtV(t[1],e[1],o,0,s,h,i),this.addExtV(t[1],e[1],0,n,u,l,i)}else this.addExtV(t[1],e[1],o,n,s,l,i)},e.prototype.stretchHorizontal=function(t,e,r){var o=r.w,n=this.addLeft(t[0],e[0]),i=this.addRight(t[2],e[2],o);if(4===t.length){var s=a(this.addMidH(t[3],e[3],o),2),l=s[0],c=s[1],h=o/2;this.addExtH(t[1],e[1],h,n,h-l),this.addExtH(t[1],e[1],h,c-h,i,h)}else this.addExtH(t[1],e[1],o,n,i)},e.prototype.getChar=function(t,e){var r=this.font.getChar(e,t)||[0,0,0,null];return[r[0],r[1],r[2],r[3]||{}]},e.prototype.addGlyph=function(t,e,r,o,n){return void 0===n&&(n=null),this.placeChar(t,r,o,n||this.element,e)},e.prototype.addTop=function(t,e,r,o){if(!t)return 0;var n=a(this.getChar(t,e),3),i=n[0],s=n[1],l=n[2];return this.addGlyph(t,e,(o-l)/2,r-i),i+s},e.prototype.addExtV=function(t,e,r,o,n,i,s){var l=this;if(t){n=Math.max(0,n-h),i=Math.max(0,i-h);var c=this.adaptor,u=a(this.getChar(t,e),3),p=u[0],d=u[1],f=u[2],y=r+o-n-i,m=1.5*y/(p+d),v=(m*(p-d)-y)/2;if(!(y<=0)){var g=this.svg(\"svg\",{width:this.fixed(f),height:this.fixed(y),y:this.fixed(i-o),x:this.fixed((s-f)/2),viewBox:[0,v,f,y].map((function(t){return l.fixed(t)})).join(\" \")});this.addGlyph(t,e,0,0,g);var b=c.lastChild(g);c.setAttribute(b,\"transform\",\"scale(1,\".concat(this.jax.fixed(m),\")\")),c.append(this.element,g)}}},e.prototype.addBot=function(t,e,r,o){if(!t)return 0;var n=a(this.getChar(t,e),3),i=n[0],s=n[1],l=n[2];return this.addGlyph(t,e,(o-l)/2,s-r),i+s},e.prototype.addMidV=function(t,e,r){if(!t)return[0,0];var o=a(this.getChar(t,e),3),n=o[0],i=o[1],s=o[2],l=(i-n)/2+this.font.params.axis_height;return this.addGlyph(t,e,(r-s)/2,l),[n+l,i-l]},e.prototype.addLeft=function(t,e){return t?this.addGlyph(t,e,0,0):0},e.prototype.addExtH=function(t,e,r,o,n,i){var s=this;if(void 0===i&&(i=0),t){n=Math.max(0,n-.1),o=Math.max(0,o-.1);var l=this.adaptor,c=a(this.getChar(t,e),3),u=c[0],p=c[1],d=c[2],f=r-o-n,y=u+p+.2,m=f/d*1.5,v=-(p+h);if(!(f<=0)){var g=this.svg(\"svg\",{width:this.fixed(f),height:this.fixed(y),x:this.fixed(i+o),y:this.fixed(v),viewBox:[(m*d-f)/2,v,f,y].map((function(t){return s.fixed(t)})).join(\" \")});this.addGlyph(t,e,0,0,g);var b=l.lastChild(g);l.setAttribute(b,\"transform\",\"scale(\"+this.jax.fixed(m)+\",1)\"),l.append(this.element,g)}}},e.prototype.addRight=function(t,e,r){if(!t)return 0;var o=this.getChar(t,e)[2];return this.addGlyph(t,e,r-o,0)},e.prototype.addMidH=function(t,e,r){if(!t)return[0,0];var o=this.getChar(t,e)[2];return this.addGlyph(t,e,(r-o)/2,0),[(r-o)/2,(r+o)/2]},e.kind=c.MmlMo.prototype.kind,e}((0,l.CommonMoMixin)(s.SVGWrapper));e.SVGmo=u},4539:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmpadded=void 0;var a=r(9321),s=r(7481),l=r(189),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),r=i(this.getDimens(),9),o=r[5],n=r[6],a=r[7],s=r[8],l=this.node.attributes.get(\"data-align\")||\"left\",c=n+s-(o<0&&\"left\"!==l?\"center\"===l?o/2:o:0);(c||a)&&(e=this.adaptor.append(e,this.svg(\"g\")),this.place(c,a,e)),this.addChildren(e)},e.kind=l.MmlMpadded.prototype.kind,e}((0,s.CommonMpaddedMixin)(a.SVGWrapper));e.SVGmpadded=c},438:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmphantom=void 0;var i=r(9321),a=r(7988),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){this.standardSVGnode(t)},e.kind=a.MmlMphantom.prototype.kind,e}(i.SVGWrapper);e.SVGmphantom=s},8798:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmroot=void 0;var a=r(9948),s=r(5997),l=r(4664),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.addRoot=function(t,e,r,o){e.toSVG(t);var n=i(this.getRootDimens(r,o),3),a=n[0],s=n[1],l=n[2],c=e.getOuterBBox();e.place(l*c.rscale,s),this.dx=a},e.kind=l.MmlMroot.prototype.kind,e}((0,s.CommonMrootMixin)(a.SVGmsqrt));e.SVGmroot=c},322:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGinferredMrow=e.SVGmrow=void 0;var i=r(9321),a=r(9323),s=r(9323),l=r(1691),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.node.isInferred?this.element=t:this.standardSVGnode(t);this.addChildren(e)},e.kind=l.MmlMrow.prototype.kind,e}((0,a.CommonMrowMixin)(i.SVGWrapper));e.SVGmrow=c;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=l.MmlInferredMrow.prototype.kind,e}((0,s.CommonInferredMrowMixin)(c));e.SVGinferredMrow=h},3677:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGms=void 0;var i=r(9321),a=r(6920),s=r(4042),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlMs.prototype.kind,e}((0,a.CommonMsMixin)(i.SVGWrapper));e.SVGms=l},2458:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmspace=void 0;var i=r(9321),a=r(37),s=r(1465),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlMspace.prototype.kind,e}((0,a.CommonMspaceMixin)(i.SVGWrapper));e.SVGmspace=l},9948:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmsqrt=void 0;var i=r(9321),a=r(222),s=r(4655),l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.dx=0,e}return n(e,t),e.prototype.toSVG=function(t){var e=this.childNodes[this.surd],r=this.childNodes[this.base],o=this.root?this.childNodes[this.root]:null,n=e.getBBox(),i=r.getOuterBBox(),a=this.getPQ(n)[1],s=this.font.params.rule_thickness*this.bbox.scale,l=i.h+a+s,c=this.standardSVGnode(t),h=this.adaptor.append(c,this.svg(\"g\"));this.addRoot(c,o,n,l),e.toSVG(c),e.place(this.dx,l-n.h),r.toSVG(h),r.place(this.dx+n.w,0),this.adaptor.append(c,this.svg(\"rect\",{width:this.fixed(i.w),height:this.fixed(s),x:this.fixed(this.dx+n.w),y:this.fixed(l-s)}))},e.prototype.addRoot=function(t,e,r,o){},e.kind=s.MmlMsqrt.prototype.kind,e}((0,a.CommonMsqrtMixin)(i.SVGWrapper));e.SVGmsqrt=l},7522:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmsubsup=e.SVGmsup=e.SVGmsub=void 0;var a=r(1269),s=r(3069),l=r(3069),c=r(3069),h=r(5857),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=h.MmlMsub.prototype.kind,e}((0,s.CommonMsubMixin)(a.SVGscriptbase));e.SVGmsub=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=h.MmlMsup.prototype.kind,e}((0,l.CommonMsupMixin)(a.SVGscriptbase));e.SVGmsup=p;var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),r=i([this.baseChild,this.supChild,this.subChild],3),o=r[0],n=r[1],a=r[2],s=this.getBaseWidth(),l=this.getAdjustedIc(),c=i(this.getUVQ(),2),h=c[0],u=c[1];o.toSVG(e),n.toSVG(e),a.toSVG(e),a.place(s,u),n.place(s+l,h)},e.kind=h.MmlMsubsup.prototype.kind,e}((0,c.CommonMsubsupMixin)(a.SVGscriptbase));e.SVGmsubsup=d},451:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmtable=void 0;var s=r(9321),l=r(8589),c=r(4859),h=function(t){function e(e,r,o){void 0===o&&(o=null);var n=t.call(this,e,r,o)||this,i={\"data-labels\":!0};return n.isTop&&(i.transform=\"matrix(1 0 0 -1 0 0)\"),n.labels=n.svg(\"g\",i),n}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t);this.placeRows(e),this.handleColumnLines(e),this.handleRowLines(e),this.handleFrame(e);var r=this.handlePWidth(e);this.handleLabels(e,t,r)},e.prototype.placeRows=function(t){for(var e,r,o,n=this.node.attributes.get(\"equalrows\"),s=this.getTableData(),l=s.H,c=s.D,h=this.getEqualRowHeight(),u=this.getRowHalfSpacing(),p=a(a([this.fLine],i(this.rLines),!1),[this.fLine],!1),d=this.getBBox().h-p[0],f=0;f<this.numRows;f++){var y=this.childNodes[f];e=i(this.getRowHD(n,h,l[f],c[f]),2),y.H=e[0],y.D=e[1],r=i([u[f],u[f+1]],2),y.tSpace=r[0],y.bSpace=r[1],o=i([p[f],p[f+1]],2),y.tLine=o[0],y.bLine=o[1],y.toSVG(t),y.place(0,d-u[f]-y.H),d-=u[f]+y.H+y.D+u[f+1]+p[f+1]}},e.prototype.getRowHD=function(t,e,r,o){return t?[(e+r-o)/2,(e-r+o)/2]:[r,o]},e.prototype.handleColor=function(){t.prototype.handleColor.call(this);var e=this.firstChild();e&&this.adaptor.setAttribute(e,\"width\",this.fixed(this.getWidth()))},e.prototype.handleColumnLines=function(t){if(\"none\"!==this.node.attributes.get(\"columnlines\")){var e=this.getColumnAttributes(\"columnlines\");if(e)for(var r=this.getColumnHalfSpacing(),o=this.cLines,n=this.getComputedWidths(),i=this.fLine,a=0;a<e.length;a++)i+=r[a]+n[a]+r[a+1],\"none\"!==e[a]&&this.adaptor.append(t,this.makeVLine(i,e[a],o[a])),i+=o[a]}},e.prototype.handleRowLines=function(t){if(\"none\"!==this.node.attributes.get(\"rowlines\")){var e=this.getRowAttributes(\"rowlines\");if(e)for(var r=this.node.attributes.get(\"equalrows\"),o=this.getTableData(),n=o.H,a=o.D,s=this.getEqualRowHeight(),l=this.getRowHalfSpacing(),c=this.rLines,h=this.getBBox().h-this.fLine,u=0;u<e.length;u++){var p=i(this.getRowHD(r,s,n[u],a[u]),2),d=p[0],f=p[1];h-=l[u]+d+f+l[u+1],\"none\"!==e[u]&&this.adaptor.append(t,this.makeHLine(h,e[u],c[u])),h-=c[u]}}},e.prototype.handleFrame=function(t){if(this.frame&&this.fLine){var e=this.getBBox(),r=e.h,o=e.d,n=e.w,i=this.node.attributes.get(\"frame\");this.adaptor.append(t,this.makeFrame(n,r,o,i))}},e.prototype.handlePWidth=function(t){if(!this.pWidth)return 0;var e=this.getBBox(),r=e.w,o=e.L,n=e.R,i=o+this.pWidth+n,a=this.getAlignShift()[0],s=Math.max(this.isTop?i:0,this.container.getWrapWidth(this.containerI))-o-n,l=r-(this.pWidth>s?s:this.pWidth),c=\"left\"===a?0:\"right\"===a?l:l/2;if(c){var h=this.svg(\"g\",{},this.adaptor.childNodes(t));this.place(c,0,h),this.adaptor.append(t,h)}return c},e.prototype.lineClass=function(t){return\"mjx-\"+t},e.prototype.makeFrame=function(t,e,r,o){var n=this.fLine;return this.svg(\"rect\",this.setLineThickness(n,o,{\"data-frame\":!0,class:this.lineClass(o),width:this.fixed(t-n),height:this.fixed(e+r-n),x:this.fixed(n/2),y:this.fixed(n/2-r)}))},e.prototype.makeVLine=function(t,e,r){var o=this.getBBox(),n=o.h,i=o.d,a=\"dotted\"===e?r/2:0,s=this.fixed(t+r/2);return this.svg(\"line\",this.setLineThickness(r,e,{\"data-line\":\"v\",class:this.lineClass(e),x1:s,y1:this.fixed(a-i),x2:s,y2:this.fixed(n-a)}))},e.prototype.makeHLine=function(t,e,r){var o=this.getBBox().w,n=\"dotted\"===e?r/2:0,i=this.fixed(t-r/2);return this.svg(\"line\",this.setLineThickness(r,e,{\"data-line\":\"h\",class:this.lineClass(e),x1:this.fixed(n),y1:i,x2:this.fixed(o-n),y2:i}))},e.prototype.setLineThickness=function(t,e,r){return.07!==t&&(r[\"stroke-thickness\"]=this.fixed(t),\"solid\"!==e&&(r[\"stroke-dasharray\"]=(\"dotted\"===e?\"0,\":\"\")+this.fixed(2*t))),r},e.prototype.handleLabels=function(t,e,r){if(this.hasLabels){var o=this.labels,n=this.node.attributes.get(\"side\");this.spaceLabels(),this.isTop?this.topTable(t,o,n):this.subTable(t,o,n,r)}},e.prototype.spaceLabels=function(){for(var t=this.adaptor,e=this.getBBox().h,r=this.getTableData().L,o=this.getRowHalfSpacing(),n=e-this.fLine,i=t.firstChild(this.labels),a=0;a<this.numRows;a++){var s=this.childNodes[a];if(s.node.isKind(\"mlabeledtr\")){var l=s.childNodes[0];n-=o[a]+s.H,s.placeCell(l,{x:0,y:n,w:r,lSpace:0,rSpace:0,lLine:0,rLine:0}),n-=s.D+o[a+1]+this.rLines[a],i=t.next(i)}else n-=o[a]+s.H+s.D+o[a+1]+this.rLines[a]}},e.prototype.topTable=function(t,e,r){var o=this.adaptor,n=this.getBBox(),a=n.h,s=n.d,l=n.w,c=n.L,h=n.R,u=c+(this.pWidth||l)+h,p=this.getTableData().L,d=i(this.getPadAlignShift(r),3),f=d[1],y=d[2]+(\"right\"===f?-u:\"center\"===f?-u/2:0)+c,m=\"matrix(1 0 0 -1 0 0)\",v=\"scale(\".concat(this.jax.fixed(1e3*this.font.params.x_height/this.metrics.ex,2),\")\"),g=\"translate(0 \".concat(this.fixed(a),\") \").concat(m,\" \").concat(v),b=this.svg(\"svg\",{\"data-table\":!0,preserveAspectRatio:\"left\"===f?\"xMinYMid\":\"right\"===f?\"xMaxYMid\":\"xMidYMid\",viewBox:[this.fixed(-y),this.fixed(-a),1,this.fixed(a+s)].join(\" \")},[this.svg(\"g\",{transform:m},o.childNodes(t))]);e=this.svg(\"svg\",{\"data-labels\":!0,preserveAspectRatio:\"left\"===r?\"xMinYMid\":\"xMaxYMid\",viewBox:[\"left\"===r?0:this.fixed(p),this.fixed(-a),1,this.fixed(a+s)].join(\" \")},[e]),o.append(t,this.svg(\"g\",{transform:g},[b,e])),this.place(-c,0,t)},e.prototype.subTable=function(t,e,r,o){var n=this.adaptor,i=this.getBBox(),a=i.w,s=i.L,l=i.R,c=s+(this.pWidth||a)+l,h=this.getTableData().L,u=this.getAlignShift()[0],p=Math.max(c,this.container.getWrapWidth(this.containerI));this.place(\"left\"===r?(\"left\"===u?0:\"right\"===u?c-p+o:(c-p)/2+o)-s:(\"left\"===u?p:\"right\"===u?c+o:(p+c)/2+o)-s-h,0,e),n.append(t,e)},e.kind=c.MmlMtable.prototype.kind,e.styles={'g[data-mml-node=\"mtable\"] > line[data-line], svg[data-table] > g > line[data-line]':{\"stroke-width\":\"70px\",fill:\"none\"},'g[data-mml-node=\"mtable\"] > rect[data-frame], svg[data-table] > g > rect[data-frame]':{\"stroke-width\":\"70px\",fill:\"none\"},'g[data-mml-node=\"mtable\"] > .mjx-dashed, svg[data-table] > g > .mjx-dashed':{\"stroke-dasharray\":\"140\"},'g[data-mml-node=\"mtable\"] > .mjx-dotted, svg[data-table] > g > .mjx-dotted':{\"stroke-linecap\":\"round\",\"stroke-dasharray\":\"0,140\"},'g[data-mml-node=\"mtable\"] > g > svg':{overflow:\"visible\"}},e}((0,l.CommonMtableMixin)(s.SVGWrapper));e.SVGmtable=h},2673:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmtd=void 0;var i=r(9321),a=r(7805),s=r(2321),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.placeCell=function(t,e,r,o,n){var i=this.getBBox(),a=Math.max(i.h,.75),s=Math.max(i.d,.25),l=this.node.attributes.get(\"columnalign\"),c=this.node.attributes.get(\"rowalign\"),h=this.getAlignX(r,i,l),u=this.getAlignY(o,n,a,s,c);return this.place(t+h,e+u),[h,u]},e.prototype.placeColor=function(t,e,r,o){var n=this.adaptor,i=this.firstChild();i&&\"rect\"===n.kind(i)&&n.getAttribute(i,\"data-bgcolor\")&&(n.setAttribute(i,\"x\",this.fixed(t)),n.setAttribute(i,\"y\",this.fixed(e)),n.setAttribute(i,\"width\",this.fixed(r)),n.setAttribute(i,\"height\",this.fixed(o)))},e.kind=s.MmlMtd.prototype.kind,e}((0,a.CommonMtdMixin)(i.SVGWrapper));e.SVGmtd=l},1941:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmtext=void 0;var i=r(9321),a=r(8325),s=r(6277),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlMtext.prototype.kind,e}((0,a.CommonMtextMixin)(i.SVGWrapper));e.SVGmtext=l},4682:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,n=0,i=e.length;n<i;n++)!o&&n in e||(o||(o=Array.prototype.slice.call(e,0,n)),o[n]=e[n]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmlabeledtr=e.SVGmtr=void 0;var s=r(9321),l=r(4818),c=r(4818),h=r(4393),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t);this.placeCells(e),this.placeColor()},e.prototype.placeCells=function(t){for(var e=this.parent.getColumnHalfSpacing(),r=a(a([this.parent.fLine],i(this.parent.cLines),!1),[this.parent.fLine],!1),o=this.parent.getComputedWidths(),n=1/this.getBBox().rscale,s=r[0],l=0;l<this.numCells;l++){var c=this.getChild(l);c.toSVG(t),s+=this.placeCell(c,{x:s,y:0,lSpace:e[l]*n,rSpace:e[l+1]*n,w:o[l]*n,lLine:r[l]*n,rLine:r[l+1]*n})}},e.prototype.placeCell=function(t,e){var r=e.x,o=e.y,n=e.lSpace,a=e.w,s=e.rSpace,l=e.lLine,c=e.rLine,h=1/this.getBBox().rscale,u=i([this.H*h,this.D*h],2),p=u[0],d=u[1],f=i([this.tSpace*h,this.bSpace*h],2),y=f[0],m=f[1],v=i(t.placeCell(r+n,o,a,p,d),2),g=v[0],b=v[1],x=n+a+s;return t.placeColor(-(g+n+l/2),-(d+m+b),x+(l+c)/2,p+d+y+m),x+c},e.prototype.placeColor=function(){var t=1/this.getBBox().rscale,e=this.adaptor,r=this.firstChild();if(r&&\"rect\"===e.kind(r)&&e.getAttribute(r,\"data-bgcolor\")){var o=i([this.tLine/2*t,this.bLine/2*t],2),n=o[0],a=o[1],s=i([this.tSpace*t,this.bSpace*t],2),l=s[0],c=s[1],h=i([this.H*t,this.D*t],2),u=h[0],p=h[1];e.setAttribute(r,\"y\",this.fixed(-(p+c+a))),e.setAttribute(r,\"width\",this.fixed(this.parent.getWidth()*t)),e.setAttribute(r,\"height\",this.fixed(n+l+u+p+c+a))}},e.kind=h.MmlMtr.prototype.kind,e}((0,l.CommonMtrMixin)(s.SVGWrapper));e.SVGmtr=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(e){t.prototype.toSVG.call(this,e);var r=this.childNodes[0];r&&r.toSVG(this.parent.labels)},e.kind=h.MmlMlabeledtr.prototype.kind,e}((0,c.CommonMlabeledtrMixin)(u));e.SVGmlabeledtr=p},4299:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmunderover=e.SVGmover=e.SVGmunder=void 0;var a=r(7522),s=r(9690),l=r(9690),c=r(9690),h=r(3102),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(e){if(this.hasMovableLimits())t.prototype.toSVG.call(this,e);else{var r=this.standardSVGnode(e),o=i([this.baseChild,this.scriptChild],2),n=o[0],a=o[1],s=i([n.getOuterBBox(),a.getOuterBBox()],2),l=s[0],c=s[1];n.toSVG(r),a.toSVG(r);var h=this.isLineBelow?0:this.getDelta(!0),u=this.getUnderKV(l,c)[1],p=i(this.getDeltaW([l,c],[0,-h]),2),d=p[0],f=p[1];n.place(d,0),a.place(f,u)}},e.kind=h.MmlMunder.prototype.kind,e}((0,s.CommonMunderMixin)(a.SVGmsub));e.SVGmunder=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(e){if(this.hasMovableLimits())t.prototype.toSVG.call(this,e);else{var r=this.standardSVGnode(e),o=i([this.baseChild,this.scriptChild],2),n=o[0],a=o[1],s=i([n.getOuterBBox(),a.getOuterBBox()],2),l=s[0],c=s[1];n.toSVG(r),a.toSVG(r);var h=this.isLineAbove?0:this.getDelta(),u=this.getOverKU(l,c)[1],p=i(this.getDeltaW([l,c],[0,h]),2),d=p[0],f=p[1];n.place(d,0),a.place(f,u)}},e.kind=h.MmlMover.prototype.kind,e}((0,l.CommonMoverMixin)(a.SVGmsup));e.SVGmover=p;var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(e){if(this.hasMovableLimits())t.prototype.toSVG.call(this,e);else{var r=this.standardSVGnode(e),o=i([this.baseChild,this.overChild,this.underChild],3),n=o[0],a=o[1],s=o[2],l=i([n.getOuterBBox(),a.getOuterBBox(),s.getOuterBBox()],3),c=l[0],h=l[1],u=l[2];n.toSVG(r),s.toSVG(r),a.toSVG(r);var p=this.getDelta(),d=this.getOverKU(c,h)[1],f=this.getUnderKV(c,u)[1],y=i(this.getDeltaW([c,u,h],[0,this.isLineBelow?0:-p,this.isLineAbove?0:p]),3),m=y[0],v=y[1],g=y[2];n.place(m,0),s.place(v,f),a.place(g,d)}},e.kind=h.MmlMunderover.prototype.kind,e}((0,c.CommonMunderoverMixin)(a.SVGmsubsup));e.SVGmunderover=d},1269:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,n,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGscriptbase=void 0;var a=r(9321),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),r=this.getBaseWidth(),o=i(this.getOffset(),2),n=o[0],a=o[1];this.baseChild.toSVG(e),this.scriptChild.toSVG(e),this.scriptChild.place(r+n,a)},e.kind=\"scriptbase\",e}((0,r(7091).CommonScriptbaseMixin)(a.SVGWrapper));e.SVGscriptbase=s},6965:function(t,e,r){var o,n=this&&this.__extends||(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGxml=e.SVGannotationXML=e.SVGannotation=e.SVGsemantics=void 0;var i=r(9321),a=r(3191),s=r(9167),l=r(8921),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t);this.childNodes.length&&this.childNodes[0].toSVG(e)},e.kind=s.MmlSemantics.prototype.kind,e}((0,a.CommonSemanticsMixin)(i.SVGWrapper));e.SVGsemantics=c;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(e){t.prototype.toSVG.call(this,e)},e.prototype.computeBBox=function(){return this.bbox},e.kind=s.MmlAnnotation.prototype.kind,e}(i.SVGWrapper);e.SVGannotation=h;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.kind=s.MmlAnnotationXML.prototype.kind,e.styles={\"foreignObject[data-mjx-xml]\":{\"font-family\":\"initial\",\"line-height\":\"normal\",overflow:\"visible\"}},e}(i.SVGWrapper);e.SVGannotationXML=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.toSVG=function(t){var e=this.adaptor.clone(this.node.getXML()),r=this.jax.math.metrics.em*this.jax.math.metrics.scale,o=this.fixed(1/r),n=this.getBBox(),i=n.w,a=n.h,s=n.d;this.element=this.adaptor.append(t,this.svg(\"foreignObject\",{\"data-mjx-xml\":!0,y:this.jax.fixed(-a*r)+\"px\",width:this.jax.fixed(i*r)+\"px\",height:this.jax.fixed((a+s)*r)+\"px\",transform:\"scale(\".concat(o,\") matrix(1 0 0 -1 0 0)\")},[e]))},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.jax.measureXMLnode(this.node.getXML()),o=r.w,n=r.h,i=r.d;t.w=o,t.h=n,t.d=i},e.prototype.getStyles=function(){},e.prototype.getScale=function(){},e.prototype.getVariant=function(){},e.kind=l.XMLNode.prototype.kind,e.autoStyle=!1,e}(i.SVGWrapper);e.SVGxml=p},8723:function(t,e){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,e.PV=MathJax._.components.global.combineDefaults,e.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},4769:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},8921:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.TEXCLASS=MathJax._.core.MmlTree.MmlNode.TEXCLASS,e.TEXCLASSNAMES=MathJax._.core.MmlTree.MmlNode.TEXCLASSNAMES,e.indentAttributes=MathJax._.core.MmlTree.MmlNode.indentAttributes,e.AbstractMmlNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlNode,e.AbstractMmlTokenNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlTokenNode,e.AbstractMmlLayoutNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlLayoutNode,e.AbstractMmlBaseNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlBaseNode,e.AbstractMmlEmptyNode=MathJax._.core.MmlTree.MmlNode.AbstractMmlEmptyNode,e.TextNode=MathJax._.core.MmlTree.MmlNode.TextNode,e.XMLNode=MathJax._.core.MmlTree.MmlNode.XMLNode},4282:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.TeXAtom=MathJax._.core.MmlTree.MmlNodes.TeXAtom.TeXAtom},3969:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMaction=MathJax._.core.MmlTree.MmlNodes.maction.MmlMaction},304:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMath=MathJax._.core.MmlTree.MmlNodes.math.MmlMath},4374:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMenclose=MathJax._.core.MmlTree.MmlNodes.menclose.MmlMenclose},8078:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMerror=MathJax._.core.MmlTree.MmlNodes.merror.MmlMerror},7451:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMfenced=MathJax._.core.MmlTree.MmlNodes.mfenced.MmlMfenced},848:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMfrac=MathJax._.core.MmlTree.MmlNodes.mfrac.MmlMfrac},910:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMglyph=MathJax._.core.MmlTree.MmlNodes.mglyph.MmlMglyph},7754:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMi=MathJax._.core.MmlTree.MmlNodes.mi.MmlMi},7764:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMmultiscripts=MathJax._.core.MmlTree.MmlNodes.mmultiscripts.MmlMmultiscripts,e.MmlMprescripts=MathJax._.core.MmlTree.MmlNodes.mmultiscripts.MmlMprescripts,e.MmlNone=MathJax._.core.MmlTree.MmlNodes.mmultiscripts.MmlNone},3235:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMn=MathJax._.core.MmlTree.MmlNodes.mn.MmlMn},9946:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMo=MathJax._.core.MmlTree.MmlNodes.mo.MmlMo},189:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMpadded=MathJax._.core.MmlTree.MmlNodes.mpadded.MmlMpadded},7988:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMphantom=MathJax._.core.MmlTree.MmlNodes.mphantom.MmlMphantom},4664:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMroot=MathJax._.core.MmlTree.MmlNodes.mroot.MmlMroot},1691:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMrow=MathJax._.core.MmlTree.MmlNodes.mrow.MmlMrow,e.MmlInferredMrow=MathJax._.core.MmlTree.MmlNodes.mrow.MmlInferredMrow},4042:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMs=MathJax._.core.MmlTree.MmlNodes.ms.MmlMs},1465:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMspace=MathJax._.core.MmlTree.MmlNodes.mspace.MmlMspace},4655:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMsqrt=MathJax._.core.MmlTree.MmlNodes.msqrt.MmlMsqrt},5857:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMsubsup=MathJax._.core.MmlTree.MmlNodes.msubsup.MmlMsubsup,e.MmlMsub=MathJax._.core.MmlTree.MmlNodes.msubsup.MmlMsub,e.MmlMsup=MathJax._.core.MmlTree.MmlNodes.msubsup.MmlMsup},4859:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtable=MathJax._.core.MmlTree.MmlNodes.mtable.MmlMtable},2321:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtd=MathJax._.core.MmlTree.MmlNodes.mtd.MmlMtd},6277:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtext=MathJax._.core.MmlTree.MmlNodes.mtext.MmlMtext},4393:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtr=MathJax._.core.MmlTree.MmlNodes.mtr.MmlMtr,e.MmlMlabeledtr=MathJax._.core.MmlTree.MmlNodes.mtr.MmlMlabeledtr},3102:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMunderover=MathJax._.core.MmlTree.MmlNodes.munderover.MmlMunderover,e.MmlMunder=MathJax._.core.MmlTree.MmlNodes.munderover.MmlMunder,e.MmlMover=MathJax._.core.MmlTree.MmlNodes.munderover.MmlMover},9167:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlSemantics=MathJax._.core.MmlTree.MmlNodes.semantics.MmlSemantics,e.MmlAnnotationXML=MathJax._.core.MmlTree.MmlNodes.semantics.MmlAnnotationXML,e.MmlAnnotation=MathJax._.core.MmlTree.MmlNodes.semantics.MmlAnnotation},3985:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractOutputJax=MathJax._.core.OutputJax.AbstractOutputJax},9879:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractWrapper=MathJax._.core.Tree.Wrapper.AbstractWrapper},2506:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractWrapperFactory=MathJax._.core.Tree.WrapperFactory.AbstractWrapperFactory},3717:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.BBox=MathJax._.util.BBox.BBox},9077:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.isObject=MathJax._.util.Options.isObject,e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.OPTIONS=MathJax._.util.Options.OPTIONS,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions,e.lookup=MathJax._.util.Options.lookup},5888:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.CssStyles=MathJax._.util.StyleList.CssStyles},5878:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.Styles=MathJax._.util.Styles.Styles},6914:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.BIGDIMEN=MathJax._.util.lengths.BIGDIMEN,e.UNITS=MathJax._.util.lengths.UNITS,e.RELUNITS=MathJax._.util.lengths.RELUNITS,e.MATHSPACE=MathJax._.util.lengths.MATHSPACE,e.length2em=MathJax._.util.lengths.length2em,e.percent=MathJax._.util.lengths.percent,e.em=MathJax._.util.lengths.em,e.emRounded=MathJax._.util.lengths.emRounded,e.px=MathJax._.util.lengths.px},1490:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.sum=MathJax._.util.numeric.sum,e.max=MathJax._.util.numeric.max},6720:function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.sortLength=MathJax._.util.string.sortLength,e.quotePattern=MathJax._.util.string.quotePattern,e.unicodeChars=MathJax._.util.string.unicodeChars,e.unicodeString=MathJax._.util.string.unicodeString,e.isPercent=MathJax._.util.string.isPercent,e.split=MathJax._.util.string.split},4142:function(t,e,r){r.r(e),r.d(e,{TeXFont:function(){return u}});var o=r(9708);function n(t){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},n(t)}function i(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function a(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function s(t,e){return s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},s(t,e)}function l(t){var e=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,o=h(t);if(e){var n=h(this).constructor;r=Reflect.construct(o,arguments,n)}else r=o.apply(this,arguments);return c(this,r)}}function c(t,e){if(e&&(\"object\"===n(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}function h(t){return h=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},h(t)}var u=function(t){!function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),e&&s(t,e)}(c,t);var e,r,o,n=l(c);function c(){return a(this,c),n.apply(this,arguments)}return e=c,r&&i(e.prototype,r),o&&i(e,o),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(o.FontData);u.OPTIONS={fontURL:\".\"}}},yt={};function mt(t){var e=yt[t];if(void 0!==e)return e.exports;var r=yt[t]={exports:{}};return ft[t].call(r.exports,r,r.exports,mt),r.exports}mt.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return mt.d(e,{a:e}),e},mt.d=function(t,e){for(var r in e)mt.o(e,r)&&!mt.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},mt.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},mt.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},t=mt(8723),e=mt(7306),r=mt(9250),o=mt(5373),n=mt(716),i=mt(1541),a=mt(1475),s=mt(3438),l=mt(555),c=mt(3345),h=mt(2057),u=mt(6200),p=mt(1346),d=mt(5705),f=mt(7969),y=mt(1419),m=mt(9906),v=mt(2304),g=mt(437),b=mt(7481),x=mt(5997),_=mt(9323),M=mt(6920),w=mt(37),S=mt(222),O=mt(3069),C=mt(8589),B=mt(7805),j=mt(8325),P=mt(4818),A=mt(9690),V=mt(7091),T=mt(3191),k=mt(6582),G=mt(4129),N=mt(9708),L=mt(9737),D=mt(9321),W=mt(9416),E=mt(4687),R=mt(484),I=mt(7455),F=mt(4601),H=mt(1211),J=mt(144),X=mt(3007),z=mt(5258),q=mt(9295),K=mt(4916),U=mt(2983),Q=mt(4750),Y=mt(9810),Z=mt(6760),$=mt(4539),tt=mt(438),et=mt(8798),rt=mt(322),ot=mt(3677),nt=mt(2458),it=mt(9948),at=mt(7522),st=mt(451),lt=mt(2673),ct=mt(1941),ht=mt(4682),ut=mt(4299),pt=mt(1269),dt=mt(6965),MathJax.loader&&MathJax.loader.checkVersion(\"output/svg\",e.q,\"output\"),(0,t.r8)({_:{output:{common:{FontData:r,Notation:o,OutputJax:n,Wrapper:i,WrapperFactory:a,Wrappers:{TeXAtom:s,TextNode:l,maction:c,math:h,menclose:u,mfenced:p,mfrac:d,mglyph:f,mi:y,mmultiscripts:m,mn:v,mo:g,mpadded:b,mroot:x,mrow:_,ms:M,mspace:w,msqrt:S,msubsup:O,mtable:C,mtd:B,mtext:j,mtr:P,munderover:A,scriptbase:V,semantics:T}},svg_ts:k,svg:{FontCache:G,FontData:N,Notation:L,Wrapper:D,WrapperFactory:W,Wrappers_ts:E,Wrappers:{TeXAtom:R,TextNode:I,maction:F,math:H,menclose:J,merror:X,mfenced:z,mfrac:q,mglyph:K,mi:U,mmultiscripts:Q,mn:Y,mo:Z,mpadded:$,mphantom:tt,mroot:et,mrow:rt,ms:ot,mspace:nt,msqrt:it,msubsup:at,mtable:st,mtd:lt,mtext:ct,mtr:ht,munderover:ut,scriptbase:pt,semantics:dt}}}}}),MathJax.loader&&(0,t.PV)(MathJax.config.loader,\"output/svg\",{checkReady:function(){return MathJax.loader.load(\"output/svg/fonts/tex\")}}),MathJax.startup&&(MathJax.startup.registerConstructor(\"svg\",k.SVG),MathJax.startup.useOutput(\"svg\"))}();"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/sre/mathmaps/de.js",
    "content": "{\n\"de/functions/algebra.js\": \n[{\"locale\":\"de\"},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"Grad\"}},\"key\":\"deg\",\"names\":[\"deg\"]},{\"key\":\"det\",\"mappings\":{\"default\":{\"default\":\"Determinante\"}},\"category\":\"Algebra\",\"names\":[\"det\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"Dimension\"}},\"key\":\"dim\",\"names\":[\"dim\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"Homomorphismus\"},\"mathspeak\":{\"default\":\"hom\"},\"clearspeak\":{\"default\":\"hom\"}},\"key\":\"hom\",\"names\":[\"hom\",\"Hom\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"Kern\"}},\"key\":\"ker\",\"names\":[\"ker\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"Spur\"}},\"key\":\"Tr\",\"names\":[\"Tr\",\"tr\"]}]\n,\n\"de/functions/elementary.js\": \n[{\"locale\":\"de\"},{\"key\":\"log\",\"mappings\":{\"default\":{\"default\":\"Logarithmus\"}},\"category\":\"Logarithm\",\"names\":[\"log\"]},{\"key\":\"ln\",\"mappings\":{\"default\":{\"default\":\"natürlicher Logarithmus\"}},\"category\":\"Logarithm\",\"names\":[\"ln\"]},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"Logarithmus zur Basis 10\"}},\"key\":\"lg\",\"names\":[\"lg\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"Exponent\"},\"mathspeak\":{\"default\":\"exp\"},\"clearspeak\":{\"default\":\"exp\"}},\"key\":\"exp\",\"names\":[\"exp\",\"expt\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"größter gemeinsamer Teiler\"},\"mathspeak\":{\"default\":\"ggt\"},\"clearspeak\":{\"default\":\"ggt\"}},\"key\":\"gcd\",\"names\":[\"gcd\",\"ggt\",\"ggT\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"kleinstes gemeinsames Vielfaches\"},\"mathspeak\":{\"default\":\"kgv\"},\"clearspeak\":{\"default\":\"kgv\"}},\"key\":\"lcm\",\"names\":[\"lcm\",\"kgv\",\"kgV\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"Argument\"}},\"key\":\"arg\",\"names\":[\"arg\"]},{\"key\":\"im\",\"mappings\":{\"default\":{\"default\":\"der Imaginärteil der komplexen Zahl\"}},\"category\":\"Complex\",\"names\":[\"im\"]},{\"key\":\"re\",\"mappings\":{\"default\":{\"default\":\"der Realteil der komplexen Zahl\"}},\"category\":\"Complex\",\"names\":[\"re\"]},{\"key\":\"mod\",\"mappings\":{\"default\":{\"default\":\"modulo\"}},\"category\":\"Elementary\",\"names\":[\"mod\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Infimum\"}},\"key\":\"inf\",\"names\":[\"inf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Limes\"}},\"key\":\"lim\",\"names\":[\"lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Limes inferior\"}},\"key\":\"liminf\",\"names\":[\"lim inf\",\"liminf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Limes superior\"}},\"key\":\"limsup\",\"names\":[\"lim sup\",\"limsup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Maximum\"}},\"key\":\"max\",\"names\":[\"max\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Minimum\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Supremum\"}},\"key\":\"sup\",\"names\":[\"sup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Colimes\"}},\"key\":\"injlim\",\"names\":[\"injlim\",\"inj lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"projektiver Limes\"}},\"key\":\"projlim\",\"names\":[\"projlim\",\"proj lim\"]},{\"category\":\"Probability\",\"mappings\":{\"default\":{\"default\":\"Wahrscheinlichkeit\"}},\"key\":\"Pr\",\"names\":[\"Pr\"]}]\n,\n\"de/functions/hyperbolic.js\": \n[{\"locale\":\"de\"},{\"key\":\"cosh\",\"mappings\":{\"default\":{\"default\":\"Kosinus hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"cosh\"]},{\"key\":\"coth\",\"mappings\":{\"default\":{\"default\":\"Kotangens hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"coth\"]},{\"key\":\"csch\",\"mappings\":{\"default\":{\"default\":\"Kosekans hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"csch\"]},{\"key\":\"sech\",\"mappings\":{\"default\":{\"default\":\"Sekans hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"sech\"]},{\"key\":\"sinh\",\"mappings\":{\"default\":{\"default\":\"Sinus hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"sinh\"]},{\"key\":\"tanh\",\"mappings\":{\"default\":{\"default\":\"Tangens hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"tanh\"]},{\"key\":\"arcosh\",\"mappings\":{\"default\":{\"default\":\"Areakosinus hyperbolicus\"}},\"category\":\"Area\",\"names\":[\"arcosh\",\"arccosh\"]},{\"key\":\"arcoth\",\"mappings\":{\"default\":{\"default\":\"Areakotangens hyperbolicus\"}},\"category\":\"Area\",\"names\":[\"arcoth\",\"arccoth\"]},{\"key\":\"arcsch\",\"mappings\":{\"default\":{\"default\":\"Areakosekans hyperbolicus\"}},\"category\":\"Area\",\"names\":[\"arcsch\",\"arccsch\"]},{\"key\":\"arsech\",\"mappings\":{\"default\":{\"default\":\"Areasekans hyperbolicus\"}},\"category\":\"Area\",\"names\":[\"arsech\",\"arcsech\"]},{\"key\":\"arsinh\",\"mappings\":{\"default\":{\"default\":\"Areasinus hyperbolicus\"}},\"category\":\"Area\",\"names\":[\"arsinh\",\"arcsinh\"]},{\"key\":\"artanh\",\"mappings\":{\"default\":{\"default\":\"Areatangens hyperbolicus \"}},\"category\":\"Area\",\"names\":[\"artanh\",\"arctanh\"]}]\n,\n\"de/functions/trigonometry.js\": \n[{\"locale\":\"de\"},{\"key\":\"cos\",\"mappings\":{\"default\":{\"default\":\"Kosinus\"}},\"category\":\"Trigonometric\",\"names\":[\"cos\",\"cosine\"]},{\"key\":\"cot\",\"mappings\":{\"default\":{\"default\":\"Kotangens\"}},\"category\":\"Trigonometric\",\"names\":[\"cot\"]},{\"key\":\"csc\",\"mappings\":{\"default\":{\"default\":\"Kosekans\"}},\"category\":\"Trigonometric\",\"names\":[\"csc\"]},{\"key\":\"sec\",\"mappings\":{\"default\":{\"default\":\"Sekans\"}},\"category\":\"Trigonometric\",\"names\":[\"sec\"]},{\"key\":\"sin\",\"mappings\":{\"default\":{\"default\":\"Sinus\"}},\"category\":\"Trigonometric\",\"names\":[\"sin\",\"sine\"]},{\"key\":\"tan\",\"mappings\":{\"default\":{\"default\":\"Tangens\"}},\"category\":\"Trigonometric\",\"names\":[\"tan\"]},{\"key\":\"arccos\",\"mappings\":{\"default\":{\"default\":\"Arkuskosinus\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Kosinus\"}},\"category\":\"Cyclometric\",\"names\":[\"arccos\"]},{\"key\":\"arccot\",\"mappings\":{\"default\":{\"default\":\"Arkuskotangens\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Kotangens\"}},\"category\":\"Cyclometric\",\"names\":[\"arccot\"]},{\"key\":\"arccsc\",\"mappings\":{\"default\":{\"default\":\"Arkuskosekans\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Kosekans\"}},\"category\":\"Cyclometric\",\"names\":[\"arccsc\"]},{\"key\":\"arcsec\",\"mappings\":{\"default\":{\"default\":\"Arkussekans\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Sekans\"}},\"category\":\"Cyclometric\",\"names\":[\"arcsec\"]},{\"key\":\"arcsin\",\"mappings\":{\"default\":{\"default\":\"Arkussinus\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Sinus\"}},\"category\":\"Cyclometric\",\"names\":[\"arcsin\"]},{\"key\":\"arctan\",\"mappings\":{\"default\":{\"default\":\"Arkustangens\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Tangens\"}},\"category\":\"Cyclometric\",\"names\":[\"arctan\"]}]\n,\n\"de/symbols/digits_rest.js\": \n[{\"locale\":\"de\"},{\"key\":\"00B2\",\"mappings\":{\"default\":{\"default\":\"Quadrat\"},\"clearspeak\":{\"Exponent_Exponent\":\"mit Exponent 2\",\"Exponent_OrdinalPower\":\"zur zweiten Potenz\"}},\"category\":\"No\"},{\"key\":\"00B3\",\"mappings\":{\"default\":{\"default\":\"Kubik\"},\"clearspeak\":{\"Exponent_Exponent\":\"mit Exponent 3\",\"Exponent_OrdinalPower\":\"zur dritten Potenz\"}},\"category\":\"No\"},{\"key\":\"00BC\",\"mappings\":{\"default\":{\"default\":\"ein Viertel\"}},\"category\":\"No\"},{\"key\":\"00BD\",\"mappings\":{\"default\":{\"default\":\"ein Halb\"}},\"category\":\"No\"},{\"key\":\"00BE\",\"mappings\":{\"default\":{\"default\":\"drei Viertel\"}},\"category\":\"No\"},{\"category\":\"No\",\"key\":\"2150\",\"mappings\":{\"default\":{\"default\":\"ein siebtel\"}}},{\"category\":\"No\",\"key\":\"2151\",\"mappings\":{\"default\":{\"default\":\"ein neuntel\"}}},{\"category\":\"No\",\"key\":\"2152\",\"mappings\":{\"default\":{\"default\":\"ein zehntel\"}}},{\"category\":\"No\",\"key\":\"2153\",\"mappings\":{\"default\":{\"default\":\"ein drittel\"}}},{\"category\":\"No\",\"key\":\"2154\",\"mappings\":{\"default\":{\"default\":\"zwei drittel\"}}},{\"category\":\"No\",\"key\":\"2155\",\"mappings\":{\"default\":{\"default\":\"ein fünftel\"}}},{\"category\":\"No\",\"key\":\"2156\",\"mappings\":{\"default\":{\"default\":\"zwei fünftel\"}}},{\"category\":\"No\",\"key\":\"2157\",\"mappings\":{\"default\":{\"default\":\"drei fünftel\"}}},{\"category\":\"No\",\"key\":\"2158\",\"mappings\":{\"default\":{\"default\":\"vier fünftel\"}}},{\"category\":\"No\",\"key\":\"2159\",\"mappings\":{\"default\":{\"default\":\"ein sechstel\"}}},{\"category\":\"No\",\"key\":\"215A\",\"mappings\":{\"default\":{\"default\":\"fünf sechstel\"}}},{\"category\":\"No\",\"key\":\"215B\",\"mappings\":{\"default\":{\"default\":\"ein achtel\"}}},{\"category\":\"No\",\"key\":\"215C\",\"mappings\":{\"default\":{\"default\":\"drei achtel\"}}},{\"category\":\"No\",\"key\":\"215D\",\"mappings\":{\"default\":{\"default\":\"fünf achtel\"}}},{\"category\":\"No\",\"key\":\"215E\",\"mappings\":{\"default\":{\"default\":\"sieben achtel\"}}},{\"category\":\"No\",\"key\":\"215F\",\"mappings\":{\"default\":{\"default\":\"Bruchzähler eins\"}}},{\"category\":\"No\",\"key\":\"2189\",\"mappings\":{\"default\":{\"default\":\"null drittel\"}}},{\"category\":\"No\",\"key\":\"3248\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Zehn auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"3249\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Zwanzig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324A\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Dreißig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324B\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Vierzig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324C\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Fünfzig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324D\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Sechzig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324E\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Siebzig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324F\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Achtzig auf schwarzem Quadrat\"}}}]\n,\n\"de/symbols/greek-rest.js\": \n[{\"locale\":\"de\"},{\"key\":\"0394\",\"mappings\":{\"clearspeak\":{\"default\":\"Dreieck\",\"TriangleSymbol_Delta\":\"großes Delta\"}},\"category\":\"Lu\"}]\n,\n\"de/symbols/greek-scripts.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"1D26\",\"mappings\":{\"default\":{\"default\":\"Kapitälchen Gamma\"}}},{\"category\":\"Ll\",\"key\":\"1D27\",\"mappings\":{\"default\":{\"default\":\"Kapitälchen Lamda\"}}},{\"category\":\"Ll\",\"key\":\"1D28\",\"mappings\":{\"default\":{\"default\":\"Kapitälchen Pi\"}}},{\"category\":\"Ll\",\"key\":\"1D29\",\"mappings\":{\"default\":{\"default\":\"Kapitälchen Rho\"}}},{\"category\":\"Ll\",\"key\":\"1D2A\",\"mappings\":{\"default\":{\"default\":\"Kapitälchen Psi\"}}},{\"category\":\"Lm\",\"key\":\"1D5E\",\"mappings\":{\"default\":{\"default\":\"hochgestelltes gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D60\",\"mappings\":{\"default\":{\"default\":\"hochgestelltes phi\"}}},{\"category\":\"Lm\",\"key\":\"1D66\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes beta\"}}},{\"category\":\"Lm\",\"key\":\"1D67\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D68\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes rho\"}}},{\"category\":\"Lm\",\"key\":\"1D69\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes phi\"}}},{\"category\":\"Lm\",\"key\":\"1D6A\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes chi\"}}}]\n,\n\"de/symbols/greek-symbols.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"03D0\",\"mappings\":{\"default\":{\"default\":\"beta\"}}},{\"category\":\"Ll\",\"key\":\"03D7\",\"mappings\":{\"default\":{\"default\":\"kai\"}}},{\"category\":\"Sm\",\"key\":\"03F6\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes epsilon\"}}},{\"category\":\"Lu\",\"key\":\"1D7CA\",\"mappings\":{\"default\":{\"default\":\"fettes großes Digamma\"}}},{\"category\":\"Ll\",\"key\":\"1D7CB\",\"mappings\":{\"default\":{\"default\":\"fettes digamma\"}}}]\n,\n\"de/symbols/hebrew_letters.js\": \n[{\"locale\":\"de\"},{\"category\":\"Lo\",\"key\":\"2135\",\"mappings\":{\"default\":{\"default\":\"Alef-Symbol\"}}},{\"category\":\"Lo\",\"key\":\"2136\",\"mappings\":{\"default\":{\"default\":\"Bet-Symbol\"}}},{\"category\":\"Lo\",\"key\":\"2137\",\"mappings\":{\"default\":{\"default\":\"Gimel-Symbol\"}}},{\"category\":\"Lo\",\"key\":\"2138\",\"mappings\":{\"default\":{\"default\":\"Dalet-Symbol\"}}}]\n,\n\"de/symbols/latin-lower-double-accent.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"01D6\",\"mappings\":{\"default\":{\"default\":\"u mit Diärese und Makron\"}}},{\"category\":\"Ll\",\"key\":\"01D8\",\"mappings\":{\"default\":{\"default\":\"u mit Diärese und Akut\"}}},{\"category\":\"Ll\",\"key\":\"01DA\",\"mappings\":{\"default\":{\"default\":\"u mit Diärese und Caron\"}}},{\"category\":\"Ll\",\"key\":\"01DC\",\"mappings\":{\"default\":{\"default\":\"u mit Diärese und Grab\"}}},{\"category\":\"Ll\",\"key\":\"01DF\",\"mappings\":{\"default\":{\"default\":\"a mit Diärese und Makron\"}}},{\"category\":\"Ll\",\"key\":\"01E1\",\"mappings\":{\"default\":{\"default\":\"a mit Dot Above und Makron\"}}},{\"category\":\"Ll\",\"key\":\"01ED\",\"mappings\":{\"default\":{\"default\":\"o mit Ogonek und Makron\"}}},{\"category\":\"Ll\",\"key\":\"01FB\",\"mappings\":{\"default\":{\"default\":\"a mit Ring oben und akut\"}}},{\"category\":\"Ll\",\"key\":\"022B\",\"mappings\":{\"default\":{\"default\":\"o mit Diärese und Makron\"}}},{\"category\":\"Ll\",\"key\":\"022D\",\"mappings\":{\"default\":{\"default\":\"o mit Tilde und Makron\"}}},{\"category\":\"Ll\",\"key\":\"0231\",\"mappings\":{\"default\":{\"default\":\"o mit Punkt oben und Makron\"}}},{\"category\":\"Ll\",\"key\":\"1E09\",\"mappings\":{\"default\":{\"default\":\"c mit Cedilla und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E15\",\"mappings\":{\"default\":{\"default\":\"e mit Makron und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1E17\",\"mappings\":{\"default\":{\"default\":\"e mit Makron und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E1D\",\"mappings\":{\"default\":{\"default\":\"e mit Cedilla und Breve\"}}},{\"category\":\"Ll\",\"key\":\"1E2F\",\"mappings\":{\"default\":{\"default\":\"i mit Diärese und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E39\",\"mappings\":{\"default\":{\"default\":\"l mit Punkt unten und Makron\"}}},{\"category\":\"Ll\",\"key\":\"1E4D\",\"mappings\":{\"default\":{\"default\":\"o mit Tilde und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E4F\",\"mappings\":{\"default\":{\"default\":\"o mit Tilde und Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E51\",\"mappings\":{\"default\":{\"default\":\"o mit Makron und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1E53\",\"mappings\":{\"default\":{\"default\":\"o mit Makron und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E5D\",\"mappings\":{\"default\":{\"default\":\"r mit Punkt unten und Makron\"}}},{\"category\":\"Ll\",\"key\":\"1E65\",\"mappings\":{\"default\":{\"default\":\"s mit Akute und Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E67\",\"mappings\":{\"default\":{\"default\":\"s mit Caron und Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E69\",\"mappings\":{\"default\":{\"default\":\"s mit Punkt unten und Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E79\",\"mappings\":{\"default\":{\"default\":\"u mit Tilde und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E7B\",\"mappings\":{\"default\":{\"default\":\"u mit Makron und Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1EA5\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1EA7\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EA9\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EAB\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EAD\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Ll\",\"key\":\"1EAF\",\"mappings\":{\"default\":{\"default\":\"a mit Breve und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1EB1\",\"mappings\":{\"default\":{\"default\":\"a mit Breve und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EB3\",\"mappings\":{\"default\":{\"default\":\"a mit Breve und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EB5\",\"mappings\":{\"default\":{\"default\":\"a mit Breve und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EB7\",\"mappings\":{\"default\":{\"default\":\"a mit Breve und Dot Below\"}}},{\"category\":\"Ll\",\"key\":\"1EBF\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1EC1\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EC3\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EC5\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EC7\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Ll\",\"key\":\"1ED1\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1ED3\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1ED5\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1ED7\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1ED9\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Ll\",\"key\":\"1EDB\",\"mappings\":{\"default\":{\"default\":\"o mit Horn und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1EDD\",\"mappings\":{\"default\":{\"default\":\"o mit Horn und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EDF\",\"mappings\":{\"default\":{\"default\":\"o mit Horn und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EE1\",\"mappings\":{\"default\":{\"default\":\"o mit Horn und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EE3\",\"mappings\":{\"default\":{\"default\":\"o mit Horn und Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1EE9\",\"mappings\":{\"default\":{\"default\":\"u mit Horn und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1EEB\",\"mappings\":{\"default\":{\"default\":\"u mit Horn und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EED\",\"mappings\":{\"default\":{\"default\":\"u mit Horn und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EEF\",\"mappings\":{\"default\":{\"default\":\"u mit Horn und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EF1\",\"mappings\":{\"default\":{\"default\":\"u mit Horn und Punkt\"}}}]\n,\n\"de/symbols/latin-lower-phonetic.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"00F8\",\"mappings\":{\"default\":{\"default\":\"o mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0111\",\"mappings\":{\"default\":{\"default\":\"d mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0127\",\"mappings\":{\"default\":{\"default\":\"h mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0142\",\"mappings\":{\"default\":{\"default\":\"l mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0167\",\"mappings\":{\"default\":{\"default\":\"t mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0180\",\"mappings\":{\"default\":{\"default\":\"b mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"019B\",\"mappings\":{\"default\":{\"default\":\"lambda mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"01B6\",\"mappings\":{\"default\":{\"default\":\"z mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"01BE\",\"mappings\":{\"default\":{\"default\":\"umgekehrter Glottalanschlag mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"01E5\",\"mappings\":{\"default\":{\"default\":\"g mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"01FF\",\"mappings\":{\"default\":{\"default\":\"o mit Strich und Akut\"}}},{\"category\":\"Ll\",\"key\":\"023C\",\"mappings\":{\"default\":{\"default\":\"c mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0247\",\"mappings\":{\"default\":{\"default\":\"e mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0249\",\"mappings\":{\"default\":{\"default\":\"j mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"024D\",\"mappings\":{\"default\":{\"default\":\"r mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"024F\",\"mappings\":{\"default\":{\"default\":\"y mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"025F\",\"mappings\":{\"default\":{\"default\":\"punktloses j mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0268\",\"mappings\":{\"default\":{\"default\":\"i mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0284\",\"mappings\":{\"default\":{\"default\":\"punktloses j mit Strich und Haken\"}}},{\"category\":\"Ll\",\"key\":\"02A1\",\"mappings\":{\"default\":{\"default\":\"Glottalanschlag mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"02A2\",\"mappings\":{\"default\":{\"default\":\"umgekehrter Glottalanschlag mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"1D13\",\"mappings\":{\"default\":{\"default\":\"liegendes O mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"1D7C\",\"mappings\":{\"default\":{\"default\":\"iota mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"1D7D\",\"mappings\":{\"default\":{\"default\":\"p mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"1D7F\",\"mappings\":{\"default\":{\"default\":\"upsilon mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"1E9C\",\"mappings\":{\"default\":{\"default\":\"lang mit diagonalem Anschlag\"}}},{\"category\":\"Ll\",\"key\":\"1E9D\",\"mappings\":{\"default\":{\"default\":\"lang S mit hohem Hub\"}}},{\"category\":\"Ll\",\"key\":\"018D\",\"mappings\":{\"default\":{\"default\":\"wurde Delta gedreht\"}}},{\"category\":\"Ll\",\"key\":\"1E9B\",\"mappings\":{\"default\":{\"default\":\"lang mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E9F\",\"mappings\":{\"default\":{\"default\":\"delta\"}}},{\"key\":\"0138\",\"mappings\":{\"default\":{\"default\":\"kra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"017F\",\"mappings\":{\"default\":{\"default\":\"lang S\"}}},{\"category\":\"Ll\",\"key\":\"0183\",\"mappings\":{\"default\":{\"default\":\"b mit Oberleiste\"}}},{\"category\":\"Ll\",\"key\":\"0185\",\"mappings\":{\"default\":{\"default\":\"ton sechs\"}}},{\"category\":\"Ll\",\"key\":\"0188\",\"mappings\":{\"default\":{\"default\":\"c mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"018C\",\"mappings\":{\"default\":{\"default\":\"d mit Oberleiste\"}}},{\"key\":\"0192\",\"mappings\":{\"default\":{\"default\":\"f mit Haken\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0195\",\"mappings\":{\"default\":{\"default\":\"hv\"}}},{\"category\":\"Ll\",\"key\":\"0199\",\"mappings\":{\"default\":{\"default\":\"k mit Haken\"}}},{\"key\":\"019A\",\"mappings\":{\"default\":{\"default\":\"l mit Strich\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"019E\",\"mappings\":{\"default\":{\"default\":\"n mit langem rechtem Bein\"}}},{\"category\":\"Ll\",\"key\":\"01A1\",\"mappings\":{\"default\":{\"default\":\"o mit Horn\"}}},{\"category\":\"Ll\",\"key\":\"01A3\",\"mappings\":{\"default\":{\"default\":\"oi\"}}},{\"category\":\"Ll\",\"key\":\"01A5\",\"mappings\":{\"default\":{\"default\":\"p mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"01A8\",\"mappings\":{\"default\":{\"default\":\"ton zwei\"}}},{\"category\":\"Ll\",\"key\":\"01AA\",\"mappings\":{\"default\":{\"default\":\"umgedrehte esh Schleife\"}}},{\"category\":\"Ll\",\"key\":\"01AB\",\"mappings\":{\"default\":{\"default\":\"t mit palatal Haken\"}}},{\"category\":\"Ll\",\"key\":\"01AD\",\"mappings\":{\"default\":{\"default\":\"t mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"01B0\",\"mappings\":{\"default\":{\"default\":\"u mit Horn\"}}},{\"category\":\"Ll\",\"key\":\"01B4\",\"mappings\":{\"default\":{\"default\":\"y mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"01B9\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes ezh\"}}},{\"category\":\"Ll\",\"key\":\"01BA\",\"mappings\":{\"default\":{\"default\":\"ezh mit Schwanz\"}}},{\"category\":\"Ll\",\"key\":\"01BD\",\"mappings\":{\"default\":{\"default\":\"ton fünf\"}}},{\"category\":\"Ll\",\"key\":\"01BF\",\"mappings\":{\"default\":{\"default\":\"wynn\"}}},{\"category\":\"Ll\",\"key\":\"01C6\",\"mappings\":{\"default\":{\"default\":\"dz mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01C9\",\"mappings\":{\"default\":{\"default\":\"lj\"}}},{\"category\":\"Ll\",\"key\":\"01CC\",\"mappings\":{\"default\":{\"default\":\"nj\"}}},{\"category\":\"Ll\",\"key\":\"01E3\",\"mappings\":{\"default\":{\"default\":\"ae mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"01EF\",\"mappings\":{\"default\":{\"default\":\"ezh mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01F3\",\"mappings\":{\"default\":{\"default\":\"dz\"}}},{\"category\":\"Ll\",\"key\":\"021D\",\"mappings\":{\"default\":{\"default\":\"yogh\"}}},{\"category\":\"Ll\",\"key\":\"026E\",\"mappings\":{\"default\":{\"default\":\"lezh\"}}},{\"category\":\"Ll\",\"key\":\"0292\",\"mappings\":{\"default\":{\"default\":\"ezh\"}}},{\"category\":\"Ll\",\"key\":\"0293\",\"mappings\":{\"default\":{\"default\":\"ezh mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"02A4\",\"mappings\":{\"default\":{\"default\":\"dezh Digraph\"}}},{\"category\":\"Ll\",\"key\":\"01DD\",\"mappings\":{\"default\":{\"default\":\"gedreht E\"}}},{\"category\":\"Ll\",\"key\":\"01FD\",\"mappings\":{\"default\":{\"default\":\"ae mit Akut\"}}},{\"category\":\"Ll\",\"key\":\"0221\",\"mappings\":{\"default\":{\"default\":\"d mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0223\",\"mappings\":{\"default\":{\"default\":\"ou\"}}},{\"category\":\"Ll\",\"key\":\"0225\",\"mappings\":{\"default\":{\"default\":\"z mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0234\",\"mappings\":{\"default\":{\"default\":\"l mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0235\",\"mappings\":{\"default\":{\"default\":\"n mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0236\",\"mappings\":{\"default\":{\"default\":\"t mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0238\",\"mappings\":{\"default\":{\"default\":\"db\"}}},{\"category\":\"Ll\",\"key\":\"0239\",\"mappings\":{\"default\":{\"default\":\"qp Digraph\"}}},{\"category\":\"Ll\",\"key\":\"023F\",\"mappings\":{\"default\":{\"default\":\"s mit Swash Tail\"}}},{\"category\":\"Ll\",\"key\":\"0240\",\"mappings\":{\"default\":{\"default\":\"z mit Swash Tail\"}}},{\"category\":\"Ll\",\"key\":\"0242\",\"mappings\":{\"default\":{\"default\":\"Glottalanschlag\"}}},{\"category\":\"Ll\",\"key\":\"024B\",\"mappings\":{\"default\":{\"default\":\"q mit Hakenschwanz\"}}},{\"category\":\"Ll\",\"key\":\"0250\",\"mappings\":{\"default\":{\"default\":\"gedreht A\"}}},{\"category\":\"Ll\",\"key\":\"0251\",\"mappings\":{\"default\":{\"default\":\"alpha\"}}},{\"category\":\"Ll\",\"key\":\"0252\",\"mappings\":{\"default\":{\"default\":\"gedrehtes Alpha\"}}},{\"category\":\"Ll\",\"key\":\"0253\",\"mappings\":{\"default\":{\"default\":\"b mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0254\",\"mappings\":{\"default\":{\"default\":\"open O\"}}},{\"category\":\"Ll\",\"key\":\"0255\",\"mappings\":{\"default\":{\"default\":\"c mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0256\",\"mappings\":{\"default\":{\"default\":\"d mit Schwanz\"}}},{\"category\":\"Ll\",\"key\":\"0257\",\"mappings\":{\"default\":{\"default\":\"d mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0258\",\"mappings\":{\"default\":{\"default\":\"umgedreht E\"}}},{\"category\":\"Ll\",\"key\":\"0259\",\"mappings\":{\"default\":{\"default\":\"schwa\"}}},{\"category\":\"Ll\",\"key\":\"025A\",\"mappings\":{\"default\":{\"default\":\"schwa mit Haken\"}}},{\"key\":\"025B\",\"mappings\":{\"default\":{\"default\":\"offenes e\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"025C\",\"mappings\":{\"default\":{\"default\":\"umgedrehtes offenes e\"}}},{\"category\":\"Ll\",\"key\":\"025D\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes offenes e mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"025E\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes geschlossenes epsilon\"}}},{\"category\":\"Ll\",\"key\":\"0260\",\"mappings\":{\"default\":{\"default\":\"g mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0261\",\"mappings\":{\"default\":{\"default\":\"g\"}}},{\"category\":\"Ll\",\"key\":\"0263\",\"mappings\":{\"default\":{\"default\":\"gamma\"}}},{\"category\":\"Ll\",\"key\":\"0264\",\"mappings\":{\"default\":{\"default\":\"mini gamma\"}}},{\"category\":\"Ll\",\"key\":\"0265\",\"mappings\":{\"default\":{\"default\":\"gedrehtes h\"}}},{\"category\":\"Ll\",\"key\":\"0266\",\"mappings\":{\"default\":{\"default\":\"h mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0267\",\"mappings\":{\"default\":{\"default\":\"h mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0269\",\"mappings\":{\"default\":{\"default\":\"iota\"}}},{\"category\":\"Ll\",\"key\":\"026B\",\"mappings\":{\"default\":{\"default\":\"l mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"026C\",\"mappings\":{\"default\":{\"default\":\"l mit Gurt\"}}},{\"category\":\"Ll\",\"key\":\"026D\",\"mappings\":{\"default\":{\"default\":\"l mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"026F\",\"mappings\":{\"default\":{\"default\":\"gedreht M\"}}},{\"category\":\"Ll\",\"key\":\"0270\",\"mappings\":{\"default\":{\"default\":\"gedrehtes M mit langem Bein\"}}},{\"category\":\"Ll\",\"key\":\"0271\",\"mappings\":{\"default\":{\"default\":\"m mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0272\",\"mappings\":{\"default\":{\"default\":\"n mit linkem Haken\"}}},{\"category\":\"Ll\",\"key\":\"0273\",\"mappings\":{\"default\":{\"default\":\"n mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"0275\",\"mappings\":{\"default\":{\"default\":\"o mit balken\"}}},{\"category\":\"Ll\",\"key\":\"0277\",\"mappings\":{\"default\":{\"default\":\"geschlossenes omega\"}}},{\"category\":\"Ll\",\"key\":\"0278\",\"mappings\":{\"default\":{\"default\":\"phi\"}}},{\"category\":\"Ll\",\"key\":\"0279\",\"mappings\":{\"default\":{\"default\":\"gedrehtes r\"}}},{\"category\":\"Ll\",\"key\":\"027A\",\"mappings\":{\"default\":{\"default\":\"gedrehtes r mit langem Bein\"}}},{\"category\":\"Ll\",\"key\":\"027B\",\"mappings\":{\"default\":{\"default\":\"gedrehtes r mit langem Bein und Haken\"}}},{\"category\":\"Ll\",\"key\":\"027C\",\"mappings\":{\"default\":{\"default\":\"r mit langem Bein\"}}},{\"category\":\"Ll\",\"key\":\"027D\",\"mappings\":{\"default\":{\"default\":\"r mit Endstück\"}}},{\"category\":\"Ll\",\"key\":\"027E\",\"mappings\":{\"default\":{\"default\":\"r mit Angelhaken\"}}},{\"category\":\"Ll\",\"key\":\"027F\",\"mappings\":{\"default\":{\"default\":\"umgedrehtes R mit Angelhaken\"}}},{\"category\":\"Ll\",\"key\":\"0282\",\"mappings\":{\"default\":{\"default\":\"s mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0283\",\"mappings\":{\"default\":{\"default\":\"esh\"}}},{\"category\":\"Ll\",\"key\":\"0285\",\"mappings\":{\"default\":{\"default\":\"squat umgekehrt\"}}},{\"category\":\"Ll\",\"key\":\"0286\",\"mappings\":{\"default\":{\"default\":\"esh mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0287\",\"mappings\":{\"default\":{\"default\":\"gedreht T\"}}},{\"category\":\"Ll\",\"key\":\"0288\",\"mappings\":{\"default\":{\"default\":\"t mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"0289\",\"mappings\":{\"default\":{\"default\":\"u Bar\"}}},{\"category\":\"Ll\",\"key\":\"028A\",\"mappings\":{\"default\":{\"default\":\"upsilon\"}}},{\"category\":\"Ll\",\"key\":\"028B\",\"mappings\":{\"default\":{\"default\":\"v mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"028C\",\"mappings\":{\"default\":{\"default\":\"gedrehtes v\"}}},{\"category\":\"Ll\",\"key\":\"028D\",\"mappings\":{\"default\":{\"default\":\"gedrehtes w\"}}},{\"category\":\"Ll\",\"key\":\"028E\",\"mappings\":{\"default\":{\"default\":\"gedrehtes y\"}}},{\"category\":\"Ll\",\"key\":\"0290\",\"mappings\":{\"default\":{\"default\":\"z mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"0291\",\"mappings\":{\"default\":{\"default\":\"z mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0295\",\"mappings\":{\"default\":{\"default\":\"pharyngales stimmhaft Frikativ\"}}},{\"category\":\"Ll\",\"key\":\"0296\",\"mappings\":{\"default\":{\"default\":\"invertierter Glottalanschlag\"}}},{\"category\":\"Ll\",\"key\":\"0297\",\"mappings\":{\"default\":{\"default\":\"gestrecktes C\"}}},{\"category\":\"Ll\",\"key\":\"0298\",\"mappings\":{\"default\":{\"default\":\"bilabialer Klick\"}}},{\"category\":\"Ll\",\"key\":\"029A\",\"mappings\":{\"default\":{\"default\":\"geschlossenes offenes e\"}}},{\"category\":\"Ll\",\"key\":\"029E\",\"mappings\":{\"default\":{\"default\":\"gedrehtes k\"}}},{\"category\":\"Ll\",\"key\":\"02A0\",\"mappings\":{\"default\":{\"default\":\"q mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"02A3\",\"mappings\":{\"default\":{\"default\":\"dz Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A5\",\"mappings\":{\"default\":{\"default\":\"dz Digraph mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"02A6\",\"mappings\":{\"default\":{\"default\":\"ts Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A7\",\"mappings\":{\"default\":{\"default\":\"tesh Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A8\",\"mappings\":{\"default\":{\"default\":\"tc Digraph mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"02A9\",\"mappings\":{\"default\":{\"default\":\"feng Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AA\",\"mappings\":{\"default\":{\"default\":\"ls Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AB\",\"mappings\":{\"default\":{\"default\":\"lz Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AC\",\"mappings\":{\"default\":{\"default\":\"bilabiales Perkussiv\"}}},{\"category\":\"Ll\",\"key\":\"02AD\",\"mappings\":{\"default\":{\"default\":\"bidentales Perkussiv\"}}},{\"category\":\"Ll\",\"key\":\"02AE\",\"mappings\":{\"default\":{\"default\":\"gedrehtes h mit Angelhaken\"}}},{\"category\":\"Ll\",\"key\":\"02AF\",\"mappings\":{\"default\":{\"default\":\"gedrehtes h mit Angelhaken und Schwanz\"}}},{\"category\":\"Ll\",\"key\":\"1D02\",\"mappings\":{\"default\":{\"default\":\"gedrehtes ae\"}}},{\"category\":\"Ll\",\"key\":\"1D08\",\"mappings\":{\"default\":{\"default\":\"gedrehtes e\"}}},{\"category\":\"Ll\",\"key\":\"1D09\",\"mappings\":{\"default\":{\"default\":\"gedrehtes i\"}}},{\"category\":\"Ll\",\"key\":\"1D11\",\"mappings\":{\"default\":{\"default\":\"liegendes O\"}}},{\"category\":\"Ll\",\"key\":\"1D12\",\"mappings\":{\"default\":{\"default\":\"liegendes geöffnet O\"}}},{\"category\":\"Ll\",\"key\":\"1D14\",\"mappings\":{\"default\":{\"default\":\"gedreht Oe\"}}},{\"category\":\"Ll\",\"key\":\"1D16\",\"mappings\":{\"default\":{\"default\":\"obere Hälfte O\"}}},{\"category\":\"Ll\",\"key\":\"1D17\",\"mappings\":{\"default\":{\"default\":\"untere Hälfte O\"}}},{\"category\":\"Ll\",\"key\":\"1D1D\",\"mappings\":{\"default\":{\"default\":\"liegendes U\"}}},{\"category\":\"Ll\",\"key\":\"1D1E\",\"mappings\":{\"default\":{\"default\":\"liegendes u Umlaut\"}}},{\"category\":\"Ll\",\"key\":\"1D1F\",\"mappings\":{\"default\":{\"default\":\"liegendes m\"}}},{\"category\":\"Ll\",\"key\":\"1D24\",\"mappings\":{\"default\":{\"default\":\"stimmhaft laryngaler Frikativ\"}}},{\"category\":\"Ll\",\"key\":\"1D25\",\"mappings\":{\"default\":{\"default\":\"Ain\"}}},{\"category\":\"Ll\",\"key\":\"1D6B\",\"mappings\":{\"default\":{\"default\":\"ue\"}}},{\"category\":\"Ll\",\"key\":\"1D6C\",\"mappings\":{\"default\":{\"default\":\"b mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6D\",\"mappings\":{\"default\":{\"default\":\"d mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6E\",\"mappings\":{\"default\":{\"default\":\"f mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6F\",\"mappings\":{\"default\":{\"default\":\"m mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D70\",\"mappings\":{\"default\":{\"default\":\"n mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D71\",\"mappings\":{\"default\":{\"default\":\"p mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D72\",\"mappings\":{\"default\":{\"default\":\"r mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D73\",\"mappings\":{\"default\":{\"default\":\"r mit Angelhaken und mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D74\",\"mappings\":{\"default\":{\"default\":\"s mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D75\",\"mappings\":{\"default\":{\"default\":\"t mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D76\",\"mappings\":{\"default\":{\"default\":\"z mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D77\",\"mappings\":{\"default\":{\"default\":\"gedreht G\"}}},{\"category\":\"Ll\",\"key\":\"1D79\",\"mappings\":{\"default\":{\"default\":\"insular G\"}}},{\"category\":\"Ll\",\"key\":\"1D7A\",\"mappings\":{\"default\":{\"default\":\"th mit Durchgestrichen\"}}},{\"category\":\"Ll\",\"key\":\"1D80\",\"mappings\":{\"default\":{\"default\":\"b mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D81\",\"mappings\":{\"default\":{\"default\":\"d mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D82\",\"mappings\":{\"default\":{\"default\":\"f mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D83\",\"mappings\":{\"default\":{\"default\":\"g mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D84\",\"mappings\":{\"default\":{\"default\":\"k mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D85\",\"mappings\":{\"default\":{\"default\":\"l mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D86\",\"mappings\":{\"default\":{\"default\":\"m mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D87\",\"mappings\":{\"default\":{\"default\":\"n mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D88\",\"mappings\":{\"default\":{\"default\":\"p mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D89\",\"mappings\":{\"default\":{\"default\":\"r mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8A\",\"mappings\":{\"default\":{\"default\":\"s mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8B\",\"mappings\":{\"default\":{\"default\":\"esh mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8C\",\"mappings\":{\"default\":{\"default\":\"v mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8D\",\"mappings\":{\"default\":{\"default\":\"x mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8E\",\"mappings\":{\"default\":{\"default\":\"z mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8F\",\"mappings\":{\"default\":{\"default\":\"a mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D90\",\"mappings\":{\"default\":{\"default\":\"alpha mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D91\",\"mappings\":{\"default\":{\"default\":\"d mit Haken und Schwanz\"}}},{\"category\":\"Ll\",\"key\":\"1D92\",\"mappings\":{\"default\":{\"default\":\"e mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D93\",\"mappings\":{\"default\":{\"default\":\"offenes e mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D94\",\"mappings\":{\"default\":{\"default\":\"umgedrehtes offenes e mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D95\",\"mappings\":{\"default\":{\"default\":\"schwa mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D96\",\"mappings\":{\"default\":{\"default\":\"i mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D97\",\"mappings\":{\"default\":{\"default\":\"offenes o mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D98\",\"mappings\":{\"default\":{\"default\":\"esh mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D99\",\"mappings\":{\"default\":{\"default\":\"u mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D9A\",\"mappings\":{\"default\":{\"default\":\"ezh mit Retroflexhaken\"}}},{\"key\":\"0149\",\"mappings\":{\"default\":{\"default\":\"n mit Apostroph davor\"}},\"category\":\"Ll\"},{\"key\":\"014B\",\"mappings\":{\"default\":{\"default\":\"eng\"}},\"category\":\"Ll\"}]\n,\n\"de/symbols/latin-lower-single-accent.js\": \n[{\"locale\":\"de\"},{\"key\":\"00E0\",\"mappings\":{\"default\":{\"default\":\"a mit Grave\"}},\"category\":\"Ll\"},{\"key\":\"00E1\",\"mappings\":{\"default\":{\"default\":\"a mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00E2\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"00E3\",\"mappings\":{\"default\":{\"default\":\"a mit Tilde\"}},\"category\":\"Ll\"},{\"key\":\"00E4\",\"mappings\":{\"default\":{\"default\":\"a mit Diärese\"}},\"category\":\"Ll\"},{\"key\":\"00E5\",\"mappings\":{\"default\":{\"default\":\"a mit Ring darüber\"}},\"category\":\"Ll\"},{\"key\":\"00E7\",\"mappings\":{\"default\":{\"default\":\"c mit Cedille\"}},\"category\":\"Ll\"},{\"key\":\"00E8\",\"mappings\":{\"default\":{\"default\":\"e mit Grave\"}},\"category\":\"Ll\"},{\"key\":\"00E9\",\"mappings\":{\"default\":{\"default\":\"e mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00EA\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"00EB\",\"mappings\":{\"default\":{\"default\":\"e mit Diärese\"}},\"category\":\"Ll\"},{\"key\":\"00EC\",\"mappings\":{\"default\":{\"default\":\"i mit Grave\"}},\"category\":\"Ll\"},{\"key\":\"00ED\",\"mappings\":{\"default\":{\"default\":\"i mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00EE\",\"mappings\":{\"default\":{\"default\":\"i mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"00EF\",\"mappings\":{\"default\":{\"default\":\"i mit Diärese\"}},\"category\":\"Ll\"},{\"key\":\"00F1\",\"mappings\":{\"default\":{\"default\":\"n mit Tilde\"}},\"category\":\"Ll\"},{\"key\":\"00F2\",\"mappings\":{\"default\":{\"default\":\"o mit Grave\"}},\"category\":\"Ll\"},{\"key\":\"00F3\",\"mappings\":{\"default\":{\"default\":\"o mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00F4\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"00F5\",\"mappings\":{\"default\":{\"default\":\"o mit Tilde\"}},\"category\":\"Ll\"},{\"key\":\"00F6\",\"mappings\":{\"default\":{\"default\":\"o mit Diärese\"}},\"category\":\"Ll\"},{\"key\":\"00F9\",\"mappings\":{\"default\":{\"default\":\"u mit Grave\"}},\"category\":\"Ll\"},{\"key\":\"00FA\",\"mappings\":{\"default\":{\"default\":\"u mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00FB\",\"mappings\":{\"default\":{\"default\":\"u mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"00FC\",\"mappings\":{\"default\":{\"default\":\"u mit Diärese\"}},\"category\":\"Ll\"},{\"key\":\"00FD\",\"mappings\":{\"default\":{\"default\":\"y mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00FF\",\"mappings\":{\"default\":{\"default\":\"y mit Diärese\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0101\",\"mappings\":{\"default\":{\"default\":\"a mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"0103\",\"mappings\":{\"default\":{\"default\":\"a mit Breve\"}}},{\"category\":\"Ll\",\"key\":\"0105\",\"mappings\":{\"default\":{\"default\":\"a mit Ogonek\"}}},{\"key\":\"0107\",\"mappings\":{\"default\":{\"default\":\"c mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"0109\",\"mappings\":{\"default\":{\"default\":\"c mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"010B\",\"mappings\":{\"default\":{\"default\":\"c mit Punkt darüber\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"010D\",\"mappings\":{\"default\":{\"default\":\"c mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"010F\",\"mappings\":{\"default\":{\"default\":\"d mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"0113\",\"mappings\":{\"default\":{\"default\":\"e mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"0115\",\"mappings\":{\"default\":{\"default\":\"e mit Breve\"}}},{\"key\":\"0117\",\"mappings\":{\"default\":{\"default\":\"e mit Punkt darüber\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0119\",\"mappings\":{\"default\":{\"default\":\"e mit Ogonek\"}}},{\"category\":\"Ll\",\"key\":\"011B\",\"mappings\":{\"default\":{\"default\":\"e mit Caron\"}}},{\"key\":\"011D\",\"mappings\":{\"default\":{\"default\":\"g mit Zirkumflex\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"011F\",\"mappings\":{\"default\":{\"default\":\"g mit Breve\"}}},{\"key\":\"0121\",\"mappings\":{\"default\":{\"default\":\"g mit Punkt darüber\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0123\",\"mappings\":{\"default\":{\"default\":\"g mit Cedilla\"}}},{\"key\":\"0125\",\"mappings\":{\"default\":{\"default\":\"h mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"0129\",\"mappings\":{\"default\":{\"default\":\"i mit Tilde\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"012B\",\"mappings\":{\"default\":{\"default\":\"i mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"012D\",\"mappings\":{\"default\":{\"default\":\"i mit Breve\"}}},{\"category\":\"Ll\",\"key\":\"012F\",\"mappings\":{\"default\":{\"default\":\"i mit Ogonek\"}}},{\"key\":\"0131\",\"mappings\":{\"default\":{\"default\":\"i ohne punkt\"}},\"category\":\"Ll\"},{\"key\":\"0135\",\"mappings\":{\"default\":{\"default\":\"j mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"0137\",\"mappings\":{\"default\":{\"default\":\"k mit Cedille\"}},\"category\":\"Ll\"},{\"key\":\"013A\",\"mappings\":{\"default\":{\"default\":\"l mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"013C\",\"mappings\":{\"default\":{\"default\":\"l mit Cedille\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"013E\",\"mappings\":{\"default\":{\"default\":\"l mit Caron\"}}},{\"key\":\"0140\",\"mappings\":{\"default\":{\"default\":\"l mit Punkt in der Mitte\"}},\"category\":\"Ll\"},{\"key\":\"0144\",\"mappings\":{\"default\":{\"default\":\"n mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"0146\",\"mappings\":{\"default\":{\"default\":\"n mit Cedille\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0148\",\"mappings\":{\"default\":{\"default\":\"n mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"014D\",\"mappings\":{\"default\":{\"default\":\"o mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"014F\",\"mappings\":{\"default\":{\"default\":\"o mit Breve\"}}},{\"key\":\"0151\",\"mappings\":{\"default\":{\"default\":\"o mit doppeltem Aigu\"}},\"category\":\"Ll\"},{\"key\":\"0155\",\"mappings\":{\"default\":{\"default\":\"r mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"0157\",\"mappings\":{\"default\":{\"default\":\"r mit Cedille\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0159\",\"mappings\":{\"default\":{\"default\":\"r mit Caron\"}}},{\"key\":\"015B\",\"mappings\":{\"default\":{\"default\":\"s mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"015D\",\"mappings\":{\"default\":{\"default\":\"s mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"015F\",\"mappings\":{\"default\":{\"default\":\"s mit Cedille\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0161\",\"mappings\":{\"default\":{\"default\":\"s mit Caron\"}}},{\"key\":\"0163\",\"mappings\":{\"default\":{\"default\":\"t mit Cedille\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0165\",\"mappings\":{\"default\":{\"default\":\"t mit Caron\"}}},{\"key\":\"0169\",\"mappings\":{\"default\":{\"default\":\"u mit Tilde\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"016B\",\"mappings\":{\"default\":{\"default\":\"u mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"016D\",\"mappings\":{\"default\":{\"default\":\"u mit Breve\"}}},{\"key\":\"016F\",\"mappings\":{\"default\":{\"default\":\"u mit Ring darüber\"}},\"category\":\"Ll\"},{\"key\":\"0171\",\"mappings\":{\"default\":{\"default\":\"u mit doppeltem Aigu\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0173\",\"mappings\":{\"default\":{\"default\":\"u mit Ogonek\"}}},{\"key\":\"0175\",\"mappings\":{\"default\":{\"default\":\"w mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"0177\",\"mappings\":{\"default\":{\"default\":\"y mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"017A\",\"mappings\":{\"default\":{\"default\":\"z mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"017C\",\"mappings\":{\"default\":{\"default\":\"z mit Punkt darüber\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"017E\",\"mappings\":{\"default\":{\"default\":\"z mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01CE\",\"mappings\":{\"default\":{\"default\":\"a mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01D0\",\"mappings\":{\"default\":{\"default\":\"i mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01D2\",\"mappings\":{\"default\":{\"default\":\"o mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01D4\",\"mappings\":{\"default\":{\"default\":\"u mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01E7\",\"mappings\":{\"default\":{\"default\":\"g mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01E9\",\"mappings\":{\"default\":{\"default\":\"k mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01EB\",\"mappings\":{\"default\":{\"default\":\"o mit Ogonek\"}}},{\"category\":\"Ll\",\"key\":\"01F0\",\"mappings\":{\"default\":{\"default\":\"j mit Caron\"}}},{\"key\":\"01F5\",\"mappings\":{\"default\":{\"default\":\"g mit Aigu\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01F9\",\"mappings\":{\"default\":{\"default\":\"n mit Grab\"}}},{\"category\":\"Ll\",\"key\":\"0201\",\"mappings\":{\"default\":{\"default\":\"a mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"0203\",\"mappings\":{\"default\":{\"default\":\"a mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"0205\",\"mappings\":{\"default\":{\"default\":\"e mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"0207\",\"mappings\":{\"default\":{\"default\":\"e mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"0209\",\"mappings\":{\"default\":{\"default\":\"i mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"020B\",\"mappings\":{\"default\":{\"default\":\"i mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"020D\",\"mappings\":{\"default\":{\"default\":\"o mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"020F\",\"mappings\":{\"default\":{\"default\":\"o mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"0211\",\"mappings\":{\"default\":{\"default\":\"r mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"0213\",\"mappings\":{\"default\":{\"default\":\"r mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"0215\",\"mappings\":{\"default\":{\"default\":\"u mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"0217\",\"mappings\":{\"default\":{\"default\":\"u mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"0219\",\"mappings\":{\"default\":{\"default\":\"s mit untenstehendem Komma\"}}},{\"category\":\"Ll\",\"key\":\"021B\",\"mappings\":{\"default\":{\"default\":\"t mit untenstehendem Komma\"}}},{\"category\":\"Ll\",\"key\":\"021F\",\"mappings\":{\"default\":{\"default\":\"h mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"0227\",\"mappings\":{\"default\":{\"default\":\"a mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"0229\",\"mappings\":{\"default\":{\"default\":\"e mit Cedilla\"}}},{\"category\":\"Ll\",\"key\":\"022F\",\"mappings\":{\"default\":{\"default\":\"o mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"0233\",\"mappings\":{\"default\":{\"default\":\"y mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"0237\",\"mappings\":{\"default\":{\"default\":\"dotless J\"}}},{\"category\":\"Ll\",\"key\":\"1E01\",\"mappings\":{\"default\":{\"default\":\"a mit Ring unten\"}}},{\"category\":\"Ll\",\"key\":\"1E03\",\"mappings\":{\"default\":{\"default\":\"b mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E05\",\"mappings\":{\"default\":{\"default\":\"b mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E07\",\"mappings\":{\"default\":{\"default\":\"b mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E0B\",\"mappings\":{\"default\":{\"default\":\"d mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E0D\",\"mappings\":{\"default\":{\"default\":\"d mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E0F\",\"mappings\":{\"default\":{\"default\":\"d mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E11\",\"mappings\":{\"default\":{\"default\":\"d mit Cedilla\"}}},{\"category\":\"Ll\",\"key\":\"1E13\",\"mappings\":{\"default\":{\"default\":\"d mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E19\",\"mappings\":{\"default\":{\"default\":\"e mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E1B\",\"mappings\":{\"default\":{\"default\":\"e mit darunterliegender Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1E1F\",\"mappings\":{\"default\":{\"default\":\"f mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E21\",\"mappings\":{\"default\":{\"default\":\"g mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"1E23\",\"mappings\":{\"default\":{\"default\":\"h mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E25\",\"mappings\":{\"default\":{\"default\":\"h mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E27\",\"mappings\":{\"default\":{\"default\":\"h mit Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E29\",\"mappings\":{\"default\":{\"default\":\"h mit Cedilla\"}}},{\"category\":\"Ll\",\"key\":\"1E2B\",\"mappings\":{\"default\":{\"default\":\"h mit Breve unten\"}}},{\"category\":\"Ll\",\"key\":\"1E2D\",\"mappings\":{\"default\":{\"default\":\"i mit darunterliegender Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1E31\",\"mappings\":{\"default\":{\"default\":\"k mit Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E33\",\"mappings\":{\"default\":{\"default\":\"k mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E35\",\"mappings\":{\"default\":{\"default\":\"k mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E37\",\"mappings\":{\"default\":{\"default\":\"l mit Punkt unten\"}}},{\"category\":\"Ll\",\"key\":\"1E3B\",\"mappings\":{\"default\":{\"default\":\"l mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E3D\",\"mappings\":{\"default\":{\"default\":\"l mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E3F\",\"mappings\":{\"default\":{\"default\":\"m mit Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E41\",\"mappings\":{\"default\":{\"default\":\"m mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E43\",\"mappings\":{\"default\":{\"default\":\"m mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E45\",\"mappings\":{\"default\":{\"default\":\"n mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E47\",\"mappings\":{\"default\":{\"default\":\"n mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E49\",\"mappings\":{\"default\":{\"default\":\"n mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E4B\",\"mappings\":{\"default\":{\"default\":\"n mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E55\",\"mappings\":{\"default\":{\"default\":\"p mit Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E57\",\"mappings\":{\"default\":{\"default\":\"p mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E59\",\"mappings\":{\"default\":{\"default\":\"r mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E5B\",\"mappings\":{\"default\":{\"default\":\"r mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E5F\",\"mappings\":{\"default\":{\"default\":\"r mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E61\",\"mappings\":{\"default\":{\"default\":\"s mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E63\",\"mappings\":{\"default\":{\"default\":\"s mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E6B\",\"mappings\":{\"default\":{\"default\":\"t mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E6D\",\"mappings\":{\"default\":{\"default\":\"t mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E6F\",\"mappings\":{\"default\":{\"default\":\"t mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E71\",\"mappings\":{\"default\":{\"default\":\"t mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E73\",\"mappings\":{\"default\":{\"default\":\"u mit untenstehender Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E75\",\"mappings\":{\"default\":{\"default\":\"u mit darunterliegender Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1E77\",\"mappings\":{\"default\":{\"default\":\"u mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E7D\",\"mappings\":{\"default\":{\"default\":\"v mit Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1E7F\",\"mappings\":{\"default\":{\"default\":\"v mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E81\",\"mappings\":{\"default\":{\"default\":\"w mit Grab\"}}},{\"category\":\"Ll\",\"key\":\"1E83\",\"mappings\":{\"default\":{\"default\":\"w mit Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E85\",\"mappings\":{\"default\":{\"default\":\"w mit Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E87\",\"mappings\":{\"default\":{\"default\":\"w mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E89\",\"mappings\":{\"default\":{\"default\":\"w mit Punkt unten\"}}},{\"category\":\"Ll\",\"key\":\"1E8B\",\"mappings\":{\"default\":{\"default\":\"x mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E8D\",\"mappings\":{\"default\":{\"default\":\"x mit Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E8F\",\"mappings\":{\"default\":{\"default\":\"y mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E91\",\"mappings\":{\"default\":{\"default\":\"z mit Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E93\",\"mappings\":{\"default\":{\"default\":\"z mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E95\",\"mappings\":{\"default\":{\"default\":\"z mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E96\",\"mappings\":{\"default\":{\"default\":\"h mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E97\",\"mappings\":{\"default\":{\"default\":\"t mit Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E98\",\"mappings\":{\"default\":{\"default\":\"w mit Ring oben\"}}},{\"category\":\"Ll\",\"key\":\"1E99\",\"mappings\":{\"default\":{\"default\":\"y mit Ring oben\"}}},{\"category\":\"Ll\",\"key\":\"1E9A\",\"mappings\":{\"default\":{\"default\":\"a mit rechtem Halbring\"}}},{\"category\":\"Ll\",\"key\":\"1EA1\",\"mappings\":{\"default\":{\"default\":\"a mit Punkt unten\"}}},{\"category\":\"Ll\",\"key\":\"1EA3\",\"mappings\":{\"default\":{\"default\":\"a mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EB9\",\"mappings\":{\"default\":{\"default\":\"e mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1EBB\",\"mappings\":{\"default\":{\"default\":\"e mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EBD\",\"mappings\":{\"default\":{\"default\":\"e mit Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EC9\",\"mappings\":{\"default\":{\"default\":\"i mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1ECB\",\"mappings\":{\"default\":{\"default\":\"i mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1ECD\",\"mappings\":{\"default\":{\"default\":\"o mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1ECF\",\"mappings\":{\"default\":{\"default\":\"o mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EE5\",\"mappings\":{\"default\":{\"default\":\"u mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1EE7\",\"mappings\":{\"default\":{\"default\":\"u mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EF3\",\"mappings\":{\"default\":{\"default\":\"y mit Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EF5\",\"mappings\":{\"default\":{\"default\":\"y mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1EF7\",\"mappings\":{\"default\":{\"default\":\"y mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EF9\",\"mappings\":{\"default\":{\"default\":\"y mit Tilde\"}}}]\n,\n\"de/symbols/latin-rest.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"210E\",\"mappings\":{\"default\":{\"default\":\"Planck-Konstante\"}}},{\"category\":\"Mn\",\"key\":\"0363\",\"mappings\":{\"default\":{\"default\":\"kombinierendes a\"}}},{\"category\":\"Mn\",\"key\":\"0364\",\"mappings\":{\"default\":{\"default\":\"kombinierendes e\"}}},{\"category\":\"Mn\",\"key\":\"0365\",\"mappings\":{\"default\":{\"default\":\"kombinierendes i\"}}},{\"category\":\"Mn\",\"key\":\"0366\",\"mappings\":{\"default\":{\"default\":\"kombinierendes o\"}}},{\"category\":\"Mn\",\"key\":\"0367\",\"mappings\":{\"default\":{\"default\":\"kombinierendes u\"}}},{\"category\":\"Mn\",\"key\":\"0368\",\"mappings\":{\"default\":{\"default\":\"kombinierendes c\"}}},{\"category\":\"Mn\",\"key\":\"0369\",\"mappings\":{\"default\":{\"default\":\"kombinierendes d\"}}},{\"category\":\"Mn\",\"key\":\"036A\",\"mappings\":{\"default\":{\"default\":\"kombinierendes h\"}}},{\"category\":\"Mn\",\"key\":\"036B\",\"mappings\":{\"default\":{\"default\":\"kombinierendes m\"}}},{\"category\":\"Mn\",\"key\":\"036C\",\"mappings\":{\"default\":{\"default\":\"kombinierendes r\"}}},{\"category\":\"Mn\",\"key\":\"036D\",\"mappings\":{\"default\":{\"default\":\"kombinierendes t\"}}},{\"category\":\"Mn\",\"key\":\"036E\",\"mappings\":{\"default\":{\"default\":\"kombinierendes v\"}}},{\"category\":\"Mn\",\"key\":\"036F\",\"mappings\":{\"default\":{\"default\":\"kombinierendes x\"}}},{\"category\":\"Lm\",\"key\":\"1D62\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes i\"}}},{\"category\":\"Lm\",\"key\":\"1D63\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes r\"}}},{\"category\":\"Lm\",\"key\":\"1D64\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes u\"}}},{\"category\":\"Lm\",\"key\":\"1D65\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes v\"}}},{\"category\":\"Mn\",\"key\":\"1DCA\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes r\"}}},{\"category\":\"Mn\",\"key\":\"1DD3\",\"mappings\":{\"default\":{\"default\":\"kombinierendes oberes w\"}}},{\"category\":\"Mn\",\"key\":\"1DD4\",\"mappings\":{\"default\":{\"default\":\"kombinierendes ae\"}}},{\"category\":\"Mn\",\"key\":\"1DD5\",\"mappings\":{\"default\":{\"default\":\"kombinierendes ao\"}}},{\"category\":\"Mn\",\"key\":\"1DD6\",\"mappings\":{\"default\":{\"default\":\"kombinierendes av\"}}},{\"category\":\"Mn\",\"key\":\"1DD7\",\"mappings\":{\"default\":{\"default\":\"kombinierendes c mit Cedilla\"}}},{\"category\":\"Mn\",\"key\":\"1DD8\",\"mappings\":{\"default\":{\"default\":\"kombinierendes insulares d\"}}},{\"category\":\"Mn\",\"key\":\"1DD9\",\"mappings\":{\"default\":{\"default\":\"kombinierendes eth\"}}},{\"category\":\"Mn\",\"key\":\"1DDA\",\"mappings\":{\"default\":{\"default\":\"kombinierendes g\"}}},{\"category\":\"Mn\",\"key\":\"1DDB\",\"mappings\":{\"default\":{\"default\":\"kombinierendes Kapitälchen g\"}}},{\"category\":\"Mn\",\"key\":\"1DDC\",\"mappings\":{\"default\":{\"default\":\"kombinierendes k\"}}},{\"category\":\"Mn\",\"key\":\"1DDD\",\"mappings\":{\"default\":{\"default\":\"kombinierendes l\"}}},{\"category\":\"Mn\",\"key\":\"1DDE\",\"mappings\":{\"default\":{\"default\":\"kombinierendes Kapitälchen L\"}}},{\"category\":\"Mn\",\"key\":\"1DDF\",\"mappings\":{\"default\":{\"default\":\"kombinierendes Kapitälchen M\"}}},{\"category\":\"Mn\",\"key\":\"1DE0\",\"mappings\":{\"default\":{\"default\":\"kombinierendes n\"}}},{\"category\":\"Mn\",\"key\":\"1DE1\",\"mappings\":{\"default\":{\"default\":\"kombinierendes Kapitälchen N\"}}},{\"category\":\"Mn\",\"key\":\"1DE2\",\"mappings\":{\"default\":{\"default\":\"kombinierendes lateinisches Kapitälchen R\"}}},{\"category\":\"Mn\",\"key\":\"1DE3\",\"mappings\":{\"default\":{\"default\":\"kombinierendes r rotunda\"}}},{\"category\":\"Mn\",\"key\":\"1DE4\",\"mappings\":{\"default\":{\"default\":\"kombinierendes s\"}}},{\"category\":\"Mn\",\"key\":\"1DE5\",\"mappings\":{\"default\":{\"default\":\"kombinierendes langes s\"}}},{\"category\":\"Mn\",\"key\":\"1DE6\",\"mappings\":{\"default\":{\"default\":\"kombinierendes z\"}}},{\"category\":\"Lm\",\"key\":\"2071\",\"mappings\":{\"default\":{\"default\":\"hochgestelltes i\"}}},{\"category\":\"Lm\",\"key\":\"207F\",\"mappings\":{\"default\":{\"default\":\"hochgestelltes n\"}}},{\"category\":\"Lm\",\"key\":\"2090\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes a\"}}},{\"category\":\"Lm\",\"key\":\"2091\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes e\"}}},{\"category\":\"Lm\",\"key\":\"2092\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes o\"}}},{\"category\":\"Lm\",\"key\":\"2093\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes x\"}}},{\"category\":\"Lm\",\"key\":\"2094\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes schwa\"}}},{\"category\":\"Lm\",\"key\":\"2095\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes h\"}}},{\"category\":\"Lm\",\"key\":\"2096\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes k\"}}},{\"category\":\"Lm\",\"key\":\"2097\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes l\"}}},{\"category\":\"Lm\",\"key\":\"2098\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes m\"}}},{\"category\":\"Lm\",\"key\":\"2099\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes n\"}}},{\"category\":\"Lm\",\"key\":\"209A\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes p\"}}},{\"category\":\"Lm\",\"key\":\"209B\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes s\"}}},{\"category\":\"Lm\",\"key\":\"209C\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes t\"}}},{\"category\":\"Lm\",\"key\":\"2C7C\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes j\"}}},{\"category\":\"So\",\"key\":\"1F12A\",\"mappings\":{\"default\":{\"default\":\"groß S in stumpfen Klammern\"}}},{\"category\":\"So\",\"key\":\"1F12B\",\"mappings\":{\"default\":{\"default\":\"eingekreistes kursives groß C\"}}},{\"category\":\"So\",\"key\":\"1F12C\",\"mappings\":{\"default\":{\"default\":\"eingekreistes kursives groß R\"}}},{\"category\":\"So\",\"key\":\"1F18A\",\"mappings\":{\"default\":{\"default\":\"durchgestrichenes P auf schwarzen Quadrat\"}}}]\n,\n\"de/symbols/latin-upper-double-accent.js\": \n[{\"locale\":\"de\"},{\"category\":\"Lu\",\"key\":\"01D5\",\"mappings\":{\"default\":{\"default\":\"groß U mit Diärese und Makron\"}}},{\"category\":\"Lu\",\"key\":\"01D7\",\"mappings\":{\"default\":{\"default\":\"groß U mit Diärese und Akut\"}}},{\"category\":\"Lu\",\"key\":\"01D9\",\"mappings\":{\"default\":{\"default\":\"groß U mit Diärese und Caron\"}}},{\"category\":\"Lu\",\"key\":\"01DB\",\"mappings\":{\"default\":{\"default\":\"groß U mit Diärese und Grab\"}}},{\"category\":\"Lu\",\"key\":\"01DE\",\"mappings\":{\"default\":{\"default\":\"groß A mit Diärese und Makron\"}}},{\"category\":\"Lu\",\"key\":\"01E0\",\"mappings\":{\"default\":{\"default\":\"groß A mit Dot Above und Makron\"}}},{\"category\":\"Lu\",\"key\":\"01EC\",\"mappings\":{\"default\":{\"default\":\"groß O mit Ogonek und Makron\"}}},{\"category\":\"Lu\",\"key\":\"01FA\",\"mappings\":{\"default\":{\"default\":\"groß A mit Ring oben und akut\"}}},{\"category\":\"Lu\",\"key\":\"022A\",\"mappings\":{\"default\":{\"default\":\"groß O mit Diärese und Makron\"}}},{\"category\":\"Lu\",\"key\":\"022C\",\"mappings\":{\"default\":{\"default\":\"groß O mit Tilde und Makron\"}}},{\"category\":\"Lu\",\"key\":\"0230\",\"mappings\":{\"default\":{\"default\":\"groß O mit Punkt oben und Makron\"}}},{\"category\":\"Lu\",\"key\":\"1E08\",\"mappings\":{\"default\":{\"default\":\"groß C mit Cedilla und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E14\",\"mappings\":{\"default\":{\"default\":\"groß E mit Makron und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1E16\",\"mappings\":{\"default\":{\"default\":\"groß E mit Makron und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E1C\",\"mappings\":{\"default\":{\"default\":\"groß E mit Cedilla und Breve\"}}},{\"category\":\"Lu\",\"key\":\"1E2E\",\"mappings\":{\"default\":{\"default\":\"groß I mit Diärese und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E38\",\"mappings\":{\"default\":{\"default\":\"groß L mit Dot Below und Makron\"}}},{\"category\":\"Lu\",\"key\":\"1E4C\",\"mappings\":{\"default\":{\"default\":\"groß O mit Tilde und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E4E\",\"mappings\":{\"default\":{\"default\":\"groß O mit Tilde und Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1E50\",\"mappings\":{\"default\":{\"default\":\"groß O mit Makron und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1E52\",\"mappings\":{\"default\":{\"default\":\"groß O mit Makron und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E5C\",\"mappings\":{\"default\":{\"default\":\"groß R mit Punkt unten und Makron\"}}},{\"category\":\"Lu\",\"key\":\"1E64\",\"mappings\":{\"default\":{\"default\":\"groß S mit Akute und Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E66\",\"mappings\":{\"default\":{\"default\":\"groß S mit Caron und Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E68\",\"mappings\":{\"default\":{\"default\":\"groß S mit untenstehendem Punkt und oben stehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E78\",\"mappings\":{\"default\":{\"default\":\"groß U mit Tilde und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E7A\",\"mappings\":{\"default\":{\"default\":\"groß U mit Makron und Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1EA4\",\"mappings\":{\"default\":{\"default\":\"groß A mit Zirkumflex und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1EA6\",\"mappings\":{\"default\":{\"default\":\"groß A mit Zirkumflex und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1EA8\",\"mappings\":{\"default\":{\"default\":\"groß A mit Zirkumflex und Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EAA\",\"mappings\":{\"default\":{\"default\":\"groß A mit Circumflex und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EAC\",\"mappings\":{\"default\":{\"default\":\"groß A mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Lu\",\"key\":\"1EAE\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1EB0\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1EB2\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve und Hook oben\"}}},{\"category\":\"Lu\",\"key\":\"1EB4\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EB6\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve und Dot Below\"}}},{\"category\":\"Lu\",\"key\":\"1EBE\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1EC0\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1EC2\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex und Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EC4\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EC6\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Lu\",\"key\":\"1ED0\",\"mappings\":{\"default\":{\"default\":\"groß O mit Circumflex und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1ED2\",\"mappings\":{\"default\":{\"default\":\"groß O mit Zirkumflex und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1ED4\",\"mappings\":{\"default\":{\"default\":\"groß O mit Zirkumflex und Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1ED6\",\"mappings\":{\"default\":{\"default\":\"groß O mit Zirkumflex und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1ED8\",\"mappings\":{\"default\":{\"default\":\"groß O mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Lu\",\"key\":\"1EDA\",\"mappings\":{\"default\":{\"default\":\"groß O mit Horn und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1EDC\",\"mappings\":{\"default\":{\"default\":\"groß O mit Horn und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1EDE\",\"mappings\":{\"default\":{\"default\":\"groß O mit Horn und Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EE0\",\"mappings\":{\"default\":{\"default\":\"groß O mit Horn und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EE2\",\"mappings\":{\"default\":{\"default\":\"groß O mit Horn und Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1EE8\",\"mappings\":{\"default\":{\"default\":\"groß U mit Horn und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1EEA\",\"mappings\":{\"default\":{\"default\":\"groß U mit Horn und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1EEC\",\"mappings\":{\"default\":{\"default\":\"groß U mit Horn und Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EEE\",\"mappings\":{\"default\":{\"default\":\"groß U mit Horn und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EF0\",\"mappings\":{\"default\":{\"default\":\"groß U mit Horn und Punkt\"}}}]\n,\n\"de/symbols/latin-upper-single-accent.js\": \n[{\"locale\":\"de\"},{\"key\":\"00C0\",\"mappings\":{\"default\":{\"default\":\"groß A mit Gravis\"}},\"category\":\"Lu\"},{\"key\":\"00C1\",\"mappings\":{\"default\":{\"default\":\"groß A mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"00C2\",\"mappings\":{\"default\":{\"default\":\"groß A mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"00C3\",\"mappings\":{\"default\":{\"default\":\"groß A mit Tilde\"}},\"category\":\"Lu\"},{\"key\":\"00C4\",\"mappings\":{\"default\":{\"default\":\"groß A mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"00C5\",\"mappings\":{\"default\":{\"default\":\"groß A mit Ring darüber\"}},\"category\":\"Lu\"},{\"key\":\"00C7\",\"mappings\":{\"default\":{\"default\":\"groß C mit Cedille\"}},\"category\":\"Lu\"},{\"key\":\"00C8\",\"mappings\":{\"default\":{\"default\":\"groß E mit Gravis\"}},\"category\":\"Lu\"},{\"key\":\"00C9\",\"mappings\":{\"default\":{\"default\":\"groß E mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"00CA\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"00CB\",\"mappings\":{\"default\":{\"default\":\"groß E mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"00CC\",\"mappings\":{\"default\":{\"default\":\"groß I mit Gravis\"}},\"category\":\"Lu\"},{\"key\":\"00CD\",\"mappings\":{\"default\":{\"default\":\"groß I mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"00CE\",\"mappings\":{\"default\":{\"default\":\"groß I mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"00CF\",\"mappings\":{\"default\":{\"default\":\"groß I mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"00D1\",\"mappings\":{\"default\":{\"default\":\"großes n mit Tilde\"}},\"category\":\"Lu\"},{\"key\":\"00D2\",\"mappings\":{\"default\":{\"default\":\"großes o mit Gravis\"}},\"category\":\"Lu\"},{\"key\":\"00D3\",\"mappings\":{\"default\":{\"default\":\"groß O mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"00D4\",\"mappings\":{\"default\":{\"default\":\"groß O mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"00D5\",\"mappings\":{\"default\":{\"default\":\"groß O mit Tilde\"}},\"category\":\"Lu\"},{\"key\":\"00D6\",\"mappings\":{\"default\":{\"default\":\"groß O mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"00D9\",\"mappings\":{\"default\":{\"default\":\"groß U mit Gravis\"}},\"category\":\"Lu\"},{\"key\":\"00DA\",\"mappings\":{\"default\":{\"default\":\"groß U mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"00DB\",\"mappings\":{\"default\":{\"default\":\"groß U mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"00DC\",\"mappings\":{\"default\":{\"default\":\"groß U mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"00DD\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Aigu\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0100\",\"mappings\":{\"default\":{\"default\":\"groß A mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"0102\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve\"}}},{\"category\":\"Lu\",\"key\":\"0104\",\"mappings\":{\"default\":{\"default\":\"groß A mit Ogonek\"}}},{\"key\":\"0106\",\"mappings\":{\"default\":{\"default\":\"groß C mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"0108\",\"mappings\":{\"default\":{\"default\":\"groß C mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"010A\",\"mappings\":{\"default\":{\"default\":\"groß C mit Punkt darüber\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"010C\",\"mappings\":{\"default\":{\"default\":\"groß C mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"010E\",\"mappings\":{\"default\":{\"default\":\"groß D mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"0112\",\"mappings\":{\"default\":{\"default\":\"groß E mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"0114\",\"mappings\":{\"default\":{\"default\":\"groß E mit Breve\"}}},{\"key\":\"0116\",\"mappings\":{\"default\":{\"default\":\"groß E mit Punkt darüber\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0118\",\"mappings\":{\"default\":{\"default\":\"groß E mit Ogonek\"}}},{\"category\":\"Lu\",\"key\":\"011A\",\"mappings\":{\"default\":{\"default\":\"groß E mit Caron\"}}},{\"key\":\"011C\",\"mappings\":{\"default\":{\"default\":\"groß G mit Zirkumflex\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"011E\",\"mappings\":{\"default\":{\"default\":\"groß G mit Breve\"}}},{\"key\":\"0120\",\"mappings\":{\"default\":{\"default\":\"groß G mit Punkt darüber\"}},\"category\":\"Lu\"},{\"key\":\"0122\",\"mappings\":{\"default\":{\"default\":\"groß G mit Cedille\"}},\"category\":\"Lu\"},{\"key\":\"0124\",\"mappings\":{\"default\":{\"default\":\"groß H mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"0128\",\"mappings\":{\"default\":{\"default\":\"groß I mit Tilde\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"012A\",\"mappings\":{\"default\":{\"default\":\"groß I mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"012C\",\"mappings\":{\"default\":{\"default\":\"groß I mit Breve\"}}},{\"category\":\"Lu\",\"key\":\"012E\",\"mappings\":{\"default\":{\"default\":\"groß I mit Ogonek\"}}},{\"key\":\"0130\",\"mappings\":{\"default\":{\"default\":\"groß I mit Punkt darüber\"}},\"category\":\"Lu\"},{\"key\":\"0134\",\"mappings\":{\"default\":{\"default\":\"groß J mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"0136\",\"mappings\":{\"default\":{\"default\":\"groß K mit Cedille\"}},\"category\":\"Lu\"},{\"key\":\"0139\",\"mappings\":{\"default\":{\"default\":\"groß L mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"013B\",\"mappings\":{\"default\":{\"default\":\"groß L mit Cedille\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"013D\",\"mappings\":{\"default\":{\"default\":\"groß L mit Caron\"}}},{\"key\":\"013F\",\"mappings\":{\"default\":{\"default\":\"groß L mit Punkt in der Mitte\"}},\"category\":\"Lu\"},{\"key\":\"0143\",\"mappings\":{\"default\":{\"default\":\"groß N mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"0145\",\"mappings\":{\"default\":{\"default\":\"groß N mit Cedille\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0147\",\"mappings\":{\"default\":{\"default\":\"groß N mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"014C\",\"mappings\":{\"default\":{\"default\":\"groß O mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"014E\",\"mappings\":{\"default\":{\"default\":\"groß O mit Breve\"}}},{\"key\":\"0150\",\"mappings\":{\"default\":{\"default\":\"groß O mit doppeltem Aigu\"}},\"category\":\"Lu\"},{\"key\":\"0154\",\"mappings\":{\"default\":{\"default\":\"groß R mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"0156\",\"mappings\":{\"default\":{\"default\":\"groß R mit Cedille\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0158\",\"mappings\":{\"default\":{\"default\":\"groß R mit Caron\"}}},{\"key\":\"015A\",\"mappings\":{\"default\":{\"default\":\"groß S mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"015C\",\"mappings\":{\"default\":{\"default\":\"groß S mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"015E\",\"mappings\":{\"default\":{\"default\":\"groß S mit Cedille\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0160\",\"mappings\":{\"default\":{\"default\":\"groß S mit Caron\"}}},{\"key\":\"0162\",\"mappings\":{\"default\":{\"default\":\"groß T mit Cedille\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0164\",\"mappings\":{\"default\":{\"default\":\"groß T mit Caron\"}}},{\"key\":\"0168\",\"mappings\":{\"default\":{\"default\":\"groß U mit Tilde\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"016A\",\"mappings\":{\"default\":{\"default\":\"groß U mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"016C\",\"mappings\":{\"default\":{\"default\":\"groß U mit Breve\"}}},{\"key\":\"016E\",\"mappings\":{\"default\":{\"default\":\"groß U mit Ring darüber\"}},\"category\":\"Lu\"},{\"key\":\"0170\",\"mappings\":{\"default\":{\"default\":\"groß U mit dopppeltem Aigu\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0172\",\"mappings\":{\"default\":{\"default\":\"groß U mit Ogonek\"}}},{\"key\":\"0174\",\"mappings\":{\"default\":{\"default\":\"groß W mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"0176\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"0178\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"0179\",\"mappings\":{\"default\":{\"default\":\"groß Z mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"017B\",\"mappings\":{\"default\":{\"default\":\"groß Z mit Punkt darüber\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"017D\",\"mappings\":{\"default\":{\"default\":\"groß Z mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01CD\",\"mappings\":{\"default\":{\"default\":\"groß A mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01CF\",\"mappings\":{\"default\":{\"default\":\"groß I mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01D1\",\"mappings\":{\"default\":{\"default\":\"groß O mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01D3\",\"mappings\":{\"default\":{\"default\":\"groß U mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01E6\",\"mappings\":{\"default\":{\"default\":\"groß G mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01E8\",\"mappings\":{\"default\":{\"default\":\"groß K mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01EA\",\"mappings\":{\"default\":{\"default\":\"groß O mit Ogonek\"}}},{\"category\":\"Lu\",\"key\":\"01F4\",\"mappings\":{\"default\":{\"default\":\"groß G mit Akut\"}}},{\"category\":\"Lu\",\"key\":\"01F8\",\"mappings\":{\"default\":{\"default\":\"groß N mit Gravis\"}}},{\"category\":\"Lu\",\"key\":\"0200\",\"mappings\":{\"default\":{\"default\":\"groß A mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"0202\",\"mappings\":{\"default\":{\"default\":\"groß A mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"0204\",\"mappings\":{\"default\":{\"default\":\"groß E mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"0206\",\"mappings\":{\"default\":{\"default\":\"groß E mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"0208\",\"mappings\":{\"default\":{\"default\":\"groß I mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"020A\",\"mappings\":{\"default\":{\"default\":\"groß I mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"020C\",\"mappings\":{\"default\":{\"default\":\"groß O mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"020E\",\"mappings\":{\"default\":{\"default\":\"groß O mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"0210\",\"mappings\":{\"default\":{\"default\":\"groß R mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"0212\",\"mappings\":{\"default\":{\"default\":\"groß R mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"0214\",\"mappings\":{\"default\":{\"default\":\"groß U mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"0216\",\"mappings\":{\"default\":{\"default\":\"groß U mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"0218\",\"mappings\":{\"default\":{\"default\":\"groß S mit untenstehendem Komma\"}}},{\"category\":\"Lu\",\"key\":\"021A\",\"mappings\":{\"default\":{\"default\":\"groß T mit untenstehendem Komma\"}}},{\"category\":\"Lu\",\"key\":\"021E\",\"mappings\":{\"default\":{\"default\":\"groß H mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"0226\",\"mappings\":{\"default\":{\"default\":\"groß A mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"0228\",\"mappings\":{\"default\":{\"default\":\"groß E mit Cedilla\"}}},{\"category\":\"Lu\",\"key\":\"022E\",\"mappings\":{\"default\":{\"default\":\"groß O mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"0232\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"1E00\",\"mappings\":{\"default\":{\"default\":\"groß A mit Ring unten\"}}},{\"category\":\"Lu\",\"key\":\"1E02\",\"mappings\":{\"default\":{\"default\":\"groß B mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E04\",\"mappings\":{\"default\":{\"default\":\"groß B mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E06\",\"mappings\":{\"default\":{\"default\":\"groß B mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E0A\",\"mappings\":{\"default\":{\"default\":\"groß D mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E0C\",\"mappings\":{\"default\":{\"default\":\"groß D mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E0E\",\"mappings\":{\"default\":{\"default\":\"groß D mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E10\",\"mappings\":{\"default\":{\"default\":\"groß D mit Cedilla\"}}},{\"category\":\"Lu\",\"key\":\"1E12\",\"mappings\":{\"default\":{\"default\":\"groß D mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E18\",\"mappings\":{\"default\":{\"default\":\"groß E mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E1A\",\"mappings\":{\"default\":{\"default\":\"groß E mit darunterliegender Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1E1E\",\"mappings\":{\"default\":{\"default\":\"groß F mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E20\",\"mappings\":{\"default\":{\"default\":\"groß G mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"1E22\",\"mappings\":{\"default\":{\"default\":\"groß H mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E24\",\"mappings\":{\"default\":{\"default\":\"groß H mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E26\",\"mappings\":{\"default\":{\"default\":\"groß H mit Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1E28\",\"mappings\":{\"default\":{\"default\":\"groß H mit Cedilla\"}}},{\"category\":\"Lu\",\"key\":\"1E2A\",\"mappings\":{\"default\":{\"default\":\"groß H mit Breve unten\"}}},{\"category\":\"Lu\",\"key\":\"1E2C\",\"mappings\":{\"default\":{\"default\":\"groß I mit unten stehender Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1E30\",\"mappings\":{\"default\":{\"default\":\"groß K mit Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E32\",\"mappings\":{\"default\":{\"default\":\"groß K mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E34\",\"mappings\":{\"default\":{\"default\":\"groß K mit Zeile\"}}},{\"category\":\"Lu\",\"key\":\"1E36\",\"mappings\":{\"default\":{\"default\":\"groß L mit Punkt unten\"}}},{\"category\":\"Lu\",\"key\":\"1E3A\",\"mappings\":{\"default\":{\"default\":\"groß L mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E3C\",\"mappings\":{\"default\":{\"default\":\"groß L mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E3E\",\"mappings\":{\"default\":{\"default\":\"groß M mit Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E40\",\"mappings\":{\"default\":{\"default\":\"groß M mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E42\",\"mappings\":{\"default\":{\"default\":\"groß M mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E44\",\"mappings\":{\"default\":{\"default\":\"groß N mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E46\",\"mappings\":{\"default\":{\"default\":\"groß N mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E48\",\"mappings\":{\"default\":{\"default\":\"groß N mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E4A\",\"mappings\":{\"default\":{\"default\":\"groß N mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E54\",\"mappings\":{\"default\":{\"default\":\"groß P mit Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E56\",\"mappings\":{\"default\":{\"default\":\"groß P mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E58\",\"mappings\":{\"default\":{\"default\":\"groß R mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E5A\",\"mappings\":{\"default\":{\"default\":\"groß R mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E5E\",\"mappings\":{\"default\":{\"default\":\"groß R mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E60\",\"mappings\":{\"default\":{\"default\":\"groß S mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E62\",\"mappings\":{\"default\":{\"default\":\"groß S mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E6A\",\"mappings\":{\"default\":{\"default\":\"groß T mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E6C\",\"mappings\":{\"default\":{\"default\":\"groß T mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E6E\",\"mappings\":{\"default\":{\"default\":\"groß T mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E70\",\"mappings\":{\"default\":{\"default\":\"groß T mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E72\",\"mappings\":{\"default\":{\"default\":\"groß U mit untenstehender Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1E74\",\"mappings\":{\"default\":{\"default\":\"groß U mit darunterliegender Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1E76\",\"mappings\":{\"default\":{\"default\":\"groß U mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E7C\",\"mappings\":{\"default\":{\"default\":\"groß V mit Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1E7E\",\"mappings\":{\"default\":{\"default\":\"groß V mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E80\",\"mappings\":{\"default\":{\"default\":\"groß W mit Gravis\"}}},{\"category\":\"Lu\",\"key\":\"1E82\",\"mappings\":{\"default\":{\"default\":\"groß W mit Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E84\",\"mappings\":{\"default\":{\"default\":\"groß W mit Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1E86\",\"mappings\":{\"default\":{\"default\":\"groß W mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E88\",\"mappings\":{\"default\":{\"default\":\"groß W mit Punkt unten\"}}},{\"category\":\"Lu\",\"key\":\"1E8A\",\"mappings\":{\"default\":{\"default\":\"groß X mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E8C\",\"mappings\":{\"default\":{\"default\":\"groß X mit Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1E8E\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E90\",\"mappings\":{\"default\":{\"default\":\"groß Z mit Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E92\",\"mappings\":{\"default\":{\"default\":\"groß Z mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E94\",\"mappings\":{\"default\":{\"default\":\"groß Z mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1EA0\",\"mappings\":{\"default\":{\"default\":\"groß A mit Punkt unten\"}}},{\"category\":\"Lu\",\"key\":\"1EA2\",\"mappings\":{\"default\":{\"default\":\"groß A mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EB8\",\"mappings\":{\"default\":{\"default\":\"groß E mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1EBA\",\"mappings\":{\"default\":{\"default\":\"groß E mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EBC\",\"mappings\":{\"default\":{\"default\":\"groß E mit Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EC8\",\"mappings\":{\"default\":{\"default\":\"groß I mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1ECA\",\"mappings\":{\"default\":{\"default\":\"groß I mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1ECC\",\"mappings\":{\"default\":{\"default\":\"groß O mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1ECE\",\"mappings\":{\"default\":{\"default\":\"groß O mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EE4\",\"mappings\":{\"default\":{\"default\":\"groß U mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1EE6\",\"mappings\":{\"default\":{\"default\":\"groß U mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EF2\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Gravis\"}}},{\"category\":\"Lu\",\"key\":\"1EF4\",\"mappings\":{\"default\":{\"default\":\"groß Y mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1EF6\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EF8\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Tilde\"}}}]\n,\n\"de/symbols/math_angles.js\": \n[{\"locale\":\"de\"},{\"category\":\"Sm\",\"key\":\"22BE\",\"mappings\":{\"default\":{\"default\":\"rechter Winkel mit Bogen\"}}},{\"category\":\"Sm\",\"key\":\"237C\",\"mappings\":{\"default\":{\"default\":\"rechter Winkel mit nach unten gerichtetem Zickzackpfeil\"}}},{\"category\":\"Sm\",\"key\":\"27C0\",\"mappings\":{\"default\":{\"default\":\"Dreidimensionaler Winkel\"}}},{\"category\":\"Sm\",\"key\":\"299B\",\"mappings\":{\"default\":{\"default\":\"Gemessene Winkelöffnung links\"}}},{\"category\":\"Sm\",\"key\":\"299C\",\"mappings\":{\"default\":{\"default\":\"Rechtwinklige Variante mit Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"299D\",\"mappings\":{\"default\":{\"default\":\"rechter Winkel mit Punkt gemessen\"}}},{\"category\":\"Sm\",\"key\":\"299E\",\"mappings\":{\"default\":{\"default\":\"Winkel mit S nach innen\"}}},{\"category\":\"Sm\",\"key\":\"299F\",\"mappings\":{\"default\":{\"default\":\"Spitzer Winkel\"}}},{\"category\":\"Sm\",\"key\":\"29A0\",\"mappings\":{\"default\":{\"default\":\"Sphärischer Öffnungswinkel nach links\"}}},{\"category\":\"Sm\",\"key\":\"29A1\",\"mappings\":{\"default\":{\"default\":\"Sphärischer Winkel, der sich öffnet\"}}},{\"category\":\"Sm\",\"key\":\"29A2\",\"mappings\":{\"default\":{\"default\":\"Gedrehter Winkel\"}}},{\"category\":\"Sm\",\"key\":\"29A3\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Winkel\"}}},{\"category\":\"Sm\",\"key\":\"29A4\",\"mappings\":{\"default\":{\"default\":\"Winkel mit Underbar\"}}},{\"category\":\"Sm\",\"key\":\"29A5\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Winkel mit Unterleiste\"}}},{\"category\":\"Sm\",\"key\":\"29A6\",\"mappings\":{\"default\":{\"default\":\"Schräger Winkel, der sich öffnet\"}}},{\"category\":\"Sm\",\"key\":\"29A7\",\"mappings\":{\"default\":{\"default\":\"Schräger Winkel, der sich nach unten öffnet\"}}},{\"category\":\"Sm\",\"key\":\"29A8\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im Pfeil nach oben und rechts\"}}},{\"category\":\"Sm\",\"key\":\"29A9\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm und Pfeil nach oben und links\"}}},{\"category\":\"Sm\",\"key\":\"29AA\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im nach unten zeigenden Pfeil und rechts\"}}},{\"category\":\"Sm\",\"key\":\"29AB\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im nach unten zeigenden Pfeil\"}}},{\"category\":\"Sm\",\"key\":\"29AC\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im Pfeil nach rechts und oben\"}}},{\"category\":\"Sm\",\"key\":\"29AD\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im Pfeil nach links und oben\"}}},{\"category\":\"Sm\",\"key\":\"29AE\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im nach rechts und unten zeigenden Pfeil\"}}},{\"category\":\"Sm\",\"key\":\"29AF\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm und Pfeil nach links und unten\"}}}]\n,\n\"de/symbols/math_arrows.js\": \n[{\"locale\":\"de\"},{\"category\":\"Sm\",\"key\":\"2190\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2191\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil\"}}},{\"category\":\"Sm\",\"key\":\"2192\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2193\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2194\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil\"}}},{\"category\":\"So\",\"key\":\"2195\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach oben\"}}},{\"category\":\"So\",\"key\":\"2196\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeil\"}}},{\"category\":\"So\",\"key\":\"2197\",\"mappings\":{\"default\":{\"default\":\"Nordostpfeil\"}}},{\"category\":\"So\",\"key\":\"2198\",\"mappings\":{\"default\":{\"default\":\"Südostpfeil\"}}},{\"category\":\"So\",\"key\":\"2199\",\"mappings\":{\"default\":{\"default\":\"Südwestpfeil\"}}},{\"category\":\"Sm\",\"key\":\"219A\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Strich\"}}},{\"category\":\"Sm\",\"key\":\"219B\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Strich\"}}},{\"category\":\"So\",\"key\":\"219C\",\"mappings\":{\"default\":{\"default\":\"Wellenpfeil nach links\"}}},{\"category\":\"So\",\"key\":\"219D\",\"mappings\":{\"default\":{\"default\":\"Wellenpfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"219E\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit zwei Spitzen\"}}},{\"category\":\"So\",\"key\":\"219F\",\"mappings\":{\"default\":{\"default\":\"Aufwärts zwei Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"21A0\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit zwei Köpfen\"}}},{\"category\":\"So\",\"key\":\"21A1\",\"mappings\":{\"default\":{\"default\":\"Abwärts zwei Pfeil nach unten\"}}},{\"category\":\"So\",\"key\":\"21A2\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Schwanz\"}}},{\"category\":\"Sm\",\"key\":\"21A3\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Schwanz\"}}},{\"category\":\"So\",\"key\":\"21A4\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links von der Bar\"}}},{\"category\":\"So\",\"key\":\"21A5\",\"mappings\":{\"default\":{\"default\":\"Pfeil von der Bar nach oben\"}}},{\"category\":\"Sm\",\"key\":\"21A6\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts von der Bar\"}}},{\"category\":\"So\",\"key\":\"21A7\",\"mappings\":{\"default\":{\"default\":\"Pfeil von der Bar nach unten\"}}},{\"category\":\"So\",\"key\":\"21A8\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten mit Basis\"}}},{\"category\":\"So\",\"key\":\"21A9\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Haken\"}}},{\"category\":\"So\",\"key\":\"21AA\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Haken\"}}},{\"category\":\"So\",\"key\":\"21AB\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Schleife\"}}},{\"category\":\"So\",\"key\":\"21AC\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Schleife\"}}},{\"category\":\"So\",\"key\":\"21AD\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Wellenpfeil\"}}},{\"category\":\"Sm\",\"key\":\"21AE\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil mit Strich\"}}},{\"category\":\"So\",\"key\":\"21AF\",\"mappings\":{\"default\":{\"default\":\"Zickzack-Pfeil nach unten\"}}},{\"category\":\"So\",\"key\":\"21B0\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil mit Spitze nach links\"}}},{\"category\":\"So\",\"key\":\"21B1\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil mit Spitze nach rechts\"}}},{\"category\":\"So\",\"key\":\"21B2\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten mit Spitze nach links\"}}},{\"category\":\"So\",\"key\":\"21B3\",\"mappings\":{\"default\":{\"default\":\"Abwärtspfeil mit Spitze nach rechts\"}}},{\"category\":\"So\",\"key\":\"21B4\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Ecke nach unten\"}}},{\"category\":\"So\",\"key\":\"21B5\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten mit Ecke nach links\"}}},{\"category\":\"So\",\"key\":\"21B6\",\"mappings\":{\"default\":{\"default\":\"Gegen den Uhrzeigersinn oberer halbkreisförmiger Pfeil\"}}},{\"category\":\"So\",\"key\":\"21B7\",\"mappings\":{\"default\":{\"default\":\"Halbkreis im Uhrzeigersinn\"}}},{\"category\":\"So\",\"key\":\"21B8\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeil zur langen Bar\"}}},{\"category\":\"So\",\"key\":\"21B9\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links zum Überfahren Pfeil nach rechts zum Überfahren\"}}},{\"category\":\"So\",\"key\":\"21BA\",\"mappings\":{\"default\":{\"default\":\"Offener Kreispfeil gegen den Uhrzeigersinn\"}}},{\"category\":\"So\",\"key\":\"21BB\",\"mappings\":{\"default\":{\"default\":\"Kreispfeil im Uhrzeigersinn öffnen\"}}},{\"category\":\"So\",\"key\":\"21C4\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts über Pfeil nach links\"}}},{\"category\":\"So\",\"key\":\"21C5\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil nach links von Abwärtspfeil\"}}},{\"category\":\"So\",\"key\":\"21C6\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links über Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"21C7\",\"mappings\":{\"default\":{\"default\":\"Links gepaarte Pfeile\"}}},{\"category\":\"So\",\"key\":\"21C8\",\"mappings\":{\"default\":{\"default\":\"Aufwärts gepaarte Pfeile\"}}},{\"category\":\"So\",\"key\":\"21C9\",\"mappings\":{\"default\":{\"default\":\"Rechts gepaarte Pfeile\"}}},{\"category\":\"So\",\"key\":\"21CA\",\"mappings\":{\"default\":{\"default\":\"Abwärts gepaarte Pfeile\"}}},{\"category\":\"So\",\"key\":\"21CD\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links mit Strich\"}}},{\"category\":\"Sm\",\"key\":\"21CE\",\"mappings\":{\"default\":{\"default\":\"Links Rechts Doppelpfeil mit Strich\"}}},{\"category\":\"Sm\",\"key\":\"21CF\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach rechts mit Strich\"}}},{\"category\":\"So\",\"key\":\"21D0\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links\"}}},{\"category\":\"So\",\"key\":\"21D1\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach oben\"}}},{\"category\":\"Sm\",\"key\":\"21D2\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"21D3\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"21D4\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21D5\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach unten\"}}},{\"category\":\"So\",\"key\":\"21D6\",\"mappings\":{\"default\":{\"default\":\"Nordwest-Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21D7\",\"mappings\":{\"default\":{\"default\":\"Nordost-Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21D8\",\"mappings\":{\"default\":{\"default\":\"Südost Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21D9\",\"mappings\":{\"default\":{\"default\":\"Südwest-Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21DA\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Pfeil nach links\"}}},{\"category\":\"So\",\"key\":\"21DB\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"21DC\",\"mappings\":{\"default\":{\"default\":\"Linker Squiggle-Pfeil\"}}},{\"category\":\"So\",\"key\":\"21DD\",\"mappings\":{\"default\":{\"default\":\"Nach rechts gekrümmter Pfeil\"}}},{\"category\":\"So\",\"key\":\"21DE\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil mit Doppelstrich\"}}},{\"category\":\"So\",\"key\":\"21DF\",\"mappings\":{\"default\":{\"default\":\"Abwärtspfeil mit Doppelstrich\"}}},{\"category\":\"So\",\"key\":\"21E0\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links nach links\"}}},{\"category\":\"So\",\"key\":\"21E1\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach oben gestrichen\"}}},{\"category\":\"So\",\"key\":\"21E2\",\"mappings\":{\"default\":{\"default\":\"Rechts gestrichener Pfeil\"}}},{\"category\":\"So\",\"key\":\"21E3\",\"mappings\":{\"default\":{\"default\":\"Abwärts gestrichelter Pfeil\"}}},{\"category\":\"So\",\"key\":\"21E4\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links zur Bar\"}}},{\"category\":\"So\",\"key\":\"21E5\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts zur Bar\"}}},{\"category\":\"So\",\"key\":\"21E6\",\"mappings\":{\"default\":{\"default\":\"Weißer Pfeil nach links\"}}},{\"category\":\"So\",\"key\":\"21E7\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"21E8\",\"mappings\":{\"default\":{\"default\":\"Rechts weißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"21E9\",\"mappings\":{\"default\":{\"default\":\"Abwärts weißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"21EA\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Pfeil von der Stange\"}}},{\"category\":\"So\",\"key\":\"21EB\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Pfeil auf Sockel\"}}},{\"category\":\"So\",\"key\":\"21EC\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Pfeil auf Sockel mit horizontaler Stange\"}}},{\"category\":\"So\",\"key\":\"21ED\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Pfeil auf Sockel mit vertikaler Stange\"}}},{\"category\":\"So\",\"key\":\"21EE\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21EF\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer doppelter Pfeil auf Sockel\"}}},{\"category\":\"So\",\"key\":\"21F0\",\"mappings\":{\"default\":{\"default\":\"Rechts weißer Pfeil von der Wand\"}}},{\"category\":\"So\",\"key\":\"21F1\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeil zur Ecke\"}}},{\"category\":\"So\",\"key\":\"21F2\",\"mappings\":{\"default\":{\"default\":\"Südostpfeil zur Ecke\"}}},{\"category\":\"So\",\"key\":\"21F3\",\"mappings\":{\"default\":{\"default\":\"Weißer Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"21F4\",\"mappings\":{\"default\":{\"default\":\"rechter Pfeil mit kleinem Kreis\"}}},{\"category\":\"Sm\",\"key\":\"21F5\",\"mappings\":{\"default\":{\"default\":\"Abwärtspfeil nach links von Aufwärtspfeil\"}}},{\"category\":\"Sm\",\"key\":\"21F6\",\"mappings\":{\"default\":{\"default\":\"Drei nach rechts gerichtete Pfeile\"}}},{\"category\":\"Sm\",\"key\":\"21F7\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21F8\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21F9\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21FA\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21FB\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21FC\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21FD\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit offenem Kopf\"}}},{\"category\":\"Sm\",\"key\":\"21FE\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit offenem Kopf\"}}},{\"category\":\"Sm\",\"key\":\"21FF\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil mit offenem Kopf\"}}},{\"category\":\"So\",\"key\":\"2301\",\"mappings\":{\"default\":{\"default\":\"Elektrischer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2303\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach oben\"}}},{\"category\":\"So\",\"key\":\"2304\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten\"}}},{\"category\":\"So\",\"key\":\"2324\",\"mappings\":{\"default\":{\"default\":\"Pfeilspitze zwischen zwei horizontalen Balken\"}}},{\"category\":\"So\",\"key\":\"238B\",\"mappings\":{\"default\":{\"default\":\"Gebrochener Kreis mit Nordwestpfeil\"}}},{\"category\":\"So\",\"key\":\"2794\",\"mappings\":{\"default\":{\"default\":\"Schwerer, nach rechts gerichteter Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"2798\",\"mappings\":{\"default\":{\"default\":\"Schwerer Südostpfeil\"}}},{\"category\":\"So\",\"key\":\"2799\",\"mappings\":{\"default\":{\"default\":\"Schwerer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"279A\",\"mappings\":{\"default\":{\"default\":\"Schwerer Nordostpfeil\"}}},{\"category\":\"So\",\"key\":\"279B\",\"mappings\":{\"default\":{\"default\":\"Zeichnungspunkt Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"279C\",\"mappings\":{\"default\":{\"default\":\"Schwerer runder Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"279D\",\"mappings\":{\"default\":{\"default\":\"Dreieckköpfiger Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"279E\",\"mappings\":{\"default\":{\"default\":\"Schwerer Dreieckspfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"279F\",\"mappings\":{\"default\":{\"default\":\"Dreieckköpfiger Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A0\",\"mappings\":{\"default\":{\"default\":\"Schwerer, gestrichelter Dreieckspfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A1\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A2\",\"mappings\":{\"default\":{\"default\":\"Dreidimensionale, nach oben beleuchtete Pfeilspitze\"}}},{\"category\":\"So\",\"key\":\"27A3\",\"mappings\":{\"default\":{\"default\":\"Dreidimensionale, von unten beleuchtete Pfeilspitze nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A4\",\"mappings\":{\"default\":{\"default\":\"Schwarze Pfeilspitze nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A5\",\"mappings\":{\"default\":{\"default\":\"Schwerer schwarzer Pfeil nach unten und rechts gebogen\"}}},{\"category\":\"So\",\"key\":\"27A6\",\"mappings\":{\"default\":{\"default\":\"Schwerer schwarzer Pfeil nach oben und rechts gebogen\"}}},{\"category\":\"So\",\"key\":\"27A7\",\"mappings\":{\"default\":{\"default\":\"Schwarzer nach rechts gerichteter Pfeil\"}}},{\"category\":\"So\",\"key\":\"27A8\",\"mappings\":{\"default\":{\"default\":\"Schwerer konkaver Spitze-Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A9\",\"mappings\":{\"default\":{\"default\":\"Rechts geschatteter weißer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AA\",\"mappings\":{\"default\":{\"default\":\"Links schattierter weißer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AB\",\"mappings\":{\"default\":{\"default\":\"Zurückgekippter, beschatteter weißer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AC\",\"mappings\":{\"default\":{\"default\":\"Vorne geneigter, beschatteter weißer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AD\",\"mappings\":{\"default\":{\"default\":\"Schwerer unterer rechter Schatten mit weißem Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AE\",\"mappings\":{\"default\":{\"default\":\"Schwerer oberer rechter Schatten mit weißem Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AF\",\"mappings\":{\"default\":{\"default\":\"Gekerbter Pfeil nach rechts unten rechts\"}}},{\"category\":\"So\",\"key\":\"27B1\",\"mappings\":{\"default\":{\"default\":\"Weißer Pfeil nach rechts oben gekerbt\"}}},{\"category\":\"So\",\"key\":\"27B2\",\"mappings\":{\"default\":{\"default\":\"Eingekreister schwerer weißer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27B3\",\"mappings\":{\"default\":{\"default\":\"Pfeil mit weißer Feder nach rechts\"}}},{\"category\":\"So\",\"key\":\"27B4\",\"mappings\":{\"default\":{\"default\":\"Schwarz-gefiederter Südostpfeil\"}}},{\"category\":\"So\",\"key\":\"27B5\",\"mappings\":{\"default\":{\"default\":\"Pfeil mit schwarzer Feder nach rechts\"}}},{\"category\":\"So\",\"key\":\"27B6\",\"mappings\":{\"default\":{\"default\":\"Schwarzgefiederter Nordostpfeil\"}}},{\"category\":\"So\",\"key\":\"27B7\",\"mappings\":{\"default\":{\"default\":\"Schwerer schwarzgefiederter Südostpfeil\"}}},{\"category\":\"So\",\"key\":\"27B8\",\"mappings\":{\"default\":{\"default\":\"Schwerer schwarzgefiederter Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27B9\",\"mappings\":{\"default\":{\"default\":\"Schwerer schwarzgefiederter Nordostpfeil\"}}},{\"category\":\"So\",\"key\":\"27BA\",\"mappings\":{\"default\":{\"default\":\"Teardrop-Barbed-Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27BB\",\"mappings\":{\"default\":{\"default\":\"Schwerer Tropfen-Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27BC\",\"mappings\":{\"default\":{\"default\":\"Keil-Schwanz nach rechts Pfeil\"}}},{\"category\":\"So\",\"key\":\"27BD\",\"mappings\":{\"default\":{\"default\":\"Schwerer, nach rechts gekeilter Pfeil\"}}},{\"category\":\"So\",\"key\":\"27BE\",\"mappings\":{\"default\":{\"default\":\"Offener Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"27F0\",\"mappings\":{\"default\":{\"default\":\"Vierfachpfeil nach oben\"}}},{\"category\":\"Sm\",\"key\":\"27F1\",\"mappings\":{\"default\":{\"default\":\"Vierfacher Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"27F2\",\"mappings\":{\"default\":{\"default\":\"Kreispfeil gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"27F3\",\"mappings\":{\"default\":{\"default\":\"Kreispfeil im Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"27F4\",\"mappings\":{\"default\":{\"default\":\"rechter Pfeil mit Circled Plus\"}}},{\"category\":\"Sm\",\"key\":\"27F5\",\"mappings\":{\"default\":{\"default\":\"Langer Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"27F6\",\"mappings\":{\"default\":{\"default\":\"Langer Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"27F7\",\"mappings\":{\"default\":{\"default\":\"Langer linker rechter Pfeil\"}}},{\"category\":\"Sm\",\"key\":\"27F8\",\"mappings\":{\"default\":{\"default\":\"Langer Doppelpfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"27F9\",\"mappings\":{\"default\":{\"default\":\"Langer Doppelpfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"27FA\",\"mappings\":{\"default\":{\"default\":\"Langer linker rechter Doppelpfeil\"}}},{\"category\":\"Sm\",\"key\":\"27FB\",\"mappings\":{\"default\":{\"default\":\"Langer Pfeil nach links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"27FC\",\"mappings\":{\"default\":{\"default\":\"Langer Rechtspfeil von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"27FD\",\"mappings\":{\"default\":{\"default\":\"Langer Doppelpfeil nach links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"27FE\",\"mappings\":{\"default\":{\"default\":\"Langer Doppelpfeil nach rechts von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"27FF\",\"mappings\":{\"default\":{\"default\":\"Langer nach rechts gerichteter Squiggle-Pfeil\"}}},{\"category\":\"Sm\",\"key\":\"2900\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit senkrechtem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2901\",\"mappings\":{\"default\":{\"default\":\"Zwei Pfeil nach rechts mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2902\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2903\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach rechts mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2904\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Doppelpfeil mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2905\",\"mappings\":{\"default\":{\"default\":\"Zwei Pfeil nach rechts von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2906\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2907\",\"mappings\":{\"default\":{\"default\":\"Doppelter Pfeil nach rechts von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2908\",\"mappings\":{\"default\":{\"default\":\"Abwärtspfeil mit horizontalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2909\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil mit horizontalem Anschlag\"}}},{\"category\":\"Sm\",\"key\":\"290A\",\"mappings\":{\"default\":{\"default\":\"Dreifachpfeil nach oben\"}}},{\"category\":\"Sm\",\"key\":\"290B\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"290C\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"290D\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"290E\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Strichpfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"290F\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Bindestrich nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2910\",\"mappings\":{\"default\":{\"default\":\"Dreipoliger Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2911\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit gepunktetem Stamm\"}}},{\"category\":\"Sm\",\"key\":\"2912\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil zur Bar\"}}},{\"category\":\"Sm\",\"key\":\"2913\",\"mappings\":{\"default\":{\"default\":\"Abwärtspfeil zur Bar\"}}},{\"category\":\"Sm\",\"key\":\"2914\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Schwanz mit senkrechtem Anschlag\"}}},{\"category\":\"Sm\",\"key\":\"2915\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Schwanz mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2916\",\"mappings\":{\"default\":{\"default\":\"Nach rechts gerichteter zweiköpfiger Pfeil mit Schwanz\"}}},{\"category\":\"Sm\",\"key\":\"2917\",\"mappings\":{\"default\":{\"default\":\"Nach rechts gerichteter Doppelpfeil mit Schwanz mit senkrechtem Anschlag\"}}},{\"category\":\"Sm\",\"key\":\"2918\",\"mappings\":{\"default\":{\"default\":\"Nach rechts gerichteter Doppelpfeil mit Schwanz mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2919\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links nach links\"}}},{\"category\":\"Sm\",\"key\":\"291A\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"291B\",\"mappings\":{\"default\":{\"default\":\"Doppelter Pfeilschwanz nach links\"}}},{\"category\":\"Sm\",\"key\":\"291C\",\"mappings\":{\"default\":{\"default\":\"Doppelter Pfeilschwanz nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"291D\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links zu Black Diamond\"}}},{\"category\":\"Sm\",\"key\":\"291E\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts zu Black Diamond\"}}},{\"category\":\"Sm\",\"key\":\"291F\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links von Bar zu Black Diamond\"}}},{\"category\":\"Sm\",\"key\":\"2920\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts von Bar zu Black Diamond\"}}},{\"category\":\"Sm\",\"key\":\"2921\",\"mappings\":{\"default\":{\"default\":\"Nordwest- und Südostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2922\",\"mappings\":{\"default\":{\"default\":\"Nordost- und Südwestpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2923\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeil mit Haken\"}}},{\"category\":\"Sm\",\"key\":\"2924\",\"mappings\":{\"default\":{\"default\":\"Nordostpfeil mit Haken\"}}},{\"category\":\"Sm\",\"key\":\"2925\",\"mappings\":{\"default\":{\"default\":\"Südostpfeil mit Haken\"}}},{\"category\":\"Sm\",\"key\":\"2926\",\"mappings\":{\"default\":{\"default\":\"Südwestpfeil mit Haken\"}}},{\"category\":\"Sm\",\"key\":\"2927\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeil und Nordostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2928\",\"mappings\":{\"default\":{\"default\":\"Nordostpfeil und Südostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2929\",\"mappings\":{\"default\":{\"default\":\"Südostpfeil und Südwestpfeil\"}}},{\"category\":\"Sm\",\"key\":\"292A\",\"mappings\":{\"default\":{\"default\":\"Südwestpfeil und Nordwestpfeil\"}}},{\"category\":\"Sm\",\"key\":\"292D\",\"mappings\":{\"default\":{\"default\":\"Südostpfeil Kreuzung Nordostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"292E\",\"mappings\":{\"default\":{\"default\":\"Nordostpfeil Kreuzung Südostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"292F\",\"mappings\":{\"default\":{\"default\":\"Fallende Diagonale, die Nordostpfeil kreuzt\"}}},{\"category\":\"Sm\",\"key\":\"2930\",\"mappings\":{\"default\":{\"default\":\"Steigende Diagonale, die Südostpfeil kreuzt\"}}},{\"category\":\"Sm\",\"key\":\"2931\",\"mappings\":{\"default\":{\"default\":\"Nordostpfeilüberquerung Nordwestpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2932\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeilüberquerung Nordostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2933\",\"mappings\":{\"default\":{\"default\":\"Wellenpfeil, der direkt nach rechts zeigt\"}}},{\"category\":\"Sm\",\"key\":\"2934\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts, dann nach oben gekrümmt\"}}},{\"category\":\"Sm\",\"key\":\"2935\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts, dann nach unten gekrümmt\"}}},{\"category\":\"Sm\",\"key\":\"2936\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten, dann nach links gekrümmt\"}}},{\"category\":\"Sm\",\"key\":\"2937\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten, dann nach rechts gekrümmt\"}}},{\"category\":\"Sm\",\"key\":\"2938\",\"mappings\":{\"default\":{\"default\":\"Rechtsseitiger Bogen im Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"2939\",\"mappings\":{\"default\":{\"default\":\"Bogen der linken Seite gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"293A\",\"mappings\":{\"default\":{\"default\":\"Pfeil oben gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"293B\",\"mappings\":{\"default\":{\"default\":\"Pfeil unten gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"293C\",\"mappings\":{\"default\":{\"default\":\"Pfeil oben im Uhrzeigersinn mit Minus\"}}},{\"category\":\"Sm\",\"key\":\"293D\",\"mappings\":{\"default\":{\"default\":\"Pfeil oben gegen den Uhrzeigersinn mit Plus\"}}},{\"category\":\"Sm\",\"key\":\"293E\",\"mappings\":{\"default\":{\"default\":\"Rechts unten halbkreisförmig im Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"293F\",\"mappings\":{\"default\":{\"default\":\"Linker halbkreisförmiger Pfeil gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"2940\",\"mappings\":{\"default\":{\"default\":\"Geschlossener Kreispfeil gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"2941\",\"mappings\":{\"default\":{\"default\":\"Geschlossener Kreispfeil im Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"2942\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts über Kurzer Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2943\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links über Kurzer Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2944\",\"mappings\":{\"default\":{\"default\":\"Kurzer Pfeil nach rechts Über Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2945\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Plus unten\"}}},{\"category\":\"Sm\",\"key\":\"2946\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Plus unten\"}}},{\"category\":\"Sm\",\"key\":\"2947\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts durch X\"}}},{\"category\":\"Sm\",\"key\":\"2948\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil durch kleinen Kreis\"}}},{\"category\":\"Sm\",\"key\":\"2949\",\"mappings\":{\"default\":{\"default\":\"Aufwärts zweiköpfiger Pfeil vom kleinen Kreis\"}}},{\"key\":\"2970\",\"mappings\":{\"default\":{\"default\":\"round implies\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2971\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen über dem Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2972\",\"mappings\":{\"default\":{\"default\":\"Tilde-Operator über dem Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2973\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links über Tilde-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2974\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts über Tilde-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2975\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts fast gleich\"}}},{\"category\":\"Sm\",\"key\":\"2976\",\"mappings\":{\"default\":{\"default\":\"Weniger als oben Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2977\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links durch weniger als\"}}},{\"category\":\"Sm\",\"key\":\"2978\",\"mappings\":{\"default\":{\"default\":\"Größer als über dem Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2979\",\"mappings\":{\"default\":{\"default\":\"Untersatz über dem Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"297A\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links durch Teilmenge\"}}},{\"category\":\"Sm\",\"key\":\"297B\",\"mappings\":{\"default\":{\"default\":\"Superset über dem Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"29B3\",\"mappings\":{\"default\":{\"default\":\"Leeres Set mit Pfeil rechts oben\"}}},{\"category\":\"Sm\",\"key\":\"29B4\",\"mappings\":{\"default\":{\"default\":\"Leeres Set mit linkem Pfeil oben\"}}},{\"category\":\"Sm\",\"key\":\"29BD\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach oben durch Kreis\"}}},{\"category\":\"Sm\",\"key\":\"29EA\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Diamant mit Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"29EC\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"29ED\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Kreis mit Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2A17\",\"mappings\":{\"default\":{\"default\":\"Integral mit Pfeil nach links mit Haken\"}}},{\"category\":\"So\",\"key\":\"2B00\",\"mappings\":{\"default\":{\"default\":\"North East White Arrow\"}}},{\"category\":\"So\",\"key\":\"2B01\",\"mappings\":{\"default\":{\"default\":\"Nordwestlicher weißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B02\",\"mappings\":{\"default\":{\"default\":\"Südostweißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B03\",\"mappings\":{\"default\":{\"default\":\"Südwestweißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B04\",\"mappings\":{\"default\":{\"default\":\"Linker rechter weißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B05\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Pfeil nach links\"}}},{\"category\":\"So\",\"key\":\"2B06\",\"mappings\":{\"default\":{\"default\":\"Aufwärts schwarzer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B07\",\"mappings\":{\"default\":{\"default\":\"Abwärts schwarzer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B08\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Nordostpfeil\"}}},{\"category\":\"So\",\"key\":\"2B09\",\"mappings\":{\"default\":{\"default\":\"Nordwestlicher schwarzer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B0A\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Südostpfeil\"}}},{\"category\":\"So\",\"key\":\"2B0B\",\"mappings\":{\"default\":{\"default\":\"Südwestlicher schwarzer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B0C\",\"mappings\":{\"default\":{\"default\":\"Linker rechter schwarzer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B0D\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Pfeil nach unten\"}}},{\"category\":\"So\",\"key\":\"2B0E\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Spitze nach unten\"}}},{\"category\":\"So\",\"key\":\"2B0F\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Spitze nach oben\"}}},{\"category\":\"So\",\"key\":\"2B10\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Spitze nach unten\"}}},{\"category\":\"So\",\"key\":\"2B11\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Spitze nach oben\"}}},{\"category\":\"Sm\",\"key\":\"2B30\",\"mappings\":{\"default\":{\"default\":\"Linker Pfeil mit kleinem Kreis\"}}},{\"category\":\"Sm\",\"key\":\"2B31\",\"mappings\":{\"default\":{\"default\":\"Drei nach links gerichtete Pfeile\"}}},{\"category\":\"Sm\",\"key\":\"2B32\",\"mappings\":{\"default\":{\"default\":\"Linker Pfeil mit Circled Plus\"}}},{\"category\":\"Sm\",\"key\":\"2B33\",\"mappings\":{\"default\":{\"default\":\"Langer nach links gerichteter Squiggle-Pfeil\"}}},{\"category\":\"Sm\",\"key\":\"2B34\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit senkrechtem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B35\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B36\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2B37\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit zwei Köpfen\"}}},{\"category\":\"Sm\",\"key\":\"2B38\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit gepunktetem Stamm\"}}},{\"category\":\"Sm\",\"key\":\"2B39\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Schwanz mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B3A\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Schwanz mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B3B\",\"mappings\":{\"default\":{\"default\":\"Nach links gerichteter zweiköpfiger Pfeil mit Schwanz\"}}},{\"category\":\"Sm\",\"key\":\"2B3C\",\"mappings\":{\"default\":{\"default\":\"Nach links gerichteter zweiköpfiger Pfeil mit Schwanz mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B3D\",\"mappings\":{\"default\":{\"default\":\"Nach links gerichteter zweiköpfiger Pfeil mit Schwanz mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B3E\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links durch X\"}}},{\"category\":\"Sm\",\"key\":\"2B3F\",\"mappings\":{\"default\":{\"default\":\"Wellenpfeil, der direkt nach links zeigt\"}}},{\"category\":\"Sm\",\"key\":\"2B40\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen über dem Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2B41\",\"mappings\":{\"default\":{\"default\":\"Reverse-Tilde-Operator Über Linkspfeil\"}}},{\"category\":\"Sm\",\"key\":\"2B42\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links über der Rückseite fast gleich\"}}},{\"category\":\"Sm\",\"key\":\"2B43\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts durch mehr als\"}}},{\"category\":\"Sm\",\"key\":\"2B44\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts durch Superset\"}}},{\"category\":\"So\",\"key\":\"2B45\",\"mappings\":{\"default\":{\"default\":\"Vierfachpfeil nach links\"}}},{\"category\":\"So\",\"key\":\"2B46\",\"mappings\":{\"default\":{\"default\":\"Vierfachpfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2B47\",\"mappings\":{\"default\":{\"default\":\"Reverse-Tilde-Operator über dem Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2B48\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts oben fast gleich\"}}},{\"category\":\"Sm\",\"key\":\"2B49\",\"mappings\":{\"default\":{\"default\":\"Tilde-Operator über dem Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2B4A\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links oben fast gleich\"}}},{\"category\":\"Sm\",\"key\":\"2B4B\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links über Reverse-Tilde-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2B4C\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts über Reverse-Tilde-Operator\"}}},{\"category\":\"Sm\",\"key\":\"FFE9\",\"mappings\":{\"default\":{\"default\":\"Halbbreiter Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"FFEA\",\"mappings\":{\"default\":{\"default\":\"Halbbreiter Pfeil nach oben\"}}},{\"category\":\"Sm\",\"key\":\"FFEB\",\"mappings\":{\"default\":{\"default\":\"Halbbreiter Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"FFEC\",\"mappings\":{\"default\":{\"default\":\"Halbbreiter Pfeil nach unten\"}}}]\n,\n\"de/symbols/math_characters.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"2113\",\"mappings\":{\"default\":{\"default\":\"Skript klein L\"}}},{\"category\":\"Sm\",\"key\":\"2118\",\"mappings\":{\"default\":{\"default\":\"Skript groß P\"}}},{\"category\":\"Ll\",\"key\":\"213C\",\"mappings\":{\"default\":{\"default\":\"pi mit Doppelstrich\"}}},{\"category\":\"Ll\",\"key\":\"213D\",\"mappings\":{\"default\":{\"default\":\"gamma mit Doppelstrich\"}}},{\"category\":\"Lu\",\"key\":\"213E\",\"mappings\":{\"default\":{\"default\":\"groß Gamma mit Doppelstrich\"}}},{\"category\":\"Lu\",\"key\":\"213F\",\"mappings\":{\"default\":{\"default\":\"groß Pi mit Doppelstrich\"}}},{\"category\":\"Sm\",\"key\":\"2140\",\"mappings\":{\"default\":{\"default\":\"Summenzeichen mit Doppelstrich\"}}},{\"category\":\"Lu\",\"key\":\"2145\",\"mappings\":{\"default\":{\"default\":\"groß D kursiv mit Doppelstrich\"}}},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"d kursiv mit Doppelstrich\"}},\"key\":\"2146\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"e kursiv mit Doppelstrich\"}},\"key\":\"2147\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"i kursiv mit Doppelstrich\"}},\"key\":\"2148\"},{\"category\":\"Ll\",\"key\":\"2149\",\"mappings\":{\"default\":{\"default\":\"j kursiv mit Doppelstrich\"}}},{\"category\":\"Ll\",\"key\":\"1D6A4\",\"mappings\":{\"default\":{\"default\":\"punktloses i kursiv\"}}},{\"category\":\"Ll\",\"key\":\"1D6A5\",\"mappings\":{\"default\":{\"default\":\"punktloses j kursiv\"}}}]\n,\n\"de/symbols/math_delimiters.js\": \n[{\"locale\":\"de\"},{\"key\":\"0028\",\"mappings\":{\"default\":{\"default\":\"Klammer auf\"}},\"category\":\"Ps\"},{\"key\":\"0029\",\"mappings\":{\"default\":{\"default\":\"Klammer zu\"}},\"category\":\"Pe\"},{\"key\":\"005B\",\"mappings\":{\"default\":{\"default\":\"eckige Klammer auf\"}},\"category\":\"Ps\"},{\"key\":\"005D\",\"mappings\":{\"default\":{\"default\":\"eckige Klammer zu\"}},\"category\":\"Pe\"},{\"key\":\"007B\",\"mappings\":{\"default\":{\"default\":\"geschwungene Klammer auf\"}},\"category\":\"Ps\"},{\"key\":\"007D\",\"mappings\":{\"default\":{\"default\":\"geschwungene Klammer zu\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2045\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammer mit Stachel\"}}},{\"category\":\"Pe\",\"key\":\"2046\",\"mappings\":{\"default\":{\"default\":\"Rechte eckige Klammer mit Stachel\"}}},{\"category\":\"Sm\",\"key\":\"2308\",\"mappings\":{\"default\":{\"default\":\"linke Aufrundungsklammer\"}}},{\"category\":\"Sm\",\"key\":\"2309\",\"mappings\":{\"default\":{\"default\":\"rechte Aufrundungsklammer\"}}},{\"category\":\"Sm\",\"key\":\"230A\",\"mappings\":{\"default\":{\"default\":\"linke Abrundungsklammer\"}}},{\"category\":\"Sm\",\"key\":\"230B\",\"mappings\":{\"default\":{\"default\":\"rechter Abrundungsklammer\"}}},{\"category\":\"So\",\"key\":\"230C\",\"mappings\":{\"default\":{\"default\":\"unterer rechter Abschnitt\"}}},{\"category\":\"So\",\"key\":\"230D\",\"mappings\":{\"default\":{\"default\":\"Unterer linker Abschnitt\"}}},{\"category\":\"So\",\"key\":\"230E\",\"mappings\":{\"default\":{\"default\":\"Oberer rechter Abschnitt\"}}},{\"category\":\"So\",\"key\":\"230F\",\"mappings\":{\"default\":{\"default\":\"Oberer linker Abschnitt\"}}},{\"category\":\"So\",\"key\":\"231C\",\"mappings\":{\"default\":{\"default\":\"Obere linke Ecke\"}}},{\"category\":\"So\",\"key\":\"231D\",\"mappings\":{\"default\":{\"default\":\"Obere rechte Ecke\"}}},{\"category\":\"So\",\"key\":\"231E\",\"mappings\":{\"default\":{\"default\":\"Untere linke Ecke\"}}},{\"category\":\"So\",\"key\":\"231F\",\"mappings\":{\"default\":{\"default\":\"Rechte untere Ecke\"}}},{\"category\":\"Sm\",\"key\":\"2320\",\"mappings\":{\"default\":{\"default\":\"Obere Hälfte eines Integrals\"}}},{\"category\":\"Sm\",\"key\":\"2321\",\"mappings\":{\"default\":{\"default\":\"Untere Hälfte eines Integrals\"}}},{\"category\":\"Ps\",\"key\":\"2329\",\"mappings\":{\"default\":{\"default\":\"Linke spitze Klammer\"}}},{\"category\":\"Pe\",\"key\":\"232A\",\"mappings\":{\"default\":{\"default\":\"Rechte spitze Klammer\"}}},{\"category\":\"Sm\",\"key\":\"239B\",\"mappings\":{\"default\":{\"default\":\"Oberer Teil der linken Klammer\"}}},{\"category\":\"Sm\",\"key\":\"239C\",\"mappings\":{\"default\":{\"default\":\"Linke Klammerverlängerung\"}}},{\"category\":\"Sm\",\"key\":\"239D\",\"mappings\":{\"default\":{\"default\":\"Unterer Teil der linken Klammer\"}}},{\"category\":\"Sm\",\"key\":\"239E\",\"mappings\":{\"default\":{\"default\":\"Oberer Teil der rechten Klammer\"}}},{\"category\":\"Sm\",\"key\":\"239F\",\"mappings\":{\"default\":{\"default\":\"Rechte Klammerverlängerung\"}}},{\"category\":\"Sm\",\"key\":\"23A0\",\"mappings\":{\"default\":{\"default\":\"Unterer Teil der rechten Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A1\",\"mappings\":{\"default\":{\"default\":\"Oberer Teil der linken eckigen Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A2\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammerverlängerung\"}}},{\"category\":\"Sm\",\"key\":\"23A3\",\"mappings\":{\"default\":{\"default\":\"unterer Teil der linken eckigen Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A4\",\"mappings\":{\"default\":{\"default\":\"Oberer Teil der rechten eckigen Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A5\",\"mappings\":{\"default\":{\"default\":\"Rechte eckige Klammerverlängerung\"}}},{\"category\":\"Sm\",\"key\":\"23A6\",\"mappings\":{\"default\":{\"default\":\"unterer Teil der rechten eckigen Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A7\",\"mappings\":{\"default\":{\"default\":\"oberer Teil der linken geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A8\",\"mappings\":{\"default\":{\"default\":\"Mittelstück der linken geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A9\",\"mappings\":{\"default\":{\"default\":\"unterer Teil der linken geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23AA\",\"mappings\":{\"default\":{\"default\":\"Zwischenteil einer geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23AB\",\"mappings\":{\"default\":{\"default\":\"oberer Teil der rechten geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23AC\",\"mappings\":{\"default\":{\"default\":\"Mittelstück der rechten geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23AD\",\"mappings\":{\"default\":{\"default\":\"unterer Teil der rechten geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23AE\",\"mappings\":{\"default\":{\"default\":\"Mittelteil eines Integrals\"}}},{\"category\":\"Sm\",\"key\":\"23AF\",\"mappings\":{\"default\":{\"default\":\"Erweiterung einer Querlinie\"}}},{\"category\":\"Sm\",\"key\":\"23B0\",\"mappings\":{\"default\":{\"default\":\"Geschweiftes Klammerteil oben links oder rechts unten\"}}},{\"category\":\"Sm\",\"key\":\"23B1\",\"mappings\":{\"default\":{\"default\":\"Geschweiftes Klammerteil oben rechts oder unten links\"}}},{\"category\":\"Sm\",\"key\":\"23B2\",\"mappings\":{\"default\":{\"default\":\"Oberer Teil einer Summe\"}}},{\"category\":\"Sm\",\"key\":\"23B3\",\"mappings\":{\"default\":{\"default\":\"Unterer Teil einer Summe\"}}},{\"key\":\"23B4\",\"mappings\":{\"default\":{\"default\":\"Obere eckige Klammer\"}},\"category\":\"So\"},{\"key\":\"23B5\",\"mappings\":{\"default\":{\"default\":\"Untere eckige Klammer\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"23B6\",\"mappings\":{\"default\":{\"default\":\"Untere eckige Klammer auf oberer eckiger Klammer\"}}},{\"category\":\"So\",\"key\":\"23B7\",\"mappings\":{\"default\":{\"default\":\"Unterer Teil des Radikalsymbols\"}}},{\"category\":\"So\",\"key\":\"23B8\",\"mappings\":{\"default\":{\"default\":\"Linke vertikale Boxlinie\"}}},{\"category\":\"So\",\"key\":\"23B9\",\"mappings\":{\"default\":{\"default\":\"Rechte vertikale Boxlinie\"}}},{\"category\":\"Sm\",\"key\":\"23DC\",\"mappings\":{\"default\":{\"default\":\"Obere Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23DD\",\"mappings\":{\"default\":{\"default\":\"Untere Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23DE\",\"mappings\":{\"default\":{\"default\":\"Obere geschweifte Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23DF\",\"mappings\":{\"default\":{\"default\":\"Untere geschweifte Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23E0\",\"mappings\":{\"default\":{\"default\":\"Obere eckige Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23E1\",\"mappings\":{\"default\":{\"default\":\"Untere eckige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"2768\",\"mappings\":{\"default\":{\"default\":\"Mittlere linke Klammerverzierung\"}}},{\"category\":\"Pe\",\"key\":\"2769\",\"mappings\":{\"default\":{\"default\":\"Mittlere rechte Klammerverzierung\"}}},{\"category\":\"Ps\",\"key\":\"276A\",\"mappings\":{\"default\":{\"default\":\"Mittlere abgeflachte linke Klammerverzierung\"}}},{\"category\":\"Pe\",\"key\":\"276B\",\"mappings\":{\"default\":{\"default\":\"Mittlere abgeflachte rechte Klammerverzierung\"}}},{\"category\":\"Ps\",\"key\":\"276C\",\"mappings\":{\"default\":{\"default\":\"Mittlere nach links weisende Winkelhalterung\"}}},{\"category\":\"Pe\",\"key\":\"276D\",\"mappings\":{\"default\":{\"default\":\"Mittlere, rechtwinklige Winkelhalterung\"}}},{\"category\":\"Ps\",\"key\":\"276E\",\"mappings\":{\"default\":{\"default\":\"Schwere nach links weisende Anführungszeichen-Verzierung\"}}},{\"category\":\"Pe\",\"key\":\"276F\",\"mappings\":{\"default\":{\"default\":\"Schwere nach rechts zeigenden Winkel-Anführungszeichen-Verzierung\"}}},{\"category\":\"Ps\",\"key\":\"2770\",\"mappings\":{\"default\":{\"default\":\"Schwere nach links weisende Winkelhalterung\"}}},{\"category\":\"Pe\",\"key\":\"2771\",\"mappings\":{\"default\":{\"default\":\"Schwere, nach rechts weisende Winkelhalterung\"}}},{\"category\":\"Ps\",\"key\":\"2772\",\"mappings\":{\"default\":{\"default\":\"Leichte linke Schildpatt Bracket Ornament\"}}},{\"category\":\"Pe\",\"key\":\"2773\",\"mappings\":{\"default\":{\"default\":\"Leichte rechte Schildpatt-Klammerverzierung\"}}},{\"category\":\"Ps\",\"key\":\"2774\",\"mappings\":{\"default\":{\"default\":\"Mittlere linke geschweifte Klammerverzierung\"}}},{\"category\":\"Pe\",\"key\":\"2775\",\"mappings\":{\"default\":{\"default\":\"Mittlere rechte geschweifte Klammerverzierung\"}}},{\"category\":\"Ps\",\"key\":\"27C5\",\"mappings\":{\"default\":{\"default\":\"Linker S-förmiger Taschenbegrenzer\"}}},{\"category\":\"Pe\",\"key\":\"27C6\",\"mappings\":{\"default\":{\"default\":\"rechter S-förmiger Taschenbegrenzer\"}}},{\"category\":\"Ps\",\"key\":\"27E6\",\"mappings\":{\"default\":{\"default\":\"Mathematische linke weiße eckige Klammer\"}}},{\"category\":\"Pe\",\"key\":\"27E7\",\"mappings\":{\"default\":{\"default\":\"Mathematische rechte weiße eckige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"27E8\",\"mappings\":{\"default\":{\"default\":\"Mathematische linke Winkelklammer\"}}},{\"category\":\"Pe\",\"key\":\"27E9\",\"mappings\":{\"default\":{\"default\":\"Mathematische rechtwinklige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"27EA\",\"mappings\":{\"default\":{\"default\":\"Mathematische linke doppelte Winkelklammer\"}}},{\"category\":\"Pe\",\"key\":\"27EB\",\"mappings\":{\"default\":{\"default\":\"Mathematische rechtwinklige eckige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"27EC\",\"mappings\":{\"default\":{\"default\":\"Mathematische linke Schildkrötenpanzerhalterung\"}}},{\"category\":\"Pe\",\"key\":\"27ED\",\"mappings\":{\"default\":{\"default\":\"Mathematische rechte weiße Schildpatt-Klammer\"}}},{\"category\":\"Ps\",\"key\":\"27EE\",\"mappings\":{\"default\":{\"default\":\"Mathematische linke abgeflachte Klammer\"}}},{\"category\":\"Pe\",\"key\":\"27EF\",\"mappings\":{\"default\":{\"default\":\"Mathematische rechte abgeflachte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"2983\",\"mappings\":{\"default\":{\"default\":\"Linke weiße geschweifte Klammer\"}}},{\"category\":\"Pe\",\"key\":\"2984\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße geschweifte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"2985\",\"mappings\":{\"default\":{\"default\":\"Linke weiße Klammer\"}}},{\"category\":\"Pe\",\"key\":\"2986\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße Klammer\"}}},{\"category\":\"Ps\",\"key\":\"2987\",\"mappings\":{\"default\":{\"default\":\"Z-Notation Linke Bildklammer\"}}},{\"category\":\"Pe\",\"key\":\"2988\",\"mappings\":{\"default\":{\"default\":\"Z-Notation rechte Bildklammer\"}}},{\"category\":\"Ps\",\"key\":\"2989\",\"mappings\":{\"default\":{\"default\":\"Z-Notation Linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"298A\",\"mappings\":{\"default\":{\"default\":\"Z Notation Right Binding Bracket\"}}},{\"category\":\"Ps\",\"key\":\"298B\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammer mit Unterlenker\"}}},{\"category\":\"Pe\",\"key\":\"298C\",\"mappings\":{\"default\":{\"default\":\"Rechte eckige Klammer mit Unterlenker\"}}},{\"category\":\"Ps\",\"key\":\"298D\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammer mit Häkchen in der oberen Ecke\"}}},{\"category\":\"Pe\",\"key\":\"298E\",\"mappings\":{\"default\":{\"default\":\"Rechte eckige Klammer mit Tick in der unteren Ecke\"}}},{\"category\":\"Ps\",\"key\":\"298F\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammer mit Tick in der unteren Ecke\"}}},{\"category\":\"Pe\",\"key\":\"2990\",\"mappings\":{\"default\":{\"default\":\"Rechte eckige Klammer mit Tick in der oberen Ecke\"}}},{\"category\":\"Ps\",\"key\":\"2991\",\"mappings\":{\"default\":{\"default\":\"Linke Winkelklammer mit Punkt\"}}},{\"category\":\"Pe\",\"key\":\"2992\",\"mappings\":{\"default\":{\"default\":\"Rechtwinklige Klammer mit Punkt\"}}},{\"category\":\"Ps\",\"key\":\"2993\",\"mappings\":{\"default\":{\"default\":\"Linker Bogen weniger als Halterung\"}}},{\"category\":\"Pe\",\"key\":\"2994\",\"mappings\":{\"default\":{\"default\":\"rechter Bogen größer als Halterung\"}}},{\"category\":\"Ps\",\"key\":\"2995\",\"mappings\":{\"default\":{\"default\":\"Doppelter linker Bogen größer als Halterung\"}}},{\"category\":\"Pe\",\"key\":\"2996\",\"mappings\":{\"default\":{\"default\":\"Doppelter rechter Bogen weniger als Halterung\"}}},{\"category\":\"Ps\",\"key\":\"2997\",\"mappings\":{\"default\":{\"default\":\"Linke schwarze Schildkrötenhalterung\"}}},{\"category\":\"Pe\",\"key\":\"2998\",\"mappings\":{\"default\":{\"default\":\"Rechte schwarze Schildpatt-Klammer\"}}},{\"category\":\"Ps\",\"key\":\"29D8\",\"mappings\":{\"default\":{\"default\":\"Linker wackeliger Zaun\"}}},{\"category\":\"Pe\",\"key\":\"29D9\",\"mappings\":{\"default\":{\"default\":\"rechter wackeliger Zaun\"}}},{\"category\":\"Ps\",\"key\":\"29DA\",\"mappings\":{\"default\":{\"default\":\"Linker doppelter wackeliger Zaun\"}}},{\"category\":\"Pe\",\"key\":\"29DB\",\"mappings\":{\"default\":{\"default\":\"rechter doppelter wackeliger Zaun\"}}},{\"category\":\"Ps\",\"key\":\"29FC\",\"mappings\":{\"default\":{\"default\":\"Nach links zeigender gebogener Winkelhalter\"}}},{\"category\":\"Pe\",\"key\":\"29FD\",\"mappings\":{\"default\":{\"default\":\"Nach rechts zeigender gebogener Winkelhalter\"}}},{\"category\":\"Ps\",\"key\":\"2E22\",\"mappings\":{\"default\":{\"default\":\"Obere linke halbe Halterung\"}}},{\"category\":\"Pe\",\"key\":\"2E23\",\"mappings\":{\"default\":{\"default\":\"Obere rechte halbe Klammer\"}}},{\"category\":\"Ps\",\"key\":\"2E24\",\"mappings\":{\"default\":{\"default\":\"Linke halbe halterung unten\"}}},{\"category\":\"Pe\",\"key\":\"2E25\",\"mappings\":{\"default\":{\"default\":\"Untere rechte halbe Halterung\"}}},{\"category\":\"Ps\",\"key\":\"2E26\",\"mappings\":{\"default\":{\"default\":\"U-Halterung links seitlich\"}}},{\"category\":\"Pe\",\"key\":\"2E27\",\"mappings\":{\"default\":{\"default\":\"U-Halterung rechts seitlich\"}}},{\"category\":\"Ps\",\"key\":\"2E28\",\"mappings\":{\"default\":{\"default\":\"Linke doppelte Klammer\"}}},{\"category\":\"Pe\",\"key\":\"2E29\",\"mappings\":{\"default\":{\"default\":\"Rechte doppelte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"3008\",\"mappings\":{\"default\":{\"default\":\"Linke Winkelklammer\"}}},{\"category\":\"Pe\",\"key\":\"3009\",\"mappings\":{\"default\":{\"default\":\"Rechtwinklige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"300A\",\"mappings\":{\"default\":{\"default\":\"Linke Doppelwinkelhalterung\"}}},{\"category\":\"Pe\",\"key\":\"300B\",\"mappings\":{\"default\":{\"default\":\"Rechte Doppelwinkelhalterung\"}}},{\"category\":\"Ps\",\"key\":\"300C\",\"mappings\":{\"default\":{\"default\":\"Linke Eckklammer\"}}},{\"category\":\"Pe\",\"key\":\"300D\",\"mappings\":{\"default\":{\"default\":\"Rechte Eckhalterung\"}}},{\"category\":\"Ps\",\"key\":\"300E\",\"mappings\":{\"default\":{\"default\":\"Linke weiße Eckhalterung\"}}},{\"category\":\"Pe\",\"key\":\"300F\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße Eckhalterung\"}}},{\"category\":\"Ps\",\"key\":\"3010\",\"mappings\":{\"default\":{\"default\":\"Linke schwarze linsenförmige Halterung\"}}},{\"category\":\"Pe\",\"key\":\"3011\",\"mappings\":{\"default\":{\"default\":\"Rechte schwarze linsenförmige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"3014\",\"mappings\":{\"default\":{\"default\":\"Linke Schildpatt-Klammer\"}}},{\"category\":\"Pe\",\"key\":\"3015\",\"mappings\":{\"default\":{\"default\":\"Rechte Schildpattlasche\"}}},{\"category\":\"Ps\",\"key\":\"3016\",\"mappings\":{\"default\":{\"default\":\"Linke weiße linsenförmige Halterung\"}}},{\"category\":\"Pe\",\"key\":\"3017\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße linsenförmige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"3018\",\"mappings\":{\"default\":{\"default\":\"Linke weiße Schildpatt-Klammer\"}}},{\"category\":\"Pe\",\"key\":\"3019\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße Schildpatt-Klammer\"}}},{\"category\":\"Ps\",\"key\":\"301A\",\"mappings\":{\"default\":{\"default\":\"Linke weiße eckige Klammer\"}}},{\"category\":\"Pe\",\"key\":\"301B\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße eckige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"301D\",\"mappings\":{\"default\":{\"default\":\"Doppelte Anführungszeichen in umgekehrter Reihenfolge\"}}},{\"category\":\"Pe\",\"key\":\"301E\",\"mappings\":{\"default\":{\"default\":\"Doppelte Anführungszeichen\"}}},{\"category\":\"Pe\",\"key\":\"301F\",\"mappings\":{\"default\":{\"default\":\"Niedriges doppeltes Prime-Anführungszeichen\"}}},{\"category\":\"Ps\",\"key\":\"FD3E\",\"mappings\":{\"default\":{\"default\":\"Verzierte linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FD3F\",\"mappings\":{\"default\":{\"default\":\"Verzierte rechte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE17\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke weiße linsenförmige Halterung\"}}},{\"category\":\"Pe\",\"key\":\"FE18\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechtwinklige linsenförmige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"FE35\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE36\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE37\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke geschweifte Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE38\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale, recht geschweifte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE39\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke Schildpattklammer\"}}},{\"category\":\"Pe\",\"key\":\"FE3A\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechte Schildpatt-Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE3B\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke schwarze linsenförmige Halterung\"}}},{\"category\":\"Pe\",\"key\":\"FE3C\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechtwinklige schwarze linsenförmige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"FE3D\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke Doppelwinkelhalterung\"}}},{\"category\":\"Pe\",\"key\":\"FE3E\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechtwinklige, rechtwinklige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"FE3F\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke Winkelhalterung\"}}},{\"category\":\"Pe\",\"key\":\"FE40\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechtwinklige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"FE41\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke Eckhalterung\"}}},{\"category\":\"Pe\",\"key\":\"FE42\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechte Eckhalterung\"}}},{\"category\":\"Ps\",\"key\":\"FE43\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke weiße Eckhalterung\"}}},{\"category\":\"Pe\",\"key\":\"FE44\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechte weiße Eckhalterung\"}}},{\"category\":\"Ps\",\"key\":\"FE47\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke eckige Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE48\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale eckige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE59\",\"mappings\":{\"default\":{\"default\":\"Kleine linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE5A\",\"mappings\":{\"default\":{\"default\":\"Kleine rechte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE5B\",\"mappings\":{\"default\":{\"default\":\"Kleine linke geschweifte Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE5C\",\"mappings\":{\"default\":{\"default\":\"Kleine rechte geschweifte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE5D\",\"mappings\":{\"default\":{\"default\":\"Kleine linke Schildpatt-Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE5E\",\"mappings\":{\"default\":{\"default\":\"Kleine rechte Schildpatt-Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FF08\",\"mappings\":{\"default\":{\"default\":\"Linke Klammer in voller Breite\"}}},{\"category\":\"Pe\",\"key\":\"FF09\",\"mappings\":{\"default\":{\"default\":\"Rechte Klammer mit voller Breite\"}}},{\"category\":\"Ps\",\"key\":\"FF3B\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammer mit voller Breite\"}}},{\"category\":\"Pe\",\"key\":\"FF3D\",\"mappings\":{\"default\":{\"default\":\"Rechteckige Klammer mit voller Breite\"}}},{\"category\":\"Ps\",\"key\":\"FF5B\",\"mappings\":{\"default\":{\"default\":\"Linke geschweifte Klammer mit voller Breite\"}}},{\"category\":\"Pe\",\"key\":\"FF5D\",\"mappings\":{\"default\":{\"default\":\"Rechtwinklige Klammer mit voller Breite\"}}},{\"category\":\"Ps\",\"key\":\"FF5F\",\"mappings\":{\"default\":{\"default\":\"Linke weiße Klammer mit voller Breite\"}}},{\"category\":\"Pe\",\"key\":\"FF60\",\"mappings\":{\"default\":{\"default\":\"Rechte breite weiße Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FF62\",\"mappings\":{\"default\":{\"default\":\"Halbe breite linke eckklammer\"}}},{\"category\":\"Pe\",\"key\":\"FF63\",\"mappings\":{\"default\":{\"default\":\"Halbe breite rechte eckklammer\"}}}]\n,\n\"de/symbols/math_geometry.js\": \n[{\"locale\":\"de\"},{\"category\":\"So\",\"key\":\"2500\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Horizontal\"}}},{\"category\":\"So\",\"key\":\"2501\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Schwere Horizontale\"}}},{\"category\":\"So\",\"key\":\"2502\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Vertical\"}}},{\"category\":\"So\",\"key\":\"2503\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Schwere Vertikale\"}}},{\"category\":\"So\",\"key\":\"2504\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen Licht Triple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2505\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Triple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2506\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Triple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"2507\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Triple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"2508\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Quadruple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2509\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Quadruple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"250A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Quadruple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"250B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Quadruple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"250C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Down und Right\"}}},{\"category\":\"So\",\"key\":\"250D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Right Heavy\"}}},{\"category\":\"So\",\"key\":\"250E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Heavy und Right Light\"}}},{\"category\":\"So\",\"key\":\"250F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Down und Right\"}}},{\"category\":\"So\",\"key\":\"2510\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Down und Links\"}}},{\"category\":\"So\",\"key\":\"2511\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Left Heavy\"}}},{\"category\":\"So\",\"key\":\"2512\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Heavy und Left Light\"}}},{\"category\":\"So\",\"key\":\"2513\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Down und Left\"}}},{\"category\":\"So\",\"key\":\"2514\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen leuchten auf und richtig\"}}},{\"category\":\"So\",\"key\":\"2515\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Right Heavy\"}}},{\"category\":\"So\",\"key\":\"2516\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Heavy und Right Light\"}}},{\"category\":\"So\",\"key\":\"2517\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Up und Right\"}}},{\"category\":\"So\",\"key\":\"2518\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen leuchten und links\"}}},{\"category\":\"So\",\"key\":\"2519\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Left Heavy\"}}},{\"category\":\"So\",\"key\":\"251A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Heavy und Left Light\"}}},{\"category\":\"So\",\"key\":\"251B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Up und Links\"}}},{\"category\":\"So\",\"key\":\"251C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Vertical und Right\"}}},{\"category\":\"So\",\"key\":\"251D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Light und Right Heavy\"}}},{\"category\":\"So\",\"key\":\"251E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Heavy und Right Down Light\"}}},{\"category\":\"So\",\"key\":\"251F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Heavy und Right Up Light\"}}},{\"category\":\"So\",\"key\":\"2520\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Heavy und Right Light\"}}},{\"category\":\"So\",\"key\":\"2521\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Right Up Heavy\"}}},{\"category\":\"So\",\"key\":\"2522\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Right Down Heavy\"}}},{\"category\":\"So\",\"key\":\"2523\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Vertical und Right\"}}},{\"category\":\"So\",\"key\":\"2524\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Vertical und Left\"}}},{\"category\":\"So\",\"key\":\"2525\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Light und Left Heavy\"}}},{\"category\":\"So\",\"key\":\"2526\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Heavy und Left Down Light\"}}},{\"category\":\"So\",\"key\":\"2527\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Heavy und Left Up Light\"}}},{\"category\":\"So\",\"key\":\"2528\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Heavy und Left Light\"}}},{\"category\":\"So\",\"key\":\"2529\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Left Up Heavy\"}}},{\"category\":\"So\",\"key\":\"252A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Left Down Heavy\"}}},{\"category\":\"So\",\"key\":\"252B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Vertical und Left\"}}},{\"category\":\"So\",\"key\":\"252C\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen leicht und horizontal\"}}},{\"category\":\"So\",\"key\":\"252D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Heavy und Right Down Light\"}}},{\"category\":\"So\",\"key\":\"252E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Heavy und Left Down Light\"}}},{\"category\":\"So\",\"key\":\"252F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Horizontal Heavy\"}}},{\"category\":\"So\",\"key\":\"2530\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen für schweres und horizontales Licht\"}}},{\"category\":\"So\",\"key\":\"2531\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Light und Left Down Heavy\"}}},{\"category\":\"So\",\"key\":\"2532\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Light und Right Down Heavy\"}}},{\"category\":\"So\",\"key\":\"2533\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen nach unten und horizontal\"}}},{\"category\":\"So\",\"key\":\"2534\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen leuchten und horizontal\"}}},{\"category\":\"So\",\"key\":\"2535\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Heavy und Right Up Light\"}}},{\"category\":\"So\",\"key\":\"2536\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Heavy und Left Up Light\"}}},{\"category\":\"So\",\"key\":\"2537\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Horizontal Heavy\"}}},{\"category\":\"So\",\"key\":\"2538\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen für schweres und horizontales Licht\"}}},{\"category\":\"So\",\"key\":\"2539\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Light und Left Up Heavy\"}}},{\"category\":\"So\",\"key\":\"253A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Light und Right Up Heavy\"}}},{\"category\":\"So\",\"key\":\"253B\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen schwer und horizontal\"}}},{\"category\":\"So\",\"key\":\"253C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light vertikal und horizontal\"}}},{\"category\":\"So\",\"key\":\"253D\",\"mappings\":{\"default\":{\"default\":\"Kastenzeichnungen links schweres und rechtes vertikales Licht\"}}},{\"category\":\"So\",\"key\":\"253E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Heavy und Left Vertical Light\"}}},{\"category\":\"So\",\"key\":\"253F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Light und Horizontal Heavy\"}}},{\"category\":\"So\",\"key\":\"2540\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Heavy und Down Horizontal Light\"}}},{\"category\":\"So\",\"key\":\"2541\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Heavy und Up Horizontal Light\"}}},{\"category\":\"So\",\"key\":\"2542\",\"mappings\":{\"default\":{\"default\":\"Kastenzeichnungen Vertikales schweres und horizontales Licht\"}}},{\"category\":\"So\",\"key\":\"2543\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Up Heavy und Right Down Light\"}}},{\"category\":\"So\",\"key\":\"2544\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Up Heavy und Left Down Light\"}}},{\"category\":\"So\",\"key\":\"2545\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Down Heavy und Right Up Light\"}}},{\"category\":\"So\",\"key\":\"2546\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Down Heavy und Left Up Light\"}}},{\"category\":\"So\",\"key\":\"2547\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Up Horizontal Heavy\"}}},{\"category\":\"So\",\"key\":\"2548\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Down Horizontal Heavy\"}}},{\"category\":\"So\",\"key\":\"2549\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Light und Left Vertical Heavy\"}}},{\"category\":\"So\",\"key\":\"254A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Light und Right Vertical Heavy\"}}},{\"category\":\"So\",\"key\":\"254B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy vertikal und horizontal\"}}},{\"category\":\"So\",\"key\":\"254C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Double Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"254D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Double Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"254E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Double Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"254F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Double Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"2550\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen doppelt horizontal\"}}},{\"category\":\"So\",\"key\":\"2551\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Vertical\"}}},{\"category\":\"So\",\"key\":\"2552\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Single und Right Double\"}}},{\"category\":\"So\",\"key\":\"2553\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Double und Right Single\"}}},{\"category\":\"So\",\"key\":\"2554\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Down und Right\"}}},{\"category\":\"So\",\"key\":\"2555\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Single und Left Double\"}}},{\"category\":\"So\",\"key\":\"2556\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Double und Left Single\"}}},{\"category\":\"So\",\"key\":\"2557\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Down und Links\"}}},{\"category\":\"So\",\"key\":\"2558\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Single und Right Double\"}}},{\"category\":\"So\",\"key\":\"2559\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Double und Right Single\"}}},{\"category\":\"So\",\"key\":\"255A\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen verdoppeln und rechts\"}}},{\"category\":\"So\",\"key\":\"255B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Single und Left Double\"}}},{\"category\":\"So\",\"key\":\"255C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Double und Left Single\"}}},{\"category\":\"So\",\"key\":\"255D\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen verdoppeln und links\"}}},{\"category\":\"So\",\"key\":\"255E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Single und Right Double\"}}},{\"category\":\"So\",\"key\":\"255F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Double und Right Single\"}}},{\"category\":\"So\",\"key\":\"2560\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Vertical und Right\"}}},{\"category\":\"So\",\"key\":\"2561\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Single und Left Double\"}}},{\"category\":\"So\",\"key\":\"2562\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Double und Left Single\"}}},{\"category\":\"So\",\"key\":\"2563\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Vertical und Left\"}}},{\"category\":\"So\",\"key\":\"2564\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Single und Horizontal Double\"}}},{\"category\":\"So\",\"key\":\"2565\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Double und Horizontal Single\"}}},{\"category\":\"So\",\"key\":\"2566\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Down und Horizontal\"}}},{\"category\":\"So\",\"key\":\"2567\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Single und Horizontal Double\"}}},{\"category\":\"So\",\"key\":\"2568\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Double und Horizontal Single\"}}},{\"category\":\"So\",\"key\":\"2569\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen verdoppeln und horizontal\"}}},{\"category\":\"So\",\"key\":\"256A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Single und Horizontal Double\"}}},{\"category\":\"So\",\"key\":\"256B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Double und Horizontal Single\"}}},{\"category\":\"So\",\"key\":\"256C\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen doppelt vertikal und horizontal\"}}},{\"category\":\"So\",\"key\":\"256D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Arc Down und Right\"}}},{\"category\":\"So\",\"key\":\"256E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Arc Down und Links\"}}},{\"category\":\"So\",\"key\":\"256F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Arc Up und links\"}}},{\"category\":\"So\",\"key\":\"2570\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Arc Up und rechts\"}}},{\"category\":\"So\",\"key\":\"2571\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Diagonal Oben Rechts Nach Unten Links\"}}},{\"category\":\"So\",\"key\":\"2572\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Diagonal von oben links nach rechts unten\"}}},{\"category\":\"So\",\"key\":\"2573\",\"mappings\":{\"default\":{\"default\":\"Box Zeichnungen Light Diagonal Cross\"}}},{\"category\":\"So\",\"key\":\"2574\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen Light Left\"}}},{\"category\":\"So\",\"key\":\"2575\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen leuchten auf\"}}},{\"category\":\"So\",\"key\":\"2576\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen Light Right\"}}},{\"category\":\"So\",\"key\":\"2577\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Down\"}}},{\"category\":\"So\",\"key\":\"2578\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Left\"}}},{\"category\":\"So\",\"key\":\"2579\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Up\"}}},{\"category\":\"So\",\"key\":\"257A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Right\"}}},{\"category\":\"So\",\"key\":\"257B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Down\"}}},{\"category\":\"So\",\"key\":\"257C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Left und Heavy Right\"}}},{\"category\":\"So\",\"key\":\"257D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Up und Heavy Down\"}}},{\"category\":\"So\",\"key\":\"257E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Left und Light Right\"}}},{\"category\":\"So\",\"key\":\"257F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Up und Light Down\"}}},{\"category\":\"So\",\"key\":\"2580\",\"mappings\":{\"default\":{\"default\":\"Block der oberen Hälfte\"}}},{\"category\":\"So\",\"key\":\"2581\",\"mappings\":{\"default\":{\"default\":\"Unterer achter Block\"}}},{\"category\":\"So\",\"key\":\"2582\",\"mappings\":{\"default\":{\"default\":\"Unterer Viertelblock\"}}},{\"category\":\"So\",\"key\":\"2583\",\"mappings\":{\"default\":{\"default\":\"Drei Achtel-Block senken\"}}},{\"category\":\"So\",\"key\":\"2584\",\"mappings\":{\"default\":{\"default\":\"Block der unteren Hälfte\"}}},{\"category\":\"So\",\"key\":\"2585\",\"mappings\":{\"default\":{\"default\":\"Fünf Achtel Block\"}}},{\"category\":\"So\",\"key\":\"2586\",\"mappings\":{\"default\":{\"default\":\"Unterer Dreiviertelblock\"}}},{\"category\":\"So\",\"key\":\"2587\",\"mappings\":{\"default\":{\"default\":\"Unterer Sieben Achtel-Block\"}}},{\"category\":\"So\",\"key\":\"2588\",\"mappings\":{\"default\":{\"default\":\"Voller Block\"}}},{\"category\":\"So\",\"key\":\"2589\",\"mappings\":{\"default\":{\"default\":\"Linker Sieben Achtel Block\"}}},{\"category\":\"So\",\"key\":\"258A\",\"mappings\":{\"default\":{\"default\":\"Linker Dreiviertelblock\"}}},{\"category\":\"So\",\"key\":\"258B\",\"mappings\":{\"default\":{\"default\":\"Linker Block mit fünf Achteln\"}}},{\"category\":\"So\",\"key\":\"258C\",\"mappings\":{\"default\":{\"default\":\"Linke halbe Block\"}}},{\"category\":\"So\",\"key\":\"258D\",\"mappings\":{\"default\":{\"default\":\"Block drei Achtel\"}}},{\"category\":\"So\",\"key\":\"258E\",\"mappings\":{\"default\":{\"default\":\"Linke einen Viertelblock\"}}},{\"category\":\"So\",\"key\":\"258F\",\"mappings\":{\"default\":{\"default\":\"Linker achter Block\"}}},{\"category\":\"So\",\"key\":\"2590\",\"mappings\":{\"default\":{\"default\":\"Rechte halbe Block\"}}},{\"category\":\"So\",\"key\":\"2591\",\"mappings\":{\"default\":{\"default\":\"Lichtschatten\"}}},{\"category\":\"So\",\"key\":\"2592\",\"mappings\":{\"default\":{\"default\":\"Mittlere Schatten\"}}},{\"category\":\"So\",\"key\":\"2593\",\"mappings\":{\"default\":{\"default\":\"Dunkler Schatten\"}}},{\"category\":\"So\",\"key\":\"2594\",\"mappings\":{\"default\":{\"default\":\"Oberer achter Block\"}}},{\"category\":\"So\",\"key\":\"2595\",\"mappings\":{\"default\":{\"default\":\"rechter achter Block\"}}},{\"category\":\"So\",\"key\":\"2596\",\"mappings\":{\"default\":{\"default\":\"Quadrant unten links\"}}},{\"category\":\"So\",\"key\":\"2597\",\"mappings\":{\"default\":{\"default\":\"Quadrant rechts unten\"}}},{\"category\":\"So\",\"key\":\"2598\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben links\"}}},{\"category\":\"So\",\"key\":\"2599\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben links und unten links und rechts unten\"}}},{\"category\":\"So\",\"key\":\"259A\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben links und rechts unten\"}}},{\"category\":\"So\",\"key\":\"259B\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben links und oben rechts und unten links\"}}},{\"category\":\"So\",\"key\":\"259C\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben links und oben rechts und unten rechts\"}}},{\"category\":\"So\",\"key\":\"259D\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben rechts\"}}},{\"category\":\"So\",\"key\":\"259E\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben rechts und unten links\"}}},{\"category\":\"So\",\"key\":\"259F\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben rechts und unten links und unten rechts\"}}},{\"category\":\"So\",\"key\":\"25A0\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Quadrat\"}}},{\"category\":\"So\",\"key\":\"25A1\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat\"}}},{\"category\":\"So\",\"key\":\"25A2\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit abgerundeten Ecken\"}}},{\"category\":\"So\",\"key\":\"25A3\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat, das schwarzes kleines Quadrat enthält\"}}},{\"category\":\"So\",\"key\":\"25A4\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit horizontaler Füllung\"}}},{\"category\":\"So\",\"key\":\"25A5\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit vertikaler Füllung\"}}},{\"category\":\"So\",\"key\":\"25A6\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit orthogonaler Schraffurfüllung\"}}},{\"category\":\"So\",\"key\":\"25A7\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit Oben links nach rechts unten füllen\"}}},{\"category\":\"So\",\"key\":\"25A8\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit oberer rechter bis unterer linker Füllung\"}}},{\"category\":\"So\",\"key\":\"25A9\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit diagonaler Schraffurfüllung\"}}},{\"category\":\"So\",\"key\":\"25AA\",\"mappings\":{\"default\":{\"default\":\"Schwarzes kleines Quadrat\"}}},{\"category\":\"So\",\"key\":\"25AB\",\"mappings\":{\"default\":{\"default\":\"Weißes kleines Quadrat\"}}},{\"category\":\"So\",\"key\":\"25AC\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Rechteck\"}}},{\"category\":\"So\",\"key\":\"25AD\",\"mappings\":{\"default\":{\"default\":\"Weißes Rechteck\"}}},{\"category\":\"So\",\"key\":\"25AE\",\"mappings\":{\"default\":{\"default\":\"Schwarzes vertikales Rechteck\"}}},{\"category\":\"So\",\"key\":\"25AF\",\"mappings\":{\"default\":{\"default\":\"Weißes vertikales Rechteck\"}}},{\"category\":\"So\",\"key\":\"25B0\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Parallelogramm\"}}},{\"category\":\"So\",\"key\":\"25B1\",\"mappings\":{\"default\":{\"default\":\"Weißes Parallelogramm\"}}},{\"category\":\"So\",\"key\":\"25B2\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach oben zeigendes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B3\",\"mappings\":{\"default\":{\"default\":\"Weißes nach oben zeigendes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B4\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach oben zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B5\",\"mappings\":{\"default\":{\"default\":\"Weißes nach oben zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B6\",\"mappings\":{\"default\":{\"default\":\"Schwarzes rechtwinkliges Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"25B7\",\"mappings\":{\"default\":{\"default\":\"Weißes rechtwinkliges Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B8\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach rechts zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B9\",\"mappings\":{\"default\":{\"default\":\"Weißes nach rechts zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25BA\",\"mappings\":{\"default\":{\"default\":\"Schwarzer nach rechts zeigender Zeiger\"}}},{\"category\":\"So\",\"key\":\"25BB\",\"mappings\":{\"default\":{\"default\":\"Weißer nach rechts zeigender Zeiger\"}}},{\"category\":\"So\",\"key\":\"25BC\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Abwärtsdreieck\"}}},{\"category\":\"So\",\"key\":\"25BD\",\"mappings\":{\"default\":{\"default\":\"Weißes nach unten zeigendes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25BE\",\"mappings\":{\"default\":{\"default\":\"Schwarzes, nach unten zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25BF\",\"mappings\":{\"default\":{\"default\":\"Weißes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25C0\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach links zeigendes Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"25C1\",\"mappings\":{\"default\":{\"default\":\"Weißes nach links zeigendes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25C2\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach links zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25C3\",\"mappings\":{\"default\":{\"default\":\"Weißes nach links zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25C4\",\"mappings\":{\"default\":{\"default\":\"Schwarzer nach links zeigender Zeiger\"}}},{\"category\":\"So\",\"key\":\"25C5\",\"mappings\":{\"default\":{\"default\":\"Weißer nach links zeigender Zeiger\"}}},{\"category\":\"So\",\"key\":\"25C6\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Diamant\"}}},{\"category\":\"So\",\"key\":\"25C7\",\"mappings\":{\"default\":{\"default\":\"Weißer Diamant\"}}},{\"category\":\"So\",\"key\":\"25C8\",\"mappings\":{\"default\":{\"default\":\"Weißer Diamant mit schwarzem kleinem Diamant\"}}},{\"category\":\"So\",\"key\":\"25C9\",\"mappings\":{\"default\":{\"default\":\"Fischauge\"}}},{\"category\":\"So\",\"key\":\"25CA\",\"mappings\":{\"default\":{\"default\":\"Raute\"}}},{\"category\":\"So\",\"key\":\"25CB\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis\"}}},{\"category\":\"So\",\"key\":\"25CC\",\"mappings\":{\"default\":{\"default\":\"Gepunkteter Kreis\"}}},{\"category\":\"So\",\"key\":\"25CD\",\"mappings\":{\"default\":{\"default\":\"Kreis mit vertikaler Füllung\"}}},{\"category\":\"So\",\"key\":\"25CE\",\"mappings\":{\"default\":{\"default\":\"Bullseye\"}}},{\"category\":\"So\",\"key\":\"25CF\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Kreis\"}}},{\"category\":\"So\",\"key\":\"25D0\",\"mappings\":{\"default\":{\"default\":\"Kreis mit linker Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25D1\",\"mappings\":{\"default\":{\"default\":\"Kreis mit rechter Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25D2\",\"mappings\":{\"default\":{\"default\":\"Kreis mit unterer Hälfte Schwarz\"}}},{\"category\":\"So\",\"key\":\"25D3\",\"mappings\":{\"default\":{\"default\":\"Kreis mit oberer Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25D4\",\"mappings\":{\"default\":{\"default\":\"Kreis mit oberem rechten Quadranten schwarz\"}}},{\"category\":\"So\",\"key\":\"25D5\",\"mappings\":{\"default\":{\"default\":\"Kreis mit ganzem oberen linken Quadranten schwarz\"}}},{\"category\":\"So\",\"key\":\"25D6\",\"mappings\":{\"default\":{\"default\":\"Linker halber schwarzer Kreis\"}}},{\"category\":\"So\",\"key\":\"25D7\",\"mappings\":{\"default\":{\"default\":\"rechter halber schwarzer Kreis\"}}},{\"category\":\"So\",\"key\":\"25D8\",\"mappings\":{\"default\":{\"default\":\"Inverse Kugel\"}}},{\"category\":\"So\",\"key\":\"25D9\",\"mappings\":{\"default\":{\"default\":\"Inverse weißer Kreis\"}}},{\"category\":\"So\",\"key\":\"25DA\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter weißer Kreis der oberen Hälfte\"}}},{\"category\":\"So\",\"key\":\"25DB\",\"mappings\":{\"default\":{\"default\":\"Inverser weißer Kreis der unteren Hälfte\"}}},{\"category\":\"So\",\"key\":\"25DC\",\"mappings\":{\"default\":{\"default\":\"Kreisbogen des oberen linken Quadranten\"}}},{\"category\":\"So\",\"key\":\"25DD\",\"mappings\":{\"default\":{\"default\":\"Kreisbogen im oberen rechten Quadranten\"}}},{\"category\":\"So\",\"key\":\"25DE\",\"mappings\":{\"default\":{\"default\":\"Kreisbogen des rechten unteren Quadranten\"}}},{\"category\":\"So\",\"key\":\"25DF\",\"mappings\":{\"default\":{\"default\":\"Kreisbogen des unteren linken Quadranten\"}}},{\"category\":\"So\",\"key\":\"25E0\",\"mappings\":{\"default\":{\"default\":\"Oberer Halbkreis\"}}},{\"category\":\"So\",\"key\":\"25E1\",\"mappings\":{\"default\":{\"default\":\"Unterer Halbkreis\"}}},{\"category\":\"So\",\"key\":\"25E2\",\"mappings\":{\"default\":{\"default\":\"Schwarzes rechtes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25E3\",\"mappings\":{\"default\":{\"default\":\"Schwarzes unteres linkes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25E4\",\"mappings\":{\"default\":{\"default\":\"Schwarzes oberes linkes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25E5\",\"mappings\":{\"default\":{\"default\":\"Schwarzes rechtes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25E6\",\"mappings\":{\"default\":{\"default\":\"Weiße Kugel\"}}},{\"category\":\"So\",\"key\":\"25E7\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit linker Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25E8\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit rechter Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25E9\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit der oberen linken Diagonalenhälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25EA\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit unterer rechter diagonaler Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25EB\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit senkrechter Linie\"}}},{\"category\":\"So\",\"key\":\"25EC\",\"mappings\":{\"default\":{\"default\":\"Weißes nach oben zeigendes Dreieck mit Punkt\"}}},{\"category\":\"So\",\"key\":\"25ED\",\"mappings\":{\"default\":{\"default\":\"Aufwärtszeigendes Dreieck mit linker Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25EE\",\"mappings\":{\"default\":{\"default\":\"Aufwärtszeigendes Dreieck mit rechter Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25EF\",\"mappings\":{\"default\":{\"default\":\"Großer Kreis\"}}},{\"category\":\"So\",\"key\":\"25F0\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit oberem linken Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F1\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit unterem linken Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F2\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit unterem rechten Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F3\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit rechtem oberen Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F4\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit oberem linkem Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F5\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit unterem linken Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F6\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit unterem rechten Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F7\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit rechtem oberen Quadranten\"}}},{\"category\":\"Sm\",\"key\":\"25F8\",\"mappings\":{\"default\":{\"default\":\"Oberes linkes Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"25F9\",\"mappings\":{\"default\":{\"default\":\"Oberes rechtes Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"25FA\",\"mappings\":{\"default\":{\"default\":\"Unteres linkes Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"25FB\",\"mappings\":{\"default\":{\"default\":\"Weißes mittleres Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"25FC\",\"mappings\":{\"default\":{\"default\":\"Schwarzes mittleres Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"25FD\",\"mappings\":{\"default\":{\"default\":\"Weißes mittleres kleines Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"25FE\",\"mappings\":{\"default\":{\"default\":\"Schwarzes mittleres kleines Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"25FF\",\"mappings\":{\"default\":{\"default\":\"Unteres rechtes Dreieck\"}}},{\"category\":\"So\",\"key\":\"2B12\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit oberer Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B13\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit unterer Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B14\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit oberer rechter diagonaler Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B15\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit unterer linker diagonaler Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B16\",\"mappings\":{\"default\":{\"default\":\"Diamant mit linker Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B17\",\"mappings\":{\"default\":{\"default\":\"Diamant mit rechter Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B18\",\"mappings\":{\"default\":{\"default\":\"Diamant mit oberer Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B19\",\"mappings\":{\"default\":{\"default\":\"Diamant mit unterer Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B1A\",\"mappings\":{\"default\":{\"default\":\"Gepunktetes Quadrat\"}}},{\"category\":\"So\",\"key\":\"2B1B\",\"mappings\":{\"default\":{\"default\":\"Schwarzes großes Quadrat\"}}},{\"category\":\"So\",\"key\":\"2B1C\",\"mappings\":{\"default\":{\"default\":\"Weißes großes Quadrat\"}}},{\"category\":\"So\",\"key\":\"2B1D\",\"mappings\":{\"default\":{\"default\":\"Schwarzes sehr kleines Quadrat\"}}},{\"category\":\"So\",\"key\":\"2B1E\",\"mappings\":{\"default\":{\"default\":\"Weißes sehr kleines Quadrat\"}}},{\"category\":\"So\",\"key\":\"2B1F\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Pentagon\"}}},{\"category\":\"So\",\"key\":\"2B20\",\"mappings\":{\"default\":{\"default\":\"Weißes Pentagon\"}}},{\"category\":\"So\",\"key\":\"2B21\",\"mappings\":{\"default\":{\"default\":\"Weißes Sechseck\"}}},{\"category\":\"So\",\"key\":\"2B22\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Sechseck\"}}},{\"category\":\"So\",\"key\":\"2B23\",\"mappings\":{\"default\":{\"default\":\"Horizontales schwarzes Sechseck\"}}},{\"category\":\"So\",\"key\":\"2B24\",\"mappings\":{\"default\":{\"default\":\"Schwarzer großer Kreis\"}}},{\"category\":\"So\",\"key\":\"2B25\",\"mappings\":{\"default\":{\"default\":\"Schwarzer mittlerer Diamant\"}}},{\"category\":\"So\",\"key\":\"2B26\",\"mappings\":{\"default\":{\"default\":\"Weißer mittlerer Diamant\"}}},{\"category\":\"So\",\"key\":\"2B27\",\"mappings\":{\"default\":{\"default\":\"Schwarze mittlere Raute\"}}},{\"category\":\"So\",\"key\":\"2B28\",\"mappings\":{\"default\":{\"default\":\"Weiße mittlere Raute\"}}},{\"category\":\"So\",\"key\":\"2B29\",\"mappings\":{\"default\":{\"default\":\"Schwarzer kleiner Diamant\"}}},{\"category\":\"So\",\"key\":\"2B2A\",\"mappings\":{\"default\":{\"default\":\"Schwarze kleine Raute\"}}},{\"category\":\"So\",\"key\":\"2B2B\",\"mappings\":{\"default\":{\"default\":\"Weiße kleine Raute\"}}},{\"category\":\"So\",\"key\":\"2B2C\",\"mappings\":{\"default\":{\"default\":\"Schwarze horizontale Ellipse\"}}},{\"category\":\"So\",\"key\":\"2B2D\",\"mappings\":{\"default\":{\"default\":\"Weiße horizontale Ellipse\"}}},{\"category\":\"So\",\"key\":\"2B2E\",\"mappings\":{\"default\":{\"default\":\"Schwarze vertikale Ellipse\"}}},{\"category\":\"So\",\"key\":\"2B2F\",\"mappings\":{\"default\":{\"default\":\"Weiße vertikale Ellipse\"}}},{\"category\":\"So\",\"key\":\"2B50\",\"mappings\":{\"default\":{\"default\":\"Weißer mittlerer Stern\"}}},{\"category\":\"So\",\"key\":\"2B51\",\"mappings\":{\"default\":{\"default\":\"Schwarzer kleiner Stern\"}}},{\"category\":\"So\",\"key\":\"2B52\",\"mappings\":{\"default\":{\"default\":\"Weißer kleiner Stern\"}}},{\"category\":\"So\",\"key\":\"2B53\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach rechts zeigendes Pentagon\"}}},{\"category\":\"So\",\"key\":\"2B54\",\"mappings\":{\"default\":{\"default\":\"Weißes nach rechts zeigendes Pentagon\"}}},{\"category\":\"So\",\"key\":\"2B55\",\"mappings\":{\"default\":{\"default\":\"Schwerer großer Kreis\"}}},{\"category\":\"So\",\"key\":\"2B56\",\"mappings\":{\"default\":{\"default\":\"Schweres Oval mit innenliegendem Oval\"}}},{\"category\":\"So\",\"key\":\"2B57\",\"mappings\":{\"default\":{\"default\":\"Schwerer Kreis mit Kreis nach innen\"}}},{\"category\":\"So\",\"key\":\"2B58\",\"mappings\":{\"default\":{\"default\":\"Schwerer Kreis\"}}},{\"category\":\"So\",\"key\":\"2B59\",\"mappings\":{\"default\":{\"default\":\"Schwerer eingekreister Saltire\"}}}]\n,\n\"de/symbols/math_harpoons.js\": \n[{\"locale\":\"de\"},{\"category\":\"So\",\"key\":\"21BC\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb nach oben\"}}},{\"category\":\"So\",\"key\":\"21BD\",\"mappings\":{\"default\":{\"default\":\"Harpune nach links mit Barb nach unten\"}}},{\"category\":\"So\",\"key\":\"21BE\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb nach rechts\"}}},{\"category\":\"So\",\"key\":\"21BF\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb nach links\"}}},{\"category\":\"So\",\"key\":\"21C0\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb nach oben\"}}},{\"category\":\"So\",\"key\":\"21C1\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb nach unten\"}}},{\"category\":\"So\",\"key\":\"21C2\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb nach rechts\"}}},{\"category\":\"So\",\"key\":\"21C3\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb nach links\"}}},{\"category\":\"So\",\"key\":\"21CB\",\"mappings\":{\"default\":{\"default\":\"Harpune nach links über Harpune nach rechts\"}}},{\"category\":\"So\",\"key\":\"21CC\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts über Harpune nach links\"}}},{\"category\":\"Sm\",\"key\":\"294A\",\"mappings\":{\"default\":{\"default\":\"Linke Barb Up Rechte Barb Down Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294B\",\"mappings\":{\"default\":{\"default\":\"Linke Barb Down Rechte Barb Up Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294C\",\"mappings\":{\"default\":{\"default\":\"Nach oben Barb Rechts Nach links Barb Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294D\",\"mappings\":{\"default\":{\"default\":\"Up Barb Left Abwärts Barb Right Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294E\",\"mappings\":{\"default\":{\"default\":\"Linke Barb Up Rechte Barb Up Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294F\",\"mappings\":{\"default\":{\"default\":\"Barb nach rechts Barb nach rechts Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"2950\",\"mappings\":{\"default\":{\"default\":\"Linke Barb Down Rechte Barb Down Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"2951\",\"mappings\":{\"default\":{\"default\":\"Up Barb Left Abwärts Barb Left Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"2952\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Up To Bar\"}}},{\"category\":\"Sm\",\"key\":\"2953\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb bis zur Bar\"}}},{\"category\":\"Sm\",\"key\":\"2954\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Widerhaken rechts\"}}},{\"category\":\"Sm\",\"key\":\"2955\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb Right to Bar\"}}},{\"category\":\"Sm\",\"key\":\"2956\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Widerhaken nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2957\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Widerhaken nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2958\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb nach links\"}}},{\"category\":\"Sm\",\"key\":\"2959\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb nach links\"}}},{\"category\":\"Sm\",\"key\":\"295A\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Up von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"295B\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb Up von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"295C\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb rechts von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"295D\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb rechts von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"295E\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Down von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"295F\",\"mappings\":{\"default\":{\"default\":\"Rechts Harpoon mit Barb Down von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2960\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2961\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2962\",\"mappings\":{\"default\":{\"default\":\"Harpune nach links mit Barb nach oben Harpune nach links mit Barb nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2963\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb links neben Harpune nach oben mit Barb rechts\"}}},{\"category\":\"Sm\",\"key\":\"2964\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb nach oben Harpoon nach rechts mit Barb nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2965\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb nach unten Harpune nach unten mit Barb nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2966\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Up Oben Rechts Harpoon mit Barb Up\"}}},{\"category\":\"Sm\",\"key\":\"2967\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Widerhaken nach unten Rechts Harpune mit Widerhaken nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2968\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb nach oben Harpune nach links mit Barb nach oben\"}}},{\"category\":\"Sm\",\"key\":\"2969\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb nach unten Harpune nach links mit Barb nach unten\"}}},{\"category\":\"Sm\",\"key\":\"296A\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Up Above Long Dash\"}}},{\"category\":\"Sm\",\"key\":\"296B\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Down Under Long Dash\"}}},{\"category\":\"Sm\",\"key\":\"296C\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb Up Long Long Dash\"}}},{\"category\":\"Sm\",\"key\":\"296D\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Widerhaken nach unten\"}}},{\"category\":\"Sm\",\"key\":\"296E\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb links neben Harpune nach unten mit Barb rechts\"}}},{\"category\":\"Sm\",\"key\":\"296F\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb links neben Harpune nach oben mit Barb rechts\"}}},{\"category\":\"Sm\",\"key\":\"297C\",\"mappings\":{\"default\":{\"default\":\"linker Fischschwanz\"}}},{\"category\":\"Sm\",\"key\":\"297D\",\"mappings\":{\"default\":{\"default\":\"rechter Fischschwanz\"}}},{\"category\":\"Sm\",\"key\":\"297E\",\"mappings\":{\"default\":{\"default\":\"Fischschwanz\"}}},{\"category\":\"Sm\",\"key\":\"297F\",\"mappings\":{\"default\":{\"default\":\"Fischschwanz\"}}}]\n,\n\"de/symbols/math_non_characters.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"210F\",\"mappings\":{\"default\":{\"default\":\"Planck-Konstante über zwei Pi\"}}},{\"category\":\"So\",\"key\":\"2114\",\"mappings\":{\"default\":{\"default\":\"L B Balkensymbol\"}}},{\"category\":\"So\",\"key\":\"2116\",\"mappings\":{\"default\":{\"default\":\"Numero-Zeichen\"}}},{\"category\":\"So\",\"key\":\"2117\",\"mappings\":{\"default\":{\"default\":\"Tonaufnahme Copyright\"}}},{\"category\":\"So\",\"key\":\"211E\",\"mappings\":{\"default\":{\"default\":\"Rezept nehmen\"}}},{\"category\":\"So\",\"key\":\"211F\",\"mappings\":{\"default\":{\"default\":\"Antwort\"}}},{\"category\":\"So\",\"key\":\"2120\",\"mappings\":{\"default\":{\"default\":\"Dienstleistungsmarke\"}}},{\"category\":\"So\",\"key\":\"2121\",\"mappings\":{\"default\":{\"default\":\"Telefon Zeichen\"}}},{\"category\":\"So\",\"key\":\"2122\",\"mappings\":{\"default\":{\"default\":\"Markenzeichen\"}}},{\"category\":\"So\",\"key\":\"2123\",\"mappings\":{\"default\":{\"default\":\"Versicle\"}}},{\"category\":\"So\",\"key\":\"2125\",\"mappings\":{\"default\":{\"default\":\"Unze-Zeichen\"}}},{\"category\":\"Lu\",\"key\":\"2126\",\"mappings\":{\"default\":{\"default\":\"Ohm-Zeichen\"}}},{\"category\":\"So\",\"key\":\"2127\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes Ohm-Zeichen\"}}},{\"category\":\"Lu\",\"key\":\"212A\",\"mappings\":{\"default\":{\"default\":\"Kelvin-Zeichen\"}}},{\"category\":\"Lu\",\"key\":\"212B\",\"mappings\":{\"default\":{\"default\":\"Angstrom-Zeichen\"}}},{\"category\":\"So\",\"key\":\"212E\",\"mappings\":{\"default\":{\"default\":\"Geschätztes Symbol\"}}},{\"category\":\"Lu\",\"key\":\"2132\",\"mappings\":{\"default\":{\"default\":\"Umgeschlagenes Kapital F\"}}},{\"category\":\"Ll\",\"key\":\"2139\",\"mappings\":{\"default\":{\"default\":\"Informationsquelle\"}}},{\"category\":\"So\",\"key\":\"213A\",\"mappings\":{\"default\":{\"default\":\"Gedrehtes Kapital Q\"}}},{\"category\":\"So\",\"key\":\"213B\",\"mappings\":{\"default\":{\"default\":\"Faksimile-Zeichen\"}}},{\"category\":\"Sm\",\"key\":\"2141\",\"mappings\":{\"default\":{\"default\":\"Sans-Serif Capital G\"}}},{\"category\":\"Sm\",\"key\":\"2142\",\"mappings\":{\"default\":{\"default\":\"Sans-Serif Capital L\"}}},{\"category\":\"Sm\",\"key\":\"2143\",\"mappings\":{\"default\":{\"default\":\"Aufgehobenes Sans-Serif-Kapital L\"}}},{\"category\":\"Sm\",\"key\":\"2144\",\"mappings\":{\"default\":{\"default\":\"Sans-Serif Capital Y\"}}}]\n,\n\"de/symbols/math_symbols.js\": \n[{\"locale\":\"de\"},{\"key\":\"0021\",\"mappings\":{\"default\":{\"default\":\"Fakultät\"}},\"category\":\"Po\"},{\"key\":\"0022\",\"mappings\":{\"default\":{\"default\":\"Anführungszeichen\"}},\"category\":\"Po\"},{\"key\":\"0023\",\"mappings\":{\"default\":{\"default\":\"Nummernzeichen\"}},\"category\":\"Po\"},{\"key\":\"0024\",\"mappings\":{\"default\":{\"default\":\"Dollar\"}},\"category\":\"Sc\"},{\"key\":\"0025\",\"mappings\":{\"default\":{\"default\":\"Prozent\"}},\"category\":\"Po\"},{\"key\":\"0026\",\"mappings\":{\"default\":{\"default\":\"und\"}},\"category\":\"Po\"},{\"key\":\"0027\",\"mappings\":{\"default\":{\"default\":\"Hochkomma\"}},\"category\":\"Po\"},{\"key\":\"002A\",\"mappings\":{\"default\":{\"default\":\"times\"}},\"category\":\"Po\"},{\"key\":\"002B\",\"mappings\":{\"default\":{\"default\":\"plus\"}},\"category\":\"Sm\"},{\"key\":\"002C\",\"mappings\":{\"default\":{\"default\":\"Komma\"}},\"category\":\"Po\"},{\"key\":\"002D\",\"mappings\":{\"default\":{\"default\":\"minus\"}},\"category\":\"Pd\"},{\"category\":\"Po\",\"key\":\"002E\",\"mappings\":{\"default\":{\"default\":\"Punkt\"}}},{\"key\":\"002F\",\"mappings\":{\"default\":{\"default\":\"Schrägstrich\"}},\"category\":\"Po\"},{\"key\":\"003A\",\"mappings\":{\"default\":{\"default\":\"Doppelpunkt\"}},\"category\":\"Po\"},{\"key\":\"003B\",\"mappings\":{\"default\":{\"default\":\"Strichpunkt\"}},\"category\":\"Po\"},{\"key\":\"003C\",\"mappings\":{\"default\":{\"default\":\"kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"003D\",\"mappings\":{\"default\":{\"default\":\"ist gleich\"}},\"category\":\"Sm\"},{\"key\":\"003E\",\"mappings\":{\"default\":{\"default\":\"größer als\"}},\"category\":\"Sm\"},{\"key\":\"003F\",\"mappings\":{\"default\":{\"default\":\"Fragezeichen\"}},\"category\":\"Po\"},{\"key\":\"0040\",\"mappings\":{\"default\":{\"default\":\"Klammeraffe\"}},\"category\":\"Po\"},{\"key\":\"005C\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Schrägstrich\"}},\"category\":\"Po\"},{\"key\":\"005E\",\"mappings\":{\"default\":{\"default\":\"circumflex\"}},\"category\":\"Sk\"},{\"key\":\"005F\",\"mappings\":{\"default\":{\"default\":\"Unterstrich\"}},\"category\":\"Pc\"},{\"key\":\"0060\",\"mappings\":{\"default\":{\"default\":\"Gravis Akzent\"}},\"category\":\"Sk\"},{\"key\":\"007C\",\"mappings\":{\"default\":{\"default\":\"senkrechter Strich\"}},\"category\":\"Sm\"},{\"key\":\"007E\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sm\"},{\"key\":\"00A1\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes Ausrufezeichen\"}},\"category\":\"Po\"},{\"key\":\"00A2\",\"mappings\":{\"default\":{\"default\":\"Cent\"}},\"category\":\"Sc\"},{\"key\":\"00A3\",\"mappings\":{\"default\":{\"default\":\"Pfund\"}},\"category\":\"Sc\"},{\"key\":\"00A4\",\"mappings\":{\"default\":{\"default\":\"währungszeichen\"}},\"category\":\"Sc\"},{\"key\":\"00A5\",\"mappings\":{\"default\":{\"default\":\"yen\"}},\"category\":\"Sc\"},{\"key\":\"00A6\",\"mappings\":{\"default\":{\"default\":\"gebrochene Linie\"}},\"category\":\"So\"},{\"key\":\"00A7\",\"mappings\":{\"default\":{\"default\":\"Abschnitt\"}},\"category\":\"Po\"},{\"key\":\"00A8\",\"mappings\":{\"default\":{\"default\":\"diaeresis\"}},\"category\":\"Sk\"},{\"key\":\"00A9\",\"mappings\":{\"default\":{\"default\":\"Copyright\"}},\"category\":\"So\"},{\"key\":\"00AA\",\"mappings\":{\"default\":{\"default\":\"weibliches Ordnungszeichen\"}},\"category\":\"Lo\"},{\"category\":\"Pi\",\"key\":\"00AB\",\"mappings\":{\"default\":{\"default\":\"Nach links zeigendes doppeltes spitzes Anführungszeichen\"}}},{\"key\":\"00AC\",\"mappings\":{\"default\":{\"default\":\"nicht\"}},\"category\":\"Sm\"},{\"key\":\"00AE\",\"mappings\":{\"default\":{\"default\":\"registered sign\"}},\"category\":\"So\"},{\"key\":\"00AF\",\"mappings\":{\"default\":{\"default\":\"Überstrich\",\"alternative\":\"Makron\"}},\"category\":\"Sk\"},{\"key\":\"00B0\",\"mappings\":{\"default\":{\"default\":\"Grad\"}},\"category\":\"So\"},{\"key\":\"00B1\",\"mappings\":{\"default\":{\"default\":\"plus minus\"}},\"category\":\"Sm\"},{\"key\":\"00B4\",\"mappings\":{\"default\":{\"default\":\"acute accent\"}},\"category\":\"Sk\"},{\"key\":\"00B5\",\"mappings\":{\"default\":{\"default\":\"micro sign\"}},\"category\":\"Ll\"},{\"key\":\"00B6\",\"mappings\":{\"default\":{\"default\":\"Paragraf\"}},\"category\":\"Po\"},{\"key\":\"00B7\",\"mappings\":{\"default\":{\"default\":\"mal\",\"alternative\":\"Punkt mittig\"}},\"category\":\"Po\"},{\"key\":\"00B8\",\"mappings\":{\"default\":{\"default\":\"Cedille\"}},\"category\":\"Sk\"},{\"key\":\"00BA\",\"mappings\":{\"default\":{\"default\":\"Männliches Ordnungszeichen\"}},\"category\":\"Lo\"},{\"category\":\"Pf\",\"key\":\"00BB\",\"mappings\":{\"default\":{\"default\":\"Nach rechts zeigendes doppeltes spitzes Anführungszeichen\"}}},{\"key\":\"00BF\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes Fragezeichen\"}},\"category\":\"Po\"},{\"category\":\"Sm\",\"key\":\"00D7\",\"mappings\":{\"default\":{\"default\":\"mal\"}}},{\"category\":\"Sm\",\"key\":\"00F7\",\"mappings\":{\"default\":{\"default\":\"geteilt durch\"}}},{\"key\":\"02D8\",\"mappings\":{\"default\":{\"default\":\"Breve\"}},\"category\":\"Sk\"},{\"key\":\"02D9\",\"mappings\":{\"default\":{\"default\":\"Überpunkt\"}},\"category\":\"Sk\"},{\"key\":\"02DA\",\"mappings\":{\"default\":{\"default\":\"Überring\"}},\"category\":\"Sk\"},{\"key\":\"02DB\",\"mappings\":{\"default\":{\"default\":\"Ogonek\"}},\"category\":\"Sk\"},{\"key\":\"02DC\",\"mappings\":{\"default\":{\"default\":\"Tilde\"}},\"category\":\"Sk\"},{\"key\":\"02DD\",\"mappings\":{\"default\":{\"default\":\"Doppleakutakzent\"}},\"category\":\"Sk\"},{\"category\":\"Pd\",\"key\":\"2010\",\"mappings\":{\"default\":{\"default\":\"Bindestrich\"}}},{\"category\":\"Pd\",\"key\":\"2011\",\"mappings\":{\"default\":{\"default\":\"Nicht brechender Bindestrich\"}}},{\"category\":\"Pd\",\"key\":\"2012\",\"mappings\":{\"default\":{\"default\":\"Abbildung Bindestrich\"}}},{\"category\":\"Pd\",\"key\":\"2013\",\"mappings\":{\"default\":{\"default\":\"En Dash\"}}},{\"category\":\"Pd\",\"key\":\"2014\",\"mappings\":{\"default\":{\"default\":\"EM Dash\"}}},{\"category\":\"Pd\",\"key\":\"2015\",\"mappings\":{\"default\":{\"default\":\"Horizontale Linie\"}}},{\"category\":\"Po\",\"key\":\"2016\",\"mappings\":{\"default\":{\"default\":\"Doppelte vertikale Linie\"}}},{\"category\":\"Po\",\"key\":\"2017\",\"mappings\":{\"default\":{\"default\":\"Doppelter Unterstrich\"}}},{\"category\":\"Pi\",\"key\":\"2018\",\"mappings\":{\"default\":{\"default\":\"Linkes einfaches Anführungszeichen\"}}},{\"category\":\"Pf\",\"key\":\"2019\",\"mappings\":{\"default\":{\"default\":\"Rechtes einfaches Anführungszeichen\"}}},{\"category\":\"Ps\",\"key\":\"201A\",\"mappings\":{\"default\":{\"default\":\"Einzelnes rechtes Anführungszeichen\"}}},{\"category\":\"Pi\",\"key\":\"201B\",\"mappings\":{\"default\":{\"default\":\"Einzelnes linkes Anführungszeichen\"}}},{\"category\":\"Pi\",\"key\":\"201C\",\"mappings\":{\"default\":{\"default\":\"Linkes doppeltes Anführungszeichen\"}}},{\"category\":\"Pf\",\"key\":\"201D\",\"mappings\":{\"default\":{\"default\":\"Rechtes doppeltes Anführungszeichen\"}}},{\"category\":\"Ps\",\"key\":\"201E\",\"mappings\":{\"default\":{\"default\":\"Doppeltes rechtes Anführungszeichen\"}}},{\"category\":\"Pi\",\"key\":\"201F\",\"mappings\":{\"default\":{\"default\":\"Doppeltes linkes Anführungszeichen\"}}},{\"category\":\"Po\",\"key\":\"2020\",\"mappings\":{\"default\":{\"default\":\"Dolch\"}}},{\"category\":\"Po\",\"key\":\"2021\",\"mappings\":{\"default\":{\"default\":\"Doppelter Dolch\"}}},{\"category\":\"Po\",\"key\":\"2022\",\"mappings\":{\"default\":{\"default\":\"Kugel\"}}},{\"category\":\"Po\",\"key\":\"2023\",\"mappings\":{\"default\":{\"default\":\"Dreieckige Kugel\"}}},{\"category\":\"Po\",\"key\":\"2024\",\"mappings\":{\"default\":{\"default\":\"Einzelpunkt\"}}},{\"category\":\"Po\",\"key\":\"2025\",\"mappings\":{\"default\":{\"default\":\"zwei Punkte\"}}},{\"category\":\"Po\",\"key\":\"2026\",\"mappings\":{\"default\":{\"default\":\"horizontale Ellipsis\"}}},{\"category\":\"Po\",\"key\":\"2027\",\"mappings\":{\"default\":{\"default\":\"Trennungspunkt\"}}},{\"category\":\"Po\",\"key\":\"2030\",\"mappings\":{\"default\":{\"default\":\"promille\"}}},{\"category\":\"Po\",\"key\":\"2031\",\"mappings\":{\"default\":{\"default\":\"pro Zehntausend\"}}},{\"key\":\"2032\",\"mappings\":{\"default\":{\"default\":\"Strich\"}},\"category\":\"Po\"},{\"key\":\"2033\",\"mappings\":{\"default\":{\"default\":\"zwei Strich\"}},\"category\":\"Po\"},{\"key\":\"2034\",\"mappings\":{\"default\":{\"default\":\"drei Strich\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2035\",\"mappings\":{\"default\":{\"default\":\"strich invertiert\"}}},{\"category\":\"Po\",\"key\":\"2036\",\"mappings\":{\"default\":{\"default\":\"zwei Strich invertiert\"}}},{\"category\":\"Po\",\"key\":\"2037\",\"mappings\":{\"default\":{\"default\":\"drei Strich invertiert\"}}},{\"category\":\"Po\",\"key\":\"2038\",\"mappings\":{\"default\":{\"default\":\"Caret\"}}},{\"category\":\"Pi\",\"key\":\"2039\",\"mappings\":{\"default\":{\"default\":\"Einfacher nach links zeigender Winkel Anführungszeichen\"}}},{\"category\":\"Pf\",\"key\":\"203A\",\"mappings\":{\"default\":{\"default\":\"Einzelne Nach-rechts-Winkel-Anführungszeichen\"}}},{\"category\":\"Po\",\"key\":\"203B\",\"mappings\":{\"default\":{\"default\":\"Referenzmarke\"}}},{\"category\":\"Po\",\"key\":\"203C\",\"mappings\":{\"default\":{\"default\":\"Doppelausrufezeichen\"}}},{\"category\":\"Po\",\"key\":\"203D\",\"mappings\":{\"default\":{\"default\":\"Interrobang\"}}},{\"category\":\"Po\",\"key\":\"203E\",\"mappings\":{\"default\":{\"default\":\"Überschrift\"}}},{\"category\":\"Pc\",\"key\":\"203F\",\"mappings\":{\"default\":{\"default\":\"Undertie\"}}},{\"category\":\"Pc\",\"key\":\"2040\",\"mappings\":{\"default\":{\"default\":\"Zeichen Krawatte\"}}},{\"category\":\"Po\",\"key\":\"2041\",\"mappings\":{\"default\":{\"default\":\"Caret-Einfügungspunkt\"}}},{\"category\":\"Po\",\"key\":\"2042\",\"mappings\":{\"default\":{\"default\":\"Asterism\"}}},{\"category\":\"Po\",\"key\":\"2043\",\"mappings\":{\"default\":{\"default\":\"Bindestrich Kugel\"}}},{\"category\":\"Sm\",\"key\":\"2044\",\"mappings\":{\"default\":{\"default\":\"Fraktions-Schrägstrich\"}}},{\"category\":\"Po\",\"key\":\"2047\",\"mappings\":{\"default\":{\"default\":\"Doppel-Fragezeichen\"}}},{\"category\":\"Po\",\"key\":\"2048\",\"mappings\":{\"default\":{\"default\":\"Fragezeichen für Ausrufezeichen\"}}},{\"category\":\"Po\",\"key\":\"2049\",\"mappings\":{\"default\":{\"default\":\"Ausrufezeichen\"}}},{\"category\":\"Po\",\"key\":\"204B\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes Pilcrow-Zeichen\"}}},{\"category\":\"Po\",\"key\":\"204C\",\"mappings\":{\"default\":{\"default\":\"Schwarze Kugel nach links\"}}},{\"category\":\"Po\",\"key\":\"204D\",\"mappings\":{\"default\":{\"default\":\"Schwarze Kugel nach rechts\"}}},{\"category\":\"Po\",\"key\":\"204E\",\"mappings\":{\"default\":{\"default\":\"Niedriges Sternchen\"}}},{\"category\":\"Po\",\"key\":\"204F\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes Semikolon\"}}},{\"category\":\"Po\",\"key\":\"2050\",\"mappings\":{\"default\":{\"default\":\"Nahansicht\"}}},{\"category\":\"Po\",\"key\":\"2051\",\"mappings\":{\"default\":{\"default\":\"Zwei Sternchen vertikal ausgerichtet\"}}},{\"category\":\"Sm\",\"key\":\"2052\",\"mappings\":{\"default\":{\"default\":\"Kommerzielles Minuszeichen\"}}},{\"category\":\"Po\",\"key\":\"2053\",\"mappings\":{\"default\":{\"default\":\"Swing Dash\"}}},{\"category\":\"Pc\",\"key\":\"2054\",\"mappings\":{\"default\":{\"default\":\"Inverted Undertie\"}}},{\"category\":\"Po\",\"key\":\"2055\",\"mappings\":{\"default\":{\"default\":\"Blume Interpunktionszeichen\"}}},{\"category\":\"Po\",\"key\":\"2056\",\"mappings\":{\"default\":{\"default\":\"Drei Punkt-Interpunktion\"}}},{\"key\":\"2057\",\"mappings\":{\"default\":{\"default\":\"quadruple prime\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2058\",\"mappings\":{\"default\":{\"default\":\"Vierpunkt-Interpunktion\"}}},{\"category\":\"Po\",\"key\":\"2059\",\"mappings\":{\"default\":{\"default\":\"Fünf Punkt-Interpunktion\"}}},{\"category\":\"Po\",\"key\":\"205A\",\"mappings\":{\"default\":{\"default\":\"Zwei Punkt-Interpunktion\"}}},{\"category\":\"Po\",\"key\":\"205B\",\"mappings\":{\"default\":{\"default\":\"Vier-Punkt-Markierung\"}}},{\"category\":\"Po\",\"key\":\"205C\",\"mappings\":{\"default\":{\"default\":\"Gepunktetes Kreuz\"}}},{\"category\":\"Po\",\"key\":\"205D\",\"mappings\":{\"default\":{\"default\":\"Tricolon\"}}},{\"category\":\"Po\",\"key\":\"205E\",\"mappings\":{\"default\":{\"default\":\"Vertikale vier Punkte\"}}},{\"category\":\"Sm\",\"key\":\"207A\",\"mappings\":{\"default\":{\"default\":\"Hochgestelltes Pluszeichen\"}}},{\"category\":\"Sm\",\"key\":\"207B\",\"mappings\":{\"default\":{\"default\":\"Hochgestelltes Minus\"}}},{\"category\":\"Sm\",\"key\":\"207C\",\"mappings\":{\"default\":{\"default\":\"Hochgestelltes Gleichheitszeichen\"}}},{\"category\":\"Ps\",\"key\":\"207D\",\"mappings\":{\"default\":{\"default\":\"Hochgestellte linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"207E\",\"mappings\":{\"default\":{\"default\":\"Hochgestellte rechte Klammer\"}}},{\"category\":\"Sm\",\"key\":\"208A\",\"mappings\":{\"default\":{\"default\":\"Index Pluszeichen\"}}},{\"category\":\"Sm\",\"key\":\"208B\",\"mappings\":{\"default\":{\"default\":\"Tiefgestelltes Minus\"}}},{\"category\":\"Sm\",\"key\":\"208C\",\"mappings\":{\"default\":{\"default\":\"Tiefgestelltes Gleichheitszeichen\"}}},{\"category\":\"Ps\",\"key\":\"208D\",\"mappings\":{\"default\":{\"default\":\"Tiefgestellte linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"208E\",\"mappings\":{\"default\":{\"default\":\"Tiefgestellte rechte Klammer\"}}},{\"category\":\"So\",\"key\":\"214A\",\"mappings\":{\"default\":{\"default\":\"Grundstücksgrenze\"}}},{\"category\":\"Sm\",\"key\":\"214B\",\"mappings\":{\"default\":{\"default\":\"Ampersand gedreht\"}}},{\"category\":\"So\",\"key\":\"214C\",\"mappings\":{\"default\":{\"default\":\"Pro Zeichen\"}}},{\"category\":\"So\",\"key\":\"214D\",\"mappings\":{\"default\":{\"default\":\"Aktieselskab\"}}},{\"category\":\"Ll\",\"key\":\"214E\",\"mappings\":{\"default\":{\"default\":\"Gedreht klein F\"}}},{\"key\":\"2200\",\"mappings\":{\"default\":{\"default\":\"für alle\"}},\"category\":\"Sm\"},{\"key\":\"2201\",\"mappings\":{\"default\":{\"default\":\"Komplement\"}},\"category\":\"Sm\"},{\"key\":\"2203\",\"mappings\":{\"default\":{\"default\":\"es gibt\"}},\"category\":\"Sm\"},{\"key\":\"2204\",\"mappings\":{\"default\":{\"default\":\"es gibt nicht\"}},\"category\":\"Sm\"},{\"key\":\"2205\",\"mappings\":{\"default\":{\"default\":\"leere Menge\"}},\"category\":\"Sm\"},{\"key\":\"2206\",\"mappings\":{\"default\":{\"default\":\"Differenz\"}},\"category\":\"Sm\"},{\"key\":\"2208\",\"mappings\":{\"default\":{\"default\":\"Element von\"}},\"category\":\"Sm\"},{\"key\":\"2209\",\"mappings\":{\"default\":{\"default\":\"nicht Element von\"}},\"category\":\"Sm\"},{\"key\":\"220A\",\"mappings\":{\"default\":{\"default\":\"Element von\"}},\"category\":\"Sm\"},{\"key\":\"220B\",\"mappings\":{\"default\":{\"default\":\"hat als Element\"}},\"category\":\"Sm\"},{\"key\":\"220C\",\"mappings\":{\"default\":{\"default\":\"hat nicht als Element\"}},\"category\":\"Sm\"},{\"key\":\"220D\",\"mappings\":{\"default\":{\"default\":\"hat als Element\"}},\"category\":\"Sm\"},{\"key\":\"220E\",\"mappings\":{\"default\":{\"default\":\"Ende Beweis\"}},\"category\":\"Sm\"},{\"key\":\"220F\",\"mappings\":{\"default\":{\"default\":\"Produkt\"}},\"category\":\"Sm\"},{\"key\":\"2210\",\"mappings\":{\"default\":{\"default\":\"Koprodukt\"}},\"category\":\"Sm\"},{\"key\":\"2211\",\"mappings\":{\"default\":{\"default\":\"Summe\"}},\"category\":\"Sm\"},{\"key\":\"2212\",\"mappings\":{\"default\":{\"default\":\"minus\"}},\"category\":\"Sm\"},{\"key\":\"2213\",\"mappings\":{\"default\":{\"default\":\"minus plus\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2214\",\"mappings\":{\"default\":{\"default\":\"Plus mit Punkt\"}}},{\"key\":\"2215\",\"mappings\":{\"default\":{\"default\":\"Division\"}},\"category\":\"Sm\"},{\"key\":\"2216\",\"mappings\":{\"default\":{\"default\":\"Mengendifferenz\"}},\"category\":\"Sm\"},{\"key\":\"2217\",\"mappings\":{\"default\":{\"default\":\"Sternoperator\"}},\"category\":\"Sm\"},{\"key\":\"2218\",\"mappings\":{\"default\":{\"default\":\"verknüpft mit\"}},\"category\":\"Sm\"},{\"key\":\"2219\",\"mappings\":{\"default\":{\"default\":\"Kreisoperator\"}},\"category\":\"Sm\"},{\"key\":\"221A\",\"mappings\":{\"default\":{\"default\":\"Quadratwurzelzeichen\"}},\"category\":\"Sm\"},{\"key\":\"221B\",\"mappings\":{\"default\":{\"default\":\"Kubikwurzelzeichen\"}},\"category\":\"Sm\"},{\"key\":\"221C\",\"mappings\":{\"default\":{\"default\":\"vierte Wurzel\"}},\"category\":\"Sm\"},{\"key\":\"221D\",\"mappings\":{\"default\":{\"default\":\"proportional zu\"}},\"category\":\"Sm\"},{\"key\":\"221E\",\"mappings\":{\"default\":{\"default\":\"unendlich\"}},\"category\":\"Sm\"},{\"key\":\"221F\",\"mappings\":{\"default\":{\"default\":\"rechter Winkel\"}},\"category\":\"Sm\"},{\"key\":\"2220\",\"mappings\":{\"default\":{\"default\":\"Winkel\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2221\",\"mappings\":{\"default\":{\"default\":\"gerichteter Winkel\"}}},{\"category\":\"Sm\",\"key\":\"2222\",\"mappings\":{\"default\":{\"default\":\"Raumwinkel\"}}},{\"key\":\"2223\",\"mappings\":{\"default\":{\"default\":\"teilt\"}},\"category\":\"Sm\"},{\"key\":\"2224\",\"mappings\":{\"default\":{\"default\":\"teilt nicht\"}},\"category\":\"Sm\"},{\"key\":\"2225\",\"mappings\":{\"default\":{\"default\":\"parallel zu\"}},\"category\":\"Sm\"},{\"key\":\"2226\",\"mappings\":{\"default\":{\"default\":\"nicht parallel zu\"}},\"category\":\"Sm\"},{\"key\":\"2227\",\"mappings\":{\"default\":{\"default\":\"und\"}},\"category\":\"Sm\"},{\"key\":\"2228\",\"mappings\":{\"default\":{\"default\":\"oder\"}},\"category\":\"Sm\"},{\"key\":\"2229\",\"mappings\":{\"default\":{\"default\":\"Durchschnitt\"}},\"category\":\"Sm\"},{\"key\":\"222A\",\"mappings\":{\"default\":{\"default\":\"Vereinigung\"}},\"category\":\"Sm\"},{\"key\":\"222B\",\"mappings\":{\"default\":{\"default\":\"Integral\"}},\"category\":\"Sm\"},{\"key\":\"222C\",\"mappings\":{\"default\":{\"default\":\"Doppelintegral\"}},\"category\":\"Sm\"},{\"key\":\"222D\",\"mappings\":{\"default\":{\"default\":\"Dreifachintegral\"}},\"category\":\"Sm\"},{\"key\":\"222E\",\"mappings\":{\"default\":{\"default\":\"Randintegral\"}},\"category\":\"Sm\"},{\"key\":\"222F\",\"mappings\":{\"default\":{\"default\":\"Oberflächenintegral\"}},\"category\":\"Sm\"},{\"key\":\"2230\",\"mappings\":{\"default\":{\"default\":\"Volumenintegral\"}},\"category\":\"Sm\"},{\"key\":\"2231\",\"mappings\":{\"default\":{\"default\":\"Integral im Uhrzeigersinn\"}},\"category\":\"Sm\"},{\"key\":\"2232\",\"mappings\":{\"default\":{\"default\":\"Kurvenintegral im Uhrzeigersinn\"}},\"category\":\"Sm\"},{\"key\":\"2233\",\"mappings\":{\"default\":{\"default\":\"Kurvenintegral im Gegenuhrzeigersinn\"}},\"category\":\"Sm\"},{\"key\":\"2234\",\"mappings\":{\"default\":{\"default\":\"folglich\"}},\"category\":\"Sm\"},{\"key\":\"2235\",\"mappings\":{\"default\":{\"default\":\"weil\"}},\"category\":\"Sm\"},{\"key\":\"2236\",\"mappings\":{\"default\":{\"default\":\"Verhältnis\"}},\"category\":\"Sm\"},{\"key\":\"2237\",\"mappings\":{\"default\":{\"default\":\"Proportion\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2238\",\"mappings\":{\"default\":{\"default\":\"Minus mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2239\",\"mappings\":{\"default\":{\"default\":\"Überschuss\"}}},{\"key\":\"223A\",\"mappings\":{\"default\":{\"default\":\"geometrische Proportion\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"223B\",\"mappings\":{\"default\":{\"default\":\"homothetisch\"}}},{\"category\":\"Sm\",\"key\":\"223C\",\"mappings\":{\"default\":{\"default\":\"Tildeoperator\"}}},{\"category\":\"Sm\",\"key\":\"223D\",\"mappings\":{\"default\":{\"default\":\"Umgekehrte Tilde\"}}},{\"category\":\"Sm\",\"key\":\"223E\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes stummes S\"}}},{\"category\":\"Sm\",\"key\":\"223F\",\"mappings\":{\"default\":{\"default\":\"Sinuswelle\"}}},{\"category\":\"Sm\",\"key\":\"2240\",\"mappings\":{\"default\":{\"default\":\"Kranzprodukt\"}}},{\"category\":\"Sm\",\"key\":\"2241\",\"mappings\":{\"default\":{\"default\":\"durchgestrichene Tilde\"}}},{\"category\":\"Sm\",\"key\":\"2242\",\"mappings\":{\"default\":{\"default\":\"Minus über Tilde\"}}},{\"key\":\"2243\",\"mappings\":{\"default\":{\"default\":\"asymptotisch gleich\"}},\"category\":\"Sm\"},{\"key\":\"2244\",\"mappings\":{\"default\":{\"default\":\"nicht asymptotisch gleich\"}},\"category\":\"Sm\"},{\"key\":\"2245\",\"mappings\":{\"default\":{\"default\":\"ungefähr gleich\"}},\"category\":\"Sm\"},{\"key\":\"2246\",\"mappings\":{\"default\":{\"default\":\"ungefähr, aber nicht ganz gleich\"}},\"category\":\"Sm\"},{\"key\":\"2247\",\"mappings\":{\"default\":{\"default\":\"weder ungefähr noch ganz gleich\"}},\"category\":\"Sm\"},{\"key\":\"2248\",\"mappings\":{\"default\":{\"default\":\"beinahe gleich\"}},\"category\":\"Sm\"},{\"key\":\"2249\",\"mappings\":{\"default\":{\"default\":\"nicht beinahe gleich\"}},\"category\":\"Sm\"},{\"key\":\"224A\",\"mappings\":{\"default\":{\"default\":\"beinahe gleich oder gleich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"224B\",\"mappings\":{\"default\":{\"default\":\"dreifache Tilde\"}}},{\"category\":\"Sm\",\"key\":\"224C\",\"mappings\":{\"default\":{\"default\":\"alles gleich\"}}},{\"key\":\"224D\",\"mappings\":{\"default\":{\"default\":\"äquivalent zu\"}},\"category\":\"Sm\"},{\"key\":\"224E\",\"mappings\":{\"default\":{\"default\":\"geometrisch äquivalent zu\"}},\"category\":\"Sm\"},{\"key\":\"224F\",\"mappings\":{\"default\":{\"default\":\"Differenz zwischen\"}},\"category\":\"Sm\"},{\"key\":\"2250\",\"mappings\":{\"default\":{\"default\":\"nähert sich der Grenze\"}},\"category\":\"Sm\"},{\"key\":\"2251\",\"mappings\":{\"default\":{\"default\":\"geometrisch gleich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2252\",\"mappings\":{\"default\":{\"default\":\"Ungefähr gleich oder das Bild von\"}}},{\"category\":\"Sm\",\"key\":\"2253\",\"mappings\":{\"default\":{\"default\":\"Bild von oder ungefähr gleich\"}}},{\"key\":\"2254\",\"mappings\":{\"default\":{\"default\":\"definiert als\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2255\",\"mappings\":{\"default\":{\"default\":\"definiert als von rechts\"}}},{\"category\":\"Sm\",\"key\":\"2256\",\"mappings\":{\"default\":{\"default\":\"ungefähr gleich\"}}},{\"category\":\"Sm\",\"key\":\"2257\",\"mappings\":{\"default\":{\"default\":\"ungefähr gleich\"}}},{\"key\":\"2258\",\"mappings\":{\"default\":{\"default\":\"entspricht\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2259\",\"mappings\":{\"default\":{\"default\":\"entspricht\"}}},{\"category\":\"Sm\",\"key\":\"225A\",\"mappings\":{\"default\":{\"default\":\"gleichwinklig zu\"}}},{\"category\":\"Sm\",\"key\":\"225B\",\"mappings\":{\"default\":{\"default\":\"gleich mit Stern\"}}},{\"category\":\"Sm\",\"key\":\"225C\",\"mappings\":{\"default\":{\"default\":\"gleich mit Delta\"}}},{\"key\":\"225D\",\"mappings\":{\"default\":{\"default\":\"definitionsgemäß gleich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"225E\",\"mappings\":{\"default\":{\"default\":\"gemessen mit\"}}},{\"category\":\"Sm\",\"key\":\"225F\",\"mappings\":{\"default\":{\"default\":\"vielleicht gleich\"}}},{\"key\":\"2260\",\"mappings\":{\"default\":{\"default\":\"ungleich\"}},\"category\":\"Sm\"},{\"key\":\"2261\",\"mappings\":{\"default\":{\"default\":\"kongruent mit\"}},\"category\":\"Sm\"},{\"key\":\"2262\",\"mappings\":{\"default\":{\"default\":\"nicht kongruent mit\"}},\"category\":\"Sm\"},{\"key\":\"2263\",\"mappings\":{\"default\":{\"default\":\"genau äquivalent mit\"}},\"category\":\"Sm\"},{\"key\":\"2264\",\"mappings\":{\"default\":{\"default\":\"kleiner oder gleich\"}},\"category\":\"Sm\"},{\"key\":\"2265\",\"mappings\":{\"default\":{\"default\":\"größer oder gleich\"}},\"category\":\"Sm\"},{\"key\":\"2266\",\"mappings\":{\"default\":{\"default\":\"kleiner als über gleich\"}},\"category\":\"Sm\"},{\"key\":\"2267\",\"mappings\":{\"default\":{\"default\":\"größer als über gleich\"}},\"category\":\"Sm\"},{\"key\":\"2268\",\"mappings\":{\"default\":{\"default\":\"kleiner als, aber nicht gleich\"}},\"category\":\"Sm\"},{\"key\":\"2269\",\"mappings\":{\"default\":{\"default\":\"größer als, aber nicht gleich\"}},\"category\":\"Sm\"},{\"key\":\"226A\",\"mappings\":{\"default\":{\"default\":\"viel kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"226B\",\"mappings\":{\"default\":{\"default\":\"viel größer als\"}},\"category\":\"Sm\"},{\"key\":\"226C\",\"mappings\":{\"default\":{\"default\":\"zwischen\"}},\"category\":\"Sm\"},{\"key\":\"226D\",\"mappings\":{\"default\":{\"default\":\"nicht äquivalent mit\"}},\"category\":\"Sm\"},{\"key\":\"226E\",\"mappings\":{\"default\":{\"default\":\"nicht kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"226F\",\"mappings\":{\"default\":{\"default\":\"nicht größer als\"}},\"category\":\"Sm\"},{\"key\":\"2270\",\"mappings\":{\"default\":{\"default\":\"weder kleiner als noch gleich\"}},\"category\":\"Sm\"},{\"key\":\"2271\",\"mappings\":{\"default\":{\"default\":\"weder größer als noch gleich\"}},\"category\":\"Sm\"},{\"key\":\"2272\",\"mappings\":{\"default\":{\"default\":\"kleiner als oder äquivalent\"}},\"category\":\"Sm\"},{\"key\":\"2273\",\"mappings\":{\"default\":{\"default\":\"größer als oder äquivalent\"}},\"category\":\"Sm\"},{\"key\":\"2274\",\"mappings\":{\"default\":{\"default\":\"weder kleiner als noch äquivalent\"}},\"category\":\"Sm\"},{\"key\":\"2275\",\"mappings\":{\"default\":{\"default\":\"weder größer als noch äquivalent\"}},\"category\":\"Sm\"},{\"key\":\"2276\",\"mappings\":{\"default\":{\"default\":\"kleiner oder größer als\"}},\"category\":\"Sm\"},{\"key\":\"2277\",\"mappings\":{\"default\":{\"default\":\"größer oder kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"2278\",\"mappings\":{\"default\":{\"default\":\"weder kleiner noch größer als\"}},\"category\":\"Sm\"},{\"key\":\"2279\",\"mappings\":{\"default\":{\"default\":\"weder größer noch kleiner als\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"227A\",\"mappings\":{\"default\":{\"default\":\"vorangehend\"}}},{\"category\":\"Sm\",\"key\":\"227B\",\"mappings\":{\"default\":{\"default\":\"nachfolgend\"}}},{\"category\":\"Sm\",\"key\":\"227C\",\"mappings\":{\"default\":{\"default\":\"vorangehend oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"227D\",\"mappings\":{\"default\":{\"default\":\"nachfolgend oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"227E\",\"mappings\":{\"default\":{\"default\":\"vorangehend oder äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"227F\",\"mappings\":{\"default\":{\"default\":\"nachfolgend oder äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"2280\",\"mappings\":{\"default\":{\"default\":\"nicht vorangehend\"}}},{\"category\":\"Sm\",\"key\":\"2281\",\"mappings\":{\"default\":{\"default\":\"nicht nachfolgend\"}}},{\"category\":\"Sm\",\"key\":\"2282\",\"mappings\":{\"default\":{\"default\":\"echte Teilmenge von\"}}},{\"category\":\"Sm\",\"key\":\"2283\",\"mappings\":{\"default\":{\"default\":\"echte Obermenge von\"}}},{\"category\":\"Sm\",\"key\":\"2284\",\"mappings\":{\"default\":{\"default\":\"keine echte Teilmenge von\"}}},{\"category\":\"Sm\",\"key\":\"2285\",\"mappings\":{\"default\":{\"default\":\"kein echte Obermenge von\"}}},{\"category\":\"Sm\",\"key\":\"2286\",\"mappings\":{\"default\":{\"default\":\"Teilmenge oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2287\",\"mappings\":{\"default\":{\"default\":\"Obermenge oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2288\",\"mappings\":{\"default\":{\"default\":\"weder Teilmenge noch gleich\"}}},{\"category\":\"Sm\",\"key\":\"2289\",\"mappings\":{\"default\":{\"default\":\"weder Obermenge noch gleich\"}}},{\"category\":\"Sm\",\"key\":\"228A\",\"mappings\":{\"default\":{\"default\":\"Teilmenge aber nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"228B\",\"mappings\":{\"default\":{\"default\":\"Obermenge aber nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"228C\",\"mappings\":{\"default\":{\"default\":\"Multimenge\"}}},{\"category\":\"Sm\",\"key\":\"228D\",\"mappings\":{\"default\":{\"default\":\"Multimengenmultiplikation\"}}},{\"category\":\"Sm\",\"key\":\"228E\",\"mappings\":{\"default\":{\"default\":\"Multimengenvereinigung\"}}},{\"category\":\"Sm\",\"key\":\"228F\",\"mappings\":{\"default\":{\"default\":\"quadratisches Bild von\"}}},{\"category\":\"Sm\",\"key\":\"2290\",\"mappings\":{\"default\":{\"default\":\"quadratisches Original von\"}}},{\"category\":\"Sm\",\"key\":\"2291\",\"mappings\":{\"default\":{\"default\":\"quadratisches Bild oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2292\",\"mappings\":{\"default\":{\"default\":\"quadratisches Original oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2293\",\"mappings\":{\"default\":{\"default\":\"quadratische Schnittmenge\"}}},{\"category\":\"Sm\",\"key\":\"2294\",\"mappings\":{\"default\":{\"default\":\"quadratische VereinigungTasse\"}}},{\"category\":\"Sm\",\"key\":\"2295\",\"mappings\":{\"default\":{\"default\":\"eingekreistes Plus\"}}},{\"category\":\"Sm\",\"key\":\"2296\",\"mappings\":{\"default\":{\"default\":\"eingekreistes Minus\"}}},{\"category\":\"Sm\",\"key\":\"2297\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Multiplikation\"}}},{\"category\":\"Sm\",\"key\":\"2298\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Division\"}}},{\"category\":\"Sm\",\"key\":\"2299\",\"mappings\":{\"default\":{\"default\":\"eingekreister Punktoperator\"}}},{\"category\":\"Sm\",\"key\":\"229A\",\"mappings\":{\"default\":{\"default\":\"eingekreister Ringoperator\"}}},{\"category\":\"Sm\",\"key\":\"229B\",\"mappings\":{\"default\":{\"default\":\"eingekreister Sternoperator\"}}},{\"category\":\"Sm\",\"key\":\"229C\",\"mappings\":{\"default\":{\"default\":\"eingekreistes Gleich\"}}},{\"category\":\"Sm\",\"key\":\"229D\",\"mappings\":{\"default\":{\"default\":\"eingekreister Gedankenstrich\"}}},{\"category\":\"Sm\",\"key\":\"229E\",\"mappings\":{\"default\":{\"default\":\"eingerahmtes Plus\"}}},{\"category\":\"Sm\",\"key\":\"229F\",\"mappings\":{\"default\":{\"default\":\"eingerahmtes Minus\"}}},{\"category\":\"Sm\",\"key\":\"22A0\",\"mappings\":{\"default\":{\"default\":\"eingerahmte Multiplikation\"}}},{\"category\":\"Sm\",\"key\":\"22A1\",\"mappings\":{\"default\":{\"default\":\"eingerahmter Punktoperator\"}}},{\"category\":\"Sm\",\"key\":\"22A2\",\"mappings\":{\"default\":{\"default\":\"ergibt\"}}},{\"category\":\"Sm\",\"key\":\"22A3\",\"mappings\":{\"default\":{\"default\":\"ergibt nicht\"}}},{\"category\":\"Sm\",\"key\":\"22A4\",\"mappings\":{\"default\":{\"default\":\"senkrecht von\"}}},{\"category\":\"Sm\",\"key\":\"22A5\",\"mappings\":{\"default\":{\"default\":\"senkrecht auf\"}}},{\"category\":\"Sm\",\"key\":\"22A6\",\"mappings\":{\"default\":{\"default\":\"Behauptung\"}}},{\"category\":\"Sm\",\"key\":\"22A7\",\"mappings\":{\"default\":{\"default\":\"Model\"}}},{\"category\":\"Sm\",\"key\":\"22A8\",\"mappings\":{\"default\":{\"default\":\"wahr\"}}},{\"category\":\"Sm\",\"key\":\"22A9\",\"mappings\":{\"default\":{\"default\":\"erzwingen\"}}},{\"category\":\"Sm\",\"key\":\"22AA\",\"mappings\":{\"default\":{\"default\":\"dreifache vertikale Leiste mit rechtem Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"22AB\",\"mappings\":{\"default\":{\"default\":\"doppelte vertikale Leiste mit doppeltem rechtem Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"22AC\",\"mappings\":{\"default\":{\"default\":\"beweist nicht\"}}},{\"category\":\"Sm\",\"key\":\"22AD\",\"mappings\":{\"default\":{\"default\":\"nicht wahr\"}}},{\"category\":\"Sm\",\"key\":\"22AE\",\"mappings\":{\"default\":{\"default\":\"nicht erzwingen\"}}},{\"category\":\"Sm\",\"key\":\"22AF\",\"mappings\":{\"default\":{\"default\":\"negierte doppelte vertikale Leiste mit doppeltem rechten Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"22B0\",\"mappings\":{\"default\":{\"default\":\"vorangehend in Relation\"}}},{\"category\":\"Sm\",\"key\":\"22B1\",\"mappings\":{\"default\":{\"default\":\"nachfolgend in Relation\"}}},{\"category\":\"Sm\",\"key\":\"22B2\",\"mappings\":{\"default\":{\"default\":\"normale Untergruppe\"}}},{\"category\":\"Sm\",\"key\":\"22B3\",\"mappings\":{\"default\":{\"default\":\"enthält normale Untergruppe\"}}},{\"category\":\"Sm\",\"key\":\"22B4\",\"mappings\":{\"default\":{\"default\":\"normale Untergruppe von oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22B5\",\"mappings\":{\"default\":{\"default\":\"enthält normale Untergruppe oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22B6\",\"mappings\":{\"default\":{\"default\":\"Original von\"}}},{\"category\":\"Sm\",\"key\":\"22B7\",\"mappings\":{\"default\":{\"default\":\"Bild von\"}}},{\"category\":\"Sm\",\"key\":\"22B8\",\"mappings\":{\"default\":{\"default\":\"Mehrfachzuordnung\"}}},{\"category\":\"Sm\",\"key\":\"22B9\",\"mappings\":{\"default\":{\"default\":\"hermitesch konjugierte Matrix\"}}},{\"category\":\"Sm\",\"key\":\"22BA\",\"mappings\":{\"default\":{\"default\":\"einschalten\"}}},{\"category\":\"Sm\",\"key\":\"22BB\",\"mappings\":{\"default\":{\"default\":\"Ausschließendes Oder\"}}},{\"category\":\"Sm\",\"key\":\"22BC\",\"mappings\":{\"default\":{\"default\":\"Nand verknüpft mit\"}}},{\"category\":\"Sm\",\"key\":\"22BD\",\"mappings\":{\"default\":{\"default\":\"Nor verknüpft mit\"}}},{\"category\":\"Sm\",\"key\":\"22BF\",\"mappings\":{\"default\":{\"default\":\"rechtwinkliges Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"22C0\",\"mappings\":{\"default\":{\"default\":\"N-stufiges logisches Und\"}}},{\"category\":\"Sm\",\"key\":\"22C1\",\"mappings\":{\"default\":{\"default\":\"N-stufiges logisches Oder\"}}},{\"category\":\"Sm\",\"key\":\"22C2\",\"mappings\":{\"default\":{\"default\":\"N-stufiger Durchschnitt\"}}},{\"category\":\"Sm\",\"key\":\"22C3\",\"mappings\":{\"default\":{\"default\":\"N-stufige Vereinigung\"}}},{\"category\":\"Sm\",\"key\":\"22C4\",\"mappings\":{\"default\":{\"default\":\"Rautenoperator\"}}},{\"category\":\"Sm\",\"key\":\"22C5\",\"mappings\":{\"default\":{\"default\":\"mal\",\"alternative\":\"Multiplikationspunkt\"}}},{\"category\":\"Sm\",\"key\":\"22C6\",\"mappings\":{\"default\":{\"default\":\"Sternoperator\"}}},{\"category\":\"Sm\",\"key\":\"22C7\",\"mappings\":{\"default\":{\"default\":\"Divisionsanzahl\"}}},{\"category\":\"Sm\",\"key\":\"22C8\",\"mappings\":{\"default\":{\"default\":\"Schleife\"}}},{\"category\":\"Sm\",\"key\":\"22C9\",\"mappings\":{\"default\":{\"default\":\"linkes halbdirektes Produkt\"}}},{\"category\":\"Sm\",\"key\":\"22CA\",\"mappings\":{\"default\":{\"default\":\"rechtes halbdirektes Produkt\"}}},{\"category\":\"Sm\",\"key\":\"22CB\",\"mappings\":{\"default\":{\"default\":\"linkes halbdirektes Produkt\"}}},{\"category\":\"Sm\",\"key\":\"22CC\",\"mappings\":{\"default\":{\"default\":\"rechtes halbdirektes Produkt\"}}},{\"category\":\"Sm\",\"key\":\"22CD\",\"mappings\":{\"default\":{\"default\":\"umgekehrte Tilde gleich\"}}},{\"category\":\"Sm\",\"key\":\"22CE\",\"mappings\":{\"default\":{\"default\":\"geschweiftes logisches Oder\"}}},{\"category\":\"Sm\",\"key\":\"22CF\",\"mappings\":{\"default\":{\"default\":\"geschweiftes logisches Und\"}}},{\"category\":\"Sm\",\"key\":\"22D0\",\"mappings\":{\"default\":{\"default\":\"doppelte Teilmenge\"}}},{\"category\":\"Sm\",\"key\":\"22D1\",\"mappings\":{\"default\":{\"default\":\"doppelte Obermenge\"}}},{\"category\":\"Sm\",\"key\":\"22D2\",\"mappings\":{\"default\":{\"default\":\"doppelter Durchschnitt\"}}},{\"category\":\"Sm\",\"key\":\"22D3\",\"mappings\":{\"default\":{\"default\":\"doppelte Vereinigung\"}}},{\"category\":\"Sm\",\"key\":\"22D4\",\"mappings\":{\"default\":{\"default\":\"echter Durchschnitt\"}}},{\"category\":\"Sm\",\"key\":\"22D5\",\"mappings\":{\"default\":{\"default\":\"gleich und parallel\"}}},{\"category\":\"Sm\",\"key\":\"22D6\",\"mappings\":{\"default\":{\"default\":\"kleiner als mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"22D7\",\"mappings\":{\"default\":{\"default\":\"größer als mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"22D8\",\"mappings\":{\"default\":{\"default\":\"sehr viel kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"22D9\",\"mappings\":{\"default\":{\"default\":\"sehr viel größer als\"}}},{\"category\":\"Sm\",\"key\":\"22DA\",\"mappings\":{\"default\":{\"default\":\"kleiner als, gleich oder größer als\"}}},{\"category\":\"Sm\",\"key\":\"22DB\",\"mappings\":{\"default\":{\"default\":\"größer als, gleich oder kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"22DC\",\"mappings\":{\"default\":{\"default\":\"gleich oder kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"22DD\",\"mappings\":{\"default\":{\"default\":\"gleich oder größer als\"}}},{\"category\":\"Sm\",\"key\":\"22DE\",\"mappings\":{\"default\":{\"default\":\"gleich oder vorangehend\"}}},{\"category\":\"Sm\",\"key\":\"22DF\",\"mappings\":{\"default\":{\"default\":\"gleich oder nachfolgend\"}}},{\"category\":\"Sm\",\"key\":\"22E0\",\"mappings\":{\"default\":{\"default\":\"weder vorangehend oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E1\",\"mappings\":{\"default\":{\"default\":\"weder nachfolgend oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E2\",\"mappings\":{\"default\":{\"default\":\"kein quadratisches Bild oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E3\",\"mappings\":{\"default\":{\"default\":\"kein quadratisches Original oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E4\",\"mappings\":{\"default\":{\"default\":\"quadratisches Bild oder nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E5\",\"mappings\":{\"default\":{\"default\":\"quadratisches Original oder nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E6\",\"mappings\":{\"default\":{\"default\":\"kleiner als, aber nicht äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"22E7\",\"mappings\":{\"default\":{\"default\":\"größer als, aber nicht äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"22E8\",\"mappings\":{\"default\":{\"default\":\"vorangehend, aber nicht äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"22E9\",\"mappings\":{\"default\":{\"default\":\"nachfolgend, aber nicht äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"22EA\",\"mappings\":{\"default\":{\"default\":\"nicht normale Untergruppe von\"}}},{\"category\":\"Sm\",\"key\":\"22EB\",\"mappings\":{\"default\":{\"default\":\"enthält keine normale Untergruppe\"}}},{\"category\":\"Sm\",\"key\":\"22EC\",\"mappings\":{\"default\":{\"default\":\"keine normale Untergruppe von oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22ED\",\"mappings\":{\"default\":{\"default\":\"enthält nicht als normale Untergruppe oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22EE\",\"mappings\":{\"default\":{\"default\":\"Vertikale Ellipsis\"}}},{\"category\":\"Sm\",\"key\":\"22EF\",\"mappings\":{\"default\":{\"default\":\"Zentrierte horizontale Ellipse\"}}},{\"category\":\"Sm\",\"key\":\"22F0\",\"mappings\":{\"default\":{\"default\":\"Diagonale Ellipse unten links nach oben rechts\"}}},{\"category\":\"Sm\",\"key\":\"22F1\",\"mappings\":{\"default\":{\"default\":\"Diagonale Ellipse, oben links nach unten rechts\"}}},{\"category\":\"Sm\",\"key\":\"22F2\",\"mappings\":{\"default\":{\"default\":\"Element mit langem horizontalen Strich\"}}},{\"category\":\"Sm\",\"key\":\"22F3\",\"mappings\":{\"default\":{\"default\":\"Element mit vertikalem Strich am Ende des horizontalen Strichs\"}}},{\"category\":\"Sm\",\"key\":\"22F4\",\"mappings\":{\"default\":{\"default\":\"kleines Element mit vertikalem Strich am Ende des horizontalen Strichs\"}}},{\"category\":\"Sm\",\"key\":\"22F5\",\"mappings\":{\"default\":{\"default\":\"Element mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"22F6\",\"mappings\":{\"default\":{\"default\":\"Element mit Überstrich\"}}},{\"key\":\"22F7\",\"mappings\":{\"default\":{\"default\":\"kleines Element mit Überstrich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"22F8\",\"mappings\":{\"default\":{\"default\":\"Element mit Unterstrich\"}}},{\"category\":\"Sm\",\"key\":\"22F9\",\"mappings\":{\"default\":{\"default\":\"Element mit 2 horizontalen Strichen\"}}},{\"category\":\"Sm\",\"key\":\"22FA\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes Elementzeichen mit langem horizontalen Strich\"}}},{\"category\":\"Sm\",\"key\":\"22FB\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes Elementzeichen mit vertikalem Strich am Ende des horizontalen Strichs\"}}},{\"category\":\"Sm\",\"key\":\"22FC\",\"mappings\":{\"default\":{\"default\":\"kleines umgekehrtes Elementzeichen mit vertikalem Strich am Ende des horizontalen Strichs\"}}},{\"key\":\"22FD\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes Elementzeichen mit Überstrich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"22FE\",\"mappings\":{\"default\":{\"default\":\"kleines umgekehrtes Elementzeichen mit Überstrich\"}}},{\"category\":\"Sm\",\"key\":\"22FF\",\"mappings\":{\"default\":{\"default\":\"Z-Notation-Bag-Mitgliedschaft\"}}},{\"category\":\"So\",\"key\":\"2300\",\"mappings\":{\"default\":{\"default\":\"Durchmesser-Zeichen\"}}},{\"category\":\"So\",\"key\":\"2302\",\"mappings\":{\"default\":{\"default\":\"Haus\"}}},{\"category\":\"So\",\"key\":\"2305\",\"mappings\":{\"default\":{\"default\":\"Projektiv\"}}},{\"category\":\"So\",\"key\":\"2306\",\"mappings\":{\"default\":{\"default\":\"Perspektive\"}}},{\"category\":\"So\",\"key\":\"2307\",\"mappings\":{\"default\":{\"default\":\"Schlangenlinie\"}}},{\"category\":\"So\",\"key\":\"2310\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes Nichtzeichen\"}}},{\"category\":\"So\",\"key\":\"2311\",\"mappings\":{\"default\":{\"default\":\"Quadratische Raute\"}}},{\"category\":\"So\",\"key\":\"2312\",\"mappings\":{\"default\":{\"default\":\"Bogen\"}}},{\"category\":\"So\",\"key\":\"2313\",\"mappings\":{\"default\":{\"default\":\"Segment\"}}},{\"category\":\"So\",\"key\":\"2314\",\"mappings\":{\"default\":{\"default\":\"Sektor\"}}},{\"category\":\"So\",\"key\":\"2795\",\"mappings\":{\"default\":{\"default\":\"Schweres Pluszeichen\"}}},{\"category\":\"So\",\"key\":\"2796\",\"mappings\":{\"default\":{\"default\":\"Schweres Minuszeichen\"}}},{\"category\":\"So\",\"key\":\"2797\",\"mappings\":{\"default\":{\"default\":\"Heavy Division Sign\"}}},{\"category\":\"So\",\"key\":\"27B0\",\"mappings\":{\"default\":{\"default\":\"Curly Loop\"}}},{\"category\":\"So\",\"key\":\"27BF\",\"mappings\":{\"default\":{\"default\":\"Doppelte geschweifte Schleife\"}}},{\"category\":\"Sm\",\"key\":\"27C1\",\"mappings\":{\"default\":{\"default\":\"Weißes Dreieck, das kleines weißes Dreieck enthält\"}}},{\"category\":\"Sm\",\"key\":\"27C2\",\"mappings\":{\"default\":{\"default\":\"Aufrecht\"}}},{\"category\":\"Sm\",\"key\":\"27C3\",\"mappings\":{\"default\":{\"default\":\"Subset öffnen\"}}},{\"category\":\"Sm\",\"key\":\"27C4\",\"mappings\":{\"default\":{\"default\":\"Superset öffnen\"}}},{\"category\":\"Sm\",\"key\":\"27C7\",\"mappings\":{\"default\":{\"default\":\"Oder mit innerem Punkt\"}}},{\"category\":\"Sm\",\"key\":\"27C8\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Schrägstrich Vorhergehender Teilsatz\"}}},{\"category\":\"Sm\",\"key\":\"27C9\",\"mappings\":{\"default\":{\"default\":\"Superset Vorgänger Schrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"27CA\",\"mappings\":{\"default\":{\"default\":\"Vertikaler Balken mit horizontalem Hub\"}}},{\"category\":\"Sm\",\"key\":\"27CB\",\"mappings\":{\"default\":{\"default\":\"Mathematische aufsteigende Diagonale\"}}},{\"category\":\"Sm\",\"key\":\"27CC\",\"mappings\":{\"default\":{\"default\":\"Lange Abteilung\"}}},{\"category\":\"Sm\",\"key\":\"27CD\",\"mappings\":{\"default\":{\"default\":\"Mathematische fallende Diagonale\"}}},{\"category\":\"Sm\",\"key\":\"27CE\",\"mappings\":{\"default\":{\"default\":\"quadratisches und\"}}},{\"category\":\"Sm\",\"key\":\"27CF\",\"mappings\":{\"default\":{\"default\":\"quadratisches oder\"}}},{\"category\":\"Sm\",\"key\":\"27D0\",\"mappings\":{\"default\":{\"default\":\"Weißer Diamant mit zentriertem Punkt\"}}},{\"category\":\"Sm\",\"key\":\"27D1\",\"mappings\":{\"default\":{\"default\":\"Und mit Dot\"}}},{\"category\":\"Sm\",\"key\":\"27D2\",\"mappings\":{\"default\":{\"default\":\"Element der Öffnung nach oben\"}}},{\"category\":\"Sm\",\"key\":\"27D3\",\"mappings\":{\"default\":{\"default\":\"Untere rechte Ecke mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"27D4\",\"mappings\":{\"default\":{\"default\":\"Obere linke Ecke mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"27D5\",\"mappings\":{\"default\":{\"default\":\"Linke äußere Verbindung\"}}},{\"category\":\"Sm\",\"key\":\"27D6\",\"mappings\":{\"default\":{\"default\":\"rechter äußerer Join\"}}},{\"category\":\"Sm\",\"key\":\"27D7\",\"mappings\":{\"default\":{\"default\":\"Volle äußere Verbindung\"}}},{\"category\":\"Sm\",\"key\":\"27D8\",\"mappings\":{\"default\":{\"default\":\"Große Up Tack\"}}},{\"category\":\"Sm\",\"key\":\"27D9\",\"mappings\":{\"default\":{\"default\":\"Großes Down Tack\"}}},{\"category\":\"Sm\",\"key\":\"27DA\",\"mappings\":{\"default\":{\"default\":\"Linkes und rechtes doppeltes Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"27DB\",\"mappings\":{\"default\":{\"default\":\"Linker und rechter Tack\"}}},{\"category\":\"Sm\",\"key\":\"27DC\",\"mappings\":{\"default\":{\"default\":\"Linke Multimap\"}}},{\"category\":\"Sm\",\"key\":\"27DD\",\"mappings\":{\"default\":{\"default\":\"Long Right Tack\"}}},{\"category\":\"Sm\",\"key\":\"27DE\",\"mappings\":{\"default\":{\"default\":\"Langer linker Tack\"}}},{\"category\":\"Sm\",\"key\":\"27DF\",\"mappings\":{\"default\":{\"default\":\"Up Tack mit Kreis oben\"}}},{\"category\":\"Sm\",\"key\":\"27E0\",\"mappings\":{\"default\":{\"default\":\"Raute durch horizontale Regel geteilt\"}}},{\"category\":\"Sm\",\"key\":\"27E1\",\"mappings\":{\"default\":{\"default\":\"Weißer konkavseitiger Diamant\"}}},{\"category\":\"Sm\",\"key\":\"27E2\",\"mappings\":{\"default\":{\"default\":\"Weißer konkavseitiger Diamant mit Zecke nach links\"}}},{\"category\":\"Sm\",\"key\":\"27E3\",\"mappings\":{\"default\":{\"default\":\"Weißer konkavseitiger Diamant mit Zecke nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"27E4\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit Zecke nach links\"}}},{\"category\":\"Sm\",\"key\":\"27E5\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit Tick nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"292B\",\"mappings\":{\"default\":{\"default\":\"Steigende diagonale Kreuzung fallende Diagonale\"}}},{\"category\":\"Sm\",\"key\":\"292C\",\"mappings\":{\"default\":{\"default\":\"Fallende diagonale Kreuzung steigende Diagonale\"}}},{\"category\":\"Sm\",\"key\":\"2980\",\"mappings\":{\"default\":{\"default\":\"Dreifacher vertikaler Balkenbegrenzer\"}}},{\"category\":\"Sm\",\"key\":\"2981\",\"mappings\":{\"default\":{\"default\":\"Z Notationspunkt\"}}},{\"category\":\"Sm\",\"key\":\"2982\",\"mappings\":{\"default\":{\"default\":\"Z Notationstyp Doppelpunkt\"}}},{\"category\":\"Sm\",\"key\":\"2999\",\"mappings\":{\"default\":{\"default\":\"Gepunkteter Zaun\"}}},{\"category\":\"Sm\",\"key\":\"299A\",\"mappings\":{\"default\":{\"default\":\"Vertikale Zickzacklinie\"}}},{\"category\":\"Sm\",\"key\":\"29B0\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter leerer Satz\"}}},{\"category\":\"Sm\",\"key\":\"29B1\",\"mappings\":{\"default\":{\"default\":\"Leeres Set mit Overbar\"}}},{\"category\":\"Sm\",\"key\":\"29B2\",\"mappings\":{\"default\":{\"default\":\"Leeres Set mit kleinem Kreis oben\"}}},{\"category\":\"Sm\",\"key\":\"29B5\",\"mappings\":{\"default\":{\"default\":\"Kreis mit horizontaler Leiste\"}}},{\"key\":\"29B6\",\"mappings\":{\"default\":{\"default\":\"circled vertical bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29B7\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Parallele\"}}},{\"category\":\"Sm\",\"key\":\"29B8\",\"mappings\":{\"default\":{\"default\":\"eingekreister umgekehrter Schrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"29B9\",\"mappings\":{\"default\":{\"default\":\"eingekreistes Senkrecht\"}}},{\"category\":\"Sm\",\"key\":\"29BA\",\"mappings\":{\"default\":{\"default\":\"Kreis geteilt durch horizontale Leiste und obere Hälfte geteilt durch vertikale Leiste\"}}},{\"category\":\"Sm\",\"key\":\"29BB\",\"mappings\":{\"default\":{\"default\":\"Kreis mit überlagertem X\"}}},{\"category\":\"Sm\",\"key\":\"29BC\",\"mappings\":{\"default\":{\"default\":\"eingekreistes, gegen den Uhrzeigersinn gedrehtes Divisionszeichen\"}}},{\"category\":\"Sm\",\"key\":\"29BE\",\"mappings\":{\"default\":{\"default\":\"eingekreiste weiße Kugel\"}}},{\"category\":\"Sm\",\"key\":\"29BF\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Kugel\"}}},{\"category\":\"Sm\",\"key\":\"29C0\",\"mappings\":{\"default\":{\"default\":\"eingekreist weniger als\"}}},{\"category\":\"Sm\",\"key\":\"29C1\",\"mappings\":{\"default\":{\"default\":\"eingekreist größer als\"}}},{\"category\":\"Sm\",\"key\":\"29C2\",\"mappings\":{\"default\":{\"default\":\"Kreis mit kleinem Kreis nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"29C3\",\"mappings\":{\"default\":{\"default\":\"Kreis mit zwei horizontalen Strichen nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"29C4\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit Diagonale links unten nach rechts oben\"}}},{\"category\":\"Sm\",\"key\":\"29C5\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit Diagonale links oben nach rechts unten\"}}},{\"category\":\"Sm\",\"key\":\"29C6\",\"mappings\":{\"default\":{\"default\":\"Quadrat Sternchen\"}}},{\"category\":\"Sm\",\"key\":\"29C7\",\"mappings\":{\"default\":{\"default\":\"Quadratischer kleiner Kreis\"}}},{\"category\":\"Sm\",\"key\":\"29C8\",\"mappings\":{\"default\":{\"default\":\"Doppelquadrat\"}}},{\"category\":\"Sm\",\"key\":\"29C9\",\"mappings\":{\"default\":{\"default\":\"Zwei verbundene Quadrate\"}}},{\"category\":\"Sm\",\"key\":\"29CA\",\"mappings\":{\"default\":{\"default\":\"Dreieck mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"29CB\",\"mappings\":{\"default\":{\"default\":\"Dreieck mit Unterleiste\"}}},{\"category\":\"Sm\",\"key\":\"29CC\",\"mappings\":{\"default\":{\"default\":\"S im Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"29CD\",\"mappings\":{\"default\":{\"default\":\"Dreieck mit Serifen unten\"}}},{\"category\":\"Sm\",\"key\":\"29CE\",\"mappings\":{\"default\":{\"default\":\"Rechtes Dreieck über linkem Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"29CF\",\"mappings\":{\"default\":{\"default\":\"Linkes Dreieck neben vertikaler Leiste\"}}},{\"category\":\"Sm\",\"key\":\"29D0\",\"mappings\":{\"default\":{\"default\":\"Vertikaler Balken neben dem rechten Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"29D1\",\"mappings\":{\"default\":{\"default\":\"Fliege mit linker Hälfte schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29D2\",\"mappings\":{\"default\":{\"default\":\"Fliege mit rechter Hälfte schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29D3\",\"mappings\":{\"default\":{\"default\":\"Schwarze Fliege\"}}},{\"category\":\"Sm\",\"key\":\"29D4\",\"mappings\":{\"default\":{\"default\":\"Zeiten mit linker Hälfte schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29D5\",\"mappings\":{\"default\":{\"default\":\"Mal mit rechter Hälfte Schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29D6\",\"mappings\":{\"default\":{\"default\":\"Weiße Sanduhr\"}}},{\"category\":\"Sm\",\"key\":\"29D7\",\"mappings\":{\"default\":{\"default\":\"Schwarze Sanduhr\"}}},{\"category\":\"Sm\",\"key\":\"29DC\",\"mappings\":{\"default\":{\"default\":\"Unvollständige Unendlichkeit\"}}},{\"category\":\"Sm\",\"key\":\"29DD\",\"mappings\":{\"default\":{\"default\":\"Krawatte über Unendlichkeit\"}}},{\"category\":\"Sm\",\"key\":\"29DE\",\"mappings\":{\"default\":{\"default\":\"Unendlichkeit mit vertikaler Leiste negiert\"}}},{\"category\":\"Sm\",\"key\":\"29DF\",\"mappings\":{\"default\":{\"default\":\"Doppelter Multimap\"}}},{\"category\":\"Sm\",\"key\":\"29E0\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit konturierter Kontur\"}}},{\"category\":\"Sm\",\"key\":\"29E1\",\"mappings\":{\"default\":{\"default\":\"Erhöht als\"}}},{\"category\":\"Sm\",\"key\":\"29E2\",\"mappings\":{\"default\":{\"default\":\"Produkt mischen\"}}},{\"category\":\"Sm\",\"key\":\"29E3\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen und geneigte Parallele\"}}},{\"category\":\"Sm\",\"key\":\"29E4\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen und schräge Parallele zu Tilde oben\"}}},{\"category\":\"Sm\",\"key\":\"29E5\",\"mappings\":{\"default\":{\"default\":\"Identisch und schräg parallel\"}}},{\"category\":\"Sm\",\"key\":\"29E6\",\"mappings\":{\"default\":{\"default\":\"Gleich Stark\"}}},{\"category\":\"Sm\",\"key\":\"29E7\",\"mappings\":{\"default\":{\"default\":\"Thermodynamisch\"}}},{\"category\":\"Sm\",\"key\":\"29E8\",\"mappings\":{\"default\":{\"default\":\"Abwärtszeigendes Dreieck mit linker Hälfte schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29E9\",\"mappings\":{\"default\":{\"default\":\"Abwärtsdreieck mit rechter Hälfte schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29EB\",\"mappings\":{\"default\":{\"default\":\"Schwarze Raute\"}}},{\"category\":\"Sm\",\"key\":\"29EE\",\"mappings\":{\"default\":{\"default\":\"Fehlergesperrtes weißes Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"29EF\",\"mappings\":{\"default\":{\"default\":\"Fehlerfreies schwarzes Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"29F0\",\"mappings\":{\"default\":{\"default\":\"Fehlergesperrter weißer Diamant\"}}},{\"category\":\"Sm\",\"key\":\"29F1\",\"mappings\":{\"default\":{\"default\":\"Error-Barred Black Diamond\"}}},{\"category\":\"Sm\",\"key\":\"29F2\",\"mappings\":{\"default\":{\"default\":\"Fehlergesperrter weißer Kreis\"}}},{\"category\":\"Sm\",\"key\":\"29F3\",\"mappings\":{\"default\":{\"default\":\"Fehlergesperrter schwarzer Kreis\"}}},{\"key\":\"29F4\",\"mappings\":{\"default\":{\"default\":\"rule delayed\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29F5\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Schrägstrich Operator\"}}},{\"category\":\"Sm\",\"key\":\"29F6\",\"mappings\":{\"default\":{\"default\":\"Schrägstrich mit Overbar\"}}},{\"category\":\"Sm\",\"key\":\"29F7\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Schrägstrich mit horizontalem Hub\"}}},{\"category\":\"Sm\",\"key\":\"29F8\",\"mappings\":{\"default\":{\"default\":\"Großer Schrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"29F9\",\"mappings\":{\"default\":{\"default\":\"Großer umgekehrter Schrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"29FA\",\"mappings\":{\"default\":{\"default\":\"Doppel plus\"}}},{\"category\":\"Sm\",\"key\":\"29FB\",\"mappings\":{\"default\":{\"default\":\"Triple Plus\"}}},{\"category\":\"Sm\",\"key\":\"29FE\",\"mappings\":{\"default\":{\"default\":\"Winzig\"}}},{\"category\":\"Sm\",\"key\":\"29FF\",\"mappings\":{\"default\":{\"default\":\"Miny\"}}},{\"category\":\"Sm\",\"key\":\"2A00\",\"mappings\":{\"default\":{\"default\":\"N-Ary Circled-Punkt-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A01\",\"mappings\":{\"default\":{\"default\":\"N-Ary Circled Plus Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A02\",\"mappings\":{\"default\":{\"default\":\"N-Ary Circled-Times-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A03\",\"mappings\":{\"default\":{\"default\":\"N-Ary Union-Operator mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2A04\",\"mappings\":{\"default\":{\"default\":\"N-Ary Union-Operator mit Plus\"}}},{\"category\":\"Sm\",\"key\":\"2A05\",\"mappings\":{\"default\":{\"default\":\"N-Ary Square-Kreuzungsoperator\"}}},{\"category\":\"Sm\",\"key\":\"2A06\",\"mappings\":{\"default\":{\"default\":\"N-Ary Square Union-Betreiber\"}}},{\"category\":\"Sm\",\"key\":\"2A07\",\"mappings\":{\"default\":{\"default\":\"Zwei logische und Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A08\",\"mappings\":{\"default\":{\"default\":\"Zwei logisch oder Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A09\",\"mappings\":{\"default\":{\"default\":\"N-Ary Times-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A0A\",\"mappings\":{\"default\":{\"default\":\"Modulo Zwei Summe\"}}},{\"category\":\"Sm\",\"key\":\"2A0B\",\"mappings\":{\"default\":{\"default\":\"Summation mit Integral\"}}},{\"category\":\"Sm\",\"key\":\"2A0C\",\"mappings\":{\"default\":{\"default\":\"Vierfach-Integral-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A0D\",\"mappings\":{\"default\":{\"default\":\"Finite Part Integral\"}}},{\"category\":\"Sm\",\"key\":\"2A0E\",\"mappings\":{\"default\":{\"default\":\"Integral mit Doppelhub\"}}},{\"category\":\"Sm\",\"key\":\"2A0F\",\"mappings\":{\"default\":{\"default\":\"Integraler Durchschnitt mit Schrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"2A10\",\"mappings\":{\"default\":{\"default\":\"Zirkulationsfunktion\"}}},{\"category\":\"Sm\",\"key\":\"2A11\",\"mappings\":{\"default\":{\"default\":\"Integration gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"2A12\",\"mappings\":{\"default\":{\"default\":\"Linienintegration mit rechteckigem Pfad um die Pole\"}}},{\"category\":\"Sm\",\"key\":\"2A13\",\"mappings\":{\"default\":{\"default\":\"Linienintegration mit halbkreisförmigem Pfad um den Pol\"}}},{\"category\":\"Sm\",\"key\":\"2A14\",\"mappings\":{\"default\":{\"default\":\"Leitungsintegration ohne Pole\"}}},{\"category\":\"Sm\",\"key\":\"2A15\",\"mappings\":{\"default\":{\"default\":\"Integral um einen Punktoperator\"}}},{\"category\":\"Sm\",\"key\":\"2A16\",\"mappings\":{\"default\":{\"default\":\"Quaternion Integral Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A18\",\"mappings\":{\"default\":{\"default\":\"Integriert mit Times Sign\"}}},{\"category\":\"Sm\",\"key\":\"2A19\",\"mappings\":{\"default\":{\"default\":\"Integral mit der Kreuzung\"}}},{\"category\":\"Sm\",\"key\":\"2A1A\",\"mappings\":{\"default\":{\"default\":\"Integral mit Union\"}}},{\"category\":\"Sm\",\"key\":\"2A1B\",\"mappings\":{\"default\":{\"default\":\"Integral mit Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A1C\",\"mappings\":{\"default\":{\"default\":\"Integral mit Underbar\"}}},{\"category\":\"Sm\",\"key\":\"2A1D\",\"mappings\":{\"default\":{\"default\":\"Beitreten\"}}},{\"category\":\"Sm\",\"key\":\"2A1E\",\"mappings\":{\"default\":{\"default\":\"Großes linkes Dreieckbediener\"}}},{\"category\":\"Sm\",\"key\":\"2A1F\",\"mappings\":{\"default\":{\"default\":\"Z-Notationsschema-Zusammensetzung\"}}},{\"category\":\"Sm\",\"key\":\"2A20\",\"mappings\":{\"default\":{\"default\":\"Z-Notationsschema-Piping\"}}},{\"category\":\"Sm\",\"key\":\"2A21\",\"mappings\":{\"default\":{\"default\":\"Z-Notationsschema-Projektion\"}}},{\"category\":\"Sm\",\"key\":\"2A22\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit kleinem Kreis oben\"}}},{\"category\":\"Sm\",\"key\":\"2A23\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit Zirkumflex-Akzent oben\"}}},{\"category\":\"Sm\",\"key\":\"2A24\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit Tilde oben\"}}},{\"category\":\"Sm\",\"key\":\"2A25\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit Punkt unten\"}}},{\"category\":\"Sm\",\"key\":\"2A26\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit Tilde unter\"}}},{\"category\":\"Sm\",\"key\":\"2A27\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit Index Zwei\"}}},{\"category\":\"Sm\",\"key\":\"2A28\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit schwarzem Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"2A29\",\"mappings\":{\"default\":{\"default\":\"Minuszeichen mit Komma oben\"}}},{\"category\":\"Sm\",\"key\":\"2A2A\",\"mappings\":{\"default\":{\"default\":\"Minuszeichen mit Punkt unten\"}}},{\"category\":\"Sm\",\"key\":\"2A2B\",\"mappings\":{\"default\":{\"default\":\"Minuszeichen mit fallenden Punkten\"}}},{\"category\":\"Sm\",\"key\":\"2A2C\",\"mappings\":{\"default\":{\"default\":\"Minuszeichen mit steigenden Punkten\"}}},{\"category\":\"Sm\",\"key\":\"2A2D\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen Im linken Halbkreis\"}}},{\"category\":\"Sm\",\"key\":\"2A2E\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen Im rechten Halbkreis\"}}},{\"category\":\"Sm\",\"key\":\"2A2F\",\"mappings\":{\"default\":{\"default\":\"Vektor- oder Kreuzprodukt\"}}},{\"category\":\"Sm\",\"key\":\"2A30\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A31\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen mit Unterleiste\"}}},{\"category\":\"Sm\",\"key\":\"2A32\",\"mappings\":{\"default\":{\"default\":\"Semidirektprodukt mit geschlossenem Boden\"}}},{\"key\":\"2A33\",\"mappings\":{\"default\":{\"default\":\"smash product\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A34\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen im linken Halbkreis\"}}},{\"category\":\"Sm\",\"key\":\"2A35\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen im rechten Halbkreis\"}}},{\"category\":\"Sm\",\"key\":\"2A36\",\"mappings\":{\"default\":{\"default\":\"eingekreistes Multiplikationszeichen mit Circumflex-Akzent\"}}},{\"category\":\"Sm\",\"key\":\"2A37\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen im doppelten Kreis\"}}},{\"key\":\"2A38\",\"mappings\":{\"default\":{\"default\":\"circled division sign\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A39\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen im Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"2A3A\",\"mappings\":{\"default\":{\"default\":\"Minuszeichen im Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"2A3B\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen im Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"2A3C\",\"mappings\":{\"default\":{\"default\":\"Innenprodukt\"}}},{\"category\":\"Sm\",\"key\":\"2A3D\",\"mappings\":{\"default\":{\"default\":\"Produkt für den rechten Innenraum\"}}},{\"category\":\"Sm\",\"key\":\"2A3E\",\"mappings\":{\"default\":{\"default\":\"Z-Notation relationaler Aufbau\"}}},{\"category\":\"Sm\",\"key\":\"2A3F\",\"mappings\":{\"default\":{\"default\":\"Verschmelzung oder Koprodukt\"}}},{\"category\":\"Sm\",\"key\":\"2A40\",\"mappings\":{\"default\":{\"default\":\"Schnittpunkt mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2A41\",\"mappings\":{\"default\":{\"default\":\"Union mit Minuszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2A42\",\"mappings\":{\"default\":{\"default\":\"Union mit Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A43\",\"mappings\":{\"default\":{\"default\":\"Kreuzung mit Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A44\",\"mappings\":{\"default\":{\"default\":\"Überschneidung mit logischem und\"}}},{\"category\":\"Sm\",\"key\":\"2A45\",\"mappings\":{\"default\":{\"default\":\"Vereinigung mit logischem Or\"}}},{\"category\":\"Sm\",\"key\":\"2A46\",\"mappings\":{\"default\":{\"default\":\"Vereinigung über dem Schnittpunkt\"}}},{\"category\":\"Sm\",\"key\":\"2A47\",\"mappings\":{\"default\":{\"default\":\"Schnittpunkt über Union\"}}},{\"category\":\"Sm\",\"key\":\"2A48\",\"mappings\":{\"default\":{\"default\":\"Vereinigung über Stab über Kreuzung\"}}},{\"category\":\"Sm\",\"key\":\"2A49\",\"mappings\":{\"default\":{\"default\":\"Schnittpunkt oberhalb der Stange oberhalb der Union\"}}},{\"category\":\"Sm\",\"key\":\"2A4A\",\"mappings\":{\"default\":{\"default\":\"Union daneben und mit Union verbunden\"}}},{\"category\":\"Sm\",\"key\":\"2A4B\",\"mappings\":{\"default\":{\"default\":\"Kreuzung neben und mit Kreuzung verbunden\"}}},{\"category\":\"Sm\",\"key\":\"2A4C\",\"mappings\":{\"default\":{\"default\":\"Geschlossene Vereinigung mit Serifen\"}}},{\"category\":\"Sm\",\"key\":\"2A4D\",\"mappings\":{\"default\":{\"default\":\"Geschlossener Schnittpunkt mit Serifen\"}}},{\"category\":\"Sm\",\"key\":\"2A4E\",\"mappings\":{\"default\":{\"default\":\"Doppelter Quadratschnitt\"}}},{\"category\":\"Sm\",\"key\":\"2A4F\",\"mappings\":{\"default\":{\"default\":\"Double Square Union\"}}},{\"category\":\"Sm\",\"key\":\"2A50\",\"mappings\":{\"default\":{\"default\":\"Closed Union mit Serifen und Smash-Produkten\"}}},{\"category\":\"Sm\",\"key\":\"2A51\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A52\",\"mappings\":{\"default\":{\"default\":\"Logisch oder mit Punkt oben\"}}},{\"key\":\"2A53\",\"mappings\":{\"default\":{\"default\":\"double logical and\"}},\"category\":\"Sm\"},{\"key\":\"2A54\",\"mappings\":{\"default\":{\"default\":\"double logical or\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A55\",\"mappings\":{\"default\":{\"default\":\"Zwei durchschneiden logisch und\"}}},{\"category\":\"Sm\",\"key\":\"2A56\",\"mappings\":{\"default\":{\"default\":\"Zwei sich überschneidende logische Oder\"}}},{\"category\":\"Sm\",\"key\":\"2A57\",\"mappings\":{\"default\":{\"default\":\"Abfallend groß oder\"}}},{\"category\":\"Sm\",\"key\":\"2A58\",\"mappings\":{\"default\":{\"default\":\"Abfallend groß und\"}}},{\"category\":\"Sm\",\"key\":\"2A59\",\"mappings\":{\"default\":{\"default\":\"Logisch oder Überlappend Logisch Und\"}}},{\"category\":\"Sm\",\"key\":\"2A5A\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Middle Stem\"}}},{\"category\":\"Sm\",\"key\":\"2A5B\",\"mappings\":{\"default\":{\"default\":\"Logisch oder mit Middle Stem\"}}},{\"category\":\"Sm\",\"key\":\"2A5C\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Horizontalstrich\"}}},{\"category\":\"Sm\",\"key\":\"2A5D\",\"mappings\":{\"default\":{\"default\":\"Logisch oder mit Horizontalstrich\"}}},{\"category\":\"Sm\",\"key\":\"2A5E\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Double Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A5F\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Underbar\"}}},{\"category\":\"Sm\",\"key\":\"2A60\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Double Underbar\"}}},{\"category\":\"Sm\",\"key\":\"2A61\",\"mappings\":{\"default\":{\"default\":\"kleines Vee mit Underbar\"}}},{\"category\":\"Sm\",\"key\":\"2A62\",\"mappings\":{\"default\":{\"default\":\"Logisch oder mit Double Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A63\",\"mappings\":{\"default\":{\"default\":\"Logisch oder mit doppelter Unterleiste\"}}},{\"category\":\"Sm\",\"key\":\"2A64\",\"mappings\":{\"default\":{\"default\":\"Z-Notation Domain Antirestriction\"}}},{\"category\":\"Sm\",\"key\":\"2A65\",\"mappings\":{\"default\":{\"default\":\"Z Notationsbereich Antirestriction\"}}},{\"category\":\"Sm\",\"key\":\"2A66\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen mit Punkt unten\"}}},{\"category\":\"Sm\",\"key\":\"2A67\",\"mappings\":{\"default\":{\"default\":\"Identisch mit dem obigen Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2A68\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Horizontalbalken mit doppeltem vertikalem Hub\"}}},{\"category\":\"Sm\",\"key\":\"2A69\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Horizontalbalken mit dreifachem vertikalem Hub\"}}},{\"category\":\"Sm\",\"key\":\"2A6A\",\"mappings\":{\"default\":{\"default\":\"Tilde-Operator mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A6B\",\"mappings\":{\"default\":{\"default\":\"Tilde-Operator mit steigenden Punkten\"}}},{\"category\":\"Sm\",\"key\":\"2A6C\",\"mappings\":{\"default\":{\"default\":\"Ähnlich Minus Ähnlich\"}}},{\"category\":\"Sm\",\"key\":\"2A6D\",\"mappings\":{\"default\":{\"default\":\"Kongruent mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A6E\",\"mappings\":{\"default\":{\"default\":\"Entspricht Asterisk\"}}},{\"category\":\"Sm\",\"key\":\"2A6F\",\"mappings\":{\"default\":{\"default\":\"Fast gleichwertig mit dem Circumflex Accent\"}}},{\"category\":\"Sm\",\"key\":\"2A70\",\"mappings\":{\"default\":{\"default\":\"Ungefähr gleich oder gleich zu\"}}},{\"category\":\"Sm\",\"key\":\"2A71\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen über Pluszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2A72\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen über Gleichheitszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2A73\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen über Tilde-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A74\",\"mappings\":{\"default\":{\"default\":\"Doppelpunkt gleich\"}}},{\"key\":\"2A75\",\"mappings\":{\"default\":{\"default\":\"double equal\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A76\",\"mappings\":{\"default\":{\"default\":\"Drei aufeinander folgende Gleichheitszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2A77\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen mit zwei Punkten oben und zwei Punkten unten\"}}},{\"category\":\"Sm\",\"key\":\"2A78\",\"mappings\":{\"default\":{\"default\":\"Gleichwertig mit vier Punkten oben\"}}},{\"category\":\"Sm\",\"key\":\"2A79\",\"mappings\":{\"default\":{\"default\":\"Weniger als mit Circle Inside\"}}},{\"category\":\"Sm\",\"key\":\"2A7A\",\"mappings\":{\"default\":{\"default\":\"Größer als mit Kreis nach innen\"}}},{\"category\":\"Sm\",\"key\":\"2A7B\",\"mappings\":{\"default\":{\"default\":\"Weniger als mit Fragezeichen oben\"}}},{\"category\":\"Sm\",\"key\":\"2A7C\",\"mappings\":{\"default\":{\"default\":\"Größer als mit Fragezeichen oben\"}}},{\"category\":\"Sm\",\"key\":\"2A7D\",\"mappings\":{\"default\":{\"default\":\"Weniger als oder schräg gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A7E\",\"mappings\":{\"default\":{\"default\":\"Größer als oder schräg gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A7F\",\"mappings\":{\"default\":{\"default\":\"Weniger als oder schräg gleich mit Punkt nach innen\"}}},{\"category\":\"Sm\",\"key\":\"2A80\",\"mappings\":{\"default\":{\"default\":\"Größer als oder schräg gleich mit Punkt nach innen\"}}},{\"category\":\"Sm\",\"key\":\"2A81\",\"mappings\":{\"default\":{\"default\":\"Weniger als oder schräg gleich mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A82\",\"mappings\":{\"default\":{\"default\":\"Größer als oder schräg gleich mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A83\",\"mappings\":{\"default\":{\"default\":\"Weniger als oder schräg gleich mit Punkt oben rechts\"}}},{\"category\":\"Sm\",\"key\":\"2A84\",\"mappings\":{\"default\":{\"default\":\"Größer als oder schräg gleich mit Punkt oben links\"}}},{\"category\":\"Sm\",\"key\":\"2A85\",\"mappings\":{\"default\":{\"default\":\"Weniger als oder ungefähr\"}}},{\"category\":\"Sm\",\"key\":\"2A86\",\"mappings\":{\"default\":{\"default\":\"Größer als oder ungefähr\"}}},{\"category\":\"Sm\",\"key\":\"2A87\",\"mappings\":{\"default\":{\"default\":\"Kleiner als aber nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A88\",\"mappings\":{\"default\":{\"default\":\"Größer als aber nicht gleich\"}}},{\"key\":\"2A89\",\"mappings\":{\"default\":{\"default\":\"Kleiner als aber nicht ungefähr gleich\"}},\"category\":\"Sm\"},{\"key\":\"2A8A\",\"mappings\":{\"default\":{\"default\":\"Größer als aber nicht ungefähr gleich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A8B\",\"mappings\":{\"default\":{\"default\":\"Weniger als aber größer als oben\"}}},{\"category\":\"Sm\",\"key\":\"2A8C\",\"mappings\":{\"default\":{\"default\":\"Größer als aber weniger als unten und größer als oben\"}}},{\"category\":\"Sm\",\"key\":\"2A8D\",\"mappings\":{\"default\":{\"default\":\"Weniger als oben ähnlich oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A8E\",\"mappings\":{\"default\":{\"default\":\"Größer als oben ähnlich oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A8F\",\"mappings\":{\"default\":{\"default\":\"Weniger als oben ähnlich oben größer als\"}}},{\"category\":\"Sm\",\"key\":\"2A90\",\"mappings\":{\"default\":{\"default\":\"Größer als oben Ähnlich oben\"}}},{\"key\":\"2A91\",\"mappings\":{\"default\":{\"default\":\"less than greater than or equal to\"}},\"category\":\"Sm\"},{\"key\":\"2A92\",\"mappings\":{\"default\":{\"default\":\"greater than less than or equal to\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A93\",\"mappings\":{\"default\":{\"default\":\"Weniger als oben schräg gleich oben Größer als oben schräg gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A94\",\"mappings\":{\"default\":{\"default\":\"Größer als oben schräg gleich oben kleiner als oben schräg gleich groß\"}}},{\"category\":\"Sm\",\"key\":\"2A95\",\"mappings\":{\"default\":{\"default\":\"Schräg gleich oder kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"2A96\",\"mappings\":{\"default\":{\"default\":\"Schräg gleich oder größer als\"}}},{\"category\":\"Sm\",\"key\":\"2A97\",\"mappings\":{\"default\":{\"default\":\"Schräg gleich oder kleiner als mit innenliegendem Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2A98\",\"mappings\":{\"default\":{\"default\":\"Schräg gleich oder größer als mit Punkt nach innen\"}}},{\"key\":\"2A99\",\"mappings\":{\"default\":{\"default\":\"Gleich oder kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"2A9A\",\"mappings\":{\"default\":{\"default\":\"Gleich oder größer als\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A9B\",\"mappings\":{\"default\":{\"default\":\"Doppelte Linie schräg gleich oder kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"2A9C\",\"mappings\":{\"default\":{\"default\":\"Doppelte Linie schräg gleich oder größer als\"}}},{\"key\":\"2A9D\",\"mappings\":{\"default\":{\"default\":\"Äquivalent oder kleiner als\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A9E\",\"mappings\":{\"default\":{\"default\":\"Ähnlich oder größer als\"}}},{\"category\":\"Sm\",\"key\":\"2A9F\",\"mappings\":{\"default\":{\"default\":\"Ähnlich oben Weniger als Gleiches Gleichheitszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2AA0\",\"mappings\":{\"default\":{\"default\":\"Ähnlich oben größer als oben Gleichheitszeichen\"}}},{\"key\":\"2AA1\",\"mappings\":{\"default\":{\"default\":\"Verschachteltes kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"2AA2\",\"mappings\":{\"default\":{\"default\":\"Verschachteltes größer als\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AA3\",\"mappings\":{\"default\":{\"default\":\"Doppelt verschachtelt, weniger als mit Unterleiste\"}}},{\"key\":\"2AA4\",\"mappings\":{\"default\":{\"default\":\"less than greater than overlay\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AA5\",\"mappings\":{\"default\":{\"default\":\"Größer als weniger als\"}}},{\"category\":\"Sm\",\"key\":\"2AA6\",\"mappings\":{\"default\":{\"default\":\"Weniger als durch Kurve geschlossen\"}}},{\"category\":\"Sm\",\"key\":\"2AA7\",\"mappings\":{\"default\":{\"default\":\"Größer als durch Kurve geschlossen\"}}},{\"category\":\"Sm\",\"key\":\"2AA8\",\"mappings\":{\"default\":{\"default\":\"Weniger als dann geschlossen durch Kurve oberhalb der gleichen Neigung\"}}},{\"category\":\"Sm\",\"key\":\"2AA9\",\"mappings\":{\"default\":{\"default\":\"Größer als geschlossen durch Kurve oberhalb der gleichen Neigung\"}}},{\"category\":\"Sm\",\"key\":\"2AAA\",\"mappings\":{\"default\":{\"default\":\"kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"2AAB\",\"mappings\":{\"default\":{\"default\":\"Größer als\"}}},{\"category\":\"Sm\",\"key\":\"2AAC\",\"mappings\":{\"default\":{\"default\":\"kleiner als oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AAD\",\"mappings\":{\"default\":{\"default\":\"Größer als oder gleich\"}}},{\"key\":\"2AAE\",\"mappings\":{\"default\":{\"default\":\"difference between (variant\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AAF\",\"mappings\":{\"default\":{\"default\":\"Stellt über dem einzeiligen Gleichheitszeichen ein\"}}},{\"category\":\"Sm\",\"key\":\"2AB0\",\"mappings\":{\"default\":{\"default\":\"Erfolg über dem einzeiligen Gleichheitszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2AB1\",\"mappings\":{\"default\":{\"default\":\"Vorangehende Single-Line ist nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AB2\",\"mappings\":{\"default\":{\"default\":\"Erfolg über Single-Line nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AB3\",\"mappings\":{\"default\":{\"default\":\"Vorangegangenes Gleichheitszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2AB4\",\"mappings\":{\"default\":{\"default\":\"Erfolgreich über Gleichheitszeichen\"}}},{\"key\":\"2AB5\",\"mappings\":{\"default\":{\"default\":\"precedes but not equal to\"}},\"category\":\"Sm\"},{\"key\":\"2AB6\",\"mappings\":{\"default\":{\"default\":\"succeeds but not equal to\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AB7\",\"mappings\":{\"default\":{\"default\":\"Vorangegangenes fast gleich zu\"}}},{\"category\":\"Sm\",\"key\":\"2AB8\",\"mappings\":{\"default\":{\"default\":\"Erreicht über fast gleich viel\"}}},{\"category\":\"Sm\",\"key\":\"2AB9\",\"mappings\":{\"default\":{\"default\":\"Vorangegangene nicht annähernd gleich\"}}},{\"category\":\"Sm\",\"key\":\"2ABA\",\"mappings\":{\"default\":{\"default\":\"Erreicht oben nicht annähernd gleich\"}}},{\"category\":\"Sm\",\"key\":\"2ABB\",\"mappings\":{\"default\":{\"default\":\"Doppelter Vorgänger\"}}},{\"category\":\"Sm\",\"key\":\"2ABC\",\"mappings\":{\"default\":{\"default\":\"Doppelter Erfolg\"}}},{\"category\":\"Sm\",\"key\":\"2ABD\",\"mappings\":{\"default\":{\"default\":\"Teilmenge mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2ABE\",\"mappings\":{\"default\":{\"default\":\"Superset mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2ABF\",\"mappings\":{\"default\":{\"default\":\"Teilmenge mit Pluszeichen unten\"}}},{\"category\":\"Sm\",\"key\":\"2AC0\",\"mappings\":{\"default\":{\"default\":\"Superset mit Pluszeichen unten\"}}},{\"category\":\"Sm\",\"key\":\"2AC1\",\"mappings\":{\"default\":{\"default\":\"Teilmenge mit Multiplikationszeichen unten\"}}},{\"category\":\"Sm\",\"key\":\"2AC2\",\"mappings\":{\"default\":{\"default\":\"Superset mit Multiplikationszeichen unten\"}}},{\"category\":\"Sm\",\"key\":\"2AC3\",\"mappings\":{\"default\":{\"default\":\"Teilmenge oder gleich mit dem obigen Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2AC4\",\"mappings\":{\"default\":{\"default\":\"Superset von oder gleich mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2AC5\",\"mappings\":{\"default\":{\"default\":\"Teilmenge des obigen Gleichheitszeichens\"}}},{\"category\":\"Sm\",\"key\":\"2AC6\",\"mappings\":{\"default\":{\"default\":\"Superset des obigen Gleichheitszeichens\"}}},{\"key\":\"2AC7\",\"mappings\":{\"default\":{\"default\":\"approximate subset of\"}},\"category\":\"Sm\"},{\"key\":\"2AC8\",\"mappings\":{\"default\":{\"default\":\"approximate superset of\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AC9\",\"mappings\":{\"default\":{\"default\":\"Teilmenge von oben fast gleich\"}}},{\"category\":\"Sm\",\"key\":\"2ACA\",\"mappings\":{\"default\":{\"default\":\"Superset von oben fast gleichwertig\"}}},{\"category\":\"Sm\",\"key\":\"2ACB\",\"mappings\":{\"default\":{\"default\":\"Teilmenge von oben nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"2ACC\",\"mappings\":{\"default\":{\"default\":\"Superset von oben nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"2ACD\",\"mappings\":{\"default\":{\"default\":\"Platz links Feldbetreiber geöffnet\"}}},{\"category\":\"Sm\",\"key\":\"2ACE\",\"mappings\":{\"default\":{\"default\":\"Rechteckige Box mit offener Box\"}}},{\"category\":\"Sm\",\"key\":\"2ACF\",\"mappings\":{\"default\":{\"default\":\"Geschlossener Teilsatz\"}}},{\"category\":\"Sm\",\"key\":\"2AD0\",\"mappings\":{\"default\":{\"default\":\"Superset geschlossen\"}}},{\"category\":\"Sm\",\"key\":\"2AD1\",\"mappings\":{\"default\":{\"default\":\"Geschlossene Untermenge oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AD2\",\"mappings\":{\"default\":{\"default\":\"Superset geschlossen oder gleich\"}}},{\"key\":\"2AD3\",\"mappings\":{\"default\":{\"default\":\"subset over superset\"}},\"category\":\"Sm\"},{\"key\":\"2AD4\",\"mappings\":{\"default\":{\"default\":\"superset over subset\"}},\"category\":\"Sm\"},{\"key\":\"2AD5\",\"mappings\":{\"default\":{\"default\":\"subset over subset\"}},\"category\":\"Sm\"},{\"key\":\"2AD6\",\"mappings\":{\"default\":{\"default\":\"superset over superset\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AD7\",\"mappings\":{\"default\":{\"default\":\"Superset neben dem Subset\"}}},{\"category\":\"Sm\",\"key\":\"2AD8\",\"mappings\":{\"default\":{\"default\":\"Superset Neben und Joined von Dash mit Subset\"}}},{\"category\":\"Sm\",\"key\":\"2AD9\",\"mappings\":{\"default\":{\"default\":\"Element der Öffnung nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2ADA\",\"mappings\":{\"default\":{\"default\":\"Heugabel mit T-Stück\"}}},{\"category\":\"Sm\",\"key\":\"2ADB\",\"mappings\":{\"default\":{\"default\":\"Transversalschnitt\"}}},{\"category\":\"Sm\",\"key\":\"2ADC\",\"mappings\":{\"default\":{\"default\":\"Gabelung\"}}},{\"category\":\"Sm\",\"key\":\"2ADD\",\"mappings\":{\"default\":{\"default\":\"Nicht Gabeln\"}}},{\"category\":\"Sm\",\"key\":\"2ADE\",\"mappings\":{\"default\":{\"default\":\"Kurzer Linker Tack\"}}},{\"category\":\"Sm\",\"key\":\"2ADF\",\"mappings\":{\"default\":{\"default\":\"Kurzer Down Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AE0\",\"mappings\":{\"default\":{\"default\":\"Short Up Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AE1\",\"mappings\":{\"default\":{\"default\":\"Rechtwinklig zu S\"}}},{\"category\":\"Sm\",\"key\":\"2AE2\",\"mappings\":{\"default\":{\"default\":\"Vertikales Dreifach-Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"2AE3\",\"mappings\":{\"default\":{\"default\":\"Doppelter vertikaler Balken linkes Drehkreuz\"}}},{\"key\":\"2AE4\",\"mappings\":{\"default\":{\"default\":\"double left turnstile vertical bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AE5\",\"mappings\":{\"default\":{\"default\":\"Doppelter vertikaler Balken Doppelter linker Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"2AE6\",\"mappings\":{\"default\":{\"default\":\"Long Dash von Left Member von Double Vertical\"}}},{\"category\":\"Sm\",\"key\":\"2AE7\",\"mappings\":{\"default\":{\"default\":\"Short Down Tack mit Overbar\"}}},{\"key\":\"2AE8\",\"mappings\":{\"default\":{\"default\":\"perpendicular over bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AE9\",\"mappings\":{\"default\":{\"default\":\"Short Up Tack Über Short Down Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AEA\",\"mappings\":{\"default\":{\"default\":\"Double Down Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AEB\",\"mappings\":{\"default\":{\"default\":\"Verdoppeln Sie Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AEC\",\"mappings\":{\"default\":{\"default\":\"Doppelstrich nicht unterschreiben\"}}},{\"category\":\"Sm\",\"key\":\"2AED\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Doppelstrich nicht unterschrieben\"}}},{\"category\":\"Sm\",\"key\":\"2AEE\",\"mappings\":{\"default\":{\"default\":\"Teilt sich nicht mit umgekehrten Negationsschrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"2AEF\",\"mappings\":{\"default\":{\"default\":\"Vertikale Linie mit Kreis oben\"}}},{\"category\":\"Sm\",\"key\":\"2AF0\",\"mappings\":{\"default\":{\"default\":\"Vertikale Linie mit Kreis unten\"}}},{\"category\":\"Sm\",\"key\":\"2AF1\",\"mappings\":{\"default\":{\"default\":\"Down Tack mit Kreis unten\"}}},{\"category\":\"Sm\",\"key\":\"2AF2\",\"mappings\":{\"default\":{\"default\":\"Parallel zum horizontalen Anschlag\"}}},{\"category\":\"Sm\",\"key\":\"2AF3\",\"mappings\":{\"default\":{\"default\":\"Parallel zu Tilde Operator\"}}},{\"category\":\"Sm\",\"key\":\"2AF4\",\"mappings\":{\"default\":{\"default\":\"Dreifache vertikale Balken-Binärbeziehung\"}}},{\"category\":\"Sm\",\"key\":\"2AF5\",\"mappings\":{\"default\":{\"default\":\"Dreifacher vertikaler Strich mit horizontalem Hub\"}}},{\"category\":\"Sm\",\"key\":\"2AF6\",\"mappings\":{\"default\":{\"default\":\"Triple Colon Operator\"}}},{\"category\":\"Sm\",\"key\":\"2AF7\",\"mappings\":{\"default\":{\"default\":\"Dreifach verschachtelt weniger als\"}}},{\"category\":\"Sm\",\"key\":\"2AF8\",\"mappings\":{\"default\":{\"default\":\"Dreifach verschachteltes Größeres als\"}}},{\"category\":\"Sm\",\"key\":\"2AF9\",\"mappings\":{\"default\":{\"default\":\"Doppellinie schräg, weniger als oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AFA\",\"mappings\":{\"default\":{\"default\":\"Doppelte Linie schräg größer als oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AFB\",\"mappings\":{\"default\":{\"default\":\"Dreifache Schrägstrich-Binärbeziehung\"}}},{\"category\":\"Sm\",\"key\":\"2AFC\",\"mappings\":{\"default\":{\"default\":\"Großer dreifacher vertikaler Barbediener\"}}},{\"category\":\"Sm\",\"key\":\"2AFD\",\"mappings\":{\"default\":{\"default\":\"Doppelter Schrägstrich-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2AFE\",\"mappings\":{\"default\":{\"default\":\"Weiße vertikale Leiste\"}}},{\"category\":\"Sm\",\"key\":\"2AFF\",\"mappings\":{\"default\":{\"default\":\"N-Ary White Vertical Bar\"}}},{\"category\":\"Pd\",\"key\":\"301C\",\"mappings\":{\"default\":{\"default\":\"Wave Dash\"}}},{\"category\":\"Po\",\"key\":\"FE10\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikales Komma\"}}},{\"category\":\"Po\",\"key\":\"FE13\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikalen Doppelpunkt\"}}},{\"category\":\"Po\",\"key\":\"FE14\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikales Semikolon\"}}},{\"category\":\"Po\",\"key\":\"FE15\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikales Ausrufezeichen\"}}},{\"category\":\"Po\",\"key\":\"FE16\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikales Fragezeichen\"}}},{\"category\":\"Po\",\"key\":\"FE19\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale horizontale Ellipsen\"}}},{\"category\":\"Po\",\"key\":\"FE30\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikalen Zwei-Punkt-Leader\"}}},{\"category\":\"Pd\",\"key\":\"FE31\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für Vertical Em Dash\"}}},{\"category\":\"Pd\",\"key\":\"FE32\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für Vertical En Dash\"}}},{\"category\":\"Pc\",\"key\":\"FE33\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für Vertical Low Line\"}}},{\"category\":\"Pc\",\"key\":\"FE34\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für Vertical Wavy Low Line\"}}},{\"category\":\"Po\",\"key\":\"FE45\",\"mappings\":{\"default\":{\"default\":\"Sesampunkt\"}}},{\"category\":\"Po\",\"key\":\"FE46\",\"mappings\":{\"default\":{\"default\":\"Weißer Sesam Punkt\"}}},{\"category\":\"Po\",\"key\":\"FE49\",\"mappings\":{\"default\":{\"default\":\"Gestrichelte Überlänge\"}}},{\"category\":\"Po\",\"key\":\"FE4A\",\"mappings\":{\"default\":{\"default\":\"Centreline Overline\"}}},{\"category\":\"Po\",\"key\":\"FE4B\",\"mappings\":{\"default\":{\"default\":\"Wellenförmige Überlänge\"}}},{\"category\":\"Po\",\"key\":\"FE4C\",\"mappings\":{\"default\":{\"default\":\"Doppelte Wellenlinie\"}}},{\"category\":\"Pc\",\"key\":\"FE4D\",\"mappings\":{\"default\":{\"default\":\"Gestrichelte Low Line\"}}},{\"category\":\"Pc\",\"key\":\"FE4E\",\"mappings\":{\"default\":{\"default\":\"Mittellinie Low Line\"}}},{\"category\":\"Pc\",\"key\":\"FE4F\",\"mappings\":{\"default\":{\"default\":\"Wellenförmige Low Line\"}}},{\"category\":\"Po\",\"key\":\"FE50\",\"mappings\":{\"default\":{\"default\":\"kleines Komma\"}}},{\"category\":\"Po\",\"key\":\"FE52\",\"mappings\":{\"default\":{\"default\":\"kleiner Punkt\"}}},{\"category\":\"Po\",\"key\":\"FE54\",\"mappings\":{\"default\":{\"default\":\"kleines Semikolon\"}}},{\"category\":\"Po\",\"key\":\"FE55\",\"mappings\":{\"default\":{\"default\":\"kleiner Doppelpunkt\"}}},{\"category\":\"Po\",\"key\":\"FE56\",\"mappings\":{\"default\":{\"default\":\"kleines Fragezeichen\"}}},{\"category\":\"Po\",\"key\":\"FE57\",\"mappings\":{\"default\":{\"default\":\"kleines Ausrufezeichen\"}}},{\"category\":\"Pd\",\"key\":\"FE58\",\"mappings\":{\"default\":{\"default\":\"kleiner Em Dash\"}}},{\"category\":\"Po\",\"key\":\"FE5F\",\"mappings\":{\"default\":{\"default\":\"kleines Nummernzeichen\"}}},{\"category\":\"Po\",\"key\":\"FE60\",\"mappings\":{\"default\":{\"default\":\"kleines kaufmännisches\"}}},{\"category\":\"Po\",\"key\":\"FE61\",\"mappings\":{\"default\":{\"default\":\"kleines Sternchen\"}}},{\"category\":\"Sm\",\"key\":\"FE62\",\"mappings\":{\"default\":{\"default\":\"kleines Pluszeichen\"}}},{\"category\":\"Pd\",\"key\":\"FE63\",\"mappings\":{\"default\":{\"default\":\"kleiner Bindestrich-Minus\"}}},{\"category\":\"Sm\",\"key\":\"FE64\",\"mappings\":{\"default\":{\"default\":\"kleines weniger als Zeichen\"}}},{\"category\":\"Sm\",\"key\":\"FE65\",\"mappings\":{\"default\":{\"default\":\"kleines Größeres als Zeichen\"}}},{\"category\":\"Sm\",\"key\":\"FE66\",\"mappings\":{\"default\":{\"default\":\"kleines Gleichheitszeichen\"}}},{\"category\":\"Po\",\"key\":\"FE68\",\"mappings\":{\"default\":{\"default\":\"kleiner umgekehrter Schrägstrich\"}}},{\"category\":\"Sc\",\"key\":\"FE69\",\"mappings\":{\"default\":{\"default\":\"kleines Dollarzeichen\"}}},{\"category\":\"Po\",\"key\":\"FE6A\",\"mappings\":{\"default\":{\"default\":\"kleines Prozentzeichen\"}}},{\"category\":\"Po\",\"key\":\"FE6B\",\"mappings\":{\"default\":{\"default\":\"kleine kommerzielle bei\"}}},{\"category\":\"Po\",\"key\":\"FF01\",\"mappings\":{\"default\":{\"default\":\"vollbreites Ausrufezeichen\"}}},{\"category\":\"Po\",\"key\":\"FF02\",\"mappings\":{\"default\":{\"default\":\"vollbreites Anführungszeichen\"}}},{\"category\":\"Po\",\"key\":\"FF03\",\"mappings\":{\"default\":{\"default\":\"vollbreites Nummernzeichen\"}}},{\"category\":\"Sc\",\"key\":\"FF04\",\"mappings\":{\"default\":{\"default\":\"vollbreites Dollarzeichen\"}}},{\"category\":\"Po\",\"key\":\"FF05\",\"mappings\":{\"default\":{\"default\":\"vollbreites Prozentzeichen\"}}},{\"category\":\"Po\",\"key\":\"FF06\",\"mappings\":{\"default\":{\"default\":\"vollbreites kaufmännisches und\"}}},{\"category\":\"Po\",\"key\":\"FF07\",\"mappings\":{\"default\":{\"default\":\"vollbreites Apostroph\"}}},{\"category\":\"Po\",\"key\":\"FF0A\",\"mappings\":{\"default\":{\"default\":\"vollbreiter Stern\"}}},{\"category\":\"Sm\",\"key\":\"FF0B\",\"mappings\":{\"default\":{\"default\":\"vollbreites Plus\"}}},{\"category\":\"Po\",\"key\":\"FF0C\",\"mappings\":{\"default\":{\"default\":\"vollbreites Komma\"}}},{\"category\":\"Pd\",\"key\":\"FF0D\",\"mappings\":{\"default\":{\"default\":\"vollbreites Minus\"}}},{\"category\":\"Po\",\"key\":\"FF0E\",\"mappings\":{\"default\":{\"default\":\"vollbreiter Punkt\"}}},{\"category\":\"Po\",\"key\":\"FF0F\",\"mappings\":{\"default\":{\"default\":\"Schrägstrich mit voller Breite\"}}},{\"category\":\"Po\",\"key\":\"FF1A\",\"mappings\":{\"default\":{\"default\":\"vollbreiter Doppelpunkt\"}}},{\"category\":\"Po\",\"key\":\"FF1B\",\"mappings\":{\"default\":{\"default\":\"vollbreites Semikolon\"}}},{\"category\":\"Sm\",\"key\":\"FF1C\",\"mappings\":{\"default\":{\"default\":\"Weniger als das gesamte Zeichen\"}}},{\"category\":\"Sm\",\"key\":\"FF1D\",\"mappings\":{\"default\":{\"default\":\"vollbreites Gleichspannungszeichen\"}}},{\"category\":\"Sm\",\"key\":\"FF1E\",\"mappings\":{\"default\":{\"default\":\"Fullwidth Mehr als Zeichen\"}}},{\"category\":\"Po\",\"key\":\"FF1F\",\"mappings\":{\"default\":{\"default\":\"vollbreites Fragezeichen\"}}},{\"category\":\"Po\",\"key\":\"FF20\",\"mappings\":{\"default\":{\"default\":\"Fullwidth Commercial at\"}}},{\"category\":\"Po\",\"key\":\"FF3C\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Schrägstrich mit voller Breite\"}}},{\"category\":\"Sk\",\"key\":\"FF3E\",\"mappings\":{\"default\":{\"default\":\"Circumflex-Akzent mit voller Breite\"}}},{\"category\":\"Pc\",\"key\":\"FF3F\",\"mappings\":{\"default\":{\"default\":\"vollbreites Low Line\"}}},{\"category\":\"Sk\",\"key\":\"FF40\",\"mappings\":{\"default\":{\"default\":\"vollbreiter Gravis Akzent\"}}},{\"category\":\"Sm\",\"key\":\"FF5C\",\"mappings\":{\"default\":{\"default\":\"vollbreites Vertikale Linie\"}}},{\"category\":\"Sm\",\"key\":\"FF5E\",\"mappings\":{\"default\":{\"default\":\"vollbreite Tilde\"}}},{\"category\":\"Sc\",\"key\":\"FFE0\",\"mappings\":{\"default\":{\"default\":\"vollbreites Cent-Zeichen\"}}},{\"category\":\"Sc\",\"key\":\"FFE1\",\"mappings\":{\"default\":{\"default\":\"vollbreites Pfundzeichen\"}}},{\"category\":\"Sm\",\"key\":\"FFE2\",\"mappings\":{\"default\":{\"default\":\"vollbreite nicht Symbol\"}}},{\"category\":\"Sk\",\"key\":\"FFE3\",\"mappings\":{\"default\":{\"default\":\"vollbreiter Überstrich\",\"alternative\":\"vollbreites Makron\"}}},{\"category\":\"So\",\"key\":\"FFE4\",\"mappings\":{\"default\":{\"default\":\"vollbreite gestrichelte Linie\"}}},{\"category\":\"Sc\",\"key\":\"FFE5\",\"mappings\":{\"default\":{\"default\":\"vollbreites Yen-Zeichen\"}}},{\"category\":\"Sc\",\"key\":\"FFE6\",\"mappings\":{\"default\":{\"default\":\"vollbreites Won-Zeichen\"}}},{\"category\":\"So\",\"key\":\"FFE8\",\"mappings\":{\"default\":{\"default\":\"Halbbreite bildet leicht vertikal\"}}},{\"category\":\"So\",\"key\":\"FFED\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Quadrat mit halber Breite\"}}},{\"category\":\"So\",\"key\":\"FFEE\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit halber Breite\"}}}]\n,\n\"de/symbols/math_whitespace.js\": \n[{\"locale\":\"de\"},{\"category\":\"Zs\",\"key\":\"0020\",\"mappings\":{\"default\":{\"default\":\"Leerzeichen\"}}},{\"key\":\"00A0\",\"mappings\":{\"default\":{\"default\":\" \"}},\"category\":\"Zs\"},{\"key\":\"00AD\",\"mappings\":{\"default\":{\"default\":\"weicher Trennstrich\"}},\"category\":\"Cf\"},{\"category\":\"Zs\",\"key\":\"2000\",\"mappings\":{\"default\":{\"default\":\"En Quad\"}}},{\"category\":\"Zs\",\"key\":\"2001\",\"mappings\":{\"default\":{\"default\":\"Em Quad\"}}},{\"category\":\"Zs\",\"key\":\"2002\",\"mappings\":{\"default\":{\"default\":\"En Space\"}}},{\"key\":\"2003\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"category\":\"Zs\",\"key\":\"2004\",\"mappings\":{\"default\":{\"default\":\"Raum für drei Per-Em\"}}},{\"category\":\"Zs\",\"key\":\"2005\",\"mappings\":{\"default\":{\"default\":\"Raum für vier pro Em\"}}},{\"category\":\"Zs\",\"key\":\"2006\",\"mappings\":{\"default\":{\"default\":\"Six-Per-Em Space\"}}},{\"category\":\"Zs\",\"key\":\"2007\",\"mappings\":{\"default\":{\"default\":\"Raum darstellen\"}}},{\"category\":\"Zs\",\"key\":\"2008\",\"mappings\":{\"default\":{\"default\":\"Interpunktionsraum\"}}},{\"key\":\"2009\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200A\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200B\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"200C\",\"mappings\":{\"default\":{\"default\":\"Nullbreite ohne Joiner\"}}},{\"category\":\"Cf\",\"key\":\"200D\",\"mappings\":{\"default\":{\"default\":\"Zero Width Joiner\"}}},{\"category\":\"Cf\",\"key\":\"200E\",\"mappings\":{\"default\":{\"default\":\"Markierung von links nach rechts\"}}},{\"category\":\"Cf\",\"key\":\"200F\",\"mappings\":{\"default\":{\"default\":\"Markierung von rechts nach links\"}}},{\"category\":\"Zl\",\"key\":\"2028\",\"mappings\":{\"default\":{\"default\":\"Trennzeichen\"}}},{\"category\":\"Zp\",\"key\":\"2029\",\"mappings\":{\"default\":{\"default\":\"Absatztrennzeichen\"}}},{\"category\":\"Cf\",\"key\":\"202A\",\"mappings\":{\"default\":{\"default\":\"Einbetten von links nach rechts\"}}},{\"category\":\"Cf\",\"key\":\"202B\",\"mappings\":{\"default\":{\"default\":\"Einbetten von rechts nach links\"}}},{\"category\":\"Cf\",\"key\":\"202C\",\"mappings\":{\"default\":{\"default\":\"Pop Richtungsformatierung\"}}},{\"category\":\"Cf\",\"key\":\"202D\",\"mappings\":{\"default\":{\"default\":\"Von links nach rechts überschreiben\"}}},{\"category\":\"Cf\",\"key\":\"202E\",\"mappings\":{\"default\":{\"default\":\"Von rechts nach links überschreiben\"}}},{\"category\":\"Zs\",\"key\":\"202F\",\"mappings\":{\"default\":{\"default\":\"Schmaler No-Break-Bereich\"}}},{\"key\":\"205F\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"category\":\"Cf\",\"key\":\"2060\",\"mappings\":{\"default\":{\"default\":\"Word Joiner\"}}},{\"key\":\"2061\",\"mappings\":{\"default\":{\"default\":\"von\"}},\"category\":\"Cf\"},{\"key\":\"2062\",\"mappings\":{\"default\":{\"default\":\" \"}},\"category\":\"Cf\"},{\"key\":\"2063\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"2064\",\"mappings\":{\"default\":{\"default\":\"Unsichtbares Plus\"}}},{\"category\":\"Cf\",\"key\":\"206A\",\"mappings\":{\"default\":{\"default\":\"Symmetrisches Austauschen verhindern\"}}},{\"category\":\"Cf\",\"key\":\"206B\",\"mappings\":{\"default\":{\"default\":\"Aktivieren Sie das symmetrische Austauschen\"}}},{\"category\":\"Cf\",\"key\":\"206E\",\"mappings\":{\"default\":{\"default\":\"Nationale Ziffernformen\"}}},{\"category\":\"Cf\",\"key\":\"206F\",\"mappings\":{\"default\":{\"default\":\"Nominale Ziffernformen\"}}},{\"category\":\"Cf\",\"key\":\"FEFF\",\"mappings\":{\"default\":{\"default\":\"Nullbreite Leerzeichen\"}}},{\"category\":\"Cf\",\"key\":\"FFF9\",\"mappings\":{\"default\":{\"default\":\"Interlinearer Anmerkungsanker\"}}},{\"category\":\"Cf\",\"key\":\"FFFA\",\"mappings\":{\"default\":{\"default\":\"Separator für interlineare Anmerkungen\"}}},{\"category\":\"Cf\",\"key\":\"FFFB\",\"mappings\":{\"default\":{\"default\":\"Interlinear Annotation Terminator\"}}}]\n,\n\"de/symbols/other_stars.js\": \n[{\"locale\":\"de\"},{\"category\":\"So\",\"key\":\"23E8\",\"mappings\":{\"default\":{\"default\":\"Dezimalexponentensymbol\"}}},{\"category\":\"So\",\"key\":\"2605\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Stern\"}}},{\"category\":\"So\",\"key\":\"2606\",\"mappings\":{\"default\":{\"default\":\"weißer Stern\"}}},{\"category\":\"So\",\"key\":\"26AA\",\"mappings\":{\"default\":{\"default\":\"Mittlerer weißer Kreis\"}}},{\"category\":\"So\",\"key\":\"26AB\",\"mappings\":{\"default\":{\"default\":\"Mittlerer schwarzer Kreis\"}}},{\"category\":\"So\",\"key\":\"2705\",\"mappings\":{\"default\":{\"default\":\"Weißes schweres Häkchen\"}}},{\"category\":\"So\",\"key\":\"2713\",\"mappings\":{\"default\":{\"default\":\"Häkchen\"}}},{\"category\":\"So\",\"key\":\"2714\",\"mappings\":{\"default\":{\"default\":\"Schweres Häkchen\"}}},{\"category\":\"So\",\"key\":\"2715\",\"mappings\":{\"default\":{\"default\":\"Multiplikation X\"}}},{\"category\":\"So\",\"key\":\"2716\",\"mappings\":{\"default\":{\"default\":\"Schwere Multiplikation X\"}}},{\"category\":\"So\",\"key\":\"2717\",\"mappings\":{\"default\":{\"default\":\"Stimmzettel X\"}}},{\"category\":\"So\",\"key\":\"2718\",\"mappings\":{\"default\":{\"default\":\"Schwerer Stimmzettel X\"}}},{\"category\":\"So\",\"key\":\"271B\",\"mappings\":{\"default\":{\"default\":\"Center Cross öffnen\"}}},{\"category\":\"So\",\"key\":\"271C\",\"mappings\":{\"default\":{\"default\":\"Schweres offenes Mittelkreuz\"}}},{\"category\":\"So\",\"key\":\"2720\",\"mappings\":{\"default\":{\"default\":\"Malteserkreuz\"}}},{\"category\":\"So\",\"key\":\"2721\",\"mappings\":{\"default\":{\"default\":\"Davidstern\"}}},{\"category\":\"So\",\"key\":\"2722\",\"mappings\":{\"default\":{\"default\":\"Vier Teardrop-Spoked Asterisk\"}}},{\"category\":\"So\",\"key\":\"2723\",\"mappings\":{\"default\":{\"default\":\"Vier Ballon-Speichen-Sternchen\"}}},{\"category\":\"So\",\"key\":\"2724\",\"mappings\":{\"default\":{\"default\":\"Schwere Vier-Ballon-Speichen-Sternchen\"}}},{\"category\":\"So\",\"key\":\"2725\",\"mappings\":{\"default\":{\"default\":\"Vier Club-Spoked Asterisk\"}}},{\"category\":\"So\",\"key\":\"2726\",\"mappings\":{\"default\":{\"default\":\"Schwarzer vierzackiger Stern\"}}},{\"category\":\"So\",\"key\":\"2727\",\"mappings\":{\"default\":{\"default\":\"Weißer vierzackiger Stern\"}}},{\"category\":\"So\",\"key\":\"2728\",\"mappings\":{\"default\":{\"default\":\"Funkelt\"}}},{\"category\":\"So\",\"key\":\"2729\",\"mappings\":{\"default\":{\"default\":\"Stress umrissener weißer Stern\"}}},{\"category\":\"So\",\"key\":\"272A\",\"mappings\":{\"default\":{\"default\":\"Eingekreister weißer Stern\"}}},{\"category\":\"So\",\"key\":\"272B\",\"mappings\":{\"default\":{\"default\":\"Open Center Black Star\"}}},{\"category\":\"So\",\"key\":\"272C\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Center White Star\"}}},{\"category\":\"So\",\"key\":\"272D\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Stern umrissen\"}}},{\"category\":\"So\",\"key\":\"272E\",\"mappings\":{\"default\":{\"default\":\"Schwerer umrissener schwarzer Stern\"}}},{\"category\":\"So\",\"key\":\"272F\",\"mappings\":{\"default\":{\"default\":\"Sternrad Stern\"}}},{\"category\":\"So\",\"key\":\"2730\",\"mappings\":{\"default\":{\"default\":\"Beschatteter weißer Stern\"}}},{\"category\":\"So\",\"key\":\"2731\",\"mappings\":{\"default\":{\"default\":\"Schwerer Stern\"}}},{\"category\":\"So\",\"key\":\"2732\",\"mappings\":{\"default\":{\"default\":\"Öffnen Sie Center Asterisk\"}}},{\"category\":\"So\",\"key\":\"2733\",\"mappings\":{\"default\":{\"default\":\"Acht Speichen-Sternchen\"}}},{\"category\":\"So\",\"key\":\"2734\",\"mappings\":{\"default\":{\"default\":\"Achtzackiger schwarzer Stern\"}}},{\"category\":\"So\",\"key\":\"2735\",\"mappings\":{\"default\":{\"default\":\"Achtzackiger Sternradstern\"}}},{\"category\":\"So\",\"key\":\"2736\",\"mappings\":{\"default\":{\"default\":\"Sechszackiger schwarzer Stern\"}}},{\"category\":\"So\",\"key\":\"2739\",\"mappings\":{\"default\":{\"default\":\"Zwölf schwarzer Stern\"}}},{\"category\":\"So\",\"key\":\"273A\",\"mappings\":{\"default\":{\"default\":\"Sechzehn Spitzen Sternchen\"}}},{\"category\":\"So\",\"key\":\"273B\",\"mappings\":{\"default\":{\"default\":\"Teardrop-Spoked Sternchen\"}}},{\"category\":\"So\",\"key\":\"273C\",\"mappings\":{\"default\":{\"default\":\"Open Center Teardrop-Spoked Sternchen\"}}},{\"category\":\"So\",\"key\":\"273D\",\"mappings\":{\"default\":{\"default\":\"Schwerer Tropfen-Speichen-Sternchen\"}}},{\"category\":\"So\",\"key\":\"273E\",\"mappings\":{\"default\":{\"default\":\"Sechs Petalled Schwarzweiss-Florette\"}}},{\"category\":\"So\",\"key\":\"273F\",\"mappings\":{\"default\":{\"default\":\"Schwarze Florette\"}}},{\"category\":\"So\",\"key\":\"2740\",\"mappings\":{\"default\":{\"default\":\"Weiße Florette\"}}},{\"category\":\"So\",\"key\":\"2741\",\"mappings\":{\"default\":{\"default\":\"Acht Petalled umrissene schwarze Florette\"}}},{\"category\":\"So\",\"key\":\"2742\",\"mappings\":{\"default\":{\"default\":\"Eingekreistes offenes Zentrum Achtstern\"}}},{\"category\":\"So\",\"key\":\"2743\",\"mappings\":{\"default\":{\"default\":\"Schweres, tropfenbesetztes Nadelrad-Sternchen\"}}},{\"category\":\"So\",\"key\":\"2744\",\"mappings\":{\"default\":{\"default\":\"Schneeflocke\"}}},{\"category\":\"So\",\"key\":\"2745\",\"mappings\":{\"default\":{\"default\":\"Feste Trifoliate-Schneeflocke\"}}},{\"category\":\"So\",\"key\":\"2746\",\"mappings\":{\"default\":{\"default\":\"Schwere Chevron-Schneeflocke\"}}},{\"category\":\"So\",\"key\":\"2747\",\"mappings\":{\"default\":{\"default\":\"Funkeln\"}}},{\"category\":\"So\",\"key\":\"2748\",\"mappings\":{\"default\":{\"default\":\"Schweres Funkeln\"}}},{\"category\":\"So\",\"key\":\"2749\",\"mappings\":{\"default\":{\"default\":\"Ballon-Speichen-Sternchen\"}}},{\"category\":\"So\",\"key\":\"274A\",\"mappings\":{\"default\":{\"default\":\"Acht Teardrop-Spoked Propeller Sternchen\"}}},{\"category\":\"So\",\"key\":\"274B\",\"mappings\":{\"default\":{\"default\":\"Schwere Acht Teardrop-Spoked Propeller Sternchen\"}}},{\"category\":\"So\",\"key\":\"274C\",\"mappings\":{\"default\":{\"default\":\"Cross Mark\"}}},{\"category\":\"So\",\"key\":\"274D\",\"mappings\":{\"default\":{\"default\":\"Beschatteter weißer Kreis\"}}}]\n,\n\"de/units/energy.js\": \n[{\"locale\":\"de\"},{\"key\":\"W\",\"mappings\":{\"default\":{\"default\":\"Watt\"}},\"category\":\"energy\",\"names\":[\"W\",\"w\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Kilowatt\"}},\"key\":\"kW\",\"names\":[\"kw\",\"kW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Milliwatt\"}},\"key\":\"mW\",\"names\":[\"mw\",\"mW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Kilowattstunde\"}},\"key\":\"kwh\",\"names\":[\"kwh\",\"kWh\"]},{\"key\":\"J\",\"mappings\":{\"default\":{\"default\":\"Joule\",\"plural\":\"Joules\"}},\"category\":\"energy\",\"names\":[\"J\"]},{\"key\":\"N\",\"mappings\":{\"default\":{\"default\":\"Newton\"}},\"category\":\"energy\",\"names\":[\"N\"]},{\"key\":\"A\",\"mappings\":{\"default\":{\"default\":\"Ampere\"}},\"category\":\"energy\",\"names\":[\"A\"]},{\"key\":\"V\",\"mappings\":{\"default\":{\"default\":\"Volt\"}},\"category\":\"energy\",\"names\":[\"V\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Mikroohm\"}},\"key\":\"µΩ\",\"names\":[\"µΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Milliohm\"}},\"key\":\"mΩ\",\"names\":[\"mΩ\"]},{\"key\":\"Ω\",\"mappings\":{\"default\":{\"default\":\"Ohm\"}},\"category\":\"energy\",\"names\":[\"Ω\",\"Ohm\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Kiloohm\"}},\"key\":\"kΩ\",\"names\":[\"kΩ\",\"KΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Megaohm\"}},\"key\":\"MΩ\",\"names\":[\"MΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Gigaohm\"}},\"key\":\"GΩ\",\"names\":[\"GΩ\"]}]\n,\n\"de/units/length.js\": \n[{\"locale\":\"de\"},{\"key\":\"mm\",\"names\":[\"mm\"],\"mappings\":{\"default\":{\"default\":\"Millimeter\"}},\"category\":\"length\"},{\"key\":\"cm\",\"names\":[\"cm\"],\"mappings\":{\"default\":{\"default\":\"Zentimeter\"}},\"category\":\"length\"},{\"key\":\"m\",\"mappings\":{\"default\":{\"default\":\"Meter\"}},\"category\":\"length\",\"names\":[\"m\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"Kilometer\"}},\"key\":\"km\",\"names\":[\"km\"]},{\"key\":\"ft\",\"mappings\":{\"default\":{\"default\":\"Fuß\"}},\"category\":\"length\",\"names\":[\"ft\",\"ft.\"]},{\"key\":\"in\",\"mappings\":{\"default\":{\"default\":\"Zoll\"}},\"category\":\"length\",\"names\":[\"in\",\"in.\"]},{\"key\":\"mi\",\"mappings\":{\"default\":{\"plural\":\"Meilen\",\"default\":\"Meile\"}},\"category\":\"length\",\"names\":[\"mi\",\"mi.\"]},{\"key\":\"yd\",\"mappings\":{\"default\":{\"plural\":\"Yards\",\"default\":\"Yard\"}},\"category\":\"length\",\"names\":[\"yd\",\"yd.\"]},{\"key\":\"n.m.\",\"names\":[\"n.m.\"],\"mappings\":{\"default\":{\"default\":\"nautische Meile\"}},\"category\":\"length\"}]\n,\n\"de/units/memory.js\": \n[{\"locale\":\"de\"},{\"key\":\"b\",\"mappings\":{\"default\":{\"plural\":\"Bits\",\"default\":\"Bit\"}},\"category\":\"memory\",\"names\":[\"b\"]},{\"key\":\"B\",\"mappings\":{\"default\":{\"plural\":\"Bytes\",\"default\":\"Byte\"}},\"category\":\"memory\",\"names\":[\"B\"]},{\"key\":\"KB\",\"mappings\":{\"default\":{\"plural\":\"Kilobytes\",\"default\":\"Kilobyte\"}},\"category\":\"memory\",\"names\":[\"KB\"]},{\"key\":\"MB\",\"mappings\":{\"default\":{\"plural\":\"Megabytes\",\"default\":\"Megabyte\"}},\"category\":\"memory\",\"names\":[\"MB\"]},{\"key\":\"GB\",\"mappings\":{\"default\":{\"plural\":\"Gigabytes\",\"default\":\"Gigabyte\"}},\"category\":\"memory\",\"names\":[\"GB\"]},{\"key\":\"TB\",\"mappings\":{\"default\":{\"plural\":\"Terabytes\",\"default\":\"Terabyte\"}},\"category\":\"memory\",\"names\":[\"TB\"]}]\n,\n\"de/units/other.js\": \n[{\"locale\":\"de\"},{\"key\":\"ha\",\"mappings\":{\"default\":{\"default\":\"Hektar\"}},\"category\":\"other\",\"names\":[\"ha\"]},{\"category\":\"other\",\"mappings\":{\"default\":{\"default\":\"Dutzend\"}},\"key\":\"doz\",\"names\":[\"doz\",\"doz.\",\"dz\",\"dz.\"]}]\n,\n\"de/units/speed.js\": \n[{\"locale\":\"de\"},{\"category\":\"speed\",\"mappings\":{\"default\":{\"default\":\"Knoten\"}},\"key\":\"kt\",\"names\":[\"kt\",\"kt.\"]},{\"key\":\"mph\",\"mappings\":{\"default\":{\"default\":\"Meilen pro Stunde\",\"singular\":\"Meile pro Stunde\"}},\"category\":\"speed\",\"names\":[\"mph\"]},{\"key\":\"kmh\",\"mappings\":{\"default\":{\"default\":\"Kilometer pro Stunde\"}},\"category\":\"speed\",\"names\":[\"kmh\"]},{\"key\":\"rpm\",\"mappings\":{\"default\":{\"default\":\"Umdrehungen pro Minute\",\"singular\":\"Umdrehung pro Minute\"}},\"category\":\"speed\",\"names\":[\"rpm\"]}]\n,\n\"de/units/temperature.js\": \n[{\"locale\":\"de\"},{\"key\":\"F\",\"mappings\":{\"default\":{\"default\":\"Farad\"}},\"category\":\"temperature\",\"names\":[\"F\",\"F.\",\"°F\"]},{\"key\":\"C\",\"mappings\":{\"default\":{\"default\":\"Celsius\"}},\"category\":\"temperature\",\"names\":[\"C\",\"°C\"]},{\"key\":\"K\",\"mappings\":{\"default\":{\"default\":\"Kelvin\"}},\"category\":\"temperature\",\"names\":[\"K\",\"°K\"]}]\n,\n\"de/units/time.js\": \n[{\"locale\":\"de\"},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Nanosekunde\"}},\"key\":\"ns\",\"names\":[\"ns\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Microsekunde\"}},\"key\":\"µs\",\"names\":[\"µs\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Millisekunde\"}},\"key\":\"ms\",\"names\":[\"ms\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Sekunde\"}},\"key\":\"s\",\"names\":[\"s\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Minute\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Stunde\"}},\"key\":\"h\",\"names\":[\"h\",\"hr\"]}]\n,\n\"de/units/volume.js\": \n[{\"locale\":\"de\"},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kubik\"}},\"key\":\"cu\",\"names\":[\"cu\",\"cu.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kubikinch\"}},\"key\":\"cu inch\",\"names\":[\"cu in\",\"cu. in.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kubikfuß\"}},\"key\":\"cu ft\",\"names\":[\"cu ft\",\"cu. ft.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kubikyard\"}},\"key\":\"cu yd\",\"names\":[\"cu yd\",\"cu. yd.\"]},{\"key\":\"bbl\",\"mappings\":{\"default\":{\"default\":\"Fass\"}},\"category\":\"volume\",\"names\":[\"bbl.\",\"bbl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Fluid ounce\"}},\"key\":\"fl. oz.\",\"names\":[\"fl. oz.\",\"fl oz\"]},{\"key\":\"gal\",\"mappings\":{\"default\":{\"plural\":\"Gallonen\",\"default\":\"Gallone\"}},\"category\":\"volume\",\"names\":[\"gal\",\"gal.\"]},{\"key\":\"pt\",\"mappings\":{\"default\":{\"default\":\"Pint\"}},\"category\":\"volume\",\"names\":[\"pt\",\"pt.\"]},{\"key\":\"qt\",\"mappings\":{\"default\":{\"plural\":\"Quarts\",\"default\":\"Quart\"}},\"category\":\"volume\",\"names\":[\"qt\",\"qt.\"]},{\"key\":\"tbsp\",\"mappings\":{\"default\":{\"default\":\"Esslöffel\"}},\"category\":\"volume\",\"names\":[\"tbsp\",\"tbsp.\",\"Tbsp\",\"Tbsp.\"]},{\"key\":\"tsp\",\"mappings\":{\"default\":{\"default\":\"Teelöffel\"}},\"category\":\"volume\",\"names\":[\"tsp\",\"tsp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kubikzentimeter\"}},\"key\":\"cc\",\"names\":[\"cc\",\"ccm\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kiloliter\"}},\"key\":\"kl\",\"names\":[\"kl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Liter\"}},\"key\":\"l\",\"names\":[\"l\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Milliliter\"}},\"key\":\"ml\",\"names\":[\"ml\"]}]\n,\n\"de/units/weight.js\": \n[{\"locale\":\"de\"},{\"key\":\"lb\",\"mappings\":{\"default\":{\"default\":\"Pfund\"}},\"category\":\"weight\",\"names\":[\"lb\",\"lb.\"]},{\"key\":\"oz\",\"mappings\":{\"default\":{\"plural\":\"Unzen\",\"default\":\"Unze\"}},\"category\":\"weight\",\"names\":[\"oz\",\"oz.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"Long ton\"}},\"key\":\"LT\",\"names\":[\"LT\",\"L.T.\"]},{\"key\":\"gr\",\"mappings\":{\"default\":{\"default\":\"Gramm\"}},\"category\":\"weight\",\"names\":[\"g\",\"gr\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"Kilogramm\"}},\"key\":\"kg\",\"names\":[\"kg\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"Mikrogramm\"}},\"key\":\"mcg\",\"names\":[\"mcg\",\"µg\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"Milligramm\"}},\"key\":\"mg\",\"names\":[\"mg\"]},{\"key\":\"t\",\"mappings\":{\"default\":{\"plural\":\"Tonnen\",\"default\":\"Tonne\"}},\"category\":\"weight\",\"names\":[\"t\",\"T\"]}]\n}\n\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/sre/mathmaps/en.js",
    "content": "{\n\"en/functions/algebra.js\": \n[{\"locale\":\"en\"},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"degree\"}},\"key\":\"deg\",\"names\":[\"deg\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"determinant\"},\"mathspeak\":{\"default\":\"det\"}},\"key\":\"det\",\"names\":[\"det\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"dimension\"}},\"key\":\"dim\",\"names\":[\"dim\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"homomorphism\"},\"mathspeak\":{\"default\":\"hom\"},\"clearspeak\":{\"default\":\"hom\"}},\"key\":\"hom\",\"names\":[\"hom\",\"Hom\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"kernel\"}},\"key\":\"ker\",\"names\":[\"ker\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"trace\"}},\"key\":\"Tr\",\"names\":[\"Tr\",\"tr\"]}]\n,\n\"en/functions/elementary.js\": \n[{\"locale\":\"en\"},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"log\"}},\"key\":\"log\",\"names\":[\"log\"]},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"natural log\"},\"mathspeak\":{\"default\":\"ln\"},\"clearspeak\":{\"default\":\"l n\",\"Log_LnAsNaturalLog\":\"natural log\"}},\"key\":\"ln\",\"names\":[\"ln\"]},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"log base 10\"}},\"key\":\"lg\",\"names\":[\"lg\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"exponential\"},\"mathspeak\":{\"default\":\"exp\"},\"clearspeak\":{\"default\":\"exp\"}},\"key\":\"exp\",\"names\":[\"exp\",\"expt\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"greatest common divisor\"},\"mathspeak\":{\"default\":\"gcd\"},\"clearspeak\":{\"default\":\"gcd\"}},\"key\":\"gcd\",\"names\":[\"gcd\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"least common multiple\"},\"mathspeak\":{\"default\":\"lcm\"},\"clearspeak\":{\"default\":\"lcm\"}},\"key\":\"lcm\",\"names\":[\"lcm\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"argument\"},\"mathspeak\":{\"default\":\"arg\"},\"clearspeak\":{\"default\":\"arg\"}},\"key\":\"arg\",\"names\":[\"arg\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"imaginary part\"},\"mathspeak\":{\"default\":\"im\"},\"clearspeak\":{\"default\":\"imaginary\"}},\"key\":\"im\",\"names\":[\"im\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"real part\"},\"mathspeak\":{\"default\":\"re\"},\"clearspeak\":{\"default\":\"real\"}},\"key\":\"re\",\"names\":[\"re\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"infimum\"},\"mathspeak\":{\"default\":\"inf\"},\"clearspeak\":{\"default\":\"inf\"}},\"key\":\"inf\",\"names\":[\"inf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"limit\"},\"mathspeak\":{\"default\":\"limit\"},\"clearspeak\":{\"default\":\"lim\"}},\"key\":\"lim\",\"names\":[\"lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"limit inferior\"},\"mathspeak\":{\"default\":\"liminf\"},\"clearspeak\":{\"default\":\"liminf\"}},\"key\":\"liminf\",\"names\":[\"lim inf\",\"liminf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"limit superior\"},\"mathspeak\":{\"default\":\"limsup\"},\"clearspeak\":{\"default\":\"limsup\"}},\"key\":\"limsup\",\"names\":[\"lim sup\",\"limsup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"maximum\"},\"mathspeak\":{\"default\":\"max\"},\"clearspeak\":{\"default\":\"max\"}},\"key\":\"max\",\"names\":[\"max\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"minimum\"},\"mathspeak\":{\"default\":\"min\"},\"clearspeak\":{\"default\":\"min\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"supremum\"},\"mathspeak\":{\"default\":\"sup\"},\"clearspeak\":{\"default\":\"sup\"}},\"key\":\"sup\",\"names\":[\"sup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"colimit\"}},\"key\":\"injlim\",\"names\":[\"injlim\",\"inj lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"projective limit\"}},\"key\":\"projlim\",\"names\":[\"projlim\",\"proj lim\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"modulo\"},\"mathspeak\":{\"default\":\"mod\"},\"clearspeak\":{\"default\":\"mod\"}},\"key\":\"mod\",\"names\":[\"mod\"]},{\"category\":\"Probability\",\"mappings\":{\"default\":{\"default\":\"probability\"}},\"key\":\"Pr\",\"names\":[\"Pr\"]}]\n,\n\"en/functions/hyperbolic.js\": \n[{\"locale\":\"en\"},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic cosine\"}},\"key\":\"cosh\",\"names\":[\"cosh\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic cotangent\"}},\"key\":\"coth\",\"names\":[\"coth\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic cosecant\"}},\"key\":\"csch\",\"names\":[\"csch\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic secant\"}},\"key\":\"sech\",\"names\":[\"sech\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic sine\"}},\"key\":\"sinh\",\"names\":[\"sinh\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic tangent\"}},\"key\":\"tanh\",\"names\":[\"tanh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic cosine\"}},\"key\":\"arcosh\",\"names\":[\"arcosh\",\"arccosh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic cotangent\"}},\"key\":\"arcoth\",\"names\":[\"arcoth\",\"arccoth\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic cosecant\"}},\"key\":\"arcsch\",\"names\":[\"arcsch\",\"arccsch\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic secant\"}},\"key\":\"arsech\",\"names\":[\"arsech\",\"arcsech\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic sine\"}},\"key\":\"arsinh\",\"names\":[\"arsinh\",\"arcsinh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic tangent\"}},\"key\":\"artanh\",\"names\":[\"artanh\",\"arctanh\"]}]\n,\n\"en/functions/trigonometry.js\": \n[{\"locale\":\"en\"},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"cosine\"}},\"key\":\"cos\",\"names\":[\"cos\",\"cosine\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"cotangent\"}},\"key\":\"cot\",\"names\":[\"cot\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"cosecant\"}},\"key\":\"csc\",\"names\":[\"csc\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"secant\"}},\"key\":\"sec\",\"names\":[\"sec\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"sine\"}},\"key\":\"sin\",\"names\":[\"sin\",\"sine\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"tangent\"}},\"key\":\"tan\",\"names\":[\"tan\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cosine\"},\"clearspeak\":{\"Trig_TrigInverse\":\"cosine inverse\"}},\"key\":\"arccos\",\"names\":[\"arccos\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cotangent\"},\"clearspeak\":{\"Trig_TrigInverse\":\"cotangent inverse\"}},\"key\":\"arccot\",\"names\":[\"arccot\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cosecant\"},\"clearspeak\":{\"Trig_TrigInverse\":\"cosecant inverse\"}},\"key\":\"arccsc\",\"names\":[\"arccsc\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc secant\"},\"clearspeak\":{\"Trig_TrigInverse\":\"secant inverse\"}},\"key\":\"arcsec\",\"names\":[\"arcsec\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc sine\"},\"clearspeak\":{\"Trig_TrigInverse\":\"sine inverse\"}},\"key\":\"arcsin\",\"names\":[\"arcsin\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc tangent\"},\"clearspeak\":{\"Trig_TrigInverse\":\"tangent inverse\"}},\"key\":\"arctan\",\"names\":[\"arctan\"]}]\n,\n\"en/symbols/digits_rest.js\": \n[{\"locale\":\"en\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"squared\"},\"mathspeak\":{\"default\":\"squared\"},\"clearspeak\":{\"default\":\"squared\"}},\"key\":\"00B2\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"cubed\"},\"mathspeak\":{\"default\":\"cubed\"},\"clearspeak\":{\"default\":\"cubed\"}},\"key\":\"00B3\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one quarter\"}},\"key\":\"00BC\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one half\"}},\"key\":\"00BD\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"three quarters\"}},\"key\":\"00BE\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one seventh\"}},\"key\":\"2150\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one ninth\"}},\"key\":\"2151\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one tenth\"}},\"key\":\"2152\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one third\"}},\"key\":\"2153\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"two thirds\"}},\"key\":\"2154\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one fifth\"}},\"key\":\"2155\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"two fifths\"}},\"key\":\"2156\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"three fifths\"}},\"key\":\"2157\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"four fifths\"}},\"key\":\"2158\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one sixth\"}},\"key\":\"2159\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"five sixths\"}},\"key\":\"215A\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one eighth\"}},\"key\":\"215B\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"three eighths\"}},\"key\":\"215C\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"five eighths\"}},\"key\":\"215D\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"seven eighths\"}},\"key\":\"215E\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"numerator one\"}},\"key\":\"215F\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"zero thirds\"}},\"key\":\"2189\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled ten on black square\"}},\"key\":\"3248\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled twenty on black square\"}},\"key\":\"3249\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled thirty on black square\"}},\"key\":\"324A\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled forty on black square\"}},\"key\":\"324B\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled fifty on black square\"}},\"key\":\"324C\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled sixty on black square\"}},\"key\":\"324D\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled seventy on black square\"}},\"key\":\"324E\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled eighty on black square\"}},\"key\":\"324F\"}]\n,\n\"en/symbols/greek-rest.js\": \n[{\"locale\":\"en\"},{\"category\":\"Lu\",\"key\":\"0394\",\"mappings\":{\"clearspeak\":{\"default\":\"triangle\",\"TriangleSymbol_Delta\":\"cap Delta\"}}}]\n,\n\"en/symbols/greek-scripts.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"key\":\"1D26\",\"mappings\":{\"default\":{\"default\":\"small cap Gamma\"},\"mathspeak\":{\"default\":\"small upper Gamma\"}}},{\"category\":\"Ll\",\"key\":\"1D27\",\"mappings\":{\"default\":{\"default\":\"small cap Lamda\"},\"mathspeak\":{\"default\":\"small upper Lamda\"}}},{\"category\":\"Ll\",\"key\":\"1D28\",\"mappings\":{\"default\":{\"default\":\"small cap Pi\"},\"mathspeak\":{\"default\":\"small upper Pi\"}}},{\"category\":\"Ll\",\"key\":\"1D29\",\"mappings\":{\"default\":{\"default\":\"small cap Rho\"},\"mathspeak\":{\"default\":\"small upper Rho\"}}},{\"category\":\"Ll\",\"key\":\"1D2A\",\"mappings\":{\"default\":{\"default\":\"small cap Psi\"},\"mathspeak\":{\"default\":\"small upper Psi\"}}},{\"category\":\"Lm\",\"key\":\"1D5E\",\"mappings\":{\"default\":{\"default\":\"superscript gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D60\",\"mappings\":{\"default\":{\"default\":\"superscript phi\"}}},{\"category\":\"Lm\",\"key\":\"1D66\",\"mappings\":{\"default\":{\"default\":\"subscript beta\"}}},{\"category\":\"Lm\",\"key\":\"1D67\",\"mappings\":{\"default\":{\"default\":\"subscript gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D68\",\"mappings\":{\"default\":{\"default\":\"subscript rho\"}}},{\"category\":\"Lm\",\"key\":\"1D69\",\"mappings\":{\"default\":{\"default\":\"subscript phi\"}}},{\"category\":\"Lm\",\"key\":\"1D6A\",\"mappings\":{\"default\":{\"default\":\"subscript chi\"}}}]\n,\n\"en/symbols/greek-symbols.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"beta\"}},\"key\":\"03D0\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"kai\"}},\"key\":\"03D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed epsilon\"}},\"key\":\"03F6\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"bold cap Digamma\"},\"mathspeak\":{\"default\":\"bold upper Digamma\"}},\"key\":\"1D7CA\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"bold digamma\"}},\"key\":\"1D7CB\"}]\n,\n\"en/symbols/hebrew_letters.js\": \n[{\"locale\":\"en\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"first transfinite cardinal\",\"alternative\":\"alef\"}},\"key\":\"2135\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"second transfinite cardinal\",\"alternative\":\"bet\"}},\"key\":\"2136\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"third transfinite cardinal\",\"alternative\":\"gimel\"}},\"key\":\"2137\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"fourth transfinite cardinal\",\"alternative\":\"dalet\"}},\"key\":\"2138\"}]\n,\n\"en/symbols/latin-lower-double-accent.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"key\":\"01D6\",\"mappings\":{\"default\":{\"default\":\"u double overdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"01D8\",\"mappings\":{\"default\":{\"default\":\"u double overdot acute\"}}},{\"category\":\"Ll\",\"key\":\"01DA\",\"mappings\":{\"default\":{\"default\":\"u double overdot caron\"}}},{\"category\":\"Ll\",\"key\":\"01DC\",\"mappings\":{\"default\":{\"default\":\"u double overdot grave\"}}},{\"category\":\"Ll\",\"key\":\"01DF\",\"mappings\":{\"default\":{\"default\":\"a double overdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"01E1\",\"mappings\":{\"default\":{\"default\":\"a overdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"01ED\",\"mappings\":{\"default\":{\"default\":\"o ogonek overbar\"}}},{\"category\":\"Ll\",\"key\":\"01FB\",\"mappings\":{\"default\":{\"default\":\"a ring above acute\"}}},{\"category\":\"Ll\",\"key\":\"022B\",\"mappings\":{\"default\":{\"default\":\"o double overdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"022D\",\"mappings\":{\"default\":{\"default\":\"o tilde overbar\"}}},{\"category\":\"Ll\",\"key\":\"0231\",\"mappings\":{\"default\":{\"default\":\"o overdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"1E09\",\"mappings\":{\"default\":{\"default\":\"c cedilla acute\"}}},{\"category\":\"Ll\",\"key\":\"1E15\",\"mappings\":{\"default\":{\"default\":\"e overbar grave\"}}},{\"category\":\"Ll\",\"key\":\"1E17\",\"mappings\":{\"default\":{\"default\":\"e overbar acute\"}}},{\"category\":\"Ll\",\"key\":\"1E1D\",\"mappings\":{\"default\":{\"default\":\"e cedilla breve\"}}},{\"category\":\"Ll\",\"key\":\"1E2F\",\"mappings\":{\"default\":{\"default\":\"i double overdot acute\"}}},{\"category\":\"Ll\",\"key\":\"1E39\",\"mappings\":{\"default\":{\"default\":\"l underdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"1E4D\",\"mappings\":{\"default\":{\"default\":\"o tilde acute\"}}},{\"category\":\"Ll\",\"key\":\"1E4F\",\"mappings\":{\"default\":{\"default\":\"o tilde double overdot\"}}},{\"category\":\"Ll\",\"key\":\"1E51\",\"mappings\":{\"default\":{\"default\":\"o overbar grave\"}}},{\"category\":\"Ll\",\"key\":\"1E53\",\"mappings\":{\"default\":{\"default\":\"o overbar acute\"}}},{\"category\":\"Ll\",\"key\":\"1E5D\",\"mappings\":{\"default\":{\"default\":\"r underdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"1E65\",\"mappings\":{\"default\":{\"default\":\"s acute overdot\"}}},{\"category\":\"Ll\",\"key\":\"1E67\",\"mappings\":{\"default\":{\"default\":\"s caron overdot\"}}},{\"category\":\"Ll\",\"key\":\"1E69\",\"mappings\":{\"default\":{\"default\":\"s underdot overdot\"}}},{\"category\":\"Ll\",\"key\":\"1E79\",\"mappings\":{\"default\":{\"default\":\"u tilde acute\"}}},{\"category\":\"Ll\",\"key\":\"1E7B\",\"mappings\":{\"default\":{\"default\":\"u overbar double overdot\"}}},{\"category\":\"Ll\",\"key\":\"1EA5\",\"mappings\":{\"default\":{\"default\":\"a hat acute\"}}},{\"category\":\"Ll\",\"key\":\"1EA7\",\"mappings\":{\"default\":{\"default\":\"a hat grave\"}}},{\"category\":\"Ll\",\"key\":\"1EA9\",\"mappings\":{\"default\":{\"default\":\"a hat hook above\"}}},{\"category\":\"Ll\",\"key\":\"1EAB\",\"mappings\":{\"default\":{\"default\":\"a hat tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EAD\",\"mappings\":{\"default\":{\"default\":\"a hat underdot\"}}},{\"category\":\"Ll\",\"key\":\"1EAF\",\"mappings\":{\"default\":{\"default\":\"a breve acute\"}}},{\"category\":\"Ll\",\"key\":\"1EB1\",\"mappings\":{\"default\":{\"default\":\"a breve grave\"}}},{\"category\":\"Ll\",\"key\":\"1EB3\",\"mappings\":{\"default\":{\"default\":\"a breve hook above\"}}},{\"category\":\"Ll\",\"key\":\"1EB5\",\"mappings\":{\"default\":{\"default\":\"a breve tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EB7\",\"mappings\":{\"default\":{\"default\":\"a breve underdot\"}}},{\"category\":\"Ll\",\"key\":\"1EBF\",\"mappings\":{\"default\":{\"default\":\"e hat acute\"}}},{\"category\":\"Ll\",\"key\":\"1EC1\",\"mappings\":{\"default\":{\"default\":\"e hat grave\"}}},{\"category\":\"Ll\",\"key\":\"1EC3\",\"mappings\":{\"default\":{\"default\":\"e hat hook above\"}}},{\"category\":\"Ll\",\"key\":\"1EC5\",\"mappings\":{\"default\":{\"default\":\"e hat tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EC7\",\"mappings\":{\"default\":{\"default\":\"e hat underdot\"}}},{\"category\":\"Ll\",\"key\":\"1ED1\",\"mappings\":{\"default\":{\"default\":\"o hat acute\"}}},{\"category\":\"Ll\",\"key\":\"1ED3\",\"mappings\":{\"default\":{\"default\":\"o hat grave\"}}},{\"category\":\"Ll\",\"key\":\"1ED5\",\"mappings\":{\"default\":{\"default\":\"o hat hook above\"}}},{\"category\":\"Ll\",\"key\":\"1ED7\",\"mappings\":{\"default\":{\"default\":\"o hat tilde\"}}},{\"category\":\"Ll\",\"key\":\"1ED9\",\"mappings\":{\"default\":{\"default\":\"o hat underdot\"}}},{\"category\":\"Ll\",\"key\":\"1EDB\",\"mappings\":{\"default\":{\"default\":\"o acute prime\"}}},{\"category\":\"Ll\",\"key\":\"1EDD\",\"mappings\":{\"default\":{\"default\":\"o grave prime\"}}},{\"category\":\"Ll\",\"key\":\"1EDF\",\"mappings\":{\"default\":{\"default\":\"o hook above prime\"}}},{\"category\":\"Ll\",\"key\":\"1EE1\",\"mappings\":{\"default\":{\"default\":\"o tilde prime\"}}},{\"category\":\"Ll\",\"key\":\"1EE3\",\"mappings\":{\"default\":{\"default\":\"o underdot prime\"}}},{\"category\":\"Ll\",\"key\":\"1EE9\",\"mappings\":{\"default\":{\"default\":\"u acute prime\"}}},{\"category\":\"Ll\",\"key\":\"1EEB\",\"mappings\":{\"default\":{\"default\":\"u grave prime\"}}},{\"category\":\"Ll\",\"key\":\"1EED\",\"mappings\":{\"default\":{\"default\":\"u hook above prime\"}}},{\"category\":\"Ll\",\"key\":\"1EEF\",\"mappings\":{\"default\":{\"default\":\"u tilde prime\"}}},{\"category\":\"Ll\",\"key\":\"1EF1\",\"mappings\":{\"default\":{\"default\":\"u underdot prime\"}}}]\n,\n\"en/symbols/latin-lower-phonetic.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"key\":\"00F8\",\"mappings\":{\"default\":{\"default\":\"o with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0111\",\"mappings\":{\"default\":{\"default\":\"d with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0127\",\"mappings\":{\"default\":{\"default\":\"h with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0142\",\"mappings\":{\"default\":{\"default\":\"l with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0167\",\"mappings\":{\"default\":{\"default\":\"t with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0180\",\"mappings\":{\"default\":{\"default\":\"b with stroke\"}}},{\"category\":\"Ll\",\"key\":\"019B\",\"mappings\":{\"default\":{\"default\":\"lambda with stroke\"}}},{\"category\":\"Ll\",\"key\":\"01B6\",\"mappings\":{\"default\":{\"default\":\"z with stroke\"}}},{\"category\":\"Ll\",\"key\":\"01BE\",\"mappings\":{\"default\":{\"default\":\"latin letter inverted glottal stop with stroke\"}}},{\"category\":\"Ll\",\"key\":\"01E5\",\"mappings\":{\"default\":{\"default\":\"g with stroke\"}}},{\"category\":\"Ll\",\"key\":\"01FF\",\"mappings\":{\"default\":{\"default\":\"o with stroke and acute\"}}},{\"category\":\"Ll\",\"key\":\"023C\",\"mappings\":{\"default\":{\"default\":\"c with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0247\",\"mappings\":{\"default\":{\"default\":\"e with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0249\",\"mappings\":{\"default\":{\"default\":\"j with stroke\"}}},{\"category\":\"Ll\",\"key\":\"024D\",\"mappings\":{\"default\":{\"default\":\"r with stroke\"}}},{\"category\":\"Ll\",\"key\":\"024F\",\"mappings\":{\"default\":{\"default\":\"y with stroke\"}}},{\"category\":\"Ll\",\"key\":\"025F\",\"mappings\":{\"default\":{\"default\":\"dotless j with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0268\",\"mappings\":{\"default\":{\"default\":\"i with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0284\",\"mappings\":{\"default\":{\"default\":\"dotless j with stroke and hook\"}}},{\"category\":\"Ll\",\"key\":\"02A1\",\"mappings\":{\"default\":{\"default\":\"latin letter glottal stop with stroke\"}}},{\"category\":\"Ll\",\"key\":\"02A2\",\"mappings\":{\"default\":{\"default\":\"latin letter reversed glottal stop with stroke\"}}},{\"category\":\"Ll\",\"key\":\"1D13\",\"mappings\":{\"default\":{\"default\":\"sideways o with stroke\"}}},{\"category\":\"Ll\",\"key\":\"1D7C\",\"mappings\":{\"default\":{\"default\":\"iota with stroke\"}}},{\"category\":\"Ll\",\"key\":\"1D7D\",\"mappings\":{\"default\":{\"default\":\"p with stroke\"}}},{\"category\":\"Ll\",\"key\":\"1D7F\",\"mappings\":{\"default\":{\"default\":\"upsilon with stroke\"}}},{\"category\":\"Ll\",\"key\":\"1E9C\",\"mappings\":{\"default\":{\"default\":\"long s with diagonal stroke\"}}},{\"category\":\"Ll\",\"key\":\"1E9D\",\"mappings\":{\"default\":{\"default\":\"long s with high stroke\"}}},{\"category\":\"Ll\",\"key\":\"018D\",\"mappings\":{\"default\":{\"default\":\"turned delta\"}}},{\"category\":\"Ll\",\"key\":\"1E9B\",\"mappings\":{\"default\":{\"default\":\"long s with dot above\"}}},{\"category\":\"Ll\",\"key\":\"1E9F\",\"mappings\":{\"default\":{\"default\":\"delta\"}}},{\"category\":\"Ll\",\"key\":\"0138\",\"mappings\":{\"default\":{\"default\":\"kra\"}}},{\"category\":\"Ll\",\"key\":\"017F\",\"mappings\":{\"default\":{\"default\":\"long s\"}}},{\"category\":\"Ll\",\"key\":\"0183\",\"mappings\":{\"default\":{\"default\":\"b with topbar\"}}},{\"category\":\"Ll\",\"key\":\"0185\",\"mappings\":{\"default\":{\"default\":\"tone six\"}}},{\"category\":\"Ll\",\"key\":\"0188\",\"mappings\":{\"default\":{\"default\":\"c with hook\"}}},{\"category\":\"Ll\",\"key\":\"018C\",\"mappings\":{\"default\":{\"default\":\"d with topbar\"}}},{\"category\":\"Ll\",\"key\":\"0192\",\"mappings\":{\"default\":{\"default\":\"f with hook\"}}},{\"category\":\"Ll\",\"key\":\"0195\",\"mappings\":{\"default\":{\"default\":\"hv\"}}},{\"category\":\"Ll\",\"key\":\"0199\",\"mappings\":{\"default\":{\"default\":\"k with hook\"}}},{\"category\":\"Ll\",\"key\":\"019A\",\"mappings\":{\"default\":{\"default\":\"l with bar\"}}},{\"category\":\"Ll\",\"key\":\"019E\",\"mappings\":{\"default\":{\"default\":\"n with long right leg\"}}},{\"category\":\"Ll\",\"key\":\"01A1\",\"mappings\":{\"default\":{\"default\":\"o with horn\"}}},{\"category\":\"Ll\",\"key\":\"01A3\",\"mappings\":{\"default\":{\"default\":\"oi\"}}},{\"category\":\"Ll\",\"key\":\"01A5\",\"mappings\":{\"default\":{\"default\":\"p with hook\"}}},{\"category\":\"Ll\",\"key\":\"01A8\",\"mappings\":{\"default\":{\"default\":\"tone two\"}}},{\"category\":\"Ll\",\"key\":\"01AA\",\"mappings\":{\"default\":{\"default\":\"latin letter reversed esh loop\"}}},{\"category\":\"Ll\",\"key\":\"01AB\",\"mappings\":{\"default\":{\"default\":\"t with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"01AD\",\"mappings\":{\"default\":{\"default\":\"t with hook\"}}},{\"category\":\"Ll\",\"key\":\"01B0\",\"mappings\":{\"default\":{\"default\":\"u with horn\"}}},{\"category\":\"Ll\",\"key\":\"01B4\",\"mappings\":{\"default\":{\"default\":\"y with hook\"}}},{\"category\":\"Ll\",\"key\":\"01B9\",\"mappings\":{\"default\":{\"default\":\"ezh reversed\"}}},{\"category\":\"Ll\",\"key\":\"01BA\",\"mappings\":{\"default\":{\"default\":\"ezh with tail\"}}},{\"category\":\"Ll\",\"key\":\"01BD\",\"mappings\":{\"default\":{\"default\":\"tone five\"}}},{\"category\":\"Ll\",\"key\":\"01BF\",\"mappings\":{\"default\":{\"default\":\"latin letter wynn\"}}},{\"category\":\"Ll\",\"key\":\"01C6\",\"mappings\":{\"default\":{\"default\":\"dz with caron\"}}},{\"category\":\"Ll\",\"key\":\"01C9\",\"mappings\":{\"default\":{\"default\":\"lj\"}}},{\"category\":\"Ll\",\"key\":\"01CC\",\"mappings\":{\"default\":{\"default\":\"nj\"}}},{\"category\":\"Ll\",\"key\":\"01E3\",\"mappings\":{\"default\":{\"default\":\"ae with macron\"}}},{\"category\":\"Ll\",\"key\":\"01EF\",\"mappings\":{\"default\":{\"default\":\"ezh with caron\"}}},{\"category\":\"Ll\",\"key\":\"01F3\",\"mappings\":{\"default\":{\"default\":\"dz\"}}},{\"category\":\"Ll\",\"key\":\"021D\",\"mappings\":{\"default\":{\"default\":\"yogh\"}}},{\"category\":\"Ll\",\"key\":\"026E\",\"mappings\":{\"default\":{\"default\":\"lezh\"}}},{\"category\":\"Ll\",\"key\":\"0292\",\"mappings\":{\"default\":{\"default\":\"ezh\"}}},{\"category\":\"Ll\",\"key\":\"0293\",\"mappings\":{\"default\":{\"default\":\"ezh with curl\"}}},{\"category\":\"Ll\",\"key\":\"02A4\",\"mappings\":{\"default\":{\"default\":\"dezh digraph\"}}},{\"category\":\"Ll\",\"key\":\"01DD\",\"mappings\":{\"default\":{\"default\":\"turned e\"}}},{\"category\":\"Ll\",\"key\":\"01FD\",\"mappings\":{\"default\":{\"default\":\"ae with acute\"}}},{\"category\":\"Ll\",\"key\":\"0221\",\"mappings\":{\"default\":{\"default\":\"d with curl\"}}},{\"category\":\"Ll\",\"key\":\"0223\",\"mappings\":{\"default\":{\"default\":\"ou\"}}},{\"category\":\"Ll\",\"key\":\"0225\",\"mappings\":{\"default\":{\"default\":\"z with hook\"}}},{\"category\":\"Ll\",\"key\":\"0234\",\"mappings\":{\"default\":{\"default\":\"l with curl\"}}},{\"category\":\"Ll\",\"key\":\"0235\",\"mappings\":{\"default\":{\"default\":\"n with curl\"}}},{\"category\":\"Ll\",\"key\":\"0236\",\"mappings\":{\"default\":{\"default\":\"t with curl\"}}},{\"category\":\"Ll\",\"key\":\"0238\",\"mappings\":{\"default\":{\"default\":\"db digraph\"}}},{\"category\":\"Ll\",\"key\":\"0239\",\"mappings\":{\"default\":{\"default\":\"qp digraph\"}}},{\"category\":\"Ll\",\"key\":\"023F\",\"mappings\":{\"default\":{\"default\":\"s with swash tail\"}}},{\"category\":\"Ll\",\"key\":\"0240\",\"mappings\":{\"default\":{\"default\":\"z with swash tail\"}}},{\"category\":\"Ll\",\"key\":\"0242\",\"mappings\":{\"default\":{\"default\":\"glottal stop\"}}},{\"category\":\"Ll\",\"key\":\"024B\",\"mappings\":{\"default\":{\"default\":\"q with hook tail\"}}},{\"category\":\"Ll\",\"key\":\"0250\",\"mappings\":{\"default\":{\"default\":\"turned a\"}}},{\"category\":\"Ll\",\"key\":\"0251\",\"mappings\":{\"default\":{\"default\":\"alpha\"}}},{\"category\":\"Ll\",\"key\":\"0252\",\"mappings\":{\"default\":{\"default\":\"turned alpha\"}}},{\"category\":\"Ll\",\"key\":\"0253\",\"mappings\":{\"default\":{\"default\":\"b with hook\"}}},{\"category\":\"Ll\",\"key\":\"0254\",\"mappings\":{\"default\":{\"default\":\"open o\"}}},{\"category\":\"Ll\",\"key\":\"0255\",\"mappings\":{\"default\":{\"default\":\"c with curl\"}}},{\"category\":\"Ll\",\"key\":\"0256\",\"mappings\":{\"default\":{\"default\":\"d with tail\"}}},{\"category\":\"Ll\",\"key\":\"0257\",\"mappings\":{\"default\":{\"default\":\"d with hook\"}}},{\"category\":\"Ll\",\"key\":\"0258\",\"mappings\":{\"default\":{\"default\":\"reversed e\"}}},{\"category\":\"Ll\",\"key\":\"0259\",\"mappings\":{\"default\":{\"default\":\"schwa\"}}},{\"category\":\"Ll\",\"key\":\"025A\",\"mappings\":{\"default\":{\"default\":\"schwa with hook\"}}},{\"category\":\"Ll\",\"key\":\"025B\",\"mappings\":{\"default\":{\"default\":\"open e\"}}},{\"category\":\"Ll\",\"key\":\"025C\",\"mappings\":{\"default\":{\"default\":\"reversed open e\"}}},{\"category\":\"Ll\",\"key\":\"025D\",\"mappings\":{\"default\":{\"default\":\"reversed open e with hook\"}}},{\"category\":\"Ll\",\"key\":\"025E\",\"mappings\":{\"default\":{\"default\":\"closed reversed open e\"}}},{\"category\":\"Ll\",\"key\":\"0260\",\"mappings\":{\"default\":{\"default\":\"g with hook\"}}},{\"category\":\"Ll\",\"key\":\"0261\",\"mappings\":{\"default\":{\"default\":\"script g\"}}},{\"category\":\"Ll\",\"key\":\"0263\",\"mappings\":{\"default\":{\"default\":\"gamma\"}}},{\"category\":\"Ll\",\"key\":\"0264\",\"mappings\":{\"default\":{\"default\":\"rams horn\"}}},{\"category\":\"Ll\",\"key\":\"0265\",\"mappings\":{\"default\":{\"default\":\"turned h\"}}},{\"category\":\"Ll\",\"key\":\"0266\",\"mappings\":{\"default\":{\"default\":\"h with hook\"}}},{\"category\":\"Ll\",\"key\":\"0267\",\"mappings\":{\"default\":{\"default\":\"heng with hook\"}}},{\"category\":\"Ll\",\"key\":\"0269\",\"mappings\":{\"default\":{\"default\":\"iota\"}}},{\"category\":\"Ll\",\"key\":\"026B\",\"mappings\":{\"default\":{\"default\":\"l with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"026C\",\"mappings\":{\"default\":{\"default\":\"l with belt\"}}},{\"category\":\"Ll\",\"key\":\"026D\",\"mappings\":{\"default\":{\"default\":\"l with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"026F\",\"mappings\":{\"default\":{\"default\":\"turned m\"}}},{\"category\":\"Ll\",\"key\":\"0270\",\"mappings\":{\"default\":{\"default\":\"turned m with long leg\"}}},{\"category\":\"Ll\",\"key\":\"0271\",\"mappings\":{\"default\":{\"default\":\"m with hook\"}}},{\"category\":\"Ll\",\"key\":\"0272\",\"mappings\":{\"default\":{\"default\":\"n with left hook\"}}},{\"category\":\"Ll\",\"key\":\"0273\",\"mappings\":{\"default\":{\"default\":\"n with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"0275\",\"mappings\":{\"default\":{\"default\":\"barred o\"}}},{\"category\":\"Ll\",\"key\":\"0277\",\"mappings\":{\"default\":{\"default\":\"closed omega\"}}},{\"category\":\"Ll\",\"key\":\"0278\",\"mappings\":{\"default\":{\"default\":\"phi\"}}},{\"category\":\"Ll\",\"key\":\"0279\",\"mappings\":{\"default\":{\"default\":\"turned r\"}}},{\"category\":\"Ll\",\"key\":\"027A\",\"mappings\":{\"default\":{\"default\":\"turned r with long leg\"}}},{\"category\":\"Ll\",\"key\":\"027B\",\"mappings\":{\"default\":{\"default\":\"turned r with hook\"}}},{\"category\":\"Ll\",\"key\":\"027C\",\"mappings\":{\"default\":{\"default\":\"r with long leg\"}}},{\"category\":\"Ll\",\"key\":\"027D\",\"mappings\":{\"default\":{\"default\":\"r with tail\"}}},{\"category\":\"Ll\",\"key\":\"027E\",\"mappings\":{\"default\":{\"default\":\"r with fishhook\"}}},{\"category\":\"Ll\",\"key\":\"027F\",\"mappings\":{\"default\":{\"default\":\"reversed r with fishhook\"}}},{\"category\":\"Ll\",\"key\":\"0282\",\"mappings\":{\"default\":{\"default\":\"s with hook\"}}},{\"category\":\"Ll\",\"key\":\"0283\",\"mappings\":{\"default\":{\"default\":\"esh\"}}},{\"category\":\"Ll\",\"key\":\"0285\",\"mappings\":{\"default\":{\"default\":\"squat reversed esh\"}}},{\"category\":\"Ll\",\"key\":\"0286\",\"mappings\":{\"default\":{\"default\":\"esh with curl\"}}},{\"category\":\"Ll\",\"key\":\"0287\",\"mappings\":{\"default\":{\"default\":\"turned t\"}}},{\"category\":\"Ll\",\"key\":\"0288\",\"mappings\":{\"default\":{\"default\":\"t with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"0289\",\"mappings\":{\"default\":{\"default\":\"u bar\"}}},{\"category\":\"Ll\",\"key\":\"028A\",\"mappings\":{\"default\":{\"default\":\"upsilon\"}}},{\"category\":\"Ll\",\"key\":\"028B\",\"mappings\":{\"default\":{\"default\":\"v with hook\"}}},{\"category\":\"Ll\",\"key\":\"028C\",\"mappings\":{\"default\":{\"default\":\"turned v\"}}},{\"category\":\"Ll\",\"key\":\"028D\",\"mappings\":{\"default\":{\"default\":\"turned w\"}}},{\"category\":\"Ll\",\"key\":\"028E\",\"mappings\":{\"default\":{\"default\":\"turned y\"}}},{\"category\":\"Ll\",\"key\":\"0290\",\"mappings\":{\"default\":{\"default\":\"z with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"0291\",\"mappings\":{\"default\":{\"default\":\"z with curl\"}}},{\"category\":\"Ll\",\"key\":\"0295\",\"mappings\":{\"default\":{\"default\":\"latin letter pharyngeal voiced fricative\"}}},{\"category\":\"Ll\",\"key\":\"0296\",\"mappings\":{\"default\":{\"default\":\"latin letter inverted glottal stop\"}}},{\"category\":\"Ll\",\"key\":\"0297\",\"mappings\":{\"default\":{\"default\":\"latin letter stretched c\"}}},{\"category\":\"Ll\",\"key\":\"0298\",\"mappings\":{\"default\":{\"default\":\"latin letter bilabial click\"}}},{\"category\":\"Ll\",\"key\":\"029A\",\"mappings\":{\"default\":{\"default\":\"closed open e\"}}},{\"category\":\"Ll\",\"key\":\"029E\",\"mappings\":{\"default\":{\"default\":\"turned k\"}}},{\"category\":\"Ll\",\"key\":\"02A0\",\"mappings\":{\"default\":{\"default\":\"q with hook\"}}},{\"category\":\"Ll\",\"key\":\"02A3\",\"mappings\":{\"default\":{\"default\":\"dz digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A5\",\"mappings\":{\"default\":{\"default\":\"dz digraph with curl\"}}},{\"category\":\"Ll\",\"key\":\"02A6\",\"mappings\":{\"default\":{\"default\":\"ts digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A7\",\"mappings\":{\"default\":{\"default\":\"tesh digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A8\",\"mappings\":{\"default\":{\"default\":\"tc digraph with curl\"}}},{\"category\":\"Ll\",\"key\":\"02A9\",\"mappings\":{\"default\":{\"default\":\"feng digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AA\",\"mappings\":{\"default\":{\"default\":\"ls digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AB\",\"mappings\":{\"default\":{\"default\":\"lz digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AC\",\"mappings\":{\"default\":{\"default\":\"latin letter bilabial percussive\"}}},{\"category\":\"Ll\",\"key\":\"02AD\",\"mappings\":{\"default\":{\"default\":\"latin letter bidental percussive\"}}},{\"category\":\"Ll\",\"key\":\"02AE\",\"mappings\":{\"default\":{\"default\":\"turned h with fishhook\"}}},{\"category\":\"Ll\",\"key\":\"02AF\",\"mappings\":{\"default\":{\"default\":\"turned h with fishhook and tail\"}}},{\"category\":\"Ll\",\"key\":\"1D02\",\"mappings\":{\"default\":{\"default\":\"turned ae\"}}},{\"category\":\"Ll\",\"key\":\"1D08\",\"mappings\":{\"default\":{\"default\":\"turned open e\"}}},{\"category\":\"Ll\",\"key\":\"1D09\",\"mappings\":{\"default\":{\"default\":\"turned i\"}}},{\"category\":\"Ll\",\"key\":\"1D11\",\"mappings\":{\"default\":{\"default\":\"sideways o\"}}},{\"category\":\"Ll\",\"key\":\"1D12\",\"mappings\":{\"default\":{\"default\":\"sideways open o\"}}},{\"category\":\"Ll\",\"key\":\"1D14\",\"mappings\":{\"default\":{\"default\":\"turned oe\"}}},{\"category\":\"Ll\",\"key\":\"1D16\",\"mappings\":{\"default\":{\"default\":\"top half o\"}}},{\"category\":\"Ll\",\"key\":\"1D17\",\"mappings\":{\"default\":{\"default\":\"bottom half o\"}}},{\"category\":\"Ll\",\"key\":\"1D1D\",\"mappings\":{\"default\":{\"default\":\"sideways u\"}}},{\"category\":\"Ll\",\"key\":\"1D1E\",\"mappings\":{\"default\":{\"default\":\"sideways diaeresized u\"}}},{\"category\":\"Ll\",\"key\":\"1D1F\",\"mappings\":{\"default\":{\"default\":\"sideways turned m\"}}},{\"category\":\"Ll\",\"key\":\"1D24\",\"mappings\":{\"default\":{\"default\":\"latin letter voiced laryngeal spirant\"}}},{\"category\":\"Ll\",\"key\":\"1D25\",\"mappings\":{\"default\":{\"default\":\"latin letter ain\"}}},{\"category\":\"Ll\",\"key\":\"1D6B\",\"mappings\":{\"default\":{\"default\":\"ue\"}}},{\"category\":\"Ll\",\"key\":\"1D6C\",\"mappings\":{\"default\":{\"default\":\"b with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6D\",\"mappings\":{\"default\":{\"default\":\"d with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6E\",\"mappings\":{\"default\":{\"default\":\"f with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6F\",\"mappings\":{\"default\":{\"default\":\"m with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D70\",\"mappings\":{\"default\":{\"default\":\"n with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D71\",\"mappings\":{\"default\":{\"default\":\"p with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D72\",\"mappings\":{\"default\":{\"default\":\"r with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D73\",\"mappings\":{\"default\":{\"default\":\"r with fishhook and middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D74\",\"mappings\":{\"default\":{\"default\":\"s with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D75\",\"mappings\":{\"default\":{\"default\":\"t with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D76\",\"mappings\":{\"default\":{\"default\":\"z with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D77\",\"mappings\":{\"default\":{\"default\":\"turned g\"}}},{\"category\":\"Ll\",\"key\":\"1D79\",\"mappings\":{\"default\":{\"default\":\"insular g\"}}},{\"category\":\"Ll\",\"key\":\"1D7A\",\"mappings\":{\"default\":{\"default\":\"th with strikethrough\"}}},{\"category\":\"Ll\",\"key\":\"1D80\",\"mappings\":{\"default\":{\"default\":\"b with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D81\",\"mappings\":{\"default\":{\"default\":\"d with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D82\",\"mappings\":{\"default\":{\"default\":\"f with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D83\",\"mappings\":{\"default\":{\"default\":\"g with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D84\",\"mappings\":{\"default\":{\"default\":\"k with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D85\",\"mappings\":{\"default\":{\"default\":\"l with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D86\",\"mappings\":{\"default\":{\"default\":\"m with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D87\",\"mappings\":{\"default\":{\"default\":\"n with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D88\",\"mappings\":{\"default\":{\"default\":\"p with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D89\",\"mappings\":{\"default\":{\"default\":\"r with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8A\",\"mappings\":{\"default\":{\"default\":\"s with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8B\",\"mappings\":{\"default\":{\"default\":\"esh with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8C\",\"mappings\":{\"default\":{\"default\":\"v with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8D\",\"mappings\":{\"default\":{\"default\":\"x with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8E\",\"mappings\":{\"default\":{\"default\":\"z with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8F\",\"mappings\":{\"default\":{\"default\":\"a with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D90\",\"mappings\":{\"default\":{\"default\":\"alpha with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D91\",\"mappings\":{\"default\":{\"default\":\"d with hook and tail\"}}},{\"category\":\"Ll\",\"key\":\"1D92\",\"mappings\":{\"default\":{\"default\":\"e with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D93\",\"mappings\":{\"default\":{\"default\":\"open e with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D94\",\"mappings\":{\"default\":{\"default\":\"reversed open e with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D95\",\"mappings\":{\"default\":{\"default\":\"schwa with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D96\",\"mappings\":{\"default\":{\"default\":\"i with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D97\",\"mappings\":{\"default\":{\"default\":\"open o with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D98\",\"mappings\":{\"default\":{\"default\":\"esh with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D99\",\"mappings\":{\"default\":{\"default\":\"u with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D9A\",\"mappings\":{\"default\":{\"default\":\"ezh with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"0149\",\"mappings\":{\"default\":{\"default\":\"n preceded by apostrophe\"}}},{\"category\":\"Ll\",\"key\":\"014B\",\"mappings\":{\"default\":{\"default\":\"eng\"}}}]\n,\n\"en/symbols/latin-lower-single-accent.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"key\":\"00E0\",\"mappings\":{\"default\":{\"default\":\"a grave\"},\"mathspeak\":{\"default\":\"modifying above a with grave\",\"brief\":\"mod above a with grave\",\"sbrief\":\"mod above a with grave\"}}},{\"category\":\"Ll\",\"key\":\"00E1\",\"mappings\":{\"default\":{\"default\":\"a acute\"},\"mathspeak\":{\"default\":\"modifying above a with acute\",\"brief\":\"mod above a with acute\",\"sbrief\":\"mod above a with acute\"}}},{\"category\":\"Ll\",\"key\":\"00E2\",\"mappings\":{\"default\":{\"default\":\"a hat\"},\"mathspeak\":{\"default\":\"modifying above a with caret\",\"brief\":\"mod above a with caret\",\"sbrief\":\"mod above a with caret\"}}},{\"category\":\"Ll\",\"key\":\"00E3\",\"mappings\":{\"default\":{\"default\":\"a tilde\"},\"mathspeak\":{\"default\":\"a overtilde\",\"brief\":\"a overtilde\",\"sbrief\":\"a overtilde\"}}},{\"category\":\"Ll\",\"key\":\"00E4\",\"mappings\":{\"default\":{\"default\":\"a double overdot\"},\"mathspeak\":{\"default\":\"modifying above a with double dot\",\"brief\":\"mod above a with double dot\",\"sbrief\":\"mod above a with double dot\"}}},{\"category\":\"Ll\",\"key\":\"00E5\",\"mappings\":{\"default\":{\"default\":\"a ring\"},\"mathspeak\":{\"default\":\"modifying above a with ring\",\"brief\":\"mod above a with ring\",\"sbrief\":\"mod above a with ring\"}}},{\"category\":\"Ll\",\"key\":\"00E7\",\"mappings\":{\"default\":{\"default\":\"c cedilla\"},\"mathspeak\":{\"default\":\"modifying above c with cedilla\",\"brief\":\"mod above c with cedilla\",\"sbrief\":\"mod above c with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"00E8\",\"mappings\":{\"default\":{\"default\":\"e grave\"},\"mathspeak\":{\"default\":\"modifying above e with grave\",\"brief\":\"mod above e with grave\",\"sbrief\":\"mod above e with grave\"}}},{\"category\":\"Ll\",\"key\":\"00E9\",\"mappings\":{\"default\":{\"default\":\"e acute\"},\"mathspeak\":{\"default\":\"modifying above e with acute\",\"brief\":\"mod above e with acute\",\"sbrief\":\"mod above e with acute\"}}},{\"category\":\"Ll\",\"key\":\"00EA\",\"mappings\":{\"default\":{\"default\":\"e hat\"},\"mathspeak\":{\"default\":\"modifying above e with caret\",\"brief\":\"mod above e with caret\",\"sbrief\":\"mod above e with caret\"}}},{\"category\":\"Ll\",\"key\":\"00EB\",\"mappings\":{\"default\":{\"default\":\"e double overdot\"},\"mathspeak\":{\"default\":\"modifying above e with double dot\",\"brief\":\"mod above e with double dot\",\"sbrief\":\"mod above e with double dot\"}}},{\"category\":\"Ll\",\"key\":\"00EC\",\"mappings\":{\"default\":{\"default\":\"i grave\"},\"mathspeak\":{\"default\":\"modifying above i with grave\",\"brief\":\"mod above i with grave\",\"sbrief\":\"mod above i with grave\"}}},{\"category\":\"Ll\",\"key\":\"00ED\",\"mappings\":{\"default\":{\"default\":\"i acute\"},\"mathspeak\":{\"default\":\"modifying above i with acute\",\"brief\":\"mod above i with acute\",\"sbrief\":\"mod above i with acute\"}}},{\"category\":\"Ll\",\"key\":\"00EE\",\"mappings\":{\"default\":{\"default\":\"i hat\"},\"mathspeak\":{\"default\":\"modifying above i with caret\",\"brief\":\"mod above i with caret\",\"sbrief\":\"mod above i with caret\"}}},{\"category\":\"Ll\",\"key\":\"00EF\",\"mappings\":{\"default\":{\"default\":\"i double overdot\"},\"mathspeak\":{\"default\":\"modifying above i with double dot\",\"brief\":\"mod above i with double dot\",\"sbrief\":\"mod above i with double dot\"}}},{\"category\":\"Ll\",\"key\":\"00F1\",\"mappings\":{\"default\":{\"default\":\"n tilde\"},\"mathspeak\":{\"default\":\"n overtilde\",\"brief\":\"n overtilde\",\"sbrief\":\"n overtilde\"}}},{\"category\":\"Ll\",\"key\":\"00F2\",\"mappings\":{\"default\":{\"default\":\"o grave\"},\"mathspeak\":{\"default\":\"modifying above o with grave\",\"brief\":\"mod above o with grave\",\"sbrief\":\"mod above o with grave\"}}},{\"category\":\"Ll\",\"key\":\"00F3\",\"mappings\":{\"default\":{\"default\":\"o acute\"},\"mathspeak\":{\"default\":\"modifying above o with acute\",\"brief\":\"mod above o with acute\",\"sbrief\":\"mod above o with acute\"}}},{\"category\":\"Ll\",\"key\":\"00F4\",\"mappings\":{\"default\":{\"default\":\"o hat\"},\"mathspeak\":{\"default\":\"modifying above o with caret\",\"brief\":\"mod above o with caret\",\"sbrief\":\"mod above o with caret\"}}},{\"category\":\"Ll\",\"key\":\"00F5\",\"mappings\":{\"default\":{\"default\":\"o tilde\"},\"mathspeak\":{\"default\":\"o overtilde\",\"brief\":\"o overtilde\",\"sbrief\":\"o overtilde\"}}},{\"category\":\"Ll\",\"key\":\"00F6\",\"mappings\":{\"default\":{\"default\":\"o double overdot\"},\"mathspeak\":{\"default\":\"modifying above o with double dot\",\"brief\":\"mod above o with double dot\",\"sbrief\":\"mod above o with double dot\"}}},{\"category\":\"Ll\",\"key\":\"00F9\",\"mappings\":{\"default\":{\"default\":\"u grave\"},\"mathspeak\":{\"default\":\"modifying above u with grave\",\"brief\":\"mod above u with grave\",\"sbrief\":\"mod above u with grave\"}}},{\"category\":\"Ll\",\"key\":\"00FA\",\"mappings\":{\"default\":{\"default\":\"u acute\"},\"mathspeak\":{\"default\":\"modifying above u with acute\",\"brief\":\"mod above u with acute\",\"sbrief\":\"mod above u with acute\"}}},{\"category\":\"Ll\",\"key\":\"00FB\",\"mappings\":{\"default\":{\"default\":\"u hat\"},\"mathspeak\":{\"default\":\"modifying above u with caret\",\"brief\":\"mod above u with caret\",\"sbrief\":\"mod above u with caret\"}}},{\"category\":\"Ll\",\"key\":\"00FC\",\"mappings\":{\"default\":{\"default\":\"u double overdot\"},\"mathspeak\":{\"default\":\"modifying above u with double dot\",\"brief\":\"mod above u with double dot\",\"sbrief\":\"mod above u with double dot\"}}},{\"category\":\"Ll\",\"key\":\"00FD\",\"mappings\":{\"default\":{\"default\":\"y acute\"},\"mathspeak\":{\"default\":\"modifying above y with acute\",\"brief\":\"mod above y with acute\",\"sbrief\":\"mod above y with acute\"}}},{\"category\":\"Ll\",\"key\":\"00FF\",\"mappings\":{\"default\":{\"default\":\"y double overdot\"},\"mathspeak\":{\"default\":\"modifying above y with double dot\",\"brief\":\"mod above y with double dot\",\"sbrief\":\"mod above y with double dot\"}}},{\"category\":\"Ll\",\"key\":\"0101\",\"mappings\":{\"default\":{\"default\":\"a overbar\"},\"mathspeak\":{\"default\":\"a overbar\",\"brief\":\"a overbar\",\"sbrief\":\"a overbar\"}}},{\"category\":\"Ll\",\"key\":\"0103\",\"mappings\":{\"default\":{\"default\":\"a breve\"},\"mathspeak\":{\"default\":\"modifying above a with breve\",\"brief\":\"mod above a with breve\",\"sbrief\":\"mod above a with breve\"}}},{\"category\":\"Ll\",\"key\":\"0105\",\"mappings\":{\"default\":{\"default\":\"a ogonek\"},\"mathspeak\":{\"default\":\"modifying above a with ogonek\",\"brief\":\"mod above a with ogonek\",\"sbrief\":\"mod above a with ogonek\"}}},{\"category\":\"Ll\",\"key\":\"0107\",\"mappings\":{\"default\":{\"default\":\"c acute\"},\"mathspeak\":{\"default\":\"modifying above c with acute\",\"brief\":\"mod above c with acute\",\"sbrief\":\"mod above c with acute\"}}},{\"category\":\"Ll\",\"key\":\"0109\",\"mappings\":{\"default\":{\"default\":\"c hat\"},\"mathspeak\":{\"default\":\"modifying above c with caret\",\"brief\":\"mod above c with caret\",\"sbrief\":\"mod above c with caret\"}}},{\"category\":\"Ll\",\"key\":\"010B\",\"mappings\":{\"default\":{\"default\":\"c overdot\"},\"mathspeak\":{\"default\":\"modifying above c with dot\",\"brief\":\"mod above c with dot\",\"sbrief\":\"mod above c with dot\"}}},{\"category\":\"Ll\",\"key\":\"010D\",\"mappings\":{\"default\":{\"default\":\"c caron\"},\"mathspeak\":{\"default\":\"modifying above c with caron\",\"brief\":\"mod above c with caron\",\"sbrief\":\"mod above c with caron\"}}},{\"category\":\"Ll\",\"key\":\"010F\",\"mappings\":{\"default\":{\"default\":\"d caron\"},\"mathspeak\":{\"default\":\"modifying above d with caron\",\"brief\":\"mod above d with caron\",\"sbrief\":\"mod above d with caron\"}}},{\"category\":\"Ll\",\"key\":\"0113\",\"mappings\":{\"default\":{\"default\":\"e overbar\"},\"mathspeak\":{\"default\":\"e overbar\",\"brief\":\"e overbar\",\"sbrief\":\"e overbar\"}}},{\"category\":\"Ll\",\"key\":\"0115\",\"mappings\":{\"default\":{\"default\":\"e breve\"},\"mathspeak\":{\"default\":\"modifying above e with breve\",\"brief\":\"mod above e with breve\",\"sbrief\":\"mod above e with breve\"}}},{\"category\":\"Ll\",\"key\":\"0117\",\"mappings\":{\"default\":{\"default\":\"e overdot\"},\"mathspeak\":{\"default\":\"modifying above e with dot\",\"brief\":\"mod above e with dot\",\"sbrief\":\"mod above e with dot\"}}},{\"category\":\"Ll\",\"key\":\"0119\",\"mappings\":{\"default\":{\"default\":\"e ogonek\"},\"mathspeak\":{\"default\":\"modifying above e with ogonek\",\"brief\":\"mod above e with ogonek\",\"sbrief\":\"mod above e with ogonek\"}}},{\"category\":\"Ll\",\"key\":\"011B\",\"mappings\":{\"default\":{\"default\":\"e caron\"},\"mathspeak\":{\"default\":\"modifying above e with caron\",\"brief\":\"mod above e with caron\",\"sbrief\":\"mod above e with caron\"}}},{\"category\":\"Ll\",\"key\":\"011D\",\"mappings\":{\"default\":{\"default\":\"g hat\"},\"mathspeak\":{\"default\":\"modifying above g with caret\",\"brief\":\"mod above g with caret\",\"sbrief\":\"mod above g with caret\"}}},{\"category\":\"Ll\",\"key\":\"011F\",\"mappings\":{\"default\":{\"default\":\"g breve\"},\"mathspeak\":{\"default\":\"modifying above g with breve\",\"brief\":\"mod above g with breve\",\"sbrief\":\"mod above g with breve\"}}},{\"category\":\"Ll\",\"key\":\"0121\",\"mappings\":{\"default\":{\"default\":\"g overdot\"},\"mathspeak\":{\"default\":\"modifying above g with dot\",\"brief\":\"mod above g with dot\",\"sbrief\":\"mod above g with dot\"}}},{\"category\":\"Ll\",\"key\":\"0123\",\"mappings\":{\"default\":{\"default\":\"g cedilla\"},\"mathspeak\":{\"default\":\"modifying above g with cedilla\",\"brief\":\"mod above g with cedilla\",\"sbrief\":\"mod above g with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"0125\",\"mappings\":{\"default\":{\"default\":\"h hat\"},\"mathspeak\":{\"default\":\"modifying above h with caret\",\"brief\":\"mod above h with caret\",\"sbrief\":\"mod above h with caret\"}}},{\"category\":\"Ll\",\"key\":\"0129\",\"mappings\":{\"default\":{\"default\":\"i tilde\"},\"mathspeak\":{\"default\":\"i overtilde\",\"brief\":\"i overtilde\",\"sbrief\":\"i overtilde\"}}},{\"category\":\"Ll\",\"key\":\"012B\",\"mappings\":{\"default\":{\"default\":\"i overbar\"},\"mathspeak\":{\"default\":\"i overbar\",\"brief\":\"i overbar\",\"sbrief\":\"i overbar\"}}},{\"category\":\"Ll\",\"key\":\"012D\",\"mappings\":{\"default\":{\"default\":\"i breve\"},\"mathspeak\":{\"default\":\"modifying above i with breve\",\"brief\":\"mod above i with breve\",\"sbrief\":\"mod above i with breve\"}}},{\"category\":\"Ll\",\"key\":\"012F\",\"mappings\":{\"default\":{\"default\":\"i ogonek\"},\"mathspeak\":{\"default\":\"modifying above i with ogonek\",\"brief\":\"mod above i with ogonek\",\"sbrief\":\"mod above i with ogonek\"}}},{\"category\":\"Ll\",\"key\":\"0131\",\"mappings\":{\"default\":{\"default\":\"dotless i\"},\"mathspeak\":{\"default\":\"modifying above dotless i\",\"brief\":\"mod above dotless i\",\"sbrief\":\"mod above dotless i\"}}},{\"category\":\"Ll\",\"key\":\"0135\",\"mappings\":{\"default\":{\"default\":\"j hat\"},\"mathspeak\":{\"default\":\"modifying above j with caret\",\"brief\":\"mod above j with caret\",\"sbrief\":\"mod above j with caret\"}}},{\"category\":\"Ll\",\"key\":\"0137\",\"mappings\":{\"default\":{\"default\":\"k cedilla\"},\"mathspeak\":{\"default\":\"modifying above k with cedilla\",\"brief\":\"mod above k with cedilla\",\"sbrief\":\"mod above k with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"013A\",\"mappings\":{\"default\":{\"default\":\"l acute\"},\"mathspeak\":{\"default\":\"modifying above l with acute\",\"brief\":\"mod above l with acute\",\"sbrief\":\"mod above l with acute\"}}},{\"category\":\"Ll\",\"key\":\"013C\",\"mappings\":{\"default\":{\"default\":\"l cedilla\"},\"mathspeak\":{\"default\":\"modifying above l with cedilla\",\"brief\":\"mod above l with cedilla\",\"sbrief\":\"mod above l with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"013E\",\"mappings\":{\"default\":{\"default\":\"l caron\"},\"mathspeak\":{\"default\":\"modifying above l with caron\",\"brief\":\"mod above l with caron\",\"sbrief\":\"mod above l with caron\"}}},{\"category\":\"Ll\",\"key\":\"0140\",\"mappings\":{\"default\":{\"default\":\"l middle dot\"},\"mathspeak\":{\"default\":\"modifying above l with middle dot\",\"brief\":\"mod above l with middle dot\",\"sbrief\":\"mod above l with middle dot\"}}},{\"category\":\"Ll\",\"key\":\"0144\",\"mappings\":{\"default\":{\"default\":\"n acute\"},\"mathspeak\":{\"default\":\"modifying above n with acute\",\"brief\":\"mod above n with acute\",\"sbrief\":\"mod above n with acute\"}}},{\"category\":\"Ll\",\"key\":\"0146\",\"mappings\":{\"default\":{\"default\":\"n cedilla\"},\"mathspeak\":{\"default\":\"modifying above n with cedilla\",\"brief\":\"mod above n with cedilla\",\"sbrief\":\"mod above n with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"0148\",\"mappings\":{\"default\":{\"default\":\"n caron\"},\"mathspeak\":{\"default\":\"modifying above n with caron\",\"brief\":\"mod above n with caron\",\"sbrief\":\"mod above n with caron\"}}},{\"category\":\"Ll\",\"key\":\"014D\",\"mappings\":{\"default\":{\"default\":\"o overbar\"},\"mathspeak\":{\"default\":\"o overbar\",\"brief\":\"o overbar\",\"sbrief\":\"o overbar\"}}},{\"category\":\"Ll\",\"key\":\"014F\",\"mappings\":{\"default\":{\"default\":\"o breve\"},\"mathspeak\":{\"default\":\"modifying above o with breve\",\"brief\":\"mod above o with breve\",\"sbrief\":\"mod above o with breve\"}}},{\"category\":\"Ll\",\"key\":\"0151\",\"mappings\":{\"default\":{\"default\":\"o double acute\"},\"mathspeak\":{\"default\":\"modifying above o with double acute\",\"brief\":\"mod above o with double acute\",\"sbrief\":\"mod above o with double acute\"}}},{\"category\":\"Ll\",\"key\":\"0155\",\"mappings\":{\"default\":{\"default\":\"r acute\"},\"mathspeak\":{\"default\":\"modifying above r with acute\",\"brief\":\"mod above r with acute\",\"sbrief\":\"mod above r with acute\"}}},{\"category\":\"Ll\",\"key\":\"0157\",\"mappings\":{\"default\":{\"default\":\"r cedilla\"},\"mathspeak\":{\"default\":\"modifying above r with cedilla\",\"brief\":\"mod above r with cedilla\",\"sbrief\":\"mod above r with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"0159\",\"mappings\":{\"default\":{\"default\":\"r caron\"},\"mathspeak\":{\"default\":\"modifying above r with caron\",\"brief\":\"mod above r with caron\",\"sbrief\":\"mod above r with caron\"}}},{\"category\":\"Ll\",\"key\":\"015B\",\"mappings\":{\"default\":{\"default\":\"s acute\"},\"mathspeak\":{\"default\":\"modifying above s with acute\",\"brief\":\"mod above s with acute\",\"sbrief\":\"mod above s with acute\"}}},{\"category\":\"Ll\",\"key\":\"015D\",\"mappings\":{\"default\":{\"default\":\"s hat\"},\"mathspeak\":{\"default\":\"modifying above s with caret\",\"brief\":\"mod above s with caret\",\"sbrief\":\"mod above s with caret\"}}},{\"category\":\"Ll\",\"key\":\"015F\",\"mappings\":{\"default\":{\"default\":\"s cedilla\"},\"mathspeak\":{\"default\":\"modifying above s with cedilla\",\"brief\":\"mod above s with cedilla\",\"sbrief\":\"mod above s with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"0161\",\"mappings\":{\"default\":{\"default\":\"s caron\"},\"mathspeak\":{\"default\":\"modifying above s with caron\",\"brief\":\"mod above s with caron\",\"sbrief\":\"mod above s with caron\"}}},{\"category\":\"Ll\",\"key\":\"0163\",\"mappings\":{\"default\":{\"default\":\"t cedilla\"},\"mathspeak\":{\"default\":\"modifying above t with cedilla\",\"brief\":\"mod above t with cedilla\",\"sbrief\":\"mod above t with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"0165\",\"mappings\":{\"default\":{\"default\":\"t caron\"},\"mathspeak\":{\"default\":\"modifying above t with caron\",\"brief\":\"mod above t with caron\",\"sbrief\":\"mod above t with caron\"}}},{\"category\":\"Ll\",\"key\":\"0169\",\"mappings\":{\"default\":{\"default\":\"u tilde\"},\"mathspeak\":{\"default\":\"u overtilde\",\"brief\":\"u overtilde\",\"sbrief\":\"u overtilde\"}}},{\"category\":\"Ll\",\"key\":\"016B\",\"mappings\":{\"default\":{\"default\":\"u overbar\"},\"mathspeak\":{\"default\":\"u overbar\",\"brief\":\"u overbar\",\"sbrief\":\"u overbar\"}}},{\"category\":\"Ll\",\"key\":\"016D\",\"mappings\":{\"default\":{\"default\":\"u breve\"},\"mathspeak\":{\"default\":\"modifying above u with breve\",\"brief\":\"mod above u with breve\",\"sbrief\":\"mod above u with breve\"}}},{\"category\":\"Ll\",\"key\":\"016F\",\"mappings\":{\"default\":{\"default\":\"u ring\"},\"mathspeak\":{\"default\":\"modifying above u with ring\",\"brief\":\"mod above u with ring\",\"sbrief\":\"mod above u with ring\"}}},{\"category\":\"Ll\",\"key\":\"0171\",\"mappings\":{\"default\":{\"default\":\"u double acute\"},\"mathspeak\":{\"default\":\"modifying above u with double acute\",\"brief\":\"mod above u with double acute\",\"sbrief\":\"mod above u with double acute\"}}},{\"category\":\"Ll\",\"key\":\"0173\",\"mappings\":{\"default\":{\"default\":\"u ogonek\"},\"mathspeak\":{\"default\":\"modifying above u with ogonek\",\"brief\":\"mod above u with ogonek\",\"sbrief\":\"mod above u with ogonek\"}}},{\"category\":\"Ll\",\"key\":\"0175\",\"mappings\":{\"default\":{\"default\":\"w hat\"},\"mathspeak\":{\"default\":\"modifying above w with caret\",\"brief\":\"mod above w with caret\",\"sbrief\":\"mod above w with caret\"}}},{\"category\":\"Ll\",\"key\":\"0177\",\"mappings\":{\"default\":{\"default\":\"y hat\"},\"mathspeak\":{\"default\":\"modifying above y with caret\",\"brief\":\"mod above y with caret\",\"sbrief\":\"mod above y with caret\"}}},{\"category\":\"Ll\",\"key\":\"017A\",\"mappings\":{\"default\":{\"default\":\"z acute\"},\"mathspeak\":{\"default\":\"modifying above z with acute\",\"brief\":\"mod above z with acute\",\"sbrief\":\"mod above z with acute\"}}},{\"category\":\"Ll\",\"key\":\"017C\",\"mappings\":{\"default\":{\"default\":\"z overdot\"},\"mathspeak\":{\"default\":\"modifying above z with dot\",\"brief\":\"mod above z with dot\",\"sbrief\":\"mod above z with dot\"}}},{\"category\":\"Ll\",\"key\":\"017E\",\"mappings\":{\"default\":{\"default\":\"z caron\"},\"mathspeak\":{\"default\":\"modifying above z with caron\",\"brief\":\"mod above z with caron\",\"sbrief\":\"mod above z with caron\"}}},{\"category\":\"Ll\",\"key\":\"01CE\",\"mappings\":{\"default\":{\"default\":\"a caron\"},\"mathspeak\":{\"default\":\"modifying above a with caron\",\"brief\":\"mod above a with caron\",\"sbrief\":\"mod above a with caron\"}}},{\"category\":\"Ll\",\"key\":\"01D0\",\"mappings\":{\"default\":{\"default\":\"i caron\"},\"mathspeak\":{\"default\":\"modifying above i with caron\",\"brief\":\"mod above i with caron\",\"sbrief\":\"mod above i with caron\"}}},{\"category\":\"Ll\",\"key\":\"01D2\",\"mappings\":{\"default\":{\"default\":\"o caron\"},\"mathspeak\":{\"default\":\"modifying above o with caron\",\"brief\":\"mod above o with caron\",\"sbrief\":\"mod above o with caron\"}}},{\"category\":\"Ll\",\"key\":\"01D4\",\"mappings\":{\"default\":{\"default\":\"u caron\"},\"mathspeak\":{\"default\":\"modifying above u with caron\",\"brief\":\"mod above u with caron\",\"sbrief\":\"mod above u with caron\"}}},{\"category\":\"Ll\",\"key\":\"01E7\",\"mappings\":{\"default\":{\"default\":\"g caron\"},\"mathspeak\":{\"default\":\"modifying above g with caron\",\"brief\":\"mod above g with caron\",\"sbrief\":\"mod above g with caron\"}}},{\"category\":\"Ll\",\"key\":\"01E9\",\"mappings\":{\"default\":{\"default\":\"k caron\"},\"mathspeak\":{\"default\":\"modifying above k with caron\",\"brief\":\"mod above k with caron\",\"sbrief\":\"mod above k with caron\"}}},{\"category\":\"Ll\",\"key\":\"01EB\",\"mappings\":{\"default\":{\"default\":\"o ogonek\"},\"mathspeak\":{\"default\":\"modifying above o with ogonek\",\"brief\":\"mod above o with ogonek\",\"sbrief\":\"mod above o with ogonek\"}}},{\"category\":\"Ll\",\"key\":\"01F0\",\"mappings\":{\"default\":{\"default\":\"j caron\"},\"mathspeak\":{\"default\":\"modifying above j with caron\",\"brief\":\"mod above j with caron\",\"sbrief\":\"mod above j with caron\"}}},{\"category\":\"Ll\",\"key\":\"01F5\",\"mappings\":{\"default\":{\"default\":\"g acute\"},\"mathspeak\":{\"default\":\"modifying above g with acute\",\"brief\":\"mod above g with acute\",\"sbrief\":\"mod above g with acute\"}}},{\"category\":\"Ll\",\"key\":\"01F9\",\"mappings\":{\"default\":{\"default\":\"n grave\"},\"mathspeak\":{\"default\":\"modifying above n with grave\",\"brief\":\"mod above n with grave\",\"sbrief\":\"mod above n with grave\"}}},{\"category\":\"Ll\",\"key\":\"0201\",\"mappings\":{\"default\":{\"default\":\"a double grave\"},\"mathspeak\":{\"default\":\"modifying above a with double grave\",\"brief\":\"mod above a with double grave\",\"sbrief\":\"mod above a with double grave\"}}},{\"category\":\"Ll\",\"key\":\"0203\",\"mappings\":{\"default\":{\"default\":\"a inverted breve\"},\"mathspeak\":{\"default\":\"modifying above a with inverted breve\",\"brief\":\"mod above a with inverted breve\",\"sbrief\":\"mod above a with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"0205\",\"mappings\":{\"default\":{\"default\":\"e double grave\"},\"mathspeak\":{\"default\":\"modifying above e with double grave\",\"brief\":\"mod above e with double grave\",\"sbrief\":\"mod above e with double grave\"}}},{\"category\":\"Ll\",\"key\":\"0207\",\"mappings\":{\"default\":{\"default\":\"e inverted breve\"},\"mathspeak\":{\"default\":\"modifying above e with inverted breve\",\"brief\":\"mod above e with inverted breve\",\"sbrief\":\"mod above e with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"0209\",\"mappings\":{\"default\":{\"default\":\"i double grave\"},\"mathspeak\":{\"default\":\"modifying above i with double grave\",\"brief\":\"mod above i with double grave\",\"sbrief\":\"mod above i with double grave\"}}},{\"category\":\"Ll\",\"key\":\"020B\",\"mappings\":{\"default\":{\"default\":\"i inverted breve\"},\"mathspeak\":{\"default\":\"modifying above i with inverted breve\",\"brief\":\"mod above i with inverted breve\",\"sbrief\":\"mod above i with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"020D\",\"mappings\":{\"default\":{\"default\":\"o double grave\"},\"mathspeak\":{\"default\":\"modifying above o with double grave\",\"brief\":\"mod above o with double grave\",\"sbrief\":\"mod above o with double grave\"}}},{\"category\":\"Ll\",\"key\":\"020F\",\"mappings\":{\"default\":{\"default\":\"o inverted breve\"},\"mathspeak\":{\"default\":\"modifying above o with inverted breve\",\"brief\":\"mod above o with inverted breve\",\"sbrief\":\"mod above o with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"0211\",\"mappings\":{\"default\":{\"default\":\"r double grave\"},\"mathspeak\":{\"default\":\"modifying above r with double grave\",\"brief\":\"mod above r with double grave\",\"sbrief\":\"mod above r with double grave\"}}},{\"category\":\"Ll\",\"key\":\"0213\",\"mappings\":{\"default\":{\"default\":\"r inverted breve\"},\"mathspeak\":{\"default\":\"modifying above r with inverted breve\",\"brief\":\"mod above r with inverted breve\",\"sbrief\":\"mod above r with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"0215\",\"mappings\":{\"default\":{\"default\":\"u double grave\"},\"mathspeak\":{\"default\":\"modifying above u with double grave\",\"brief\":\"mod above u with double grave\",\"sbrief\":\"mod above u with double grave\"}}},{\"category\":\"Ll\",\"key\":\"0217\",\"mappings\":{\"default\":{\"default\":\"u inverted breve\"},\"mathspeak\":{\"default\":\"modifying above u with inverted breve\",\"brief\":\"mod above u with inverted breve\",\"sbrief\":\"mod above u with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"0219\",\"mappings\":{\"default\":{\"default\":\"s comma below\"},\"mathspeak\":{\"default\":\"modifying below s with comma below\",\"brief\":\"mod below s with comma below\",\"sbrief\":\"mod below s with comma below\"}}},{\"category\":\"Ll\",\"key\":\"021B\",\"mappings\":{\"default\":{\"default\":\"t comma below\"},\"mathspeak\":{\"default\":\"modifying below t with comma below\",\"brief\":\"mod below t with comma below\",\"sbrief\":\"mod below t with comma below\"}}},{\"category\":\"Ll\",\"key\":\"021F\",\"mappings\":{\"default\":{\"default\":\"h caron\"},\"mathspeak\":{\"default\":\"modifying above h with caron\",\"brief\":\"mod above h with caron\",\"sbrief\":\"mod above h with caron\"}}},{\"category\":\"Ll\",\"key\":\"0227\",\"mappings\":{\"default\":{\"default\":\"a overdot\"},\"mathspeak\":{\"default\":\"modifying above a with dot\",\"brief\":\"mod above a with dot\",\"sbrief\":\"mod above a with dot\"}}},{\"category\":\"Ll\",\"key\":\"0229\",\"mappings\":{\"default\":{\"default\":\"e cedilla\"},\"mathspeak\":{\"default\":\"modifying above e with cedilla\",\"brief\":\"mod above e with cedilla\",\"sbrief\":\"mod above e with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"022F\",\"mappings\":{\"default\":{\"default\":\"o overdot\"},\"mathspeak\":{\"default\":\"modifying above o with dot\",\"brief\":\"mod above o with dot\",\"sbrief\":\"mod above o with dot\"}}},{\"category\":\"Ll\",\"key\":\"0233\",\"mappings\":{\"default\":{\"default\":\"y overbar\"},\"mathspeak\":{\"default\":\"y overbar\",\"brief\":\"y overbar\",\"sbrief\":\"y overbar\"}}},{\"category\":\"Ll\",\"key\":\"0237\",\"mappings\":{\"default\":{\"default\":\"dotless j\"},\"mathspeak\":{\"default\":\"modifying above dotless j\",\"brief\":\"mod above dotless j\",\"sbrief\":\"mod above dotless j\"}}},{\"category\":\"Ll\",\"key\":\"1E01\",\"mappings\":{\"default\":{\"default\":\"a ring below\"},\"mathspeak\":{\"default\":\"modifying below a with ring below\",\"brief\":\"mod below a with ring below\",\"sbrief\":\"mod below a with ring below\"}}},{\"category\":\"Ll\",\"key\":\"1E03\",\"mappings\":{\"default\":{\"default\":\"b overdot\"},\"mathspeak\":{\"default\":\"modifying above b with dot\",\"brief\":\"mod above b with dot\",\"sbrief\":\"mod above b with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E05\",\"mappings\":{\"default\":{\"default\":\"b underdot\"},\"mathspeak\":{\"default\":\"modifying below b with dot\",\"brief\":\"mod below b with dot\",\"sbrief\":\"mod below b with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E07\",\"mappings\":{\"default\":{\"default\":\"b underbar\"},\"mathspeak\":{\"default\":\"b underbar\",\"brief\":\"b underbar\",\"sbrief\":\"b underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E0B\",\"mappings\":{\"default\":{\"default\":\"d overdot\"},\"mathspeak\":{\"default\":\"modifying above d with dot\",\"brief\":\"mod above d with dot\",\"sbrief\":\"mod above d with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E0D\",\"mappings\":{\"default\":{\"default\":\"d underdot\"},\"mathspeak\":{\"default\":\"modifying below d with dot\",\"brief\":\"mod below d with dot\",\"sbrief\":\"mod below d with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E0F\",\"mappings\":{\"default\":{\"default\":\"d underbar\"},\"mathspeak\":{\"default\":\"d underbar\",\"brief\":\"d underbar\",\"sbrief\":\"d underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E11\",\"mappings\":{\"default\":{\"default\":\"d cedilla\"},\"mathspeak\":{\"default\":\"modifying above d with cedilla\",\"brief\":\"mod above d with cedilla\",\"sbrief\":\"mod above d with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"1E13\",\"mappings\":{\"default\":{\"default\":\"d underhat\"},\"mathspeak\":{\"default\":\"modifying below d with caret\",\"brief\":\"mod below d with caret\",\"sbrief\":\"mod below d with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E19\",\"mappings\":{\"default\":{\"default\":\"e underhat\"},\"mathspeak\":{\"default\":\"modifying below e with caret\",\"brief\":\"mod below e with caret\",\"sbrief\":\"mod below e with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E1B\",\"mappings\":{\"default\":{\"default\":\"e tilde below\"},\"mathspeak\":{\"default\":\"e undertilde\",\"brief\":\"e undertilde\",\"sbrief\":\"e undertilde\"}}},{\"category\":\"Ll\",\"key\":\"1E1F\",\"mappings\":{\"default\":{\"default\":\"f overdot\"},\"mathspeak\":{\"default\":\"modifying above f with dot\",\"brief\":\"mod above f with dot\",\"sbrief\":\"mod above f with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E21\",\"mappings\":{\"default\":{\"default\":\"g overbar\"},\"mathspeak\":{\"default\":\"g overbar\",\"brief\":\"g overbar\",\"sbrief\":\"g overbar\"}}},{\"category\":\"Ll\",\"key\":\"1E23\",\"mappings\":{\"default\":{\"default\":\"h overdot\"},\"mathspeak\":{\"default\":\"modifying above h with dot\",\"brief\":\"mod above h with dot\",\"sbrief\":\"mod above h with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E25\",\"mappings\":{\"default\":{\"default\":\"h underdot\"},\"mathspeak\":{\"default\":\"modifying below h with dot\",\"brief\":\"mod below h with dot\",\"sbrief\":\"mod below h with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E27\",\"mappings\":{\"default\":{\"default\":\"h double overdot\"},\"mathspeak\":{\"default\":\"modifying above h with double dot\",\"brief\":\"mod above h with double dot\",\"sbrief\":\"mod above h with double dot\"}}},{\"category\":\"Ll\",\"key\":\"1E29\",\"mappings\":{\"default\":{\"default\":\"h cedilla\"},\"mathspeak\":{\"default\":\"modifying above h with cedilla\",\"brief\":\"mod above h with cedilla\",\"sbrief\":\"mod above h with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"1E2B\",\"mappings\":{\"default\":{\"default\":\"h breve below\"},\"mathspeak\":{\"default\":\"modifying below h with breve below\",\"brief\":\"mod below h with breve below\",\"sbrief\":\"mod below h with breve below\"}}},{\"category\":\"Ll\",\"key\":\"1E2D\",\"mappings\":{\"default\":{\"default\":\"i tilde below\"},\"mathspeak\":{\"default\":\"i undertilde\",\"brief\":\"i undertilde\",\"sbrief\":\"i undertilde\"}}},{\"category\":\"Ll\",\"key\":\"1E31\",\"mappings\":{\"default\":{\"default\":\"k acute\"},\"mathspeak\":{\"default\":\"modifying above k with acute\",\"brief\":\"mod above k with acute\",\"sbrief\":\"mod above k with acute\"}}},{\"category\":\"Ll\",\"key\":\"1E33\",\"mappings\":{\"default\":{\"default\":\"k underdot\"},\"mathspeak\":{\"default\":\"modifying below k with dot\",\"brief\":\"mod below k with dot\",\"sbrief\":\"mod below k with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E35\",\"mappings\":{\"default\":{\"default\":\"k underbar\"},\"mathspeak\":{\"default\":\"k underbar\",\"brief\":\"k underbar\",\"sbrief\":\"k underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E37\",\"mappings\":{\"default\":{\"default\":\"l underdot\"},\"mathspeak\":{\"default\":\"modifying below l with dot\",\"brief\":\"mod below l with dot\",\"sbrief\":\"mod below l with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E3B\",\"mappings\":{\"default\":{\"default\":\"l underbar\"},\"mathspeak\":{\"default\":\"l underbar\",\"brief\":\"l underbar\",\"sbrief\":\"l underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E3D\",\"mappings\":{\"default\":{\"default\":\"l underhat\"},\"mathspeak\":{\"default\":\"modifying below l with caret\",\"brief\":\"mod below l with caret\",\"sbrief\":\"mod below l with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E3F\",\"mappings\":{\"default\":{\"default\":\"m acute\"},\"mathspeak\":{\"default\":\"modifying above m with acute\",\"brief\":\"mod above m with acute\",\"sbrief\":\"mod above m with acute\"}}},{\"category\":\"Ll\",\"key\":\"1E41\",\"mappings\":{\"default\":{\"default\":\"m overdot\"},\"mathspeak\":{\"default\":\"modifying above m with dot\",\"brief\":\"mod above m with dot\",\"sbrief\":\"mod above m with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E43\",\"mappings\":{\"default\":{\"default\":\"m underdot\"},\"mathspeak\":{\"default\":\"modifying below m with dot\",\"brief\":\"mod below m with dot\",\"sbrief\":\"mod below m with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E45\",\"mappings\":{\"default\":{\"default\":\"n overdot\"},\"mathspeak\":{\"default\":\"modifying above n with dot\",\"brief\":\"mod above n with dot\",\"sbrief\":\"mod above n with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E47\",\"mappings\":{\"default\":{\"default\":\"n underdot\"},\"mathspeak\":{\"default\":\"modifying below n with dot\",\"brief\":\"mod below n with dot\",\"sbrief\":\"mod below n with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E49\",\"mappings\":{\"default\":{\"default\":\"n underbar\"},\"mathspeak\":{\"default\":\"n underbar\",\"brief\":\"n underbar\",\"sbrief\":\"n underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E4B\",\"mappings\":{\"default\":{\"default\":\"n underhat\"},\"mathspeak\":{\"default\":\"modifying below n with caret\",\"brief\":\"mod below n with caret\",\"sbrief\":\"mod below n with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E55\",\"mappings\":{\"default\":{\"default\":\"p acute\"},\"mathspeak\":{\"default\":\"modifying above p with acute\",\"brief\":\"mod above p with acute\",\"sbrief\":\"mod above p with acute\"}}},{\"category\":\"Ll\",\"key\":\"1E57\",\"mappings\":{\"default\":{\"default\":\"p overdot\"},\"mathspeak\":{\"default\":\"modifying above p with dot\",\"brief\":\"mod above p with dot\",\"sbrief\":\"mod above p with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E59\",\"mappings\":{\"default\":{\"default\":\"r overdot\"},\"mathspeak\":{\"default\":\"modifying above r with dot\",\"brief\":\"mod above r with dot\",\"sbrief\":\"mod above r with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E5B\",\"mappings\":{\"default\":{\"default\":\"r underdot\"},\"mathspeak\":{\"default\":\"modifying below r with dot\",\"brief\":\"mod below r with dot\",\"sbrief\":\"mod below r with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E5F\",\"mappings\":{\"default\":{\"default\":\"r underbar\"},\"mathspeak\":{\"default\":\"r underbar\",\"brief\":\"r underbar\",\"sbrief\":\"r underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E61\",\"mappings\":{\"default\":{\"default\":\"s overdot\"},\"mathspeak\":{\"default\":\"modifying above s with dot\",\"brief\":\"mod above s with dot\",\"sbrief\":\"mod above s with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E63\",\"mappings\":{\"default\":{\"default\":\"s underdot\"},\"mathspeak\":{\"default\":\"modifying below s with dot\",\"brief\":\"mod below s with dot\",\"sbrief\":\"mod below s with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E6B\",\"mappings\":{\"default\":{\"default\":\"t overdot\"},\"mathspeak\":{\"default\":\"modifying above t with dot\",\"brief\":\"mod above t with dot\",\"sbrief\":\"mod above t with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E6D\",\"mappings\":{\"default\":{\"default\":\"t underdot\"},\"mathspeak\":{\"default\":\"modifying below t with dot\",\"brief\":\"mod below t with dot\",\"sbrief\":\"mod below t with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E6F\",\"mappings\":{\"default\":{\"default\":\"t underbar\"},\"mathspeak\":{\"default\":\"t underbar\",\"brief\":\"t underbar\",\"sbrief\":\"t underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E71\",\"mappings\":{\"default\":{\"default\":\"t underhat\"},\"mathspeak\":{\"default\":\"modifying below t with caret\",\"brief\":\"mod below t with caret\",\"sbrief\":\"mod below t with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E73\",\"mappings\":{\"default\":{\"default\":\"u double underdot\"},\"mathspeak\":{\"default\":\"modifying below u with double dot\",\"brief\":\"mod below u with double dot\",\"sbrief\":\"mod below u with double dot\"}}},{\"category\":\"Ll\",\"key\":\"1E75\",\"mappings\":{\"default\":{\"default\":\"u tilde below\"},\"mathspeak\":{\"default\":\"u undertilde\",\"brief\":\"u undertilde\",\"sbrief\":\"u undertilde\"}}},{\"category\":\"Ll\",\"key\":\"1E77\",\"mappings\":{\"default\":{\"default\":\"u underhat\"},\"mathspeak\":{\"default\":\"modifying below u with caret\",\"brief\":\"mod below u with caret\",\"sbrief\":\"mod below u with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E7D\",\"mappings\":{\"default\":{\"default\":\"v tilde\"},\"mathspeak\":{\"default\":\"v overtilde\",\"brief\":\"v overtilde\",\"sbrief\":\"v overtilde\"}}},{\"category\":\"Ll\",\"key\":\"1E7F\",\"mappings\":{\"default\":{\"default\":\"v underdot\"},\"mathspeak\":{\"default\":\"modifying below v with dot\",\"brief\":\"mod below v with dot\",\"sbrief\":\"mod below v with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E81\",\"mappings\":{\"default\":{\"default\":\"w grave\"},\"mathspeak\":{\"default\":\"modifying above w with grave\",\"brief\":\"mod above w with grave\",\"sbrief\":\"mod above w with grave\"}}},{\"category\":\"Ll\",\"key\":\"1E83\",\"mappings\":{\"default\":{\"default\":\"w acute\"},\"mathspeak\":{\"default\":\"modifying above w with acute\",\"brief\":\"mod above w with acute\",\"sbrief\":\"mod above w with acute\"}}},{\"category\":\"Ll\",\"key\":\"1E85\",\"mappings\":{\"default\":{\"default\":\"w double overdot\"},\"mathspeak\":{\"default\":\"modifying above w with double dot\",\"brief\":\"mod above w with double dot\",\"sbrief\":\"mod above w with double dot\"}}},{\"category\":\"Ll\",\"key\":\"1E87\",\"mappings\":{\"default\":{\"default\":\"w overdot\"},\"mathspeak\":{\"default\":\"modifying above w with dot\",\"brief\":\"mod above w with dot\",\"sbrief\":\"mod above w with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E89\",\"mappings\":{\"default\":{\"default\":\"w underdot\"},\"mathspeak\":{\"default\":\"modifying below w with dot\",\"brief\":\"mod below w with dot\",\"sbrief\":\"mod below w with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E8B\",\"mappings\":{\"default\":{\"default\":\"x overdot\"},\"mathspeak\":{\"default\":\"modifying above x with dot\",\"brief\":\"mod above x with dot\",\"sbrief\":\"mod above x with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E8D\",\"mappings\":{\"default\":{\"default\":\"x double overdot\"},\"mathspeak\":{\"default\":\"modifying above x with double dot\",\"brief\":\"mod above x with double dot\",\"sbrief\":\"mod above x with double dot\"}}},{\"category\":\"Ll\",\"key\":\"1E8F\",\"mappings\":{\"default\":{\"default\":\"y overdot\"},\"mathspeak\":{\"default\":\"modifying above y with dot\",\"brief\":\"mod above y with dot\",\"sbrief\":\"mod above y with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E91\",\"mappings\":{\"default\":{\"default\":\"z hat\"},\"mathspeak\":{\"default\":\"modifying above z with caret\",\"brief\":\"mod above z with caret\",\"sbrief\":\"mod above z with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E93\",\"mappings\":{\"default\":{\"default\":\"z underdot\"},\"mathspeak\":{\"default\":\"modifying below z with dot\",\"brief\":\"mod below z with dot\",\"sbrief\":\"mod below z with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E95\",\"mappings\":{\"default\":{\"default\":\"z underbar\"},\"mathspeak\":{\"default\":\"z underbar\",\"brief\":\"z underbar\",\"sbrief\":\"z underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E96\",\"mappings\":{\"default\":{\"default\":\"h underbar\"},\"mathspeak\":{\"default\":\"h underbar\",\"brief\":\"h underbar\",\"sbrief\":\"h underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E97\",\"mappings\":{\"default\":{\"default\":\"t double overdot\"},\"mathspeak\":{\"default\":\"modifying above t with double dot\",\"brief\":\"mod above t with double dot\",\"sbrief\":\"mod above t with double dot\"}}},{\"category\":\"Ll\",\"key\":\"1E98\",\"mappings\":{\"default\":{\"default\":\"w ring\"},\"mathspeak\":{\"default\":\"modifying above w with ring\",\"brief\":\"mod above w with ring\",\"sbrief\":\"mod above w with ring\"}}},{\"category\":\"Ll\",\"key\":\"1E99\",\"mappings\":{\"default\":{\"default\":\"y ring\"},\"mathspeak\":{\"default\":\"modifying above y with ring\",\"brief\":\"mod above y with ring\",\"sbrief\":\"mod above y with ring\"}}},{\"category\":\"Ll\",\"key\":\"1E9A\",\"mappings\":{\"default\":{\"default\":\"a right half ring\"},\"mathspeak\":{\"default\":\"modifying above a with right half ring\",\"brief\":\"mod above a with right half ring\",\"sbrief\":\"mod above a with right half ring\"}}},{\"category\":\"Ll\",\"key\":\"1EA1\",\"mappings\":{\"default\":{\"default\":\"a underdot\"},\"mathspeak\":{\"default\":\"modifying below a with dot\",\"brief\":\"mod below a with dot\",\"sbrief\":\"mod below a with dot\"}}},{\"category\":\"Ll\",\"key\":\"1EA3\",\"mappings\":{\"default\":{\"default\":\"a hook\"},\"mathspeak\":{\"default\":\"modifying above a with hook\",\"brief\":\"mod above a with hook\",\"sbrief\":\"mod above a with hook\"}}},{\"category\":\"Ll\",\"key\":\"1EB9\",\"mappings\":{\"default\":{\"default\":\"e underdot\"},\"mathspeak\":{\"default\":\"modifying below e with dot\",\"brief\":\"mod below e with dot\",\"sbrief\":\"mod below e with dot\"}}},{\"category\":\"Ll\",\"key\":\"1EBB\",\"mappings\":{\"default\":{\"default\":\"e hook\"},\"mathspeak\":{\"default\":\"modifying above e with hook\",\"brief\":\"mod above e with hook\",\"sbrief\":\"mod above e with hook\"}}},{\"category\":\"Ll\",\"key\":\"1EBD\",\"mappings\":{\"default\":{\"default\":\"e tilde\"},\"mathspeak\":{\"default\":\"e overtilde\",\"brief\":\"e overtilde\",\"sbrief\":\"e overtilde\"}}},{\"category\":\"Ll\",\"key\":\"1EC9\",\"mappings\":{\"default\":{\"default\":\"i hook\"},\"mathspeak\":{\"default\":\"modifying above i with hook\",\"brief\":\"mod above i with hook\",\"sbrief\":\"mod above i with hook\"}}},{\"category\":\"Ll\",\"key\":\"1ECB\",\"mappings\":{\"default\":{\"default\":\"i underdot\"},\"mathspeak\":{\"default\":\"modifying below i with dot\",\"brief\":\"mod below i with dot\",\"sbrief\":\"mod below i with dot\"}}},{\"category\":\"Ll\",\"key\":\"1ECD\",\"mappings\":{\"default\":{\"default\":\"o underdot\"},\"mathspeak\":{\"default\":\"modifying below o with dot\",\"brief\":\"mod below o with dot\",\"sbrief\":\"mod below o with dot\"}}},{\"category\":\"Ll\",\"key\":\"1ECF\",\"mappings\":{\"default\":{\"default\":\"o hook\"},\"mathspeak\":{\"default\":\"modifying above o with hook\",\"brief\":\"mod above o with hook\",\"sbrief\":\"mod above o with hook\"}}},{\"category\":\"Ll\",\"key\":\"1EE5\",\"mappings\":{\"default\":{\"default\":\"u underdot\"},\"mathspeak\":{\"default\":\"modifying below u with dot\",\"brief\":\"mod below u with dot\",\"sbrief\":\"mod below u with dot\"}}},{\"category\":\"Ll\",\"key\":\"1EE7\",\"mappings\":{\"default\":{\"default\":\"u hook\"},\"mathspeak\":{\"default\":\"modifying above u with hook\",\"brief\":\"mod above u with hook\",\"sbrief\":\"mod above u with hook\"}}},{\"category\":\"Ll\",\"key\":\"1EF3\",\"mappings\":{\"default\":{\"default\":\"y grave\"},\"mathspeak\":{\"default\":\"modifying above y with grave\",\"brief\":\"mod above y with grave\",\"sbrief\":\"mod above y with grave\"}}},{\"category\":\"Ll\",\"key\":\"1EF5\",\"mappings\":{\"default\":{\"default\":\"y underdot\"},\"mathspeak\":{\"default\":\"modifying below y with dot\",\"brief\":\"mod below y with dot\",\"sbrief\":\"mod below y with dot\"}}},{\"category\":\"Ll\",\"key\":\"1EF7\",\"mappings\":{\"default\":{\"default\":\"y hook\"},\"mathspeak\":{\"default\":\"modifying above y with hook\",\"brief\":\"mod above y with hook\",\"sbrief\":\"mod above y with hook\"}}},{\"category\":\"Ll\",\"key\":\"1EF9\",\"mappings\":{\"default\":{\"default\":\"y tilde\"},\"mathspeak\":{\"default\":\"y overtilde\",\"brief\":\"y overtilde\",\"sbrief\":\"y overtilde\"}}}]\n,\n\"en/symbols/latin-rest.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"italic h\",\"physics\":\"planck constant\"}},\"key\":\"210E\"},{\"category\":\"Mn\",\"key\":\"0363\",\"mappings\":{\"default\":{\"default\":\"combining a\"}}},{\"category\":\"Mn\",\"key\":\"0364\",\"mappings\":{\"default\":{\"default\":\"combining e\"}}},{\"category\":\"Mn\",\"key\":\"0365\",\"mappings\":{\"default\":{\"default\":\"combining i\"}}},{\"category\":\"Mn\",\"key\":\"0366\",\"mappings\":{\"default\":{\"default\":\"combining o\"}}},{\"category\":\"Mn\",\"key\":\"0367\",\"mappings\":{\"default\":{\"default\":\"combining u\"}}},{\"category\":\"Mn\",\"key\":\"0368\",\"mappings\":{\"default\":{\"default\":\"combining c\"}}},{\"category\":\"Mn\",\"key\":\"0369\",\"mappings\":{\"default\":{\"default\":\"combining d\"}}},{\"category\":\"Mn\",\"key\":\"036A\",\"mappings\":{\"default\":{\"default\":\"combining h\"}}},{\"category\":\"Mn\",\"key\":\"036B\",\"mappings\":{\"default\":{\"default\":\"combining m\"}}},{\"category\":\"Mn\",\"key\":\"036C\",\"mappings\":{\"default\":{\"default\":\"combining r\"}}},{\"category\":\"Mn\",\"key\":\"036D\",\"mappings\":{\"default\":{\"default\":\"combining t\"}}},{\"category\":\"Mn\",\"key\":\"036E\",\"mappings\":{\"default\":{\"default\":\"combining v\"}}},{\"category\":\"Mn\",\"key\":\"036F\",\"mappings\":{\"default\":{\"default\":\"combining x\"}}},{\"category\":\"Lm\",\"key\":\"1D62\",\"mappings\":{\"default\":{\"default\":\"subscript i\"}}},{\"category\":\"Lm\",\"key\":\"1D63\",\"mappings\":{\"default\":{\"default\":\"subscript r\"}}},{\"category\":\"Lm\",\"key\":\"1D64\",\"mappings\":{\"default\":{\"default\":\"subscript u\"}}},{\"category\":\"Lm\",\"key\":\"1D65\",\"mappings\":{\"default\":{\"default\":\"subscript v\"}}},{\"category\":\"Mn\",\"key\":\"1DCA\",\"mappings\":{\"default\":{\"default\":\"combining r below\"}}},{\"category\":\"Mn\",\"key\":\"1DD3\",\"mappings\":{\"default\":{\"default\":\"combining flattened open a above\"}}},{\"category\":\"Mn\",\"key\":\"1DD4\",\"mappings\":{\"default\":{\"default\":\"combining ae\"}}},{\"category\":\"Mn\",\"key\":\"1DD5\",\"mappings\":{\"default\":{\"default\":\"combining ao\"}}},{\"category\":\"Mn\",\"key\":\"1DD6\",\"mappings\":{\"default\":{\"default\":\"combining av\"}}},{\"category\":\"Mn\",\"key\":\"1DD7\",\"mappings\":{\"default\":{\"default\":\"combining c cedilla\"}}},{\"category\":\"Mn\",\"key\":\"1DD8\",\"mappings\":{\"default\":{\"default\":\"combining insular d\"}}},{\"category\":\"Mn\",\"key\":\"1DD9\",\"mappings\":{\"default\":{\"default\":\"combining eth\"}}},{\"category\":\"Mn\",\"key\":\"1DDA\",\"mappings\":{\"default\":{\"default\":\"combining g\"}}},{\"category\":\"Mn\",\"key\":\"1DDB\",\"mappings\":{\"default\":{\"default\":\"combining small cap G\"},\"mathspeak\":{\"default\":\"combining small upper G\"}}},{\"category\":\"Mn\",\"key\":\"1DDC\",\"mappings\":{\"default\":{\"default\":\"combining k\"}}},{\"category\":\"Mn\",\"key\":\"1DDD\",\"mappings\":{\"default\":{\"default\":\"combining l\"}}},{\"category\":\"Mn\",\"key\":\"1DDE\",\"mappings\":{\"default\":{\"default\":\"combining small cap L\"},\"mathspeak\":{\"default\":\"combining small upper L\"}}},{\"category\":\"Mn\",\"key\":\"1DDF\",\"mappings\":{\"default\":{\"default\":\"combining small cap M\"},\"mathspeak\":{\"default\":\"combining small upper M\"}}},{\"category\":\"Mn\",\"key\":\"1DE0\",\"mappings\":{\"default\":{\"default\":\"combining n\"}}},{\"category\":\"Mn\",\"key\":\"1DE1\",\"mappings\":{\"default\":{\"default\":\"combining small cap N\"},\"mathspeak\":{\"default\":\"combining small upper N\"}}},{\"category\":\"Mn\",\"key\":\"1DE2\",\"mappings\":{\"default\":{\"default\":\"combining small cap R\"},\"mathspeak\":{\"default\":\"combining small upper R\"}}},{\"category\":\"Mn\",\"key\":\"1DE3\",\"mappings\":{\"default\":{\"default\":\"combining r rotunda\"}}},{\"category\":\"Mn\",\"key\":\"1DE4\",\"mappings\":{\"default\":{\"default\":\"combining s\"}}},{\"category\":\"Mn\",\"key\":\"1DE5\",\"mappings\":{\"default\":{\"default\":\"combining long s\"}}},{\"category\":\"Mn\",\"key\":\"1DE6\",\"mappings\":{\"default\":{\"default\":\"combining z\"}}},{\"category\":\"Lm\",\"key\":\"2071\",\"mappings\":{\"default\":{\"default\":\"superscript i\"}}},{\"category\":\"Lm\",\"key\":\"207F\",\"mappings\":{\"default\":{\"default\":\"superscript n\"}}},{\"category\":\"Lm\",\"key\":\"2090\",\"mappings\":{\"default\":{\"default\":\"subscript a\"}}},{\"category\":\"Lm\",\"key\":\"2091\",\"mappings\":{\"default\":{\"default\":\"subscript e\"}}},{\"category\":\"Lm\",\"key\":\"2092\",\"mappings\":{\"default\":{\"default\":\"subscript o\"}}},{\"category\":\"Lm\",\"key\":\"2093\",\"mappings\":{\"default\":{\"default\":\"subscript x\"}}},{\"category\":\"Lm\",\"key\":\"2094\",\"mappings\":{\"default\":{\"default\":\"subscript schwa\"}}},{\"category\":\"Lm\",\"key\":\"2095\",\"mappings\":{\"default\":{\"default\":\"subscript h\"}}},{\"category\":\"Lm\",\"key\":\"2096\",\"mappings\":{\"default\":{\"default\":\"subscript k\"}}},{\"category\":\"Lm\",\"key\":\"2097\",\"mappings\":{\"default\":{\"default\":\"subscript l\"}}},{\"category\":\"Lm\",\"key\":\"2098\",\"mappings\":{\"default\":{\"default\":\"subscript m\"}}},{\"category\":\"Lm\",\"key\":\"2099\",\"mappings\":{\"default\":{\"default\":\"subscript n\"}}},{\"category\":\"Lm\",\"key\":\"209A\",\"mappings\":{\"default\":{\"default\":\"subscript p\"}}},{\"category\":\"Lm\",\"key\":\"209B\",\"mappings\":{\"default\":{\"default\":\"subscript s\"}}},{\"category\":\"Lm\",\"key\":\"209C\",\"mappings\":{\"default\":{\"default\":\"subscript t\"}}},{\"category\":\"Lm\",\"key\":\"2C7C\",\"mappings\":{\"default\":{\"default\":\"subscript j\"}}},{\"category\":\"So\",\"key\":\"1F12A\",\"mappings\":{\"default\":{\"default\":\"tortoise shell bracketed cap S\"},\"mathspeak\":{\"default\":\"tortoise shell bracketed upper S\"}}},{\"category\":\"So\",\"key\":\"1F12B\",\"mappings\":{\"default\":{\"default\":\"circled italic cap C\"},\"mathspeak\":{\"default\":\"circled italic upper C\"}}},{\"category\":\"So\",\"key\":\"1F12C\",\"mappings\":{\"default\":{\"default\":\"circled italic cap R\"},\"mathspeak\":{\"default\":\"circled italic upper R\"}}},{\"category\":\"So\",\"key\":\"1F18A\",\"mappings\":{\"default\":{\"default\":\"crossed negative squared cap P\"},\"mathspeak\":{\"default\":\"crossed negative squared upper P\"}}}]\n,\n\"en/symbols/latin-upper-double-accent.js\": \n[{\"locale\":\"en\"},{\"category\":\"Lu\",\"key\":\"01D5\",\"mappings\":{\"default\":{\"default\":\"cap U double overdot overbar\"},\"mathspeak\":{\"default\":\"upper U double overdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"01D7\",\"mappings\":{\"default\":{\"default\":\"cap U double overdot acute\"},\"mathspeak\":{\"default\":\"upper U double overdot acute\"}}},{\"category\":\"Lu\",\"key\":\"01D9\",\"mappings\":{\"default\":{\"default\":\"cap U double overdot caron\"},\"mathspeak\":{\"default\":\"upper U double overdot caron\"}}},{\"category\":\"Lu\",\"key\":\"01DB\",\"mappings\":{\"default\":{\"default\":\"cap U double overdot grave\"},\"mathspeak\":{\"default\":\"upper U double overdot grave\"}}},{\"category\":\"Lu\",\"key\":\"01DE\",\"mappings\":{\"default\":{\"default\":\"cap A double overdot overbar\"},\"mathspeak\":{\"default\":\"upper A double overdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"01E0\",\"mappings\":{\"default\":{\"default\":\"cap A overdot overbar\"},\"mathspeak\":{\"default\":\"upper A overdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"01EC\",\"mappings\":{\"default\":{\"default\":\"cap O ogonek overbar\"},\"mathspeak\":{\"default\":\"upper O ogonek overbar\"}}},{\"category\":\"Lu\",\"key\":\"01FA\",\"mappings\":{\"default\":{\"default\":\"cap A ring acute\"},\"mathspeak\":{\"default\":\"upper A ring acute\"}}},{\"category\":\"Lu\",\"key\":\"022A\",\"mappings\":{\"default\":{\"default\":\"cap O double overdot overbar\"},\"mathspeak\":{\"default\":\"upper O double overdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"022C\",\"mappings\":{\"default\":{\"default\":\"cap O tilde overbar\"},\"mathspeak\":{\"default\":\"upper O tilde overbar\"}}},{\"category\":\"Lu\",\"key\":\"0230\",\"mappings\":{\"default\":{\"default\":\"cap O overdot overbar\"},\"mathspeak\":{\"default\":\"upper O overdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"1E08\",\"mappings\":{\"default\":{\"default\":\"cap C cedilla acute\"},\"mathspeak\":{\"default\":\"upper C cedilla acute\"}}},{\"category\":\"Lu\",\"key\":\"1E14\",\"mappings\":{\"default\":{\"default\":\"cap E overbar grave\"},\"mathspeak\":{\"default\":\"upper E overbar grave\"}}},{\"category\":\"Lu\",\"key\":\"1E16\",\"mappings\":{\"default\":{\"default\":\"cap E overbar acute\"},\"mathspeak\":{\"default\":\"upper E overbar acute\"}}},{\"category\":\"Lu\",\"key\":\"1E1C\",\"mappings\":{\"default\":{\"default\":\"cap E cedilla breve\"},\"mathspeak\":{\"default\":\"upper E cedilla breve\"}}},{\"category\":\"Lu\",\"key\":\"1E2E\",\"mappings\":{\"default\":{\"default\":\"cap I double overdot acute\"},\"mathspeak\":{\"default\":\"upper I double overdot acute\"}}},{\"category\":\"Lu\",\"key\":\"1E38\",\"mappings\":{\"default\":{\"default\":\"cap L underdot overbar\"},\"mathspeak\":{\"default\":\"upper L underdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"1E4C\",\"mappings\":{\"default\":{\"default\":\"cap O tilde acute\"},\"mathspeak\":{\"default\":\"upper O tilde acute\"}}},{\"category\":\"Lu\",\"key\":\"1E4E\",\"mappings\":{\"default\":{\"default\":\"cap O tilde double overdot\"},\"mathspeak\":{\"default\":\"upper O tilde double overdot\"}}},{\"category\":\"Lu\",\"key\":\"1E50\",\"mappings\":{\"default\":{\"default\":\"cap O overbar grave\"},\"mathspeak\":{\"default\":\"upper O overbar grave\"}}},{\"category\":\"Lu\",\"key\":\"1E52\",\"mappings\":{\"default\":{\"default\":\"cap O overbar acute\"},\"mathspeak\":{\"default\":\"upper O overbar acute\"}}},{\"category\":\"Lu\",\"key\":\"1E5C\",\"mappings\":{\"default\":{\"default\":\"cap R overbar underdot\"},\"mathspeak\":{\"default\":\"upper R overbar underdot\"}}},{\"category\":\"Lu\",\"key\":\"1E64\",\"mappings\":{\"default\":{\"default\":\"cap S acute overdot\"},\"mathspeak\":{\"default\":\"upper S acute overdot\"}}},{\"category\":\"Lu\",\"key\":\"1E66\",\"mappings\":{\"default\":{\"default\":\"cap S caron overdot\"},\"mathspeak\":{\"default\":\"upper S caron overdot\"}}},{\"category\":\"Lu\",\"key\":\"1E68\",\"mappings\":{\"default\":{\"default\":\"cap S underdot overdot\"},\"mathspeak\":{\"default\":\"upper S underdot overdot\"}}},{\"category\":\"Lu\",\"key\":\"1E78\",\"mappings\":{\"default\":{\"default\":\"cap U tilde acute\"},\"mathspeak\":{\"default\":\"upper U tilde acute\"}}},{\"category\":\"Lu\",\"key\":\"1E7A\",\"mappings\":{\"default\":{\"default\":\"cap U overbar double overdot\"},\"mathspeak\":{\"default\":\"upper U overbar double overdot\"}}},{\"category\":\"Lu\",\"key\":\"1EA4\",\"mappings\":{\"default\":{\"default\":\"cap A hat acute\"},\"mathspeak\":{\"default\":\"upper A hat acute\"}}},{\"category\":\"Lu\",\"key\":\"1EA6\",\"mappings\":{\"default\":{\"default\":\"cap A hat grave\"},\"mathspeak\":{\"default\":\"upper A hat grave\"}}},{\"category\":\"Lu\",\"key\":\"1EA8\",\"mappings\":{\"default\":{\"default\":\"cap A hat hook\"},\"mathspeak\":{\"default\":\"upper A hat hook\"}}},{\"category\":\"Lu\",\"key\":\"1EAA\",\"mappings\":{\"default\":{\"default\":\"cap A hat tilde\"},\"mathspeak\":{\"default\":\"upper A hat tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EAC\",\"mappings\":{\"default\":{\"default\":\"cap A hat underdot\"},\"mathspeak\":{\"default\":\"upper A hat underdot\"}}},{\"category\":\"Lu\",\"key\":\"1EAE\",\"mappings\":{\"default\":{\"default\":\"cap A breve acute\"},\"mathspeak\":{\"default\":\"upper A breve acute\"}}},{\"category\":\"Lu\",\"key\":\"1EB0\",\"mappings\":{\"default\":{\"default\":\"cap A breve grave\"},\"mathspeak\":{\"default\":\"upper A breve grave\"}}},{\"category\":\"Lu\",\"key\":\"1EB2\",\"mappings\":{\"default\":{\"default\":\"cap A breve hook\"},\"mathspeak\":{\"default\":\"upper A breve hook\"}}},{\"category\":\"Lu\",\"key\":\"1EB4\",\"mappings\":{\"default\":{\"default\":\"cap A breve tilde\"},\"mathspeak\":{\"default\":\"upper A breve tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EB6\",\"mappings\":{\"default\":{\"default\":\"cap A breve underdot\"},\"mathspeak\":{\"default\":\"upper A breve underdot\"}}},{\"category\":\"Lu\",\"key\":\"1EBE\",\"mappings\":{\"default\":{\"default\":\"cap E hat acute\"},\"mathspeak\":{\"default\":\"upper E hat acute\"}}},{\"category\":\"Lu\",\"key\":\"1EC0\",\"mappings\":{\"default\":{\"default\":\"cap E hat grave\"},\"mathspeak\":{\"default\":\"upper E hat grave\"}}},{\"category\":\"Lu\",\"key\":\"1EC2\",\"mappings\":{\"default\":{\"default\":\"cap E hat hook\"},\"mathspeak\":{\"default\":\"upper E hat hook\"}}},{\"category\":\"Lu\",\"key\":\"1EC4\",\"mappings\":{\"default\":{\"default\":\"cap E hat tilde\"},\"mathspeak\":{\"default\":\"upper E hat tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EC6\",\"mappings\":{\"default\":{\"default\":\"cap E hat underdot\"},\"mathspeak\":{\"default\":\"upper E hat underdot\"}}},{\"category\":\"Lu\",\"key\":\"1ED0\",\"mappings\":{\"default\":{\"default\":\"cap O hat acute\"},\"mathspeak\":{\"default\":\"upper O hat acute\"}}},{\"category\":\"Lu\",\"key\":\"1ED2\",\"mappings\":{\"default\":{\"default\":\"cap O hat grave\"},\"mathspeak\":{\"default\":\"upper O hat grave\"}}},{\"category\":\"Lu\",\"key\":\"1ED4\",\"mappings\":{\"default\":{\"default\":\"cap O hat hook\"},\"mathspeak\":{\"default\":\"upper O hat hook\"}}},{\"category\":\"Lu\",\"key\":\"1ED6\",\"mappings\":{\"default\":{\"default\":\"cap O hat tilde\"},\"mathspeak\":{\"default\":\"upper O hat tilde\"}}},{\"category\":\"Lu\",\"key\":\"1ED8\",\"mappings\":{\"default\":{\"default\":\"cap O hat underdot\"},\"mathspeak\":{\"default\":\"upper O hat underdot\"}}},{\"category\":\"Lu\",\"key\":\"1EDA\",\"mappings\":{\"default\":{\"default\":\"cap O acute prime\"},\"mathspeak\":{\"default\":\"upper O acute prime\"}}},{\"category\":\"Lu\",\"key\":\"1EDC\",\"mappings\":{\"default\":{\"default\":\"cap O grave prime\"},\"mathspeak\":{\"default\":\"upper O grave prime\"}}},{\"category\":\"Lu\",\"key\":\"1EDE\",\"mappings\":{\"default\":{\"default\":\"cap O hook prime\"},\"mathspeak\":{\"default\":\"upper O hook prime\"}}},{\"category\":\"Lu\",\"key\":\"1EE0\",\"mappings\":{\"default\":{\"default\":\"cap O tilde prime\"},\"mathspeak\":{\"default\":\"upper O tilde prime\"}}},{\"category\":\"Lu\",\"key\":\"1EE2\",\"mappings\":{\"default\":{\"default\":\"cap O underdot prime\"},\"mathspeak\":{\"default\":\"upper O underdot prime\"}}},{\"category\":\"Lu\",\"key\":\"1EE8\",\"mappings\":{\"default\":{\"default\":\"cap U acute prime\"},\"mathspeak\":{\"default\":\"upper U acute prime\"}}},{\"category\":\"Lu\",\"key\":\"1EEA\",\"mappings\":{\"default\":{\"default\":\"cap U grave prime\"},\"mathspeak\":{\"default\":\"upper U grave prime\"}}},{\"category\":\"Lu\",\"key\":\"1EEC\",\"mappings\":{\"default\":{\"default\":\"cap U hook prime\"},\"mathspeak\":{\"default\":\"upper U hook prime\"}}},{\"category\":\"Lu\",\"key\":\"1EEE\",\"mappings\":{\"default\":{\"default\":\"cap U tilde prime\"},\"mathspeak\":{\"default\":\"upper U tilde prime\"}}},{\"category\":\"Lu\",\"key\":\"1EF0\",\"mappings\":{\"default\":{\"default\":\"cap U underdot prime\"},\"mathspeak\":{\"default\":\"upper U underdot prime\"}}}]\n,\n\"en/symbols/latin-upper-single-accent.js\": \n[{\"locale\":\"en\"},{\"category\":\"Lu\",\"key\":\"00C0\",\"mappings\":{\"default\":{\"default\":\"cap A grave\"},\"mathspeak\":{\"default\":\"modifying above upper A with grave\",\"brief\":\"mod above upper A with grave\",\"sbrief\":\"mod above upper A with grave\"}}},{\"category\":\"Lu\",\"key\":\"00C1\",\"mappings\":{\"default\":{\"default\":\"cap A acute\"},\"mathspeak\":{\"default\":\"modifying above upper A with acute\",\"brief\":\"mod above upper A with acute\",\"sbrief\":\"mod above upper A with acute\"}}},{\"category\":\"Lu\",\"key\":\"00C2\",\"mappings\":{\"default\":{\"default\":\"cap A hat\"},\"mathspeak\":{\"default\":\"modifying above upper A with caret\",\"brief\":\"mod above upper A with caret\",\"sbrief\":\"mod above upper A with caret\"}}},{\"category\":\"Lu\",\"key\":\"00C3\",\"mappings\":{\"default\":{\"default\":\"cap A tilde\"},\"mathspeak\":{\"default\":\"upper A overtilde\",\"brief\":\"upper A overtilde\",\"sbrief\":\"upper A overtilde\"}}},{\"category\":\"Lu\",\"key\":\"00C4\",\"mappings\":{\"default\":{\"default\":\"cap A double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper A with double dot\",\"brief\":\"mod above upper A with double dot\",\"sbrief\":\"mod above upper A with double dot\"}}},{\"category\":\"Lu\",\"key\":\"00C5\",\"mappings\":{\"default\":{\"default\":\"cap A ring\"},\"mathspeak\":{\"default\":\"modifying above upper A with ring\",\"brief\":\"mod above upper A with ring\",\"sbrief\":\"mod above upper A with ring\"}}},{\"category\":\"Lu\",\"key\":\"00C7\",\"mappings\":{\"default\":{\"default\":\"cap C cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper C with cedilla\",\"brief\":\"mod above upper C with cedilla\",\"sbrief\":\"mod above upper C with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"00C8\",\"mappings\":{\"default\":{\"default\":\"cap E grave\"},\"mathspeak\":{\"default\":\"modifying above upper E with grave\",\"brief\":\"mod above upper E with grave\",\"sbrief\":\"mod above upper E with grave\"}}},{\"category\":\"Lu\",\"key\":\"00C9\",\"mappings\":{\"default\":{\"default\":\"cap E acute\"},\"mathspeak\":{\"default\":\"modifying above upper E with acute\",\"brief\":\"mod above upper E with acute\",\"sbrief\":\"mod above upper E with acute\"}}},{\"category\":\"Lu\",\"key\":\"00CA\",\"mappings\":{\"default\":{\"default\":\"cap E hat\"},\"mathspeak\":{\"default\":\"modifying above upper E with caret\",\"brief\":\"mod above upper E with caret\",\"sbrief\":\"mod above upper E with caret\"}}},{\"category\":\"Lu\",\"key\":\"00CB\",\"mappings\":{\"default\":{\"default\":\"cap E double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper E with double dot\",\"brief\":\"mod above upper E with double dot\",\"sbrief\":\"mod above upper E with double dot\"}}},{\"category\":\"Lu\",\"key\":\"00CC\",\"mappings\":{\"default\":{\"default\":\"cap I grave\"},\"mathspeak\":{\"default\":\"modifying above upper I with grave\",\"brief\":\"mod above upper I with grave\",\"sbrief\":\"mod above upper I with grave\"}}},{\"category\":\"Lu\",\"key\":\"00CD\",\"mappings\":{\"default\":{\"default\":\"cap I acute\"},\"mathspeak\":{\"default\":\"modifying above upper I with acute\",\"brief\":\"mod above upper I with acute\",\"sbrief\":\"mod above upper I with acute\"}}},{\"category\":\"Lu\",\"key\":\"00CE\",\"mappings\":{\"default\":{\"default\":\"cap I hat\"},\"mathspeak\":{\"default\":\"modifying above upper I with caret\",\"brief\":\"mod above upper I with caret\",\"sbrief\":\"mod above upper I with caret\"}}},{\"category\":\"Lu\",\"key\":\"00CF\",\"mappings\":{\"default\":{\"default\":\"cap I double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper I with double dot\",\"brief\":\"mod above upper I with double dot\",\"sbrief\":\"mod above upper I with double dot\"}}},{\"category\":\"Lu\",\"key\":\"00D1\",\"mappings\":{\"default\":{\"default\":\"cap N tilde\"},\"mathspeak\":{\"default\":\"upper N overtilde\",\"brief\":\"upper N overtilde\",\"sbrief\":\"upper N overtilde\"}}},{\"category\":\"Lu\",\"key\":\"00D2\",\"mappings\":{\"default\":{\"default\":\"cap O grave\"},\"mathspeak\":{\"default\":\"modifying above upper O with grave\",\"brief\":\"mod above upper O with grave\",\"sbrief\":\"mod above upper O with grave\"}}},{\"category\":\"Lu\",\"key\":\"00D3\",\"mappings\":{\"default\":{\"default\":\"cap O acute\"},\"mathspeak\":{\"default\":\"modifying above upper O with acute\",\"brief\":\"mod above upper O with acute\",\"sbrief\":\"mod above upper O with acute\"}}},{\"category\":\"Lu\",\"key\":\"00D4\",\"mappings\":{\"default\":{\"default\":\"cap O hat\"},\"mathspeak\":{\"default\":\"modifying above upper O with caret\",\"brief\":\"mod above upper O with caret\",\"sbrief\":\"mod above upper O with caret\"}}},{\"category\":\"Lu\",\"key\":\"00D5\",\"mappings\":{\"default\":{\"default\":\"cap O tilde\"},\"mathspeak\":{\"default\":\"upper O overtilde\",\"brief\":\"upper O overtilde\",\"sbrief\":\"upper O overtilde\"}}},{\"category\":\"Lu\",\"key\":\"00D6\",\"mappings\":{\"default\":{\"default\":\"cap O double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper O with double dot\",\"brief\":\"mod above upper O with double dot\",\"sbrief\":\"mod above upper O with double dot\"}}},{\"category\":\"Lu\",\"key\":\"00D9\",\"mappings\":{\"default\":{\"default\":\"cap U grave\"},\"mathspeak\":{\"default\":\"modifying above upper U with grave\",\"brief\":\"mod above upper U with grave\",\"sbrief\":\"mod above upper U with grave\"}}},{\"category\":\"Lu\",\"key\":\"00DA\",\"mappings\":{\"default\":{\"default\":\"cap U acute\"},\"mathspeak\":{\"default\":\"modifying above upper U with acute\",\"brief\":\"mod above upper U with acute\",\"sbrief\":\"mod above upper U with acute\"}}},{\"category\":\"Lu\",\"key\":\"00DB\",\"mappings\":{\"default\":{\"default\":\"cap U hat\"},\"mathspeak\":{\"default\":\"modifying above upper U with caret\",\"brief\":\"mod above upper U with caret\",\"sbrief\":\"mod above upper U with caret\"}}},{\"category\":\"Lu\",\"key\":\"00DC\",\"mappings\":{\"default\":{\"default\":\"cap U double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper U with double dot\",\"brief\":\"mod above upper U with double dot\",\"sbrief\":\"mod above upper U with double dot\"}}},{\"category\":\"Lu\",\"key\":\"00DD\",\"mappings\":{\"default\":{\"default\":\"cap Y acute\"},\"mathspeak\":{\"default\":\"modifying above upper Y with acute\",\"brief\":\"mod above upper Y with acute\",\"sbrief\":\"mod above upper Y with acute\"}}},{\"category\":\"Lu\",\"key\":\"0100\",\"mappings\":{\"default\":{\"default\":\"cap A overbar\"},\"mathspeak\":{\"default\":\"upper A overbar\",\"brief\":\"upper A overbar\",\"sbrief\":\"upper A overbar\"}}},{\"category\":\"Lu\",\"key\":\"0102\",\"mappings\":{\"default\":{\"default\":\"cap A breve\"},\"mathspeak\":{\"default\":\"modifying above upper A with breve\",\"brief\":\"mod above upper A with breve\",\"sbrief\":\"mod above upper A with breve\"}}},{\"category\":\"Lu\",\"key\":\"0104\",\"mappings\":{\"default\":{\"default\":\"cap A ogonek\"},\"mathspeak\":{\"default\":\"modifying above upper A with ogonek\",\"brief\":\"mod above upper A with ogonek\",\"sbrief\":\"mod above upper A with ogonek\"}}},{\"category\":\"Lu\",\"key\":\"0106\",\"mappings\":{\"default\":{\"default\":\"cap C acute\"},\"mathspeak\":{\"default\":\"modifying above upper C with acute\",\"brief\":\"mod above upper C with acute\",\"sbrief\":\"mod above upper C with acute\"}}},{\"category\":\"Lu\",\"key\":\"0108\",\"mappings\":{\"default\":{\"default\":\"cap C hat\"},\"mathspeak\":{\"default\":\"modifying above upper C with caret\",\"brief\":\"mod above upper C with caret\",\"sbrief\":\"mod above upper C with caret\"}}},{\"category\":\"Lu\",\"key\":\"010A\",\"mappings\":{\"default\":{\"default\":\"cap C overdot\"},\"mathspeak\":{\"default\":\"modifying above upper C with dot\",\"brief\":\"mod above upper C with dot\",\"sbrief\":\"mod above upper C with dot\"}}},{\"category\":\"Lu\",\"key\":\"010C\",\"mappings\":{\"default\":{\"default\":\"cap C caron\"},\"mathspeak\":{\"default\":\"modifying above upper C with caron\",\"brief\":\"mod above upper C with caron\",\"sbrief\":\"mod above upper C with caron\"}}},{\"category\":\"Lu\",\"key\":\"010E\",\"mappings\":{\"default\":{\"default\":\"cap D caron\"},\"mathspeak\":{\"default\":\"modifying above upper D with caron\",\"brief\":\"mod above upper D with caron\",\"sbrief\":\"mod above upper D with caron\"}}},{\"category\":\"Lu\",\"key\":\"0112\",\"mappings\":{\"default\":{\"default\":\"cap E overbar\"},\"mathspeak\":{\"default\":\"upper E overbar\",\"brief\":\"upper E overbar\",\"sbrief\":\"upper E overbar\"}}},{\"category\":\"Lu\",\"key\":\"0114\",\"mappings\":{\"default\":{\"default\":\"cap E breve\"},\"mathspeak\":{\"default\":\"modifying above upper E with breve\",\"brief\":\"mod above upper E with breve\",\"sbrief\":\"mod above upper E with breve\"}}},{\"category\":\"Lu\",\"key\":\"0116\",\"mappings\":{\"default\":{\"default\":\"cap E overdot\"},\"mathspeak\":{\"default\":\"modifying above upper E with dot\",\"brief\":\"mod above upper E with dot\",\"sbrief\":\"mod above upper E with dot\"}}},{\"category\":\"Lu\",\"key\":\"0118\",\"mappings\":{\"default\":{\"default\":\"cap E ogonek\"},\"mathspeak\":{\"default\":\"modifying above upper E with ogonek\",\"brief\":\"mod above upper E with ogonek\",\"sbrief\":\"mod above upper E with ogonek\"}}},{\"category\":\"Lu\",\"key\":\"011A\",\"mappings\":{\"default\":{\"default\":\"cap E caron\"},\"mathspeak\":{\"default\":\"modifying above upper E with caron\",\"brief\":\"mod above upper E with caron\",\"sbrief\":\"mod above upper E with caron\"}}},{\"category\":\"Lu\",\"key\":\"011C\",\"mappings\":{\"default\":{\"default\":\"cap G hat\"},\"mathspeak\":{\"default\":\"modifying above upper G with caret\",\"brief\":\"mod above upper G with caret\",\"sbrief\":\"mod above upper G with caret\"}}},{\"category\":\"Lu\",\"key\":\"011E\",\"mappings\":{\"default\":{\"default\":\"cap G breve\"},\"mathspeak\":{\"default\":\"modifying above upper G with breve\",\"brief\":\"mod above upper G with breve\",\"sbrief\":\"mod above upper G with breve\"}}},{\"category\":\"Lu\",\"key\":\"0120\",\"mappings\":{\"default\":{\"default\":\"cap G overdot\"},\"mathspeak\":{\"default\":\"modifying above upper G with dot\",\"brief\":\"mod above upper G with dot\",\"sbrief\":\"mod above upper G with dot\"}}},{\"category\":\"Lu\",\"key\":\"0122\",\"mappings\":{\"default\":{\"default\":\"cap G cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper G with cedilla\",\"brief\":\"mod above upper G with cedilla\",\"sbrief\":\"mod above upper G with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0124\",\"mappings\":{\"default\":{\"default\":\"cap H hat\"},\"mathspeak\":{\"default\":\"modifying above upper H with caret\",\"brief\":\"mod above upper H with caret\",\"sbrief\":\"mod above upper H with caret\"}}},{\"category\":\"Lu\",\"key\":\"0128\",\"mappings\":{\"default\":{\"default\":\"cap I tilde\"},\"mathspeak\":{\"default\":\"upper I overtilde\",\"brief\":\"upper I overtilde\",\"sbrief\":\"upper I overtilde\"}}},{\"category\":\"Lu\",\"key\":\"012A\",\"mappings\":{\"default\":{\"default\":\"cap I overbar\"},\"mathspeak\":{\"default\":\"upper I overbar\",\"brief\":\"upper I overbar\",\"sbrief\":\"upper I overbar\"}}},{\"category\":\"Lu\",\"key\":\"012C\",\"mappings\":{\"default\":{\"default\":\"cap I breve\"},\"mathspeak\":{\"default\":\"modifying above upper I with breve\",\"brief\":\"mod above upper I with breve\",\"sbrief\":\"mod above upper I with breve\"}}},{\"category\":\"Lu\",\"key\":\"012E\",\"mappings\":{\"default\":{\"default\":\"cap I ogonek\"},\"mathspeak\":{\"default\":\"modifying above upper I with ogonek\",\"brief\":\"mod above upper I with ogonek\",\"sbrief\":\"mod above upper I with ogonek\"}}},{\"category\":\"Lu\",\"key\":\"0130\",\"mappings\":{\"default\":{\"default\":\"cap I overdot\"},\"mathspeak\":{\"default\":\"modifying above upper I with dot\",\"brief\":\"mod above upper I with dot\",\"sbrief\":\"mod above upper I with dot\"}}},{\"category\":\"Lu\",\"key\":\"0134\",\"mappings\":{\"default\":{\"default\":\"cap J hat\"},\"mathspeak\":{\"default\":\"modifying above upper J with caret\",\"brief\":\"mod above upper J with caret\",\"sbrief\":\"mod above upper J with caret\"}}},{\"category\":\"Lu\",\"key\":\"0136\",\"mappings\":{\"default\":{\"default\":\"cap K cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper K with cedilla\",\"brief\":\"mod above upper K with cedilla\",\"sbrief\":\"mod above upper K with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0139\",\"mappings\":{\"default\":{\"default\":\"cap L acute\"},\"mathspeak\":{\"default\":\"modifying above upper L with acute\",\"brief\":\"mod above upper L with acute\",\"sbrief\":\"mod above upper L with acute\"}}},{\"category\":\"Lu\",\"key\":\"013B\",\"mappings\":{\"default\":{\"default\":\"cap L cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper L with cedilla\",\"brief\":\"mod above upper L with cedilla\",\"sbrief\":\"mod above upper L with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"013D\",\"mappings\":{\"default\":{\"default\":\"cap L caron\"},\"mathspeak\":{\"default\":\"modifying above upper L with caron\",\"brief\":\"mod above upper L with caron\",\"sbrief\":\"mod above upper L with caron\"}}},{\"category\":\"Lu\",\"key\":\"013F\",\"mappings\":{\"default\":{\"default\":\"cap L middle dot\"},\"mathspeak\":{\"default\":\"modifying above upper L with middle dot\",\"brief\":\"mod above upper L with middle dot\",\"sbrief\":\"mod above upper L with middle dot\"}}},{\"category\":\"Lu\",\"key\":\"0143\",\"mappings\":{\"default\":{\"default\":\"cap N acute\"},\"mathspeak\":{\"default\":\"modifying above upper N with acute\",\"brief\":\"mod above upper N with acute\",\"sbrief\":\"mod above upper N with acute\"}}},{\"category\":\"Lu\",\"key\":\"0145\",\"mappings\":{\"default\":{\"default\":\"cap N cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper N with cedilla\",\"brief\":\"mod above upper N with cedilla\",\"sbrief\":\"mod above upper N with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0147\",\"mappings\":{\"default\":{\"default\":\"cap N caron\"},\"mathspeak\":{\"default\":\"modifying above upper N with caron\",\"brief\":\"mod above upper N with caron\",\"sbrief\":\"mod above upper N with caron\"}}},{\"category\":\"Lu\",\"key\":\"014C\",\"mappings\":{\"default\":{\"default\":\"cap O overbar\"},\"mathspeak\":{\"default\":\"upper O overbar\",\"brief\":\"upper O overbar\",\"sbrief\":\"upper O overbar\"}}},{\"category\":\"Lu\",\"key\":\"014E\",\"mappings\":{\"default\":{\"default\":\"cap O breve\"},\"mathspeak\":{\"default\":\"modifying above upper O with breve\",\"brief\":\"mod above upper O with breve\",\"sbrief\":\"mod above upper O with breve\"}}},{\"category\":\"Lu\",\"key\":\"0150\",\"mappings\":{\"default\":{\"default\":\"cap O double acute\"},\"mathspeak\":{\"default\":\"modifying above upper O with double acute\",\"brief\":\"mod above upper O with double acute\",\"sbrief\":\"mod above upper O with double acute\"}}},{\"category\":\"Lu\",\"key\":\"0154\",\"mappings\":{\"default\":{\"default\":\"cap R acute\"},\"mathspeak\":{\"default\":\"modifying above upper R with acute\",\"brief\":\"mod above upper R with acute\",\"sbrief\":\"mod above upper R with acute\"}}},{\"category\":\"Lu\",\"key\":\"0156\",\"mappings\":{\"default\":{\"default\":\"cap R cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper R with cedilla\",\"brief\":\"mod above upper R with cedilla\",\"sbrief\":\"mod above upper R with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0158\",\"mappings\":{\"default\":{\"default\":\"cap R caron\"},\"mathspeak\":{\"default\":\"modifying above upper R with caron\",\"brief\":\"mod above upper R with caron\",\"sbrief\":\"mod above upper R with caron\"}}},{\"category\":\"Lu\",\"key\":\"015A\",\"mappings\":{\"default\":{\"default\":\"cap S acute\"},\"mathspeak\":{\"default\":\"modifying above upper S with acute\",\"brief\":\"mod above upper S with acute\",\"sbrief\":\"mod above upper S with acute\"}}},{\"category\":\"Lu\",\"key\":\"015C\",\"mappings\":{\"default\":{\"default\":\"cap S hat\"},\"mathspeak\":{\"default\":\"modifying above upper S with caret\",\"brief\":\"mod above upper S with caret\",\"sbrief\":\"mod above upper S with caret\"}}},{\"category\":\"Lu\",\"key\":\"015E\",\"mappings\":{\"default\":{\"default\":\"cap S cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper S with cedilla\",\"brief\":\"mod above upper S with cedilla\",\"sbrief\":\"mod above upper S with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0160\",\"mappings\":{\"default\":{\"default\":\"cap S caron\"},\"mathspeak\":{\"default\":\"modifying above upper S with caron\",\"brief\":\"mod above upper S with caron\",\"sbrief\":\"mod above upper S with caron\"}}},{\"category\":\"Lu\",\"key\":\"0162\",\"mappings\":{\"default\":{\"default\":\"cap T cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper T with cedilla\",\"brief\":\"mod above upper T with cedilla\",\"sbrief\":\"mod above upper T with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0164\",\"mappings\":{\"default\":{\"default\":\"cap T caron\"},\"mathspeak\":{\"default\":\"modifying above upper T with caron\",\"brief\":\"mod above upper T with caron\",\"sbrief\":\"mod above upper T with caron\"}}},{\"category\":\"Lu\",\"key\":\"0168\",\"mappings\":{\"default\":{\"default\":\"cap U tilde\"},\"mathspeak\":{\"default\":\"upper U overtilde\",\"brief\":\"upper U overtilde\",\"sbrief\":\"upper U overtilde\"}}},{\"category\":\"Lu\",\"key\":\"016A\",\"mappings\":{\"default\":{\"default\":\"cap U overbar\"},\"mathspeak\":{\"default\":\"upper U overbar\",\"brief\":\"upper U overbar\",\"sbrief\":\"upper U overbar\"}}},{\"category\":\"Lu\",\"key\":\"016C\",\"mappings\":{\"default\":{\"default\":\"cap U breve\"},\"mathspeak\":{\"default\":\"modifying above upper U with breve\",\"brief\":\"mod above upper U with breve\",\"sbrief\":\"mod above upper U with breve\"}}},{\"category\":\"Lu\",\"key\":\"016E\",\"mappings\":{\"default\":{\"default\":\"cap U ring\"},\"mathspeak\":{\"default\":\"modifying above upper U with ring\",\"brief\":\"mod above upper U with ring\",\"sbrief\":\"mod above upper U with ring\"}}},{\"category\":\"Lu\",\"key\":\"0170\",\"mappings\":{\"default\":{\"default\":\"cap U double acute\"},\"mathspeak\":{\"default\":\"modifying above upper U with double acute\",\"brief\":\"mod above upper U with double acute\",\"sbrief\":\"mod above upper U with double acute\"}}},{\"category\":\"Lu\",\"key\":\"0172\",\"mappings\":{\"default\":{\"default\":\"cap U ogonek\"},\"mathspeak\":{\"default\":\"modifying above upper U with ogonek\",\"brief\":\"mod above upper U with ogonek\",\"sbrief\":\"mod above upper U with ogonek\"}}},{\"category\":\"Lu\",\"key\":\"0174\",\"mappings\":{\"default\":{\"default\":\"cap W hat\"},\"mathspeak\":{\"default\":\"modifying above upper W with caret\",\"brief\":\"mod above upper W with caret\",\"sbrief\":\"mod above upper W with caret\"}}},{\"category\":\"Lu\",\"key\":\"0176\",\"mappings\":{\"default\":{\"default\":\"cap Y hat\"},\"mathspeak\":{\"default\":\"modifying above upper Y with caret\",\"brief\":\"mod above upper Y with caret\",\"sbrief\":\"mod above upper Y with caret\"}}},{\"category\":\"Lu\",\"key\":\"0178\",\"mappings\":{\"default\":{\"default\":\"cap Y double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper Y with double dot\",\"brief\":\"mod above upper Y with double dot\",\"sbrief\":\"mod above upper Y with double dot\"}}},{\"category\":\"Lu\",\"key\":\"0179\",\"mappings\":{\"default\":{\"default\":\"cap Z acute\"},\"mathspeak\":{\"default\":\"modifying above upper Z with acute\",\"brief\":\"mod above upper Z with acute\",\"sbrief\":\"mod above upper Z with acute\"}}},{\"category\":\"Lu\",\"key\":\"017B\",\"mappings\":{\"default\":{\"default\":\"cap Z overdot\"},\"mathspeak\":{\"default\":\"modifying above upper Z with dot\",\"brief\":\"mod above upper Z with dot\",\"sbrief\":\"mod above upper Z with dot\"}}},{\"category\":\"Lu\",\"key\":\"017D\",\"mappings\":{\"default\":{\"default\":\"cap Z caron\"},\"mathspeak\":{\"default\":\"modifying above upper Z with caron\",\"brief\":\"mod above upper Z with caron\",\"sbrief\":\"mod above upper Z with caron\"}}},{\"category\":\"Lu\",\"key\":\"01CD\",\"mappings\":{\"default\":{\"default\":\"cap A caron\"},\"mathspeak\":{\"default\":\"modifying above upper A with caron\",\"brief\":\"mod above upper A with caron\",\"sbrief\":\"mod above upper A with caron\"}}},{\"category\":\"Lu\",\"key\":\"01CF\",\"mappings\":{\"default\":{\"default\":\"cap I caron\"},\"mathspeak\":{\"default\":\"modifying above upper I with caron\",\"brief\":\"mod above upper I with caron\",\"sbrief\":\"mod above upper I with caron\"}}},{\"category\":\"Lu\",\"key\":\"01D1\",\"mappings\":{\"default\":{\"default\":\"cap O caron\"},\"mathspeak\":{\"default\":\"modifying above upper O with caron\",\"brief\":\"mod above upper O with caron\",\"sbrief\":\"mod above upper O with caron\"}}},{\"category\":\"Lu\",\"key\":\"01D3\",\"mappings\":{\"default\":{\"default\":\"cap U caron\"},\"mathspeak\":{\"default\":\"modifying above upper U with caron\",\"brief\":\"mod above upper U with caron\",\"sbrief\":\"mod above upper U with caron\"}}},{\"category\":\"Lu\",\"key\":\"01E6\",\"mappings\":{\"default\":{\"default\":\"cap G caron\"},\"mathspeak\":{\"default\":\"modifying above upper G with caron\",\"brief\":\"mod above upper G with caron\",\"sbrief\":\"mod above upper G with caron\"}}},{\"category\":\"Lu\",\"key\":\"01E8\",\"mappings\":{\"default\":{\"default\":\"cap K caron\"},\"mathspeak\":{\"default\":\"modifying above upper K with caron\",\"brief\":\"mod above upper K with caron\",\"sbrief\":\"mod above upper K with caron\"}}},{\"category\":\"Lu\",\"key\":\"01EA\",\"mappings\":{\"default\":{\"default\":\"cap O ogonek\"},\"mathspeak\":{\"default\":\"modifying above upper O with ogonek\",\"brief\":\"mod above upper O with ogonek\",\"sbrief\":\"mod above upper O with ogonek\"}}},{\"category\":\"Lu\",\"key\":\"01F4\",\"mappings\":{\"default\":{\"default\":\"cap G acute\"},\"mathspeak\":{\"default\":\"modifying above upper G with acute\",\"brief\":\"mod above upper G with acute\",\"sbrief\":\"mod above upper G with acute\"}}},{\"category\":\"Lu\",\"key\":\"01F8\",\"mappings\":{\"default\":{\"default\":\"cap N grave\"},\"mathspeak\":{\"default\":\"modifying above upper N with grave\",\"brief\":\"mod above upper N with grave\",\"sbrief\":\"mod above upper N with grave\"}}},{\"category\":\"Lu\",\"key\":\"0200\",\"mappings\":{\"default\":{\"default\":\"cap A double grave\"},\"mathspeak\":{\"default\":\"modifying above upper A with double grave\",\"brief\":\"mod above upper A with double grave\",\"sbrief\":\"mod above upper A with double grave\"}}},{\"category\":\"Lu\",\"key\":\"0202\",\"mappings\":{\"default\":{\"default\":\"cap A inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper A with inverted breve\",\"brief\":\"mod above upper A with inverted breve\",\"sbrief\":\"mod above upper A with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"0204\",\"mappings\":{\"default\":{\"default\":\"cap E double grave\"},\"mathspeak\":{\"default\":\"modifying above upper E with double grave\",\"brief\":\"mod above upper E with double grave\",\"sbrief\":\"mod above upper E with double grave\"}}},{\"category\":\"Lu\",\"key\":\"0206\",\"mappings\":{\"default\":{\"default\":\"cap E inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper E with inverted breve\",\"brief\":\"mod above upper E with inverted breve\",\"sbrief\":\"mod above upper E with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"0208\",\"mappings\":{\"default\":{\"default\":\"cap I double grave\"},\"mathspeak\":{\"default\":\"modifying above upper I with double grave\",\"brief\":\"mod above upper I with double grave\",\"sbrief\":\"mod above upper I with double grave\"}}},{\"category\":\"Lu\",\"key\":\"020A\",\"mappings\":{\"default\":{\"default\":\"cap I inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper I with inverted breve\",\"brief\":\"mod above upper I with inverted breve\",\"sbrief\":\"mod above upper I with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"020C\",\"mappings\":{\"default\":{\"default\":\"cap O double grave\"},\"mathspeak\":{\"default\":\"modifying above upper O with double grave\",\"brief\":\"mod above upper O with double grave\",\"sbrief\":\"mod above upper O with double grave\"}}},{\"category\":\"Lu\",\"key\":\"020E\",\"mappings\":{\"default\":{\"default\":\"cap O inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper O with inverted breve\",\"brief\":\"mod above upper O with inverted breve\",\"sbrief\":\"mod above upper O with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"0210\",\"mappings\":{\"default\":{\"default\":\"cap R double grave\"},\"mathspeak\":{\"default\":\"modifying above upper R with double grave\",\"brief\":\"mod above upper R with double grave\",\"sbrief\":\"mod above upper R with double grave\"}}},{\"category\":\"Lu\",\"key\":\"0212\",\"mappings\":{\"default\":{\"default\":\"cap R inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper R with inverted breve\",\"brief\":\"mod above upper R with inverted breve\",\"sbrief\":\"mod above upper R with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"0214\",\"mappings\":{\"default\":{\"default\":\"cap U double grave\"},\"mathspeak\":{\"default\":\"modifying above upper U with double grave\",\"brief\":\"mod above upper U with double grave\",\"sbrief\":\"mod above upper U with double grave\"}}},{\"category\":\"Lu\",\"key\":\"0216\",\"mappings\":{\"default\":{\"default\":\"cap U inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper U with inverted breve\",\"brief\":\"mod above upper U with inverted breve\",\"sbrief\":\"mod above upper U with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"0218\",\"mappings\":{\"default\":{\"default\":\"cap S comma below\"},\"mathspeak\":{\"default\":\"modifying below upper S with comma below\",\"brief\":\"mod below upper S with comma below\",\"sbrief\":\"mod below upper S with comma below\"}}},{\"category\":\"Lu\",\"key\":\"021A\",\"mappings\":{\"default\":{\"default\":\"cap T comma below\"},\"mathspeak\":{\"default\":\"modifying below upper T with comma below\",\"brief\":\"mod below upper T with comma below\",\"sbrief\":\"mod below upper T with comma below\"}}},{\"category\":\"Lu\",\"key\":\"021E\",\"mappings\":{\"default\":{\"default\":\"cap H caron\"},\"mathspeak\":{\"default\":\"modifying above upper H with caron\",\"brief\":\"mod above upper H with caron\",\"sbrief\":\"mod above upper H with caron\"}}},{\"category\":\"Lu\",\"key\":\"0226\",\"mappings\":{\"default\":{\"default\":\"cap A overdot\"},\"mathspeak\":{\"default\":\"modifying above upper A with dot\",\"brief\":\"mod above upper A with dot\",\"sbrief\":\"mod above upper A with dot\"}}},{\"category\":\"Lu\",\"key\":\"0228\",\"mappings\":{\"default\":{\"default\":\"cap E cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper E with cedilla\",\"brief\":\"mod above upper E with cedilla\",\"sbrief\":\"mod above upper E with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"022E\",\"mappings\":{\"default\":{\"default\":\"cap O overdot\"},\"mathspeak\":{\"default\":\"modifying above upper O with dot\",\"brief\":\"mod above upper O with dot\",\"sbrief\":\"mod above upper O with dot\"}}},{\"category\":\"Lu\",\"key\":\"0232\",\"mappings\":{\"default\":{\"default\":\"cap Y overbar\"},\"mathspeak\":{\"default\":\"upper Y overbar\",\"brief\":\"upper Y overbar\",\"sbrief\":\"upper Y overbar\"}}},{\"category\":\"Lu\",\"key\":\"1E00\",\"mappings\":{\"default\":{\"default\":\"cap A ring below\"},\"mathspeak\":{\"default\":\"modifying below upper A with ring below\",\"brief\":\"mod below upper A with ring below\",\"sbrief\":\"mod below upper A with ring below\"}}},{\"category\":\"Lu\",\"key\":\"1E02\",\"mappings\":{\"default\":{\"default\":\"cap B overdot\"},\"mathspeak\":{\"default\":\"modifying above upper B with dot\",\"brief\":\"mod above upper B with dot\",\"sbrief\":\"mod above upper B with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E04\",\"mappings\":{\"default\":{\"default\":\"cap B underdot\"},\"mathspeak\":{\"default\":\"modifying below upper B with dot\",\"brief\":\"mod below upper B with dot\",\"sbrief\":\"mod below upper B with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E06\",\"mappings\":{\"default\":{\"default\":\"cap B underbar\"},\"mathspeak\":{\"default\":\"upper B underbar\",\"brief\":\"upper B underbar\",\"sbrief\":\"upper B underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E0A\",\"mappings\":{\"default\":{\"default\":\"cap D overdot\"},\"mathspeak\":{\"default\":\"modifying above upper D with dot\",\"brief\":\"mod above upper D with dot\",\"sbrief\":\"mod above upper D with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E0C\",\"mappings\":{\"default\":{\"default\":\"cap D underdot\"},\"mathspeak\":{\"default\":\"modifying below upper D with dot\",\"brief\":\"mod below upper D with dot\",\"sbrief\":\"mod below upper D with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E0E\",\"mappings\":{\"default\":{\"default\":\"cap D underbar\"},\"mathspeak\":{\"default\":\"upper D underbar\",\"brief\":\"upper D underbar\",\"sbrief\":\"upper D underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E10\",\"mappings\":{\"default\":{\"default\":\"cap D cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper D with cedilla\",\"brief\":\"mod above upper D with cedilla\",\"sbrief\":\"mod above upper D with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"1E12\",\"mappings\":{\"default\":{\"default\":\"cap D underhat\"},\"mathspeak\":{\"default\":\"modifying below upper D with caret\",\"brief\":\"mod below upper D with caret\",\"sbrief\":\"mod below upper D with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E18\",\"mappings\":{\"default\":{\"default\":\"cap E underhat\"},\"mathspeak\":{\"default\":\"modifying below upper E with caret\",\"brief\":\"mod below upper E with caret\",\"sbrief\":\"mod below upper E with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E1A\",\"mappings\":{\"default\":{\"default\":\"cap E tilde below\"},\"mathspeak\":{\"default\":\"upper E undertilde\",\"brief\":\"upper E undertilde\",\"sbrief\":\"upper E undertilde\"}}},{\"category\":\"Lu\",\"key\":\"1E1E\",\"mappings\":{\"default\":{\"default\":\"cap F overdot\"},\"mathspeak\":{\"default\":\"modifying above upper F with dot\",\"brief\":\"mod above upper F with dot\",\"sbrief\":\"mod above upper F with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E20\",\"mappings\":{\"default\":{\"default\":\"cap G overbar\"},\"mathspeak\":{\"default\":\"upper G overbar\",\"brief\":\"upper G overbar\",\"sbrief\":\"upper G overbar\"}}},{\"category\":\"Lu\",\"key\":\"1E22\",\"mappings\":{\"default\":{\"default\":\"cap H overdot\"},\"mathspeak\":{\"default\":\"modifying above upper H with dot\",\"brief\":\"mod above upper H with dot\",\"sbrief\":\"mod above upper H with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E24\",\"mappings\":{\"default\":{\"default\":\"cap H underdot\"},\"mathspeak\":{\"default\":\"modifying below upper H with dot\",\"brief\":\"mod below upper H with dot\",\"sbrief\":\"mod below upper H with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E26\",\"mappings\":{\"default\":{\"default\":\"cap H double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper H with double dot\",\"brief\":\"mod above upper H with double dot\",\"sbrief\":\"mod above upper H with double dot\"}}},{\"category\":\"Lu\",\"key\":\"1E28\",\"mappings\":{\"default\":{\"default\":\"cap H cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper H with cedilla\",\"brief\":\"mod above upper H with cedilla\",\"sbrief\":\"mod above upper H with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"1E2A\",\"mappings\":{\"default\":{\"default\":\"cap H breve below\"},\"mathspeak\":{\"default\":\"modifying below upper H with breve below\",\"brief\":\"mod below upper H with breve below\",\"sbrief\":\"mod below upper H with breve below\"}}},{\"category\":\"Lu\",\"key\":\"1E2C\",\"mappings\":{\"default\":{\"default\":\"cap I tilde below\"},\"mathspeak\":{\"default\":\"upper I undertilde\",\"brief\":\"upper I undertilde\",\"sbrief\":\"upper I undertilde\"}}},{\"category\":\"Lu\",\"key\":\"1E30\",\"mappings\":{\"default\":{\"default\":\"cap K acute\"},\"mathspeak\":{\"default\":\"modifying above upper K with acute\",\"brief\":\"mod above upper K with acute\",\"sbrief\":\"mod above upper K with acute\"}}},{\"category\":\"Lu\",\"key\":\"1E32\",\"mappings\":{\"default\":{\"default\":\"cap K underdot\"},\"mathspeak\":{\"default\":\"modifying below upper K with dot\",\"brief\":\"mod below upper K with dot\",\"sbrief\":\"mod below upper K with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E34\",\"mappings\":{\"default\":{\"default\":\"cap K underbar\"},\"mathspeak\":{\"default\":\"upper K underbar\",\"brief\":\"upper K underbar\",\"sbrief\":\"upper K underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E36\",\"mappings\":{\"default\":{\"default\":\"cap L underdot\"},\"mathspeak\":{\"default\":\"modifying below upper L with dot\",\"brief\":\"mod below upper L with dot\",\"sbrief\":\"mod below upper L with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E3A\",\"mappings\":{\"default\":{\"default\":\"cap L underbar\"},\"mathspeak\":{\"default\":\"upper L underbar\",\"brief\":\"upper L underbar\",\"sbrief\":\"upper L underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E3C\",\"mappings\":{\"default\":{\"default\":\"cap L underhat\"},\"mathspeak\":{\"default\":\"modifying below upper L with caret\",\"brief\":\"mod below upper L with caret\",\"sbrief\":\"mod below upper L with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E3E\",\"mappings\":{\"default\":{\"default\":\"cap M acute\"},\"mathspeak\":{\"default\":\"modifying above upper M with acute\",\"brief\":\"mod above upper M with acute\",\"sbrief\":\"mod above upper M with acute\"}}},{\"category\":\"Lu\",\"key\":\"1E40\",\"mappings\":{\"default\":{\"default\":\"cap M overdot\"},\"mathspeak\":{\"default\":\"modifying above upper M with dot\",\"brief\":\"mod above upper M with dot\",\"sbrief\":\"mod above upper M with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E42\",\"mappings\":{\"default\":{\"default\":\"cap M underdot\"},\"mathspeak\":{\"default\":\"modifying below upper M with dot\",\"brief\":\"mod below upper M with dot\",\"sbrief\":\"mod below upper M with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E44\",\"mappings\":{\"default\":{\"default\":\"cap N overdot\"},\"mathspeak\":{\"default\":\"modifying above upper N with dot\",\"brief\":\"mod above upper N with dot\",\"sbrief\":\"mod above upper N with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E46\",\"mappings\":{\"default\":{\"default\":\"cap N underdot\"},\"mathspeak\":{\"default\":\"modifying below upper N with dot\",\"brief\":\"mod below upper N with dot\",\"sbrief\":\"mod below upper N with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E48\",\"mappings\":{\"default\":{\"default\":\"cap N underbar\"},\"mathspeak\":{\"default\":\"upper N underbar\",\"brief\":\"upper N underbar\",\"sbrief\":\"upper N underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E4A\",\"mappings\":{\"default\":{\"default\":\"cap N underhat\"},\"mathspeak\":{\"default\":\"modifying below upper N with caret\",\"brief\":\"mod below upper N with caret\",\"sbrief\":\"mod below upper N with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E54\",\"mappings\":{\"default\":{\"default\":\"cap P acute\"},\"mathspeak\":{\"default\":\"modifying above upper P with acute\",\"brief\":\"mod above upper P with acute\",\"sbrief\":\"mod above upper P with acute\"}}},{\"category\":\"Lu\",\"key\":\"1E56\",\"mappings\":{\"default\":{\"default\":\"cap P overdot\"},\"mathspeak\":{\"default\":\"modifying above upper P with dot\",\"brief\":\"mod above upper P with dot\",\"sbrief\":\"mod above upper P with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E58\",\"mappings\":{\"default\":{\"default\":\"cap R overdot\"},\"mathspeak\":{\"default\":\"modifying above upper R with dot\",\"brief\":\"mod above upper R with dot\",\"sbrief\":\"mod above upper R with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E5A\",\"mappings\":{\"default\":{\"default\":\"cap R underdot\"},\"mathspeak\":{\"default\":\"modifying below upper R with dot\",\"brief\":\"mod below upper R with dot\",\"sbrief\":\"mod below upper R with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E5E\",\"mappings\":{\"default\":{\"default\":\"cap R underbar\"},\"mathspeak\":{\"default\":\"upper R underbar\",\"brief\":\"upper R underbar\",\"sbrief\":\"upper R underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E60\",\"mappings\":{\"default\":{\"default\":\"cap S overdot\"},\"mathspeak\":{\"default\":\"modifying above upper S with dot\",\"brief\":\"mod above upper S with dot\",\"sbrief\":\"mod above upper S with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E62\",\"mappings\":{\"default\":{\"default\":\"cap S underdot\"},\"mathspeak\":{\"default\":\"modifying below upper S with dot\",\"brief\":\"mod below upper S with dot\",\"sbrief\":\"mod below upper S with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E6A\",\"mappings\":{\"default\":{\"default\":\"cap T overdot\"},\"mathspeak\":{\"default\":\"modifying above upper T with dot\",\"brief\":\"mod above upper T with dot\",\"sbrief\":\"mod above upper T with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E6C\",\"mappings\":{\"default\":{\"default\":\"cap T underdot\"},\"mathspeak\":{\"default\":\"modifying below upper T with dot\",\"brief\":\"mod below upper T with dot\",\"sbrief\":\"mod below upper T with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E6E\",\"mappings\":{\"default\":{\"default\":\"cap T underbar\"},\"mathspeak\":{\"default\":\"upper T underbar\",\"brief\":\"upper T underbar\",\"sbrief\":\"upper T underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E70\",\"mappings\":{\"default\":{\"default\":\"cap T underhat\"},\"mathspeak\":{\"default\":\"modifying below upper T with caret\",\"brief\":\"mod below upper T with caret\",\"sbrief\":\"mod below upper T with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E72\",\"mappings\":{\"default\":{\"default\":\"cap U double underdot\"},\"mathspeak\":{\"default\":\"modifying below upper U with double dot\",\"brief\":\"mod below upper U with double dot\",\"sbrief\":\"mod below upper U with double dot\"}}},{\"category\":\"Lu\",\"key\":\"1E74\",\"mappings\":{\"default\":{\"default\":\"cap U tilde below\"},\"mathspeak\":{\"default\":\"upper U undertilde\",\"brief\":\"upper U undertilde\",\"sbrief\":\"upper U undertilde\"}}},{\"category\":\"Lu\",\"key\":\"1E76\",\"mappings\":{\"default\":{\"default\":\"cap U underhat\"},\"mathspeak\":{\"default\":\"modifying below upper U with caret\",\"brief\":\"mod below upper U with caret\",\"sbrief\":\"mod below upper U with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E7C\",\"mappings\":{\"default\":{\"default\":\"cap V tilde\"},\"mathspeak\":{\"default\":\"upper V overtilde\",\"brief\":\"upper V overtilde\",\"sbrief\":\"upper V overtilde\"}}},{\"category\":\"Lu\",\"key\":\"1E7E\",\"mappings\":{\"default\":{\"default\":\"cap V underdot\"},\"mathspeak\":{\"default\":\"modifying below upper V with dot\",\"brief\":\"mod below upper V with dot\",\"sbrief\":\"mod below upper V with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E80\",\"mappings\":{\"default\":{\"default\":\"cap W grave\"},\"mathspeak\":{\"default\":\"modifying above upper W with grave\",\"brief\":\"mod above upper W with grave\",\"sbrief\":\"mod above upper W with grave\"}}},{\"category\":\"Lu\",\"key\":\"1E82\",\"mappings\":{\"default\":{\"default\":\"cap W acute\"},\"mathspeak\":{\"default\":\"modifying above upper W with acute\",\"brief\":\"mod above upper W with acute\",\"sbrief\":\"mod above upper W with acute\"}}},{\"category\":\"Lu\",\"key\":\"1E84\",\"mappings\":{\"default\":{\"default\":\"cap W double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper W with double dot\",\"brief\":\"mod above upper W with double dot\",\"sbrief\":\"mod above upper W with double dot\"}}},{\"category\":\"Lu\",\"key\":\"1E86\",\"mappings\":{\"default\":{\"default\":\"cap W overdot\"},\"mathspeak\":{\"default\":\"modifying above upper W with dot\",\"brief\":\"mod above upper W with dot\",\"sbrief\":\"mod above upper W with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E88\",\"mappings\":{\"default\":{\"default\":\"cap W underdot\"},\"mathspeak\":{\"default\":\"modifying below upper W with dot\",\"brief\":\"mod below upper W with dot\",\"sbrief\":\"mod below upper W with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E8A\",\"mappings\":{\"default\":{\"default\":\"cap X overdot\"},\"mathspeak\":{\"default\":\"modifying above upper X with dot\",\"brief\":\"mod above upper X with dot\",\"sbrief\":\"mod above upper X with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E8C\",\"mappings\":{\"default\":{\"default\":\"cap X double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper X with double dot\",\"brief\":\"mod above upper X with double dot\",\"sbrief\":\"mod above upper X with double dot\"}}},{\"category\":\"Lu\",\"key\":\"1E8E\",\"mappings\":{\"default\":{\"default\":\"cap Y overdot\"},\"mathspeak\":{\"default\":\"modifying above upper Y with dot\",\"brief\":\"mod above upper Y with dot\",\"sbrief\":\"mod above upper Y with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E90\",\"mappings\":{\"default\":{\"default\":\"cap Z circumflex\"},\"mathspeak\":{\"default\":\"modifying above upper Z with circumflex\",\"brief\":\"mod above upper Z with circumflex\",\"sbrief\":\"mod above upper Z with circumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E92\",\"mappings\":{\"default\":{\"default\":\"cap Z underdot\"},\"mathspeak\":{\"default\":\"modifying below upper Z with dot\",\"brief\":\"mod below upper Z with dot\",\"sbrief\":\"mod below upper Z with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E94\",\"mappings\":{\"default\":{\"default\":\"cap Z underbar\"},\"mathspeak\":{\"default\":\"upper Z underbar\",\"brief\":\"upper Z underbar\",\"sbrief\":\"upper Z underbar\"}}},{\"category\":\"Lu\",\"key\":\"1EA0\",\"mappings\":{\"default\":{\"default\":\"cap A underdot\"},\"mathspeak\":{\"default\":\"modifying below upper A with dot\",\"brief\":\"mod below upper A with dot\",\"sbrief\":\"mod below upper A with dot\"}}},{\"category\":\"Lu\",\"key\":\"1EA2\",\"mappings\":{\"default\":{\"default\":\"cap A hook\"},\"mathspeak\":{\"default\":\"modifying above upper A with hook\",\"brief\":\"mod above upper A with hook\",\"sbrief\":\"mod above upper A with hook\"}}},{\"category\":\"Lu\",\"key\":\"1EB8\",\"mappings\":{\"default\":{\"default\":\"cap E underdot\"},\"mathspeak\":{\"default\":\"modifying below upper E with dot\",\"brief\":\"mod below upper E with dot\",\"sbrief\":\"mod below upper E with dot\"}}},{\"category\":\"Lu\",\"key\":\"1EBA\",\"mappings\":{\"default\":{\"default\":\"cap E hook\"},\"mathspeak\":{\"default\":\"modifying above upper E with hook\",\"brief\":\"mod above upper E with hook\",\"sbrief\":\"mod above upper E with hook\"}}},{\"category\":\"Lu\",\"key\":\"1EBC\",\"mappings\":{\"default\":{\"default\":\"cap E tilde\"},\"mathspeak\":{\"default\":\"upper E overtilde\",\"brief\":\"upper E overtilde\",\"sbrief\":\"upper E overtilde\"}}},{\"category\":\"Lu\",\"key\":\"1EC8\",\"mappings\":{\"default\":{\"default\":\"cap I hook\"},\"mathspeak\":{\"default\":\"modifying above upper I with hook\",\"brief\":\"mod above upper I with hook\",\"sbrief\":\"mod above upper I with hook\"}}},{\"category\":\"Lu\",\"key\":\"1ECA\",\"mappings\":{\"default\":{\"default\":\"cap I underdot\"},\"mathspeak\":{\"default\":\"modifying below upper I with dot\",\"brief\":\"mod below upper I with dot\",\"sbrief\":\"mod below upper I with dot\"}}},{\"category\":\"Lu\",\"key\":\"1ECC\",\"mappings\":{\"default\":{\"default\":\"cap O underdot\"},\"mathspeak\":{\"default\":\"modifying below upper O with dot\",\"brief\":\"mod below upper O with dot\",\"sbrief\":\"mod below upper O with dot\"}}},{\"category\":\"Lu\",\"key\":\"1ECE\",\"mappings\":{\"default\":{\"default\":\"cap O hook\"},\"mathspeak\":{\"default\":\"modifying above upper O with hook\",\"brief\":\"mod above upper O with hook\",\"sbrief\":\"mod above upper O with hook\"}}},{\"category\":\"Lu\",\"key\":\"1EE4\",\"mappings\":{\"default\":{\"default\":\"cap U underdot\"},\"mathspeak\":{\"default\":\"modifying below upper U with dot\",\"brief\":\"mod below upper U with dot\",\"sbrief\":\"mod below upper U with dot\"}}},{\"category\":\"Lu\",\"key\":\"1EE6\",\"mappings\":{\"default\":{\"default\":\"cap U hook\"},\"mathspeak\":{\"default\":\"modifying above upper U with hook\",\"brief\":\"mod above upper U with hook\",\"sbrief\":\"mod above upper U with hook\"}}},{\"category\":\"Lu\",\"key\":\"1EF2\",\"mappings\":{\"default\":{\"default\":\"cap Y grave\"},\"mathspeak\":{\"default\":\"modifying above upper Y with grave\",\"brief\":\"mod above upper Y with grave\",\"sbrief\":\"mod above upper Y with grave\"}}},{\"category\":\"Lu\",\"key\":\"1EF4\",\"mappings\":{\"default\":{\"default\":\"cap Y underdot\"},\"mathspeak\":{\"default\":\"modifying below upper Y with dot\",\"brief\":\"mod below upper Y with dot\",\"sbrief\":\"mod below upper Y with dot\"}}},{\"category\":\"Lu\",\"key\":\"1EF6\",\"mappings\":{\"default\":{\"default\":\"cap Y hook\"},\"mathspeak\":{\"default\":\"modifying above upper Y with hook\",\"brief\":\"mod above upper Y with hook\",\"sbrief\":\"mod above upper Y with hook\"}}},{\"category\":\"Lu\",\"key\":\"1EF8\",\"mappings\":{\"default\":{\"default\":\"cap Y tilde\"},\"mathspeak\":{\"default\":\"upper Y overtilde\",\"brief\":\"upper Y overtilde\",\"sbrief\":\"upper Y overtilde\"}}}]\n,\n\"en/symbols/math_angles.js\": \n[{\"locale\":\"en\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right angle with arc\"}},\"key\":\"22BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right angle with downwards zigzag arrow\"}},\"key\":\"237C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"three dimensional angle\"}},\"key\":\"27C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle opening left\"}},\"key\":\"299B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right angle variant with square\"}},\"key\":\"299C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured right angle with dot\"}},\"key\":\"299D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"angle with s inside\"}},\"key\":\"299E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"acute angle\"}},\"key\":\"299F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"spherical angle opening left\"}},\"key\":\"29A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"spherical angle opening up\"}},\"key\":\"29A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"turned angle\"}},\"key\":\"29A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed angle\"}},\"key\":\"29A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"angle with underbar\"}},\"key\":\"29A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed angle with underbar\"}},\"key\":\"29A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"oblique angle opening up\"}},\"key\":\"29A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"oblique angle opening down\"}},\"key\":\"29A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing up and right\"}},\"key\":\"29A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing up and left\"}},\"key\":\"29A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing down and right\"}},\"key\":\"29AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing down and left\"}},\"key\":\"29AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing right and up\"}},\"key\":\"29AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing left and up\"}},\"key\":\"29AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing right and down\"}},\"key\":\"29AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing left and down\"}},\"key\":\"29AF\"}]\n,\n\"en/symbols/math_arrows.js\": \n[{\"locale\":\"en\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow\"},\"mathspeak\":{\"sbrief\":\"L arrow\"}},\"key\":\"2190\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up arrow\"},\"mathspeak\":{\"sbrief\":\"U arrow\"}},\"key\":\"2191\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow\"},\"mathspeak\":{\"sbrief\":\"R arrow\"}},\"key\":\"2192\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down arrow\"},\"mathspeak\":{\"sbrief\":\"D arrow\"}},\"key\":\"2193\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right arrow\"},\"mathspeak\":{\"sbrief\":\"L R arrow\"}},\"key\":\"2194\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up down arrow\"},\"mathspeak\":{\"sbrief\":\"U D arrow\"}},\"key\":\"2195\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up left arrow\"},\"mathspeak\":{\"sbrief\":\"U L arrow\"}},\"key\":\"2196\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up right arrow\"},\"mathspeak\":{\"sbrief\":\"U R arrow\"}},\"key\":\"2197\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down right arrow\"},\"mathspeak\":{\"sbrief\":\"D R arrow\"}},\"key\":\"2198\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down left arrow\"},\"mathspeak\":{\"sbrief\":\"D L arrow\"}},\"key\":\"2199\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"L arrow with stroke\"}},\"key\":\"219A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"R arrow with stroke\"}},\"key\":\"219B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left wave arrow\"},\"mathspeak\":{\"sbrief\":\"L wave arrow\"}},\"key\":\"219C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right wave arrow\"},\"mathspeak\":{\"sbrief\":\"R wave arrow\"}},\"key\":\"219D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"two headed left arrow\"},\"mathspeak\":{\"sbrief\":\"two headed L arrow\"}},\"key\":\"219E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"two headed up arrow\"},\"mathspeak\":{\"sbrief\":\"two headed U arrow\"}},\"key\":\"219F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two headed right arrow\"},\"mathspeak\":{\"sbrief\":\"two headed R arrow\"}},\"key\":\"21A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"two headed down arrow\"},\"mathspeak\":{\"sbrief\":\"two headed D arrow\"}},\"key\":\"21A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow with tail\"},\"mathspeak\":{\"sbrief\":\"L arrow with tail\"}},\"key\":\"21A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with tail\"},\"mathspeak\":{\"sbrief\":\"R arrow with tail\"}},\"key\":\"21A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow from bar\"},\"mathspeak\":{\"sbrief\":\"L arrow from bar\"}},\"key\":\"21A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrow from bar\"},\"mathspeak\":{\"sbrief\":\"U arrow from bar\"}},\"key\":\"21A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow from bar\"},\"mathspeak\":{\"sbrief\":\"R arrow from bar\"}},\"key\":\"21A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrow from bar\"},\"mathspeak\":{\"sbrief\":\"D arrow from bar\"}},\"key\":\"21A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up down arrow with base\"},\"mathspeak\":{\"sbrief\":\"U D arrow with base\"}},\"key\":\"21A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow with hook\"},\"mathspeak\":{\"sbrief\":\"L arrow with hook\"}},\"key\":\"21A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow with hook\"},\"mathspeak\":{\"sbrief\":\"R arrow with hook\"}},\"key\":\"21AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow with loop\"},\"mathspeak\":{\"sbrief\":\"L arrow with loop\"}},\"key\":\"21AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow with loop\"},\"mathspeak\":{\"sbrief\":\"R arrow with loop\"}},\"key\":\"21AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left right wave arrow\"},\"mathspeak\":{\"sbrief\":\"L R wave arrow\"}},\"key\":\"21AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"L R arrow with stroke\"}},\"key\":\"21AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down zigzag arrow\"},\"mathspeak\":{\"sbrief\":\"d zigzag arrow\"}},\"key\":\"21AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrow with tip left\"},\"mathspeak\":{\"sbrief\":\"U arrow with tip left\"}},\"key\":\"21B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrow with tip right\"},\"mathspeak\":{\"sbrief\":\"U arrow with tip right\"}},\"key\":\"21B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrow with tip left\"},\"mathspeak\":{\"sbrief\":\"D arrow with tip left\"}},\"key\":\"21B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrow with tip right\"},\"mathspeak\":{\"sbrief\":\"D arrow with tip right\"}},\"key\":\"21B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow with corner down\"},\"mathspeak\":{\"sbrief\":\"R arrow with corner down\"}},\"key\":\"21B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrow with corner left\"},\"mathspeak\":{\"sbrief\":\"D arrow with corner left\"}},\"key\":\"21B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"anticlockwise top semicircle arrow\"}},\"key\":\"21B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"clockwise top semicircle arrow\"}},\"key\":\"21B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up left arrow to long bar\"},\"mathspeak\":{\"sbrief\":\"U L arrow to long bar\"}},\"key\":\"21B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow to bar over right arrow to bar\"},\"mathspeak\":{\"sbrief\":\"L arrow to bar over R arrow to bar\"}},\"key\":\"21B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"anticlockwise open circle arrow\"}},\"key\":\"21BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"clockwise open circle arrow\"}},\"key\":\"21BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow over left arrow\"},\"mathspeak\":{\"sbrief\":\"R arrow over L arrow\"}},\"key\":\"21C4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrow left of down arrow\"},\"mathspeak\":{\"sbrief\":\"U arrow L of D arrow\"}},\"key\":\"21C5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow over right arrow\"},\"mathspeak\":{\"sbrief\":\"L arrow over R arrow\"}},\"key\":\"21C6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left paired arrows\"},\"mathspeak\":{\"sbrief\":\"L paired arrows\"}},\"key\":\"21C7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up paired arrows\"},\"mathspeak\":{\"sbrief\":\"U paired arrows\"}},\"key\":\"21C8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right paired arrows\"},\"mathspeak\":{\"sbrief\":\"R paired arrows\"}},\"key\":\"21C9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down paired arrows\"},\"mathspeak\":{\"sbrief\":\"D paired arrows\"}},\"key\":\"21CA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left double arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"L double arrow with stroke\"}},\"key\":\"21CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right double arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"L R double arrow with stroke\"}},\"key\":\"21CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right double arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"R double arrow with stroke\"}},\"key\":\"21CF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left double arrow\"},\"mathspeak\":{\"sbrief\":\"L double arrow\"}},\"key\":\"21D0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up double arrow\"},\"mathspeak\":{\"sbrief\":\"U double arrow\"}},\"key\":\"21D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right double arrow\"},\"mathspeak\":{\"sbrief\":\"R double arrow\"}},\"key\":\"21D2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down double arrow\"},\"mathspeak\":{\"sbrief\":\"d double arrow\"}},\"key\":\"21D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right double arrow\"},\"mathspeak\":{\"sbrief\":\"L R double arrow\"}},\"key\":\"21D4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up down double arrow\"},\"mathspeak\":{\"sbrief\":\"U d double arrow\"}},\"key\":\"21D5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up left double arrow\"},\"mathspeak\":{\"sbrief\":\"U L double arrow\"}},\"key\":\"21D6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up right double arrow\"},\"mathspeak\":{\"sbrief\":\"U R double arrow\"}},\"key\":\"21D7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down right double arrow\"},\"mathspeak\":{\"sbrief\":\"d R double arrow\"}},\"key\":\"21D8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down left double arrow\"},\"mathspeak\":{\"sbrief\":\"d L double arrow\"}},\"key\":\"21D9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left triple arrow\"},\"mathspeak\":{\"sbrief\":\"L triple arrow\"}},\"key\":\"21DA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right triple arrow\"},\"mathspeak\":{\"sbrief\":\"r triple arrow\"}},\"key\":\"21DB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left squiggle arrow\"},\"mathspeak\":{\"sbrief\":\"L squiggle arrow\"}},\"key\":\"21DC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right squiggle arrow\"},\"mathspeak\":{\"sbrief\":\"r squiggle arrow\"}},\"key\":\"21DD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrow with double stroke\"},\"mathspeak\":{\"sbrief\":\"U arrow with double stroke\"}},\"key\":\"21DE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrow with double stroke\"},\"mathspeak\":{\"sbrief\":\"D arrow with double stroke\"}},\"key\":\"21DF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left dasheD arrow\"},\"mathspeak\":{\"sbrief\":\"L dasheD arrow\"}},\"key\":\"21E0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up dasheD arrow\"},\"mathspeak\":{\"sbrief\":\"U dasheD arrow\"}},\"key\":\"21E1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right dasheD arrow\"},\"mathspeak\":{\"sbrief\":\"r dasheD arrow\"}},\"key\":\"21E2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down dasheD arrow\"},\"mathspeak\":{\"sbrief\":\"d dasheD arrow\"}},\"key\":\"21E3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow to bar\"},\"mathspeak\":{\"sbrief\":\"L arrow to bar\"}},\"key\":\"21E4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow to bar\"},\"mathspeak\":{\"sbrief\":\"R arrow to bar\"}},\"key\":\"21E5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white left arrow\"},\"mathspeak\":{\"sbrief\":\"white L arrow\"}},\"key\":\"21E6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up arrow\"},\"mathspeak\":{\"sbrief\":\"white U arrow\"}},\"key\":\"21E7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white right arrow\"},\"mathspeak\":{\"sbrief\":\"white R arrow\"}},\"key\":\"21E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white down arrow\"},\"mathspeak\":{\"sbrief\":\"white D arrow\"}},\"key\":\"21E9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up arrow from bar\"},\"mathspeak\":{\"sbrief\":\"white U arrow from bar\"}},\"key\":\"21EA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up arrow on pedestal\"},\"mathspeak\":{\"sbrief\":\"white U arrow on pedestal\"}},\"key\":\"21EB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up arrow on pedestal with horizontal bar\"},\"mathspeak\":{\"sbrief\":\"white U arrow on pedestal with horizontal bar\"}},\"key\":\"21EC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up arrow on pedestal with vertical bar\"},\"mathspeak\":{\"sbrief\":\"white U arrow on pedestal with vertical bar\"}},\"key\":\"21ED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white double up arrow\"},\"mathspeak\":{\"sbrief\":\"white double U arrow\"}},\"key\":\"21EE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white double up arrow on pedestal\"},\"mathspeak\":{\"sbrief\":\"white double U arrow on pedestal\"}},\"key\":\"21EF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white right arrow from wall\"},\"mathspeak\":{\"sbrief\":\"white R arrow from wall\"}},\"key\":\"21F0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"north west arrow to corner\"}},\"key\":\"21F1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"south east arrow to corner\"}},\"key\":\"21F2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up down white arrow\"},\"mathspeak\":{\"sbrief\":\"U d white arrow\"}},\"key\":\"21F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with small circle\"},\"mathspeak\":{\"sbrief\":\"R arrow with small circle\"}},\"key\":\"21F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down arrow left of up arrow\"},\"mathspeak\":{\"sbrief\":\"D arrow l of U arrow\"}},\"key\":\"21F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"three right arrows\"},\"mathspeak\":{\"sbrief\":\"three R arrows\"}},\"key\":\"21F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L arrow with vertical stroke\"}},\"key\":\"21F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"R arrow with vertical stroke\"}},\"key\":\"21F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L R arrow with vertical stroke\"}},\"key\":\"21F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L arrow with double vertical stroke\"}},\"key\":\"21FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"R arrow with double vertical stroke\"}},\"key\":\"21FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right arrow with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L R arrow with double vertical stroke\"}},\"key\":\"21FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left open headed arrow\"},\"mathspeak\":{\"sbrief\":\"l open headed arrow\"}},\"key\":\"21FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right open headed arrow\"},\"mathspeak\":{\"sbrief\":\"r open headed arrow\"}},\"key\":\"21FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right open headed arrow\"},\"mathspeak\":{\"sbrief\":\"L R open headed arrow\"}},\"key\":\"21FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"electric arrow\"}},\"key\":\"2301\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrowhead\"},\"mathspeak\":{\"sbrief\":\"U arrowhead\"}},\"key\":\"2303\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrowhead\"},\"mathspeak\":{\"sbrief\":\"D arrowhead\"}},\"key\":\"2304\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrowhead between two horizontal bars\",\"alternative\":\"enter key\"},\"mathspeak\":{\"sbrief\":\"U arrowhead between two horizontal bars\"}},\"key\":\"2324\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"broken circle with northwest arrow\"}},\"key\":\"238B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy wide headed right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy wide headed R arrow\"}},\"key\":\"2794\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy down right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy d R arrow\"}},\"key\":\"2798\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy R arrow\"}},\"key\":\"2799\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy up right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy U R arrow\"}},\"key\":\"279A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"drafting point right arrow\"},\"mathspeak\":{\"sbrief\":\"drafting point R arrow\"}},\"key\":\"279B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy round tipped right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy round tipped R arrow\"}},\"key\":\"279C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"triangle headed right arrow\"},\"mathspeak\":{\"sbrief\":\"triangle headed R arrow\"}},\"key\":\"279D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy triangle headed right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy triangle headed R arrow\"}},\"key\":\"279E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"dashed triangle headed right arrow\"},\"mathspeak\":{\"sbrief\":\"dashed triangle headed R arrow\"}},\"key\":\"279F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy dashed triangle headed right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy dashed triangle headed R arrow\"}},\"key\":\"27A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right arrow\"},\"mathspeak\":{\"sbrief\":\"black R arrow\"}},\"key\":\"27A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"three d top lighted right arrowhead\"},\"mathspeak\":{\"sbrief\":\"three d top lighted R arrowhead\"}},\"key\":\"27A2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"three d bottom lighted right arrowhead\"},\"mathspeak\":{\"sbrief\":\"three d bottom lighted R arrowhead\"}},\"key\":\"27A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right arrowhead\"},\"mathspeak\":{\"sbrief\":\"black R arrowhead\"}},\"key\":\"27A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy black curved down and right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy black curved d and R arrow\"}},\"key\":\"27A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy black curved up and right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy black curved U and R arrow\"}},\"key\":\"27A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"squat black right arrow\"},\"mathspeak\":{\"sbrief\":\"squat black R arrow\"}},\"key\":\"27A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy concave pointed black right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy concave pointed black R arrow\"}},\"key\":\"27A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right shaded white right arrow\"},\"mathspeak\":{\"sbrief\":\"right shaded white R arrow\"}},\"key\":\"27A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left shaded white right arrow\"},\"mathspeak\":{\"sbrief\":\"left shaded white R arrow\"}},\"key\":\"27AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"back tilted shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"back tilted shadowed white R arrow\"}},\"key\":\"27AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"front tilted shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"front tilted shadowed white R arrow\"}},\"key\":\"27AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy lower right shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy lower right shadowed white R arrow\"}},\"key\":\"27AD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy upper right shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy upper right shadowed white R arrow\"}},\"key\":\"27AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"notched lower right shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"notched lower right shadowed white R arrow\"}},\"key\":\"27AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"notched upper right shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"notched upper right shadowed white R arrow\"}},\"key\":\"27B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circled heavy white right arrow\"},\"mathspeak\":{\"sbrief\":\"circled heavy white R arrow\"}},\"key\":\"27B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white feathered right arrow\"},\"mathspeak\":{\"sbrief\":\"white feathered R arrow\"}},\"key\":\"27B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black feathered down right arrow\"},\"mathspeak\":{\"sbrief\":\"black feathered d R arrow\"}},\"key\":\"27B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black feathered right arrow\"},\"mathspeak\":{\"sbrief\":\"black feathered R arrow\"}},\"key\":\"27B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black feathered up right arrow\"},\"mathspeak\":{\"sbrief\":\"black feathered U R arrow\"}},\"key\":\"27B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy black feathered down right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy black feathered d R arrow\"}},\"key\":\"27B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy black feathered right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy black feathered R arrow\"}},\"key\":\"27B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy black feathered up right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy black feathered U R arrow\"}},\"key\":\"27B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"teardrop barbed right arrow\"},\"mathspeak\":{\"sbrief\":\"teardrop barbed R arrow\"}},\"key\":\"27BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy teardrop shanked right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy teardrop shanked R arrow\"}},\"key\":\"27BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"wedge tailed right arrow\"},\"mathspeak\":{\"sbrief\":\"wedge tailed R arrow\"}},\"key\":\"27BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy wedge tailed right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy wedge tailed R arrow\"}},\"key\":\"27BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"open outlined right arrow\"},\"mathspeak\":{\"sbrief\":\"open outlined R arrow\"}},\"key\":\"27BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up quadruple arrow\"},\"mathspeak\":{\"sbrief\":\"U quadruple arrow\"}},\"key\":\"27F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down quadruple arrow\"},\"mathspeak\":{\"sbrief\":\"d quadrule arrow\"}},\"key\":\"27F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"anticlockwise gapped circle arrow\"}},\"key\":\"27F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"clockwise gapped circle arrow\"}},\"key\":\"27F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with circled plus\"},\"mathspeak\":{\"sbrief\":\"R arrow with circled plus\"}},\"key\":\"27F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left arrow\"},\"mathspeak\":{\"sbrief\":\"long L arrow\"}},\"key\":\"27F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right arrow\"},\"mathspeak\":{\"sbrief\":\"long R arrow\"}},\"key\":\"27F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left right arrow\"},\"mathspeak\":{\"sbrief\":\"long L R arrow\"}},\"key\":\"27F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left double arrow\"},\"mathspeak\":{\"sbrief\":\"long l double arrow\"}},\"key\":\"27F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right double arrow\"},\"mathspeak\":{\"sbrief\":\"long R double arrow\"}},\"key\":\"27F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left right double arrow\"},\"mathspeak\":{\"sbrief\":\"long L R double arrow\"}},\"key\":\"27FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left arrow from bar\"},\"mathspeak\":{\"sbrief\":\"long L arrow from bar\"}},\"key\":\"27FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right arrow from bar\"},\"mathspeak\":{\"sbrief\":\"long R arrow from bar\"}},\"key\":\"27FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left double arrow from bar\"},\"mathspeak\":{\"sbrief\":\"long l double arrow from bar\"}},\"key\":\"27FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right double arrow from bar\"},\"mathspeak\":{\"sbrief\":\"long R double arrow from bar\"}},\"key\":\"27FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right squiggle arrow\"},\"mathspeak\":{\"sbrief\":\"long r squiggle arrow\"}},\"key\":\"27FF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two headed right arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"two headed R arrow with vertical stroke\"}},\"key\":\"2900\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two headed right arrow with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"two headed R arrow with double vertical stroke\"}},\"key\":\"2901\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double left arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"double L arrow with vertical stroke\"}},\"key\":\"2902\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double right arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"double R arrow with vertical stroke\"}},\"key\":\"2903\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double left right arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"double L R arrow with vertical stroke\"}},\"key\":\"2904\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two headed right arrow from bar\"},\"mathspeak\":{\"sbrief\":\"two headed R arrow from bar\"}},\"key\":\"2905\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double left arrow from bar\"},\"mathspeak\":{\"sbrief\":\"double L arrow from bar\"}},\"key\":\"2906\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double right arrow from bar\"},\"mathspeak\":{\"sbrief\":\"double R arrow from bar\"}},\"key\":\"2907\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"arrow down with horizontal stroke\"}},\"key\":\"2908\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up arrow with horizontal stroke\"},\"mathspeak\":{\"sbrief\":\"U arrow with horizontal stroke\"}},\"key\":\"2909\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up triple arrow\"},\"mathspeak\":{\"sbrief\":\"U triple arrow\"}},\"key\":\"290A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down triple arrow\"},\"mathspeak\":{\"sbrief\":\"d triple arrow\"}},\"key\":\"290B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left double dash arrow\"},\"mathspeak\":{\"sbrief\":\"l double dash arrow\"}},\"key\":\"290C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right double dash arrow\"},\"mathspeak\":{\"sbrief\":\"R double dash arrow\"}},\"key\":\"290D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left triple dash arrow\"},\"mathspeak\":{\"sbrief\":\"l triple dash arrow\"}},\"key\":\"290E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right triple dash arrow\"},\"mathspeak\":{\"sbrief\":\"r triple dash arrow\"}},\"key\":\"290F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right two headed triple dash arrow\"},\"mathspeak\":{\"sbrief\":\"r two headed triple dash arrow\"}},\"key\":\"2910\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with dotted stem\"},\"mathspeak\":{\"sbrief\":\"R arrow with dotted stem\"}},\"key\":\"2911\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up arrow to bar\"},\"mathspeak\":{\"sbrief\":\"U arrow to bar\"}},\"key\":\"2912\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down arrow to bar\"},\"mathspeak\":{\"sbrief\":\"D arrow to bar\"}},\"key\":\"2913\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with tail with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"R arrow with tail with vertical stroke\"}},\"key\":\"2914\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with tail with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"R arrow with tail with double vertical stroke\"}},\"key\":\"2915\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right two headed arrow with tail\"},\"mathspeak\":{\"sbrief\":\"r two headed arrow with tail\"}},\"key\":\"2916\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right two headed arrow with tail with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"r two headed arrow with tail with vertical stroke\"}},\"key\":\"2917\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right two headed arrow with tail with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"r two headed arrow with tail with double vertical stroke\"}},\"key\":\"2918\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow tail\"},\"mathspeak\":{\"sbrief\":\"L arrow tail\"}},\"key\":\"2919\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow tail\"},\"mathspeak\":{\"sbrief\":\"R arrow tail\"}},\"key\":\"291A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left double arrow tail\"},\"mathspeak\":{\"sbrief\":\"l double arrow tail\"}},\"key\":\"291B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right double arrow tail\"},\"mathspeak\":{\"sbrief\":\"R double arrow tail\"}},\"key\":\"291C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow to black diamond\"},\"mathspeak\":{\"sbrief\":\"L arrow to black diamond\"}},\"key\":\"291D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow to black diamond\"},\"mathspeak\":{\"sbrief\":\"R arrow to black diamond\"}},\"key\":\"291E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow from bar to black diamond\"},\"mathspeak\":{\"sbrief\":\"L arrow from bar to black diamond\"}},\"key\":\"291F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow from bar to black diamond\"},\"mathspeak\":{\"sbrief\":\"R arrow from bar to black diamond\"}},\"key\":\"2920\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north west and south east arrow\"}},\"key\":\"2921\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north east and south west arrow\"}},\"key\":\"2922\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north west arrow with hook\"}},\"key\":\"2923\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north east arrow with hook\"}},\"key\":\"2924\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"south east arrow with hook\"}},\"key\":\"2925\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"south west arrow with hook\"}},\"key\":\"2926\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north west arrow and north east arrow\"}},\"key\":\"2927\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north east arrow and south east arrow\"}},\"key\":\"2928\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"south east arrow and south west arrow\"}},\"key\":\"2929\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"south west arrow and north west arrow\"}},\"key\":\"292A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"south east arrow crossing north east arrow\"}},\"key\":\"292D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north east arrow crossing south east arrow\"}},\"key\":\"292E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"falling diagonal crossing north east arrow\"}},\"key\":\"292F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"rising diagonal crossing south east arrow\"}},\"key\":\"2930\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north east arrow crossing north west arrow\"}},\"key\":\"2931\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north west arrow crossing north east arrow\"}},\"key\":\"2932\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"wave arrow pointing directly right\"}},\"key\":\"2933\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"arrow pointing right then curving up\"}},\"key\":\"2934\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"arrow pointing right then curving down\"}},\"key\":\"2935\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"arrow pointing down then curving left\"}},\"key\":\"2936\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"arrow pointing down then curving right\"}},\"key\":\"2937\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right side arc clockwise arrow\"},\"mathspeak\":{\"sbrief\":\"r side arc clockwise arrow\"}},\"key\":\"2938\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left side arc anticlockwise arrow\"},\"mathspeak\":{\"sbrief\":\"l side arc anticlockwise arrow\"}},\"key\":\"2939\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top arc anticlockwise arrow\"}},\"key\":\"293A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bottom arc anticlockwise arrow\"}},\"key\":\"293B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top arc clockwise arrow with minus\"}},\"key\":\"293C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top arc anticlockwise arrow with plus\"}},\"key\":\"293D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down right semicircular clockwise arrow\"},\"mathspeak\":{\"sbrief\":\"d r semicircular clockwise arrow\"}},\"key\":\"293E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down left semicircular anticlockwise arrow\"},\"mathspeak\":{\"sbrief\":\"d l semicircular anticlockwise arrow\"}},\"key\":\"293F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"anticlockwise closed circle arrow\"}},\"key\":\"2940\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"clockwise closed circle arrow\"}},\"key\":\"2941\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow above short left arrow\"},\"mathspeak\":{\"sbrief\":\"R arrow above short L arrow\"}},\"key\":\"2942\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow above short right arrow\"},\"mathspeak\":{\"sbrief\":\"L arrow above short R arrow\"}},\"key\":\"2943\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short right arrow above left arrow\"},\"mathspeak\":{\"sbrief\":\"short R arrow above L arrow\"}},\"key\":\"2944\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with plus below\"},\"mathspeak\":{\"sbrief\":\"R arrow with plus below\"}},\"key\":\"2945\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with plus below\"},\"mathspeak\":{\"sbrief\":\"L arrow with plus below\"}},\"key\":\"2946\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow through x\"},\"mathspeak\":{\"sbrief\":\"R arrow through x\"}},\"key\":\"2947\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right arrow through small circle\"},\"mathspeak\":{\"sbrief\":\"L R arrow through small circle\"}},\"key\":\"2948\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up two headed arrow from small circle\"},\"mathspeak\":{\"sbrief\":\"U two headed arrow from small circle\"}},\"key\":\"2949\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right double arrow with rounded head\"},\"mathspeak\":{\"sbrief\":\"R double arrow with rounded head\"}},\"key\":\"2970\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals sign above right arrow\"},\"mathspeak\":{\"sbrief\":\"equals sign above R arrow\"}},\"key\":\"2971\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde operator above right arrow\"},\"mathspeak\":{\"sbrief\":\"tilde operator above R arrow\"}},\"key\":\"2972\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow above tilde operator\"},\"mathspeak\":{\"sbrief\":\"L arrow above tilde operator\"}},\"key\":\"2973\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow above tilde operator\"},\"mathspeak\":{\"sbrief\":\"R arrow above tilde operator\"}},\"key\":\"2974\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow above almost equals\"},\"mathspeak\":{\"sbrief\":\"R arrow above almost equals\"}},\"key\":\"2975\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above left arrow\"},\"mathspeak\":{\"sbrief\":\"less than above L arrow\"}},\"key\":\"2976\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow through less than\"},\"mathspeak\":{\"sbrief\":\"L arrow through less than\"}},\"key\":\"2977\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above right arrow\"},\"mathspeak\":{\"sbrief\":\"greater than above R arrow\"}},\"key\":\"2978\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset above right arrow\"},\"mathspeak\":{\"sbrief\":\"subset above R arrow\"}},\"key\":\"2979\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow through subset\"},\"mathspeak\":{\"sbrief\":\"L arrow through subset\"}},\"key\":\"297A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset above left arrow\"},\"mathspeak\":{\"sbrief\":\"suerset above L arrow\"}},\"key\":\"297B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"empty set with right arrow above\"},\"mathspeak\":{\"sbrief\":\"empty set with R arrow above\"}},\"key\":\"29B3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"empty set with left arrow above\"},\"mathspeak\":{\"sbrief\":\"empty set with L arrow above\"}},\"key\":\"29B4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up arrow through circle\"},\"mathspeak\":{\"sbrief\":\"U arrow through circle\"}},\"key\":\"29BD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black diamond with down arrow\"},\"mathspeak\":{\"sbrief\":\"black diamond with D arrow\"}},\"key\":\"29EA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white circle with down arrow\"},\"mathspeak\":{\"sbrief\":\"white circle with D arrow\"}},\"key\":\"29EC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black circle with down arrow\"},\"mathspeak\":{\"sbrief\":\"black circle with D arrow\"}},\"key\":\"29ED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with left arrow with hook\"},\"mathspeak\":{\"sbrief\":\"integral with L arrow with hook\"}},\"key\":\"2A17\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"north east white arrow\"}},\"key\":\"2B00\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"north west white arrow\"}},\"key\":\"2B01\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"south east white arrow\"}},\"key\":\"2B02\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"south west white arrow\"}},\"key\":\"2B03\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left right white arrow\"},\"mathspeak\":{\"sbrief\":\"L R white arrow\"}},\"key\":\"2B04\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left black arrow\"},\"mathspeak\":{\"sbrief\":\"L black arrow\"}},\"key\":\"2B05\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up black arrow\"},\"mathspeak\":{\"sbrief\":\"U black arrow\"}},\"key\":\"2B06\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down black arrow\"},\"mathspeak\":{\"sbrief\":\"D black arrow\"}},\"key\":\"2B07\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"north east black arrow\"}},\"key\":\"2B08\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"north west black arrow\"}},\"key\":\"2B09\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"south east black arrow\"}},\"key\":\"2B0A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"south west black arrow\"}},\"key\":\"2B0B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left right black arrow\"},\"mathspeak\":{\"sbrief\":\"L R black arrow\"}},\"key\":\"2B0C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up down black arrow\"},\"mathspeak\":{\"sbrief\":\"U D black arrow\"}},\"key\":\"2B0D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow with tip down\"},\"mathspeak\":{\"sbrief\":\"R arrow with tip down\"}},\"key\":\"2B0E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow with tip up\"},\"mathspeak\":{\"sbrief\":\"R arrow with tip up\"}},\"key\":\"2B0F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow with tip down\"},\"mathspeak\":{\"sbrief\":\"L arrow with tip down\"}},\"key\":\"2B10\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow with tip up\"},\"mathspeak\":{\"sbrief\":\"L arrow with tip up\"}},\"key\":\"2B11\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with small circle\"},\"mathspeak\":{\"sbrief\":\"L arrow with small circle\"}},\"key\":\"2B30\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"three left arrows\"},\"mathspeak\":{\"sbrief\":\"three L arrows\"}},\"key\":\"2B31\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with circled plus\"},\"mathspeak\":{\"sbrief\":\"L arrow with circled plus\"}},\"key\":\"2B32\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left squiggle arrow\"},\"mathspeak\":{\"sbrief\":\"long l squiggle arrow\"}},\"key\":\"2B33\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow with vertical stroke\"}},\"key\":\"2B34\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow with double vertical stroke\"}},\"key\":\"2B35\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow from bar\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow from bar\"}},\"key\":\"2B36\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed triple dash arrow\"},\"mathspeak\":{\"sbrief\":\"l two headed triple dash arrow\"}},\"key\":\"2B37\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with dotted stem\"},\"mathspeak\":{\"sbrief\":\"L arrow with dotted stem\"}},\"key\":\"2B38\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with tail with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L arrow with tail with vertical stroke\"}},\"key\":\"2B39\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with tail with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L arrow with tail with double vertical stroke\"}},\"key\":\"2B3A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow with tail\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow with tail\"}},\"key\":\"2B3B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow with tail with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow with tail with vertical stroke\"}},\"key\":\"2B3C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow with tail with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow with tail with double vertical stroke\"}},\"key\":\"2B3D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow through x\"},\"mathspeak\":{\"sbrief\":\"L arrow through x\"}},\"key\":\"2B3E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"wave arrow pointing directly left\"}},\"key\":\"2B3F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals sign above left arrow\"},\"mathspeak\":{\"sbrief\":\"equals sign above L arrow\"}},\"key\":\"2B40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reverse tilde operator above left arrow\"},\"mathspeak\":{\"sbrief\":\"reverse tilde operator above L arrow\"}},\"key\":\"2B41\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow above reverse almost equals\"},\"mathspeak\":{\"sbrief\":\"L arrow above reverse almost equals\"}},\"key\":\"2B42\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow through greater than\"},\"mathspeak\":{\"sbrief\":\"R arrow through greater than\"}},\"key\":\"2B43\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow through superset\"},\"mathspeak\":{\"sbrief\":\"R arrow through superset\"}},\"key\":\"2B44\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left quadruple arrow\"},\"mathspeak\":{\"sbrief\":\"l quadrule arrow\"}},\"key\":\"2B45\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right quadruple arrow\"},\"mathspeak\":{\"sbrief\":\"r quadrule arrow\"}},\"key\":\"2B46\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reverse tilde operator above right arrow\"},\"mathspeak\":{\"sbrief\":\"reverse tilde operator above R arrow\"}},\"key\":\"2B47\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow above reverse almost equals\"},\"mathspeak\":{\"sbrief\":\"R arrow above reverse almost equals\"}},\"key\":\"2B48\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde operator above left arrow\"},\"mathspeak\":{\"sbrief\":\"tilde operator above L arrow\"}},\"key\":\"2B49\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow above almost equals\"},\"mathspeak\":{\"sbrief\":\"L arrow above almost equals\"}},\"key\":\"2B4A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow above reverse tilde operator\"},\"mathspeak\":{\"sbrief\":\"L arrow above reverse tilde operator\"}},\"key\":\"2B4B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow above reverse tilde operator\"},\"mathspeak\":{\"sbrief\":\"R arrow above reverse tilde operator\"}},\"key\":\"2B4C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"halfwidth left arrow\"},\"mathspeak\":{\"sbrief\":\"halfwidth L arrow\"}},\"key\":\"FFE9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"halfwidth up arrow\"},\"mathspeak\":{\"sbrief\":\"halfwidth U arrow\"}},\"key\":\"FFEA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"halfwidth right arrow\"},\"mathspeak\":{\"sbrief\":\"halfwidth R arrow\"}},\"key\":\"FFEB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"halfwidth down arrow\"},\"mathspeak\":{\"sbrief\":\"halfwidth D arrow\"}},\"key\":\"FFEC\"}]\n,\n\"en/symbols/math_characters.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"script l\"}},\"key\":\"2113\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"script cap P\"},\"mathspeak\":{\"default\":\"script upper P\"}},\"key\":\"2118\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck pi\"}},\"key\":\"213C\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck gamma\"}},\"key\":\"213D\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"double struck cap Gamma\"},\"mathspeak\":{\"default\":\"double struck upper Gamma\"}},\"key\":\"213E\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"double struck cap Pi\"},\"mathspeak\":{\"default\":\"double struck upper Pi\"}},\"key\":\"213F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double struck sum\"},\"mathspeak\":{\"default\":\"double struck sigma summation\"}},\"key\":\"2140\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"double struck italic cap D\"},\"mathspeak\":{\"default\":\"double struck italic upper D\"}},\"key\":\"2145\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck italic d\"}},\"key\":\"2146\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck italic e\"}},\"key\":\"2147\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck italic i\"}},\"key\":\"2148\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck italic j\"}},\"key\":\"2149\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"italic dotless i\"}},\"key\":\"1D6A4\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"italic dotless j\"}},\"key\":\"1D6A5\"}]\n,\n\"en/symbols/math_delimiters.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left parenthesis\"},\"mathspeak\":{\"brief\":\"left p'ren\",\"sbrief\":\"L p'ren\"},\"clearspeak\":{\"default\":\"open paren\"}},\"key\":\"0028\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right parenthesis\"},\"mathspeak\":{\"brief\":\"right p'ren\",\"sbrief\":\"R p'ren\"},\"clearspeak\":{\"default\":\"close paren\"}},\"key\":\"0029\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left bracket\"},\"mathspeak\":{\"brief\":\"left brack\",\"sbrief\":\"L brack\"},\"clearspeak\":{\"default\":\"open bracket\"}},\"key\":\"005B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right bracket\"},\"mathspeak\":{\"brief\":\"right brack\",\"sbrief\":\"R brack\"},\"clearspeak\":{\"default\":\"close bracket\"}},\"key\":\"005D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left brace\"},\"mathspeak\":{\"sbrief\":\"L brace\"},\"clearspeak\":{\"default\":\"open brace\"}},\"key\":\"007B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right brace\"},\"mathspeak\":{\"sbrief\":\"R brace\"},\"clearspeak\":{\"default\":\"close brace\"}},\"key\":\"007D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left bracket with quill\"},\"mathspeak\":{\"brief\":\"left brack with quill\",\"sbrief\":\"L brack with quill\"}},\"key\":\"2045\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right bracket with quill\"},\"mathspeak\":{\"brief\":\"right brack with quill\",\"sbrief\":\"R brack with quill\"}},\"key\":\"2046\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left ceiling\"}},\"key\":\"2308\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right ceiling\"}},\"key\":\"2309\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left floor\"}},\"key\":\"230A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right floor\"}},\"key\":\"230B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom right crop\"}},\"key\":\"230C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom left crop\"}},\"key\":\"230D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"top right crop\"}},\"key\":\"230E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"top left crop\"}},\"key\":\"230F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"top left corner\"}},\"key\":\"231C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"top right corner\"}},\"key\":\"231D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom left corner\"}},\"key\":\"231E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom right corner\"}},\"key\":\"231F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top half integral\"}},\"key\":\"2320\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bottom half integral\"}},\"key\":\"2321\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left pointing angle bracket\",\"physics\":\"bra\"}},\"key\":\"2329\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right pointing angle bracket\",\"physics\":\"ket\"}},\"key\":\"232A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left parenthesis upper hook\"},\"mathspeak\":{\"brief\":\"left p'ren upper hook\",\"sbrief\":\"L p'ren upper hook\"}},\"key\":\"239B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left parenthesis extension\"},\"mathspeak\":{\"brief\":\"left p'ren extension\",\"sbrief\":\"L p'ren extension\"}},\"key\":\"239C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left parenthesis lower hook\"},\"mathspeak\":{\"brief\":\"left p'ren lower hook\",\"sbrief\":\"L p'ren lower hook\"}},\"key\":\"239D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right parenthesis upper hook\"},\"mathspeak\":{\"brief\":\"right p'ren upper hook\",\"sbrief\":\"R p'ren upper hook\"}},\"key\":\"239E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right parenthesis extension\"},\"mathspeak\":{\"brief\":\"right p'ren extension\",\"sbrief\":\"R p'ren extension\"}},\"key\":\"239F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right parenthesis lower hook\"},\"mathspeak\":{\"brief\":\"right p'ren lower hook\",\"sbrief\":\"R p'ren lower hook\"}},\"key\":\"23A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left bracket upper corner\"},\"mathspeak\":{\"brief\":\"left brack upper corner\",\"sbrief\":\"L brack upper corner\"}},\"key\":\"23A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left bracket extension\"},\"mathspeak\":{\"brief\":\"left brack extension\",\"sbrief\":\"L brack extension\"}},\"key\":\"23A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left bracket lower corner\"},\"mathspeak\":{\"brief\":\"left brack lower corner\",\"sbrief\":\"L brack lower corner\"}},\"key\":\"23A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right bracket upper corner\"},\"mathspeak\":{\"brief\":\"right brack upper corner\",\"sbrief\":\"R brack upper corner\"}},\"key\":\"23A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right bracket extension\"},\"mathspeak\":{\"brief\":\"right brack extension\",\"sbrief\":\"R brack extension\"}},\"key\":\"23A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right bracket lower corner\"},\"mathspeak\":{\"brief\":\"right brack lower corner\",\"sbrief\":\"R brack lower corner\"}},\"key\":\"23A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left brace upper hook\"},\"mathspeak\":{\"sbrief\":\"L brace upper hook\"}},\"key\":\"23A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left brace middle piece\"},\"mathspeak\":{\"sbrief\":\"L brace middle piece\"}},\"key\":\"23A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left brace lower hook\"},\"mathspeak\":{\"sbrief\":\"L brace lower hook\"}},\"key\":\"23A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"brace extension\"}},\"key\":\"23AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right brace upper hook\"},\"mathspeak\":{\"sbrief\":\"R brace upper hook\"}},\"key\":\"23AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right brace middle piece\"},\"mathspeak\":{\"sbrief\":\"R brace middle piece\"}},\"key\":\"23AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right brace lower hook\"},\"mathspeak\":{\"sbrief\":\"R brace lower hook\"}},\"key\":\"23AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral extension\"}},\"key\":\"23AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"horizontal line extension\"}},\"key\":\"23AF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"upper left or lower right brace section\"}},\"key\":\"23B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"upper right or lower left brace section\"}},\"key\":\"23B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"summation top\"}},\"key\":\"23B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"summation bottom\"}},\"key\":\"23B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"top bracket\"},\"mathspeak\":{\"brief\":\"top brack\",\"sbrief\":\"T brack\"}},\"key\":\"23B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom bracket\"},\"mathspeak\":{\"brief\":\"bottom brack\",\"sbrief\":\"B brack\"}},\"key\":\"23B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom bracket over top bracket\"},\"mathspeak\":{\"brief\":\"bottom brack over top brack\",\"sbrief\":\"B brack over T brack\"}},\"key\":\"23B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"radical symbol bottom\"}},\"key\":\"23B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left vertical box line\"}},\"key\":\"23B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right vertical box line\"}},\"key\":\"23B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top parenthesis\"},\"mathspeak\":{\"brief\":\"top p'ren\",\"sbrief\":\"t p'ren\"}},\"key\":\"23DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bottom parenthesis\"},\"mathspeak\":{\"brief\":\"bottom p'ren\",\"sbrief\":\"b p'ren\"}},\"key\":\"23DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top brace\"},\"mathspeak\":{\"sbrief\":\"T brace\"}},\"key\":\"23DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bottom brace\"},\"mathspeak\":{\"sbrief\":\"B brace\"}},\"key\":\"23DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top tortoise shell bracket\"}},\"key\":\"23E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bottom tortoise shell bracket\"}},\"key\":\"23E1\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"medium left parenthesis ornament\"},\"mathspeak\":{\"brief\":\"medium left p'ren ornament\",\"sbrief\":\"medium L p'ren ornament\"}},\"key\":\"2768\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"medium right parenthesis ornament\"},\"mathspeak\":{\"brief\":\"medium right p'ren ornament\",\"sbrief\":\"medium R p'ren ornament\"}},\"key\":\"2769\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"medium flattened left parenthesis ornament\"},\"mathspeak\":{\"brief\":\"medium flattened left p'ren ornament\",\"sbrief\":\"medium flattened L p'ren ornament\"}},\"key\":\"276A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"medium flattened right parenthesis ornament\"},\"mathspeak\":{\"brief\":\"medium flattened right p'ren ornament\",\"sbrief\":\"medium flattened R p'ren ornament\"}},\"key\":\"276B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"medium left pointing angle bracket ornament\"}},\"key\":\"276C\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"medium right pointing angle bracket ornament\"}},\"key\":\"276D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"heavy left pointing angle quotation mark ornament\"}},\"key\":\"276E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"heavy right pointing angle quotation mark ornament\"}},\"key\":\"276F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"heavy left pointing angle bracket ornament\"}},\"key\":\"2770\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"heavy right pointing angle bracket ornament\"}},\"key\":\"2771\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"light left tortoise shell bracket ornament\"}},\"key\":\"2772\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"light right tortoise shell bracket ornament\"}},\"key\":\"2773\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"medium left brace ornament\"},\"mathspeak\":{\"sbrief\":\"medium L brace ornament\"}},\"key\":\"2774\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"medium right brace ornament\"},\"mathspeak\":{\"sbrief\":\"medium R brace ornament\"}},\"key\":\"2775\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left s shaped bag delimiter\"}},\"key\":\"27C5\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right s shaped bag delimiter\"}},\"key\":\"27C6\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white bracket\"}},\"key\":\"27E6\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white bracket\"}},\"key\":\"27E7\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left angle bracket\"},\"mathspeak\":{\"sbrief\":\"l angle bracket\"}},\"key\":\"27E8\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right angle bracket\"},\"mathspeak\":{\"sbrief\":\"r angle bracket\"}},\"key\":\"27E9\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left double angle bracket\"}},\"key\":\"27EA\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right double angle bracket\"}},\"key\":\"27EB\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white tortoise shell bracket\"}},\"key\":\"27EC\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white tortoise shell bracket\"}},\"key\":\"27ED\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"flattened left parenthesis\"},\"mathspeak\":{\"brief\":\"flattened left p'ren\",\"sbrief\":\"flattened L p'ren\"}},\"key\":\"27EE\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"flattened right parenthesis\"},\"mathspeak\":{\"brief\":\"flattened right p'ren\",\"sbrief\":\"flattened R p'ren\"}},\"key\":\"27EF\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white brace\"}},\"key\":\"2983\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white brace\"}},\"key\":\"2984\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"white left parenthesis\"},\"mathspeak\":{\"brief\":\"white left p'ren\",\"sbrief\":\"white L p'ren\"}},\"key\":\"2985\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"white right parenthesis\"},\"mathspeak\":{\"brief\":\"white right p'ren\",\"sbrief\":\"white R p'ren\"}},\"key\":\"2986\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"z notation left image bracket\"}},\"key\":\"2987\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"z notation right image bracket\"}},\"key\":\"2988\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"z notation left binding bracket\"}},\"key\":\"2989\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"z notation right binding bracket\"}},\"key\":\"298A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left bracket with underbar\"},\"mathspeak\":{\"brief\":\"left brack with underbar\",\"sbrief\":\"L brack with underbar\"}},\"key\":\"298B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right bracket with underbar\"},\"mathspeak\":{\"brief\":\"right brack with underbar\",\"sbrief\":\"R brack with underbar\"}},\"key\":\"298C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left bracket with tick in top corner\"},\"mathspeak\":{\"brief\":\"left brack with tick in top corner\",\"sbrief\":\"L brack with tick in top corner\"}},\"key\":\"298D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right bracket with tick in bottom corner\"},\"mathspeak\":{\"brief\":\"right brack with tick in bottom corner\",\"sbrief\":\"R brack with tick in bottom corner\"}},\"key\":\"298E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left bracket with tick in bottom corner\"},\"mathspeak\":{\"brief\":\"left brack with tick in bottom corner\",\"sbrief\":\"L brack with tick in bottom corner\"}},\"key\":\"298F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right bracket with tick in top corner\"},\"mathspeak\":{\"brief\":\"right brack with tick in top corner\",\"sbrief\":\"R brack with tick in top corner\"}},\"key\":\"2990\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left angle bracket with dot\"},\"mathspeak\":{\"sbrief\":\"l angle bracket with dot\"}},\"key\":\"2991\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right angle bracket with dot\"},\"mathspeak\":{\"sbrief\":\"r angle bracket with dot\"}},\"key\":\"2992\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left arc less than bracket\"}},\"key\":\"2993\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right arc greater than bracket\"}},\"key\":\"2994\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"double left arc greater than bracket\"}},\"key\":\"2995\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"double right arc less than bracket\"}},\"key\":\"2996\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left black tortoise shell bracket\"}},\"key\":\"2997\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right black tortoise shell bracket\"}},\"key\":\"2998\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left wiggly fence\"}},\"key\":\"29D8\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right wiggly fence\"}},\"key\":\"29D9\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left double wiggly fence\"}},\"key\":\"29DA\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right double wiggly fence\"}},\"key\":\"29DB\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left pointing curved angle bracket\"}},\"key\":\"29FC\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right pointing curved angle bracket\"}},\"key\":\"29FD\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"top half left bracket\"},\"mathspeak\":{\"brief\":\"top half left brack\",\"sbrief\":\"top half L brack\"}},\"key\":\"2E22\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"top half right bracket\"},\"mathspeak\":{\"brief\":\"top half right brack\",\"sbrief\":\"top half R brack\"}},\"key\":\"2E23\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"bottom half left bracket\"},\"mathspeak\":{\"brief\":\"bottom half left brack\",\"sbrief\":\"bottom half L brack\"}},\"key\":\"2E24\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"bottom half right bracket\"},\"mathspeak\":{\"brief\":\"bottom half right brack\",\"sbrief\":\"bottom half R brack\"}},\"key\":\"2E25\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left sideways U bracket\"}},\"key\":\"2E26\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right sideways U bracket\"}},\"key\":\"2E27\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"double left parenthesis\"},\"mathspeak\":{\"brief\":\"double left p'ren\",\"sbrief\":\"double L p'ren\"}},\"key\":\"2E28\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"double right parenthesis\"},\"mathspeak\":{\"brief\":\"double right p'ren\",\"sbrief\":\"double R p'ren\"}},\"key\":\"2E29\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left angle bracket\"},\"mathspeak\":{\"sbrief\":\"l angle bracket\"}},\"key\":\"3008\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right angle bracket\"},\"mathspeak\":{\"sbrief\":\"r angle bracket\"}},\"key\":\"3009\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left double angle bracket\"}},\"key\":\"300A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right double angle bracket\"}},\"key\":\"300B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left corner bracket\"}},\"key\":\"300C\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right corner bracket\"}},\"key\":\"300D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white corner bracket\"}},\"key\":\"300E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white corner bracket\"}},\"key\":\"300F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left black lenticular bracket\"}},\"key\":\"3010\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right black lenticular bracket\"}},\"key\":\"3011\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left tortoise shell bracket\"}},\"key\":\"3014\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right tortoise shell bracket\"}},\"key\":\"3015\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white lenticular bracket\"}},\"key\":\"3016\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white lenticular bracket\"}},\"key\":\"3017\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white tortoise shell bracket\"}},\"key\":\"3018\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white tortoise shell bracket\"}},\"key\":\"3019\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white bracket\"}},\"key\":\"301A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white bracket\"}},\"key\":\"301B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"reversed double prime quotation mark\"}},\"key\":\"301D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"double prime quotation mark\"}},\"key\":\"301E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"low double prime quotation mark\"}},\"key\":\"301F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"ornate left parenthesis\"},\"mathspeak\":{\"brief\":\"ornate left p'ren\",\"sbrief\":\"ornate L p'ren\"}},\"key\":\"FD3E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"ornate right parenthesis\"},\"mathspeak\":{\"brief\":\"ornate right p'ren\",\"sbrief\":\"ornate R p'ren\"}},\"key\":\"FD3F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left white lenticular bracket\"}},\"key\":\"FE17\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right white lenticular brakcet\"}},\"key\":\"FE18\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left parenthesis\"},\"mathspeak\":{\"brief\":\"presentation form for vertical left p'ren\",\"sbrief\":\"presentation form for vertical L p'ren\"}},\"key\":\"FE35\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right parenthesis\"},\"mathspeak\":{\"brief\":\"presentation form for vertical right p'ren\",\"sbrief\":\"presentation form for vertical R p'ren\"}},\"key\":\"FE36\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left brace\"},\"mathspeak\":{\"sbrief\":\"presentation form for vertical L brace\"}},\"key\":\"FE37\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right brace\"},\"mathspeak\":{\"sbrief\":\"presentation form for vertical r brace\"}},\"key\":\"FE38\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left tortoise shell bracket\"}},\"key\":\"FE39\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right tortoise shell bracket\"}},\"key\":\"FE3A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left black lenticular bracket\"}},\"key\":\"FE3B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right black lenticular bracket\"}},\"key\":\"FE3C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left double angle bracket\"}},\"key\":\"FE3D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right double angle bracket\"}},\"key\":\"FE3E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left angle bracket\"},\"mathspeak\":{\"sbrief\":\"presentation form for vertical l angle bracket\"}},\"key\":\"FE3F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right angle bracket\"},\"mathspeak\":{\"sbrief\":\"presentation form for vertical r angle bracket\"}},\"key\":\"FE40\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left corner bracket\"}},\"key\":\"FE41\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right corner bracket\"}},\"key\":\"FE42\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left white corner bracket\"}},\"key\":\"FE43\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right white corner bracket\"}},\"key\":\"FE44\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left bracket\"},\"mathspeak\":{\"brief\":\"presentation form for vertical left brack\",\"sbrief\":\"presentation form for vertical L brack\"}},\"key\":\"FE47\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right bracket\"},\"mathspeak\":{\"brief\":\"presentation form for vertical right brack\",\"sbrief\":\"presentation form for vertical r brack\"}},\"key\":\"FE48\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"small left parenthesis\"},\"mathspeak\":{\"brief\":\"small left p'ren\",\"sbrief\":\"small L p'ren\"}},\"key\":\"FE59\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"small right parenthesis\"},\"mathspeak\":{\"brief\":\"small right p'ren\",\"sbrief\":\"small R p'ren\"}},\"key\":\"FE5A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"small left brace\"},\"mathspeak\":{\"sbrief\":\"small L brace\"}},\"key\":\"FE5B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"small right brace\"},\"mathspeak\":{\"sbrief\":\"small r brace\"}},\"key\":\"FE5C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"small left tortoise shell bracket\"}},\"key\":\"FE5D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"small right tortoise shell bracket\"}},\"key\":\"FE5E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"fullwidth left parenthesis\"},\"mathspeak\":{\"brief\":\"fullwidth left p'ren\",\"sbrief\":\"fullwidth L p'ren\"}},\"key\":\"FF08\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"fullwidth right parenthesis\"},\"mathspeak\":{\"brief\":\"fullwidth right p'ren\",\"sbrief\":\"fullwidth R p'ren\"}},\"key\":\"FF09\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"fullwidth left bracket\"},\"mathspeak\":{\"brief\":\"fullwidth left brack\",\"sbrief\":\"fullwidth L brack\"}},\"key\":\"FF3B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"fullwidth right bracket\"},\"mathspeak\":{\"brief\":\"fullwidth right brack\",\"sbrief\":\"fullwidth r brack\"}},\"key\":\"FF3D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"fullwidth left brace\"},\"mathspeak\":{\"sbrief\":\"fullwidth L brace\"}},\"key\":\"FF5B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"fullwidth right brace\"},\"mathspeak\":{\"sbrief\":\"fullwidth r brace\"}},\"key\":\"FF5D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"fullwidth white left parenthesis\"},\"mathspeak\":{\"brief\":\"fullwidth white left p'ren\",\"sbrief\":\"fullwidth white L p'ren\"}},\"key\":\"FF5F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"fullwidth white right parenthesis\"},\"mathspeak\":{\"brief\":\"fullwidth white right p'ren\",\"sbrief\":\"fullwidth white R p'ren\"}},\"key\":\"FF60\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"halfwidth left corner bracket\"}},\"key\":\"FF62\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"halfwidth right corner bracket\"}},\"key\":\"FF63\"}]\n,\n\"en/symbols/math_geometry.js\": \n[{\"locale\":\"en\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light horizontal\"}},\"key\":\"2500\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy horizontal\"}},\"key\":\"2501\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light vertical\"}},\"key\":\"2502\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy vertical\"}},\"key\":\"2503\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light triple dash horizontal\"}},\"key\":\"2504\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy triple dash horizontal\"}},\"key\":\"2505\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light triple dash vertical\"}},\"key\":\"2506\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy triple dash vertical\"}},\"key\":\"2507\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light quadruple dash horizontal\"}},\"key\":\"2508\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy quadruple dash horizontal\"}},\"key\":\"2509\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light quadruple dash vertical\"}},\"key\":\"250A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy quadruple dash vertical\"}},\"key\":\"250B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light down and right\"}},\"key\":\"250C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and right heavy\"}},\"key\":\"250D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and right light\"}},\"key\":\"250E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy down and right\"}},\"key\":\"250F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light down and left\"}},\"key\":\"2510\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and left heavy\"}},\"key\":\"2511\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and left light\"}},\"key\":\"2512\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy down and left\"}},\"key\":\"2513\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light up and right\"}},\"key\":\"2514\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and right heavy\"}},\"key\":\"2515\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and right light\"}},\"key\":\"2516\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy up and right\"}},\"key\":\"2517\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light up and left\"}},\"key\":\"2518\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and left heavy\"}},\"key\":\"2519\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and left light\"}},\"key\":\"251A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy up and left\"}},\"key\":\"251B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light vertical and right\"}},\"key\":\"251C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical light and right heavy\"}},\"key\":\"251D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and right down light\"}},\"key\":\"251E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and right up light\"}},\"key\":\"251F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical heavy and right light\"}},\"key\":\"2520\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and right up heavy\"}},\"key\":\"2521\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and right down heavy\"}},\"key\":\"2522\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy vertical and right\"}},\"key\":\"2523\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light vertical and left\"}},\"key\":\"2524\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical light and left heavy\"}},\"key\":\"2525\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and left down light\"}},\"key\":\"2526\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and left up light\"}},\"key\":\"2527\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical heavy and left light\"}},\"key\":\"2528\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and left up heavy\"}},\"key\":\"2529\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and left down heavy\"}},\"key\":\"252A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy vertical and left\"}},\"key\":\"252B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light down and horizontal\"}},\"key\":\"252C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left heavy and right down light\"}},\"key\":\"252D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right heavy and left down light\"}},\"key\":\"252E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and horizontal heavy\"}},\"key\":\"252F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and horizontal light\"}},\"key\":\"2530\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right light and left down heavy\"}},\"key\":\"2531\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left light and right down heavy\"}},\"key\":\"2532\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy down and horizontal\"}},\"key\":\"2533\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light up and horizontal\"}},\"key\":\"2534\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left heavy and right up light\"}},\"key\":\"2535\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right heavy and left up light\"}},\"key\":\"2536\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and horizontal heavy\"}},\"key\":\"2537\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and horizontal light\"}},\"key\":\"2538\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right light and left up heavy\"}},\"key\":\"2539\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left light and right up heavy\"}},\"key\":\"253A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy up and horizontal\"}},\"key\":\"253B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light vertical and horizontal\"}},\"key\":\"253C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left heavy and right vertical light\"}},\"key\":\"253D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right heavy and left vertical light\"}},\"key\":\"253E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical light and horizontal heavy\"}},\"key\":\"253F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and down horizontal light\"}},\"key\":\"2540\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and up horizontal light\"}},\"key\":\"2541\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical heavy and horizontal light\"}},\"key\":\"2542\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left up heavy and right down light\"}},\"key\":\"2543\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right up heavy and left down light\"}},\"key\":\"2544\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left down heavy and right up light\"}},\"key\":\"2545\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right down heavy and left up light\"}},\"key\":\"2546\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and up horizontal heavy\"}},\"key\":\"2547\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and down horizontal heavy\"}},\"key\":\"2548\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right light and left vertical heavy\"}},\"key\":\"2549\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left light and right vertical heavy\"}},\"key\":\"254A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy vertical and horizontal\"}},\"key\":\"254B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light double dash horizontal\"}},\"key\":\"254C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy double dash horizontal\"}},\"key\":\"254D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light double dash vertical\"}},\"key\":\"254E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy double dash vertical\"}},\"key\":\"254F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double horizontal\"}},\"key\":\"2550\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double vertical\"}},\"key\":\"2551\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down single and right double\"}},\"key\":\"2552\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down double and right single\"}},\"key\":\"2553\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double down and right\"}},\"key\":\"2554\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down single and left double\"}},\"key\":\"2555\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down double and left single\"}},\"key\":\"2556\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double down and left\"}},\"key\":\"2557\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up single and right double\"}},\"key\":\"2558\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up double and right single\"}},\"key\":\"2559\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double up and right\"}},\"key\":\"255A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up single and left double\"}},\"key\":\"255B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up double and left single\"}},\"key\":\"255C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double up and left\"}},\"key\":\"255D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical single and right double\"}},\"key\":\"255E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical double and right single\"}},\"key\":\"255F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double vertical and right\"}},\"key\":\"2560\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical single and left double\"}},\"key\":\"2561\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical double and left single\"}},\"key\":\"2562\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double vertical and left\"}},\"key\":\"2563\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down single and horizontal double\"}},\"key\":\"2564\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down double and horizontal single\"}},\"key\":\"2565\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double down and horizontal\"}},\"key\":\"2566\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up single and horizontal double\"}},\"key\":\"2567\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up double and horizontal single\"}},\"key\":\"2568\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double up and horizontal\"}},\"key\":\"2569\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical single and horizontal double\"}},\"key\":\"256A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical double and horizontal single\"}},\"key\":\"256B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double vertical and horizontal\"}},\"key\":\"256C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light arc down and right\"}},\"key\":\"256D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light arc down and left\"}},\"key\":\"256E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light arc up and left\"}},\"key\":\"256F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light arc up and right\"}},\"key\":\"2570\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light diagonal upper right to lower left\"}},\"key\":\"2571\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light diagonal upper left to lower right\"}},\"key\":\"2572\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light diagonal cross\"}},\"key\":\"2573\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light left\"}},\"key\":\"2574\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light up\"}},\"key\":\"2575\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light right\"}},\"key\":\"2576\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light down\"}},\"key\":\"2577\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy left\"}},\"key\":\"2578\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy up\"}},\"key\":\"2579\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy right\"}},\"key\":\"257A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy down\"}},\"key\":\"257B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light left and heavy right\"}},\"key\":\"257C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light up and heavy down\"}},\"key\":\"257D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy left and light right\"}},\"key\":\"257E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy up and light down\"}},\"key\":\"257F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper half block\"}},\"key\":\"2580\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower one eighth block\"}},\"key\":\"2581\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower one quarter block\"}},\"key\":\"2582\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower three eighths block\"}},\"key\":\"2583\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower half block\"}},\"key\":\"2584\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower five eighths block\"}},\"key\":\"2585\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower three quarters block\"}},\"key\":\"2586\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower seven eighths block\"}},\"key\":\"2587\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"full block\"}},\"key\":\"2588\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left seven eighths block\"}},\"key\":\"2589\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left three quarters block\"}},\"key\":\"258A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left five eighths block\"}},\"key\":\"258B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left half block\"}},\"key\":\"258C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left three eighths block\"}},\"key\":\"258D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left one quarter block\"}},\"key\":\"258E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left one eighth block\"}},\"key\":\"258F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right half block\"}},\"key\":\"2590\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"light shade\"}},\"key\":\"2591\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"medium shade\"}},\"key\":\"2592\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"dark shade\"}},\"key\":\"2593\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper one eighth block\"}},\"key\":\"2594\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right one eighth block\"}},\"key\":\"2595\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant lower left\"}},\"key\":\"2596\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant lower right\"}},\"key\":\"2597\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper left\"}},\"key\":\"2598\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper left and lower left and lower right\"}},\"key\":\"2599\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper left and lower right\"}},\"key\":\"259A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper left and upper right and lower left\"}},\"key\":\"259B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper left and upper right and lower right\"}},\"key\":\"259C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper right\"}},\"key\":\"259D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper right and lower left\"}},\"key\":\"259E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper right and lower left and lower right\"}},\"key\":\"259F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black square\"}},\"key\":\"25A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square\"}},\"key\":\"25A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with rounded corners\"}},\"key\":\"25A2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square containing black small square\"}},\"key\":\"25A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with horizontal fill\"}},\"key\":\"25A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with vertical fill\"}},\"key\":\"25A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with orthogonal crosshatch fill\"}},\"key\":\"25A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with upper left to lower right fill\"}},\"key\":\"25A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with upper right to lower left fill\"}},\"key\":\"25A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with diagonal crosshatch fill\"}},\"key\":\"25A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black small square\"}},\"key\":\"25AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white small square\"}},\"key\":\"25AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black rectangle\"}},\"key\":\"25AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white rectangle\"}},\"key\":\"25AD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black vertical rectangle\"}},\"key\":\"25AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white vertical rectangle\"}},\"key\":\"25AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black parallelogram\"}},\"key\":\"25B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white parallelogram\"}},\"key\":\"25B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black up pointing triangle\"}},\"key\":\"25B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up pointing triangle\"}},\"key\":\"25B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black up pointing small triangle\"}},\"key\":\"25B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up pointing small triangle\"}},\"key\":\"25B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right pointing triangle\"}},\"key\":\"25B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white right pointing triangle\"}},\"key\":\"25B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right pointing small triangle\"}},\"key\":\"25B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white right pointing small triangle\"}},\"key\":\"25B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right pointing pointer\"}},\"key\":\"25BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white right pointing pointer\"}},\"key\":\"25BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black down pointing triangle\"}},\"key\":\"25BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white down pointing triangle\"}},\"key\":\"25BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black down pointing small triangle\"}},\"key\":\"25BE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white down pointing small triangle\"}},\"key\":\"25BF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black left pointing triangle\"}},\"key\":\"25C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white left pointing triangle\"}},\"key\":\"25C1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black left pointing small triangle\"}},\"key\":\"25C2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white left pointing small triangle\"}},\"key\":\"25C3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black left pointing pointer\"}},\"key\":\"25C4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white left pointing pointer\"}},\"key\":\"25C5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black diamond\"}},\"key\":\"25C6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white diamond\"}},\"key\":\"25C7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white diamond containing black small diamond\"}},\"key\":\"25C8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"fisheye\"}},\"key\":\"25C9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lozenge\"}},\"key\":\"25CA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle\"}},\"key\":\"25CB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"dotted circle\"}},\"key\":\"25CC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with vertical fill\"}},\"key\":\"25CD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bullseye\"}},\"key\":\"25CE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black circle\"}},\"key\":\"25CF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with left half black\"}},\"key\":\"25D0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with right half black\"}},\"key\":\"25D1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with lower half black\"}},\"key\":\"25D2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with upper half black\"}},\"key\":\"25D3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with upper right quadrant black\"}},\"key\":\"25D4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with all but upper left quadrant black\"}},\"key\":\"25D5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left half black circle\"}},\"key\":\"25D6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right half black circle\"}},\"key\":\"25D7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"inverse bullet\"}},\"key\":\"25D8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"inverse white circle\"}},\"key\":\"25D9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper half inverse white circle\"}},\"key\":\"25DA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower half inverse white circle\"}},\"key\":\"25DB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper left quadrant circular arc\"}},\"key\":\"25DC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper right quadrant circular arc\"}},\"key\":\"25DD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower right quadrant circular arc\"}},\"key\":\"25DE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower left quadrant circular arc\"}},\"key\":\"25DF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper half circle\"}},\"key\":\"25E0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower half circle\"}},\"key\":\"25E1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black lower right triangle\"}},\"key\":\"25E2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black lower left triangle\"}},\"key\":\"25E3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black upper left triangle\"}},\"key\":\"25E4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black upper right triangle\"}},\"key\":\"25E5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white bullet\"}},\"key\":\"25E6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with left half black\"}},\"key\":\"25E7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with right half black\"}},\"key\":\"25E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with upper left diagonal half black\"}},\"key\":\"25E9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with lower right diagonal half black\"}},\"key\":\"25EA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with vertical bisecting line\"}},\"key\":\"25EB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up pointing triangle with dot\"}},\"key\":\"25EC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up pointing triangle with left half black\"}},\"key\":\"25ED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up pointing triangle with right half black\"}},\"key\":\"25EE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"large circle\"}},\"key\":\"25EF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with upper left quadrant\"}},\"key\":\"25F0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with lower left quadrant\"}},\"key\":\"25F1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with lower right quadrant\"}},\"key\":\"25F2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with upper right quadrant\"}},\"key\":\"25F3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle with upper left quadrant\"}},\"key\":\"25F4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle with lower left quadrant\"}},\"key\":\"25F5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle with lower right quadrant\"}},\"key\":\"25F6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle with upper right quadrant\"}},\"key\":\"25F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"upper left triangle\"}},\"key\":\"25F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"upper right triangle\"}},\"key\":\"25F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"lower left triangle\"}},\"key\":\"25FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white medium square\"}},\"key\":\"25FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black medium square\"}},\"key\":\"25FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white medium small square\"}},\"key\":\"25FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black medium small square\"}},\"key\":\"25FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"lower right triangle\"}},\"key\":\"25FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with top half black\"}},\"key\":\"2B12\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with bottom half black\"}},\"key\":\"2B13\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with upper right diagonal half black\"}},\"key\":\"2B14\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with lower left diagonal half black\"}},\"key\":\"2B15\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"diamond with left half black\"}},\"key\":\"2B16\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"diamond with right half black\"}},\"key\":\"2B17\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"diamond with top half black\"}},\"key\":\"2B18\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"diamond with bottom half black\"}},\"key\":\"2B19\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"dotted square\"}},\"key\":\"2B1A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black large square\"}},\"key\":\"2B1B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white large square\"}},\"key\":\"2B1C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black very small square\"}},\"key\":\"2B1D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white very small square\"}},\"key\":\"2B1E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black pentagon\"}},\"key\":\"2B1F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white pentagon\"}},\"key\":\"2B20\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white hexagon\"}},\"key\":\"2B21\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black hexagon\"}},\"key\":\"2B22\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"horizontal black hexagon\"}},\"key\":\"2B23\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black large circle\"}},\"key\":\"2B24\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black medium diamond\"}},\"key\":\"2B25\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white medium diamond\"}},\"key\":\"2B26\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black medium lozenge\"}},\"key\":\"2B27\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white medium lozenge\"}},\"key\":\"2B28\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black small diamond\"}},\"key\":\"2B29\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black small lozenge\"}},\"key\":\"2B2A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white small lozenge\"}},\"key\":\"2B2B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black horizontal ellipse\"}},\"key\":\"2B2C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white horizontal ellipse\"}},\"key\":\"2B2D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black vertical ellipse\"}},\"key\":\"2B2E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white vertical ellipse\"}},\"key\":\"2B2F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white medium star\"}},\"key\":\"2B50\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black small star\"}},\"key\":\"2B51\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white small star\"}},\"key\":\"2B52\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right pointing pentagon\"}},\"key\":\"2B53\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white right pointing pentagon\"}},\"key\":\"2B54\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy large circle\"}},\"key\":\"2B55\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy oval with oval inside\"}},\"key\":\"2B56\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy circle with circle inside\"}},\"key\":\"2B57\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy circle\"}},\"key\":\"2B58\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy circled saltire\"}},\"key\":\"2B59\"}]\n,\n\"en/symbols/math_harpoons.js\": \n[{\"locale\":\"en\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up\"}},\"key\":\"21BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb down\"}},\"key\":\"21BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb right\"}},\"key\":\"21BE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb left\"}},\"key\":\"21BF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up\"}},\"key\":\"21C0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb down\"}},\"key\":\"21C1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb right\"}},\"key\":\"21C2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb left\"}},\"key\":\"21C3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left harpoon over right harpoon\"}},\"key\":\"21CB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right harpoon over left harpoon\"}},\"key\":\"21CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left barb up right barb down harpoon\"}},\"key\":\"294A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left barb down right barb up harpoon\"}},\"key\":\"294B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up barb right down barb left harpoon\"}},\"key\":\"294C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up barb left down barb right harpoon\"}},\"key\":\"294D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left barb up right barb up harpoon\"}},\"key\":\"294E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up barb right down barb right harpoon\"}},\"key\":\"294F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left barb down right barb down harpoon\"}},\"key\":\"2950\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up barb left down barb left harpoon\"}},\"key\":\"2951\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up to bar\"}},\"key\":\"2952\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up to bar\"}},\"key\":\"2953\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb right to bar\"}},\"key\":\"2954\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb right to bar\"}},\"key\":\"2955\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb down to bar\"}},\"key\":\"2956\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb down to bar\"}},\"key\":\"2957\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb left to bar\"}},\"key\":\"2958\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb left to bar\"}},\"key\":\"2959\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up from bar\"}},\"key\":\"295A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up from bar\"}},\"key\":\"295B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb right from bar\"}},\"key\":\"295C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb right from bar\"}},\"key\":\"295D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb down from bar\"}},\"key\":\"295E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb down from bar\"}},\"key\":\"295F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb left from bar\"}},\"key\":\"2960\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb left from bar\"}},\"key\":\"2961\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up above left harpoon with barb down\"}},\"key\":\"2962\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb left beside up harpoon with barb right\"}},\"key\":\"2963\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up above right harpoon with barb down\"}},\"key\":\"2964\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb left beside down harpoon with barb right\"}},\"key\":\"2965\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up above right harpoon with barb up\"}},\"key\":\"2966\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb down above right harpoon with barb down\"}},\"key\":\"2967\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up above left harpoon with barb up\"}},\"key\":\"2968\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb down above left harpoon with barb down\"}},\"key\":\"2969\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up above long dash\"}},\"key\":\"296A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb down below long dash\"}},\"key\":\"296B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up above long dash\"}},\"key\":\"296C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb down below long dash\"}},\"key\":\"296D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb left beside down harpoon with barb right\"}},\"key\":\"296E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb left beside up harpoon with barb right\"}},\"key\":\"296F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left fish tail\"}},\"key\":\"297C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right fish tail\"}},\"key\":\"297D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up fish tail\"}},\"key\":\"297E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down fish tail\"}},\"key\":\"297F\"}]\n,\n\"en/symbols/math_non_characters.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"italic h over two pi\",\"physics\":\"planck constant over two pi\"}},\"key\":\"210F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"l b bar\"}},\"key\":\"2114\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"numero\"}},\"key\":\"2116\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"sound recording copyright\"}},\"key\":\"2117\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"prescription take\"}},\"key\":\"211E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"response\"}},\"key\":\"211F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"service mark\"}},\"key\":\"2120\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"telephone sign\",\"alternative\":\"t e l symbol\"}},\"key\":\"2121\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"trade mark\"}},\"key\":\"2122\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"versicle\"}},\"key\":\"2123\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"ounce\"}},\"key\":\"2125\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"ohm\"}},\"key\":\"2126\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"inverted ohm\"}},\"key\":\"2127\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"kelvin\"}},\"key\":\"212A\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"angstrom\"}},\"key\":\"212B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"estimated\"}},\"key\":\"212E\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"turned cap F\"},\"mathspeak\":{\"default\":\"turned upper F\"}},\"key\":\"2132\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"information source\"}},\"key\":\"2139\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"rotated cap Q\"},\"mathspeak\":{\"default\":\"rotated upper Q\"}},\"key\":\"213A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"facsimile sign\"}},\"key\":\"213B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"turned sans serif cap G\"},\"mathspeak\":{\"default\":\"turned sans serif upper G\"}},\"key\":\"2141\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"turned sans serif cap L\"},\"mathspeak\":{\"default\":\"turned sans serif upper L\"}},\"key\":\"2142\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed sans serif cap L\"},\"mathspeak\":{\"default\":\"reversed sans serif upper L\"}},\"key\":\"2143\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"turned sans serif cap Y\"},\"mathspeak\":{\"default\":\"turned sans serif upper Y\"}},\"key\":\"2144\"}]\n,\n\"en/symbols/math_symbols.js\": \n[{\"locale\":\"en\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"exclamation mark\"}},\"key\":\"0021\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"quotation mark\"}},\"key\":\"0022\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"number sign\",\"alternative\":\"hash\"},\"mathspeak\":{\"brief\":\"num sign\",\"sbrief\":\"num sign\"}},\"key\":\"0023\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"dollar sign\"}},\"key\":\"0024\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"percent sign\"}},\"key\":\"0025\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"ampersand\"}},\"key\":\"0026\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"prime\"}},\"key\":\"0027\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"asterisk\"}},\"key\":\"002A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus\"}},\"key\":\"002B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"comma\"}},\"key\":\"002C\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"minus\"},\"mathspeak\":{\"default\":\"hyphen\"}},\"key\":\"002D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"period\"}},\"key\":\"002E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"slash\",\"alternative\":\"solidus\"},\"emacspeak\":{\"default\":\"slash\"}},\"key\":\"002F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"colon\"}},\"key\":\"003A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"semicolon\"}},\"key\":\"003B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than\"},\"clearspeak\":{\"default\":\"is less than\"}},\"key\":\"003C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals\"}},\"key\":\"003D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than\"},\"clearspeak\":{\"default\":\"is greater than\"}},\"key\":\"003E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"question mark\"}},\"key\":\"003F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"at\"}},\"key\":\"0040\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"backslash\"}},\"key\":\"005C\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"hat\"},\"mathspeak\":{\"default\":\"caret\"}},\"key\":\"005E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"bar\",\"alternative\":\"underline\"}},\"key\":\"005F\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"grave\"},\"mathspeak\":{\"default\":\"grave\"}},\"key\":\"0060\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar\"}},\"key\":\"007C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"key\":\"007E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"inverted exclamation mark\"}},\"key\":\"00A1\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"cent sign\"}},\"key\":\"00A2\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"pound sign\"}},\"key\":\"00A3\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"currency sign\"}},\"key\":\"00A4\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"yen sign\"}},\"key\":\"00A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"broken vertical bar\"}},\"key\":\"00A6\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"section sign\"}},\"key\":\"00A7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"two dots\"}},\"key\":\"00A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"copyright sign\"}},\"key\":\"00A9\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"feminine ordinal indicator\"}},\"key\":\"00AA\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left pointing guillemet\"}},\"key\":\"00AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not sign\"}},\"key\":\"00AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"registered sign\"},\"mathspeak\":{\"default\":\"registered trade mark sign\"},\"clearspeak\":{\"default\":\"trade mark sign\"}},\"key\":\"00AE\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"bar\"}},\"key\":\"00AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"degree\"},\"clearspeak\":{\"default\":\"degrees\"}},\"key\":\"00B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus or minus\"}},\"key\":\"00B1\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"acute\"}},\"key\":\"00B4\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"micro sign\"}},\"key\":\"00B5\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"paragraph sign\"}},\"key\":\"00B6\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"dot\"},\"clearspeak\":{\"default\":\"times\"}},\"key\":\"00B7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"cedilla\"}},\"key\":\"00B8\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"masculine ordinal indicator\"}},\"key\":\"00BA\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"right pointing guillemet\"}},\"key\":\"00BB\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"inverted question mark\"}},\"key\":\"00BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"times\"},\"clearspeak\":{\"MultsymbolX_By\":\"by\",\"MultsymbolX_Cross\":\"cross\"}},\"key\":\"00D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"division sign\"}},\"key\":\"00F7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"breve\"}},\"key\":\"02D8\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"dot above\"},\"mathspeak\":{\"default\":\"dot\"}},\"key\":\"02D9\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"ring above\"}},\"key\":\"02DA\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"ogonek\"}},\"key\":\"02DB\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"key\":\"02DC\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"double acute\"}},\"key\":\"02DD\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"hyphen\"}},\"key\":\"2010\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"non breaking hyphen\"}},\"key\":\"2011\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"figure dash\"}},\"key\":\"2012\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"en dash\"}},\"key\":\"2013\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"em dash\"}},\"key\":\"2014\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"horizontal bar\"},\"mathspeak\":{\"default\":\"quotation dash\"}},\"key\":\"2015\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double vertical bar\"}},\"key\":\"2016\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double underline\"}},\"key\":\"2017\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left single quotation mark\"}},\"key\":\"2018\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"right single quotation mark\"}},\"key\":\"2019\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"low right single quotation mark\"}},\"key\":\"201A\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left reversed single quotation mark\"}},\"key\":\"201B\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left double quotation mark\"}},\"key\":\"201C\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"right double quotation mark\"}},\"key\":\"201D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"low right double quotation mark\"}},\"key\":\"201E\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left reversed double quotation mark\"}},\"key\":\"201F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"dagger\"}},\"key\":\"2020\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double dagger\"}},\"key\":\"2021\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"bullet\"}},\"key\":\"2022\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"triangular bullet\"}},\"key\":\"2023\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"one dot leader\"}},\"key\":\"2024\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"two dot leader\"}},\"key\":\"2025\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"ellipsis\"},\"clearspeak\":{\"default\":\"dot dot dot\"}},\"key\":\"2026\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"hyphenation point\"}},\"key\":\"2027\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"per mille\"}},\"key\":\"2030\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"per ten thousand\"}},\"key\":\"2031\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"prime\"}},\"key\":\"2032\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double prime\"}},\"key\":\"2033\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"triple prime\"}},\"key\":\"2034\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reversed prime\"}},\"key\":\"2035\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reversed double prime\"}},\"key\":\"2036\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reversed triple prime\"}},\"key\":\"2037\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"caret\"}},\"key\":\"2038\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left pointing single guillemet\"}},\"key\":\"2039\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"right pointing single guillemet\"}},\"key\":\"203A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reference mark\"}},\"key\":\"203B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double exclamation mark\"}},\"key\":\"203C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"interrobang\"}},\"key\":\"203D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"overline\"},\"mathspeak\":{\"default\":\"bar\"}},\"key\":\"203E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"undertie\"}},\"key\":\"203F\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"character tie\"}},\"key\":\"2040\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"caret insertion point\"}},\"key\":\"2041\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"asterism\"}},\"key\":\"2042\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"hyphen bullet\"}},\"key\":\"2043\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"fraction slash\"}},\"key\":\"2044\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double question mark\"}},\"key\":\"2047\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"question exclamation mark\"}},\"key\":\"2048\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"exclamation question mark\"}},\"key\":\"2049\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reversed pilcrow\"}},\"key\":\"204B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"black leftwards bullet\"}},\"key\":\"204C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"black rightwards bullet\"}},\"key\":\"204D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"low asterisk\"}},\"key\":\"204E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reversed semicolon\"}},\"key\":\"204F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"close up\"}},\"key\":\"2050\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"two asterisks aligned vertically\"}},\"key\":\"2051\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"commercial minus\"}},\"key\":\"2052\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"swung dash\"}},\"key\":\"2053\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"inverted undertie\"}},\"key\":\"2054\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"flower punctuation mark\"}},\"key\":\"2055\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"three dot punctuation\"}},\"key\":\"2056\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"quadruple prime\"}},\"key\":\"2057\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"four dot punctuation\"}},\"key\":\"2058\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"five dot punctuation\"}},\"key\":\"2059\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"two dot punctuation\"}},\"key\":\"205A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"four dot mark\"}},\"key\":\"205B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"dotted cross\"}},\"key\":\"205C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"tricolon\"}},\"key\":\"205D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"vertical four dots\"}},\"key\":\"205E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superscript plus\"}},\"key\":\"207A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superscript minus\"}},\"key\":\"207B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superscript equals\"}},\"key\":\"207C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"superscript left parenthesis\"}},\"key\":\"207D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"superscript right parenthesis\"}},\"key\":\"207E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subscript plus\"}},\"key\":\"208A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subscript minus\"}},\"key\":\"208B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subscript equals\"}},\"key\":\"208C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"subscript left parenthesis\"}},\"key\":\"208D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"subscript right parenthesis\"}},\"key\":\"208E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"property line\"}},\"key\":\"214A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"turned ampersand\"}},\"key\":\"214B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"per\"}},\"key\":\"214C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"aktieselskab\"}},\"key\":\"214D\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"turned small f\"}},\"key\":\"214E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"for all\"}},\"key\":\"2200\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"complement\"}},\"key\":\"2201\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"there exists\"}},\"key\":\"2203\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"there does not exist\"}},\"key\":\"2204\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"empty set\"}},\"key\":\"2205\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"increment\"}},\"key\":\"2206\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of\"},\"clearspeak\":{\"default\":\"is a member of\",\"SetMemberSymbol_Member\":\"is a member of\",\"SetMemberSymbol_Element\":\"is an element of\",\"SetMemberSymbol_In\":\"is in\",\"SetMemberSymbol_Belongs\":\"belongs to\"}},\"key\":\"2208\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not an element of\"},\"clearspeak\":{\"default\":\"is not a member of\",\"SetMemberSymbol_Member\":\"is not a member of\",\"SetMemberSymbol_Element\":\"is not an element of\",\"SetMemberSymbol_In\":\"is not in\",\"SetMemberSymbol_Belongs\":\"does not belong to\"}},\"key\":\"2209\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small element of\"},\"clearspeak\":{\"default\":\"is a member of\",\"SetMemberSymbol_Member\":\"is a member of\",\"SetMemberSymbol_Element\":\"is an element of\",\"SetMemberSymbol_In\":\"is in\",\"SetMemberSymbol_Belongs\":\"belongs to\"}},\"key\":\"220A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains as member\"}},\"key\":\"220B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not contain as member\"}},\"key\":\"220C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small contains as member\"}},\"key\":\"220D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"end of proof\"}},\"key\":\"220E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"product\"}},\"key\":\"220F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"coproduct\"}},\"key\":\"2210\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"sum\"},\"mathspeak\":{\"default\":\"sigma summation\"}},\"key\":\"2211\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus\"}},\"key\":\"2212\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus or plus\"}},\"key\":\"2213\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"dot plus\"}},\"key\":\"2214\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"division slash\"}},\"key\":\"2215\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"set minus\"}},\"key\":\"2216\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"asterisk\"}},\"key\":\"2217\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"ring\"},\"clearspeak\":{\"default\":\"composed with\"}},\"key\":\"2218\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bullet\"}},\"key\":\"2219\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square root\"}},\"key\":\"221A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"cube root\"}},\"key\":\"221B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"fourth root\"}},\"key\":\"221C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"proportional to\"}},\"key\":\"221D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"infinity\"}},\"key\":\"221E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right angle\"}},\"key\":\"221F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"angle\"}},\"key\":\"2220\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle\"}},\"key\":\"2221\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"spherical angle\"}},\"key\":\"2222\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar\",\"alternative\":\"divides\"}},\"key\":\"2223\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not divide\"}},\"key\":\"2224\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"parallel to\"}},\"key\":\"2225\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not parallel to\"}},\"key\":\"2226\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and\"}},\"key\":\"2227\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or\"}},\"key\":\"2228\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection\"}},\"key\":\"2229\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union\"}},\"key\":\"222A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral\"}},\"key\":\"222B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double integral\"}},\"key\":\"222C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple integral\"}},\"key\":\"222D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contour integral\"}},\"key\":\"222E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"surface integral\"}},\"key\":\"222F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"volume integral\"}},\"key\":\"2230\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"clockwise integral\"}},\"key\":\"2231\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"clockwise contour integral\"}},\"key\":\"2232\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"anticlockwise contour integral\"}},\"key\":\"2233\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"therefore\"}},\"key\":\"2234\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"because\"}},\"key\":\"2235\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"ratio\"}},\"key\":\"2236\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"proportion\"}},\"key\":\"2237\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"dot minus\"}},\"key\":\"2238\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"excess\"}},\"key\":\"2239\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"geometric proportion\"}},\"key\":\"223A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"homothetic\"}},\"key\":\"223B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"key\":\"223C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed tilde\"}},\"key\":\"223D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"inverted lazy s\"}},\"key\":\"223E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"sine wave\"}},\"key\":\"223F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"wreath product\"}},\"key\":\"2240\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not tilde\"}},\"key\":\"2241\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus tilde\"}},\"key\":\"2242\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"asymptotically equals\"}},\"key\":\"2243\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not asymptotically equals\"}},\"key\":\"2244\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"approximately equals\"}},\"key\":\"2245\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"approximately but not actually equals\"}},\"key\":\"2246\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither approximately nor actually equals\"}},\"key\":\"2247\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"almost equals\"}},\"key\":\"2248\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not almost equals\"}},\"key\":\"2249\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"almost equal or equals\"}},\"key\":\"224A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple tilde\"}},\"key\":\"224B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"all equals\"}},\"key\":\"224C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equivalent to\"}},\"key\":\"224D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"geometrically equivalent to\"}},\"key\":\"224E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"difference between\"}},\"key\":\"224F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"approaches the limit\"}},\"key\":\"2250\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"geometrically equals\"}},\"key\":\"2251\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"approximately equals or the image of\"}},\"key\":\"2252\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"image of or approximately equals\"}},\"key\":\"2253\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"colon equals\"}},\"key\":\"2254\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals colon\"}},\"key\":\"2255\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"ring in equals\"}},\"key\":\"2256\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"ring equals\"}},\"key\":\"2257\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"corresponds to\"}},\"key\":\"2258\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"estimates\"}},\"key\":\"2259\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equiangular to\"},\"clearspeak\":{\"default\":\"is equiangular to\"}},\"key\":\"225A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"star equals\"}},\"key\":\"225B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"delta equals\"}},\"key\":\"225C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals by definition\"},\"clearspeak\":{\"default\":\"is defined to be\"}},\"key\":\"225D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured by\"},\"clearspeak\":{\"default\":\"is measured by\"}},\"key\":\"225E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"questioned equals\"}},\"key\":\"225F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not equals\"},\"clearspeak\":{\"default\":\"is not equal to\"}},\"key\":\"2260\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"identical to\"},\"clearspeak\":{\"default\":\"is identical to\"}},\"key\":\"2261\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not identical to\"},\"clearspeak\":{\"default\":\"is not identical to\"}},\"key\":\"2262\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"strictly equivalent to\"},\"clearspeak\":{\"default\":\"is strictly equivalent to\"}},\"key\":\"2263\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or equals\"},\"clearspeak\":{\"default\":\"is less than or equal to\"}},\"key\":\"2264\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or equals\"},\"clearspeak\":{\"default\":\"is greater than or equal to\"}},\"key\":\"2265\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than over equals\"},\"clearspeak\":{\"default\":\"is less than over equals\"}},\"key\":\"2266\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than over equals\"},\"clearspeak\":{\"default\":\"is greater than over equals\"}},\"key\":\"2267\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than but not equals\"},\"clearspeak\":{\"default\":\"is less than but not equal to\"}},\"key\":\"2268\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than but not equals\"},\"clearspeak\":{\"default\":\"is greater than but not equal to\"}},\"key\":\"2269\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"much less than\"},\"clearspeak\":{\"default\":\"is much less than\"}},\"key\":\"226A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"much greater than\"},\"clearspeak\":{\"default\":\"is much greater than\"}},\"key\":\"226B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"between\"}},\"key\":\"226C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not equivalent to\"},\"clearspeak\":{\"default\":\"is not equivalent to\"}},\"key\":\"226D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not less than\"},\"clearspeak\":{\"default\":\"is not less than\"}},\"key\":\"226E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not greater than\"},\"clearspeak\":{\"default\":\"is not greater than\"}},\"key\":\"226F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither less than nor equals\"},\"clearspeak\":{\"default\":\"is neither less than nor equal to\"}},\"key\":\"2270\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither greater than nor equals\"},\"clearspeak\":{\"default\":\"is neither greater than nor equal to\"}},\"key\":\"2271\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or equivalent to\"},\"clearspeak\":{\"default\":\"is less than or equivalent to\"}},\"key\":\"2272\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or equivalent to\"},\"clearspeak\":{\"default\":\"is greater than or equivalent to\"}},\"key\":\"2273\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither less than nor equivalent to\"},\"clearspeak\":{\"default\":\"is neither less than nor equivalent to\"}},\"key\":\"2274\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither greater than nor equivalent to\"},\"clearspeak\":{\"default\":\"is neither greater than nor equivalent to\"}},\"key\":\"2275\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or greater than\"},\"clearspeak\":{\"default\":\"is less than or greater than\"}},\"key\":\"2276\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or less than\"},\"clearspeak\":{\"default\":\"is greater than or less than\"}},\"key\":\"2277\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither less than nor greater than\"},\"clearspeak\":{\"default\":\"is neither less than nor greater than\"}},\"key\":\"2278\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither greater than nor less than\"},\"clearspeak\":{\"default\":\"is neither greater than nor less than\"}},\"key\":\"2279\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes\"}},\"key\":\"227A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds\"}},\"key\":\"227B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes or equal to\"}},\"key\":\"227C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds or equal to\"}},\"key\":\"227D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes or equivalent to\"}},\"key\":\"227E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds or equivalent to\"}},\"key\":\"227F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not precede\"}},\"key\":\"2280\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not succeed\"}},\"key\":\"2281\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of\"}},\"key\":\"2282\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of\"}},\"key\":\"2283\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not a subset of\"}},\"key\":\"2284\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not a superset of\"}},\"key\":\"2285\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of or equal to\"}},\"key\":\"2286\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of or equal to\"}},\"key\":\"2287\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither a subset of nor equal to\"}},\"key\":\"2288\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither a superset of nor equal to\"}},\"key\":\"2289\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of or not equals\"}},\"key\":\"228A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of or not equals\"}},\"key\":\"228B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiset\"}},\"key\":\"228C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiset multiplication\"}},\"key\":\"228D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiset union\"}},\"key\":\"228E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square image of\"}},\"key\":\"228F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square original of\"}},\"key\":\"2290\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square image of or equal to\"}},\"key\":\"2291\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square original of or equal to\"}},\"key\":\"2292\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square cap\"}},\"key\":\"2293\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square cup\"}},\"key\":\"2294\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled plus\"}},\"key\":\"2295\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled minus\"}},\"key\":\"2296\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled times\"}},\"key\":\"2297\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled division slash\"}},\"key\":\"2298\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled dot\"}},\"key\":\"2299\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled ring\"}},\"key\":\"229A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled asterisk\"}},\"key\":\"229B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled equals\"}},\"key\":\"229C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled dash\"}},\"key\":\"229D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared plus\"}},\"key\":\"229E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared minus\"}},\"key\":\"229F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared times\"}},\"key\":\"22A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared dot\"}},\"key\":\"22A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right tack\"}},\"key\":\"22A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left tack\"}},\"key\":\"22A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down tack\"}},\"key\":\"22A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up tack\"}},\"key\":\"22A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"assertion\"}},\"key\":\"22A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"models\"}},\"key\":\"22A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"true\"}},\"key\":\"22A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"forces\"}},\"key\":\"22A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple vertical bar right turnstile\"}},\"key\":\"22AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double vertical bar double right turnstile\"}},\"key\":\"22AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not prove\"}},\"key\":\"22AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not true\"}},\"key\":\"22AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not force\"}},\"key\":\"22AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"negated double vertical bar double right turnstile\"}},\"key\":\"22AF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes under relation\"}},\"key\":\"22B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds under relation\"}},\"key\":\"22B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"normal subgroup of\"}},\"key\":\"22B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains as normal subgroup\"}},\"key\":\"22B3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"normal subgroup of or equal to\"}},\"key\":\"22B4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains as normal subgroup or equal to\"}},\"key\":\"22B5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"original of\"}},\"key\":\"22B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"image of\"}},\"key\":\"22B7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multimap\"}},\"key\":\"22B8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"hermitian conjugate matrix\"}},\"key\":\"22B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intercalate\"}},\"key\":\"22BA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"xor\"}},\"key\":\"22BB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"nand\"}},\"key\":\"22BC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"nor\"}},\"key\":\"22BD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right triangle\"}},\"key\":\"22BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary and\"},\"mathspeak\":{\"default\":\"and\"}},\"key\":\"22C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary or\"},\"mathspeak\":{\"default\":\"or\"}},\"key\":\"22C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary intersection\"},\"mathspeak\":{\"default\":\"intersection\"}},\"key\":\"22C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary union\"},\"mathspeak\":{\"default\":\"union\"}},\"key\":\"22C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"diamond\"}},\"key\":\"22C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"dot\"},\"clearspeak\":{\"default\":\"times\",\"MultsymbolDot_Dot\":\"dot\"}},\"key\":\"22C5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"star\"}},\"key\":\"22C6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"division times\"}},\"key\":\"22C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bowtie\"}},\"key\":\"22C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left normal factor semidirect product\"}},\"key\":\"22C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right normal factor semidirect product\"}},\"key\":\"22CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left semidirect product\"}},\"key\":\"22CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right semidirect product\"}},\"key\":\"22CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed tilde equals\"}},\"key\":\"22CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"curly or\"}},\"key\":\"22CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"curly and\"}},\"key\":\"22CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double subset\"}},\"key\":\"22D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double superset\"}},\"key\":\"22D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double intersection\"}},\"key\":\"22D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double union\"}},\"key\":\"22D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"pitchfork\"}},\"key\":\"22D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equal and parallel to\"},\"clearspeak\":{\"default\":\"is equal and parallel to\"}},\"key\":\"22D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than dot\"},\"clearspeak\":{\"default\":\"is less than dot\"}},\"key\":\"22D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than dot\"},\"clearspeak\":{\"default\":\"is greater than dot\"}},\"key\":\"22D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"very much less than\"},\"clearspeak\":{\"default\":\"is very much less than\"}},\"key\":\"22D8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"very much greater than\"},\"clearspeak\":{\"default\":\"is very much greater than\"}},\"key\":\"22D9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than equals or greater than\"},\"clearspeak\":{\"default\":\"is less than equal to or greater than\"}},\"key\":\"22DA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than equals or less than\"},\"clearspeak\":{\"default\":\"is greater than equal to or less than\"}},\"key\":\"22DB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals or less than\"},\"clearspeak\":{\"default\":\"is equal to or less than\"}},\"key\":\"22DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals or greater than\"},\"clearspeak\":{\"default\":\"is equal to or greater than\"}},\"key\":\"22DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals or precedes\"},\"clearspeak\":{\"default\":\"is equal to or precedes\"}},\"key\":\"22DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals or succeeds\"},\"clearspeak\":{\"default\":\"is equal to or succeeds\"}},\"key\":\"22DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not precede or equal\"}},\"key\":\"22E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not succeed or equal\"}},\"key\":\"22E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not square image of or equals\"},\"clearspeak\":{\"default\":\"is not square image of or equal to\"}},\"key\":\"22E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not square original of or equals\"},\"clearspeak\":{\"default\":\"is not square original of or equal to\"}},\"key\":\"22E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square image of or not equals\"},\"clearspeak\":{\"default\":\"is square image of or not equal to\"}},\"key\":\"22E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square original of or not equals\"},\"clearspeak\":{\"default\":\"is square original of or not equal to\"}},\"key\":\"22E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than but not equivalent to\"},\"clearspeak\":{\"default\":\"is less than but not equivalent to\"}},\"key\":\"22E6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than but not equivalent to\"},\"clearspeak\":{\"default\":\"is greater than but not equivalent to\"}},\"key\":\"22E7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes but not equivalent to\"}},\"key\":\"22E8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds but not equivalent to\"}},\"key\":\"22E9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not normal subgroup of\"},\"clearspeak\":{\"default\":\"is not normal subgroup of\"}},\"key\":\"22EA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not contain as normal subgroup\"}},\"key\":\"22EB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not normal subgroup of or equals\"},\"clearspeak\":{\"default\":\"is not normal subgroup of or equal to\"}},\"key\":\"22EC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not contain as normal subgroup or equal\"}},\"key\":\"22ED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical ellipsis\"}},\"key\":\"22EE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"midline horizontal ellipsis\"},\"clearspeak\":{\"default\":\"dot dot dot\"}},\"key\":\"22EF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up right diagonal ellipsis\"}},\"key\":\"22F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down right diagonal ellipsis\"}},\"key\":\"22F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with long horizontal stroke\"}},\"key\":\"22F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with vertical bar at end of horizontal stroke\"}},\"key\":\"22F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small element of with vertical bar at end of horizontal stroke\"}},\"key\":\"22F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with dot above\"}},\"key\":\"22F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with overbar\"}},\"key\":\"22F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small element of with overbar\"}},\"key\":\"22F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with underbar\"}},\"key\":\"22F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with two horizontal strokes\"}},\"key\":\"22F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains with long horizontal stroke\"}},\"key\":\"22FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains with vertical bar at end of horizontal stroke\"}},\"key\":\"22FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small contains with vertical bar at end of horizontal stroke\"}},\"key\":\"22FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains with overbar\"}},\"key\":\"22FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small contains with overbar\"}},\"key\":\"22FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation bag membership\"}},\"key\":\"22FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"diameter sign\"}},\"key\":\"2300\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"house\"}},\"key\":\"2302\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"projective\"}},\"key\":\"2305\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"perspective\"}},\"key\":\"2306\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"wavy line\"}},\"key\":\"2307\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"reversed not\"}},\"key\":\"2310\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square lozenge\"}},\"key\":\"2311\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"arc\"}},\"key\":\"2312\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"segment\"}},\"key\":\"2313\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"sector\"}},\"key\":\"2314\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bold plus\"}},\"key\":\"2795\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bold minus\"}},\"key\":\"2796\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bold division\"}},\"key\":\"2797\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"curly loop\"}},\"key\":\"27B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"double curly loop\"}},\"key\":\"27BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white triangle containing small white triangle\"}},\"key\":\"27C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"perpendicular\"}},\"key\":\"27C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"open subset\"}},\"key\":\"27C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"open superset\"}},\"key\":\"27C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with dot inside\"}},\"key\":\"27C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"backslash preceding subset\"}},\"key\":\"27C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset preceding solidus\"}},\"key\":\"27C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar with horizontal stroke\"}},\"key\":\"27CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"rising diagonal\"}},\"key\":\"27CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long division\"}},\"key\":\"27CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"falling diagonal\"}},\"key\":\"27CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared and\"}},\"key\":\"27CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared or\"}},\"key\":\"27CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white diamond with centered dot\"}},\"key\":\"27D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with dot\"}},\"key\":\"27D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of opening upwards\"}},\"key\":\"27D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"lower right corner with dot\"}},\"key\":\"27D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"upper left corner with dot\"}},\"key\":\"27D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left outer join\"}},\"key\":\"27D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right outer join\"}},\"key\":\"27D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"full outer join\"}},\"key\":\"27D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"large up tack\"}},\"key\":\"27D8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"large down tack\"}},\"key\":\"27D9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left and right double turnstile\"}},\"key\":\"27DA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left and right tack\"}},\"key\":\"27DB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left multimap\"}},\"key\":\"27DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right tack\"}},\"key\":\"27DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left tack\"}},\"key\":\"27DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up tack with circle above\"}},\"key\":\"27DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"lozenge divided by horizontal rule\"}},\"key\":\"27E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white concave sided diamond\"}},\"key\":\"27E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white concave sided diamond with leftwards tick\"}},\"key\":\"27E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white concave sided diamond with rightwards tick\"}},\"key\":\"27E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white square with leftwards tick\"}},\"key\":\"27E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white square with rightwards tick\"}},\"key\":\"27E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"rising diagonal crossing falling diagonal\"}},\"key\":\"292B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"falling diagonal crossing rising diagonal\"}},\"key\":\"292C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple vertical bar delimiter\"}},\"key\":\"2980\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation spot\"}},\"key\":\"2981\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation type colon\"}},\"key\":\"2982\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"dotted fence\"}},\"key\":\"2999\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical zigzag line\"}},\"key\":\"299A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed empty set\"}},\"key\":\"29B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"empty set with overbar\"}},\"key\":\"29B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"empty set with small circle above\"}},\"key\":\"29B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circle with horizontal bar\"}},\"key\":\"29B5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled vertical bar\"}},\"key\":\"29B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled parallel\"}},\"key\":\"29B7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled backslash\"}},\"key\":\"29B8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled perpendicular\"}},\"key\":\"29B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circle divided by horizontal bar and top half divided by vertical bar\"}},\"key\":\"29BA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circle with superimposed x\"}},\"key\":\"29BB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled anticlockwise rotated division\"}},\"key\":\"29BC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled white bullet\"}},\"key\":\"29BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled bullet\"}},\"key\":\"29BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled less than\"}},\"key\":\"29C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled greater than\"}},\"key\":\"29C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circle with small circle to the right\"}},\"key\":\"29C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circle with two horizontal strokes to the right\"}},\"key\":\"29C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared rising diagonal slash\"}},\"key\":\"29C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared falling diagonal slash\"}},\"key\":\"29C5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared asterisk\"}},\"key\":\"29C6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared small circle\"}},\"key\":\"29C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared square\"}},\"key\":\"29C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two joined squares\"}},\"key\":\"29C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triangle with dot above\"}},\"key\":\"29CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triangle with underbar\"}},\"key\":\"29CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"s in triangle\"}},\"key\":\"29CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triangle with serifs at bottom\"}},\"key\":\"29CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right triangle above left triangle\"}},\"key\":\"29CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left triangle beside vertical bar\"}},\"key\":\"29CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar beside right triangle\"}},\"key\":\"29D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bowtie with left half black\"}},\"key\":\"29D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bowtie with right half black\"}},\"key\":\"29D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black bowtie\"}},\"key\":\"29D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"times with left half black\"}},\"key\":\"29D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"times with right half black\"}},\"key\":\"29D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white hourglass\"}},\"key\":\"29D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black hourglass\"}},\"key\":\"29D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"incomplete infinity\"}},\"key\":\"29DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tie over infinity\"}},\"key\":\"29DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"infinity negated with vertical bar\"}},\"key\":\"29DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double ended multimap\"}},\"key\":\"29DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square with contoured outline\"}},\"key\":\"29E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"increases as\"}},\"key\":\"29E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"shuffle product\"}},\"key\":\"29E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals and slanted parallel\"}},\"key\":\"29E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals and slanted parallel with tilde above\"}},\"key\":\"29E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"identical to and slanted parallel\"}},\"key\":\"29E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"gleich stark\"}},\"key\":\"29E6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"thermodynamic\"}},\"key\":\"29E7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down pointing triangle with left half black\"}},\"key\":\"29E8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down pointing triangle with right half black\"}},\"key\":\"29E9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black lozenge\"}},\"key\":\"29EB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred white square\"}},\"key\":\"29EE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred black square\"}},\"key\":\"29EF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred white diamond\"}},\"key\":\"29F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred black diamond\"}},\"key\":\"29F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred white circle\"}},\"key\":\"29F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred black circle\"}},\"key\":\"29F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"rule delayed\"}},\"key\":\"29F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"backslash\"}},\"key\":\"29F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"solidus with overbar\"}},\"key\":\"29F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"backslash with horizontal stroke\"}},\"key\":\"29F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"big solidus\"},\"mathspeak\":{\"default\":\"solidus\"}},\"key\":\"29F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"big backslash\"},\"mathspeak\":{\"default\":\"backslash\"}},\"key\":\"29F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double plus\"}},\"key\":\"29FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple plus\"}},\"key\":\"29FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tiny\"}},\"key\":\"29FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"miny\"}},\"key\":\"29FF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary circled dot\"},\"mathspeak\":{\"default\":\"circled dot\"}},\"key\":\"2A00\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary circled plus\"},\"mathspeak\":{\"default\":\"circled plus\"}},\"key\":\"2A01\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary circled times\"},\"mathspeak\":{\"default\":\"circled times\"}},\"key\":\"2A02\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary union with dot\"},\"mathspeak\":{\"default\":\"union with dot\"}},\"key\":\"2A03\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary union operator with plus\"},\"mathspeak\":{\"default\":\"union with plus\"}},\"key\":\"2A04\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary square intersection\"},\"mathspeak\":{\"default\":\"square intersection\"}},\"key\":\"2A05\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary square union\"},\"mathspeak\":{\"default\":\"square union\"}},\"key\":\"2A06\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two and\"}},\"key\":\"2A07\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two or\"}},\"key\":\"2A08\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary times\"},\"mathspeak\":{\"default\":\"times\"}},\"key\":\"2A09\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"modulo two sum\"}},\"key\":\"2A0A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"summation with integral\"}},\"key\":\"2A0B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"quadruple integral\"}},\"key\":\"2A0C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"finite part integral\"}},\"key\":\"2A0D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with double stroke\"}},\"key\":\"2A0E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral average with slash\"}},\"key\":\"2A0F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circulation function\"}},\"key\":\"2A10\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"anticlockwise integration\"}},\"key\":\"2A11\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"line integration with rectangular path around pole\"}},\"key\":\"2A12\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"line integration with semicircular path around pole\"}},\"key\":\"2A13\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"line integration not including the pole\"}},\"key\":\"2A14\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral around a point\"}},\"key\":\"2A15\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"quaternion integral\"}},\"key\":\"2A16\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with times\"}},\"key\":\"2A18\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with intersection\"}},\"key\":\"2A19\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with union\"}},\"key\":\"2A1A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with overbar\"}},\"key\":\"2A1B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with underbar\"}},\"key\":\"2A1C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"join\"}},\"key\":\"2A1D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"large left triangle\"}},\"key\":\"2A1E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation schema composition\"}},\"key\":\"2A1F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation schema piping\"}},\"key\":\"2A20\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation schema projection\"}},\"key\":\"2A21\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus with circle above\"}},\"key\":\"2A22\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus hat\"}},\"key\":\"2A23\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus tilde\"}},\"key\":\"2A24\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus underdot\"}},\"key\":\"2A25\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign with tilde below\"}},\"key\":\"2A26\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign with subscript two\"}},\"key\":\"2A27\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign with black triangle\"}},\"key\":\"2A28\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus sign with comma above\"}},\"key\":\"2A29\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus sign with dot below\"}},\"key\":\"2A2A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus sign with falling dots\"}},\"key\":\"2A2B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus sign with rising dots\"}},\"key\":\"2A2C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign in left half circle\"}},\"key\":\"2A2D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign in right half circle\"}},\"key\":\"2A2E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vector or cross product\"}},\"key\":\"2A2F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign with dot above\"}},\"key\":\"2A30\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign with underbar\"}},\"key\":\"2A31\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"semidirect product with bottom closed\"}},\"key\":\"2A32\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"smash product\"}},\"key\":\"2A33\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign in left half circle\"}},\"key\":\"2A34\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign in right half circle\"}},\"key\":\"2A35\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled multiplication sign with circumflex accent\"}},\"key\":\"2A36\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign in double circle\"}},\"key\":\"2A37\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled division\"}},\"key\":\"2A38\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign in triangle\"}},\"key\":\"2A39\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus sign in triangle\"}},\"key\":\"2A3A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign in triangle\"}},\"key\":\"2A3B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"interior product\"}},\"key\":\"2A3C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"righthand interior product\"}},\"key\":\"2A3D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation relational composition\"}},\"key\":\"2A3E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"amalgamation or coproduct\"}},\"key\":\"2A3F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection with dot\"}},\"key\":\"2A40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union with minus\"}},\"key\":\"2A41\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union with overbar\"}},\"key\":\"2A42\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection with overbar\"}},\"key\":\"2A43\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection with and\"}},\"key\":\"2A44\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union with or\"}},\"key\":\"2A45\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union above intersection\"}},\"key\":\"2A46\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection above union\"}},\"key\":\"2A47\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union above bar above intersection\"}},\"key\":\"2A48\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection above bar above union\"}},\"key\":\"2A49\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union beside and joined with union\"}},\"key\":\"2A4A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection beside and joined with intersection\"}},\"key\":\"2A4B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed union with serifs\"}},\"key\":\"2A4C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed intersection with serifs\"}},\"key\":\"2A4D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double square intersection\"}},\"key\":\"2A4E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double square union\"}},\"key\":\"2A4F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed union with serifs and smash product\"}},\"key\":\"2A50\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with dot above\"}},\"key\":\"2A51\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with dot above\"}},\"key\":\"2A52\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double and\"}},\"key\":\"2A53\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double or\"}},\"key\":\"2A54\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two intersecting and\"}},\"key\":\"2A55\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two intersecting or\"}},\"key\":\"2A56\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"sloping large or\"}},\"key\":\"2A57\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"sloping large and\"}},\"key\":\"2A58\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or overlapping and\"}},\"key\":\"2A59\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with middle stem\"}},\"key\":\"2A5A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with middle stem\"}},\"key\":\"2A5B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with horizontal dash\"}},\"key\":\"2A5C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with horizontal dash\"}},\"key\":\"2A5D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with double overbar\"}},\"key\":\"2A5E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with underbar\"}},\"key\":\"2A5F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with double underbar\"}},\"key\":\"2A60\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small vee with underbar\"}},\"key\":\"2A61\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with double overbar\"}},\"key\":\"2A62\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with double underbar\"}},\"key\":\"2A63\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation domain antirestriction\"}},\"key\":\"2A64\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation range antirestriction\"}},\"key\":\"2A65\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals sign with dot below\"}},\"key\":\"2A66\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"identical with dot above\"}},\"key\":\"2A67\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple horizontal bar with double vertical stroke\"}},\"key\":\"2A68\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple horizontal bar with triple vertical stroke\"}},\"key\":\"2A69\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde with dot above\"}},\"key\":\"2A6A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde with rising dots\"}},\"key\":\"2A6B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"similar minus similar\"}},\"key\":\"2A6C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"congruent with dot above\"}},\"key\":\"2A6D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals with asterisk\"}},\"key\":\"2A6E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"almost equal hat\"}},\"key\":\"2A6F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"approximately equal or equal to\"}},\"key\":\"2A70\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals above plus\"}},\"key\":\"2A71\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus above equals\"}},\"key\":\"2A72\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals above tilde\"}},\"key\":\"2A73\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double colon equal\"}},\"key\":\"2A74\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two consecutive equals\"}},\"key\":\"2A75\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"three consecutive equals\"}},\"key\":\"2A76\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals sign with two dots above and two dots below\"}},\"key\":\"2A77\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equivalent with four dots above\"}},\"key\":\"2A78\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than with circle inside\"}},\"key\":\"2A79\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than with circle inside\"}},\"key\":\"2A7A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than with question mark above\"}},\"key\":\"2A7B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than with question mark above\"}},\"key\":\"2A7C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or slanted equals\"}},\"key\":\"2A7D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or slanted equals\"}},\"key\":\"2A7E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or slanted equals with dot inside\"}},\"key\":\"2A7F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or slanted equals with dot inside\"}},\"key\":\"2A80\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or slanted equals with dot above\"}},\"key\":\"2A81\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or slanted equals with dot above\"}},\"key\":\"2A82\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or slanted equals with dot above right\"}},\"key\":\"2A83\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or slanted equals with dot above left\"}},\"key\":\"2A84\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or approximate\"}},\"key\":\"2A85\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or approximate\"}},\"key\":\"2A86\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than and single line not equals\"}},\"key\":\"2A87\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than and single line not equals\"}},\"key\":\"2A88\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than and not approximate\"}},\"key\":\"2A89\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than and not approximate\"}},\"key\":\"2A8A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above double line equal above greater than\"}},\"key\":\"2A8B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above double line equal above less than\"}},\"key\":\"2A8C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above similar or equal\"}},\"key\":\"2A8D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above similar or equal\"}},\"key\":\"2A8E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above similar above greater than\"}},\"key\":\"2A8F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above similar above less than\"}},\"key\":\"2A90\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above greater than above double line equal\"}},\"key\":\"2A91\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above less than above double line equal\"}},\"key\":\"2A92\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above slanted equal above greater than above slanted equal\"}},\"key\":\"2A93\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above slanted equal above less than above slanted equal\"}},\"key\":\"2A94\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"slanted equals or less than\"}},\"key\":\"2A95\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"slanted equals or greater than\"}},\"key\":\"2A96\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"slanted equals or less than with dot inside\"}},\"key\":\"2A97\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"slanted equals or greater than with dot inside\"}},\"key\":\"2A98\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line equals or less than\"}},\"key\":\"2A99\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line equals or greater than\"}},\"key\":\"2A9A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line slanted equals or less than\"}},\"key\":\"2A9B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line slanted equals or greater than\"}},\"key\":\"2A9C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"similar or less than\"}},\"key\":\"2A9D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"similar or greater than\"}},\"key\":\"2A9E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"similar above less than above equals sign\"}},\"key\":\"2A9F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"similar above greater than above equals sign\"}},\"key\":\"2AA0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double nested less than\"}},\"key\":\"2AA1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double nested greater than\"}},\"key\":\"2AA2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double nested less than with underbar\"}},\"key\":\"2AA3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than overlapping less than\"}},\"key\":\"2AA4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than beside less than\"}},\"key\":\"2AA5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than closed by curve\"}},\"key\":\"2AA6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than closed by curve\"}},\"key\":\"2AA7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than closed by curve above slanted equal\"}},\"key\":\"2AA8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than closed by curve above slanted equal\"}},\"key\":\"2AA9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"smaller than\"},\"clearspeak\":{\"default\":\"is smaller than\"}},\"key\":\"2AAA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"larger than\"},\"clearspeak\":{\"default\":\"is larger than\"}},\"key\":\"2AAB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"smaller than or equals\"},\"clearspeak\":{\"default\":\"is smaller than or equal to\"}},\"key\":\"2AAC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"larger than or equal\"},\"clearspeak\":{\"default\":\"is larger than or equal to\"}},\"key\":\"2AAD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals with bumpy above\"}},\"key\":\"2AAE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above single line equals sign\"}},\"key\":\"2AAF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above single line equals sign\"}},\"key\":\"2AB0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above single line not equals\"}},\"key\":\"2AB1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above single line not equals\"}},\"key\":\"2AB2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above equals\"}},\"key\":\"2AB3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above equals\"}},\"key\":\"2AB4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above not equals\"}},\"key\":\"2AB5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above not equals\"}},\"key\":\"2AB6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above almost equals\"}},\"key\":\"2AB7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above almost equals\"}},\"key\":\"2AB8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above not almost equals\"}},\"key\":\"2AB9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above not almost equals\"}},\"key\":\"2ABA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double precedes\"}},\"key\":\"2ABB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double succeeds\"}},\"key\":\"2ABC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset with dot\"}},\"key\":\"2ABD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset with dot\"}},\"key\":\"2ABE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset with plus sign below\"}},\"key\":\"2ABF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset with plus sign below\"}},\"key\":\"2AC0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset with multiplication sign below\"}},\"key\":\"2AC1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset with multiplication sign below\"}},\"key\":\"2AC2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of or equals with dot above\"}},\"key\":\"2AC3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of or equals with dot above\"}},\"key\":\"2AC4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of above equals sign\"}},\"key\":\"2AC5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of above equals sign\"}},\"key\":\"2AC6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of above tilde\"}},\"key\":\"2AC7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of above tilde\"}},\"key\":\"2AC8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of above almost equals\"}},\"key\":\"2AC9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of above almost equals\"}},\"key\":\"2ACA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of above not equals\"}},\"key\":\"2ACB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of above not equals\"}},\"key\":\"2ACC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square left open box\"}},\"key\":\"2ACD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square right open box\"}},\"key\":\"2ACE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed subset\"}},\"key\":\"2ACF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed superset\"}},\"key\":\"2AD0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed subset or equals\"}},\"key\":\"2AD1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed superset or equals\"}},\"key\":\"2AD2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset above superset\"}},\"key\":\"2AD3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset above subset\"}},\"key\":\"2AD4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset above subset\"}},\"key\":\"2AD5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset above superset\"}},\"key\":\"2AD6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset beside subset\"}},\"key\":\"2AD7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset beside and joined by dash with subset\"}},\"key\":\"2AD8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of opening downwards\"}},\"key\":\"2AD9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"pitchfork with tee top\"}},\"key\":\"2ADA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"transversal intersection\"}},\"key\":\"2ADB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"forking\"}},\"key\":\"2ADC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"nonforking\"}},\"key\":\"2ADD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short left tack\"}},\"key\":\"2ADE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short down tack\"}},\"key\":\"2ADF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short up tack\"}},\"key\":\"2AE0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"perpendicular with s\"}},\"key\":\"2AE1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar triple right turnstile\"}},\"key\":\"2AE2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double vertical bar left turnstile\"}},\"key\":\"2AE3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar double left turnstile\"}},\"key\":\"2AE4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double vertical bar double left turnstile\"}},\"key\":\"2AE5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long dash from left member of double vertical\"}},\"key\":\"2AE6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short down tack with overbar\"}},\"key\":\"2AE7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short up tack with underbar\"}},\"key\":\"2AE8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short up tack above short down tack\"}},\"key\":\"2AE9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double down tack\"}},\"key\":\"2AEA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double up tack\"}},\"key\":\"2AEB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double stroke not sign\"}},\"key\":\"2AEC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed double stroke not sign\"}},\"key\":\"2AED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not divide with reversed negation slash\"}},\"key\":\"2AEE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical line with circle above\"}},\"key\":\"2AEF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical line with circle below\"}},\"key\":\"2AF0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down tack with circle below\"}},\"key\":\"2AF1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"parallel with horizontal stroke\"}},\"key\":\"2AF2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"parallel with tilde\"}},\"key\":\"2AF3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple vertical bar binary relation\"}},\"key\":\"2AF4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple vertical bar with horizontal stroke\"}},\"key\":\"2AF5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple colon\"}},\"key\":\"2AF6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple nested less than\"}},\"key\":\"2AF7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple nested greater than\"}},\"key\":\"2AF8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line slanted less than or equals\"}},\"key\":\"2AF9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line slanted greater than or equals\"}},\"key\":\"2AFA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple solidus binary relation\"}},\"key\":\"2AFB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"large triple vertical bar\"}},\"key\":\"2AFC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double solidus\"}},\"key\":\"2AFD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white vertical bar\"}},\"key\":\"2AFE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary white vertical bar\"},\"mathspeak\":{\"default\":\"white vertical bar\"}},\"key\":\"2AFF\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"wave dash\"}},\"key\":\"301C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical comma\"}},\"key\":\"FE10\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical colon\"}},\"key\":\"FE13\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical semicolon\"}},\"key\":\"FE14\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical exclamation mark\"}},\"key\":\"FE15\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical question mark\"}},\"key\":\"FE16\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical horizontal ellipsis\"}},\"key\":\"FE19\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"glyph for vertical two dot leader\"}},\"key\":\"FE30\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"glyph for vertical em dash\"}},\"key\":\"FE31\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"glyph for vertical en dash\"}},\"key\":\"FE32\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"glyph for vertical underline\"}},\"key\":\"FE33\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"glyph for vertical wavy underline\"}},\"key\":\"FE34\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"sesame dot\"}},\"key\":\"FE45\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"white sesame dot\"}},\"key\":\"FE46\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"dashed overline\"}},\"key\":\"FE49\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"dash dot overline\"}},\"key\":\"FE4A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"wavy overline\"}},\"key\":\"FE4B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double wavy overline\"}},\"key\":\"FE4C\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"dashed underline\"}},\"key\":\"FE4D\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"dash dot underline\"}},\"key\":\"FE4E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"wavy underline\"}},\"key\":\"FE4F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small comma\"}},\"key\":\"FE50\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small period\"}},\"key\":\"FE52\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small semicolon\"}},\"key\":\"FE54\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small colon\"}},\"key\":\"FE55\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small question mark\"}},\"key\":\"FE56\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small exclamation mark\"}},\"key\":\"FE57\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"small em dash\"}},\"key\":\"FE58\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small number sign\"}},\"key\":\"FE5F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small ampersand\"}},\"key\":\"FE60\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small asterisk\"}},\"key\":\"FE61\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small plus sign\"}},\"key\":\"FE62\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"small hyphen minus\"}},\"key\":\"FE63\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small less than sign\"}},\"key\":\"FE64\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small greater than sign\"}},\"key\":\"FE65\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small equals\"}},\"key\":\"FE66\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small backslash\",\"alternative\":\"small reverse solidus\"}},\"key\":\"FE68\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"small dollar sign\"}},\"key\":\"FE69\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small percent sign\"}},\"key\":\"FE6A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small commercial at\"}},\"key\":\"FE6B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"exclamation mark\"}},\"key\":\"FF01\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"quotation mark\"}},\"key\":\"FF02\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"number sign\"}},\"key\":\"FF03\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"dollar sign\"}},\"key\":\"FF04\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"percent sign\"}},\"key\":\"FF05\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"ampersand\"}},\"key\":\"FF06\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"apostrophe\"}},\"key\":\"FF07\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"asterisk\"}},\"key\":\"FF0A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign\"}},\"key\":\"FF0B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"comma\"}},\"key\":\"FF0C\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"hyphen minus\"}},\"key\":\"FF0D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"period\"}},\"key\":\"FF0E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"slash\",\"alternative\":\"solidus\"}},\"key\":\"FF0F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"colon\"}},\"key\":\"FF1A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"semicolon\"}},\"key\":\"FF1B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than\"}},\"key\":\"FF1C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals\"}},\"key\":\"FF1D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than\"}},\"key\":\"FF1E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"question mark\"}},\"key\":\"FF1F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"commercial at\"}},\"key\":\"FF20\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"backslash\",\"alternative\":\"reverse solidus\"}},\"key\":\"FF3C\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"caret\",\"alternative\":\"circumflex\"}},\"key\":\"FF3E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"bar\",\"alternative\":\"underline\"}},\"key\":\"FF3F\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"grave\"}},\"key\":\"FF40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar\"}},\"key\":\"FF5C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"key\":\"FF5E\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"cent sign\"}},\"key\":\"FFE0\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"pound sign\"}},\"key\":\"FFE1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not sign\"}},\"key\":\"FFE2\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"macron\"},\"mathspeak\":{\"default\":\"bar\"}},\"key\":\"FFE3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"broken vertical bar\"}},\"key\":\"FFE4\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"yen sign\"}},\"key\":\"FFE5\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"won sign\"}},\"key\":\"FFE6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"halfwidth forms light vertical\"}},\"key\":\"FFE8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"halfwidth black square\"}},\"key\":\"FFED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"halfwidth white circle\"}},\"key\":\"FFEE\"}]\n,\n\"en/symbols/math_whitespace.js\": \n[{\"locale\":\"en\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"space\"}},\"key\":\"0020\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"no break space\",\"alternative\":\"non breaking space\"}},\"key\":\"00A0\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"soft hyphen\"}},\"key\":\"00AD\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"en quad\"}},\"key\":\"2000\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"em quad\"}},\"key\":\"2001\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"en space\"}},\"key\":\"2002\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"em space\"}},\"key\":\"2003\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"three per em space\"}},\"key\":\"2004\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"four per em space\"}},\"key\":\"2005\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"six per em space\"}},\"key\":\"2006\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"figure space\"}},\"key\":\"2007\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"punctuation space\"}},\"key\":\"2008\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"thin space\"}},\"key\":\"2009\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"hair space\"}},\"key\":\"200A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"zero width space\"}},\"key\":\"200B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"zero width non joiner\"}},\"key\":\"200C\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"zero width joiner\"}},\"key\":\"200D\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"left to right mark\"}},\"key\":\"200E\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"right to left mark\"}},\"key\":\"200F\"},{\"category\":\"Zl\",\"mappings\":{\"default\":{\"default\":\"line separator\"}},\"key\":\"2028\"},{\"category\":\"Zp\",\"mappings\":{\"default\":{\"default\":\"paragraph separator\"}},\"key\":\"2029\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"left to right embedding\"}},\"key\":\"202A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"right to left embedding\"}},\"key\":\"202B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"pop directional formatting\"}},\"key\":\"202C\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"left to right override\"}},\"key\":\"202D\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"right to left override\"}},\"key\":\"202E\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"narrow no break space\"}},\"key\":\"202F\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"medium mathematical space\"}},\"key\":\"205F\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"word joiner\"}},\"key\":\"2060\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"of\",\"alternative\":\"function application\"}},\"key\":\"2061\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"times\",\"alternative\":\"invisible times\"}},\"key\":\"2062\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"separator\",\"alternative\":\"invisible separator\"}},\"key\":\"2063\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"plus\",\"alternative\":\"invisible plus\"}},\"key\":\"2064\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"inhibit symmetric swapping\"}},\"key\":\"206A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"activate symmetric swapping\"}},\"key\":\"206B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"national digit shapes\"}},\"key\":\"206E\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"nominal digit shapes\"}},\"key\":\"206F\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"zero width no break space\",\"alternative\":\"byte order mark\"}},\"key\":\"FEFF\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"interlinear annotation anchor\"}},\"key\":\"FFF9\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"interlinear annotation separator\"}},\"key\":\"FFFA\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"interlinear annotation terminator\"}},\"key\":\"FFFB\"}]\n,\n\"en/symbols/other_stars.js\": \n[{\"locale\":\"en\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"decimal exponent symbol\"}},\"key\":\"23E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black star\"}},\"key\":\"2605\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white star\"}},\"key\":\"2606\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle\",\"alternative\":\"medium white circle\"}},\"key\":\"26AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black circle\",\"alternative\":\"medium black circle\"}},\"key\":\"26AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white check mark\",\"alternative\":\"white heavy check mark\"}},\"key\":\"2705\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"check mark\"}},\"key\":\"2713\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy check mark\"}},\"key\":\"2714\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"multiplication x\"}},\"key\":\"2715\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy multiplication x\"}},\"key\":\"2716\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"ballot x\"}},\"key\":\"2717\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy ballot x\"}},\"key\":\"2718\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"open center cross\"}},\"key\":\"271B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy open center cross\"}},\"key\":\"271C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"maltese cross\"}},\"key\":\"2720\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"star of david\"}},\"key\":\"2721\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"four teardrop spoked asterisk\"}},\"key\":\"2722\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"four balloon spoked asterisk\"}},\"key\":\"2723\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy four balloon spoked asterisk\"}},\"key\":\"2724\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"four club spoked asterisk\"}},\"key\":\"2725\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black four pointed star\"}},\"key\":\"2726\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white four pointed star\"}},\"key\":\"2727\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"sparkles\"}},\"key\":\"2728\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"stress outlined white star\"}},\"key\":\"2729\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circled white star\"}},\"key\":\"272A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"open center black star\"}},\"key\":\"272B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black center white star\"}},\"key\":\"272C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"outlined black star\"}},\"key\":\"272D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy outlined black star\"}},\"key\":\"272E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"pinwheel star\"}},\"key\":\"272F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"shadowed white star\"}},\"key\":\"2730\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy asterisk\"}},\"key\":\"2731\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"open center asterisk\"}},\"key\":\"2732\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"eight spoked asterisk\"}},\"key\":\"2733\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"eight pointed black star\"}},\"key\":\"2734\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"eight pointed pinwheel star\"}},\"key\":\"2735\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"six pointed black star\"}},\"key\":\"2736\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"twelve pointed black star\"}},\"key\":\"2739\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"sixteen pointed asterisk\"}},\"key\":\"273A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"teardrop spoked asterisk\"}},\"key\":\"273B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"open center teardrop spoked asterisk\"}},\"key\":\"273C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy teardrop spoked asterisk\"}},\"key\":\"273D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"six petalled black and white florette\"}},\"key\":\"273E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black florette\"}},\"key\":\"273F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white florette\"}},\"key\":\"2740\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"eight petalled outlined black florette\"}},\"key\":\"2741\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circled open center eight pointed star\"}},\"key\":\"2742\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy teardrop spoked pinwheel asterisk\"}},\"key\":\"2743\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"snowflake\"}},\"key\":\"2744\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"tight trifoliate snowflake\"}},\"key\":\"2745\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy chevron snowflake\"}},\"key\":\"2746\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"sparkle\"}},\"key\":\"2747\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy sparkle\"}},\"key\":\"2748\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"balloon spoked asterisk\"}},\"key\":\"2749\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"eight teardrop spoked propeller asterisk\"}},\"key\":\"274A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy eight teardrop spoked propeller asterisk\"}},\"key\":\"274B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"cross mark\"}},\"key\":\"274C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"shadowed white circle\"}},\"key\":\"274D\"}]\n,\n\"en/units/area.js\": \n[{\"locale\":\"en\"},{\"category\":\"other\",\"mappings\":{\"default\":{\"default\":\"square\"}},\"key\":\"sq\",\"names\":[\"sq\",\"sq.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"square inch\"}},\"key\":\"sq inch\",\"names\":[\"sq inch\",\"sq. inch.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"square rod\"}},\"key\":\"sq rd\",\"names\":[\"sq rd\",\"sq. rd.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"square foot\",\"plural\":\"square feet\"}},\"key\":\"sq ft\",\"names\":[\"sq ft\",\"sq. ft.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"square yard\"}},\"key\":\"sq yd\",\"names\":[\"sq yd\",\"sq. yd.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"square mile\"}},\"key\":\"sq mi\",\"names\":[\"sq mi\",\"sq. mi.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"acre\"}},\"key\":\"acr\",\"names\":[\"ac\",\"ac.\",\"acr\",\"acr.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"hectare\"}},\"key\":\"ha\",\"names\":[\"ha\"]}]\n,\n\"en/units/currency.js\": \n[{\"locale\":\"en\"},{\"category\":\"currency\",\"key\":\"$\",\"mappings\":{\"default\":{\"default\":\"dollar\"}},\"names\":[\"$\",\"💲\",\"＄\",\"﹩\",\"USD\"]},{\"category\":\"currency\",\"key\":\"£\",\"mappings\":{\"default\":{\"default\":\"pound\"}},\"names\":[\"£\",\"￡\",\"GBP\"]},{\"category\":\"currency\",\"key\":\"¥\",\"mappings\":{\"default\":{\"default\":\"yen\"}},\"names\":[\"¥\",\"￥\",\"JPY\"]},{\"category\":\"currency\",\"key\":\"€\",\"mappings\":{\"default\":{\"default\":\"euro\"}},\"names\":[\"€\",\"EUR\"]},{\"category\":\"currency\",\"key\":\"₡\",\"mappings\":{\"default\":{\"default\":\"colon\"}},\"names\":[\"₡\",\"CRC\"]},{\"category\":\"currency\",\"key\":\"₢\",\"mappings\":{\"default\":{\"default\":\"cruzeiro\"}},\"names\":[\"₢\"]},{\"category\":\"currency\",\"key\":\"₣\",\"mappings\":{\"default\":{\"default\":\"franc\"}},\"names\":[\"₣\"]},{\"category\":\"currency\",\"key\":\"₤\",\"mappings\":{\"default\":{\"default\":\"lira\"}},\"names\":[\"₤\"]},{\"category\":\"currency\",\"key\":\"₥\",\"mappings\":{\"default\":{\"default\":\"mill\"}},\"names\":[\"₥\"]},{\"category\":\"currency\",\"key\":\"₦\",\"mappings\":{\"default\":{\"default\":\"naira\"}},\"names\":[\"₦\",\"NGN\"]},{\"category\":\"currency\",\"key\":\"₧\",\"mappings\":{\"default\":{\"default\":\"peseta\"}},\"names\":[\"₧\"]},{\"category\":\"currency\",\"key\":\"₨\",\"mappings\":{\"default\":{\"default\":\"rupee\"}},\"names\":[\"₨\",\"₹\",\"INR\",\"NPR\",\"PKR\",\"LKR\"]},{\"category\":\"currency\",\"key\":\"₩\",\"mappings\":{\"default\":{\"default\":\"won\"}},\"names\":[\"₩\",\"￦\",\"KRW\"]},{\"category\":\"currency\",\"key\":\"₪\",\"mappings\":{\"default\":{\"default\":\"sheqel\"}},\"names\":[\"₪\"]},{\"category\":\"currency\",\"key\":\"₫\",\"mappings\":{\"default\":{\"default\":\"dong\"}},\"names\":[\"₫\"]},{\"category\":\"currency\",\"key\":\"₭\",\"mappings\":{\"default\":{\"default\":\"kip\"}},\"names\":[\"₭\"]},{\"category\":\"currency\",\"key\":\"₮\",\"mappings\":{\"default\":{\"default\":\"tugrik\"}},\"names\":[\"₮\"]},{\"category\":\"currency\",\"key\":\"₯\",\"mappings\":{\"default\":{\"default\":\"drachma\"}},\"names\":[\"₯\"]},{\"category\":\"currency\",\"key\":\"₰\",\"mappings\":{\"default\":{\"default\":\"Pfennig\"}},\"names\":[\"₰\"]},{\"category\":\"currency\",\"key\":\"₱\",\"mappings\":{\"default\":{\"default\":\"peso\"}},\"names\":[\"₱\"]},{\"category\":\"currency\",\"key\":\"₲\",\"mappings\":{\"default\":{\"default\":\"guaranis\"}},\"names\":[\"₲\"]},{\"category\":\"currency\",\"key\":\"₳\",\"mappings\":{\"default\":{\"default\":\"austral\"}},\"names\":[\"₳\"]},{\"category\":\"currency\",\"key\":\"₴\",\"mappings\":{\"default\":{\"default\":\"hryvnia\"}},\"names\":[\"₴\",\"UAH\"]},{\"category\":\"currency\",\"key\":\"₵\",\"mappings\":{\"default\":{\"default\":\"cedis\"}},\"names\":[\"₵\",\"GHS\"]},{\"category\":\"currency\",\"key\":\"₶\",\"mappings\":{\"default\":{\"default\":\"livre tournois\"}},\"names\":[\"₶\"]},{\"category\":\"currency\",\"key\":\"₷\",\"mappings\":{\"default\":{\"default\":\"spesmilo\"}},\"names\":[\"₷\"]},{\"category\":\"currency\",\"key\":\"₸\",\"mappings\":{\"default\":{\"default\":\"tenge\"}},\"names\":[\"₸\",\"KZT\"]},{\"category\":\"currency\",\"key\":\"₺\",\"mappings\":{\"default\":{\"default\":\"turkish lira\"}},\"names\":[\"₺\",\"TRY\"]},{\"category\":\"currency\",\"key\":\"元\",\"mappings\":{\"default\":{\"default\":\"yuan\"}},\"names\":[\"元\"]},{\"category\":\"currency\",\"key\":\"¢\",\"mappings\":{\"default\":{\"default\":\"cent\"}},\"names\":[\"￠\",\"¢\"]}]\n,\n\"en/units/energy.js\": \n[{\"locale\":\"en\"},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"watt\"}},\"key\":\"W\",\"names\":[\"W\",\"w\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"kilowatt\"}},\"key\":\"kW\",\"names\":[\"kw\",\"kW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"milliwatt\"}},\"key\":\"mW\",\"names\":[\"mw\",\"mW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"kilowatt hour\"}},\"key\":\"kwh\",\"names\":[\"kwh\",\"kWh\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"joule\"}},\"key\":\"J\",\"names\":[\"J\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Newton\"}},\"key\":\"N\",\"names\":[\"N\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"ampere\"}},\"key\":\"A\",\"names\":[\"A\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"volt\"}},\"key\":\"V\",\"names\":[\"V\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"microohm\"}},\"key\":\"µΩ\",\"names\":[\"µΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"milliohm\"}},\"key\":\"mΩ\",\"names\":[\"mΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"ohm\"}},\"key\":\"Ω\",\"names\":[\"Ω\",\"Ohm\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"kilohm\"}},\"key\":\"kΩ\",\"names\":[\"kΩ\",\"KΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"megaohm\"}},\"key\":\"MΩ\",\"names\":[\"MΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"gigaohm\"}},\"key\":\"GΩ\",\"names\":[\"GΩ\"]}]\n,\n\"en/units/length.js\": \n[{\"locale\":\"en\"},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"foot\"}},\"key\":\"ft\",\"names\":[\"ft\",\"ft.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"inch\"}},\"key\":\"in\",\"names\":[\"in\",\"in.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"mile\"}},\"key\":\"mi\",\"names\":[\"mi\",\"mi.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"yard\"}},\"key\":\"yd\",\"names\":[\"yd\",\"yd.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"link\"}},\"key\":\"link\",\"names\":[\"li\",\"li.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"rod\"}},\"key\":\"rod\",\"names\":[\"rd\",\"rd.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"chain\"}},\"key\":\"chain\",\"names\":[\"ch\",\"ch.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"furlong\"}},\"key\":\"furlong\",\"names\":[\"fur\",\"fur.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"nautical mile\"}},\"key\":\"n.m.\",\"names\":[\"n.m.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"millimeter\"}},\"key\":\"mm\",\"names\":[\"mm\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"centimeter\"}},\"key\":\"cm\",\"names\":[\"cm\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"meter\"}},\"key\":\"m\",\"names\":[\"m\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"kilometer\"}},\"key\":\"km\",\"names\":[\"km\"]}]\n,\n\"en/units/memory.js\": \n[{\"locale\":\"en\"},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"bit\"}},\"key\":\"b\",\"names\":[\"b\"]},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"byte\"}},\"key\":\"B\",\"names\":[\"B\"]},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"kilobyte\"}},\"key\":\"KB\",\"names\":[\"KB\"]},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"megabyte\"}},\"key\":\"MB\",\"names\":[\"MB\"]},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"gigabyte\"}},\"key\":\"GB\",\"names\":[\"GB\"]},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"terabyte\"}},\"key\":\"TB\",\"names\":[\"TB\"]}]\n,\n\"en/units/other.js\": \n[{\"locale\":\"en\"},{\"category\":\"other\",\"mappings\":{\"default\":{\"default\":\"dozen\"}},\"key\":\"doz\",\"names\":[\"doz\",\"doz.\",\"dz\",\"dz.\"]}]\n,\n\"en/units/speed.js\": \n[{\"locale\":\"en\"},{\"category\":\"speed\",\"mappings\":{\"default\":{\"default\":\"knot\"}},\"key\":\"kt\",\"names\":[\"kt\",\"kt.\"]},{\"category\":\"speed\",\"mappings\":{\"default\":{\"default\":\"miles per hour\"}},\"key\":\"mph\",\"names\":[\"mph\"]},{\"category\":\"speed\",\"mappings\":{\"default\":{\"default\":\"revolutions per minute\"}},\"key\":\"rpm\",\"names\":[\"rpm\"]},{\"category\":\"speed\",\"mappings\":{\"default\":{\"default\":\"kilometers per hour\"}},\"key\":\"kmh\",\"names\":[\"kmh\"]}]\n,\n\"en/units/temperature.js\": \n[{\"locale\":\"en\"},{\"category\":\"temperature\",\"mappings\":{\"default\":{\"default\":\"Fahrenheit\"}},\"key\":\"F\",\"names\":[\"F\",\"F.\",\"°F\"]},{\"category\":\"temperature\",\"mappings\":{\"default\":{\"default\":\"Celsius\",\"alternative\":\"Centigrade\"}},\"key\":\"C\",\"names\":[\"C\",\"°C\"]},{\"category\":\"temperature\",\"mappings\":{\"default\":{\"default\":\"Kelvin\"}},\"key\":\"K\",\"names\":[\"K\",\"°K\"]}]\n,\n\"en/units/time.js\": \n[{\"locale\":\"en\"},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"nanosecond\"}},\"key\":\"ns\",\"names\":[\"ns\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"microsecond\"}},\"key\":\"µs\",\"names\":[\"µs\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"millisecond\"}},\"key\":\"ms\",\"names\":[\"ms\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"second\"}},\"key\":\"s\",\"names\":[\"s\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"minute\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"hour\"}},\"key\":\"h\",\"names\":[\"h\",\"hr\"]}]\n,\n\"en/units/volume.js\": \n[{\"locale\":\"en\"},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cubic\"}},\"key\":\"cu\",\"names\":[\"cu\",\"cu.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cubic inch\"}},\"key\":\"cu inch\",\"names\":[\"cu in\",\"cu. in.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cubic foot\",\"plural\":\"cubic feet\"}},\"key\":\"cu ft\",\"names\":[\"cu ft\",\"cu. ft.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cubic yard\"}},\"key\":\"cu yd\",\"names\":[\"cu yd\",\"cu. yd.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"barrel\"}},\"key\":\"bbl\",\"names\":[\"bbl.\",\"bbl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"fluid ounce\"}},\"key\":\"fl. oz.\",\"names\":[\"fl. oz.\",\"fl oz\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"gallon\"}},\"key\":\"gal\",\"names\":[\"gal\",\"gal.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"pint\"}},\"key\":\"pt\",\"names\":[\"pt\",\"pt.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"quart\"}},\"key\":\"qt\",\"names\":[\"qt\",\"qt.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"fluid dram\"}},\"key\":\"fluid dram\",\"names\":[\"fl dr\",\"fl. dr.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"tablespoon\"}},\"key\":\"tbsp\",\"names\":[\"tbsp\",\"tbsp.\",\"Tbsp\",\"Tbsp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"teaspoon\"}},\"key\":\"tsp\",\"names\":[\"tsp\",\"tsp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cup\"}},\"key\":\"cup\",\"names\":[\"cp\",\"cp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cubic centimeter\"}},\"key\":\"cc\",\"names\":[\"cc\",\"ccm\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"kiloliter\"}},\"key\":\"kl\",\"names\":[\"kl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"liter\"}},\"key\":\"l\",\"names\":[\"l\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"milliliter\"}},\"key\":\"ml\",\"names\":[\"ml\"]}]\n,\n\"en/units/weight.js\": \n[{\"locale\":\"en\"},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"dram\"}},\"key\":\"dram\",\"names\":[\"dr\",\"dr.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"ounce\"}},\"key\":\"oz\",\"names\":[\"oz\",\"oz.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"pound\"}},\"key\":\"lb\",\"names\":[\"lb\",\"lb.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"stone\"}},\"key\":\"st\",\"names\":[\"st\",\"st.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"quarter\"}},\"key\":\"qtr\",\"names\":[\"qtr\",\"qtr.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"hundredweight\"}},\"key\":\"cwt\",\"names\":[\"cwt\",\"cwt.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"long ton\"}},\"key\":\"LT\",\"names\":[\"LT\",\"L.T.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"gram\"}},\"key\":\"gr\",\"names\":[\"g\",\"gr\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"kilogram\"}},\"key\":\"kg\",\"names\":[\"kg\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"microgram\"}},\"key\":\"mcg\",\"names\":[\"mcg\",\"µg\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"milligram\"}},\"key\":\"mg\",\"names\":[\"mg\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"ton\"}},\"key\":\"t\",\"names\":[\"t\",\"T\"]}]\n}\n\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/sre/mathmaps/es.js",
    "content": "{\n\"es/functions/algebra.js\": \n[{\"locale\":\"es\"},{\"key\":\"deg\",\"names\":[\"deg\"],\"mappings\":{\"default\":{\"default\":\"grados\"}},\"category\":\"Algebra\"},{\"key\":\"det\",\"names\":[\"det\"],\"mappings\":{\"default\":{\"default\":\"determinante\"}},\"category\":\"Algebra\"},{\"key\":\"dim\",\"names\":[\"dim\"],\"mappings\":{\"default\":{\"default\":\"dimensión\"}},\"category\":\"Algebra\"},{\"key\":\"hom\",\"names\":[\"hom\",\"Hom\"],\"mappings\":{\"default\":{\"default\":\"homomorfismo\"}},\"category\":\"Algebra\"},{\"key\":\"ker\",\"names\":[\"ker\"],\"mappings\":{\"default\":{\"default\":\"kernel\"}},\"category\":\"Algebra\"},{\"key\":\"Tr\",\"names\":[\"Tr\",\"tr\"],\"mappings\":{\"default\":{\"default\":\"traza\"}},\"category\":\"Algebra\"}]\n,\n\"es/functions/elementary.js\": \n[{\"locale\":\"es\"},{\"key\":\"log\",\"names\":[\"log\"],\"mappings\":{\"default\":{\"default\":\"logaritmo\"}},\"category\":\"Logarithm\"},{\"key\":\"ln\",\"names\":[\"ln\"],\"mappings\":{\"default\":{\"default\":\"logaritmo neperiano\"}},\"category\":\"Logarithm\"},{\"key\":\"lg\",\"names\":[\"lg\"],\"mappings\":{\"default\":{\"default\":\"logaritmo base 10\"}},\"category\":\"Logarithm\"},{\"key\":\"exp\",\"names\":[\"exp\",\"expt\"],\"mappings\":{\"default\":{\"default\":\"exponente\"}},\"category\":\"Elementary\"},{\"key\":\"gcd\",\"names\":[\"gcd\",\"mcd\",\"MCD\"],\"mappings\":{\"default\":{\"default\":\"MCD\"}},\"category\":\"Elementary\"},{\"key\":\"lcm\",\"names\":[\"lcm\",\"mcm\",\"MCM\"],\"mappings\":{\"default\":{\"default\":\"mcm\"}},\"category\":\"Elementary\"},{\"key\":\"arg\",\"names\":[\"arg\"],\"mappings\":{\"default\":{\"default\":\"argumento\"}},\"category\":\"Complex\"},{\"key\":\"im\",\"names\":[\"im\"],\"mappings\":{\"default\":{\"default\":\"parte imaginaria\"}},\"category\":\"Complex\"},{\"key\":\"re\",\"names\":[\"re\"],\"mappings\":{\"default\":{\"default\":\"residuo\"}},\"category\":\"Complex\"},{\"key\":\"inf\",\"names\":[\"inf\"],\"mappings\":{\"default\":{\"default\":\"extremo inferior\"}},\"category\":\"Limits\"},{\"key\":\"lim\",\"names\":[\"lim\"],\"mappings\":{\"default\":{\"default\":\"límite\"}},\"category\":\"Limits\"},{\"key\":\"max\",\"names\":[\"max\"],\"mappings\":{\"default\":{\"default\":\"máximo\"}},\"category\":\"Limits\"},{\"key\":\"min\",\"names\":[\"min\"],\"mappings\":{\"default\":{\"default\":\"mínimo\"}},\"category\":\"Limits\"},{\"key\":\"sup\",\"names\":[\"sup\"],\"mappings\":{\"default\":{\"default\":\"superior\"}},\"category\":\"Limits\"},{\"key\":\"lim inf\",\"names\":[\"lim inf\",\"liminf\"],\"mappings\":{\"default\":{\"default\":\"límite inferior\"}},\"category\":\"Limits\"},{\"key\":\"lim sup\",\"names\":[\"lim sup\",\"limsup\"],\"mappings\":{\"default\":{\"default\":\"límite superior\"}},\"category\":\"Limits\"},{\"key\":\"injlim\",\"names\":[\"injlim\",\"inj lim\"],\"mappings\":{\"default\":{\"default\":\"límite directo\"}},\"category\":\"Limits\"},{\"key\":\"projlim\",\"names\":[\"projlim\",\"proj lim\"],\"mappings\":{\"default\":{\"default\":\"límite inverso\"}},\"category\":\"Limits\"},{\"key\":\"mod\",\"names\":[\"mod\"],\"mappings\":{\"default\":{\"default\":\"módulo\"}},\"category\":\"Elementary\"},{\"key\":\"Pr\",\"names\":[\"Pr\"],\"mappings\":{\"default\":{\"default\":\"probabilidad\"}},\"category\":\"Probability\"}]\n,\n\"es/functions/hyperbolic.js\": \n[{\"locale\":\"es\"},{\"key\":\"cosh\",\"names\":[\"cosh\"],\"mappings\":{\"default\":{\"default\":\"coseno hiperbólico\"}},\"category\":\"Hyperbolic\"},{\"key\":\"coth\",\"names\":[\"coth\"],\"mappings\":{\"default\":{\"default\":\"cotangente hiperbólica\"}},\"category\":\"Hyperbolic\"},{\"key\":\"csch\",\"names\":[\"csch\"],\"mappings\":{\"default\":{\"default\":\"cosecante hiperbólica\"}},\"category\":\"Hyperbolic\"},{\"key\":\"sech\",\"names\":[\"sech\"],\"mappings\":{\"default\":{\"default\":\"secante hiperbólica\"}},\"category\":\"Hyperbolic\"},{\"key\":\"sinh\",\"names\":[\"sinh\"],\"mappings\":{\"default\":{\"default\":\"seno hiperbólico\"}},\"category\":\"Hyperbolic\"},{\"key\":\"tanh\",\"names\":[\"tanh\"],\"mappings\":{\"default\":{\"default\":\"tangente hiperbólica\"}},\"category\":\"Hyperbolic\"},{\"key\":\"arcosh\",\"names\":[\"arcosh\",\"arccosh\"],\"mappings\":{\"default\":{\"default\":\"area coseno hiperbólico\"}},\"category\":\"Area\"},{\"key\":\"arcoth\",\"names\":[\"arcoth\",\"arccoth\"],\"mappings\":{\"default\":{\"default\":\"area cotangente hiperbólica\"}},\"category\":\"Area\"},{\"key\":\"arcsch\",\"names\":[\"arcsch\",\"arccsch\"],\"mappings\":{\"default\":{\"default\":\"area cosecante hiperbólica\"}},\"category\":\"Area\"},{\"key\":\"arsech\",\"names\":[\"arsech\",\"arcsech\"],\"mappings\":{\"default\":{\"default\":\"area secante hiperbólica\"}},\"category\":\"Area\"},{\"key\":\"arsinh\",\"names\":[\"arsinh\",\"arcsinh\"],\"mappings\":{\"default\":{\"default\":\"area seno hiperbólico\"}},\"category\":\"Area\"},{\"key\":\"artanh\",\"names\":[\"artanh\",\"arctanh\"],\"mappings\":{\"default\":{\"default\":\"area tangente hiperbólica\"}},\"category\":\"Area\"}]\n,\n\"es/functions/trigonometry.js\": \n[{\"locale\":\"es\"},{\"key\":\"cos\",\"names\":[\"cos\",\"cosine\"],\"mappings\":{\"default\":{\"default\":\"coseno\"}},\"category\":\"Trigonometric\"},{\"key\":\"cot\",\"names\":[\"cot\"],\"mappings\":{\"default\":{\"default\":\"cotangente\"}},\"category\":\"Trigonometric\"},{\"key\":\"csc\",\"names\":[\"csc\"],\"mappings\":{\"default\":{\"default\":\"cosecante\"}},\"category\":\"Trigonometric\"},{\"key\":\"sec\",\"names\":[\"sec\"],\"mappings\":{\"default\":{\"default\":\"secant\"}},\"category\":\"Trigonometric\"},{\"key\":\"sin\",\"names\":[\"sin\",\"sine\",\"sen\"],\"mappings\":{\"default\":{\"default\":\"seno\"}},\"category\":\"Trigonometric\"},{\"key\":\"tan\",\"names\":[\"tan\"],\"mappings\":{\"default\":{\"default\":\"tangente\"}},\"category\":\"Trigonometric\"},{\"key\":\"arccos\",\"names\":[\"arccos\"],\"mappings\":{\"default\":{\"default\":\"arco coseno\"}},\"category\":\"Cyclometric\"},{\"key\":\"arccot\",\"names\":[\"arccot\"],\"mappings\":{\"default\":{\"default\":\"arco cotangente\"}},\"category\":\"Cyclometric\"},{\"key\":\"arccsc\",\"names\":[\"arccsc\"],\"mappings\":{\"default\":{\"default\":\"arco cosecante\"}},\"category\":\"Cyclometric\"},{\"key\":\"arcsec\",\"names\":[\"arcsec\"],\"mappings\":{\"default\":{\"default\":\"arco secante\"}},\"category\":\"Cyclometric\"},{\"key\":\"arcsin\",\"names\":[\"arcsin\"],\"mappings\":{\"default\":{\"default\":\"arco seno\"}},\"category\":\"Cyclometric\"},{\"key\":\"arctan\",\"names\":[\"arctan\"],\"mappings\":{\"default\":{\"default\":\"arco tangente\"}},\"category\":\"Cyclometric\"}]\n,\n\"es/symbols/digits_rest.js\": \n[{\"locale\":\"es\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"al cuadrado\"},\"mathspeak\":{\"default\":\"al cuadrado\"},\"clearspeak\":{\"default\":\"al cuadrado\"}},\"key\":\"00B2\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"al cubo\"},\"mathspeak\":{\"default\":\"al cubo\"},\"clearspeak\":{\"default\":\"al cubo\"}},\"key\":\"00B3\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"un cuarto\"}},\"key\":\"00BC\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"un medio\"}},\"key\":\"00BD\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"tres cuartos\"}},\"key\":\"00BE\"},{\"category\":\"No\",\"key\":\"2150\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Séptimo\"}}},{\"category\":\"No\",\"key\":\"2151\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Noveno\"}}},{\"category\":\"No\",\"key\":\"2152\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Décimo\"}}},{\"category\":\"No\",\"key\":\"2153\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Tercero\"}}},{\"category\":\"No\",\"key\":\"2154\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar dos tercios\"}}},{\"category\":\"No\",\"key\":\"2155\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fraction One Fifth\"}}},{\"category\":\"No\",\"key\":\"2156\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar dos quintos\"}}},{\"category\":\"No\",\"key\":\"2157\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar tres quintos\"}}},{\"category\":\"No\",\"key\":\"2158\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar cuatro quintos\"}}},{\"category\":\"No\",\"key\":\"2159\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Sexto\"}}},{\"category\":\"No\",\"key\":\"215A\",\"mappings\":{\"default\":{\"default\":\"Vulgar fracción cinco sextos\"}}},{\"category\":\"No\",\"key\":\"215B\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Octavo\"}}},{\"category\":\"No\",\"key\":\"215C\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar tres octavos\"}}},{\"category\":\"No\",\"key\":\"215D\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar cinco octavos\"}}},{\"category\":\"No\",\"key\":\"215E\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar siete octavos\"}}},{\"category\":\"No\",\"key\":\"215F\",\"mappings\":{\"default\":{\"default\":\"Numerador de fracciones uno\"}}},{\"category\":\"No\",\"key\":\"2189\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fraction Zero Thirds\"}}},{\"category\":\"No\",\"key\":\"3248\",\"mappings\":{\"default\":{\"default\":\"Número diez en un círculo en la Plaza Negra\"}}},{\"category\":\"No\",\"key\":\"3249\",\"mappings\":{\"default\":{\"default\":\"Número veinte en un círculo en la Plaza Negra\"}}},{\"category\":\"No\",\"key\":\"324A\",\"mappings\":{\"default\":{\"default\":\"Número circundado treinta en cuadrado negro\"}}},{\"category\":\"No\",\"key\":\"324B\",\"mappings\":{\"default\":{\"default\":\"Número circundado Cuarenta en cuadrado negro\"}}},{\"category\":\"No\",\"key\":\"324C\",\"mappings\":{\"default\":{\"default\":\"Círculo número cincuenta en la plaza negra\"}}},{\"category\":\"No\",\"key\":\"324D\",\"mappings\":{\"default\":{\"default\":\"Círculo número sesenta en la plaza negra\"}}},{\"category\":\"No\",\"key\":\"324E\",\"mappings\":{\"default\":{\"default\":\"Número setenta en un círculo en la Plaza Negra\"}}},{\"category\":\"No\",\"key\":\"324F\",\"mappings\":{\"default\":{\"default\":\"Círculo número ochenta en cuadrado negro\"}}}]\n,\n\"es/symbols/greek-rest.js\": \n[{\"locale\":\"es\"},{\"category\":\"Lu\",\"key\":\"0394\",\"mappings\":{\"clearspeak\":{\"default\":\"triangle\",\"TriangleSymbol_Delta\":\"cap Delta\"}}}]\n,\n\"es/symbols/greek-scripts.js\": \n[{\"locale\":\"es\"},{\"category\":\"Ll\",\"key\":\"1D26\",\"mappings\":{\"default\":{\"default\":\"pequeño mayúscula gamma\"}}},{\"category\":\"Ll\",\"key\":\"1D27\",\"mappings\":{\"default\":{\"default\":\"pequeña mayúscula lamda\"}}},{\"category\":\"Ll\",\"key\":\"1D28\",\"mappings\":{\"default\":{\"default\":\"pequeña mayúscula Pi\"}}},{\"category\":\"Ll\",\"key\":\"1D29\",\"mappings\":{\"default\":{\"default\":\"pequeña mayúscula Rho\"}}},{\"category\":\"Ll\",\"key\":\"1D2A\",\"mappings\":{\"default\":{\"default\":\"pequeña mayúscula Psi\"}}},{\"category\":\"Lm\",\"key\":\"1D5E\",\"mappings\":{\"default\":{\"default\":\"modificador de pequeño gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D60\",\"mappings\":{\"default\":{\"default\":\"modificador de pequeño phi\"}}},{\"category\":\"Lm\",\"key\":\"1D66\",\"mappings\":{\"default\":{\"default\":\"subscripción pequeña beta\"}}},{\"category\":\"Lm\",\"key\":\"1D67\",\"mappings\":{\"default\":{\"default\":\"subíndice pequeña gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D68\",\"mappings\":{\"default\":{\"default\":\"subíndice rho\"}}},{\"category\":\"Lm\",\"key\":\"1D69\",\"mappings\":{\"default\":{\"default\":\"subíndice phi\"}}},{\"category\":\"Lm\",\"key\":\"1D6A\",\"mappings\":{\"default\":{\"default\":\"subscripción chi\"}}}]\n,\n\"es/symbols/greek-symbols.js\": \n[{\"locale\":\"es\"},{\"key\":\"03D0\",\"mappings\":{\"default\":{\"default\":\"símbolo beta\"}},\"category\":\"Ll\"},{\"key\":\"03D7\",\"mappings\":{\"default\":{\"default\":\"símbolo kai griego\"}},\"category\":\"Ll\"},{\"key\":\"03F6\",\"mappings\":{\"default\":{\"default\":\"épsilon invertido\"}},\"category\":\"Sm\"},{\"category\":\"Lu\",\"key\":\"1D7CA\",\"mappings\":{\"default\":{\"default\":\"Matemática Bold Capital Digamma\"}}},{\"category\":\"Ll\",\"key\":\"1D7CB\",\"mappings\":{\"default\":{\"default\":\"Matemática negrita pequeño digamma\"}}}]\n,\n\"es/symbols/hebrew_letters.js\": \n[{\"locale\":\"es\"},{\"key\":\"2135\",\"mappings\":{\"default\":{\"default\":\"alef\"}},\"category\":\"Lo\"},{\"key\":\"2136\",\"mappings\":{\"default\":{\"default\":\"bet\"}},\"category\":\"Lo\"},{\"key\":\"2137\",\"mappings\":{\"default\":{\"default\":\"guímel\"}},\"category\":\"Lo\"},{\"key\":\"2138\",\"mappings\":{\"default\":{\"default\":\"dálet\"}},\"category\":\"Lo\"}]\n,\n\"es/symbols/latin-lower-double-accent.js\": \n[{\"locale\":\"es\"},{\"category\":\"Ll\",\"key\":\"01D6\",\"mappings\":{\"default\":{\"default\":\"u con diéresis y macron\"}}},{\"category\":\"Ll\",\"key\":\"01D8\",\"mappings\":{\"default\":{\"default\":\"u con diéresis y acento agudo\"}}},{\"category\":\"Ll\",\"key\":\"01DA\",\"mappings\":{\"default\":{\"default\":\"u con diéresis y acento\"}}},{\"category\":\"Ll\",\"key\":\"01DC\",\"mappings\":{\"default\":{\"default\":\"u con diéresis y grave\"}}},{\"category\":\"Ll\",\"key\":\"01DF\",\"mappings\":{\"default\":{\"default\":\"a con diéresis y macron\"}}},{\"category\":\"Ll\",\"key\":\"01E1\",\"mappings\":{\"default\":{\"default\":\"a con punto arriba y macron\"}}},{\"category\":\"Ll\",\"key\":\"01ED\",\"mappings\":{\"default\":{\"default\":\"o con pecíolo y macron\"}}},{\"category\":\"Ll\",\"key\":\"01FB\",\"mappings\":{\"default\":{\"default\":\"a con ring above y acento agudo\"}}},{\"category\":\"Ll\",\"key\":\"022B\",\"mappings\":{\"default\":{\"default\":\"o con diéresis y macron\"}}},{\"category\":\"Ll\",\"key\":\"022D\",\"mappings\":{\"default\":{\"default\":\"o con tilde y macron\"}}},{\"category\":\"Ll\",\"key\":\"0231\",\"mappings\":{\"default\":{\"default\":\"o con Dot Above y Macron\"}}},{\"key\":\"1E09\",\"mappings\":{\"default\":{\"default\":\"c con cedilla y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E15\",\"mappings\":{\"default\":{\"default\":\"e con macrón y grave\"}},\"category\":\"Ll\"},{\"key\":\"1E17\",\"mappings\":{\"default\":{\"default\":\"e con macrón y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E1D\",\"mappings\":{\"default\":{\"default\":\"e con cedilla y breve\"}},\"category\":\"Ll\"},{\"key\":\"1E2F\",\"mappings\":{\"default\":{\"default\":\"i con diéresis y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E39\",\"mappings\":{\"default\":{\"default\":\"l con punto debajo y macrón\"}},\"category\":\"Ll\"},{\"key\":\"1E4D\",\"mappings\":{\"default\":{\"default\":\"o con tilde y acute\"}},\"category\":\"Ll\"},{\"key\":\"1E4F\",\"mappings\":{\"default\":{\"default\":\"o con tilde y diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1E51\",\"mappings\":{\"default\":{\"default\":\"o con macrón y grave\"}},\"category\":\"Ll\"},{\"key\":\"1E53\",\"mappings\":{\"default\":{\"default\":\"o con macrón y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E5D\",\"mappings\":{\"default\":{\"default\":\"r con punto debajo y macrón\"}},\"category\":\"Ll\"},{\"key\":\"1E65\",\"mappings\":{\"default\":{\"default\":\"s con agudo y punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E67\",\"mappings\":{\"default\":{\"default\":\"s con carón y punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E69\",\"mappings\":{\"default\":{\"default\":\"s con punto debajo y punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E79\",\"mappings\":{\"default\":{\"default\":\"u con tilde y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E7B\",\"mappings\":{\"default\":{\"default\":\"u con macrón y diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1EA5\",\"mappings\":{\"default\":{\"default\":\"a con acento circunflejo y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1EA7\",\"mappings\":{\"default\":{\"default\":\"a con acento circunflejo y grave\"}},\"category\":\"Ll\"},{\"key\":\"1EA9\",\"mappings\":{\"default\":{\"default\":\"a con acento circunflejo y gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EAB\",\"mappings\":{\"default\":{\"default\":\"a con acento circunflejo y tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EAD\",\"mappings\":{\"default\":{\"default\":\"a con acento circunflejo y punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EAF\",\"mappings\":{\"default\":{\"default\":\"a con breve y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1EB1\",\"mappings\":{\"default\":{\"default\":\"a con breve y grave\"}},\"category\":\"Ll\"},{\"key\":\"1EB3\",\"mappings\":{\"default\":{\"default\":\"a con breve y gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EB5\",\"mappings\":{\"default\":{\"default\":\"a con breve y tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EB7\",\"mappings\":{\"default\":{\"default\":\"a con breve y punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EBF\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1EC1\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo y grave\"}},\"category\":\"Ll\"},{\"key\":\"1EC3\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo y gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EC5\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo y tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EC7\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo y punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1ED1\",\"mappings\":{\"default\":{\"default\":\"o con acento circunflejo y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1ED3\",\"mappings\":{\"default\":{\"default\":\"o con acento circunflejo y grave\"}},\"category\":\"Ll\"},{\"key\":\"1ED5\",\"mappings\":{\"default\":{\"default\":\"o con acento circunflejo y gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1ED7\",\"mappings\":{\"default\":{\"default\":\"o con acento circunflejo y tilde\"}},\"category\":\"Ll\"},{\"key\":\"1ED9\",\"mappings\":{\"default\":{\"default\":\"o con acento circunflejo y punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EDB\",\"mappings\":{\"default\":{\"default\":\"o with horn and acute\"}},\"category\":\"Ll\"},{\"key\":\"1EDD\",\"mappings\":{\"default\":{\"default\":\"o with horn and grave\"}},\"category\":\"Ll\"},{\"key\":\"1EDF\",\"mappings\":{\"default\":{\"default\":\"o with horn and hook above\"}},\"category\":\"Ll\"},{\"key\":\"1EE1\",\"mappings\":{\"default\":{\"default\":\"o with horn and tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EE3\",\"mappings\":{\"default\":{\"default\":\"o con cuerno y punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EE9\",\"mappings\":{\"default\":{\"default\":\"u con cuerno y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1EEB\",\"mappings\":{\"default\":{\"default\":\"u con cuerno y grave\"}},\"category\":\"Ll\"},{\"key\":\"1EED\",\"mappings\":{\"default\":{\"default\":\"u con cuerno y gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EEF\",\"mappings\":{\"default\":{\"default\":\"u con cuerno y tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EF1\",\"mappings\":{\"default\":{\"default\":\"u con cuerno y punto debajo\"}},\"category\":\"Ll\"}]\n,\n\"es/symbols/latin-lower-phonetic.js\": \n[{\"locale\":\"es\"},{\"key\":\"00F8\",\"mappings\":{\"default\":{\"default\":\"o barrada\"}},\"category\":\"Ll\"},{\"key\":\"0111\",\"mappings\":{\"default\":{\"default\":\"d con barra\"}},\"category\":\"Ll\"},{\"key\":\"0127\",\"mappings\":{\"default\":{\"default\":\"h con guión\"}},\"category\":\"Ll\"},{\"key\":\"0142\",\"mappings\":{\"default\":{\"default\":\"l con guión\"}},\"category\":\"Ll\"},{\"key\":\"0167\",\"mappings\":{\"default\":{\"default\":\"t con guión\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0180\",\"mappings\":{\"default\":{\"default\":\"b con línea\"}}},{\"key\":\"019B\",\"mappings\":{\"default\":{\"default\":\"lambda tachada\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01B6\",\"mappings\":{\"default\":{\"default\":\"z con línea\"}}},{\"category\":\"Ll\",\"key\":\"01BE\",\"mappings\":{\"default\":{\"default\":\"parada glotal invertida con línea\"}}},{\"category\":\"Ll\",\"key\":\"01E5\",\"mappings\":{\"default\":{\"default\":\"g con línea\"}}},{\"category\":\"Ll\",\"key\":\"01FF\",\"mappings\":{\"default\":{\"default\":\"o con línea y acento agudo\"}}},{\"category\":\"Ll\",\"key\":\"023C\",\"mappings\":{\"default\":{\"default\":\"c con trazo\"}}},{\"category\":\"Ll\",\"key\":\"0247\",\"mappings\":{\"default\":{\"default\":\"pequeña e con trazo\"}}},{\"category\":\"Ll\",\"key\":\"0249\",\"mappings\":{\"default\":{\"default\":\"j con trazo\"}}},{\"category\":\"Ll\",\"key\":\"024D\",\"mappings\":{\"default\":{\"default\":\"con trazo\"}}},{\"category\":\"Ll\",\"key\":\"024F\",\"mappings\":{\"default\":{\"default\":\"y con trazo\"}}},{\"category\":\"Ll\",\"key\":\"025F\",\"mappings\":{\"default\":{\"default\":\"pequeña sin puntos j con trazo\"}}},{\"category\":\"Ll\",\"key\":\"0268\",\"mappings\":{\"default\":{\"default\":\"i con trazo\"}}},{\"category\":\"Ll\",\"key\":\"0284\",\"mappings\":{\"default\":{\"default\":\"pequeña sin puntos j con trazo y gancho\"}}},{\"category\":\"Ll\",\"key\":\"02A1\",\"mappings\":{\"default\":{\"default\":\"parada glotal con trazo\"}}},{\"category\":\"Ll\",\"key\":\"02A2\",\"mappings\":{\"default\":{\"default\":\"parada invertida glotal con trazo\"}}},{\"category\":\"Ll\",\"key\":\"1D13\",\"mappings\":{\"default\":{\"default\":\"de lado O con trazo\"}}},{\"category\":\"Ll\",\"key\":\"1D7C\",\"mappings\":{\"default\":{\"default\":\"iota con trazo\"}}},{\"category\":\"Ll\",\"key\":\"1D7D\",\"mappings\":{\"default\":{\"default\":\"p con trazo\"}}},{\"category\":\"Ll\",\"key\":\"1D7F\",\"mappings\":{\"default\":{\"default\":\"upsilon con trazo\"}}},{\"category\":\"Ll\",\"key\":\"1E9C\",\"mappings\":{\"default\":{\"default\":\"larga s con trazo diagonal\"}}},{\"category\":\"Ll\",\"key\":\"1E9D\",\"mappings\":{\"default\":{\"default\":\"pequeña s larga con trazo alto\"}}},{\"category\":\"Ll\",\"key\":\"018D\",\"mappings\":{\"default\":{\"default\":\"delta convertido\"}}},{\"key\":\"1E9B\",\"mappings\":{\"default\":{\"default\":\"s larga con punto arriba\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"1E9F\",\"mappings\":{\"default\":{\"default\":\"delta pequeña latina\"}}},{\"key\":\"0138\",\"mappings\":{\"default\":{\"default\":\"kra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"017F\",\"mappings\":{\"default\":{\"default\":\"s larga\"}}},{\"category\":\"Ll\",\"key\":\"0183\",\"mappings\":{\"default\":{\"default\":\"b con barra encima\"}}},{\"category\":\"Ll\",\"key\":\"0185\",\"mappings\":{\"default\":{\"default\":\"tono seis\"}}},{\"category\":\"Ll\",\"key\":\"0188\",\"mappings\":{\"default\":{\"default\":\"c con gancho\"}}},{\"category\":\"Ll\",\"key\":\"018C\",\"mappings\":{\"default\":{\"default\":\"d con barra encima\"}}},{\"key\":\"0192\",\"mappings\":{\"default\":{\"default\":\"f con gancho\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0195\",\"mappings\":{\"default\":{\"default\":\"hv\"}}},{\"category\":\"Ll\",\"key\":\"0199\",\"mappings\":{\"default\":{\"default\":\"k con gancho\"}}},{\"key\":\"019A\",\"mappings\":{\"default\":{\"default\":\"l con barra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"019E\",\"mappings\":{\"default\":{\"default\":\"n con pierna derecha larga\"}}},{\"category\":\"Ll\",\"key\":\"01A1\",\"mappings\":{\"default\":{\"default\":\"o con cuerno\"}}},{\"category\":\"Ll\",\"key\":\"01A3\",\"mappings\":{\"default\":{\"default\":\"oi\"}}},{\"category\":\"Ll\",\"key\":\"01A5\",\"mappings\":{\"default\":{\"default\":\"p con gancho\"}}},{\"category\":\"Ll\",\"key\":\"01A8\",\"mappings\":{\"default\":{\"default\":\"dos tonos\"}}},{\"category\":\"Ll\",\"key\":\"01AA\",\"mappings\":{\"default\":{\"default\":\"latin letter invertido Esh bucle\"}}},{\"category\":\"Ll\",\"key\":\"01AB\",\"mappings\":{\"default\":{\"default\":\"t con palatal gancho\"}}},{\"category\":\"Ll\",\"key\":\"01AD\",\"mappings\":{\"default\":{\"default\":\"t con gancho\"}}},{\"category\":\"Ll\",\"key\":\"01B0\",\"mappings\":{\"default\":{\"default\":\"u con horn\"}}},{\"category\":\"Ll\",\"key\":\"01B4\",\"mappings\":{\"default\":{\"default\":\"y con gancho\"}}},{\"category\":\"Ll\",\"key\":\"01B9\",\"mappings\":{\"default\":{\"default\":\"ezh invertido\"}}},{\"category\":\"Ll\",\"key\":\"01BA\",\"mappings\":{\"default\":{\"default\":\"ezh con cola\"}}},{\"category\":\"Ll\",\"key\":\"01BD\",\"mappings\":{\"default\":{\"default\":\"tono cinco\"}}},{\"category\":\"Ll\",\"key\":\"01BF\",\"mappings\":{\"default\":{\"default\":\"wynn\"}}},{\"category\":\"Ll\",\"key\":\"01C6\",\"mappings\":{\"default\":{\"default\":\"dz con acento\"}}},{\"category\":\"Ll\",\"key\":\"01C9\",\"mappings\":{\"default\":{\"default\":\"lj\"}}},{\"category\":\"Ll\",\"key\":\"01CC\",\"mappings\":{\"default\":{\"default\":\"nj\"}}},{\"category\":\"Ll\",\"key\":\"01E3\",\"mappings\":{\"default\":{\"default\":\"ae con macron\"}}},{\"category\":\"Ll\",\"key\":\"01EF\",\"mappings\":{\"default\":{\"default\":\"ezh con acento\"}}},{\"category\":\"Ll\",\"key\":\"01F3\",\"mappings\":{\"default\":{\"default\":\"dz\"}}},{\"category\":\"Ll\",\"key\":\"021D\",\"mappings\":{\"default\":{\"default\":\"latín letra pequeña yogh\"}}},{\"category\":\"Ll\",\"key\":\"026E\",\"mappings\":{\"default\":{\"default\":\"lezh letra pequeña latina\"}}},{\"category\":\"Ll\",\"key\":\"0292\",\"mappings\":{\"default\":{\"default\":\"ezh\"}}},{\"category\":\"Ll\",\"key\":\"0293\",\"mappings\":{\"default\":{\"default\":\"pequeña Ezh con Curl\"}}},{\"category\":\"Ll\",\"key\":\"02A4\",\"mappings\":{\"default\":{\"default\":\"latín letra pequeña Dezh Digraph\"}}},{\"category\":\"Ll\",\"key\":\"01DD\",\"mappings\":{\"default\":{\"default\":\"e convertido\"}}},{\"category\":\"Ll\",\"key\":\"01FD\",\"mappings\":{\"default\":{\"default\":\"ae con acento agudo\"}}},{\"category\":\"Ll\",\"key\":\"0221\",\"mappings\":{\"default\":{\"default\":\"d con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0223\",\"mappings\":{\"default\":{\"default\":\"ou\"}}},{\"category\":\"Ll\",\"key\":\"0225\",\"mappings\":{\"default\":{\"default\":\"z con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0234\",\"mappings\":{\"default\":{\"default\":\"l con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0235\",\"mappings\":{\"default\":{\"default\":\"n con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0236\",\"mappings\":{\"default\":{\"default\":\"t con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0238\",\"mappings\":{\"default\":{\"default\":\"letra pequeña latina db digraph\"}}},{\"category\":\"Ll\",\"key\":\"0239\",\"mappings\":{\"default\":{\"default\":\"latín letra pequeña Qp Digraph\"}}},{\"category\":\"Ll\",\"key\":\"023F\",\"mappings\":{\"default\":{\"default\":\"s con cola cruzada\"}}},{\"category\":\"Ll\",\"key\":\"0240\",\"mappings\":{\"default\":{\"default\":\"z con cola swash\"}}},{\"category\":\"Ll\",\"key\":\"0242\",\"mappings\":{\"default\":{\"default\":\"latín letra pequeña parada glotal\"}}},{\"category\":\"Ll\",\"key\":\"024B\",\"mappings\":{\"default\":{\"default\":\"q con cola de gancho\"}}},{\"category\":\"Ll\",\"key\":\"0250\",\"mappings\":{\"default\":{\"default\":\"convertida en una\"}}},{\"category\":\"Ll\",\"key\":\"0251\",\"mappings\":{\"default\":{\"default\":\"alfa minúscula latina\"}}},{\"category\":\"Ll\",\"key\":\"0252\",\"mappings\":{\"default\":{\"default\":\"convertida en alfa\"}}},{\"category\":\"Ll\",\"key\":\"0253\",\"mappings\":{\"default\":{\"default\":\"b con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0254\",\"mappings\":{\"default\":{\"default\":\"abierta o\"}}},{\"category\":\"Ll\",\"key\":\"0255\",\"mappings\":{\"default\":{\"default\":\"c con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0256\",\"mappings\":{\"default\":{\"default\":\"d con cola\"}}},{\"category\":\"Ll\",\"key\":\"0257\",\"mappings\":{\"default\":{\"default\":\"d con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0258\",\"mappings\":{\"default\":{\"default\":\"invertida E\"}}},{\"category\":\"Ll\",\"key\":\"0259\",\"mappings\":{\"default\":{\"default\":\"schwa\"}}},{\"category\":\"Ll\",\"key\":\"025A\",\"mappings\":{\"default\":{\"default\":\"pequeña Schwa con gancho\"}}},{\"key\":\"025B\",\"mappings\":{\"default\":{\"default\":\"e abierta\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"025C\",\"mappings\":{\"default\":{\"default\":\"invertida abierta E\"}}},{\"category\":\"Ll\",\"key\":\"025D\",\"mappings\":{\"default\":{\"default\":\"letra pequeña latina invertida E abierta con gancho\"}}},{\"category\":\"Ll\",\"key\":\"025E\",\"mappings\":{\"default\":{\"default\":\"cerrada invertida abierta E\"}}},{\"category\":\"Ll\",\"key\":\"0260\",\"mappings\":{\"default\":{\"default\":\"g con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0261\",\"mappings\":{\"default\":{\"default\":\"escritura latina de letras pequeñas G\"}}},{\"category\":\"Ll\",\"key\":\"0263\",\"mappings\":{\"default\":{\"default\":\"latín letra pequeña gamma\"}}},{\"category\":\"Ll\",\"key\":\"0264\",\"mappings\":{\"default\":{\"default\":\"cuerno de carnero de letra pequeña latina\"}}},{\"category\":\"Ll\",\"key\":\"0265\",\"mappings\":{\"default\":{\"default\":\"girada h\"}}},{\"category\":\"Ll\",\"key\":\"0266\",\"mappings\":{\"default\":{\"default\":\"h con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0267\",\"mappings\":{\"default\":{\"default\":\"pequeña letra latina Heng con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0269\",\"mappings\":{\"default\":{\"default\":\"latín letra minúscula Iota\"}}},{\"category\":\"Ll\",\"key\":\"026B\",\"mappings\":{\"default\":{\"default\":\"l con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"026C\",\"mappings\":{\"default\":{\"default\":\"l con cinturón\"}}},{\"category\":\"Ll\",\"key\":\"026D\",\"mappings\":{\"default\":{\"default\":\"letra L latina pequeña con gancho Retroflex\"}}},{\"category\":\"Ll\",\"key\":\"026F\",\"mappings\":{\"default\":{\"default\":\"girada m\"}}},{\"category\":\"Ll\",\"key\":\"0270\",\"mappings\":{\"default\":{\"default\":\"vuelta M con pierna larga\"}}},{\"category\":\"Ll\",\"key\":\"0271\",\"mappings\":{\"default\":{\"default\":\"m con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0272\",\"mappings\":{\"default\":{\"default\":\"n con gancho izquierdo\"}}},{\"category\":\"Ll\",\"key\":\"0273\",\"mappings\":{\"default\":{\"default\":\"n con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"0275\",\"mappings\":{\"default\":{\"default\":\"letra minúscula omega\"}}},{\"category\":\"Ll\",\"key\":\"0277\",\"mappings\":{\"default\":{\"default\":\"latin Small Letter Closed Omega\"}}},{\"category\":\"Ll\",\"key\":\"0278\",\"mappings\":{\"default\":{\"default\":\"Letra pequeña latina\"}}},{\"category\":\"Ll\",\"key\":\"0279\",\"mappings\":{\"default\":{\"default\":\"vuelta r\"}}},{\"category\":\"Ll\",\"key\":\"027A\",\"mappings\":{\"default\":{\"default\":\"vuelta R con pierna larga\"}}},{\"category\":\"Ll\",\"key\":\"027B\",\"mappings\":{\"default\":{\"default\":\"vuelta R con gancho\"}}},{\"category\":\"Ll\",\"key\":\"027C\",\"mappings\":{\"default\":{\"default\":\"R con pierna larga\"}}},{\"category\":\"Ll\",\"key\":\"027D\",\"mappings\":{\"default\":{\"default\":\"R con cola\"}}},{\"category\":\"Ll\",\"key\":\"027E\",\"mappings\":{\"default\":{\"default\":\"R con anzuelo\"}}},{\"category\":\"Ll\",\"key\":\"027F\",\"mappings\":{\"default\":{\"default\":\"invertida R con anzuelo\"}}},{\"category\":\"Ll\",\"key\":\"0282\",\"mappings\":{\"default\":{\"default\":\"S con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0283\",\"mappings\":{\"default\":{\"default\":\"Pequeña letra latina esh\"}}},{\"category\":\"Ll\",\"key\":\"0285\",\"mappings\":{\"default\":{\"default\":\"Latín letra pequeña en cuclillas invertida Esh\"}}},{\"category\":\"Ll\",\"key\":\"0286\",\"mappings\":{\"default\":{\"default\":\"Esh minúscula latina con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0287\",\"mappings\":{\"default\":{\"default\":\"vuelta t\"}}},{\"category\":\"Ll\",\"key\":\"0288\",\"mappings\":{\"default\":{\"default\":\"T con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"0289\",\"mappings\":{\"default\":{\"default\":\"Letra de letra pequeña latina U\"}}},{\"category\":\"Ll\",\"key\":\"028A\",\"mappings\":{\"default\":{\"default\":\"Upsilon\"}}},{\"category\":\"Ll\",\"key\":\"028B\",\"mappings\":{\"default\":{\"default\":\"V con gancho\"}}},{\"category\":\"Ll\",\"key\":\"028C\",\"mappings\":{\"default\":{\"default\":\"convertida V\"}}},{\"category\":\"Ll\",\"key\":\"028D\",\"mappings\":{\"default\":{\"default\":\"girada w\"}}},{\"category\":\"Ll\",\"key\":\"028E\",\"mappings\":{\"default\":{\"default\":\"vuelta y\"}}},{\"category\":\"Ll\",\"key\":\"0290\",\"mappings\":{\"default\":{\"default\":\"Z con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"0291\",\"mappings\":{\"default\":{\"default\":\"z con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0295\",\"mappings\":{\"default\":{\"default\":\"faríngea con voz fricativa\"}}},{\"category\":\"Ll\",\"key\":\"0296\",\"mappings\":{\"default\":{\"default\":\"invertida parada glotal\"}}},{\"category\":\"Ll\",\"key\":\"0297\",\"mappings\":{\"default\":{\"default\":\"estirada c\"}}},{\"category\":\"Ll\",\"key\":\"0298\",\"mappings\":{\"default\":{\"default\":\"Carta Bilabial Click\"}}},{\"category\":\"Ll\",\"key\":\"029A\",\"mappings\":{\"default\":{\"default\":\"cerrada abierta e\"}}},{\"category\":\"Ll\",\"key\":\"029E\",\"mappings\":{\"default\":{\"default\":\"vuelta k\"}}},{\"category\":\"Ll\",\"key\":\"02A0\",\"mappings\":{\"default\":{\"default\":\"q con gancho\"}}},{\"category\":\"Ll\",\"key\":\"02A3\",\"mappings\":{\"default\":{\"default\":\"pequeña letra Dz Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A5\",\"mappings\":{\"default\":{\"default\":\"Letra pequeña latina Dz Digraph con Curl\"}}},{\"category\":\"Ll\",\"key\":\"02A6\",\"mappings\":{\"default\":{\"default\":\"Latín letra pequeña Ts Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A7\",\"mappings\":{\"default\":{\"default\":\"Letra pequeña latina Tesh Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A8\",\"mappings\":{\"default\":{\"default\":\"Latín letra pequeña Tc Digraph con Curl\"}}},{\"category\":\"Ll\",\"key\":\"02A9\",\"mappings\":{\"default\":{\"default\":\"Letra pequeña latina Feng Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AA\",\"mappings\":{\"default\":{\"default\":\"pequeña letra Ls Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AB\",\"mappings\":{\"default\":{\"default\":\"pequeña letra Lz Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AC\",\"mappings\":{\"default\":{\"default\":\"percusion bilabial\"}}},{\"category\":\"Ll\",\"key\":\"02AD\",\"mappings\":{\"default\":{\"default\":\"de percusión bidental\"}}},{\"category\":\"Ll\",\"key\":\"02AE\",\"mappings\":{\"default\":{\"default\":\"convertida en H con anzuelo\"}}},{\"category\":\"Ll\",\"key\":\"02AF\",\"mappings\":{\"default\":{\"default\":\"convertida en H con anzuelo y cola\"}}},{\"category\":\"Ll\",\"key\":\"1D02\",\"mappings\":{\"default\":{\"default\":\"vuelta ae\"}}},{\"category\":\"Ll\",\"key\":\"1D08\",\"mappings\":{\"default\":{\"default\":\"convertida abierta E\"}}},{\"category\":\"Ll\",\"key\":\"1D09\",\"mappings\":{\"default\":{\"default\":\"convertida i\"}}},{\"category\":\"Ll\",\"key\":\"1D11\",\"mappings\":{\"default\":{\"default\":\"de lado O\"}}},{\"category\":\"Ll\",\"key\":\"1D12\",\"mappings\":{\"default\":{\"default\":\"de lado abierto O\"}}},{\"category\":\"Ll\",\"key\":\"1D14\",\"mappings\":{\"default\":{\"default\":\"vuelta oe\"}}},{\"category\":\"Ll\",\"key\":\"1D16\",\"mappings\":{\"default\":{\"default\":\"mitad superior O\"}}},{\"category\":\"Ll\",\"key\":\"1D17\",\"mappings\":{\"default\":{\"default\":\"Letra latina, letra inferior, mitad inferior O\"}}},{\"category\":\"Ll\",\"key\":\"1D1D\",\"mappings\":{\"default\":{\"default\":\"hacia los lados U\"}}},{\"category\":\"Ll\",\"key\":\"1D1E\",\"mappings\":{\"default\":{\"default\":\"de lado diaeresizada U\"}}},{\"category\":\"Ll\",\"key\":\"1D1F\",\"mappings\":{\"default\":{\"default\":\"girada hacia los lados M\"}}},{\"category\":\"Ll\",\"key\":\"1D24\",\"mappings\":{\"default\":{\"default\":\"Carta latina expresada espirante laríngeo\"}}},{\"category\":\"Ll\",\"key\":\"1D25\",\"mappings\":{\"default\":{\"default\":\"ain\"}}},{\"category\":\"Ll\",\"key\":\"1D6B\",\"mappings\":{\"default\":{\"default\":\"ue\"}}},{\"category\":\"Ll\",\"key\":\"1D6C\",\"mappings\":{\"default\":{\"default\":\"B con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D6D\",\"mappings\":{\"default\":{\"default\":\"D con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D6E\",\"mappings\":{\"default\":{\"default\":\"F con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D6F\",\"mappings\":{\"default\":{\"default\":\"M con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D70\",\"mappings\":{\"default\":{\"default\":\"N con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D71\",\"mappings\":{\"default\":{\"default\":\"P con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D72\",\"mappings\":{\"default\":{\"default\":\"R con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D73\",\"mappings\":{\"default\":{\"default\":\"R con anzuelo y tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D74\",\"mappings\":{\"default\":{\"default\":\"S con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D75\",\"mappings\":{\"default\":{\"default\":\"T con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D76\",\"mappings\":{\"default\":{\"default\":\"z con tilde media\"}}},{\"category\":\"Ll\",\"key\":\"1D77\",\"mappings\":{\"default\":{\"default\":\"girada g\"}}},{\"category\":\"Ll\",\"key\":\"1D79\",\"mappings\":{\"default\":{\"default\":\"insular g\"}}},{\"category\":\"Ll\",\"key\":\"1D7A\",\"mappings\":{\"default\":{\"default\":\"th con tachado\"}}},{\"category\":\"Ll\",\"key\":\"1D80\",\"mappings\":{\"default\":{\"default\":\"B con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D81\",\"mappings\":{\"default\":{\"default\":\"D con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D82\",\"mappings\":{\"default\":{\"default\":\"F con gancho palatino\"}}},{\"category\":\"Ll\",\"key\":\"1D83\",\"mappings\":{\"default\":{\"default\":\"G con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D84\",\"mappings\":{\"default\":{\"default\":\"K con gancho palatino\"}}},{\"category\":\"Ll\",\"key\":\"1D85\",\"mappings\":{\"default\":{\"default\":\"L con gancho palatino\"}}},{\"category\":\"Ll\",\"key\":\"1D86\",\"mappings\":{\"default\":{\"default\":\"M con gancho palatino\"}}},{\"category\":\"Ll\",\"key\":\"1D87\",\"mappings\":{\"default\":{\"default\":\"N con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D88\",\"mappings\":{\"default\":{\"default\":\"P con gancho palatino\"}}},{\"category\":\"Ll\",\"key\":\"1D89\",\"mappings\":{\"default\":{\"default\":\"R con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8A\",\"mappings\":{\"default\":{\"default\":\"S con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8B\",\"mappings\":{\"default\":{\"default\":\"Pequeña letra latina Esh con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8C\",\"mappings\":{\"default\":{\"default\":\"V con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8D\",\"mappings\":{\"default\":{\"default\":\"X con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8E\",\"mappings\":{\"default\":{\"default\":\"Z con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8F\",\"mappings\":{\"default\":{\"default\":\"a con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D90\",\"mappings\":{\"default\":{\"default\":\"Alfa latina pequeña letra con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D91\",\"mappings\":{\"default\":{\"default\":\"D con gancho y cola\"}}},{\"category\":\"Ll\",\"key\":\"1D92\",\"mappings\":{\"default\":{\"default\":\"pequeña E con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D93\",\"mappings\":{\"default\":{\"default\":\"E Pequeña Open con Gancho Retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D94\",\"mappings\":{\"default\":{\"default\":\"E abierta invertido con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D95\",\"mappings\":{\"default\":{\"default\":\"pequeña Schwa con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D96\",\"mappings\":{\"default\":{\"default\":\"I con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D97\",\"mappings\":{\"default\":{\"default\":\"pequeña latina Open O con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D98\",\"mappings\":{\"default\":{\"default\":\"Esh de letra pequeña latina con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D99\",\"mappings\":{\"default\":{\"default\":\"U con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D9A\",\"mappings\":{\"default\":{\"default\":\"pequeña Ezh con gancho retroflex\"}}},{\"key\":\"0149\",\"mappings\":{\"default\":{\"default\":\"n precedida por apóstrofe\"}},\"category\":\"Ll\"},{\"key\":\"014B\",\"mappings\":{\"default\":{\"default\":\"eng\"}},\"category\":\"Ll\"}]\n,\n\"es/symbols/latin-lower-single-accent.js\": \n[{\"locale\":\"es\"},{\"key\":\"00E0\",\"mappings\":{\"default\":{\"default\":\"a grave\"}},\"category\":\"Ll\"},{\"key\":\"00E1\",\"mappings\":{\"default\":{\"default\":\"a aguda\"}},\"category\":\"Ll\"},{\"key\":\"00E2\",\"mappings\":{\"default\":{\"default\":\"a acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"00E3\",\"mappings\":{\"default\":{\"default\":\"a con tilde\"}},\"category\":\"Ll\"},{\"key\":\"00E4\",\"mappings\":{\"default\":{\"default\":\"a diéresis\"}},\"category\":\"Ll\"},{\"key\":\"00E5\",\"mappings\":{\"default\":{\"default\":\"a con anillo\"}},\"category\":\"Ll\"},{\"key\":\"00E7\",\"mappings\":{\"default\":{\"default\":\"c cedilla\"}},\"category\":\"Ll\"},{\"key\":\"00E8\",\"mappings\":{\"default\":{\"default\":\"e grave\"}},\"category\":\"Ll\"},{\"key\":\"00E9\",\"mappings\":{\"default\":{\"default\":\"e aguda\"}},\"category\":\"Ll\"},{\"key\":\"00EA\",\"mappings\":{\"default\":{\"default\":\"e acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"00EB\",\"mappings\":{\"default\":{\"default\":\"e diéresis\"}},\"category\":\"Ll\"},{\"key\":\"00EC\",\"mappings\":{\"default\":{\"default\":\"i grave\"}},\"category\":\"Ll\"},{\"key\":\"00ED\",\"mappings\":{\"default\":{\"default\":\"i aguda\"}},\"category\":\"Ll\"},{\"key\":\"00EE\",\"mappings\":{\"default\":{\"default\":\"i acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"00EF\",\"mappings\":{\"default\":{\"default\":\"i diéresis\"}},\"category\":\"Ll\"},{\"key\":\"00F1\",\"mappings\":{\"default\":{\"default\":\"eñe\"}},\"category\":\"Ll\"},{\"key\":\"00F2\",\"mappings\":{\"default\":{\"default\":\"o grave\"}},\"category\":\"Ll\"},{\"key\":\"00F3\",\"mappings\":{\"default\":{\"default\":\"o aguda\"}},\"category\":\"Ll\"},{\"key\":\"00F4\",\"mappings\":{\"default\":{\"default\":\"o acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"00F5\",\"mappings\":{\"default\":{\"default\":\"o con tilde\"}},\"category\":\"Ll\"},{\"key\":\"00F6\",\"mappings\":{\"default\":{\"default\":\"o diéresis\"}},\"category\":\"Ll\"},{\"key\":\"00F9\",\"mappings\":{\"default\":{\"default\":\"u grave\"}},\"category\":\"Ll\"},{\"key\":\"00FA\",\"mappings\":{\"default\":{\"default\":\"u aguda\"}},\"category\":\"Ll\"},{\"key\":\"00FB\",\"mappings\":{\"default\":{\"default\":\"u acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"00FC\",\"mappings\":{\"default\":{\"default\":\"u diéresis\"}},\"category\":\"Ll\"},{\"key\":\"00FD\",\"mappings\":{\"default\":{\"default\":\"Y aguda\",\"defaultMP\":\"ye aguda\"}},\"category\":\"Ll\"},{\"key\":\"00FF\",\"mappings\":{\"default\":{\"default\":\"y diéresis\",\"defaultMP\":\"ye diéresis\"}},\"category\":\"Ll\"},{\"key\":\"0101\",\"mappings\":{\"default\":{\"default\":\"a barra\"}},\"category\":\"Ll\"},{\"key\":\"0103\",\"mappings\":{\"default\":{\"default\":\"a con breve\"}},\"category\":\"Ll\"},{\"key\":\"0105\",\"mappings\":{\"default\":{\"default\":\"a con ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0107\",\"mappings\":{\"default\":{\"default\":\"c con agudo\"}},\"category\":\"Ll\"},{\"key\":\"0109\",\"mappings\":{\"default\":{\"default\":\"c con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"010B\",\"mappings\":{\"default\":{\"default\":\"c con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"010D\",\"mappings\":{\"default\":{\"default\":\"c con carón\"}},\"category\":\"Ll\"},{\"key\":\"010F\",\"mappings\":{\"default\":{\"default\":\"d con carón\"}},\"category\":\"Ll\"},{\"key\":\"0113\",\"mappings\":{\"default\":{\"default\":\"e barra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0115\",\"mappings\":{\"default\":{\"default\":\"e con breve\"}}},{\"key\":\"0117\",\"mappings\":{\"default\":{\"default\":\"e con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"0119\",\"mappings\":{\"default\":{\"default\":\"e con ogonek\"}},\"category\":\"Ll\"},{\"key\":\"011B\",\"mappings\":{\"default\":{\"default\":\"e con carón\"}},\"category\":\"Ll\"},{\"key\":\"011D\",\"mappings\":{\"default\":{\"default\":\"g con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"011F\",\"mappings\":{\"default\":{\"default\":\"g con breve\"}},\"category\":\"Ll\"},{\"key\":\"0121\",\"mappings\":{\"default\":{\"default\":\"g con punto arriba\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0123\",\"mappings\":{\"default\":{\"default\":\"g con cedilla\"}}},{\"key\":\"0125\",\"mappings\":{\"default\":{\"default\":\"h con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"0129\",\"mappings\":{\"default\":{\"default\":\"i con tilde\"}},\"category\":\"Ll\"},{\"key\":\"012B\",\"mappings\":{\"default\":{\"default\":\"i barra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"012D\",\"mappings\":{\"default\":{\"default\":\"i con breve\"}}},{\"key\":\"012F\",\"mappings\":{\"default\":{\"default\":\"i con ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0131\",\"mappings\":{\"default\":{\"default\":\"i sin punto\"}},\"category\":\"Ll\"},{\"key\":\"0135\",\"mappings\":{\"default\":{\"default\":\"j con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"0137\",\"mappings\":{\"default\":{\"default\":\"k con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"013A\",\"mappings\":{\"default\":{\"default\":\"l con agudo\"}},\"category\":\"Ll\"},{\"key\":\"013C\",\"mappings\":{\"default\":{\"default\":\"l con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"013E\",\"mappings\":{\"default\":{\"default\":\"l con carón\"}},\"category\":\"Ll\"},{\"key\":\"0140\",\"mappings\":{\"default\":{\"default\":\"l con punto mediano\"}},\"category\":\"Ll\"},{\"key\":\"0144\",\"mappings\":{\"default\":{\"default\":\"n con agudo\"}},\"category\":\"Ll\"},{\"key\":\"0146\",\"mappings\":{\"default\":{\"default\":\"n con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"0148\",\"mappings\":{\"default\":{\"default\":\"n con carón\"}},\"category\":\"Ll\"},{\"key\":\"014D\",\"mappings\":{\"default\":{\"default\":\"o barra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"014F\",\"mappings\":{\"default\":{\"default\":\"o con breve\"}}},{\"key\":\"0151\",\"mappings\":{\"default\":{\"default\":\"o con doble acento agudo\"}},\"category\":\"Ll\"},{\"key\":\"0155\",\"mappings\":{\"default\":{\"default\":\"r con agudo\"}},\"category\":\"Ll\"},{\"key\":\"0157\",\"mappings\":{\"default\":{\"default\":\"r con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"0159\",\"mappings\":{\"default\":{\"default\":\"r con carón\"}},\"category\":\"Ll\"},{\"key\":\"015B\",\"mappings\":{\"default\":{\"default\":\"s con agudo\"}},\"category\":\"Ll\"},{\"key\":\"015D\",\"mappings\":{\"default\":{\"default\":\"s con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"015F\",\"mappings\":{\"default\":{\"default\":\"s con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"0161\",\"mappings\":{\"default\":{\"default\":\"s con carón\"}},\"category\":\"Ll\"},{\"key\":\"0163\",\"mappings\":{\"default\":{\"default\":\"t con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"0165\",\"mappings\":{\"default\":{\"default\":\"t con carón\"}},\"category\":\"Ll\"},{\"key\":\"0169\",\"mappings\":{\"default\":{\"default\":\"u con tilde\"}},\"category\":\"Ll\"},{\"key\":\"016B\",\"mappings\":{\"default\":{\"default\":\"u barra\"}},\"category\":\"Ll\"},{\"key\":\"016D\",\"mappings\":{\"default\":{\"default\":\"u con breve\"}},\"category\":\"Ll\"},{\"key\":\"016F\",\"mappings\":{\"default\":{\"default\":\"u con anillo arriba\"}},\"category\":\"Ll\"},{\"key\":\"0171\",\"mappings\":{\"default\":{\"default\":\"u con doble acento agudo\"}},\"category\":\"Ll\"},{\"key\":\"0173\",\"mappings\":{\"default\":{\"default\":\"u con ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0175\",\"mappings\":{\"default\":{\"default\":\"w con circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"0177\",\"mappings\":{\"default\":{\"default\":\"y con circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"017A\",\"mappings\":{\"default\":{\"default\":\"z con agudo\"}},\"category\":\"Ll\"},{\"key\":\"017C\",\"mappings\":{\"default\":{\"default\":\"z con punto\"}},\"category\":\"Ll\"},{\"key\":\"017E\",\"mappings\":{\"default\":{\"default\":\"z con carón\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01CE\",\"mappings\":{\"default\":{\"default\":\"a con acento\"}}},{\"category\":\"Ll\",\"key\":\"01D0\",\"mappings\":{\"default\":{\"default\":\"i con acento\"}}},{\"category\":\"Ll\",\"key\":\"01D2\",\"mappings\":{\"default\":{\"default\":\"o con acento\"}}},{\"category\":\"Ll\",\"key\":\"01D4\",\"mappings\":{\"default\":{\"default\":\"u con acento\"}}},{\"category\":\"Ll\",\"key\":\"01E7\",\"mappings\":{\"default\":{\"default\":\"g con acento\"}}},{\"category\":\"Ll\",\"key\":\"01E9\",\"mappings\":{\"default\":{\"default\":\"k con acento\"}}},{\"category\":\"Ll\",\"key\":\"01EB\",\"mappings\":{\"default\":{\"default\":\"o con pecíolo\"}}},{\"category\":\"Ll\",\"key\":\"01F0\",\"mappings\":{\"default\":{\"default\":\"j con acento\"}}},{\"key\":\"01F5\",\"mappings\":{\"default\":{\"default\":\"g con agudo\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01F9\",\"mappings\":{\"default\":{\"default\":\"n con grave\"}}},{\"category\":\"Ll\",\"key\":\"0201\",\"mappings\":{\"default\":{\"default\":\"a con doble tumba\"}}},{\"category\":\"Ll\",\"key\":\"0203\",\"mappings\":{\"default\":{\"default\":\"a con letras invertidas\"}}},{\"category\":\"Ll\",\"key\":\"0205\",\"mappings\":{\"default\":{\"default\":\"e con doble tumba\"}}},{\"category\":\"Ll\",\"key\":\"0207\",\"mappings\":{\"default\":{\"default\":\"e con letras invertidas\"}}},{\"category\":\"Ll\",\"key\":\"0209\",\"mappings\":{\"default\":{\"default\":\"i con doble tumba\"}}},{\"category\":\"Ll\",\"key\":\"020B\",\"mappings\":{\"default\":{\"default\":\"i con Breve invertida\"}}},{\"category\":\"Ll\",\"key\":\"020D\",\"mappings\":{\"default\":{\"default\":\"o con doble tumba\"}}},{\"category\":\"Ll\",\"key\":\"020F\",\"mappings\":{\"default\":{\"default\":\"o con letras invertidas\"}}},{\"category\":\"Ll\",\"key\":\"0211\",\"mappings\":{\"default\":{\"default\":\"r con doble sepulcro\"}}},{\"category\":\"Ll\",\"key\":\"0213\",\"mappings\":{\"default\":{\"default\":\"r con letras invertidas\"}}},{\"category\":\"Ll\",\"key\":\"0215\",\"mappings\":{\"default\":{\"default\":\"u con doble tumba\"}}},{\"category\":\"Ll\",\"key\":\"0217\",\"mappings\":{\"default\":{\"default\":\"u con letras invertidas\"}}},{\"category\":\"Ll\",\"key\":\"0219\",\"mappings\":{\"default\":{\"default\":\"s con coma debajo\"}}},{\"category\":\"Ll\",\"key\":\"021B\",\"mappings\":{\"default\":{\"default\":\"t con coma debajo\"}}},{\"category\":\"Ll\",\"key\":\"021F\",\"mappings\":{\"default\":{\"default\":\"h con caron\"}}},{\"category\":\"Ll\",\"key\":\"0227\",\"mappings\":{\"default\":{\"default\":\"con un punto arriba\"}}},{\"category\":\"Ll\",\"key\":\"0229\",\"mappings\":{\"default\":{\"default\":\"e con cedilla\"}}},{\"category\":\"Ll\",\"key\":\"022F\",\"mappings\":{\"default\":{\"default\":\"o con punto arriba\"}}},{\"category\":\"Ll\",\"key\":\"0233\",\"mappings\":{\"default\":{\"default\":\"y con Macron\"}}},{\"category\":\"Ll\",\"key\":\"0237\",\"mappings\":{\"default\":{\"default\":\"s in punto j\"}}},{\"key\":\"1E01\",\"mappings\":{\"default\":{\"default\":\"a con anillo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E03\",\"mappings\":{\"default\":{\"default\":\"b con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E05\",\"mappings\":{\"default\":{\"default\":\"b con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E07\",\"mappings\":{\"default\":{\"default\":\"b con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E0B\",\"mappings\":{\"default\":{\"default\":\"d con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E0D\",\"mappings\":{\"default\":{\"default\":\"d con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E0F\",\"mappings\":{\"default\":{\"default\":\"d con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E11\",\"mappings\":{\"default\":{\"default\":\"d con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"1E13\",\"mappings\":{\"default\":{\"default\":\"d con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E19\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E1B\",\"mappings\":{\"default\":{\"default\":\"e con tilde debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E1F\",\"mappings\":{\"default\":{\"default\":\"f con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E21\",\"mappings\":{\"default\":{\"default\":\"g con macrón\"}},\"category\":\"Ll\"},{\"key\":\"1E23\",\"mappings\":{\"default\":{\"default\":\"h con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E25\",\"mappings\":{\"default\":{\"default\":\"h con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E27\",\"mappings\":{\"default\":{\"default\":\"h con diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1E29\",\"mappings\":{\"default\":{\"default\":\"h con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"1E2B\",\"mappings\":{\"default\":{\"default\":\"h con breve debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E2D\",\"mappings\":{\"default\":{\"default\":\"i con tilde debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E31\",\"mappings\":{\"default\":{\"default\":\"k con agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E33\",\"mappings\":{\"default\":{\"default\":\"k con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E35\",\"mappings\":{\"default\":{\"default\":\"k con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E37\",\"mappings\":{\"default\":{\"default\":\"l con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E3B\",\"mappings\":{\"default\":{\"default\":\"l con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E3D\",\"mappings\":{\"default\":{\"default\":\"l con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E3F\",\"mappings\":{\"default\":{\"default\":\"m con agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E41\",\"mappings\":{\"default\":{\"default\":\"m con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E43\",\"mappings\":{\"default\":{\"default\":\"m con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E45\",\"mappings\":{\"default\":{\"default\":\"n con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E47\",\"mappings\":{\"default\":{\"default\":\"n con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E49\",\"mappings\":{\"default\":{\"default\":\"n con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E4B\",\"mappings\":{\"default\":{\"default\":\"n con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E55\",\"mappings\":{\"default\":{\"default\":\"p con agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E57\",\"mappings\":{\"default\":{\"default\":\"p con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E59\",\"mappings\":{\"default\":{\"default\":\"r con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E5B\",\"mappings\":{\"default\":{\"default\":\"r con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E5F\",\"mappings\":{\"default\":{\"default\":\"r con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E61\",\"mappings\":{\"default\":{\"default\":\"s con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E63\",\"mappings\":{\"default\":{\"default\":\"s con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E6B\",\"mappings\":{\"default\":{\"default\":\"t con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E6D\",\"mappings\":{\"default\":{\"default\":\"t con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E6F\",\"mappings\":{\"default\":{\"default\":\"t con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E71\",\"mappings\":{\"default\":{\"default\":\"t con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E73\",\"mappings\":{\"default\":{\"default\":\"u con diéresis debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E75\",\"mappings\":{\"default\":{\"default\":\"u con tilde debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E77\",\"mappings\":{\"default\":{\"default\":\"u con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E7D\",\"mappings\":{\"default\":{\"default\":\"v con tilde\"}},\"category\":\"Ll\"},{\"key\":\"1E7F\",\"mappings\":{\"default\":{\"default\":\"v con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E81\",\"mappings\":{\"default\":{\"default\":\"w con grave\"}},\"category\":\"Ll\"},{\"key\":\"1E83\",\"mappings\":{\"default\":{\"default\":\"w con agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E85\",\"mappings\":{\"default\":{\"default\":\"w con diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1E87\",\"mappings\":{\"default\":{\"default\":\"w con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E89\",\"mappings\":{\"default\":{\"default\":\"w con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E8B\",\"mappings\":{\"default\":{\"default\":\"x con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E8D\",\"mappings\":{\"default\":{\"default\":\"x con diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1E8F\",\"mappings\":{\"default\":{\"default\":\"y con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E91\",\"mappings\":{\"default\":{\"default\":\"z con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"1E93\",\"mappings\":{\"default\":{\"default\":\"z con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E95\",\"mappings\":{\"default\":{\"default\":\"z con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E96\",\"mappings\":{\"default\":{\"default\":\"h con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E97\",\"mappings\":{\"default\":{\"default\":\"t con diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1E98\",\"mappings\":{\"default\":{\"default\":\"w con anillo arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E99\",\"mappings\":{\"default\":{\"default\":\"y con anillo arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E9A\",\"mappings\":{\"default\":{\"default\":\"a con medio derecho de anillo\"}},\"category\":\"Ll\"},{\"key\":\"1EA1\",\"mappings\":{\"default\":{\"default\":\"a con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EA3\",\"mappings\":{\"default\":{\"default\":\"a con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EB9\",\"mappings\":{\"default\":{\"default\":\"e con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EBB\",\"mappings\":{\"default\":{\"default\":\"e con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EBD\",\"mappings\":{\"default\":{\"default\":\"e con tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EC9\",\"mappings\":{\"default\":{\"default\":\"i con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1ECB\",\"mappings\":{\"default\":{\"default\":\"i con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1ECD\",\"mappings\":{\"default\":{\"default\":\"o con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1ECF\",\"mappings\":{\"default\":{\"default\":\"o con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EE5\",\"mappings\":{\"default\":{\"default\":\"u con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EE7\",\"mappings\":{\"default\":{\"default\":\"u con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EF3\",\"mappings\":{\"default\":{\"default\":\"y con grave\"}},\"category\":\"Ll\"},{\"key\":\"1EF5\",\"mappings\":{\"default\":{\"default\":\"y con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EF7\",\"mappings\":{\"default\":{\"default\":\"y con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EF9\",\"mappings\":{\"default\":{\"default\":\"y con tilde\"}},\"category\":\"Ll\"}]\n,\n\"es/symbols/latin-rest.js\": \n[{\"locale\":\"es\"},{\"category\":\"Ll\",\"key\":\"210E\",\"mappings\":{\"default\":{\"default\":\"constante de planck\"}}},{\"category\":\"Mn\",\"key\":\"0363\",\"mappings\":{\"default\":{\"default\":\"combinando a\"}}},{\"category\":\"Mn\",\"key\":\"0364\",\"mappings\":{\"default\":{\"default\":\"combinando e\"}}},{\"category\":\"Mn\",\"key\":\"0365\",\"mappings\":{\"default\":{\"default\":\"combinando i\"}}},{\"category\":\"Mn\",\"key\":\"0366\",\"mappings\":{\"default\":{\"default\":\"combinando o\"}}},{\"category\":\"Mn\",\"key\":\"0367\",\"mappings\":{\"default\":{\"default\":\"combinando u\"}}},{\"category\":\"Mn\",\"key\":\"0368\",\"mappings\":{\"default\":{\"default\":\"combinando c\"}}},{\"category\":\"Mn\",\"key\":\"0369\",\"mappings\":{\"default\":{\"default\":\"combinando d\"}}},{\"category\":\"Mn\",\"key\":\"036A\",\"mappings\":{\"default\":{\"default\":\"combinando h\"}}},{\"category\":\"Mn\",\"key\":\"036B\",\"mappings\":{\"default\":{\"default\":\"combinando m\"}}},{\"category\":\"Mn\",\"key\":\"036C\",\"mappings\":{\"default\":{\"default\":\"combinando r\"}}},{\"category\":\"Mn\",\"key\":\"036D\",\"mappings\":{\"default\":{\"default\":\"combinando t\"}}},{\"category\":\"Mn\",\"key\":\"036E\",\"mappings\":{\"default\":{\"default\":\"combinando v\"}}},{\"category\":\"Mn\",\"key\":\"036F\",\"mappings\":{\"default\":{\"default\":\"combinando x\"}}},{\"category\":\"Lm\",\"key\":\"1D62\",\"mappings\":{\"default\":{\"default\":\"subíndice i\"}}},{\"category\":\"Lm\",\"key\":\"1D63\",\"mappings\":{\"default\":{\"default\":\"subíndice r\"}}},{\"category\":\"Lm\",\"key\":\"1D64\",\"mappings\":{\"default\":{\"default\":\"subíndice u\"}}},{\"category\":\"Lm\",\"key\":\"1D65\",\"mappings\":{\"default\":{\"default\":\"subíndice latino letra pequeña V\"}}},{\"category\":\"Mn\",\"key\":\"1DCA\",\"mappings\":{\"default\":{\"default\":\"combinando r abajo\"}}},{\"category\":\"Mn\",\"key\":\"1DD3\",\"mappings\":{\"default\":{\"default\":\"combinando letra minúscula en latín, aplanado, abierto arriba\"}}},{\"category\":\"Mn\",\"key\":\"1DD4\",\"mappings\":{\"default\":{\"default\":\"combinando ae\"}}},{\"category\":\"Mn\",\"key\":\"1DD5\",\"mappings\":{\"default\":{\"default\":\"combinando ao\"}}},{\"category\":\"Mn\",\"key\":\"1DD6\",\"mappings\":{\"default\":{\"default\":\"combinando av\"}}},{\"category\":\"Mn\",\"key\":\"1DD7\",\"mappings\":{\"default\":{\"default\":\"combinando Letra Pequeña Latina C Cedilla\"}}},{\"category\":\"Mn\",\"key\":\"1DD8\",\"mappings\":{\"default\":{\"default\":\"combinando insular d\"}}},{\"category\":\"Mn\",\"key\":\"1DD9\",\"mappings\":{\"default\":{\"default\":\"combinando la eth\"}}},{\"category\":\"Mn\",\"key\":\"1DDA\",\"mappings\":{\"default\":{\"default\":\"combinando g\"}}},{\"category\":\"Mn\",\"key\":\"1DDB\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña mayúscula G\"}}},{\"category\":\"Mn\",\"key\":\"1DDC\",\"mappings\":{\"default\":{\"default\":\"combinando k\"}}},{\"category\":\"Mn\",\"key\":\"1DDD\",\"mappings\":{\"default\":{\"default\":\"combinando l\"}}},{\"category\":\"Mn\",\"key\":\"1DDE\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña mayúscula L\"}}},{\"category\":\"Mn\",\"key\":\"1DDF\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña mayúscula M\"}}},{\"category\":\"Mn\",\"key\":\"1DE0\",\"mappings\":{\"default\":{\"default\":\"combinando n\"}}},{\"category\":\"Mn\",\"key\":\"1DE1\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña mayúscula N\"}}},{\"category\":\"Mn\",\"key\":\"1DE2\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña mayúscula R\"}}},{\"category\":\"Mn\",\"key\":\"1DE3\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña r rotunda\"}}},{\"category\":\"Mn\",\"key\":\"1DE4\",\"mappings\":{\"default\":{\"default\":\"combinando s\"}}},{\"category\":\"Mn\",\"key\":\"1DE5\",\"mappings\":{\"default\":{\"default\":\"combinando larga s\"}}},{\"category\":\"Mn\",\"key\":\"1DE6\",\"mappings\":{\"default\":{\"default\":\"combinando z\"}}},{\"category\":\"Lm\",\"key\":\"2071\",\"mappings\":{\"default\":{\"default\":\"superíndice i\"}}},{\"category\":\"Lm\",\"key\":\"207F\",\"mappings\":{\"default\":{\"default\":\"superíndice n\"}}},{\"category\":\"Lm\",\"key\":\"2090\",\"mappings\":{\"default\":{\"default\":\"subíndice a\"}}},{\"category\":\"Lm\",\"key\":\"2091\",\"mappings\":{\"default\":{\"default\":\"subíndice e\"}}},{\"category\":\"Lm\",\"key\":\"2092\",\"mappings\":{\"default\":{\"default\":\"subíndice o\"}}},{\"category\":\"Lm\",\"key\":\"2093\",\"mappings\":{\"default\":{\"default\":\"subíndice x\"}}},{\"category\":\"Lm\",\"key\":\"2094\",\"mappings\":{\"default\":{\"default\":\"subíndice schwa\"}}},{\"category\":\"Lm\",\"key\":\"2095\",\"mappings\":{\"default\":{\"default\":\"subíndice h\"}}},{\"category\":\"Lm\",\"key\":\"2096\",\"mappings\":{\"default\":{\"default\":\"subíndice k\"}}},{\"category\":\"Lm\",\"key\":\"2097\",\"mappings\":{\"default\":{\"default\":\"subíndice l\"}}},{\"category\":\"Lm\",\"key\":\"2098\",\"mappings\":{\"default\":{\"default\":\"subíndice m\"}}},{\"category\":\"Lm\",\"key\":\"2099\",\"mappings\":{\"default\":{\"default\":\"subíndice n\"}}},{\"category\":\"Lm\",\"key\":\"209A\",\"mappings\":{\"default\":{\"default\":\"subíndice p\"}}},{\"category\":\"Lm\",\"key\":\"209B\",\"mappings\":{\"default\":{\"default\":\"subíndice s\"}}},{\"category\":\"Lm\",\"key\":\"209C\",\"mappings\":{\"default\":{\"default\":\"subíndice t\"}}},{\"category\":\"Lm\",\"key\":\"2C7C\",\"mappings\":{\"default\":{\"default\":\"subíndice j\"}}},{\"category\":\"So\",\"key\":\"1F12A\",\"mappings\":{\"default\":{\"default\":\"concha de tortuga con corchetes mayúscula S\"}}},{\"category\":\"So\",\"key\":\"1F12B\",\"mappings\":{\"default\":{\"default\":\"círculo itálico mayúscula C\"}}},{\"category\":\"So\",\"key\":\"1F12C\",\"mappings\":{\"default\":{\"default\":\"círculo itálico mayúscula R\"}}},{\"category\":\"So\",\"key\":\"1F18A\",\"mappings\":{\"default\":{\"default\":\"cruzada negativa cuadrada Mayúscula P\"}}}]\n,\n\"es/symbols/latin-upper-double-accent.js\": \n[{\"locale\":\"es\"},{\"category\":\"Lu\",\"key\":\"01D5\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con diéresis y macron\"}}},{\"category\":\"Lu\",\"key\":\"01D7\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con diéresis y acento agudo\"}}},{\"category\":\"Lu\",\"key\":\"01D9\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con diéresis y acento\"}}},{\"category\":\"Lu\",\"key\":\"01DB\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con diéresis y grave\"}}},{\"category\":\"Lu\",\"key\":\"01DE\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con diéresis y macron\"}}},{\"category\":\"Lu\",\"key\":\"01E0\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con punto arriba y macron\"}}},{\"category\":\"Lu\",\"key\":\"01EC\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con pecíolo y macron\"}}},{\"category\":\"Lu\",\"key\":\"01FA\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con ring above y acento agudo\"}}},{\"category\":\"Lu\",\"key\":\"022A\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con diaéresis y macron\"}}},{\"category\":\"Lu\",\"key\":\"022C\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con tilde y macron\"}}},{\"category\":\"Lu\",\"key\":\"0230\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con dot above y macron\"}}},{\"key\":\"1E08\",\"mappings\":{\"default\":{\"default\":\"mayúscula C con cedilla y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E14\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con macrón y grave\"}},\"category\":\"Lu\"},{\"key\":\"1E16\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con macrón y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E1C\",\"mappings\":{\"default\":{\"default\":\"mayúscula E with cedilla and breve\"}},\"category\":\"Lu\"},{\"key\":\"1E2E\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con diéresis y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E38\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con punto debajo y macrón\"}},\"category\":\"Lu\"},{\"key\":\"1E4C\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con tilde y acute\"}},\"category\":\"Lu\"},{\"key\":\"1E4E\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con tilde y diéresis\"}},\"category\":\"Lu\"},{\"key\":\"1E50\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con macrón y grave\"}},\"category\":\"Lu\"},{\"key\":\"1E52\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con macrón y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E5C\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con punto debajo y macrón\"}},\"category\":\"Lu\"},{\"key\":\"1E64\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con agudo y punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E66\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con carón y punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E68\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con punto debajo y punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E78\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con tilde y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E7A\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con macrón y diéresis\"}},\"category\":\"Lu\"},{\"key\":\"1EA4\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento circunflejo y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1EA6\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento circunflejo y grave\"}},\"category\":\"Lu\"},{\"key\":\"1EA8\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento circunflejo y gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EAA\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento circunflejo y tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EAC\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento circunflejo y punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EAE\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1EB0\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve y grave\"}},\"category\":\"Lu\"},{\"key\":\"1EB2\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve y gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EB4\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve y tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EB6\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve y punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EBE\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1EC0\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo y grave\"}},\"category\":\"Lu\"},{\"key\":\"1EC2\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo y gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EC4\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo y tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EC6\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo y punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1ED0\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento circunflejo y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1ED2\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento circunflejo y grave\"}},\"category\":\"Lu\"},{\"key\":\"1ED4\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento circunflejo y gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1ED6\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento circunflejo y tilde\"}},\"category\":\"Lu\"},{\"key\":\"1ED8\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento circunflejo y punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EDA\",\"mappings\":{\"default\":{\"default\":\"mayúscula O with horn and acute\"}},\"category\":\"Lu\"},{\"key\":\"1EDC\",\"mappings\":{\"default\":{\"default\":\"mayúscula O with horn and grave\"}},\"category\":\"Lu\"},{\"key\":\"1EDE\",\"mappings\":{\"default\":{\"default\":\"mayúscula O with horn and hook above\"}},\"category\":\"Lu\"},{\"key\":\"1EE0\",\"mappings\":{\"default\":{\"default\":\"mayúscula O with horn and tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EE2\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con cuerno y punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EE8\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con cuerno y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1EEA\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con cuerno y grave\"}},\"category\":\"Lu\"},{\"key\":\"1EEC\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con cuerno y gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EEE\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con cuerno y tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EF0\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con cuerno y punto debajo\"}},\"category\":\"Lu\"}]\n,\n\"es/symbols/latin-upper-single-accent.js\": \n[{\"locale\":\"es\"},{\"key\":\"00C0\",\"mappings\":{\"default\":{\"default\":\"mayúscula A grave\"}},\"category\":\"Lu\"},{\"key\":\"00C1\",\"mappings\":{\"default\":{\"default\":\"mayúscula A aguda\"}},\"category\":\"Lu\"},{\"key\":\"00C2\",\"mappings\":{\"default\":{\"default\":\"mayúscula A acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"00C3\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con tilde\"}},\"category\":\"Lu\"},{\"key\":\"00C4\",\"mappings\":{\"default\":{\"default\":\"mayúscula A diéresis\"}},\"category\":\"Lu\"},{\"key\":\"00C5\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con anillo\"}},\"category\":\"Lu\"},{\"key\":\"00C7\",\"mappings\":{\"default\":{\"default\":\"mayúscula C cedilla\"}},\"category\":\"Lu\"},{\"key\":\"00C8\",\"mappings\":{\"default\":{\"default\":\"mayúscula E grave\"}},\"category\":\"Lu\"},{\"key\":\"00C9\",\"mappings\":{\"default\":{\"default\":\"mayúscula E aguda\"}},\"category\":\"Lu\"},{\"key\":\"00CA\",\"mappings\":{\"default\":{\"default\":\"mayúscula E acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"00CB\",\"mappings\":{\"default\":{\"default\":\"mayúscula E diéresis\"}},\"category\":\"Lu\"},{\"key\":\"00CC\",\"mappings\":{\"default\":{\"default\":\"mayúscula I grave\"}},\"category\":\"Lu\"},{\"key\":\"00CD\",\"mappings\":{\"default\":{\"default\":\"mayúscula I aguda\"}},\"category\":\"Lu\"},{\"key\":\"00CE\",\"mappings\":{\"default\":{\"default\":\"mayúscula I acento circumflejo\"}},\"category\":\"Lu\"},{\"key\":\"00CF\",\"mappings\":{\"default\":{\"default\":\"mayúscula I diéresis\"}},\"category\":\"Lu\"},{\"key\":\"00D1\",\"mappings\":{\"default\":{\"default\":\"mayúscula Ñ\"}},\"category\":\"Lu\"},{\"key\":\"00D2\",\"mappings\":{\"default\":{\"default\":\"mayúscula O grave\"}},\"category\":\"Lu\"},{\"key\":\"00D3\",\"mappings\":{\"default\":{\"default\":\"mayúscula O aguda\"}},\"category\":\"Lu\"},{\"key\":\"00D4\",\"mappings\":{\"default\":{\"default\":\"mayúscula O acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"00D5\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con tilde\"}},\"category\":\"Lu\"},{\"key\":\"00D6\",\"mappings\":{\"default\":{\"default\":\"mayúscula O diéresis\"}},\"category\":\"Lu\"},{\"key\":\"00D9\",\"mappings\":{\"default\":{\"default\":\"mayúscula U grave\"}},\"category\":\"Lu\"},{\"key\":\"00DA\",\"mappings\":{\"default\":{\"default\":\"mayúscula U aguda\"}},\"category\":\"Lu\"},{\"key\":\"00DB\",\"mappings\":{\"default\":{\"default\":\"mayúscula U acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"00DC\",\"mappings\":{\"default\":{\"default\":\"mayúscula U diéresis\"}},\"category\":\"Lu\"},{\"key\":\"00DD\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y aguda\"}},\"category\":\"Lu\"},{\"key\":\"0100\",\"mappings\":{\"default\":{\"default\":\"mayúscula A barra\"}},\"category\":\"Lu\"},{\"key\":\"0102\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve\"}},\"category\":\"Lu\"},{\"key\":\"0104\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con ogonek\"}},\"category\":\"Lu\"},{\"key\":\"0106\",\"mappings\":{\"default\":{\"default\":\"mayúscula C con agudo\"}},\"category\":\"Lu\"},{\"key\":\"0108\",\"mappings\":{\"default\":{\"default\":\"mayúscula C con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"010A\",\"mappings\":{\"default\":{\"default\":\"mayúscula C con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"010C\",\"mappings\":{\"default\":{\"default\":\"mayúscula C con carón\"}},\"category\":\"Lu\"},{\"key\":\"010E\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con carón\"}},\"category\":\"Lu\"},{\"key\":\"0112\",\"mappings\":{\"default\":{\"default\":\"mayúscula E barra\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0114\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con breve\"}}},{\"key\":\"0116\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"0118\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con ogonek\"}},\"category\":\"Lu\"},{\"key\":\"011A\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con carón\"}},\"category\":\"Lu\"},{\"key\":\"011C\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"011E\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con breve\"}},\"category\":\"Lu\"},{\"key\":\"0120\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"0122\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0124\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"0128\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con tilde\"}},\"category\":\"Lu\"},{\"key\":\"012A\",\"mappings\":{\"default\":{\"default\":\"mayúscula I barra\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"012C\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con breve\"}}},{\"key\":\"012E\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con ogonek\"}},\"category\":\"Lu\"},{\"key\":\"0130\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"0134\",\"mappings\":{\"default\":{\"default\":\"mayúscula J con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"0136\",\"mappings\":{\"default\":{\"default\":\"mayúscula K con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0139\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con agudo\"}},\"category\":\"Lu\"},{\"key\":\"013B\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"013D\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con carón\"}},\"category\":\"Lu\"},{\"key\":\"013F\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con punto mediano\"}},\"category\":\"Lu\"},{\"key\":\"0143\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con agudo\"}},\"category\":\"Lu\"},{\"key\":\"0145\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0147\",\"mappings\":{\"default\":{\"default\":\"mayúscula n con carón\"}},\"category\":\"Lu\"},{\"key\":\"014C\",\"mappings\":{\"default\":{\"default\":\"mayúscula O barra\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"014E\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con breve\"}}},{\"key\":\"0150\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con doble acento agudo \"}},\"category\":\"Lu\"},{\"key\":\"0154\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con agudo\"}},\"category\":\"Lu\"},{\"key\":\"0156\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0158\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con carón\"}},\"category\":\"Lu\"},{\"key\":\"015A\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con agudo\"}},\"category\":\"Lu\"},{\"key\":\"015C\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"015E\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0160\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con carón\"}},\"category\":\"Lu\"},{\"key\":\"0162\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0164\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con carón\"}},\"category\":\"Lu\"},{\"key\":\"0168\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con tilde\"}},\"category\":\"Lu\"},{\"key\":\"016A\",\"mappings\":{\"default\":{\"default\":\"mayúscula U barra\"}},\"category\":\"Lu\"},{\"key\":\"016C\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con breve\"}},\"category\":\"Lu\"},{\"key\":\"016E\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con anillo arriba\"}},\"category\":\"Lu\"},{\"key\":\"0170\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con doble acento agudo\"}},\"category\":\"Lu\"},{\"key\":\"0172\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con ogonek\"}},\"category\":\"Lu\"},{\"key\":\"0174\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"0176\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"0178\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y diéresis\"}},\"category\":\"Lu\"},{\"key\":\"0179\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z con agudo\"}},\"category\":\"Lu\"},{\"key\":\"017B\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z con punto\"}},\"category\":\"Lu\"},{\"key\":\"017D\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z con carón\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"01CD\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento\"}}},{\"category\":\"Lu\",\"key\":\"01CF\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con acento\"}}},{\"category\":\"Lu\",\"key\":\"01D1\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento\"}}},{\"category\":\"Lu\",\"key\":\"01D3\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con acento\"}}},{\"category\":\"Lu\",\"key\":\"01E6\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con acento\"}}},{\"category\":\"Lu\",\"key\":\"01E8\",\"mappings\":{\"default\":{\"default\":\"mayúscula K con acento\"}}},{\"category\":\"Lu\",\"key\":\"01EA\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con pecíolo\"}}},{\"category\":\"Lu\",\"key\":\"01F4\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con acento agudo\"}}},{\"category\":\"Lu\",\"key\":\"01F8\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con grave\"}}},{\"category\":\"Lu\",\"key\":\"0200\",\"mappings\":{\"default\":{\"default\":\"mayúscula con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"0202\",\"mappings\":{\"default\":{\"default\":\"mayúscula a con breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"0204\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"0206\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con Breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"0208\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"020A\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con Breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"020C\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"020E\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con Breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"0210\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"0212\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"0214\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"0216\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"0218\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con coma debajo\"}}},{\"category\":\"Lu\",\"key\":\"021A\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con coma debajo\"}}},{\"category\":\"Lu\",\"key\":\"021E\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con Caron\"}}},{\"category\":\"Lu\",\"key\":\"0226\",\"mappings\":{\"default\":{\"default\":\"mayúscula con un punto arriba\"}}},{\"category\":\"Lu\",\"key\":\"0228\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con cedilla\"}}},{\"category\":\"Lu\",\"key\":\"022E\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con punto arriba\"}}},{\"category\":\"Lu\",\"key\":\"0232\",\"mappings\":{\"default\":{\"default\":\"Mayúscula Y con Macron\"}}},{\"key\":\"1E00\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con anillo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E02\",\"mappings\":{\"default\":{\"default\":\"mayúscula B con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E04\",\"mappings\":{\"default\":{\"default\":\"mayúscula B con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E06\",\"mappings\":{\"default\":{\"default\":\"mayúscula B con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E0A\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E0C\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E0E\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E10\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"1E12\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E18\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E1A\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con tilde debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E1E\",\"mappings\":{\"default\":{\"default\":\"mayúscula F con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E20\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con macrón\"}},\"category\":\"Lu\"},{\"key\":\"1E22\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E24\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E26\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con diéresis\"}},\"category\":\"Lu\"},{\"key\":\"1E28\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"1E2A\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con breve debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E2C\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con tilde debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E30\",\"mappings\":{\"default\":{\"default\":\"mayúscula K con agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E32\",\"mappings\":{\"default\":{\"default\":\"mayúscula K con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E34\",\"mappings\":{\"default\":{\"default\":\"mayúscula K con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E36\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E3A\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E3C\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E3E\",\"mappings\":{\"default\":{\"default\":\"mayúscula M con agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E40\",\"mappings\":{\"default\":{\"default\":\"mayúscula M con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E42\",\"mappings\":{\"default\":{\"default\":\"mayúscula M con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E44\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E46\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E48\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E4A\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E54\",\"mappings\":{\"default\":{\"default\":\"mayúscula P con agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E56\",\"mappings\":{\"default\":{\"default\":\"mayúscula P con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E58\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E5A\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E5E\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E60\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E62\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E6A\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E6C\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E6E\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E70\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E72\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con diéresis debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E74\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con tilde debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E76\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E7C\",\"mappings\":{\"default\":{\"default\":\"mayúscula V con tilde\"}},\"category\":\"Lu\"},{\"key\":\"1E7E\",\"mappings\":{\"default\":{\"default\":\"mayúscula V con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E80\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con grave\"}},\"category\":\"Lu\"},{\"key\":\"1E82\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E84\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con diéresis\"}},\"category\":\"Lu\"},{\"key\":\"1E86\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E88\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E8A\",\"mappings\":{\"default\":{\"default\":\"mayúscula X con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E8C\",\"mappings\":{\"default\":{\"default\":\"mayúscula X con diéresis\"}},\"category\":\"Lu\"},{\"key\":\"1E8E\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E90\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"1E92\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E94\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z with line below\"}},\"category\":\"Lu\"},{\"key\":\"1EA0\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EA2\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EB8\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EBA\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EBC\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EC8\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1ECA\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1ECC\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1ECE\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EE4\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EE6\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EF2\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con grave\"}},\"category\":\"Lu\"},{\"key\":\"1EF4\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EF6\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EF8\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con tilde\"}},\"category\":\"Lu\"}]\n,\n\"es/symbols/math_angles.js\": \n[{\"locale\":\"es\"},{\"key\":\"22BE\",\"mappings\":{\"default\":{\"default\":\"ángulo recto con arco\"}},\"category\":\"Sm\"},{\"key\":\"237C\",\"mappings\":{\"default\":{\"default\":\"ángulo recto con flecha zigzag hacia abajo\"}},\"category\":\"Sm\"},{\"key\":\"27C0\",\"mappings\":{\"default\":{\"default\":\"ángulo sólido\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"299B\",\"mappings\":{\"default\":{\"default\":\"Ángulo medido de apertura a la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"299C\",\"mappings\":{\"default\":{\"default\":\"Variante de ángulo recto con cuadrado\"}}},{\"key\":\"299D\",\"mappings\":{\"default\":{\"default\":\"ángulo recto medido con punto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"299E\",\"mappings\":{\"default\":{\"default\":\"Ángulo con S dentro\"}}},{\"category\":\"Sm\",\"key\":\"299F\",\"mappings\":{\"default\":{\"default\":\"Ángulo agudo\"}}},{\"category\":\"Sm\",\"key\":\"29A0\",\"mappings\":{\"default\":{\"default\":\"Ángulo esférico de apertura a la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"29A1\",\"mappings\":{\"default\":{\"default\":\"Apertura de ángulo esférico\"}}},{\"category\":\"Sm\",\"key\":\"29A2\",\"mappings\":{\"default\":{\"default\":\"Ángulo de giro\"}}},{\"category\":\"Sm\",\"key\":\"29A3\",\"mappings\":{\"default\":{\"default\":\"Ángulo invertido\"}}},{\"key\":\"29A4\",\"mappings\":{\"default\":{\"default\":\"ángulo con barra inferior\"}},\"category\":\"Sm\"},{\"key\":\"29A5\",\"mappings\":{\"default\":{\"default\":\"ángulo inverso con barra inferior\"}},\"category\":\"Sm\"},{\"key\":\"29A6\",\"mappings\":{\"default\":{\"default\":\"ángulo oblicuo hacia arriba\"}},\"category\":\"Sm\"},{\"key\":\"29A7\",\"mappings\":{\"default\":{\"default\":\"ángulo oblicuo hacia abajo\"}},\"category\":\"Sm\"},{\"key\":\"29A8\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing up and to the right\"}},\"category\":\"Sm\"},{\"key\":\"29A9\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing up and to the left\"}},\"category\":\"Sm\"},{\"key\":\"29AA\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing down and to the right\"}},\"category\":\"Sm\"},{\"key\":\"29AB\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing down and to the left\"}},\"category\":\"Sm\"},{\"key\":\"29AC\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing right and up\"}},\"category\":\"Sm\"},{\"key\":\"29AD\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing left and up\"}},\"category\":\"Sm\"},{\"key\":\"29AE\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing right and down\"}},\"category\":\"Sm\"},{\"key\":\"29AF\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing left and down\"}},\"category\":\"Sm\"}]\n,\n\"es/symbols/math_arrows.js\": \n[{\"locale\":\"es\"},{\"key\":\"2190\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda\"}},\"category\":\"Sm\"},{\"key\":\"2191\",\"mappings\":{\"default\":{\"default\":\"flecha arriba\"}},\"category\":\"Sm\"},{\"key\":\"2192\",\"mappings\":{\"default\":{\"default\":\"flecha derecha\",\"defaultMP\":\"flecha\"}},\"category\":\"Sm\"},{\"key\":\"2193\",\"mappings\":{\"default\":{\"default\":\"flecha abajo\"}},\"category\":\"Sm\"},{\"key\":\"2194\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda y derecha\"}},\"category\":\"Sm\"},{\"key\":\"2195\",\"mappings\":{\"default\":{\"default\":\"flecha arriba y abajo\"}},\"category\":\"So\"},{\"key\":\"2196\",\"mappings\":{\"default\":{\"default\":\"flecha a noroeste\"}},\"category\":\"So\"},{\"key\":\"2197\",\"mappings\":{\"default\":{\"default\":\"flecha a nordeste\"}},\"category\":\"So\"},{\"key\":\"2198\",\"mappings\":{\"default\":{\"default\":\"flecha a sureste\"}},\"category\":\"So\"},{\"key\":\"2199\",\"mappings\":{\"default\":{\"default\":\"flecha a suroeste\"}},\"category\":\"So\"},{\"key\":\"219A\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda tachada\"}},\"category\":\"Sm\"},{\"key\":\"219B\",\"mappings\":{\"default\":{\"default\":\"flecha tachada\"}},\"category\":\"Sm\"},{\"key\":\"219C\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada izquierda\"}},\"category\":\"So\"},{\"key\":\"219D\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada\"}},\"category\":\"So\"},{\"key\":\"219E\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con doble punta\"}},\"category\":\"So\"},{\"key\":\"219F\",\"mappings\":{\"default\":{\"default\":\"flecha con doble punta hacia arriba\"}},\"category\":\"So\"},{\"key\":\"21A0\",\"mappings\":{\"default\":{\"default\":\"flecha derechaa con doble punta\"}},\"category\":\"Sm\"},{\"key\":\"21A1\",\"mappings\":{\"default\":{\"default\":\"flecha con doble punta hacia abajo\"}},\"category\":\"So\"},{\"key\":\"21A2\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con cola\"}},\"category\":\"So\"},{\"key\":\"21A3\",\"mappings\":{\"default\":{\"default\":\"flecha derecha con cola\"}},\"category\":\"Sm\"},{\"key\":\"21A4\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda de barra\"}},\"category\":\"So\"},{\"key\":\"21A5\",\"mappings\":{\"default\":{\"default\":\"barra con flecha\"}},\"category\":\"So\"},{\"key\":\"21A6\",\"mappings\":{\"default\":{\"default\":\"flecha derecha de barra\"}},\"category\":\"Sm\"},{\"key\":\"21A7\",\"mappings\":{\"default\":{\"default\":\"flecha con barra\"}},\"category\":\"So\"},{\"key\":\"21A8\",\"mappings\":{\"default\":{\"default\":\"flecha arriba y abajo con base\"}},\"category\":\"So\"},{\"key\":\"21A9\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con gancho\"}},\"category\":\"So\"},{\"key\":\"21AA\",\"mappings\":{\"default\":{\"default\":\"flecha con gancho\"}},\"category\":\"So\"},{\"key\":\"21AB\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con lazo\"}},\"category\":\"So\"},{\"key\":\"21AC\",\"mappings\":{\"default\":{\"default\":\"flecha con lazo\"}},\"category\":\"So\"},{\"key\":\"21AD\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada izquierda y derecha\"}},\"category\":\"So\"},{\"key\":\"21AE\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda y derecha tachada\"}},\"category\":\"Sm\"},{\"key\":\"21AF\",\"mappings\":{\"default\":{\"default\":\"flecha zigzag abajo\"}},\"category\":\"So\"},{\"key\":\"21B0\",\"mappings\":{\"default\":{\"default\":\"flecha arriba con punta izquierda\"}},\"category\":\"So\"},{\"key\":\"21B1\",\"mappings\":{\"default\":{\"default\":\"flecha arriba con punta derecha\"}},\"category\":\"So\"},{\"key\":\"21B2\",\"mappings\":{\"default\":{\"default\":\"flecha abajo con punta izquierda\"}},\"category\":\"So\"},{\"key\":\"21B3\",\"mappings\":{\"default\":{\"default\":\"flecha abajo con punta derecha\"}},\"category\":\"So\"},{\"key\":\"21B4\",\"mappings\":{\"default\":{\"default\":\"flecha derecha desde esquina inferior\"}},\"category\":\"So\"},{\"key\":\"21B5\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo desde esquina izquierda\"}},\"category\":\"So\"},{\"key\":\"21B6\",\"mappings\":{\"default\":{\"default\":\"flecha semicircular superior en sentido antihorario\"}},\"category\":\"So\"},{\"key\":\"21B7\",\"mappings\":{\"default\":{\"default\":\"flecha semicircular superior en sentido horario\"}},\"category\":\"So\"},{\"key\":\"21B8\",\"mappings\":{\"default\":{\"default\":\"flecha noroeste a barra larga\"}},\"category\":\"So\"},{\"key\":\"21B9\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda a barra arriba de flecha derecha a barra\"}},\"category\":\"So\"},{\"key\":\"21BA\",\"mappings\":{\"default\":{\"default\":\"flecha circular abierta en sentido antihorario\"}},\"category\":\"So\"},{\"key\":\"21BB\",\"mappings\":{\"default\":{\"default\":\"flecha circular abierta en sentido horario\"}},\"category\":\"So\"},{\"key\":\"21C4\",\"mappings\":{\"default\":{\"default\":\"flecha derecha arriba de flecha izquierda\"}},\"category\":\"So\"},{\"key\":\"21C5\",\"mappings\":{\"default\":{\"default\":\"flecha arriba a la izquierda de flecha abajo\"}},\"category\":\"So\"},{\"key\":\"21C6\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda arriba de flecha derecha\"}},\"category\":\"So\"},{\"key\":\"21C7\",\"mappings\":{\"default\":{\"default\":\"dos flechas hacia la izquierda\"}},\"category\":\"So\"},{\"key\":\"21C8\",\"mappings\":{\"default\":{\"default\":\"dos flechas hacia arriba\"}},\"category\":\"So\"},{\"key\":\"21C9\",\"mappings\":{\"default\":{\"default\":\"dos flechas\"}},\"category\":\"So\"},{\"key\":\"21CA\",\"mappings\":{\"default\":{\"default\":\"dos flechas hacia abajo\"}},\"category\":\"So\"},{\"key\":\"21CD\",\"mappings\":{\"default\":{\"default\":\"flecha doble izquierda tachada\"}},\"category\":\"So\"},{\"key\":\"21CE\",\"mappings\":{\"default\":{\"default\":\"flecha doble izquierda y derecha tachada\"}},\"category\":\"Sm\"},{\"key\":\"21CF\",\"mappings\":{\"default\":{\"default\":\"flecha doble tachada\"}},\"category\":\"Sm\"},{\"key\":\"21D0\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia la izquierda\"}},\"category\":\"So\"},{\"key\":\"21D1\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia arriba\"}},\"category\":\"So\"},{\"key\":\"21D2\",\"mappings\":{\"default\":{\"default\":\"flecha doble\"}},\"category\":\"Sm\"},{\"key\":\"21D3\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia abajo\"}},\"category\":\"So\"},{\"key\":\"21D4\",\"mappings\":{\"default\":{\"default\":\"flecha doble izquierda-derecha\"}},\"category\":\"Sm\"},{\"key\":\"21D5\",\"mappings\":{\"default\":{\"default\":\"flecha doble vertical\"}},\"category\":\"So\"},{\"key\":\"21D6\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia noroeste\"}},\"category\":\"So\"},{\"key\":\"21D7\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia nordeste\"}},\"category\":\"So\"},{\"key\":\"21D8\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia sudeste\"}},\"category\":\"So\"},{\"key\":\"21D9\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia sudoeste\"}},\"category\":\"So\"},{\"key\":\"21DA\",\"mappings\":{\"default\":{\"default\":\"flecha triple izquierda\"}},\"category\":\"So\"},{\"key\":\"21DB\",\"mappings\":{\"default\":{\"default\":\"flecha triple\"}},\"category\":\"So\"},{\"key\":\"21DC\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada izquierda\"}},\"category\":\"So\"},{\"key\":\"21DD\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada\"}},\"category\":\"So\"},{\"key\":\"21DE\",\"mappings\":{\"default\":{\"default\":\"flecha hacia arriba con doble tachado\"}},\"category\":\"So\"},{\"key\":\"21DF\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo con doble tachado\"}},\"category\":\"So\"},{\"key\":\"21E0\",\"mappings\":{\"default\":{\"default\":\"flecha de puntos hacia la izquierda\"}},\"category\":\"So\"},{\"key\":\"21E1\",\"mappings\":{\"default\":{\"default\":\"flecha de puntos hacia arriba\"}},\"category\":\"So\"},{\"key\":\"21E2\",\"mappings\":{\"default\":{\"default\":\"flecha de puntos\"}},\"category\":\"So\"},{\"key\":\"21E3\",\"mappings\":{\"default\":{\"default\":\"flecha de puntos hacia abajo\"}},\"category\":\"So\"},{\"key\":\"21E4\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda a barra\"}},\"category\":\"So\"},{\"key\":\"21E5\",\"mappings\":{\"default\":{\"default\":\"flecha derecha a barra\"}},\"category\":\"So\"},{\"key\":\"21E6\",\"mappings\":{\"default\":{\"default\":\"flecha vacía hacia la izquierda\"}},\"category\":\"So\"},{\"key\":\"21E7\",\"mappings\":{\"default\":{\"default\":\"flecha vacía hacia arriba\"}},\"category\":\"So\"},{\"key\":\"21E8\",\"mappings\":{\"default\":{\"default\":\"flecha vacía\"}},\"category\":\"So\"},{\"key\":\"21E9\",\"mappings\":{\"default\":{\"default\":\"flecha vacía hacia abajo\"}},\"category\":\"So\"},{\"key\":\"21EA\",\"mappings\":{\"default\":{\"default\":\"flecha vacía hacia arriba desde barra\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"21EB\",\"mappings\":{\"default\":{\"default\":\"flecha blanca hacia arriba en el pedestal\"}}},{\"category\":\"So\",\"key\":\"21EC\",\"mappings\":{\"default\":{\"default\":\"flecha blanca hacia arriba sobre pedestal con barra horizontal\"}}},{\"category\":\"So\",\"key\":\"21ED\",\"mappings\":{\"default\":{\"default\":\"flecha blanca hacia arriba sobre pedestal con barra vertical\"}}},{\"category\":\"So\",\"key\":\"21EE\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia arriba blanca\"}}},{\"category\":\"So\",\"key\":\"21EF\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia arriba blanca en pedestal\"}}},{\"category\":\"So\",\"key\":\"21F0\",\"mappings\":{\"default\":{\"default\":\"flecha blanca hacia la derecha de la pared\"}}},{\"category\":\"So\",\"key\":\"21F1\",\"mappings\":{\"default\":{\"default\":\"flecha del noroeste a la esquina\"}}},{\"category\":\"So\",\"key\":\"21F2\",\"mappings\":{\"default\":{\"default\":\"flecha del sudeste a la esquina\"}}},{\"category\":\"So\",\"key\":\"21F3\",\"mappings\":{\"default\":{\"default\":\"arriba abajo flecha blanca\"}}},{\"category\":\"Sm\",\"key\":\"21F4\",\"mappings\":{\"default\":{\"default\":\"flecha derecha con círculo pequeño\"}}},{\"key\":\"21F5\",\"mappings\":{\"default\":{\"default\":\"upwards arrow to the right of downwards arrow\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"21F6\",\"mappings\":{\"default\":{\"default\":\"tres flechas a la derecha\"}}},{\"category\":\"Sm\",\"key\":\"21F7\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"21F8\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"21F9\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda derecha con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"21FA\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con doble trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"21FB\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con doble trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"21FC\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda derecha con doble trazo vertical\"}}},{\"key\":\"21FD\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con punta vacía\"}},\"category\":\"Sm\"},{\"key\":\"21FE\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con punta vacía\"}},\"category\":\"Sm\"},{\"key\":\"21FF\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda derecha con punta vacía\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2301\",\"mappings\":{\"default\":{\"default\":\"flecha electrica\"}}},{\"category\":\"So\",\"key\":\"2303\",\"mappings\":{\"default\":{\"default\":\"flecha arriba\"}}},{\"category\":\"So\",\"key\":\"2304\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo\"}}},{\"category\":\"So\",\"key\":\"2324\",\"mappings\":{\"default\":{\"default\":\"flecha arriba entre dos barras horizontales\"}}},{\"category\":\"So\",\"key\":\"238B\",\"mappings\":{\"default\":{\"default\":\"círculo roto con la flecha del noroeste\"}}},{\"category\":\"So\",\"key\":\"2794\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con cabeza ancha\"}}},{\"category\":\"So\",\"key\":\"2798\",\"mappings\":{\"default\":{\"default\":\"flecha Sureste pesada\"}}},{\"category\":\"So\",\"key\":\"2799\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha pesada\"}}},{\"category\":\"So\",\"key\":\"279A\",\"mappings\":{\"default\":{\"default\":\"flecha pesada del noreste\"}}},{\"category\":\"So\",\"key\":\"279B\",\"mappings\":{\"default\":{\"default\":\"punto de dibujo Flecha hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"279C\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con punta redonda redonda\"}}},{\"category\":\"So\",\"key\":\"279D\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con forma de triángulo\"}}},{\"category\":\"So\",\"key\":\"279E\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con forma de triángulo pesado\"}}},{\"category\":\"So\",\"key\":\"279F\",\"mappings\":{\"default\":{\"default\":\"triángulo punteado hacia la flecha hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27A0\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con forma de triángulo de trazo pesado\"}}},{\"category\":\"So\",\"key\":\"27A1\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha negra\"}}},{\"category\":\"So\",\"key\":\"27A2\",\"mappings\":{\"default\":{\"default\":\"punta de flecha tridimensional hacia la derecha hacia arriba\"}}},{\"category\":\"So\",\"key\":\"27A3\",\"mappings\":{\"default\":{\"default\":\"punta de flecha hacia la derecha con iluminación inferior en tres dimensiones\"}}},{\"category\":\"So\",\"key\":\"27A4\",\"mappings\":{\"default\":{\"default\":\"punta de flecha negra hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27A5\",\"mappings\":{\"default\":{\"default\":\"pesado negro curvado hacia abajo y hacia la derecha flecha\"}}},{\"category\":\"So\",\"key\":\"27A6\",\"mappings\":{\"default\":{\"default\":\"pesado negro curvado hacia arriba y hacia la derecha flecha\"}}},{\"category\":\"So\",\"key\":\"27A7\",\"mappings\":{\"default\":{\"default\":\"squat Black Arrow hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27A8\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha de color negro cóncava puntiaguda pesada\"}}},{\"category\":\"So\",\"key\":\"27A9\",\"mappings\":{\"default\":{\"default\":\"sombra derecha flecha blanca hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27AA\",\"mappings\":{\"default\":{\"default\":\"sombra hacia la izquierda blanca a la izquierda\"}}},{\"category\":\"So\",\"key\":\"27AB\",\"mappings\":{\"default\":{\"default\":\"back-Tilted Shadowed White Right Arrow\"}}},{\"category\":\"So\",\"key\":\"27AC\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha blanca sombreada inclinada hacia delante\"}}},{\"category\":\"So\",\"key\":\"27AD\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha pesada inferior, sombreada a la derecha, blanca\"}}},{\"category\":\"So\",\"key\":\"27AE\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha blanca superior derecha sombreada pesada\"}}},{\"category\":\"So\",\"key\":\"27AF\",\"mappings\":{\"default\":{\"default\":\"con muesca, flecha derecha hacia abajo, a la derecha, hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27B1\",\"mappings\":{\"default\":{\"default\":\"con muescas, flecha derecha hacia arriba, a la derecha, hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27B2\",\"mappings\":{\"default\":{\"default\":\"círculo pesado blanco flecha hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27B3\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con plumas blancas\"}}},{\"category\":\"So\",\"key\":\"27B4\",\"mappings\":{\"default\":{\"default\":\"flecha suroriental de plumas negras\"}}},{\"category\":\"So\",\"key\":\"27B5\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con plumas negras\"}}},{\"category\":\"So\",\"key\":\"27B6\",\"mappings\":{\"default\":{\"default\":\"flecha del noreste con plumas negras\"}}},{\"category\":\"So\",\"key\":\"27B7\",\"mappings\":{\"default\":{\"default\":\"flecha suroriental con plumas negras pesadas\"}}},{\"category\":\"So\",\"key\":\"27B8\",\"mappings\":{\"default\":{\"default\":\"flecha derecha pesada con plumas negras\"}}},{\"category\":\"So\",\"key\":\"27B9\",\"mappings\":{\"default\":{\"default\":\"flecha del noreste con plumas negras pesadas\"}}},{\"category\":\"So\",\"key\":\"27BA\",\"mappings\":{\"default\":{\"default\":\"lágrima-flecha de flecha hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27BB\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con forma de lágrima pesada\"}}},{\"category\":\"So\",\"key\":\"27BC\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha de cola de cuña\"}}},{\"category\":\"So\",\"key\":\"27BD\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha de cola de cuña pesada\"}}},{\"category\":\"So\",\"key\":\"27BE\",\"mappings\":{\"default\":{\"default\":\"open-Outlined Outward Arrow\"}}},{\"key\":\"27F0\",\"mappings\":{\"default\":{\"default\":\"flecha cuádruple hacia arriba\"}},\"category\":\"Sm\"},{\"key\":\"27F1\",\"mappings\":{\"default\":{\"default\":\"flecha cuádruple hacia abajo\"}},\"category\":\"Sm\"},{\"key\":\"27F2\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda desde círculo\"}},\"category\":\"Sm\"},{\"key\":\"27F3\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha desde círculo\"}},\"category\":\"Sm\"},{\"key\":\"27F4\",\"mappings\":{\"default\":{\"default\":\"flecha con más en círculo\"}},\"category\":\"Sm\"},{\"key\":\"27F5\",\"mappings\":{\"default\":{\"default\":\"flecha larga hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"27F6\",\"mappings\":{\"default\":{\"default\":\"flecha larga\"}},\"category\":\"Sm\"},{\"key\":\"27F7\",\"mappings\":{\"default\":{\"default\":\"flecha larga hacia izquierda y derecha\"}},\"category\":\"Sm\"},{\"key\":\"27F8\",\"mappings\":{\"default\":{\"default\":\"doble flecha larga hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"27F9\",\"mappings\":{\"default\":{\"default\":\"doble flecha larga\"}},\"category\":\"Sm\"},{\"key\":\"27FA\",\"mappings\":{\"default\":{\"default\":\"doble flecha larga hacia izquierda y derecha\"}},\"category\":\"Sm\"},{\"key\":\"27FB\",\"mappings\":{\"default\":{\"default\":\"flecha larga hacia la izquierda, desde barra\"}},\"category\":\"Sm\"},{\"key\":\"27FC\",\"mappings\":{\"default\":{\"default\":\"flecha larga desde barra\"}},\"category\":\"Sm\"},{\"key\":\"27FD\",\"mappings\":{\"default\":{\"default\":\"doble flecha larga hacia la izquierda desde barra\"}},\"category\":\"Sm\"},{\"key\":\"27FE\",\"mappings\":{\"default\":{\"default\":\"doble flecha larga desde barra\"}},\"category\":\"Sm\"},{\"key\":\"27FF\",\"mappings\":{\"default\":{\"default\":\"flecha larga en zigzag\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2900\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la derecha con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2901\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la derecha con doble movimiento vertical\"}}},{\"category\":\"Sm\",\"key\":\"2902\",\"mappings\":{\"default\":{\"default\":\"doble flecha hacia la izquierda con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2903\",\"mappings\":{\"default\":{\"default\":\"doble flecha hacia la derecha con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2904\",\"mappings\":{\"default\":{\"default\":\"izquierda Derecha Doble Flecha con Trazo Vertical\"}}},{\"key\":\"2905\",\"mappings\":{\"default\":{\"default\":\"rightwards two headed arrow from bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2906\",\"mappings\":{\"default\":{\"default\":\"doble flecha hacia la izquierda de la barra\"}}},{\"category\":\"Sm\",\"key\":\"2907\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia la derecha de la barra\"}}},{\"category\":\"Sm\",\"key\":\"2908\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo con trazo horizontal\"}}},{\"category\":\"Sm\",\"key\":\"2909\",\"mappings\":{\"default\":{\"default\":\"flecha hacia arriba con trazo horizontal\"}}},{\"category\":\"Sm\",\"key\":\"290A\",\"mappings\":{\"default\":{\"default\":\"flecha triple hacia arriba\"}}},{\"category\":\"Sm\",\"key\":\"290B\",\"mappings\":{\"default\":{\"default\":\"triple flecha hacia abajo\"}}},{\"key\":\"290C\",\"mappings\":{\"default\":{\"default\":\"leftwards double dash arrow\"}},\"category\":\"Sm\"},{\"key\":\"290D\",\"mappings\":{\"default\":{\"default\":\"rightwards double dash arrow\"}},\"category\":\"Sm\"},{\"key\":\"290E\",\"mappings\":{\"default\":{\"default\":\"leftwards triple dash arrow\"}},\"category\":\"Sm\"},{\"key\":\"290F\",\"mappings\":{\"default\":{\"default\":\"rightwards triple dash arrow\"}},\"category\":\"Sm\"},{\"key\":\"2910\",\"mappings\":{\"default\":{\"default\":\"rightwards two headed triple dash arrow\"}},\"category\":\"Sm\"},{\"key\":\"2911\",\"mappings\":{\"default\":{\"default\":\"rightwards arrow with dotted stem\"}},\"category\":\"Sm\"},{\"key\":\"2912\",\"mappings\":{\"default\":{\"default\":\"upwards arrow to bar\"}},\"category\":\"Sm\"},{\"key\":\"2913\",\"mappings\":{\"default\":{\"default\":\"downwards arrow to bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2914\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con cola con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2915\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con la cola con doble trazo vertical\"}}},{\"key\":\"2916\",\"mappings\":{\"default\":{\"default\":\"rightwards two headed arrow with tail\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2917\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la derecha con cola con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2918\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la derecha con cola con doble movimiento vertical\"}}},{\"key\":\"2919\",\"mappings\":{\"default\":{\"default\":\"cola de flecha hacia la izquierda\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"291A\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha\"}}},{\"key\":\"291B\",\"mappings\":{\"default\":{\"default\":\"cola de doble flecha hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"291C\",\"mappings\":{\"default\":{\"default\":\"cola de doble flecha hacia la derecha\"}},\"category\":\"Sm\"},{\"key\":\"291D\",\"mappings\":{\"default\":{\"default\":\"flecha hacia diamante relleno a la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"291E\",\"mappings\":{\"default\":{\"default\":\"flecha hacia diamante a la derecha\"}},\"category\":\"Sm\"},{\"key\":\"291F\",\"mappings\":{\"default\":{\"default\":\"flecha desde barra hacia diamante a la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"2920\",\"mappings\":{\"default\":{\"default\":\"flecha desde barra hacia diamante a la derecha\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2921\",\"mappings\":{\"default\":{\"default\":\"flechas del noroeste y sureste\"}}},{\"category\":\"Sm\",\"key\":\"2922\",\"mappings\":{\"default\":{\"default\":\"flecha noreste y sudoeste\"}}},{\"key\":\"2923\",\"mappings\":{\"default\":{\"default\":\"flecha a noroeste con garfio\"}},\"category\":\"Sm\"},{\"key\":\"2924\",\"mappings\":{\"default\":{\"default\":\"flecha a nordeste con garfio\"}},\"category\":\"Sm\"},{\"key\":\"2925\",\"mappings\":{\"default\":{\"default\":\"flecha a sureste con garfio\"}},\"category\":\"Sm\"},{\"key\":\"2926\",\"mappings\":{\"default\":{\"default\":\"flecha a suroeste con garfio\"}},\"category\":\"Sm\"},{\"key\":\"2927\",\"mappings\":{\"default\":{\"default\":\"flechas a noroeste y nordeste\"}},\"category\":\"Sm\"},{\"key\":\"2928\",\"mappings\":{\"default\":{\"default\":\"flechas a nordeste y sudeste\"}},\"category\":\"Sm\"},{\"key\":\"2929\",\"mappings\":{\"default\":{\"default\":\"flechas a suddeste y sudoeste\"}},\"category\":\"Sm\"},{\"key\":\"292A\",\"mappings\":{\"default\":{\"default\":\"flechas a sudoeste y noroeste\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"292D\",\"mappings\":{\"default\":{\"default\":\"flecha Sureste Cruzando Flecha Noreste\"}}},{\"category\":\"Sm\",\"key\":\"292E\",\"mappings\":{\"default\":{\"default\":\"north East Arrow Crossing South East Arrow\"}}},{\"category\":\"Sm\",\"key\":\"292F\",\"mappings\":{\"default\":{\"default\":\"caída en diagonal que cruza la flecha noreste\"}}},{\"category\":\"Sm\",\"key\":\"2930\",\"mappings\":{\"default\":{\"default\":\"creciente Cruce de la Cruz del Sureste de la Flecha\"}}},{\"category\":\"Sm\",\"key\":\"2931\",\"mappings\":{\"default\":{\"default\":\"north East Arrow Crossing North West Arrow\"}}},{\"category\":\"Sm\",\"key\":\"2932\",\"mappings\":{\"default\":{\"default\":\"north West Arrow Crossing North East Arrow\"}}},{\"key\":\"2933\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2934\",\"mappings\":{\"default\":{\"default\":\"flecha que apunta hacia la derecha y luego curva hacia arriba\"}}},{\"key\":\"2935\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha que gira hacia abajo\"}},\"category\":\"Sm\"},{\"key\":\"2936\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo que gira hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"2937\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo que gira hacia la derecha\"}},\"category\":\"Sm\"},{\"key\":\"2938\",\"mappings\":{\"default\":{\"default\":\"flecha semicircular a la derecha en sentido horario\"}},\"category\":\"Sm\"},{\"key\":\"2939\",\"mappings\":{\"default\":{\"default\":\"flecha semicircular a la izquierda en sentido antihorario\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"293A\",\"mappings\":{\"default\":{\"default\":\"arco superior flecha hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"293B\",\"mappings\":{\"default\":{\"default\":\"arco inferior flecha hacia la izquierda\"}}},{\"key\":\"293C\",\"mappings\":{\"default\":{\"default\":\"giro negativo\"}},\"category\":\"Sm\"},{\"key\":\"293D\",\"mappings\":{\"default\":{\"default\":\"giro positivo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"293E\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha semicircular inferior derecha\"}}},{\"category\":\"Sm\",\"key\":\"293F\",\"mappings\":{\"default\":{\"default\":\"flecha inferior izquierda semicircular en sentido antihorario\"}}},{\"category\":\"Sm\",\"key\":\"2940\",\"mappings\":{\"default\":{\"default\":\"círculo cerrado en sentido contrario a las agujas del reloj\"}}},{\"category\":\"Sm\",\"key\":\"2941\",\"mappings\":{\"default\":{\"default\":\"círculo cerrado en el sentido de las agujas del reloj\"}}},{\"category\":\"Sm\",\"key\":\"2942\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha sobre la flecha corta hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2943\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda sobre la flecha corta hacia la derecha\"}}},{\"category\":\"Sm\",\"key\":\"2944\",\"mappings\":{\"default\":{\"default\":\"flecha corta hacia la derecha arriba flecha hacia la izquierda\"}}},{\"key\":\"2945\",\"mappings\":{\"default\":{\"default\":\"flecha con más suscrito\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2946\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con más abajo\"}}},{\"category\":\"Sm\",\"key\":\"2947\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha a través de X\"}}},{\"key\":\"2948\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda a través de círculo\"}},\"category\":\"Sm\"},{\"key\":\"2949\",\"mappings\":{\"default\":{\"default\":\"dos cabezas de flecha hacia arriba desde círculo\"}},\"category\":\"Sm\"},{\"key\":\"2970\",\"mappings\":{\"default\":{\"default\":\"round implies\"}},\"category\":\"Sm\"},{\"key\":\"2971\",\"mappings\":{\"default\":{\"default\":\"flecha con igual\"}},\"category\":\"Sm\"},{\"key\":\"2972\",\"mappings\":{\"default\":{\"default\":\"flecha con tilde\"}},\"category\":\"Sm\"},{\"key\":\"2973\",\"mappings\":{\"default\":{\"default\":\"tilde con flecha hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"2974\",\"mappings\":{\"default\":{\"default\":\"tilde con flecha\"}},\"category\":\"Sm\"},{\"key\":\"2975\",\"mappings\":{\"default\":{\"default\":\"flecha con casi igual a\"}},\"category\":\"Sm\"},{\"key\":\"2976\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con menor que\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2977\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda a través de menos de\"}}},{\"key\":\"2978\",\"mappings\":{\"default\":{\"default\":\"flecha con mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2979\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con incluido\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"297A\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda a través del subconjunto\"}}},{\"key\":\"297B\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con contiene\"}},\"category\":\"Sm\"},{\"key\":\"29B3\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío con flecha\"}},\"category\":\"Sm\"},{\"key\":\"29B4\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío con flecha inversa\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29BD\",\"mappings\":{\"default\":{\"default\":\"flecha arriba a través del círculo\"}}},{\"category\":\"Sm\",\"key\":\"29EA\",\"mappings\":{\"default\":{\"default\":\"diamante negro con flecha hacia abajo\"}}},{\"category\":\"Sm\",\"key\":\"29EC\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con flecha hacia abajo\"}}},{\"category\":\"Sm\",\"key\":\"29ED\",\"mappings\":{\"default\":{\"default\":\"círculo negro con flecha hacia abajo\"}}},{\"key\":\"2A17\",\"mappings\":{\"default\":{\"default\":\"integral con flecha hacia la izquierda con garfio\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2B00\",\"mappings\":{\"default\":{\"default\":\"flecha blanca del noreste\"}}},{\"category\":\"So\",\"key\":\"2B01\",\"mappings\":{\"default\":{\"default\":\"flecha blanca del noroeste\"}}},{\"category\":\"So\",\"key\":\"2B02\",\"mappings\":{\"default\":{\"default\":\"flecha blanca del sureste\"}}},{\"category\":\"So\",\"key\":\"2B03\",\"mappings\":{\"default\":{\"default\":\"sudoeste flecha blanca\"}}},{\"category\":\"So\",\"key\":\"2B04\",\"mappings\":{\"default\":{\"default\":\"izquierda derecha flecha blanca\"}}},{\"category\":\"So\",\"key\":\"2B05\",\"mappings\":{\"default\":{\"default\":\"flecha negra hacia la izquierda\"}}},{\"category\":\"So\",\"key\":\"2B06\",\"mappings\":{\"default\":{\"default\":\"flecha negra hacia arriba\"}}},{\"category\":\"So\",\"key\":\"2B07\",\"mappings\":{\"default\":{\"default\":\"flecha negra hacia abajo\"}}},{\"category\":\"So\",\"key\":\"2B08\",\"mappings\":{\"default\":{\"default\":\"flecha negra del noreste\"}}},{\"category\":\"So\",\"key\":\"2B09\",\"mappings\":{\"default\":{\"default\":\"flecha negra del noroeste\"}}},{\"category\":\"So\",\"key\":\"2B0A\",\"mappings\":{\"default\":{\"default\":\"flecha negra sur este\"}}},{\"category\":\"So\",\"key\":\"2B0B\",\"mappings\":{\"default\":{\"default\":\"sudoeste flecha negra\"}}},{\"category\":\"So\",\"key\":\"2B0C\",\"mappings\":{\"default\":{\"default\":\"izquierda derecha flecha negra\"}}},{\"category\":\"So\",\"key\":\"2B0D\",\"mappings\":{\"default\":{\"default\":\"arriba abajo flecha negra\"}}},{\"category\":\"So\",\"key\":\"2B0E\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con la punta hacia abajo\"}}},{\"category\":\"So\",\"key\":\"2B0F\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con la punta hacia arriba\"}}},{\"category\":\"So\",\"key\":\"2B10\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con la punta hacia abajo\"}}},{\"category\":\"So\",\"key\":\"2B11\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con la punta hacia arriba\"}}},{\"category\":\"Sm\",\"key\":\"2B30\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con círculo pequeño\"}}},{\"category\":\"Sm\",\"key\":\"2B31\",\"mappings\":{\"default\":{\"default\":\"tres flechas a la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B32\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con un círculo más\"}}},{\"category\":\"Sm\",\"key\":\"2B33\",\"mappings\":{\"default\":{\"default\":\"flecha de flecha larga hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B34\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B35\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda con doble movimiento vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B36\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda de la barra\"}}},{\"category\":\"Sm\",\"key\":\"2B37\",\"mappings\":{\"default\":{\"default\":\"flecha triple de dos cabezas hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B38\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con tallo punteado\"}}},{\"category\":\"Sm\",\"key\":\"2B39\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con cola con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B3A\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con cola con doble trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B3B\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda con cola\"}}},{\"category\":\"Sm\",\"key\":\"2B3C\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda con cola con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B3D\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda con cola con doble movimiento vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B3E\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda a través de X\"}}},{\"category\":\"Sm\",\"key\":\"2B3F\",\"mappings\":{\"default\":{\"default\":\"ola flecha apuntando directamente a la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B40\",\"mappings\":{\"default\":{\"default\":\"signo de igual flecha arriba a la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B41\",\"mappings\":{\"default\":{\"default\":\"operador de tilde inverso sobre la flecha hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B42\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda sobre el reverso casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2B43\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha a través de mayor-que\"}}},{\"category\":\"Sm\",\"key\":\"2B44\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha a través de Superset\"}}},{\"category\":\"So\",\"key\":\"2B45\",\"mappings\":{\"default\":{\"default\":\"flecha cuádruple hacia la izquierda\"}}},{\"category\":\"So\",\"key\":\"2B46\",\"mappings\":{\"default\":{\"default\":\"flecha cuádruple hacia la derecha\"}}},{\"category\":\"Sm\",\"key\":\"2B47\",\"mappings\":{\"default\":{\"default\":\"operador de tilde inverso sobre la flecha hacia la derecha\"}}},{\"category\":\"Sm\",\"key\":\"2B48\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha sobre el reverso casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2B49\",\"mappings\":{\"default\":{\"default\":\"operador de tilde sobre la flecha hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B4A\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda por encima de casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2B4B\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda sobre el operador de tilde inverso\"}}},{\"category\":\"Sm\",\"key\":\"2B4C\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha sobre el operador de tilde inverso\"}}},{\"category\":\"Sm\",\"key\":\"FFE9\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda de medio ancho\"}}},{\"category\":\"Sm\",\"key\":\"FFEA\",\"mappings\":{\"default\":{\"default\":\"flecha ascendente de medio ancho\"}}},{\"category\":\"Sm\",\"key\":\"FFEB\",\"mappings\":{\"default\":{\"default\":\"flecha de medio ancho hacia la derecha\"}}},{\"category\":\"Sm\",\"key\":\"FFEC\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo de medio ancho\"}}}]\n,\n\"es/symbols/math_characters.js\": \n[{\"locale\":\"es\"},{\"key\":\"2113\",\"mappings\":{\"default\":{\"default\":\"script l\"}},\"category\":\"Ll\"},{\"key\":\"2118\",\"mappings\":{\"default\":{\"default\":\"p de weierstrass\"}},\"category\":\"Sm\"},{\"category\":\"Ll\",\"key\":\"213C\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra pi\"}}},{\"category\":\"Ll\",\"key\":\"213D\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra gamma\"}}},{\"category\":\"Lu\",\"key\":\"213E\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra mayúscula Gamma\"}}},{\"category\":\"Lu\",\"key\":\"213F\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra mayúscula Pi\"}}},{\"category\":\"Sm\",\"key\":\"2140\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra suma de n-ary\"}}},{\"key\":\"2145\",\"mappings\":{\"default\":{\"default\":\"mayúscula D\"}},\"category\":\"Lu\"},{\"key\":\"2146\",\"mappings\":{\"default\":{\"default\":\"d\"}},\"category\":\"Ll\"},{\"key\":\"2147\",\"mappings\":{\"default\":{\"default\":\"e\"}},\"category\":\"Ll\"},{\"key\":\"2148\",\"mappings\":{\"default\":{\"default\":\"i\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"2149\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra cursiva j\"}}},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"cursiva sin punto i\"}},\"key\":\"1D6A4\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"cursiva sin punto j\"}},\"key\":\"1D6A5\"}]\n,\n\"es/symbols/math_delimiters.js\": \n[{\"locale\":\"es\"},{\"key\":\"0028\",\"mappings\":{\"default\":{\"default\":\"paréntesis izquierdo\",\"defaultMP\":\"paréntesis\"}},\"category\":\"Ps\"},{\"key\":\"0029\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho\",\"defaultMP\":\"cierra paréntesis\"}},\"category\":\"Pe\"},{\"key\":\"005B\",\"mappings\":{\"default\":{\"default\":\"corchete izquierdo\",\"defaultMP\":\"abre corchetes\"}},\"category\":\"Ps\"},{\"key\":\"005D\",\"mappings\":{\"default\":{\"default\":\"corchete derecho\",\"defaultMP\":\"cierra corchetes\"}},\"category\":\"Pe\"},{\"key\":\"007B\",\"mappings\":{\"default\":{\"default\":\"llave izquierda\",\"defaultMP\":\"abre llaves\"}},\"category\":\"Ps\"},{\"key\":\"007D\",\"mappings\":{\"default\":{\"default\":\"llaves derecha\",\"defaultMP\":\"cierra llaves\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2045\",\"mappings\":{\"default\":{\"default\":\"soporte cuadrado izquierdo con pluma\"}}},{\"category\":\"Pe\",\"key\":\"2046\",\"mappings\":{\"default\":{\"default\":\"soporte cuadrado derecho con pluma\"}}},{\"key\":\"2308\",\"mappings\":{\"default\":{\"default\":\"esquina superior izquierda\"}},\"category\":\"Sm\"},{\"key\":\"2309\",\"mappings\":{\"default\":{\"default\":\"esquina superior derecha\"}},\"category\":\"Sm\"},{\"key\":\"230A\",\"mappings\":{\"default\":{\"default\":\"esquina inferior izquierda\"}},\"category\":\"Sm\"},{\"key\":\"230B\",\"mappings\":{\"default\":{\"default\":\"esquina inferior derecha\"}},\"category\":\"Sm\"},{\"key\":\"230C\",\"mappings\":{\"default\":{\"default\":\"corte inferior derecho\"}},\"category\":\"So\"},{\"key\":\"230D\",\"mappings\":{\"default\":{\"default\":\"corte inferior izquierdo\"}},\"category\":\"So\"},{\"key\":\"230E\",\"mappings\":{\"default\":{\"default\":\"corte superior derecho \"}},\"category\":\"So\"},{\"key\":\"230F\",\"mappings\":{\"default\":{\"default\":\"corte superior izquierdo\"}},\"category\":\"So\"},{\"key\":\"231C\",\"mappings\":{\"default\":{\"default\":\"ángulo superior izquierdo\"}},\"category\":\"So\"},{\"key\":\"231D\",\"mappings\":{\"default\":{\"default\":\"ángulo superior derecho\"}},\"category\":\"So\"},{\"key\":\"231E\",\"mappings\":{\"default\":{\"default\":\"ángulo inferior izquierdo\"}},\"category\":\"So\"},{\"key\":\"231F\",\"mappings\":{\"default\":{\"default\":\"ángulo inferior derecho\"}},\"category\":\"So\"},{\"key\":\"2320\",\"mappings\":{\"default\":{\"default\":\"mitad superior de integral\"}},\"category\":\"Sm\"},{\"key\":\"2321\",\"mappings\":{\"default\":{\"default\":\"mitad inferior de integral\"}},\"category\":\"Sm\"},{\"key\":\"2329\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"232A\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular derecho\"}},\"category\":\"Pe\"},{\"category\":\"Sm\",\"key\":\"239B\",\"mappings\":{\"default\":{\"default\":\"paréntesis izquierdo gancho superior\"}}},{\"category\":\"Sm\",\"key\":\"239C\",\"mappings\":{\"default\":{\"default\":\"extensión del paréntesis izquierdo\"}}},{\"category\":\"Sm\",\"key\":\"239D\",\"mappings\":{\"default\":{\"default\":\"paréntesis inferior gancho inferior\"}}},{\"category\":\"Sm\",\"key\":\"239E\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho gancho superior\"}}},{\"category\":\"Sm\",\"key\":\"239F\",\"mappings\":{\"default\":{\"default\":\"extensión del paréntesis derecho\"}}},{\"category\":\"Sm\",\"key\":\"23A0\",\"mappings\":{\"default\":{\"default\":\"paréntesis inferior gancho inferior\"}}},{\"category\":\"Sm\",\"key\":\"23A1\",\"mappings\":{\"default\":{\"default\":\"esquina cuadrada izquierda esquina superior\"}}},{\"category\":\"Sm\",\"key\":\"23A2\",\"mappings\":{\"default\":{\"default\":\"extensión del soporte cuadrado izquierdo\"}}},{\"category\":\"Sm\",\"key\":\"23A3\",\"mappings\":{\"default\":{\"default\":\"esquina cuadrada izquierda esquina inferior\"}}},{\"category\":\"Sm\",\"key\":\"23A4\",\"mappings\":{\"default\":{\"default\":\"esquina cuadrada derecha esquina superior\"}}},{\"category\":\"Sm\",\"key\":\"23A5\",\"mappings\":{\"default\":{\"default\":\"extensión de soporte cuadrado derecho\"}}},{\"category\":\"Sm\",\"key\":\"23A6\",\"mappings\":{\"default\":{\"default\":\"esquina cuadrada derecha esquina inferior\"}}},{\"category\":\"Sm\",\"key\":\"23A7\",\"mappings\":{\"default\":{\"default\":\"gancho superior rizado izquierdo\"}}},{\"category\":\"Sm\",\"key\":\"23A8\",\"mappings\":{\"default\":{\"default\":\"pedazo medio rizado izquierdo\"}}},{\"category\":\"Sm\",\"key\":\"23A9\",\"mappings\":{\"default\":{\"default\":\"soporte izquierdo rizado gancho inferior\"}}},{\"category\":\"Sm\",\"key\":\"23AA\",\"mappings\":{\"default\":{\"default\":\"extensión de soporte rizado\"}}},{\"category\":\"Sm\",\"key\":\"23AB\",\"mappings\":{\"default\":{\"default\":\"gancho superior rizado derecho\"}}},{\"category\":\"Sm\",\"key\":\"23AC\",\"mappings\":{\"default\":{\"default\":\"pedazo medio de soporte rizado derecho\"}}},{\"category\":\"Sm\",\"key\":\"23AD\",\"mappings\":{\"default\":{\"default\":\"abrazadera inferior derecha rizado\"}}},{\"category\":\"Sm\",\"key\":\"23AE\",\"mappings\":{\"default\":{\"default\":\"extensión integral\"}}},{\"category\":\"Sm\",\"key\":\"23AF\",\"mappings\":{\"default\":{\"default\":\"extensión de línea horizontal\"}}},{\"key\":\"23B0\",\"mappings\":{\"default\":{\"default\":\"izquierda arriba o derecho debajo sección llave\"}},\"category\":\"Sm\"},{\"key\":\"23B1\",\"mappings\":{\"default\":{\"default\":\"derecha arriba o izquierdo debajo sección llave\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"23B2\",\"mappings\":{\"default\":{\"default\":\"suma superior\"}}},{\"category\":\"Sm\",\"key\":\"23B3\",\"mappings\":{\"default\":{\"default\":\"parte inferior de la suma\"}}},{\"key\":\"23B4\",\"mappings\":{\"default\":{\"default\":\"corchete superior\"}},\"category\":\"So\"},{\"key\":\"23B5\",\"mappings\":{\"default\":{\"default\":\"corchete inferior\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"23B6\",\"mappings\":{\"default\":{\"default\":\"soporte cuadrado inferior sobre soporte cuadrado superior\"}}},{\"category\":\"So\",\"key\":\"23B7\",\"mappings\":{\"default\":{\"default\":\"parte inferior del símbolo radical\"}}},{\"category\":\"So\",\"key\":\"23B8\",\"mappings\":{\"default\":{\"default\":\"línea de caja vertical izquierda\"}}},{\"category\":\"So\",\"key\":\"23B9\",\"mappings\":{\"default\":{\"default\":\"línea de caja vertical derecha\"}}},{\"key\":\"23DC\",\"mappings\":{\"default\":{\"default\":\"paréntesis superior\"}},\"category\":\"Sm\"},{\"key\":\"23DD\",\"mappings\":{\"default\":{\"default\":\"paréntesis inferior\"}},\"category\":\"Sm\"},{\"key\":\"23DE\",\"mappings\":{\"default\":{\"default\":\"corchete rizado superior\"}},\"category\":\"Sm\"},{\"key\":\"23DF\",\"mappings\":{\"default\":{\"default\":\"corchete rizado inferior\"}},\"category\":\"Sm\"},{\"key\":\"23E0\",\"mappings\":{\"default\":{\"default\":\"corchete superior en tortuga\"}},\"category\":\"Sm\"},{\"key\":\"23E1\",\"mappings\":{\"default\":{\"default\":\"corchete inferior en tortuga\"}},\"category\":\"Sm\"},{\"category\":\"Ps\",\"key\":\"2768\",\"mappings\":{\"default\":{\"default\":\"ornamento de paréntesis izquierdo medio\"}}},{\"category\":\"Pe\",\"key\":\"2769\",\"mappings\":{\"default\":{\"default\":\"adorno de paréntesis medio derecho\"}}},{\"category\":\"Ps\",\"key\":\"276A\",\"mappings\":{\"default\":{\"default\":\"adorno paréntesis izquierdo aplanado medio\"}}},{\"category\":\"Pe\",\"key\":\"276B\",\"mappings\":{\"default\":{\"default\":\"adorno paréntesis derecho medio aplanado\"}}},{\"category\":\"Ps\",\"key\":\"276C\",\"mappings\":{\"default\":{\"default\":\"adorno de soporte de ángulo medio apuntando hacia la izquierda\"}}},{\"category\":\"Pe\",\"key\":\"276D\",\"mappings\":{\"default\":{\"default\":\"adorno de soporte de ángulo medio apuntando hacia la derecha\"}}},{\"category\":\"Ps\",\"key\":\"276E\",\"mappings\":{\"default\":{\"default\":\"ornamento de comillas en el ángulo que apunta hacia la izquierda\"}}},{\"category\":\"Pe\",\"key\":\"276F\",\"mappings\":{\"default\":{\"default\":\"ornamento de comillas en ángulo recto que apunta hacia la derecha\"}}},{\"category\":\"Ps\",\"key\":\"2770\",\"mappings\":{\"default\":{\"default\":\"ornamento pesado del soporte del ángulo que señala a la izquierda\"}}},{\"category\":\"Pe\",\"key\":\"2771\",\"mappings\":{\"default\":{\"default\":\"ornamento pesado del soporte del ángulo que señala hacia la derecha\"}}},{\"category\":\"Ps\",\"key\":\"2772\",\"mappings\":{\"default\":{\"default\":\"ornamento de soporte de concha de tortuga izquierda ligera\"}}},{\"category\":\"Pe\",\"key\":\"2773\",\"mappings\":{\"default\":{\"default\":\"ornamento de corchete derecho tortuga derecha\"}}},{\"category\":\"Ps\",\"key\":\"2774\",\"mappings\":{\"default\":{\"default\":\"ornamento de soporte rizado izquierdo medio\"}}},{\"category\":\"Pe\",\"key\":\"2775\",\"mappings\":{\"default\":{\"default\":\"ornamento de soporte rizado derecho medio\"}}},{\"key\":\"27C5\",\"mappings\":{\"default\":{\"default\":\"símbolo delimitador izquierdo de bolsa de s-formó\"}},\"category\":\"Ps\"},{\"key\":\"27C6\",\"mappings\":{\"default\":{\"default\":\"símbolo delimitador derecho de bolsa de s-formó\"}},\"category\":\"Pe\"},{\"key\":\"27E6\",\"mappings\":{\"default\":{\"default\":\"corchete vacío izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"27E7\",\"mappings\":{\"default\":{\"default\":\"corchete vacío derecho\"}},\"category\":\"Pe\"},{\"key\":\"27E8\",\"mappings\":{\"default\":{\"default\":\"corchete agudo izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"27E9\",\"mappings\":{\"default\":{\"default\":\"corchete agudo derecho\"}},\"category\":\"Pe\"},{\"key\":\"27EA\",\"mappings\":{\"default\":{\"default\":\"doble corchete agudo izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"27EB\",\"mappings\":{\"default\":{\"default\":\"doble corchete agudo derecho\"}},\"category\":\"Pe\"},{\"key\":\"27EC\",\"mappings\":{\"default\":{\"default\":\"corchete de tortuga vacío izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"27ED\",\"mappings\":{\"default\":{\"default\":\"corchete de tortuga vacío derecho \"}},\"category\":\"Pe\"},{\"key\":\"27EE\",\"mappings\":{\"default\":{\"default\":\"paréntesis plano izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"27EF\",\"mappings\":{\"default\":{\"default\":\"paréntesis plano derecho\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2983\",\"mappings\":{\"default\":{\"default\":\"soporte rizado blanco izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"2984\",\"mappings\":{\"default\":{\"default\":\"derecha rizado blanco soporte\"}}},{\"key\":\"2985\",\"mappings\":{\"default\":{\"default\":\"left white paren\"}},\"category\":\"Ps\"},{\"key\":\"2986\",\"mappings\":{\"default\":{\"default\":\"right white paren\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2987\",\"mappings\":{\"default\":{\"default\":\"notación Z izquierda soporte de imagen\"}}},{\"category\":\"Pe\",\"key\":\"2988\",\"mappings\":{\"default\":{\"default\":\"corchete de imagen derecha de notación Z\"}}},{\"key\":\"2989\",\"mappings\":{\"default\":{\"default\":\"z notation left binding bracket\"}},\"category\":\"Ps\"},{\"key\":\"298A\",\"mappings\":{\"default\":{\"default\":\"z notation right binding bracket\"}},\"category\":\"Pe\"},{\"key\":\"298B\",\"mappings\":{\"default\":{\"default\":\"left bracket with underbar\"}},\"category\":\"Ps\"},{\"key\":\"298C\",\"mappings\":{\"default\":{\"default\":\"right bracket with underbar\"}},\"category\":\"Pe\"},{\"key\":\"298D\",\"mappings\":{\"default\":{\"default\":\"left bracket with tick in top corner\"}},\"category\":\"Ps\"},{\"key\":\"298E\",\"mappings\":{\"default\":{\"default\":\"right bracket with tick in bottom corner\"}},\"category\":\"Pe\"},{\"key\":\"298F\",\"mappings\":{\"default\":{\"default\":\"left bracket with tick in bottom corner\"}},\"category\":\"Ps\"},{\"key\":\"2990\",\"mappings\":{\"default\":{\"default\":\"right bracket with tick in top corner\"}},\"category\":\"Pe\"},{\"key\":\"2991\",\"mappings\":{\"default\":{\"default\":\"left angle bracket with dot\"}},\"category\":\"Ps\"},{\"key\":\"2992\",\"mappings\":{\"default\":{\"default\":\"right angle bracket with dot\"}},\"category\":\"Pe\"},{\"key\":\"2993\",\"mappings\":{\"default\":{\"default\":\"left arc less than bracket\"}},\"category\":\"Ps\"},{\"key\":\"2994\",\"mappings\":{\"default\":{\"default\":\"right arc greater than bracket\"}},\"category\":\"Pe\"},{\"key\":\"2995\",\"mappings\":{\"default\":{\"default\":\"double left arc greater than bracket\"}},\"category\":\"Ps\"},{\"key\":\"2996\",\"mappings\":{\"default\":{\"default\":\"double right arc less than bracket\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2997\",\"mappings\":{\"default\":{\"default\":\"soporte de concha de tortuga negra izquierda\"}}},{\"category\":\"Pe\",\"key\":\"2998\",\"mappings\":{\"default\":{\"default\":\"abrazadera de concha de tortuga negra derecha\"}}},{\"category\":\"Ps\",\"key\":\"29D8\",\"mappings\":{\"default\":{\"default\":\"valla izquierda ondulada\"}}},{\"category\":\"Pe\",\"key\":\"29D9\",\"mappings\":{\"default\":{\"default\":\"valla derecha ondulada\"}}},{\"key\":\"29DA\",\"mappings\":{\"default\":{\"default\":\"left double wiggly fence\"}},\"category\":\"Ps\"},{\"key\":\"29DB\",\"mappings\":{\"default\":{\"default\":\"right double wiggly fence\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"29FC\",\"mappings\":{\"default\":{\"default\":\"abrazadera de ángulo curvo a la izquierda\"}}},{\"category\":\"Pe\",\"key\":\"29FD\",\"mappings\":{\"default\":{\"default\":\"abrazadera de ángulo curvo orientada hacia la derecha\"}}},{\"category\":\"Ps\",\"key\":\"2E22\",\"mappings\":{\"default\":{\"default\":\"soporte superior izquierdo superior\"}}},{\"category\":\"Pe\",\"key\":\"2E23\",\"mappings\":{\"default\":{\"default\":\"medio soporte superior derecho\"}}},{\"category\":\"Ps\",\"key\":\"2E24\",\"mappings\":{\"default\":{\"default\":\"abrazadera inferior izquierda\"}}},{\"category\":\"Pe\",\"key\":\"2E25\",\"mappings\":{\"default\":{\"default\":\"medio soporte inferior derecho\"}}},{\"category\":\"Ps\",\"key\":\"2E26\",\"mappings\":{\"default\":{\"default\":\"soporte U lateral izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"2E27\",\"mappings\":{\"default\":{\"default\":\"lado derecho U soporte\"}}},{\"category\":\"Ps\",\"key\":\"2E28\",\"mappings\":{\"default\":{\"default\":\"doble paréntesis izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"2E29\",\"mappings\":{\"default\":{\"default\":\"paréntesis doble derecho\"}}},{\"category\":\"Ps\",\"key\":\"3008\",\"mappings\":{\"default\":{\"default\":\"soporte de ángulo izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"3009\",\"mappings\":{\"default\":{\"default\":\"soporte de ángulo recto\"}}},{\"key\":\"300A\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular doble\"}},\"category\":\"Ps\"},{\"key\":\"300B\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular doble derecho\",\"defaultMP\":\"cierra paréntesis angular doble\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"300C\",\"mappings\":{\"default\":{\"default\":\"soporte de la esquina izquierda\"}}},{\"category\":\"Pe\",\"key\":\"300D\",\"mappings\":{\"default\":{\"default\":\"soporte de esquina derecha\"}}},{\"category\":\"Ps\",\"key\":\"300E\",\"mappings\":{\"default\":{\"default\":\"soporte de esquina blanco izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"300F\",\"mappings\":{\"default\":{\"default\":\"soporte de esquina blanco derecho\"}}},{\"category\":\"Ps\",\"key\":\"3010\",\"mappings\":{\"default\":{\"default\":\"soporte Lenticular Izquierdo Negro\"}}},{\"category\":\"Pe\",\"key\":\"3011\",\"mappings\":{\"default\":{\"default\":\"soporte Lenticular Negro Derecho\"}}},{\"key\":\"3014\",\"mappings\":{\"default\":{\"default\":\"left tortoise shell bracket\"}},\"category\":\"Ps\"},{\"key\":\"3015\",\"mappings\":{\"default\":{\"default\":\"right tortoise shell bracket\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"3016\",\"mappings\":{\"default\":{\"default\":\"soporte lenticular blanco izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"3017\",\"mappings\":{\"default\":{\"default\":\"soporte lenticular blanco derecho\"}}},{\"category\":\"Ps\",\"key\":\"3018\",\"mappings\":{\"default\":{\"default\":\"soporte de caparazón de tortuga blanca izquierda\"}}},{\"category\":\"Pe\",\"key\":\"3019\",\"mappings\":{\"default\":{\"default\":\"soporte de concha de tortuga blanca derecha\"}}},{\"key\":\"301A\",\"mappings\":{\"default\":{\"default\":\"corchete vacío\"}},\"category\":\"Ps\"},{\"key\":\"301B\",\"mappings\":{\"default\":{\"default\":\"corchete vacío derecho\",\"defaultMP\":\"cierra corchete vacío\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"301D\",\"mappings\":{\"default\":{\"default\":\"comilla doble invertida\"}}},{\"key\":\"301E\",\"mappings\":{\"default\":{\"default\":\"segunda\"}},\"category\":\"Pe\"},{\"category\":\"Pe\",\"key\":\"301F\",\"mappings\":{\"default\":{\"default\":\"comillas bajas dobles\"}}},{\"category\":\"Ps\",\"key\":\"FD3E\",\"mappings\":{\"default\":{\"default\":\"paréntesis izquierdo adornado\"}}},{\"category\":\"Pe\",\"key\":\"FD3F\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho adornado\"}}},{\"category\":\"Ps\",\"key\":\"FE17\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte lenticular blanco izquierdo vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE18\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte lenticular blanco vertical derecho\"}}},{\"key\":\"FE35\",\"mappings\":{\"default\":{\"default\":\"paréntesis superior\"}},\"category\":\"Ps\"},{\"key\":\"FE36\",\"mappings\":{\"default\":{\"default\":\"paréntesis inferior\"}},\"category\":\"Pe\"},{\"key\":\"FE37\",\"mappings\":{\"default\":{\"default\":\"llave superior\"}},\"category\":\"Ps\"},{\"key\":\"FE38\",\"mappings\":{\"default\":{\"default\":\"llave inferior\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"FE39\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el soporte vertical de concha de tortuga izquierda\"}}},{\"category\":\"Pe\",\"key\":\"FE3A\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el soporte vertical de concha de tortuga derecha\"}}},{\"category\":\"Ps\",\"key\":\"FE3B\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el soporte lenticular negro izquierdo vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE3C\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el soporte lenticular negro derecho vertical\"}}},{\"category\":\"Ps\",\"key\":\"FE3D\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte vertical doble ángulo izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"FE3E\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el soporte de ángulo recto doble vertical\"}}},{\"key\":\"FE3F\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular superior\"}},\"category\":\"Ps\"},{\"key\":\"FE40\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular inferior\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"FE41\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte de esquina vertical izquierda\"}}},{\"category\":\"Pe\",\"key\":\"FE42\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte de esquina vertical derecha\"}}},{\"category\":\"Ps\",\"key\":\"FE43\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte de esquina blanco vertical izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"FE44\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte de esquina vertical derecha blanca\"}}},{\"category\":\"Ps\",\"key\":\"FE47\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte cuadrado vertical izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"FE48\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte cuadrado vertical derecho\"}}},{\"category\":\"Ps\",\"key\":\"FE59\",\"mappings\":{\"default\":{\"default\":\"pequeño paréntesis izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"FE5A\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho pequeño\"}}},{\"category\":\"Ps\",\"key\":\"FE5B\",\"mappings\":{\"default\":{\"default\":\"corchete Rizado Izquierdo Pequeño\"}}},{\"category\":\"Pe\",\"key\":\"FE5C\",\"mappings\":{\"default\":{\"default\":\"corchete derecho rizado pequeño\"}}},{\"category\":\"Ps\",\"key\":\"FE5D\",\"mappings\":{\"default\":{\"default\":\"soporte de concha pequeña tortuga izquierda\"}}},{\"category\":\"Pe\",\"key\":\"FE5E\",\"mappings\":{\"default\":{\"default\":\"pequeño corchete derecho de concha de tortuga\"}}},{\"category\":\"Ps\",\"key\":\"FF08\",\"mappings\":{\"default\":{\"default\":\"paréntesis izquierdo de ancho completo\"}}},{\"category\":\"Pe\",\"key\":\"FF09\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho de ancho completo\"}}},{\"category\":\"Ps\",\"key\":\"FF3B\",\"mappings\":{\"default\":{\"default\":\"soporte cuadrado izquierdo de ancho completo\"}}},{\"category\":\"Pe\",\"key\":\"FF3D\",\"mappings\":{\"default\":{\"default\":\"soporte cuadrado derecho de ancho completo\"}}},{\"category\":\"Ps\",\"key\":\"FF5B\",\"mappings\":{\"default\":{\"default\":\"corchete rizado izquierdo de ancho completo\"}}},{\"category\":\"Pe\",\"key\":\"FF5D\",\"mappings\":{\"default\":{\"default\":\"corchete derecho de ancho completo\"}}},{\"category\":\"Ps\",\"key\":\"FF5F\",\"mappings\":{\"default\":{\"default\":\"paréntesis blanco izquierdo de ancho completo\"}}},{\"category\":\"Pe\",\"key\":\"FF60\",\"mappings\":{\"default\":{\"default\":\"paréntesis blanco derecho de ancho completo\"}}},{\"category\":\"Ps\",\"key\":\"FF62\",\"mappings\":{\"default\":{\"default\":\"corchete de esquina izquierda de medio ancho\"}}},{\"category\":\"Pe\",\"key\":\"FF63\",\"mappings\":{\"default\":{\"default\":\"soporte de esquina derecha de medio ancho\"}}}]\n,\n\"es/symbols/math_geometry.js\": \n[{\"locale\":\"es\"},{\"key\":\"2500\",\"mappings\":{\"default\":{\"default\":\"delimitador horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2501\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesadas horizontales\"}}},{\"key\":\"2502\",\"mappings\":{\"default\":{\"default\":\"delimitador vertical\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2503\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Pesado Vertical\"}}},{\"category\":\"So\",\"key\":\"2504\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Light Triple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2505\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Triple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2506\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Light Triple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"2507\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Triple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"2508\",\"mappings\":{\"default\":{\"default\":\"caja Dibujos Ligero Cuadruple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2509\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Quadruple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"250A\",\"mappings\":{\"default\":{\"default\":\"caja Dibujos Luz Cuadruple Tablero Vertical\"}}},{\"category\":\"So\",\"key\":\"250B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Quadruple Dash Vertical\"}}},{\"key\":\"250C\",\"mappings\":{\"default\":{\"default\":\"esquina inferior derecha\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"250D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Abajo Ligero y Derecho Pesado\"}}},{\"category\":\"So\",\"key\":\"250E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo pesados ​​y rectos ligeros\"}}},{\"category\":\"So\",\"key\":\"250F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​abajo y derecha\"}}},{\"key\":\"2510\",\"mappings\":{\"default\":{\"default\":\"esquina inferior izquierda\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2511\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo ligeros y pesados ​​a la izquierda\"}}},{\"category\":\"So\",\"key\":\"2512\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo pesados ​​y luz izquierda\"}}},{\"category\":\"So\",\"key\":\"2513\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​hacia abajo y hacia la izquierda\"}}},{\"key\":\"2514\",\"mappings\":{\"default\":{\"default\":\"esquina superior derecha\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2515\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta ligero y derecho pesado\"}}},{\"category\":\"So\",\"key\":\"2516\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta Pesadas y Ligeras\"}}},{\"category\":\"So\",\"key\":\"2517\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​y derechos\"}}},{\"key\":\"2518\",\"mappings\":{\"default\":{\"default\":\"esquina superior izquierda\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2519\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta livianos y pesados ​​a la izquierda\"}}},{\"category\":\"So\",\"key\":\"251A\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta pesado y luz izquierda\"}}},{\"category\":\"So\",\"key\":\"251B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​hacia arriba y hacia la izquierda\"}}},{\"key\":\"251C\",\"mappings\":{\"default\":{\"default\":\"delimitador izquierdo y separador horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"251D\",\"mappings\":{\"default\":{\"default\":\"cuadros de caja Vertical ligero y derecho pesado\"}}},{\"category\":\"So\",\"key\":\"251E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta pesados ​​y rectos hacia abajo\"}}},{\"category\":\"So\",\"key\":\"251F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo pesados ​​y rectos arriba ligeros\"}}},{\"category\":\"So\",\"key\":\"2520\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas verticales pesadas y rectas ligeras\"}}},{\"category\":\"So\",\"key\":\"2521\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo ligeros y rectos arriba pesados\"}}},{\"category\":\"So\",\"key\":\"2522\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas para arriba livianos y rectos para abajo pesados\"}}},{\"category\":\"So\",\"key\":\"2523\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesadas verticales y derechas\"}}},{\"key\":\"2524\",\"mappings\":{\"default\":{\"default\":\"delimitador derecho y separador horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2525\",\"mappings\":{\"default\":{\"default\":\"cuadros de caja Vertical ligero y izquierdo pesado\"}}},{\"category\":\"So\",\"key\":\"2526\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas para arriba Pesado y Izquierda Abajo Luz\"}}},{\"category\":\"So\",\"key\":\"2527\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo pesados ​​y luz izquierda arriba\"}}},{\"category\":\"So\",\"key\":\"2528\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas verticales pesadas y luz izquierda\"}}},{\"category\":\"So\",\"key\":\"2529\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo ligeros e izquierdos arriba pesados\"}}},{\"category\":\"So\",\"key\":\"252A\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas para arriba Ligero y Izquierda Abajo Pesado\"}}},{\"category\":\"So\",\"key\":\"252B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesadas verticales e izquierdas\"}}},{\"key\":\"252C\",\"mappings\":{\"default\":{\"default\":\"delimitador superior y separador vertical\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"252D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas izquierda pesados ​​y derecha abajo luz\"}}},{\"category\":\"So\",\"key\":\"252E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas, derecha, pesada y izquierda abajo, luz\"}}},{\"category\":\"So\",\"key\":\"252F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo ligeros y horizontales pesados\"}}},{\"category\":\"So\",\"key\":\"2530\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz pesada y horizontal\"}}},{\"category\":\"So\",\"key\":\"2531\",\"mappings\":{\"default\":{\"default\":\"dibujos de la caja de luz derecha y izquierda abajo pesado\"}}},{\"category\":\"So\",\"key\":\"2532\",\"mappings\":{\"default\":{\"default\":\"cuadros de caja izquierda ligera y derecha abajo pesada\"}}},{\"category\":\"So\",\"key\":\"2533\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​y horizontales\"}}},{\"key\":\"2534\",\"mappings\":{\"default\":{\"default\":\"delimitador inferior y separador vertical\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2535\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas izquierda pesada y derecha arriba ligera\"}}},{\"category\":\"So\",\"key\":\"2536\",\"mappings\":{\"default\":{\"default\":\"dibujos de caja derecha pesada y luz izquierda arriba\"}}},{\"category\":\"So\",\"key\":\"2537\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta ligero y horizontal pesado\"}}},{\"category\":\"So\",\"key\":\"2538\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta luz pesada y horizontal\"}}},{\"category\":\"So\",\"key\":\"2539\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas a la derecha, livianos y a la izquierda, pesados\"}}},{\"category\":\"So\",\"key\":\"253A\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Izquierda Ligera y Derecha Arriba Pesada\"}}},{\"category\":\"So\",\"key\":\"253B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​y horizontales\"}}},{\"key\":\"253C\",\"mappings\":{\"default\":{\"default\":\"cruce de separadores sencillos\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"253D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Izquierda Pesada y Derecha Vertical Luz\"}}},{\"category\":\"So\",\"key\":\"253E\",\"mappings\":{\"default\":{\"default\":\"dibujos de caja derecha pesada y luz vertical izquierda\"}}},{\"category\":\"So\",\"key\":\"253F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Vertical Ligera y Horizontal Pesada\"}}},{\"category\":\"So\",\"key\":\"2540\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas para arriba pesados ​​y abajo luz horizontal\"}}},{\"category\":\"So\",\"key\":\"2541\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hacia abajo pesados ​​y hacia arriba luz horizontal\"}}},{\"category\":\"So\",\"key\":\"2542\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas verticales pesadas y horizontales ligeras\"}}},{\"category\":\"So\",\"key\":\"2543\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Izquierda Arriba Pesada y Derecha abajo Luz\"}}},{\"category\":\"So\",\"key\":\"2544\",\"mappings\":{\"default\":{\"default\":\"dibujos de caja derecha arriba pesada y izquierda abajo luz\"}}},{\"category\":\"So\",\"key\":\"2545\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas, izquierda abajo, pesada y derecha arriba, ligera\"}}},{\"category\":\"So\",\"key\":\"2546\",\"mappings\":{\"default\":{\"default\":\"dibujos de la caja derecha abajo pesada y izquierda arriba ligera\"}}},{\"category\":\"So\",\"key\":\"2547\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo ligeros y ascendentes horizontales pesados\"}}},{\"category\":\"So\",\"key\":\"2548\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas para arriba Ligero y para abajo horizontal pesado\"}}},{\"category\":\"So\",\"key\":\"2549\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas a la derecha, ligeros y a la izquierda, verticales, pesados\"}}},{\"category\":\"So\",\"key\":\"254A\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Izquierda Ligera y Derecha Vertical Pesada\"}}},{\"category\":\"So\",\"key\":\"254B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesadas verticales y horizontales\"}}},{\"category\":\"So\",\"key\":\"254C\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Light Double Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"254D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Double Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"254E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Light Double Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"254F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Double Dash Vertical\"}}},{\"key\":\"2550\",\"mappings\":{\"default\":{\"default\":\"delimitador horizontal doble\"}},\"category\":\"So\"},{\"key\":\"2551\",\"mappings\":{\"default\":{\"default\":\"delimitador vertical doble\"}},\"category\":\"So\"},{\"key\":\"2552\",\"mappings\":{\"default\":{\"default\":\"esquina inferior derecha, vertical doble\"}},\"category\":\"So\"},{\"key\":\"2553\",\"mappings\":{\"default\":{\"default\":\"esquina inferior derecha, horizontal doble\"}},\"category\":\"So\"},{\"key\":\"2554\",\"mappings\":{\"default\":{\"default\":\"esquina inferior derecha doble\"}},\"category\":\"So\"},{\"key\":\"2555\",\"mappings\":{\"default\":{\"default\":\"esquina inferior izquierda, vertical doble\"}},\"category\":\"So\"},{\"key\":\"2556\",\"mappings\":{\"default\":{\"default\":\"esquina inferior izquierda, horizontal doble\"}},\"category\":\"So\"},{\"key\":\"2557\",\"mappings\":{\"default\":{\"default\":\"esquina inferior izquierda doble\"}},\"category\":\"So\"},{\"key\":\"2558\",\"mappings\":{\"default\":{\"default\":\"esquina superior derecha, vertical doble\"}},\"category\":\"So\"},{\"key\":\"2559\",\"mappings\":{\"default\":{\"default\":\"esquina superior derecha, horizontal doble\"}},\"category\":\"So\"},{\"key\":\"255A\",\"mappings\":{\"default\":{\"default\":\"esquina superior derecha doble\"}},\"category\":\"So\"},{\"key\":\"255B\",\"mappings\":{\"default\":{\"default\":\"esquina superior izquierda, vertical doble\"}},\"category\":\"So\"},{\"key\":\"255C\",\"mappings\":{\"default\":{\"default\":\"esquina superior izquierda, horizontal doble\"}},\"category\":\"So\"},{\"key\":\"255D\",\"mappings\":{\"default\":{\"default\":\"esquina superior izquierda doble\"}},\"category\":\"So\"},{\"key\":\"255E\",\"mappings\":{\"default\":{\"default\":\"delimitador izquierdo con separador doble\"}},\"category\":\"So\"},{\"key\":\"255F\",\"mappings\":{\"default\":{\"default\":\"delimitador izquierdo doble con separador horizontal\"}},\"category\":\"So\"},{\"key\":\"2560\",\"mappings\":{\"default\":{\"default\":\"delimitador izquierdo y separador horizontal dobles\"}},\"category\":\"So\"},{\"key\":\"2561\",\"mappings\":{\"default\":{\"default\":\"delimitador derecho con separador doble\"}},\"category\":\"So\"},{\"key\":\"2562\",\"mappings\":{\"default\":{\"default\":\"delimitador derecho doble con separador horizontal\"}},\"category\":\"So\"},{\"key\":\"2563\",\"mappings\":{\"default\":{\"default\":\"delimitador derecho y separador horizontal dobles\"}},\"category\":\"So\"},{\"key\":\"2564\",\"mappings\":{\"default\":{\"default\":\"delimitador superior doble con separador vertical\"}},\"category\":\"So\"},{\"key\":\"2565\",\"mappings\":{\"default\":{\"default\":\"delimitador superior con separador vertical doble\"}},\"category\":\"So\"},{\"key\":\"2566\",\"mappings\":{\"default\":{\"default\":\"delimitador superior y separador vertical dobles\"}},\"category\":\"So\"},{\"key\":\"2567\",\"mappings\":{\"default\":{\"default\":\"delimitador inferior doble con separador vertical\"}},\"category\":\"So\"},{\"key\":\"2568\",\"mappings\":{\"default\":{\"default\":\"delimitador inferior con separador vertical doble\"}},\"category\":\"So\"},{\"key\":\"2569\",\"mappings\":{\"default\":{\"default\":\"delimitador inferior y separador vertical dobles\"}},\"category\":\"So\"},{\"key\":\"256A\",\"mappings\":{\"default\":{\"default\":\"cruce de separadores, vertical sencillo y horizontal doble\"}},\"category\":\"So\"},{\"key\":\"256B\",\"mappings\":{\"default\":{\"default\":\"cruce de separadores, vertical doble y horizontal sencillo\"}},\"category\":\"So\"},{\"key\":\"256C\",\"mappings\":{\"default\":{\"default\":\"cruce de separadores dobles\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"256D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz arco abajo y derecha\"}}},{\"category\":\"So\",\"key\":\"256E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz arco hacia abajo y hacia la izquierda\"}}},{\"category\":\"So\",\"key\":\"256F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz arco arriba y a la izquierda\"}}},{\"category\":\"So\",\"key\":\"2570\",\"mappings\":{\"default\":{\"default\":\"caja de dibujos de luz arco arriba y derecha\"}}},{\"category\":\"So\",\"key\":\"2571\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Luz Diagonal Superior derecha a inferior izquierda\"}}},{\"category\":\"So\",\"key\":\"2572\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Luz Diagonal Superior izquierda a inferior derecha\"}}},{\"category\":\"So\",\"key\":\"2573\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz diagonal cruz\"}}},{\"category\":\"So\",\"key\":\"2574\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas luz izquierda\"}}},{\"category\":\"So\",\"key\":\"2575\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas se iluminan\"}}},{\"category\":\"So\",\"key\":\"2576\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas a la derecha\"}}},{\"category\":\"So\",\"key\":\"2577\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz hacia abajo\"}}},{\"category\":\"So\",\"key\":\"2578\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​a la izquierda\"}}},{\"category\":\"So\",\"key\":\"2579\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados\"}}},{\"category\":\"So\",\"key\":\"257A\",\"mappings\":{\"default\":{\"default\":\"caja de dibujos pesado derecho\"}}},{\"category\":\"So\",\"key\":\"257B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados\"}}},{\"category\":\"So\",\"key\":\"257C\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Ligero Izquierda y Pesada Derecha\"}}},{\"category\":\"So\",\"key\":\"257D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas iluminados y pesados\"}}},{\"category\":\"So\",\"key\":\"257E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Pesado Izquierda y Luz Derecha\"}}},{\"category\":\"So\",\"key\":\"257F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​y ligeros\"}}},{\"key\":\"2580\",\"mappings\":{\"default\":{\"default\":\"bloque mitad superior\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2581\",\"mappings\":{\"default\":{\"default\":\"bajar un octavo bloque\"}}},{\"category\":\"So\",\"key\":\"2582\",\"mappings\":{\"default\":{\"default\":\"bloque de un cuarto inferior\"}}},{\"category\":\"So\",\"key\":\"2583\",\"mappings\":{\"default\":{\"default\":\"bloque de tres octavos más bajo\"}}},{\"key\":\"2584\",\"mappings\":{\"default\":{\"default\":\"bloque mitad inferior\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2585\",\"mappings\":{\"default\":{\"default\":\"bloque inferior de cinco octavos\"}}},{\"category\":\"So\",\"key\":\"2586\",\"mappings\":{\"default\":{\"default\":\"bloque de tres cuartos más bajo\"}}},{\"category\":\"So\",\"key\":\"2587\",\"mappings\":{\"default\":{\"default\":\"lower Seven Eighths Block\"}}},{\"key\":\"2588\",\"mappings\":{\"default\":{\"default\":\"bloque\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2589\",\"mappings\":{\"default\":{\"default\":\"bloque de siete octavos a la izquierda\"}}},{\"category\":\"So\",\"key\":\"258A\",\"mappings\":{\"default\":{\"default\":\"bloque de tres cuartos a la izquierda\"}}},{\"category\":\"So\",\"key\":\"258B\",\"mappings\":{\"default\":{\"default\":\"bloque de cinco octavos a la izquierda\"}}},{\"category\":\"So\",\"key\":\"258C\",\"mappings\":{\"default\":{\"default\":\"media cuadra izquierda\"}}},{\"category\":\"So\",\"key\":\"258D\",\"mappings\":{\"default\":{\"default\":\"bloque de tres octavos a la izquierda\"}}},{\"category\":\"So\",\"key\":\"258E\",\"mappings\":{\"default\":{\"default\":\"bloque de un cuarto a la izquierda\"}}},{\"category\":\"So\",\"key\":\"258F\",\"mappings\":{\"default\":{\"default\":\"izquierda un octavo bloque\"}}},{\"category\":\"So\",\"key\":\"2590\",\"mappings\":{\"default\":{\"default\":\"media cuadra derecha\"}}},{\"key\":\"2591\",\"mappings\":{\"default\":{\"default\":\"sombra ligera\"}},\"category\":\"So\"},{\"key\":\"2592\",\"mappings\":{\"default\":{\"default\":\"sombra media\"}},\"category\":\"So\"},{\"key\":\"2593\",\"mappings\":{\"default\":{\"default\":\"sombra intensa\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2594\",\"mappings\":{\"default\":{\"default\":\"upper One Eighth Block\"}}},{\"category\":\"So\",\"key\":\"2595\",\"mappings\":{\"default\":{\"default\":\"a la derecha un octavo bloque\"}}},{\"category\":\"So\",\"key\":\"2596\",\"mappings\":{\"default\":{\"default\":\"cuadrante inferior izquierdo\"}}},{\"category\":\"So\",\"key\":\"2597\",\"mappings\":{\"default\":{\"default\":\"cuadrante inferior derecho\"}}},{\"category\":\"So\",\"key\":\"2598\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior izquierdo\"}}},{\"category\":\"So\",\"key\":\"2599\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior izquierdo e inferior izquierdo e inferior derecho\"}}},{\"category\":\"So\",\"key\":\"259A\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior izquierdo e inferior derecho\"}}},{\"category\":\"So\",\"key\":\"259B\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior izquierdo y superior derecho e inferior izquierdo\"}}},{\"category\":\"So\",\"key\":\"259C\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior izquierdo y superior derecho e inferior derecho\"}}},{\"category\":\"So\",\"key\":\"259D\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior derecho\"}}},{\"category\":\"So\",\"key\":\"259E\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior derecho e inferior izquierdo\"}}},{\"category\":\"So\",\"key\":\"259F\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior derecho e inferior izquierdo e inferior derecho\"}}},{\"key\":\"25A0\",\"mappings\":{\"default\":{\"default\":\"cuadrado relleno\"}},\"category\":\"So\"},{\"key\":\"25A1\",\"mappings\":{\"default\":{\"default\":\"cuadrado\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25A2\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco con esquinas redondeadas\"}}},{\"category\":\"So\",\"key\":\"25A3\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco que contiene cuadrado pequeño negro\"}}},{\"category\":\"So\",\"key\":\"25A4\",\"mappings\":{\"default\":{\"default\":\"cuadrado con relleno horizontal\"}}},{\"category\":\"So\",\"key\":\"25A5\",\"mappings\":{\"default\":{\"default\":\"cuadrado con relleno vertical\"}}},{\"category\":\"So\",\"key\":\"25A6\",\"mappings\":{\"default\":{\"default\":\"cuadrado con relleno de rayado ortogonal\"}}},{\"category\":\"So\",\"key\":\"25A7\",\"mappings\":{\"default\":{\"default\":\"cuadrado con la esquina superior izquierda a la derecha inferior\"}}},{\"category\":\"So\",\"key\":\"25A8\",\"mappings\":{\"default\":{\"default\":\"cuadrado con la parte superior derecha hacia abajo izquierda Relleno\"}}},{\"category\":\"So\",\"key\":\"25A9\",\"mappings\":{\"default\":{\"default\":\"cuadrado con relleno de rayado diagonal\"}}},{\"key\":\"25AA\",\"mappings\":{\"default\":{\"default\":\"cuadrado relleno\"}},\"category\":\"So\"},{\"key\":\"25AB\",\"mappings\":{\"default\":{\"default\":\"cuadrado\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25AC\",\"mappings\":{\"default\":{\"default\":\"rectángulo negro\"}}},{\"key\":\"25AD\",\"mappings\":{\"default\":{\"default\":\"rectángulo\"}},\"category\":\"So\"},{\"key\":\"25AE\",\"mappings\":{\"default\":{\"default\":\"rectángulo relleno vertical\"}},\"category\":\"So\"},{\"key\":\"25AF\",\"mappings\":{\"default\":{\"default\":\"rectángulo vertical\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25B0\",\"mappings\":{\"default\":{\"default\":\"paralelogramo negro\"}}},{\"key\":\"25B1\",\"mappings\":{\"default\":{\"default\":\"paralelogramo\"}},\"category\":\"So\"},{\"key\":\"25B2\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno\"}},\"category\":\"So\"},{\"key\":\"25B3\",\"mappings\":{\"default\":{\"default\":\"triángulo\"}},\"category\":\"So\"},{\"key\":\"25B4\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno\"}},\"category\":\"So\"},{\"key\":\"25B5\",\"mappings\":{\"default\":{\"default\":\"triángulo\"}},\"category\":\"So\"},{\"key\":\"25B6\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala derecha\"}},\"category\":\"So\"},{\"key\":\"25B7\",\"mappings\":{\"default\":{\"default\":\"triángulo señala derecha\"}},\"category\":\"Sm\"},{\"key\":\"25B8\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala derecha\"}},\"category\":\"So\"},{\"key\":\"25B9\",\"mappings\":{\"default\":{\"default\":\"triángulo señala derecha\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25BA\",\"mappings\":{\"default\":{\"default\":\"indicador de apuntar hacia la derecha negro\"}}},{\"category\":\"So\",\"key\":\"25BB\",\"mappings\":{\"default\":{\"default\":\"puntero de apuntar hacia la derecha blanco\"}}},{\"key\":\"25BC\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala abajo\"}},\"category\":\"So\"},{\"key\":\"25BD\",\"mappings\":{\"default\":{\"default\":\"triángulo señala abajo\"}},\"category\":\"So\"},{\"key\":\"25BE\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala abajo\"}},\"category\":\"So\"},{\"key\":\"25BF\",\"mappings\":{\"default\":{\"default\":\"triángulo señala abajo\"}},\"category\":\"So\"},{\"key\":\"25C0\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala izquierda\"}},\"category\":\"So\"},{\"key\":\"25C1\",\"mappings\":{\"default\":{\"default\":\"triángulo señala izquierda\"}},\"category\":\"Sm\"},{\"key\":\"25C2\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala izquierda\"}},\"category\":\"So\"},{\"key\":\"25C3\",\"mappings\":{\"default\":{\"default\":\"triángulo señala izquierda\"}},\"category\":\"So\"},{\"key\":\"25C4\",\"mappings\":{\"default\":{\"default\":\"puntero relleno señala izquierda\"}},\"category\":\"So\"},{\"key\":\"25C5\",\"mappings\":{\"default\":{\"default\":\"puntero señala izquierda\"}},\"category\":\"So\"},{\"key\":\"25C6\",\"mappings\":{\"default\":{\"default\":\"diamante relleno\"}},\"category\":\"So\"},{\"key\":\"25C7\",\"mappings\":{\"default\":{\"default\":\"diamante\"}},\"category\":\"So\"},{\"key\":\"25C8\",\"mappings\":{\"default\":{\"default\":\"diamante vacío contiene diamante relleno\"}},\"category\":\"So\"},{\"key\":\"25C9\",\"mappings\":{\"default\":{\"default\":\"ojo de pez\"}},\"category\":\"So\"},{\"key\":\"25CA\",\"mappings\":{\"default\":{\"default\":\"rombo\"}},\"category\":\"So\"},{\"key\":\"25CB\",\"mappings\":{\"default\":{\"default\":\"círculo vacío\"}},\"category\":\"So\"},{\"key\":\"25CC\",\"mappings\":{\"default\":{\"default\":\"círculo punteado\"}},\"category\":\"So\"},{\"key\":\"25CD\",\"mappings\":{\"default\":{\"default\":\"círculo con relleno vertical\"}},\"category\":\"So\"},{\"key\":\"25CE\",\"mappings\":{\"default\":{\"default\":\"blanco\"}},\"category\":\"So\"},{\"key\":\"25CF\",\"mappings\":{\"default\":{\"default\":\"círculo relleno\"}},\"category\":\"So\"},{\"key\":\"25D0\",\"mappings\":{\"default\":{\"default\":\"círculo con mitad izquierda rellena\"}},\"category\":\"So\"},{\"key\":\"25D1\",\"mappings\":{\"default\":{\"default\":\"círculo con mitad derecha rellena\"}},\"category\":\"So\"},{\"key\":\"25D2\",\"mappings\":{\"default\":{\"default\":\"círculo con mitad inferior rellena\"}},\"category\":\"So\"},{\"key\":\"25D3\",\"mappings\":{\"default\":{\"default\":\"círculo con mitad superior rellena\"}},\"category\":\"So\"},{\"key\":\"25D4\",\"mappings\":{\"default\":{\"default\":\"círculo con cuadrante superior derecho relleno\"}},\"category\":\"So\"},{\"key\":\"25D5\",\"mappings\":{\"default\":{\"default\":\"círculo con cuadrante superior izquierdo relleno\"}},\"category\":\"So\"},{\"key\":\"25D6\",\"mappings\":{\"default\":{\"default\":\"semicírculo izquierdo relleno\"}},\"category\":\"So\"},{\"key\":\"25D7\",\"mappings\":{\"default\":{\"default\":\"semicírculo derecho relleno\"}},\"category\":\"So\"},{\"key\":\"25D8\",\"mappings\":{\"default\":{\"default\":\"bullet inversa\"}},\"category\":\"So\"},{\"key\":\"25D9\",\"mappings\":{\"default\":{\"default\":\"círculo vacío inverso\"}},\"category\":\"So\"},{\"key\":\"25DA\",\"mappings\":{\"default\":{\"default\":\"semicírculo superior vacío inverso\"}},\"category\":\"So\"},{\"key\":\"25DB\",\"mappings\":{\"default\":{\"default\":\"semicírculo superior vacío inverso\"}},\"category\":\"So\"},{\"key\":\"25DC\",\"mappings\":{\"default\":{\"default\":\"arco superior izquierda\"}},\"category\":\"So\"},{\"key\":\"25DD\",\"mappings\":{\"default\":{\"default\":\"arco superior derecha\"}},\"category\":\"So\"},{\"key\":\"25DE\",\"mappings\":{\"default\":{\"default\":\"arco inferior derecha\"}},\"category\":\"So\"},{\"key\":\"25DF\",\"mappings\":{\"default\":{\"default\":\"arco inferior izquierda\"}},\"category\":\"So\"},{\"key\":\"25E0\",\"mappings\":{\"default\":{\"default\":\"semicírculo superior\"}},\"category\":\"So\"},{\"key\":\"25E1\",\"mappings\":{\"default\":{\"default\":\"semicírculo inferior\"}},\"category\":\"So\"},{\"key\":\"25E2\",\"mappings\":{\"default\":{\"default\":\"triángulo inferior derecha relleno\"}},\"category\":\"So\"},{\"key\":\"25E3\",\"mappings\":{\"default\":{\"default\":\"triángulo inferior izquierda relleno\"}},\"category\":\"So\"},{\"key\":\"25E4\",\"mappings\":{\"default\":{\"default\":\"triángulo superior izquierda relleno\"}},\"category\":\"So\"},{\"key\":\"25E5\",\"mappings\":{\"default\":{\"default\":\"triángulo superior derecha relleno\"}},\"category\":\"So\"},{\"key\":\"25E6\",\"mappings\":{\"default\":{\"default\":\"composición\"}},\"category\":\"So\"},{\"key\":\"25E7\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad izquierda rellena\"}},\"category\":\"So\"},{\"key\":\"25E8\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad derecha rellena\"}},\"category\":\"So\"},{\"key\":\"25E9\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad superior izquierda rellena\"}},\"category\":\"So\"},{\"key\":\"25EA\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad inferior derecha rellena\"}},\"category\":\"So\"},{\"key\":\"25EB\",\"mappings\":{\"default\":{\"default\":\"cuadrado con bisectriz\"}},\"category\":\"So\"},{\"key\":\"25EC\",\"mappings\":{\"default\":{\"default\":\"triángulo vacío con punto\"}},\"category\":\"So\"},{\"key\":\"25ED\",\"mappings\":{\"default\":{\"default\":\"triángulo apuntando arriba con mitad izquierda rellena\"}},\"category\":\"So\"},{\"key\":\"25EE\",\"mappings\":{\"default\":{\"default\":\"triángulo apuntando arriba con mitad derecha rellena\"}},\"category\":\"So\"},{\"key\":\"25EF\",\"mappings\":{\"default\":{\"default\":\"círculo grande\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25F0\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco con cuadrante superior izquierdo\"}}},{\"category\":\"So\",\"key\":\"25F1\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco con cuadrante inferior izquierdo\"}}},{\"category\":\"So\",\"key\":\"25F2\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco con cuadrante inferior derecho\"}}},{\"category\":\"So\",\"key\":\"25F3\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco con cuadrante superior derecho\"}}},{\"category\":\"So\",\"key\":\"25F4\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con cuadrante superior izquierdo\"}}},{\"category\":\"So\",\"key\":\"25F5\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con cuadrante inferior izquierdo\"}}},{\"category\":\"So\",\"key\":\"25F6\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con cuadrante inferior derecho\"}}},{\"category\":\"So\",\"key\":\"25F7\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con cuadrante superior derecho\"}}},{\"key\":\"25F8\",\"mappings\":{\"default\":{\"default\":\"triángulo superior izquierda\"}},\"category\":\"Sm\"},{\"key\":\"25F9\",\"mappings\":{\"default\":{\"default\":\"triángulo superior derecha\"}},\"category\":\"Sm\"},{\"key\":\"25FA\",\"mappings\":{\"default\":{\"default\":\"triángulo inferior izquierda\"}},\"category\":\"Sm\"},{\"key\":\"25FB\",\"mappings\":{\"default\":{\"default\":\"cuadrado mediano vacío\"}},\"category\":\"Sm\"},{\"key\":\"25FC\",\"mappings\":{\"default\":{\"default\":\"cuadrado mediano relleno\"}},\"category\":\"Sm\"},{\"key\":\"25FD\",\"mappings\":{\"default\":{\"default\":\"cuadrado mediano vacío\"}},\"category\":\"Sm\"},{\"key\":\"25FE\",\"mappings\":{\"default\":{\"default\":\"cuadrado mediano relleno\"}},\"category\":\"Sm\"},{\"key\":\"25FF\",\"mappings\":{\"default\":{\"default\":\"triángulo inferior derecha\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2B12\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad superior negra\"}}},{\"category\":\"So\",\"key\":\"2B13\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad inferior negra\"}}},{\"category\":\"So\",\"key\":\"2B14\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad derecha superior diagonal negra\"}}},{\"category\":\"So\",\"key\":\"2B15\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad diagonal izquierda inferior negra\"}}},{\"category\":\"So\",\"key\":\"2B16\",\"mappings\":{\"default\":{\"default\":\"diamante con Mitad Izquierda Negro\"}}},{\"category\":\"So\",\"key\":\"2B17\",\"mappings\":{\"default\":{\"default\":\"diamante con mitad derecha negra\"}}},{\"category\":\"So\",\"key\":\"2B18\",\"mappings\":{\"default\":{\"default\":\"diamante con mitad superior negra\"}}},{\"category\":\"So\",\"key\":\"2B19\",\"mappings\":{\"default\":{\"default\":\"diamante con mitad inferior negra\"}}},{\"category\":\"So\",\"key\":\"2B1A\",\"mappings\":{\"default\":{\"default\":\"cuadrado punteado\"}}},{\"category\":\"So\",\"key\":\"2B1B\",\"mappings\":{\"default\":{\"default\":\"cuadrado grande negro\"}}},{\"category\":\"So\",\"key\":\"2B1C\",\"mappings\":{\"default\":{\"default\":\"gran Plaza Blanca\"}}},{\"category\":\"So\",\"key\":\"2B1D\",\"mappings\":{\"default\":{\"default\":\"cuadrado muy pequeño negro\"}}},{\"category\":\"So\",\"key\":\"2B1E\",\"mappings\":{\"default\":{\"default\":\"cuadrado muy pequeño blanco\"}}},{\"category\":\"So\",\"key\":\"2B1F\",\"mappings\":{\"default\":{\"default\":\"pentágono negro\"}}},{\"category\":\"So\",\"key\":\"2B20\",\"mappings\":{\"default\":{\"default\":\"pentágono blanco\"}}},{\"category\":\"So\",\"key\":\"2B21\",\"mappings\":{\"default\":{\"default\":\"hexágono blanco\"}}},{\"category\":\"So\",\"key\":\"2B22\",\"mappings\":{\"default\":{\"default\":\"hexágono negro\"}}},{\"category\":\"So\",\"key\":\"2B23\",\"mappings\":{\"default\":{\"default\":\"hexagonal negro horizontal\"}}},{\"category\":\"So\",\"key\":\"2B24\",\"mappings\":{\"default\":{\"default\":\"circulo grande negro\"}}},{\"category\":\"So\",\"key\":\"2B25\",\"mappings\":{\"default\":{\"default\":\"diamante Mediano Negro\"}}},{\"category\":\"So\",\"key\":\"2B26\",\"mappings\":{\"default\":{\"default\":\"diamante blanco medio\"}}},{\"category\":\"So\",\"key\":\"2B27\",\"mappings\":{\"default\":{\"default\":\"lozenge Mediano Negro\"}}},{\"category\":\"So\",\"key\":\"2B28\",\"mappings\":{\"default\":{\"default\":\"pastilla blanca mediana\"}}},{\"category\":\"So\",\"key\":\"2B29\",\"mappings\":{\"default\":{\"default\":\"pequeño diamante negro\"}}},{\"category\":\"So\",\"key\":\"2B2A\",\"mappings\":{\"default\":{\"default\":\"lozenge pequeño negro\"}}},{\"category\":\"So\",\"key\":\"2B2B\",\"mappings\":{\"default\":{\"default\":\"lozenge pequeño blanco\"}}},{\"category\":\"So\",\"key\":\"2B2C\",\"mappings\":{\"default\":{\"default\":\"elipse horizontal negro\"}}},{\"category\":\"So\",\"key\":\"2B2D\",\"mappings\":{\"default\":{\"default\":\"elipse horizontal blanco\"}}},{\"category\":\"So\",\"key\":\"2B2E\",\"mappings\":{\"default\":{\"default\":\"elipse Vertical Negro\"}}},{\"category\":\"So\",\"key\":\"2B2F\",\"mappings\":{\"default\":{\"default\":\"elipse Vertical Blanco\"}}},{\"key\":\"2B50\",\"mappings\":{\"default\":{\"default\":\"estrella media vacía\"}},\"category\":\"So\"},{\"key\":\"2B51\",\"mappings\":{\"default\":{\"default\":\"estrella pequeña rellena\"}},\"category\":\"So\"},{\"key\":\"2B52\",\"mappings\":{\"default\":{\"default\":\"estrella pequeña vacía\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2B53\",\"mappings\":{\"default\":{\"default\":\"pentágono negro que señala hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"2B54\",\"mappings\":{\"default\":{\"default\":\"pentágono blanco que señala hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"2B55\",\"mappings\":{\"default\":{\"default\":\"círculo grande pesado\"}}},{\"category\":\"So\",\"key\":\"2B56\",\"mappings\":{\"default\":{\"default\":\"óvalo pesado con interior oval\"}}},{\"category\":\"So\",\"key\":\"2B57\",\"mappings\":{\"default\":{\"default\":\"círculo pesado con círculo dentro\"}}},{\"category\":\"So\",\"key\":\"2B58\",\"mappings\":{\"default\":{\"default\":\"círculo pesado\"}}},{\"category\":\"So\",\"key\":\"2B59\",\"mappings\":{\"default\":{\"default\":\"saltire en círculo pesado\"}}}]\n,\n\"es/symbols/math_harpoons.js\": \n[{\"locale\":\"es\"},{\"key\":\"21BC\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con arpón arriba\"}},\"category\":\"So\"},{\"key\":\"21BD\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con arpón debajo\"}},\"category\":\"So\"},{\"key\":\"21BE\",\"mappings\":{\"default\":{\"default\":\"flecha arriba con arpón derecho\"}},\"category\":\"So\"},{\"key\":\"21BF\",\"mappings\":{\"default\":{\"default\":\"flecha arriba con arpón izquierdo\"}},\"category\":\"So\"},{\"key\":\"21C0\",\"mappings\":{\"default\":{\"default\":\"flecha derecha con arpón arriba\"}},\"category\":\"So\"},{\"key\":\"21C1\",\"mappings\":{\"default\":{\"default\":\"flecha derecha con arpón debajo\"}},\"category\":\"So\"},{\"key\":\"21C2\",\"mappings\":{\"default\":{\"default\":\"flecha abajo con arpón derecho\"}},\"category\":\"So\"},{\"key\":\"21C3\",\"mappings\":{\"default\":{\"default\":\"flecha abajo con arpón izquierdo\"}},\"category\":\"So\"},{\"key\":\"21CB\",\"mappings\":{\"default\":{\"default\":\"arpón izquierdo arriba de arpón derecho\"}},\"category\":\"So\"},{\"key\":\"21CC\",\"mappings\":{\"default\":{\"default\":\"arpón derecho arriba de arpón izquierdo\"}},\"category\":\"So\"},{\"category\":\"Sm\",\"key\":\"294A\",\"mappings\":{\"default\":{\"default\":\"barra izquierda arriba barra derecha abajo arpón\"}}},{\"category\":\"Sm\",\"key\":\"294B\",\"mappings\":{\"default\":{\"default\":\"barra izquierda abajo barra derecha arriba arpón\"}}},{\"category\":\"Sm\",\"key\":\"294C\",\"mappings\":{\"default\":{\"default\":\"up barb right down barb left harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294D\",\"mappings\":{\"default\":{\"default\":\"arriba barb izquierda abajo barb derecha arpón\"}}},{\"category\":\"Sm\",\"key\":\"294E\",\"mappings\":{\"default\":{\"default\":\"barra izquierda arriba barra derecha arriba arpón\"}}},{\"key\":\"294F\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha hacia arriba y abajo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2950\",\"mappings\":{\"default\":{\"default\":\"barra izquierda abajo barra derecha abajo arpón\"}}},{\"key\":\"2951\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda hacia arriba y abajo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2952\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púa hasta la barra\"}}},{\"category\":\"Sm\",\"key\":\"2953\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púa hasta la barra\"}}},{\"category\":\"Sm\",\"key\":\"2954\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa derecha a barra\"}}},{\"category\":\"Sm\",\"key\":\"2955\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con púa derecha a barra\"}}},{\"category\":\"Sm\",\"key\":\"2956\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púas abajo a la barra\"}}},{\"category\":\"Sm\",\"key\":\"2957\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púa abajo a la barra\"}}},{\"category\":\"Sm\",\"key\":\"2958\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa izquierda a barra\"}}},{\"category\":\"Sm\",\"key\":\"2959\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con la barra izquierda a la barra\"}}},{\"category\":\"Sm\",\"key\":\"295A\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púa arriba de la barra\"}}},{\"category\":\"Sm\",\"key\":\"295B\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púa arriba del bar\"}}},{\"category\":\"Sm\",\"key\":\"295C\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa derecha de barra\"}}},{\"category\":\"Sm\",\"key\":\"295D\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con púa derecha de barra\"}}},{\"category\":\"Sm\",\"key\":\"295E\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púa abajo de barra\"}}},{\"category\":\"Sm\",\"key\":\"295F\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púa abajo de barra\"}}},{\"category\":\"Sm\",\"key\":\"2960\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa izquierda de barra\"}}},{\"category\":\"Sm\",\"key\":\"2961\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con barra izquierda de barra\"}}},{\"category\":\"Sm\",\"key\":\"2962\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púas arriba arriba arpón a la izquierda con púas abajo\"}}},{\"category\":\"Sm\",\"key\":\"2963\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa izquierda al lado arpón ascendente con púa derecha\"}}},{\"category\":\"Sm\",\"key\":\"2964\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púas arriba arriba arpón a la derecha con púas abajo\"}}},{\"category\":\"Sm\",\"key\":\"2965\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con lengüeta a la izquierda al lado arpón hacia abajo con lengüeta a la derecha\"}}},{\"category\":\"Sm\",\"key\":\"2966\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púa arriba arriba arpón a la derecha con púa arriba\"}}},{\"category\":\"Sm\",\"key\":\"2967\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púa abajo arriba arpón a la derecha con púa abajo\"}}},{\"category\":\"Sm\",\"key\":\"2968\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púas arriba arriba arpón a la izquierda con púas arriba\"}}},{\"category\":\"Sm\",\"key\":\"2969\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púa abajo arriba arpón a la izquierda con púa abajo\"}}},{\"key\":\"296A\",\"mappings\":{\"default\":{\"default\":\"barra con arpón hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"296B\",\"mappings\":{\"default\":{\"default\":\"arpón hacia la izquierda con barra\"}},\"category\":\"Sm\"},{\"key\":\"296C\",\"mappings\":{\"default\":{\"default\":\"barra con arpón hacia la derecha\"}},\"category\":\"Sm\"},{\"key\":\"296D\",\"mappings\":{\"default\":{\"default\":\"arpón hacia la derecha con barra\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"296E\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa izquierda al lado arpón hacia abajo con púa derecha\"}}},{\"category\":\"Sm\",\"key\":\"296F\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con lengüeta a la izquierda al lado arpón hacia arriba con pica a la derecha\"}}},{\"category\":\"Sm\",\"key\":\"297C\",\"mappings\":{\"default\":{\"default\":\"cola de pescado izquierda\"}}},{\"category\":\"Sm\",\"key\":\"297D\",\"mappings\":{\"default\":{\"default\":\"cola de pescado derecha\"}}},{\"key\":\"297E\",\"mappings\":{\"default\":{\"default\":\"barra con doble gancho\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"297F\",\"mappings\":{\"default\":{\"default\":\"cola de pez abajo\"}}}]\n,\n\"es/symbols/math_non_characters.js\": \n[{\"locale\":\"es\"},{\"key\":\"210F\",\"mappings\":{\"default\":{\"default\":\"h barra\"}},\"category\":\"Ll\"},{\"category\":\"So\",\"key\":\"2114\",\"mappings\":{\"default\":{\"default\":\"L B símbolo de barra\"}}},{\"key\":\"2116\",\"mappings\":{\"default\":{\"default\":\"signo de número\"}},\"category\":\"So\"},{\"key\":\"2117\",\"mappings\":{\"default\":{\"default\":\"derechos de autor de sonido\"}},\"category\":\"So\"},{\"key\":\"211E\",\"mappings\":{\"default\":{\"default\":\"receta\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"211F\",\"mappings\":{\"default\":{\"default\":\"respuesta\"}}},{\"category\":\"So\",\"key\":\"2120\",\"mappings\":{\"default\":{\"default\":\"marca de servicio\"}}},{\"category\":\"So\",\"key\":\"2121\",\"mappings\":{\"default\":{\"default\":\"señal de telefono\"}}},{\"key\":\"2122\",\"mappings\":{\"default\":{\"default\":\"registrado\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2123\",\"mappings\":{\"default\":{\"default\":\"versículo\"}}},{\"key\":\"2125\",\"mappings\":{\"default\":{\"default\":\"onza\"}},\"category\":\"So\"},{\"key\":\"2126\",\"mappings\":{\"default\":{\"default\":\"ohmio\"}},\"category\":\"Lu\"},{\"key\":\"2127\",\"mappings\":{\"default\":{\"default\":\"ohmio invertido\"}},\"category\":\"So\"},{\"key\":\"212A\",\"mappings\":{\"default\":{\"default\":\"grados kelvin\"}},\"category\":\"Lu\"},{\"key\":\"212B\",\"mappings\":{\"default\":{\"default\":\"angstrom\"}},\"category\":\"Lu\"},{\"category\":\"So\",\"key\":\"212E\",\"mappings\":{\"default\":{\"default\":\"Símbolo estimado\"}}},{\"key\":\"2132\",\"mappings\":{\"default\":{\"default\":\"mayúscula F invertida\"}},\"category\":\"Lu\"},{\"category\":\"Ll\",\"key\":\"2139\",\"mappings\":{\"default\":{\"default\":\"fuente de información\"}}},{\"category\":\"So\",\"key\":\"213A\",\"mappings\":{\"default\":{\"default\":\"capital rotado Q\"}}},{\"category\":\"So\",\"key\":\"213B\",\"mappings\":{\"default\":{\"default\":\"signo de fax\"}}},{\"category\":\"Sm\",\"key\":\"2141\",\"mappings\":{\"default\":{\"default\":\"convertido sans serif mayúscula G\"}}},{\"category\":\"Sm\",\"key\":\"2142\",\"mappings\":{\"default\":{\"default\":\"convertido sans serif mayúscula L\"}}},{\"category\":\"Sm\",\"key\":\"2143\",\"mappings\":{\"default\":{\"default\":\"invertido sans serif mayúscula L\"}}},{\"category\":\"Sm\",\"key\":\"2144\",\"mappings\":{\"default\":{\"default\":\"convertido en sans serif mayúscula Y\"}}}]\n,\n\"es/symbols/math_symbols.js\": \n[{\"locale\":\"es\"},{\"key\":\"0021\",\"mappings\":{\"default\":{\"default\":\"factorial\"}},\"category\":\"Po\"},{\"key\":\"0022\",\"mappings\":{\"default\":{\"default\":\"comillas\"}},\"category\":\"Po\"},{\"key\":\"0023\",\"mappings\":{\"default\":{\"default\":\"almuhadilla\",\"defaultMP\":\"signo de número\"}},\"category\":\"Po\"},{\"key\":\"0024\",\"mappings\":{\"default\":{\"default\":\"dólar\"}},\"category\":\"Sc\"},{\"key\":\"0025\",\"mappings\":{\"default\":{\"default\":\"porciento\"}},\"category\":\"Po\"},{\"key\":\"0026\",\"mappings\":{\"default\":{\"default\":\"ampersand\"}},\"category\":\"Po\"},{\"key\":\"0027\",\"mappings\":{\"default\":{\"default\":\"prima\",\"defaultMP\":\"apóstrofo\"}},\"category\":\"Po\"},{\"key\":\"002A\",\"mappings\":{\"default\":{\"default\":\"por\"}},\"category\":\"Po\"},{\"key\":\"002B\",\"mappings\":{\"default\":{\"default\":\"más\"}},\"category\":\"Sm\"},{\"key\":\"002C\",\"mappings\":{\"default\":{\"default\":\"coma\"}},\"category\":\"Po\"},{\"key\":\"002D\",\"mappings\":{\"default\":{\"default\":\"menos\"}},\"category\":\"Pd\"},{\"key\":\"002E\",\"mappings\":{\"default\":{\"default\":\"punto\"}},\"category\":\"Po\"},{\"key\":\"002F\",\"mappings\":{\"default\":{\"default\":\"barra oblicua\"}},\"category\":\"Po\"},{\"key\":\"003A\",\"mappings\":{\"default\":{\"default\":\"dos puntos\"}},\"category\":\"Po\"},{\"key\":\"003B\",\"mappings\":{\"default\":{\"default\":\"punto y coma\"}},\"category\":\"Po\"},{\"key\":\"003C\",\"mappings\":{\"default\":{\"default\":\"menor que\"}},\"category\":\"Sm\"},{\"key\":\"003D\",\"mappings\":{\"default\":{\"default\":\"igual\"}},\"category\":\"Sm\"},{\"key\":\"003E\",\"mappings\":{\"default\":{\"default\":\"mayor que\"}},\"category\":\"Sm\"},{\"key\":\"003F\",\"mappings\":{\"default\":{\"default\":\"interrogación derecho\",\"defaultMP\":\"cierra interrogación\"}},\"category\":\"Po\"},{\"key\":\"0040\",\"mappings\":{\"default\":{\"default\":\"arroba\"}},\"category\":\"Po\"},{\"key\":\"005C\",\"mappings\":{\"default\":{\"default\":\"barra inversa\"}},\"category\":\"Po\"},{\"key\":\"005E\",\"mappings\":{\"default\":{\"default\":\"circunflejo\"}},\"category\":\"Sk\"},{\"key\":\"005F\",\"mappings\":{\"default\":{\"default\":\"subrayado\"}},\"category\":\"Pc\"},{\"key\":\"0060\",\"mappings\":{\"default\":{\"default\":\"acento grave\"}},\"category\":\"Sk\"},{\"key\":\"007C\",\"mappings\":{\"default\":{\"default\":\"barra vertical\"}},\"category\":\"Sm\"},{\"key\":\"007E\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sm\"},{\"key\":\"00A1\",\"mappings\":{\"default\":{\"default\":\"admiración izquierdo\",\"defaultMP\":\"abre admiración\"}},\"category\":\"Po\"},{\"key\":\"00A2\",\"mappings\":{\"default\":{\"default\":\"centavo\"}},\"category\":\"Sc\"},{\"key\":\"00A3\",\"mappings\":{\"default\":{\"default\":\"libra esterlina\"}},\"category\":\"Sc\"},{\"key\":\"00A4\",\"mappings\":{\"default\":{\"default\":\"moneda\"}},\"category\":\"Sc\"},{\"key\":\"00A5\",\"mappings\":{\"default\":{\"default\":\"yen\"}},\"category\":\"Sc\"},{\"key\":\"00A6\",\"mappings\":{\"default\":{\"default\":\"barra vertical partida\"}},\"category\":\"So\"},{\"key\":\"00A7\",\"mappings\":{\"default\":{\"default\":\"sección\"}},\"category\":\"Po\"},{\"key\":\"00A8\",\"mappings\":{\"default\":{\"default\":\"diéresis\"}},\"category\":\"Sk\"},{\"key\":\"00A9\",\"mappings\":{\"default\":{\"default\":\"copyright\"}},\"category\":\"So\"},{\"key\":\"00AA\",\"mappings\":{\"default\":{\"default\":\"ordinal femenino\"}},\"category\":\"Lo\"},{\"key\":\"00AB\",\"mappings\":{\"default\":{\"default\":\"comillas angulares izquierda\",\"defaultMP\":\"abre comillas angulares\"}},\"category\":\"Pi\"},{\"key\":\"00AC\",\"mappings\":{\"default\":{\"default\":\"negación\"}},\"category\":\"Sm\"},{\"key\":\"00AE\",\"mappings\":{\"default\":{\"default\":\"registrado\"}},\"category\":\"So\"},{\"key\":\"00AF\",\"mappings\":{\"default\":{\"default\":\"barra\"}},\"category\":\"Sk\"},{\"key\":\"00B0\",\"mappings\":{\"default\":{\"default\":\"grado\"}},\"category\":\"So\"},{\"key\":\"00B1\",\"mappings\":{\"default\":{\"default\":\"más menos\"}},\"category\":\"Sm\"},{\"key\":\"00B4\",\"mappings\":{\"default\":{\"default\":\"acento agudo\"}},\"category\":\"Sk\"},{\"key\":\"00B5\",\"mappings\":{\"default\":{\"default\":\"micro\"}},\"category\":\"Ll\"},{\"key\":\"00B6\",\"mappings\":{\"default\":{\"default\":\"párrafo\"}},\"category\":\"Po\"},{\"key\":\"00B7\",\"mappings\":{\"default\":{\"default\":\"punto medio\"}},\"category\":\"Po\"},{\"key\":\"00B8\",\"mappings\":{\"default\":{\"default\":\"cedilla\"}},\"category\":\"Sk\"},{\"key\":\"00BA\",\"mappings\":{\"default\":{\"default\":\"ordinal masculino\"}},\"category\":\"Lo\"},{\"key\":\"00BB\",\"mappings\":{\"default\":{\"default\":\"comillas angulares derecha\",\"defaultMP\":\"cierra comillas angulares\"}},\"category\":\"Pf\"},{\"key\":\"00BF\",\"mappings\":{\"default\":{\"default\":\"interrogación izquierdo\",\"defaultMP\":\"abre interrogación\"}},\"category\":\"Po\"},{\"key\":\"00D7\",\"mappings\":{\"default\":{\"default\":\"por\"}},\"category\":\"Sm\"},{\"key\":\"00F7\",\"mappings\":{\"default\":{\"default\":\"dividido\"}},\"category\":\"Sm\"},{\"key\":\"02D8\",\"mappings\":{\"default\":{\"default\":\"breve\"}},\"category\":\"Sk\"},{\"key\":\"02D9\",\"mappings\":{\"default\":{\"default\":\"punto en superescrito\"}},\"category\":\"Sk\"},{\"key\":\"02DA\",\"mappings\":{\"default\":{\"default\":\"anillo en superescrito\"}},\"category\":\"Sk\"},{\"key\":\"02DB\",\"mappings\":{\"default\":{\"default\":\"ogonek\"}},\"category\":\"Sk\"},{\"key\":\"02DC\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sk\"},{\"key\":\"02DD\",\"mappings\":{\"default\":{\"default\":\"doble acento agudo\"}},\"category\":\"Sk\"},{\"key\":\"2010\",\"mappings\":{\"default\":{\"default\":\"menos\"}},\"category\":\"Pd\"},{\"category\":\"Pd\",\"key\":\"2011\",\"mappings\":{\"default\":{\"default\":\"guión no rompible\"}}},{\"category\":\"Pd\",\"key\":\"2012\",\"mappings\":{\"default\":{\"default\":\"figura Dash\"}}},{\"key\":\"2013\",\"mappings\":{\"default\":{\"default\":\"en raya\"}},\"category\":\"Pd\"},{\"key\":\"2014\",\"mappings\":{\"default\":{\"default\":\"em raya\"}},\"category\":\"Pd\"},{\"key\":\"2015\",\"mappings\":{\"default\":{\"default\":\"barra horizontal\"}},\"category\":\"Pd\"},{\"key\":\"2016\",\"mappings\":{\"default\":{\"default\":\"doble barra vertical\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2017\",\"mappings\":{\"default\":{\"default\":\"línea baja doble\"}}},{\"key\":\"2018\",\"mappings\":{\"default\":{\"default\":\"comilla izquierda\"}},\"category\":\"Pi\"},{\"key\":\"2019\",\"mappings\":{\"default\":{\"default\":\"comilla derecha\"}},\"category\":\"Pf\"},{\"key\":\"201A\",\"mappings\":{\"default\":{\"default\":\"comilla bajo 9\"}},\"category\":\"Ps\"},{\"category\":\"Pi\",\"key\":\"201B\",\"mappings\":{\"default\":{\"default\":\"marca de comillas simple con inversión alta-9\"}}},{\"key\":\"201C\",\"mappings\":{\"default\":{\"default\":\"doble comilla\"}},\"category\":\"Pi\"},{\"key\":\"201D\",\"mappings\":{\"default\":{\"default\":\"doble comilla derecha\"}},\"category\":\"Pf\"},{\"key\":\"201E\",\"mappings\":{\"default\":{\"default\":\"doble comilla bajo 9\"}},\"category\":\"Ps\"},{\"category\":\"Pi\",\"key\":\"201F\",\"mappings\":{\"default\":{\"default\":\"doble alto-invertido-9 comillas\"}}},{\"key\":\"2020\",\"mappings\":{\"default\":{\"default\":\"daga\"}},\"category\":\"Po\"},{\"key\":\"2021\",\"mappings\":{\"default\":{\"default\":\"doble daga\"}},\"category\":\"Po\"},{\"key\":\"2022\",\"mappings\":{\"default\":{\"default\":\"bala\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2023\",\"mappings\":{\"default\":{\"default\":\"bala triangular\"}}},{\"category\":\"Po\",\"key\":\"2024\",\"mappings\":{\"default\":{\"default\":\"líder de un punto\"}}},{\"key\":\"2025\",\"mappings\":{\"default\":{\"default\":\"dos puntos líder\"}},\"category\":\"Po\"},{\"key\":\"2026\",\"mappings\":{\"default\":{\"default\":\"puntos suspensivos\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2027\",\"mappings\":{\"default\":{\"default\":\"punto de separación\"}}},{\"key\":\"2030\",\"mappings\":{\"default\":{\"default\":\"tanto por millar\"}},\"category\":\"Po\"},{\"key\":\"2031\",\"mappings\":{\"default\":{\"default\":\"tanto por diez mil\"}},\"category\":\"Po\"},{\"key\":\"2032\",\"mappings\":{\"default\":{\"default\":\"prima\"}},\"category\":\"Po\"},{\"key\":\"2033\",\"mappings\":{\"default\":{\"default\":\"segunda\"}},\"category\":\"Po\"},{\"key\":\"2034\",\"mappings\":{\"default\":{\"default\":\"tercera\"}},\"category\":\"Po\"},{\"key\":\"2035\",\"mappings\":{\"default\":{\"default\":\"acento grave\"}},\"category\":\"Po\"},{\"key\":\"2036\",\"mappings\":{\"default\":{\"default\":\"doble acento grave\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2037\",\"mappings\":{\"default\":{\"default\":\"prime Prime invertido\"}}},{\"category\":\"Po\",\"key\":\"2038\",\"mappings\":{\"default\":{\"default\":\"signo de intercalación\"}}},{\"key\":\"2039\",\"mappings\":{\"default\":{\"default\":\"comillas izquierda\",\"defaultMP\":\"abre comillas\"}},\"category\":\"Pi\"},{\"key\":\"203A\",\"mappings\":{\"default\":{\"default\":\"comillas derecha\",\"defaultMP\":\"cierra comillas\"}},\"category\":\"Pf\"},{\"category\":\"Po\",\"key\":\"203B\",\"mappings\":{\"default\":{\"default\":\"marca de referencia\"}}},{\"category\":\"Po\",\"key\":\"203C\",\"mappings\":{\"default\":{\"default\":\"doble signo de exclamación\"}}},{\"category\":\"Po\",\"key\":\"203D\",\"mappings\":{\"default\":{\"default\":\"interrobang\"}}},{\"key\":\"203E\",\"mappings\":{\"default\":{\"default\":\"barra superior\"}},\"category\":\"Po\"},{\"category\":\"Pc\",\"key\":\"203F\",\"mappings\":{\"default\":{\"default\":\"undertie\"}}},{\"key\":\"2040\",\"mappings\":{\"default\":{\"default\":\"ligadura\"}},\"category\":\"Pc\"},{\"key\":\"2041\",\"mappings\":{\"default\":{\"default\":\"punto de inserción\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2042\",\"mappings\":{\"default\":{\"default\":\"asterismo\"}}},{\"key\":\"2043\",\"mappings\":{\"default\":{\"default\":\"guión bala\"}},\"category\":\"Po\"},{\"key\":\"2044\",\"mappings\":{\"default\":{\"default\":\"barra de fracción\"}},\"category\":\"Sm\"},{\"category\":\"Po\",\"key\":\"2047\",\"mappings\":{\"default\":{\"default\":\"doble signo de interrogación\"}}},{\"category\":\"Po\",\"key\":\"2048\",\"mappings\":{\"default\":{\"default\":\"pregunta Signo de exclamación\"}}},{\"category\":\"Po\",\"key\":\"2049\",\"mappings\":{\"default\":{\"default\":\"signo de interrogación de exclamación\"}}},{\"category\":\"Po\",\"key\":\"204B\",\"mappings\":{\"default\":{\"default\":\"signo de Pilcrow invertido\"}}},{\"category\":\"Po\",\"key\":\"204C\",\"mappings\":{\"default\":{\"default\":\"bala negra hacia la izquierda\"}}},{\"category\":\"Po\",\"key\":\"204D\",\"mappings\":{\"default\":{\"default\":\"bala negra hacia la derecha\"}}},{\"category\":\"Po\",\"key\":\"204E\",\"mappings\":{\"default\":{\"default\":\"bajo asterisco\"}}},{\"key\":\"204F\",\"mappings\":{\"default\":{\"default\":\"punto y coma invertido\"}},\"category\":\"Po\"},{\"key\":\"2050\",\"mappings\":{\"default\":{\"default\":\"cierre superior\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2051\",\"mappings\":{\"default\":{\"default\":\"dos asteriscos alineados verticalmente\"}}},{\"category\":\"Sm\",\"key\":\"2052\",\"mappings\":{\"default\":{\"default\":\"signo de menos comercial\"}}},{\"category\":\"Po\",\"key\":\"2053\",\"mappings\":{\"default\":{\"default\":\"swung Dash\"}}},{\"category\":\"Pc\",\"key\":\"2054\",\"mappings\":{\"default\":{\"default\":\"ropa interior invertida\"}}},{\"category\":\"Po\",\"key\":\"2055\",\"mappings\":{\"default\":{\"default\":\"signo de puntuación de la flor\"}}},{\"category\":\"Po\",\"key\":\"2056\",\"mappings\":{\"default\":{\"default\":\"puntuación de tres puntos\"}}},{\"key\":\"2057\",\"mappings\":{\"default\":{\"default\":\"cuarta\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2058\",\"mappings\":{\"default\":{\"default\":\"puntuación de cuatro puntos\"}}},{\"category\":\"Po\",\"key\":\"2059\",\"mappings\":{\"default\":{\"default\":\"puntuación de cinco puntos\"}}},{\"category\":\"Po\",\"key\":\"205A\",\"mappings\":{\"default\":{\"default\":\"puntuación de dos puntos\"}}},{\"category\":\"Po\",\"key\":\"205B\",\"mappings\":{\"default\":{\"default\":\"marca de cuatro puntos\"}}},{\"category\":\"Po\",\"key\":\"205C\",\"mappings\":{\"default\":{\"default\":\"cruz punteada\"}}},{\"category\":\"Po\",\"key\":\"205D\",\"mappings\":{\"default\":{\"default\":\"tricolon\"}}},{\"category\":\"Po\",\"key\":\"205E\",\"mappings\":{\"default\":{\"default\":\"cuatro puntos verticales\"}}},{\"category\":\"Sm\",\"key\":\"207A\",\"mappings\":{\"default\":{\"default\":\"superscript Plus Sign\"}}},{\"category\":\"Sm\",\"key\":\"207B\",\"mappings\":{\"default\":{\"default\":\"superíndice menos\"}}},{\"category\":\"Sm\",\"key\":\"207C\",\"mappings\":{\"default\":{\"default\":\"superscript Equals Sign\"}}},{\"category\":\"Ps\",\"key\":\"207D\",\"mappings\":{\"default\":{\"default\":\"paréntesis izquierdo superíndice\"}}},{\"category\":\"Pe\",\"key\":\"207E\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho superíndice\"}}},{\"category\":\"Sm\",\"key\":\"208A\",\"mappings\":{\"default\":{\"default\":\"signo de subíndice más\"}}},{\"category\":\"Sm\",\"key\":\"208B\",\"mappings\":{\"default\":{\"default\":\"subíndice menos\"}}},{\"category\":\"Sm\",\"key\":\"208C\",\"mappings\":{\"default\":{\"default\":\"signo de subíndice es igual\"}}},{\"category\":\"Ps\",\"key\":\"208D\",\"mappings\":{\"default\":{\"default\":\"subíndice paréntesis izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"208E\",\"mappings\":{\"default\":{\"default\":\"subíndice de paréntesis derecho\"}}},{\"category\":\"So\",\"key\":\"214A\",\"mappings\":{\"default\":{\"default\":\"línea de propiedad\"}}},{\"category\":\"Sm\",\"key\":\"214B\",\"mappings\":{\"default\":{\"default\":\"ampersand convertido\"}}},{\"category\":\"So\",\"key\":\"214C\",\"mappings\":{\"default\":{\"default\":\"por signo\"}}},{\"category\":\"So\",\"key\":\"214D\",\"mappings\":{\"default\":{\"default\":\"aktieselskab\"}}},{\"category\":\"Ll\",\"key\":\"214E\",\"mappings\":{\"default\":{\"default\":\"torneado pequeño f\"}}},{\"key\":\"2200\",\"mappings\":{\"default\":{\"default\":\"para todo\"}},\"category\":\"Sm\"},{\"key\":\"2201\",\"mappings\":{\"default\":{\"default\":\"complementario\"}},\"category\":\"Sm\"},{\"key\":\"2203\",\"mappings\":{\"default\":{\"default\":\"existe\"}},\"category\":\"Sm\"},{\"key\":\"2204\",\"mappings\":{\"default\":{\"default\":\"no existe\"}},\"category\":\"Sm\"},{\"key\":\"2205\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío\"}},\"category\":\"Sm\"},{\"key\":\"2206\",\"mappings\":{\"default\":{\"default\":\"incremento\"}},\"category\":\"Sm\"},{\"key\":\"2208\",\"mappings\":{\"default\":{\"default\":\"perteneciente a\"}},\"category\":\"Sm\"},{\"key\":\"2209\",\"mappings\":{\"default\":{\"default\":\"no perteneciente a\"}},\"category\":\"Sm\"},{\"key\":\"220A\",\"mappings\":{\"default\":{\"default\":\"perteneciente a\"}},\"category\":\"Sm\"},{\"key\":\"220B\",\"mappings\":{\"default\":{\"default\":\"comprende a\"}},\"category\":\"Sm\"},{\"key\":\"220C\",\"mappings\":{\"default\":{\"default\":\"no comprende a\"}},\"category\":\"Sm\"},{\"key\":\"220D\",\"mappings\":{\"default\":{\"default\":\"comprende a\"}},\"category\":\"Sm\"},{\"key\":\"220E\",\"mappings\":{\"default\":{\"default\":\"fin de demostración\"}},\"category\":\"Sm\"},{\"key\":\"220F\",\"mappings\":{\"default\":{\"default\":\"producto\"}},\"category\":\"Sm\"},{\"key\":\"2210\",\"mappings\":{\"default\":{\"default\":\"coproducto\"}},\"category\":\"Sm\"},{\"key\":\"2211\",\"mappings\":{\"default\":{\"default\":\"sumatorio\"}},\"category\":\"Sm\"},{\"key\":\"2212\",\"mappings\":{\"default\":{\"default\":\"menos\"}},\"category\":\"Sm\"},{\"key\":\"2213\",\"mappings\":{\"default\":{\"default\":\"menos más\"}},\"category\":\"Sm\"},{\"key\":\"2214\",\"mappings\":{\"default\":{\"default\":\"punto más\"}},\"category\":\"Sm\"},{\"key\":\"2215\",\"mappings\":{\"default\":{\"default\":\"barra de división\"}},\"category\":\"Sm\"},{\"key\":\"2216\",\"mappings\":{\"default\":{\"default\":\"menos\"}},\"category\":\"Sm\"},{\"key\":\"2217\",\"mappings\":{\"default\":{\"default\":\"asterisco\"}},\"category\":\"Sm\"},{\"key\":\"2218\",\"mappings\":{\"default\":{\"default\":\"composición\"}},\"category\":\"Sm\"},{\"key\":\"2219\",\"mappings\":{\"default\":{\"default\":\"bala\"}},\"category\":\"Sm\"},{\"key\":\"221A\",\"mappings\":{\"default\":{\"default\":\"raíz\"}},\"category\":\"Sm\"},{\"key\":\"221B\",\"mappings\":{\"default\":{\"default\":\"raíz cúbica\"}},\"category\":\"Sm\"},{\"key\":\"221C\",\"mappings\":{\"default\":{\"default\":\"raíz cuarta\"}},\"category\":\"Sm\"},{\"key\":\"221D\",\"mappings\":{\"default\":{\"default\":\"proporcional a\"}},\"category\":\"Sm\"},{\"key\":\"221E\",\"mappings\":{\"default\":{\"default\":\"infinito\"}},\"category\":\"Sm\"},{\"key\":\"221F\",\"mappings\":{\"default\":{\"default\":\"ángulo recto\"}},\"category\":\"Sm\"},{\"key\":\"2220\",\"mappings\":{\"default\":{\"default\":\"ángulo\"}},\"category\":\"Sm\"},{\"key\":\"2221\",\"mappings\":{\"default\":{\"default\":\"ángulo medido\"}},\"category\":\"Sm\"},{\"key\":\"2222\",\"mappings\":{\"default\":{\"default\":\"ángulo esférico\"}},\"category\":\"Sm\"},{\"key\":\"2223\",\"mappings\":{\"default\":{\"default\":\"divide a\"}},\"category\":\"Sm\"},{\"key\":\"2224\",\"mappings\":{\"default\":{\"default\":\"no divide a\"}},\"category\":\"Sm\"},{\"key\":\"2225\",\"mappings\":{\"default\":{\"default\":\"paralela a\"}},\"category\":\"Sm\"},{\"key\":\"2226\",\"mappings\":{\"default\":{\"default\":\"no paralela a\"}},\"category\":\"Sm\"},{\"key\":\"2227\",\"mappings\":{\"default\":{\"default\":\"y\"}},\"category\":\"Sm\"},{\"key\":\"2228\",\"mappings\":{\"default\":{\"default\":\"o\"}},\"category\":\"Sm\"},{\"key\":\"2229\",\"mappings\":{\"default\":{\"default\":\"intersección\"}},\"category\":\"Sm\"},{\"key\":\"222A\",\"mappings\":{\"default\":{\"default\":\"unión\"}},\"category\":\"Sm\"},{\"key\":\"222B\",\"mappings\":{\"default\":{\"default\":\"integral\"}},\"category\":\"Sm\"},{\"key\":\"222C\",\"mappings\":{\"default\":{\"default\":\"integral doble\"}},\"category\":\"Sm\"},{\"key\":\"222D\",\"mappings\":{\"default\":{\"default\":\"integral triple\"}},\"category\":\"Sm\"},{\"key\":\"222E\",\"mappings\":{\"default\":{\"default\":\"integral de contorno\"}},\"category\":\"Sm\"},{\"key\":\"222F\",\"mappings\":{\"default\":{\"default\":\"integral de superficie\"}},\"category\":\"Sm\"},{\"key\":\"2230\",\"mappings\":{\"default\":{\"default\":\"integral de volumen\"}},\"category\":\"Sm\"},{\"key\":\"2231\",\"mappings\":{\"default\":{\"default\":\"integral de contorno en sentido horario\"}},\"category\":\"Sm\"},{\"key\":\"2232\",\"mappings\":{\"default\":{\"default\":\"integral de contorno en sentido horario\"}},\"category\":\"Sm\"},{\"key\":\"2233\",\"mappings\":{\"default\":{\"default\":\"integral de contorno en sentido antihorario\"}},\"category\":\"Sm\"},{\"key\":\"2234\",\"mappings\":{\"default\":{\"default\":\"por lo tanto\"}},\"category\":\"Sm\"},{\"key\":\"2235\",\"mappings\":{\"default\":{\"default\":\"porque\"}},\"category\":\"Sm\"},{\"key\":\"2236\",\"mappings\":{\"default\":{\"default\":\"razón\"}},\"category\":\"Sm\"},{\"key\":\"2237\",\"mappings\":{\"default\":{\"default\":\"proporción\"}},\"category\":\"Sm\"},{\"key\":\"2238\",\"mappings\":{\"default\":{\"default\":\"punto menos\"}},\"category\":\"Sm\"},{\"key\":\"2239\",\"mappings\":{\"default\":{\"default\":\"exceso\"}},\"category\":\"Sm\"},{\"key\":\"223A\",\"mappings\":{\"default\":{\"default\":\"proporción geométrica\"}},\"category\":\"Sm\"},{\"key\":\"223B\",\"mappings\":{\"default\":{\"default\":\"homotecia\"}},\"category\":\"Sm\"},{\"key\":\"223C\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sm\"},{\"key\":\"223D\",\"mappings\":{\"default\":{\"default\":\"tilde invertido\"}},\"category\":\"Sm\"},{\"key\":\"223E\",\"mappings\":{\"default\":{\"default\":\"s horizontal invertida\"}},\"category\":\"Sm\"},{\"key\":\"223F\",\"mappings\":{\"default\":{\"default\":\"sinusoide\"}},\"category\":\"Sm\"},{\"key\":\"2240\",\"mappings\":{\"default\":{\"default\":\"producto de guirnalda\"}},\"category\":\"Sm\"},{\"key\":\"2241\",\"mappings\":{\"default\":{\"default\":\"no tilde\"}},\"category\":\"Sm\"},{\"key\":\"2242\",\"mappings\":{\"default\":{\"default\":\"menos tilde\"}},\"category\":\"Sm\"},{\"key\":\"2243\",\"mappings\":{\"default\":{\"default\":\"asintóticamente igual a\"}},\"category\":\"Sm\"},{\"key\":\"2244\",\"mappings\":{\"default\":{\"default\":\"no asintóticamente igual a\"}},\"category\":\"Sm\"},{\"key\":\"2245\",\"mappings\":{\"default\":{\"default\":\"aproximadamente igual a\"}},\"category\":\"Sm\"},{\"key\":\"2246\",\"mappings\":{\"default\":{\"default\":\"aproximado pero no igual a\"}},\"category\":\"Sm\"},{\"key\":\"2247\",\"mappings\":{\"default\":{\"default\":\"no aproximado a\"}},\"category\":\"Sm\"},{\"key\":\"2248\",\"mappings\":{\"default\":{\"default\":\"aproximado\",\"defaultMP\":\"casi igual a\"}},\"category\":\"Sm\"},{\"key\":\"2249\",\"mappings\":{\"default\":{\"default\":\"no es casi igual a\"}},\"category\":\"Sm\"},{\"key\":\"224A\",\"mappings\":{\"default\":{\"default\":\"igual o casi igual a\"}},\"category\":\"Sm\"},{\"key\":\"224B\",\"mappings\":{\"default\":{\"default\":\"triple tilde\"}},\"category\":\"Sm\"},{\"key\":\"224C\",\"mappings\":{\"default\":{\"default\":\"todo igual a\"}},\"category\":\"Sm\"},{\"key\":\"224D\",\"mappings\":{\"default\":{\"default\":\"equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"224E\",\"mappings\":{\"default\":{\"default\":\"geométricamente equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"224F\",\"mappings\":{\"default\":{\"default\":\"diferencia entre\"}},\"category\":\"Sm\"},{\"key\":\"2250\",\"mappings\":{\"default\":{\"default\":\"se acerca al límite\"}},\"category\":\"Sm\"},{\"key\":\"2251\",\"mappings\":{\"default\":{\"default\":\"geométricamente igual a\"}},\"category\":\"Sm\"},{\"key\":\"2252\",\"mappings\":{\"default\":{\"default\":\"aproximadamente igual a o imagen de\"}},\"category\":\"Sm\"},{\"key\":\"2253\",\"mappings\":{\"default\":{\"default\":\"imagen de o aproximadamente igual a\"}},\"category\":\"Sm\"},{\"key\":\"2254\",\"mappings\":{\"default\":{\"default\":\"dos puntos igual\"}},\"category\":\"Sm\"},{\"key\":\"2255\",\"mappings\":{\"default\":{\"default\":\"igual dos puntos\"}},\"category\":\"Sm\"},{\"key\":\"2256\",\"mappings\":{\"default\":{\"default\":\"igual incluyendo anillo\"}},\"category\":\"Sm\"},{\"key\":\"2257\",\"mappings\":{\"default\":{\"default\":\"igual anillo a\"}},\"category\":\"Sm\"},{\"key\":\"2258\",\"mappings\":{\"default\":{\"default\":\"corresponde a\"}},\"category\":\"Sm\"},{\"key\":\"2259\",\"mappings\":{\"default\":{\"default\":\"estima a\"}},\"category\":\"Sm\"},{\"key\":\"225A\",\"mappings\":{\"default\":{\"default\":\"equiangular con\"}},\"category\":\"Sm\"},{\"key\":\"225B\",\"mappings\":{\"default\":{\"default\":\"igual con estrella\"}},\"category\":\"Sm\"},{\"key\":\"225C\",\"mappings\":{\"default\":{\"default\":\"igual con delta\"}},\"category\":\"Sm\"},{\"key\":\"225D\",\"mappings\":{\"default\":{\"default\":\"igual por definición a\"}},\"category\":\"Sm\"},{\"key\":\"225E\",\"mappings\":{\"default\":{\"default\":\"medido por\"}},\"category\":\"Sm\"},{\"key\":\"225F\",\"mappings\":{\"default\":{\"default\":\"igual con interrogante\"}},\"category\":\"Sm\"},{\"key\":\"2260\",\"mappings\":{\"default\":{\"default\":\"no es igual a\",\"defaultMP\":\"distinto de\"}},\"category\":\"Sm\"},{\"key\":\"2261\",\"mappings\":{\"default\":{\"default\":\"idéntico a\"}},\"category\":\"Sm\"},{\"key\":\"2262\",\"mappings\":{\"default\":{\"default\":\"no es idéntico a\"}},\"category\":\"Sm\"},{\"key\":\"2263\",\"mappings\":{\"default\":{\"default\":\"estrictamente equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2264\",\"mappings\":{\"default\":{\"default\":\"menor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"2265\",\"mappings\":{\"default\":{\"default\":\"mayor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"2266\",\"mappings\":{\"default\":{\"default\":\"menor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"2267\",\"mappings\":{\"default\":{\"default\":\"mayor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"2268\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que\"}},\"category\":\"Sm\"},{\"key\":\"2269\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que\"}},\"category\":\"Sm\"},{\"key\":\"226A\",\"mappings\":{\"default\":{\"default\":\"mucho menor que\"}},\"category\":\"Sm\"},{\"key\":\"226B\",\"mappings\":{\"default\":{\"default\":\"mucho mayor que\"}},\"category\":\"Sm\"},{\"key\":\"226C\",\"mappings\":{\"default\":{\"default\":\"entre\"}},\"category\":\"Sm\"},{\"key\":\"226D\",\"mappings\":{\"default\":{\"default\":\"no equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"226E\",\"mappings\":{\"default\":{\"default\":\"no menor que\"}},\"category\":\"Sm\"},{\"key\":\"226F\",\"mappings\":{\"default\":{\"default\":\"no mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2270\",\"mappings\":{\"default\":{\"default\":\"no menor ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"2271\",\"mappings\":{\"default\":{\"default\":\"no mayor ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"2272\",\"mappings\":{\"default\":{\"default\":\"menor o equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2273\",\"mappings\":{\"default\":{\"default\":\"mayor o equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2274\",\"mappings\":{\"default\":{\"default\":\"no menor ni equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2275\",\"mappings\":{\"default\":{\"default\":\"no mayor ni equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2276\",\"mappings\":{\"default\":{\"default\":\"menor o mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2277\",\"mappings\":{\"default\":{\"default\":\"mayor o menor que\"}},\"category\":\"Sm\"},{\"key\":\"2278\",\"mappings\":{\"default\":{\"default\":\"no menor ni mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2279\",\"mappings\":{\"default\":{\"default\":\"no mayor ni menor que\"}},\"category\":\"Sm\"},{\"key\":\"227A\",\"mappings\":{\"default\":{\"default\":\"precede a\"}},\"category\":\"Sm\"},{\"key\":\"227B\",\"mappings\":{\"default\":{\"default\":\"sigue a\"}},\"category\":\"Sm\"},{\"key\":\"227C\",\"mappings\":{\"default\":{\"default\":\"precede o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"227D\",\"mappings\":{\"default\":{\"default\":\"sigue o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"227E\",\"mappings\":{\"default\":{\"default\":\"precede o es equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"227F\",\"mappings\":{\"default\":{\"default\":\"sigue o es equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2280\",\"mappings\":{\"default\":{\"default\":\"no precede a\"}},\"category\":\"Sm\"},{\"key\":\"2281\",\"mappings\":{\"default\":{\"default\":\"no sigue a\"}},\"category\":\"Sm\"},{\"key\":\"2282\",\"mappings\":{\"default\":{\"default\":\"incluido en\"}},\"category\":\"Sm\"},{\"key\":\"2283\",\"mappings\":{\"default\":{\"default\":\"contiene a\"}},\"category\":\"Sm\"},{\"key\":\"2284\",\"mappings\":{\"default\":{\"default\":\"no incluido en\"}},\"category\":\"Sm\"},{\"key\":\"2285\",\"mappings\":{\"default\":{\"default\":\"no contiene a\"}},\"category\":\"Sm\"},{\"key\":\"2286\",\"mappings\":{\"default\":{\"default\":\"incluido o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2287\",\"mappings\":{\"default\":{\"default\":\"contiene o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"2288\",\"mappings\":{\"default\":{\"default\":\"no incluido ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"2289\",\"mappings\":{\"default\":{\"default\":\"no contiene ni es igual a\"}},\"category\":\"Sm\"},{\"key\":\"228A\",\"mappings\":{\"default\":{\"default\":\"incluido estrictamente en\"}},\"category\":\"Sm\"},{\"key\":\"228B\",\"mappings\":{\"default\":{\"default\":\"contiene estrictamente a\"}},\"category\":\"Sm\"},{\"key\":\"228C\",\"mappings\":{\"default\":{\"default\":\"familia de conjuntos\"}},\"category\":\"Sm\"},{\"key\":\"228D\",\"mappings\":{\"default\":{\"default\":\"producto de familia de conjuntos\"}},\"category\":\"Sm\"},{\"key\":\"228E\",\"mappings\":{\"default\":{\"default\":\"unión de familia de conjuntos\"}},\"category\":\"Sm\"},{\"key\":\"228F\",\"mappings\":{\"default\":{\"default\":\"imagen cuadrada de\"}},\"category\":\"Sm\"},{\"key\":\"2290\",\"mappings\":{\"default\":{\"default\":\"original cuadrado de\"}},\"category\":\"Sm\"},{\"key\":\"2291\",\"mappings\":{\"default\":{\"default\":\"imagen cuadrada de o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2292\",\"mappings\":{\"default\":{\"default\":\"original cuadrado de o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2293\",\"mappings\":{\"default\":{\"default\":\"intersección cuadrada\"}},\"category\":\"Sm\"},{\"key\":\"2294\",\"mappings\":{\"default\":{\"default\":\"unión cuadrada\"}},\"category\":\"Sm\"},{\"key\":\"2295\",\"mappings\":{\"default\":{\"default\":\"más en círculo\"}},\"category\":\"Sm\"},{\"key\":\"2296\",\"mappings\":{\"default\":{\"default\":\"menos en círculo\"}},\"category\":\"Sm\"},{\"key\":\"2297\",\"mappings\":{\"default\":{\"default\":\"por en círculo\"}},\"category\":\"Sm\"},{\"key\":\"2298\",\"mappings\":{\"default\":{\"default\":\"barra en círculo\"}},\"category\":\"Sm\"},{\"key\":\"2299\",\"mappings\":{\"default\":{\"default\":\"punto en círculo\"}},\"category\":\"Sm\"},{\"key\":\"229A\",\"mappings\":{\"default\":{\"default\":\"anillo en círculo\"}},\"category\":\"Sm\"},{\"key\":\"229B\",\"mappings\":{\"default\":{\"default\":\"asterisco en círculo\"}},\"category\":\"Sm\"},{\"key\":\"229C\",\"mappings\":{\"default\":{\"default\":\"igual en círculo\"}},\"category\":\"Sm\"},{\"key\":\"229D\",\"mappings\":{\"default\":{\"default\":\"menos en círculo\"}},\"category\":\"Sm\"},{\"key\":\"229E\",\"mappings\":{\"default\":{\"default\":\"más en cuadrado\"}},\"category\":\"Sm\"},{\"key\":\"229F\",\"mappings\":{\"default\":{\"default\":\"menos en cuadrado\"}},\"category\":\"Sm\"},{\"key\":\"22A0\",\"mappings\":{\"default\":{\"default\":\"veces en cuadrado\"}},\"category\":\"Sm\"},{\"key\":\"22A1\",\"mappings\":{\"default\":{\"default\":\"punto en cuadrado\"}},\"category\":\"Sm\"},{\"key\":\"22A2\",\"mappings\":{\"default\":{\"default\":\"t horizontal hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"22A3\",\"mappings\":{\"default\":{\"default\":\"t horizontal hacia la derecha\"}},\"category\":\"Sm\"},{\"key\":\"22A4\",\"mappings\":{\"default\":{\"default\":\"perpendicular\"}},\"category\":\"Sm\"},{\"key\":\"22A5\",\"mappings\":{\"default\":{\"default\":\"perpendicular invertida\"}},\"category\":\"Sm\"},{\"key\":\"22A6\",\"mappings\":{\"default\":{\"default\":\"afirmación\"}},\"category\":\"Sm\"},{\"key\":\"22A7\",\"mappings\":{\"default\":{\"default\":\"modela\"}},\"category\":\"Sm\"},{\"key\":\"22A8\",\"mappings\":{\"default\":{\"default\":\"verdadero\"}},\"category\":\"Sm\"},{\"key\":\"22A9\",\"mappings\":{\"default\":{\"default\":\"obliga\"}},\"category\":\"Sm\"},{\"key\":\"22AA\",\"mappings\":{\"default\":{\"default\":\"triple barra vertical torniquete derecho\"}},\"category\":\"Sm\"},{\"key\":\"22AB\",\"mappings\":{\"default\":{\"default\":\"doble barra vertical doble torniquete derecho\"}},\"category\":\"Sm\"},{\"key\":\"22AC\",\"mappings\":{\"default\":{\"default\":\"no prueba\"}},\"category\":\"Sm\"},{\"key\":\"22AD\",\"mappings\":{\"default\":{\"default\":\"falso\"}},\"category\":\"Sm\"},{\"key\":\"22AE\",\"mappings\":{\"default\":{\"default\":\"no obliga\"}},\"category\":\"Sm\"},{\"key\":\"22AF\",\"mappings\":{\"default\":{\"default\":\"doble barra vertical doble torniquete derecho negada\"}},\"category\":\"Sm\"},{\"key\":\"22B0\",\"mappings\":{\"default\":{\"default\":\"precede respecto de\"}},\"category\":\"Sm\"},{\"key\":\"22B1\",\"mappings\":{\"default\":{\"default\":\"sigue respecto de\"}},\"category\":\"Sm\"},{\"key\":\"22B2\",\"mappings\":{\"default\":{\"default\":\"subgrupo normal de\"}},\"category\":\"Sm\"},{\"key\":\"22B3\",\"mappings\":{\"default\":{\"default\":\"contiene como subgrupo normal a\"}},\"category\":\"Sm\"},{\"key\":\"22B4\",\"mappings\":{\"default\":{\"default\":\"subgrupo normal o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22B5\",\"mappings\":{\"default\":{\"default\":\"contiene como subgrupo normal o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22B6\",\"mappings\":{\"default\":{\"default\":\"original de\"}},\"category\":\"Sm\"},{\"key\":\"22B7\",\"mappings\":{\"default\":{\"default\":\"imagen de\"}},\"category\":\"Sm\"},{\"key\":\"22B8\",\"mappings\":{\"default\":{\"default\":\"multifunción\"}},\"category\":\"Sm\"},{\"key\":\"22B9\",\"mappings\":{\"default\":{\"default\":\"matriz hermitiana conjugada\"}},\"category\":\"Sm\"},{\"key\":\"22BA\",\"mappings\":{\"default\":{\"default\":\"interpola\"}},\"category\":\"Sm\"},{\"key\":\"22BB\",\"mappings\":{\"default\":{\"default\":\"o excluyente\"}},\"category\":\"Sm\"},{\"key\":\"22BC\",\"mappings\":{\"default\":{\"default\":\"no y\"}},\"category\":\"Sm\"},{\"key\":\"22BD\",\"mappings\":{\"default\":{\"default\":\"no o\"}},\"category\":\"Sm\"},{\"key\":\"22BF\",\"mappings\":{\"default\":{\"default\":\"triángulo rectángulo\"}},\"category\":\"Sm\"},{\"key\":\"22C0\",\"mappings\":{\"default\":{\"default\":\"y\"}},\"category\":\"Sm\"},{\"key\":\"22C1\",\"mappings\":{\"default\":{\"default\":\"o\"}},\"category\":\"Sm\"},{\"key\":\"22C2\",\"mappings\":{\"default\":{\"default\":\"intersección\"}},\"category\":\"Sm\"},{\"key\":\"22C3\",\"mappings\":{\"default\":{\"default\":\"unión\"}},\"category\":\"Sm\"},{\"key\":\"22C4\",\"mappings\":{\"default\":{\"default\":\"operador diamante\"}},\"category\":\"Sm\"},{\"key\":\"22C5\",\"mappings\":{\"default\":{\"default\":\"punto\"}},\"category\":\"Sm\"},{\"key\":\"22C6\",\"mappings\":{\"default\":{\"default\":\"estrella\"}},\"category\":\"Sm\"},{\"key\":\"22C7\",\"mappings\":{\"default\":{\"default\":\"dividido por\"}},\"category\":\"Sm\"},{\"key\":\"22C8\",\"mappings\":{\"default\":{\"default\":\"moño\"}},\"category\":\"Sm\"},{\"key\":\"22C9\",\"mappings\":{\"default\":{\"default\":\"factor normal izquierdo producto semidirecto\"}},\"category\":\"Sm\"},{\"key\":\"22CA\",\"mappings\":{\"default\":{\"default\":\"factor normal derecho producto semidirecto\"}},\"category\":\"Sm\"},{\"key\":\"22CB\",\"mappings\":{\"default\":{\"default\":\"producto semidirecto izquierdo\"}},\"category\":\"Sm\"},{\"key\":\"22CC\",\"mappings\":{\"default\":{\"default\":\"producto semidirecto derecho\"}},\"category\":\"Sm\"},{\"key\":\"22CD\",\"mappings\":{\"default\":{\"default\":\"tilde invertida igual a\"}},\"category\":\"Sm\"},{\"key\":\"22CE\",\"mappings\":{\"default\":{\"default\":\"o rizada\"}},\"category\":\"Sm\"},{\"key\":\"22CF\",\"mappings\":{\"default\":{\"default\":\"y rizada\"}},\"category\":\"Sm\"},{\"key\":\"22D0\",\"mappings\":{\"default\":{\"default\":\"doble incluido\"}},\"category\":\"Sm\"},{\"key\":\"22D1\",\"mappings\":{\"default\":{\"default\":\"doble contiene\"}},\"category\":\"Sm\"},{\"key\":\"22D2\",\"mappings\":{\"default\":{\"default\":\"doble intersección\"}},\"category\":\"Sm\"},{\"key\":\"22D3\",\"mappings\":{\"default\":{\"default\":\"doble unión\"}},\"category\":\"Sm\"},{\"key\":\"22D4\",\"mappings\":{\"default\":{\"default\":\"bieldo\"}},\"category\":\"Sm\"},{\"key\":\"22D5\",\"mappings\":{\"default\":{\"default\":\"paralela o igual a\"}},\"category\":\"Sm\"},{\"key\":\"22D6\",\"mappings\":{\"default\":{\"default\":\"menor que con punto\"}},\"category\":\"Sm\"},{\"key\":\"22D7\",\"mappings\":{\"default\":{\"default\":\"mayor que con punto\"}},\"category\":\"Sm\"},{\"key\":\"22D8\",\"mappings\":{\"default\":{\"default\":\"mucho menor que\"}},\"category\":\"Sm\"},{\"key\":\"22D9\",\"mappings\":{\"default\":{\"default\":\"mucho mayor que\"}},\"category\":\"Sm\"},{\"key\":\"22DA\",\"mappings\":{\"default\":{\"default\":\"menor igual o mayor que\"}},\"category\":\"Sm\"},{\"key\":\"22DB\",\"mappings\":{\"default\":{\"default\":\"mayor igual o menor que\"}},\"category\":\"Sm\"},{\"key\":\"22DC\",\"mappings\":{\"default\":{\"default\":\"menor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"22DD\",\"mappings\":{\"default\":{\"default\":\"mayor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"22DE\",\"mappings\":{\"default\":{\"default\":\"precede o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22DF\",\"mappings\":{\"default\":{\"default\":\"sigue o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22E0\",\"mappings\":{\"default\":{\"default\":\"no precede ni es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22E1\",\"mappings\":{\"default\":{\"default\":\"no sigue ni es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22E2\",\"mappings\":{\"default\":{\"default\":\"no es imagen cuadrada ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"22E3\",\"mappings\":{\"default\":{\"default\":\"no es original cuadrada ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"22E4\",\"mappings\":{\"default\":{\"default\":\"imagen cuadrada estricta\"}},\"category\":\"Sm\"},{\"key\":\"22E5\",\"mappings\":{\"default\":{\"default\":\"original cuadrada estricta\"}},\"category\":\"Sm\"},{\"key\":\"22E6\",\"mappings\":{\"default\":{\"default\":\"menor que no equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"22E7\",\"mappings\":{\"default\":{\"default\":\"mayor que no equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"22E8\",\"mappings\":{\"default\":{\"default\":\"precede no equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"22E9\",\"mappings\":{\"default\":{\"default\":\"sigue no equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"22EA\",\"mappings\":{\"default\":{\"default\":\"no subgrupo normal de\"}},\"category\":\"Sm\"},{\"key\":\"22EB\",\"mappings\":{\"default\":{\"default\":\"no contiene como subgrupo normal a\"}},\"category\":\"Sm\"},{\"key\":\"22EC\",\"mappings\":{\"default\":{\"default\":\"no es subgrupo normal ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"22ED\",\"mappings\":{\"default\":{\"default\":\"no contiene como subgrupo normal ni es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22EE\",\"mappings\":{\"default\":{\"default\":\"puntos suspensivos verticales\"}},\"category\":\"Sm\"},{\"key\":\"22EF\",\"mappings\":{\"default\":{\"default\":\"puntos suspensivos altos\"}},\"category\":\"Sm\"},{\"key\":\"22F0\",\"mappings\":{\"default\":{\"default\":\"puntos suspensivos diagonales subiendo\"}},\"category\":\"Sm\"},{\"key\":\"22F1\",\"mappings\":{\"default\":{\"default\":\"puntos suspensivos diagonales bajando\"}},\"category\":\"Sm\"},{\"key\":\"22F2\",\"mappings\":{\"default\":{\"default\":\"pertenece con trazo horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22F3\",\"mappings\":{\"default\":{\"default\":\"pertenece con barra vertical al fin de raya horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22F4\",\"mappings\":{\"default\":{\"default\":\"pertenece en pequeño con trazo vertical\"}},\"category\":\"Sm\"},{\"key\":\"22F5\",\"mappings\":{\"default\":{\"default\":\"pertenece con punto arriba\"}},\"category\":\"Sm\"},{\"key\":\"22F6\",\"mappings\":{\"default\":{\"default\":\"pertenece con barra arriba\"}},\"category\":\"Sm\"},{\"key\":\"22F7\",\"mappings\":{\"default\":{\"default\":\"perteneciente subrayado\"}},\"category\":\"Sm\"},{\"key\":\"22F8\",\"mappings\":{\"default\":{\"default\":\"perteneciente subrayado\"}},\"category\":\"Sm\"},{\"key\":\"22F9\",\"mappings\":{\"default\":{\"default\":\"pertenece con dos trazos horizontales\"}},\"category\":\"Sm\"},{\"key\":\"22FA\",\"mappings\":{\"default\":{\"default\":\"contiene o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22FB\",\"mappings\":{\"default\":{\"default\":\"contiene con marca\"}},\"category\":\"Sm\"},{\"key\":\"22FC\",\"mappings\":{\"default\":{\"default\":\"contiene con marca\"}},\"category\":\"Sm\"},{\"key\":\"22FD\",\"mappings\":{\"default\":{\"default\":\"contiene con barra\"}},\"category\":\"Sm\"},{\"key\":\"22FE\",\"mappings\":{\"default\":{\"default\":\"perteneciente con barra\"}},\"category\":\"Sm\"},{\"key\":\"22FF\",\"mappings\":{\"default\":{\"default\":\"z anotación asociación de bolsa\"}},\"category\":\"Sm\"},{\"key\":\"2300\",\"mappings\":{\"default\":{\"default\":\"diámetro\"}},\"category\":\"So\"},{\"key\":\"2302\",\"mappings\":{\"default\":{\"default\":\"casa\"}},\"category\":\"So\"},{\"key\":\"2305\",\"mappings\":{\"default\":{\"default\":\"en proyectividad con\"}},\"category\":\"So\"},{\"key\":\"2306\",\"mappings\":{\"default\":{\"default\":\"en perspectividad con\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2307\",\"mappings\":{\"default\":{\"default\":\"línea ondulada\"}}},{\"key\":\"2310\",\"mappings\":{\"default\":{\"default\":\"no invertido\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2311\",\"mappings\":{\"default\":{\"default\":\"pastillas cuadradas\"}}},{\"key\":\"2312\",\"mappings\":{\"default\":{\"default\":\"arco\"}},\"category\":\"So\"},{\"key\":\"2313\",\"mappings\":{\"default\":{\"default\":\"segmento\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2314\",\"mappings\":{\"default\":{\"default\":\"sector\"}}},{\"category\":\"So\",\"key\":\"2795\",\"mappings\":{\"default\":{\"default\":\"signo más pesado\"}}},{\"category\":\"So\",\"key\":\"2796\",\"mappings\":{\"default\":{\"default\":\"signo menos pesado\"}}},{\"category\":\"So\",\"key\":\"2797\",\"mappings\":{\"default\":{\"default\":\"signo de la división pesada\"}}},{\"category\":\"So\",\"key\":\"27B0\",\"mappings\":{\"default\":{\"default\":\"bucle rizado\"}}},{\"category\":\"So\",\"key\":\"27BF\",\"mappings\":{\"default\":{\"default\":\"doble bucle rizado\"}}},{\"key\":\"27C1\",\"mappings\":{\"default\":{\"default\":\"triángulo encerrando triángulo\"}},\"category\":\"Sm\"},{\"key\":\"27C2\",\"mappings\":{\"default\":{\"default\":\"perpendicular\"}},\"category\":\"Sm\"},{\"key\":\"27C3\",\"mappings\":{\"default\":{\"default\":\"incluido en\"}},\"category\":\"Sm\"},{\"key\":\"27C4\",\"mappings\":{\"default\":{\"default\":\"contiene a\"}},\"category\":\"Sm\"},{\"key\":\"27C7\",\"mappings\":{\"default\":{\"default\":\"punto en círculo\"}},\"category\":\"Sm\"},{\"key\":\"27C8\",\"mappings\":{\"default\":{\"default\":\"atrás tajo antes de subconjunto\"}},\"category\":\"Sm\"},{\"key\":\"27C9\",\"mappings\":{\"default\":{\"default\":\"sobreconjunto antes de tajo\"}},\"category\":\"Sm\"},{\"key\":\"27CA\",\"mappings\":{\"default\":{\"default\":\"barra vertical con golpe horizontal\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27CB\",\"mappings\":{\"default\":{\"default\":\"diagonal matemático de levantamiento\"}}},{\"key\":\"27CC\",\"mappings\":{\"default\":{\"default\":\"división larga\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27CD\",\"mappings\":{\"default\":{\"default\":\"diagonal descendente matemática\"}}},{\"category\":\"Sm\",\"key\":\"27CE\",\"mappings\":{\"default\":{\"default\":\"cuadrado Lógico Y\"}}},{\"category\":\"Sm\",\"key\":\"27CF\",\"mappings\":{\"default\":{\"default\":\"cuadrado Lógico O\"}}},{\"category\":\"Sm\",\"key\":\"27D0\",\"mappings\":{\"default\":{\"default\":\"diamante blanco con punto centrado\"}}},{\"key\":\"27D1\",\"mappings\":{\"default\":{\"default\":\"y con punto interior\"}},\"category\":\"Sm\"},{\"key\":\"27D2\",\"mappings\":{\"default\":{\"default\":\"elemento de apertura hacia arriba\"}},\"category\":\"Sm\"},{\"key\":\"27D3\",\"mappings\":{\"default\":{\"default\":\"ángulo inferior derecho con punto\"}},\"category\":\"Sm\"},{\"key\":\"27D4\",\"mappings\":{\"default\":{\"default\":\"ángulo inferior izquierdo con punto\"}},\"category\":\"Sm\"},{\"key\":\"27D5\",\"mappings\":{\"default\":{\"default\":\"izquierdo exterior une\"}},\"category\":\"Sm\"},{\"key\":\"27D6\",\"mappings\":{\"default\":{\"default\":\"derecho exterior une\"}},\"category\":\"Sm\"},{\"key\":\"27D7\",\"mappings\":{\"default\":{\"default\":\"lleno exterior une\"}},\"category\":\"Sm\"},{\"key\":\"27D8\",\"mappings\":{\"default\":{\"default\":\"perpendicular inversa\"}},\"category\":\"Sm\"},{\"key\":\"27D9\",\"mappings\":{\"default\":{\"default\":\"perpendicular\"}},\"category\":\"Sm\"},{\"key\":\"27DA\",\"mappings\":{\"default\":{\"default\":\"izquierdo y derecho doble torniquete\"}},\"category\":\"Sm\"},{\"key\":\"27DB\",\"mappings\":{\"default\":{\"default\":\"doble T horizontal\"}},\"category\":\"Sm\"},{\"key\":\"27DC\",\"mappings\":{\"default\":{\"default\":\"multifunción por la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"27DD\",\"mappings\":{\"default\":{\"default\":\"t horizontal derecha larga\"}},\"category\":\"Sm\"},{\"key\":\"27DE\",\"mappings\":{\"default\":{\"default\":\"t horizontal izquierda larga\"}},\"category\":\"Sm\"},{\"key\":\"27DF\",\"mappings\":{\"default\":{\"default\":\"perpendicular inversa con círculo arriba\"}},\"category\":\"Sm\"},{\"key\":\"27E0\",\"mappings\":{\"default\":{\"default\":\"pastilla dividida por regla horizontal\"}},\"category\":\"Sm\"},{\"key\":\"27E1\",\"mappings\":{\"default\":{\"default\":\"diamante cóncavo vacío\"}},\"category\":\"Sm\"},{\"key\":\"27E2\",\"mappings\":{\"default\":{\"default\":\"diamante cóncavo con tictac hacia izquierda\"}},\"category\":\"Sm\"},{\"key\":\"27E3\",\"mappings\":{\"default\":{\"default\":\"diamante cóncavo con tictac hacia derecha\"}},\"category\":\"Sm\"},{\"key\":\"27E4\",\"mappings\":{\"default\":{\"default\":\"cuadrado con tictac hacia izquierda\"}},\"category\":\"Sm\"},{\"key\":\"27E5\",\"mappings\":{\"default\":{\"default\":\"cuadrado con tictac hacia derecha\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"292B\",\"mappings\":{\"default\":{\"default\":\"cruce en diagonal Cruce en diagonal Caída en diagonal\"}}},{\"category\":\"Sm\",\"key\":\"292C\",\"mappings\":{\"default\":{\"default\":\"diagonal descendente Cruce diagonal ascendente\"}}},{\"category\":\"Sm\",\"key\":\"2980\",\"mappings\":{\"default\":{\"default\":\"delimitador de barra vertical triple\"}}},{\"category\":\"Sm\",\"key\":\"2981\",\"mappings\":{\"default\":{\"default\":\"punto de notación Z\"}}},{\"category\":\"Sm\",\"key\":\"2982\",\"mappings\":{\"default\":{\"default\":\"tipo de notación Z Colon\"}}},{\"category\":\"Sm\",\"key\":\"2999\",\"mappings\":{\"default\":{\"default\":\"valla punteada\"}}},{\"key\":\"299A\",\"mappings\":{\"default\":{\"default\":\"zigzag en vertical\"}},\"category\":\"Sm\"},{\"key\":\"29B0\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío invertido\"}},\"category\":\"Sm\"},{\"key\":\"29B1\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío con barra\"}},\"category\":\"Sm\"},{\"key\":\"29B2\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío con círculo\"}},\"category\":\"Sm\"},{\"key\":\"29B5\",\"mappings\":{\"default\":{\"default\":\"círculo con barra\"}},\"category\":\"Sm\"},{\"key\":\"29B6\",\"mappings\":{\"default\":{\"default\":\"barra en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29B7\",\"mappings\":{\"default\":{\"default\":\"paralelas en círculo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29B8\",\"mappings\":{\"default\":{\"default\":\"círculo inverso solidus\"}}},{\"key\":\"29B9\",\"mappings\":{\"default\":{\"default\":\"perpendicular en círculo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29BA\",\"mappings\":{\"default\":{\"default\":\"círculo dividido por barra horizontal y mitad superior dividido por barra vertical\"}}},{\"key\":\"29BB\",\"mappings\":{\"default\":{\"default\":\"x superimpresa en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29BC\",\"mappings\":{\"default\":{\"default\":\"circled anticlockwise rotated division\"}},\"category\":\"Sm\"},{\"key\":\"29BE\",\"mappings\":{\"default\":{\"default\":\"bullet vacía en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29BF\",\"mappings\":{\"default\":{\"default\":\"bullet en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29C0\",\"mappings\":{\"default\":{\"default\":\"menor que en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29C1\",\"mappings\":{\"default\":{\"default\":\"mayor que en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29C2\",\"mappings\":{\"default\":{\"default\":\"círculo con círculo a la derecha\"}},\"category\":\"Sm\"},{\"key\":\"29C3\",\"mappings\":{\"default\":{\"default\":\"circle with two horizontal strokes to the right\"}},\"category\":\"Sm\"},{\"key\":\"29C4\",\"mappings\":{\"default\":{\"default\":\"cuadrado con diagonal ascendente\"}},\"category\":\"Sm\"},{\"key\":\"29C5\",\"mappings\":{\"default\":{\"default\":\"cuadrado con diagonal descendente\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29C6\",\"mappings\":{\"default\":{\"default\":\"asterisco cuadrado\"}}},{\"category\":\"Sm\",\"key\":\"29C7\",\"mappings\":{\"default\":{\"default\":\"pequeño círculo cuadrado\"}}},{\"category\":\"Sm\",\"key\":\"29C8\",\"mappings\":{\"default\":{\"default\":\"cuadrado cuadrado\"}}},{\"key\":\"29C9\",\"mappings\":{\"default\":{\"default\":\"dos cuadrados unidos\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29CA\",\"mappings\":{\"default\":{\"default\":\"triángulo con punto arriba\"}}},{\"category\":\"Sm\",\"key\":\"29CB\",\"mappings\":{\"default\":{\"default\":\"triángulo con barra inferior\"}}},{\"category\":\"Sm\",\"key\":\"29CC\",\"mappings\":{\"default\":{\"default\":\"s en triangulo\"}}},{\"key\":\"29CD\",\"mappings\":{\"default\":{\"default\":\"triangle with serifs at bottom\"}},\"category\":\"Sm\"},{\"key\":\"29CE\",\"mappings\":{\"default\":{\"default\":\"triángulo hacia la derecha sobre triángulo hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"29CF\",\"mappings\":{\"default\":{\"default\":\"subgrupo normal o igual a\"}},\"category\":\"Sm\"},{\"key\":\"29D0\",\"mappings\":{\"default\":{\"default\":\"contiene como subgrupo normal o es igual a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29D1\",\"mappings\":{\"default\":{\"default\":\"pajarita Con Mitad Izquierda Negra\"}}},{\"category\":\"Sm\",\"key\":\"29D2\",\"mappings\":{\"default\":{\"default\":\"pajarita Con Mitad Derecha Negra\"}}},{\"category\":\"Sm\",\"key\":\"29D3\",\"mappings\":{\"default\":{\"default\":\"pajarita Negra\"}}},{\"category\":\"Sm\",\"key\":\"29D4\",\"mappings\":{\"default\":{\"default\":\"tiempos con Mitad Izquierda Negra\"}}},{\"category\":\"Sm\",\"key\":\"29D5\",\"mappings\":{\"default\":{\"default\":\"tiempos con la mitad derecha negra\"}}},{\"category\":\"Sm\",\"key\":\"29D6\",\"mappings\":{\"default\":{\"default\":\"reloj de arena blanco\"}}},{\"category\":\"Sm\",\"key\":\"29D7\",\"mappings\":{\"default\":{\"default\":\"reloj de arena negro\"}}},{\"key\":\"29DC\",\"mappings\":{\"default\":{\"default\":\"infinito incompleto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29DD\",\"mappings\":{\"default\":{\"default\":\"empate sobre el infinito\"}}},{\"key\":\"29DE\",\"mappings\":{\"default\":{\"default\":\"no infinito\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29DF\",\"mappings\":{\"default\":{\"default\":\"multimapa de doble extremo\"}}},{\"category\":\"Sm\",\"key\":\"29E0\",\"mappings\":{\"default\":{\"default\":\"cuadrado con contorno contorneado\"}}},{\"category\":\"Sm\",\"key\":\"29E1\",\"mappings\":{\"default\":{\"default\":\"aumenta como\"}}},{\"category\":\"Sm\",\"key\":\"29E2\",\"mappings\":{\"default\":{\"default\":\"shuffle Product\"}}},{\"key\":\"29E3\",\"mappings\":{\"default\":{\"default\":\"igual tachado doble \"}},\"category\":\"Sm\"},{\"key\":\"29E4\",\"mappings\":{\"default\":{\"default\":\"igual con tilde, con doble tachado\"}},\"category\":\"Sm\"},{\"key\":\"29E5\",\"mappings\":{\"default\":{\"default\":\"idéntico a con doble tachado\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29E6\",\"mappings\":{\"default\":{\"default\":\"gleich Stark\"}}},{\"category\":\"Sm\",\"key\":\"29E7\",\"mappings\":{\"default\":{\"default\":\"termodinamica\"}}},{\"category\":\"Sm\",\"key\":\"29E8\",\"mappings\":{\"default\":{\"default\":\"triángulo que apunta hacia abajo con la mitad izquierda negra\"}}},{\"category\":\"Sm\",\"key\":\"29E9\",\"mappings\":{\"default\":{\"default\":\"triángulo que apunta hacia abajo con la mitad derecha negra\"}}},{\"key\":\"29EB\",\"mappings\":{\"default\":{\"default\":\"rombo relleno\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29EE\",\"mappings\":{\"default\":{\"default\":\"plaza blanca con error\"}}},{\"category\":\"Sm\",\"key\":\"29EF\",\"mappings\":{\"default\":{\"default\":\"error en la Plaza Negra\"}}},{\"category\":\"Sm\",\"key\":\"29F0\",\"mappings\":{\"default\":{\"default\":\"error White Barred Diamond\"}}},{\"category\":\"Sm\",\"key\":\"29F1\",\"mappings\":{\"default\":{\"default\":\"error Black Barred Diamond\"}}},{\"category\":\"Sm\",\"key\":\"29F2\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con error\"}}},{\"category\":\"Sm\",\"key\":\"29F3\",\"mappings\":{\"default\":{\"default\":\"círculo negro con barras de error\"}}},{\"key\":\"29F4\",\"mappings\":{\"default\":{\"default\":\"rule delayed\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29F5\",\"mappings\":{\"default\":{\"default\":\"operador de Solidus Inverso\"}}},{\"key\":\"29F6\",\"mappings\":{\"default\":{\"default\":\"solidus with overbar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29F7\",\"mappings\":{\"default\":{\"default\":\"solidus inverso con trazo horizontal\"}}},{\"category\":\"Sm\",\"key\":\"29F8\",\"mappings\":{\"default\":{\"default\":\"sólido grande\"}}},{\"category\":\"Sm\",\"key\":\"29F9\",\"mappings\":{\"default\":{\"default\":\"sólido inverso grande\"}}},{\"category\":\"Sm\",\"key\":\"29FA\",\"mappings\":{\"default\":{\"default\":\"doble Plus\"}}},{\"category\":\"Sm\",\"key\":\"29FB\",\"mappings\":{\"default\":{\"default\":\"triple Plus\"}}},{\"category\":\"Sm\",\"key\":\"29FE\",\"mappings\":{\"default\":{\"default\":\"minúsculo\"}}},{\"category\":\"Sm\",\"key\":\"29FF\",\"mappings\":{\"default\":{\"default\":\"miny\"}}},{\"category\":\"Sm\",\"key\":\"2A00\",\"mappings\":{\"default\":{\"default\":\"operador de puntos circulares N-Ary\"}}},{\"category\":\"Sm\",\"key\":\"2A01\",\"mappings\":{\"default\":{\"default\":\"operador N-Ary Circled Plus\"}}},{\"category\":\"Sm\",\"key\":\"2A02\",\"mappings\":{\"default\":{\"default\":\"operador de los tiempos en círculo de N-Ary\"}}},{\"category\":\"Sm\",\"key\":\"2A03\",\"mappings\":{\"default\":{\"default\":\"operador de la unión N-Ary con punto\"}}},{\"category\":\"Sm\",\"key\":\"2A04\",\"mappings\":{\"default\":{\"default\":\"n-Ary Union Operator con Plus\"}}},{\"category\":\"Sm\",\"key\":\"2A05\",\"mappings\":{\"default\":{\"default\":\"operador de intersecciones cuadradas N-Ary\"}}},{\"category\":\"Sm\",\"key\":\"2A06\",\"mappings\":{\"default\":{\"default\":\"n-Ary Square Union Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A07\",\"mappings\":{\"default\":{\"default\":\"dos lógico y operador\"}}},{\"category\":\"Sm\",\"key\":\"2A08\",\"mappings\":{\"default\":{\"default\":\"dos lógico u operador\"}}},{\"category\":\"Sm\",\"key\":\"2A09\",\"mappings\":{\"default\":{\"default\":\"operador de N-Ary Times\"}}},{\"category\":\"Sm\",\"key\":\"2A0A\",\"mappings\":{\"default\":{\"default\":\"modulo dos sumas\"}}},{\"category\":\"Sm\",\"key\":\"2A0B\",\"mappings\":{\"default\":{\"default\":\"suma con Integral\"}}},{\"key\":\"2A0C\",\"mappings\":{\"default\":{\"default\":\"operador integral cuádruple\"}},\"category\":\"Sm\"},{\"key\":\"2A0D\",\"mappings\":{\"default\":{\"default\":\"finite part integral\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A0E\",\"mappings\":{\"default\":{\"default\":\"integral con Doble Trazo\"}}},{\"category\":\"Sm\",\"key\":\"2A0F\",\"mappings\":{\"default\":{\"default\":\"promedio Integral con Slash\"}}},{\"key\":\"2A10\",\"mappings\":{\"default\":{\"default\":\"circulation function\"}},\"category\":\"Sm\"},{\"key\":\"2A11\",\"mappings\":{\"default\":{\"default\":\"integral en sentido antihorario\"}},\"category\":\"Sm\"},{\"key\":\"2A12\",\"mappings\":{\"default\":{\"default\":\"integral lineal para rectángulo en polo\"}},\"category\":\"Sm\"},{\"key\":\"2A13\",\"mappings\":{\"default\":{\"default\":\"integral lineal para semicírculo en polo\"}},\"category\":\"Sm\"},{\"key\":\"2A14\",\"mappings\":{\"default\":{\"default\":\"integral lineal excluyendo el polo\"}},\"category\":\"Sm\"},{\"key\":\"2A15\",\"mappings\":{\"default\":{\"default\":\"integral en torno de un punto operador\"}},\"category\":\"Sm\"},{\"key\":\"2A16\",\"mappings\":{\"default\":{\"default\":\"operador integral para cuaterniones\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A18\",\"mappings\":{\"default\":{\"default\":\"integral con Times Sign\"}}},{\"category\":\"Sm\",\"key\":\"2A19\",\"mappings\":{\"default\":{\"default\":\"integral con Intersección\"}}},{\"category\":\"Sm\",\"key\":\"2A1A\",\"mappings\":{\"default\":{\"default\":\"integral con union\"}}},{\"category\":\"Sm\",\"key\":\"2A1B\",\"mappings\":{\"default\":{\"default\":\"integral con Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A1C\",\"mappings\":{\"default\":{\"default\":\"integral con barra inferior\"}}},{\"category\":\"Sm\",\"key\":\"2A1D\",\"mappings\":{\"default\":{\"default\":\"unirse\"}}},{\"category\":\"Sm\",\"key\":\"2A1E\",\"mappings\":{\"default\":{\"default\":\"operador de triángulo izquierdo grande\"}}},{\"category\":\"Sm\",\"key\":\"2A1F\",\"mappings\":{\"default\":{\"default\":\"composición de esquemas de notación Z\"}}},{\"category\":\"Sm\",\"key\":\"2A20\",\"mappings\":{\"default\":{\"default\":\"esquema de notación Z\"}}},{\"category\":\"Sm\",\"key\":\"2A21\",\"mappings\":{\"default\":{\"default\":\"proyección del esquema de notación Z\"}}},{\"key\":\"2A22\",\"mappings\":{\"default\":{\"default\":\"más con círculo\"}},\"category\":\"Sm\"},{\"key\":\"2A23\",\"mappings\":{\"default\":{\"default\":\"más con ángulo\"}},\"category\":\"Sm\"},{\"key\":\"2A24\",\"mappings\":{\"default\":{\"default\":\"tilde con más suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2A25\",\"mappings\":{\"default\":{\"default\":\"más con punto inferior\"}},\"category\":\"Sm\"},{\"key\":\"2A26\",\"mappings\":{\"default\":{\"default\":\"tilde con más\"}},\"category\":\"Sm\"},{\"key\":\"2A27\",\"mappings\":{\"default\":{\"default\":\"más con 2 suscrito\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A28\",\"mappings\":{\"default\":{\"default\":\"signo más con triángulo negro\"}}},{\"key\":\"2A29\",\"mappings\":{\"default\":{\"default\":\"menos con coma\"}},\"category\":\"Sm\"},{\"key\":\"2A2A\",\"mappings\":{\"default\":{\"default\":\"menos con punto inferior\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A2B\",\"mappings\":{\"default\":{\"default\":\"signo menos con puntos que caen\"}}},{\"category\":\"Sm\",\"key\":\"2A2C\",\"mappings\":{\"default\":{\"default\":\"signo menos con puntos crecientes\"}}},{\"key\":\"2A2D\",\"mappings\":{\"default\":{\"default\":\"más en semicírculo izquierdo\"}},\"category\":\"Sm\"},{\"key\":\"2A2E\",\"mappings\":{\"default\":{\"default\":\"más en semicírculo derecho\"}},\"category\":\"Sm\"},{\"key\":\"2A2F\",\"mappings\":{\"default\":{\"default\":\"producto vectorial\"}},\"category\":\"Sm\"},{\"key\":\"2A30\",\"mappings\":{\"default\":{\"default\":\"por con punto\"}},\"category\":\"Sm\"},{\"key\":\"2A31\",\"mappings\":{\"default\":{\"default\":\"por con subrayado\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A32\",\"mappings\":{\"default\":{\"default\":\"producto semidirecto con fondo cerrado\"}}},{\"key\":\"2A33\",\"mappings\":{\"default\":{\"default\":\"smash product\"}},\"category\":\"Sm\"},{\"key\":\"2A34\",\"mappings\":{\"default\":{\"default\":\"por en semicírculo izquierdo\"}},\"category\":\"Sm\"},{\"key\":\"2A35\",\"mappings\":{\"default\":{\"default\":\"por en semicírculo derecho\"}},\"category\":\"Sm\"},{\"key\":\"2A36\",\"mappings\":{\"default\":{\"default\":\"por en círculo con ángulo\"}},\"category\":\"Sm\"},{\"key\":\"2A37\",\"mappings\":{\"default\":{\"default\":\"por en anillo\"}},\"category\":\"Sm\"},{\"key\":\"2A38\",\"mappings\":{\"default\":{\"default\":\"división en círculo\"}},\"category\":\"Sm\"},{\"key\":\"2A39\",\"mappings\":{\"default\":{\"default\":\"más en triángulo\"}},\"category\":\"Sm\"},{\"key\":\"2A3A\",\"mappings\":{\"default\":{\"default\":\"menos en triángulo\"}},\"category\":\"Sm\"},{\"key\":\"2A3B\",\"mappings\":{\"default\":{\"default\":\"por en triángulo\"}},\"category\":\"Sm\"},{\"key\":\"2A3C\",\"mappings\":{\"default\":{\"default\":\"producto interior\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A3D\",\"mappings\":{\"default\":{\"default\":\"producto interior derecho\"}}},{\"category\":\"Sm\",\"key\":\"2A3E\",\"mappings\":{\"default\":{\"default\":\"notación Z Composición Relacional\"}}},{\"key\":\"2A3F\",\"mappings\":{\"default\":{\"default\":\"coproducto\"}},\"category\":\"Sm\"},{\"key\":\"2A40\",\"mappings\":{\"default\":{\"default\":\"intersección con punto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A41\",\"mappings\":{\"default\":{\"default\":\"unión con signo de menos\"}}},{\"key\":\"2A42\",\"mappings\":{\"default\":{\"default\":\"unión con barra\"}},\"category\":\"Sm\"},{\"key\":\"2A43\",\"mappings\":{\"default\":{\"default\":\"intersección con barra\"}},\"category\":\"Sm\"},{\"key\":\"2A44\",\"mappings\":{\"default\":{\"default\":\"intersección con and\"}},\"category\":\"Sm\"},{\"key\":\"2A45\",\"mappings\":{\"default\":{\"default\":\"unión con or\"}},\"category\":\"Sm\"},{\"key\":\"2A46\",\"mappings\":{\"default\":{\"default\":\"unión sobre intersección\"}},\"category\":\"Sm\"},{\"key\":\"2A47\",\"mappings\":{\"default\":{\"default\":\"intersección sobre unión\"}},\"category\":\"Sm\"},{\"key\":\"2A48\",\"mappings\":{\"default\":{\"default\":\"unión sobre barra, sobre intersección\"}},\"category\":\"Sm\"},{\"key\":\"2A49\",\"mappings\":{\"default\":{\"default\":\"intersección sobre barra, sobre unión \"}},\"category\":\"Sm\"},{\"key\":\"2A4A\",\"mappings\":{\"default\":{\"default\":\"unión y unión\"}},\"category\":\"Sm\"},{\"key\":\"2A4B\",\"mappings\":{\"default\":{\"default\":\"intersección e intersección\"}},\"category\":\"Sm\"},{\"key\":\"2A4C\",\"mappings\":{\"default\":{\"default\":\"unión cerrada\"}},\"category\":\"Sm\"},{\"key\":\"2A4D\",\"mappings\":{\"default\":{\"default\":\"intersección cerrada\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A4E\",\"mappings\":{\"default\":{\"default\":\"intersección cuadrada doble\"}}},{\"category\":\"Sm\",\"key\":\"2A4F\",\"mappings\":{\"default\":{\"default\":\"unión cuadrada doble\"}}},{\"key\":\"2A50\",\"mappings\":{\"default\":{\"default\":\"unión cerrada con por\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A51\",\"mappings\":{\"default\":{\"default\":\"lógico y con punto arriba.\"}}},{\"category\":\"Sm\",\"key\":\"2A52\",\"mappings\":{\"default\":{\"default\":\"lógico o con punto arriba\"}}},{\"key\":\"2A53\",\"mappings\":{\"default\":{\"default\":\"y\"}},\"category\":\"Sm\"},{\"key\":\"2A54\",\"mappings\":{\"default\":{\"default\":\"o\"}},\"category\":\"Sm\"},{\"key\":\"2A55\",\"mappings\":{\"default\":{\"default\":\"two intersecting logical and\"}},\"category\":\"Sm\"},{\"key\":\"2A56\",\"mappings\":{\"default\":{\"default\":\"two intersecting logical or\"}},\"category\":\"Sm\"},{\"key\":\"2A57\",\"mappings\":{\"default\":{\"default\":\"sloping large or\"}},\"category\":\"Sm\"},{\"key\":\"2A58\",\"mappings\":{\"default\":{\"default\":\"sloping large and\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A59\",\"mappings\":{\"default\":{\"default\":\"lógica o superpuesta, lógica y\"}}},{\"key\":\"2A5A\",\"mappings\":{\"default\":{\"default\":\"logical and with middle stem\"}},\"category\":\"Sm\"},{\"key\":\"2A5B\",\"mappings\":{\"default\":{\"default\":\"logical or with middle stem\"}},\"category\":\"Sm\"},{\"key\":\"2A5C\",\"mappings\":{\"default\":{\"default\":\"logical and with horizontal dash\"}},\"category\":\"Sm\"},{\"key\":\"2A5D\",\"mappings\":{\"default\":{\"default\":\"logical or with horizontal dash\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A5E\",\"mappings\":{\"default\":{\"default\":\"lógica y con doble Overbar\"}}},{\"key\":\"2A5F\",\"mappings\":{\"default\":{\"default\":\"logical and with underbar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A60\",\"mappings\":{\"default\":{\"default\":\"lógica y con doble barra inferior.\"}}},{\"category\":\"Sm\",\"key\":\"2A61\",\"mappings\":{\"default\":{\"default\":\"pequeño Vee con Underbar\"}}},{\"category\":\"Sm\",\"key\":\"2A62\",\"mappings\":{\"default\":{\"default\":\"lógica o con doble barra.\"}}},{\"category\":\"Sm\",\"key\":\"2A63\",\"mappings\":{\"default\":{\"default\":\"lógica o con doble barra inferior\"}}},{\"category\":\"Sm\",\"key\":\"2A64\",\"mappings\":{\"default\":{\"default\":\"notación Z Dominio Antirestricción\"}}},{\"category\":\"Sm\",\"key\":\"2A65\",\"mappings\":{\"default\":{\"default\":\"rango de notación Z Antirestricción\"}}},{\"key\":\"2A66\",\"mappings\":{\"default\":{\"default\":\"igual con punto suscrito\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A67\",\"mappings\":{\"default\":{\"default\":\"idéntico con punto arriba\"}}},{\"category\":\"Sm\",\"key\":\"2A68\",\"mappings\":{\"default\":{\"default\":\"triple barra horizontal con doble movimiento vertical\"}}},{\"category\":\"Sm\",\"key\":\"2A69\",\"mappings\":{\"default\":{\"default\":\"triple barra horizontal con triple movimiento vertical\"}}},{\"key\":\"2A6A\",\"mappings\":{\"default\":{\"default\":\"tilde con punto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A6B\",\"mappings\":{\"default\":{\"default\":\"operador de tilde con puntos crecientes\"}}},{\"category\":\"Sm\",\"key\":\"2A6C\",\"mappings\":{\"default\":{\"default\":\"similares menos similares\"}}},{\"key\":\"2A6D\",\"mappings\":{\"default\":{\"default\":\"congruente con punto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A6E\",\"mappings\":{\"default\":{\"default\":\"igual a Asterisco\"}}},{\"key\":\"2A6F\",\"mappings\":{\"default\":{\"default\":\"casi igual con ángulo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A70\",\"mappings\":{\"default\":{\"default\":\"aproximadamente igual o igual a\"}}},{\"key\":\"2A71\",\"mappings\":{\"default\":{\"default\":\"igual con más suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2A72\",\"mappings\":{\"default\":{\"default\":\"igual con más\"}},\"category\":\"Sm\"},{\"key\":\"2A73\",\"mappings\":{\"default\":{\"default\":\"igual con operador tilde\"}},\"category\":\"Sm\"},{\"key\":\"2A74\",\"mappings\":{\"default\":{\"default\":\"igual con dos puntos\"}},\"category\":\"Sm\"},{\"key\":\"2A75\",\"mappings\":{\"default\":{\"default\":\"igual doble\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A76\",\"mappings\":{\"default\":{\"default\":\"tres signos de igualdad consecutivos\"}}},{\"key\":\"2A77\",\"mappings\":{\"default\":{\"default\":\"igual entre cuatro puntos\"}},\"category\":\"Sm\"},{\"key\":\"2A78\",\"mappings\":{\"default\":{\"default\":\"equivalente con cuatro puntos\"}},\"category\":\"Sm\"},{\"key\":\"2A79\",\"mappings\":{\"default\":{\"default\":\"menor que con círculo interior\"}},\"category\":\"Sm\"},{\"key\":\"2A7A\",\"mappings\":{\"default\":{\"default\":\"mayor que con círculo interior\"}},\"category\":\"Sm\"},{\"key\":\"2A7B\",\"mappings\":{\"default\":{\"default\":\"menor que con interrogante\"}},\"category\":\"Sm\"},{\"key\":\"2A7C\",\"mappings\":{\"default\":{\"default\":\"mayor que con interrogante\"}},\"category\":\"Sm\"},{\"key\":\"2A7D\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que\"}},\"category\":\"Sm\"},{\"key\":\"2A7E\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2A7F\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que con punto interior\"}},\"category\":\"Sm\"},{\"key\":\"2A80\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que con punto interior\"}},\"category\":\"Sm\"},{\"key\":\"2A81\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que con punto\"}},\"category\":\"Sm\"},{\"key\":\"2A82\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que con punto\"}},\"category\":\"Sm\"},{\"key\":\"2A83\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que con punto\"}},\"category\":\"Sm\"},{\"key\":\"2A84\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que con punto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A85\",\"mappings\":{\"default\":{\"default\":\"menor que o aproximado\"}}},{\"category\":\"Sm\",\"key\":\"2A86\",\"mappings\":{\"default\":{\"default\":\"mayor que o aproximado\"}}},{\"category\":\"Sm\",\"key\":\"2A87\",\"mappings\":{\"default\":{\"default\":\"menor que una línea no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2A88\",\"mappings\":{\"default\":{\"default\":\"mayores y una sola línea no son iguales a\"}}},{\"key\":\"2A89\",\"mappings\":{\"default\":{\"default\":\"menor que, pero no aproximado a\"}},\"category\":\"Sm\"},{\"key\":\"2A8A\",\"mappings\":{\"default\":{\"default\":\"mayor que, pero no aproximado a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A8B\",\"mappings\":{\"default\":{\"default\":\"menos que arriba de la doble línea igual por encima de mayor que\"}}},{\"category\":\"Sm\",\"key\":\"2A8C\",\"mappings\":{\"default\":{\"default\":\"más que arriba de la línea doble igual sobre menos que\"}}},{\"key\":\"2A8D\",\"mappings\":{\"default\":{\"default\":\"menor, similar o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2A8E\",\"mappings\":{\"default\":{\"default\":\"mayor, similar o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2A8F\",\"mappings\":{\"default\":{\"default\":\"menor, similar o mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2A90\",\"mappings\":{\"default\":{\"default\":\"mayor, similar o menor que\"}},\"category\":\"Sm\"},{\"key\":\"2A91\",\"mappings\":{\"default\":{\"default\":\"menor, mayor o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2A92\",\"mappings\":{\"default\":{\"default\":\"mayor, menor o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2A93\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor o mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2A94\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor o menor que\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A95\",\"mappings\":{\"default\":{\"default\":\"inclinado igual o menor que\"}}},{\"category\":\"Sm\",\"key\":\"2A96\",\"mappings\":{\"default\":{\"default\":\"inclinado igual o mayor que\"}}},{\"key\":\"2A97\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que con punto interior\"}},\"category\":\"Sm\"},{\"key\":\"2A98\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que con punto interior\"}},\"category\":\"Sm\"},{\"key\":\"2A99\",\"mappings\":{\"default\":{\"default\":\"menor o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2A9A\",\"mappings\":{\"default\":{\"default\":\"mayor o igual a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A9B\",\"mappings\":{\"default\":{\"default\":\"doble línea inclinada igual o menor que\"}}},{\"category\":\"Sm\",\"key\":\"2A9C\",\"mappings\":{\"default\":{\"default\":\"doble línea inclinada igual o mayor que\"}}},{\"key\":\"2A9D\",\"mappings\":{\"default\":{\"default\":\"equivalente o menor que\"}},\"category\":\"Sm\"},{\"key\":\"2A9E\",\"mappings\":{\"default\":{\"default\":\"mayor o similar a\"}},\"category\":\"Sm\"},{\"key\":\"2A9F\",\"mappings\":{\"default\":{\"default\":\"similar, menor o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AA0\",\"mappings\":{\"default\":{\"default\":\"similar, mayor o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AA1\",\"mappings\":{\"default\":{\"default\":\"mucho menor que\"}},\"category\":\"Sm\"},{\"key\":\"2AA2\",\"mappings\":{\"default\":{\"default\":\"mucho mayor que\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AA3\",\"mappings\":{\"default\":{\"default\":\"doble anidada menor que con barra inferior\"}}},{\"key\":\"2AA4\",\"mappings\":{\"default\":{\"default\":\"menor que, mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2AA5\",\"mappings\":{\"default\":{\"default\":\"mayor o menor que\"}},\"category\":\"Sm\"},{\"key\":\"2AA6\",\"mappings\":{\"default\":{\"default\":\"menor que cerrado con curva\"}},\"category\":\"Sm\"},{\"key\":\"2AA7\",\"mappings\":{\"default\":{\"default\":\"mayor que cerrado con curva\"}},\"category\":\"Sm\"},{\"key\":\"2AA8\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que cerrado con curva\"}},\"category\":\"Sm\"},{\"key\":\"2AA9\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que cerrado con curva\"}},\"category\":\"Sm\"},{\"key\":\"2AAA\",\"mappings\":{\"default\":{\"default\":\"más reducido que\"}},\"category\":\"Sm\"},{\"key\":\"2AAB\",\"mappings\":{\"default\":{\"default\":\"más amplio que\"}},\"category\":\"Sm\"},{\"key\":\"2AAC\",\"mappings\":{\"default\":{\"default\":\"más reducido o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AAD\",\"mappings\":{\"default\":{\"default\":\"más amplio o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AAE\",\"mappings\":{\"default\":{\"default\":\"diferencia entre\"}},\"category\":\"Sm\"},{\"key\":\"2AAF\",\"mappings\":{\"default\":{\"default\":\"precede o es igual a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AB0\",\"mappings\":{\"default\":{\"default\":\"sucede por encima de la línea de igual signo\"}}},{\"category\":\"Sm\",\"key\":\"2AB1\",\"mappings\":{\"default\":{\"default\":\"precede por encima de una línea no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AB2\",\"mappings\":{\"default\":{\"default\":\"tiene éxito por encima de una línea no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AB3\",\"mappings\":{\"default\":{\"default\":\"precede arriba del signo igual\"}}},{\"category\":\"Sm\",\"key\":\"2AB4\",\"mappings\":{\"default\":{\"default\":\"sucede por encima del signo igual\"}}},{\"key\":\"2AB5\",\"mappings\":{\"default\":{\"default\":\"precede estrictamente a\"}},\"category\":\"Sm\"},{\"key\":\"2AB6\",\"mappings\":{\"default\":{\"default\":\"sigue estrictamente a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AB7\",\"mappings\":{\"default\":{\"default\":\"precede por encima de casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AB8\",\"mappings\":{\"default\":{\"default\":\"tiene éxito por encima de casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AB9\",\"mappings\":{\"default\":{\"default\":\"precede arriba no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2ABA\",\"mappings\":{\"default\":{\"default\":\"tiene éxito por encima de no casi igual a\"}}},{\"key\":\"2ABB\",\"mappings\":{\"default\":{\"default\":\"precede mucho antes\"}},\"category\":\"Sm\"},{\"key\":\"2ABC\",\"mappings\":{\"default\":{\"default\":\"sigue mucho después\"}},\"category\":\"Sm\"},{\"key\":\"2ABD\",\"mappings\":{\"default\":{\"default\":\"subrelación de\"}},\"category\":\"Sm\"},{\"key\":\"2ABE\",\"mappings\":{\"default\":{\"default\":\"contiene como subrelación a\"}},\"category\":\"Sm\"},{\"key\":\"2ABF\",\"mappings\":{\"default\":{\"default\":\"incluido con más suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2AC0\",\"mappings\":{\"default\":{\"default\":\"contiene con más suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2AC1\",\"mappings\":{\"default\":{\"default\":\"incluido con por suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2AC2\",\"mappings\":{\"default\":{\"default\":\"contiene con por suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2AC3\",\"mappings\":{\"default\":{\"default\":\"incluido con punto o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AC4\",\"mappings\":{\"default\":{\"default\":\"contiene con punto o es igual a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AC5\",\"mappings\":{\"default\":{\"default\":\"subconjunto de signo igual arriba\"}}},{\"category\":\"Sm\",\"key\":\"2AC6\",\"mappings\":{\"default\":{\"default\":\"superconjunto de signo igual arriba\"}}},{\"key\":\"2AC7\",\"mappings\":{\"default\":{\"default\":\"incluido aproximadamente en\"}},\"category\":\"Sm\"},{\"key\":\"2AC8\",\"mappings\":{\"default\":{\"default\":\"contiene aproximadamente a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AC9\",\"mappings\":{\"default\":{\"default\":\"subconjunto de Arriba Casi Igual a\"}}},{\"category\":\"Sm\",\"key\":\"2ACA\",\"mappings\":{\"default\":{\"default\":\"superconjunto de arriba casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2ACB\",\"mappings\":{\"default\":{\"default\":\"subconjunto de lo anterior no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2ACC\",\"mappings\":{\"default\":{\"default\":\"superconjunto de arriba no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2ACD\",\"mappings\":{\"default\":{\"default\":\"operador de caja abierta a la izquierda cuadrada\"}}},{\"category\":\"Sm\",\"key\":\"2ACE\",\"mappings\":{\"default\":{\"default\":\"operador de caja abierta a la derecha cuadrada\"}}},{\"key\":\"2ACF\",\"mappings\":{\"default\":{\"default\":\"incluido con cierre en\"}},\"category\":\"Sm\"},{\"key\":\"2AD0\",\"mappings\":{\"default\":{\"default\":\"contiene al cierre del subconjunto\"}},\"category\":\"Sm\"},{\"key\":\"2AD1\",\"mappings\":{\"default\":{\"default\":\"incluido el cierre o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AD2\",\"mappings\":{\"default\":{\"default\":\"contiene al cierre del subconjunto o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AD3\",\"mappings\":{\"default\":{\"default\":\"está incluido o contiene a\"}},\"category\":\"Sm\"},{\"key\":\"2AD4\",\"mappings\":{\"default\":{\"default\":\"contiene o está incluido en\"}},\"category\":\"Sm\"},{\"key\":\"2AD5\",\"mappings\":{\"default\":{\"default\":\"incluido doblemente en\"}},\"category\":\"Sm\"},{\"key\":\"2AD6\",\"mappings\":{\"default\":{\"default\":\"contiene doblemente a\"}},\"category\":\"Sm\"},{\"key\":\"2AD7\",\"mappings\":{\"default\":{\"default\":\"contiene o está incluido en\"}},\"category\":\"Sm\"},{\"key\":\"2AD8\",\"mappings\":{\"default\":{\"default\":\"contiene o está incluido en\"}},\"category\":\"Sm\"},{\"key\":\"2AD9\",\"mappings\":{\"default\":{\"default\":\"perteneciente dirigido hacia abajo\"}},\"category\":\"Sm\"},{\"key\":\"2ADA\",\"mappings\":{\"default\":{\"default\":\"pitchfork with tee top\"}},\"category\":\"Sm\"},{\"key\":\"2ADB\",\"mappings\":{\"default\":{\"default\":\"transversal intersection\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2ADC\",\"mappings\":{\"default\":{\"default\":\"bifurcación\"}}},{\"category\":\"Sm\",\"key\":\"2ADD\",\"mappings\":{\"default\":{\"default\":\"nonforking\"}}},{\"category\":\"Sm\",\"key\":\"2ADE\",\"mappings\":{\"default\":{\"default\":\"tachuela Izquierda Corta\"}}},{\"category\":\"Sm\",\"key\":\"2ADF\",\"mappings\":{\"default\":{\"default\":\"tachuela corta hacia abajo\"}}},{\"category\":\"Sm\",\"key\":\"2AE0\",\"mappings\":{\"default\":{\"default\":\"short Up Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AE1\",\"mappings\":{\"default\":{\"default\":\"perpendicular con s\"}}},{\"category\":\"Sm\",\"key\":\"2AE2\",\"mappings\":{\"default\":{\"default\":\"barra vertical Torniquete a la derecha\"}}},{\"category\":\"Sm\",\"key\":\"2AE3\",\"mappings\":{\"default\":{\"default\":\"barra vertical doble Torniquete izquierdo\"}}},{\"key\":\"2AE4\",\"mappings\":{\"default\":{\"default\":\"double left turnstile vertical bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AE5\",\"mappings\":{\"default\":{\"default\":\"doble barra vertical doble torniquete izquierdo\"}}},{\"key\":\"2AE6\",\"mappings\":{\"default\":{\"default\":\"long dash from left member of double vertical\"}},\"category\":\"Sm\"},{\"key\":\"2AE7\",\"mappings\":{\"default\":{\"default\":\"short down tack with overbar\"}},\"category\":\"Sm\"},{\"key\":\"2AE8\",\"mappings\":{\"default\":{\"default\":\"barra con perpendicular\"}},\"category\":\"Sm\"},{\"key\":\"2AE9\",\"mappings\":{\"default\":{\"default\":\"short up tack above short down tack\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AEA\",\"mappings\":{\"default\":{\"default\":\"tachuela doble\"}}},{\"key\":\"2AEB\",\"mappings\":{\"default\":{\"default\":\"double up tack\"}},\"category\":\"Sm\"},{\"key\":\"2AEC\",\"mappings\":{\"default\":{\"default\":\"double stroke not sign\"}},\"category\":\"Sm\"},{\"key\":\"2AED\",\"mappings\":{\"default\":{\"default\":\"reversed double stroke not sign\"}},\"category\":\"Sm\"},{\"key\":\"2AEE\",\"mappings\":{\"default\":{\"default\":\"does not divide with reversed negation slash\"}},\"category\":\"Sm\"},{\"key\":\"2AEF\",\"mappings\":{\"default\":{\"default\":\"barra vertical con círculo\"}},\"category\":\"Sm\"},{\"key\":\"2AF0\",\"mappings\":{\"default\":{\"default\":\"barra con círculo inferior\"}},\"category\":\"Sm\"},{\"key\":\"2AF1\",\"mappings\":{\"default\":{\"default\":\"down tack with circle below\"}},\"category\":\"Sm\"},{\"key\":\"2AF2\",\"mappings\":{\"default\":{\"default\":\"paralela con marca\"}},\"category\":\"Sm\"},{\"key\":\"2AF3\",\"mappings\":{\"default\":{\"default\":\"paralela con tilde\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AF4\",\"mappings\":{\"default\":{\"default\":\"relación binaria de barra vertical triple\"}}},{\"category\":\"Sm\",\"key\":\"2AF5\",\"mappings\":{\"default\":{\"default\":\"barra vertical triple con trazo horizontal\"}}},{\"category\":\"Sm\",\"key\":\"2AF6\",\"mappings\":{\"default\":{\"default\":\"operador Triple Colon\"}}},{\"category\":\"Sm\",\"key\":\"2AF7\",\"mappings\":{\"default\":{\"default\":\"triple anidada menos que\"}}},{\"category\":\"Sm\",\"key\":\"2AF8\",\"mappings\":{\"default\":{\"default\":\"triple anidado mayor que\"}}},{\"category\":\"Sm\",\"key\":\"2AF9\",\"mappings\":{\"default\":{\"default\":\"doble línea inclinada menor o igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AFA\",\"mappings\":{\"default\":{\"default\":\"doble línea inclinada mayor o igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AFB\",\"mappings\":{\"default\":{\"default\":\"relación Binaria Triple Sólida\"}}},{\"category\":\"Sm\",\"key\":\"2AFC\",\"mappings\":{\"default\":{\"default\":\"operador de barra vertical triple grande\"}}},{\"category\":\"Sm\",\"key\":\"2AFD\",\"mappings\":{\"default\":{\"default\":\"operador Doble Sólido\"}}},{\"category\":\"Sm\",\"key\":\"2AFE\",\"mappings\":{\"default\":{\"default\":\"barra vertical blanca\"}}},{\"category\":\"Sm\",\"key\":\"2AFF\",\"mappings\":{\"default\":{\"default\":\"barra vertical blanca N-Ary\"}}},{\"category\":\"Pd\",\"key\":\"301C\",\"mappings\":{\"default\":{\"default\":\"wave Dash\"}}},{\"category\":\"Po\",\"key\":\"FE10\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para coma vertical\"}}},{\"category\":\"Po\",\"key\":\"FE13\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para colon vertical\"}}},{\"category\":\"Po\",\"key\":\"FE14\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para punto y coma vertical\"}}},{\"category\":\"Po\",\"key\":\"FE15\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el signo de exclamación vertical\"}}},{\"category\":\"Po\",\"key\":\"FE16\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el signo de interrogación vertical\"}}},{\"category\":\"Po\",\"key\":\"FE19\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para elipsis horizontal vertical\"}}},{\"category\":\"Po\",\"key\":\"FE30\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para líder vertical de dos puntos\"}}},{\"category\":\"Pd\",\"key\":\"FE31\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para Vertical Em Dash\"}}},{\"category\":\"Pd\",\"key\":\"FE32\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para Vertical En Dash\"}}},{\"category\":\"Pc\",\"key\":\"FE33\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para línea vertical baja\"}}},{\"category\":\"Pc\",\"key\":\"FE34\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para línea baja ondulada vertical\"}}},{\"category\":\"Po\",\"key\":\"FE45\",\"mappings\":{\"default\":{\"default\":\"punto de sésamo\"}}},{\"category\":\"Po\",\"key\":\"FE46\",\"mappings\":{\"default\":{\"default\":\"punto de sésamo blanco\"}}},{\"category\":\"Po\",\"key\":\"FE49\",\"mappings\":{\"default\":{\"default\":\"línea discontinua\"}}},{\"category\":\"Po\",\"key\":\"FE4A\",\"mappings\":{\"default\":{\"default\":\"centinela Overline\"}}},{\"category\":\"Po\",\"key\":\"FE4B\",\"mappings\":{\"default\":{\"default\":\"ondulado Overline\"}}},{\"category\":\"Po\",\"key\":\"FE4C\",\"mappings\":{\"default\":{\"default\":\"doble Ondulado Ondulado\"}}},{\"category\":\"Pc\",\"key\":\"FE4D\",\"mappings\":{\"default\":{\"default\":\"línea baja discontinua\"}}},{\"category\":\"Pc\",\"key\":\"FE4E\",\"mappings\":{\"default\":{\"default\":\"línea baja de línea central\"}}},{\"category\":\"Pc\",\"key\":\"FE4F\",\"mappings\":{\"default\":{\"default\":\"línea baja ondulada\"}}},{\"category\":\"Po\",\"key\":\"FE50\",\"mappings\":{\"default\":{\"default\":\"comas pequeñas\"}}},{\"category\":\"Po\",\"key\":\"FE52\",\"mappings\":{\"default\":{\"default\":\"parada completa pequeña\"}}},{\"category\":\"Po\",\"key\":\"FE54\",\"mappings\":{\"default\":{\"default\":\"pequeño punto y coma\"}}},{\"category\":\"Po\",\"key\":\"FE55\",\"mappings\":{\"default\":{\"default\":\"pequeño colon\"}}},{\"category\":\"Po\",\"key\":\"FE56\",\"mappings\":{\"default\":{\"default\":\"pequeño signo de interrogación\"}}},{\"category\":\"Po\",\"key\":\"FE57\",\"mappings\":{\"default\":{\"default\":\"pequeño signo de exclamación\"}}},{\"category\":\"Pd\",\"key\":\"FE58\",\"mappings\":{\"default\":{\"default\":\"pequeño Em Dash\"}}},{\"category\":\"Po\",\"key\":\"FE5F\",\"mappings\":{\"default\":{\"default\":\"signo de número pequeño\"}}},{\"category\":\"Po\",\"key\":\"FE60\",\"mappings\":{\"default\":{\"default\":\"ampersand pequeño\"}}},{\"category\":\"Po\",\"key\":\"FE61\",\"mappings\":{\"default\":{\"default\":\"pequeño asterisco\"}}},{\"category\":\"Sm\",\"key\":\"FE62\",\"mappings\":{\"default\":{\"default\":\"signo más pequeño\"}}},{\"category\":\"Pd\",\"key\":\"FE63\",\"mappings\":{\"default\":{\"default\":\"pequeño guión-menos\"}}},{\"category\":\"Sm\",\"key\":\"FE64\",\"mappings\":{\"default\":{\"default\":\"signo menor que pequeño\"}}},{\"category\":\"Sm\",\"key\":\"FE65\",\"mappings\":{\"default\":{\"default\":\"signo mayor que pequeño\"}}},{\"category\":\"Sm\",\"key\":\"FE66\",\"mappings\":{\"default\":{\"default\":\"signo pequeño igual\"}}},{\"key\":\"FE68\",\"mappings\":{\"default\":{\"default\":\"división entera\"}},\"category\":\"Po\"},{\"category\":\"Sc\",\"key\":\"FE69\",\"mappings\":{\"default\":{\"default\":\"pequeño signo de dólar\"}}},{\"category\":\"Po\",\"key\":\"FE6A\",\"mappings\":{\"default\":{\"default\":\"signo de porcentaje pequeño\"}}},{\"category\":\"Po\",\"key\":\"FE6B\",\"mappings\":{\"default\":{\"default\":\"pequeño comercial en\"}}},{\"category\":\"Po\",\"key\":\"FF01\",\"mappings\":{\"default\":{\"default\":\"signo de exclamación de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF02\",\"mappings\":{\"default\":{\"default\":\"comillas de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF03\",\"mappings\":{\"default\":{\"default\":\"número de signo de ancho completo\"}}},{\"category\":\"Sc\",\"key\":\"FF04\",\"mappings\":{\"default\":{\"default\":\"signo de dólar de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF05\",\"mappings\":{\"default\":{\"default\":\"signo de porcentaje de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF06\",\"mappings\":{\"default\":{\"default\":\"ampersand de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF07\",\"mappings\":{\"default\":{\"default\":\"apóstrofe de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF0A\",\"mappings\":{\"default\":{\"default\":\"asterisco de ancho completo\"}}},{\"category\":\"Sm\",\"key\":\"FF0B\",\"mappings\":{\"default\":{\"default\":\"signo de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF0C\",\"mappings\":{\"default\":{\"default\":\"coma de ancho completo\"}}},{\"category\":\"Pd\",\"key\":\"FF0D\",\"mappings\":{\"default\":{\"default\":\"ancho de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF0E\",\"mappings\":{\"default\":{\"default\":\"fullwidth Full Stop\"}}},{\"category\":\"Po\",\"key\":\"FF0F\",\"mappings\":{\"default\":{\"default\":\"sólido de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF1A\",\"mappings\":{\"default\":{\"default\":\"ancho completo de colon\"}}},{\"category\":\"Po\",\"key\":\"FF1B\",\"mappings\":{\"default\":{\"default\":\"punto y coma de ancho completo\"}}},{\"category\":\"Sm\",\"key\":\"FF1C\",\"mappings\":{\"default\":{\"default\":\"ancho completo menos de la señal\"}}},{\"category\":\"Sm\",\"key\":\"FF1D\",\"mappings\":{\"default\":{\"default\":\"signo de igual ancho completo\"}}},{\"category\":\"Sm\",\"key\":\"FF1E\",\"mappings\":{\"default\":{\"default\":\"ancho completo mayor que el signo\"}}},{\"category\":\"Po\",\"key\":\"FF1F\",\"mappings\":{\"default\":{\"default\":\"signo de interrogación de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF20\",\"mappings\":{\"default\":{\"default\":\"comercial de ancho completo en\"}}},{\"category\":\"Po\",\"key\":\"FF3C\",\"mappings\":{\"default\":{\"default\":\"sólido inverso de ancho completo\"}}},{\"category\":\"Sk\",\"key\":\"FF3E\",\"mappings\":{\"default\":{\"default\":\"acento circunflejo de ancho completo\"}}},{\"category\":\"Pc\",\"key\":\"FF3F\",\"mappings\":{\"default\":{\"default\":\"línea baja de ancho completo\"}}},{\"category\":\"Sk\",\"key\":\"FF40\",\"mappings\":{\"default\":{\"default\":\"acento grave de ancho completo\"}}},{\"key\":\"FF5C\",\"mappings\":{\"default\":{\"default\":\"barra vertical\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"FF5E\",\"mappings\":{\"default\":{\"default\":\"tilde de ancho completo\"}}},{\"category\":\"Sc\",\"key\":\"FFE0\",\"mappings\":{\"default\":{\"default\":\"signo de centavo de ancho completo\"}}},{\"category\":\"Sc\",\"key\":\"FFE1\",\"mappings\":{\"default\":{\"default\":\"signo de libra de ancho completo\"}}},{\"category\":\"Sm\",\"key\":\"FFE2\",\"mappings\":{\"default\":{\"default\":\"fullwidth no firmar\"}}},{\"category\":\"Sk\",\"key\":\"FFE3\",\"mappings\":{\"default\":{\"default\":\"ancho completo macron\"}}},{\"category\":\"So\",\"key\":\"FFE4\",\"mappings\":{\"default\":{\"default\":\"barra rota de ancho completo\"}}},{\"category\":\"Sc\",\"key\":\"FFE5\",\"mappings\":{\"default\":{\"default\":\"signo de yen de ancho completo\"}}},{\"category\":\"Sc\",\"key\":\"FFE6\",\"mappings\":{\"default\":{\"default\":\"signo de ancho completo ganado\"}}},{\"category\":\"So\",\"key\":\"FFE8\",\"mappings\":{\"default\":{\"default\":\"formas de ancho medio luz vertical\"}}},{\"category\":\"So\",\"key\":\"FFED\",\"mappings\":{\"default\":{\"default\":\"medio ancho cuadrado negro\"}}},{\"category\":\"So\",\"key\":\"FFEE\",\"mappings\":{\"default\":{\"default\":\"círculo blanco de medio ancho\"}}}]\n,\n\"es/symbols/math_whitespace.js\": \n[{\"locale\":\"es\"},{\"category\":\"Zs\",\"key\":\"0020\",\"mappings\":{\"default\":{\"default\":\"espacio\"}}},{\"key\":\"00A0\",\"mappings\":{\"default\":{\"default\":\" \"}},\"category\":\"Zs\"},{\"key\":\"00AD\",\"mappings\":{\"default\":{\"default\":\"guión corto\"}},\"category\":\"Cf\"},{\"category\":\"Zs\",\"key\":\"2000\",\"mappings\":{\"default\":{\"default\":\"en quad\"}}},{\"category\":\"Zs\",\"key\":\"2001\",\"mappings\":{\"default\":{\"default\":\"em Quad\"}}},{\"key\":\"2002\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2003\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2004\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2005\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"category\":\"Zs\",\"key\":\"2006\",\"mappings\":{\"default\":{\"default\":\"espacio Six-Per-Em\"}}},{\"key\":\"2007\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2008\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2009\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200A\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200B\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"key\":\"200C\",\"mappings\":{\"default\":{\"default\":\"ancho de cero no ensamblador\"}},\"category\":\"Cf\"},{\"key\":\"200D\",\"mappings\":{\"default\":{\"default\":\"ancho de cero ensamblador\"}},\"category\":\"Cf\"},{\"key\":\"200E\",\"mappings\":{\"default\":{\"default\":\"marca de izquierda a derecha\"}},\"category\":\"Cf\"},{\"key\":\"200F\",\"mappings\":{\"default\":{\"default\":\"marca de derecha a izquierda\"}},\"category\":\"Cf\"},{\"category\":\"Zl\",\"key\":\"2028\",\"mappings\":{\"default\":{\"default\":\"separador de linea\"}}},{\"category\":\"Zp\",\"key\":\"2029\",\"mappings\":{\"default\":{\"default\":\"separador de párrafo\"}}},{\"category\":\"Cf\",\"key\":\"202A\",\"mappings\":{\"default\":{\"default\":\"incrustación de izquierda a derecha\"}}},{\"category\":\"Cf\",\"key\":\"202B\",\"mappings\":{\"default\":{\"default\":\"incrustación de derecha a izquierda\"}}},{\"category\":\"Cf\",\"key\":\"202C\",\"mappings\":{\"default\":{\"default\":\"formato direccional pop\"}}},{\"category\":\"Cf\",\"key\":\"202D\",\"mappings\":{\"default\":{\"default\":\"anulación de izquierda a derecha\"}}},{\"category\":\"Cf\",\"key\":\"202E\",\"mappings\":{\"default\":{\"default\":\"anulación de derecha a izquierda\"}}},{\"category\":\"Zs\",\"key\":\"202F\",\"mappings\":{\"default\":{\"default\":\"espacio estrecho sin descanso\"}}},{\"key\":\"205F\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2060\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"key\":\"2061\",\"mappings\":{\"default\":{\"default\":\"de\"}},\"category\":\"Cf\"},{\"key\":\"2062\",\"mappings\":{\"default\":{\"default\":\"por\"}},\"category\":\"Cf\"},{\"key\":\"2063\",\"mappings\":{\"default\":{\"default\":\"coma\"}},\"category\":\"Cf\"},{\"key\":\"2064\",\"mappings\":{\"default\":{\"default\":\"más\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"206A\",\"mappings\":{\"default\":{\"default\":\"inhibir el intercambio simétrico\"}}},{\"category\":\"Cf\",\"key\":\"206B\",\"mappings\":{\"default\":{\"default\":\"activar el intercambio simétrico\"}}},{\"category\":\"Cf\",\"key\":\"206E\",\"mappings\":{\"default\":{\"default\":\"formas de dígitos nacionales\"}}},{\"category\":\"Cf\",\"key\":\"206F\",\"mappings\":{\"default\":{\"default\":\"formas de dígitos nominales\"}}},{\"key\":\"FEFF\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"FFF9\",\"mappings\":{\"default\":{\"default\":\"ancla de anotación interlinear\"}}},{\"category\":\"Cf\",\"key\":\"FFFA\",\"mappings\":{\"default\":{\"default\":\"separador de anotación interlinear\"}}},{\"category\":\"Cf\",\"key\":\"FFFB\",\"mappings\":{\"default\":{\"default\":\"terminador de anotación interlinear\"}}}]\n,\n\"es/symbols/other_stars.js\": \n[{\"locale\":\"es\"},{\"category\":\"So\",\"key\":\"23E8\",\"mappings\":{\"default\":{\"default\":\"símbolo exponente decimal\"}}},{\"key\":\"2605\",\"mappings\":{\"default\":{\"default\":\"estrella rellena\"}},\"category\":\"So\"},{\"key\":\"2606\",\"mappings\":{\"default\":{\"default\":\"estrella vacía\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"26AA\",\"mappings\":{\"default\":{\"default\":\"círculo blanco medio\"}}},{\"category\":\"So\",\"key\":\"26AB\",\"mappings\":{\"default\":{\"default\":\"círculo negro medio\"}}},{\"category\":\"So\",\"key\":\"2705\",\"mappings\":{\"default\":{\"default\":\"marca de verificación pesada blanca\"}}},{\"key\":\"2713\",\"mappings\":{\"default\":{\"default\":\"check mark\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2714\",\"mappings\":{\"default\":{\"default\":\"marca de verificación pesada\"}}},{\"category\":\"So\",\"key\":\"2715\",\"mappings\":{\"default\":{\"default\":\"multiplicación x\"}}},{\"category\":\"So\",\"key\":\"2716\",\"mappings\":{\"default\":{\"default\":\"multiplicación pesada X\"}}},{\"key\":\"2717\",\"mappings\":{\"default\":{\"default\":\"ballot x\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2718\",\"mappings\":{\"default\":{\"default\":\"boleta pesada X\"}}},{\"category\":\"So\",\"key\":\"271B\",\"mappings\":{\"default\":{\"default\":\"centro abierto de la cruz\"}}},{\"category\":\"So\",\"key\":\"271C\",\"mappings\":{\"default\":{\"default\":\"pesado centro abierto cruz\"}}},{\"key\":\"2720\",\"mappings\":{\"default\":{\"default\":\"cruz de Malta\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2721\",\"mappings\":{\"default\":{\"default\":\"estrella de David\"}}},{\"category\":\"So\",\"key\":\"2722\",\"mappings\":{\"default\":{\"default\":\"cuatro asterisco de lágrima\"}}},{\"category\":\"So\",\"key\":\"2723\",\"mappings\":{\"default\":{\"default\":\"cuatro asterisco de globo\"}}},{\"category\":\"So\",\"key\":\"2724\",\"mappings\":{\"default\":{\"default\":\"pesado Cuatro asterisco impulsado por globo\"}}},{\"category\":\"So\",\"key\":\"2725\",\"mappings\":{\"default\":{\"default\":\"cuatro asterisco de club-spoked\"}}},{\"category\":\"So\",\"key\":\"2726\",\"mappings\":{\"default\":{\"default\":\"estrella de cuatro puntas negra\"}}},{\"category\":\"So\",\"key\":\"2727\",\"mappings\":{\"default\":{\"default\":\"estrella blanca de cuatro puntas\"}}},{\"category\":\"So\",\"key\":\"2728\",\"mappings\":{\"default\":{\"default\":\"destellos\"}}},{\"category\":\"So\",\"key\":\"2729\",\"mappings\":{\"default\":{\"default\":\"estrés subrayado estrella blanca\"}}},{\"category\":\"So\",\"key\":\"272A\",\"mappings\":{\"default\":{\"default\":\"estrella blanca circulada\"}}},{\"category\":\"So\",\"key\":\"272B\",\"mappings\":{\"default\":{\"default\":\"centro Abierto Estrella Negra\"}}},{\"category\":\"So\",\"key\":\"272C\",\"mappings\":{\"default\":{\"default\":\"centro negro estrella blanca\"}}},{\"category\":\"So\",\"key\":\"272D\",\"mappings\":{\"default\":{\"default\":\"contorneado negro estrella\"}}},{\"category\":\"So\",\"key\":\"272E\",\"mappings\":{\"default\":{\"default\":\"estrella negra contorneada pesada\"}}},{\"category\":\"So\",\"key\":\"272F\",\"mappings\":{\"default\":{\"default\":\"pinwheel Star\"}}},{\"category\":\"So\",\"key\":\"2730\",\"mappings\":{\"default\":{\"default\":\"estrella blanca sombreada\"}}},{\"category\":\"So\",\"key\":\"2731\",\"mappings\":{\"default\":{\"default\":\"asterisco pesado\"}}},{\"category\":\"So\",\"key\":\"2732\",\"mappings\":{\"default\":{\"default\":\"centro abierto de asterisco\"}}},{\"category\":\"So\",\"key\":\"2733\",\"mappings\":{\"default\":{\"default\":\"ocho asterisco hablado\"}}},{\"category\":\"So\",\"key\":\"2734\",\"mappings\":{\"default\":{\"default\":\"ocho estrellas negras puntiagudas\"}}},{\"category\":\"So\",\"key\":\"2735\",\"mappings\":{\"default\":{\"default\":\"ocho estrellas de molinete en punta\"}}},{\"key\":\"2736\",\"mappings\":{\"default\":{\"default\":\"estrella rellena de seis puntas\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2739\",\"mappings\":{\"default\":{\"default\":\"doce estrellas negras puntiagudas\"}}},{\"category\":\"So\",\"key\":\"273A\",\"mappings\":{\"default\":{\"default\":\"dieciséis asteriscos en punta\"}}},{\"category\":\"So\",\"key\":\"273B\",\"mappings\":{\"default\":{\"default\":\"asterisco con efecto de lágrima\"}}},{\"category\":\"So\",\"key\":\"273C\",\"mappings\":{\"default\":{\"default\":\"centro abierto con asterisco con forma de lágrima\"}}},{\"key\":\"273D\",\"mappings\":{\"default\":{\"default\":\"heavy teardrop spoked asterisk\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"273E\",\"mappings\":{\"default\":{\"default\":\"seis pétalos de florette en blanco y negro\"}}},{\"category\":\"So\",\"key\":\"273F\",\"mappings\":{\"default\":{\"default\":\"florette negro\"}}},{\"category\":\"So\",\"key\":\"2740\",\"mappings\":{\"default\":{\"default\":\"florette blanco\"}}},{\"category\":\"So\",\"key\":\"2741\",\"mappings\":{\"default\":{\"default\":\"ocho Petalled Outlined Black Florette\"}}},{\"category\":\"So\",\"key\":\"2742\",\"mappings\":{\"default\":{\"default\":\"círculo abierto centro ocho estrellas señaladas\"}}},{\"category\":\"So\",\"key\":\"2743\",\"mappings\":{\"default\":{\"default\":\"asterisco pesado del molinillo de viento\"}}},{\"category\":\"So\",\"key\":\"2744\",\"mappings\":{\"default\":{\"default\":\"copo de nieve\"}}},{\"category\":\"So\",\"key\":\"2745\",\"mappings\":{\"default\":{\"default\":\"copo de nieve trifolio apretado\"}}},{\"category\":\"So\",\"key\":\"2746\",\"mappings\":{\"default\":{\"default\":\"copo de nieve pesado de Chevron\"}}},{\"category\":\"So\",\"key\":\"2747\",\"mappings\":{\"default\":{\"default\":\"brillar\"}}},{\"category\":\"So\",\"key\":\"2748\",\"mappings\":{\"default\":{\"default\":\"chispa pesada\"}}},{\"category\":\"So\",\"key\":\"2749\",\"mappings\":{\"default\":{\"default\":\"asterisco de globo\"}}},{\"category\":\"So\",\"key\":\"274A\",\"mappings\":{\"default\":{\"default\":\"ocho asterisco de hélice con efecto de lágrima\"}}},{\"category\":\"So\",\"key\":\"274B\",\"mappings\":{\"default\":{\"default\":\"heavy eight asterisk de hélice en forma de lágrima\"}}},{\"category\":\"So\",\"key\":\"274C\",\"mappings\":{\"default\":{\"default\":\"marca de la cruz\"}}},{\"category\":\"So\",\"key\":\"274D\",\"mappings\":{\"default\":{\"default\":\"círculo blanco sombreado\"}}}]\n,\n\"es/units/energy.js\": \n[{\"locale\":\"es\"},{\"key\":\"W\",\"names\":[\"W\",\"w\"],\"mappings\":{\"default\":{\"default\":\"watt\"}},\"category\":\"energy\"},{\"key\":\"kW\",\"names\":[\"kw\",\"kW\"],\"mappings\":{\"default\":{\"default\":\"kilowatt\"}},\"category\":\"energy\"},{\"key\":\"mW\",\"names\":[\"mw\",\"mW\"],\"mappings\":{\"default\":{\"default\":\"miliwatt\"}},\"category\":\"energy\"},{\"key\":\"kwh\",\"names\":[\"kwh\",\"kWh\"],\"mappings\":{\"default\":{\"default\":\"kilowatt hora\"}},\"category\":\"energy\"},{\"key\":\"J\",\"names\":[\"J\"],\"mappings\":{\"default\":{\"default\":\"Joule\"}},\"category\":\"energy\"},{\"key\":\"N\",\"names\":[\"N\"],\"mappings\":{\"default\":{\"default\":\"Newton\"}},\"category\":\"energy\"},{\"key\":\"A\",\"names\":[\"A\"],\"mappings\":{\"default\":{\"default\":\"Ampere\"}},\"category\":\"energy\"},{\"key\":\"V\",\"names\":[\"V\"],\"mappings\":{\"default\":{\"default\":\"Voltio\"}},\"category\":\"energy\"},{\"key\":\"µΩ\",\"names\":[\"µΩ\"],\"mappings\":{\"default\":{\"default\":\"microohmio\"}},\"category\":\"energy\"},{\"key\":\"mΩ\",\"names\":[\"mΩ\"],\"mappings\":{\"default\":{\"default\":\"miliohmio\"}},\"category\":\"energy\"},{\"key\":\"Ω\",\"names\":[\"Ω\",\"Ohm\"],\"mappings\":{\"default\":{\"default\":\"ohmio\"}},\"category\":\"energy\"},{\"key\":\"kΩ\",\"names\":[\"kΩ\",\"KΩ\"],\"mappings\":{\"default\":{\"default\":\"kiloohmio\"}},\"category\":\"energy\"},{\"key\":\"MΩ\",\"names\":[\"MΩ\"],\"mappings\":{\"default\":{\"default\":\"megaohmio\"}},\"category\":\"energy\"},{\"key\":\"GΩ\",\"names\":[\"GΩ\"],\"mappings\":{\"default\":{\"default\":\"gigaohmio\"}},\"category\":\"energy\"}]\n,\n\"es/units/length.js\": \n[{\"locale\":\"es\"},{\"key\":\"mm\",\"names\":[\"mm\"],\"mappings\":{\"default\":{\"default\":\"milímetro\"}},\"category\":\"length\"},{\"key\":\"cm\",\"names\":[\"cm\"],\"mappings\":{\"default\":{\"default\":\"centímetro\"}},\"category\":\"length\"},{\"key\":\"m\",\"names\":[\"m\"],\"mappings\":{\"default\":{\"default\":\"metro\"}},\"category\":\"length\"},{\"key\":\"km\",\"names\":[\"km\"],\"mappings\":{\"default\":{\"default\":\"kilómetro\"}},\"category\":\"length\"},{\"key\":\"ft\",\"names\":[\"ft\",\"ft.\"],\"mappings\":{\"default\":{\"default\":\"pies\"}},\"category\":\"length\"},{\"key\":\"in\",\"names\":[\"in\",\"in.\"],\"mappings\":{\"default\":{\"default\":\"pulgada\"}},\"category\":\"length\"},{\"key\":\"mi\",\"names\":[\"mi\",\"mi.\"],\"mappings\":{\"default\":{\"default\":\"milla\"}},\"category\":\"length\"},{\"key\":\"yd\",\"names\":[\"yd\",\"yd.\"],\"mappings\":{\"default\":{\"default\":\"yarda\"}},\"category\":\"length\"},{\"key\":\"n.m.\",\"names\":[\"n.m.\"],\"mappings\":{\"default\":{\"default\":\"millas náuticas\"}},\"category\":\"length\"}]\n,\n\"es/units/memory.js\": \n[{\"locale\":\"es\"},{\"key\":\"b\",\"names\":[\"b\"],\"mappings\":{\"default\":{\"default\":\"bit\"}},\"category\":\"memory\"},{\"key\":\"B\",\"names\":[\"B\"],\"mappings\":{\"default\":{\"default\":\"byte\"}},\"category\":\"memory\"},{\"key\":\"KB\",\"names\":[\"KB\"],\"mappings\":{\"default\":{\"default\":\"kilobyte\"}},\"category\":\"memory\"},{\"key\":\"MB\",\"names\":[\"MB\"],\"mappings\":{\"default\":{\"default\":\"megabyte\"}},\"category\":\"memory\"},{\"key\":\"GB\",\"names\":[\"GB\"],\"mappings\":{\"default\":{\"default\":\"gigabyte\"}},\"category\":\"memory\"},{\"key\":\"TB\",\"names\":[\"TB\"],\"mappings\":{\"default\":{\"default\":\"terabyte\"}},\"category\":\"memory\"}]\n,\n\"es/units/other.js\": \n[{\"locale\":\"es\"},{\"key\":\"doz\",\"names\":[\"doz\",\"doz.\",\"dz\",\"dz.\"],\"mappings\":{\"default\":{\"default\":\"docena\"}},\"category\":\"other\"},{\"key\":\"sq\",\"names\":[\"sq\",\"sq.\"],\"mappings\":{\"default\":{\"default\":\"al cuadrado\"}},\"category\":\"other\"},{\"key\":\"ha\",\"names\":[\"ha\"],\"mappings\":{\"default\":{\"default\":\"hectarea\"}},\"category\":\"other\"}]\n,\n\"es/units/speed.js\": \n[{\"locale\":\"es\"},{\"key\":\"kt\",\"names\":[\"kt\",\"kt.\"],\"mappings\":{\"default\":{\"default\":\"nudo\"}},\"category\":\"speed\"},{\"key\":\"mph\",\"names\":[\"mph\"],\"mappings\":{\"default\":{\"default\":\"millas por hora\"}},\"category\":\"speed\"},{\"key\":\"rpm\",\"names\":[\"rpm\"],\"mappings\":{\"default\":{\"default\":\"revoluciones por minuto\"}},\"category\":\"speed\"},{\"key\":\"kmh\",\"names\":[\"kmh\"],\"mappings\":{\"default\":{\"default\":\"kilómetros por hora\"}},\"category\":\"speed\"}]\n,\n\"es/units/temperature.js\": \n[{\"locale\":\"es\"},{\"key\":\"F\",\"names\":[\"F\",\"F.\",\"°F\"],\"mappings\":{\"default\":{\"default\":\"Fahrenheit\"}},\"category\":\"temperature\"},{\"key\":\"C\",\"names\":[\"C\",\"°C\"],\"mappings\":{\"default\":{\"default\":\"centígrados\"}},\"category\":\"temperature\"},{\"key\":\"K\",\"names\":[\"K\",\"°K\"],\"mappings\":{\"default\":{\"default\":\"Kelvin\"}},\"category\":\"temperature\"}]\n,\n\"es/units/time.js\": \n[{\"locale\":\"es\"},{\"key\":\"ns\",\"names\":[\"ns\"],\"mappings\":{\"default\":{\"default\":\"nanosegundos\"}},\"category\":\"time\"},{\"key\":\"µs\",\"names\":[\"µs\"],\"mappings\":{\"default\":{\"default\":\"microsegundos\"}},\"category\":\"time\"},{\"key\":\"ms\",\"names\":[\"ms\"],\"mappings\":{\"default\":{\"default\":\"milisegundos\"}},\"category\":\"time\"},{\"key\":\"s\",\"names\":[\"s\"],\"mappings\":{\"default\":{\"default\":\"segundos\"}},\"category\":\"time\"},{\"key\":\"min\",\"names\":[\"min\"],\"mappings\":{\"default\":{\"default\":\"minutos\"}},\"category\":\"time\"},{\"key\":\"h\",\"names\":[\"h\",\"hr\"],\"mappings\":{\"default\":{\"default\":\"hora\"}},\"category\":\"time\"}]\n,\n\"es/units/volume.js\": \n[{\"locale\":\"es\"},{\"key\":\"bbl\",\"names\":[\"bbl.\",\"bbl\"],\"mappings\":{\"default\":{\"default\":\"barrile\"}},\"category\":\"volume\"},{\"key\":\"cu\",\"names\":[\"cu\",\"cu.\"],\"mappings\":{\"default\":{\"default\":\"cúbico\"}},\"category\":\"volume\"},{\"key\":\"fl. oz.\",\"names\":[\"fl. oz.\"],\"mappings\":{\"default\":{\"default\":\"onzas líquidas\"}},\"category\":\"volume\"},{\"key\":\"gal\",\"names\":[\"gal\",\"gal.\"],\"mappings\":{\"default\":{\"default\":\"galone\"}},\"category\":\"volume\"},{\"key\":\"pt\",\"names\":[\"pt\",\"pt.\"],\"mappings\":{\"default\":{\"default\":\"pinta\"}},\"category\":\"volume\"},{\"key\":\"qt\",\"names\":[\"qt\",\"qt.\"],\"mappings\":{\"default\":{\"default\":\"quart\"}},\"category\":\"volume\"},{\"key\":\"tbsp\",\"names\":[\"tbsp\",\"tbsp.\"],\"mappings\":{\"default\":{\"default\":\"cuchara\"}},\"category\":\"volume\"},{\"key\":\"tsp\",\"names\":[\"tsp\",\"tsp.\"],\"mappings\":{\"default\":{\"default\":\"cucharilla\"}},\"category\":\"volume\"},{\"key\":\"cc\",\"names\":[\"cc\"],\"mappings\":{\"default\":{\"default\":\"centímetros cúbicos\"}},\"category\":\"volume\"},{\"key\":\"kl\",\"names\":[\"kl\"],\"mappings\":{\"default\":{\"default\":\"kilolitro\"}},\"category\":\"volume\"},{\"key\":\"l\",\"names\":[\"l\"],\"mappings\":{\"default\":{\"default\":\"litro\"}},\"category\":\"volume\"},{\"key\":\"ml\",\"names\":[\"ml\"],\"mappings\":{\"default\":{\"default\":\"mililitro\"}},\"category\":\"volume\"}]\n,\n\"es/units/weight.js\": \n[{\"locale\":\"es\"},{\"key\":\"lb\",\"names\":[\"lb\",\"lb.\"],\"mappings\":{\"default\":{\"default\":\"libra\"}},\"category\":\"weight\"},{\"key\":\"LT\",\"names\":[\"LT\",\"L.T.\"],\"mappings\":{\"default\":{\"default\":\"libras imperiales\"}},\"category\":\"weight\"},{\"key\":\"oz\",\"names\":[\"oz\",\"oz.\"],\"mappings\":{\"default\":{\"default\":\"onza\"}},\"category\":\"weight\"},{\"key\":\"µg\",\"names\":[\"µg\",\"mcg\"],\"mappings\":{\"default\":{\"default\":\"microgramo\"}},\"category\":\"weight\"},{\"key\":\"gr\",\"names\":[\"g\",\"gr\"],\"mappings\":{\"default\":{\"default\":\"gramo\"}},\"category\":\"weight\"},{\"key\":\"kg\",\"names\":[\"kg\"],\"mappings\":{\"default\":{\"default\":\"kilogramo\"}},\"category\":\"weight\"},{\"key\":\"mg\",\"names\":[\"mg\"],\"mappings\":{\"default\":{\"default\":\"miligramo\"}},\"category\":\"weight\"},{\"key\":\"t\",\"names\":[\"t\",\"T\"],\"mappings\":{\"default\":{\"default\":\"tonelada\"}},\"category\":\"weight\"}]\n}\n\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/sre/mathmaps/fr.js",
    "content": "{\n\"fr/functions/algebra.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"degré\"}},\"key\":\"deg\",\"names\":[\"deg\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"déterminant\"}},\"key\":\"det\",\"names\":[\"det\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"dimension\"}},\"key\":\"dim\",\"names\":[\"dim\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"homomorphisme\"}},\"key\":\"hom\",\"names\":[\"hom\",\"Hom\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"noyau\"}},\"key\":\"ker\",\"names\":[\"ker\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"trace\"}},\"key\":\"Tr\",\"names\":[\"Tr\",\"tr\"]}]\n,\n\"fr/functions/elementary.js\": \n[{\"locale\":\"fr\"},{\"key\":\"log\",\"mappings\":{\"default\":{\"default\":\"log\"}},\"category\":\"Logarithm\",\"names\":[\"log\"]},{\"key\":\"ln\",\"mappings\":{\"default\":{\"default\":\"logarithme népérien\"}},\"category\":\"Logarithm\",\"names\":[\"ln\"]},{\"key\":\"lg\",\"names\":[\"lg\"],\"mappings\":{\"default\":{\"default\":\"logarithme décimal\"}},\"category\":\"Logarithm\"},{\"key\":\"exp\",\"names\":[\"exp\",\"expt\"],\"mappings\":{\"default\":{\"default\":\"exponentielle\"}},\"category\":\"Elementary\"},{\"key\":\"gcd\",\"names\":[\"gcd\",\"PGCD\",\"pgcd\"],\"mappings\":{\"default\":{\"default\":\"plus grand commun diviseur\"},\"mathspeak\":{\"default\":\"pgcd\"},\"clearspeak\":{\"default\":\"pgcd\"}},\"category\":\"Elementary\"},{\"key\":\"lcm\",\"names\":[\"lcm\",\"ppcm\",\"PPCM\",\"PPMC\",\"ppmc\"],\"mappings\":{\"default\":{\"default\":\"plus petit commun multiple\"},\"mathspeak\":{\"default\":\"ppcm\"},\"clearspeak\":{\"default\":\"ppcm\"}},\"category\":\"Elementary\"},{\"key\":\"arg\",\"names\":[\"arg\"],\"mappings\":{\"default\":{\"default\":\"argument\"}},\"category\":\"Complex\"},{\"key\":\"im\",\"names\":[\"im\"],\"mappings\":{\"default\":{\"default\":\"partie imaginaire\"}},\"category\":\"Complex\"},{\"key\":\"re\",\"names\":[\"re\"],\"mappings\":{\"default\":{\"default\":\"partie réelle\"}},\"category\":\"Complex\"},{\"key\":\"inf\",\"names\":[\"inf\"],\"mappings\":{\"default\":{\"default\":\"borne inférieure\"}},\"category\":\"Limits\"},{\"key\":\"lim\",\"mappings\":{\"default\":{\"default\":\"limite\"}},\"category\":\"Limits\",\"names\":[\"lim\"]},{\"key\":\"max\",\"names\":[\"max\"],\"mappings\":{\"default\":{\"default\":\"maximum\"}},\"category\":\"Limits\"},{\"key\":\"min\",\"names\":[\"min\"],\"mappings\":{\"default\":{\"default\":\"minimum\"}},\"category\":\"Limits\"},{\"key\":\"sup\",\"names\":[\"sup\"],\"mappings\":{\"default\":{\"default\":\"borne supérieure\"}},\"category\":\"Limits\"},{\"key\":\"lim inf\",\"names\":[\"lim inf\",\"liminf\"],\"mappings\":{\"default\":{\"default\":\"limite inferior\"}},\"category\":\"Limits\"},{\"key\":\"lim sup\",\"names\":[\"lim sup\",\"limsup\"],\"mappings\":{\"default\":{\"default\":\"limite superior\"}},\"category\":\"Limits\"},{\"key\":\"injlim\",\"names\":[\"injlim\",\"inj lim\"],\"mappings\":{\"default\":{\"default\":\"limite inductive\"}},\"category\":\"Limits\"},{\"key\":\"projlim\",\"names\":[\"projlim\",\"proj lim\"],\"mappings\":{\"default\":{\"default\":\"limite projective\"}},\"category\":\"Limits\"},{\"key\":\"mod\",\"names\":[\"mod\"],\"mappings\":{\"default\":{\"default\":\"modulo\"}},\"category\":\"Elementary\"},{\"key\":\"Pr\",\"names\":[\"Pr\"],\"mappings\":{\"default\":{\"default\":\"probabilité\"}},\"category\":\"Probability\"}]\n,\n\"fr/functions/hyperbolic.js\": \n[{\"locale\":\"fr\"},{\"key\":\"cosh\",\"mappings\":{\"default\":{\"default\":\"cosinus hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"cosh\"]},{\"key\":\"coth\",\"mappings\":{\"default\":{\"default\":\"cotangente hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"coth\"]},{\"key\":\"csch\",\"mappings\":{\"default\":{\"default\":\"cosécante hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"csch\"]},{\"key\":\"sech\",\"mappings\":{\"default\":{\"default\":\"sécante hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"sech\"]},{\"key\":\"sinh\",\"mappings\":{\"default\":{\"default\":\"sinus hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"sinh\"]},{\"key\":\"tanh\",\"mappings\":{\"default\":{\"default\":\"tangente hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"tanh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument cosinus hyperbolique\"}},\"key\":\"arcosh\",\"names\":[\"arcosh\",\"arccosh\",\"argch\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument cotangente hyperbolique\"}},\"key\":\"arcoth\",\"names\":[\"arcoth\",\"arccoth\",\"argcoth\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument cosécante hyperbolique\"}},\"key\":\"arcsch\",\"names\":[\"arcsch\",\"arccsch\",\"argcsch\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument sécante hyperbolique\"}},\"key\":\"arsech\",\"names\":[\"arsech\",\"arcsech\",\"argsech\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument sinus hyperbolique\"}},\"key\":\"arsinh\",\"names\":[\"arsinh\",\"arcsinh\",\"argsh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument tangente hyperbolique\"}},\"key\":\"artanh\",\"names\":[\"artanh\",\"arctanh\",\"argth\"]}]\n,\n\"fr/functions/trigonometry.js\": \n[{\"locale\":\"fr\"},{\"key\":\"cos\",\"mappings\":{\"default\":{\"default\":\"cosinus\"}},\"category\":\"Trigonometric\",\"names\":[\"cos\",\"cosine\"]},{\"key\":\"cot\",\"mappings\":{\"default\":{\"default\":\"cotangente\"}},\"category\":\"Trigonometric\",\"names\":[\"cot\"]},{\"key\":\"csc\",\"mappings\":{\"default\":{\"default\":\"cosécante\"}},\"category\":\"Trigonometric\",\"names\":[\"csc\"]},{\"key\":\"sec\",\"mappings\":{\"default\":{\"default\":\"sécante\"}},\"category\":\"Trigonometric\",\"names\":[\"sec\"]},{\"key\":\"sin\",\"mappings\":{\"default\":{\"default\":\"sinus\"}},\"category\":\"Trigonometric\",\"names\":[\"sin\",\"sine\"]},{\"key\":\"tan\",\"mappings\":{\"default\":{\"default\":\"tangente\"}},\"category\":\"Trigonometric\",\"names\":[\"tan\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cosinus\"}},\"key\":\"arccos\",\"names\":[\"arccos\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cotangente\"}},\"key\":\"arccot\",\"names\":[\"arccot\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cosécante\"}},\"key\":\"arccsc\",\"names\":[\"arccsc\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc sécante\"}},\"key\":\"arcsec\",\"names\":[\"arcsec\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc sinus\"}},\"key\":\"arcsin\",\"names\":[\"arcsin\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc tangente\"}},\"key\":\"arctan\",\"names\":[\"arctan\"]}]\n,\n\"fr/symbols/digits_rest.js\": \n[{\"locale\":\"fr\"},{\"key\":\"00B2\",\"mappings\":{\"default\":{\"default\":\"au carré\"},\"mathspeak\":{\"default\":\"au carré\"},\"clearspeak\":{\"default\":\"au carré\"}},\"category\":\"No\"},{\"key\":\"00B3\",\"mappings\":{\"default\":{\"default\":\"cubique\"},\"mathspeak\":{\"default\":\"cubique\"},\"clearspeak\":{\"default\":\"cubique\"}},\"category\":\"No\"},{\"key\":\"00BC\",\"mappings\":{\"default\":{\"default\":\"un quart\"}},\"category\":\"No\"},{\"key\":\"00BD\",\"mappings\":{\"default\":{\"default\":\"un demi\"}},\"category\":\"No\"},{\"key\":\"00BE\",\"mappings\":{\"default\":{\"default\":\"trois quarts\"}},\"category\":\"No\"},{\"key\":\"2150\",\"mappings\":{\"default\":{\"default\":\"un septième\"}},\"category\":\"No\"},{\"key\":\"2151\",\"mappings\":{\"default\":{\"default\":\"un neuvième\"}},\"category\":\"No\"},{\"key\":\"2152\",\"mappings\":{\"default\":{\"default\":\"un dixième\"}},\"category\":\"No\"},{\"key\":\"2153\",\"mappings\":{\"default\":{\"default\":\"un tiers\"}},\"category\":\"No\"},{\"key\":\"2154\",\"mappings\":{\"default\":{\"default\":\"deux tiers\"}},\"category\":\"No\"},{\"key\":\"2155\",\"mappings\":{\"default\":{\"default\":\"un cinquième\"}},\"category\":\"No\"},{\"key\":\"2156\",\"mappings\":{\"default\":{\"default\":\"deux cinquièmes\"}},\"category\":\"No\"},{\"key\":\"2157\",\"mappings\":{\"default\":{\"default\":\"trois cinquièmes\"}},\"category\":\"No\"},{\"key\":\"2158\",\"mappings\":{\"default\":{\"default\":\"quatre cinquièmes\"}},\"category\":\"No\"},{\"key\":\"2159\",\"mappings\":{\"default\":{\"default\":\"un sixième\"}},\"category\":\"No\"},{\"key\":\"215A\",\"mappings\":{\"default\":{\"default\":\"cinq sixièmes\"}},\"category\":\"No\"},{\"key\":\"215B\",\"mappings\":{\"default\":{\"default\":\"un huitième\"}},\"category\":\"No\"},{\"key\":\"215C\",\"mappings\":{\"default\":{\"default\":\"trois huitièmes\"}},\"category\":\"No\"},{\"key\":\"215D\",\"mappings\":{\"default\":{\"default\":\"cinq huitièmes\"}},\"category\":\"No\"},{\"key\":\"215E\",\"mappings\":{\"default\":{\"default\":\"sept huitièmes\"}},\"category\":\"No\"},{\"key\":\"215F\",\"mappings\":{\"default\":{\"default\":\"numérateur un\"}},\"category\":\"No\"},{\"key\":\"2189\",\"mappings\":{\"default\":{\"default\":\"zero tiers\"}},\"category\":\"No\"},{\"key\":\"3248\",\"mappings\":{\"default\":{\"default\":\"dix cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"3249\",\"mappings\":{\"default\":{\"default\":\"vingt cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324A\",\"mappings\":{\"default\":{\"default\":\"trente cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324B\",\"mappings\":{\"default\":{\"default\":\"quarante cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324C\",\"mappings\":{\"default\":{\"default\":\"cinquante cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324D\",\"mappings\":{\"default\":{\"default\":\"soixante cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324E\",\"mappings\":{\"default\":{\"default\":\"soixante dix cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324F\",\"mappings\":{\"default\":{\"default\":\"quatre vingts cerclé sur carré noir\"}},\"category\":\"No\"}]\n,\n\"fr/symbols/greek-rest.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Lu\",\"key\":\"0394\",\"mappings\":{\"clearspeak\":{\"default\":\"triangle\",\"TriangleSymbol_Delta\":\"Delta majuscule\"}}}]\n,\n\"fr/symbols/greek-scripts.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Ll\",\"key\":\"1D26\",\"mappings\":{\"default\":{\"default\":\"petite gamma majuscule\"}}},{\"category\":\"Ll\",\"key\":\"1D27\",\"mappings\":{\"default\":{\"default\":\"petite lambda majuscule\"}}},{\"category\":\"Ll\",\"key\":\"1D28\",\"mappings\":{\"default\":{\"default\":\"petite pi majuscule\"}}},{\"category\":\"Ll\",\"key\":\"1D29\",\"mappings\":{\"default\":{\"default\":\"petite rhô majuscule\"}}},{\"category\":\"Ll\",\"key\":\"1D2A\",\"mappings\":{\"default\":{\"default\":\"petite psi majuscule\"}}},{\"category\":\"Lm\",\"key\":\"1D5E\",\"mappings\":{\"default\":{\"default\":\"gamma suscript\"}}},{\"category\":\"Lm\",\"key\":\"1D60\",\"mappings\":{\"default\":{\"default\":\"phi suscript\"}}},{\"category\":\"Lm\",\"key\":\"1D66\",\"mappings\":{\"default\":{\"default\":\"bêta souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D67\",\"mappings\":{\"default\":{\"default\":\"gamma souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D68\",\"mappings\":{\"default\":{\"default\":\"rhô souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D69\",\"mappings\":{\"default\":{\"default\":\"phi souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D6A\",\"mappings\":{\"default\":{\"default\":\"khi souscrit\"}}}]\n,\n\"fr/symbols/greek-symbols.js\": \n[{\"locale\":\"fr\"},{\"key\":\"03D0\",\"mappings\":{\"default\":{\"default\":\"bêta grec\"}},\"category\":\"Ll\"},{\"key\":\"03D7\",\"mappings\":{\"default\":{\"default\":\"ligature kai\"}},\"category\":\"Ll\"},{\"key\":\"03F6\",\"mappings\":{\"default\":{\"default\":\"epsilon lunaire réfléchi\"}},\"category\":\"Sm\"},{\"category\":\"Lu\",\"key\":\"1D7CA\",\"mappings\":{\"default\":{\"default\":\"Digamma en gras\"}}},{\"category\":\"Ll\",\"key\":\"1D7CB\",\"mappings\":{\"default\":{\"default\":\"digamma en gras\"}}}]\n,\n\"fr/symbols/hebrew_letters.js\": \n[{\"locale\":\"fr\"},{\"key\":\"2135\",\"mappings\":{\"default\":{\"default\":\"alef\"}},\"category\":\"Lo\"},{\"key\":\"2136\",\"mappings\":{\"default\":{\"default\":\"bèt\"}},\"category\":\"Lo\"},{\"key\":\"2137\",\"mappings\":{\"default\":{\"default\":\"guimel\"}},\"category\":\"Lo\"},{\"key\":\"2138\",\"mappings\":{\"default\":{\"default\":\"dalèt\"}},\"category\":\"Lo\"}]\n,\n\"fr/symbols/latin-lower-double-accent.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Ll\",\"key\":\"01D6\",\"mappings\":{\"default\":{\"default\":\"u trémaa et macron\"}}},{\"category\":\"Ll\",\"key\":\"01D8\",\"mappings\":{\"default\":{\"default\":\"u trémaa et accent aigu\"}}},{\"category\":\"Ll\",\"key\":\"01DA\",\"mappings\":{\"default\":{\"default\":\"u trémaa et caron\"}}},{\"category\":\"Ll\",\"key\":\"01DC\",\"mappings\":{\"default\":{\"default\":\"u trémaa et accent grave\"}}},{\"category\":\"Ll\",\"key\":\"01DF\",\"mappings\":{\"default\":{\"default\":\"a trémaa et macron\"}}},{\"category\":\"Ll\",\"key\":\"01E1\",\"mappings\":{\"default\":{\"default\":\"a point en chef et macron\"}}},{\"category\":\"Ll\",\"key\":\"01ED\",\"mappings\":{\"default\":{\"default\":\"o ogonek et macron\"}}},{\"category\":\"Ll\",\"key\":\"01FB\",\"mappings\":{\"default\":{\"default\":\"a rond en chef et accent aigu\"}}},{\"category\":\"Ll\",\"key\":\"022B\",\"mappings\":{\"default\":{\"default\":\"o tréma et macron\"}}},{\"category\":\"Ll\",\"key\":\"022D\",\"mappings\":{\"default\":{\"default\":\"o tilde et macron\"}}},{\"category\":\"Ll\",\"key\":\"0231\",\"mappings\":{\"default\":{\"default\":\"o point en chef et macron\"}}},{\"key\":\"1E09\",\"mappings\":{\"default\":{\"default\":\"c cédille et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E15\",\"mappings\":{\"default\":{\"default\":\"e macron et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1E17\",\"mappings\":{\"default\":{\"default\":\"e macron et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E1D\",\"mappings\":{\"default\":{\"default\":\"e cédille et brève\"}},\"category\":\"Ll\"},{\"key\":\"1E2F\",\"mappings\":{\"default\":{\"default\":\"i tréma et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E39\",\"mappings\":{\"default\":{\"default\":\"l point souscrit et macron\"}},\"category\":\"Ll\"},{\"key\":\"1E4D\",\"mappings\":{\"default\":{\"default\":\"o tilde et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E4F\",\"mappings\":{\"default\":{\"default\":\"o tilde et tréma\"}},\"category\":\"Ll\"},{\"key\":\"1E51\",\"mappings\":{\"default\":{\"default\":\"o macron et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1E53\",\"mappings\":{\"default\":{\"default\":\"o macron et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E5D\",\"mappings\":{\"default\":{\"default\":\"r point souscrit et macron\"}},\"category\":\"Ll\"},{\"key\":\"1E65\",\"mappings\":{\"default\":{\"default\":\"s accent aigu et point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E67\",\"mappings\":{\"default\":{\"default\":\"s caron et point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E69\",\"mappings\":{\"default\":{\"default\":\"s point souscrit et point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E79\",\"mappings\":{\"default\":{\"default\":\"u tilde et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E7B\",\"mappings\":{\"default\":{\"default\":\"u macron et tréma\"}},\"category\":\"Ll\"},{\"key\":\"1EA5\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1EA7\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EA9\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe et crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EAB\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe et tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EAD\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe et point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EAF\",\"mappings\":{\"default\":{\"default\":\"a brève et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1EB1\",\"mappings\":{\"default\":{\"default\":\"a brève et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EB3\",\"mappings\":{\"default\":{\"default\":\"a brève et crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EB5\",\"mappings\":{\"default\":{\"default\":\"a brève et tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EB7\",\"mappings\":{\"default\":{\"default\":\"a brève et point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EBF\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1EC1\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EC3\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe et crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EC5\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe et tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EC7\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe et point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1ED1\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1ED3\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1ED5\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe et crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1ED7\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe et tilde\"}},\"category\":\"Ll\"},{\"key\":\"1ED9\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe et point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EDB\",\"mappings\":{\"default\":{\"default\":\"o cornu accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1EDD\",\"mappings\":{\"default\":{\"default\":\"o cornu accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EDF\",\"mappings\":{\"default\":{\"default\":\"o cornu crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EE1\",\"mappings\":{\"default\":{\"default\":\"o cornu tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EE3\",\"mappings\":{\"default\":{\"default\":\"o cornu point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EE9\",\"mappings\":{\"default\":{\"default\":\"u cornu accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1EEB\",\"mappings\":{\"default\":{\"default\":\"u cornu accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EED\",\"mappings\":{\"default\":{\"default\":\"u cornu crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EEF\",\"mappings\":{\"default\":{\"default\":\"u cornu tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EF1\",\"mappings\":{\"default\":{\"default\":\"u cornu point souscrit\"}},\"category\":\"Ll\"}]\n,\n\"fr/symbols/latin-lower-phonetic.js\": \n[{\"locale\":\"fr\"},{\"key\":\"00F8\",\"mappings\":{\"default\":{\"default\":\"o barré\"}},\"category\":\"Ll\"},{\"key\":\"0111\",\"mappings\":{\"default\":{\"default\":\"d barré\"}},\"category\":\"Ll\"},{\"key\":\"0127\",\"mappings\":{\"default\":{\"default\":\"h barré\"}},\"category\":\"Ll\"},{\"key\":\"0142\",\"mappings\":{\"default\":{\"default\":\"l barré\"}},\"category\":\"Ll\"},{\"key\":\"0167\",\"mappings\":{\"default\":{\"default\":\"t barré\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0180\",\"mappings\":{\"default\":{\"default\":\"b barré\"}}},{\"key\":\"019B\",\"mappings\":{\"default\":{\"default\":\"lambda barré\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01B6\",\"mappings\":{\"default\":{\"default\":\"z barré\"}}},{\"category\":\"Ll\",\"key\":\"01BE\",\"mappings\":{\"default\":{\"default\":\"coup de glotte barré culbuté\"}}},{\"category\":\"Ll\",\"key\":\"01E5\",\"mappings\":{\"default\":{\"default\":\"g barré\"}}},{\"category\":\"Ll\",\"key\":\"01FF\",\"mappings\":{\"default\":{\"default\":\"o barré accent aigu\"}}},{\"category\":\"Ll\",\"key\":\"023C\",\"mappings\":{\"default\":{\"default\":\"c barré\"}}},{\"category\":\"Ll\",\"key\":\"0247\",\"mappings\":{\"default\":{\"default\":\"e barré\"}}},{\"category\":\"Ll\",\"key\":\"0249\",\"mappings\":{\"default\":{\"default\":\"j barré\"}}},{\"category\":\"Ll\",\"key\":\"024D\",\"mappings\":{\"default\":{\"default\":\"r barré\"}}},{\"category\":\"Ll\",\"key\":\"024F\",\"mappings\":{\"default\":{\"default\":\"y barré\"}}},{\"category\":\"Ll\",\"key\":\"025F\",\"mappings\":{\"default\":{\"default\":\"j sans point barré\"}}},{\"category\":\"Ll\",\"key\":\"0268\",\"mappings\":{\"default\":{\"default\":\"i barré\"}}},{\"category\":\"Ll\",\"key\":\"0284\",\"mappings\":{\"default\":{\"default\":\"j sans point barré crosse\"}}},{\"category\":\"Ll\",\"key\":\"02A1\",\"mappings\":{\"default\":{\"default\":\"coup de glotte barré\"}}},{\"category\":\"Ll\",\"key\":\"02A2\",\"mappings\":{\"default\":{\"default\":\"coup de glotte barré réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"1D13\",\"mappings\":{\"default\":{\"default\":\"o couché barré obliquement\"}}},{\"category\":\"Ll\",\"key\":\"1D7C\",\"mappings\":{\"default\":{\"default\":\"iota barré\"}}},{\"category\":\"Ll\",\"key\":\"1D7D\",\"mappings\":{\"default\":{\"default\":\"p barré\"}}},{\"category\":\"Ll\",\"key\":\"1D7F\",\"mappings\":{\"default\":{\"default\":\"upsilon barré\"}}},{\"category\":\"Ll\",\"key\":\"1E9C\",\"mappings\":{\"default\":{\"default\":\"s long à barre diagonale\"}}},{\"category\":\"Ll\",\"key\":\"1E9D\",\"mappings\":{\"default\":{\"default\":\"s long à barre haute\"}}},{\"category\":\"Ll\",\"key\":\"018D\",\"mappings\":{\"default\":{\"default\":\"delta culbutée\"}}},{\"key\":\"1E9B\",\"mappings\":{\"default\":{\"default\":\"s long point en chef\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"1E9F\",\"mappings\":{\"default\":{\"default\":\"delta\"}}},{\"key\":\"0138\",\"mappings\":{\"default\":{\"default\":\"kra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"017F\",\"mappings\":{\"default\":{\"default\":\"s long\"}}},{\"category\":\"Ll\",\"key\":\"0183\",\"mappings\":{\"default\":{\"default\":\"b potence\"}}},{\"category\":\"Ll\",\"key\":\"0185\",\"mappings\":{\"default\":{\"default\":\"sixiéme ton\"}}},{\"category\":\"Ll\",\"key\":\"0188\",\"mappings\":{\"default\":{\"default\":\"c crosse\"}}},{\"category\":\"Ll\",\"key\":\"018C\",\"mappings\":{\"default\":{\"default\":\"d potence\"}}},{\"key\":\"0192\",\"mappings\":{\"default\":{\"default\":\"f cursif\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0195\",\"mappings\":{\"default\":{\"default\":\"hv (Hwair)\"}}},{\"category\":\"Ll\",\"key\":\"0199\",\"mappings\":{\"default\":{\"default\":\"k crosse\"}}},{\"key\":\"019A\",\"mappings\":{\"default\":{\"default\":\"l rayé\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"019E\",\"mappings\":{\"default\":{\"default\":\"n à long jambage de droite\"}}},{\"category\":\"Ll\",\"key\":\"01A1\",\"mappings\":{\"default\":{\"default\":\"o cornu\"}}},{\"category\":\"Ll\",\"key\":\"01A3\",\"mappings\":{\"default\":{\"default\":\"gha\"}}},{\"category\":\"Ll\",\"key\":\"01A5\",\"mappings\":{\"default\":{\"default\":\"p crosse\"}}},{\"category\":\"Ll\",\"key\":\"01A8\",\"mappings\":{\"default\":{\"default\":\"deuxiéme ton\"}}},{\"category\":\"Ll\",\"key\":\"01AA\",\"mappings\":{\"default\":{\"default\":\"ech réfléchi bouclé\"}}},{\"category\":\"Ll\",\"key\":\"01AB\",\"mappings\":{\"default\":{\"default\":\"t hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"01AD\",\"mappings\":{\"default\":{\"default\":\"t crosse\"}}},{\"category\":\"Ll\",\"key\":\"01B0\",\"mappings\":{\"default\":{\"default\":\"u cornu\"}}},{\"category\":\"Ll\",\"key\":\"01B4\",\"mappings\":{\"default\":{\"default\":\"y crosse\"}}},{\"category\":\"Ll\",\"key\":\"01B9\",\"mappings\":{\"default\":{\"default\":\"ej réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"01BA\",\"mappings\":{\"default\":{\"default\":\"ej hameçon\"}}},{\"category\":\"Ll\",\"key\":\"01BD\",\"mappings\":{\"default\":{\"default\":\"cinquiéme tun\"}}},{\"category\":\"Ll\",\"key\":\"01BF\",\"mappings\":{\"default\":{\"default\":\"wynn\"}}},{\"category\":\"Ll\",\"key\":\"01C6\",\"mappings\":{\"default\":{\"default\":\"dz caron\"}}},{\"category\":\"Ll\",\"key\":\"01C9\",\"mappings\":{\"default\":{\"default\":\"lj\"}}},{\"category\":\"Ll\",\"key\":\"01CC\",\"mappings\":{\"default\":{\"default\":\"nj\"}}},{\"category\":\"Ll\",\"key\":\"01E3\",\"mappings\":{\"default\":{\"default\":\"ae macron\"}}},{\"category\":\"Ll\",\"key\":\"01EF\",\"mappings\":{\"default\":{\"default\":\"ej caron\"}}},{\"category\":\"Ll\",\"key\":\"01F3\",\"mappings\":{\"default\":{\"default\":\"dz\"}}},{\"category\":\"Ll\",\"key\":\"021D\",\"mappings\":{\"default\":{\"default\":\"yogh\"}}},{\"category\":\"Ll\",\"key\":\"026E\",\"mappings\":{\"default\":{\"default\":\"lej\"}}},{\"category\":\"Ll\",\"key\":\"0292\",\"mappings\":{\"default\":{\"default\":\"ej\"}}},{\"category\":\"Ll\",\"key\":\"0293\",\"mappings\":{\"default\":{\"default\":\"ej bouclé\"}}},{\"category\":\"Ll\",\"key\":\"02A4\",\"mappings\":{\"default\":{\"default\":\"digramme Dej\"}}},{\"category\":\"Ll\",\"key\":\"01DD\",\"mappings\":{\"default\":{\"default\":\"e culbuté\"}}},{\"category\":\"Ll\",\"key\":\"01FD\",\"mappings\":{\"default\":{\"default\":\"ae accent aigu (ash)\"}}},{\"category\":\"Ll\",\"key\":\"0221\",\"mappings\":{\"default\":{\"default\":\"d bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0223\",\"mappings\":{\"default\":{\"default\":\"ou\"}}},{\"category\":\"Ll\",\"key\":\"0225\",\"mappings\":{\"default\":{\"default\":\"z crochet\"}}},{\"category\":\"Ll\",\"key\":\"0234\",\"mappings\":{\"default\":{\"default\":\"l bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0235\",\"mappings\":{\"default\":{\"default\":\"n bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0236\",\"mappings\":{\"default\":{\"default\":\"t bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0238\",\"mappings\":{\"default\":{\"default\":\"Ligature minuscule latine Db\"}}},{\"category\":\"Ll\",\"key\":\"0239\",\"mappings\":{\"default\":{\"default\":\"Ligature minuscule latine Qp\"}}},{\"category\":\"Ll\",\"key\":\"023F\",\"mappings\":{\"default\":{\"default\":\"s à paraphe\"}}},{\"category\":\"Ll\",\"key\":\"0240\",\"mappings\":{\"default\":{\"default\":\"z à paraphe\"}}},{\"category\":\"Ll\",\"key\":\"0242\",\"mappings\":{\"default\":{\"default\":\"coup de glotte\"}}},{\"category\":\"Ll\",\"key\":\"024B\",\"mappings\":{\"default\":{\"default\":\"q avec hameçon\"}}},{\"category\":\"Ll\",\"key\":\"0250\",\"mappings\":{\"default\":{\"default\":\"a culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0251\",\"mappings\":{\"default\":{\"default\":\"alpha\"}}},{\"category\":\"Ll\",\"key\":\"0252\",\"mappings\":{\"default\":{\"default\":\"alpha culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0253\",\"mappings\":{\"default\":{\"default\":\"b crosse\"}}},{\"category\":\"Ll\",\"key\":\"0254\",\"mappings\":{\"default\":{\"default\":\"o ouvert\"}}},{\"category\":\"Ll\",\"key\":\"0255\",\"mappings\":{\"default\":{\"default\":\"c bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0256\",\"mappings\":{\"default\":{\"default\":\"d hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0257\",\"mappings\":{\"default\":{\"default\":\"d crosse\"}}},{\"category\":\"Ll\",\"key\":\"0258\",\"mappings\":{\"default\":{\"default\":\"e réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"0259\",\"mappings\":{\"default\":{\"default\":\"schwa\"}}},{\"category\":\"Ll\",\"key\":\"025A\",\"mappings\":{\"default\":{\"default\":\"schwa crochet\"}}},{\"key\":\"025B\",\"mappings\":{\"default\":{\"default\":\"e ouvert\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"025C\",\"mappings\":{\"default\":{\"default\":\"epsilon réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"025D\",\"mappings\":{\"default\":{\"default\":\"epsilon réfléchi crochet\"}}},{\"category\":\"Ll\",\"key\":\"025E\",\"mappings\":{\"default\":{\"default\":\"epsilon réfléchi fermé\"}}},{\"category\":\"Ll\",\"key\":\"0260\",\"mappings\":{\"default\":{\"default\":\"g crosse\"}}},{\"category\":\"Ll\",\"key\":\"0261\",\"mappings\":{\"default\":{\"default\":\"g cursif\"}}},{\"category\":\"Ll\",\"key\":\"0263\",\"mappings\":{\"default\":{\"default\":\"gamma\"}}},{\"category\":\"Ll\",\"key\":\"0264\",\"mappings\":{\"default\":{\"default\":\"petit gamma\"}}},{\"category\":\"Ll\",\"key\":\"0265\",\"mappings\":{\"default\":{\"default\":\"h culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0266\",\"mappings\":{\"default\":{\"default\":\"h crosse\"}}},{\"category\":\"Ll\",\"key\":\"0267\",\"mappings\":{\"default\":{\"default\":\"eng crosse\"}}},{\"category\":\"Ll\",\"key\":\"0269\",\"mappings\":{\"default\":{\"default\":\"iota\"}}},{\"category\":\"Ll\",\"key\":\"026B\",\"mappings\":{\"default\":{\"default\":\"l tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"026C\",\"mappings\":{\"default\":{\"default\":\"l sanglé\"}}},{\"category\":\"Ll\",\"key\":\"026D\",\"mappings\":{\"default\":{\"default\":\"l hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"026F\",\"mappings\":{\"default\":{\"default\":\"m culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0270\",\"mappings\":{\"default\":{\"default\":\"m hampé culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0271\",\"mappings\":{\"default\":{\"default\":\"m hameçon\"}}},{\"category\":\"Ll\",\"key\":\"0272\",\"mappings\":{\"default\":{\"default\":\"n hameçon à gauche\"}}},{\"category\":\"Ll\",\"key\":\"0273\",\"mappings\":{\"default\":{\"default\":\"n hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0275\",\"mappings\":{\"default\":{\"default\":\"o barré\"}}},{\"category\":\"Ll\",\"key\":\"0277\",\"mappings\":{\"default\":{\"default\":\"oméga fermé\"}}},{\"category\":\"Ll\",\"key\":\"0278\",\"mappings\":{\"default\":{\"default\":\"phi\"}}},{\"category\":\"Ll\",\"key\":\"0279\",\"mappings\":{\"default\":{\"default\":\"r culbuté\"}}},{\"category\":\"Ll\",\"key\":\"027A\",\"mappings\":{\"default\":{\"default\":\"r prolongé culbuté\"}}},{\"category\":\"Ll\",\"key\":\"027B\",\"mappings\":{\"default\":{\"default\":\"r crosse culbuté\"}}},{\"category\":\"Ll\",\"key\":\"027C\",\"mappings\":{\"default\":{\"default\":\"r prolongé\"}}},{\"category\":\"Ll\",\"key\":\"027D\",\"mappings\":{\"default\":{\"default\":\"r hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"027E\",\"mappings\":{\"default\":{\"default\":\"r sans obit\"}}},{\"category\":\"Ll\",\"key\":\"027F\",\"mappings\":{\"default\":{\"default\":\"r sans obit réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"0282\",\"mappings\":{\"default\":{\"default\":\"s hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0283\",\"mappings\":{\"default\":{\"default\":\"ech\"}}},{\"category\":\"Ll\",\"key\":\"0285\",\"mappings\":{\"default\":{\"default\":\"r sans obit réfléchi hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0286\",\"mappings\":{\"default\":{\"default\":\"ech bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0287\",\"mappings\":{\"default\":{\"default\":\"t culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0288\",\"mappings\":{\"default\":{\"default\":\"t hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0289\",\"mappings\":{\"default\":{\"default\":\"u barré\"}}},{\"category\":\"Ll\",\"key\":\"028A\",\"mappings\":{\"default\":{\"default\":\"upsilon\"}}},{\"category\":\"Ll\",\"key\":\"028B\",\"mappings\":{\"default\":{\"default\":\"v de ronde\"}}},{\"category\":\"Ll\",\"key\":\"028C\",\"mappings\":{\"default\":{\"default\":\"v culbuté\"}}},{\"category\":\"Ll\",\"key\":\"028D\",\"mappings\":{\"default\":{\"default\":\"w culbuté\"}}},{\"category\":\"Ll\",\"key\":\"028E\",\"mappings\":{\"default\":{\"default\":\"y culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0290\",\"mappings\":{\"default\":{\"default\":\"z hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0291\",\"mappings\":{\"default\":{\"default\":\"z bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0295\",\"mappings\":{\"default\":{\"default\":\"coup de glotte réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"0296\",\"mappings\":{\"default\":{\"default\":\"coup de glotte culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0297\",\"mappings\":{\"default\":{\"default\":\"C étiré\"}}},{\"category\":\"Ll\",\"key\":\"0298\",\"mappings\":{\"default\":{\"default\":\"clic bilabial\"}}},{\"category\":\"Ll\",\"key\":\"029A\",\"mappings\":{\"default\":{\"default\":\"epsilon fermé\"}}},{\"category\":\"Ll\",\"key\":\"029E\",\"mappings\":{\"default\":{\"default\":\"k culbuté\"}}},{\"category\":\"Ll\",\"key\":\"02A0\",\"mappings\":{\"default\":{\"default\":\"q crosse\"}}},{\"category\":\"Ll\",\"key\":\"02A3\",\"mappings\":{\"default\":{\"default\":\"digramme Dz\"}}},{\"category\":\"Ll\",\"key\":\"02A5\",\"mappings\":{\"default\":{\"default\":\"digramme Dz bouclé\"}}},{\"category\":\"Ll\",\"key\":\"02A6\",\"mappings\":{\"default\":{\"default\":\"digramme Ts\"}}},{\"category\":\"Ll\",\"key\":\"02A7\",\"mappings\":{\"default\":{\"default\":\"digramme Tech\"}}},{\"category\":\"Ll\",\"key\":\"02A8\",\"mappings\":{\"default\":{\"default\":\"digramme Tc bouclé\"}}},{\"category\":\"Ll\",\"key\":\"02A9\",\"mappings\":{\"default\":{\"default\":\"digramme Feng\"}}},{\"category\":\"Ll\",\"key\":\"02AA\",\"mappings\":{\"default\":{\"default\":\"digramme Ls\"}}},{\"category\":\"Ll\",\"key\":\"02AB\",\"mappings\":{\"default\":{\"default\":\"digramme Lz\"}}},{\"category\":\"Ll\",\"key\":\"02AC\",\"mappings\":{\"default\":{\"default\":\"percussion bilabiale\"}}},{\"category\":\"Ll\",\"key\":\"02AD\",\"mappings\":{\"default\":{\"default\":\"percussion bidentale\"}}},{\"category\":\"Ll\",\"key\":\"02AE\",\"mappings\":{\"default\":{\"default\":\"h culbuté crosse réfléchie\"}}},{\"category\":\"Ll\",\"key\":\"02AF\",\"mappings\":{\"default\":{\"default\":\"h culbuté crosse réfléchie et hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D02\",\"mappings\":{\"default\":{\"default\":\"ae culbuté\"}}},{\"category\":\"Ll\",\"key\":\"1D08\",\"mappings\":{\"default\":{\"default\":\"epsilon culbuté\"}}},{\"category\":\"Ll\",\"key\":\"1D09\",\"mappings\":{\"default\":{\"default\":\"i culbuté\"}}},{\"category\":\"Ll\",\"key\":\"1D11\",\"mappings\":{\"default\":{\"default\":\"o couché\"}}},{\"category\":\"Ll\",\"key\":\"1D12\",\"mappings\":{\"default\":{\"default\":\"o ouvert couché\"}}},{\"category\":\"Ll\",\"key\":\"1D14\",\"mappings\":{\"default\":{\"default\":\"oe culbuté\"}}},{\"category\":\"Ll\",\"key\":\"1D16\",\"mappings\":{\"default\":{\"default\":\"moitié supérieure de o\"}}},{\"category\":\"Ll\",\"key\":\"1D17\",\"mappings\":{\"default\":{\"default\":\"moitié inférieure de o\"}}},{\"category\":\"Ll\",\"key\":\"1D1D\",\"mappings\":{\"default\":{\"default\":\"u couché\"}}},{\"category\":\"Ll\",\"key\":\"1D1E\",\"mappings\":{\"default\":{\"default\":\"u tréma couché\"}}},{\"category\":\"Ll\",\"key\":\"1D1F\",\"mappings\":{\"default\":{\"default\":\"m couché\"}}},{\"category\":\"Ll\",\"key\":\"1D24\",\"mappings\":{\"default\":{\"default\":\"fricative pharyngale voisée\"}}},{\"category\":\"Ll\",\"key\":\"1D25\",\"mappings\":{\"default\":{\"default\":\"aïn\"}}},{\"category\":\"Ll\",\"key\":\"1D6B\",\"mappings\":{\"default\":{\"default\":\"ue\"}}},{\"category\":\"Ll\",\"key\":\"1D6C\",\"mappings\":{\"default\":{\"default\":\"b tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D6D\",\"mappings\":{\"default\":{\"default\":\"d tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D6E\",\"mappings\":{\"default\":{\"default\":\"f tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D6F\",\"mappings\":{\"default\":{\"default\":\"m tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D70\",\"mappings\":{\"default\":{\"default\":\"n tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D71\",\"mappings\":{\"default\":{\"default\":\"p tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D72\",\"mappings\":{\"default\":{\"default\":\"r tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D73\",\"mappings\":{\"default\":{\"default\":\"r sans obit tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D74\",\"mappings\":{\"default\":{\"default\":\"s tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D75\",\"mappings\":{\"default\":{\"default\":\"t tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D76\",\"mappings\":{\"default\":{\"default\":\"z tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D77\",\"mappings\":{\"default\":{\"default\":\"g culbuté\"}}},{\"category\":\"Ll\",\"key\":\"1D79\",\"mappings\":{\"default\":{\"default\":\"g insulaire\"}}},{\"category\":\"Ll\",\"key\":\"1D7A\",\"mappings\":{\"default\":{\"default\":\"th barré diagonalement\"}}},{\"category\":\"Ll\",\"key\":\"1D80\",\"mappings\":{\"default\":{\"default\":\"b hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D81\",\"mappings\":{\"default\":{\"default\":\"d hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D82\",\"mappings\":{\"default\":{\"default\":\"f hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D83\",\"mappings\":{\"default\":{\"default\":\"g hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D84\",\"mappings\":{\"default\":{\"default\":\"k hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D85\",\"mappings\":{\"default\":{\"default\":\"l hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D86\",\"mappings\":{\"default\":{\"default\":\"m hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D87\",\"mappings\":{\"default\":{\"default\":\"n hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D88\",\"mappings\":{\"default\":{\"default\":\"p hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D89\",\"mappings\":{\"default\":{\"default\":\"r hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8A\",\"mappings\":{\"default\":{\"default\":\"s hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8B\",\"mappings\":{\"default\":{\"default\":\"ech hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8C\",\"mappings\":{\"default\":{\"default\":\"v hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8D\",\"mappings\":{\"default\":{\"default\":\"x hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8E\",\"mappings\":{\"default\":{\"default\":\"z hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8F\",\"mappings\":{\"default\":{\"default\":\"a hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D90\",\"mappings\":{\"default\":{\"default\":\"alpha hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D91\",\"mappings\":{\"default\":{\"default\":\"d crosse et hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D92\",\"mappings\":{\"default\":{\"default\":\"e hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D93\",\"mappings\":{\"default\":{\"default\":\"epsilon hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D94\",\"mappings\":{\"default\":{\"default\":\"epsilon réfléchi hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D95\",\"mappings\":{\"default\":{\"default\":\"schwa hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D96\",\"mappings\":{\"default\":{\"default\":\"i hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D97\",\"mappings\":{\"default\":{\"default\":\"o ouvert hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D98\",\"mappings\":{\"default\":{\"default\":\"ech hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D99\",\"mappings\":{\"default\":{\"default\":\"u hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D9A\",\"mappings\":{\"default\":{\"default\":\"ej hameçon rétroflexe\"}}},{\"key\":\"0149\",\"mappings\":{\"default\":{\"default\":\"n précédée d'une apostrophe\"}},\"category\":\"Ll\"},{\"key\":\"014B\",\"mappings\":{\"default\":{\"default\":\"eng\"}},\"category\":\"Ll\"}]\n,\n\"fr/symbols/latin-lower-single-accent.js\": \n[{\"locale\":\"fr\"},{\"key\":\"00E0\",\"mappings\":{\"default\":{\"default\":\"a accent grave\"}},\"category\":\"Ll\"},{\"key\":\"00E1\",\"mappings\":{\"default\":{\"default\":\"a accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00E2\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"00E3\",\"mappings\":{\"default\":{\"default\":\"a tilde\"}},\"category\":\"Ll\"},{\"key\":\"00E4\",\"mappings\":{\"default\":{\"default\":\"a tréma\"}},\"category\":\"Ll\"},{\"key\":\"00E5\",\"mappings\":{\"default\":{\"default\":\"a rond en chef\"}},\"category\":\"Ll\"},{\"key\":\"00E7\",\"mappings\":{\"default\":{\"default\":\"c cédille\"}},\"category\":\"Ll\"},{\"key\":\"00E8\",\"mappings\":{\"default\":{\"default\":\"e accent grave\"}},\"category\":\"Ll\"},{\"key\":\"00E9\",\"mappings\":{\"default\":{\"default\":\"e accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00EA\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"00EB\",\"mappings\":{\"default\":{\"default\":\"e tréma\"}},\"category\":\"Ll\"},{\"key\":\"00EC\",\"mappings\":{\"default\":{\"default\":\"i accent grave\"}},\"category\":\"Ll\"},{\"key\":\"00ED\",\"mappings\":{\"default\":{\"default\":\"i accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00EE\",\"mappings\":{\"default\":{\"default\":\"i accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"00EF\",\"mappings\":{\"default\":{\"default\":\"i tréma\"}},\"category\":\"Ll\"},{\"key\":\"00F1\",\"mappings\":{\"default\":{\"default\":\"n tilde\"}},\"category\":\"Ll\"},{\"key\":\"00F2\",\"mappings\":{\"default\":{\"default\":\"o accent grave\"}},\"category\":\"Ll\"},{\"key\":\"00F3\",\"mappings\":{\"default\":{\"default\":\"o accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00F4\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"00F5\",\"mappings\":{\"default\":{\"default\":\"o tilde\"}},\"category\":\"Ll\"},{\"key\":\"00F6\",\"mappings\":{\"default\":{\"default\":\"o tréma\"}},\"category\":\"Ll\"},{\"key\":\"00F9\",\"mappings\":{\"default\":{\"default\":\"u accent grave\"}},\"category\":\"Ll\"},{\"key\":\"00FA\",\"mappings\":{\"default\":{\"default\":\"u accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00FB\",\"mappings\":{\"default\":{\"default\":\"u accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"00FC\",\"mappings\":{\"default\":{\"default\":\"u tréma\"}},\"category\":\"Ll\"},{\"key\":\"00FD\",\"mappings\":{\"default\":{\"default\":\"y accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00FF\",\"mappings\":{\"default\":{\"default\":\"y tréma\"}},\"category\":\"Ll\"},{\"key\":\"0101\",\"mappings\":{\"default\":{\"default\":\"a macron\"}},\"category\":\"Ll\"},{\"key\":\"0103\",\"mappings\":{\"default\":{\"default\":\"a brève\"}},\"category\":\"Ll\"},{\"key\":\"0105\",\"mappings\":{\"default\":{\"default\":\"a ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0107\",\"mappings\":{\"default\":{\"default\":\"c accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"0109\",\"mappings\":{\"default\":{\"default\":\"c accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"010B\",\"mappings\":{\"default\":{\"default\":\"c point en chef\"}},\"category\":\"Ll\"},{\"key\":\"010D\",\"mappings\":{\"default\":{\"default\":\"c caron\"}},\"category\":\"Ll\"},{\"key\":\"010F\",\"mappings\":{\"default\":{\"default\":\"d caron\"}},\"category\":\"Ll\"},{\"key\":\"0113\",\"mappings\":{\"default\":{\"default\":\"e macron\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0115\",\"mappings\":{\"default\":{\"default\":\"e brève\"}}},{\"key\":\"0117\",\"mappings\":{\"default\":{\"default\":\"e point en chef\"}},\"category\":\"Ll\"},{\"key\":\"0119\",\"mappings\":{\"default\":{\"default\":\"e ogonek\"}},\"category\":\"Ll\"},{\"key\":\"011B\",\"mappings\":{\"default\":{\"default\":\"e caron\"}},\"category\":\"Ll\"},{\"key\":\"011D\",\"mappings\":{\"default\":{\"default\":\"g accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"011F\",\"mappings\":{\"default\":{\"default\":\"g brève\"}},\"category\":\"Ll\"},{\"key\":\"0121\",\"mappings\":{\"default\":{\"default\":\"g point en chef\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0123\",\"mappings\":{\"default\":{\"default\":\"g cédille\"}}},{\"key\":\"0125\",\"mappings\":{\"default\":{\"default\":\"h accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"0129\",\"mappings\":{\"default\":{\"default\":\"i tilde\"}},\"category\":\"Ll\"},{\"key\":\"012B\",\"mappings\":{\"default\":{\"default\":\"i macron\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"012D\",\"mappings\":{\"default\":{\"default\":\"i brève\"}}},{\"key\":\"012F\",\"mappings\":{\"default\":{\"default\":\"i ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0131\",\"mappings\":{\"default\":{\"default\":\"i sans point\"}},\"category\":\"Ll\"},{\"key\":\"0135\",\"mappings\":{\"default\":{\"default\":\"j accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"0137\",\"mappings\":{\"default\":{\"default\":\"k cédille\"}},\"category\":\"Ll\"},{\"key\":\"013A\",\"mappings\":{\"default\":{\"default\":\"l accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"013C\",\"mappings\":{\"default\":{\"default\":\"l cédille\"}},\"category\":\"Ll\"},{\"key\":\"013E\",\"mappings\":{\"default\":{\"default\":\"l caron\"}},\"category\":\"Ll\"},{\"key\":\"0140\",\"mappings\":{\"default\":{\"default\":\"l point médian\"}},\"category\":\"Ll\"},{\"key\":\"0144\",\"mappings\":{\"default\":{\"default\":\"n accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"0146\",\"mappings\":{\"default\":{\"default\":\"n cédille\"}},\"category\":\"Ll\"},{\"key\":\"0148\",\"mappings\":{\"default\":{\"default\":\"n caron\"}},\"category\":\"Ll\"},{\"key\":\"014D\",\"mappings\":{\"default\":{\"default\":\"o macron\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"014F\",\"mappings\":{\"default\":{\"default\":\"o brève\"}}},{\"key\":\"0151\",\"mappings\":{\"default\":{\"default\":\"o avec double accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"0155\",\"mappings\":{\"default\":{\"default\":\"r accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"0157\",\"mappings\":{\"default\":{\"default\":\"r cédille\"}},\"category\":\"Ll\"},{\"key\":\"0159\",\"mappings\":{\"default\":{\"default\":\"r caron\"}},\"category\":\"Ll\"},{\"key\":\"015B\",\"mappings\":{\"default\":{\"default\":\"s accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"015D\",\"mappings\":{\"default\":{\"default\":\"s accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"015F\",\"mappings\":{\"default\":{\"default\":\"s cédille\"}},\"category\":\"Ll\"},{\"key\":\"0161\",\"mappings\":{\"default\":{\"default\":\"s caron\"}},\"category\":\"Ll\"},{\"key\":\"0163\",\"mappings\":{\"default\":{\"default\":\"t cédille\"}},\"category\":\"Ll\"},{\"key\":\"0165\",\"mappings\":{\"default\":{\"default\":\"t caron\"}},\"category\":\"Ll\"},{\"key\":\"0169\",\"mappings\":{\"default\":{\"default\":\"u tilde\"}},\"category\":\"Ll\"},{\"key\":\"016B\",\"mappings\":{\"default\":{\"default\":\"u macron\"}},\"category\":\"Ll\"},{\"key\":\"016D\",\"mappings\":{\"default\":{\"default\":\"u brève\"}},\"category\":\"Ll\"},{\"key\":\"016F\",\"mappings\":{\"default\":{\"default\":\"u rond en chef\"}},\"category\":\"Ll\"},{\"key\":\"0171\",\"mappings\":{\"default\":{\"default\":\"u avec double accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"0173\",\"mappings\":{\"default\":{\"default\":\"u ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0175\",\"mappings\":{\"default\":{\"default\":\"w accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"0177\",\"mappings\":{\"default\":{\"default\":\"y accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"017A\",\"mappings\":{\"default\":{\"default\":\"z accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"017C\",\"mappings\":{\"default\":{\"default\":\"z point en chef\"}},\"category\":\"Ll\"},{\"key\":\"017E\",\"mappings\":{\"default\":{\"default\":\"z caron\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01CE\",\"mappings\":{\"default\":{\"default\":\"a caron\"}}},{\"category\":\"Ll\",\"key\":\"01D0\",\"mappings\":{\"default\":{\"default\":\"i caron\"}}},{\"category\":\"Ll\",\"key\":\"01D2\",\"mappings\":{\"default\":{\"default\":\"o caron\"}}},{\"category\":\"Ll\",\"key\":\"01D4\",\"mappings\":{\"default\":{\"default\":\"u caron\"}}},{\"category\":\"Ll\",\"key\":\"01E7\",\"mappings\":{\"default\":{\"default\":\"g caron\"}}},{\"category\":\"Ll\",\"key\":\"01E9\",\"mappings\":{\"default\":{\"default\":\"k caron\"}}},{\"category\":\"Ll\",\"key\":\"01EB\",\"mappings\":{\"default\":{\"default\":\"o ogonek\"}}},{\"category\":\"Ll\",\"key\":\"01F0\",\"mappings\":{\"default\":{\"default\":\"j caron\"}}},{\"key\":\"01F5\",\"mappings\":{\"default\":{\"default\":\"g accent aigu\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01F9\",\"mappings\":{\"default\":{\"default\":\"n grave\"}}},{\"category\":\"Ll\",\"key\":\"0201\",\"mappings\":{\"default\":{\"default\":\"a double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"0203\",\"mappings\":{\"default\":{\"default\":\"a brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"0205\",\"mappings\":{\"default\":{\"default\":\"e double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"0207\",\"mappings\":{\"default\":{\"default\":\"e brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"0209\",\"mappings\":{\"default\":{\"default\":\"i double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"020B\",\"mappings\":{\"default\":{\"default\":\"i brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"020D\",\"mappings\":{\"default\":{\"default\":\"o double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"020F\",\"mappings\":{\"default\":{\"default\":\"o brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"0211\",\"mappings\":{\"default\":{\"default\":\"r double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"0213\",\"mappings\":{\"default\":{\"default\":\"r brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"0215\",\"mappings\":{\"default\":{\"default\":\"u double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"0217\",\"mappings\":{\"default\":{\"default\":\"u brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"0219\",\"mappings\":{\"default\":{\"default\":\"s virgule souscrite *\"}}},{\"category\":\"Ll\",\"key\":\"021B\",\"mappings\":{\"default\":{\"default\":\"t virgule souscrite *\"}}},{\"category\":\"Ll\",\"key\":\"021F\",\"mappings\":{\"default\":{\"default\":\"h caron\"}}},{\"category\":\"Ll\",\"key\":\"0227\",\"mappings\":{\"default\":{\"default\":\"a point en chef\"}}},{\"category\":\"Ll\",\"key\":\"0229\",\"mappings\":{\"default\":{\"default\":\"e cédille\"}}},{\"category\":\"Ll\",\"key\":\"022F\",\"mappings\":{\"default\":{\"default\":\"o point en chef\"}}},{\"category\":\"Ll\",\"key\":\"0233\",\"mappings\":{\"default\":{\"default\":\"y macron\"}}},{\"category\":\"Ll\",\"key\":\"0237\",\"mappings\":{\"default\":{\"default\":\"j sans point\"}}},{\"key\":\"1E01\",\"mappings\":{\"default\":{\"default\":\"a à rond souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E03\",\"mappings\":{\"default\":{\"default\":\"b point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E05\",\"mappings\":{\"default\":{\"default\":\"b point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E07\",\"mappings\":{\"default\":{\"default\":\"b ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E0B\",\"mappings\":{\"default\":{\"default\":\"d point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E0D\",\"mappings\":{\"default\":{\"default\":\"d point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E0F\",\"mappings\":{\"default\":{\"default\":\"d ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E11\",\"mappings\":{\"default\":{\"default\":\"d cédille\"}},\"category\":\"Ll\"},{\"key\":\"1E13\",\"mappings\":{\"default\":{\"default\":\"d accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E19\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E1B\",\"mappings\":{\"default\":{\"default\":\"e tilde souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E1F\",\"mappings\":{\"default\":{\"default\":\"f point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E21\",\"mappings\":{\"default\":{\"default\":\"g macron\"}},\"category\":\"Ll\"},{\"key\":\"1E23\",\"mappings\":{\"default\":{\"default\":\"h point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E25\",\"mappings\":{\"default\":{\"default\":\"h point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E27\",\"mappings\":{\"default\":{\"default\":\"h tréma\"}},\"category\":\"Ll\"},{\"key\":\"1E29\",\"mappings\":{\"default\":{\"default\":\"h cédille\"}},\"category\":\"Ll\"},{\"key\":\"1E2B\",\"mappings\":{\"default\":{\"default\":\"h brève souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E2D\",\"mappings\":{\"default\":{\"default\":\"i tilde souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E31\",\"mappings\":{\"default\":{\"default\":\"k accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E33\",\"mappings\":{\"default\":{\"default\":\"k point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E35\",\"mappings\":{\"default\":{\"default\":\"k ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E37\",\"mappings\":{\"default\":{\"default\":\"l point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E3B\",\"mappings\":{\"default\":{\"default\":\"l ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E3D\",\"mappings\":{\"default\":{\"default\":\"l accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E3F\",\"mappings\":{\"default\":{\"default\":\"m accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E41\",\"mappings\":{\"default\":{\"default\":\"m point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E43\",\"mappings\":{\"default\":{\"default\":\"m point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E45\",\"mappings\":{\"default\":{\"default\":\"n point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E47\",\"mappings\":{\"default\":{\"default\":\"n point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E49\",\"mappings\":{\"default\":{\"default\":\"n ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E4B\",\"mappings\":{\"default\":{\"default\":\"n accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E55\",\"mappings\":{\"default\":{\"default\":\"p accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E57\",\"mappings\":{\"default\":{\"default\":\"p point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E59\",\"mappings\":{\"default\":{\"default\":\"r point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E5B\",\"mappings\":{\"default\":{\"default\":\"r point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E5F\",\"mappings\":{\"default\":{\"default\":\"r ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E61\",\"mappings\":{\"default\":{\"default\":\"s point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E63\",\"mappings\":{\"default\":{\"default\":\"s point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E6B\",\"mappings\":{\"default\":{\"default\":\"t point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E6D\",\"mappings\":{\"default\":{\"default\":\"t point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E6F\",\"mappings\":{\"default\":{\"default\":\"t ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E71\",\"mappings\":{\"default\":{\"default\":\"t accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E73\",\"mappings\":{\"default\":{\"default\":\"u tréma souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E75\",\"mappings\":{\"default\":{\"default\":\"u tilde souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E77\",\"mappings\":{\"default\":{\"default\":\"u accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E7D\",\"mappings\":{\"default\":{\"default\":\"v tilde\"}},\"category\":\"Ll\"},{\"key\":\"1E7F\",\"mappings\":{\"default\":{\"default\":\"v point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E81\",\"mappings\":{\"default\":{\"default\":\"w accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1E83\",\"mappings\":{\"default\":{\"default\":\"w accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E85\",\"mappings\":{\"default\":{\"default\":\"w tréma\"}},\"category\":\"Ll\"},{\"key\":\"1E87\",\"mappings\":{\"default\":{\"default\":\"w point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E89\",\"mappings\":{\"default\":{\"default\":\"w point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E8B\",\"mappings\":{\"default\":{\"default\":\"x point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E8D\",\"mappings\":{\"default\":{\"default\":\"x tréma\"}},\"category\":\"Ll\"},{\"key\":\"1E8F\",\"mappings\":{\"default\":{\"default\":\"y point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E91\",\"mappings\":{\"default\":{\"default\":\"z accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"1E93\",\"mappings\":{\"default\":{\"default\":\"z point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E95\",\"mappings\":{\"default\":{\"default\":\"z ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E96\",\"mappings\":{\"default\":{\"default\":\"h ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E97\",\"mappings\":{\"default\":{\"default\":\"t tréma\"}},\"category\":\"Ll\"},{\"key\":\"1E98\",\"mappings\":{\"default\":{\"default\":\"w rond en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E99\",\"mappings\":{\"default\":{\"default\":\"y rond en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E9A\",\"mappings\":{\"default\":{\"default\":\"a demi rond à droite\"}},\"category\":\"Ll\"},{\"key\":\"1EA1\",\"mappings\":{\"default\":{\"default\":\"a point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EA3\",\"mappings\":{\"default\":{\"default\":\"a crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EB9\",\"mappings\":{\"default\":{\"default\":\"e point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EBB\",\"mappings\":{\"default\":{\"default\":\"e crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EBD\",\"mappings\":{\"default\":{\"default\":\"e tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EC9\",\"mappings\":{\"default\":{\"default\":\"i crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1ECB\",\"mappings\":{\"default\":{\"default\":\"i point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1ECD\",\"mappings\":{\"default\":{\"default\":\"o point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1ECF\",\"mappings\":{\"default\":{\"default\":\"o crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EE5\",\"mappings\":{\"default\":{\"default\":\"u point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EE7\",\"mappings\":{\"default\":{\"default\":\"u crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EF3\",\"mappings\":{\"default\":{\"default\":\"y accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EF5\",\"mappings\":{\"default\":{\"default\":\"y point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EF7\",\"mappings\":{\"default\":{\"default\":\"y crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EF9\",\"mappings\":{\"default\":{\"default\":\"y tilde\"}},\"category\":\"Ll\"}]\n,\n\"fr/symbols/latin-rest.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Ll\",\"key\":\"210E\",\"mappings\":{\"default\":{\"default\":\"constante de planck\"}}},{\"category\":\"Mn\",\"key\":\"0363\",\"mappings\":{\"default\":{\"default\":\"diacritique a\"}}},{\"category\":\"Mn\",\"key\":\"0364\",\"mappings\":{\"default\":{\"default\":\"diacritique e\"}}},{\"category\":\"Mn\",\"key\":\"0365\",\"mappings\":{\"default\":{\"default\":\"diacritique i\"}}},{\"category\":\"Mn\",\"key\":\"0366\",\"mappings\":{\"default\":{\"default\":\"diacritique o\"}}},{\"category\":\"Mn\",\"key\":\"0367\",\"mappings\":{\"default\":{\"default\":\"diacritique u\"}}},{\"category\":\"Mn\",\"key\":\"0368\",\"mappings\":{\"default\":{\"default\":\"diacritique c\"}}},{\"category\":\"Mn\",\"key\":\"0369\",\"mappings\":{\"default\":{\"default\":\"diacritique d\"}}},{\"category\":\"Mn\",\"key\":\"036A\",\"mappings\":{\"default\":{\"default\":\"diacritique h\"}}},{\"category\":\"Mn\",\"key\":\"036B\",\"mappings\":{\"default\":{\"default\":\"diacritique m\"}}},{\"category\":\"Mn\",\"key\":\"036C\",\"mappings\":{\"default\":{\"default\":\"diacritique r\"}}},{\"category\":\"Mn\",\"key\":\"036D\",\"mappings\":{\"default\":{\"default\":\"diacritique t\"}}},{\"category\":\"Mn\",\"key\":\"036E\",\"mappings\":{\"default\":{\"default\":\"diacritique v\"}}},{\"category\":\"Mn\",\"key\":\"036F\",\"mappings\":{\"default\":{\"default\":\"diacritique x\"}}},{\"category\":\"Lm\",\"key\":\"1D62\",\"mappings\":{\"default\":{\"default\":\"i souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D63\",\"mappings\":{\"default\":{\"default\":\"r souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D64\",\"mappings\":{\"default\":{\"default\":\"u souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D65\",\"mappings\":{\"default\":{\"default\":\"v souscrit\"}}},{\"category\":\"Mn\",\"key\":\"1DCA\",\"mappings\":{\"default\":{\"default\":\"diacritique r souscrite\"}}},{\"category\":\"Mn\",\"key\":\"1DD3\",\"mappings\":{\"default\":{\"default\":\"diacritique a ouvert aplati suscrit\"}}},{\"category\":\"Mn\",\"key\":\"1DD4\",\"mappings\":{\"default\":{\"default\":\"diacritique ae\"}}},{\"category\":\"Mn\",\"key\":\"1DD5\",\"mappings\":{\"default\":{\"default\":\"diacritique ao\"}}},{\"category\":\"Mn\",\"key\":\"1DD6\",\"mappings\":{\"default\":{\"default\":\"diacritique av\"}}},{\"category\":\"Mn\",\"key\":\"1DD7\",\"mappings\":{\"default\":{\"default\":\"diacritique c cédille\"}}},{\"category\":\"Mn\",\"key\":\"1DD8\",\"mappings\":{\"default\":{\"default\":\"diacritique d insulaire\"}}},{\"category\":\"Mn\",\"key\":\"1DD9\",\"mappings\":{\"default\":{\"default\":\"diacritique eth\"}}},{\"category\":\"Mn\",\"key\":\"1DDA\",\"mappings\":{\"default\":{\"default\":\"diacritique g\"}}},{\"category\":\"Mn\",\"key\":\"1DDB\",\"mappings\":{\"default\":{\"default\":\"diacritique petite g majuscule\"}}},{\"category\":\"Mn\",\"key\":\"1DDC\",\"mappings\":{\"default\":{\"default\":\"diacritique k\"}}},{\"category\":\"Mn\",\"key\":\"1DDD\",\"mappings\":{\"default\":{\"default\":\"diacritique l\"}}},{\"category\":\"Mn\",\"key\":\"1DDE\",\"mappings\":{\"default\":{\"default\":\"diacritique petite l majuscule\"}}},{\"category\":\"Mn\",\"key\":\"1DDF\",\"mappings\":{\"default\":{\"default\":\"diacritique petite m majuscule\"}}},{\"category\":\"Mn\",\"key\":\"1DE0\",\"mappings\":{\"default\":{\"default\":\"diacritique n\"}}},{\"category\":\"Mn\",\"key\":\"1DE1\",\"mappings\":{\"default\":{\"default\":\"diacritique petite n majuscule\"}}},{\"category\":\"Mn\",\"key\":\"1DE2\",\"mappings\":{\"default\":{\"default\":\"diacritique petite r majuscule\"}}},{\"category\":\"Mn\",\"key\":\"1DE3\",\"mappings\":{\"default\":{\"default\":\"diacritique r rotunda\"}}},{\"category\":\"Mn\",\"key\":\"1DE4\",\"mappings\":{\"default\":{\"default\":\"diacritique s\"}}},{\"category\":\"Mn\",\"key\":\"1DE5\",\"mappings\":{\"default\":{\"default\":\"diacritique s long\"}}},{\"category\":\"Mn\",\"key\":\"1DE6\",\"mappings\":{\"default\":{\"default\":\"diacritique z\"}}},{\"category\":\"Lm\",\"key\":\"2071\",\"mappings\":{\"default\":{\"default\":\"exposant i\"}}},{\"category\":\"Lm\",\"key\":\"207F\",\"mappings\":{\"default\":{\"default\":\"exposant n\"}}},{\"category\":\"Lm\",\"key\":\"2090\",\"mappings\":{\"default\":{\"default\":\"indice a\"}}},{\"category\":\"Lm\",\"key\":\"2091\",\"mappings\":{\"default\":{\"default\":\"indice e\"}}},{\"category\":\"Lm\",\"key\":\"2092\",\"mappings\":{\"default\":{\"default\":\"indice o\"}}},{\"category\":\"Lm\",\"key\":\"2093\",\"mappings\":{\"default\":{\"default\":\"indice x\"}}},{\"category\":\"Lm\",\"key\":\"2094\",\"mappings\":{\"default\":{\"default\":\"indice schwa\"}}},{\"category\":\"Lm\",\"key\":\"2095\",\"mappings\":{\"default\":{\"default\":\"souscrite h\"}}},{\"category\":\"Lm\",\"key\":\"2096\",\"mappings\":{\"default\":{\"default\":\"souscrite k\"}}},{\"category\":\"Lm\",\"key\":\"2097\",\"mappings\":{\"default\":{\"default\":\"souscrite l\"}}},{\"category\":\"Lm\",\"key\":\"2098\",\"mappings\":{\"default\":{\"default\":\"souscrite m\"}}},{\"category\":\"Lm\",\"key\":\"2099\",\"mappings\":{\"default\":{\"default\":\"souscrite n\"}}},{\"category\":\"Lm\",\"key\":\"209A\",\"mappings\":{\"default\":{\"default\":\"souscrite p\"}}},{\"category\":\"Lm\",\"key\":\"209B\",\"mappings\":{\"default\":{\"default\":\"souscrite s\"}}},{\"category\":\"Lm\",\"key\":\"209C\",\"mappings\":{\"default\":{\"default\":\"souscrite t\"}}},{\"category\":\"Lm\",\"key\":\"2C7C\",\"mappings\":{\"default\":{\"default\":\"j souscrite\"}}},{\"category\":\"So\",\"key\":\"1F12A\",\"mappings\":{\"default\":{\"default\":\"s majuscule en écaille crochetée\"}}},{\"category\":\"So\",\"key\":\"1F12B\",\"mappings\":{\"default\":{\"default\":\"c majuscule en italique cerclée\"}}},{\"category\":\"So\",\"key\":\"1F12C\",\"mappings\":{\"default\":{\"default\":\"r majuscule en italique cerclée\"}}},{\"category\":\"So\",\"key\":\"1F18A\",\"mappings\":{\"default\":{\"default\":\"P majuscule encadrée et en inversion avec croix\"}}}]\n,\n\"fr/symbols/latin-upper-double-accent.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Lu\",\"key\":\"01D5\",\"mappings\":{\"default\":{\"default\":\"U majuscule trémaa et macron\"}}},{\"category\":\"Lu\",\"key\":\"01D7\",\"mappings\":{\"default\":{\"default\":\"U majuscule trémaa et accent aigu\"}}},{\"category\":\"Lu\",\"key\":\"01D9\",\"mappings\":{\"default\":{\"default\":\"U majuscule trémaa et caron\"}}},{\"category\":\"Lu\",\"key\":\"01DB\",\"mappings\":{\"default\":{\"default\":\"U majuscule trémaa et accent grave\"}}},{\"category\":\"Lu\",\"key\":\"01DE\",\"mappings\":{\"default\":{\"default\":\"A majuscule trémaa et macron\"}}},{\"category\":\"Lu\",\"key\":\"01E0\",\"mappings\":{\"default\":{\"default\":\"A majuscule point en chef et macron\"}}},{\"category\":\"Lu\",\"key\":\"01EC\",\"mappings\":{\"default\":{\"default\":\"O majuscule ogonek et macron\"}}},{\"category\":\"Lu\",\"key\":\"01FA\",\"mappings\":{\"default\":{\"default\":\"A majuscule rond en chef et accent aigu\"}}},{\"category\":\"Lu\",\"key\":\"022A\",\"mappings\":{\"default\":{\"default\":\"O majuscule tréma et macron\"}}},{\"category\":\"Lu\",\"key\":\"022C\",\"mappings\":{\"default\":{\"default\":\"O majuscule tilde et macron\"}}},{\"category\":\"Lu\",\"key\":\"0230\",\"mappings\":{\"default\":{\"default\":\"O majuscule point en chef et macron\"}}},{\"key\":\"1E08\",\"mappings\":{\"default\":{\"default\":\"C cédille et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E14\",\"mappings\":{\"default\":{\"default\":\"E macron et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E16\",\"mappings\":{\"default\":{\"default\":\"E macron et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E1C\",\"mappings\":{\"default\":{\"default\":\"E cédille et brève majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E2E\",\"mappings\":{\"default\":{\"default\":\"I tréma et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E38\",\"mappings\":{\"default\":{\"default\":\"L point souscrit et macron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E4C\",\"mappings\":{\"default\":{\"default\":\"O tilde et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E4E\",\"mappings\":{\"default\":{\"default\":\"O tilde et tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E50\",\"mappings\":{\"default\":{\"default\":\"O macron et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E52\",\"mappings\":{\"default\":{\"default\":\"O macron et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E5C\",\"mappings\":{\"default\":{\"default\":\"R point souscrit et macron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E64\",\"mappings\":{\"default\":{\"default\":\"S accent aigu et point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E66\",\"mappings\":{\"default\":{\"default\":\"S caron et point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E68\",\"mappings\":{\"default\":{\"default\":\"S point souscrit et point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E78\",\"mappings\":{\"default\":{\"default\":\"U tilde et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E7A\",\"mappings\":{\"default\":{\"default\":\"U macron et tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EA4\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EA6\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EA8\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe et crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EAA\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe et tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EAC\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe et point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EAE\",\"mappings\":{\"default\":{\"default\":\"A brève et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EB0\",\"mappings\":{\"default\":{\"default\":\"A brève et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EB2\",\"mappings\":{\"default\":{\"default\":\"A brève et crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EB4\",\"mappings\":{\"default\":{\"default\":\"A brève et tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EB6\",\"mappings\":{\"default\":{\"default\":\"A brève et point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EBE\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EC0\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EC2\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe et crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EC4\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe et tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EC6\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe et point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ED0\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ED2\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ED4\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe et crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ED6\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe et tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ED8\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe et point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EDA\",\"mappings\":{\"default\":{\"default\":\"O cornu accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EDC\",\"mappings\":{\"default\":{\"default\":\"O cornu accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EDE\",\"mappings\":{\"default\":{\"default\":\"O cornu crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EE0\",\"mappings\":{\"default\":{\"default\":\"O cornu tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EE2\",\"mappings\":{\"default\":{\"default\":\"O cornu point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EE8\",\"mappings\":{\"default\":{\"default\":\"U cornu accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EEA\",\"mappings\":{\"default\":{\"default\":\"U cornu accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EEC\",\"mappings\":{\"default\":{\"default\":\"U cornu crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EEE\",\"mappings\":{\"default\":{\"default\":\"U cornu tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EF0\",\"mappings\":{\"default\":{\"default\":\"U cornu point souscrit majuscule\"}},\"category\":\"Lu\"}]\n,\n\"fr/symbols/latin-upper-single-accent.js\": \n[{\"locale\":\"fr\"},{\"key\":\"00C0\",\"mappings\":{\"default\":{\"default\":\"A accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C1\",\"mappings\":{\"default\":{\"default\":\"A accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C2\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C3\",\"mappings\":{\"default\":{\"default\":\"A tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C4\",\"mappings\":{\"default\":{\"default\":\"A tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C5\",\"mappings\":{\"default\":{\"default\":\"angstrom\"}},\"category\":\"Lu\"},{\"key\":\"00C7\",\"mappings\":{\"default\":{\"default\":\"C cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C8\",\"mappings\":{\"default\":{\"default\":\"E accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C9\",\"mappings\":{\"default\":{\"default\":\"E accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CA\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CB\",\"mappings\":{\"default\":{\"default\":\"E tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CC\",\"mappings\":{\"default\":{\"default\":\"I accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CD\",\"mappings\":{\"default\":{\"default\":\"I accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CE\",\"mappings\":{\"default\":{\"default\":\"I accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CF\",\"mappings\":{\"default\":{\"default\":\"I tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D1\",\"mappings\":{\"default\":{\"default\":\"N tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D2\",\"mappings\":{\"default\":{\"default\":\"O accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D3\",\"mappings\":{\"default\":{\"default\":\"O accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D4\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D5\",\"mappings\":{\"default\":{\"default\":\"O tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D6\",\"mappings\":{\"default\":{\"default\":\"O tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D9\",\"mappings\":{\"default\":{\"default\":\"U accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00DA\",\"mappings\":{\"default\":{\"default\":\"U accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00DB\",\"mappings\":{\"default\":{\"default\":\"U accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00DC\",\"mappings\":{\"default\":{\"default\":\"U tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00DD\",\"mappings\":{\"default\":{\"default\":\"Y accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0100\",\"mappings\":{\"default\":{\"default\":\"A macron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0102\",\"mappings\":{\"default\":{\"default\":\"A brève majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0104\",\"mappings\":{\"default\":{\"default\":\"A ogonek majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0106\",\"mappings\":{\"default\":{\"default\":\"C accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0108\",\"mappings\":{\"default\":{\"default\":\"C accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"010A\",\"mappings\":{\"default\":{\"default\":\"C point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"010C\",\"mappings\":{\"default\":{\"default\":\"C caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"010E\",\"mappings\":{\"default\":{\"default\":\"D caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0112\",\"mappings\":{\"default\":{\"default\":\"E macron majuscule\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0114\",\"mappings\":{\"default\":{\"default\":\"E brève majuscule\"}}},{\"key\":\"0116\",\"mappings\":{\"default\":{\"default\":\"E point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0118\",\"mappings\":{\"default\":{\"default\":\"E ogonek majuscule\"}},\"category\":\"Lu\"},{\"key\":\"011A\",\"mappings\":{\"default\":{\"default\":\"E caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"011C\",\"mappings\":{\"default\":{\"default\":\"G accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"011E\",\"mappings\":{\"default\":{\"default\":\"G brève majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0120\",\"mappings\":{\"default\":{\"default\":\"G point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0122\",\"mappings\":{\"default\":{\"default\":\"G cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0124\",\"mappings\":{\"default\":{\"default\":\"H accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0128\",\"mappings\":{\"default\":{\"default\":\"I tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"012A\",\"mappings\":{\"default\":{\"default\":\"I macron majuscule\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"012C\",\"mappings\":{\"default\":{\"default\":\"I brève majuscule\"}}},{\"key\":\"012E\",\"mappings\":{\"default\":{\"default\":\"I ogonek majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0130\",\"mappings\":{\"default\":{\"default\":\"I point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0134\",\"mappings\":{\"default\":{\"default\":\"J accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0136\",\"mappings\":{\"default\":{\"default\":\"K cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0139\",\"mappings\":{\"default\":{\"default\":\"L accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"013B\",\"mappings\":{\"default\":{\"default\":\"L cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"013D\",\"mappings\":{\"default\":{\"default\":\"L caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"013F\",\"mappings\":{\"default\":{\"default\":\"L point médian majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0143\",\"mappings\":{\"default\":{\"default\":\"N accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0145\",\"mappings\":{\"default\":{\"default\":\"N cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0147\",\"mappings\":{\"default\":{\"default\":\"N caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"014C\",\"mappings\":{\"default\":{\"default\":\"O macron majuscule\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"014E\",\"mappings\":{\"default\":{\"default\":\"O brève majuscule\"}}},{\"key\":\"0150\",\"mappings\":{\"default\":{\"default\":\"O avec double accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0154\",\"mappings\":{\"default\":{\"default\":\"R accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0156\",\"mappings\":{\"default\":{\"default\":\"R cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0158\",\"mappings\":{\"default\":{\"default\":\"R caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"015A\",\"mappings\":{\"default\":{\"default\":\"S accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"015C\",\"mappings\":{\"default\":{\"default\":\"S accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"015E\",\"mappings\":{\"default\":{\"default\":\"S cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0160\",\"mappings\":{\"default\":{\"default\":\"S caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0162\",\"mappings\":{\"default\":{\"default\":\"T cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0164\",\"mappings\":{\"default\":{\"default\":\"T caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0168\",\"mappings\":{\"default\":{\"default\":\"U tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"016A\",\"mappings\":{\"default\":{\"default\":\"U macron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"016C\",\"mappings\":{\"default\":{\"default\":\"U brève majuscule\"}},\"category\":\"Lu\"},{\"key\":\"016E\",\"mappings\":{\"default\":{\"default\":\"U rond en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0170\",\"mappings\":{\"default\":{\"default\":\"U avec double accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0172\",\"mappings\":{\"default\":{\"default\":\"U ogonek majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0174\",\"mappings\":{\"default\":{\"default\":\"W accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0176\",\"mappings\":{\"default\":{\"default\":\"Y accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0178\",\"mappings\":{\"default\":{\"default\":\"Y tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0179\",\"mappings\":{\"default\":{\"default\":\"Z accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"017B\",\"mappings\":{\"default\":{\"default\":\"Z point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"017D\",\"mappings\":{\"default\":{\"default\":\"Z caron majuscule\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"01CD\",\"mappings\":{\"default\":{\"default\":\"A caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01CF\",\"mappings\":{\"default\":{\"default\":\"I caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01D1\",\"mappings\":{\"default\":{\"default\":\"O caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01D3\",\"mappings\":{\"default\":{\"default\":\"U caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01E6\",\"mappings\":{\"default\":{\"default\":\"G caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01E8\",\"mappings\":{\"default\":{\"default\":\"K caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01EA\",\"mappings\":{\"default\":{\"default\":\"O ogonek majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01F4\",\"mappings\":{\"default\":{\"default\":\"G accent aigu majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01F8\",\"mappings\":{\"default\":{\"default\":\"N grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0200\",\"mappings\":{\"default\":{\"default\":\"A double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0202\",\"mappings\":{\"default\":{\"default\":\"A brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0204\",\"mappings\":{\"default\":{\"default\":\"E double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0206\",\"mappings\":{\"default\":{\"default\":\"E brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0208\",\"mappings\":{\"default\":{\"default\":\"I double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"020A\",\"mappings\":{\"default\":{\"default\":\"I brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"020C\",\"mappings\":{\"default\":{\"default\":\"O double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"020E\",\"mappings\":{\"default\":{\"default\":\"O brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0210\",\"mappings\":{\"default\":{\"default\":\"R double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0212\",\"mappings\":{\"default\":{\"default\":\"R brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0214\",\"mappings\":{\"default\":{\"default\":\"U double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0216\",\"mappings\":{\"default\":{\"default\":\"U brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0218\",\"mappings\":{\"default\":{\"default\":\"S virgule souscrite * majuscule\"}}},{\"category\":\"Lu\",\"key\":\"021A\",\"mappings\":{\"default\":{\"default\":\"T virgule souscrite * majuscule\"}}},{\"category\":\"Lu\",\"key\":\"021E\",\"mappings\":{\"default\":{\"default\":\"H caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0226\",\"mappings\":{\"default\":{\"default\":\"A point en chef majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0228\",\"mappings\":{\"default\":{\"default\":\"E cédille majuscule\"}}},{\"category\":\"Lu\",\"key\":\"022E\",\"mappings\":{\"default\":{\"default\":\"O point en chef majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0232\",\"mappings\":{\"default\":{\"default\":\"Y macron majuscule\"}}},{\"key\":\"1E00\",\"mappings\":{\"default\":{\"default\":\"A à rond souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E02\",\"mappings\":{\"default\":{\"default\":\"B point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E04\",\"mappings\":{\"default\":{\"default\":\"B point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E06\",\"mappings\":{\"default\":{\"default\":\"B ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E0A\",\"mappings\":{\"default\":{\"default\":\"D point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E0C\",\"mappings\":{\"default\":{\"default\":\"D point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E0E\",\"mappings\":{\"default\":{\"default\":\"D ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E10\",\"mappings\":{\"default\":{\"default\":\"D cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E12\",\"mappings\":{\"default\":{\"default\":\"D accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E18\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E1A\",\"mappings\":{\"default\":{\"default\":\"E tilde souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E1E\",\"mappings\":{\"default\":{\"default\":\"F point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E20\",\"mappings\":{\"default\":{\"default\":\"G macron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E22\",\"mappings\":{\"default\":{\"default\":\"H point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E24\",\"mappings\":{\"default\":{\"default\":\"H point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E26\",\"mappings\":{\"default\":{\"default\":\"H tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E28\",\"mappings\":{\"default\":{\"default\":\"H cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E2A\",\"mappings\":{\"default\":{\"default\":\"H brève souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E2C\",\"mappings\":{\"default\":{\"default\":\"I tilde souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E30\",\"mappings\":{\"default\":{\"default\":\"K accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E32\",\"mappings\":{\"default\":{\"default\":\"K point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E34\",\"mappings\":{\"default\":{\"default\":\"K ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E36\",\"mappings\":{\"default\":{\"default\":\"L point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E3A\",\"mappings\":{\"default\":{\"default\":\"L ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E3C\",\"mappings\":{\"default\":{\"default\":\"L accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E3E\",\"mappings\":{\"default\":{\"default\":\"M accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E40\",\"mappings\":{\"default\":{\"default\":\"M point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E42\",\"mappings\":{\"default\":{\"default\":\"M point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E44\",\"mappings\":{\"default\":{\"default\":\"N point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E46\",\"mappings\":{\"default\":{\"default\":\"N point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E48\",\"mappings\":{\"default\":{\"default\":\"N ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E4A\",\"mappings\":{\"default\":{\"default\":\"N accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E54\",\"mappings\":{\"default\":{\"default\":\"P accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E56\",\"mappings\":{\"default\":{\"default\":\"P point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E58\",\"mappings\":{\"default\":{\"default\":\"R point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E5A\",\"mappings\":{\"default\":{\"default\":\"R point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E5E\",\"mappings\":{\"default\":{\"default\":\"R ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E60\",\"mappings\":{\"default\":{\"default\":\"S point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E62\",\"mappings\":{\"default\":{\"default\":\"S point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E6A\",\"mappings\":{\"default\":{\"default\":\"T point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E6C\",\"mappings\":{\"default\":{\"default\":\"T point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E6E\",\"mappings\":{\"default\":{\"default\":\"T ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E70\",\"mappings\":{\"default\":{\"default\":\"T accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E72\",\"mappings\":{\"default\":{\"default\":\"U tréma souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E74\",\"mappings\":{\"default\":{\"default\":\"U tilde souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E76\",\"mappings\":{\"default\":{\"default\":\"U accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E7C\",\"mappings\":{\"default\":{\"default\":\"V tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E7E\",\"mappings\":{\"default\":{\"default\":\"V point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E80\",\"mappings\":{\"default\":{\"default\":\"W accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E82\",\"mappings\":{\"default\":{\"default\":\"W accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E84\",\"mappings\":{\"default\":{\"default\":\"W tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E86\",\"mappings\":{\"default\":{\"default\":\"W point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E88\",\"mappings\":{\"default\":{\"default\":\"W point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E8A\",\"mappings\":{\"default\":{\"default\":\"X point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E8C\",\"mappings\":{\"default\":{\"default\":\"X tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E8E\",\"mappings\":{\"default\":{\"default\":\"Y point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E90\",\"mappings\":{\"default\":{\"default\":\"Z accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E92\",\"mappings\":{\"default\":{\"default\":\"Z point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E94\",\"mappings\":{\"default\":{\"default\":\"Z ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EA0\",\"mappings\":{\"default\":{\"default\":\"A point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EA2\",\"mappings\":{\"default\":{\"default\":\"A crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EB8\",\"mappings\":{\"default\":{\"default\":\"E point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EBA\",\"mappings\":{\"default\":{\"default\":\"E crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EBC\",\"mappings\":{\"default\":{\"default\":\"E tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EC8\",\"mappings\":{\"default\":{\"default\":\"I crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ECA\",\"mappings\":{\"default\":{\"default\":\"I point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ECC\",\"mappings\":{\"default\":{\"default\":\"O point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ECE\",\"mappings\":{\"default\":{\"default\":\"O crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EE4\",\"mappings\":{\"default\":{\"default\":\"U point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EE6\",\"mappings\":{\"default\":{\"default\":\"U crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EF2\",\"mappings\":{\"default\":{\"default\":\"Y accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EF4\",\"mappings\":{\"default\":{\"default\":\"Y point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EF6\",\"mappings\":{\"default\":{\"default\":\"Y crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EF8\",\"mappings\":{\"default\":{\"default\":\"Y tilde majuscule\"}},\"category\":\"Lu\"}]\n,\n\"fr/symbols/math_angles.js\": \n[{\"locale\":\"fr\"},{\"key\":\"22BE\",\"mappings\":{\"default\":{\"default\":\"angle droit avec arc\"}},\"category\":\"Sm\"},{\"key\":\"237C\",\"mappings\":{\"default\":{\"default\":\"angle droit avec flèche en zigzag vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"27C0\",\"mappings\":{\"default\":{\"default\":\"angle tridimensionnel\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"299B\",\"mappings\":{\"default\":{\"default\":\"angle mesuré s'ouvrant vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"299C\",\"mappings\":{\"default\":{\"default\":\"variante d'angle avec carré\"}}},{\"key\":\"299D\",\"mappings\":{\"default\":{\"default\":\"angle droit mesuré pointé\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"299E\",\"mappings\":{\"default\":{\"default\":\"angle avec s inscrit\"}}},{\"category\":\"Sm\",\"key\":\"299F\",\"mappings\":{\"default\":{\"default\":\"angle aigu\"}}},{\"category\":\"Sm\",\"key\":\"29A0\",\"mappings\":{\"default\":{\"default\":\"angle sphérique s'ouvrant vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"29A1\",\"mappings\":{\"default\":{\"default\":\"angle sphérique s'ouvrant vers le haut\"}}},{\"category\":\"Sm\",\"key\":\"29A2\",\"mappings\":{\"default\":{\"default\":\"angle culbuté\"}}},{\"category\":\"Sm\",\"key\":\"29A3\",\"mappings\":{\"default\":{\"default\":\"angle réfléchi\"}}},{\"key\":\"29A4\",\"mappings\":{\"default\":{\"default\":\"angle à barre souscrite\"}},\"category\":\"Sm\"},{\"key\":\"29A5\",\"mappings\":{\"default\":{\"default\":\"angle à barre souscrite réfléchie\"}},\"category\":\"Sm\"},{\"key\":\"29A6\",\"mappings\":{\"default\":{\"default\":\"angle oblique s'ouvrant vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"29A7\",\"mappings\":{\"default\":{\"default\":\"angle oblique s'ouvrant vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"29A8\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers l'est et bras fléché vers le nord est\"}},\"category\":\"Sm\"},{\"key\":\"29A9\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers l'ouest et bras fléché vers le nord ouest\"}},\"category\":\"Sm\"},{\"key\":\"29AA\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers l'est et bras fléché vers le sud est\"}},\"category\":\"Sm\"},{\"key\":\"29AB\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers l'ouest et bras fléché vers le sud ouest\"}},\"category\":\"Sm\"},{\"key\":\"29AC\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers le nord et bras fléché vers le nord est\"}},\"category\":\"Sm\"},{\"key\":\"29AD\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers le nord et bras fléché vers le nord ouest\"}},\"category\":\"Sm\"},{\"key\":\"29AE\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers le sud et bras fléché vers le sud est\"}},\"category\":\"Sm\"},{\"key\":\"29AF\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers le sud et bras fléché vers le sud ouest\"}},\"category\":\"Sm\"}]\n,\n\"fr/symbols/math_arrows.js\": \n[{\"locale\":\"fr\"},{\"key\":\"2190\",\"mappings\":{\"default\":{\"default\":\"flèche gauche\"}},\"category\":\"Sm\"},{\"key\":\"2191\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"2192\",\"mappings\":{\"default\":{\"default\":\"flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"2193\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"2194\",\"mappings\":{\"default\":{\"default\":\"flèche bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"2195\",\"mappings\":{\"default\":{\"default\":\"flèche haut et bas\"}},\"category\":\"So\"},{\"key\":\"2196\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest\"}},\"category\":\"So\"},{\"key\":\"2197\",\"mappings\":{\"default\":{\"default\":\"flèche nord est\"}},\"category\":\"So\"},{\"key\":\"2198\",\"mappings\":{\"default\":{\"default\":\"flèche sud est\"}},\"category\":\"So\"},{\"key\":\"2199\",\"mappings\":{\"default\":{\"default\":\"flèche sud ouest\"}},\"category\":\"So\"},{\"key\":\"219A\",\"mappings\":{\"default\":{\"default\":\"flèche barrée gauche\"}},\"category\":\"Sm\"},{\"key\":\"219B\",\"mappings\":{\"default\":{\"default\":\"flèche barrée droite\"}},\"category\":\"Sm\"},{\"key\":\"219C\",\"mappings\":{\"default\":{\"default\":\"flèche ondulée gauche\"}},\"category\":\"So\"},{\"key\":\"219D\",\"mappings\":{\"default\":{\"default\":\"flèche ondulée droite\"}},\"category\":\"So\"},{\"key\":\"219E\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes gauche\"}},\"category\":\"So\"},{\"key\":\"219F\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers le haut\"}},\"category\":\"So\"},{\"key\":\"21A0\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes droite\"}},\"category\":\"Sm\"},{\"key\":\"21A1\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers le bas\"}},\"category\":\"So\"},{\"key\":\"21A2\",\"mappings\":{\"default\":{\"default\":\"flèche empennée gauche\"}},\"category\":\"So\"},{\"key\":\"21A3\",\"mappings\":{\"default\":{\"default\":\"flèche empennée droite\"}},\"category\":\"Sm\"},{\"key\":\"21A4\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet gauche\"}},\"category\":\"So\"},{\"key\":\"21A5\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet vers le haut\"}},\"category\":\"So\"},{\"key\":\"21A6\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet droite\"}},\"category\":\"Sm\"},{\"key\":\"21A7\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet vers le bas\"}},\"category\":\"So\"},{\"key\":\"21A8\",\"mappings\":{\"default\":{\"default\":\"flèche haut bas sur base\"}},\"category\":\"So\"},{\"key\":\"21A9\",\"mappings\":{\"default\":{\"default\":\"flèche avec crochet gauche\"}},\"category\":\"So\"},{\"key\":\"21AA\",\"mappings\":{\"default\":{\"default\":\"flèche avec crochet droite\"}},\"category\":\"So\"},{\"key\":\"21AB\",\"mappings\":{\"default\":{\"default\":\"flèche avec boucle gauche\"}},\"category\":\"So\"},{\"key\":\"21AC\",\"mappings\":{\"default\":{\"default\":\"flèche avec boucle droite\"}},\"category\":\"So\"},{\"key\":\"21AD\",\"mappings\":{\"default\":{\"default\":\"flèche ondulée bilatérale\"}},\"category\":\"So\"},{\"key\":\"21AE\",\"mappings\":{\"default\":{\"default\":\"flèche barrée bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"21AF\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas en zigzag\"}},\"category\":\"So\"},{\"key\":\"21B0\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut avec pointe gauche\"}},\"category\":\"So\"},{\"key\":\"21B1\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut avec pointe droite\"}},\"category\":\"So\"},{\"key\":\"21B2\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas avec pointe gauche\"}},\"category\":\"So\"},{\"key\":\"21B3\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas avec pointe droite\"}},\"category\":\"So\"},{\"key\":\"21B4\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas avec coin droit\"}},\"category\":\"So\"},{\"key\":\"21B5\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas avec coin gauche\"}},\"category\":\"So\"},{\"key\":\"21B6\",\"mappings\":{\"default\":{\"default\":\"flèche semi circulaire en sens positif\"}},\"category\":\"So\"},{\"key\":\"21B7\",\"mappings\":{\"default\":{\"default\":\"flèche semi circulaire en sens négatif\"}},\"category\":\"So\"},{\"key\":\"21B8\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest vers une barre horizontale longue\"}},\"category\":\"So\"},{\"key\":\"21B9\",\"mappings\":{\"default\":{\"default\":\"flèche gauche vers un taquet sur flèche droite vers un taquet\"}},\"category\":\"So\"},{\"key\":\"21BA\",\"mappings\":{\"default\":{\"default\":\"flèche en sens positif à cercle ouvert\"}},\"category\":\"So\"},{\"key\":\"21BB\",\"mappings\":{\"default\":{\"default\":\"flèche en sens négatif à cercle ouvert\"}},\"category\":\"So\"},{\"key\":\"21C4\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut par dessus flèche gauche\"}},\"category\":\"So\"},{\"key\":\"21C5\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut à gauche d'une flèche vers le bas\"}},\"category\":\"So\"},{\"key\":\"21C6\",\"mappings\":{\"default\":{\"default\":\"flèche gauche par dessus flèche droite\"}},\"category\":\"So\"},{\"key\":\"21C7\",\"mappings\":{\"default\":{\"default\":\"paire de flèches gauche\"}},\"category\":\"So\"},{\"key\":\"21C8\",\"mappings\":{\"default\":{\"default\":\"paire de flèches vers le haut\"}},\"category\":\"So\"},{\"key\":\"21C9\",\"mappings\":{\"default\":{\"default\":\"paire de flèches droite\"}},\"category\":\"So\"},{\"key\":\"21CA\",\"mappings\":{\"default\":{\"default\":\"paire de flèches vers le bas\"}},\"category\":\"So\"},{\"key\":\"21CD\",\"mappings\":{\"default\":{\"default\":\"double flèche barrée gauche\"}},\"category\":\"So\"},{\"key\":\"21CE\",\"mappings\":{\"default\":{\"default\":\"double flèche barrée bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"21CF\",\"mappings\":{\"default\":{\"default\":\"double flèche barrée droite\"}},\"category\":\"Sm\"},{\"key\":\"21D0\",\"mappings\":{\"default\":{\"default\":\"double flèche gauche\"}},\"category\":\"So\"},{\"key\":\"21D1\",\"mappings\":{\"default\":{\"default\":\"double flèche vers le haut\"}},\"category\":\"So\"},{\"key\":\"21D2\",\"mappings\":{\"default\":{\"default\":\"double flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"21D3\",\"mappings\":{\"default\":{\"default\":\"double flèche vers le bas\"}},\"category\":\"So\"},{\"key\":\"21D4\",\"mappings\":{\"default\":{\"default\":\"double flèche bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"21D5\",\"mappings\":{\"default\":{\"default\":\"double flèche haut bas\"}},\"category\":\"So\"},{\"key\":\"21D6\",\"mappings\":{\"default\":{\"default\":\"double flèche nord ouest\"}},\"category\":\"So\"},{\"key\":\"21D7\",\"mappings\":{\"default\":{\"default\":\"double flèche nord est\"}},\"category\":\"So\"},{\"key\":\"21D8\",\"mappings\":{\"default\":{\"default\":\"double flèche sud est\"}},\"category\":\"So\"},{\"key\":\"21D9\",\"mappings\":{\"default\":{\"default\":\"double flèche sud ouest\"}},\"category\":\"So\"},{\"key\":\"21DA\",\"mappings\":{\"default\":{\"default\":\"triple flèche gauche\"}},\"category\":\"So\"},{\"key\":\"21DB\",\"mappings\":{\"default\":{\"default\":\"triple flèche droite\"}},\"category\":\"So\"},{\"key\":\"21DC\",\"mappings\":{\"default\":{\"default\":\"flèche en tire bouchon gauche\"}},\"category\":\"So\"},{\"key\":\"21DD\",\"mappings\":{\"default\":{\"default\":\"flèche en tire bouchon droite\"}},\"category\":\"So\"},{\"key\":\"21DE\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut avec double barre\"}},\"category\":\"So\"},{\"key\":\"21DF\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas avec double barre\"}},\"category\":\"So\"},{\"key\":\"21E0\",\"mappings\":{\"default\":{\"default\":\"flèche pointillée gauche\"}},\"category\":\"So\"},{\"key\":\"21E1\",\"mappings\":{\"default\":{\"default\":\"flèche pointillée vers le haut\"}},\"category\":\"So\"},{\"key\":\"21E2\",\"mappings\":{\"default\":{\"default\":\"flèche pointillée droite\"}},\"category\":\"So\"},{\"key\":\"21E3\",\"mappings\":{\"default\":{\"default\":\"flèche pointillée vers le bas\"}},\"category\":\"So\"},{\"key\":\"21E4\",\"mappings\":{\"default\":{\"default\":\"flèche gauche vers un taquet\"}},\"category\":\"So\"},{\"key\":\"21E5\",\"mappings\":{\"default\":{\"default\":\"flèche droite vers un taquet\"}},\"category\":\"So\"},{\"key\":\"21E6\",\"mappings\":{\"default\":{\"default\":\"flèche blanche gauche\"}},\"category\":\"So\"},{\"key\":\"21E7\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut\"}},\"category\":\"So\"},{\"key\":\"21E8\",\"mappings\":{\"default\":{\"default\":\"flèche blanche droite\"}},\"category\":\"So\"},{\"key\":\"21E9\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le bas\"}},\"category\":\"So\"},{\"key\":\"21EA\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut à partir d'un taquet\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"21EB\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut sur socle\"}}},{\"category\":\"So\",\"key\":\"21EC\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut sur socle et trait horizontal\"}}},{\"category\":\"So\",\"key\":\"21ED\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut sur socle et barre verticale\"}}},{\"category\":\"So\",\"key\":\"21EE\",\"mappings\":{\"default\":{\"default\":\"double flèche blanche vers le haut\"}}},{\"category\":\"So\",\"key\":\"21EF\",\"mappings\":{\"default\":{\"default\":\"double flèche blanche vers le haut sur socle\"}}},{\"category\":\"So\",\"key\":\"21F0\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers la droite appuyée sur mur\"}}},{\"category\":\"So\",\"key\":\"21F1\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest en encoignure\"}}},{\"category\":\"So\",\"key\":\"21F2\",\"mappings\":{\"default\":{\"default\":\"flèche sud est en encoignure\"}}},{\"category\":\"So\",\"key\":\"21F3\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut et le bas\"}}},{\"category\":\"Sm\",\"key\":\"21F4\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à petit cercle\"}}},{\"key\":\"21F5\",\"mappings\":{\"default\":{\"default\":\"flèche descendante à gauche d'une flèche montante\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"21F6\",\"mappings\":{\"default\":{\"default\":\"trois flèches vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"21F7\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"21F8\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"21F9\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite et la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"21FA\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"21FB\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"21FC\",\"mappings\":{\"default\":{\"default\":\"flèche bilatérale barrée deux fois verticalement\"}}},{\"key\":\"21FD\",\"mappings\":{\"default\":{\"default\":\"flèche à tête creuse gauche\"}},\"category\":\"Sm\"},{\"key\":\"21FE\",\"mappings\":{\"default\":{\"default\":\"flèche à tête creuse droite\"}},\"category\":\"Sm\"},{\"key\":\"21FF\",\"mappings\":{\"default\":{\"default\":\"flèche à tête creuse bilatérale\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2301\",\"mappings\":{\"default\":{\"default\":\"flèche électrique\"}}},{\"category\":\"So\",\"key\":\"2303\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche vers le haut\"}}},{\"category\":\"So\",\"key\":\"2304\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche vers le bas\"}}},{\"category\":\"So\",\"key\":\"2324\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche vers le haut entre deux traits horizontaux\"}}},{\"category\":\"So\",\"key\":\"238B\",\"mappings\":{\"default\":{\"default\":\"cercle brisé à flèche nord ouest (échappement)\"}}},{\"category\":\"So\",\"key\":\"2794\",\"mappings\":{\"default\":{\"default\":\"flèche grasse vers la droite à pointe large\"}}},{\"category\":\"So\",\"key\":\"2798\",\"mappings\":{\"default\":{\"default\":\"flèche grasse sud est\"}}},{\"category\":\"So\",\"key\":\"2799\",\"mappings\":{\"default\":{\"default\":\"flèche grasse vers la droite grasse\"}}},{\"category\":\"So\",\"key\":\"279A\",\"mappings\":{\"default\":{\"default\":\"flèche grasse nord est\"}}},{\"category\":\"So\",\"key\":\"279B\",\"mappings\":{\"default\":{\"default\":\"flèche de traçage vers la droite\"}}},{\"category\":\"So\",\"key\":\"279C\",\"mappings\":{\"default\":{\"default\":\"flèche grasse à pointe arrondie vers la droite\"}}},{\"category\":\"So\",\"key\":\"279D\",\"mappings\":{\"default\":{\"default\":\"flèche à pointe en triangle vers la droite\"}}},{\"category\":\"So\",\"key\":\"279E\",\"mappings\":{\"default\":{\"default\":\"flèche grasse à pointe en triangle vers la droite\"}}},{\"category\":\"So\",\"key\":\"279F\",\"mappings\":{\"default\":{\"default\":\"flèche avec pointillés à pointe en triangle vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A0\",\"mappings\":{\"default\":{\"default\":\"flèche grasse avec pointillés à pointe en triangle vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A1\",\"mappings\":{\"default\":{\"default\":\"flèche noire vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A2\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche vers la droite en trompe l'œil éclairée par le haut\"}}},{\"category\":\"So\",\"key\":\"27A3\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche vers la droite en trompe l'œil éclairée par le bas\"}}},{\"category\":\"So\",\"key\":\"27A4\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche noire vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A5\",\"mappings\":{\"default\":{\"default\":\"flèche noire grasse courbée vers le bas et vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A6\",\"mappings\":{\"default\":{\"default\":\"flèche noire courbée vers le haut et vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A7\",\"mappings\":{\"default\":{\"default\":\"flèche noire trapue vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A8\",\"mappings\":{\"default\":{\"default\":\"flèche noire grasse à pointe concave vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A9\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers la droite ombrée à l'avant\"}}},{\"category\":\"So\",\"key\":\"27AA\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers la droite ombrée à l'arrière\"}}},{\"category\":\"So\",\"key\":\"27AB\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers la droite penchée vers l'arrière et ombrée\"}}},{\"category\":\"So\",\"key\":\"27AC\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers la droite penchée vers l'avant et ombrée\"}}},{\"category\":\"So\",\"key\":\"27AD\",\"mappings\":{\"default\":{\"default\":\"flèche blanche grasse vers la droite à ombre inférieure droite\"}}},{\"category\":\"So\",\"key\":\"27AE\",\"mappings\":{\"default\":{\"default\":\"flèche blanche grasse vers la droite à ombre supérieure droite\"}}},{\"category\":\"So\",\"key\":\"27AF\",\"mappings\":{\"default\":{\"default\":\"flèche encochée blanche vers la droite ombrée à l'avant et par dessous\"}}},{\"category\":\"So\",\"key\":\"27B1\",\"mappings\":{\"default\":{\"default\":\"flèche encochée blanche vers la droite ombrée à l'avant et par dessus\"}}},{\"category\":\"So\",\"key\":\"27B2\",\"mappings\":{\"default\":{\"default\":\"flèche blanche grasse vers la droite à contour circulaire\"}}},{\"category\":\"So\",\"key\":\"27B3\",\"mappings\":{\"default\":{\"default\":\"flèche empennée blanche vers la droite\"}}},{\"category\":\"So\",\"key\":\"27B4\",\"mappings\":{\"default\":{\"default\":\"flèche empennée noir sud est\"}}},{\"category\":\"So\",\"key\":\"27B5\",\"mappings\":{\"default\":{\"default\":\"flèche empennée noir vers la droite\"}}},{\"category\":\"So\",\"key\":\"27B6\",\"mappings\":{\"default\":{\"default\":\"flèche empennée noir nord est\"}}},{\"category\":\"So\",\"key\":\"27B7\",\"mappings\":{\"default\":{\"default\":\"flèche empennée gras noire sud est\"}}},{\"category\":\"So\",\"key\":\"27B8\",\"mappings\":{\"default\":{\"default\":\"flèche empennée gras noire vers la droite\"}}},{\"category\":\"So\",\"key\":\"27B9\",\"mappings\":{\"default\":{\"default\":\"flèche empennée gras noire nord est\"}}},{\"category\":\"So\",\"key\":\"27BA\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à pointe larmée\"}}},{\"category\":\"So\",\"key\":\"27BB\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à hampe larmée\"}}},{\"category\":\"So\",\"key\":\"27BC\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à queue en forme de coin\"}}},{\"category\":\"So\",\"key\":\"27BD\",\"mappings\":{\"default\":{\"default\":\"flèche grasse vers la droite à queue en forme de coin\"}}},{\"category\":\"So\",\"key\":\"27BE\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à contour ouvert\"}}},{\"category\":\"Sm\",\"key\":\"27F0\",\"mappings\":{\"default\":{\"default\":\"quadruple flèche vers le haut\"}}},{\"category\":\"Sm\",\"key\":\"27F1\",\"mappings\":{\"default\":{\"default\":\"quadruple flèche vers le bas\"}}},{\"category\":\"Sm\",\"key\":\"27F2\",\"mappings\":{\"default\":{\"default\":\"flèche sens antihoraire entrouverte\"}}},{\"category\":\"Sm\",\"key\":\"27F3\",\"mappings\":{\"default\":{\"default\":\"flèche sens horaire entrouverte\"}}},{\"category\":\"Sm\",\"key\":\"27F4\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à signe plus cerclé\"}}},{\"key\":\"27F5\",\"mappings\":{\"default\":{\"default\":\"longue flèche gauche\"}},\"category\":\"Sm\"},{\"key\":\"27F6\",\"mappings\":{\"default\":{\"default\":\"longue flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"27F7\",\"mappings\":{\"default\":{\"default\":\"longue flèche bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"27F8\",\"mappings\":{\"default\":{\"default\":\"longue double flèche gauche\"}},\"category\":\"Sm\"},{\"key\":\"27F9\",\"mappings\":{\"default\":{\"default\":\"longue double flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"27FA\",\"mappings\":{\"default\":{\"default\":\"longue double flèche bilatérale\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27FB\",\"mappings\":{\"default\":{\"default\":\"longue flèche d'un taquet vers la gauche\"}}},{\"key\":\"27FC\",\"mappings\":{\"default\":{\"default\":\"longue flèche d'un taquet droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27FD\",\"mappings\":{\"default\":{\"default\":\"longue double flèche d'un taquet vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"27FE\",\"mappings\":{\"default\":{\"default\":\"longue double flèche d'un taquet vers la droite\"}}},{\"key\":\"27FF\",\"mappings\":{\"default\":{\"default\":\"longue flèche en tire bouchon droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2900\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers la droite barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2901\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers la droite barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2902\",\"mappings\":{\"default\":{\"default\":\"double flèche vers la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2903\",\"mappings\":{\"default\":{\"default\":\"double flèche vers la droite barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2904\",\"mappings\":{\"default\":{\"default\":\"flèche bilatérale double barrée verticalement\"}}},{\"key\":\"2905\",\"mappings\":{\"default\":{\"default\":\"flèche à deux têtes d'un taquet droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2906\",\"mappings\":{\"default\":{\"default\":\"double flèche d'un taquet vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2907\",\"mappings\":{\"default\":{\"default\":\"double flèche d'un taquet vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"2908\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas barrée horizontalement\"}}},{\"category\":\"Sm\",\"key\":\"2909\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut barrée horizontalement\"}}},{\"category\":\"Sm\",\"key\":\"290A\",\"mappings\":{\"default\":{\"default\":\"triple flèche vers le haut\"}}},{\"category\":\"Sm\",\"key\":\"290B\",\"mappings\":{\"default\":{\"default\":\"triple flèche vers le bas\"}}},{\"key\":\"290C\",\"mappings\":{\"default\":{\"default\":\"flèche à deux traits gauche\"}},\"category\":\"Sm\"},{\"key\":\"290D\",\"mappings\":{\"default\":{\"default\":\"flèche à deux traits droite\"}},\"category\":\"Sm\"},{\"key\":\"290E\",\"mappings\":{\"default\":{\"default\":\"flèche à trois traits gauche\"}},\"category\":\"Sm\"},{\"key\":\"290F\",\"mappings\":{\"default\":{\"default\":\"flèche à trois traits droite\"}},\"category\":\"Sm\"},{\"key\":\"2910\",\"mappings\":{\"default\":{\"default\":\"flèche à trois traits et à deux têtes droite\"}},\"category\":\"Sm\"},{\"key\":\"2911\",\"mappings\":{\"default\":{\"default\":\"flèche à fût pointillé droite\"}},\"category\":\"Sm\"},{\"key\":\"2912\",\"mappings\":{\"default\":{\"default\":\"flèche jusqu'à taquet vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"2913\",\"mappings\":{\"default\":{\"default\":\"flèche jusqu'à taquet vers le bas\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2914\",\"mappings\":{\"default\":{\"default\":\"flèche empennée vers la droite barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2915\",\"mappings\":{\"default\":{\"default\":\"flèche empennée vers la droite barrée deux fois verticalement\"}}},{\"key\":\"2916\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2917\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes vers la droite barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2918\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes vers la droite barrée deux fois verticalement\"}}},{\"key\":\"2919\",\"mappings\":{\"default\":{\"default\":\"empenne gauche\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"291A\",\"mappings\":{\"default\":{\"default\":\"empenne vers la droite\"}}},{\"key\":\"291B\",\"mappings\":{\"default\":{\"default\":\"double empenne gauche\"}},\"category\":\"Sm\"},{\"key\":\"291C\",\"mappings\":{\"default\":{\"default\":\"double empenne droite\"}},\"category\":\"Sm\"},{\"key\":\"291D\",\"mappings\":{\"default\":{\"default\":\"flèche vers un losange noir à gauche\"}},\"category\":\"Sm\"},{\"key\":\"291E\",\"mappings\":{\"default\":{\"default\":\"flèche vers un losange noir à droite\"}},\"category\":\"Sm\"},{\"key\":\"291F\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet vers un losange noir à gauche\"}},\"category\":\"Sm\"},{\"key\":\"2920\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet vers un losange noir à droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2921\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest et sud est\"}}},{\"category\":\"Sm\",\"key\":\"2922\",\"mappings\":{\"default\":{\"default\":\"flèche nord est et sud ouest\"}}},{\"key\":\"2923\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest à crochet\"}},\"category\":\"Sm\"},{\"key\":\"2924\",\"mappings\":{\"default\":{\"default\":\"flèche nord est à crochet\"}},\"category\":\"Sm\"},{\"key\":\"2925\",\"mappings\":{\"default\":{\"default\":\"flèche sud est à crochet\"}},\"category\":\"Sm\"},{\"key\":\"2926\",\"mappings\":{\"default\":{\"default\":\"flèche sud ouest à crochet\"}},\"category\":\"Sm\"},{\"key\":\"2927\",\"mappings\":{\"default\":{\"default\":\"flèches nord ouest et nord est\"}},\"category\":\"Sm\"},{\"key\":\"2928\",\"mappings\":{\"default\":{\"default\":\"flèches nord est et sud est\"}},\"category\":\"Sm\"},{\"key\":\"2929\",\"mappings\":{\"default\":{\"default\":\"flèches sud est et sud ouest\"}},\"category\":\"Sm\"},{\"key\":\"292A\",\"mappings\":{\"default\":{\"default\":\"flèches sud ouest et nord ouest\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"292D\",\"mappings\":{\"default\":{\"default\":\"flèche sud est sur flèche nord est\"}}},{\"category\":\"Sm\",\"key\":\"292E\",\"mappings\":{\"default\":{\"default\":\"flèche nord est sur flèche sud est\"}}},{\"category\":\"Sm\",\"key\":\"292F\",\"mappings\":{\"default\":{\"default\":\"diagonale descendante sur flèche nord est\"}}},{\"category\":\"Sm\",\"key\":\"2930\",\"mappings\":{\"default\":{\"default\":\"diagonale montante sur flèche sud est\"}}},{\"category\":\"Sm\",\"key\":\"2931\",\"mappings\":{\"default\":{\"default\":\"flèche nord est sur flèche nord ouest\"}}},{\"category\":\"Sm\",\"key\":\"2932\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest sur flèche nord est\"}}},{\"key\":\"2933\",\"mappings\":{\"default\":{\"default\":\"flèche bossue droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2934\",\"mappings\":{\"default\":{\"default\":\"flèche courbe vers la droite puis le haut\"}}},{\"key\":\"2935\",\"mappings\":{\"default\":{\"default\":\"flèche courbe vers la droite puis le bas\"}},\"category\":\"Sm\"},{\"key\":\"2936\",\"mappings\":{\"default\":{\"default\":\"flèche courbe vers le bas puis la gauche\"}},\"category\":\"Sm\"},{\"key\":\"2937\",\"mappings\":{\"default\":{\"default\":\"flèche courbe vers le bas puis la droite\"}},\"category\":\"Sm\"},{\"key\":\"2938\",\"mappings\":{\"default\":{\"default\":\"côté droit d'arc fléché sens horaire\"}},\"category\":\"Sm\"},{\"key\":\"2939\",\"mappings\":{\"default\":{\"default\":\"côté gauche d'arc fléché sens antihoraire\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"293A\",\"mappings\":{\"default\":{\"default\":\"arc supérieur fléché sens antihoraire\"}}},{\"category\":\"Sm\",\"key\":\"293B\",\"mappings\":{\"default\":{\"default\":\"arc inférieur fléché sens antihoraire\"}}},{\"key\":\"293C\",\"mappings\":{\"default\":{\"default\":\"arc fléché sens horaire et signe moins souscrit\"}},\"category\":\"Sm\"},{\"key\":\"293D\",\"mappings\":{\"default\":{\"default\":\"arc fléché sens antihoraire et signe plus souscrit\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"293E\",\"mappings\":{\"default\":{\"default\":\"demi cercle fléché inférieur droit sens horaire\"}}},{\"category\":\"Sm\",\"key\":\"293F\",\"mappings\":{\"default\":{\"default\":\"demi cercle fléché inférieur gauche sens antihoraire\"}}},{\"category\":\"Sm\",\"key\":\"2940\",\"mappings\":{\"default\":{\"default\":\"cercle fléché sens antihoraire\"}}},{\"category\":\"Sm\",\"key\":\"2941\",\"mappings\":{\"default\":{\"default\":\"cercle fléché sens horaire\"}}},{\"category\":\"Sm\",\"key\":\"2942\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite surmontant fléchette vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2943\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche surmontant fléchette vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"2944\",\"mappings\":{\"default\":{\"default\":\"fléchette vers la droite surmontant flèche vers la gauche\"}}},{\"key\":\"2945\",\"mappings\":{\"default\":{\"default\":\"flèche droite surmontant signe moins\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2946\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche surmontant signe plus\"}}},{\"category\":\"Sm\",\"key\":\"2947\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite au travers un x\"}}},{\"key\":\"2948\",\"mappings\":{\"default\":{\"default\":\"petit cercle traversé d'une flèche bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"2949\",\"mappings\":{\"default\":{\"default\":\"petit cercle surmonté d'une flèche montante à deux têtes\"}},\"category\":\"Sm\"},{\"key\":\"2970\",\"mappings\":{\"default\":{\"default\":\"flèche en épingle à cheveu droite\"}},\"category\":\"Sm\"},{\"key\":\"2971\",\"mappings\":{\"default\":{\"default\":\"flèche droite surmontée d'un égal\"}},\"category\":\"Sm\"},{\"key\":\"2972\",\"mappings\":{\"default\":{\"default\":\"flèche droite surmontée d'un tilde\"}},\"category\":\"Sm\"},{\"key\":\"2973\",\"mappings\":{\"default\":{\"default\":\"tilde surmonté d'une flèche gauche\"}},\"category\":\"Sm\"},{\"key\":\"2974\",\"mappings\":{\"default\":{\"default\":\"tilde surmonté d'une flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"2975\",\"mappings\":{\"default\":{\"default\":\"presque égal à surmonté d'une flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"2976\",\"mappings\":{\"default\":{\"default\":\"inférieur à surmonté d'une flèche gauche\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2977\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à travers un inférieur à\"}}},{\"key\":\"2978\",\"mappings\":{\"default\":{\"default\":\"flèche droite surmontée d'un supérieur à\"}},\"category\":\"Sm\"},{\"key\":\"2979\",\"mappings\":{\"default\":{\"default\":\"flèche droite surmontée d'un sous ensemble de\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"297A\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche au travers d'un sous ensemble de\"}}},{\"key\":\"297B\",\"mappings\":{\"default\":{\"default\":\"flèche gauche surmontée d'un sur ensemble de\"}},\"category\":\"Sm\"},{\"key\":\"29B3\",\"mappings\":{\"default\":{\"default\":\"ensemble vide flèche droite en chef\"}},\"category\":\"Sm\"},{\"key\":\"29B4\",\"mappings\":{\"default\":{\"default\":\"ensemble vide flèche gauche en chef\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29BD\",\"mappings\":{\"default\":{\"default\":\"cercle traversé d'une flèche montante\"}}},{\"category\":\"Sm\",\"key\":\"29EA\",\"mappings\":{\"default\":{\"default\":\"losange noir à flèche vers le bas\"}}},{\"category\":\"Sm\",\"key\":\"29EC\",\"mappings\":{\"default\":{\"default\":\"cercle blanc à flèche vers le bas\"}}},{\"category\":\"Sm\",\"key\":\"29ED\",\"mappings\":{\"default\":{\"default\":\"cercle noir à flèche vers le bas\"}}},{\"key\":\"2A17\",\"mappings\":{\"default\":{\"default\":\"intégrale à crosse fléchée gauche\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2B00\",\"mappings\":{\"default\":{\"default\":\"flèche blanche nord est\"}}},{\"category\":\"So\",\"key\":\"2B01\",\"mappings\":{\"default\":{\"default\":\"flèche blanche nord ouest\"}}},{\"category\":\"So\",\"key\":\"2B02\",\"mappings\":{\"default\":{\"default\":\"flèche blanche sud est\"}}},{\"category\":\"So\",\"key\":\"2B03\",\"mappings\":{\"default\":{\"default\":\"flèche blanche sud ouest\"}}},{\"category\":\"So\",\"key\":\"2B04\",\"mappings\":{\"default\":{\"default\":\"flèche blanche bilatérale\"}}},{\"category\":\"So\",\"key\":\"2B05\",\"mappings\":{\"default\":{\"default\":\"flèche noire vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2B06\",\"mappings\":{\"default\":{\"default\":\"flèche noire vers le haut\"}}},{\"category\":\"So\",\"key\":\"2B07\",\"mappings\":{\"default\":{\"default\":\"flèche noire vers le bas\"}}},{\"category\":\"So\",\"key\":\"2B08\",\"mappings\":{\"default\":{\"default\":\"flèche noire nord est\"}}},{\"category\":\"So\",\"key\":\"2B09\",\"mappings\":{\"default\":{\"default\":\"flèche noire nord ouest\"}}},{\"category\":\"So\",\"key\":\"2B0A\",\"mappings\":{\"default\":{\"default\":\"flèche noire sud est\"}}},{\"category\":\"So\",\"key\":\"2B0B\",\"mappings\":{\"default\":{\"default\":\"flèche noire sud ouest\"}}},{\"category\":\"So\",\"key\":\"2B0C\",\"mappings\":{\"default\":{\"default\":\"flèche noire bilatérale\"}}},{\"category\":\"So\",\"key\":\"2B0D\",\"mappings\":{\"default\":{\"default\":\"flèche noire haut et bas\"}}},{\"category\":\"So\",\"key\":\"2B0E\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à pointe pliée vers le bas\"}}},{\"category\":\"So\",\"key\":\"2B0F\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à pointe pliée vers le haut\"}}},{\"category\":\"So\",\"key\":\"2B10\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à pointe pliée vers le bas\"}}},{\"category\":\"So\",\"key\":\"2B11\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à pointe pliée vers le haut\"}}},{\"category\":\"Sm\",\"key\":\"2B30\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à petit cercle\"}}},{\"category\":\"Sm\",\"key\":\"2B31\",\"mappings\":{\"default\":{\"default\":\"trois flèches vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B32\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à signe plus cerclé\"}}},{\"category\":\"Sm\",\"key\":\"2B33\",\"mappings\":{\"default\":{\"default\":\"longue flèche vers la gauche en tire bouchon\"}}},{\"category\":\"Sm\",\"key\":\"2B34\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B35\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers la gauche barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B36\",\"mappings\":{\"default\":{\"default\":\"flèche à deux têtes d'un taquet vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B37\",\"mappings\":{\"default\":{\"default\":\"flèche à trois traits et à deux têtes vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B38\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à fût pointillé\"}}},{\"category\":\"Sm\",\"key\":\"2B39\",\"mappings\":{\"default\":{\"default\":\"flèche empennée vers la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B3A\",\"mappings\":{\"default\":{\"default\":\"flèche empennée vers la gauche barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B3B\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B3C\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes vers la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B3D\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes vers la gauche barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B3E\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche au travers un x\"}}},{\"category\":\"Sm\",\"key\":\"2B3F\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche bossue\"}}},{\"category\":\"Sm\",\"key\":\"2B40\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche surmontée d'un égal\"}}},{\"category\":\"Sm\",\"key\":\"2B41\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche surmontée d'un tilde\"}}},{\"category\":\"Sm\",\"key\":\"2B42\",\"mappings\":{\"default\":{\"default\":\"presque égal à réfléchi surmonté d'une flèche vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B43\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à travers un inférieur à\"}}},{\"category\":\"Sm\",\"key\":\"2B44\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite au travers d'un sous ensemble de\"}}},{\"category\":\"So\",\"key\":\"2B45\",\"mappings\":{\"default\":{\"default\":\"quadruple flèche vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2B46\",\"mappings\":{\"default\":{\"default\":\"quadruple flèche vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"2B47\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite surmontée d'un opérateur tilde réfléchi\"}}},{\"category\":\"Sm\",\"key\":\"2B48\",\"mappings\":{\"default\":{\"default\":\"presque égal à réfléchi surmonté d'une flèche vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"2B49\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche surmontée de l'opérateur tilde\"}}},{\"category\":\"Sm\",\"key\":\"2B4A\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche par dessus presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2B4B\",\"mappings\":{\"default\":{\"default\":\"tilde réfléchi surmonté d'une flèche vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B4C\",\"mappings\":{\"default\":{\"default\":\"ilde surmonté d'une flèche vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"FFE9\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche demi chasse\"}}},{\"category\":\"Sm\",\"key\":\"FFEA\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut demi chasse\"}}},{\"category\":\"Sm\",\"key\":\"FFEB\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite demi chasse\"}}},{\"category\":\"Sm\",\"key\":\"FFEC\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas demi chasse\"}}}]\n,\n\"fr/symbols/math_characters.js\": \n[{\"locale\":\"fr\"},{\"key\":\"2113\",\"mappings\":{\"default\":{\"default\":\"l minuscule en script\"}},\"category\":\"Ll\"},{\"key\":\"2118\",\"mappings\":{\"default\":{\"default\":\"fonction elliptique de weierstrass\"}},\"category\":\"Sm\"},{\"category\":\"Ll\",\"key\":\"213C\",\"mappings\":{\"default\":{\"default\":\"pi ajouré\"}}},{\"category\":\"Ll\",\"key\":\"213D\",\"mappings\":{\"default\":{\"default\":\"gamma ajouré\"}}},{\"category\":\"Lu\",\"key\":\"213E\",\"mappings\":{\"default\":{\"default\":\"Gamma majuscule ajouré\"}}},{\"category\":\"Lu\",\"key\":\"213F\",\"mappings\":{\"default\":{\"default\":\"Pi majuscule ajouré\"}}},{\"category\":\"Sm\",\"key\":\"2140\",\"mappings\":{\"default\":{\"default\":\"sommation de la famille ajouré\"}}},{\"key\":\"2145\",\"mappings\":{\"default\":{\"default\":\"D majuscule\"}},\"category\":\"Lu\"},{\"key\":\"2146\",\"mappings\":{\"default\":{\"default\":\"d ajouré en italique\"}},\"category\":\"Ll\"},{\"key\":\"2147\",\"mappings\":{\"default\":{\"default\":\"e ajouré en italique\"}},\"category\":\"Ll\"},{\"key\":\"2148\",\"mappings\":{\"default\":{\"default\":\"i ajouré en italique\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"2149\",\"mappings\":{\"default\":{\"default\":\"j ajouré en italique\"}}},{\"key\":\"1D6A4\",\"mappings\":{\"default\":{\"default\":\"dotless i\"}},\"category\":\"Ll\"},{\"key\":\"1D6A5\",\"mappings\":{\"default\":{\"default\":\"dotless j\"}},\"category\":\"Ll\"}]\n,\n\"fr/symbols/math_delimiters.js\": \n[{\"locale\":\"fr\"},{\"key\":\"0028\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche\",\"alternative\":\"parenthèse ouvrante\"}},\"category\":\"Ps\"},{\"key\":\"0029\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite\",\"alternative\":\"parenthèse fermante\"}},\"category\":\"Pe\"},{\"key\":\"005B\",\"mappings\":{\"default\":{\"default\":\"crochet gauche\",\"alternative\":\"crochet ouvrant\"}},\"category\":\"Ps\"},{\"key\":\"005D\",\"mappings\":{\"default\":{\"default\":\"crochet droit\",\"alternative\":\"crochet fermant\"}},\"category\":\"Pe\"},{\"key\":\"007B\",\"mappings\":{\"default\":{\"default\":\"accolade gauche\",\"alternative\":\"accolade ouvrante\"}},\"category\":\"Ps\"},{\"key\":\"007D\",\"mappings\":{\"default\":{\"default\":\"accolade droite\",\"alternative\":\"accolade fermante\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2045\",\"mappings\":{\"default\":{\"default\":\"crochet gauche avec pique\"}}},{\"category\":\"Pe\",\"key\":\"2046\",\"mappings\":{\"default\":{\"default\":\"crochet droit avec pique\"}}},{\"key\":\"2308\",\"mappings\":{\"default\":{\"default\":\"plafond à gauche\"}},\"category\":\"Sm\"},{\"key\":\"2309\",\"mappings\":{\"default\":{\"default\":\"plafond à droite\"}},\"category\":\"Sm\"},{\"key\":\"230A\",\"mappings\":{\"default\":{\"default\":\"plancher à gauche\"}},\"category\":\"Sm\"},{\"key\":\"230B\",\"mappings\":{\"default\":{\"default\":\"plancher à droite\"}},\"category\":\"Sm\"},{\"key\":\"230C\",\"mappings\":{\"default\":{\"default\":\"repère sud est\"}},\"category\":\"So\"},{\"key\":\"230D\",\"mappings\":{\"default\":{\"default\":\"repère sud ouest\"}},\"category\":\"So\"},{\"key\":\"230E\",\"mappings\":{\"default\":{\"default\":\"repère nord est\"}},\"category\":\"So\"},{\"key\":\"230F\",\"mappings\":{\"default\":{\"default\":\"repère nord ouest\"}},\"category\":\"So\"},{\"key\":\"231C\",\"mappings\":{\"default\":{\"default\":\"coin nord ouest\"}},\"category\":\"So\"},{\"key\":\"231D\",\"mappings\":{\"default\":{\"default\":\"coin nord est\"}},\"category\":\"So\"},{\"key\":\"231E\",\"mappings\":{\"default\":{\"default\":\"coin sud ouest\"}},\"category\":\"So\"},{\"key\":\"231F\",\"mappings\":{\"default\":{\"default\":\"coin sud est\"}},\"category\":\"So\"},{\"key\":\"2320\",\"mappings\":{\"default\":{\"default\":\"moitié supérieure d'intégrale\"}},\"category\":\"Sm\"},{\"key\":\"2321\",\"mappings\":{\"default\":{\"default\":\"moitié inférieure d'intégrale\"}},\"category\":\"Sm\"},{\"key\":\"2329\",\"mappings\":{\"default\":{\"default\":\"chevron gauche\"}},\"category\":\"Ps\"},{\"key\":\"232A\",\"mappings\":{\"default\":{\"default\":\"chevron droite\"}},\"category\":\"Pe\"},{\"category\":\"Sm\",\"key\":\"239B\",\"mappings\":{\"default\":{\"default\":\"arc supérieur de parenthèse gauche\"}}},{\"category\":\"Sm\",\"key\":\"239C\",\"mappings\":{\"default\":{\"default\":\"rallonge de parenthèse gauche\"}}},{\"category\":\"Sm\",\"key\":\"239D\",\"mappings\":{\"default\":{\"default\":\"arc inférieur de parenthèse gauche\"}}},{\"category\":\"Sm\",\"key\":\"239E\",\"mappings\":{\"default\":{\"default\":\"arc supérieur de parenthèse droite\"}}},{\"category\":\"Sm\",\"key\":\"239F\",\"mappings\":{\"default\":{\"default\":\"rallonge de parenthèse droite\"}}},{\"category\":\"Sm\",\"key\":\"23A0\",\"mappings\":{\"default\":{\"default\":\"arc inférieur de parenthèse droite\"}}},{\"category\":\"Sm\",\"key\":\"23A1\",\"mappings\":{\"default\":{\"default\":\"coin supérieur de crochet gauche\"}}},{\"category\":\"Sm\",\"key\":\"23A2\",\"mappings\":{\"default\":{\"default\":\"rallonge de crochet gauche\"}}},{\"category\":\"Sm\",\"key\":\"23A3\",\"mappings\":{\"default\":{\"default\":\"coin inférieur de crochet gauche\"}}},{\"category\":\"Sm\",\"key\":\"23A4\",\"mappings\":{\"default\":{\"default\":\"coin supérieur de crochet droit\"}}},{\"category\":\"Sm\",\"key\":\"23A5\",\"mappings\":{\"default\":{\"default\":\"rallonge de crochet droit\"}}},{\"category\":\"Sm\",\"key\":\"23A6\",\"mappings\":{\"default\":{\"default\":\"coin inférieur de crochet droit\"}}},{\"category\":\"Sm\",\"key\":\"23A7\",\"mappings\":{\"default\":{\"default\":\"arc supérieur d'accolade gauche\"}}},{\"category\":\"Sm\",\"key\":\"23A8\",\"mappings\":{\"default\":{\"default\":\"milieu d'accolade gauche\"}}},{\"category\":\"Sm\",\"key\":\"23A9\",\"mappings\":{\"default\":{\"default\":\"arc inférieur d'accolade gauche\"}}},{\"category\":\"Sm\",\"key\":\"23AA\",\"mappings\":{\"default\":{\"default\":\"rallonge d'accolade\"}}},{\"category\":\"Sm\",\"key\":\"23AB\",\"mappings\":{\"default\":{\"default\":\"arc supérieur d'accolade droite\"}}},{\"category\":\"Sm\",\"key\":\"23AC\",\"mappings\":{\"default\":{\"default\":\"milieu d'accolade droite\"}}},{\"category\":\"Sm\",\"key\":\"23AD\",\"mappings\":{\"default\":{\"default\":\"arc inférieur d'accolade droite\"}}},{\"category\":\"Sm\",\"key\":\"23AE\",\"mappings\":{\"default\":{\"default\":\"rallonge d'intégrale\"}}},{\"category\":\"Sm\",\"key\":\"23AF\",\"mappings\":{\"default\":{\"default\":\"rallonge de ligne horizontale\"}}},{\"key\":\"23B0\",\"mappings\":{\"default\":{\"default\":\"moitié supérieure gauche ou inférieure droite d'accolade\"}},\"category\":\"Sm\"},{\"key\":\"23B1\",\"mappings\":{\"default\":{\"default\":\"moitié supérieure droite ou inférieure gauche d'accolade\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"23B2\",\"mappings\":{\"default\":{\"default\":\"haut du signe de somme\"}}},{\"category\":\"Sm\",\"key\":\"23B3\",\"mappings\":{\"default\":{\"default\":\"bas du signe de somme\"}}},{\"key\":\"23B4\",\"mappings\":{\"default\":{\"default\":\"crochet vertical supérieur\"}},\"category\":\"So\"},{\"key\":\"23B5\",\"mappings\":{\"default\":{\"default\":\"crochet vertical inférieur\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"23B6\",\"mappings\":{\"default\":{\"default\":\"crochet verticaux en défilé\"}}},{\"category\":\"So\",\"key\":\"23B7\",\"mappings\":{\"default\":{\"default\":\"bas du radical\"}}},{\"category\":\"So\",\"key\":\"23B8\",\"mappings\":{\"default\":{\"default\":\"filet vertical gauche\"}}},{\"category\":\"So\",\"key\":\"23B9\",\"mappings\":{\"default\":{\"default\":\"filet vertical droit\"}}},{\"key\":\"23DC\",\"mappings\":{\"default\":{\"default\":\"parenthèse supérieure\"}},\"category\":\"Sm\"},{\"key\":\"23DD\",\"mappings\":{\"default\":{\"default\":\"parenthèse inférieure\"}},\"category\":\"Sm\"},{\"key\":\"23DE\",\"mappings\":{\"default\":{\"default\":\"accolade supérieure\"}},\"category\":\"Sm\"},{\"key\":\"23DF\",\"mappings\":{\"default\":{\"default\":\"accolade inférieure\"}},\"category\":\"Sm\"},{\"key\":\"23E0\",\"mappings\":{\"default\":{\"default\":\"crochet en écaille supérieur\"}},\"category\":\"Sm\"},{\"key\":\"23E1\",\"mappings\":{\"default\":{\"default\":\"crochet en écaille inférieur\"}},\"category\":\"Sm\"},{\"category\":\"Ps\",\"key\":\"2768\",\"mappings\":{\"default\":{\"default\":\"parenthèse de fantaisie gauche demi grasse\"}}},{\"category\":\"Pe\",\"key\":\"2769\",\"mappings\":{\"default\":{\"default\":\"parenthèse de fantaisie droite demi grasse\"}}},{\"category\":\"Ps\",\"key\":\"276A\",\"mappings\":{\"default\":{\"default\":\"parenthèse de fantaisie gauche demi grasse aplatie\"}}},{\"category\":\"Pe\",\"key\":\"276B\",\"mappings\":{\"default\":{\"default\":\"parenthèse de fantaisie droite demi grasse aplatie\"}}},{\"category\":\"Ps\",\"key\":\"276C\",\"mappings\":{\"default\":{\"default\":\"chevron de fantaisie vers la gauche demi gras\"}}},{\"category\":\"Pe\",\"key\":\"276D\",\"mappings\":{\"default\":{\"default\":\"chevron de fantaisie vers la droite demi gras\"}}},{\"category\":\"Ps\",\"key\":\"276E\",\"mappings\":{\"default\":{\"default\":\"guillemet de fantaisie vers la gauche gras\"}}},{\"category\":\"Pe\",\"key\":\"276F\",\"mappings\":{\"default\":{\"default\":\"guillemet de fantaisie vers la droite gras\"}}},{\"category\":\"Ps\",\"key\":\"2770\",\"mappings\":{\"default\":{\"default\":\"crochet de fantaisie vers la gauche gras\"}}},{\"category\":\"Pe\",\"key\":\"2771\",\"mappings\":{\"default\":{\"default\":\"crochet de fantaisie vers la droite gras\"}}},{\"category\":\"Ps\",\"key\":\"2772\",\"mappings\":{\"default\":{\"default\":\"crochet de fantaisie gauche maigre en écaille\"}}},{\"category\":\"Pe\",\"key\":\"2773\",\"mappings\":{\"default\":{\"default\":\"crochet de fantaisie droit maigre en écaille\"}}},{\"category\":\"Ps\",\"key\":\"2774\",\"mappings\":{\"default\":{\"default\":\"accolade de fantaisie gauche moyenne\"}}},{\"category\":\"Pe\",\"key\":\"2775\",\"mappings\":{\"default\":{\"default\":\"accolade de fantaisie droite moyenne\"}}},{\"key\":\"27C5\",\"mappings\":{\"default\":{\"default\":\"délimiteur de sac en s gauche\"}},\"category\":\"Ps\"},{\"key\":\"27C6\",\"mappings\":{\"default\":{\"default\":\"délimiteur de sac en s droite\"}},\"category\":\"Pe\"},{\"key\":\"27E6\",\"mappings\":{\"default\":{\"default\":\"crochet blanc gauche\"}},\"category\":\"Ps\"},{\"key\":\"27E7\",\"mappings\":{\"default\":{\"default\":\"crochet blanc droit\"}},\"category\":\"Pe\"},{\"key\":\"27E8\",\"mappings\":{\"default\":{\"default\":\"chevron mathématique gauche\"}},\"category\":\"Ps\"},{\"key\":\"27E9\",\"mappings\":{\"default\":{\"default\":\"chevron droit\"}},\"category\":\"Pe\"},{\"key\":\"27EA\",\"mappings\":{\"default\":{\"default\":\"double chevron gauche\"}},\"category\":\"Ps\"},{\"key\":\"27EB\",\"mappings\":{\"default\":{\"default\":\"double chevron droit\"}},\"category\":\"Pe\"},{\"key\":\"27EC\",\"mappings\":{\"default\":{\"default\":\"crochet gauche en écaille blanche\"}},\"category\":\"Ps\"},{\"key\":\"27ED\",\"mappings\":{\"default\":{\"default\":\"crochet droit en écaille blanche\"}},\"category\":\"Pe\"},{\"key\":\"27EE\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche aplatie\"}},\"category\":\"Ps\"},{\"key\":\"27EF\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite aplatie\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2983\",\"mappings\":{\"default\":{\"default\":\"accolade gauche ajourée\"}}},{\"category\":\"Pe\",\"key\":\"2984\",\"mappings\":{\"default\":{\"default\":\"accolade droite ajourée\"}}},{\"key\":\"2985\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche ajourée\"}},\"category\":\"Ps\"},{\"key\":\"2986\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite ajourée\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2987\",\"mappings\":{\"default\":{\"default\":\"parenthèse image de gauche en notation z\"}}},{\"category\":\"Pe\",\"key\":\"2988\",\"mappings\":{\"default\":{\"default\":\"parenthèse image de droite en notation z\"}}},{\"key\":\"2989\",\"mappings\":{\"default\":{\"default\":\"z notation left binding bracket\"}},\"category\":\"Ps\"},{\"key\":\"298A\",\"mappings\":{\"default\":{\"default\":\"z notation right binding bracket\"}},\"category\":\"Pe\"},{\"key\":\"298B\",\"mappings\":{\"default\":{\"default\":\"crochet gauche avec barre souscrite\"}},\"category\":\"Ps\"},{\"key\":\"298C\",\"mappings\":{\"default\":{\"default\":\"crochet droit avec barre souscrite\"}},\"category\":\"Pe\"},{\"key\":\"298D\",\"mappings\":{\"default\":{\"default\":\"crochet gauche avec trait dans le coin supérieur\"}},\"category\":\"Ps\"},{\"key\":\"298E\",\"mappings\":{\"default\":{\"default\":\"crochet droit avec trait dans le coin inférieur\"}},\"category\":\"Pe\"},{\"key\":\"298F\",\"mappings\":{\"default\":{\"default\":\"crochet gauche avec trait dans le coin inférieur\"}},\"category\":\"Ps\"},{\"key\":\"2990\",\"mappings\":{\"default\":{\"default\":\"crochet droit avec trait dans le coin supérieur\"}},\"category\":\"Pe\"},{\"key\":\"2991\",\"mappings\":{\"default\":{\"default\":\"chevron gauche pointé\"}},\"category\":\"Ps\"},{\"key\":\"2992\",\"mappings\":{\"default\":{\"default\":\"chevron droit pointé\"}},\"category\":\"Pe\"},{\"key\":\"2993\",\"mappings\":{\"default\":{\"default\":\"parenthèse arc gauche et inférieur à\"}},\"category\":\"Ps\"},{\"key\":\"2994\",\"mappings\":{\"default\":{\"default\":\"parenthèse arc droite et supérieur à\"}},\"category\":\"Pe\"},{\"key\":\"2995\",\"mappings\":{\"default\":{\"default\":\"parenthèse double arc droite et supérieur à\"}},\"category\":\"Ps\"},{\"key\":\"2996\",\"mappings\":{\"default\":{\"default\":\"parenthèse double arc gauche et inférieur à\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2997\",\"mappings\":{\"default\":{\"default\":\"crochet noir gauche en écaille\"}}},{\"category\":\"Pe\",\"key\":\"2998\",\"mappings\":{\"default\":{\"default\":\"crochet noir droite en écaille\"}}},{\"category\":\"Ps\",\"key\":\"29D8\",\"mappings\":{\"default\":{\"default\":\"clôture dentelée gauche\"}}},{\"category\":\"Pe\",\"key\":\"29D9\",\"mappings\":{\"default\":{\"default\":\"clôture dentelée droite\"}}},{\"key\":\"29DA\",\"mappings\":{\"default\":{\"default\":\"double clôture dentelée gauche\"}},\"category\":\"Ps\"},{\"key\":\"29DB\",\"mappings\":{\"default\":{\"default\":\"right double wiggly fence\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"29FC\",\"mappings\":{\"default\":{\"default\":\"chevron vers la gauche courbé\"}}},{\"category\":\"Pe\",\"key\":\"29FD\",\"mappings\":{\"default\":{\"default\":\"chevron vers la droite courbé\"}}},{\"category\":\"Ps\",\"key\":\"2E22\",\"mappings\":{\"default\":{\"default\":\"anglet supérieur gauche\"}}},{\"category\":\"Pe\",\"key\":\"2E23\",\"mappings\":{\"default\":{\"default\":\"anglet supérieur droit\"}}},{\"category\":\"Ps\",\"key\":\"2E24\",\"mappings\":{\"default\":{\"default\":\"anglet inférieur gauche\"}}},{\"category\":\"Pe\",\"key\":\"2E25\",\"mappings\":{\"default\":{\"default\":\"anglet inférieur droit\"}}},{\"category\":\"Ps\",\"key\":\"2E26\",\"mappings\":{\"default\":{\"default\":\"crampillon couché gauche\"}}},{\"category\":\"Pe\",\"key\":\"2E27\",\"mappings\":{\"default\":{\"default\":\"crampillon couché droit\"}}},{\"category\":\"Ps\",\"key\":\"2E28\",\"mappings\":{\"default\":{\"default\":\"double parenthèse gauche\"}}},{\"category\":\"Pe\",\"key\":\"2E29\",\"mappings\":{\"default\":{\"default\":\"double parenthèse droite\"}}},{\"category\":\"Ps\",\"key\":\"3008\",\"mappings\":{\"default\":{\"default\":\"chevron gauche\"}}},{\"category\":\"Pe\",\"key\":\"3009\",\"mappings\":{\"default\":{\"default\":\"chevron droit\"}}},{\"key\":\"300A\",\"mappings\":{\"default\":{\"default\":\"double chevron gauche\"}},\"category\":\"Ps\"},{\"key\":\"300B\",\"mappings\":{\"default\":{\"default\":\"double chevron droit\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"300C\",\"mappings\":{\"default\":{\"default\":\"anglet gauche\"}}},{\"category\":\"Pe\",\"key\":\"300D\",\"mappings\":{\"default\":{\"default\":\"anglet droit\"}}},{\"category\":\"Ps\",\"key\":\"300E\",\"mappings\":{\"default\":{\"default\":\"anglet ajouré gauche\"}}},{\"category\":\"Pe\",\"key\":\"300F\",\"mappings\":{\"default\":{\"default\":\"anglet ajouré droit\"}}},{\"category\":\"Ps\",\"key\":\"3010\",\"mappings\":{\"default\":{\"default\":\"crochet noir lenticulaire gauche\"}}},{\"category\":\"Pe\",\"key\":\"3011\",\"mappings\":{\"default\":{\"default\":\"crochet noir lenticulaire droit\"}}},{\"key\":\"3014\",\"mappings\":{\"default\":{\"default\":\"crochet gauche en écaille\"}},\"category\":\"Ps\"},{\"key\":\"3015\",\"mappings\":{\"default\":{\"default\":\"crochet droit en écaille\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"3016\",\"mappings\":{\"default\":{\"default\":\"crochet blanc lenticulaire gauche\"}}},{\"category\":\"Pe\",\"key\":\"3017\",\"mappings\":{\"default\":{\"default\":\"crochet blanc lenticulaire droit\"}}},{\"category\":\"Ps\",\"key\":\"3018\",\"mappings\":{\"default\":{\"default\":\"crochet blanc gauche en écaille\"}}},{\"category\":\"Pe\",\"key\":\"3019\",\"mappings\":{\"default\":{\"default\":\"crochet blanc droit en écaille\"}}},{\"key\":\"301A\",\"mappings\":{\"default\":{\"default\":\"crochet blanc gauche\"}},\"category\":\"Ps\"},{\"key\":\"301B\",\"mappings\":{\"default\":{\"default\":\"crochet blanc droit\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"301D\",\"mappings\":{\"default\":{\"default\":\"guillemet double prime réfléchi\"}}},{\"key\":\"301E\",\"mappings\":{\"default\":{\"default\":\"guillemet double prime\"}},\"category\":\"Pe\"},{\"category\":\"Pe\",\"key\":\"301F\",\"mappings\":{\"default\":{\"default\":\"guillemet double prime inférieur\"}}},{\"category\":\"Ps\",\"key\":\"FD3E\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche ornée\"}}},{\"category\":\"Pe\",\"key\":\"FD3F\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite ornée\"}}},{\"category\":\"Ps\",\"key\":\"FE17\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet blanc lenticulaire gauche vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE18\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet blanc lenticulaire droit vertical\"}}},{\"key\":\"FE35\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de parenthèse gauche verticale\"}},\"category\":\"Ps\"},{\"key\":\"FE36\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de parenthèse droite verticale\"}},\"category\":\"Pe\"},{\"key\":\"FE37\",\"mappings\":{\"default\":{\"default\":\"forme de présentation d'accolade gauche verticale\"}},\"category\":\"Ps\"},{\"key\":\"FE38\",\"mappings\":{\"default\":{\"default\":\"forme de présentation d'accolade droite verticale\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"FE39\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet gauche vertical en écaille\"}}},{\"category\":\"Pe\",\"key\":\"FE3A\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet droit vertical en écaille\"}}},{\"category\":\"Ps\",\"key\":\"FE3B\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet gauche lenticulaire noir vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE3C\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet droit lenticulaire noir vertical\"}}},{\"category\":\"Ps\",\"key\":\"FE3D\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet double gauche vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE3E\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet double droit vertical\"}}},{\"key\":\"FE3F\",\"mappings\":{\"default\":{\"default\":\"over angle bracket\"}},\"category\":\"Ps\"},{\"key\":\"FE40\",\"mappings\":{\"default\":{\"default\":\"under angle bracket\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"FE41\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet vertical gauche en coin\"}}},{\"category\":\"Pe\",\"key\":\"FE42\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet vertical droit en coin\"}}},{\"category\":\"Ps\",\"key\":\"FE43\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet blanc vertical gauche en coin\"}}},{\"category\":\"Pe\",\"key\":\"FE44\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet blanc vertical droit en coin\"}}},{\"category\":\"Ps\",\"key\":\"FE47\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet gauche vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE48\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet droit vertical\"}}},{\"category\":\"Ps\",\"key\":\"FE59\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche minuscule\"}}},{\"category\":\"Pe\",\"key\":\"FE5A\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite minuscule\"}}},{\"category\":\"Ps\",\"key\":\"FE5B\",\"mappings\":{\"default\":{\"default\":\"accolade gauche minuscule\"}}},{\"category\":\"Pe\",\"key\":\"FE5C\",\"mappings\":{\"default\":{\"default\":\"accolade droite minuscule\"}}},{\"category\":\"Ps\",\"key\":\"FE5D\",\"mappings\":{\"default\":{\"default\":\"crochet gauche en écaille minuscule\"}}},{\"category\":\"Pe\",\"key\":\"FE5E\",\"mappings\":{\"default\":{\"default\":\"crochet droit en écaille minuscule\"}}},{\"category\":\"Ps\",\"key\":\"FF08\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche pleine chasse\"}}},{\"category\":\"Pe\",\"key\":\"FF09\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite pleine chasse\"}}},{\"category\":\"Ps\",\"key\":\"FF3B\",\"mappings\":{\"default\":{\"default\":\"crochet gauche pleine chasse\"}}},{\"category\":\"Pe\",\"key\":\"FF3D\",\"mappings\":{\"default\":{\"default\":\"crochet droit pleine chasse\"}}},{\"category\":\"Ps\",\"key\":\"FF5B\",\"mappings\":{\"default\":{\"default\":\"accolade gauche pleine chasse\"}}},{\"category\":\"Pe\",\"key\":\"FF5D\",\"mappings\":{\"default\":{\"default\":\"accolade droite pleine chasse\"}}},{\"category\":\"Ps\",\"key\":\"FF5F\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche ajourée pleine chasse *\"}}},{\"category\":\"Pe\",\"key\":\"FF60\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite ajourée pleine chasse *\"}}},{\"category\":\"Ps\",\"key\":\"FF62\",\"mappings\":{\"default\":{\"default\":\"crochet gauche en coin demi chasse\"}}},{\"category\":\"Pe\",\"key\":\"FF63\",\"mappings\":{\"default\":{\"default\":\"crochet droit en coin demi chasse\"}}}]\n,\n\"fr/symbols/math_geometry.js\": \n[{\"locale\":\"fr\"},{\"key\":\"2500\",\"mappings\":{\"default\":{\"default\":\"filet horizontal fin\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2501\",\"mappings\":{\"default\":{\"default\":\"filet horizontal gras\"}}},{\"key\":\"2502\",\"mappings\":{\"default\":{\"default\":\"filet vertical fin\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2503\",\"mappings\":{\"default\":{\"default\":\"filet vertical gras\"}}},{\"category\":\"So\",\"key\":\"2504\",\"mappings\":{\"default\":{\"default\":\"filet brisé triple horizontal fin\"}}},{\"category\":\"So\",\"key\":\"2505\",\"mappings\":{\"default\":{\"default\":\"filet brisé triple horizontal gras\"}}},{\"category\":\"So\",\"key\":\"2506\",\"mappings\":{\"default\":{\"default\":\"filet brisé triple vertical fin\"}}},{\"category\":\"So\",\"key\":\"2507\",\"mappings\":{\"default\":{\"default\":\"filet brisé triple vertical gras\"}}},{\"category\":\"So\",\"key\":\"2508\",\"mappings\":{\"default\":{\"default\":\"filet brisé quadruple horizontal fin\"}}},{\"category\":\"So\",\"key\":\"2509\",\"mappings\":{\"default\":{\"default\":\"filet brisé quadruple horizontal gras\"}}},{\"category\":\"So\",\"key\":\"250A\",\"mappings\":{\"default\":{\"default\":\"filet brisé quadruple vertical fin\"}}},{\"category\":\"So\",\"key\":\"250B\",\"mappings\":{\"default\":{\"default\":\"filet brisé quadruple vertical gras\"}}},{\"key\":\"250C\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et vers la droite\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"250D\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras vers la droite\"}}},{\"category\":\"So\",\"key\":\"250E\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin vers la droite\"}}},{\"category\":\"So\",\"key\":\"250F\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et vers la droite\"}}},{\"key\":\"2510\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et vers la gauche\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2511\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2512\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2513\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et vers la gauche\"}}},{\"key\":\"2514\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et vers la droite\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2515\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers la droite\"}}},{\"category\":\"So\",\"key\":\"2516\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers la droite\"}}},{\"category\":\"So\",\"key\":\"2517\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et vers la droite\"}}},{\"key\":\"2518\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et vers la gauche\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2519\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers la gauche\"}}},{\"category\":\"So\",\"key\":\"251A\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers la gauche\"}}},{\"category\":\"So\",\"key\":\"251B\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et vers la gauche\"}}},{\"key\":\"251C\",\"mappings\":{\"default\":{\"default\":\"filet fin vertical et vers la droite\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"251D\",\"mappings\":{\"default\":{\"default\":\"filet fin vertical et gras vers la droite\"}}},{\"category\":\"So\",\"key\":\"251E\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers la droite et vers le bas\"}}},{\"category\":\"So\",\"key\":\"251F\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin vers la droite et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2520\",\"mappings\":{\"default\":{\"default\":\"filet gras vertical et fin vers la droite\"}}},{\"category\":\"So\",\"key\":\"2521\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras vers la droite et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2522\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers la droite et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2523\",\"mappings\":{\"default\":{\"default\":\"filet gras vertical et vers la droite\"}}},{\"key\":\"2524\",\"mappings\":{\"default\":{\"default\":\"filet fin vertical et vers la gauche\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2525\",\"mappings\":{\"default\":{\"default\":\"filet fin vertical et gras vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2526\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers la gauche et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2527\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin vers la gauche et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2528\",\"mappings\":{\"default\":{\"default\":\"filet gras vertical et fin vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2529\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras vers la gauche et vers le haut\"}}},{\"category\":\"So\",\"key\":\"252A\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers la gauche et vers le bas\"}}},{\"category\":\"So\",\"key\":\"252B\",\"mappings\":{\"default\":{\"default\":\"filet gras vertical et vers la gauche\"}}},{\"key\":\"252C\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"252D\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et fin vers la droite et vers le bas\"}}},{\"category\":\"So\",\"key\":\"252E\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite et fin vers la gauche et vers le bas\"}}},{\"category\":\"So\",\"key\":\"252F\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras horizontal\"}}},{\"category\":\"So\",\"key\":\"2530\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin horizontal\"}}},{\"category\":\"So\",\"key\":\"2531\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la droite et gras vers la gauche et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2532\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la gauche et gras vers la droite et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2533\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et horizontal\"}}},{\"key\":\"2534\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2535\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et fin vers la droite et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2536\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite et fin vers la gauche et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2537\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras horizontal\"}}},{\"category\":\"So\",\"key\":\"2538\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin horizontal\"}}},{\"category\":\"So\",\"key\":\"2539\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la droite et gras vers la gauche et vers le haut\"}}},{\"category\":\"So\",\"key\":\"253A\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la gauche et gras vers la droite et vers le haut\"}}},{\"category\":\"So\",\"key\":\"253B\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et horizontal\"}}},{\"key\":\"253C\",\"mappings\":{\"default\":{\"default\":\"filet fin vertical et horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"253D\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et fin vers la droite et vertical\"}}},{\"category\":\"So\",\"key\":\"253E\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite et fin vers la gauche et vertical\"}}},{\"category\":\"So\",\"key\":\"253F\",\"mappings\":{\"default\":{\"default\":\"filet vertical fin et horizontal gras\"}}},{\"category\":\"So\",\"key\":\"2540\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers le bas et horizontal\"}}},{\"category\":\"So\",\"key\":\"2541\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin vers le haut et horizontal\"}}},{\"category\":\"So\",\"key\":\"2542\",\"mappings\":{\"default\":{\"default\":\"filet vertical gras et horizontal fin\"}}},{\"category\":\"So\",\"key\":\"2543\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et vers le haut et fin vers la droite et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2544\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite et vers le haut et fin vers la gauche et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2545\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et vers le bas et fin vers la droite et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2546\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite et vers le bas et fin vers la gauche et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2547\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras vers le haut et horizontal\"}}},{\"category\":\"So\",\"key\":\"2548\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers le bas et horizontal\"}}},{\"category\":\"So\",\"key\":\"2549\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la droite et gras vers la gauche et vertical\"}}},{\"category\":\"So\",\"key\":\"254A\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la gauche et gras vers la droite et vertical\"}}},{\"category\":\"So\",\"key\":\"254B\",\"mappings\":{\"default\":{\"default\":\"filet vertical et horizontal gras\"}}},{\"category\":\"So\",\"key\":\"254C\",\"mappings\":{\"default\":{\"default\":\"filet brisé double horizontal fin\"}}},{\"category\":\"So\",\"key\":\"254D\",\"mappings\":{\"default\":{\"default\":\"filet brisé double horizontal gras\"}}},{\"category\":\"So\",\"key\":\"254E\",\"mappings\":{\"default\":{\"default\":\"filet brisé double vertical fin\"}}},{\"category\":\"So\",\"key\":\"254F\",\"mappings\":{\"default\":{\"default\":\"filet brisé double vertical gras\"}}},{\"key\":\"2550\",\"mappings\":{\"default\":{\"default\":\"filet double horizontal\"}},\"category\":\"So\"},{\"key\":\"2551\",\"mappings\":{\"default\":{\"default\":\"filet double vertical\"}},\"category\":\"So\"},{\"key\":\"2552\",\"mappings\":{\"default\":{\"default\":\"filet simple le bas et double vers la droite\"}},\"category\":\"So\"},{\"key\":\"2553\",\"mappings\":{\"default\":{\"default\":\"filet double vers le bas et simple vers la droite\"}},\"category\":\"So\"},{\"key\":\"2554\",\"mappings\":{\"default\":{\"default\":\"filet double vers le bas et vers la droite\"}},\"category\":\"So\"},{\"key\":\"2555\",\"mappings\":{\"default\":{\"default\":\"filet simple vers le bas et double vers la gauche\"}},\"category\":\"So\"},{\"key\":\"2556\",\"mappings\":{\"default\":{\"default\":\"filet double vers le bas et simple vers la gauche\"}},\"category\":\"So\"},{\"key\":\"2557\",\"mappings\":{\"default\":{\"default\":\"filet double vers le bas et vers la gauche\"}},\"category\":\"So\"},{\"key\":\"2558\",\"mappings\":{\"default\":{\"default\":\"filet simple vers le haut et double vers la droite\"}},\"category\":\"So\"},{\"key\":\"2559\",\"mappings\":{\"default\":{\"default\":\"filet double vers le haut et simple vers la droite\"}},\"category\":\"So\"},{\"key\":\"255A\",\"mappings\":{\"default\":{\"default\":\"filet double vers le haut et vers la droite\"}},\"category\":\"So\"},{\"key\":\"255B\",\"mappings\":{\"default\":{\"default\":\"filet simple vers le haut et double vers la gauche\"}},\"category\":\"So\"},{\"key\":\"255C\",\"mappings\":{\"default\":{\"default\":\"filet double vers le haut et simple vers la gauche\"}},\"category\":\"So\"},{\"key\":\"255D\",\"mappings\":{\"default\":{\"default\":\"filet double vers le haut et vers la gauche\"}},\"category\":\"So\"},{\"key\":\"255E\",\"mappings\":{\"default\":{\"default\":\"filet vertical simple et droit double\"}},\"category\":\"So\"},{\"key\":\"255F\",\"mappings\":{\"default\":{\"default\":\"filet vertical double et droit simple\"}},\"category\":\"So\"},{\"key\":\"2560\",\"mappings\":{\"default\":{\"default\":\"filet double vertical et vers la droite\"}},\"category\":\"So\"},{\"key\":\"2561\",\"mappings\":{\"default\":{\"default\":\"filet vertical simple et gauche double\"}},\"category\":\"So\"},{\"key\":\"2562\",\"mappings\":{\"default\":{\"default\":\"filet vertical double et gauche simple\"}},\"category\":\"So\"},{\"key\":\"2563\",\"mappings\":{\"default\":{\"default\":\"filet double vertical et vers la gauche\"}},\"category\":\"So\"},{\"key\":\"2564\",\"mappings\":{\"default\":{\"default\":\"filet vers le bas simple et horizontal double\"}},\"category\":\"So\"},{\"key\":\"2565\",\"mappings\":{\"default\":{\"default\":\"filet vers le bas double et horizontal simple\"}},\"category\":\"So\"},{\"key\":\"2566\",\"mappings\":{\"default\":{\"default\":\"filet double vers le bas et horizontal\"}},\"category\":\"So\"},{\"key\":\"2567\",\"mappings\":{\"default\":{\"default\":\"filet vers le haut simple et horizontal double\"}},\"category\":\"So\"},{\"key\":\"2568\",\"mappings\":{\"default\":{\"default\":\"filet vers le haut double et horizontal simple\"}},\"category\":\"So\"},{\"key\":\"2569\",\"mappings\":{\"default\":{\"default\":\"filet double vers le haut et horizontal\"}},\"category\":\"So\"},{\"key\":\"256A\",\"mappings\":{\"default\":{\"default\":\"filet vertical simple et horizontal double\"}},\"category\":\"So\"},{\"key\":\"256B\",\"mappings\":{\"default\":{\"default\":\"filet vertical double et horizontal simple\"}},\"category\":\"So\"},{\"key\":\"256C\",\"mappings\":{\"default\":{\"default\":\"filet double vertical et horizontall\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"256D\",\"mappings\":{\"default\":{\"default\":\"filet fin arc vers le bas et vers la droite\"}}},{\"category\":\"So\",\"key\":\"256E\",\"mappings\":{\"default\":{\"default\":\"filet fin arc vers le bas et vers la gauche\"}}},{\"category\":\"So\",\"key\":\"256F\",\"mappings\":{\"default\":{\"default\":\"filet fin arc vers le haut et vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2570\",\"mappings\":{\"default\":{\"default\":\"filet fin arc vers le haut et vers la droite\"}}},{\"category\":\"So\",\"key\":\"2571\",\"mappings\":{\"default\":{\"default\":\"filet diagonal fin du coin supérieur droit au coin inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"2572\",\"mappings\":{\"default\":{\"default\":\"filet diagonal fin du coin supérieur gauche vers le coin inférieur droit\"}}},{\"category\":\"So\",\"key\":\"2573\",\"mappings\":{\"default\":{\"default\":\"filet diagonal fin en croix\"}}},{\"category\":\"So\",\"key\":\"2574\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2575\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut\"}}},{\"category\":\"So\",\"key\":\"2576\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la droite\"}}},{\"category\":\"So\",\"key\":\"2577\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas\"}}},{\"category\":\"So\",\"key\":\"2578\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2579\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut\"}}},{\"category\":\"So\",\"key\":\"257A\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite\"}}},{\"category\":\"So\",\"key\":\"257B\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas\"}}},{\"category\":\"So\",\"key\":\"257C\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la gauche et gras vers la droite\"}}},{\"category\":\"So\",\"key\":\"257D\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers le bas\"}}},{\"category\":\"So\",\"key\":\"257E\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et fin vers la droite\"}}},{\"category\":\"So\",\"key\":\"257F\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers le bas\"}}},{\"key\":\"2580\",\"mappings\":{\"default\":{\"default\":\"moitié supérieure de pavé\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2581\",\"mappings\":{\"default\":{\"default\":\"huitième inférieur de pavé\"}}},{\"category\":\"So\",\"key\":\"2582\",\"mappings\":{\"default\":{\"default\":\"quart inférieur de pavé\"}}},{\"category\":\"So\",\"key\":\"2583\",\"mappings\":{\"default\":{\"default\":\"trois huitièmes inférieurs de pavé\"}}},{\"key\":\"2584\",\"mappings\":{\"default\":{\"default\":\"moitié inférieure de pavé\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2585\",\"mappings\":{\"default\":{\"default\":\"cinq huitièmes inférieurs de pavé\"}}},{\"category\":\"So\",\"key\":\"2586\",\"mappings\":{\"default\":{\"default\":\"trois quarts inférieurs de pavé\"}}},{\"category\":\"So\",\"key\":\"2587\",\"mappings\":{\"default\":{\"default\":\"sept huitièmes inférieurs de pavé\"}}},{\"key\":\"2588\",\"mappings\":{\"default\":{\"default\":\"pavé plein\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2589\",\"mappings\":{\"default\":{\"default\":\"sept huitièmes gauches de pavé\"}}},{\"category\":\"So\",\"key\":\"258A\",\"mappings\":{\"default\":{\"default\":\"trois quarts gauches de pavé\"}}},{\"category\":\"So\",\"key\":\"258B\",\"mappings\":{\"default\":{\"default\":\"cinq huitièmes gauches de pavé\"}}},{\"category\":\"So\",\"key\":\"258C\",\"mappings\":{\"default\":{\"default\":\"moitié gauche de pavé\"}}},{\"category\":\"So\",\"key\":\"258D\",\"mappings\":{\"default\":{\"default\":\"trois huitièmes gauches de pavé\"}}},{\"category\":\"So\",\"key\":\"258E\",\"mappings\":{\"default\":{\"default\":\"un quart gauche de pavé\"}}},{\"category\":\"So\",\"key\":\"258F\",\"mappings\":{\"default\":{\"default\":\"un huitième gauche de pavé\"}}},{\"category\":\"So\",\"key\":\"2590\",\"mappings\":{\"default\":{\"default\":\"moitié droite de pavé\"}}},{\"key\":\"2591\",\"mappings\":{\"default\":{\"default\":\"ombre légère\"}},\"category\":\"So\"},{\"key\":\"2592\",\"mappings\":{\"default\":{\"default\":\"ombre moyenne\"}},\"category\":\"So\"},{\"key\":\"2593\",\"mappings\":{\"default\":{\"default\":\"ombre foncée\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2594\",\"mappings\":{\"default\":{\"default\":\"huitième supérieur de pavé\"}}},{\"category\":\"So\",\"key\":\"2595\",\"mappings\":{\"default\":{\"default\":\"huitième droit de pavé\"}}},{\"category\":\"So\",\"key\":\"2596\",\"mappings\":{\"default\":{\"default\":\"quadrant inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"2597\",\"mappings\":{\"default\":{\"default\":\"quadrant inférieur droit\"}}},{\"category\":\"So\",\"key\":\"2598\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur gauche\"}}},{\"category\":\"So\",\"key\":\"2599\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur gauche inférieur gauche et inférieur droit\"}}},{\"category\":\"So\",\"key\":\"259A\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur gauche et inférieur droit\"}}},{\"category\":\"So\",\"key\":\"259B\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur gauche supérieur droit et inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"259C\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur gauche supérieur droit et inférieur droit\"}}},{\"category\":\"So\",\"key\":\"259D\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur droit\"}}},{\"category\":\"So\",\"key\":\"259E\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur droit et inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"259F\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur droit inférieur gauche et inférieur droit\"}}},{\"key\":\"25A0\",\"mappings\":{\"default\":{\"default\":\"petit carré noir\"}},\"category\":\"So\"},{\"key\":\"25A1\",\"mappings\":{\"default\":{\"default\":\"carré blanc\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25A2\",\"mappings\":{\"default\":{\"default\":\"carré blanc aux coins arrondis\"}}},{\"category\":\"So\",\"key\":\"25A3\",\"mappings\":{\"default\":{\"default\":\"petit carré noir inscrit dans un carré blanc\"}}},{\"category\":\"So\",\"key\":\"25A4\",\"mappings\":{\"default\":{\"default\":\"carré hachuré horizontalement\"}}},{\"category\":\"So\",\"key\":\"25A5\",\"mappings\":{\"default\":{\"default\":\"carré hachuré verticalement\"}}},{\"category\":\"So\",\"key\":\"25A6\",\"mappings\":{\"default\":{\"default\":\"carré quadrillé\"}}},{\"category\":\"So\",\"key\":\"25A7\",\"mappings\":{\"default\":{\"default\":\"carré hachuré du haut à gauche vers le bas à droite\"}}},{\"category\":\"So\",\"key\":\"25A8\",\"mappings\":{\"default\":{\"default\":\"carré hachuré du haut à droite vers le bas à gauche\"}}},{\"category\":\"So\",\"key\":\"25A9\",\"mappings\":{\"default\":{\"default\":\"carré quadrillé en diagonale\"}}},{\"key\":\"25AA\",\"mappings\":{\"default\":{\"default\":\"petit carré noir\"}},\"category\":\"So\"},{\"key\":\"25AB\",\"mappings\":{\"default\":{\"default\":\"petit carré blanc\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25AC\",\"mappings\":{\"default\":{\"default\":\"rectangle noir\"}}},{\"key\":\"25AD\",\"mappings\":{\"default\":{\"default\":\"rectangle blanc\"}},\"category\":\"So\"},{\"key\":\"25AE\",\"mappings\":{\"default\":{\"default\":\"rectangle vertical noir\"}},\"category\":\"So\"},{\"key\":\"25AF\",\"mappings\":{\"default\":{\"default\":\"white vertical rectangle\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25B0\",\"mappings\":{\"default\":{\"default\":\"parallélogramme noir\"}}},{\"key\":\"25B1\",\"mappings\":{\"default\":{\"default\":\"parallélogramme blanc\"}},\"category\":\"So\"},{\"key\":\"25B2\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers le haut\"}},\"category\":\"So\"},{\"key\":\"25B3\",\"mappings\":{\"default\":{\"default\":\"triangle blanc pointant vers le haut\"}},\"category\":\"So\"},{\"key\":\"25B4\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers le haut\"}},\"category\":\"So\"},{\"key\":\"25B5\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc pointant vers le haut\"}},\"category\":\"So\"},{\"key\":\"25B6\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers la droite\"}},\"category\":\"So\"},{\"key\":\"25B7\",\"mappings\":{\"default\":{\"default\":\"triangle blanc pointant vers la droite\"}},\"category\":\"Sm\"},{\"key\":\"25B8\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers la droite\"}},\"category\":\"So\"},{\"key\":\"25B9\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc pointant vers la droite\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25BA\",\"mappings\":{\"default\":{\"default\":\"pointeur noir vers la droite\"}}},{\"category\":\"So\",\"key\":\"25BB\",\"mappings\":{\"default\":{\"default\":\"pointeur blanc vers la droite\"}}},{\"key\":\"25BC\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers le bas\"}},\"category\":\"So\"},{\"key\":\"25BD\",\"mappings\":{\"default\":{\"default\":\"triangle blanc pointant vers le bas\"}},\"category\":\"So\"},{\"key\":\"25BE\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers le bas\"}},\"category\":\"So\"},{\"key\":\"25BF\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc pointant vers le bas\"}},\"category\":\"So\"},{\"key\":\"25C0\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers la gauche\"}},\"category\":\"So\"},{\"key\":\"25C1\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc pointant vers la gauche\"}},\"category\":\"Sm\"},{\"key\":\"25C2\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers la gauche\"}},\"category\":\"So\"},{\"key\":\"25C3\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc pointant vers la gauche\"}},\"category\":\"So\"},{\"key\":\"25C4\",\"mappings\":{\"default\":{\"default\":\"pointeur noir vers la gauche\"}},\"category\":\"So\"},{\"key\":\"25C5\",\"mappings\":{\"default\":{\"default\":\"pointeur blanc vers la gauche\"}},\"category\":\"So\"},{\"key\":\"25C6\",\"mappings\":{\"default\":{\"default\":\"losange noir\"}},\"category\":\"So\"},{\"key\":\"25C7\",\"mappings\":{\"default\":{\"default\":\"losange blanc\"}},\"category\":\"So\"},{\"key\":\"25C8\",\"mappings\":{\"default\":{\"default\":\"losange blanc évidé\"}},\"category\":\"So\"},{\"key\":\"25C9\",\"mappings\":{\"default\":{\"default\":\"cercle blanc évidé\"}},\"category\":\"So\"},{\"key\":\"25CA\",\"mappings\":{\"default\":{\"default\":\"losange\"}},\"category\":\"So\"},{\"key\":\"25CB\",\"mappings\":{\"default\":{\"default\":\"cercle blanc\"}},\"category\":\"So\"},{\"key\":\"25CC\",\"mappings\":{\"default\":{\"default\":\"cercle en pointillés\"}},\"category\":\"So\"},{\"key\":\"25CD\",\"mappings\":{\"default\":{\"default\":\"cercle hachuré verticalement\"}},\"category\":\"So\"},{\"key\":\"25CE\",\"mappings\":{\"default\":{\"default\":\"deux cercles concentriques\"}},\"category\":\"So\"},{\"key\":\"25CF\",\"mappings\":{\"default\":{\"default\":\"cercle noir\"}},\"category\":\"So\"},{\"key\":\"25D0\",\"mappings\":{\"default\":{\"default\":\"cercle avec moitié gauche noire\"}},\"category\":\"So\"},{\"key\":\"25D1\",\"mappings\":{\"default\":{\"default\":\"cercle avec moitié droite noire\"}},\"category\":\"So\"},{\"key\":\"25D2\",\"mappings\":{\"default\":{\"default\":\"cercle avec moitié inférieure\"}},\"category\":\"So\"},{\"key\":\"25D3\",\"mappings\":{\"default\":{\"default\":\"cercle avec moitié supérieure\"}},\"category\":\"So\"},{\"key\":\"25D4\",\"mappings\":{\"default\":{\"default\":\"cercle avec quadrant supérieur droit noir\"}},\"category\":\"So\"},{\"key\":\"25D5\",\"mappings\":{\"default\":{\"default\":\"disque avec quadrant supérieur gauche blanc\"}},\"category\":\"So\"},{\"key\":\"25D6\",\"mappings\":{\"default\":{\"default\":\"demi disque gauche noir\"}},\"category\":\"So\"},{\"key\":\"25D7\",\"mappings\":{\"default\":{\"default\":\"demi disque droite noir\"}},\"category\":\"So\"},{\"key\":\"25D8\",\"mappings\":{\"default\":{\"default\":\"point noir au blanc\"}},\"category\":\"So\"},{\"key\":\"25D9\",\"mappings\":{\"default\":{\"default\":\"cercle noir au blanc\"}},\"category\":\"So\"},{\"key\":\"25DA\",\"mappings\":{\"default\":{\"default\":\"demi cercle supérieur noir au  blanc\"}},\"category\":\"So\"},{\"key\":\"25DB\",\"mappings\":{\"default\":{\"default\":\"demi cercle inférieur noir au  blanc\"}},\"category\":\"So\"},{\"key\":\"25DC\",\"mappings\":{\"default\":{\"default\":\"arc de cercle dans le quadrant supérieur gauchearc de cercle dans le quadrant supérieur gauche\"}},\"category\":\"So\"},{\"key\":\"25DD\",\"mappings\":{\"default\":{\"default\":\"arc de cercle dans le quadrant supérieur droit\"}},\"category\":\"So\"},{\"key\":\"25DE\",\"mappings\":{\"default\":{\"default\":\"arc de cercle dans le quadrant inférieur droit\"}},\"category\":\"So\"},{\"key\":\"25DF\",\"mappings\":{\"default\":{\"default\":\"arc de cercle dans le quadrant inférieur gauche\"}},\"category\":\"So\"},{\"key\":\"25E0\",\"mappings\":{\"default\":{\"default\":\"demi cercle supérieur\"}},\"category\":\"So\"},{\"key\":\"25E1\",\"mappings\":{\"default\":{\"default\":\"demi cercle inférieur\"}},\"category\":\"So\"},{\"key\":\"25E2\",\"mappings\":{\"default\":{\"default\":\"coin triangulaire noir inférieur droit\"}},\"category\":\"So\"},{\"key\":\"25E3\",\"mappings\":{\"default\":{\"default\":\"coin triangulaire noir inférieur gauche\"}},\"category\":\"So\"},{\"key\":\"25E4\",\"mappings\":{\"default\":{\"default\":\"coin triangulaire noir supérieur gauche\"}},\"category\":\"So\"},{\"key\":\"25E5\",\"mappings\":{\"default\":{\"default\":\"coin triangulaire noir supérieur droit\"}},\"category\":\"So\"},{\"key\":\"25E6\",\"mappings\":{\"default\":{\"default\":\"opérateur rond\"}},\"category\":\"So\"},{\"key\":\"25E7\",\"mappings\":{\"default\":{\"default\":\"carré à moitié gauche noire\"}},\"category\":\"So\"},{\"key\":\"25E8\",\"mappings\":{\"default\":{\"default\":\"carré à moitié droite noire\"}},\"category\":\"So\"},{\"key\":\"25E9\",\"mappings\":{\"default\":{\"default\":\"carré à moitié supérieure gauche noire\"}},\"category\":\"So\"},{\"key\":\"25EA\",\"mappings\":{\"default\":{\"default\":\"carré à moitié inférieure droite noire\"}},\"category\":\"So\"},{\"key\":\"25EB\",\"mappings\":{\"default\":{\"default\":\"carré blanc à ligne bissectrice verticale\"}},\"category\":\"So\"},{\"key\":\"25EC\",\"mappings\":{\"default\":{\"default\":\"triangle blanc pointant vers le haut pointé\"}},\"category\":\"So\"},{\"key\":\"25ED\",\"mappings\":{\"default\":{\"default\":\"triangle pointe vers le haut À moitié gauche noire\"}},\"category\":\"So\"},{\"key\":\"25EE\",\"mappings\":{\"default\":{\"default\":\"triangle pointe vers le haut À moitié droite noire\"}},\"category\":\"So\"},{\"key\":\"25EF\",\"mappings\":{\"default\":{\"default\":\"grand cercle\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25F0\",\"mappings\":{\"default\":{\"default\":\"carré blanc à quartier supérieur gauche\"}}},{\"category\":\"So\",\"key\":\"25F1\",\"mappings\":{\"default\":{\"default\":\"carré blanc à quartier inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"25F2\",\"mappings\":{\"default\":{\"default\":\"carré blanc à quartier inférieur droit\"}}},{\"category\":\"So\",\"key\":\"25F3\",\"mappings\":{\"default\":{\"default\":\"carré blanc à quartier supérieur droit\"}}},{\"category\":\"So\",\"key\":\"25F4\",\"mappings\":{\"default\":{\"default\":\"cercle blanc à quartier supérieur gauche\"}}},{\"category\":\"So\",\"key\":\"25F5\",\"mappings\":{\"default\":{\"default\":\"cercle blanc à quartier inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"25F6\",\"mappings\":{\"default\":{\"default\":\"cercle blanc à quartier inférieur droit\"}}},{\"category\":\"So\",\"key\":\"25F7\",\"mappings\":{\"default\":{\"default\":\"cercle blanc à quartier supérieur droit\"}}},{\"key\":\"25F8\",\"mappings\":{\"default\":{\"default\":\"triangle rectangle supérieur gauche\"}},\"category\":\"Sm\"},{\"key\":\"25F9\",\"mappings\":{\"default\":{\"default\":\"triangle rectangle supérieur droit\"}},\"category\":\"Sm\"},{\"key\":\"25FA\",\"mappings\":{\"default\":{\"default\":\"triangle rectangle inférieur gauche\"}},\"category\":\"Sm\"},{\"key\":\"25FB\",\"mappings\":{\"default\":{\"default\":\"carré moyen blanc\"}},\"category\":\"Sm\"},{\"key\":\"25FC\",\"mappings\":{\"default\":{\"default\":\"carré moyen noir\"}},\"category\":\"Sm\"},{\"key\":\"25FD\",\"mappings\":{\"default\":{\"default\":\"carré moyen blanc\"}},\"category\":\"Sm\"},{\"key\":\"25FE\",\"mappings\":{\"default\":{\"default\":\"carré moyen noir\"}},\"category\":\"Sm\"},{\"key\":\"25FF\",\"mappings\":{\"default\":{\"default\":\"triangle rectangle inférieur droit\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2B12\",\"mappings\":{\"default\":{\"default\":\"carré à moitié supérieure noire\"}}},{\"category\":\"So\",\"key\":\"2B13\",\"mappings\":{\"default\":{\"default\":\"carré à moitié inférieure noire\"}}},{\"category\":\"So\",\"key\":\"2B14\",\"mappings\":{\"default\":{\"default\":\"carré à moitié diagonale supérieure droite noire\"}}},{\"category\":\"So\",\"key\":\"2B15\",\"mappings\":{\"default\":{\"default\":\"carré à moitié diagonale inférieure droite noire\"}}},{\"category\":\"So\",\"key\":\"2B16\",\"mappings\":{\"default\":{\"default\":\"losange à moitié gauche noire\"}}},{\"category\":\"So\",\"key\":\"2B17\",\"mappings\":{\"default\":{\"default\":\"losange à moitié droite noire\"}}},{\"category\":\"So\",\"key\":\"2B18\",\"mappings\":{\"default\":{\"default\":\"losange à moitié supérieure noire\"}}},{\"category\":\"So\",\"key\":\"2B19\",\"mappings\":{\"default\":{\"default\":\"losange à moitié inférieure noire\"}}},{\"category\":\"So\",\"key\":\"2B1A\",\"mappings\":{\"default\":{\"default\":\"carré en pointillés\"}}},{\"category\":\"So\",\"key\":\"2B1B\",\"mappings\":{\"default\":{\"default\":\"grand carré noir\"}}},{\"category\":\"So\",\"key\":\"2B1C\",\"mappings\":{\"default\":{\"default\":\"grand carré blanc\"}}},{\"category\":\"So\",\"key\":\"2B1D\",\"mappings\":{\"default\":{\"default\":\"très petit carré noir\"}}},{\"category\":\"So\",\"key\":\"2B1E\",\"mappings\":{\"default\":{\"default\":\"très petit carré blanc\"}}},{\"category\":\"So\",\"key\":\"2B1F\",\"mappings\":{\"default\":{\"default\":\"pentagone noir\"}}},{\"category\":\"So\",\"key\":\"2B20\",\"mappings\":{\"default\":{\"default\":\"pentagone blanc\"}}},{\"category\":\"So\",\"key\":\"2B21\",\"mappings\":{\"default\":{\"default\":\"hexagone blanc\"}}},{\"category\":\"So\",\"key\":\"2B22\",\"mappings\":{\"default\":{\"default\":\"hexagone noir\"}}},{\"category\":\"So\",\"key\":\"2B23\",\"mappings\":{\"default\":{\"default\":\"hexagone noir posé sur un côté\"}}},{\"category\":\"So\",\"key\":\"2B24\",\"mappings\":{\"default\":{\"default\":\"grand cercle noir\"}}},{\"category\":\"So\",\"key\":\"2B25\",\"mappings\":{\"default\":{\"default\":\"losange moyen noir\"}}},{\"category\":\"So\",\"key\":\"2B26\",\"mappings\":{\"default\":{\"default\":\"losange moyen blanc\"}}},{\"category\":\"So\",\"key\":\"2B27\",\"mappings\":{\"default\":{\"default\":\"rhombe moyen noir\"}}},{\"category\":\"So\",\"key\":\"2B28\",\"mappings\":{\"default\":{\"default\":\"rhombe moyen blanc\"}}},{\"category\":\"So\",\"key\":\"2B29\",\"mappings\":{\"default\":{\"default\":\"petit losange noir\"}}},{\"category\":\"So\",\"key\":\"2B2A\",\"mappings\":{\"default\":{\"default\":\"petit rhombe noir\"}}},{\"category\":\"So\",\"key\":\"2B2B\",\"mappings\":{\"default\":{\"default\":\"petit rhombe blanc\"}}},{\"category\":\"So\",\"key\":\"2B2C\",\"mappings\":{\"default\":{\"default\":\"ellipse horizontale noire\"}}},{\"category\":\"So\",\"key\":\"2B2D\",\"mappings\":{\"default\":{\"default\":\"ellipse horizontale blanche\"}}},{\"category\":\"So\",\"key\":\"2B2E\",\"mappings\":{\"default\":{\"default\":\"ellipse verticale noire\"}}},{\"category\":\"So\",\"key\":\"2B2F\",\"mappings\":{\"default\":{\"default\":\"ellipse verticale blanche\"}}},{\"key\":\"2B50\",\"mappings\":{\"default\":{\"default\":\"étoile blanche moyenne\"}},\"category\":\"So\"},{\"key\":\"2B51\",\"mappings\":{\"default\":{\"default\":\"petite étoile noire\"}},\"category\":\"So\"},{\"key\":\"2B52\",\"mappings\":{\"default\":{\"default\":\"petite étoile blanche\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2B53\",\"mappings\":{\"default\":{\"default\":\"pentagone noir pointant vers la droite\"}}},{\"category\":\"So\",\"key\":\"2B54\",\"mappings\":{\"default\":{\"default\":\"pentagone blanc pointant vers la droite\"}}},{\"category\":\"So\",\"key\":\"2B55\",\"mappings\":{\"default\":{\"default\":\"grand cercle gras\"}}},{\"category\":\"So\",\"key\":\"2B56\",\"mappings\":{\"default\":{\"default\":\"ovale gras avec ovale inscrit\"}}},{\"category\":\"So\",\"key\":\"2B57\",\"mappings\":{\"default\":{\"default\":\"cercle gras avec cercle inscrit\"}}},{\"category\":\"So\",\"key\":\"2B58\",\"mappings\":{\"default\":{\"default\":\"cercle gras\"}}},{\"category\":\"So\",\"key\":\"2B59\",\"mappings\":{\"default\":{\"default\":\"sautoir cerclé gras\"}}}]\n,\n\"fr/symbols/math_harpoons.js\": \n[{\"locale\":\"fr\"},{\"key\":\"21BC\",\"mappings\":{\"default\":{\"default\":\"harpon gauche avec dent dressée\"}},\"category\":\"So\"},{\"key\":\"21BD\",\"mappings\":{\"default\":{\"default\":\"harpon gauche avec dent baissée\"}},\"category\":\"So\"},{\"key\":\"21BE\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut avec dent droite\"}},\"category\":\"So\"},{\"key\":\"21BF\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut avec dent gauche\"}},\"category\":\"So\"},{\"key\":\"21C0\",\"mappings\":{\"default\":{\"default\":\"harpon droit avec dent dressée\"}},\"category\":\"So\"},{\"key\":\"21C1\",\"mappings\":{\"default\":{\"default\":\"harpon droit avec dent baissée\"}},\"category\":\"So\"},{\"key\":\"21C2\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas avec dent droite\"}},\"category\":\"So\"},{\"key\":\"21C3\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas avec dent gauche\"}},\"category\":\"So\"},{\"key\":\"21CB\",\"mappings\":{\"default\":{\"default\":\"harpon gauche par dessus harpon droit\"}},\"category\":\"So\"},{\"key\":\"21CC\",\"mappings\":{\"default\":{\"default\":\"harpon droit par dessus harpon gauche\"}},\"category\":\"So\"},{\"key\":\"294A\",\"mappings\":{\"default\":{\"default\":\"javelot à dents gauche dressée et droite baissée\"}},\"category\":\"Sm\"},{\"key\":\"294B\",\"mappings\":{\"default\":{\"default\":\"javelot à dents gauche baissée et droite dressée\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"294C\",\"mappings\":{\"default\":{\"default\":\"crampon à dents supérieure droite et inférieure gauche\"}}},{\"category\":\"Sm\",\"key\":\"294D\",\"mappings\":{\"default\":{\"default\":\"crampon à dents supérieure gauche et inférieure droite\"}}},{\"key\":\"294E\",\"mappings\":{\"default\":{\"default\":\"javelot à dents droite et gauche dressées\"}},\"category\":\"Sm\"},{\"key\":\"294F\",\"mappings\":{\"default\":{\"default\":\"javelot à dents supérieure et inférieure droites\"}},\"category\":\"Sm\"},{\"key\":\"2950\",\"mappings\":{\"default\":{\"default\":\"javelot à dents droite et gauche baissées\"}},\"category\":\"Sm\"},{\"key\":\"2951\",\"mappings\":{\"default\":{\"default\":\"javelot à dents supérieure et inférieure gauches\"}},\"category\":\"Sm\"},{\"key\":\"2952\",\"mappings\":{\"default\":{\"default\":\"harpon gauche à dent dressée contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2953\",\"mappings\":{\"default\":{\"default\":\"harpon droit à dent dressée contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2954\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent droite contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2955\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent droite contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2956\",\"mappings\":{\"default\":{\"default\":\"harpon gauche à dent baissée contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2957\",\"mappings\":{\"default\":{\"default\":\"harpon droit à dent baissée contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2958\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent gauche contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2959\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent gauche contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"295A\",\"mappings\":{\"default\":{\"default\":\"harpon gauche à dent dressée depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"295B\",\"mappings\":{\"default\":{\"default\":\"harpon droit à dent dressée depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"295C\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent droite depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"295D\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent droite depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"295E\",\"mappings\":{\"default\":{\"default\":\"harpon gauche à dent baissée depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"295F\",\"mappings\":{\"default\":{\"default\":\"harpon droit à dent baissée depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"2960\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent gauche depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"2961\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent gauche depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"2962\",\"mappings\":{\"default\":{\"default\":\"harpon gauche à dent dressée sur harpon gauche à dent baissée\"}},\"category\":\"Sm\"},{\"key\":\"2963\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent gauche à côté de harpon vers le haut à dent droite\"}},\"category\":\"Sm\"},{\"key\":\"2964\",\"mappings\":{\"default\":{\"default\":\"harpon droit à dent dressée par dessus harpon droit à dent baissée\"}},\"category\":\"Sm\"},{\"key\":\"2965\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent gauche à côté de harpon vers le bas à dent droite\"}},\"category\":\"Sm\"},{\"key\":\"2966\",\"mappings\":{\"default\":{\"default\":\"harpon à dent gauche dressée par dessus harpon à dent droite dressée\"}},\"category\":\"Sm\"},{\"key\":\"2967\",\"mappings\":{\"default\":{\"default\":\"harpon à dent gauche baissée par dessus harpon à dent droite baissée\"}},\"category\":\"Sm\"},{\"key\":\"2968\",\"mappings\":{\"default\":{\"default\":\"harpon à dent droite dressée par dessus harpon à dent gauche dressée\"}},\"category\":\"Sm\"},{\"key\":\"2969\",\"mappings\":{\"default\":{\"default\":\"harpon à dent droite baissée par dessus harpon à dent gauche baissée\"}},\"category\":\"Sm\"},{\"key\":\"296A\",\"mappings\":{\"default\":{\"default\":\"harpon à dent gauche dressée par dessus long trait\"}},\"category\":\"Sm\"},{\"key\":\"296B\",\"mappings\":{\"default\":{\"default\":\"long trait par dessus harpon à dent gauche baissée\"}},\"category\":\"Sm\"},{\"key\":\"296C\",\"mappings\":{\"default\":{\"default\":\"harpon à dent droite dressée par dessus long trait\"}},\"category\":\"Sm\"},{\"key\":\"296D\",\"mappings\":{\"default\":{\"default\":\"long trait par dessus harpon à dent droite baissée\"}},\"category\":\"Sm\"},{\"key\":\"296E\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent gauche à côté de harpon vers le bas à dent droite\"}},\"category\":\"Sm\"},{\"key\":\"296F\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent gauche à côté de harpon vers le haut à dent droite\"}},\"category\":\"Sm\"},{\"key\":\"297C\",\"mappings\":{\"default\":{\"default\":\"ancre gauche\"}},\"category\":\"Sm\"},{\"key\":\"297D\",\"mappings\":{\"default\":{\"default\":\"ancre droite\"}},\"category\":\"Sm\"},{\"key\":\"297E\",\"mappings\":{\"default\":{\"default\":\"ancre vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"297F\",\"mappings\":{\"default\":{\"default\":\"ancre vers le bas\"}},\"category\":\"Sm\"}]\n,\n\"fr/symbols/math_non_characters.js\": \n[{\"locale\":\"fr\"},{\"key\":\"210F\",\"mappings\":{\"default\":{\"default\":\"constante de planck sur deux pi\"}},\"category\":\"Ll\"},{\"category\":\"So\",\"key\":\"2114\",\"mappings\":{\"default\":{\"default\":\"symbole l b barré\"}}},{\"key\":\"2116\",\"mappings\":{\"default\":{\"default\":\"symbole numéro\"}},\"category\":\"So\"},{\"key\":\"2117\",\"mappings\":{\"default\":{\"default\":\"copyright de programme sonore\"}},\"category\":\"So\"},{\"key\":\"211E\",\"mappings\":{\"default\":{\"default\":\"ordonnances\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"211F\",\"mappings\":{\"default\":{\"default\":\"répons\"}}},{\"category\":\"So\",\"key\":\"2120\",\"mappings\":{\"default\":{\"default\":\"symbole anglais marque de service\"}}},{\"category\":\"So\",\"key\":\"2121\",\"mappings\":{\"default\":{\"default\":\"signe de téléphone\"}}},{\"key\":\"2122\",\"mappings\":{\"default\":{\"default\":\"symbole anglais marque de commerce\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2123\",\"mappings\":{\"default\":{\"default\":\"versicule\"}}},{\"key\":\"2125\",\"mappings\":{\"default\":{\"default\":\"symbole once\"}},\"category\":\"So\"},{\"key\":\"2126\",\"mappings\":{\"default\":{\"default\":\"ohm\"}},\"category\":\"Lu\"},{\"key\":\"2127\",\"mappings\":{\"default\":{\"default\":\"ohm culbuté\"}},\"category\":\"So\"},{\"key\":\"212A\",\"mappings\":{\"default\":{\"default\":\"degré kelvin\"}},\"category\":\"Lu\"},{\"key\":\"212B\",\"mappings\":{\"default\":{\"default\":\"angstroms\"}},\"category\":\"Lu\"},{\"category\":\"So\",\"key\":\"212E\",\"mappings\":{\"default\":{\"default\":\"symbole estimé\"}}},{\"key\":\"2132\",\"mappings\":{\"default\":{\"default\":\"f culbuté majuscule\"}},\"category\":\"Lu\"},{\"category\":\"Ll\",\"key\":\"2139\",\"mappings\":{\"default\":{\"default\":\"bureau d'information\"}}},{\"category\":\"So\",\"key\":\"213A\",\"mappings\":{\"default\":{\"default\":\"Q majuscule couché\"}}},{\"category\":\"So\",\"key\":\"213B\",\"mappings\":{\"default\":{\"default\":\"symbole télécopie\"}}},{\"category\":\"Sm\",\"key\":\"2141\",\"mappings\":{\"default\":{\"default\":\"G culbuté majuscule sans empattement\"}}},{\"category\":\"Sm\",\"key\":\"2142\",\"mappings\":{\"default\":{\"default\":\"L culbuté majuscule sans empattement\"}}},{\"category\":\"Sm\",\"key\":\"2143\",\"mappings\":{\"default\":{\"default\":\"L réfléchi majuscule sans empattement\"}}},{\"category\":\"Sm\",\"key\":\"2144\",\"mappings\":{\"default\":{\"default\":\"Y culbuté majuscule sans empattement\"}}}]\n,\n\"fr/symbols/math_symbols.js\": \n[{\"locale\":\"fr\"},{\"key\":\"0021\",\"mappings\":{\"default\":{\"default\":\"factorielle\"}},\"category\":\"Po\"},{\"key\":\"0022\",\"mappings\":{\"default\":{\"default\":\"petit guillemet\"}},\"category\":\"Po\"},{\"key\":\"0023\",\"mappings\":{\"default\":{\"default\":\"dièse\"}},\"category\":\"Po\"},{\"key\":\"0024\",\"mappings\":{\"default\":{\"default\":\"dollars\"}},\"category\":\"Sc\"},{\"key\":\"0025\",\"mappings\":{\"default\":{\"default\":\"pourcent\"}},\"category\":\"Po\"},{\"key\":\"0026\",\"mappings\":{\"default\":{\"default\":\"esperluette\"}},\"category\":\"Po\"},{\"key\":\"0027\",\"mappings\":{\"default\":{\"default\":\"prime\",\"alternative\":\"apostrophe\"}},\"category\":\"Po\"},{\"key\":\"002A\",\"mappings\":{\"default\":{\"default\":\"astérisque\"}},\"category\":\"Po\"},{\"key\":\"002B\",\"mappings\":{\"default\":{\"default\":\"plus\"}},\"category\":\"Sm\"},{\"key\":\"002C\",\"mappings\":{\"default\":{\"default\":\"virgule\"}},\"category\":\"Po\"},{\"key\":\"002D\",\"mappings\":{\"default\":{\"default\":\"moins\"}},\"category\":\"Pd\"},{\"key\":\"002E\",\"mappings\":{\"default\":{\"default\":\"point\"}},\"category\":\"Po\"},{\"key\":\"002F\",\"mappings\":{\"default\":{\"default\":\"barre oblique\"}},\"category\":\"Po\"},{\"key\":\"003A\",\"mappings\":{\"default\":{\"default\":\"deux points\"}},\"category\":\"Po\"},{\"key\":\"003B\",\"mappings\":{\"default\":{\"default\":\"point virgule\"}},\"category\":\"Po\"},{\"key\":\"003C\",\"mappings\":{\"default\":{\"default\":\"inférieur à\"}},\"category\":\"Sm\"},{\"key\":\"003D\",\"mappings\":{\"default\":{\"default\":\"égale\"}},\"category\":\"Sm\"},{\"key\":\"003E\",\"mappings\":{\"default\":{\"default\":\"supérieur à\"}},\"category\":\"Sm\"},{\"key\":\"003F\",\"mappings\":{\"default\":{\"default\":\"point d'interrogation\"}},\"category\":\"Po\"},{\"key\":\"0040\",\"mappings\":{\"default\":{\"default\":\"arobase\"}},\"category\":\"Po\"},{\"key\":\"005C\",\"mappings\":{\"default\":{\"default\":\"barre oblique inversée\"}},\"category\":\"Po\"},{\"key\":\"005E\",\"mappings\":{\"default\":{\"default\":\"circonflexe\"}},\"category\":\"Sk\"},{\"key\":\"005F\",\"mappings\":{\"default\":{\"default\":\"tiret bas\"}},\"category\":\"Pc\"},{\"key\":\"0060\",\"mappings\":{\"default\":{\"default\":\"accent grave\"}},\"category\":\"Sk\"},{\"key\":\"007C\",\"mappings\":{\"default\":{\"default\":\"barre verticale\"}},\"category\":\"Sm\"},{\"key\":\"007E\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sm\"},{\"key\":\"00A1\",\"mappings\":{\"default\":{\"default\":\"point d'exclamation renversé\"}},\"category\":\"Po\"},{\"key\":\"00A2\",\"mappings\":{\"default\":{\"default\":\"centimes\"}},\"category\":\"Sc\"},{\"key\":\"00A3\",\"mappings\":{\"default\":{\"default\":\"livres\"}},\"category\":\"Sc\"},{\"key\":\"00A4\",\"mappings\":{\"default\":{\"default\":\"symbole monétaire\"}},\"category\":\"Sc\"},{\"key\":\"00A5\",\"mappings\":{\"default\":{\"default\":\"yen\"}},\"category\":\"Sc\"},{\"key\":\"00A6\",\"mappings\":{\"default\":{\"default\":\"barre déjointe\"}},\"category\":\"So\"},{\"key\":\"00A7\",\"mappings\":{\"default\":{\"default\":\"paragraphe\"}},\"category\":\"Po\"},{\"key\":\"00A8\",\"mappings\":{\"default\":{\"default\":\"tréma\"}},\"category\":\"Sk\"},{\"key\":\"00A9\",\"mappings\":{\"default\":{\"default\":\"copyright\"}},\"category\":\"So\"},{\"key\":\"00AA\",\"mappings\":{\"default\":{\"default\":\"indicateur ordinal féminin\"}},\"category\":\"Lo\"},{\"key\":\"00AB\",\"mappings\":{\"default\":{\"default\":\"guillemet chevron pointant gauche\"}},\"category\":\"Pi\"},{\"key\":\"00AC\",\"mappings\":{\"default\":{\"default\":\"négation\"}},\"category\":\"Sm\"},{\"key\":\"00AE\",\"mappings\":{\"default\":{\"default\":\"symbole marque déposée\"}},\"category\":\"So\"},{\"key\":\"00AF\",\"mappings\":{\"default\":{\"default\":\"macron\"}},\"category\":\"Sk\"},{\"key\":\"00B0\",\"mappings\":{\"default\":{\"default\":\"degrés\"}},\"category\":\"So\"},{\"key\":\"00B1\",\"mappings\":{\"default\":{\"default\":\"plus ou moins\"}},\"category\":\"Sm\"},{\"key\":\"00B4\",\"mappings\":{\"default\":{\"default\":\"accent aigu\"}},\"category\":\"Sk\"},{\"key\":\"00B5\",\"mappings\":{\"default\":{\"default\":\"symbole micro\"}},\"category\":\"Ll\"},{\"key\":\"00B6\",\"mappings\":{\"default\":{\"default\":\"fin de paragraphe\"}},\"category\":\"Po\"},{\"key\":\"00B7\",\"mappings\":{\"default\":{\"default\":\"point médian\"}},\"category\":\"Po\"},{\"key\":\"00B8\",\"mappings\":{\"default\":{\"default\":\"cédille\"}},\"category\":\"Sk\"},{\"key\":\"00BA\",\"mappings\":{\"default\":{\"default\":\"indicateur ordinal masculin\"}},\"category\":\"Lo\"},{\"key\":\"00BB\",\"mappings\":{\"default\":{\"default\":\"guillemet chevron pointant droite\"}},\"category\":\"Pf\"},{\"key\":\"00BF\",\"mappings\":{\"default\":{\"default\":\"point d'interrogation renversé\"}},\"category\":\"Po\"},{\"key\":\"00D7\",\"mappings\":{\"default\":{\"default\":\"multiplié par\"}},\"category\":\"Sm\"},{\"key\":\"00F7\",\"mappings\":{\"default\":{\"default\":\"divisé par\"}},\"category\":\"Sm\"},{\"key\":\"02D8\",\"mappings\":{\"default\":{\"default\":\"brève\"}},\"category\":\"Sk\"},{\"key\":\"02D9\",\"mappings\":{\"default\":{\"default\":\"point en chef\"}},\"category\":\"Sk\"},{\"key\":\"02DA\",\"mappings\":{\"default\":{\"default\":\"rond en chef\"}},\"category\":\"Sk\"},{\"key\":\"02DB\",\"mappings\":{\"default\":{\"default\":\"ogonek\"}},\"category\":\"Sk\"},{\"key\":\"02DC\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sk\"},{\"key\":\"02DD\",\"mappings\":{\"default\":{\"default\":\"double accent aigu\"}},\"category\":\"Sk\"},{\"key\":\"2010\",\"mappings\":{\"default\":{\"default\":\"trait d'union\"}},\"category\":\"Pd\"},{\"category\":\"Pd\",\"key\":\"2011\",\"mappings\":{\"default\":{\"default\":\"trait d'union insécable\"}}},{\"category\":\"Pd\",\"key\":\"2012\",\"mappings\":{\"default\":{\"default\":\"tiret numérique\"}}},{\"key\":\"2013\",\"mappings\":{\"default\":{\"default\":\"trait d'union insécable\"}},\"category\":\"Pd\"},{\"key\":\"2014\",\"mappings\":{\"default\":{\"default\":\"tiret numérique\"}},\"category\":\"Pd\"},{\"key\":\"2015\",\"mappings\":{\"default\":{\"default\":\"barre horizontalle\"}},\"category\":\"Pd\"},{\"key\":\"2016\",\"mappings\":{\"default\":{\"default\":\"double ligne verticale\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2017\",\"mappings\":{\"default\":{\"default\":\"double trait souscrit\"}}},{\"key\":\"2018\",\"mappings\":{\"default\":{\"default\":\"guillemet apostrophe culbuté\"}},\"category\":\"Pi\"},{\"key\":\"2019\",\"mappings\":{\"default\":{\"default\":\"guillemet apostrophe\"}},\"category\":\"Pf\"},{\"key\":\"201A\",\"mappings\":{\"default\":{\"default\":\"guillemet virgule inférieur\"}},\"category\":\"Ps\"},{\"category\":\"Pi\",\"key\":\"201B\",\"mappings\":{\"default\":{\"default\":\"guillemet virgule supérieur culbuté\"}}},{\"key\":\"201C\",\"mappings\":{\"default\":{\"default\":\"guillemet apostrophe double culbuté\"}},\"category\":\"Pi\"},{\"key\":\"201D\",\"mappings\":{\"default\":{\"default\":\"guillemet apostrophe double\"}},\"category\":\"Pf\"},{\"key\":\"201E\",\"mappings\":{\"default\":{\"default\":\"guillemet double prime\"}},\"category\":\"Ps\"},{\"category\":\"Pi\",\"key\":\"201F\",\"mappings\":{\"default\":{\"default\":\"guillemet virgule double supérieur culbuté\"}}},{\"key\":\"2020\",\"mappings\":{\"default\":{\"default\":\"obèle\"}},\"category\":\"Po\"},{\"key\":\"2021\",\"mappings\":{\"default\":{\"default\":\"double obèle\"}},\"category\":\"Po\"},{\"key\":\"2022\",\"mappings\":{\"default\":{\"default\":\"puce\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2023\",\"mappings\":{\"default\":{\"default\":\"puce triangulaire\"}}},{\"category\":\"Po\",\"key\":\"2024\",\"mappings\":{\"default\":{\"default\":\"point de conduite simple\"}}},{\"key\":\"2025\",\"mappings\":{\"default\":{\"default\":\"point de conduite double\"}},\"category\":\"Po\"},{\"key\":\"2026\",\"mappings\":{\"default\":{\"default\":\"points de suspension\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2027\",\"mappings\":{\"default\":{\"default\":\"point de coupure de mot\"}}},{\"key\":\"2030\",\"mappings\":{\"default\":{\"default\":\"symbole pour mille\"}},\"category\":\"Po\"},{\"key\":\"2031\",\"mappings\":{\"default\":{\"default\":\"symbole pour dix mille\"}},\"category\":\"Po\"},{\"key\":\"2032\",\"mappings\":{\"default\":{\"default\":\"prime\"}},\"category\":\"Po\"},{\"key\":\"2033\",\"mappings\":{\"default\":{\"default\":\"double prime\"}},\"category\":\"Po\"},{\"key\":\"2034\",\"mappings\":{\"default\":{\"default\":\"triple prime\"}},\"category\":\"Po\"},{\"key\":\"2035\",\"mappings\":{\"default\":{\"default\":\"prime réfléchi\"}},\"category\":\"Po\"},{\"key\":\"2036\",\"mappings\":{\"default\":{\"default\":\"double prime réfléchi\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2037\",\"mappings\":{\"default\":{\"default\":\"triple prime réfléchi\"}}},{\"category\":\"Po\",\"key\":\"2038\",\"mappings\":{\"default\":{\"default\":\"chevron d'insertion\"}}},{\"key\":\"2039\",\"mappings\":{\"default\":{\"default\":\"guillemet simple gauche\"}},\"category\":\"Pi\"},{\"key\":\"203A\",\"mappings\":{\"default\":{\"default\":\"guillemet simple droite\"}},\"category\":\"Pf\"},{\"category\":\"Po\",\"key\":\"203B\",\"mappings\":{\"default\":{\"default\":\"marque de référence\"}}},{\"category\":\"Po\",\"key\":\"203C\",\"mappings\":{\"default\":{\"default\":\"double point d'exclamation\"}}},{\"category\":\"Po\",\"key\":\"203D\",\"mappings\":{\"default\":{\"default\":\"point exclarrogatif\"}}},{\"key\":\"203E\",\"mappings\":{\"default\":{\"default\":\"tiret en chef\"}},\"category\":\"Po\"},{\"category\":\"Pc\",\"key\":\"203F\",\"mappings\":{\"default\":{\"default\":\"tirant souscrit\"}}},{\"key\":\"2040\",\"mappings\":{\"default\":{\"default\":\"tirant en chef\"}},\"category\":\"Pc\"},{\"key\":\"2041\",\"mappings\":{\"default\":{\"default\":\"lambda d'insertion\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2042\",\"mappings\":{\"default\":{\"default\":\"astérisme\"}}},{\"key\":\"2043\",\"mappings\":{\"default\":{\"default\":\"puce trait d'union\"}},\"category\":\"Po\"},{\"key\":\"2044\",\"mappings\":{\"default\":{\"default\":\"barre de fraction\"}},\"category\":\"Sm\"},{\"category\":\"Po\",\"key\":\"2047\",\"mappings\":{\"default\":{\"default\":\"double point d'interrogation\"}}},{\"category\":\"Po\",\"key\":\"2048\",\"mappings\":{\"default\":{\"default\":\"point d'interrogation exclamation\"}}},{\"category\":\"Po\",\"key\":\"2049\",\"mappings\":{\"default\":{\"default\":\"point d'exclamation interrogation\"}}},{\"category\":\"Po\",\"key\":\"204B\",\"mappings\":{\"default\":{\"default\":\"pied de mouche réfléchi\"}}},{\"category\":\"Po\",\"key\":\"204C\",\"mappings\":{\"default\":{\"default\":\"puce noire tronquée à droite\"}}},{\"category\":\"Po\",\"key\":\"204D\",\"mappings\":{\"default\":{\"default\":\"puce noire tronquée à gauche\"}}},{\"category\":\"Po\",\"key\":\"204E\",\"mappings\":{\"default\":{\"default\":\"astérisque baissé\"}}},{\"key\":\"204F\",\"mappings\":{\"default\":{\"default\":\"point virgule réfléchi\"}},\"category\":\"Po\"},{\"key\":\"2050\",\"mappings\":{\"default\":{\"default\":\"resserrer\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2051\",\"mappings\":{\"default\":{\"default\":\"deux astérisques alignés verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2052\",\"mappings\":{\"default\":{\"default\":\"moins commercial\"}}},{\"category\":\"Po\",\"key\":\"2053\",\"mappings\":{\"default\":{\"default\":\"tiret ondé\"}}},{\"category\":\"Pc\",\"key\":\"2054\",\"mappings\":{\"default\":{\"default\":\"dos d'âne souscrit\"}}},{\"category\":\"Po\",\"key\":\"2055\",\"mappings\":{\"default\":{\"default\":\"point fleur\"}}},{\"category\":\"Po\",\"key\":\"2056\",\"mappings\":{\"default\":{\"default\":\"trois points\"}}},{\"key\":\"2057\",\"mappings\":{\"default\":{\"default\":\"quadruple prime\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2058\",\"mappings\":{\"default\":{\"default\":\"quatre points en losange\"}}},{\"category\":\"Po\",\"key\":\"2059\",\"mappings\":{\"default\":{\"default\":\"cinq points en quinconce\"}}},{\"category\":\"Po\",\"key\":\"205A\",\"mappings\":{\"default\":{\"default\":\"deux points en capitale\"}}},{\"category\":\"Po\",\"key\":\"205B\",\"mappings\":{\"default\":{\"default\":\"quatre points en croix\"}}},{\"category\":\"Po\",\"key\":\"205C\",\"mappings\":{\"default\":{\"default\":\"croix pointée\"}}},{\"category\":\"Po\",\"key\":\"205D\",\"mappings\":{\"default\":{\"default\":\"trois points vertical\"}}},{\"category\":\"Po\",\"key\":\"205E\",\"mappings\":{\"default\":{\"default\":\"quatre points vertical\"}}},{\"category\":\"Sm\",\"key\":\"207A\",\"mappings\":{\"default\":{\"default\":\"exposant signe plus\"}}},{\"category\":\"Sm\",\"key\":\"207B\",\"mappings\":{\"default\":{\"default\":\"exposant signe moins\"}}},{\"category\":\"Sm\",\"key\":\"207C\",\"mappings\":{\"default\":{\"default\":\"exposant signe égal\"}}},{\"category\":\"Ps\",\"key\":\"207D\",\"mappings\":{\"default\":{\"default\":\"exposant parenthèse gauche\"}}},{\"category\":\"Pe\",\"key\":\"207E\",\"mappings\":{\"default\":{\"default\":\"exposant parenthèse droite\"}}},{\"category\":\"Sm\",\"key\":\"208A\",\"mappings\":{\"default\":{\"default\":\"indice signe plus\"}}},{\"category\":\"Sm\",\"key\":\"208B\",\"mappings\":{\"default\":{\"default\":\"indice signe moins\"}}},{\"category\":\"Sm\",\"key\":\"208C\",\"mappings\":{\"default\":{\"default\":\"indice signe égal\"}}},{\"category\":\"Ps\",\"key\":\"208D\",\"mappings\":{\"default\":{\"default\":\"indice parenthèse gauche\"}}},{\"category\":\"Pe\",\"key\":\"208E\",\"mappings\":{\"default\":{\"default\":\"indice parenthèse droite\"}}},{\"category\":\"So\",\"key\":\"214A\",\"mappings\":{\"default\":{\"default\":\"limite de propriété\"}}},{\"category\":\"Sm\",\"key\":\"214B\",\"mappings\":{\"default\":{\"default\":\"perluète culbutée\"}}},{\"category\":\"So\",\"key\":\"214C\",\"mappings\":{\"default\":{\"default\":\"symbole per\"}}},{\"category\":\"So\",\"key\":\"214D\",\"mappings\":{\"default\":{\"default\":\"aktieselskab\"}}},{\"category\":\"Ll\",\"key\":\"214E\",\"mappings\":{\"default\":{\"default\":\"minuscule f culbuté\"}}},{\"key\":\"2200\",\"mappings\":{\"default\":{\"default\":\"pour tous\"}},\"category\":\"Sm\"},{\"key\":\"2201\",\"mappings\":{\"default\":{\"default\":\"complément\"}},\"category\":\"Sm\"},{\"key\":\"2203\",\"mappings\":{\"default\":{\"default\":\"il existe\"}},\"category\":\"Sm\"},{\"key\":\"2204\",\"mappings\":{\"default\":{\"default\":\"il n'existe pas\"}},\"category\":\"Sm\"},{\"key\":\"2205\",\"mappings\":{\"default\":{\"default\":\"ensemble vide\"}},\"category\":\"Sm\"},{\"key\":\"2206\",\"mappings\":{\"default\":{\"default\":\"incrément\"}},\"category\":\"Sm\"},{\"key\":\"2208\",\"mappings\":{\"default\":{\"default\":\"appartient à\"}},\"category\":\"Sm\"},{\"key\":\"2209\",\"mappings\":{\"default\":{\"default\":\"n'appartient pas à\"}},\"category\":\"Sm\"},{\"key\":\"220A\",\"mappings\":{\"default\":{\"default\":\"appartient à\"}},\"category\":\"Sm\"},{\"key\":\"220B\",\"mappings\":{\"default\":{\"default\":\"contient comme élément\"}},\"category\":\"Sm\"},{\"key\":\"220C\",\"mappings\":{\"default\":{\"default\":\"ne contient pas comme élément\"}},\"category\":\"Sm\"},{\"key\":\"220D\",\"mappings\":{\"default\":{\"default\":\"contient comme élément\"}},\"category\":\"Sm\"},{\"key\":\"220E\",\"mappings\":{\"default\":{\"default\":\"ce qu'il fallait démontrer\"}},\"category\":\"Sm\"},{\"key\":\"220F\",\"mappings\":{\"default\":{\"default\":\"produit\"}},\"category\":\"Sm\"},{\"key\":\"2210\",\"mappings\":{\"default\":{\"default\":\"coproduit\"}},\"category\":\"Sm\"},{\"key\":\"2211\",\"mappings\":{\"default\":{\"default\":\"sommation\"}},\"category\":\"Sm\"},{\"key\":\"2212\",\"mappings\":{\"default\":{\"default\":\"moins\"}},\"category\":\"Sm\"},{\"key\":\"2213\",\"mappings\":{\"default\":{\"default\":\"moins ou plus\"}},\"category\":\"Sm\"},{\"key\":\"2214\",\"mappings\":{\"default\":{\"default\":\"plus pointé\"}},\"category\":\"Sm\"},{\"key\":\"2215\",\"mappings\":{\"default\":{\"default\":\"division\"}},\"category\":\"Sm\"},{\"key\":\"2216\",\"mappings\":{\"default\":{\"default\":\"différence d'ensembles\"}},\"category\":\"Sm\"},{\"key\":\"2217\",\"mappings\":{\"default\":{\"default\":\"opérateur astérisque\"}},\"category\":\"Sm\"},{\"key\":\"2218\",\"mappings\":{\"default\":{\"default\":\"opérateur rond\"}},\"category\":\"Sm\"},{\"key\":\"2219\",\"mappings\":{\"default\":{\"default\":\"point médian\"}},\"category\":\"Sm\"},{\"key\":\"221A\",\"mappings\":{\"default\":{\"default\":\"racine carrée\"}},\"category\":\"Sm\"},{\"key\":\"221B\",\"mappings\":{\"default\":{\"default\":\"racine cubique\"}},\"category\":\"Sm\"},{\"key\":\"221C\",\"mappings\":{\"default\":{\"default\":\"racine quatrième\"}},\"category\":\"Sm\"},{\"key\":\"221D\",\"mappings\":{\"default\":{\"default\":\"proportionnel à\"}},\"category\":\"Sm\"},{\"key\":\"221E\",\"mappings\":{\"default\":{\"default\":\"infini\"}},\"category\":\"Sm\"},{\"key\":\"221F\",\"mappings\":{\"default\":{\"default\":\"angle droit\"}},\"category\":\"Sm\"},{\"key\":\"2220\",\"mappings\":{\"default\":{\"default\":\"angle\"}},\"category\":\"Sm\"},{\"key\":\"2221\",\"mappings\":{\"default\":{\"default\":\"angle mesuré\"}},\"category\":\"Sm\"},{\"key\":\"2222\",\"mappings\":{\"default\":{\"default\":\"angle sphérique\"}},\"category\":\"Sm\"},{\"key\":\"2223\",\"mappings\":{\"default\":{\"default\":\"est un diviseur de\"}},\"category\":\"Sm\"},{\"key\":\"2224\",\"mappings\":{\"default\":{\"default\":\"n'est pas un diviseur de\"}},\"category\":\"Sm\"},{\"key\":\"2225\",\"mappings\":{\"default\":{\"default\":\"parallèle à\"}},\"category\":\"Sm\"},{\"key\":\"2226\",\"mappings\":{\"default\":{\"default\":\"non parallèle à\"}},\"category\":\"Sm\"},{\"key\":\"2227\",\"mappings\":{\"default\":{\"default\":\"et logique\"}},\"category\":\"Sm\"},{\"key\":\"2228\",\"mappings\":{\"default\":{\"default\":\"ou logique\"}},\"category\":\"Sm\"},{\"key\":\"2229\",\"mappings\":{\"default\":{\"default\":\"intersection\"}},\"category\":\"Sm\"},{\"key\":\"222A\",\"mappings\":{\"default\":{\"default\":\"union\"}},\"category\":\"Sm\"},{\"key\":\"222B\",\"mappings\":{\"default\":{\"default\":\"intégrale\"}},\"category\":\"Sm\"},{\"key\":\"222C\",\"mappings\":{\"default\":{\"default\":\"intégrale double\"}},\"category\":\"Sm\"},{\"key\":\"222D\",\"mappings\":{\"default\":{\"default\":\"intégrale triple\"}},\"category\":\"Sm\"},{\"key\":\"222E\",\"mappings\":{\"default\":{\"default\":\"intégrale de contour\"}},\"category\":\"Sm\"},{\"key\":\"222F\",\"mappings\":{\"default\":{\"default\":\"intégrale de surface\"}},\"category\":\"Sm\"},{\"key\":\"2230\",\"mappings\":{\"default\":{\"default\":\"intégrale de volume\"}},\"category\":\"Sm\"},{\"key\":\"2231\",\"mappings\":{\"default\":{\"default\":\"intégrale en sens négatif\"}},\"category\":\"Sm\"},{\"key\":\"2232\",\"mappings\":{\"default\":{\"default\":\"intégrale de contour en sens négatif\"}},\"category\":\"Sm\"},{\"key\":\"2233\",\"mappings\":{\"default\":{\"default\":\"intégrale de contour en sens positif\"}},\"category\":\"Sm\"},{\"key\":\"2234\",\"mappings\":{\"default\":{\"default\":\"par conséquent\"}},\"category\":\"Sm\"},{\"key\":\"2235\",\"mappings\":{\"default\":{\"default\":\"parce que\"}},\"category\":\"Sm\"},{\"key\":\"2236\",\"mappings\":{\"default\":{\"default\":\"rapport\"}},\"category\":\"Sm\"},{\"key\":\"2237\",\"mappings\":{\"default\":{\"default\":\"proportion\"}},\"category\":\"Sm\"},{\"key\":\"2238\",\"mappings\":{\"default\":{\"default\":\"moins pointé\"}},\"category\":\"Sm\"},{\"key\":\"2239\",\"mappings\":{\"default\":{\"default\":\"excès\"}},\"category\":\"Sm\"},{\"key\":\"223A\",\"mappings\":{\"default\":{\"default\":\"proportion géométrique\"}},\"category\":\"Sm\"},{\"key\":\"223B\",\"mappings\":{\"default\":{\"default\":\"homothétique\"}},\"category\":\"Sm\"},{\"key\":\"223C\",\"mappings\":{\"default\":{\"default\":\"opérateur tilde\"}},\"category\":\"Sm\"},{\"key\":\"223D\",\"mappings\":{\"default\":{\"default\":\"opérateur tilde renversé\"}},\"category\":\"Sm\"},{\"key\":\"223E\",\"mappings\":{\"default\":{\"default\":\"s couché renversé\"}},\"category\":\"Sm\"},{\"key\":\"223F\",\"mappings\":{\"default\":{\"default\":\"sinusoïde\"}},\"category\":\"Sm\"},{\"key\":\"2240\",\"mappings\":{\"default\":{\"default\":\"produit couronne\"}},\"category\":\"Sm\"},{\"key\":\"2241\",\"mappings\":{\"default\":{\"default\":\"non tilde\"}},\"category\":\"Sm\"},{\"key\":\"2242\",\"mappings\":{\"default\":{\"default\":\"moins tilde\"}},\"category\":\"Sm\"},{\"key\":\"2243\",\"mappings\":{\"default\":{\"default\":\"asymptotiquement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2244\",\"mappings\":{\"default\":{\"default\":\"non asymptotiquement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2245\",\"mappings\":{\"default\":{\"default\":\"approximativement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2246\",\"mappings\":{\"default\":{\"default\":\"approximativement mais non strictement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2247\",\"mappings\":{\"default\":{\"default\":\"ni approximativement ni strictement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2248\",\"mappings\":{\"default\":{\"default\":\"presque égal à\"}},\"category\":\"Sm\"},{\"key\":\"2249\",\"mappings\":{\"default\":{\"default\":\"non presque égal à\"}},\"category\":\"Sm\"},{\"key\":\"224A\",\"mappings\":{\"default\":{\"default\":\"presque égal ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"224B\",\"mappings\":{\"default\":{\"default\":\"triple tilde\"}},\"category\":\"Sm\"},{\"key\":\"224C\",\"mappings\":{\"default\":{\"default\":\"entièrement égal à\"}},\"category\":\"Sm\"},{\"key\":\"224D\",\"mappings\":{\"default\":{\"default\":\"équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"224E\",\"mappings\":{\"default\":{\"default\":\"géométriquement équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"224F\",\"mappings\":{\"default\":{\"default\":\"différence entre\"}},\"category\":\"Sm\"},{\"key\":\"2250\",\"mappings\":{\"default\":{\"default\":\"tend vers la limite\"}},\"category\":\"Sm\"},{\"key\":\"2251\",\"mappings\":{\"default\":{\"default\":\"géométriquement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2252\",\"mappings\":{\"default\":{\"default\":\"approximativement égal à ou image de\"}},\"category\":\"Sm\"},{\"key\":\"2253\",\"mappings\":{\"default\":{\"default\":\"image de ou approximativement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2254\",\"mappings\":{\"default\":{\"default\":\"deux points égal\"}},\"category\":\"Sm\"},{\"key\":\"2255\",\"mappings\":{\"default\":{\"default\":\"égal deux points\"}},\"category\":\"Sm\"},{\"key\":\"2256\",\"mappings\":{\"default\":{\"default\":\"rond dans égal\"}},\"category\":\"Sm\"},{\"key\":\"2257\",\"mappings\":{\"default\":{\"default\":\"égal avec rond en chef\"}},\"category\":\"Sm\"},{\"key\":\"2258\",\"mappings\":{\"default\":{\"default\":\"correspond à\"}},\"category\":\"Sm\"},{\"key\":\"2259\",\"mappings\":{\"default\":{\"default\":\"estime\"}},\"category\":\"Sm\"},{\"key\":\"225A\",\"mappings\":{\"default\":{\"default\":\"équiangulaire à\"}},\"category\":\"Sm\"},{\"key\":\"225B\",\"mappings\":{\"default\":{\"default\":\"égal avec étoile en chef\"}},\"category\":\"Sm\"},{\"key\":\"225C\",\"mappings\":{\"default\":{\"default\":\"égal delta\"}},\"category\":\"Sm\"},{\"key\":\"225D\",\"mappings\":{\"default\":{\"default\":\"égal par définition à\"}},\"category\":\"Sm\"},{\"key\":\"225E\",\"mappings\":{\"default\":{\"default\":\"mesuré par\"}},\"category\":\"Sm\"},{\"key\":\"225F\",\"mappings\":{\"default\":{\"default\":\"égalité en doute\"}},\"category\":\"Sm\"},{\"key\":\"2260\",\"mappings\":{\"default\":{\"default\":\"pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"2261\",\"mappings\":{\"default\":{\"default\":\"identique à\"}},\"category\":\"Sm\"},{\"key\":\"2262\",\"mappings\":{\"default\":{\"default\":\"non identique à\"}},\"category\":\"Sm\"},{\"key\":\"2263\",\"mappings\":{\"default\":{\"default\":\"strictement équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2264\",\"mappings\":{\"default\":{\"default\":\"plus petit ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2265\",\"mappings\":{\"default\":{\"default\":\"plus grand ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2266\",\"mappings\":{\"default\":{\"default\":\"plus petit que par dessus égal à\"}},\"category\":\"Sm\"},{\"key\":\"2267\",\"mappings\":{\"default\":{\"default\":\"plus grand que par dessus égal à\"}},\"category\":\"Sm\"},{\"key\":\"2268\",\"mappings\":{\"default\":{\"default\":\"plus petit mais pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"2269\",\"mappings\":{\"default\":{\"default\":\"plus grand mais pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"226A\",\"mappings\":{\"default\":{\"default\":\"beaucoup plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"226B\",\"mappings\":{\"default\":{\"default\":\"beaucoup plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"226C\",\"mappings\":{\"default\":{\"default\":\"entre\"}},\"category\":\"Sm\"},{\"key\":\"226D\",\"mappings\":{\"default\":{\"default\":\"non équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"226E\",\"mappings\":{\"default\":{\"default\":\"pas plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"226F\",\"mappings\":{\"default\":{\"default\":\"pas plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"2270\",\"mappings\":{\"default\":{\"default\":\"ni plus petit ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"2271\",\"mappings\":{\"default\":{\"default\":\"ni plus grand ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"2272\",\"mappings\":{\"default\":{\"default\":\"plus petit ou équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2273\",\"mappings\":{\"default\":{\"default\":\"plus grand ou équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2274\",\"mappings\":{\"default\":{\"default\":\"ni plus petit ni équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2275\",\"mappings\":{\"default\":{\"default\":\"ni plus grand ni équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2276\",\"mappings\":{\"default\":{\"default\":\"plus petit ou plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"2277\",\"mappings\":{\"default\":{\"default\":\"plus grand ou plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"2278\",\"mappings\":{\"default\":{\"default\":\"ni plus petit ni plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"2279\",\"mappings\":{\"default\":{\"default\":\"ni plus grand ni plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"227A\",\"mappings\":{\"default\":{\"default\":\"précède\"}},\"category\":\"Sm\"},{\"key\":\"227B\",\"mappings\":{\"default\":{\"default\":\"suit\"}},\"category\":\"Sm\"},{\"key\":\"227C\",\"mappings\":{\"default\":{\"default\":\"précède ou est égal à\"}},\"category\":\"Sm\"},{\"key\":\"227D\",\"mappings\":{\"default\":{\"default\":\"suit ou est égal à\"}},\"category\":\"Sm\"},{\"key\":\"227E\",\"mappings\":{\"default\":{\"default\":\"précède ou est équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"227F\",\"mappings\":{\"default\":{\"default\":\"suit ou est équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2280\",\"mappings\":{\"default\":{\"default\":\"ne précède pas\"}},\"category\":\"Sm\"},{\"key\":\"2281\",\"mappings\":{\"default\":{\"default\":\"ne suit pas\"}},\"category\":\"Sm\"},{\"key\":\"2282\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de\"}},\"category\":\"Sm\"},{\"key\":\"2283\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de\"}},\"category\":\"Sm\"},{\"key\":\"2284\",\"mappings\":{\"default\":{\"default\":\"pas un sous ensemble de\"}},\"category\":\"Sm\"},{\"key\":\"2285\",\"mappings\":{\"default\":{\"default\":\"pas un sur ensemble de\"}},\"category\":\"Sm\"},{\"key\":\"2286\",\"mappings\":{\"default\":{\"default\":\"sous ensemble ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2287\",\"mappings\":{\"default\":{\"default\":\"sur ensemble ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2288\",\"mappings\":{\"default\":{\"default\":\"ni un sous ensemble ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"2289\",\"mappings\":{\"default\":{\"default\":\"ni un sur ensemble ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"228A\",\"mappings\":{\"default\":{\"default\":\"sous ensemble mais pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"228B\",\"mappings\":{\"default\":{\"default\":\"sur ensemble mais pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"228C\",\"mappings\":{\"default\":{\"default\":\"multiensemble\"}},\"category\":\"Sm\"},{\"key\":\"228D\",\"mappings\":{\"default\":{\"default\":\"multiplication de multiensemble\"}},\"category\":\"Sm\"},{\"key\":\"228E\",\"mappings\":{\"default\":{\"default\":\"union de multiensemble\"}},\"category\":\"Sm\"},{\"key\":\"228F\",\"mappings\":{\"default\":{\"default\":\"image carrée de\"}},\"category\":\"Sm\"},{\"key\":\"2290\",\"mappings\":{\"default\":{\"default\":\"original carré de\"}},\"category\":\"Sm\"},{\"key\":\"2291\",\"mappings\":{\"default\":{\"default\":\"image carrée ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2292\",\"mappings\":{\"default\":{\"default\":\"original carré ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2293\",\"mappings\":{\"default\":{\"default\":\"chapeau carré\"}},\"category\":\"Sm\"},{\"key\":\"2294\",\"mappings\":{\"default\":{\"default\":\"coupe carrée\"}},\"category\":\"Sm\"},{\"key\":\"2295\",\"mappings\":{\"default\":{\"default\":\"plus cerclé\"}},\"category\":\"Sm\"},{\"key\":\"2296\",\"mappings\":{\"default\":{\"default\":\"moins cerclé\"}},\"category\":\"Sm\"},{\"key\":\"2297\",\"mappings\":{\"default\":{\"default\":\"multiplié par cerclé\"}},\"category\":\"Sm\"},{\"key\":\"2298\",\"mappings\":{\"default\":{\"default\":\"barre oblique de division cerclée\"}},\"category\":\"Sm\"},{\"key\":\"2299\",\"mappings\":{\"default\":{\"default\":\"opérateur point cerclé\"}},\"category\":\"Sm\"},{\"key\":\"229A\",\"mappings\":{\"default\":{\"default\":\"opérateur rond cerclé\"}},\"category\":\"Sm\"},{\"key\":\"229B\",\"mappings\":{\"default\":{\"default\":\"opérateur astérisque cerclé\"}},\"category\":\"Sm\"},{\"key\":\"229C\",\"mappings\":{\"default\":{\"default\":\"égal cerclé\"}},\"category\":\"Sm\"},{\"key\":\"229D\",\"mappings\":{\"default\":{\"default\":\"tiret cerclé\"}},\"category\":\"Sm\"},{\"key\":\"229E\",\"mappings\":{\"default\":{\"default\":\"plus encadré\"}},\"category\":\"Sm\"},{\"key\":\"229F\",\"mappings\":{\"default\":{\"default\":\"moins encadré\"}},\"category\":\"Sm\"},{\"key\":\"22A0\",\"mappings\":{\"default\":{\"default\":\"multiplié par encadré\"}},\"category\":\"Sm\"},{\"key\":\"22A1\",\"mappings\":{\"default\":{\"default\":\"opérateur point encadré\"}},\"category\":\"Sm\"},{\"key\":\"22A2\",\"mappings\":{\"default\":{\"default\":\"taquet droit\"}},\"category\":\"Sm\"},{\"key\":\"22A3\",\"mappings\":{\"default\":{\"default\":\"taquet gauche\"}},\"category\":\"Sm\"},{\"key\":\"22A4\",\"mappings\":{\"default\":{\"default\":\"taquet vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"22A5\",\"mappings\":{\"default\":{\"default\":\"taquet vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"22A6\",\"mappings\":{\"default\":{\"default\":\"assertion\"}},\"category\":\"Sm\"},{\"key\":\"22A7\",\"mappings\":{\"default\":{\"default\":\"modélise\"}},\"category\":\"Sm\"},{\"key\":\"22A8\",\"mappings\":{\"default\":{\"default\":\"vrai\"}},\"category\":\"Sm\"},{\"key\":\"22A9\",\"mappings\":{\"default\":{\"default\":\"oblige\"}},\"category\":\"Sm\"},{\"key\":\"22AA\",\"mappings\":{\"default\":{\"default\":\"barre verticale triple avec tourniquet à droite\"}},\"category\":\"Sm\"},{\"key\":\"22AB\",\"mappings\":{\"default\":{\"default\":\"barre verticale double avec tourniquet à droite double\"}},\"category\":\"Sm\"},{\"key\":\"22AC\",\"mappings\":{\"default\":{\"default\":\"ne prouve pas\"}},\"category\":\"Sm\"},{\"key\":\"22AD\",\"mappings\":{\"default\":{\"default\":\"pas vrai\"}},\"category\":\"Sm\"},{\"key\":\"22AE\",\"mappings\":{\"default\":{\"default\":\"n'oblige pas\"}},\"category\":\"Sm\"},{\"key\":\"22AF\",\"mappings\":{\"default\":{\"default\":\"non barre verticale double avec tourniquet à droite double\"}},\"category\":\"Sm\"},{\"key\":\"22B0\",\"mappings\":{\"default\":{\"default\":\"précède sous relation\"}},\"category\":\"Sm\"},{\"key\":\"22B1\",\"mappings\":{\"default\":{\"default\":\"suit sous relation\"}},\"category\":\"Sm\"},{\"key\":\"22B2\",\"mappings\":{\"default\":{\"default\":\"sous groupe normal de\"}},\"category\":\"Sm\"},{\"key\":\"22B3\",\"mappings\":{\"default\":{\"default\":\"contient comme sous groupe normal\"}},\"category\":\"Sm\"},{\"key\":\"22B4\",\"mappings\":{\"default\":{\"default\":\"sous groupe normal ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"22B5\",\"mappings\":{\"default\":{\"default\":\"contient comme sous groupe normal ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"22B6\",\"mappings\":{\"default\":{\"default\":\"original de\"}},\"category\":\"Sm\"},{\"key\":\"22B7\",\"mappings\":{\"default\":{\"default\":\"image de\"}},\"category\":\"Sm\"},{\"key\":\"22B8\",\"mappings\":{\"default\":{\"default\":\"multijection\"}},\"category\":\"Sm\"},{\"key\":\"22B9\",\"mappings\":{\"default\":{\"default\":\"matrice hermitienne conjuguée\"}},\"category\":\"Sm\"},{\"key\":\"22BA\",\"mappings\":{\"default\":{\"default\":\"intercale\"}},\"category\":\"Sm\"},{\"key\":\"22BB\",\"mappings\":{\"default\":{\"default\":\"ou exclusif\"}},\"category\":\"Sm\"},{\"key\":\"22BC\",\"mappings\":{\"default\":{\"default\":\"non et\"}},\"category\":\"Sm\"},{\"key\":\"22BD\",\"mappings\":{\"default\":{\"default\":\"non ou\"}},\"category\":\"Sm\"},{\"key\":\"22BF\",\"mappings\":{\"default\":{\"default\":\"triangle rectangle\"}},\"category\":\"Sm\"},{\"key\":\"22C0\",\"mappings\":{\"default\":{\"default\":\"et logique de la famille\"}},\"category\":\"Sm\"},{\"key\":\"22C1\",\"mappings\":{\"default\":{\"default\":\"ou logique de la famille\"}},\"category\":\"Sm\"},{\"key\":\"22C2\",\"mappings\":{\"default\":{\"default\":\"intersection de la famille\"}},\"category\":\"Sm\"},{\"key\":\"22C3\",\"mappings\":{\"default\":{\"default\":\"réunion de la famille\"}},\"category\":\"Sm\"},{\"key\":\"22C4\",\"mappings\":{\"default\":{\"default\":\"opérateur losange\"}},\"category\":\"Sm\"},{\"key\":\"22C5\",\"mappings\":{\"default\":{\"default\":\"opérateur point\"}},\"category\":\"Sm\"},{\"key\":\"22C6\",\"mappings\":{\"default\":{\"default\":\"opérateur étoile\"}},\"category\":\"Sm\"},{\"key\":\"22C7\",\"mappings\":{\"default\":{\"default\":\"divisé multiplié\"}},\"category\":\"Sm\"},{\"key\":\"22C8\",\"mappings\":{\"default\":{\"default\":\"nœud papillon\"}},\"category\":\"Sm\"},{\"key\":\"22C9\",\"mappings\":{\"default\":{\"default\":\"produit semi direct à gauche de facteur normal\"}},\"category\":\"Sm\"},{\"key\":\"22CA\",\"mappings\":{\"default\":{\"default\":\"produit semi direct à droite de facteur normal\"}},\"category\":\"Sm\"},{\"key\":\"22CB\",\"mappings\":{\"default\":{\"default\":\"produit semi direct à gauche\"}},\"category\":\"Sm\"},{\"key\":\"22CC\",\"mappings\":{\"default\":{\"default\":\"produit semi direct à droite\"}},\"category\":\"Sm\"},{\"key\":\"22CD\",\"mappings\":{\"default\":{\"default\":\"moins tilde renversé\"}},\"category\":\"Sm\"},{\"key\":\"22CE\",\"mappings\":{\"default\":{\"default\":\"ou logique recourbé\"}},\"category\":\"Sm\"},{\"key\":\"22CF\",\"mappings\":{\"default\":{\"default\":\"et logique recourbé\"}},\"category\":\"Sm\"},{\"key\":\"22D0\",\"mappings\":{\"default\":{\"default\":\"sous ensemble double\"}},\"category\":\"Sm\"},{\"key\":\"22D1\",\"mappings\":{\"default\":{\"default\":\"sur ensemble double\"}},\"category\":\"Sm\"},{\"key\":\"22D2\",\"mappings\":{\"default\":{\"default\":\"intersection double\"}},\"category\":\"Sm\"},{\"key\":\"22D3\",\"mappings\":{\"default\":{\"default\":\"union double\"}},\"category\":\"Sm\"},{\"key\":\"22D4\",\"mappings\":{\"default\":{\"default\":\"fourche\"}},\"category\":\"Sm\"},{\"key\":\"22D5\",\"mappings\":{\"default\":{\"default\":\"égal et parallèle à\"}},\"category\":\"Sm\"},{\"key\":\"22D6\",\"mappings\":{\"default\":{\"default\":\"plus petit que pointé\"}},\"category\":\"Sm\"},{\"key\":\"22D7\",\"mappings\":{\"default\":{\"default\":\"plus grand que pointé\"}},\"category\":\"Sm\"},{\"key\":\"22D8\",\"mappings\":{\"default\":{\"default\":\"considérablement plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"22D9\",\"mappings\":{\"default\":{\"default\":\"considérablement plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"22DA\",\"mappings\":{\"default\":{\"default\":\"plus petit ou égal ou plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"22DB\",\"mappings\":{\"default\":{\"default\":\"plus grand ou égal ou plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"22DC\",\"mappings\":{\"default\":{\"default\":\"égal ou plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"22DD\",\"mappings\":{\"default\":{\"default\":\"égal à deux lignes ou supérieur à\"}},\"category\":\"Sm\"},{\"key\":\"22DE\",\"mappings\":{\"default\":{\"default\":\"égal ou précède\"}},\"category\":\"Sm\"},{\"key\":\"22DF\",\"mappings\":{\"default\":{\"default\":\"égal ou suit\"}},\"category\":\"Sm\"},{\"key\":\"22E0\",\"mappings\":{\"default\":{\"default\":\"ni précédant ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"22E1\",\"mappings\":{\"default\":{\"default\":\"ni suivant ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"22E2\",\"mappings\":{\"default\":{\"default\":\"ni image carrée ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"22E3\",\"mappings\":{\"default\":{\"default\":\"ni original carré ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"22E4\",\"mappings\":{\"default\":{\"default\":\"image carré ou différent de\"}},\"category\":\"Sm\"},{\"key\":\"22E5\",\"mappings\":{\"default\":{\"default\":\"original carré ou différent de\"}},\"category\":\"Sm\"},{\"key\":\"22E6\",\"mappings\":{\"default\":{\"default\":\"plus petit mais non équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"22E7\",\"mappings\":{\"default\":{\"default\":\"plus grand mais non équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"22E8\",\"mappings\":{\"default\":{\"default\":\"précédant mais non équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"22E9\",\"mappings\":{\"default\":{\"default\":\"suivant mais non équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"22EA\",\"mappings\":{\"default\":{\"default\":\"pas un sous groupe normal de\"}},\"category\":\"Sm\"},{\"key\":\"22EB\",\"mappings\":{\"default\":{\"default\":\"ne contient pas comme sous groupe normal\"}},\"category\":\"Sm\"},{\"key\":\"22EC\",\"mappings\":{\"default\":{\"default\":\"ni sous groupe normal ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"22ED\",\"mappings\":{\"default\":{\"default\":\"ni égal ni contenant comme sous  groupe normal\"}},\"category\":\"Sm\"},{\"key\":\"22EE\",\"mappings\":{\"default\":{\"default\":\"trois points suspendus\"}},\"category\":\"Sm\"},{\"key\":\"22EF\",\"mappings\":{\"default\":{\"default\":\"trois points médians\"}},\"category\":\"Sm\"},{\"key\":\"22F0\",\"mappings\":{\"default\":{\"default\":\"trois points diagonaux vers le coin haut à droite\"}},\"category\":\"Sm\"},{\"key\":\"22F1\",\"mappings\":{\"default\":{\"default\":\"trois points diagonaux vers le coin bas à droite\"}},\"category\":\"Sm\"},{\"key\":\"22F2\",\"mappings\":{\"default\":{\"default\":\"appartient à avec long trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22F3\",\"mappings\":{\"default\":{\"default\":\"appartient à avec barre verticale au bout du trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22F4\",\"mappings\":{\"default\":{\"default\":\"petit appartient à avec barre verticale au bout du trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22F5\",\"mappings\":{\"default\":{\"default\":\"appartient à avec point en chef\"}},\"category\":\"Sm\"},{\"key\":\"22F6\",\"mappings\":{\"default\":{\"default\":\"appartient à avec trait en chef\"}},\"category\":\"Sm\"},{\"key\":\"22F7\",\"mappings\":{\"default\":{\"default\":\"petit appartient à avec trait en chef\"}},\"category\":\"Sm\"},{\"key\":\"22F8\",\"mappings\":{\"default\":{\"default\":\"appartient à avec trait souscrit\"}},\"category\":\"Sm\"},{\"key\":\"22F9\",\"mappings\":{\"default\":{\"default\":\"appartient à avec deux traits horizontaux\"}},\"category\":\"Sm\"},{\"key\":\"22FA\",\"mappings\":{\"default\":{\"default\":\"contient avec long trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22FB\",\"mappings\":{\"default\":{\"default\":\"contient avec barre verticale au bout du trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22FC\",\"mappings\":{\"default\":{\"default\":\"petit contient avec barre verticale au bout du trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22FD\",\"mappings\":{\"default\":{\"default\":\"contient avec trait en chef\"}},\"category\":\"Sm\"},{\"key\":\"22FE\",\"mappings\":{\"default\":{\"default\":\"petit contient avec trait en chef\"}},\"category\":\"Sm\"},{\"key\":\"22FF\",\"mappings\":{\"default\":{\"default\":\"appartient à un sac en notation z\"}},\"category\":\"Sm\"},{\"key\":\"2300\",\"mappings\":{\"default\":{\"default\":\"diamètre\"}},\"category\":\"So\"},{\"key\":\"2302\",\"mappings\":{\"default\":{\"default\":\"maison\"}},\"category\":\"So\"},{\"key\":\"2305\",\"mappings\":{\"default\":{\"default\":\"projective\"}},\"category\":\"So\"},{\"key\":\"2306\",\"mappings\":{\"default\":{\"default\":\"perspective\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2307\",\"mappings\":{\"default\":{\"default\":\"ligne ondulée\"}}},{\"key\":\"2310\",\"mappings\":{\"default\":{\"default\":\"négation réfléchi\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2311\",\"mappings\":{\"default\":{\"default\":\"pastille carrée\"}}},{\"key\":\"2312\",\"mappings\":{\"default\":{\"default\":\"arc\"}},\"category\":\"So\"},{\"key\":\"2313\",\"mappings\":{\"default\":{\"default\":\"segment\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2314\",\"mappings\":{\"default\":{\"default\":\"secteur\"}}},{\"category\":\"So\",\"key\":\"2795\",\"mappings\":{\"default\":{\"default\":\"plus gras\"}}},{\"category\":\"So\",\"key\":\"2796\",\"mappings\":{\"default\":{\"default\":\"moins gras\"}}},{\"category\":\"So\",\"key\":\"2797\",\"mappings\":{\"default\":{\"default\":\"division gras\"}}},{\"category\":\"So\",\"key\":\"27B0\",\"mappings\":{\"default\":{\"default\":\"boucle recourbée\"}}},{\"category\":\"So\",\"key\":\"27BF\",\"mappings\":{\"default\":{\"default\":\"double boucle recourbée\"}}},{\"key\":\"27C1\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc inscrit dans triangle blanc\"}},\"category\":\"Sm\"},{\"key\":\"27C2\",\"mappings\":{\"default\":{\"default\":\"perpendiculaire à\"}},\"category\":\"Sm\"},{\"key\":\"27C3\",\"mappings\":{\"default\":{\"default\":\"sous ensemble ouvert\"}},\"category\":\"Sm\"},{\"key\":\"27C4\",\"mappings\":{\"default\":{\"default\":\"sur ensemble ouvert\"}},\"category\":\"Sm\"},{\"key\":\"27C7\",\"mappings\":{\"default\":{\"default\":\"ou avec point inscrit\"}},\"category\":\"Sm\"},{\"key\":\"27C8\",\"mappings\":{\"default\":{\"default\":\"sous ensemble précédé d'une barre oblique inversée\"}},\"category\":\"Sm\"},{\"key\":\"27C9\",\"mappings\":{\"default\":{\"default\":\"sur ensemble suivi d'une barre oblique\"}},\"category\":\"Sm\"},{\"key\":\"27CA\",\"mappings\":{\"default\":{\"default\":\"barre verticale À une traverse\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27CB\",\"mappings\":{\"default\":{\"default\":\"diagonale mathématique ascendante\"}}},{\"key\":\"27CC\",\"mappings\":{\"default\":{\"default\":\"grande division\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27CD\",\"mappings\":{\"default\":{\"default\":\"diagonale mathématique descendante\"}}},{\"category\":\"Sm\",\"key\":\"27CE\",\"mappings\":{\"default\":{\"default\":\"et logique encadré\"}}},{\"category\":\"Sm\",\"key\":\"27CF\",\"mappings\":{\"default\":{\"default\":\"ou logique encadré\"}}},{\"category\":\"Sm\",\"key\":\"27D0\",\"mappings\":{\"default\":{\"default\":\"losange blanc à point centré\"}}},{\"key\":\"27D1\",\"mappings\":{\"default\":{\"default\":\"et pointé\"}},\"category\":\"Sm\"},{\"key\":\"27D2\",\"mappings\":{\"default\":{\"default\":\"appartient À ouvert vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"27D3\",\"mappings\":{\"default\":{\"default\":\"coin inférieur droit pointé\"}},\"category\":\"Sm\"},{\"key\":\"27D4\",\"mappings\":{\"default\":{\"default\":\"coin supérieur gauche pointé\"}},\"category\":\"Sm\"},{\"key\":\"27D5\",\"mappings\":{\"default\":{\"default\":\"jointure externe gauche\"}},\"category\":\"Sm\"},{\"key\":\"27D6\",\"mappings\":{\"default\":{\"default\":\"jointure externe droite\"}},\"category\":\"Sm\"},{\"key\":\"27D7\",\"mappings\":{\"default\":{\"default\":\"jointure externe complète\"}},\"category\":\"Sm\"},{\"key\":\"27D8\",\"mappings\":{\"default\":{\"default\":\"grand taquet vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"27D9\",\"mappings\":{\"default\":{\"default\":\"grand taquet vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"27DA\",\"mappings\":{\"default\":{\"default\":\"double tourniquet bilatéral\"}},\"category\":\"Sm\"},{\"key\":\"27DB\",\"mappings\":{\"default\":{\"default\":\"tourniquet bilatéral\"}},\"category\":\"Sm\"},{\"key\":\"27DC\",\"mappings\":{\"default\":{\"default\":\"multijection gauche\"}},\"category\":\"Sm\"},{\"key\":\"27DD\",\"mappings\":{\"default\":{\"default\":\"long taquet droit\"}},\"category\":\"Sm\"},{\"key\":\"27DE\",\"mappings\":{\"default\":{\"default\":\"long taquet gauche\"}},\"category\":\"Sm\"},{\"key\":\"27DF\",\"mappings\":{\"default\":{\"default\":\"taquet vers le haut surmonté d'un cercle\"}},\"category\":\"Sm\"},{\"key\":\"27E0\",\"mappings\":{\"default\":{\"default\":\"losange coupé\"}},\"category\":\"Sm\"},{\"key\":\"27E1\",\"mappings\":{\"default\":{\"default\":\"losange concave blanc\"}},\"category\":\"Sm\"},{\"key\":\"27E2\",\"mappings\":{\"default\":{\"default\":\"losange concave blanc avec trait à gauche\"}},\"category\":\"Sm\"},{\"key\":\"27E3\",\"mappings\":{\"default\":{\"default\":\"losange concave blanc avec trait à droite\"}},\"category\":\"Sm\"},{\"key\":\"27E4\",\"mappings\":{\"default\":{\"default\":\"carré blanc avec trait à gauche\"}},\"category\":\"Sm\"},{\"key\":\"27E5\",\"mappings\":{\"default\":{\"default\":\"carré blanc avec trait à droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"292B\",\"mappings\":{\"default\":{\"default\":\"diagonale montante sur diagonale descendante\"}}},{\"category\":\"Sm\",\"key\":\"292C\",\"mappings\":{\"default\":{\"default\":\"diagonale descendante sur diagonale montante\"}}},{\"category\":\"Sm\",\"key\":\"2980\",\"mappings\":{\"default\":{\"default\":\"délimiteur triple barre verticale\"}}},{\"category\":\"Sm\",\"key\":\"2981\",\"mappings\":{\"default\":{\"default\":\"boulet\"}}},{\"category\":\"Sm\",\"key\":\"2982\",\"mappings\":{\"default\":{\"default\":\"deux points de la notation z\"}}},{\"category\":\"Sm\",\"key\":\"2999\",\"mappings\":{\"default\":{\"default\":\"clôture pointillée\"}}},{\"key\":\"299A\",\"mappings\":{\"default\":{\"default\":\"ligne verticale en zigzag\"}},\"category\":\"Sm\"},{\"key\":\"29B0\",\"mappings\":{\"default\":{\"default\":\"ensemble vide réfléchi\"}},\"category\":\"Sm\"},{\"key\":\"29B1\",\"mappings\":{\"default\":{\"default\":\"ensemble vide barre en chef\"}},\"category\":\"Sm\"},{\"key\":\"29B2\",\"mappings\":{\"default\":{\"default\":\"ensemble vide petit cercle en chef\"}},\"category\":\"Sm\"},{\"key\":\"29B5\",\"mappings\":{\"default\":{\"default\":\"cercle à barre horizontale\"}},\"category\":\"Sm\"},{\"key\":\"29B6\",\"mappings\":{\"default\":{\"default\":\"barre verticale cerclée\"}},\"category\":\"Sm\"},{\"key\":\"29B7\",\"mappings\":{\"default\":{\"default\":\"parallèles cerclées\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29B8\",\"mappings\":{\"default\":{\"default\":\"barre oblique inversée cerclée\"}}},{\"key\":\"29B9\",\"mappings\":{\"default\":{\"default\":\"perpendiculaire cerclé\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29BA\",\"mappings\":{\"default\":{\"default\":\"cercle divisé par une barre horizontale et une barre verticale dans la moitié supérieure\"}}},{\"key\":\"29BB\",\"mappings\":{\"default\":{\"default\":\"cercle superposé d'un x\"}},\"category\":\"Sm\"},{\"key\":\"29BC\",\"mappings\":{\"default\":{\"default\":\"division pivoté en sens antihoraire cerclé\"}},\"category\":\"Sm\"},{\"key\":\"29BE\",\"mappings\":{\"default\":{\"default\":\"puce blanche cerclée\"}},\"category\":\"Sm\"},{\"key\":\"29BF\",\"mappings\":{\"default\":{\"default\":\"puce cerclée\"}},\"category\":\"Sm\"},{\"key\":\"29C0\",\"mappings\":{\"default\":{\"default\":\"inférieur à cerclé\"}},\"category\":\"Sm\"},{\"key\":\"29C1\",\"mappings\":{\"default\":{\"default\":\"supérieur à cerclé\"}},\"category\":\"Sm\"},{\"key\":\"29C2\",\"mappings\":{\"default\":{\"default\":\"cercle avec petit cercle à droite\"}},\"category\":\"Sm\"},{\"key\":\"29C3\",\"mappings\":{\"default\":{\"default\":\"cercle avec deux petits traits horizontaux à droite\"}},\"category\":\"Sm\"},{\"key\":\"29C4\",\"mappings\":{\"default\":{\"default\":\"oblique encadrée\"}},\"category\":\"Sm\"},{\"key\":\"29C5\",\"mappings\":{\"default\":{\"default\":\"oblique inversée encadrée\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29C6\",\"mappings\":{\"default\":{\"default\":\"astérisque encadré\"}}},{\"category\":\"Sm\",\"key\":\"29C7\",\"mappings\":{\"default\":{\"default\":\"petite cercle encadré\"}}},{\"category\":\"Sm\",\"key\":\"29C8\",\"mappings\":{\"default\":{\"default\":\"carré encadré\"}}},{\"key\":\"29C9\",\"mappings\":{\"default\":{\"default\":\"carrés se chevauchant\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29CA\",\"mappings\":{\"default\":{\"default\":\"triangle pointé en chef\"}}},{\"category\":\"Sm\",\"key\":\"29CB\",\"mappings\":{\"default\":{\"default\":\"triangle à barre souscrite\"}}},{\"category\":\"Sm\",\"key\":\"29CC\",\"mappings\":{\"default\":{\"default\":\"s inscrit dans triangle\"}}},{\"key\":\"29CD\",\"mappings\":{\"default\":{\"default\":\"triangle à empattements inférieurs\"}},\"category\":\"Sm\"},{\"key\":\"29CE\",\"mappings\":{\"default\":{\"default\":\"triangle droit par dessus triangle gauche\"}},\"category\":\"Sm\"},{\"key\":\"29CF\",\"mappings\":{\"default\":{\"default\":\"triangle gauche à gauche d'une barre verticale\"}},\"category\":\"Sm\"},{\"key\":\"29D0\",\"mappings\":{\"default\":{\"default\":\"triangle droit à droite d'une barre verticale\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29D1\",\"mappings\":{\"default\":{\"default\":\"nœud papillon à aile gauche noire\"}}},{\"category\":\"Sm\",\"key\":\"29D2\",\"mappings\":{\"default\":{\"default\":\"nœud papillon à aile droite noire\"}}},{\"category\":\"Sm\",\"key\":\"29D3\",\"mappings\":{\"default\":{\"default\":\"nœud papillon noir\"}}},{\"category\":\"Sm\",\"key\":\"29D4\",\"mappings\":{\"default\":{\"default\":\"multiplication à moitié gauche noircie\"}}},{\"category\":\"Sm\",\"key\":\"29D5\",\"mappings\":{\"default\":{\"default\":\"multiplication à moitié droite noircie\"}}},{\"category\":\"Sm\",\"key\":\"29D6\",\"mappings\":{\"default\":{\"default\":\"sablier blanc\"}}},{\"category\":\"Sm\",\"key\":\"29D7\",\"mappings\":{\"default\":{\"default\":\"sablier noir\"}}},{\"key\":\"29DC\",\"mappings\":{\"default\":{\"default\":\"infini incomplet\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29DD\",\"mappings\":{\"default\":{\"default\":\"lorgnon\"}}},{\"key\":\"29DE\",\"mappings\":{\"default\":{\"default\":\"infini nié par une barre verticale\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29DF\",\"mappings\":{\"default\":{\"default\":\"multijection à deux têtes\"}}},{\"category\":\"Sm\",\"key\":\"29E0\",\"mappings\":{\"default\":{\"default\":\"carré ombré\"}}},{\"category\":\"Sm\",\"key\":\"29E1\",\"mappings\":{\"default\":{\"default\":\"augmente avec\"}}},{\"category\":\"Sm\",\"key\":\"29E2\",\"mappings\":{\"default\":{\"default\":\"produit de permutation\"}}},{\"key\":\"29E3\",\"mappings\":{\"default\":{\"default\":\"égale à et parallèle à incliné\"}},\"category\":\"Sm\"},{\"key\":\"29E4\",\"mappings\":{\"default\":{\"default\":\"égale à et parallèle à incliné surmontés d'un tilde\"}},\"category\":\"Sm\"},{\"key\":\"29E5\",\"mappings\":{\"default\":{\"default\":\"identique à et parallèle à incliné\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29E6\",\"mappings\":{\"default\":{\"default\":\"gleich stark\"}}},{\"category\":\"Sm\",\"key\":\"29E7\",\"mappings\":{\"default\":{\"default\":\"thermodynamique\"}}},{\"category\":\"Sm\",\"key\":\"29E8\",\"mappings\":{\"default\":{\"default\":\"triangle pointe vers le bas à moitié gauche noire\"}}},{\"category\":\"Sm\",\"key\":\"29E9\",\"mappings\":{\"default\":{\"default\":\"triangle pointe vers le bas à moitié droite noire\"}}},{\"key\":\"29EB\",\"mappings\":{\"default\":{\"default\":\"losange fuselé noir\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29EE\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à carré blanc\"}}},{\"category\":\"Sm\",\"key\":\"29EF\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à carré noir\"}}},{\"category\":\"Sm\",\"key\":\"29F0\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à losange blanc\"}}},{\"category\":\"Sm\",\"key\":\"29F1\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à losange noir\"}}},{\"category\":\"Sm\",\"key\":\"29F2\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à cercle blanc\"}}},{\"category\":\"Sm\",\"key\":\"29F3\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à cercle noir\"}}},{\"key\":\"29F4\",\"mappings\":{\"default\":{\"default\":\"règle différée\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29F5\",\"mappings\":{\"default\":{\"default\":\"opérateur barre oblique inversée\"}}},{\"key\":\"29F6\",\"mappings\":{\"default\":{\"default\":\"barre oblique avec barre en chef\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29F7\",\"mappings\":{\"default\":{\"default\":\"barre oblique inversée à traverse horizontale\"}}},{\"category\":\"Sm\",\"key\":\"29F8\",\"mappings\":{\"default\":{\"default\":\"grande barre oblique\"}}},{\"category\":\"Sm\",\"key\":\"29F9\",\"mappings\":{\"default\":{\"default\":\"grande barre oblique inversée\"}}},{\"category\":\"Sm\",\"key\":\"29FA\",\"mappings\":{\"default\":{\"default\":\"double plus\"}}},{\"category\":\"Sm\",\"key\":\"29FB\",\"mappings\":{\"default\":{\"default\":\"triple plus\"}}},{\"category\":\"Sm\",\"key\":\"29FE\",\"mappings\":{\"default\":{\"default\":\"tiny\"}}},{\"category\":\"Sm\",\"key\":\"29FF\",\"mappings\":{\"default\":{\"default\":\"miny\"}}},{\"category\":\"Sm\",\"key\":\"2A00\",\"mappings\":{\"default\":{\"default\":\"opérateur point cerclé n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A01\",\"mappings\":{\"default\":{\"default\":\"opérateur plus cerclé n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A02\",\"mappings\":{\"default\":{\"default\":\"opérateur multiplié par cerclé n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A03\",\"mappings\":{\"default\":{\"default\":\"opérateur union n aire pointé\"}}},{\"category\":\"Sm\",\"key\":\"2A04\",\"mappings\":{\"default\":{\"default\":\"opérateur union n aire avec plus\"}}},{\"category\":\"Sm\",\"key\":\"2A05\",\"mappings\":{\"default\":{\"default\":\"opérateur intersection carré n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A06\",\"mappings\":{\"default\":{\"default\":\"opérateur union carré n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A07\",\"mappings\":{\"default\":{\"default\":\"opérateur deux et logiques\"}}},{\"category\":\"Sm\",\"key\":\"2A08\",\"mappings\":{\"default\":{\"default\":\"opérateur deux ou logiques\"}}},{\"category\":\"Sm\",\"key\":\"2A09\",\"mappings\":{\"default\":{\"default\":\"opérateur multiplié par n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A0A\",\"mappings\":{\"default\":{\"default\":\"sommation modulo deux\"}}},{\"category\":\"Sm\",\"key\":\"2A0B\",\"mappings\":{\"default\":{\"default\":\"sommation avec intégrale\"}}},{\"key\":\"2A0C\",\"mappings\":{\"default\":{\"default\":\"intégrale quadruple\"}},\"category\":\"Sm\"},{\"key\":\"2A0D\",\"mappings\":{\"default\":{\"default\":\"intégrale à partie finie\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A0E\",\"mappings\":{\"default\":{\"default\":\"intégrale à deux barres horizontales\"}}},{\"category\":\"Sm\",\"key\":\"2A0F\",\"mappings\":{\"default\":{\"default\":\"moyenne d'intégrale à barre oblique inversée\"}}},{\"key\":\"2A10\",\"mappings\":{\"default\":{\"default\":\"fonction de circulation\"}},\"category\":\"Sm\"},{\"key\":\"2A11\",\"mappings\":{\"default\":{\"default\":\"intégrale en sens positif\"}},\"category\":\"Sm\"},{\"key\":\"2A12\",\"mappings\":{\"default\":{\"default\":\"intégrale de ligne à chemin rectangulaire autour du pôle\"}},\"category\":\"Sm\"},{\"key\":\"2A13\",\"mappings\":{\"default\":{\"default\":\"intégrale de ligne à chemin semi circulaire autour du pôle\"}},\"category\":\"Sm\"},{\"key\":\"2A14\",\"mappings\":{\"default\":{\"default\":\"intégrale de ligne évitant le pôle\"}},\"category\":\"Sm\"},{\"key\":\"2A15\",\"mappings\":{\"default\":{\"default\":\"intégrale autour d'un opérateur point\"}},\"category\":\"Sm\"},{\"key\":\"2A16\",\"mappings\":{\"default\":{\"default\":\"intégrale quaternion\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A18\",\"mappings\":{\"default\":{\"default\":\"intégrale au signe multiplié par\"}}},{\"category\":\"Sm\",\"key\":\"2A19\",\"mappings\":{\"default\":{\"default\":\"intégrale à signe intersection\"}}},{\"category\":\"Sm\",\"key\":\"2A1A\",\"mappings\":{\"default\":{\"default\":\"intégrale à signe union\"}}},{\"category\":\"Sm\",\"key\":\"2A1B\",\"mappings\":{\"default\":{\"default\":\"intégrale à barre en chef\"}}},{\"category\":\"Sm\",\"key\":\"2A1C\",\"mappings\":{\"default\":{\"default\":\"intégrale à barre souscrite\"}}},{\"category\":\"Sm\",\"key\":\"2A1D\",\"mappings\":{\"default\":{\"default\":\"jointure\"}}},{\"category\":\"Sm\",\"key\":\"2A1E\",\"mappings\":{\"default\":{\"default\":\"gros opérateur triangle gauche\"}}},{\"category\":\"Sm\",\"key\":\"2A1F\",\"mappings\":{\"default\":{\"default\":\"composition de schémas en notation z\"}}},{\"category\":\"Sm\",\"key\":\"2A20\",\"mappings\":{\"default\":{\"default\":\"tubage de schémas en notation z\"}}},{\"category\":\"Sm\",\"key\":\"2A21\",\"mappings\":{\"default\":{\"default\":\"projection de schémas en notation z\"}}},{\"key\":\"2A22\",\"mappings\":{\"default\":{\"default\":\"plus surmonté d'un petit cercle\"}},\"category\":\"Sm\"},{\"key\":\"2A23\",\"mappings\":{\"default\":{\"default\":\"plus surmonté d'un circonflexe\"}},\"category\":\"Sm\"},{\"key\":\"2A24\",\"mappings\":{\"default\":{\"default\":\"plus surmonté d'un tilde\"}},\"category\":\"Sm\"},{\"key\":\"2A25\",\"mappings\":{\"default\":{\"default\":\"plus à point souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A26\",\"mappings\":{\"default\":{\"default\":\"plus à tilde souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A27\",\"mappings\":{\"default\":{\"default\":\"plus à chiffre deux souscrit\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A28\",\"mappings\":{\"default\":{\"default\":\"plus à triangle noir\"}}},{\"key\":\"2A29\",\"mappings\":{\"default\":{\"default\":\"moins surmonté d'une virgule\"}},\"category\":\"Sm\"},{\"key\":\"2A2A\",\"mappings\":{\"default\":{\"default\":\"moins à point souscrit\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A2B\",\"mappings\":{\"default\":{\"default\":\"moins à points descendants\"}}},{\"category\":\"Sm\",\"key\":\"2A2C\",\"mappings\":{\"default\":{\"default\":\"moins à points ascendants\"}}},{\"key\":\"2A2D\",\"mappings\":{\"default\":{\"default\":\"plus dans demi cercle gauche\"}},\"category\":\"Sm\"},{\"key\":\"2A2E\",\"mappings\":{\"default\":{\"default\":\"plus dans demi cercle droit\"}},\"category\":\"Sm\"},{\"key\":\"2A2F\",\"mappings\":{\"default\":{\"default\":\"produit vectoriel\"}},\"category\":\"Sm\"},{\"key\":\"2A30\",\"mappings\":{\"default\":{\"default\":\"multiplication à point en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A31\",\"mappings\":{\"default\":{\"default\":\"multiplication à barre souscrite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A32\",\"mappings\":{\"default\":{\"default\":\"produit semi direct fermé en bas\"}}},{\"key\":\"2A33\",\"mappings\":{\"default\":{\"default\":\"produit fusionné\"}},\"category\":\"Sm\"},{\"key\":\"2A34\",\"mappings\":{\"default\":{\"default\":\"multiplication dans demi cercle gauche\"}},\"category\":\"Sm\"},{\"key\":\"2A35\",\"mappings\":{\"default\":{\"default\":\"multiplication dans demi cercle droit\"}},\"category\":\"Sm\"},{\"key\":\"2A36\",\"mappings\":{\"default\":{\"default\":\"multiplication cerclé circonflexe\"}},\"category\":\"Sm\"},{\"key\":\"2A37\",\"mappings\":{\"default\":{\"default\":\"multiplication doublement cerclé\"}},\"category\":\"Sm\"},{\"key\":\"2A38\",\"mappings\":{\"default\":{\"default\":\"division cerclé\"}},\"category\":\"Sm\"},{\"key\":\"2A39\",\"mappings\":{\"default\":{\"default\":\"plus dans triangle\"}},\"category\":\"Sm\"},{\"key\":\"2A3A\",\"mappings\":{\"default\":{\"default\":\"moins dans triangle\"}},\"category\":\"Sm\"},{\"key\":\"2A3B\",\"mappings\":{\"default\":{\"default\":\"multiplication dans triangle\"}},\"category\":\"Sm\"},{\"key\":\"2A3C\",\"mappings\":{\"default\":{\"default\":\"produit interieur\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A3D\",\"mappings\":{\"default\":{\"default\":\"produit intérieur à droite\"}}},{\"category\":\"Sm\",\"key\":\"2A3E\",\"mappings\":{\"default\":{\"default\":\"composition relationnelle en notation z\"}}},{\"key\":\"2A3F\",\"mappings\":{\"default\":{\"default\":\"amalgamation ou coproduit\"}},\"category\":\"Sm\"},{\"key\":\"2A40\",\"mappings\":{\"default\":{\"default\":\"intersection pointée\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A41\",\"mappings\":{\"default\":{\"default\":\"union à signe moins\"}}},{\"key\":\"2A42\",\"mappings\":{\"default\":{\"default\":\"union à barre en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A43\",\"mappings\":{\"default\":{\"default\":\"intersection à barre en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A44\",\"mappings\":{\"default\":{\"default\":\"intersection avec et logique\"}},\"category\":\"Sm\"},{\"key\":\"2A45\",\"mappings\":{\"default\":{\"default\":\"union avec ou logique\"}},\"category\":\"Sm\"},{\"key\":\"2A46\",\"mappings\":{\"default\":{\"default\":\"union par dessus intersection\"}},\"category\":\"Sm\"},{\"key\":\"2A47\",\"mappings\":{\"default\":{\"default\":\"intersection par dessus union\"}},\"category\":\"Sm\"},{\"key\":\"2A48\",\"mappings\":{\"default\":{\"default\":\"union par dessus bar par dessus intersection\"}},\"category\":\"Sm\"},{\"key\":\"2A49\",\"mappings\":{\"default\":{\"default\":\"intersection par dessus trait par dessus union\"}},\"category\":\"Sm\"},{\"key\":\"2A4A\",\"mappings\":{\"default\":{\"default\":\"deux unions soudées côte à côte\"}},\"category\":\"Sm\"},{\"key\":\"2A4B\",\"mappings\":{\"default\":{\"default\":\"deux intersections soudées côte à côte\"}},\"category\":\"Sm\"},{\"key\":\"2A4C\",\"mappings\":{\"default\":{\"default\":\"union fermée à empattements\"}},\"category\":\"Sm\"},{\"key\":\"2A4D\",\"mappings\":{\"default\":{\"default\":\"intersection fermée à empattements\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A4E\",\"mappings\":{\"default\":{\"default\":\"deux intersections carrées emboîtées\"}}},{\"category\":\"Sm\",\"key\":\"2A4F\",\"mappings\":{\"default\":{\"default\":\"deux unions carrées emboîtées\"}}},{\"key\":\"2A50\",\"mappings\":{\"default\":{\"default\":\"union fermée à empattements et produit fusionné\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A51\",\"mappings\":{\"default\":{\"default\":\"et logique à point en chef\"}}},{\"category\":\"Sm\",\"key\":\"2A52\",\"mappings\":{\"default\":{\"default\":\"ou logique à point en chef\"}}},{\"key\":\"2A53\",\"mappings\":{\"default\":{\"default\":\"double et logique\"}},\"category\":\"Sm\"},{\"key\":\"2A54\",\"mappings\":{\"default\":{\"default\":\"double ou logique\"}},\"category\":\"Sm\"},{\"key\":\"2A55\",\"mappings\":{\"default\":{\"default\":\"deux et logiques entrecroisés\"}},\"category\":\"Sm\"},{\"key\":\"2A56\",\"mappings\":{\"default\":{\"default\":\"deux ou logiques entrecroisés\"}},\"category\":\"Sm\"},{\"key\":\"2A57\",\"mappings\":{\"default\":{\"default\":\"grand ou pentu\"}},\"category\":\"Sm\"},{\"key\":\"2A58\",\"mappings\":{\"default\":{\"default\":\"grand et pentu\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A59\",\"mappings\":{\"default\":{\"default\":\"et et ou logiques entrecroisés\"}}},{\"key\":\"2A5A\",\"mappings\":{\"default\":{\"default\":\"et logique à hampe médiane\"}},\"category\":\"Sm\"},{\"key\":\"2A5B\",\"mappings\":{\"default\":{\"default\":\"ou logique à hampe médiane\"}},\"category\":\"Sm\"},{\"key\":\"2A5C\",\"mappings\":{\"default\":{\"default\":\"et logique à tiret horizontal\"}},\"category\":\"Sm\"},{\"key\":\"2A5D\",\"mappings\":{\"default\":{\"default\":\"ou logique à tiret horizontal\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A5E\",\"mappings\":{\"default\":{\"default\":\"et logique à deux barres en chef\"}}},{\"key\":\"2A5F\",\"mappings\":{\"default\":{\"default\":\"et logique à barre souscrite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A60\",\"mappings\":{\"default\":{\"default\":\"et logique à deux barres souscrites\"}}},{\"category\":\"Sm\",\"key\":\"2A61\",\"mappings\":{\"default\":{\"default\":\"petit v à barre souscrite\"}}},{\"category\":\"Sm\",\"key\":\"2A62\",\"mappings\":{\"default\":{\"default\":\"ou logique à deux barres en chef\"}}},{\"category\":\"Sm\",\"key\":\"2A63\",\"mappings\":{\"default\":{\"default\":\"ou logique à deux barres souscrites\"}}},{\"category\":\"Sm\",\"key\":\"2A64\",\"mappings\":{\"default\":{\"default\":\"antirestriction de domaine en notation z\"}}},{\"category\":\"Sm\",\"key\":\"2A65\",\"mappings\":{\"default\":{\"default\":\"antirestriction de codomaine en notation z\"}}},{\"key\":\"2A66\",\"mappings\":{\"default\":{\"default\":\"égal point souscrit\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A67\",\"mappings\":{\"default\":{\"default\":\"identique à surmonté d'un point\"}}},{\"category\":\"Sm\",\"key\":\"2A68\",\"mappings\":{\"default\":{\"default\":\"deux barres verticales à trois traverses\"}}},{\"category\":\"Sm\",\"key\":\"2A69\",\"mappings\":{\"default\":{\"default\":\"trois barres verticales à trois traverses\"}}},{\"key\":\"2A6A\",\"mappings\":{\"default\":{\"default\":\"opérateur tilde point en chef\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A6B\",\"mappings\":{\"default\":{\"default\":\"opérateur tilde à points ascendants\"}}},{\"category\":\"Sm\",\"key\":\"2A6C\",\"mappings\":{\"default\":{\"default\":\"similaire à moins similaire à\"}}},{\"key\":\"2A6D\",\"mappings\":{\"default\":{\"default\":\"congruent point en chef\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A6E\",\"mappings\":{\"default\":{\"default\":\"Égal astérisque en chef\"}}},{\"key\":\"2A6F\",\"mappings\":{\"default\":{\"default\":\"presque égal à circonflexe\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A70\",\"mappings\":{\"default\":{\"default\":\"approximativement égal à ou égal à\"}}},{\"key\":\"2A71\",\"mappings\":{\"default\":{\"default\":\"plus signe égal en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A72\",\"mappings\":{\"default\":{\"default\":\"égal à signe plus en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A73\",\"mappings\":{\"default\":{\"default\":\"tilde signe égal en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A74\",\"mappings\":{\"default\":{\"default\":\"double deux points égal à\"}},\"category\":\"Sm\"},{\"key\":\"2A75\",\"mappings\":{\"default\":{\"default\":\"deux signes égal à consécutifs\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A76\",\"mappings\":{\"default\":{\"default\":\"trois signes égal à consécutifs\"}}},{\"key\":\"2A77\",\"mappings\":{\"default\":{\"default\":\"égal à deux points en chef deux points souscrits\"}},\"category\":\"Sm\"},{\"key\":\"2A78\",\"mappings\":{\"default\":{\"default\":\"équivalent quatre points en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A79\",\"mappings\":{\"default\":{\"default\":\"inférieur à avec cercle inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A7A\",\"mappings\":{\"default\":{\"default\":\"supérieur à avec cercle inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A7B\",\"mappings\":{\"default\":{\"default\":\"inférieur à point d'interrogation en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A7C\",\"mappings\":{\"default\":{\"default\":\"supérieur à point d'interrogation en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A7D\",\"mappings\":{\"default\":{\"default\":\"plus petit ou égal à pentu\"}},\"category\":\"Sm\"},{\"key\":\"2A7E\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à pentu\"}},\"category\":\"Sm\"},{\"key\":\"2A7F\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou égal à pentu point inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A80\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à pentu point inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A81\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou égal à pentu point en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A82\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à pentu point en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A83\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou égal à pentu point en chef droit\"}},\"category\":\"Sm\"},{\"key\":\"2A84\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à pentu point en chef gauche\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A85\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou approximatif\"}}},{\"category\":\"Sm\",\"key\":\"2A86\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou approximatif\"}}},{\"category\":\"Sm\",\"key\":\"2A87\",\"mappings\":{\"default\":{\"default\":\"inférieur à et pas égal à une ligne\"}}},{\"category\":\"Sm\",\"key\":\"2A88\",\"mappings\":{\"default\":{\"default\":\"supérieur à et pas égal à une ligne\"}}},{\"key\":\"2A89\",\"mappings\":{\"default\":{\"default\":\"inférieur à et non approximatif\"}},\"category\":\"Sm\"},{\"key\":\"2A8A\",\"mappings\":{\"default\":{\"default\":\"supérieur à et non approximatif\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A8B\",\"mappings\":{\"default\":{\"default\":\"inférieur à par dessus égal à deux lignes par dessus supérieur à\"}}},{\"category\":\"Sm\",\"key\":\"2A8C\",\"mappings\":{\"default\":{\"default\":\"supérieur à par dessus égal à deux lignes par dessus inférieur à\"}}},{\"key\":\"2A8D\",\"mappings\":{\"default\":{\"default\":\"inférieur à par dessus similaire à ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2A8E\",\"mappings\":{\"default\":{\"default\":\"supérieur à par dessus similaire à ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2A8F\",\"mappings\":{\"default\":{\"default\":\"inférieur à par dessus similaire à par dessus supérieur à\"}},\"category\":\"Sm\"},{\"key\":\"2A90\",\"mappings\":{\"default\":{\"default\":\"supérieur à par dessus similaire à par dessus inférieur à\"}},\"category\":\"Sm\"},{\"key\":\"2A91\",\"mappings\":{\"default\":{\"default\":\"inférieur à par dessus supérieur à par dessus égal à deux lignes\"}},\"category\":\"Sm\"},{\"key\":\"2A92\",\"mappings\":{\"default\":{\"default\":\"supérieur à par dessus inférieur à par dessus égal à deux lignes\"}},\"category\":\"Sm\"},{\"key\":\"2A93\",\"mappings\":{\"default\":{\"default\":\"inférieur à par dessus égal à pentu par dessus supérieur à par dessus égal à pentu\"}},\"category\":\"Sm\"},{\"key\":\"2A94\",\"mappings\":{\"default\":{\"default\":\"supérieur à par dessus égal à pentu par dessus inférieur à par dessus égal à pentu\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A95\",\"mappings\":{\"default\":{\"default\":\"Égal à incliné ou inférieur à\"}}},{\"category\":\"Sm\",\"key\":\"2A96\",\"mappings\":{\"default\":{\"default\":\"Égal à incliné ou supérieur à\"}}},{\"key\":\"2A97\",\"mappings\":{\"default\":{\"default\":\"égal à pentu ou inférieur à point inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A98\",\"mappings\":{\"default\":{\"default\":\"égal à pentu ou supérieur à point inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A99\",\"mappings\":{\"default\":{\"default\":\"égal à deux lignes ou inférieur à\"}},\"category\":\"Sm\"},{\"key\":\"2A9A\",\"mappings\":{\"default\":{\"default\":\"égal à deux lignes ou supérieur à\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A9B\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou égal à à deux lignes inclinées\"}}},{\"category\":\"Sm\",\"key\":\"2A9C\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à à deux lignes inclinées\"}}},{\"key\":\"2A9D\",\"mappings\":{\"default\":{\"default\":\"similaire à ou inférieur à\"}},\"category\":\"Sm\"},{\"key\":\"2A9E\",\"mappings\":{\"default\":{\"default\":\"similaire à ou supérieur à\"}},\"category\":\"Sm\"},{\"key\":\"2A9F\",\"mappings\":{\"default\":{\"default\":\"similaire à par dessus inférieur à par dessus signe égal\"}},\"category\":\"Sm\"},{\"key\":\"2AA0\",\"mappings\":{\"default\":{\"default\":\"similaire à par dessus supérieur à par dessus signe égal\"}},\"category\":\"Sm\"},{\"key\":\"2AA1\",\"mappings\":{\"default\":{\"default\":\"deux inférieur à emboîtés\"}},\"category\":\"Sm\"},{\"key\":\"2AA2\",\"mappings\":{\"default\":{\"default\":\"deux supérieur à emboîtés\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AA3\",\"mappings\":{\"default\":{\"default\":\"deux inférieur à emboîtés avec barre souscrite\"}}},{\"key\":\"2AA4\",\"mappings\":{\"default\":{\"default\":\"deux supérieur à entrecroisés\"}},\"category\":\"Sm\"},{\"key\":\"2AA5\",\"mappings\":{\"default\":{\"default\":\"supérieur à à côté de inférieur à\"}},\"category\":\"Sm\"},{\"key\":\"2AA6\",\"mappings\":{\"default\":{\"default\":\"inférieur à fermé d'un arc\"}},\"category\":\"Sm\"},{\"key\":\"2AA7\",\"mappings\":{\"default\":{\"default\":\"supérieur à fermé d'un arc\"}},\"category\":\"Sm\"},{\"key\":\"2AA8\",\"mappings\":{\"default\":{\"default\":\"inférieur à fermé d'un arc par dessus égal à pentu\"}},\"category\":\"Sm\"},{\"key\":\"2AA9\",\"mappings\":{\"default\":{\"default\":\"supérieur à fermé d'un arc par dessus égal à pentu\"}},\"category\":\"Sm\"},{\"key\":\"2AAA\",\"mappings\":{\"default\":{\"default\":\"plus petit que en fourche\"}},\"category\":\"Sm\"},{\"key\":\"2AAB\",\"mappings\":{\"default\":{\"default\":\"plus grand que en fourche\"}},\"category\":\"Sm\"},{\"key\":\"2AAC\",\"mappings\":{\"default\":{\"default\":\"plus petit ou égal que en fourche\"}},\"category\":\"Sm\"},{\"key\":\"2AAD\",\"mappings\":{\"default\":{\"default\":\"plus grand ou égal que en fourche\"}},\"category\":\"Sm\"},{\"key\":\"2AAE\",\"mappings\":{\"default\":{\"default\":\"égal et dos d'âne\"}},\"category\":\"Sm\"},{\"key\":\"2AAF\",\"mappings\":{\"default\":{\"default\":\"précède par dessus signe égal à une ligne\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AB0\",\"mappings\":{\"default\":{\"default\":\"suit par dessus signe égal à une ligne\"}}},{\"category\":\"Sm\",\"key\":\"2AB1\",\"mappings\":{\"default\":{\"default\":\"précède par dessus pas égal à une ligne\"}}},{\"category\":\"Sm\",\"key\":\"2AB2\",\"mappings\":{\"default\":{\"default\":\"suit par dessus pas égal à une ligne\"}}},{\"category\":\"Sm\",\"key\":\"2AB3\",\"mappings\":{\"default\":{\"default\":\"précède par dessus signe égal\"}}},{\"category\":\"Sm\",\"key\":\"2AB4\",\"mappings\":{\"default\":{\"default\":\"suit par dessus signe égal\"}}},{\"key\":\"2AB5\",\"mappings\":{\"default\":{\"default\":\"précède par dessus pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"2AB6\",\"mappings\":{\"default\":{\"default\":\"suit par dessus pas égal à\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AB7\",\"mappings\":{\"default\":{\"default\":\"précède par dessus presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2AB8\",\"mappings\":{\"default\":{\"default\":\"suit par dessus presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2AB9\",\"mappings\":{\"default\":{\"default\":\"précède par dessus non presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2ABA\",\"mappings\":{\"default\":{\"default\":\"suit par dessus non presque égal à\"}}},{\"key\":\"2ABB\",\"mappings\":{\"default\":{\"default\":\"double précède\"}},\"category\":\"Sm\"},{\"key\":\"2ABC\",\"mappings\":{\"default\":{\"default\":\"double suit\"}},\"category\":\"Sm\"},{\"key\":\"2ABD\",\"mappings\":{\"default\":{\"default\":\"sous ensemble pointé\"}},\"category\":\"Sm\"},{\"key\":\"2ABE\",\"mappings\":{\"default\":{\"default\":\"sur ensemble pointé\"}},\"category\":\"Sm\"},{\"key\":\"2ABF\",\"mappings\":{\"default\":{\"default\":\"sous ensemble plus souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2AC0\",\"mappings\":{\"default\":{\"default\":\"sur ensemble plus souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2AC1\",\"mappings\":{\"default\":{\"default\":\"sous ensemble à signe de multiplication souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2AC2\",\"mappings\":{\"default\":{\"default\":\"sur ensemble à signe de multiplication souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2AC3\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de ou égal à point en chef\"}},\"category\":\"Sm\"},{\"key\":\"2AC4\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de ou égal à point en chef\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AC5\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de par dessus signe égal\"}}},{\"category\":\"Sm\",\"key\":\"2AC6\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de par dessus signe égal\"}}},{\"key\":\"2AC7\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de par dessus opérateur tilde\"}},\"category\":\"Sm\"},{\"key\":\"2AC8\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de par dessus opérateur tilde\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AC9\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de par dessus presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2ACA\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de par dessus presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2ACB\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de par dessus pas égal à\"}}},{\"category\":\"Sm\",\"key\":\"2ACC\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de par dessus pas égal à\"}}},{\"category\":\"Sm\",\"key\":\"2ACD\",\"mappings\":{\"default\":{\"default\":\"opérateur boîte carrée ouverte gauche\"}}},{\"category\":\"Sm\",\"key\":\"2ACE\",\"mappings\":{\"default\":{\"default\":\"opérateur boîte carrée ouverte droite\"}}},{\"key\":\"2ACF\",\"mappings\":{\"default\":{\"default\":\"sous ensemble clos\"}},\"category\":\"Sm\"},{\"key\":\"2AD0\",\"mappings\":{\"default\":{\"default\":\"sur ensemble clos\"}},\"category\":\"Sm\"},{\"key\":\"2AD1\",\"mappings\":{\"default\":{\"default\":\"sous ensemble clos ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2AD2\",\"mappings\":{\"default\":{\"default\":\"sur ensemble clos ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2AD3\",\"mappings\":{\"default\":{\"default\":\"sous ensemble par dessus sur ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD4\",\"mappings\":{\"default\":{\"default\":\"sur ensemble par dessus sous ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD5\",\"mappings\":{\"default\":{\"default\":\"sous ensemble par dessus sous ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD6\",\"mappings\":{\"default\":{\"default\":\"sur ensemble par dessus sur ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD7\",\"mappings\":{\"default\":{\"default\":\"sur ensemble à côté de sous ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD8\",\"mappings\":{\"default\":{\"default\":\"sur ensemble chaîné à sous ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD9\",\"mappings\":{\"default\":{\"default\":\"appartient à ouvert vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"2ADA\",\"mappings\":{\"default\":{\"default\":\"fourche surmontée d'un t\"}},\"category\":\"Sm\"},{\"key\":\"2ADB\",\"mappings\":{\"default\":{\"default\":\"intersection transversale\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2ADC\",\"mappings\":{\"default\":{\"default\":\"bifurcation (non indépendant)\"}}},{\"category\":\"Sm\",\"key\":\"2ADD\",\"mappings\":{\"default\":{\"default\":\"non bifurcation (indépendant)\"}}},{\"category\":\"Sm\",\"key\":\"2ADE\",\"mappings\":{\"default\":{\"default\":\"taquet gauche court\"}}},{\"category\":\"Sm\",\"key\":\"2ADF\",\"mappings\":{\"default\":{\"default\":\"taquet court vers le bas\"}}},{\"category\":\"Sm\",\"key\":\"2AE0\",\"mappings\":{\"default\":{\"default\":\"taquet court vers le haut\"}}},{\"category\":\"Sm\",\"key\":\"2AE1\",\"mappings\":{\"default\":{\"default\":\"perpendiculaire à s\"}}},{\"category\":\"Sm\",\"key\":\"2AE2\",\"mappings\":{\"default\":{\"default\":\"triple tourniquet droit à barre verticale\"}}},{\"category\":\"Sm\",\"key\":\"2AE3\",\"mappings\":{\"default\":{\"default\":\"tourniquet gauche à double barre verticale\"}}},{\"key\":\"2AE4\",\"mappings\":{\"default\":{\"default\":\"double tourniquet gauche à barre verticale\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AE5\",\"mappings\":{\"default\":{\"default\":\"double tourniquet gauche à double barre verticale\"}}},{\"key\":\"2AE6\",\"mappings\":{\"default\":{\"default\":\"double barre verticale gauche à traverse\"}},\"category\":\"Sm\"},{\"key\":\"2AE7\",\"mappings\":{\"default\":{\"default\":\"taquet court vers le bas avec barre en chef\"}},\"category\":\"Sm\"},{\"key\":\"2AE8\",\"mappings\":{\"default\":{\"default\":\"taquet court vers le haut avec barre souscrite\"}},\"category\":\"Sm\"},{\"key\":\"2AE9\",\"mappings\":{\"default\":{\"default\":\"taquet court vers le haut par dessus taquet court vers le bas\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AEA\",\"mappings\":{\"default\":{\"default\":\"double taquet vers le bas\"}}},{\"key\":\"2AEB\",\"mappings\":{\"default\":{\"default\":\"double taquet vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"2AEC\",\"mappings\":{\"default\":{\"default\":\"négation à deux traits\"}},\"category\":\"Sm\"},{\"key\":\"2AED\",\"mappings\":{\"default\":{\"default\":\"négation à deux traits réfléchi\"}},\"category\":\"Sm\"},{\"key\":\"2AEE\",\"mappings\":{\"default\":{\"default\":\"n'est pas un diviseur de à barre de négation réfléchie\"}},\"category\":\"Sm\"},{\"key\":\"2AEF\",\"mappings\":{\"default\":{\"default\":\"ligne verticale cercle en chef\"}},\"category\":\"Sm\"},{\"key\":\"2AF0\",\"mappings\":{\"default\":{\"default\":\"ligne verticale cercle souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2AF1\",\"mappings\":{\"default\":{\"default\":\"taquet vers le bas surmontant un cercle\"}},\"category\":\"Sm\"},{\"key\":\"2AF2\",\"mappings\":{\"default\":{\"default\":\"parallèlle à vertical à une traverse\"}},\"category\":\"Sm\"},{\"key\":\"2AF3\",\"mappings\":{\"default\":{\"default\":\"parallèle à avec opérateur tilde\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AF4\",\"mappings\":{\"default\":{\"default\":\"relation binaire triple barre verticale\"}}},{\"category\":\"Sm\",\"key\":\"2AF5\",\"mappings\":{\"default\":{\"default\":\"triple barre verticale à une traverse\"}}},{\"category\":\"Sm\",\"key\":\"2AF6\",\"mappings\":{\"default\":{\"default\":\"opérateur trois points\"}}},{\"category\":\"Sm\",\"key\":\"2AF7\",\"mappings\":{\"default\":{\"default\":\"trois inférieur à emboîtés\"}}},{\"category\":\"Sm\",\"key\":\"2AF8\",\"mappings\":{\"default\":{\"default\":\"trois supérieur à emboîtés\"}}},{\"category\":\"Sm\",\"key\":\"2AF9\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou égal à et deux lignes inclinées\"}}},{\"category\":\"Sm\",\"key\":\"2AFA\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à et deux lignes inclinées\"}}},{\"category\":\"Sm\",\"key\":\"2AFB\",\"mappings\":{\"default\":{\"default\":\"relation binaire triple oblique\"}}},{\"category\":\"Sm\",\"key\":\"2AFC\",\"mappings\":{\"default\":{\"default\":\"grand opérateur à trois barres verticales\"}}},{\"category\":\"Sm\",\"key\":\"2AFD\",\"mappings\":{\"default\":{\"default\":\"opérateur double oblique\"}}},{\"category\":\"Sm\",\"key\":\"2AFE\",\"mappings\":{\"default\":{\"default\":\"barre verticale blanche\"}}},{\"category\":\"Sm\",\"key\":\"2AFF\",\"mappings\":{\"default\":{\"default\":\"barre verticale blanche n aire\"}}},{\"category\":\"Pd\",\"key\":\"301C\",\"mappings\":{\"default\":{\"default\":\"trait d'union en esse\"}}},{\"category\":\"Po\",\"key\":\"FE10\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de virgule verticale\"}}},{\"category\":\"Po\",\"key\":\"FE13\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de deux points vertical\"}}},{\"category\":\"Po\",\"key\":\"FE14\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de point virgule vertical\"}}},{\"category\":\"Po\",\"key\":\"FE15\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de point d'exclamation vertical\"}}},{\"category\":\"Po\",\"key\":\"FE16\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de point d'interrogation vertical\"}}},{\"category\":\"Po\",\"key\":\"FE19\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de points de suspension verticaux\"}}},{\"category\":\"Po\",\"key\":\"FE30\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de point de conduite double vertical\"}}},{\"category\":\"Pd\",\"key\":\"FE31\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de tiret cadratin vertical\"}}},{\"category\":\"Pd\",\"key\":\"FE32\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de tiret demi cadratin vertical\"}}},{\"category\":\"Pc\",\"key\":\"FE33\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de tiret bas vertical\"}}},{\"category\":\"Pc\",\"key\":\"FE34\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de tiret bas ondulé vertical\"}}},{\"category\":\"Po\",\"key\":\"FE45\",\"mappings\":{\"default\":{\"default\":\"point sésame\"}}},{\"category\":\"Po\",\"key\":\"FE46\",\"mappings\":{\"default\":{\"default\":\"point sésame ajouré\"}}},{\"category\":\"Po\",\"key\":\"FE49\",\"mappings\":{\"default\":{\"default\":\"tiret haut en pointillés\"}}},{\"category\":\"Po\",\"key\":\"FE4A\",\"mappings\":{\"default\":{\"default\":\"tiret haut à point central\"}}},{\"category\":\"Po\",\"key\":\"FE4B\",\"mappings\":{\"default\":{\"default\":\"tiret haut ondulé\"}}},{\"category\":\"Po\",\"key\":\"FE4C\",\"mappings\":{\"default\":{\"default\":\"tiret haut double ondulé\"}}},{\"category\":\"Pc\",\"key\":\"FE4D\",\"mappings\":{\"default\":{\"default\":\"tiret bas avec pointillés\"}}},{\"category\":\"Pc\",\"key\":\"FE4E\",\"mappings\":{\"default\":{\"default\":\"tiret bas à point central\"}}},{\"category\":\"Pc\",\"key\":\"FE4F\",\"mappings\":{\"default\":{\"default\":\"tiret bas ondulé\"}}},{\"category\":\"Po\",\"key\":\"FE50\",\"mappings\":{\"default\":{\"default\":\"virgule minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE52\",\"mappings\":{\"default\":{\"default\":\"point minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE54\",\"mappings\":{\"default\":{\"default\":\"point virgule minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE55\",\"mappings\":{\"default\":{\"default\":\"deux points minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE56\",\"mappings\":{\"default\":{\"default\":\"point d'interrogation minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE57\",\"mappings\":{\"default\":{\"default\":\"point d'exclamation minuscule\"}}},{\"category\":\"Pd\",\"key\":\"FE58\",\"mappings\":{\"default\":{\"default\":\"trait d'union cadratin minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE5F\",\"mappings\":{\"default\":{\"default\":\"croisillon minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE60\",\"mappings\":{\"default\":{\"default\":\"perluète minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE61\",\"mappings\":{\"default\":{\"default\":\"astérisque minuscule\"}}},{\"category\":\"Sm\",\"key\":\"FE62\",\"mappings\":{\"default\":{\"default\":\"plus minuscule\"}}},{\"category\":\"Pd\",\"key\":\"FE63\",\"mappings\":{\"default\":{\"default\":\"tiret minuscule\"}}},{\"category\":\"Sm\",\"key\":\"FE64\",\"mappings\":{\"default\":{\"default\":\"inférieur à minuscule\"}}},{\"category\":\"Sm\",\"key\":\"FE65\",\"mappings\":{\"default\":{\"default\":\"supérieur à minuscule\"}}},{\"category\":\"Sm\",\"key\":\"FE66\",\"mappings\":{\"default\":{\"default\":\"égal à minuscule\"}}},{\"key\":\"FE68\",\"mappings\":{\"default\":{\"default\":\"integer divide\"}},\"category\":\"Po\"},{\"category\":\"Sc\",\"key\":\"FE69\",\"mappings\":{\"default\":{\"default\":\"symbole dollar minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE6A\",\"mappings\":{\"default\":{\"default\":\"symbole pour cent minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE6B\",\"mappings\":{\"default\":{\"default\":\"arrobe minuscule\"}}},{\"category\":\"Po\",\"key\":\"FF01\",\"mappings\":{\"default\":{\"default\":\"point d'exclamation\"}}},{\"category\":\"Po\",\"key\":\"FF02\",\"mappings\":{\"default\":{\"default\":\"guillemet\"}}},{\"category\":\"Po\",\"key\":\"FF03\",\"mappings\":{\"default\":{\"default\":\"croisillon\"}}},{\"category\":\"Sc\",\"key\":\"FF04\",\"mappings\":{\"default\":{\"default\":\"symbole dollar\"}}},{\"category\":\"Po\",\"key\":\"FF05\",\"mappings\":{\"default\":{\"default\":\"symbole pour cent\"}}},{\"category\":\"Po\",\"key\":\"FF06\",\"mappings\":{\"default\":{\"default\":\"perluète\"}}},{\"category\":\"Po\",\"key\":\"FF07\",\"mappings\":{\"default\":{\"default\":\"apostrophe\"}}},{\"category\":\"Po\",\"key\":\"FF0A\",\"mappings\":{\"default\":{\"default\":\"astérisque\"}}},{\"category\":\"Sm\",\"key\":\"FF0B\",\"mappings\":{\"default\":{\"default\":\"plus\"}}},{\"category\":\"Po\",\"key\":\"FF0C\",\"mappings\":{\"default\":{\"default\":\"virgule\"}}},{\"category\":\"Pd\",\"key\":\"FF0D\",\"mappings\":{\"default\":{\"default\":\"tiret\"}}},{\"category\":\"Po\",\"key\":\"FF0E\",\"mappings\":{\"default\":{\"default\":\"point\"}}},{\"category\":\"Po\",\"key\":\"FF0F\",\"mappings\":{\"default\":{\"default\":\"barre oblique\"}}},{\"category\":\"Po\",\"key\":\"FF1A\",\"mappings\":{\"default\":{\"default\":\"deux points colon\"}}},{\"category\":\"Po\",\"key\":\"FF1B\",\"mappings\":{\"default\":{\"default\":\"point virgule\"}}},{\"category\":\"Sm\",\"key\":\"FF1C\",\"mappings\":{\"default\":{\"default\":\"inférieur à\"}}},{\"category\":\"Sm\",\"key\":\"FF1D\",\"mappings\":{\"default\":{\"default\":\"égal à\"}}},{\"category\":\"Sm\",\"key\":\"FF1E\",\"mappings\":{\"default\":{\"default\":\"supérieur à\"}}},{\"category\":\"Po\",\"key\":\"FF1F\",\"mappings\":{\"default\":{\"default\":\"point d'interrogation\"}}},{\"category\":\"Po\",\"key\":\"FF20\",\"mappings\":{\"default\":{\"default\":\"arrobe\"}}},{\"category\":\"Po\",\"key\":\"FF3C\",\"mappings\":{\"default\":{\"default\":\"barre oblique inversée\"}}},{\"category\":\"Sk\",\"key\":\"FF3E\",\"mappings\":{\"default\":{\"default\":\"accent circonflexe\"}}},{\"category\":\"Pc\",\"key\":\"FF3F\",\"mappings\":{\"default\":{\"default\":\"tiret bas\"}}},{\"category\":\"Sk\",\"key\":\"FF40\",\"mappings\":{\"default\":{\"default\":\"accent grave\"}}},{\"category\":\"Sm\",\"key\":\"FF5C\",\"mappings\":{\"default\":{\"default\":\"barre verticale\"}}},{\"category\":\"Sm\",\"key\":\"FF5E\",\"mappings\":{\"default\":{\"default\":\"tilde\"}}},{\"category\":\"Sc\",\"key\":\"FFE0\",\"mappings\":{\"default\":{\"default\":\"symbole centime\"}}},{\"category\":\"Sc\",\"key\":\"FFE1\",\"mappings\":{\"default\":{\"default\":\"symbole livre\"}}},{\"category\":\"Sm\",\"key\":\"FFE2\",\"mappings\":{\"default\":{\"default\":\"négation\"}}},{\"category\":\"Sk\",\"key\":\"FFE3\",\"mappings\":{\"default\":{\"default\":\"macron *\"}}},{\"category\":\"So\",\"key\":\"FFE4\",\"mappings\":{\"default\":{\"default\":\"ligne brisée\"}}},{\"category\":\"Sc\",\"key\":\"FFE5\",\"mappings\":{\"default\":{\"default\":\"symbole yen\"}}},{\"category\":\"Sc\",\"key\":\"FFE6\",\"mappings\":{\"default\":{\"default\":\"symbole won\"}}},{\"category\":\"So\",\"key\":\"FFE8\",\"mappings\":{\"default\":{\"default\":\"ligne verticale mince\"}}},{\"category\":\"So\",\"key\":\"FFED\",\"mappings\":{\"default\":{\"default\":\"carré noir\"}}},{\"category\":\"So\",\"key\":\"FFEE\",\"mappings\":{\"default\":{\"default\":\"cercle blanc\"}}}]\n,\n\"fr/symbols/math_whitespace.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Zs\",\"key\":\"0020\",\"mappings\":{\"default\":{\"default\":\"espace\"}}},{\"key\":\"00A0\",\"mappings\":{\"default\":{\"default\":\" \"}},\"category\":\"Zs\"},{\"key\":\"00AD\",\"mappings\":{\"default\":{\"default\":\"trait d'union conditionnel\"}},\"category\":\"Cf\"},{\"category\":\"Zs\",\"key\":\"2000\",\"mappings\":{\"default\":{\"default\":\"demi cadratin\"}}},{\"category\":\"Zs\",\"key\":\"2001\",\"mappings\":{\"default\":{\"default\":\"cadratin\"}}},{\"key\":\"2002\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2003\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2004\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2005\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"category\":\"Zs\",\"key\":\"2006\",\"mappings\":{\"default\":{\"default\":\"sixième de cadratin\"}}},{\"key\":\"2007\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2008\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2009\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200A\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200B\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"key\":\"200C\",\"mappings\":{\"default\":{\"default\":\"antiliant sans chasse\"}},\"category\":\"Cf\"},{\"key\":\"200D\",\"mappings\":{\"default\":{\"default\":\"liant sans chasse\"}},\"category\":\"Cf\"},{\"key\":\"200E\",\"mappings\":{\"default\":{\"default\":\"marque gauche à droite\"}},\"category\":\"Cf\"},{\"key\":\"200F\",\"mappings\":{\"default\":{\"default\":\"marque droite à gauche\"}},\"category\":\"Cf\"},{\"category\":\"Zl\",\"key\":\"2028\",\"mappings\":{\"default\":{\"default\":\"séparateur de lignes\"}}},{\"category\":\"Zp\",\"key\":\"2029\",\"mappings\":{\"default\":{\"default\":\"séparateur de paragraphes\"}}},{\"category\":\"Cf\",\"key\":\"202A\",\"mappings\":{\"default\":{\"default\":\"enchâssement gauche à droite\"}}},{\"category\":\"Cf\",\"key\":\"202B\",\"mappings\":{\"default\":{\"default\":\"enchâssement droite à gauche\"}}},{\"category\":\"Cf\",\"key\":\"202C\",\"mappings\":{\"default\":{\"default\":\"dépilement de formatage directionnel\"}}},{\"category\":\"Cf\",\"key\":\"202D\",\"mappings\":{\"default\":{\"default\":\"forçage gauche à droite\"}}},{\"category\":\"Cf\",\"key\":\"202E\",\"mappings\":{\"default\":{\"default\":\"forçage droite à gauche\"}}},{\"category\":\"Zs\",\"key\":\"202F\",\"mappings\":{\"default\":{\"default\":\"espace insécable étroite\"}}},{\"key\":\"205F\",\"mappings\":{\"default\":{\"default\":\"espace moyenne mathématique\"}},\"category\":\"Zs\"},{\"key\":\"2060\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"key\":\"2061\",\"mappings\":{\"default\":{\"default\":\"de\"}},\"category\":\"Cf\"},{\"key\":\"2062\",\"mappings\":{\"default\":{\"default\":\" \"}},\"category\":\"Cf\"},{\"key\":\"2063\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"2064\",\"mappings\":{\"default\":{\"default\":\"plus invisible\"}}},{\"category\":\"Cf\",\"key\":\"206A\",\"mappings\":{\"default\":{\"default\":\"inhibiteur d'échange symétrique\"}}},{\"category\":\"Cf\",\"key\":\"206B\",\"mappings\":{\"default\":{\"default\":\"activateur d'échange symétrique\"}}},{\"category\":\"Cf\",\"key\":\"206E\",\"mappings\":{\"default\":{\"default\":\"sélecteur de formes numérales nationales\"}}},{\"category\":\"Cf\",\"key\":\"206F\",\"mappings\":{\"default\":{\"default\":\"sélecteur de formes numérales de référence\"}}},{\"key\":\"FEFF\",\"mappings\":{\"default\":{\"default\":\"espace ultrafine\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"FFF9\",\"mappings\":{\"default\":{\"default\":\"ancre d'annotation interlinéaire\"}}},{\"category\":\"Cf\",\"key\":\"FFFA\",\"mappings\":{\"default\":{\"default\":\"séparateur d'annotation interlinéaire\"}}},{\"category\":\"Cf\",\"key\":\"FFFB\",\"mappings\":{\"default\":{\"default\":\"terminateur d'annotation interlinéaire\"}}}]\n,\n\"fr/symbols/other_stars.js\": \n[{\"locale\":\"fr\"},{\"category\":\"So\",\"key\":\"23E8\",\"mappings\":{\"default\":{\"default\":\"symbole exposant décimal\"}}},{\"key\":\"2605\",\"mappings\":{\"default\":{\"default\":\"étoile noire\"}},\"category\":\"So\"},{\"key\":\"2606\",\"mappings\":{\"default\":{\"default\":\"étoile blanche\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"26AA\",\"mappings\":{\"default\":{\"default\":\"cercle moyen blanc\"}}},{\"category\":\"So\",\"key\":\"26AB\",\"mappings\":{\"default\":{\"default\":\"cercle moyen noir\"}}},{\"category\":\"So\",\"key\":\"2705\",\"mappings\":{\"default\":{\"default\":\"signe de vérification blanc gras\"}}},{\"key\":\"2713\",\"mappings\":{\"default\":{\"default\":\"signe de vérification\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2714\",\"mappings\":{\"default\":{\"default\":\"gros signe de vérification\"}}},{\"category\":\"So\",\"key\":\"2715\",\"mappings\":{\"default\":{\"default\":\"x de multiplication\"}}},{\"category\":\"So\",\"key\":\"2716\",\"mappings\":{\"default\":{\"default\":\"gros x de multiplication\"}}},{\"key\":\"2717\",\"mappings\":{\"default\":{\"default\":\"x de bulletin de vote\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2718\",\"mappings\":{\"default\":{\"default\":\"gros x de bulletin de vote\"}}},{\"category\":\"So\",\"key\":\"271B\",\"mappings\":{\"default\":{\"default\":\"croix percée d'un carré\"}}},{\"category\":\"So\",\"key\":\"271C\",\"mappings\":{\"default\":{\"default\":\"grosse croix percée d'un carré\"}}},{\"key\":\"2720\",\"mappings\":{\"default\":{\"default\":\"croix de malte\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2721\",\"mappings\":{\"default\":{\"default\":\"Étoile de david\"}}},{\"category\":\"So\",\"key\":\"2722\",\"mappings\":{\"default\":{\"default\":\"croix larmée\"}}},{\"category\":\"So\",\"key\":\"2723\",\"mappings\":{\"default\":{\"default\":\"croix pommetée\"}}},{\"category\":\"So\",\"key\":\"2724\",\"mappings\":{\"default\":{\"default\":\"grosse croix pommetée\"}}},{\"category\":\"So\",\"key\":\"2725\",\"mappings\":{\"default\":{\"default\":\"croix tréflée\"}}},{\"category\":\"So\",\"key\":\"2726\",\"mappings\":{\"default\":{\"default\":\"Étoile noire à quatre branches\"}}},{\"category\":\"So\",\"key\":\"2727\",\"mappings\":{\"default\":{\"default\":\"Étoile blanche à quatre branches\"}}},{\"category\":\"So\",\"key\":\"2728\",\"mappings\":{\"default\":{\"default\":\"scintillements\"}}},{\"category\":\"So\",\"key\":\"2729\",\"mappings\":{\"default\":{\"default\":\"Étoile blanche à contour accentué\"}}},{\"category\":\"So\",\"key\":\"272A\",\"mappings\":{\"default\":{\"default\":\"Étoile blanche cerclée\"}}},{\"category\":\"So\",\"key\":\"272B\",\"mappings\":{\"default\":{\"default\":\"molette noire\"}}},{\"category\":\"So\",\"key\":\"272C\",\"mappings\":{\"default\":{\"default\":\"molette blanche\"}}},{\"category\":\"So\",\"key\":\"272D\",\"mappings\":{\"default\":{\"default\":\"Étoile noire avec contour\"}}},{\"category\":\"So\",\"key\":\"272E\",\"mappings\":{\"default\":{\"default\":\"Étoile noire avec gros contour\"}}},{\"category\":\"So\",\"key\":\"272F\",\"mappings\":{\"default\":{\"default\":\"Étoile rayonnante\"}}},{\"category\":\"So\",\"key\":\"2730\",\"mappings\":{\"default\":{\"default\":\"Étoile blanche ombrée\"}}},{\"category\":\"So\",\"key\":\"2731\",\"mappings\":{\"default\":{\"default\":\"gros astérisque\"}}},{\"category\":\"So\",\"key\":\"2732\",\"mappings\":{\"default\":{\"default\":\"astérisque percé\"}}},{\"category\":\"So\",\"key\":\"2733\",\"mappings\":{\"default\":{\"default\":\"astérisque à huit branches\"}}},{\"category\":\"So\",\"key\":\"2734\",\"mappings\":{\"default\":{\"default\":\"Étoile noire à huit branches\"}}},{\"category\":\"So\",\"key\":\"2735\",\"mappings\":{\"default\":{\"default\":\"Étoile rayonnante à huit branches\"}}},{\"key\":\"2736\",\"mappings\":{\"default\":{\"default\":\"étoile noire à six branches\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2739\",\"mappings\":{\"default\":{\"default\":\"Étoile noire à douze branches\"}}},{\"category\":\"So\",\"key\":\"273A\",\"mappings\":{\"default\":{\"default\":\"astérisque à seize branches\"}}},{\"category\":\"So\",\"key\":\"273B\",\"mappings\":{\"default\":{\"default\":\"astérisque larmé\"}}},{\"category\":\"So\",\"key\":\"273C\",\"mappings\":{\"default\":{\"default\":\"astérisque larmé percé\"}}},{\"key\":\"273D\",\"mappings\":{\"default\":{\"default\":\"gros astérisque larmé\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"273E\",\"mappings\":{\"default\":{\"default\":\"sixtefeuille blanche et noire\"}}},{\"category\":\"So\",\"key\":\"273F\",\"mappings\":{\"default\":{\"default\":\"quintefeuille noire\"}}},{\"category\":\"So\",\"key\":\"2740\",\"mappings\":{\"default\":{\"default\":\"quintefeuille blanche\"}}},{\"category\":\"So\",\"key\":\"2741\",\"mappings\":{\"default\":{\"default\":\"double quartefeuille noire avec contour\"}}},{\"category\":\"So\",\"key\":\"2742\",\"mappings\":{\"default\":{\"default\":\"Étoile cerclée percée à huit branches\"}}},{\"category\":\"So\",\"key\":\"2743\",\"mappings\":{\"default\":{\"default\":\"gros astérisque rayonnant larmé\"}}},{\"category\":\"So\",\"key\":\"2744\",\"mappings\":{\"default\":{\"default\":\"flocon de neige\"}}},{\"category\":\"So\",\"key\":\"2745\",\"mappings\":{\"default\":{\"default\":\"flocon de neige à trois folioles transpercé\"}}},{\"category\":\"So\",\"key\":\"2746\",\"mappings\":{\"default\":{\"default\":\"gros flocon de neige à chevrons\"}}},{\"category\":\"So\",\"key\":\"2747\",\"mappings\":{\"default\":{\"default\":\"Étincellement\"}}},{\"category\":\"So\",\"key\":\"2748\",\"mappings\":{\"default\":{\"default\":\"gros étincellement\"}}},{\"category\":\"So\",\"key\":\"2749\",\"mappings\":{\"default\":{\"default\":\"astérisque pommeté\"}}},{\"category\":\"So\",\"key\":\"274A\",\"mappings\":{\"default\":{\"default\":\"astérisque hélice à huit branches larmées\"}}},{\"category\":\"So\",\"key\":\"274B\",\"mappings\":{\"default\":{\"default\":\"gros astérisque hélice à huit branches larmées\"}}},{\"category\":\"So\",\"key\":\"274C\",\"mappings\":{\"default\":{\"default\":\"croix grasse\"}}},{\"category\":\"So\",\"key\":\"274D\",\"mappings\":{\"default\":{\"default\":\"cercle blanc ombré\"}}}]\n,\n\"fr/units/energy.js\": \n[{\"locale\":\"fr\"},{\"key\":\"W\",\"mappings\":{\"default\":{\"default\":\"watts\",\"singular\":\"watt\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"W\",\"w\"]},{\"key\":\"J\",\"mappings\":{\"default\":{\"default\":\"joules\",\"singular\":\"joule\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"J\"]},{\"key\":\"N\",\"mappings\":{\"default\":{\"default\":\"newtons\",\"singular\":\"newton\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"N\"]},{\"key\":\"A\",\"mappings\":{\"default\":{\"default\":\"ampères\",\"singular\":\"ampère\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"A\"]},{\"key\":\"V\",\"mappings\":{\"default\":{\"default\":\"volts\",\"singular\":\"volt\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"V\"]},{\"key\":\"Ω\",\"mappings\":{\"default\":{\"default\":\"ohms\",\"singular\":\"ohm\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"Ω\",\"Ohm\"]}]\n,\n\"fr/units/length.js\": \n[{\"locale\":\"fr\"},{\"key\":\"m\",\"mappings\":{\"default\":{\"default\":\"mètres\",\"singular\":\"mètre\",\"dual\":\"\"}},\"category\":\"Length\",\"names\":[\"m\"]},{\"key\":\"ft\",\"mappings\":{\"default\":{\"default\":\"pieds\",\"singular\":\"pied\",\"dual\":\"\"}},\"category\":\"Length\",\"names\":[\"ft\",\"ft.\"]},{\"key\":\"in\",\"mappings\":{\"default\":{\"default\":\"pouces\",\"singular\":\"pouce\",\"dual\":\"\"}},\"category\":\"Length\",\"names\":[\"in\",\"in.\"]},{\"key\":\"mi\",\"mappings\":{\"default\":{\"default\":\"miles\",\"singular\":\"mile\",\"dual\":\"\"}},\"category\":\"Length\",\"names\":[\"mi\",\"mi.\"]},{\"key\":\"yd\",\"mappings\":{\"default\":{\"default\":\"yards\",\"singular\":\"yard\",\"dual\":\"\"}},\"category\":\"Length\",\"names\":[\"yd\",\"yd.\"]}]\n,\n\"fr/units/memory.js\": \n[{\"locale\":\"fr\"}]\n,\n\"fr/units/other.js\": \n[{\"locale\":\"fr\"}]\n,\n\"fr/units/speed.js\": \n[{\"locale\":\"fr\"},{\"key\":\"mph\",\"mappings\":{\"default\":{\"default\":\"miles par heure\",\"singular\":\"mile par heure\",\"dual\":\"\"}},\"names\":[\"mph\"]}]\n,\n\"fr/units/temperature.js\": \n[{\"locale\":\"fr\"},{\"key\":\"F\",\"mappings\":{\"default\":{\"default\":\"farads\",\"singular\":\"farad\",\"dual\":\"\"}},\"names\":[\"F\",\"F.\",\"°F\"]},{\"key\":\"C\",\"mappings\":{\"default\":{\"default\":\"coulombs\",\"singular\":\"coulomb\",\"dual\":\"\"}},\"names\":[\"C\",\"°C\"]},{\"key\":\"K\",\"mappings\":{\"default\":{\"default\":\"kelvins\",\"singular\":\"kelvin\",\"dual\":\"\"}},\"names\":[\"K\",\"°K\"]}]\n,\n\"fr/units/time.js\": \n[{\"locale\":\"fr\"},{\"key\":\"s\",\"mappings\":{\"default\":{\"default\":\"secondes\",\"singular\":\"seconde\",\"dual\":\"\"}},\"category\":\"time\",\"names\":[\"s\"]}]\n,\n\"fr/units/volume.js\": \n[{\"locale\":\"fr\"},{\"key\":\"bbl\",\"mappings\":{\"default\":{\"default\":\"barils\",\"singular\":\"baril\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"bbl.\",\"bbl\"]},{\"key\":\"gal\",\"mappings\":{\"default\":{\"default\":\"gallons\",\"singular\":\"gallon\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"gal\",\"gal.\"]},{\"key\":\"pt\",\"mappings\":{\"default\":{\"default\":\"pintes\",\"singular\":\"pinte\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"pt\",\"pt.\"]},{\"key\":\"qt\",\"mappings\":{\"default\":{\"default\":\"quarts\",\"singular\":\"quart\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"qt\",\"qt.\"]},{\"key\":\"tbsp\",\"mappings\":{\"default\":{\"default\":\"cuillères de table\",\"singular\":\"cuillèe de table\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"tbsp\",\"tbsp.\"]},{\"key\":\"tsp\",\"mappings\":{\"default\":{\"default\":\"cuillèes à thé\",\"singular\":\"cuillère à thé\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"tsp\",\"tsp.\"]},{\"key\":\"l\",\"mappings\":{\"default\":{\"default\":\"litres\",\"singular\":\"litre\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"l\"]}]\n,\n\"fr/units/weight.js\": \n[{\"locale\":\"fr\"},{\"key\":\"lb\",\"mappings\":{\"default\":{\"default\":\"livres\",\"singular\":\"livre\",\"dual\":\"\"}},\"names\":[\"lb\",\"lb.\"]},{\"key\":\"oz\",\"mappings\":{\"default\":{\"default\":\"onces\",\"singular\":\"oce\",\"dual\":\"\"}},\"names\":[\"oz\",\"oz.\"]},{\"key\":\"gr\",\"mappings\":{\"default\":{\"default\":\"grains\",\"singular\":\"grain\",\"dual\":\"\"}},\"names\":[\"g\",\"gr\"]},{\"key\":\"t\",\"mappings\":{\"default\":{\"default\":\"tonnes\",\"singular\":\"tonne\",\"dual\":\"\"}},\"names\":[\"t\",\"T\"]}]\n}\n\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/sre/mathmaps/mathmaps_ie.js",
    "content": "sre.BrowserUtil.mapsForIE = {\n\"en/functions/algebra.js\": \n[{\"locale\":\"en\"},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"degree\"}},\"key\":\"deg\",\"names\":[\"deg\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"determinant\"},\"mathspeak\":{\"default\":\"det\"}},\"key\":\"det\",\"names\":[\"det\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"dimension\"}},\"key\":\"dim\",\"names\":[\"dim\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"homomorphism\"},\"mathspeak\":{\"default\":\"hom\"},\"clearspeak\":{\"default\":\"hom\"}},\"key\":\"hom\",\"names\":[\"hom\",\"Hom\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"kernel\"}},\"key\":\"ker\",\"names\":[\"ker\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"trace\"}},\"key\":\"Tr\",\"names\":[\"Tr\",\"tr\"]}]\n,\n\"en/functions/elementary.js\": \n[{\"locale\":\"en\"},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"log\"}},\"key\":\"log\",\"names\":[\"log\"]},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"natural log\"},\"mathspeak\":{\"default\":\"ln\"},\"clearspeak\":{\"default\":\"l n\",\"Log_LnAsNaturalLog\":\"natural log\"}},\"key\":\"ln\",\"names\":[\"ln\"]},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"log base 10\"}},\"key\":\"lg\",\"names\":[\"lg\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"exponential\"},\"mathspeak\":{\"default\":\"exp\"},\"clearspeak\":{\"default\":\"exp\"}},\"key\":\"exp\",\"names\":[\"exp\",\"expt\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"greatest common divisor\"},\"mathspeak\":{\"default\":\"gcd\"},\"clearspeak\":{\"default\":\"gcd\"}},\"key\":\"gcd\",\"names\":[\"gcd\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"least common multiple\"},\"mathspeak\":{\"default\":\"lcm\"},\"clearspeak\":{\"default\":\"lcm\"}},\"key\":\"lcm\",\"names\":[\"lcm\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"argument\"},\"mathspeak\":{\"default\":\"arg\"},\"clearspeak\":{\"default\":\"arg\"}},\"key\":\"arg\",\"names\":[\"arg\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"imaginary part\"},\"mathspeak\":{\"default\":\"im\"},\"clearspeak\":{\"default\":\"imaginary\"}},\"key\":\"im\",\"names\":[\"im\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"real part\"},\"mathspeak\":{\"default\":\"re\"},\"clearspeak\":{\"default\":\"real\"}},\"key\":\"re\",\"names\":[\"re\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"infimum\"},\"mathspeak\":{\"default\":\"inf\"},\"clearspeak\":{\"default\":\"inf\"}},\"key\":\"inf\",\"names\":[\"inf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"limit\"},\"mathspeak\":{\"default\":\"limit\"},\"clearspeak\":{\"default\":\"lim\"}},\"key\":\"lim\",\"names\":[\"lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"limit inferior\"},\"mathspeak\":{\"default\":\"liminf\"},\"clearspeak\":{\"default\":\"liminf\"}},\"key\":\"liminf\",\"names\":[\"lim inf\",\"liminf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"limit superior\"},\"mathspeak\":{\"default\":\"limsup\"},\"clearspeak\":{\"default\":\"limsup\"}},\"key\":\"limsup\",\"names\":[\"lim sup\",\"limsup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"maximum\"},\"mathspeak\":{\"default\":\"max\"},\"clearspeak\":{\"default\":\"max\"}},\"key\":\"max\",\"names\":[\"max\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"minimum\"},\"mathspeak\":{\"default\":\"min\"},\"clearspeak\":{\"default\":\"min\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"supremum\"},\"mathspeak\":{\"default\":\"sup\"},\"clearspeak\":{\"default\":\"sup\"}},\"key\":\"sup\",\"names\":[\"sup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"colimit\"}},\"key\":\"injlim\",\"names\":[\"injlim\",\"inj lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"projective limit\"}},\"key\":\"projlim\",\"names\":[\"projlim\",\"proj lim\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"modulo\"},\"mathspeak\":{\"default\":\"mod\"},\"clearspeak\":{\"default\":\"mod\"}},\"key\":\"mod\",\"names\":[\"mod\"]},{\"category\":\"Probability\",\"mappings\":{\"default\":{\"default\":\"probability\"}},\"key\":\"Pr\",\"names\":[\"Pr\"]}]\n,\n\"en/functions/hyperbolic.js\": \n[{\"locale\":\"en\"},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic cosine\"}},\"key\":\"cosh\",\"names\":[\"cosh\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic cotangent\"}},\"key\":\"coth\",\"names\":[\"coth\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic cosecant\"}},\"key\":\"csch\",\"names\":[\"csch\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic secant\"}},\"key\":\"sech\",\"names\":[\"sech\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic sine\"}},\"key\":\"sinh\",\"names\":[\"sinh\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"hyperbolic tangent\"}},\"key\":\"tanh\",\"names\":[\"tanh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic cosine\"}},\"key\":\"arcosh\",\"names\":[\"arcosh\",\"arccosh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic cotangent\"}},\"key\":\"arcoth\",\"names\":[\"arcoth\",\"arccoth\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic cosecant\"}},\"key\":\"arcsch\",\"names\":[\"arcsch\",\"arccsch\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic secant\"}},\"key\":\"arsech\",\"names\":[\"arsech\",\"arcsech\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic sine\"}},\"key\":\"arsinh\",\"names\":[\"arsinh\",\"arcsinh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"area hyperbolic tangent\"}},\"key\":\"artanh\",\"names\":[\"artanh\",\"arctanh\"]}]\n,\n\"en/functions/trigonometry.js\": \n[{\"locale\":\"en\"},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"cosine\"}},\"key\":\"cos\",\"names\":[\"cos\",\"cosine\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"cotangent\"}},\"key\":\"cot\",\"names\":[\"cot\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"cosecant\"}},\"key\":\"csc\",\"names\":[\"csc\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"secant\"}},\"key\":\"sec\",\"names\":[\"sec\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"sine\"}},\"key\":\"sin\",\"names\":[\"sin\",\"sine\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"tangent\"}},\"key\":\"tan\",\"names\":[\"tan\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cosine\"},\"clearspeak\":{\"Trig_TrigInverse\":\"cosine inverse\"}},\"key\":\"arccos\",\"names\":[\"arccos\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cotangent\"},\"clearspeak\":{\"Trig_TrigInverse\":\"cotangent inverse\"}},\"key\":\"arccot\",\"names\":[\"arccot\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cosecant\"},\"clearspeak\":{\"Trig_TrigInverse\":\"cosecant inverse\"}},\"key\":\"arccsc\",\"names\":[\"arccsc\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc secant\"},\"clearspeak\":{\"Trig_TrigInverse\":\"secant inverse\"}},\"key\":\"arcsec\",\"names\":[\"arcsec\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc sine\"},\"clearspeak\":{\"Trig_TrigInverse\":\"sine inverse\"}},\"key\":\"arcsin\",\"names\":[\"arcsin\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc tangent\"},\"clearspeak\":{\"Trig_TrigInverse\":\"tangent inverse\"}},\"key\":\"arctan\",\"names\":[\"arctan\"]}]\n,\n\"en/symbols/digits_rest.js\": \n[{\"locale\":\"en\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"squared\"},\"mathspeak\":{\"default\":\"squared\"},\"clearspeak\":{\"default\":\"squared\"}},\"key\":\"00B2\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"cubed\"},\"mathspeak\":{\"default\":\"cubed\"},\"clearspeak\":{\"default\":\"cubed\"}},\"key\":\"00B3\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one quarter\"}},\"key\":\"00BC\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one half\"}},\"key\":\"00BD\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"three quarters\"}},\"key\":\"00BE\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one seventh\"}},\"key\":\"2150\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one ninth\"}},\"key\":\"2151\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one tenth\"}},\"key\":\"2152\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one third\"}},\"key\":\"2153\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"two thirds\"}},\"key\":\"2154\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one fifth\"}},\"key\":\"2155\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"two fifths\"}},\"key\":\"2156\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"three fifths\"}},\"key\":\"2157\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"four fifths\"}},\"key\":\"2158\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one sixth\"}},\"key\":\"2159\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"five sixths\"}},\"key\":\"215A\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"one eighth\"}},\"key\":\"215B\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"three eighths\"}},\"key\":\"215C\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"five eighths\"}},\"key\":\"215D\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"seven eighths\"}},\"key\":\"215E\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"numerator one\"}},\"key\":\"215F\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"zero thirds\"}},\"key\":\"2189\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled ten on black square\"}},\"key\":\"3248\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled twenty on black square\"}},\"key\":\"3249\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled thirty on black square\"}},\"key\":\"324A\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled forty on black square\"}},\"key\":\"324B\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled fifty on black square\"}},\"key\":\"324C\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled sixty on black square\"}},\"key\":\"324D\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled seventy on black square\"}},\"key\":\"324E\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"circled eighty on black square\"}},\"key\":\"324F\"}]\n,\n\"en/symbols/greek-rest.js\": \n[{\"locale\":\"en\"},{\"category\":\"Lu\",\"key\":\"0394\",\"mappings\":{\"clearspeak\":{\"default\":\"triangle\",\"TriangleSymbol_Delta\":\"cap Delta\"}}}]\n,\n\"en/symbols/greek-scripts.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"key\":\"1D26\",\"mappings\":{\"default\":{\"default\":\"small cap Gamma\"},\"mathspeak\":{\"default\":\"small upper Gamma\"}}},{\"category\":\"Ll\",\"key\":\"1D27\",\"mappings\":{\"default\":{\"default\":\"small cap Lamda\"},\"mathspeak\":{\"default\":\"small upper Lamda\"}}},{\"category\":\"Ll\",\"key\":\"1D28\",\"mappings\":{\"default\":{\"default\":\"small cap Pi\"},\"mathspeak\":{\"default\":\"small upper Pi\"}}},{\"category\":\"Ll\",\"key\":\"1D29\",\"mappings\":{\"default\":{\"default\":\"small cap Rho\"},\"mathspeak\":{\"default\":\"small upper Rho\"}}},{\"category\":\"Ll\",\"key\":\"1D2A\",\"mappings\":{\"default\":{\"default\":\"small cap Psi\"},\"mathspeak\":{\"default\":\"small upper Psi\"}}},{\"category\":\"Lm\",\"key\":\"1D5E\",\"mappings\":{\"default\":{\"default\":\"superscript gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D60\",\"mappings\":{\"default\":{\"default\":\"superscript phi\"}}},{\"category\":\"Lm\",\"key\":\"1D66\",\"mappings\":{\"default\":{\"default\":\"subscript beta\"}}},{\"category\":\"Lm\",\"key\":\"1D67\",\"mappings\":{\"default\":{\"default\":\"subscript gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D68\",\"mappings\":{\"default\":{\"default\":\"subscript rho\"}}},{\"category\":\"Lm\",\"key\":\"1D69\",\"mappings\":{\"default\":{\"default\":\"subscript phi\"}}},{\"category\":\"Lm\",\"key\":\"1D6A\",\"mappings\":{\"default\":{\"default\":\"subscript chi\"}}}]\n,\n\"en/symbols/greek-symbols.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"beta\"}},\"key\":\"03D0\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"kai\"}},\"key\":\"03D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed epsilon\"}},\"key\":\"03F6\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"bold cap Digamma\"},\"mathspeak\":{\"default\":\"bold upper Digamma\"}},\"key\":\"1D7CA\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"bold digamma\"}},\"key\":\"1D7CB\"}]\n,\n\"en/symbols/hebrew_letters.js\": \n[{\"locale\":\"en\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"first transfinite cardinal\",\"alternative\":\"alef\"}},\"key\":\"2135\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"second transfinite cardinal\",\"alternative\":\"bet\"}},\"key\":\"2136\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"third transfinite cardinal\",\"alternative\":\"gimel\"}},\"key\":\"2137\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"fourth transfinite cardinal\",\"alternative\":\"dalet\"}},\"key\":\"2138\"}]\n,\n\"en/symbols/latin-lower-double-accent.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"key\":\"01D6\",\"mappings\":{\"default\":{\"default\":\"u double overdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"01D8\",\"mappings\":{\"default\":{\"default\":\"u double overdot acute\"}}},{\"category\":\"Ll\",\"key\":\"01DA\",\"mappings\":{\"default\":{\"default\":\"u double overdot caron\"}}},{\"category\":\"Ll\",\"key\":\"01DC\",\"mappings\":{\"default\":{\"default\":\"u double overdot grave\"}}},{\"category\":\"Ll\",\"key\":\"01DF\",\"mappings\":{\"default\":{\"default\":\"a double overdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"01E1\",\"mappings\":{\"default\":{\"default\":\"a overdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"01ED\",\"mappings\":{\"default\":{\"default\":\"o ogonek overbar\"}}},{\"category\":\"Ll\",\"key\":\"01FB\",\"mappings\":{\"default\":{\"default\":\"a ring above acute\"}}},{\"category\":\"Ll\",\"key\":\"022B\",\"mappings\":{\"default\":{\"default\":\"o double overdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"022D\",\"mappings\":{\"default\":{\"default\":\"o tilde overbar\"}}},{\"category\":\"Ll\",\"key\":\"0231\",\"mappings\":{\"default\":{\"default\":\"o overdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"1E09\",\"mappings\":{\"default\":{\"default\":\"c cedilla acute\"}}},{\"category\":\"Ll\",\"key\":\"1E15\",\"mappings\":{\"default\":{\"default\":\"e overbar grave\"}}},{\"category\":\"Ll\",\"key\":\"1E17\",\"mappings\":{\"default\":{\"default\":\"e overbar acute\"}}},{\"category\":\"Ll\",\"key\":\"1E1D\",\"mappings\":{\"default\":{\"default\":\"e cedilla breve\"}}},{\"category\":\"Ll\",\"key\":\"1E2F\",\"mappings\":{\"default\":{\"default\":\"i double overdot acute\"}}},{\"category\":\"Ll\",\"key\":\"1E39\",\"mappings\":{\"default\":{\"default\":\"l underdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"1E4D\",\"mappings\":{\"default\":{\"default\":\"o tilde acute\"}}},{\"category\":\"Ll\",\"key\":\"1E4F\",\"mappings\":{\"default\":{\"default\":\"o tilde double overdot\"}}},{\"category\":\"Ll\",\"key\":\"1E51\",\"mappings\":{\"default\":{\"default\":\"o overbar grave\"}}},{\"category\":\"Ll\",\"key\":\"1E53\",\"mappings\":{\"default\":{\"default\":\"o overbar acute\"}}},{\"category\":\"Ll\",\"key\":\"1E5D\",\"mappings\":{\"default\":{\"default\":\"r underdot overbar\"}}},{\"category\":\"Ll\",\"key\":\"1E65\",\"mappings\":{\"default\":{\"default\":\"s acute overdot\"}}},{\"category\":\"Ll\",\"key\":\"1E67\",\"mappings\":{\"default\":{\"default\":\"s caron overdot\"}}},{\"category\":\"Ll\",\"key\":\"1E69\",\"mappings\":{\"default\":{\"default\":\"s underdot overdot\"}}},{\"category\":\"Ll\",\"key\":\"1E79\",\"mappings\":{\"default\":{\"default\":\"u tilde acute\"}}},{\"category\":\"Ll\",\"key\":\"1E7B\",\"mappings\":{\"default\":{\"default\":\"u overbar double overdot\"}}},{\"category\":\"Ll\",\"key\":\"1EA5\",\"mappings\":{\"default\":{\"default\":\"a hat acute\"}}},{\"category\":\"Ll\",\"key\":\"1EA7\",\"mappings\":{\"default\":{\"default\":\"a hat grave\"}}},{\"category\":\"Ll\",\"key\":\"1EA9\",\"mappings\":{\"default\":{\"default\":\"a hat hook above\"}}},{\"category\":\"Ll\",\"key\":\"1EAB\",\"mappings\":{\"default\":{\"default\":\"a hat tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EAD\",\"mappings\":{\"default\":{\"default\":\"a hat underdot\"}}},{\"category\":\"Ll\",\"key\":\"1EAF\",\"mappings\":{\"default\":{\"default\":\"a breve acute\"}}},{\"category\":\"Ll\",\"key\":\"1EB1\",\"mappings\":{\"default\":{\"default\":\"a breve grave\"}}},{\"category\":\"Ll\",\"key\":\"1EB3\",\"mappings\":{\"default\":{\"default\":\"a breve hook above\"}}},{\"category\":\"Ll\",\"key\":\"1EB5\",\"mappings\":{\"default\":{\"default\":\"a breve tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EB7\",\"mappings\":{\"default\":{\"default\":\"a breve underdot\"}}},{\"category\":\"Ll\",\"key\":\"1EBF\",\"mappings\":{\"default\":{\"default\":\"e hat acute\"}}},{\"category\":\"Ll\",\"key\":\"1EC1\",\"mappings\":{\"default\":{\"default\":\"e hat grave\"}}},{\"category\":\"Ll\",\"key\":\"1EC3\",\"mappings\":{\"default\":{\"default\":\"e hat hook above\"}}},{\"category\":\"Ll\",\"key\":\"1EC5\",\"mappings\":{\"default\":{\"default\":\"e hat tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EC7\",\"mappings\":{\"default\":{\"default\":\"e hat underdot\"}}},{\"category\":\"Ll\",\"key\":\"1ED1\",\"mappings\":{\"default\":{\"default\":\"o hat acute\"}}},{\"category\":\"Ll\",\"key\":\"1ED3\",\"mappings\":{\"default\":{\"default\":\"o hat grave\"}}},{\"category\":\"Ll\",\"key\":\"1ED5\",\"mappings\":{\"default\":{\"default\":\"o hat hook above\"}}},{\"category\":\"Ll\",\"key\":\"1ED7\",\"mappings\":{\"default\":{\"default\":\"o hat tilde\"}}},{\"category\":\"Ll\",\"key\":\"1ED9\",\"mappings\":{\"default\":{\"default\":\"o hat underdot\"}}},{\"category\":\"Ll\",\"key\":\"1EDB\",\"mappings\":{\"default\":{\"default\":\"o acute prime\"}}},{\"category\":\"Ll\",\"key\":\"1EDD\",\"mappings\":{\"default\":{\"default\":\"o grave prime\"}}},{\"category\":\"Ll\",\"key\":\"1EDF\",\"mappings\":{\"default\":{\"default\":\"o hook above prime\"}}},{\"category\":\"Ll\",\"key\":\"1EE1\",\"mappings\":{\"default\":{\"default\":\"o tilde prime\"}}},{\"category\":\"Ll\",\"key\":\"1EE3\",\"mappings\":{\"default\":{\"default\":\"o underdot prime\"}}},{\"category\":\"Ll\",\"key\":\"1EE9\",\"mappings\":{\"default\":{\"default\":\"u acute prime\"}}},{\"category\":\"Ll\",\"key\":\"1EEB\",\"mappings\":{\"default\":{\"default\":\"u grave prime\"}}},{\"category\":\"Ll\",\"key\":\"1EED\",\"mappings\":{\"default\":{\"default\":\"u hook above prime\"}}},{\"category\":\"Ll\",\"key\":\"1EEF\",\"mappings\":{\"default\":{\"default\":\"u tilde prime\"}}},{\"category\":\"Ll\",\"key\":\"1EF1\",\"mappings\":{\"default\":{\"default\":\"u underdot prime\"}}}]\n,\n\"en/symbols/latin-lower-phonetic.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"key\":\"00F8\",\"mappings\":{\"default\":{\"default\":\"o with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0111\",\"mappings\":{\"default\":{\"default\":\"d with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0127\",\"mappings\":{\"default\":{\"default\":\"h with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0142\",\"mappings\":{\"default\":{\"default\":\"l with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0167\",\"mappings\":{\"default\":{\"default\":\"t with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0180\",\"mappings\":{\"default\":{\"default\":\"b with stroke\"}}},{\"category\":\"Ll\",\"key\":\"019B\",\"mappings\":{\"default\":{\"default\":\"lambda with stroke\"}}},{\"category\":\"Ll\",\"key\":\"01B6\",\"mappings\":{\"default\":{\"default\":\"z with stroke\"}}},{\"category\":\"Ll\",\"key\":\"01BE\",\"mappings\":{\"default\":{\"default\":\"latin letter inverted glottal stop with stroke\"}}},{\"category\":\"Ll\",\"key\":\"01E5\",\"mappings\":{\"default\":{\"default\":\"g with stroke\"}}},{\"category\":\"Ll\",\"key\":\"01FF\",\"mappings\":{\"default\":{\"default\":\"o with stroke and acute\"}}},{\"category\":\"Ll\",\"key\":\"023C\",\"mappings\":{\"default\":{\"default\":\"c with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0247\",\"mappings\":{\"default\":{\"default\":\"e with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0249\",\"mappings\":{\"default\":{\"default\":\"j with stroke\"}}},{\"category\":\"Ll\",\"key\":\"024D\",\"mappings\":{\"default\":{\"default\":\"r with stroke\"}}},{\"category\":\"Ll\",\"key\":\"024F\",\"mappings\":{\"default\":{\"default\":\"y with stroke\"}}},{\"category\":\"Ll\",\"key\":\"025F\",\"mappings\":{\"default\":{\"default\":\"dotless j with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0268\",\"mappings\":{\"default\":{\"default\":\"i with stroke\"}}},{\"category\":\"Ll\",\"key\":\"0284\",\"mappings\":{\"default\":{\"default\":\"dotless j with stroke and hook\"}}},{\"category\":\"Ll\",\"key\":\"02A1\",\"mappings\":{\"default\":{\"default\":\"latin letter glottal stop with stroke\"}}},{\"category\":\"Ll\",\"key\":\"02A2\",\"mappings\":{\"default\":{\"default\":\"latin letter reversed glottal stop with stroke\"}}},{\"category\":\"Ll\",\"key\":\"1D13\",\"mappings\":{\"default\":{\"default\":\"sideways o with stroke\"}}},{\"category\":\"Ll\",\"key\":\"1D7C\",\"mappings\":{\"default\":{\"default\":\"iota with stroke\"}}},{\"category\":\"Ll\",\"key\":\"1D7D\",\"mappings\":{\"default\":{\"default\":\"p with stroke\"}}},{\"category\":\"Ll\",\"key\":\"1D7F\",\"mappings\":{\"default\":{\"default\":\"upsilon with stroke\"}}},{\"category\":\"Ll\",\"key\":\"1E9C\",\"mappings\":{\"default\":{\"default\":\"long s with diagonal stroke\"}}},{\"category\":\"Ll\",\"key\":\"1E9D\",\"mappings\":{\"default\":{\"default\":\"long s with high stroke\"}}},{\"category\":\"Ll\",\"key\":\"018D\",\"mappings\":{\"default\":{\"default\":\"turned delta\"}}},{\"category\":\"Ll\",\"key\":\"1E9B\",\"mappings\":{\"default\":{\"default\":\"long s with dot above\"}}},{\"category\":\"Ll\",\"key\":\"1E9F\",\"mappings\":{\"default\":{\"default\":\"delta\"}}},{\"category\":\"Ll\",\"key\":\"0138\",\"mappings\":{\"default\":{\"default\":\"kra\"}}},{\"category\":\"Ll\",\"key\":\"017F\",\"mappings\":{\"default\":{\"default\":\"long s\"}}},{\"category\":\"Ll\",\"key\":\"0183\",\"mappings\":{\"default\":{\"default\":\"b with topbar\"}}},{\"category\":\"Ll\",\"key\":\"0185\",\"mappings\":{\"default\":{\"default\":\"tone six\"}}},{\"category\":\"Ll\",\"key\":\"0188\",\"mappings\":{\"default\":{\"default\":\"c with hook\"}}},{\"category\":\"Ll\",\"key\":\"018C\",\"mappings\":{\"default\":{\"default\":\"d with topbar\"}}},{\"category\":\"Ll\",\"key\":\"0192\",\"mappings\":{\"default\":{\"default\":\"f with hook\"}}},{\"category\":\"Ll\",\"key\":\"0195\",\"mappings\":{\"default\":{\"default\":\"hv\"}}},{\"category\":\"Ll\",\"key\":\"0199\",\"mappings\":{\"default\":{\"default\":\"k with hook\"}}},{\"category\":\"Ll\",\"key\":\"019A\",\"mappings\":{\"default\":{\"default\":\"l with bar\"}}},{\"category\":\"Ll\",\"key\":\"019E\",\"mappings\":{\"default\":{\"default\":\"n with long right leg\"}}},{\"category\":\"Ll\",\"key\":\"01A1\",\"mappings\":{\"default\":{\"default\":\"o with horn\"}}},{\"category\":\"Ll\",\"key\":\"01A3\",\"mappings\":{\"default\":{\"default\":\"oi\"}}},{\"category\":\"Ll\",\"key\":\"01A5\",\"mappings\":{\"default\":{\"default\":\"p with hook\"}}},{\"category\":\"Ll\",\"key\":\"01A8\",\"mappings\":{\"default\":{\"default\":\"tone two\"}}},{\"category\":\"Ll\",\"key\":\"01AA\",\"mappings\":{\"default\":{\"default\":\"latin letter reversed esh loop\"}}},{\"category\":\"Ll\",\"key\":\"01AB\",\"mappings\":{\"default\":{\"default\":\"t with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"01AD\",\"mappings\":{\"default\":{\"default\":\"t with hook\"}}},{\"category\":\"Ll\",\"key\":\"01B0\",\"mappings\":{\"default\":{\"default\":\"u with horn\"}}},{\"category\":\"Ll\",\"key\":\"01B4\",\"mappings\":{\"default\":{\"default\":\"y with hook\"}}},{\"category\":\"Ll\",\"key\":\"01B9\",\"mappings\":{\"default\":{\"default\":\"ezh reversed\"}}},{\"category\":\"Ll\",\"key\":\"01BA\",\"mappings\":{\"default\":{\"default\":\"ezh with tail\"}}},{\"category\":\"Ll\",\"key\":\"01BD\",\"mappings\":{\"default\":{\"default\":\"tone five\"}}},{\"category\":\"Ll\",\"key\":\"01BF\",\"mappings\":{\"default\":{\"default\":\"latin letter wynn\"}}},{\"category\":\"Ll\",\"key\":\"01C6\",\"mappings\":{\"default\":{\"default\":\"dz with caron\"}}},{\"category\":\"Ll\",\"key\":\"01C9\",\"mappings\":{\"default\":{\"default\":\"lj\"}}},{\"category\":\"Ll\",\"key\":\"01CC\",\"mappings\":{\"default\":{\"default\":\"nj\"}}},{\"category\":\"Ll\",\"key\":\"01E3\",\"mappings\":{\"default\":{\"default\":\"ae with macron\"}}},{\"category\":\"Ll\",\"key\":\"01EF\",\"mappings\":{\"default\":{\"default\":\"ezh with caron\"}}},{\"category\":\"Ll\",\"key\":\"01F3\",\"mappings\":{\"default\":{\"default\":\"dz\"}}},{\"category\":\"Ll\",\"key\":\"021D\",\"mappings\":{\"default\":{\"default\":\"yogh\"}}},{\"category\":\"Ll\",\"key\":\"026E\",\"mappings\":{\"default\":{\"default\":\"lezh\"}}},{\"category\":\"Ll\",\"key\":\"0292\",\"mappings\":{\"default\":{\"default\":\"ezh\"}}},{\"category\":\"Ll\",\"key\":\"0293\",\"mappings\":{\"default\":{\"default\":\"ezh with curl\"}}},{\"category\":\"Ll\",\"key\":\"02A4\",\"mappings\":{\"default\":{\"default\":\"dezh digraph\"}}},{\"category\":\"Ll\",\"key\":\"01DD\",\"mappings\":{\"default\":{\"default\":\"turned e\"}}},{\"category\":\"Ll\",\"key\":\"01FD\",\"mappings\":{\"default\":{\"default\":\"ae with acute\"}}},{\"category\":\"Ll\",\"key\":\"0221\",\"mappings\":{\"default\":{\"default\":\"d with curl\"}}},{\"category\":\"Ll\",\"key\":\"0223\",\"mappings\":{\"default\":{\"default\":\"ou\"}}},{\"category\":\"Ll\",\"key\":\"0225\",\"mappings\":{\"default\":{\"default\":\"z with hook\"}}},{\"category\":\"Ll\",\"key\":\"0234\",\"mappings\":{\"default\":{\"default\":\"l with curl\"}}},{\"category\":\"Ll\",\"key\":\"0235\",\"mappings\":{\"default\":{\"default\":\"n with curl\"}}},{\"category\":\"Ll\",\"key\":\"0236\",\"mappings\":{\"default\":{\"default\":\"t with curl\"}}},{\"category\":\"Ll\",\"key\":\"0238\",\"mappings\":{\"default\":{\"default\":\"db digraph\"}}},{\"category\":\"Ll\",\"key\":\"0239\",\"mappings\":{\"default\":{\"default\":\"qp digraph\"}}},{\"category\":\"Ll\",\"key\":\"023F\",\"mappings\":{\"default\":{\"default\":\"s with swash tail\"}}},{\"category\":\"Ll\",\"key\":\"0240\",\"mappings\":{\"default\":{\"default\":\"z with swash tail\"}}},{\"category\":\"Ll\",\"key\":\"0242\",\"mappings\":{\"default\":{\"default\":\"glottal stop\"}}},{\"category\":\"Ll\",\"key\":\"024B\",\"mappings\":{\"default\":{\"default\":\"q with hook tail\"}}},{\"category\":\"Ll\",\"key\":\"0250\",\"mappings\":{\"default\":{\"default\":\"turned a\"}}},{\"category\":\"Ll\",\"key\":\"0251\",\"mappings\":{\"default\":{\"default\":\"alpha\"}}},{\"category\":\"Ll\",\"key\":\"0252\",\"mappings\":{\"default\":{\"default\":\"turned alpha\"}}},{\"category\":\"Ll\",\"key\":\"0253\",\"mappings\":{\"default\":{\"default\":\"b with hook\"}}},{\"category\":\"Ll\",\"key\":\"0254\",\"mappings\":{\"default\":{\"default\":\"open o\"}}},{\"category\":\"Ll\",\"key\":\"0255\",\"mappings\":{\"default\":{\"default\":\"c with curl\"}}},{\"category\":\"Ll\",\"key\":\"0256\",\"mappings\":{\"default\":{\"default\":\"d with tail\"}}},{\"category\":\"Ll\",\"key\":\"0257\",\"mappings\":{\"default\":{\"default\":\"d with hook\"}}},{\"category\":\"Ll\",\"key\":\"0258\",\"mappings\":{\"default\":{\"default\":\"reversed e\"}}},{\"category\":\"Ll\",\"key\":\"0259\",\"mappings\":{\"default\":{\"default\":\"schwa\"}}},{\"category\":\"Ll\",\"key\":\"025A\",\"mappings\":{\"default\":{\"default\":\"schwa with hook\"}}},{\"category\":\"Ll\",\"key\":\"025B\",\"mappings\":{\"default\":{\"default\":\"open e\"}}},{\"category\":\"Ll\",\"key\":\"025C\",\"mappings\":{\"default\":{\"default\":\"reversed open e\"}}},{\"category\":\"Ll\",\"key\":\"025D\",\"mappings\":{\"default\":{\"default\":\"reversed open e with hook\"}}},{\"category\":\"Ll\",\"key\":\"025E\",\"mappings\":{\"default\":{\"default\":\"closed reversed open e\"}}},{\"category\":\"Ll\",\"key\":\"0260\",\"mappings\":{\"default\":{\"default\":\"g with hook\"}}},{\"category\":\"Ll\",\"key\":\"0261\",\"mappings\":{\"default\":{\"default\":\"script g\"}}},{\"category\":\"Ll\",\"key\":\"0263\",\"mappings\":{\"default\":{\"default\":\"gamma\"}}},{\"category\":\"Ll\",\"key\":\"0264\",\"mappings\":{\"default\":{\"default\":\"rams horn\"}}},{\"category\":\"Ll\",\"key\":\"0265\",\"mappings\":{\"default\":{\"default\":\"turned h\"}}},{\"category\":\"Ll\",\"key\":\"0266\",\"mappings\":{\"default\":{\"default\":\"h with hook\"}}},{\"category\":\"Ll\",\"key\":\"0267\",\"mappings\":{\"default\":{\"default\":\"heng with hook\"}}},{\"category\":\"Ll\",\"key\":\"0269\",\"mappings\":{\"default\":{\"default\":\"iota\"}}},{\"category\":\"Ll\",\"key\":\"026B\",\"mappings\":{\"default\":{\"default\":\"l with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"026C\",\"mappings\":{\"default\":{\"default\":\"l with belt\"}}},{\"category\":\"Ll\",\"key\":\"026D\",\"mappings\":{\"default\":{\"default\":\"l with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"026F\",\"mappings\":{\"default\":{\"default\":\"turned m\"}}},{\"category\":\"Ll\",\"key\":\"0270\",\"mappings\":{\"default\":{\"default\":\"turned m with long leg\"}}},{\"category\":\"Ll\",\"key\":\"0271\",\"mappings\":{\"default\":{\"default\":\"m with hook\"}}},{\"category\":\"Ll\",\"key\":\"0272\",\"mappings\":{\"default\":{\"default\":\"n with left hook\"}}},{\"category\":\"Ll\",\"key\":\"0273\",\"mappings\":{\"default\":{\"default\":\"n with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"0275\",\"mappings\":{\"default\":{\"default\":\"barred o\"}}},{\"category\":\"Ll\",\"key\":\"0277\",\"mappings\":{\"default\":{\"default\":\"closed omega\"}}},{\"category\":\"Ll\",\"key\":\"0278\",\"mappings\":{\"default\":{\"default\":\"phi\"}}},{\"category\":\"Ll\",\"key\":\"0279\",\"mappings\":{\"default\":{\"default\":\"turned r\"}}},{\"category\":\"Ll\",\"key\":\"027A\",\"mappings\":{\"default\":{\"default\":\"turned r with long leg\"}}},{\"category\":\"Ll\",\"key\":\"027B\",\"mappings\":{\"default\":{\"default\":\"turned r with hook\"}}},{\"category\":\"Ll\",\"key\":\"027C\",\"mappings\":{\"default\":{\"default\":\"r with long leg\"}}},{\"category\":\"Ll\",\"key\":\"027D\",\"mappings\":{\"default\":{\"default\":\"r with tail\"}}},{\"category\":\"Ll\",\"key\":\"027E\",\"mappings\":{\"default\":{\"default\":\"r with fishhook\"}}},{\"category\":\"Ll\",\"key\":\"027F\",\"mappings\":{\"default\":{\"default\":\"reversed r with fishhook\"}}},{\"category\":\"Ll\",\"key\":\"0282\",\"mappings\":{\"default\":{\"default\":\"s with hook\"}}},{\"category\":\"Ll\",\"key\":\"0283\",\"mappings\":{\"default\":{\"default\":\"esh\"}}},{\"category\":\"Ll\",\"key\":\"0285\",\"mappings\":{\"default\":{\"default\":\"squat reversed esh\"}}},{\"category\":\"Ll\",\"key\":\"0286\",\"mappings\":{\"default\":{\"default\":\"esh with curl\"}}},{\"category\":\"Ll\",\"key\":\"0287\",\"mappings\":{\"default\":{\"default\":\"turned t\"}}},{\"category\":\"Ll\",\"key\":\"0288\",\"mappings\":{\"default\":{\"default\":\"t with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"0289\",\"mappings\":{\"default\":{\"default\":\"u bar\"}}},{\"category\":\"Ll\",\"key\":\"028A\",\"mappings\":{\"default\":{\"default\":\"upsilon\"}}},{\"category\":\"Ll\",\"key\":\"028B\",\"mappings\":{\"default\":{\"default\":\"v with hook\"}}},{\"category\":\"Ll\",\"key\":\"028C\",\"mappings\":{\"default\":{\"default\":\"turned v\"}}},{\"category\":\"Ll\",\"key\":\"028D\",\"mappings\":{\"default\":{\"default\":\"turned w\"}}},{\"category\":\"Ll\",\"key\":\"028E\",\"mappings\":{\"default\":{\"default\":\"turned y\"}}},{\"category\":\"Ll\",\"key\":\"0290\",\"mappings\":{\"default\":{\"default\":\"z with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"0291\",\"mappings\":{\"default\":{\"default\":\"z with curl\"}}},{\"category\":\"Ll\",\"key\":\"0295\",\"mappings\":{\"default\":{\"default\":\"latin letter pharyngeal voiced fricative\"}}},{\"category\":\"Ll\",\"key\":\"0296\",\"mappings\":{\"default\":{\"default\":\"latin letter inverted glottal stop\"}}},{\"category\":\"Ll\",\"key\":\"0297\",\"mappings\":{\"default\":{\"default\":\"latin letter stretched c\"}}},{\"category\":\"Ll\",\"key\":\"0298\",\"mappings\":{\"default\":{\"default\":\"latin letter bilabial click\"}}},{\"category\":\"Ll\",\"key\":\"029A\",\"mappings\":{\"default\":{\"default\":\"closed open e\"}}},{\"category\":\"Ll\",\"key\":\"029E\",\"mappings\":{\"default\":{\"default\":\"turned k\"}}},{\"category\":\"Ll\",\"key\":\"02A0\",\"mappings\":{\"default\":{\"default\":\"q with hook\"}}},{\"category\":\"Ll\",\"key\":\"02A3\",\"mappings\":{\"default\":{\"default\":\"dz digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A5\",\"mappings\":{\"default\":{\"default\":\"dz digraph with curl\"}}},{\"category\":\"Ll\",\"key\":\"02A6\",\"mappings\":{\"default\":{\"default\":\"ts digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A7\",\"mappings\":{\"default\":{\"default\":\"tesh digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A8\",\"mappings\":{\"default\":{\"default\":\"tc digraph with curl\"}}},{\"category\":\"Ll\",\"key\":\"02A9\",\"mappings\":{\"default\":{\"default\":\"feng digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AA\",\"mappings\":{\"default\":{\"default\":\"ls digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AB\",\"mappings\":{\"default\":{\"default\":\"lz digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AC\",\"mappings\":{\"default\":{\"default\":\"latin letter bilabial percussive\"}}},{\"category\":\"Ll\",\"key\":\"02AD\",\"mappings\":{\"default\":{\"default\":\"latin letter bidental percussive\"}}},{\"category\":\"Ll\",\"key\":\"02AE\",\"mappings\":{\"default\":{\"default\":\"turned h with fishhook\"}}},{\"category\":\"Ll\",\"key\":\"02AF\",\"mappings\":{\"default\":{\"default\":\"turned h with fishhook and tail\"}}},{\"category\":\"Ll\",\"key\":\"1D02\",\"mappings\":{\"default\":{\"default\":\"turned ae\"}}},{\"category\":\"Ll\",\"key\":\"1D08\",\"mappings\":{\"default\":{\"default\":\"turned open e\"}}},{\"category\":\"Ll\",\"key\":\"1D09\",\"mappings\":{\"default\":{\"default\":\"turned i\"}}},{\"category\":\"Ll\",\"key\":\"1D11\",\"mappings\":{\"default\":{\"default\":\"sideways o\"}}},{\"category\":\"Ll\",\"key\":\"1D12\",\"mappings\":{\"default\":{\"default\":\"sideways open o\"}}},{\"category\":\"Ll\",\"key\":\"1D14\",\"mappings\":{\"default\":{\"default\":\"turned oe\"}}},{\"category\":\"Ll\",\"key\":\"1D16\",\"mappings\":{\"default\":{\"default\":\"top half o\"}}},{\"category\":\"Ll\",\"key\":\"1D17\",\"mappings\":{\"default\":{\"default\":\"bottom half o\"}}},{\"category\":\"Ll\",\"key\":\"1D1D\",\"mappings\":{\"default\":{\"default\":\"sideways u\"}}},{\"category\":\"Ll\",\"key\":\"1D1E\",\"mappings\":{\"default\":{\"default\":\"sideways diaeresized u\"}}},{\"category\":\"Ll\",\"key\":\"1D1F\",\"mappings\":{\"default\":{\"default\":\"sideways turned m\"}}},{\"category\":\"Ll\",\"key\":\"1D24\",\"mappings\":{\"default\":{\"default\":\"latin letter voiced laryngeal spirant\"}}},{\"category\":\"Ll\",\"key\":\"1D25\",\"mappings\":{\"default\":{\"default\":\"latin letter ain\"}}},{\"category\":\"Ll\",\"key\":\"1D6B\",\"mappings\":{\"default\":{\"default\":\"ue\"}}},{\"category\":\"Ll\",\"key\":\"1D6C\",\"mappings\":{\"default\":{\"default\":\"b with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6D\",\"mappings\":{\"default\":{\"default\":\"d with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6E\",\"mappings\":{\"default\":{\"default\":\"f with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6F\",\"mappings\":{\"default\":{\"default\":\"m with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D70\",\"mappings\":{\"default\":{\"default\":\"n with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D71\",\"mappings\":{\"default\":{\"default\":\"p with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D72\",\"mappings\":{\"default\":{\"default\":\"r with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D73\",\"mappings\":{\"default\":{\"default\":\"r with fishhook and middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D74\",\"mappings\":{\"default\":{\"default\":\"s with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D75\",\"mappings\":{\"default\":{\"default\":\"t with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D76\",\"mappings\":{\"default\":{\"default\":\"z with middle tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D77\",\"mappings\":{\"default\":{\"default\":\"turned g\"}}},{\"category\":\"Ll\",\"key\":\"1D79\",\"mappings\":{\"default\":{\"default\":\"insular g\"}}},{\"category\":\"Ll\",\"key\":\"1D7A\",\"mappings\":{\"default\":{\"default\":\"th with strikethrough\"}}},{\"category\":\"Ll\",\"key\":\"1D80\",\"mappings\":{\"default\":{\"default\":\"b with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D81\",\"mappings\":{\"default\":{\"default\":\"d with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D82\",\"mappings\":{\"default\":{\"default\":\"f with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D83\",\"mappings\":{\"default\":{\"default\":\"g with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D84\",\"mappings\":{\"default\":{\"default\":\"k with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D85\",\"mappings\":{\"default\":{\"default\":\"l with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D86\",\"mappings\":{\"default\":{\"default\":\"m with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D87\",\"mappings\":{\"default\":{\"default\":\"n with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D88\",\"mappings\":{\"default\":{\"default\":\"p with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D89\",\"mappings\":{\"default\":{\"default\":\"r with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8A\",\"mappings\":{\"default\":{\"default\":\"s with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8B\",\"mappings\":{\"default\":{\"default\":\"esh with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8C\",\"mappings\":{\"default\":{\"default\":\"v with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8D\",\"mappings\":{\"default\":{\"default\":\"x with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8E\",\"mappings\":{\"default\":{\"default\":\"z with palatal hook\"}}},{\"category\":\"Ll\",\"key\":\"1D8F\",\"mappings\":{\"default\":{\"default\":\"a with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D90\",\"mappings\":{\"default\":{\"default\":\"alpha with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D91\",\"mappings\":{\"default\":{\"default\":\"d with hook and tail\"}}},{\"category\":\"Ll\",\"key\":\"1D92\",\"mappings\":{\"default\":{\"default\":\"e with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D93\",\"mappings\":{\"default\":{\"default\":\"open e with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D94\",\"mappings\":{\"default\":{\"default\":\"reversed open e with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D95\",\"mappings\":{\"default\":{\"default\":\"schwa with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D96\",\"mappings\":{\"default\":{\"default\":\"i with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D97\",\"mappings\":{\"default\":{\"default\":\"open o with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D98\",\"mappings\":{\"default\":{\"default\":\"esh with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D99\",\"mappings\":{\"default\":{\"default\":\"u with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"1D9A\",\"mappings\":{\"default\":{\"default\":\"ezh with retroflex hook\"}}},{\"category\":\"Ll\",\"key\":\"0149\",\"mappings\":{\"default\":{\"default\":\"n preceded by apostrophe\"}}},{\"category\":\"Ll\",\"key\":\"014B\",\"mappings\":{\"default\":{\"default\":\"eng\"}}}]\n,\n\"en/symbols/latin-lower-single-accent.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"key\":\"00E0\",\"mappings\":{\"default\":{\"default\":\"a grave\"},\"mathspeak\":{\"default\":\"modifying above a with grave\",\"brief\":\"mod above a with grave\",\"sbrief\":\"mod above a with grave\"}}},{\"category\":\"Ll\",\"key\":\"00E1\",\"mappings\":{\"default\":{\"default\":\"a acute\"},\"mathspeak\":{\"default\":\"modifying above a with acute\",\"brief\":\"mod above a with acute\",\"sbrief\":\"mod above a with acute\"}}},{\"category\":\"Ll\",\"key\":\"00E2\",\"mappings\":{\"default\":{\"default\":\"a hat\"},\"mathspeak\":{\"default\":\"modifying above a with caret\",\"brief\":\"mod above a with caret\",\"sbrief\":\"mod above a with caret\"}}},{\"category\":\"Ll\",\"key\":\"00E3\",\"mappings\":{\"default\":{\"default\":\"a tilde\"},\"mathspeak\":{\"default\":\"a overtilde\",\"brief\":\"a overtilde\",\"sbrief\":\"a overtilde\"}}},{\"category\":\"Ll\",\"key\":\"00E4\",\"mappings\":{\"default\":{\"default\":\"a double overdot\"},\"mathspeak\":{\"default\":\"modifying above a with double dot\",\"brief\":\"mod above a with double dot\",\"sbrief\":\"mod above a with double dot\"}}},{\"category\":\"Ll\",\"key\":\"00E5\",\"mappings\":{\"default\":{\"default\":\"a ring\"},\"mathspeak\":{\"default\":\"modifying above a with ring\",\"brief\":\"mod above a with ring\",\"sbrief\":\"mod above a with ring\"}}},{\"category\":\"Ll\",\"key\":\"00E7\",\"mappings\":{\"default\":{\"default\":\"c cedilla\"},\"mathspeak\":{\"default\":\"modifying above c with cedilla\",\"brief\":\"mod above c with cedilla\",\"sbrief\":\"mod above c with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"00E8\",\"mappings\":{\"default\":{\"default\":\"e grave\"},\"mathspeak\":{\"default\":\"modifying above e with grave\",\"brief\":\"mod above e with grave\",\"sbrief\":\"mod above e with grave\"}}},{\"category\":\"Ll\",\"key\":\"00E9\",\"mappings\":{\"default\":{\"default\":\"e acute\"},\"mathspeak\":{\"default\":\"modifying above e with acute\",\"brief\":\"mod above e with acute\",\"sbrief\":\"mod above e with acute\"}}},{\"category\":\"Ll\",\"key\":\"00EA\",\"mappings\":{\"default\":{\"default\":\"e hat\"},\"mathspeak\":{\"default\":\"modifying above e with caret\",\"brief\":\"mod above e with caret\",\"sbrief\":\"mod above e with caret\"}}},{\"category\":\"Ll\",\"key\":\"00EB\",\"mappings\":{\"default\":{\"default\":\"e double overdot\"},\"mathspeak\":{\"default\":\"modifying above e with double dot\",\"brief\":\"mod above e with double dot\",\"sbrief\":\"mod above e with double dot\"}}},{\"category\":\"Ll\",\"key\":\"00EC\",\"mappings\":{\"default\":{\"default\":\"i grave\"},\"mathspeak\":{\"default\":\"modifying above i with grave\",\"brief\":\"mod above i with grave\",\"sbrief\":\"mod above i with grave\"}}},{\"category\":\"Ll\",\"key\":\"00ED\",\"mappings\":{\"default\":{\"default\":\"i acute\"},\"mathspeak\":{\"default\":\"modifying above i with acute\",\"brief\":\"mod above i with acute\",\"sbrief\":\"mod above i with acute\"}}},{\"category\":\"Ll\",\"key\":\"00EE\",\"mappings\":{\"default\":{\"default\":\"i hat\"},\"mathspeak\":{\"default\":\"modifying above i with caret\",\"brief\":\"mod above i with caret\",\"sbrief\":\"mod above i with caret\"}}},{\"category\":\"Ll\",\"key\":\"00EF\",\"mappings\":{\"default\":{\"default\":\"i double overdot\"},\"mathspeak\":{\"default\":\"modifying above i with double dot\",\"brief\":\"mod above i with double dot\",\"sbrief\":\"mod above i with double dot\"}}},{\"category\":\"Ll\",\"key\":\"00F1\",\"mappings\":{\"default\":{\"default\":\"n tilde\"},\"mathspeak\":{\"default\":\"n overtilde\",\"brief\":\"n overtilde\",\"sbrief\":\"n overtilde\"}}},{\"category\":\"Ll\",\"key\":\"00F2\",\"mappings\":{\"default\":{\"default\":\"o grave\"},\"mathspeak\":{\"default\":\"modifying above o with grave\",\"brief\":\"mod above o with grave\",\"sbrief\":\"mod above o with grave\"}}},{\"category\":\"Ll\",\"key\":\"00F3\",\"mappings\":{\"default\":{\"default\":\"o acute\"},\"mathspeak\":{\"default\":\"modifying above o with acute\",\"brief\":\"mod above o with acute\",\"sbrief\":\"mod above o with acute\"}}},{\"category\":\"Ll\",\"key\":\"00F4\",\"mappings\":{\"default\":{\"default\":\"o hat\"},\"mathspeak\":{\"default\":\"modifying above o with caret\",\"brief\":\"mod above o with caret\",\"sbrief\":\"mod above o with caret\"}}},{\"category\":\"Ll\",\"key\":\"00F5\",\"mappings\":{\"default\":{\"default\":\"o tilde\"},\"mathspeak\":{\"default\":\"o overtilde\",\"brief\":\"o overtilde\",\"sbrief\":\"o overtilde\"}}},{\"category\":\"Ll\",\"key\":\"00F6\",\"mappings\":{\"default\":{\"default\":\"o double overdot\"},\"mathspeak\":{\"default\":\"modifying above o with double dot\",\"brief\":\"mod above o with double dot\",\"sbrief\":\"mod above o with double dot\"}}},{\"category\":\"Ll\",\"key\":\"00F9\",\"mappings\":{\"default\":{\"default\":\"u grave\"},\"mathspeak\":{\"default\":\"modifying above u with grave\",\"brief\":\"mod above u with grave\",\"sbrief\":\"mod above u with grave\"}}},{\"category\":\"Ll\",\"key\":\"00FA\",\"mappings\":{\"default\":{\"default\":\"u acute\"},\"mathspeak\":{\"default\":\"modifying above u with acute\",\"brief\":\"mod above u with acute\",\"sbrief\":\"mod above u with acute\"}}},{\"category\":\"Ll\",\"key\":\"00FB\",\"mappings\":{\"default\":{\"default\":\"u hat\"},\"mathspeak\":{\"default\":\"modifying above u with caret\",\"brief\":\"mod above u with caret\",\"sbrief\":\"mod above u with caret\"}}},{\"category\":\"Ll\",\"key\":\"00FC\",\"mappings\":{\"default\":{\"default\":\"u double overdot\"},\"mathspeak\":{\"default\":\"modifying above u with double dot\",\"brief\":\"mod above u with double dot\",\"sbrief\":\"mod above u with double dot\"}}},{\"category\":\"Ll\",\"key\":\"00FD\",\"mappings\":{\"default\":{\"default\":\"y acute\"},\"mathspeak\":{\"default\":\"modifying above y with acute\",\"brief\":\"mod above y with acute\",\"sbrief\":\"mod above y with acute\"}}},{\"category\":\"Ll\",\"key\":\"00FF\",\"mappings\":{\"default\":{\"default\":\"y double overdot\"},\"mathspeak\":{\"default\":\"modifying above y with double dot\",\"brief\":\"mod above y with double dot\",\"sbrief\":\"mod above y with double dot\"}}},{\"category\":\"Ll\",\"key\":\"0101\",\"mappings\":{\"default\":{\"default\":\"a overbar\"},\"mathspeak\":{\"default\":\"a overbar\",\"brief\":\"a overbar\",\"sbrief\":\"a overbar\"}}},{\"category\":\"Ll\",\"key\":\"0103\",\"mappings\":{\"default\":{\"default\":\"a breve\"},\"mathspeak\":{\"default\":\"modifying above a with breve\",\"brief\":\"mod above a with breve\",\"sbrief\":\"mod above a with breve\"}}},{\"category\":\"Ll\",\"key\":\"0105\",\"mappings\":{\"default\":{\"default\":\"a ogonek\"},\"mathspeak\":{\"default\":\"modifying above a with ogonek\",\"brief\":\"mod above a with ogonek\",\"sbrief\":\"mod above a with ogonek\"}}},{\"category\":\"Ll\",\"key\":\"0107\",\"mappings\":{\"default\":{\"default\":\"c acute\"},\"mathspeak\":{\"default\":\"modifying above c with acute\",\"brief\":\"mod above c with acute\",\"sbrief\":\"mod above c with acute\"}}},{\"category\":\"Ll\",\"key\":\"0109\",\"mappings\":{\"default\":{\"default\":\"c hat\"},\"mathspeak\":{\"default\":\"modifying above c with caret\",\"brief\":\"mod above c with caret\",\"sbrief\":\"mod above c with caret\"}}},{\"category\":\"Ll\",\"key\":\"010B\",\"mappings\":{\"default\":{\"default\":\"c overdot\"},\"mathspeak\":{\"default\":\"modifying above c with dot\",\"brief\":\"mod above c with dot\",\"sbrief\":\"mod above c with dot\"}}},{\"category\":\"Ll\",\"key\":\"010D\",\"mappings\":{\"default\":{\"default\":\"c caron\"},\"mathspeak\":{\"default\":\"modifying above c with caron\",\"brief\":\"mod above c with caron\",\"sbrief\":\"mod above c with caron\"}}},{\"category\":\"Ll\",\"key\":\"010F\",\"mappings\":{\"default\":{\"default\":\"d caron\"},\"mathspeak\":{\"default\":\"modifying above d with caron\",\"brief\":\"mod above d with caron\",\"sbrief\":\"mod above d with caron\"}}},{\"category\":\"Ll\",\"key\":\"0113\",\"mappings\":{\"default\":{\"default\":\"e overbar\"},\"mathspeak\":{\"default\":\"e overbar\",\"brief\":\"e overbar\",\"sbrief\":\"e overbar\"}}},{\"category\":\"Ll\",\"key\":\"0115\",\"mappings\":{\"default\":{\"default\":\"e breve\"},\"mathspeak\":{\"default\":\"modifying above e with breve\",\"brief\":\"mod above e with breve\",\"sbrief\":\"mod above e with breve\"}}},{\"category\":\"Ll\",\"key\":\"0117\",\"mappings\":{\"default\":{\"default\":\"e overdot\"},\"mathspeak\":{\"default\":\"modifying above e with dot\",\"brief\":\"mod above e with dot\",\"sbrief\":\"mod above e with dot\"}}},{\"category\":\"Ll\",\"key\":\"0119\",\"mappings\":{\"default\":{\"default\":\"e ogonek\"},\"mathspeak\":{\"default\":\"modifying above e with ogonek\",\"brief\":\"mod above e with ogonek\",\"sbrief\":\"mod above e with ogonek\"}}},{\"category\":\"Ll\",\"key\":\"011B\",\"mappings\":{\"default\":{\"default\":\"e caron\"},\"mathspeak\":{\"default\":\"modifying above e with caron\",\"brief\":\"mod above e with caron\",\"sbrief\":\"mod above e with caron\"}}},{\"category\":\"Ll\",\"key\":\"011D\",\"mappings\":{\"default\":{\"default\":\"g hat\"},\"mathspeak\":{\"default\":\"modifying above g with caret\",\"brief\":\"mod above g with caret\",\"sbrief\":\"mod above g with caret\"}}},{\"category\":\"Ll\",\"key\":\"011F\",\"mappings\":{\"default\":{\"default\":\"g breve\"},\"mathspeak\":{\"default\":\"modifying above g with breve\",\"brief\":\"mod above g with breve\",\"sbrief\":\"mod above g with breve\"}}},{\"category\":\"Ll\",\"key\":\"0121\",\"mappings\":{\"default\":{\"default\":\"g overdot\"},\"mathspeak\":{\"default\":\"modifying above g with dot\",\"brief\":\"mod above g with dot\",\"sbrief\":\"mod above g with dot\"}}},{\"category\":\"Ll\",\"key\":\"0123\",\"mappings\":{\"default\":{\"default\":\"g cedilla\"},\"mathspeak\":{\"default\":\"modifying above g with cedilla\",\"brief\":\"mod above g with cedilla\",\"sbrief\":\"mod above g with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"0125\",\"mappings\":{\"default\":{\"default\":\"h hat\"},\"mathspeak\":{\"default\":\"modifying above h with caret\",\"brief\":\"mod above h with caret\",\"sbrief\":\"mod above h with caret\"}}},{\"category\":\"Ll\",\"key\":\"0129\",\"mappings\":{\"default\":{\"default\":\"i tilde\"},\"mathspeak\":{\"default\":\"i overtilde\",\"brief\":\"i overtilde\",\"sbrief\":\"i overtilde\"}}},{\"category\":\"Ll\",\"key\":\"012B\",\"mappings\":{\"default\":{\"default\":\"i overbar\"},\"mathspeak\":{\"default\":\"i overbar\",\"brief\":\"i overbar\",\"sbrief\":\"i overbar\"}}},{\"category\":\"Ll\",\"key\":\"012D\",\"mappings\":{\"default\":{\"default\":\"i breve\"},\"mathspeak\":{\"default\":\"modifying above i with breve\",\"brief\":\"mod above i with breve\",\"sbrief\":\"mod above i with breve\"}}},{\"category\":\"Ll\",\"key\":\"012F\",\"mappings\":{\"default\":{\"default\":\"i ogonek\"},\"mathspeak\":{\"default\":\"modifying above i with ogonek\",\"brief\":\"mod above i with ogonek\",\"sbrief\":\"mod above i with ogonek\"}}},{\"category\":\"Ll\",\"key\":\"0131\",\"mappings\":{\"default\":{\"default\":\"dotless i\"},\"mathspeak\":{\"default\":\"modifying above dotless i\",\"brief\":\"mod above dotless i\",\"sbrief\":\"mod above dotless i\"}}},{\"category\":\"Ll\",\"key\":\"0135\",\"mappings\":{\"default\":{\"default\":\"j hat\"},\"mathspeak\":{\"default\":\"modifying above j with caret\",\"brief\":\"mod above j with caret\",\"sbrief\":\"mod above j with caret\"}}},{\"category\":\"Ll\",\"key\":\"0137\",\"mappings\":{\"default\":{\"default\":\"k cedilla\"},\"mathspeak\":{\"default\":\"modifying above k with cedilla\",\"brief\":\"mod above k with cedilla\",\"sbrief\":\"mod above k with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"013A\",\"mappings\":{\"default\":{\"default\":\"l acute\"},\"mathspeak\":{\"default\":\"modifying above l with acute\",\"brief\":\"mod above l with acute\",\"sbrief\":\"mod above l with acute\"}}},{\"category\":\"Ll\",\"key\":\"013C\",\"mappings\":{\"default\":{\"default\":\"l cedilla\"},\"mathspeak\":{\"default\":\"modifying above l with cedilla\",\"brief\":\"mod above l with cedilla\",\"sbrief\":\"mod above l with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"013E\",\"mappings\":{\"default\":{\"default\":\"l caron\"},\"mathspeak\":{\"default\":\"modifying above l with caron\",\"brief\":\"mod above l with caron\",\"sbrief\":\"mod above l with caron\"}}},{\"category\":\"Ll\",\"key\":\"0140\",\"mappings\":{\"default\":{\"default\":\"l middle dot\"},\"mathspeak\":{\"default\":\"modifying above l with middle dot\",\"brief\":\"mod above l with middle dot\",\"sbrief\":\"mod above l with middle dot\"}}},{\"category\":\"Ll\",\"key\":\"0144\",\"mappings\":{\"default\":{\"default\":\"n acute\"},\"mathspeak\":{\"default\":\"modifying above n with acute\",\"brief\":\"mod above n with acute\",\"sbrief\":\"mod above n with acute\"}}},{\"category\":\"Ll\",\"key\":\"0146\",\"mappings\":{\"default\":{\"default\":\"n cedilla\"},\"mathspeak\":{\"default\":\"modifying above n with cedilla\",\"brief\":\"mod above n with cedilla\",\"sbrief\":\"mod above n with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"0148\",\"mappings\":{\"default\":{\"default\":\"n caron\"},\"mathspeak\":{\"default\":\"modifying above n with caron\",\"brief\":\"mod above n with caron\",\"sbrief\":\"mod above n with caron\"}}},{\"category\":\"Ll\",\"key\":\"014D\",\"mappings\":{\"default\":{\"default\":\"o overbar\"},\"mathspeak\":{\"default\":\"o overbar\",\"brief\":\"o overbar\",\"sbrief\":\"o overbar\"}}},{\"category\":\"Ll\",\"key\":\"014F\",\"mappings\":{\"default\":{\"default\":\"o breve\"},\"mathspeak\":{\"default\":\"modifying above o with breve\",\"brief\":\"mod above o with breve\",\"sbrief\":\"mod above o with breve\"}}},{\"category\":\"Ll\",\"key\":\"0151\",\"mappings\":{\"default\":{\"default\":\"o double acute\"},\"mathspeak\":{\"default\":\"modifying above o with double acute\",\"brief\":\"mod above o with double acute\",\"sbrief\":\"mod above o with double acute\"}}},{\"category\":\"Ll\",\"key\":\"0155\",\"mappings\":{\"default\":{\"default\":\"r acute\"},\"mathspeak\":{\"default\":\"modifying above r with acute\",\"brief\":\"mod above r with acute\",\"sbrief\":\"mod above r with acute\"}}},{\"category\":\"Ll\",\"key\":\"0157\",\"mappings\":{\"default\":{\"default\":\"r cedilla\"},\"mathspeak\":{\"default\":\"modifying above r with cedilla\",\"brief\":\"mod above r with cedilla\",\"sbrief\":\"mod above r with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"0159\",\"mappings\":{\"default\":{\"default\":\"r caron\"},\"mathspeak\":{\"default\":\"modifying above r with caron\",\"brief\":\"mod above r with caron\",\"sbrief\":\"mod above r with caron\"}}},{\"category\":\"Ll\",\"key\":\"015B\",\"mappings\":{\"default\":{\"default\":\"s acute\"},\"mathspeak\":{\"default\":\"modifying above s with acute\",\"brief\":\"mod above s with acute\",\"sbrief\":\"mod above s with acute\"}}},{\"category\":\"Ll\",\"key\":\"015D\",\"mappings\":{\"default\":{\"default\":\"s hat\"},\"mathspeak\":{\"default\":\"modifying above s with caret\",\"brief\":\"mod above s with caret\",\"sbrief\":\"mod above s with caret\"}}},{\"category\":\"Ll\",\"key\":\"015F\",\"mappings\":{\"default\":{\"default\":\"s cedilla\"},\"mathspeak\":{\"default\":\"modifying above s with cedilla\",\"brief\":\"mod above s with cedilla\",\"sbrief\":\"mod above s with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"0161\",\"mappings\":{\"default\":{\"default\":\"s caron\"},\"mathspeak\":{\"default\":\"modifying above s with caron\",\"brief\":\"mod above s with caron\",\"sbrief\":\"mod above s with caron\"}}},{\"category\":\"Ll\",\"key\":\"0163\",\"mappings\":{\"default\":{\"default\":\"t cedilla\"},\"mathspeak\":{\"default\":\"modifying above t with cedilla\",\"brief\":\"mod above t with cedilla\",\"sbrief\":\"mod above t with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"0165\",\"mappings\":{\"default\":{\"default\":\"t caron\"},\"mathspeak\":{\"default\":\"modifying above t with caron\",\"brief\":\"mod above t with caron\",\"sbrief\":\"mod above t with caron\"}}},{\"category\":\"Ll\",\"key\":\"0169\",\"mappings\":{\"default\":{\"default\":\"u tilde\"},\"mathspeak\":{\"default\":\"u overtilde\",\"brief\":\"u overtilde\",\"sbrief\":\"u overtilde\"}}},{\"category\":\"Ll\",\"key\":\"016B\",\"mappings\":{\"default\":{\"default\":\"u overbar\"},\"mathspeak\":{\"default\":\"u overbar\",\"brief\":\"u overbar\",\"sbrief\":\"u overbar\"}}},{\"category\":\"Ll\",\"key\":\"016D\",\"mappings\":{\"default\":{\"default\":\"u breve\"},\"mathspeak\":{\"default\":\"modifying above u with breve\",\"brief\":\"mod above u with breve\",\"sbrief\":\"mod above u with breve\"}}},{\"category\":\"Ll\",\"key\":\"016F\",\"mappings\":{\"default\":{\"default\":\"u ring\"},\"mathspeak\":{\"default\":\"modifying above u with ring\",\"brief\":\"mod above u with ring\",\"sbrief\":\"mod above u with ring\"}}},{\"category\":\"Ll\",\"key\":\"0171\",\"mappings\":{\"default\":{\"default\":\"u double acute\"},\"mathspeak\":{\"default\":\"modifying above u with double acute\",\"brief\":\"mod above u with double acute\",\"sbrief\":\"mod above u with double acute\"}}},{\"category\":\"Ll\",\"key\":\"0173\",\"mappings\":{\"default\":{\"default\":\"u ogonek\"},\"mathspeak\":{\"default\":\"modifying above u with ogonek\",\"brief\":\"mod above u with ogonek\",\"sbrief\":\"mod above u with ogonek\"}}},{\"category\":\"Ll\",\"key\":\"0175\",\"mappings\":{\"default\":{\"default\":\"w hat\"},\"mathspeak\":{\"default\":\"modifying above w with caret\",\"brief\":\"mod above w with caret\",\"sbrief\":\"mod above w with caret\"}}},{\"category\":\"Ll\",\"key\":\"0177\",\"mappings\":{\"default\":{\"default\":\"y hat\"},\"mathspeak\":{\"default\":\"modifying above y with caret\",\"brief\":\"mod above y with caret\",\"sbrief\":\"mod above y with caret\"}}},{\"category\":\"Ll\",\"key\":\"017A\",\"mappings\":{\"default\":{\"default\":\"z acute\"},\"mathspeak\":{\"default\":\"modifying above z with acute\",\"brief\":\"mod above z with acute\",\"sbrief\":\"mod above z with acute\"}}},{\"category\":\"Ll\",\"key\":\"017C\",\"mappings\":{\"default\":{\"default\":\"z overdot\"},\"mathspeak\":{\"default\":\"modifying above z with dot\",\"brief\":\"mod above z with dot\",\"sbrief\":\"mod above z with dot\"}}},{\"category\":\"Ll\",\"key\":\"017E\",\"mappings\":{\"default\":{\"default\":\"z caron\"},\"mathspeak\":{\"default\":\"modifying above z with caron\",\"brief\":\"mod above z with caron\",\"sbrief\":\"mod above z with caron\"}}},{\"category\":\"Ll\",\"key\":\"01CE\",\"mappings\":{\"default\":{\"default\":\"a caron\"},\"mathspeak\":{\"default\":\"modifying above a with caron\",\"brief\":\"mod above a with caron\",\"sbrief\":\"mod above a with caron\"}}},{\"category\":\"Ll\",\"key\":\"01D0\",\"mappings\":{\"default\":{\"default\":\"i caron\"},\"mathspeak\":{\"default\":\"modifying above i with caron\",\"brief\":\"mod above i with caron\",\"sbrief\":\"mod above i with caron\"}}},{\"category\":\"Ll\",\"key\":\"01D2\",\"mappings\":{\"default\":{\"default\":\"o caron\"},\"mathspeak\":{\"default\":\"modifying above o with caron\",\"brief\":\"mod above o with caron\",\"sbrief\":\"mod above o with caron\"}}},{\"category\":\"Ll\",\"key\":\"01D4\",\"mappings\":{\"default\":{\"default\":\"u caron\"},\"mathspeak\":{\"default\":\"modifying above u with caron\",\"brief\":\"mod above u with caron\",\"sbrief\":\"mod above u with caron\"}}},{\"category\":\"Ll\",\"key\":\"01E7\",\"mappings\":{\"default\":{\"default\":\"g caron\"},\"mathspeak\":{\"default\":\"modifying above g with caron\",\"brief\":\"mod above g with caron\",\"sbrief\":\"mod above g with caron\"}}},{\"category\":\"Ll\",\"key\":\"01E9\",\"mappings\":{\"default\":{\"default\":\"k caron\"},\"mathspeak\":{\"default\":\"modifying above k with caron\",\"brief\":\"mod above k with caron\",\"sbrief\":\"mod above k with caron\"}}},{\"category\":\"Ll\",\"key\":\"01EB\",\"mappings\":{\"default\":{\"default\":\"o ogonek\"},\"mathspeak\":{\"default\":\"modifying above o with ogonek\",\"brief\":\"mod above o with ogonek\",\"sbrief\":\"mod above o with ogonek\"}}},{\"category\":\"Ll\",\"key\":\"01F0\",\"mappings\":{\"default\":{\"default\":\"j caron\"},\"mathspeak\":{\"default\":\"modifying above j with caron\",\"brief\":\"mod above j with caron\",\"sbrief\":\"mod above j with caron\"}}},{\"category\":\"Ll\",\"key\":\"01F5\",\"mappings\":{\"default\":{\"default\":\"g acute\"},\"mathspeak\":{\"default\":\"modifying above g with acute\",\"brief\":\"mod above g with acute\",\"sbrief\":\"mod above g with acute\"}}},{\"category\":\"Ll\",\"key\":\"01F9\",\"mappings\":{\"default\":{\"default\":\"n grave\"},\"mathspeak\":{\"default\":\"modifying above n with grave\",\"brief\":\"mod above n with grave\",\"sbrief\":\"mod above n with grave\"}}},{\"category\":\"Ll\",\"key\":\"0201\",\"mappings\":{\"default\":{\"default\":\"a double grave\"},\"mathspeak\":{\"default\":\"modifying above a with double grave\",\"brief\":\"mod above a with double grave\",\"sbrief\":\"mod above a with double grave\"}}},{\"category\":\"Ll\",\"key\":\"0203\",\"mappings\":{\"default\":{\"default\":\"a inverted breve\"},\"mathspeak\":{\"default\":\"modifying above a with inverted breve\",\"brief\":\"mod above a with inverted breve\",\"sbrief\":\"mod above a with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"0205\",\"mappings\":{\"default\":{\"default\":\"e double grave\"},\"mathspeak\":{\"default\":\"modifying above e with double grave\",\"brief\":\"mod above e with double grave\",\"sbrief\":\"mod above e with double grave\"}}},{\"category\":\"Ll\",\"key\":\"0207\",\"mappings\":{\"default\":{\"default\":\"e inverted breve\"},\"mathspeak\":{\"default\":\"modifying above e with inverted breve\",\"brief\":\"mod above e with inverted breve\",\"sbrief\":\"mod above e with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"0209\",\"mappings\":{\"default\":{\"default\":\"i double grave\"},\"mathspeak\":{\"default\":\"modifying above i with double grave\",\"brief\":\"mod above i with double grave\",\"sbrief\":\"mod above i with double grave\"}}},{\"category\":\"Ll\",\"key\":\"020B\",\"mappings\":{\"default\":{\"default\":\"i inverted breve\"},\"mathspeak\":{\"default\":\"modifying above i with inverted breve\",\"brief\":\"mod above i with inverted breve\",\"sbrief\":\"mod above i with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"020D\",\"mappings\":{\"default\":{\"default\":\"o double grave\"},\"mathspeak\":{\"default\":\"modifying above o with double grave\",\"brief\":\"mod above o with double grave\",\"sbrief\":\"mod above o with double grave\"}}},{\"category\":\"Ll\",\"key\":\"020F\",\"mappings\":{\"default\":{\"default\":\"o inverted breve\"},\"mathspeak\":{\"default\":\"modifying above o with inverted breve\",\"brief\":\"mod above o with inverted breve\",\"sbrief\":\"mod above o with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"0211\",\"mappings\":{\"default\":{\"default\":\"r double grave\"},\"mathspeak\":{\"default\":\"modifying above r with double grave\",\"brief\":\"mod above r with double grave\",\"sbrief\":\"mod above r with double grave\"}}},{\"category\":\"Ll\",\"key\":\"0213\",\"mappings\":{\"default\":{\"default\":\"r inverted breve\"},\"mathspeak\":{\"default\":\"modifying above r with inverted breve\",\"brief\":\"mod above r with inverted breve\",\"sbrief\":\"mod above r with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"0215\",\"mappings\":{\"default\":{\"default\":\"u double grave\"},\"mathspeak\":{\"default\":\"modifying above u with double grave\",\"brief\":\"mod above u with double grave\",\"sbrief\":\"mod above u with double grave\"}}},{\"category\":\"Ll\",\"key\":\"0217\",\"mappings\":{\"default\":{\"default\":\"u inverted breve\"},\"mathspeak\":{\"default\":\"modifying above u with inverted breve\",\"brief\":\"mod above u with inverted breve\",\"sbrief\":\"mod above u with inverted breve\"}}},{\"category\":\"Ll\",\"key\":\"0219\",\"mappings\":{\"default\":{\"default\":\"s comma below\"},\"mathspeak\":{\"default\":\"modifying below s with comma below\",\"brief\":\"mod below s with comma below\",\"sbrief\":\"mod below s with comma below\"}}},{\"category\":\"Ll\",\"key\":\"021B\",\"mappings\":{\"default\":{\"default\":\"t comma below\"},\"mathspeak\":{\"default\":\"modifying below t with comma below\",\"brief\":\"mod below t with comma below\",\"sbrief\":\"mod below t with comma below\"}}},{\"category\":\"Ll\",\"key\":\"021F\",\"mappings\":{\"default\":{\"default\":\"h caron\"},\"mathspeak\":{\"default\":\"modifying above h with caron\",\"brief\":\"mod above h with caron\",\"sbrief\":\"mod above h with caron\"}}},{\"category\":\"Ll\",\"key\":\"0227\",\"mappings\":{\"default\":{\"default\":\"a overdot\"},\"mathspeak\":{\"default\":\"modifying above a with dot\",\"brief\":\"mod above a with dot\",\"sbrief\":\"mod above a with dot\"}}},{\"category\":\"Ll\",\"key\":\"0229\",\"mappings\":{\"default\":{\"default\":\"e cedilla\"},\"mathspeak\":{\"default\":\"modifying above e with cedilla\",\"brief\":\"mod above e with cedilla\",\"sbrief\":\"mod above e with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"022F\",\"mappings\":{\"default\":{\"default\":\"o overdot\"},\"mathspeak\":{\"default\":\"modifying above o with dot\",\"brief\":\"mod above o with dot\",\"sbrief\":\"mod above o with dot\"}}},{\"category\":\"Ll\",\"key\":\"0233\",\"mappings\":{\"default\":{\"default\":\"y overbar\"},\"mathspeak\":{\"default\":\"y overbar\",\"brief\":\"y overbar\",\"sbrief\":\"y overbar\"}}},{\"category\":\"Ll\",\"key\":\"0237\",\"mappings\":{\"default\":{\"default\":\"dotless j\"},\"mathspeak\":{\"default\":\"modifying above dotless j\",\"brief\":\"mod above dotless j\",\"sbrief\":\"mod above dotless j\"}}},{\"category\":\"Ll\",\"key\":\"1E01\",\"mappings\":{\"default\":{\"default\":\"a ring below\"},\"mathspeak\":{\"default\":\"modifying below a with ring below\",\"brief\":\"mod below a with ring below\",\"sbrief\":\"mod below a with ring below\"}}},{\"category\":\"Ll\",\"key\":\"1E03\",\"mappings\":{\"default\":{\"default\":\"b overdot\"},\"mathspeak\":{\"default\":\"modifying above b with dot\",\"brief\":\"mod above b with dot\",\"sbrief\":\"mod above b with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E05\",\"mappings\":{\"default\":{\"default\":\"b underdot\"},\"mathspeak\":{\"default\":\"modifying below b with dot\",\"brief\":\"mod below b with dot\",\"sbrief\":\"mod below b with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E07\",\"mappings\":{\"default\":{\"default\":\"b underbar\"},\"mathspeak\":{\"default\":\"b underbar\",\"brief\":\"b underbar\",\"sbrief\":\"b underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E0B\",\"mappings\":{\"default\":{\"default\":\"d overdot\"},\"mathspeak\":{\"default\":\"modifying above d with dot\",\"brief\":\"mod above d with dot\",\"sbrief\":\"mod above d with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E0D\",\"mappings\":{\"default\":{\"default\":\"d underdot\"},\"mathspeak\":{\"default\":\"modifying below d with dot\",\"brief\":\"mod below d with dot\",\"sbrief\":\"mod below d with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E0F\",\"mappings\":{\"default\":{\"default\":\"d underbar\"},\"mathspeak\":{\"default\":\"d underbar\",\"brief\":\"d underbar\",\"sbrief\":\"d underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E11\",\"mappings\":{\"default\":{\"default\":\"d cedilla\"},\"mathspeak\":{\"default\":\"modifying above d with cedilla\",\"brief\":\"mod above d with cedilla\",\"sbrief\":\"mod above d with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"1E13\",\"mappings\":{\"default\":{\"default\":\"d underhat\"},\"mathspeak\":{\"default\":\"modifying below d with caret\",\"brief\":\"mod below d with caret\",\"sbrief\":\"mod below d with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E19\",\"mappings\":{\"default\":{\"default\":\"e underhat\"},\"mathspeak\":{\"default\":\"modifying below e with caret\",\"brief\":\"mod below e with caret\",\"sbrief\":\"mod below e with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E1B\",\"mappings\":{\"default\":{\"default\":\"e tilde below\"},\"mathspeak\":{\"default\":\"e undertilde\",\"brief\":\"e undertilde\",\"sbrief\":\"e undertilde\"}}},{\"category\":\"Ll\",\"key\":\"1E1F\",\"mappings\":{\"default\":{\"default\":\"f overdot\"},\"mathspeak\":{\"default\":\"modifying above f with dot\",\"brief\":\"mod above f with dot\",\"sbrief\":\"mod above f with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E21\",\"mappings\":{\"default\":{\"default\":\"g overbar\"},\"mathspeak\":{\"default\":\"g overbar\",\"brief\":\"g overbar\",\"sbrief\":\"g overbar\"}}},{\"category\":\"Ll\",\"key\":\"1E23\",\"mappings\":{\"default\":{\"default\":\"h overdot\"},\"mathspeak\":{\"default\":\"modifying above h with dot\",\"brief\":\"mod above h with dot\",\"sbrief\":\"mod above h with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E25\",\"mappings\":{\"default\":{\"default\":\"h underdot\"},\"mathspeak\":{\"default\":\"modifying below h with dot\",\"brief\":\"mod below h with dot\",\"sbrief\":\"mod below h with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E27\",\"mappings\":{\"default\":{\"default\":\"h double overdot\"},\"mathspeak\":{\"default\":\"modifying above h with double dot\",\"brief\":\"mod above h with double dot\",\"sbrief\":\"mod above h with double dot\"}}},{\"category\":\"Ll\",\"key\":\"1E29\",\"mappings\":{\"default\":{\"default\":\"h cedilla\"},\"mathspeak\":{\"default\":\"modifying above h with cedilla\",\"brief\":\"mod above h with cedilla\",\"sbrief\":\"mod above h with cedilla\"}}},{\"category\":\"Ll\",\"key\":\"1E2B\",\"mappings\":{\"default\":{\"default\":\"h breve below\"},\"mathspeak\":{\"default\":\"modifying below h with breve below\",\"brief\":\"mod below h with breve below\",\"sbrief\":\"mod below h with breve below\"}}},{\"category\":\"Ll\",\"key\":\"1E2D\",\"mappings\":{\"default\":{\"default\":\"i tilde below\"},\"mathspeak\":{\"default\":\"i undertilde\",\"brief\":\"i undertilde\",\"sbrief\":\"i undertilde\"}}},{\"category\":\"Ll\",\"key\":\"1E31\",\"mappings\":{\"default\":{\"default\":\"k acute\"},\"mathspeak\":{\"default\":\"modifying above k with acute\",\"brief\":\"mod above k with acute\",\"sbrief\":\"mod above k with acute\"}}},{\"category\":\"Ll\",\"key\":\"1E33\",\"mappings\":{\"default\":{\"default\":\"k underdot\"},\"mathspeak\":{\"default\":\"modifying below k with dot\",\"brief\":\"mod below k with dot\",\"sbrief\":\"mod below k with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E35\",\"mappings\":{\"default\":{\"default\":\"k underbar\"},\"mathspeak\":{\"default\":\"k underbar\",\"brief\":\"k underbar\",\"sbrief\":\"k underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E37\",\"mappings\":{\"default\":{\"default\":\"l underdot\"},\"mathspeak\":{\"default\":\"modifying below l with dot\",\"brief\":\"mod below l with dot\",\"sbrief\":\"mod below l with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E3B\",\"mappings\":{\"default\":{\"default\":\"l underbar\"},\"mathspeak\":{\"default\":\"l underbar\",\"brief\":\"l underbar\",\"sbrief\":\"l underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E3D\",\"mappings\":{\"default\":{\"default\":\"l underhat\"},\"mathspeak\":{\"default\":\"modifying below l with caret\",\"brief\":\"mod below l with caret\",\"sbrief\":\"mod below l with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E3F\",\"mappings\":{\"default\":{\"default\":\"m acute\"},\"mathspeak\":{\"default\":\"modifying above m with acute\",\"brief\":\"mod above m with acute\",\"sbrief\":\"mod above m with acute\"}}},{\"category\":\"Ll\",\"key\":\"1E41\",\"mappings\":{\"default\":{\"default\":\"m overdot\"},\"mathspeak\":{\"default\":\"modifying above m with dot\",\"brief\":\"mod above m with dot\",\"sbrief\":\"mod above m with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E43\",\"mappings\":{\"default\":{\"default\":\"m underdot\"},\"mathspeak\":{\"default\":\"modifying below m with dot\",\"brief\":\"mod below m with dot\",\"sbrief\":\"mod below m with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E45\",\"mappings\":{\"default\":{\"default\":\"n overdot\"},\"mathspeak\":{\"default\":\"modifying above n with dot\",\"brief\":\"mod above n with dot\",\"sbrief\":\"mod above n with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E47\",\"mappings\":{\"default\":{\"default\":\"n underdot\"},\"mathspeak\":{\"default\":\"modifying below n with dot\",\"brief\":\"mod below n with dot\",\"sbrief\":\"mod below n with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E49\",\"mappings\":{\"default\":{\"default\":\"n underbar\"},\"mathspeak\":{\"default\":\"n underbar\",\"brief\":\"n underbar\",\"sbrief\":\"n underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E4B\",\"mappings\":{\"default\":{\"default\":\"n underhat\"},\"mathspeak\":{\"default\":\"modifying below n with caret\",\"brief\":\"mod below n with caret\",\"sbrief\":\"mod below n with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E55\",\"mappings\":{\"default\":{\"default\":\"p acute\"},\"mathspeak\":{\"default\":\"modifying above p with acute\",\"brief\":\"mod above p with acute\",\"sbrief\":\"mod above p with acute\"}}},{\"category\":\"Ll\",\"key\":\"1E57\",\"mappings\":{\"default\":{\"default\":\"p overdot\"},\"mathspeak\":{\"default\":\"modifying above p with dot\",\"brief\":\"mod above p with dot\",\"sbrief\":\"mod above p with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E59\",\"mappings\":{\"default\":{\"default\":\"r overdot\"},\"mathspeak\":{\"default\":\"modifying above r with dot\",\"brief\":\"mod above r with dot\",\"sbrief\":\"mod above r with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E5B\",\"mappings\":{\"default\":{\"default\":\"r underdot\"},\"mathspeak\":{\"default\":\"modifying below r with dot\",\"brief\":\"mod below r with dot\",\"sbrief\":\"mod below r with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E5F\",\"mappings\":{\"default\":{\"default\":\"r underbar\"},\"mathspeak\":{\"default\":\"r underbar\",\"brief\":\"r underbar\",\"sbrief\":\"r underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E61\",\"mappings\":{\"default\":{\"default\":\"s overdot\"},\"mathspeak\":{\"default\":\"modifying above s with dot\",\"brief\":\"mod above s with dot\",\"sbrief\":\"mod above s with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E63\",\"mappings\":{\"default\":{\"default\":\"s underdot\"},\"mathspeak\":{\"default\":\"modifying below s with dot\",\"brief\":\"mod below s with dot\",\"sbrief\":\"mod below s with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E6B\",\"mappings\":{\"default\":{\"default\":\"t overdot\"},\"mathspeak\":{\"default\":\"modifying above t with dot\",\"brief\":\"mod above t with dot\",\"sbrief\":\"mod above t with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E6D\",\"mappings\":{\"default\":{\"default\":\"t underdot\"},\"mathspeak\":{\"default\":\"modifying below t with dot\",\"brief\":\"mod below t with dot\",\"sbrief\":\"mod below t with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E6F\",\"mappings\":{\"default\":{\"default\":\"t underbar\"},\"mathspeak\":{\"default\":\"t underbar\",\"brief\":\"t underbar\",\"sbrief\":\"t underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E71\",\"mappings\":{\"default\":{\"default\":\"t underhat\"},\"mathspeak\":{\"default\":\"modifying below t with caret\",\"brief\":\"mod below t with caret\",\"sbrief\":\"mod below t with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E73\",\"mappings\":{\"default\":{\"default\":\"u double underdot\"},\"mathspeak\":{\"default\":\"modifying below u with double dot\",\"brief\":\"mod below u with double dot\",\"sbrief\":\"mod below u with double dot\"}}},{\"category\":\"Ll\",\"key\":\"1E75\",\"mappings\":{\"default\":{\"default\":\"u tilde below\"},\"mathspeak\":{\"default\":\"u undertilde\",\"brief\":\"u undertilde\",\"sbrief\":\"u undertilde\"}}},{\"category\":\"Ll\",\"key\":\"1E77\",\"mappings\":{\"default\":{\"default\":\"u underhat\"},\"mathspeak\":{\"default\":\"modifying below u with caret\",\"brief\":\"mod below u with caret\",\"sbrief\":\"mod below u with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E7D\",\"mappings\":{\"default\":{\"default\":\"v tilde\"},\"mathspeak\":{\"default\":\"v overtilde\",\"brief\":\"v overtilde\",\"sbrief\":\"v overtilde\"}}},{\"category\":\"Ll\",\"key\":\"1E7F\",\"mappings\":{\"default\":{\"default\":\"v underdot\"},\"mathspeak\":{\"default\":\"modifying below v with dot\",\"brief\":\"mod below v with dot\",\"sbrief\":\"mod below v with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E81\",\"mappings\":{\"default\":{\"default\":\"w grave\"},\"mathspeak\":{\"default\":\"modifying above w with grave\",\"brief\":\"mod above w with grave\",\"sbrief\":\"mod above w with grave\"}}},{\"category\":\"Ll\",\"key\":\"1E83\",\"mappings\":{\"default\":{\"default\":\"w acute\"},\"mathspeak\":{\"default\":\"modifying above w with acute\",\"brief\":\"mod above w with acute\",\"sbrief\":\"mod above w with acute\"}}},{\"category\":\"Ll\",\"key\":\"1E85\",\"mappings\":{\"default\":{\"default\":\"w double overdot\"},\"mathspeak\":{\"default\":\"modifying above w with double dot\",\"brief\":\"mod above w with double dot\",\"sbrief\":\"mod above w with double dot\"}}},{\"category\":\"Ll\",\"key\":\"1E87\",\"mappings\":{\"default\":{\"default\":\"w overdot\"},\"mathspeak\":{\"default\":\"modifying above w with dot\",\"brief\":\"mod above w with dot\",\"sbrief\":\"mod above w with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E89\",\"mappings\":{\"default\":{\"default\":\"w underdot\"},\"mathspeak\":{\"default\":\"modifying below w with dot\",\"brief\":\"mod below w with dot\",\"sbrief\":\"mod below w with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E8B\",\"mappings\":{\"default\":{\"default\":\"x overdot\"},\"mathspeak\":{\"default\":\"modifying above x with dot\",\"brief\":\"mod above x with dot\",\"sbrief\":\"mod above x with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E8D\",\"mappings\":{\"default\":{\"default\":\"x double overdot\"},\"mathspeak\":{\"default\":\"modifying above x with double dot\",\"brief\":\"mod above x with double dot\",\"sbrief\":\"mod above x with double dot\"}}},{\"category\":\"Ll\",\"key\":\"1E8F\",\"mappings\":{\"default\":{\"default\":\"y overdot\"},\"mathspeak\":{\"default\":\"modifying above y with dot\",\"brief\":\"mod above y with dot\",\"sbrief\":\"mod above y with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E91\",\"mappings\":{\"default\":{\"default\":\"z hat\"},\"mathspeak\":{\"default\":\"modifying above z with caret\",\"brief\":\"mod above z with caret\",\"sbrief\":\"mod above z with caret\"}}},{\"category\":\"Ll\",\"key\":\"1E93\",\"mappings\":{\"default\":{\"default\":\"z underdot\"},\"mathspeak\":{\"default\":\"modifying below z with dot\",\"brief\":\"mod below z with dot\",\"sbrief\":\"mod below z with dot\"}}},{\"category\":\"Ll\",\"key\":\"1E95\",\"mappings\":{\"default\":{\"default\":\"z underbar\"},\"mathspeak\":{\"default\":\"z underbar\",\"brief\":\"z underbar\",\"sbrief\":\"z underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E96\",\"mappings\":{\"default\":{\"default\":\"h underbar\"},\"mathspeak\":{\"default\":\"h underbar\",\"brief\":\"h underbar\",\"sbrief\":\"h underbar\"}}},{\"category\":\"Ll\",\"key\":\"1E97\",\"mappings\":{\"default\":{\"default\":\"t double overdot\"},\"mathspeak\":{\"default\":\"modifying above t with double dot\",\"brief\":\"mod above t with double dot\",\"sbrief\":\"mod above t with double dot\"}}},{\"category\":\"Ll\",\"key\":\"1E98\",\"mappings\":{\"default\":{\"default\":\"w ring\"},\"mathspeak\":{\"default\":\"modifying above w with ring\",\"brief\":\"mod above w with ring\",\"sbrief\":\"mod above w with ring\"}}},{\"category\":\"Ll\",\"key\":\"1E99\",\"mappings\":{\"default\":{\"default\":\"y ring\"},\"mathspeak\":{\"default\":\"modifying above y with ring\",\"brief\":\"mod above y with ring\",\"sbrief\":\"mod above y with ring\"}}},{\"category\":\"Ll\",\"key\":\"1E9A\",\"mappings\":{\"default\":{\"default\":\"a right half ring\"},\"mathspeak\":{\"default\":\"modifying above a with right half ring\",\"brief\":\"mod above a with right half ring\",\"sbrief\":\"mod above a with right half ring\"}}},{\"category\":\"Ll\",\"key\":\"1EA1\",\"mappings\":{\"default\":{\"default\":\"a underdot\"},\"mathspeak\":{\"default\":\"modifying below a with dot\",\"brief\":\"mod below a with dot\",\"sbrief\":\"mod below a with dot\"}}},{\"category\":\"Ll\",\"key\":\"1EA3\",\"mappings\":{\"default\":{\"default\":\"a hook\"},\"mathspeak\":{\"default\":\"modifying above a with hook\",\"brief\":\"mod above a with hook\",\"sbrief\":\"mod above a with hook\"}}},{\"category\":\"Ll\",\"key\":\"1EB9\",\"mappings\":{\"default\":{\"default\":\"e underdot\"},\"mathspeak\":{\"default\":\"modifying below e with dot\",\"brief\":\"mod below e with dot\",\"sbrief\":\"mod below e with dot\"}}},{\"category\":\"Ll\",\"key\":\"1EBB\",\"mappings\":{\"default\":{\"default\":\"e hook\"},\"mathspeak\":{\"default\":\"modifying above e with hook\",\"brief\":\"mod above e with hook\",\"sbrief\":\"mod above e with hook\"}}},{\"category\":\"Ll\",\"key\":\"1EBD\",\"mappings\":{\"default\":{\"default\":\"e tilde\"},\"mathspeak\":{\"default\":\"e overtilde\",\"brief\":\"e overtilde\",\"sbrief\":\"e overtilde\"}}},{\"category\":\"Ll\",\"key\":\"1EC9\",\"mappings\":{\"default\":{\"default\":\"i hook\"},\"mathspeak\":{\"default\":\"modifying above i with hook\",\"brief\":\"mod above i with hook\",\"sbrief\":\"mod above i with hook\"}}},{\"category\":\"Ll\",\"key\":\"1ECB\",\"mappings\":{\"default\":{\"default\":\"i underdot\"},\"mathspeak\":{\"default\":\"modifying below i with dot\",\"brief\":\"mod below i with dot\",\"sbrief\":\"mod below i with dot\"}}},{\"category\":\"Ll\",\"key\":\"1ECD\",\"mappings\":{\"default\":{\"default\":\"o underdot\"},\"mathspeak\":{\"default\":\"modifying below o with dot\",\"brief\":\"mod below o with dot\",\"sbrief\":\"mod below o with dot\"}}},{\"category\":\"Ll\",\"key\":\"1ECF\",\"mappings\":{\"default\":{\"default\":\"o hook\"},\"mathspeak\":{\"default\":\"modifying above o with hook\",\"brief\":\"mod above o with hook\",\"sbrief\":\"mod above o with hook\"}}},{\"category\":\"Ll\",\"key\":\"1EE5\",\"mappings\":{\"default\":{\"default\":\"u underdot\"},\"mathspeak\":{\"default\":\"modifying below u with dot\",\"brief\":\"mod below u with dot\",\"sbrief\":\"mod below u with dot\"}}},{\"category\":\"Ll\",\"key\":\"1EE7\",\"mappings\":{\"default\":{\"default\":\"u hook\"},\"mathspeak\":{\"default\":\"modifying above u with hook\",\"brief\":\"mod above u with hook\",\"sbrief\":\"mod above u with hook\"}}},{\"category\":\"Ll\",\"key\":\"1EF3\",\"mappings\":{\"default\":{\"default\":\"y grave\"},\"mathspeak\":{\"default\":\"modifying above y with grave\",\"brief\":\"mod above y with grave\",\"sbrief\":\"mod above y with grave\"}}},{\"category\":\"Ll\",\"key\":\"1EF5\",\"mappings\":{\"default\":{\"default\":\"y underdot\"},\"mathspeak\":{\"default\":\"modifying below y with dot\",\"brief\":\"mod below y with dot\",\"sbrief\":\"mod below y with dot\"}}},{\"category\":\"Ll\",\"key\":\"1EF7\",\"mappings\":{\"default\":{\"default\":\"y hook\"},\"mathspeak\":{\"default\":\"modifying above y with hook\",\"brief\":\"mod above y with hook\",\"sbrief\":\"mod above y with hook\"}}},{\"category\":\"Ll\",\"key\":\"1EF9\",\"mappings\":{\"default\":{\"default\":\"y tilde\"},\"mathspeak\":{\"default\":\"y overtilde\",\"brief\":\"y overtilde\",\"sbrief\":\"y overtilde\"}}}]\n,\n\"en/symbols/latin-rest.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"italic h\",\"physics\":\"planck constant\"}},\"key\":\"210E\"},{\"category\":\"Mn\",\"key\":\"0363\",\"mappings\":{\"default\":{\"default\":\"combining a\"}}},{\"category\":\"Mn\",\"key\":\"0364\",\"mappings\":{\"default\":{\"default\":\"combining e\"}}},{\"category\":\"Mn\",\"key\":\"0365\",\"mappings\":{\"default\":{\"default\":\"combining i\"}}},{\"category\":\"Mn\",\"key\":\"0366\",\"mappings\":{\"default\":{\"default\":\"combining o\"}}},{\"category\":\"Mn\",\"key\":\"0367\",\"mappings\":{\"default\":{\"default\":\"combining u\"}}},{\"category\":\"Mn\",\"key\":\"0368\",\"mappings\":{\"default\":{\"default\":\"combining c\"}}},{\"category\":\"Mn\",\"key\":\"0369\",\"mappings\":{\"default\":{\"default\":\"combining d\"}}},{\"category\":\"Mn\",\"key\":\"036A\",\"mappings\":{\"default\":{\"default\":\"combining h\"}}},{\"category\":\"Mn\",\"key\":\"036B\",\"mappings\":{\"default\":{\"default\":\"combining m\"}}},{\"category\":\"Mn\",\"key\":\"036C\",\"mappings\":{\"default\":{\"default\":\"combining r\"}}},{\"category\":\"Mn\",\"key\":\"036D\",\"mappings\":{\"default\":{\"default\":\"combining t\"}}},{\"category\":\"Mn\",\"key\":\"036E\",\"mappings\":{\"default\":{\"default\":\"combining v\"}}},{\"category\":\"Mn\",\"key\":\"036F\",\"mappings\":{\"default\":{\"default\":\"combining x\"}}},{\"category\":\"Lm\",\"key\":\"1D62\",\"mappings\":{\"default\":{\"default\":\"subscript i\"}}},{\"category\":\"Lm\",\"key\":\"1D63\",\"mappings\":{\"default\":{\"default\":\"subscript r\"}}},{\"category\":\"Lm\",\"key\":\"1D64\",\"mappings\":{\"default\":{\"default\":\"subscript u\"}}},{\"category\":\"Lm\",\"key\":\"1D65\",\"mappings\":{\"default\":{\"default\":\"subscript v\"}}},{\"category\":\"Mn\",\"key\":\"1DCA\",\"mappings\":{\"default\":{\"default\":\"combining r below\"}}},{\"category\":\"Mn\",\"key\":\"1DD3\",\"mappings\":{\"default\":{\"default\":\"combining flattened open a above\"}}},{\"category\":\"Mn\",\"key\":\"1DD4\",\"mappings\":{\"default\":{\"default\":\"combining ae\"}}},{\"category\":\"Mn\",\"key\":\"1DD5\",\"mappings\":{\"default\":{\"default\":\"combining ao\"}}},{\"category\":\"Mn\",\"key\":\"1DD6\",\"mappings\":{\"default\":{\"default\":\"combining av\"}}},{\"category\":\"Mn\",\"key\":\"1DD7\",\"mappings\":{\"default\":{\"default\":\"combining c cedilla\"}}},{\"category\":\"Mn\",\"key\":\"1DD8\",\"mappings\":{\"default\":{\"default\":\"combining insular d\"}}},{\"category\":\"Mn\",\"key\":\"1DD9\",\"mappings\":{\"default\":{\"default\":\"combining eth\"}}},{\"category\":\"Mn\",\"key\":\"1DDA\",\"mappings\":{\"default\":{\"default\":\"combining g\"}}},{\"category\":\"Mn\",\"key\":\"1DDB\",\"mappings\":{\"default\":{\"default\":\"combining small cap G\"},\"mathspeak\":{\"default\":\"combining small upper G\"}}},{\"category\":\"Mn\",\"key\":\"1DDC\",\"mappings\":{\"default\":{\"default\":\"combining k\"}}},{\"category\":\"Mn\",\"key\":\"1DDD\",\"mappings\":{\"default\":{\"default\":\"combining l\"}}},{\"category\":\"Mn\",\"key\":\"1DDE\",\"mappings\":{\"default\":{\"default\":\"combining small cap L\"},\"mathspeak\":{\"default\":\"combining small upper L\"}}},{\"category\":\"Mn\",\"key\":\"1DDF\",\"mappings\":{\"default\":{\"default\":\"combining small cap M\"},\"mathspeak\":{\"default\":\"combining small upper M\"}}},{\"category\":\"Mn\",\"key\":\"1DE0\",\"mappings\":{\"default\":{\"default\":\"combining n\"}}},{\"category\":\"Mn\",\"key\":\"1DE1\",\"mappings\":{\"default\":{\"default\":\"combining small cap N\"},\"mathspeak\":{\"default\":\"combining small upper N\"}}},{\"category\":\"Mn\",\"key\":\"1DE2\",\"mappings\":{\"default\":{\"default\":\"combining small cap R\"},\"mathspeak\":{\"default\":\"combining small upper R\"}}},{\"category\":\"Mn\",\"key\":\"1DE3\",\"mappings\":{\"default\":{\"default\":\"combining r rotunda\"}}},{\"category\":\"Mn\",\"key\":\"1DE4\",\"mappings\":{\"default\":{\"default\":\"combining s\"}}},{\"category\":\"Mn\",\"key\":\"1DE5\",\"mappings\":{\"default\":{\"default\":\"combining long s\"}}},{\"category\":\"Mn\",\"key\":\"1DE6\",\"mappings\":{\"default\":{\"default\":\"combining z\"}}},{\"category\":\"Lm\",\"key\":\"2071\",\"mappings\":{\"default\":{\"default\":\"superscript i\"}}},{\"category\":\"Lm\",\"key\":\"207F\",\"mappings\":{\"default\":{\"default\":\"superscript n\"}}},{\"category\":\"Lm\",\"key\":\"2090\",\"mappings\":{\"default\":{\"default\":\"subscript a\"}}},{\"category\":\"Lm\",\"key\":\"2091\",\"mappings\":{\"default\":{\"default\":\"subscript e\"}}},{\"category\":\"Lm\",\"key\":\"2092\",\"mappings\":{\"default\":{\"default\":\"subscript o\"}}},{\"category\":\"Lm\",\"key\":\"2093\",\"mappings\":{\"default\":{\"default\":\"subscript x\"}}},{\"category\":\"Lm\",\"key\":\"2094\",\"mappings\":{\"default\":{\"default\":\"subscript schwa\"}}},{\"category\":\"Lm\",\"key\":\"2095\",\"mappings\":{\"default\":{\"default\":\"subscript h\"}}},{\"category\":\"Lm\",\"key\":\"2096\",\"mappings\":{\"default\":{\"default\":\"subscript k\"}}},{\"category\":\"Lm\",\"key\":\"2097\",\"mappings\":{\"default\":{\"default\":\"subscript l\"}}},{\"category\":\"Lm\",\"key\":\"2098\",\"mappings\":{\"default\":{\"default\":\"subscript m\"}}},{\"category\":\"Lm\",\"key\":\"2099\",\"mappings\":{\"default\":{\"default\":\"subscript n\"}}},{\"category\":\"Lm\",\"key\":\"209A\",\"mappings\":{\"default\":{\"default\":\"subscript p\"}}},{\"category\":\"Lm\",\"key\":\"209B\",\"mappings\":{\"default\":{\"default\":\"subscript s\"}}},{\"category\":\"Lm\",\"key\":\"209C\",\"mappings\":{\"default\":{\"default\":\"subscript t\"}}},{\"category\":\"Lm\",\"key\":\"2C7C\",\"mappings\":{\"default\":{\"default\":\"subscript j\"}}},{\"category\":\"So\",\"key\":\"1F12A\",\"mappings\":{\"default\":{\"default\":\"tortoise shell bracketed cap S\"},\"mathspeak\":{\"default\":\"tortoise shell bracketed upper S\"}}},{\"category\":\"So\",\"key\":\"1F12B\",\"mappings\":{\"default\":{\"default\":\"circled italic cap C\"},\"mathspeak\":{\"default\":\"circled italic upper C\"}}},{\"category\":\"So\",\"key\":\"1F12C\",\"mappings\":{\"default\":{\"default\":\"circled italic cap R\"},\"mathspeak\":{\"default\":\"circled italic upper R\"}}},{\"category\":\"So\",\"key\":\"1F18A\",\"mappings\":{\"default\":{\"default\":\"crossed negative squared cap P\"},\"mathspeak\":{\"default\":\"crossed negative squared upper P\"}}}]\n,\n\"en/symbols/latin-upper-double-accent.js\": \n[{\"locale\":\"en\"},{\"category\":\"Lu\",\"key\":\"01D5\",\"mappings\":{\"default\":{\"default\":\"cap U double overdot overbar\"},\"mathspeak\":{\"default\":\"upper U double overdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"01D7\",\"mappings\":{\"default\":{\"default\":\"cap U double overdot acute\"},\"mathspeak\":{\"default\":\"upper U double overdot acute\"}}},{\"category\":\"Lu\",\"key\":\"01D9\",\"mappings\":{\"default\":{\"default\":\"cap U double overdot caron\"},\"mathspeak\":{\"default\":\"upper U double overdot caron\"}}},{\"category\":\"Lu\",\"key\":\"01DB\",\"mappings\":{\"default\":{\"default\":\"cap U double overdot grave\"},\"mathspeak\":{\"default\":\"upper U double overdot grave\"}}},{\"category\":\"Lu\",\"key\":\"01DE\",\"mappings\":{\"default\":{\"default\":\"cap A double overdot overbar\"},\"mathspeak\":{\"default\":\"upper A double overdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"01E0\",\"mappings\":{\"default\":{\"default\":\"cap A overdot overbar\"},\"mathspeak\":{\"default\":\"upper A overdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"01EC\",\"mappings\":{\"default\":{\"default\":\"cap O ogonek overbar\"},\"mathspeak\":{\"default\":\"upper O ogonek overbar\"}}},{\"category\":\"Lu\",\"key\":\"01FA\",\"mappings\":{\"default\":{\"default\":\"cap A ring acute\"},\"mathspeak\":{\"default\":\"upper A ring acute\"}}},{\"category\":\"Lu\",\"key\":\"022A\",\"mappings\":{\"default\":{\"default\":\"cap O double overdot overbar\"},\"mathspeak\":{\"default\":\"upper O double overdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"022C\",\"mappings\":{\"default\":{\"default\":\"cap O tilde overbar\"},\"mathspeak\":{\"default\":\"upper O tilde overbar\"}}},{\"category\":\"Lu\",\"key\":\"0230\",\"mappings\":{\"default\":{\"default\":\"cap O overdot overbar\"},\"mathspeak\":{\"default\":\"upper O overdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"1E08\",\"mappings\":{\"default\":{\"default\":\"cap C cedilla acute\"},\"mathspeak\":{\"default\":\"upper C cedilla acute\"}}},{\"category\":\"Lu\",\"key\":\"1E14\",\"mappings\":{\"default\":{\"default\":\"cap E overbar grave\"},\"mathspeak\":{\"default\":\"upper E overbar grave\"}}},{\"category\":\"Lu\",\"key\":\"1E16\",\"mappings\":{\"default\":{\"default\":\"cap E overbar acute\"},\"mathspeak\":{\"default\":\"upper E overbar acute\"}}},{\"category\":\"Lu\",\"key\":\"1E1C\",\"mappings\":{\"default\":{\"default\":\"cap E cedilla breve\"},\"mathspeak\":{\"default\":\"upper E cedilla breve\"}}},{\"category\":\"Lu\",\"key\":\"1E2E\",\"mappings\":{\"default\":{\"default\":\"cap I double overdot acute\"},\"mathspeak\":{\"default\":\"upper I double overdot acute\"}}},{\"category\":\"Lu\",\"key\":\"1E38\",\"mappings\":{\"default\":{\"default\":\"cap L underdot overbar\"},\"mathspeak\":{\"default\":\"upper L underdot overbar\"}}},{\"category\":\"Lu\",\"key\":\"1E4C\",\"mappings\":{\"default\":{\"default\":\"cap O tilde acute\"},\"mathspeak\":{\"default\":\"upper O tilde acute\"}}},{\"category\":\"Lu\",\"key\":\"1E4E\",\"mappings\":{\"default\":{\"default\":\"cap O tilde double overdot\"},\"mathspeak\":{\"default\":\"upper O tilde double overdot\"}}},{\"category\":\"Lu\",\"key\":\"1E50\",\"mappings\":{\"default\":{\"default\":\"cap O overbar grave\"},\"mathspeak\":{\"default\":\"upper O overbar grave\"}}},{\"category\":\"Lu\",\"key\":\"1E52\",\"mappings\":{\"default\":{\"default\":\"cap O overbar acute\"},\"mathspeak\":{\"default\":\"upper O overbar acute\"}}},{\"category\":\"Lu\",\"key\":\"1E5C\",\"mappings\":{\"default\":{\"default\":\"cap R overbar underdot\"},\"mathspeak\":{\"default\":\"upper R overbar underdot\"}}},{\"category\":\"Lu\",\"key\":\"1E64\",\"mappings\":{\"default\":{\"default\":\"cap S acute overdot\"},\"mathspeak\":{\"default\":\"upper S acute overdot\"}}},{\"category\":\"Lu\",\"key\":\"1E66\",\"mappings\":{\"default\":{\"default\":\"cap S caron overdot\"},\"mathspeak\":{\"default\":\"upper S caron overdot\"}}},{\"category\":\"Lu\",\"key\":\"1E68\",\"mappings\":{\"default\":{\"default\":\"cap S underdot overdot\"},\"mathspeak\":{\"default\":\"upper S underdot overdot\"}}},{\"category\":\"Lu\",\"key\":\"1E78\",\"mappings\":{\"default\":{\"default\":\"cap U tilde acute\"},\"mathspeak\":{\"default\":\"upper U tilde acute\"}}},{\"category\":\"Lu\",\"key\":\"1E7A\",\"mappings\":{\"default\":{\"default\":\"cap U overbar double overdot\"},\"mathspeak\":{\"default\":\"upper U overbar double overdot\"}}},{\"category\":\"Lu\",\"key\":\"1EA4\",\"mappings\":{\"default\":{\"default\":\"cap A hat acute\"},\"mathspeak\":{\"default\":\"upper A hat acute\"}}},{\"category\":\"Lu\",\"key\":\"1EA6\",\"mappings\":{\"default\":{\"default\":\"cap A hat grave\"},\"mathspeak\":{\"default\":\"upper A hat grave\"}}},{\"category\":\"Lu\",\"key\":\"1EA8\",\"mappings\":{\"default\":{\"default\":\"cap A hat hook\"},\"mathspeak\":{\"default\":\"upper A hat hook\"}}},{\"category\":\"Lu\",\"key\":\"1EAA\",\"mappings\":{\"default\":{\"default\":\"cap A hat tilde\"},\"mathspeak\":{\"default\":\"upper A hat tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EAC\",\"mappings\":{\"default\":{\"default\":\"cap A hat underdot\"},\"mathspeak\":{\"default\":\"upper A hat underdot\"}}},{\"category\":\"Lu\",\"key\":\"1EAE\",\"mappings\":{\"default\":{\"default\":\"cap A breve acute\"},\"mathspeak\":{\"default\":\"upper A breve acute\"}}},{\"category\":\"Lu\",\"key\":\"1EB0\",\"mappings\":{\"default\":{\"default\":\"cap A breve grave\"},\"mathspeak\":{\"default\":\"upper A breve grave\"}}},{\"category\":\"Lu\",\"key\":\"1EB2\",\"mappings\":{\"default\":{\"default\":\"cap A breve hook\"},\"mathspeak\":{\"default\":\"upper A breve hook\"}}},{\"category\":\"Lu\",\"key\":\"1EB4\",\"mappings\":{\"default\":{\"default\":\"cap A breve tilde\"},\"mathspeak\":{\"default\":\"upper A breve tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EB6\",\"mappings\":{\"default\":{\"default\":\"cap A breve underdot\"},\"mathspeak\":{\"default\":\"upper A breve underdot\"}}},{\"category\":\"Lu\",\"key\":\"1EBE\",\"mappings\":{\"default\":{\"default\":\"cap E hat acute\"},\"mathspeak\":{\"default\":\"upper E hat acute\"}}},{\"category\":\"Lu\",\"key\":\"1EC0\",\"mappings\":{\"default\":{\"default\":\"cap E hat grave\"},\"mathspeak\":{\"default\":\"upper E hat grave\"}}},{\"category\":\"Lu\",\"key\":\"1EC2\",\"mappings\":{\"default\":{\"default\":\"cap E hat hook\"},\"mathspeak\":{\"default\":\"upper E hat hook\"}}},{\"category\":\"Lu\",\"key\":\"1EC4\",\"mappings\":{\"default\":{\"default\":\"cap E hat tilde\"},\"mathspeak\":{\"default\":\"upper E hat tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EC6\",\"mappings\":{\"default\":{\"default\":\"cap E hat underdot\"},\"mathspeak\":{\"default\":\"upper E hat underdot\"}}},{\"category\":\"Lu\",\"key\":\"1ED0\",\"mappings\":{\"default\":{\"default\":\"cap O hat acute\"},\"mathspeak\":{\"default\":\"upper O hat acute\"}}},{\"category\":\"Lu\",\"key\":\"1ED2\",\"mappings\":{\"default\":{\"default\":\"cap O hat grave\"},\"mathspeak\":{\"default\":\"upper O hat grave\"}}},{\"category\":\"Lu\",\"key\":\"1ED4\",\"mappings\":{\"default\":{\"default\":\"cap O hat hook\"},\"mathspeak\":{\"default\":\"upper O hat hook\"}}},{\"category\":\"Lu\",\"key\":\"1ED6\",\"mappings\":{\"default\":{\"default\":\"cap O hat tilde\"},\"mathspeak\":{\"default\":\"upper O hat tilde\"}}},{\"category\":\"Lu\",\"key\":\"1ED8\",\"mappings\":{\"default\":{\"default\":\"cap O hat underdot\"},\"mathspeak\":{\"default\":\"upper O hat underdot\"}}},{\"category\":\"Lu\",\"key\":\"1EDA\",\"mappings\":{\"default\":{\"default\":\"cap O acute prime\"},\"mathspeak\":{\"default\":\"upper O acute prime\"}}},{\"category\":\"Lu\",\"key\":\"1EDC\",\"mappings\":{\"default\":{\"default\":\"cap O grave prime\"},\"mathspeak\":{\"default\":\"upper O grave prime\"}}},{\"category\":\"Lu\",\"key\":\"1EDE\",\"mappings\":{\"default\":{\"default\":\"cap O hook prime\"},\"mathspeak\":{\"default\":\"upper O hook prime\"}}},{\"category\":\"Lu\",\"key\":\"1EE0\",\"mappings\":{\"default\":{\"default\":\"cap O tilde prime\"},\"mathspeak\":{\"default\":\"upper O tilde prime\"}}},{\"category\":\"Lu\",\"key\":\"1EE2\",\"mappings\":{\"default\":{\"default\":\"cap O underdot prime\"},\"mathspeak\":{\"default\":\"upper O underdot prime\"}}},{\"category\":\"Lu\",\"key\":\"1EE8\",\"mappings\":{\"default\":{\"default\":\"cap U acute prime\"},\"mathspeak\":{\"default\":\"upper U acute prime\"}}},{\"category\":\"Lu\",\"key\":\"1EEA\",\"mappings\":{\"default\":{\"default\":\"cap U grave prime\"},\"mathspeak\":{\"default\":\"upper U grave prime\"}}},{\"category\":\"Lu\",\"key\":\"1EEC\",\"mappings\":{\"default\":{\"default\":\"cap U hook prime\"},\"mathspeak\":{\"default\":\"upper U hook prime\"}}},{\"category\":\"Lu\",\"key\":\"1EEE\",\"mappings\":{\"default\":{\"default\":\"cap U tilde prime\"},\"mathspeak\":{\"default\":\"upper U tilde prime\"}}},{\"category\":\"Lu\",\"key\":\"1EF0\",\"mappings\":{\"default\":{\"default\":\"cap U underdot prime\"},\"mathspeak\":{\"default\":\"upper U underdot prime\"}}}]\n,\n\"en/symbols/latin-upper-single-accent.js\": \n[{\"locale\":\"en\"},{\"category\":\"Lu\",\"key\":\"00C0\",\"mappings\":{\"default\":{\"default\":\"cap A grave\"},\"mathspeak\":{\"default\":\"modifying above upper A with grave\",\"brief\":\"mod above upper A with grave\",\"sbrief\":\"mod above upper A with grave\"}}},{\"category\":\"Lu\",\"key\":\"00C1\",\"mappings\":{\"default\":{\"default\":\"cap A acute\"},\"mathspeak\":{\"default\":\"modifying above upper A with acute\",\"brief\":\"mod above upper A with acute\",\"sbrief\":\"mod above upper A with acute\"}}},{\"category\":\"Lu\",\"key\":\"00C2\",\"mappings\":{\"default\":{\"default\":\"cap A hat\"},\"mathspeak\":{\"default\":\"modifying above upper A with caret\",\"brief\":\"mod above upper A with caret\",\"sbrief\":\"mod above upper A with caret\"}}},{\"category\":\"Lu\",\"key\":\"00C3\",\"mappings\":{\"default\":{\"default\":\"cap A tilde\"},\"mathspeak\":{\"default\":\"upper A overtilde\",\"brief\":\"upper A overtilde\",\"sbrief\":\"upper A overtilde\"}}},{\"category\":\"Lu\",\"key\":\"00C4\",\"mappings\":{\"default\":{\"default\":\"cap A double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper A with double dot\",\"brief\":\"mod above upper A with double dot\",\"sbrief\":\"mod above upper A with double dot\"}}},{\"category\":\"Lu\",\"key\":\"00C5\",\"mappings\":{\"default\":{\"default\":\"cap A ring\"},\"mathspeak\":{\"default\":\"modifying above upper A with ring\",\"brief\":\"mod above upper A with ring\",\"sbrief\":\"mod above upper A with ring\"}}},{\"category\":\"Lu\",\"key\":\"00C7\",\"mappings\":{\"default\":{\"default\":\"cap C cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper C with cedilla\",\"brief\":\"mod above upper C with cedilla\",\"sbrief\":\"mod above upper C with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"00C8\",\"mappings\":{\"default\":{\"default\":\"cap E grave\"},\"mathspeak\":{\"default\":\"modifying above upper E with grave\",\"brief\":\"mod above upper E with grave\",\"sbrief\":\"mod above upper E with grave\"}}},{\"category\":\"Lu\",\"key\":\"00C9\",\"mappings\":{\"default\":{\"default\":\"cap E acute\"},\"mathspeak\":{\"default\":\"modifying above upper E with acute\",\"brief\":\"mod above upper E with acute\",\"sbrief\":\"mod above upper E with acute\"}}},{\"category\":\"Lu\",\"key\":\"00CA\",\"mappings\":{\"default\":{\"default\":\"cap E hat\"},\"mathspeak\":{\"default\":\"modifying above upper E with caret\",\"brief\":\"mod above upper E with caret\",\"sbrief\":\"mod above upper E with caret\"}}},{\"category\":\"Lu\",\"key\":\"00CB\",\"mappings\":{\"default\":{\"default\":\"cap E double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper E with double dot\",\"brief\":\"mod above upper E with double dot\",\"sbrief\":\"mod above upper E with double dot\"}}},{\"category\":\"Lu\",\"key\":\"00CC\",\"mappings\":{\"default\":{\"default\":\"cap I grave\"},\"mathspeak\":{\"default\":\"modifying above upper I with grave\",\"brief\":\"mod above upper I with grave\",\"sbrief\":\"mod above upper I with grave\"}}},{\"category\":\"Lu\",\"key\":\"00CD\",\"mappings\":{\"default\":{\"default\":\"cap I acute\"},\"mathspeak\":{\"default\":\"modifying above upper I with acute\",\"brief\":\"mod above upper I with acute\",\"sbrief\":\"mod above upper I with acute\"}}},{\"category\":\"Lu\",\"key\":\"00CE\",\"mappings\":{\"default\":{\"default\":\"cap I hat\"},\"mathspeak\":{\"default\":\"modifying above upper I with caret\",\"brief\":\"mod above upper I with caret\",\"sbrief\":\"mod above upper I with caret\"}}},{\"category\":\"Lu\",\"key\":\"00CF\",\"mappings\":{\"default\":{\"default\":\"cap I double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper I with double dot\",\"brief\":\"mod above upper I with double dot\",\"sbrief\":\"mod above upper I with double dot\"}}},{\"category\":\"Lu\",\"key\":\"00D1\",\"mappings\":{\"default\":{\"default\":\"cap N tilde\"},\"mathspeak\":{\"default\":\"upper N overtilde\",\"brief\":\"upper N overtilde\",\"sbrief\":\"upper N overtilde\"}}},{\"category\":\"Lu\",\"key\":\"00D2\",\"mappings\":{\"default\":{\"default\":\"cap O grave\"},\"mathspeak\":{\"default\":\"modifying above upper O with grave\",\"brief\":\"mod above upper O with grave\",\"sbrief\":\"mod above upper O with grave\"}}},{\"category\":\"Lu\",\"key\":\"00D3\",\"mappings\":{\"default\":{\"default\":\"cap O acute\"},\"mathspeak\":{\"default\":\"modifying above upper O with acute\",\"brief\":\"mod above upper O with acute\",\"sbrief\":\"mod above upper O with acute\"}}},{\"category\":\"Lu\",\"key\":\"00D4\",\"mappings\":{\"default\":{\"default\":\"cap O hat\"},\"mathspeak\":{\"default\":\"modifying above upper O with caret\",\"brief\":\"mod above upper O with caret\",\"sbrief\":\"mod above upper O with caret\"}}},{\"category\":\"Lu\",\"key\":\"00D5\",\"mappings\":{\"default\":{\"default\":\"cap O tilde\"},\"mathspeak\":{\"default\":\"upper O overtilde\",\"brief\":\"upper O overtilde\",\"sbrief\":\"upper O overtilde\"}}},{\"category\":\"Lu\",\"key\":\"00D6\",\"mappings\":{\"default\":{\"default\":\"cap O double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper O with double dot\",\"brief\":\"mod above upper O with double dot\",\"sbrief\":\"mod above upper O with double dot\"}}},{\"category\":\"Lu\",\"key\":\"00D9\",\"mappings\":{\"default\":{\"default\":\"cap U grave\"},\"mathspeak\":{\"default\":\"modifying above upper U with grave\",\"brief\":\"mod above upper U with grave\",\"sbrief\":\"mod above upper U with grave\"}}},{\"category\":\"Lu\",\"key\":\"00DA\",\"mappings\":{\"default\":{\"default\":\"cap U acute\"},\"mathspeak\":{\"default\":\"modifying above upper U with acute\",\"brief\":\"mod above upper U with acute\",\"sbrief\":\"mod above upper U with acute\"}}},{\"category\":\"Lu\",\"key\":\"00DB\",\"mappings\":{\"default\":{\"default\":\"cap U hat\"},\"mathspeak\":{\"default\":\"modifying above upper U with caret\",\"brief\":\"mod above upper U with caret\",\"sbrief\":\"mod above upper U with caret\"}}},{\"category\":\"Lu\",\"key\":\"00DC\",\"mappings\":{\"default\":{\"default\":\"cap U double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper U with double dot\",\"brief\":\"mod above upper U with double dot\",\"sbrief\":\"mod above upper U with double dot\"}}},{\"category\":\"Lu\",\"key\":\"00DD\",\"mappings\":{\"default\":{\"default\":\"cap Y acute\"},\"mathspeak\":{\"default\":\"modifying above upper Y with acute\",\"brief\":\"mod above upper Y with acute\",\"sbrief\":\"mod above upper Y with acute\"}}},{\"category\":\"Lu\",\"key\":\"0100\",\"mappings\":{\"default\":{\"default\":\"cap A overbar\"},\"mathspeak\":{\"default\":\"upper A overbar\",\"brief\":\"upper A overbar\",\"sbrief\":\"upper A overbar\"}}},{\"category\":\"Lu\",\"key\":\"0102\",\"mappings\":{\"default\":{\"default\":\"cap A breve\"},\"mathspeak\":{\"default\":\"modifying above upper A with breve\",\"brief\":\"mod above upper A with breve\",\"sbrief\":\"mod above upper A with breve\"}}},{\"category\":\"Lu\",\"key\":\"0104\",\"mappings\":{\"default\":{\"default\":\"cap A ogonek\"},\"mathspeak\":{\"default\":\"modifying above upper A with ogonek\",\"brief\":\"mod above upper A with ogonek\",\"sbrief\":\"mod above upper A with ogonek\"}}},{\"category\":\"Lu\",\"key\":\"0106\",\"mappings\":{\"default\":{\"default\":\"cap C acute\"},\"mathspeak\":{\"default\":\"modifying above upper C with acute\",\"brief\":\"mod above upper C with acute\",\"sbrief\":\"mod above upper C with acute\"}}},{\"category\":\"Lu\",\"key\":\"0108\",\"mappings\":{\"default\":{\"default\":\"cap C hat\"},\"mathspeak\":{\"default\":\"modifying above upper C with caret\",\"brief\":\"mod above upper C with caret\",\"sbrief\":\"mod above upper C with caret\"}}},{\"category\":\"Lu\",\"key\":\"010A\",\"mappings\":{\"default\":{\"default\":\"cap C overdot\"},\"mathspeak\":{\"default\":\"modifying above upper C with dot\",\"brief\":\"mod above upper C with dot\",\"sbrief\":\"mod above upper C with dot\"}}},{\"category\":\"Lu\",\"key\":\"010C\",\"mappings\":{\"default\":{\"default\":\"cap C caron\"},\"mathspeak\":{\"default\":\"modifying above upper C with caron\",\"brief\":\"mod above upper C with caron\",\"sbrief\":\"mod above upper C with caron\"}}},{\"category\":\"Lu\",\"key\":\"010E\",\"mappings\":{\"default\":{\"default\":\"cap D caron\"},\"mathspeak\":{\"default\":\"modifying above upper D with caron\",\"brief\":\"mod above upper D with caron\",\"sbrief\":\"mod above upper D with caron\"}}},{\"category\":\"Lu\",\"key\":\"0112\",\"mappings\":{\"default\":{\"default\":\"cap E overbar\"},\"mathspeak\":{\"default\":\"upper E overbar\",\"brief\":\"upper E overbar\",\"sbrief\":\"upper E overbar\"}}},{\"category\":\"Lu\",\"key\":\"0114\",\"mappings\":{\"default\":{\"default\":\"cap E breve\"},\"mathspeak\":{\"default\":\"modifying above upper E with breve\",\"brief\":\"mod above upper E with breve\",\"sbrief\":\"mod above upper E with breve\"}}},{\"category\":\"Lu\",\"key\":\"0116\",\"mappings\":{\"default\":{\"default\":\"cap E overdot\"},\"mathspeak\":{\"default\":\"modifying above upper E with dot\",\"brief\":\"mod above upper E with dot\",\"sbrief\":\"mod above upper E with dot\"}}},{\"category\":\"Lu\",\"key\":\"0118\",\"mappings\":{\"default\":{\"default\":\"cap E ogonek\"},\"mathspeak\":{\"default\":\"modifying above upper E with ogonek\",\"brief\":\"mod above upper E with ogonek\",\"sbrief\":\"mod above upper E with ogonek\"}}},{\"category\":\"Lu\",\"key\":\"011A\",\"mappings\":{\"default\":{\"default\":\"cap E caron\"},\"mathspeak\":{\"default\":\"modifying above upper E with caron\",\"brief\":\"mod above upper E with caron\",\"sbrief\":\"mod above upper E with caron\"}}},{\"category\":\"Lu\",\"key\":\"011C\",\"mappings\":{\"default\":{\"default\":\"cap G hat\"},\"mathspeak\":{\"default\":\"modifying above upper G with caret\",\"brief\":\"mod above upper G with caret\",\"sbrief\":\"mod above upper G with caret\"}}},{\"category\":\"Lu\",\"key\":\"011E\",\"mappings\":{\"default\":{\"default\":\"cap G breve\"},\"mathspeak\":{\"default\":\"modifying above upper G with breve\",\"brief\":\"mod above upper G with breve\",\"sbrief\":\"mod above upper G with breve\"}}},{\"category\":\"Lu\",\"key\":\"0120\",\"mappings\":{\"default\":{\"default\":\"cap G overdot\"},\"mathspeak\":{\"default\":\"modifying above upper G with dot\",\"brief\":\"mod above upper G with dot\",\"sbrief\":\"mod above upper G with dot\"}}},{\"category\":\"Lu\",\"key\":\"0122\",\"mappings\":{\"default\":{\"default\":\"cap G cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper G with cedilla\",\"brief\":\"mod above upper G with cedilla\",\"sbrief\":\"mod above upper G with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0124\",\"mappings\":{\"default\":{\"default\":\"cap H hat\"},\"mathspeak\":{\"default\":\"modifying above upper H with caret\",\"brief\":\"mod above upper H with caret\",\"sbrief\":\"mod above upper H with caret\"}}},{\"category\":\"Lu\",\"key\":\"0128\",\"mappings\":{\"default\":{\"default\":\"cap I tilde\"},\"mathspeak\":{\"default\":\"upper I overtilde\",\"brief\":\"upper I overtilde\",\"sbrief\":\"upper I overtilde\"}}},{\"category\":\"Lu\",\"key\":\"012A\",\"mappings\":{\"default\":{\"default\":\"cap I overbar\"},\"mathspeak\":{\"default\":\"upper I overbar\",\"brief\":\"upper I overbar\",\"sbrief\":\"upper I overbar\"}}},{\"category\":\"Lu\",\"key\":\"012C\",\"mappings\":{\"default\":{\"default\":\"cap I breve\"},\"mathspeak\":{\"default\":\"modifying above upper I with breve\",\"brief\":\"mod above upper I with breve\",\"sbrief\":\"mod above upper I with breve\"}}},{\"category\":\"Lu\",\"key\":\"012E\",\"mappings\":{\"default\":{\"default\":\"cap I ogonek\"},\"mathspeak\":{\"default\":\"modifying above upper I with ogonek\",\"brief\":\"mod above upper I with ogonek\",\"sbrief\":\"mod above upper I with ogonek\"}}},{\"category\":\"Lu\",\"key\":\"0130\",\"mappings\":{\"default\":{\"default\":\"cap I overdot\"},\"mathspeak\":{\"default\":\"modifying above upper I with dot\",\"brief\":\"mod above upper I with dot\",\"sbrief\":\"mod above upper I with dot\"}}},{\"category\":\"Lu\",\"key\":\"0134\",\"mappings\":{\"default\":{\"default\":\"cap J hat\"},\"mathspeak\":{\"default\":\"modifying above upper J with caret\",\"brief\":\"mod above upper J with caret\",\"sbrief\":\"mod above upper J with caret\"}}},{\"category\":\"Lu\",\"key\":\"0136\",\"mappings\":{\"default\":{\"default\":\"cap K cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper K with cedilla\",\"brief\":\"mod above upper K with cedilla\",\"sbrief\":\"mod above upper K with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0139\",\"mappings\":{\"default\":{\"default\":\"cap L acute\"},\"mathspeak\":{\"default\":\"modifying above upper L with acute\",\"brief\":\"mod above upper L with acute\",\"sbrief\":\"mod above upper L with acute\"}}},{\"category\":\"Lu\",\"key\":\"013B\",\"mappings\":{\"default\":{\"default\":\"cap L cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper L with cedilla\",\"brief\":\"mod above upper L with cedilla\",\"sbrief\":\"mod above upper L with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"013D\",\"mappings\":{\"default\":{\"default\":\"cap L caron\"},\"mathspeak\":{\"default\":\"modifying above upper L with caron\",\"brief\":\"mod above upper L with caron\",\"sbrief\":\"mod above upper L with caron\"}}},{\"category\":\"Lu\",\"key\":\"013F\",\"mappings\":{\"default\":{\"default\":\"cap L middle dot\"},\"mathspeak\":{\"default\":\"modifying above upper L with middle dot\",\"brief\":\"mod above upper L with middle dot\",\"sbrief\":\"mod above upper L with middle dot\"}}},{\"category\":\"Lu\",\"key\":\"0143\",\"mappings\":{\"default\":{\"default\":\"cap N acute\"},\"mathspeak\":{\"default\":\"modifying above upper N with acute\",\"brief\":\"mod above upper N with acute\",\"sbrief\":\"mod above upper N with acute\"}}},{\"category\":\"Lu\",\"key\":\"0145\",\"mappings\":{\"default\":{\"default\":\"cap N cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper N with cedilla\",\"brief\":\"mod above upper N with cedilla\",\"sbrief\":\"mod above upper N with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0147\",\"mappings\":{\"default\":{\"default\":\"cap N caron\"},\"mathspeak\":{\"default\":\"modifying above upper N with caron\",\"brief\":\"mod above upper N with caron\",\"sbrief\":\"mod above upper N with caron\"}}},{\"category\":\"Lu\",\"key\":\"014C\",\"mappings\":{\"default\":{\"default\":\"cap O overbar\"},\"mathspeak\":{\"default\":\"upper O overbar\",\"brief\":\"upper O overbar\",\"sbrief\":\"upper O overbar\"}}},{\"category\":\"Lu\",\"key\":\"014E\",\"mappings\":{\"default\":{\"default\":\"cap O breve\"},\"mathspeak\":{\"default\":\"modifying above upper O with breve\",\"brief\":\"mod above upper O with breve\",\"sbrief\":\"mod above upper O with breve\"}}},{\"category\":\"Lu\",\"key\":\"0150\",\"mappings\":{\"default\":{\"default\":\"cap O double acute\"},\"mathspeak\":{\"default\":\"modifying above upper O with double acute\",\"brief\":\"mod above upper O with double acute\",\"sbrief\":\"mod above upper O with double acute\"}}},{\"category\":\"Lu\",\"key\":\"0154\",\"mappings\":{\"default\":{\"default\":\"cap R acute\"},\"mathspeak\":{\"default\":\"modifying above upper R with acute\",\"brief\":\"mod above upper R with acute\",\"sbrief\":\"mod above upper R with acute\"}}},{\"category\":\"Lu\",\"key\":\"0156\",\"mappings\":{\"default\":{\"default\":\"cap R cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper R with cedilla\",\"brief\":\"mod above upper R with cedilla\",\"sbrief\":\"mod above upper R with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0158\",\"mappings\":{\"default\":{\"default\":\"cap R caron\"},\"mathspeak\":{\"default\":\"modifying above upper R with caron\",\"brief\":\"mod above upper R with caron\",\"sbrief\":\"mod above upper R with caron\"}}},{\"category\":\"Lu\",\"key\":\"015A\",\"mappings\":{\"default\":{\"default\":\"cap S acute\"},\"mathspeak\":{\"default\":\"modifying above upper S with acute\",\"brief\":\"mod above upper S with acute\",\"sbrief\":\"mod above upper S with acute\"}}},{\"category\":\"Lu\",\"key\":\"015C\",\"mappings\":{\"default\":{\"default\":\"cap S hat\"},\"mathspeak\":{\"default\":\"modifying above upper S with caret\",\"brief\":\"mod above upper S with caret\",\"sbrief\":\"mod above upper S with caret\"}}},{\"category\":\"Lu\",\"key\":\"015E\",\"mappings\":{\"default\":{\"default\":\"cap S cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper S with cedilla\",\"brief\":\"mod above upper S with cedilla\",\"sbrief\":\"mod above upper S with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0160\",\"mappings\":{\"default\":{\"default\":\"cap S caron\"},\"mathspeak\":{\"default\":\"modifying above upper S with caron\",\"brief\":\"mod above upper S with caron\",\"sbrief\":\"mod above upper S with caron\"}}},{\"category\":\"Lu\",\"key\":\"0162\",\"mappings\":{\"default\":{\"default\":\"cap T cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper T with cedilla\",\"brief\":\"mod above upper T with cedilla\",\"sbrief\":\"mod above upper T with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"0164\",\"mappings\":{\"default\":{\"default\":\"cap T caron\"},\"mathspeak\":{\"default\":\"modifying above upper T with caron\",\"brief\":\"mod above upper T with caron\",\"sbrief\":\"mod above upper T with caron\"}}},{\"category\":\"Lu\",\"key\":\"0168\",\"mappings\":{\"default\":{\"default\":\"cap U tilde\"},\"mathspeak\":{\"default\":\"upper U overtilde\",\"brief\":\"upper U overtilde\",\"sbrief\":\"upper U overtilde\"}}},{\"category\":\"Lu\",\"key\":\"016A\",\"mappings\":{\"default\":{\"default\":\"cap U overbar\"},\"mathspeak\":{\"default\":\"upper U overbar\",\"brief\":\"upper U overbar\",\"sbrief\":\"upper U overbar\"}}},{\"category\":\"Lu\",\"key\":\"016C\",\"mappings\":{\"default\":{\"default\":\"cap U breve\"},\"mathspeak\":{\"default\":\"modifying above upper U with breve\",\"brief\":\"mod above upper U with breve\",\"sbrief\":\"mod above upper U with breve\"}}},{\"category\":\"Lu\",\"key\":\"016E\",\"mappings\":{\"default\":{\"default\":\"cap U ring\"},\"mathspeak\":{\"default\":\"modifying above upper U with ring\",\"brief\":\"mod above upper U with ring\",\"sbrief\":\"mod above upper U with ring\"}}},{\"category\":\"Lu\",\"key\":\"0170\",\"mappings\":{\"default\":{\"default\":\"cap U double acute\"},\"mathspeak\":{\"default\":\"modifying above upper U with double acute\",\"brief\":\"mod above upper U with double acute\",\"sbrief\":\"mod above upper U with double acute\"}}},{\"category\":\"Lu\",\"key\":\"0172\",\"mappings\":{\"default\":{\"default\":\"cap U ogonek\"},\"mathspeak\":{\"default\":\"modifying above upper U with ogonek\",\"brief\":\"mod above upper U with ogonek\",\"sbrief\":\"mod above upper U with ogonek\"}}},{\"category\":\"Lu\",\"key\":\"0174\",\"mappings\":{\"default\":{\"default\":\"cap W hat\"},\"mathspeak\":{\"default\":\"modifying above upper W with caret\",\"brief\":\"mod above upper W with caret\",\"sbrief\":\"mod above upper W with caret\"}}},{\"category\":\"Lu\",\"key\":\"0176\",\"mappings\":{\"default\":{\"default\":\"cap Y hat\"},\"mathspeak\":{\"default\":\"modifying above upper Y with caret\",\"brief\":\"mod above upper Y with caret\",\"sbrief\":\"mod above upper Y with caret\"}}},{\"category\":\"Lu\",\"key\":\"0178\",\"mappings\":{\"default\":{\"default\":\"cap Y double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper Y with double dot\",\"brief\":\"mod above upper Y with double dot\",\"sbrief\":\"mod above upper Y with double dot\"}}},{\"category\":\"Lu\",\"key\":\"0179\",\"mappings\":{\"default\":{\"default\":\"cap Z acute\"},\"mathspeak\":{\"default\":\"modifying above upper Z with acute\",\"brief\":\"mod above upper Z with acute\",\"sbrief\":\"mod above upper Z with acute\"}}},{\"category\":\"Lu\",\"key\":\"017B\",\"mappings\":{\"default\":{\"default\":\"cap Z overdot\"},\"mathspeak\":{\"default\":\"modifying above upper Z with dot\",\"brief\":\"mod above upper Z with dot\",\"sbrief\":\"mod above upper Z with dot\"}}},{\"category\":\"Lu\",\"key\":\"017D\",\"mappings\":{\"default\":{\"default\":\"cap Z caron\"},\"mathspeak\":{\"default\":\"modifying above upper Z with caron\",\"brief\":\"mod above upper Z with caron\",\"sbrief\":\"mod above upper Z with caron\"}}},{\"category\":\"Lu\",\"key\":\"01CD\",\"mappings\":{\"default\":{\"default\":\"cap A caron\"},\"mathspeak\":{\"default\":\"modifying above upper A with caron\",\"brief\":\"mod above upper A with caron\",\"sbrief\":\"mod above upper A with caron\"}}},{\"category\":\"Lu\",\"key\":\"01CF\",\"mappings\":{\"default\":{\"default\":\"cap I caron\"},\"mathspeak\":{\"default\":\"modifying above upper I with caron\",\"brief\":\"mod above upper I with caron\",\"sbrief\":\"mod above upper I with caron\"}}},{\"category\":\"Lu\",\"key\":\"01D1\",\"mappings\":{\"default\":{\"default\":\"cap O caron\"},\"mathspeak\":{\"default\":\"modifying above upper O with caron\",\"brief\":\"mod above upper O with caron\",\"sbrief\":\"mod above upper O with caron\"}}},{\"category\":\"Lu\",\"key\":\"01D3\",\"mappings\":{\"default\":{\"default\":\"cap U caron\"},\"mathspeak\":{\"default\":\"modifying above upper U with caron\",\"brief\":\"mod above upper U with caron\",\"sbrief\":\"mod above upper U with caron\"}}},{\"category\":\"Lu\",\"key\":\"01E6\",\"mappings\":{\"default\":{\"default\":\"cap G caron\"},\"mathspeak\":{\"default\":\"modifying above upper G with caron\",\"brief\":\"mod above upper G with caron\",\"sbrief\":\"mod above upper G with caron\"}}},{\"category\":\"Lu\",\"key\":\"01E8\",\"mappings\":{\"default\":{\"default\":\"cap K caron\"},\"mathspeak\":{\"default\":\"modifying above upper K with caron\",\"brief\":\"mod above upper K with caron\",\"sbrief\":\"mod above upper K with caron\"}}},{\"category\":\"Lu\",\"key\":\"01EA\",\"mappings\":{\"default\":{\"default\":\"cap O ogonek\"},\"mathspeak\":{\"default\":\"modifying above upper O with ogonek\",\"brief\":\"mod above upper O with ogonek\",\"sbrief\":\"mod above upper O with ogonek\"}}},{\"category\":\"Lu\",\"key\":\"01F4\",\"mappings\":{\"default\":{\"default\":\"cap G acute\"},\"mathspeak\":{\"default\":\"modifying above upper G with acute\",\"brief\":\"mod above upper G with acute\",\"sbrief\":\"mod above upper G with acute\"}}},{\"category\":\"Lu\",\"key\":\"01F8\",\"mappings\":{\"default\":{\"default\":\"cap N grave\"},\"mathspeak\":{\"default\":\"modifying above upper N with grave\",\"brief\":\"mod above upper N with grave\",\"sbrief\":\"mod above upper N with grave\"}}},{\"category\":\"Lu\",\"key\":\"0200\",\"mappings\":{\"default\":{\"default\":\"cap A double grave\"},\"mathspeak\":{\"default\":\"modifying above upper A with double grave\",\"brief\":\"mod above upper A with double grave\",\"sbrief\":\"mod above upper A with double grave\"}}},{\"category\":\"Lu\",\"key\":\"0202\",\"mappings\":{\"default\":{\"default\":\"cap A inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper A with inverted breve\",\"brief\":\"mod above upper A with inverted breve\",\"sbrief\":\"mod above upper A with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"0204\",\"mappings\":{\"default\":{\"default\":\"cap E double grave\"},\"mathspeak\":{\"default\":\"modifying above upper E with double grave\",\"brief\":\"mod above upper E with double grave\",\"sbrief\":\"mod above upper E with double grave\"}}},{\"category\":\"Lu\",\"key\":\"0206\",\"mappings\":{\"default\":{\"default\":\"cap E inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper E with inverted breve\",\"brief\":\"mod above upper E with inverted breve\",\"sbrief\":\"mod above upper E with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"0208\",\"mappings\":{\"default\":{\"default\":\"cap I double grave\"},\"mathspeak\":{\"default\":\"modifying above upper I with double grave\",\"brief\":\"mod above upper I with double grave\",\"sbrief\":\"mod above upper I with double grave\"}}},{\"category\":\"Lu\",\"key\":\"020A\",\"mappings\":{\"default\":{\"default\":\"cap I inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper I with inverted breve\",\"brief\":\"mod above upper I with inverted breve\",\"sbrief\":\"mod above upper I with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"020C\",\"mappings\":{\"default\":{\"default\":\"cap O double grave\"},\"mathspeak\":{\"default\":\"modifying above upper O with double grave\",\"brief\":\"mod above upper O with double grave\",\"sbrief\":\"mod above upper O with double grave\"}}},{\"category\":\"Lu\",\"key\":\"020E\",\"mappings\":{\"default\":{\"default\":\"cap O inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper O with inverted breve\",\"brief\":\"mod above upper O with inverted breve\",\"sbrief\":\"mod above upper O with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"0210\",\"mappings\":{\"default\":{\"default\":\"cap R double grave\"},\"mathspeak\":{\"default\":\"modifying above upper R with double grave\",\"brief\":\"mod above upper R with double grave\",\"sbrief\":\"mod above upper R with double grave\"}}},{\"category\":\"Lu\",\"key\":\"0212\",\"mappings\":{\"default\":{\"default\":\"cap R inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper R with inverted breve\",\"brief\":\"mod above upper R with inverted breve\",\"sbrief\":\"mod above upper R with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"0214\",\"mappings\":{\"default\":{\"default\":\"cap U double grave\"},\"mathspeak\":{\"default\":\"modifying above upper U with double grave\",\"brief\":\"mod above upper U with double grave\",\"sbrief\":\"mod above upper U with double grave\"}}},{\"category\":\"Lu\",\"key\":\"0216\",\"mappings\":{\"default\":{\"default\":\"cap U inverted breve\"},\"mathspeak\":{\"default\":\"modifying above upper U with inverted breve\",\"brief\":\"mod above upper U with inverted breve\",\"sbrief\":\"mod above upper U with inverted breve\"}}},{\"category\":\"Lu\",\"key\":\"0218\",\"mappings\":{\"default\":{\"default\":\"cap S comma below\"},\"mathspeak\":{\"default\":\"modifying below upper S with comma below\",\"brief\":\"mod below upper S with comma below\",\"sbrief\":\"mod below upper S with comma below\"}}},{\"category\":\"Lu\",\"key\":\"021A\",\"mappings\":{\"default\":{\"default\":\"cap T comma below\"},\"mathspeak\":{\"default\":\"modifying below upper T with comma below\",\"brief\":\"mod below upper T with comma below\",\"sbrief\":\"mod below upper T with comma below\"}}},{\"category\":\"Lu\",\"key\":\"021E\",\"mappings\":{\"default\":{\"default\":\"cap H caron\"},\"mathspeak\":{\"default\":\"modifying above upper H with caron\",\"brief\":\"mod above upper H with caron\",\"sbrief\":\"mod above upper H with caron\"}}},{\"category\":\"Lu\",\"key\":\"0226\",\"mappings\":{\"default\":{\"default\":\"cap A overdot\"},\"mathspeak\":{\"default\":\"modifying above upper A with dot\",\"brief\":\"mod above upper A with dot\",\"sbrief\":\"mod above upper A with dot\"}}},{\"category\":\"Lu\",\"key\":\"0228\",\"mappings\":{\"default\":{\"default\":\"cap E cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper E with cedilla\",\"brief\":\"mod above upper E with cedilla\",\"sbrief\":\"mod above upper E with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"022E\",\"mappings\":{\"default\":{\"default\":\"cap O overdot\"},\"mathspeak\":{\"default\":\"modifying above upper O with dot\",\"brief\":\"mod above upper O with dot\",\"sbrief\":\"mod above upper O with dot\"}}},{\"category\":\"Lu\",\"key\":\"0232\",\"mappings\":{\"default\":{\"default\":\"cap Y overbar\"},\"mathspeak\":{\"default\":\"upper Y overbar\",\"brief\":\"upper Y overbar\",\"sbrief\":\"upper Y overbar\"}}},{\"category\":\"Lu\",\"key\":\"1E00\",\"mappings\":{\"default\":{\"default\":\"cap A ring below\"},\"mathspeak\":{\"default\":\"modifying below upper A with ring below\",\"brief\":\"mod below upper A with ring below\",\"sbrief\":\"mod below upper A with ring below\"}}},{\"category\":\"Lu\",\"key\":\"1E02\",\"mappings\":{\"default\":{\"default\":\"cap B overdot\"},\"mathspeak\":{\"default\":\"modifying above upper B with dot\",\"brief\":\"mod above upper B with dot\",\"sbrief\":\"mod above upper B with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E04\",\"mappings\":{\"default\":{\"default\":\"cap B underdot\"},\"mathspeak\":{\"default\":\"modifying below upper B with dot\",\"brief\":\"mod below upper B with dot\",\"sbrief\":\"mod below upper B with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E06\",\"mappings\":{\"default\":{\"default\":\"cap B underbar\"},\"mathspeak\":{\"default\":\"upper B underbar\",\"brief\":\"upper B underbar\",\"sbrief\":\"upper B underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E0A\",\"mappings\":{\"default\":{\"default\":\"cap D overdot\"},\"mathspeak\":{\"default\":\"modifying above upper D with dot\",\"brief\":\"mod above upper D with dot\",\"sbrief\":\"mod above upper D with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E0C\",\"mappings\":{\"default\":{\"default\":\"cap D underdot\"},\"mathspeak\":{\"default\":\"modifying below upper D with dot\",\"brief\":\"mod below upper D with dot\",\"sbrief\":\"mod below upper D with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E0E\",\"mappings\":{\"default\":{\"default\":\"cap D underbar\"},\"mathspeak\":{\"default\":\"upper D underbar\",\"brief\":\"upper D underbar\",\"sbrief\":\"upper D underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E10\",\"mappings\":{\"default\":{\"default\":\"cap D cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper D with cedilla\",\"brief\":\"mod above upper D with cedilla\",\"sbrief\":\"mod above upper D with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"1E12\",\"mappings\":{\"default\":{\"default\":\"cap D underhat\"},\"mathspeak\":{\"default\":\"modifying below upper D with caret\",\"brief\":\"mod below upper D with caret\",\"sbrief\":\"mod below upper D with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E18\",\"mappings\":{\"default\":{\"default\":\"cap E underhat\"},\"mathspeak\":{\"default\":\"modifying below upper E with caret\",\"brief\":\"mod below upper E with caret\",\"sbrief\":\"mod below upper E with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E1A\",\"mappings\":{\"default\":{\"default\":\"cap E tilde below\"},\"mathspeak\":{\"default\":\"upper E undertilde\",\"brief\":\"upper E undertilde\",\"sbrief\":\"upper E undertilde\"}}},{\"category\":\"Lu\",\"key\":\"1E1E\",\"mappings\":{\"default\":{\"default\":\"cap F overdot\"},\"mathspeak\":{\"default\":\"modifying above upper F with dot\",\"brief\":\"mod above upper F with dot\",\"sbrief\":\"mod above upper F with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E20\",\"mappings\":{\"default\":{\"default\":\"cap G overbar\"},\"mathspeak\":{\"default\":\"upper G overbar\",\"brief\":\"upper G overbar\",\"sbrief\":\"upper G overbar\"}}},{\"category\":\"Lu\",\"key\":\"1E22\",\"mappings\":{\"default\":{\"default\":\"cap H overdot\"},\"mathspeak\":{\"default\":\"modifying above upper H with dot\",\"brief\":\"mod above upper H with dot\",\"sbrief\":\"mod above upper H with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E24\",\"mappings\":{\"default\":{\"default\":\"cap H underdot\"},\"mathspeak\":{\"default\":\"modifying below upper H with dot\",\"brief\":\"mod below upper H with dot\",\"sbrief\":\"mod below upper H with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E26\",\"mappings\":{\"default\":{\"default\":\"cap H double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper H with double dot\",\"brief\":\"mod above upper H with double dot\",\"sbrief\":\"mod above upper H with double dot\"}}},{\"category\":\"Lu\",\"key\":\"1E28\",\"mappings\":{\"default\":{\"default\":\"cap H cedilla\"},\"mathspeak\":{\"default\":\"modifying above upper H with cedilla\",\"brief\":\"mod above upper H with cedilla\",\"sbrief\":\"mod above upper H with cedilla\"}}},{\"category\":\"Lu\",\"key\":\"1E2A\",\"mappings\":{\"default\":{\"default\":\"cap H breve below\"},\"mathspeak\":{\"default\":\"modifying below upper H with breve below\",\"brief\":\"mod below upper H with breve below\",\"sbrief\":\"mod below upper H with breve below\"}}},{\"category\":\"Lu\",\"key\":\"1E2C\",\"mappings\":{\"default\":{\"default\":\"cap I tilde below\"},\"mathspeak\":{\"default\":\"upper I undertilde\",\"brief\":\"upper I undertilde\",\"sbrief\":\"upper I undertilde\"}}},{\"category\":\"Lu\",\"key\":\"1E30\",\"mappings\":{\"default\":{\"default\":\"cap K acute\"},\"mathspeak\":{\"default\":\"modifying above upper K with acute\",\"brief\":\"mod above upper K with acute\",\"sbrief\":\"mod above upper K with acute\"}}},{\"category\":\"Lu\",\"key\":\"1E32\",\"mappings\":{\"default\":{\"default\":\"cap K underdot\"},\"mathspeak\":{\"default\":\"modifying below upper K with dot\",\"brief\":\"mod below upper K with dot\",\"sbrief\":\"mod below upper K with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E34\",\"mappings\":{\"default\":{\"default\":\"cap K underbar\"},\"mathspeak\":{\"default\":\"upper K underbar\",\"brief\":\"upper K underbar\",\"sbrief\":\"upper K underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E36\",\"mappings\":{\"default\":{\"default\":\"cap L underdot\"},\"mathspeak\":{\"default\":\"modifying below upper L with dot\",\"brief\":\"mod below upper L with dot\",\"sbrief\":\"mod below upper L with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E3A\",\"mappings\":{\"default\":{\"default\":\"cap L underbar\"},\"mathspeak\":{\"default\":\"upper L underbar\",\"brief\":\"upper L underbar\",\"sbrief\":\"upper L underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E3C\",\"mappings\":{\"default\":{\"default\":\"cap L underhat\"},\"mathspeak\":{\"default\":\"modifying below upper L with caret\",\"brief\":\"mod below upper L with caret\",\"sbrief\":\"mod below upper L with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E3E\",\"mappings\":{\"default\":{\"default\":\"cap M acute\"},\"mathspeak\":{\"default\":\"modifying above upper M with acute\",\"brief\":\"mod above upper M with acute\",\"sbrief\":\"mod above upper M with acute\"}}},{\"category\":\"Lu\",\"key\":\"1E40\",\"mappings\":{\"default\":{\"default\":\"cap M overdot\"},\"mathspeak\":{\"default\":\"modifying above upper M with dot\",\"brief\":\"mod above upper M with dot\",\"sbrief\":\"mod above upper M with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E42\",\"mappings\":{\"default\":{\"default\":\"cap M underdot\"},\"mathspeak\":{\"default\":\"modifying below upper M with dot\",\"brief\":\"mod below upper M with dot\",\"sbrief\":\"mod below upper M with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E44\",\"mappings\":{\"default\":{\"default\":\"cap N overdot\"},\"mathspeak\":{\"default\":\"modifying above upper N with dot\",\"brief\":\"mod above upper N with dot\",\"sbrief\":\"mod above upper N with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E46\",\"mappings\":{\"default\":{\"default\":\"cap N underdot\"},\"mathspeak\":{\"default\":\"modifying below upper N with dot\",\"brief\":\"mod below upper N with dot\",\"sbrief\":\"mod below upper N with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E48\",\"mappings\":{\"default\":{\"default\":\"cap N underbar\"},\"mathspeak\":{\"default\":\"upper N underbar\",\"brief\":\"upper N underbar\",\"sbrief\":\"upper N underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E4A\",\"mappings\":{\"default\":{\"default\":\"cap N underhat\"},\"mathspeak\":{\"default\":\"modifying below upper N with caret\",\"brief\":\"mod below upper N with caret\",\"sbrief\":\"mod below upper N with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E54\",\"mappings\":{\"default\":{\"default\":\"cap P acute\"},\"mathspeak\":{\"default\":\"modifying above upper P with acute\",\"brief\":\"mod above upper P with acute\",\"sbrief\":\"mod above upper P with acute\"}}},{\"category\":\"Lu\",\"key\":\"1E56\",\"mappings\":{\"default\":{\"default\":\"cap P overdot\"},\"mathspeak\":{\"default\":\"modifying above upper P with dot\",\"brief\":\"mod above upper P with dot\",\"sbrief\":\"mod above upper P with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E58\",\"mappings\":{\"default\":{\"default\":\"cap R overdot\"},\"mathspeak\":{\"default\":\"modifying above upper R with dot\",\"brief\":\"mod above upper R with dot\",\"sbrief\":\"mod above upper R with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E5A\",\"mappings\":{\"default\":{\"default\":\"cap R underdot\"},\"mathspeak\":{\"default\":\"modifying below upper R with dot\",\"brief\":\"mod below upper R with dot\",\"sbrief\":\"mod below upper R with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E5E\",\"mappings\":{\"default\":{\"default\":\"cap R underbar\"},\"mathspeak\":{\"default\":\"upper R underbar\",\"brief\":\"upper R underbar\",\"sbrief\":\"upper R underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E60\",\"mappings\":{\"default\":{\"default\":\"cap S overdot\"},\"mathspeak\":{\"default\":\"modifying above upper S with dot\",\"brief\":\"mod above upper S with dot\",\"sbrief\":\"mod above upper S with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E62\",\"mappings\":{\"default\":{\"default\":\"cap S underdot\"},\"mathspeak\":{\"default\":\"modifying below upper S with dot\",\"brief\":\"mod below upper S with dot\",\"sbrief\":\"mod below upper S with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E6A\",\"mappings\":{\"default\":{\"default\":\"cap T overdot\"},\"mathspeak\":{\"default\":\"modifying above upper T with dot\",\"brief\":\"mod above upper T with dot\",\"sbrief\":\"mod above upper T with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E6C\",\"mappings\":{\"default\":{\"default\":\"cap T underdot\"},\"mathspeak\":{\"default\":\"modifying below upper T with dot\",\"brief\":\"mod below upper T with dot\",\"sbrief\":\"mod below upper T with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E6E\",\"mappings\":{\"default\":{\"default\":\"cap T underbar\"},\"mathspeak\":{\"default\":\"upper T underbar\",\"brief\":\"upper T underbar\",\"sbrief\":\"upper T underbar\"}}},{\"category\":\"Lu\",\"key\":\"1E70\",\"mappings\":{\"default\":{\"default\":\"cap T underhat\"},\"mathspeak\":{\"default\":\"modifying below upper T with caret\",\"brief\":\"mod below upper T with caret\",\"sbrief\":\"mod below upper T with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E72\",\"mappings\":{\"default\":{\"default\":\"cap U double underdot\"},\"mathspeak\":{\"default\":\"modifying below upper U with double dot\",\"brief\":\"mod below upper U with double dot\",\"sbrief\":\"mod below upper U with double dot\"}}},{\"category\":\"Lu\",\"key\":\"1E74\",\"mappings\":{\"default\":{\"default\":\"cap U tilde below\"},\"mathspeak\":{\"default\":\"upper U undertilde\",\"brief\":\"upper U undertilde\",\"sbrief\":\"upper U undertilde\"}}},{\"category\":\"Lu\",\"key\":\"1E76\",\"mappings\":{\"default\":{\"default\":\"cap U underhat\"},\"mathspeak\":{\"default\":\"modifying below upper U with caret\",\"brief\":\"mod below upper U with caret\",\"sbrief\":\"mod below upper U with caret\"}}},{\"category\":\"Lu\",\"key\":\"1E7C\",\"mappings\":{\"default\":{\"default\":\"cap V tilde\"},\"mathspeak\":{\"default\":\"upper V overtilde\",\"brief\":\"upper V overtilde\",\"sbrief\":\"upper V overtilde\"}}},{\"category\":\"Lu\",\"key\":\"1E7E\",\"mappings\":{\"default\":{\"default\":\"cap V underdot\"},\"mathspeak\":{\"default\":\"modifying below upper V with dot\",\"brief\":\"mod below upper V with dot\",\"sbrief\":\"mod below upper V with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E80\",\"mappings\":{\"default\":{\"default\":\"cap W grave\"},\"mathspeak\":{\"default\":\"modifying above upper W with grave\",\"brief\":\"mod above upper W with grave\",\"sbrief\":\"mod above upper W with grave\"}}},{\"category\":\"Lu\",\"key\":\"1E82\",\"mappings\":{\"default\":{\"default\":\"cap W acute\"},\"mathspeak\":{\"default\":\"modifying above upper W with acute\",\"brief\":\"mod above upper W with acute\",\"sbrief\":\"mod above upper W with acute\"}}},{\"category\":\"Lu\",\"key\":\"1E84\",\"mappings\":{\"default\":{\"default\":\"cap W double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper W with double dot\",\"brief\":\"mod above upper W with double dot\",\"sbrief\":\"mod above upper W with double dot\"}}},{\"category\":\"Lu\",\"key\":\"1E86\",\"mappings\":{\"default\":{\"default\":\"cap W overdot\"},\"mathspeak\":{\"default\":\"modifying above upper W with dot\",\"brief\":\"mod above upper W with dot\",\"sbrief\":\"mod above upper W with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E88\",\"mappings\":{\"default\":{\"default\":\"cap W underdot\"},\"mathspeak\":{\"default\":\"modifying below upper W with dot\",\"brief\":\"mod below upper W with dot\",\"sbrief\":\"mod below upper W with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E8A\",\"mappings\":{\"default\":{\"default\":\"cap X overdot\"},\"mathspeak\":{\"default\":\"modifying above upper X with dot\",\"brief\":\"mod above upper X with dot\",\"sbrief\":\"mod above upper X with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E8C\",\"mappings\":{\"default\":{\"default\":\"cap X double overdot\"},\"mathspeak\":{\"default\":\"modifying above upper X with double dot\",\"brief\":\"mod above upper X with double dot\",\"sbrief\":\"mod above upper X with double dot\"}}},{\"category\":\"Lu\",\"key\":\"1E8E\",\"mappings\":{\"default\":{\"default\":\"cap Y overdot\"},\"mathspeak\":{\"default\":\"modifying above upper Y with dot\",\"brief\":\"mod above upper Y with dot\",\"sbrief\":\"mod above upper Y with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E90\",\"mappings\":{\"default\":{\"default\":\"cap Z circumflex\"},\"mathspeak\":{\"default\":\"modifying above upper Z with circumflex\",\"brief\":\"mod above upper Z with circumflex\",\"sbrief\":\"mod above upper Z with circumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E92\",\"mappings\":{\"default\":{\"default\":\"cap Z underdot\"},\"mathspeak\":{\"default\":\"modifying below upper Z with dot\",\"brief\":\"mod below upper Z with dot\",\"sbrief\":\"mod below upper Z with dot\"}}},{\"category\":\"Lu\",\"key\":\"1E94\",\"mappings\":{\"default\":{\"default\":\"cap Z underbar\"},\"mathspeak\":{\"default\":\"upper Z underbar\",\"brief\":\"upper Z underbar\",\"sbrief\":\"upper Z underbar\"}}},{\"category\":\"Lu\",\"key\":\"1EA0\",\"mappings\":{\"default\":{\"default\":\"cap A underdot\"},\"mathspeak\":{\"default\":\"modifying below upper A with dot\",\"brief\":\"mod below upper A with dot\",\"sbrief\":\"mod below upper A with dot\"}}},{\"category\":\"Lu\",\"key\":\"1EA2\",\"mappings\":{\"default\":{\"default\":\"cap A hook\"},\"mathspeak\":{\"default\":\"modifying above upper A with hook\",\"brief\":\"mod above upper A with hook\",\"sbrief\":\"mod above upper A with hook\"}}},{\"category\":\"Lu\",\"key\":\"1EB8\",\"mappings\":{\"default\":{\"default\":\"cap E underdot\"},\"mathspeak\":{\"default\":\"modifying below upper E with dot\",\"brief\":\"mod below upper E with dot\",\"sbrief\":\"mod below upper E with dot\"}}},{\"category\":\"Lu\",\"key\":\"1EBA\",\"mappings\":{\"default\":{\"default\":\"cap E hook\"},\"mathspeak\":{\"default\":\"modifying above upper E with hook\",\"brief\":\"mod above upper E with hook\",\"sbrief\":\"mod above upper E with hook\"}}},{\"category\":\"Lu\",\"key\":\"1EBC\",\"mappings\":{\"default\":{\"default\":\"cap E tilde\"},\"mathspeak\":{\"default\":\"upper E overtilde\",\"brief\":\"upper E overtilde\",\"sbrief\":\"upper E overtilde\"}}},{\"category\":\"Lu\",\"key\":\"1EC8\",\"mappings\":{\"default\":{\"default\":\"cap I hook\"},\"mathspeak\":{\"default\":\"modifying above upper I with hook\",\"brief\":\"mod above upper I with hook\",\"sbrief\":\"mod above upper I with hook\"}}},{\"category\":\"Lu\",\"key\":\"1ECA\",\"mappings\":{\"default\":{\"default\":\"cap I underdot\"},\"mathspeak\":{\"default\":\"modifying below upper I with dot\",\"brief\":\"mod below upper I with dot\",\"sbrief\":\"mod below upper I with dot\"}}},{\"category\":\"Lu\",\"key\":\"1ECC\",\"mappings\":{\"default\":{\"default\":\"cap O underdot\"},\"mathspeak\":{\"default\":\"modifying below upper O with dot\",\"brief\":\"mod below upper O with dot\",\"sbrief\":\"mod below upper O with dot\"}}},{\"category\":\"Lu\",\"key\":\"1ECE\",\"mappings\":{\"default\":{\"default\":\"cap O hook\"},\"mathspeak\":{\"default\":\"modifying above upper O with hook\",\"brief\":\"mod above upper O with hook\",\"sbrief\":\"mod above upper O with hook\"}}},{\"category\":\"Lu\",\"key\":\"1EE4\",\"mappings\":{\"default\":{\"default\":\"cap U underdot\"},\"mathspeak\":{\"default\":\"modifying below upper U with dot\",\"brief\":\"mod below upper U with dot\",\"sbrief\":\"mod below upper U with dot\"}}},{\"category\":\"Lu\",\"key\":\"1EE6\",\"mappings\":{\"default\":{\"default\":\"cap U hook\"},\"mathspeak\":{\"default\":\"modifying above upper U with hook\",\"brief\":\"mod above upper U with hook\",\"sbrief\":\"mod above upper U with hook\"}}},{\"category\":\"Lu\",\"key\":\"1EF2\",\"mappings\":{\"default\":{\"default\":\"cap Y grave\"},\"mathspeak\":{\"default\":\"modifying above upper Y with grave\",\"brief\":\"mod above upper Y with grave\",\"sbrief\":\"mod above upper Y with grave\"}}},{\"category\":\"Lu\",\"key\":\"1EF4\",\"mappings\":{\"default\":{\"default\":\"cap Y underdot\"},\"mathspeak\":{\"default\":\"modifying below upper Y with dot\",\"brief\":\"mod below upper Y with dot\",\"sbrief\":\"mod below upper Y with dot\"}}},{\"category\":\"Lu\",\"key\":\"1EF6\",\"mappings\":{\"default\":{\"default\":\"cap Y hook\"},\"mathspeak\":{\"default\":\"modifying above upper Y with hook\",\"brief\":\"mod above upper Y with hook\",\"sbrief\":\"mod above upper Y with hook\"}}},{\"category\":\"Lu\",\"key\":\"1EF8\",\"mappings\":{\"default\":{\"default\":\"cap Y tilde\"},\"mathspeak\":{\"default\":\"upper Y overtilde\",\"brief\":\"upper Y overtilde\",\"sbrief\":\"upper Y overtilde\"}}}]\n,\n\"en/symbols/math_angles.js\": \n[{\"locale\":\"en\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right angle with arc\"}},\"key\":\"22BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right angle with downwards zigzag arrow\"}},\"key\":\"237C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"three dimensional angle\"}},\"key\":\"27C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle opening left\"}},\"key\":\"299B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right angle variant with square\"}},\"key\":\"299C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured right angle with dot\"}},\"key\":\"299D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"angle with s inside\"}},\"key\":\"299E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"acute angle\"}},\"key\":\"299F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"spherical angle opening left\"}},\"key\":\"29A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"spherical angle opening up\"}},\"key\":\"29A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"turned angle\"}},\"key\":\"29A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed angle\"}},\"key\":\"29A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"angle with underbar\"}},\"key\":\"29A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed angle with underbar\"}},\"key\":\"29A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"oblique angle opening up\"}},\"key\":\"29A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"oblique angle opening down\"}},\"key\":\"29A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing up and right\"}},\"key\":\"29A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing up and left\"}},\"key\":\"29A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing down and right\"}},\"key\":\"29AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing down and left\"}},\"key\":\"29AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing right and up\"}},\"key\":\"29AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing left and up\"}},\"key\":\"29AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing right and down\"}},\"key\":\"29AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing left and down\"}},\"key\":\"29AF\"}]\n,\n\"en/symbols/math_arrows.js\": \n[{\"locale\":\"en\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow\"},\"mathspeak\":{\"sbrief\":\"L arrow\"}},\"key\":\"2190\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up arrow\"},\"mathspeak\":{\"sbrief\":\"U arrow\"}},\"key\":\"2191\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow\"},\"mathspeak\":{\"sbrief\":\"R arrow\"}},\"key\":\"2192\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down arrow\"},\"mathspeak\":{\"sbrief\":\"D arrow\"}},\"key\":\"2193\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right arrow\"},\"mathspeak\":{\"sbrief\":\"L R arrow\"}},\"key\":\"2194\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up down arrow\"},\"mathspeak\":{\"sbrief\":\"U D arrow\"}},\"key\":\"2195\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up left arrow\"},\"mathspeak\":{\"sbrief\":\"U L arrow\"}},\"key\":\"2196\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up right arrow\"},\"mathspeak\":{\"sbrief\":\"U R arrow\"}},\"key\":\"2197\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down right arrow\"},\"mathspeak\":{\"sbrief\":\"D R arrow\"}},\"key\":\"2198\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down left arrow\"},\"mathspeak\":{\"sbrief\":\"D L arrow\"}},\"key\":\"2199\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"L arrow with stroke\"}},\"key\":\"219A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"R arrow with stroke\"}},\"key\":\"219B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left wave arrow\"},\"mathspeak\":{\"sbrief\":\"L wave arrow\"}},\"key\":\"219C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right wave arrow\"},\"mathspeak\":{\"sbrief\":\"R wave arrow\"}},\"key\":\"219D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"two headed left arrow\"},\"mathspeak\":{\"sbrief\":\"two headed L arrow\"}},\"key\":\"219E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"two headed up arrow\"},\"mathspeak\":{\"sbrief\":\"two headed U arrow\"}},\"key\":\"219F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two headed right arrow\"},\"mathspeak\":{\"sbrief\":\"two headed R arrow\"}},\"key\":\"21A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"two headed down arrow\"},\"mathspeak\":{\"sbrief\":\"two headed D arrow\"}},\"key\":\"21A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow with tail\"},\"mathspeak\":{\"sbrief\":\"L arrow with tail\"}},\"key\":\"21A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with tail\"},\"mathspeak\":{\"sbrief\":\"R arrow with tail\"}},\"key\":\"21A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow from bar\"},\"mathspeak\":{\"sbrief\":\"L arrow from bar\"}},\"key\":\"21A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrow from bar\"},\"mathspeak\":{\"sbrief\":\"U arrow from bar\"}},\"key\":\"21A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow from bar\"},\"mathspeak\":{\"sbrief\":\"R arrow from bar\"}},\"key\":\"21A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrow from bar\"},\"mathspeak\":{\"sbrief\":\"D arrow from bar\"}},\"key\":\"21A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up down arrow with base\"},\"mathspeak\":{\"sbrief\":\"U D arrow with base\"}},\"key\":\"21A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow with hook\"},\"mathspeak\":{\"sbrief\":\"L arrow with hook\"}},\"key\":\"21A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow with hook\"},\"mathspeak\":{\"sbrief\":\"R arrow with hook\"}},\"key\":\"21AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow with loop\"},\"mathspeak\":{\"sbrief\":\"L arrow with loop\"}},\"key\":\"21AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow with loop\"},\"mathspeak\":{\"sbrief\":\"R arrow with loop\"}},\"key\":\"21AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left right wave arrow\"},\"mathspeak\":{\"sbrief\":\"L R wave arrow\"}},\"key\":\"21AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"L R arrow with stroke\"}},\"key\":\"21AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down zigzag arrow\"},\"mathspeak\":{\"sbrief\":\"d zigzag arrow\"}},\"key\":\"21AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrow with tip left\"},\"mathspeak\":{\"sbrief\":\"U arrow with tip left\"}},\"key\":\"21B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrow with tip right\"},\"mathspeak\":{\"sbrief\":\"U arrow with tip right\"}},\"key\":\"21B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrow with tip left\"},\"mathspeak\":{\"sbrief\":\"D arrow with tip left\"}},\"key\":\"21B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrow with tip right\"},\"mathspeak\":{\"sbrief\":\"D arrow with tip right\"}},\"key\":\"21B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow with corner down\"},\"mathspeak\":{\"sbrief\":\"R arrow with corner down\"}},\"key\":\"21B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrow with corner left\"},\"mathspeak\":{\"sbrief\":\"D arrow with corner left\"}},\"key\":\"21B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"anticlockwise top semicircle arrow\"}},\"key\":\"21B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"clockwise top semicircle arrow\"}},\"key\":\"21B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up left arrow to long bar\"},\"mathspeak\":{\"sbrief\":\"U L arrow to long bar\"}},\"key\":\"21B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow to bar over right arrow to bar\"},\"mathspeak\":{\"sbrief\":\"L arrow to bar over R arrow to bar\"}},\"key\":\"21B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"anticlockwise open circle arrow\"}},\"key\":\"21BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"clockwise open circle arrow\"}},\"key\":\"21BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow over left arrow\"},\"mathspeak\":{\"sbrief\":\"R arrow over L arrow\"}},\"key\":\"21C4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrow left of down arrow\"},\"mathspeak\":{\"sbrief\":\"U arrow L of D arrow\"}},\"key\":\"21C5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow over right arrow\"},\"mathspeak\":{\"sbrief\":\"L arrow over R arrow\"}},\"key\":\"21C6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left paired arrows\"},\"mathspeak\":{\"sbrief\":\"L paired arrows\"}},\"key\":\"21C7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up paired arrows\"},\"mathspeak\":{\"sbrief\":\"U paired arrows\"}},\"key\":\"21C8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right paired arrows\"},\"mathspeak\":{\"sbrief\":\"R paired arrows\"}},\"key\":\"21C9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down paired arrows\"},\"mathspeak\":{\"sbrief\":\"D paired arrows\"}},\"key\":\"21CA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left double arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"L double arrow with stroke\"}},\"key\":\"21CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right double arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"L R double arrow with stroke\"}},\"key\":\"21CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right double arrow with stroke\"},\"mathspeak\":{\"sbrief\":\"R double arrow with stroke\"}},\"key\":\"21CF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left double arrow\"},\"mathspeak\":{\"sbrief\":\"L double arrow\"}},\"key\":\"21D0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up double arrow\"},\"mathspeak\":{\"sbrief\":\"U double arrow\"}},\"key\":\"21D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right double arrow\"},\"mathspeak\":{\"sbrief\":\"R double arrow\"}},\"key\":\"21D2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down double arrow\"},\"mathspeak\":{\"sbrief\":\"d double arrow\"}},\"key\":\"21D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right double arrow\"},\"mathspeak\":{\"sbrief\":\"L R double arrow\"}},\"key\":\"21D4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up down double arrow\"},\"mathspeak\":{\"sbrief\":\"U d double arrow\"}},\"key\":\"21D5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up left double arrow\"},\"mathspeak\":{\"sbrief\":\"U L double arrow\"}},\"key\":\"21D6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up right double arrow\"},\"mathspeak\":{\"sbrief\":\"U R double arrow\"}},\"key\":\"21D7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down right double arrow\"},\"mathspeak\":{\"sbrief\":\"d R double arrow\"}},\"key\":\"21D8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down left double arrow\"},\"mathspeak\":{\"sbrief\":\"d L double arrow\"}},\"key\":\"21D9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left triple arrow\"},\"mathspeak\":{\"sbrief\":\"L triple arrow\"}},\"key\":\"21DA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right triple arrow\"},\"mathspeak\":{\"sbrief\":\"r triple arrow\"}},\"key\":\"21DB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left squiggle arrow\"},\"mathspeak\":{\"sbrief\":\"L squiggle arrow\"}},\"key\":\"21DC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right squiggle arrow\"},\"mathspeak\":{\"sbrief\":\"r squiggle arrow\"}},\"key\":\"21DD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrow with double stroke\"},\"mathspeak\":{\"sbrief\":\"U arrow with double stroke\"}},\"key\":\"21DE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrow with double stroke\"},\"mathspeak\":{\"sbrief\":\"D arrow with double stroke\"}},\"key\":\"21DF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left dasheD arrow\"},\"mathspeak\":{\"sbrief\":\"L dasheD arrow\"}},\"key\":\"21E0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up dasheD arrow\"},\"mathspeak\":{\"sbrief\":\"U dasheD arrow\"}},\"key\":\"21E1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right dasheD arrow\"},\"mathspeak\":{\"sbrief\":\"r dasheD arrow\"}},\"key\":\"21E2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down dasheD arrow\"},\"mathspeak\":{\"sbrief\":\"d dasheD arrow\"}},\"key\":\"21E3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow to bar\"},\"mathspeak\":{\"sbrief\":\"L arrow to bar\"}},\"key\":\"21E4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow to bar\"},\"mathspeak\":{\"sbrief\":\"R arrow to bar\"}},\"key\":\"21E5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white left arrow\"},\"mathspeak\":{\"sbrief\":\"white L arrow\"}},\"key\":\"21E6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up arrow\"},\"mathspeak\":{\"sbrief\":\"white U arrow\"}},\"key\":\"21E7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white right arrow\"},\"mathspeak\":{\"sbrief\":\"white R arrow\"}},\"key\":\"21E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white down arrow\"},\"mathspeak\":{\"sbrief\":\"white D arrow\"}},\"key\":\"21E9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up arrow from bar\"},\"mathspeak\":{\"sbrief\":\"white U arrow from bar\"}},\"key\":\"21EA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up arrow on pedestal\"},\"mathspeak\":{\"sbrief\":\"white U arrow on pedestal\"}},\"key\":\"21EB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up arrow on pedestal with horizontal bar\"},\"mathspeak\":{\"sbrief\":\"white U arrow on pedestal with horizontal bar\"}},\"key\":\"21EC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up arrow on pedestal with vertical bar\"},\"mathspeak\":{\"sbrief\":\"white U arrow on pedestal with vertical bar\"}},\"key\":\"21ED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white double up arrow\"},\"mathspeak\":{\"sbrief\":\"white double U arrow\"}},\"key\":\"21EE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white double up arrow on pedestal\"},\"mathspeak\":{\"sbrief\":\"white double U arrow on pedestal\"}},\"key\":\"21EF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white right arrow from wall\"},\"mathspeak\":{\"sbrief\":\"white R arrow from wall\"}},\"key\":\"21F0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"north west arrow to corner\"}},\"key\":\"21F1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"south east arrow to corner\"}},\"key\":\"21F2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up down white arrow\"},\"mathspeak\":{\"sbrief\":\"U d white arrow\"}},\"key\":\"21F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with small circle\"},\"mathspeak\":{\"sbrief\":\"R arrow with small circle\"}},\"key\":\"21F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down arrow left of up arrow\"},\"mathspeak\":{\"sbrief\":\"D arrow l of U arrow\"}},\"key\":\"21F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"three right arrows\"},\"mathspeak\":{\"sbrief\":\"three R arrows\"}},\"key\":\"21F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L arrow with vertical stroke\"}},\"key\":\"21F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"R arrow with vertical stroke\"}},\"key\":\"21F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L R arrow with vertical stroke\"}},\"key\":\"21F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L arrow with double vertical stroke\"}},\"key\":\"21FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"R arrow with double vertical stroke\"}},\"key\":\"21FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right arrow with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L R arrow with double vertical stroke\"}},\"key\":\"21FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left open headed arrow\"},\"mathspeak\":{\"sbrief\":\"l open headed arrow\"}},\"key\":\"21FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right open headed arrow\"},\"mathspeak\":{\"sbrief\":\"r open headed arrow\"}},\"key\":\"21FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right open headed arrow\"},\"mathspeak\":{\"sbrief\":\"L R open headed arrow\"}},\"key\":\"21FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"electric arrow\"}},\"key\":\"2301\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrowhead\"},\"mathspeak\":{\"sbrief\":\"U arrowhead\"}},\"key\":\"2303\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down arrowhead\"},\"mathspeak\":{\"sbrief\":\"D arrowhead\"}},\"key\":\"2304\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up arrowhead between two horizontal bars\",\"alternative\":\"enter key\"},\"mathspeak\":{\"sbrief\":\"U arrowhead between two horizontal bars\"}},\"key\":\"2324\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"broken circle with northwest arrow\"}},\"key\":\"238B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy wide headed right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy wide headed R arrow\"}},\"key\":\"2794\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy down right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy d R arrow\"}},\"key\":\"2798\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy R arrow\"}},\"key\":\"2799\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy up right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy U R arrow\"}},\"key\":\"279A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"drafting point right arrow\"},\"mathspeak\":{\"sbrief\":\"drafting point R arrow\"}},\"key\":\"279B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy round tipped right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy round tipped R arrow\"}},\"key\":\"279C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"triangle headed right arrow\"},\"mathspeak\":{\"sbrief\":\"triangle headed R arrow\"}},\"key\":\"279D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy triangle headed right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy triangle headed R arrow\"}},\"key\":\"279E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"dashed triangle headed right arrow\"},\"mathspeak\":{\"sbrief\":\"dashed triangle headed R arrow\"}},\"key\":\"279F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy dashed triangle headed right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy dashed triangle headed R arrow\"}},\"key\":\"27A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right arrow\"},\"mathspeak\":{\"sbrief\":\"black R arrow\"}},\"key\":\"27A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"three d top lighted right arrowhead\"},\"mathspeak\":{\"sbrief\":\"three d top lighted R arrowhead\"}},\"key\":\"27A2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"three d bottom lighted right arrowhead\"},\"mathspeak\":{\"sbrief\":\"three d bottom lighted R arrowhead\"}},\"key\":\"27A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right arrowhead\"},\"mathspeak\":{\"sbrief\":\"black R arrowhead\"}},\"key\":\"27A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy black curved down and right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy black curved d and R arrow\"}},\"key\":\"27A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy black curved up and right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy black curved U and R arrow\"}},\"key\":\"27A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"squat black right arrow\"},\"mathspeak\":{\"sbrief\":\"squat black R arrow\"}},\"key\":\"27A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy concave pointed black right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy concave pointed black R arrow\"}},\"key\":\"27A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right shaded white right arrow\"},\"mathspeak\":{\"sbrief\":\"right shaded white R arrow\"}},\"key\":\"27A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left shaded white right arrow\"},\"mathspeak\":{\"sbrief\":\"left shaded white R arrow\"}},\"key\":\"27AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"back tilted shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"back tilted shadowed white R arrow\"}},\"key\":\"27AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"front tilted shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"front tilted shadowed white R arrow\"}},\"key\":\"27AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy lower right shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy lower right shadowed white R arrow\"}},\"key\":\"27AD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy upper right shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy upper right shadowed white R arrow\"}},\"key\":\"27AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"notched lower right shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"notched lower right shadowed white R arrow\"}},\"key\":\"27AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"notched upper right shadowed white right arrow\"},\"mathspeak\":{\"sbrief\":\"notched upper right shadowed white R arrow\"}},\"key\":\"27B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circled heavy white right arrow\"},\"mathspeak\":{\"sbrief\":\"circled heavy white R arrow\"}},\"key\":\"27B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white feathered right arrow\"},\"mathspeak\":{\"sbrief\":\"white feathered R arrow\"}},\"key\":\"27B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black feathered down right arrow\"},\"mathspeak\":{\"sbrief\":\"black feathered d R arrow\"}},\"key\":\"27B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black feathered right arrow\"},\"mathspeak\":{\"sbrief\":\"black feathered R arrow\"}},\"key\":\"27B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black feathered up right arrow\"},\"mathspeak\":{\"sbrief\":\"black feathered U R arrow\"}},\"key\":\"27B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy black feathered down right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy black feathered d R arrow\"}},\"key\":\"27B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy black feathered right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy black feathered R arrow\"}},\"key\":\"27B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy black feathered up right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy black feathered U R arrow\"}},\"key\":\"27B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"teardrop barbed right arrow\"},\"mathspeak\":{\"sbrief\":\"teardrop barbed R arrow\"}},\"key\":\"27BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy teardrop shanked right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy teardrop shanked R arrow\"}},\"key\":\"27BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"wedge tailed right arrow\"},\"mathspeak\":{\"sbrief\":\"wedge tailed R arrow\"}},\"key\":\"27BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy wedge tailed right arrow\"},\"mathspeak\":{\"sbrief\":\"heavy wedge tailed R arrow\"}},\"key\":\"27BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"open outlined right arrow\"},\"mathspeak\":{\"sbrief\":\"open outlined R arrow\"}},\"key\":\"27BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up quadruple arrow\"},\"mathspeak\":{\"sbrief\":\"U quadruple arrow\"}},\"key\":\"27F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down quadruple arrow\"},\"mathspeak\":{\"sbrief\":\"d quadrule arrow\"}},\"key\":\"27F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"anticlockwise gapped circle arrow\"}},\"key\":\"27F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"clockwise gapped circle arrow\"}},\"key\":\"27F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with circled plus\"},\"mathspeak\":{\"sbrief\":\"R arrow with circled plus\"}},\"key\":\"27F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left arrow\"},\"mathspeak\":{\"sbrief\":\"long L arrow\"}},\"key\":\"27F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right arrow\"},\"mathspeak\":{\"sbrief\":\"long R arrow\"}},\"key\":\"27F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left right arrow\"},\"mathspeak\":{\"sbrief\":\"long L R arrow\"}},\"key\":\"27F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left double arrow\"},\"mathspeak\":{\"sbrief\":\"long l double arrow\"}},\"key\":\"27F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right double arrow\"},\"mathspeak\":{\"sbrief\":\"long R double arrow\"}},\"key\":\"27F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left right double arrow\"},\"mathspeak\":{\"sbrief\":\"long L R double arrow\"}},\"key\":\"27FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left arrow from bar\"},\"mathspeak\":{\"sbrief\":\"long L arrow from bar\"}},\"key\":\"27FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right arrow from bar\"},\"mathspeak\":{\"sbrief\":\"long R arrow from bar\"}},\"key\":\"27FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left double arrow from bar\"},\"mathspeak\":{\"sbrief\":\"long l double arrow from bar\"}},\"key\":\"27FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right double arrow from bar\"},\"mathspeak\":{\"sbrief\":\"long R double arrow from bar\"}},\"key\":\"27FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right squiggle arrow\"},\"mathspeak\":{\"sbrief\":\"long r squiggle arrow\"}},\"key\":\"27FF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two headed right arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"two headed R arrow with vertical stroke\"}},\"key\":\"2900\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two headed right arrow with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"two headed R arrow with double vertical stroke\"}},\"key\":\"2901\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double left arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"double L arrow with vertical stroke\"}},\"key\":\"2902\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double right arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"double R arrow with vertical stroke\"}},\"key\":\"2903\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double left right arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"double L R arrow with vertical stroke\"}},\"key\":\"2904\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two headed right arrow from bar\"},\"mathspeak\":{\"sbrief\":\"two headed R arrow from bar\"}},\"key\":\"2905\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double left arrow from bar\"},\"mathspeak\":{\"sbrief\":\"double L arrow from bar\"}},\"key\":\"2906\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double right arrow from bar\"},\"mathspeak\":{\"sbrief\":\"double R arrow from bar\"}},\"key\":\"2907\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"arrow down with horizontal stroke\"}},\"key\":\"2908\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up arrow with horizontal stroke\"},\"mathspeak\":{\"sbrief\":\"U arrow with horizontal stroke\"}},\"key\":\"2909\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up triple arrow\"},\"mathspeak\":{\"sbrief\":\"U triple arrow\"}},\"key\":\"290A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down triple arrow\"},\"mathspeak\":{\"sbrief\":\"d triple arrow\"}},\"key\":\"290B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left double dash arrow\"},\"mathspeak\":{\"sbrief\":\"l double dash arrow\"}},\"key\":\"290C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right double dash arrow\"},\"mathspeak\":{\"sbrief\":\"R double dash arrow\"}},\"key\":\"290D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left triple dash arrow\"},\"mathspeak\":{\"sbrief\":\"l triple dash arrow\"}},\"key\":\"290E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right triple dash arrow\"},\"mathspeak\":{\"sbrief\":\"r triple dash arrow\"}},\"key\":\"290F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right two headed triple dash arrow\"},\"mathspeak\":{\"sbrief\":\"r two headed triple dash arrow\"}},\"key\":\"2910\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with dotted stem\"},\"mathspeak\":{\"sbrief\":\"R arrow with dotted stem\"}},\"key\":\"2911\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up arrow to bar\"},\"mathspeak\":{\"sbrief\":\"U arrow to bar\"}},\"key\":\"2912\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down arrow to bar\"},\"mathspeak\":{\"sbrief\":\"D arrow to bar\"}},\"key\":\"2913\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with tail with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"R arrow with tail with vertical stroke\"}},\"key\":\"2914\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with tail with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"R arrow with tail with double vertical stroke\"}},\"key\":\"2915\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right two headed arrow with tail\"},\"mathspeak\":{\"sbrief\":\"r two headed arrow with tail\"}},\"key\":\"2916\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right two headed arrow with tail with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"r two headed arrow with tail with vertical stroke\"}},\"key\":\"2917\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right two headed arrow with tail with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"r two headed arrow with tail with double vertical stroke\"}},\"key\":\"2918\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow tail\"},\"mathspeak\":{\"sbrief\":\"L arrow tail\"}},\"key\":\"2919\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow tail\"},\"mathspeak\":{\"sbrief\":\"R arrow tail\"}},\"key\":\"291A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left double arrow tail\"},\"mathspeak\":{\"sbrief\":\"l double arrow tail\"}},\"key\":\"291B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right double arrow tail\"},\"mathspeak\":{\"sbrief\":\"R double arrow tail\"}},\"key\":\"291C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow to black diamond\"},\"mathspeak\":{\"sbrief\":\"L arrow to black diamond\"}},\"key\":\"291D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow to black diamond\"},\"mathspeak\":{\"sbrief\":\"R arrow to black diamond\"}},\"key\":\"291E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow from bar to black diamond\"},\"mathspeak\":{\"sbrief\":\"L arrow from bar to black diamond\"}},\"key\":\"291F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow from bar to black diamond\"},\"mathspeak\":{\"sbrief\":\"R arrow from bar to black diamond\"}},\"key\":\"2920\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north west and south east arrow\"}},\"key\":\"2921\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north east and south west arrow\"}},\"key\":\"2922\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north west arrow with hook\"}},\"key\":\"2923\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north east arrow with hook\"}},\"key\":\"2924\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"south east arrow with hook\"}},\"key\":\"2925\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"south west arrow with hook\"}},\"key\":\"2926\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north west arrow and north east arrow\"}},\"key\":\"2927\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north east arrow and south east arrow\"}},\"key\":\"2928\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"south east arrow and south west arrow\"}},\"key\":\"2929\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"south west arrow and north west arrow\"}},\"key\":\"292A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"south east arrow crossing north east arrow\"}},\"key\":\"292D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north east arrow crossing south east arrow\"}},\"key\":\"292E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"falling diagonal crossing north east arrow\"}},\"key\":\"292F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"rising diagonal crossing south east arrow\"}},\"key\":\"2930\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north east arrow crossing north west arrow\"}},\"key\":\"2931\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"north west arrow crossing north east arrow\"}},\"key\":\"2932\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"wave arrow pointing directly right\"}},\"key\":\"2933\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"arrow pointing right then curving up\"}},\"key\":\"2934\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"arrow pointing right then curving down\"}},\"key\":\"2935\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"arrow pointing down then curving left\"}},\"key\":\"2936\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"arrow pointing down then curving right\"}},\"key\":\"2937\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right side arc clockwise arrow\"},\"mathspeak\":{\"sbrief\":\"r side arc clockwise arrow\"}},\"key\":\"2938\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left side arc anticlockwise arrow\"},\"mathspeak\":{\"sbrief\":\"l side arc anticlockwise arrow\"}},\"key\":\"2939\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top arc anticlockwise arrow\"}},\"key\":\"293A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bottom arc anticlockwise arrow\"}},\"key\":\"293B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top arc clockwise arrow with minus\"}},\"key\":\"293C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top arc anticlockwise arrow with plus\"}},\"key\":\"293D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down right semicircular clockwise arrow\"},\"mathspeak\":{\"sbrief\":\"d r semicircular clockwise arrow\"}},\"key\":\"293E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down left semicircular anticlockwise arrow\"},\"mathspeak\":{\"sbrief\":\"d l semicircular anticlockwise arrow\"}},\"key\":\"293F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"anticlockwise closed circle arrow\"}},\"key\":\"2940\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"clockwise closed circle arrow\"}},\"key\":\"2941\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow above short left arrow\"},\"mathspeak\":{\"sbrief\":\"R arrow above short L arrow\"}},\"key\":\"2942\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow above short right arrow\"},\"mathspeak\":{\"sbrief\":\"L arrow above short R arrow\"}},\"key\":\"2943\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short right arrow above left arrow\"},\"mathspeak\":{\"sbrief\":\"short R arrow above L arrow\"}},\"key\":\"2944\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow with plus below\"},\"mathspeak\":{\"sbrief\":\"R arrow with plus below\"}},\"key\":\"2945\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with plus below\"},\"mathspeak\":{\"sbrief\":\"L arrow with plus below\"}},\"key\":\"2946\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow through x\"},\"mathspeak\":{\"sbrief\":\"R arrow through x\"}},\"key\":\"2947\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left right arrow through small circle\"},\"mathspeak\":{\"sbrief\":\"L R arrow through small circle\"}},\"key\":\"2948\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up two headed arrow from small circle\"},\"mathspeak\":{\"sbrief\":\"U two headed arrow from small circle\"}},\"key\":\"2949\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right double arrow with rounded head\"},\"mathspeak\":{\"sbrief\":\"R double arrow with rounded head\"}},\"key\":\"2970\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals sign above right arrow\"},\"mathspeak\":{\"sbrief\":\"equals sign above R arrow\"}},\"key\":\"2971\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde operator above right arrow\"},\"mathspeak\":{\"sbrief\":\"tilde operator above R arrow\"}},\"key\":\"2972\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow above tilde operator\"},\"mathspeak\":{\"sbrief\":\"L arrow above tilde operator\"}},\"key\":\"2973\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow above tilde operator\"},\"mathspeak\":{\"sbrief\":\"R arrow above tilde operator\"}},\"key\":\"2974\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow above almost equals\"},\"mathspeak\":{\"sbrief\":\"R arrow above almost equals\"}},\"key\":\"2975\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above left arrow\"},\"mathspeak\":{\"sbrief\":\"less than above L arrow\"}},\"key\":\"2976\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow through less than\"},\"mathspeak\":{\"sbrief\":\"L arrow through less than\"}},\"key\":\"2977\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above right arrow\"},\"mathspeak\":{\"sbrief\":\"greater than above R arrow\"}},\"key\":\"2978\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset above right arrow\"},\"mathspeak\":{\"sbrief\":\"subset above R arrow\"}},\"key\":\"2979\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow through subset\"},\"mathspeak\":{\"sbrief\":\"L arrow through subset\"}},\"key\":\"297A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset above left arrow\"},\"mathspeak\":{\"sbrief\":\"suerset above L arrow\"}},\"key\":\"297B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"empty set with right arrow above\"},\"mathspeak\":{\"sbrief\":\"empty set with R arrow above\"}},\"key\":\"29B3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"empty set with left arrow above\"},\"mathspeak\":{\"sbrief\":\"empty set with L arrow above\"}},\"key\":\"29B4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up arrow through circle\"},\"mathspeak\":{\"sbrief\":\"U arrow through circle\"}},\"key\":\"29BD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black diamond with down arrow\"},\"mathspeak\":{\"sbrief\":\"black diamond with D arrow\"}},\"key\":\"29EA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white circle with down arrow\"},\"mathspeak\":{\"sbrief\":\"white circle with D arrow\"}},\"key\":\"29EC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black circle with down arrow\"},\"mathspeak\":{\"sbrief\":\"black circle with D arrow\"}},\"key\":\"29ED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with left arrow with hook\"},\"mathspeak\":{\"sbrief\":\"integral with L arrow with hook\"}},\"key\":\"2A17\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"north east white arrow\"}},\"key\":\"2B00\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"north west white arrow\"}},\"key\":\"2B01\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"south east white arrow\"}},\"key\":\"2B02\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"south west white arrow\"}},\"key\":\"2B03\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left right white arrow\"},\"mathspeak\":{\"sbrief\":\"L R white arrow\"}},\"key\":\"2B04\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left black arrow\"},\"mathspeak\":{\"sbrief\":\"L black arrow\"}},\"key\":\"2B05\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up black arrow\"},\"mathspeak\":{\"sbrief\":\"U black arrow\"}},\"key\":\"2B06\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down black arrow\"},\"mathspeak\":{\"sbrief\":\"D black arrow\"}},\"key\":\"2B07\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"north east black arrow\"}},\"key\":\"2B08\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"north west black arrow\"}},\"key\":\"2B09\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"south east black arrow\"}},\"key\":\"2B0A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"south west black arrow\"}},\"key\":\"2B0B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left right black arrow\"},\"mathspeak\":{\"sbrief\":\"L R black arrow\"}},\"key\":\"2B0C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up down black arrow\"},\"mathspeak\":{\"sbrief\":\"U D black arrow\"}},\"key\":\"2B0D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow with tip down\"},\"mathspeak\":{\"sbrief\":\"R arrow with tip down\"}},\"key\":\"2B0E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right arrow with tip up\"},\"mathspeak\":{\"sbrief\":\"R arrow with tip up\"}},\"key\":\"2B0F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow with tip down\"},\"mathspeak\":{\"sbrief\":\"L arrow with tip down\"}},\"key\":\"2B10\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left arrow with tip up\"},\"mathspeak\":{\"sbrief\":\"L arrow with tip up\"}},\"key\":\"2B11\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with small circle\"},\"mathspeak\":{\"sbrief\":\"L arrow with small circle\"}},\"key\":\"2B30\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"three left arrows\"},\"mathspeak\":{\"sbrief\":\"three L arrows\"}},\"key\":\"2B31\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with circled plus\"},\"mathspeak\":{\"sbrief\":\"L arrow with circled plus\"}},\"key\":\"2B32\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left squiggle arrow\"},\"mathspeak\":{\"sbrief\":\"long l squiggle arrow\"}},\"key\":\"2B33\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow with vertical stroke\"}},\"key\":\"2B34\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow with double vertical stroke\"}},\"key\":\"2B35\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow from bar\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow from bar\"}},\"key\":\"2B36\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed triple dash arrow\"},\"mathspeak\":{\"sbrief\":\"l two headed triple dash arrow\"}},\"key\":\"2B37\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with dotted stem\"},\"mathspeak\":{\"sbrief\":\"L arrow with dotted stem\"}},\"key\":\"2B38\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with tail with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L arrow with tail with vertical stroke\"}},\"key\":\"2B39\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow with tail with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"L arrow with tail with double vertical stroke\"}},\"key\":\"2B3A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow with tail\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow with tail\"}},\"key\":\"2B3B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow with tail with vertical stroke\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow with tail with vertical stroke\"}},\"key\":\"2B3C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left two headed arrow with tail with double vertical stroke\"},\"mathspeak\":{\"sbrief\":\"l two headed arrow with tail with double vertical stroke\"}},\"key\":\"2B3D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow through x\"},\"mathspeak\":{\"sbrief\":\"L arrow through x\"}},\"key\":\"2B3E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"wave arrow pointing directly left\"}},\"key\":\"2B3F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals sign above left arrow\"},\"mathspeak\":{\"sbrief\":\"equals sign above L arrow\"}},\"key\":\"2B40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reverse tilde operator above left arrow\"},\"mathspeak\":{\"sbrief\":\"reverse tilde operator above L arrow\"}},\"key\":\"2B41\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow above reverse almost equals\"},\"mathspeak\":{\"sbrief\":\"L arrow above reverse almost equals\"}},\"key\":\"2B42\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow through greater than\"},\"mathspeak\":{\"sbrief\":\"R arrow through greater than\"}},\"key\":\"2B43\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow through superset\"},\"mathspeak\":{\"sbrief\":\"R arrow through superset\"}},\"key\":\"2B44\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left quadruple arrow\"},\"mathspeak\":{\"sbrief\":\"l quadrule arrow\"}},\"key\":\"2B45\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right quadruple arrow\"},\"mathspeak\":{\"sbrief\":\"r quadrule arrow\"}},\"key\":\"2B46\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reverse tilde operator above right arrow\"},\"mathspeak\":{\"sbrief\":\"reverse tilde operator above R arrow\"}},\"key\":\"2B47\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow above reverse almost equals\"},\"mathspeak\":{\"sbrief\":\"R arrow above reverse almost equals\"}},\"key\":\"2B48\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde operator above left arrow\"},\"mathspeak\":{\"sbrief\":\"tilde operator above L arrow\"}},\"key\":\"2B49\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow above almost equals\"},\"mathspeak\":{\"sbrief\":\"L arrow above almost equals\"}},\"key\":\"2B4A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left arrow above reverse tilde operator\"},\"mathspeak\":{\"sbrief\":\"L arrow above reverse tilde operator\"}},\"key\":\"2B4B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right arrow above reverse tilde operator\"},\"mathspeak\":{\"sbrief\":\"R arrow above reverse tilde operator\"}},\"key\":\"2B4C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"halfwidth left arrow\"},\"mathspeak\":{\"sbrief\":\"halfwidth L arrow\"}},\"key\":\"FFE9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"halfwidth up arrow\"},\"mathspeak\":{\"sbrief\":\"halfwidth U arrow\"}},\"key\":\"FFEA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"halfwidth right arrow\"},\"mathspeak\":{\"sbrief\":\"halfwidth R arrow\"}},\"key\":\"FFEB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"halfwidth down arrow\"},\"mathspeak\":{\"sbrief\":\"halfwidth D arrow\"}},\"key\":\"FFEC\"}]\n,\n\"en/symbols/math_characters.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"script l\"}},\"key\":\"2113\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"script cap P\"},\"mathspeak\":{\"default\":\"script upper P\"}},\"key\":\"2118\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck pi\"}},\"key\":\"213C\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck gamma\"}},\"key\":\"213D\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"double struck cap Gamma\"},\"mathspeak\":{\"default\":\"double struck upper Gamma\"}},\"key\":\"213E\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"double struck cap Pi\"},\"mathspeak\":{\"default\":\"double struck upper Pi\"}},\"key\":\"213F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double struck sum\"},\"mathspeak\":{\"default\":\"double struck sigma summation\"}},\"key\":\"2140\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"double struck italic cap D\"},\"mathspeak\":{\"default\":\"double struck italic upper D\"}},\"key\":\"2145\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck italic d\"}},\"key\":\"2146\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck italic e\"}},\"key\":\"2147\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck italic i\"}},\"key\":\"2148\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"double struck italic j\"}},\"key\":\"2149\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"italic dotless i\"}},\"key\":\"1D6A4\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"italic dotless j\"}},\"key\":\"1D6A5\"}]\n,\n\"en/symbols/math_delimiters.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left parenthesis\"},\"mathspeak\":{\"brief\":\"left p'ren\",\"sbrief\":\"L p'ren\"},\"clearspeak\":{\"default\":\"open paren\"}},\"key\":\"0028\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right parenthesis\"},\"mathspeak\":{\"brief\":\"right p'ren\",\"sbrief\":\"R p'ren\"},\"clearspeak\":{\"default\":\"close paren\"}},\"key\":\"0029\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left bracket\"},\"mathspeak\":{\"brief\":\"left brack\",\"sbrief\":\"L brack\"},\"clearspeak\":{\"default\":\"open bracket\"}},\"key\":\"005B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right bracket\"},\"mathspeak\":{\"brief\":\"right brack\",\"sbrief\":\"R brack\"},\"clearspeak\":{\"default\":\"close bracket\"}},\"key\":\"005D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left brace\"},\"mathspeak\":{\"sbrief\":\"L brace\"},\"clearspeak\":{\"default\":\"open brace\"}},\"key\":\"007B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right brace\"},\"mathspeak\":{\"sbrief\":\"R brace\"},\"clearspeak\":{\"default\":\"close brace\"}},\"key\":\"007D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left bracket with quill\"},\"mathspeak\":{\"brief\":\"left brack with quill\",\"sbrief\":\"L brack with quill\"}},\"key\":\"2045\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right bracket with quill\"},\"mathspeak\":{\"brief\":\"right brack with quill\",\"sbrief\":\"R brack with quill\"}},\"key\":\"2046\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left ceiling\"}},\"key\":\"2308\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right ceiling\"}},\"key\":\"2309\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left floor\"}},\"key\":\"230A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right floor\"}},\"key\":\"230B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom right crop\"}},\"key\":\"230C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom left crop\"}},\"key\":\"230D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"top right crop\"}},\"key\":\"230E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"top left crop\"}},\"key\":\"230F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"top left corner\"}},\"key\":\"231C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"top right corner\"}},\"key\":\"231D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom left corner\"}},\"key\":\"231E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom right corner\"}},\"key\":\"231F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top half integral\"}},\"key\":\"2320\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bottom half integral\"}},\"key\":\"2321\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left pointing angle bracket\",\"physics\":\"bra\"}},\"key\":\"2329\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right pointing angle bracket\",\"physics\":\"ket\"}},\"key\":\"232A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left parenthesis upper hook\"},\"mathspeak\":{\"brief\":\"left p'ren upper hook\",\"sbrief\":\"L p'ren upper hook\"}},\"key\":\"239B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left parenthesis extension\"},\"mathspeak\":{\"brief\":\"left p'ren extension\",\"sbrief\":\"L p'ren extension\"}},\"key\":\"239C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left parenthesis lower hook\"},\"mathspeak\":{\"brief\":\"left p'ren lower hook\",\"sbrief\":\"L p'ren lower hook\"}},\"key\":\"239D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right parenthesis upper hook\"},\"mathspeak\":{\"brief\":\"right p'ren upper hook\",\"sbrief\":\"R p'ren upper hook\"}},\"key\":\"239E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right parenthesis extension\"},\"mathspeak\":{\"brief\":\"right p'ren extension\",\"sbrief\":\"R p'ren extension\"}},\"key\":\"239F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right parenthesis lower hook\"},\"mathspeak\":{\"brief\":\"right p'ren lower hook\",\"sbrief\":\"R p'ren lower hook\"}},\"key\":\"23A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left bracket upper corner\"},\"mathspeak\":{\"brief\":\"left brack upper corner\",\"sbrief\":\"L brack upper corner\"}},\"key\":\"23A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left bracket extension\"},\"mathspeak\":{\"brief\":\"left brack extension\",\"sbrief\":\"L brack extension\"}},\"key\":\"23A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left bracket lower corner\"},\"mathspeak\":{\"brief\":\"left brack lower corner\",\"sbrief\":\"L brack lower corner\"}},\"key\":\"23A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right bracket upper corner\"},\"mathspeak\":{\"brief\":\"right brack upper corner\",\"sbrief\":\"R brack upper corner\"}},\"key\":\"23A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right bracket extension\"},\"mathspeak\":{\"brief\":\"right brack extension\",\"sbrief\":\"R brack extension\"}},\"key\":\"23A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right bracket lower corner\"},\"mathspeak\":{\"brief\":\"right brack lower corner\",\"sbrief\":\"R brack lower corner\"}},\"key\":\"23A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left brace upper hook\"},\"mathspeak\":{\"sbrief\":\"L brace upper hook\"}},\"key\":\"23A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left brace middle piece\"},\"mathspeak\":{\"sbrief\":\"L brace middle piece\"}},\"key\":\"23A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left brace lower hook\"},\"mathspeak\":{\"sbrief\":\"L brace lower hook\"}},\"key\":\"23A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"brace extension\"}},\"key\":\"23AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right brace upper hook\"},\"mathspeak\":{\"sbrief\":\"R brace upper hook\"}},\"key\":\"23AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right brace middle piece\"},\"mathspeak\":{\"sbrief\":\"R brace middle piece\"}},\"key\":\"23AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right brace lower hook\"},\"mathspeak\":{\"sbrief\":\"R brace lower hook\"}},\"key\":\"23AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral extension\"}},\"key\":\"23AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"horizontal line extension\"}},\"key\":\"23AF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"upper left or lower right brace section\"}},\"key\":\"23B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"upper right or lower left brace section\"}},\"key\":\"23B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"summation top\"}},\"key\":\"23B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"summation bottom\"}},\"key\":\"23B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"top bracket\"},\"mathspeak\":{\"brief\":\"top brack\",\"sbrief\":\"T brack\"}},\"key\":\"23B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom bracket\"},\"mathspeak\":{\"brief\":\"bottom brack\",\"sbrief\":\"B brack\"}},\"key\":\"23B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bottom bracket over top bracket\"},\"mathspeak\":{\"brief\":\"bottom brack over top brack\",\"sbrief\":\"B brack over T brack\"}},\"key\":\"23B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"radical symbol bottom\"}},\"key\":\"23B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left vertical box line\"}},\"key\":\"23B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right vertical box line\"}},\"key\":\"23B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top parenthesis\"},\"mathspeak\":{\"brief\":\"top p'ren\",\"sbrief\":\"t p'ren\"}},\"key\":\"23DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bottom parenthesis\"},\"mathspeak\":{\"brief\":\"bottom p'ren\",\"sbrief\":\"b p'ren\"}},\"key\":\"23DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top brace\"},\"mathspeak\":{\"sbrief\":\"T brace\"}},\"key\":\"23DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bottom brace\"},\"mathspeak\":{\"sbrief\":\"B brace\"}},\"key\":\"23DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"top tortoise shell bracket\"}},\"key\":\"23E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bottom tortoise shell bracket\"}},\"key\":\"23E1\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"medium left parenthesis ornament\"},\"mathspeak\":{\"brief\":\"medium left p'ren ornament\",\"sbrief\":\"medium L p'ren ornament\"}},\"key\":\"2768\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"medium right parenthesis ornament\"},\"mathspeak\":{\"brief\":\"medium right p'ren ornament\",\"sbrief\":\"medium R p'ren ornament\"}},\"key\":\"2769\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"medium flattened left parenthesis ornament\"},\"mathspeak\":{\"brief\":\"medium flattened left p'ren ornament\",\"sbrief\":\"medium flattened L p'ren ornament\"}},\"key\":\"276A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"medium flattened right parenthesis ornament\"},\"mathspeak\":{\"brief\":\"medium flattened right p'ren ornament\",\"sbrief\":\"medium flattened R p'ren ornament\"}},\"key\":\"276B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"medium left pointing angle bracket ornament\"}},\"key\":\"276C\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"medium right pointing angle bracket ornament\"}},\"key\":\"276D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"heavy left pointing angle quotation mark ornament\"}},\"key\":\"276E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"heavy right pointing angle quotation mark ornament\"}},\"key\":\"276F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"heavy left pointing angle bracket ornament\"}},\"key\":\"2770\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"heavy right pointing angle bracket ornament\"}},\"key\":\"2771\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"light left tortoise shell bracket ornament\"}},\"key\":\"2772\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"light right tortoise shell bracket ornament\"}},\"key\":\"2773\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"medium left brace ornament\"},\"mathspeak\":{\"sbrief\":\"medium L brace ornament\"}},\"key\":\"2774\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"medium right brace ornament\"},\"mathspeak\":{\"sbrief\":\"medium R brace ornament\"}},\"key\":\"2775\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left s shaped bag delimiter\"}},\"key\":\"27C5\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right s shaped bag delimiter\"}},\"key\":\"27C6\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white bracket\"}},\"key\":\"27E6\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white bracket\"}},\"key\":\"27E7\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left angle bracket\"},\"mathspeak\":{\"sbrief\":\"l angle bracket\"}},\"key\":\"27E8\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right angle bracket\"},\"mathspeak\":{\"sbrief\":\"r angle bracket\"}},\"key\":\"27E9\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left double angle bracket\"}},\"key\":\"27EA\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right double angle bracket\"}},\"key\":\"27EB\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white tortoise shell bracket\"}},\"key\":\"27EC\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white tortoise shell bracket\"}},\"key\":\"27ED\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"flattened left parenthesis\"},\"mathspeak\":{\"brief\":\"flattened left p'ren\",\"sbrief\":\"flattened L p'ren\"}},\"key\":\"27EE\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"flattened right parenthesis\"},\"mathspeak\":{\"brief\":\"flattened right p'ren\",\"sbrief\":\"flattened R p'ren\"}},\"key\":\"27EF\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white brace\"}},\"key\":\"2983\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white brace\"}},\"key\":\"2984\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"white left parenthesis\"},\"mathspeak\":{\"brief\":\"white left p'ren\",\"sbrief\":\"white L p'ren\"}},\"key\":\"2985\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"white right parenthesis\"},\"mathspeak\":{\"brief\":\"white right p'ren\",\"sbrief\":\"white R p'ren\"}},\"key\":\"2986\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"z notation left image bracket\"}},\"key\":\"2987\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"z notation right image bracket\"}},\"key\":\"2988\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"z notation left binding bracket\"}},\"key\":\"2989\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"z notation right binding bracket\"}},\"key\":\"298A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left bracket with underbar\"},\"mathspeak\":{\"brief\":\"left brack with underbar\",\"sbrief\":\"L brack with underbar\"}},\"key\":\"298B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right bracket with underbar\"},\"mathspeak\":{\"brief\":\"right brack with underbar\",\"sbrief\":\"R brack with underbar\"}},\"key\":\"298C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left bracket with tick in top corner\"},\"mathspeak\":{\"brief\":\"left brack with tick in top corner\",\"sbrief\":\"L brack with tick in top corner\"}},\"key\":\"298D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right bracket with tick in bottom corner\"},\"mathspeak\":{\"brief\":\"right brack with tick in bottom corner\",\"sbrief\":\"R brack with tick in bottom corner\"}},\"key\":\"298E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left bracket with tick in bottom corner\"},\"mathspeak\":{\"brief\":\"left brack with tick in bottom corner\",\"sbrief\":\"L brack with tick in bottom corner\"}},\"key\":\"298F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right bracket with tick in top corner\"},\"mathspeak\":{\"brief\":\"right brack with tick in top corner\",\"sbrief\":\"R brack with tick in top corner\"}},\"key\":\"2990\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left angle bracket with dot\"},\"mathspeak\":{\"sbrief\":\"l angle bracket with dot\"}},\"key\":\"2991\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right angle bracket with dot\"},\"mathspeak\":{\"sbrief\":\"r angle bracket with dot\"}},\"key\":\"2992\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left arc less than bracket\"}},\"key\":\"2993\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right arc greater than bracket\"}},\"key\":\"2994\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"double left arc greater than bracket\"}},\"key\":\"2995\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"double right arc less than bracket\"}},\"key\":\"2996\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left black tortoise shell bracket\"}},\"key\":\"2997\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right black tortoise shell bracket\"}},\"key\":\"2998\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left wiggly fence\"}},\"key\":\"29D8\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right wiggly fence\"}},\"key\":\"29D9\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left double wiggly fence\"}},\"key\":\"29DA\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right double wiggly fence\"}},\"key\":\"29DB\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left pointing curved angle bracket\"}},\"key\":\"29FC\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right pointing curved angle bracket\"}},\"key\":\"29FD\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"top half left bracket\"},\"mathspeak\":{\"brief\":\"top half left brack\",\"sbrief\":\"top half L brack\"}},\"key\":\"2E22\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"top half right bracket\"},\"mathspeak\":{\"brief\":\"top half right brack\",\"sbrief\":\"top half R brack\"}},\"key\":\"2E23\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"bottom half left bracket\"},\"mathspeak\":{\"brief\":\"bottom half left brack\",\"sbrief\":\"bottom half L brack\"}},\"key\":\"2E24\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"bottom half right bracket\"},\"mathspeak\":{\"brief\":\"bottom half right brack\",\"sbrief\":\"bottom half R brack\"}},\"key\":\"2E25\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left sideways U bracket\"}},\"key\":\"2E26\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right sideways U bracket\"}},\"key\":\"2E27\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"double left parenthesis\"},\"mathspeak\":{\"brief\":\"double left p'ren\",\"sbrief\":\"double L p'ren\"}},\"key\":\"2E28\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"double right parenthesis\"},\"mathspeak\":{\"brief\":\"double right p'ren\",\"sbrief\":\"double R p'ren\"}},\"key\":\"2E29\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left angle bracket\"},\"mathspeak\":{\"sbrief\":\"l angle bracket\"}},\"key\":\"3008\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right angle bracket\"},\"mathspeak\":{\"sbrief\":\"r angle bracket\"}},\"key\":\"3009\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left double angle bracket\"}},\"key\":\"300A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right double angle bracket\"}},\"key\":\"300B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left corner bracket\"}},\"key\":\"300C\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right corner bracket\"}},\"key\":\"300D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white corner bracket\"}},\"key\":\"300E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white corner bracket\"}},\"key\":\"300F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left black lenticular bracket\"}},\"key\":\"3010\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right black lenticular bracket\"}},\"key\":\"3011\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left tortoise shell bracket\"}},\"key\":\"3014\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right tortoise shell bracket\"}},\"key\":\"3015\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white lenticular bracket\"}},\"key\":\"3016\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white lenticular bracket\"}},\"key\":\"3017\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white tortoise shell bracket\"}},\"key\":\"3018\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white tortoise shell bracket\"}},\"key\":\"3019\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"left white bracket\"}},\"key\":\"301A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"right white bracket\"}},\"key\":\"301B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"reversed double prime quotation mark\"}},\"key\":\"301D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"double prime quotation mark\"}},\"key\":\"301E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"low double prime quotation mark\"}},\"key\":\"301F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"ornate left parenthesis\"},\"mathspeak\":{\"brief\":\"ornate left p'ren\",\"sbrief\":\"ornate L p'ren\"}},\"key\":\"FD3E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"ornate right parenthesis\"},\"mathspeak\":{\"brief\":\"ornate right p'ren\",\"sbrief\":\"ornate R p'ren\"}},\"key\":\"FD3F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left white lenticular bracket\"}},\"key\":\"FE17\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right white lenticular brakcet\"}},\"key\":\"FE18\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left parenthesis\"},\"mathspeak\":{\"brief\":\"presentation form for vertical left p'ren\",\"sbrief\":\"presentation form for vertical L p'ren\"}},\"key\":\"FE35\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right parenthesis\"},\"mathspeak\":{\"brief\":\"presentation form for vertical right p'ren\",\"sbrief\":\"presentation form for vertical R p'ren\"}},\"key\":\"FE36\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left brace\"},\"mathspeak\":{\"sbrief\":\"presentation form for vertical L brace\"}},\"key\":\"FE37\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right brace\"},\"mathspeak\":{\"sbrief\":\"presentation form for vertical r brace\"}},\"key\":\"FE38\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left tortoise shell bracket\"}},\"key\":\"FE39\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right tortoise shell bracket\"}},\"key\":\"FE3A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left black lenticular bracket\"}},\"key\":\"FE3B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right black lenticular bracket\"}},\"key\":\"FE3C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left double angle bracket\"}},\"key\":\"FE3D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right double angle bracket\"}},\"key\":\"FE3E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left angle bracket\"},\"mathspeak\":{\"sbrief\":\"presentation form for vertical l angle bracket\"}},\"key\":\"FE3F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right angle bracket\"},\"mathspeak\":{\"sbrief\":\"presentation form for vertical r angle bracket\"}},\"key\":\"FE40\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left corner bracket\"}},\"key\":\"FE41\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right corner bracket\"}},\"key\":\"FE42\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left white corner bracket\"}},\"key\":\"FE43\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right white corner bracket\"}},\"key\":\"FE44\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical left bracket\"},\"mathspeak\":{\"brief\":\"presentation form for vertical left brack\",\"sbrief\":\"presentation form for vertical L brack\"}},\"key\":\"FE47\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical right bracket\"},\"mathspeak\":{\"brief\":\"presentation form for vertical right brack\",\"sbrief\":\"presentation form for vertical r brack\"}},\"key\":\"FE48\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"small left parenthesis\"},\"mathspeak\":{\"brief\":\"small left p'ren\",\"sbrief\":\"small L p'ren\"}},\"key\":\"FE59\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"small right parenthesis\"},\"mathspeak\":{\"brief\":\"small right p'ren\",\"sbrief\":\"small R p'ren\"}},\"key\":\"FE5A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"small left brace\"},\"mathspeak\":{\"sbrief\":\"small L brace\"}},\"key\":\"FE5B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"small right brace\"},\"mathspeak\":{\"sbrief\":\"small r brace\"}},\"key\":\"FE5C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"small left tortoise shell bracket\"}},\"key\":\"FE5D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"small right tortoise shell bracket\"}},\"key\":\"FE5E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"fullwidth left parenthesis\"},\"mathspeak\":{\"brief\":\"fullwidth left p'ren\",\"sbrief\":\"fullwidth L p'ren\"}},\"key\":\"FF08\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"fullwidth right parenthesis\"},\"mathspeak\":{\"brief\":\"fullwidth right p'ren\",\"sbrief\":\"fullwidth R p'ren\"}},\"key\":\"FF09\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"fullwidth left bracket\"},\"mathspeak\":{\"brief\":\"fullwidth left brack\",\"sbrief\":\"fullwidth L brack\"}},\"key\":\"FF3B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"fullwidth right bracket\"},\"mathspeak\":{\"brief\":\"fullwidth right brack\",\"sbrief\":\"fullwidth r brack\"}},\"key\":\"FF3D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"fullwidth left brace\"},\"mathspeak\":{\"sbrief\":\"fullwidth L brace\"}},\"key\":\"FF5B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"fullwidth right brace\"},\"mathspeak\":{\"sbrief\":\"fullwidth r brace\"}},\"key\":\"FF5D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"fullwidth white left parenthesis\"},\"mathspeak\":{\"brief\":\"fullwidth white left p'ren\",\"sbrief\":\"fullwidth white L p'ren\"}},\"key\":\"FF5F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"fullwidth white right parenthesis\"},\"mathspeak\":{\"brief\":\"fullwidth white right p'ren\",\"sbrief\":\"fullwidth white R p'ren\"}},\"key\":\"FF60\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"halfwidth left corner bracket\"}},\"key\":\"FF62\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"halfwidth right corner bracket\"}},\"key\":\"FF63\"}]\n,\n\"en/symbols/math_geometry.js\": \n[{\"locale\":\"en\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light horizontal\"}},\"key\":\"2500\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy horizontal\"}},\"key\":\"2501\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light vertical\"}},\"key\":\"2502\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy vertical\"}},\"key\":\"2503\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light triple dash horizontal\"}},\"key\":\"2504\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy triple dash horizontal\"}},\"key\":\"2505\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light triple dash vertical\"}},\"key\":\"2506\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy triple dash vertical\"}},\"key\":\"2507\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light quadruple dash horizontal\"}},\"key\":\"2508\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy quadruple dash horizontal\"}},\"key\":\"2509\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light quadruple dash vertical\"}},\"key\":\"250A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy quadruple dash vertical\"}},\"key\":\"250B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light down and right\"}},\"key\":\"250C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and right heavy\"}},\"key\":\"250D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and right light\"}},\"key\":\"250E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy down and right\"}},\"key\":\"250F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light down and left\"}},\"key\":\"2510\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and left heavy\"}},\"key\":\"2511\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and left light\"}},\"key\":\"2512\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy down and left\"}},\"key\":\"2513\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light up and right\"}},\"key\":\"2514\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and right heavy\"}},\"key\":\"2515\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and right light\"}},\"key\":\"2516\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy up and right\"}},\"key\":\"2517\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light up and left\"}},\"key\":\"2518\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and left heavy\"}},\"key\":\"2519\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and left light\"}},\"key\":\"251A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy up and left\"}},\"key\":\"251B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light vertical and right\"}},\"key\":\"251C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical light and right heavy\"}},\"key\":\"251D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and right down light\"}},\"key\":\"251E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and right up light\"}},\"key\":\"251F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical heavy and right light\"}},\"key\":\"2520\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and right up heavy\"}},\"key\":\"2521\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and right down heavy\"}},\"key\":\"2522\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy vertical and right\"}},\"key\":\"2523\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light vertical and left\"}},\"key\":\"2524\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical light and left heavy\"}},\"key\":\"2525\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and left down light\"}},\"key\":\"2526\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and left up light\"}},\"key\":\"2527\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical heavy and left light\"}},\"key\":\"2528\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and left up heavy\"}},\"key\":\"2529\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and left down heavy\"}},\"key\":\"252A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy vertical and left\"}},\"key\":\"252B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light down and horizontal\"}},\"key\":\"252C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left heavy and right down light\"}},\"key\":\"252D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right heavy and left down light\"}},\"key\":\"252E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and horizontal heavy\"}},\"key\":\"252F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and horizontal light\"}},\"key\":\"2530\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right light and left down heavy\"}},\"key\":\"2531\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left light and right down heavy\"}},\"key\":\"2532\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy down and horizontal\"}},\"key\":\"2533\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light up and horizontal\"}},\"key\":\"2534\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left heavy and right up light\"}},\"key\":\"2535\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right heavy and left up light\"}},\"key\":\"2536\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and horizontal heavy\"}},\"key\":\"2537\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and horizontal light\"}},\"key\":\"2538\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right light and left up heavy\"}},\"key\":\"2539\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left light and right up heavy\"}},\"key\":\"253A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy up and horizontal\"}},\"key\":\"253B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light vertical and horizontal\"}},\"key\":\"253C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left heavy and right vertical light\"}},\"key\":\"253D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right heavy and left vertical light\"}},\"key\":\"253E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical light and horizontal heavy\"}},\"key\":\"253F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up heavy and down horizontal light\"}},\"key\":\"2540\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down heavy and up horizontal light\"}},\"key\":\"2541\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical heavy and horizontal light\"}},\"key\":\"2542\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left up heavy and right down light\"}},\"key\":\"2543\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right up heavy and left down light\"}},\"key\":\"2544\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left down heavy and right up light\"}},\"key\":\"2545\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right down heavy and left up light\"}},\"key\":\"2546\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down light and up horizontal heavy\"}},\"key\":\"2547\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up light and down horizontal heavy\"}},\"key\":\"2548\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings right light and left vertical heavy\"}},\"key\":\"2549\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings left light and right vertical heavy\"}},\"key\":\"254A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy vertical and horizontal\"}},\"key\":\"254B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light double dash horizontal\"}},\"key\":\"254C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy double dash horizontal\"}},\"key\":\"254D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light double dash vertical\"}},\"key\":\"254E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy double dash vertical\"}},\"key\":\"254F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double horizontal\"}},\"key\":\"2550\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double vertical\"}},\"key\":\"2551\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down single and right double\"}},\"key\":\"2552\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down double and right single\"}},\"key\":\"2553\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double down and right\"}},\"key\":\"2554\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down single and left double\"}},\"key\":\"2555\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down double and left single\"}},\"key\":\"2556\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double down and left\"}},\"key\":\"2557\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up single and right double\"}},\"key\":\"2558\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up double and right single\"}},\"key\":\"2559\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double up and right\"}},\"key\":\"255A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up single and left double\"}},\"key\":\"255B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up double and left single\"}},\"key\":\"255C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double up and left\"}},\"key\":\"255D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical single and right double\"}},\"key\":\"255E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical double and right single\"}},\"key\":\"255F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double vertical and right\"}},\"key\":\"2560\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical single and left double\"}},\"key\":\"2561\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical double and left single\"}},\"key\":\"2562\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double vertical and left\"}},\"key\":\"2563\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down single and horizontal double\"}},\"key\":\"2564\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings down double and horizontal single\"}},\"key\":\"2565\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double down and horizontal\"}},\"key\":\"2566\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up single and horizontal double\"}},\"key\":\"2567\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings up double and horizontal single\"}},\"key\":\"2568\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double up and horizontal\"}},\"key\":\"2569\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical single and horizontal double\"}},\"key\":\"256A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings vertical double and horizontal single\"}},\"key\":\"256B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings double vertical and horizontal\"}},\"key\":\"256C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light arc down and right\"}},\"key\":\"256D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light arc down and left\"}},\"key\":\"256E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light arc up and left\"}},\"key\":\"256F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light arc up and right\"}},\"key\":\"2570\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light diagonal upper right to lower left\"}},\"key\":\"2571\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light diagonal upper left to lower right\"}},\"key\":\"2572\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light diagonal cross\"}},\"key\":\"2573\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light left\"}},\"key\":\"2574\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light up\"}},\"key\":\"2575\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light right\"}},\"key\":\"2576\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light down\"}},\"key\":\"2577\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy left\"}},\"key\":\"2578\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy up\"}},\"key\":\"2579\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy right\"}},\"key\":\"257A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy down\"}},\"key\":\"257B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light left and heavy right\"}},\"key\":\"257C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings light up and heavy down\"}},\"key\":\"257D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy left and light right\"}},\"key\":\"257E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"box drawings heavy up and light down\"}},\"key\":\"257F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper half block\"}},\"key\":\"2580\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower one eighth block\"}},\"key\":\"2581\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower one quarter block\"}},\"key\":\"2582\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower three eighths block\"}},\"key\":\"2583\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower half block\"}},\"key\":\"2584\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower five eighths block\"}},\"key\":\"2585\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower three quarters block\"}},\"key\":\"2586\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower seven eighths block\"}},\"key\":\"2587\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"full block\"}},\"key\":\"2588\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left seven eighths block\"}},\"key\":\"2589\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left three quarters block\"}},\"key\":\"258A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left five eighths block\"}},\"key\":\"258B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left half block\"}},\"key\":\"258C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left three eighths block\"}},\"key\":\"258D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left one quarter block\"}},\"key\":\"258E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left one eighth block\"}},\"key\":\"258F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right half block\"}},\"key\":\"2590\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"light shade\"}},\"key\":\"2591\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"medium shade\"}},\"key\":\"2592\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"dark shade\"}},\"key\":\"2593\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper one eighth block\"}},\"key\":\"2594\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right one eighth block\"}},\"key\":\"2595\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant lower left\"}},\"key\":\"2596\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant lower right\"}},\"key\":\"2597\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper left\"}},\"key\":\"2598\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper left and lower left and lower right\"}},\"key\":\"2599\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper left and lower right\"}},\"key\":\"259A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper left and upper right and lower left\"}},\"key\":\"259B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper left and upper right and lower right\"}},\"key\":\"259C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper right\"}},\"key\":\"259D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper right and lower left\"}},\"key\":\"259E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"quadrant upper right and lower left and lower right\"}},\"key\":\"259F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black square\"}},\"key\":\"25A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square\"}},\"key\":\"25A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with rounded corners\"}},\"key\":\"25A2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square containing black small square\"}},\"key\":\"25A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with horizontal fill\"}},\"key\":\"25A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with vertical fill\"}},\"key\":\"25A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with orthogonal crosshatch fill\"}},\"key\":\"25A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with upper left to lower right fill\"}},\"key\":\"25A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with upper right to lower left fill\"}},\"key\":\"25A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with diagonal crosshatch fill\"}},\"key\":\"25A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black small square\"}},\"key\":\"25AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white small square\"}},\"key\":\"25AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black rectangle\"}},\"key\":\"25AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white rectangle\"}},\"key\":\"25AD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black vertical rectangle\"}},\"key\":\"25AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white vertical rectangle\"}},\"key\":\"25AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black parallelogram\"}},\"key\":\"25B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white parallelogram\"}},\"key\":\"25B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black up pointing triangle\"}},\"key\":\"25B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up pointing triangle\"}},\"key\":\"25B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black up pointing small triangle\"}},\"key\":\"25B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up pointing small triangle\"}},\"key\":\"25B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right pointing triangle\"}},\"key\":\"25B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white right pointing triangle\"}},\"key\":\"25B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right pointing small triangle\"}},\"key\":\"25B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white right pointing small triangle\"}},\"key\":\"25B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right pointing pointer\"}},\"key\":\"25BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white right pointing pointer\"}},\"key\":\"25BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black down pointing triangle\"}},\"key\":\"25BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white down pointing triangle\"}},\"key\":\"25BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black down pointing small triangle\"}},\"key\":\"25BE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white down pointing small triangle\"}},\"key\":\"25BF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black left pointing triangle\"}},\"key\":\"25C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white left pointing triangle\"}},\"key\":\"25C1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black left pointing small triangle\"}},\"key\":\"25C2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white left pointing small triangle\"}},\"key\":\"25C3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black left pointing pointer\"}},\"key\":\"25C4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white left pointing pointer\"}},\"key\":\"25C5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black diamond\"}},\"key\":\"25C6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white diamond\"}},\"key\":\"25C7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white diamond containing black small diamond\"}},\"key\":\"25C8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"fisheye\"}},\"key\":\"25C9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lozenge\"}},\"key\":\"25CA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle\"}},\"key\":\"25CB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"dotted circle\"}},\"key\":\"25CC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with vertical fill\"}},\"key\":\"25CD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bullseye\"}},\"key\":\"25CE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black circle\"}},\"key\":\"25CF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with left half black\"}},\"key\":\"25D0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with right half black\"}},\"key\":\"25D1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with lower half black\"}},\"key\":\"25D2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with upper half black\"}},\"key\":\"25D3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with upper right quadrant black\"}},\"key\":\"25D4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circle with all but upper left quadrant black\"}},\"key\":\"25D5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left half black circle\"}},\"key\":\"25D6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right half black circle\"}},\"key\":\"25D7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"inverse bullet\"}},\"key\":\"25D8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"inverse white circle\"}},\"key\":\"25D9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper half inverse white circle\"}},\"key\":\"25DA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower half inverse white circle\"}},\"key\":\"25DB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper left quadrant circular arc\"}},\"key\":\"25DC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper right quadrant circular arc\"}},\"key\":\"25DD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower right quadrant circular arc\"}},\"key\":\"25DE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower left quadrant circular arc\"}},\"key\":\"25DF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"upper half circle\"}},\"key\":\"25E0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"lower half circle\"}},\"key\":\"25E1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black lower right triangle\"}},\"key\":\"25E2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black lower left triangle\"}},\"key\":\"25E3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black upper left triangle\"}},\"key\":\"25E4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black upper right triangle\"}},\"key\":\"25E5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white bullet\"}},\"key\":\"25E6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with left half black\"}},\"key\":\"25E7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with right half black\"}},\"key\":\"25E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with upper left diagonal half black\"}},\"key\":\"25E9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with lower right diagonal half black\"}},\"key\":\"25EA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with vertical bisecting line\"}},\"key\":\"25EB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white up pointing triangle with dot\"}},\"key\":\"25EC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up pointing triangle with left half black\"}},\"key\":\"25ED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up pointing triangle with right half black\"}},\"key\":\"25EE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"large circle\"}},\"key\":\"25EF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with upper left quadrant\"}},\"key\":\"25F0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with lower left quadrant\"}},\"key\":\"25F1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with lower right quadrant\"}},\"key\":\"25F2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white square with upper right quadrant\"}},\"key\":\"25F3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle with upper left quadrant\"}},\"key\":\"25F4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle with lower left quadrant\"}},\"key\":\"25F5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle with lower right quadrant\"}},\"key\":\"25F6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle with upper right quadrant\"}},\"key\":\"25F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"upper left triangle\"}},\"key\":\"25F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"upper right triangle\"}},\"key\":\"25F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"lower left triangle\"}},\"key\":\"25FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white medium square\"}},\"key\":\"25FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black medium square\"}},\"key\":\"25FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white medium small square\"}},\"key\":\"25FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black medium small square\"}},\"key\":\"25FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"lower right triangle\"}},\"key\":\"25FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with top half black\"}},\"key\":\"2B12\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with bottom half black\"}},\"key\":\"2B13\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with upper right diagonal half black\"}},\"key\":\"2B14\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square with lower left diagonal half black\"}},\"key\":\"2B15\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"diamond with left half black\"}},\"key\":\"2B16\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"diamond with right half black\"}},\"key\":\"2B17\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"diamond with top half black\"}},\"key\":\"2B18\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"diamond with bottom half black\"}},\"key\":\"2B19\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"dotted square\"}},\"key\":\"2B1A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black large square\"}},\"key\":\"2B1B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white large square\"}},\"key\":\"2B1C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black very small square\"}},\"key\":\"2B1D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white very small square\"}},\"key\":\"2B1E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black pentagon\"}},\"key\":\"2B1F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white pentagon\"}},\"key\":\"2B20\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white hexagon\"}},\"key\":\"2B21\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black hexagon\"}},\"key\":\"2B22\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"horizontal black hexagon\"}},\"key\":\"2B23\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black large circle\"}},\"key\":\"2B24\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black medium diamond\"}},\"key\":\"2B25\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white medium diamond\"}},\"key\":\"2B26\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black medium lozenge\"}},\"key\":\"2B27\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white medium lozenge\"}},\"key\":\"2B28\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black small diamond\"}},\"key\":\"2B29\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black small lozenge\"}},\"key\":\"2B2A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white small lozenge\"}},\"key\":\"2B2B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black horizontal ellipse\"}},\"key\":\"2B2C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white horizontal ellipse\"}},\"key\":\"2B2D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black vertical ellipse\"}},\"key\":\"2B2E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white vertical ellipse\"}},\"key\":\"2B2F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white medium star\"}},\"key\":\"2B50\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black small star\"}},\"key\":\"2B51\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white small star\"}},\"key\":\"2B52\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black right pointing pentagon\"}},\"key\":\"2B53\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white right pointing pentagon\"}},\"key\":\"2B54\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy large circle\"}},\"key\":\"2B55\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy oval with oval inside\"}},\"key\":\"2B56\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy circle with circle inside\"}},\"key\":\"2B57\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy circle\"}},\"key\":\"2B58\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy circled saltire\"}},\"key\":\"2B59\"}]\n,\n\"en/symbols/math_harpoons.js\": \n[{\"locale\":\"en\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up\"}},\"key\":\"21BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb down\"}},\"key\":\"21BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb right\"}},\"key\":\"21BE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb left\"}},\"key\":\"21BF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up\"}},\"key\":\"21C0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb down\"}},\"key\":\"21C1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb right\"}},\"key\":\"21C2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb left\"}},\"key\":\"21C3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"left harpoon over right harpoon\"}},\"key\":\"21CB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"right harpoon over left harpoon\"}},\"key\":\"21CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left barb up right barb down harpoon\"}},\"key\":\"294A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left barb down right barb up harpoon\"}},\"key\":\"294B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up barb right down barb left harpoon\"}},\"key\":\"294C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up barb left down barb right harpoon\"}},\"key\":\"294D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left barb up right barb up harpoon\"}},\"key\":\"294E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up barb right down barb right harpoon\"}},\"key\":\"294F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left barb down right barb down harpoon\"}},\"key\":\"2950\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up barb left down barb left harpoon\"}},\"key\":\"2951\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up to bar\"}},\"key\":\"2952\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up to bar\"}},\"key\":\"2953\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb right to bar\"}},\"key\":\"2954\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb right to bar\"}},\"key\":\"2955\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb down to bar\"}},\"key\":\"2956\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb down to bar\"}},\"key\":\"2957\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb left to bar\"}},\"key\":\"2958\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb left to bar\"}},\"key\":\"2959\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up from bar\"}},\"key\":\"295A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up from bar\"}},\"key\":\"295B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb right from bar\"}},\"key\":\"295C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb right from bar\"}},\"key\":\"295D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb down from bar\"}},\"key\":\"295E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb down from bar\"}},\"key\":\"295F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb left from bar\"}},\"key\":\"2960\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb left from bar\"}},\"key\":\"2961\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up above left harpoon with barb down\"}},\"key\":\"2962\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb left beside up harpoon with barb right\"}},\"key\":\"2963\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up above right harpoon with barb down\"}},\"key\":\"2964\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb left beside down harpoon with barb right\"}},\"key\":\"2965\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up above right harpoon with barb up\"}},\"key\":\"2966\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb down above right harpoon with barb down\"}},\"key\":\"2967\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up above left harpoon with barb up\"}},\"key\":\"2968\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb down above left harpoon with barb down\"}},\"key\":\"2969\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb up above long dash\"}},\"key\":\"296A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left harpoon with barb down below long dash\"}},\"key\":\"296B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb up above long dash\"}},\"key\":\"296C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right harpoon with barb down below long dash\"}},\"key\":\"296D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up harpoon with barb left beside down harpoon with barb right\"}},\"key\":\"296E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down harpoon with barb left beside up harpoon with barb right\"}},\"key\":\"296F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left fish tail\"}},\"key\":\"297C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right fish tail\"}},\"key\":\"297D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up fish tail\"}},\"key\":\"297E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down fish tail\"}},\"key\":\"297F\"}]\n,\n\"en/symbols/math_non_characters.js\": \n[{\"locale\":\"en\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"italic h over two pi\",\"physics\":\"planck constant over two pi\"}},\"key\":\"210F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"l b bar\"}},\"key\":\"2114\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"numero\"}},\"key\":\"2116\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"sound recording copyright\"}},\"key\":\"2117\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"prescription take\"}},\"key\":\"211E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"response\"}},\"key\":\"211F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"service mark\"}},\"key\":\"2120\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"telephone sign\",\"alternative\":\"t e l symbol\"}},\"key\":\"2121\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"trade mark\"}},\"key\":\"2122\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"versicle\"}},\"key\":\"2123\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"ounce\"}},\"key\":\"2125\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"ohm\"}},\"key\":\"2126\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"inverted ohm\"}},\"key\":\"2127\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"kelvin\"}},\"key\":\"212A\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"angstrom\"}},\"key\":\"212B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"estimated\"}},\"key\":\"212E\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"turned cap F\"},\"mathspeak\":{\"default\":\"turned upper F\"}},\"key\":\"2132\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"information source\"}},\"key\":\"2139\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"rotated cap Q\"},\"mathspeak\":{\"default\":\"rotated upper Q\"}},\"key\":\"213A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"facsimile sign\"}},\"key\":\"213B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"turned sans serif cap G\"},\"mathspeak\":{\"default\":\"turned sans serif upper G\"}},\"key\":\"2141\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"turned sans serif cap L\"},\"mathspeak\":{\"default\":\"turned sans serif upper L\"}},\"key\":\"2142\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed sans serif cap L\"},\"mathspeak\":{\"default\":\"reversed sans serif upper L\"}},\"key\":\"2143\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"turned sans serif cap Y\"},\"mathspeak\":{\"default\":\"turned sans serif upper Y\"}},\"key\":\"2144\"}]\n,\n\"en/symbols/math_symbols.js\": \n[{\"locale\":\"en\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"exclamation mark\"}},\"key\":\"0021\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"quotation mark\"}},\"key\":\"0022\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"number sign\",\"alternative\":\"hash\"},\"mathspeak\":{\"brief\":\"num sign\",\"sbrief\":\"num sign\"}},\"key\":\"0023\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"dollar sign\"}},\"key\":\"0024\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"percent sign\"}},\"key\":\"0025\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"ampersand\"}},\"key\":\"0026\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"prime\"}},\"key\":\"0027\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"asterisk\"}},\"key\":\"002A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus\"}},\"key\":\"002B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"comma\"}},\"key\":\"002C\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"minus\"},\"mathspeak\":{\"default\":\"hyphen\"}},\"key\":\"002D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"period\"}},\"key\":\"002E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"slash\",\"alternative\":\"solidus\"},\"emacspeak\":{\"default\":\"slash\"}},\"key\":\"002F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"colon\"}},\"key\":\"003A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"semicolon\"}},\"key\":\"003B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than\"},\"clearspeak\":{\"default\":\"is less than\"}},\"key\":\"003C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals\"}},\"key\":\"003D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than\"},\"clearspeak\":{\"default\":\"is greater than\"}},\"key\":\"003E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"question mark\"}},\"key\":\"003F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"at\"}},\"key\":\"0040\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"backslash\"}},\"key\":\"005C\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"hat\"},\"mathspeak\":{\"default\":\"caret\"}},\"key\":\"005E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"bar\",\"alternative\":\"underline\"}},\"key\":\"005F\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"grave\"},\"mathspeak\":{\"default\":\"grave\"}},\"key\":\"0060\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar\"}},\"key\":\"007C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"key\":\"007E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"inverted exclamation mark\"}},\"key\":\"00A1\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"cent sign\"}},\"key\":\"00A2\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"pound sign\"}},\"key\":\"00A3\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"currency sign\"}},\"key\":\"00A4\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"yen sign\"}},\"key\":\"00A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"broken vertical bar\"}},\"key\":\"00A6\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"section sign\"}},\"key\":\"00A7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"two dots\"}},\"key\":\"00A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"copyright sign\"}},\"key\":\"00A9\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"feminine ordinal indicator\"}},\"key\":\"00AA\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left pointing guillemet\"}},\"key\":\"00AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not sign\"}},\"key\":\"00AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"registered sign\"},\"mathspeak\":{\"default\":\"registered trade mark sign\"},\"clearspeak\":{\"default\":\"trade mark sign\"}},\"key\":\"00AE\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"bar\"}},\"key\":\"00AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"degree\"},\"clearspeak\":{\"default\":\"degrees\"}},\"key\":\"00B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus or minus\"}},\"key\":\"00B1\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"acute\"}},\"key\":\"00B4\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"micro sign\"}},\"key\":\"00B5\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"paragraph sign\"}},\"key\":\"00B6\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"dot\"},\"clearspeak\":{\"default\":\"times\"}},\"key\":\"00B7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"cedilla\"}},\"key\":\"00B8\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"masculine ordinal indicator\"}},\"key\":\"00BA\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"right pointing guillemet\"}},\"key\":\"00BB\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"inverted question mark\"}},\"key\":\"00BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"times\"},\"clearspeak\":{\"MultsymbolX_By\":\"by\",\"MultsymbolX_Cross\":\"cross\"}},\"key\":\"00D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"division sign\"}},\"key\":\"00F7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"breve\"}},\"key\":\"02D8\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"dot above\"},\"mathspeak\":{\"default\":\"dot\"}},\"key\":\"02D9\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"ring above\"}},\"key\":\"02DA\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"ogonek\"}},\"key\":\"02DB\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"key\":\"02DC\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"double acute\"}},\"key\":\"02DD\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"hyphen\"}},\"key\":\"2010\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"non breaking hyphen\"}},\"key\":\"2011\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"figure dash\"}},\"key\":\"2012\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"en dash\"}},\"key\":\"2013\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"em dash\"}},\"key\":\"2014\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"horizontal bar\"},\"mathspeak\":{\"default\":\"quotation dash\"}},\"key\":\"2015\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double vertical bar\"}},\"key\":\"2016\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double underline\"}},\"key\":\"2017\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left single quotation mark\"}},\"key\":\"2018\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"right single quotation mark\"}},\"key\":\"2019\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"low right single quotation mark\"}},\"key\":\"201A\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left reversed single quotation mark\"}},\"key\":\"201B\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left double quotation mark\"}},\"key\":\"201C\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"right double quotation mark\"}},\"key\":\"201D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"low right double quotation mark\"}},\"key\":\"201E\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left reversed double quotation mark\"}},\"key\":\"201F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"dagger\"}},\"key\":\"2020\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double dagger\"}},\"key\":\"2021\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"bullet\"}},\"key\":\"2022\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"triangular bullet\"}},\"key\":\"2023\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"one dot leader\"}},\"key\":\"2024\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"two dot leader\"}},\"key\":\"2025\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"ellipsis\"},\"clearspeak\":{\"default\":\"dot dot dot\"}},\"key\":\"2026\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"hyphenation point\"}},\"key\":\"2027\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"per mille\"}},\"key\":\"2030\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"per ten thousand\"}},\"key\":\"2031\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"prime\"}},\"key\":\"2032\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double prime\"}},\"key\":\"2033\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"triple prime\"}},\"key\":\"2034\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reversed prime\"}},\"key\":\"2035\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reversed double prime\"}},\"key\":\"2036\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reversed triple prime\"}},\"key\":\"2037\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"caret\"}},\"key\":\"2038\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"left pointing single guillemet\"}},\"key\":\"2039\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"right pointing single guillemet\"}},\"key\":\"203A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reference mark\"}},\"key\":\"203B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double exclamation mark\"}},\"key\":\"203C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"interrobang\"}},\"key\":\"203D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"overline\"},\"mathspeak\":{\"default\":\"bar\"}},\"key\":\"203E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"undertie\"}},\"key\":\"203F\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"character tie\"}},\"key\":\"2040\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"caret insertion point\"}},\"key\":\"2041\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"asterism\"}},\"key\":\"2042\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"hyphen bullet\"}},\"key\":\"2043\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"fraction slash\"}},\"key\":\"2044\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double question mark\"}},\"key\":\"2047\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"question exclamation mark\"}},\"key\":\"2048\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"exclamation question mark\"}},\"key\":\"2049\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reversed pilcrow\"}},\"key\":\"204B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"black leftwards bullet\"}},\"key\":\"204C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"black rightwards bullet\"}},\"key\":\"204D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"low asterisk\"}},\"key\":\"204E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"reversed semicolon\"}},\"key\":\"204F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"close up\"}},\"key\":\"2050\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"two asterisks aligned vertically\"}},\"key\":\"2051\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"commercial minus\"}},\"key\":\"2052\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"swung dash\"}},\"key\":\"2053\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"inverted undertie\"}},\"key\":\"2054\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"flower punctuation mark\"}},\"key\":\"2055\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"three dot punctuation\"}},\"key\":\"2056\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"quadruple prime\"}},\"key\":\"2057\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"four dot punctuation\"}},\"key\":\"2058\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"five dot punctuation\"}},\"key\":\"2059\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"two dot punctuation\"}},\"key\":\"205A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"four dot mark\"}},\"key\":\"205B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"dotted cross\"}},\"key\":\"205C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"tricolon\"}},\"key\":\"205D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"vertical four dots\"}},\"key\":\"205E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superscript plus\"}},\"key\":\"207A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superscript minus\"}},\"key\":\"207B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superscript equals\"}},\"key\":\"207C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"superscript left parenthesis\"}},\"key\":\"207D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"superscript right parenthesis\"}},\"key\":\"207E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subscript plus\"}},\"key\":\"208A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subscript minus\"}},\"key\":\"208B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subscript equals\"}},\"key\":\"208C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"subscript left parenthesis\"}},\"key\":\"208D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"subscript right parenthesis\"}},\"key\":\"208E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"property line\"}},\"key\":\"214A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"turned ampersand\"}},\"key\":\"214B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"per\"}},\"key\":\"214C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"aktieselskab\"}},\"key\":\"214D\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"turned small f\"}},\"key\":\"214E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"for all\"}},\"key\":\"2200\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"complement\"}},\"key\":\"2201\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"there exists\"}},\"key\":\"2203\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"there does not exist\"}},\"key\":\"2204\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"empty set\"}},\"key\":\"2205\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"increment\"}},\"key\":\"2206\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of\"},\"clearspeak\":{\"default\":\"is a member of\",\"SetMemberSymbol_Member\":\"is a member of\",\"SetMemberSymbol_Element\":\"is an element of\",\"SetMemberSymbol_In\":\"is in\",\"SetMemberSymbol_Belongs\":\"belongs to\"}},\"key\":\"2208\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not an element of\"},\"clearspeak\":{\"default\":\"is not a member of\",\"SetMemberSymbol_Member\":\"is not a member of\",\"SetMemberSymbol_Element\":\"is not an element of\",\"SetMemberSymbol_In\":\"is not in\",\"SetMemberSymbol_Belongs\":\"does not belong to\"}},\"key\":\"2209\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small element of\"},\"clearspeak\":{\"default\":\"is a member of\",\"SetMemberSymbol_Member\":\"is a member of\",\"SetMemberSymbol_Element\":\"is an element of\",\"SetMemberSymbol_In\":\"is in\",\"SetMemberSymbol_Belongs\":\"belongs to\"}},\"key\":\"220A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains as member\"}},\"key\":\"220B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not contain as member\"}},\"key\":\"220C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small contains as member\"}},\"key\":\"220D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"end of proof\"}},\"key\":\"220E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"product\"}},\"key\":\"220F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"coproduct\"}},\"key\":\"2210\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"sum\"},\"mathspeak\":{\"default\":\"sigma summation\"}},\"key\":\"2211\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus\"}},\"key\":\"2212\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus or plus\"}},\"key\":\"2213\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"dot plus\"}},\"key\":\"2214\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"division slash\"}},\"key\":\"2215\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"set minus\"}},\"key\":\"2216\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"asterisk\"}},\"key\":\"2217\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"ring\"},\"clearspeak\":{\"default\":\"composed with\"}},\"key\":\"2218\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bullet\"}},\"key\":\"2219\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square root\"}},\"key\":\"221A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"cube root\"}},\"key\":\"221B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"fourth root\"}},\"key\":\"221C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"proportional to\"}},\"key\":\"221D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"infinity\"}},\"key\":\"221E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right angle\"}},\"key\":\"221F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"angle\"}},\"key\":\"2220\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured angle\"}},\"key\":\"2221\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"spherical angle\"}},\"key\":\"2222\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar\",\"alternative\":\"divides\"}},\"key\":\"2223\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not divide\"}},\"key\":\"2224\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"parallel to\"}},\"key\":\"2225\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not parallel to\"}},\"key\":\"2226\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and\"}},\"key\":\"2227\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or\"}},\"key\":\"2228\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection\"}},\"key\":\"2229\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union\"}},\"key\":\"222A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral\"}},\"key\":\"222B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double integral\"}},\"key\":\"222C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple integral\"}},\"key\":\"222D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contour integral\"}},\"key\":\"222E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"surface integral\"}},\"key\":\"222F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"volume integral\"}},\"key\":\"2230\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"clockwise integral\"}},\"key\":\"2231\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"clockwise contour integral\"}},\"key\":\"2232\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"anticlockwise contour integral\"}},\"key\":\"2233\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"therefore\"}},\"key\":\"2234\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"because\"}},\"key\":\"2235\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"ratio\"}},\"key\":\"2236\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"proportion\"}},\"key\":\"2237\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"dot minus\"}},\"key\":\"2238\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"excess\"}},\"key\":\"2239\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"geometric proportion\"}},\"key\":\"223A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"homothetic\"}},\"key\":\"223B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"key\":\"223C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed tilde\"}},\"key\":\"223D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"inverted lazy s\"}},\"key\":\"223E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"sine wave\"}},\"key\":\"223F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"wreath product\"}},\"key\":\"2240\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not tilde\"}},\"key\":\"2241\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus tilde\"}},\"key\":\"2242\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"asymptotically equals\"}},\"key\":\"2243\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not asymptotically equals\"}},\"key\":\"2244\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"approximately equals\"}},\"key\":\"2245\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"approximately but not actually equals\"}},\"key\":\"2246\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither approximately nor actually equals\"}},\"key\":\"2247\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"almost equals\"}},\"key\":\"2248\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not almost equals\"}},\"key\":\"2249\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"almost equal or equals\"}},\"key\":\"224A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple tilde\"}},\"key\":\"224B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"all equals\"}},\"key\":\"224C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equivalent to\"}},\"key\":\"224D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"geometrically equivalent to\"}},\"key\":\"224E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"difference between\"}},\"key\":\"224F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"approaches the limit\"}},\"key\":\"2250\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"geometrically equals\"}},\"key\":\"2251\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"approximately equals or the image of\"}},\"key\":\"2252\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"image of or approximately equals\"}},\"key\":\"2253\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"colon equals\"}},\"key\":\"2254\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals colon\"}},\"key\":\"2255\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"ring in equals\"}},\"key\":\"2256\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"ring equals\"}},\"key\":\"2257\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"corresponds to\"}},\"key\":\"2258\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"estimates\"}},\"key\":\"2259\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equiangular to\"},\"clearspeak\":{\"default\":\"is equiangular to\"}},\"key\":\"225A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"star equals\"}},\"key\":\"225B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"delta equals\"}},\"key\":\"225C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals by definition\"},\"clearspeak\":{\"default\":\"is defined to be\"}},\"key\":\"225D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"measured by\"},\"clearspeak\":{\"default\":\"is measured by\"}},\"key\":\"225E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"questioned equals\"}},\"key\":\"225F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not equals\"},\"clearspeak\":{\"default\":\"is not equal to\"}},\"key\":\"2260\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"identical to\"},\"clearspeak\":{\"default\":\"is identical to\"}},\"key\":\"2261\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not identical to\"},\"clearspeak\":{\"default\":\"is not identical to\"}},\"key\":\"2262\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"strictly equivalent to\"},\"clearspeak\":{\"default\":\"is strictly equivalent to\"}},\"key\":\"2263\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or equals\"},\"clearspeak\":{\"default\":\"is less than or equal to\"}},\"key\":\"2264\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or equals\"},\"clearspeak\":{\"default\":\"is greater than or equal to\"}},\"key\":\"2265\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than over equals\"},\"clearspeak\":{\"default\":\"is less than over equals\"}},\"key\":\"2266\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than over equals\"},\"clearspeak\":{\"default\":\"is greater than over equals\"}},\"key\":\"2267\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than but not equals\"},\"clearspeak\":{\"default\":\"is less than but not equal to\"}},\"key\":\"2268\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than but not equals\"},\"clearspeak\":{\"default\":\"is greater than but not equal to\"}},\"key\":\"2269\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"much less than\"},\"clearspeak\":{\"default\":\"is much less than\"}},\"key\":\"226A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"much greater than\"},\"clearspeak\":{\"default\":\"is much greater than\"}},\"key\":\"226B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"between\"}},\"key\":\"226C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not equivalent to\"},\"clearspeak\":{\"default\":\"is not equivalent to\"}},\"key\":\"226D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not less than\"},\"clearspeak\":{\"default\":\"is not less than\"}},\"key\":\"226E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not greater than\"},\"clearspeak\":{\"default\":\"is not greater than\"}},\"key\":\"226F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither less than nor equals\"},\"clearspeak\":{\"default\":\"is neither less than nor equal to\"}},\"key\":\"2270\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither greater than nor equals\"},\"clearspeak\":{\"default\":\"is neither greater than nor equal to\"}},\"key\":\"2271\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or equivalent to\"},\"clearspeak\":{\"default\":\"is less than or equivalent to\"}},\"key\":\"2272\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or equivalent to\"},\"clearspeak\":{\"default\":\"is greater than or equivalent to\"}},\"key\":\"2273\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither less than nor equivalent to\"},\"clearspeak\":{\"default\":\"is neither less than nor equivalent to\"}},\"key\":\"2274\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither greater than nor equivalent to\"},\"clearspeak\":{\"default\":\"is neither greater than nor equivalent to\"}},\"key\":\"2275\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or greater than\"},\"clearspeak\":{\"default\":\"is less than or greater than\"}},\"key\":\"2276\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or less than\"},\"clearspeak\":{\"default\":\"is greater than or less than\"}},\"key\":\"2277\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither less than nor greater than\"},\"clearspeak\":{\"default\":\"is neither less than nor greater than\"}},\"key\":\"2278\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither greater than nor less than\"},\"clearspeak\":{\"default\":\"is neither greater than nor less than\"}},\"key\":\"2279\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes\"}},\"key\":\"227A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds\"}},\"key\":\"227B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes or equal to\"}},\"key\":\"227C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds or equal to\"}},\"key\":\"227D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes or equivalent to\"}},\"key\":\"227E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds or equivalent to\"}},\"key\":\"227F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not precede\"}},\"key\":\"2280\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not succeed\"}},\"key\":\"2281\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of\"}},\"key\":\"2282\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of\"}},\"key\":\"2283\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not a subset of\"}},\"key\":\"2284\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not a superset of\"}},\"key\":\"2285\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of or equal to\"}},\"key\":\"2286\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of or equal to\"}},\"key\":\"2287\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither a subset of nor equal to\"}},\"key\":\"2288\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"neither a superset of nor equal to\"}},\"key\":\"2289\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of or not equals\"}},\"key\":\"228A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of or not equals\"}},\"key\":\"228B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiset\"}},\"key\":\"228C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiset multiplication\"}},\"key\":\"228D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiset union\"}},\"key\":\"228E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square image of\"}},\"key\":\"228F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square original of\"}},\"key\":\"2290\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square image of or equal to\"}},\"key\":\"2291\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square original of or equal to\"}},\"key\":\"2292\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square cap\"}},\"key\":\"2293\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square cup\"}},\"key\":\"2294\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled plus\"}},\"key\":\"2295\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled minus\"}},\"key\":\"2296\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled times\"}},\"key\":\"2297\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled division slash\"}},\"key\":\"2298\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled dot\"}},\"key\":\"2299\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled ring\"}},\"key\":\"229A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled asterisk\"}},\"key\":\"229B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled equals\"}},\"key\":\"229C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled dash\"}},\"key\":\"229D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared plus\"}},\"key\":\"229E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared minus\"}},\"key\":\"229F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared times\"}},\"key\":\"22A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared dot\"}},\"key\":\"22A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right tack\"}},\"key\":\"22A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left tack\"}},\"key\":\"22A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down tack\"}},\"key\":\"22A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up tack\"}},\"key\":\"22A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"assertion\"}},\"key\":\"22A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"models\"}},\"key\":\"22A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"true\"}},\"key\":\"22A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"forces\"}},\"key\":\"22A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple vertical bar right turnstile\"}},\"key\":\"22AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double vertical bar double right turnstile\"}},\"key\":\"22AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not prove\"}},\"key\":\"22AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not true\"}},\"key\":\"22AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not force\"}},\"key\":\"22AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"negated double vertical bar double right turnstile\"}},\"key\":\"22AF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes under relation\"}},\"key\":\"22B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds under relation\"}},\"key\":\"22B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"normal subgroup of\"}},\"key\":\"22B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains as normal subgroup\"}},\"key\":\"22B3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"normal subgroup of or equal to\"}},\"key\":\"22B4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains as normal subgroup or equal to\"}},\"key\":\"22B5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"original of\"}},\"key\":\"22B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"image of\"}},\"key\":\"22B7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multimap\"}},\"key\":\"22B8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"hermitian conjugate matrix\"}},\"key\":\"22B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intercalate\"}},\"key\":\"22BA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"xor\"}},\"key\":\"22BB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"nand\"}},\"key\":\"22BC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"nor\"}},\"key\":\"22BD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right triangle\"}},\"key\":\"22BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary and\"},\"mathspeak\":{\"default\":\"and\"}},\"key\":\"22C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary or\"},\"mathspeak\":{\"default\":\"or\"}},\"key\":\"22C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary intersection\"},\"mathspeak\":{\"default\":\"intersection\"}},\"key\":\"22C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary union\"},\"mathspeak\":{\"default\":\"union\"}},\"key\":\"22C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"diamond\"}},\"key\":\"22C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"dot\"},\"clearspeak\":{\"default\":\"times\",\"MultsymbolDot_Dot\":\"dot\"}},\"key\":\"22C5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"star\"}},\"key\":\"22C6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"division times\"}},\"key\":\"22C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bowtie\"}},\"key\":\"22C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left normal factor semidirect product\"}},\"key\":\"22C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right normal factor semidirect product\"}},\"key\":\"22CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left semidirect product\"}},\"key\":\"22CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right semidirect product\"}},\"key\":\"22CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed tilde equals\"}},\"key\":\"22CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"curly or\"}},\"key\":\"22CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"curly and\"}},\"key\":\"22CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double subset\"}},\"key\":\"22D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double superset\"}},\"key\":\"22D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double intersection\"}},\"key\":\"22D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double union\"}},\"key\":\"22D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"pitchfork\"}},\"key\":\"22D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equal and parallel to\"},\"clearspeak\":{\"default\":\"is equal and parallel to\"}},\"key\":\"22D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than dot\"},\"clearspeak\":{\"default\":\"is less than dot\"}},\"key\":\"22D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than dot\"},\"clearspeak\":{\"default\":\"is greater than dot\"}},\"key\":\"22D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"very much less than\"},\"clearspeak\":{\"default\":\"is very much less than\"}},\"key\":\"22D8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"very much greater than\"},\"clearspeak\":{\"default\":\"is very much greater than\"}},\"key\":\"22D9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than equals or greater than\"},\"clearspeak\":{\"default\":\"is less than equal to or greater than\"}},\"key\":\"22DA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than equals or less than\"},\"clearspeak\":{\"default\":\"is greater than equal to or less than\"}},\"key\":\"22DB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals or less than\"},\"clearspeak\":{\"default\":\"is equal to or less than\"}},\"key\":\"22DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals or greater than\"},\"clearspeak\":{\"default\":\"is equal to or greater than\"}},\"key\":\"22DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals or precedes\"},\"clearspeak\":{\"default\":\"is equal to or precedes\"}},\"key\":\"22DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals or succeeds\"},\"clearspeak\":{\"default\":\"is equal to or succeeds\"}},\"key\":\"22DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not precede or equal\"}},\"key\":\"22E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not succeed or equal\"}},\"key\":\"22E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not square image of or equals\"},\"clearspeak\":{\"default\":\"is not square image of or equal to\"}},\"key\":\"22E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not square original of or equals\"},\"clearspeak\":{\"default\":\"is not square original of or equal to\"}},\"key\":\"22E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square image of or not equals\"},\"clearspeak\":{\"default\":\"is square image of or not equal to\"}},\"key\":\"22E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square original of or not equals\"},\"clearspeak\":{\"default\":\"is square original of or not equal to\"}},\"key\":\"22E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than but not equivalent to\"},\"clearspeak\":{\"default\":\"is less than but not equivalent to\"}},\"key\":\"22E6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than but not equivalent to\"},\"clearspeak\":{\"default\":\"is greater than but not equivalent to\"}},\"key\":\"22E7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes but not equivalent to\"}},\"key\":\"22E8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds but not equivalent to\"}},\"key\":\"22E9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not normal subgroup of\"},\"clearspeak\":{\"default\":\"is not normal subgroup of\"}},\"key\":\"22EA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not contain as normal subgroup\"}},\"key\":\"22EB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not normal subgroup of or equals\"},\"clearspeak\":{\"default\":\"is not normal subgroup of or equal to\"}},\"key\":\"22EC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not contain as normal subgroup or equal\"}},\"key\":\"22ED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical ellipsis\"}},\"key\":\"22EE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"midline horizontal ellipsis\"},\"clearspeak\":{\"default\":\"dot dot dot\"}},\"key\":\"22EF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up right diagonal ellipsis\"}},\"key\":\"22F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down right diagonal ellipsis\"}},\"key\":\"22F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with long horizontal stroke\"}},\"key\":\"22F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with vertical bar at end of horizontal stroke\"}},\"key\":\"22F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small element of with vertical bar at end of horizontal stroke\"}},\"key\":\"22F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with dot above\"}},\"key\":\"22F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with overbar\"}},\"key\":\"22F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small element of with overbar\"}},\"key\":\"22F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with underbar\"}},\"key\":\"22F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of with two horizontal strokes\"}},\"key\":\"22F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains with long horizontal stroke\"}},\"key\":\"22FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains with vertical bar at end of horizontal stroke\"}},\"key\":\"22FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small contains with vertical bar at end of horizontal stroke\"}},\"key\":\"22FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"contains with overbar\"}},\"key\":\"22FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small contains with overbar\"}},\"key\":\"22FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation bag membership\"}},\"key\":\"22FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"diameter sign\"}},\"key\":\"2300\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"house\"}},\"key\":\"2302\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"projective\"}},\"key\":\"2305\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"perspective\"}},\"key\":\"2306\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"wavy line\"}},\"key\":\"2307\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"reversed not\"}},\"key\":\"2310\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"square lozenge\"}},\"key\":\"2311\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"arc\"}},\"key\":\"2312\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"segment\"}},\"key\":\"2313\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"sector\"}},\"key\":\"2314\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bold plus\"}},\"key\":\"2795\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bold minus\"}},\"key\":\"2796\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"bold division\"}},\"key\":\"2797\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"curly loop\"}},\"key\":\"27B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"double curly loop\"}},\"key\":\"27BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white triangle containing small white triangle\"}},\"key\":\"27C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"perpendicular\"}},\"key\":\"27C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"open subset\"}},\"key\":\"27C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"open superset\"}},\"key\":\"27C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with dot inside\"}},\"key\":\"27C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"backslash preceding subset\"}},\"key\":\"27C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset preceding solidus\"}},\"key\":\"27C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar with horizontal stroke\"}},\"key\":\"27CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"rising diagonal\"}},\"key\":\"27CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long division\"}},\"key\":\"27CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"falling diagonal\"}},\"key\":\"27CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared and\"}},\"key\":\"27CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared or\"}},\"key\":\"27CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white diamond with centered dot\"}},\"key\":\"27D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with dot\"}},\"key\":\"27D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of opening upwards\"}},\"key\":\"27D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"lower right corner with dot\"}},\"key\":\"27D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"upper left corner with dot\"}},\"key\":\"27D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left outer join\"}},\"key\":\"27D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right outer join\"}},\"key\":\"27D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"full outer join\"}},\"key\":\"27D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"large up tack\"}},\"key\":\"27D8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"large down tack\"}},\"key\":\"27D9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left and right double turnstile\"}},\"key\":\"27DA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left and right tack\"}},\"key\":\"27DB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left multimap\"}},\"key\":\"27DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long right tack\"}},\"key\":\"27DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long left tack\"}},\"key\":\"27DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"up tack with circle above\"}},\"key\":\"27DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"lozenge divided by horizontal rule\"}},\"key\":\"27E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white concave sided diamond\"}},\"key\":\"27E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white concave sided diamond with leftwards tick\"}},\"key\":\"27E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white concave sided diamond with rightwards tick\"}},\"key\":\"27E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white square with leftwards tick\"}},\"key\":\"27E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white square with rightwards tick\"}},\"key\":\"27E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"rising diagonal crossing falling diagonal\"}},\"key\":\"292B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"falling diagonal crossing rising diagonal\"}},\"key\":\"292C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple vertical bar delimiter\"}},\"key\":\"2980\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation spot\"}},\"key\":\"2981\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation type colon\"}},\"key\":\"2982\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"dotted fence\"}},\"key\":\"2999\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical zigzag line\"}},\"key\":\"299A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed empty set\"}},\"key\":\"29B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"empty set with overbar\"}},\"key\":\"29B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"empty set with small circle above\"}},\"key\":\"29B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circle with horizontal bar\"}},\"key\":\"29B5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled vertical bar\"}},\"key\":\"29B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled parallel\"}},\"key\":\"29B7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled backslash\"}},\"key\":\"29B8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled perpendicular\"}},\"key\":\"29B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circle divided by horizontal bar and top half divided by vertical bar\"}},\"key\":\"29BA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circle with superimposed x\"}},\"key\":\"29BB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled anticlockwise rotated division\"}},\"key\":\"29BC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled white bullet\"}},\"key\":\"29BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled bullet\"}},\"key\":\"29BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled less than\"}},\"key\":\"29C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled greater than\"}},\"key\":\"29C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circle with small circle to the right\"}},\"key\":\"29C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circle with two horizontal strokes to the right\"}},\"key\":\"29C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared rising diagonal slash\"}},\"key\":\"29C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared falling diagonal slash\"}},\"key\":\"29C5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared asterisk\"}},\"key\":\"29C6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared small circle\"}},\"key\":\"29C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"squared square\"}},\"key\":\"29C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two joined squares\"}},\"key\":\"29C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triangle with dot above\"}},\"key\":\"29CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triangle with underbar\"}},\"key\":\"29CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"s in triangle\"}},\"key\":\"29CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triangle with serifs at bottom\"}},\"key\":\"29CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"right triangle above left triangle\"}},\"key\":\"29CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"left triangle beside vertical bar\"}},\"key\":\"29CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar beside right triangle\"}},\"key\":\"29D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bowtie with left half black\"}},\"key\":\"29D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"bowtie with right half black\"}},\"key\":\"29D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black bowtie\"}},\"key\":\"29D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"times with left half black\"}},\"key\":\"29D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"times with right half black\"}},\"key\":\"29D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white hourglass\"}},\"key\":\"29D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black hourglass\"}},\"key\":\"29D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"incomplete infinity\"}},\"key\":\"29DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tie over infinity\"}},\"key\":\"29DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"infinity negated with vertical bar\"}},\"key\":\"29DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double ended multimap\"}},\"key\":\"29DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square with contoured outline\"}},\"key\":\"29E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"increases as\"}},\"key\":\"29E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"shuffle product\"}},\"key\":\"29E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals and slanted parallel\"}},\"key\":\"29E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals and slanted parallel with tilde above\"}},\"key\":\"29E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"identical to and slanted parallel\"}},\"key\":\"29E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"gleich stark\"}},\"key\":\"29E6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"thermodynamic\"}},\"key\":\"29E7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down pointing triangle with left half black\"}},\"key\":\"29E8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down pointing triangle with right half black\"}},\"key\":\"29E9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"black lozenge\"}},\"key\":\"29EB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred white square\"}},\"key\":\"29EE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred black square\"}},\"key\":\"29EF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred white diamond\"}},\"key\":\"29F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred black diamond\"}},\"key\":\"29F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred white circle\"}},\"key\":\"29F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"error barred black circle\"}},\"key\":\"29F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"rule delayed\"}},\"key\":\"29F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"backslash\"}},\"key\":\"29F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"solidus with overbar\"}},\"key\":\"29F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"backslash with horizontal stroke\"}},\"key\":\"29F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"big solidus\"},\"mathspeak\":{\"default\":\"solidus\"}},\"key\":\"29F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"big backslash\"},\"mathspeak\":{\"default\":\"backslash\"}},\"key\":\"29F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double plus\"}},\"key\":\"29FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple plus\"}},\"key\":\"29FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tiny\"}},\"key\":\"29FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"miny\"}},\"key\":\"29FF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary circled dot\"},\"mathspeak\":{\"default\":\"circled dot\"}},\"key\":\"2A00\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary circled plus\"},\"mathspeak\":{\"default\":\"circled plus\"}},\"key\":\"2A01\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary circled times\"},\"mathspeak\":{\"default\":\"circled times\"}},\"key\":\"2A02\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary union with dot\"},\"mathspeak\":{\"default\":\"union with dot\"}},\"key\":\"2A03\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary union operator with plus\"},\"mathspeak\":{\"default\":\"union with plus\"}},\"key\":\"2A04\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary square intersection\"},\"mathspeak\":{\"default\":\"square intersection\"}},\"key\":\"2A05\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary square union\"},\"mathspeak\":{\"default\":\"square union\"}},\"key\":\"2A06\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two and\"}},\"key\":\"2A07\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two or\"}},\"key\":\"2A08\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary times\"},\"mathspeak\":{\"default\":\"times\"}},\"key\":\"2A09\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"modulo two sum\"}},\"key\":\"2A0A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"summation with integral\"}},\"key\":\"2A0B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"quadruple integral\"}},\"key\":\"2A0C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"finite part integral\"}},\"key\":\"2A0D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with double stroke\"}},\"key\":\"2A0E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral average with slash\"}},\"key\":\"2A0F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circulation function\"}},\"key\":\"2A10\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"anticlockwise integration\"}},\"key\":\"2A11\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"line integration with rectangular path around pole\"}},\"key\":\"2A12\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"line integration with semicircular path around pole\"}},\"key\":\"2A13\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"line integration not including the pole\"}},\"key\":\"2A14\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral around a point\"}},\"key\":\"2A15\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"quaternion integral\"}},\"key\":\"2A16\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with times\"}},\"key\":\"2A18\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with intersection\"}},\"key\":\"2A19\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with union\"}},\"key\":\"2A1A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with overbar\"}},\"key\":\"2A1B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"integral with underbar\"}},\"key\":\"2A1C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"join\"}},\"key\":\"2A1D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"large left triangle\"}},\"key\":\"2A1E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation schema composition\"}},\"key\":\"2A1F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation schema piping\"}},\"key\":\"2A20\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation schema projection\"}},\"key\":\"2A21\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus with circle above\"}},\"key\":\"2A22\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus hat\"}},\"key\":\"2A23\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus tilde\"}},\"key\":\"2A24\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus underdot\"}},\"key\":\"2A25\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign with tilde below\"}},\"key\":\"2A26\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign with subscript two\"}},\"key\":\"2A27\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign with black triangle\"}},\"key\":\"2A28\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus sign with comma above\"}},\"key\":\"2A29\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus sign with dot below\"}},\"key\":\"2A2A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus sign with falling dots\"}},\"key\":\"2A2B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus sign with rising dots\"}},\"key\":\"2A2C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign in left half circle\"}},\"key\":\"2A2D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign in right half circle\"}},\"key\":\"2A2E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vector or cross product\"}},\"key\":\"2A2F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign with dot above\"}},\"key\":\"2A30\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign with underbar\"}},\"key\":\"2A31\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"semidirect product with bottom closed\"}},\"key\":\"2A32\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"smash product\"}},\"key\":\"2A33\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign in left half circle\"}},\"key\":\"2A34\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign in right half circle\"}},\"key\":\"2A35\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled multiplication sign with circumflex accent\"}},\"key\":\"2A36\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign in double circle\"}},\"key\":\"2A37\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"circled division\"}},\"key\":\"2A38\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign in triangle\"}},\"key\":\"2A39\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"minus sign in triangle\"}},\"key\":\"2A3A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"multiplication sign in triangle\"}},\"key\":\"2A3B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"interior product\"}},\"key\":\"2A3C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"righthand interior product\"}},\"key\":\"2A3D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation relational composition\"}},\"key\":\"2A3E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"amalgamation or coproduct\"}},\"key\":\"2A3F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection with dot\"}},\"key\":\"2A40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union with minus\"}},\"key\":\"2A41\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union with overbar\"}},\"key\":\"2A42\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection with overbar\"}},\"key\":\"2A43\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection with and\"}},\"key\":\"2A44\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union with or\"}},\"key\":\"2A45\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union above intersection\"}},\"key\":\"2A46\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection above union\"}},\"key\":\"2A47\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union above bar above intersection\"}},\"key\":\"2A48\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection above bar above union\"}},\"key\":\"2A49\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"union beside and joined with union\"}},\"key\":\"2A4A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"intersection beside and joined with intersection\"}},\"key\":\"2A4B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed union with serifs\"}},\"key\":\"2A4C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed intersection with serifs\"}},\"key\":\"2A4D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double square intersection\"}},\"key\":\"2A4E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double square union\"}},\"key\":\"2A4F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed union with serifs and smash product\"}},\"key\":\"2A50\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with dot above\"}},\"key\":\"2A51\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with dot above\"}},\"key\":\"2A52\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double and\"}},\"key\":\"2A53\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double or\"}},\"key\":\"2A54\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two intersecting and\"}},\"key\":\"2A55\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two intersecting or\"}},\"key\":\"2A56\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"sloping large or\"}},\"key\":\"2A57\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"sloping large and\"}},\"key\":\"2A58\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or overlapping and\"}},\"key\":\"2A59\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with middle stem\"}},\"key\":\"2A5A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with middle stem\"}},\"key\":\"2A5B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with horizontal dash\"}},\"key\":\"2A5C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with horizontal dash\"}},\"key\":\"2A5D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with double overbar\"}},\"key\":\"2A5E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with underbar\"}},\"key\":\"2A5F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"and with double underbar\"}},\"key\":\"2A60\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small vee with underbar\"}},\"key\":\"2A61\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with double overbar\"}},\"key\":\"2A62\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"or with double underbar\"}},\"key\":\"2A63\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation domain antirestriction\"}},\"key\":\"2A64\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"z notation range antirestriction\"}},\"key\":\"2A65\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals sign with dot below\"}},\"key\":\"2A66\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"identical with dot above\"}},\"key\":\"2A67\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple horizontal bar with double vertical stroke\"}},\"key\":\"2A68\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple horizontal bar with triple vertical stroke\"}},\"key\":\"2A69\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde with dot above\"}},\"key\":\"2A6A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde with rising dots\"}},\"key\":\"2A6B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"similar minus similar\"}},\"key\":\"2A6C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"congruent with dot above\"}},\"key\":\"2A6D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals with asterisk\"}},\"key\":\"2A6E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"almost equal hat\"}},\"key\":\"2A6F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"approximately equal or equal to\"}},\"key\":\"2A70\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals above plus\"}},\"key\":\"2A71\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus above equals\"}},\"key\":\"2A72\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals above tilde\"}},\"key\":\"2A73\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double colon equal\"}},\"key\":\"2A74\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"two consecutive equals\"}},\"key\":\"2A75\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"three consecutive equals\"}},\"key\":\"2A76\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals sign with two dots above and two dots below\"}},\"key\":\"2A77\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equivalent with four dots above\"}},\"key\":\"2A78\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than with circle inside\"}},\"key\":\"2A79\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than with circle inside\"}},\"key\":\"2A7A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than with question mark above\"}},\"key\":\"2A7B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than with question mark above\"}},\"key\":\"2A7C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or slanted equals\"}},\"key\":\"2A7D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or slanted equals\"}},\"key\":\"2A7E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or slanted equals with dot inside\"}},\"key\":\"2A7F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or slanted equals with dot inside\"}},\"key\":\"2A80\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or slanted equals with dot above\"}},\"key\":\"2A81\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or slanted equals with dot above\"}},\"key\":\"2A82\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or slanted equals with dot above right\"}},\"key\":\"2A83\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or slanted equals with dot above left\"}},\"key\":\"2A84\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than or approximate\"}},\"key\":\"2A85\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than or approximate\"}},\"key\":\"2A86\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than and single line not equals\"}},\"key\":\"2A87\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than and single line not equals\"}},\"key\":\"2A88\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than and not approximate\"}},\"key\":\"2A89\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than and not approximate\"}},\"key\":\"2A8A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above double line equal above greater than\"}},\"key\":\"2A8B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above double line equal above less than\"}},\"key\":\"2A8C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above similar or equal\"}},\"key\":\"2A8D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above similar or equal\"}},\"key\":\"2A8E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above similar above greater than\"}},\"key\":\"2A8F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above similar above less than\"}},\"key\":\"2A90\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above greater than above double line equal\"}},\"key\":\"2A91\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above less than above double line equal\"}},\"key\":\"2A92\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than above slanted equal above greater than above slanted equal\"}},\"key\":\"2A93\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than above slanted equal above less than above slanted equal\"}},\"key\":\"2A94\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"slanted equals or less than\"}},\"key\":\"2A95\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"slanted equals or greater than\"}},\"key\":\"2A96\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"slanted equals or less than with dot inside\"}},\"key\":\"2A97\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"slanted equals or greater than with dot inside\"}},\"key\":\"2A98\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line equals or less than\"}},\"key\":\"2A99\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line equals or greater than\"}},\"key\":\"2A9A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line slanted equals or less than\"}},\"key\":\"2A9B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line slanted equals or greater than\"}},\"key\":\"2A9C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"similar or less than\"}},\"key\":\"2A9D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"similar or greater than\"}},\"key\":\"2A9E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"similar above less than above equals sign\"}},\"key\":\"2A9F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"similar above greater than above equals sign\"}},\"key\":\"2AA0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double nested less than\"}},\"key\":\"2AA1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double nested greater than\"}},\"key\":\"2AA2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double nested less than with underbar\"}},\"key\":\"2AA3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than overlapping less than\"}},\"key\":\"2AA4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than beside less than\"}},\"key\":\"2AA5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than closed by curve\"}},\"key\":\"2AA6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than closed by curve\"}},\"key\":\"2AA7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than closed by curve above slanted equal\"}},\"key\":\"2AA8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than closed by curve above slanted equal\"}},\"key\":\"2AA9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"smaller than\"},\"clearspeak\":{\"default\":\"is smaller than\"}},\"key\":\"2AAA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"larger than\"},\"clearspeak\":{\"default\":\"is larger than\"}},\"key\":\"2AAB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"smaller than or equals\"},\"clearspeak\":{\"default\":\"is smaller than or equal to\"}},\"key\":\"2AAC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"larger than or equal\"},\"clearspeak\":{\"default\":\"is larger than or equal to\"}},\"key\":\"2AAD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals with bumpy above\"}},\"key\":\"2AAE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above single line equals sign\"}},\"key\":\"2AAF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above single line equals sign\"}},\"key\":\"2AB0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above single line not equals\"}},\"key\":\"2AB1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above single line not equals\"}},\"key\":\"2AB2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above equals\"}},\"key\":\"2AB3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above equals\"}},\"key\":\"2AB4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above not equals\"}},\"key\":\"2AB5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above not equals\"}},\"key\":\"2AB6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above almost equals\"}},\"key\":\"2AB7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above almost equals\"}},\"key\":\"2AB8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"precedes above not almost equals\"}},\"key\":\"2AB9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"succeeds above not almost equals\"}},\"key\":\"2ABA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double precedes\"}},\"key\":\"2ABB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double succeeds\"}},\"key\":\"2ABC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset with dot\"}},\"key\":\"2ABD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset with dot\"}},\"key\":\"2ABE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset with plus sign below\"}},\"key\":\"2ABF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset with plus sign below\"}},\"key\":\"2AC0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset with multiplication sign below\"}},\"key\":\"2AC1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset with multiplication sign below\"}},\"key\":\"2AC2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of or equals with dot above\"}},\"key\":\"2AC3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of or equals with dot above\"}},\"key\":\"2AC4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of above equals sign\"}},\"key\":\"2AC5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of above equals sign\"}},\"key\":\"2AC6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of above tilde\"}},\"key\":\"2AC7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of above tilde\"}},\"key\":\"2AC8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of above almost equals\"}},\"key\":\"2AC9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of above almost equals\"}},\"key\":\"2ACA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset of above not equals\"}},\"key\":\"2ACB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset of above not equals\"}},\"key\":\"2ACC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square left open box\"}},\"key\":\"2ACD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"square right open box\"}},\"key\":\"2ACE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed subset\"}},\"key\":\"2ACF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed superset\"}},\"key\":\"2AD0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed subset or equals\"}},\"key\":\"2AD1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"closed superset or equals\"}},\"key\":\"2AD2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset above superset\"}},\"key\":\"2AD3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset above subset\"}},\"key\":\"2AD4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"subset above subset\"}},\"key\":\"2AD5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset above superset\"}},\"key\":\"2AD6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset beside subset\"}},\"key\":\"2AD7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"superset beside and joined by dash with subset\"}},\"key\":\"2AD8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"element of opening downwards\"}},\"key\":\"2AD9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"pitchfork with tee top\"}},\"key\":\"2ADA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"transversal intersection\"}},\"key\":\"2ADB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"forking\"}},\"key\":\"2ADC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"nonforking\"}},\"key\":\"2ADD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short left tack\"}},\"key\":\"2ADE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short down tack\"}},\"key\":\"2ADF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short up tack\"}},\"key\":\"2AE0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"perpendicular with s\"}},\"key\":\"2AE1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar triple right turnstile\"}},\"key\":\"2AE2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double vertical bar left turnstile\"}},\"key\":\"2AE3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar double left turnstile\"}},\"key\":\"2AE4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double vertical bar double left turnstile\"}},\"key\":\"2AE5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"long dash from left member of double vertical\"}},\"key\":\"2AE6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short down tack with overbar\"}},\"key\":\"2AE7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short up tack with underbar\"}},\"key\":\"2AE8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"short up tack above short down tack\"}},\"key\":\"2AE9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double down tack\"}},\"key\":\"2AEA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double up tack\"}},\"key\":\"2AEB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double stroke not sign\"}},\"key\":\"2AEC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"reversed double stroke not sign\"}},\"key\":\"2AED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"does not divide with reversed negation slash\"}},\"key\":\"2AEE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical line with circle above\"}},\"key\":\"2AEF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical line with circle below\"}},\"key\":\"2AF0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"down tack with circle below\"}},\"key\":\"2AF1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"parallel with horizontal stroke\"}},\"key\":\"2AF2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"parallel with tilde\"}},\"key\":\"2AF3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple vertical bar binary relation\"}},\"key\":\"2AF4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple vertical bar with horizontal stroke\"}},\"key\":\"2AF5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple colon\"}},\"key\":\"2AF6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple nested less than\"}},\"key\":\"2AF7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple nested greater than\"}},\"key\":\"2AF8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line slanted less than or equals\"}},\"key\":\"2AF9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double line slanted greater than or equals\"}},\"key\":\"2AFA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"triple solidus binary relation\"}},\"key\":\"2AFB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"large triple vertical bar\"}},\"key\":\"2AFC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"double solidus\"}},\"key\":\"2AFD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"white vertical bar\"}},\"key\":\"2AFE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"n ary white vertical bar\"},\"mathspeak\":{\"default\":\"white vertical bar\"}},\"key\":\"2AFF\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"wave dash\"}},\"key\":\"301C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical comma\"}},\"key\":\"FE10\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical colon\"}},\"key\":\"FE13\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical semicolon\"}},\"key\":\"FE14\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical exclamation mark\"}},\"key\":\"FE15\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical question mark\"}},\"key\":\"FE16\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"presentation form for vertical horizontal ellipsis\"}},\"key\":\"FE19\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"glyph for vertical two dot leader\"}},\"key\":\"FE30\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"glyph for vertical em dash\"}},\"key\":\"FE31\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"glyph for vertical en dash\"}},\"key\":\"FE32\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"glyph for vertical underline\"}},\"key\":\"FE33\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"glyph for vertical wavy underline\"}},\"key\":\"FE34\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"sesame dot\"}},\"key\":\"FE45\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"white sesame dot\"}},\"key\":\"FE46\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"dashed overline\"}},\"key\":\"FE49\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"dash dot overline\"}},\"key\":\"FE4A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"wavy overline\"}},\"key\":\"FE4B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"double wavy overline\"}},\"key\":\"FE4C\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"dashed underline\"}},\"key\":\"FE4D\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"dash dot underline\"}},\"key\":\"FE4E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"wavy underline\"}},\"key\":\"FE4F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small comma\"}},\"key\":\"FE50\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small period\"}},\"key\":\"FE52\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small semicolon\"}},\"key\":\"FE54\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small colon\"}},\"key\":\"FE55\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small question mark\"}},\"key\":\"FE56\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small exclamation mark\"}},\"key\":\"FE57\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"small em dash\"}},\"key\":\"FE58\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small number sign\"}},\"key\":\"FE5F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small ampersand\"}},\"key\":\"FE60\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small asterisk\"}},\"key\":\"FE61\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small plus sign\"}},\"key\":\"FE62\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"small hyphen minus\"}},\"key\":\"FE63\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small less than sign\"}},\"key\":\"FE64\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small greater than sign\"}},\"key\":\"FE65\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"small equals\"}},\"key\":\"FE66\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small backslash\",\"alternative\":\"small reverse solidus\"}},\"key\":\"FE68\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"small dollar sign\"}},\"key\":\"FE69\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small percent sign\"}},\"key\":\"FE6A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"small commercial at\"}},\"key\":\"FE6B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"exclamation mark\"}},\"key\":\"FF01\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"quotation mark\"}},\"key\":\"FF02\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"number sign\"}},\"key\":\"FF03\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"dollar sign\"}},\"key\":\"FF04\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"percent sign\"}},\"key\":\"FF05\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"ampersand\"}},\"key\":\"FF06\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"apostrophe\"}},\"key\":\"FF07\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"asterisk\"}},\"key\":\"FF0A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"plus sign\"}},\"key\":\"FF0B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"comma\"}},\"key\":\"FF0C\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"hyphen minus\"}},\"key\":\"FF0D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"period\"}},\"key\":\"FF0E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"slash\",\"alternative\":\"solidus\"}},\"key\":\"FF0F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"colon\"}},\"key\":\"FF1A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"semicolon\"}},\"key\":\"FF1B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"less than\"}},\"key\":\"FF1C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"equals\"}},\"key\":\"FF1D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"greater than\"}},\"key\":\"FF1E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"question mark\"}},\"key\":\"FF1F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"commercial at\"}},\"key\":\"FF20\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"backslash\",\"alternative\":\"reverse solidus\"}},\"key\":\"FF3C\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"caret\",\"alternative\":\"circumflex\"}},\"key\":\"FF3E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"bar\",\"alternative\":\"underline\"}},\"key\":\"FF3F\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"grave\"}},\"key\":\"FF40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"vertical bar\"}},\"key\":\"FF5C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"key\":\"FF5E\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"cent sign\"}},\"key\":\"FFE0\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"pound sign\"}},\"key\":\"FFE1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"not sign\"}},\"key\":\"FFE2\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"macron\"},\"mathspeak\":{\"default\":\"bar\"}},\"key\":\"FFE3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"broken vertical bar\"}},\"key\":\"FFE4\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"yen sign\"}},\"key\":\"FFE5\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"won sign\"}},\"key\":\"FFE6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"halfwidth forms light vertical\"}},\"key\":\"FFE8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"halfwidth black square\"}},\"key\":\"FFED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"halfwidth white circle\"}},\"key\":\"FFEE\"}]\n,\n\"en/symbols/math_whitespace.js\": \n[{\"locale\":\"en\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"space\"}},\"key\":\"0020\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"no break space\",\"alternative\":\"non breaking space\"}},\"key\":\"00A0\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"soft hyphen\"}},\"key\":\"00AD\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"en quad\"}},\"key\":\"2000\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"em quad\"}},\"key\":\"2001\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"en space\"}},\"key\":\"2002\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"em space\"}},\"key\":\"2003\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"three per em space\"}},\"key\":\"2004\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"four per em space\"}},\"key\":\"2005\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"six per em space\"}},\"key\":\"2006\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"figure space\"}},\"key\":\"2007\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"punctuation space\"}},\"key\":\"2008\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"thin space\"}},\"key\":\"2009\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"hair space\"}},\"key\":\"200A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"zero width space\"}},\"key\":\"200B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"zero width non joiner\"}},\"key\":\"200C\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"zero width joiner\"}},\"key\":\"200D\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"left to right mark\"}},\"key\":\"200E\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"right to left mark\"}},\"key\":\"200F\"},{\"category\":\"Zl\",\"mappings\":{\"default\":{\"default\":\"line separator\"}},\"key\":\"2028\"},{\"category\":\"Zp\",\"mappings\":{\"default\":{\"default\":\"paragraph separator\"}},\"key\":\"2029\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"left to right embedding\"}},\"key\":\"202A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"right to left embedding\"}},\"key\":\"202B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"pop directional formatting\"}},\"key\":\"202C\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"left to right override\"}},\"key\":\"202D\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"right to left override\"}},\"key\":\"202E\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"narrow no break space\"}},\"key\":\"202F\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"medium mathematical space\"}},\"key\":\"205F\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"word joiner\"}},\"key\":\"2060\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"of\",\"alternative\":\"function application\"}},\"key\":\"2061\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"times\",\"alternative\":\"invisible times\"}},\"key\":\"2062\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"separator\",\"alternative\":\"invisible separator\"}},\"key\":\"2063\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"plus\",\"alternative\":\"invisible plus\"}},\"key\":\"2064\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"inhibit symmetric swapping\"}},\"key\":\"206A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"activate symmetric swapping\"}},\"key\":\"206B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"national digit shapes\"}},\"key\":\"206E\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"nominal digit shapes\"}},\"key\":\"206F\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"zero width no break space\",\"alternative\":\"byte order mark\"}},\"key\":\"FEFF\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"interlinear annotation anchor\"}},\"key\":\"FFF9\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"interlinear annotation separator\"}},\"key\":\"FFFA\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"interlinear annotation terminator\"}},\"key\":\"FFFB\"}]\n,\n\"en/symbols/other_stars.js\": \n[{\"locale\":\"en\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"decimal exponent symbol\"}},\"key\":\"23E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black star\"}},\"key\":\"2605\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white star\"}},\"key\":\"2606\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white circle\",\"alternative\":\"medium white circle\"}},\"key\":\"26AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black circle\",\"alternative\":\"medium black circle\"}},\"key\":\"26AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white check mark\",\"alternative\":\"white heavy check mark\"}},\"key\":\"2705\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"check mark\"}},\"key\":\"2713\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy check mark\"}},\"key\":\"2714\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"multiplication x\"}},\"key\":\"2715\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy multiplication x\"}},\"key\":\"2716\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"ballot x\"}},\"key\":\"2717\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy ballot x\"}},\"key\":\"2718\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"open center cross\"}},\"key\":\"271B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy open center cross\"}},\"key\":\"271C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"maltese cross\"}},\"key\":\"2720\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"star of david\"}},\"key\":\"2721\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"four teardrop spoked asterisk\"}},\"key\":\"2722\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"four balloon spoked asterisk\"}},\"key\":\"2723\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy four balloon spoked asterisk\"}},\"key\":\"2724\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"four club spoked asterisk\"}},\"key\":\"2725\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black four pointed star\"}},\"key\":\"2726\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white four pointed star\"}},\"key\":\"2727\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"sparkles\"}},\"key\":\"2728\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"stress outlined white star\"}},\"key\":\"2729\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circled white star\"}},\"key\":\"272A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"open center black star\"}},\"key\":\"272B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black center white star\"}},\"key\":\"272C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"outlined black star\"}},\"key\":\"272D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy outlined black star\"}},\"key\":\"272E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"pinwheel star\"}},\"key\":\"272F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"shadowed white star\"}},\"key\":\"2730\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy asterisk\"}},\"key\":\"2731\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"open center asterisk\"}},\"key\":\"2732\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"eight spoked asterisk\"}},\"key\":\"2733\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"eight pointed black star\"}},\"key\":\"2734\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"eight pointed pinwheel star\"}},\"key\":\"2735\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"six pointed black star\"}},\"key\":\"2736\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"twelve pointed black star\"}},\"key\":\"2739\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"sixteen pointed asterisk\"}},\"key\":\"273A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"teardrop spoked asterisk\"}},\"key\":\"273B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"open center teardrop spoked asterisk\"}},\"key\":\"273C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy teardrop spoked asterisk\"}},\"key\":\"273D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"six petalled black and white florette\"}},\"key\":\"273E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"black florette\"}},\"key\":\"273F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"white florette\"}},\"key\":\"2740\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"eight petalled outlined black florette\"}},\"key\":\"2741\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"circled open center eight pointed star\"}},\"key\":\"2742\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy teardrop spoked pinwheel asterisk\"}},\"key\":\"2743\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"snowflake\"}},\"key\":\"2744\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"tight trifoliate snowflake\"}},\"key\":\"2745\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy chevron snowflake\"}},\"key\":\"2746\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"sparkle\"}},\"key\":\"2747\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy sparkle\"}},\"key\":\"2748\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"balloon spoked asterisk\"}},\"key\":\"2749\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"eight teardrop spoked propeller asterisk\"}},\"key\":\"274A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"heavy eight teardrop spoked propeller asterisk\"}},\"key\":\"274B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"cross mark\"}},\"key\":\"274C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"shadowed white circle\"}},\"key\":\"274D\"}]\n,\n\"en/units/area.js\": \n[{\"locale\":\"en\"},{\"category\":\"other\",\"mappings\":{\"default\":{\"default\":\"square\"}},\"key\":\"sq\",\"names\":[\"sq\",\"sq.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"square inch\"}},\"key\":\"sq inch\",\"names\":[\"sq inch\",\"sq. inch.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"square rod\"}},\"key\":\"sq rd\",\"names\":[\"sq rd\",\"sq. rd.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"square foot\",\"plural\":\"square feet\"}},\"key\":\"sq ft\",\"names\":[\"sq ft\",\"sq. ft.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"square yard\"}},\"key\":\"sq yd\",\"names\":[\"sq yd\",\"sq. yd.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"square mile\"}},\"key\":\"sq mi\",\"names\":[\"sq mi\",\"sq. mi.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"acre\"}},\"key\":\"acr\",\"names\":[\"ac\",\"ac.\",\"acr\",\"acr.\"]},{\"category\":\"area\",\"mappings\":{\"default\":{\"default\":\"hectare\"}},\"key\":\"ha\",\"names\":[\"ha\"]}]\n,\n\"en/units/currency.js\": \n[{\"locale\":\"en\"},{\"category\":\"currency\",\"key\":\"$\",\"mappings\":{\"default\":{\"default\":\"dollar\"}},\"names\":[\"$\",\"💲\",\"＄\",\"﹩\",\"USD\"]},{\"category\":\"currency\",\"key\":\"£\",\"mappings\":{\"default\":{\"default\":\"pound\"}},\"names\":[\"£\",\"￡\",\"GBP\"]},{\"category\":\"currency\",\"key\":\"¥\",\"mappings\":{\"default\":{\"default\":\"yen\"}},\"names\":[\"¥\",\"￥\",\"JPY\"]},{\"category\":\"currency\",\"key\":\"€\",\"mappings\":{\"default\":{\"default\":\"euro\"}},\"names\":[\"€\",\"EUR\"]},{\"category\":\"currency\",\"key\":\"₡\",\"mappings\":{\"default\":{\"default\":\"colon\"}},\"names\":[\"₡\",\"CRC\"]},{\"category\":\"currency\",\"key\":\"₢\",\"mappings\":{\"default\":{\"default\":\"cruzeiro\"}},\"names\":[\"₢\"]},{\"category\":\"currency\",\"key\":\"₣\",\"mappings\":{\"default\":{\"default\":\"franc\"}},\"names\":[\"₣\"]},{\"category\":\"currency\",\"key\":\"₤\",\"mappings\":{\"default\":{\"default\":\"lira\"}},\"names\":[\"₤\"]},{\"category\":\"currency\",\"key\":\"₥\",\"mappings\":{\"default\":{\"default\":\"mill\"}},\"names\":[\"₥\"]},{\"category\":\"currency\",\"key\":\"₦\",\"mappings\":{\"default\":{\"default\":\"naira\"}},\"names\":[\"₦\",\"NGN\"]},{\"category\":\"currency\",\"key\":\"₧\",\"mappings\":{\"default\":{\"default\":\"peseta\"}},\"names\":[\"₧\"]},{\"category\":\"currency\",\"key\":\"₨\",\"mappings\":{\"default\":{\"default\":\"rupee\"}},\"names\":[\"₨\",\"₹\",\"INR\",\"NPR\",\"PKR\",\"LKR\"]},{\"category\":\"currency\",\"key\":\"₩\",\"mappings\":{\"default\":{\"default\":\"won\"}},\"names\":[\"₩\",\"￦\",\"KRW\"]},{\"category\":\"currency\",\"key\":\"₪\",\"mappings\":{\"default\":{\"default\":\"sheqel\"}},\"names\":[\"₪\"]},{\"category\":\"currency\",\"key\":\"₫\",\"mappings\":{\"default\":{\"default\":\"dong\"}},\"names\":[\"₫\"]},{\"category\":\"currency\",\"key\":\"₭\",\"mappings\":{\"default\":{\"default\":\"kip\"}},\"names\":[\"₭\"]},{\"category\":\"currency\",\"key\":\"₮\",\"mappings\":{\"default\":{\"default\":\"tugrik\"}},\"names\":[\"₮\"]},{\"category\":\"currency\",\"key\":\"₯\",\"mappings\":{\"default\":{\"default\":\"drachma\"}},\"names\":[\"₯\"]},{\"category\":\"currency\",\"key\":\"₰\",\"mappings\":{\"default\":{\"default\":\"Pfennig\"}},\"names\":[\"₰\"]},{\"category\":\"currency\",\"key\":\"₱\",\"mappings\":{\"default\":{\"default\":\"peso\"}},\"names\":[\"₱\"]},{\"category\":\"currency\",\"key\":\"₲\",\"mappings\":{\"default\":{\"default\":\"guaranis\"}},\"names\":[\"₲\"]},{\"category\":\"currency\",\"key\":\"₳\",\"mappings\":{\"default\":{\"default\":\"austral\"}},\"names\":[\"₳\"]},{\"category\":\"currency\",\"key\":\"₴\",\"mappings\":{\"default\":{\"default\":\"hryvnia\"}},\"names\":[\"₴\",\"UAH\"]},{\"category\":\"currency\",\"key\":\"₵\",\"mappings\":{\"default\":{\"default\":\"cedis\"}},\"names\":[\"₵\",\"GHS\"]},{\"category\":\"currency\",\"key\":\"₶\",\"mappings\":{\"default\":{\"default\":\"livre tournois\"}},\"names\":[\"₶\"]},{\"category\":\"currency\",\"key\":\"₷\",\"mappings\":{\"default\":{\"default\":\"spesmilo\"}},\"names\":[\"₷\"]},{\"category\":\"currency\",\"key\":\"₸\",\"mappings\":{\"default\":{\"default\":\"tenge\"}},\"names\":[\"₸\",\"KZT\"]},{\"category\":\"currency\",\"key\":\"₺\",\"mappings\":{\"default\":{\"default\":\"turkish lira\"}},\"names\":[\"₺\",\"TRY\"]},{\"category\":\"currency\",\"key\":\"元\",\"mappings\":{\"default\":{\"default\":\"yuan\"}},\"names\":[\"元\"]},{\"category\":\"currency\",\"key\":\"¢\",\"mappings\":{\"default\":{\"default\":\"cent\"}},\"names\":[\"￠\",\"¢\"]}]\n,\n\"en/units/energy.js\": \n[{\"locale\":\"en\"},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"watt\"}},\"key\":\"W\",\"names\":[\"W\",\"w\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"kilowatt\"}},\"key\":\"kW\",\"names\":[\"kw\",\"kW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"milliwatt\"}},\"key\":\"mW\",\"names\":[\"mw\",\"mW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"kilowatt hour\"}},\"key\":\"kwh\",\"names\":[\"kwh\",\"kWh\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"joule\"}},\"key\":\"J\",\"names\":[\"J\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Newton\"}},\"key\":\"N\",\"names\":[\"N\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"ampere\"}},\"key\":\"A\",\"names\":[\"A\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"volt\"}},\"key\":\"V\",\"names\":[\"V\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"microohm\"}},\"key\":\"µΩ\",\"names\":[\"µΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"milliohm\"}},\"key\":\"mΩ\",\"names\":[\"mΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"ohm\"}},\"key\":\"Ω\",\"names\":[\"Ω\",\"Ohm\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"kilohm\"}},\"key\":\"kΩ\",\"names\":[\"kΩ\",\"KΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"megaohm\"}},\"key\":\"MΩ\",\"names\":[\"MΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"gigaohm\"}},\"key\":\"GΩ\",\"names\":[\"GΩ\"]}]\n,\n\"en/units/length.js\": \n[{\"locale\":\"en\"},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"foot\"}},\"key\":\"ft\",\"names\":[\"ft\",\"ft.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"inch\"}},\"key\":\"in\",\"names\":[\"in\",\"in.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"mile\"}},\"key\":\"mi\",\"names\":[\"mi\",\"mi.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"yard\"}},\"key\":\"yd\",\"names\":[\"yd\",\"yd.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"link\"}},\"key\":\"link\",\"names\":[\"li\",\"li.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"rod\"}},\"key\":\"rod\",\"names\":[\"rd\",\"rd.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"chain\"}},\"key\":\"chain\",\"names\":[\"ch\",\"ch.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"furlong\"}},\"key\":\"furlong\",\"names\":[\"fur\",\"fur.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"nautical mile\"}},\"key\":\"n.m.\",\"names\":[\"n.m.\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"millimeter\"}},\"key\":\"mm\",\"names\":[\"mm\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"centimeter\"}},\"key\":\"cm\",\"names\":[\"cm\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"meter\"}},\"key\":\"m\",\"names\":[\"m\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"kilometer\"}},\"key\":\"km\",\"names\":[\"km\"]}]\n,\n\"en/units/memory.js\": \n[{\"locale\":\"en\"},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"bit\"}},\"key\":\"b\",\"names\":[\"b\"]},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"byte\"}},\"key\":\"B\",\"names\":[\"B\"]},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"kilobyte\"}},\"key\":\"KB\",\"names\":[\"KB\"]},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"megabyte\"}},\"key\":\"MB\",\"names\":[\"MB\"]},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"gigabyte\"}},\"key\":\"GB\",\"names\":[\"GB\"]},{\"category\":\"memory\",\"mappings\":{\"default\":{\"default\":\"terabyte\"}},\"key\":\"TB\",\"names\":[\"TB\"]}]\n,\n\"en/units/other.js\": \n[{\"locale\":\"en\"},{\"category\":\"other\",\"mappings\":{\"default\":{\"default\":\"dozen\"}},\"key\":\"doz\",\"names\":[\"doz\",\"doz.\",\"dz\",\"dz.\"]}]\n,\n\"en/units/speed.js\": \n[{\"locale\":\"en\"},{\"category\":\"speed\",\"mappings\":{\"default\":{\"default\":\"knot\"}},\"key\":\"kt\",\"names\":[\"kt\",\"kt.\"]},{\"category\":\"speed\",\"mappings\":{\"default\":{\"default\":\"miles per hour\"}},\"key\":\"mph\",\"names\":[\"mph\"]},{\"category\":\"speed\",\"mappings\":{\"default\":{\"default\":\"revolutions per minute\"}},\"key\":\"rpm\",\"names\":[\"rpm\"]},{\"category\":\"speed\",\"mappings\":{\"default\":{\"default\":\"kilometers per hour\"}},\"key\":\"kmh\",\"names\":[\"kmh\"]}]\n,\n\"en/units/temperature.js\": \n[{\"locale\":\"en\"},{\"category\":\"temperature\",\"mappings\":{\"default\":{\"default\":\"Fahrenheit\"}},\"key\":\"F\",\"names\":[\"F\",\"F.\",\"°F\"]},{\"category\":\"temperature\",\"mappings\":{\"default\":{\"default\":\"Celsius\",\"alternative\":\"Centigrade\"}},\"key\":\"C\",\"names\":[\"C\",\"°C\"]},{\"category\":\"temperature\",\"mappings\":{\"default\":{\"default\":\"Kelvin\"}},\"key\":\"K\",\"names\":[\"K\",\"°K\"]}]\n,\n\"en/units/time.js\": \n[{\"locale\":\"en\"},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"nanosecond\"}},\"key\":\"ns\",\"names\":[\"ns\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"microsecond\"}},\"key\":\"µs\",\"names\":[\"µs\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"millisecond\"}},\"key\":\"ms\",\"names\":[\"ms\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"second\"}},\"key\":\"s\",\"names\":[\"s\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"minute\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"hour\"}},\"key\":\"h\",\"names\":[\"h\",\"hr\"]}]\n,\n\"en/units/volume.js\": \n[{\"locale\":\"en\"},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cubic\"}},\"key\":\"cu\",\"names\":[\"cu\",\"cu.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cubic inch\"}},\"key\":\"cu inch\",\"names\":[\"cu in\",\"cu. in.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cubic foot\",\"plural\":\"cubic feet\"}},\"key\":\"cu ft\",\"names\":[\"cu ft\",\"cu. ft.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cubic yard\"}},\"key\":\"cu yd\",\"names\":[\"cu yd\",\"cu. yd.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"barrel\"}},\"key\":\"bbl\",\"names\":[\"bbl.\",\"bbl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"fluid ounce\"}},\"key\":\"fl. oz.\",\"names\":[\"fl. oz.\",\"fl oz\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"gallon\"}},\"key\":\"gal\",\"names\":[\"gal\",\"gal.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"pint\"}},\"key\":\"pt\",\"names\":[\"pt\",\"pt.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"quart\"}},\"key\":\"qt\",\"names\":[\"qt\",\"qt.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"fluid dram\"}},\"key\":\"fluid dram\",\"names\":[\"fl dr\",\"fl. dr.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"tablespoon\"}},\"key\":\"tbsp\",\"names\":[\"tbsp\",\"tbsp.\",\"Tbsp\",\"Tbsp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"teaspoon\"}},\"key\":\"tsp\",\"names\":[\"tsp\",\"tsp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cup\"}},\"key\":\"cup\",\"names\":[\"cp\",\"cp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"cubic centimeter\"}},\"key\":\"cc\",\"names\":[\"cc\",\"ccm\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"kiloliter\"}},\"key\":\"kl\",\"names\":[\"kl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"liter\"}},\"key\":\"l\",\"names\":[\"l\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"milliliter\"}},\"key\":\"ml\",\"names\":[\"ml\"]}]\n,\n\"en/units/weight.js\": \n[{\"locale\":\"en\"},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"dram\"}},\"key\":\"dram\",\"names\":[\"dr\",\"dr.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"ounce\"}},\"key\":\"oz\",\"names\":[\"oz\",\"oz.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"pound\"}},\"key\":\"lb\",\"names\":[\"lb\",\"lb.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"stone\"}},\"key\":\"st\",\"names\":[\"st\",\"st.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"quarter\"}},\"key\":\"qtr\",\"names\":[\"qtr\",\"qtr.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"hundredweight\"}},\"key\":\"cwt\",\"names\":[\"cwt\",\"cwt.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"long ton\"}},\"key\":\"LT\",\"names\":[\"LT\",\"L.T.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"gram\"}},\"key\":\"gr\",\"names\":[\"g\",\"gr\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"kilogram\"}},\"key\":\"kg\",\"names\":[\"kg\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"microgram\"}},\"key\":\"mcg\",\"names\":[\"mcg\",\"µg\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"milligram\"}},\"key\":\"mg\",\"names\":[\"mg\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"ton\"}},\"key\":\"t\",\"names\":[\"t\",\"T\"]}]\n,\n\"de/functions/algebra.js\": \n[{\"locale\":\"de\"},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"Grad\"}},\"key\":\"deg\",\"names\":[\"deg\"]},{\"key\":\"det\",\"mappings\":{\"default\":{\"default\":\"Determinante\"}},\"category\":\"Algebra\",\"names\":[\"det\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"Dimension\"}},\"key\":\"dim\",\"names\":[\"dim\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"Homomorphismus\"},\"mathspeak\":{\"default\":\"hom\"},\"clearspeak\":{\"default\":\"hom\"}},\"key\":\"hom\",\"names\":[\"hom\",\"Hom\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"Kern\"}},\"key\":\"ker\",\"names\":[\"ker\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"Spur\"}},\"key\":\"Tr\",\"names\":[\"Tr\",\"tr\"]}]\n,\n\"de/functions/elementary.js\": \n[{\"locale\":\"de\"},{\"key\":\"log\",\"mappings\":{\"default\":{\"default\":\"Logarithmus\"}},\"category\":\"Logarithm\",\"names\":[\"log\"]},{\"key\":\"ln\",\"mappings\":{\"default\":{\"default\":\"natürlicher Logarithmus\"}},\"category\":\"Logarithm\",\"names\":[\"ln\"]},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"Logarithmus zur Basis 10\"}},\"key\":\"lg\",\"names\":[\"lg\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"Exponent\"},\"mathspeak\":{\"default\":\"exp\"},\"clearspeak\":{\"default\":\"exp\"}},\"key\":\"exp\",\"names\":[\"exp\",\"expt\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"größter gemeinsamer Teiler\"},\"mathspeak\":{\"default\":\"ggt\"},\"clearspeak\":{\"default\":\"ggt\"}},\"key\":\"gcd\",\"names\":[\"gcd\",\"ggt\",\"ggT\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"kleinstes gemeinsames Vielfaches\"},\"mathspeak\":{\"default\":\"kgv\"},\"clearspeak\":{\"default\":\"kgv\"}},\"key\":\"lcm\",\"names\":[\"lcm\",\"kgv\",\"kgV\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"Argument\"}},\"key\":\"arg\",\"names\":[\"arg\"]},{\"key\":\"im\",\"mappings\":{\"default\":{\"default\":\"der Imaginärteil der komplexen Zahl\"}},\"category\":\"Complex\",\"names\":[\"im\"]},{\"key\":\"re\",\"mappings\":{\"default\":{\"default\":\"der Realteil der komplexen Zahl\"}},\"category\":\"Complex\",\"names\":[\"re\"]},{\"key\":\"mod\",\"mappings\":{\"default\":{\"default\":\"modulo\"}},\"category\":\"Elementary\",\"names\":[\"mod\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Infimum\"}},\"key\":\"inf\",\"names\":[\"inf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Limes\"}},\"key\":\"lim\",\"names\":[\"lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Limes inferior\"}},\"key\":\"liminf\",\"names\":[\"lim inf\",\"liminf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Limes superior\"}},\"key\":\"limsup\",\"names\":[\"lim sup\",\"limsup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Maximum\"}},\"key\":\"max\",\"names\":[\"max\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Minimum\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Supremum\"}},\"key\":\"sup\",\"names\":[\"sup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"Colimes\"}},\"key\":\"injlim\",\"names\":[\"injlim\",\"inj lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"projektiver Limes\"}},\"key\":\"projlim\",\"names\":[\"projlim\",\"proj lim\"]},{\"category\":\"Probability\",\"mappings\":{\"default\":{\"default\":\"Wahrscheinlichkeit\"}},\"key\":\"Pr\",\"names\":[\"Pr\"]}]\n,\n\"de/functions/hyperbolic.js\": \n[{\"locale\":\"de\"},{\"key\":\"cosh\",\"mappings\":{\"default\":{\"default\":\"Kosinus hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"cosh\"]},{\"key\":\"coth\",\"mappings\":{\"default\":{\"default\":\"Kotangens hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"coth\"]},{\"key\":\"csch\",\"mappings\":{\"default\":{\"default\":\"Kosekans hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"csch\"]},{\"key\":\"sech\",\"mappings\":{\"default\":{\"default\":\"Sekans hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"sech\"]},{\"key\":\"sinh\",\"mappings\":{\"default\":{\"default\":\"Sinus hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"sinh\"]},{\"key\":\"tanh\",\"mappings\":{\"default\":{\"default\":\"Tangens hyperbolicus\"}},\"category\":\"Hyperbolic\",\"names\":[\"tanh\"]},{\"key\":\"arcosh\",\"mappings\":{\"default\":{\"default\":\"Areakosinus hyperbolicus\"}},\"category\":\"Area\",\"names\":[\"arcosh\",\"arccosh\"]},{\"key\":\"arcoth\",\"mappings\":{\"default\":{\"default\":\"Areakotangens hyperbolicus\"}},\"category\":\"Area\",\"names\":[\"arcoth\",\"arccoth\"]},{\"key\":\"arcsch\",\"mappings\":{\"default\":{\"default\":\"Areakosekans hyperbolicus\"}},\"category\":\"Area\",\"names\":[\"arcsch\",\"arccsch\"]},{\"key\":\"arsech\",\"mappings\":{\"default\":{\"default\":\"Areasekans hyperbolicus\"}},\"category\":\"Area\",\"names\":[\"arsech\",\"arcsech\"]},{\"key\":\"arsinh\",\"mappings\":{\"default\":{\"default\":\"Areasinus hyperbolicus\"}},\"category\":\"Area\",\"names\":[\"arsinh\",\"arcsinh\"]},{\"key\":\"artanh\",\"mappings\":{\"default\":{\"default\":\"Areatangens hyperbolicus \"}},\"category\":\"Area\",\"names\":[\"artanh\",\"arctanh\"]}]\n,\n\"de/functions/trigonometry.js\": \n[{\"locale\":\"de\"},{\"key\":\"cos\",\"mappings\":{\"default\":{\"default\":\"Kosinus\"}},\"category\":\"Trigonometric\",\"names\":[\"cos\",\"cosine\"]},{\"key\":\"cot\",\"mappings\":{\"default\":{\"default\":\"Kotangens\"}},\"category\":\"Trigonometric\",\"names\":[\"cot\"]},{\"key\":\"csc\",\"mappings\":{\"default\":{\"default\":\"Kosekans\"}},\"category\":\"Trigonometric\",\"names\":[\"csc\"]},{\"key\":\"sec\",\"mappings\":{\"default\":{\"default\":\"Sekans\"}},\"category\":\"Trigonometric\",\"names\":[\"sec\"]},{\"key\":\"sin\",\"mappings\":{\"default\":{\"default\":\"Sinus\"}},\"category\":\"Trigonometric\",\"names\":[\"sin\",\"sine\"]},{\"key\":\"tan\",\"mappings\":{\"default\":{\"default\":\"Tangens\"}},\"category\":\"Trigonometric\",\"names\":[\"tan\"]},{\"key\":\"arccos\",\"mappings\":{\"default\":{\"default\":\"Arkuskosinus\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Kosinus\"}},\"category\":\"Cyclometric\",\"names\":[\"arccos\"]},{\"key\":\"arccot\",\"mappings\":{\"default\":{\"default\":\"Arkuskotangens\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Kotangens\"}},\"category\":\"Cyclometric\",\"names\":[\"arccot\"]},{\"key\":\"arccsc\",\"mappings\":{\"default\":{\"default\":\"Arkuskosekans\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Kosekans\"}},\"category\":\"Cyclometric\",\"names\":[\"arccsc\"]},{\"key\":\"arcsec\",\"mappings\":{\"default\":{\"default\":\"Arkussekans\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Sekans\"}},\"category\":\"Cyclometric\",\"names\":[\"arcsec\"]},{\"key\":\"arcsin\",\"mappings\":{\"default\":{\"default\":\"Arkussinus\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Sinus\"}},\"category\":\"Cyclometric\",\"names\":[\"arcsin\"]},{\"key\":\"arctan\",\"mappings\":{\"default\":{\"default\":\"Arkustangens\"},\"clearspeak\":{\"Trig_TrigInverse\":\"inverser Tangens\"}},\"category\":\"Cyclometric\",\"names\":[\"arctan\"]}]\n,\n\"de/symbols/digits_rest.js\": \n[{\"locale\":\"de\"},{\"key\":\"00B2\",\"mappings\":{\"default\":{\"default\":\"Quadrat\"},\"clearspeak\":{\"Exponent_Exponent\":\"mit Exponent 2\",\"Exponent_OrdinalPower\":\"zur zweiten Potenz\"}},\"category\":\"No\"},{\"key\":\"00B3\",\"mappings\":{\"default\":{\"default\":\"Kubik\"},\"clearspeak\":{\"Exponent_Exponent\":\"mit Exponent 3\",\"Exponent_OrdinalPower\":\"zur dritten Potenz\"}},\"category\":\"No\"},{\"key\":\"00BC\",\"mappings\":{\"default\":{\"default\":\"ein Viertel\"}},\"category\":\"No\"},{\"key\":\"00BD\",\"mappings\":{\"default\":{\"default\":\"ein Halb\"}},\"category\":\"No\"},{\"key\":\"00BE\",\"mappings\":{\"default\":{\"default\":\"drei Viertel\"}},\"category\":\"No\"},{\"category\":\"No\",\"key\":\"2150\",\"mappings\":{\"default\":{\"default\":\"ein siebtel\"}}},{\"category\":\"No\",\"key\":\"2151\",\"mappings\":{\"default\":{\"default\":\"ein neuntel\"}}},{\"category\":\"No\",\"key\":\"2152\",\"mappings\":{\"default\":{\"default\":\"ein zehntel\"}}},{\"category\":\"No\",\"key\":\"2153\",\"mappings\":{\"default\":{\"default\":\"ein drittel\"}}},{\"category\":\"No\",\"key\":\"2154\",\"mappings\":{\"default\":{\"default\":\"zwei drittel\"}}},{\"category\":\"No\",\"key\":\"2155\",\"mappings\":{\"default\":{\"default\":\"ein fünftel\"}}},{\"category\":\"No\",\"key\":\"2156\",\"mappings\":{\"default\":{\"default\":\"zwei fünftel\"}}},{\"category\":\"No\",\"key\":\"2157\",\"mappings\":{\"default\":{\"default\":\"drei fünftel\"}}},{\"category\":\"No\",\"key\":\"2158\",\"mappings\":{\"default\":{\"default\":\"vier fünftel\"}}},{\"category\":\"No\",\"key\":\"2159\",\"mappings\":{\"default\":{\"default\":\"ein sechstel\"}}},{\"category\":\"No\",\"key\":\"215A\",\"mappings\":{\"default\":{\"default\":\"fünf sechstel\"}}},{\"category\":\"No\",\"key\":\"215B\",\"mappings\":{\"default\":{\"default\":\"ein achtel\"}}},{\"category\":\"No\",\"key\":\"215C\",\"mappings\":{\"default\":{\"default\":\"drei achtel\"}}},{\"category\":\"No\",\"key\":\"215D\",\"mappings\":{\"default\":{\"default\":\"fünf achtel\"}}},{\"category\":\"No\",\"key\":\"215E\",\"mappings\":{\"default\":{\"default\":\"sieben achtel\"}}},{\"category\":\"No\",\"key\":\"215F\",\"mappings\":{\"default\":{\"default\":\"Bruchzähler eins\"}}},{\"category\":\"No\",\"key\":\"2189\",\"mappings\":{\"default\":{\"default\":\"null drittel\"}}},{\"category\":\"No\",\"key\":\"3248\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Zehn auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"3249\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Zwanzig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324A\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Dreißig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324B\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Vierzig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324C\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Fünfzig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324D\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Sechzig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324E\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Siebzig auf schwarzem Quadrat\"}}},{\"category\":\"No\",\"key\":\"324F\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Achtzig auf schwarzem Quadrat\"}}}]\n,\n\"de/symbols/greek-rest.js\": \n[{\"locale\":\"de\"},{\"key\":\"0394\",\"mappings\":{\"clearspeak\":{\"default\":\"Dreieck\",\"TriangleSymbol_Delta\":\"großes Delta\"}},\"category\":\"Lu\"}]\n,\n\"de/symbols/greek-scripts.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"1D26\",\"mappings\":{\"default\":{\"default\":\"Kapitälchen Gamma\"}}},{\"category\":\"Ll\",\"key\":\"1D27\",\"mappings\":{\"default\":{\"default\":\"Kapitälchen Lamda\"}}},{\"category\":\"Ll\",\"key\":\"1D28\",\"mappings\":{\"default\":{\"default\":\"Kapitälchen Pi\"}}},{\"category\":\"Ll\",\"key\":\"1D29\",\"mappings\":{\"default\":{\"default\":\"Kapitälchen Rho\"}}},{\"category\":\"Ll\",\"key\":\"1D2A\",\"mappings\":{\"default\":{\"default\":\"Kapitälchen Psi\"}}},{\"category\":\"Lm\",\"key\":\"1D5E\",\"mappings\":{\"default\":{\"default\":\"hochgestelltes gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D60\",\"mappings\":{\"default\":{\"default\":\"hochgestelltes phi\"}}},{\"category\":\"Lm\",\"key\":\"1D66\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes beta\"}}},{\"category\":\"Lm\",\"key\":\"1D67\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D68\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes rho\"}}},{\"category\":\"Lm\",\"key\":\"1D69\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes phi\"}}},{\"category\":\"Lm\",\"key\":\"1D6A\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes chi\"}}}]\n,\n\"de/symbols/greek-symbols.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"03D0\",\"mappings\":{\"default\":{\"default\":\"beta\"}}},{\"category\":\"Ll\",\"key\":\"03D7\",\"mappings\":{\"default\":{\"default\":\"kai\"}}},{\"category\":\"Sm\",\"key\":\"03F6\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes epsilon\"}}},{\"category\":\"Lu\",\"key\":\"1D7CA\",\"mappings\":{\"default\":{\"default\":\"fettes großes Digamma\"}}},{\"category\":\"Ll\",\"key\":\"1D7CB\",\"mappings\":{\"default\":{\"default\":\"fettes digamma\"}}}]\n,\n\"de/symbols/hebrew_letters.js\": \n[{\"locale\":\"de\"},{\"category\":\"Lo\",\"key\":\"2135\",\"mappings\":{\"default\":{\"default\":\"Alef-Symbol\"}}},{\"category\":\"Lo\",\"key\":\"2136\",\"mappings\":{\"default\":{\"default\":\"Bet-Symbol\"}}},{\"category\":\"Lo\",\"key\":\"2137\",\"mappings\":{\"default\":{\"default\":\"Gimel-Symbol\"}}},{\"category\":\"Lo\",\"key\":\"2138\",\"mappings\":{\"default\":{\"default\":\"Dalet-Symbol\"}}}]\n,\n\"de/symbols/latin-lower-double-accent.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"01D6\",\"mappings\":{\"default\":{\"default\":\"u mit Diärese und Makron\"}}},{\"category\":\"Ll\",\"key\":\"01D8\",\"mappings\":{\"default\":{\"default\":\"u mit Diärese und Akut\"}}},{\"category\":\"Ll\",\"key\":\"01DA\",\"mappings\":{\"default\":{\"default\":\"u mit Diärese und Caron\"}}},{\"category\":\"Ll\",\"key\":\"01DC\",\"mappings\":{\"default\":{\"default\":\"u mit Diärese und Grab\"}}},{\"category\":\"Ll\",\"key\":\"01DF\",\"mappings\":{\"default\":{\"default\":\"a mit Diärese und Makron\"}}},{\"category\":\"Ll\",\"key\":\"01E1\",\"mappings\":{\"default\":{\"default\":\"a mit Dot Above und Makron\"}}},{\"category\":\"Ll\",\"key\":\"01ED\",\"mappings\":{\"default\":{\"default\":\"o mit Ogonek und Makron\"}}},{\"category\":\"Ll\",\"key\":\"01FB\",\"mappings\":{\"default\":{\"default\":\"a mit Ring oben und akut\"}}},{\"category\":\"Ll\",\"key\":\"022B\",\"mappings\":{\"default\":{\"default\":\"o mit Diärese und Makron\"}}},{\"category\":\"Ll\",\"key\":\"022D\",\"mappings\":{\"default\":{\"default\":\"o mit Tilde und Makron\"}}},{\"category\":\"Ll\",\"key\":\"0231\",\"mappings\":{\"default\":{\"default\":\"o mit Punkt oben und Makron\"}}},{\"category\":\"Ll\",\"key\":\"1E09\",\"mappings\":{\"default\":{\"default\":\"c mit Cedilla und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E15\",\"mappings\":{\"default\":{\"default\":\"e mit Makron und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1E17\",\"mappings\":{\"default\":{\"default\":\"e mit Makron und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E1D\",\"mappings\":{\"default\":{\"default\":\"e mit Cedilla und Breve\"}}},{\"category\":\"Ll\",\"key\":\"1E2F\",\"mappings\":{\"default\":{\"default\":\"i mit Diärese und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E39\",\"mappings\":{\"default\":{\"default\":\"l mit Punkt unten und Makron\"}}},{\"category\":\"Ll\",\"key\":\"1E4D\",\"mappings\":{\"default\":{\"default\":\"o mit Tilde und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E4F\",\"mappings\":{\"default\":{\"default\":\"o mit Tilde und Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E51\",\"mappings\":{\"default\":{\"default\":\"o mit Makron und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1E53\",\"mappings\":{\"default\":{\"default\":\"o mit Makron und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E5D\",\"mappings\":{\"default\":{\"default\":\"r mit Punkt unten und Makron\"}}},{\"category\":\"Ll\",\"key\":\"1E65\",\"mappings\":{\"default\":{\"default\":\"s mit Akute und Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E67\",\"mappings\":{\"default\":{\"default\":\"s mit Caron und Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E69\",\"mappings\":{\"default\":{\"default\":\"s mit Punkt unten und Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E79\",\"mappings\":{\"default\":{\"default\":\"u mit Tilde und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E7B\",\"mappings\":{\"default\":{\"default\":\"u mit Makron und Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1EA5\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1EA7\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EA9\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EAB\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EAD\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Ll\",\"key\":\"1EAF\",\"mappings\":{\"default\":{\"default\":\"a mit Breve und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1EB1\",\"mappings\":{\"default\":{\"default\":\"a mit Breve und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EB3\",\"mappings\":{\"default\":{\"default\":\"a mit Breve und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EB5\",\"mappings\":{\"default\":{\"default\":\"a mit Breve und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EB7\",\"mappings\":{\"default\":{\"default\":\"a mit Breve und Dot Below\"}}},{\"category\":\"Ll\",\"key\":\"1EBF\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1EC1\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EC3\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EC5\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EC7\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Ll\",\"key\":\"1ED1\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1ED3\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1ED5\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1ED7\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1ED9\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Ll\",\"key\":\"1EDB\",\"mappings\":{\"default\":{\"default\":\"o mit Horn und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1EDD\",\"mappings\":{\"default\":{\"default\":\"o mit Horn und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EDF\",\"mappings\":{\"default\":{\"default\":\"o mit Horn und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EE1\",\"mappings\":{\"default\":{\"default\":\"o mit Horn und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EE3\",\"mappings\":{\"default\":{\"default\":\"o mit Horn und Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1EE9\",\"mappings\":{\"default\":{\"default\":\"u mit Horn und Akut\"}}},{\"category\":\"Ll\",\"key\":\"1EEB\",\"mappings\":{\"default\":{\"default\":\"u mit Horn und Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EED\",\"mappings\":{\"default\":{\"default\":\"u mit Horn und Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EEF\",\"mappings\":{\"default\":{\"default\":\"u mit Horn und Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EF1\",\"mappings\":{\"default\":{\"default\":\"u mit Horn und Punkt\"}}}]\n,\n\"de/symbols/latin-lower-phonetic.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"00F8\",\"mappings\":{\"default\":{\"default\":\"o mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0111\",\"mappings\":{\"default\":{\"default\":\"d mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0127\",\"mappings\":{\"default\":{\"default\":\"h mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0142\",\"mappings\":{\"default\":{\"default\":\"l mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0167\",\"mappings\":{\"default\":{\"default\":\"t mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0180\",\"mappings\":{\"default\":{\"default\":\"b mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"019B\",\"mappings\":{\"default\":{\"default\":\"lambda mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"01B6\",\"mappings\":{\"default\":{\"default\":\"z mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"01BE\",\"mappings\":{\"default\":{\"default\":\"umgekehrter Glottalanschlag mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"01E5\",\"mappings\":{\"default\":{\"default\":\"g mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"01FF\",\"mappings\":{\"default\":{\"default\":\"o mit Strich und Akut\"}}},{\"category\":\"Ll\",\"key\":\"023C\",\"mappings\":{\"default\":{\"default\":\"c mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0247\",\"mappings\":{\"default\":{\"default\":\"e mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0249\",\"mappings\":{\"default\":{\"default\":\"j mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"024D\",\"mappings\":{\"default\":{\"default\":\"r mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"024F\",\"mappings\":{\"default\":{\"default\":\"y mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"025F\",\"mappings\":{\"default\":{\"default\":\"punktloses j mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0268\",\"mappings\":{\"default\":{\"default\":\"i mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"0284\",\"mappings\":{\"default\":{\"default\":\"punktloses j mit Strich und Haken\"}}},{\"category\":\"Ll\",\"key\":\"02A1\",\"mappings\":{\"default\":{\"default\":\"Glottalanschlag mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"02A2\",\"mappings\":{\"default\":{\"default\":\"umgekehrter Glottalanschlag mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"1D13\",\"mappings\":{\"default\":{\"default\":\"liegendes O mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"1D7C\",\"mappings\":{\"default\":{\"default\":\"iota mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"1D7D\",\"mappings\":{\"default\":{\"default\":\"p mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"1D7F\",\"mappings\":{\"default\":{\"default\":\"upsilon mit Strich\"}}},{\"category\":\"Ll\",\"key\":\"1E9C\",\"mappings\":{\"default\":{\"default\":\"lang mit diagonalem Anschlag\"}}},{\"category\":\"Ll\",\"key\":\"1E9D\",\"mappings\":{\"default\":{\"default\":\"lang S mit hohem Hub\"}}},{\"category\":\"Ll\",\"key\":\"018D\",\"mappings\":{\"default\":{\"default\":\"wurde Delta gedreht\"}}},{\"category\":\"Ll\",\"key\":\"1E9B\",\"mappings\":{\"default\":{\"default\":\"lang mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E9F\",\"mappings\":{\"default\":{\"default\":\"delta\"}}},{\"key\":\"0138\",\"mappings\":{\"default\":{\"default\":\"kra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"017F\",\"mappings\":{\"default\":{\"default\":\"lang S\"}}},{\"category\":\"Ll\",\"key\":\"0183\",\"mappings\":{\"default\":{\"default\":\"b mit Oberleiste\"}}},{\"category\":\"Ll\",\"key\":\"0185\",\"mappings\":{\"default\":{\"default\":\"ton sechs\"}}},{\"category\":\"Ll\",\"key\":\"0188\",\"mappings\":{\"default\":{\"default\":\"c mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"018C\",\"mappings\":{\"default\":{\"default\":\"d mit Oberleiste\"}}},{\"key\":\"0192\",\"mappings\":{\"default\":{\"default\":\"f mit Haken\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0195\",\"mappings\":{\"default\":{\"default\":\"hv\"}}},{\"category\":\"Ll\",\"key\":\"0199\",\"mappings\":{\"default\":{\"default\":\"k mit Haken\"}}},{\"key\":\"019A\",\"mappings\":{\"default\":{\"default\":\"l mit Strich\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"019E\",\"mappings\":{\"default\":{\"default\":\"n mit langem rechtem Bein\"}}},{\"category\":\"Ll\",\"key\":\"01A1\",\"mappings\":{\"default\":{\"default\":\"o mit Horn\"}}},{\"category\":\"Ll\",\"key\":\"01A3\",\"mappings\":{\"default\":{\"default\":\"oi\"}}},{\"category\":\"Ll\",\"key\":\"01A5\",\"mappings\":{\"default\":{\"default\":\"p mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"01A8\",\"mappings\":{\"default\":{\"default\":\"ton zwei\"}}},{\"category\":\"Ll\",\"key\":\"01AA\",\"mappings\":{\"default\":{\"default\":\"umgedrehte esh Schleife\"}}},{\"category\":\"Ll\",\"key\":\"01AB\",\"mappings\":{\"default\":{\"default\":\"t mit palatal Haken\"}}},{\"category\":\"Ll\",\"key\":\"01AD\",\"mappings\":{\"default\":{\"default\":\"t mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"01B0\",\"mappings\":{\"default\":{\"default\":\"u mit Horn\"}}},{\"category\":\"Ll\",\"key\":\"01B4\",\"mappings\":{\"default\":{\"default\":\"y mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"01B9\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes ezh\"}}},{\"category\":\"Ll\",\"key\":\"01BA\",\"mappings\":{\"default\":{\"default\":\"ezh mit Schwanz\"}}},{\"category\":\"Ll\",\"key\":\"01BD\",\"mappings\":{\"default\":{\"default\":\"ton fünf\"}}},{\"category\":\"Ll\",\"key\":\"01BF\",\"mappings\":{\"default\":{\"default\":\"wynn\"}}},{\"category\":\"Ll\",\"key\":\"01C6\",\"mappings\":{\"default\":{\"default\":\"dz mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01C9\",\"mappings\":{\"default\":{\"default\":\"lj\"}}},{\"category\":\"Ll\",\"key\":\"01CC\",\"mappings\":{\"default\":{\"default\":\"nj\"}}},{\"category\":\"Ll\",\"key\":\"01E3\",\"mappings\":{\"default\":{\"default\":\"ae mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"01EF\",\"mappings\":{\"default\":{\"default\":\"ezh mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01F3\",\"mappings\":{\"default\":{\"default\":\"dz\"}}},{\"category\":\"Ll\",\"key\":\"021D\",\"mappings\":{\"default\":{\"default\":\"yogh\"}}},{\"category\":\"Ll\",\"key\":\"026E\",\"mappings\":{\"default\":{\"default\":\"lezh\"}}},{\"category\":\"Ll\",\"key\":\"0292\",\"mappings\":{\"default\":{\"default\":\"ezh\"}}},{\"category\":\"Ll\",\"key\":\"0293\",\"mappings\":{\"default\":{\"default\":\"ezh mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"02A4\",\"mappings\":{\"default\":{\"default\":\"dezh Digraph\"}}},{\"category\":\"Ll\",\"key\":\"01DD\",\"mappings\":{\"default\":{\"default\":\"gedreht E\"}}},{\"category\":\"Ll\",\"key\":\"01FD\",\"mappings\":{\"default\":{\"default\":\"ae mit Akut\"}}},{\"category\":\"Ll\",\"key\":\"0221\",\"mappings\":{\"default\":{\"default\":\"d mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0223\",\"mappings\":{\"default\":{\"default\":\"ou\"}}},{\"category\":\"Ll\",\"key\":\"0225\",\"mappings\":{\"default\":{\"default\":\"z mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0234\",\"mappings\":{\"default\":{\"default\":\"l mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0235\",\"mappings\":{\"default\":{\"default\":\"n mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0236\",\"mappings\":{\"default\":{\"default\":\"t mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0238\",\"mappings\":{\"default\":{\"default\":\"db\"}}},{\"category\":\"Ll\",\"key\":\"0239\",\"mappings\":{\"default\":{\"default\":\"qp Digraph\"}}},{\"category\":\"Ll\",\"key\":\"023F\",\"mappings\":{\"default\":{\"default\":\"s mit Swash Tail\"}}},{\"category\":\"Ll\",\"key\":\"0240\",\"mappings\":{\"default\":{\"default\":\"z mit Swash Tail\"}}},{\"category\":\"Ll\",\"key\":\"0242\",\"mappings\":{\"default\":{\"default\":\"Glottalanschlag\"}}},{\"category\":\"Ll\",\"key\":\"024B\",\"mappings\":{\"default\":{\"default\":\"q mit Hakenschwanz\"}}},{\"category\":\"Ll\",\"key\":\"0250\",\"mappings\":{\"default\":{\"default\":\"gedreht A\"}}},{\"category\":\"Ll\",\"key\":\"0251\",\"mappings\":{\"default\":{\"default\":\"alpha\"}}},{\"category\":\"Ll\",\"key\":\"0252\",\"mappings\":{\"default\":{\"default\":\"gedrehtes Alpha\"}}},{\"category\":\"Ll\",\"key\":\"0253\",\"mappings\":{\"default\":{\"default\":\"b mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0254\",\"mappings\":{\"default\":{\"default\":\"open O\"}}},{\"category\":\"Ll\",\"key\":\"0255\",\"mappings\":{\"default\":{\"default\":\"c mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0256\",\"mappings\":{\"default\":{\"default\":\"d mit Schwanz\"}}},{\"category\":\"Ll\",\"key\":\"0257\",\"mappings\":{\"default\":{\"default\":\"d mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0258\",\"mappings\":{\"default\":{\"default\":\"umgedreht E\"}}},{\"category\":\"Ll\",\"key\":\"0259\",\"mappings\":{\"default\":{\"default\":\"schwa\"}}},{\"category\":\"Ll\",\"key\":\"025A\",\"mappings\":{\"default\":{\"default\":\"schwa mit Haken\"}}},{\"key\":\"025B\",\"mappings\":{\"default\":{\"default\":\"offenes e\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"025C\",\"mappings\":{\"default\":{\"default\":\"umgedrehtes offenes e\"}}},{\"category\":\"Ll\",\"key\":\"025D\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes offenes e mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"025E\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes geschlossenes epsilon\"}}},{\"category\":\"Ll\",\"key\":\"0260\",\"mappings\":{\"default\":{\"default\":\"g mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0261\",\"mappings\":{\"default\":{\"default\":\"g\"}}},{\"category\":\"Ll\",\"key\":\"0263\",\"mappings\":{\"default\":{\"default\":\"gamma\"}}},{\"category\":\"Ll\",\"key\":\"0264\",\"mappings\":{\"default\":{\"default\":\"mini gamma\"}}},{\"category\":\"Ll\",\"key\":\"0265\",\"mappings\":{\"default\":{\"default\":\"gedrehtes h\"}}},{\"category\":\"Ll\",\"key\":\"0266\",\"mappings\":{\"default\":{\"default\":\"h mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0267\",\"mappings\":{\"default\":{\"default\":\"h mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0269\",\"mappings\":{\"default\":{\"default\":\"iota\"}}},{\"category\":\"Ll\",\"key\":\"026B\",\"mappings\":{\"default\":{\"default\":\"l mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"026C\",\"mappings\":{\"default\":{\"default\":\"l mit Gurt\"}}},{\"category\":\"Ll\",\"key\":\"026D\",\"mappings\":{\"default\":{\"default\":\"l mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"026F\",\"mappings\":{\"default\":{\"default\":\"gedreht M\"}}},{\"category\":\"Ll\",\"key\":\"0270\",\"mappings\":{\"default\":{\"default\":\"gedrehtes M mit langem Bein\"}}},{\"category\":\"Ll\",\"key\":\"0271\",\"mappings\":{\"default\":{\"default\":\"m mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0272\",\"mappings\":{\"default\":{\"default\":\"n mit linkem Haken\"}}},{\"category\":\"Ll\",\"key\":\"0273\",\"mappings\":{\"default\":{\"default\":\"n mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"0275\",\"mappings\":{\"default\":{\"default\":\"o mit balken\"}}},{\"category\":\"Ll\",\"key\":\"0277\",\"mappings\":{\"default\":{\"default\":\"geschlossenes omega\"}}},{\"category\":\"Ll\",\"key\":\"0278\",\"mappings\":{\"default\":{\"default\":\"phi\"}}},{\"category\":\"Ll\",\"key\":\"0279\",\"mappings\":{\"default\":{\"default\":\"gedrehtes r\"}}},{\"category\":\"Ll\",\"key\":\"027A\",\"mappings\":{\"default\":{\"default\":\"gedrehtes r mit langem Bein\"}}},{\"category\":\"Ll\",\"key\":\"027B\",\"mappings\":{\"default\":{\"default\":\"gedrehtes r mit langem Bein und Haken\"}}},{\"category\":\"Ll\",\"key\":\"027C\",\"mappings\":{\"default\":{\"default\":\"r mit langem Bein\"}}},{\"category\":\"Ll\",\"key\":\"027D\",\"mappings\":{\"default\":{\"default\":\"r mit Endstück\"}}},{\"category\":\"Ll\",\"key\":\"027E\",\"mappings\":{\"default\":{\"default\":\"r mit Angelhaken\"}}},{\"category\":\"Ll\",\"key\":\"027F\",\"mappings\":{\"default\":{\"default\":\"umgedrehtes R mit Angelhaken\"}}},{\"category\":\"Ll\",\"key\":\"0282\",\"mappings\":{\"default\":{\"default\":\"s mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"0283\",\"mappings\":{\"default\":{\"default\":\"esh\"}}},{\"category\":\"Ll\",\"key\":\"0285\",\"mappings\":{\"default\":{\"default\":\"squat umgekehrt\"}}},{\"category\":\"Ll\",\"key\":\"0286\",\"mappings\":{\"default\":{\"default\":\"esh mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0287\",\"mappings\":{\"default\":{\"default\":\"gedreht T\"}}},{\"category\":\"Ll\",\"key\":\"0288\",\"mappings\":{\"default\":{\"default\":\"t mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"0289\",\"mappings\":{\"default\":{\"default\":\"u Bar\"}}},{\"category\":\"Ll\",\"key\":\"028A\",\"mappings\":{\"default\":{\"default\":\"upsilon\"}}},{\"category\":\"Ll\",\"key\":\"028B\",\"mappings\":{\"default\":{\"default\":\"v mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"028C\",\"mappings\":{\"default\":{\"default\":\"gedrehtes v\"}}},{\"category\":\"Ll\",\"key\":\"028D\",\"mappings\":{\"default\":{\"default\":\"gedrehtes w\"}}},{\"category\":\"Ll\",\"key\":\"028E\",\"mappings\":{\"default\":{\"default\":\"gedrehtes y\"}}},{\"category\":\"Ll\",\"key\":\"0290\",\"mappings\":{\"default\":{\"default\":\"z mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"0291\",\"mappings\":{\"default\":{\"default\":\"z mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"0295\",\"mappings\":{\"default\":{\"default\":\"pharyngales stimmhaft Frikativ\"}}},{\"category\":\"Ll\",\"key\":\"0296\",\"mappings\":{\"default\":{\"default\":\"invertierter Glottalanschlag\"}}},{\"category\":\"Ll\",\"key\":\"0297\",\"mappings\":{\"default\":{\"default\":\"gestrecktes C\"}}},{\"category\":\"Ll\",\"key\":\"0298\",\"mappings\":{\"default\":{\"default\":\"bilabialer Klick\"}}},{\"category\":\"Ll\",\"key\":\"029A\",\"mappings\":{\"default\":{\"default\":\"geschlossenes offenes e\"}}},{\"category\":\"Ll\",\"key\":\"029E\",\"mappings\":{\"default\":{\"default\":\"gedrehtes k\"}}},{\"category\":\"Ll\",\"key\":\"02A0\",\"mappings\":{\"default\":{\"default\":\"q mit Haken\"}}},{\"category\":\"Ll\",\"key\":\"02A3\",\"mappings\":{\"default\":{\"default\":\"dz Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A5\",\"mappings\":{\"default\":{\"default\":\"dz Digraph mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"02A6\",\"mappings\":{\"default\":{\"default\":\"ts Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A7\",\"mappings\":{\"default\":{\"default\":\"tesh Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A8\",\"mappings\":{\"default\":{\"default\":\"tc Digraph mit Kringel\"}}},{\"category\":\"Ll\",\"key\":\"02A9\",\"mappings\":{\"default\":{\"default\":\"feng Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AA\",\"mappings\":{\"default\":{\"default\":\"ls Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AB\",\"mappings\":{\"default\":{\"default\":\"lz Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AC\",\"mappings\":{\"default\":{\"default\":\"bilabiales Perkussiv\"}}},{\"category\":\"Ll\",\"key\":\"02AD\",\"mappings\":{\"default\":{\"default\":\"bidentales Perkussiv\"}}},{\"category\":\"Ll\",\"key\":\"02AE\",\"mappings\":{\"default\":{\"default\":\"gedrehtes h mit Angelhaken\"}}},{\"category\":\"Ll\",\"key\":\"02AF\",\"mappings\":{\"default\":{\"default\":\"gedrehtes h mit Angelhaken und Schwanz\"}}},{\"category\":\"Ll\",\"key\":\"1D02\",\"mappings\":{\"default\":{\"default\":\"gedrehtes ae\"}}},{\"category\":\"Ll\",\"key\":\"1D08\",\"mappings\":{\"default\":{\"default\":\"gedrehtes e\"}}},{\"category\":\"Ll\",\"key\":\"1D09\",\"mappings\":{\"default\":{\"default\":\"gedrehtes i\"}}},{\"category\":\"Ll\",\"key\":\"1D11\",\"mappings\":{\"default\":{\"default\":\"liegendes O\"}}},{\"category\":\"Ll\",\"key\":\"1D12\",\"mappings\":{\"default\":{\"default\":\"liegendes geöffnet O\"}}},{\"category\":\"Ll\",\"key\":\"1D14\",\"mappings\":{\"default\":{\"default\":\"gedreht Oe\"}}},{\"category\":\"Ll\",\"key\":\"1D16\",\"mappings\":{\"default\":{\"default\":\"obere Hälfte O\"}}},{\"category\":\"Ll\",\"key\":\"1D17\",\"mappings\":{\"default\":{\"default\":\"untere Hälfte O\"}}},{\"category\":\"Ll\",\"key\":\"1D1D\",\"mappings\":{\"default\":{\"default\":\"liegendes U\"}}},{\"category\":\"Ll\",\"key\":\"1D1E\",\"mappings\":{\"default\":{\"default\":\"liegendes u Umlaut\"}}},{\"category\":\"Ll\",\"key\":\"1D1F\",\"mappings\":{\"default\":{\"default\":\"liegendes m\"}}},{\"category\":\"Ll\",\"key\":\"1D24\",\"mappings\":{\"default\":{\"default\":\"stimmhaft laryngaler Frikativ\"}}},{\"category\":\"Ll\",\"key\":\"1D25\",\"mappings\":{\"default\":{\"default\":\"Ain\"}}},{\"category\":\"Ll\",\"key\":\"1D6B\",\"mappings\":{\"default\":{\"default\":\"ue\"}}},{\"category\":\"Ll\",\"key\":\"1D6C\",\"mappings\":{\"default\":{\"default\":\"b mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6D\",\"mappings\":{\"default\":{\"default\":\"d mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6E\",\"mappings\":{\"default\":{\"default\":\"f mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D6F\",\"mappings\":{\"default\":{\"default\":\"m mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D70\",\"mappings\":{\"default\":{\"default\":\"n mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D71\",\"mappings\":{\"default\":{\"default\":\"p mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D72\",\"mappings\":{\"default\":{\"default\":\"r mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D73\",\"mappings\":{\"default\":{\"default\":\"r mit Angelhaken und mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D74\",\"mappings\":{\"default\":{\"default\":\"s mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D75\",\"mappings\":{\"default\":{\"default\":\"t mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D76\",\"mappings\":{\"default\":{\"default\":\"z mit mittlerer Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1D77\",\"mappings\":{\"default\":{\"default\":\"gedreht G\"}}},{\"category\":\"Ll\",\"key\":\"1D79\",\"mappings\":{\"default\":{\"default\":\"insular G\"}}},{\"category\":\"Ll\",\"key\":\"1D7A\",\"mappings\":{\"default\":{\"default\":\"th mit Durchgestrichen\"}}},{\"category\":\"Ll\",\"key\":\"1D80\",\"mappings\":{\"default\":{\"default\":\"b mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D81\",\"mappings\":{\"default\":{\"default\":\"d mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D82\",\"mappings\":{\"default\":{\"default\":\"f mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D83\",\"mappings\":{\"default\":{\"default\":\"g mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D84\",\"mappings\":{\"default\":{\"default\":\"k mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D85\",\"mappings\":{\"default\":{\"default\":\"l mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D86\",\"mappings\":{\"default\":{\"default\":\"m mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D87\",\"mappings\":{\"default\":{\"default\":\"n mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D88\",\"mappings\":{\"default\":{\"default\":\"p mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D89\",\"mappings\":{\"default\":{\"default\":\"r mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8A\",\"mappings\":{\"default\":{\"default\":\"s mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8B\",\"mappings\":{\"default\":{\"default\":\"esh mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8C\",\"mappings\":{\"default\":{\"default\":\"v mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8D\",\"mappings\":{\"default\":{\"default\":\"x mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8E\",\"mappings\":{\"default\":{\"default\":\"z mit Palatalhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D8F\",\"mappings\":{\"default\":{\"default\":\"a mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D90\",\"mappings\":{\"default\":{\"default\":\"alpha mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D91\",\"mappings\":{\"default\":{\"default\":\"d mit Haken und Schwanz\"}}},{\"category\":\"Ll\",\"key\":\"1D92\",\"mappings\":{\"default\":{\"default\":\"e mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D93\",\"mappings\":{\"default\":{\"default\":\"offenes e mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D94\",\"mappings\":{\"default\":{\"default\":\"umgedrehtes offenes e mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D95\",\"mappings\":{\"default\":{\"default\":\"schwa mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D96\",\"mappings\":{\"default\":{\"default\":\"i mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D97\",\"mappings\":{\"default\":{\"default\":\"offenes o mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D98\",\"mappings\":{\"default\":{\"default\":\"esh mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D99\",\"mappings\":{\"default\":{\"default\":\"u mit Retroflexhaken\"}}},{\"category\":\"Ll\",\"key\":\"1D9A\",\"mappings\":{\"default\":{\"default\":\"ezh mit Retroflexhaken\"}}},{\"key\":\"0149\",\"mappings\":{\"default\":{\"default\":\"n mit Apostroph davor\"}},\"category\":\"Ll\"},{\"key\":\"014B\",\"mappings\":{\"default\":{\"default\":\"eng\"}},\"category\":\"Ll\"}]\n,\n\"de/symbols/latin-lower-single-accent.js\": \n[{\"locale\":\"de\"},{\"key\":\"00E0\",\"mappings\":{\"default\":{\"default\":\"a mit Grave\"}},\"category\":\"Ll\"},{\"key\":\"00E1\",\"mappings\":{\"default\":{\"default\":\"a mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00E2\",\"mappings\":{\"default\":{\"default\":\"a mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"00E3\",\"mappings\":{\"default\":{\"default\":\"a mit Tilde\"}},\"category\":\"Ll\"},{\"key\":\"00E4\",\"mappings\":{\"default\":{\"default\":\"a mit Diärese\"}},\"category\":\"Ll\"},{\"key\":\"00E5\",\"mappings\":{\"default\":{\"default\":\"a mit Ring darüber\"}},\"category\":\"Ll\"},{\"key\":\"00E7\",\"mappings\":{\"default\":{\"default\":\"c mit Cedille\"}},\"category\":\"Ll\"},{\"key\":\"00E8\",\"mappings\":{\"default\":{\"default\":\"e mit Grave\"}},\"category\":\"Ll\"},{\"key\":\"00E9\",\"mappings\":{\"default\":{\"default\":\"e mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00EA\",\"mappings\":{\"default\":{\"default\":\"e mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"00EB\",\"mappings\":{\"default\":{\"default\":\"e mit Diärese\"}},\"category\":\"Ll\"},{\"key\":\"00EC\",\"mappings\":{\"default\":{\"default\":\"i mit Grave\"}},\"category\":\"Ll\"},{\"key\":\"00ED\",\"mappings\":{\"default\":{\"default\":\"i mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00EE\",\"mappings\":{\"default\":{\"default\":\"i mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"00EF\",\"mappings\":{\"default\":{\"default\":\"i mit Diärese\"}},\"category\":\"Ll\"},{\"key\":\"00F1\",\"mappings\":{\"default\":{\"default\":\"n mit Tilde\"}},\"category\":\"Ll\"},{\"key\":\"00F2\",\"mappings\":{\"default\":{\"default\":\"o mit Grave\"}},\"category\":\"Ll\"},{\"key\":\"00F3\",\"mappings\":{\"default\":{\"default\":\"o mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00F4\",\"mappings\":{\"default\":{\"default\":\"o mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"00F5\",\"mappings\":{\"default\":{\"default\":\"o mit Tilde\"}},\"category\":\"Ll\"},{\"key\":\"00F6\",\"mappings\":{\"default\":{\"default\":\"o mit Diärese\"}},\"category\":\"Ll\"},{\"key\":\"00F9\",\"mappings\":{\"default\":{\"default\":\"u mit Grave\"}},\"category\":\"Ll\"},{\"key\":\"00FA\",\"mappings\":{\"default\":{\"default\":\"u mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00FB\",\"mappings\":{\"default\":{\"default\":\"u mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"00FC\",\"mappings\":{\"default\":{\"default\":\"u mit Diärese\"}},\"category\":\"Ll\"},{\"key\":\"00FD\",\"mappings\":{\"default\":{\"default\":\"y mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"00FF\",\"mappings\":{\"default\":{\"default\":\"y mit Diärese\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0101\",\"mappings\":{\"default\":{\"default\":\"a mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"0103\",\"mappings\":{\"default\":{\"default\":\"a mit Breve\"}}},{\"category\":\"Ll\",\"key\":\"0105\",\"mappings\":{\"default\":{\"default\":\"a mit Ogonek\"}}},{\"key\":\"0107\",\"mappings\":{\"default\":{\"default\":\"c mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"0109\",\"mappings\":{\"default\":{\"default\":\"c mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"010B\",\"mappings\":{\"default\":{\"default\":\"c mit Punkt darüber\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"010D\",\"mappings\":{\"default\":{\"default\":\"c mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"010F\",\"mappings\":{\"default\":{\"default\":\"d mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"0113\",\"mappings\":{\"default\":{\"default\":\"e mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"0115\",\"mappings\":{\"default\":{\"default\":\"e mit Breve\"}}},{\"key\":\"0117\",\"mappings\":{\"default\":{\"default\":\"e mit Punkt darüber\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0119\",\"mappings\":{\"default\":{\"default\":\"e mit Ogonek\"}}},{\"category\":\"Ll\",\"key\":\"011B\",\"mappings\":{\"default\":{\"default\":\"e mit Caron\"}}},{\"key\":\"011D\",\"mappings\":{\"default\":{\"default\":\"g mit Zirkumflex\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"011F\",\"mappings\":{\"default\":{\"default\":\"g mit Breve\"}}},{\"key\":\"0121\",\"mappings\":{\"default\":{\"default\":\"g mit Punkt darüber\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0123\",\"mappings\":{\"default\":{\"default\":\"g mit Cedilla\"}}},{\"key\":\"0125\",\"mappings\":{\"default\":{\"default\":\"h mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"0129\",\"mappings\":{\"default\":{\"default\":\"i mit Tilde\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"012B\",\"mappings\":{\"default\":{\"default\":\"i mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"012D\",\"mappings\":{\"default\":{\"default\":\"i mit Breve\"}}},{\"category\":\"Ll\",\"key\":\"012F\",\"mappings\":{\"default\":{\"default\":\"i mit Ogonek\"}}},{\"key\":\"0131\",\"mappings\":{\"default\":{\"default\":\"i ohne punkt\"}},\"category\":\"Ll\"},{\"key\":\"0135\",\"mappings\":{\"default\":{\"default\":\"j mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"0137\",\"mappings\":{\"default\":{\"default\":\"k mit Cedille\"}},\"category\":\"Ll\"},{\"key\":\"013A\",\"mappings\":{\"default\":{\"default\":\"l mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"013C\",\"mappings\":{\"default\":{\"default\":\"l mit Cedille\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"013E\",\"mappings\":{\"default\":{\"default\":\"l mit Caron\"}}},{\"key\":\"0140\",\"mappings\":{\"default\":{\"default\":\"l mit Punkt in der Mitte\"}},\"category\":\"Ll\"},{\"key\":\"0144\",\"mappings\":{\"default\":{\"default\":\"n mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"0146\",\"mappings\":{\"default\":{\"default\":\"n mit Cedille\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0148\",\"mappings\":{\"default\":{\"default\":\"n mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"014D\",\"mappings\":{\"default\":{\"default\":\"o mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"014F\",\"mappings\":{\"default\":{\"default\":\"o mit Breve\"}}},{\"key\":\"0151\",\"mappings\":{\"default\":{\"default\":\"o mit doppeltem Aigu\"}},\"category\":\"Ll\"},{\"key\":\"0155\",\"mappings\":{\"default\":{\"default\":\"r mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"0157\",\"mappings\":{\"default\":{\"default\":\"r mit Cedille\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0159\",\"mappings\":{\"default\":{\"default\":\"r mit Caron\"}}},{\"key\":\"015B\",\"mappings\":{\"default\":{\"default\":\"s mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"015D\",\"mappings\":{\"default\":{\"default\":\"s mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"015F\",\"mappings\":{\"default\":{\"default\":\"s mit Cedille\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0161\",\"mappings\":{\"default\":{\"default\":\"s mit Caron\"}}},{\"key\":\"0163\",\"mappings\":{\"default\":{\"default\":\"t mit Cedille\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0165\",\"mappings\":{\"default\":{\"default\":\"t mit Caron\"}}},{\"key\":\"0169\",\"mappings\":{\"default\":{\"default\":\"u mit Tilde\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"016B\",\"mappings\":{\"default\":{\"default\":\"u mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"016D\",\"mappings\":{\"default\":{\"default\":\"u mit Breve\"}}},{\"key\":\"016F\",\"mappings\":{\"default\":{\"default\":\"u mit Ring darüber\"}},\"category\":\"Ll\"},{\"key\":\"0171\",\"mappings\":{\"default\":{\"default\":\"u mit doppeltem Aigu\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0173\",\"mappings\":{\"default\":{\"default\":\"u mit Ogonek\"}}},{\"key\":\"0175\",\"mappings\":{\"default\":{\"default\":\"w mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"0177\",\"mappings\":{\"default\":{\"default\":\"y mit Zirkumflex\"}},\"category\":\"Ll\"},{\"key\":\"017A\",\"mappings\":{\"default\":{\"default\":\"z mit Aigu\"}},\"category\":\"Ll\"},{\"key\":\"017C\",\"mappings\":{\"default\":{\"default\":\"z mit Punkt darüber\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"017E\",\"mappings\":{\"default\":{\"default\":\"z mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01CE\",\"mappings\":{\"default\":{\"default\":\"a mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01D0\",\"mappings\":{\"default\":{\"default\":\"i mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01D2\",\"mappings\":{\"default\":{\"default\":\"o mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01D4\",\"mappings\":{\"default\":{\"default\":\"u mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01E7\",\"mappings\":{\"default\":{\"default\":\"g mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01E9\",\"mappings\":{\"default\":{\"default\":\"k mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"01EB\",\"mappings\":{\"default\":{\"default\":\"o mit Ogonek\"}}},{\"category\":\"Ll\",\"key\":\"01F0\",\"mappings\":{\"default\":{\"default\":\"j mit Caron\"}}},{\"key\":\"01F5\",\"mappings\":{\"default\":{\"default\":\"g mit Aigu\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01F9\",\"mappings\":{\"default\":{\"default\":\"n mit Grab\"}}},{\"category\":\"Ll\",\"key\":\"0201\",\"mappings\":{\"default\":{\"default\":\"a mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"0203\",\"mappings\":{\"default\":{\"default\":\"a mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"0205\",\"mappings\":{\"default\":{\"default\":\"e mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"0207\",\"mappings\":{\"default\":{\"default\":\"e mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"0209\",\"mappings\":{\"default\":{\"default\":\"i mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"020B\",\"mappings\":{\"default\":{\"default\":\"i mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"020D\",\"mappings\":{\"default\":{\"default\":\"o mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"020F\",\"mappings\":{\"default\":{\"default\":\"o mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"0211\",\"mappings\":{\"default\":{\"default\":\"r mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"0213\",\"mappings\":{\"default\":{\"default\":\"r mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"0215\",\"mappings\":{\"default\":{\"default\":\"u mit Doppelgrab\"}}},{\"category\":\"Ll\",\"key\":\"0217\",\"mappings\":{\"default\":{\"default\":\"u mit umgekehrter Breve\"}}},{\"category\":\"Ll\",\"key\":\"0219\",\"mappings\":{\"default\":{\"default\":\"s mit untenstehendem Komma\"}}},{\"category\":\"Ll\",\"key\":\"021B\",\"mappings\":{\"default\":{\"default\":\"t mit untenstehendem Komma\"}}},{\"category\":\"Ll\",\"key\":\"021F\",\"mappings\":{\"default\":{\"default\":\"h mit Caron\"}}},{\"category\":\"Ll\",\"key\":\"0227\",\"mappings\":{\"default\":{\"default\":\"a mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"0229\",\"mappings\":{\"default\":{\"default\":\"e mit Cedilla\"}}},{\"category\":\"Ll\",\"key\":\"022F\",\"mappings\":{\"default\":{\"default\":\"o mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"0233\",\"mappings\":{\"default\":{\"default\":\"y mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"0237\",\"mappings\":{\"default\":{\"default\":\"dotless J\"}}},{\"category\":\"Ll\",\"key\":\"1E01\",\"mappings\":{\"default\":{\"default\":\"a mit Ring unten\"}}},{\"category\":\"Ll\",\"key\":\"1E03\",\"mappings\":{\"default\":{\"default\":\"b mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E05\",\"mappings\":{\"default\":{\"default\":\"b mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E07\",\"mappings\":{\"default\":{\"default\":\"b mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E0B\",\"mappings\":{\"default\":{\"default\":\"d mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E0D\",\"mappings\":{\"default\":{\"default\":\"d mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E0F\",\"mappings\":{\"default\":{\"default\":\"d mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E11\",\"mappings\":{\"default\":{\"default\":\"d mit Cedilla\"}}},{\"category\":\"Ll\",\"key\":\"1E13\",\"mappings\":{\"default\":{\"default\":\"d mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E19\",\"mappings\":{\"default\":{\"default\":\"e mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E1B\",\"mappings\":{\"default\":{\"default\":\"e mit darunterliegender Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1E1F\",\"mappings\":{\"default\":{\"default\":\"f mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E21\",\"mappings\":{\"default\":{\"default\":\"g mit Makron\"}}},{\"category\":\"Ll\",\"key\":\"1E23\",\"mappings\":{\"default\":{\"default\":\"h mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E25\",\"mappings\":{\"default\":{\"default\":\"h mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E27\",\"mappings\":{\"default\":{\"default\":\"h mit Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E29\",\"mappings\":{\"default\":{\"default\":\"h mit Cedilla\"}}},{\"category\":\"Ll\",\"key\":\"1E2B\",\"mappings\":{\"default\":{\"default\":\"h mit Breve unten\"}}},{\"category\":\"Ll\",\"key\":\"1E2D\",\"mappings\":{\"default\":{\"default\":\"i mit darunterliegender Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1E31\",\"mappings\":{\"default\":{\"default\":\"k mit Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E33\",\"mappings\":{\"default\":{\"default\":\"k mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E35\",\"mappings\":{\"default\":{\"default\":\"k mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E37\",\"mappings\":{\"default\":{\"default\":\"l mit Punkt unten\"}}},{\"category\":\"Ll\",\"key\":\"1E3B\",\"mappings\":{\"default\":{\"default\":\"l mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E3D\",\"mappings\":{\"default\":{\"default\":\"l mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E3F\",\"mappings\":{\"default\":{\"default\":\"m mit Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E41\",\"mappings\":{\"default\":{\"default\":\"m mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E43\",\"mappings\":{\"default\":{\"default\":\"m mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E45\",\"mappings\":{\"default\":{\"default\":\"n mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E47\",\"mappings\":{\"default\":{\"default\":\"n mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E49\",\"mappings\":{\"default\":{\"default\":\"n mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E4B\",\"mappings\":{\"default\":{\"default\":\"n mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E55\",\"mappings\":{\"default\":{\"default\":\"p mit Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E57\",\"mappings\":{\"default\":{\"default\":\"p mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E59\",\"mappings\":{\"default\":{\"default\":\"r mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E5B\",\"mappings\":{\"default\":{\"default\":\"r mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E5F\",\"mappings\":{\"default\":{\"default\":\"r mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E61\",\"mappings\":{\"default\":{\"default\":\"s mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E63\",\"mappings\":{\"default\":{\"default\":\"s mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E6B\",\"mappings\":{\"default\":{\"default\":\"t mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E6D\",\"mappings\":{\"default\":{\"default\":\"t mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E6F\",\"mappings\":{\"default\":{\"default\":\"t mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E71\",\"mappings\":{\"default\":{\"default\":\"t mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E73\",\"mappings\":{\"default\":{\"default\":\"u mit untenstehender Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E75\",\"mappings\":{\"default\":{\"default\":\"u mit darunterliegender Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1E77\",\"mappings\":{\"default\":{\"default\":\"u mit darunterem Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E7D\",\"mappings\":{\"default\":{\"default\":\"v mit Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1E7F\",\"mappings\":{\"default\":{\"default\":\"v mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E81\",\"mappings\":{\"default\":{\"default\":\"w mit Grab\"}}},{\"category\":\"Ll\",\"key\":\"1E83\",\"mappings\":{\"default\":{\"default\":\"w mit Akut\"}}},{\"category\":\"Ll\",\"key\":\"1E85\",\"mappings\":{\"default\":{\"default\":\"w mit Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E87\",\"mappings\":{\"default\":{\"default\":\"w mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E89\",\"mappings\":{\"default\":{\"default\":\"w mit Punkt unten\"}}},{\"category\":\"Ll\",\"key\":\"1E8B\",\"mappings\":{\"default\":{\"default\":\"x mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E8D\",\"mappings\":{\"default\":{\"default\":\"x mit Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E8F\",\"mappings\":{\"default\":{\"default\":\"y mit Punkt oben\"}}},{\"category\":\"Ll\",\"key\":\"1E91\",\"mappings\":{\"default\":{\"default\":\"z mit Zirkumflex\"}}},{\"category\":\"Ll\",\"key\":\"1E93\",\"mappings\":{\"default\":{\"default\":\"z mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1E95\",\"mappings\":{\"default\":{\"default\":\"z mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E96\",\"mappings\":{\"default\":{\"default\":\"h mit Zeile darunter\"}}},{\"category\":\"Ll\",\"key\":\"1E97\",\"mappings\":{\"default\":{\"default\":\"t mit Diärese\"}}},{\"category\":\"Ll\",\"key\":\"1E98\",\"mappings\":{\"default\":{\"default\":\"w mit Ring oben\"}}},{\"category\":\"Ll\",\"key\":\"1E99\",\"mappings\":{\"default\":{\"default\":\"y mit Ring oben\"}}},{\"category\":\"Ll\",\"key\":\"1E9A\",\"mappings\":{\"default\":{\"default\":\"a mit rechtem Halbring\"}}},{\"category\":\"Ll\",\"key\":\"1EA1\",\"mappings\":{\"default\":{\"default\":\"a mit Punkt unten\"}}},{\"category\":\"Ll\",\"key\":\"1EA3\",\"mappings\":{\"default\":{\"default\":\"a mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EB9\",\"mappings\":{\"default\":{\"default\":\"e mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1EBB\",\"mappings\":{\"default\":{\"default\":\"e mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EBD\",\"mappings\":{\"default\":{\"default\":\"e mit Tilde\"}}},{\"category\":\"Ll\",\"key\":\"1EC9\",\"mappings\":{\"default\":{\"default\":\"i mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1ECB\",\"mappings\":{\"default\":{\"default\":\"i mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1ECD\",\"mappings\":{\"default\":{\"default\":\"o mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1ECF\",\"mappings\":{\"default\":{\"default\":\"o mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EE5\",\"mappings\":{\"default\":{\"default\":\"u mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1EE7\",\"mappings\":{\"default\":{\"default\":\"u mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EF3\",\"mappings\":{\"default\":{\"default\":\"y mit Grab\"}}},{\"category\":\"Ll\",\"key\":\"1EF5\",\"mappings\":{\"default\":{\"default\":\"y mit untenstehendem Punkt\"}}},{\"category\":\"Ll\",\"key\":\"1EF7\",\"mappings\":{\"default\":{\"default\":\"y mit Haken oben\"}}},{\"category\":\"Ll\",\"key\":\"1EF9\",\"mappings\":{\"default\":{\"default\":\"y mit Tilde\"}}}]\n,\n\"de/symbols/latin-rest.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"210E\",\"mappings\":{\"default\":{\"default\":\"Planck-Konstante\"}}},{\"category\":\"Mn\",\"key\":\"0363\",\"mappings\":{\"default\":{\"default\":\"kombinierendes a\"}}},{\"category\":\"Mn\",\"key\":\"0364\",\"mappings\":{\"default\":{\"default\":\"kombinierendes e\"}}},{\"category\":\"Mn\",\"key\":\"0365\",\"mappings\":{\"default\":{\"default\":\"kombinierendes i\"}}},{\"category\":\"Mn\",\"key\":\"0366\",\"mappings\":{\"default\":{\"default\":\"kombinierendes o\"}}},{\"category\":\"Mn\",\"key\":\"0367\",\"mappings\":{\"default\":{\"default\":\"kombinierendes u\"}}},{\"category\":\"Mn\",\"key\":\"0368\",\"mappings\":{\"default\":{\"default\":\"kombinierendes c\"}}},{\"category\":\"Mn\",\"key\":\"0369\",\"mappings\":{\"default\":{\"default\":\"kombinierendes d\"}}},{\"category\":\"Mn\",\"key\":\"036A\",\"mappings\":{\"default\":{\"default\":\"kombinierendes h\"}}},{\"category\":\"Mn\",\"key\":\"036B\",\"mappings\":{\"default\":{\"default\":\"kombinierendes m\"}}},{\"category\":\"Mn\",\"key\":\"036C\",\"mappings\":{\"default\":{\"default\":\"kombinierendes r\"}}},{\"category\":\"Mn\",\"key\":\"036D\",\"mappings\":{\"default\":{\"default\":\"kombinierendes t\"}}},{\"category\":\"Mn\",\"key\":\"036E\",\"mappings\":{\"default\":{\"default\":\"kombinierendes v\"}}},{\"category\":\"Mn\",\"key\":\"036F\",\"mappings\":{\"default\":{\"default\":\"kombinierendes x\"}}},{\"category\":\"Lm\",\"key\":\"1D62\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes i\"}}},{\"category\":\"Lm\",\"key\":\"1D63\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes r\"}}},{\"category\":\"Lm\",\"key\":\"1D64\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes u\"}}},{\"category\":\"Lm\",\"key\":\"1D65\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes v\"}}},{\"category\":\"Mn\",\"key\":\"1DCA\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes r\"}}},{\"category\":\"Mn\",\"key\":\"1DD3\",\"mappings\":{\"default\":{\"default\":\"kombinierendes oberes w\"}}},{\"category\":\"Mn\",\"key\":\"1DD4\",\"mappings\":{\"default\":{\"default\":\"kombinierendes ae\"}}},{\"category\":\"Mn\",\"key\":\"1DD5\",\"mappings\":{\"default\":{\"default\":\"kombinierendes ao\"}}},{\"category\":\"Mn\",\"key\":\"1DD6\",\"mappings\":{\"default\":{\"default\":\"kombinierendes av\"}}},{\"category\":\"Mn\",\"key\":\"1DD7\",\"mappings\":{\"default\":{\"default\":\"kombinierendes c mit Cedilla\"}}},{\"category\":\"Mn\",\"key\":\"1DD8\",\"mappings\":{\"default\":{\"default\":\"kombinierendes insulares d\"}}},{\"category\":\"Mn\",\"key\":\"1DD9\",\"mappings\":{\"default\":{\"default\":\"kombinierendes eth\"}}},{\"category\":\"Mn\",\"key\":\"1DDA\",\"mappings\":{\"default\":{\"default\":\"kombinierendes g\"}}},{\"category\":\"Mn\",\"key\":\"1DDB\",\"mappings\":{\"default\":{\"default\":\"kombinierendes Kapitälchen g\"}}},{\"category\":\"Mn\",\"key\":\"1DDC\",\"mappings\":{\"default\":{\"default\":\"kombinierendes k\"}}},{\"category\":\"Mn\",\"key\":\"1DDD\",\"mappings\":{\"default\":{\"default\":\"kombinierendes l\"}}},{\"category\":\"Mn\",\"key\":\"1DDE\",\"mappings\":{\"default\":{\"default\":\"kombinierendes Kapitälchen L\"}}},{\"category\":\"Mn\",\"key\":\"1DDF\",\"mappings\":{\"default\":{\"default\":\"kombinierendes Kapitälchen M\"}}},{\"category\":\"Mn\",\"key\":\"1DE0\",\"mappings\":{\"default\":{\"default\":\"kombinierendes n\"}}},{\"category\":\"Mn\",\"key\":\"1DE1\",\"mappings\":{\"default\":{\"default\":\"kombinierendes Kapitälchen N\"}}},{\"category\":\"Mn\",\"key\":\"1DE2\",\"mappings\":{\"default\":{\"default\":\"kombinierendes lateinisches Kapitälchen R\"}}},{\"category\":\"Mn\",\"key\":\"1DE3\",\"mappings\":{\"default\":{\"default\":\"kombinierendes r rotunda\"}}},{\"category\":\"Mn\",\"key\":\"1DE4\",\"mappings\":{\"default\":{\"default\":\"kombinierendes s\"}}},{\"category\":\"Mn\",\"key\":\"1DE5\",\"mappings\":{\"default\":{\"default\":\"kombinierendes langes s\"}}},{\"category\":\"Mn\",\"key\":\"1DE6\",\"mappings\":{\"default\":{\"default\":\"kombinierendes z\"}}},{\"category\":\"Lm\",\"key\":\"2071\",\"mappings\":{\"default\":{\"default\":\"hochgestelltes i\"}}},{\"category\":\"Lm\",\"key\":\"207F\",\"mappings\":{\"default\":{\"default\":\"hochgestelltes n\"}}},{\"category\":\"Lm\",\"key\":\"2090\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes a\"}}},{\"category\":\"Lm\",\"key\":\"2091\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes e\"}}},{\"category\":\"Lm\",\"key\":\"2092\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes o\"}}},{\"category\":\"Lm\",\"key\":\"2093\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes x\"}}},{\"category\":\"Lm\",\"key\":\"2094\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes schwa\"}}},{\"category\":\"Lm\",\"key\":\"2095\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes h\"}}},{\"category\":\"Lm\",\"key\":\"2096\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes k\"}}},{\"category\":\"Lm\",\"key\":\"2097\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes l\"}}},{\"category\":\"Lm\",\"key\":\"2098\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes m\"}}},{\"category\":\"Lm\",\"key\":\"2099\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes n\"}}},{\"category\":\"Lm\",\"key\":\"209A\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes p\"}}},{\"category\":\"Lm\",\"key\":\"209B\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes s\"}}},{\"category\":\"Lm\",\"key\":\"209C\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes t\"}}},{\"category\":\"Lm\",\"key\":\"2C7C\",\"mappings\":{\"default\":{\"default\":\"tiefgestelltes j\"}}},{\"category\":\"So\",\"key\":\"1F12A\",\"mappings\":{\"default\":{\"default\":\"groß S in stumpfen Klammern\"}}},{\"category\":\"So\",\"key\":\"1F12B\",\"mappings\":{\"default\":{\"default\":\"eingekreistes kursives groß C\"}}},{\"category\":\"So\",\"key\":\"1F12C\",\"mappings\":{\"default\":{\"default\":\"eingekreistes kursives groß R\"}}},{\"category\":\"So\",\"key\":\"1F18A\",\"mappings\":{\"default\":{\"default\":\"durchgestrichenes P auf schwarzen Quadrat\"}}}]\n,\n\"de/symbols/latin-upper-double-accent.js\": \n[{\"locale\":\"de\"},{\"category\":\"Lu\",\"key\":\"01D5\",\"mappings\":{\"default\":{\"default\":\"groß U mit Diärese und Makron\"}}},{\"category\":\"Lu\",\"key\":\"01D7\",\"mappings\":{\"default\":{\"default\":\"groß U mit Diärese und Akut\"}}},{\"category\":\"Lu\",\"key\":\"01D9\",\"mappings\":{\"default\":{\"default\":\"groß U mit Diärese und Caron\"}}},{\"category\":\"Lu\",\"key\":\"01DB\",\"mappings\":{\"default\":{\"default\":\"groß U mit Diärese und Grab\"}}},{\"category\":\"Lu\",\"key\":\"01DE\",\"mappings\":{\"default\":{\"default\":\"groß A mit Diärese und Makron\"}}},{\"category\":\"Lu\",\"key\":\"01E0\",\"mappings\":{\"default\":{\"default\":\"groß A mit Dot Above und Makron\"}}},{\"category\":\"Lu\",\"key\":\"01EC\",\"mappings\":{\"default\":{\"default\":\"groß O mit Ogonek und Makron\"}}},{\"category\":\"Lu\",\"key\":\"01FA\",\"mappings\":{\"default\":{\"default\":\"groß A mit Ring oben und akut\"}}},{\"category\":\"Lu\",\"key\":\"022A\",\"mappings\":{\"default\":{\"default\":\"groß O mit Diärese und Makron\"}}},{\"category\":\"Lu\",\"key\":\"022C\",\"mappings\":{\"default\":{\"default\":\"groß O mit Tilde und Makron\"}}},{\"category\":\"Lu\",\"key\":\"0230\",\"mappings\":{\"default\":{\"default\":\"groß O mit Punkt oben und Makron\"}}},{\"category\":\"Lu\",\"key\":\"1E08\",\"mappings\":{\"default\":{\"default\":\"groß C mit Cedilla und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E14\",\"mappings\":{\"default\":{\"default\":\"groß E mit Makron und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1E16\",\"mappings\":{\"default\":{\"default\":\"groß E mit Makron und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E1C\",\"mappings\":{\"default\":{\"default\":\"groß E mit Cedilla und Breve\"}}},{\"category\":\"Lu\",\"key\":\"1E2E\",\"mappings\":{\"default\":{\"default\":\"groß I mit Diärese und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E38\",\"mappings\":{\"default\":{\"default\":\"groß L mit Dot Below und Makron\"}}},{\"category\":\"Lu\",\"key\":\"1E4C\",\"mappings\":{\"default\":{\"default\":\"groß O mit Tilde und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E4E\",\"mappings\":{\"default\":{\"default\":\"groß O mit Tilde und Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1E50\",\"mappings\":{\"default\":{\"default\":\"groß O mit Makron und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1E52\",\"mappings\":{\"default\":{\"default\":\"groß O mit Makron und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E5C\",\"mappings\":{\"default\":{\"default\":\"groß R mit Punkt unten und Makron\"}}},{\"category\":\"Lu\",\"key\":\"1E64\",\"mappings\":{\"default\":{\"default\":\"groß S mit Akute und Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E66\",\"mappings\":{\"default\":{\"default\":\"groß S mit Caron und Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E68\",\"mappings\":{\"default\":{\"default\":\"groß S mit untenstehendem Punkt und oben stehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E78\",\"mappings\":{\"default\":{\"default\":\"groß U mit Tilde und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E7A\",\"mappings\":{\"default\":{\"default\":\"groß U mit Makron und Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1EA4\",\"mappings\":{\"default\":{\"default\":\"groß A mit Zirkumflex und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1EA6\",\"mappings\":{\"default\":{\"default\":\"groß A mit Zirkumflex und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1EA8\",\"mappings\":{\"default\":{\"default\":\"groß A mit Zirkumflex und Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EAA\",\"mappings\":{\"default\":{\"default\":\"groß A mit Circumflex und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EAC\",\"mappings\":{\"default\":{\"default\":\"groß A mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Lu\",\"key\":\"1EAE\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1EB0\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1EB2\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve und Hook oben\"}}},{\"category\":\"Lu\",\"key\":\"1EB4\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EB6\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve und Dot Below\"}}},{\"category\":\"Lu\",\"key\":\"1EBE\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1EC0\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1EC2\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex und Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EC4\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EC6\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Lu\",\"key\":\"1ED0\",\"mappings\":{\"default\":{\"default\":\"groß O mit Circumflex und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1ED2\",\"mappings\":{\"default\":{\"default\":\"groß O mit Zirkumflex und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1ED4\",\"mappings\":{\"default\":{\"default\":\"groß O mit Zirkumflex und Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1ED6\",\"mappings\":{\"default\":{\"default\":\"groß O mit Zirkumflex und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1ED8\",\"mappings\":{\"default\":{\"default\":\"groß O mit Zirkumflex und Punkt darunter\"}}},{\"category\":\"Lu\",\"key\":\"1EDA\",\"mappings\":{\"default\":{\"default\":\"groß O mit Horn und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1EDC\",\"mappings\":{\"default\":{\"default\":\"groß O mit Horn und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1EDE\",\"mappings\":{\"default\":{\"default\":\"groß O mit Horn und Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EE0\",\"mappings\":{\"default\":{\"default\":\"groß O mit Horn und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EE2\",\"mappings\":{\"default\":{\"default\":\"groß O mit Horn und Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1EE8\",\"mappings\":{\"default\":{\"default\":\"groß U mit Horn und Akut\"}}},{\"category\":\"Lu\",\"key\":\"1EEA\",\"mappings\":{\"default\":{\"default\":\"groß U mit Horn und Grab\"}}},{\"category\":\"Lu\",\"key\":\"1EEC\",\"mappings\":{\"default\":{\"default\":\"groß U mit Horn und Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EEE\",\"mappings\":{\"default\":{\"default\":\"groß U mit Horn und Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EF0\",\"mappings\":{\"default\":{\"default\":\"groß U mit Horn und Punkt\"}}}]\n,\n\"de/symbols/latin-upper-single-accent.js\": \n[{\"locale\":\"de\"},{\"key\":\"00C0\",\"mappings\":{\"default\":{\"default\":\"groß A mit Gravis\"}},\"category\":\"Lu\"},{\"key\":\"00C1\",\"mappings\":{\"default\":{\"default\":\"groß A mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"00C2\",\"mappings\":{\"default\":{\"default\":\"groß A mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"00C3\",\"mappings\":{\"default\":{\"default\":\"groß A mit Tilde\"}},\"category\":\"Lu\"},{\"key\":\"00C4\",\"mappings\":{\"default\":{\"default\":\"groß A mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"00C5\",\"mappings\":{\"default\":{\"default\":\"groß A mit Ring darüber\"}},\"category\":\"Lu\"},{\"key\":\"00C7\",\"mappings\":{\"default\":{\"default\":\"groß C mit Cedille\"}},\"category\":\"Lu\"},{\"key\":\"00C8\",\"mappings\":{\"default\":{\"default\":\"groß E mit Gravis\"}},\"category\":\"Lu\"},{\"key\":\"00C9\",\"mappings\":{\"default\":{\"default\":\"groß E mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"00CA\",\"mappings\":{\"default\":{\"default\":\"groß E mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"00CB\",\"mappings\":{\"default\":{\"default\":\"groß E mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"00CC\",\"mappings\":{\"default\":{\"default\":\"groß I mit Gravis\"}},\"category\":\"Lu\"},{\"key\":\"00CD\",\"mappings\":{\"default\":{\"default\":\"groß I mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"00CE\",\"mappings\":{\"default\":{\"default\":\"groß I mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"00CF\",\"mappings\":{\"default\":{\"default\":\"groß I mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"00D1\",\"mappings\":{\"default\":{\"default\":\"großes n mit Tilde\"}},\"category\":\"Lu\"},{\"key\":\"00D2\",\"mappings\":{\"default\":{\"default\":\"großes o mit Gravis\"}},\"category\":\"Lu\"},{\"key\":\"00D3\",\"mappings\":{\"default\":{\"default\":\"groß O mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"00D4\",\"mappings\":{\"default\":{\"default\":\"groß O mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"00D5\",\"mappings\":{\"default\":{\"default\":\"groß O mit Tilde\"}},\"category\":\"Lu\"},{\"key\":\"00D6\",\"mappings\":{\"default\":{\"default\":\"groß O mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"00D9\",\"mappings\":{\"default\":{\"default\":\"groß U mit Gravis\"}},\"category\":\"Lu\"},{\"key\":\"00DA\",\"mappings\":{\"default\":{\"default\":\"groß U mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"00DB\",\"mappings\":{\"default\":{\"default\":\"groß U mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"00DC\",\"mappings\":{\"default\":{\"default\":\"groß U mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"00DD\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Aigu\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0100\",\"mappings\":{\"default\":{\"default\":\"groß A mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"0102\",\"mappings\":{\"default\":{\"default\":\"groß A mit Breve\"}}},{\"category\":\"Lu\",\"key\":\"0104\",\"mappings\":{\"default\":{\"default\":\"groß A mit Ogonek\"}}},{\"key\":\"0106\",\"mappings\":{\"default\":{\"default\":\"groß C mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"0108\",\"mappings\":{\"default\":{\"default\":\"groß C mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"010A\",\"mappings\":{\"default\":{\"default\":\"groß C mit Punkt darüber\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"010C\",\"mappings\":{\"default\":{\"default\":\"groß C mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"010E\",\"mappings\":{\"default\":{\"default\":\"groß D mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"0112\",\"mappings\":{\"default\":{\"default\":\"groß E mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"0114\",\"mappings\":{\"default\":{\"default\":\"groß E mit Breve\"}}},{\"key\":\"0116\",\"mappings\":{\"default\":{\"default\":\"groß E mit Punkt darüber\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0118\",\"mappings\":{\"default\":{\"default\":\"groß E mit Ogonek\"}}},{\"category\":\"Lu\",\"key\":\"011A\",\"mappings\":{\"default\":{\"default\":\"groß E mit Caron\"}}},{\"key\":\"011C\",\"mappings\":{\"default\":{\"default\":\"groß G mit Zirkumflex\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"011E\",\"mappings\":{\"default\":{\"default\":\"groß G mit Breve\"}}},{\"key\":\"0120\",\"mappings\":{\"default\":{\"default\":\"groß G mit Punkt darüber\"}},\"category\":\"Lu\"},{\"key\":\"0122\",\"mappings\":{\"default\":{\"default\":\"groß G mit Cedille\"}},\"category\":\"Lu\"},{\"key\":\"0124\",\"mappings\":{\"default\":{\"default\":\"groß H mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"0128\",\"mappings\":{\"default\":{\"default\":\"groß I mit Tilde\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"012A\",\"mappings\":{\"default\":{\"default\":\"groß I mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"012C\",\"mappings\":{\"default\":{\"default\":\"groß I mit Breve\"}}},{\"category\":\"Lu\",\"key\":\"012E\",\"mappings\":{\"default\":{\"default\":\"groß I mit Ogonek\"}}},{\"key\":\"0130\",\"mappings\":{\"default\":{\"default\":\"groß I mit Punkt darüber\"}},\"category\":\"Lu\"},{\"key\":\"0134\",\"mappings\":{\"default\":{\"default\":\"groß J mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"0136\",\"mappings\":{\"default\":{\"default\":\"groß K mit Cedille\"}},\"category\":\"Lu\"},{\"key\":\"0139\",\"mappings\":{\"default\":{\"default\":\"groß L mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"013B\",\"mappings\":{\"default\":{\"default\":\"groß L mit Cedille\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"013D\",\"mappings\":{\"default\":{\"default\":\"groß L mit Caron\"}}},{\"key\":\"013F\",\"mappings\":{\"default\":{\"default\":\"groß L mit Punkt in der Mitte\"}},\"category\":\"Lu\"},{\"key\":\"0143\",\"mappings\":{\"default\":{\"default\":\"groß N mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"0145\",\"mappings\":{\"default\":{\"default\":\"groß N mit Cedille\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0147\",\"mappings\":{\"default\":{\"default\":\"groß N mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"014C\",\"mappings\":{\"default\":{\"default\":\"groß O mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"014E\",\"mappings\":{\"default\":{\"default\":\"groß O mit Breve\"}}},{\"key\":\"0150\",\"mappings\":{\"default\":{\"default\":\"groß O mit doppeltem Aigu\"}},\"category\":\"Lu\"},{\"key\":\"0154\",\"mappings\":{\"default\":{\"default\":\"groß R mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"0156\",\"mappings\":{\"default\":{\"default\":\"groß R mit Cedille\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0158\",\"mappings\":{\"default\":{\"default\":\"groß R mit Caron\"}}},{\"key\":\"015A\",\"mappings\":{\"default\":{\"default\":\"groß S mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"015C\",\"mappings\":{\"default\":{\"default\":\"groß S mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"015E\",\"mappings\":{\"default\":{\"default\":\"groß S mit Cedille\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0160\",\"mappings\":{\"default\":{\"default\":\"groß S mit Caron\"}}},{\"key\":\"0162\",\"mappings\":{\"default\":{\"default\":\"groß T mit Cedille\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0164\",\"mappings\":{\"default\":{\"default\":\"groß T mit Caron\"}}},{\"key\":\"0168\",\"mappings\":{\"default\":{\"default\":\"groß U mit Tilde\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"016A\",\"mappings\":{\"default\":{\"default\":\"groß U mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"016C\",\"mappings\":{\"default\":{\"default\":\"groß U mit Breve\"}}},{\"key\":\"016E\",\"mappings\":{\"default\":{\"default\":\"groß U mit Ring darüber\"}},\"category\":\"Lu\"},{\"key\":\"0170\",\"mappings\":{\"default\":{\"default\":\"groß U mit dopppeltem Aigu\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0172\",\"mappings\":{\"default\":{\"default\":\"groß U mit Ogonek\"}}},{\"key\":\"0174\",\"mappings\":{\"default\":{\"default\":\"groß W mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"0176\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Zirkumflex\"}},\"category\":\"Lu\"},{\"key\":\"0178\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Diärese\"}},\"category\":\"Lu\"},{\"key\":\"0179\",\"mappings\":{\"default\":{\"default\":\"groß Z mit Aigu\"}},\"category\":\"Lu\"},{\"key\":\"017B\",\"mappings\":{\"default\":{\"default\":\"groß Z mit Punkt darüber\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"017D\",\"mappings\":{\"default\":{\"default\":\"groß Z mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01CD\",\"mappings\":{\"default\":{\"default\":\"groß A mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01CF\",\"mappings\":{\"default\":{\"default\":\"groß I mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01D1\",\"mappings\":{\"default\":{\"default\":\"groß O mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01D3\",\"mappings\":{\"default\":{\"default\":\"groß U mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01E6\",\"mappings\":{\"default\":{\"default\":\"groß G mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01E8\",\"mappings\":{\"default\":{\"default\":\"groß K mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"01EA\",\"mappings\":{\"default\":{\"default\":\"groß O mit Ogonek\"}}},{\"category\":\"Lu\",\"key\":\"01F4\",\"mappings\":{\"default\":{\"default\":\"groß G mit Akut\"}}},{\"category\":\"Lu\",\"key\":\"01F8\",\"mappings\":{\"default\":{\"default\":\"groß N mit Gravis\"}}},{\"category\":\"Lu\",\"key\":\"0200\",\"mappings\":{\"default\":{\"default\":\"groß A mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"0202\",\"mappings\":{\"default\":{\"default\":\"groß A mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"0204\",\"mappings\":{\"default\":{\"default\":\"groß E mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"0206\",\"mappings\":{\"default\":{\"default\":\"groß E mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"0208\",\"mappings\":{\"default\":{\"default\":\"groß I mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"020A\",\"mappings\":{\"default\":{\"default\":\"groß I mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"020C\",\"mappings\":{\"default\":{\"default\":\"groß O mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"020E\",\"mappings\":{\"default\":{\"default\":\"groß O mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"0210\",\"mappings\":{\"default\":{\"default\":\"groß R mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"0212\",\"mappings\":{\"default\":{\"default\":\"groß R mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"0214\",\"mappings\":{\"default\":{\"default\":\"groß U mit Doppelgravis\"}}},{\"category\":\"Lu\",\"key\":\"0216\",\"mappings\":{\"default\":{\"default\":\"groß U mit umgekehrter Breve\"}}},{\"category\":\"Lu\",\"key\":\"0218\",\"mappings\":{\"default\":{\"default\":\"groß S mit untenstehendem Komma\"}}},{\"category\":\"Lu\",\"key\":\"021A\",\"mappings\":{\"default\":{\"default\":\"groß T mit untenstehendem Komma\"}}},{\"category\":\"Lu\",\"key\":\"021E\",\"mappings\":{\"default\":{\"default\":\"groß H mit Caron\"}}},{\"category\":\"Lu\",\"key\":\"0226\",\"mappings\":{\"default\":{\"default\":\"groß A mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"0228\",\"mappings\":{\"default\":{\"default\":\"groß E mit Cedilla\"}}},{\"category\":\"Lu\",\"key\":\"022E\",\"mappings\":{\"default\":{\"default\":\"groß O mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"0232\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"1E00\",\"mappings\":{\"default\":{\"default\":\"groß A mit Ring unten\"}}},{\"category\":\"Lu\",\"key\":\"1E02\",\"mappings\":{\"default\":{\"default\":\"groß B mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E04\",\"mappings\":{\"default\":{\"default\":\"groß B mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E06\",\"mappings\":{\"default\":{\"default\":\"groß B mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E0A\",\"mappings\":{\"default\":{\"default\":\"groß D mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E0C\",\"mappings\":{\"default\":{\"default\":\"groß D mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E0E\",\"mappings\":{\"default\":{\"default\":\"groß D mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E10\",\"mappings\":{\"default\":{\"default\":\"groß D mit Cedilla\"}}},{\"category\":\"Lu\",\"key\":\"1E12\",\"mappings\":{\"default\":{\"default\":\"groß D mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E18\",\"mappings\":{\"default\":{\"default\":\"groß E mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E1A\",\"mappings\":{\"default\":{\"default\":\"groß E mit darunterliegender Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1E1E\",\"mappings\":{\"default\":{\"default\":\"groß F mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E20\",\"mappings\":{\"default\":{\"default\":\"groß G mit Makron\"}}},{\"category\":\"Lu\",\"key\":\"1E22\",\"mappings\":{\"default\":{\"default\":\"groß H mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E24\",\"mappings\":{\"default\":{\"default\":\"groß H mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E26\",\"mappings\":{\"default\":{\"default\":\"groß H mit Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1E28\",\"mappings\":{\"default\":{\"default\":\"groß H mit Cedilla\"}}},{\"category\":\"Lu\",\"key\":\"1E2A\",\"mappings\":{\"default\":{\"default\":\"groß H mit Breve unten\"}}},{\"category\":\"Lu\",\"key\":\"1E2C\",\"mappings\":{\"default\":{\"default\":\"groß I mit unten stehender Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1E30\",\"mappings\":{\"default\":{\"default\":\"groß K mit Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E32\",\"mappings\":{\"default\":{\"default\":\"groß K mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E34\",\"mappings\":{\"default\":{\"default\":\"groß K mit Zeile\"}}},{\"category\":\"Lu\",\"key\":\"1E36\",\"mappings\":{\"default\":{\"default\":\"groß L mit Punkt unten\"}}},{\"category\":\"Lu\",\"key\":\"1E3A\",\"mappings\":{\"default\":{\"default\":\"groß L mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E3C\",\"mappings\":{\"default\":{\"default\":\"groß L mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E3E\",\"mappings\":{\"default\":{\"default\":\"groß M mit Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E40\",\"mappings\":{\"default\":{\"default\":\"groß M mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E42\",\"mappings\":{\"default\":{\"default\":\"groß M mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E44\",\"mappings\":{\"default\":{\"default\":\"groß N mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E46\",\"mappings\":{\"default\":{\"default\":\"groß N mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E48\",\"mappings\":{\"default\":{\"default\":\"groß N mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E4A\",\"mappings\":{\"default\":{\"default\":\"groß N mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E54\",\"mappings\":{\"default\":{\"default\":\"groß P mit Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E56\",\"mappings\":{\"default\":{\"default\":\"groß P mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E58\",\"mappings\":{\"default\":{\"default\":\"groß R mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E5A\",\"mappings\":{\"default\":{\"default\":\"groß R mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E5E\",\"mappings\":{\"default\":{\"default\":\"groß R mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E60\",\"mappings\":{\"default\":{\"default\":\"groß S mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E62\",\"mappings\":{\"default\":{\"default\":\"groß S mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E6A\",\"mappings\":{\"default\":{\"default\":\"groß T mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E6C\",\"mappings\":{\"default\":{\"default\":\"groß T mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E6E\",\"mappings\":{\"default\":{\"default\":\"groß T mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1E70\",\"mappings\":{\"default\":{\"default\":\"groß T mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E72\",\"mappings\":{\"default\":{\"default\":\"groß U mit untenstehender Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1E74\",\"mappings\":{\"default\":{\"default\":\"groß U mit darunterliegender Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1E76\",\"mappings\":{\"default\":{\"default\":\"groß U mit darunterem Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E7C\",\"mappings\":{\"default\":{\"default\":\"groß V mit Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1E7E\",\"mappings\":{\"default\":{\"default\":\"groß V mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E80\",\"mappings\":{\"default\":{\"default\":\"groß W mit Gravis\"}}},{\"category\":\"Lu\",\"key\":\"1E82\",\"mappings\":{\"default\":{\"default\":\"groß W mit Akut\"}}},{\"category\":\"Lu\",\"key\":\"1E84\",\"mappings\":{\"default\":{\"default\":\"groß W mit Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1E86\",\"mappings\":{\"default\":{\"default\":\"groß W mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E88\",\"mappings\":{\"default\":{\"default\":\"groß W mit Punkt unten\"}}},{\"category\":\"Lu\",\"key\":\"1E8A\",\"mappings\":{\"default\":{\"default\":\"groß X mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E8C\",\"mappings\":{\"default\":{\"default\":\"groß X mit Diärese\"}}},{\"category\":\"Lu\",\"key\":\"1E8E\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Punkt oben\"}}},{\"category\":\"Lu\",\"key\":\"1E90\",\"mappings\":{\"default\":{\"default\":\"groß Z mit Zirkumflex\"}}},{\"category\":\"Lu\",\"key\":\"1E92\",\"mappings\":{\"default\":{\"default\":\"groß Z mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1E94\",\"mappings\":{\"default\":{\"default\":\"groß Z mit Zeile darunter\"}}},{\"category\":\"Lu\",\"key\":\"1EA0\",\"mappings\":{\"default\":{\"default\":\"groß A mit Punkt unten\"}}},{\"category\":\"Lu\",\"key\":\"1EA2\",\"mappings\":{\"default\":{\"default\":\"groß A mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EB8\",\"mappings\":{\"default\":{\"default\":\"groß E mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1EBA\",\"mappings\":{\"default\":{\"default\":\"groß E mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EBC\",\"mappings\":{\"default\":{\"default\":\"groß E mit Tilde\"}}},{\"category\":\"Lu\",\"key\":\"1EC8\",\"mappings\":{\"default\":{\"default\":\"groß I mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1ECA\",\"mappings\":{\"default\":{\"default\":\"groß I mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1ECC\",\"mappings\":{\"default\":{\"default\":\"groß O mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1ECE\",\"mappings\":{\"default\":{\"default\":\"groß O mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EE4\",\"mappings\":{\"default\":{\"default\":\"groß U mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1EE6\",\"mappings\":{\"default\":{\"default\":\"groß U mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EF2\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Gravis\"}}},{\"category\":\"Lu\",\"key\":\"1EF4\",\"mappings\":{\"default\":{\"default\":\"groß Y mit untenstehendem Punkt\"}}},{\"category\":\"Lu\",\"key\":\"1EF6\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Haken oben\"}}},{\"category\":\"Lu\",\"key\":\"1EF8\",\"mappings\":{\"default\":{\"default\":\"groß Y mit Tilde\"}}}]\n,\n\"de/symbols/math_angles.js\": \n[{\"locale\":\"de\"},{\"category\":\"Sm\",\"key\":\"22BE\",\"mappings\":{\"default\":{\"default\":\"rechter Winkel mit Bogen\"}}},{\"category\":\"Sm\",\"key\":\"237C\",\"mappings\":{\"default\":{\"default\":\"rechter Winkel mit nach unten gerichtetem Zickzackpfeil\"}}},{\"category\":\"Sm\",\"key\":\"27C0\",\"mappings\":{\"default\":{\"default\":\"Dreidimensionaler Winkel\"}}},{\"category\":\"Sm\",\"key\":\"299B\",\"mappings\":{\"default\":{\"default\":\"Gemessene Winkelöffnung links\"}}},{\"category\":\"Sm\",\"key\":\"299C\",\"mappings\":{\"default\":{\"default\":\"Rechtwinklige Variante mit Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"299D\",\"mappings\":{\"default\":{\"default\":\"rechter Winkel mit Punkt gemessen\"}}},{\"category\":\"Sm\",\"key\":\"299E\",\"mappings\":{\"default\":{\"default\":\"Winkel mit S nach innen\"}}},{\"category\":\"Sm\",\"key\":\"299F\",\"mappings\":{\"default\":{\"default\":\"Spitzer Winkel\"}}},{\"category\":\"Sm\",\"key\":\"29A0\",\"mappings\":{\"default\":{\"default\":\"Sphärischer Öffnungswinkel nach links\"}}},{\"category\":\"Sm\",\"key\":\"29A1\",\"mappings\":{\"default\":{\"default\":\"Sphärischer Winkel, der sich öffnet\"}}},{\"category\":\"Sm\",\"key\":\"29A2\",\"mappings\":{\"default\":{\"default\":\"Gedrehter Winkel\"}}},{\"category\":\"Sm\",\"key\":\"29A3\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Winkel\"}}},{\"category\":\"Sm\",\"key\":\"29A4\",\"mappings\":{\"default\":{\"default\":\"Winkel mit Underbar\"}}},{\"category\":\"Sm\",\"key\":\"29A5\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Winkel mit Unterleiste\"}}},{\"category\":\"Sm\",\"key\":\"29A6\",\"mappings\":{\"default\":{\"default\":\"Schräger Winkel, der sich öffnet\"}}},{\"category\":\"Sm\",\"key\":\"29A7\",\"mappings\":{\"default\":{\"default\":\"Schräger Winkel, der sich nach unten öffnet\"}}},{\"category\":\"Sm\",\"key\":\"29A8\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im Pfeil nach oben und rechts\"}}},{\"category\":\"Sm\",\"key\":\"29A9\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm und Pfeil nach oben und links\"}}},{\"category\":\"Sm\",\"key\":\"29AA\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im nach unten zeigenden Pfeil und rechts\"}}},{\"category\":\"Sm\",\"key\":\"29AB\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im nach unten zeigenden Pfeil\"}}},{\"category\":\"Sm\",\"key\":\"29AC\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im Pfeil nach rechts und oben\"}}},{\"category\":\"Sm\",\"key\":\"29AD\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im Pfeil nach links und oben\"}}},{\"category\":\"Sm\",\"key\":\"29AE\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm endet im nach rechts und unten zeigenden Pfeil\"}}},{\"category\":\"Sm\",\"key\":\"29AF\",\"mappings\":{\"default\":{\"default\":\"Gemessener Winkel mit offenem Arm und Pfeil nach links und unten\"}}}]\n,\n\"de/symbols/math_arrows.js\": \n[{\"locale\":\"de\"},{\"category\":\"Sm\",\"key\":\"2190\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2191\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil\"}}},{\"category\":\"Sm\",\"key\":\"2192\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2193\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2194\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil\"}}},{\"category\":\"So\",\"key\":\"2195\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach oben\"}}},{\"category\":\"So\",\"key\":\"2196\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeil\"}}},{\"category\":\"So\",\"key\":\"2197\",\"mappings\":{\"default\":{\"default\":\"Nordostpfeil\"}}},{\"category\":\"So\",\"key\":\"2198\",\"mappings\":{\"default\":{\"default\":\"Südostpfeil\"}}},{\"category\":\"So\",\"key\":\"2199\",\"mappings\":{\"default\":{\"default\":\"Südwestpfeil\"}}},{\"category\":\"Sm\",\"key\":\"219A\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Strich\"}}},{\"category\":\"Sm\",\"key\":\"219B\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Strich\"}}},{\"category\":\"So\",\"key\":\"219C\",\"mappings\":{\"default\":{\"default\":\"Wellenpfeil nach links\"}}},{\"category\":\"So\",\"key\":\"219D\",\"mappings\":{\"default\":{\"default\":\"Wellenpfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"219E\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit zwei Spitzen\"}}},{\"category\":\"So\",\"key\":\"219F\",\"mappings\":{\"default\":{\"default\":\"Aufwärts zwei Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"21A0\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit zwei Köpfen\"}}},{\"category\":\"So\",\"key\":\"21A1\",\"mappings\":{\"default\":{\"default\":\"Abwärts zwei Pfeil nach unten\"}}},{\"category\":\"So\",\"key\":\"21A2\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Schwanz\"}}},{\"category\":\"Sm\",\"key\":\"21A3\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Schwanz\"}}},{\"category\":\"So\",\"key\":\"21A4\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links von der Bar\"}}},{\"category\":\"So\",\"key\":\"21A5\",\"mappings\":{\"default\":{\"default\":\"Pfeil von der Bar nach oben\"}}},{\"category\":\"Sm\",\"key\":\"21A6\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts von der Bar\"}}},{\"category\":\"So\",\"key\":\"21A7\",\"mappings\":{\"default\":{\"default\":\"Pfeil von der Bar nach unten\"}}},{\"category\":\"So\",\"key\":\"21A8\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten mit Basis\"}}},{\"category\":\"So\",\"key\":\"21A9\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Haken\"}}},{\"category\":\"So\",\"key\":\"21AA\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Haken\"}}},{\"category\":\"So\",\"key\":\"21AB\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Schleife\"}}},{\"category\":\"So\",\"key\":\"21AC\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Schleife\"}}},{\"category\":\"So\",\"key\":\"21AD\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Wellenpfeil\"}}},{\"category\":\"Sm\",\"key\":\"21AE\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil mit Strich\"}}},{\"category\":\"So\",\"key\":\"21AF\",\"mappings\":{\"default\":{\"default\":\"Zickzack-Pfeil nach unten\"}}},{\"category\":\"So\",\"key\":\"21B0\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil mit Spitze nach links\"}}},{\"category\":\"So\",\"key\":\"21B1\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil mit Spitze nach rechts\"}}},{\"category\":\"So\",\"key\":\"21B2\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten mit Spitze nach links\"}}},{\"category\":\"So\",\"key\":\"21B3\",\"mappings\":{\"default\":{\"default\":\"Abwärtspfeil mit Spitze nach rechts\"}}},{\"category\":\"So\",\"key\":\"21B4\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Ecke nach unten\"}}},{\"category\":\"So\",\"key\":\"21B5\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten mit Ecke nach links\"}}},{\"category\":\"So\",\"key\":\"21B6\",\"mappings\":{\"default\":{\"default\":\"Gegen den Uhrzeigersinn oberer halbkreisförmiger Pfeil\"}}},{\"category\":\"So\",\"key\":\"21B7\",\"mappings\":{\"default\":{\"default\":\"Halbkreis im Uhrzeigersinn\"}}},{\"category\":\"So\",\"key\":\"21B8\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeil zur langen Bar\"}}},{\"category\":\"So\",\"key\":\"21B9\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links zum Überfahren Pfeil nach rechts zum Überfahren\"}}},{\"category\":\"So\",\"key\":\"21BA\",\"mappings\":{\"default\":{\"default\":\"Offener Kreispfeil gegen den Uhrzeigersinn\"}}},{\"category\":\"So\",\"key\":\"21BB\",\"mappings\":{\"default\":{\"default\":\"Kreispfeil im Uhrzeigersinn öffnen\"}}},{\"category\":\"So\",\"key\":\"21C4\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts über Pfeil nach links\"}}},{\"category\":\"So\",\"key\":\"21C5\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil nach links von Abwärtspfeil\"}}},{\"category\":\"So\",\"key\":\"21C6\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links über Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"21C7\",\"mappings\":{\"default\":{\"default\":\"Links gepaarte Pfeile\"}}},{\"category\":\"So\",\"key\":\"21C8\",\"mappings\":{\"default\":{\"default\":\"Aufwärts gepaarte Pfeile\"}}},{\"category\":\"So\",\"key\":\"21C9\",\"mappings\":{\"default\":{\"default\":\"Rechts gepaarte Pfeile\"}}},{\"category\":\"So\",\"key\":\"21CA\",\"mappings\":{\"default\":{\"default\":\"Abwärts gepaarte Pfeile\"}}},{\"category\":\"So\",\"key\":\"21CD\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links mit Strich\"}}},{\"category\":\"Sm\",\"key\":\"21CE\",\"mappings\":{\"default\":{\"default\":\"Links Rechts Doppelpfeil mit Strich\"}}},{\"category\":\"Sm\",\"key\":\"21CF\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach rechts mit Strich\"}}},{\"category\":\"So\",\"key\":\"21D0\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links\"}}},{\"category\":\"So\",\"key\":\"21D1\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach oben\"}}},{\"category\":\"Sm\",\"key\":\"21D2\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"21D3\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"21D4\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21D5\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach unten\"}}},{\"category\":\"So\",\"key\":\"21D6\",\"mappings\":{\"default\":{\"default\":\"Nordwest-Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21D7\",\"mappings\":{\"default\":{\"default\":\"Nordost-Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21D8\",\"mappings\":{\"default\":{\"default\":\"Südost Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21D9\",\"mappings\":{\"default\":{\"default\":\"Südwest-Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21DA\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Pfeil nach links\"}}},{\"category\":\"So\",\"key\":\"21DB\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"21DC\",\"mappings\":{\"default\":{\"default\":\"Linker Squiggle-Pfeil\"}}},{\"category\":\"So\",\"key\":\"21DD\",\"mappings\":{\"default\":{\"default\":\"Nach rechts gekrümmter Pfeil\"}}},{\"category\":\"So\",\"key\":\"21DE\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil mit Doppelstrich\"}}},{\"category\":\"So\",\"key\":\"21DF\",\"mappings\":{\"default\":{\"default\":\"Abwärtspfeil mit Doppelstrich\"}}},{\"category\":\"So\",\"key\":\"21E0\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links nach links\"}}},{\"category\":\"So\",\"key\":\"21E1\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach oben gestrichen\"}}},{\"category\":\"So\",\"key\":\"21E2\",\"mappings\":{\"default\":{\"default\":\"Rechts gestrichener Pfeil\"}}},{\"category\":\"So\",\"key\":\"21E3\",\"mappings\":{\"default\":{\"default\":\"Abwärts gestrichelter Pfeil\"}}},{\"category\":\"So\",\"key\":\"21E4\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links zur Bar\"}}},{\"category\":\"So\",\"key\":\"21E5\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts zur Bar\"}}},{\"category\":\"So\",\"key\":\"21E6\",\"mappings\":{\"default\":{\"default\":\"Weißer Pfeil nach links\"}}},{\"category\":\"So\",\"key\":\"21E7\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"21E8\",\"mappings\":{\"default\":{\"default\":\"Rechts weißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"21E9\",\"mappings\":{\"default\":{\"default\":\"Abwärts weißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"21EA\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Pfeil von der Stange\"}}},{\"category\":\"So\",\"key\":\"21EB\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Pfeil auf Sockel\"}}},{\"category\":\"So\",\"key\":\"21EC\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Pfeil auf Sockel mit horizontaler Stange\"}}},{\"category\":\"So\",\"key\":\"21ED\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Pfeil auf Sockel mit vertikaler Stange\"}}},{\"category\":\"So\",\"key\":\"21EE\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer Doppelpfeil\"}}},{\"category\":\"So\",\"key\":\"21EF\",\"mappings\":{\"default\":{\"default\":\"Aufwärts weißer doppelter Pfeil auf Sockel\"}}},{\"category\":\"So\",\"key\":\"21F0\",\"mappings\":{\"default\":{\"default\":\"Rechts weißer Pfeil von der Wand\"}}},{\"category\":\"So\",\"key\":\"21F1\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeil zur Ecke\"}}},{\"category\":\"So\",\"key\":\"21F2\",\"mappings\":{\"default\":{\"default\":\"Südostpfeil zur Ecke\"}}},{\"category\":\"So\",\"key\":\"21F3\",\"mappings\":{\"default\":{\"default\":\"Weißer Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"21F4\",\"mappings\":{\"default\":{\"default\":\"rechter Pfeil mit kleinem Kreis\"}}},{\"category\":\"Sm\",\"key\":\"21F5\",\"mappings\":{\"default\":{\"default\":\"Abwärtspfeil nach links von Aufwärtspfeil\"}}},{\"category\":\"Sm\",\"key\":\"21F6\",\"mappings\":{\"default\":{\"default\":\"Drei nach rechts gerichtete Pfeile\"}}},{\"category\":\"Sm\",\"key\":\"21F7\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21F8\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21F9\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21FA\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21FB\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21FC\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"21FD\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit offenem Kopf\"}}},{\"category\":\"Sm\",\"key\":\"21FE\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit offenem Kopf\"}}},{\"category\":\"Sm\",\"key\":\"21FF\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil mit offenem Kopf\"}}},{\"category\":\"So\",\"key\":\"2301\",\"mappings\":{\"default\":{\"default\":\"Elektrischer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2303\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach oben\"}}},{\"category\":\"So\",\"key\":\"2304\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten\"}}},{\"category\":\"So\",\"key\":\"2324\",\"mappings\":{\"default\":{\"default\":\"Pfeilspitze zwischen zwei horizontalen Balken\"}}},{\"category\":\"So\",\"key\":\"238B\",\"mappings\":{\"default\":{\"default\":\"Gebrochener Kreis mit Nordwestpfeil\"}}},{\"category\":\"So\",\"key\":\"2794\",\"mappings\":{\"default\":{\"default\":\"Schwerer, nach rechts gerichteter Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"2798\",\"mappings\":{\"default\":{\"default\":\"Schwerer Südostpfeil\"}}},{\"category\":\"So\",\"key\":\"2799\",\"mappings\":{\"default\":{\"default\":\"Schwerer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"279A\",\"mappings\":{\"default\":{\"default\":\"Schwerer Nordostpfeil\"}}},{\"category\":\"So\",\"key\":\"279B\",\"mappings\":{\"default\":{\"default\":\"Zeichnungspunkt Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"279C\",\"mappings\":{\"default\":{\"default\":\"Schwerer runder Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"279D\",\"mappings\":{\"default\":{\"default\":\"Dreieckköpfiger Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"279E\",\"mappings\":{\"default\":{\"default\":\"Schwerer Dreieckspfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"279F\",\"mappings\":{\"default\":{\"default\":\"Dreieckköpfiger Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A0\",\"mappings\":{\"default\":{\"default\":\"Schwerer, gestrichelter Dreieckspfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A1\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A2\",\"mappings\":{\"default\":{\"default\":\"Dreidimensionale, nach oben beleuchtete Pfeilspitze\"}}},{\"category\":\"So\",\"key\":\"27A3\",\"mappings\":{\"default\":{\"default\":\"Dreidimensionale, von unten beleuchtete Pfeilspitze nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A4\",\"mappings\":{\"default\":{\"default\":\"Schwarze Pfeilspitze nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A5\",\"mappings\":{\"default\":{\"default\":\"Schwerer schwarzer Pfeil nach unten und rechts gebogen\"}}},{\"category\":\"So\",\"key\":\"27A6\",\"mappings\":{\"default\":{\"default\":\"Schwerer schwarzer Pfeil nach oben und rechts gebogen\"}}},{\"category\":\"So\",\"key\":\"27A7\",\"mappings\":{\"default\":{\"default\":\"Schwarzer nach rechts gerichteter Pfeil\"}}},{\"category\":\"So\",\"key\":\"27A8\",\"mappings\":{\"default\":{\"default\":\"Schwerer konkaver Spitze-Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27A9\",\"mappings\":{\"default\":{\"default\":\"Rechts geschatteter weißer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AA\",\"mappings\":{\"default\":{\"default\":\"Links schattierter weißer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AB\",\"mappings\":{\"default\":{\"default\":\"Zurückgekippter, beschatteter weißer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AC\",\"mappings\":{\"default\":{\"default\":\"Vorne geneigter, beschatteter weißer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AD\",\"mappings\":{\"default\":{\"default\":\"Schwerer unterer rechter Schatten mit weißem Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AE\",\"mappings\":{\"default\":{\"default\":\"Schwerer oberer rechter Schatten mit weißem Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27AF\",\"mappings\":{\"default\":{\"default\":\"Gekerbter Pfeil nach rechts unten rechts\"}}},{\"category\":\"So\",\"key\":\"27B1\",\"mappings\":{\"default\":{\"default\":\"Weißer Pfeil nach rechts oben gekerbt\"}}},{\"category\":\"So\",\"key\":\"27B2\",\"mappings\":{\"default\":{\"default\":\"Eingekreister schwerer weißer Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27B3\",\"mappings\":{\"default\":{\"default\":\"Pfeil mit weißer Feder nach rechts\"}}},{\"category\":\"So\",\"key\":\"27B4\",\"mappings\":{\"default\":{\"default\":\"Schwarz-gefiederter Südostpfeil\"}}},{\"category\":\"So\",\"key\":\"27B5\",\"mappings\":{\"default\":{\"default\":\"Pfeil mit schwarzer Feder nach rechts\"}}},{\"category\":\"So\",\"key\":\"27B6\",\"mappings\":{\"default\":{\"default\":\"Schwarzgefiederter Nordostpfeil\"}}},{\"category\":\"So\",\"key\":\"27B7\",\"mappings\":{\"default\":{\"default\":\"Schwerer schwarzgefiederter Südostpfeil\"}}},{\"category\":\"So\",\"key\":\"27B8\",\"mappings\":{\"default\":{\"default\":\"Schwerer schwarzgefiederter Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27B9\",\"mappings\":{\"default\":{\"default\":\"Schwerer schwarzgefiederter Nordostpfeil\"}}},{\"category\":\"So\",\"key\":\"27BA\",\"mappings\":{\"default\":{\"default\":\"Teardrop-Barbed-Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27BB\",\"mappings\":{\"default\":{\"default\":\"Schwerer Tropfen-Pfeil nach rechts\"}}},{\"category\":\"So\",\"key\":\"27BC\",\"mappings\":{\"default\":{\"default\":\"Keil-Schwanz nach rechts Pfeil\"}}},{\"category\":\"So\",\"key\":\"27BD\",\"mappings\":{\"default\":{\"default\":\"Schwerer, nach rechts gekeilter Pfeil\"}}},{\"category\":\"So\",\"key\":\"27BE\",\"mappings\":{\"default\":{\"default\":\"Offener Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"27F0\",\"mappings\":{\"default\":{\"default\":\"Vierfachpfeil nach oben\"}}},{\"category\":\"Sm\",\"key\":\"27F1\",\"mappings\":{\"default\":{\"default\":\"Vierfacher Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"27F2\",\"mappings\":{\"default\":{\"default\":\"Kreispfeil gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"27F3\",\"mappings\":{\"default\":{\"default\":\"Kreispfeil im Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"27F4\",\"mappings\":{\"default\":{\"default\":\"rechter Pfeil mit Circled Plus\"}}},{\"category\":\"Sm\",\"key\":\"27F5\",\"mappings\":{\"default\":{\"default\":\"Langer Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"27F6\",\"mappings\":{\"default\":{\"default\":\"Langer Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"27F7\",\"mappings\":{\"default\":{\"default\":\"Langer linker rechter Pfeil\"}}},{\"category\":\"Sm\",\"key\":\"27F8\",\"mappings\":{\"default\":{\"default\":\"Langer Doppelpfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"27F9\",\"mappings\":{\"default\":{\"default\":\"Langer Doppelpfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"27FA\",\"mappings\":{\"default\":{\"default\":\"Langer linker rechter Doppelpfeil\"}}},{\"category\":\"Sm\",\"key\":\"27FB\",\"mappings\":{\"default\":{\"default\":\"Langer Pfeil nach links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"27FC\",\"mappings\":{\"default\":{\"default\":\"Langer Rechtspfeil von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"27FD\",\"mappings\":{\"default\":{\"default\":\"Langer Doppelpfeil nach links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"27FE\",\"mappings\":{\"default\":{\"default\":\"Langer Doppelpfeil nach rechts von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"27FF\",\"mappings\":{\"default\":{\"default\":\"Langer nach rechts gerichteter Squiggle-Pfeil\"}}},{\"category\":\"Sm\",\"key\":\"2900\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit senkrechtem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2901\",\"mappings\":{\"default\":{\"default\":\"Zwei Pfeil nach rechts mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2902\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2903\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach rechts mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2904\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Doppelpfeil mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2905\",\"mappings\":{\"default\":{\"default\":\"Zwei Pfeil nach rechts von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2906\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2907\",\"mappings\":{\"default\":{\"default\":\"Doppelter Pfeil nach rechts von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2908\",\"mappings\":{\"default\":{\"default\":\"Abwärtspfeil mit horizontalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2909\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil mit horizontalem Anschlag\"}}},{\"category\":\"Sm\",\"key\":\"290A\",\"mappings\":{\"default\":{\"default\":\"Dreifachpfeil nach oben\"}}},{\"category\":\"Sm\",\"key\":\"290B\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"290C\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"290D\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"290E\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Strichpfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"290F\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Bindestrich nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2910\",\"mappings\":{\"default\":{\"default\":\"Dreipoliger Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2911\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit gepunktetem Stamm\"}}},{\"category\":\"Sm\",\"key\":\"2912\",\"mappings\":{\"default\":{\"default\":\"Aufwärtspfeil zur Bar\"}}},{\"category\":\"Sm\",\"key\":\"2913\",\"mappings\":{\"default\":{\"default\":\"Abwärtspfeil zur Bar\"}}},{\"category\":\"Sm\",\"key\":\"2914\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Schwanz mit senkrechtem Anschlag\"}}},{\"category\":\"Sm\",\"key\":\"2915\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Schwanz mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2916\",\"mappings\":{\"default\":{\"default\":\"Nach rechts gerichteter zweiköpfiger Pfeil mit Schwanz\"}}},{\"category\":\"Sm\",\"key\":\"2917\",\"mappings\":{\"default\":{\"default\":\"Nach rechts gerichteter Doppelpfeil mit Schwanz mit senkrechtem Anschlag\"}}},{\"category\":\"Sm\",\"key\":\"2918\",\"mappings\":{\"default\":{\"default\":\"Nach rechts gerichteter Doppelpfeil mit Schwanz mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2919\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links nach links\"}}},{\"category\":\"Sm\",\"key\":\"291A\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"291B\",\"mappings\":{\"default\":{\"default\":\"Doppelter Pfeilschwanz nach links\"}}},{\"category\":\"Sm\",\"key\":\"291C\",\"mappings\":{\"default\":{\"default\":\"Doppelter Pfeilschwanz nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"291D\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links zu Black Diamond\"}}},{\"category\":\"Sm\",\"key\":\"291E\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts zu Black Diamond\"}}},{\"category\":\"Sm\",\"key\":\"291F\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links von Bar zu Black Diamond\"}}},{\"category\":\"Sm\",\"key\":\"2920\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts von Bar zu Black Diamond\"}}},{\"category\":\"Sm\",\"key\":\"2921\",\"mappings\":{\"default\":{\"default\":\"Nordwest- und Südostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2922\",\"mappings\":{\"default\":{\"default\":\"Nordost- und Südwestpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2923\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeil mit Haken\"}}},{\"category\":\"Sm\",\"key\":\"2924\",\"mappings\":{\"default\":{\"default\":\"Nordostpfeil mit Haken\"}}},{\"category\":\"Sm\",\"key\":\"2925\",\"mappings\":{\"default\":{\"default\":\"Südostpfeil mit Haken\"}}},{\"category\":\"Sm\",\"key\":\"2926\",\"mappings\":{\"default\":{\"default\":\"Südwestpfeil mit Haken\"}}},{\"category\":\"Sm\",\"key\":\"2927\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeil und Nordostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2928\",\"mappings\":{\"default\":{\"default\":\"Nordostpfeil und Südostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2929\",\"mappings\":{\"default\":{\"default\":\"Südostpfeil und Südwestpfeil\"}}},{\"category\":\"Sm\",\"key\":\"292A\",\"mappings\":{\"default\":{\"default\":\"Südwestpfeil und Nordwestpfeil\"}}},{\"category\":\"Sm\",\"key\":\"292D\",\"mappings\":{\"default\":{\"default\":\"Südostpfeil Kreuzung Nordostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"292E\",\"mappings\":{\"default\":{\"default\":\"Nordostpfeil Kreuzung Südostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"292F\",\"mappings\":{\"default\":{\"default\":\"Fallende Diagonale, die Nordostpfeil kreuzt\"}}},{\"category\":\"Sm\",\"key\":\"2930\",\"mappings\":{\"default\":{\"default\":\"Steigende Diagonale, die Südostpfeil kreuzt\"}}},{\"category\":\"Sm\",\"key\":\"2931\",\"mappings\":{\"default\":{\"default\":\"Nordostpfeilüberquerung Nordwestpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2932\",\"mappings\":{\"default\":{\"default\":\"Nordwestpfeilüberquerung Nordostpfeil\"}}},{\"category\":\"Sm\",\"key\":\"2933\",\"mappings\":{\"default\":{\"default\":\"Wellenpfeil, der direkt nach rechts zeigt\"}}},{\"category\":\"Sm\",\"key\":\"2934\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts, dann nach oben gekrümmt\"}}},{\"category\":\"Sm\",\"key\":\"2935\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts, dann nach unten gekrümmt\"}}},{\"category\":\"Sm\",\"key\":\"2936\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten, dann nach links gekrümmt\"}}},{\"category\":\"Sm\",\"key\":\"2937\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach unten, dann nach rechts gekrümmt\"}}},{\"category\":\"Sm\",\"key\":\"2938\",\"mappings\":{\"default\":{\"default\":\"Rechtsseitiger Bogen im Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"2939\",\"mappings\":{\"default\":{\"default\":\"Bogen der linken Seite gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"293A\",\"mappings\":{\"default\":{\"default\":\"Pfeil oben gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"293B\",\"mappings\":{\"default\":{\"default\":\"Pfeil unten gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"293C\",\"mappings\":{\"default\":{\"default\":\"Pfeil oben im Uhrzeigersinn mit Minus\"}}},{\"category\":\"Sm\",\"key\":\"293D\",\"mappings\":{\"default\":{\"default\":\"Pfeil oben gegen den Uhrzeigersinn mit Plus\"}}},{\"category\":\"Sm\",\"key\":\"293E\",\"mappings\":{\"default\":{\"default\":\"Rechts unten halbkreisförmig im Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"293F\",\"mappings\":{\"default\":{\"default\":\"Linker halbkreisförmiger Pfeil gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"2940\",\"mappings\":{\"default\":{\"default\":\"Geschlossener Kreispfeil gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"2941\",\"mappings\":{\"default\":{\"default\":\"Geschlossener Kreispfeil im Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"2942\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts über Kurzer Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2943\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links über Kurzer Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2944\",\"mappings\":{\"default\":{\"default\":\"Kurzer Pfeil nach rechts Über Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2945\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Plus unten\"}}},{\"category\":\"Sm\",\"key\":\"2946\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Plus unten\"}}},{\"category\":\"Sm\",\"key\":\"2947\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts durch X\"}}},{\"category\":\"Sm\",\"key\":\"2948\",\"mappings\":{\"default\":{\"default\":\"Linker rechter Pfeil durch kleinen Kreis\"}}},{\"category\":\"Sm\",\"key\":\"2949\",\"mappings\":{\"default\":{\"default\":\"Aufwärts zweiköpfiger Pfeil vom kleinen Kreis\"}}},{\"key\":\"2970\",\"mappings\":{\"default\":{\"default\":\"round implies\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2971\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen über dem Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2972\",\"mappings\":{\"default\":{\"default\":\"Tilde-Operator über dem Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2973\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links über Tilde-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2974\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts über Tilde-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2975\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts fast gleich\"}}},{\"category\":\"Sm\",\"key\":\"2976\",\"mappings\":{\"default\":{\"default\":\"Weniger als oben Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2977\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links durch weniger als\"}}},{\"category\":\"Sm\",\"key\":\"2978\",\"mappings\":{\"default\":{\"default\":\"Größer als über dem Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2979\",\"mappings\":{\"default\":{\"default\":\"Untersatz über dem Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"297A\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links durch Teilmenge\"}}},{\"category\":\"Sm\",\"key\":\"297B\",\"mappings\":{\"default\":{\"default\":\"Superset über dem Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"29B3\",\"mappings\":{\"default\":{\"default\":\"Leeres Set mit Pfeil rechts oben\"}}},{\"category\":\"Sm\",\"key\":\"29B4\",\"mappings\":{\"default\":{\"default\":\"Leeres Set mit linkem Pfeil oben\"}}},{\"category\":\"Sm\",\"key\":\"29BD\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach oben durch Kreis\"}}},{\"category\":\"Sm\",\"key\":\"29EA\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Diamant mit Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"29EC\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"29ED\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Kreis mit Pfeil nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2A17\",\"mappings\":{\"default\":{\"default\":\"Integral mit Pfeil nach links mit Haken\"}}},{\"category\":\"So\",\"key\":\"2B00\",\"mappings\":{\"default\":{\"default\":\"North East White Arrow\"}}},{\"category\":\"So\",\"key\":\"2B01\",\"mappings\":{\"default\":{\"default\":\"Nordwestlicher weißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B02\",\"mappings\":{\"default\":{\"default\":\"Südostweißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B03\",\"mappings\":{\"default\":{\"default\":\"Südwestweißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B04\",\"mappings\":{\"default\":{\"default\":\"Linker rechter weißer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B05\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Pfeil nach links\"}}},{\"category\":\"So\",\"key\":\"2B06\",\"mappings\":{\"default\":{\"default\":\"Aufwärts schwarzer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B07\",\"mappings\":{\"default\":{\"default\":\"Abwärts schwarzer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B08\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Nordostpfeil\"}}},{\"category\":\"So\",\"key\":\"2B09\",\"mappings\":{\"default\":{\"default\":\"Nordwestlicher schwarzer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B0A\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Südostpfeil\"}}},{\"category\":\"So\",\"key\":\"2B0B\",\"mappings\":{\"default\":{\"default\":\"Südwestlicher schwarzer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B0C\",\"mappings\":{\"default\":{\"default\":\"Linker rechter schwarzer Pfeil\"}}},{\"category\":\"So\",\"key\":\"2B0D\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Pfeil nach unten\"}}},{\"category\":\"So\",\"key\":\"2B0E\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Spitze nach unten\"}}},{\"category\":\"So\",\"key\":\"2B0F\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts mit Spitze nach oben\"}}},{\"category\":\"So\",\"key\":\"2B10\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Spitze nach unten\"}}},{\"category\":\"So\",\"key\":\"2B11\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Spitze nach oben\"}}},{\"category\":\"Sm\",\"key\":\"2B30\",\"mappings\":{\"default\":{\"default\":\"Linker Pfeil mit kleinem Kreis\"}}},{\"category\":\"Sm\",\"key\":\"2B31\",\"mappings\":{\"default\":{\"default\":\"Drei nach links gerichtete Pfeile\"}}},{\"category\":\"Sm\",\"key\":\"2B32\",\"mappings\":{\"default\":{\"default\":\"Linker Pfeil mit Circled Plus\"}}},{\"category\":\"Sm\",\"key\":\"2B33\",\"mappings\":{\"default\":{\"default\":\"Langer nach links gerichteter Squiggle-Pfeil\"}}},{\"category\":\"Sm\",\"key\":\"2B34\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit senkrechtem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B35\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B36\",\"mappings\":{\"default\":{\"default\":\"Doppelpfeil nach links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2B37\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit zwei Köpfen\"}}},{\"category\":\"Sm\",\"key\":\"2B38\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit gepunktetem Stamm\"}}},{\"category\":\"Sm\",\"key\":\"2B39\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Schwanz mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B3A\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links mit Schwanz mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B3B\",\"mappings\":{\"default\":{\"default\":\"Nach links gerichteter zweiköpfiger Pfeil mit Schwanz\"}}},{\"category\":\"Sm\",\"key\":\"2B3C\",\"mappings\":{\"default\":{\"default\":\"Nach links gerichteter zweiköpfiger Pfeil mit Schwanz mit vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B3D\",\"mappings\":{\"default\":{\"default\":\"Nach links gerichteter zweiköpfiger Pfeil mit Schwanz mit doppeltem vertikalem Strich\"}}},{\"category\":\"Sm\",\"key\":\"2B3E\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links durch X\"}}},{\"category\":\"Sm\",\"key\":\"2B3F\",\"mappings\":{\"default\":{\"default\":\"Wellenpfeil, der direkt nach links zeigt\"}}},{\"category\":\"Sm\",\"key\":\"2B40\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen über dem Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2B41\",\"mappings\":{\"default\":{\"default\":\"Reverse-Tilde-Operator Über Linkspfeil\"}}},{\"category\":\"Sm\",\"key\":\"2B42\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links über der Rückseite fast gleich\"}}},{\"category\":\"Sm\",\"key\":\"2B43\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts durch mehr als\"}}},{\"category\":\"Sm\",\"key\":\"2B44\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts durch Superset\"}}},{\"category\":\"So\",\"key\":\"2B45\",\"mappings\":{\"default\":{\"default\":\"Vierfachpfeil nach links\"}}},{\"category\":\"So\",\"key\":\"2B46\",\"mappings\":{\"default\":{\"default\":\"Vierfachpfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2B47\",\"mappings\":{\"default\":{\"default\":\"Reverse-Tilde-Operator über dem Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2B48\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts oben fast gleich\"}}},{\"category\":\"Sm\",\"key\":\"2B49\",\"mappings\":{\"default\":{\"default\":\"Tilde-Operator über dem Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"2B4A\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links oben fast gleich\"}}},{\"category\":\"Sm\",\"key\":\"2B4B\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach links über Reverse-Tilde-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2B4C\",\"mappings\":{\"default\":{\"default\":\"Pfeil nach rechts über Reverse-Tilde-Operator\"}}},{\"category\":\"Sm\",\"key\":\"FFE9\",\"mappings\":{\"default\":{\"default\":\"Halbbreiter Pfeil nach links\"}}},{\"category\":\"Sm\",\"key\":\"FFEA\",\"mappings\":{\"default\":{\"default\":\"Halbbreiter Pfeil nach oben\"}}},{\"category\":\"Sm\",\"key\":\"FFEB\",\"mappings\":{\"default\":{\"default\":\"Halbbreiter Pfeil nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"FFEC\",\"mappings\":{\"default\":{\"default\":\"Halbbreiter Pfeil nach unten\"}}}]\n,\n\"de/symbols/math_characters.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"2113\",\"mappings\":{\"default\":{\"default\":\"Skript klein L\"}}},{\"category\":\"Sm\",\"key\":\"2118\",\"mappings\":{\"default\":{\"default\":\"Skript groß P\"}}},{\"category\":\"Ll\",\"key\":\"213C\",\"mappings\":{\"default\":{\"default\":\"pi mit Doppelstrich\"}}},{\"category\":\"Ll\",\"key\":\"213D\",\"mappings\":{\"default\":{\"default\":\"gamma mit Doppelstrich\"}}},{\"category\":\"Lu\",\"key\":\"213E\",\"mappings\":{\"default\":{\"default\":\"groß Gamma mit Doppelstrich\"}}},{\"category\":\"Lu\",\"key\":\"213F\",\"mappings\":{\"default\":{\"default\":\"groß Pi mit Doppelstrich\"}}},{\"category\":\"Sm\",\"key\":\"2140\",\"mappings\":{\"default\":{\"default\":\"Summenzeichen mit Doppelstrich\"}}},{\"category\":\"Lu\",\"key\":\"2145\",\"mappings\":{\"default\":{\"default\":\"groß D kursiv mit Doppelstrich\"}}},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"d kursiv mit Doppelstrich\"}},\"key\":\"2146\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"e kursiv mit Doppelstrich\"}},\"key\":\"2147\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"i kursiv mit Doppelstrich\"}},\"key\":\"2148\"},{\"category\":\"Ll\",\"key\":\"2149\",\"mappings\":{\"default\":{\"default\":\"j kursiv mit Doppelstrich\"}}},{\"category\":\"Ll\",\"key\":\"1D6A4\",\"mappings\":{\"default\":{\"default\":\"punktloses i kursiv\"}}},{\"category\":\"Ll\",\"key\":\"1D6A5\",\"mappings\":{\"default\":{\"default\":\"punktloses j kursiv\"}}}]\n,\n\"de/symbols/math_delimiters.js\": \n[{\"locale\":\"de\"},{\"key\":\"0028\",\"mappings\":{\"default\":{\"default\":\"Klammer auf\"}},\"category\":\"Ps\"},{\"key\":\"0029\",\"mappings\":{\"default\":{\"default\":\"Klammer zu\"}},\"category\":\"Pe\"},{\"key\":\"005B\",\"mappings\":{\"default\":{\"default\":\"eckige Klammer auf\"}},\"category\":\"Ps\"},{\"key\":\"005D\",\"mappings\":{\"default\":{\"default\":\"eckige Klammer zu\"}},\"category\":\"Pe\"},{\"key\":\"007B\",\"mappings\":{\"default\":{\"default\":\"geschwungene Klammer auf\"}},\"category\":\"Ps\"},{\"key\":\"007D\",\"mappings\":{\"default\":{\"default\":\"geschwungene Klammer zu\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2045\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammer mit Stachel\"}}},{\"category\":\"Pe\",\"key\":\"2046\",\"mappings\":{\"default\":{\"default\":\"Rechte eckige Klammer mit Stachel\"}}},{\"category\":\"Sm\",\"key\":\"2308\",\"mappings\":{\"default\":{\"default\":\"linke Aufrundungsklammer\"}}},{\"category\":\"Sm\",\"key\":\"2309\",\"mappings\":{\"default\":{\"default\":\"rechte Aufrundungsklammer\"}}},{\"category\":\"Sm\",\"key\":\"230A\",\"mappings\":{\"default\":{\"default\":\"linke Abrundungsklammer\"}}},{\"category\":\"Sm\",\"key\":\"230B\",\"mappings\":{\"default\":{\"default\":\"rechter Abrundungsklammer\"}}},{\"category\":\"So\",\"key\":\"230C\",\"mappings\":{\"default\":{\"default\":\"unterer rechter Abschnitt\"}}},{\"category\":\"So\",\"key\":\"230D\",\"mappings\":{\"default\":{\"default\":\"Unterer linker Abschnitt\"}}},{\"category\":\"So\",\"key\":\"230E\",\"mappings\":{\"default\":{\"default\":\"Oberer rechter Abschnitt\"}}},{\"category\":\"So\",\"key\":\"230F\",\"mappings\":{\"default\":{\"default\":\"Oberer linker Abschnitt\"}}},{\"category\":\"So\",\"key\":\"231C\",\"mappings\":{\"default\":{\"default\":\"Obere linke Ecke\"}}},{\"category\":\"So\",\"key\":\"231D\",\"mappings\":{\"default\":{\"default\":\"Obere rechte Ecke\"}}},{\"category\":\"So\",\"key\":\"231E\",\"mappings\":{\"default\":{\"default\":\"Untere linke Ecke\"}}},{\"category\":\"So\",\"key\":\"231F\",\"mappings\":{\"default\":{\"default\":\"Rechte untere Ecke\"}}},{\"category\":\"Sm\",\"key\":\"2320\",\"mappings\":{\"default\":{\"default\":\"Obere Hälfte eines Integrals\"}}},{\"category\":\"Sm\",\"key\":\"2321\",\"mappings\":{\"default\":{\"default\":\"Untere Hälfte eines Integrals\"}}},{\"category\":\"Ps\",\"key\":\"2329\",\"mappings\":{\"default\":{\"default\":\"Linke spitze Klammer\"}}},{\"category\":\"Pe\",\"key\":\"232A\",\"mappings\":{\"default\":{\"default\":\"Rechte spitze Klammer\"}}},{\"category\":\"Sm\",\"key\":\"239B\",\"mappings\":{\"default\":{\"default\":\"Oberer Teil der linken Klammer\"}}},{\"category\":\"Sm\",\"key\":\"239C\",\"mappings\":{\"default\":{\"default\":\"Linke Klammerverlängerung\"}}},{\"category\":\"Sm\",\"key\":\"239D\",\"mappings\":{\"default\":{\"default\":\"Unterer Teil der linken Klammer\"}}},{\"category\":\"Sm\",\"key\":\"239E\",\"mappings\":{\"default\":{\"default\":\"Oberer Teil der rechten Klammer\"}}},{\"category\":\"Sm\",\"key\":\"239F\",\"mappings\":{\"default\":{\"default\":\"Rechte Klammerverlängerung\"}}},{\"category\":\"Sm\",\"key\":\"23A0\",\"mappings\":{\"default\":{\"default\":\"Unterer Teil der rechten Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A1\",\"mappings\":{\"default\":{\"default\":\"Oberer Teil der linken eckigen Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A2\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammerverlängerung\"}}},{\"category\":\"Sm\",\"key\":\"23A3\",\"mappings\":{\"default\":{\"default\":\"unterer Teil der linken eckigen Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A4\",\"mappings\":{\"default\":{\"default\":\"Oberer Teil der rechten eckigen Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A5\",\"mappings\":{\"default\":{\"default\":\"Rechte eckige Klammerverlängerung\"}}},{\"category\":\"Sm\",\"key\":\"23A6\",\"mappings\":{\"default\":{\"default\":\"unterer Teil der rechten eckigen Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A7\",\"mappings\":{\"default\":{\"default\":\"oberer Teil der linken geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A8\",\"mappings\":{\"default\":{\"default\":\"Mittelstück der linken geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23A9\",\"mappings\":{\"default\":{\"default\":\"unterer Teil der linken geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23AA\",\"mappings\":{\"default\":{\"default\":\"Zwischenteil einer geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23AB\",\"mappings\":{\"default\":{\"default\":\"oberer Teil der rechten geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23AC\",\"mappings\":{\"default\":{\"default\":\"Mittelstück der rechten geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23AD\",\"mappings\":{\"default\":{\"default\":\"unterer Teil der rechten geschweiften Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23AE\",\"mappings\":{\"default\":{\"default\":\"Mittelteil eines Integrals\"}}},{\"category\":\"Sm\",\"key\":\"23AF\",\"mappings\":{\"default\":{\"default\":\"Erweiterung einer Querlinie\"}}},{\"category\":\"Sm\",\"key\":\"23B0\",\"mappings\":{\"default\":{\"default\":\"Geschweiftes Klammerteil oben links oder rechts unten\"}}},{\"category\":\"Sm\",\"key\":\"23B1\",\"mappings\":{\"default\":{\"default\":\"Geschweiftes Klammerteil oben rechts oder unten links\"}}},{\"category\":\"Sm\",\"key\":\"23B2\",\"mappings\":{\"default\":{\"default\":\"Oberer Teil einer Summe\"}}},{\"category\":\"Sm\",\"key\":\"23B3\",\"mappings\":{\"default\":{\"default\":\"Unterer Teil einer Summe\"}}},{\"key\":\"23B4\",\"mappings\":{\"default\":{\"default\":\"Obere eckige Klammer\"}},\"category\":\"So\"},{\"key\":\"23B5\",\"mappings\":{\"default\":{\"default\":\"Untere eckige Klammer\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"23B6\",\"mappings\":{\"default\":{\"default\":\"Untere eckige Klammer auf oberer eckiger Klammer\"}}},{\"category\":\"So\",\"key\":\"23B7\",\"mappings\":{\"default\":{\"default\":\"Unterer Teil des Radikalsymbols\"}}},{\"category\":\"So\",\"key\":\"23B8\",\"mappings\":{\"default\":{\"default\":\"Linke vertikale Boxlinie\"}}},{\"category\":\"So\",\"key\":\"23B9\",\"mappings\":{\"default\":{\"default\":\"Rechte vertikale Boxlinie\"}}},{\"category\":\"Sm\",\"key\":\"23DC\",\"mappings\":{\"default\":{\"default\":\"Obere Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23DD\",\"mappings\":{\"default\":{\"default\":\"Untere Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23DE\",\"mappings\":{\"default\":{\"default\":\"Obere geschweifte Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23DF\",\"mappings\":{\"default\":{\"default\":\"Untere geschweifte Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23E0\",\"mappings\":{\"default\":{\"default\":\"Obere eckige Klammer\"}}},{\"category\":\"Sm\",\"key\":\"23E1\",\"mappings\":{\"default\":{\"default\":\"Untere eckige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"2768\",\"mappings\":{\"default\":{\"default\":\"Mittlere linke Klammerverzierung\"}}},{\"category\":\"Pe\",\"key\":\"2769\",\"mappings\":{\"default\":{\"default\":\"Mittlere rechte Klammerverzierung\"}}},{\"category\":\"Ps\",\"key\":\"276A\",\"mappings\":{\"default\":{\"default\":\"Mittlere abgeflachte linke Klammerverzierung\"}}},{\"category\":\"Pe\",\"key\":\"276B\",\"mappings\":{\"default\":{\"default\":\"Mittlere abgeflachte rechte Klammerverzierung\"}}},{\"category\":\"Ps\",\"key\":\"276C\",\"mappings\":{\"default\":{\"default\":\"Mittlere nach links weisende Winkelhalterung\"}}},{\"category\":\"Pe\",\"key\":\"276D\",\"mappings\":{\"default\":{\"default\":\"Mittlere, rechtwinklige Winkelhalterung\"}}},{\"category\":\"Ps\",\"key\":\"276E\",\"mappings\":{\"default\":{\"default\":\"Schwere nach links weisende Anführungszeichen-Verzierung\"}}},{\"category\":\"Pe\",\"key\":\"276F\",\"mappings\":{\"default\":{\"default\":\"Schwere nach rechts zeigenden Winkel-Anführungszeichen-Verzierung\"}}},{\"category\":\"Ps\",\"key\":\"2770\",\"mappings\":{\"default\":{\"default\":\"Schwere nach links weisende Winkelhalterung\"}}},{\"category\":\"Pe\",\"key\":\"2771\",\"mappings\":{\"default\":{\"default\":\"Schwere, nach rechts weisende Winkelhalterung\"}}},{\"category\":\"Ps\",\"key\":\"2772\",\"mappings\":{\"default\":{\"default\":\"Leichte linke Schildpatt Bracket Ornament\"}}},{\"category\":\"Pe\",\"key\":\"2773\",\"mappings\":{\"default\":{\"default\":\"Leichte rechte Schildpatt-Klammerverzierung\"}}},{\"category\":\"Ps\",\"key\":\"2774\",\"mappings\":{\"default\":{\"default\":\"Mittlere linke geschweifte Klammerverzierung\"}}},{\"category\":\"Pe\",\"key\":\"2775\",\"mappings\":{\"default\":{\"default\":\"Mittlere rechte geschweifte Klammerverzierung\"}}},{\"category\":\"Ps\",\"key\":\"27C5\",\"mappings\":{\"default\":{\"default\":\"Linker S-förmiger Taschenbegrenzer\"}}},{\"category\":\"Pe\",\"key\":\"27C6\",\"mappings\":{\"default\":{\"default\":\"rechter S-förmiger Taschenbegrenzer\"}}},{\"category\":\"Ps\",\"key\":\"27E6\",\"mappings\":{\"default\":{\"default\":\"Mathematische linke weiße eckige Klammer\"}}},{\"category\":\"Pe\",\"key\":\"27E7\",\"mappings\":{\"default\":{\"default\":\"Mathematische rechte weiße eckige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"27E8\",\"mappings\":{\"default\":{\"default\":\"Mathematische linke Winkelklammer\"}}},{\"category\":\"Pe\",\"key\":\"27E9\",\"mappings\":{\"default\":{\"default\":\"Mathematische rechtwinklige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"27EA\",\"mappings\":{\"default\":{\"default\":\"Mathematische linke doppelte Winkelklammer\"}}},{\"category\":\"Pe\",\"key\":\"27EB\",\"mappings\":{\"default\":{\"default\":\"Mathematische rechtwinklige eckige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"27EC\",\"mappings\":{\"default\":{\"default\":\"Mathematische linke Schildkrötenpanzerhalterung\"}}},{\"category\":\"Pe\",\"key\":\"27ED\",\"mappings\":{\"default\":{\"default\":\"Mathematische rechte weiße Schildpatt-Klammer\"}}},{\"category\":\"Ps\",\"key\":\"27EE\",\"mappings\":{\"default\":{\"default\":\"Mathematische linke abgeflachte Klammer\"}}},{\"category\":\"Pe\",\"key\":\"27EF\",\"mappings\":{\"default\":{\"default\":\"Mathematische rechte abgeflachte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"2983\",\"mappings\":{\"default\":{\"default\":\"Linke weiße geschweifte Klammer\"}}},{\"category\":\"Pe\",\"key\":\"2984\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße geschweifte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"2985\",\"mappings\":{\"default\":{\"default\":\"Linke weiße Klammer\"}}},{\"category\":\"Pe\",\"key\":\"2986\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße Klammer\"}}},{\"category\":\"Ps\",\"key\":\"2987\",\"mappings\":{\"default\":{\"default\":\"Z-Notation Linke Bildklammer\"}}},{\"category\":\"Pe\",\"key\":\"2988\",\"mappings\":{\"default\":{\"default\":\"Z-Notation rechte Bildklammer\"}}},{\"category\":\"Ps\",\"key\":\"2989\",\"mappings\":{\"default\":{\"default\":\"Z-Notation Linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"298A\",\"mappings\":{\"default\":{\"default\":\"Z Notation Right Binding Bracket\"}}},{\"category\":\"Ps\",\"key\":\"298B\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammer mit Unterlenker\"}}},{\"category\":\"Pe\",\"key\":\"298C\",\"mappings\":{\"default\":{\"default\":\"Rechte eckige Klammer mit Unterlenker\"}}},{\"category\":\"Ps\",\"key\":\"298D\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammer mit Häkchen in der oberen Ecke\"}}},{\"category\":\"Pe\",\"key\":\"298E\",\"mappings\":{\"default\":{\"default\":\"Rechte eckige Klammer mit Tick in der unteren Ecke\"}}},{\"category\":\"Ps\",\"key\":\"298F\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammer mit Tick in der unteren Ecke\"}}},{\"category\":\"Pe\",\"key\":\"2990\",\"mappings\":{\"default\":{\"default\":\"Rechte eckige Klammer mit Tick in der oberen Ecke\"}}},{\"category\":\"Ps\",\"key\":\"2991\",\"mappings\":{\"default\":{\"default\":\"Linke Winkelklammer mit Punkt\"}}},{\"category\":\"Pe\",\"key\":\"2992\",\"mappings\":{\"default\":{\"default\":\"Rechtwinklige Klammer mit Punkt\"}}},{\"category\":\"Ps\",\"key\":\"2993\",\"mappings\":{\"default\":{\"default\":\"Linker Bogen weniger als Halterung\"}}},{\"category\":\"Pe\",\"key\":\"2994\",\"mappings\":{\"default\":{\"default\":\"rechter Bogen größer als Halterung\"}}},{\"category\":\"Ps\",\"key\":\"2995\",\"mappings\":{\"default\":{\"default\":\"Doppelter linker Bogen größer als Halterung\"}}},{\"category\":\"Pe\",\"key\":\"2996\",\"mappings\":{\"default\":{\"default\":\"Doppelter rechter Bogen weniger als Halterung\"}}},{\"category\":\"Ps\",\"key\":\"2997\",\"mappings\":{\"default\":{\"default\":\"Linke schwarze Schildkrötenhalterung\"}}},{\"category\":\"Pe\",\"key\":\"2998\",\"mappings\":{\"default\":{\"default\":\"Rechte schwarze Schildpatt-Klammer\"}}},{\"category\":\"Ps\",\"key\":\"29D8\",\"mappings\":{\"default\":{\"default\":\"Linker wackeliger Zaun\"}}},{\"category\":\"Pe\",\"key\":\"29D9\",\"mappings\":{\"default\":{\"default\":\"rechter wackeliger Zaun\"}}},{\"category\":\"Ps\",\"key\":\"29DA\",\"mappings\":{\"default\":{\"default\":\"Linker doppelter wackeliger Zaun\"}}},{\"category\":\"Pe\",\"key\":\"29DB\",\"mappings\":{\"default\":{\"default\":\"rechter doppelter wackeliger Zaun\"}}},{\"category\":\"Ps\",\"key\":\"29FC\",\"mappings\":{\"default\":{\"default\":\"Nach links zeigender gebogener Winkelhalter\"}}},{\"category\":\"Pe\",\"key\":\"29FD\",\"mappings\":{\"default\":{\"default\":\"Nach rechts zeigender gebogener Winkelhalter\"}}},{\"category\":\"Ps\",\"key\":\"2E22\",\"mappings\":{\"default\":{\"default\":\"Obere linke halbe Halterung\"}}},{\"category\":\"Pe\",\"key\":\"2E23\",\"mappings\":{\"default\":{\"default\":\"Obere rechte halbe Klammer\"}}},{\"category\":\"Ps\",\"key\":\"2E24\",\"mappings\":{\"default\":{\"default\":\"Linke halbe halterung unten\"}}},{\"category\":\"Pe\",\"key\":\"2E25\",\"mappings\":{\"default\":{\"default\":\"Untere rechte halbe Halterung\"}}},{\"category\":\"Ps\",\"key\":\"2E26\",\"mappings\":{\"default\":{\"default\":\"U-Halterung links seitlich\"}}},{\"category\":\"Pe\",\"key\":\"2E27\",\"mappings\":{\"default\":{\"default\":\"U-Halterung rechts seitlich\"}}},{\"category\":\"Ps\",\"key\":\"2E28\",\"mappings\":{\"default\":{\"default\":\"Linke doppelte Klammer\"}}},{\"category\":\"Pe\",\"key\":\"2E29\",\"mappings\":{\"default\":{\"default\":\"Rechte doppelte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"3008\",\"mappings\":{\"default\":{\"default\":\"Linke Winkelklammer\"}}},{\"category\":\"Pe\",\"key\":\"3009\",\"mappings\":{\"default\":{\"default\":\"Rechtwinklige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"300A\",\"mappings\":{\"default\":{\"default\":\"Linke Doppelwinkelhalterung\"}}},{\"category\":\"Pe\",\"key\":\"300B\",\"mappings\":{\"default\":{\"default\":\"Rechte Doppelwinkelhalterung\"}}},{\"category\":\"Ps\",\"key\":\"300C\",\"mappings\":{\"default\":{\"default\":\"Linke Eckklammer\"}}},{\"category\":\"Pe\",\"key\":\"300D\",\"mappings\":{\"default\":{\"default\":\"Rechte Eckhalterung\"}}},{\"category\":\"Ps\",\"key\":\"300E\",\"mappings\":{\"default\":{\"default\":\"Linke weiße Eckhalterung\"}}},{\"category\":\"Pe\",\"key\":\"300F\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße Eckhalterung\"}}},{\"category\":\"Ps\",\"key\":\"3010\",\"mappings\":{\"default\":{\"default\":\"Linke schwarze linsenförmige Halterung\"}}},{\"category\":\"Pe\",\"key\":\"3011\",\"mappings\":{\"default\":{\"default\":\"Rechte schwarze linsenförmige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"3014\",\"mappings\":{\"default\":{\"default\":\"Linke Schildpatt-Klammer\"}}},{\"category\":\"Pe\",\"key\":\"3015\",\"mappings\":{\"default\":{\"default\":\"Rechte Schildpattlasche\"}}},{\"category\":\"Ps\",\"key\":\"3016\",\"mappings\":{\"default\":{\"default\":\"Linke weiße linsenförmige Halterung\"}}},{\"category\":\"Pe\",\"key\":\"3017\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße linsenförmige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"3018\",\"mappings\":{\"default\":{\"default\":\"Linke weiße Schildpatt-Klammer\"}}},{\"category\":\"Pe\",\"key\":\"3019\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße Schildpatt-Klammer\"}}},{\"category\":\"Ps\",\"key\":\"301A\",\"mappings\":{\"default\":{\"default\":\"Linke weiße eckige Klammer\"}}},{\"category\":\"Pe\",\"key\":\"301B\",\"mappings\":{\"default\":{\"default\":\"Rechte weiße eckige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"301D\",\"mappings\":{\"default\":{\"default\":\"Doppelte Anführungszeichen in umgekehrter Reihenfolge\"}}},{\"category\":\"Pe\",\"key\":\"301E\",\"mappings\":{\"default\":{\"default\":\"Doppelte Anführungszeichen\"}}},{\"category\":\"Pe\",\"key\":\"301F\",\"mappings\":{\"default\":{\"default\":\"Niedriges doppeltes Prime-Anführungszeichen\"}}},{\"category\":\"Ps\",\"key\":\"FD3E\",\"mappings\":{\"default\":{\"default\":\"Verzierte linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FD3F\",\"mappings\":{\"default\":{\"default\":\"Verzierte rechte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE17\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke weiße linsenförmige Halterung\"}}},{\"category\":\"Pe\",\"key\":\"FE18\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechtwinklige linsenförmige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"FE35\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE36\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE37\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke geschweifte Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE38\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale, recht geschweifte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE39\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke Schildpattklammer\"}}},{\"category\":\"Pe\",\"key\":\"FE3A\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechte Schildpatt-Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE3B\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke schwarze linsenförmige Halterung\"}}},{\"category\":\"Pe\",\"key\":\"FE3C\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechtwinklige schwarze linsenförmige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"FE3D\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke Doppelwinkelhalterung\"}}},{\"category\":\"Pe\",\"key\":\"FE3E\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechtwinklige, rechtwinklige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"FE3F\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke Winkelhalterung\"}}},{\"category\":\"Pe\",\"key\":\"FE40\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechtwinklige Halterung\"}}},{\"category\":\"Ps\",\"key\":\"FE41\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke Eckhalterung\"}}},{\"category\":\"Pe\",\"key\":\"FE42\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechte Eckhalterung\"}}},{\"category\":\"Ps\",\"key\":\"FE43\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke weiße Eckhalterung\"}}},{\"category\":\"Pe\",\"key\":\"FE44\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale rechte weiße Eckhalterung\"}}},{\"category\":\"Ps\",\"key\":\"FE47\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale linke eckige Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE48\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale eckige Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE59\",\"mappings\":{\"default\":{\"default\":\"Kleine linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE5A\",\"mappings\":{\"default\":{\"default\":\"Kleine rechte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE5B\",\"mappings\":{\"default\":{\"default\":\"Kleine linke geschweifte Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE5C\",\"mappings\":{\"default\":{\"default\":\"Kleine rechte geschweifte Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FE5D\",\"mappings\":{\"default\":{\"default\":\"Kleine linke Schildpatt-Klammer\"}}},{\"category\":\"Pe\",\"key\":\"FE5E\",\"mappings\":{\"default\":{\"default\":\"Kleine rechte Schildpatt-Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FF08\",\"mappings\":{\"default\":{\"default\":\"Linke Klammer in voller Breite\"}}},{\"category\":\"Pe\",\"key\":\"FF09\",\"mappings\":{\"default\":{\"default\":\"Rechte Klammer mit voller Breite\"}}},{\"category\":\"Ps\",\"key\":\"FF3B\",\"mappings\":{\"default\":{\"default\":\"Linke eckige Klammer mit voller Breite\"}}},{\"category\":\"Pe\",\"key\":\"FF3D\",\"mappings\":{\"default\":{\"default\":\"Rechteckige Klammer mit voller Breite\"}}},{\"category\":\"Ps\",\"key\":\"FF5B\",\"mappings\":{\"default\":{\"default\":\"Linke geschweifte Klammer mit voller Breite\"}}},{\"category\":\"Pe\",\"key\":\"FF5D\",\"mappings\":{\"default\":{\"default\":\"Rechtwinklige Klammer mit voller Breite\"}}},{\"category\":\"Ps\",\"key\":\"FF5F\",\"mappings\":{\"default\":{\"default\":\"Linke weiße Klammer mit voller Breite\"}}},{\"category\":\"Pe\",\"key\":\"FF60\",\"mappings\":{\"default\":{\"default\":\"Rechte breite weiße Klammer\"}}},{\"category\":\"Ps\",\"key\":\"FF62\",\"mappings\":{\"default\":{\"default\":\"Halbe breite linke eckklammer\"}}},{\"category\":\"Pe\",\"key\":\"FF63\",\"mappings\":{\"default\":{\"default\":\"Halbe breite rechte eckklammer\"}}}]\n,\n\"de/symbols/math_geometry.js\": \n[{\"locale\":\"de\"},{\"category\":\"So\",\"key\":\"2500\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Horizontal\"}}},{\"category\":\"So\",\"key\":\"2501\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Schwere Horizontale\"}}},{\"category\":\"So\",\"key\":\"2502\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Vertical\"}}},{\"category\":\"So\",\"key\":\"2503\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Schwere Vertikale\"}}},{\"category\":\"So\",\"key\":\"2504\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen Licht Triple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2505\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Triple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2506\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Triple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"2507\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Triple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"2508\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Quadruple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2509\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Quadruple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"250A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Quadruple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"250B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Quadruple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"250C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Down und Right\"}}},{\"category\":\"So\",\"key\":\"250D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Right Heavy\"}}},{\"category\":\"So\",\"key\":\"250E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Heavy und Right Light\"}}},{\"category\":\"So\",\"key\":\"250F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Down und Right\"}}},{\"category\":\"So\",\"key\":\"2510\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Down und Links\"}}},{\"category\":\"So\",\"key\":\"2511\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Left Heavy\"}}},{\"category\":\"So\",\"key\":\"2512\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Heavy und Left Light\"}}},{\"category\":\"So\",\"key\":\"2513\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Down und Left\"}}},{\"category\":\"So\",\"key\":\"2514\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen leuchten auf und richtig\"}}},{\"category\":\"So\",\"key\":\"2515\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Right Heavy\"}}},{\"category\":\"So\",\"key\":\"2516\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Heavy und Right Light\"}}},{\"category\":\"So\",\"key\":\"2517\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Up und Right\"}}},{\"category\":\"So\",\"key\":\"2518\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen leuchten und links\"}}},{\"category\":\"So\",\"key\":\"2519\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Left Heavy\"}}},{\"category\":\"So\",\"key\":\"251A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Heavy und Left Light\"}}},{\"category\":\"So\",\"key\":\"251B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Up und Links\"}}},{\"category\":\"So\",\"key\":\"251C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Vertical und Right\"}}},{\"category\":\"So\",\"key\":\"251D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Light und Right Heavy\"}}},{\"category\":\"So\",\"key\":\"251E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Heavy und Right Down Light\"}}},{\"category\":\"So\",\"key\":\"251F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Heavy und Right Up Light\"}}},{\"category\":\"So\",\"key\":\"2520\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Heavy und Right Light\"}}},{\"category\":\"So\",\"key\":\"2521\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Right Up Heavy\"}}},{\"category\":\"So\",\"key\":\"2522\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Right Down Heavy\"}}},{\"category\":\"So\",\"key\":\"2523\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Vertical und Right\"}}},{\"category\":\"So\",\"key\":\"2524\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Vertical und Left\"}}},{\"category\":\"So\",\"key\":\"2525\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Light und Left Heavy\"}}},{\"category\":\"So\",\"key\":\"2526\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Heavy und Left Down Light\"}}},{\"category\":\"So\",\"key\":\"2527\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Heavy und Left Up Light\"}}},{\"category\":\"So\",\"key\":\"2528\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Heavy und Left Light\"}}},{\"category\":\"So\",\"key\":\"2529\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Left Up Heavy\"}}},{\"category\":\"So\",\"key\":\"252A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Left Down Heavy\"}}},{\"category\":\"So\",\"key\":\"252B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Vertical und Left\"}}},{\"category\":\"So\",\"key\":\"252C\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen leicht und horizontal\"}}},{\"category\":\"So\",\"key\":\"252D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Heavy und Right Down Light\"}}},{\"category\":\"So\",\"key\":\"252E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Heavy und Left Down Light\"}}},{\"category\":\"So\",\"key\":\"252F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Horizontal Heavy\"}}},{\"category\":\"So\",\"key\":\"2530\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen für schweres und horizontales Licht\"}}},{\"category\":\"So\",\"key\":\"2531\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Light und Left Down Heavy\"}}},{\"category\":\"So\",\"key\":\"2532\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Light und Right Down Heavy\"}}},{\"category\":\"So\",\"key\":\"2533\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen nach unten und horizontal\"}}},{\"category\":\"So\",\"key\":\"2534\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen leuchten und horizontal\"}}},{\"category\":\"So\",\"key\":\"2535\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Heavy und Right Up Light\"}}},{\"category\":\"So\",\"key\":\"2536\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Heavy und Left Up Light\"}}},{\"category\":\"So\",\"key\":\"2537\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Horizontal Heavy\"}}},{\"category\":\"So\",\"key\":\"2538\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen für schweres und horizontales Licht\"}}},{\"category\":\"So\",\"key\":\"2539\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Light und Left Up Heavy\"}}},{\"category\":\"So\",\"key\":\"253A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Light und Right Up Heavy\"}}},{\"category\":\"So\",\"key\":\"253B\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen schwer und horizontal\"}}},{\"category\":\"So\",\"key\":\"253C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light vertikal und horizontal\"}}},{\"category\":\"So\",\"key\":\"253D\",\"mappings\":{\"default\":{\"default\":\"Kastenzeichnungen links schweres und rechtes vertikales Licht\"}}},{\"category\":\"So\",\"key\":\"253E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Heavy und Left Vertical Light\"}}},{\"category\":\"So\",\"key\":\"253F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Light und Horizontal Heavy\"}}},{\"category\":\"So\",\"key\":\"2540\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Heavy und Down Horizontal Light\"}}},{\"category\":\"So\",\"key\":\"2541\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Heavy und Up Horizontal Light\"}}},{\"category\":\"So\",\"key\":\"2542\",\"mappings\":{\"default\":{\"default\":\"Kastenzeichnungen Vertikales schweres und horizontales Licht\"}}},{\"category\":\"So\",\"key\":\"2543\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Up Heavy und Right Down Light\"}}},{\"category\":\"So\",\"key\":\"2544\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Up Heavy und Left Down Light\"}}},{\"category\":\"So\",\"key\":\"2545\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Down Heavy und Right Up Light\"}}},{\"category\":\"So\",\"key\":\"2546\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Down Heavy und Left Up Light\"}}},{\"category\":\"So\",\"key\":\"2547\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Light und Up Horizontal Heavy\"}}},{\"category\":\"So\",\"key\":\"2548\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Light und Down Horizontal Heavy\"}}},{\"category\":\"So\",\"key\":\"2549\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Right Light und Left Vertical Heavy\"}}},{\"category\":\"So\",\"key\":\"254A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Left Light und Right Vertical Heavy\"}}},{\"category\":\"So\",\"key\":\"254B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy vertikal und horizontal\"}}},{\"category\":\"So\",\"key\":\"254C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Double Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"254D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Double Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"254E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Double Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"254F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Double Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"2550\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen doppelt horizontal\"}}},{\"category\":\"So\",\"key\":\"2551\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Vertical\"}}},{\"category\":\"So\",\"key\":\"2552\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Single und Right Double\"}}},{\"category\":\"So\",\"key\":\"2553\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Double und Right Single\"}}},{\"category\":\"So\",\"key\":\"2554\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Down und Right\"}}},{\"category\":\"So\",\"key\":\"2555\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Single und Left Double\"}}},{\"category\":\"So\",\"key\":\"2556\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Double und Left Single\"}}},{\"category\":\"So\",\"key\":\"2557\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Down und Links\"}}},{\"category\":\"So\",\"key\":\"2558\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Single und Right Double\"}}},{\"category\":\"So\",\"key\":\"2559\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Double und Right Single\"}}},{\"category\":\"So\",\"key\":\"255A\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen verdoppeln und rechts\"}}},{\"category\":\"So\",\"key\":\"255B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Single und Left Double\"}}},{\"category\":\"So\",\"key\":\"255C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Double und Left Single\"}}},{\"category\":\"So\",\"key\":\"255D\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen verdoppeln und links\"}}},{\"category\":\"So\",\"key\":\"255E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Single und Right Double\"}}},{\"category\":\"So\",\"key\":\"255F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Double und Right Single\"}}},{\"category\":\"So\",\"key\":\"2560\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Vertical und Right\"}}},{\"category\":\"So\",\"key\":\"2561\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Single und Left Double\"}}},{\"category\":\"So\",\"key\":\"2562\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Double und Left Single\"}}},{\"category\":\"So\",\"key\":\"2563\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Vertical und Left\"}}},{\"category\":\"So\",\"key\":\"2564\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Single und Horizontal Double\"}}},{\"category\":\"So\",\"key\":\"2565\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Down Double und Horizontal Single\"}}},{\"category\":\"So\",\"key\":\"2566\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Double Down und Horizontal\"}}},{\"category\":\"So\",\"key\":\"2567\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Single und Horizontal Double\"}}},{\"category\":\"So\",\"key\":\"2568\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Up Double und Horizontal Single\"}}},{\"category\":\"So\",\"key\":\"2569\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen verdoppeln und horizontal\"}}},{\"category\":\"So\",\"key\":\"256A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Single und Horizontal Double\"}}},{\"category\":\"So\",\"key\":\"256B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Vertical Double und Horizontal Single\"}}},{\"category\":\"So\",\"key\":\"256C\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen doppelt vertikal und horizontal\"}}},{\"category\":\"So\",\"key\":\"256D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Arc Down und Right\"}}},{\"category\":\"So\",\"key\":\"256E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Arc Down und Links\"}}},{\"category\":\"So\",\"key\":\"256F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Arc Up und links\"}}},{\"category\":\"So\",\"key\":\"2570\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Arc Up und rechts\"}}},{\"category\":\"So\",\"key\":\"2571\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Diagonal Oben Rechts Nach Unten Links\"}}},{\"category\":\"So\",\"key\":\"2572\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Diagonal von oben links nach rechts unten\"}}},{\"category\":\"So\",\"key\":\"2573\",\"mappings\":{\"default\":{\"default\":\"Box Zeichnungen Light Diagonal Cross\"}}},{\"category\":\"So\",\"key\":\"2574\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen Light Left\"}}},{\"category\":\"So\",\"key\":\"2575\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen leuchten auf\"}}},{\"category\":\"So\",\"key\":\"2576\",\"mappings\":{\"default\":{\"default\":\"Box-Zeichnungen Light Right\"}}},{\"category\":\"So\",\"key\":\"2577\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Down\"}}},{\"category\":\"So\",\"key\":\"2578\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Left\"}}},{\"category\":\"So\",\"key\":\"2579\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Up\"}}},{\"category\":\"So\",\"key\":\"257A\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Right\"}}},{\"category\":\"So\",\"key\":\"257B\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Down\"}}},{\"category\":\"So\",\"key\":\"257C\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Left und Heavy Right\"}}},{\"category\":\"So\",\"key\":\"257D\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Light Up und Heavy Down\"}}},{\"category\":\"So\",\"key\":\"257E\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Left und Light Right\"}}},{\"category\":\"So\",\"key\":\"257F\",\"mappings\":{\"default\":{\"default\":\"Box Drawings Heavy Up und Light Down\"}}},{\"category\":\"So\",\"key\":\"2580\",\"mappings\":{\"default\":{\"default\":\"Block der oberen Hälfte\"}}},{\"category\":\"So\",\"key\":\"2581\",\"mappings\":{\"default\":{\"default\":\"Unterer achter Block\"}}},{\"category\":\"So\",\"key\":\"2582\",\"mappings\":{\"default\":{\"default\":\"Unterer Viertelblock\"}}},{\"category\":\"So\",\"key\":\"2583\",\"mappings\":{\"default\":{\"default\":\"Drei Achtel-Block senken\"}}},{\"category\":\"So\",\"key\":\"2584\",\"mappings\":{\"default\":{\"default\":\"Block der unteren Hälfte\"}}},{\"category\":\"So\",\"key\":\"2585\",\"mappings\":{\"default\":{\"default\":\"Fünf Achtel Block\"}}},{\"category\":\"So\",\"key\":\"2586\",\"mappings\":{\"default\":{\"default\":\"Unterer Dreiviertelblock\"}}},{\"category\":\"So\",\"key\":\"2587\",\"mappings\":{\"default\":{\"default\":\"Unterer Sieben Achtel-Block\"}}},{\"category\":\"So\",\"key\":\"2588\",\"mappings\":{\"default\":{\"default\":\"Voller Block\"}}},{\"category\":\"So\",\"key\":\"2589\",\"mappings\":{\"default\":{\"default\":\"Linker Sieben Achtel Block\"}}},{\"category\":\"So\",\"key\":\"258A\",\"mappings\":{\"default\":{\"default\":\"Linker Dreiviertelblock\"}}},{\"category\":\"So\",\"key\":\"258B\",\"mappings\":{\"default\":{\"default\":\"Linker Block mit fünf Achteln\"}}},{\"category\":\"So\",\"key\":\"258C\",\"mappings\":{\"default\":{\"default\":\"Linke halbe Block\"}}},{\"category\":\"So\",\"key\":\"258D\",\"mappings\":{\"default\":{\"default\":\"Block drei Achtel\"}}},{\"category\":\"So\",\"key\":\"258E\",\"mappings\":{\"default\":{\"default\":\"Linke einen Viertelblock\"}}},{\"category\":\"So\",\"key\":\"258F\",\"mappings\":{\"default\":{\"default\":\"Linker achter Block\"}}},{\"category\":\"So\",\"key\":\"2590\",\"mappings\":{\"default\":{\"default\":\"Rechte halbe Block\"}}},{\"category\":\"So\",\"key\":\"2591\",\"mappings\":{\"default\":{\"default\":\"Lichtschatten\"}}},{\"category\":\"So\",\"key\":\"2592\",\"mappings\":{\"default\":{\"default\":\"Mittlere Schatten\"}}},{\"category\":\"So\",\"key\":\"2593\",\"mappings\":{\"default\":{\"default\":\"Dunkler Schatten\"}}},{\"category\":\"So\",\"key\":\"2594\",\"mappings\":{\"default\":{\"default\":\"Oberer achter Block\"}}},{\"category\":\"So\",\"key\":\"2595\",\"mappings\":{\"default\":{\"default\":\"rechter achter Block\"}}},{\"category\":\"So\",\"key\":\"2596\",\"mappings\":{\"default\":{\"default\":\"Quadrant unten links\"}}},{\"category\":\"So\",\"key\":\"2597\",\"mappings\":{\"default\":{\"default\":\"Quadrant rechts unten\"}}},{\"category\":\"So\",\"key\":\"2598\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben links\"}}},{\"category\":\"So\",\"key\":\"2599\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben links und unten links und rechts unten\"}}},{\"category\":\"So\",\"key\":\"259A\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben links und rechts unten\"}}},{\"category\":\"So\",\"key\":\"259B\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben links und oben rechts und unten links\"}}},{\"category\":\"So\",\"key\":\"259C\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben links und oben rechts und unten rechts\"}}},{\"category\":\"So\",\"key\":\"259D\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben rechts\"}}},{\"category\":\"So\",\"key\":\"259E\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben rechts und unten links\"}}},{\"category\":\"So\",\"key\":\"259F\",\"mappings\":{\"default\":{\"default\":\"Quadrant oben rechts und unten links und unten rechts\"}}},{\"category\":\"So\",\"key\":\"25A0\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Quadrat\"}}},{\"category\":\"So\",\"key\":\"25A1\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat\"}}},{\"category\":\"So\",\"key\":\"25A2\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit abgerundeten Ecken\"}}},{\"category\":\"So\",\"key\":\"25A3\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat, das schwarzes kleines Quadrat enthält\"}}},{\"category\":\"So\",\"key\":\"25A4\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit horizontaler Füllung\"}}},{\"category\":\"So\",\"key\":\"25A5\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit vertikaler Füllung\"}}},{\"category\":\"So\",\"key\":\"25A6\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit orthogonaler Schraffurfüllung\"}}},{\"category\":\"So\",\"key\":\"25A7\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit Oben links nach rechts unten füllen\"}}},{\"category\":\"So\",\"key\":\"25A8\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit oberer rechter bis unterer linker Füllung\"}}},{\"category\":\"So\",\"key\":\"25A9\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit diagonaler Schraffurfüllung\"}}},{\"category\":\"So\",\"key\":\"25AA\",\"mappings\":{\"default\":{\"default\":\"Schwarzes kleines Quadrat\"}}},{\"category\":\"So\",\"key\":\"25AB\",\"mappings\":{\"default\":{\"default\":\"Weißes kleines Quadrat\"}}},{\"category\":\"So\",\"key\":\"25AC\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Rechteck\"}}},{\"category\":\"So\",\"key\":\"25AD\",\"mappings\":{\"default\":{\"default\":\"Weißes Rechteck\"}}},{\"category\":\"So\",\"key\":\"25AE\",\"mappings\":{\"default\":{\"default\":\"Schwarzes vertikales Rechteck\"}}},{\"category\":\"So\",\"key\":\"25AF\",\"mappings\":{\"default\":{\"default\":\"Weißes vertikales Rechteck\"}}},{\"category\":\"So\",\"key\":\"25B0\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Parallelogramm\"}}},{\"category\":\"So\",\"key\":\"25B1\",\"mappings\":{\"default\":{\"default\":\"Weißes Parallelogramm\"}}},{\"category\":\"So\",\"key\":\"25B2\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach oben zeigendes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B3\",\"mappings\":{\"default\":{\"default\":\"Weißes nach oben zeigendes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B4\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach oben zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B5\",\"mappings\":{\"default\":{\"default\":\"Weißes nach oben zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B6\",\"mappings\":{\"default\":{\"default\":\"Schwarzes rechtwinkliges Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"25B7\",\"mappings\":{\"default\":{\"default\":\"Weißes rechtwinkliges Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B8\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach rechts zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25B9\",\"mappings\":{\"default\":{\"default\":\"Weißes nach rechts zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25BA\",\"mappings\":{\"default\":{\"default\":\"Schwarzer nach rechts zeigender Zeiger\"}}},{\"category\":\"So\",\"key\":\"25BB\",\"mappings\":{\"default\":{\"default\":\"Weißer nach rechts zeigender Zeiger\"}}},{\"category\":\"So\",\"key\":\"25BC\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Abwärtsdreieck\"}}},{\"category\":\"So\",\"key\":\"25BD\",\"mappings\":{\"default\":{\"default\":\"Weißes nach unten zeigendes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25BE\",\"mappings\":{\"default\":{\"default\":\"Schwarzes, nach unten zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25BF\",\"mappings\":{\"default\":{\"default\":\"Weißes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25C0\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach links zeigendes Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"25C1\",\"mappings\":{\"default\":{\"default\":\"Weißes nach links zeigendes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25C2\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach links zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25C3\",\"mappings\":{\"default\":{\"default\":\"Weißes nach links zeigendes kleines Dreieck\"}}},{\"category\":\"So\",\"key\":\"25C4\",\"mappings\":{\"default\":{\"default\":\"Schwarzer nach links zeigender Zeiger\"}}},{\"category\":\"So\",\"key\":\"25C5\",\"mappings\":{\"default\":{\"default\":\"Weißer nach links zeigender Zeiger\"}}},{\"category\":\"So\",\"key\":\"25C6\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Diamant\"}}},{\"category\":\"So\",\"key\":\"25C7\",\"mappings\":{\"default\":{\"default\":\"Weißer Diamant\"}}},{\"category\":\"So\",\"key\":\"25C8\",\"mappings\":{\"default\":{\"default\":\"Weißer Diamant mit schwarzem kleinem Diamant\"}}},{\"category\":\"So\",\"key\":\"25C9\",\"mappings\":{\"default\":{\"default\":\"Fischauge\"}}},{\"category\":\"So\",\"key\":\"25CA\",\"mappings\":{\"default\":{\"default\":\"Raute\"}}},{\"category\":\"So\",\"key\":\"25CB\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis\"}}},{\"category\":\"So\",\"key\":\"25CC\",\"mappings\":{\"default\":{\"default\":\"Gepunkteter Kreis\"}}},{\"category\":\"So\",\"key\":\"25CD\",\"mappings\":{\"default\":{\"default\":\"Kreis mit vertikaler Füllung\"}}},{\"category\":\"So\",\"key\":\"25CE\",\"mappings\":{\"default\":{\"default\":\"Bullseye\"}}},{\"category\":\"So\",\"key\":\"25CF\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Kreis\"}}},{\"category\":\"So\",\"key\":\"25D0\",\"mappings\":{\"default\":{\"default\":\"Kreis mit linker Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25D1\",\"mappings\":{\"default\":{\"default\":\"Kreis mit rechter Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25D2\",\"mappings\":{\"default\":{\"default\":\"Kreis mit unterer Hälfte Schwarz\"}}},{\"category\":\"So\",\"key\":\"25D3\",\"mappings\":{\"default\":{\"default\":\"Kreis mit oberer Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25D4\",\"mappings\":{\"default\":{\"default\":\"Kreis mit oberem rechten Quadranten schwarz\"}}},{\"category\":\"So\",\"key\":\"25D5\",\"mappings\":{\"default\":{\"default\":\"Kreis mit ganzem oberen linken Quadranten schwarz\"}}},{\"category\":\"So\",\"key\":\"25D6\",\"mappings\":{\"default\":{\"default\":\"Linker halber schwarzer Kreis\"}}},{\"category\":\"So\",\"key\":\"25D7\",\"mappings\":{\"default\":{\"default\":\"rechter halber schwarzer Kreis\"}}},{\"category\":\"So\",\"key\":\"25D8\",\"mappings\":{\"default\":{\"default\":\"Inverse Kugel\"}}},{\"category\":\"So\",\"key\":\"25D9\",\"mappings\":{\"default\":{\"default\":\"Inverse weißer Kreis\"}}},{\"category\":\"So\",\"key\":\"25DA\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter weißer Kreis der oberen Hälfte\"}}},{\"category\":\"So\",\"key\":\"25DB\",\"mappings\":{\"default\":{\"default\":\"Inverser weißer Kreis der unteren Hälfte\"}}},{\"category\":\"So\",\"key\":\"25DC\",\"mappings\":{\"default\":{\"default\":\"Kreisbogen des oberen linken Quadranten\"}}},{\"category\":\"So\",\"key\":\"25DD\",\"mappings\":{\"default\":{\"default\":\"Kreisbogen im oberen rechten Quadranten\"}}},{\"category\":\"So\",\"key\":\"25DE\",\"mappings\":{\"default\":{\"default\":\"Kreisbogen des rechten unteren Quadranten\"}}},{\"category\":\"So\",\"key\":\"25DF\",\"mappings\":{\"default\":{\"default\":\"Kreisbogen des unteren linken Quadranten\"}}},{\"category\":\"So\",\"key\":\"25E0\",\"mappings\":{\"default\":{\"default\":\"Oberer Halbkreis\"}}},{\"category\":\"So\",\"key\":\"25E1\",\"mappings\":{\"default\":{\"default\":\"Unterer Halbkreis\"}}},{\"category\":\"So\",\"key\":\"25E2\",\"mappings\":{\"default\":{\"default\":\"Schwarzes rechtes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25E3\",\"mappings\":{\"default\":{\"default\":\"Schwarzes unteres linkes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25E4\",\"mappings\":{\"default\":{\"default\":\"Schwarzes oberes linkes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25E5\",\"mappings\":{\"default\":{\"default\":\"Schwarzes rechtes Dreieck\"}}},{\"category\":\"So\",\"key\":\"25E6\",\"mappings\":{\"default\":{\"default\":\"Weiße Kugel\"}}},{\"category\":\"So\",\"key\":\"25E7\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit linker Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25E8\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit rechter Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25E9\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit der oberen linken Diagonalenhälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25EA\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit unterer rechter diagonaler Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25EB\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit senkrechter Linie\"}}},{\"category\":\"So\",\"key\":\"25EC\",\"mappings\":{\"default\":{\"default\":\"Weißes nach oben zeigendes Dreieck mit Punkt\"}}},{\"category\":\"So\",\"key\":\"25ED\",\"mappings\":{\"default\":{\"default\":\"Aufwärtszeigendes Dreieck mit linker Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25EE\",\"mappings\":{\"default\":{\"default\":\"Aufwärtszeigendes Dreieck mit rechter Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"25EF\",\"mappings\":{\"default\":{\"default\":\"Großer Kreis\"}}},{\"category\":\"So\",\"key\":\"25F0\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit oberem linken Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F1\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit unterem linken Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F2\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit unterem rechten Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F3\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit rechtem oberen Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F4\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit oberem linkem Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F5\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit unterem linken Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F6\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit unterem rechten Quadranten\"}}},{\"category\":\"So\",\"key\":\"25F7\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit rechtem oberen Quadranten\"}}},{\"category\":\"Sm\",\"key\":\"25F8\",\"mappings\":{\"default\":{\"default\":\"Oberes linkes Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"25F9\",\"mappings\":{\"default\":{\"default\":\"Oberes rechtes Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"25FA\",\"mappings\":{\"default\":{\"default\":\"Unteres linkes Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"25FB\",\"mappings\":{\"default\":{\"default\":\"Weißes mittleres Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"25FC\",\"mappings\":{\"default\":{\"default\":\"Schwarzes mittleres Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"25FD\",\"mappings\":{\"default\":{\"default\":\"Weißes mittleres kleines Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"25FE\",\"mappings\":{\"default\":{\"default\":\"Schwarzes mittleres kleines Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"25FF\",\"mappings\":{\"default\":{\"default\":\"Unteres rechtes Dreieck\"}}},{\"category\":\"So\",\"key\":\"2B12\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit oberer Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B13\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit unterer Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B14\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit oberer rechter diagonaler Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B15\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit unterer linker diagonaler Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B16\",\"mappings\":{\"default\":{\"default\":\"Diamant mit linker Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B17\",\"mappings\":{\"default\":{\"default\":\"Diamant mit rechter Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B18\",\"mappings\":{\"default\":{\"default\":\"Diamant mit oberer Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B19\",\"mappings\":{\"default\":{\"default\":\"Diamant mit unterer Hälfte schwarz\"}}},{\"category\":\"So\",\"key\":\"2B1A\",\"mappings\":{\"default\":{\"default\":\"Gepunktetes Quadrat\"}}},{\"category\":\"So\",\"key\":\"2B1B\",\"mappings\":{\"default\":{\"default\":\"Schwarzes großes Quadrat\"}}},{\"category\":\"So\",\"key\":\"2B1C\",\"mappings\":{\"default\":{\"default\":\"Weißes großes Quadrat\"}}},{\"category\":\"So\",\"key\":\"2B1D\",\"mappings\":{\"default\":{\"default\":\"Schwarzes sehr kleines Quadrat\"}}},{\"category\":\"So\",\"key\":\"2B1E\",\"mappings\":{\"default\":{\"default\":\"Weißes sehr kleines Quadrat\"}}},{\"category\":\"So\",\"key\":\"2B1F\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Pentagon\"}}},{\"category\":\"So\",\"key\":\"2B20\",\"mappings\":{\"default\":{\"default\":\"Weißes Pentagon\"}}},{\"category\":\"So\",\"key\":\"2B21\",\"mappings\":{\"default\":{\"default\":\"Weißes Sechseck\"}}},{\"category\":\"So\",\"key\":\"2B22\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Sechseck\"}}},{\"category\":\"So\",\"key\":\"2B23\",\"mappings\":{\"default\":{\"default\":\"Horizontales schwarzes Sechseck\"}}},{\"category\":\"So\",\"key\":\"2B24\",\"mappings\":{\"default\":{\"default\":\"Schwarzer großer Kreis\"}}},{\"category\":\"So\",\"key\":\"2B25\",\"mappings\":{\"default\":{\"default\":\"Schwarzer mittlerer Diamant\"}}},{\"category\":\"So\",\"key\":\"2B26\",\"mappings\":{\"default\":{\"default\":\"Weißer mittlerer Diamant\"}}},{\"category\":\"So\",\"key\":\"2B27\",\"mappings\":{\"default\":{\"default\":\"Schwarze mittlere Raute\"}}},{\"category\":\"So\",\"key\":\"2B28\",\"mappings\":{\"default\":{\"default\":\"Weiße mittlere Raute\"}}},{\"category\":\"So\",\"key\":\"2B29\",\"mappings\":{\"default\":{\"default\":\"Schwarzer kleiner Diamant\"}}},{\"category\":\"So\",\"key\":\"2B2A\",\"mappings\":{\"default\":{\"default\":\"Schwarze kleine Raute\"}}},{\"category\":\"So\",\"key\":\"2B2B\",\"mappings\":{\"default\":{\"default\":\"Weiße kleine Raute\"}}},{\"category\":\"So\",\"key\":\"2B2C\",\"mappings\":{\"default\":{\"default\":\"Schwarze horizontale Ellipse\"}}},{\"category\":\"So\",\"key\":\"2B2D\",\"mappings\":{\"default\":{\"default\":\"Weiße horizontale Ellipse\"}}},{\"category\":\"So\",\"key\":\"2B2E\",\"mappings\":{\"default\":{\"default\":\"Schwarze vertikale Ellipse\"}}},{\"category\":\"So\",\"key\":\"2B2F\",\"mappings\":{\"default\":{\"default\":\"Weiße vertikale Ellipse\"}}},{\"category\":\"So\",\"key\":\"2B50\",\"mappings\":{\"default\":{\"default\":\"Weißer mittlerer Stern\"}}},{\"category\":\"So\",\"key\":\"2B51\",\"mappings\":{\"default\":{\"default\":\"Schwarzer kleiner Stern\"}}},{\"category\":\"So\",\"key\":\"2B52\",\"mappings\":{\"default\":{\"default\":\"Weißer kleiner Stern\"}}},{\"category\":\"So\",\"key\":\"2B53\",\"mappings\":{\"default\":{\"default\":\"Schwarzes nach rechts zeigendes Pentagon\"}}},{\"category\":\"So\",\"key\":\"2B54\",\"mappings\":{\"default\":{\"default\":\"Weißes nach rechts zeigendes Pentagon\"}}},{\"category\":\"So\",\"key\":\"2B55\",\"mappings\":{\"default\":{\"default\":\"Schwerer großer Kreis\"}}},{\"category\":\"So\",\"key\":\"2B56\",\"mappings\":{\"default\":{\"default\":\"Schweres Oval mit innenliegendem Oval\"}}},{\"category\":\"So\",\"key\":\"2B57\",\"mappings\":{\"default\":{\"default\":\"Schwerer Kreis mit Kreis nach innen\"}}},{\"category\":\"So\",\"key\":\"2B58\",\"mappings\":{\"default\":{\"default\":\"Schwerer Kreis\"}}},{\"category\":\"So\",\"key\":\"2B59\",\"mappings\":{\"default\":{\"default\":\"Schwerer eingekreister Saltire\"}}}]\n,\n\"de/symbols/math_harpoons.js\": \n[{\"locale\":\"de\"},{\"category\":\"So\",\"key\":\"21BC\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb nach oben\"}}},{\"category\":\"So\",\"key\":\"21BD\",\"mappings\":{\"default\":{\"default\":\"Harpune nach links mit Barb nach unten\"}}},{\"category\":\"So\",\"key\":\"21BE\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb nach rechts\"}}},{\"category\":\"So\",\"key\":\"21BF\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb nach links\"}}},{\"category\":\"So\",\"key\":\"21C0\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb nach oben\"}}},{\"category\":\"So\",\"key\":\"21C1\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb nach unten\"}}},{\"category\":\"So\",\"key\":\"21C2\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb nach rechts\"}}},{\"category\":\"So\",\"key\":\"21C3\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb nach links\"}}},{\"category\":\"So\",\"key\":\"21CB\",\"mappings\":{\"default\":{\"default\":\"Harpune nach links über Harpune nach rechts\"}}},{\"category\":\"So\",\"key\":\"21CC\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts über Harpune nach links\"}}},{\"category\":\"Sm\",\"key\":\"294A\",\"mappings\":{\"default\":{\"default\":\"Linke Barb Up Rechte Barb Down Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294B\",\"mappings\":{\"default\":{\"default\":\"Linke Barb Down Rechte Barb Up Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294C\",\"mappings\":{\"default\":{\"default\":\"Nach oben Barb Rechts Nach links Barb Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294D\",\"mappings\":{\"default\":{\"default\":\"Up Barb Left Abwärts Barb Right Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294E\",\"mappings\":{\"default\":{\"default\":\"Linke Barb Up Rechte Barb Up Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294F\",\"mappings\":{\"default\":{\"default\":\"Barb nach rechts Barb nach rechts Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"2950\",\"mappings\":{\"default\":{\"default\":\"Linke Barb Down Rechte Barb Down Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"2951\",\"mappings\":{\"default\":{\"default\":\"Up Barb Left Abwärts Barb Left Harpoon\"}}},{\"category\":\"Sm\",\"key\":\"2952\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Up To Bar\"}}},{\"category\":\"Sm\",\"key\":\"2953\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb bis zur Bar\"}}},{\"category\":\"Sm\",\"key\":\"2954\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Widerhaken rechts\"}}},{\"category\":\"Sm\",\"key\":\"2955\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb Right to Bar\"}}},{\"category\":\"Sm\",\"key\":\"2956\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Widerhaken nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2957\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Widerhaken nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2958\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb nach links\"}}},{\"category\":\"Sm\",\"key\":\"2959\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb nach links\"}}},{\"category\":\"Sm\",\"key\":\"295A\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Up von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"295B\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb Up von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"295C\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb rechts von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"295D\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb rechts von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"295E\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Down von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"295F\",\"mappings\":{\"default\":{\"default\":\"Rechts Harpoon mit Barb Down von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2960\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2961\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb links von der Bar\"}}},{\"category\":\"Sm\",\"key\":\"2962\",\"mappings\":{\"default\":{\"default\":\"Harpune nach links mit Barb nach oben Harpune nach links mit Barb nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2963\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb links neben Harpune nach oben mit Barb rechts\"}}},{\"category\":\"Sm\",\"key\":\"2964\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb nach oben Harpoon nach rechts mit Barb nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2965\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb nach unten Harpune nach unten mit Barb nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"2966\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Up Oben Rechts Harpoon mit Barb Up\"}}},{\"category\":\"Sm\",\"key\":\"2967\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Widerhaken nach unten Rechts Harpune mit Widerhaken nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2968\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb nach oben Harpune nach links mit Barb nach oben\"}}},{\"category\":\"Sm\",\"key\":\"2969\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb nach unten Harpune nach links mit Barb nach unten\"}}},{\"category\":\"Sm\",\"key\":\"296A\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Up Above Long Dash\"}}},{\"category\":\"Sm\",\"key\":\"296B\",\"mappings\":{\"default\":{\"default\":\"Linke Harpune mit Barb Down Under Long Dash\"}}},{\"category\":\"Sm\",\"key\":\"296C\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Barb Up Long Long Dash\"}}},{\"category\":\"Sm\",\"key\":\"296D\",\"mappings\":{\"default\":{\"default\":\"Harpune nach rechts mit Widerhaken nach unten\"}}},{\"category\":\"Sm\",\"key\":\"296E\",\"mappings\":{\"default\":{\"default\":\"Harpune nach oben mit Barb links neben Harpune nach unten mit Barb rechts\"}}},{\"category\":\"Sm\",\"key\":\"296F\",\"mappings\":{\"default\":{\"default\":\"Harpune nach unten mit Barb links neben Harpune nach oben mit Barb rechts\"}}},{\"category\":\"Sm\",\"key\":\"297C\",\"mappings\":{\"default\":{\"default\":\"linker Fischschwanz\"}}},{\"category\":\"Sm\",\"key\":\"297D\",\"mappings\":{\"default\":{\"default\":\"rechter Fischschwanz\"}}},{\"category\":\"Sm\",\"key\":\"297E\",\"mappings\":{\"default\":{\"default\":\"Fischschwanz\"}}},{\"category\":\"Sm\",\"key\":\"297F\",\"mappings\":{\"default\":{\"default\":\"Fischschwanz\"}}}]\n,\n\"de/symbols/math_non_characters.js\": \n[{\"locale\":\"de\"},{\"category\":\"Ll\",\"key\":\"210F\",\"mappings\":{\"default\":{\"default\":\"Planck-Konstante über zwei Pi\"}}},{\"category\":\"So\",\"key\":\"2114\",\"mappings\":{\"default\":{\"default\":\"L B Balkensymbol\"}}},{\"category\":\"So\",\"key\":\"2116\",\"mappings\":{\"default\":{\"default\":\"Numero-Zeichen\"}}},{\"category\":\"So\",\"key\":\"2117\",\"mappings\":{\"default\":{\"default\":\"Tonaufnahme Copyright\"}}},{\"category\":\"So\",\"key\":\"211E\",\"mappings\":{\"default\":{\"default\":\"Rezept nehmen\"}}},{\"category\":\"So\",\"key\":\"211F\",\"mappings\":{\"default\":{\"default\":\"Antwort\"}}},{\"category\":\"So\",\"key\":\"2120\",\"mappings\":{\"default\":{\"default\":\"Dienstleistungsmarke\"}}},{\"category\":\"So\",\"key\":\"2121\",\"mappings\":{\"default\":{\"default\":\"Telefon Zeichen\"}}},{\"category\":\"So\",\"key\":\"2122\",\"mappings\":{\"default\":{\"default\":\"Markenzeichen\"}}},{\"category\":\"So\",\"key\":\"2123\",\"mappings\":{\"default\":{\"default\":\"Versicle\"}}},{\"category\":\"So\",\"key\":\"2125\",\"mappings\":{\"default\":{\"default\":\"Unze-Zeichen\"}}},{\"category\":\"Lu\",\"key\":\"2126\",\"mappings\":{\"default\":{\"default\":\"Ohm-Zeichen\"}}},{\"category\":\"So\",\"key\":\"2127\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes Ohm-Zeichen\"}}},{\"category\":\"Lu\",\"key\":\"212A\",\"mappings\":{\"default\":{\"default\":\"Kelvin-Zeichen\"}}},{\"category\":\"Lu\",\"key\":\"212B\",\"mappings\":{\"default\":{\"default\":\"Angstrom-Zeichen\"}}},{\"category\":\"So\",\"key\":\"212E\",\"mappings\":{\"default\":{\"default\":\"Geschätztes Symbol\"}}},{\"category\":\"Lu\",\"key\":\"2132\",\"mappings\":{\"default\":{\"default\":\"Umgeschlagenes Kapital F\"}}},{\"category\":\"Ll\",\"key\":\"2139\",\"mappings\":{\"default\":{\"default\":\"Informationsquelle\"}}},{\"category\":\"So\",\"key\":\"213A\",\"mappings\":{\"default\":{\"default\":\"Gedrehtes Kapital Q\"}}},{\"category\":\"So\",\"key\":\"213B\",\"mappings\":{\"default\":{\"default\":\"Faksimile-Zeichen\"}}},{\"category\":\"Sm\",\"key\":\"2141\",\"mappings\":{\"default\":{\"default\":\"Sans-Serif Capital G\"}}},{\"category\":\"Sm\",\"key\":\"2142\",\"mappings\":{\"default\":{\"default\":\"Sans-Serif Capital L\"}}},{\"category\":\"Sm\",\"key\":\"2143\",\"mappings\":{\"default\":{\"default\":\"Aufgehobenes Sans-Serif-Kapital L\"}}},{\"category\":\"Sm\",\"key\":\"2144\",\"mappings\":{\"default\":{\"default\":\"Sans-Serif Capital Y\"}}}]\n,\n\"de/symbols/math_symbols.js\": \n[{\"locale\":\"de\"},{\"key\":\"0021\",\"mappings\":{\"default\":{\"default\":\"Fakultät\"}},\"category\":\"Po\"},{\"key\":\"0022\",\"mappings\":{\"default\":{\"default\":\"Anführungszeichen\"}},\"category\":\"Po\"},{\"key\":\"0023\",\"mappings\":{\"default\":{\"default\":\"Nummernzeichen\"}},\"category\":\"Po\"},{\"key\":\"0024\",\"mappings\":{\"default\":{\"default\":\"Dollar\"}},\"category\":\"Sc\"},{\"key\":\"0025\",\"mappings\":{\"default\":{\"default\":\"Prozent\"}},\"category\":\"Po\"},{\"key\":\"0026\",\"mappings\":{\"default\":{\"default\":\"und\"}},\"category\":\"Po\"},{\"key\":\"0027\",\"mappings\":{\"default\":{\"default\":\"Hochkomma\"}},\"category\":\"Po\"},{\"key\":\"002A\",\"mappings\":{\"default\":{\"default\":\"times\"}},\"category\":\"Po\"},{\"key\":\"002B\",\"mappings\":{\"default\":{\"default\":\"plus\"}},\"category\":\"Sm\"},{\"key\":\"002C\",\"mappings\":{\"default\":{\"default\":\"Komma\"}},\"category\":\"Po\"},{\"key\":\"002D\",\"mappings\":{\"default\":{\"default\":\"minus\"}},\"category\":\"Pd\"},{\"category\":\"Po\",\"key\":\"002E\",\"mappings\":{\"default\":{\"default\":\"Punkt\"}}},{\"key\":\"002F\",\"mappings\":{\"default\":{\"default\":\"Schrägstrich\"}},\"category\":\"Po\"},{\"key\":\"003A\",\"mappings\":{\"default\":{\"default\":\"Doppelpunkt\"}},\"category\":\"Po\"},{\"key\":\"003B\",\"mappings\":{\"default\":{\"default\":\"Strichpunkt\"}},\"category\":\"Po\"},{\"key\":\"003C\",\"mappings\":{\"default\":{\"default\":\"kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"003D\",\"mappings\":{\"default\":{\"default\":\"ist gleich\"}},\"category\":\"Sm\"},{\"key\":\"003E\",\"mappings\":{\"default\":{\"default\":\"größer als\"}},\"category\":\"Sm\"},{\"key\":\"003F\",\"mappings\":{\"default\":{\"default\":\"Fragezeichen\"}},\"category\":\"Po\"},{\"key\":\"0040\",\"mappings\":{\"default\":{\"default\":\"Klammeraffe\"}},\"category\":\"Po\"},{\"key\":\"005C\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Schrägstrich\"}},\"category\":\"Po\"},{\"key\":\"005E\",\"mappings\":{\"default\":{\"default\":\"circumflex\"}},\"category\":\"Sk\"},{\"key\":\"005F\",\"mappings\":{\"default\":{\"default\":\"Unterstrich\"}},\"category\":\"Pc\"},{\"key\":\"0060\",\"mappings\":{\"default\":{\"default\":\"Gravis Akzent\"}},\"category\":\"Sk\"},{\"key\":\"007C\",\"mappings\":{\"default\":{\"default\":\"senkrechter Strich\"}},\"category\":\"Sm\"},{\"key\":\"007E\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sm\"},{\"key\":\"00A1\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes Ausrufezeichen\"}},\"category\":\"Po\"},{\"key\":\"00A2\",\"mappings\":{\"default\":{\"default\":\"Cent\"}},\"category\":\"Sc\"},{\"key\":\"00A3\",\"mappings\":{\"default\":{\"default\":\"Pfund\"}},\"category\":\"Sc\"},{\"key\":\"00A4\",\"mappings\":{\"default\":{\"default\":\"währungszeichen\"}},\"category\":\"Sc\"},{\"key\":\"00A5\",\"mappings\":{\"default\":{\"default\":\"yen\"}},\"category\":\"Sc\"},{\"key\":\"00A6\",\"mappings\":{\"default\":{\"default\":\"gebrochene Linie\"}},\"category\":\"So\"},{\"key\":\"00A7\",\"mappings\":{\"default\":{\"default\":\"Abschnitt\"}},\"category\":\"Po\"},{\"key\":\"00A8\",\"mappings\":{\"default\":{\"default\":\"diaeresis\"}},\"category\":\"Sk\"},{\"key\":\"00A9\",\"mappings\":{\"default\":{\"default\":\"Copyright\"}},\"category\":\"So\"},{\"key\":\"00AA\",\"mappings\":{\"default\":{\"default\":\"weibliches Ordnungszeichen\"}},\"category\":\"Lo\"},{\"category\":\"Pi\",\"key\":\"00AB\",\"mappings\":{\"default\":{\"default\":\"Nach links zeigendes doppeltes spitzes Anführungszeichen\"}}},{\"key\":\"00AC\",\"mappings\":{\"default\":{\"default\":\"nicht\"}},\"category\":\"Sm\"},{\"key\":\"00AE\",\"mappings\":{\"default\":{\"default\":\"registered sign\"}},\"category\":\"So\"},{\"key\":\"00AF\",\"mappings\":{\"default\":{\"default\":\"Überstrich\",\"alternative\":\"Makron\"}},\"category\":\"Sk\"},{\"key\":\"00B0\",\"mappings\":{\"default\":{\"default\":\"Grad\"}},\"category\":\"So\"},{\"key\":\"00B1\",\"mappings\":{\"default\":{\"default\":\"plus minus\"}},\"category\":\"Sm\"},{\"key\":\"00B4\",\"mappings\":{\"default\":{\"default\":\"acute accent\"}},\"category\":\"Sk\"},{\"key\":\"00B5\",\"mappings\":{\"default\":{\"default\":\"micro sign\"}},\"category\":\"Ll\"},{\"key\":\"00B6\",\"mappings\":{\"default\":{\"default\":\"Paragraf\"}},\"category\":\"Po\"},{\"key\":\"00B7\",\"mappings\":{\"default\":{\"default\":\"mal\",\"alternative\":\"Punkt mittig\"}},\"category\":\"Po\"},{\"key\":\"00B8\",\"mappings\":{\"default\":{\"default\":\"Cedille\"}},\"category\":\"Sk\"},{\"key\":\"00BA\",\"mappings\":{\"default\":{\"default\":\"Männliches Ordnungszeichen\"}},\"category\":\"Lo\"},{\"category\":\"Pf\",\"key\":\"00BB\",\"mappings\":{\"default\":{\"default\":\"Nach rechts zeigendes doppeltes spitzes Anführungszeichen\"}}},{\"key\":\"00BF\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes Fragezeichen\"}},\"category\":\"Po\"},{\"category\":\"Sm\",\"key\":\"00D7\",\"mappings\":{\"default\":{\"default\":\"mal\"}}},{\"category\":\"Sm\",\"key\":\"00F7\",\"mappings\":{\"default\":{\"default\":\"geteilt durch\"}}},{\"key\":\"02D8\",\"mappings\":{\"default\":{\"default\":\"Breve\"}},\"category\":\"Sk\"},{\"key\":\"02D9\",\"mappings\":{\"default\":{\"default\":\"Überpunkt\"}},\"category\":\"Sk\"},{\"key\":\"02DA\",\"mappings\":{\"default\":{\"default\":\"Überring\"}},\"category\":\"Sk\"},{\"key\":\"02DB\",\"mappings\":{\"default\":{\"default\":\"Ogonek\"}},\"category\":\"Sk\"},{\"key\":\"02DC\",\"mappings\":{\"default\":{\"default\":\"Tilde\"}},\"category\":\"Sk\"},{\"key\":\"02DD\",\"mappings\":{\"default\":{\"default\":\"Doppleakutakzent\"}},\"category\":\"Sk\"},{\"category\":\"Pd\",\"key\":\"2010\",\"mappings\":{\"default\":{\"default\":\"Bindestrich\"}}},{\"category\":\"Pd\",\"key\":\"2011\",\"mappings\":{\"default\":{\"default\":\"Nicht brechender Bindestrich\"}}},{\"category\":\"Pd\",\"key\":\"2012\",\"mappings\":{\"default\":{\"default\":\"Abbildung Bindestrich\"}}},{\"category\":\"Pd\",\"key\":\"2013\",\"mappings\":{\"default\":{\"default\":\"En Dash\"}}},{\"category\":\"Pd\",\"key\":\"2014\",\"mappings\":{\"default\":{\"default\":\"EM Dash\"}}},{\"category\":\"Pd\",\"key\":\"2015\",\"mappings\":{\"default\":{\"default\":\"Horizontale Linie\"}}},{\"category\":\"Po\",\"key\":\"2016\",\"mappings\":{\"default\":{\"default\":\"Doppelte vertikale Linie\"}}},{\"category\":\"Po\",\"key\":\"2017\",\"mappings\":{\"default\":{\"default\":\"Doppelter Unterstrich\"}}},{\"category\":\"Pi\",\"key\":\"2018\",\"mappings\":{\"default\":{\"default\":\"Linkes einfaches Anführungszeichen\"}}},{\"category\":\"Pf\",\"key\":\"2019\",\"mappings\":{\"default\":{\"default\":\"Rechtes einfaches Anführungszeichen\"}}},{\"category\":\"Ps\",\"key\":\"201A\",\"mappings\":{\"default\":{\"default\":\"Einzelnes rechtes Anführungszeichen\"}}},{\"category\":\"Pi\",\"key\":\"201B\",\"mappings\":{\"default\":{\"default\":\"Einzelnes linkes Anführungszeichen\"}}},{\"category\":\"Pi\",\"key\":\"201C\",\"mappings\":{\"default\":{\"default\":\"Linkes doppeltes Anführungszeichen\"}}},{\"category\":\"Pf\",\"key\":\"201D\",\"mappings\":{\"default\":{\"default\":\"Rechtes doppeltes Anführungszeichen\"}}},{\"category\":\"Ps\",\"key\":\"201E\",\"mappings\":{\"default\":{\"default\":\"Doppeltes rechtes Anführungszeichen\"}}},{\"category\":\"Pi\",\"key\":\"201F\",\"mappings\":{\"default\":{\"default\":\"Doppeltes linkes Anführungszeichen\"}}},{\"category\":\"Po\",\"key\":\"2020\",\"mappings\":{\"default\":{\"default\":\"Dolch\"}}},{\"category\":\"Po\",\"key\":\"2021\",\"mappings\":{\"default\":{\"default\":\"Doppelter Dolch\"}}},{\"category\":\"Po\",\"key\":\"2022\",\"mappings\":{\"default\":{\"default\":\"Kugel\"}}},{\"category\":\"Po\",\"key\":\"2023\",\"mappings\":{\"default\":{\"default\":\"Dreieckige Kugel\"}}},{\"category\":\"Po\",\"key\":\"2024\",\"mappings\":{\"default\":{\"default\":\"Einzelpunkt\"}}},{\"category\":\"Po\",\"key\":\"2025\",\"mappings\":{\"default\":{\"default\":\"zwei Punkte\"}}},{\"category\":\"Po\",\"key\":\"2026\",\"mappings\":{\"default\":{\"default\":\"horizontale Ellipsis\"}}},{\"category\":\"Po\",\"key\":\"2027\",\"mappings\":{\"default\":{\"default\":\"Trennungspunkt\"}}},{\"category\":\"Po\",\"key\":\"2030\",\"mappings\":{\"default\":{\"default\":\"promille\"}}},{\"category\":\"Po\",\"key\":\"2031\",\"mappings\":{\"default\":{\"default\":\"pro Zehntausend\"}}},{\"key\":\"2032\",\"mappings\":{\"default\":{\"default\":\"Strich\"}},\"category\":\"Po\"},{\"key\":\"2033\",\"mappings\":{\"default\":{\"default\":\"zwei Strich\"}},\"category\":\"Po\"},{\"key\":\"2034\",\"mappings\":{\"default\":{\"default\":\"drei Strich\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2035\",\"mappings\":{\"default\":{\"default\":\"strich invertiert\"}}},{\"category\":\"Po\",\"key\":\"2036\",\"mappings\":{\"default\":{\"default\":\"zwei Strich invertiert\"}}},{\"category\":\"Po\",\"key\":\"2037\",\"mappings\":{\"default\":{\"default\":\"drei Strich invertiert\"}}},{\"category\":\"Po\",\"key\":\"2038\",\"mappings\":{\"default\":{\"default\":\"Caret\"}}},{\"category\":\"Pi\",\"key\":\"2039\",\"mappings\":{\"default\":{\"default\":\"Einfacher nach links zeigender Winkel Anführungszeichen\"}}},{\"category\":\"Pf\",\"key\":\"203A\",\"mappings\":{\"default\":{\"default\":\"Einzelne Nach-rechts-Winkel-Anführungszeichen\"}}},{\"category\":\"Po\",\"key\":\"203B\",\"mappings\":{\"default\":{\"default\":\"Referenzmarke\"}}},{\"category\":\"Po\",\"key\":\"203C\",\"mappings\":{\"default\":{\"default\":\"Doppelausrufezeichen\"}}},{\"category\":\"Po\",\"key\":\"203D\",\"mappings\":{\"default\":{\"default\":\"Interrobang\"}}},{\"category\":\"Po\",\"key\":\"203E\",\"mappings\":{\"default\":{\"default\":\"Überschrift\"}}},{\"category\":\"Pc\",\"key\":\"203F\",\"mappings\":{\"default\":{\"default\":\"Undertie\"}}},{\"category\":\"Pc\",\"key\":\"2040\",\"mappings\":{\"default\":{\"default\":\"Zeichen Krawatte\"}}},{\"category\":\"Po\",\"key\":\"2041\",\"mappings\":{\"default\":{\"default\":\"Caret-Einfügungspunkt\"}}},{\"category\":\"Po\",\"key\":\"2042\",\"mappings\":{\"default\":{\"default\":\"Asterism\"}}},{\"category\":\"Po\",\"key\":\"2043\",\"mappings\":{\"default\":{\"default\":\"Bindestrich Kugel\"}}},{\"category\":\"Sm\",\"key\":\"2044\",\"mappings\":{\"default\":{\"default\":\"Fraktions-Schrägstrich\"}}},{\"category\":\"Po\",\"key\":\"2047\",\"mappings\":{\"default\":{\"default\":\"Doppel-Fragezeichen\"}}},{\"category\":\"Po\",\"key\":\"2048\",\"mappings\":{\"default\":{\"default\":\"Fragezeichen für Ausrufezeichen\"}}},{\"category\":\"Po\",\"key\":\"2049\",\"mappings\":{\"default\":{\"default\":\"Ausrufezeichen\"}}},{\"category\":\"Po\",\"key\":\"204B\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes Pilcrow-Zeichen\"}}},{\"category\":\"Po\",\"key\":\"204C\",\"mappings\":{\"default\":{\"default\":\"Schwarze Kugel nach links\"}}},{\"category\":\"Po\",\"key\":\"204D\",\"mappings\":{\"default\":{\"default\":\"Schwarze Kugel nach rechts\"}}},{\"category\":\"Po\",\"key\":\"204E\",\"mappings\":{\"default\":{\"default\":\"Niedriges Sternchen\"}}},{\"category\":\"Po\",\"key\":\"204F\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes Semikolon\"}}},{\"category\":\"Po\",\"key\":\"2050\",\"mappings\":{\"default\":{\"default\":\"Nahansicht\"}}},{\"category\":\"Po\",\"key\":\"2051\",\"mappings\":{\"default\":{\"default\":\"Zwei Sternchen vertikal ausgerichtet\"}}},{\"category\":\"Sm\",\"key\":\"2052\",\"mappings\":{\"default\":{\"default\":\"Kommerzielles Minuszeichen\"}}},{\"category\":\"Po\",\"key\":\"2053\",\"mappings\":{\"default\":{\"default\":\"Swing Dash\"}}},{\"category\":\"Pc\",\"key\":\"2054\",\"mappings\":{\"default\":{\"default\":\"Inverted Undertie\"}}},{\"category\":\"Po\",\"key\":\"2055\",\"mappings\":{\"default\":{\"default\":\"Blume Interpunktionszeichen\"}}},{\"category\":\"Po\",\"key\":\"2056\",\"mappings\":{\"default\":{\"default\":\"Drei Punkt-Interpunktion\"}}},{\"key\":\"2057\",\"mappings\":{\"default\":{\"default\":\"quadruple prime\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2058\",\"mappings\":{\"default\":{\"default\":\"Vierpunkt-Interpunktion\"}}},{\"category\":\"Po\",\"key\":\"2059\",\"mappings\":{\"default\":{\"default\":\"Fünf Punkt-Interpunktion\"}}},{\"category\":\"Po\",\"key\":\"205A\",\"mappings\":{\"default\":{\"default\":\"Zwei Punkt-Interpunktion\"}}},{\"category\":\"Po\",\"key\":\"205B\",\"mappings\":{\"default\":{\"default\":\"Vier-Punkt-Markierung\"}}},{\"category\":\"Po\",\"key\":\"205C\",\"mappings\":{\"default\":{\"default\":\"Gepunktetes Kreuz\"}}},{\"category\":\"Po\",\"key\":\"205D\",\"mappings\":{\"default\":{\"default\":\"Tricolon\"}}},{\"category\":\"Po\",\"key\":\"205E\",\"mappings\":{\"default\":{\"default\":\"Vertikale vier Punkte\"}}},{\"category\":\"Sm\",\"key\":\"207A\",\"mappings\":{\"default\":{\"default\":\"Hochgestelltes Pluszeichen\"}}},{\"category\":\"Sm\",\"key\":\"207B\",\"mappings\":{\"default\":{\"default\":\"Hochgestelltes Minus\"}}},{\"category\":\"Sm\",\"key\":\"207C\",\"mappings\":{\"default\":{\"default\":\"Hochgestelltes Gleichheitszeichen\"}}},{\"category\":\"Ps\",\"key\":\"207D\",\"mappings\":{\"default\":{\"default\":\"Hochgestellte linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"207E\",\"mappings\":{\"default\":{\"default\":\"Hochgestellte rechte Klammer\"}}},{\"category\":\"Sm\",\"key\":\"208A\",\"mappings\":{\"default\":{\"default\":\"Index Pluszeichen\"}}},{\"category\":\"Sm\",\"key\":\"208B\",\"mappings\":{\"default\":{\"default\":\"Tiefgestelltes Minus\"}}},{\"category\":\"Sm\",\"key\":\"208C\",\"mappings\":{\"default\":{\"default\":\"Tiefgestelltes Gleichheitszeichen\"}}},{\"category\":\"Ps\",\"key\":\"208D\",\"mappings\":{\"default\":{\"default\":\"Tiefgestellte linke Klammer\"}}},{\"category\":\"Pe\",\"key\":\"208E\",\"mappings\":{\"default\":{\"default\":\"Tiefgestellte rechte Klammer\"}}},{\"category\":\"So\",\"key\":\"214A\",\"mappings\":{\"default\":{\"default\":\"Grundstücksgrenze\"}}},{\"category\":\"Sm\",\"key\":\"214B\",\"mappings\":{\"default\":{\"default\":\"Ampersand gedreht\"}}},{\"category\":\"So\",\"key\":\"214C\",\"mappings\":{\"default\":{\"default\":\"Pro Zeichen\"}}},{\"category\":\"So\",\"key\":\"214D\",\"mappings\":{\"default\":{\"default\":\"Aktieselskab\"}}},{\"category\":\"Ll\",\"key\":\"214E\",\"mappings\":{\"default\":{\"default\":\"Gedreht klein F\"}}},{\"key\":\"2200\",\"mappings\":{\"default\":{\"default\":\"für alle\"}},\"category\":\"Sm\"},{\"key\":\"2201\",\"mappings\":{\"default\":{\"default\":\"Komplement\"}},\"category\":\"Sm\"},{\"key\":\"2203\",\"mappings\":{\"default\":{\"default\":\"es gibt\"}},\"category\":\"Sm\"},{\"key\":\"2204\",\"mappings\":{\"default\":{\"default\":\"es gibt nicht\"}},\"category\":\"Sm\"},{\"key\":\"2205\",\"mappings\":{\"default\":{\"default\":\"leere Menge\"}},\"category\":\"Sm\"},{\"key\":\"2206\",\"mappings\":{\"default\":{\"default\":\"Differenz\"}},\"category\":\"Sm\"},{\"key\":\"2208\",\"mappings\":{\"default\":{\"default\":\"Element von\"}},\"category\":\"Sm\"},{\"key\":\"2209\",\"mappings\":{\"default\":{\"default\":\"nicht Element von\"}},\"category\":\"Sm\"},{\"key\":\"220A\",\"mappings\":{\"default\":{\"default\":\"Element von\"}},\"category\":\"Sm\"},{\"key\":\"220B\",\"mappings\":{\"default\":{\"default\":\"hat als Element\"}},\"category\":\"Sm\"},{\"key\":\"220C\",\"mappings\":{\"default\":{\"default\":\"hat nicht als Element\"}},\"category\":\"Sm\"},{\"key\":\"220D\",\"mappings\":{\"default\":{\"default\":\"hat als Element\"}},\"category\":\"Sm\"},{\"key\":\"220E\",\"mappings\":{\"default\":{\"default\":\"Ende Beweis\"}},\"category\":\"Sm\"},{\"key\":\"220F\",\"mappings\":{\"default\":{\"default\":\"Produkt\"}},\"category\":\"Sm\"},{\"key\":\"2210\",\"mappings\":{\"default\":{\"default\":\"Koprodukt\"}},\"category\":\"Sm\"},{\"key\":\"2211\",\"mappings\":{\"default\":{\"default\":\"Summe\"}},\"category\":\"Sm\"},{\"key\":\"2212\",\"mappings\":{\"default\":{\"default\":\"minus\"}},\"category\":\"Sm\"},{\"key\":\"2213\",\"mappings\":{\"default\":{\"default\":\"minus plus\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2214\",\"mappings\":{\"default\":{\"default\":\"Plus mit Punkt\"}}},{\"key\":\"2215\",\"mappings\":{\"default\":{\"default\":\"Division\"}},\"category\":\"Sm\"},{\"key\":\"2216\",\"mappings\":{\"default\":{\"default\":\"Mengendifferenz\"}},\"category\":\"Sm\"},{\"key\":\"2217\",\"mappings\":{\"default\":{\"default\":\"Sternoperator\"}},\"category\":\"Sm\"},{\"key\":\"2218\",\"mappings\":{\"default\":{\"default\":\"verknüpft mit\"}},\"category\":\"Sm\"},{\"key\":\"2219\",\"mappings\":{\"default\":{\"default\":\"Kreisoperator\"}},\"category\":\"Sm\"},{\"key\":\"221A\",\"mappings\":{\"default\":{\"default\":\"Quadratwurzelzeichen\"}},\"category\":\"Sm\"},{\"key\":\"221B\",\"mappings\":{\"default\":{\"default\":\"Kubikwurzelzeichen\"}},\"category\":\"Sm\"},{\"key\":\"221C\",\"mappings\":{\"default\":{\"default\":\"vierte Wurzel\"}},\"category\":\"Sm\"},{\"key\":\"221D\",\"mappings\":{\"default\":{\"default\":\"proportional zu\"}},\"category\":\"Sm\"},{\"key\":\"221E\",\"mappings\":{\"default\":{\"default\":\"unendlich\"}},\"category\":\"Sm\"},{\"key\":\"221F\",\"mappings\":{\"default\":{\"default\":\"rechter Winkel\"}},\"category\":\"Sm\"},{\"key\":\"2220\",\"mappings\":{\"default\":{\"default\":\"Winkel\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2221\",\"mappings\":{\"default\":{\"default\":\"gerichteter Winkel\"}}},{\"category\":\"Sm\",\"key\":\"2222\",\"mappings\":{\"default\":{\"default\":\"Raumwinkel\"}}},{\"key\":\"2223\",\"mappings\":{\"default\":{\"default\":\"teilt\"}},\"category\":\"Sm\"},{\"key\":\"2224\",\"mappings\":{\"default\":{\"default\":\"teilt nicht\"}},\"category\":\"Sm\"},{\"key\":\"2225\",\"mappings\":{\"default\":{\"default\":\"parallel zu\"}},\"category\":\"Sm\"},{\"key\":\"2226\",\"mappings\":{\"default\":{\"default\":\"nicht parallel zu\"}},\"category\":\"Sm\"},{\"key\":\"2227\",\"mappings\":{\"default\":{\"default\":\"und\"}},\"category\":\"Sm\"},{\"key\":\"2228\",\"mappings\":{\"default\":{\"default\":\"oder\"}},\"category\":\"Sm\"},{\"key\":\"2229\",\"mappings\":{\"default\":{\"default\":\"Durchschnitt\"}},\"category\":\"Sm\"},{\"key\":\"222A\",\"mappings\":{\"default\":{\"default\":\"Vereinigung\"}},\"category\":\"Sm\"},{\"key\":\"222B\",\"mappings\":{\"default\":{\"default\":\"Integral\"}},\"category\":\"Sm\"},{\"key\":\"222C\",\"mappings\":{\"default\":{\"default\":\"Doppelintegral\"}},\"category\":\"Sm\"},{\"key\":\"222D\",\"mappings\":{\"default\":{\"default\":\"Dreifachintegral\"}},\"category\":\"Sm\"},{\"key\":\"222E\",\"mappings\":{\"default\":{\"default\":\"Randintegral\"}},\"category\":\"Sm\"},{\"key\":\"222F\",\"mappings\":{\"default\":{\"default\":\"Oberflächenintegral\"}},\"category\":\"Sm\"},{\"key\":\"2230\",\"mappings\":{\"default\":{\"default\":\"Volumenintegral\"}},\"category\":\"Sm\"},{\"key\":\"2231\",\"mappings\":{\"default\":{\"default\":\"Integral im Uhrzeigersinn\"}},\"category\":\"Sm\"},{\"key\":\"2232\",\"mappings\":{\"default\":{\"default\":\"Kurvenintegral im Uhrzeigersinn\"}},\"category\":\"Sm\"},{\"key\":\"2233\",\"mappings\":{\"default\":{\"default\":\"Kurvenintegral im Gegenuhrzeigersinn\"}},\"category\":\"Sm\"},{\"key\":\"2234\",\"mappings\":{\"default\":{\"default\":\"folglich\"}},\"category\":\"Sm\"},{\"key\":\"2235\",\"mappings\":{\"default\":{\"default\":\"weil\"}},\"category\":\"Sm\"},{\"key\":\"2236\",\"mappings\":{\"default\":{\"default\":\"Verhältnis\"}},\"category\":\"Sm\"},{\"key\":\"2237\",\"mappings\":{\"default\":{\"default\":\"Proportion\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2238\",\"mappings\":{\"default\":{\"default\":\"Minus mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2239\",\"mappings\":{\"default\":{\"default\":\"Überschuss\"}}},{\"key\":\"223A\",\"mappings\":{\"default\":{\"default\":\"geometrische Proportion\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"223B\",\"mappings\":{\"default\":{\"default\":\"homothetisch\"}}},{\"category\":\"Sm\",\"key\":\"223C\",\"mappings\":{\"default\":{\"default\":\"Tildeoperator\"}}},{\"category\":\"Sm\",\"key\":\"223D\",\"mappings\":{\"default\":{\"default\":\"Umgekehrte Tilde\"}}},{\"category\":\"Sm\",\"key\":\"223E\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes stummes S\"}}},{\"category\":\"Sm\",\"key\":\"223F\",\"mappings\":{\"default\":{\"default\":\"Sinuswelle\"}}},{\"category\":\"Sm\",\"key\":\"2240\",\"mappings\":{\"default\":{\"default\":\"Kranzprodukt\"}}},{\"category\":\"Sm\",\"key\":\"2241\",\"mappings\":{\"default\":{\"default\":\"durchgestrichene Tilde\"}}},{\"category\":\"Sm\",\"key\":\"2242\",\"mappings\":{\"default\":{\"default\":\"Minus über Tilde\"}}},{\"key\":\"2243\",\"mappings\":{\"default\":{\"default\":\"asymptotisch gleich\"}},\"category\":\"Sm\"},{\"key\":\"2244\",\"mappings\":{\"default\":{\"default\":\"nicht asymptotisch gleich\"}},\"category\":\"Sm\"},{\"key\":\"2245\",\"mappings\":{\"default\":{\"default\":\"ungefähr gleich\"}},\"category\":\"Sm\"},{\"key\":\"2246\",\"mappings\":{\"default\":{\"default\":\"ungefähr, aber nicht ganz gleich\"}},\"category\":\"Sm\"},{\"key\":\"2247\",\"mappings\":{\"default\":{\"default\":\"weder ungefähr noch ganz gleich\"}},\"category\":\"Sm\"},{\"key\":\"2248\",\"mappings\":{\"default\":{\"default\":\"beinahe gleich\"}},\"category\":\"Sm\"},{\"key\":\"2249\",\"mappings\":{\"default\":{\"default\":\"nicht beinahe gleich\"}},\"category\":\"Sm\"},{\"key\":\"224A\",\"mappings\":{\"default\":{\"default\":\"beinahe gleich oder gleich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"224B\",\"mappings\":{\"default\":{\"default\":\"dreifache Tilde\"}}},{\"category\":\"Sm\",\"key\":\"224C\",\"mappings\":{\"default\":{\"default\":\"alles gleich\"}}},{\"key\":\"224D\",\"mappings\":{\"default\":{\"default\":\"äquivalent zu\"}},\"category\":\"Sm\"},{\"key\":\"224E\",\"mappings\":{\"default\":{\"default\":\"geometrisch äquivalent zu\"}},\"category\":\"Sm\"},{\"key\":\"224F\",\"mappings\":{\"default\":{\"default\":\"Differenz zwischen\"}},\"category\":\"Sm\"},{\"key\":\"2250\",\"mappings\":{\"default\":{\"default\":\"nähert sich der Grenze\"}},\"category\":\"Sm\"},{\"key\":\"2251\",\"mappings\":{\"default\":{\"default\":\"geometrisch gleich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2252\",\"mappings\":{\"default\":{\"default\":\"Ungefähr gleich oder das Bild von\"}}},{\"category\":\"Sm\",\"key\":\"2253\",\"mappings\":{\"default\":{\"default\":\"Bild von oder ungefähr gleich\"}}},{\"key\":\"2254\",\"mappings\":{\"default\":{\"default\":\"definiert als\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2255\",\"mappings\":{\"default\":{\"default\":\"definiert als von rechts\"}}},{\"category\":\"Sm\",\"key\":\"2256\",\"mappings\":{\"default\":{\"default\":\"ungefähr gleich\"}}},{\"category\":\"Sm\",\"key\":\"2257\",\"mappings\":{\"default\":{\"default\":\"ungefähr gleich\"}}},{\"key\":\"2258\",\"mappings\":{\"default\":{\"default\":\"entspricht\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2259\",\"mappings\":{\"default\":{\"default\":\"entspricht\"}}},{\"category\":\"Sm\",\"key\":\"225A\",\"mappings\":{\"default\":{\"default\":\"gleichwinklig zu\"}}},{\"category\":\"Sm\",\"key\":\"225B\",\"mappings\":{\"default\":{\"default\":\"gleich mit Stern\"}}},{\"category\":\"Sm\",\"key\":\"225C\",\"mappings\":{\"default\":{\"default\":\"gleich mit Delta\"}}},{\"key\":\"225D\",\"mappings\":{\"default\":{\"default\":\"definitionsgemäß gleich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"225E\",\"mappings\":{\"default\":{\"default\":\"gemessen mit\"}}},{\"category\":\"Sm\",\"key\":\"225F\",\"mappings\":{\"default\":{\"default\":\"vielleicht gleich\"}}},{\"key\":\"2260\",\"mappings\":{\"default\":{\"default\":\"ungleich\"}},\"category\":\"Sm\"},{\"key\":\"2261\",\"mappings\":{\"default\":{\"default\":\"kongruent mit\"}},\"category\":\"Sm\"},{\"key\":\"2262\",\"mappings\":{\"default\":{\"default\":\"nicht kongruent mit\"}},\"category\":\"Sm\"},{\"key\":\"2263\",\"mappings\":{\"default\":{\"default\":\"genau äquivalent mit\"}},\"category\":\"Sm\"},{\"key\":\"2264\",\"mappings\":{\"default\":{\"default\":\"kleiner oder gleich\"}},\"category\":\"Sm\"},{\"key\":\"2265\",\"mappings\":{\"default\":{\"default\":\"größer oder gleich\"}},\"category\":\"Sm\"},{\"key\":\"2266\",\"mappings\":{\"default\":{\"default\":\"kleiner als über gleich\"}},\"category\":\"Sm\"},{\"key\":\"2267\",\"mappings\":{\"default\":{\"default\":\"größer als über gleich\"}},\"category\":\"Sm\"},{\"key\":\"2268\",\"mappings\":{\"default\":{\"default\":\"kleiner als, aber nicht gleich\"}},\"category\":\"Sm\"},{\"key\":\"2269\",\"mappings\":{\"default\":{\"default\":\"größer als, aber nicht gleich\"}},\"category\":\"Sm\"},{\"key\":\"226A\",\"mappings\":{\"default\":{\"default\":\"viel kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"226B\",\"mappings\":{\"default\":{\"default\":\"viel größer als\"}},\"category\":\"Sm\"},{\"key\":\"226C\",\"mappings\":{\"default\":{\"default\":\"zwischen\"}},\"category\":\"Sm\"},{\"key\":\"226D\",\"mappings\":{\"default\":{\"default\":\"nicht äquivalent mit\"}},\"category\":\"Sm\"},{\"key\":\"226E\",\"mappings\":{\"default\":{\"default\":\"nicht kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"226F\",\"mappings\":{\"default\":{\"default\":\"nicht größer als\"}},\"category\":\"Sm\"},{\"key\":\"2270\",\"mappings\":{\"default\":{\"default\":\"weder kleiner als noch gleich\"}},\"category\":\"Sm\"},{\"key\":\"2271\",\"mappings\":{\"default\":{\"default\":\"weder größer als noch gleich\"}},\"category\":\"Sm\"},{\"key\":\"2272\",\"mappings\":{\"default\":{\"default\":\"kleiner als oder äquivalent\"}},\"category\":\"Sm\"},{\"key\":\"2273\",\"mappings\":{\"default\":{\"default\":\"größer als oder äquivalent\"}},\"category\":\"Sm\"},{\"key\":\"2274\",\"mappings\":{\"default\":{\"default\":\"weder kleiner als noch äquivalent\"}},\"category\":\"Sm\"},{\"key\":\"2275\",\"mappings\":{\"default\":{\"default\":\"weder größer als noch äquivalent\"}},\"category\":\"Sm\"},{\"key\":\"2276\",\"mappings\":{\"default\":{\"default\":\"kleiner oder größer als\"}},\"category\":\"Sm\"},{\"key\":\"2277\",\"mappings\":{\"default\":{\"default\":\"größer oder kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"2278\",\"mappings\":{\"default\":{\"default\":\"weder kleiner noch größer als\"}},\"category\":\"Sm\"},{\"key\":\"2279\",\"mappings\":{\"default\":{\"default\":\"weder größer noch kleiner als\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"227A\",\"mappings\":{\"default\":{\"default\":\"vorangehend\"}}},{\"category\":\"Sm\",\"key\":\"227B\",\"mappings\":{\"default\":{\"default\":\"nachfolgend\"}}},{\"category\":\"Sm\",\"key\":\"227C\",\"mappings\":{\"default\":{\"default\":\"vorangehend oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"227D\",\"mappings\":{\"default\":{\"default\":\"nachfolgend oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"227E\",\"mappings\":{\"default\":{\"default\":\"vorangehend oder äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"227F\",\"mappings\":{\"default\":{\"default\":\"nachfolgend oder äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"2280\",\"mappings\":{\"default\":{\"default\":\"nicht vorangehend\"}}},{\"category\":\"Sm\",\"key\":\"2281\",\"mappings\":{\"default\":{\"default\":\"nicht nachfolgend\"}}},{\"category\":\"Sm\",\"key\":\"2282\",\"mappings\":{\"default\":{\"default\":\"echte Teilmenge von\"}}},{\"category\":\"Sm\",\"key\":\"2283\",\"mappings\":{\"default\":{\"default\":\"echte Obermenge von\"}}},{\"category\":\"Sm\",\"key\":\"2284\",\"mappings\":{\"default\":{\"default\":\"keine echte Teilmenge von\"}}},{\"category\":\"Sm\",\"key\":\"2285\",\"mappings\":{\"default\":{\"default\":\"kein echte Obermenge von\"}}},{\"category\":\"Sm\",\"key\":\"2286\",\"mappings\":{\"default\":{\"default\":\"Teilmenge oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2287\",\"mappings\":{\"default\":{\"default\":\"Obermenge oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2288\",\"mappings\":{\"default\":{\"default\":\"weder Teilmenge noch gleich\"}}},{\"category\":\"Sm\",\"key\":\"2289\",\"mappings\":{\"default\":{\"default\":\"weder Obermenge noch gleich\"}}},{\"category\":\"Sm\",\"key\":\"228A\",\"mappings\":{\"default\":{\"default\":\"Teilmenge aber nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"228B\",\"mappings\":{\"default\":{\"default\":\"Obermenge aber nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"228C\",\"mappings\":{\"default\":{\"default\":\"Multimenge\"}}},{\"category\":\"Sm\",\"key\":\"228D\",\"mappings\":{\"default\":{\"default\":\"Multimengenmultiplikation\"}}},{\"category\":\"Sm\",\"key\":\"228E\",\"mappings\":{\"default\":{\"default\":\"Multimengenvereinigung\"}}},{\"category\":\"Sm\",\"key\":\"228F\",\"mappings\":{\"default\":{\"default\":\"quadratisches Bild von\"}}},{\"category\":\"Sm\",\"key\":\"2290\",\"mappings\":{\"default\":{\"default\":\"quadratisches Original von\"}}},{\"category\":\"Sm\",\"key\":\"2291\",\"mappings\":{\"default\":{\"default\":\"quadratisches Bild oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2292\",\"mappings\":{\"default\":{\"default\":\"quadratisches Original oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2293\",\"mappings\":{\"default\":{\"default\":\"quadratische Schnittmenge\"}}},{\"category\":\"Sm\",\"key\":\"2294\",\"mappings\":{\"default\":{\"default\":\"quadratische VereinigungTasse\"}}},{\"category\":\"Sm\",\"key\":\"2295\",\"mappings\":{\"default\":{\"default\":\"eingekreistes Plus\"}}},{\"category\":\"Sm\",\"key\":\"2296\",\"mappings\":{\"default\":{\"default\":\"eingekreistes Minus\"}}},{\"category\":\"Sm\",\"key\":\"2297\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Multiplikation\"}}},{\"category\":\"Sm\",\"key\":\"2298\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Division\"}}},{\"category\":\"Sm\",\"key\":\"2299\",\"mappings\":{\"default\":{\"default\":\"eingekreister Punktoperator\"}}},{\"category\":\"Sm\",\"key\":\"229A\",\"mappings\":{\"default\":{\"default\":\"eingekreister Ringoperator\"}}},{\"category\":\"Sm\",\"key\":\"229B\",\"mappings\":{\"default\":{\"default\":\"eingekreister Sternoperator\"}}},{\"category\":\"Sm\",\"key\":\"229C\",\"mappings\":{\"default\":{\"default\":\"eingekreistes Gleich\"}}},{\"category\":\"Sm\",\"key\":\"229D\",\"mappings\":{\"default\":{\"default\":\"eingekreister Gedankenstrich\"}}},{\"category\":\"Sm\",\"key\":\"229E\",\"mappings\":{\"default\":{\"default\":\"eingerahmtes Plus\"}}},{\"category\":\"Sm\",\"key\":\"229F\",\"mappings\":{\"default\":{\"default\":\"eingerahmtes Minus\"}}},{\"category\":\"Sm\",\"key\":\"22A0\",\"mappings\":{\"default\":{\"default\":\"eingerahmte Multiplikation\"}}},{\"category\":\"Sm\",\"key\":\"22A1\",\"mappings\":{\"default\":{\"default\":\"eingerahmter Punktoperator\"}}},{\"category\":\"Sm\",\"key\":\"22A2\",\"mappings\":{\"default\":{\"default\":\"ergibt\"}}},{\"category\":\"Sm\",\"key\":\"22A3\",\"mappings\":{\"default\":{\"default\":\"ergibt nicht\"}}},{\"category\":\"Sm\",\"key\":\"22A4\",\"mappings\":{\"default\":{\"default\":\"senkrecht von\"}}},{\"category\":\"Sm\",\"key\":\"22A5\",\"mappings\":{\"default\":{\"default\":\"senkrecht auf\"}}},{\"category\":\"Sm\",\"key\":\"22A6\",\"mappings\":{\"default\":{\"default\":\"Behauptung\"}}},{\"category\":\"Sm\",\"key\":\"22A7\",\"mappings\":{\"default\":{\"default\":\"Model\"}}},{\"category\":\"Sm\",\"key\":\"22A8\",\"mappings\":{\"default\":{\"default\":\"wahr\"}}},{\"category\":\"Sm\",\"key\":\"22A9\",\"mappings\":{\"default\":{\"default\":\"erzwingen\"}}},{\"category\":\"Sm\",\"key\":\"22AA\",\"mappings\":{\"default\":{\"default\":\"dreifache vertikale Leiste mit rechtem Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"22AB\",\"mappings\":{\"default\":{\"default\":\"doppelte vertikale Leiste mit doppeltem rechtem Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"22AC\",\"mappings\":{\"default\":{\"default\":\"beweist nicht\"}}},{\"category\":\"Sm\",\"key\":\"22AD\",\"mappings\":{\"default\":{\"default\":\"nicht wahr\"}}},{\"category\":\"Sm\",\"key\":\"22AE\",\"mappings\":{\"default\":{\"default\":\"nicht erzwingen\"}}},{\"category\":\"Sm\",\"key\":\"22AF\",\"mappings\":{\"default\":{\"default\":\"negierte doppelte vertikale Leiste mit doppeltem rechten Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"22B0\",\"mappings\":{\"default\":{\"default\":\"vorangehend in Relation\"}}},{\"category\":\"Sm\",\"key\":\"22B1\",\"mappings\":{\"default\":{\"default\":\"nachfolgend in Relation\"}}},{\"category\":\"Sm\",\"key\":\"22B2\",\"mappings\":{\"default\":{\"default\":\"normale Untergruppe\"}}},{\"category\":\"Sm\",\"key\":\"22B3\",\"mappings\":{\"default\":{\"default\":\"enthält normale Untergruppe\"}}},{\"category\":\"Sm\",\"key\":\"22B4\",\"mappings\":{\"default\":{\"default\":\"normale Untergruppe von oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22B5\",\"mappings\":{\"default\":{\"default\":\"enthält normale Untergruppe oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22B6\",\"mappings\":{\"default\":{\"default\":\"Original von\"}}},{\"category\":\"Sm\",\"key\":\"22B7\",\"mappings\":{\"default\":{\"default\":\"Bild von\"}}},{\"category\":\"Sm\",\"key\":\"22B8\",\"mappings\":{\"default\":{\"default\":\"Mehrfachzuordnung\"}}},{\"category\":\"Sm\",\"key\":\"22B9\",\"mappings\":{\"default\":{\"default\":\"hermitesch konjugierte Matrix\"}}},{\"category\":\"Sm\",\"key\":\"22BA\",\"mappings\":{\"default\":{\"default\":\"einschalten\"}}},{\"category\":\"Sm\",\"key\":\"22BB\",\"mappings\":{\"default\":{\"default\":\"Ausschließendes Oder\"}}},{\"category\":\"Sm\",\"key\":\"22BC\",\"mappings\":{\"default\":{\"default\":\"Nand verknüpft mit\"}}},{\"category\":\"Sm\",\"key\":\"22BD\",\"mappings\":{\"default\":{\"default\":\"Nor verknüpft mit\"}}},{\"category\":\"Sm\",\"key\":\"22BF\",\"mappings\":{\"default\":{\"default\":\"rechtwinkliges Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"22C0\",\"mappings\":{\"default\":{\"default\":\"N-stufiges logisches Und\"}}},{\"category\":\"Sm\",\"key\":\"22C1\",\"mappings\":{\"default\":{\"default\":\"N-stufiges logisches Oder\"}}},{\"category\":\"Sm\",\"key\":\"22C2\",\"mappings\":{\"default\":{\"default\":\"N-stufiger Durchschnitt\"}}},{\"category\":\"Sm\",\"key\":\"22C3\",\"mappings\":{\"default\":{\"default\":\"N-stufige Vereinigung\"}}},{\"category\":\"Sm\",\"key\":\"22C4\",\"mappings\":{\"default\":{\"default\":\"Rautenoperator\"}}},{\"category\":\"Sm\",\"key\":\"22C5\",\"mappings\":{\"default\":{\"default\":\"mal\",\"alternative\":\"Multiplikationspunkt\"}}},{\"category\":\"Sm\",\"key\":\"22C6\",\"mappings\":{\"default\":{\"default\":\"Sternoperator\"}}},{\"category\":\"Sm\",\"key\":\"22C7\",\"mappings\":{\"default\":{\"default\":\"Divisionsanzahl\"}}},{\"category\":\"Sm\",\"key\":\"22C8\",\"mappings\":{\"default\":{\"default\":\"Schleife\"}}},{\"category\":\"Sm\",\"key\":\"22C9\",\"mappings\":{\"default\":{\"default\":\"linkes halbdirektes Produkt\"}}},{\"category\":\"Sm\",\"key\":\"22CA\",\"mappings\":{\"default\":{\"default\":\"rechtes halbdirektes Produkt\"}}},{\"category\":\"Sm\",\"key\":\"22CB\",\"mappings\":{\"default\":{\"default\":\"linkes halbdirektes Produkt\"}}},{\"category\":\"Sm\",\"key\":\"22CC\",\"mappings\":{\"default\":{\"default\":\"rechtes halbdirektes Produkt\"}}},{\"category\":\"Sm\",\"key\":\"22CD\",\"mappings\":{\"default\":{\"default\":\"umgekehrte Tilde gleich\"}}},{\"category\":\"Sm\",\"key\":\"22CE\",\"mappings\":{\"default\":{\"default\":\"geschweiftes logisches Oder\"}}},{\"category\":\"Sm\",\"key\":\"22CF\",\"mappings\":{\"default\":{\"default\":\"geschweiftes logisches Und\"}}},{\"category\":\"Sm\",\"key\":\"22D0\",\"mappings\":{\"default\":{\"default\":\"doppelte Teilmenge\"}}},{\"category\":\"Sm\",\"key\":\"22D1\",\"mappings\":{\"default\":{\"default\":\"doppelte Obermenge\"}}},{\"category\":\"Sm\",\"key\":\"22D2\",\"mappings\":{\"default\":{\"default\":\"doppelter Durchschnitt\"}}},{\"category\":\"Sm\",\"key\":\"22D3\",\"mappings\":{\"default\":{\"default\":\"doppelte Vereinigung\"}}},{\"category\":\"Sm\",\"key\":\"22D4\",\"mappings\":{\"default\":{\"default\":\"echter Durchschnitt\"}}},{\"category\":\"Sm\",\"key\":\"22D5\",\"mappings\":{\"default\":{\"default\":\"gleich und parallel\"}}},{\"category\":\"Sm\",\"key\":\"22D6\",\"mappings\":{\"default\":{\"default\":\"kleiner als mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"22D7\",\"mappings\":{\"default\":{\"default\":\"größer als mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"22D8\",\"mappings\":{\"default\":{\"default\":\"sehr viel kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"22D9\",\"mappings\":{\"default\":{\"default\":\"sehr viel größer als\"}}},{\"category\":\"Sm\",\"key\":\"22DA\",\"mappings\":{\"default\":{\"default\":\"kleiner als, gleich oder größer als\"}}},{\"category\":\"Sm\",\"key\":\"22DB\",\"mappings\":{\"default\":{\"default\":\"größer als, gleich oder kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"22DC\",\"mappings\":{\"default\":{\"default\":\"gleich oder kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"22DD\",\"mappings\":{\"default\":{\"default\":\"gleich oder größer als\"}}},{\"category\":\"Sm\",\"key\":\"22DE\",\"mappings\":{\"default\":{\"default\":\"gleich oder vorangehend\"}}},{\"category\":\"Sm\",\"key\":\"22DF\",\"mappings\":{\"default\":{\"default\":\"gleich oder nachfolgend\"}}},{\"category\":\"Sm\",\"key\":\"22E0\",\"mappings\":{\"default\":{\"default\":\"weder vorangehend oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E1\",\"mappings\":{\"default\":{\"default\":\"weder nachfolgend oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E2\",\"mappings\":{\"default\":{\"default\":\"kein quadratisches Bild oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E3\",\"mappings\":{\"default\":{\"default\":\"kein quadratisches Original oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E4\",\"mappings\":{\"default\":{\"default\":\"quadratisches Bild oder nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E5\",\"mappings\":{\"default\":{\"default\":\"quadratisches Original oder nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"22E6\",\"mappings\":{\"default\":{\"default\":\"kleiner als, aber nicht äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"22E7\",\"mappings\":{\"default\":{\"default\":\"größer als, aber nicht äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"22E8\",\"mappings\":{\"default\":{\"default\":\"vorangehend, aber nicht äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"22E9\",\"mappings\":{\"default\":{\"default\":\"nachfolgend, aber nicht äquivalent\"}}},{\"category\":\"Sm\",\"key\":\"22EA\",\"mappings\":{\"default\":{\"default\":\"nicht normale Untergruppe von\"}}},{\"category\":\"Sm\",\"key\":\"22EB\",\"mappings\":{\"default\":{\"default\":\"enthält keine normale Untergruppe\"}}},{\"category\":\"Sm\",\"key\":\"22EC\",\"mappings\":{\"default\":{\"default\":\"keine normale Untergruppe von oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22ED\",\"mappings\":{\"default\":{\"default\":\"enthält nicht als normale Untergruppe oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"22EE\",\"mappings\":{\"default\":{\"default\":\"Vertikale Ellipsis\"}}},{\"category\":\"Sm\",\"key\":\"22EF\",\"mappings\":{\"default\":{\"default\":\"Zentrierte horizontale Ellipse\"}}},{\"category\":\"Sm\",\"key\":\"22F0\",\"mappings\":{\"default\":{\"default\":\"Diagonale Ellipse unten links nach oben rechts\"}}},{\"category\":\"Sm\",\"key\":\"22F1\",\"mappings\":{\"default\":{\"default\":\"Diagonale Ellipse, oben links nach unten rechts\"}}},{\"category\":\"Sm\",\"key\":\"22F2\",\"mappings\":{\"default\":{\"default\":\"Element mit langem horizontalen Strich\"}}},{\"category\":\"Sm\",\"key\":\"22F3\",\"mappings\":{\"default\":{\"default\":\"Element mit vertikalem Strich am Ende des horizontalen Strichs\"}}},{\"category\":\"Sm\",\"key\":\"22F4\",\"mappings\":{\"default\":{\"default\":\"kleines Element mit vertikalem Strich am Ende des horizontalen Strichs\"}}},{\"category\":\"Sm\",\"key\":\"22F5\",\"mappings\":{\"default\":{\"default\":\"Element mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"22F6\",\"mappings\":{\"default\":{\"default\":\"Element mit Überstrich\"}}},{\"key\":\"22F7\",\"mappings\":{\"default\":{\"default\":\"kleines Element mit Überstrich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"22F8\",\"mappings\":{\"default\":{\"default\":\"Element mit Unterstrich\"}}},{\"category\":\"Sm\",\"key\":\"22F9\",\"mappings\":{\"default\":{\"default\":\"Element mit 2 horizontalen Strichen\"}}},{\"category\":\"Sm\",\"key\":\"22FA\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes Elementzeichen mit langem horizontalen Strich\"}}},{\"category\":\"Sm\",\"key\":\"22FB\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes Elementzeichen mit vertikalem Strich am Ende des horizontalen Strichs\"}}},{\"category\":\"Sm\",\"key\":\"22FC\",\"mappings\":{\"default\":{\"default\":\"kleines umgekehrtes Elementzeichen mit vertikalem Strich am Ende des horizontalen Strichs\"}}},{\"key\":\"22FD\",\"mappings\":{\"default\":{\"default\":\"umgekehrtes Elementzeichen mit Überstrich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"22FE\",\"mappings\":{\"default\":{\"default\":\"kleines umgekehrtes Elementzeichen mit Überstrich\"}}},{\"category\":\"Sm\",\"key\":\"22FF\",\"mappings\":{\"default\":{\"default\":\"Z-Notation-Bag-Mitgliedschaft\"}}},{\"category\":\"So\",\"key\":\"2300\",\"mappings\":{\"default\":{\"default\":\"Durchmesser-Zeichen\"}}},{\"category\":\"So\",\"key\":\"2302\",\"mappings\":{\"default\":{\"default\":\"Haus\"}}},{\"category\":\"So\",\"key\":\"2305\",\"mappings\":{\"default\":{\"default\":\"Projektiv\"}}},{\"category\":\"So\",\"key\":\"2306\",\"mappings\":{\"default\":{\"default\":\"Perspektive\"}}},{\"category\":\"So\",\"key\":\"2307\",\"mappings\":{\"default\":{\"default\":\"Schlangenlinie\"}}},{\"category\":\"So\",\"key\":\"2310\",\"mappings\":{\"default\":{\"default\":\"Umgekehrtes Nichtzeichen\"}}},{\"category\":\"So\",\"key\":\"2311\",\"mappings\":{\"default\":{\"default\":\"Quadratische Raute\"}}},{\"category\":\"So\",\"key\":\"2312\",\"mappings\":{\"default\":{\"default\":\"Bogen\"}}},{\"category\":\"So\",\"key\":\"2313\",\"mappings\":{\"default\":{\"default\":\"Segment\"}}},{\"category\":\"So\",\"key\":\"2314\",\"mappings\":{\"default\":{\"default\":\"Sektor\"}}},{\"category\":\"So\",\"key\":\"2795\",\"mappings\":{\"default\":{\"default\":\"Schweres Pluszeichen\"}}},{\"category\":\"So\",\"key\":\"2796\",\"mappings\":{\"default\":{\"default\":\"Schweres Minuszeichen\"}}},{\"category\":\"So\",\"key\":\"2797\",\"mappings\":{\"default\":{\"default\":\"Heavy Division Sign\"}}},{\"category\":\"So\",\"key\":\"27B0\",\"mappings\":{\"default\":{\"default\":\"Curly Loop\"}}},{\"category\":\"So\",\"key\":\"27BF\",\"mappings\":{\"default\":{\"default\":\"Doppelte geschweifte Schleife\"}}},{\"category\":\"Sm\",\"key\":\"27C1\",\"mappings\":{\"default\":{\"default\":\"Weißes Dreieck, das kleines weißes Dreieck enthält\"}}},{\"category\":\"Sm\",\"key\":\"27C2\",\"mappings\":{\"default\":{\"default\":\"Aufrecht\"}}},{\"category\":\"Sm\",\"key\":\"27C3\",\"mappings\":{\"default\":{\"default\":\"Subset öffnen\"}}},{\"category\":\"Sm\",\"key\":\"27C4\",\"mappings\":{\"default\":{\"default\":\"Superset öffnen\"}}},{\"category\":\"Sm\",\"key\":\"27C7\",\"mappings\":{\"default\":{\"default\":\"Oder mit innerem Punkt\"}}},{\"category\":\"Sm\",\"key\":\"27C8\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Schrägstrich Vorhergehender Teilsatz\"}}},{\"category\":\"Sm\",\"key\":\"27C9\",\"mappings\":{\"default\":{\"default\":\"Superset Vorgänger Schrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"27CA\",\"mappings\":{\"default\":{\"default\":\"Vertikaler Balken mit horizontalem Hub\"}}},{\"category\":\"Sm\",\"key\":\"27CB\",\"mappings\":{\"default\":{\"default\":\"Mathematische aufsteigende Diagonale\"}}},{\"category\":\"Sm\",\"key\":\"27CC\",\"mappings\":{\"default\":{\"default\":\"Lange Abteilung\"}}},{\"category\":\"Sm\",\"key\":\"27CD\",\"mappings\":{\"default\":{\"default\":\"Mathematische fallende Diagonale\"}}},{\"category\":\"Sm\",\"key\":\"27CE\",\"mappings\":{\"default\":{\"default\":\"quadratisches und\"}}},{\"category\":\"Sm\",\"key\":\"27CF\",\"mappings\":{\"default\":{\"default\":\"quadratisches oder\"}}},{\"category\":\"Sm\",\"key\":\"27D0\",\"mappings\":{\"default\":{\"default\":\"Weißer Diamant mit zentriertem Punkt\"}}},{\"category\":\"Sm\",\"key\":\"27D1\",\"mappings\":{\"default\":{\"default\":\"Und mit Dot\"}}},{\"category\":\"Sm\",\"key\":\"27D2\",\"mappings\":{\"default\":{\"default\":\"Element der Öffnung nach oben\"}}},{\"category\":\"Sm\",\"key\":\"27D3\",\"mappings\":{\"default\":{\"default\":\"Untere rechte Ecke mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"27D4\",\"mappings\":{\"default\":{\"default\":\"Obere linke Ecke mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"27D5\",\"mappings\":{\"default\":{\"default\":\"Linke äußere Verbindung\"}}},{\"category\":\"Sm\",\"key\":\"27D6\",\"mappings\":{\"default\":{\"default\":\"rechter äußerer Join\"}}},{\"category\":\"Sm\",\"key\":\"27D7\",\"mappings\":{\"default\":{\"default\":\"Volle äußere Verbindung\"}}},{\"category\":\"Sm\",\"key\":\"27D8\",\"mappings\":{\"default\":{\"default\":\"Große Up Tack\"}}},{\"category\":\"Sm\",\"key\":\"27D9\",\"mappings\":{\"default\":{\"default\":\"Großes Down Tack\"}}},{\"category\":\"Sm\",\"key\":\"27DA\",\"mappings\":{\"default\":{\"default\":\"Linkes und rechtes doppeltes Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"27DB\",\"mappings\":{\"default\":{\"default\":\"Linker und rechter Tack\"}}},{\"category\":\"Sm\",\"key\":\"27DC\",\"mappings\":{\"default\":{\"default\":\"Linke Multimap\"}}},{\"category\":\"Sm\",\"key\":\"27DD\",\"mappings\":{\"default\":{\"default\":\"Long Right Tack\"}}},{\"category\":\"Sm\",\"key\":\"27DE\",\"mappings\":{\"default\":{\"default\":\"Langer linker Tack\"}}},{\"category\":\"Sm\",\"key\":\"27DF\",\"mappings\":{\"default\":{\"default\":\"Up Tack mit Kreis oben\"}}},{\"category\":\"Sm\",\"key\":\"27E0\",\"mappings\":{\"default\":{\"default\":\"Raute durch horizontale Regel geteilt\"}}},{\"category\":\"Sm\",\"key\":\"27E1\",\"mappings\":{\"default\":{\"default\":\"Weißer konkavseitiger Diamant\"}}},{\"category\":\"Sm\",\"key\":\"27E2\",\"mappings\":{\"default\":{\"default\":\"Weißer konkavseitiger Diamant mit Zecke nach links\"}}},{\"category\":\"Sm\",\"key\":\"27E3\",\"mappings\":{\"default\":{\"default\":\"Weißer konkavseitiger Diamant mit Zecke nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"27E4\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit Zecke nach links\"}}},{\"category\":\"Sm\",\"key\":\"27E5\",\"mappings\":{\"default\":{\"default\":\"Weißes Quadrat mit Tick nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"292B\",\"mappings\":{\"default\":{\"default\":\"Steigende diagonale Kreuzung fallende Diagonale\"}}},{\"category\":\"Sm\",\"key\":\"292C\",\"mappings\":{\"default\":{\"default\":\"Fallende diagonale Kreuzung steigende Diagonale\"}}},{\"category\":\"Sm\",\"key\":\"2980\",\"mappings\":{\"default\":{\"default\":\"Dreifacher vertikaler Balkenbegrenzer\"}}},{\"category\":\"Sm\",\"key\":\"2981\",\"mappings\":{\"default\":{\"default\":\"Z Notationspunkt\"}}},{\"category\":\"Sm\",\"key\":\"2982\",\"mappings\":{\"default\":{\"default\":\"Z Notationstyp Doppelpunkt\"}}},{\"category\":\"Sm\",\"key\":\"2999\",\"mappings\":{\"default\":{\"default\":\"Gepunkteter Zaun\"}}},{\"category\":\"Sm\",\"key\":\"299A\",\"mappings\":{\"default\":{\"default\":\"Vertikale Zickzacklinie\"}}},{\"category\":\"Sm\",\"key\":\"29B0\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter leerer Satz\"}}},{\"category\":\"Sm\",\"key\":\"29B1\",\"mappings\":{\"default\":{\"default\":\"Leeres Set mit Overbar\"}}},{\"category\":\"Sm\",\"key\":\"29B2\",\"mappings\":{\"default\":{\"default\":\"Leeres Set mit kleinem Kreis oben\"}}},{\"category\":\"Sm\",\"key\":\"29B5\",\"mappings\":{\"default\":{\"default\":\"Kreis mit horizontaler Leiste\"}}},{\"key\":\"29B6\",\"mappings\":{\"default\":{\"default\":\"circled vertical bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29B7\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Parallele\"}}},{\"category\":\"Sm\",\"key\":\"29B8\",\"mappings\":{\"default\":{\"default\":\"eingekreister umgekehrter Schrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"29B9\",\"mappings\":{\"default\":{\"default\":\"eingekreistes Senkrecht\"}}},{\"category\":\"Sm\",\"key\":\"29BA\",\"mappings\":{\"default\":{\"default\":\"Kreis geteilt durch horizontale Leiste und obere Hälfte geteilt durch vertikale Leiste\"}}},{\"category\":\"Sm\",\"key\":\"29BB\",\"mappings\":{\"default\":{\"default\":\"Kreis mit überlagertem X\"}}},{\"category\":\"Sm\",\"key\":\"29BC\",\"mappings\":{\"default\":{\"default\":\"eingekreistes, gegen den Uhrzeigersinn gedrehtes Divisionszeichen\"}}},{\"category\":\"Sm\",\"key\":\"29BE\",\"mappings\":{\"default\":{\"default\":\"eingekreiste weiße Kugel\"}}},{\"category\":\"Sm\",\"key\":\"29BF\",\"mappings\":{\"default\":{\"default\":\"eingekreiste Kugel\"}}},{\"category\":\"Sm\",\"key\":\"29C0\",\"mappings\":{\"default\":{\"default\":\"eingekreist weniger als\"}}},{\"category\":\"Sm\",\"key\":\"29C1\",\"mappings\":{\"default\":{\"default\":\"eingekreist größer als\"}}},{\"category\":\"Sm\",\"key\":\"29C2\",\"mappings\":{\"default\":{\"default\":\"Kreis mit kleinem Kreis nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"29C3\",\"mappings\":{\"default\":{\"default\":\"Kreis mit zwei horizontalen Strichen nach rechts\"}}},{\"category\":\"Sm\",\"key\":\"29C4\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit Diagonale links unten nach rechts oben\"}}},{\"category\":\"Sm\",\"key\":\"29C5\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit Diagonale links oben nach rechts unten\"}}},{\"category\":\"Sm\",\"key\":\"29C6\",\"mappings\":{\"default\":{\"default\":\"Quadrat Sternchen\"}}},{\"category\":\"Sm\",\"key\":\"29C7\",\"mappings\":{\"default\":{\"default\":\"Quadratischer kleiner Kreis\"}}},{\"category\":\"Sm\",\"key\":\"29C8\",\"mappings\":{\"default\":{\"default\":\"Doppelquadrat\"}}},{\"category\":\"Sm\",\"key\":\"29C9\",\"mappings\":{\"default\":{\"default\":\"Zwei verbundene Quadrate\"}}},{\"category\":\"Sm\",\"key\":\"29CA\",\"mappings\":{\"default\":{\"default\":\"Dreieck mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"29CB\",\"mappings\":{\"default\":{\"default\":\"Dreieck mit Unterleiste\"}}},{\"category\":\"Sm\",\"key\":\"29CC\",\"mappings\":{\"default\":{\"default\":\"S im Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"29CD\",\"mappings\":{\"default\":{\"default\":\"Dreieck mit Serifen unten\"}}},{\"category\":\"Sm\",\"key\":\"29CE\",\"mappings\":{\"default\":{\"default\":\"Rechtes Dreieck über linkem Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"29CF\",\"mappings\":{\"default\":{\"default\":\"Linkes Dreieck neben vertikaler Leiste\"}}},{\"category\":\"Sm\",\"key\":\"29D0\",\"mappings\":{\"default\":{\"default\":\"Vertikaler Balken neben dem rechten Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"29D1\",\"mappings\":{\"default\":{\"default\":\"Fliege mit linker Hälfte schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29D2\",\"mappings\":{\"default\":{\"default\":\"Fliege mit rechter Hälfte schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29D3\",\"mappings\":{\"default\":{\"default\":\"Schwarze Fliege\"}}},{\"category\":\"Sm\",\"key\":\"29D4\",\"mappings\":{\"default\":{\"default\":\"Zeiten mit linker Hälfte schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29D5\",\"mappings\":{\"default\":{\"default\":\"Mal mit rechter Hälfte Schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29D6\",\"mappings\":{\"default\":{\"default\":\"Weiße Sanduhr\"}}},{\"category\":\"Sm\",\"key\":\"29D7\",\"mappings\":{\"default\":{\"default\":\"Schwarze Sanduhr\"}}},{\"category\":\"Sm\",\"key\":\"29DC\",\"mappings\":{\"default\":{\"default\":\"Unvollständige Unendlichkeit\"}}},{\"category\":\"Sm\",\"key\":\"29DD\",\"mappings\":{\"default\":{\"default\":\"Krawatte über Unendlichkeit\"}}},{\"category\":\"Sm\",\"key\":\"29DE\",\"mappings\":{\"default\":{\"default\":\"Unendlichkeit mit vertikaler Leiste negiert\"}}},{\"category\":\"Sm\",\"key\":\"29DF\",\"mappings\":{\"default\":{\"default\":\"Doppelter Multimap\"}}},{\"category\":\"Sm\",\"key\":\"29E0\",\"mappings\":{\"default\":{\"default\":\"Quadrat mit konturierter Kontur\"}}},{\"category\":\"Sm\",\"key\":\"29E1\",\"mappings\":{\"default\":{\"default\":\"Erhöht als\"}}},{\"category\":\"Sm\",\"key\":\"29E2\",\"mappings\":{\"default\":{\"default\":\"Produkt mischen\"}}},{\"category\":\"Sm\",\"key\":\"29E3\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen und geneigte Parallele\"}}},{\"category\":\"Sm\",\"key\":\"29E4\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen und schräge Parallele zu Tilde oben\"}}},{\"category\":\"Sm\",\"key\":\"29E5\",\"mappings\":{\"default\":{\"default\":\"Identisch und schräg parallel\"}}},{\"category\":\"Sm\",\"key\":\"29E6\",\"mappings\":{\"default\":{\"default\":\"Gleich Stark\"}}},{\"category\":\"Sm\",\"key\":\"29E7\",\"mappings\":{\"default\":{\"default\":\"Thermodynamisch\"}}},{\"category\":\"Sm\",\"key\":\"29E8\",\"mappings\":{\"default\":{\"default\":\"Abwärtszeigendes Dreieck mit linker Hälfte schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29E9\",\"mappings\":{\"default\":{\"default\":\"Abwärtsdreieck mit rechter Hälfte schwarz\"}}},{\"category\":\"Sm\",\"key\":\"29EB\",\"mappings\":{\"default\":{\"default\":\"Schwarze Raute\"}}},{\"category\":\"Sm\",\"key\":\"29EE\",\"mappings\":{\"default\":{\"default\":\"Fehlergesperrtes weißes Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"29EF\",\"mappings\":{\"default\":{\"default\":\"Fehlerfreies schwarzes Quadrat\"}}},{\"category\":\"Sm\",\"key\":\"29F0\",\"mappings\":{\"default\":{\"default\":\"Fehlergesperrter weißer Diamant\"}}},{\"category\":\"Sm\",\"key\":\"29F1\",\"mappings\":{\"default\":{\"default\":\"Error-Barred Black Diamond\"}}},{\"category\":\"Sm\",\"key\":\"29F2\",\"mappings\":{\"default\":{\"default\":\"Fehlergesperrter weißer Kreis\"}}},{\"category\":\"Sm\",\"key\":\"29F3\",\"mappings\":{\"default\":{\"default\":\"Fehlergesperrter schwarzer Kreis\"}}},{\"key\":\"29F4\",\"mappings\":{\"default\":{\"default\":\"rule delayed\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29F5\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Schrägstrich Operator\"}}},{\"category\":\"Sm\",\"key\":\"29F6\",\"mappings\":{\"default\":{\"default\":\"Schrägstrich mit Overbar\"}}},{\"category\":\"Sm\",\"key\":\"29F7\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Schrägstrich mit horizontalem Hub\"}}},{\"category\":\"Sm\",\"key\":\"29F8\",\"mappings\":{\"default\":{\"default\":\"Großer Schrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"29F9\",\"mappings\":{\"default\":{\"default\":\"Großer umgekehrter Schrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"29FA\",\"mappings\":{\"default\":{\"default\":\"Doppel plus\"}}},{\"category\":\"Sm\",\"key\":\"29FB\",\"mappings\":{\"default\":{\"default\":\"Triple Plus\"}}},{\"category\":\"Sm\",\"key\":\"29FE\",\"mappings\":{\"default\":{\"default\":\"Winzig\"}}},{\"category\":\"Sm\",\"key\":\"29FF\",\"mappings\":{\"default\":{\"default\":\"Miny\"}}},{\"category\":\"Sm\",\"key\":\"2A00\",\"mappings\":{\"default\":{\"default\":\"N-Ary Circled-Punkt-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A01\",\"mappings\":{\"default\":{\"default\":\"N-Ary Circled Plus Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A02\",\"mappings\":{\"default\":{\"default\":\"N-Ary Circled-Times-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A03\",\"mappings\":{\"default\":{\"default\":\"N-Ary Union-Operator mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2A04\",\"mappings\":{\"default\":{\"default\":\"N-Ary Union-Operator mit Plus\"}}},{\"category\":\"Sm\",\"key\":\"2A05\",\"mappings\":{\"default\":{\"default\":\"N-Ary Square-Kreuzungsoperator\"}}},{\"category\":\"Sm\",\"key\":\"2A06\",\"mappings\":{\"default\":{\"default\":\"N-Ary Square Union-Betreiber\"}}},{\"category\":\"Sm\",\"key\":\"2A07\",\"mappings\":{\"default\":{\"default\":\"Zwei logische und Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A08\",\"mappings\":{\"default\":{\"default\":\"Zwei logisch oder Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A09\",\"mappings\":{\"default\":{\"default\":\"N-Ary Times-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A0A\",\"mappings\":{\"default\":{\"default\":\"Modulo Zwei Summe\"}}},{\"category\":\"Sm\",\"key\":\"2A0B\",\"mappings\":{\"default\":{\"default\":\"Summation mit Integral\"}}},{\"category\":\"Sm\",\"key\":\"2A0C\",\"mappings\":{\"default\":{\"default\":\"Vierfach-Integral-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A0D\",\"mappings\":{\"default\":{\"default\":\"Finite Part Integral\"}}},{\"category\":\"Sm\",\"key\":\"2A0E\",\"mappings\":{\"default\":{\"default\":\"Integral mit Doppelhub\"}}},{\"category\":\"Sm\",\"key\":\"2A0F\",\"mappings\":{\"default\":{\"default\":\"Integraler Durchschnitt mit Schrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"2A10\",\"mappings\":{\"default\":{\"default\":\"Zirkulationsfunktion\"}}},{\"category\":\"Sm\",\"key\":\"2A11\",\"mappings\":{\"default\":{\"default\":\"Integration gegen den Uhrzeigersinn\"}}},{\"category\":\"Sm\",\"key\":\"2A12\",\"mappings\":{\"default\":{\"default\":\"Linienintegration mit rechteckigem Pfad um die Pole\"}}},{\"category\":\"Sm\",\"key\":\"2A13\",\"mappings\":{\"default\":{\"default\":\"Linienintegration mit halbkreisförmigem Pfad um den Pol\"}}},{\"category\":\"Sm\",\"key\":\"2A14\",\"mappings\":{\"default\":{\"default\":\"Leitungsintegration ohne Pole\"}}},{\"category\":\"Sm\",\"key\":\"2A15\",\"mappings\":{\"default\":{\"default\":\"Integral um einen Punktoperator\"}}},{\"category\":\"Sm\",\"key\":\"2A16\",\"mappings\":{\"default\":{\"default\":\"Quaternion Integral Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A18\",\"mappings\":{\"default\":{\"default\":\"Integriert mit Times Sign\"}}},{\"category\":\"Sm\",\"key\":\"2A19\",\"mappings\":{\"default\":{\"default\":\"Integral mit der Kreuzung\"}}},{\"category\":\"Sm\",\"key\":\"2A1A\",\"mappings\":{\"default\":{\"default\":\"Integral mit Union\"}}},{\"category\":\"Sm\",\"key\":\"2A1B\",\"mappings\":{\"default\":{\"default\":\"Integral mit Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A1C\",\"mappings\":{\"default\":{\"default\":\"Integral mit Underbar\"}}},{\"category\":\"Sm\",\"key\":\"2A1D\",\"mappings\":{\"default\":{\"default\":\"Beitreten\"}}},{\"category\":\"Sm\",\"key\":\"2A1E\",\"mappings\":{\"default\":{\"default\":\"Großes linkes Dreieckbediener\"}}},{\"category\":\"Sm\",\"key\":\"2A1F\",\"mappings\":{\"default\":{\"default\":\"Z-Notationsschema-Zusammensetzung\"}}},{\"category\":\"Sm\",\"key\":\"2A20\",\"mappings\":{\"default\":{\"default\":\"Z-Notationsschema-Piping\"}}},{\"category\":\"Sm\",\"key\":\"2A21\",\"mappings\":{\"default\":{\"default\":\"Z-Notationsschema-Projektion\"}}},{\"category\":\"Sm\",\"key\":\"2A22\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit kleinem Kreis oben\"}}},{\"category\":\"Sm\",\"key\":\"2A23\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit Zirkumflex-Akzent oben\"}}},{\"category\":\"Sm\",\"key\":\"2A24\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit Tilde oben\"}}},{\"category\":\"Sm\",\"key\":\"2A25\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit Punkt unten\"}}},{\"category\":\"Sm\",\"key\":\"2A26\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit Tilde unter\"}}},{\"category\":\"Sm\",\"key\":\"2A27\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit Index Zwei\"}}},{\"category\":\"Sm\",\"key\":\"2A28\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen mit schwarzem Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"2A29\",\"mappings\":{\"default\":{\"default\":\"Minuszeichen mit Komma oben\"}}},{\"category\":\"Sm\",\"key\":\"2A2A\",\"mappings\":{\"default\":{\"default\":\"Minuszeichen mit Punkt unten\"}}},{\"category\":\"Sm\",\"key\":\"2A2B\",\"mappings\":{\"default\":{\"default\":\"Minuszeichen mit fallenden Punkten\"}}},{\"category\":\"Sm\",\"key\":\"2A2C\",\"mappings\":{\"default\":{\"default\":\"Minuszeichen mit steigenden Punkten\"}}},{\"category\":\"Sm\",\"key\":\"2A2D\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen Im linken Halbkreis\"}}},{\"category\":\"Sm\",\"key\":\"2A2E\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen Im rechten Halbkreis\"}}},{\"category\":\"Sm\",\"key\":\"2A2F\",\"mappings\":{\"default\":{\"default\":\"Vektor- oder Kreuzprodukt\"}}},{\"category\":\"Sm\",\"key\":\"2A30\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A31\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen mit Unterleiste\"}}},{\"category\":\"Sm\",\"key\":\"2A32\",\"mappings\":{\"default\":{\"default\":\"Semidirektprodukt mit geschlossenem Boden\"}}},{\"key\":\"2A33\",\"mappings\":{\"default\":{\"default\":\"smash product\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A34\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen im linken Halbkreis\"}}},{\"category\":\"Sm\",\"key\":\"2A35\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen im rechten Halbkreis\"}}},{\"category\":\"Sm\",\"key\":\"2A36\",\"mappings\":{\"default\":{\"default\":\"eingekreistes Multiplikationszeichen mit Circumflex-Akzent\"}}},{\"category\":\"Sm\",\"key\":\"2A37\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen im doppelten Kreis\"}}},{\"key\":\"2A38\",\"mappings\":{\"default\":{\"default\":\"circled division sign\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A39\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen im Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"2A3A\",\"mappings\":{\"default\":{\"default\":\"Minuszeichen im Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"2A3B\",\"mappings\":{\"default\":{\"default\":\"Multiplikationszeichen im Dreieck\"}}},{\"category\":\"Sm\",\"key\":\"2A3C\",\"mappings\":{\"default\":{\"default\":\"Innenprodukt\"}}},{\"category\":\"Sm\",\"key\":\"2A3D\",\"mappings\":{\"default\":{\"default\":\"Produkt für den rechten Innenraum\"}}},{\"category\":\"Sm\",\"key\":\"2A3E\",\"mappings\":{\"default\":{\"default\":\"Z-Notation relationaler Aufbau\"}}},{\"category\":\"Sm\",\"key\":\"2A3F\",\"mappings\":{\"default\":{\"default\":\"Verschmelzung oder Koprodukt\"}}},{\"category\":\"Sm\",\"key\":\"2A40\",\"mappings\":{\"default\":{\"default\":\"Schnittpunkt mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2A41\",\"mappings\":{\"default\":{\"default\":\"Union mit Minuszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2A42\",\"mappings\":{\"default\":{\"default\":\"Union mit Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A43\",\"mappings\":{\"default\":{\"default\":\"Kreuzung mit Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A44\",\"mappings\":{\"default\":{\"default\":\"Überschneidung mit logischem und\"}}},{\"category\":\"Sm\",\"key\":\"2A45\",\"mappings\":{\"default\":{\"default\":\"Vereinigung mit logischem Or\"}}},{\"category\":\"Sm\",\"key\":\"2A46\",\"mappings\":{\"default\":{\"default\":\"Vereinigung über dem Schnittpunkt\"}}},{\"category\":\"Sm\",\"key\":\"2A47\",\"mappings\":{\"default\":{\"default\":\"Schnittpunkt über Union\"}}},{\"category\":\"Sm\",\"key\":\"2A48\",\"mappings\":{\"default\":{\"default\":\"Vereinigung über Stab über Kreuzung\"}}},{\"category\":\"Sm\",\"key\":\"2A49\",\"mappings\":{\"default\":{\"default\":\"Schnittpunkt oberhalb der Stange oberhalb der Union\"}}},{\"category\":\"Sm\",\"key\":\"2A4A\",\"mappings\":{\"default\":{\"default\":\"Union daneben und mit Union verbunden\"}}},{\"category\":\"Sm\",\"key\":\"2A4B\",\"mappings\":{\"default\":{\"default\":\"Kreuzung neben und mit Kreuzung verbunden\"}}},{\"category\":\"Sm\",\"key\":\"2A4C\",\"mappings\":{\"default\":{\"default\":\"Geschlossene Vereinigung mit Serifen\"}}},{\"category\":\"Sm\",\"key\":\"2A4D\",\"mappings\":{\"default\":{\"default\":\"Geschlossener Schnittpunkt mit Serifen\"}}},{\"category\":\"Sm\",\"key\":\"2A4E\",\"mappings\":{\"default\":{\"default\":\"Doppelter Quadratschnitt\"}}},{\"category\":\"Sm\",\"key\":\"2A4F\",\"mappings\":{\"default\":{\"default\":\"Double Square Union\"}}},{\"category\":\"Sm\",\"key\":\"2A50\",\"mappings\":{\"default\":{\"default\":\"Closed Union mit Serifen und Smash-Produkten\"}}},{\"category\":\"Sm\",\"key\":\"2A51\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A52\",\"mappings\":{\"default\":{\"default\":\"Logisch oder mit Punkt oben\"}}},{\"key\":\"2A53\",\"mappings\":{\"default\":{\"default\":\"double logical and\"}},\"category\":\"Sm\"},{\"key\":\"2A54\",\"mappings\":{\"default\":{\"default\":\"double logical or\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A55\",\"mappings\":{\"default\":{\"default\":\"Zwei durchschneiden logisch und\"}}},{\"category\":\"Sm\",\"key\":\"2A56\",\"mappings\":{\"default\":{\"default\":\"Zwei sich überschneidende logische Oder\"}}},{\"category\":\"Sm\",\"key\":\"2A57\",\"mappings\":{\"default\":{\"default\":\"Abfallend groß oder\"}}},{\"category\":\"Sm\",\"key\":\"2A58\",\"mappings\":{\"default\":{\"default\":\"Abfallend groß und\"}}},{\"category\":\"Sm\",\"key\":\"2A59\",\"mappings\":{\"default\":{\"default\":\"Logisch oder Überlappend Logisch Und\"}}},{\"category\":\"Sm\",\"key\":\"2A5A\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Middle Stem\"}}},{\"category\":\"Sm\",\"key\":\"2A5B\",\"mappings\":{\"default\":{\"default\":\"Logisch oder mit Middle Stem\"}}},{\"category\":\"Sm\",\"key\":\"2A5C\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Horizontalstrich\"}}},{\"category\":\"Sm\",\"key\":\"2A5D\",\"mappings\":{\"default\":{\"default\":\"Logisch oder mit Horizontalstrich\"}}},{\"category\":\"Sm\",\"key\":\"2A5E\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Double Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A5F\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Underbar\"}}},{\"category\":\"Sm\",\"key\":\"2A60\",\"mappings\":{\"default\":{\"default\":\"Logisch und mit Double Underbar\"}}},{\"category\":\"Sm\",\"key\":\"2A61\",\"mappings\":{\"default\":{\"default\":\"kleines Vee mit Underbar\"}}},{\"category\":\"Sm\",\"key\":\"2A62\",\"mappings\":{\"default\":{\"default\":\"Logisch oder mit Double Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A63\",\"mappings\":{\"default\":{\"default\":\"Logisch oder mit doppelter Unterleiste\"}}},{\"category\":\"Sm\",\"key\":\"2A64\",\"mappings\":{\"default\":{\"default\":\"Z-Notation Domain Antirestriction\"}}},{\"category\":\"Sm\",\"key\":\"2A65\",\"mappings\":{\"default\":{\"default\":\"Z Notationsbereich Antirestriction\"}}},{\"category\":\"Sm\",\"key\":\"2A66\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen mit Punkt unten\"}}},{\"category\":\"Sm\",\"key\":\"2A67\",\"mappings\":{\"default\":{\"default\":\"Identisch mit dem obigen Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2A68\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Horizontalbalken mit doppeltem vertikalem Hub\"}}},{\"category\":\"Sm\",\"key\":\"2A69\",\"mappings\":{\"default\":{\"default\":\"Dreifacher Horizontalbalken mit dreifachem vertikalem Hub\"}}},{\"category\":\"Sm\",\"key\":\"2A6A\",\"mappings\":{\"default\":{\"default\":\"Tilde-Operator mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A6B\",\"mappings\":{\"default\":{\"default\":\"Tilde-Operator mit steigenden Punkten\"}}},{\"category\":\"Sm\",\"key\":\"2A6C\",\"mappings\":{\"default\":{\"default\":\"Ähnlich Minus Ähnlich\"}}},{\"category\":\"Sm\",\"key\":\"2A6D\",\"mappings\":{\"default\":{\"default\":\"Kongruent mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A6E\",\"mappings\":{\"default\":{\"default\":\"Entspricht Asterisk\"}}},{\"category\":\"Sm\",\"key\":\"2A6F\",\"mappings\":{\"default\":{\"default\":\"Fast gleichwertig mit dem Circumflex Accent\"}}},{\"category\":\"Sm\",\"key\":\"2A70\",\"mappings\":{\"default\":{\"default\":\"Ungefähr gleich oder gleich zu\"}}},{\"category\":\"Sm\",\"key\":\"2A71\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen über Pluszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2A72\",\"mappings\":{\"default\":{\"default\":\"Pluszeichen über Gleichheitszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2A73\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen über Tilde-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A74\",\"mappings\":{\"default\":{\"default\":\"Doppelpunkt gleich\"}}},{\"key\":\"2A75\",\"mappings\":{\"default\":{\"default\":\"double equal\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A76\",\"mappings\":{\"default\":{\"default\":\"Drei aufeinander folgende Gleichheitszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2A77\",\"mappings\":{\"default\":{\"default\":\"Gleichheitszeichen mit zwei Punkten oben und zwei Punkten unten\"}}},{\"category\":\"Sm\",\"key\":\"2A78\",\"mappings\":{\"default\":{\"default\":\"Gleichwertig mit vier Punkten oben\"}}},{\"category\":\"Sm\",\"key\":\"2A79\",\"mappings\":{\"default\":{\"default\":\"Weniger als mit Circle Inside\"}}},{\"category\":\"Sm\",\"key\":\"2A7A\",\"mappings\":{\"default\":{\"default\":\"Größer als mit Kreis nach innen\"}}},{\"category\":\"Sm\",\"key\":\"2A7B\",\"mappings\":{\"default\":{\"default\":\"Weniger als mit Fragezeichen oben\"}}},{\"category\":\"Sm\",\"key\":\"2A7C\",\"mappings\":{\"default\":{\"default\":\"Größer als mit Fragezeichen oben\"}}},{\"category\":\"Sm\",\"key\":\"2A7D\",\"mappings\":{\"default\":{\"default\":\"Weniger als oder schräg gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A7E\",\"mappings\":{\"default\":{\"default\":\"Größer als oder schräg gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A7F\",\"mappings\":{\"default\":{\"default\":\"Weniger als oder schräg gleich mit Punkt nach innen\"}}},{\"category\":\"Sm\",\"key\":\"2A80\",\"mappings\":{\"default\":{\"default\":\"Größer als oder schräg gleich mit Punkt nach innen\"}}},{\"category\":\"Sm\",\"key\":\"2A81\",\"mappings\":{\"default\":{\"default\":\"Weniger als oder schräg gleich mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A82\",\"mappings\":{\"default\":{\"default\":\"Größer als oder schräg gleich mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2A83\",\"mappings\":{\"default\":{\"default\":\"Weniger als oder schräg gleich mit Punkt oben rechts\"}}},{\"category\":\"Sm\",\"key\":\"2A84\",\"mappings\":{\"default\":{\"default\":\"Größer als oder schräg gleich mit Punkt oben links\"}}},{\"category\":\"Sm\",\"key\":\"2A85\",\"mappings\":{\"default\":{\"default\":\"Weniger als oder ungefähr\"}}},{\"category\":\"Sm\",\"key\":\"2A86\",\"mappings\":{\"default\":{\"default\":\"Größer als oder ungefähr\"}}},{\"category\":\"Sm\",\"key\":\"2A87\",\"mappings\":{\"default\":{\"default\":\"Kleiner als aber nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A88\",\"mappings\":{\"default\":{\"default\":\"Größer als aber nicht gleich\"}}},{\"key\":\"2A89\",\"mappings\":{\"default\":{\"default\":\"Kleiner als aber nicht ungefähr gleich\"}},\"category\":\"Sm\"},{\"key\":\"2A8A\",\"mappings\":{\"default\":{\"default\":\"Größer als aber nicht ungefähr gleich\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A8B\",\"mappings\":{\"default\":{\"default\":\"Weniger als aber größer als oben\"}}},{\"category\":\"Sm\",\"key\":\"2A8C\",\"mappings\":{\"default\":{\"default\":\"Größer als aber weniger als unten und größer als oben\"}}},{\"category\":\"Sm\",\"key\":\"2A8D\",\"mappings\":{\"default\":{\"default\":\"Weniger als oben ähnlich oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A8E\",\"mappings\":{\"default\":{\"default\":\"Größer als oben ähnlich oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A8F\",\"mappings\":{\"default\":{\"default\":\"Weniger als oben ähnlich oben größer als\"}}},{\"category\":\"Sm\",\"key\":\"2A90\",\"mappings\":{\"default\":{\"default\":\"Größer als oben Ähnlich oben\"}}},{\"key\":\"2A91\",\"mappings\":{\"default\":{\"default\":\"less than greater than or equal to\"}},\"category\":\"Sm\"},{\"key\":\"2A92\",\"mappings\":{\"default\":{\"default\":\"greater than less than or equal to\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A93\",\"mappings\":{\"default\":{\"default\":\"Weniger als oben schräg gleich oben Größer als oben schräg gleich\"}}},{\"category\":\"Sm\",\"key\":\"2A94\",\"mappings\":{\"default\":{\"default\":\"Größer als oben schräg gleich oben kleiner als oben schräg gleich groß\"}}},{\"category\":\"Sm\",\"key\":\"2A95\",\"mappings\":{\"default\":{\"default\":\"Schräg gleich oder kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"2A96\",\"mappings\":{\"default\":{\"default\":\"Schräg gleich oder größer als\"}}},{\"category\":\"Sm\",\"key\":\"2A97\",\"mappings\":{\"default\":{\"default\":\"Schräg gleich oder kleiner als mit innenliegendem Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2A98\",\"mappings\":{\"default\":{\"default\":\"Schräg gleich oder größer als mit Punkt nach innen\"}}},{\"key\":\"2A99\",\"mappings\":{\"default\":{\"default\":\"Gleich oder kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"2A9A\",\"mappings\":{\"default\":{\"default\":\"Gleich oder größer als\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A9B\",\"mappings\":{\"default\":{\"default\":\"Doppelte Linie schräg gleich oder kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"2A9C\",\"mappings\":{\"default\":{\"default\":\"Doppelte Linie schräg gleich oder größer als\"}}},{\"key\":\"2A9D\",\"mappings\":{\"default\":{\"default\":\"Äquivalent oder kleiner als\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A9E\",\"mappings\":{\"default\":{\"default\":\"Ähnlich oder größer als\"}}},{\"category\":\"Sm\",\"key\":\"2A9F\",\"mappings\":{\"default\":{\"default\":\"Ähnlich oben Weniger als Gleiches Gleichheitszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2AA0\",\"mappings\":{\"default\":{\"default\":\"Ähnlich oben größer als oben Gleichheitszeichen\"}}},{\"key\":\"2AA1\",\"mappings\":{\"default\":{\"default\":\"Verschachteltes kleiner als\"}},\"category\":\"Sm\"},{\"key\":\"2AA2\",\"mappings\":{\"default\":{\"default\":\"Verschachteltes größer als\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AA3\",\"mappings\":{\"default\":{\"default\":\"Doppelt verschachtelt, weniger als mit Unterleiste\"}}},{\"key\":\"2AA4\",\"mappings\":{\"default\":{\"default\":\"less than greater than overlay\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AA5\",\"mappings\":{\"default\":{\"default\":\"Größer als weniger als\"}}},{\"category\":\"Sm\",\"key\":\"2AA6\",\"mappings\":{\"default\":{\"default\":\"Weniger als durch Kurve geschlossen\"}}},{\"category\":\"Sm\",\"key\":\"2AA7\",\"mappings\":{\"default\":{\"default\":\"Größer als durch Kurve geschlossen\"}}},{\"category\":\"Sm\",\"key\":\"2AA8\",\"mappings\":{\"default\":{\"default\":\"Weniger als dann geschlossen durch Kurve oberhalb der gleichen Neigung\"}}},{\"category\":\"Sm\",\"key\":\"2AA9\",\"mappings\":{\"default\":{\"default\":\"Größer als geschlossen durch Kurve oberhalb der gleichen Neigung\"}}},{\"category\":\"Sm\",\"key\":\"2AAA\",\"mappings\":{\"default\":{\"default\":\"kleiner als\"}}},{\"category\":\"Sm\",\"key\":\"2AAB\",\"mappings\":{\"default\":{\"default\":\"Größer als\"}}},{\"category\":\"Sm\",\"key\":\"2AAC\",\"mappings\":{\"default\":{\"default\":\"kleiner als oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AAD\",\"mappings\":{\"default\":{\"default\":\"Größer als oder gleich\"}}},{\"key\":\"2AAE\",\"mappings\":{\"default\":{\"default\":\"difference between (variant\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AAF\",\"mappings\":{\"default\":{\"default\":\"Stellt über dem einzeiligen Gleichheitszeichen ein\"}}},{\"category\":\"Sm\",\"key\":\"2AB0\",\"mappings\":{\"default\":{\"default\":\"Erfolg über dem einzeiligen Gleichheitszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2AB1\",\"mappings\":{\"default\":{\"default\":\"Vorangehende Single-Line ist nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AB2\",\"mappings\":{\"default\":{\"default\":\"Erfolg über Single-Line nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AB3\",\"mappings\":{\"default\":{\"default\":\"Vorangegangenes Gleichheitszeichen\"}}},{\"category\":\"Sm\",\"key\":\"2AB4\",\"mappings\":{\"default\":{\"default\":\"Erfolgreich über Gleichheitszeichen\"}}},{\"key\":\"2AB5\",\"mappings\":{\"default\":{\"default\":\"precedes but not equal to\"}},\"category\":\"Sm\"},{\"key\":\"2AB6\",\"mappings\":{\"default\":{\"default\":\"succeeds but not equal to\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AB7\",\"mappings\":{\"default\":{\"default\":\"Vorangegangenes fast gleich zu\"}}},{\"category\":\"Sm\",\"key\":\"2AB8\",\"mappings\":{\"default\":{\"default\":\"Erreicht über fast gleich viel\"}}},{\"category\":\"Sm\",\"key\":\"2AB9\",\"mappings\":{\"default\":{\"default\":\"Vorangegangene nicht annähernd gleich\"}}},{\"category\":\"Sm\",\"key\":\"2ABA\",\"mappings\":{\"default\":{\"default\":\"Erreicht oben nicht annähernd gleich\"}}},{\"category\":\"Sm\",\"key\":\"2ABB\",\"mappings\":{\"default\":{\"default\":\"Doppelter Vorgänger\"}}},{\"category\":\"Sm\",\"key\":\"2ABC\",\"mappings\":{\"default\":{\"default\":\"Doppelter Erfolg\"}}},{\"category\":\"Sm\",\"key\":\"2ABD\",\"mappings\":{\"default\":{\"default\":\"Teilmenge mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2ABE\",\"mappings\":{\"default\":{\"default\":\"Superset mit Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2ABF\",\"mappings\":{\"default\":{\"default\":\"Teilmenge mit Pluszeichen unten\"}}},{\"category\":\"Sm\",\"key\":\"2AC0\",\"mappings\":{\"default\":{\"default\":\"Superset mit Pluszeichen unten\"}}},{\"category\":\"Sm\",\"key\":\"2AC1\",\"mappings\":{\"default\":{\"default\":\"Teilmenge mit Multiplikationszeichen unten\"}}},{\"category\":\"Sm\",\"key\":\"2AC2\",\"mappings\":{\"default\":{\"default\":\"Superset mit Multiplikationszeichen unten\"}}},{\"category\":\"Sm\",\"key\":\"2AC3\",\"mappings\":{\"default\":{\"default\":\"Teilmenge oder gleich mit dem obigen Punkt\"}}},{\"category\":\"Sm\",\"key\":\"2AC4\",\"mappings\":{\"default\":{\"default\":\"Superset von oder gleich mit Punkt oben\"}}},{\"category\":\"Sm\",\"key\":\"2AC5\",\"mappings\":{\"default\":{\"default\":\"Teilmenge des obigen Gleichheitszeichens\"}}},{\"category\":\"Sm\",\"key\":\"2AC6\",\"mappings\":{\"default\":{\"default\":\"Superset des obigen Gleichheitszeichens\"}}},{\"key\":\"2AC7\",\"mappings\":{\"default\":{\"default\":\"approximate subset of\"}},\"category\":\"Sm\"},{\"key\":\"2AC8\",\"mappings\":{\"default\":{\"default\":\"approximate superset of\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AC9\",\"mappings\":{\"default\":{\"default\":\"Teilmenge von oben fast gleich\"}}},{\"category\":\"Sm\",\"key\":\"2ACA\",\"mappings\":{\"default\":{\"default\":\"Superset von oben fast gleichwertig\"}}},{\"category\":\"Sm\",\"key\":\"2ACB\",\"mappings\":{\"default\":{\"default\":\"Teilmenge von oben nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"2ACC\",\"mappings\":{\"default\":{\"default\":\"Superset von oben nicht gleich\"}}},{\"category\":\"Sm\",\"key\":\"2ACD\",\"mappings\":{\"default\":{\"default\":\"Platz links Feldbetreiber geöffnet\"}}},{\"category\":\"Sm\",\"key\":\"2ACE\",\"mappings\":{\"default\":{\"default\":\"Rechteckige Box mit offener Box\"}}},{\"category\":\"Sm\",\"key\":\"2ACF\",\"mappings\":{\"default\":{\"default\":\"Geschlossener Teilsatz\"}}},{\"category\":\"Sm\",\"key\":\"2AD0\",\"mappings\":{\"default\":{\"default\":\"Superset geschlossen\"}}},{\"category\":\"Sm\",\"key\":\"2AD1\",\"mappings\":{\"default\":{\"default\":\"Geschlossene Untermenge oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AD2\",\"mappings\":{\"default\":{\"default\":\"Superset geschlossen oder gleich\"}}},{\"key\":\"2AD3\",\"mappings\":{\"default\":{\"default\":\"subset over superset\"}},\"category\":\"Sm\"},{\"key\":\"2AD4\",\"mappings\":{\"default\":{\"default\":\"superset over subset\"}},\"category\":\"Sm\"},{\"key\":\"2AD5\",\"mappings\":{\"default\":{\"default\":\"subset over subset\"}},\"category\":\"Sm\"},{\"key\":\"2AD6\",\"mappings\":{\"default\":{\"default\":\"superset over superset\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AD7\",\"mappings\":{\"default\":{\"default\":\"Superset neben dem Subset\"}}},{\"category\":\"Sm\",\"key\":\"2AD8\",\"mappings\":{\"default\":{\"default\":\"Superset Neben und Joined von Dash mit Subset\"}}},{\"category\":\"Sm\",\"key\":\"2AD9\",\"mappings\":{\"default\":{\"default\":\"Element der Öffnung nach unten\"}}},{\"category\":\"Sm\",\"key\":\"2ADA\",\"mappings\":{\"default\":{\"default\":\"Heugabel mit T-Stück\"}}},{\"category\":\"Sm\",\"key\":\"2ADB\",\"mappings\":{\"default\":{\"default\":\"Transversalschnitt\"}}},{\"category\":\"Sm\",\"key\":\"2ADC\",\"mappings\":{\"default\":{\"default\":\"Gabelung\"}}},{\"category\":\"Sm\",\"key\":\"2ADD\",\"mappings\":{\"default\":{\"default\":\"Nicht Gabeln\"}}},{\"category\":\"Sm\",\"key\":\"2ADE\",\"mappings\":{\"default\":{\"default\":\"Kurzer Linker Tack\"}}},{\"category\":\"Sm\",\"key\":\"2ADF\",\"mappings\":{\"default\":{\"default\":\"Kurzer Down Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AE0\",\"mappings\":{\"default\":{\"default\":\"Short Up Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AE1\",\"mappings\":{\"default\":{\"default\":\"Rechtwinklig zu S\"}}},{\"category\":\"Sm\",\"key\":\"2AE2\",\"mappings\":{\"default\":{\"default\":\"Vertikales Dreifach-Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"2AE3\",\"mappings\":{\"default\":{\"default\":\"Doppelter vertikaler Balken linkes Drehkreuz\"}}},{\"key\":\"2AE4\",\"mappings\":{\"default\":{\"default\":\"double left turnstile vertical bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AE5\",\"mappings\":{\"default\":{\"default\":\"Doppelter vertikaler Balken Doppelter linker Drehkreuz\"}}},{\"category\":\"Sm\",\"key\":\"2AE6\",\"mappings\":{\"default\":{\"default\":\"Long Dash von Left Member von Double Vertical\"}}},{\"category\":\"Sm\",\"key\":\"2AE7\",\"mappings\":{\"default\":{\"default\":\"Short Down Tack mit Overbar\"}}},{\"key\":\"2AE8\",\"mappings\":{\"default\":{\"default\":\"perpendicular over bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AE9\",\"mappings\":{\"default\":{\"default\":\"Short Up Tack Über Short Down Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AEA\",\"mappings\":{\"default\":{\"default\":\"Double Down Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AEB\",\"mappings\":{\"default\":{\"default\":\"Verdoppeln Sie Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AEC\",\"mappings\":{\"default\":{\"default\":\"Doppelstrich nicht unterschreiben\"}}},{\"category\":\"Sm\",\"key\":\"2AED\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Doppelstrich nicht unterschrieben\"}}},{\"category\":\"Sm\",\"key\":\"2AEE\",\"mappings\":{\"default\":{\"default\":\"Teilt sich nicht mit umgekehrten Negationsschrägstrich\"}}},{\"category\":\"Sm\",\"key\":\"2AEF\",\"mappings\":{\"default\":{\"default\":\"Vertikale Linie mit Kreis oben\"}}},{\"category\":\"Sm\",\"key\":\"2AF0\",\"mappings\":{\"default\":{\"default\":\"Vertikale Linie mit Kreis unten\"}}},{\"category\":\"Sm\",\"key\":\"2AF1\",\"mappings\":{\"default\":{\"default\":\"Down Tack mit Kreis unten\"}}},{\"category\":\"Sm\",\"key\":\"2AF2\",\"mappings\":{\"default\":{\"default\":\"Parallel zum horizontalen Anschlag\"}}},{\"category\":\"Sm\",\"key\":\"2AF3\",\"mappings\":{\"default\":{\"default\":\"Parallel zu Tilde Operator\"}}},{\"category\":\"Sm\",\"key\":\"2AF4\",\"mappings\":{\"default\":{\"default\":\"Dreifache vertikale Balken-Binärbeziehung\"}}},{\"category\":\"Sm\",\"key\":\"2AF5\",\"mappings\":{\"default\":{\"default\":\"Dreifacher vertikaler Strich mit horizontalem Hub\"}}},{\"category\":\"Sm\",\"key\":\"2AF6\",\"mappings\":{\"default\":{\"default\":\"Triple Colon Operator\"}}},{\"category\":\"Sm\",\"key\":\"2AF7\",\"mappings\":{\"default\":{\"default\":\"Dreifach verschachtelt weniger als\"}}},{\"category\":\"Sm\",\"key\":\"2AF8\",\"mappings\":{\"default\":{\"default\":\"Dreifach verschachteltes Größeres als\"}}},{\"category\":\"Sm\",\"key\":\"2AF9\",\"mappings\":{\"default\":{\"default\":\"Doppellinie schräg, weniger als oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AFA\",\"mappings\":{\"default\":{\"default\":\"Doppelte Linie schräg größer als oder gleich\"}}},{\"category\":\"Sm\",\"key\":\"2AFB\",\"mappings\":{\"default\":{\"default\":\"Dreifache Schrägstrich-Binärbeziehung\"}}},{\"category\":\"Sm\",\"key\":\"2AFC\",\"mappings\":{\"default\":{\"default\":\"Großer dreifacher vertikaler Barbediener\"}}},{\"category\":\"Sm\",\"key\":\"2AFD\",\"mappings\":{\"default\":{\"default\":\"Doppelter Schrägstrich-Operator\"}}},{\"category\":\"Sm\",\"key\":\"2AFE\",\"mappings\":{\"default\":{\"default\":\"Weiße vertikale Leiste\"}}},{\"category\":\"Sm\",\"key\":\"2AFF\",\"mappings\":{\"default\":{\"default\":\"N-Ary White Vertical Bar\"}}},{\"category\":\"Pd\",\"key\":\"301C\",\"mappings\":{\"default\":{\"default\":\"Wave Dash\"}}},{\"category\":\"Po\",\"key\":\"FE10\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikales Komma\"}}},{\"category\":\"Po\",\"key\":\"FE13\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikalen Doppelpunkt\"}}},{\"category\":\"Po\",\"key\":\"FE14\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikales Semikolon\"}}},{\"category\":\"Po\",\"key\":\"FE15\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikales Ausrufezeichen\"}}},{\"category\":\"Po\",\"key\":\"FE16\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikales Fragezeichen\"}}},{\"category\":\"Po\",\"key\":\"FE19\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikale horizontale Ellipsen\"}}},{\"category\":\"Po\",\"key\":\"FE30\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für vertikalen Zwei-Punkt-Leader\"}}},{\"category\":\"Pd\",\"key\":\"FE31\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für Vertical Em Dash\"}}},{\"category\":\"Pd\",\"key\":\"FE32\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für Vertical En Dash\"}}},{\"category\":\"Pc\",\"key\":\"FE33\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für Vertical Low Line\"}}},{\"category\":\"Pc\",\"key\":\"FE34\",\"mappings\":{\"default\":{\"default\":\"Präsentationsformular für Vertical Wavy Low Line\"}}},{\"category\":\"Po\",\"key\":\"FE45\",\"mappings\":{\"default\":{\"default\":\"Sesampunkt\"}}},{\"category\":\"Po\",\"key\":\"FE46\",\"mappings\":{\"default\":{\"default\":\"Weißer Sesam Punkt\"}}},{\"category\":\"Po\",\"key\":\"FE49\",\"mappings\":{\"default\":{\"default\":\"Gestrichelte Überlänge\"}}},{\"category\":\"Po\",\"key\":\"FE4A\",\"mappings\":{\"default\":{\"default\":\"Centreline Overline\"}}},{\"category\":\"Po\",\"key\":\"FE4B\",\"mappings\":{\"default\":{\"default\":\"Wellenförmige Überlänge\"}}},{\"category\":\"Po\",\"key\":\"FE4C\",\"mappings\":{\"default\":{\"default\":\"Doppelte Wellenlinie\"}}},{\"category\":\"Pc\",\"key\":\"FE4D\",\"mappings\":{\"default\":{\"default\":\"Gestrichelte Low Line\"}}},{\"category\":\"Pc\",\"key\":\"FE4E\",\"mappings\":{\"default\":{\"default\":\"Mittellinie Low Line\"}}},{\"category\":\"Pc\",\"key\":\"FE4F\",\"mappings\":{\"default\":{\"default\":\"Wellenförmige Low Line\"}}},{\"category\":\"Po\",\"key\":\"FE50\",\"mappings\":{\"default\":{\"default\":\"kleines Komma\"}}},{\"category\":\"Po\",\"key\":\"FE52\",\"mappings\":{\"default\":{\"default\":\"kleiner Punkt\"}}},{\"category\":\"Po\",\"key\":\"FE54\",\"mappings\":{\"default\":{\"default\":\"kleines Semikolon\"}}},{\"category\":\"Po\",\"key\":\"FE55\",\"mappings\":{\"default\":{\"default\":\"kleiner Doppelpunkt\"}}},{\"category\":\"Po\",\"key\":\"FE56\",\"mappings\":{\"default\":{\"default\":\"kleines Fragezeichen\"}}},{\"category\":\"Po\",\"key\":\"FE57\",\"mappings\":{\"default\":{\"default\":\"kleines Ausrufezeichen\"}}},{\"category\":\"Pd\",\"key\":\"FE58\",\"mappings\":{\"default\":{\"default\":\"kleiner Em Dash\"}}},{\"category\":\"Po\",\"key\":\"FE5F\",\"mappings\":{\"default\":{\"default\":\"kleines Nummernzeichen\"}}},{\"category\":\"Po\",\"key\":\"FE60\",\"mappings\":{\"default\":{\"default\":\"kleines kaufmännisches\"}}},{\"category\":\"Po\",\"key\":\"FE61\",\"mappings\":{\"default\":{\"default\":\"kleines Sternchen\"}}},{\"category\":\"Sm\",\"key\":\"FE62\",\"mappings\":{\"default\":{\"default\":\"kleines Pluszeichen\"}}},{\"category\":\"Pd\",\"key\":\"FE63\",\"mappings\":{\"default\":{\"default\":\"kleiner Bindestrich-Minus\"}}},{\"category\":\"Sm\",\"key\":\"FE64\",\"mappings\":{\"default\":{\"default\":\"kleines weniger als Zeichen\"}}},{\"category\":\"Sm\",\"key\":\"FE65\",\"mappings\":{\"default\":{\"default\":\"kleines Größeres als Zeichen\"}}},{\"category\":\"Sm\",\"key\":\"FE66\",\"mappings\":{\"default\":{\"default\":\"kleines Gleichheitszeichen\"}}},{\"category\":\"Po\",\"key\":\"FE68\",\"mappings\":{\"default\":{\"default\":\"kleiner umgekehrter Schrägstrich\"}}},{\"category\":\"Sc\",\"key\":\"FE69\",\"mappings\":{\"default\":{\"default\":\"kleines Dollarzeichen\"}}},{\"category\":\"Po\",\"key\":\"FE6A\",\"mappings\":{\"default\":{\"default\":\"kleines Prozentzeichen\"}}},{\"category\":\"Po\",\"key\":\"FE6B\",\"mappings\":{\"default\":{\"default\":\"kleine kommerzielle bei\"}}},{\"category\":\"Po\",\"key\":\"FF01\",\"mappings\":{\"default\":{\"default\":\"vollbreites Ausrufezeichen\"}}},{\"category\":\"Po\",\"key\":\"FF02\",\"mappings\":{\"default\":{\"default\":\"vollbreites Anführungszeichen\"}}},{\"category\":\"Po\",\"key\":\"FF03\",\"mappings\":{\"default\":{\"default\":\"vollbreites Nummernzeichen\"}}},{\"category\":\"Sc\",\"key\":\"FF04\",\"mappings\":{\"default\":{\"default\":\"vollbreites Dollarzeichen\"}}},{\"category\":\"Po\",\"key\":\"FF05\",\"mappings\":{\"default\":{\"default\":\"vollbreites Prozentzeichen\"}}},{\"category\":\"Po\",\"key\":\"FF06\",\"mappings\":{\"default\":{\"default\":\"vollbreites kaufmännisches und\"}}},{\"category\":\"Po\",\"key\":\"FF07\",\"mappings\":{\"default\":{\"default\":\"vollbreites Apostroph\"}}},{\"category\":\"Po\",\"key\":\"FF0A\",\"mappings\":{\"default\":{\"default\":\"vollbreiter Stern\"}}},{\"category\":\"Sm\",\"key\":\"FF0B\",\"mappings\":{\"default\":{\"default\":\"vollbreites Plus\"}}},{\"category\":\"Po\",\"key\":\"FF0C\",\"mappings\":{\"default\":{\"default\":\"vollbreites Komma\"}}},{\"category\":\"Pd\",\"key\":\"FF0D\",\"mappings\":{\"default\":{\"default\":\"vollbreites Minus\"}}},{\"category\":\"Po\",\"key\":\"FF0E\",\"mappings\":{\"default\":{\"default\":\"vollbreiter Punkt\"}}},{\"category\":\"Po\",\"key\":\"FF0F\",\"mappings\":{\"default\":{\"default\":\"Schrägstrich mit voller Breite\"}}},{\"category\":\"Po\",\"key\":\"FF1A\",\"mappings\":{\"default\":{\"default\":\"vollbreiter Doppelpunkt\"}}},{\"category\":\"Po\",\"key\":\"FF1B\",\"mappings\":{\"default\":{\"default\":\"vollbreites Semikolon\"}}},{\"category\":\"Sm\",\"key\":\"FF1C\",\"mappings\":{\"default\":{\"default\":\"Weniger als das gesamte Zeichen\"}}},{\"category\":\"Sm\",\"key\":\"FF1D\",\"mappings\":{\"default\":{\"default\":\"vollbreites Gleichspannungszeichen\"}}},{\"category\":\"Sm\",\"key\":\"FF1E\",\"mappings\":{\"default\":{\"default\":\"Fullwidth Mehr als Zeichen\"}}},{\"category\":\"Po\",\"key\":\"FF1F\",\"mappings\":{\"default\":{\"default\":\"vollbreites Fragezeichen\"}}},{\"category\":\"Po\",\"key\":\"FF20\",\"mappings\":{\"default\":{\"default\":\"Fullwidth Commercial at\"}}},{\"category\":\"Po\",\"key\":\"FF3C\",\"mappings\":{\"default\":{\"default\":\"Umgekehrter Schrägstrich mit voller Breite\"}}},{\"category\":\"Sk\",\"key\":\"FF3E\",\"mappings\":{\"default\":{\"default\":\"Circumflex-Akzent mit voller Breite\"}}},{\"category\":\"Pc\",\"key\":\"FF3F\",\"mappings\":{\"default\":{\"default\":\"vollbreites Low Line\"}}},{\"category\":\"Sk\",\"key\":\"FF40\",\"mappings\":{\"default\":{\"default\":\"vollbreiter Gravis Akzent\"}}},{\"category\":\"Sm\",\"key\":\"FF5C\",\"mappings\":{\"default\":{\"default\":\"vollbreites Vertikale Linie\"}}},{\"category\":\"Sm\",\"key\":\"FF5E\",\"mappings\":{\"default\":{\"default\":\"vollbreite Tilde\"}}},{\"category\":\"Sc\",\"key\":\"FFE0\",\"mappings\":{\"default\":{\"default\":\"vollbreites Cent-Zeichen\"}}},{\"category\":\"Sc\",\"key\":\"FFE1\",\"mappings\":{\"default\":{\"default\":\"vollbreites Pfundzeichen\"}}},{\"category\":\"Sm\",\"key\":\"FFE2\",\"mappings\":{\"default\":{\"default\":\"vollbreite nicht Symbol\"}}},{\"category\":\"Sk\",\"key\":\"FFE3\",\"mappings\":{\"default\":{\"default\":\"vollbreiter Überstrich\",\"alternative\":\"vollbreites Makron\"}}},{\"category\":\"So\",\"key\":\"FFE4\",\"mappings\":{\"default\":{\"default\":\"vollbreite gestrichelte Linie\"}}},{\"category\":\"Sc\",\"key\":\"FFE5\",\"mappings\":{\"default\":{\"default\":\"vollbreites Yen-Zeichen\"}}},{\"category\":\"Sc\",\"key\":\"FFE6\",\"mappings\":{\"default\":{\"default\":\"vollbreites Won-Zeichen\"}}},{\"category\":\"So\",\"key\":\"FFE8\",\"mappings\":{\"default\":{\"default\":\"Halbbreite bildet leicht vertikal\"}}},{\"category\":\"So\",\"key\":\"FFED\",\"mappings\":{\"default\":{\"default\":\"Schwarzes Quadrat mit halber Breite\"}}},{\"category\":\"So\",\"key\":\"FFEE\",\"mappings\":{\"default\":{\"default\":\"Weißer Kreis mit halber Breite\"}}}]\n,\n\"de/symbols/math_whitespace.js\": \n[{\"locale\":\"de\"},{\"category\":\"Zs\",\"key\":\"0020\",\"mappings\":{\"default\":{\"default\":\"Leerzeichen\"}}},{\"key\":\"00A0\",\"mappings\":{\"default\":{\"default\":\" \"}},\"category\":\"Zs\"},{\"key\":\"00AD\",\"mappings\":{\"default\":{\"default\":\"weicher Trennstrich\"}},\"category\":\"Cf\"},{\"category\":\"Zs\",\"key\":\"2000\",\"mappings\":{\"default\":{\"default\":\"En Quad\"}}},{\"category\":\"Zs\",\"key\":\"2001\",\"mappings\":{\"default\":{\"default\":\"Em Quad\"}}},{\"category\":\"Zs\",\"key\":\"2002\",\"mappings\":{\"default\":{\"default\":\"En Space\"}}},{\"key\":\"2003\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"category\":\"Zs\",\"key\":\"2004\",\"mappings\":{\"default\":{\"default\":\"Raum für drei Per-Em\"}}},{\"category\":\"Zs\",\"key\":\"2005\",\"mappings\":{\"default\":{\"default\":\"Raum für vier pro Em\"}}},{\"category\":\"Zs\",\"key\":\"2006\",\"mappings\":{\"default\":{\"default\":\"Six-Per-Em Space\"}}},{\"category\":\"Zs\",\"key\":\"2007\",\"mappings\":{\"default\":{\"default\":\"Raum darstellen\"}}},{\"category\":\"Zs\",\"key\":\"2008\",\"mappings\":{\"default\":{\"default\":\"Interpunktionsraum\"}}},{\"key\":\"2009\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200A\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200B\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"200C\",\"mappings\":{\"default\":{\"default\":\"Nullbreite ohne Joiner\"}}},{\"category\":\"Cf\",\"key\":\"200D\",\"mappings\":{\"default\":{\"default\":\"Zero Width Joiner\"}}},{\"category\":\"Cf\",\"key\":\"200E\",\"mappings\":{\"default\":{\"default\":\"Markierung von links nach rechts\"}}},{\"category\":\"Cf\",\"key\":\"200F\",\"mappings\":{\"default\":{\"default\":\"Markierung von rechts nach links\"}}},{\"category\":\"Zl\",\"key\":\"2028\",\"mappings\":{\"default\":{\"default\":\"Trennzeichen\"}}},{\"category\":\"Zp\",\"key\":\"2029\",\"mappings\":{\"default\":{\"default\":\"Absatztrennzeichen\"}}},{\"category\":\"Cf\",\"key\":\"202A\",\"mappings\":{\"default\":{\"default\":\"Einbetten von links nach rechts\"}}},{\"category\":\"Cf\",\"key\":\"202B\",\"mappings\":{\"default\":{\"default\":\"Einbetten von rechts nach links\"}}},{\"category\":\"Cf\",\"key\":\"202C\",\"mappings\":{\"default\":{\"default\":\"Pop Richtungsformatierung\"}}},{\"category\":\"Cf\",\"key\":\"202D\",\"mappings\":{\"default\":{\"default\":\"Von links nach rechts überschreiben\"}}},{\"category\":\"Cf\",\"key\":\"202E\",\"mappings\":{\"default\":{\"default\":\"Von rechts nach links überschreiben\"}}},{\"category\":\"Zs\",\"key\":\"202F\",\"mappings\":{\"default\":{\"default\":\"Schmaler No-Break-Bereich\"}}},{\"key\":\"205F\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"category\":\"Cf\",\"key\":\"2060\",\"mappings\":{\"default\":{\"default\":\"Word Joiner\"}}},{\"key\":\"2061\",\"mappings\":{\"default\":{\"default\":\"von\"}},\"category\":\"Cf\"},{\"key\":\"2062\",\"mappings\":{\"default\":{\"default\":\" \"}},\"category\":\"Cf\"},{\"key\":\"2063\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"2064\",\"mappings\":{\"default\":{\"default\":\"Unsichtbares Plus\"}}},{\"category\":\"Cf\",\"key\":\"206A\",\"mappings\":{\"default\":{\"default\":\"Symmetrisches Austauschen verhindern\"}}},{\"category\":\"Cf\",\"key\":\"206B\",\"mappings\":{\"default\":{\"default\":\"Aktivieren Sie das symmetrische Austauschen\"}}},{\"category\":\"Cf\",\"key\":\"206E\",\"mappings\":{\"default\":{\"default\":\"Nationale Ziffernformen\"}}},{\"category\":\"Cf\",\"key\":\"206F\",\"mappings\":{\"default\":{\"default\":\"Nominale Ziffernformen\"}}},{\"category\":\"Cf\",\"key\":\"FEFF\",\"mappings\":{\"default\":{\"default\":\"Nullbreite Leerzeichen\"}}},{\"category\":\"Cf\",\"key\":\"FFF9\",\"mappings\":{\"default\":{\"default\":\"Interlinearer Anmerkungsanker\"}}},{\"category\":\"Cf\",\"key\":\"FFFA\",\"mappings\":{\"default\":{\"default\":\"Separator für interlineare Anmerkungen\"}}},{\"category\":\"Cf\",\"key\":\"FFFB\",\"mappings\":{\"default\":{\"default\":\"Interlinear Annotation Terminator\"}}}]\n,\n\"de/symbols/other_stars.js\": \n[{\"locale\":\"de\"},{\"category\":\"So\",\"key\":\"23E8\",\"mappings\":{\"default\":{\"default\":\"Dezimalexponentensymbol\"}}},{\"category\":\"So\",\"key\":\"2605\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Stern\"}}},{\"category\":\"So\",\"key\":\"2606\",\"mappings\":{\"default\":{\"default\":\"weißer Stern\"}}},{\"category\":\"So\",\"key\":\"26AA\",\"mappings\":{\"default\":{\"default\":\"Mittlerer weißer Kreis\"}}},{\"category\":\"So\",\"key\":\"26AB\",\"mappings\":{\"default\":{\"default\":\"Mittlerer schwarzer Kreis\"}}},{\"category\":\"So\",\"key\":\"2705\",\"mappings\":{\"default\":{\"default\":\"Weißes schweres Häkchen\"}}},{\"category\":\"So\",\"key\":\"2713\",\"mappings\":{\"default\":{\"default\":\"Häkchen\"}}},{\"category\":\"So\",\"key\":\"2714\",\"mappings\":{\"default\":{\"default\":\"Schweres Häkchen\"}}},{\"category\":\"So\",\"key\":\"2715\",\"mappings\":{\"default\":{\"default\":\"Multiplikation X\"}}},{\"category\":\"So\",\"key\":\"2716\",\"mappings\":{\"default\":{\"default\":\"Schwere Multiplikation X\"}}},{\"category\":\"So\",\"key\":\"2717\",\"mappings\":{\"default\":{\"default\":\"Stimmzettel X\"}}},{\"category\":\"So\",\"key\":\"2718\",\"mappings\":{\"default\":{\"default\":\"Schwerer Stimmzettel X\"}}},{\"category\":\"So\",\"key\":\"271B\",\"mappings\":{\"default\":{\"default\":\"Center Cross öffnen\"}}},{\"category\":\"So\",\"key\":\"271C\",\"mappings\":{\"default\":{\"default\":\"Schweres offenes Mittelkreuz\"}}},{\"category\":\"So\",\"key\":\"2720\",\"mappings\":{\"default\":{\"default\":\"Malteserkreuz\"}}},{\"category\":\"So\",\"key\":\"2721\",\"mappings\":{\"default\":{\"default\":\"Davidstern\"}}},{\"category\":\"So\",\"key\":\"2722\",\"mappings\":{\"default\":{\"default\":\"Vier Teardrop-Spoked Asterisk\"}}},{\"category\":\"So\",\"key\":\"2723\",\"mappings\":{\"default\":{\"default\":\"Vier Ballon-Speichen-Sternchen\"}}},{\"category\":\"So\",\"key\":\"2724\",\"mappings\":{\"default\":{\"default\":\"Schwere Vier-Ballon-Speichen-Sternchen\"}}},{\"category\":\"So\",\"key\":\"2725\",\"mappings\":{\"default\":{\"default\":\"Vier Club-Spoked Asterisk\"}}},{\"category\":\"So\",\"key\":\"2726\",\"mappings\":{\"default\":{\"default\":\"Schwarzer vierzackiger Stern\"}}},{\"category\":\"So\",\"key\":\"2727\",\"mappings\":{\"default\":{\"default\":\"Weißer vierzackiger Stern\"}}},{\"category\":\"So\",\"key\":\"2728\",\"mappings\":{\"default\":{\"default\":\"Funkelt\"}}},{\"category\":\"So\",\"key\":\"2729\",\"mappings\":{\"default\":{\"default\":\"Stress umrissener weißer Stern\"}}},{\"category\":\"So\",\"key\":\"272A\",\"mappings\":{\"default\":{\"default\":\"Eingekreister weißer Stern\"}}},{\"category\":\"So\",\"key\":\"272B\",\"mappings\":{\"default\":{\"default\":\"Open Center Black Star\"}}},{\"category\":\"So\",\"key\":\"272C\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Center White Star\"}}},{\"category\":\"So\",\"key\":\"272D\",\"mappings\":{\"default\":{\"default\":\"Schwarzer Stern umrissen\"}}},{\"category\":\"So\",\"key\":\"272E\",\"mappings\":{\"default\":{\"default\":\"Schwerer umrissener schwarzer Stern\"}}},{\"category\":\"So\",\"key\":\"272F\",\"mappings\":{\"default\":{\"default\":\"Sternrad Stern\"}}},{\"category\":\"So\",\"key\":\"2730\",\"mappings\":{\"default\":{\"default\":\"Beschatteter weißer Stern\"}}},{\"category\":\"So\",\"key\":\"2731\",\"mappings\":{\"default\":{\"default\":\"Schwerer Stern\"}}},{\"category\":\"So\",\"key\":\"2732\",\"mappings\":{\"default\":{\"default\":\"Öffnen Sie Center Asterisk\"}}},{\"category\":\"So\",\"key\":\"2733\",\"mappings\":{\"default\":{\"default\":\"Acht Speichen-Sternchen\"}}},{\"category\":\"So\",\"key\":\"2734\",\"mappings\":{\"default\":{\"default\":\"Achtzackiger schwarzer Stern\"}}},{\"category\":\"So\",\"key\":\"2735\",\"mappings\":{\"default\":{\"default\":\"Achtzackiger Sternradstern\"}}},{\"category\":\"So\",\"key\":\"2736\",\"mappings\":{\"default\":{\"default\":\"Sechszackiger schwarzer Stern\"}}},{\"category\":\"So\",\"key\":\"2739\",\"mappings\":{\"default\":{\"default\":\"Zwölf schwarzer Stern\"}}},{\"category\":\"So\",\"key\":\"273A\",\"mappings\":{\"default\":{\"default\":\"Sechzehn Spitzen Sternchen\"}}},{\"category\":\"So\",\"key\":\"273B\",\"mappings\":{\"default\":{\"default\":\"Teardrop-Spoked Sternchen\"}}},{\"category\":\"So\",\"key\":\"273C\",\"mappings\":{\"default\":{\"default\":\"Open Center Teardrop-Spoked Sternchen\"}}},{\"category\":\"So\",\"key\":\"273D\",\"mappings\":{\"default\":{\"default\":\"Schwerer Tropfen-Speichen-Sternchen\"}}},{\"category\":\"So\",\"key\":\"273E\",\"mappings\":{\"default\":{\"default\":\"Sechs Petalled Schwarzweiss-Florette\"}}},{\"category\":\"So\",\"key\":\"273F\",\"mappings\":{\"default\":{\"default\":\"Schwarze Florette\"}}},{\"category\":\"So\",\"key\":\"2740\",\"mappings\":{\"default\":{\"default\":\"Weiße Florette\"}}},{\"category\":\"So\",\"key\":\"2741\",\"mappings\":{\"default\":{\"default\":\"Acht Petalled umrissene schwarze Florette\"}}},{\"category\":\"So\",\"key\":\"2742\",\"mappings\":{\"default\":{\"default\":\"Eingekreistes offenes Zentrum Achtstern\"}}},{\"category\":\"So\",\"key\":\"2743\",\"mappings\":{\"default\":{\"default\":\"Schweres, tropfenbesetztes Nadelrad-Sternchen\"}}},{\"category\":\"So\",\"key\":\"2744\",\"mappings\":{\"default\":{\"default\":\"Schneeflocke\"}}},{\"category\":\"So\",\"key\":\"2745\",\"mappings\":{\"default\":{\"default\":\"Feste Trifoliate-Schneeflocke\"}}},{\"category\":\"So\",\"key\":\"2746\",\"mappings\":{\"default\":{\"default\":\"Schwere Chevron-Schneeflocke\"}}},{\"category\":\"So\",\"key\":\"2747\",\"mappings\":{\"default\":{\"default\":\"Funkeln\"}}},{\"category\":\"So\",\"key\":\"2748\",\"mappings\":{\"default\":{\"default\":\"Schweres Funkeln\"}}},{\"category\":\"So\",\"key\":\"2749\",\"mappings\":{\"default\":{\"default\":\"Ballon-Speichen-Sternchen\"}}},{\"category\":\"So\",\"key\":\"274A\",\"mappings\":{\"default\":{\"default\":\"Acht Teardrop-Spoked Propeller Sternchen\"}}},{\"category\":\"So\",\"key\":\"274B\",\"mappings\":{\"default\":{\"default\":\"Schwere Acht Teardrop-Spoked Propeller Sternchen\"}}},{\"category\":\"So\",\"key\":\"274C\",\"mappings\":{\"default\":{\"default\":\"Cross Mark\"}}},{\"category\":\"So\",\"key\":\"274D\",\"mappings\":{\"default\":{\"default\":\"Beschatteter weißer Kreis\"}}}]\n,\n\"de/units/energy.js\": \n[{\"locale\":\"de\"},{\"key\":\"W\",\"mappings\":{\"default\":{\"default\":\"Watt\"}},\"category\":\"energy\",\"names\":[\"W\",\"w\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Kilowatt\"}},\"key\":\"kW\",\"names\":[\"kw\",\"kW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Milliwatt\"}},\"key\":\"mW\",\"names\":[\"mw\",\"mW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Kilowattstunde\"}},\"key\":\"kwh\",\"names\":[\"kwh\",\"kWh\"]},{\"key\":\"J\",\"mappings\":{\"default\":{\"default\":\"Joule\",\"plural\":\"Joules\"}},\"category\":\"energy\",\"names\":[\"J\"]},{\"key\":\"N\",\"mappings\":{\"default\":{\"default\":\"Newton\"}},\"category\":\"energy\",\"names\":[\"N\"]},{\"key\":\"A\",\"mappings\":{\"default\":{\"default\":\"Ampere\"}},\"category\":\"energy\",\"names\":[\"A\"]},{\"key\":\"V\",\"mappings\":{\"default\":{\"default\":\"Volt\"}},\"category\":\"energy\",\"names\":[\"V\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Mikroohm\"}},\"key\":\"µΩ\",\"names\":[\"µΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Milliohm\"}},\"key\":\"mΩ\",\"names\":[\"mΩ\"]},{\"key\":\"Ω\",\"mappings\":{\"default\":{\"default\":\"Ohm\"}},\"category\":\"energy\",\"names\":[\"Ω\",\"Ohm\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Kiloohm\"}},\"key\":\"kΩ\",\"names\":[\"kΩ\",\"KΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Megaohm\"}},\"key\":\"MΩ\",\"names\":[\"MΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"Gigaohm\"}},\"key\":\"GΩ\",\"names\":[\"GΩ\"]}]\n,\n\"de/units/length.js\": \n[{\"locale\":\"de\"},{\"key\":\"mm\",\"names\":[\"mm\"],\"mappings\":{\"default\":{\"default\":\"Millimeter\"}},\"category\":\"length\"},{\"key\":\"cm\",\"names\":[\"cm\"],\"mappings\":{\"default\":{\"default\":\"Zentimeter\"}},\"category\":\"length\"},{\"key\":\"m\",\"mappings\":{\"default\":{\"default\":\"Meter\"}},\"category\":\"length\",\"names\":[\"m\"]},{\"category\":\"length\",\"mappings\":{\"default\":{\"default\":\"Kilometer\"}},\"key\":\"km\",\"names\":[\"km\"]},{\"key\":\"ft\",\"mappings\":{\"default\":{\"default\":\"Fuß\"}},\"category\":\"length\",\"names\":[\"ft\",\"ft.\"]},{\"key\":\"in\",\"mappings\":{\"default\":{\"default\":\"Zoll\"}},\"category\":\"length\",\"names\":[\"in\",\"in.\"]},{\"key\":\"mi\",\"mappings\":{\"default\":{\"plural\":\"Meilen\",\"default\":\"Meile\"}},\"category\":\"length\",\"names\":[\"mi\",\"mi.\"]},{\"key\":\"yd\",\"mappings\":{\"default\":{\"plural\":\"Yards\",\"default\":\"Yard\"}},\"category\":\"length\",\"names\":[\"yd\",\"yd.\"]},{\"key\":\"n.m.\",\"names\":[\"n.m.\"],\"mappings\":{\"default\":{\"default\":\"nautische Meile\"}},\"category\":\"length\"}]\n,\n\"de/units/memory.js\": \n[{\"locale\":\"de\"},{\"key\":\"b\",\"mappings\":{\"default\":{\"plural\":\"Bits\",\"default\":\"Bit\"}},\"category\":\"memory\",\"names\":[\"b\"]},{\"key\":\"B\",\"mappings\":{\"default\":{\"plural\":\"Bytes\",\"default\":\"Byte\"}},\"category\":\"memory\",\"names\":[\"B\"]},{\"key\":\"KB\",\"mappings\":{\"default\":{\"plural\":\"Kilobytes\",\"default\":\"Kilobyte\"}},\"category\":\"memory\",\"names\":[\"KB\"]},{\"key\":\"MB\",\"mappings\":{\"default\":{\"plural\":\"Megabytes\",\"default\":\"Megabyte\"}},\"category\":\"memory\",\"names\":[\"MB\"]},{\"key\":\"GB\",\"mappings\":{\"default\":{\"plural\":\"Gigabytes\",\"default\":\"Gigabyte\"}},\"category\":\"memory\",\"names\":[\"GB\"]},{\"key\":\"TB\",\"mappings\":{\"default\":{\"plural\":\"Terabytes\",\"default\":\"Terabyte\"}},\"category\":\"memory\",\"names\":[\"TB\"]}]\n,\n\"de/units/other.js\": \n[{\"locale\":\"de\"},{\"key\":\"ha\",\"mappings\":{\"default\":{\"default\":\"Hektar\"}},\"category\":\"other\",\"names\":[\"ha\"]},{\"category\":\"other\",\"mappings\":{\"default\":{\"default\":\"Dutzend\"}},\"key\":\"doz\",\"names\":[\"doz\",\"doz.\",\"dz\",\"dz.\"]}]\n,\n\"de/units/speed.js\": \n[{\"locale\":\"de\"},{\"category\":\"speed\",\"mappings\":{\"default\":{\"default\":\"Knoten\"}},\"key\":\"kt\",\"names\":[\"kt\",\"kt.\"]},{\"key\":\"mph\",\"mappings\":{\"default\":{\"default\":\"Meilen pro Stunde\",\"singular\":\"Meile pro Stunde\"}},\"category\":\"speed\",\"names\":[\"mph\"]},{\"key\":\"kmh\",\"mappings\":{\"default\":{\"default\":\"Kilometer pro Stunde\"}},\"category\":\"speed\",\"names\":[\"kmh\"]},{\"key\":\"rpm\",\"mappings\":{\"default\":{\"default\":\"Umdrehungen pro Minute\",\"singular\":\"Umdrehung pro Minute\"}},\"category\":\"speed\",\"names\":[\"rpm\"]}]\n,\n\"de/units/temperature.js\": \n[{\"locale\":\"de\"},{\"key\":\"F\",\"mappings\":{\"default\":{\"default\":\"Farad\"}},\"category\":\"temperature\",\"names\":[\"F\",\"F.\",\"°F\"]},{\"key\":\"C\",\"mappings\":{\"default\":{\"default\":\"Celsius\"}},\"category\":\"temperature\",\"names\":[\"C\",\"°C\"]},{\"key\":\"K\",\"mappings\":{\"default\":{\"default\":\"Kelvin\"}},\"category\":\"temperature\",\"names\":[\"K\",\"°K\"]}]\n,\n\"de/units/time.js\": \n[{\"locale\":\"de\"},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Nanosekunde\"}},\"key\":\"ns\",\"names\":[\"ns\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Microsekunde\"}},\"key\":\"µs\",\"names\":[\"µs\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Millisekunde\"}},\"key\":\"ms\",\"names\":[\"ms\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Sekunde\"}},\"key\":\"s\",\"names\":[\"s\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Minute\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"Stunde\"}},\"key\":\"h\",\"names\":[\"h\",\"hr\"]}]\n,\n\"de/units/volume.js\": \n[{\"locale\":\"de\"},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kubik\"}},\"key\":\"cu\",\"names\":[\"cu\",\"cu.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kubikinch\"}},\"key\":\"cu inch\",\"names\":[\"cu in\",\"cu. in.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kubikfuß\"}},\"key\":\"cu ft\",\"names\":[\"cu ft\",\"cu. ft.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kubikyard\"}},\"key\":\"cu yd\",\"names\":[\"cu yd\",\"cu. yd.\"]},{\"key\":\"bbl\",\"mappings\":{\"default\":{\"default\":\"Fass\"}},\"category\":\"volume\",\"names\":[\"bbl.\",\"bbl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Fluid ounce\"}},\"key\":\"fl. oz.\",\"names\":[\"fl. oz.\",\"fl oz\"]},{\"key\":\"gal\",\"mappings\":{\"default\":{\"plural\":\"Gallonen\",\"default\":\"Gallone\"}},\"category\":\"volume\",\"names\":[\"gal\",\"gal.\"]},{\"key\":\"pt\",\"mappings\":{\"default\":{\"default\":\"Pint\"}},\"category\":\"volume\",\"names\":[\"pt\",\"pt.\"]},{\"key\":\"qt\",\"mappings\":{\"default\":{\"plural\":\"Quarts\",\"default\":\"Quart\"}},\"category\":\"volume\",\"names\":[\"qt\",\"qt.\"]},{\"key\":\"tbsp\",\"mappings\":{\"default\":{\"default\":\"Esslöffel\"}},\"category\":\"volume\",\"names\":[\"tbsp\",\"tbsp.\",\"Tbsp\",\"Tbsp.\"]},{\"key\":\"tsp\",\"mappings\":{\"default\":{\"default\":\"Teelöffel\"}},\"category\":\"volume\",\"names\":[\"tsp\",\"tsp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kubikzentimeter\"}},\"key\":\"cc\",\"names\":[\"cc\",\"ccm\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Kiloliter\"}},\"key\":\"kl\",\"names\":[\"kl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Liter\"}},\"key\":\"l\",\"names\":[\"l\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"Milliliter\"}},\"key\":\"ml\",\"names\":[\"ml\"]}]\n,\n\"de/units/weight.js\": \n[{\"locale\":\"de\"},{\"key\":\"lb\",\"mappings\":{\"default\":{\"default\":\"Pfund\"}},\"category\":\"weight\",\"names\":[\"lb\",\"lb.\"]},{\"key\":\"oz\",\"mappings\":{\"default\":{\"plural\":\"Unzen\",\"default\":\"Unze\"}},\"category\":\"weight\",\"names\":[\"oz\",\"oz.\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"Long ton\"}},\"key\":\"LT\",\"names\":[\"LT\",\"L.T.\"]},{\"key\":\"gr\",\"mappings\":{\"default\":{\"default\":\"Gramm\"}},\"category\":\"weight\",\"names\":[\"g\",\"gr\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"Kilogramm\"}},\"key\":\"kg\",\"names\":[\"kg\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"Mikrogramm\"}},\"key\":\"mcg\",\"names\":[\"mcg\",\"µg\"]},{\"category\":\"weight\",\"mappings\":{\"default\":{\"default\":\"Milligramm\"}},\"key\":\"mg\",\"names\":[\"mg\"]},{\"key\":\"t\",\"mappings\":{\"default\":{\"plural\":\"Tonnen\",\"default\":\"Tonne\"}},\"category\":\"weight\",\"names\":[\"t\",\"T\"]}]\n,\n\"es/functions/algebra.js\": \n[{\"locale\":\"es\"},{\"key\":\"deg\",\"names\":[\"deg\"],\"mappings\":{\"default\":{\"default\":\"grados\"}},\"category\":\"Algebra\"},{\"key\":\"det\",\"names\":[\"det\"],\"mappings\":{\"default\":{\"default\":\"determinante\"}},\"category\":\"Algebra\"},{\"key\":\"dim\",\"names\":[\"dim\"],\"mappings\":{\"default\":{\"default\":\"dimensión\"}},\"category\":\"Algebra\"},{\"key\":\"hom\",\"names\":[\"hom\",\"Hom\"],\"mappings\":{\"default\":{\"default\":\"homomorfismo\"}},\"category\":\"Algebra\"},{\"key\":\"ker\",\"names\":[\"ker\"],\"mappings\":{\"default\":{\"default\":\"kernel\"}},\"category\":\"Algebra\"},{\"key\":\"Tr\",\"names\":[\"Tr\",\"tr\"],\"mappings\":{\"default\":{\"default\":\"traza\"}},\"category\":\"Algebra\"}]\n,\n\"es/functions/elementary.js\": \n[{\"locale\":\"es\"},{\"key\":\"log\",\"names\":[\"log\"],\"mappings\":{\"default\":{\"default\":\"logaritmo\"}},\"category\":\"Logarithm\"},{\"key\":\"ln\",\"names\":[\"ln\"],\"mappings\":{\"default\":{\"default\":\"logaritmo neperiano\"}},\"category\":\"Logarithm\"},{\"key\":\"lg\",\"names\":[\"lg\"],\"mappings\":{\"default\":{\"default\":\"logaritmo base 10\"}},\"category\":\"Logarithm\"},{\"key\":\"exp\",\"names\":[\"exp\",\"expt\"],\"mappings\":{\"default\":{\"default\":\"exponente\"}},\"category\":\"Elementary\"},{\"key\":\"gcd\",\"names\":[\"gcd\",\"mcd\",\"MCD\"],\"mappings\":{\"default\":{\"default\":\"MCD\"}},\"category\":\"Elementary\"},{\"key\":\"lcm\",\"names\":[\"lcm\",\"mcm\",\"MCM\"],\"mappings\":{\"default\":{\"default\":\"mcm\"}},\"category\":\"Elementary\"},{\"key\":\"arg\",\"names\":[\"arg\"],\"mappings\":{\"default\":{\"default\":\"argumento\"}},\"category\":\"Complex\"},{\"key\":\"im\",\"names\":[\"im\"],\"mappings\":{\"default\":{\"default\":\"parte imaginaria\"}},\"category\":\"Complex\"},{\"key\":\"re\",\"names\":[\"re\"],\"mappings\":{\"default\":{\"default\":\"residuo\"}},\"category\":\"Complex\"},{\"key\":\"inf\",\"names\":[\"inf\"],\"mappings\":{\"default\":{\"default\":\"extremo inferior\"}},\"category\":\"Limits\"},{\"key\":\"lim\",\"names\":[\"lim\"],\"mappings\":{\"default\":{\"default\":\"límite\"}},\"category\":\"Limits\"},{\"key\":\"max\",\"names\":[\"max\"],\"mappings\":{\"default\":{\"default\":\"máximo\"}},\"category\":\"Limits\"},{\"key\":\"min\",\"names\":[\"min\"],\"mappings\":{\"default\":{\"default\":\"mínimo\"}},\"category\":\"Limits\"},{\"key\":\"sup\",\"names\":[\"sup\"],\"mappings\":{\"default\":{\"default\":\"superior\"}},\"category\":\"Limits\"},{\"key\":\"lim inf\",\"names\":[\"lim inf\",\"liminf\"],\"mappings\":{\"default\":{\"default\":\"límite inferior\"}},\"category\":\"Limits\"},{\"key\":\"lim sup\",\"names\":[\"lim sup\",\"limsup\"],\"mappings\":{\"default\":{\"default\":\"límite superior\"}},\"category\":\"Limits\"},{\"key\":\"injlim\",\"names\":[\"injlim\",\"inj lim\"],\"mappings\":{\"default\":{\"default\":\"límite directo\"}},\"category\":\"Limits\"},{\"key\":\"projlim\",\"names\":[\"projlim\",\"proj lim\"],\"mappings\":{\"default\":{\"default\":\"límite inverso\"}},\"category\":\"Limits\"},{\"key\":\"mod\",\"names\":[\"mod\"],\"mappings\":{\"default\":{\"default\":\"módulo\"}},\"category\":\"Elementary\"},{\"key\":\"Pr\",\"names\":[\"Pr\"],\"mappings\":{\"default\":{\"default\":\"probabilidad\"}},\"category\":\"Probability\"}]\n,\n\"es/functions/hyperbolic.js\": \n[{\"locale\":\"es\"},{\"key\":\"cosh\",\"names\":[\"cosh\"],\"mappings\":{\"default\":{\"default\":\"coseno hiperbólico\"}},\"category\":\"Hyperbolic\"},{\"key\":\"coth\",\"names\":[\"coth\"],\"mappings\":{\"default\":{\"default\":\"cotangente hiperbólica\"}},\"category\":\"Hyperbolic\"},{\"key\":\"csch\",\"names\":[\"csch\"],\"mappings\":{\"default\":{\"default\":\"cosecante hiperbólica\"}},\"category\":\"Hyperbolic\"},{\"key\":\"sech\",\"names\":[\"sech\"],\"mappings\":{\"default\":{\"default\":\"secante hiperbólica\"}},\"category\":\"Hyperbolic\"},{\"key\":\"sinh\",\"names\":[\"sinh\"],\"mappings\":{\"default\":{\"default\":\"seno hiperbólico\"}},\"category\":\"Hyperbolic\"},{\"key\":\"tanh\",\"names\":[\"tanh\"],\"mappings\":{\"default\":{\"default\":\"tangente hiperbólica\"}},\"category\":\"Hyperbolic\"},{\"key\":\"arcosh\",\"names\":[\"arcosh\",\"arccosh\"],\"mappings\":{\"default\":{\"default\":\"area coseno hiperbólico\"}},\"category\":\"Area\"},{\"key\":\"arcoth\",\"names\":[\"arcoth\",\"arccoth\"],\"mappings\":{\"default\":{\"default\":\"area cotangente hiperbólica\"}},\"category\":\"Area\"},{\"key\":\"arcsch\",\"names\":[\"arcsch\",\"arccsch\"],\"mappings\":{\"default\":{\"default\":\"area cosecante hiperbólica\"}},\"category\":\"Area\"},{\"key\":\"arsech\",\"names\":[\"arsech\",\"arcsech\"],\"mappings\":{\"default\":{\"default\":\"area secante hiperbólica\"}},\"category\":\"Area\"},{\"key\":\"arsinh\",\"names\":[\"arsinh\",\"arcsinh\"],\"mappings\":{\"default\":{\"default\":\"area seno hiperbólico\"}},\"category\":\"Area\"},{\"key\":\"artanh\",\"names\":[\"artanh\",\"arctanh\"],\"mappings\":{\"default\":{\"default\":\"area tangente hiperbólica\"}},\"category\":\"Area\"}]\n,\n\"es/functions/trigonometry.js\": \n[{\"locale\":\"es\"},{\"key\":\"cos\",\"names\":[\"cos\",\"cosine\"],\"mappings\":{\"default\":{\"default\":\"coseno\"}},\"category\":\"Trigonometric\"},{\"key\":\"cot\",\"names\":[\"cot\"],\"mappings\":{\"default\":{\"default\":\"cotangente\"}},\"category\":\"Trigonometric\"},{\"key\":\"csc\",\"names\":[\"csc\"],\"mappings\":{\"default\":{\"default\":\"cosecante\"}},\"category\":\"Trigonometric\"},{\"key\":\"sec\",\"names\":[\"sec\"],\"mappings\":{\"default\":{\"default\":\"secant\"}},\"category\":\"Trigonometric\"},{\"key\":\"sin\",\"names\":[\"sin\",\"sine\",\"sen\"],\"mappings\":{\"default\":{\"default\":\"seno\"}},\"category\":\"Trigonometric\"},{\"key\":\"tan\",\"names\":[\"tan\"],\"mappings\":{\"default\":{\"default\":\"tangente\"}},\"category\":\"Trigonometric\"},{\"key\":\"arccos\",\"names\":[\"arccos\"],\"mappings\":{\"default\":{\"default\":\"arco coseno\"}},\"category\":\"Cyclometric\"},{\"key\":\"arccot\",\"names\":[\"arccot\"],\"mappings\":{\"default\":{\"default\":\"arco cotangente\"}},\"category\":\"Cyclometric\"},{\"key\":\"arccsc\",\"names\":[\"arccsc\"],\"mappings\":{\"default\":{\"default\":\"arco cosecante\"}},\"category\":\"Cyclometric\"},{\"key\":\"arcsec\",\"names\":[\"arcsec\"],\"mappings\":{\"default\":{\"default\":\"arco secante\"}},\"category\":\"Cyclometric\"},{\"key\":\"arcsin\",\"names\":[\"arcsin\"],\"mappings\":{\"default\":{\"default\":\"arco seno\"}},\"category\":\"Cyclometric\"},{\"key\":\"arctan\",\"names\":[\"arctan\"],\"mappings\":{\"default\":{\"default\":\"arco tangente\"}},\"category\":\"Cyclometric\"}]\n,\n\"es/symbols/digits_rest.js\": \n[{\"locale\":\"es\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"al cuadrado\"},\"mathspeak\":{\"default\":\"al cuadrado\"},\"clearspeak\":{\"default\":\"al cuadrado\"}},\"key\":\"00B2\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"al cubo\"},\"mathspeak\":{\"default\":\"al cubo\"},\"clearspeak\":{\"default\":\"al cubo\"}},\"key\":\"00B3\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"un cuarto\"}},\"key\":\"00BC\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"un medio\"}},\"key\":\"00BD\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"tres cuartos\"}},\"key\":\"00BE\"},{\"category\":\"No\",\"key\":\"2150\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Séptimo\"}}},{\"category\":\"No\",\"key\":\"2151\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Noveno\"}}},{\"category\":\"No\",\"key\":\"2152\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Décimo\"}}},{\"category\":\"No\",\"key\":\"2153\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Tercero\"}}},{\"category\":\"No\",\"key\":\"2154\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar dos tercios\"}}},{\"category\":\"No\",\"key\":\"2155\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fraction One Fifth\"}}},{\"category\":\"No\",\"key\":\"2156\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar dos quintos\"}}},{\"category\":\"No\",\"key\":\"2157\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar tres quintos\"}}},{\"category\":\"No\",\"key\":\"2158\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar cuatro quintos\"}}},{\"category\":\"No\",\"key\":\"2159\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Sexto\"}}},{\"category\":\"No\",\"key\":\"215A\",\"mappings\":{\"default\":{\"default\":\"Vulgar fracción cinco sextos\"}}},{\"category\":\"No\",\"key\":\"215B\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fracción Un Octavo\"}}},{\"category\":\"No\",\"key\":\"215C\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar tres octavos\"}}},{\"category\":\"No\",\"key\":\"215D\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar cinco octavos\"}}},{\"category\":\"No\",\"key\":\"215E\",\"mappings\":{\"default\":{\"default\":\"Fracción vulgar siete octavos\"}}},{\"category\":\"No\",\"key\":\"215F\",\"mappings\":{\"default\":{\"default\":\"Numerador de fracciones uno\"}}},{\"category\":\"No\",\"key\":\"2189\",\"mappings\":{\"default\":{\"default\":\"Vulgar Fraction Zero Thirds\"}}},{\"category\":\"No\",\"key\":\"3248\",\"mappings\":{\"default\":{\"default\":\"Número diez en un círculo en la Plaza Negra\"}}},{\"category\":\"No\",\"key\":\"3249\",\"mappings\":{\"default\":{\"default\":\"Número veinte en un círculo en la Plaza Negra\"}}},{\"category\":\"No\",\"key\":\"324A\",\"mappings\":{\"default\":{\"default\":\"Número circundado treinta en cuadrado negro\"}}},{\"category\":\"No\",\"key\":\"324B\",\"mappings\":{\"default\":{\"default\":\"Número circundado Cuarenta en cuadrado negro\"}}},{\"category\":\"No\",\"key\":\"324C\",\"mappings\":{\"default\":{\"default\":\"Círculo número cincuenta en la plaza negra\"}}},{\"category\":\"No\",\"key\":\"324D\",\"mappings\":{\"default\":{\"default\":\"Círculo número sesenta en la plaza negra\"}}},{\"category\":\"No\",\"key\":\"324E\",\"mappings\":{\"default\":{\"default\":\"Número setenta en un círculo en la Plaza Negra\"}}},{\"category\":\"No\",\"key\":\"324F\",\"mappings\":{\"default\":{\"default\":\"Círculo número ochenta en cuadrado negro\"}}}]\n,\n\"es/symbols/greek-rest.js\": \n[{\"locale\":\"es\"},{\"category\":\"Lu\",\"key\":\"0394\",\"mappings\":{\"clearspeak\":{\"default\":\"triangle\",\"TriangleSymbol_Delta\":\"cap Delta\"}}}]\n,\n\"es/symbols/greek-scripts.js\": \n[{\"locale\":\"es\"},{\"category\":\"Ll\",\"key\":\"1D26\",\"mappings\":{\"default\":{\"default\":\"pequeño mayúscula gamma\"}}},{\"category\":\"Ll\",\"key\":\"1D27\",\"mappings\":{\"default\":{\"default\":\"pequeña mayúscula lamda\"}}},{\"category\":\"Ll\",\"key\":\"1D28\",\"mappings\":{\"default\":{\"default\":\"pequeña mayúscula Pi\"}}},{\"category\":\"Ll\",\"key\":\"1D29\",\"mappings\":{\"default\":{\"default\":\"pequeña mayúscula Rho\"}}},{\"category\":\"Ll\",\"key\":\"1D2A\",\"mappings\":{\"default\":{\"default\":\"pequeña mayúscula Psi\"}}},{\"category\":\"Lm\",\"key\":\"1D5E\",\"mappings\":{\"default\":{\"default\":\"modificador de pequeño gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D60\",\"mappings\":{\"default\":{\"default\":\"modificador de pequeño phi\"}}},{\"category\":\"Lm\",\"key\":\"1D66\",\"mappings\":{\"default\":{\"default\":\"subscripción pequeña beta\"}}},{\"category\":\"Lm\",\"key\":\"1D67\",\"mappings\":{\"default\":{\"default\":\"subíndice pequeña gamma\"}}},{\"category\":\"Lm\",\"key\":\"1D68\",\"mappings\":{\"default\":{\"default\":\"subíndice rho\"}}},{\"category\":\"Lm\",\"key\":\"1D69\",\"mappings\":{\"default\":{\"default\":\"subíndice phi\"}}},{\"category\":\"Lm\",\"key\":\"1D6A\",\"mappings\":{\"default\":{\"default\":\"subscripción chi\"}}}]\n,\n\"es/symbols/greek-symbols.js\": \n[{\"locale\":\"es\"},{\"key\":\"03D0\",\"mappings\":{\"default\":{\"default\":\"símbolo beta\"}},\"category\":\"Ll\"},{\"key\":\"03D7\",\"mappings\":{\"default\":{\"default\":\"símbolo kai griego\"}},\"category\":\"Ll\"},{\"key\":\"03F6\",\"mappings\":{\"default\":{\"default\":\"épsilon invertido\"}},\"category\":\"Sm\"},{\"category\":\"Lu\",\"key\":\"1D7CA\",\"mappings\":{\"default\":{\"default\":\"Matemática Bold Capital Digamma\"}}},{\"category\":\"Ll\",\"key\":\"1D7CB\",\"mappings\":{\"default\":{\"default\":\"Matemática negrita pequeño digamma\"}}}]\n,\n\"es/symbols/hebrew_letters.js\": \n[{\"locale\":\"es\"},{\"key\":\"2135\",\"mappings\":{\"default\":{\"default\":\"alef\"}},\"category\":\"Lo\"},{\"key\":\"2136\",\"mappings\":{\"default\":{\"default\":\"bet\"}},\"category\":\"Lo\"},{\"key\":\"2137\",\"mappings\":{\"default\":{\"default\":\"guímel\"}},\"category\":\"Lo\"},{\"key\":\"2138\",\"mappings\":{\"default\":{\"default\":\"dálet\"}},\"category\":\"Lo\"}]\n,\n\"es/symbols/latin-lower-double-accent.js\": \n[{\"locale\":\"es\"},{\"category\":\"Ll\",\"key\":\"01D6\",\"mappings\":{\"default\":{\"default\":\"u con diéresis y macron\"}}},{\"category\":\"Ll\",\"key\":\"01D8\",\"mappings\":{\"default\":{\"default\":\"u con diéresis y acento agudo\"}}},{\"category\":\"Ll\",\"key\":\"01DA\",\"mappings\":{\"default\":{\"default\":\"u con diéresis y acento\"}}},{\"category\":\"Ll\",\"key\":\"01DC\",\"mappings\":{\"default\":{\"default\":\"u con diéresis y grave\"}}},{\"category\":\"Ll\",\"key\":\"01DF\",\"mappings\":{\"default\":{\"default\":\"a con diéresis y macron\"}}},{\"category\":\"Ll\",\"key\":\"01E1\",\"mappings\":{\"default\":{\"default\":\"a con punto arriba y macron\"}}},{\"category\":\"Ll\",\"key\":\"01ED\",\"mappings\":{\"default\":{\"default\":\"o con pecíolo y macron\"}}},{\"category\":\"Ll\",\"key\":\"01FB\",\"mappings\":{\"default\":{\"default\":\"a con ring above y acento agudo\"}}},{\"category\":\"Ll\",\"key\":\"022B\",\"mappings\":{\"default\":{\"default\":\"o con diéresis y macron\"}}},{\"category\":\"Ll\",\"key\":\"022D\",\"mappings\":{\"default\":{\"default\":\"o con tilde y macron\"}}},{\"category\":\"Ll\",\"key\":\"0231\",\"mappings\":{\"default\":{\"default\":\"o con Dot Above y Macron\"}}},{\"key\":\"1E09\",\"mappings\":{\"default\":{\"default\":\"c con cedilla y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E15\",\"mappings\":{\"default\":{\"default\":\"e con macrón y grave\"}},\"category\":\"Ll\"},{\"key\":\"1E17\",\"mappings\":{\"default\":{\"default\":\"e con macrón y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E1D\",\"mappings\":{\"default\":{\"default\":\"e con cedilla y breve\"}},\"category\":\"Ll\"},{\"key\":\"1E2F\",\"mappings\":{\"default\":{\"default\":\"i con diéresis y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E39\",\"mappings\":{\"default\":{\"default\":\"l con punto debajo y macrón\"}},\"category\":\"Ll\"},{\"key\":\"1E4D\",\"mappings\":{\"default\":{\"default\":\"o con tilde y acute\"}},\"category\":\"Ll\"},{\"key\":\"1E4F\",\"mappings\":{\"default\":{\"default\":\"o con tilde y diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1E51\",\"mappings\":{\"default\":{\"default\":\"o con macrón y grave\"}},\"category\":\"Ll\"},{\"key\":\"1E53\",\"mappings\":{\"default\":{\"default\":\"o con macrón y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E5D\",\"mappings\":{\"default\":{\"default\":\"r con punto debajo y macrón\"}},\"category\":\"Ll\"},{\"key\":\"1E65\",\"mappings\":{\"default\":{\"default\":\"s con agudo y punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E67\",\"mappings\":{\"default\":{\"default\":\"s con carón y punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E69\",\"mappings\":{\"default\":{\"default\":\"s con punto debajo y punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E79\",\"mappings\":{\"default\":{\"default\":\"u con tilde y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E7B\",\"mappings\":{\"default\":{\"default\":\"u con macrón y diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1EA5\",\"mappings\":{\"default\":{\"default\":\"a con acento circunflejo y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1EA7\",\"mappings\":{\"default\":{\"default\":\"a con acento circunflejo y grave\"}},\"category\":\"Ll\"},{\"key\":\"1EA9\",\"mappings\":{\"default\":{\"default\":\"a con acento circunflejo y gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EAB\",\"mappings\":{\"default\":{\"default\":\"a con acento circunflejo y tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EAD\",\"mappings\":{\"default\":{\"default\":\"a con acento circunflejo y punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EAF\",\"mappings\":{\"default\":{\"default\":\"a con breve y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1EB1\",\"mappings\":{\"default\":{\"default\":\"a con breve y grave\"}},\"category\":\"Ll\"},{\"key\":\"1EB3\",\"mappings\":{\"default\":{\"default\":\"a con breve y gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EB5\",\"mappings\":{\"default\":{\"default\":\"a con breve y tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EB7\",\"mappings\":{\"default\":{\"default\":\"a con breve y punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EBF\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1EC1\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo y grave\"}},\"category\":\"Ll\"},{\"key\":\"1EC3\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo y gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EC5\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo y tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EC7\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo y punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1ED1\",\"mappings\":{\"default\":{\"default\":\"o con acento circunflejo y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1ED3\",\"mappings\":{\"default\":{\"default\":\"o con acento circunflejo y grave\"}},\"category\":\"Ll\"},{\"key\":\"1ED5\",\"mappings\":{\"default\":{\"default\":\"o con acento circunflejo y gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1ED7\",\"mappings\":{\"default\":{\"default\":\"o con acento circunflejo y tilde\"}},\"category\":\"Ll\"},{\"key\":\"1ED9\",\"mappings\":{\"default\":{\"default\":\"o con acento circunflejo y punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EDB\",\"mappings\":{\"default\":{\"default\":\"o with horn and acute\"}},\"category\":\"Ll\"},{\"key\":\"1EDD\",\"mappings\":{\"default\":{\"default\":\"o with horn and grave\"}},\"category\":\"Ll\"},{\"key\":\"1EDF\",\"mappings\":{\"default\":{\"default\":\"o with horn and hook above\"}},\"category\":\"Ll\"},{\"key\":\"1EE1\",\"mappings\":{\"default\":{\"default\":\"o with horn and tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EE3\",\"mappings\":{\"default\":{\"default\":\"o con cuerno y punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EE9\",\"mappings\":{\"default\":{\"default\":\"u con cuerno y agudo\"}},\"category\":\"Ll\"},{\"key\":\"1EEB\",\"mappings\":{\"default\":{\"default\":\"u con cuerno y grave\"}},\"category\":\"Ll\"},{\"key\":\"1EED\",\"mappings\":{\"default\":{\"default\":\"u con cuerno y gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EEF\",\"mappings\":{\"default\":{\"default\":\"u con cuerno y tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EF1\",\"mappings\":{\"default\":{\"default\":\"u con cuerno y punto debajo\"}},\"category\":\"Ll\"}]\n,\n\"es/symbols/latin-lower-phonetic.js\": \n[{\"locale\":\"es\"},{\"key\":\"00F8\",\"mappings\":{\"default\":{\"default\":\"o barrada\"}},\"category\":\"Ll\"},{\"key\":\"0111\",\"mappings\":{\"default\":{\"default\":\"d con barra\"}},\"category\":\"Ll\"},{\"key\":\"0127\",\"mappings\":{\"default\":{\"default\":\"h con guión\"}},\"category\":\"Ll\"},{\"key\":\"0142\",\"mappings\":{\"default\":{\"default\":\"l con guión\"}},\"category\":\"Ll\"},{\"key\":\"0167\",\"mappings\":{\"default\":{\"default\":\"t con guión\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0180\",\"mappings\":{\"default\":{\"default\":\"b con línea\"}}},{\"key\":\"019B\",\"mappings\":{\"default\":{\"default\":\"lambda tachada\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01B6\",\"mappings\":{\"default\":{\"default\":\"z con línea\"}}},{\"category\":\"Ll\",\"key\":\"01BE\",\"mappings\":{\"default\":{\"default\":\"parada glotal invertida con línea\"}}},{\"category\":\"Ll\",\"key\":\"01E5\",\"mappings\":{\"default\":{\"default\":\"g con línea\"}}},{\"category\":\"Ll\",\"key\":\"01FF\",\"mappings\":{\"default\":{\"default\":\"o con línea y acento agudo\"}}},{\"category\":\"Ll\",\"key\":\"023C\",\"mappings\":{\"default\":{\"default\":\"c con trazo\"}}},{\"category\":\"Ll\",\"key\":\"0247\",\"mappings\":{\"default\":{\"default\":\"pequeña e con trazo\"}}},{\"category\":\"Ll\",\"key\":\"0249\",\"mappings\":{\"default\":{\"default\":\"j con trazo\"}}},{\"category\":\"Ll\",\"key\":\"024D\",\"mappings\":{\"default\":{\"default\":\"con trazo\"}}},{\"category\":\"Ll\",\"key\":\"024F\",\"mappings\":{\"default\":{\"default\":\"y con trazo\"}}},{\"category\":\"Ll\",\"key\":\"025F\",\"mappings\":{\"default\":{\"default\":\"pequeña sin puntos j con trazo\"}}},{\"category\":\"Ll\",\"key\":\"0268\",\"mappings\":{\"default\":{\"default\":\"i con trazo\"}}},{\"category\":\"Ll\",\"key\":\"0284\",\"mappings\":{\"default\":{\"default\":\"pequeña sin puntos j con trazo y gancho\"}}},{\"category\":\"Ll\",\"key\":\"02A1\",\"mappings\":{\"default\":{\"default\":\"parada glotal con trazo\"}}},{\"category\":\"Ll\",\"key\":\"02A2\",\"mappings\":{\"default\":{\"default\":\"parada invertida glotal con trazo\"}}},{\"category\":\"Ll\",\"key\":\"1D13\",\"mappings\":{\"default\":{\"default\":\"de lado O con trazo\"}}},{\"category\":\"Ll\",\"key\":\"1D7C\",\"mappings\":{\"default\":{\"default\":\"iota con trazo\"}}},{\"category\":\"Ll\",\"key\":\"1D7D\",\"mappings\":{\"default\":{\"default\":\"p con trazo\"}}},{\"category\":\"Ll\",\"key\":\"1D7F\",\"mappings\":{\"default\":{\"default\":\"upsilon con trazo\"}}},{\"category\":\"Ll\",\"key\":\"1E9C\",\"mappings\":{\"default\":{\"default\":\"larga s con trazo diagonal\"}}},{\"category\":\"Ll\",\"key\":\"1E9D\",\"mappings\":{\"default\":{\"default\":\"pequeña s larga con trazo alto\"}}},{\"category\":\"Ll\",\"key\":\"018D\",\"mappings\":{\"default\":{\"default\":\"delta convertido\"}}},{\"key\":\"1E9B\",\"mappings\":{\"default\":{\"default\":\"s larga con punto arriba\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"1E9F\",\"mappings\":{\"default\":{\"default\":\"delta pequeña latina\"}}},{\"key\":\"0138\",\"mappings\":{\"default\":{\"default\":\"kra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"017F\",\"mappings\":{\"default\":{\"default\":\"s larga\"}}},{\"category\":\"Ll\",\"key\":\"0183\",\"mappings\":{\"default\":{\"default\":\"b con barra encima\"}}},{\"category\":\"Ll\",\"key\":\"0185\",\"mappings\":{\"default\":{\"default\":\"tono seis\"}}},{\"category\":\"Ll\",\"key\":\"0188\",\"mappings\":{\"default\":{\"default\":\"c con gancho\"}}},{\"category\":\"Ll\",\"key\":\"018C\",\"mappings\":{\"default\":{\"default\":\"d con barra encima\"}}},{\"key\":\"0192\",\"mappings\":{\"default\":{\"default\":\"f con gancho\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0195\",\"mappings\":{\"default\":{\"default\":\"hv\"}}},{\"category\":\"Ll\",\"key\":\"0199\",\"mappings\":{\"default\":{\"default\":\"k con gancho\"}}},{\"key\":\"019A\",\"mappings\":{\"default\":{\"default\":\"l con barra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"019E\",\"mappings\":{\"default\":{\"default\":\"n con pierna derecha larga\"}}},{\"category\":\"Ll\",\"key\":\"01A1\",\"mappings\":{\"default\":{\"default\":\"o con cuerno\"}}},{\"category\":\"Ll\",\"key\":\"01A3\",\"mappings\":{\"default\":{\"default\":\"oi\"}}},{\"category\":\"Ll\",\"key\":\"01A5\",\"mappings\":{\"default\":{\"default\":\"p con gancho\"}}},{\"category\":\"Ll\",\"key\":\"01A8\",\"mappings\":{\"default\":{\"default\":\"dos tonos\"}}},{\"category\":\"Ll\",\"key\":\"01AA\",\"mappings\":{\"default\":{\"default\":\"latin letter invertido Esh bucle\"}}},{\"category\":\"Ll\",\"key\":\"01AB\",\"mappings\":{\"default\":{\"default\":\"t con palatal gancho\"}}},{\"category\":\"Ll\",\"key\":\"01AD\",\"mappings\":{\"default\":{\"default\":\"t con gancho\"}}},{\"category\":\"Ll\",\"key\":\"01B0\",\"mappings\":{\"default\":{\"default\":\"u con horn\"}}},{\"category\":\"Ll\",\"key\":\"01B4\",\"mappings\":{\"default\":{\"default\":\"y con gancho\"}}},{\"category\":\"Ll\",\"key\":\"01B9\",\"mappings\":{\"default\":{\"default\":\"ezh invertido\"}}},{\"category\":\"Ll\",\"key\":\"01BA\",\"mappings\":{\"default\":{\"default\":\"ezh con cola\"}}},{\"category\":\"Ll\",\"key\":\"01BD\",\"mappings\":{\"default\":{\"default\":\"tono cinco\"}}},{\"category\":\"Ll\",\"key\":\"01BF\",\"mappings\":{\"default\":{\"default\":\"wynn\"}}},{\"category\":\"Ll\",\"key\":\"01C6\",\"mappings\":{\"default\":{\"default\":\"dz con acento\"}}},{\"category\":\"Ll\",\"key\":\"01C9\",\"mappings\":{\"default\":{\"default\":\"lj\"}}},{\"category\":\"Ll\",\"key\":\"01CC\",\"mappings\":{\"default\":{\"default\":\"nj\"}}},{\"category\":\"Ll\",\"key\":\"01E3\",\"mappings\":{\"default\":{\"default\":\"ae con macron\"}}},{\"category\":\"Ll\",\"key\":\"01EF\",\"mappings\":{\"default\":{\"default\":\"ezh con acento\"}}},{\"category\":\"Ll\",\"key\":\"01F3\",\"mappings\":{\"default\":{\"default\":\"dz\"}}},{\"category\":\"Ll\",\"key\":\"021D\",\"mappings\":{\"default\":{\"default\":\"latín letra pequeña yogh\"}}},{\"category\":\"Ll\",\"key\":\"026E\",\"mappings\":{\"default\":{\"default\":\"lezh letra pequeña latina\"}}},{\"category\":\"Ll\",\"key\":\"0292\",\"mappings\":{\"default\":{\"default\":\"ezh\"}}},{\"category\":\"Ll\",\"key\":\"0293\",\"mappings\":{\"default\":{\"default\":\"pequeña Ezh con Curl\"}}},{\"category\":\"Ll\",\"key\":\"02A4\",\"mappings\":{\"default\":{\"default\":\"latín letra pequeña Dezh Digraph\"}}},{\"category\":\"Ll\",\"key\":\"01DD\",\"mappings\":{\"default\":{\"default\":\"e convertido\"}}},{\"category\":\"Ll\",\"key\":\"01FD\",\"mappings\":{\"default\":{\"default\":\"ae con acento agudo\"}}},{\"category\":\"Ll\",\"key\":\"0221\",\"mappings\":{\"default\":{\"default\":\"d con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0223\",\"mappings\":{\"default\":{\"default\":\"ou\"}}},{\"category\":\"Ll\",\"key\":\"0225\",\"mappings\":{\"default\":{\"default\":\"z con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0234\",\"mappings\":{\"default\":{\"default\":\"l con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0235\",\"mappings\":{\"default\":{\"default\":\"n con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0236\",\"mappings\":{\"default\":{\"default\":\"t con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0238\",\"mappings\":{\"default\":{\"default\":\"letra pequeña latina db digraph\"}}},{\"category\":\"Ll\",\"key\":\"0239\",\"mappings\":{\"default\":{\"default\":\"latín letra pequeña Qp Digraph\"}}},{\"category\":\"Ll\",\"key\":\"023F\",\"mappings\":{\"default\":{\"default\":\"s con cola cruzada\"}}},{\"category\":\"Ll\",\"key\":\"0240\",\"mappings\":{\"default\":{\"default\":\"z con cola swash\"}}},{\"category\":\"Ll\",\"key\":\"0242\",\"mappings\":{\"default\":{\"default\":\"latín letra pequeña parada glotal\"}}},{\"category\":\"Ll\",\"key\":\"024B\",\"mappings\":{\"default\":{\"default\":\"q con cola de gancho\"}}},{\"category\":\"Ll\",\"key\":\"0250\",\"mappings\":{\"default\":{\"default\":\"convertida en una\"}}},{\"category\":\"Ll\",\"key\":\"0251\",\"mappings\":{\"default\":{\"default\":\"alfa minúscula latina\"}}},{\"category\":\"Ll\",\"key\":\"0252\",\"mappings\":{\"default\":{\"default\":\"convertida en alfa\"}}},{\"category\":\"Ll\",\"key\":\"0253\",\"mappings\":{\"default\":{\"default\":\"b con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0254\",\"mappings\":{\"default\":{\"default\":\"abierta o\"}}},{\"category\":\"Ll\",\"key\":\"0255\",\"mappings\":{\"default\":{\"default\":\"c con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0256\",\"mappings\":{\"default\":{\"default\":\"d con cola\"}}},{\"category\":\"Ll\",\"key\":\"0257\",\"mappings\":{\"default\":{\"default\":\"d con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0258\",\"mappings\":{\"default\":{\"default\":\"invertida E\"}}},{\"category\":\"Ll\",\"key\":\"0259\",\"mappings\":{\"default\":{\"default\":\"schwa\"}}},{\"category\":\"Ll\",\"key\":\"025A\",\"mappings\":{\"default\":{\"default\":\"pequeña Schwa con gancho\"}}},{\"key\":\"025B\",\"mappings\":{\"default\":{\"default\":\"e abierta\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"025C\",\"mappings\":{\"default\":{\"default\":\"invertida abierta E\"}}},{\"category\":\"Ll\",\"key\":\"025D\",\"mappings\":{\"default\":{\"default\":\"letra pequeña latina invertida E abierta con gancho\"}}},{\"category\":\"Ll\",\"key\":\"025E\",\"mappings\":{\"default\":{\"default\":\"cerrada invertida abierta E\"}}},{\"category\":\"Ll\",\"key\":\"0260\",\"mappings\":{\"default\":{\"default\":\"g con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0261\",\"mappings\":{\"default\":{\"default\":\"escritura latina de letras pequeñas G\"}}},{\"category\":\"Ll\",\"key\":\"0263\",\"mappings\":{\"default\":{\"default\":\"latín letra pequeña gamma\"}}},{\"category\":\"Ll\",\"key\":\"0264\",\"mappings\":{\"default\":{\"default\":\"cuerno de carnero de letra pequeña latina\"}}},{\"category\":\"Ll\",\"key\":\"0265\",\"mappings\":{\"default\":{\"default\":\"girada h\"}}},{\"category\":\"Ll\",\"key\":\"0266\",\"mappings\":{\"default\":{\"default\":\"h con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0267\",\"mappings\":{\"default\":{\"default\":\"pequeña letra latina Heng con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0269\",\"mappings\":{\"default\":{\"default\":\"latín letra minúscula Iota\"}}},{\"category\":\"Ll\",\"key\":\"026B\",\"mappings\":{\"default\":{\"default\":\"l con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"026C\",\"mappings\":{\"default\":{\"default\":\"l con cinturón\"}}},{\"category\":\"Ll\",\"key\":\"026D\",\"mappings\":{\"default\":{\"default\":\"letra L latina pequeña con gancho Retroflex\"}}},{\"category\":\"Ll\",\"key\":\"026F\",\"mappings\":{\"default\":{\"default\":\"girada m\"}}},{\"category\":\"Ll\",\"key\":\"0270\",\"mappings\":{\"default\":{\"default\":\"vuelta M con pierna larga\"}}},{\"category\":\"Ll\",\"key\":\"0271\",\"mappings\":{\"default\":{\"default\":\"m con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0272\",\"mappings\":{\"default\":{\"default\":\"n con gancho izquierdo\"}}},{\"category\":\"Ll\",\"key\":\"0273\",\"mappings\":{\"default\":{\"default\":\"n con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"0275\",\"mappings\":{\"default\":{\"default\":\"letra minúscula omega\"}}},{\"category\":\"Ll\",\"key\":\"0277\",\"mappings\":{\"default\":{\"default\":\"latin Small Letter Closed Omega\"}}},{\"category\":\"Ll\",\"key\":\"0278\",\"mappings\":{\"default\":{\"default\":\"Letra pequeña latina\"}}},{\"category\":\"Ll\",\"key\":\"0279\",\"mappings\":{\"default\":{\"default\":\"vuelta r\"}}},{\"category\":\"Ll\",\"key\":\"027A\",\"mappings\":{\"default\":{\"default\":\"vuelta R con pierna larga\"}}},{\"category\":\"Ll\",\"key\":\"027B\",\"mappings\":{\"default\":{\"default\":\"vuelta R con gancho\"}}},{\"category\":\"Ll\",\"key\":\"027C\",\"mappings\":{\"default\":{\"default\":\"R con pierna larga\"}}},{\"category\":\"Ll\",\"key\":\"027D\",\"mappings\":{\"default\":{\"default\":\"R con cola\"}}},{\"category\":\"Ll\",\"key\":\"027E\",\"mappings\":{\"default\":{\"default\":\"R con anzuelo\"}}},{\"category\":\"Ll\",\"key\":\"027F\",\"mappings\":{\"default\":{\"default\":\"invertida R con anzuelo\"}}},{\"category\":\"Ll\",\"key\":\"0282\",\"mappings\":{\"default\":{\"default\":\"S con gancho\"}}},{\"category\":\"Ll\",\"key\":\"0283\",\"mappings\":{\"default\":{\"default\":\"Pequeña letra latina esh\"}}},{\"category\":\"Ll\",\"key\":\"0285\",\"mappings\":{\"default\":{\"default\":\"Latín letra pequeña en cuclillas invertida Esh\"}}},{\"category\":\"Ll\",\"key\":\"0286\",\"mappings\":{\"default\":{\"default\":\"Esh minúscula latina con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0287\",\"mappings\":{\"default\":{\"default\":\"vuelta t\"}}},{\"category\":\"Ll\",\"key\":\"0288\",\"mappings\":{\"default\":{\"default\":\"T con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"0289\",\"mappings\":{\"default\":{\"default\":\"Letra de letra pequeña latina U\"}}},{\"category\":\"Ll\",\"key\":\"028A\",\"mappings\":{\"default\":{\"default\":\"Upsilon\"}}},{\"category\":\"Ll\",\"key\":\"028B\",\"mappings\":{\"default\":{\"default\":\"V con gancho\"}}},{\"category\":\"Ll\",\"key\":\"028C\",\"mappings\":{\"default\":{\"default\":\"convertida V\"}}},{\"category\":\"Ll\",\"key\":\"028D\",\"mappings\":{\"default\":{\"default\":\"girada w\"}}},{\"category\":\"Ll\",\"key\":\"028E\",\"mappings\":{\"default\":{\"default\":\"vuelta y\"}}},{\"category\":\"Ll\",\"key\":\"0290\",\"mappings\":{\"default\":{\"default\":\"Z con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"0291\",\"mappings\":{\"default\":{\"default\":\"z con rizo\"}}},{\"category\":\"Ll\",\"key\":\"0295\",\"mappings\":{\"default\":{\"default\":\"faríngea con voz fricativa\"}}},{\"category\":\"Ll\",\"key\":\"0296\",\"mappings\":{\"default\":{\"default\":\"invertida parada glotal\"}}},{\"category\":\"Ll\",\"key\":\"0297\",\"mappings\":{\"default\":{\"default\":\"estirada c\"}}},{\"category\":\"Ll\",\"key\":\"0298\",\"mappings\":{\"default\":{\"default\":\"Carta Bilabial Click\"}}},{\"category\":\"Ll\",\"key\":\"029A\",\"mappings\":{\"default\":{\"default\":\"cerrada abierta e\"}}},{\"category\":\"Ll\",\"key\":\"029E\",\"mappings\":{\"default\":{\"default\":\"vuelta k\"}}},{\"category\":\"Ll\",\"key\":\"02A0\",\"mappings\":{\"default\":{\"default\":\"q con gancho\"}}},{\"category\":\"Ll\",\"key\":\"02A3\",\"mappings\":{\"default\":{\"default\":\"pequeña letra Dz Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A5\",\"mappings\":{\"default\":{\"default\":\"Letra pequeña latina Dz Digraph con Curl\"}}},{\"category\":\"Ll\",\"key\":\"02A6\",\"mappings\":{\"default\":{\"default\":\"Latín letra pequeña Ts Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A7\",\"mappings\":{\"default\":{\"default\":\"Letra pequeña latina Tesh Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02A8\",\"mappings\":{\"default\":{\"default\":\"Latín letra pequeña Tc Digraph con Curl\"}}},{\"category\":\"Ll\",\"key\":\"02A9\",\"mappings\":{\"default\":{\"default\":\"Letra pequeña latina Feng Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AA\",\"mappings\":{\"default\":{\"default\":\"pequeña letra Ls Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AB\",\"mappings\":{\"default\":{\"default\":\"pequeña letra Lz Digraph\"}}},{\"category\":\"Ll\",\"key\":\"02AC\",\"mappings\":{\"default\":{\"default\":\"percusion bilabial\"}}},{\"category\":\"Ll\",\"key\":\"02AD\",\"mappings\":{\"default\":{\"default\":\"de percusión bidental\"}}},{\"category\":\"Ll\",\"key\":\"02AE\",\"mappings\":{\"default\":{\"default\":\"convertida en H con anzuelo\"}}},{\"category\":\"Ll\",\"key\":\"02AF\",\"mappings\":{\"default\":{\"default\":\"convertida en H con anzuelo y cola\"}}},{\"category\":\"Ll\",\"key\":\"1D02\",\"mappings\":{\"default\":{\"default\":\"vuelta ae\"}}},{\"category\":\"Ll\",\"key\":\"1D08\",\"mappings\":{\"default\":{\"default\":\"convertida abierta E\"}}},{\"category\":\"Ll\",\"key\":\"1D09\",\"mappings\":{\"default\":{\"default\":\"convertida i\"}}},{\"category\":\"Ll\",\"key\":\"1D11\",\"mappings\":{\"default\":{\"default\":\"de lado O\"}}},{\"category\":\"Ll\",\"key\":\"1D12\",\"mappings\":{\"default\":{\"default\":\"de lado abierto O\"}}},{\"category\":\"Ll\",\"key\":\"1D14\",\"mappings\":{\"default\":{\"default\":\"vuelta oe\"}}},{\"category\":\"Ll\",\"key\":\"1D16\",\"mappings\":{\"default\":{\"default\":\"mitad superior O\"}}},{\"category\":\"Ll\",\"key\":\"1D17\",\"mappings\":{\"default\":{\"default\":\"Letra latina, letra inferior, mitad inferior O\"}}},{\"category\":\"Ll\",\"key\":\"1D1D\",\"mappings\":{\"default\":{\"default\":\"hacia los lados U\"}}},{\"category\":\"Ll\",\"key\":\"1D1E\",\"mappings\":{\"default\":{\"default\":\"de lado diaeresizada U\"}}},{\"category\":\"Ll\",\"key\":\"1D1F\",\"mappings\":{\"default\":{\"default\":\"girada hacia los lados M\"}}},{\"category\":\"Ll\",\"key\":\"1D24\",\"mappings\":{\"default\":{\"default\":\"Carta latina expresada espirante laríngeo\"}}},{\"category\":\"Ll\",\"key\":\"1D25\",\"mappings\":{\"default\":{\"default\":\"ain\"}}},{\"category\":\"Ll\",\"key\":\"1D6B\",\"mappings\":{\"default\":{\"default\":\"ue\"}}},{\"category\":\"Ll\",\"key\":\"1D6C\",\"mappings\":{\"default\":{\"default\":\"B con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D6D\",\"mappings\":{\"default\":{\"default\":\"D con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D6E\",\"mappings\":{\"default\":{\"default\":\"F con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D6F\",\"mappings\":{\"default\":{\"default\":\"M con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D70\",\"mappings\":{\"default\":{\"default\":\"N con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D71\",\"mappings\":{\"default\":{\"default\":\"P con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D72\",\"mappings\":{\"default\":{\"default\":\"R con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D73\",\"mappings\":{\"default\":{\"default\":\"R con anzuelo y tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D74\",\"mappings\":{\"default\":{\"default\":\"S con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D75\",\"mappings\":{\"default\":{\"default\":\"T con tilde medio\"}}},{\"category\":\"Ll\",\"key\":\"1D76\",\"mappings\":{\"default\":{\"default\":\"z con tilde media\"}}},{\"category\":\"Ll\",\"key\":\"1D77\",\"mappings\":{\"default\":{\"default\":\"girada g\"}}},{\"category\":\"Ll\",\"key\":\"1D79\",\"mappings\":{\"default\":{\"default\":\"insular g\"}}},{\"category\":\"Ll\",\"key\":\"1D7A\",\"mappings\":{\"default\":{\"default\":\"th con tachado\"}}},{\"category\":\"Ll\",\"key\":\"1D80\",\"mappings\":{\"default\":{\"default\":\"B con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D81\",\"mappings\":{\"default\":{\"default\":\"D con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D82\",\"mappings\":{\"default\":{\"default\":\"F con gancho palatino\"}}},{\"category\":\"Ll\",\"key\":\"1D83\",\"mappings\":{\"default\":{\"default\":\"G con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D84\",\"mappings\":{\"default\":{\"default\":\"K con gancho palatino\"}}},{\"category\":\"Ll\",\"key\":\"1D85\",\"mappings\":{\"default\":{\"default\":\"L con gancho palatino\"}}},{\"category\":\"Ll\",\"key\":\"1D86\",\"mappings\":{\"default\":{\"default\":\"M con gancho palatino\"}}},{\"category\":\"Ll\",\"key\":\"1D87\",\"mappings\":{\"default\":{\"default\":\"N con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D88\",\"mappings\":{\"default\":{\"default\":\"P con gancho palatino\"}}},{\"category\":\"Ll\",\"key\":\"1D89\",\"mappings\":{\"default\":{\"default\":\"R con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8A\",\"mappings\":{\"default\":{\"default\":\"S con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8B\",\"mappings\":{\"default\":{\"default\":\"Pequeña letra latina Esh con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8C\",\"mappings\":{\"default\":{\"default\":\"V con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8D\",\"mappings\":{\"default\":{\"default\":\"X con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8E\",\"mappings\":{\"default\":{\"default\":\"Z con gancho palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8F\",\"mappings\":{\"default\":{\"default\":\"a con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D90\",\"mappings\":{\"default\":{\"default\":\"Alfa latina pequeña letra con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D91\",\"mappings\":{\"default\":{\"default\":\"D con gancho y cola\"}}},{\"category\":\"Ll\",\"key\":\"1D92\",\"mappings\":{\"default\":{\"default\":\"pequeña E con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D93\",\"mappings\":{\"default\":{\"default\":\"E Pequeña Open con Gancho Retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D94\",\"mappings\":{\"default\":{\"default\":\"E abierta invertido con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D95\",\"mappings\":{\"default\":{\"default\":\"pequeña Schwa con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D96\",\"mappings\":{\"default\":{\"default\":\"I con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D97\",\"mappings\":{\"default\":{\"default\":\"pequeña latina Open O con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D98\",\"mappings\":{\"default\":{\"default\":\"Esh de letra pequeña latina con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D99\",\"mappings\":{\"default\":{\"default\":\"U con gancho retroflex\"}}},{\"category\":\"Ll\",\"key\":\"1D9A\",\"mappings\":{\"default\":{\"default\":\"pequeña Ezh con gancho retroflex\"}}},{\"key\":\"0149\",\"mappings\":{\"default\":{\"default\":\"n precedida por apóstrofe\"}},\"category\":\"Ll\"},{\"key\":\"014B\",\"mappings\":{\"default\":{\"default\":\"eng\"}},\"category\":\"Ll\"}]\n,\n\"es/symbols/latin-lower-single-accent.js\": \n[{\"locale\":\"es\"},{\"key\":\"00E0\",\"mappings\":{\"default\":{\"default\":\"a grave\"}},\"category\":\"Ll\"},{\"key\":\"00E1\",\"mappings\":{\"default\":{\"default\":\"a aguda\"}},\"category\":\"Ll\"},{\"key\":\"00E2\",\"mappings\":{\"default\":{\"default\":\"a acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"00E3\",\"mappings\":{\"default\":{\"default\":\"a con tilde\"}},\"category\":\"Ll\"},{\"key\":\"00E4\",\"mappings\":{\"default\":{\"default\":\"a diéresis\"}},\"category\":\"Ll\"},{\"key\":\"00E5\",\"mappings\":{\"default\":{\"default\":\"a con anillo\"}},\"category\":\"Ll\"},{\"key\":\"00E7\",\"mappings\":{\"default\":{\"default\":\"c cedilla\"}},\"category\":\"Ll\"},{\"key\":\"00E8\",\"mappings\":{\"default\":{\"default\":\"e grave\"}},\"category\":\"Ll\"},{\"key\":\"00E9\",\"mappings\":{\"default\":{\"default\":\"e aguda\"}},\"category\":\"Ll\"},{\"key\":\"00EA\",\"mappings\":{\"default\":{\"default\":\"e acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"00EB\",\"mappings\":{\"default\":{\"default\":\"e diéresis\"}},\"category\":\"Ll\"},{\"key\":\"00EC\",\"mappings\":{\"default\":{\"default\":\"i grave\"}},\"category\":\"Ll\"},{\"key\":\"00ED\",\"mappings\":{\"default\":{\"default\":\"i aguda\"}},\"category\":\"Ll\"},{\"key\":\"00EE\",\"mappings\":{\"default\":{\"default\":\"i acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"00EF\",\"mappings\":{\"default\":{\"default\":\"i diéresis\"}},\"category\":\"Ll\"},{\"key\":\"00F1\",\"mappings\":{\"default\":{\"default\":\"eñe\"}},\"category\":\"Ll\"},{\"key\":\"00F2\",\"mappings\":{\"default\":{\"default\":\"o grave\"}},\"category\":\"Ll\"},{\"key\":\"00F3\",\"mappings\":{\"default\":{\"default\":\"o aguda\"}},\"category\":\"Ll\"},{\"key\":\"00F4\",\"mappings\":{\"default\":{\"default\":\"o acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"00F5\",\"mappings\":{\"default\":{\"default\":\"o con tilde\"}},\"category\":\"Ll\"},{\"key\":\"00F6\",\"mappings\":{\"default\":{\"default\":\"o diéresis\"}},\"category\":\"Ll\"},{\"key\":\"00F9\",\"mappings\":{\"default\":{\"default\":\"u grave\"}},\"category\":\"Ll\"},{\"key\":\"00FA\",\"mappings\":{\"default\":{\"default\":\"u aguda\"}},\"category\":\"Ll\"},{\"key\":\"00FB\",\"mappings\":{\"default\":{\"default\":\"u acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"00FC\",\"mappings\":{\"default\":{\"default\":\"u diéresis\"}},\"category\":\"Ll\"},{\"key\":\"00FD\",\"mappings\":{\"default\":{\"default\":\"Y aguda\",\"defaultMP\":\"ye aguda\"}},\"category\":\"Ll\"},{\"key\":\"00FF\",\"mappings\":{\"default\":{\"default\":\"y diéresis\",\"defaultMP\":\"ye diéresis\"}},\"category\":\"Ll\"},{\"key\":\"0101\",\"mappings\":{\"default\":{\"default\":\"a barra\"}},\"category\":\"Ll\"},{\"key\":\"0103\",\"mappings\":{\"default\":{\"default\":\"a con breve\"}},\"category\":\"Ll\"},{\"key\":\"0105\",\"mappings\":{\"default\":{\"default\":\"a con ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0107\",\"mappings\":{\"default\":{\"default\":\"c con agudo\"}},\"category\":\"Ll\"},{\"key\":\"0109\",\"mappings\":{\"default\":{\"default\":\"c con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"010B\",\"mappings\":{\"default\":{\"default\":\"c con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"010D\",\"mappings\":{\"default\":{\"default\":\"c con carón\"}},\"category\":\"Ll\"},{\"key\":\"010F\",\"mappings\":{\"default\":{\"default\":\"d con carón\"}},\"category\":\"Ll\"},{\"key\":\"0113\",\"mappings\":{\"default\":{\"default\":\"e barra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0115\",\"mappings\":{\"default\":{\"default\":\"e con breve\"}}},{\"key\":\"0117\",\"mappings\":{\"default\":{\"default\":\"e con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"0119\",\"mappings\":{\"default\":{\"default\":\"e con ogonek\"}},\"category\":\"Ll\"},{\"key\":\"011B\",\"mappings\":{\"default\":{\"default\":\"e con carón\"}},\"category\":\"Ll\"},{\"key\":\"011D\",\"mappings\":{\"default\":{\"default\":\"g con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"011F\",\"mappings\":{\"default\":{\"default\":\"g con breve\"}},\"category\":\"Ll\"},{\"key\":\"0121\",\"mappings\":{\"default\":{\"default\":\"g con punto arriba\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0123\",\"mappings\":{\"default\":{\"default\":\"g con cedilla\"}}},{\"key\":\"0125\",\"mappings\":{\"default\":{\"default\":\"h con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"0129\",\"mappings\":{\"default\":{\"default\":\"i con tilde\"}},\"category\":\"Ll\"},{\"key\":\"012B\",\"mappings\":{\"default\":{\"default\":\"i barra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"012D\",\"mappings\":{\"default\":{\"default\":\"i con breve\"}}},{\"key\":\"012F\",\"mappings\":{\"default\":{\"default\":\"i con ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0131\",\"mappings\":{\"default\":{\"default\":\"i sin punto\"}},\"category\":\"Ll\"},{\"key\":\"0135\",\"mappings\":{\"default\":{\"default\":\"j con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"0137\",\"mappings\":{\"default\":{\"default\":\"k con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"013A\",\"mappings\":{\"default\":{\"default\":\"l con agudo\"}},\"category\":\"Ll\"},{\"key\":\"013C\",\"mappings\":{\"default\":{\"default\":\"l con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"013E\",\"mappings\":{\"default\":{\"default\":\"l con carón\"}},\"category\":\"Ll\"},{\"key\":\"0140\",\"mappings\":{\"default\":{\"default\":\"l con punto mediano\"}},\"category\":\"Ll\"},{\"key\":\"0144\",\"mappings\":{\"default\":{\"default\":\"n con agudo\"}},\"category\":\"Ll\"},{\"key\":\"0146\",\"mappings\":{\"default\":{\"default\":\"n con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"0148\",\"mappings\":{\"default\":{\"default\":\"n con carón\"}},\"category\":\"Ll\"},{\"key\":\"014D\",\"mappings\":{\"default\":{\"default\":\"o barra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"014F\",\"mappings\":{\"default\":{\"default\":\"o con breve\"}}},{\"key\":\"0151\",\"mappings\":{\"default\":{\"default\":\"o con doble acento agudo\"}},\"category\":\"Ll\"},{\"key\":\"0155\",\"mappings\":{\"default\":{\"default\":\"r con agudo\"}},\"category\":\"Ll\"},{\"key\":\"0157\",\"mappings\":{\"default\":{\"default\":\"r con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"0159\",\"mappings\":{\"default\":{\"default\":\"r con carón\"}},\"category\":\"Ll\"},{\"key\":\"015B\",\"mappings\":{\"default\":{\"default\":\"s con agudo\"}},\"category\":\"Ll\"},{\"key\":\"015D\",\"mappings\":{\"default\":{\"default\":\"s con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"015F\",\"mappings\":{\"default\":{\"default\":\"s con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"0161\",\"mappings\":{\"default\":{\"default\":\"s con carón\"}},\"category\":\"Ll\"},{\"key\":\"0163\",\"mappings\":{\"default\":{\"default\":\"t con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"0165\",\"mappings\":{\"default\":{\"default\":\"t con carón\"}},\"category\":\"Ll\"},{\"key\":\"0169\",\"mappings\":{\"default\":{\"default\":\"u con tilde\"}},\"category\":\"Ll\"},{\"key\":\"016B\",\"mappings\":{\"default\":{\"default\":\"u barra\"}},\"category\":\"Ll\"},{\"key\":\"016D\",\"mappings\":{\"default\":{\"default\":\"u con breve\"}},\"category\":\"Ll\"},{\"key\":\"016F\",\"mappings\":{\"default\":{\"default\":\"u con anillo arriba\"}},\"category\":\"Ll\"},{\"key\":\"0171\",\"mappings\":{\"default\":{\"default\":\"u con doble acento agudo\"}},\"category\":\"Ll\"},{\"key\":\"0173\",\"mappings\":{\"default\":{\"default\":\"u con ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0175\",\"mappings\":{\"default\":{\"default\":\"w con circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"0177\",\"mappings\":{\"default\":{\"default\":\"y con circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"017A\",\"mappings\":{\"default\":{\"default\":\"z con agudo\"}},\"category\":\"Ll\"},{\"key\":\"017C\",\"mappings\":{\"default\":{\"default\":\"z con punto\"}},\"category\":\"Ll\"},{\"key\":\"017E\",\"mappings\":{\"default\":{\"default\":\"z con carón\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01CE\",\"mappings\":{\"default\":{\"default\":\"a con acento\"}}},{\"category\":\"Ll\",\"key\":\"01D0\",\"mappings\":{\"default\":{\"default\":\"i con acento\"}}},{\"category\":\"Ll\",\"key\":\"01D2\",\"mappings\":{\"default\":{\"default\":\"o con acento\"}}},{\"category\":\"Ll\",\"key\":\"01D4\",\"mappings\":{\"default\":{\"default\":\"u con acento\"}}},{\"category\":\"Ll\",\"key\":\"01E7\",\"mappings\":{\"default\":{\"default\":\"g con acento\"}}},{\"category\":\"Ll\",\"key\":\"01E9\",\"mappings\":{\"default\":{\"default\":\"k con acento\"}}},{\"category\":\"Ll\",\"key\":\"01EB\",\"mappings\":{\"default\":{\"default\":\"o con pecíolo\"}}},{\"category\":\"Ll\",\"key\":\"01F0\",\"mappings\":{\"default\":{\"default\":\"j con acento\"}}},{\"key\":\"01F5\",\"mappings\":{\"default\":{\"default\":\"g con agudo\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01F9\",\"mappings\":{\"default\":{\"default\":\"n con grave\"}}},{\"category\":\"Ll\",\"key\":\"0201\",\"mappings\":{\"default\":{\"default\":\"a con doble tumba\"}}},{\"category\":\"Ll\",\"key\":\"0203\",\"mappings\":{\"default\":{\"default\":\"a con letras invertidas\"}}},{\"category\":\"Ll\",\"key\":\"0205\",\"mappings\":{\"default\":{\"default\":\"e con doble tumba\"}}},{\"category\":\"Ll\",\"key\":\"0207\",\"mappings\":{\"default\":{\"default\":\"e con letras invertidas\"}}},{\"category\":\"Ll\",\"key\":\"0209\",\"mappings\":{\"default\":{\"default\":\"i con doble tumba\"}}},{\"category\":\"Ll\",\"key\":\"020B\",\"mappings\":{\"default\":{\"default\":\"i con Breve invertida\"}}},{\"category\":\"Ll\",\"key\":\"020D\",\"mappings\":{\"default\":{\"default\":\"o con doble tumba\"}}},{\"category\":\"Ll\",\"key\":\"020F\",\"mappings\":{\"default\":{\"default\":\"o con letras invertidas\"}}},{\"category\":\"Ll\",\"key\":\"0211\",\"mappings\":{\"default\":{\"default\":\"r con doble sepulcro\"}}},{\"category\":\"Ll\",\"key\":\"0213\",\"mappings\":{\"default\":{\"default\":\"r con letras invertidas\"}}},{\"category\":\"Ll\",\"key\":\"0215\",\"mappings\":{\"default\":{\"default\":\"u con doble tumba\"}}},{\"category\":\"Ll\",\"key\":\"0217\",\"mappings\":{\"default\":{\"default\":\"u con letras invertidas\"}}},{\"category\":\"Ll\",\"key\":\"0219\",\"mappings\":{\"default\":{\"default\":\"s con coma debajo\"}}},{\"category\":\"Ll\",\"key\":\"021B\",\"mappings\":{\"default\":{\"default\":\"t con coma debajo\"}}},{\"category\":\"Ll\",\"key\":\"021F\",\"mappings\":{\"default\":{\"default\":\"h con caron\"}}},{\"category\":\"Ll\",\"key\":\"0227\",\"mappings\":{\"default\":{\"default\":\"con un punto arriba\"}}},{\"category\":\"Ll\",\"key\":\"0229\",\"mappings\":{\"default\":{\"default\":\"e con cedilla\"}}},{\"category\":\"Ll\",\"key\":\"022F\",\"mappings\":{\"default\":{\"default\":\"o con punto arriba\"}}},{\"category\":\"Ll\",\"key\":\"0233\",\"mappings\":{\"default\":{\"default\":\"y con Macron\"}}},{\"category\":\"Ll\",\"key\":\"0237\",\"mappings\":{\"default\":{\"default\":\"s in punto j\"}}},{\"key\":\"1E01\",\"mappings\":{\"default\":{\"default\":\"a con anillo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E03\",\"mappings\":{\"default\":{\"default\":\"b con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E05\",\"mappings\":{\"default\":{\"default\":\"b con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E07\",\"mappings\":{\"default\":{\"default\":\"b con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E0B\",\"mappings\":{\"default\":{\"default\":\"d con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E0D\",\"mappings\":{\"default\":{\"default\":\"d con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E0F\",\"mappings\":{\"default\":{\"default\":\"d con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E11\",\"mappings\":{\"default\":{\"default\":\"d con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"1E13\",\"mappings\":{\"default\":{\"default\":\"d con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E19\",\"mappings\":{\"default\":{\"default\":\"e con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E1B\",\"mappings\":{\"default\":{\"default\":\"e con tilde debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E1F\",\"mappings\":{\"default\":{\"default\":\"f con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E21\",\"mappings\":{\"default\":{\"default\":\"g con macrón\"}},\"category\":\"Ll\"},{\"key\":\"1E23\",\"mappings\":{\"default\":{\"default\":\"h con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E25\",\"mappings\":{\"default\":{\"default\":\"h con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E27\",\"mappings\":{\"default\":{\"default\":\"h con diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1E29\",\"mappings\":{\"default\":{\"default\":\"h con cedilla\"}},\"category\":\"Ll\"},{\"key\":\"1E2B\",\"mappings\":{\"default\":{\"default\":\"h con breve debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E2D\",\"mappings\":{\"default\":{\"default\":\"i con tilde debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E31\",\"mappings\":{\"default\":{\"default\":\"k con agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E33\",\"mappings\":{\"default\":{\"default\":\"k con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E35\",\"mappings\":{\"default\":{\"default\":\"k con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E37\",\"mappings\":{\"default\":{\"default\":\"l con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E3B\",\"mappings\":{\"default\":{\"default\":\"l con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E3D\",\"mappings\":{\"default\":{\"default\":\"l con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E3F\",\"mappings\":{\"default\":{\"default\":\"m con agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E41\",\"mappings\":{\"default\":{\"default\":\"m con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E43\",\"mappings\":{\"default\":{\"default\":\"m con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E45\",\"mappings\":{\"default\":{\"default\":\"n con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E47\",\"mappings\":{\"default\":{\"default\":\"n con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E49\",\"mappings\":{\"default\":{\"default\":\"n con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E4B\",\"mappings\":{\"default\":{\"default\":\"n con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E55\",\"mappings\":{\"default\":{\"default\":\"p con agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E57\",\"mappings\":{\"default\":{\"default\":\"p con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E59\",\"mappings\":{\"default\":{\"default\":\"r con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E5B\",\"mappings\":{\"default\":{\"default\":\"r con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E5F\",\"mappings\":{\"default\":{\"default\":\"r con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E61\",\"mappings\":{\"default\":{\"default\":\"s con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E63\",\"mappings\":{\"default\":{\"default\":\"s con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E6B\",\"mappings\":{\"default\":{\"default\":\"t con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E6D\",\"mappings\":{\"default\":{\"default\":\"t con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E6F\",\"mappings\":{\"default\":{\"default\":\"t con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E71\",\"mappings\":{\"default\":{\"default\":\"t con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E73\",\"mappings\":{\"default\":{\"default\":\"u con diéresis debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E75\",\"mappings\":{\"default\":{\"default\":\"u con tilde debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E77\",\"mappings\":{\"default\":{\"default\":\"u con acento circunflejo debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E7D\",\"mappings\":{\"default\":{\"default\":\"v con tilde\"}},\"category\":\"Ll\"},{\"key\":\"1E7F\",\"mappings\":{\"default\":{\"default\":\"v con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E81\",\"mappings\":{\"default\":{\"default\":\"w con grave\"}},\"category\":\"Ll\"},{\"key\":\"1E83\",\"mappings\":{\"default\":{\"default\":\"w con agudo\"}},\"category\":\"Ll\"},{\"key\":\"1E85\",\"mappings\":{\"default\":{\"default\":\"w con diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1E87\",\"mappings\":{\"default\":{\"default\":\"w con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E89\",\"mappings\":{\"default\":{\"default\":\"w con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E8B\",\"mappings\":{\"default\":{\"default\":\"x con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E8D\",\"mappings\":{\"default\":{\"default\":\"x con diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1E8F\",\"mappings\":{\"default\":{\"default\":\"y con punto arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E91\",\"mappings\":{\"default\":{\"default\":\"z con acento circunflejo\"}},\"category\":\"Ll\"},{\"key\":\"1E93\",\"mappings\":{\"default\":{\"default\":\"z con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E95\",\"mappings\":{\"default\":{\"default\":\"z con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E96\",\"mappings\":{\"default\":{\"default\":\"h con línea debajo\"}},\"category\":\"Ll\"},{\"key\":\"1E97\",\"mappings\":{\"default\":{\"default\":\"t con diéresis\"}},\"category\":\"Ll\"},{\"key\":\"1E98\",\"mappings\":{\"default\":{\"default\":\"w con anillo arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E99\",\"mappings\":{\"default\":{\"default\":\"y con anillo arriba\"}},\"category\":\"Ll\"},{\"key\":\"1E9A\",\"mappings\":{\"default\":{\"default\":\"a con medio derecho de anillo\"}},\"category\":\"Ll\"},{\"key\":\"1EA1\",\"mappings\":{\"default\":{\"default\":\"a con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EA3\",\"mappings\":{\"default\":{\"default\":\"a con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EB9\",\"mappings\":{\"default\":{\"default\":\"e con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EBB\",\"mappings\":{\"default\":{\"default\":\"e con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EBD\",\"mappings\":{\"default\":{\"default\":\"e con tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EC9\",\"mappings\":{\"default\":{\"default\":\"i con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1ECB\",\"mappings\":{\"default\":{\"default\":\"i con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1ECD\",\"mappings\":{\"default\":{\"default\":\"o con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1ECF\",\"mappings\":{\"default\":{\"default\":\"o con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EE5\",\"mappings\":{\"default\":{\"default\":\"u con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EE7\",\"mappings\":{\"default\":{\"default\":\"u con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EF3\",\"mappings\":{\"default\":{\"default\":\"y con grave\"}},\"category\":\"Ll\"},{\"key\":\"1EF5\",\"mappings\":{\"default\":{\"default\":\"y con punto debajo\"}},\"category\":\"Ll\"},{\"key\":\"1EF7\",\"mappings\":{\"default\":{\"default\":\"y con gancho arriba\"}},\"category\":\"Ll\"},{\"key\":\"1EF9\",\"mappings\":{\"default\":{\"default\":\"y con tilde\"}},\"category\":\"Ll\"}]\n,\n\"es/symbols/latin-rest.js\": \n[{\"locale\":\"es\"},{\"category\":\"Ll\",\"key\":\"210E\",\"mappings\":{\"default\":{\"default\":\"constante de planck\"}}},{\"category\":\"Mn\",\"key\":\"0363\",\"mappings\":{\"default\":{\"default\":\"combinando a\"}}},{\"category\":\"Mn\",\"key\":\"0364\",\"mappings\":{\"default\":{\"default\":\"combinando e\"}}},{\"category\":\"Mn\",\"key\":\"0365\",\"mappings\":{\"default\":{\"default\":\"combinando i\"}}},{\"category\":\"Mn\",\"key\":\"0366\",\"mappings\":{\"default\":{\"default\":\"combinando o\"}}},{\"category\":\"Mn\",\"key\":\"0367\",\"mappings\":{\"default\":{\"default\":\"combinando u\"}}},{\"category\":\"Mn\",\"key\":\"0368\",\"mappings\":{\"default\":{\"default\":\"combinando c\"}}},{\"category\":\"Mn\",\"key\":\"0369\",\"mappings\":{\"default\":{\"default\":\"combinando d\"}}},{\"category\":\"Mn\",\"key\":\"036A\",\"mappings\":{\"default\":{\"default\":\"combinando h\"}}},{\"category\":\"Mn\",\"key\":\"036B\",\"mappings\":{\"default\":{\"default\":\"combinando m\"}}},{\"category\":\"Mn\",\"key\":\"036C\",\"mappings\":{\"default\":{\"default\":\"combinando r\"}}},{\"category\":\"Mn\",\"key\":\"036D\",\"mappings\":{\"default\":{\"default\":\"combinando t\"}}},{\"category\":\"Mn\",\"key\":\"036E\",\"mappings\":{\"default\":{\"default\":\"combinando v\"}}},{\"category\":\"Mn\",\"key\":\"036F\",\"mappings\":{\"default\":{\"default\":\"combinando x\"}}},{\"category\":\"Lm\",\"key\":\"1D62\",\"mappings\":{\"default\":{\"default\":\"subíndice i\"}}},{\"category\":\"Lm\",\"key\":\"1D63\",\"mappings\":{\"default\":{\"default\":\"subíndice r\"}}},{\"category\":\"Lm\",\"key\":\"1D64\",\"mappings\":{\"default\":{\"default\":\"subíndice u\"}}},{\"category\":\"Lm\",\"key\":\"1D65\",\"mappings\":{\"default\":{\"default\":\"subíndice latino letra pequeña V\"}}},{\"category\":\"Mn\",\"key\":\"1DCA\",\"mappings\":{\"default\":{\"default\":\"combinando r abajo\"}}},{\"category\":\"Mn\",\"key\":\"1DD3\",\"mappings\":{\"default\":{\"default\":\"combinando letra minúscula en latín, aplanado, abierto arriba\"}}},{\"category\":\"Mn\",\"key\":\"1DD4\",\"mappings\":{\"default\":{\"default\":\"combinando ae\"}}},{\"category\":\"Mn\",\"key\":\"1DD5\",\"mappings\":{\"default\":{\"default\":\"combinando ao\"}}},{\"category\":\"Mn\",\"key\":\"1DD6\",\"mappings\":{\"default\":{\"default\":\"combinando av\"}}},{\"category\":\"Mn\",\"key\":\"1DD7\",\"mappings\":{\"default\":{\"default\":\"combinando Letra Pequeña Latina C Cedilla\"}}},{\"category\":\"Mn\",\"key\":\"1DD8\",\"mappings\":{\"default\":{\"default\":\"combinando insular d\"}}},{\"category\":\"Mn\",\"key\":\"1DD9\",\"mappings\":{\"default\":{\"default\":\"combinando la eth\"}}},{\"category\":\"Mn\",\"key\":\"1DDA\",\"mappings\":{\"default\":{\"default\":\"combinando g\"}}},{\"category\":\"Mn\",\"key\":\"1DDB\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña mayúscula G\"}}},{\"category\":\"Mn\",\"key\":\"1DDC\",\"mappings\":{\"default\":{\"default\":\"combinando k\"}}},{\"category\":\"Mn\",\"key\":\"1DDD\",\"mappings\":{\"default\":{\"default\":\"combinando l\"}}},{\"category\":\"Mn\",\"key\":\"1DDE\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña mayúscula L\"}}},{\"category\":\"Mn\",\"key\":\"1DDF\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña mayúscula M\"}}},{\"category\":\"Mn\",\"key\":\"1DE0\",\"mappings\":{\"default\":{\"default\":\"combinando n\"}}},{\"category\":\"Mn\",\"key\":\"1DE1\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña mayúscula N\"}}},{\"category\":\"Mn\",\"key\":\"1DE2\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña mayúscula R\"}}},{\"category\":\"Mn\",\"key\":\"1DE3\",\"mappings\":{\"default\":{\"default\":\"combinando pequeña r rotunda\"}}},{\"category\":\"Mn\",\"key\":\"1DE4\",\"mappings\":{\"default\":{\"default\":\"combinando s\"}}},{\"category\":\"Mn\",\"key\":\"1DE5\",\"mappings\":{\"default\":{\"default\":\"combinando larga s\"}}},{\"category\":\"Mn\",\"key\":\"1DE6\",\"mappings\":{\"default\":{\"default\":\"combinando z\"}}},{\"category\":\"Lm\",\"key\":\"2071\",\"mappings\":{\"default\":{\"default\":\"superíndice i\"}}},{\"category\":\"Lm\",\"key\":\"207F\",\"mappings\":{\"default\":{\"default\":\"superíndice n\"}}},{\"category\":\"Lm\",\"key\":\"2090\",\"mappings\":{\"default\":{\"default\":\"subíndice a\"}}},{\"category\":\"Lm\",\"key\":\"2091\",\"mappings\":{\"default\":{\"default\":\"subíndice e\"}}},{\"category\":\"Lm\",\"key\":\"2092\",\"mappings\":{\"default\":{\"default\":\"subíndice o\"}}},{\"category\":\"Lm\",\"key\":\"2093\",\"mappings\":{\"default\":{\"default\":\"subíndice x\"}}},{\"category\":\"Lm\",\"key\":\"2094\",\"mappings\":{\"default\":{\"default\":\"subíndice schwa\"}}},{\"category\":\"Lm\",\"key\":\"2095\",\"mappings\":{\"default\":{\"default\":\"subíndice h\"}}},{\"category\":\"Lm\",\"key\":\"2096\",\"mappings\":{\"default\":{\"default\":\"subíndice k\"}}},{\"category\":\"Lm\",\"key\":\"2097\",\"mappings\":{\"default\":{\"default\":\"subíndice l\"}}},{\"category\":\"Lm\",\"key\":\"2098\",\"mappings\":{\"default\":{\"default\":\"subíndice m\"}}},{\"category\":\"Lm\",\"key\":\"2099\",\"mappings\":{\"default\":{\"default\":\"subíndice n\"}}},{\"category\":\"Lm\",\"key\":\"209A\",\"mappings\":{\"default\":{\"default\":\"subíndice p\"}}},{\"category\":\"Lm\",\"key\":\"209B\",\"mappings\":{\"default\":{\"default\":\"subíndice s\"}}},{\"category\":\"Lm\",\"key\":\"209C\",\"mappings\":{\"default\":{\"default\":\"subíndice t\"}}},{\"category\":\"Lm\",\"key\":\"2C7C\",\"mappings\":{\"default\":{\"default\":\"subíndice j\"}}},{\"category\":\"So\",\"key\":\"1F12A\",\"mappings\":{\"default\":{\"default\":\"concha de tortuga con corchetes mayúscula S\"}}},{\"category\":\"So\",\"key\":\"1F12B\",\"mappings\":{\"default\":{\"default\":\"círculo itálico mayúscula C\"}}},{\"category\":\"So\",\"key\":\"1F12C\",\"mappings\":{\"default\":{\"default\":\"círculo itálico mayúscula R\"}}},{\"category\":\"So\",\"key\":\"1F18A\",\"mappings\":{\"default\":{\"default\":\"cruzada negativa cuadrada Mayúscula P\"}}}]\n,\n\"es/symbols/latin-upper-double-accent.js\": \n[{\"locale\":\"es\"},{\"category\":\"Lu\",\"key\":\"01D5\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con diéresis y macron\"}}},{\"category\":\"Lu\",\"key\":\"01D7\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con diéresis y acento agudo\"}}},{\"category\":\"Lu\",\"key\":\"01D9\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con diéresis y acento\"}}},{\"category\":\"Lu\",\"key\":\"01DB\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con diéresis y grave\"}}},{\"category\":\"Lu\",\"key\":\"01DE\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con diéresis y macron\"}}},{\"category\":\"Lu\",\"key\":\"01E0\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con punto arriba y macron\"}}},{\"category\":\"Lu\",\"key\":\"01EC\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con pecíolo y macron\"}}},{\"category\":\"Lu\",\"key\":\"01FA\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con ring above y acento agudo\"}}},{\"category\":\"Lu\",\"key\":\"022A\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con diaéresis y macron\"}}},{\"category\":\"Lu\",\"key\":\"022C\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con tilde y macron\"}}},{\"category\":\"Lu\",\"key\":\"0230\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con dot above y macron\"}}},{\"key\":\"1E08\",\"mappings\":{\"default\":{\"default\":\"mayúscula C con cedilla y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E14\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con macrón y grave\"}},\"category\":\"Lu\"},{\"key\":\"1E16\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con macrón y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E1C\",\"mappings\":{\"default\":{\"default\":\"mayúscula E with cedilla and breve\"}},\"category\":\"Lu\"},{\"key\":\"1E2E\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con diéresis y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E38\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con punto debajo y macrón\"}},\"category\":\"Lu\"},{\"key\":\"1E4C\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con tilde y acute\"}},\"category\":\"Lu\"},{\"key\":\"1E4E\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con tilde y diéresis\"}},\"category\":\"Lu\"},{\"key\":\"1E50\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con macrón y grave\"}},\"category\":\"Lu\"},{\"key\":\"1E52\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con macrón y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E5C\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con punto debajo y macrón\"}},\"category\":\"Lu\"},{\"key\":\"1E64\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con agudo y punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E66\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con carón y punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E68\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con punto debajo y punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E78\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con tilde y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E7A\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con macrón y diéresis\"}},\"category\":\"Lu\"},{\"key\":\"1EA4\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento circunflejo y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1EA6\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento circunflejo y grave\"}},\"category\":\"Lu\"},{\"key\":\"1EA8\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento circunflejo y gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EAA\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento circunflejo y tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EAC\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento circunflejo y punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EAE\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1EB0\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve y grave\"}},\"category\":\"Lu\"},{\"key\":\"1EB2\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve y gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EB4\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve y tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EB6\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve y punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EBE\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1EC0\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo y grave\"}},\"category\":\"Lu\"},{\"key\":\"1EC2\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo y gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EC4\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo y tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EC6\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo y punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1ED0\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento circunflejo y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1ED2\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento circunflejo y grave\"}},\"category\":\"Lu\"},{\"key\":\"1ED4\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento circunflejo y gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1ED6\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento circunflejo y tilde\"}},\"category\":\"Lu\"},{\"key\":\"1ED8\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento circunflejo y punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EDA\",\"mappings\":{\"default\":{\"default\":\"mayúscula O with horn and acute\"}},\"category\":\"Lu\"},{\"key\":\"1EDC\",\"mappings\":{\"default\":{\"default\":\"mayúscula O with horn and grave\"}},\"category\":\"Lu\"},{\"key\":\"1EDE\",\"mappings\":{\"default\":{\"default\":\"mayúscula O with horn and hook above\"}},\"category\":\"Lu\"},{\"key\":\"1EE0\",\"mappings\":{\"default\":{\"default\":\"mayúscula O with horn and tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EE2\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con cuerno y punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EE8\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con cuerno y agudo\"}},\"category\":\"Lu\"},{\"key\":\"1EEA\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con cuerno y grave\"}},\"category\":\"Lu\"},{\"key\":\"1EEC\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con cuerno y gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EEE\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con cuerno y tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EF0\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con cuerno y punto debajo\"}},\"category\":\"Lu\"}]\n,\n\"es/symbols/latin-upper-single-accent.js\": \n[{\"locale\":\"es\"},{\"key\":\"00C0\",\"mappings\":{\"default\":{\"default\":\"mayúscula A grave\"}},\"category\":\"Lu\"},{\"key\":\"00C1\",\"mappings\":{\"default\":{\"default\":\"mayúscula A aguda\"}},\"category\":\"Lu\"},{\"key\":\"00C2\",\"mappings\":{\"default\":{\"default\":\"mayúscula A acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"00C3\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con tilde\"}},\"category\":\"Lu\"},{\"key\":\"00C4\",\"mappings\":{\"default\":{\"default\":\"mayúscula A diéresis\"}},\"category\":\"Lu\"},{\"key\":\"00C5\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con anillo\"}},\"category\":\"Lu\"},{\"key\":\"00C7\",\"mappings\":{\"default\":{\"default\":\"mayúscula C cedilla\"}},\"category\":\"Lu\"},{\"key\":\"00C8\",\"mappings\":{\"default\":{\"default\":\"mayúscula E grave\"}},\"category\":\"Lu\"},{\"key\":\"00C9\",\"mappings\":{\"default\":{\"default\":\"mayúscula E aguda\"}},\"category\":\"Lu\"},{\"key\":\"00CA\",\"mappings\":{\"default\":{\"default\":\"mayúscula E acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"00CB\",\"mappings\":{\"default\":{\"default\":\"mayúscula E diéresis\"}},\"category\":\"Lu\"},{\"key\":\"00CC\",\"mappings\":{\"default\":{\"default\":\"mayúscula I grave\"}},\"category\":\"Lu\"},{\"key\":\"00CD\",\"mappings\":{\"default\":{\"default\":\"mayúscula I aguda\"}},\"category\":\"Lu\"},{\"key\":\"00CE\",\"mappings\":{\"default\":{\"default\":\"mayúscula I acento circumflejo\"}},\"category\":\"Lu\"},{\"key\":\"00CF\",\"mappings\":{\"default\":{\"default\":\"mayúscula I diéresis\"}},\"category\":\"Lu\"},{\"key\":\"00D1\",\"mappings\":{\"default\":{\"default\":\"mayúscula Ñ\"}},\"category\":\"Lu\"},{\"key\":\"00D2\",\"mappings\":{\"default\":{\"default\":\"mayúscula O grave\"}},\"category\":\"Lu\"},{\"key\":\"00D3\",\"mappings\":{\"default\":{\"default\":\"mayúscula O aguda\"}},\"category\":\"Lu\"},{\"key\":\"00D4\",\"mappings\":{\"default\":{\"default\":\"mayúscula O acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"00D5\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con tilde\"}},\"category\":\"Lu\"},{\"key\":\"00D6\",\"mappings\":{\"default\":{\"default\":\"mayúscula O diéresis\"}},\"category\":\"Lu\"},{\"key\":\"00D9\",\"mappings\":{\"default\":{\"default\":\"mayúscula U grave\"}},\"category\":\"Lu\"},{\"key\":\"00DA\",\"mappings\":{\"default\":{\"default\":\"mayúscula U aguda\"}},\"category\":\"Lu\"},{\"key\":\"00DB\",\"mappings\":{\"default\":{\"default\":\"mayúscula U acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"00DC\",\"mappings\":{\"default\":{\"default\":\"mayúscula U diéresis\"}},\"category\":\"Lu\"},{\"key\":\"00DD\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y aguda\"}},\"category\":\"Lu\"},{\"key\":\"0100\",\"mappings\":{\"default\":{\"default\":\"mayúscula A barra\"}},\"category\":\"Lu\"},{\"key\":\"0102\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con breve\"}},\"category\":\"Lu\"},{\"key\":\"0104\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con ogonek\"}},\"category\":\"Lu\"},{\"key\":\"0106\",\"mappings\":{\"default\":{\"default\":\"mayúscula C con agudo\"}},\"category\":\"Lu\"},{\"key\":\"0108\",\"mappings\":{\"default\":{\"default\":\"mayúscula C con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"010A\",\"mappings\":{\"default\":{\"default\":\"mayúscula C con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"010C\",\"mappings\":{\"default\":{\"default\":\"mayúscula C con carón\"}},\"category\":\"Lu\"},{\"key\":\"010E\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con carón\"}},\"category\":\"Lu\"},{\"key\":\"0112\",\"mappings\":{\"default\":{\"default\":\"mayúscula E barra\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0114\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con breve\"}}},{\"key\":\"0116\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"0118\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con ogonek\"}},\"category\":\"Lu\"},{\"key\":\"011A\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con carón\"}},\"category\":\"Lu\"},{\"key\":\"011C\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"011E\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con breve\"}},\"category\":\"Lu\"},{\"key\":\"0120\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"0122\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0124\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"0128\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con tilde\"}},\"category\":\"Lu\"},{\"key\":\"012A\",\"mappings\":{\"default\":{\"default\":\"mayúscula I barra\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"012C\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con breve\"}}},{\"key\":\"012E\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con ogonek\"}},\"category\":\"Lu\"},{\"key\":\"0130\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"0134\",\"mappings\":{\"default\":{\"default\":\"mayúscula J con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"0136\",\"mappings\":{\"default\":{\"default\":\"mayúscula K con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0139\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con agudo\"}},\"category\":\"Lu\"},{\"key\":\"013B\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"013D\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con carón\"}},\"category\":\"Lu\"},{\"key\":\"013F\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con punto mediano\"}},\"category\":\"Lu\"},{\"key\":\"0143\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con agudo\"}},\"category\":\"Lu\"},{\"key\":\"0145\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0147\",\"mappings\":{\"default\":{\"default\":\"mayúscula n con carón\"}},\"category\":\"Lu\"},{\"key\":\"014C\",\"mappings\":{\"default\":{\"default\":\"mayúscula O barra\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"014E\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con breve\"}}},{\"key\":\"0150\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con doble acento agudo \"}},\"category\":\"Lu\"},{\"key\":\"0154\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con agudo\"}},\"category\":\"Lu\"},{\"key\":\"0156\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0158\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con carón\"}},\"category\":\"Lu\"},{\"key\":\"015A\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con agudo\"}},\"category\":\"Lu\"},{\"key\":\"015C\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"015E\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0160\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con carón\"}},\"category\":\"Lu\"},{\"key\":\"0162\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"0164\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con carón\"}},\"category\":\"Lu\"},{\"key\":\"0168\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con tilde\"}},\"category\":\"Lu\"},{\"key\":\"016A\",\"mappings\":{\"default\":{\"default\":\"mayúscula U barra\"}},\"category\":\"Lu\"},{\"key\":\"016C\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con breve\"}},\"category\":\"Lu\"},{\"key\":\"016E\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con anillo arriba\"}},\"category\":\"Lu\"},{\"key\":\"0170\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con doble acento agudo\"}},\"category\":\"Lu\"},{\"key\":\"0172\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con ogonek\"}},\"category\":\"Lu\"},{\"key\":\"0174\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"0176\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"0178\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y diéresis\"}},\"category\":\"Lu\"},{\"key\":\"0179\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z con agudo\"}},\"category\":\"Lu\"},{\"key\":\"017B\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z con punto\"}},\"category\":\"Lu\"},{\"key\":\"017D\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z con carón\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"01CD\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con acento\"}}},{\"category\":\"Lu\",\"key\":\"01CF\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con acento\"}}},{\"category\":\"Lu\",\"key\":\"01D1\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con acento\"}}},{\"category\":\"Lu\",\"key\":\"01D3\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con acento\"}}},{\"category\":\"Lu\",\"key\":\"01E6\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con acento\"}}},{\"category\":\"Lu\",\"key\":\"01E8\",\"mappings\":{\"default\":{\"default\":\"mayúscula K con acento\"}}},{\"category\":\"Lu\",\"key\":\"01EA\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con pecíolo\"}}},{\"category\":\"Lu\",\"key\":\"01F4\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con acento agudo\"}}},{\"category\":\"Lu\",\"key\":\"01F8\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con grave\"}}},{\"category\":\"Lu\",\"key\":\"0200\",\"mappings\":{\"default\":{\"default\":\"mayúscula con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"0202\",\"mappings\":{\"default\":{\"default\":\"mayúscula a con breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"0204\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"0206\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con Breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"0208\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"020A\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con Breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"020C\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"020E\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con Breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"0210\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"0212\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"0214\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con doble tumba\"}}},{\"category\":\"Lu\",\"key\":\"0216\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con breve invertido\"}}},{\"category\":\"Lu\",\"key\":\"0218\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con coma debajo\"}}},{\"category\":\"Lu\",\"key\":\"021A\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con coma debajo\"}}},{\"category\":\"Lu\",\"key\":\"021E\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con Caron\"}}},{\"category\":\"Lu\",\"key\":\"0226\",\"mappings\":{\"default\":{\"default\":\"mayúscula con un punto arriba\"}}},{\"category\":\"Lu\",\"key\":\"0228\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con cedilla\"}}},{\"category\":\"Lu\",\"key\":\"022E\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con punto arriba\"}}},{\"category\":\"Lu\",\"key\":\"0232\",\"mappings\":{\"default\":{\"default\":\"Mayúscula Y con Macron\"}}},{\"key\":\"1E00\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con anillo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E02\",\"mappings\":{\"default\":{\"default\":\"mayúscula B con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E04\",\"mappings\":{\"default\":{\"default\":\"mayúscula B con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E06\",\"mappings\":{\"default\":{\"default\":\"mayúscula B con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E0A\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E0C\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E0E\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E10\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"1E12\",\"mappings\":{\"default\":{\"default\":\"mayúscula D con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E18\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E1A\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con tilde debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E1E\",\"mappings\":{\"default\":{\"default\":\"mayúscula F con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E20\",\"mappings\":{\"default\":{\"default\":\"mayúscula G con macrón\"}},\"category\":\"Lu\"},{\"key\":\"1E22\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E24\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E26\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con diéresis\"}},\"category\":\"Lu\"},{\"key\":\"1E28\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con cedilla\"}},\"category\":\"Lu\"},{\"key\":\"1E2A\",\"mappings\":{\"default\":{\"default\":\"mayúscula H con breve debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E2C\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con tilde debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E30\",\"mappings\":{\"default\":{\"default\":\"mayúscula K con agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E32\",\"mappings\":{\"default\":{\"default\":\"mayúscula K con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E34\",\"mappings\":{\"default\":{\"default\":\"mayúscula K con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E36\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E3A\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E3C\",\"mappings\":{\"default\":{\"default\":\"mayúscula L con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E3E\",\"mappings\":{\"default\":{\"default\":\"mayúscula M con agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E40\",\"mappings\":{\"default\":{\"default\":\"mayúscula M con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E42\",\"mappings\":{\"default\":{\"default\":\"mayúscula M con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E44\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E46\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E48\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E4A\",\"mappings\":{\"default\":{\"default\":\"mayúscula N con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E54\",\"mappings\":{\"default\":{\"default\":\"mayúscula P con agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E56\",\"mappings\":{\"default\":{\"default\":\"mayúscula P con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E58\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E5A\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E5E\",\"mappings\":{\"default\":{\"default\":\"mayúscula R con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E60\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E62\",\"mappings\":{\"default\":{\"default\":\"mayúscula S con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E6A\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E6C\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E6E\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con línea debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E70\",\"mappings\":{\"default\":{\"default\":\"mayúscula T con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E72\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con diéresis debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E74\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con tilde debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E76\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con acento circunflejo debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E7C\",\"mappings\":{\"default\":{\"default\":\"mayúscula V con tilde\"}},\"category\":\"Lu\"},{\"key\":\"1E7E\",\"mappings\":{\"default\":{\"default\":\"mayúscula V con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E80\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con grave\"}},\"category\":\"Lu\"},{\"key\":\"1E82\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con agudo\"}},\"category\":\"Lu\"},{\"key\":\"1E84\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con diéresis\"}},\"category\":\"Lu\"},{\"key\":\"1E86\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E88\",\"mappings\":{\"default\":{\"default\":\"mayúscula W con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E8A\",\"mappings\":{\"default\":{\"default\":\"mayúscula X con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E8C\",\"mappings\":{\"default\":{\"default\":\"mayúscula X con diéresis\"}},\"category\":\"Lu\"},{\"key\":\"1E8E\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con punto arriba\"}},\"category\":\"Lu\"},{\"key\":\"1E90\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z con acento circunflejo\"}},\"category\":\"Lu\"},{\"key\":\"1E92\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1E94\",\"mappings\":{\"default\":{\"default\":\"mayúscula Z with line below\"}},\"category\":\"Lu\"},{\"key\":\"1EA0\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EA2\",\"mappings\":{\"default\":{\"default\":\"mayúscula A con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EB8\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EBA\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EBC\",\"mappings\":{\"default\":{\"default\":\"mayúscula E con tilde\"}},\"category\":\"Lu\"},{\"key\":\"1EC8\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1ECA\",\"mappings\":{\"default\":{\"default\":\"mayúscula I con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1ECC\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1ECE\",\"mappings\":{\"default\":{\"default\":\"mayúscula O con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EE4\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EE6\",\"mappings\":{\"default\":{\"default\":\"mayúscula U con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EF2\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con grave\"}},\"category\":\"Lu\"},{\"key\":\"1EF4\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con punto debajo\"}},\"category\":\"Lu\"},{\"key\":\"1EF6\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con gancho arriba\"}},\"category\":\"Lu\"},{\"key\":\"1EF8\",\"mappings\":{\"default\":{\"default\":\"mayúscula Y con tilde\"}},\"category\":\"Lu\"}]\n,\n\"es/symbols/math_angles.js\": \n[{\"locale\":\"es\"},{\"key\":\"22BE\",\"mappings\":{\"default\":{\"default\":\"ángulo recto con arco\"}},\"category\":\"Sm\"},{\"key\":\"237C\",\"mappings\":{\"default\":{\"default\":\"ángulo recto con flecha zigzag hacia abajo\"}},\"category\":\"Sm\"},{\"key\":\"27C0\",\"mappings\":{\"default\":{\"default\":\"ángulo sólido\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"299B\",\"mappings\":{\"default\":{\"default\":\"Ángulo medido de apertura a la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"299C\",\"mappings\":{\"default\":{\"default\":\"Variante de ángulo recto con cuadrado\"}}},{\"key\":\"299D\",\"mappings\":{\"default\":{\"default\":\"ángulo recto medido con punto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"299E\",\"mappings\":{\"default\":{\"default\":\"Ángulo con S dentro\"}}},{\"category\":\"Sm\",\"key\":\"299F\",\"mappings\":{\"default\":{\"default\":\"Ángulo agudo\"}}},{\"category\":\"Sm\",\"key\":\"29A0\",\"mappings\":{\"default\":{\"default\":\"Ángulo esférico de apertura a la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"29A1\",\"mappings\":{\"default\":{\"default\":\"Apertura de ángulo esférico\"}}},{\"category\":\"Sm\",\"key\":\"29A2\",\"mappings\":{\"default\":{\"default\":\"Ángulo de giro\"}}},{\"category\":\"Sm\",\"key\":\"29A3\",\"mappings\":{\"default\":{\"default\":\"Ángulo invertido\"}}},{\"key\":\"29A4\",\"mappings\":{\"default\":{\"default\":\"ángulo con barra inferior\"}},\"category\":\"Sm\"},{\"key\":\"29A5\",\"mappings\":{\"default\":{\"default\":\"ángulo inverso con barra inferior\"}},\"category\":\"Sm\"},{\"key\":\"29A6\",\"mappings\":{\"default\":{\"default\":\"ángulo oblicuo hacia arriba\"}},\"category\":\"Sm\"},{\"key\":\"29A7\",\"mappings\":{\"default\":{\"default\":\"ángulo oblicuo hacia abajo\"}},\"category\":\"Sm\"},{\"key\":\"29A8\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing up and to the right\"}},\"category\":\"Sm\"},{\"key\":\"29A9\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing up and to the left\"}},\"category\":\"Sm\"},{\"key\":\"29AA\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing down and to the right\"}},\"category\":\"Sm\"},{\"key\":\"29AB\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing down and to the left\"}},\"category\":\"Sm\"},{\"key\":\"29AC\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing right and up\"}},\"category\":\"Sm\"},{\"key\":\"29AD\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing left and up\"}},\"category\":\"Sm\"},{\"key\":\"29AE\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing right and down\"}},\"category\":\"Sm\"},{\"key\":\"29AF\",\"mappings\":{\"default\":{\"default\":\"measured angle with open arm ending in arrow pointing left and down\"}},\"category\":\"Sm\"}]\n,\n\"es/symbols/math_arrows.js\": \n[{\"locale\":\"es\"},{\"key\":\"2190\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda\"}},\"category\":\"Sm\"},{\"key\":\"2191\",\"mappings\":{\"default\":{\"default\":\"flecha arriba\"}},\"category\":\"Sm\"},{\"key\":\"2192\",\"mappings\":{\"default\":{\"default\":\"flecha derecha\",\"defaultMP\":\"flecha\"}},\"category\":\"Sm\"},{\"key\":\"2193\",\"mappings\":{\"default\":{\"default\":\"flecha abajo\"}},\"category\":\"Sm\"},{\"key\":\"2194\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda y derecha\"}},\"category\":\"Sm\"},{\"key\":\"2195\",\"mappings\":{\"default\":{\"default\":\"flecha arriba y abajo\"}},\"category\":\"So\"},{\"key\":\"2196\",\"mappings\":{\"default\":{\"default\":\"flecha a noroeste\"}},\"category\":\"So\"},{\"key\":\"2197\",\"mappings\":{\"default\":{\"default\":\"flecha a nordeste\"}},\"category\":\"So\"},{\"key\":\"2198\",\"mappings\":{\"default\":{\"default\":\"flecha a sureste\"}},\"category\":\"So\"},{\"key\":\"2199\",\"mappings\":{\"default\":{\"default\":\"flecha a suroeste\"}},\"category\":\"So\"},{\"key\":\"219A\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda tachada\"}},\"category\":\"Sm\"},{\"key\":\"219B\",\"mappings\":{\"default\":{\"default\":\"flecha tachada\"}},\"category\":\"Sm\"},{\"key\":\"219C\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada izquierda\"}},\"category\":\"So\"},{\"key\":\"219D\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada\"}},\"category\":\"So\"},{\"key\":\"219E\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con doble punta\"}},\"category\":\"So\"},{\"key\":\"219F\",\"mappings\":{\"default\":{\"default\":\"flecha con doble punta hacia arriba\"}},\"category\":\"So\"},{\"key\":\"21A0\",\"mappings\":{\"default\":{\"default\":\"flecha derechaa con doble punta\"}},\"category\":\"Sm\"},{\"key\":\"21A1\",\"mappings\":{\"default\":{\"default\":\"flecha con doble punta hacia abajo\"}},\"category\":\"So\"},{\"key\":\"21A2\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con cola\"}},\"category\":\"So\"},{\"key\":\"21A3\",\"mappings\":{\"default\":{\"default\":\"flecha derecha con cola\"}},\"category\":\"Sm\"},{\"key\":\"21A4\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda de barra\"}},\"category\":\"So\"},{\"key\":\"21A5\",\"mappings\":{\"default\":{\"default\":\"barra con flecha\"}},\"category\":\"So\"},{\"key\":\"21A6\",\"mappings\":{\"default\":{\"default\":\"flecha derecha de barra\"}},\"category\":\"Sm\"},{\"key\":\"21A7\",\"mappings\":{\"default\":{\"default\":\"flecha con barra\"}},\"category\":\"So\"},{\"key\":\"21A8\",\"mappings\":{\"default\":{\"default\":\"flecha arriba y abajo con base\"}},\"category\":\"So\"},{\"key\":\"21A9\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con gancho\"}},\"category\":\"So\"},{\"key\":\"21AA\",\"mappings\":{\"default\":{\"default\":\"flecha con gancho\"}},\"category\":\"So\"},{\"key\":\"21AB\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con lazo\"}},\"category\":\"So\"},{\"key\":\"21AC\",\"mappings\":{\"default\":{\"default\":\"flecha con lazo\"}},\"category\":\"So\"},{\"key\":\"21AD\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada izquierda y derecha\"}},\"category\":\"So\"},{\"key\":\"21AE\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda y derecha tachada\"}},\"category\":\"Sm\"},{\"key\":\"21AF\",\"mappings\":{\"default\":{\"default\":\"flecha zigzag abajo\"}},\"category\":\"So\"},{\"key\":\"21B0\",\"mappings\":{\"default\":{\"default\":\"flecha arriba con punta izquierda\"}},\"category\":\"So\"},{\"key\":\"21B1\",\"mappings\":{\"default\":{\"default\":\"flecha arriba con punta derecha\"}},\"category\":\"So\"},{\"key\":\"21B2\",\"mappings\":{\"default\":{\"default\":\"flecha abajo con punta izquierda\"}},\"category\":\"So\"},{\"key\":\"21B3\",\"mappings\":{\"default\":{\"default\":\"flecha abajo con punta derecha\"}},\"category\":\"So\"},{\"key\":\"21B4\",\"mappings\":{\"default\":{\"default\":\"flecha derecha desde esquina inferior\"}},\"category\":\"So\"},{\"key\":\"21B5\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo desde esquina izquierda\"}},\"category\":\"So\"},{\"key\":\"21B6\",\"mappings\":{\"default\":{\"default\":\"flecha semicircular superior en sentido antihorario\"}},\"category\":\"So\"},{\"key\":\"21B7\",\"mappings\":{\"default\":{\"default\":\"flecha semicircular superior en sentido horario\"}},\"category\":\"So\"},{\"key\":\"21B8\",\"mappings\":{\"default\":{\"default\":\"flecha noroeste a barra larga\"}},\"category\":\"So\"},{\"key\":\"21B9\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda a barra arriba de flecha derecha a barra\"}},\"category\":\"So\"},{\"key\":\"21BA\",\"mappings\":{\"default\":{\"default\":\"flecha circular abierta en sentido antihorario\"}},\"category\":\"So\"},{\"key\":\"21BB\",\"mappings\":{\"default\":{\"default\":\"flecha circular abierta en sentido horario\"}},\"category\":\"So\"},{\"key\":\"21C4\",\"mappings\":{\"default\":{\"default\":\"flecha derecha arriba de flecha izquierda\"}},\"category\":\"So\"},{\"key\":\"21C5\",\"mappings\":{\"default\":{\"default\":\"flecha arriba a la izquierda de flecha abajo\"}},\"category\":\"So\"},{\"key\":\"21C6\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda arriba de flecha derecha\"}},\"category\":\"So\"},{\"key\":\"21C7\",\"mappings\":{\"default\":{\"default\":\"dos flechas hacia la izquierda\"}},\"category\":\"So\"},{\"key\":\"21C8\",\"mappings\":{\"default\":{\"default\":\"dos flechas hacia arriba\"}},\"category\":\"So\"},{\"key\":\"21C9\",\"mappings\":{\"default\":{\"default\":\"dos flechas\"}},\"category\":\"So\"},{\"key\":\"21CA\",\"mappings\":{\"default\":{\"default\":\"dos flechas hacia abajo\"}},\"category\":\"So\"},{\"key\":\"21CD\",\"mappings\":{\"default\":{\"default\":\"flecha doble izquierda tachada\"}},\"category\":\"So\"},{\"key\":\"21CE\",\"mappings\":{\"default\":{\"default\":\"flecha doble izquierda y derecha tachada\"}},\"category\":\"Sm\"},{\"key\":\"21CF\",\"mappings\":{\"default\":{\"default\":\"flecha doble tachada\"}},\"category\":\"Sm\"},{\"key\":\"21D0\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia la izquierda\"}},\"category\":\"So\"},{\"key\":\"21D1\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia arriba\"}},\"category\":\"So\"},{\"key\":\"21D2\",\"mappings\":{\"default\":{\"default\":\"flecha doble\"}},\"category\":\"Sm\"},{\"key\":\"21D3\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia abajo\"}},\"category\":\"So\"},{\"key\":\"21D4\",\"mappings\":{\"default\":{\"default\":\"flecha doble izquierda-derecha\"}},\"category\":\"Sm\"},{\"key\":\"21D5\",\"mappings\":{\"default\":{\"default\":\"flecha doble vertical\"}},\"category\":\"So\"},{\"key\":\"21D6\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia noroeste\"}},\"category\":\"So\"},{\"key\":\"21D7\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia nordeste\"}},\"category\":\"So\"},{\"key\":\"21D8\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia sudeste\"}},\"category\":\"So\"},{\"key\":\"21D9\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia sudoeste\"}},\"category\":\"So\"},{\"key\":\"21DA\",\"mappings\":{\"default\":{\"default\":\"flecha triple izquierda\"}},\"category\":\"So\"},{\"key\":\"21DB\",\"mappings\":{\"default\":{\"default\":\"flecha triple\"}},\"category\":\"So\"},{\"key\":\"21DC\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada izquierda\"}},\"category\":\"So\"},{\"key\":\"21DD\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada\"}},\"category\":\"So\"},{\"key\":\"21DE\",\"mappings\":{\"default\":{\"default\":\"flecha hacia arriba con doble tachado\"}},\"category\":\"So\"},{\"key\":\"21DF\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo con doble tachado\"}},\"category\":\"So\"},{\"key\":\"21E0\",\"mappings\":{\"default\":{\"default\":\"flecha de puntos hacia la izquierda\"}},\"category\":\"So\"},{\"key\":\"21E1\",\"mappings\":{\"default\":{\"default\":\"flecha de puntos hacia arriba\"}},\"category\":\"So\"},{\"key\":\"21E2\",\"mappings\":{\"default\":{\"default\":\"flecha de puntos\"}},\"category\":\"So\"},{\"key\":\"21E3\",\"mappings\":{\"default\":{\"default\":\"flecha de puntos hacia abajo\"}},\"category\":\"So\"},{\"key\":\"21E4\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda a barra\"}},\"category\":\"So\"},{\"key\":\"21E5\",\"mappings\":{\"default\":{\"default\":\"flecha derecha a barra\"}},\"category\":\"So\"},{\"key\":\"21E6\",\"mappings\":{\"default\":{\"default\":\"flecha vacía hacia la izquierda\"}},\"category\":\"So\"},{\"key\":\"21E7\",\"mappings\":{\"default\":{\"default\":\"flecha vacía hacia arriba\"}},\"category\":\"So\"},{\"key\":\"21E8\",\"mappings\":{\"default\":{\"default\":\"flecha vacía\"}},\"category\":\"So\"},{\"key\":\"21E9\",\"mappings\":{\"default\":{\"default\":\"flecha vacía hacia abajo\"}},\"category\":\"So\"},{\"key\":\"21EA\",\"mappings\":{\"default\":{\"default\":\"flecha vacía hacia arriba desde barra\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"21EB\",\"mappings\":{\"default\":{\"default\":\"flecha blanca hacia arriba en el pedestal\"}}},{\"category\":\"So\",\"key\":\"21EC\",\"mappings\":{\"default\":{\"default\":\"flecha blanca hacia arriba sobre pedestal con barra horizontal\"}}},{\"category\":\"So\",\"key\":\"21ED\",\"mappings\":{\"default\":{\"default\":\"flecha blanca hacia arriba sobre pedestal con barra vertical\"}}},{\"category\":\"So\",\"key\":\"21EE\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia arriba blanca\"}}},{\"category\":\"So\",\"key\":\"21EF\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia arriba blanca en pedestal\"}}},{\"category\":\"So\",\"key\":\"21F0\",\"mappings\":{\"default\":{\"default\":\"flecha blanca hacia la derecha de la pared\"}}},{\"category\":\"So\",\"key\":\"21F1\",\"mappings\":{\"default\":{\"default\":\"flecha del noroeste a la esquina\"}}},{\"category\":\"So\",\"key\":\"21F2\",\"mappings\":{\"default\":{\"default\":\"flecha del sudeste a la esquina\"}}},{\"category\":\"So\",\"key\":\"21F3\",\"mappings\":{\"default\":{\"default\":\"arriba abajo flecha blanca\"}}},{\"category\":\"Sm\",\"key\":\"21F4\",\"mappings\":{\"default\":{\"default\":\"flecha derecha con círculo pequeño\"}}},{\"key\":\"21F5\",\"mappings\":{\"default\":{\"default\":\"upwards arrow to the right of downwards arrow\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"21F6\",\"mappings\":{\"default\":{\"default\":\"tres flechas a la derecha\"}}},{\"category\":\"Sm\",\"key\":\"21F7\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"21F8\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"21F9\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda derecha con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"21FA\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con doble trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"21FB\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con doble trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"21FC\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda derecha con doble trazo vertical\"}}},{\"key\":\"21FD\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con punta vacía\"}},\"category\":\"Sm\"},{\"key\":\"21FE\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con punta vacía\"}},\"category\":\"Sm\"},{\"key\":\"21FF\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda derecha con punta vacía\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2301\",\"mappings\":{\"default\":{\"default\":\"flecha electrica\"}}},{\"category\":\"So\",\"key\":\"2303\",\"mappings\":{\"default\":{\"default\":\"flecha arriba\"}}},{\"category\":\"So\",\"key\":\"2304\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo\"}}},{\"category\":\"So\",\"key\":\"2324\",\"mappings\":{\"default\":{\"default\":\"flecha arriba entre dos barras horizontales\"}}},{\"category\":\"So\",\"key\":\"238B\",\"mappings\":{\"default\":{\"default\":\"círculo roto con la flecha del noroeste\"}}},{\"category\":\"So\",\"key\":\"2794\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con cabeza ancha\"}}},{\"category\":\"So\",\"key\":\"2798\",\"mappings\":{\"default\":{\"default\":\"flecha Sureste pesada\"}}},{\"category\":\"So\",\"key\":\"2799\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha pesada\"}}},{\"category\":\"So\",\"key\":\"279A\",\"mappings\":{\"default\":{\"default\":\"flecha pesada del noreste\"}}},{\"category\":\"So\",\"key\":\"279B\",\"mappings\":{\"default\":{\"default\":\"punto de dibujo Flecha hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"279C\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con punta redonda redonda\"}}},{\"category\":\"So\",\"key\":\"279D\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con forma de triángulo\"}}},{\"category\":\"So\",\"key\":\"279E\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con forma de triángulo pesado\"}}},{\"category\":\"So\",\"key\":\"279F\",\"mappings\":{\"default\":{\"default\":\"triángulo punteado hacia la flecha hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27A0\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con forma de triángulo de trazo pesado\"}}},{\"category\":\"So\",\"key\":\"27A1\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha negra\"}}},{\"category\":\"So\",\"key\":\"27A2\",\"mappings\":{\"default\":{\"default\":\"punta de flecha tridimensional hacia la derecha hacia arriba\"}}},{\"category\":\"So\",\"key\":\"27A3\",\"mappings\":{\"default\":{\"default\":\"punta de flecha hacia la derecha con iluminación inferior en tres dimensiones\"}}},{\"category\":\"So\",\"key\":\"27A4\",\"mappings\":{\"default\":{\"default\":\"punta de flecha negra hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27A5\",\"mappings\":{\"default\":{\"default\":\"pesado negro curvado hacia abajo y hacia la derecha flecha\"}}},{\"category\":\"So\",\"key\":\"27A6\",\"mappings\":{\"default\":{\"default\":\"pesado negro curvado hacia arriba y hacia la derecha flecha\"}}},{\"category\":\"So\",\"key\":\"27A7\",\"mappings\":{\"default\":{\"default\":\"squat Black Arrow hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27A8\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha de color negro cóncava puntiaguda pesada\"}}},{\"category\":\"So\",\"key\":\"27A9\",\"mappings\":{\"default\":{\"default\":\"sombra derecha flecha blanca hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27AA\",\"mappings\":{\"default\":{\"default\":\"sombra hacia la izquierda blanca a la izquierda\"}}},{\"category\":\"So\",\"key\":\"27AB\",\"mappings\":{\"default\":{\"default\":\"back-Tilted Shadowed White Right Arrow\"}}},{\"category\":\"So\",\"key\":\"27AC\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha blanca sombreada inclinada hacia delante\"}}},{\"category\":\"So\",\"key\":\"27AD\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha pesada inferior, sombreada a la derecha, blanca\"}}},{\"category\":\"So\",\"key\":\"27AE\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha blanca superior derecha sombreada pesada\"}}},{\"category\":\"So\",\"key\":\"27AF\",\"mappings\":{\"default\":{\"default\":\"con muesca, flecha derecha hacia abajo, a la derecha, hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27B1\",\"mappings\":{\"default\":{\"default\":\"con muescas, flecha derecha hacia arriba, a la derecha, hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27B2\",\"mappings\":{\"default\":{\"default\":\"círculo pesado blanco flecha hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27B3\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con plumas blancas\"}}},{\"category\":\"So\",\"key\":\"27B4\",\"mappings\":{\"default\":{\"default\":\"flecha suroriental de plumas negras\"}}},{\"category\":\"So\",\"key\":\"27B5\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con plumas negras\"}}},{\"category\":\"So\",\"key\":\"27B6\",\"mappings\":{\"default\":{\"default\":\"flecha del noreste con plumas negras\"}}},{\"category\":\"So\",\"key\":\"27B7\",\"mappings\":{\"default\":{\"default\":\"flecha suroriental con plumas negras pesadas\"}}},{\"category\":\"So\",\"key\":\"27B8\",\"mappings\":{\"default\":{\"default\":\"flecha derecha pesada con plumas negras\"}}},{\"category\":\"So\",\"key\":\"27B9\",\"mappings\":{\"default\":{\"default\":\"flecha del noreste con plumas negras pesadas\"}}},{\"category\":\"So\",\"key\":\"27BA\",\"mappings\":{\"default\":{\"default\":\"lágrima-flecha de flecha hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"27BB\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con forma de lágrima pesada\"}}},{\"category\":\"So\",\"key\":\"27BC\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha de cola de cuña\"}}},{\"category\":\"So\",\"key\":\"27BD\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha de cola de cuña pesada\"}}},{\"category\":\"So\",\"key\":\"27BE\",\"mappings\":{\"default\":{\"default\":\"open-Outlined Outward Arrow\"}}},{\"key\":\"27F0\",\"mappings\":{\"default\":{\"default\":\"flecha cuádruple hacia arriba\"}},\"category\":\"Sm\"},{\"key\":\"27F1\",\"mappings\":{\"default\":{\"default\":\"flecha cuádruple hacia abajo\"}},\"category\":\"Sm\"},{\"key\":\"27F2\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda desde círculo\"}},\"category\":\"Sm\"},{\"key\":\"27F3\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha desde círculo\"}},\"category\":\"Sm\"},{\"key\":\"27F4\",\"mappings\":{\"default\":{\"default\":\"flecha con más en círculo\"}},\"category\":\"Sm\"},{\"key\":\"27F5\",\"mappings\":{\"default\":{\"default\":\"flecha larga hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"27F6\",\"mappings\":{\"default\":{\"default\":\"flecha larga\"}},\"category\":\"Sm\"},{\"key\":\"27F7\",\"mappings\":{\"default\":{\"default\":\"flecha larga hacia izquierda y derecha\"}},\"category\":\"Sm\"},{\"key\":\"27F8\",\"mappings\":{\"default\":{\"default\":\"doble flecha larga hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"27F9\",\"mappings\":{\"default\":{\"default\":\"doble flecha larga\"}},\"category\":\"Sm\"},{\"key\":\"27FA\",\"mappings\":{\"default\":{\"default\":\"doble flecha larga hacia izquierda y derecha\"}},\"category\":\"Sm\"},{\"key\":\"27FB\",\"mappings\":{\"default\":{\"default\":\"flecha larga hacia la izquierda, desde barra\"}},\"category\":\"Sm\"},{\"key\":\"27FC\",\"mappings\":{\"default\":{\"default\":\"flecha larga desde barra\"}},\"category\":\"Sm\"},{\"key\":\"27FD\",\"mappings\":{\"default\":{\"default\":\"doble flecha larga hacia la izquierda desde barra\"}},\"category\":\"Sm\"},{\"key\":\"27FE\",\"mappings\":{\"default\":{\"default\":\"doble flecha larga desde barra\"}},\"category\":\"Sm\"},{\"key\":\"27FF\",\"mappings\":{\"default\":{\"default\":\"flecha larga en zigzag\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2900\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la derecha con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2901\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la derecha con doble movimiento vertical\"}}},{\"category\":\"Sm\",\"key\":\"2902\",\"mappings\":{\"default\":{\"default\":\"doble flecha hacia la izquierda con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2903\",\"mappings\":{\"default\":{\"default\":\"doble flecha hacia la derecha con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2904\",\"mappings\":{\"default\":{\"default\":\"izquierda Derecha Doble Flecha con Trazo Vertical\"}}},{\"key\":\"2905\",\"mappings\":{\"default\":{\"default\":\"rightwards two headed arrow from bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2906\",\"mappings\":{\"default\":{\"default\":\"doble flecha hacia la izquierda de la barra\"}}},{\"category\":\"Sm\",\"key\":\"2907\",\"mappings\":{\"default\":{\"default\":\"flecha doble hacia la derecha de la barra\"}}},{\"category\":\"Sm\",\"key\":\"2908\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo con trazo horizontal\"}}},{\"category\":\"Sm\",\"key\":\"2909\",\"mappings\":{\"default\":{\"default\":\"flecha hacia arriba con trazo horizontal\"}}},{\"category\":\"Sm\",\"key\":\"290A\",\"mappings\":{\"default\":{\"default\":\"flecha triple hacia arriba\"}}},{\"category\":\"Sm\",\"key\":\"290B\",\"mappings\":{\"default\":{\"default\":\"triple flecha hacia abajo\"}}},{\"key\":\"290C\",\"mappings\":{\"default\":{\"default\":\"leftwards double dash arrow\"}},\"category\":\"Sm\"},{\"key\":\"290D\",\"mappings\":{\"default\":{\"default\":\"rightwards double dash arrow\"}},\"category\":\"Sm\"},{\"key\":\"290E\",\"mappings\":{\"default\":{\"default\":\"leftwards triple dash arrow\"}},\"category\":\"Sm\"},{\"key\":\"290F\",\"mappings\":{\"default\":{\"default\":\"rightwards triple dash arrow\"}},\"category\":\"Sm\"},{\"key\":\"2910\",\"mappings\":{\"default\":{\"default\":\"rightwards two headed triple dash arrow\"}},\"category\":\"Sm\"},{\"key\":\"2911\",\"mappings\":{\"default\":{\"default\":\"rightwards arrow with dotted stem\"}},\"category\":\"Sm\"},{\"key\":\"2912\",\"mappings\":{\"default\":{\"default\":\"upwards arrow to bar\"}},\"category\":\"Sm\"},{\"key\":\"2913\",\"mappings\":{\"default\":{\"default\":\"downwards arrow to bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2914\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con cola con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2915\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con la cola con doble trazo vertical\"}}},{\"key\":\"2916\",\"mappings\":{\"default\":{\"default\":\"rightwards two headed arrow with tail\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2917\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la derecha con cola con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2918\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la derecha con cola con doble movimiento vertical\"}}},{\"key\":\"2919\",\"mappings\":{\"default\":{\"default\":\"cola de flecha hacia la izquierda\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"291A\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha\"}}},{\"key\":\"291B\",\"mappings\":{\"default\":{\"default\":\"cola de doble flecha hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"291C\",\"mappings\":{\"default\":{\"default\":\"cola de doble flecha hacia la derecha\"}},\"category\":\"Sm\"},{\"key\":\"291D\",\"mappings\":{\"default\":{\"default\":\"flecha hacia diamante relleno a la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"291E\",\"mappings\":{\"default\":{\"default\":\"flecha hacia diamante a la derecha\"}},\"category\":\"Sm\"},{\"key\":\"291F\",\"mappings\":{\"default\":{\"default\":\"flecha desde barra hacia diamante a la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"2920\",\"mappings\":{\"default\":{\"default\":\"flecha desde barra hacia diamante a la derecha\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2921\",\"mappings\":{\"default\":{\"default\":\"flechas del noroeste y sureste\"}}},{\"category\":\"Sm\",\"key\":\"2922\",\"mappings\":{\"default\":{\"default\":\"flecha noreste y sudoeste\"}}},{\"key\":\"2923\",\"mappings\":{\"default\":{\"default\":\"flecha a noroeste con garfio\"}},\"category\":\"Sm\"},{\"key\":\"2924\",\"mappings\":{\"default\":{\"default\":\"flecha a nordeste con garfio\"}},\"category\":\"Sm\"},{\"key\":\"2925\",\"mappings\":{\"default\":{\"default\":\"flecha a sureste con garfio\"}},\"category\":\"Sm\"},{\"key\":\"2926\",\"mappings\":{\"default\":{\"default\":\"flecha a suroeste con garfio\"}},\"category\":\"Sm\"},{\"key\":\"2927\",\"mappings\":{\"default\":{\"default\":\"flechas a noroeste y nordeste\"}},\"category\":\"Sm\"},{\"key\":\"2928\",\"mappings\":{\"default\":{\"default\":\"flechas a nordeste y sudeste\"}},\"category\":\"Sm\"},{\"key\":\"2929\",\"mappings\":{\"default\":{\"default\":\"flechas a suddeste y sudoeste\"}},\"category\":\"Sm\"},{\"key\":\"292A\",\"mappings\":{\"default\":{\"default\":\"flechas a sudoeste y noroeste\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"292D\",\"mappings\":{\"default\":{\"default\":\"flecha Sureste Cruzando Flecha Noreste\"}}},{\"category\":\"Sm\",\"key\":\"292E\",\"mappings\":{\"default\":{\"default\":\"north East Arrow Crossing South East Arrow\"}}},{\"category\":\"Sm\",\"key\":\"292F\",\"mappings\":{\"default\":{\"default\":\"caída en diagonal que cruza la flecha noreste\"}}},{\"category\":\"Sm\",\"key\":\"2930\",\"mappings\":{\"default\":{\"default\":\"creciente Cruce de la Cruz del Sureste de la Flecha\"}}},{\"category\":\"Sm\",\"key\":\"2931\",\"mappings\":{\"default\":{\"default\":\"north East Arrow Crossing North West Arrow\"}}},{\"category\":\"Sm\",\"key\":\"2932\",\"mappings\":{\"default\":{\"default\":\"north West Arrow Crossing North East Arrow\"}}},{\"key\":\"2933\",\"mappings\":{\"default\":{\"default\":\"flecha ondulada\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2934\",\"mappings\":{\"default\":{\"default\":\"flecha que apunta hacia la derecha y luego curva hacia arriba\"}}},{\"key\":\"2935\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha que gira hacia abajo\"}},\"category\":\"Sm\"},{\"key\":\"2936\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo que gira hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"2937\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo que gira hacia la derecha\"}},\"category\":\"Sm\"},{\"key\":\"2938\",\"mappings\":{\"default\":{\"default\":\"flecha semicircular a la derecha en sentido horario\"}},\"category\":\"Sm\"},{\"key\":\"2939\",\"mappings\":{\"default\":{\"default\":\"flecha semicircular a la izquierda en sentido antihorario\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"293A\",\"mappings\":{\"default\":{\"default\":\"arco superior flecha hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"293B\",\"mappings\":{\"default\":{\"default\":\"arco inferior flecha hacia la izquierda\"}}},{\"key\":\"293C\",\"mappings\":{\"default\":{\"default\":\"giro negativo\"}},\"category\":\"Sm\"},{\"key\":\"293D\",\"mappings\":{\"default\":{\"default\":\"giro positivo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"293E\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha semicircular inferior derecha\"}}},{\"category\":\"Sm\",\"key\":\"293F\",\"mappings\":{\"default\":{\"default\":\"flecha inferior izquierda semicircular en sentido antihorario\"}}},{\"category\":\"Sm\",\"key\":\"2940\",\"mappings\":{\"default\":{\"default\":\"círculo cerrado en sentido contrario a las agujas del reloj\"}}},{\"category\":\"Sm\",\"key\":\"2941\",\"mappings\":{\"default\":{\"default\":\"círculo cerrado en el sentido de las agujas del reloj\"}}},{\"category\":\"Sm\",\"key\":\"2942\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha sobre la flecha corta hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2943\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda sobre la flecha corta hacia la derecha\"}}},{\"category\":\"Sm\",\"key\":\"2944\",\"mappings\":{\"default\":{\"default\":\"flecha corta hacia la derecha arriba flecha hacia la izquierda\"}}},{\"key\":\"2945\",\"mappings\":{\"default\":{\"default\":\"flecha con más suscrito\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2946\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con más abajo\"}}},{\"category\":\"Sm\",\"key\":\"2947\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha a través de X\"}}},{\"key\":\"2948\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda a través de círculo\"}},\"category\":\"Sm\"},{\"key\":\"2949\",\"mappings\":{\"default\":{\"default\":\"dos cabezas de flecha hacia arriba desde círculo\"}},\"category\":\"Sm\"},{\"key\":\"2970\",\"mappings\":{\"default\":{\"default\":\"round implies\"}},\"category\":\"Sm\"},{\"key\":\"2971\",\"mappings\":{\"default\":{\"default\":\"flecha con igual\"}},\"category\":\"Sm\"},{\"key\":\"2972\",\"mappings\":{\"default\":{\"default\":\"flecha con tilde\"}},\"category\":\"Sm\"},{\"key\":\"2973\",\"mappings\":{\"default\":{\"default\":\"tilde con flecha hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"2974\",\"mappings\":{\"default\":{\"default\":\"tilde con flecha\"}},\"category\":\"Sm\"},{\"key\":\"2975\",\"mappings\":{\"default\":{\"default\":\"flecha con casi igual a\"}},\"category\":\"Sm\"},{\"key\":\"2976\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con menor que\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2977\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda a través de menos de\"}}},{\"key\":\"2978\",\"mappings\":{\"default\":{\"default\":\"flecha con mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2979\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con incluido\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"297A\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda a través del subconjunto\"}}},{\"key\":\"297B\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con contiene\"}},\"category\":\"Sm\"},{\"key\":\"29B3\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío con flecha\"}},\"category\":\"Sm\"},{\"key\":\"29B4\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío con flecha inversa\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29BD\",\"mappings\":{\"default\":{\"default\":\"flecha arriba a través del círculo\"}}},{\"category\":\"Sm\",\"key\":\"29EA\",\"mappings\":{\"default\":{\"default\":\"diamante negro con flecha hacia abajo\"}}},{\"category\":\"Sm\",\"key\":\"29EC\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con flecha hacia abajo\"}}},{\"category\":\"Sm\",\"key\":\"29ED\",\"mappings\":{\"default\":{\"default\":\"círculo negro con flecha hacia abajo\"}}},{\"key\":\"2A17\",\"mappings\":{\"default\":{\"default\":\"integral con flecha hacia la izquierda con garfio\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2B00\",\"mappings\":{\"default\":{\"default\":\"flecha blanca del noreste\"}}},{\"category\":\"So\",\"key\":\"2B01\",\"mappings\":{\"default\":{\"default\":\"flecha blanca del noroeste\"}}},{\"category\":\"So\",\"key\":\"2B02\",\"mappings\":{\"default\":{\"default\":\"flecha blanca del sureste\"}}},{\"category\":\"So\",\"key\":\"2B03\",\"mappings\":{\"default\":{\"default\":\"sudoeste flecha blanca\"}}},{\"category\":\"So\",\"key\":\"2B04\",\"mappings\":{\"default\":{\"default\":\"izquierda derecha flecha blanca\"}}},{\"category\":\"So\",\"key\":\"2B05\",\"mappings\":{\"default\":{\"default\":\"flecha negra hacia la izquierda\"}}},{\"category\":\"So\",\"key\":\"2B06\",\"mappings\":{\"default\":{\"default\":\"flecha negra hacia arriba\"}}},{\"category\":\"So\",\"key\":\"2B07\",\"mappings\":{\"default\":{\"default\":\"flecha negra hacia abajo\"}}},{\"category\":\"So\",\"key\":\"2B08\",\"mappings\":{\"default\":{\"default\":\"flecha negra del noreste\"}}},{\"category\":\"So\",\"key\":\"2B09\",\"mappings\":{\"default\":{\"default\":\"flecha negra del noroeste\"}}},{\"category\":\"So\",\"key\":\"2B0A\",\"mappings\":{\"default\":{\"default\":\"flecha negra sur este\"}}},{\"category\":\"So\",\"key\":\"2B0B\",\"mappings\":{\"default\":{\"default\":\"sudoeste flecha negra\"}}},{\"category\":\"So\",\"key\":\"2B0C\",\"mappings\":{\"default\":{\"default\":\"izquierda derecha flecha negra\"}}},{\"category\":\"So\",\"key\":\"2B0D\",\"mappings\":{\"default\":{\"default\":\"arriba abajo flecha negra\"}}},{\"category\":\"So\",\"key\":\"2B0E\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con la punta hacia abajo\"}}},{\"category\":\"So\",\"key\":\"2B0F\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha con la punta hacia arriba\"}}},{\"category\":\"So\",\"key\":\"2B10\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con la punta hacia abajo\"}}},{\"category\":\"So\",\"key\":\"2B11\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con la punta hacia arriba\"}}},{\"category\":\"Sm\",\"key\":\"2B30\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con círculo pequeño\"}}},{\"category\":\"Sm\",\"key\":\"2B31\",\"mappings\":{\"default\":{\"default\":\"tres flechas a la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B32\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con un círculo más\"}}},{\"category\":\"Sm\",\"key\":\"2B33\",\"mappings\":{\"default\":{\"default\":\"flecha de flecha larga hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B34\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B35\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda con doble movimiento vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B36\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda de la barra\"}}},{\"category\":\"Sm\",\"key\":\"2B37\",\"mappings\":{\"default\":{\"default\":\"flecha triple de dos cabezas hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B38\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con tallo punteado\"}}},{\"category\":\"Sm\",\"key\":\"2B39\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con cola con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B3A\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda con cola con doble trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B3B\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda con cola\"}}},{\"category\":\"Sm\",\"key\":\"2B3C\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda con cola con trazo vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B3D\",\"mappings\":{\"default\":{\"default\":\"flecha de dos cabezas hacia la izquierda con cola con doble movimiento vertical\"}}},{\"category\":\"Sm\",\"key\":\"2B3E\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda a través de X\"}}},{\"category\":\"Sm\",\"key\":\"2B3F\",\"mappings\":{\"default\":{\"default\":\"ola flecha apuntando directamente a la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B40\",\"mappings\":{\"default\":{\"default\":\"signo de igual flecha arriba a la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B41\",\"mappings\":{\"default\":{\"default\":\"operador de tilde inverso sobre la flecha hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B42\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda sobre el reverso casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2B43\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha a través de mayor-que\"}}},{\"category\":\"Sm\",\"key\":\"2B44\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha a través de Superset\"}}},{\"category\":\"So\",\"key\":\"2B45\",\"mappings\":{\"default\":{\"default\":\"flecha cuádruple hacia la izquierda\"}}},{\"category\":\"So\",\"key\":\"2B46\",\"mappings\":{\"default\":{\"default\":\"flecha cuádruple hacia la derecha\"}}},{\"category\":\"Sm\",\"key\":\"2B47\",\"mappings\":{\"default\":{\"default\":\"operador de tilde inverso sobre la flecha hacia la derecha\"}}},{\"category\":\"Sm\",\"key\":\"2B48\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha sobre el reverso casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2B49\",\"mappings\":{\"default\":{\"default\":\"operador de tilde sobre la flecha hacia la izquierda\"}}},{\"category\":\"Sm\",\"key\":\"2B4A\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda por encima de casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2B4B\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda sobre el operador de tilde inverso\"}}},{\"category\":\"Sm\",\"key\":\"2B4C\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la derecha sobre el operador de tilde inverso\"}}},{\"category\":\"Sm\",\"key\":\"FFE9\",\"mappings\":{\"default\":{\"default\":\"flecha hacia la izquierda de medio ancho\"}}},{\"category\":\"Sm\",\"key\":\"FFEA\",\"mappings\":{\"default\":{\"default\":\"flecha ascendente de medio ancho\"}}},{\"category\":\"Sm\",\"key\":\"FFEB\",\"mappings\":{\"default\":{\"default\":\"flecha de medio ancho hacia la derecha\"}}},{\"category\":\"Sm\",\"key\":\"FFEC\",\"mappings\":{\"default\":{\"default\":\"flecha hacia abajo de medio ancho\"}}}]\n,\n\"es/symbols/math_characters.js\": \n[{\"locale\":\"es\"},{\"key\":\"2113\",\"mappings\":{\"default\":{\"default\":\"script l\"}},\"category\":\"Ll\"},{\"key\":\"2118\",\"mappings\":{\"default\":{\"default\":\"p de weierstrass\"}},\"category\":\"Sm\"},{\"category\":\"Ll\",\"key\":\"213C\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra pi\"}}},{\"category\":\"Ll\",\"key\":\"213D\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra gamma\"}}},{\"category\":\"Lu\",\"key\":\"213E\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra mayúscula Gamma\"}}},{\"category\":\"Lu\",\"key\":\"213F\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra mayúscula Pi\"}}},{\"category\":\"Sm\",\"key\":\"2140\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra suma de n-ary\"}}},{\"key\":\"2145\",\"mappings\":{\"default\":{\"default\":\"mayúscula D\"}},\"category\":\"Lu\"},{\"key\":\"2146\",\"mappings\":{\"default\":{\"default\":\"d\"}},\"category\":\"Ll\"},{\"key\":\"2147\",\"mappings\":{\"default\":{\"default\":\"e\"}},\"category\":\"Ll\"},{\"key\":\"2148\",\"mappings\":{\"default\":{\"default\":\"i\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"2149\",\"mappings\":{\"default\":{\"default\":\"negrita de pizarra cursiva j\"}}},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"cursiva sin punto i\"}},\"key\":\"1D6A4\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"cursiva sin punto j\"}},\"key\":\"1D6A5\"}]\n,\n\"es/symbols/math_delimiters.js\": \n[{\"locale\":\"es\"},{\"key\":\"0028\",\"mappings\":{\"default\":{\"default\":\"paréntesis izquierdo\",\"defaultMP\":\"paréntesis\"}},\"category\":\"Ps\"},{\"key\":\"0029\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho\",\"defaultMP\":\"cierra paréntesis\"}},\"category\":\"Pe\"},{\"key\":\"005B\",\"mappings\":{\"default\":{\"default\":\"corchete izquierdo\",\"defaultMP\":\"abre corchetes\"}},\"category\":\"Ps\"},{\"key\":\"005D\",\"mappings\":{\"default\":{\"default\":\"corchete derecho\",\"defaultMP\":\"cierra corchetes\"}},\"category\":\"Pe\"},{\"key\":\"007B\",\"mappings\":{\"default\":{\"default\":\"llave izquierda\",\"defaultMP\":\"abre llaves\"}},\"category\":\"Ps\"},{\"key\":\"007D\",\"mappings\":{\"default\":{\"default\":\"llaves derecha\",\"defaultMP\":\"cierra llaves\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2045\",\"mappings\":{\"default\":{\"default\":\"soporte cuadrado izquierdo con pluma\"}}},{\"category\":\"Pe\",\"key\":\"2046\",\"mappings\":{\"default\":{\"default\":\"soporte cuadrado derecho con pluma\"}}},{\"key\":\"2308\",\"mappings\":{\"default\":{\"default\":\"esquina superior izquierda\"}},\"category\":\"Sm\"},{\"key\":\"2309\",\"mappings\":{\"default\":{\"default\":\"esquina superior derecha\"}},\"category\":\"Sm\"},{\"key\":\"230A\",\"mappings\":{\"default\":{\"default\":\"esquina inferior izquierda\"}},\"category\":\"Sm\"},{\"key\":\"230B\",\"mappings\":{\"default\":{\"default\":\"esquina inferior derecha\"}},\"category\":\"Sm\"},{\"key\":\"230C\",\"mappings\":{\"default\":{\"default\":\"corte inferior derecho\"}},\"category\":\"So\"},{\"key\":\"230D\",\"mappings\":{\"default\":{\"default\":\"corte inferior izquierdo\"}},\"category\":\"So\"},{\"key\":\"230E\",\"mappings\":{\"default\":{\"default\":\"corte superior derecho \"}},\"category\":\"So\"},{\"key\":\"230F\",\"mappings\":{\"default\":{\"default\":\"corte superior izquierdo\"}},\"category\":\"So\"},{\"key\":\"231C\",\"mappings\":{\"default\":{\"default\":\"ángulo superior izquierdo\"}},\"category\":\"So\"},{\"key\":\"231D\",\"mappings\":{\"default\":{\"default\":\"ángulo superior derecho\"}},\"category\":\"So\"},{\"key\":\"231E\",\"mappings\":{\"default\":{\"default\":\"ángulo inferior izquierdo\"}},\"category\":\"So\"},{\"key\":\"231F\",\"mappings\":{\"default\":{\"default\":\"ángulo inferior derecho\"}},\"category\":\"So\"},{\"key\":\"2320\",\"mappings\":{\"default\":{\"default\":\"mitad superior de integral\"}},\"category\":\"Sm\"},{\"key\":\"2321\",\"mappings\":{\"default\":{\"default\":\"mitad inferior de integral\"}},\"category\":\"Sm\"},{\"key\":\"2329\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"232A\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular derecho\"}},\"category\":\"Pe\"},{\"category\":\"Sm\",\"key\":\"239B\",\"mappings\":{\"default\":{\"default\":\"paréntesis izquierdo gancho superior\"}}},{\"category\":\"Sm\",\"key\":\"239C\",\"mappings\":{\"default\":{\"default\":\"extensión del paréntesis izquierdo\"}}},{\"category\":\"Sm\",\"key\":\"239D\",\"mappings\":{\"default\":{\"default\":\"paréntesis inferior gancho inferior\"}}},{\"category\":\"Sm\",\"key\":\"239E\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho gancho superior\"}}},{\"category\":\"Sm\",\"key\":\"239F\",\"mappings\":{\"default\":{\"default\":\"extensión del paréntesis derecho\"}}},{\"category\":\"Sm\",\"key\":\"23A0\",\"mappings\":{\"default\":{\"default\":\"paréntesis inferior gancho inferior\"}}},{\"category\":\"Sm\",\"key\":\"23A1\",\"mappings\":{\"default\":{\"default\":\"esquina cuadrada izquierda esquina superior\"}}},{\"category\":\"Sm\",\"key\":\"23A2\",\"mappings\":{\"default\":{\"default\":\"extensión del soporte cuadrado izquierdo\"}}},{\"category\":\"Sm\",\"key\":\"23A3\",\"mappings\":{\"default\":{\"default\":\"esquina cuadrada izquierda esquina inferior\"}}},{\"category\":\"Sm\",\"key\":\"23A4\",\"mappings\":{\"default\":{\"default\":\"esquina cuadrada derecha esquina superior\"}}},{\"category\":\"Sm\",\"key\":\"23A5\",\"mappings\":{\"default\":{\"default\":\"extensión de soporte cuadrado derecho\"}}},{\"category\":\"Sm\",\"key\":\"23A6\",\"mappings\":{\"default\":{\"default\":\"esquina cuadrada derecha esquina inferior\"}}},{\"category\":\"Sm\",\"key\":\"23A7\",\"mappings\":{\"default\":{\"default\":\"gancho superior rizado izquierdo\"}}},{\"category\":\"Sm\",\"key\":\"23A8\",\"mappings\":{\"default\":{\"default\":\"pedazo medio rizado izquierdo\"}}},{\"category\":\"Sm\",\"key\":\"23A9\",\"mappings\":{\"default\":{\"default\":\"soporte izquierdo rizado gancho inferior\"}}},{\"category\":\"Sm\",\"key\":\"23AA\",\"mappings\":{\"default\":{\"default\":\"extensión de soporte rizado\"}}},{\"category\":\"Sm\",\"key\":\"23AB\",\"mappings\":{\"default\":{\"default\":\"gancho superior rizado derecho\"}}},{\"category\":\"Sm\",\"key\":\"23AC\",\"mappings\":{\"default\":{\"default\":\"pedazo medio de soporte rizado derecho\"}}},{\"category\":\"Sm\",\"key\":\"23AD\",\"mappings\":{\"default\":{\"default\":\"abrazadera inferior derecha rizado\"}}},{\"category\":\"Sm\",\"key\":\"23AE\",\"mappings\":{\"default\":{\"default\":\"extensión integral\"}}},{\"category\":\"Sm\",\"key\":\"23AF\",\"mappings\":{\"default\":{\"default\":\"extensión de línea horizontal\"}}},{\"key\":\"23B0\",\"mappings\":{\"default\":{\"default\":\"izquierda arriba o derecho debajo sección llave\"}},\"category\":\"Sm\"},{\"key\":\"23B1\",\"mappings\":{\"default\":{\"default\":\"derecha arriba o izquierdo debajo sección llave\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"23B2\",\"mappings\":{\"default\":{\"default\":\"suma superior\"}}},{\"category\":\"Sm\",\"key\":\"23B3\",\"mappings\":{\"default\":{\"default\":\"parte inferior de la suma\"}}},{\"key\":\"23B4\",\"mappings\":{\"default\":{\"default\":\"corchete superior\"}},\"category\":\"So\"},{\"key\":\"23B5\",\"mappings\":{\"default\":{\"default\":\"corchete inferior\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"23B6\",\"mappings\":{\"default\":{\"default\":\"soporte cuadrado inferior sobre soporte cuadrado superior\"}}},{\"category\":\"So\",\"key\":\"23B7\",\"mappings\":{\"default\":{\"default\":\"parte inferior del símbolo radical\"}}},{\"category\":\"So\",\"key\":\"23B8\",\"mappings\":{\"default\":{\"default\":\"línea de caja vertical izquierda\"}}},{\"category\":\"So\",\"key\":\"23B9\",\"mappings\":{\"default\":{\"default\":\"línea de caja vertical derecha\"}}},{\"key\":\"23DC\",\"mappings\":{\"default\":{\"default\":\"paréntesis superior\"}},\"category\":\"Sm\"},{\"key\":\"23DD\",\"mappings\":{\"default\":{\"default\":\"paréntesis inferior\"}},\"category\":\"Sm\"},{\"key\":\"23DE\",\"mappings\":{\"default\":{\"default\":\"corchete rizado superior\"}},\"category\":\"Sm\"},{\"key\":\"23DF\",\"mappings\":{\"default\":{\"default\":\"corchete rizado inferior\"}},\"category\":\"Sm\"},{\"key\":\"23E0\",\"mappings\":{\"default\":{\"default\":\"corchete superior en tortuga\"}},\"category\":\"Sm\"},{\"key\":\"23E1\",\"mappings\":{\"default\":{\"default\":\"corchete inferior en tortuga\"}},\"category\":\"Sm\"},{\"category\":\"Ps\",\"key\":\"2768\",\"mappings\":{\"default\":{\"default\":\"ornamento de paréntesis izquierdo medio\"}}},{\"category\":\"Pe\",\"key\":\"2769\",\"mappings\":{\"default\":{\"default\":\"adorno de paréntesis medio derecho\"}}},{\"category\":\"Ps\",\"key\":\"276A\",\"mappings\":{\"default\":{\"default\":\"adorno paréntesis izquierdo aplanado medio\"}}},{\"category\":\"Pe\",\"key\":\"276B\",\"mappings\":{\"default\":{\"default\":\"adorno paréntesis derecho medio aplanado\"}}},{\"category\":\"Ps\",\"key\":\"276C\",\"mappings\":{\"default\":{\"default\":\"adorno de soporte de ángulo medio apuntando hacia la izquierda\"}}},{\"category\":\"Pe\",\"key\":\"276D\",\"mappings\":{\"default\":{\"default\":\"adorno de soporte de ángulo medio apuntando hacia la derecha\"}}},{\"category\":\"Ps\",\"key\":\"276E\",\"mappings\":{\"default\":{\"default\":\"ornamento de comillas en el ángulo que apunta hacia la izquierda\"}}},{\"category\":\"Pe\",\"key\":\"276F\",\"mappings\":{\"default\":{\"default\":\"ornamento de comillas en ángulo recto que apunta hacia la derecha\"}}},{\"category\":\"Ps\",\"key\":\"2770\",\"mappings\":{\"default\":{\"default\":\"ornamento pesado del soporte del ángulo que señala a la izquierda\"}}},{\"category\":\"Pe\",\"key\":\"2771\",\"mappings\":{\"default\":{\"default\":\"ornamento pesado del soporte del ángulo que señala hacia la derecha\"}}},{\"category\":\"Ps\",\"key\":\"2772\",\"mappings\":{\"default\":{\"default\":\"ornamento de soporte de concha de tortuga izquierda ligera\"}}},{\"category\":\"Pe\",\"key\":\"2773\",\"mappings\":{\"default\":{\"default\":\"ornamento de corchete derecho tortuga derecha\"}}},{\"category\":\"Ps\",\"key\":\"2774\",\"mappings\":{\"default\":{\"default\":\"ornamento de soporte rizado izquierdo medio\"}}},{\"category\":\"Pe\",\"key\":\"2775\",\"mappings\":{\"default\":{\"default\":\"ornamento de soporte rizado derecho medio\"}}},{\"key\":\"27C5\",\"mappings\":{\"default\":{\"default\":\"símbolo delimitador izquierdo de bolsa de s-formó\"}},\"category\":\"Ps\"},{\"key\":\"27C6\",\"mappings\":{\"default\":{\"default\":\"símbolo delimitador derecho de bolsa de s-formó\"}},\"category\":\"Pe\"},{\"key\":\"27E6\",\"mappings\":{\"default\":{\"default\":\"corchete vacío izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"27E7\",\"mappings\":{\"default\":{\"default\":\"corchete vacío derecho\"}},\"category\":\"Pe\"},{\"key\":\"27E8\",\"mappings\":{\"default\":{\"default\":\"corchete agudo izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"27E9\",\"mappings\":{\"default\":{\"default\":\"corchete agudo derecho\"}},\"category\":\"Pe\"},{\"key\":\"27EA\",\"mappings\":{\"default\":{\"default\":\"doble corchete agudo izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"27EB\",\"mappings\":{\"default\":{\"default\":\"doble corchete agudo derecho\"}},\"category\":\"Pe\"},{\"key\":\"27EC\",\"mappings\":{\"default\":{\"default\":\"corchete de tortuga vacío izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"27ED\",\"mappings\":{\"default\":{\"default\":\"corchete de tortuga vacío derecho \"}},\"category\":\"Pe\"},{\"key\":\"27EE\",\"mappings\":{\"default\":{\"default\":\"paréntesis plano izquierdo\"}},\"category\":\"Ps\"},{\"key\":\"27EF\",\"mappings\":{\"default\":{\"default\":\"paréntesis plano derecho\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2983\",\"mappings\":{\"default\":{\"default\":\"soporte rizado blanco izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"2984\",\"mappings\":{\"default\":{\"default\":\"derecha rizado blanco soporte\"}}},{\"key\":\"2985\",\"mappings\":{\"default\":{\"default\":\"left white paren\"}},\"category\":\"Ps\"},{\"key\":\"2986\",\"mappings\":{\"default\":{\"default\":\"right white paren\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2987\",\"mappings\":{\"default\":{\"default\":\"notación Z izquierda soporte de imagen\"}}},{\"category\":\"Pe\",\"key\":\"2988\",\"mappings\":{\"default\":{\"default\":\"corchete de imagen derecha de notación Z\"}}},{\"key\":\"2989\",\"mappings\":{\"default\":{\"default\":\"z notation left binding bracket\"}},\"category\":\"Ps\"},{\"key\":\"298A\",\"mappings\":{\"default\":{\"default\":\"z notation right binding bracket\"}},\"category\":\"Pe\"},{\"key\":\"298B\",\"mappings\":{\"default\":{\"default\":\"left bracket with underbar\"}},\"category\":\"Ps\"},{\"key\":\"298C\",\"mappings\":{\"default\":{\"default\":\"right bracket with underbar\"}},\"category\":\"Pe\"},{\"key\":\"298D\",\"mappings\":{\"default\":{\"default\":\"left bracket with tick in top corner\"}},\"category\":\"Ps\"},{\"key\":\"298E\",\"mappings\":{\"default\":{\"default\":\"right bracket with tick in bottom corner\"}},\"category\":\"Pe\"},{\"key\":\"298F\",\"mappings\":{\"default\":{\"default\":\"left bracket with tick in bottom corner\"}},\"category\":\"Ps\"},{\"key\":\"2990\",\"mappings\":{\"default\":{\"default\":\"right bracket with tick in top corner\"}},\"category\":\"Pe\"},{\"key\":\"2991\",\"mappings\":{\"default\":{\"default\":\"left angle bracket with dot\"}},\"category\":\"Ps\"},{\"key\":\"2992\",\"mappings\":{\"default\":{\"default\":\"right angle bracket with dot\"}},\"category\":\"Pe\"},{\"key\":\"2993\",\"mappings\":{\"default\":{\"default\":\"left arc less than bracket\"}},\"category\":\"Ps\"},{\"key\":\"2994\",\"mappings\":{\"default\":{\"default\":\"right arc greater than bracket\"}},\"category\":\"Pe\"},{\"key\":\"2995\",\"mappings\":{\"default\":{\"default\":\"double left arc greater than bracket\"}},\"category\":\"Ps\"},{\"key\":\"2996\",\"mappings\":{\"default\":{\"default\":\"double right arc less than bracket\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2997\",\"mappings\":{\"default\":{\"default\":\"soporte de concha de tortuga negra izquierda\"}}},{\"category\":\"Pe\",\"key\":\"2998\",\"mappings\":{\"default\":{\"default\":\"abrazadera de concha de tortuga negra derecha\"}}},{\"category\":\"Ps\",\"key\":\"29D8\",\"mappings\":{\"default\":{\"default\":\"valla izquierda ondulada\"}}},{\"category\":\"Pe\",\"key\":\"29D9\",\"mappings\":{\"default\":{\"default\":\"valla derecha ondulada\"}}},{\"key\":\"29DA\",\"mappings\":{\"default\":{\"default\":\"left double wiggly fence\"}},\"category\":\"Ps\"},{\"key\":\"29DB\",\"mappings\":{\"default\":{\"default\":\"right double wiggly fence\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"29FC\",\"mappings\":{\"default\":{\"default\":\"abrazadera de ángulo curvo a la izquierda\"}}},{\"category\":\"Pe\",\"key\":\"29FD\",\"mappings\":{\"default\":{\"default\":\"abrazadera de ángulo curvo orientada hacia la derecha\"}}},{\"category\":\"Ps\",\"key\":\"2E22\",\"mappings\":{\"default\":{\"default\":\"soporte superior izquierdo superior\"}}},{\"category\":\"Pe\",\"key\":\"2E23\",\"mappings\":{\"default\":{\"default\":\"medio soporte superior derecho\"}}},{\"category\":\"Ps\",\"key\":\"2E24\",\"mappings\":{\"default\":{\"default\":\"abrazadera inferior izquierda\"}}},{\"category\":\"Pe\",\"key\":\"2E25\",\"mappings\":{\"default\":{\"default\":\"medio soporte inferior derecho\"}}},{\"category\":\"Ps\",\"key\":\"2E26\",\"mappings\":{\"default\":{\"default\":\"soporte U lateral izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"2E27\",\"mappings\":{\"default\":{\"default\":\"lado derecho U soporte\"}}},{\"category\":\"Ps\",\"key\":\"2E28\",\"mappings\":{\"default\":{\"default\":\"doble paréntesis izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"2E29\",\"mappings\":{\"default\":{\"default\":\"paréntesis doble derecho\"}}},{\"category\":\"Ps\",\"key\":\"3008\",\"mappings\":{\"default\":{\"default\":\"soporte de ángulo izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"3009\",\"mappings\":{\"default\":{\"default\":\"soporte de ángulo recto\"}}},{\"key\":\"300A\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular doble\"}},\"category\":\"Ps\"},{\"key\":\"300B\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular doble derecho\",\"defaultMP\":\"cierra paréntesis angular doble\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"300C\",\"mappings\":{\"default\":{\"default\":\"soporte de la esquina izquierda\"}}},{\"category\":\"Pe\",\"key\":\"300D\",\"mappings\":{\"default\":{\"default\":\"soporte de esquina derecha\"}}},{\"category\":\"Ps\",\"key\":\"300E\",\"mappings\":{\"default\":{\"default\":\"soporte de esquina blanco izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"300F\",\"mappings\":{\"default\":{\"default\":\"soporte de esquina blanco derecho\"}}},{\"category\":\"Ps\",\"key\":\"3010\",\"mappings\":{\"default\":{\"default\":\"soporte Lenticular Izquierdo Negro\"}}},{\"category\":\"Pe\",\"key\":\"3011\",\"mappings\":{\"default\":{\"default\":\"soporte Lenticular Negro Derecho\"}}},{\"key\":\"3014\",\"mappings\":{\"default\":{\"default\":\"left tortoise shell bracket\"}},\"category\":\"Ps\"},{\"key\":\"3015\",\"mappings\":{\"default\":{\"default\":\"right tortoise shell bracket\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"3016\",\"mappings\":{\"default\":{\"default\":\"soporte lenticular blanco izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"3017\",\"mappings\":{\"default\":{\"default\":\"soporte lenticular blanco derecho\"}}},{\"category\":\"Ps\",\"key\":\"3018\",\"mappings\":{\"default\":{\"default\":\"soporte de caparazón de tortuga blanca izquierda\"}}},{\"category\":\"Pe\",\"key\":\"3019\",\"mappings\":{\"default\":{\"default\":\"soporte de concha de tortuga blanca derecha\"}}},{\"key\":\"301A\",\"mappings\":{\"default\":{\"default\":\"corchete vacío\"}},\"category\":\"Ps\"},{\"key\":\"301B\",\"mappings\":{\"default\":{\"default\":\"corchete vacío derecho\",\"defaultMP\":\"cierra corchete vacío\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"301D\",\"mappings\":{\"default\":{\"default\":\"comilla doble invertida\"}}},{\"key\":\"301E\",\"mappings\":{\"default\":{\"default\":\"segunda\"}},\"category\":\"Pe\"},{\"category\":\"Pe\",\"key\":\"301F\",\"mappings\":{\"default\":{\"default\":\"comillas bajas dobles\"}}},{\"category\":\"Ps\",\"key\":\"FD3E\",\"mappings\":{\"default\":{\"default\":\"paréntesis izquierdo adornado\"}}},{\"category\":\"Pe\",\"key\":\"FD3F\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho adornado\"}}},{\"category\":\"Ps\",\"key\":\"FE17\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte lenticular blanco izquierdo vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE18\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte lenticular blanco vertical derecho\"}}},{\"key\":\"FE35\",\"mappings\":{\"default\":{\"default\":\"paréntesis superior\"}},\"category\":\"Ps\"},{\"key\":\"FE36\",\"mappings\":{\"default\":{\"default\":\"paréntesis inferior\"}},\"category\":\"Pe\"},{\"key\":\"FE37\",\"mappings\":{\"default\":{\"default\":\"llave superior\"}},\"category\":\"Ps\"},{\"key\":\"FE38\",\"mappings\":{\"default\":{\"default\":\"llave inferior\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"FE39\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el soporte vertical de concha de tortuga izquierda\"}}},{\"category\":\"Pe\",\"key\":\"FE3A\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el soporte vertical de concha de tortuga derecha\"}}},{\"category\":\"Ps\",\"key\":\"FE3B\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el soporte lenticular negro izquierdo vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE3C\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el soporte lenticular negro derecho vertical\"}}},{\"category\":\"Ps\",\"key\":\"FE3D\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte vertical doble ángulo izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"FE3E\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el soporte de ángulo recto doble vertical\"}}},{\"key\":\"FE3F\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular superior\"}},\"category\":\"Ps\"},{\"key\":\"FE40\",\"mappings\":{\"default\":{\"default\":\"paréntesis angular inferior\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"FE41\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte de esquina vertical izquierda\"}}},{\"category\":\"Pe\",\"key\":\"FE42\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte de esquina vertical derecha\"}}},{\"category\":\"Ps\",\"key\":\"FE43\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte de esquina blanco vertical izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"FE44\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte de esquina vertical derecha blanca\"}}},{\"category\":\"Ps\",\"key\":\"FE47\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte cuadrado vertical izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"FE48\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para soporte cuadrado vertical derecho\"}}},{\"category\":\"Ps\",\"key\":\"FE59\",\"mappings\":{\"default\":{\"default\":\"pequeño paréntesis izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"FE5A\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho pequeño\"}}},{\"category\":\"Ps\",\"key\":\"FE5B\",\"mappings\":{\"default\":{\"default\":\"corchete Rizado Izquierdo Pequeño\"}}},{\"category\":\"Pe\",\"key\":\"FE5C\",\"mappings\":{\"default\":{\"default\":\"corchete derecho rizado pequeño\"}}},{\"category\":\"Ps\",\"key\":\"FE5D\",\"mappings\":{\"default\":{\"default\":\"soporte de concha pequeña tortuga izquierda\"}}},{\"category\":\"Pe\",\"key\":\"FE5E\",\"mappings\":{\"default\":{\"default\":\"pequeño corchete derecho de concha de tortuga\"}}},{\"category\":\"Ps\",\"key\":\"FF08\",\"mappings\":{\"default\":{\"default\":\"paréntesis izquierdo de ancho completo\"}}},{\"category\":\"Pe\",\"key\":\"FF09\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho de ancho completo\"}}},{\"category\":\"Ps\",\"key\":\"FF3B\",\"mappings\":{\"default\":{\"default\":\"soporte cuadrado izquierdo de ancho completo\"}}},{\"category\":\"Pe\",\"key\":\"FF3D\",\"mappings\":{\"default\":{\"default\":\"soporte cuadrado derecho de ancho completo\"}}},{\"category\":\"Ps\",\"key\":\"FF5B\",\"mappings\":{\"default\":{\"default\":\"corchete rizado izquierdo de ancho completo\"}}},{\"category\":\"Pe\",\"key\":\"FF5D\",\"mappings\":{\"default\":{\"default\":\"corchete derecho de ancho completo\"}}},{\"category\":\"Ps\",\"key\":\"FF5F\",\"mappings\":{\"default\":{\"default\":\"paréntesis blanco izquierdo de ancho completo\"}}},{\"category\":\"Pe\",\"key\":\"FF60\",\"mappings\":{\"default\":{\"default\":\"paréntesis blanco derecho de ancho completo\"}}},{\"category\":\"Ps\",\"key\":\"FF62\",\"mappings\":{\"default\":{\"default\":\"corchete de esquina izquierda de medio ancho\"}}},{\"category\":\"Pe\",\"key\":\"FF63\",\"mappings\":{\"default\":{\"default\":\"soporte de esquina derecha de medio ancho\"}}}]\n,\n\"es/symbols/math_geometry.js\": \n[{\"locale\":\"es\"},{\"key\":\"2500\",\"mappings\":{\"default\":{\"default\":\"delimitador horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2501\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesadas horizontales\"}}},{\"key\":\"2502\",\"mappings\":{\"default\":{\"default\":\"delimitador vertical\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2503\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Pesado Vertical\"}}},{\"category\":\"So\",\"key\":\"2504\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Light Triple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2505\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Triple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2506\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Light Triple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"2507\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Triple Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"2508\",\"mappings\":{\"default\":{\"default\":\"caja Dibujos Ligero Cuadruple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"2509\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Quadruple Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"250A\",\"mappings\":{\"default\":{\"default\":\"caja Dibujos Luz Cuadruple Tablero Vertical\"}}},{\"category\":\"So\",\"key\":\"250B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Quadruple Dash Vertical\"}}},{\"key\":\"250C\",\"mappings\":{\"default\":{\"default\":\"esquina inferior derecha\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"250D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Abajo Ligero y Derecho Pesado\"}}},{\"category\":\"So\",\"key\":\"250E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo pesados ​​y rectos ligeros\"}}},{\"category\":\"So\",\"key\":\"250F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​abajo y derecha\"}}},{\"key\":\"2510\",\"mappings\":{\"default\":{\"default\":\"esquina inferior izquierda\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2511\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo ligeros y pesados ​​a la izquierda\"}}},{\"category\":\"So\",\"key\":\"2512\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo pesados ​​y luz izquierda\"}}},{\"category\":\"So\",\"key\":\"2513\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​hacia abajo y hacia la izquierda\"}}},{\"key\":\"2514\",\"mappings\":{\"default\":{\"default\":\"esquina superior derecha\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2515\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta ligero y derecho pesado\"}}},{\"category\":\"So\",\"key\":\"2516\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta Pesadas y Ligeras\"}}},{\"category\":\"So\",\"key\":\"2517\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​y derechos\"}}},{\"key\":\"2518\",\"mappings\":{\"default\":{\"default\":\"esquina superior izquierda\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2519\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta livianos y pesados ​​a la izquierda\"}}},{\"category\":\"So\",\"key\":\"251A\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta pesado y luz izquierda\"}}},{\"category\":\"So\",\"key\":\"251B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​hacia arriba y hacia la izquierda\"}}},{\"key\":\"251C\",\"mappings\":{\"default\":{\"default\":\"delimitador izquierdo y separador horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"251D\",\"mappings\":{\"default\":{\"default\":\"cuadros de caja Vertical ligero y derecho pesado\"}}},{\"category\":\"So\",\"key\":\"251E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta pesados ​​y rectos hacia abajo\"}}},{\"category\":\"So\",\"key\":\"251F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo pesados ​​y rectos arriba ligeros\"}}},{\"category\":\"So\",\"key\":\"2520\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas verticales pesadas y rectas ligeras\"}}},{\"category\":\"So\",\"key\":\"2521\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo ligeros y rectos arriba pesados\"}}},{\"category\":\"So\",\"key\":\"2522\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas para arriba livianos y rectos para abajo pesados\"}}},{\"category\":\"So\",\"key\":\"2523\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesadas verticales y derechas\"}}},{\"key\":\"2524\",\"mappings\":{\"default\":{\"default\":\"delimitador derecho y separador horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2525\",\"mappings\":{\"default\":{\"default\":\"cuadros de caja Vertical ligero y izquierdo pesado\"}}},{\"category\":\"So\",\"key\":\"2526\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas para arriba Pesado y Izquierda Abajo Luz\"}}},{\"category\":\"So\",\"key\":\"2527\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo pesados ​​y luz izquierda arriba\"}}},{\"category\":\"So\",\"key\":\"2528\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas verticales pesadas y luz izquierda\"}}},{\"category\":\"So\",\"key\":\"2529\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo ligeros e izquierdos arriba pesados\"}}},{\"category\":\"So\",\"key\":\"252A\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas para arriba Ligero y Izquierda Abajo Pesado\"}}},{\"category\":\"So\",\"key\":\"252B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesadas verticales e izquierdas\"}}},{\"key\":\"252C\",\"mappings\":{\"default\":{\"default\":\"delimitador superior y separador vertical\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"252D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas izquierda pesados ​​y derecha abajo luz\"}}},{\"category\":\"So\",\"key\":\"252E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas, derecha, pesada y izquierda abajo, luz\"}}},{\"category\":\"So\",\"key\":\"252F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo ligeros y horizontales pesados\"}}},{\"category\":\"So\",\"key\":\"2530\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz pesada y horizontal\"}}},{\"category\":\"So\",\"key\":\"2531\",\"mappings\":{\"default\":{\"default\":\"dibujos de la caja de luz derecha y izquierda abajo pesado\"}}},{\"category\":\"So\",\"key\":\"2532\",\"mappings\":{\"default\":{\"default\":\"cuadros de caja izquierda ligera y derecha abajo pesada\"}}},{\"category\":\"So\",\"key\":\"2533\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​y horizontales\"}}},{\"key\":\"2534\",\"mappings\":{\"default\":{\"default\":\"delimitador inferior y separador vertical\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2535\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas izquierda pesada y derecha arriba ligera\"}}},{\"category\":\"So\",\"key\":\"2536\",\"mappings\":{\"default\":{\"default\":\"dibujos de caja derecha pesada y luz izquierda arriba\"}}},{\"category\":\"So\",\"key\":\"2537\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta ligero y horizontal pesado\"}}},{\"category\":\"So\",\"key\":\"2538\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hasta luz pesada y horizontal\"}}},{\"category\":\"So\",\"key\":\"2539\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas a la derecha, livianos y a la izquierda, pesados\"}}},{\"category\":\"So\",\"key\":\"253A\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Izquierda Ligera y Derecha Arriba Pesada\"}}},{\"category\":\"So\",\"key\":\"253B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​y horizontales\"}}},{\"key\":\"253C\",\"mappings\":{\"default\":{\"default\":\"cruce de separadores sencillos\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"253D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Izquierda Pesada y Derecha Vertical Luz\"}}},{\"category\":\"So\",\"key\":\"253E\",\"mappings\":{\"default\":{\"default\":\"dibujos de caja derecha pesada y luz vertical izquierda\"}}},{\"category\":\"So\",\"key\":\"253F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Vertical Ligera y Horizontal Pesada\"}}},{\"category\":\"So\",\"key\":\"2540\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas para arriba pesados ​​y abajo luz horizontal\"}}},{\"category\":\"So\",\"key\":\"2541\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas hacia abajo pesados ​​y hacia arriba luz horizontal\"}}},{\"category\":\"So\",\"key\":\"2542\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas verticales pesadas y horizontales ligeras\"}}},{\"category\":\"So\",\"key\":\"2543\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Izquierda Arriba Pesada y Derecha abajo Luz\"}}},{\"category\":\"So\",\"key\":\"2544\",\"mappings\":{\"default\":{\"default\":\"dibujos de caja derecha arriba pesada y izquierda abajo luz\"}}},{\"category\":\"So\",\"key\":\"2545\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas, izquierda abajo, pesada y derecha arriba, ligera\"}}},{\"category\":\"So\",\"key\":\"2546\",\"mappings\":{\"default\":{\"default\":\"dibujos de la caja derecha abajo pesada y izquierda arriba ligera\"}}},{\"category\":\"So\",\"key\":\"2547\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas abajo ligeros y ascendentes horizontales pesados\"}}},{\"category\":\"So\",\"key\":\"2548\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas para arriba Ligero y para abajo horizontal pesado\"}}},{\"category\":\"So\",\"key\":\"2549\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas a la derecha, ligeros y a la izquierda, verticales, pesados\"}}},{\"category\":\"So\",\"key\":\"254A\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Izquierda Ligera y Derecha Vertical Pesada\"}}},{\"category\":\"So\",\"key\":\"254B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesadas verticales y horizontales\"}}},{\"category\":\"So\",\"key\":\"254C\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Light Double Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"254D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Double Dash Horizontal\"}}},{\"category\":\"So\",\"key\":\"254E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Light Double Dash Vertical\"}}},{\"category\":\"So\",\"key\":\"254F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Heavy Double Dash Vertical\"}}},{\"key\":\"2550\",\"mappings\":{\"default\":{\"default\":\"delimitador horizontal doble\"}},\"category\":\"So\"},{\"key\":\"2551\",\"mappings\":{\"default\":{\"default\":\"delimitador vertical doble\"}},\"category\":\"So\"},{\"key\":\"2552\",\"mappings\":{\"default\":{\"default\":\"esquina inferior derecha, vertical doble\"}},\"category\":\"So\"},{\"key\":\"2553\",\"mappings\":{\"default\":{\"default\":\"esquina inferior derecha, horizontal doble\"}},\"category\":\"So\"},{\"key\":\"2554\",\"mappings\":{\"default\":{\"default\":\"esquina inferior derecha doble\"}},\"category\":\"So\"},{\"key\":\"2555\",\"mappings\":{\"default\":{\"default\":\"esquina inferior izquierda, vertical doble\"}},\"category\":\"So\"},{\"key\":\"2556\",\"mappings\":{\"default\":{\"default\":\"esquina inferior izquierda, horizontal doble\"}},\"category\":\"So\"},{\"key\":\"2557\",\"mappings\":{\"default\":{\"default\":\"esquina inferior izquierda doble\"}},\"category\":\"So\"},{\"key\":\"2558\",\"mappings\":{\"default\":{\"default\":\"esquina superior derecha, vertical doble\"}},\"category\":\"So\"},{\"key\":\"2559\",\"mappings\":{\"default\":{\"default\":\"esquina superior derecha, horizontal doble\"}},\"category\":\"So\"},{\"key\":\"255A\",\"mappings\":{\"default\":{\"default\":\"esquina superior derecha doble\"}},\"category\":\"So\"},{\"key\":\"255B\",\"mappings\":{\"default\":{\"default\":\"esquina superior izquierda, vertical doble\"}},\"category\":\"So\"},{\"key\":\"255C\",\"mappings\":{\"default\":{\"default\":\"esquina superior izquierda, horizontal doble\"}},\"category\":\"So\"},{\"key\":\"255D\",\"mappings\":{\"default\":{\"default\":\"esquina superior izquierda doble\"}},\"category\":\"So\"},{\"key\":\"255E\",\"mappings\":{\"default\":{\"default\":\"delimitador izquierdo con separador doble\"}},\"category\":\"So\"},{\"key\":\"255F\",\"mappings\":{\"default\":{\"default\":\"delimitador izquierdo doble con separador horizontal\"}},\"category\":\"So\"},{\"key\":\"2560\",\"mappings\":{\"default\":{\"default\":\"delimitador izquierdo y separador horizontal dobles\"}},\"category\":\"So\"},{\"key\":\"2561\",\"mappings\":{\"default\":{\"default\":\"delimitador derecho con separador doble\"}},\"category\":\"So\"},{\"key\":\"2562\",\"mappings\":{\"default\":{\"default\":\"delimitador derecho doble con separador horizontal\"}},\"category\":\"So\"},{\"key\":\"2563\",\"mappings\":{\"default\":{\"default\":\"delimitador derecho y separador horizontal dobles\"}},\"category\":\"So\"},{\"key\":\"2564\",\"mappings\":{\"default\":{\"default\":\"delimitador superior doble con separador vertical\"}},\"category\":\"So\"},{\"key\":\"2565\",\"mappings\":{\"default\":{\"default\":\"delimitador superior con separador vertical doble\"}},\"category\":\"So\"},{\"key\":\"2566\",\"mappings\":{\"default\":{\"default\":\"delimitador superior y separador vertical dobles\"}},\"category\":\"So\"},{\"key\":\"2567\",\"mappings\":{\"default\":{\"default\":\"delimitador inferior doble con separador vertical\"}},\"category\":\"So\"},{\"key\":\"2568\",\"mappings\":{\"default\":{\"default\":\"delimitador inferior con separador vertical doble\"}},\"category\":\"So\"},{\"key\":\"2569\",\"mappings\":{\"default\":{\"default\":\"delimitador inferior y separador vertical dobles\"}},\"category\":\"So\"},{\"key\":\"256A\",\"mappings\":{\"default\":{\"default\":\"cruce de separadores, vertical sencillo y horizontal doble\"}},\"category\":\"So\"},{\"key\":\"256B\",\"mappings\":{\"default\":{\"default\":\"cruce de separadores, vertical doble y horizontal sencillo\"}},\"category\":\"So\"},{\"key\":\"256C\",\"mappings\":{\"default\":{\"default\":\"cruce de separadores dobles\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"256D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz arco abajo y derecha\"}}},{\"category\":\"So\",\"key\":\"256E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz arco hacia abajo y hacia la izquierda\"}}},{\"category\":\"So\",\"key\":\"256F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz arco arriba y a la izquierda\"}}},{\"category\":\"So\",\"key\":\"2570\",\"mappings\":{\"default\":{\"default\":\"caja de dibujos de luz arco arriba y derecha\"}}},{\"category\":\"So\",\"key\":\"2571\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Luz Diagonal Superior derecha a inferior izquierda\"}}},{\"category\":\"So\",\"key\":\"2572\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Luz Diagonal Superior izquierda a inferior derecha\"}}},{\"category\":\"So\",\"key\":\"2573\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz diagonal cruz\"}}},{\"category\":\"So\",\"key\":\"2574\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas luz izquierda\"}}},{\"category\":\"So\",\"key\":\"2575\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas se iluminan\"}}},{\"category\":\"So\",\"key\":\"2576\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas a la derecha\"}}},{\"category\":\"So\",\"key\":\"2577\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas de luz hacia abajo\"}}},{\"category\":\"So\",\"key\":\"2578\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​a la izquierda\"}}},{\"category\":\"So\",\"key\":\"2579\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados\"}}},{\"category\":\"So\",\"key\":\"257A\",\"mappings\":{\"default\":{\"default\":\"caja de dibujos pesado derecho\"}}},{\"category\":\"So\",\"key\":\"257B\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados\"}}},{\"category\":\"So\",\"key\":\"257C\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Ligero Izquierda y Pesada Derecha\"}}},{\"category\":\"So\",\"key\":\"257D\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas iluminados y pesados\"}}},{\"category\":\"So\",\"key\":\"257E\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas Pesado Izquierda y Luz Derecha\"}}},{\"category\":\"So\",\"key\":\"257F\",\"mappings\":{\"default\":{\"default\":\"dibujos de cajas pesados ​​y ligeros\"}}},{\"key\":\"2580\",\"mappings\":{\"default\":{\"default\":\"bloque mitad superior\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2581\",\"mappings\":{\"default\":{\"default\":\"bajar un octavo bloque\"}}},{\"category\":\"So\",\"key\":\"2582\",\"mappings\":{\"default\":{\"default\":\"bloque de un cuarto inferior\"}}},{\"category\":\"So\",\"key\":\"2583\",\"mappings\":{\"default\":{\"default\":\"bloque de tres octavos más bajo\"}}},{\"key\":\"2584\",\"mappings\":{\"default\":{\"default\":\"bloque mitad inferior\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2585\",\"mappings\":{\"default\":{\"default\":\"bloque inferior de cinco octavos\"}}},{\"category\":\"So\",\"key\":\"2586\",\"mappings\":{\"default\":{\"default\":\"bloque de tres cuartos más bajo\"}}},{\"category\":\"So\",\"key\":\"2587\",\"mappings\":{\"default\":{\"default\":\"lower Seven Eighths Block\"}}},{\"key\":\"2588\",\"mappings\":{\"default\":{\"default\":\"bloque\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2589\",\"mappings\":{\"default\":{\"default\":\"bloque de siete octavos a la izquierda\"}}},{\"category\":\"So\",\"key\":\"258A\",\"mappings\":{\"default\":{\"default\":\"bloque de tres cuartos a la izquierda\"}}},{\"category\":\"So\",\"key\":\"258B\",\"mappings\":{\"default\":{\"default\":\"bloque de cinco octavos a la izquierda\"}}},{\"category\":\"So\",\"key\":\"258C\",\"mappings\":{\"default\":{\"default\":\"media cuadra izquierda\"}}},{\"category\":\"So\",\"key\":\"258D\",\"mappings\":{\"default\":{\"default\":\"bloque de tres octavos a la izquierda\"}}},{\"category\":\"So\",\"key\":\"258E\",\"mappings\":{\"default\":{\"default\":\"bloque de un cuarto a la izquierda\"}}},{\"category\":\"So\",\"key\":\"258F\",\"mappings\":{\"default\":{\"default\":\"izquierda un octavo bloque\"}}},{\"category\":\"So\",\"key\":\"2590\",\"mappings\":{\"default\":{\"default\":\"media cuadra derecha\"}}},{\"key\":\"2591\",\"mappings\":{\"default\":{\"default\":\"sombra ligera\"}},\"category\":\"So\"},{\"key\":\"2592\",\"mappings\":{\"default\":{\"default\":\"sombra media\"}},\"category\":\"So\"},{\"key\":\"2593\",\"mappings\":{\"default\":{\"default\":\"sombra intensa\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2594\",\"mappings\":{\"default\":{\"default\":\"upper One Eighth Block\"}}},{\"category\":\"So\",\"key\":\"2595\",\"mappings\":{\"default\":{\"default\":\"a la derecha un octavo bloque\"}}},{\"category\":\"So\",\"key\":\"2596\",\"mappings\":{\"default\":{\"default\":\"cuadrante inferior izquierdo\"}}},{\"category\":\"So\",\"key\":\"2597\",\"mappings\":{\"default\":{\"default\":\"cuadrante inferior derecho\"}}},{\"category\":\"So\",\"key\":\"2598\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior izquierdo\"}}},{\"category\":\"So\",\"key\":\"2599\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior izquierdo e inferior izquierdo e inferior derecho\"}}},{\"category\":\"So\",\"key\":\"259A\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior izquierdo e inferior derecho\"}}},{\"category\":\"So\",\"key\":\"259B\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior izquierdo y superior derecho e inferior izquierdo\"}}},{\"category\":\"So\",\"key\":\"259C\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior izquierdo y superior derecho e inferior derecho\"}}},{\"category\":\"So\",\"key\":\"259D\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior derecho\"}}},{\"category\":\"So\",\"key\":\"259E\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior derecho e inferior izquierdo\"}}},{\"category\":\"So\",\"key\":\"259F\",\"mappings\":{\"default\":{\"default\":\"cuadrante superior derecho e inferior izquierdo e inferior derecho\"}}},{\"key\":\"25A0\",\"mappings\":{\"default\":{\"default\":\"cuadrado relleno\"}},\"category\":\"So\"},{\"key\":\"25A1\",\"mappings\":{\"default\":{\"default\":\"cuadrado\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25A2\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco con esquinas redondeadas\"}}},{\"category\":\"So\",\"key\":\"25A3\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco que contiene cuadrado pequeño negro\"}}},{\"category\":\"So\",\"key\":\"25A4\",\"mappings\":{\"default\":{\"default\":\"cuadrado con relleno horizontal\"}}},{\"category\":\"So\",\"key\":\"25A5\",\"mappings\":{\"default\":{\"default\":\"cuadrado con relleno vertical\"}}},{\"category\":\"So\",\"key\":\"25A6\",\"mappings\":{\"default\":{\"default\":\"cuadrado con relleno de rayado ortogonal\"}}},{\"category\":\"So\",\"key\":\"25A7\",\"mappings\":{\"default\":{\"default\":\"cuadrado con la esquina superior izquierda a la derecha inferior\"}}},{\"category\":\"So\",\"key\":\"25A8\",\"mappings\":{\"default\":{\"default\":\"cuadrado con la parte superior derecha hacia abajo izquierda Relleno\"}}},{\"category\":\"So\",\"key\":\"25A9\",\"mappings\":{\"default\":{\"default\":\"cuadrado con relleno de rayado diagonal\"}}},{\"key\":\"25AA\",\"mappings\":{\"default\":{\"default\":\"cuadrado relleno\"}},\"category\":\"So\"},{\"key\":\"25AB\",\"mappings\":{\"default\":{\"default\":\"cuadrado\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25AC\",\"mappings\":{\"default\":{\"default\":\"rectángulo negro\"}}},{\"key\":\"25AD\",\"mappings\":{\"default\":{\"default\":\"rectángulo\"}},\"category\":\"So\"},{\"key\":\"25AE\",\"mappings\":{\"default\":{\"default\":\"rectángulo relleno vertical\"}},\"category\":\"So\"},{\"key\":\"25AF\",\"mappings\":{\"default\":{\"default\":\"rectángulo vertical\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25B0\",\"mappings\":{\"default\":{\"default\":\"paralelogramo negro\"}}},{\"key\":\"25B1\",\"mappings\":{\"default\":{\"default\":\"paralelogramo\"}},\"category\":\"So\"},{\"key\":\"25B2\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno\"}},\"category\":\"So\"},{\"key\":\"25B3\",\"mappings\":{\"default\":{\"default\":\"triángulo\"}},\"category\":\"So\"},{\"key\":\"25B4\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno\"}},\"category\":\"So\"},{\"key\":\"25B5\",\"mappings\":{\"default\":{\"default\":\"triángulo\"}},\"category\":\"So\"},{\"key\":\"25B6\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala derecha\"}},\"category\":\"So\"},{\"key\":\"25B7\",\"mappings\":{\"default\":{\"default\":\"triángulo señala derecha\"}},\"category\":\"Sm\"},{\"key\":\"25B8\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala derecha\"}},\"category\":\"So\"},{\"key\":\"25B9\",\"mappings\":{\"default\":{\"default\":\"triángulo señala derecha\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25BA\",\"mappings\":{\"default\":{\"default\":\"indicador de apuntar hacia la derecha negro\"}}},{\"category\":\"So\",\"key\":\"25BB\",\"mappings\":{\"default\":{\"default\":\"puntero de apuntar hacia la derecha blanco\"}}},{\"key\":\"25BC\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala abajo\"}},\"category\":\"So\"},{\"key\":\"25BD\",\"mappings\":{\"default\":{\"default\":\"triángulo señala abajo\"}},\"category\":\"So\"},{\"key\":\"25BE\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala abajo\"}},\"category\":\"So\"},{\"key\":\"25BF\",\"mappings\":{\"default\":{\"default\":\"triángulo señala abajo\"}},\"category\":\"So\"},{\"key\":\"25C0\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala izquierda\"}},\"category\":\"So\"},{\"key\":\"25C1\",\"mappings\":{\"default\":{\"default\":\"triángulo señala izquierda\"}},\"category\":\"Sm\"},{\"key\":\"25C2\",\"mappings\":{\"default\":{\"default\":\"triángulo relleno señala izquierda\"}},\"category\":\"So\"},{\"key\":\"25C3\",\"mappings\":{\"default\":{\"default\":\"triángulo señala izquierda\"}},\"category\":\"So\"},{\"key\":\"25C4\",\"mappings\":{\"default\":{\"default\":\"puntero relleno señala izquierda\"}},\"category\":\"So\"},{\"key\":\"25C5\",\"mappings\":{\"default\":{\"default\":\"puntero señala izquierda\"}},\"category\":\"So\"},{\"key\":\"25C6\",\"mappings\":{\"default\":{\"default\":\"diamante relleno\"}},\"category\":\"So\"},{\"key\":\"25C7\",\"mappings\":{\"default\":{\"default\":\"diamante\"}},\"category\":\"So\"},{\"key\":\"25C8\",\"mappings\":{\"default\":{\"default\":\"diamante vacío contiene diamante relleno\"}},\"category\":\"So\"},{\"key\":\"25C9\",\"mappings\":{\"default\":{\"default\":\"ojo de pez\"}},\"category\":\"So\"},{\"key\":\"25CA\",\"mappings\":{\"default\":{\"default\":\"rombo\"}},\"category\":\"So\"},{\"key\":\"25CB\",\"mappings\":{\"default\":{\"default\":\"círculo vacío\"}},\"category\":\"So\"},{\"key\":\"25CC\",\"mappings\":{\"default\":{\"default\":\"círculo punteado\"}},\"category\":\"So\"},{\"key\":\"25CD\",\"mappings\":{\"default\":{\"default\":\"círculo con relleno vertical\"}},\"category\":\"So\"},{\"key\":\"25CE\",\"mappings\":{\"default\":{\"default\":\"blanco\"}},\"category\":\"So\"},{\"key\":\"25CF\",\"mappings\":{\"default\":{\"default\":\"círculo relleno\"}},\"category\":\"So\"},{\"key\":\"25D0\",\"mappings\":{\"default\":{\"default\":\"círculo con mitad izquierda rellena\"}},\"category\":\"So\"},{\"key\":\"25D1\",\"mappings\":{\"default\":{\"default\":\"círculo con mitad derecha rellena\"}},\"category\":\"So\"},{\"key\":\"25D2\",\"mappings\":{\"default\":{\"default\":\"círculo con mitad inferior rellena\"}},\"category\":\"So\"},{\"key\":\"25D3\",\"mappings\":{\"default\":{\"default\":\"círculo con mitad superior rellena\"}},\"category\":\"So\"},{\"key\":\"25D4\",\"mappings\":{\"default\":{\"default\":\"círculo con cuadrante superior derecho relleno\"}},\"category\":\"So\"},{\"key\":\"25D5\",\"mappings\":{\"default\":{\"default\":\"círculo con cuadrante superior izquierdo relleno\"}},\"category\":\"So\"},{\"key\":\"25D6\",\"mappings\":{\"default\":{\"default\":\"semicírculo izquierdo relleno\"}},\"category\":\"So\"},{\"key\":\"25D7\",\"mappings\":{\"default\":{\"default\":\"semicírculo derecho relleno\"}},\"category\":\"So\"},{\"key\":\"25D8\",\"mappings\":{\"default\":{\"default\":\"bullet inversa\"}},\"category\":\"So\"},{\"key\":\"25D9\",\"mappings\":{\"default\":{\"default\":\"círculo vacío inverso\"}},\"category\":\"So\"},{\"key\":\"25DA\",\"mappings\":{\"default\":{\"default\":\"semicírculo superior vacío inverso\"}},\"category\":\"So\"},{\"key\":\"25DB\",\"mappings\":{\"default\":{\"default\":\"semicírculo superior vacío inverso\"}},\"category\":\"So\"},{\"key\":\"25DC\",\"mappings\":{\"default\":{\"default\":\"arco superior izquierda\"}},\"category\":\"So\"},{\"key\":\"25DD\",\"mappings\":{\"default\":{\"default\":\"arco superior derecha\"}},\"category\":\"So\"},{\"key\":\"25DE\",\"mappings\":{\"default\":{\"default\":\"arco inferior derecha\"}},\"category\":\"So\"},{\"key\":\"25DF\",\"mappings\":{\"default\":{\"default\":\"arco inferior izquierda\"}},\"category\":\"So\"},{\"key\":\"25E0\",\"mappings\":{\"default\":{\"default\":\"semicírculo superior\"}},\"category\":\"So\"},{\"key\":\"25E1\",\"mappings\":{\"default\":{\"default\":\"semicírculo inferior\"}},\"category\":\"So\"},{\"key\":\"25E2\",\"mappings\":{\"default\":{\"default\":\"triángulo inferior derecha relleno\"}},\"category\":\"So\"},{\"key\":\"25E3\",\"mappings\":{\"default\":{\"default\":\"triángulo inferior izquierda relleno\"}},\"category\":\"So\"},{\"key\":\"25E4\",\"mappings\":{\"default\":{\"default\":\"triángulo superior izquierda relleno\"}},\"category\":\"So\"},{\"key\":\"25E5\",\"mappings\":{\"default\":{\"default\":\"triángulo superior derecha relleno\"}},\"category\":\"So\"},{\"key\":\"25E6\",\"mappings\":{\"default\":{\"default\":\"composición\"}},\"category\":\"So\"},{\"key\":\"25E7\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad izquierda rellena\"}},\"category\":\"So\"},{\"key\":\"25E8\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad derecha rellena\"}},\"category\":\"So\"},{\"key\":\"25E9\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad superior izquierda rellena\"}},\"category\":\"So\"},{\"key\":\"25EA\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad inferior derecha rellena\"}},\"category\":\"So\"},{\"key\":\"25EB\",\"mappings\":{\"default\":{\"default\":\"cuadrado con bisectriz\"}},\"category\":\"So\"},{\"key\":\"25EC\",\"mappings\":{\"default\":{\"default\":\"triángulo vacío con punto\"}},\"category\":\"So\"},{\"key\":\"25ED\",\"mappings\":{\"default\":{\"default\":\"triángulo apuntando arriba con mitad izquierda rellena\"}},\"category\":\"So\"},{\"key\":\"25EE\",\"mappings\":{\"default\":{\"default\":\"triángulo apuntando arriba con mitad derecha rellena\"}},\"category\":\"So\"},{\"key\":\"25EF\",\"mappings\":{\"default\":{\"default\":\"círculo grande\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25F0\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco con cuadrante superior izquierdo\"}}},{\"category\":\"So\",\"key\":\"25F1\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco con cuadrante inferior izquierdo\"}}},{\"category\":\"So\",\"key\":\"25F2\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco con cuadrante inferior derecho\"}}},{\"category\":\"So\",\"key\":\"25F3\",\"mappings\":{\"default\":{\"default\":\"cuadrado blanco con cuadrante superior derecho\"}}},{\"category\":\"So\",\"key\":\"25F4\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con cuadrante superior izquierdo\"}}},{\"category\":\"So\",\"key\":\"25F5\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con cuadrante inferior izquierdo\"}}},{\"category\":\"So\",\"key\":\"25F6\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con cuadrante inferior derecho\"}}},{\"category\":\"So\",\"key\":\"25F7\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con cuadrante superior derecho\"}}},{\"key\":\"25F8\",\"mappings\":{\"default\":{\"default\":\"triángulo superior izquierda\"}},\"category\":\"Sm\"},{\"key\":\"25F9\",\"mappings\":{\"default\":{\"default\":\"triángulo superior derecha\"}},\"category\":\"Sm\"},{\"key\":\"25FA\",\"mappings\":{\"default\":{\"default\":\"triángulo inferior izquierda\"}},\"category\":\"Sm\"},{\"key\":\"25FB\",\"mappings\":{\"default\":{\"default\":\"cuadrado mediano vacío\"}},\"category\":\"Sm\"},{\"key\":\"25FC\",\"mappings\":{\"default\":{\"default\":\"cuadrado mediano relleno\"}},\"category\":\"Sm\"},{\"key\":\"25FD\",\"mappings\":{\"default\":{\"default\":\"cuadrado mediano vacío\"}},\"category\":\"Sm\"},{\"key\":\"25FE\",\"mappings\":{\"default\":{\"default\":\"cuadrado mediano relleno\"}},\"category\":\"Sm\"},{\"key\":\"25FF\",\"mappings\":{\"default\":{\"default\":\"triángulo inferior derecha\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2B12\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad superior negra\"}}},{\"category\":\"So\",\"key\":\"2B13\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad inferior negra\"}}},{\"category\":\"So\",\"key\":\"2B14\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad derecha superior diagonal negra\"}}},{\"category\":\"So\",\"key\":\"2B15\",\"mappings\":{\"default\":{\"default\":\"cuadrado con mitad diagonal izquierda inferior negra\"}}},{\"category\":\"So\",\"key\":\"2B16\",\"mappings\":{\"default\":{\"default\":\"diamante con Mitad Izquierda Negro\"}}},{\"category\":\"So\",\"key\":\"2B17\",\"mappings\":{\"default\":{\"default\":\"diamante con mitad derecha negra\"}}},{\"category\":\"So\",\"key\":\"2B18\",\"mappings\":{\"default\":{\"default\":\"diamante con mitad superior negra\"}}},{\"category\":\"So\",\"key\":\"2B19\",\"mappings\":{\"default\":{\"default\":\"diamante con mitad inferior negra\"}}},{\"category\":\"So\",\"key\":\"2B1A\",\"mappings\":{\"default\":{\"default\":\"cuadrado punteado\"}}},{\"category\":\"So\",\"key\":\"2B1B\",\"mappings\":{\"default\":{\"default\":\"cuadrado grande negro\"}}},{\"category\":\"So\",\"key\":\"2B1C\",\"mappings\":{\"default\":{\"default\":\"gran Plaza Blanca\"}}},{\"category\":\"So\",\"key\":\"2B1D\",\"mappings\":{\"default\":{\"default\":\"cuadrado muy pequeño negro\"}}},{\"category\":\"So\",\"key\":\"2B1E\",\"mappings\":{\"default\":{\"default\":\"cuadrado muy pequeño blanco\"}}},{\"category\":\"So\",\"key\":\"2B1F\",\"mappings\":{\"default\":{\"default\":\"pentágono negro\"}}},{\"category\":\"So\",\"key\":\"2B20\",\"mappings\":{\"default\":{\"default\":\"pentágono blanco\"}}},{\"category\":\"So\",\"key\":\"2B21\",\"mappings\":{\"default\":{\"default\":\"hexágono blanco\"}}},{\"category\":\"So\",\"key\":\"2B22\",\"mappings\":{\"default\":{\"default\":\"hexágono negro\"}}},{\"category\":\"So\",\"key\":\"2B23\",\"mappings\":{\"default\":{\"default\":\"hexagonal negro horizontal\"}}},{\"category\":\"So\",\"key\":\"2B24\",\"mappings\":{\"default\":{\"default\":\"circulo grande negro\"}}},{\"category\":\"So\",\"key\":\"2B25\",\"mappings\":{\"default\":{\"default\":\"diamante Mediano Negro\"}}},{\"category\":\"So\",\"key\":\"2B26\",\"mappings\":{\"default\":{\"default\":\"diamante blanco medio\"}}},{\"category\":\"So\",\"key\":\"2B27\",\"mappings\":{\"default\":{\"default\":\"lozenge Mediano Negro\"}}},{\"category\":\"So\",\"key\":\"2B28\",\"mappings\":{\"default\":{\"default\":\"pastilla blanca mediana\"}}},{\"category\":\"So\",\"key\":\"2B29\",\"mappings\":{\"default\":{\"default\":\"pequeño diamante negro\"}}},{\"category\":\"So\",\"key\":\"2B2A\",\"mappings\":{\"default\":{\"default\":\"lozenge pequeño negro\"}}},{\"category\":\"So\",\"key\":\"2B2B\",\"mappings\":{\"default\":{\"default\":\"lozenge pequeño blanco\"}}},{\"category\":\"So\",\"key\":\"2B2C\",\"mappings\":{\"default\":{\"default\":\"elipse horizontal negro\"}}},{\"category\":\"So\",\"key\":\"2B2D\",\"mappings\":{\"default\":{\"default\":\"elipse horizontal blanco\"}}},{\"category\":\"So\",\"key\":\"2B2E\",\"mappings\":{\"default\":{\"default\":\"elipse Vertical Negro\"}}},{\"category\":\"So\",\"key\":\"2B2F\",\"mappings\":{\"default\":{\"default\":\"elipse Vertical Blanco\"}}},{\"key\":\"2B50\",\"mappings\":{\"default\":{\"default\":\"estrella media vacía\"}},\"category\":\"So\"},{\"key\":\"2B51\",\"mappings\":{\"default\":{\"default\":\"estrella pequeña rellena\"}},\"category\":\"So\"},{\"key\":\"2B52\",\"mappings\":{\"default\":{\"default\":\"estrella pequeña vacía\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2B53\",\"mappings\":{\"default\":{\"default\":\"pentágono negro que señala hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"2B54\",\"mappings\":{\"default\":{\"default\":\"pentágono blanco que señala hacia la derecha\"}}},{\"category\":\"So\",\"key\":\"2B55\",\"mappings\":{\"default\":{\"default\":\"círculo grande pesado\"}}},{\"category\":\"So\",\"key\":\"2B56\",\"mappings\":{\"default\":{\"default\":\"óvalo pesado con interior oval\"}}},{\"category\":\"So\",\"key\":\"2B57\",\"mappings\":{\"default\":{\"default\":\"círculo pesado con círculo dentro\"}}},{\"category\":\"So\",\"key\":\"2B58\",\"mappings\":{\"default\":{\"default\":\"círculo pesado\"}}},{\"category\":\"So\",\"key\":\"2B59\",\"mappings\":{\"default\":{\"default\":\"saltire en círculo pesado\"}}}]\n,\n\"es/symbols/math_harpoons.js\": \n[{\"locale\":\"es\"},{\"key\":\"21BC\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con arpón arriba\"}},\"category\":\"So\"},{\"key\":\"21BD\",\"mappings\":{\"default\":{\"default\":\"flecha izquierda con arpón debajo\"}},\"category\":\"So\"},{\"key\":\"21BE\",\"mappings\":{\"default\":{\"default\":\"flecha arriba con arpón derecho\"}},\"category\":\"So\"},{\"key\":\"21BF\",\"mappings\":{\"default\":{\"default\":\"flecha arriba con arpón izquierdo\"}},\"category\":\"So\"},{\"key\":\"21C0\",\"mappings\":{\"default\":{\"default\":\"flecha derecha con arpón arriba\"}},\"category\":\"So\"},{\"key\":\"21C1\",\"mappings\":{\"default\":{\"default\":\"flecha derecha con arpón debajo\"}},\"category\":\"So\"},{\"key\":\"21C2\",\"mappings\":{\"default\":{\"default\":\"flecha abajo con arpón derecho\"}},\"category\":\"So\"},{\"key\":\"21C3\",\"mappings\":{\"default\":{\"default\":\"flecha abajo con arpón izquierdo\"}},\"category\":\"So\"},{\"key\":\"21CB\",\"mappings\":{\"default\":{\"default\":\"arpón izquierdo arriba de arpón derecho\"}},\"category\":\"So\"},{\"key\":\"21CC\",\"mappings\":{\"default\":{\"default\":\"arpón derecho arriba de arpón izquierdo\"}},\"category\":\"So\"},{\"category\":\"Sm\",\"key\":\"294A\",\"mappings\":{\"default\":{\"default\":\"barra izquierda arriba barra derecha abajo arpón\"}}},{\"category\":\"Sm\",\"key\":\"294B\",\"mappings\":{\"default\":{\"default\":\"barra izquierda abajo barra derecha arriba arpón\"}}},{\"category\":\"Sm\",\"key\":\"294C\",\"mappings\":{\"default\":{\"default\":\"up barb right down barb left harpoon\"}}},{\"category\":\"Sm\",\"key\":\"294D\",\"mappings\":{\"default\":{\"default\":\"arriba barb izquierda abajo barb derecha arpón\"}}},{\"category\":\"Sm\",\"key\":\"294E\",\"mappings\":{\"default\":{\"default\":\"barra izquierda arriba barra derecha arriba arpón\"}}},{\"key\":\"294F\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha hacia arriba y abajo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2950\",\"mappings\":{\"default\":{\"default\":\"barra izquierda abajo barra derecha abajo arpón\"}}},{\"key\":\"2951\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda hacia arriba y abajo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2952\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púa hasta la barra\"}}},{\"category\":\"Sm\",\"key\":\"2953\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púa hasta la barra\"}}},{\"category\":\"Sm\",\"key\":\"2954\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa derecha a barra\"}}},{\"category\":\"Sm\",\"key\":\"2955\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con púa derecha a barra\"}}},{\"category\":\"Sm\",\"key\":\"2956\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púas abajo a la barra\"}}},{\"category\":\"Sm\",\"key\":\"2957\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púa abajo a la barra\"}}},{\"category\":\"Sm\",\"key\":\"2958\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa izquierda a barra\"}}},{\"category\":\"Sm\",\"key\":\"2959\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con la barra izquierda a la barra\"}}},{\"category\":\"Sm\",\"key\":\"295A\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púa arriba de la barra\"}}},{\"category\":\"Sm\",\"key\":\"295B\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púa arriba del bar\"}}},{\"category\":\"Sm\",\"key\":\"295C\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa derecha de barra\"}}},{\"category\":\"Sm\",\"key\":\"295D\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con púa derecha de barra\"}}},{\"category\":\"Sm\",\"key\":\"295E\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púa abajo de barra\"}}},{\"category\":\"Sm\",\"key\":\"295F\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púa abajo de barra\"}}},{\"category\":\"Sm\",\"key\":\"2960\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa izquierda de barra\"}}},{\"category\":\"Sm\",\"key\":\"2961\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con barra izquierda de barra\"}}},{\"category\":\"Sm\",\"key\":\"2962\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púas arriba arriba arpón a la izquierda con púas abajo\"}}},{\"category\":\"Sm\",\"key\":\"2963\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa izquierda al lado arpón ascendente con púa derecha\"}}},{\"category\":\"Sm\",\"key\":\"2964\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púas arriba arriba arpón a la derecha con púas abajo\"}}},{\"category\":\"Sm\",\"key\":\"2965\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con lengüeta a la izquierda al lado arpón hacia abajo con lengüeta a la derecha\"}}},{\"category\":\"Sm\",\"key\":\"2966\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púa arriba arriba arpón a la derecha con púa arriba\"}}},{\"category\":\"Sm\",\"key\":\"2967\",\"mappings\":{\"default\":{\"default\":\"arpón a la izquierda con púa abajo arriba arpón a la derecha con púa abajo\"}}},{\"category\":\"Sm\",\"key\":\"2968\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púas arriba arriba arpón a la izquierda con púas arriba\"}}},{\"category\":\"Sm\",\"key\":\"2969\",\"mappings\":{\"default\":{\"default\":\"arpón a la derecha con púa abajo arriba arpón a la izquierda con púa abajo\"}}},{\"key\":\"296A\",\"mappings\":{\"default\":{\"default\":\"barra con arpón hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"296B\",\"mappings\":{\"default\":{\"default\":\"arpón hacia la izquierda con barra\"}},\"category\":\"Sm\"},{\"key\":\"296C\",\"mappings\":{\"default\":{\"default\":\"barra con arpón hacia la derecha\"}},\"category\":\"Sm\"},{\"key\":\"296D\",\"mappings\":{\"default\":{\"default\":\"arpón hacia la derecha con barra\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"296E\",\"mappings\":{\"default\":{\"default\":\"arpón ascendente con púa izquierda al lado arpón hacia abajo con púa derecha\"}}},{\"category\":\"Sm\",\"key\":\"296F\",\"mappings\":{\"default\":{\"default\":\"arpón hacia abajo con lengüeta a la izquierda al lado arpón hacia arriba con pica a la derecha\"}}},{\"category\":\"Sm\",\"key\":\"297C\",\"mappings\":{\"default\":{\"default\":\"cola de pescado izquierda\"}}},{\"category\":\"Sm\",\"key\":\"297D\",\"mappings\":{\"default\":{\"default\":\"cola de pescado derecha\"}}},{\"key\":\"297E\",\"mappings\":{\"default\":{\"default\":\"barra con doble gancho\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"297F\",\"mappings\":{\"default\":{\"default\":\"cola de pez abajo\"}}}]\n,\n\"es/symbols/math_non_characters.js\": \n[{\"locale\":\"es\"},{\"key\":\"210F\",\"mappings\":{\"default\":{\"default\":\"h barra\"}},\"category\":\"Ll\"},{\"category\":\"So\",\"key\":\"2114\",\"mappings\":{\"default\":{\"default\":\"L B símbolo de barra\"}}},{\"key\":\"2116\",\"mappings\":{\"default\":{\"default\":\"signo de número\"}},\"category\":\"So\"},{\"key\":\"2117\",\"mappings\":{\"default\":{\"default\":\"derechos de autor de sonido\"}},\"category\":\"So\"},{\"key\":\"211E\",\"mappings\":{\"default\":{\"default\":\"receta\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"211F\",\"mappings\":{\"default\":{\"default\":\"respuesta\"}}},{\"category\":\"So\",\"key\":\"2120\",\"mappings\":{\"default\":{\"default\":\"marca de servicio\"}}},{\"category\":\"So\",\"key\":\"2121\",\"mappings\":{\"default\":{\"default\":\"señal de telefono\"}}},{\"key\":\"2122\",\"mappings\":{\"default\":{\"default\":\"registrado\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2123\",\"mappings\":{\"default\":{\"default\":\"versículo\"}}},{\"key\":\"2125\",\"mappings\":{\"default\":{\"default\":\"onza\"}},\"category\":\"So\"},{\"key\":\"2126\",\"mappings\":{\"default\":{\"default\":\"ohmio\"}},\"category\":\"Lu\"},{\"key\":\"2127\",\"mappings\":{\"default\":{\"default\":\"ohmio invertido\"}},\"category\":\"So\"},{\"key\":\"212A\",\"mappings\":{\"default\":{\"default\":\"grados kelvin\"}},\"category\":\"Lu\"},{\"key\":\"212B\",\"mappings\":{\"default\":{\"default\":\"angstrom\"}},\"category\":\"Lu\"},{\"category\":\"So\",\"key\":\"212E\",\"mappings\":{\"default\":{\"default\":\"Símbolo estimado\"}}},{\"key\":\"2132\",\"mappings\":{\"default\":{\"default\":\"mayúscula F invertida\"}},\"category\":\"Lu\"},{\"category\":\"Ll\",\"key\":\"2139\",\"mappings\":{\"default\":{\"default\":\"fuente de información\"}}},{\"category\":\"So\",\"key\":\"213A\",\"mappings\":{\"default\":{\"default\":\"capital rotado Q\"}}},{\"category\":\"So\",\"key\":\"213B\",\"mappings\":{\"default\":{\"default\":\"signo de fax\"}}},{\"category\":\"Sm\",\"key\":\"2141\",\"mappings\":{\"default\":{\"default\":\"convertido sans serif mayúscula G\"}}},{\"category\":\"Sm\",\"key\":\"2142\",\"mappings\":{\"default\":{\"default\":\"convertido sans serif mayúscula L\"}}},{\"category\":\"Sm\",\"key\":\"2143\",\"mappings\":{\"default\":{\"default\":\"invertido sans serif mayúscula L\"}}},{\"category\":\"Sm\",\"key\":\"2144\",\"mappings\":{\"default\":{\"default\":\"convertido en sans serif mayúscula Y\"}}}]\n,\n\"es/symbols/math_symbols.js\": \n[{\"locale\":\"es\"},{\"key\":\"0021\",\"mappings\":{\"default\":{\"default\":\"factorial\"}},\"category\":\"Po\"},{\"key\":\"0022\",\"mappings\":{\"default\":{\"default\":\"comillas\"}},\"category\":\"Po\"},{\"key\":\"0023\",\"mappings\":{\"default\":{\"default\":\"almuhadilla\",\"defaultMP\":\"signo de número\"}},\"category\":\"Po\"},{\"key\":\"0024\",\"mappings\":{\"default\":{\"default\":\"dólar\"}},\"category\":\"Sc\"},{\"key\":\"0025\",\"mappings\":{\"default\":{\"default\":\"porciento\"}},\"category\":\"Po\"},{\"key\":\"0026\",\"mappings\":{\"default\":{\"default\":\"ampersand\"}},\"category\":\"Po\"},{\"key\":\"0027\",\"mappings\":{\"default\":{\"default\":\"prima\",\"defaultMP\":\"apóstrofo\"}},\"category\":\"Po\"},{\"key\":\"002A\",\"mappings\":{\"default\":{\"default\":\"por\"}},\"category\":\"Po\"},{\"key\":\"002B\",\"mappings\":{\"default\":{\"default\":\"más\"}},\"category\":\"Sm\"},{\"key\":\"002C\",\"mappings\":{\"default\":{\"default\":\"coma\"}},\"category\":\"Po\"},{\"key\":\"002D\",\"mappings\":{\"default\":{\"default\":\"menos\"}},\"category\":\"Pd\"},{\"key\":\"002E\",\"mappings\":{\"default\":{\"default\":\"punto\"}},\"category\":\"Po\"},{\"key\":\"002F\",\"mappings\":{\"default\":{\"default\":\"barra oblicua\"}},\"category\":\"Po\"},{\"key\":\"003A\",\"mappings\":{\"default\":{\"default\":\"dos puntos\"}},\"category\":\"Po\"},{\"key\":\"003B\",\"mappings\":{\"default\":{\"default\":\"punto y coma\"}},\"category\":\"Po\"},{\"key\":\"003C\",\"mappings\":{\"default\":{\"default\":\"menor que\"}},\"category\":\"Sm\"},{\"key\":\"003D\",\"mappings\":{\"default\":{\"default\":\"igual\"}},\"category\":\"Sm\"},{\"key\":\"003E\",\"mappings\":{\"default\":{\"default\":\"mayor que\"}},\"category\":\"Sm\"},{\"key\":\"003F\",\"mappings\":{\"default\":{\"default\":\"interrogación derecho\",\"defaultMP\":\"cierra interrogación\"}},\"category\":\"Po\"},{\"key\":\"0040\",\"mappings\":{\"default\":{\"default\":\"arroba\"}},\"category\":\"Po\"},{\"key\":\"005C\",\"mappings\":{\"default\":{\"default\":\"barra inversa\"}},\"category\":\"Po\"},{\"key\":\"005E\",\"mappings\":{\"default\":{\"default\":\"circunflejo\"}},\"category\":\"Sk\"},{\"key\":\"005F\",\"mappings\":{\"default\":{\"default\":\"subrayado\"}},\"category\":\"Pc\"},{\"key\":\"0060\",\"mappings\":{\"default\":{\"default\":\"acento grave\"}},\"category\":\"Sk\"},{\"key\":\"007C\",\"mappings\":{\"default\":{\"default\":\"barra vertical\"}},\"category\":\"Sm\"},{\"key\":\"007E\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sm\"},{\"key\":\"00A1\",\"mappings\":{\"default\":{\"default\":\"admiración izquierdo\",\"defaultMP\":\"abre admiración\"}},\"category\":\"Po\"},{\"key\":\"00A2\",\"mappings\":{\"default\":{\"default\":\"centavo\"}},\"category\":\"Sc\"},{\"key\":\"00A3\",\"mappings\":{\"default\":{\"default\":\"libra esterlina\"}},\"category\":\"Sc\"},{\"key\":\"00A4\",\"mappings\":{\"default\":{\"default\":\"moneda\"}},\"category\":\"Sc\"},{\"key\":\"00A5\",\"mappings\":{\"default\":{\"default\":\"yen\"}},\"category\":\"Sc\"},{\"key\":\"00A6\",\"mappings\":{\"default\":{\"default\":\"barra vertical partida\"}},\"category\":\"So\"},{\"key\":\"00A7\",\"mappings\":{\"default\":{\"default\":\"sección\"}},\"category\":\"Po\"},{\"key\":\"00A8\",\"mappings\":{\"default\":{\"default\":\"diéresis\"}},\"category\":\"Sk\"},{\"key\":\"00A9\",\"mappings\":{\"default\":{\"default\":\"copyright\"}},\"category\":\"So\"},{\"key\":\"00AA\",\"mappings\":{\"default\":{\"default\":\"ordinal femenino\"}},\"category\":\"Lo\"},{\"key\":\"00AB\",\"mappings\":{\"default\":{\"default\":\"comillas angulares izquierda\",\"defaultMP\":\"abre comillas angulares\"}},\"category\":\"Pi\"},{\"key\":\"00AC\",\"mappings\":{\"default\":{\"default\":\"negación\"}},\"category\":\"Sm\"},{\"key\":\"00AE\",\"mappings\":{\"default\":{\"default\":\"registrado\"}},\"category\":\"So\"},{\"key\":\"00AF\",\"mappings\":{\"default\":{\"default\":\"barra\"}},\"category\":\"Sk\"},{\"key\":\"00B0\",\"mappings\":{\"default\":{\"default\":\"grado\"}},\"category\":\"So\"},{\"key\":\"00B1\",\"mappings\":{\"default\":{\"default\":\"más menos\"}},\"category\":\"Sm\"},{\"key\":\"00B4\",\"mappings\":{\"default\":{\"default\":\"acento agudo\"}},\"category\":\"Sk\"},{\"key\":\"00B5\",\"mappings\":{\"default\":{\"default\":\"micro\"}},\"category\":\"Ll\"},{\"key\":\"00B6\",\"mappings\":{\"default\":{\"default\":\"párrafo\"}},\"category\":\"Po\"},{\"key\":\"00B7\",\"mappings\":{\"default\":{\"default\":\"punto medio\"}},\"category\":\"Po\"},{\"key\":\"00B8\",\"mappings\":{\"default\":{\"default\":\"cedilla\"}},\"category\":\"Sk\"},{\"key\":\"00BA\",\"mappings\":{\"default\":{\"default\":\"ordinal masculino\"}},\"category\":\"Lo\"},{\"key\":\"00BB\",\"mappings\":{\"default\":{\"default\":\"comillas angulares derecha\",\"defaultMP\":\"cierra comillas angulares\"}},\"category\":\"Pf\"},{\"key\":\"00BF\",\"mappings\":{\"default\":{\"default\":\"interrogación izquierdo\",\"defaultMP\":\"abre interrogación\"}},\"category\":\"Po\"},{\"key\":\"00D7\",\"mappings\":{\"default\":{\"default\":\"por\"}},\"category\":\"Sm\"},{\"key\":\"00F7\",\"mappings\":{\"default\":{\"default\":\"dividido\"}},\"category\":\"Sm\"},{\"key\":\"02D8\",\"mappings\":{\"default\":{\"default\":\"breve\"}},\"category\":\"Sk\"},{\"key\":\"02D9\",\"mappings\":{\"default\":{\"default\":\"punto en superescrito\"}},\"category\":\"Sk\"},{\"key\":\"02DA\",\"mappings\":{\"default\":{\"default\":\"anillo en superescrito\"}},\"category\":\"Sk\"},{\"key\":\"02DB\",\"mappings\":{\"default\":{\"default\":\"ogonek\"}},\"category\":\"Sk\"},{\"key\":\"02DC\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sk\"},{\"key\":\"02DD\",\"mappings\":{\"default\":{\"default\":\"doble acento agudo\"}},\"category\":\"Sk\"},{\"key\":\"2010\",\"mappings\":{\"default\":{\"default\":\"menos\"}},\"category\":\"Pd\"},{\"category\":\"Pd\",\"key\":\"2011\",\"mappings\":{\"default\":{\"default\":\"guión no rompible\"}}},{\"category\":\"Pd\",\"key\":\"2012\",\"mappings\":{\"default\":{\"default\":\"figura Dash\"}}},{\"key\":\"2013\",\"mappings\":{\"default\":{\"default\":\"en raya\"}},\"category\":\"Pd\"},{\"key\":\"2014\",\"mappings\":{\"default\":{\"default\":\"em raya\"}},\"category\":\"Pd\"},{\"key\":\"2015\",\"mappings\":{\"default\":{\"default\":\"barra horizontal\"}},\"category\":\"Pd\"},{\"key\":\"2016\",\"mappings\":{\"default\":{\"default\":\"doble barra vertical\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2017\",\"mappings\":{\"default\":{\"default\":\"línea baja doble\"}}},{\"key\":\"2018\",\"mappings\":{\"default\":{\"default\":\"comilla izquierda\"}},\"category\":\"Pi\"},{\"key\":\"2019\",\"mappings\":{\"default\":{\"default\":\"comilla derecha\"}},\"category\":\"Pf\"},{\"key\":\"201A\",\"mappings\":{\"default\":{\"default\":\"comilla bajo 9\"}},\"category\":\"Ps\"},{\"category\":\"Pi\",\"key\":\"201B\",\"mappings\":{\"default\":{\"default\":\"marca de comillas simple con inversión alta-9\"}}},{\"key\":\"201C\",\"mappings\":{\"default\":{\"default\":\"doble comilla\"}},\"category\":\"Pi\"},{\"key\":\"201D\",\"mappings\":{\"default\":{\"default\":\"doble comilla derecha\"}},\"category\":\"Pf\"},{\"key\":\"201E\",\"mappings\":{\"default\":{\"default\":\"doble comilla bajo 9\"}},\"category\":\"Ps\"},{\"category\":\"Pi\",\"key\":\"201F\",\"mappings\":{\"default\":{\"default\":\"doble alto-invertido-9 comillas\"}}},{\"key\":\"2020\",\"mappings\":{\"default\":{\"default\":\"daga\"}},\"category\":\"Po\"},{\"key\":\"2021\",\"mappings\":{\"default\":{\"default\":\"doble daga\"}},\"category\":\"Po\"},{\"key\":\"2022\",\"mappings\":{\"default\":{\"default\":\"bala\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2023\",\"mappings\":{\"default\":{\"default\":\"bala triangular\"}}},{\"category\":\"Po\",\"key\":\"2024\",\"mappings\":{\"default\":{\"default\":\"líder de un punto\"}}},{\"key\":\"2025\",\"mappings\":{\"default\":{\"default\":\"dos puntos líder\"}},\"category\":\"Po\"},{\"key\":\"2026\",\"mappings\":{\"default\":{\"default\":\"puntos suspensivos\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2027\",\"mappings\":{\"default\":{\"default\":\"punto de separación\"}}},{\"key\":\"2030\",\"mappings\":{\"default\":{\"default\":\"tanto por millar\"}},\"category\":\"Po\"},{\"key\":\"2031\",\"mappings\":{\"default\":{\"default\":\"tanto por diez mil\"}},\"category\":\"Po\"},{\"key\":\"2032\",\"mappings\":{\"default\":{\"default\":\"prima\"}},\"category\":\"Po\"},{\"key\":\"2033\",\"mappings\":{\"default\":{\"default\":\"segunda\"}},\"category\":\"Po\"},{\"key\":\"2034\",\"mappings\":{\"default\":{\"default\":\"tercera\"}},\"category\":\"Po\"},{\"key\":\"2035\",\"mappings\":{\"default\":{\"default\":\"acento grave\"}},\"category\":\"Po\"},{\"key\":\"2036\",\"mappings\":{\"default\":{\"default\":\"doble acento grave\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2037\",\"mappings\":{\"default\":{\"default\":\"prime Prime invertido\"}}},{\"category\":\"Po\",\"key\":\"2038\",\"mappings\":{\"default\":{\"default\":\"signo de intercalación\"}}},{\"key\":\"2039\",\"mappings\":{\"default\":{\"default\":\"comillas izquierda\",\"defaultMP\":\"abre comillas\"}},\"category\":\"Pi\"},{\"key\":\"203A\",\"mappings\":{\"default\":{\"default\":\"comillas derecha\",\"defaultMP\":\"cierra comillas\"}},\"category\":\"Pf\"},{\"category\":\"Po\",\"key\":\"203B\",\"mappings\":{\"default\":{\"default\":\"marca de referencia\"}}},{\"category\":\"Po\",\"key\":\"203C\",\"mappings\":{\"default\":{\"default\":\"doble signo de exclamación\"}}},{\"category\":\"Po\",\"key\":\"203D\",\"mappings\":{\"default\":{\"default\":\"interrobang\"}}},{\"key\":\"203E\",\"mappings\":{\"default\":{\"default\":\"barra superior\"}},\"category\":\"Po\"},{\"category\":\"Pc\",\"key\":\"203F\",\"mappings\":{\"default\":{\"default\":\"undertie\"}}},{\"key\":\"2040\",\"mappings\":{\"default\":{\"default\":\"ligadura\"}},\"category\":\"Pc\"},{\"key\":\"2041\",\"mappings\":{\"default\":{\"default\":\"punto de inserción\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2042\",\"mappings\":{\"default\":{\"default\":\"asterismo\"}}},{\"key\":\"2043\",\"mappings\":{\"default\":{\"default\":\"guión bala\"}},\"category\":\"Po\"},{\"key\":\"2044\",\"mappings\":{\"default\":{\"default\":\"barra de fracción\"}},\"category\":\"Sm\"},{\"category\":\"Po\",\"key\":\"2047\",\"mappings\":{\"default\":{\"default\":\"doble signo de interrogación\"}}},{\"category\":\"Po\",\"key\":\"2048\",\"mappings\":{\"default\":{\"default\":\"pregunta Signo de exclamación\"}}},{\"category\":\"Po\",\"key\":\"2049\",\"mappings\":{\"default\":{\"default\":\"signo de interrogación de exclamación\"}}},{\"category\":\"Po\",\"key\":\"204B\",\"mappings\":{\"default\":{\"default\":\"signo de Pilcrow invertido\"}}},{\"category\":\"Po\",\"key\":\"204C\",\"mappings\":{\"default\":{\"default\":\"bala negra hacia la izquierda\"}}},{\"category\":\"Po\",\"key\":\"204D\",\"mappings\":{\"default\":{\"default\":\"bala negra hacia la derecha\"}}},{\"category\":\"Po\",\"key\":\"204E\",\"mappings\":{\"default\":{\"default\":\"bajo asterisco\"}}},{\"key\":\"204F\",\"mappings\":{\"default\":{\"default\":\"punto y coma invertido\"}},\"category\":\"Po\"},{\"key\":\"2050\",\"mappings\":{\"default\":{\"default\":\"cierre superior\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2051\",\"mappings\":{\"default\":{\"default\":\"dos asteriscos alineados verticalmente\"}}},{\"category\":\"Sm\",\"key\":\"2052\",\"mappings\":{\"default\":{\"default\":\"signo de menos comercial\"}}},{\"category\":\"Po\",\"key\":\"2053\",\"mappings\":{\"default\":{\"default\":\"swung Dash\"}}},{\"category\":\"Pc\",\"key\":\"2054\",\"mappings\":{\"default\":{\"default\":\"ropa interior invertida\"}}},{\"category\":\"Po\",\"key\":\"2055\",\"mappings\":{\"default\":{\"default\":\"signo de puntuación de la flor\"}}},{\"category\":\"Po\",\"key\":\"2056\",\"mappings\":{\"default\":{\"default\":\"puntuación de tres puntos\"}}},{\"key\":\"2057\",\"mappings\":{\"default\":{\"default\":\"cuarta\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2058\",\"mappings\":{\"default\":{\"default\":\"puntuación de cuatro puntos\"}}},{\"category\":\"Po\",\"key\":\"2059\",\"mappings\":{\"default\":{\"default\":\"puntuación de cinco puntos\"}}},{\"category\":\"Po\",\"key\":\"205A\",\"mappings\":{\"default\":{\"default\":\"puntuación de dos puntos\"}}},{\"category\":\"Po\",\"key\":\"205B\",\"mappings\":{\"default\":{\"default\":\"marca de cuatro puntos\"}}},{\"category\":\"Po\",\"key\":\"205C\",\"mappings\":{\"default\":{\"default\":\"cruz punteada\"}}},{\"category\":\"Po\",\"key\":\"205D\",\"mappings\":{\"default\":{\"default\":\"tricolon\"}}},{\"category\":\"Po\",\"key\":\"205E\",\"mappings\":{\"default\":{\"default\":\"cuatro puntos verticales\"}}},{\"category\":\"Sm\",\"key\":\"207A\",\"mappings\":{\"default\":{\"default\":\"superscript Plus Sign\"}}},{\"category\":\"Sm\",\"key\":\"207B\",\"mappings\":{\"default\":{\"default\":\"superíndice menos\"}}},{\"category\":\"Sm\",\"key\":\"207C\",\"mappings\":{\"default\":{\"default\":\"superscript Equals Sign\"}}},{\"category\":\"Ps\",\"key\":\"207D\",\"mappings\":{\"default\":{\"default\":\"paréntesis izquierdo superíndice\"}}},{\"category\":\"Pe\",\"key\":\"207E\",\"mappings\":{\"default\":{\"default\":\"paréntesis derecho superíndice\"}}},{\"category\":\"Sm\",\"key\":\"208A\",\"mappings\":{\"default\":{\"default\":\"signo de subíndice más\"}}},{\"category\":\"Sm\",\"key\":\"208B\",\"mappings\":{\"default\":{\"default\":\"subíndice menos\"}}},{\"category\":\"Sm\",\"key\":\"208C\",\"mappings\":{\"default\":{\"default\":\"signo de subíndice es igual\"}}},{\"category\":\"Ps\",\"key\":\"208D\",\"mappings\":{\"default\":{\"default\":\"subíndice paréntesis izquierdo\"}}},{\"category\":\"Pe\",\"key\":\"208E\",\"mappings\":{\"default\":{\"default\":\"subíndice de paréntesis derecho\"}}},{\"category\":\"So\",\"key\":\"214A\",\"mappings\":{\"default\":{\"default\":\"línea de propiedad\"}}},{\"category\":\"Sm\",\"key\":\"214B\",\"mappings\":{\"default\":{\"default\":\"ampersand convertido\"}}},{\"category\":\"So\",\"key\":\"214C\",\"mappings\":{\"default\":{\"default\":\"por signo\"}}},{\"category\":\"So\",\"key\":\"214D\",\"mappings\":{\"default\":{\"default\":\"aktieselskab\"}}},{\"category\":\"Ll\",\"key\":\"214E\",\"mappings\":{\"default\":{\"default\":\"torneado pequeño f\"}}},{\"key\":\"2200\",\"mappings\":{\"default\":{\"default\":\"para todo\"}},\"category\":\"Sm\"},{\"key\":\"2201\",\"mappings\":{\"default\":{\"default\":\"complementario\"}},\"category\":\"Sm\"},{\"key\":\"2203\",\"mappings\":{\"default\":{\"default\":\"existe\"}},\"category\":\"Sm\"},{\"key\":\"2204\",\"mappings\":{\"default\":{\"default\":\"no existe\"}},\"category\":\"Sm\"},{\"key\":\"2205\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío\"}},\"category\":\"Sm\"},{\"key\":\"2206\",\"mappings\":{\"default\":{\"default\":\"incremento\"}},\"category\":\"Sm\"},{\"key\":\"2208\",\"mappings\":{\"default\":{\"default\":\"perteneciente a\"}},\"category\":\"Sm\"},{\"key\":\"2209\",\"mappings\":{\"default\":{\"default\":\"no perteneciente a\"}},\"category\":\"Sm\"},{\"key\":\"220A\",\"mappings\":{\"default\":{\"default\":\"perteneciente a\"}},\"category\":\"Sm\"},{\"key\":\"220B\",\"mappings\":{\"default\":{\"default\":\"comprende a\"}},\"category\":\"Sm\"},{\"key\":\"220C\",\"mappings\":{\"default\":{\"default\":\"no comprende a\"}},\"category\":\"Sm\"},{\"key\":\"220D\",\"mappings\":{\"default\":{\"default\":\"comprende a\"}},\"category\":\"Sm\"},{\"key\":\"220E\",\"mappings\":{\"default\":{\"default\":\"fin de demostración\"}},\"category\":\"Sm\"},{\"key\":\"220F\",\"mappings\":{\"default\":{\"default\":\"producto\"}},\"category\":\"Sm\"},{\"key\":\"2210\",\"mappings\":{\"default\":{\"default\":\"coproducto\"}},\"category\":\"Sm\"},{\"key\":\"2211\",\"mappings\":{\"default\":{\"default\":\"sumatorio\"}},\"category\":\"Sm\"},{\"key\":\"2212\",\"mappings\":{\"default\":{\"default\":\"menos\"}},\"category\":\"Sm\"},{\"key\":\"2213\",\"mappings\":{\"default\":{\"default\":\"menos más\"}},\"category\":\"Sm\"},{\"key\":\"2214\",\"mappings\":{\"default\":{\"default\":\"punto más\"}},\"category\":\"Sm\"},{\"key\":\"2215\",\"mappings\":{\"default\":{\"default\":\"barra de división\"}},\"category\":\"Sm\"},{\"key\":\"2216\",\"mappings\":{\"default\":{\"default\":\"menos\"}},\"category\":\"Sm\"},{\"key\":\"2217\",\"mappings\":{\"default\":{\"default\":\"asterisco\"}},\"category\":\"Sm\"},{\"key\":\"2218\",\"mappings\":{\"default\":{\"default\":\"composición\"}},\"category\":\"Sm\"},{\"key\":\"2219\",\"mappings\":{\"default\":{\"default\":\"bala\"}},\"category\":\"Sm\"},{\"key\":\"221A\",\"mappings\":{\"default\":{\"default\":\"raíz\"}},\"category\":\"Sm\"},{\"key\":\"221B\",\"mappings\":{\"default\":{\"default\":\"raíz cúbica\"}},\"category\":\"Sm\"},{\"key\":\"221C\",\"mappings\":{\"default\":{\"default\":\"raíz cuarta\"}},\"category\":\"Sm\"},{\"key\":\"221D\",\"mappings\":{\"default\":{\"default\":\"proporcional a\"}},\"category\":\"Sm\"},{\"key\":\"221E\",\"mappings\":{\"default\":{\"default\":\"infinito\"}},\"category\":\"Sm\"},{\"key\":\"221F\",\"mappings\":{\"default\":{\"default\":\"ángulo recto\"}},\"category\":\"Sm\"},{\"key\":\"2220\",\"mappings\":{\"default\":{\"default\":\"ángulo\"}},\"category\":\"Sm\"},{\"key\":\"2221\",\"mappings\":{\"default\":{\"default\":\"ángulo medido\"}},\"category\":\"Sm\"},{\"key\":\"2222\",\"mappings\":{\"default\":{\"default\":\"ángulo esférico\"}},\"category\":\"Sm\"},{\"key\":\"2223\",\"mappings\":{\"default\":{\"default\":\"divide a\"}},\"category\":\"Sm\"},{\"key\":\"2224\",\"mappings\":{\"default\":{\"default\":\"no divide a\"}},\"category\":\"Sm\"},{\"key\":\"2225\",\"mappings\":{\"default\":{\"default\":\"paralela a\"}},\"category\":\"Sm\"},{\"key\":\"2226\",\"mappings\":{\"default\":{\"default\":\"no paralela a\"}},\"category\":\"Sm\"},{\"key\":\"2227\",\"mappings\":{\"default\":{\"default\":\"y\"}},\"category\":\"Sm\"},{\"key\":\"2228\",\"mappings\":{\"default\":{\"default\":\"o\"}},\"category\":\"Sm\"},{\"key\":\"2229\",\"mappings\":{\"default\":{\"default\":\"intersección\"}},\"category\":\"Sm\"},{\"key\":\"222A\",\"mappings\":{\"default\":{\"default\":\"unión\"}},\"category\":\"Sm\"},{\"key\":\"222B\",\"mappings\":{\"default\":{\"default\":\"integral\"}},\"category\":\"Sm\"},{\"key\":\"222C\",\"mappings\":{\"default\":{\"default\":\"integral doble\"}},\"category\":\"Sm\"},{\"key\":\"222D\",\"mappings\":{\"default\":{\"default\":\"integral triple\"}},\"category\":\"Sm\"},{\"key\":\"222E\",\"mappings\":{\"default\":{\"default\":\"integral de contorno\"}},\"category\":\"Sm\"},{\"key\":\"222F\",\"mappings\":{\"default\":{\"default\":\"integral de superficie\"}},\"category\":\"Sm\"},{\"key\":\"2230\",\"mappings\":{\"default\":{\"default\":\"integral de volumen\"}},\"category\":\"Sm\"},{\"key\":\"2231\",\"mappings\":{\"default\":{\"default\":\"integral de contorno en sentido horario\"}},\"category\":\"Sm\"},{\"key\":\"2232\",\"mappings\":{\"default\":{\"default\":\"integral de contorno en sentido horario\"}},\"category\":\"Sm\"},{\"key\":\"2233\",\"mappings\":{\"default\":{\"default\":\"integral de contorno en sentido antihorario\"}},\"category\":\"Sm\"},{\"key\":\"2234\",\"mappings\":{\"default\":{\"default\":\"por lo tanto\"}},\"category\":\"Sm\"},{\"key\":\"2235\",\"mappings\":{\"default\":{\"default\":\"porque\"}},\"category\":\"Sm\"},{\"key\":\"2236\",\"mappings\":{\"default\":{\"default\":\"razón\"}},\"category\":\"Sm\"},{\"key\":\"2237\",\"mappings\":{\"default\":{\"default\":\"proporción\"}},\"category\":\"Sm\"},{\"key\":\"2238\",\"mappings\":{\"default\":{\"default\":\"punto menos\"}},\"category\":\"Sm\"},{\"key\":\"2239\",\"mappings\":{\"default\":{\"default\":\"exceso\"}},\"category\":\"Sm\"},{\"key\":\"223A\",\"mappings\":{\"default\":{\"default\":\"proporción geométrica\"}},\"category\":\"Sm\"},{\"key\":\"223B\",\"mappings\":{\"default\":{\"default\":\"homotecia\"}},\"category\":\"Sm\"},{\"key\":\"223C\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sm\"},{\"key\":\"223D\",\"mappings\":{\"default\":{\"default\":\"tilde invertido\"}},\"category\":\"Sm\"},{\"key\":\"223E\",\"mappings\":{\"default\":{\"default\":\"s horizontal invertida\"}},\"category\":\"Sm\"},{\"key\":\"223F\",\"mappings\":{\"default\":{\"default\":\"sinusoide\"}},\"category\":\"Sm\"},{\"key\":\"2240\",\"mappings\":{\"default\":{\"default\":\"producto de guirnalda\"}},\"category\":\"Sm\"},{\"key\":\"2241\",\"mappings\":{\"default\":{\"default\":\"no tilde\"}},\"category\":\"Sm\"},{\"key\":\"2242\",\"mappings\":{\"default\":{\"default\":\"menos tilde\"}},\"category\":\"Sm\"},{\"key\":\"2243\",\"mappings\":{\"default\":{\"default\":\"asintóticamente igual a\"}},\"category\":\"Sm\"},{\"key\":\"2244\",\"mappings\":{\"default\":{\"default\":\"no asintóticamente igual a\"}},\"category\":\"Sm\"},{\"key\":\"2245\",\"mappings\":{\"default\":{\"default\":\"aproximadamente igual a\"}},\"category\":\"Sm\"},{\"key\":\"2246\",\"mappings\":{\"default\":{\"default\":\"aproximado pero no igual a\"}},\"category\":\"Sm\"},{\"key\":\"2247\",\"mappings\":{\"default\":{\"default\":\"no aproximado a\"}},\"category\":\"Sm\"},{\"key\":\"2248\",\"mappings\":{\"default\":{\"default\":\"aproximado\",\"defaultMP\":\"casi igual a\"}},\"category\":\"Sm\"},{\"key\":\"2249\",\"mappings\":{\"default\":{\"default\":\"no es casi igual a\"}},\"category\":\"Sm\"},{\"key\":\"224A\",\"mappings\":{\"default\":{\"default\":\"igual o casi igual a\"}},\"category\":\"Sm\"},{\"key\":\"224B\",\"mappings\":{\"default\":{\"default\":\"triple tilde\"}},\"category\":\"Sm\"},{\"key\":\"224C\",\"mappings\":{\"default\":{\"default\":\"todo igual a\"}},\"category\":\"Sm\"},{\"key\":\"224D\",\"mappings\":{\"default\":{\"default\":\"equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"224E\",\"mappings\":{\"default\":{\"default\":\"geométricamente equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"224F\",\"mappings\":{\"default\":{\"default\":\"diferencia entre\"}},\"category\":\"Sm\"},{\"key\":\"2250\",\"mappings\":{\"default\":{\"default\":\"se acerca al límite\"}},\"category\":\"Sm\"},{\"key\":\"2251\",\"mappings\":{\"default\":{\"default\":\"geométricamente igual a\"}},\"category\":\"Sm\"},{\"key\":\"2252\",\"mappings\":{\"default\":{\"default\":\"aproximadamente igual a o imagen de\"}},\"category\":\"Sm\"},{\"key\":\"2253\",\"mappings\":{\"default\":{\"default\":\"imagen de o aproximadamente igual a\"}},\"category\":\"Sm\"},{\"key\":\"2254\",\"mappings\":{\"default\":{\"default\":\"dos puntos igual\"}},\"category\":\"Sm\"},{\"key\":\"2255\",\"mappings\":{\"default\":{\"default\":\"igual dos puntos\"}},\"category\":\"Sm\"},{\"key\":\"2256\",\"mappings\":{\"default\":{\"default\":\"igual incluyendo anillo\"}},\"category\":\"Sm\"},{\"key\":\"2257\",\"mappings\":{\"default\":{\"default\":\"igual anillo a\"}},\"category\":\"Sm\"},{\"key\":\"2258\",\"mappings\":{\"default\":{\"default\":\"corresponde a\"}},\"category\":\"Sm\"},{\"key\":\"2259\",\"mappings\":{\"default\":{\"default\":\"estima a\"}},\"category\":\"Sm\"},{\"key\":\"225A\",\"mappings\":{\"default\":{\"default\":\"equiangular con\"}},\"category\":\"Sm\"},{\"key\":\"225B\",\"mappings\":{\"default\":{\"default\":\"igual con estrella\"}},\"category\":\"Sm\"},{\"key\":\"225C\",\"mappings\":{\"default\":{\"default\":\"igual con delta\"}},\"category\":\"Sm\"},{\"key\":\"225D\",\"mappings\":{\"default\":{\"default\":\"igual por definición a\"}},\"category\":\"Sm\"},{\"key\":\"225E\",\"mappings\":{\"default\":{\"default\":\"medido por\"}},\"category\":\"Sm\"},{\"key\":\"225F\",\"mappings\":{\"default\":{\"default\":\"igual con interrogante\"}},\"category\":\"Sm\"},{\"key\":\"2260\",\"mappings\":{\"default\":{\"default\":\"no es igual a\",\"defaultMP\":\"distinto de\"}},\"category\":\"Sm\"},{\"key\":\"2261\",\"mappings\":{\"default\":{\"default\":\"idéntico a\"}},\"category\":\"Sm\"},{\"key\":\"2262\",\"mappings\":{\"default\":{\"default\":\"no es idéntico a\"}},\"category\":\"Sm\"},{\"key\":\"2263\",\"mappings\":{\"default\":{\"default\":\"estrictamente equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2264\",\"mappings\":{\"default\":{\"default\":\"menor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"2265\",\"mappings\":{\"default\":{\"default\":\"mayor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"2266\",\"mappings\":{\"default\":{\"default\":\"menor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"2267\",\"mappings\":{\"default\":{\"default\":\"mayor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"2268\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que\"}},\"category\":\"Sm\"},{\"key\":\"2269\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que\"}},\"category\":\"Sm\"},{\"key\":\"226A\",\"mappings\":{\"default\":{\"default\":\"mucho menor que\"}},\"category\":\"Sm\"},{\"key\":\"226B\",\"mappings\":{\"default\":{\"default\":\"mucho mayor que\"}},\"category\":\"Sm\"},{\"key\":\"226C\",\"mappings\":{\"default\":{\"default\":\"entre\"}},\"category\":\"Sm\"},{\"key\":\"226D\",\"mappings\":{\"default\":{\"default\":\"no equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"226E\",\"mappings\":{\"default\":{\"default\":\"no menor que\"}},\"category\":\"Sm\"},{\"key\":\"226F\",\"mappings\":{\"default\":{\"default\":\"no mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2270\",\"mappings\":{\"default\":{\"default\":\"no menor ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"2271\",\"mappings\":{\"default\":{\"default\":\"no mayor ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"2272\",\"mappings\":{\"default\":{\"default\":\"menor o equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2273\",\"mappings\":{\"default\":{\"default\":\"mayor o equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2274\",\"mappings\":{\"default\":{\"default\":\"no menor ni equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2275\",\"mappings\":{\"default\":{\"default\":\"no mayor ni equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2276\",\"mappings\":{\"default\":{\"default\":\"menor o mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2277\",\"mappings\":{\"default\":{\"default\":\"mayor o menor que\"}},\"category\":\"Sm\"},{\"key\":\"2278\",\"mappings\":{\"default\":{\"default\":\"no menor ni mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2279\",\"mappings\":{\"default\":{\"default\":\"no mayor ni menor que\"}},\"category\":\"Sm\"},{\"key\":\"227A\",\"mappings\":{\"default\":{\"default\":\"precede a\"}},\"category\":\"Sm\"},{\"key\":\"227B\",\"mappings\":{\"default\":{\"default\":\"sigue a\"}},\"category\":\"Sm\"},{\"key\":\"227C\",\"mappings\":{\"default\":{\"default\":\"precede o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"227D\",\"mappings\":{\"default\":{\"default\":\"sigue o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"227E\",\"mappings\":{\"default\":{\"default\":\"precede o es equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"227F\",\"mappings\":{\"default\":{\"default\":\"sigue o es equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"2280\",\"mappings\":{\"default\":{\"default\":\"no precede a\"}},\"category\":\"Sm\"},{\"key\":\"2281\",\"mappings\":{\"default\":{\"default\":\"no sigue a\"}},\"category\":\"Sm\"},{\"key\":\"2282\",\"mappings\":{\"default\":{\"default\":\"incluido en\"}},\"category\":\"Sm\"},{\"key\":\"2283\",\"mappings\":{\"default\":{\"default\":\"contiene a\"}},\"category\":\"Sm\"},{\"key\":\"2284\",\"mappings\":{\"default\":{\"default\":\"no incluido en\"}},\"category\":\"Sm\"},{\"key\":\"2285\",\"mappings\":{\"default\":{\"default\":\"no contiene a\"}},\"category\":\"Sm\"},{\"key\":\"2286\",\"mappings\":{\"default\":{\"default\":\"incluido o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2287\",\"mappings\":{\"default\":{\"default\":\"contiene o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"2288\",\"mappings\":{\"default\":{\"default\":\"no incluido ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"2289\",\"mappings\":{\"default\":{\"default\":\"no contiene ni es igual a\"}},\"category\":\"Sm\"},{\"key\":\"228A\",\"mappings\":{\"default\":{\"default\":\"incluido estrictamente en\"}},\"category\":\"Sm\"},{\"key\":\"228B\",\"mappings\":{\"default\":{\"default\":\"contiene estrictamente a\"}},\"category\":\"Sm\"},{\"key\":\"228C\",\"mappings\":{\"default\":{\"default\":\"familia de conjuntos\"}},\"category\":\"Sm\"},{\"key\":\"228D\",\"mappings\":{\"default\":{\"default\":\"producto de familia de conjuntos\"}},\"category\":\"Sm\"},{\"key\":\"228E\",\"mappings\":{\"default\":{\"default\":\"unión de familia de conjuntos\"}},\"category\":\"Sm\"},{\"key\":\"228F\",\"mappings\":{\"default\":{\"default\":\"imagen cuadrada de\"}},\"category\":\"Sm\"},{\"key\":\"2290\",\"mappings\":{\"default\":{\"default\":\"original cuadrado de\"}},\"category\":\"Sm\"},{\"key\":\"2291\",\"mappings\":{\"default\":{\"default\":\"imagen cuadrada de o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2292\",\"mappings\":{\"default\":{\"default\":\"original cuadrado de o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2293\",\"mappings\":{\"default\":{\"default\":\"intersección cuadrada\"}},\"category\":\"Sm\"},{\"key\":\"2294\",\"mappings\":{\"default\":{\"default\":\"unión cuadrada\"}},\"category\":\"Sm\"},{\"key\":\"2295\",\"mappings\":{\"default\":{\"default\":\"más en círculo\"}},\"category\":\"Sm\"},{\"key\":\"2296\",\"mappings\":{\"default\":{\"default\":\"menos en círculo\"}},\"category\":\"Sm\"},{\"key\":\"2297\",\"mappings\":{\"default\":{\"default\":\"por en círculo\"}},\"category\":\"Sm\"},{\"key\":\"2298\",\"mappings\":{\"default\":{\"default\":\"barra en círculo\"}},\"category\":\"Sm\"},{\"key\":\"2299\",\"mappings\":{\"default\":{\"default\":\"punto en círculo\"}},\"category\":\"Sm\"},{\"key\":\"229A\",\"mappings\":{\"default\":{\"default\":\"anillo en círculo\"}},\"category\":\"Sm\"},{\"key\":\"229B\",\"mappings\":{\"default\":{\"default\":\"asterisco en círculo\"}},\"category\":\"Sm\"},{\"key\":\"229C\",\"mappings\":{\"default\":{\"default\":\"igual en círculo\"}},\"category\":\"Sm\"},{\"key\":\"229D\",\"mappings\":{\"default\":{\"default\":\"menos en círculo\"}},\"category\":\"Sm\"},{\"key\":\"229E\",\"mappings\":{\"default\":{\"default\":\"más en cuadrado\"}},\"category\":\"Sm\"},{\"key\":\"229F\",\"mappings\":{\"default\":{\"default\":\"menos en cuadrado\"}},\"category\":\"Sm\"},{\"key\":\"22A0\",\"mappings\":{\"default\":{\"default\":\"veces en cuadrado\"}},\"category\":\"Sm\"},{\"key\":\"22A1\",\"mappings\":{\"default\":{\"default\":\"punto en cuadrado\"}},\"category\":\"Sm\"},{\"key\":\"22A2\",\"mappings\":{\"default\":{\"default\":\"t horizontal hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"22A3\",\"mappings\":{\"default\":{\"default\":\"t horizontal hacia la derecha\"}},\"category\":\"Sm\"},{\"key\":\"22A4\",\"mappings\":{\"default\":{\"default\":\"perpendicular\"}},\"category\":\"Sm\"},{\"key\":\"22A5\",\"mappings\":{\"default\":{\"default\":\"perpendicular invertida\"}},\"category\":\"Sm\"},{\"key\":\"22A6\",\"mappings\":{\"default\":{\"default\":\"afirmación\"}},\"category\":\"Sm\"},{\"key\":\"22A7\",\"mappings\":{\"default\":{\"default\":\"modela\"}},\"category\":\"Sm\"},{\"key\":\"22A8\",\"mappings\":{\"default\":{\"default\":\"verdadero\"}},\"category\":\"Sm\"},{\"key\":\"22A9\",\"mappings\":{\"default\":{\"default\":\"obliga\"}},\"category\":\"Sm\"},{\"key\":\"22AA\",\"mappings\":{\"default\":{\"default\":\"triple barra vertical torniquete derecho\"}},\"category\":\"Sm\"},{\"key\":\"22AB\",\"mappings\":{\"default\":{\"default\":\"doble barra vertical doble torniquete derecho\"}},\"category\":\"Sm\"},{\"key\":\"22AC\",\"mappings\":{\"default\":{\"default\":\"no prueba\"}},\"category\":\"Sm\"},{\"key\":\"22AD\",\"mappings\":{\"default\":{\"default\":\"falso\"}},\"category\":\"Sm\"},{\"key\":\"22AE\",\"mappings\":{\"default\":{\"default\":\"no obliga\"}},\"category\":\"Sm\"},{\"key\":\"22AF\",\"mappings\":{\"default\":{\"default\":\"doble barra vertical doble torniquete derecho negada\"}},\"category\":\"Sm\"},{\"key\":\"22B0\",\"mappings\":{\"default\":{\"default\":\"precede respecto de\"}},\"category\":\"Sm\"},{\"key\":\"22B1\",\"mappings\":{\"default\":{\"default\":\"sigue respecto de\"}},\"category\":\"Sm\"},{\"key\":\"22B2\",\"mappings\":{\"default\":{\"default\":\"subgrupo normal de\"}},\"category\":\"Sm\"},{\"key\":\"22B3\",\"mappings\":{\"default\":{\"default\":\"contiene como subgrupo normal a\"}},\"category\":\"Sm\"},{\"key\":\"22B4\",\"mappings\":{\"default\":{\"default\":\"subgrupo normal o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22B5\",\"mappings\":{\"default\":{\"default\":\"contiene como subgrupo normal o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22B6\",\"mappings\":{\"default\":{\"default\":\"original de\"}},\"category\":\"Sm\"},{\"key\":\"22B7\",\"mappings\":{\"default\":{\"default\":\"imagen de\"}},\"category\":\"Sm\"},{\"key\":\"22B8\",\"mappings\":{\"default\":{\"default\":\"multifunción\"}},\"category\":\"Sm\"},{\"key\":\"22B9\",\"mappings\":{\"default\":{\"default\":\"matriz hermitiana conjugada\"}},\"category\":\"Sm\"},{\"key\":\"22BA\",\"mappings\":{\"default\":{\"default\":\"interpola\"}},\"category\":\"Sm\"},{\"key\":\"22BB\",\"mappings\":{\"default\":{\"default\":\"o excluyente\"}},\"category\":\"Sm\"},{\"key\":\"22BC\",\"mappings\":{\"default\":{\"default\":\"no y\"}},\"category\":\"Sm\"},{\"key\":\"22BD\",\"mappings\":{\"default\":{\"default\":\"no o\"}},\"category\":\"Sm\"},{\"key\":\"22BF\",\"mappings\":{\"default\":{\"default\":\"triángulo rectángulo\"}},\"category\":\"Sm\"},{\"key\":\"22C0\",\"mappings\":{\"default\":{\"default\":\"y\"}},\"category\":\"Sm\"},{\"key\":\"22C1\",\"mappings\":{\"default\":{\"default\":\"o\"}},\"category\":\"Sm\"},{\"key\":\"22C2\",\"mappings\":{\"default\":{\"default\":\"intersección\"}},\"category\":\"Sm\"},{\"key\":\"22C3\",\"mappings\":{\"default\":{\"default\":\"unión\"}},\"category\":\"Sm\"},{\"key\":\"22C4\",\"mappings\":{\"default\":{\"default\":\"operador diamante\"}},\"category\":\"Sm\"},{\"key\":\"22C5\",\"mappings\":{\"default\":{\"default\":\"punto\"}},\"category\":\"Sm\"},{\"key\":\"22C6\",\"mappings\":{\"default\":{\"default\":\"estrella\"}},\"category\":\"Sm\"},{\"key\":\"22C7\",\"mappings\":{\"default\":{\"default\":\"dividido por\"}},\"category\":\"Sm\"},{\"key\":\"22C8\",\"mappings\":{\"default\":{\"default\":\"moño\"}},\"category\":\"Sm\"},{\"key\":\"22C9\",\"mappings\":{\"default\":{\"default\":\"factor normal izquierdo producto semidirecto\"}},\"category\":\"Sm\"},{\"key\":\"22CA\",\"mappings\":{\"default\":{\"default\":\"factor normal derecho producto semidirecto\"}},\"category\":\"Sm\"},{\"key\":\"22CB\",\"mappings\":{\"default\":{\"default\":\"producto semidirecto izquierdo\"}},\"category\":\"Sm\"},{\"key\":\"22CC\",\"mappings\":{\"default\":{\"default\":\"producto semidirecto derecho\"}},\"category\":\"Sm\"},{\"key\":\"22CD\",\"mappings\":{\"default\":{\"default\":\"tilde invertida igual a\"}},\"category\":\"Sm\"},{\"key\":\"22CE\",\"mappings\":{\"default\":{\"default\":\"o rizada\"}},\"category\":\"Sm\"},{\"key\":\"22CF\",\"mappings\":{\"default\":{\"default\":\"y rizada\"}},\"category\":\"Sm\"},{\"key\":\"22D0\",\"mappings\":{\"default\":{\"default\":\"doble incluido\"}},\"category\":\"Sm\"},{\"key\":\"22D1\",\"mappings\":{\"default\":{\"default\":\"doble contiene\"}},\"category\":\"Sm\"},{\"key\":\"22D2\",\"mappings\":{\"default\":{\"default\":\"doble intersección\"}},\"category\":\"Sm\"},{\"key\":\"22D3\",\"mappings\":{\"default\":{\"default\":\"doble unión\"}},\"category\":\"Sm\"},{\"key\":\"22D4\",\"mappings\":{\"default\":{\"default\":\"bieldo\"}},\"category\":\"Sm\"},{\"key\":\"22D5\",\"mappings\":{\"default\":{\"default\":\"paralela o igual a\"}},\"category\":\"Sm\"},{\"key\":\"22D6\",\"mappings\":{\"default\":{\"default\":\"menor que con punto\"}},\"category\":\"Sm\"},{\"key\":\"22D7\",\"mappings\":{\"default\":{\"default\":\"mayor que con punto\"}},\"category\":\"Sm\"},{\"key\":\"22D8\",\"mappings\":{\"default\":{\"default\":\"mucho menor que\"}},\"category\":\"Sm\"},{\"key\":\"22D9\",\"mappings\":{\"default\":{\"default\":\"mucho mayor que\"}},\"category\":\"Sm\"},{\"key\":\"22DA\",\"mappings\":{\"default\":{\"default\":\"menor igual o mayor que\"}},\"category\":\"Sm\"},{\"key\":\"22DB\",\"mappings\":{\"default\":{\"default\":\"mayor igual o menor que\"}},\"category\":\"Sm\"},{\"key\":\"22DC\",\"mappings\":{\"default\":{\"default\":\"menor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"22DD\",\"mappings\":{\"default\":{\"default\":\"mayor o igual que\"}},\"category\":\"Sm\"},{\"key\":\"22DE\",\"mappings\":{\"default\":{\"default\":\"precede o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22DF\",\"mappings\":{\"default\":{\"default\":\"sigue o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22E0\",\"mappings\":{\"default\":{\"default\":\"no precede ni es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22E1\",\"mappings\":{\"default\":{\"default\":\"no sigue ni es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22E2\",\"mappings\":{\"default\":{\"default\":\"no es imagen cuadrada ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"22E3\",\"mappings\":{\"default\":{\"default\":\"no es original cuadrada ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"22E4\",\"mappings\":{\"default\":{\"default\":\"imagen cuadrada estricta\"}},\"category\":\"Sm\"},{\"key\":\"22E5\",\"mappings\":{\"default\":{\"default\":\"original cuadrada estricta\"}},\"category\":\"Sm\"},{\"key\":\"22E6\",\"mappings\":{\"default\":{\"default\":\"menor que no equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"22E7\",\"mappings\":{\"default\":{\"default\":\"mayor que no equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"22E8\",\"mappings\":{\"default\":{\"default\":\"precede no equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"22E9\",\"mappings\":{\"default\":{\"default\":\"sigue no equivalente a\"}},\"category\":\"Sm\"},{\"key\":\"22EA\",\"mappings\":{\"default\":{\"default\":\"no subgrupo normal de\"}},\"category\":\"Sm\"},{\"key\":\"22EB\",\"mappings\":{\"default\":{\"default\":\"no contiene como subgrupo normal a\"}},\"category\":\"Sm\"},{\"key\":\"22EC\",\"mappings\":{\"default\":{\"default\":\"no es subgrupo normal ni igual a\"}},\"category\":\"Sm\"},{\"key\":\"22ED\",\"mappings\":{\"default\":{\"default\":\"no contiene como subgrupo normal ni es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22EE\",\"mappings\":{\"default\":{\"default\":\"puntos suspensivos verticales\"}},\"category\":\"Sm\"},{\"key\":\"22EF\",\"mappings\":{\"default\":{\"default\":\"puntos suspensivos altos\"}},\"category\":\"Sm\"},{\"key\":\"22F0\",\"mappings\":{\"default\":{\"default\":\"puntos suspensivos diagonales subiendo\"}},\"category\":\"Sm\"},{\"key\":\"22F1\",\"mappings\":{\"default\":{\"default\":\"puntos suspensivos diagonales bajando\"}},\"category\":\"Sm\"},{\"key\":\"22F2\",\"mappings\":{\"default\":{\"default\":\"pertenece con trazo horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22F3\",\"mappings\":{\"default\":{\"default\":\"pertenece con barra vertical al fin de raya horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22F4\",\"mappings\":{\"default\":{\"default\":\"pertenece en pequeño con trazo vertical\"}},\"category\":\"Sm\"},{\"key\":\"22F5\",\"mappings\":{\"default\":{\"default\":\"pertenece con punto arriba\"}},\"category\":\"Sm\"},{\"key\":\"22F6\",\"mappings\":{\"default\":{\"default\":\"pertenece con barra arriba\"}},\"category\":\"Sm\"},{\"key\":\"22F7\",\"mappings\":{\"default\":{\"default\":\"perteneciente subrayado\"}},\"category\":\"Sm\"},{\"key\":\"22F8\",\"mappings\":{\"default\":{\"default\":\"perteneciente subrayado\"}},\"category\":\"Sm\"},{\"key\":\"22F9\",\"mappings\":{\"default\":{\"default\":\"pertenece con dos trazos horizontales\"}},\"category\":\"Sm\"},{\"key\":\"22FA\",\"mappings\":{\"default\":{\"default\":\"contiene o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"22FB\",\"mappings\":{\"default\":{\"default\":\"contiene con marca\"}},\"category\":\"Sm\"},{\"key\":\"22FC\",\"mappings\":{\"default\":{\"default\":\"contiene con marca\"}},\"category\":\"Sm\"},{\"key\":\"22FD\",\"mappings\":{\"default\":{\"default\":\"contiene con barra\"}},\"category\":\"Sm\"},{\"key\":\"22FE\",\"mappings\":{\"default\":{\"default\":\"perteneciente con barra\"}},\"category\":\"Sm\"},{\"key\":\"22FF\",\"mappings\":{\"default\":{\"default\":\"z anotación asociación de bolsa\"}},\"category\":\"Sm\"},{\"key\":\"2300\",\"mappings\":{\"default\":{\"default\":\"diámetro\"}},\"category\":\"So\"},{\"key\":\"2302\",\"mappings\":{\"default\":{\"default\":\"casa\"}},\"category\":\"So\"},{\"key\":\"2305\",\"mappings\":{\"default\":{\"default\":\"en proyectividad con\"}},\"category\":\"So\"},{\"key\":\"2306\",\"mappings\":{\"default\":{\"default\":\"en perspectividad con\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2307\",\"mappings\":{\"default\":{\"default\":\"línea ondulada\"}}},{\"key\":\"2310\",\"mappings\":{\"default\":{\"default\":\"no invertido\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2311\",\"mappings\":{\"default\":{\"default\":\"pastillas cuadradas\"}}},{\"key\":\"2312\",\"mappings\":{\"default\":{\"default\":\"arco\"}},\"category\":\"So\"},{\"key\":\"2313\",\"mappings\":{\"default\":{\"default\":\"segmento\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2314\",\"mappings\":{\"default\":{\"default\":\"sector\"}}},{\"category\":\"So\",\"key\":\"2795\",\"mappings\":{\"default\":{\"default\":\"signo más pesado\"}}},{\"category\":\"So\",\"key\":\"2796\",\"mappings\":{\"default\":{\"default\":\"signo menos pesado\"}}},{\"category\":\"So\",\"key\":\"2797\",\"mappings\":{\"default\":{\"default\":\"signo de la división pesada\"}}},{\"category\":\"So\",\"key\":\"27B0\",\"mappings\":{\"default\":{\"default\":\"bucle rizado\"}}},{\"category\":\"So\",\"key\":\"27BF\",\"mappings\":{\"default\":{\"default\":\"doble bucle rizado\"}}},{\"key\":\"27C1\",\"mappings\":{\"default\":{\"default\":\"triángulo encerrando triángulo\"}},\"category\":\"Sm\"},{\"key\":\"27C2\",\"mappings\":{\"default\":{\"default\":\"perpendicular\"}},\"category\":\"Sm\"},{\"key\":\"27C3\",\"mappings\":{\"default\":{\"default\":\"incluido en\"}},\"category\":\"Sm\"},{\"key\":\"27C4\",\"mappings\":{\"default\":{\"default\":\"contiene a\"}},\"category\":\"Sm\"},{\"key\":\"27C7\",\"mappings\":{\"default\":{\"default\":\"punto en círculo\"}},\"category\":\"Sm\"},{\"key\":\"27C8\",\"mappings\":{\"default\":{\"default\":\"atrás tajo antes de subconjunto\"}},\"category\":\"Sm\"},{\"key\":\"27C9\",\"mappings\":{\"default\":{\"default\":\"sobreconjunto antes de tajo\"}},\"category\":\"Sm\"},{\"key\":\"27CA\",\"mappings\":{\"default\":{\"default\":\"barra vertical con golpe horizontal\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27CB\",\"mappings\":{\"default\":{\"default\":\"diagonal matemático de levantamiento\"}}},{\"key\":\"27CC\",\"mappings\":{\"default\":{\"default\":\"división larga\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27CD\",\"mappings\":{\"default\":{\"default\":\"diagonal descendente matemática\"}}},{\"category\":\"Sm\",\"key\":\"27CE\",\"mappings\":{\"default\":{\"default\":\"cuadrado Lógico Y\"}}},{\"category\":\"Sm\",\"key\":\"27CF\",\"mappings\":{\"default\":{\"default\":\"cuadrado Lógico O\"}}},{\"category\":\"Sm\",\"key\":\"27D0\",\"mappings\":{\"default\":{\"default\":\"diamante blanco con punto centrado\"}}},{\"key\":\"27D1\",\"mappings\":{\"default\":{\"default\":\"y con punto interior\"}},\"category\":\"Sm\"},{\"key\":\"27D2\",\"mappings\":{\"default\":{\"default\":\"elemento de apertura hacia arriba\"}},\"category\":\"Sm\"},{\"key\":\"27D3\",\"mappings\":{\"default\":{\"default\":\"ángulo inferior derecho con punto\"}},\"category\":\"Sm\"},{\"key\":\"27D4\",\"mappings\":{\"default\":{\"default\":\"ángulo inferior izquierdo con punto\"}},\"category\":\"Sm\"},{\"key\":\"27D5\",\"mappings\":{\"default\":{\"default\":\"izquierdo exterior une\"}},\"category\":\"Sm\"},{\"key\":\"27D6\",\"mappings\":{\"default\":{\"default\":\"derecho exterior une\"}},\"category\":\"Sm\"},{\"key\":\"27D7\",\"mappings\":{\"default\":{\"default\":\"lleno exterior une\"}},\"category\":\"Sm\"},{\"key\":\"27D8\",\"mappings\":{\"default\":{\"default\":\"perpendicular inversa\"}},\"category\":\"Sm\"},{\"key\":\"27D9\",\"mappings\":{\"default\":{\"default\":\"perpendicular\"}},\"category\":\"Sm\"},{\"key\":\"27DA\",\"mappings\":{\"default\":{\"default\":\"izquierdo y derecho doble torniquete\"}},\"category\":\"Sm\"},{\"key\":\"27DB\",\"mappings\":{\"default\":{\"default\":\"doble T horizontal\"}},\"category\":\"Sm\"},{\"key\":\"27DC\",\"mappings\":{\"default\":{\"default\":\"multifunción por la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"27DD\",\"mappings\":{\"default\":{\"default\":\"t horizontal derecha larga\"}},\"category\":\"Sm\"},{\"key\":\"27DE\",\"mappings\":{\"default\":{\"default\":\"t horizontal izquierda larga\"}},\"category\":\"Sm\"},{\"key\":\"27DF\",\"mappings\":{\"default\":{\"default\":\"perpendicular inversa con círculo arriba\"}},\"category\":\"Sm\"},{\"key\":\"27E0\",\"mappings\":{\"default\":{\"default\":\"pastilla dividida por regla horizontal\"}},\"category\":\"Sm\"},{\"key\":\"27E1\",\"mappings\":{\"default\":{\"default\":\"diamante cóncavo vacío\"}},\"category\":\"Sm\"},{\"key\":\"27E2\",\"mappings\":{\"default\":{\"default\":\"diamante cóncavo con tictac hacia izquierda\"}},\"category\":\"Sm\"},{\"key\":\"27E3\",\"mappings\":{\"default\":{\"default\":\"diamante cóncavo con tictac hacia derecha\"}},\"category\":\"Sm\"},{\"key\":\"27E4\",\"mappings\":{\"default\":{\"default\":\"cuadrado con tictac hacia izquierda\"}},\"category\":\"Sm\"},{\"key\":\"27E5\",\"mappings\":{\"default\":{\"default\":\"cuadrado con tictac hacia derecha\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"292B\",\"mappings\":{\"default\":{\"default\":\"cruce en diagonal Cruce en diagonal Caída en diagonal\"}}},{\"category\":\"Sm\",\"key\":\"292C\",\"mappings\":{\"default\":{\"default\":\"diagonal descendente Cruce diagonal ascendente\"}}},{\"category\":\"Sm\",\"key\":\"2980\",\"mappings\":{\"default\":{\"default\":\"delimitador de barra vertical triple\"}}},{\"category\":\"Sm\",\"key\":\"2981\",\"mappings\":{\"default\":{\"default\":\"punto de notación Z\"}}},{\"category\":\"Sm\",\"key\":\"2982\",\"mappings\":{\"default\":{\"default\":\"tipo de notación Z Colon\"}}},{\"category\":\"Sm\",\"key\":\"2999\",\"mappings\":{\"default\":{\"default\":\"valla punteada\"}}},{\"key\":\"299A\",\"mappings\":{\"default\":{\"default\":\"zigzag en vertical\"}},\"category\":\"Sm\"},{\"key\":\"29B0\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío invertido\"}},\"category\":\"Sm\"},{\"key\":\"29B1\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío con barra\"}},\"category\":\"Sm\"},{\"key\":\"29B2\",\"mappings\":{\"default\":{\"default\":\"conjunto vacío con círculo\"}},\"category\":\"Sm\"},{\"key\":\"29B5\",\"mappings\":{\"default\":{\"default\":\"círculo con barra\"}},\"category\":\"Sm\"},{\"key\":\"29B6\",\"mappings\":{\"default\":{\"default\":\"barra en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29B7\",\"mappings\":{\"default\":{\"default\":\"paralelas en círculo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29B8\",\"mappings\":{\"default\":{\"default\":\"círculo inverso solidus\"}}},{\"key\":\"29B9\",\"mappings\":{\"default\":{\"default\":\"perpendicular en círculo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29BA\",\"mappings\":{\"default\":{\"default\":\"círculo dividido por barra horizontal y mitad superior dividido por barra vertical\"}}},{\"key\":\"29BB\",\"mappings\":{\"default\":{\"default\":\"x superimpresa en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29BC\",\"mappings\":{\"default\":{\"default\":\"circled anticlockwise rotated division\"}},\"category\":\"Sm\"},{\"key\":\"29BE\",\"mappings\":{\"default\":{\"default\":\"bullet vacía en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29BF\",\"mappings\":{\"default\":{\"default\":\"bullet en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29C0\",\"mappings\":{\"default\":{\"default\":\"menor que en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29C1\",\"mappings\":{\"default\":{\"default\":\"mayor que en círculo\"}},\"category\":\"Sm\"},{\"key\":\"29C2\",\"mappings\":{\"default\":{\"default\":\"círculo con círculo a la derecha\"}},\"category\":\"Sm\"},{\"key\":\"29C3\",\"mappings\":{\"default\":{\"default\":\"circle with two horizontal strokes to the right\"}},\"category\":\"Sm\"},{\"key\":\"29C4\",\"mappings\":{\"default\":{\"default\":\"cuadrado con diagonal ascendente\"}},\"category\":\"Sm\"},{\"key\":\"29C5\",\"mappings\":{\"default\":{\"default\":\"cuadrado con diagonal descendente\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29C6\",\"mappings\":{\"default\":{\"default\":\"asterisco cuadrado\"}}},{\"category\":\"Sm\",\"key\":\"29C7\",\"mappings\":{\"default\":{\"default\":\"pequeño círculo cuadrado\"}}},{\"category\":\"Sm\",\"key\":\"29C8\",\"mappings\":{\"default\":{\"default\":\"cuadrado cuadrado\"}}},{\"key\":\"29C9\",\"mappings\":{\"default\":{\"default\":\"dos cuadrados unidos\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29CA\",\"mappings\":{\"default\":{\"default\":\"triángulo con punto arriba\"}}},{\"category\":\"Sm\",\"key\":\"29CB\",\"mappings\":{\"default\":{\"default\":\"triángulo con barra inferior\"}}},{\"category\":\"Sm\",\"key\":\"29CC\",\"mappings\":{\"default\":{\"default\":\"s en triangulo\"}}},{\"key\":\"29CD\",\"mappings\":{\"default\":{\"default\":\"triangle with serifs at bottom\"}},\"category\":\"Sm\"},{\"key\":\"29CE\",\"mappings\":{\"default\":{\"default\":\"triángulo hacia la derecha sobre triángulo hacia la izquierda\"}},\"category\":\"Sm\"},{\"key\":\"29CF\",\"mappings\":{\"default\":{\"default\":\"subgrupo normal o igual a\"}},\"category\":\"Sm\"},{\"key\":\"29D0\",\"mappings\":{\"default\":{\"default\":\"contiene como subgrupo normal o es igual a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29D1\",\"mappings\":{\"default\":{\"default\":\"pajarita Con Mitad Izquierda Negra\"}}},{\"category\":\"Sm\",\"key\":\"29D2\",\"mappings\":{\"default\":{\"default\":\"pajarita Con Mitad Derecha Negra\"}}},{\"category\":\"Sm\",\"key\":\"29D3\",\"mappings\":{\"default\":{\"default\":\"pajarita Negra\"}}},{\"category\":\"Sm\",\"key\":\"29D4\",\"mappings\":{\"default\":{\"default\":\"tiempos con Mitad Izquierda Negra\"}}},{\"category\":\"Sm\",\"key\":\"29D5\",\"mappings\":{\"default\":{\"default\":\"tiempos con la mitad derecha negra\"}}},{\"category\":\"Sm\",\"key\":\"29D6\",\"mappings\":{\"default\":{\"default\":\"reloj de arena blanco\"}}},{\"category\":\"Sm\",\"key\":\"29D7\",\"mappings\":{\"default\":{\"default\":\"reloj de arena negro\"}}},{\"key\":\"29DC\",\"mappings\":{\"default\":{\"default\":\"infinito incompleto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29DD\",\"mappings\":{\"default\":{\"default\":\"empate sobre el infinito\"}}},{\"key\":\"29DE\",\"mappings\":{\"default\":{\"default\":\"no infinito\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29DF\",\"mappings\":{\"default\":{\"default\":\"multimapa de doble extremo\"}}},{\"category\":\"Sm\",\"key\":\"29E0\",\"mappings\":{\"default\":{\"default\":\"cuadrado con contorno contorneado\"}}},{\"category\":\"Sm\",\"key\":\"29E1\",\"mappings\":{\"default\":{\"default\":\"aumenta como\"}}},{\"category\":\"Sm\",\"key\":\"29E2\",\"mappings\":{\"default\":{\"default\":\"shuffle Product\"}}},{\"key\":\"29E3\",\"mappings\":{\"default\":{\"default\":\"igual tachado doble \"}},\"category\":\"Sm\"},{\"key\":\"29E4\",\"mappings\":{\"default\":{\"default\":\"igual con tilde, con doble tachado\"}},\"category\":\"Sm\"},{\"key\":\"29E5\",\"mappings\":{\"default\":{\"default\":\"idéntico a con doble tachado\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29E6\",\"mappings\":{\"default\":{\"default\":\"gleich Stark\"}}},{\"category\":\"Sm\",\"key\":\"29E7\",\"mappings\":{\"default\":{\"default\":\"termodinamica\"}}},{\"category\":\"Sm\",\"key\":\"29E8\",\"mappings\":{\"default\":{\"default\":\"triángulo que apunta hacia abajo con la mitad izquierda negra\"}}},{\"category\":\"Sm\",\"key\":\"29E9\",\"mappings\":{\"default\":{\"default\":\"triángulo que apunta hacia abajo con la mitad derecha negra\"}}},{\"key\":\"29EB\",\"mappings\":{\"default\":{\"default\":\"rombo relleno\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29EE\",\"mappings\":{\"default\":{\"default\":\"plaza blanca con error\"}}},{\"category\":\"Sm\",\"key\":\"29EF\",\"mappings\":{\"default\":{\"default\":\"error en la Plaza Negra\"}}},{\"category\":\"Sm\",\"key\":\"29F0\",\"mappings\":{\"default\":{\"default\":\"error White Barred Diamond\"}}},{\"category\":\"Sm\",\"key\":\"29F1\",\"mappings\":{\"default\":{\"default\":\"error Black Barred Diamond\"}}},{\"category\":\"Sm\",\"key\":\"29F2\",\"mappings\":{\"default\":{\"default\":\"círculo blanco con error\"}}},{\"category\":\"Sm\",\"key\":\"29F3\",\"mappings\":{\"default\":{\"default\":\"círculo negro con barras de error\"}}},{\"key\":\"29F4\",\"mappings\":{\"default\":{\"default\":\"rule delayed\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29F5\",\"mappings\":{\"default\":{\"default\":\"operador de Solidus Inverso\"}}},{\"key\":\"29F6\",\"mappings\":{\"default\":{\"default\":\"solidus with overbar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29F7\",\"mappings\":{\"default\":{\"default\":\"solidus inverso con trazo horizontal\"}}},{\"category\":\"Sm\",\"key\":\"29F8\",\"mappings\":{\"default\":{\"default\":\"sólido grande\"}}},{\"category\":\"Sm\",\"key\":\"29F9\",\"mappings\":{\"default\":{\"default\":\"sólido inverso grande\"}}},{\"category\":\"Sm\",\"key\":\"29FA\",\"mappings\":{\"default\":{\"default\":\"doble Plus\"}}},{\"category\":\"Sm\",\"key\":\"29FB\",\"mappings\":{\"default\":{\"default\":\"triple Plus\"}}},{\"category\":\"Sm\",\"key\":\"29FE\",\"mappings\":{\"default\":{\"default\":\"minúsculo\"}}},{\"category\":\"Sm\",\"key\":\"29FF\",\"mappings\":{\"default\":{\"default\":\"miny\"}}},{\"category\":\"Sm\",\"key\":\"2A00\",\"mappings\":{\"default\":{\"default\":\"operador de puntos circulares N-Ary\"}}},{\"category\":\"Sm\",\"key\":\"2A01\",\"mappings\":{\"default\":{\"default\":\"operador N-Ary Circled Plus\"}}},{\"category\":\"Sm\",\"key\":\"2A02\",\"mappings\":{\"default\":{\"default\":\"operador de los tiempos en círculo de N-Ary\"}}},{\"category\":\"Sm\",\"key\":\"2A03\",\"mappings\":{\"default\":{\"default\":\"operador de la unión N-Ary con punto\"}}},{\"category\":\"Sm\",\"key\":\"2A04\",\"mappings\":{\"default\":{\"default\":\"n-Ary Union Operator con Plus\"}}},{\"category\":\"Sm\",\"key\":\"2A05\",\"mappings\":{\"default\":{\"default\":\"operador de intersecciones cuadradas N-Ary\"}}},{\"category\":\"Sm\",\"key\":\"2A06\",\"mappings\":{\"default\":{\"default\":\"n-Ary Square Union Operator\"}}},{\"category\":\"Sm\",\"key\":\"2A07\",\"mappings\":{\"default\":{\"default\":\"dos lógico y operador\"}}},{\"category\":\"Sm\",\"key\":\"2A08\",\"mappings\":{\"default\":{\"default\":\"dos lógico u operador\"}}},{\"category\":\"Sm\",\"key\":\"2A09\",\"mappings\":{\"default\":{\"default\":\"operador de N-Ary Times\"}}},{\"category\":\"Sm\",\"key\":\"2A0A\",\"mappings\":{\"default\":{\"default\":\"modulo dos sumas\"}}},{\"category\":\"Sm\",\"key\":\"2A0B\",\"mappings\":{\"default\":{\"default\":\"suma con Integral\"}}},{\"key\":\"2A0C\",\"mappings\":{\"default\":{\"default\":\"operador integral cuádruple\"}},\"category\":\"Sm\"},{\"key\":\"2A0D\",\"mappings\":{\"default\":{\"default\":\"finite part integral\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A0E\",\"mappings\":{\"default\":{\"default\":\"integral con Doble Trazo\"}}},{\"category\":\"Sm\",\"key\":\"2A0F\",\"mappings\":{\"default\":{\"default\":\"promedio Integral con Slash\"}}},{\"key\":\"2A10\",\"mappings\":{\"default\":{\"default\":\"circulation function\"}},\"category\":\"Sm\"},{\"key\":\"2A11\",\"mappings\":{\"default\":{\"default\":\"integral en sentido antihorario\"}},\"category\":\"Sm\"},{\"key\":\"2A12\",\"mappings\":{\"default\":{\"default\":\"integral lineal para rectángulo en polo\"}},\"category\":\"Sm\"},{\"key\":\"2A13\",\"mappings\":{\"default\":{\"default\":\"integral lineal para semicírculo en polo\"}},\"category\":\"Sm\"},{\"key\":\"2A14\",\"mappings\":{\"default\":{\"default\":\"integral lineal excluyendo el polo\"}},\"category\":\"Sm\"},{\"key\":\"2A15\",\"mappings\":{\"default\":{\"default\":\"integral en torno de un punto operador\"}},\"category\":\"Sm\"},{\"key\":\"2A16\",\"mappings\":{\"default\":{\"default\":\"operador integral para cuaterniones\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A18\",\"mappings\":{\"default\":{\"default\":\"integral con Times Sign\"}}},{\"category\":\"Sm\",\"key\":\"2A19\",\"mappings\":{\"default\":{\"default\":\"integral con Intersección\"}}},{\"category\":\"Sm\",\"key\":\"2A1A\",\"mappings\":{\"default\":{\"default\":\"integral con union\"}}},{\"category\":\"Sm\",\"key\":\"2A1B\",\"mappings\":{\"default\":{\"default\":\"integral con Overbar\"}}},{\"category\":\"Sm\",\"key\":\"2A1C\",\"mappings\":{\"default\":{\"default\":\"integral con barra inferior\"}}},{\"category\":\"Sm\",\"key\":\"2A1D\",\"mappings\":{\"default\":{\"default\":\"unirse\"}}},{\"category\":\"Sm\",\"key\":\"2A1E\",\"mappings\":{\"default\":{\"default\":\"operador de triángulo izquierdo grande\"}}},{\"category\":\"Sm\",\"key\":\"2A1F\",\"mappings\":{\"default\":{\"default\":\"composición de esquemas de notación Z\"}}},{\"category\":\"Sm\",\"key\":\"2A20\",\"mappings\":{\"default\":{\"default\":\"esquema de notación Z\"}}},{\"category\":\"Sm\",\"key\":\"2A21\",\"mappings\":{\"default\":{\"default\":\"proyección del esquema de notación Z\"}}},{\"key\":\"2A22\",\"mappings\":{\"default\":{\"default\":\"más con círculo\"}},\"category\":\"Sm\"},{\"key\":\"2A23\",\"mappings\":{\"default\":{\"default\":\"más con ángulo\"}},\"category\":\"Sm\"},{\"key\":\"2A24\",\"mappings\":{\"default\":{\"default\":\"tilde con más suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2A25\",\"mappings\":{\"default\":{\"default\":\"más con punto inferior\"}},\"category\":\"Sm\"},{\"key\":\"2A26\",\"mappings\":{\"default\":{\"default\":\"tilde con más\"}},\"category\":\"Sm\"},{\"key\":\"2A27\",\"mappings\":{\"default\":{\"default\":\"más con 2 suscrito\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A28\",\"mappings\":{\"default\":{\"default\":\"signo más con triángulo negro\"}}},{\"key\":\"2A29\",\"mappings\":{\"default\":{\"default\":\"menos con coma\"}},\"category\":\"Sm\"},{\"key\":\"2A2A\",\"mappings\":{\"default\":{\"default\":\"menos con punto inferior\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A2B\",\"mappings\":{\"default\":{\"default\":\"signo menos con puntos que caen\"}}},{\"category\":\"Sm\",\"key\":\"2A2C\",\"mappings\":{\"default\":{\"default\":\"signo menos con puntos crecientes\"}}},{\"key\":\"2A2D\",\"mappings\":{\"default\":{\"default\":\"más en semicírculo izquierdo\"}},\"category\":\"Sm\"},{\"key\":\"2A2E\",\"mappings\":{\"default\":{\"default\":\"más en semicírculo derecho\"}},\"category\":\"Sm\"},{\"key\":\"2A2F\",\"mappings\":{\"default\":{\"default\":\"producto vectorial\"}},\"category\":\"Sm\"},{\"key\":\"2A30\",\"mappings\":{\"default\":{\"default\":\"por con punto\"}},\"category\":\"Sm\"},{\"key\":\"2A31\",\"mappings\":{\"default\":{\"default\":\"por con subrayado\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A32\",\"mappings\":{\"default\":{\"default\":\"producto semidirecto con fondo cerrado\"}}},{\"key\":\"2A33\",\"mappings\":{\"default\":{\"default\":\"smash product\"}},\"category\":\"Sm\"},{\"key\":\"2A34\",\"mappings\":{\"default\":{\"default\":\"por en semicírculo izquierdo\"}},\"category\":\"Sm\"},{\"key\":\"2A35\",\"mappings\":{\"default\":{\"default\":\"por en semicírculo derecho\"}},\"category\":\"Sm\"},{\"key\":\"2A36\",\"mappings\":{\"default\":{\"default\":\"por en círculo con ángulo\"}},\"category\":\"Sm\"},{\"key\":\"2A37\",\"mappings\":{\"default\":{\"default\":\"por en anillo\"}},\"category\":\"Sm\"},{\"key\":\"2A38\",\"mappings\":{\"default\":{\"default\":\"división en círculo\"}},\"category\":\"Sm\"},{\"key\":\"2A39\",\"mappings\":{\"default\":{\"default\":\"más en triángulo\"}},\"category\":\"Sm\"},{\"key\":\"2A3A\",\"mappings\":{\"default\":{\"default\":\"menos en triángulo\"}},\"category\":\"Sm\"},{\"key\":\"2A3B\",\"mappings\":{\"default\":{\"default\":\"por en triángulo\"}},\"category\":\"Sm\"},{\"key\":\"2A3C\",\"mappings\":{\"default\":{\"default\":\"producto interior\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A3D\",\"mappings\":{\"default\":{\"default\":\"producto interior derecho\"}}},{\"category\":\"Sm\",\"key\":\"2A3E\",\"mappings\":{\"default\":{\"default\":\"notación Z Composición Relacional\"}}},{\"key\":\"2A3F\",\"mappings\":{\"default\":{\"default\":\"coproducto\"}},\"category\":\"Sm\"},{\"key\":\"2A40\",\"mappings\":{\"default\":{\"default\":\"intersección con punto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A41\",\"mappings\":{\"default\":{\"default\":\"unión con signo de menos\"}}},{\"key\":\"2A42\",\"mappings\":{\"default\":{\"default\":\"unión con barra\"}},\"category\":\"Sm\"},{\"key\":\"2A43\",\"mappings\":{\"default\":{\"default\":\"intersección con barra\"}},\"category\":\"Sm\"},{\"key\":\"2A44\",\"mappings\":{\"default\":{\"default\":\"intersección con and\"}},\"category\":\"Sm\"},{\"key\":\"2A45\",\"mappings\":{\"default\":{\"default\":\"unión con or\"}},\"category\":\"Sm\"},{\"key\":\"2A46\",\"mappings\":{\"default\":{\"default\":\"unión sobre intersección\"}},\"category\":\"Sm\"},{\"key\":\"2A47\",\"mappings\":{\"default\":{\"default\":\"intersección sobre unión\"}},\"category\":\"Sm\"},{\"key\":\"2A48\",\"mappings\":{\"default\":{\"default\":\"unión sobre barra, sobre intersección\"}},\"category\":\"Sm\"},{\"key\":\"2A49\",\"mappings\":{\"default\":{\"default\":\"intersección sobre barra, sobre unión \"}},\"category\":\"Sm\"},{\"key\":\"2A4A\",\"mappings\":{\"default\":{\"default\":\"unión y unión\"}},\"category\":\"Sm\"},{\"key\":\"2A4B\",\"mappings\":{\"default\":{\"default\":\"intersección e intersección\"}},\"category\":\"Sm\"},{\"key\":\"2A4C\",\"mappings\":{\"default\":{\"default\":\"unión cerrada\"}},\"category\":\"Sm\"},{\"key\":\"2A4D\",\"mappings\":{\"default\":{\"default\":\"intersección cerrada\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A4E\",\"mappings\":{\"default\":{\"default\":\"intersección cuadrada doble\"}}},{\"category\":\"Sm\",\"key\":\"2A4F\",\"mappings\":{\"default\":{\"default\":\"unión cuadrada doble\"}}},{\"key\":\"2A50\",\"mappings\":{\"default\":{\"default\":\"unión cerrada con por\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A51\",\"mappings\":{\"default\":{\"default\":\"lógico y con punto arriba.\"}}},{\"category\":\"Sm\",\"key\":\"2A52\",\"mappings\":{\"default\":{\"default\":\"lógico o con punto arriba\"}}},{\"key\":\"2A53\",\"mappings\":{\"default\":{\"default\":\"y\"}},\"category\":\"Sm\"},{\"key\":\"2A54\",\"mappings\":{\"default\":{\"default\":\"o\"}},\"category\":\"Sm\"},{\"key\":\"2A55\",\"mappings\":{\"default\":{\"default\":\"two intersecting logical and\"}},\"category\":\"Sm\"},{\"key\":\"2A56\",\"mappings\":{\"default\":{\"default\":\"two intersecting logical or\"}},\"category\":\"Sm\"},{\"key\":\"2A57\",\"mappings\":{\"default\":{\"default\":\"sloping large or\"}},\"category\":\"Sm\"},{\"key\":\"2A58\",\"mappings\":{\"default\":{\"default\":\"sloping large and\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A59\",\"mappings\":{\"default\":{\"default\":\"lógica o superpuesta, lógica y\"}}},{\"key\":\"2A5A\",\"mappings\":{\"default\":{\"default\":\"logical and with middle stem\"}},\"category\":\"Sm\"},{\"key\":\"2A5B\",\"mappings\":{\"default\":{\"default\":\"logical or with middle stem\"}},\"category\":\"Sm\"},{\"key\":\"2A5C\",\"mappings\":{\"default\":{\"default\":\"logical and with horizontal dash\"}},\"category\":\"Sm\"},{\"key\":\"2A5D\",\"mappings\":{\"default\":{\"default\":\"logical or with horizontal dash\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A5E\",\"mappings\":{\"default\":{\"default\":\"lógica y con doble Overbar\"}}},{\"key\":\"2A5F\",\"mappings\":{\"default\":{\"default\":\"logical and with underbar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A60\",\"mappings\":{\"default\":{\"default\":\"lógica y con doble barra inferior.\"}}},{\"category\":\"Sm\",\"key\":\"2A61\",\"mappings\":{\"default\":{\"default\":\"pequeño Vee con Underbar\"}}},{\"category\":\"Sm\",\"key\":\"2A62\",\"mappings\":{\"default\":{\"default\":\"lógica o con doble barra.\"}}},{\"category\":\"Sm\",\"key\":\"2A63\",\"mappings\":{\"default\":{\"default\":\"lógica o con doble barra inferior\"}}},{\"category\":\"Sm\",\"key\":\"2A64\",\"mappings\":{\"default\":{\"default\":\"notación Z Dominio Antirestricción\"}}},{\"category\":\"Sm\",\"key\":\"2A65\",\"mappings\":{\"default\":{\"default\":\"rango de notación Z Antirestricción\"}}},{\"key\":\"2A66\",\"mappings\":{\"default\":{\"default\":\"igual con punto suscrito\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A67\",\"mappings\":{\"default\":{\"default\":\"idéntico con punto arriba\"}}},{\"category\":\"Sm\",\"key\":\"2A68\",\"mappings\":{\"default\":{\"default\":\"triple barra horizontal con doble movimiento vertical\"}}},{\"category\":\"Sm\",\"key\":\"2A69\",\"mappings\":{\"default\":{\"default\":\"triple barra horizontal con triple movimiento vertical\"}}},{\"key\":\"2A6A\",\"mappings\":{\"default\":{\"default\":\"tilde con punto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A6B\",\"mappings\":{\"default\":{\"default\":\"operador de tilde con puntos crecientes\"}}},{\"category\":\"Sm\",\"key\":\"2A6C\",\"mappings\":{\"default\":{\"default\":\"similares menos similares\"}}},{\"key\":\"2A6D\",\"mappings\":{\"default\":{\"default\":\"congruente con punto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A6E\",\"mappings\":{\"default\":{\"default\":\"igual a Asterisco\"}}},{\"key\":\"2A6F\",\"mappings\":{\"default\":{\"default\":\"casi igual con ángulo\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A70\",\"mappings\":{\"default\":{\"default\":\"aproximadamente igual o igual a\"}}},{\"key\":\"2A71\",\"mappings\":{\"default\":{\"default\":\"igual con más suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2A72\",\"mappings\":{\"default\":{\"default\":\"igual con más\"}},\"category\":\"Sm\"},{\"key\":\"2A73\",\"mappings\":{\"default\":{\"default\":\"igual con operador tilde\"}},\"category\":\"Sm\"},{\"key\":\"2A74\",\"mappings\":{\"default\":{\"default\":\"igual con dos puntos\"}},\"category\":\"Sm\"},{\"key\":\"2A75\",\"mappings\":{\"default\":{\"default\":\"igual doble\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A76\",\"mappings\":{\"default\":{\"default\":\"tres signos de igualdad consecutivos\"}}},{\"key\":\"2A77\",\"mappings\":{\"default\":{\"default\":\"igual entre cuatro puntos\"}},\"category\":\"Sm\"},{\"key\":\"2A78\",\"mappings\":{\"default\":{\"default\":\"equivalente con cuatro puntos\"}},\"category\":\"Sm\"},{\"key\":\"2A79\",\"mappings\":{\"default\":{\"default\":\"menor que con círculo interior\"}},\"category\":\"Sm\"},{\"key\":\"2A7A\",\"mappings\":{\"default\":{\"default\":\"mayor que con círculo interior\"}},\"category\":\"Sm\"},{\"key\":\"2A7B\",\"mappings\":{\"default\":{\"default\":\"menor que con interrogante\"}},\"category\":\"Sm\"},{\"key\":\"2A7C\",\"mappings\":{\"default\":{\"default\":\"mayor que con interrogante\"}},\"category\":\"Sm\"},{\"key\":\"2A7D\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que\"}},\"category\":\"Sm\"},{\"key\":\"2A7E\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2A7F\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que con punto interior\"}},\"category\":\"Sm\"},{\"key\":\"2A80\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que con punto interior\"}},\"category\":\"Sm\"},{\"key\":\"2A81\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que con punto\"}},\"category\":\"Sm\"},{\"key\":\"2A82\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que con punto\"}},\"category\":\"Sm\"},{\"key\":\"2A83\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que con punto\"}},\"category\":\"Sm\"},{\"key\":\"2A84\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que con punto\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A85\",\"mappings\":{\"default\":{\"default\":\"menor que o aproximado\"}}},{\"category\":\"Sm\",\"key\":\"2A86\",\"mappings\":{\"default\":{\"default\":\"mayor que o aproximado\"}}},{\"category\":\"Sm\",\"key\":\"2A87\",\"mappings\":{\"default\":{\"default\":\"menor que una línea no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2A88\",\"mappings\":{\"default\":{\"default\":\"mayores y una sola línea no son iguales a\"}}},{\"key\":\"2A89\",\"mappings\":{\"default\":{\"default\":\"menor que, pero no aproximado a\"}},\"category\":\"Sm\"},{\"key\":\"2A8A\",\"mappings\":{\"default\":{\"default\":\"mayor que, pero no aproximado a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A8B\",\"mappings\":{\"default\":{\"default\":\"menos que arriba de la doble línea igual por encima de mayor que\"}}},{\"category\":\"Sm\",\"key\":\"2A8C\",\"mappings\":{\"default\":{\"default\":\"más que arriba de la línea doble igual sobre menos que\"}}},{\"key\":\"2A8D\",\"mappings\":{\"default\":{\"default\":\"menor, similar o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2A8E\",\"mappings\":{\"default\":{\"default\":\"mayor, similar o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2A8F\",\"mappings\":{\"default\":{\"default\":\"menor, similar o mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2A90\",\"mappings\":{\"default\":{\"default\":\"mayor, similar o menor que\"}},\"category\":\"Sm\"},{\"key\":\"2A91\",\"mappings\":{\"default\":{\"default\":\"menor, mayor o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2A92\",\"mappings\":{\"default\":{\"default\":\"mayor, menor o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2A93\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor o mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2A94\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor o menor que\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A95\",\"mappings\":{\"default\":{\"default\":\"inclinado igual o menor que\"}}},{\"category\":\"Sm\",\"key\":\"2A96\",\"mappings\":{\"default\":{\"default\":\"inclinado igual o mayor que\"}}},{\"key\":\"2A97\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que con punto interior\"}},\"category\":\"Sm\"},{\"key\":\"2A98\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que con punto interior\"}},\"category\":\"Sm\"},{\"key\":\"2A99\",\"mappings\":{\"default\":{\"default\":\"menor o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2A9A\",\"mappings\":{\"default\":{\"default\":\"mayor o igual a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A9B\",\"mappings\":{\"default\":{\"default\":\"doble línea inclinada igual o menor que\"}}},{\"category\":\"Sm\",\"key\":\"2A9C\",\"mappings\":{\"default\":{\"default\":\"doble línea inclinada igual o mayor que\"}}},{\"key\":\"2A9D\",\"mappings\":{\"default\":{\"default\":\"equivalente o menor que\"}},\"category\":\"Sm\"},{\"key\":\"2A9E\",\"mappings\":{\"default\":{\"default\":\"mayor o similar a\"}},\"category\":\"Sm\"},{\"key\":\"2A9F\",\"mappings\":{\"default\":{\"default\":\"similar, menor o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AA0\",\"mappings\":{\"default\":{\"default\":\"similar, mayor o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AA1\",\"mappings\":{\"default\":{\"default\":\"mucho menor que\"}},\"category\":\"Sm\"},{\"key\":\"2AA2\",\"mappings\":{\"default\":{\"default\":\"mucho mayor que\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AA3\",\"mappings\":{\"default\":{\"default\":\"doble anidada menor que con barra inferior\"}}},{\"key\":\"2AA4\",\"mappings\":{\"default\":{\"default\":\"menor que, mayor que\"}},\"category\":\"Sm\"},{\"key\":\"2AA5\",\"mappings\":{\"default\":{\"default\":\"mayor o menor que\"}},\"category\":\"Sm\"},{\"key\":\"2AA6\",\"mappings\":{\"default\":{\"default\":\"menor que cerrado con curva\"}},\"category\":\"Sm\"},{\"key\":\"2AA7\",\"mappings\":{\"default\":{\"default\":\"mayor que cerrado con curva\"}},\"category\":\"Sm\"},{\"key\":\"2AA8\",\"mappings\":{\"default\":{\"default\":\"estrictamente menor que cerrado con curva\"}},\"category\":\"Sm\"},{\"key\":\"2AA9\",\"mappings\":{\"default\":{\"default\":\"estrictamente mayor que cerrado con curva\"}},\"category\":\"Sm\"},{\"key\":\"2AAA\",\"mappings\":{\"default\":{\"default\":\"más reducido que\"}},\"category\":\"Sm\"},{\"key\":\"2AAB\",\"mappings\":{\"default\":{\"default\":\"más amplio que\"}},\"category\":\"Sm\"},{\"key\":\"2AAC\",\"mappings\":{\"default\":{\"default\":\"más reducido o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AAD\",\"mappings\":{\"default\":{\"default\":\"más amplio o igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AAE\",\"mappings\":{\"default\":{\"default\":\"diferencia entre\"}},\"category\":\"Sm\"},{\"key\":\"2AAF\",\"mappings\":{\"default\":{\"default\":\"precede o es igual a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AB0\",\"mappings\":{\"default\":{\"default\":\"sucede por encima de la línea de igual signo\"}}},{\"category\":\"Sm\",\"key\":\"2AB1\",\"mappings\":{\"default\":{\"default\":\"precede por encima de una línea no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AB2\",\"mappings\":{\"default\":{\"default\":\"tiene éxito por encima de una línea no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AB3\",\"mappings\":{\"default\":{\"default\":\"precede arriba del signo igual\"}}},{\"category\":\"Sm\",\"key\":\"2AB4\",\"mappings\":{\"default\":{\"default\":\"sucede por encima del signo igual\"}}},{\"key\":\"2AB5\",\"mappings\":{\"default\":{\"default\":\"precede estrictamente a\"}},\"category\":\"Sm\"},{\"key\":\"2AB6\",\"mappings\":{\"default\":{\"default\":\"sigue estrictamente a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AB7\",\"mappings\":{\"default\":{\"default\":\"precede por encima de casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AB8\",\"mappings\":{\"default\":{\"default\":\"tiene éxito por encima de casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AB9\",\"mappings\":{\"default\":{\"default\":\"precede arriba no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2ABA\",\"mappings\":{\"default\":{\"default\":\"tiene éxito por encima de no casi igual a\"}}},{\"key\":\"2ABB\",\"mappings\":{\"default\":{\"default\":\"precede mucho antes\"}},\"category\":\"Sm\"},{\"key\":\"2ABC\",\"mappings\":{\"default\":{\"default\":\"sigue mucho después\"}},\"category\":\"Sm\"},{\"key\":\"2ABD\",\"mappings\":{\"default\":{\"default\":\"subrelación de\"}},\"category\":\"Sm\"},{\"key\":\"2ABE\",\"mappings\":{\"default\":{\"default\":\"contiene como subrelación a\"}},\"category\":\"Sm\"},{\"key\":\"2ABF\",\"mappings\":{\"default\":{\"default\":\"incluido con más suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2AC0\",\"mappings\":{\"default\":{\"default\":\"contiene con más suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2AC1\",\"mappings\":{\"default\":{\"default\":\"incluido con por suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2AC2\",\"mappings\":{\"default\":{\"default\":\"contiene con por suscrito\"}},\"category\":\"Sm\"},{\"key\":\"2AC3\",\"mappings\":{\"default\":{\"default\":\"incluido con punto o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AC4\",\"mappings\":{\"default\":{\"default\":\"contiene con punto o es igual a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AC5\",\"mappings\":{\"default\":{\"default\":\"subconjunto de signo igual arriba\"}}},{\"category\":\"Sm\",\"key\":\"2AC6\",\"mappings\":{\"default\":{\"default\":\"superconjunto de signo igual arriba\"}}},{\"key\":\"2AC7\",\"mappings\":{\"default\":{\"default\":\"incluido aproximadamente en\"}},\"category\":\"Sm\"},{\"key\":\"2AC8\",\"mappings\":{\"default\":{\"default\":\"contiene aproximadamente a\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AC9\",\"mappings\":{\"default\":{\"default\":\"subconjunto de Arriba Casi Igual a\"}}},{\"category\":\"Sm\",\"key\":\"2ACA\",\"mappings\":{\"default\":{\"default\":\"superconjunto de arriba casi igual a\"}}},{\"category\":\"Sm\",\"key\":\"2ACB\",\"mappings\":{\"default\":{\"default\":\"subconjunto de lo anterior no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2ACC\",\"mappings\":{\"default\":{\"default\":\"superconjunto de arriba no es igual a\"}}},{\"category\":\"Sm\",\"key\":\"2ACD\",\"mappings\":{\"default\":{\"default\":\"operador de caja abierta a la izquierda cuadrada\"}}},{\"category\":\"Sm\",\"key\":\"2ACE\",\"mappings\":{\"default\":{\"default\":\"operador de caja abierta a la derecha cuadrada\"}}},{\"key\":\"2ACF\",\"mappings\":{\"default\":{\"default\":\"incluido con cierre en\"}},\"category\":\"Sm\"},{\"key\":\"2AD0\",\"mappings\":{\"default\":{\"default\":\"contiene al cierre del subconjunto\"}},\"category\":\"Sm\"},{\"key\":\"2AD1\",\"mappings\":{\"default\":{\"default\":\"incluido el cierre o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AD2\",\"mappings\":{\"default\":{\"default\":\"contiene al cierre del subconjunto o es igual a\"}},\"category\":\"Sm\"},{\"key\":\"2AD3\",\"mappings\":{\"default\":{\"default\":\"está incluido o contiene a\"}},\"category\":\"Sm\"},{\"key\":\"2AD4\",\"mappings\":{\"default\":{\"default\":\"contiene o está incluido en\"}},\"category\":\"Sm\"},{\"key\":\"2AD5\",\"mappings\":{\"default\":{\"default\":\"incluido doblemente en\"}},\"category\":\"Sm\"},{\"key\":\"2AD6\",\"mappings\":{\"default\":{\"default\":\"contiene doblemente a\"}},\"category\":\"Sm\"},{\"key\":\"2AD7\",\"mappings\":{\"default\":{\"default\":\"contiene o está incluido en\"}},\"category\":\"Sm\"},{\"key\":\"2AD8\",\"mappings\":{\"default\":{\"default\":\"contiene o está incluido en\"}},\"category\":\"Sm\"},{\"key\":\"2AD9\",\"mappings\":{\"default\":{\"default\":\"perteneciente dirigido hacia abajo\"}},\"category\":\"Sm\"},{\"key\":\"2ADA\",\"mappings\":{\"default\":{\"default\":\"pitchfork with tee top\"}},\"category\":\"Sm\"},{\"key\":\"2ADB\",\"mappings\":{\"default\":{\"default\":\"transversal intersection\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2ADC\",\"mappings\":{\"default\":{\"default\":\"bifurcación\"}}},{\"category\":\"Sm\",\"key\":\"2ADD\",\"mappings\":{\"default\":{\"default\":\"nonforking\"}}},{\"category\":\"Sm\",\"key\":\"2ADE\",\"mappings\":{\"default\":{\"default\":\"tachuela Izquierda Corta\"}}},{\"category\":\"Sm\",\"key\":\"2ADF\",\"mappings\":{\"default\":{\"default\":\"tachuela corta hacia abajo\"}}},{\"category\":\"Sm\",\"key\":\"2AE0\",\"mappings\":{\"default\":{\"default\":\"short Up Tack\"}}},{\"category\":\"Sm\",\"key\":\"2AE1\",\"mappings\":{\"default\":{\"default\":\"perpendicular con s\"}}},{\"category\":\"Sm\",\"key\":\"2AE2\",\"mappings\":{\"default\":{\"default\":\"barra vertical Torniquete a la derecha\"}}},{\"category\":\"Sm\",\"key\":\"2AE3\",\"mappings\":{\"default\":{\"default\":\"barra vertical doble Torniquete izquierdo\"}}},{\"key\":\"2AE4\",\"mappings\":{\"default\":{\"default\":\"double left turnstile vertical bar\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AE5\",\"mappings\":{\"default\":{\"default\":\"doble barra vertical doble torniquete izquierdo\"}}},{\"key\":\"2AE6\",\"mappings\":{\"default\":{\"default\":\"long dash from left member of double vertical\"}},\"category\":\"Sm\"},{\"key\":\"2AE7\",\"mappings\":{\"default\":{\"default\":\"short down tack with overbar\"}},\"category\":\"Sm\"},{\"key\":\"2AE8\",\"mappings\":{\"default\":{\"default\":\"barra con perpendicular\"}},\"category\":\"Sm\"},{\"key\":\"2AE9\",\"mappings\":{\"default\":{\"default\":\"short up tack above short down tack\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AEA\",\"mappings\":{\"default\":{\"default\":\"tachuela doble\"}}},{\"key\":\"2AEB\",\"mappings\":{\"default\":{\"default\":\"double up tack\"}},\"category\":\"Sm\"},{\"key\":\"2AEC\",\"mappings\":{\"default\":{\"default\":\"double stroke not sign\"}},\"category\":\"Sm\"},{\"key\":\"2AED\",\"mappings\":{\"default\":{\"default\":\"reversed double stroke not sign\"}},\"category\":\"Sm\"},{\"key\":\"2AEE\",\"mappings\":{\"default\":{\"default\":\"does not divide with reversed negation slash\"}},\"category\":\"Sm\"},{\"key\":\"2AEF\",\"mappings\":{\"default\":{\"default\":\"barra vertical con círculo\"}},\"category\":\"Sm\"},{\"key\":\"2AF0\",\"mappings\":{\"default\":{\"default\":\"barra con círculo inferior\"}},\"category\":\"Sm\"},{\"key\":\"2AF1\",\"mappings\":{\"default\":{\"default\":\"down tack with circle below\"}},\"category\":\"Sm\"},{\"key\":\"2AF2\",\"mappings\":{\"default\":{\"default\":\"paralela con marca\"}},\"category\":\"Sm\"},{\"key\":\"2AF3\",\"mappings\":{\"default\":{\"default\":\"paralela con tilde\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AF4\",\"mappings\":{\"default\":{\"default\":\"relación binaria de barra vertical triple\"}}},{\"category\":\"Sm\",\"key\":\"2AF5\",\"mappings\":{\"default\":{\"default\":\"barra vertical triple con trazo horizontal\"}}},{\"category\":\"Sm\",\"key\":\"2AF6\",\"mappings\":{\"default\":{\"default\":\"operador Triple Colon\"}}},{\"category\":\"Sm\",\"key\":\"2AF7\",\"mappings\":{\"default\":{\"default\":\"triple anidada menos que\"}}},{\"category\":\"Sm\",\"key\":\"2AF8\",\"mappings\":{\"default\":{\"default\":\"triple anidado mayor que\"}}},{\"category\":\"Sm\",\"key\":\"2AF9\",\"mappings\":{\"default\":{\"default\":\"doble línea inclinada menor o igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AFA\",\"mappings\":{\"default\":{\"default\":\"doble línea inclinada mayor o igual a\"}}},{\"category\":\"Sm\",\"key\":\"2AFB\",\"mappings\":{\"default\":{\"default\":\"relación Binaria Triple Sólida\"}}},{\"category\":\"Sm\",\"key\":\"2AFC\",\"mappings\":{\"default\":{\"default\":\"operador de barra vertical triple grande\"}}},{\"category\":\"Sm\",\"key\":\"2AFD\",\"mappings\":{\"default\":{\"default\":\"operador Doble Sólido\"}}},{\"category\":\"Sm\",\"key\":\"2AFE\",\"mappings\":{\"default\":{\"default\":\"barra vertical blanca\"}}},{\"category\":\"Sm\",\"key\":\"2AFF\",\"mappings\":{\"default\":{\"default\":\"barra vertical blanca N-Ary\"}}},{\"category\":\"Pd\",\"key\":\"301C\",\"mappings\":{\"default\":{\"default\":\"wave Dash\"}}},{\"category\":\"Po\",\"key\":\"FE10\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para coma vertical\"}}},{\"category\":\"Po\",\"key\":\"FE13\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para colon vertical\"}}},{\"category\":\"Po\",\"key\":\"FE14\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para punto y coma vertical\"}}},{\"category\":\"Po\",\"key\":\"FE15\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el signo de exclamación vertical\"}}},{\"category\":\"Po\",\"key\":\"FE16\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para el signo de interrogación vertical\"}}},{\"category\":\"Po\",\"key\":\"FE19\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para elipsis horizontal vertical\"}}},{\"category\":\"Po\",\"key\":\"FE30\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para líder vertical de dos puntos\"}}},{\"category\":\"Pd\",\"key\":\"FE31\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para Vertical Em Dash\"}}},{\"category\":\"Pd\",\"key\":\"FE32\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para Vertical En Dash\"}}},{\"category\":\"Pc\",\"key\":\"FE33\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para línea vertical baja\"}}},{\"category\":\"Pc\",\"key\":\"FE34\",\"mappings\":{\"default\":{\"default\":\"formulario de presentación para línea baja ondulada vertical\"}}},{\"category\":\"Po\",\"key\":\"FE45\",\"mappings\":{\"default\":{\"default\":\"punto de sésamo\"}}},{\"category\":\"Po\",\"key\":\"FE46\",\"mappings\":{\"default\":{\"default\":\"punto de sésamo blanco\"}}},{\"category\":\"Po\",\"key\":\"FE49\",\"mappings\":{\"default\":{\"default\":\"línea discontinua\"}}},{\"category\":\"Po\",\"key\":\"FE4A\",\"mappings\":{\"default\":{\"default\":\"centinela Overline\"}}},{\"category\":\"Po\",\"key\":\"FE4B\",\"mappings\":{\"default\":{\"default\":\"ondulado Overline\"}}},{\"category\":\"Po\",\"key\":\"FE4C\",\"mappings\":{\"default\":{\"default\":\"doble Ondulado Ondulado\"}}},{\"category\":\"Pc\",\"key\":\"FE4D\",\"mappings\":{\"default\":{\"default\":\"línea baja discontinua\"}}},{\"category\":\"Pc\",\"key\":\"FE4E\",\"mappings\":{\"default\":{\"default\":\"línea baja de línea central\"}}},{\"category\":\"Pc\",\"key\":\"FE4F\",\"mappings\":{\"default\":{\"default\":\"línea baja ondulada\"}}},{\"category\":\"Po\",\"key\":\"FE50\",\"mappings\":{\"default\":{\"default\":\"comas pequeñas\"}}},{\"category\":\"Po\",\"key\":\"FE52\",\"mappings\":{\"default\":{\"default\":\"parada completa pequeña\"}}},{\"category\":\"Po\",\"key\":\"FE54\",\"mappings\":{\"default\":{\"default\":\"pequeño punto y coma\"}}},{\"category\":\"Po\",\"key\":\"FE55\",\"mappings\":{\"default\":{\"default\":\"pequeño colon\"}}},{\"category\":\"Po\",\"key\":\"FE56\",\"mappings\":{\"default\":{\"default\":\"pequeño signo de interrogación\"}}},{\"category\":\"Po\",\"key\":\"FE57\",\"mappings\":{\"default\":{\"default\":\"pequeño signo de exclamación\"}}},{\"category\":\"Pd\",\"key\":\"FE58\",\"mappings\":{\"default\":{\"default\":\"pequeño Em Dash\"}}},{\"category\":\"Po\",\"key\":\"FE5F\",\"mappings\":{\"default\":{\"default\":\"signo de número pequeño\"}}},{\"category\":\"Po\",\"key\":\"FE60\",\"mappings\":{\"default\":{\"default\":\"ampersand pequeño\"}}},{\"category\":\"Po\",\"key\":\"FE61\",\"mappings\":{\"default\":{\"default\":\"pequeño asterisco\"}}},{\"category\":\"Sm\",\"key\":\"FE62\",\"mappings\":{\"default\":{\"default\":\"signo más pequeño\"}}},{\"category\":\"Pd\",\"key\":\"FE63\",\"mappings\":{\"default\":{\"default\":\"pequeño guión-menos\"}}},{\"category\":\"Sm\",\"key\":\"FE64\",\"mappings\":{\"default\":{\"default\":\"signo menor que pequeño\"}}},{\"category\":\"Sm\",\"key\":\"FE65\",\"mappings\":{\"default\":{\"default\":\"signo mayor que pequeño\"}}},{\"category\":\"Sm\",\"key\":\"FE66\",\"mappings\":{\"default\":{\"default\":\"signo pequeño igual\"}}},{\"key\":\"FE68\",\"mappings\":{\"default\":{\"default\":\"división entera\"}},\"category\":\"Po\"},{\"category\":\"Sc\",\"key\":\"FE69\",\"mappings\":{\"default\":{\"default\":\"pequeño signo de dólar\"}}},{\"category\":\"Po\",\"key\":\"FE6A\",\"mappings\":{\"default\":{\"default\":\"signo de porcentaje pequeño\"}}},{\"category\":\"Po\",\"key\":\"FE6B\",\"mappings\":{\"default\":{\"default\":\"pequeño comercial en\"}}},{\"category\":\"Po\",\"key\":\"FF01\",\"mappings\":{\"default\":{\"default\":\"signo de exclamación de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF02\",\"mappings\":{\"default\":{\"default\":\"comillas de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF03\",\"mappings\":{\"default\":{\"default\":\"número de signo de ancho completo\"}}},{\"category\":\"Sc\",\"key\":\"FF04\",\"mappings\":{\"default\":{\"default\":\"signo de dólar de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF05\",\"mappings\":{\"default\":{\"default\":\"signo de porcentaje de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF06\",\"mappings\":{\"default\":{\"default\":\"ampersand de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF07\",\"mappings\":{\"default\":{\"default\":\"apóstrofe de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF0A\",\"mappings\":{\"default\":{\"default\":\"asterisco de ancho completo\"}}},{\"category\":\"Sm\",\"key\":\"FF0B\",\"mappings\":{\"default\":{\"default\":\"signo de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF0C\",\"mappings\":{\"default\":{\"default\":\"coma de ancho completo\"}}},{\"category\":\"Pd\",\"key\":\"FF0D\",\"mappings\":{\"default\":{\"default\":\"ancho de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF0E\",\"mappings\":{\"default\":{\"default\":\"fullwidth Full Stop\"}}},{\"category\":\"Po\",\"key\":\"FF0F\",\"mappings\":{\"default\":{\"default\":\"sólido de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF1A\",\"mappings\":{\"default\":{\"default\":\"ancho completo de colon\"}}},{\"category\":\"Po\",\"key\":\"FF1B\",\"mappings\":{\"default\":{\"default\":\"punto y coma de ancho completo\"}}},{\"category\":\"Sm\",\"key\":\"FF1C\",\"mappings\":{\"default\":{\"default\":\"ancho completo menos de la señal\"}}},{\"category\":\"Sm\",\"key\":\"FF1D\",\"mappings\":{\"default\":{\"default\":\"signo de igual ancho completo\"}}},{\"category\":\"Sm\",\"key\":\"FF1E\",\"mappings\":{\"default\":{\"default\":\"ancho completo mayor que el signo\"}}},{\"category\":\"Po\",\"key\":\"FF1F\",\"mappings\":{\"default\":{\"default\":\"signo de interrogación de ancho completo\"}}},{\"category\":\"Po\",\"key\":\"FF20\",\"mappings\":{\"default\":{\"default\":\"comercial de ancho completo en\"}}},{\"category\":\"Po\",\"key\":\"FF3C\",\"mappings\":{\"default\":{\"default\":\"sólido inverso de ancho completo\"}}},{\"category\":\"Sk\",\"key\":\"FF3E\",\"mappings\":{\"default\":{\"default\":\"acento circunflejo de ancho completo\"}}},{\"category\":\"Pc\",\"key\":\"FF3F\",\"mappings\":{\"default\":{\"default\":\"línea baja de ancho completo\"}}},{\"category\":\"Sk\",\"key\":\"FF40\",\"mappings\":{\"default\":{\"default\":\"acento grave de ancho completo\"}}},{\"key\":\"FF5C\",\"mappings\":{\"default\":{\"default\":\"barra vertical\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"FF5E\",\"mappings\":{\"default\":{\"default\":\"tilde de ancho completo\"}}},{\"category\":\"Sc\",\"key\":\"FFE0\",\"mappings\":{\"default\":{\"default\":\"signo de centavo de ancho completo\"}}},{\"category\":\"Sc\",\"key\":\"FFE1\",\"mappings\":{\"default\":{\"default\":\"signo de libra de ancho completo\"}}},{\"category\":\"Sm\",\"key\":\"FFE2\",\"mappings\":{\"default\":{\"default\":\"fullwidth no firmar\"}}},{\"category\":\"Sk\",\"key\":\"FFE3\",\"mappings\":{\"default\":{\"default\":\"ancho completo macron\"}}},{\"category\":\"So\",\"key\":\"FFE4\",\"mappings\":{\"default\":{\"default\":\"barra rota de ancho completo\"}}},{\"category\":\"Sc\",\"key\":\"FFE5\",\"mappings\":{\"default\":{\"default\":\"signo de yen de ancho completo\"}}},{\"category\":\"Sc\",\"key\":\"FFE6\",\"mappings\":{\"default\":{\"default\":\"signo de ancho completo ganado\"}}},{\"category\":\"So\",\"key\":\"FFE8\",\"mappings\":{\"default\":{\"default\":\"formas de ancho medio luz vertical\"}}},{\"category\":\"So\",\"key\":\"FFED\",\"mappings\":{\"default\":{\"default\":\"medio ancho cuadrado negro\"}}},{\"category\":\"So\",\"key\":\"FFEE\",\"mappings\":{\"default\":{\"default\":\"círculo blanco de medio ancho\"}}}]\n,\n\"es/symbols/math_whitespace.js\": \n[{\"locale\":\"es\"},{\"category\":\"Zs\",\"key\":\"0020\",\"mappings\":{\"default\":{\"default\":\"espacio\"}}},{\"key\":\"00A0\",\"mappings\":{\"default\":{\"default\":\" \"}},\"category\":\"Zs\"},{\"key\":\"00AD\",\"mappings\":{\"default\":{\"default\":\"guión corto\"}},\"category\":\"Cf\"},{\"category\":\"Zs\",\"key\":\"2000\",\"mappings\":{\"default\":{\"default\":\"en quad\"}}},{\"category\":\"Zs\",\"key\":\"2001\",\"mappings\":{\"default\":{\"default\":\"em Quad\"}}},{\"key\":\"2002\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2003\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2004\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2005\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"category\":\"Zs\",\"key\":\"2006\",\"mappings\":{\"default\":{\"default\":\"espacio Six-Per-Em\"}}},{\"key\":\"2007\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2008\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2009\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200A\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200B\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"key\":\"200C\",\"mappings\":{\"default\":{\"default\":\"ancho de cero no ensamblador\"}},\"category\":\"Cf\"},{\"key\":\"200D\",\"mappings\":{\"default\":{\"default\":\"ancho de cero ensamblador\"}},\"category\":\"Cf\"},{\"key\":\"200E\",\"mappings\":{\"default\":{\"default\":\"marca de izquierda a derecha\"}},\"category\":\"Cf\"},{\"key\":\"200F\",\"mappings\":{\"default\":{\"default\":\"marca de derecha a izquierda\"}},\"category\":\"Cf\"},{\"category\":\"Zl\",\"key\":\"2028\",\"mappings\":{\"default\":{\"default\":\"separador de linea\"}}},{\"category\":\"Zp\",\"key\":\"2029\",\"mappings\":{\"default\":{\"default\":\"separador de párrafo\"}}},{\"category\":\"Cf\",\"key\":\"202A\",\"mappings\":{\"default\":{\"default\":\"incrustación de izquierda a derecha\"}}},{\"category\":\"Cf\",\"key\":\"202B\",\"mappings\":{\"default\":{\"default\":\"incrustación de derecha a izquierda\"}}},{\"category\":\"Cf\",\"key\":\"202C\",\"mappings\":{\"default\":{\"default\":\"formato direccional pop\"}}},{\"category\":\"Cf\",\"key\":\"202D\",\"mappings\":{\"default\":{\"default\":\"anulación de izquierda a derecha\"}}},{\"category\":\"Cf\",\"key\":\"202E\",\"mappings\":{\"default\":{\"default\":\"anulación de derecha a izquierda\"}}},{\"category\":\"Zs\",\"key\":\"202F\",\"mappings\":{\"default\":{\"default\":\"espacio estrecho sin descanso\"}}},{\"key\":\"205F\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2060\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"key\":\"2061\",\"mappings\":{\"default\":{\"default\":\"de\"}},\"category\":\"Cf\"},{\"key\":\"2062\",\"mappings\":{\"default\":{\"default\":\"por\"}},\"category\":\"Cf\"},{\"key\":\"2063\",\"mappings\":{\"default\":{\"default\":\"coma\"}},\"category\":\"Cf\"},{\"key\":\"2064\",\"mappings\":{\"default\":{\"default\":\"más\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"206A\",\"mappings\":{\"default\":{\"default\":\"inhibir el intercambio simétrico\"}}},{\"category\":\"Cf\",\"key\":\"206B\",\"mappings\":{\"default\":{\"default\":\"activar el intercambio simétrico\"}}},{\"category\":\"Cf\",\"key\":\"206E\",\"mappings\":{\"default\":{\"default\":\"formas de dígitos nacionales\"}}},{\"category\":\"Cf\",\"key\":\"206F\",\"mappings\":{\"default\":{\"default\":\"formas de dígitos nominales\"}}},{\"key\":\"FEFF\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"FFF9\",\"mappings\":{\"default\":{\"default\":\"ancla de anotación interlinear\"}}},{\"category\":\"Cf\",\"key\":\"FFFA\",\"mappings\":{\"default\":{\"default\":\"separador de anotación interlinear\"}}},{\"category\":\"Cf\",\"key\":\"FFFB\",\"mappings\":{\"default\":{\"default\":\"terminador de anotación interlinear\"}}}]\n,\n\"es/symbols/other_stars.js\": \n[{\"locale\":\"es\"},{\"category\":\"So\",\"key\":\"23E8\",\"mappings\":{\"default\":{\"default\":\"símbolo exponente decimal\"}}},{\"key\":\"2605\",\"mappings\":{\"default\":{\"default\":\"estrella rellena\"}},\"category\":\"So\"},{\"key\":\"2606\",\"mappings\":{\"default\":{\"default\":\"estrella vacía\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"26AA\",\"mappings\":{\"default\":{\"default\":\"círculo blanco medio\"}}},{\"category\":\"So\",\"key\":\"26AB\",\"mappings\":{\"default\":{\"default\":\"círculo negro medio\"}}},{\"category\":\"So\",\"key\":\"2705\",\"mappings\":{\"default\":{\"default\":\"marca de verificación pesada blanca\"}}},{\"key\":\"2713\",\"mappings\":{\"default\":{\"default\":\"check mark\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2714\",\"mappings\":{\"default\":{\"default\":\"marca de verificación pesada\"}}},{\"category\":\"So\",\"key\":\"2715\",\"mappings\":{\"default\":{\"default\":\"multiplicación x\"}}},{\"category\":\"So\",\"key\":\"2716\",\"mappings\":{\"default\":{\"default\":\"multiplicación pesada X\"}}},{\"key\":\"2717\",\"mappings\":{\"default\":{\"default\":\"ballot x\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2718\",\"mappings\":{\"default\":{\"default\":\"boleta pesada X\"}}},{\"category\":\"So\",\"key\":\"271B\",\"mappings\":{\"default\":{\"default\":\"centro abierto de la cruz\"}}},{\"category\":\"So\",\"key\":\"271C\",\"mappings\":{\"default\":{\"default\":\"pesado centro abierto cruz\"}}},{\"key\":\"2720\",\"mappings\":{\"default\":{\"default\":\"cruz de Malta\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2721\",\"mappings\":{\"default\":{\"default\":\"estrella de David\"}}},{\"category\":\"So\",\"key\":\"2722\",\"mappings\":{\"default\":{\"default\":\"cuatro asterisco de lágrima\"}}},{\"category\":\"So\",\"key\":\"2723\",\"mappings\":{\"default\":{\"default\":\"cuatro asterisco de globo\"}}},{\"category\":\"So\",\"key\":\"2724\",\"mappings\":{\"default\":{\"default\":\"pesado Cuatro asterisco impulsado por globo\"}}},{\"category\":\"So\",\"key\":\"2725\",\"mappings\":{\"default\":{\"default\":\"cuatro asterisco de club-spoked\"}}},{\"category\":\"So\",\"key\":\"2726\",\"mappings\":{\"default\":{\"default\":\"estrella de cuatro puntas negra\"}}},{\"category\":\"So\",\"key\":\"2727\",\"mappings\":{\"default\":{\"default\":\"estrella blanca de cuatro puntas\"}}},{\"category\":\"So\",\"key\":\"2728\",\"mappings\":{\"default\":{\"default\":\"destellos\"}}},{\"category\":\"So\",\"key\":\"2729\",\"mappings\":{\"default\":{\"default\":\"estrés subrayado estrella blanca\"}}},{\"category\":\"So\",\"key\":\"272A\",\"mappings\":{\"default\":{\"default\":\"estrella blanca circulada\"}}},{\"category\":\"So\",\"key\":\"272B\",\"mappings\":{\"default\":{\"default\":\"centro Abierto Estrella Negra\"}}},{\"category\":\"So\",\"key\":\"272C\",\"mappings\":{\"default\":{\"default\":\"centro negro estrella blanca\"}}},{\"category\":\"So\",\"key\":\"272D\",\"mappings\":{\"default\":{\"default\":\"contorneado negro estrella\"}}},{\"category\":\"So\",\"key\":\"272E\",\"mappings\":{\"default\":{\"default\":\"estrella negra contorneada pesada\"}}},{\"category\":\"So\",\"key\":\"272F\",\"mappings\":{\"default\":{\"default\":\"pinwheel Star\"}}},{\"category\":\"So\",\"key\":\"2730\",\"mappings\":{\"default\":{\"default\":\"estrella blanca sombreada\"}}},{\"category\":\"So\",\"key\":\"2731\",\"mappings\":{\"default\":{\"default\":\"asterisco pesado\"}}},{\"category\":\"So\",\"key\":\"2732\",\"mappings\":{\"default\":{\"default\":\"centro abierto de asterisco\"}}},{\"category\":\"So\",\"key\":\"2733\",\"mappings\":{\"default\":{\"default\":\"ocho asterisco hablado\"}}},{\"category\":\"So\",\"key\":\"2734\",\"mappings\":{\"default\":{\"default\":\"ocho estrellas negras puntiagudas\"}}},{\"category\":\"So\",\"key\":\"2735\",\"mappings\":{\"default\":{\"default\":\"ocho estrellas de molinete en punta\"}}},{\"key\":\"2736\",\"mappings\":{\"default\":{\"default\":\"estrella rellena de seis puntas\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2739\",\"mappings\":{\"default\":{\"default\":\"doce estrellas negras puntiagudas\"}}},{\"category\":\"So\",\"key\":\"273A\",\"mappings\":{\"default\":{\"default\":\"dieciséis asteriscos en punta\"}}},{\"category\":\"So\",\"key\":\"273B\",\"mappings\":{\"default\":{\"default\":\"asterisco con efecto de lágrima\"}}},{\"category\":\"So\",\"key\":\"273C\",\"mappings\":{\"default\":{\"default\":\"centro abierto con asterisco con forma de lágrima\"}}},{\"key\":\"273D\",\"mappings\":{\"default\":{\"default\":\"heavy teardrop spoked asterisk\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"273E\",\"mappings\":{\"default\":{\"default\":\"seis pétalos de florette en blanco y negro\"}}},{\"category\":\"So\",\"key\":\"273F\",\"mappings\":{\"default\":{\"default\":\"florette negro\"}}},{\"category\":\"So\",\"key\":\"2740\",\"mappings\":{\"default\":{\"default\":\"florette blanco\"}}},{\"category\":\"So\",\"key\":\"2741\",\"mappings\":{\"default\":{\"default\":\"ocho Petalled Outlined Black Florette\"}}},{\"category\":\"So\",\"key\":\"2742\",\"mappings\":{\"default\":{\"default\":\"círculo abierto centro ocho estrellas señaladas\"}}},{\"category\":\"So\",\"key\":\"2743\",\"mappings\":{\"default\":{\"default\":\"asterisco pesado del molinillo de viento\"}}},{\"category\":\"So\",\"key\":\"2744\",\"mappings\":{\"default\":{\"default\":\"copo de nieve\"}}},{\"category\":\"So\",\"key\":\"2745\",\"mappings\":{\"default\":{\"default\":\"copo de nieve trifolio apretado\"}}},{\"category\":\"So\",\"key\":\"2746\",\"mappings\":{\"default\":{\"default\":\"copo de nieve pesado de Chevron\"}}},{\"category\":\"So\",\"key\":\"2747\",\"mappings\":{\"default\":{\"default\":\"brillar\"}}},{\"category\":\"So\",\"key\":\"2748\",\"mappings\":{\"default\":{\"default\":\"chispa pesada\"}}},{\"category\":\"So\",\"key\":\"2749\",\"mappings\":{\"default\":{\"default\":\"asterisco de globo\"}}},{\"category\":\"So\",\"key\":\"274A\",\"mappings\":{\"default\":{\"default\":\"ocho asterisco de hélice con efecto de lágrima\"}}},{\"category\":\"So\",\"key\":\"274B\",\"mappings\":{\"default\":{\"default\":\"heavy eight asterisk de hélice en forma de lágrima\"}}},{\"category\":\"So\",\"key\":\"274C\",\"mappings\":{\"default\":{\"default\":\"marca de la cruz\"}}},{\"category\":\"So\",\"key\":\"274D\",\"mappings\":{\"default\":{\"default\":\"círculo blanco sombreado\"}}}]\n,\n\"es/units/energy.js\": \n[{\"locale\":\"es\"},{\"key\":\"W\",\"names\":[\"W\",\"w\"],\"mappings\":{\"default\":{\"default\":\"watt\"}},\"category\":\"energy\"},{\"key\":\"kW\",\"names\":[\"kw\",\"kW\"],\"mappings\":{\"default\":{\"default\":\"kilowatt\"}},\"category\":\"energy\"},{\"key\":\"mW\",\"names\":[\"mw\",\"mW\"],\"mappings\":{\"default\":{\"default\":\"miliwatt\"}},\"category\":\"energy\"},{\"key\":\"kwh\",\"names\":[\"kwh\",\"kWh\"],\"mappings\":{\"default\":{\"default\":\"kilowatt hora\"}},\"category\":\"energy\"},{\"key\":\"J\",\"names\":[\"J\"],\"mappings\":{\"default\":{\"default\":\"Joule\"}},\"category\":\"energy\"},{\"key\":\"N\",\"names\":[\"N\"],\"mappings\":{\"default\":{\"default\":\"Newton\"}},\"category\":\"energy\"},{\"key\":\"A\",\"names\":[\"A\"],\"mappings\":{\"default\":{\"default\":\"Ampere\"}},\"category\":\"energy\"},{\"key\":\"V\",\"names\":[\"V\"],\"mappings\":{\"default\":{\"default\":\"Voltio\"}},\"category\":\"energy\"},{\"key\":\"µΩ\",\"names\":[\"µΩ\"],\"mappings\":{\"default\":{\"default\":\"microohmio\"}},\"category\":\"energy\"},{\"key\":\"mΩ\",\"names\":[\"mΩ\"],\"mappings\":{\"default\":{\"default\":\"miliohmio\"}},\"category\":\"energy\"},{\"key\":\"Ω\",\"names\":[\"Ω\",\"Ohm\"],\"mappings\":{\"default\":{\"default\":\"ohmio\"}},\"category\":\"energy\"},{\"key\":\"kΩ\",\"names\":[\"kΩ\",\"KΩ\"],\"mappings\":{\"default\":{\"default\":\"kiloohmio\"}},\"category\":\"energy\"},{\"key\":\"MΩ\",\"names\":[\"MΩ\"],\"mappings\":{\"default\":{\"default\":\"megaohmio\"}},\"category\":\"energy\"},{\"key\":\"GΩ\",\"names\":[\"GΩ\"],\"mappings\":{\"default\":{\"default\":\"gigaohmio\"}},\"category\":\"energy\"}]\n,\n\"es/units/length.js\": \n[{\"locale\":\"es\"},{\"key\":\"mm\",\"names\":[\"mm\"],\"mappings\":{\"default\":{\"default\":\"milímetro\"}},\"category\":\"length\"},{\"key\":\"cm\",\"names\":[\"cm\"],\"mappings\":{\"default\":{\"default\":\"centímetro\"}},\"category\":\"length\"},{\"key\":\"m\",\"names\":[\"m\"],\"mappings\":{\"default\":{\"default\":\"metro\"}},\"category\":\"length\"},{\"key\":\"km\",\"names\":[\"km\"],\"mappings\":{\"default\":{\"default\":\"kilómetro\"}},\"category\":\"length\"},{\"key\":\"ft\",\"names\":[\"ft\",\"ft.\"],\"mappings\":{\"default\":{\"default\":\"pies\"}},\"category\":\"length\"},{\"key\":\"in\",\"names\":[\"in\",\"in.\"],\"mappings\":{\"default\":{\"default\":\"pulgada\"}},\"category\":\"length\"},{\"key\":\"mi\",\"names\":[\"mi\",\"mi.\"],\"mappings\":{\"default\":{\"default\":\"milla\"}},\"category\":\"length\"},{\"key\":\"yd\",\"names\":[\"yd\",\"yd.\"],\"mappings\":{\"default\":{\"default\":\"yarda\"}},\"category\":\"length\"},{\"key\":\"n.m.\",\"names\":[\"n.m.\"],\"mappings\":{\"default\":{\"default\":\"millas náuticas\"}},\"category\":\"length\"}]\n,\n\"es/units/memory.js\": \n[{\"locale\":\"es\"},{\"key\":\"b\",\"names\":[\"b\"],\"mappings\":{\"default\":{\"default\":\"bit\"}},\"category\":\"memory\"},{\"key\":\"B\",\"names\":[\"B\"],\"mappings\":{\"default\":{\"default\":\"byte\"}},\"category\":\"memory\"},{\"key\":\"KB\",\"names\":[\"KB\"],\"mappings\":{\"default\":{\"default\":\"kilobyte\"}},\"category\":\"memory\"},{\"key\":\"MB\",\"names\":[\"MB\"],\"mappings\":{\"default\":{\"default\":\"megabyte\"}},\"category\":\"memory\"},{\"key\":\"GB\",\"names\":[\"GB\"],\"mappings\":{\"default\":{\"default\":\"gigabyte\"}},\"category\":\"memory\"},{\"key\":\"TB\",\"names\":[\"TB\"],\"mappings\":{\"default\":{\"default\":\"terabyte\"}},\"category\":\"memory\"}]\n,\n\"es/units/other.js\": \n[{\"locale\":\"es\"},{\"key\":\"doz\",\"names\":[\"doz\",\"doz.\",\"dz\",\"dz.\"],\"mappings\":{\"default\":{\"default\":\"docena\"}},\"category\":\"other\"},{\"key\":\"sq\",\"names\":[\"sq\",\"sq.\"],\"mappings\":{\"default\":{\"default\":\"al cuadrado\"}},\"category\":\"other\"},{\"key\":\"ha\",\"names\":[\"ha\"],\"mappings\":{\"default\":{\"default\":\"hectarea\"}},\"category\":\"other\"}]\n,\n\"es/units/speed.js\": \n[{\"locale\":\"es\"},{\"key\":\"kt\",\"names\":[\"kt\",\"kt.\"],\"mappings\":{\"default\":{\"default\":\"nudo\"}},\"category\":\"speed\"},{\"key\":\"mph\",\"names\":[\"mph\"],\"mappings\":{\"default\":{\"default\":\"millas por hora\"}},\"category\":\"speed\"},{\"key\":\"rpm\",\"names\":[\"rpm\"],\"mappings\":{\"default\":{\"default\":\"revoluciones por minuto\"}},\"category\":\"speed\"},{\"key\":\"kmh\",\"names\":[\"kmh\"],\"mappings\":{\"default\":{\"default\":\"kilómetros por hora\"}},\"category\":\"speed\"}]\n,\n\"es/units/temperature.js\": \n[{\"locale\":\"es\"},{\"key\":\"F\",\"names\":[\"F\",\"F.\",\"°F\"],\"mappings\":{\"default\":{\"default\":\"Fahrenheit\"}},\"category\":\"temperature\"},{\"key\":\"C\",\"names\":[\"C\",\"°C\"],\"mappings\":{\"default\":{\"default\":\"centígrados\"}},\"category\":\"temperature\"},{\"key\":\"K\",\"names\":[\"K\",\"°K\"],\"mappings\":{\"default\":{\"default\":\"Kelvin\"}},\"category\":\"temperature\"}]\n,\n\"es/units/time.js\": \n[{\"locale\":\"es\"},{\"key\":\"ns\",\"names\":[\"ns\"],\"mappings\":{\"default\":{\"default\":\"nanosegundos\"}},\"category\":\"time\"},{\"key\":\"µs\",\"names\":[\"µs\"],\"mappings\":{\"default\":{\"default\":\"microsegundos\"}},\"category\":\"time\"},{\"key\":\"ms\",\"names\":[\"ms\"],\"mappings\":{\"default\":{\"default\":\"milisegundos\"}},\"category\":\"time\"},{\"key\":\"s\",\"names\":[\"s\"],\"mappings\":{\"default\":{\"default\":\"segundos\"}},\"category\":\"time\"},{\"key\":\"min\",\"names\":[\"min\"],\"mappings\":{\"default\":{\"default\":\"minutos\"}},\"category\":\"time\"},{\"key\":\"h\",\"names\":[\"h\",\"hr\"],\"mappings\":{\"default\":{\"default\":\"hora\"}},\"category\":\"time\"}]\n,\n\"es/units/volume.js\": \n[{\"locale\":\"es\"},{\"key\":\"bbl\",\"names\":[\"bbl.\",\"bbl\"],\"mappings\":{\"default\":{\"default\":\"barrile\"}},\"category\":\"volume\"},{\"key\":\"cu\",\"names\":[\"cu\",\"cu.\"],\"mappings\":{\"default\":{\"default\":\"cúbico\"}},\"category\":\"volume\"},{\"key\":\"fl. oz.\",\"names\":[\"fl. oz.\"],\"mappings\":{\"default\":{\"default\":\"onzas líquidas\"}},\"category\":\"volume\"},{\"key\":\"gal\",\"names\":[\"gal\",\"gal.\"],\"mappings\":{\"default\":{\"default\":\"galone\"}},\"category\":\"volume\"},{\"key\":\"pt\",\"names\":[\"pt\",\"pt.\"],\"mappings\":{\"default\":{\"default\":\"pinta\"}},\"category\":\"volume\"},{\"key\":\"qt\",\"names\":[\"qt\",\"qt.\"],\"mappings\":{\"default\":{\"default\":\"quart\"}},\"category\":\"volume\"},{\"key\":\"tbsp\",\"names\":[\"tbsp\",\"tbsp.\"],\"mappings\":{\"default\":{\"default\":\"cuchara\"}},\"category\":\"volume\"},{\"key\":\"tsp\",\"names\":[\"tsp\",\"tsp.\"],\"mappings\":{\"default\":{\"default\":\"cucharilla\"}},\"category\":\"volume\"},{\"key\":\"cc\",\"names\":[\"cc\"],\"mappings\":{\"default\":{\"default\":\"centímetros cúbicos\"}},\"category\":\"volume\"},{\"key\":\"kl\",\"names\":[\"kl\"],\"mappings\":{\"default\":{\"default\":\"kilolitro\"}},\"category\":\"volume\"},{\"key\":\"l\",\"names\":[\"l\"],\"mappings\":{\"default\":{\"default\":\"litro\"}},\"category\":\"volume\"},{\"key\":\"ml\",\"names\":[\"ml\"],\"mappings\":{\"default\":{\"default\":\"mililitro\"}},\"category\":\"volume\"}]\n,\n\"es/units/weight.js\": \n[{\"locale\":\"es\"},{\"key\":\"lb\",\"names\":[\"lb\",\"lb.\"],\"mappings\":{\"default\":{\"default\":\"libra\"}},\"category\":\"weight\"},{\"key\":\"LT\",\"names\":[\"LT\",\"L.T.\"],\"mappings\":{\"default\":{\"default\":\"libras imperiales\"}},\"category\":\"weight\"},{\"key\":\"oz\",\"names\":[\"oz\",\"oz.\"],\"mappings\":{\"default\":{\"default\":\"onza\"}},\"category\":\"weight\"},{\"key\":\"µg\",\"names\":[\"µg\",\"mcg\"],\"mappings\":{\"default\":{\"default\":\"microgramo\"}},\"category\":\"weight\"},{\"key\":\"gr\",\"names\":[\"g\",\"gr\"],\"mappings\":{\"default\":{\"default\":\"gramo\"}},\"category\":\"weight\"},{\"key\":\"kg\",\"names\":[\"kg\"],\"mappings\":{\"default\":{\"default\":\"kilogramo\"}},\"category\":\"weight\"},{\"key\":\"mg\",\"names\":[\"mg\"],\"mappings\":{\"default\":{\"default\":\"miligramo\"}},\"category\":\"weight\"},{\"key\":\"t\",\"names\":[\"t\",\"T\"],\"mappings\":{\"default\":{\"default\":\"tonelada\"}},\"category\":\"weight\"}]\n,\n\"nemeth/functions/algebra.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠙⠑⠛\"}},\"key\":\"deg\",\"names\":[\"deg\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠙⠑⠞\"}},\"key\":\"det\",\"names\":[\"det\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠙⠊⠍\"}},\"key\":\"dim\",\"names\":[\"dim\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠓⠕⠍\"}},\"key\":\"hom\",\"names\":[\"hom\",\"Hom\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠅⠑⠗\"}},\"key\":\"ker\",\"names\":[\"ker\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠠⠞⠗\"}},\"key\":\"Tr\",\"names\":[\"Tr\",\"tr\"]}]\n,\n\"nemeth/functions/elementary.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"⠇⠕⠏⠀\"}},\"key\":\"log\",\"names\":[\"log\"]},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"⠇⠝⠀\"}},\"key\":\"ln\",\"names\":[\"ln\"]},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"⠇⠛\"}},\"key\":\"lg\",\"names\":[\"lg\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"⠑⠭⠏\"}},\"key\":\"exp\",\"names\":[\"exp\",\"expt\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"⠛⠉⠙\"}},\"key\":\"gcd\",\"names\":[\"gcd\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"⠇⠉⠍\"}},\"key\":\"lcm\",\"names\":[\"lcm\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠛⠀\"}},\"key\":\"arg\",\"names\":[\"arg\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"⠊⠍\"}},\"key\":\"im\",\"names\":[\"im\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"⠗⠑\"}},\"key\":\"re\",\"names\":[\"re\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠊⠝⠋⠀\"}},\"key\":\"inf\",\"names\":[\"inf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠇⠊⠍\"}},\"key\":\"lim\",\"names\":[\"lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠇⠊⠍⠊⠝⠀⠋\"}},\"key\":\"liminf\",\"names\":[\"lim inf\",\"liminf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠇⠊⠍⠎⠥⠏\"}},\"key\":\"limsup\",\"names\":[\"lim sup\",\"limsup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠍⠁⠭⠀\"}},\"key\":\"max\",\"names\":[\"max\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠍⠊⠝⠀\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠎⠥⠏\"}},\"key\":\"sup\",\"names\":[\"sup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠊⠝⠚⠇⠊⠍\"}},\"key\":\"injlim\",\"names\":[\"injlim\",\"inj lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠏⠗⠕⠚⠇⠊⠍\"}},\"key\":\"projlim\",\"names\":[\"projlim\",\"proj lim\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"⠍⠕⠙\"}},\"key\":\"mod\",\"names\":[\"mod\"]},{\"category\":\"Probability\",\"mappings\":{\"default\":{\"default\":\"⠠⠏⠗\"}},\"key\":\"Pr\",\"names\":[\"Pr\"]}]\n,\n\"nemeth/functions/hyperbolic.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠉⠕⠎⠓⠀\"}},\"key\":\"cosh\",\"names\":[\"cosh\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠉⠕⠞⠓⠀\"}},\"key\":\"coth\",\"names\":[\"coth\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠉⠎⠉⠓⠀\"}},\"key\":\"csch\",\"names\":[\"csch\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠎⠑⠉⠓⠀\"}},\"key\":\"sech\",\"names\":[\"sech\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠎⠊⠝⠓⠀\"}},\"key\":\"sinh\",\"names\":[\"sinh\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠞⠁⠕⠓⠀\"}},\"key\":\"tanh\",\"names\":[\"tanh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠕⠎⠓\"}},\"key\":\"arcosh\",\"names\":[\"arcosh\",\"arccosh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠕⠞⠓\"}},\"key\":\"arcoth\",\"names\":[\"arcoth\",\"arccoth\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠎⠉⠓\"}},\"key\":\"arcsch\",\"names\":[\"arcsch\",\"arccsch\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠎⠑⠉⠓⠀\"}},\"key\":\"arsech\",\"names\":[\"arsech\",\"arcsech\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠎⠊⠝⠓⠀\"}},\"key\":\"arsinh\",\"names\":[\"arsinh\",\"arcsinh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠞⠁⠕⠓⠀\"}},\"key\":\"artanh\",\"names\":[\"artanh\",\"arctanh\"]}]\n,\n\"nemeth/functions/trigonometry.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠉⠕⠎⠀\"}},\"key\":\"cos\",\"names\":[\"cos\",\"cosine\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠉⠕⠞⠀\"}},\"key\":\"cot\",\"names\":[\"cot\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠉⠎⠉⠀\"}},\"key\":\"csc\",\"names\":[\"csc\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠎⠑⠉⠀\"}},\"key\":\"sec\",\"names\":[\"sec\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠎⠊⠝⠀\"}},\"key\":\"sin\",\"names\":[\"sin\",\"sine\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠞⠁⠝⠀\"}},\"key\":\"tan\",\"names\":[\"tan\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠉⠕⠎⠀\"}},\"key\":\"arccos\",\"names\":[\"arccos\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠉⠕⠞⠀\"}},\"key\":\"arccot\",\"names\":[\"arccot\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠉⠎⠉⠀\"}},\"key\":\"arccsc\",\"names\":[\"arccsc\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠎⠑⠉⠀\"}},\"key\":\"arcsec\",\"names\":[\"arcsec\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠎⠊⠝⠀\"}},\"key\":\"arcsin\",\"names\":[\"arcsin\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠞⠁⠝⠀\"}},\"key\":\"arctan\",\"names\":[\"arctan\"]}]\n,\n\"nemeth/symbols/digits_rest.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠲⠼\"}},\"key\":\"00BC\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠆⠼\"}},\"key\":\"00BD\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠒⠌⠲⠼\"}},\"key\":\"00BE\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠶⠼\"}},\"key\":\"2150\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠔⠼\"}},\"key\":\"2151\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠂⠴⠼\"}},\"key\":\"2152\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠒⠼\"}},\"key\":\"2153\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠆⠌⠒⠼\"}},\"key\":\"2154\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠢⠼\"}},\"key\":\"2155\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠆⠌⠢⠼\"}},\"key\":\"2156\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠒⠌⠢⠼\"}},\"key\":\"2157\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠲⠌⠢⠼\"}},\"key\":\"2158\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠖⠼\"}},\"key\":\"2159\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠢⠌⠖⠼\"}},\"key\":\"215A\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠦⠼\"}},\"key\":\"215B\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠒⠌⠦⠼\"}},\"key\":\"215C\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠢⠌⠦⠼\"}},\"key\":\"215D\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠶⠌⠦⠼\"}},\"key\":\"215E\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠼\"}},\"key\":\"215F\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠴⠌⠒⠼\"}},\"key\":\"2189\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠂⠴⠻⠻\"}},\"key\":\"3248\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠆⠴⠻⠻\"}},\"key\":\"3249\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠒⠴⠻⠻\"}},\"key\":\"324A\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠲⠴⠻⠻\"}},\"key\":\"324B\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠢⠴⠻⠻\"}},\"key\":\"324C\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠖⠴⠻⠻\"}},\"key\":\"324D\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠶⠴⠻⠻\"}},\"key\":\"324E\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠦⠴⠻⠻\"}},\"key\":\"324F\"}]\n,\n\"nemeth/symbols/greek-rest.js\": \n[{\"locale\":\"nemeth\"}]\n,\n\"nemeth/symbols/greek-scripts.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"key\":\"1D26\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D27\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D28\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D29\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D2A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠁⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D5E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠢⠑⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D60\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠴⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D66\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠖⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D67\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠶⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D68\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠦⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D69\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠔⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D6A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠁⠄\"}}}]\n,\n\"nemeth/symbols/greek-symbols.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠙⠴⠄\"}},\"key\":\"03D0\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠙⠶⠄\"}},\"key\":\"03D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠋⠖⠄\"}},\"key\":\"03F6\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠙⠶⠉⠁⠄\"}},\"key\":\"1D7CA\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠙⠶⠉⠃⠄\"}},\"key\":\"1D7CB\"}]\n,\n\"nemeth/symbols/hebrew_letters.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠢⠄\"}},\"key\":\"2135\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠖⠄\"}},\"key\":\"2136\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠶⠄\"}},\"key\":\"2137\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠦⠄\"}},\"key\":\"2138\"}]\n,\n\"nemeth/symbols/latin-lower-double-accent.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"key\":\"01D6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"01D8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"01DA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"01DC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"01DF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"01E1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"01ED\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"01FB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"022B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"022D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"0231\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E09\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E15\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E17\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E1D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E2F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E39\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E4D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E4F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E51\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E53\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E5D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E65\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E67\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E69\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E79\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E7B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EA5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EA7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EA9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EAB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EAD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EAF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EB1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EB3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EB5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EB7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EBF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EC1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EC3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EC5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EC7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ED1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ED3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ED5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ED7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ED9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EDB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EDD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EDF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EE1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EE3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EE9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EEB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EED\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EEF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EF1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠂⠄\"}}}]\n,\n\"nemeth/symbols/latin-lower-phonetic.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"key\":\"00F8\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"0111\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0127\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0142\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0167\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0180\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"019B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"01B6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"01BE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"01E5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"01FF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"023C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"0247\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0249\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"024D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"024F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"025F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0268\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"0284\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D13\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D7C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D7D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D7F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E9C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E9D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"018D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E9B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E9F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0138\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"017F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0183\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0185\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0188\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"018C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"0192\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0195\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0199\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"019A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"019E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"01A1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"01A3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"01A5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"01A8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"01AA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"01AB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"01AD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"01B0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"01B4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"01B9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"01BA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"01BD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"01BF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"01C6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"01C9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"01CC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"01E3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"01EF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"01F3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"01DD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"01FD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"021D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"0221\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0223\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0225\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0234\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"0235\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0236\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0238\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"0239\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"023F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0240\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0242\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"024B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"0250\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0251\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0252\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0253\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0254\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"0255\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0256\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0257\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0258\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"0259\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"025A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"025B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"025C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"025D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"025E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"0260\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0261\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0263\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0264\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"0265\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0266\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0267\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0269\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"026B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"026C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"026D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"026E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"026F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0270\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0271\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0272\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0273\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0275\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0277\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0278\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"0279\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"027A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"027B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"027C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"027D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"027E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"027F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0282\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0283\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0285\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0286\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0287\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0288\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"0289\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"028A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"028B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"028C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"028D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"028E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"0290\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0291\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0292\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0293\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0295\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0296\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0297\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0298\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"029A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"029E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D02\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠴⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D08\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠴⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D09\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠴⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D11\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D12\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D14\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D16\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D17\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D1D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D1E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D1F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D24\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D25\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D6B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D6C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D6D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D6E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D6F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D70\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D71\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D72\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D73\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D74\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D75\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D76\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D77\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D79\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D7A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D80\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D81\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D82\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D83\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D84\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D85\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D86\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D87\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D88\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D89\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D90\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D91\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D92\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D93\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D94\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D95\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D96\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D97\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D98\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D99\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D9A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"0149\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"014B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠃⠄\"}}}]\n,\n\"nemeth/symbols/latin-lower-single-accent.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"key\":\"00E0\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E1\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E2\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E3\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E4\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E5\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E7\",\"mappings\":{\"default\":{\"default\":\"⠈⠉\"}}},{\"category\":\"Ll\",\"key\":\"00E8\",\"mappings\":{\"default\":{\"default\":\"⠈⠑\"}}},{\"category\":\"Ll\",\"key\":\"00E9\",\"mappings\":{\"default\":{\"default\":\"⠈⠑\"}}},{\"category\":\"Ll\",\"key\":\"00EA\",\"mappings\":{\"default\":{\"default\":\"⠈⠑\"}}},{\"category\":\"Ll\",\"key\":\"00EB\",\"mappings\":{\"default\":{\"default\":\"⠈⠑\"}}},{\"category\":\"Ll\",\"key\":\"00EC\",\"mappings\":{\"default\":{\"default\":\"⠈⠊\"}}},{\"category\":\"Ll\",\"key\":\"00ED\",\"mappings\":{\"default\":{\"default\":\"⠈⠊\"}}},{\"category\":\"Ll\",\"key\":\"00EE\",\"mappings\":{\"default\":{\"default\":\"⠈⠊\"}}},{\"category\":\"Ll\",\"key\":\"00EF\",\"mappings\":{\"default\":{\"default\":\"⠈⠊\"}}},{\"category\":\"Ll\",\"key\":\"00F1\",\"mappings\":{\"default\":{\"default\":\"⠈⠝\"}}},{\"category\":\"Ll\",\"key\":\"00F2\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"00F3\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"00F4\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"00F5\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"00F6\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"00F9\",\"mappings\":{\"default\":{\"default\":\"⠈⠥\"}}},{\"category\":\"Ll\",\"key\":\"00FA\",\"mappings\":{\"default\":{\"default\":\"⠈⠥\"}}},{\"category\":\"Ll\",\"key\":\"00FB\",\"mappings\":{\"default\":{\"default\":\"⠈⠥\"}}},{\"category\":\"Ll\",\"key\":\"00FC\",\"mappings\":{\"default\":{\"default\":\"⠈⠥\"}}},{\"category\":\"Ll\",\"key\":\"00FD\",\"mappings\":{\"default\":{\"default\":\"⠈⠽\"}}},{\"category\":\"Ll\",\"key\":\"00FF\",\"mappings\":{\"default\":{\"default\":\"⠈⠽\"}}},{\"category\":\"Ll\",\"key\":\"0101\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0103\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0105\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0107\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0109\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"010B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"010D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"010F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0113\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0115\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0117\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0119\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"011B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"011D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"011F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0121\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0123\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0125\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0129\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"012B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"012D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"012F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0131\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0135\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0137\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"013A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"013C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"013E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"0140\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0144\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"0146\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0148\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"014D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"014F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0151\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0155\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0157\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0159\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"015B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"015D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"015F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0161\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0163\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0165\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0169\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"016B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"016D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"016F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0171\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0173\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0175\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0177\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"017A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"017C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"017E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"01CE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"01D0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"01D2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"01D4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"01E7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"01E9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"01EB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"01F0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"01F5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"01F9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"0201\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0203\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0205\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0207\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0209\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"020B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"020D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"020F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0211\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0213\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0215\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0217\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0219\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"021B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"021F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0227\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0229\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"022F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0233\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0237\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E01\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E03\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E05\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E07\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E0B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E0D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E0F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E11\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E13\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E19\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E1B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E1F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E21\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E23\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E25\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E27\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E29\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E2B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E2D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E31\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E33\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E35\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E37\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E3B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E3D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E3F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E41\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E43\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E45\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E47\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E49\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E4B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E55\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E57\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E59\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E5B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E5F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E61\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E63\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E6B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E6D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E6F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E71\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E73\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E75\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E77\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E7D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E7F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E81\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E83\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E85\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E87\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E89\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E8B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E8D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E8F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E91\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E93\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E95\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E96\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E97\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E98\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E99\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E9A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EA1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EA3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EB9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EBB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EBD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EC9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ECB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ECD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ECF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EE5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EE7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EF3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EF5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EF7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EF9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠔⠄\"}}}]\n,\n\"nemeth/symbols/latin-rest.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Mn\",\"key\":\"0363\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠒⠄\"}}},{\"category\":\"Mn\",\"key\":\"0364\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠲⠄\"}}},{\"category\":\"Mn\",\"key\":\"0365\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠢⠄\"}}},{\"category\":\"Mn\",\"key\":\"0366\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠖⠄\"}}},{\"category\":\"Mn\",\"key\":\"0367\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠶⠄\"}}},{\"category\":\"Mn\",\"key\":\"0368\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠦⠄\"}}},{\"category\":\"Mn\",\"key\":\"0369\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠔⠄\"}}},{\"category\":\"Mn\",\"key\":\"036A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠁⠄\"}}},{\"category\":\"Mn\",\"key\":\"036B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠃⠄\"}}},{\"category\":\"Mn\",\"key\":\"036C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠉⠄\"}}},{\"category\":\"Mn\",\"key\":\"036D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠙⠄\"}}},{\"category\":\"Mn\",\"key\":\"036E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠑⠄\"}}},{\"category\":\"Mn\",\"key\":\"036F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠋⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D62\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠆⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D63\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠒⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D64\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠲⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D65\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠢⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DCA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠉⠁⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠒⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠲⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠢⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠖⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠶⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠦⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠔⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠁⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠃⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠉⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠙⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠑⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠋⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠴⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠂⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠆⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠒⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠲⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠢⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠖⠄\"}}},{\"category\":\"Lm\",\"key\":\"2071\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠂⠄\"}}},{\"category\":\"Lm\",\"key\":\"207F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠋⠄\"}}},{\"category\":\"Lm\",\"key\":\"2090\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠴⠄\"}}},{\"category\":\"Lm\",\"key\":\"2091\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠂⠄\"}}},{\"category\":\"Lm\",\"key\":\"2092\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠆⠄\"}}},{\"category\":\"Lm\",\"key\":\"2093\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠒⠄\"}}},{\"category\":\"Lm\",\"key\":\"2094\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠲⠄\"}}},{\"category\":\"Lm\",\"key\":\"2095\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠢⠄\"}}},{\"category\":\"Lm\",\"key\":\"2096\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠖⠄\"}}},{\"category\":\"Lm\",\"key\":\"2097\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠶⠄\"}}},{\"category\":\"Lm\",\"key\":\"2098\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠦⠄\"}}},{\"category\":\"Lm\",\"key\":\"2099\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠔⠄\"}}},{\"category\":\"Lm\",\"key\":\"209A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠁⠄\"}}},{\"category\":\"Lm\",\"key\":\"209B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠃⠄\"}}},{\"category\":\"Lm\",\"key\":\"209C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠉⠄\"}}},{\"category\":\"Lm\",\"key\":\"2C7C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠉⠶⠉⠄\"}}},{\"category\":\"So\",\"key\":\"1F12A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠋⠂⠆⠁⠄\"}}},{\"category\":\"So\",\"key\":\"1F12B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠋⠂⠆⠃⠄\"}}},{\"category\":\"So\",\"key\":\"1F12C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠋⠂⠆⠉⠄\"}}},{\"category\":\"So\",\"key\":\"1F18A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠋⠂⠦⠁⠄\"}}}]\n,\n\"nemeth/symbols/latin-upper-double-accent.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Lu\",\"key\":\"01D5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠢⠄\"}}},{\"category\":\"Lu\",\"key\":\"01D7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠶⠄\"}}},{\"category\":\"Lu\",\"key\":\"01D9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠔⠄\"}}},{\"category\":\"Lu\",\"key\":\"01DB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠃⠄\"}}},{\"category\":\"Lu\",\"key\":\"01DE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"01E0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"01EC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"01FA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"022A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"022C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"0230\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E08\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E14\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E16\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E1C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E2E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E38\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E4C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E4E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E50\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E52\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E5C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E64\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E66\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E68\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E78\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E7A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EA4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EA6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EA8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EAA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EAC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EAE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EB0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EB2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EB4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EB6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EBE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EC0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EC2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EC4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EC6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ED0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ED2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ED4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ED6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ED8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EDA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EDC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EDE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EE0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EE2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EE8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EEA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EEC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EEE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EF0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠴⠄\"}}}]\n,\n\"nemeth/symbols/latin-upper-single-accent.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Lu\",\"key\":\"00C0\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C1\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C2\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C3\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C4\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C5\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C7\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠉\"}}},{\"category\":\"Lu\",\"key\":\"00C8\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠑\"}}},{\"category\":\"Lu\",\"key\":\"00C9\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠑\"}}},{\"category\":\"Lu\",\"key\":\"00CA\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠑\"}}},{\"category\":\"Lu\",\"key\":\"00CB\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠑\"}}},{\"category\":\"Lu\",\"key\":\"00CC\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠊\"}}},{\"category\":\"Lu\",\"key\":\"00CD\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠊\"}}},{\"category\":\"Lu\",\"key\":\"00CE\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠊\"}}},{\"category\":\"Lu\",\"key\":\"00CF\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠊\"}}},{\"category\":\"Lu\",\"key\":\"00D1\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠝\"}}},{\"category\":\"Lu\",\"key\":\"00D2\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠕\"}}},{\"category\":\"Lu\",\"key\":\"00D3\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠕\"}}},{\"category\":\"Lu\",\"key\":\"00D4\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠕\"}}},{\"category\":\"Lu\",\"key\":\"00D5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠙⠢⠄\"}}},{\"category\":\"Lu\",\"key\":\"00D6\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠕\"}}},{\"category\":\"Lu\",\"key\":\"00D9\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠥\"}}},{\"category\":\"Lu\",\"key\":\"00DA\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠥\"}}},{\"category\":\"Lu\",\"key\":\"00DB\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠥\"}}},{\"category\":\"Lu\",\"key\":\"00DC\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠥\"}}},{\"category\":\"Lu\",\"key\":\"00DD\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠽\"}}},{\"category\":\"Lu\",\"key\":\"0100\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0102\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0104\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0106\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0108\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"010A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"010C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"010E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0112\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0114\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0116\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0118\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"011A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"011C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"011E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0120\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0122\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0124\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0128\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"012A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"012C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"012E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0130\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0134\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0136\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0139\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠔⠄\"}}},{\"category\":\"Lu\",\"key\":\"013B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠃⠄\"}}},{\"category\":\"Lu\",\"key\":\"013D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠙⠄\"}}},{\"category\":\"Lu\",\"key\":\"013F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠋⠄\"}}},{\"category\":\"Lu\",\"key\":\"0143\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠒⠄\"}}},{\"category\":\"Lu\",\"key\":\"0145\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠢⠄\"}}},{\"category\":\"Lu\",\"key\":\"0147\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠶⠄\"}}},{\"category\":\"Lu\",\"key\":\"014C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"014E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0150\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0154\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0156\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0158\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"015A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"015C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"015E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0160\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0162\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0164\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0168\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"016A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"016C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"016E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0170\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0172\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0174\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0176\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0178\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"0179\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠔⠄\"}}},{\"category\":\"Lu\",\"key\":\"017B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠃⠄\"}}},{\"category\":\"Lu\",\"key\":\"017D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠙⠄\"}}},{\"category\":\"Lu\",\"key\":\"01CD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠙⠄\"}}},{\"category\":\"Lu\",\"key\":\"01CF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠋⠄\"}}},{\"category\":\"Lu\",\"key\":\"01D1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠂⠄\"}}},{\"category\":\"Lu\",\"key\":\"01D3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠒⠄\"}}},{\"category\":\"Lu\",\"key\":\"01E6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"01E8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"01EA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"01F4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"01F8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"0200\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0202\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0204\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0206\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0208\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"020A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"020C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"020E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0210\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0212\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0214\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0216\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0218\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"021A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"021E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0226\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0228\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"022E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0232\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E00\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E02\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E04\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E06\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E0A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E0C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E0E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E10\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E12\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E18\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E1A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E1E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E20\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E22\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E24\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E26\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E28\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E2A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E2C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E30\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E32\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E34\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E36\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E3A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E3C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E3E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E40\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E42\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E44\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E46\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E48\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E4A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E54\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E56\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E58\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E5A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E5E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E60\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E62\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E6A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E6C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E6E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E70\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E72\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E74\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E76\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E7C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E7E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E80\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E82\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E84\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E86\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E88\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E8A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E8C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E8E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E90\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E92\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E94\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EA0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EA2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EB8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EBA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EBC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EC8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ECA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ECC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ECE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EE4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EE6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EF2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EF4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EF6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EF8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠦⠄\"}}}]\n,\n\"nemeth/symbols/math_angles.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠑⠄\"}},\"key\":\"22BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠶⠉⠄\"}},\"key\":\"237C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠴⠄\"}},\"key\":\"27C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠃⠄\"}},\"key\":\"299B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠉⠄\"}},\"key\":\"299C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠙⠄\"}},\"key\":\"299D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠑⠄\"}},\"key\":\"299E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠋⠄\"}},\"key\":\"299F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠴⠄\"}},\"key\":\"29A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠂⠄\"}},\"key\":\"29A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠆⠄\"}},\"key\":\"29A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠒⠄\"}},\"key\":\"29A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠲⠄\"}},\"key\":\"29A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠢⠄\"}},\"key\":\"29A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠖⠄\"}},\"key\":\"29A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠶⠄\"}},\"key\":\"29A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠦⠄\"}},\"key\":\"29A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠔⠄\"}},\"key\":\"29A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠁⠄\"}},\"key\":\"29AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠃⠄\"}},\"key\":\"29AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠉⠄\"}},\"key\":\"29AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠙⠄\"}},\"key\":\"29AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠑⠄\"}},\"key\":\"29AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠋⠄\"}},\"key\":\"29AF\"}]\n,\n\"nemeth/symbols/math_arrows.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠀\"}},\"key\":\"2190\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠀\"}},\"key\":\"2191\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠕⠀\"}},\"key\":\"2192\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠒⠕⠀\"}},\"key\":\"2193\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠕⠀\"}},\"key\":\"2194\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠩⠪⠒⠒⠕⠀\"}},\"key\":\"2195\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠘⠪⠒⠒⠀\"}},\"key\":\"2196\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠘⠒⠒⠕⠀\"}},\"key\":\"2197\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠰⠒⠒⠕⠀\"}},\"key\":\"2198\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠰⠪⠒⠒⠀\"}},\"key\":\"2199\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠒⠒⠻⠀\"}},\"key\":\"219A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠒⠒⠕⠻⠀\"}},\"key\":\"219B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠔⠒⠢⠀\"}},\"key\":\"219C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠔⠒⠢⠕⠀\"}},\"key\":\"219D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠪⠒⠒⠀\"}},\"key\":\"219E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠕⠀\"}},\"key\":\"219F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠕⠀\"}},\"key\":\"21A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠒⠕⠕⠀\"}},\"key\":\"21A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠠⠽⠀\"}},\"key\":\"21A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠠⠯⠒⠒⠕⠀\"}},\"key\":\"21A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠳⠀\"}},\"key\":\"21A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠳⠒⠒⠕⠀\"}},\"key\":\"21A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠳⠒⠒⠕⠀\"}},\"key\":\"21A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠳⠒⠒⠕⠀\"}},\"key\":\"21A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠳⠒⠕⠀\"}},\"key\":\"21A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠠⠕⠀\"}},\"key\":\"21A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠠⠪⠒⠒⠕⠀\"}},\"key\":\"21AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠨⠡⠀\"}},\"key\":\"21AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠨⠡⠒⠒⠕⠀\"}},\"key\":\"21AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠔⠒⠢⠕⠀\"}},\"key\":\"21AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠒⠒⠕⠀\"}},\"key\":\"21AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠔⠢⠔⠀\"}},\"key\":\"21AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠴⠄\"}},\"key\":\"21B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠂⠄\"}},\"key\":\"21B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠆⠄\"}},\"key\":\"21B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠒⠄\"}},\"key\":\"21B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠠⠳⠒⠒⠕⠀\"}},\"key\":\"21B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠠⠳⠒⠒⠕⠀\"}},\"key\":\"21B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠢⠔⠀⠕⠀\"}},\"key\":\"21B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠢⠀⠔⠀\"}},\"key\":\"21B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠦⠄\"}},\"key\":\"21B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠔⠄\"}},\"key\":\"21B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠢⠔⠕⠀\"}},\"key\":\"21BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠢⠔⠀\"}},\"key\":\"21BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠫⠪⠒⠒⠀\"}},\"key\":\"21C4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠐⠫⠩⠒⠒⠕⠀\"}},\"key\":\"21C5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠫⠒⠒⠕⠀\"}},\"key\":\"21C6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠚⠒⠒⠫⠚⠒⠒⠀\"}},\"key\":\"21C7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠐⠫⠣⠒⠒⠕⠀\"}},\"key\":\"21C8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠫⠒⠒⠕⠀\"}},\"key\":\"21C9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠒⠕⠐⠫⠩⠒⠒⠕⠀\"}},\"key\":\"21CA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠪⠒⠒⠀\"}},\"key\":\"21CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠪⠒⠒⠕⠕⠀\"}},\"key\":\"21CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠒⠒⠕⠕⠀\"}},\"key\":\"21CF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠪⠒⠒⠀\"}},\"key\":\"21D0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠕⠀\"}},\"key\":\"21D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠕⠀\"}},\"key\":\"21D2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠕⠀\"}},\"key\":\"21D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠪⠒⠒⠕⠕⠀\"}},\"key\":\"21D4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠪⠪⠒⠒⠕⠕⠀\"}},\"key\":\"21D5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠘⠪⠪⠒⠒⠀\"}},\"key\":\"21D6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠘⠒⠒⠕⠕⠀\"}},\"key\":\"21D7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠰⠒⠒⠕⠕⠀\"}},\"key\":\"21D8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠰⠪⠪⠒⠒⠀\"}},\"key\":\"21D9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠪⠪⠒⠒⠀\"}},\"key\":\"21DA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠕⠕⠀\"}},\"key\":\"21DB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠢⠤⠔⠒⠢⠀\"}},\"key\":\"21DC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠢⠤⠔⠒⠢⠕⠀\"}},\"key\":\"21DD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠳⠈⠫⠣⠒⠒⠕⠻⠀\"}},\"key\":\"21DE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠳⠈⠫⠩⠒⠒⠕⠻⠀\"}},\"key\":\"21DF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠀⠒⠀\"}},\"key\":\"21E0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠀⠒⠕⠀\"}},\"key\":\"21E1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠀⠒⠕⠀\"}},\"key\":\"21E2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠀⠒⠕⠀\"}},\"key\":\"21E3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠳⠪⠒⠒⠀\"}},\"key\":\"21E4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠳⠀\"}},\"key\":\"21E5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠸⠪⠒⠒⠀\"}},\"key\":\"21E6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠸⠒⠒⠕⠀\"}},\"key\":\"21E7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠸⠒⠒⠕⠀\"}},\"key\":\"21E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠸⠒⠒⠕⠀\"}},\"key\":\"21E9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠁⠄\"}},\"key\":\"21EA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠃⠄\"}},\"key\":\"21EB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠉⠄\"}},\"key\":\"21EC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠙⠄\"}},\"key\":\"21ED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠑⠄\"}},\"key\":\"21EE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠋⠄\"}},\"key\":\"21EF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠋⠴⠄\"}},\"key\":\"21F0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠋⠂⠄\"}},\"key\":\"21F1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠋⠆⠄\"}},\"key\":\"21F2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠸⠪⠒⠒⠕⠀\"}},\"key\":\"21F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠨⠡⠀\"}},\"key\":\"21F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠒⠕⠐⠫⠣⠒⠒⠕⠀\"}},\"key\":\"21F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠫⠒⠒⠕⠫⠒⠒⠕⠀\"}},\"key\":\"21F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠒⠒⠻⠀\"}},\"key\":\"21F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠒⠒⠕⠻⠀\"}},\"key\":\"21F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠒⠒⠕⠀\"}},\"key\":\"21F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠳⠈⠫⠪⠒⠒⠻⠀\"}},\"key\":\"21FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠳⠈⠫⠒⠒⠕⠻⠀\"}},\"key\":\"21FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠳⠈⠫⠪⠒⠒⠕⠀\"}},\"key\":\"21FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠳⠒⠒⠀\"}},\"key\":\"21FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠳⠀\"}},\"key\":\"21FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠳⠒⠒⠳⠀\"}},\"key\":\"21FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠂⠄\"}},\"key\":\"2301\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠒⠄\"}},\"key\":\"2303\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠲⠄\"}},\"key\":\"2304\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠆⠲⠄\"}},\"key\":\"2324\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠦⠃⠄\"}},\"key\":\"238B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠲⠄\"}},\"key\":\"2794\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠦⠄\"}},\"key\":\"2798\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠔⠄\"}},\"key\":\"2799\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠁⠄\"}},\"key\":\"279A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠃⠄\"}},\"key\":\"279B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠉⠄\"}},\"key\":\"279C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠙⠄\"}},\"key\":\"279D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠑⠄\"}},\"key\":\"279E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠋⠄\"}},\"key\":\"279F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠴⠄\"}},\"key\":\"27A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠂⠄\"}},\"key\":\"27A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠆⠄\"}},\"key\":\"27A2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠒⠄\"}},\"key\":\"27A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠲⠄\"}},\"key\":\"27A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠢⠄\"}},\"key\":\"27A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠖⠄\"}},\"key\":\"27A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠶⠄\"}},\"key\":\"27A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠦⠄\"}},\"key\":\"27A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠔⠄\"}},\"key\":\"27A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠁⠄\"}},\"key\":\"27AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠃⠄\"}},\"key\":\"27AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠉⠄\"}},\"key\":\"27AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠙⠄\"}},\"key\":\"27AD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠑⠄\"}},\"key\":\"27AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠋⠄\"}},\"key\":\"27AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠂⠄\"}},\"key\":\"27B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠆⠄\"}},\"key\":\"27B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠒⠄\"}},\"key\":\"27B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠲⠄\"}},\"key\":\"27B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠢⠄\"}},\"key\":\"27B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠖⠄\"}},\"key\":\"27B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠶⠄\"}},\"key\":\"27B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠦⠄\"}},\"key\":\"27B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠔⠄\"}},\"key\":\"27B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠁⠄\"}},\"key\":\"27BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠃⠄\"}},\"key\":\"27BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠉⠄\"}},\"key\":\"27BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠙⠄\"}},\"key\":\"27BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠑⠄\"}},\"key\":\"27BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠴⠄\"}},\"key\":\"27F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠂⠄\"}},\"key\":\"27F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠆⠄\"}},\"key\":\"27F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠒⠄\"}},\"key\":\"27F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠲⠄\"}},\"key\":\"27F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠢⠄\"}},\"key\":\"27F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠖⠄\"}},\"key\":\"27F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠶⠄\"}},\"key\":\"27F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠦⠄\"}},\"key\":\"27F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠔⠄\"}},\"key\":\"27F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠁⠄\"}},\"key\":\"27FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠃⠄\"}},\"key\":\"27FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠉⠄\"}},\"key\":\"27FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠙⠄\"}},\"key\":\"27FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠑⠄\"}},\"key\":\"27FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠋⠄\"}},\"key\":\"27FF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠴⠄\"}},\"key\":\"2900\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠂⠄\"}},\"key\":\"2901\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠆⠄\"}},\"key\":\"2902\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠒⠄\"}},\"key\":\"2903\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠲⠄\"}},\"key\":\"2904\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠢⠄\"}},\"key\":\"2905\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠖⠄\"}},\"key\":\"2906\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠶⠄\"}},\"key\":\"2907\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠦⠄\"}},\"key\":\"2908\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠔⠄\"}},\"key\":\"2909\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠁⠄\"}},\"key\":\"290A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠃⠄\"}},\"key\":\"290B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠉⠄\"}},\"key\":\"290C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠙⠄\"}},\"key\":\"290D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠑⠄\"}},\"key\":\"290E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠋⠄\"}},\"key\":\"290F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠴⠄\"}},\"key\":\"2910\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠂⠄\"}},\"key\":\"2911\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠆⠄\"}},\"key\":\"2912\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠒⠄\"}},\"key\":\"2913\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠲⠄\"}},\"key\":\"2914\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠢⠄\"}},\"key\":\"2915\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠖⠄\"}},\"key\":\"2916\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠶⠄\"}},\"key\":\"2917\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠦⠄\"}},\"key\":\"2918\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠔⠄\"}},\"key\":\"2919\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠁⠄\"}},\"key\":\"291A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠃⠄\"}},\"key\":\"291B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠉⠄\"}},\"key\":\"291C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠙⠄\"}},\"key\":\"291D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠑⠄\"}},\"key\":\"291E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠋⠄\"}},\"key\":\"291F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠴⠄\"}},\"key\":\"2920\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠂⠄\"}},\"key\":\"2921\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠆⠄\"}},\"key\":\"2922\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠒⠄\"}},\"key\":\"2923\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠲⠄\"}},\"key\":\"2924\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠢⠄\"}},\"key\":\"2925\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠖⠄\"}},\"key\":\"2926\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠶⠄\"}},\"key\":\"2927\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠦⠄\"}},\"key\":\"2928\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠔⠄\"}},\"key\":\"2929\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠁⠄\"}},\"key\":\"292A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠙⠄\"}},\"key\":\"292D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠑⠄\"}},\"key\":\"292E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠋⠄\"}},\"key\":\"292F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠴⠄\"}},\"key\":\"2930\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠂⠄\"}},\"key\":\"2931\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠆⠄\"}},\"key\":\"2932\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠒⠄\"}},\"key\":\"2933\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠲⠄\"}},\"key\":\"2934\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠢⠄\"}},\"key\":\"2935\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠖⠄\"}},\"key\":\"2936\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠶⠄\"}},\"key\":\"2937\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠦⠄\"}},\"key\":\"2938\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠔⠄\"}},\"key\":\"2939\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠁⠄\"}},\"key\":\"293A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠃⠄\"}},\"key\":\"293B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠉⠄\"}},\"key\":\"293C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠙⠄\"}},\"key\":\"293D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠑⠄\"}},\"key\":\"293E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠋⠄\"}},\"key\":\"293F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠴⠄\"}},\"key\":\"2940\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠂⠄\"}},\"key\":\"2941\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠆⠄\"}},\"key\":\"2942\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠒⠄\"}},\"key\":\"2943\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠲⠄\"}},\"key\":\"2944\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠢⠄\"}},\"key\":\"2945\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠖⠄\"}},\"key\":\"2946\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠶⠄\"}},\"key\":\"2947\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠦⠄\"}},\"key\":\"2948\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠔⠄\"}},\"key\":\"2949\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠴⠄\"}},\"key\":\"2970\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠂⠄\"}},\"key\":\"2971\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠆⠄\"}},\"key\":\"2972\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠒⠄\"}},\"key\":\"2973\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠲⠄\"}},\"key\":\"2974\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠢⠄\"}},\"key\":\"2975\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠖⠄\"}},\"key\":\"2976\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠶⠄\"}},\"key\":\"2977\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠦⠄\"}},\"key\":\"2978\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠔⠄\"}},\"key\":\"2979\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠁⠄\"}},\"key\":\"297A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠃⠄\"}},\"key\":\"297B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠒⠄\"}},\"key\":\"29B3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠲⠄\"}},\"key\":\"29B4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠙⠄\"}},\"key\":\"29BD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠁⠄\"}},\"key\":\"29EA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠉⠄\"}},\"key\":\"29EC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠙⠄\"}},\"key\":\"29ED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠶⠄\"}},\"key\":\"2A17\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠴⠄\"}},\"key\":\"2B00\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠂⠄\"}},\"key\":\"2B01\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠆⠄\"}},\"key\":\"2B02\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠒⠄\"}},\"key\":\"2B03\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠲⠄\"}},\"key\":\"2B04\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠢⠄\"}},\"key\":\"2B05\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠖⠄\"}},\"key\":\"2B06\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠶⠄\"}},\"key\":\"2B07\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠦⠄\"}},\"key\":\"2B08\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠔⠄\"}},\"key\":\"2B09\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠁⠄\"}},\"key\":\"2B0A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠃⠄\"}},\"key\":\"2B0B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠉⠄\"}},\"key\":\"2B0C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠙⠄\"}},\"key\":\"2B0D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠑⠄\"}},\"key\":\"2B0E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠋⠄\"}},\"key\":\"2B0F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠴⠄\"}},\"key\":\"2B10\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠂⠄\"}},\"key\":\"2B11\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠴⠄\"}},\"key\":\"2B30\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠂⠄\"}},\"key\":\"2B31\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠆⠄\"}},\"key\":\"2B32\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠒⠄\"}},\"key\":\"2B33\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠲⠄\"}},\"key\":\"2B34\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠢⠄\"}},\"key\":\"2B35\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠖⠄\"}},\"key\":\"2B36\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠶⠄\"}},\"key\":\"2B37\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠦⠄\"}},\"key\":\"2B38\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠔⠄\"}},\"key\":\"2B39\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠁⠄\"}},\"key\":\"2B3A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠃⠄\"}},\"key\":\"2B3B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠉⠄\"}},\"key\":\"2B3C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠙⠄\"}},\"key\":\"2B3D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠑⠄\"}},\"key\":\"2B3E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠋⠄\"}},\"key\":\"2B3F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠴⠄\"}},\"key\":\"2B40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠂⠄\"}},\"key\":\"2B41\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠆⠄\"}},\"key\":\"2B42\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠒⠄\"}},\"key\":\"2B43\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠲⠄\"}},\"key\":\"2B44\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠢⠄\"}},\"key\":\"2B45\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠖⠄\"}},\"key\":\"2B46\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠶⠄\"}},\"key\":\"2B47\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠦⠄\"}},\"key\":\"2B48\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠔⠄\"}},\"key\":\"2B49\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠁⠄\"}},\"key\":\"2B4A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠃⠄\"}},\"key\":\"2B4B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠉⠄\"}},\"key\":\"2B4C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠔⠄\"}},\"key\":\"FFE9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠁⠄\"}},\"key\":\"FFEA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠃⠄\"}},\"key\":\"FFEB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠉⠄\"}},\"key\":\"FFEC\"}]\n,\n\"nemeth/symbols/math_characters.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠈⠇\"}},\"key\":\"2113\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠂⠦⠄\"}},\"key\":\"2118\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠉⠄\"}},\"key\":\"213C\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠙⠄\"}},\"key\":\"213D\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠑⠄\"}},\"key\":\"213E\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠋⠄\"}},\"key\":\"213F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠴⠄\"}},\"key\":\"2140\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠢⠄\"}},\"key\":\"2145\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠙\"}},\"key\":\"2146\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠑\"}},\"key\":\"2147\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠦⠄\"}},\"key\":\"2148\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠔⠄\"}},\"key\":\"2149\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠙⠖⠁⠲⠄\"}},\"key\":\"1D6A4\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠙⠖⠁⠢⠄\"}},\"key\":\"1D6A5\"}]\n,\n\"nemeth/symbols/math_delimiters.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠷\"}},\"key\":\"0028\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠾\"}},\"key\":\"0029\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠈⠷\"}},\"key\":\"005B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠈⠾\"}},\"key\":\"005D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠷\"}},\"key\":\"007B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠾\"}},\"key\":\"007D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠢⠄\"}},\"key\":\"2045\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠖⠄\"}},\"key\":\"2046\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠷\"}},\"key\":\"2308\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠾\"}},\"key\":\"2309\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠰⠷\"}},\"key\":\"230A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠰⠾\"}},\"key\":\"230B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠉⠄\"}},\"key\":\"230C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠙⠄\"}},\"key\":\"230D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠑⠄\"}},\"key\":\"230E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠋⠄\"}},\"key\":\"230F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠷\"}},\"key\":\"231C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠾\"}},\"key\":\"231D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠈⠰⠷\"}},\"key\":\"231E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠈⠰⠾\"}},\"key\":\"231F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠆⠴⠄\"}},\"key\":\"2320\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠆⠂⠄\"}},\"key\":\"2321\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠷\"}},\"key\":\"2329\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠾\"}},\"key\":\"232A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠔⠃⠄\"}},\"key\":\"239B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠔⠉⠄\"}},\"key\":\"239C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠔⠙⠄\"}},\"key\":\"239D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠔⠑⠄\"}},\"key\":\"239E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠔⠋⠄\"}},\"key\":\"239F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠴⠄\"}},\"key\":\"23A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠂⠄\"}},\"key\":\"23A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠆⠄\"}},\"key\":\"23A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠒⠄\"}},\"key\":\"23A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠲⠄\"}},\"key\":\"23A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠢⠄\"}},\"key\":\"23A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠖⠄\"}},\"key\":\"23A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠶⠄\"}},\"key\":\"23A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠦⠄\"}},\"key\":\"23A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠔⠄\"}},\"key\":\"23A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠁⠄\"}},\"key\":\"23AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠃⠄\"}},\"key\":\"23AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠉⠄\"}},\"key\":\"23AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠙⠄\"}},\"key\":\"23AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠑⠄\"}},\"key\":\"23AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠋⠄\"}},\"key\":\"23AF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠴⠄\"}},\"key\":\"23B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠂⠄\"}},\"key\":\"23B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠆⠄\"}},\"key\":\"23B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠒⠄\"}},\"key\":\"23B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠲⠄\"}},\"key\":\"23B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠢⠄\"}},\"key\":\"23B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠖⠄\"}},\"key\":\"23B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠶⠄\"}},\"key\":\"23B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠦⠄\"}},\"key\":\"23B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠔⠄\"}},\"key\":\"23B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠙⠉⠄\"}},\"key\":\"23DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠙⠙⠄\"}},\"key\":\"23DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠣⠨⠷\"}},\"key\":\"23DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠣⠨⠾\"}},\"key\":\"23DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠑⠴⠄\"}},\"key\":\"23E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠑⠂⠄\"}},\"key\":\"23E1\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠦⠄\"}},\"key\":\"2768\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠔⠄\"}},\"key\":\"2769\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠁⠄\"}},\"key\":\"276A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠃⠄\"}},\"key\":\"276B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠉⠄\"}},\"key\":\"276C\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠙⠄\"}},\"key\":\"276D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠑⠄\"}},\"key\":\"276E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠋⠄\"}},\"key\":\"276F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠴⠄\"}},\"key\":\"2770\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠂⠄\"}},\"key\":\"2771\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠆⠄\"}},\"key\":\"2772\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠒⠄\"}},\"key\":\"2773\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠲⠄\"}},\"key\":\"2774\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠢⠄\"}},\"key\":\"2775\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠢⠄\"}},\"key\":\"27C5\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠖⠄\"}},\"key\":\"27C6\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠈⠸⠷\"}},\"key\":\"27E6\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠈⠸⠾\"}},\"key\":\"27E7\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠷\"}},\"key\":\"27E8\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠾\"}},\"key\":\"27E9\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠨⠷\"}},\"key\":\"27EA\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠨⠾\"}},\"key\":\"27EB\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠉⠄\"}},\"key\":\"27EC\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠙⠄\"}},\"key\":\"27ED\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠑⠄\"}},\"key\":\"27EE\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠋⠄\"}},\"key\":\"27EF\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠸⠷\"}},\"key\":\"2983\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠸⠾\"}},\"key\":\"2984\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠢⠄\"}},\"key\":\"2985\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠖⠄\"}},\"key\":\"2986\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠶⠄\"}},\"key\":\"2987\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠦⠄\"}},\"key\":\"2988\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠔⠄\"}},\"key\":\"2989\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠁⠄\"}},\"key\":\"298A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠃⠄\"}},\"key\":\"298B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠉⠄\"}},\"key\":\"298C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠙⠄\"}},\"key\":\"298D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠑⠄\"}},\"key\":\"298E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠋⠄\"}},\"key\":\"298F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠴⠄\"}},\"key\":\"2990\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠂⠄\"}},\"key\":\"2991\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠆⠄\"}},\"key\":\"2992\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠒⠄\"}},\"key\":\"2993\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠲⠄\"}},\"key\":\"2994\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠢⠄\"}},\"key\":\"2995\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠖⠄\"}},\"key\":\"2996\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠶⠄\"}},\"key\":\"2997\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠦⠄\"}},\"key\":\"2998\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠦⠄\"}},\"key\":\"29D8\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠔⠄\"}},\"key\":\"29D9\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠁⠄\"}},\"key\":\"29DA\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠃⠄\"}},\"key\":\"29DB\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠉⠄\"}},\"key\":\"29FC\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠙⠄\"}},\"key\":\"29FD\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠆⠄\"}},\"key\":\"2E22\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠒⠄\"}},\"key\":\"2E23\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠲⠄\"}},\"key\":\"2E24\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠢⠄\"}},\"key\":\"2E25\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠖⠄\"}},\"key\":\"2E26\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠶⠄\"}},\"key\":\"2E27\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠦⠄\"}},\"key\":\"2E28\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠔⠄\"}},\"key\":\"2E29\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠷\"}},\"key\":\"3008\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠾\"}},\"key\":\"3009\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠨⠷\"}},\"key\":\"300A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠨⠾\"}},\"key\":\"300B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠷\"}},\"key\":\"300C\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠾\"}},\"key\":\"300D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠴⠑⠄\"}},\"key\":\"300E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠴⠋⠄\"}},\"key\":\"300F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠴⠄\"}},\"key\":\"3010\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠂⠄\"}},\"key\":\"3011\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠲⠄\"}},\"key\":\"3014\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠢⠄\"}},\"key\":\"3015\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠖⠄\"}},\"key\":\"3016\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠶⠄\"}},\"key\":\"3017\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠦⠄\"}},\"key\":\"3018\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠔⠄\"}},\"key\":\"3019\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠁⠄\"}},\"key\":\"301A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠃⠄\"}},\"key\":\"301B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠙⠄\"}},\"key\":\"301D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠑⠄\"}},\"key\":\"301E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠋⠄\"}},\"key\":\"301F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠙⠒⠑⠄\"}},\"key\":\"FD3E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠙⠒⠋⠄\"}},\"key\":\"FD3F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠶⠄\"}},\"key\":\"FE17\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠦⠄\"}},\"key\":\"FE18\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠢⠄\"}},\"key\":\"FE35\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠖⠄\"}},\"key\":\"FE36\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠶⠄\"}},\"key\":\"FE37\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠦⠄\"}},\"key\":\"FE38\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠔⠄\"}},\"key\":\"FE39\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠁⠄\"}},\"key\":\"FE3A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠃⠄\"}},\"key\":\"FE3B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠉⠄\"}},\"key\":\"FE3C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠙⠄\"}},\"key\":\"FE3D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠑⠄\"}},\"key\":\"FE3E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠋⠄\"}},\"key\":\"FE3F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠴⠄\"}},\"key\":\"FE40\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠂⠄\"}},\"key\":\"FE41\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠆⠄\"}},\"key\":\"FE42\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠒⠄\"}},\"key\":\"FE43\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠲⠄\"}},\"key\":\"FE44\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠶⠄\"}},\"key\":\"FE47\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠦⠄\"}},\"key\":\"FE48\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠔⠄\"}},\"key\":\"FE59\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠁⠄\"}},\"key\":\"FE5A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠃⠄\"}},\"key\":\"FE5B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠉⠄\"}},\"key\":\"FE5C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠙⠄\"}},\"key\":\"FE5D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠑⠄\"}},\"key\":\"FE5E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠦⠄\"}},\"key\":\"FF08\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠔⠄\"}},\"key\":\"FF09\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠒⠃⠄\"}},\"key\":\"FF3B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠒⠙⠄\"}},\"key\":\"FF3D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠢⠃⠄\"}},\"key\":\"FF5B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠢⠙⠄\"}},\"key\":\"FF5D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠢⠋⠄\"}},\"key\":\"FF5F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠖⠴⠄\"}},\"key\":\"FF60\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠖⠆⠄\"}},\"key\":\"FF62\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠖⠒⠄\"}},\"key\":\"FF63\"}]\n,\n\"nemeth/symbols/math_geometry.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠴⠄\"}},\"key\":\"2500\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠂⠄\"}},\"key\":\"2501\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠆⠄\"}},\"key\":\"2502\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠒⠄\"}},\"key\":\"2503\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠲⠄\"}},\"key\":\"2504\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠢⠄\"}},\"key\":\"2505\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠖⠄\"}},\"key\":\"2506\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠶⠄\"}},\"key\":\"2507\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠦⠄\"}},\"key\":\"2508\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠔⠄\"}},\"key\":\"2509\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠁⠄\"}},\"key\":\"250A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠃⠄\"}},\"key\":\"250B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠉⠄\"}},\"key\":\"250C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠙⠄\"}},\"key\":\"250D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠑⠄\"}},\"key\":\"250E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠋⠄\"}},\"key\":\"250F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠴⠄\"}},\"key\":\"2510\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠂⠄\"}},\"key\":\"2511\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠆⠄\"}},\"key\":\"2512\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠒⠄\"}},\"key\":\"2513\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠲⠄\"}},\"key\":\"2514\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠢⠄\"}},\"key\":\"2515\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠖⠄\"}},\"key\":\"2516\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠶⠄\"}},\"key\":\"2517\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠦⠄\"}},\"key\":\"2518\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠔⠄\"}},\"key\":\"2519\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠁⠄\"}},\"key\":\"251A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠃⠄\"}},\"key\":\"251B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠉⠄\"}},\"key\":\"251C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠙⠄\"}},\"key\":\"251D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠑⠄\"}},\"key\":\"251E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠋⠄\"}},\"key\":\"251F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠴⠄\"}},\"key\":\"2520\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠂⠄\"}},\"key\":\"2521\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠆⠄\"}},\"key\":\"2522\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠒⠄\"}},\"key\":\"2523\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠲⠄\"}},\"key\":\"2524\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠢⠄\"}},\"key\":\"2525\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠖⠄\"}},\"key\":\"2526\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠶⠄\"}},\"key\":\"2527\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠦⠄\"}},\"key\":\"2528\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠔⠄\"}},\"key\":\"2529\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠁⠄\"}},\"key\":\"252A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠃⠄\"}},\"key\":\"252B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠉⠄\"}},\"key\":\"252C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠙⠄\"}},\"key\":\"252D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠑⠄\"}},\"key\":\"252E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠋⠄\"}},\"key\":\"252F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠴⠄\"}},\"key\":\"2530\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠂⠄\"}},\"key\":\"2531\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠆⠄\"}},\"key\":\"2532\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠒⠄\"}},\"key\":\"2533\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠲⠄\"}},\"key\":\"2534\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠢⠄\"}},\"key\":\"2535\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠖⠄\"}},\"key\":\"2536\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠶⠄\"}},\"key\":\"2537\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠦⠄\"}},\"key\":\"2538\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠔⠄\"}},\"key\":\"2539\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠁⠄\"}},\"key\":\"253A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠃⠄\"}},\"key\":\"253B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠉⠄\"}},\"key\":\"253C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠙⠄\"}},\"key\":\"253D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠑⠄\"}},\"key\":\"253E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠋⠄\"}},\"key\":\"253F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠴⠄\"}},\"key\":\"2540\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠂⠄\"}},\"key\":\"2541\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠆⠄\"}},\"key\":\"2542\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠒⠄\"}},\"key\":\"2543\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠲⠄\"}},\"key\":\"2544\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠢⠄\"}},\"key\":\"2545\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠖⠄\"}},\"key\":\"2546\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠶⠄\"}},\"key\":\"2547\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠦⠄\"}},\"key\":\"2548\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠔⠄\"}},\"key\":\"2549\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠁⠄\"}},\"key\":\"254A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠃⠄\"}},\"key\":\"254B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠉⠄\"}},\"key\":\"254C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠙⠄\"}},\"key\":\"254D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠑⠄\"}},\"key\":\"254E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠋⠄\"}},\"key\":\"254F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠴⠄\"}},\"key\":\"2550\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠂⠄\"}},\"key\":\"2551\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠆⠄\"}},\"key\":\"2552\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠒⠄\"}},\"key\":\"2553\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠲⠄\"}},\"key\":\"2554\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠢⠄\"}},\"key\":\"2555\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠖⠄\"}},\"key\":\"2556\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠶⠄\"}},\"key\":\"2557\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠦⠄\"}},\"key\":\"2558\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠔⠄\"}},\"key\":\"2559\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠁⠄\"}},\"key\":\"255A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠃⠄\"}},\"key\":\"255B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠉⠄\"}},\"key\":\"255C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠙⠄\"}},\"key\":\"255D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠑⠄\"}},\"key\":\"255E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠋⠄\"}},\"key\":\"255F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠴⠄\"}},\"key\":\"2560\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠂⠄\"}},\"key\":\"2561\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠆⠄\"}},\"key\":\"2562\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠒⠄\"}},\"key\":\"2563\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠲⠄\"}},\"key\":\"2564\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠢⠄\"}},\"key\":\"2565\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠖⠄\"}},\"key\":\"2566\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠶⠄\"}},\"key\":\"2567\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠦⠄\"}},\"key\":\"2568\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠔⠄\"}},\"key\":\"2569\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠁⠄\"}},\"key\":\"256A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠃⠄\"}},\"key\":\"256B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠉⠄\"}},\"key\":\"256C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠙⠄\"}},\"key\":\"256D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠑⠄\"}},\"key\":\"256E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠋⠄\"}},\"key\":\"256F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠴⠄\"}},\"key\":\"2570\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠂⠄\"}},\"key\":\"2571\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠆⠄\"}},\"key\":\"2572\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠒⠄\"}},\"key\":\"2573\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠲⠄\"}},\"key\":\"2574\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠢⠄\"}},\"key\":\"2575\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠖⠄\"}},\"key\":\"2576\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠶⠄\"}},\"key\":\"2577\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠦⠄\"}},\"key\":\"2578\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠔⠄\"}},\"key\":\"2579\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠁⠄\"}},\"key\":\"257A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠃⠄\"}},\"key\":\"257B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠉⠄\"}},\"key\":\"257C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠙⠄\"}},\"key\":\"257D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠑⠄\"}},\"key\":\"257E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠋⠄\"}},\"key\":\"257F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠴⠄\"}},\"key\":\"2580\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠂⠄\"}},\"key\":\"2581\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠆⠄\"}},\"key\":\"2582\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠒⠄\"}},\"key\":\"2583\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠲⠄\"}},\"key\":\"2584\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠢⠄\"}},\"key\":\"2585\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠖⠄\"}},\"key\":\"2586\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠶⠄\"}},\"key\":\"2587\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠦⠄\"}},\"key\":\"2588\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠔⠄\"}},\"key\":\"2589\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠁⠄\"}},\"key\":\"258A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠃⠄\"}},\"key\":\"258B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠉⠄\"}},\"key\":\"258C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠙⠄\"}},\"key\":\"258D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠑⠄\"}},\"key\":\"258E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠋⠄\"}},\"key\":\"258F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠴⠄\"}},\"key\":\"2590\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠂⠄\"}},\"key\":\"2591\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠆⠄\"}},\"key\":\"2592\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠒⠄\"}},\"key\":\"2593\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠲⠄\"}},\"key\":\"2594\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠢⠄\"}},\"key\":\"2595\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠖⠄\"}},\"key\":\"2596\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠶⠄\"}},\"key\":\"2597\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠦⠄\"}},\"key\":\"2598\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠔⠄\"}},\"key\":\"2599\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠁⠄\"}},\"key\":\"259A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠃⠄\"}},\"key\":\"259B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠉⠄\"}},\"key\":\"259C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠙⠄\"}},\"key\":\"259D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠑⠄\"}},\"key\":\"259E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠋⠄\"}},\"key\":\"259F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲\"}},\"key\":\"25A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠲\"}},\"key\":\"25A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠆⠄\"}},\"key\":\"25A2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠒⠄\"}},\"key\":\"25A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠲⠄\"}},\"key\":\"25A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠢⠄\"}},\"key\":\"25A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠖⠄\"}},\"key\":\"25A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠶⠄\"}},\"key\":\"25A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠦⠄\"}},\"key\":\"25A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠔⠄\"}},\"key\":\"25A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠁⠄\"}},\"key\":\"25AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠗\"}},\"key\":\"25AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠗\"}},\"key\":\"25AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠙⠄\"}},\"key\":\"25AD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠑⠄\"}},\"key\":\"25AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠋⠄\"}},\"key\":\"25AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠛\"}},\"key\":\"25B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠛\"}},\"key\":\"25B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠞\"}},\"key\":\"25B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠞\"}},\"key\":\"25B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠲⠄\"}},\"key\":\"25B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠢⠄\"}},\"key\":\"25B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠖⠄\"}},\"key\":\"25B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠶⠄\"}},\"key\":\"25B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠦⠄\"}},\"key\":\"25B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠔⠄\"}},\"key\":\"25B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠁⠄\"}},\"key\":\"25BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠃⠄\"}},\"key\":\"25BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠸⠨⠫\"}},\"key\":\"25BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠨⠫\"}},\"key\":\"25BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠑⠄\"}},\"key\":\"25BE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠋⠄\"}},\"key\":\"25BF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠴⠄\"}},\"key\":\"25C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠂⠄\"}},\"key\":\"25C1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠆⠄\"}},\"key\":\"25C2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠒⠄\"}},\"key\":\"25C3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠲⠄\"}},\"key\":\"25C4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠢⠄\"}},\"key\":\"25C5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠖⠄\"}},\"key\":\"25C6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠶⠄\"}},\"key\":\"25C7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠦⠄\"}},\"key\":\"25C8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠔⠄\"}},\"key\":\"25C9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠉\"}},\"key\":\"25CA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠉\"}},\"key\":\"25CB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠉⠄\"}},\"key\":\"25CC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠙⠄\"}},\"key\":\"25CD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠑⠄\"}},\"key\":\"25CE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠋⠄\"}},\"key\":\"25CF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠴⠄\"}},\"key\":\"25D0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠂⠄\"}},\"key\":\"25D1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠆⠄\"}},\"key\":\"25D2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠒⠄\"}},\"key\":\"25D3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠲⠄\"}},\"key\":\"25D4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠢⠄\"}},\"key\":\"25D5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠖⠄\"}},\"key\":\"25D6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠶⠄\"}},\"key\":\"25D7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠦⠄\"}},\"key\":\"25D8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠔⠄\"}},\"key\":\"25D9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠁⠄\"}},\"key\":\"25DA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠃⠄\"}},\"key\":\"25DB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠉⠄\"}},\"key\":\"25DC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠙⠄\"}},\"key\":\"25DD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠑⠄\"}},\"key\":\"25DE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠋⠄\"}},\"key\":\"25DF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠴⠄\"}},\"key\":\"25E0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠂⠄\"}},\"key\":\"25E1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠆⠄\"}},\"key\":\"25E2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠒⠄\"}},\"key\":\"25E3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠲⠄\"}},\"key\":\"25E4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠢⠄\"}},\"key\":\"25E5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠖⠄\"}},\"key\":\"25E6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠶⠄\"}},\"key\":\"25E7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠦⠄\"}},\"key\":\"25E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠔⠄\"}},\"key\":\"25E9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠁⠄\"}},\"key\":\"25EA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠃⠄\"}},\"key\":\"25EB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠉⠄\"}},\"key\":\"25EC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠙⠄\"}},\"key\":\"25ED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠑⠄\"}},\"key\":\"25EE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠋⠄\"}},\"key\":\"25EF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠴⠄\"}},\"key\":\"25F0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠂⠄\"}},\"key\":\"25F1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠆⠄\"}},\"key\":\"25F2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠒⠄\"}},\"key\":\"25F3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠲⠄\"}},\"key\":\"25F4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠢⠄\"}},\"key\":\"25F5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠖⠄\"}},\"key\":\"25F6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠶⠄\"}},\"key\":\"25F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠦⠄\"}},\"key\":\"25F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠔⠄\"}},\"key\":\"25F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠁⠄\"}},\"key\":\"25FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠃⠄\"}},\"key\":\"25FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠉⠄\"}},\"key\":\"25FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠙⠄\"}},\"key\":\"25FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠑⠄\"}},\"key\":\"25FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠋⠄\"}},\"key\":\"25FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠆⠄\"}},\"key\":\"2B12\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠒⠄\"}},\"key\":\"2B13\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠲⠄\"}},\"key\":\"2B14\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠢⠄\"}},\"key\":\"2B15\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠖⠄\"}},\"key\":\"2B16\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠶⠄\"}},\"key\":\"2B17\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠦⠄\"}},\"key\":\"2B18\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠔⠄\"}},\"key\":\"2B19\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠁⠄\"}},\"key\":\"2B1A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠃⠄\"}},\"key\":\"2B1B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠉⠄\"}},\"key\":\"2B1C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠙⠄\"}},\"key\":\"2B1D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠑⠄\"}},\"key\":\"2B1E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠋⠄\"}},\"key\":\"2B1F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠴⠄\"}},\"key\":\"2B20\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠂⠄\"}},\"key\":\"2B21\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠆⠄\"}},\"key\":\"2B22\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠒⠄\"}},\"key\":\"2B23\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠲⠄\"}},\"key\":\"2B24\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠢⠄\"}},\"key\":\"2B25\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠖⠄\"}},\"key\":\"2B26\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠶⠄\"}},\"key\":\"2B27\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠦⠄\"}},\"key\":\"2B28\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠔⠄\"}},\"key\":\"2B29\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠁⠄\"}},\"key\":\"2B2A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠃⠄\"}},\"key\":\"2B2B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠉⠄\"}},\"key\":\"2B2C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠙⠄\"}},\"key\":\"2B2D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠑⠄\"}},\"key\":\"2B2E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠋⠄\"}},\"key\":\"2B2F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠴⠄\"}},\"key\":\"2B50\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠂⠄\"}},\"key\":\"2B51\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠆⠄\"}},\"key\":\"2B52\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠒⠄\"}},\"key\":\"2B53\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠲⠄\"}},\"key\":\"2B54\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠢⠄\"}},\"key\":\"2B55\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠖⠄\"}},\"key\":\"2B56\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠶⠄\"}},\"key\":\"2B57\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠦⠄\"}},\"key\":\"2B58\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠔⠄\"}},\"key\":\"2B59\"}]\n,\n\"nemeth/symbols/math_harpoons.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠈⠪⠒⠒⠀\"}},\"key\":\"21BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠠⠪⠒⠒⠀\"}},\"key\":\"21BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠠⠕⠀\"}},\"key\":\"21BE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠈⠕⠀\"}},\"key\":\"21BF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠈⠕⠀\"}},\"key\":\"21C0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠠⠕⠀\"}},\"key\":\"21C1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠈⠕⠀\"}},\"key\":\"21C2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠒⠠⠕⠀\"}},\"key\":\"21C3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠈⠪⠒⠒⠫⠒⠒⠈⠕⠀\"}},\"key\":\"21CB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠈⠕⠫⠈⠪⠒⠒⠀\"}},\"key\":\"21CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠁⠄\"}},\"key\":\"294A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠃⠄\"}},\"key\":\"294B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠉⠄\"}},\"key\":\"294C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠙⠄\"}},\"key\":\"294D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠑⠄\"}},\"key\":\"294E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠋⠄\"}},\"key\":\"294F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠴⠄\"}},\"key\":\"2950\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠂⠄\"}},\"key\":\"2951\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠆⠄\"}},\"key\":\"2952\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠒⠄\"}},\"key\":\"2953\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠲⠄\"}},\"key\":\"2954\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠢⠄\"}},\"key\":\"2955\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠖⠄\"}},\"key\":\"2956\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠶⠄\"}},\"key\":\"2957\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠦⠄\"}},\"key\":\"2958\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠔⠄\"}},\"key\":\"2959\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠁⠄\"}},\"key\":\"295A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠃⠄\"}},\"key\":\"295B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠉⠄\"}},\"key\":\"295C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠙⠄\"}},\"key\":\"295D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠑⠄\"}},\"key\":\"295E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠋⠄\"}},\"key\":\"295F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠴⠄\"}},\"key\":\"2960\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠂⠄\"}},\"key\":\"2961\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠆⠄\"}},\"key\":\"2962\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠒⠄\"}},\"key\":\"2963\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠲⠄\"}},\"key\":\"2964\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠢⠄\"}},\"key\":\"2965\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠖⠄\"}},\"key\":\"2966\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠶⠄\"}},\"key\":\"2967\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠦⠄\"}},\"key\":\"2968\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠔⠄\"}},\"key\":\"2969\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠁⠄\"}},\"key\":\"296A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠃⠄\"}},\"key\":\"296B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠉⠄\"}},\"key\":\"296C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠙⠄\"}},\"key\":\"296D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠑⠄\"}},\"key\":\"296E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠋⠄\"}},\"key\":\"296F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠉⠄\"}},\"key\":\"297C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠙⠄\"}},\"key\":\"297D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠑⠄\"}},\"key\":\"297E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠋⠄\"}},\"key\":\"297F\"}]\n,\n\"nemeth/symbols/math_non_characters.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠴⠋⠄\"}},\"key\":\"210F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠳\"}},\"key\":\"2114\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠂⠖⠄\"}},\"key\":\"2116\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠂⠶⠄\"}},\"key\":\"2117\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠂⠑⠄\"}},\"key\":\"211E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠂⠋⠄\"}},\"key\":\"211F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠴⠄\"}},\"key\":\"2120\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠂⠄\"}},\"key\":\"2121\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠘⠞\"}},\"key\":\"2122\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠒⠄\"}},\"key\":\"2123\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠢⠄\"}},\"key\":\"2125\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠖⠄\"}},\"key\":\"2126\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠶⠄\"}},\"key\":\"2127\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠁⠄\"}},\"key\":\"212A\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠠⠁\"}},\"key\":\"212B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠑⠄\"}},\"key\":\"212E\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠆⠄\"}},\"key\":\"2132\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠔⠄\"}},\"key\":\"2139\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠁⠄\"}},\"key\":\"213A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠃⠄\"}},\"key\":\"213B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠂⠄\"}},\"key\":\"2141\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠆⠄\"}},\"key\":\"2142\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠒⠄\"}},\"key\":\"2143\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠲⠄\"}},\"key\":\"2144\"}]\n,\n\"nemeth/symbols/math_symbols.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠖\"}},\"key\":\"0021\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠹\"}},\"key\":\"0022\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠨⠼\"}},\"key\":\"0023\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠈⠎\"}},\"key\":\"0024\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠈⠴\"}},\"key\":\"0025\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠯\"}},\"key\":\"0026\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄\"}},\"key\":\"0027\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠈⠼\"}},\"key\":\"002A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠬\"}},\"key\":\"002B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠠\",\"defaultLibLouis\":\"⠠⠀\"}},\"key\":\"002C\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤\"}},\"key\":\"002D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠨\",\"other\":\"⠲\"}},\"key\":\"002E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠌\"}},\"key\":\"002F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠒\"}},\"key\":\"003A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠆\"}},\"key\":\"003B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠀\"}},\"key\":\"003C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠅⠀\"}},\"key\":\"003D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠀\"}},\"key\":\"003E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠦\"}},\"key\":\"003F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}},\"key\":\"0040\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠡\"}},\"key\":\"005C\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⡘\"}},\"key\":\"005E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠸\"}},\"key\":\"005F\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠈\"}},\"key\":\"0060\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠳\"}},\"key\":\"007C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠱\"}},\"key\":\"007E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠖\"}},\"key\":\"00A1\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠈⠉\"}},\"key\":\"00A2\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠼\"}},\"key\":\"00A3\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠫\"}},\"key\":\"00A4\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠁⠢⠄\"}},\"key\":\"00A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠸⠳\"}},\"key\":\"00A6\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠈⠠⠎\"}},\"key\":\"00A7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠁⠦⠄\"}},\"key\":\"00A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠘⠉\"}},\"key\":\"00A9\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠁⠁⠄\"}},\"key\":\"00AA\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠁⠃⠄\"}},\"key\":\"00AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠁⠉⠄\"}},\"key\":\"00AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠘⠗\"}},\"key\":\"00AE\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠱\"}},\"key\":\"00AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠘⠨⠡\"}},\"key\":\"00B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠬⠤\"}},\"key\":\"00B1\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠈\"}},\"key\":\"00B4\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠨⠍\"}},\"key\":\"00B5\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠃⠖⠄\"}},\"key\":\"00B6\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠡\"}},\"key\":\"00B7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠃⠦⠄\"}},\"key\":\"00B8\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠃⠁⠄\"}},\"key\":\"00BA\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠃⠃⠄\"}},\"key\":\"00BB\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠦\"}},\"key\":\"00BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠡\"}},\"key\":\"00D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠌\"}},\"key\":\"00F7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠙⠦⠄\"}},\"key\":\"02D8\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠙⠔⠄\"}},\"key\":\"02D9\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠙⠁⠄\"}},\"key\":\"02DA\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠙⠃⠄\"}},\"key\":\"02DB\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠈⠱\"}},\"key\":\"02DC\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠙⠙⠄\"}},\"key\":\"02DD\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤\"}},\"key\":\"2010\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤\"}},\"key\":\"2011\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤⠤\"}},\"key\":\"2012\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤⠤\"}},\"key\":\"2013\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤⠤\"}},\"key\":\"2014\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤⠤\"}},\"key\":\"2015\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠳⠳\"}},\"key\":\"2016\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠂⠶⠄\"}},\"key\":\"2017\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠠⠦\"}},\"key\":\"2018\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"⠄\"}},\"key\":\"2019\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠂⠁⠄\"}},\"key\":\"201A\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠂⠃⠄\"}},\"key\":\"201B\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠦\"}},\"key\":\"201C\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"⠴\"}},\"key\":\"201D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠂⠑⠄\"}},\"key\":\"201E\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠂⠋⠄\"}},\"key\":\"201F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠻\"}},\"key\":\"2020\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠸⠻\"}},\"key\":\"2021\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠔⠔\"}},\"key\":\"2022\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠒⠄\"}},\"key\":\"2023\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄\"}},\"key\":\"2024\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⠄\"}},\"key\":\"2025\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⠄⠄\"}},\"key\":\"2026\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠶⠄\"}},\"key\":\"2027\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠴⠄\"}},\"key\":\"2030\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠂⠄\"}},\"key\":\"2031\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄\"}},\"key\":\"2032\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⠄\"}},\"key\":\"2033\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⠄⠄\"}},\"key\":\"2034\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠢⠄\"}},\"key\":\"2035\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠖⠄\"}},\"key\":\"2036\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠶⠄\"}},\"key\":\"2037\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠦⠄\"}},\"key\":\"2038\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠔⠄\"}},\"key\":\"2039\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠁⠄\"}},\"key\":\"203A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠃⠄\"}},\"key\":\"203B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠖⠖\"}},\"key\":\"203C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠙⠄\"}},\"key\":\"203D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠱\"}},\"key\":\"203E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠋⠄\"}},\"key\":\"203F\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠴⠄\"}},\"key\":\"2040\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠂⠄\"}},\"key\":\"2041\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠆⠄\"}},\"key\":\"2042\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠒⠄\"}},\"key\":\"2043\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠲⠄\"}},\"key\":\"2044\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠹⠹\"}},\"key\":\"2047\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠹⠖\"}},\"key\":\"2048\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠖⠹\"}},\"key\":\"2049\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠃⠄\"}},\"key\":\"204B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠉⠄\"}},\"key\":\"204C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠙⠄\"}},\"key\":\"204D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠑⠄\"}},\"key\":\"204E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠋⠄\"}},\"key\":\"204F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠴⠄\"}},\"key\":\"2050\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠂⠄\"}},\"key\":\"2051\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠆⠄\"}},\"key\":\"2052\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠒⠄\"}},\"key\":\"2053\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠲⠄\"}},\"key\":\"2054\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠢⠄\"}},\"key\":\"2055\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠖⠄\"}},\"key\":\"2056\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠶⠄\"}},\"key\":\"2057\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠦⠄\"}},\"key\":\"2058\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠔⠄\"}},\"key\":\"2059\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠁⠄\"}},\"key\":\"205A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠃⠄\"}},\"key\":\"205B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠉⠄\"}},\"key\":\"205C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠙⠄\"}},\"key\":\"205D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠑⠄\"}},\"key\":\"205E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠁⠄\"}},\"key\":\"207A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠃⠄\"}},\"key\":\"207B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠉⠄\"}},\"key\":\"207C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠙⠄\"}},\"key\":\"207D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠑⠄\"}},\"key\":\"207E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠦⠁⠄\"}},\"key\":\"208A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠦⠃⠄\"}},\"key\":\"208B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠦⠉⠄\"}},\"key\":\"208C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠦⠙⠄\"}},\"key\":\"208D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠦⠑⠄\"}},\"key\":\"208E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠁⠄\"}},\"key\":\"214A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠃⠄\"}},\"key\":\"214B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠉⠄\"}},\"key\":\"214C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠙⠄\"}},\"key\":\"214D\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠑⠄\"}},\"key\":\"214E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠯\"}},\"key\":\"2200\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠴⠂⠄\"}},\"key\":\"2201\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠿\"}},\"key\":\"2203\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠌⠈⠿\"}},\"key\":\"2204\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠸⠴\"}},\"key\":\"2205\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠴⠖⠄\"}},\"key\":\"2206\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠑⠀\"}},\"key\":\"2208\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠈⠑⠀\"}},\"key\":\"2209\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠑⠀\"}},\"key\":\"220A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠨⠁⠀\"}},\"key\":\"220B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠸⠨⠁⠀\"}},\"key\":\"220C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠢⠀\"}},\"key\":\"220D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠳⠀\"}},\"key\":\"220E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠴⠋⠄\"}},\"key\":\"220F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠴⠄\"}},\"key\":\"2210\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠨⠠⠎\"}},\"key\":\"2211\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠤\"}},\"key\":\"2212\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠤⠬\"}},\"key\":\"2213\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠲⠄\"}},\"key\":\"2214\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠸⠌\"}},\"key\":\"2215\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠸⠡\"}},\"key\":\"2216\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠼\"}},\"key\":\"2217\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠘⠨⠡\"}},\"key\":\"2218\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠔⠄\"}},\"key\":\"2219\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠁⠄\"}},\"key\":\"221A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠃⠄\"}},\"key\":\"221B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠉⠄\"}},\"key\":\"221C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠰⠆⠀\"}},\"key\":\"221D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠠⠿\"}},\"key\":\"221E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠪⠨⠗⠻\"}},\"key\":\"221F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠪\"}},\"key\":\"2220\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠪⠸⠫⠫⠁⠻\"}},\"key\":\"2221\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠪⠸⠫⠫⠁⠻\"}},\"key\":\"2222\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠳\"}},\"key\":\"2223\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠌⠳\"}},\"key\":\"2224\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠇⠀\"}},\"key\":\"2225\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠫⠇⠀\"}},\"key\":\"2226\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠩\"}},\"key\":\"2227\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠬\"}},\"key\":\"2228\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠨⠩\"}},\"key\":\"2229\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠨⠬\"}},\"key\":\"222A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮\"}},\"key\":\"222B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮⠮\"}},\"key\":\"222C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮⠮⠮\"}},\"key\":\"222D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮⠈⠫⠉⠻\"}},\"key\":\"222E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠆⠋⠄\"}},\"key\":\"222F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠴⠄\"}},\"key\":\"2230\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠂⠄\"}},\"key\":\"2231\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮⠈⠫⠪⠢⠔⠻\"}},\"key\":\"2232\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮⠈⠫⠢⠔⠕⠻\"}},\"key\":\"2233\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠠⠡⠀\"}},\"key\":\"2234\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠌⠀\"}},\"key\":\"2235\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠂⠀\"}},\"key\":\"2236\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠶⠄\"}},\"key\":\"2237\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠦⠄\"}},\"key\":\"2238\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠔⠄\"}},\"key\":\"2239\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠁⠄\"}},\"key\":\"223A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠃⠄\"}},\"key\":\"223B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠱\"}},\"key\":\"223C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠙⠄\"}},\"key\":\"223D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠑⠄\"}},\"key\":\"223E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠋⠄\"}},\"key\":\"223F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠴⠄\"}},\"key\":\"2240\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠂⠄\"}},\"key\":\"2241\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠆⠄\"}},\"key\":\"2242\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠒⠄\"}},\"key\":\"2243\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠲⠄\"}},\"key\":\"2244\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠱⠈⠱⠀\"}},\"key\":\"2245\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠖⠄\"}},\"key\":\"2246\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠶⠄\"}},\"key\":\"2247\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠦⠄\"}},\"key\":\"2248\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠔⠄\"}},\"key\":\"2249\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠁⠄\"}},\"key\":\"224A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠃⠄\"}},\"key\":\"224B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠉⠄\"}},\"key\":\"224C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠣⠠⠣⠀\"}},\"key\":\"224D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠑⠄\"}},\"key\":\"224E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠋⠄\"}},\"key\":\"224F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠴⠄\"}},\"key\":\"2250\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠂⠄\"}},\"key\":\"2251\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠆⠄\"}},\"key\":\"2252\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠒⠄\"}},\"key\":\"2253\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠲⠄\"}},\"key\":\"2254\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠢⠄\"}},\"key\":\"2255\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠖⠄\"}},\"key\":\"2256\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠶⠄\"}},\"key\":\"2257\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠦⠄\"}},\"key\":\"2258\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠔⠄\"}},\"key\":\"2259\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠁⠄\"}},\"key\":\"225A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠃⠄\"}},\"key\":\"225B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠉⠄\"}},\"key\":\"225C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠙⠄\"}},\"key\":\"225D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠑⠄\"}},\"key\":\"225E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠋⠄\"}},\"key\":\"225F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠅⠀\"}},\"key\":\"2260\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠇⠀\"}},\"key\":\"2261\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠸⠇⠀\"}},\"key\":\"2262\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠖⠒⠄\"}},\"key\":\"2263\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠱⠀\"}},\"key\":\"2264\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠱⠀\"}},\"key\":\"2265\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠨⠅⠀\"}},\"key\":\"2266\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠨⠅⠀\"}},\"key\":\"2267\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠌⠨⠅⠀\"}},\"key\":\"2268\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠌⠨⠅⠀\"}},\"key\":\"2269\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠈⠐⠅⠻⠀\"}},\"key\":\"226A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠈⠨⠂⠻⠀\"}},\"key\":\"226B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠖⠉⠄\"}},\"key\":\"226C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠈⠣⠠⠣⠀\"}},\"key\":\"226D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠐⠅⠀\"}},\"key\":\"226E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠂⠀\"}},\"key\":\"226F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠐⠅⠱⠀\"}},\"key\":\"2270\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠂⠱⠀\"}},\"key\":\"2271\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠈⠱⠀\"}},\"key\":\"2272\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠈⠱⠀\"}},\"key\":\"2273\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠐⠅⠈⠱⠀\"}},\"key\":\"2274\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠂⠈⠱⠀\"}},\"key\":\"2275\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠨⠂⠀\"}},\"key\":\"2276\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠐⠅⠀\"}},\"key\":\"2277\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠐⠅⠨⠂⠀\"}},\"key\":\"2278\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠂⠐⠅⠀\"}},\"key\":\"2279\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠀\"}},\"key\":\"227A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠀\"}},\"key\":\"227B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠱⠀\"}},\"key\":\"227C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠱⠀\"}},\"key\":\"227D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠈⠱⠀\"}},\"key\":\"227E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠈⠱⠀\"}},\"key\":\"227F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠐⠅⠀\"}},\"key\":\"2280\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠐⠅⠀\"}},\"key\":\"2281\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠐⠅⠀\"}},\"key\":\"2282\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠨⠂⠀\"}},\"key\":\"2283\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠸⠐⠅⠀\"}},\"key\":\"2284\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠸⠨⠂⠀\"}},\"key\":\"2285\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠸⠀⠅⠱\"}},\"key\":\"2286\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠱⠀\"}},\"key\":\"2287\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠀⠅⠱⠀\"}},\"key\":\"2288\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠂⠱⠀\"}},\"key\":\"2289\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠐⠅⠌⠨⠅⠀\"}},\"key\":\"228A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠨⠂⠌⠨⠅⠀\"}},\"key\":\"228B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠦⠉⠄\"}},\"key\":\"228C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠦⠙⠄\"}},\"key\":\"228D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠦⠑⠄\"}},\"key\":\"228E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠦⠋⠄\"}},\"key\":\"228F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠔⠴⠄\"}},\"key\":\"2290\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠔⠂⠄\"}},\"key\":\"2291\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠔⠆⠄\"}},\"key\":\"2292\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠔⠒⠄\"}},\"key\":\"2293\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠔⠲⠄\"}},\"key\":\"2294\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠬⠻\"}},\"key\":\"2295\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠤⠻\"}},\"key\":\"2296\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠈⠡⠻\"}},\"key\":\"2297\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠸⠌⠻\"}},\"key\":\"2298\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠡⠻\"}},\"key\":\"2299\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠘⠨⠡⠻\"}},\"key\":\"229A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠈⠼⠻\"}},\"key\":\"229B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠨⠅⠻\"}},\"key\":\"229C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠤⠤⠻\"}},\"key\":\"229D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠲⠸⠫⠬⠻\"}},\"key\":\"229E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠲⠸⠫⠤⠻\"}},\"key\":\"229F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠲⠸⠫⠈⠡⠻\"}},\"key\":\"22A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠲⠸⠫⠡⠻\"}},\"key\":\"22A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠆⠄\"}},\"key\":\"22A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠒⠄\"}},\"key\":\"22A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠲⠄\"}},\"key\":\"22A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠏⠀\"}},\"key\":\"22A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠖⠄\"}},\"key\":\"22A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠶⠄\"}},\"key\":\"22A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠦⠄\"}},\"key\":\"22A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠔⠄\"}},\"key\":\"22A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠁⠄\"}},\"key\":\"22AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠃⠄\"}},\"key\":\"22AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠉⠄\"}},\"key\":\"22AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠙⠄\"}},\"key\":\"22AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠑⠄\"}},\"key\":\"22AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠋⠄\"}},\"key\":\"22AF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠴⠄\"}},\"key\":\"22B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠂⠄\"}},\"key\":\"22B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠆⠄\"}},\"key\":\"22B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠒⠄\"}},\"key\":\"22B3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠲⠄\"}},\"key\":\"22B4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠢⠄\"}},\"key\":\"22B5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠖⠄\"}},\"key\":\"22B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠶⠄\"}},\"key\":\"22B7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠦⠄\"}},\"key\":\"22B8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠔⠄\"}},\"key\":\"22B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠁⠄\"}},\"key\":\"22BA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠃⠄\"}},\"key\":\"22BB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠉⠄\"}},\"key\":\"22BC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠙⠄\"}},\"key\":\"22BD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠋⠄\"}},\"key\":\"22BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠩\"}},\"key\":\"22C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠬\"}},\"key\":\"22C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠨⠩\"}},\"key\":\"22C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠨⠬\"}},\"key\":\"22C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠲⠄\"}},\"key\":\"22C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠡\"}},\"key\":\"22C5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠖⠄\"}},\"key\":\"22C6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠶⠄\"}},\"key\":\"22C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠦⠄\"}},\"key\":\"22C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠔⠄\"}},\"key\":\"22C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠁⠄\"}},\"key\":\"22CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠃⠄\"}},\"key\":\"22CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠉⠄\"}},\"key\":\"22CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠙⠄\"}},\"key\":\"22CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠑⠄\"}},\"key\":\"22CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠋⠄\"}},\"key\":\"22CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠴⠄\"}},\"key\":\"22D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠂⠄\"}},\"key\":\"22D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠆⠄\"}},\"key\":\"22D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠒⠄\"}},\"key\":\"22D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠲⠄\"}},\"key\":\"22D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠢⠄\"}},\"key\":\"22D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠖⠄\"}},\"key\":\"22D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠶⠄\"}},\"key\":\"22D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠦⠄\"}},\"key\":\"22D8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠔⠄\"}},\"key\":\"22D9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠁⠄\"}},\"key\":\"22DA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠃⠄\"}},\"key\":\"22DB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠱⠐⠅⠀\"}},\"key\":\"22DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠱⠨⠂⠀\"}},\"key\":\"22DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠑⠄\"}},\"key\":\"22DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠋⠄\"}},\"key\":\"22DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠴⠄\"}},\"key\":\"22E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠂⠄\"}},\"key\":\"22E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠆⠄\"}},\"key\":\"22E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠒⠄\"}},\"key\":\"22E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠲⠄\"}},\"key\":\"22E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠢⠄\"}},\"key\":\"22E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠖⠄\"}},\"key\":\"22E6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠶⠄\"}},\"key\":\"22E7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠦⠄\"}},\"key\":\"22E8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠔⠄\"}},\"key\":\"22E9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠁⠄\"}},\"key\":\"22EA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠃⠄\"}},\"key\":\"22EB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠉⠄\"}},\"key\":\"22EC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠙⠄\"}},\"key\":\"22ED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠣⠄⠄⠄\"}},\"key\":\"22EE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⠄⠄\"}},\"key\":\"22EF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠘⠄⠄⠄\"}},\"key\":\"22F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠰⠄⠄⠄\"}},\"key\":\"22F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠆⠄\"}},\"key\":\"22F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠒⠄\"}},\"key\":\"22F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠲⠄\"}},\"key\":\"22F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠢⠄\"}},\"key\":\"22F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠖⠄\"}},\"key\":\"22F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠶⠄\"}},\"key\":\"22F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠦⠄\"}},\"key\":\"22F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠔⠄\"}},\"key\":\"22F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠁⠄\"}},\"key\":\"22FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠃⠄\"}},\"key\":\"22FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠉⠄\"}},\"key\":\"22FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠙⠄\"}},\"key\":\"22FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠑⠄\"}},\"key\":\"22FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠋⠄\"}},\"key\":\"22FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠴⠄\"}},\"key\":\"2300\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠆⠄\"}},\"key\":\"2302\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠢⠄\"}},\"key\":\"2305\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠖⠄\"}},\"key\":\"2306\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠶⠄\"}},\"key\":\"2307\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠂⠴⠄\"}},\"key\":\"2310\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠂⠂⠄\"}},\"key\":\"2311\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠂⠆⠄\"}},\"key\":\"2312\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠂⠒⠄\"}},\"key\":\"2313\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠂⠲⠄\"}},\"key\":\"2314\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠢⠄\"}},\"key\":\"2795\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠖⠄\"}},\"key\":\"2796\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠶⠄\"}},\"key\":\"2797\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠴⠄\"}},\"key\":\"27B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠋⠄\"}},\"key\":\"27BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠂⠄\"}},\"key\":\"27C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠏\"}},\"key\":\"27C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠒⠄\"}},\"key\":\"27C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠲⠄\"}},\"key\":\"27C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠶⠄\"}},\"key\":\"27C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠦⠄\"}},\"key\":\"27C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠔⠄\"}},\"key\":\"27C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠁⠄\"}},\"key\":\"27CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠃⠄\"}},\"key\":\"27CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠉⠄\"}},\"key\":\"27CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠙⠄\"}},\"key\":\"27CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠑⠄\"}},\"key\":\"27CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠋⠄\"}},\"key\":\"27CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠴⠄\"}},\"key\":\"27D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠂⠄\"}},\"key\":\"27D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠆⠄\"}},\"key\":\"27D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠒⠄\"}},\"key\":\"27D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠲⠄\"}},\"key\":\"27D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠢⠄\"}},\"key\":\"27D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠖⠄\"}},\"key\":\"27D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠶⠄\"}},\"key\":\"27D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠦⠄\"}},\"key\":\"27D8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠔⠄\"}},\"key\":\"27D9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠁⠄\"}},\"key\":\"27DA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠃⠄\"}},\"key\":\"27DB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠉⠄\"}},\"key\":\"27DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠙⠄\"}},\"key\":\"27DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠑⠄\"}},\"key\":\"27DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠋⠄\"}},\"key\":\"27DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠴⠄\"}},\"key\":\"27E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠂⠄\"}},\"key\":\"27E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠆⠄\"}},\"key\":\"27E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠒⠄\"}},\"key\":\"27E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠲⠄\"}},\"key\":\"27E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠢⠄\"}},\"key\":\"27E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠃⠄\"}},\"key\":\"292B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠉⠄\"}},\"key\":\"292C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠳⠳⠳\"}},\"key\":\"2980\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠂⠄\"}},\"key\":\"2981\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠆⠄\"}},\"key\":\"2982\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠔⠄\"}},\"key\":\"2999\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠁⠄\"}},\"key\":\"299A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠴⠄\"}},\"key\":\"29B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠂⠄\"}},\"key\":\"29B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠆⠄\"}},\"key\":\"29B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠢⠄\"}},\"key\":\"29B5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠳⠻\"}},\"key\":\"29B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠫⠇⠻\"}},\"key\":\"29B7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠸⠡⠻\"}},\"key\":\"29B8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠫⠏⠻\"}},\"key\":\"29B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠁⠄\"}},\"key\":\"29BA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠃⠄\"}},\"key\":\"29BB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠉⠄\"}},\"key\":\"29BC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠑⠄\"}},\"key\":\"29BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠔⠔⠻\"}},\"key\":\"29BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠐⠅⠻\"}},\"key\":\"29C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠨⠂⠻\"}},\"key\":\"29C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠆⠄\"}},\"key\":\"29C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠒⠄\"}},\"key\":\"29C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠲⠄\"}},\"key\":\"29C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠢⠄\"}},\"key\":\"29C5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠖⠄\"}},\"key\":\"29C6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠶⠄\"}},\"key\":\"29C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠦⠄\"}},\"key\":\"29C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠔⠄\"}},\"key\":\"29C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠁⠄\"}},\"key\":\"29CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠃⠄\"}},\"key\":\"29CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠉⠄\"}},\"key\":\"29CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠙⠄\"}},\"key\":\"29CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠑⠄\"}},\"key\":\"29CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠋⠄\"}},\"key\":\"29CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠴⠄\"}},\"key\":\"29D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠂⠄\"}},\"key\":\"29D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠆⠄\"}},\"key\":\"29D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠒⠄\"}},\"key\":\"29D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠲⠄\"}},\"key\":\"29D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠢⠄\"}},\"key\":\"29D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠖⠄\"}},\"key\":\"29D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠶⠄\"}},\"key\":\"29D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠉⠄\"}},\"key\":\"29DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠙⠄\"}},\"key\":\"29DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠑⠄\"}},\"key\":\"29DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠋⠄\"}},\"key\":\"29DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠴⠄\"}},\"key\":\"29E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠂⠄\"}},\"key\":\"29E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠆⠄\"}},\"key\":\"29E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠒⠄\"}},\"key\":\"29E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠲⠄\"}},\"key\":\"29E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠢⠄\"}},\"key\":\"29E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠖⠄\"}},\"key\":\"29E6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠶⠄\"}},\"key\":\"29E7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠦⠄\"}},\"key\":\"29E8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠔⠄\"}},\"key\":\"29E9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠃⠄\"}},\"key\":\"29EB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠑⠄\"}},\"key\":\"29EE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠋⠄\"}},\"key\":\"29EF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠴⠄\"}},\"key\":\"29F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠂⠄\"}},\"key\":\"29F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠆⠄\"}},\"key\":\"29F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠒⠄\"}},\"key\":\"29F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠲⠄\"}},\"key\":\"29F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠢⠄\"}},\"key\":\"29F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠖⠄\"}},\"key\":\"29F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠶⠄\"}},\"key\":\"29F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠦⠄\"}},\"key\":\"29F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠔⠄\"}},\"key\":\"29F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠁⠄\"}},\"key\":\"29FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠃⠄\"}},\"key\":\"29FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠑⠄\"}},\"key\":\"29FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠋⠄\"}},\"key\":\"29FF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠡⠻\"}},\"key\":\"2A00\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠬⠻\"}},\"key\":\"2A01\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠈⠡⠻\"}},\"key\":\"2A02\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠒⠄\"}},\"key\":\"2A03\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠲⠄\"}},\"key\":\"2A04\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠢⠄\"}},\"key\":\"2A05\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠖⠄\"}},\"key\":\"2A06\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠶⠄\"}},\"key\":\"2A07\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠦⠄\"}},\"key\":\"2A08\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠔⠄\"}},\"key\":\"2A09\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠁⠄\"}},\"key\":\"2A0A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠃⠄\"}},\"key\":\"2A0B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠉⠄\"}},\"key\":\"2A0C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠙⠄\"}},\"key\":\"2A0D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠑⠄\"}},\"key\":\"2A0E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠋⠄\"}},\"key\":\"2A0F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠴⠄\"}},\"key\":\"2A10\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠂⠄\"}},\"key\":\"2A11\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠆⠄\"}},\"key\":\"2A12\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠒⠄\"}},\"key\":\"2A13\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠲⠄\"}},\"key\":\"2A14\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠢⠄\"}},\"key\":\"2A15\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠖⠄\"}},\"key\":\"2A16\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠦⠄\"}},\"key\":\"2A18\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠔⠄\"}},\"key\":\"2A19\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠁⠄\"}},\"key\":\"2A1A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠃⠄\"}},\"key\":\"2A1B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠉⠄\"}},\"key\":\"2A1C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠙⠄\"}},\"key\":\"2A1D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠑⠄\"}},\"key\":\"2A1E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠋⠄\"}},\"key\":\"2A1F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠴⠄\"}},\"key\":\"2A20\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠂⠄\"}},\"key\":\"2A21\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠆⠄\"}},\"key\":\"2A22\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠒⠄\"}},\"key\":\"2A23\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠲⠄\"}},\"key\":\"2A24\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠢⠄\"}},\"key\":\"2A25\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠖⠄\"}},\"key\":\"2A26\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠶⠄\"}},\"key\":\"2A27\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠦⠄\"}},\"key\":\"2A28\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠔⠄\"}},\"key\":\"2A29\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠁⠄\"}},\"key\":\"2A2A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠃⠄\"}},\"key\":\"2A2B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠉⠄\"}},\"key\":\"2A2C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠙⠄\"}},\"key\":\"2A2D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠑⠄\"}},\"key\":\"2A2E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠋⠄\"}},\"key\":\"2A2F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠴⠄\"}},\"key\":\"2A30\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠂⠄\"}},\"key\":\"2A31\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠆⠄\"}},\"key\":\"2A32\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠒⠄\"}},\"key\":\"2A33\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠲⠄\"}},\"key\":\"2A34\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠢⠄\"}},\"key\":\"2A35\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠖⠄\"}},\"key\":\"2A36\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠶⠄\"}},\"key\":\"2A37\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠈⠌⠻\"}},\"key\":\"2A38\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠔⠄\"}},\"key\":\"2A39\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠁⠄\"}},\"key\":\"2A3A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠃⠄\"}},\"key\":\"2A3B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠉⠄\"}},\"key\":\"2A3C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠙⠄\"}},\"key\":\"2A3D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠑⠄\"}},\"key\":\"2A3E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠋⠄\"}},\"key\":\"2A3F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠴⠄\"}},\"key\":\"2A40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠂⠄\"}},\"key\":\"2A41\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠆⠄\"}},\"key\":\"2A42\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠒⠄\"}},\"key\":\"2A43\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠲⠄\"}},\"key\":\"2A44\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠢⠄\"}},\"key\":\"2A45\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠖⠄\"}},\"key\":\"2A46\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠶⠄\"}},\"key\":\"2A47\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠦⠄\"}},\"key\":\"2A48\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠔⠄\"}},\"key\":\"2A49\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠁⠄\"}},\"key\":\"2A4A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠃⠄\"}},\"key\":\"2A4B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠉⠄\"}},\"key\":\"2A4C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠙⠄\"}},\"key\":\"2A4D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠑⠄\"}},\"key\":\"2A4E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠋⠄\"}},\"key\":\"2A4F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠴⠄\"}},\"key\":\"2A50\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠂⠄\"}},\"key\":\"2A51\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠆⠄\"}},\"key\":\"2A52\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠒⠄\"}},\"key\":\"2A53\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠲⠄\"}},\"key\":\"2A54\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠢⠄\"}},\"key\":\"2A55\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠖⠄\"}},\"key\":\"2A56\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠶⠄\"}},\"key\":\"2A57\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠦⠄\"}},\"key\":\"2A58\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠔⠄\"}},\"key\":\"2A59\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠁⠄\"}},\"key\":\"2A5A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠃⠄\"}},\"key\":\"2A5B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠉⠄\"}},\"key\":\"2A5C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠙⠄\"}},\"key\":\"2A5D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠑⠄\"}},\"key\":\"2A5E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠋⠄\"}},\"key\":\"2A5F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠴⠄\"}},\"key\":\"2A60\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠂⠄\"}},\"key\":\"2A61\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠆⠄\"}},\"key\":\"2A62\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠒⠄\"}},\"key\":\"2A63\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠲⠄\"}},\"key\":\"2A64\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠢⠄\"}},\"key\":\"2A65\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠖⠄\"}},\"key\":\"2A66\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠶⠄\"}},\"key\":\"2A67\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠦⠄\"}},\"key\":\"2A68\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠔⠄\"}},\"key\":\"2A69\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠁⠄\"}},\"key\":\"2A6A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠃⠄\"}},\"key\":\"2A6B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠉⠄\"}},\"key\":\"2A6C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠙⠄\"}},\"key\":\"2A6D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠑⠄\"}},\"key\":\"2A6E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠋⠄\"}},\"key\":\"2A6F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠴⠄\"}},\"key\":\"2A70\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠂⠄\"}},\"key\":\"2A71\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠆⠄\"}},\"key\":\"2A72\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠒⠄\"}},\"key\":\"2A73\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠲⠄\"}},\"key\":\"2A74\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠢⠄\"}},\"key\":\"2A75\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠖⠄\"}},\"key\":\"2A76\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠶⠄\"}},\"key\":\"2A77\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠦⠄\"}},\"key\":\"2A78\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠔⠄\"}},\"key\":\"2A79\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠁⠄\"}},\"key\":\"2A7A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠃⠄\"}},\"key\":\"2A7B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠉⠄\"}},\"key\":\"2A7C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠙⠄\"}},\"key\":\"2A7D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠑⠄\"}},\"key\":\"2A7E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠋⠄\"}},\"key\":\"2A7F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠴⠄\"}},\"key\":\"2A80\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠂⠄\"}},\"key\":\"2A81\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠆⠄\"}},\"key\":\"2A82\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠒⠄\"}},\"key\":\"2A83\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠲⠄\"}},\"key\":\"2A84\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠢⠄\"}},\"key\":\"2A85\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠖⠄\"}},\"key\":\"2A86\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠶⠄\"}},\"key\":\"2A87\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠦⠄\"}},\"key\":\"2A88\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠔⠄\"}},\"key\":\"2A89\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠁⠄\"}},\"key\":\"2A8A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠃⠄\"}},\"key\":\"2A8B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠉⠄\"}},\"key\":\"2A8C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠙⠄\"}},\"key\":\"2A8D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠑⠄\"}},\"key\":\"2A8E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠋⠄\"}},\"key\":\"2A8F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠴⠄\"}},\"key\":\"2A90\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠂⠄\"}},\"key\":\"2A91\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠆⠄\"}},\"key\":\"2A92\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠒⠄\"}},\"key\":\"2A93\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠲⠄\"}},\"key\":\"2A94\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠢⠄\"}},\"key\":\"2A95\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠖⠄\"}},\"key\":\"2A96\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠶⠄\"}},\"key\":\"2A97\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠦⠄\"}},\"key\":\"2A98\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠔⠄\"}},\"key\":\"2A99\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠁⠄\"}},\"key\":\"2A9A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠃⠄\"}},\"key\":\"2A9B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠉⠄\"}},\"key\":\"2A9C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠙⠄\"}},\"key\":\"2A9D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠑⠄\"}},\"key\":\"2A9E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠋⠄\"}},\"key\":\"2A9F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠴⠄\"}},\"key\":\"2AA0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠂⠄\"}},\"key\":\"2AA1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠆⠄\"}},\"key\":\"2AA2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠒⠄\"}},\"key\":\"2AA3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠲⠄\"}},\"key\":\"2AA4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠢⠄\"}},\"key\":\"2AA5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠖⠄\"}},\"key\":\"2AA6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠶⠄\"}},\"key\":\"2AA7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠦⠄\"}},\"key\":\"2AA8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠔⠄\"}},\"key\":\"2AA9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠁⠄\"}},\"key\":\"2AAA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠃⠄\"}},\"key\":\"2AAB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠉⠄\"}},\"key\":\"2AAC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠙⠄\"}},\"key\":\"2AAD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠑⠄\"}},\"key\":\"2AAE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠱⠀\"}},\"key\":\"2AAF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠱⠀\"}},\"key\":\"2AB0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠌⠱⠀\"}},\"key\":\"2AB1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠌⠱⠀\"}},\"key\":\"2AB2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠨⠅⠀\"}},\"key\":\"2AB3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠨⠅⠀\"}},\"key\":\"2AB4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠌⠨⠅⠀\"}},\"key\":\"2AB5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠌⠨⠅⠀\"}},\"key\":\"2AB6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠈⠱⠈⠱⠀\"}},\"key\":\"2AB7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠈⠱⠈⠱⠀\"}},\"key\":\"2AB8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠌⠈⠱⠈⠱⠀\"}},\"key\":\"2AB9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠌⠈⠱⠈⠱⠀\"}},\"key\":\"2ABA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠈⠨⠐⠅⠻⠀\"}},\"key\":\"2ABB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠈⠨⠨⠐⠻⠀\"}},\"key\":\"2ABC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠃⠙⠄\"}},\"key\":\"2ABD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠃⠑⠄\"}},\"key\":\"2ABE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠃⠋⠄\"}},\"key\":\"2ABF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠴⠄\"}},\"key\":\"2AC0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠂⠄\"}},\"key\":\"2AC1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠆⠄\"}},\"key\":\"2AC2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠒⠄\"}},\"key\":\"2AC3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠲⠄\"}},\"key\":\"2AC4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠢⠄\"}},\"key\":\"2AC5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠖⠄\"}},\"key\":\"2AC6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠶⠄\"}},\"key\":\"2AC7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠦⠄\"}},\"key\":\"2AC8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠔⠄\"}},\"key\":\"2AC9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠁⠄\"}},\"key\":\"2ACA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠃⠄\"}},\"key\":\"2ACB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠉⠄\"}},\"key\":\"2ACC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠙⠄\"}},\"key\":\"2ACD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠑⠄\"}},\"key\":\"2ACE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠋⠄\"}},\"key\":\"2ACF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠴⠄\"}},\"key\":\"2AD0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠂⠄\"}},\"key\":\"2AD1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠆⠄\"}},\"key\":\"2AD2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠒⠄\"}},\"key\":\"2AD3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠲⠄\"}},\"key\":\"2AD4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠢⠄\"}},\"key\":\"2AD5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠖⠄\"}},\"key\":\"2AD6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠶⠄\"}},\"key\":\"2AD7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠦⠄\"}},\"key\":\"2AD8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠔⠄\"}},\"key\":\"2AD9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠁⠄\"}},\"key\":\"2ADA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠃⠄\"}},\"key\":\"2ADB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠉⠄\"}},\"key\":\"2ADC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠙⠄\"}},\"key\":\"2ADD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠑⠄\"}},\"key\":\"2ADE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠋⠄\"}},\"key\":\"2ADF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠴⠄\"}},\"key\":\"2AE0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠂⠄\"}},\"key\":\"2AE1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠆⠄\"}},\"key\":\"2AE2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠒⠄\"}},\"key\":\"2AE3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠲⠄\"}},\"key\":\"2AE4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠢⠄\"}},\"key\":\"2AE5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠖⠄\"}},\"key\":\"2AE6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠶⠄\"}},\"key\":\"2AE7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠦⠄\"}},\"key\":\"2AE8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠔⠄\"}},\"key\":\"2AE9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠁⠄\"}},\"key\":\"2AEA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠃⠄\"}},\"key\":\"2AEB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠉⠄\"}},\"key\":\"2AEC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠙⠄\"}},\"key\":\"2AED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠑⠄\"}},\"key\":\"2AEE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠋⠄\"}},\"key\":\"2AEF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠴⠄\"}},\"key\":\"2AF0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠂⠄\"}},\"key\":\"2AF1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠆⠄\"}},\"key\":\"2AF2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠒⠄\"}},\"key\":\"2AF3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠲⠄\"}},\"key\":\"2AF4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠢⠄\"}},\"key\":\"2AF5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠖⠄\"}},\"key\":\"2AF6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠶⠄\"}},\"key\":\"2AF7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠦⠄\"}},\"key\":\"2AF8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠔⠄\"}},\"key\":\"2AF9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠁⠄\"}},\"key\":\"2AFA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠃⠄\"}},\"key\":\"2AFB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠉⠄\"}},\"key\":\"2AFC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠙⠄\"}},\"key\":\"2AFD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠑⠄\"}},\"key\":\"2AFE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠋⠄\"}},\"key\":\"2AFF\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠉⠄\"}},\"key\":\"301C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠴⠄\"}},\"key\":\"FE10\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠒⠄\"}},\"key\":\"FE13\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠲⠄\"}},\"key\":\"FE14\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠢⠄\"}},\"key\":\"FE15\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠖⠄\"}},\"key\":\"FE16\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠔⠄\"}},\"key\":\"FE19\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠴⠄\"}},\"key\":\"FE30\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠂⠄\"}},\"key\":\"FE31\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠆⠄\"}},\"key\":\"FE32\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠒⠄\"}},\"key\":\"FE33\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠲⠄\"}},\"key\":\"FE34\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠢⠄\"}},\"key\":\"FE45\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠖⠄\"}},\"key\":\"FE46\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠔⠄\"}},\"key\":\"FE49\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠁⠄\"}},\"key\":\"FE4A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠃⠄\"}},\"key\":\"FE4B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠉⠄\"}},\"key\":\"FE4C\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠙⠄\"}},\"key\":\"FE4D\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠑⠄\"}},\"key\":\"FE4E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠋⠄\"}},\"key\":\"FE4F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠴⠄\"}},\"key\":\"FE50\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠆⠄\"}},\"key\":\"FE52\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠲⠄\"}},\"key\":\"FE54\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠢⠄\"}},\"key\":\"FE55\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠖⠄\"}},\"key\":\"FE56\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠶⠄\"}},\"key\":\"FE57\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠦⠄\"}},\"key\":\"FE58\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠋⠄\"}},\"key\":\"FE5F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠴⠄\"}},\"key\":\"FE60\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠂⠄\"}},\"key\":\"FE61\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠆⠄\"}},\"key\":\"FE62\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠒⠄\"}},\"key\":\"FE63\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠲⠄\"}},\"key\":\"FE64\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠢⠄\"}},\"key\":\"FE65\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠖⠄\"}},\"key\":\"FE66\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠦⠄\"}},\"key\":\"FE68\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠔⠄\"}},\"key\":\"FE69\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠁⠄\"}},\"key\":\"FE6A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠃⠄\"}},\"key\":\"FE6B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠂⠄\"}},\"key\":\"FF01\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠆⠄\"}},\"key\":\"FF02\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠒⠄\"}},\"key\":\"FF03\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠲⠄\"}},\"key\":\"FF04\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠢⠄\"}},\"key\":\"FF05\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠖⠄\"}},\"key\":\"FF06\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠶⠄\"}},\"key\":\"FF07\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠁⠄\"}},\"key\":\"FF0A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠃⠄\"}},\"key\":\"FF0B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠉⠄\"}},\"key\":\"FF0C\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠙⠄\"}},\"key\":\"FF0D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠑⠄\"}},\"key\":\"FF0E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠋⠄\"}},\"key\":\"FF0F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠁⠄\"}},\"key\":\"FF1A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠃⠄\"}},\"key\":\"FF1B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠉⠄\"}},\"key\":\"FF1C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠙⠄\"}},\"key\":\"FF1D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠑⠄\"}},\"key\":\"FF1E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠋⠄\"}},\"key\":\"FF1F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠆⠴⠄\"}},\"key\":\"FF20\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠒⠉⠄\"}},\"key\":\"FF3C\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠒⠑⠄\"}},\"key\":\"FF3E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠱\"}},\"key\":\"FF3F\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠲⠴⠄\"}},\"key\":\"FF40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠢⠉⠄\"}},\"key\":\"FF5C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠱\"}},\"key\":\"FF5E\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠴⠄\"}},\"key\":\"FFE0\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠂⠄\"}},\"key\":\"FFE1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠆⠄\"}},\"key\":\"FFE2\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠱\"}},\"key\":\"FFE3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠲⠄\"}},\"key\":\"FFE4\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠢⠄\"}},\"key\":\"FFE5\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠖⠄\"}},\"key\":\"FFE6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠦⠄\"}},\"key\":\"FFE8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠙⠄\"}},\"key\":\"FFED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠑⠄\"}},\"key\":\"FFEE\"}]\n,\n\"nemeth/symbols/math_whitespace.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"0020\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"00A0\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠤\"}},\"key\":\"00AD\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2000\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2001\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2002\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2003\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2004\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2005\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2006\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2007\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2008\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2009\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"200A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"200B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"\"}},\"key\":\"200C\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"\"}},\"key\":\"200D\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠴⠑⠄\"}},\"key\":\"200E\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠴⠋⠄\"}},\"key\":\"200F\"},{\"category\":\"Zl\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠦⠄\"}},\"key\":\"2028\"},{\"category\":\"Zp\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠔⠄\"}},\"key\":\"2029\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠁⠄\"}},\"key\":\"202A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠃⠄\"}},\"key\":\"202B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠉⠄\"}},\"key\":\"202C\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠙⠄\"}},\"key\":\"202D\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠑⠄\"}},\"key\":\"202E\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"202F\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"205F\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"\"}},\"key\":\"2060\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2061\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠈⠡\"}},\"key\":\"2062\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠠\"}},\"key\":\"2063\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠬\"}},\"key\":\"2064\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠖⠁⠄\"}},\"key\":\"206A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠖⠃⠄\"}},\"key\":\"206B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠖⠑⠄\"}},\"key\":\"206E\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠖⠋⠄\"}},\"key\":\"206F\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠋⠋⠄\"}},\"key\":\"FEFF\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠋⠔⠄\"}},\"key\":\"FFF9\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠋⠁⠄\"}},\"key\":\"FFFA\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠋⠃⠄\"}},\"key\":\"FFFB\"}]\n,\n\"nemeth/symbols/other_stars.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠑⠦⠄\"}},\"key\":\"23E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠖⠴⠢⠄\"}},\"key\":\"2605\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠎\"}},\"key\":\"2606\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠖⠁⠁⠄\"}},\"key\":\"26AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠖⠁⠃⠄\"}},\"key\":\"26AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠴⠢⠄\"}},\"key\":\"2705\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠒⠄\"}},\"key\":\"2713\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠲⠄\"}},\"key\":\"2714\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠈⠡\"}},\"key\":\"2715\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠖⠄\"}},\"key\":\"2716\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠶⠄\"}},\"key\":\"2717\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠦⠄\"}},\"key\":\"2718\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠃⠄\"}},\"key\":\"271B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠉⠄\"}},\"key\":\"271C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠴⠄\"}},\"key\":\"2720\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠂⠄\"}},\"key\":\"2721\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠆⠄\"}},\"key\":\"2722\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠒⠄\"}},\"key\":\"2723\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠲⠄\"}},\"key\":\"2724\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠢⠄\"}},\"key\":\"2725\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠖⠄\"}},\"key\":\"2726\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠶⠄\"}},\"key\":\"2727\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠦⠄\"}},\"key\":\"2728\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠔⠄\"}},\"key\":\"2729\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠁⠄\"}},\"key\":\"272A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠃⠄\"}},\"key\":\"272B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠉⠄\"}},\"key\":\"272C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠙⠄\"}},\"key\":\"272D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠑⠄\"}},\"key\":\"272E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠋⠄\"}},\"key\":\"272F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠴⠄\"}},\"key\":\"2730\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠂⠄\"}},\"key\":\"2731\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠆⠄\"}},\"key\":\"2732\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠒⠄\"}},\"key\":\"2733\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠲⠄\"}},\"key\":\"2734\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠢⠄\"}},\"key\":\"2735\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠖⠄\"}},\"key\":\"2736\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠔⠄\"}},\"key\":\"2739\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠁⠄\"}},\"key\":\"273A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠃⠄\"}},\"key\":\"273B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠉⠄\"}},\"key\":\"273C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠙⠄\"}},\"key\":\"273D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠑⠄\"}},\"key\":\"273E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠋⠄\"}},\"key\":\"273F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠴⠄\"}},\"key\":\"2740\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠂⠄\"}},\"key\":\"2741\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠆⠄\"}},\"key\":\"2742\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠒⠄\"}},\"key\":\"2743\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠲⠄\"}},\"key\":\"2744\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠢⠄\"}},\"key\":\"2745\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠖⠄\"}},\"key\":\"2746\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠶⠄\"}},\"key\":\"2747\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠦⠄\"}},\"key\":\"2748\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠔⠄\"}},\"key\":\"2749\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠁⠄\"}},\"key\":\"274A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠃⠄\"}},\"key\":\"274B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠉⠄\"}},\"key\":\"274C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠙⠄\"}},\"key\":\"274D\"}]\n,\n\"nemeth/units/energy.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠠⠺\"}},\"key\":\"W\",\"names\":[\"W\",\"w\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠅⠠⠺\"}},\"key\":\"kW\",\"names\":[\"kw\",\"kW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠍⠠⠺\"}},\"key\":\"mW\",\"names\":[\"mw\",\"mW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠅⠺⠓\"}},\"key\":\"kwh\",\"names\":[\"kwh\",\"kWh\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠠⠚\"}},\"key\":\"J\",\"names\":[\"J\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠠⠝\"}},\"key\":\"N\",\"names\":[\"N\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠠⠁\"}},\"key\":\"A\",\"names\":[\"A\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠠⠧\"}},\"key\":\"V\",\"names\":[\"V\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠨⠍⠨⠠⠺\"}},\"key\":\"µΩ\",\"names\":[\"µΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠍⠨⠠⠺\"}},\"key\":\"mΩ\",\"names\":[\"mΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠨⠠⠺\"}},\"key\":\"Ω\",\"names\":[\"Ω\",\"Ohm\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠅⠨⠠⠺\"}},\"key\":\"kΩ\",\"names\":[\"kΩ\",\"KΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠨⠠⠺\"}},\"key\":\"Ω\",\"names\":[\"Ω\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠍⠨⠠⠺\"}},\"key\":\"MΩ\",\"names\":[\"MΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠛⠨⠠⠺\"}},\"key\":\"GΩ\",\"names\":[\"GΩ\"]}]\n,\n\"nemeth/units/length.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠍⠍\"}},\"key\":\"mm\",\"names\":[\"mm\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠉⠍\"}},\"key\":\"cm\",\"names\":[\"cm\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠍\"}},\"key\":\"m\",\"names\":[\"m\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠅⠍\"}},\"key\":\"km\",\"names\":[\"km\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠋⠞\"}},\"key\":\"ft\",\"names\":[\"ft\",\"ft.\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠊⠝\"}},\"key\":\"in\",\"names\":[\"in\",\"in.\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠍⠊\"}},\"key\":\"mi\",\"names\":[\"mi\",\"mi.\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠽⠙\"}},\"key\":\"yd\",\"names\":[\"yd\",\"yd.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠝⠲⠍⠸⠲\"}},\"key\":\"n.m.\",\"names\":[\"n.m.\"]}]\n,\n\"nemeth/units/memory.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠃\"}},\"key\":\"b\",\"names\":[\"b\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠠⠃\"}},\"key\":\"B\",\"names\":[\"B\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠅⠃\"}},\"key\":\"KB\",\"names\":[\"KB\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠍⠃\"}},\"key\":\"MB\",\"names\":[\"MB\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠛⠃\"}},\"key\":\"GB\",\"names\":[\"GB\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠞⠃\"}},\"key\":\"TB\",\"names\":[\"TB\"]}]\n,\n\"nemeth/units/other.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠙⠕⠵\"}},\"key\":\"doz\",\"names\":[\"doz\",\"doz.\",\"dz\",\"dz.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠎⠟\"}},\"key\":\"sq\",\"names\":[\"sq\",\"sq.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠓⠁\"}},\"key\":\"ha\",\"names\":[\"ha\"]}]\n,\n\"nemeth/units/speed.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠅⠞\"}},\"key\":\"kt\",\"names\":[\"kt\",\"kt.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠍⠏⠓\"}},\"key\":\"mph\",\"names\":[\"mph\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠗⠏⠍\"}},\"key\":\"rpm\",\"names\":[\"rpm\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠅⠍⠓\"}},\"key\":\"kmh\",\"names\":[\"kmh\"]}]\n,\n\"nemeth/units/temperature.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠠⠋\"}},\"key\":\"F\",\"names\":[\"F\",\"F.\",\"°F\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠠⠉\"}},\"key\":\"C\",\"names\":[\"C\",\"°C\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠠⠅\"}},\"key\":\"K\",\"names\":[\"K\",\"°K\"]}]\n,\n\"nemeth/units/time.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠝⠎\"}},\"key\":\"ns\",\"names\":[\"ns\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠨⠍⠎\"}},\"key\":\"µs\",\"names\":[\"µs\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠍⠎\"}},\"key\":\"ms\",\"names\":[\"ms\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠎\"}},\"key\":\"s\",\"names\":[\"s\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠍⠊⠝⠀\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠓\"}},\"key\":\"h\",\"names\":[\"h\",\"hr\"]}]\n,\n\"nemeth/units/volume.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠃⠃⠇\"}},\"key\":\"bbl\",\"names\":[\"bbl.\",\"bbl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠉⠥\"}},\"key\":\"cu\",\"names\":[\"cu\",\"cu.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠋⠇⠸⠲⠀⠕⠵⠸⠲\"}},\"key\":\"fl. oz.\",\"names\":[\"fl. oz.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠛⠁⠇\"}},\"key\":\"gal\",\"names\":[\"gal\",\"gal.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠏⠞\"}},\"key\":\"pt\",\"names\":[\"pt\",\"pt.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠟⠞\"}},\"key\":\"qt\",\"names\":[\"qt\",\"qt.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠞⠃⠎⠏\"}},\"key\":\"tbsp\",\"names\":[\"tbsp\",\"tbsp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠞⠎⠏\"}},\"key\":\"tsp\",\"names\":[\"tsp\",\"tsp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠉⠉\"}},\"key\":\"cc\",\"names\":[\"cc\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠅⠇\"}},\"key\":\"kl\",\"names\":[\"kl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠇\"}},\"key\":\"l\",\"names\":[\"l\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠍⠇\"}},\"key\":\"ml\",\"names\":[\"ml\"]}]\n,\n\"nemeth/units/weight.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠇⠃\"}},\"key\":\"lb\",\"names\":[\"lb\",\"lb.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠇⠞\"}},\"key\":\"LT\",\"names\":[\"LT\",\"L.T.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠕⠵\"}},\"key\":\"oz\",\"names\":[\"oz\",\"oz.\"]},{\"key\":\"µg\",\"names\":[\"µg\",\"mcg\"],\"mappings\":{\"default\":{\"default\":\"⠨⠍⠛\"}}},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠛⠗\"}},\"key\":\"gr\",\"names\":[\"g\",\"gr\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠅⠛\"}},\"key\":\"kg\",\"names\":[\"kg\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠍⠉⠛\"}},\"key\":\"mcg\",\"names\":[\"mg\",\"µg\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠍⠛\"}},\"key\":\"mg\",\"names\":[\"mg\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠞\"}},\"key\":\"t\",\"names\":[\"t\",\"T\"]}]\n,\n\"fr/functions/algebra.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"degré\"}},\"key\":\"deg\",\"names\":[\"deg\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"déterminant\"}},\"key\":\"det\",\"names\":[\"det\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"dimension\"}},\"key\":\"dim\",\"names\":[\"dim\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"homomorphisme\"}},\"key\":\"hom\",\"names\":[\"hom\",\"Hom\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"noyau\"}},\"key\":\"ker\",\"names\":[\"ker\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"trace\"}},\"key\":\"Tr\",\"names\":[\"Tr\",\"tr\"]}]\n,\n\"fr/functions/elementary.js\": \n[{\"locale\":\"fr\"},{\"key\":\"log\",\"mappings\":{\"default\":{\"default\":\"log\"}},\"category\":\"Logarithm\",\"names\":[\"log\"]},{\"key\":\"ln\",\"mappings\":{\"default\":{\"default\":\"logarithme népérien\"}},\"category\":\"Logarithm\",\"names\":[\"ln\"]},{\"key\":\"lg\",\"names\":[\"lg\"],\"mappings\":{\"default\":{\"default\":\"logarithme décimal\"}},\"category\":\"Logarithm\"},{\"key\":\"exp\",\"names\":[\"exp\",\"expt\"],\"mappings\":{\"default\":{\"default\":\"exponentielle\"}},\"category\":\"Elementary\"},{\"key\":\"gcd\",\"names\":[\"gcd\",\"PGCD\",\"pgcd\"],\"mappings\":{\"default\":{\"default\":\"plus grand commun diviseur\"},\"mathspeak\":{\"default\":\"pgcd\"},\"clearspeak\":{\"default\":\"pgcd\"}},\"category\":\"Elementary\"},{\"key\":\"lcm\",\"names\":[\"lcm\",\"ppcm\",\"PPCM\",\"PPMC\",\"ppmc\"],\"mappings\":{\"default\":{\"default\":\"plus petit commun multiple\"},\"mathspeak\":{\"default\":\"ppcm\"},\"clearspeak\":{\"default\":\"ppcm\"}},\"category\":\"Elementary\"},{\"key\":\"arg\",\"names\":[\"arg\"],\"mappings\":{\"default\":{\"default\":\"argument\"}},\"category\":\"Complex\"},{\"key\":\"im\",\"names\":[\"im\"],\"mappings\":{\"default\":{\"default\":\"partie imaginaire\"}},\"category\":\"Complex\"},{\"key\":\"re\",\"names\":[\"re\"],\"mappings\":{\"default\":{\"default\":\"partie réelle\"}},\"category\":\"Complex\"},{\"key\":\"inf\",\"names\":[\"inf\"],\"mappings\":{\"default\":{\"default\":\"borne inférieure\"}},\"category\":\"Limits\"},{\"key\":\"lim\",\"mappings\":{\"default\":{\"default\":\"limite\"}},\"category\":\"Limits\",\"names\":[\"lim\"]},{\"key\":\"max\",\"names\":[\"max\"],\"mappings\":{\"default\":{\"default\":\"maximum\"}},\"category\":\"Limits\"},{\"key\":\"min\",\"names\":[\"min\"],\"mappings\":{\"default\":{\"default\":\"minimum\"}},\"category\":\"Limits\"},{\"key\":\"sup\",\"names\":[\"sup\"],\"mappings\":{\"default\":{\"default\":\"borne supérieure\"}},\"category\":\"Limits\"},{\"key\":\"lim inf\",\"names\":[\"lim inf\",\"liminf\"],\"mappings\":{\"default\":{\"default\":\"limite inferior\"}},\"category\":\"Limits\"},{\"key\":\"lim sup\",\"names\":[\"lim sup\",\"limsup\"],\"mappings\":{\"default\":{\"default\":\"limite superior\"}},\"category\":\"Limits\"},{\"key\":\"injlim\",\"names\":[\"injlim\",\"inj lim\"],\"mappings\":{\"default\":{\"default\":\"limite inductive\"}},\"category\":\"Limits\"},{\"key\":\"projlim\",\"names\":[\"projlim\",\"proj lim\"],\"mappings\":{\"default\":{\"default\":\"limite projective\"}},\"category\":\"Limits\"},{\"key\":\"mod\",\"names\":[\"mod\"],\"mappings\":{\"default\":{\"default\":\"modulo\"}},\"category\":\"Elementary\"},{\"key\":\"Pr\",\"names\":[\"Pr\"],\"mappings\":{\"default\":{\"default\":\"probabilité\"}},\"category\":\"Probability\"}]\n,\n\"fr/functions/hyperbolic.js\": \n[{\"locale\":\"fr\"},{\"key\":\"cosh\",\"mappings\":{\"default\":{\"default\":\"cosinus hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"cosh\"]},{\"key\":\"coth\",\"mappings\":{\"default\":{\"default\":\"cotangente hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"coth\"]},{\"key\":\"csch\",\"mappings\":{\"default\":{\"default\":\"cosécante hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"csch\"]},{\"key\":\"sech\",\"mappings\":{\"default\":{\"default\":\"sécante hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"sech\"]},{\"key\":\"sinh\",\"mappings\":{\"default\":{\"default\":\"sinus hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"sinh\"]},{\"key\":\"tanh\",\"mappings\":{\"default\":{\"default\":\"tangente hyperbolique\"}},\"category\":\"Hyperbolic\",\"names\":[\"tanh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument cosinus hyperbolique\"}},\"key\":\"arcosh\",\"names\":[\"arcosh\",\"arccosh\",\"argch\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument cotangente hyperbolique\"}},\"key\":\"arcoth\",\"names\":[\"arcoth\",\"arccoth\",\"argcoth\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument cosécante hyperbolique\"}},\"key\":\"arcsch\",\"names\":[\"arcsch\",\"arccsch\",\"argcsch\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument sécante hyperbolique\"}},\"key\":\"arsech\",\"names\":[\"arsech\",\"arcsech\",\"argsech\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument sinus hyperbolique\"}},\"key\":\"arsinh\",\"names\":[\"arsinh\",\"arcsinh\",\"argsh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"argument tangente hyperbolique\"}},\"key\":\"artanh\",\"names\":[\"artanh\",\"arctanh\",\"argth\"]}]\n,\n\"fr/functions/trigonometry.js\": \n[{\"locale\":\"fr\"},{\"key\":\"cos\",\"mappings\":{\"default\":{\"default\":\"cosinus\"}},\"category\":\"Trigonometric\",\"names\":[\"cos\",\"cosine\"]},{\"key\":\"cot\",\"mappings\":{\"default\":{\"default\":\"cotangente\"}},\"category\":\"Trigonometric\",\"names\":[\"cot\"]},{\"key\":\"csc\",\"mappings\":{\"default\":{\"default\":\"cosécante\"}},\"category\":\"Trigonometric\",\"names\":[\"csc\"]},{\"key\":\"sec\",\"mappings\":{\"default\":{\"default\":\"sécante\"}},\"category\":\"Trigonometric\",\"names\":[\"sec\"]},{\"key\":\"sin\",\"mappings\":{\"default\":{\"default\":\"sinus\"}},\"category\":\"Trigonometric\",\"names\":[\"sin\",\"sine\"]},{\"key\":\"tan\",\"mappings\":{\"default\":{\"default\":\"tangente\"}},\"category\":\"Trigonometric\",\"names\":[\"tan\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cosinus\"}},\"key\":\"arccos\",\"names\":[\"arccos\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cotangente\"}},\"key\":\"arccot\",\"names\":[\"arccot\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc cosécante\"}},\"key\":\"arccsc\",\"names\":[\"arccsc\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc sécante\"}},\"key\":\"arcsec\",\"names\":[\"arcsec\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc sinus\"}},\"key\":\"arcsin\",\"names\":[\"arcsin\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"arc tangente\"}},\"key\":\"arctan\",\"names\":[\"arctan\"]}]\n,\n\"fr/symbols/digits_rest.js\": \n[{\"locale\":\"fr\"},{\"key\":\"00B2\",\"mappings\":{\"default\":{\"default\":\"au carré\"},\"mathspeak\":{\"default\":\"au carré\"},\"clearspeak\":{\"default\":\"au carré\"}},\"category\":\"No\"},{\"key\":\"00B3\",\"mappings\":{\"default\":{\"default\":\"cubique\"},\"mathspeak\":{\"default\":\"cubique\"},\"clearspeak\":{\"default\":\"cubique\"}},\"category\":\"No\"},{\"key\":\"00BC\",\"mappings\":{\"default\":{\"default\":\"un quart\"}},\"category\":\"No\"},{\"key\":\"00BD\",\"mappings\":{\"default\":{\"default\":\"un demi\"}},\"category\":\"No\"},{\"key\":\"00BE\",\"mappings\":{\"default\":{\"default\":\"trois quarts\"}},\"category\":\"No\"},{\"key\":\"2150\",\"mappings\":{\"default\":{\"default\":\"un septième\"}},\"category\":\"No\"},{\"key\":\"2151\",\"mappings\":{\"default\":{\"default\":\"un neuvième\"}},\"category\":\"No\"},{\"key\":\"2152\",\"mappings\":{\"default\":{\"default\":\"un dixième\"}},\"category\":\"No\"},{\"key\":\"2153\",\"mappings\":{\"default\":{\"default\":\"un tiers\"}},\"category\":\"No\"},{\"key\":\"2154\",\"mappings\":{\"default\":{\"default\":\"deux tiers\"}},\"category\":\"No\"},{\"key\":\"2155\",\"mappings\":{\"default\":{\"default\":\"un cinquième\"}},\"category\":\"No\"},{\"key\":\"2156\",\"mappings\":{\"default\":{\"default\":\"deux cinquièmes\"}},\"category\":\"No\"},{\"key\":\"2157\",\"mappings\":{\"default\":{\"default\":\"trois cinquièmes\"}},\"category\":\"No\"},{\"key\":\"2158\",\"mappings\":{\"default\":{\"default\":\"quatre cinquièmes\"}},\"category\":\"No\"},{\"key\":\"2159\",\"mappings\":{\"default\":{\"default\":\"un sixième\"}},\"category\":\"No\"},{\"key\":\"215A\",\"mappings\":{\"default\":{\"default\":\"cinq sixièmes\"}},\"category\":\"No\"},{\"key\":\"215B\",\"mappings\":{\"default\":{\"default\":\"un huitième\"}},\"category\":\"No\"},{\"key\":\"215C\",\"mappings\":{\"default\":{\"default\":\"trois huitièmes\"}},\"category\":\"No\"},{\"key\":\"215D\",\"mappings\":{\"default\":{\"default\":\"cinq huitièmes\"}},\"category\":\"No\"},{\"key\":\"215E\",\"mappings\":{\"default\":{\"default\":\"sept huitièmes\"}},\"category\":\"No\"},{\"key\":\"215F\",\"mappings\":{\"default\":{\"default\":\"numérateur un\"}},\"category\":\"No\"},{\"key\":\"2189\",\"mappings\":{\"default\":{\"default\":\"zero tiers\"}},\"category\":\"No\"},{\"key\":\"3248\",\"mappings\":{\"default\":{\"default\":\"dix cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"3249\",\"mappings\":{\"default\":{\"default\":\"vingt cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324A\",\"mappings\":{\"default\":{\"default\":\"trente cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324B\",\"mappings\":{\"default\":{\"default\":\"quarante cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324C\",\"mappings\":{\"default\":{\"default\":\"cinquante cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324D\",\"mappings\":{\"default\":{\"default\":\"soixante cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324E\",\"mappings\":{\"default\":{\"default\":\"soixante dix cerclé sur carré noir\"}},\"category\":\"No\"},{\"key\":\"324F\",\"mappings\":{\"default\":{\"default\":\"quatre vingts cerclé sur carré noir\"}},\"category\":\"No\"}]\n,\n\"fr/symbols/greek-rest.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Lu\",\"key\":\"0394\",\"mappings\":{\"clearspeak\":{\"default\":\"triangle\",\"TriangleSymbol_Delta\":\"Delta majuscule\"}}}]\n,\n\"fr/symbols/greek-scripts.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Ll\",\"key\":\"1D26\",\"mappings\":{\"default\":{\"default\":\"petite gamma majuscule\"}}},{\"category\":\"Ll\",\"key\":\"1D27\",\"mappings\":{\"default\":{\"default\":\"petite lambda majuscule\"}}},{\"category\":\"Ll\",\"key\":\"1D28\",\"mappings\":{\"default\":{\"default\":\"petite pi majuscule\"}}},{\"category\":\"Ll\",\"key\":\"1D29\",\"mappings\":{\"default\":{\"default\":\"petite rhô majuscule\"}}},{\"category\":\"Ll\",\"key\":\"1D2A\",\"mappings\":{\"default\":{\"default\":\"petite psi majuscule\"}}},{\"category\":\"Lm\",\"key\":\"1D5E\",\"mappings\":{\"default\":{\"default\":\"gamma suscript\"}}},{\"category\":\"Lm\",\"key\":\"1D60\",\"mappings\":{\"default\":{\"default\":\"phi suscript\"}}},{\"category\":\"Lm\",\"key\":\"1D66\",\"mappings\":{\"default\":{\"default\":\"bêta souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D67\",\"mappings\":{\"default\":{\"default\":\"gamma souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D68\",\"mappings\":{\"default\":{\"default\":\"rhô souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D69\",\"mappings\":{\"default\":{\"default\":\"phi souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D6A\",\"mappings\":{\"default\":{\"default\":\"khi souscrit\"}}}]\n,\n\"fr/symbols/greek-symbols.js\": \n[{\"locale\":\"fr\"},{\"key\":\"03D0\",\"mappings\":{\"default\":{\"default\":\"bêta grec\"}},\"category\":\"Ll\"},{\"key\":\"03D7\",\"mappings\":{\"default\":{\"default\":\"ligature kai\"}},\"category\":\"Ll\"},{\"key\":\"03F6\",\"mappings\":{\"default\":{\"default\":\"epsilon lunaire réfléchi\"}},\"category\":\"Sm\"},{\"category\":\"Lu\",\"key\":\"1D7CA\",\"mappings\":{\"default\":{\"default\":\"Digamma en gras\"}}},{\"category\":\"Ll\",\"key\":\"1D7CB\",\"mappings\":{\"default\":{\"default\":\"digamma en gras\"}}}]\n,\n\"fr/symbols/hebrew_letters.js\": \n[{\"locale\":\"fr\"},{\"key\":\"2135\",\"mappings\":{\"default\":{\"default\":\"alef\"}},\"category\":\"Lo\"},{\"key\":\"2136\",\"mappings\":{\"default\":{\"default\":\"bèt\"}},\"category\":\"Lo\"},{\"key\":\"2137\",\"mappings\":{\"default\":{\"default\":\"guimel\"}},\"category\":\"Lo\"},{\"key\":\"2138\",\"mappings\":{\"default\":{\"default\":\"dalèt\"}},\"category\":\"Lo\"}]\n,\n\"fr/symbols/latin-lower-double-accent.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Ll\",\"key\":\"01D6\",\"mappings\":{\"default\":{\"default\":\"u trémaa et macron\"}}},{\"category\":\"Ll\",\"key\":\"01D8\",\"mappings\":{\"default\":{\"default\":\"u trémaa et accent aigu\"}}},{\"category\":\"Ll\",\"key\":\"01DA\",\"mappings\":{\"default\":{\"default\":\"u trémaa et caron\"}}},{\"category\":\"Ll\",\"key\":\"01DC\",\"mappings\":{\"default\":{\"default\":\"u trémaa et accent grave\"}}},{\"category\":\"Ll\",\"key\":\"01DF\",\"mappings\":{\"default\":{\"default\":\"a trémaa et macron\"}}},{\"category\":\"Ll\",\"key\":\"01E1\",\"mappings\":{\"default\":{\"default\":\"a point en chef et macron\"}}},{\"category\":\"Ll\",\"key\":\"01ED\",\"mappings\":{\"default\":{\"default\":\"o ogonek et macron\"}}},{\"category\":\"Ll\",\"key\":\"01FB\",\"mappings\":{\"default\":{\"default\":\"a rond en chef et accent aigu\"}}},{\"category\":\"Ll\",\"key\":\"022B\",\"mappings\":{\"default\":{\"default\":\"o tréma et macron\"}}},{\"category\":\"Ll\",\"key\":\"022D\",\"mappings\":{\"default\":{\"default\":\"o tilde et macron\"}}},{\"category\":\"Ll\",\"key\":\"0231\",\"mappings\":{\"default\":{\"default\":\"o point en chef et macron\"}}},{\"key\":\"1E09\",\"mappings\":{\"default\":{\"default\":\"c cédille et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E15\",\"mappings\":{\"default\":{\"default\":\"e macron et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1E17\",\"mappings\":{\"default\":{\"default\":\"e macron et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E1D\",\"mappings\":{\"default\":{\"default\":\"e cédille et brève\"}},\"category\":\"Ll\"},{\"key\":\"1E2F\",\"mappings\":{\"default\":{\"default\":\"i tréma et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E39\",\"mappings\":{\"default\":{\"default\":\"l point souscrit et macron\"}},\"category\":\"Ll\"},{\"key\":\"1E4D\",\"mappings\":{\"default\":{\"default\":\"o tilde et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E4F\",\"mappings\":{\"default\":{\"default\":\"o tilde et tréma\"}},\"category\":\"Ll\"},{\"key\":\"1E51\",\"mappings\":{\"default\":{\"default\":\"o macron et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1E53\",\"mappings\":{\"default\":{\"default\":\"o macron et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E5D\",\"mappings\":{\"default\":{\"default\":\"r point souscrit et macron\"}},\"category\":\"Ll\"},{\"key\":\"1E65\",\"mappings\":{\"default\":{\"default\":\"s accent aigu et point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E67\",\"mappings\":{\"default\":{\"default\":\"s caron et point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E69\",\"mappings\":{\"default\":{\"default\":\"s point souscrit et point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E79\",\"mappings\":{\"default\":{\"default\":\"u tilde et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E7B\",\"mappings\":{\"default\":{\"default\":\"u macron et tréma\"}},\"category\":\"Ll\"},{\"key\":\"1EA5\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1EA7\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EA9\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe et crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EAB\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe et tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EAD\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe et point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EAF\",\"mappings\":{\"default\":{\"default\":\"a brève et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1EB1\",\"mappings\":{\"default\":{\"default\":\"a brève et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EB3\",\"mappings\":{\"default\":{\"default\":\"a brève et crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EB5\",\"mappings\":{\"default\":{\"default\":\"a brève et tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EB7\",\"mappings\":{\"default\":{\"default\":\"a brève et point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EBF\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1EC1\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EC3\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe et crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EC5\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe et tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EC7\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe et point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1ED1\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe et accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1ED3\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe et accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1ED5\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe et crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1ED7\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe et tilde\"}},\"category\":\"Ll\"},{\"key\":\"1ED9\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe et point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EDB\",\"mappings\":{\"default\":{\"default\":\"o cornu accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1EDD\",\"mappings\":{\"default\":{\"default\":\"o cornu accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EDF\",\"mappings\":{\"default\":{\"default\":\"o cornu crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EE1\",\"mappings\":{\"default\":{\"default\":\"o cornu tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EE3\",\"mappings\":{\"default\":{\"default\":\"o cornu point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EE9\",\"mappings\":{\"default\":{\"default\":\"u cornu accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1EEB\",\"mappings\":{\"default\":{\"default\":\"u cornu accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EED\",\"mappings\":{\"default\":{\"default\":\"u cornu crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EEF\",\"mappings\":{\"default\":{\"default\":\"u cornu tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EF1\",\"mappings\":{\"default\":{\"default\":\"u cornu point souscrit\"}},\"category\":\"Ll\"}]\n,\n\"fr/symbols/latin-lower-phonetic.js\": \n[{\"locale\":\"fr\"},{\"key\":\"00F8\",\"mappings\":{\"default\":{\"default\":\"o barré\"}},\"category\":\"Ll\"},{\"key\":\"0111\",\"mappings\":{\"default\":{\"default\":\"d barré\"}},\"category\":\"Ll\"},{\"key\":\"0127\",\"mappings\":{\"default\":{\"default\":\"h barré\"}},\"category\":\"Ll\"},{\"key\":\"0142\",\"mappings\":{\"default\":{\"default\":\"l barré\"}},\"category\":\"Ll\"},{\"key\":\"0167\",\"mappings\":{\"default\":{\"default\":\"t barré\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0180\",\"mappings\":{\"default\":{\"default\":\"b barré\"}}},{\"key\":\"019B\",\"mappings\":{\"default\":{\"default\":\"lambda barré\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01B6\",\"mappings\":{\"default\":{\"default\":\"z barré\"}}},{\"category\":\"Ll\",\"key\":\"01BE\",\"mappings\":{\"default\":{\"default\":\"coup de glotte barré culbuté\"}}},{\"category\":\"Ll\",\"key\":\"01E5\",\"mappings\":{\"default\":{\"default\":\"g barré\"}}},{\"category\":\"Ll\",\"key\":\"01FF\",\"mappings\":{\"default\":{\"default\":\"o barré accent aigu\"}}},{\"category\":\"Ll\",\"key\":\"023C\",\"mappings\":{\"default\":{\"default\":\"c barré\"}}},{\"category\":\"Ll\",\"key\":\"0247\",\"mappings\":{\"default\":{\"default\":\"e barré\"}}},{\"category\":\"Ll\",\"key\":\"0249\",\"mappings\":{\"default\":{\"default\":\"j barré\"}}},{\"category\":\"Ll\",\"key\":\"024D\",\"mappings\":{\"default\":{\"default\":\"r barré\"}}},{\"category\":\"Ll\",\"key\":\"024F\",\"mappings\":{\"default\":{\"default\":\"y barré\"}}},{\"category\":\"Ll\",\"key\":\"025F\",\"mappings\":{\"default\":{\"default\":\"j sans point barré\"}}},{\"category\":\"Ll\",\"key\":\"0268\",\"mappings\":{\"default\":{\"default\":\"i barré\"}}},{\"category\":\"Ll\",\"key\":\"0284\",\"mappings\":{\"default\":{\"default\":\"j sans point barré crosse\"}}},{\"category\":\"Ll\",\"key\":\"02A1\",\"mappings\":{\"default\":{\"default\":\"coup de glotte barré\"}}},{\"category\":\"Ll\",\"key\":\"02A2\",\"mappings\":{\"default\":{\"default\":\"coup de glotte barré réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"1D13\",\"mappings\":{\"default\":{\"default\":\"o couché barré obliquement\"}}},{\"category\":\"Ll\",\"key\":\"1D7C\",\"mappings\":{\"default\":{\"default\":\"iota barré\"}}},{\"category\":\"Ll\",\"key\":\"1D7D\",\"mappings\":{\"default\":{\"default\":\"p barré\"}}},{\"category\":\"Ll\",\"key\":\"1D7F\",\"mappings\":{\"default\":{\"default\":\"upsilon barré\"}}},{\"category\":\"Ll\",\"key\":\"1E9C\",\"mappings\":{\"default\":{\"default\":\"s long à barre diagonale\"}}},{\"category\":\"Ll\",\"key\":\"1E9D\",\"mappings\":{\"default\":{\"default\":\"s long à barre haute\"}}},{\"category\":\"Ll\",\"key\":\"018D\",\"mappings\":{\"default\":{\"default\":\"delta culbutée\"}}},{\"key\":\"1E9B\",\"mappings\":{\"default\":{\"default\":\"s long point en chef\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"1E9F\",\"mappings\":{\"default\":{\"default\":\"delta\"}}},{\"key\":\"0138\",\"mappings\":{\"default\":{\"default\":\"kra\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"017F\",\"mappings\":{\"default\":{\"default\":\"s long\"}}},{\"category\":\"Ll\",\"key\":\"0183\",\"mappings\":{\"default\":{\"default\":\"b potence\"}}},{\"category\":\"Ll\",\"key\":\"0185\",\"mappings\":{\"default\":{\"default\":\"sixiéme ton\"}}},{\"category\":\"Ll\",\"key\":\"0188\",\"mappings\":{\"default\":{\"default\":\"c crosse\"}}},{\"category\":\"Ll\",\"key\":\"018C\",\"mappings\":{\"default\":{\"default\":\"d potence\"}}},{\"key\":\"0192\",\"mappings\":{\"default\":{\"default\":\"f cursif\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0195\",\"mappings\":{\"default\":{\"default\":\"hv (Hwair)\"}}},{\"category\":\"Ll\",\"key\":\"0199\",\"mappings\":{\"default\":{\"default\":\"k crosse\"}}},{\"key\":\"019A\",\"mappings\":{\"default\":{\"default\":\"l rayé\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"019E\",\"mappings\":{\"default\":{\"default\":\"n à long jambage de droite\"}}},{\"category\":\"Ll\",\"key\":\"01A1\",\"mappings\":{\"default\":{\"default\":\"o cornu\"}}},{\"category\":\"Ll\",\"key\":\"01A3\",\"mappings\":{\"default\":{\"default\":\"gha\"}}},{\"category\":\"Ll\",\"key\":\"01A5\",\"mappings\":{\"default\":{\"default\":\"p crosse\"}}},{\"category\":\"Ll\",\"key\":\"01A8\",\"mappings\":{\"default\":{\"default\":\"deuxiéme ton\"}}},{\"category\":\"Ll\",\"key\":\"01AA\",\"mappings\":{\"default\":{\"default\":\"ech réfléchi bouclé\"}}},{\"category\":\"Ll\",\"key\":\"01AB\",\"mappings\":{\"default\":{\"default\":\"t hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"01AD\",\"mappings\":{\"default\":{\"default\":\"t crosse\"}}},{\"category\":\"Ll\",\"key\":\"01B0\",\"mappings\":{\"default\":{\"default\":\"u cornu\"}}},{\"category\":\"Ll\",\"key\":\"01B4\",\"mappings\":{\"default\":{\"default\":\"y crosse\"}}},{\"category\":\"Ll\",\"key\":\"01B9\",\"mappings\":{\"default\":{\"default\":\"ej réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"01BA\",\"mappings\":{\"default\":{\"default\":\"ej hameçon\"}}},{\"category\":\"Ll\",\"key\":\"01BD\",\"mappings\":{\"default\":{\"default\":\"cinquiéme tun\"}}},{\"category\":\"Ll\",\"key\":\"01BF\",\"mappings\":{\"default\":{\"default\":\"wynn\"}}},{\"category\":\"Ll\",\"key\":\"01C6\",\"mappings\":{\"default\":{\"default\":\"dz caron\"}}},{\"category\":\"Ll\",\"key\":\"01C9\",\"mappings\":{\"default\":{\"default\":\"lj\"}}},{\"category\":\"Ll\",\"key\":\"01CC\",\"mappings\":{\"default\":{\"default\":\"nj\"}}},{\"category\":\"Ll\",\"key\":\"01E3\",\"mappings\":{\"default\":{\"default\":\"ae macron\"}}},{\"category\":\"Ll\",\"key\":\"01EF\",\"mappings\":{\"default\":{\"default\":\"ej caron\"}}},{\"category\":\"Ll\",\"key\":\"01F3\",\"mappings\":{\"default\":{\"default\":\"dz\"}}},{\"category\":\"Ll\",\"key\":\"021D\",\"mappings\":{\"default\":{\"default\":\"yogh\"}}},{\"category\":\"Ll\",\"key\":\"026E\",\"mappings\":{\"default\":{\"default\":\"lej\"}}},{\"category\":\"Ll\",\"key\":\"0292\",\"mappings\":{\"default\":{\"default\":\"ej\"}}},{\"category\":\"Ll\",\"key\":\"0293\",\"mappings\":{\"default\":{\"default\":\"ej bouclé\"}}},{\"category\":\"Ll\",\"key\":\"02A4\",\"mappings\":{\"default\":{\"default\":\"digramme Dej\"}}},{\"category\":\"Ll\",\"key\":\"01DD\",\"mappings\":{\"default\":{\"default\":\"e culbuté\"}}},{\"category\":\"Ll\",\"key\":\"01FD\",\"mappings\":{\"default\":{\"default\":\"ae accent aigu (ash)\"}}},{\"category\":\"Ll\",\"key\":\"0221\",\"mappings\":{\"default\":{\"default\":\"d bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0223\",\"mappings\":{\"default\":{\"default\":\"ou\"}}},{\"category\":\"Ll\",\"key\":\"0225\",\"mappings\":{\"default\":{\"default\":\"z crochet\"}}},{\"category\":\"Ll\",\"key\":\"0234\",\"mappings\":{\"default\":{\"default\":\"l bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0235\",\"mappings\":{\"default\":{\"default\":\"n bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0236\",\"mappings\":{\"default\":{\"default\":\"t bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0238\",\"mappings\":{\"default\":{\"default\":\"Ligature minuscule latine Db\"}}},{\"category\":\"Ll\",\"key\":\"0239\",\"mappings\":{\"default\":{\"default\":\"Ligature minuscule latine Qp\"}}},{\"category\":\"Ll\",\"key\":\"023F\",\"mappings\":{\"default\":{\"default\":\"s à paraphe\"}}},{\"category\":\"Ll\",\"key\":\"0240\",\"mappings\":{\"default\":{\"default\":\"z à paraphe\"}}},{\"category\":\"Ll\",\"key\":\"0242\",\"mappings\":{\"default\":{\"default\":\"coup de glotte\"}}},{\"category\":\"Ll\",\"key\":\"024B\",\"mappings\":{\"default\":{\"default\":\"q avec hameçon\"}}},{\"category\":\"Ll\",\"key\":\"0250\",\"mappings\":{\"default\":{\"default\":\"a culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0251\",\"mappings\":{\"default\":{\"default\":\"alpha\"}}},{\"category\":\"Ll\",\"key\":\"0252\",\"mappings\":{\"default\":{\"default\":\"alpha culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0253\",\"mappings\":{\"default\":{\"default\":\"b crosse\"}}},{\"category\":\"Ll\",\"key\":\"0254\",\"mappings\":{\"default\":{\"default\":\"o ouvert\"}}},{\"category\":\"Ll\",\"key\":\"0255\",\"mappings\":{\"default\":{\"default\":\"c bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0256\",\"mappings\":{\"default\":{\"default\":\"d hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0257\",\"mappings\":{\"default\":{\"default\":\"d crosse\"}}},{\"category\":\"Ll\",\"key\":\"0258\",\"mappings\":{\"default\":{\"default\":\"e réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"0259\",\"mappings\":{\"default\":{\"default\":\"schwa\"}}},{\"category\":\"Ll\",\"key\":\"025A\",\"mappings\":{\"default\":{\"default\":\"schwa crochet\"}}},{\"key\":\"025B\",\"mappings\":{\"default\":{\"default\":\"e ouvert\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"025C\",\"mappings\":{\"default\":{\"default\":\"epsilon réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"025D\",\"mappings\":{\"default\":{\"default\":\"epsilon réfléchi crochet\"}}},{\"category\":\"Ll\",\"key\":\"025E\",\"mappings\":{\"default\":{\"default\":\"epsilon réfléchi fermé\"}}},{\"category\":\"Ll\",\"key\":\"0260\",\"mappings\":{\"default\":{\"default\":\"g crosse\"}}},{\"category\":\"Ll\",\"key\":\"0261\",\"mappings\":{\"default\":{\"default\":\"g cursif\"}}},{\"category\":\"Ll\",\"key\":\"0263\",\"mappings\":{\"default\":{\"default\":\"gamma\"}}},{\"category\":\"Ll\",\"key\":\"0264\",\"mappings\":{\"default\":{\"default\":\"petit gamma\"}}},{\"category\":\"Ll\",\"key\":\"0265\",\"mappings\":{\"default\":{\"default\":\"h culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0266\",\"mappings\":{\"default\":{\"default\":\"h crosse\"}}},{\"category\":\"Ll\",\"key\":\"0267\",\"mappings\":{\"default\":{\"default\":\"eng crosse\"}}},{\"category\":\"Ll\",\"key\":\"0269\",\"mappings\":{\"default\":{\"default\":\"iota\"}}},{\"category\":\"Ll\",\"key\":\"026B\",\"mappings\":{\"default\":{\"default\":\"l tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"026C\",\"mappings\":{\"default\":{\"default\":\"l sanglé\"}}},{\"category\":\"Ll\",\"key\":\"026D\",\"mappings\":{\"default\":{\"default\":\"l hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"026F\",\"mappings\":{\"default\":{\"default\":\"m culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0270\",\"mappings\":{\"default\":{\"default\":\"m hampé culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0271\",\"mappings\":{\"default\":{\"default\":\"m hameçon\"}}},{\"category\":\"Ll\",\"key\":\"0272\",\"mappings\":{\"default\":{\"default\":\"n hameçon à gauche\"}}},{\"category\":\"Ll\",\"key\":\"0273\",\"mappings\":{\"default\":{\"default\":\"n hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0275\",\"mappings\":{\"default\":{\"default\":\"o barré\"}}},{\"category\":\"Ll\",\"key\":\"0277\",\"mappings\":{\"default\":{\"default\":\"oméga fermé\"}}},{\"category\":\"Ll\",\"key\":\"0278\",\"mappings\":{\"default\":{\"default\":\"phi\"}}},{\"category\":\"Ll\",\"key\":\"0279\",\"mappings\":{\"default\":{\"default\":\"r culbuté\"}}},{\"category\":\"Ll\",\"key\":\"027A\",\"mappings\":{\"default\":{\"default\":\"r prolongé culbuté\"}}},{\"category\":\"Ll\",\"key\":\"027B\",\"mappings\":{\"default\":{\"default\":\"r crosse culbuté\"}}},{\"category\":\"Ll\",\"key\":\"027C\",\"mappings\":{\"default\":{\"default\":\"r prolongé\"}}},{\"category\":\"Ll\",\"key\":\"027D\",\"mappings\":{\"default\":{\"default\":\"r hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"027E\",\"mappings\":{\"default\":{\"default\":\"r sans obit\"}}},{\"category\":\"Ll\",\"key\":\"027F\",\"mappings\":{\"default\":{\"default\":\"r sans obit réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"0282\",\"mappings\":{\"default\":{\"default\":\"s hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0283\",\"mappings\":{\"default\":{\"default\":\"ech\"}}},{\"category\":\"Ll\",\"key\":\"0285\",\"mappings\":{\"default\":{\"default\":\"r sans obit réfléchi hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0286\",\"mappings\":{\"default\":{\"default\":\"ech bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0287\",\"mappings\":{\"default\":{\"default\":\"t culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0288\",\"mappings\":{\"default\":{\"default\":\"t hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0289\",\"mappings\":{\"default\":{\"default\":\"u barré\"}}},{\"category\":\"Ll\",\"key\":\"028A\",\"mappings\":{\"default\":{\"default\":\"upsilon\"}}},{\"category\":\"Ll\",\"key\":\"028B\",\"mappings\":{\"default\":{\"default\":\"v de ronde\"}}},{\"category\":\"Ll\",\"key\":\"028C\",\"mappings\":{\"default\":{\"default\":\"v culbuté\"}}},{\"category\":\"Ll\",\"key\":\"028D\",\"mappings\":{\"default\":{\"default\":\"w culbuté\"}}},{\"category\":\"Ll\",\"key\":\"028E\",\"mappings\":{\"default\":{\"default\":\"y culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0290\",\"mappings\":{\"default\":{\"default\":\"z hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"0291\",\"mappings\":{\"default\":{\"default\":\"z bouclé\"}}},{\"category\":\"Ll\",\"key\":\"0295\",\"mappings\":{\"default\":{\"default\":\"coup de glotte réfléchi\"}}},{\"category\":\"Ll\",\"key\":\"0296\",\"mappings\":{\"default\":{\"default\":\"coup de glotte culbuté\"}}},{\"category\":\"Ll\",\"key\":\"0297\",\"mappings\":{\"default\":{\"default\":\"C étiré\"}}},{\"category\":\"Ll\",\"key\":\"0298\",\"mappings\":{\"default\":{\"default\":\"clic bilabial\"}}},{\"category\":\"Ll\",\"key\":\"029A\",\"mappings\":{\"default\":{\"default\":\"epsilon fermé\"}}},{\"category\":\"Ll\",\"key\":\"029E\",\"mappings\":{\"default\":{\"default\":\"k culbuté\"}}},{\"category\":\"Ll\",\"key\":\"02A0\",\"mappings\":{\"default\":{\"default\":\"q crosse\"}}},{\"category\":\"Ll\",\"key\":\"02A3\",\"mappings\":{\"default\":{\"default\":\"digramme Dz\"}}},{\"category\":\"Ll\",\"key\":\"02A5\",\"mappings\":{\"default\":{\"default\":\"digramme Dz bouclé\"}}},{\"category\":\"Ll\",\"key\":\"02A6\",\"mappings\":{\"default\":{\"default\":\"digramme Ts\"}}},{\"category\":\"Ll\",\"key\":\"02A7\",\"mappings\":{\"default\":{\"default\":\"digramme Tech\"}}},{\"category\":\"Ll\",\"key\":\"02A8\",\"mappings\":{\"default\":{\"default\":\"digramme Tc bouclé\"}}},{\"category\":\"Ll\",\"key\":\"02A9\",\"mappings\":{\"default\":{\"default\":\"digramme Feng\"}}},{\"category\":\"Ll\",\"key\":\"02AA\",\"mappings\":{\"default\":{\"default\":\"digramme Ls\"}}},{\"category\":\"Ll\",\"key\":\"02AB\",\"mappings\":{\"default\":{\"default\":\"digramme Lz\"}}},{\"category\":\"Ll\",\"key\":\"02AC\",\"mappings\":{\"default\":{\"default\":\"percussion bilabiale\"}}},{\"category\":\"Ll\",\"key\":\"02AD\",\"mappings\":{\"default\":{\"default\":\"percussion bidentale\"}}},{\"category\":\"Ll\",\"key\":\"02AE\",\"mappings\":{\"default\":{\"default\":\"h culbuté crosse réfléchie\"}}},{\"category\":\"Ll\",\"key\":\"02AF\",\"mappings\":{\"default\":{\"default\":\"h culbuté crosse réfléchie et hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D02\",\"mappings\":{\"default\":{\"default\":\"ae culbuté\"}}},{\"category\":\"Ll\",\"key\":\"1D08\",\"mappings\":{\"default\":{\"default\":\"epsilon culbuté\"}}},{\"category\":\"Ll\",\"key\":\"1D09\",\"mappings\":{\"default\":{\"default\":\"i culbuté\"}}},{\"category\":\"Ll\",\"key\":\"1D11\",\"mappings\":{\"default\":{\"default\":\"o couché\"}}},{\"category\":\"Ll\",\"key\":\"1D12\",\"mappings\":{\"default\":{\"default\":\"o ouvert couché\"}}},{\"category\":\"Ll\",\"key\":\"1D14\",\"mappings\":{\"default\":{\"default\":\"oe culbuté\"}}},{\"category\":\"Ll\",\"key\":\"1D16\",\"mappings\":{\"default\":{\"default\":\"moitié supérieure de o\"}}},{\"category\":\"Ll\",\"key\":\"1D17\",\"mappings\":{\"default\":{\"default\":\"moitié inférieure de o\"}}},{\"category\":\"Ll\",\"key\":\"1D1D\",\"mappings\":{\"default\":{\"default\":\"u couché\"}}},{\"category\":\"Ll\",\"key\":\"1D1E\",\"mappings\":{\"default\":{\"default\":\"u tréma couché\"}}},{\"category\":\"Ll\",\"key\":\"1D1F\",\"mappings\":{\"default\":{\"default\":\"m couché\"}}},{\"category\":\"Ll\",\"key\":\"1D24\",\"mappings\":{\"default\":{\"default\":\"fricative pharyngale voisée\"}}},{\"category\":\"Ll\",\"key\":\"1D25\",\"mappings\":{\"default\":{\"default\":\"aïn\"}}},{\"category\":\"Ll\",\"key\":\"1D6B\",\"mappings\":{\"default\":{\"default\":\"ue\"}}},{\"category\":\"Ll\",\"key\":\"1D6C\",\"mappings\":{\"default\":{\"default\":\"b tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D6D\",\"mappings\":{\"default\":{\"default\":\"d tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D6E\",\"mappings\":{\"default\":{\"default\":\"f tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D6F\",\"mappings\":{\"default\":{\"default\":\"m tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D70\",\"mappings\":{\"default\":{\"default\":\"n tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D71\",\"mappings\":{\"default\":{\"default\":\"p tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D72\",\"mappings\":{\"default\":{\"default\":\"r tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D73\",\"mappings\":{\"default\":{\"default\":\"r sans obit tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D74\",\"mappings\":{\"default\":{\"default\":\"s tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D75\",\"mappings\":{\"default\":{\"default\":\"t tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D76\",\"mappings\":{\"default\":{\"default\":\"z tilde médian\"}}},{\"category\":\"Ll\",\"key\":\"1D77\",\"mappings\":{\"default\":{\"default\":\"g culbuté\"}}},{\"category\":\"Ll\",\"key\":\"1D79\",\"mappings\":{\"default\":{\"default\":\"g insulaire\"}}},{\"category\":\"Ll\",\"key\":\"1D7A\",\"mappings\":{\"default\":{\"default\":\"th barré diagonalement\"}}},{\"category\":\"Ll\",\"key\":\"1D80\",\"mappings\":{\"default\":{\"default\":\"b hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D81\",\"mappings\":{\"default\":{\"default\":\"d hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D82\",\"mappings\":{\"default\":{\"default\":\"f hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D83\",\"mappings\":{\"default\":{\"default\":\"g hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D84\",\"mappings\":{\"default\":{\"default\":\"k hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D85\",\"mappings\":{\"default\":{\"default\":\"l hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D86\",\"mappings\":{\"default\":{\"default\":\"m hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D87\",\"mappings\":{\"default\":{\"default\":\"n hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D88\",\"mappings\":{\"default\":{\"default\":\"p hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D89\",\"mappings\":{\"default\":{\"default\":\"r hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8A\",\"mappings\":{\"default\":{\"default\":\"s hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8B\",\"mappings\":{\"default\":{\"default\":\"ech hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8C\",\"mappings\":{\"default\":{\"default\":\"v hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8D\",\"mappings\":{\"default\":{\"default\":\"x hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8E\",\"mappings\":{\"default\":{\"default\":\"z hameçon palatal\"}}},{\"category\":\"Ll\",\"key\":\"1D8F\",\"mappings\":{\"default\":{\"default\":\"a hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D90\",\"mappings\":{\"default\":{\"default\":\"alpha hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D91\",\"mappings\":{\"default\":{\"default\":\"d crosse et hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D92\",\"mappings\":{\"default\":{\"default\":\"e hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D93\",\"mappings\":{\"default\":{\"default\":\"epsilon hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D94\",\"mappings\":{\"default\":{\"default\":\"epsilon réfléchi hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D95\",\"mappings\":{\"default\":{\"default\":\"schwa hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D96\",\"mappings\":{\"default\":{\"default\":\"i hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D97\",\"mappings\":{\"default\":{\"default\":\"o ouvert hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D98\",\"mappings\":{\"default\":{\"default\":\"ech hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D99\",\"mappings\":{\"default\":{\"default\":\"u hameçon rétroflexe\"}}},{\"category\":\"Ll\",\"key\":\"1D9A\",\"mappings\":{\"default\":{\"default\":\"ej hameçon rétroflexe\"}}},{\"key\":\"0149\",\"mappings\":{\"default\":{\"default\":\"n précédée d'une apostrophe\"}},\"category\":\"Ll\"},{\"key\":\"014B\",\"mappings\":{\"default\":{\"default\":\"eng\"}},\"category\":\"Ll\"}]\n,\n\"fr/symbols/latin-lower-single-accent.js\": \n[{\"locale\":\"fr\"},{\"key\":\"00E0\",\"mappings\":{\"default\":{\"default\":\"a accent grave\"}},\"category\":\"Ll\"},{\"key\":\"00E1\",\"mappings\":{\"default\":{\"default\":\"a accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00E2\",\"mappings\":{\"default\":{\"default\":\"a accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"00E3\",\"mappings\":{\"default\":{\"default\":\"a tilde\"}},\"category\":\"Ll\"},{\"key\":\"00E4\",\"mappings\":{\"default\":{\"default\":\"a tréma\"}},\"category\":\"Ll\"},{\"key\":\"00E5\",\"mappings\":{\"default\":{\"default\":\"a rond en chef\"}},\"category\":\"Ll\"},{\"key\":\"00E7\",\"mappings\":{\"default\":{\"default\":\"c cédille\"}},\"category\":\"Ll\"},{\"key\":\"00E8\",\"mappings\":{\"default\":{\"default\":\"e accent grave\"}},\"category\":\"Ll\"},{\"key\":\"00E9\",\"mappings\":{\"default\":{\"default\":\"e accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00EA\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"00EB\",\"mappings\":{\"default\":{\"default\":\"e tréma\"}},\"category\":\"Ll\"},{\"key\":\"00EC\",\"mappings\":{\"default\":{\"default\":\"i accent grave\"}},\"category\":\"Ll\"},{\"key\":\"00ED\",\"mappings\":{\"default\":{\"default\":\"i accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00EE\",\"mappings\":{\"default\":{\"default\":\"i accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"00EF\",\"mappings\":{\"default\":{\"default\":\"i tréma\"}},\"category\":\"Ll\"},{\"key\":\"00F1\",\"mappings\":{\"default\":{\"default\":\"n tilde\"}},\"category\":\"Ll\"},{\"key\":\"00F2\",\"mappings\":{\"default\":{\"default\":\"o accent grave\"}},\"category\":\"Ll\"},{\"key\":\"00F3\",\"mappings\":{\"default\":{\"default\":\"o accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00F4\",\"mappings\":{\"default\":{\"default\":\"o accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"00F5\",\"mappings\":{\"default\":{\"default\":\"o tilde\"}},\"category\":\"Ll\"},{\"key\":\"00F6\",\"mappings\":{\"default\":{\"default\":\"o tréma\"}},\"category\":\"Ll\"},{\"key\":\"00F9\",\"mappings\":{\"default\":{\"default\":\"u accent grave\"}},\"category\":\"Ll\"},{\"key\":\"00FA\",\"mappings\":{\"default\":{\"default\":\"u accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00FB\",\"mappings\":{\"default\":{\"default\":\"u accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"00FC\",\"mappings\":{\"default\":{\"default\":\"u tréma\"}},\"category\":\"Ll\"},{\"key\":\"00FD\",\"mappings\":{\"default\":{\"default\":\"y accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"00FF\",\"mappings\":{\"default\":{\"default\":\"y tréma\"}},\"category\":\"Ll\"},{\"key\":\"0101\",\"mappings\":{\"default\":{\"default\":\"a macron\"}},\"category\":\"Ll\"},{\"key\":\"0103\",\"mappings\":{\"default\":{\"default\":\"a brève\"}},\"category\":\"Ll\"},{\"key\":\"0105\",\"mappings\":{\"default\":{\"default\":\"a ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0107\",\"mappings\":{\"default\":{\"default\":\"c accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"0109\",\"mappings\":{\"default\":{\"default\":\"c accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"010B\",\"mappings\":{\"default\":{\"default\":\"c point en chef\"}},\"category\":\"Ll\"},{\"key\":\"010D\",\"mappings\":{\"default\":{\"default\":\"c caron\"}},\"category\":\"Ll\"},{\"key\":\"010F\",\"mappings\":{\"default\":{\"default\":\"d caron\"}},\"category\":\"Ll\"},{\"key\":\"0113\",\"mappings\":{\"default\":{\"default\":\"e macron\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0115\",\"mappings\":{\"default\":{\"default\":\"e brève\"}}},{\"key\":\"0117\",\"mappings\":{\"default\":{\"default\":\"e point en chef\"}},\"category\":\"Ll\"},{\"key\":\"0119\",\"mappings\":{\"default\":{\"default\":\"e ogonek\"}},\"category\":\"Ll\"},{\"key\":\"011B\",\"mappings\":{\"default\":{\"default\":\"e caron\"}},\"category\":\"Ll\"},{\"key\":\"011D\",\"mappings\":{\"default\":{\"default\":\"g accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"011F\",\"mappings\":{\"default\":{\"default\":\"g brève\"}},\"category\":\"Ll\"},{\"key\":\"0121\",\"mappings\":{\"default\":{\"default\":\"g point en chef\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"0123\",\"mappings\":{\"default\":{\"default\":\"g cédille\"}}},{\"key\":\"0125\",\"mappings\":{\"default\":{\"default\":\"h accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"0129\",\"mappings\":{\"default\":{\"default\":\"i tilde\"}},\"category\":\"Ll\"},{\"key\":\"012B\",\"mappings\":{\"default\":{\"default\":\"i macron\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"012D\",\"mappings\":{\"default\":{\"default\":\"i brève\"}}},{\"key\":\"012F\",\"mappings\":{\"default\":{\"default\":\"i ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0131\",\"mappings\":{\"default\":{\"default\":\"i sans point\"}},\"category\":\"Ll\"},{\"key\":\"0135\",\"mappings\":{\"default\":{\"default\":\"j accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"0137\",\"mappings\":{\"default\":{\"default\":\"k cédille\"}},\"category\":\"Ll\"},{\"key\":\"013A\",\"mappings\":{\"default\":{\"default\":\"l accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"013C\",\"mappings\":{\"default\":{\"default\":\"l cédille\"}},\"category\":\"Ll\"},{\"key\":\"013E\",\"mappings\":{\"default\":{\"default\":\"l caron\"}},\"category\":\"Ll\"},{\"key\":\"0140\",\"mappings\":{\"default\":{\"default\":\"l point médian\"}},\"category\":\"Ll\"},{\"key\":\"0144\",\"mappings\":{\"default\":{\"default\":\"n accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"0146\",\"mappings\":{\"default\":{\"default\":\"n cédille\"}},\"category\":\"Ll\"},{\"key\":\"0148\",\"mappings\":{\"default\":{\"default\":\"n caron\"}},\"category\":\"Ll\"},{\"key\":\"014D\",\"mappings\":{\"default\":{\"default\":\"o macron\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"014F\",\"mappings\":{\"default\":{\"default\":\"o brève\"}}},{\"key\":\"0151\",\"mappings\":{\"default\":{\"default\":\"o avec double accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"0155\",\"mappings\":{\"default\":{\"default\":\"r accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"0157\",\"mappings\":{\"default\":{\"default\":\"r cédille\"}},\"category\":\"Ll\"},{\"key\":\"0159\",\"mappings\":{\"default\":{\"default\":\"r caron\"}},\"category\":\"Ll\"},{\"key\":\"015B\",\"mappings\":{\"default\":{\"default\":\"s accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"015D\",\"mappings\":{\"default\":{\"default\":\"s accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"015F\",\"mappings\":{\"default\":{\"default\":\"s cédille\"}},\"category\":\"Ll\"},{\"key\":\"0161\",\"mappings\":{\"default\":{\"default\":\"s caron\"}},\"category\":\"Ll\"},{\"key\":\"0163\",\"mappings\":{\"default\":{\"default\":\"t cédille\"}},\"category\":\"Ll\"},{\"key\":\"0165\",\"mappings\":{\"default\":{\"default\":\"t caron\"}},\"category\":\"Ll\"},{\"key\":\"0169\",\"mappings\":{\"default\":{\"default\":\"u tilde\"}},\"category\":\"Ll\"},{\"key\":\"016B\",\"mappings\":{\"default\":{\"default\":\"u macron\"}},\"category\":\"Ll\"},{\"key\":\"016D\",\"mappings\":{\"default\":{\"default\":\"u brève\"}},\"category\":\"Ll\"},{\"key\":\"016F\",\"mappings\":{\"default\":{\"default\":\"u rond en chef\"}},\"category\":\"Ll\"},{\"key\":\"0171\",\"mappings\":{\"default\":{\"default\":\"u avec double accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"0173\",\"mappings\":{\"default\":{\"default\":\"u ogonek\"}},\"category\":\"Ll\"},{\"key\":\"0175\",\"mappings\":{\"default\":{\"default\":\"w accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"0177\",\"mappings\":{\"default\":{\"default\":\"y accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"017A\",\"mappings\":{\"default\":{\"default\":\"z accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"017C\",\"mappings\":{\"default\":{\"default\":\"z point en chef\"}},\"category\":\"Ll\"},{\"key\":\"017E\",\"mappings\":{\"default\":{\"default\":\"z caron\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01CE\",\"mappings\":{\"default\":{\"default\":\"a caron\"}}},{\"category\":\"Ll\",\"key\":\"01D0\",\"mappings\":{\"default\":{\"default\":\"i caron\"}}},{\"category\":\"Ll\",\"key\":\"01D2\",\"mappings\":{\"default\":{\"default\":\"o caron\"}}},{\"category\":\"Ll\",\"key\":\"01D4\",\"mappings\":{\"default\":{\"default\":\"u caron\"}}},{\"category\":\"Ll\",\"key\":\"01E7\",\"mappings\":{\"default\":{\"default\":\"g caron\"}}},{\"category\":\"Ll\",\"key\":\"01E9\",\"mappings\":{\"default\":{\"default\":\"k caron\"}}},{\"category\":\"Ll\",\"key\":\"01EB\",\"mappings\":{\"default\":{\"default\":\"o ogonek\"}}},{\"category\":\"Ll\",\"key\":\"01F0\",\"mappings\":{\"default\":{\"default\":\"j caron\"}}},{\"key\":\"01F5\",\"mappings\":{\"default\":{\"default\":\"g accent aigu\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"01F9\",\"mappings\":{\"default\":{\"default\":\"n grave\"}}},{\"category\":\"Ll\",\"key\":\"0201\",\"mappings\":{\"default\":{\"default\":\"a double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"0203\",\"mappings\":{\"default\":{\"default\":\"a brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"0205\",\"mappings\":{\"default\":{\"default\":\"e double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"0207\",\"mappings\":{\"default\":{\"default\":\"e brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"0209\",\"mappings\":{\"default\":{\"default\":\"i double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"020B\",\"mappings\":{\"default\":{\"default\":\"i brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"020D\",\"mappings\":{\"default\":{\"default\":\"o double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"020F\",\"mappings\":{\"default\":{\"default\":\"o brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"0211\",\"mappings\":{\"default\":{\"default\":\"r double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"0213\",\"mappings\":{\"default\":{\"default\":\"r brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"0215\",\"mappings\":{\"default\":{\"default\":\"u double accent grave\"}}},{\"category\":\"Ll\",\"key\":\"0217\",\"mappings\":{\"default\":{\"default\":\"u brève renversée\"}}},{\"category\":\"Ll\",\"key\":\"0219\",\"mappings\":{\"default\":{\"default\":\"s virgule souscrite *\"}}},{\"category\":\"Ll\",\"key\":\"021B\",\"mappings\":{\"default\":{\"default\":\"t virgule souscrite *\"}}},{\"category\":\"Ll\",\"key\":\"021F\",\"mappings\":{\"default\":{\"default\":\"h caron\"}}},{\"category\":\"Ll\",\"key\":\"0227\",\"mappings\":{\"default\":{\"default\":\"a point en chef\"}}},{\"category\":\"Ll\",\"key\":\"0229\",\"mappings\":{\"default\":{\"default\":\"e cédille\"}}},{\"category\":\"Ll\",\"key\":\"022F\",\"mappings\":{\"default\":{\"default\":\"o point en chef\"}}},{\"category\":\"Ll\",\"key\":\"0233\",\"mappings\":{\"default\":{\"default\":\"y macron\"}}},{\"category\":\"Ll\",\"key\":\"0237\",\"mappings\":{\"default\":{\"default\":\"j sans point\"}}},{\"key\":\"1E01\",\"mappings\":{\"default\":{\"default\":\"a à rond souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E03\",\"mappings\":{\"default\":{\"default\":\"b point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E05\",\"mappings\":{\"default\":{\"default\":\"b point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E07\",\"mappings\":{\"default\":{\"default\":\"b ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E0B\",\"mappings\":{\"default\":{\"default\":\"d point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E0D\",\"mappings\":{\"default\":{\"default\":\"d point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E0F\",\"mappings\":{\"default\":{\"default\":\"d ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E11\",\"mappings\":{\"default\":{\"default\":\"d cédille\"}},\"category\":\"Ll\"},{\"key\":\"1E13\",\"mappings\":{\"default\":{\"default\":\"d accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E19\",\"mappings\":{\"default\":{\"default\":\"e accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E1B\",\"mappings\":{\"default\":{\"default\":\"e tilde souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E1F\",\"mappings\":{\"default\":{\"default\":\"f point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E21\",\"mappings\":{\"default\":{\"default\":\"g macron\"}},\"category\":\"Ll\"},{\"key\":\"1E23\",\"mappings\":{\"default\":{\"default\":\"h point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E25\",\"mappings\":{\"default\":{\"default\":\"h point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E27\",\"mappings\":{\"default\":{\"default\":\"h tréma\"}},\"category\":\"Ll\"},{\"key\":\"1E29\",\"mappings\":{\"default\":{\"default\":\"h cédille\"}},\"category\":\"Ll\"},{\"key\":\"1E2B\",\"mappings\":{\"default\":{\"default\":\"h brève souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E2D\",\"mappings\":{\"default\":{\"default\":\"i tilde souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E31\",\"mappings\":{\"default\":{\"default\":\"k accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E33\",\"mappings\":{\"default\":{\"default\":\"k point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E35\",\"mappings\":{\"default\":{\"default\":\"k ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E37\",\"mappings\":{\"default\":{\"default\":\"l point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E3B\",\"mappings\":{\"default\":{\"default\":\"l ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E3D\",\"mappings\":{\"default\":{\"default\":\"l accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E3F\",\"mappings\":{\"default\":{\"default\":\"m accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E41\",\"mappings\":{\"default\":{\"default\":\"m point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E43\",\"mappings\":{\"default\":{\"default\":\"m point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E45\",\"mappings\":{\"default\":{\"default\":\"n point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E47\",\"mappings\":{\"default\":{\"default\":\"n point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E49\",\"mappings\":{\"default\":{\"default\":\"n ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E4B\",\"mappings\":{\"default\":{\"default\":\"n accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E55\",\"mappings\":{\"default\":{\"default\":\"p accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E57\",\"mappings\":{\"default\":{\"default\":\"p point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E59\",\"mappings\":{\"default\":{\"default\":\"r point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E5B\",\"mappings\":{\"default\":{\"default\":\"r point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E5F\",\"mappings\":{\"default\":{\"default\":\"r ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E61\",\"mappings\":{\"default\":{\"default\":\"s point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E63\",\"mappings\":{\"default\":{\"default\":\"s point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E6B\",\"mappings\":{\"default\":{\"default\":\"t point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E6D\",\"mappings\":{\"default\":{\"default\":\"t point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E6F\",\"mappings\":{\"default\":{\"default\":\"t ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E71\",\"mappings\":{\"default\":{\"default\":\"t accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E73\",\"mappings\":{\"default\":{\"default\":\"u tréma souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E75\",\"mappings\":{\"default\":{\"default\":\"u tilde souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E77\",\"mappings\":{\"default\":{\"default\":\"u accent circonflexe souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E7D\",\"mappings\":{\"default\":{\"default\":\"v tilde\"}},\"category\":\"Ll\"},{\"key\":\"1E7F\",\"mappings\":{\"default\":{\"default\":\"v point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E81\",\"mappings\":{\"default\":{\"default\":\"w accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1E83\",\"mappings\":{\"default\":{\"default\":\"w accent aigu\"}},\"category\":\"Ll\"},{\"key\":\"1E85\",\"mappings\":{\"default\":{\"default\":\"w tréma\"}},\"category\":\"Ll\"},{\"key\":\"1E87\",\"mappings\":{\"default\":{\"default\":\"w point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E89\",\"mappings\":{\"default\":{\"default\":\"w point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E8B\",\"mappings\":{\"default\":{\"default\":\"x point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E8D\",\"mappings\":{\"default\":{\"default\":\"x tréma\"}},\"category\":\"Ll\"},{\"key\":\"1E8F\",\"mappings\":{\"default\":{\"default\":\"y point en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E91\",\"mappings\":{\"default\":{\"default\":\"z accent circonflexe\"}},\"category\":\"Ll\"},{\"key\":\"1E93\",\"mappings\":{\"default\":{\"default\":\"z point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1E95\",\"mappings\":{\"default\":{\"default\":\"z ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E96\",\"mappings\":{\"default\":{\"default\":\"h ligne souscrite\"}},\"category\":\"Ll\"},{\"key\":\"1E97\",\"mappings\":{\"default\":{\"default\":\"t tréma\"}},\"category\":\"Ll\"},{\"key\":\"1E98\",\"mappings\":{\"default\":{\"default\":\"w rond en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E99\",\"mappings\":{\"default\":{\"default\":\"y rond en chef\"}},\"category\":\"Ll\"},{\"key\":\"1E9A\",\"mappings\":{\"default\":{\"default\":\"a demi rond à droite\"}},\"category\":\"Ll\"},{\"key\":\"1EA1\",\"mappings\":{\"default\":{\"default\":\"a point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EA3\",\"mappings\":{\"default\":{\"default\":\"a crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EB9\",\"mappings\":{\"default\":{\"default\":\"e point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EBB\",\"mappings\":{\"default\":{\"default\":\"e crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EBD\",\"mappings\":{\"default\":{\"default\":\"e tilde\"}},\"category\":\"Ll\"},{\"key\":\"1EC9\",\"mappings\":{\"default\":{\"default\":\"i crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1ECB\",\"mappings\":{\"default\":{\"default\":\"i point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1ECD\",\"mappings\":{\"default\":{\"default\":\"o point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1ECF\",\"mappings\":{\"default\":{\"default\":\"o crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EE5\",\"mappings\":{\"default\":{\"default\":\"u point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EE7\",\"mappings\":{\"default\":{\"default\":\"u crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EF3\",\"mappings\":{\"default\":{\"default\":\"y accent grave\"}},\"category\":\"Ll\"},{\"key\":\"1EF5\",\"mappings\":{\"default\":{\"default\":\"y point souscrit\"}},\"category\":\"Ll\"},{\"key\":\"1EF7\",\"mappings\":{\"default\":{\"default\":\"y crochet en chef\"}},\"category\":\"Ll\"},{\"key\":\"1EF9\",\"mappings\":{\"default\":{\"default\":\"y tilde\"}},\"category\":\"Ll\"}]\n,\n\"fr/symbols/latin-rest.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Ll\",\"key\":\"210E\",\"mappings\":{\"default\":{\"default\":\"constante de planck\"}}},{\"category\":\"Mn\",\"key\":\"0363\",\"mappings\":{\"default\":{\"default\":\"diacritique a\"}}},{\"category\":\"Mn\",\"key\":\"0364\",\"mappings\":{\"default\":{\"default\":\"diacritique e\"}}},{\"category\":\"Mn\",\"key\":\"0365\",\"mappings\":{\"default\":{\"default\":\"diacritique i\"}}},{\"category\":\"Mn\",\"key\":\"0366\",\"mappings\":{\"default\":{\"default\":\"diacritique o\"}}},{\"category\":\"Mn\",\"key\":\"0367\",\"mappings\":{\"default\":{\"default\":\"diacritique u\"}}},{\"category\":\"Mn\",\"key\":\"0368\",\"mappings\":{\"default\":{\"default\":\"diacritique c\"}}},{\"category\":\"Mn\",\"key\":\"0369\",\"mappings\":{\"default\":{\"default\":\"diacritique d\"}}},{\"category\":\"Mn\",\"key\":\"036A\",\"mappings\":{\"default\":{\"default\":\"diacritique h\"}}},{\"category\":\"Mn\",\"key\":\"036B\",\"mappings\":{\"default\":{\"default\":\"diacritique m\"}}},{\"category\":\"Mn\",\"key\":\"036C\",\"mappings\":{\"default\":{\"default\":\"diacritique r\"}}},{\"category\":\"Mn\",\"key\":\"036D\",\"mappings\":{\"default\":{\"default\":\"diacritique t\"}}},{\"category\":\"Mn\",\"key\":\"036E\",\"mappings\":{\"default\":{\"default\":\"diacritique v\"}}},{\"category\":\"Mn\",\"key\":\"036F\",\"mappings\":{\"default\":{\"default\":\"diacritique x\"}}},{\"category\":\"Lm\",\"key\":\"1D62\",\"mappings\":{\"default\":{\"default\":\"i souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D63\",\"mappings\":{\"default\":{\"default\":\"r souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D64\",\"mappings\":{\"default\":{\"default\":\"u souscrit\"}}},{\"category\":\"Lm\",\"key\":\"1D65\",\"mappings\":{\"default\":{\"default\":\"v souscrit\"}}},{\"category\":\"Mn\",\"key\":\"1DCA\",\"mappings\":{\"default\":{\"default\":\"diacritique r souscrite\"}}},{\"category\":\"Mn\",\"key\":\"1DD3\",\"mappings\":{\"default\":{\"default\":\"diacritique a ouvert aplati suscrit\"}}},{\"category\":\"Mn\",\"key\":\"1DD4\",\"mappings\":{\"default\":{\"default\":\"diacritique ae\"}}},{\"category\":\"Mn\",\"key\":\"1DD5\",\"mappings\":{\"default\":{\"default\":\"diacritique ao\"}}},{\"category\":\"Mn\",\"key\":\"1DD6\",\"mappings\":{\"default\":{\"default\":\"diacritique av\"}}},{\"category\":\"Mn\",\"key\":\"1DD7\",\"mappings\":{\"default\":{\"default\":\"diacritique c cédille\"}}},{\"category\":\"Mn\",\"key\":\"1DD8\",\"mappings\":{\"default\":{\"default\":\"diacritique d insulaire\"}}},{\"category\":\"Mn\",\"key\":\"1DD9\",\"mappings\":{\"default\":{\"default\":\"diacritique eth\"}}},{\"category\":\"Mn\",\"key\":\"1DDA\",\"mappings\":{\"default\":{\"default\":\"diacritique g\"}}},{\"category\":\"Mn\",\"key\":\"1DDB\",\"mappings\":{\"default\":{\"default\":\"diacritique petite g majuscule\"}}},{\"category\":\"Mn\",\"key\":\"1DDC\",\"mappings\":{\"default\":{\"default\":\"diacritique k\"}}},{\"category\":\"Mn\",\"key\":\"1DDD\",\"mappings\":{\"default\":{\"default\":\"diacritique l\"}}},{\"category\":\"Mn\",\"key\":\"1DDE\",\"mappings\":{\"default\":{\"default\":\"diacritique petite l majuscule\"}}},{\"category\":\"Mn\",\"key\":\"1DDF\",\"mappings\":{\"default\":{\"default\":\"diacritique petite m majuscule\"}}},{\"category\":\"Mn\",\"key\":\"1DE0\",\"mappings\":{\"default\":{\"default\":\"diacritique n\"}}},{\"category\":\"Mn\",\"key\":\"1DE1\",\"mappings\":{\"default\":{\"default\":\"diacritique petite n majuscule\"}}},{\"category\":\"Mn\",\"key\":\"1DE2\",\"mappings\":{\"default\":{\"default\":\"diacritique petite r majuscule\"}}},{\"category\":\"Mn\",\"key\":\"1DE3\",\"mappings\":{\"default\":{\"default\":\"diacritique r rotunda\"}}},{\"category\":\"Mn\",\"key\":\"1DE4\",\"mappings\":{\"default\":{\"default\":\"diacritique s\"}}},{\"category\":\"Mn\",\"key\":\"1DE5\",\"mappings\":{\"default\":{\"default\":\"diacritique s long\"}}},{\"category\":\"Mn\",\"key\":\"1DE6\",\"mappings\":{\"default\":{\"default\":\"diacritique z\"}}},{\"category\":\"Lm\",\"key\":\"2071\",\"mappings\":{\"default\":{\"default\":\"exposant i\"}}},{\"category\":\"Lm\",\"key\":\"207F\",\"mappings\":{\"default\":{\"default\":\"exposant n\"}}},{\"category\":\"Lm\",\"key\":\"2090\",\"mappings\":{\"default\":{\"default\":\"indice a\"}}},{\"category\":\"Lm\",\"key\":\"2091\",\"mappings\":{\"default\":{\"default\":\"indice e\"}}},{\"category\":\"Lm\",\"key\":\"2092\",\"mappings\":{\"default\":{\"default\":\"indice o\"}}},{\"category\":\"Lm\",\"key\":\"2093\",\"mappings\":{\"default\":{\"default\":\"indice x\"}}},{\"category\":\"Lm\",\"key\":\"2094\",\"mappings\":{\"default\":{\"default\":\"indice schwa\"}}},{\"category\":\"Lm\",\"key\":\"2095\",\"mappings\":{\"default\":{\"default\":\"souscrite h\"}}},{\"category\":\"Lm\",\"key\":\"2096\",\"mappings\":{\"default\":{\"default\":\"souscrite k\"}}},{\"category\":\"Lm\",\"key\":\"2097\",\"mappings\":{\"default\":{\"default\":\"souscrite l\"}}},{\"category\":\"Lm\",\"key\":\"2098\",\"mappings\":{\"default\":{\"default\":\"souscrite m\"}}},{\"category\":\"Lm\",\"key\":\"2099\",\"mappings\":{\"default\":{\"default\":\"souscrite n\"}}},{\"category\":\"Lm\",\"key\":\"209A\",\"mappings\":{\"default\":{\"default\":\"souscrite p\"}}},{\"category\":\"Lm\",\"key\":\"209B\",\"mappings\":{\"default\":{\"default\":\"souscrite s\"}}},{\"category\":\"Lm\",\"key\":\"209C\",\"mappings\":{\"default\":{\"default\":\"souscrite t\"}}},{\"category\":\"Lm\",\"key\":\"2C7C\",\"mappings\":{\"default\":{\"default\":\"j souscrite\"}}},{\"category\":\"So\",\"key\":\"1F12A\",\"mappings\":{\"default\":{\"default\":\"s majuscule en écaille crochetée\"}}},{\"category\":\"So\",\"key\":\"1F12B\",\"mappings\":{\"default\":{\"default\":\"c majuscule en italique cerclée\"}}},{\"category\":\"So\",\"key\":\"1F12C\",\"mappings\":{\"default\":{\"default\":\"r majuscule en italique cerclée\"}}},{\"category\":\"So\",\"key\":\"1F18A\",\"mappings\":{\"default\":{\"default\":\"P majuscule encadrée et en inversion avec croix\"}}}]\n,\n\"fr/symbols/latin-upper-double-accent.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Lu\",\"key\":\"01D5\",\"mappings\":{\"default\":{\"default\":\"U majuscule trémaa et macron\"}}},{\"category\":\"Lu\",\"key\":\"01D7\",\"mappings\":{\"default\":{\"default\":\"U majuscule trémaa et accent aigu\"}}},{\"category\":\"Lu\",\"key\":\"01D9\",\"mappings\":{\"default\":{\"default\":\"U majuscule trémaa et caron\"}}},{\"category\":\"Lu\",\"key\":\"01DB\",\"mappings\":{\"default\":{\"default\":\"U majuscule trémaa et accent grave\"}}},{\"category\":\"Lu\",\"key\":\"01DE\",\"mappings\":{\"default\":{\"default\":\"A majuscule trémaa et macron\"}}},{\"category\":\"Lu\",\"key\":\"01E0\",\"mappings\":{\"default\":{\"default\":\"A majuscule point en chef et macron\"}}},{\"category\":\"Lu\",\"key\":\"01EC\",\"mappings\":{\"default\":{\"default\":\"O majuscule ogonek et macron\"}}},{\"category\":\"Lu\",\"key\":\"01FA\",\"mappings\":{\"default\":{\"default\":\"A majuscule rond en chef et accent aigu\"}}},{\"category\":\"Lu\",\"key\":\"022A\",\"mappings\":{\"default\":{\"default\":\"O majuscule tréma et macron\"}}},{\"category\":\"Lu\",\"key\":\"022C\",\"mappings\":{\"default\":{\"default\":\"O majuscule tilde et macron\"}}},{\"category\":\"Lu\",\"key\":\"0230\",\"mappings\":{\"default\":{\"default\":\"O majuscule point en chef et macron\"}}},{\"key\":\"1E08\",\"mappings\":{\"default\":{\"default\":\"C cédille et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E14\",\"mappings\":{\"default\":{\"default\":\"E macron et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E16\",\"mappings\":{\"default\":{\"default\":\"E macron et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E1C\",\"mappings\":{\"default\":{\"default\":\"E cédille et brève majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E2E\",\"mappings\":{\"default\":{\"default\":\"I tréma et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E38\",\"mappings\":{\"default\":{\"default\":\"L point souscrit et macron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E4C\",\"mappings\":{\"default\":{\"default\":\"O tilde et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E4E\",\"mappings\":{\"default\":{\"default\":\"O tilde et tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E50\",\"mappings\":{\"default\":{\"default\":\"O macron et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E52\",\"mappings\":{\"default\":{\"default\":\"O macron et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E5C\",\"mappings\":{\"default\":{\"default\":\"R point souscrit et macron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E64\",\"mappings\":{\"default\":{\"default\":\"S accent aigu et point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E66\",\"mappings\":{\"default\":{\"default\":\"S caron et point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E68\",\"mappings\":{\"default\":{\"default\":\"S point souscrit et point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E78\",\"mappings\":{\"default\":{\"default\":\"U tilde et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E7A\",\"mappings\":{\"default\":{\"default\":\"U macron et tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EA4\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EA6\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EA8\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe et crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EAA\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe et tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EAC\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe et point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EAE\",\"mappings\":{\"default\":{\"default\":\"A brève et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EB0\",\"mappings\":{\"default\":{\"default\":\"A brève et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EB2\",\"mappings\":{\"default\":{\"default\":\"A brève et crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EB4\",\"mappings\":{\"default\":{\"default\":\"A brève et tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EB6\",\"mappings\":{\"default\":{\"default\":\"A brève et point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EBE\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EC0\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EC2\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe et crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EC4\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe et tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EC6\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe et point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ED0\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe et accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ED2\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe et accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ED4\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe et crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ED6\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe et tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ED8\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe et point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EDA\",\"mappings\":{\"default\":{\"default\":\"O cornu accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EDC\",\"mappings\":{\"default\":{\"default\":\"O cornu accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EDE\",\"mappings\":{\"default\":{\"default\":\"O cornu crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EE0\",\"mappings\":{\"default\":{\"default\":\"O cornu tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EE2\",\"mappings\":{\"default\":{\"default\":\"O cornu point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EE8\",\"mappings\":{\"default\":{\"default\":\"U cornu accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EEA\",\"mappings\":{\"default\":{\"default\":\"U cornu accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EEC\",\"mappings\":{\"default\":{\"default\":\"U cornu crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EEE\",\"mappings\":{\"default\":{\"default\":\"U cornu tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EF0\",\"mappings\":{\"default\":{\"default\":\"U cornu point souscrit majuscule\"}},\"category\":\"Lu\"}]\n,\n\"fr/symbols/latin-upper-single-accent.js\": \n[{\"locale\":\"fr\"},{\"key\":\"00C0\",\"mappings\":{\"default\":{\"default\":\"A accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C1\",\"mappings\":{\"default\":{\"default\":\"A accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C2\",\"mappings\":{\"default\":{\"default\":\"A accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C3\",\"mappings\":{\"default\":{\"default\":\"A tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C4\",\"mappings\":{\"default\":{\"default\":\"A tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C5\",\"mappings\":{\"default\":{\"default\":\"angstrom\"}},\"category\":\"Lu\"},{\"key\":\"00C7\",\"mappings\":{\"default\":{\"default\":\"C cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C8\",\"mappings\":{\"default\":{\"default\":\"E accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00C9\",\"mappings\":{\"default\":{\"default\":\"E accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CA\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CB\",\"mappings\":{\"default\":{\"default\":\"E tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CC\",\"mappings\":{\"default\":{\"default\":\"I accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CD\",\"mappings\":{\"default\":{\"default\":\"I accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CE\",\"mappings\":{\"default\":{\"default\":\"I accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00CF\",\"mappings\":{\"default\":{\"default\":\"I tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D1\",\"mappings\":{\"default\":{\"default\":\"N tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D2\",\"mappings\":{\"default\":{\"default\":\"O accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D3\",\"mappings\":{\"default\":{\"default\":\"O accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D4\",\"mappings\":{\"default\":{\"default\":\"O accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D5\",\"mappings\":{\"default\":{\"default\":\"O tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D6\",\"mappings\":{\"default\":{\"default\":\"O tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00D9\",\"mappings\":{\"default\":{\"default\":\"U accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00DA\",\"mappings\":{\"default\":{\"default\":\"U accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00DB\",\"mappings\":{\"default\":{\"default\":\"U accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00DC\",\"mappings\":{\"default\":{\"default\":\"U tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"00DD\",\"mappings\":{\"default\":{\"default\":\"Y accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0100\",\"mappings\":{\"default\":{\"default\":\"A macron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0102\",\"mappings\":{\"default\":{\"default\":\"A brève majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0104\",\"mappings\":{\"default\":{\"default\":\"A ogonek majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0106\",\"mappings\":{\"default\":{\"default\":\"C accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0108\",\"mappings\":{\"default\":{\"default\":\"C accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"010A\",\"mappings\":{\"default\":{\"default\":\"C point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"010C\",\"mappings\":{\"default\":{\"default\":\"C caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"010E\",\"mappings\":{\"default\":{\"default\":\"D caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0112\",\"mappings\":{\"default\":{\"default\":\"E macron majuscule\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"0114\",\"mappings\":{\"default\":{\"default\":\"E brève majuscule\"}}},{\"key\":\"0116\",\"mappings\":{\"default\":{\"default\":\"E point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0118\",\"mappings\":{\"default\":{\"default\":\"E ogonek majuscule\"}},\"category\":\"Lu\"},{\"key\":\"011A\",\"mappings\":{\"default\":{\"default\":\"E caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"011C\",\"mappings\":{\"default\":{\"default\":\"G accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"011E\",\"mappings\":{\"default\":{\"default\":\"G brève majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0120\",\"mappings\":{\"default\":{\"default\":\"G point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0122\",\"mappings\":{\"default\":{\"default\":\"G cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0124\",\"mappings\":{\"default\":{\"default\":\"H accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0128\",\"mappings\":{\"default\":{\"default\":\"I tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"012A\",\"mappings\":{\"default\":{\"default\":\"I macron majuscule\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"012C\",\"mappings\":{\"default\":{\"default\":\"I brève majuscule\"}}},{\"key\":\"012E\",\"mappings\":{\"default\":{\"default\":\"I ogonek majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0130\",\"mappings\":{\"default\":{\"default\":\"I point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0134\",\"mappings\":{\"default\":{\"default\":\"J accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0136\",\"mappings\":{\"default\":{\"default\":\"K cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0139\",\"mappings\":{\"default\":{\"default\":\"L accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"013B\",\"mappings\":{\"default\":{\"default\":\"L cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"013D\",\"mappings\":{\"default\":{\"default\":\"L caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"013F\",\"mappings\":{\"default\":{\"default\":\"L point médian majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0143\",\"mappings\":{\"default\":{\"default\":\"N accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0145\",\"mappings\":{\"default\":{\"default\":\"N cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0147\",\"mappings\":{\"default\":{\"default\":\"N caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"014C\",\"mappings\":{\"default\":{\"default\":\"O macron majuscule\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"014E\",\"mappings\":{\"default\":{\"default\":\"O brève majuscule\"}}},{\"key\":\"0150\",\"mappings\":{\"default\":{\"default\":\"O avec double accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0154\",\"mappings\":{\"default\":{\"default\":\"R accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0156\",\"mappings\":{\"default\":{\"default\":\"R cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0158\",\"mappings\":{\"default\":{\"default\":\"R caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"015A\",\"mappings\":{\"default\":{\"default\":\"S accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"015C\",\"mappings\":{\"default\":{\"default\":\"S accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"015E\",\"mappings\":{\"default\":{\"default\":\"S cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0160\",\"mappings\":{\"default\":{\"default\":\"S caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0162\",\"mappings\":{\"default\":{\"default\":\"T cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0164\",\"mappings\":{\"default\":{\"default\":\"T caron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0168\",\"mappings\":{\"default\":{\"default\":\"U tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"016A\",\"mappings\":{\"default\":{\"default\":\"U macron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"016C\",\"mappings\":{\"default\":{\"default\":\"U brève majuscule\"}},\"category\":\"Lu\"},{\"key\":\"016E\",\"mappings\":{\"default\":{\"default\":\"U rond en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0170\",\"mappings\":{\"default\":{\"default\":\"U avec double accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0172\",\"mappings\":{\"default\":{\"default\":\"U ogonek majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0174\",\"mappings\":{\"default\":{\"default\":\"W accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0176\",\"mappings\":{\"default\":{\"default\":\"Y accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0178\",\"mappings\":{\"default\":{\"default\":\"Y tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"0179\",\"mappings\":{\"default\":{\"default\":\"Z accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"017B\",\"mappings\":{\"default\":{\"default\":\"Z point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"017D\",\"mappings\":{\"default\":{\"default\":\"Z caron majuscule\"}},\"category\":\"Lu\"},{\"category\":\"Lu\",\"key\":\"01CD\",\"mappings\":{\"default\":{\"default\":\"A caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01CF\",\"mappings\":{\"default\":{\"default\":\"I caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01D1\",\"mappings\":{\"default\":{\"default\":\"O caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01D3\",\"mappings\":{\"default\":{\"default\":\"U caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01E6\",\"mappings\":{\"default\":{\"default\":\"G caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01E8\",\"mappings\":{\"default\":{\"default\":\"K caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01EA\",\"mappings\":{\"default\":{\"default\":\"O ogonek majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01F4\",\"mappings\":{\"default\":{\"default\":\"G accent aigu majuscule\"}}},{\"category\":\"Lu\",\"key\":\"01F8\",\"mappings\":{\"default\":{\"default\":\"N grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0200\",\"mappings\":{\"default\":{\"default\":\"A double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0202\",\"mappings\":{\"default\":{\"default\":\"A brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0204\",\"mappings\":{\"default\":{\"default\":\"E double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0206\",\"mappings\":{\"default\":{\"default\":\"E brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0208\",\"mappings\":{\"default\":{\"default\":\"I double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"020A\",\"mappings\":{\"default\":{\"default\":\"I brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"020C\",\"mappings\":{\"default\":{\"default\":\"O double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"020E\",\"mappings\":{\"default\":{\"default\":\"O brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0210\",\"mappings\":{\"default\":{\"default\":\"R double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0212\",\"mappings\":{\"default\":{\"default\":\"R brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0214\",\"mappings\":{\"default\":{\"default\":\"U double accent grave majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0216\",\"mappings\":{\"default\":{\"default\":\"U brève renversée majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0218\",\"mappings\":{\"default\":{\"default\":\"S virgule souscrite * majuscule\"}}},{\"category\":\"Lu\",\"key\":\"021A\",\"mappings\":{\"default\":{\"default\":\"T virgule souscrite * majuscule\"}}},{\"category\":\"Lu\",\"key\":\"021E\",\"mappings\":{\"default\":{\"default\":\"H caron majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0226\",\"mappings\":{\"default\":{\"default\":\"A point en chef majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0228\",\"mappings\":{\"default\":{\"default\":\"E cédille majuscule\"}}},{\"category\":\"Lu\",\"key\":\"022E\",\"mappings\":{\"default\":{\"default\":\"O point en chef majuscule\"}}},{\"category\":\"Lu\",\"key\":\"0232\",\"mappings\":{\"default\":{\"default\":\"Y macron majuscule\"}}},{\"key\":\"1E00\",\"mappings\":{\"default\":{\"default\":\"A à rond souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E02\",\"mappings\":{\"default\":{\"default\":\"B point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E04\",\"mappings\":{\"default\":{\"default\":\"B point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E06\",\"mappings\":{\"default\":{\"default\":\"B ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E0A\",\"mappings\":{\"default\":{\"default\":\"D point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E0C\",\"mappings\":{\"default\":{\"default\":\"D point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E0E\",\"mappings\":{\"default\":{\"default\":\"D ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E10\",\"mappings\":{\"default\":{\"default\":\"D cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E12\",\"mappings\":{\"default\":{\"default\":\"D accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E18\",\"mappings\":{\"default\":{\"default\":\"E accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E1A\",\"mappings\":{\"default\":{\"default\":\"E tilde souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E1E\",\"mappings\":{\"default\":{\"default\":\"F point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E20\",\"mappings\":{\"default\":{\"default\":\"G macron majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E22\",\"mappings\":{\"default\":{\"default\":\"H point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E24\",\"mappings\":{\"default\":{\"default\":\"H point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E26\",\"mappings\":{\"default\":{\"default\":\"H tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E28\",\"mappings\":{\"default\":{\"default\":\"H cédille majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E2A\",\"mappings\":{\"default\":{\"default\":\"H brève souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E2C\",\"mappings\":{\"default\":{\"default\":\"I tilde souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E30\",\"mappings\":{\"default\":{\"default\":\"K accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E32\",\"mappings\":{\"default\":{\"default\":\"K point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E34\",\"mappings\":{\"default\":{\"default\":\"K ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E36\",\"mappings\":{\"default\":{\"default\":\"L point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E3A\",\"mappings\":{\"default\":{\"default\":\"L ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E3C\",\"mappings\":{\"default\":{\"default\":\"L accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E3E\",\"mappings\":{\"default\":{\"default\":\"M accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E40\",\"mappings\":{\"default\":{\"default\":\"M point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E42\",\"mappings\":{\"default\":{\"default\":\"M point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E44\",\"mappings\":{\"default\":{\"default\":\"N point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E46\",\"mappings\":{\"default\":{\"default\":\"N point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E48\",\"mappings\":{\"default\":{\"default\":\"N ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E4A\",\"mappings\":{\"default\":{\"default\":\"N accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E54\",\"mappings\":{\"default\":{\"default\":\"P accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E56\",\"mappings\":{\"default\":{\"default\":\"P point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E58\",\"mappings\":{\"default\":{\"default\":\"R point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E5A\",\"mappings\":{\"default\":{\"default\":\"R point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E5E\",\"mappings\":{\"default\":{\"default\":\"R ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E60\",\"mappings\":{\"default\":{\"default\":\"S point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E62\",\"mappings\":{\"default\":{\"default\":\"S point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E6A\",\"mappings\":{\"default\":{\"default\":\"T point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E6C\",\"mappings\":{\"default\":{\"default\":\"T point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E6E\",\"mappings\":{\"default\":{\"default\":\"T ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E70\",\"mappings\":{\"default\":{\"default\":\"T accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E72\",\"mappings\":{\"default\":{\"default\":\"U tréma souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E74\",\"mappings\":{\"default\":{\"default\":\"U tilde souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E76\",\"mappings\":{\"default\":{\"default\":\"U accent circonflexe souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E7C\",\"mappings\":{\"default\":{\"default\":\"V tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E7E\",\"mappings\":{\"default\":{\"default\":\"V point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E80\",\"mappings\":{\"default\":{\"default\":\"W accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E82\",\"mappings\":{\"default\":{\"default\":\"W accent aigu majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E84\",\"mappings\":{\"default\":{\"default\":\"W tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E86\",\"mappings\":{\"default\":{\"default\":\"W point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E88\",\"mappings\":{\"default\":{\"default\":\"W point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E8A\",\"mappings\":{\"default\":{\"default\":\"X point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E8C\",\"mappings\":{\"default\":{\"default\":\"X tréma majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E8E\",\"mappings\":{\"default\":{\"default\":\"Y point en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E90\",\"mappings\":{\"default\":{\"default\":\"Z accent circonflexe majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E92\",\"mappings\":{\"default\":{\"default\":\"Z point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1E94\",\"mappings\":{\"default\":{\"default\":\"Z ligne souscrite majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EA0\",\"mappings\":{\"default\":{\"default\":\"A point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EA2\",\"mappings\":{\"default\":{\"default\":\"A crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EB8\",\"mappings\":{\"default\":{\"default\":\"E point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EBA\",\"mappings\":{\"default\":{\"default\":\"E crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EBC\",\"mappings\":{\"default\":{\"default\":\"E tilde majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EC8\",\"mappings\":{\"default\":{\"default\":\"I crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ECA\",\"mappings\":{\"default\":{\"default\":\"I point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ECC\",\"mappings\":{\"default\":{\"default\":\"O point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1ECE\",\"mappings\":{\"default\":{\"default\":\"O crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EE4\",\"mappings\":{\"default\":{\"default\":\"U point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EE6\",\"mappings\":{\"default\":{\"default\":\"U crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EF2\",\"mappings\":{\"default\":{\"default\":\"Y accent grave majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EF4\",\"mappings\":{\"default\":{\"default\":\"Y point souscrit majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EF6\",\"mappings\":{\"default\":{\"default\":\"Y crochet en chef majuscule\"}},\"category\":\"Lu\"},{\"key\":\"1EF8\",\"mappings\":{\"default\":{\"default\":\"Y tilde majuscule\"}},\"category\":\"Lu\"}]\n,\n\"fr/symbols/math_angles.js\": \n[{\"locale\":\"fr\"},{\"key\":\"22BE\",\"mappings\":{\"default\":{\"default\":\"angle droit avec arc\"}},\"category\":\"Sm\"},{\"key\":\"237C\",\"mappings\":{\"default\":{\"default\":\"angle droit avec flèche en zigzag vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"27C0\",\"mappings\":{\"default\":{\"default\":\"angle tridimensionnel\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"299B\",\"mappings\":{\"default\":{\"default\":\"angle mesuré s'ouvrant vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"299C\",\"mappings\":{\"default\":{\"default\":\"variante d'angle avec carré\"}}},{\"key\":\"299D\",\"mappings\":{\"default\":{\"default\":\"angle droit mesuré pointé\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"299E\",\"mappings\":{\"default\":{\"default\":\"angle avec s inscrit\"}}},{\"category\":\"Sm\",\"key\":\"299F\",\"mappings\":{\"default\":{\"default\":\"angle aigu\"}}},{\"category\":\"Sm\",\"key\":\"29A0\",\"mappings\":{\"default\":{\"default\":\"angle sphérique s'ouvrant vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"29A1\",\"mappings\":{\"default\":{\"default\":\"angle sphérique s'ouvrant vers le haut\"}}},{\"category\":\"Sm\",\"key\":\"29A2\",\"mappings\":{\"default\":{\"default\":\"angle culbuté\"}}},{\"category\":\"Sm\",\"key\":\"29A3\",\"mappings\":{\"default\":{\"default\":\"angle réfléchi\"}}},{\"key\":\"29A4\",\"mappings\":{\"default\":{\"default\":\"angle à barre souscrite\"}},\"category\":\"Sm\"},{\"key\":\"29A5\",\"mappings\":{\"default\":{\"default\":\"angle à barre souscrite réfléchie\"}},\"category\":\"Sm\"},{\"key\":\"29A6\",\"mappings\":{\"default\":{\"default\":\"angle oblique s'ouvrant vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"29A7\",\"mappings\":{\"default\":{\"default\":\"angle oblique s'ouvrant vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"29A8\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers l'est et bras fléché vers le nord est\"}},\"category\":\"Sm\"},{\"key\":\"29A9\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers l'ouest et bras fléché vers le nord ouest\"}},\"category\":\"Sm\"},{\"key\":\"29AA\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers l'est et bras fléché vers le sud est\"}},\"category\":\"Sm\"},{\"key\":\"29AB\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers l'ouest et bras fléché vers le sud ouest\"}},\"category\":\"Sm\"},{\"key\":\"29AC\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers le nord et bras fléché vers le nord est\"}},\"category\":\"Sm\"},{\"key\":\"29AD\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers le nord et bras fléché vers le nord ouest\"}},\"category\":\"Sm\"},{\"key\":\"29AE\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers le sud et bras fléché vers le sud est\"}},\"category\":\"Sm\"},{\"key\":\"29AF\",\"mappings\":{\"default\":{\"default\":\"angle calculé à bras vers le sud et bras fléché vers le sud ouest\"}},\"category\":\"Sm\"}]\n,\n\"fr/symbols/math_arrows.js\": \n[{\"locale\":\"fr\"},{\"key\":\"2190\",\"mappings\":{\"default\":{\"default\":\"flèche gauche\"}},\"category\":\"Sm\"},{\"key\":\"2191\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"2192\",\"mappings\":{\"default\":{\"default\":\"flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"2193\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"2194\",\"mappings\":{\"default\":{\"default\":\"flèche bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"2195\",\"mappings\":{\"default\":{\"default\":\"flèche haut et bas\"}},\"category\":\"So\"},{\"key\":\"2196\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest\"}},\"category\":\"So\"},{\"key\":\"2197\",\"mappings\":{\"default\":{\"default\":\"flèche nord est\"}},\"category\":\"So\"},{\"key\":\"2198\",\"mappings\":{\"default\":{\"default\":\"flèche sud est\"}},\"category\":\"So\"},{\"key\":\"2199\",\"mappings\":{\"default\":{\"default\":\"flèche sud ouest\"}},\"category\":\"So\"},{\"key\":\"219A\",\"mappings\":{\"default\":{\"default\":\"flèche barrée gauche\"}},\"category\":\"Sm\"},{\"key\":\"219B\",\"mappings\":{\"default\":{\"default\":\"flèche barrée droite\"}},\"category\":\"Sm\"},{\"key\":\"219C\",\"mappings\":{\"default\":{\"default\":\"flèche ondulée gauche\"}},\"category\":\"So\"},{\"key\":\"219D\",\"mappings\":{\"default\":{\"default\":\"flèche ondulée droite\"}},\"category\":\"So\"},{\"key\":\"219E\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes gauche\"}},\"category\":\"So\"},{\"key\":\"219F\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers le haut\"}},\"category\":\"So\"},{\"key\":\"21A0\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes droite\"}},\"category\":\"Sm\"},{\"key\":\"21A1\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers le bas\"}},\"category\":\"So\"},{\"key\":\"21A2\",\"mappings\":{\"default\":{\"default\":\"flèche empennée gauche\"}},\"category\":\"So\"},{\"key\":\"21A3\",\"mappings\":{\"default\":{\"default\":\"flèche empennée droite\"}},\"category\":\"Sm\"},{\"key\":\"21A4\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet gauche\"}},\"category\":\"So\"},{\"key\":\"21A5\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet vers le haut\"}},\"category\":\"So\"},{\"key\":\"21A6\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet droite\"}},\"category\":\"Sm\"},{\"key\":\"21A7\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet vers le bas\"}},\"category\":\"So\"},{\"key\":\"21A8\",\"mappings\":{\"default\":{\"default\":\"flèche haut bas sur base\"}},\"category\":\"So\"},{\"key\":\"21A9\",\"mappings\":{\"default\":{\"default\":\"flèche avec crochet gauche\"}},\"category\":\"So\"},{\"key\":\"21AA\",\"mappings\":{\"default\":{\"default\":\"flèche avec crochet droite\"}},\"category\":\"So\"},{\"key\":\"21AB\",\"mappings\":{\"default\":{\"default\":\"flèche avec boucle gauche\"}},\"category\":\"So\"},{\"key\":\"21AC\",\"mappings\":{\"default\":{\"default\":\"flèche avec boucle droite\"}},\"category\":\"So\"},{\"key\":\"21AD\",\"mappings\":{\"default\":{\"default\":\"flèche ondulée bilatérale\"}},\"category\":\"So\"},{\"key\":\"21AE\",\"mappings\":{\"default\":{\"default\":\"flèche barrée bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"21AF\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas en zigzag\"}},\"category\":\"So\"},{\"key\":\"21B0\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut avec pointe gauche\"}},\"category\":\"So\"},{\"key\":\"21B1\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut avec pointe droite\"}},\"category\":\"So\"},{\"key\":\"21B2\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas avec pointe gauche\"}},\"category\":\"So\"},{\"key\":\"21B3\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas avec pointe droite\"}},\"category\":\"So\"},{\"key\":\"21B4\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas avec coin droit\"}},\"category\":\"So\"},{\"key\":\"21B5\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas avec coin gauche\"}},\"category\":\"So\"},{\"key\":\"21B6\",\"mappings\":{\"default\":{\"default\":\"flèche semi circulaire en sens positif\"}},\"category\":\"So\"},{\"key\":\"21B7\",\"mappings\":{\"default\":{\"default\":\"flèche semi circulaire en sens négatif\"}},\"category\":\"So\"},{\"key\":\"21B8\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest vers une barre horizontale longue\"}},\"category\":\"So\"},{\"key\":\"21B9\",\"mappings\":{\"default\":{\"default\":\"flèche gauche vers un taquet sur flèche droite vers un taquet\"}},\"category\":\"So\"},{\"key\":\"21BA\",\"mappings\":{\"default\":{\"default\":\"flèche en sens positif à cercle ouvert\"}},\"category\":\"So\"},{\"key\":\"21BB\",\"mappings\":{\"default\":{\"default\":\"flèche en sens négatif à cercle ouvert\"}},\"category\":\"So\"},{\"key\":\"21C4\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut par dessus flèche gauche\"}},\"category\":\"So\"},{\"key\":\"21C5\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut à gauche d'une flèche vers le bas\"}},\"category\":\"So\"},{\"key\":\"21C6\",\"mappings\":{\"default\":{\"default\":\"flèche gauche par dessus flèche droite\"}},\"category\":\"So\"},{\"key\":\"21C7\",\"mappings\":{\"default\":{\"default\":\"paire de flèches gauche\"}},\"category\":\"So\"},{\"key\":\"21C8\",\"mappings\":{\"default\":{\"default\":\"paire de flèches vers le haut\"}},\"category\":\"So\"},{\"key\":\"21C9\",\"mappings\":{\"default\":{\"default\":\"paire de flèches droite\"}},\"category\":\"So\"},{\"key\":\"21CA\",\"mappings\":{\"default\":{\"default\":\"paire de flèches vers le bas\"}},\"category\":\"So\"},{\"key\":\"21CD\",\"mappings\":{\"default\":{\"default\":\"double flèche barrée gauche\"}},\"category\":\"So\"},{\"key\":\"21CE\",\"mappings\":{\"default\":{\"default\":\"double flèche barrée bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"21CF\",\"mappings\":{\"default\":{\"default\":\"double flèche barrée droite\"}},\"category\":\"Sm\"},{\"key\":\"21D0\",\"mappings\":{\"default\":{\"default\":\"double flèche gauche\"}},\"category\":\"So\"},{\"key\":\"21D1\",\"mappings\":{\"default\":{\"default\":\"double flèche vers le haut\"}},\"category\":\"So\"},{\"key\":\"21D2\",\"mappings\":{\"default\":{\"default\":\"double flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"21D3\",\"mappings\":{\"default\":{\"default\":\"double flèche vers le bas\"}},\"category\":\"So\"},{\"key\":\"21D4\",\"mappings\":{\"default\":{\"default\":\"double flèche bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"21D5\",\"mappings\":{\"default\":{\"default\":\"double flèche haut bas\"}},\"category\":\"So\"},{\"key\":\"21D6\",\"mappings\":{\"default\":{\"default\":\"double flèche nord ouest\"}},\"category\":\"So\"},{\"key\":\"21D7\",\"mappings\":{\"default\":{\"default\":\"double flèche nord est\"}},\"category\":\"So\"},{\"key\":\"21D8\",\"mappings\":{\"default\":{\"default\":\"double flèche sud est\"}},\"category\":\"So\"},{\"key\":\"21D9\",\"mappings\":{\"default\":{\"default\":\"double flèche sud ouest\"}},\"category\":\"So\"},{\"key\":\"21DA\",\"mappings\":{\"default\":{\"default\":\"triple flèche gauche\"}},\"category\":\"So\"},{\"key\":\"21DB\",\"mappings\":{\"default\":{\"default\":\"triple flèche droite\"}},\"category\":\"So\"},{\"key\":\"21DC\",\"mappings\":{\"default\":{\"default\":\"flèche en tire bouchon gauche\"}},\"category\":\"So\"},{\"key\":\"21DD\",\"mappings\":{\"default\":{\"default\":\"flèche en tire bouchon droite\"}},\"category\":\"So\"},{\"key\":\"21DE\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut avec double barre\"}},\"category\":\"So\"},{\"key\":\"21DF\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas avec double barre\"}},\"category\":\"So\"},{\"key\":\"21E0\",\"mappings\":{\"default\":{\"default\":\"flèche pointillée gauche\"}},\"category\":\"So\"},{\"key\":\"21E1\",\"mappings\":{\"default\":{\"default\":\"flèche pointillée vers le haut\"}},\"category\":\"So\"},{\"key\":\"21E2\",\"mappings\":{\"default\":{\"default\":\"flèche pointillée droite\"}},\"category\":\"So\"},{\"key\":\"21E3\",\"mappings\":{\"default\":{\"default\":\"flèche pointillée vers le bas\"}},\"category\":\"So\"},{\"key\":\"21E4\",\"mappings\":{\"default\":{\"default\":\"flèche gauche vers un taquet\"}},\"category\":\"So\"},{\"key\":\"21E5\",\"mappings\":{\"default\":{\"default\":\"flèche droite vers un taquet\"}},\"category\":\"So\"},{\"key\":\"21E6\",\"mappings\":{\"default\":{\"default\":\"flèche blanche gauche\"}},\"category\":\"So\"},{\"key\":\"21E7\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut\"}},\"category\":\"So\"},{\"key\":\"21E8\",\"mappings\":{\"default\":{\"default\":\"flèche blanche droite\"}},\"category\":\"So\"},{\"key\":\"21E9\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le bas\"}},\"category\":\"So\"},{\"key\":\"21EA\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut à partir d'un taquet\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"21EB\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut sur socle\"}}},{\"category\":\"So\",\"key\":\"21EC\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut sur socle et trait horizontal\"}}},{\"category\":\"So\",\"key\":\"21ED\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut sur socle et barre verticale\"}}},{\"category\":\"So\",\"key\":\"21EE\",\"mappings\":{\"default\":{\"default\":\"double flèche blanche vers le haut\"}}},{\"category\":\"So\",\"key\":\"21EF\",\"mappings\":{\"default\":{\"default\":\"double flèche blanche vers le haut sur socle\"}}},{\"category\":\"So\",\"key\":\"21F0\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers la droite appuyée sur mur\"}}},{\"category\":\"So\",\"key\":\"21F1\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest en encoignure\"}}},{\"category\":\"So\",\"key\":\"21F2\",\"mappings\":{\"default\":{\"default\":\"flèche sud est en encoignure\"}}},{\"category\":\"So\",\"key\":\"21F3\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers le haut et le bas\"}}},{\"category\":\"Sm\",\"key\":\"21F4\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à petit cercle\"}}},{\"key\":\"21F5\",\"mappings\":{\"default\":{\"default\":\"flèche descendante à gauche d'une flèche montante\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"21F6\",\"mappings\":{\"default\":{\"default\":\"trois flèches vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"21F7\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"21F8\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"21F9\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite et la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"21FA\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"21FB\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"21FC\",\"mappings\":{\"default\":{\"default\":\"flèche bilatérale barrée deux fois verticalement\"}}},{\"key\":\"21FD\",\"mappings\":{\"default\":{\"default\":\"flèche à tête creuse gauche\"}},\"category\":\"Sm\"},{\"key\":\"21FE\",\"mappings\":{\"default\":{\"default\":\"flèche à tête creuse droite\"}},\"category\":\"Sm\"},{\"key\":\"21FF\",\"mappings\":{\"default\":{\"default\":\"flèche à tête creuse bilatérale\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2301\",\"mappings\":{\"default\":{\"default\":\"flèche électrique\"}}},{\"category\":\"So\",\"key\":\"2303\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche vers le haut\"}}},{\"category\":\"So\",\"key\":\"2304\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche vers le bas\"}}},{\"category\":\"So\",\"key\":\"2324\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche vers le haut entre deux traits horizontaux\"}}},{\"category\":\"So\",\"key\":\"238B\",\"mappings\":{\"default\":{\"default\":\"cercle brisé à flèche nord ouest (échappement)\"}}},{\"category\":\"So\",\"key\":\"2794\",\"mappings\":{\"default\":{\"default\":\"flèche grasse vers la droite à pointe large\"}}},{\"category\":\"So\",\"key\":\"2798\",\"mappings\":{\"default\":{\"default\":\"flèche grasse sud est\"}}},{\"category\":\"So\",\"key\":\"2799\",\"mappings\":{\"default\":{\"default\":\"flèche grasse vers la droite grasse\"}}},{\"category\":\"So\",\"key\":\"279A\",\"mappings\":{\"default\":{\"default\":\"flèche grasse nord est\"}}},{\"category\":\"So\",\"key\":\"279B\",\"mappings\":{\"default\":{\"default\":\"flèche de traçage vers la droite\"}}},{\"category\":\"So\",\"key\":\"279C\",\"mappings\":{\"default\":{\"default\":\"flèche grasse à pointe arrondie vers la droite\"}}},{\"category\":\"So\",\"key\":\"279D\",\"mappings\":{\"default\":{\"default\":\"flèche à pointe en triangle vers la droite\"}}},{\"category\":\"So\",\"key\":\"279E\",\"mappings\":{\"default\":{\"default\":\"flèche grasse à pointe en triangle vers la droite\"}}},{\"category\":\"So\",\"key\":\"279F\",\"mappings\":{\"default\":{\"default\":\"flèche avec pointillés à pointe en triangle vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A0\",\"mappings\":{\"default\":{\"default\":\"flèche grasse avec pointillés à pointe en triangle vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A1\",\"mappings\":{\"default\":{\"default\":\"flèche noire vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A2\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche vers la droite en trompe l'œil éclairée par le haut\"}}},{\"category\":\"So\",\"key\":\"27A3\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche vers la droite en trompe l'œil éclairée par le bas\"}}},{\"category\":\"So\",\"key\":\"27A4\",\"mappings\":{\"default\":{\"default\":\"pointe de flèche noire vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A5\",\"mappings\":{\"default\":{\"default\":\"flèche noire grasse courbée vers le bas et vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A6\",\"mappings\":{\"default\":{\"default\":\"flèche noire courbée vers le haut et vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A7\",\"mappings\":{\"default\":{\"default\":\"flèche noire trapue vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A8\",\"mappings\":{\"default\":{\"default\":\"flèche noire grasse à pointe concave vers la droite\"}}},{\"category\":\"So\",\"key\":\"27A9\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers la droite ombrée à l'avant\"}}},{\"category\":\"So\",\"key\":\"27AA\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers la droite ombrée à l'arrière\"}}},{\"category\":\"So\",\"key\":\"27AB\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers la droite penchée vers l'arrière et ombrée\"}}},{\"category\":\"So\",\"key\":\"27AC\",\"mappings\":{\"default\":{\"default\":\"flèche blanche vers la droite penchée vers l'avant et ombrée\"}}},{\"category\":\"So\",\"key\":\"27AD\",\"mappings\":{\"default\":{\"default\":\"flèche blanche grasse vers la droite à ombre inférieure droite\"}}},{\"category\":\"So\",\"key\":\"27AE\",\"mappings\":{\"default\":{\"default\":\"flèche blanche grasse vers la droite à ombre supérieure droite\"}}},{\"category\":\"So\",\"key\":\"27AF\",\"mappings\":{\"default\":{\"default\":\"flèche encochée blanche vers la droite ombrée à l'avant et par dessous\"}}},{\"category\":\"So\",\"key\":\"27B1\",\"mappings\":{\"default\":{\"default\":\"flèche encochée blanche vers la droite ombrée à l'avant et par dessus\"}}},{\"category\":\"So\",\"key\":\"27B2\",\"mappings\":{\"default\":{\"default\":\"flèche blanche grasse vers la droite à contour circulaire\"}}},{\"category\":\"So\",\"key\":\"27B3\",\"mappings\":{\"default\":{\"default\":\"flèche empennée blanche vers la droite\"}}},{\"category\":\"So\",\"key\":\"27B4\",\"mappings\":{\"default\":{\"default\":\"flèche empennée noir sud est\"}}},{\"category\":\"So\",\"key\":\"27B5\",\"mappings\":{\"default\":{\"default\":\"flèche empennée noir vers la droite\"}}},{\"category\":\"So\",\"key\":\"27B6\",\"mappings\":{\"default\":{\"default\":\"flèche empennée noir nord est\"}}},{\"category\":\"So\",\"key\":\"27B7\",\"mappings\":{\"default\":{\"default\":\"flèche empennée gras noire sud est\"}}},{\"category\":\"So\",\"key\":\"27B8\",\"mappings\":{\"default\":{\"default\":\"flèche empennée gras noire vers la droite\"}}},{\"category\":\"So\",\"key\":\"27B9\",\"mappings\":{\"default\":{\"default\":\"flèche empennée gras noire nord est\"}}},{\"category\":\"So\",\"key\":\"27BA\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à pointe larmée\"}}},{\"category\":\"So\",\"key\":\"27BB\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à hampe larmée\"}}},{\"category\":\"So\",\"key\":\"27BC\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à queue en forme de coin\"}}},{\"category\":\"So\",\"key\":\"27BD\",\"mappings\":{\"default\":{\"default\":\"flèche grasse vers la droite à queue en forme de coin\"}}},{\"category\":\"So\",\"key\":\"27BE\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à contour ouvert\"}}},{\"category\":\"Sm\",\"key\":\"27F0\",\"mappings\":{\"default\":{\"default\":\"quadruple flèche vers le haut\"}}},{\"category\":\"Sm\",\"key\":\"27F1\",\"mappings\":{\"default\":{\"default\":\"quadruple flèche vers le bas\"}}},{\"category\":\"Sm\",\"key\":\"27F2\",\"mappings\":{\"default\":{\"default\":\"flèche sens antihoraire entrouverte\"}}},{\"category\":\"Sm\",\"key\":\"27F3\",\"mappings\":{\"default\":{\"default\":\"flèche sens horaire entrouverte\"}}},{\"category\":\"Sm\",\"key\":\"27F4\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à signe plus cerclé\"}}},{\"key\":\"27F5\",\"mappings\":{\"default\":{\"default\":\"longue flèche gauche\"}},\"category\":\"Sm\"},{\"key\":\"27F6\",\"mappings\":{\"default\":{\"default\":\"longue flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"27F7\",\"mappings\":{\"default\":{\"default\":\"longue flèche bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"27F8\",\"mappings\":{\"default\":{\"default\":\"longue double flèche gauche\"}},\"category\":\"Sm\"},{\"key\":\"27F9\",\"mappings\":{\"default\":{\"default\":\"longue double flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"27FA\",\"mappings\":{\"default\":{\"default\":\"longue double flèche bilatérale\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27FB\",\"mappings\":{\"default\":{\"default\":\"longue flèche d'un taquet vers la gauche\"}}},{\"key\":\"27FC\",\"mappings\":{\"default\":{\"default\":\"longue flèche d'un taquet droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27FD\",\"mappings\":{\"default\":{\"default\":\"longue double flèche d'un taquet vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"27FE\",\"mappings\":{\"default\":{\"default\":\"longue double flèche d'un taquet vers la droite\"}}},{\"key\":\"27FF\",\"mappings\":{\"default\":{\"default\":\"longue flèche en tire bouchon droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2900\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers la droite barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2901\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers la droite barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2902\",\"mappings\":{\"default\":{\"default\":\"double flèche vers la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2903\",\"mappings\":{\"default\":{\"default\":\"double flèche vers la droite barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2904\",\"mappings\":{\"default\":{\"default\":\"flèche bilatérale double barrée verticalement\"}}},{\"key\":\"2905\",\"mappings\":{\"default\":{\"default\":\"flèche à deux têtes d'un taquet droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2906\",\"mappings\":{\"default\":{\"default\":\"double flèche d'un taquet vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2907\",\"mappings\":{\"default\":{\"default\":\"double flèche d'un taquet vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"2908\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas barrée horizontalement\"}}},{\"category\":\"Sm\",\"key\":\"2909\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut barrée horizontalement\"}}},{\"category\":\"Sm\",\"key\":\"290A\",\"mappings\":{\"default\":{\"default\":\"triple flèche vers le haut\"}}},{\"category\":\"Sm\",\"key\":\"290B\",\"mappings\":{\"default\":{\"default\":\"triple flèche vers le bas\"}}},{\"key\":\"290C\",\"mappings\":{\"default\":{\"default\":\"flèche à deux traits gauche\"}},\"category\":\"Sm\"},{\"key\":\"290D\",\"mappings\":{\"default\":{\"default\":\"flèche à deux traits droite\"}},\"category\":\"Sm\"},{\"key\":\"290E\",\"mappings\":{\"default\":{\"default\":\"flèche à trois traits gauche\"}},\"category\":\"Sm\"},{\"key\":\"290F\",\"mappings\":{\"default\":{\"default\":\"flèche à trois traits droite\"}},\"category\":\"Sm\"},{\"key\":\"2910\",\"mappings\":{\"default\":{\"default\":\"flèche à trois traits et à deux têtes droite\"}},\"category\":\"Sm\"},{\"key\":\"2911\",\"mappings\":{\"default\":{\"default\":\"flèche à fût pointillé droite\"}},\"category\":\"Sm\"},{\"key\":\"2912\",\"mappings\":{\"default\":{\"default\":\"flèche jusqu'à taquet vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"2913\",\"mappings\":{\"default\":{\"default\":\"flèche jusqu'à taquet vers le bas\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2914\",\"mappings\":{\"default\":{\"default\":\"flèche empennée vers la droite barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2915\",\"mappings\":{\"default\":{\"default\":\"flèche empennée vers la droite barrée deux fois verticalement\"}}},{\"key\":\"2916\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2917\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes vers la droite barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2918\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes vers la droite barrée deux fois verticalement\"}}},{\"key\":\"2919\",\"mappings\":{\"default\":{\"default\":\"empenne gauche\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"291A\",\"mappings\":{\"default\":{\"default\":\"empenne vers la droite\"}}},{\"key\":\"291B\",\"mappings\":{\"default\":{\"default\":\"double empenne gauche\"}},\"category\":\"Sm\"},{\"key\":\"291C\",\"mappings\":{\"default\":{\"default\":\"double empenne droite\"}},\"category\":\"Sm\"},{\"key\":\"291D\",\"mappings\":{\"default\":{\"default\":\"flèche vers un losange noir à gauche\"}},\"category\":\"Sm\"},{\"key\":\"291E\",\"mappings\":{\"default\":{\"default\":\"flèche vers un losange noir à droite\"}},\"category\":\"Sm\"},{\"key\":\"291F\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet vers un losange noir à gauche\"}},\"category\":\"Sm\"},{\"key\":\"2920\",\"mappings\":{\"default\":{\"default\":\"flèche d'un taquet vers un losange noir à droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2921\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest et sud est\"}}},{\"category\":\"Sm\",\"key\":\"2922\",\"mappings\":{\"default\":{\"default\":\"flèche nord est et sud ouest\"}}},{\"key\":\"2923\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest à crochet\"}},\"category\":\"Sm\"},{\"key\":\"2924\",\"mappings\":{\"default\":{\"default\":\"flèche nord est à crochet\"}},\"category\":\"Sm\"},{\"key\":\"2925\",\"mappings\":{\"default\":{\"default\":\"flèche sud est à crochet\"}},\"category\":\"Sm\"},{\"key\":\"2926\",\"mappings\":{\"default\":{\"default\":\"flèche sud ouest à crochet\"}},\"category\":\"Sm\"},{\"key\":\"2927\",\"mappings\":{\"default\":{\"default\":\"flèches nord ouest et nord est\"}},\"category\":\"Sm\"},{\"key\":\"2928\",\"mappings\":{\"default\":{\"default\":\"flèches nord est et sud est\"}},\"category\":\"Sm\"},{\"key\":\"2929\",\"mappings\":{\"default\":{\"default\":\"flèches sud est et sud ouest\"}},\"category\":\"Sm\"},{\"key\":\"292A\",\"mappings\":{\"default\":{\"default\":\"flèches sud ouest et nord ouest\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"292D\",\"mappings\":{\"default\":{\"default\":\"flèche sud est sur flèche nord est\"}}},{\"category\":\"Sm\",\"key\":\"292E\",\"mappings\":{\"default\":{\"default\":\"flèche nord est sur flèche sud est\"}}},{\"category\":\"Sm\",\"key\":\"292F\",\"mappings\":{\"default\":{\"default\":\"diagonale descendante sur flèche nord est\"}}},{\"category\":\"Sm\",\"key\":\"2930\",\"mappings\":{\"default\":{\"default\":\"diagonale montante sur flèche sud est\"}}},{\"category\":\"Sm\",\"key\":\"2931\",\"mappings\":{\"default\":{\"default\":\"flèche nord est sur flèche nord ouest\"}}},{\"category\":\"Sm\",\"key\":\"2932\",\"mappings\":{\"default\":{\"default\":\"flèche nord ouest sur flèche nord est\"}}},{\"key\":\"2933\",\"mappings\":{\"default\":{\"default\":\"flèche bossue droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2934\",\"mappings\":{\"default\":{\"default\":\"flèche courbe vers la droite puis le haut\"}}},{\"key\":\"2935\",\"mappings\":{\"default\":{\"default\":\"flèche courbe vers la droite puis le bas\"}},\"category\":\"Sm\"},{\"key\":\"2936\",\"mappings\":{\"default\":{\"default\":\"flèche courbe vers le bas puis la gauche\"}},\"category\":\"Sm\"},{\"key\":\"2937\",\"mappings\":{\"default\":{\"default\":\"flèche courbe vers le bas puis la droite\"}},\"category\":\"Sm\"},{\"key\":\"2938\",\"mappings\":{\"default\":{\"default\":\"côté droit d'arc fléché sens horaire\"}},\"category\":\"Sm\"},{\"key\":\"2939\",\"mappings\":{\"default\":{\"default\":\"côté gauche d'arc fléché sens antihoraire\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"293A\",\"mappings\":{\"default\":{\"default\":\"arc supérieur fléché sens antihoraire\"}}},{\"category\":\"Sm\",\"key\":\"293B\",\"mappings\":{\"default\":{\"default\":\"arc inférieur fléché sens antihoraire\"}}},{\"key\":\"293C\",\"mappings\":{\"default\":{\"default\":\"arc fléché sens horaire et signe moins souscrit\"}},\"category\":\"Sm\"},{\"key\":\"293D\",\"mappings\":{\"default\":{\"default\":\"arc fléché sens antihoraire et signe plus souscrit\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"293E\",\"mappings\":{\"default\":{\"default\":\"demi cercle fléché inférieur droit sens horaire\"}}},{\"category\":\"Sm\",\"key\":\"293F\",\"mappings\":{\"default\":{\"default\":\"demi cercle fléché inférieur gauche sens antihoraire\"}}},{\"category\":\"Sm\",\"key\":\"2940\",\"mappings\":{\"default\":{\"default\":\"cercle fléché sens antihoraire\"}}},{\"category\":\"Sm\",\"key\":\"2941\",\"mappings\":{\"default\":{\"default\":\"cercle fléché sens horaire\"}}},{\"category\":\"Sm\",\"key\":\"2942\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite surmontant fléchette vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2943\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche surmontant fléchette vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"2944\",\"mappings\":{\"default\":{\"default\":\"fléchette vers la droite surmontant flèche vers la gauche\"}}},{\"key\":\"2945\",\"mappings\":{\"default\":{\"default\":\"flèche droite surmontant signe moins\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2946\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche surmontant signe plus\"}}},{\"category\":\"Sm\",\"key\":\"2947\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite au travers un x\"}}},{\"key\":\"2948\",\"mappings\":{\"default\":{\"default\":\"petit cercle traversé d'une flèche bilatérale\"}},\"category\":\"Sm\"},{\"key\":\"2949\",\"mappings\":{\"default\":{\"default\":\"petit cercle surmonté d'une flèche montante à deux têtes\"}},\"category\":\"Sm\"},{\"key\":\"2970\",\"mappings\":{\"default\":{\"default\":\"flèche en épingle à cheveu droite\"}},\"category\":\"Sm\"},{\"key\":\"2971\",\"mappings\":{\"default\":{\"default\":\"flèche droite surmontée d'un égal\"}},\"category\":\"Sm\"},{\"key\":\"2972\",\"mappings\":{\"default\":{\"default\":\"flèche droite surmontée d'un tilde\"}},\"category\":\"Sm\"},{\"key\":\"2973\",\"mappings\":{\"default\":{\"default\":\"tilde surmonté d'une flèche gauche\"}},\"category\":\"Sm\"},{\"key\":\"2974\",\"mappings\":{\"default\":{\"default\":\"tilde surmonté d'une flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"2975\",\"mappings\":{\"default\":{\"default\":\"presque égal à surmonté d'une flèche droite\"}},\"category\":\"Sm\"},{\"key\":\"2976\",\"mappings\":{\"default\":{\"default\":\"inférieur à surmonté d'une flèche gauche\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2977\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à travers un inférieur à\"}}},{\"key\":\"2978\",\"mappings\":{\"default\":{\"default\":\"flèche droite surmontée d'un supérieur à\"}},\"category\":\"Sm\"},{\"key\":\"2979\",\"mappings\":{\"default\":{\"default\":\"flèche droite surmontée d'un sous ensemble de\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"297A\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche au travers d'un sous ensemble de\"}}},{\"key\":\"297B\",\"mappings\":{\"default\":{\"default\":\"flèche gauche surmontée d'un sur ensemble de\"}},\"category\":\"Sm\"},{\"key\":\"29B3\",\"mappings\":{\"default\":{\"default\":\"ensemble vide flèche droite en chef\"}},\"category\":\"Sm\"},{\"key\":\"29B4\",\"mappings\":{\"default\":{\"default\":\"ensemble vide flèche gauche en chef\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29BD\",\"mappings\":{\"default\":{\"default\":\"cercle traversé d'une flèche montante\"}}},{\"category\":\"Sm\",\"key\":\"29EA\",\"mappings\":{\"default\":{\"default\":\"losange noir à flèche vers le bas\"}}},{\"category\":\"Sm\",\"key\":\"29EC\",\"mappings\":{\"default\":{\"default\":\"cercle blanc à flèche vers le bas\"}}},{\"category\":\"Sm\",\"key\":\"29ED\",\"mappings\":{\"default\":{\"default\":\"cercle noir à flèche vers le bas\"}}},{\"key\":\"2A17\",\"mappings\":{\"default\":{\"default\":\"intégrale à crosse fléchée gauche\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2B00\",\"mappings\":{\"default\":{\"default\":\"flèche blanche nord est\"}}},{\"category\":\"So\",\"key\":\"2B01\",\"mappings\":{\"default\":{\"default\":\"flèche blanche nord ouest\"}}},{\"category\":\"So\",\"key\":\"2B02\",\"mappings\":{\"default\":{\"default\":\"flèche blanche sud est\"}}},{\"category\":\"So\",\"key\":\"2B03\",\"mappings\":{\"default\":{\"default\":\"flèche blanche sud ouest\"}}},{\"category\":\"So\",\"key\":\"2B04\",\"mappings\":{\"default\":{\"default\":\"flèche blanche bilatérale\"}}},{\"category\":\"So\",\"key\":\"2B05\",\"mappings\":{\"default\":{\"default\":\"flèche noire vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2B06\",\"mappings\":{\"default\":{\"default\":\"flèche noire vers le haut\"}}},{\"category\":\"So\",\"key\":\"2B07\",\"mappings\":{\"default\":{\"default\":\"flèche noire vers le bas\"}}},{\"category\":\"So\",\"key\":\"2B08\",\"mappings\":{\"default\":{\"default\":\"flèche noire nord est\"}}},{\"category\":\"So\",\"key\":\"2B09\",\"mappings\":{\"default\":{\"default\":\"flèche noire nord ouest\"}}},{\"category\":\"So\",\"key\":\"2B0A\",\"mappings\":{\"default\":{\"default\":\"flèche noire sud est\"}}},{\"category\":\"So\",\"key\":\"2B0B\",\"mappings\":{\"default\":{\"default\":\"flèche noire sud ouest\"}}},{\"category\":\"So\",\"key\":\"2B0C\",\"mappings\":{\"default\":{\"default\":\"flèche noire bilatérale\"}}},{\"category\":\"So\",\"key\":\"2B0D\",\"mappings\":{\"default\":{\"default\":\"flèche noire haut et bas\"}}},{\"category\":\"So\",\"key\":\"2B0E\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à pointe pliée vers le bas\"}}},{\"category\":\"So\",\"key\":\"2B0F\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à pointe pliée vers le haut\"}}},{\"category\":\"So\",\"key\":\"2B10\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à pointe pliée vers le bas\"}}},{\"category\":\"So\",\"key\":\"2B11\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à pointe pliée vers le haut\"}}},{\"category\":\"Sm\",\"key\":\"2B30\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à petit cercle\"}}},{\"category\":\"Sm\",\"key\":\"2B31\",\"mappings\":{\"default\":{\"default\":\"trois flèches vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B32\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à signe plus cerclé\"}}},{\"category\":\"Sm\",\"key\":\"2B33\",\"mappings\":{\"default\":{\"default\":\"longue flèche vers la gauche en tire bouchon\"}}},{\"category\":\"Sm\",\"key\":\"2B34\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B35\",\"mappings\":{\"default\":{\"default\":\"flèche à deux pointes vers la gauche barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B36\",\"mappings\":{\"default\":{\"default\":\"flèche à deux têtes d'un taquet vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B37\",\"mappings\":{\"default\":{\"default\":\"flèche à trois traits et à deux têtes vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B38\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche à fût pointillé\"}}},{\"category\":\"Sm\",\"key\":\"2B39\",\"mappings\":{\"default\":{\"default\":\"flèche empennée vers la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B3A\",\"mappings\":{\"default\":{\"default\":\"flèche empennée vers la gauche barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B3B\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B3C\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes vers la gauche barrée verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B3D\",\"mappings\":{\"default\":{\"default\":\"flèche empennée à deux têtes vers la gauche barrée deux fois verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2B3E\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche au travers un x\"}}},{\"category\":\"Sm\",\"key\":\"2B3F\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche bossue\"}}},{\"category\":\"Sm\",\"key\":\"2B40\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche surmontée d'un égal\"}}},{\"category\":\"Sm\",\"key\":\"2B41\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche surmontée d'un tilde\"}}},{\"category\":\"Sm\",\"key\":\"2B42\",\"mappings\":{\"default\":{\"default\":\"presque égal à réfléchi surmonté d'une flèche vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B43\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite à travers un inférieur à\"}}},{\"category\":\"Sm\",\"key\":\"2B44\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite au travers d'un sous ensemble de\"}}},{\"category\":\"So\",\"key\":\"2B45\",\"mappings\":{\"default\":{\"default\":\"quadruple flèche vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2B46\",\"mappings\":{\"default\":{\"default\":\"quadruple flèche vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"2B47\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite surmontée d'un opérateur tilde réfléchi\"}}},{\"category\":\"Sm\",\"key\":\"2B48\",\"mappings\":{\"default\":{\"default\":\"presque égal à réfléchi surmonté d'une flèche vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"2B49\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche surmontée de l'opérateur tilde\"}}},{\"category\":\"Sm\",\"key\":\"2B4A\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche par dessus presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2B4B\",\"mappings\":{\"default\":{\"default\":\"tilde réfléchi surmonté d'une flèche vers la gauche\"}}},{\"category\":\"Sm\",\"key\":\"2B4C\",\"mappings\":{\"default\":{\"default\":\"ilde surmonté d'une flèche vers la droite\"}}},{\"category\":\"Sm\",\"key\":\"FFE9\",\"mappings\":{\"default\":{\"default\":\"flèche vers la gauche demi chasse\"}}},{\"category\":\"Sm\",\"key\":\"FFEA\",\"mappings\":{\"default\":{\"default\":\"flèche vers le haut demi chasse\"}}},{\"category\":\"Sm\",\"key\":\"FFEB\",\"mappings\":{\"default\":{\"default\":\"flèche vers la droite demi chasse\"}}},{\"category\":\"Sm\",\"key\":\"FFEC\",\"mappings\":{\"default\":{\"default\":\"flèche vers le bas demi chasse\"}}}]\n,\n\"fr/symbols/math_characters.js\": \n[{\"locale\":\"fr\"},{\"key\":\"2113\",\"mappings\":{\"default\":{\"default\":\"l minuscule en script\"}},\"category\":\"Ll\"},{\"key\":\"2118\",\"mappings\":{\"default\":{\"default\":\"fonction elliptique de weierstrass\"}},\"category\":\"Sm\"},{\"category\":\"Ll\",\"key\":\"213C\",\"mappings\":{\"default\":{\"default\":\"pi ajouré\"}}},{\"category\":\"Ll\",\"key\":\"213D\",\"mappings\":{\"default\":{\"default\":\"gamma ajouré\"}}},{\"category\":\"Lu\",\"key\":\"213E\",\"mappings\":{\"default\":{\"default\":\"Gamma majuscule ajouré\"}}},{\"category\":\"Lu\",\"key\":\"213F\",\"mappings\":{\"default\":{\"default\":\"Pi majuscule ajouré\"}}},{\"category\":\"Sm\",\"key\":\"2140\",\"mappings\":{\"default\":{\"default\":\"sommation de la famille ajouré\"}}},{\"key\":\"2145\",\"mappings\":{\"default\":{\"default\":\"D majuscule\"}},\"category\":\"Lu\"},{\"key\":\"2146\",\"mappings\":{\"default\":{\"default\":\"d ajouré en italique\"}},\"category\":\"Ll\"},{\"key\":\"2147\",\"mappings\":{\"default\":{\"default\":\"e ajouré en italique\"}},\"category\":\"Ll\"},{\"key\":\"2148\",\"mappings\":{\"default\":{\"default\":\"i ajouré en italique\"}},\"category\":\"Ll\"},{\"category\":\"Ll\",\"key\":\"2149\",\"mappings\":{\"default\":{\"default\":\"j ajouré en italique\"}}},{\"key\":\"1D6A4\",\"mappings\":{\"default\":{\"default\":\"dotless i\"}},\"category\":\"Ll\"},{\"key\":\"1D6A5\",\"mappings\":{\"default\":{\"default\":\"dotless j\"}},\"category\":\"Ll\"}]\n,\n\"fr/symbols/math_delimiters.js\": \n[{\"locale\":\"fr\"},{\"key\":\"0028\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche\",\"alternative\":\"parenthèse ouvrante\"}},\"category\":\"Ps\"},{\"key\":\"0029\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite\",\"alternative\":\"parenthèse fermante\"}},\"category\":\"Pe\"},{\"key\":\"005B\",\"mappings\":{\"default\":{\"default\":\"crochet gauche\",\"alternative\":\"crochet ouvrant\"}},\"category\":\"Ps\"},{\"key\":\"005D\",\"mappings\":{\"default\":{\"default\":\"crochet droit\",\"alternative\":\"crochet fermant\"}},\"category\":\"Pe\"},{\"key\":\"007B\",\"mappings\":{\"default\":{\"default\":\"accolade gauche\",\"alternative\":\"accolade ouvrante\"}},\"category\":\"Ps\"},{\"key\":\"007D\",\"mappings\":{\"default\":{\"default\":\"accolade droite\",\"alternative\":\"accolade fermante\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2045\",\"mappings\":{\"default\":{\"default\":\"crochet gauche avec pique\"}}},{\"category\":\"Pe\",\"key\":\"2046\",\"mappings\":{\"default\":{\"default\":\"crochet droit avec pique\"}}},{\"key\":\"2308\",\"mappings\":{\"default\":{\"default\":\"plafond à gauche\"}},\"category\":\"Sm\"},{\"key\":\"2309\",\"mappings\":{\"default\":{\"default\":\"plafond à droite\"}},\"category\":\"Sm\"},{\"key\":\"230A\",\"mappings\":{\"default\":{\"default\":\"plancher à gauche\"}},\"category\":\"Sm\"},{\"key\":\"230B\",\"mappings\":{\"default\":{\"default\":\"plancher à droite\"}},\"category\":\"Sm\"},{\"key\":\"230C\",\"mappings\":{\"default\":{\"default\":\"repère sud est\"}},\"category\":\"So\"},{\"key\":\"230D\",\"mappings\":{\"default\":{\"default\":\"repère sud ouest\"}},\"category\":\"So\"},{\"key\":\"230E\",\"mappings\":{\"default\":{\"default\":\"repère nord est\"}},\"category\":\"So\"},{\"key\":\"230F\",\"mappings\":{\"default\":{\"default\":\"repère nord ouest\"}},\"category\":\"So\"},{\"key\":\"231C\",\"mappings\":{\"default\":{\"default\":\"coin nord ouest\"}},\"category\":\"So\"},{\"key\":\"231D\",\"mappings\":{\"default\":{\"default\":\"coin nord est\"}},\"category\":\"So\"},{\"key\":\"231E\",\"mappings\":{\"default\":{\"default\":\"coin sud ouest\"}},\"category\":\"So\"},{\"key\":\"231F\",\"mappings\":{\"default\":{\"default\":\"coin sud est\"}},\"category\":\"So\"},{\"key\":\"2320\",\"mappings\":{\"default\":{\"default\":\"moitié supérieure d'intégrale\"}},\"category\":\"Sm\"},{\"key\":\"2321\",\"mappings\":{\"default\":{\"default\":\"moitié inférieure d'intégrale\"}},\"category\":\"Sm\"},{\"key\":\"2329\",\"mappings\":{\"default\":{\"default\":\"chevron gauche\"}},\"category\":\"Ps\"},{\"key\":\"232A\",\"mappings\":{\"default\":{\"default\":\"chevron droite\"}},\"category\":\"Pe\"},{\"category\":\"Sm\",\"key\":\"239B\",\"mappings\":{\"default\":{\"default\":\"arc supérieur de parenthèse gauche\"}}},{\"category\":\"Sm\",\"key\":\"239C\",\"mappings\":{\"default\":{\"default\":\"rallonge de parenthèse gauche\"}}},{\"category\":\"Sm\",\"key\":\"239D\",\"mappings\":{\"default\":{\"default\":\"arc inférieur de parenthèse gauche\"}}},{\"category\":\"Sm\",\"key\":\"239E\",\"mappings\":{\"default\":{\"default\":\"arc supérieur de parenthèse droite\"}}},{\"category\":\"Sm\",\"key\":\"239F\",\"mappings\":{\"default\":{\"default\":\"rallonge de parenthèse droite\"}}},{\"category\":\"Sm\",\"key\":\"23A0\",\"mappings\":{\"default\":{\"default\":\"arc inférieur de parenthèse droite\"}}},{\"category\":\"Sm\",\"key\":\"23A1\",\"mappings\":{\"default\":{\"default\":\"coin supérieur de crochet gauche\"}}},{\"category\":\"Sm\",\"key\":\"23A2\",\"mappings\":{\"default\":{\"default\":\"rallonge de crochet gauche\"}}},{\"category\":\"Sm\",\"key\":\"23A3\",\"mappings\":{\"default\":{\"default\":\"coin inférieur de crochet gauche\"}}},{\"category\":\"Sm\",\"key\":\"23A4\",\"mappings\":{\"default\":{\"default\":\"coin supérieur de crochet droit\"}}},{\"category\":\"Sm\",\"key\":\"23A5\",\"mappings\":{\"default\":{\"default\":\"rallonge de crochet droit\"}}},{\"category\":\"Sm\",\"key\":\"23A6\",\"mappings\":{\"default\":{\"default\":\"coin inférieur de crochet droit\"}}},{\"category\":\"Sm\",\"key\":\"23A7\",\"mappings\":{\"default\":{\"default\":\"arc supérieur d'accolade gauche\"}}},{\"category\":\"Sm\",\"key\":\"23A8\",\"mappings\":{\"default\":{\"default\":\"milieu d'accolade gauche\"}}},{\"category\":\"Sm\",\"key\":\"23A9\",\"mappings\":{\"default\":{\"default\":\"arc inférieur d'accolade gauche\"}}},{\"category\":\"Sm\",\"key\":\"23AA\",\"mappings\":{\"default\":{\"default\":\"rallonge d'accolade\"}}},{\"category\":\"Sm\",\"key\":\"23AB\",\"mappings\":{\"default\":{\"default\":\"arc supérieur d'accolade droite\"}}},{\"category\":\"Sm\",\"key\":\"23AC\",\"mappings\":{\"default\":{\"default\":\"milieu d'accolade droite\"}}},{\"category\":\"Sm\",\"key\":\"23AD\",\"mappings\":{\"default\":{\"default\":\"arc inférieur d'accolade droite\"}}},{\"category\":\"Sm\",\"key\":\"23AE\",\"mappings\":{\"default\":{\"default\":\"rallonge d'intégrale\"}}},{\"category\":\"Sm\",\"key\":\"23AF\",\"mappings\":{\"default\":{\"default\":\"rallonge de ligne horizontale\"}}},{\"key\":\"23B0\",\"mappings\":{\"default\":{\"default\":\"moitié supérieure gauche ou inférieure droite d'accolade\"}},\"category\":\"Sm\"},{\"key\":\"23B1\",\"mappings\":{\"default\":{\"default\":\"moitié supérieure droite ou inférieure gauche d'accolade\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"23B2\",\"mappings\":{\"default\":{\"default\":\"haut du signe de somme\"}}},{\"category\":\"Sm\",\"key\":\"23B3\",\"mappings\":{\"default\":{\"default\":\"bas du signe de somme\"}}},{\"key\":\"23B4\",\"mappings\":{\"default\":{\"default\":\"crochet vertical supérieur\"}},\"category\":\"So\"},{\"key\":\"23B5\",\"mappings\":{\"default\":{\"default\":\"crochet vertical inférieur\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"23B6\",\"mappings\":{\"default\":{\"default\":\"crochet verticaux en défilé\"}}},{\"category\":\"So\",\"key\":\"23B7\",\"mappings\":{\"default\":{\"default\":\"bas du radical\"}}},{\"category\":\"So\",\"key\":\"23B8\",\"mappings\":{\"default\":{\"default\":\"filet vertical gauche\"}}},{\"category\":\"So\",\"key\":\"23B9\",\"mappings\":{\"default\":{\"default\":\"filet vertical droit\"}}},{\"key\":\"23DC\",\"mappings\":{\"default\":{\"default\":\"parenthèse supérieure\"}},\"category\":\"Sm\"},{\"key\":\"23DD\",\"mappings\":{\"default\":{\"default\":\"parenthèse inférieure\"}},\"category\":\"Sm\"},{\"key\":\"23DE\",\"mappings\":{\"default\":{\"default\":\"accolade supérieure\"}},\"category\":\"Sm\"},{\"key\":\"23DF\",\"mappings\":{\"default\":{\"default\":\"accolade inférieure\"}},\"category\":\"Sm\"},{\"key\":\"23E0\",\"mappings\":{\"default\":{\"default\":\"crochet en écaille supérieur\"}},\"category\":\"Sm\"},{\"key\":\"23E1\",\"mappings\":{\"default\":{\"default\":\"crochet en écaille inférieur\"}},\"category\":\"Sm\"},{\"category\":\"Ps\",\"key\":\"2768\",\"mappings\":{\"default\":{\"default\":\"parenthèse de fantaisie gauche demi grasse\"}}},{\"category\":\"Pe\",\"key\":\"2769\",\"mappings\":{\"default\":{\"default\":\"parenthèse de fantaisie droite demi grasse\"}}},{\"category\":\"Ps\",\"key\":\"276A\",\"mappings\":{\"default\":{\"default\":\"parenthèse de fantaisie gauche demi grasse aplatie\"}}},{\"category\":\"Pe\",\"key\":\"276B\",\"mappings\":{\"default\":{\"default\":\"parenthèse de fantaisie droite demi grasse aplatie\"}}},{\"category\":\"Ps\",\"key\":\"276C\",\"mappings\":{\"default\":{\"default\":\"chevron de fantaisie vers la gauche demi gras\"}}},{\"category\":\"Pe\",\"key\":\"276D\",\"mappings\":{\"default\":{\"default\":\"chevron de fantaisie vers la droite demi gras\"}}},{\"category\":\"Ps\",\"key\":\"276E\",\"mappings\":{\"default\":{\"default\":\"guillemet de fantaisie vers la gauche gras\"}}},{\"category\":\"Pe\",\"key\":\"276F\",\"mappings\":{\"default\":{\"default\":\"guillemet de fantaisie vers la droite gras\"}}},{\"category\":\"Ps\",\"key\":\"2770\",\"mappings\":{\"default\":{\"default\":\"crochet de fantaisie vers la gauche gras\"}}},{\"category\":\"Pe\",\"key\":\"2771\",\"mappings\":{\"default\":{\"default\":\"crochet de fantaisie vers la droite gras\"}}},{\"category\":\"Ps\",\"key\":\"2772\",\"mappings\":{\"default\":{\"default\":\"crochet de fantaisie gauche maigre en écaille\"}}},{\"category\":\"Pe\",\"key\":\"2773\",\"mappings\":{\"default\":{\"default\":\"crochet de fantaisie droit maigre en écaille\"}}},{\"category\":\"Ps\",\"key\":\"2774\",\"mappings\":{\"default\":{\"default\":\"accolade de fantaisie gauche moyenne\"}}},{\"category\":\"Pe\",\"key\":\"2775\",\"mappings\":{\"default\":{\"default\":\"accolade de fantaisie droite moyenne\"}}},{\"key\":\"27C5\",\"mappings\":{\"default\":{\"default\":\"délimiteur de sac en s gauche\"}},\"category\":\"Ps\"},{\"key\":\"27C6\",\"mappings\":{\"default\":{\"default\":\"délimiteur de sac en s droite\"}},\"category\":\"Pe\"},{\"key\":\"27E6\",\"mappings\":{\"default\":{\"default\":\"crochet blanc gauche\"}},\"category\":\"Ps\"},{\"key\":\"27E7\",\"mappings\":{\"default\":{\"default\":\"crochet blanc droit\"}},\"category\":\"Pe\"},{\"key\":\"27E8\",\"mappings\":{\"default\":{\"default\":\"chevron mathématique gauche\"}},\"category\":\"Ps\"},{\"key\":\"27E9\",\"mappings\":{\"default\":{\"default\":\"chevron droit\"}},\"category\":\"Pe\"},{\"key\":\"27EA\",\"mappings\":{\"default\":{\"default\":\"double chevron gauche\"}},\"category\":\"Ps\"},{\"key\":\"27EB\",\"mappings\":{\"default\":{\"default\":\"double chevron droit\"}},\"category\":\"Pe\"},{\"key\":\"27EC\",\"mappings\":{\"default\":{\"default\":\"crochet gauche en écaille blanche\"}},\"category\":\"Ps\"},{\"key\":\"27ED\",\"mappings\":{\"default\":{\"default\":\"crochet droit en écaille blanche\"}},\"category\":\"Pe\"},{\"key\":\"27EE\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche aplatie\"}},\"category\":\"Ps\"},{\"key\":\"27EF\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite aplatie\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2983\",\"mappings\":{\"default\":{\"default\":\"accolade gauche ajourée\"}}},{\"category\":\"Pe\",\"key\":\"2984\",\"mappings\":{\"default\":{\"default\":\"accolade droite ajourée\"}}},{\"key\":\"2985\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche ajourée\"}},\"category\":\"Ps\"},{\"key\":\"2986\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite ajourée\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2987\",\"mappings\":{\"default\":{\"default\":\"parenthèse image de gauche en notation z\"}}},{\"category\":\"Pe\",\"key\":\"2988\",\"mappings\":{\"default\":{\"default\":\"parenthèse image de droite en notation z\"}}},{\"key\":\"2989\",\"mappings\":{\"default\":{\"default\":\"z notation left binding bracket\"}},\"category\":\"Ps\"},{\"key\":\"298A\",\"mappings\":{\"default\":{\"default\":\"z notation right binding bracket\"}},\"category\":\"Pe\"},{\"key\":\"298B\",\"mappings\":{\"default\":{\"default\":\"crochet gauche avec barre souscrite\"}},\"category\":\"Ps\"},{\"key\":\"298C\",\"mappings\":{\"default\":{\"default\":\"crochet droit avec barre souscrite\"}},\"category\":\"Pe\"},{\"key\":\"298D\",\"mappings\":{\"default\":{\"default\":\"crochet gauche avec trait dans le coin supérieur\"}},\"category\":\"Ps\"},{\"key\":\"298E\",\"mappings\":{\"default\":{\"default\":\"crochet droit avec trait dans le coin inférieur\"}},\"category\":\"Pe\"},{\"key\":\"298F\",\"mappings\":{\"default\":{\"default\":\"crochet gauche avec trait dans le coin inférieur\"}},\"category\":\"Ps\"},{\"key\":\"2990\",\"mappings\":{\"default\":{\"default\":\"crochet droit avec trait dans le coin supérieur\"}},\"category\":\"Pe\"},{\"key\":\"2991\",\"mappings\":{\"default\":{\"default\":\"chevron gauche pointé\"}},\"category\":\"Ps\"},{\"key\":\"2992\",\"mappings\":{\"default\":{\"default\":\"chevron droit pointé\"}},\"category\":\"Pe\"},{\"key\":\"2993\",\"mappings\":{\"default\":{\"default\":\"parenthèse arc gauche et inférieur à\"}},\"category\":\"Ps\"},{\"key\":\"2994\",\"mappings\":{\"default\":{\"default\":\"parenthèse arc droite et supérieur à\"}},\"category\":\"Pe\"},{\"key\":\"2995\",\"mappings\":{\"default\":{\"default\":\"parenthèse double arc droite et supérieur à\"}},\"category\":\"Ps\"},{\"key\":\"2996\",\"mappings\":{\"default\":{\"default\":\"parenthèse double arc gauche et inférieur à\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"2997\",\"mappings\":{\"default\":{\"default\":\"crochet noir gauche en écaille\"}}},{\"category\":\"Pe\",\"key\":\"2998\",\"mappings\":{\"default\":{\"default\":\"crochet noir droite en écaille\"}}},{\"category\":\"Ps\",\"key\":\"29D8\",\"mappings\":{\"default\":{\"default\":\"clôture dentelée gauche\"}}},{\"category\":\"Pe\",\"key\":\"29D9\",\"mappings\":{\"default\":{\"default\":\"clôture dentelée droite\"}}},{\"key\":\"29DA\",\"mappings\":{\"default\":{\"default\":\"double clôture dentelée gauche\"}},\"category\":\"Ps\"},{\"key\":\"29DB\",\"mappings\":{\"default\":{\"default\":\"right double wiggly fence\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"29FC\",\"mappings\":{\"default\":{\"default\":\"chevron vers la gauche courbé\"}}},{\"category\":\"Pe\",\"key\":\"29FD\",\"mappings\":{\"default\":{\"default\":\"chevron vers la droite courbé\"}}},{\"category\":\"Ps\",\"key\":\"2E22\",\"mappings\":{\"default\":{\"default\":\"anglet supérieur gauche\"}}},{\"category\":\"Pe\",\"key\":\"2E23\",\"mappings\":{\"default\":{\"default\":\"anglet supérieur droit\"}}},{\"category\":\"Ps\",\"key\":\"2E24\",\"mappings\":{\"default\":{\"default\":\"anglet inférieur gauche\"}}},{\"category\":\"Pe\",\"key\":\"2E25\",\"mappings\":{\"default\":{\"default\":\"anglet inférieur droit\"}}},{\"category\":\"Ps\",\"key\":\"2E26\",\"mappings\":{\"default\":{\"default\":\"crampillon couché gauche\"}}},{\"category\":\"Pe\",\"key\":\"2E27\",\"mappings\":{\"default\":{\"default\":\"crampillon couché droit\"}}},{\"category\":\"Ps\",\"key\":\"2E28\",\"mappings\":{\"default\":{\"default\":\"double parenthèse gauche\"}}},{\"category\":\"Pe\",\"key\":\"2E29\",\"mappings\":{\"default\":{\"default\":\"double parenthèse droite\"}}},{\"category\":\"Ps\",\"key\":\"3008\",\"mappings\":{\"default\":{\"default\":\"chevron gauche\"}}},{\"category\":\"Pe\",\"key\":\"3009\",\"mappings\":{\"default\":{\"default\":\"chevron droit\"}}},{\"key\":\"300A\",\"mappings\":{\"default\":{\"default\":\"double chevron gauche\"}},\"category\":\"Ps\"},{\"key\":\"300B\",\"mappings\":{\"default\":{\"default\":\"double chevron droit\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"300C\",\"mappings\":{\"default\":{\"default\":\"anglet gauche\"}}},{\"category\":\"Pe\",\"key\":\"300D\",\"mappings\":{\"default\":{\"default\":\"anglet droit\"}}},{\"category\":\"Ps\",\"key\":\"300E\",\"mappings\":{\"default\":{\"default\":\"anglet ajouré gauche\"}}},{\"category\":\"Pe\",\"key\":\"300F\",\"mappings\":{\"default\":{\"default\":\"anglet ajouré droit\"}}},{\"category\":\"Ps\",\"key\":\"3010\",\"mappings\":{\"default\":{\"default\":\"crochet noir lenticulaire gauche\"}}},{\"category\":\"Pe\",\"key\":\"3011\",\"mappings\":{\"default\":{\"default\":\"crochet noir lenticulaire droit\"}}},{\"key\":\"3014\",\"mappings\":{\"default\":{\"default\":\"crochet gauche en écaille\"}},\"category\":\"Ps\"},{\"key\":\"3015\",\"mappings\":{\"default\":{\"default\":\"crochet droit en écaille\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"3016\",\"mappings\":{\"default\":{\"default\":\"crochet blanc lenticulaire gauche\"}}},{\"category\":\"Pe\",\"key\":\"3017\",\"mappings\":{\"default\":{\"default\":\"crochet blanc lenticulaire droit\"}}},{\"category\":\"Ps\",\"key\":\"3018\",\"mappings\":{\"default\":{\"default\":\"crochet blanc gauche en écaille\"}}},{\"category\":\"Pe\",\"key\":\"3019\",\"mappings\":{\"default\":{\"default\":\"crochet blanc droit en écaille\"}}},{\"key\":\"301A\",\"mappings\":{\"default\":{\"default\":\"crochet blanc gauche\"}},\"category\":\"Ps\"},{\"key\":\"301B\",\"mappings\":{\"default\":{\"default\":\"crochet blanc droit\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"301D\",\"mappings\":{\"default\":{\"default\":\"guillemet double prime réfléchi\"}}},{\"key\":\"301E\",\"mappings\":{\"default\":{\"default\":\"guillemet double prime\"}},\"category\":\"Pe\"},{\"category\":\"Pe\",\"key\":\"301F\",\"mappings\":{\"default\":{\"default\":\"guillemet double prime inférieur\"}}},{\"category\":\"Ps\",\"key\":\"FD3E\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche ornée\"}}},{\"category\":\"Pe\",\"key\":\"FD3F\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite ornée\"}}},{\"category\":\"Ps\",\"key\":\"FE17\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet blanc lenticulaire gauche vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE18\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet blanc lenticulaire droit vertical\"}}},{\"key\":\"FE35\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de parenthèse gauche verticale\"}},\"category\":\"Ps\"},{\"key\":\"FE36\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de parenthèse droite verticale\"}},\"category\":\"Pe\"},{\"key\":\"FE37\",\"mappings\":{\"default\":{\"default\":\"forme de présentation d'accolade gauche verticale\"}},\"category\":\"Ps\"},{\"key\":\"FE38\",\"mappings\":{\"default\":{\"default\":\"forme de présentation d'accolade droite verticale\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"FE39\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet gauche vertical en écaille\"}}},{\"category\":\"Pe\",\"key\":\"FE3A\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet droit vertical en écaille\"}}},{\"category\":\"Ps\",\"key\":\"FE3B\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet gauche lenticulaire noir vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE3C\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet droit lenticulaire noir vertical\"}}},{\"category\":\"Ps\",\"key\":\"FE3D\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet double gauche vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE3E\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet double droit vertical\"}}},{\"key\":\"FE3F\",\"mappings\":{\"default\":{\"default\":\"over angle bracket\"}},\"category\":\"Ps\"},{\"key\":\"FE40\",\"mappings\":{\"default\":{\"default\":\"under angle bracket\"}},\"category\":\"Pe\"},{\"category\":\"Ps\",\"key\":\"FE41\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet vertical gauche en coin\"}}},{\"category\":\"Pe\",\"key\":\"FE42\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet vertical droit en coin\"}}},{\"category\":\"Ps\",\"key\":\"FE43\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet blanc vertical gauche en coin\"}}},{\"category\":\"Pe\",\"key\":\"FE44\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet blanc vertical droit en coin\"}}},{\"category\":\"Ps\",\"key\":\"FE47\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet gauche vertical\"}}},{\"category\":\"Pe\",\"key\":\"FE48\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de crochet droit vertical\"}}},{\"category\":\"Ps\",\"key\":\"FE59\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche minuscule\"}}},{\"category\":\"Pe\",\"key\":\"FE5A\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite minuscule\"}}},{\"category\":\"Ps\",\"key\":\"FE5B\",\"mappings\":{\"default\":{\"default\":\"accolade gauche minuscule\"}}},{\"category\":\"Pe\",\"key\":\"FE5C\",\"mappings\":{\"default\":{\"default\":\"accolade droite minuscule\"}}},{\"category\":\"Ps\",\"key\":\"FE5D\",\"mappings\":{\"default\":{\"default\":\"crochet gauche en écaille minuscule\"}}},{\"category\":\"Pe\",\"key\":\"FE5E\",\"mappings\":{\"default\":{\"default\":\"crochet droit en écaille minuscule\"}}},{\"category\":\"Ps\",\"key\":\"FF08\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche pleine chasse\"}}},{\"category\":\"Pe\",\"key\":\"FF09\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite pleine chasse\"}}},{\"category\":\"Ps\",\"key\":\"FF3B\",\"mappings\":{\"default\":{\"default\":\"crochet gauche pleine chasse\"}}},{\"category\":\"Pe\",\"key\":\"FF3D\",\"mappings\":{\"default\":{\"default\":\"crochet droit pleine chasse\"}}},{\"category\":\"Ps\",\"key\":\"FF5B\",\"mappings\":{\"default\":{\"default\":\"accolade gauche pleine chasse\"}}},{\"category\":\"Pe\",\"key\":\"FF5D\",\"mappings\":{\"default\":{\"default\":\"accolade droite pleine chasse\"}}},{\"category\":\"Ps\",\"key\":\"FF5F\",\"mappings\":{\"default\":{\"default\":\"parenthèse gauche ajourée pleine chasse *\"}}},{\"category\":\"Pe\",\"key\":\"FF60\",\"mappings\":{\"default\":{\"default\":\"parenthèse droite ajourée pleine chasse *\"}}},{\"category\":\"Ps\",\"key\":\"FF62\",\"mappings\":{\"default\":{\"default\":\"crochet gauche en coin demi chasse\"}}},{\"category\":\"Pe\",\"key\":\"FF63\",\"mappings\":{\"default\":{\"default\":\"crochet droit en coin demi chasse\"}}}]\n,\n\"fr/symbols/math_geometry.js\": \n[{\"locale\":\"fr\"},{\"key\":\"2500\",\"mappings\":{\"default\":{\"default\":\"filet horizontal fin\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2501\",\"mappings\":{\"default\":{\"default\":\"filet horizontal gras\"}}},{\"key\":\"2502\",\"mappings\":{\"default\":{\"default\":\"filet vertical fin\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2503\",\"mappings\":{\"default\":{\"default\":\"filet vertical gras\"}}},{\"category\":\"So\",\"key\":\"2504\",\"mappings\":{\"default\":{\"default\":\"filet brisé triple horizontal fin\"}}},{\"category\":\"So\",\"key\":\"2505\",\"mappings\":{\"default\":{\"default\":\"filet brisé triple horizontal gras\"}}},{\"category\":\"So\",\"key\":\"2506\",\"mappings\":{\"default\":{\"default\":\"filet brisé triple vertical fin\"}}},{\"category\":\"So\",\"key\":\"2507\",\"mappings\":{\"default\":{\"default\":\"filet brisé triple vertical gras\"}}},{\"category\":\"So\",\"key\":\"2508\",\"mappings\":{\"default\":{\"default\":\"filet brisé quadruple horizontal fin\"}}},{\"category\":\"So\",\"key\":\"2509\",\"mappings\":{\"default\":{\"default\":\"filet brisé quadruple horizontal gras\"}}},{\"category\":\"So\",\"key\":\"250A\",\"mappings\":{\"default\":{\"default\":\"filet brisé quadruple vertical fin\"}}},{\"category\":\"So\",\"key\":\"250B\",\"mappings\":{\"default\":{\"default\":\"filet brisé quadruple vertical gras\"}}},{\"key\":\"250C\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et vers la droite\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"250D\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras vers la droite\"}}},{\"category\":\"So\",\"key\":\"250E\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin vers la droite\"}}},{\"category\":\"So\",\"key\":\"250F\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et vers la droite\"}}},{\"key\":\"2510\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et vers la gauche\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2511\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2512\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2513\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et vers la gauche\"}}},{\"key\":\"2514\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et vers la droite\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2515\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers la droite\"}}},{\"category\":\"So\",\"key\":\"2516\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers la droite\"}}},{\"category\":\"So\",\"key\":\"2517\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et vers la droite\"}}},{\"key\":\"2518\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et vers la gauche\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2519\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers la gauche\"}}},{\"category\":\"So\",\"key\":\"251A\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers la gauche\"}}},{\"category\":\"So\",\"key\":\"251B\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et vers la gauche\"}}},{\"key\":\"251C\",\"mappings\":{\"default\":{\"default\":\"filet fin vertical et vers la droite\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"251D\",\"mappings\":{\"default\":{\"default\":\"filet fin vertical et gras vers la droite\"}}},{\"category\":\"So\",\"key\":\"251E\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers la droite et vers le bas\"}}},{\"category\":\"So\",\"key\":\"251F\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin vers la droite et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2520\",\"mappings\":{\"default\":{\"default\":\"filet gras vertical et fin vers la droite\"}}},{\"category\":\"So\",\"key\":\"2521\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras vers la droite et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2522\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers la droite et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2523\",\"mappings\":{\"default\":{\"default\":\"filet gras vertical et vers la droite\"}}},{\"key\":\"2524\",\"mappings\":{\"default\":{\"default\":\"filet fin vertical et vers la gauche\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2525\",\"mappings\":{\"default\":{\"default\":\"filet fin vertical et gras vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2526\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers la gauche et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2527\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin vers la gauche et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2528\",\"mappings\":{\"default\":{\"default\":\"filet gras vertical et fin vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2529\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras vers la gauche et vers le haut\"}}},{\"category\":\"So\",\"key\":\"252A\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers la gauche et vers le bas\"}}},{\"category\":\"So\",\"key\":\"252B\",\"mappings\":{\"default\":{\"default\":\"filet gras vertical et vers la gauche\"}}},{\"key\":\"252C\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"252D\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et fin vers la droite et vers le bas\"}}},{\"category\":\"So\",\"key\":\"252E\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite et fin vers la gauche et vers le bas\"}}},{\"category\":\"So\",\"key\":\"252F\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras horizontal\"}}},{\"category\":\"So\",\"key\":\"2530\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin horizontal\"}}},{\"category\":\"So\",\"key\":\"2531\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la droite et gras vers la gauche et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2532\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la gauche et gras vers la droite et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2533\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et horizontal\"}}},{\"key\":\"2534\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2535\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et fin vers la droite et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2536\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite et fin vers la gauche et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2537\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras horizontal\"}}},{\"category\":\"So\",\"key\":\"2538\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin horizontal\"}}},{\"category\":\"So\",\"key\":\"2539\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la droite et gras vers la gauche et vers le haut\"}}},{\"category\":\"So\",\"key\":\"253A\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la gauche et gras vers la droite et vers le haut\"}}},{\"category\":\"So\",\"key\":\"253B\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et horizontal\"}}},{\"key\":\"253C\",\"mappings\":{\"default\":{\"default\":\"filet fin vertical et horizontal\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"253D\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et fin vers la droite et vertical\"}}},{\"category\":\"So\",\"key\":\"253E\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite et fin vers la gauche et vertical\"}}},{\"category\":\"So\",\"key\":\"253F\",\"mappings\":{\"default\":{\"default\":\"filet vertical fin et horizontal gras\"}}},{\"category\":\"So\",\"key\":\"2540\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers le bas et horizontal\"}}},{\"category\":\"So\",\"key\":\"2541\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas et fin vers le haut et horizontal\"}}},{\"category\":\"So\",\"key\":\"2542\",\"mappings\":{\"default\":{\"default\":\"filet vertical gras et horizontal fin\"}}},{\"category\":\"So\",\"key\":\"2543\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et vers le haut et fin vers la droite et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2544\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite et vers le haut et fin vers la gauche et vers le bas\"}}},{\"category\":\"So\",\"key\":\"2545\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et vers le bas et fin vers la droite et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2546\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite et vers le bas et fin vers la gauche et vers le haut\"}}},{\"category\":\"So\",\"key\":\"2547\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas et gras vers le haut et horizontal\"}}},{\"category\":\"So\",\"key\":\"2548\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers le bas et horizontal\"}}},{\"category\":\"So\",\"key\":\"2549\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la droite et gras vers la gauche et vertical\"}}},{\"category\":\"So\",\"key\":\"254A\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la gauche et gras vers la droite et vertical\"}}},{\"category\":\"So\",\"key\":\"254B\",\"mappings\":{\"default\":{\"default\":\"filet vertical et horizontal gras\"}}},{\"category\":\"So\",\"key\":\"254C\",\"mappings\":{\"default\":{\"default\":\"filet brisé double horizontal fin\"}}},{\"category\":\"So\",\"key\":\"254D\",\"mappings\":{\"default\":{\"default\":\"filet brisé double horizontal gras\"}}},{\"category\":\"So\",\"key\":\"254E\",\"mappings\":{\"default\":{\"default\":\"filet brisé double vertical fin\"}}},{\"category\":\"So\",\"key\":\"254F\",\"mappings\":{\"default\":{\"default\":\"filet brisé double vertical gras\"}}},{\"key\":\"2550\",\"mappings\":{\"default\":{\"default\":\"filet double horizontal\"}},\"category\":\"So\"},{\"key\":\"2551\",\"mappings\":{\"default\":{\"default\":\"filet double vertical\"}},\"category\":\"So\"},{\"key\":\"2552\",\"mappings\":{\"default\":{\"default\":\"filet simple le bas et double vers la droite\"}},\"category\":\"So\"},{\"key\":\"2553\",\"mappings\":{\"default\":{\"default\":\"filet double vers le bas et simple vers la droite\"}},\"category\":\"So\"},{\"key\":\"2554\",\"mappings\":{\"default\":{\"default\":\"filet double vers le bas et vers la droite\"}},\"category\":\"So\"},{\"key\":\"2555\",\"mappings\":{\"default\":{\"default\":\"filet simple vers le bas et double vers la gauche\"}},\"category\":\"So\"},{\"key\":\"2556\",\"mappings\":{\"default\":{\"default\":\"filet double vers le bas et simple vers la gauche\"}},\"category\":\"So\"},{\"key\":\"2557\",\"mappings\":{\"default\":{\"default\":\"filet double vers le bas et vers la gauche\"}},\"category\":\"So\"},{\"key\":\"2558\",\"mappings\":{\"default\":{\"default\":\"filet simple vers le haut et double vers la droite\"}},\"category\":\"So\"},{\"key\":\"2559\",\"mappings\":{\"default\":{\"default\":\"filet double vers le haut et simple vers la droite\"}},\"category\":\"So\"},{\"key\":\"255A\",\"mappings\":{\"default\":{\"default\":\"filet double vers le haut et vers la droite\"}},\"category\":\"So\"},{\"key\":\"255B\",\"mappings\":{\"default\":{\"default\":\"filet simple vers le haut et double vers la gauche\"}},\"category\":\"So\"},{\"key\":\"255C\",\"mappings\":{\"default\":{\"default\":\"filet double vers le haut et simple vers la gauche\"}},\"category\":\"So\"},{\"key\":\"255D\",\"mappings\":{\"default\":{\"default\":\"filet double vers le haut et vers la gauche\"}},\"category\":\"So\"},{\"key\":\"255E\",\"mappings\":{\"default\":{\"default\":\"filet vertical simple et droit double\"}},\"category\":\"So\"},{\"key\":\"255F\",\"mappings\":{\"default\":{\"default\":\"filet vertical double et droit simple\"}},\"category\":\"So\"},{\"key\":\"2560\",\"mappings\":{\"default\":{\"default\":\"filet double vertical et vers la droite\"}},\"category\":\"So\"},{\"key\":\"2561\",\"mappings\":{\"default\":{\"default\":\"filet vertical simple et gauche double\"}},\"category\":\"So\"},{\"key\":\"2562\",\"mappings\":{\"default\":{\"default\":\"filet vertical double et gauche simple\"}},\"category\":\"So\"},{\"key\":\"2563\",\"mappings\":{\"default\":{\"default\":\"filet double vertical et vers la gauche\"}},\"category\":\"So\"},{\"key\":\"2564\",\"mappings\":{\"default\":{\"default\":\"filet vers le bas simple et horizontal double\"}},\"category\":\"So\"},{\"key\":\"2565\",\"mappings\":{\"default\":{\"default\":\"filet vers le bas double et horizontal simple\"}},\"category\":\"So\"},{\"key\":\"2566\",\"mappings\":{\"default\":{\"default\":\"filet double vers le bas et horizontal\"}},\"category\":\"So\"},{\"key\":\"2567\",\"mappings\":{\"default\":{\"default\":\"filet vers le haut simple et horizontal double\"}},\"category\":\"So\"},{\"key\":\"2568\",\"mappings\":{\"default\":{\"default\":\"filet vers le haut double et horizontal simple\"}},\"category\":\"So\"},{\"key\":\"2569\",\"mappings\":{\"default\":{\"default\":\"filet double vers le haut et horizontal\"}},\"category\":\"So\"},{\"key\":\"256A\",\"mappings\":{\"default\":{\"default\":\"filet vertical simple et horizontal double\"}},\"category\":\"So\"},{\"key\":\"256B\",\"mappings\":{\"default\":{\"default\":\"filet vertical double et horizontal simple\"}},\"category\":\"So\"},{\"key\":\"256C\",\"mappings\":{\"default\":{\"default\":\"filet double vertical et horizontall\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"256D\",\"mappings\":{\"default\":{\"default\":\"filet fin arc vers le bas et vers la droite\"}}},{\"category\":\"So\",\"key\":\"256E\",\"mappings\":{\"default\":{\"default\":\"filet fin arc vers le bas et vers la gauche\"}}},{\"category\":\"So\",\"key\":\"256F\",\"mappings\":{\"default\":{\"default\":\"filet fin arc vers le haut et vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2570\",\"mappings\":{\"default\":{\"default\":\"filet fin arc vers le haut et vers la droite\"}}},{\"category\":\"So\",\"key\":\"2571\",\"mappings\":{\"default\":{\"default\":\"filet diagonal fin du coin supérieur droit au coin inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"2572\",\"mappings\":{\"default\":{\"default\":\"filet diagonal fin du coin supérieur gauche vers le coin inférieur droit\"}}},{\"category\":\"So\",\"key\":\"2573\",\"mappings\":{\"default\":{\"default\":\"filet diagonal fin en croix\"}}},{\"category\":\"So\",\"key\":\"2574\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2575\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut\"}}},{\"category\":\"So\",\"key\":\"2576\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la droite\"}}},{\"category\":\"So\",\"key\":\"2577\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le bas\"}}},{\"category\":\"So\",\"key\":\"2578\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche\"}}},{\"category\":\"So\",\"key\":\"2579\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut\"}}},{\"category\":\"So\",\"key\":\"257A\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la droite\"}}},{\"category\":\"So\",\"key\":\"257B\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le bas\"}}},{\"category\":\"So\",\"key\":\"257C\",\"mappings\":{\"default\":{\"default\":\"filet fin vers la gauche et gras vers la droite\"}}},{\"category\":\"So\",\"key\":\"257D\",\"mappings\":{\"default\":{\"default\":\"filet fin vers le haut et gras vers le bas\"}}},{\"category\":\"So\",\"key\":\"257E\",\"mappings\":{\"default\":{\"default\":\"filet gras vers la gauche et fin vers la droite\"}}},{\"category\":\"So\",\"key\":\"257F\",\"mappings\":{\"default\":{\"default\":\"filet gras vers le haut et fin vers le bas\"}}},{\"key\":\"2580\",\"mappings\":{\"default\":{\"default\":\"moitié supérieure de pavé\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2581\",\"mappings\":{\"default\":{\"default\":\"huitième inférieur de pavé\"}}},{\"category\":\"So\",\"key\":\"2582\",\"mappings\":{\"default\":{\"default\":\"quart inférieur de pavé\"}}},{\"category\":\"So\",\"key\":\"2583\",\"mappings\":{\"default\":{\"default\":\"trois huitièmes inférieurs de pavé\"}}},{\"key\":\"2584\",\"mappings\":{\"default\":{\"default\":\"moitié inférieure de pavé\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2585\",\"mappings\":{\"default\":{\"default\":\"cinq huitièmes inférieurs de pavé\"}}},{\"category\":\"So\",\"key\":\"2586\",\"mappings\":{\"default\":{\"default\":\"trois quarts inférieurs de pavé\"}}},{\"category\":\"So\",\"key\":\"2587\",\"mappings\":{\"default\":{\"default\":\"sept huitièmes inférieurs de pavé\"}}},{\"key\":\"2588\",\"mappings\":{\"default\":{\"default\":\"pavé plein\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2589\",\"mappings\":{\"default\":{\"default\":\"sept huitièmes gauches de pavé\"}}},{\"category\":\"So\",\"key\":\"258A\",\"mappings\":{\"default\":{\"default\":\"trois quarts gauches de pavé\"}}},{\"category\":\"So\",\"key\":\"258B\",\"mappings\":{\"default\":{\"default\":\"cinq huitièmes gauches de pavé\"}}},{\"category\":\"So\",\"key\":\"258C\",\"mappings\":{\"default\":{\"default\":\"moitié gauche de pavé\"}}},{\"category\":\"So\",\"key\":\"258D\",\"mappings\":{\"default\":{\"default\":\"trois huitièmes gauches de pavé\"}}},{\"category\":\"So\",\"key\":\"258E\",\"mappings\":{\"default\":{\"default\":\"un quart gauche de pavé\"}}},{\"category\":\"So\",\"key\":\"258F\",\"mappings\":{\"default\":{\"default\":\"un huitième gauche de pavé\"}}},{\"category\":\"So\",\"key\":\"2590\",\"mappings\":{\"default\":{\"default\":\"moitié droite de pavé\"}}},{\"key\":\"2591\",\"mappings\":{\"default\":{\"default\":\"ombre légère\"}},\"category\":\"So\"},{\"key\":\"2592\",\"mappings\":{\"default\":{\"default\":\"ombre moyenne\"}},\"category\":\"So\"},{\"key\":\"2593\",\"mappings\":{\"default\":{\"default\":\"ombre foncée\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2594\",\"mappings\":{\"default\":{\"default\":\"huitième supérieur de pavé\"}}},{\"category\":\"So\",\"key\":\"2595\",\"mappings\":{\"default\":{\"default\":\"huitième droit de pavé\"}}},{\"category\":\"So\",\"key\":\"2596\",\"mappings\":{\"default\":{\"default\":\"quadrant inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"2597\",\"mappings\":{\"default\":{\"default\":\"quadrant inférieur droit\"}}},{\"category\":\"So\",\"key\":\"2598\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur gauche\"}}},{\"category\":\"So\",\"key\":\"2599\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur gauche inférieur gauche et inférieur droit\"}}},{\"category\":\"So\",\"key\":\"259A\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur gauche et inférieur droit\"}}},{\"category\":\"So\",\"key\":\"259B\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur gauche supérieur droit et inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"259C\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur gauche supérieur droit et inférieur droit\"}}},{\"category\":\"So\",\"key\":\"259D\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur droit\"}}},{\"category\":\"So\",\"key\":\"259E\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur droit et inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"259F\",\"mappings\":{\"default\":{\"default\":\"quadrant supérieur droit inférieur gauche et inférieur droit\"}}},{\"key\":\"25A0\",\"mappings\":{\"default\":{\"default\":\"petit carré noir\"}},\"category\":\"So\"},{\"key\":\"25A1\",\"mappings\":{\"default\":{\"default\":\"carré blanc\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25A2\",\"mappings\":{\"default\":{\"default\":\"carré blanc aux coins arrondis\"}}},{\"category\":\"So\",\"key\":\"25A3\",\"mappings\":{\"default\":{\"default\":\"petit carré noir inscrit dans un carré blanc\"}}},{\"category\":\"So\",\"key\":\"25A4\",\"mappings\":{\"default\":{\"default\":\"carré hachuré horizontalement\"}}},{\"category\":\"So\",\"key\":\"25A5\",\"mappings\":{\"default\":{\"default\":\"carré hachuré verticalement\"}}},{\"category\":\"So\",\"key\":\"25A6\",\"mappings\":{\"default\":{\"default\":\"carré quadrillé\"}}},{\"category\":\"So\",\"key\":\"25A7\",\"mappings\":{\"default\":{\"default\":\"carré hachuré du haut à gauche vers le bas à droite\"}}},{\"category\":\"So\",\"key\":\"25A8\",\"mappings\":{\"default\":{\"default\":\"carré hachuré du haut à droite vers le bas à gauche\"}}},{\"category\":\"So\",\"key\":\"25A9\",\"mappings\":{\"default\":{\"default\":\"carré quadrillé en diagonale\"}}},{\"key\":\"25AA\",\"mappings\":{\"default\":{\"default\":\"petit carré noir\"}},\"category\":\"So\"},{\"key\":\"25AB\",\"mappings\":{\"default\":{\"default\":\"petit carré blanc\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25AC\",\"mappings\":{\"default\":{\"default\":\"rectangle noir\"}}},{\"key\":\"25AD\",\"mappings\":{\"default\":{\"default\":\"rectangle blanc\"}},\"category\":\"So\"},{\"key\":\"25AE\",\"mappings\":{\"default\":{\"default\":\"rectangle vertical noir\"}},\"category\":\"So\"},{\"key\":\"25AF\",\"mappings\":{\"default\":{\"default\":\"white vertical rectangle\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25B0\",\"mappings\":{\"default\":{\"default\":\"parallélogramme noir\"}}},{\"key\":\"25B1\",\"mappings\":{\"default\":{\"default\":\"parallélogramme blanc\"}},\"category\":\"So\"},{\"key\":\"25B2\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers le haut\"}},\"category\":\"So\"},{\"key\":\"25B3\",\"mappings\":{\"default\":{\"default\":\"triangle blanc pointant vers le haut\"}},\"category\":\"So\"},{\"key\":\"25B4\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers le haut\"}},\"category\":\"So\"},{\"key\":\"25B5\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc pointant vers le haut\"}},\"category\":\"So\"},{\"key\":\"25B6\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers la droite\"}},\"category\":\"So\"},{\"key\":\"25B7\",\"mappings\":{\"default\":{\"default\":\"triangle blanc pointant vers la droite\"}},\"category\":\"Sm\"},{\"key\":\"25B8\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers la droite\"}},\"category\":\"So\"},{\"key\":\"25B9\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc pointant vers la droite\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25BA\",\"mappings\":{\"default\":{\"default\":\"pointeur noir vers la droite\"}}},{\"category\":\"So\",\"key\":\"25BB\",\"mappings\":{\"default\":{\"default\":\"pointeur blanc vers la droite\"}}},{\"key\":\"25BC\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers le bas\"}},\"category\":\"So\"},{\"key\":\"25BD\",\"mappings\":{\"default\":{\"default\":\"triangle blanc pointant vers le bas\"}},\"category\":\"So\"},{\"key\":\"25BE\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers le bas\"}},\"category\":\"So\"},{\"key\":\"25BF\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc pointant vers le bas\"}},\"category\":\"So\"},{\"key\":\"25C0\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers la gauche\"}},\"category\":\"So\"},{\"key\":\"25C1\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc pointant vers la gauche\"}},\"category\":\"Sm\"},{\"key\":\"25C2\",\"mappings\":{\"default\":{\"default\":\"petit triangle noir pointant vers la gauche\"}},\"category\":\"So\"},{\"key\":\"25C3\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc pointant vers la gauche\"}},\"category\":\"So\"},{\"key\":\"25C4\",\"mappings\":{\"default\":{\"default\":\"pointeur noir vers la gauche\"}},\"category\":\"So\"},{\"key\":\"25C5\",\"mappings\":{\"default\":{\"default\":\"pointeur blanc vers la gauche\"}},\"category\":\"So\"},{\"key\":\"25C6\",\"mappings\":{\"default\":{\"default\":\"losange noir\"}},\"category\":\"So\"},{\"key\":\"25C7\",\"mappings\":{\"default\":{\"default\":\"losange blanc\"}},\"category\":\"So\"},{\"key\":\"25C8\",\"mappings\":{\"default\":{\"default\":\"losange blanc évidé\"}},\"category\":\"So\"},{\"key\":\"25C9\",\"mappings\":{\"default\":{\"default\":\"cercle blanc évidé\"}},\"category\":\"So\"},{\"key\":\"25CA\",\"mappings\":{\"default\":{\"default\":\"losange\"}},\"category\":\"So\"},{\"key\":\"25CB\",\"mappings\":{\"default\":{\"default\":\"cercle blanc\"}},\"category\":\"So\"},{\"key\":\"25CC\",\"mappings\":{\"default\":{\"default\":\"cercle en pointillés\"}},\"category\":\"So\"},{\"key\":\"25CD\",\"mappings\":{\"default\":{\"default\":\"cercle hachuré verticalement\"}},\"category\":\"So\"},{\"key\":\"25CE\",\"mappings\":{\"default\":{\"default\":\"deux cercles concentriques\"}},\"category\":\"So\"},{\"key\":\"25CF\",\"mappings\":{\"default\":{\"default\":\"cercle noir\"}},\"category\":\"So\"},{\"key\":\"25D0\",\"mappings\":{\"default\":{\"default\":\"cercle avec moitié gauche noire\"}},\"category\":\"So\"},{\"key\":\"25D1\",\"mappings\":{\"default\":{\"default\":\"cercle avec moitié droite noire\"}},\"category\":\"So\"},{\"key\":\"25D2\",\"mappings\":{\"default\":{\"default\":\"cercle avec moitié inférieure\"}},\"category\":\"So\"},{\"key\":\"25D3\",\"mappings\":{\"default\":{\"default\":\"cercle avec moitié supérieure\"}},\"category\":\"So\"},{\"key\":\"25D4\",\"mappings\":{\"default\":{\"default\":\"cercle avec quadrant supérieur droit noir\"}},\"category\":\"So\"},{\"key\":\"25D5\",\"mappings\":{\"default\":{\"default\":\"disque avec quadrant supérieur gauche blanc\"}},\"category\":\"So\"},{\"key\":\"25D6\",\"mappings\":{\"default\":{\"default\":\"demi disque gauche noir\"}},\"category\":\"So\"},{\"key\":\"25D7\",\"mappings\":{\"default\":{\"default\":\"demi disque droite noir\"}},\"category\":\"So\"},{\"key\":\"25D8\",\"mappings\":{\"default\":{\"default\":\"point noir au blanc\"}},\"category\":\"So\"},{\"key\":\"25D9\",\"mappings\":{\"default\":{\"default\":\"cercle noir au blanc\"}},\"category\":\"So\"},{\"key\":\"25DA\",\"mappings\":{\"default\":{\"default\":\"demi cercle supérieur noir au  blanc\"}},\"category\":\"So\"},{\"key\":\"25DB\",\"mappings\":{\"default\":{\"default\":\"demi cercle inférieur noir au  blanc\"}},\"category\":\"So\"},{\"key\":\"25DC\",\"mappings\":{\"default\":{\"default\":\"arc de cercle dans le quadrant supérieur gauchearc de cercle dans le quadrant supérieur gauche\"}},\"category\":\"So\"},{\"key\":\"25DD\",\"mappings\":{\"default\":{\"default\":\"arc de cercle dans le quadrant supérieur droit\"}},\"category\":\"So\"},{\"key\":\"25DE\",\"mappings\":{\"default\":{\"default\":\"arc de cercle dans le quadrant inférieur droit\"}},\"category\":\"So\"},{\"key\":\"25DF\",\"mappings\":{\"default\":{\"default\":\"arc de cercle dans le quadrant inférieur gauche\"}},\"category\":\"So\"},{\"key\":\"25E0\",\"mappings\":{\"default\":{\"default\":\"demi cercle supérieur\"}},\"category\":\"So\"},{\"key\":\"25E1\",\"mappings\":{\"default\":{\"default\":\"demi cercle inférieur\"}},\"category\":\"So\"},{\"key\":\"25E2\",\"mappings\":{\"default\":{\"default\":\"coin triangulaire noir inférieur droit\"}},\"category\":\"So\"},{\"key\":\"25E3\",\"mappings\":{\"default\":{\"default\":\"coin triangulaire noir inférieur gauche\"}},\"category\":\"So\"},{\"key\":\"25E4\",\"mappings\":{\"default\":{\"default\":\"coin triangulaire noir supérieur gauche\"}},\"category\":\"So\"},{\"key\":\"25E5\",\"mappings\":{\"default\":{\"default\":\"coin triangulaire noir supérieur droit\"}},\"category\":\"So\"},{\"key\":\"25E6\",\"mappings\":{\"default\":{\"default\":\"opérateur rond\"}},\"category\":\"So\"},{\"key\":\"25E7\",\"mappings\":{\"default\":{\"default\":\"carré à moitié gauche noire\"}},\"category\":\"So\"},{\"key\":\"25E8\",\"mappings\":{\"default\":{\"default\":\"carré à moitié droite noire\"}},\"category\":\"So\"},{\"key\":\"25E9\",\"mappings\":{\"default\":{\"default\":\"carré à moitié supérieure gauche noire\"}},\"category\":\"So\"},{\"key\":\"25EA\",\"mappings\":{\"default\":{\"default\":\"carré à moitié inférieure droite noire\"}},\"category\":\"So\"},{\"key\":\"25EB\",\"mappings\":{\"default\":{\"default\":\"carré blanc à ligne bissectrice verticale\"}},\"category\":\"So\"},{\"key\":\"25EC\",\"mappings\":{\"default\":{\"default\":\"triangle blanc pointant vers le haut pointé\"}},\"category\":\"So\"},{\"key\":\"25ED\",\"mappings\":{\"default\":{\"default\":\"triangle pointe vers le haut À moitié gauche noire\"}},\"category\":\"So\"},{\"key\":\"25EE\",\"mappings\":{\"default\":{\"default\":\"triangle pointe vers le haut À moitié droite noire\"}},\"category\":\"So\"},{\"key\":\"25EF\",\"mappings\":{\"default\":{\"default\":\"grand cercle\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"25F0\",\"mappings\":{\"default\":{\"default\":\"carré blanc à quartier supérieur gauche\"}}},{\"category\":\"So\",\"key\":\"25F1\",\"mappings\":{\"default\":{\"default\":\"carré blanc à quartier inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"25F2\",\"mappings\":{\"default\":{\"default\":\"carré blanc à quartier inférieur droit\"}}},{\"category\":\"So\",\"key\":\"25F3\",\"mappings\":{\"default\":{\"default\":\"carré blanc à quartier supérieur droit\"}}},{\"category\":\"So\",\"key\":\"25F4\",\"mappings\":{\"default\":{\"default\":\"cercle blanc à quartier supérieur gauche\"}}},{\"category\":\"So\",\"key\":\"25F5\",\"mappings\":{\"default\":{\"default\":\"cercle blanc à quartier inférieur gauche\"}}},{\"category\":\"So\",\"key\":\"25F6\",\"mappings\":{\"default\":{\"default\":\"cercle blanc à quartier inférieur droit\"}}},{\"category\":\"So\",\"key\":\"25F7\",\"mappings\":{\"default\":{\"default\":\"cercle blanc à quartier supérieur droit\"}}},{\"key\":\"25F8\",\"mappings\":{\"default\":{\"default\":\"triangle rectangle supérieur gauche\"}},\"category\":\"Sm\"},{\"key\":\"25F9\",\"mappings\":{\"default\":{\"default\":\"triangle rectangle supérieur droit\"}},\"category\":\"Sm\"},{\"key\":\"25FA\",\"mappings\":{\"default\":{\"default\":\"triangle rectangle inférieur gauche\"}},\"category\":\"Sm\"},{\"key\":\"25FB\",\"mappings\":{\"default\":{\"default\":\"carré moyen blanc\"}},\"category\":\"Sm\"},{\"key\":\"25FC\",\"mappings\":{\"default\":{\"default\":\"carré moyen noir\"}},\"category\":\"Sm\"},{\"key\":\"25FD\",\"mappings\":{\"default\":{\"default\":\"carré moyen blanc\"}},\"category\":\"Sm\"},{\"key\":\"25FE\",\"mappings\":{\"default\":{\"default\":\"carré moyen noir\"}},\"category\":\"Sm\"},{\"key\":\"25FF\",\"mappings\":{\"default\":{\"default\":\"triangle rectangle inférieur droit\"}},\"category\":\"Sm\"},{\"category\":\"So\",\"key\":\"2B12\",\"mappings\":{\"default\":{\"default\":\"carré à moitié supérieure noire\"}}},{\"category\":\"So\",\"key\":\"2B13\",\"mappings\":{\"default\":{\"default\":\"carré à moitié inférieure noire\"}}},{\"category\":\"So\",\"key\":\"2B14\",\"mappings\":{\"default\":{\"default\":\"carré à moitié diagonale supérieure droite noire\"}}},{\"category\":\"So\",\"key\":\"2B15\",\"mappings\":{\"default\":{\"default\":\"carré à moitié diagonale inférieure droite noire\"}}},{\"category\":\"So\",\"key\":\"2B16\",\"mappings\":{\"default\":{\"default\":\"losange à moitié gauche noire\"}}},{\"category\":\"So\",\"key\":\"2B17\",\"mappings\":{\"default\":{\"default\":\"losange à moitié droite noire\"}}},{\"category\":\"So\",\"key\":\"2B18\",\"mappings\":{\"default\":{\"default\":\"losange à moitié supérieure noire\"}}},{\"category\":\"So\",\"key\":\"2B19\",\"mappings\":{\"default\":{\"default\":\"losange à moitié inférieure noire\"}}},{\"category\":\"So\",\"key\":\"2B1A\",\"mappings\":{\"default\":{\"default\":\"carré en pointillés\"}}},{\"category\":\"So\",\"key\":\"2B1B\",\"mappings\":{\"default\":{\"default\":\"grand carré noir\"}}},{\"category\":\"So\",\"key\":\"2B1C\",\"mappings\":{\"default\":{\"default\":\"grand carré blanc\"}}},{\"category\":\"So\",\"key\":\"2B1D\",\"mappings\":{\"default\":{\"default\":\"très petit carré noir\"}}},{\"category\":\"So\",\"key\":\"2B1E\",\"mappings\":{\"default\":{\"default\":\"très petit carré blanc\"}}},{\"category\":\"So\",\"key\":\"2B1F\",\"mappings\":{\"default\":{\"default\":\"pentagone noir\"}}},{\"category\":\"So\",\"key\":\"2B20\",\"mappings\":{\"default\":{\"default\":\"pentagone blanc\"}}},{\"category\":\"So\",\"key\":\"2B21\",\"mappings\":{\"default\":{\"default\":\"hexagone blanc\"}}},{\"category\":\"So\",\"key\":\"2B22\",\"mappings\":{\"default\":{\"default\":\"hexagone noir\"}}},{\"category\":\"So\",\"key\":\"2B23\",\"mappings\":{\"default\":{\"default\":\"hexagone noir posé sur un côté\"}}},{\"category\":\"So\",\"key\":\"2B24\",\"mappings\":{\"default\":{\"default\":\"grand cercle noir\"}}},{\"category\":\"So\",\"key\":\"2B25\",\"mappings\":{\"default\":{\"default\":\"losange moyen noir\"}}},{\"category\":\"So\",\"key\":\"2B26\",\"mappings\":{\"default\":{\"default\":\"losange moyen blanc\"}}},{\"category\":\"So\",\"key\":\"2B27\",\"mappings\":{\"default\":{\"default\":\"rhombe moyen noir\"}}},{\"category\":\"So\",\"key\":\"2B28\",\"mappings\":{\"default\":{\"default\":\"rhombe moyen blanc\"}}},{\"category\":\"So\",\"key\":\"2B29\",\"mappings\":{\"default\":{\"default\":\"petit losange noir\"}}},{\"category\":\"So\",\"key\":\"2B2A\",\"mappings\":{\"default\":{\"default\":\"petit rhombe noir\"}}},{\"category\":\"So\",\"key\":\"2B2B\",\"mappings\":{\"default\":{\"default\":\"petit rhombe blanc\"}}},{\"category\":\"So\",\"key\":\"2B2C\",\"mappings\":{\"default\":{\"default\":\"ellipse horizontale noire\"}}},{\"category\":\"So\",\"key\":\"2B2D\",\"mappings\":{\"default\":{\"default\":\"ellipse horizontale blanche\"}}},{\"category\":\"So\",\"key\":\"2B2E\",\"mappings\":{\"default\":{\"default\":\"ellipse verticale noire\"}}},{\"category\":\"So\",\"key\":\"2B2F\",\"mappings\":{\"default\":{\"default\":\"ellipse verticale blanche\"}}},{\"key\":\"2B50\",\"mappings\":{\"default\":{\"default\":\"étoile blanche moyenne\"}},\"category\":\"So\"},{\"key\":\"2B51\",\"mappings\":{\"default\":{\"default\":\"petite étoile noire\"}},\"category\":\"So\"},{\"key\":\"2B52\",\"mappings\":{\"default\":{\"default\":\"petite étoile blanche\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2B53\",\"mappings\":{\"default\":{\"default\":\"pentagone noir pointant vers la droite\"}}},{\"category\":\"So\",\"key\":\"2B54\",\"mappings\":{\"default\":{\"default\":\"pentagone blanc pointant vers la droite\"}}},{\"category\":\"So\",\"key\":\"2B55\",\"mappings\":{\"default\":{\"default\":\"grand cercle gras\"}}},{\"category\":\"So\",\"key\":\"2B56\",\"mappings\":{\"default\":{\"default\":\"ovale gras avec ovale inscrit\"}}},{\"category\":\"So\",\"key\":\"2B57\",\"mappings\":{\"default\":{\"default\":\"cercle gras avec cercle inscrit\"}}},{\"category\":\"So\",\"key\":\"2B58\",\"mappings\":{\"default\":{\"default\":\"cercle gras\"}}},{\"category\":\"So\",\"key\":\"2B59\",\"mappings\":{\"default\":{\"default\":\"sautoir cerclé gras\"}}}]\n,\n\"fr/symbols/math_harpoons.js\": \n[{\"locale\":\"fr\"},{\"key\":\"21BC\",\"mappings\":{\"default\":{\"default\":\"harpon gauche avec dent dressée\"}},\"category\":\"So\"},{\"key\":\"21BD\",\"mappings\":{\"default\":{\"default\":\"harpon gauche avec dent baissée\"}},\"category\":\"So\"},{\"key\":\"21BE\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut avec dent droite\"}},\"category\":\"So\"},{\"key\":\"21BF\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut avec dent gauche\"}},\"category\":\"So\"},{\"key\":\"21C0\",\"mappings\":{\"default\":{\"default\":\"harpon droit avec dent dressée\"}},\"category\":\"So\"},{\"key\":\"21C1\",\"mappings\":{\"default\":{\"default\":\"harpon droit avec dent baissée\"}},\"category\":\"So\"},{\"key\":\"21C2\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas avec dent droite\"}},\"category\":\"So\"},{\"key\":\"21C3\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas avec dent gauche\"}},\"category\":\"So\"},{\"key\":\"21CB\",\"mappings\":{\"default\":{\"default\":\"harpon gauche par dessus harpon droit\"}},\"category\":\"So\"},{\"key\":\"21CC\",\"mappings\":{\"default\":{\"default\":\"harpon droit par dessus harpon gauche\"}},\"category\":\"So\"},{\"key\":\"294A\",\"mappings\":{\"default\":{\"default\":\"javelot à dents gauche dressée et droite baissée\"}},\"category\":\"Sm\"},{\"key\":\"294B\",\"mappings\":{\"default\":{\"default\":\"javelot à dents gauche baissée et droite dressée\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"294C\",\"mappings\":{\"default\":{\"default\":\"crampon à dents supérieure droite et inférieure gauche\"}}},{\"category\":\"Sm\",\"key\":\"294D\",\"mappings\":{\"default\":{\"default\":\"crampon à dents supérieure gauche et inférieure droite\"}}},{\"key\":\"294E\",\"mappings\":{\"default\":{\"default\":\"javelot à dents droite et gauche dressées\"}},\"category\":\"Sm\"},{\"key\":\"294F\",\"mappings\":{\"default\":{\"default\":\"javelot à dents supérieure et inférieure droites\"}},\"category\":\"Sm\"},{\"key\":\"2950\",\"mappings\":{\"default\":{\"default\":\"javelot à dents droite et gauche baissées\"}},\"category\":\"Sm\"},{\"key\":\"2951\",\"mappings\":{\"default\":{\"default\":\"javelot à dents supérieure et inférieure gauches\"}},\"category\":\"Sm\"},{\"key\":\"2952\",\"mappings\":{\"default\":{\"default\":\"harpon gauche à dent dressée contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2953\",\"mappings\":{\"default\":{\"default\":\"harpon droit à dent dressée contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2954\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent droite contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2955\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent droite contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2956\",\"mappings\":{\"default\":{\"default\":\"harpon gauche à dent baissée contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2957\",\"mappings\":{\"default\":{\"default\":\"harpon droit à dent baissée contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2958\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent gauche contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"2959\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent gauche contre taquet\"}},\"category\":\"Sm\"},{\"key\":\"295A\",\"mappings\":{\"default\":{\"default\":\"harpon gauche à dent dressée depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"295B\",\"mappings\":{\"default\":{\"default\":\"harpon droit à dent dressée depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"295C\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent droite depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"295D\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent droite depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"295E\",\"mappings\":{\"default\":{\"default\":\"harpon gauche à dent baissée depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"295F\",\"mappings\":{\"default\":{\"default\":\"harpon droit à dent baissée depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"2960\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent gauche depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"2961\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent gauche depuis taquet\"}},\"category\":\"Sm\"},{\"key\":\"2962\",\"mappings\":{\"default\":{\"default\":\"harpon gauche à dent dressée sur harpon gauche à dent baissée\"}},\"category\":\"Sm\"},{\"key\":\"2963\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent gauche à côté de harpon vers le haut à dent droite\"}},\"category\":\"Sm\"},{\"key\":\"2964\",\"mappings\":{\"default\":{\"default\":\"harpon droit à dent dressée par dessus harpon droit à dent baissée\"}},\"category\":\"Sm\"},{\"key\":\"2965\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent gauche à côté de harpon vers le bas à dent droite\"}},\"category\":\"Sm\"},{\"key\":\"2966\",\"mappings\":{\"default\":{\"default\":\"harpon à dent gauche dressée par dessus harpon à dent droite dressée\"}},\"category\":\"Sm\"},{\"key\":\"2967\",\"mappings\":{\"default\":{\"default\":\"harpon à dent gauche baissée par dessus harpon à dent droite baissée\"}},\"category\":\"Sm\"},{\"key\":\"2968\",\"mappings\":{\"default\":{\"default\":\"harpon à dent droite dressée par dessus harpon à dent gauche dressée\"}},\"category\":\"Sm\"},{\"key\":\"2969\",\"mappings\":{\"default\":{\"default\":\"harpon à dent droite baissée par dessus harpon à dent gauche baissée\"}},\"category\":\"Sm\"},{\"key\":\"296A\",\"mappings\":{\"default\":{\"default\":\"harpon à dent gauche dressée par dessus long trait\"}},\"category\":\"Sm\"},{\"key\":\"296B\",\"mappings\":{\"default\":{\"default\":\"long trait par dessus harpon à dent gauche baissée\"}},\"category\":\"Sm\"},{\"key\":\"296C\",\"mappings\":{\"default\":{\"default\":\"harpon à dent droite dressée par dessus long trait\"}},\"category\":\"Sm\"},{\"key\":\"296D\",\"mappings\":{\"default\":{\"default\":\"long trait par dessus harpon à dent droite baissée\"}},\"category\":\"Sm\"},{\"key\":\"296E\",\"mappings\":{\"default\":{\"default\":\"harpon vers le haut à dent gauche à côté de harpon vers le bas à dent droite\"}},\"category\":\"Sm\"},{\"key\":\"296F\",\"mappings\":{\"default\":{\"default\":\"harpon vers le bas à dent gauche à côté de harpon vers le haut à dent droite\"}},\"category\":\"Sm\"},{\"key\":\"297C\",\"mappings\":{\"default\":{\"default\":\"ancre gauche\"}},\"category\":\"Sm\"},{\"key\":\"297D\",\"mappings\":{\"default\":{\"default\":\"ancre droite\"}},\"category\":\"Sm\"},{\"key\":\"297E\",\"mappings\":{\"default\":{\"default\":\"ancre vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"297F\",\"mappings\":{\"default\":{\"default\":\"ancre vers le bas\"}},\"category\":\"Sm\"}]\n,\n\"fr/symbols/math_non_characters.js\": \n[{\"locale\":\"fr\"},{\"key\":\"210F\",\"mappings\":{\"default\":{\"default\":\"constante de planck sur deux pi\"}},\"category\":\"Ll\"},{\"category\":\"So\",\"key\":\"2114\",\"mappings\":{\"default\":{\"default\":\"symbole l b barré\"}}},{\"key\":\"2116\",\"mappings\":{\"default\":{\"default\":\"symbole numéro\"}},\"category\":\"So\"},{\"key\":\"2117\",\"mappings\":{\"default\":{\"default\":\"copyright de programme sonore\"}},\"category\":\"So\"},{\"key\":\"211E\",\"mappings\":{\"default\":{\"default\":\"ordonnances\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"211F\",\"mappings\":{\"default\":{\"default\":\"répons\"}}},{\"category\":\"So\",\"key\":\"2120\",\"mappings\":{\"default\":{\"default\":\"symbole anglais marque de service\"}}},{\"category\":\"So\",\"key\":\"2121\",\"mappings\":{\"default\":{\"default\":\"signe de téléphone\"}}},{\"key\":\"2122\",\"mappings\":{\"default\":{\"default\":\"symbole anglais marque de commerce\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2123\",\"mappings\":{\"default\":{\"default\":\"versicule\"}}},{\"key\":\"2125\",\"mappings\":{\"default\":{\"default\":\"symbole once\"}},\"category\":\"So\"},{\"key\":\"2126\",\"mappings\":{\"default\":{\"default\":\"ohm\"}},\"category\":\"Lu\"},{\"key\":\"2127\",\"mappings\":{\"default\":{\"default\":\"ohm culbuté\"}},\"category\":\"So\"},{\"key\":\"212A\",\"mappings\":{\"default\":{\"default\":\"degré kelvin\"}},\"category\":\"Lu\"},{\"key\":\"212B\",\"mappings\":{\"default\":{\"default\":\"angstroms\"}},\"category\":\"Lu\"},{\"category\":\"So\",\"key\":\"212E\",\"mappings\":{\"default\":{\"default\":\"symbole estimé\"}}},{\"key\":\"2132\",\"mappings\":{\"default\":{\"default\":\"f culbuté majuscule\"}},\"category\":\"Lu\"},{\"category\":\"Ll\",\"key\":\"2139\",\"mappings\":{\"default\":{\"default\":\"bureau d'information\"}}},{\"category\":\"So\",\"key\":\"213A\",\"mappings\":{\"default\":{\"default\":\"Q majuscule couché\"}}},{\"category\":\"So\",\"key\":\"213B\",\"mappings\":{\"default\":{\"default\":\"symbole télécopie\"}}},{\"category\":\"Sm\",\"key\":\"2141\",\"mappings\":{\"default\":{\"default\":\"G culbuté majuscule sans empattement\"}}},{\"category\":\"Sm\",\"key\":\"2142\",\"mappings\":{\"default\":{\"default\":\"L culbuté majuscule sans empattement\"}}},{\"category\":\"Sm\",\"key\":\"2143\",\"mappings\":{\"default\":{\"default\":\"L réfléchi majuscule sans empattement\"}}},{\"category\":\"Sm\",\"key\":\"2144\",\"mappings\":{\"default\":{\"default\":\"Y culbuté majuscule sans empattement\"}}}]\n,\n\"fr/symbols/math_symbols.js\": \n[{\"locale\":\"fr\"},{\"key\":\"0021\",\"mappings\":{\"default\":{\"default\":\"factorielle\"}},\"category\":\"Po\"},{\"key\":\"0022\",\"mappings\":{\"default\":{\"default\":\"petit guillemet\"}},\"category\":\"Po\"},{\"key\":\"0023\",\"mappings\":{\"default\":{\"default\":\"dièse\"}},\"category\":\"Po\"},{\"key\":\"0024\",\"mappings\":{\"default\":{\"default\":\"dollars\"}},\"category\":\"Sc\"},{\"key\":\"0025\",\"mappings\":{\"default\":{\"default\":\"pourcent\"}},\"category\":\"Po\"},{\"key\":\"0026\",\"mappings\":{\"default\":{\"default\":\"esperluette\"}},\"category\":\"Po\"},{\"key\":\"0027\",\"mappings\":{\"default\":{\"default\":\"prime\",\"alternative\":\"apostrophe\"}},\"category\":\"Po\"},{\"key\":\"002A\",\"mappings\":{\"default\":{\"default\":\"astérisque\"}},\"category\":\"Po\"},{\"key\":\"002B\",\"mappings\":{\"default\":{\"default\":\"plus\"}},\"category\":\"Sm\"},{\"key\":\"002C\",\"mappings\":{\"default\":{\"default\":\"virgule\"}},\"category\":\"Po\"},{\"key\":\"002D\",\"mappings\":{\"default\":{\"default\":\"moins\"}},\"category\":\"Pd\"},{\"key\":\"002E\",\"mappings\":{\"default\":{\"default\":\"point\"}},\"category\":\"Po\"},{\"key\":\"002F\",\"mappings\":{\"default\":{\"default\":\"barre oblique\"}},\"category\":\"Po\"},{\"key\":\"003A\",\"mappings\":{\"default\":{\"default\":\"deux points\"}},\"category\":\"Po\"},{\"key\":\"003B\",\"mappings\":{\"default\":{\"default\":\"point virgule\"}},\"category\":\"Po\"},{\"key\":\"003C\",\"mappings\":{\"default\":{\"default\":\"inférieur à\"}},\"category\":\"Sm\"},{\"key\":\"003D\",\"mappings\":{\"default\":{\"default\":\"égale\"}},\"category\":\"Sm\"},{\"key\":\"003E\",\"mappings\":{\"default\":{\"default\":\"supérieur à\"}},\"category\":\"Sm\"},{\"key\":\"003F\",\"mappings\":{\"default\":{\"default\":\"point d'interrogation\"}},\"category\":\"Po\"},{\"key\":\"0040\",\"mappings\":{\"default\":{\"default\":\"arobase\"}},\"category\":\"Po\"},{\"key\":\"005C\",\"mappings\":{\"default\":{\"default\":\"barre oblique inversée\"}},\"category\":\"Po\"},{\"key\":\"005E\",\"mappings\":{\"default\":{\"default\":\"circonflexe\"}},\"category\":\"Sk\"},{\"key\":\"005F\",\"mappings\":{\"default\":{\"default\":\"tiret bas\"}},\"category\":\"Pc\"},{\"key\":\"0060\",\"mappings\":{\"default\":{\"default\":\"accent grave\"}},\"category\":\"Sk\"},{\"key\":\"007C\",\"mappings\":{\"default\":{\"default\":\"barre verticale\"}},\"category\":\"Sm\"},{\"key\":\"007E\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sm\"},{\"key\":\"00A1\",\"mappings\":{\"default\":{\"default\":\"point d'exclamation renversé\"}},\"category\":\"Po\"},{\"key\":\"00A2\",\"mappings\":{\"default\":{\"default\":\"centimes\"}},\"category\":\"Sc\"},{\"key\":\"00A3\",\"mappings\":{\"default\":{\"default\":\"livres\"}},\"category\":\"Sc\"},{\"key\":\"00A4\",\"mappings\":{\"default\":{\"default\":\"symbole monétaire\"}},\"category\":\"Sc\"},{\"key\":\"00A5\",\"mappings\":{\"default\":{\"default\":\"yen\"}},\"category\":\"Sc\"},{\"key\":\"00A6\",\"mappings\":{\"default\":{\"default\":\"barre déjointe\"}},\"category\":\"So\"},{\"key\":\"00A7\",\"mappings\":{\"default\":{\"default\":\"paragraphe\"}},\"category\":\"Po\"},{\"key\":\"00A8\",\"mappings\":{\"default\":{\"default\":\"tréma\"}},\"category\":\"Sk\"},{\"key\":\"00A9\",\"mappings\":{\"default\":{\"default\":\"copyright\"}},\"category\":\"So\"},{\"key\":\"00AA\",\"mappings\":{\"default\":{\"default\":\"indicateur ordinal féminin\"}},\"category\":\"Lo\"},{\"key\":\"00AB\",\"mappings\":{\"default\":{\"default\":\"guillemet chevron pointant gauche\"}},\"category\":\"Pi\"},{\"key\":\"00AC\",\"mappings\":{\"default\":{\"default\":\"négation\"}},\"category\":\"Sm\"},{\"key\":\"00AE\",\"mappings\":{\"default\":{\"default\":\"symbole marque déposée\"}},\"category\":\"So\"},{\"key\":\"00AF\",\"mappings\":{\"default\":{\"default\":\"macron\"}},\"category\":\"Sk\"},{\"key\":\"00B0\",\"mappings\":{\"default\":{\"default\":\"degrés\"}},\"category\":\"So\"},{\"key\":\"00B1\",\"mappings\":{\"default\":{\"default\":\"plus ou moins\"}},\"category\":\"Sm\"},{\"key\":\"00B4\",\"mappings\":{\"default\":{\"default\":\"accent aigu\"}},\"category\":\"Sk\"},{\"key\":\"00B5\",\"mappings\":{\"default\":{\"default\":\"symbole micro\"}},\"category\":\"Ll\"},{\"key\":\"00B6\",\"mappings\":{\"default\":{\"default\":\"fin de paragraphe\"}},\"category\":\"Po\"},{\"key\":\"00B7\",\"mappings\":{\"default\":{\"default\":\"point médian\"}},\"category\":\"Po\"},{\"key\":\"00B8\",\"mappings\":{\"default\":{\"default\":\"cédille\"}},\"category\":\"Sk\"},{\"key\":\"00BA\",\"mappings\":{\"default\":{\"default\":\"indicateur ordinal masculin\"}},\"category\":\"Lo\"},{\"key\":\"00BB\",\"mappings\":{\"default\":{\"default\":\"guillemet chevron pointant droite\"}},\"category\":\"Pf\"},{\"key\":\"00BF\",\"mappings\":{\"default\":{\"default\":\"point d'interrogation renversé\"}},\"category\":\"Po\"},{\"key\":\"00D7\",\"mappings\":{\"default\":{\"default\":\"multiplié par\"}},\"category\":\"Sm\"},{\"key\":\"00F7\",\"mappings\":{\"default\":{\"default\":\"divisé par\"}},\"category\":\"Sm\"},{\"key\":\"02D8\",\"mappings\":{\"default\":{\"default\":\"brève\"}},\"category\":\"Sk\"},{\"key\":\"02D9\",\"mappings\":{\"default\":{\"default\":\"point en chef\"}},\"category\":\"Sk\"},{\"key\":\"02DA\",\"mappings\":{\"default\":{\"default\":\"rond en chef\"}},\"category\":\"Sk\"},{\"key\":\"02DB\",\"mappings\":{\"default\":{\"default\":\"ogonek\"}},\"category\":\"Sk\"},{\"key\":\"02DC\",\"mappings\":{\"default\":{\"default\":\"tilde\"}},\"category\":\"Sk\"},{\"key\":\"02DD\",\"mappings\":{\"default\":{\"default\":\"double accent aigu\"}},\"category\":\"Sk\"},{\"key\":\"2010\",\"mappings\":{\"default\":{\"default\":\"trait d'union\"}},\"category\":\"Pd\"},{\"category\":\"Pd\",\"key\":\"2011\",\"mappings\":{\"default\":{\"default\":\"trait d'union insécable\"}}},{\"category\":\"Pd\",\"key\":\"2012\",\"mappings\":{\"default\":{\"default\":\"tiret numérique\"}}},{\"key\":\"2013\",\"mappings\":{\"default\":{\"default\":\"trait d'union insécable\"}},\"category\":\"Pd\"},{\"key\":\"2014\",\"mappings\":{\"default\":{\"default\":\"tiret numérique\"}},\"category\":\"Pd\"},{\"key\":\"2015\",\"mappings\":{\"default\":{\"default\":\"barre horizontalle\"}},\"category\":\"Pd\"},{\"key\":\"2016\",\"mappings\":{\"default\":{\"default\":\"double ligne verticale\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2017\",\"mappings\":{\"default\":{\"default\":\"double trait souscrit\"}}},{\"key\":\"2018\",\"mappings\":{\"default\":{\"default\":\"guillemet apostrophe culbuté\"}},\"category\":\"Pi\"},{\"key\":\"2019\",\"mappings\":{\"default\":{\"default\":\"guillemet apostrophe\"}},\"category\":\"Pf\"},{\"key\":\"201A\",\"mappings\":{\"default\":{\"default\":\"guillemet virgule inférieur\"}},\"category\":\"Ps\"},{\"category\":\"Pi\",\"key\":\"201B\",\"mappings\":{\"default\":{\"default\":\"guillemet virgule supérieur culbuté\"}}},{\"key\":\"201C\",\"mappings\":{\"default\":{\"default\":\"guillemet apostrophe double culbuté\"}},\"category\":\"Pi\"},{\"key\":\"201D\",\"mappings\":{\"default\":{\"default\":\"guillemet apostrophe double\"}},\"category\":\"Pf\"},{\"key\":\"201E\",\"mappings\":{\"default\":{\"default\":\"guillemet double prime\"}},\"category\":\"Ps\"},{\"category\":\"Pi\",\"key\":\"201F\",\"mappings\":{\"default\":{\"default\":\"guillemet virgule double supérieur culbuté\"}}},{\"key\":\"2020\",\"mappings\":{\"default\":{\"default\":\"obèle\"}},\"category\":\"Po\"},{\"key\":\"2021\",\"mappings\":{\"default\":{\"default\":\"double obèle\"}},\"category\":\"Po\"},{\"key\":\"2022\",\"mappings\":{\"default\":{\"default\":\"puce\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2023\",\"mappings\":{\"default\":{\"default\":\"puce triangulaire\"}}},{\"category\":\"Po\",\"key\":\"2024\",\"mappings\":{\"default\":{\"default\":\"point de conduite simple\"}}},{\"key\":\"2025\",\"mappings\":{\"default\":{\"default\":\"point de conduite double\"}},\"category\":\"Po\"},{\"key\":\"2026\",\"mappings\":{\"default\":{\"default\":\"points de suspension\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2027\",\"mappings\":{\"default\":{\"default\":\"point de coupure de mot\"}}},{\"key\":\"2030\",\"mappings\":{\"default\":{\"default\":\"symbole pour mille\"}},\"category\":\"Po\"},{\"key\":\"2031\",\"mappings\":{\"default\":{\"default\":\"symbole pour dix mille\"}},\"category\":\"Po\"},{\"key\":\"2032\",\"mappings\":{\"default\":{\"default\":\"prime\"}},\"category\":\"Po\"},{\"key\":\"2033\",\"mappings\":{\"default\":{\"default\":\"double prime\"}},\"category\":\"Po\"},{\"key\":\"2034\",\"mappings\":{\"default\":{\"default\":\"triple prime\"}},\"category\":\"Po\"},{\"key\":\"2035\",\"mappings\":{\"default\":{\"default\":\"prime réfléchi\"}},\"category\":\"Po\"},{\"key\":\"2036\",\"mappings\":{\"default\":{\"default\":\"double prime réfléchi\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2037\",\"mappings\":{\"default\":{\"default\":\"triple prime réfléchi\"}}},{\"category\":\"Po\",\"key\":\"2038\",\"mappings\":{\"default\":{\"default\":\"chevron d'insertion\"}}},{\"key\":\"2039\",\"mappings\":{\"default\":{\"default\":\"guillemet simple gauche\"}},\"category\":\"Pi\"},{\"key\":\"203A\",\"mappings\":{\"default\":{\"default\":\"guillemet simple droite\"}},\"category\":\"Pf\"},{\"category\":\"Po\",\"key\":\"203B\",\"mappings\":{\"default\":{\"default\":\"marque de référence\"}}},{\"category\":\"Po\",\"key\":\"203C\",\"mappings\":{\"default\":{\"default\":\"double point d'exclamation\"}}},{\"category\":\"Po\",\"key\":\"203D\",\"mappings\":{\"default\":{\"default\":\"point exclarrogatif\"}}},{\"key\":\"203E\",\"mappings\":{\"default\":{\"default\":\"tiret en chef\"}},\"category\":\"Po\"},{\"category\":\"Pc\",\"key\":\"203F\",\"mappings\":{\"default\":{\"default\":\"tirant souscrit\"}}},{\"key\":\"2040\",\"mappings\":{\"default\":{\"default\":\"tirant en chef\"}},\"category\":\"Pc\"},{\"key\":\"2041\",\"mappings\":{\"default\":{\"default\":\"lambda d'insertion\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2042\",\"mappings\":{\"default\":{\"default\":\"astérisme\"}}},{\"key\":\"2043\",\"mappings\":{\"default\":{\"default\":\"puce trait d'union\"}},\"category\":\"Po\"},{\"key\":\"2044\",\"mappings\":{\"default\":{\"default\":\"barre de fraction\"}},\"category\":\"Sm\"},{\"category\":\"Po\",\"key\":\"2047\",\"mappings\":{\"default\":{\"default\":\"double point d'interrogation\"}}},{\"category\":\"Po\",\"key\":\"2048\",\"mappings\":{\"default\":{\"default\":\"point d'interrogation exclamation\"}}},{\"category\":\"Po\",\"key\":\"2049\",\"mappings\":{\"default\":{\"default\":\"point d'exclamation interrogation\"}}},{\"category\":\"Po\",\"key\":\"204B\",\"mappings\":{\"default\":{\"default\":\"pied de mouche réfléchi\"}}},{\"category\":\"Po\",\"key\":\"204C\",\"mappings\":{\"default\":{\"default\":\"puce noire tronquée à droite\"}}},{\"category\":\"Po\",\"key\":\"204D\",\"mappings\":{\"default\":{\"default\":\"puce noire tronquée à gauche\"}}},{\"category\":\"Po\",\"key\":\"204E\",\"mappings\":{\"default\":{\"default\":\"astérisque baissé\"}}},{\"key\":\"204F\",\"mappings\":{\"default\":{\"default\":\"point virgule réfléchi\"}},\"category\":\"Po\"},{\"key\":\"2050\",\"mappings\":{\"default\":{\"default\":\"resserrer\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2051\",\"mappings\":{\"default\":{\"default\":\"deux astérisques alignés verticalement\"}}},{\"category\":\"Sm\",\"key\":\"2052\",\"mappings\":{\"default\":{\"default\":\"moins commercial\"}}},{\"category\":\"Po\",\"key\":\"2053\",\"mappings\":{\"default\":{\"default\":\"tiret ondé\"}}},{\"category\":\"Pc\",\"key\":\"2054\",\"mappings\":{\"default\":{\"default\":\"dos d'âne souscrit\"}}},{\"category\":\"Po\",\"key\":\"2055\",\"mappings\":{\"default\":{\"default\":\"point fleur\"}}},{\"category\":\"Po\",\"key\":\"2056\",\"mappings\":{\"default\":{\"default\":\"trois points\"}}},{\"key\":\"2057\",\"mappings\":{\"default\":{\"default\":\"quadruple prime\"}},\"category\":\"Po\"},{\"category\":\"Po\",\"key\":\"2058\",\"mappings\":{\"default\":{\"default\":\"quatre points en losange\"}}},{\"category\":\"Po\",\"key\":\"2059\",\"mappings\":{\"default\":{\"default\":\"cinq points en quinconce\"}}},{\"category\":\"Po\",\"key\":\"205A\",\"mappings\":{\"default\":{\"default\":\"deux points en capitale\"}}},{\"category\":\"Po\",\"key\":\"205B\",\"mappings\":{\"default\":{\"default\":\"quatre points en croix\"}}},{\"category\":\"Po\",\"key\":\"205C\",\"mappings\":{\"default\":{\"default\":\"croix pointée\"}}},{\"category\":\"Po\",\"key\":\"205D\",\"mappings\":{\"default\":{\"default\":\"trois points vertical\"}}},{\"category\":\"Po\",\"key\":\"205E\",\"mappings\":{\"default\":{\"default\":\"quatre points vertical\"}}},{\"category\":\"Sm\",\"key\":\"207A\",\"mappings\":{\"default\":{\"default\":\"exposant signe plus\"}}},{\"category\":\"Sm\",\"key\":\"207B\",\"mappings\":{\"default\":{\"default\":\"exposant signe moins\"}}},{\"category\":\"Sm\",\"key\":\"207C\",\"mappings\":{\"default\":{\"default\":\"exposant signe égal\"}}},{\"category\":\"Ps\",\"key\":\"207D\",\"mappings\":{\"default\":{\"default\":\"exposant parenthèse gauche\"}}},{\"category\":\"Pe\",\"key\":\"207E\",\"mappings\":{\"default\":{\"default\":\"exposant parenthèse droite\"}}},{\"category\":\"Sm\",\"key\":\"208A\",\"mappings\":{\"default\":{\"default\":\"indice signe plus\"}}},{\"category\":\"Sm\",\"key\":\"208B\",\"mappings\":{\"default\":{\"default\":\"indice signe moins\"}}},{\"category\":\"Sm\",\"key\":\"208C\",\"mappings\":{\"default\":{\"default\":\"indice signe égal\"}}},{\"category\":\"Ps\",\"key\":\"208D\",\"mappings\":{\"default\":{\"default\":\"indice parenthèse gauche\"}}},{\"category\":\"Pe\",\"key\":\"208E\",\"mappings\":{\"default\":{\"default\":\"indice parenthèse droite\"}}},{\"category\":\"So\",\"key\":\"214A\",\"mappings\":{\"default\":{\"default\":\"limite de propriété\"}}},{\"category\":\"Sm\",\"key\":\"214B\",\"mappings\":{\"default\":{\"default\":\"perluète culbutée\"}}},{\"category\":\"So\",\"key\":\"214C\",\"mappings\":{\"default\":{\"default\":\"symbole per\"}}},{\"category\":\"So\",\"key\":\"214D\",\"mappings\":{\"default\":{\"default\":\"aktieselskab\"}}},{\"category\":\"Ll\",\"key\":\"214E\",\"mappings\":{\"default\":{\"default\":\"minuscule f culbuté\"}}},{\"key\":\"2200\",\"mappings\":{\"default\":{\"default\":\"pour tous\"}},\"category\":\"Sm\"},{\"key\":\"2201\",\"mappings\":{\"default\":{\"default\":\"complément\"}},\"category\":\"Sm\"},{\"key\":\"2203\",\"mappings\":{\"default\":{\"default\":\"il existe\"}},\"category\":\"Sm\"},{\"key\":\"2204\",\"mappings\":{\"default\":{\"default\":\"il n'existe pas\"}},\"category\":\"Sm\"},{\"key\":\"2205\",\"mappings\":{\"default\":{\"default\":\"ensemble vide\"}},\"category\":\"Sm\"},{\"key\":\"2206\",\"mappings\":{\"default\":{\"default\":\"incrément\"}},\"category\":\"Sm\"},{\"key\":\"2208\",\"mappings\":{\"default\":{\"default\":\"appartient à\"}},\"category\":\"Sm\"},{\"key\":\"2209\",\"mappings\":{\"default\":{\"default\":\"n'appartient pas à\"}},\"category\":\"Sm\"},{\"key\":\"220A\",\"mappings\":{\"default\":{\"default\":\"appartient à\"}},\"category\":\"Sm\"},{\"key\":\"220B\",\"mappings\":{\"default\":{\"default\":\"contient comme élément\"}},\"category\":\"Sm\"},{\"key\":\"220C\",\"mappings\":{\"default\":{\"default\":\"ne contient pas comme élément\"}},\"category\":\"Sm\"},{\"key\":\"220D\",\"mappings\":{\"default\":{\"default\":\"contient comme élément\"}},\"category\":\"Sm\"},{\"key\":\"220E\",\"mappings\":{\"default\":{\"default\":\"ce qu'il fallait démontrer\"}},\"category\":\"Sm\"},{\"key\":\"220F\",\"mappings\":{\"default\":{\"default\":\"produit\"}},\"category\":\"Sm\"},{\"key\":\"2210\",\"mappings\":{\"default\":{\"default\":\"coproduit\"}},\"category\":\"Sm\"},{\"key\":\"2211\",\"mappings\":{\"default\":{\"default\":\"sommation\"}},\"category\":\"Sm\"},{\"key\":\"2212\",\"mappings\":{\"default\":{\"default\":\"moins\"}},\"category\":\"Sm\"},{\"key\":\"2213\",\"mappings\":{\"default\":{\"default\":\"moins ou plus\"}},\"category\":\"Sm\"},{\"key\":\"2214\",\"mappings\":{\"default\":{\"default\":\"plus pointé\"}},\"category\":\"Sm\"},{\"key\":\"2215\",\"mappings\":{\"default\":{\"default\":\"division\"}},\"category\":\"Sm\"},{\"key\":\"2216\",\"mappings\":{\"default\":{\"default\":\"différence d'ensembles\"}},\"category\":\"Sm\"},{\"key\":\"2217\",\"mappings\":{\"default\":{\"default\":\"opérateur astérisque\"}},\"category\":\"Sm\"},{\"key\":\"2218\",\"mappings\":{\"default\":{\"default\":\"opérateur rond\"}},\"category\":\"Sm\"},{\"key\":\"2219\",\"mappings\":{\"default\":{\"default\":\"point médian\"}},\"category\":\"Sm\"},{\"key\":\"221A\",\"mappings\":{\"default\":{\"default\":\"racine carrée\"}},\"category\":\"Sm\"},{\"key\":\"221B\",\"mappings\":{\"default\":{\"default\":\"racine cubique\"}},\"category\":\"Sm\"},{\"key\":\"221C\",\"mappings\":{\"default\":{\"default\":\"racine quatrième\"}},\"category\":\"Sm\"},{\"key\":\"221D\",\"mappings\":{\"default\":{\"default\":\"proportionnel à\"}},\"category\":\"Sm\"},{\"key\":\"221E\",\"mappings\":{\"default\":{\"default\":\"infini\"}},\"category\":\"Sm\"},{\"key\":\"221F\",\"mappings\":{\"default\":{\"default\":\"angle droit\"}},\"category\":\"Sm\"},{\"key\":\"2220\",\"mappings\":{\"default\":{\"default\":\"angle\"}},\"category\":\"Sm\"},{\"key\":\"2221\",\"mappings\":{\"default\":{\"default\":\"angle mesuré\"}},\"category\":\"Sm\"},{\"key\":\"2222\",\"mappings\":{\"default\":{\"default\":\"angle sphérique\"}},\"category\":\"Sm\"},{\"key\":\"2223\",\"mappings\":{\"default\":{\"default\":\"est un diviseur de\"}},\"category\":\"Sm\"},{\"key\":\"2224\",\"mappings\":{\"default\":{\"default\":\"n'est pas un diviseur de\"}},\"category\":\"Sm\"},{\"key\":\"2225\",\"mappings\":{\"default\":{\"default\":\"parallèle à\"}},\"category\":\"Sm\"},{\"key\":\"2226\",\"mappings\":{\"default\":{\"default\":\"non parallèle à\"}},\"category\":\"Sm\"},{\"key\":\"2227\",\"mappings\":{\"default\":{\"default\":\"et logique\"}},\"category\":\"Sm\"},{\"key\":\"2228\",\"mappings\":{\"default\":{\"default\":\"ou logique\"}},\"category\":\"Sm\"},{\"key\":\"2229\",\"mappings\":{\"default\":{\"default\":\"intersection\"}},\"category\":\"Sm\"},{\"key\":\"222A\",\"mappings\":{\"default\":{\"default\":\"union\"}},\"category\":\"Sm\"},{\"key\":\"222B\",\"mappings\":{\"default\":{\"default\":\"intégrale\"}},\"category\":\"Sm\"},{\"key\":\"222C\",\"mappings\":{\"default\":{\"default\":\"intégrale double\"}},\"category\":\"Sm\"},{\"key\":\"222D\",\"mappings\":{\"default\":{\"default\":\"intégrale triple\"}},\"category\":\"Sm\"},{\"key\":\"222E\",\"mappings\":{\"default\":{\"default\":\"intégrale de contour\"}},\"category\":\"Sm\"},{\"key\":\"222F\",\"mappings\":{\"default\":{\"default\":\"intégrale de surface\"}},\"category\":\"Sm\"},{\"key\":\"2230\",\"mappings\":{\"default\":{\"default\":\"intégrale de volume\"}},\"category\":\"Sm\"},{\"key\":\"2231\",\"mappings\":{\"default\":{\"default\":\"intégrale en sens négatif\"}},\"category\":\"Sm\"},{\"key\":\"2232\",\"mappings\":{\"default\":{\"default\":\"intégrale de contour en sens négatif\"}},\"category\":\"Sm\"},{\"key\":\"2233\",\"mappings\":{\"default\":{\"default\":\"intégrale de contour en sens positif\"}},\"category\":\"Sm\"},{\"key\":\"2234\",\"mappings\":{\"default\":{\"default\":\"par conséquent\"}},\"category\":\"Sm\"},{\"key\":\"2235\",\"mappings\":{\"default\":{\"default\":\"parce que\"}},\"category\":\"Sm\"},{\"key\":\"2236\",\"mappings\":{\"default\":{\"default\":\"rapport\"}},\"category\":\"Sm\"},{\"key\":\"2237\",\"mappings\":{\"default\":{\"default\":\"proportion\"}},\"category\":\"Sm\"},{\"key\":\"2238\",\"mappings\":{\"default\":{\"default\":\"moins pointé\"}},\"category\":\"Sm\"},{\"key\":\"2239\",\"mappings\":{\"default\":{\"default\":\"excès\"}},\"category\":\"Sm\"},{\"key\":\"223A\",\"mappings\":{\"default\":{\"default\":\"proportion géométrique\"}},\"category\":\"Sm\"},{\"key\":\"223B\",\"mappings\":{\"default\":{\"default\":\"homothétique\"}},\"category\":\"Sm\"},{\"key\":\"223C\",\"mappings\":{\"default\":{\"default\":\"opérateur tilde\"}},\"category\":\"Sm\"},{\"key\":\"223D\",\"mappings\":{\"default\":{\"default\":\"opérateur tilde renversé\"}},\"category\":\"Sm\"},{\"key\":\"223E\",\"mappings\":{\"default\":{\"default\":\"s couché renversé\"}},\"category\":\"Sm\"},{\"key\":\"223F\",\"mappings\":{\"default\":{\"default\":\"sinusoïde\"}},\"category\":\"Sm\"},{\"key\":\"2240\",\"mappings\":{\"default\":{\"default\":\"produit couronne\"}},\"category\":\"Sm\"},{\"key\":\"2241\",\"mappings\":{\"default\":{\"default\":\"non tilde\"}},\"category\":\"Sm\"},{\"key\":\"2242\",\"mappings\":{\"default\":{\"default\":\"moins tilde\"}},\"category\":\"Sm\"},{\"key\":\"2243\",\"mappings\":{\"default\":{\"default\":\"asymptotiquement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2244\",\"mappings\":{\"default\":{\"default\":\"non asymptotiquement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2245\",\"mappings\":{\"default\":{\"default\":\"approximativement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2246\",\"mappings\":{\"default\":{\"default\":\"approximativement mais non strictement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2247\",\"mappings\":{\"default\":{\"default\":\"ni approximativement ni strictement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2248\",\"mappings\":{\"default\":{\"default\":\"presque égal à\"}},\"category\":\"Sm\"},{\"key\":\"2249\",\"mappings\":{\"default\":{\"default\":\"non presque égal à\"}},\"category\":\"Sm\"},{\"key\":\"224A\",\"mappings\":{\"default\":{\"default\":\"presque égal ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"224B\",\"mappings\":{\"default\":{\"default\":\"triple tilde\"}},\"category\":\"Sm\"},{\"key\":\"224C\",\"mappings\":{\"default\":{\"default\":\"entièrement égal à\"}},\"category\":\"Sm\"},{\"key\":\"224D\",\"mappings\":{\"default\":{\"default\":\"équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"224E\",\"mappings\":{\"default\":{\"default\":\"géométriquement équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"224F\",\"mappings\":{\"default\":{\"default\":\"différence entre\"}},\"category\":\"Sm\"},{\"key\":\"2250\",\"mappings\":{\"default\":{\"default\":\"tend vers la limite\"}},\"category\":\"Sm\"},{\"key\":\"2251\",\"mappings\":{\"default\":{\"default\":\"géométriquement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2252\",\"mappings\":{\"default\":{\"default\":\"approximativement égal à ou image de\"}},\"category\":\"Sm\"},{\"key\":\"2253\",\"mappings\":{\"default\":{\"default\":\"image de ou approximativement égal à\"}},\"category\":\"Sm\"},{\"key\":\"2254\",\"mappings\":{\"default\":{\"default\":\"deux points égal\"}},\"category\":\"Sm\"},{\"key\":\"2255\",\"mappings\":{\"default\":{\"default\":\"égal deux points\"}},\"category\":\"Sm\"},{\"key\":\"2256\",\"mappings\":{\"default\":{\"default\":\"rond dans égal\"}},\"category\":\"Sm\"},{\"key\":\"2257\",\"mappings\":{\"default\":{\"default\":\"égal avec rond en chef\"}},\"category\":\"Sm\"},{\"key\":\"2258\",\"mappings\":{\"default\":{\"default\":\"correspond à\"}},\"category\":\"Sm\"},{\"key\":\"2259\",\"mappings\":{\"default\":{\"default\":\"estime\"}},\"category\":\"Sm\"},{\"key\":\"225A\",\"mappings\":{\"default\":{\"default\":\"équiangulaire à\"}},\"category\":\"Sm\"},{\"key\":\"225B\",\"mappings\":{\"default\":{\"default\":\"égal avec étoile en chef\"}},\"category\":\"Sm\"},{\"key\":\"225C\",\"mappings\":{\"default\":{\"default\":\"égal delta\"}},\"category\":\"Sm\"},{\"key\":\"225D\",\"mappings\":{\"default\":{\"default\":\"égal par définition à\"}},\"category\":\"Sm\"},{\"key\":\"225E\",\"mappings\":{\"default\":{\"default\":\"mesuré par\"}},\"category\":\"Sm\"},{\"key\":\"225F\",\"mappings\":{\"default\":{\"default\":\"égalité en doute\"}},\"category\":\"Sm\"},{\"key\":\"2260\",\"mappings\":{\"default\":{\"default\":\"pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"2261\",\"mappings\":{\"default\":{\"default\":\"identique à\"}},\"category\":\"Sm\"},{\"key\":\"2262\",\"mappings\":{\"default\":{\"default\":\"non identique à\"}},\"category\":\"Sm\"},{\"key\":\"2263\",\"mappings\":{\"default\":{\"default\":\"strictement équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2264\",\"mappings\":{\"default\":{\"default\":\"plus petit ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2265\",\"mappings\":{\"default\":{\"default\":\"plus grand ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2266\",\"mappings\":{\"default\":{\"default\":\"plus petit que par dessus égal à\"}},\"category\":\"Sm\"},{\"key\":\"2267\",\"mappings\":{\"default\":{\"default\":\"plus grand que par dessus égal à\"}},\"category\":\"Sm\"},{\"key\":\"2268\",\"mappings\":{\"default\":{\"default\":\"plus petit mais pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"2269\",\"mappings\":{\"default\":{\"default\":\"plus grand mais pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"226A\",\"mappings\":{\"default\":{\"default\":\"beaucoup plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"226B\",\"mappings\":{\"default\":{\"default\":\"beaucoup plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"226C\",\"mappings\":{\"default\":{\"default\":\"entre\"}},\"category\":\"Sm\"},{\"key\":\"226D\",\"mappings\":{\"default\":{\"default\":\"non équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"226E\",\"mappings\":{\"default\":{\"default\":\"pas plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"226F\",\"mappings\":{\"default\":{\"default\":\"pas plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"2270\",\"mappings\":{\"default\":{\"default\":\"ni plus petit ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"2271\",\"mappings\":{\"default\":{\"default\":\"ni plus grand ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"2272\",\"mappings\":{\"default\":{\"default\":\"plus petit ou équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2273\",\"mappings\":{\"default\":{\"default\":\"plus grand ou équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2274\",\"mappings\":{\"default\":{\"default\":\"ni plus petit ni équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2275\",\"mappings\":{\"default\":{\"default\":\"ni plus grand ni équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2276\",\"mappings\":{\"default\":{\"default\":\"plus petit ou plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"2277\",\"mappings\":{\"default\":{\"default\":\"plus grand ou plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"2278\",\"mappings\":{\"default\":{\"default\":\"ni plus petit ni plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"2279\",\"mappings\":{\"default\":{\"default\":\"ni plus grand ni plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"227A\",\"mappings\":{\"default\":{\"default\":\"précède\"}},\"category\":\"Sm\"},{\"key\":\"227B\",\"mappings\":{\"default\":{\"default\":\"suit\"}},\"category\":\"Sm\"},{\"key\":\"227C\",\"mappings\":{\"default\":{\"default\":\"précède ou est égal à\"}},\"category\":\"Sm\"},{\"key\":\"227D\",\"mappings\":{\"default\":{\"default\":\"suit ou est égal à\"}},\"category\":\"Sm\"},{\"key\":\"227E\",\"mappings\":{\"default\":{\"default\":\"précède ou est équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"227F\",\"mappings\":{\"default\":{\"default\":\"suit ou est équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"2280\",\"mappings\":{\"default\":{\"default\":\"ne précède pas\"}},\"category\":\"Sm\"},{\"key\":\"2281\",\"mappings\":{\"default\":{\"default\":\"ne suit pas\"}},\"category\":\"Sm\"},{\"key\":\"2282\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de\"}},\"category\":\"Sm\"},{\"key\":\"2283\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de\"}},\"category\":\"Sm\"},{\"key\":\"2284\",\"mappings\":{\"default\":{\"default\":\"pas un sous ensemble de\"}},\"category\":\"Sm\"},{\"key\":\"2285\",\"mappings\":{\"default\":{\"default\":\"pas un sur ensemble de\"}},\"category\":\"Sm\"},{\"key\":\"2286\",\"mappings\":{\"default\":{\"default\":\"sous ensemble ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2287\",\"mappings\":{\"default\":{\"default\":\"sur ensemble ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2288\",\"mappings\":{\"default\":{\"default\":\"ni un sous ensemble ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"2289\",\"mappings\":{\"default\":{\"default\":\"ni un sur ensemble ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"228A\",\"mappings\":{\"default\":{\"default\":\"sous ensemble mais pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"228B\",\"mappings\":{\"default\":{\"default\":\"sur ensemble mais pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"228C\",\"mappings\":{\"default\":{\"default\":\"multiensemble\"}},\"category\":\"Sm\"},{\"key\":\"228D\",\"mappings\":{\"default\":{\"default\":\"multiplication de multiensemble\"}},\"category\":\"Sm\"},{\"key\":\"228E\",\"mappings\":{\"default\":{\"default\":\"union de multiensemble\"}},\"category\":\"Sm\"},{\"key\":\"228F\",\"mappings\":{\"default\":{\"default\":\"image carrée de\"}},\"category\":\"Sm\"},{\"key\":\"2290\",\"mappings\":{\"default\":{\"default\":\"original carré de\"}},\"category\":\"Sm\"},{\"key\":\"2291\",\"mappings\":{\"default\":{\"default\":\"image carrée ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2292\",\"mappings\":{\"default\":{\"default\":\"original carré ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2293\",\"mappings\":{\"default\":{\"default\":\"chapeau carré\"}},\"category\":\"Sm\"},{\"key\":\"2294\",\"mappings\":{\"default\":{\"default\":\"coupe carrée\"}},\"category\":\"Sm\"},{\"key\":\"2295\",\"mappings\":{\"default\":{\"default\":\"plus cerclé\"}},\"category\":\"Sm\"},{\"key\":\"2296\",\"mappings\":{\"default\":{\"default\":\"moins cerclé\"}},\"category\":\"Sm\"},{\"key\":\"2297\",\"mappings\":{\"default\":{\"default\":\"multiplié par cerclé\"}},\"category\":\"Sm\"},{\"key\":\"2298\",\"mappings\":{\"default\":{\"default\":\"barre oblique de division cerclée\"}},\"category\":\"Sm\"},{\"key\":\"2299\",\"mappings\":{\"default\":{\"default\":\"opérateur point cerclé\"}},\"category\":\"Sm\"},{\"key\":\"229A\",\"mappings\":{\"default\":{\"default\":\"opérateur rond cerclé\"}},\"category\":\"Sm\"},{\"key\":\"229B\",\"mappings\":{\"default\":{\"default\":\"opérateur astérisque cerclé\"}},\"category\":\"Sm\"},{\"key\":\"229C\",\"mappings\":{\"default\":{\"default\":\"égal cerclé\"}},\"category\":\"Sm\"},{\"key\":\"229D\",\"mappings\":{\"default\":{\"default\":\"tiret cerclé\"}},\"category\":\"Sm\"},{\"key\":\"229E\",\"mappings\":{\"default\":{\"default\":\"plus encadré\"}},\"category\":\"Sm\"},{\"key\":\"229F\",\"mappings\":{\"default\":{\"default\":\"moins encadré\"}},\"category\":\"Sm\"},{\"key\":\"22A0\",\"mappings\":{\"default\":{\"default\":\"multiplié par encadré\"}},\"category\":\"Sm\"},{\"key\":\"22A1\",\"mappings\":{\"default\":{\"default\":\"opérateur point encadré\"}},\"category\":\"Sm\"},{\"key\":\"22A2\",\"mappings\":{\"default\":{\"default\":\"taquet droit\"}},\"category\":\"Sm\"},{\"key\":\"22A3\",\"mappings\":{\"default\":{\"default\":\"taquet gauche\"}},\"category\":\"Sm\"},{\"key\":\"22A4\",\"mappings\":{\"default\":{\"default\":\"taquet vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"22A5\",\"mappings\":{\"default\":{\"default\":\"taquet vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"22A6\",\"mappings\":{\"default\":{\"default\":\"assertion\"}},\"category\":\"Sm\"},{\"key\":\"22A7\",\"mappings\":{\"default\":{\"default\":\"modélise\"}},\"category\":\"Sm\"},{\"key\":\"22A8\",\"mappings\":{\"default\":{\"default\":\"vrai\"}},\"category\":\"Sm\"},{\"key\":\"22A9\",\"mappings\":{\"default\":{\"default\":\"oblige\"}},\"category\":\"Sm\"},{\"key\":\"22AA\",\"mappings\":{\"default\":{\"default\":\"barre verticale triple avec tourniquet à droite\"}},\"category\":\"Sm\"},{\"key\":\"22AB\",\"mappings\":{\"default\":{\"default\":\"barre verticale double avec tourniquet à droite double\"}},\"category\":\"Sm\"},{\"key\":\"22AC\",\"mappings\":{\"default\":{\"default\":\"ne prouve pas\"}},\"category\":\"Sm\"},{\"key\":\"22AD\",\"mappings\":{\"default\":{\"default\":\"pas vrai\"}},\"category\":\"Sm\"},{\"key\":\"22AE\",\"mappings\":{\"default\":{\"default\":\"n'oblige pas\"}},\"category\":\"Sm\"},{\"key\":\"22AF\",\"mappings\":{\"default\":{\"default\":\"non barre verticale double avec tourniquet à droite double\"}},\"category\":\"Sm\"},{\"key\":\"22B0\",\"mappings\":{\"default\":{\"default\":\"précède sous relation\"}},\"category\":\"Sm\"},{\"key\":\"22B1\",\"mappings\":{\"default\":{\"default\":\"suit sous relation\"}},\"category\":\"Sm\"},{\"key\":\"22B2\",\"mappings\":{\"default\":{\"default\":\"sous groupe normal de\"}},\"category\":\"Sm\"},{\"key\":\"22B3\",\"mappings\":{\"default\":{\"default\":\"contient comme sous groupe normal\"}},\"category\":\"Sm\"},{\"key\":\"22B4\",\"mappings\":{\"default\":{\"default\":\"sous groupe normal ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"22B5\",\"mappings\":{\"default\":{\"default\":\"contient comme sous groupe normal ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"22B6\",\"mappings\":{\"default\":{\"default\":\"original de\"}},\"category\":\"Sm\"},{\"key\":\"22B7\",\"mappings\":{\"default\":{\"default\":\"image de\"}},\"category\":\"Sm\"},{\"key\":\"22B8\",\"mappings\":{\"default\":{\"default\":\"multijection\"}},\"category\":\"Sm\"},{\"key\":\"22B9\",\"mappings\":{\"default\":{\"default\":\"matrice hermitienne conjuguée\"}},\"category\":\"Sm\"},{\"key\":\"22BA\",\"mappings\":{\"default\":{\"default\":\"intercale\"}},\"category\":\"Sm\"},{\"key\":\"22BB\",\"mappings\":{\"default\":{\"default\":\"ou exclusif\"}},\"category\":\"Sm\"},{\"key\":\"22BC\",\"mappings\":{\"default\":{\"default\":\"non et\"}},\"category\":\"Sm\"},{\"key\":\"22BD\",\"mappings\":{\"default\":{\"default\":\"non ou\"}},\"category\":\"Sm\"},{\"key\":\"22BF\",\"mappings\":{\"default\":{\"default\":\"triangle rectangle\"}},\"category\":\"Sm\"},{\"key\":\"22C0\",\"mappings\":{\"default\":{\"default\":\"et logique de la famille\"}},\"category\":\"Sm\"},{\"key\":\"22C1\",\"mappings\":{\"default\":{\"default\":\"ou logique de la famille\"}},\"category\":\"Sm\"},{\"key\":\"22C2\",\"mappings\":{\"default\":{\"default\":\"intersection de la famille\"}},\"category\":\"Sm\"},{\"key\":\"22C3\",\"mappings\":{\"default\":{\"default\":\"réunion de la famille\"}},\"category\":\"Sm\"},{\"key\":\"22C4\",\"mappings\":{\"default\":{\"default\":\"opérateur losange\"}},\"category\":\"Sm\"},{\"key\":\"22C5\",\"mappings\":{\"default\":{\"default\":\"opérateur point\"}},\"category\":\"Sm\"},{\"key\":\"22C6\",\"mappings\":{\"default\":{\"default\":\"opérateur étoile\"}},\"category\":\"Sm\"},{\"key\":\"22C7\",\"mappings\":{\"default\":{\"default\":\"divisé multiplié\"}},\"category\":\"Sm\"},{\"key\":\"22C8\",\"mappings\":{\"default\":{\"default\":\"nœud papillon\"}},\"category\":\"Sm\"},{\"key\":\"22C9\",\"mappings\":{\"default\":{\"default\":\"produit semi direct à gauche de facteur normal\"}},\"category\":\"Sm\"},{\"key\":\"22CA\",\"mappings\":{\"default\":{\"default\":\"produit semi direct à droite de facteur normal\"}},\"category\":\"Sm\"},{\"key\":\"22CB\",\"mappings\":{\"default\":{\"default\":\"produit semi direct à gauche\"}},\"category\":\"Sm\"},{\"key\":\"22CC\",\"mappings\":{\"default\":{\"default\":\"produit semi direct à droite\"}},\"category\":\"Sm\"},{\"key\":\"22CD\",\"mappings\":{\"default\":{\"default\":\"moins tilde renversé\"}},\"category\":\"Sm\"},{\"key\":\"22CE\",\"mappings\":{\"default\":{\"default\":\"ou logique recourbé\"}},\"category\":\"Sm\"},{\"key\":\"22CF\",\"mappings\":{\"default\":{\"default\":\"et logique recourbé\"}},\"category\":\"Sm\"},{\"key\":\"22D0\",\"mappings\":{\"default\":{\"default\":\"sous ensemble double\"}},\"category\":\"Sm\"},{\"key\":\"22D1\",\"mappings\":{\"default\":{\"default\":\"sur ensemble double\"}},\"category\":\"Sm\"},{\"key\":\"22D2\",\"mappings\":{\"default\":{\"default\":\"intersection double\"}},\"category\":\"Sm\"},{\"key\":\"22D3\",\"mappings\":{\"default\":{\"default\":\"union double\"}},\"category\":\"Sm\"},{\"key\":\"22D4\",\"mappings\":{\"default\":{\"default\":\"fourche\"}},\"category\":\"Sm\"},{\"key\":\"22D5\",\"mappings\":{\"default\":{\"default\":\"égal et parallèle à\"}},\"category\":\"Sm\"},{\"key\":\"22D6\",\"mappings\":{\"default\":{\"default\":\"plus petit que pointé\"}},\"category\":\"Sm\"},{\"key\":\"22D7\",\"mappings\":{\"default\":{\"default\":\"plus grand que pointé\"}},\"category\":\"Sm\"},{\"key\":\"22D8\",\"mappings\":{\"default\":{\"default\":\"considérablement plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"22D9\",\"mappings\":{\"default\":{\"default\":\"considérablement plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"22DA\",\"mappings\":{\"default\":{\"default\":\"plus petit ou égal ou plus grand que\"}},\"category\":\"Sm\"},{\"key\":\"22DB\",\"mappings\":{\"default\":{\"default\":\"plus grand ou égal ou plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"22DC\",\"mappings\":{\"default\":{\"default\":\"égal ou plus petit que\"}},\"category\":\"Sm\"},{\"key\":\"22DD\",\"mappings\":{\"default\":{\"default\":\"égal à deux lignes ou supérieur à\"}},\"category\":\"Sm\"},{\"key\":\"22DE\",\"mappings\":{\"default\":{\"default\":\"égal ou précède\"}},\"category\":\"Sm\"},{\"key\":\"22DF\",\"mappings\":{\"default\":{\"default\":\"égal ou suit\"}},\"category\":\"Sm\"},{\"key\":\"22E0\",\"mappings\":{\"default\":{\"default\":\"ni précédant ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"22E1\",\"mappings\":{\"default\":{\"default\":\"ni suivant ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"22E2\",\"mappings\":{\"default\":{\"default\":\"ni image carrée ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"22E3\",\"mappings\":{\"default\":{\"default\":\"ni original carré ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"22E4\",\"mappings\":{\"default\":{\"default\":\"image carré ou différent de\"}},\"category\":\"Sm\"},{\"key\":\"22E5\",\"mappings\":{\"default\":{\"default\":\"original carré ou différent de\"}},\"category\":\"Sm\"},{\"key\":\"22E6\",\"mappings\":{\"default\":{\"default\":\"plus petit mais non équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"22E7\",\"mappings\":{\"default\":{\"default\":\"plus grand mais non équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"22E8\",\"mappings\":{\"default\":{\"default\":\"précédant mais non équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"22E9\",\"mappings\":{\"default\":{\"default\":\"suivant mais non équivalent à\"}},\"category\":\"Sm\"},{\"key\":\"22EA\",\"mappings\":{\"default\":{\"default\":\"pas un sous groupe normal de\"}},\"category\":\"Sm\"},{\"key\":\"22EB\",\"mappings\":{\"default\":{\"default\":\"ne contient pas comme sous groupe normal\"}},\"category\":\"Sm\"},{\"key\":\"22EC\",\"mappings\":{\"default\":{\"default\":\"ni sous groupe normal ni égal à\"}},\"category\":\"Sm\"},{\"key\":\"22ED\",\"mappings\":{\"default\":{\"default\":\"ni égal ni contenant comme sous  groupe normal\"}},\"category\":\"Sm\"},{\"key\":\"22EE\",\"mappings\":{\"default\":{\"default\":\"trois points suspendus\"}},\"category\":\"Sm\"},{\"key\":\"22EF\",\"mappings\":{\"default\":{\"default\":\"trois points médians\"}},\"category\":\"Sm\"},{\"key\":\"22F0\",\"mappings\":{\"default\":{\"default\":\"trois points diagonaux vers le coin haut à droite\"}},\"category\":\"Sm\"},{\"key\":\"22F1\",\"mappings\":{\"default\":{\"default\":\"trois points diagonaux vers le coin bas à droite\"}},\"category\":\"Sm\"},{\"key\":\"22F2\",\"mappings\":{\"default\":{\"default\":\"appartient à avec long trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22F3\",\"mappings\":{\"default\":{\"default\":\"appartient à avec barre verticale au bout du trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22F4\",\"mappings\":{\"default\":{\"default\":\"petit appartient à avec barre verticale au bout du trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22F5\",\"mappings\":{\"default\":{\"default\":\"appartient à avec point en chef\"}},\"category\":\"Sm\"},{\"key\":\"22F6\",\"mappings\":{\"default\":{\"default\":\"appartient à avec trait en chef\"}},\"category\":\"Sm\"},{\"key\":\"22F7\",\"mappings\":{\"default\":{\"default\":\"petit appartient à avec trait en chef\"}},\"category\":\"Sm\"},{\"key\":\"22F8\",\"mappings\":{\"default\":{\"default\":\"appartient à avec trait souscrit\"}},\"category\":\"Sm\"},{\"key\":\"22F9\",\"mappings\":{\"default\":{\"default\":\"appartient à avec deux traits horizontaux\"}},\"category\":\"Sm\"},{\"key\":\"22FA\",\"mappings\":{\"default\":{\"default\":\"contient avec long trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22FB\",\"mappings\":{\"default\":{\"default\":\"contient avec barre verticale au bout du trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22FC\",\"mappings\":{\"default\":{\"default\":\"petit contient avec barre verticale au bout du trait horizontal\"}},\"category\":\"Sm\"},{\"key\":\"22FD\",\"mappings\":{\"default\":{\"default\":\"contient avec trait en chef\"}},\"category\":\"Sm\"},{\"key\":\"22FE\",\"mappings\":{\"default\":{\"default\":\"petit contient avec trait en chef\"}},\"category\":\"Sm\"},{\"key\":\"22FF\",\"mappings\":{\"default\":{\"default\":\"appartient à un sac en notation z\"}},\"category\":\"Sm\"},{\"key\":\"2300\",\"mappings\":{\"default\":{\"default\":\"diamètre\"}},\"category\":\"So\"},{\"key\":\"2302\",\"mappings\":{\"default\":{\"default\":\"maison\"}},\"category\":\"So\"},{\"key\":\"2305\",\"mappings\":{\"default\":{\"default\":\"projective\"}},\"category\":\"So\"},{\"key\":\"2306\",\"mappings\":{\"default\":{\"default\":\"perspective\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2307\",\"mappings\":{\"default\":{\"default\":\"ligne ondulée\"}}},{\"key\":\"2310\",\"mappings\":{\"default\":{\"default\":\"négation réfléchi\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2311\",\"mappings\":{\"default\":{\"default\":\"pastille carrée\"}}},{\"key\":\"2312\",\"mappings\":{\"default\":{\"default\":\"arc\"}},\"category\":\"So\"},{\"key\":\"2313\",\"mappings\":{\"default\":{\"default\":\"segment\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2314\",\"mappings\":{\"default\":{\"default\":\"secteur\"}}},{\"category\":\"So\",\"key\":\"2795\",\"mappings\":{\"default\":{\"default\":\"plus gras\"}}},{\"category\":\"So\",\"key\":\"2796\",\"mappings\":{\"default\":{\"default\":\"moins gras\"}}},{\"category\":\"So\",\"key\":\"2797\",\"mappings\":{\"default\":{\"default\":\"division gras\"}}},{\"category\":\"So\",\"key\":\"27B0\",\"mappings\":{\"default\":{\"default\":\"boucle recourbée\"}}},{\"category\":\"So\",\"key\":\"27BF\",\"mappings\":{\"default\":{\"default\":\"double boucle recourbée\"}}},{\"key\":\"27C1\",\"mappings\":{\"default\":{\"default\":\"petit triangle blanc inscrit dans triangle blanc\"}},\"category\":\"Sm\"},{\"key\":\"27C2\",\"mappings\":{\"default\":{\"default\":\"perpendiculaire à\"}},\"category\":\"Sm\"},{\"key\":\"27C3\",\"mappings\":{\"default\":{\"default\":\"sous ensemble ouvert\"}},\"category\":\"Sm\"},{\"key\":\"27C4\",\"mappings\":{\"default\":{\"default\":\"sur ensemble ouvert\"}},\"category\":\"Sm\"},{\"key\":\"27C7\",\"mappings\":{\"default\":{\"default\":\"ou avec point inscrit\"}},\"category\":\"Sm\"},{\"key\":\"27C8\",\"mappings\":{\"default\":{\"default\":\"sous ensemble précédé d'une barre oblique inversée\"}},\"category\":\"Sm\"},{\"key\":\"27C9\",\"mappings\":{\"default\":{\"default\":\"sur ensemble suivi d'une barre oblique\"}},\"category\":\"Sm\"},{\"key\":\"27CA\",\"mappings\":{\"default\":{\"default\":\"barre verticale À une traverse\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27CB\",\"mappings\":{\"default\":{\"default\":\"diagonale mathématique ascendante\"}}},{\"key\":\"27CC\",\"mappings\":{\"default\":{\"default\":\"grande division\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"27CD\",\"mappings\":{\"default\":{\"default\":\"diagonale mathématique descendante\"}}},{\"category\":\"Sm\",\"key\":\"27CE\",\"mappings\":{\"default\":{\"default\":\"et logique encadré\"}}},{\"category\":\"Sm\",\"key\":\"27CF\",\"mappings\":{\"default\":{\"default\":\"ou logique encadré\"}}},{\"category\":\"Sm\",\"key\":\"27D0\",\"mappings\":{\"default\":{\"default\":\"losange blanc à point centré\"}}},{\"key\":\"27D1\",\"mappings\":{\"default\":{\"default\":\"et pointé\"}},\"category\":\"Sm\"},{\"key\":\"27D2\",\"mappings\":{\"default\":{\"default\":\"appartient À ouvert vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"27D3\",\"mappings\":{\"default\":{\"default\":\"coin inférieur droit pointé\"}},\"category\":\"Sm\"},{\"key\":\"27D4\",\"mappings\":{\"default\":{\"default\":\"coin supérieur gauche pointé\"}},\"category\":\"Sm\"},{\"key\":\"27D5\",\"mappings\":{\"default\":{\"default\":\"jointure externe gauche\"}},\"category\":\"Sm\"},{\"key\":\"27D6\",\"mappings\":{\"default\":{\"default\":\"jointure externe droite\"}},\"category\":\"Sm\"},{\"key\":\"27D7\",\"mappings\":{\"default\":{\"default\":\"jointure externe complète\"}},\"category\":\"Sm\"},{\"key\":\"27D8\",\"mappings\":{\"default\":{\"default\":\"grand taquet vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"27D9\",\"mappings\":{\"default\":{\"default\":\"grand taquet vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"27DA\",\"mappings\":{\"default\":{\"default\":\"double tourniquet bilatéral\"}},\"category\":\"Sm\"},{\"key\":\"27DB\",\"mappings\":{\"default\":{\"default\":\"tourniquet bilatéral\"}},\"category\":\"Sm\"},{\"key\":\"27DC\",\"mappings\":{\"default\":{\"default\":\"multijection gauche\"}},\"category\":\"Sm\"},{\"key\":\"27DD\",\"mappings\":{\"default\":{\"default\":\"long taquet droit\"}},\"category\":\"Sm\"},{\"key\":\"27DE\",\"mappings\":{\"default\":{\"default\":\"long taquet gauche\"}},\"category\":\"Sm\"},{\"key\":\"27DF\",\"mappings\":{\"default\":{\"default\":\"taquet vers le haut surmonté d'un cercle\"}},\"category\":\"Sm\"},{\"key\":\"27E0\",\"mappings\":{\"default\":{\"default\":\"losange coupé\"}},\"category\":\"Sm\"},{\"key\":\"27E1\",\"mappings\":{\"default\":{\"default\":\"losange concave blanc\"}},\"category\":\"Sm\"},{\"key\":\"27E2\",\"mappings\":{\"default\":{\"default\":\"losange concave blanc avec trait à gauche\"}},\"category\":\"Sm\"},{\"key\":\"27E3\",\"mappings\":{\"default\":{\"default\":\"losange concave blanc avec trait à droite\"}},\"category\":\"Sm\"},{\"key\":\"27E4\",\"mappings\":{\"default\":{\"default\":\"carré blanc avec trait à gauche\"}},\"category\":\"Sm\"},{\"key\":\"27E5\",\"mappings\":{\"default\":{\"default\":\"carré blanc avec trait à droite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"292B\",\"mappings\":{\"default\":{\"default\":\"diagonale montante sur diagonale descendante\"}}},{\"category\":\"Sm\",\"key\":\"292C\",\"mappings\":{\"default\":{\"default\":\"diagonale descendante sur diagonale montante\"}}},{\"category\":\"Sm\",\"key\":\"2980\",\"mappings\":{\"default\":{\"default\":\"délimiteur triple barre verticale\"}}},{\"category\":\"Sm\",\"key\":\"2981\",\"mappings\":{\"default\":{\"default\":\"boulet\"}}},{\"category\":\"Sm\",\"key\":\"2982\",\"mappings\":{\"default\":{\"default\":\"deux points de la notation z\"}}},{\"category\":\"Sm\",\"key\":\"2999\",\"mappings\":{\"default\":{\"default\":\"clôture pointillée\"}}},{\"key\":\"299A\",\"mappings\":{\"default\":{\"default\":\"ligne verticale en zigzag\"}},\"category\":\"Sm\"},{\"key\":\"29B0\",\"mappings\":{\"default\":{\"default\":\"ensemble vide réfléchi\"}},\"category\":\"Sm\"},{\"key\":\"29B1\",\"mappings\":{\"default\":{\"default\":\"ensemble vide barre en chef\"}},\"category\":\"Sm\"},{\"key\":\"29B2\",\"mappings\":{\"default\":{\"default\":\"ensemble vide petit cercle en chef\"}},\"category\":\"Sm\"},{\"key\":\"29B5\",\"mappings\":{\"default\":{\"default\":\"cercle à barre horizontale\"}},\"category\":\"Sm\"},{\"key\":\"29B6\",\"mappings\":{\"default\":{\"default\":\"barre verticale cerclée\"}},\"category\":\"Sm\"},{\"key\":\"29B7\",\"mappings\":{\"default\":{\"default\":\"parallèles cerclées\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29B8\",\"mappings\":{\"default\":{\"default\":\"barre oblique inversée cerclée\"}}},{\"key\":\"29B9\",\"mappings\":{\"default\":{\"default\":\"perpendiculaire cerclé\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29BA\",\"mappings\":{\"default\":{\"default\":\"cercle divisé par une barre horizontale et une barre verticale dans la moitié supérieure\"}}},{\"key\":\"29BB\",\"mappings\":{\"default\":{\"default\":\"cercle superposé d'un x\"}},\"category\":\"Sm\"},{\"key\":\"29BC\",\"mappings\":{\"default\":{\"default\":\"division pivoté en sens antihoraire cerclé\"}},\"category\":\"Sm\"},{\"key\":\"29BE\",\"mappings\":{\"default\":{\"default\":\"puce blanche cerclée\"}},\"category\":\"Sm\"},{\"key\":\"29BF\",\"mappings\":{\"default\":{\"default\":\"puce cerclée\"}},\"category\":\"Sm\"},{\"key\":\"29C0\",\"mappings\":{\"default\":{\"default\":\"inférieur à cerclé\"}},\"category\":\"Sm\"},{\"key\":\"29C1\",\"mappings\":{\"default\":{\"default\":\"supérieur à cerclé\"}},\"category\":\"Sm\"},{\"key\":\"29C2\",\"mappings\":{\"default\":{\"default\":\"cercle avec petit cercle à droite\"}},\"category\":\"Sm\"},{\"key\":\"29C3\",\"mappings\":{\"default\":{\"default\":\"cercle avec deux petits traits horizontaux à droite\"}},\"category\":\"Sm\"},{\"key\":\"29C4\",\"mappings\":{\"default\":{\"default\":\"oblique encadrée\"}},\"category\":\"Sm\"},{\"key\":\"29C5\",\"mappings\":{\"default\":{\"default\":\"oblique inversée encadrée\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29C6\",\"mappings\":{\"default\":{\"default\":\"astérisque encadré\"}}},{\"category\":\"Sm\",\"key\":\"29C7\",\"mappings\":{\"default\":{\"default\":\"petite cercle encadré\"}}},{\"category\":\"Sm\",\"key\":\"29C8\",\"mappings\":{\"default\":{\"default\":\"carré encadré\"}}},{\"key\":\"29C9\",\"mappings\":{\"default\":{\"default\":\"carrés se chevauchant\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29CA\",\"mappings\":{\"default\":{\"default\":\"triangle pointé en chef\"}}},{\"category\":\"Sm\",\"key\":\"29CB\",\"mappings\":{\"default\":{\"default\":\"triangle à barre souscrite\"}}},{\"category\":\"Sm\",\"key\":\"29CC\",\"mappings\":{\"default\":{\"default\":\"s inscrit dans triangle\"}}},{\"key\":\"29CD\",\"mappings\":{\"default\":{\"default\":\"triangle à empattements inférieurs\"}},\"category\":\"Sm\"},{\"key\":\"29CE\",\"mappings\":{\"default\":{\"default\":\"triangle droit par dessus triangle gauche\"}},\"category\":\"Sm\"},{\"key\":\"29CF\",\"mappings\":{\"default\":{\"default\":\"triangle gauche à gauche d'une barre verticale\"}},\"category\":\"Sm\"},{\"key\":\"29D0\",\"mappings\":{\"default\":{\"default\":\"triangle droit à droite d'une barre verticale\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29D1\",\"mappings\":{\"default\":{\"default\":\"nœud papillon à aile gauche noire\"}}},{\"category\":\"Sm\",\"key\":\"29D2\",\"mappings\":{\"default\":{\"default\":\"nœud papillon à aile droite noire\"}}},{\"category\":\"Sm\",\"key\":\"29D3\",\"mappings\":{\"default\":{\"default\":\"nœud papillon noir\"}}},{\"category\":\"Sm\",\"key\":\"29D4\",\"mappings\":{\"default\":{\"default\":\"multiplication à moitié gauche noircie\"}}},{\"category\":\"Sm\",\"key\":\"29D5\",\"mappings\":{\"default\":{\"default\":\"multiplication à moitié droite noircie\"}}},{\"category\":\"Sm\",\"key\":\"29D6\",\"mappings\":{\"default\":{\"default\":\"sablier blanc\"}}},{\"category\":\"Sm\",\"key\":\"29D7\",\"mappings\":{\"default\":{\"default\":\"sablier noir\"}}},{\"key\":\"29DC\",\"mappings\":{\"default\":{\"default\":\"infini incomplet\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29DD\",\"mappings\":{\"default\":{\"default\":\"lorgnon\"}}},{\"key\":\"29DE\",\"mappings\":{\"default\":{\"default\":\"infini nié par une barre verticale\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29DF\",\"mappings\":{\"default\":{\"default\":\"multijection à deux têtes\"}}},{\"category\":\"Sm\",\"key\":\"29E0\",\"mappings\":{\"default\":{\"default\":\"carré ombré\"}}},{\"category\":\"Sm\",\"key\":\"29E1\",\"mappings\":{\"default\":{\"default\":\"augmente avec\"}}},{\"category\":\"Sm\",\"key\":\"29E2\",\"mappings\":{\"default\":{\"default\":\"produit de permutation\"}}},{\"key\":\"29E3\",\"mappings\":{\"default\":{\"default\":\"égale à et parallèle à incliné\"}},\"category\":\"Sm\"},{\"key\":\"29E4\",\"mappings\":{\"default\":{\"default\":\"égale à et parallèle à incliné surmontés d'un tilde\"}},\"category\":\"Sm\"},{\"key\":\"29E5\",\"mappings\":{\"default\":{\"default\":\"identique à et parallèle à incliné\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29E6\",\"mappings\":{\"default\":{\"default\":\"gleich stark\"}}},{\"category\":\"Sm\",\"key\":\"29E7\",\"mappings\":{\"default\":{\"default\":\"thermodynamique\"}}},{\"category\":\"Sm\",\"key\":\"29E8\",\"mappings\":{\"default\":{\"default\":\"triangle pointe vers le bas à moitié gauche noire\"}}},{\"category\":\"Sm\",\"key\":\"29E9\",\"mappings\":{\"default\":{\"default\":\"triangle pointe vers le bas à moitié droite noire\"}}},{\"key\":\"29EB\",\"mappings\":{\"default\":{\"default\":\"losange fuselé noir\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29EE\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à carré blanc\"}}},{\"category\":\"Sm\",\"key\":\"29EF\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à carré noir\"}}},{\"category\":\"Sm\",\"key\":\"29F0\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à losange blanc\"}}},{\"category\":\"Sm\",\"key\":\"29F1\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à losange noir\"}}},{\"category\":\"Sm\",\"key\":\"29F2\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à cercle blanc\"}}},{\"category\":\"Sm\",\"key\":\"29F3\",\"mappings\":{\"default\":{\"default\":\"barre d'erreur à cercle noir\"}}},{\"key\":\"29F4\",\"mappings\":{\"default\":{\"default\":\"règle différée\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29F5\",\"mappings\":{\"default\":{\"default\":\"opérateur barre oblique inversée\"}}},{\"key\":\"29F6\",\"mappings\":{\"default\":{\"default\":\"barre oblique avec barre en chef\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"29F7\",\"mappings\":{\"default\":{\"default\":\"barre oblique inversée à traverse horizontale\"}}},{\"category\":\"Sm\",\"key\":\"29F8\",\"mappings\":{\"default\":{\"default\":\"grande barre oblique\"}}},{\"category\":\"Sm\",\"key\":\"29F9\",\"mappings\":{\"default\":{\"default\":\"grande barre oblique inversée\"}}},{\"category\":\"Sm\",\"key\":\"29FA\",\"mappings\":{\"default\":{\"default\":\"double plus\"}}},{\"category\":\"Sm\",\"key\":\"29FB\",\"mappings\":{\"default\":{\"default\":\"triple plus\"}}},{\"category\":\"Sm\",\"key\":\"29FE\",\"mappings\":{\"default\":{\"default\":\"tiny\"}}},{\"category\":\"Sm\",\"key\":\"29FF\",\"mappings\":{\"default\":{\"default\":\"miny\"}}},{\"category\":\"Sm\",\"key\":\"2A00\",\"mappings\":{\"default\":{\"default\":\"opérateur point cerclé n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A01\",\"mappings\":{\"default\":{\"default\":\"opérateur plus cerclé n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A02\",\"mappings\":{\"default\":{\"default\":\"opérateur multiplié par cerclé n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A03\",\"mappings\":{\"default\":{\"default\":\"opérateur union n aire pointé\"}}},{\"category\":\"Sm\",\"key\":\"2A04\",\"mappings\":{\"default\":{\"default\":\"opérateur union n aire avec plus\"}}},{\"category\":\"Sm\",\"key\":\"2A05\",\"mappings\":{\"default\":{\"default\":\"opérateur intersection carré n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A06\",\"mappings\":{\"default\":{\"default\":\"opérateur union carré n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A07\",\"mappings\":{\"default\":{\"default\":\"opérateur deux et logiques\"}}},{\"category\":\"Sm\",\"key\":\"2A08\",\"mappings\":{\"default\":{\"default\":\"opérateur deux ou logiques\"}}},{\"category\":\"Sm\",\"key\":\"2A09\",\"mappings\":{\"default\":{\"default\":\"opérateur multiplié par n aire\"}}},{\"category\":\"Sm\",\"key\":\"2A0A\",\"mappings\":{\"default\":{\"default\":\"sommation modulo deux\"}}},{\"category\":\"Sm\",\"key\":\"2A0B\",\"mappings\":{\"default\":{\"default\":\"sommation avec intégrale\"}}},{\"key\":\"2A0C\",\"mappings\":{\"default\":{\"default\":\"intégrale quadruple\"}},\"category\":\"Sm\"},{\"key\":\"2A0D\",\"mappings\":{\"default\":{\"default\":\"intégrale à partie finie\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A0E\",\"mappings\":{\"default\":{\"default\":\"intégrale à deux barres horizontales\"}}},{\"category\":\"Sm\",\"key\":\"2A0F\",\"mappings\":{\"default\":{\"default\":\"moyenne d'intégrale à barre oblique inversée\"}}},{\"key\":\"2A10\",\"mappings\":{\"default\":{\"default\":\"fonction de circulation\"}},\"category\":\"Sm\"},{\"key\":\"2A11\",\"mappings\":{\"default\":{\"default\":\"intégrale en sens positif\"}},\"category\":\"Sm\"},{\"key\":\"2A12\",\"mappings\":{\"default\":{\"default\":\"intégrale de ligne à chemin rectangulaire autour du pôle\"}},\"category\":\"Sm\"},{\"key\":\"2A13\",\"mappings\":{\"default\":{\"default\":\"intégrale de ligne à chemin semi circulaire autour du pôle\"}},\"category\":\"Sm\"},{\"key\":\"2A14\",\"mappings\":{\"default\":{\"default\":\"intégrale de ligne évitant le pôle\"}},\"category\":\"Sm\"},{\"key\":\"2A15\",\"mappings\":{\"default\":{\"default\":\"intégrale autour d'un opérateur point\"}},\"category\":\"Sm\"},{\"key\":\"2A16\",\"mappings\":{\"default\":{\"default\":\"intégrale quaternion\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A18\",\"mappings\":{\"default\":{\"default\":\"intégrale au signe multiplié par\"}}},{\"category\":\"Sm\",\"key\":\"2A19\",\"mappings\":{\"default\":{\"default\":\"intégrale à signe intersection\"}}},{\"category\":\"Sm\",\"key\":\"2A1A\",\"mappings\":{\"default\":{\"default\":\"intégrale à signe union\"}}},{\"category\":\"Sm\",\"key\":\"2A1B\",\"mappings\":{\"default\":{\"default\":\"intégrale à barre en chef\"}}},{\"category\":\"Sm\",\"key\":\"2A1C\",\"mappings\":{\"default\":{\"default\":\"intégrale à barre souscrite\"}}},{\"category\":\"Sm\",\"key\":\"2A1D\",\"mappings\":{\"default\":{\"default\":\"jointure\"}}},{\"category\":\"Sm\",\"key\":\"2A1E\",\"mappings\":{\"default\":{\"default\":\"gros opérateur triangle gauche\"}}},{\"category\":\"Sm\",\"key\":\"2A1F\",\"mappings\":{\"default\":{\"default\":\"composition de schémas en notation z\"}}},{\"category\":\"Sm\",\"key\":\"2A20\",\"mappings\":{\"default\":{\"default\":\"tubage de schémas en notation z\"}}},{\"category\":\"Sm\",\"key\":\"2A21\",\"mappings\":{\"default\":{\"default\":\"projection de schémas en notation z\"}}},{\"key\":\"2A22\",\"mappings\":{\"default\":{\"default\":\"plus surmonté d'un petit cercle\"}},\"category\":\"Sm\"},{\"key\":\"2A23\",\"mappings\":{\"default\":{\"default\":\"plus surmonté d'un circonflexe\"}},\"category\":\"Sm\"},{\"key\":\"2A24\",\"mappings\":{\"default\":{\"default\":\"plus surmonté d'un tilde\"}},\"category\":\"Sm\"},{\"key\":\"2A25\",\"mappings\":{\"default\":{\"default\":\"plus à point souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A26\",\"mappings\":{\"default\":{\"default\":\"plus à tilde souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A27\",\"mappings\":{\"default\":{\"default\":\"plus à chiffre deux souscrit\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A28\",\"mappings\":{\"default\":{\"default\":\"plus à triangle noir\"}}},{\"key\":\"2A29\",\"mappings\":{\"default\":{\"default\":\"moins surmonté d'une virgule\"}},\"category\":\"Sm\"},{\"key\":\"2A2A\",\"mappings\":{\"default\":{\"default\":\"moins à point souscrit\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A2B\",\"mappings\":{\"default\":{\"default\":\"moins à points descendants\"}}},{\"category\":\"Sm\",\"key\":\"2A2C\",\"mappings\":{\"default\":{\"default\":\"moins à points ascendants\"}}},{\"key\":\"2A2D\",\"mappings\":{\"default\":{\"default\":\"plus dans demi cercle gauche\"}},\"category\":\"Sm\"},{\"key\":\"2A2E\",\"mappings\":{\"default\":{\"default\":\"plus dans demi cercle droit\"}},\"category\":\"Sm\"},{\"key\":\"2A2F\",\"mappings\":{\"default\":{\"default\":\"produit vectoriel\"}},\"category\":\"Sm\"},{\"key\":\"2A30\",\"mappings\":{\"default\":{\"default\":\"multiplication à point en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A31\",\"mappings\":{\"default\":{\"default\":\"multiplication à barre souscrite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A32\",\"mappings\":{\"default\":{\"default\":\"produit semi direct fermé en bas\"}}},{\"key\":\"2A33\",\"mappings\":{\"default\":{\"default\":\"produit fusionné\"}},\"category\":\"Sm\"},{\"key\":\"2A34\",\"mappings\":{\"default\":{\"default\":\"multiplication dans demi cercle gauche\"}},\"category\":\"Sm\"},{\"key\":\"2A35\",\"mappings\":{\"default\":{\"default\":\"multiplication dans demi cercle droit\"}},\"category\":\"Sm\"},{\"key\":\"2A36\",\"mappings\":{\"default\":{\"default\":\"multiplication cerclé circonflexe\"}},\"category\":\"Sm\"},{\"key\":\"2A37\",\"mappings\":{\"default\":{\"default\":\"multiplication doublement cerclé\"}},\"category\":\"Sm\"},{\"key\":\"2A38\",\"mappings\":{\"default\":{\"default\":\"division cerclé\"}},\"category\":\"Sm\"},{\"key\":\"2A39\",\"mappings\":{\"default\":{\"default\":\"plus dans triangle\"}},\"category\":\"Sm\"},{\"key\":\"2A3A\",\"mappings\":{\"default\":{\"default\":\"moins dans triangle\"}},\"category\":\"Sm\"},{\"key\":\"2A3B\",\"mappings\":{\"default\":{\"default\":\"multiplication dans triangle\"}},\"category\":\"Sm\"},{\"key\":\"2A3C\",\"mappings\":{\"default\":{\"default\":\"produit interieur\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A3D\",\"mappings\":{\"default\":{\"default\":\"produit intérieur à droite\"}}},{\"category\":\"Sm\",\"key\":\"2A3E\",\"mappings\":{\"default\":{\"default\":\"composition relationnelle en notation z\"}}},{\"key\":\"2A3F\",\"mappings\":{\"default\":{\"default\":\"amalgamation ou coproduit\"}},\"category\":\"Sm\"},{\"key\":\"2A40\",\"mappings\":{\"default\":{\"default\":\"intersection pointée\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A41\",\"mappings\":{\"default\":{\"default\":\"union à signe moins\"}}},{\"key\":\"2A42\",\"mappings\":{\"default\":{\"default\":\"union à barre en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A43\",\"mappings\":{\"default\":{\"default\":\"intersection à barre en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A44\",\"mappings\":{\"default\":{\"default\":\"intersection avec et logique\"}},\"category\":\"Sm\"},{\"key\":\"2A45\",\"mappings\":{\"default\":{\"default\":\"union avec ou logique\"}},\"category\":\"Sm\"},{\"key\":\"2A46\",\"mappings\":{\"default\":{\"default\":\"union par dessus intersection\"}},\"category\":\"Sm\"},{\"key\":\"2A47\",\"mappings\":{\"default\":{\"default\":\"intersection par dessus union\"}},\"category\":\"Sm\"},{\"key\":\"2A48\",\"mappings\":{\"default\":{\"default\":\"union par dessus bar par dessus intersection\"}},\"category\":\"Sm\"},{\"key\":\"2A49\",\"mappings\":{\"default\":{\"default\":\"intersection par dessus trait par dessus union\"}},\"category\":\"Sm\"},{\"key\":\"2A4A\",\"mappings\":{\"default\":{\"default\":\"deux unions soudées côte à côte\"}},\"category\":\"Sm\"},{\"key\":\"2A4B\",\"mappings\":{\"default\":{\"default\":\"deux intersections soudées côte à côte\"}},\"category\":\"Sm\"},{\"key\":\"2A4C\",\"mappings\":{\"default\":{\"default\":\"union fermée à empattements\"}},\"category\":\"Sm\"},{\"key\":\"2A4D\",\"mappings\":{\"default\":{\"default\":\"intersection fermée à empattements\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A4E\",\"mappings\":{\"default\":{\"default\":\"deux intersections carrées emboîtées\"}}},{\"category\":\"Sm\",\"key\":\"2A4F\",\"mappings\":{\"default\":{\"default\":\"deux unions carrées emboîtées\"}}},{\"key\":\"2A50\",\"mappings\":{\"default\":{\"default\":\"union fermée à empattements et produit fusionné\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A51\",\"mappings\":{\"default\":{\"default\":\"et logique à point en chef\"}}},{\"category\":\"Sm\",\"key\":\"2A52\",\"mappings\":{\"default\":{\"default\":\"ou logique à point en chef\"}}},{\"key\":\"2A53\",\"mappings\":{\"default\":{\"default\":\"double et logique\"}},\"category\":\"Sm\"},{\"key\":\"2A54\",\"mappings\":{\"default\":{\"default\":\"double ou logique\"}},\"category\":\"Sm\"},{\"key\":\"2A55\",\"mappings\":{\"default\":{\"default\":\"deux et logiques entrecroisés\"}},\"category\":\"Sm\"},{\"key\":\"2A56\",\"mappings\":{\"default\":{\"default\":\"deux ou logiques entrecroisés\"}},\"category\":\"Sm\"},{\"key\":\"2A57\",\"mappings\":{\"default\":{\"default\":\"grand ou pentu\"}},\"category\":\"Sm\"},{\"key\":\"2A58\",\"mappings\":{\"default\":{\"default\":\"grand et pentu\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A59\",\"mappings\":{\"default\":{\"default\":\"et et ou logiques entrecroisés\"}}},{\"key\":\"2A5A\",\"mappings\":{\"default\":{\"default\":\"et logique à hampe médiane\"}},\"category\":\"Sm\"},{\"key\":\"2A5B\",\"mappings\":{\"default\":{\"default\":\"ou logique à hampe médiane\"}},\"category\":\"Sm\"},{\"key\":\"2A5C\",\"mappings\":{\"default\":{\"default\":\"et logique à tiret horizontal\"}},\"category\":\"Sm\"},{\"key\":\"2A5D\",\"mappings\":{\"default\":{\"default\":\"ou logique à tiret horizontal\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A5E\",\"mappings\":{\"default\":{\"default\":\"et logique à deux barres en chef\"}}},{\"key\":\"2A5F\",\"mappings\":{\"default\":{\"default\":\"et logique à barre souscrite\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A60\",\"mappings\":{\"default\":{\"default\":\"et logique à deux barres souscrites\"}}},{\"category\":\"Sm\",\"key\":\"2A61\",\"mappings\":{\"default\":{\"default\":\"petit v à barre souscrite\"}}},{\"category\":\"Sm\",\"key\":\"2A62\",\"mappings\":{\"default\":{\"default\":\"ou logique à deux barres en chef\"}}},{\"category\":\"Sm\",\"key\":\"2A63\",\"mappings\":{\"default\":{\"default\":\"ou logique à deux barres souscrites\"}}},{\"category\":\"Sm\",\"key\":\"2A64\",\"mappings\":{\"default\":{\"default\":\"antirestriction de domaine en notation z\"}}},{\"category\":\"Sm\",\"key\":\"2A65\",\"mappings\":{\"default\":{\"default\":\"antirestriction de codomaine en notation z\"}}},{\"key\":\"2A66\",\"mappings\":{\"default\":{\"default\":\"égal point souscrit\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A67\",\"mappings\":{\"default\":{\"default\":\"identique à surmonté d'un point\"}}},{\"category\":\"Sm\",\"key\":\"2A68\",\"mappings\":{\"default\":{\"default\":\"deux barres verticales à trois traverses\"}}},{\"category\":\"Sm\",\"key\":\"2A69\",\"mappings\":{\"default\":{\"default\":\"trois barres verticales à trois traverses\"}}},{\"key\":\"2A6A\",\"mappings\":{\"default\":{\"default\":\"opérateur tilde point en chef\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A6B\",\"mappings\":{\"default\":{\"default\":\"opérateur tilde à points ascendants\"}}},{\"category\":\"Sm\",\"key\":\"2A6C\",\"mappings\":{\"default\":{\"default\":\"similaire à moins similaire à\"}}},{\"key\":\"2A6D\",\"mappings\":{\"default\":{\"default\":\"congruent point en chef\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A6E\",\"mappings\":{\"default\":{\"default\":\"Égal astérisque en chef\"}}},{\"key\":\"2A6F\",\"mappings\":{\"default\":{\"default\":\"presque égal à circonflexe\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A70\",\"mappings\":{\"default\":{\"default\":\"approximativement égal à ou égal à\"}}},{\"key\":\"2A71\",\"mappings\":{\"default\":{\"default\":\"plus signe égal en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A72\",\"mappings\":{\"default\":{\"default\":\"égal à signe plus en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A73\",\"mappings\":{\"default\":{\"default\":\"tilde signe égal en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A74\",\"mappings\":{\"default\":{\"default\":\"double deux points égal à\"}},\"category\":\"Sm\"},{\"key\":\"2A75\",\"mappings\":{\"default\":{\"default\":\"deux signes égal à consécutifs\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A76\",\"mappings\":{\"default\":{\"default\":\"trois signes égal à consécutifs\"}}},{\"key\":\"2A77\",\"mappings\":{\"default\":{\"default\":\"égal à deux points en chef deux points souscrits\"}},\"category\":\"Sm\"},{\"key\":\"2A78\",\"mappings\":{\"default\":{\"default\":\"équivalent quatre points en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A79\",\"mappings\":{\"default\":{\"default\":\"inférieur à avec cercle inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A7A\",\"mappings\":{\"default\":{\"default\":\"supérieur à avec cercle inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A7B\",\"mappings\":{\"default\":{\"default\":\"inférieur à point d'interrogation en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A7C\",\"mappings\":{\"default\":{\"default\":\"supérieur à point d'interrogation en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A7D\",\"mappings\":{\"default\":{\"default\":\"plus petit ou égal à pentu\"}},\"category\":\"Sm\"},{\"key\":\"2A7E\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à pentu\"}},\"category\":\"Sm\"},{\"key\":\"2A7F\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou égal à pentu point inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A80\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à pentu point inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A81\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou égal à pentu point en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A82\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à pentu point en chef\"}},\"category\":\"Sm\"},{\"key\":\"2A83\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou égal à pentu point en chef droit\"}},\"category\":\"Sm\"},{\"key\":\"2A84\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à pentu point en chef gauche\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A85\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou approximatif\"}}},{\"category\":\"Sm\",\"key\":\"2A86\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou approximatif\"}}},{\"category\":\"Sm\",\"key\":\"2A87\",\"mappings\":{\"default\":{\"default\":\"inférieur à et pas égal à une ligne\"}}},{\"category\":\"Sm\",\"key\":\"2A88\",\"mappings\":{\"default\":{\"default\":\"supérieur à et pas égal à une ligne\"}}},{\"key\":\"2A89\",\"mappings\":{\"default\":{\"default\":\"inférieur à et non approximatif\"}},\"category\":\"Sm\"},{\"key\":\"2A8A\",\"mappings\":{\"default\":{\"default\":\"supérieur à et non approximatif\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A8B\",\"mappings\":{\"default\":{\"default\":\"inférieur à par dessus égal à deux lignes par dessus supérieur à\"}}},{\"category\":\"Sm\",\"key\":\"2A8C\",\"mappings\":{\"default\":{\"default\":\"supérieur à par dessus égal à deux lignes par dessus inférieur à\"}}},{\"key\":\"2A8D\",\"mappings\":{\"default\":{\"default\":\"inférieur à par dessus similaire à ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2A8E\",\"mappings\":{\"default\":{\"default\":\"supérieur à par dessus similaire à ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2A8F\",\"mappings\":{\"default\":{\"default\":\"inférieur à par dessus similaire à par dessus supérieur à\"}},\"category\":\"Sm\"},{\"key\":\"2A90\",\"mappings\":{\"default\":{\"default\":\"supérieur à par dessus similaire à par dessus inférieur à\"}},\"category\":\"Sm\"},{\"key\":\"2A91\",\"mappings\":{\"default\":{\"default\":\"inférieur à par dessus supérieur à par dessus égal à deux lignes\"}},\"category\":\"Sm\"},{\"key\":\"2A92\",\"mappings\":{\"default\":{\"default\":\"supérieur à par dessus inférieur à par dessus égal à deux lignes\"}},\"category\":\"Sm\"},{\"key\":\"2A93\",\"mappings\":{\"default\":{\"default\":\"inférieur à par dessus égal à pentu par dessus supérieur à par dessus égal à pentu\"}},\"category\":\"Sm\"},{\"key\":\"2A94\",\"mappings\":{\"default\":{\"default\":\"supérieur à par dessus égal à pentu par dessus inférieur à par dessus égal à pentu\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A95\",\"mappings\":{\"default\":{\"default\":\"Égal à incliné ou inférieur à\"}}},{\"category\":\"Sm\",\"key\":\"2A96\",\"mappings\":{\"default\":{\"default\":\"Égal à incliné ou supérieur à\"}}},{\"key\":\"2A97\",\"mappings\":{\"default\":{\"default\":\"égal à pentu ou inférieur à point inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A98\",\"mappings\":{\"default\":{\"default\":\"égal à pentu ou supérieur à point inscrit\"}},\"category\":\"Sm\"},{\"key\":\"2A99\",\"mappings\":{\"default\":{\"default\":\"égal à deux lignes ou inférieur à\"}},\"category\":\"Sm\"},{\"key\":\"2A9A\",\"mappings\":{\"default\":{\"default\":\"égal à deux lignes ou supérieur à\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2A9B\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou égal à à deux lignes inclinées\"}}},{\"category\":\"Sm\",\"key\":\"2A9C\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à à deux lignes inclinées\"}}},{\"key\":\"2A9D\",\"mappings\":{\"default\":{\"default\":\"similaire à ou inférieur à\"}},\"category\":\"Sm\"},{\"key\":\"2A9E\",\"mappings\":{\"default\":{\"default\":\"similaire à ou supérieur à\"}},\"category\":\"Sm\"},{\"key\":\"2A9F\",\"mappings\":{\"default\":{\"default\":\"similaire à par dessus inférieur à par dessus signe égal\"}},\"category\":\"Sm\"},{\"key\":\"2AA0\",\"mappings\":{\"default\":{\"default\":\"similaire à par dessus supérieur à par dessus signe égal\"}},\"category\":\"Sm\"},{\"key\":\"2AA1\",\"mappings\":{\"default\":{\"default\":\"deux inférieur à emboîtés\"}},\"category\":\"Sm\"},{\"key\":\"2AA2\",\"mappings\":{\"default\":{\"default\":\"deux supérieur à emboîtés\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AA3\",\"mappings\":{\"default\":{\"default\":\"deux inférieur à emboîtés avec barre souscrite\"}}},{\"key\":\"2AA4\",\"mappings\":{\"default\":{\"default\":\"deux supérieur à entrecroisés\"}},\"category\":\"Sm\"},{\"key\":\"2AA5\",\"mappings\":{\"default\":{\"default\":\"supérieur à à côté de inférieur à\"}},\"category\":\"Sm\"},{\"key\":\"2AA6\",\"mappings\":{\"default\":{\"default\":\"inférieur à fermé d'un arc\"}},\"category\":\"Sm\"},{\"key\":\"2AA7\",\"mappings\":{\"default\":{\"default\":\"supérieur à fermé d'un arc\"}},\"category\":\"Sm\"},{\"key\":\"2AA8\",\"mappings\":{\"default\":{\"default\":\"inférieur à fermé d'un arc par dessus égal à pentu\"}},\"category\":\"Sm\"},{\"key\":\"2AA9\",\"mappings\":{\"default\":{\"default\":\"supérieur à fermé d'un arc par dessus égal à pentu\"}},\"category\":\"Sm\"},{\"key\":\"2AAA\",\"mappings\":{\"default\":{\"default\":\"plus petit que en fourche\"}},\"category\":\"Sm\"},{\"key\":\"2AAB\",\"mappings\":{\"default\":{\"default\":\"plus grand que en fourche\"}},\"category\":\"Sm\"},{\"key\":\"2AAC\",\"mappings\":{\"default\":{\"default\":\"plus petit ou égal que en fourche\"}},\"category\":\"Sm\"},{\"key\":\"2AAD\",\"mappings\":{\"default\":{\"default\":\"plus grand ou égal que en fourche\"}},\"category\":\"Sm\"},{\"key\":\"2AAE\",\"mappings\":{\"default\":{\"default\":\"égal et dos d'âne\"}},\"category\":\"Sm\"},{\"key\":\"2AAF\",\"mappings\":{\"default\":{\"default\":\"précède par dessus signe égal à une ligne\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AB0\",\"mappings\":{\"default\":{\"default\":\"suit par dessus signe égal à une ligne\"}}},{\"category\":\"Sm\",\"key\":\"2AB1\",\"mappings\":{\"default\":{\"default\":\"précède par dessus pas égal à une ligne\"}}},{\"category\":\"Sm\",\"key\":\"2AB2\",\"mappings\":{\"default\":{\"default\":\"suit par dessus pas égal à une ligne\"}}},{\"category\":\"Sm\",\"key\":\"2AB3\",\"mappings\":{\"default\":{\"default\":\"précède par dessus signe égal\"}}},{\"category\":\"Sm\",\"key\":\"2AB4\",\"mappings\":{\"default\":{\"default\":\"suit par dessus signe égal\"}}},{\"key\":\"2AB5\",\"mappings\":{\"default\":{\"default\":\"précède par dessus pas égal à\"}},\"category\":\"Sm\"},{\"key\":\"2AB6\",\"mappings\":{\"default\":{\"default\":\"suit par dessus pas égal à\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AB7\",\"mappings\":{\"default\":{\"default\":\"précède par dessus presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2AB8\",\"mappings\":{\"default\":{\"default\":\"suit par dessus presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2AB9\",\"mappings\":{\"default\":{\"default\":\"précède par dessus non presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2ABA\",\"mappings\":{\"default\":{\"default\":\"suit par dessus non presque égal à\"}}},{\"key\":\"2ABB\",\"mappings\":{\"default\":{\"default\":\"double précède\"}},\"category\":\"Sm\"},{\"key\":\"2ABC\",\"mappings\":{\"default\":{\"default\":\"double suit\"}},\"category\":\"Sm\"},{\"key\":\"2ABD\",\"mappings\":{\"default\":{\"default\":\"sous ensemble pointé\"}},\"category\":\"Sm\"},{\"key\":\"2ABE\",\"mappings\":{\"default\":{\"default\":\"sur ensemble pointé\"}},\"category\":\"Sm\"},{\"key\":\"2ABF\",\"mappings\":{\"default\":{\"default\":\"sous ensemble plus souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2AC0\",\"mappings\":{\"default\":{\"default\":\"sur ensemble plus souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2AC1\",\"mappings\":{\"default\":{\"default\":\"sous ensemble à signe de multiplication souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2AC2\",\"mappings\":{\"default\":{\"default\":\"sur ensemble à signe de multiplication souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2AC3\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de ou égal à point en chef\"}},\"category\":\"Sm\"},{\"key\":\"2AC4\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de ou égal à point en chef\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AC5\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de par dessus signe égal\"}}},{\"category\":\"Sm\",\"key\":\"2AC6\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de par dessus signe égal\"}}},{\"key\":\"2AC7\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de par dessus opérateur tilde\"}},\"category\":\"Sm\"},{\"key\":\"2AC8\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de par dessus opérateur tilde\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AC9\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de par dessus presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2ACA\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de par dessus presque égal à\"}}},{\"category\":\"Sm\",\"key\":\"2ACB\",\"mappings\":{\"default\":{\"default\":\"sous ensemble de par dessus pas égal à\"}}},{\"category\":\"Sm\",\"key\":\"2ACC\",\"mappings\":{\"default\":{\"default\":\"sur ensemble de par dessus pas égal à\"}}},{\"category\":\"Sm\",\"key\":\"2ACD\",\"mappings\":{\"default\":{\"default\":\"opérateur boîte carrée ouverte gauche\"}}},{\"category\":\"Sm\",\"key\":\"2ACE\",\"mappings\":{\"default\":{\"default\":\"opérateur boîte carrée ouverte droite\"}}},{\"key\":\"2ACF\",\"mappings\":{\"default\":{\"default\":\"sous ensemble clos\"}},\"category\":\"Sm\"},{\"key\":\"2AD0\",\"mappings\":{\"default\":{\"default\":\"sur ensemble clos\"}},\"category\":\"Sm\"},{\"key\":\"2AD1\",\"mappings\":{\"default\":{\"default\":\"sous ensemble clos ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2AD2\",\"mappings\":{\"default\":{\"default\":\"sur ensemble clos ou égal à\"}},\"category\":\"Sm\"},{\"key\":\"2AD3\",\"mappings\":{\"default\":{\"default\":\"sous ensemble par dessus sur ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD4\",\"mappings\":{\"default\":{\"default\":\"sur ensemble par dessus sous ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD5\",\"mappings\":{\"default\":{\"default\":\"sous ensemble par dessus sous ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD6\",\"mappings\":{\"default\":{\"default\":\"sur ensemble par dessus sur ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD7\",\"mappings\":{\"default\":{\"default\":\"sur ensemble à côté de sous ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD8\",\"mappings\":{\"default\":{\"default\":\"sur ensemble chaîné à sous ensemble\"}},\"category\":\"Sm\"},{\"key\":\"2AD9\",\"mappings\":{\"default\":{\"default\":\"appartient à ouvert vers le bas\"}},\"category\":\"Sm\"},{\"key\":\"2ADA\",\"mappings\":{\"default\":{\"default\":\"fourche surmontée d'un t\"}},\"category\":\"Sm\"},{\"key\":\"2ADB\",\"mappings\":{\"default\":{\"default\":\"intersection transversale\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2ADC\",\"mappings\":{\"default\":{\"default\":\"bifurcation (non indépendant)\"}}},{\"category\":\"Sm\",\"key\":\"2ADD\",\"mappings\":{\"default\":{\"default\":\"non bifurcation (indépendant)\"}}},{\"category\":\"Sm\",\"key\":\"2ADE\",\"mappings\":{\"default\":{\"default\":\"taquet gauche court\"}}},{\"category\":\"Sm\",\"key\":\"2ADF\",\"mappings\":{\"default\":{\"default\":\"taquet court vers le bas\"}}},{\"category\":\"Sm\",\"key\":\"2AE0\",\"mappings\":{\"default\":{\"default\":\"taquet court vers le haut\"}}},{\"category\":\"Sm\",\"key\":\"2AE1\",\"mappings\":{\"default\":{\"default\":\"perpendiculaire à s\"}}},{\"category\":\"Sm\",\"key\":\"2AE2\",\"mappings\":{\"default\":{\"default\":\"triple tourniquet droit à barre verticale\"}}},{\"category\":\"Sm\",\"key\":\"2AE3\",\"mappings\":{\"default\":{\"default\":\"tourniquet gauche à double barre verticale\"}}},{\"key\":\"2AE4\",\"mappings\":{\"default\":{\"default\":\"double tourniquet gauche à barre verticale\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AE5\",\"mappings\":{\"default\":{\"default\":\"double tourniquet gauche à double barre verticale\"}}},{\"key\":\"2AE6\",\"mappings\":{\"default\":{\"default\":\"double barre verticale gauche à traverse\"}},\"category\":\"Sm\"},{\"key\":\"2AE7\",\"mappings\":{\"default\":{\"default\":\"taquet court vers le bas avec barre en chef\"}},\"category\":\"Sm\"},{\"key\":\"2AE8\",\"mappings\":{\"default\":{\"default\":\"taquet court vers le haut avec barre souscrite\"}},\"category\":\"Sm\"},{\"key\":\"2AE9\",\"mappings\":{\"default\":{\"default\":\"taquet court vers le haut par dessus taquet court vers le bas\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AEA\",\"mappings\":{\"default\":{\"default\":\"double taquet vers le bas\"}}},{\"key\":\"2AEB\",\"mappings\":{\"default\":{\"default\":\"double taquet vers le haut\"}},\"category\":\"Sm\"},{\"key\":\"2AEC\",\"mappings\":{\"default\":{\"default\":\"négation à deux traits\"}},\"category\":\"Sm\"},{\"key\":\"2AED\",\"mappings\":{\"default\":{\"default\":\"négation à deux traits réfléchi\"}},\"category\":\"Sm\"},{\"key\":\"2AEE\",\"mappings\":{\"default\":{\"default\":\"n'est pas un diviseur de à barre de négation réfléchie\"}},\"category\":\"Sm\"},{\"key\":\"2AEF\",\"mappings\":{\"default\":{\"default\":\"ligne verticale cercle en chef\"}},\"category\":\"Sm\"},{\"key\":\"2AF0\",\"mappings\":{\"default\":{\"default\":\"ligne verticale cercle souscrit\"}},\"category\":\"Sm\"},{\"key\":\"2AF1\",\"mappings\":{\"default\":{\"default\":\"taquet vers le bas surmontant un cercle\"}},\"category\":\"Sm\"},{\"key\":\"2AF2\",\"mappings\":{\"default\":{\"default\":\"parallèlle à vertical à une traverse\"}},\"category\":\"Sm\"},{\"key\":\"2AF3\",\"mappings\":{\"default\":{\"default\":\"parallèle à avec opérateur tilde\"}},\"category\":\"Sm\"},{\"category\":\"Sm\",\"key\":\"2AF4\",\"mappings\":{\"default\":{\"default\":\"relation binaire triple barre verticale\"}}},{\"category\":\"Sm\",\"key\":\"2AF5\",\"mappings\":{\"default\":{\"default\":\"triple barre verticale à une traverse\"}}},{\"category\":\"Sm\",\"key\":\"2AF6\",\"mappings\":{\"default\":{\"default\":\"opérateur trois points\"}}},{\"category\":\"Sm\",\"key\":\"2AF7\",\"mappings\":{\"default\":{\"default\":\"trois inférieur à emboîtés\"}}},{\"category\":\"Sm\",\"key\":\"2AF8\",\"mappings\":{\"default\":{\"default\":\"trois supérieur à emboîtés\"}}},{\"category\":\"Sm\",\"key\":\"2AF9\",\"mappings\":{\"default\":{\"default\":\"inférieur à ou égal à et deux lignes inclinées\"}}},{\"category\":\"Sm\",\"key\":\"2AFA\",\"mappings\":{\"default\":{\"default\":\"supérieur à ou égal à et deux lignes inclinées\"}}},{\"category\":\"Sm\",\"key\":\"2AFB\",\"mappings\":{\"default\":{\"default\":\"relation binaire triple oblique\"}}},{\"category\":\"Sm\",\"key\":\"2AFC\",\"mappings\":{\"default\":{\"default\":\"grand opérateur à trois barres verticales\"}}},{\"category\":\"Sm\",\"key\":\"2AFD\",\"mappings\":{\"default\":{\"default\":\"opérateur double oblique\"}}},{\"category\":\"Sm\",\"key\":\"2AFE\",\"mappings\":{\"default\":{\"default\":\"barre verticale blanche\"}}},{\"category\":\"Sm\",\"key\":\"2AFF\",\"mappings\":{\"default\":{\"default\":\"barre verticale blanche n aire\"}}},{\"category\":\"Pd\",\"key\":\"301C\",\"mappings\":{\"default\":{\"default\":\"trait d'union en esse\"}}},{\"category\":\"Po\",\"key\":\"FE10\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de virgule verticale\"}}},{\"category\":\"Po\",\"key\":\"FE13\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de deux points vertical\"}}},{\"category\":\"Po\",\"key\":\"FE14\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de point virgule vertical\"}}},{\"category\":\"Po\",\"key\":\"FE15\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de point d'exclamation vertical\"}}},{\"category\":\"Po\",\"key\":\"FE16\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de point d'interrogation vertical\"}}},{\"category\":\"Po\",\"key\":\"FE19\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de points de suspension verticaux\"}}},{\"category\":\"Po\",\"key\":\"FE30\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de point de conduite double vertical\"}}},{\"category\":\"Pd\",\"key\":\"FE31\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de tiret cadratin vertical\"}}},{\"category\":\"Pd\",\"key\":\"FE32\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de tiret demi cadratin vertical\"}}},{\"category\":\"Pc\",\"key\":\"FE33\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de tiret bas vertical\"}}},{\"category\":\"Pc\",\"key\":\"FE34\",\"mappings\":{\"default\":{\"default\":\"forme de présentation de tiret bas ondulé vertical\"}}},{\"category\":\"Po\",\"key\":\"FE45\",\"mappings\":{\"default\":{\"default\":\"point sésame\"}}},{\"category\":\"Po\",\"key\":\"FE46\",\"mappings\":{\"default\":{\"default\":\"point sésame ajouré\"}}},{\"category\":\"Po\",\"key\":\"FE49\",\"mappings\":{\"default\":{\"default\":\"tiret haut en pointillés\"}}},{\"category\":\"Po\",\"key\":\"FE4A\",\"mappings\":{\"default\":{\"default\":\"tiret haut à point central\"}}},{\"category\":\"Po\",\"key\":\"FE4B\",\"mappings\":{\"default\":{\"default\":\"tiret haut ondulé\"}}},{\"category\":\"Po\",\"key\":\"FE4C\",\"mappings\":{\"default\":{\"default\":\"tiret haut double ondulé\"}}},{\"category\":\"Pc\",\"key\":\"FE4D\",\"mappings\":{\"default\":{\"default\":\"tiret bas avec pointillés\"}}},{\"category\":\"Pc\",\"key\":\"FE4E\",\"mappings\":{\"default\":{\"default\":\"tiret bas à point central\"}}},{\"category\":\"Pc\",\"key\":\"FE4F\",\"mappings\":{\"default\":{\"default\":\"tiret bas ondulé\"}}},{\"category\":\"Po\",\"key\":\"FE50\",\"mappings\":{\"default\":{\"default\":\"virgule minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE52\",\"mappings\":{\"default\":{\"default\":\"point minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE54\",\"mappings\":{\"default\":{\"default\":\"point virgule minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE55\",\"mappings\":{\"default\":{\"default\":\"deux points minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE56\",\"mappings\":{\"default\":{\"default\":\"point d'interrogation minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE57\",\"mappings\":{\"default\":{\"default\":\"point d'exclamation minuscule\"}}},{\"category\":\"Pd\",\"key\":\"FE58\",\"mappings\":{\"default\":{\"default\":\"trait d'union cadratin minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE5F\",\"mappings\":{\"default\":{\"default\":\"croisillon minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE60\",\"mappings\":{\"default\":{\"default\":\"perluète minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE61\",\"mappings\":{\"default\":{\"default\":\"astérisque minuscule\"}}},{\"category\":\"Sm\",\"key\":\"FE62\",\"mappings\":{\"default\":{\"default\":\"plus minuscule\"}}},{\"category\":\"Pd\",\"key\":\"FE63\",\"mappings\":{\"default\":{\"default\":\"tiret minuscule\"}}},{\"category\":\"Sm\",\"key\":\"FE64\",\"mappings\":{\"default\":{\"default\":\"inférieur à minuscule\"}}},{\"category\":\"Sm\",\"key\":\"FE65\",\"mappings\":{\"default\":{\"default\":\"supérieur à minuscule\"}}},{\"category\":\"Sm\",\"key\":\"FE66\",\"mappings\":{\"default\":{\"default\":\"égal à minuscule\"}}},{\"key\":\"FE68\",\"mappings\":{\"default\":{\"default\":\"integer divide\"}},\"category\":\"Po\"},{\"category\":\"Sc\",\"key\":\"FE69\",\"mappings\":{\"default\":{\"default\":\"symbole dollar minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE6A\",\"mappings\":{\"default\":{\"default\":\"symbole pour cent minuscule\"}}},{\"category\":\"Po\",\"key\":\"FE6B\",\"mappings\":{\"default\":{\"default\":\"arrobe minuscule\"}}},{\"category\":\"Po\",\"key\":\"FF01\",\"mappings\":{\"default\":{\"default\":\"point d'exclamation\"}}},{\"category\":\"Po\",\"key\":\"FF02\",\"mappings\":{\"default\":{\"default\":\"guillemet\"}}},{\"category\":\"Po\",\"key\":\"FF03\",\"mappings\":{\"default\":{\"default\":\"croisillon\"}}},{\"category\":\"Sc\",\"key\":\"FF04\",\"mappings\":{\"default\":{\"default\":\"symbole dollar\"}}},{\"category\":\"Po\",\"key\":\"FF05\",\"mappings\":{\"default\":{\"default\":\"symbole pour cent\"}}},{\"category\":\"Po\",\"key\":\"FF06\",\"mappings\":{\"default\":{\"default\":\"perluète\"}}},{\"category\":\"Po\",\"key\":\"FF07\",\"mappings\":{\"default\":{\"default\":\"apostrophe\"}}},{\"category\":\"Po\",\"key\":\"FF0A\",\"mappings\":{\"default\":{\"default\":\"astérisque\"}}},{\"category\":\"Sm\",\"key\":\"FF0B\",\"mappings\":{\"default\":{\"default\":\"plus\"}}},{\"category\":\"Po\",\"key\":\"FF0C\",\"mappings\":{\"default\":{\"default\":\"virgule\"}}},{\"category\":\"Pd\",\"key\":\"FF0D\",\"mappings\":{\"default\":{\"default\":\"tiret\"}}},{\"category\":\"Po\",\"key\":\"FF0E\",\"mappings\":{\"default\":{\"default\":\"point\"}}},{\"category\":\"Po\",\"key\":\"FF0F\",\"mappings\":{\"default\":{\"default\":\"barre oblique\"}}},{\"category\":\"Po\",\"key\":\"FF1A\",\"mappings\":{\"default\":{\"default\":\"deux points colon\"}}},{\"category\":\"Po\",\"key\":\"FF1B\",\"mappings\":{\"default\":{\"default\":\"point virgule\"}}},{\"category\":\"Sm\",\"key\":\"FF1C\",\"mappings\":{\"default\":{\"default\":\"inférieur à\"}}},{\"category\":\"Sm\",\"key\":\"FF1D\",\"mappings\":{\"default\":{\"default\":\"égal à\"}}},{\"category\":\"Sm\",\"key\":\"FF1E\",\"mappings\":{\"default\":{\"default\":\"supérieur à\"}}},{\"category\":\"Po\",\"key\":\"FF1F\",\"mappings\":{\"default\":{\"default\":\"point d'interrogation\"}}},{\"category\":\"Po\",\"key\":\"FF20\",\"mappings\":{\"default\":{\"default\":\"arrobe\"}}},{\"category\":\"Po\",\"key\":\"FF3C\",\"mappings\":{\"default\":{\"default\":\"barre oblique inversée\"}}},{\"category\":\"Sk\",\"key\":\"FF3E\",\"mappings\":{\"default\":{\"default\":\"accent circonflexe\"}}},{\"category\":\"Pc\",\"key\":\"FF3F\",\"mappings\":{\"default\":{\"default\":\"tiret bas\"}}},{\"category\":\"Sk\",\"key\":\"FF40\",\"mappings\":{\"default\":{\"default\":\"accent grave\"}}},{\"category\":\"Sm\",\"key\":\"FF5C\",\"mappings\":{\"default\":{\"default\":\"barre verticale\"}}},{\"category\":\"Sm\",\"key\":\"FF5E\",\"mappings\":{\"default\":{\"default\":\"tilde\"}}},{\"category\":\"Sc\",\"key\":\"FFE0\",\"mappings\":{\"default\":{\"default\":\"symbole centime\"}}},{\"category\":\"Sc\",\"key\":\"FFE1\",\"mappings\":{\"default\":{\"default\":\"symbole livre\"}}},{\"category\":\"Sm\",\"key\":\"FFE2\",\"mappings\":{\"default\":{\"default\":\"négation\"}}},{\"category\":\"Sk\",\"key\":\"FFE3\",\"mappings\":{\"default\":{\"default\":\"macron *\"}}},{\"category\":\"So\",\"key\":\"FFE4\",\"mappings\":{\"default\":{\"default\":\"ligne brisée\"}}},{\"category\":\"Sc\",\"key\":\"FFE5\",\"mappings\":{\"default\":{\"default\":\"symbole yen\"}}},{\"category\":\"Sc\",\"key\":\"FFE6\",\"mappings\":{\"default\":{\"default\":\"symbole won\"}}},{\"category\":\"So\",\"key\":\"FFE8\",\"mappings\":{\"default\":{\"default\":\"ligne verticale mince\"}}},{\"category\":\"So\",\"key\":\"FFED\",\"mappings\":{\"default\":{\"default\":\"carré noir\"}}},{\"category\":\"So\",\"key\":\"FFEE\",\"mappings\":{\"default\":{\"default\":\"cercle blanc\"}}}]\n,\n\"fr/symbols/math_whitespace.js\": \n[{\"locale\":\"fr\"},{\"category\":\"Zs\",\"key\":\"0020\",\"mappings\":{\"default\":{\"default\":\"espace\"}}},{\"key\":\"00A0\",\"mappings\":{\"default\":{\"default\":\" \"}},\"category\":\"Zs\"},{\"key\":\"00AD\",\"mappings\":{\"default\":{\"default\":\"trait d'union conditionnel\"}},\"category\":\"Cf\"},{\"category\":\"Zs\",\"key\":\"2000\",\"mappings\":{\"default\":{\"default\":\"demi cadratin\"}}},{\"category\":\"Zs\",\"key\":\"2001\",\"mappings\":{\"default\":{\"default\":\"cadratin\"}}},{\"key\":\"2002\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2003\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2004\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2005\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"category\":\"Zs\",\"key\":\"2006\",\"mappings\":{\"default\":{\"default\":\"sixième de cadratin\"}}},{\"key\":\"2007\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2008\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"2009\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200A\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Zs\"},{\"key\":\"200B\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"key\":\"200C\",\"mappings\":{\"default\":{\"default\":\"antiliant sans chasse\"}},\"category\":\"Cf\"},{\"key\":\"200D\",\"mappings\":{\"default\":{\"default\":\"liant sans chasse\"}},\"category\":\"Cf\"},{\"key\":\"200E\",\"mappings\":{\"default\":{\"default\":\"marque gauche à droite\"}},\"category\":\"Cf\"},{\"key\":\"200F\",\"mappings\":{\"default\":{\"default\":\"marque droite à gauche\"}},\"category\":\"Cf\"},{\"category\":\"Zl\",\"key\":\"2028\",\"mappings\":{\"default\":{\"default\":\"séparateur de lignes\"}}},{\"category\":\"Zp\",\"key\":\"2029\",\"mappings\":{\"default\":{\"default\":\"séparateur de paragraphes\"}}},{\"category\":\"Cf\",\"key\":\"202A\",\"mappings\":{\"default\":{\"default\":\"enchâssement gauche à droite\"}}},{\"category\":\"Cf\",\"key\":\"202B\",\"mappings\":{\"default\":{\"default\":\"enchâssement droite à gauche\"}}},{\"category\":\"Cf\",\"key\":\"202C\",\"mappings\":{\"default\":{\"default\":\"dépilement de formatage directionnel\"}}},{\"category\":\"Cf\",\"key\":\"202D\",\"mappings\":{\"default\":{\"default\":\"forçage gauche à droite\"}}},{\"category\":\"Cf\",\"key\":\"202E\",\"mappings\":{\"default\":{\"default\":\"forçage droite à gauche\"}}},{\"category\":\"Zs\",\"key\":\"202F\",\"mappings\":{\"default\":{\"default\":\"espace insécable étroite\"}}},{\"key\":\"205F\",\"mappings\":{\"default\":{\"default\":\"espace moyenne mathématique\"}},\"category\":\"Zs\"},{\"key\":\"2060\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"key\":\"2061\",\"mappings\":{\"default\":{\"default\":\"de\"}},\"category\":\"Cf\"},{\"key\":\"2062\",\"mappings\":{\"default\":{\"default\":\" \"}},\"category\":\"Cf\"},{\"key\":\"2063\",\"mappings\":{\"default\":{\"default\":\"\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"2064\",\"mappings\":{\"default\":{\"default\":\"plus invisible\"}}},{\"category\":\"Cf\",\"key\":\"206A\",\"mappings\":{\"default\":{\"default\":\"inhibiteur d'échange symétrique\"}}},{\"category\":\"Cf\",\"key\":\"206B\",\"mappings\":{\"default\":{\"default\":\"activateur d'échange symétrique\"}}},{\"category\":\"Cf\",\"key\":\"206E\",\"mappings\":{\"default\":{\"default\":\"sélecteur de formes numérales nationales\"}}},{\"category\":\"Cf\",\"key\":\"206F\",\"mappings\":{\"default\":{\"default\":\"sélecteur de formes numérales de référence\"}}},{\"key\":\"FEFF\",\"mappings\":{\"default\":{\"default\":\"espace ultrafine\"}},\"category\":\"Cf\"},{\"category\":\"Cf\",\"key\":\"FFF9\",\"mappings\":{\"default\":{\"default\":\"ancre d'annotation interlinéaire\"}}},{\"category\":\"Cf\",\"key\":\"FFFA\",\"mappings\":{\"default\":{\"default\":\"séparateur d'annotation interlinéaire\"}}},{\"category\":\"Cf\",\"key\":\"FFFB\",\"mappings\":{\"default\":{\"default\":\"terminateur d'annotation interlinéaire\"}}}]\n,\n\"fr/symbols/other_stars.js\": \n[{\"locale\":\"fr\"},{\"category\":\"So\",\"key\":\"23E8\",\"mappings\":{\"default\":{\"default\":\"symbole exposant décimal\"}}},{\"key\":\"2605\",\"mappings\":{\"default\":{\"default\":\"étoile noire\"}},\"category\":\"So\"},{\"key\":\"2606\",\"mappings\":{\"default\":{\"default\":\"étoile blanche\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"26AA\",\"mappings\":{\"default\":{\"default\":\"cercle moyen blanc\"}}},{\"category\":\"So\",\"key\":\"26AB\",\"mappings\":{\"default\":{\"default\":\"cercle moyen noir\"}}},{\"category\":\"So\",\"key\":\"2705\",\"mappings\":{\"default\":{\"default\":\"signe de vérification blanc gras\"}}},{\"key\":\"2713\",\"mappings\":{\"default\":{\"default\":\"signe de vérification\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2714\",\"mappings\":{\"default\":{\"default\":\"gros signe de vérification\"}}},{\"category\":\"So\",\"key\":\"2715\",\"mappings\":{\"default\":{\"default\":\"x de multiplication\"}}},{\"category\":\"So\",\"key\":\"2716\",\"mappings\":{\"default\":{\"default\":\"gros x de multiplication\"}}},{\"key\":\"2717\",\"mappings\":{\"default\":{\"default\":\"x de bulletin de vote\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2718\",\"mappings\":{\"default\":{\"default\":\"gros x de bulletin de vote\"}}},{\"category\":\"So\",\"key\":\"271B\",\"mappings\":{\"default\":{\"default\":\"croix percée d'un carré\"}}},{\"category\":\"So\",\"key\":\"271C\",\"mappings\":{\"default\":{\"default\":\"grosse croix percée d'un carré\"}}},{\"key\":\"2720\",\"mappings\":{\"default\":{\"default\":\"croix de malte\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2721\",\"mappings\":{\"default\":{\"default\":\"Étoile de david\"}}},{\"category\":\"So\",\"key\":\"2722\",\"mappings\":{\"default\":{\"default\":\"croix larmée\"}}},{\"category\":\"So\",\"key\":\"2723\",\"mappings\":{\"default\":{\"default\":\"croix pommetée\"}}},{\"category\":\"So\",\"key\":\"2724\",\"mappings\":{\"default\":{\"default\":\"grosse croix pommetée\"}}},{\"category\":\"So\",\"key\":\"2725\",\"mappings\":{\"default\":{\"default\":\"croix tréflée\"}}},{\"category\":\"So\",\"key\":\"2726\",\"mappings\":{\"default\":{\"default\":\"Étoile noire à quatre branches\"}}},{\"category\":\"So\",\"key\":\"2727\",\"mappings\":{\"default\":{\"default\":\"Étoile blanche à quatre branches\"}}},{\"category\":\"So\",\"key\":\"2728\",\"mappings\":{\"default\":{\"default\":\"scintillements\"}}},{\"category\":\"So\",\"key\":\"2729\",\"mappings\":{\"default\":{\"default\":\"Étoile blanche à contour accentué\"}}},{\"category\":\"So\",\"key\":\"272A\",\"mappings\":{\"default\":{\"default\":\"Étoile blanche cerclée\"}}},{\"category\":\"So\",\"key\":\"272B\",\"mappings\":{\"default\":{\"default\":\"molette noire\"}}},{\"category\":\"So\",\"key\":\"272C\",\"mappings\":{\"default\":{\"default\":\"molette blanche\"}}},{\"category\":\"So\",\"key\":\"272D\",\"mappings\":{\"default\":{\"default\":\"Étoile noire avec contour\"}}},{\"category\":\"So\",\"key\":\"272E\",\"mappings\":{\"default\":{\"default\":\"Étoile noire avec gros contour\"}}},{\"category\":\"So\",\"key\":\"272F\",\"mappings\":{\"default\":{\"default\":\"Étoile rayonnante\"}}},{\"category\":\"So\",\"key\":\"2730\",\"mappings\":{\"default\":{\"default\":\"Étoile blanche ombrée\"}}},{\"category\":\"So\",\"key\":\"2731\",\"mappings\":{\"default\":{\"default\":\"gros astérisque\"}}},{\"category\":\"So\",\"key\":\"2732\",\"mappings\":{\"default\":{\"default\":\"astérisque percé\"}}},{\"category\":\"So\",\"key\":\"2733\",\"mappings\":{\"default\":{\"default\":\"astérisque à huit branches\"}}},{\"category\":\"So\",\"key\":\"2734\",\"mappings\":{\"default\":{\"default\":\"Étoile noire à huit branches\"}}},{\"category\":\"So\",\"key\":\"2735\",\"mappings\":{\"default\":{\"default\":\"Étoile rayonnante à huit branches\"}}},{\"key\":\"2736\",\"mappings\":{\"default\":{\"default\":\"étoile noire à six branches\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"2739\",\"mappings\":{\"default\":{\"default\":\"Étoile noire à douze branches\"}}},{\"category\":\"So\",\"key\":\"273A\",\"mappings\":{\"default\":{\"default\":\"astérisque à seize branches\"}}},{\"category\":\"So\",\"key\":\"273B\",\"mappings\":{\"default\":{\"default\":\"astérisque larmé\"}}},{\"category\":\"So\",\"key\":\"273C\",\"mappings\":{\"default\":{\"default\":\"astérisque larmé percé\"}}},{\"key\":\"273D\",\"mappings\":{\"default\":{\"default\":\"gros astérisque larmé\"}},\"category\":\"So\"},{\"category\":\"So\",\"key\":\"273E\",\"mappings\":{\"default\":{\"default\":\"sixtefeuille blanche et noire\"}}},{\"category\":\"So\",\"key\":\"273F\",\"mappings\":{\"default\":{\"default\":\"quintefeuille noire\"}}},{\"category\":\"So\",\"key\":\"2740\",\"mappings\":{\"default\":{\"default\":\"quintefeuille blanche\"}}},{\"category\":\"So\",\"key\":\"2741\",\"mappings\":{\"default\":{\"default\":\"double quartefeuille noire avec contour\"}}},{\"category\":\"So\",\"key\":\"2742\",\"mappings\":{\"default\":{\"default\":\"Étoile cerclée percée à huit branches\"}}},{\"category\":\"So\",\"key\":\"2743\",\"mappings\":{\"default\":{\"default\":\"gros astérisque rayonnant larmé\"}}},{\"category\":\"So\",\"key\":\"2744\",\"mappings\":{\"default\":{\"default\":\"flocon de neige\"}}},{\"category\":\"So\",\"key\":\"2745\",\"mappings\":{\"default\":{\"default\":\"flocon de neige à trois folioles transpercé\"}}},{\"category\":\"So\",\"key\":\"2746\",\"mappings\":{\"default\":{\"default\":\"gros flocon de neige à chevrons\"}}},{\"category\":\"So\",\"key\":\"2747\",\"mappings\":{\"default\":{\"default\":\"Étincellement\"}}},{\"category\":\"So\",\"key\":\"2748\",\"mappings\":{\"default\":{\"default\":\"gros étincellement\"}}},{\"category\":\"So\",\"key\":\"2749\",\"mappings\":{\"default\":{\"default\":\"astérisque pommeté\"}}},{\"category\":\"So\",\"key\":\"274A\",\"mappings\":{\"default\":{\"default\":\"astérisque hélice à huit branches larmées\"}}},{\"category\":\"So\",\"key\":\"274B\",\"mappings\":{\"default\":{\"default\":\"gros astérisque hélice à huit branches larmées\"}}},{\"category\":\"So\",\"key\":\"274C\",\"mappings\":{\"default\":{\"default\":\"croix grasse\"}}},{\"category\":\"So\",\"key\":\"274D\",\"mappings\":{\"default\":{\"default\":\"cercle blanc ombré\"}}}]\n,\n\"fr/units/energy.js\": \n[{\"locale\":\"fr\"},{\"key\":\"W\",\"mappings\":{\"default\":{\"default\":\"watts\",\"singular\":\"watt\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"W\",\"w\"]},{\"key\":\"J\",\"mappings\":{\"default\":{\"default\":\"joules\",\"singular\":\"joule\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"J\"]},{\"key\":\"N\",\"mappings\":{\"default\":{\"default\":\"newtons\",\"singular\":\"newton\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"N\"]},{\"key\":\"A\",\"mappings\":{\"default\":{\"default\":\"ampères\",\"singular\":\"ampère\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"A\"]},{\"key\":\"V\",\"mappings\":{\"default\":{\"default\":\"volts\",\"singular\":\"volt\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"V\"]},{\"key\":\"Ω\",\"mappings\":{\"default\":{\"default\":\"ohms\",\"singular\":\"ohm\",\"dual\":\"\"}},\"category\":\"energy\",\"names\":[\"Ω\",\"Ohm\"]}]\n,\n\"fr/units/length.js\": \n[{\"locale\":\"fr\"},{\"key\":\"m\",\"mappings\":{\"default\":{\"default\":\"mètres\",\"singular\":\"mètre\",\"dual\":\"\"}},\"category\":\"Length\",\"names\":[\"m\"]},{\"key\":\"ft\",\"mappings\":{\"default\":{\"default\":\"pieds\",\"singular\":\"pied\",\"dual\":\"\"}},\"category\":\"Length\",\"names\":[\"ft\",\"ft.\"]},{\"key\":\"in\",\"mappings\":{\"default\":{\"default\":\"pouces\",\"singular\":\"pouce\",\"dual\":\"\"}},\"category\":\"Length\",\"names\":[\"in\",\"in.\"]},{\"key\":\"mi\",\"mappings\":{\"default\":{\"default\":\"miles\",\"singular\":\"mile\",\"dual\":\"\"}},\"category\":\"Length\",\"names\":[\"mi\",\"mi.\"]},{\"key\":\"yd\",\"mappings\":{\"default\":{\"default\":\"yards\",\"singular\":\"yard\",\"dual\":\"\"}},\"category\":\"Length\",\"names\":[\"yd\",\"yd.\"]}]\n,\n\"fr/units/memory.js\": \n[{\"locale\":\"fr\"}]\n,\n\"fr/units/other.js\": \n[{\"locale\":\"fr\"}]\n,\n\"fr/units/speed.js\": \n[{\"locale\":\"fr\"},{\"key\":\"mph\",\"mappings\":{\"default\":{\"default\":\"miles par heure\",\"singular\":\"mile par heure\",\"dual\":\"\"}},\"names\":[\"mph\"]}]\n,\n\"fr/units/temperature.js\": \n[{\"locale\":\"fr\"},{\"key\":\"F\",\"mappings\":{\"default\":{\"default\":\"farads\",\"singular\":\"farad\",\"dual\":\"\"}},\"names\":[\"F\",\"F.\",\"°F\"]},{\"key\":\"C\",\"mappings\":{\"default\":{\"default\":\"coulombs\",\"singular\":\"coulomb\",\"dual\":\"\"}},\"names\":[\"C\",\"°C\"]},{\"key\":\"K\",\"mappings\":{\"default\":{\"default\":\"kelvins\",\"singular\":\"kelvin\",\"dual\":\"\"}},\"names\":[\"K\",\"°K\"]}]\n,\n\"fr/units/time.js\": \n[{\"locale\":\"fr\"},{\"key\":\"s\",\"mappings\":{\"default\":{\"default\":\"secondes\",\"singular\":\"seconde\",\"dual\":\"\"}},\"category\":\"time\",\"names\":[\"s\"]}]\n,\n\"fr/units/volume.js\": \n[{\"locale\":\"fr\"},{\"key\":\"bbl\",\"mappings\":{\"default\":{\"default\":\"barils\",\"singular\":\"baril\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"bbl.\",\"bbl\"]},{\"key\":\"gal\",\"mappings\":{\"default\":{\"default\":\"gallons\",\"singular\":\"gallon\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"gal\",\"gal.\"]},{\"key\":\"pt\",\"mappings\":{\"default\":{\"default\":\"pintes\",\"singular\":\"pinte\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"pt\",\"pt.\"]},{\"key\":\"qt\",\"mappings\":{\"default\":{\"default\":\"quarts\",\"singular\":\"quart\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"qt\",\"qt.\"]},{\"key\":\"tbsp\",\"mappings\":{\"default\":{\"default\":\"cuillères de table\",\"singular\":\"cuillèe de table\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"tbsp\",\"tbsp.\"]},{\"key\":\"tsp\",\"mappings\":{\"default\":{\"default\":\"cuillèes à thé\",\"singular\":\"cuillère à thé\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"tsp\",\"tsp.\"]},{\"key\":\"l\",\"mappings\":{\"default\":{\"default\":\"litres\",\"singular\":\"litre\",\"dual\":\"\"}},\"category\":\"volume\",\"names\":[\"l\"]}]\n,\n\"fr/units/weight.js\": \n[{\"locale\":\"fr\"},{\"key\":\"lb\",\"mappings\":{\"default\":{\"default\":\"livres\",\"singular\":\"livre\",\"dual\":\"\"}},\"names\":[\"lb\",\"lb.\"]},{\"key\":\"oz\",\"mappings\":{\"default\":{\"default\":\"onces\",\"singular\":\"oce\",\"dual\":\"\"}},\"names\":[\"oz\",\"oz.\"]},{\"key\":\"gr\",\"mappings\":{\"default\":{\"default\":\"grains\",\"singular\":\"grain\",\"dual\":\"\"}},\"names\":[\"g\",\"gr\"]},{\"key\":\"t\",\"mappings\":{\"default\":{\"default\":\"tonnes\",\"singular\":\"tonne\",\"dual\":\"\"}},\"names\":[\"t\",\"T\"]}]\n}\n\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/sre/mathmaps/nemeth.js",
    "content": "{\n\"nemeth/functions/algebra.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠙⠑⠛\"}},\"key\":\"deg\",\"names\":[\"deg\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠙⠑⠞\"}},\"key\":\"det\",\"names\":[\"det\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠙⠊⠍\"}},\"key\":\"dim\",\"names\":[\"dim\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠓⠕⠍\"}},\"key\":\"hom\",\"names\":[\"hom\",\"Hom\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠅⠑⠗\"}},\"key\":\"ker\",\"names\":[\"ker\"]},{\"category\":\"Algebra\",\"mappings\":{\"default\":{\"default\":\"⠠⠞⠗\"}},\"key\":\"Tr\",\"names\":[\"Tr\",\"tr\"]}]\n,\n\"nemeth/functions/elementary.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"⠇⠕⠏⠀\"}},\"key\":\"log\",\"names\":[\"log\"]},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"⠇⠝⠀\"}},\"key\":\"ln\",\"names\":[\"ln\"]},{\"category\":\"Logarithm\",\"mappings\":{\"default\":{\"default\":\"⠇⠛\"}},\"key\":\"lg\",\"names\":[\"lg\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"⠑⠭⠏\"}},\"key\":\"exp\",\"names\":[\"exp\",\"expt\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"⠛⠉⠙\"}},\"key\":\"gcd\",\"names\":[\"gcd\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"⠇⠉⠍\"}},\"key\":\"lcm\",\"names\":[\"lcm\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠛⠀\"}},\"key\":\"arg\",\"names\":[\"arg\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"⠊⠍\"}},\"key\":\"im\",\"names\":[\"im\"]},{\"category\":\"Complex\",\"mappings\":{\"default\":{\"default\":\"⠗⠑\"}},\"key\":\"re\",\"names\":[\"re\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠊⠝⠋⠀\"}},\"key\":\"inf\",\"names\":[\"inf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠇⠊⠍\"}},\"key\":\"lim\",\"names\":[\"lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠇⠊⠍⠊⠝⠀⠋\"}},\"key\":\"liminf\",\"names\":[\"lim inf\",\"liminf\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠇⠊⠍⠎⠥⠏\"}},\"key\":\"limsup\",\"names\":[\"lim sup\",\"limsup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠍⠁⠭⠀\"}},\"key\":\"max\",\"names\":[\"max\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠍⠊⠝⠀\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠎⠥⠏\"}},\"key\":\"sup\",\"names\":[\"sup\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠊⠝⠚⠇⠊⠍\"}},\"key\":\"injlim\",\"names\":[\"injlim\",\"inj lim\"]},{\"category\":\"Limits\",\"mappings\":{\"default\":{\"default\":\"⠏⠗⠕⠚⠇⠊⠍\"}},\"key\":\"projlim\",\"names\":[\"projlim\",\"proj lim\"]},{\"category\":\"Elementary\",\"mappings\":{\"default\":{\"default\":\"⠍⠕⠙\"}},\"key\":\"mod\",\"names\":[\"mod\"]},{\"category\":\"Probability\",\"mappings\":{\"default\":{\"default\":\"⠠⠏⠗\"}},\"key\":\"Pr\",\"names\":[\"Pr\"]}]\n,\n\"nemeth/functions/hyperbolic.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠉⠕⠎⠓⠀\"}},\"key\":\"cosh\",\"names\":[\"cosh\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠉⠕⠞⠓⠀\"}},\"key\":\"coth\",\"names\":[\"coth\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠉⠎⠉⠓⠀\"}},\"key\":\"csch\",\"names\":[\"csch\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠎⠑⠉⠓⠀\"}},\"key\":\"sech\",\"names\":[\"sech\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠎⠊⠝⠓⠀\"}},\"key\":\"sinh\",\"names\":[\"sinh\"]},{\"category\":\"Hyperbolic\",\"mappings\":{\"default\":{\"default\":\"⠞⠁⠕⠓⠀\"}},\"key\":\"tanh\",\"names\":[\"tanh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠕⠎⠓\"}},\"key\":\"arcosh\",\"names\":[\"arcosh\",\"arccosh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠕⠞⠓\"}},\"key\":\"arcoth\",\"names\":[\"arcoth\",\"arccoth\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠎⠉⠓\"}},\"key\":\"arcsch\",\"names\":[\"arcsch\",\"arccsch\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠎⠑⠉⠓⠀\"}},\"key\":\"arsech\",\"names\":[\"arsech\",\"arcsech\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠎⠊⠝⠓⠀\"}},\"key\":\"arsinh\",\"names\":[\"arsinh\",\"arcsinh\"]},{\"category\":\"Area\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠞⠁⠕⠓⠀\"}},\"key\":\"artanh\",\"names\":[\"artanh\",\"arctanh\"]}]\n,\n\"nemeth/functions/trigonometry.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠉⠕⠎⠀\"}},\"key\":\"cos\",\"names\":[\"cos\",\"cosine\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠉⠕⠞⠀\"}},\"key\":\"cot\",\"names\":[\"cot\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠉⠎⠉⠀\"}},\"key\":\"csc\",\"names\":[\"csc\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠎⠑⠉⠀\"}},\"key\":\"sec\",\"names\":[\"sec\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠎⠊⠝⠀\"}},\"key\":\"sin\",\"names\":[\"sin\",\"sine\"]},{\"category\":\"Trigonometric\",\"mappings\":{\"default\":{\"default\":\"⠞⠁⠝⠀\"}},\"key\":\"tan\",\"names\":[\"tan\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠉⠕⠎⠀\"}},\"key\":\"arccos\",\"names\":[\"arccos\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠉⠕⠞⠀\"}},\"key\":\"arccot\",\"names\":[\"arccot\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠉⠎⠉⠀\"}},\"key\":\"arccsc\",\"names\":[\"arccsc\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠎⠑⠉⠀\"}},\"key\":\"arcsec\",\"names\":[\"arcsec\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠎⠊⠝⠀\"}},\"key\":\"arcsin\",\"names\":[\"arcsin\"]},{\"category\":\"Cyclometric\",\"mappings\":{\"default\":{\"default\":\"⠁⠗⠉⠀⠞⠁⠝⠀\"}},\"key\":\"arctan\",\"names\":[\"arctan\"]}]\n,\n\"nemeth/symbols/digits_rest.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠲⠼\"}},\"key\":\"00BC\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠆⠼\"}},\"key\":\"00BD\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠒⠌⠲⠼\"}},\"key\":\"00BE\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠶⠼\"}},\"key\":\"2150\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠔⠼\"}},\"key\":\"2151\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠂⠴⠼\"}},\"key\":\"2152\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠒⠼\"}},\"key\":\"2153\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠆⠌⠒⠼\"}},\"key\":\"2154\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠢⠼\"}},\"key\":\"2155\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠆⠌⠢⠼\"}},\"key\":\"2156\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠒⠌⠢⠼\"}},\"key\":\"2157\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠲⠌⠢⠼\"}},\"key\":\"2158\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠖⠼\"}},\"key\":\"2159\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠢⠌⠖⠼\"}},\"key\":\"215A\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠦⠼\"}},\"key\":\"215B\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠒⠌⠦⠼\"}},\"key\":\"215C\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠢⠌⠦⠼\"}},\"key\":\"215D\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠶⠌⠦⠼\"}},\"key\":\"215E\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠂⠌⠼\"}},\"key\":\"215F\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠹⠴⠌⠒⠼\"}},\"key\":\"2189\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠂⠴⠻⠻\"}},\"key\":\"3248\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠆⠴⠻⠻\"}},\"key\":\"3249\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠒⠴⠻⠻\"}},\"key\":\"324A\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠲⠴⠻⠻\"}},\"key\":\"324B\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠢⠴⠻⠻\"}},\"key\":\"324C\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠖⠴⠻⠻\"}},\"key\":\"324D\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠶⠴⠻⠻\"}},\"key\":\"324E\"},{\"category\":\"No\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲⠸⠫⠫⠉⠸⠫⠼⠦⠴⠻⠻\"}},\"key\":\"324F\"}]\n,\n\"nemeth/symbols/greek-rest.js\": \n[{\"locale\":\"nemeth\"}]\n,\n\"nemeth/symbols/greek-scripts.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"key\":\"1D26\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D27\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D28\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D29\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D2A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠁⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D5E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠢⠑⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D60\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠴⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D66\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠖⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D67\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠶⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D68\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠦⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D69\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠔⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D6A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠁⠄\"}}}]\n,\n\"nemeth/symbols/greek-symbols.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠙⠴⠄\"}},\"key\":\"03D0\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠙⠶⠄\"}},\"key\":\"03D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠋⠖⠄\"}},\"key\":\"03F6\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠙⠶⠉⠁⠄\"}},\"key\":\"1D7CA\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠙⠶⠉⠃⠄\"}},\"key\":\"1D7CB\"}]\n,\n\"nemeth/symbols/hebrew_letters.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠢⠄\"}},\"key\":\"2135\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠖⠄\"}},\"key\":\"2136\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠶⠄\"}},\"key\":\"2137\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠦⠄\"}},\"key\":\"2138\"}]\n,\n\"nemeth/symbols/latin-lower-double-accent.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"key\":\"01D6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"01D8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"01DA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"01DC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"01DF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"01E1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"01ED\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"01FB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"022B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"022D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"0231\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E09\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E15\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E17\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E1D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E2F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E39\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E4D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E4F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E51\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E53\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E5D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E65\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E67\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E69\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E79\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E7B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EA5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EA7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EA9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EAB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EAD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EAF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EB1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EB3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EB5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EB7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EBF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EC1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EC3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EC5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EC7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ED1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ED3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ED5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ED7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ED9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EDB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EDD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EDF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EE1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EE3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EE9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EEB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EED\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EEF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EF1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠂⠄\"}}}]\n,\n\"nemeth/symbols/latin-lower-phonetic.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"key\":\"00F8\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"0111\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0127\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0142\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0167\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0180\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"019B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"01B6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"01BE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"01E5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"01FF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"023C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"0247\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0249\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"024D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"024F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"025F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0268\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"0284\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D13\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D7C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D7D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D7F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E9C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E9D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"018D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E9B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E9F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0138\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"017F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0183\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0185\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0188\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"018C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠦⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"0192\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0195\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0199\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"019A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"019E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠔⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"01A1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"01A3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"01A5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"01A8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"01AA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"01AB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"01AD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠁⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"01B0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"01B4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"01B9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"01BA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"01BD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"01BF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠃⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"01C6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"01C9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"01CC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"01E3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"01EF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"01F3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"01DD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"01FD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"021D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"0221\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0223\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0225\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0234\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"0235\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0236\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0238\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"0239\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"023F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0240\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0242\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"024B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠲⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"0250\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0251\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0252\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0253\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0254\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"0255\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0256\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0257\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0258\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"0259\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"025A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"025B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"025C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"025D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"025E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠢⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"0260\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0261\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0263\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0264\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"0265\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0266\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0267\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0269\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"026B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"026C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"026D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"026E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"026F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠖⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0270\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0271\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0272\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0273\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0275\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0277\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0278\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"0279\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"027A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"027B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"027C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"027D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"027E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"027F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠶⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0282\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0283\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0285\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0286\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0287\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0288\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"0289\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"028A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"028B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"028C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"028D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"028E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠦⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"0290\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0291\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0292\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"0293\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0295\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0296\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0297\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0298\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"029A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"029E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠔⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"02A9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"02AF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠁⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D02\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠴⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D08\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠴⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D09\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠴⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D11\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D12\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D14\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D16\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D17\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D1D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D1E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D1F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠂⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D24\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D25\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠆⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D6B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D6C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D6D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D6E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D6F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D70\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D71\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D72\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D73\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D74\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D75\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D76\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D77\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D79\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D7A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠶⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D80\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D81\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D82\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D83\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D84\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D85\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D86\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D87\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D88\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D89\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D8F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠦⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D90\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D91\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D92\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D93\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D94\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D95\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D96\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D97\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D98\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D99\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1D9A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠔⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"0149\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"014B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠃⠄\"}}}]\n,\n\"nemeth/symbols/latin-lower-single-accent.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"key\":\"00E0\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E1\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E2\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E3\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E4\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E5\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}}},{\"category\":\"Ll\",\"key\":\"00E7\",\"mappings\":{\"default\":{\"default\":\"⠈⠉\"}}},{\"category\":\"Ll\",\"key\":\"00E8\",\"mappings\":{\"default\":{\"default\":\"⠈⠑\"}}},{\"category\":\"Ll\",\"key\":\"00E9\",\"mappings\":{\"default\":{\"default\":\"⠈⠑\"}}},{\"category\":\"Ll\",\"key\":\"00EA\",\"mappings\":{\"default\":{\"default\":\"⠈⠑\"}}},{\"category\":\"Ll\",\"key\":\"00EB\",\"mappings\":{\"default\":{\"default\":\"⠈⠑\"}}},{\"category\":\"Ll\",\"key\":\"00EC\",\"mappings\":{\"default\":{\"default\":\"⠈⠊\"}}},{\"category\":\"Ll\",\"key\":\"00ED\",\"mappings\":{\"default\":{\"default\":\"⠈⠊\"}}},{\"category\":\"Ll\",\"key\":\"00EE\",\"mappings\":{\"default\":{\"default\":\"⠈⠊\"}}},{\"category\":\"Ll\",\"key\":\"00EF\",\"mappings\":{\"default\":{\"default\":\"⠈⠊\"}}},{\"category\":\"Ll\",\"key\":\"00F1\",\"mappings\":{\"default\":{\"default\":\"⠈⠝\"}}},{\"category\":\"Ll\",\"key\":\"00F2\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"00F3\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"00F4\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"00F5\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"00F6\",\"mappings\":{\"default\":{\"default\":\"⠈⠕\"}}},{\"category\":\"Ll\",\"key\":\"00F9\",\"mappings\":{\"default\":{\"default\":\"⠈⠥\"}}},{\"category\":\"Ll\",\"key\":\"00FA\",\"mappings\":{\"default\":{\"default\":\"⠈⠥\"}}},{\"category\":\"Ll\",\"key\":\"00FB\",\"mappings\":{\"default\":{\"default\":\"⠈⠥\"}}},{\"category\":\"Ll\",\"key\":\"00FC\",\"mappings\":{\"default\":{\"default\":\"⠈⠥\"}}},{\"category\":\"Ll\",\"key\":\"00FD\",\"mappings\":{\"default\":{\"default\":\"⠈⠽\"}}},{\"category\":\"Ll\",\"key\":\"00FF\",\"mappings\":{\"default\":{\"default\":\"⠈⠽\"}}},{\"category\":\"Ll\",\"key\":\"0101\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0103\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0105\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0107\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0109\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"010B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"010D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"010F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0113\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0115\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0117\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0119\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"011B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"011D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"011F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0121\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0123\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0125\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0129\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"012B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"012D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"012F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0131\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0135\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0137\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"013A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"013C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"013E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"0140\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"0144\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"0146\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"0148\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"014D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"014F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0151\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0155\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0157\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0159\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"015B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"015D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"015F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0161\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0163\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0165\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0169\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"016B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"016D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"016F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0171\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0173\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0175\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0177\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"017A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"017C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠉⠄\"}}},{\"category\":\"Ll\",\"key\":\"017E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"01CE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠑⠄\"}}},{\"category\":\"Ll\",\"key\":\"01D0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"01D2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠆⠄\"}}},{\"category\":\"Ll\",\"key\":\"01D4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠲⠄\"}}},{\"category\":\"Ll\",\"key\":\"01E7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"01E9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"01EB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"01F0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠴⠄\"}}},{\"category\":\"Ll\",\"key\":\"01F5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"01F9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"0201\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0203\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0205\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0207\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0209\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"020B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"020D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"020F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0211\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"0213\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0215\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"0217\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0219\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"021B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"021F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0227\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"0229\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"022F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"0233\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"0237\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E01\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E03\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E05\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E07\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E0B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E0D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E0F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E11\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E13\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E19\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E1B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E1F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E21\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E23\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E25\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E27\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E29\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E2B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E2D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E31\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E33\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E35\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E37\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E3B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E3D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E3F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E41\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E43\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E45\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E47\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E49\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E4B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E55\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E57\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E59\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E5B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E5F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E61\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E63\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E6B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E6D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E6F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E71\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E73\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E75\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E77\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E7D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E7F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E81\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E83\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E85\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E87\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E89\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E8B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E8D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E8F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E91\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E93\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E95\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E96\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠖⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E97\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E98\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠦⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E99\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1E9A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠁⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EA1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠂⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EA3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EB9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EBB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EBD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EC9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠔⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ECB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠃⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ECD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠙⠄\"}}},{\"category\":\"Ll\",\"key\":\"1ECF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠋⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EE5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EE7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EF3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠒⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EF5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠢⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EF7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠶⠄\"}}},{\"category\":\"Ll\",\"key\":\"1EF9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠔⠄\"}}}]\n,\n\"nemeth/symbols/latin-rest.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Mn\",\"key\":\"0363\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠒⠄\"}}},{\"category\":\"Mn\",\"key\":\"0364\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠲⠄\"}}},{\"category\":\"Mn\",\"key\":\"0365\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠢⠄\"}}},{\"category\":\"Mn\",\"key\":\"0366\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠖⠄\"}}},{\"category\":\"Mn\",\"key\":\"0367\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠶⠄\"}}},{\"category\":\"Mn\",\"key\":\"0368\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠦⠄\"}}},{\"category\":\"Mn\",\"key\":\"0369\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠔⠄\"}}},{\"category\":\"Mn\",\"key\":\"036A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠁⠄\"}}},{\"category\":\"Mn\",\"key\":\"036B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠃⠄\"}}},{\"category\":\"Mn\",\"key\":\"036C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠉⠄\"}}},{\"category\":\"Mn\",\"key\":\"036D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠙⠄\"}}},{\"category\":\"Mn\",\"key\":\"036E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠑⠄\"}}},{\"category\":\"Mn\",\"key\":\"036F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠒⠖⠋⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D62\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠆⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D63\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠒⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D64\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠲⠄\"}}},{\"category\":\"Lm\",\"key\":\"1D65\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠖⠢⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DCA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠉⠁⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠒⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠲⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠢⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠖⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠶⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠦⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DD9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠔⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠁⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠃⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠉⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠙⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠑⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DDF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠙⠋⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠴⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠂⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠆⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠒⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠲⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠢⠄\"}}},{\"category\":\"Mn\",\"key\":\"1DE6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠙⠑⠖⠄\"}}},{\"category\":\"Lm\",\"key\":\"2071\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠂⠄\"}}},{\"category\":\"Lm\",\"key\":\"207F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠋⠄\"}}},{\"category\":\"Lm\",\"key\":\"2090\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠴⠄\"}}},{\"category\":\"Lm\",\"key\":\"2091\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠂⠄\"}}},{\"category\":\"Lm\",\"key\":\"2092\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠆⠄\"}}},{\"category\":\"Lm\",\"key\":\"2093\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠒⠄\"}}},{\"category\":\"Lm\",\"key\":\"2094\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠲⠄\"}}},{\"category\":\"Lm\",\"key\":\"2095\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠢⠄\"}}},{\"category\":\"Lm\",\"key\":\"2096\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠖⠄\"}}},{\"category\":\"Lm\",\"key\":\"2097\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠶⠄\"}}},{\"category\":\"Lm\",\"key\":\"2098\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠦⠄\"}}},{\"category\":\"Lm\",\"key\":\"2099\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠔⠄\"}}},{\"category\":\"Lm\",\"key\":\"209A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠁⠄\"}}},{\"category\":\"Lm\",\"key\":\"209B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠃⠄\"}}},{\"category\":\"Lm\",\"key\":\"209C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠔⠉⠄\"}}},{\"category\":\"Lm\",\"key\":\"2C7C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠉⠶⠉⠄\"}}},{\"category\":\"So\",\"key\":\"1F12A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠋⠂⠆⠁⠄\"}}},{\"category\":\"So\",\"key\":\"1F12B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠋⠂⠆⠃⠄\"}}},{\"category\":\"So\",\"key\":\"1F12C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠋⠂⠆⠉⠄\"}}},{\"category\":\"So\",\"key\":\"1F18A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠋⠂⠦⠁⠄\"}}}]\n,\n\"nemeth/symbols/latin-upper-double-accent.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Lu\",\"key\":\"01D5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠢⠄\"}}},{\"category\":\"Lu\",\"key\":\"01D7\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠶⠄\"}}},{\"category\":\"Lu\",\"key\":\"01D9\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠔⠄\"}}},{\"category\":\"Lu\",\"key\":\"01DB\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠃⠄\"}}},{\"category\":\"Lu\",\"key\":\"01DE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"01E0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"01EC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"01FA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"022A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"022C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"0230\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E08\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E14\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E16\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E1C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E2E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E38\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E4C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E4E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E50\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E52\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E5C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E64\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E66\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E68\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E78\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E7A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EA4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EA6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EA8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EAA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EAC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EAE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EB0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EB2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EB4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EB6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EBE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EC0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EC2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EC4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EC6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ED0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ED2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ED4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ED6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ED8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EDA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EDC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EDE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠙⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EE0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EE2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EE8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EEA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EEC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EEE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EF0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠴⠄\"}}}]\n,\n\"nemeth/symbols/latin-upper-single-accent.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Lu\",\"key\":\"00C0\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C1\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C2\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C3\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C4\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C5\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠁\"}}},{\"category\":\"Lu\",\"key\":\"00C7\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠉\"}}},{\"category\":\"Lu\",\"key\":\"00C8\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠑\"}}},{\"category\":\"Lu\",\"key\":\"00C9\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠑\"}}},{\"category\":\"Lu\",\"key\":\"00CA\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠑\"}}},{\"category\":\"Lu\",\"key\":\"00CB\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠑\"}}},{\"category\":\"Lu\",\"key\":\"00CC\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠊\"}}},{\"category\":\"Lu\",\"key\":\"00CD\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠊\"}}},{\"category\":\"Lu\",\"key\":\"00CE\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠊\"}}},{\"category\":\"Lu\",\"key\":\"00CF\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠊\"}}},{\"category\":\"Lu\",\"key\":\"00D1\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠝\"}}},{\"category\":\"Lu\",\"key\":\"00D2\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠕\"}}},{\"category\":\"Lu\",\"key\":\"00D3\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠕\"}}},{\"category\":\"Lu\",\"key\":\"00D4\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠕\"}}},{\"category\":\"Lu\",\"key\":\"00D5\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠙⠢⠄\"}}},{\"category\":\"Lu\",\"key\":\"00D6\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠕\"}}},{\"category\":\"Lu\",\"key\":\"00D9\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠥\"}}},{\"category\":\"Lu\",\"key\":\"00DA\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠥\"}}},{\"category\":\"Lu\",\"key\":\"00DB\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠥\"}}},{\"category\":\"Lu\",\"key\":\"00DC\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠥\"}}},{\"category\":\"Lu\",\"key\":\"00DD\",\"mappings\":{\"default\":{\"default\":\"⠠⠈⠽\"}}},{\"category\":\"Lu\",\"key\":\"0100\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0102\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0104\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0106\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0108\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"010A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"010C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"010E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠴⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0112\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0114\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0116\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0118\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"011A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"011C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"011E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠂⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0120\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0122\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0124\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0128\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"012A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"012C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"012E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠆⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0130\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0134\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0136\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0139\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠔⠄\"}}},{\"category\":\"Lu\",\"key\":\"013B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠃⠄\"}}},{\"category\":\"Lu\",\"key\":\"013D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠙⠄\"}}},{\"category\":\"Lu\",\"key\":\"013F\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠒⠋⠄\"}}},{\"category\":\"Lu\",\"key\":\"0143\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠒⠄\"}}},{\"category\":\"Lu\",\"key\":\"0145\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠢⠄\"}}},{\"category\":\"Lu\",\"key\":\"0147\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠶⠄\"}}},{\"category\":\"Lu\",\"key\":\"014C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"014E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠲⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0150\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0154\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0156\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0158\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"015A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"015C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"015E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠢⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0160\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0162\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0164\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0168\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"016A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"016C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"016E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠖⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0170\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0172\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0174\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0176\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0178\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"0179\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠔⠄\"}}},{\"category\":\"Lu\",\"key\":\"017B\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠃⠄\"}}},{\"category\":\"Lu\",\"key\":\"017D\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠶⠙⠄\"}}},{\"category\":\"Lu\",\"key\":\"01CD\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠙⠄\"}}},{\"category\":\"Lu\",\"key\":\"01CF\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠉⠋⠄\"}}},{\"category\":\"Lu\",\"key\":\"01D1\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠂⠄\"}}},{\"category\":\"Lu\",\"key\":\"01D3\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠙⠒⠄\"}}},{\"category\":\"Lu\",\"key\":\"01E6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"01E8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"01EA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠑⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"01F4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"01F8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠂⠋⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"0200\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0202\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0204\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0206\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0208\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"020A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"020C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"020E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠴⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0210\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"0212\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"0214\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"0216\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0218\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"021A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"021E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠂⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0226\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"0228\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"022E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠆⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"0232\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠒⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E00\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E02\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E04\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E06\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E0A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E0C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E0E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠴⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E10\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E12\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E18\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E1A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E1E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠂⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E20\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E22\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E24\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E26\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E28\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E2A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E2C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠆⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E30\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E32\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E34\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E36\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E3A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E3C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E3E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠒⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E40\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E42\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E44\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E46\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E48\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E4A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠲⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E54\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E56\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E58\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E5A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E5E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠢⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E60\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E62\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E6A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E6C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E6E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠖⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E70\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E72\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E74\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E76\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E7C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E7E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠶⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E80\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E82\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E84\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E86\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E88\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E8A\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E8C\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E8E\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠦⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E90\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E92\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1E94\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠔⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EA0\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠴⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EA2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠁⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EB8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EBA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EBC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠃⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EC8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠦⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ECA\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠁⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ECC\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠉⠄\"}}},{\"category\":\"Lu\",\"key\":\"1ECE\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠉⠑⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EE4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EE6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠑⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EF2\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠆⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EF4\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠲⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EF6\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠖⠄\"}}},{\"category\":\"Lu\",\"key\":\"1EF8\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠂⠑⠋⠦⠄\"}}}]\n,\n\"nemeth/symbols/math_angles.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠑⠄\"}},\"key\":\"22BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠶⠉⠄\"}},\"key\":\"237C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠴⠄\"}},\"key\":\"27C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠃⠄\"}},\"key\":\"299B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠉⠄\"}},\"key\":\"299C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠙⠄\"}},\"key\":\"299D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠑⠄\"}},\"key\":\"299E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠋⠄\"}},\"key\":\"299F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠴⠄\"}},\"key\":\"29A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠂⠄\"}},\"key\":\"29A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠆⠄\"}},\"key\":\"29A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠒⠄\"}},\"key\":\"29A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠲⠄\"}},\"key\":\"29A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠢⠄\"}},\"key\":\"29A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠖⠄\"}},\"key\":\"29A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠶⠄\"}},\"key\":\"29A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠦⠄\"}},\"key\":\"29A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠔⠄\"}},\"key\":\"29A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠁⠄\"}},\"key\":\"29AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠃⠄\"}},\"key\":\"29AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠉⠄\"}},\"key\":\"29AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠙⠄\"}},\"key\":\"29AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠑⠄\"}},\"key\":\"29AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠁⠋⠄\"}},\"key\":\"29AF\"}]\n,\n\"nemeth/symbols/math_arrows.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠀\"}},\"key\":\"2190\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠀\"}},\"key\":\"2191\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠕⠀\"}},\"key\":\"2192\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠒⠕⠀\"}},\"key\":\"2193\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠕⠀\"}},\"key\":\"2194\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠩⠪⠒⠒⠕⠀\"}},\"key\":\"2195\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠘⠪⠒⠒⠀\"}},\"key\":\"2196\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠘⠒⠒⠕⠀\"}},\"key\":\"2197\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠰⠒⠒⠕⠀\"}},\"key\":\"2198\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠰⠪⠒⠒⠀\"}},\"key\":\"2199\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠒⠒⠻⠀\"}},\"key\":\"219A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠒⠒⠕⠻⠀\"}},\"key\":\"219B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠔⠒⠢⠀\"}},\"key\":\"219C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠔⠒⠢⠕⠀\"}},\"key\":\"219D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠪⠒⠒⠀\"}},\"key\":\"219E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠕⠀\"}},\"key\":\"219F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠕⠀\"}},\"key\":\"21A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠒⠕⠕⠀\"}},\"key\":\"21A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠠⠽⠀\"}},\"key\":\"21A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠠⠯⠒⠒⠕⠀\"}},\"key\":\"21A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠳⠀\"}},\"key\":\"21A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠳⠒⠒⠕⠀\"}},\"key\":\"21A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠳⠒⠒⠕⠀\"}},\"key\":\"21A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠳⠒⠒⠕⠀\"}},\"key\":\"21A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠳⠒⠕⠀\"}},\"key\":\"21A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠠⠕⠀\"}},\"key\":\"21A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠠⠪⠒⠒⠕⠀\"}},\"key\":\"21AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠨⠡⠀\"}},\"key\":\"21AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠨⠡⠒⠒⠕⠀\"}},\"key\":\"21AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠔⠒⠢⠕⠀\"}},\"key\":\"21AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠒⠒⠕⠀\"}},\"key\":\"21AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠔⠢⠔⠀\"}},\"key\":\"21AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠴⠄\"}},\"key\":\"21B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠂⠄\"}},\"key\":\"21B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠆⠄\"}},\"key\":\"21B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠒⠄\"}},\"key\":\"21B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠠⠳⠒⠒⠕⠀\"}},\"key\":\"21B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠠⠳⠒⠒⠕⠀\"}},\"key\":\"21B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠢⠔⠀⠕⠀\"}},\"key\":\"21B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠢⠀⠔⠀\"}},\"key\":\"21B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠦⠄\"}},\"key\":\"21B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠃⠔⠄\"}},\"key\":\"21B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠢⠔⠕⠀\"}},\"key\":\"21BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠢⠔⠀\"}},\"key\":\"21BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠫⠪⠒⠒⠀\"}},\"key\":\"21C4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠐⠫⠩⠒⠒⠕⠀\"}},\"key\":\"21C5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠫⠒⠒⠕⠀\"}},\"key\":\"21C6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠚⠒⠒⠫⠚⠒⠒⠀\"}},\"key\":\"21C7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠐⠫⠣⠒⠒⠕⠀\"}},\"key\":\"21C8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠫⠒⠒⠕⠀\"}},\"key\":\"21C9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠒⠕⠐⠫⠩⠒⠒⠕⠀\"}},\"key\":\"21CA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠪⠒⠒⠀\"}},\"key\":\"21CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠪⠒⠒⠕⠕⠀\"}},\"key\":\"21CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠒⠒⠕⠕⠀\"}},\"key\":\"21CF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠪⠒⠒⠀\"}},\"key\":\"21D0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠕⠀\"}},\"key\":\"21D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠕⠀\"}},\"key\":\"21D2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠕⠕⠀\"}},\"key\":\"21D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠪⠒⠒⠕⠕⠀\"}},\"key\":\"21D4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠪⠪⠒⠒⠕⠕⠀\"}},\"key\":\"21D5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠘⠪⠪⠒⠒⠀\"}},\"key\":\"21D6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠘⠒⠒⠕⠕⠀\"}},\"key\":\"21D7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠰⠒⠒⠕⠕⠀\"}},\"key\":\"21D8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠰⠪⠪⠒⠒⠀\"}},\"key\":\"21D9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠪⠪⠒⠒⠀\"}},\"key\":\"21DA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠕⠕⠀\"}},\"key\":\"21DB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠢⠤⠔⠒⠢⠀\"}},\"key\":\"21DC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠢⠤⠔⠒⠢⠕⠀\"}},\"key\":\"21DD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠳⠈⠫⠣⠒⠒⠕⠻⠀\"}},\"key\":\"21DE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠳⠈⠫⠩⠒⠒⠕⠻⠀\"}},\"key\":\"21DF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠀⠒⠀\"}},\"key\":\"21E0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠀⠒⠕⠀\"}},\"key\":\"21E1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠀⠒⠕⠀\"}},\"key\":\"21E2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠀⠒⠕⠀\"}},\"key\":\"21E3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠳⠪⠒⠒⠀\"}},\"key\":\"21E4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠳⠀\"}},\"key\":\"21E5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠸⠪⠒⠒⠀\"}},\"key\":\"21E6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠸⠒⠒⠕⠀\"}},\"key\":\"21E7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠸⠒⠒⠕⠀\"}},\"key\":\"21E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠸⠒⠒⠕⠀\"}},\"key\":\"21E9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠁⠄\"}},\"key\":\"21EA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠃⠄\"}},\"key\":\"21EB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠉⠄\"}},\"key\":\"21EC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠙⠄\"}},\"key\":\"21ED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠑⠄\"}},\"key\":\"21EE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠑⠋⠄\"}},\"key\":\"21EF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠋⠴⠄\"}},\"key\":\"21F0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠋⠂⠄\"}},\"key\":\"21F1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠋⠆⠄\"}},\"key\":\"21F2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠸⠪⠒⠒⠕⠀\"}},\"key\":\"21F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠨⠡⠀\"}},\"key\":\"21F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠒⠕⠐⠫⠣⠒⠒⠕⠀\"}},\"key\":\"21F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠕⠫⠒⠒⠕⠫⠒⠒⠕⠀\"}},\"key\":\"21F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠒⠒⠻⠀\"}},\"key\":\"21F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠒⠒⠕⠻⠀\"}},\"key\":\"21F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠈⠫⠪⠒⠒⠕⠀\"}},\"key\":\"21F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠳⠈⠫⠪⠒⠒⠻⠀\"}},\"key\":\"21FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠳⠈⠫⠒⠒⠕⠻⠀\"}},\"key\":\"21FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠳⠳⠈⠫⠪⠒⠒⠕⠀\"}},\"key\":\"21FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠳⠒⠒⠀\"}},\"key\":\"21FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠳⠀\"}},\"key\":\"21FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠳⠒⠒⠳⠀\"}},\"key\":\"21FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠂⠄\"}},\"key\":\"2301\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠒⠄\"}},\"key\":\"2303\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠲⠄\"}},\"key\":\"2304\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠆⠲⠄\"}},\"key\":\"2324\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠦⠃⠄\"}},\"key\":\"238B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠲⠄\"}},\"key\":\"2794\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠦⠄\"}},\"key\":\"2798\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠔⠄\"}},\"key\":\"2799\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠁⠄\"}},\"key\":\"279A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠃⠄\"}},\"key\":\"279B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠉⠄\"}},\"key\":\"279C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠙⠄\"}},\"key\":\"279D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠑⠄\"}},\"key\":\"279E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠋⠄\"}},\"key\":\"279F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠴⠄\"}},\"key\":\"27A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠂⠄\"}},\"key\":\"27A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠆⠄\"}},\"key\":\"27A2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠒⠄\"}},\"key\":\"27A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠲⠄\"}},\"key\":\"27A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠢⠄\"}},\"key\":\"27A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠖⠄\"}},\"key\":\"27A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠶⠄\"}},\"key\":\"27A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠦⠄\"}},\"key\":\"27A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠔⠄\"}},\"key\":\"27A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠁⠄\"}},\"key\":\"27AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠃⠄\"}},\"key\":\"27AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠉⠄\"}},\"key\":\"27AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠙⠄\"}},\"key\":\"27AD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠑⠄\"}},\"key\":\"27AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠁⠋⠄\"}},\"key\":\"27AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠂⠄\"}},\"key\":\"27B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠆⠄\"}},\"key\":\"27B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠒⠄\"}},\"key\":\"27B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠲⠄\"}},\"key\":\"27B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠢⠄\"}},\"key\":\"27B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠖⠄\"}},\"key\":\"27B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠶⠄\"}},\"key\":\"27B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠦⠄\"}},\"key\":\"27B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠔⠄\"}},\"key\":\"27B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠁⠄\"}},\"key\":\"27BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠃⠄\"}},\"key\":\"27BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠉⠄\"}},\"key\":\"27BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠙⠄\"}},\"key\":\"27BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠑⠄\"}},\"key\":\"27BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠴⠄\"}},\"key\":\"27F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠂⠄\"}},\"key\":\"27F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠆⠄\"}},\"key\":\"27F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠒⠄\"}},\"key\":\"27F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠲⠄\"}},\"key\":\"27F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠢⠄\"}},\"key\":\"27F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠖⠄\"}},\"key\":\"27F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠶⠄\"}},\"key\":\"27F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠦⠄\"}},\"key\":\"27F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠔⠄\"}},\"key\":\"27F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠁⠄\"}},\"key\":\"27FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠃⠄\"}},\"key\":\"27FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠉⠄\"}},\"key\":\"27FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠙⠄\"}},\"key\":\"27FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠑⠄\"}},\"key\":\"27FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠋⠋⠄\"}},\"key\":\"27FF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠴⠄\"}},\"key\":\"2900\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠂⠄\"}},\"key\":\"2901\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠆⠄\"}},\"key\":\"2902\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠒⠄\"}},\"key\":\"2903\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠲⠄\"}},\"key\":\"2904\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠢⠄\"}},\"key\":\"2905\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠖⠄\"}},\"key\":\"2906\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠶⠄\"}},\"key\":\"2907\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠦⠄\"}},\"key\":\"2908\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠔⠄\"}},\"key\":\"2909\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠁⠄\"}},\"key\":\"290A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠃⠄\"}},\"key\":\"290B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠉⠄\"}},\"key\":\"290C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠙⠄\"}},\"key\":\"290D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠑⠄\"}},\"key\":\"290E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠴⠋⠄\"}},\"key\":\"290F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠴⠄\"}},\"key\":\"2910\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠂⠄\"}},\"key\":\"2911\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠆⠄\"}},\"key\":\"2912\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠒⠄\"}},\"key\":\"2913\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠲⠄\"}},\"key\":\"2914\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠢⠄\"}},\"key\":\"2915\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠖⠄\"}},\"key\":\"2916\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠶⠄\"}},\"key\":\"2917\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠦⠄\"}},\"key\":\"2918\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠔⠄\"}},\"key\":\"2919\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠁⠄\"}},\"key\":\"291A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠃⠄\"}},\"key\":\"291B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠉⠄\"}},\"key\":\"291C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠙⠄\"}},\"key\":\"291D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠑⠄\"}},\"key\":\"291E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠂⠋⠄\"}},\"key\":\"291F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠴⠄\"}},\"key\":\"2920\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠂⠄\"}},\"key\":\"2921\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠆⠄\"}},\"key\":\"2922\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠒⠄\"}},\"key\":\"2923\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠲⠄\"}},\"key\":\"2924\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠢⠄\"}},\"key\":\"2925\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠖⠄\"}},\"key\":\"2926\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠶⠄\"}},\"key\":\"2927\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠦⠄\"}},\"key\":\"2928\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠔⠄\"}},\"key\":\"2929\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠁⠄\"}},\"key\":\"292A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠙⠄\"}},\"key\":\"292D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠑⠄\"}},\"key\":\"292E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠋⠄\"}},\"key\":\"292F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠴⠄\"}},\"key\":\"2930\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠂⠄\"}},\"key\":\"2931\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠆⠄\"}},\"key\":\"2932\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠒⠄\"}},\"key\":\"2933\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠲⠄\"}},\"key\":\"2934\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠢⠄\"}},\"key\":\"2935\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠖⠄\"}},\"key\":\"2936\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠶⠄\"}},\"key\":\"2937\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠦⠄\"}},\"key\":\"2938\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠔⠄\"}},\"key\":\"2939\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠁⠄\"}},\"key\":\"293A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠃⠄\"}},\"key\":\"293B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠉⠄\"}},\"key\":\"293C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠙⠄\"}},\"key\":\"293D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠑⠄\"}},\"key\":\"293E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠒⠋⠄\"}},\"key\":\"293F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠴⠄\"}},\"key\":\"2940\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠂⠄\"}},\"key\":\"2941\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠆⠄\"}},\"key\":\"2942\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠒⠄\"}},\"key\":\"2943\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠲⠄\"}},\"key\":\"2944\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠢⠄\"}},\"key\":\"2945\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠖⠄\"}},\"key\":\"2946\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠶⠄\"}},\"key\":\"2947\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠦⠄\"}},\"key\":\"2948\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠔⠄\"}},\"key\":\"2949\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠴⠄\"}},\"key\":\"2970\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠂⠄\"}},\"key\":\"2971\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠆⠄\"}},\"key\":\"2972\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠒⠄\"}},\"key\":\"2973\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠲⠄\"}},\"key\":\"2974\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠢⠄\"}},\"key\":\"2975\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠖⠄\"}},\"key\":\"2976\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠶⠄\"}},\"key\":\"2977\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠦⠄\"}},\"key\":\"2978\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠔⠄\"}},\"key\":\"2979\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠁⠄\"}},\"key\":\"297A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠃⠄\"}},\"key\":\"297B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠒⠄\"}},\"key\":\"29B3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠲⠄\"}},\"key\":\"29B4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠙⠄\"}},\"key\":\"29BD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠁⠄\"}},\"key\":\"29EA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠉⠄\"}},\"key\":\"29EC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠙⠄\"}},\"key\":\"29ED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠶⠄\"}},\"key\":\"2A17\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠴⠄\"}},\"key\":\"2B00\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠂⠄\"}},\"key\":\"2B01\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠆⠄\"}},\"key\":\"2B02\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠒⠄\"}},\"key\":\"2B03\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠲⠄\"}},\"key\":\"2B04\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠢⠄\"}},\"key\":\"2B05\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠖⠄\"}},\"key\":\"2B06\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠶⠄\"}},\"key\":\"2B07\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠦⠄\"}},\"key\":\"2B08\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠔⠄\"}},\"key\":\"2B09\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠁⠄\"}},\"key\":\"2B0A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠃⠄\"}},\"key\":\"2B0B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠉⠄\"}},\"key\":\"2B0C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠙⠄\"}},\"key\":\"2B0D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠑⠄\"}},\"key\":\"2B0E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠴⠋⠄\"}},\"key\":\"2B0F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠴⠄\"}},\"key\":\"2B10\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠂⠄\"}},\"key\":\"2B11\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠴⠄\"}},\"key\":\"2B30\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠂⠄\"}},\"key\":\"2B31\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠆⠄\"}},\"key\":\"2B32\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠒⠄\"}},\"key\":\"2B33\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠲⠄\"}},\"key\":\"2B34\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠢⠄\"}},\"key\":\"2B35\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠖⠄\"}},\"key\":\"2B36\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠶⠄\"}},\"key\":\"2B37\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠦⠄\"}},\"key\":\"2B38\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠔⠄\"}},\"key\":\"2B39\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠁⠄\"}},\"key\":\"2B3A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠃⠄\"}},\"key\":\"2B3B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠉⠄\"}},\"key\":\"2B3C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠙⠄\"}},\"key\":\"2B3D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠑⠄\"}},\"key\":\"2B3E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠒⠋⠄\"}},\"key\":\"2B3F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠴⠄\"}},\"key\":\"2B40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠂⠄\"}},\"key\":\"2B41\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠆⠄\"}},\"key\":\"2B42\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠒⠄\"}},\"key\":\"2B43\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠲⠄\"}},\"key\":\"2B44\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠢⠄\"}},\"key\":\"2B45\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠖⠄\"}},\"key\":\"2B46\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠶⠄\"}},\"key\":\"2B47\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠦⠄\"}},\"key\":\"2B48\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠔⠄\"}},\"key\":\"2B49\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠁⠄\"}},\"key\":\"2B4A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠃⠄\"}},\"key\":\"2B4B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠲⠉⠄\"}},\"key\":\"2B4C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠔⠄\"}},\"key\":\"FFE9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠁⠄\"}},\"key\":\"FFEA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠃⠄\"}},\"key\":\"FFEB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠉⠄\"}},\"key\":\"FFEC\"}]\n,\n\"nemeth/symbols/math_characters.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠈⠇\"}},\"key\":\"2113\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠂⠦⠄\"}},\"key\":\"2118\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠉⠄\"}},\"key\":\"213C\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠙⠄\"}},\"key\":\"213D\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠑⠄\"}},\"key\":\"213E\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠋⠄\"}},\"key\":\"213F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠴⠄\"}},\"key\":\"2140\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠢⠄\"}},\"key\":\"2145\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠙\"}},\"key\":\"2146\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠑\"}},\"key\":\"2147\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠦⠄\"}},\"key\":\"2148\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠔⠄\"}},\"key\":\"2149\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠙⠖⠁⠲⠄\"}},\"key\":\"1D6A4\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠽⠂⠙⠖⠁⠢⠄\"}},\"key\":\"1D6A5\"}]\n,\n\"nemeth/symbols/math_delimiters.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠷\"}},\"key\":\"0028\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠾\"}},\"key\":\"0029\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠈⠷\"}},\"key\":\"005B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠈⠾\"}},\"key\":\"005D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠷\"}},\"key\":\"007B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠾\"}},\"key\":\"007D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠢⠄\"}},\"key\":\"2045\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠖⠄\"}},\"key\":\"2046\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠷\"}},\"key\":\"2308\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠾\"}},\"key\":\"2309\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠰⠷\"}},\"key\":\"230A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠰⠾\"}},\"key\":\"230B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠉⠄\"}},\"key\":\"230C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠙⠄\"}},\"key\":\"230D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠑⠄\"}},\"key\":\"230E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠋⠄\"}},\"key\":\"230F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠷\"}},\"key\":\"231C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠾\"}},\"key\":\"231D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠈⠰⠷\"}},\"key\":\"231E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠈⠰⠾\"}},\"key\":\"231F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠆⠴⠄\"}},\"key\":\"2320\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠆⠂⠄\"}},\"key\":\"2321\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠷\"}},\"key\":\"2329\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠾\"}},\"key\":\"232A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠔⠃⠄\"}},\"key\":\"239B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠔⠉⠄\"}},\"key\":\"239C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠔⠙⠄\"}},\"key\":\"239D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠔⠑⠄\"}},\"key\":\"239E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠔⠋⠄\"}},\"key\":\"239F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠴⠄\"}},\"key\":\"23A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠂⠄\"}},\"key\":\"23A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠆⠄\"}},\"key\":\"23A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠒⠄\"}},\"key\":\"23A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠲⠄\"}},\"key\":\"23A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠢⠄\"}},\"key\":\"23A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠖⠄\"}},\"key\":\"23A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠶⠄\"}},\"key\":\"23A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠦⠄\"}},\"key\":\"23A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠔⠄\"}},\"key\":\"23A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠁⠄\"}},\"key\":\"23AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠃⠄\"}},\"key\":\"23AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠉⠄\"}},\"key\":\"23AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠙⠄\"}},\"key\":\"23AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠑⠄\"}},\"key\":\"23AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠁⠋⠄\"}},\"key\":\"23AF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠴⠄\"}},\"key\":\"23B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠂⠄\"}},\"key\":\"23B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠆⠄\"}},\"key\":\"23B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠒⠄\"}},\"key\":\"23B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠲⠄\"}},\"key\":\"23B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠢⠄\"}},\"key\":\"23B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠖⠄\"}},\"key\":\"23B6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠶⠄\"}},\"key\":\"23B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠦⠄\"}},\"key\":\"23B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠃⠔⠄\"}},\"key\":\"23B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠙⠉⠄\"}},\"key\":\"23DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠙⠙⠄\"}},\"key\":\"23DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠣⠨⠷\"}},\"key\":\"23DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠣⠨⠾\"}},\"key\":\"23DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠑⠴⠄\"}},\"key\":\"23E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠑⠂⠄\"}},\"key\":\"23E1\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠦⠄\"}},\"key\":\"2768\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠔⠄\"}},\"key\":\"2769\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠁⠄\"}},\"key\":\"276A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠃⠄\"}},\"key\":\"276B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠉⠄\"}},\"key\":\"276C\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠙⠄\"}},\"key\":\"276D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠑⠄\"}},\"key\":\"276E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠖⠋⠄\"}},\"key\":\"276F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠴⠄\"}},\"key\":\"2770\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠂⠄\"}},\"key\":\"2771\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠆⠄\"}},\"key\":\"2772\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠒⠄\"}},\"key\":\"2773\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠲⠄\"}},\"key\":\"2774\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠶⠢⠄\"}},\"key\":\"2775\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠢⠄\"}},\"key\":\"27C5\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠖⠄\"}},\"key\":\"27C6\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠈⠸⠷\"}},\"key\":\"27E6\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠈⠸⠾\"}},\"key\":\"27E7\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠷\"}},\"key\":\"27E8\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠾\"}},\"key\":\"27E9\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠨⠷\"}},\"key\":\"27EA\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠨⠾\"}},\"key\":\"27EB\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠉⠄\"}},\"key\":\"27EC\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠙⠄\"}},\"key\":\"27ED\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠑⠄\"}},\"key\":\"27EE\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠋⠄\"}},\"key\":\"27EF\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠸⠷\"}},\"key\":\"2983\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠸⠾\"}},\"key\":\"2984\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠢⠄\"}},\"key\":\"2985\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠖⠄\"}},\"key\":\"2986\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠶⠄\"}},\"key\":\"2987\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠦⠄\"}},\"key\":\"2988\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠔⠄\"}},\"key\":\"2989\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠁⠄\"}},\"key\":\"298A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠃⠄\"}},\"key\":\"298B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠉⠄\"}},\"key\":\"298C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠙⠄\"}},\"key\":\"298D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠑⠄\"}},\"key\":\"298E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠋⠄\"}},\"key\":\"298F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠴⠄\"}},\"key\":\"2990\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠂⠄\"}},\"key\":\"2991\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠆⠄\"}},\"key\":\"2992\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠒⠄\"}},\"key\":\"2993\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠲⠄\"}},\"key\":\"2994\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠢⠄\"}},\"key\":\"2995\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠖⠄\"}},\"key\":\"2996\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠶⠄\"}},\"key\":\"2997\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠦⠄\"}},\"key\":\"2998\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠦⠄\"}},\"key\":\"29D8\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠔⠄\"}},\"key\":\"29D9\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠁⠄\"}},\"key\":\"29DA\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠃⠄\"}},\"key\":\"29DB\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠉⠄\"}},\"key\":\"29FC\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠙⠄\"}},\"key\":\"29FD\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠆⠄\"}},\"key\":\"2E22\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠒⠄\"}},\"key\":\"2E23\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠲⠄\"}},\"key\":\"2E24\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠢⠄\"}},\"key\":\"2E25\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠖⠄\"}},\"key\":\"2E26\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠶⠄\"}},\"key\":\"2E27\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠦⠄\"}},\"key\":\"2E28\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠑⠆⠔⠄\"}},\"key\":\"2E29\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠷\"}},\"key\":\"3008\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠾\"}},\"key\":\"3009\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠨⠷\"}},\"key\":\"300A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠨⠨⠨⠾\"}},\"key\":\"300B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠷\"}},\"key\":\"300C\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠈⠘⠾\"}},\"key\":\"300D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠴⠑⠄\"}},\"key\":\"300E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠴⠋⠄\"}},\"key\":\"300F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠴⠄\"}},\"key\":\"3010\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠂⠄\"}},\"key\":\"3011\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠲⠄\"}},\"key\":\"3014\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠢⠄\"}},\"key\":\"3015\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠖⠄\"}},\"key\":\"3016\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠶⠄\"}},\"key\":\"3017\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠦⠄\"}},\"key\":\"3018\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠔⠄\"}},\"key\":\"3019\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠁⠄\"}},\"key\":\"301A\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠃⠄\"}},\"key\":\"301B\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠙⠄\"}},\"key\":\"301D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠑⠄\"}},\"key\":\"301E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠋⠄\"}},\"key\":\"301F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠙⠒⠑⠄\"}},\"key\":\"FD3E\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠙⠒⠋⠄\"}},\"key\":\"FD3F\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠶⠄\"}},\"key\":\"FE17\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠦⠄\"}},\"key\":\"FE18\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠢⠄\"}},\"key\":\"FE35\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠖⠄\"}},\"key\":\"FE36\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠶⠄\"}},\"key\":\"FE37\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠦⠄\"}},\"key\":\"FE38\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠔⠄\"}},\"key\":\"FE39\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠁⠄\"}},\"key\":\"FE3A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠃⠄\"}},\"key\":\"FE3B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠉⠄\"}},\"key\":\"FE3C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠙⠄\"}},\"key\":\"FE3D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠑⠄\"}},\"key\":\"FE3E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠋⠄\"}},\"key\":\"FE3F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠴⠄\"}},\"key\":\"FE40\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠂⠄\"}},\"key\":\"FE41\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠆⠄\"}},\"key\":\"FE42\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠒⠄\"}},\"key\":\"FE43\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠲⠄\"}},\"key\":\"FE44\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠶⠄\"}},\"key\":\"FE47\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠦⠄\"}},\"key\":\"FE48\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠔⠄\"}},\"key\":\"FE59\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠁⠄\"}},\"key\":\"FE5A\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠃⠄\"}},\"key\":\"FE5B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠉⠄\"}},\"key\":\"FE5C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠙⠄\"}},\"key\":\"FE5D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠑⠄\"}},\"key\":\"FE5E\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠦⠄\"}},\"key\":\"FF08\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠔⠄\"}},\"key\":\"FF09\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠒⠃⠄\"}},\"key\":\"FF3B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠒⠙⠄\"}},\"key\":\"FF3D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠢⠃⠄\"}},\"key\":\"FF5B\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠢⠙⠄\"}},\"key\":\"FF5D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠢⠋⠄\"}},\"key\":\"FF5F\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠖⠴⠄\"}},\"key\":\"FF60\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠖⠆⠄\"}},\"key\":\"FF62\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠖⠒⠄\"}},\"key\":\"FF63\"}]\n,\n\"nemeth/symbols/math_geometry.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠴⠄\"}},\"key\":\"2500\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠂⠄\"}},\"key\":\"2501\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠆⠄\"}},\"key\":\"2502\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠒⠄\"}},\"key\":\"2503\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠲⠄\"}},\"key\":\"2504\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠢⠄\"}},\"key\":\"2505\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠖⠄\"}},\"key\":\"2506\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠶⠄\"}},\"key\":\"2507\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠦⠄\"}},\"key\":\"2508\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠔⠄\"}},\"key\":\"2509\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠁⠄\"}},\"key\":\"250A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠃⠄\"}},\"key\":\"250B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠉⠄\"}},\"key\":\"250C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠙⠄\"}},\"key\":\"250D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠑⠄\"}},\"key\":\"250E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠴⠋⠄\"}},\"key\":\"250F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠴⠄\"}},\"key\":\"2510\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠂⠄\"}},\"key\":\"2511\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠆⠄\"}},\"key\":\"2512\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠒⠄\"}},\"key\":\"2513\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠲⠄\"}},\"key\":\"2514\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠢⠄\"}},\"key\":\"2515\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠖⠄\"}},\"key\":\"2516\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠶⠄\"}},\"key\":\"2517\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠦⠄\"}},\"key\":\"2518\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠔⠄\"}},\"key\":\"2519\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠁⠄\"}},\"key\":\"251A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠃⠄\"}},\"key\":\"251B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠉⠄\"}},\"key\":\"251C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠙⠄\"}},\"key\":\"251D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠑⠄\"}},\"key\":\"251E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠂⠋⠄\"}},\"key\":\"251F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠴⠄\"}},\"key\":\"2520\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠂⠄\"}},\"key\":\"2521\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠆⠄\"}},\"key\":\"2522\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠒⠄\"}},\"key\":\"2523\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠲⠄\"}},\"key\":\"2524\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠢⠄\"}},\"key\":\"2525\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠖⠄\"}},\"key\":\"2526\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠶⠄\"}},\"key\":\"2527\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠦⠄\"}},\"key\":\"2528\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠔⠄\"}},\"key\":\"2529\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠁⠄\"}},\"key\":\"252A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠃⠄\"}},\"key\":\"252B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠉⠄\"}},\"key\":\"252C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠙⠄\"}},\"key\":\"252D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠑⠄\"}},\"key\":\"252E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠆⠋⠄\"}},\"key\":\"252F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠴⠄\"}},\"key\":\"2530\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠂⠄\"}},\"key\":\"2531\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠆⠄\"}},\"key\":\"2532\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠒⠄\"}},\"key\":\"2533\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠲⠄\"}},\"key\":\"2534\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠢⠄\"}},\"key\":\"2535\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠖⠄\"}},\"key\":\"2536\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠶⠄\"}},\"key\":\"2537\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠦⠄\"}},\"key\":\"2538\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠔⠄\"}},\"key\":\"2539\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠁⠄\"}},\"key\":\"253A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠃⠄\"}},\"key\":\"253B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠉⠄\"}},\"key\":\"253C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠙⠄\"}},\"key\":\"253D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠑⠄\"}},\"key\":\"253E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠒⠋⠄\"}},\"key\":\"253F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠴⠄\"}},\"key\":\"2540\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠂⠄\"}},\"key\":\"2541\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠆⠄\"}},\"key\":\"2542\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠒⠄\"}},\"key\":\"2543\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠲⠄\"}},\"key\":\"2544\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠢⠄\"}},\"key\":\"2545\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠖⠄\"}},\"key\":\"2546\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠶⠄\"}},\"key\":\"2547\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠦⠄\"}},\"key\":\"2548\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠔⠄\"}},\"key\":\"2549\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠁⠄\"}},\"key\":\"254A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠃⠄\"}},\"key\":\"254B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠉⠄\"}},\"key\":\"254C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠙⠄\"}},\"key\":\"254D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠑⠄\"}},\"key\":\"254E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠲⠋⠄\"}},\"key\":\"254F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠴⠄\"}},\"key\":\"2550\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠂⠄\"}},\"key\":\"2551\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠆⠄\"}},\"key\":\"2552\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠒⠄\"}},\"key\":\"2553\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠲⠄\"}},\"key\":\"2554\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠢⠄\"}},\"key\":\"2555\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠖⠄\"}},\"key\":\"2556\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠶⠄\"}},\"key\":\"2557\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠦⠄\"}},\"key\":\"2558\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠔⠄\"}},\"key\":\"2559\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠁⠄\"}},\"key\":\"255A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠃⠄\"}},\"key\":\"255B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠉⠄\"}},\"key\":\"255C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠙⠄\"}},\"key\":\"255D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠑⠄\"}},\"key\":\"255E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠢⠋⠄\"}},\"key\":\"255F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠴⠄\"}},\"key\":\"2560\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠂⠄\"}},\"key\":\"2561\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠆⠄\"}},\"key\":\"2562\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠒⠄\"}},\"key\":\"2563\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠲⠄\"}},\"key\":\"2564\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠢⠄\"}},\"key\":\"2565\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠖⠄\"}},\"key\":\"2566\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠶⠄\"}},\"key\":\"2567\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠦⠄\"}},\"key\":\"2568\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠔⠄\"}},\"key\":\"2569\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠁⠄\"}},\"key\":\"256A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠃⠄\"}},\"key\":\"256B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠉⠄\"}},\"key\":\"256C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠙⠄\"}},\"key\":\"256D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠑⠄\"}},\"key\":\"256E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠖⠋⠄\"}},\"key\":\"256F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠴⠄\"}},\"key\":\"2570\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠂⠄\"}},\"key\":\"2571\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠆⠄\"}},\"key\":\"2572\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠒⠄\"}},\"key\":\"2573\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠲⠄\"}},\"key\":\"2574\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠢⠄\"}},\"key\":\"2575\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠖⠄\"}},\"key\":\"2576\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠶⠄\"}},\"key\":\"2577\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠦⠄\"}},\"key\":\"2578\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠔⠄\"}},\"key\":\"2579\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠁⠄\"}},\"key\":\"257A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠃⠄\"}},\"key\":\"257B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠉⠄\"}},\"key\":\"257C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠙⠄\"}},\"key\":\"257D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠑⠄\"}},\"key\":\"257E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠶⠋⠄\"}},\"key\":\"257F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠴⠄\"}},\"key\":\"2580\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠂⠄\"}},\"key\":\"2581\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠆⠄\"}},\"key\":\"2582\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠒⠄\"}},\"key\":\"2583\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠲⠄\"}},\"key\":\"2584\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠢⠄\"}},\"key\":\"2585\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠖⠄\"}},\"key\":\"2586\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠶⠄\"}},\"key\":\"2587\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠦⠄\"}},\"key\":\"2588\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠔⠄\"}},\"key\":\"2589\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠁⠄\"}},\"key\":\"258A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠃⠄\"}},\"key\":\"258B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠉⠄\"}},\"key\":\"258C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠙⠄\"}},\"key\":\"258D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠑⠄\"}},\"key\":\"258E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠦⠋⠄\"}},\"key\":\"258F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠴⠄\"}},\"key\":\"2590\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠂⠄\"}},\"key\":\"2591\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠆⠄\"}},\"key\":\"2592\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠒⠄\"}},\"key\":\"2593\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠲⠄\"}},\"key\":\"2594\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠢⠄\"}},\"key\":\"2595\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠖⠄\"}},\"key\":\"2596\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠶⠄\"}},\"key\":\"2597\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠦⠄\"}},\"key\":\"2598\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠔⠄\"}},\"key\":\"2599\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠁⠄\"}},\"key\":\"259A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠃⠄\"}},\"key\":\"259B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠉⠄\"}},\"key\":\"259C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠙⠄\"}},\"key\":\"259D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠑⠄\"}},\"key\":\"259E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠔⠋⠄\"}},\"key\":\"259F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠲\"}},\"key\":\"25A0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠲\"}},\"key\":\"25A1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠆⠄\"}},\"key\":\"25A2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠒⠄\"}},\"key\":\"25A3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠲⠄\"}},\"key\":\"25A4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠢⠄\"}},\"key\":\"25A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠖⠄\"}},\"key\":\"25A6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠶⠄\"}},\"key\":\"25A7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠦⠄\"}},\"key\":\"25A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠔⠄\"}},\"key\":\"25A9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠁⠄\"}},\"key\":\"25AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠗\"}},\"key\":\"25AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠗\"}},\"key\":\"25AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠙⠄\"}},\"key\":\"25AD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠑⠄\"}},\"key\":\"25AE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠁⠋⠄\"}},\"key\":\"25AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠛\"}},\"key\":\"25B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠛\"}},\"key\":\"25B1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠞\"}},\"key\":\"25B2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠞\"}},\"key\":\"25B3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠲⠄\"}},\"key\":\"25B4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠢⠄\"}},\"key\":\"25B5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠖⠄\"}},\"key\":\"25B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠶⠄\"}},\"key\":\"25B7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠦⠄\"}},\"key\":\"25B8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠔⠄\"}},\"key\":\"25B9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠁⠄\"}},\"key\":\"25BA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠃⠄\"}},\"key\":\"25BB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠸⠨⠫\"}},\"key\":\"25BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠨⠫\"}},\"key\":\"25BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠑⠄\"}},\"key\":\"25BE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠃⠋⠄\"}},\"key\":\"25BF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠴⠄\"}},\"key\":\"25C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠂⠄\"}},\"key\":\"25C1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠆⠄\"}},\"key\":\"25C2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠒⠄\"}},\"key\":\"25C3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠲⠄\"}},\"key\":\"25C4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠢⠄\"}},\"key\":\"25C5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠖⠄\"}},\"key\":\"25C6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠶⠄\"}},\"key\":\"25C7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠦⠄\"}},\"key\":\"25C8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠔⠄\"}},\"key\":\"25C9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠸⠉\"}},\"key\":\"25CA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠉\"}},\"key\":\"25CB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠉⠄\"}},\"key\":\"25CC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠙⠄\"}},\"key\":\"25CD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠑⠄\"}},\"key\":\"25CE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠉⠋⠄\"}},\"key\":\"25CF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠴⠄\"}},\"key\":\"25D0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠂⠄\"}},\"key\":\"25D1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠆⠄\"}},\"key\":\"25D2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠒⠄\"}},\"key\":\"25D3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠲⠄\"}},\"key\":\"25D4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠢⠄\"}},\"key\":\"25D5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠖⠄\"}},\"key\":\"25D6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠶⠄\"}},\"key\":\"25D7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠦⠄\"}},\"key\":\"25D8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠔⠄\"}},\"key\":\"25D9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠁⠄\"}},\"key\":\"25DA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠃⠄\"}},\"key\":\"25DB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠉⠄\"}},\"key\":\"25DC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠙⠄\"}},\"key\":\"25DD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠑⠄\"}},\"key\":\"25DE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠙⠋⠄\"}},\"key\":\"25DF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠴⠄\"}},\"key\":\"25E0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠂⠄\"}},\"key\":\"25E1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠆⠄\"}},\"key\":\"25E2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠒⠄\"}},\"key\":\"25E3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠲⠄\"}},\"key\":\"25E4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠢⠄\"}},\"key\":\"25E5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠖⠄\"}},\"key\":\"25E6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠶⠄\"}},\"key\":\"25E7\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠦⠄\"}},\"key\":\"25E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠔⠄\"}},\"key\":\"25E9\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠁⠄\"}},\"key\":\"25EA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠃⠄\"}},\"key\":\"25EB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠉⠄\"}},\"key\":\"25EC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠙⠄\"}},\"key\":\"25ED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠑⠄\"}},\"key\":\"25EE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠑⠋⠄\"}},\"key\":\"25EF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠴⠄\"}},\"key\":\"25F0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠂⠄\"}},\"key\":\"25F1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠆⠄\"}},\"key\":\"25F2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠒⠄\"}},\"key\":\"25F3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠲⠄\"}},\"key\":\"25F4\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠢⠄\"}},\"key\":\"25F5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠖⠄\"}},\"key\":\"25F6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠶⠄\"}},\"key\":\"25F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠦⠄\"}},\"key\":\"25F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠔⠄\"}},\"key\":\"25F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠁⠄\"}},\"key\":\"25FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠃⠄\"}},\"key\":\"25FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠉⠄\"}},\"key\":\"25FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠙⠄\"}},\"key\":\"25FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠑⠄\"}},\"key\":\"25FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠢⠋⠋⠄\"}},\"key\":\"25FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠆⠄\"}},\"key\":\"2B12\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠒⠄\"}},\"key\":\"2B13\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠲⠄\"}},\"key\":\"2B14\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠢⠄\"}},\"key\":\"2B15\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠖⠄\"}},\"key\":\"2B16\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠶⠄\"}},\"key\":\"2B17\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠦⠄\"}},\"key\":\"2B18\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠔⠄\"}},\"key\":\"2B19\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠁⠄\"}},\"key\":\"2B1A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠃⠄\"}},\"key\":\"2B1B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠉⠄\"}},\"key\":\"2B1C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠙⠄\"}},\"key\":\"2B1D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠑⠄\"}},\"key\":\"2B1E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠂⠋⠄\"}},\"key\":\"2B1F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠴⠄\"}},\"key\":\"2B20\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠂⠄\"}},\"key\":\"2B21\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠆⠄\"}},\"key\":\"2B22\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠒⠄\"}},\"key\":\"2B23\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠲⠄\"}},\"key\":\"2B24\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠢⠄\"}},\"key\":\"2B25\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠖⠄\"}},\"key\":\"2B26\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠶⠄\"}},\"key\":\"2B27\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠦⠄\"}},\"key\":\"2B28\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠔⠄\"}},\"key\":\"2B29\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠁⠄\"}},\"key\":\"2B2A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠃⠄\"}},\"key\":\"2B2B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠉⠄\"}},\"key\":\"2B2C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠙⠄\"}},\"key\":\"2B2D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠑⠄\"}},\"key\":\"2B2E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠆⠋⠄\"}},\"key\":\"2B2F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠴⠄\"}},\"key\":\"2B50\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠂⠄\"}},\"key\":\"2B51\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠆⠄\"}},\"key\":\"2B52\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠒⠄\"}},\"key\":\"2B53\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠲⠄\"}},\"key\":\"2B54\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠢⠄\"}},\"key\":\"2B55\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠖⠄\"}},\"key\":\"2B56\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠶⠄\"}},\"key\":\"2B57\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠦⠄\"}},\"key\":\"2B58\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠃⠢⠔⠄\"}},\"key\":\"2B59\"}]\n,\n\"nemeth/symbols/math_harpoons.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠈⠪⠒⠒⠀\"}},\"key\":\"21BC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠠⠪⠒⠒⠀\"}},\"key\":\"21BD\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠠⠕⠀\"}},\"key\":\"21BE\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠣⠒⠒⠈⠕⠀\"}},\"key\":\"21BF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠈⠕⠀\"}},\"key\":\"21C0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠠⠕⠀\"}},\"key\":\"21C1\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠪⠒⠒⠈⠕⠀\"}},\"key\":\"21C2\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠩⠒⠒⠠⠕⠀\"}},\"key\":\"21C3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠈⠪⠒⠒⠫⠒⠒⠈⠕⠀\"}},\"key\":\"21CB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠒⠒⠈⠕⠫⠈⠪⠒⠒⠀\"}},\"key\":\"21CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠁⠄\"}},\"key\":\"294A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠃⠄\"}},\"key\":\"294B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠉⠄\"}},\"key\":\"294C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠙⠄\"}},\"key\":\"294D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠑⠄\"}},\"key\":\"294E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠲⠋⠄\"}},\"key\":\"294F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠴⠄\"}},\"key\":\"2950\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠂⠄\"}},\"key\":\"2951\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠆⠄\"}},\"key\":\"2952\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠒⠄\"}},\"key\":\"2953\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠲⠄\"}},\"key\":\"2954\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠢⠄\"}},\"key\":\"2955\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠖⠄\"}},\"key\":\"2956\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠶⠄\"}},\"key\":\"2957\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠦⠄\"}},\"key\":\"2958\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠔⠄\"}},\"key\":\"2959\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠁⠄\"}},\"key\":\"295A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠃⠄\"}},\"key\":\"295B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠉⠄\"}},\"key\":\"295C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠙⠄\"}},\"key\":\"295D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠑⠄\"}},\"key\":\"295E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠢⠋⠄\"}},\"key\":\"295F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠴⠄\"}},\"key\":\"2960\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠂⠄\"}},\"key\":\"2961\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠆⠄\"}},\"key\":\"2962\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠒⠄\"}},\"key\":\"2963\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠲⠄\"}},\"key\":\"2964\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠢⠄\"}},\"key\":\"2965\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠖⠄\"}},\"key\":\"2966\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠶⠄\"}},\"key\":\"2967\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠦⠄\"}},\"key\":\"2968\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠔⠄\"}},\"key\":\"2969\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠁⠄\"}},\"key\":\"296A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠃⠄\"}},\"key\":\"296B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠉⠄\"}},\"key\":\"296C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠙⠄\"}},\"key\":\"296D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠑⠄\"}},\"key\":\"296E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠖⠋⠄\"}},\"key\":\"296F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠉⠄\"}},\"key\":\"297C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠙⠄\"}},\"key\":\"297D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠑⠄\"}},\"key\":\"297E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠶⠋⠄\"}},\"key\":\"297F\"}]\n,\n\"nemeth/symbols/math_non_characters.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠴⠋⠄\"}},\"key\":\"210F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠳\"}},\"key\":\"2114\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠂⠖⠄\"}},\"key\":\"2116\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠂⠶⠄\"}},\"key\":\"2117\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠂⠑⠄\"}},\"key\":\"211E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠂⠋⠄\"}},\"key\":\"211F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠴⠄\"}},\"key\":\"2120\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠂⠄\"}},\"key\":\"2121\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠘⠞\"}},\"key\":\"2122\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠒⠄\"}},\"key\":\"2123\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠢⠄\"}},\"key\":\"2125\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠖⠄\"}},\"key\":\"2126\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠶⠄\"}},\"key\":\"2127\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠁⠄\"}},\"key\":\"212A\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠠⠁\"}},\"key\":\"212B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠆⠑⠄\"}},\"key\":\"212E\"},{\"category\":\"Lu\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠆⠄\"}},\"key\":\"2132\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠔⠄\"}},\"key\":\"2139\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠁⠄\"}},\"key\":\"213A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠒⠃⠄\"}},\"key\":\"213B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠂⠄\"}},\"key\":\"2141\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠆⠄\"}},\"key\":\"2142\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠒⠄\"}},\"key\":\"2143\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠲⠄\"}},\"key\":\"2144\"}]\n,\n\"nemeth/symbols/math_symbols.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠖\"}},\"key\":\"0021\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠹\"}},\"key\":\"0022\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠨⠼\"}},\"key\":\"0023\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠈⠎\"}},\"key\":\"0024\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠈⠴\"}},\"key\":\"0025\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠯\"}},\"key\":\"0026\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄\"}},\"key\":\"0027\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠈⠼\"}},\"key\":\"002A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠬\"}},\"key\":\"002B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠠\",\"defaultLibLouis\":\"⠠⠀\"}},\"key\":\"002C\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤\"}},\"key\":\"002D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠨\",\"other\":\"⠲\"}},\"key\":\"002E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠌\"}},\"key\":\"002F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠒\"}},\"key\":\"003A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠆\"}},\"key\":\"003B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠀\"}},\"key\":\"003C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠅⠀\"}},\"key\":\"003D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠀\"}},\"key\":\"003E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠦\"}},\"key\":\"003F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠈⠁\"}},\"key\":\"0040\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠡\"}},\"key\":\"005C\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⡘\"}},\"key\":\"005E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠸\"}},\"key\":\"005F\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠈\"}},\"key\":\"0060\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠳\"}},\"key\":\"007C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠱\"}},\"key\":\"007E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠖\"}},\"key\":\"00A1\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠈⠉\"}},\"key\":\"00A2\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠼\"}},\"key\":\"00A3\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠫\"}},\"key\":\"00A4\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠁⠢⠄\"}},\"key\":\"00A5\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠸⠳\"}},\"key\":\"00A6\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠈⠠⠎\"}},\"key\":\"00A7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠁⠦⠄\"}},\"key\":\"00A8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠘⠉\"}},\"key\":\"00A9\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠁⠁⠄\"}},\"key\":\"00AA\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠁⠃⠄\"}},\"key\":\"00AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠁⠉⠄\"}},\"key\":\"00AC\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠘⠗\"}},\"key\":\"00AE\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠱\"}},\"key\":\"00AF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠘⠨⠡\"}},\"key\":\"00B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠬⠤\"}},\"key\":\"00B1\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠈\"}},\"key\":\"00B4\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠨⠍\"}},\"key\":\"00B5\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠃⠖⠄\"}},\"key\":\"00B6\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠡\"}},\"key\":\"00B7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠃⠦⠄\"}},\"key\":\"00B8\"},{\"category\":\"Lo\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠃⠁⠄\"}},\"key\":\"00BA\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠴⠃⠃⠄\"}},\"key\":\"00BB\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠦\"}},\"key\":\"00BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠡\"}},\"key\":\"00D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠌\"}},\"key\":\"00F7\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠙⠦⠄\"}},\"key\":\"02D8\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠙⠔⠄\"}},\"key\":\"02D9\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠙⠁⠄\"}},\"key\":\"02DA\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠙⠃⠄\"}},\"key\":\"02DB\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠈⠱\"}},\"key\":\"02DC\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠴⠆⠙⠙⠄\"}},\"key\":\"02DD\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤\"}},\"key\":\"2010\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤\"}},\"key\":\"2011\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤⠤\"}},\"key\":\"2012\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤⠤\"}},\"key\":\"2013\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤⠤\"}},\"key\":\"2014\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠤⠤\"}},\"key\":\"2015\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠳⠳\"}},\"key\":\"2016\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠂⠶⠄\"}},\"key\":\"2017\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠠⠦\"}},\"key\":\"2018\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"⠄\"}},\"key\":\"2019\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠂⠁⠄\"}},\"key\":\"201A\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠂⠃⠄\"}},\"key\":\"201B\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠦\"}},\"key\":\"201C\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"⠴\"}},\"key\":\"201D\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠂⠑⠄\"}},\"key\":\"201E\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠂⠋⠄\"}},\"key\":\"201F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠻\"}},\"key\":\"2020\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠸⠸⠻\"}},\"key\":\"2021\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠔⠔\"}},\"key\":\"2022\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠒⠄\"}},\"key\":\"2023\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄\"}},\"key\":\"2024\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⠄\"}},\"key\":\"2025\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⠄⠄\"}},\"key\":\"2026\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠶⠄\"}},\"key\":\"2027\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠴⠄\"}},\"key\":\"2030\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠂⠄\"}},\"key\":\"2031\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄\"}},\"key\":\"2032\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⠄\"}},\"key\":\"2033\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⠄⠄\"}},\"key\":\"2034\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠢⠄\"}},\"key\":\"2035\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠖⠄\"}},\"key\":\"2036\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠶⠄\"}},\"key\":\"2037\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠦⠄\"}},\"key\":\"2038\"},{\"category\":\"Pi\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠔⠄\"}},\"key\":\"2039\"},{\"category\":\"Pf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠁⠄\"}},\"key\":\"203A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠃⠄\"}},\"key\":\"203B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠖⠖\"}},\"key\":\"203C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠙⠄\"}},\"key\":\"203D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠱\"}},\"key\":\"203E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠒⠋⠄\"}},\"key\":\"203F\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠴⠄\"}},\"key\":\"2040\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠂⠄\"}},\"key\":\"2041\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠆⠄\"}},\"key\":\"2042\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠒⠄\"}},\"key\":\"2043\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠲⠄\"}},\"key\":\"2044\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠹⠹\"}},\"key\":\"2047\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠹⠖\"}},\"key\":\"2048\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠖⠹\"}},\"key\":\"2049\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠃⠄\"}},\"key\":\"204B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠉⠄\"}},\"key\":\"204C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠙⠄\"}},\"key\":\"204D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠑⠄\"}},\"key\":\"204E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠲⠋⠄\"}},\"key\":\"204F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠴⠄\"}},\"key\":\"2050\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠂⠄\"}},\"key\":\"2051\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠆⠄\"}},\"key\":\"2052\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠒⠄\"}},\"key\":\"2053\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠲⠄\"}},\"key\":\"2054\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠢⠄\"}},\"key\":\"2055\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠖⠄\"}},\"key\":\"2056\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠶⠄\"}},\"key\":\"2057\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠦⠄\"}},\"key\":\"2058\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠔⠄\"}},\"key\":\"2059\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠁⠄\"}},\"key\":\"205A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠃⠄\"}},\"key\":\"205B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠉⠄\"}},\"key\":\"205C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠙⠄\"}},\"key\":\"205D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠢⠑⠄\"}},\"key\":\"205E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠁⠄\"}},\"key\":\"207A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠃⠄\"}},\"key\":\"207B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠉⠄\"}},\"key\":\"207C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠙⠄\"}},\"key\":\"207D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠶⠑⠄\"}},\"key\":\"207E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠦⠁⠄\"}},\"key\":\"208A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠦⠃⠄\"}},\"key\":\"208B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠦⠉⠄\"}},\"key\":\"208C\"},{\"category\":\"Ps\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠦⠙⠄\"}},\"key\":\"208D\"},{\"category\":\"Pe\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠦⠑⠄\"}},\"key\":\"208E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠁⠄\"}},\"key\":\"214A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠃⠄\"}},\"key\":\"214B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠉⠄\"}},\"key\":\"214C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠙⠄\"}},\"key\":\"214D\"},{\"category\":\"Ll\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠂⠲⠑⠄\"}},\"key\":\"214E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠯\"}},\"key\":\"2200\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠴⠂⠄\"}},\"key\":\"2201\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠿\"}},\"key\":\"2203\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠌⠈⠿\"}},\"key\":\"2204\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠸⠴\"}},\"key\":\"2205\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠴⠖⠄\"}},\"key\":\"2206\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠑⠀\"}},\"key\":\"2208\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠈⠑⠀\"}},\"key\":\"2209\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠑⠀\"}},\"key\":\"220A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠨⠁⠀\"}},\"key\":\"220B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠸⠨⠁⠀\"}},\"key\":\"220C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠢⠀\"}},\"key\":\"220D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠳⠀\"}},\"key\":\"220E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠴⠋⠄\"}},\"key\":\"220F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠴⠄\"}},\"key\":\"2210\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠨⠠⠎\"}},\"key\":\"2211\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠤\"}},\"key\":\"2212\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠤⠬\"}},\"key\":\"2213\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠲⠄\"}},\"key\":\"2214\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠸⠌\"}},\"key\":\"2215\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠸⠡\"}},\"key\":\"2216\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠼\"}},\"key\":\"2217\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠘⠨⠡\"}},\"key\":\"2218\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠔⠄\"}},\"key\":\"2219\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠁⠄\"}},\"key\":\"221A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠃⠄\"}},\"key\":\"221B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠂⠉⠄\"}},\"key\":\"221C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠰⠆⠀\"}},\"key\":\"221D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠠⠿\"}},\"key\":\"221E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠪⠨⠗⠻\"}},\"key\":\"221F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠪\"}},\"key\":\"2220\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠪⠸⠫⠫⠁⠻\"}},\"key\":\"2221\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠪⠸⠫⠫⠁⠻\"}},\"key\":\"2222\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠳\"}},\"key\":\"2223\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠌⠳\"}},\"key\":\"2224\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠇⠀\"}},\"key\":\"2225\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠫⠇⠀\"}},\"key\":\"2226\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠩\"}},\"key\":\"2227\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠬\"}},\"key\":\"2228\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠨⠩\"}},\"key\":\"2229\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠨⠬\"}},\"key\":\"222A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮\"}},\"key\":\"222B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮⠮\"}},\"key\":\"222C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮⠮⠮\"}},\"key\":\"222D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮⠈⠫⠉⠻\"}},\"key\":\"222E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠆⠋⠄\"}},\"key\":\"222F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠴⠄\"}},\"key\":\"2230\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠂⠄\"}},\"key\":\"2231\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮⠈⠫⠪⠢⠔⠻\"}},\"key\":\"2232\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠮⠈⠫⠢⠔⠕⠻\"}},\"key\":\"2233\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠠⠡⠀\"}},\"key\":\"2234\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠌⠀\"}},\"key\":\"2235\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠂⠀\"}},\"key\":\"2236\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠶⠄\"}},\"key\":\"2237\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠦⠄\"}},\"key\":\"2238\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠔⠄\"}},\"key\":\"2239\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠁⠄\"}},\"key\":\"223A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠃⠄\"}},\"key\":\"223B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠱\"}},\"key\":\"223C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠙⠄\"}},\"key\":\"223D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠑⠄\"}},\"key\":\"223E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠒⠋⠄\"}},\"key\":\"223F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠴⠄\"}},\"key\":\"2240\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠂⠄\"}},\"key\":\"2241\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠆⠄\"}},\"key\":\"2242\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠒⠄\"}},\"key\":\"2243\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠲⠄\"}},\"key\":\"2244\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠱⠈⠱⠀\"}},\"key\":\"2245\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠖⠄\"}},\"key\":\"2246\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠶⠄\"}},\"key\":\"2247\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠦⠄\"}},\"key\":\"2248\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠔⠄\"}},\"key\":\"2249\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠁⠄\"}},\"key\":\"224A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠃⠄\"}},\"key\":\"224B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠉⠄\"}},\"key\":\"224C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠈⠣⠠⠣⠀\"}},\"key\":\"224D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠑⠄\"}},\"key\":\"224E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠲⠋⠄\"}},\"key\":\"224F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠴⠄\"}},\"key\":\"2250\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠂⠄\"}},\"key\":\"2251\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠆⠄\"}},\"key\":\"2252\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠒⠄\"}},\"key\":\"2253\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠲⠄\"}},\"key\":\"2254\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠢⠄\"}},\"key\":\"2255\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠖⠄\"}},\"key\":\"2256\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠶⠄\"}},\"key\":\"2257\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠦⠄\"}},\"key\":\"2258\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠔⠄\"}},\"key\":\"2259\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠁⠄\"}},\"key\":\"225A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠃⠄\"}},\"key\":\"225B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠉⠄\"}},\"key\":\"225C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠙⠄\"}},\"key\":\"225D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠑⠄\"}},\"key\":\"225E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠢⠋⠄\"}},\"key\":\"225F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠅⠀\"}},\"key\":\"2260\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠇⠀\"}},\"key\":\"2261\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠸⠇⠀\"}},\"key\":\"2262\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠖⠒⠄\"}},\"key\":\"2263\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠱⠀\"}},\"key\":\"2264\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠱⠀\"}},\"key\":\"2265\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠨⠅⠀\"}},\"key\":\"2266\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠨⠅⠀\"}},\"key\":\"2267\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠌⠨⠅⠀\"}},\"key\":\"2268\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠌⠨⠅⠀\"}},\"key\":\"2269\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠈⠐⠅⠻⠀\"}},\"key\":\"226A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠈⠨⠂⠻⠀\"}},\"key\":\"226B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠖⠉⠄\"}},\"key\":\"226C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠈⠣⠠⠣⠀\"}},\"key\":\"226D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠐⠅⠀\"}},\"key\":\"226E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠂⠀\"}},\"key\":\"226F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠐⠅⠱⠀\"}},\"key\":\"2270\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠂⠱⠀\"}},\"key\":\"2271\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠈⠱⠀\"}},\"key\":\"2272\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠈⠱⠀\"}},\"key\":\"2273\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠐⠅⠈⠱⠀\"}},\"key\":\"2274\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠂⠈⠱⠀\"}},\"key\":\"2275\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠐⠅⠨⠂⠀\"}},\"key\":\"2276\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠐⠅⠀\"}},\"key\":\"2277\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠐⠅⠨⠂⠀\"}},\"key\":\"2278\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠂⠐⠅⠀\"}},\"key\":\"2279\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠀\"}},\"key\":\"227A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠀\"}},\"key\":\"227B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠱⠀\"}},\"key\":\"227C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠱⠀\"}},\"key\":\"227D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠈⠱⠀\"}},\"key\":\"227E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠈⠱⠀\"}},\"key\":\"227F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠐⠅⠀\"}},\"key\":\"2280\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠐⠅⠀\"}},\"key\":\"2281\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠐⠅⠀\"}},\"key\":\"2282\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠨⠂⠀\"}},\"key\":\"2283\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠸⠐⠅⠀\"}},\"key\":\"2284\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠸⠨⠂⠀\"}},\"key\":\"2285\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠸⠀⠅⠱\"}},\"key\":\"2286\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠂⠱⠀\"}},\"key\":\"2287\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠀⠅⠱⠀\"}},\"key\":\"2288\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠌⠨⠂⠱⠀\"}},\"key\":\"2289\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠐⠅⠌⠨⠅⠀\"}},\"key\":\"228A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠸⠨⠂⠌⠨⠅⠀\"}},\"key\":\"228B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠦⠉⠄\"}},\"key\":\"228C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠦⠙⠄\"}},\"key\":\"228D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠦⠑⠄\"}},\"key\":\"228E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠦⠋⠄\"}},\"key\":\"228F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠔⠴⠄\"}},\"key\":\"2290\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠔⠂⠄\"}},\"key\":\"2291\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠔⠆⠄\"}},\"key\":\"2292\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠔⠒⠄\"}},\"key\":\"2293\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠔⠲⠄\"}},\"key\":\"2294\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠬⠻\"}},\"key\":\"2295\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠤⠻\"}},\"key\":\"2296\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠈⠡⠻\"}},\"key\":\"2297\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠸⠌⠻\"}},\"key\":\"2298\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠡⠻\"}},\"key\":\"2299\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠘⠨⠡⠻\"}},\"key\":\"229A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠈⠼⠻\"}},\"key\":\"229B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠨⠅⠻\"}},\"key\":\"229C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠤⠤⠻\"}},\"key\":\"229D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠲⠸⠫⠬⠻\"}},\"key\":\"229E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠲⠸⠫⠤⠻\"}},\"key\":\"229F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠲⠸⠫⠈⠡⠻\"}},\"key\":\"22A0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠲⠸⠫⠡⠻\"}},\"key\":\"22A1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠆⠄\"}},\"key\":\"22A2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠒⠄\"}},\"key\":\"22A3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠲⠄\"}},\"key\":\"22A4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠫⠏⠀\"}},\"key\":\"22A5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠖⠄\"}},\"key\":\"22A6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠶⠄\"}},\"key\":\"22A7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠦⠄\"}},\"key\":\"22A8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠔⠄\"}},\"key\":\"22A9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠁⠄\"}},\"key\":\"22AA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠃⠄\"}},\"key\":\"22AB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠉⠄\"}},\"key\":\"22AC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠙⠄\"}},\"key\":\"22AD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠑⠄\"}},\"key\":\"22AE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠁⠋⠄\"}},\"key\":\"22AF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠴⠄\"}},\"key\":\"22B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠂⠄\"}},\"key\":\"22B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠆⠄\"}},\"key\":\"22B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠒⠄\"}},\"key\":\"22B3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠲⠄\"}},\"key\":\"22B4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠢⠄\"}},\"key\":\"22B5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠖⠄\"}},\"key\":\"22B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠶⠄\"}},\"key\":\"22B7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠦⠄\"}},\"key\":\"22B8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠔⠄\"}},\"key\":\"22B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠁⠄\"}},\"key\":\"22BA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠃⠄\"}},\"key\":\"22BB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠉⠄\"}},\"key\":\"22BC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠙⠄\"}},\"key\":\"22BD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠃⠋⠄\"}},\"key\":\"22BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠩\"}},\"key\":\"22C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠬\"}},\"key\":\"22C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠨⠩\"}},\"key\":\"22C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠨⠬\"}},\"key\":\"22C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠲⠄\"}},\"key\":\"22C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠡\"}},\"key\":\"22C5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠖⠄\"}},\"key\":\"22C6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠶⠄\"}},\"key\":\"22C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠦⠄\"}},\"key\":\"22C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠔⠄\"}},\"key\":\"22C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠁⠄\"}},\"key\":\"22CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠃⠄\"}},\"key\":\"22CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠉⠄\"}},\"key\":\"22CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠙⠄\"}},\"key\":\"22CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠑⠄\"}},\"key\":\"22CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠉⠋⠄\"}},\"key\":\"22CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠴⠄\"}},\"key\":\"22D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠂⠄\"}},\"key\":\"22D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠆⠄\"}},\"key\":\"22D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠒⠄\"}},\"key\":\"22D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠲⠄\"}},\"key\":\"22D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠢⠄\"}},\"key\":\"22D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠖⠄\"}},\"key\":\"22D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠶⠄\"}},\"key\":\"22D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠦⠄\"}},\"key\":\"22D8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠔⠄\"}},\"key\":\"22D9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠁⠄\"}},\"key\":\"22DA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠃⠄\"}},\"key\":\"22DB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠱⠐⠅⠀\"}},\"key\":\"22DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠱⠨⠂⠀\"}},\"key\":\"22DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠑⠄\"}},\"key\":\"22DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠙⠋⠄\"}},\"key\":\"22DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠴⠄\"}},\"key\":\"22E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠂⠄\"}},\"key\":\"22E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠆⠄\"}},\"key\":\"22E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠒⠄\"}},\"key\":\"22E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠲⠄\"}},\"key\":\"22E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠢⠄\"}},\"key\":\"22E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠖⠄\"}},\"key\":\"22E6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠶⠄\"}},\"key\":\"22E7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠦⠄\"}},\"key\":\"22E8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠔⠄\"}},\"key\":\"22E9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠁⠄\"}},\"key\":\"22EA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠃⠄\"}},\"key\":\"22EB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠉⠄\"}},\"key\":\"22EC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠑⠙⠄\"}},\"key\":\"22ED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠣⠄⠄⠄\"}},\"key\":\"22EE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⠄⠄\"}},\"key\":\"22EF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠘⠄⠄⠄\"}},\"key\":\"22F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠰⠄⠄⠄\"}},\"key\":\"22F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠆⠄\"}},\"key\":\"22F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠒⠄\"}},\"key\":\"22F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠲⠄\"}},\"key\":\"22F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠢⠄\"}},\"key\":\"22F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠖⠄\"}},\"key\":\"22F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠶⠄\"}},\"key\":\"22F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠦⠄\"}},\"key\":\"22F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠔⠄\"}},\"key\":\"22F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠁⠄\"}},\"key\":\"22FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠃⠄\"}},\"key\":\"22FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠉⠄\"}},\"key\":\"22FC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠙⠄\"}},\"key\":\"22FD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠑⠄\"}},\"key\":\"22FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠆⠋⠋⠄\"}},\"key\":\"22FF\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠴⠄\"}},\"key\":\"2300\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠆⠄\"}},\"key\":\"2302\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠢⠄\"}},\"key\":\"2305\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠖⠄\"}},\"key\":\"2306\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠴⠶⠄\"}},\"key\":\"2307\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠂⠴⠄\"}},\"key\":\"2310\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠂⠂⠄\"}},\"key\":\"2311\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠂⠆⠄\"}},\"key\":\"2312\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠂⠒⠄\"}},\"key\":\"2313\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠂⠲⠄\"}},\"key\":\"2314\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠢⠄\"}},\"key\":\"2795\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠖⠄\"}},\"key\":\"2796\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠔⠶⠄\"}},\"key\":\"2797\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠴⠄\"}},\"key\":\"27B0\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠃⠋⠄\"}},\"key\":\"27BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠂⠄\"}},\"key\":\"27C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠏\"}},\"key\":\"27C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠒⠄\"}},\"key\":\"27C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠲⠄\"}},\"key\":\"27C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠶⠄\"}},\"key\":\"27C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠦⠄\"}},\"key\":\"27C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠔⠄\"}},\"key\":\"27C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠁⠄\"}},\"key\":\"27CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠃⠄\"}},\"key\":\"27CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠉⠄\"}},\"key\":\"27CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠙⠄\"}},\"key\":\"27CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠑⠄\"}},\"key\":\"27CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠉⠋⠄\"}},\"key\":\"27CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠴⠄\"}},\"key\":\"27D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠂⠄\"}},\"key\":\"27D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠆⠄\"}},\"key\":\"27D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠒⠄\"}},\"key\":\"27D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠲⠄\"}},\"key\":\"27D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠢⠄\"}},\"key\":\"27D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠖⠄\"}},\"key\":\"27D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠶⠄\"}},\"key\":\"27D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠦⠄\"}},\"key\":\"27D8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠔⠄\"}},\"key\":\"27D9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠁⠄\"}},\"key\":\"27DA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠃⠄\"}},\"key\":\"27DB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠉⠄\"}},\"key\":\"27DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠙⠄\"}},\"key\":\"27DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠑⠄\"}},\"key\":\"27DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠙⠋⠄\"}},\"key\":\"27DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠴⠄\"}},\"key\":\"27E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠂⠄\"}},\"key\":\"27E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠆⠄\"}},\"key\":\"27E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠒⠄\"}},\"key\":\"27E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠲⠄\"}},\"key\":\"27E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠑⠢⠄\"}},\"key\":\"27E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠃⠄\"}},\"key\":\"292B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠆⠉⠄\"}},\"key\":\"292C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠳⠳⠳\"}},\"key\":\"2980\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠂⠄\"}},\"key\":\"2981\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠦⠆⠄\"}},\"key\":\"2982\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠔⠄\"}},\"key\":\"2999\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠔⠁⠄\"}},\"key\":\"299A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠴⠄\"}},\"key\":\"29B0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠂⠄\"}},\"key\":\"29B1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠆⠄\"}},\"key\":\"29B2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠢⠄\"}},\"key\":\"29B5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠳⠻\"}},\"key\":\"29B6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠫⠇⠻\"}},\"key\":\"29B7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠸⠡⠻\"}},\"key\":\"29B8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠫⠏⠻\"}},\"key\":\"29B9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠁⠄\"}},\"key\":\"29BA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠃⠄\"}},\"key\":\"29BB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠉⠄\"}},\"key\":\"29BC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠃⠑⠄\"}},\"key\":\"29BE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠔⠔⠻\"}},\"key\":\"29BF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠐⠅⠻\"}},\"key\":\"29C0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠨⠂⠻\"}},\"key\":\"29C1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠆⠄\"}},\"key\":\"29C2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠒⠄\"}},\"key\":\"29C3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠲⠄\"}},\"key\":\"29C4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠢⠄\"}},\"key\":\"29C5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠖⠄\"}},\"key\":\"29C6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠶⠄\"}},\"key\":\"29C7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠦⠄\"}},\"key\":\"29C8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠔⠄\"}},\"key\":\"29C9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠁⠄\"}},\"key\":\"29CA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠃⠄\"}},\"key\":\"29CB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠉⠄\"}},\"key\":\"29CC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠙⠄\"}},\"key\":\"29CD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠑⠄\"}},\"key\":\"29CE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠉⠋⠄\"}},\"key\":\"29CF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠴⠄\"}},\"key\":\"29D0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠂⠄\"}},\"key\":\"29D1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠆⠄\"}},\"key\":\"29D2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠒⠄\"}},\"key\":\"29D3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠲⠄\"}},\"key\":\"29D4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠢⠄\"}},\"key\":\"29D5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠖⠄\"}},\"key\":\"29D6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠶⠄\"}},\"key\":\"29D7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠉⠄\"}},\"key\":\"29DC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠙⠄\"}},\"key\":\"29DD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠑⠄\"}},\"key\":\"29DE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠙⠋⠄\"}},\"key\":\"29DF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠴⠄\"}},\"key\":\"29E0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠂⠄\"}},\"key\":\"29E1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠆⠄\"}},\"key\":\"29E2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠒⠄\"}},\"key\":\"29E3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠲⠄\"}},\"key\":\"29E4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠢⠄\"}},\"key\":\"29E5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠖⠄\"}},\"key\":\"29E6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠶⠄\"}},\"key\":\"29E7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠦⠄\"}},\"key\":\"29E8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠔⠄\"}},\"key\":\"29E9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠃⠄\"}},\"key\":\"29EB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠑⠄\"}},\"key\":\"29EE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠑⠋⠄\"}},\"key\":\"29EF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠴⠄\"}},\"key\":\"29F0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠂⠄\"}},\"key\":\"29F1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠆⠄\"}},\"key\":\"29F2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠒⠄\"}},\"key\":\"29F3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠲⠄\"}},\"key\":\"29F4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠢⠄\"}},\"key\":\"29F5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠖⠄\"}},\"key\":\"29F6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠶⠄\"}},\"key\":\"29F7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠦⠄\"}},\"key\":\"29F8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠔⠄\"}},\"key\":\"29F9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠁⠄\"}},\"key\":\"29FA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠃⠄\"}},\"key\":\"29FB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠑⠄\"}},\"key\":\"29FE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠔⠋⠋⠄\"}},\"key\":\"29FF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠡⠻\"}},\"key\":\"2A00\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠬⠻\"}},\"key\":\"2A01\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠈⠡⠻\"}},\"key\":\"2A02\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠒⠄\"}},\"key\":\"2A03\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠲⠄\"}},\"key\":\"2A04\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠢⠄\"}},\"key\":\"2A05\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠖⠄\"}},\"key\":\"2A06\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠶⠄\"}},\"key\":\"2A07\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠦⠄\"}},\"key\":\"2A08\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠔⠄\"}},\"key\":\"2A09\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠁⠄\"}},\"key\":\"2A0A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠃⠄\"}},\"key\":\"2A0B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠉⠄\"}},\"key\":\"2A0C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠙⠄\"}},\"key\":\"2A0D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠑⠄\"}},\"key\":\"2A0E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠴⠋⠄\"}},\"key\":\"2A0F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠴⠄\"}},\"key\":\"2A10\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠂⠄\"}},\"key\":\"2A11\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠆⠄\"}},\"key\":\"2A12\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠒⠄\"}},\"key\":\"2A13\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠲⠄\"}},\"key\":\"2A14\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠢⠄\"}},\"key\":\"2A15\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠖⠄\"}},\"key\":\"2A16\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠦⠄\"}},\"key\":\"2A18\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠔⠄\"}},\"key\":\"2A19\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠁⠄\"}},\"key\":\"2A1A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠃⠄\"}},\"key\":\"2A1B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠉⠄\"}},\"key\":\"2A1C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠙⠄\"}},\"key\":\"2A1D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠑⠄\"}},\"key\":\"2A1E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠂⠋⠄\"}},\"key\":\"2A1F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠴⠄\"}},\"key\":\"2A20\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠂⠄\"}},\"key\":\"2A21\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠆⠄\"}},\"key\":\"2A22\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠒⠄\"}},\"key\":\"2A23\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠲⠄\"}},\"key\":\"2A24\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠢⠄\"}},\"key\":\"2A25\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠖⠄\"}},\"key\":\"2A26\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠶⠄\"}},\"key\":\"2A27\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠦⠄\"}},\"key\":\"2A28\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠔⠄\"}},\"key\":\"2A29\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠁⠄\"}},\"key\":\"2A2A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠃⠄\"}},\"key\":\"2A2B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠉⠄\"}},\"key\":\"2A2C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠙⠄\"}},\"key\":\"2A2D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠑⠄\"}},\"key\":\"2A2E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠆⠋⠄\"}},\"key\":\"2A2F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠴⠄\"}},\"key\":\"2A30\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠂⠄\"}},\"key\":\"2A31\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠆⠄\"}},\"key\":\"2A32\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠒⠄\"}},\"key\":\"2A33\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠲⠄\"}},\"key\":\"2A34\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠢⠄\"}},\"key\":\"2A35\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠖⠄\"}},\"key\":\"2A36\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠶⠄\"}},\"key\":\"2A37\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠫⠉⠸⠫⠈⠌⠻\"}},\"key\":\"2A38\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠔⠄\"}},\"key\":\"2A39\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠁⠄\"}},\"key\":\"2A3A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠃⠄\"}},\"key\":\"2A3B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠉⠄\"}},\"key\":\"2A3C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠙⠄\"}},\"key\":\"2A3D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠑⠄\"}},\"key\":\"2A3E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠒⠋⠄\"}},\"key\":\"2A3F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠴⠄\"}},\"key\":\"2A40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠂⠄\"}},\"key\":\"2A41\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠆⠄\"}},\"key\":\"2A42\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠒⠄\"}},\"key\":\"2A43\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠲⠄\"}},\"key\":\"2A44\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠢⠄\"}},\"key\":\"2A45\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠖⠄\"}},\"key\":\"2A46\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠶⠄\"}},\"key\":\"2A47\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠦⠄\"}},\"key\":\"2A48\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠔⠄\"}},\"key\":\"2A49\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠁⠄\"}},\"key\":\"2A4A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠃⠄\"}},\"key\":\"2A4B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠉⠄\"}},\"key\":\"2A4C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠙⠄\"}},\"key\":\"2A4D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠑⠄\"}},\"key\":\"2A4E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠲⠋⠄\"}},\"key\":\"2A4F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠴⠄\"}},\"key\":\"2A50\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠂⠄\"}},\"key\":\"2A51\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠆⠄\"}},\"key\":\"2A52\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠒⠄\"}},\"key\":\"2A53\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠲⠄\"}},\"key\":\"2A54\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠢⠄\"}},\"key\":\"2A55\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠖⠄\"}},\"key\":\"2A56\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠶⠄\"}},\"key\":\"2A57\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠦⠄\"}},\"key\":\"2A58\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠔⠄\"}},\"key\":\"2A59\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠁⠄\"}},\"key\":\"2A5A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠃⠄\"}},\"key\":\"2A5B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠉⠄\"}},\"key\":\"2A5C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠙⠄\"}},\"key\":\"2A5D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠑⠄\"}},\"key\":\"2A5E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠢⠋⠄\"}},\"key\":\"2A5F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠴⠄\"}},\"key\":\"2A60\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠂⠄\"}},\"key\":\"2A61\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠆⠄\"}},\"key\":\"2A62\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠒⠄\"}},\"key\":\"2A63\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠲⠄\"}},\"key\":\"2A64\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠢⠄\"}},\"key\":\"2A65\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠖⠄\"}},\"key\":\"2A66\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠶⠄\"}},\"key\":\"2A67\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠦⠄\"}},\"key\":\"2A68\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠔⠄\"}},\"key\":\"2A69\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠁⠄\"}},\"key\":\"2A6A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠃⠄\"}},\"key\":\"2A6B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠉⠄\"}},\"key\":\"2A6C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠙⠄\"}},\"key\":\"2A6D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠑⠄\"}},\"key\":\"2A6E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠖⠋⠄\"}},\"key\":\"2A6F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠴⠄\"}},\"key\":\"2A70\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠂⠄\"}},\"key\":\"2A71\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠆⠄\"}},\"key\":\"2A72\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠒⠄\"}},\"key\":\"2A73\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠲⠄\"}},\"key\":\"2A74\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠢⠄\"}},\"key\":\"2A75\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠖⠄\"}},\"key\":\"2A76\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠶⠄\"}},\"key\":\"2A77\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠦⠄\"}},\"key\":\"2A78\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠔⠄\"}},\"key\":\"2A79\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠁⠄\"}},\"key\":\"2A7A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠃⠄\"}},\"key\":\"2A7B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠉⠄\"}},\"key\":\"2A7C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠙⠄\"}},\"key\":\"2A7D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠑⠄\"}},\"key\":\"2A7E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠶⠋⠄\"}},\"key\":\"2A7F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠴⠄\"}},\"key\":\"2A80\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠂⠄\"}},\"key\":\"2A81\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠆⠄\"}},\"key\":\"2A82\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠒⠄\"}},\"key\":\"2A83\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠲⠄\"}},\"key\":\"2A84\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠢⠄\"}},\"key\":\"2A85\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠖⠄\"}},\"key\":\"2A86\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠶⠄\"}},\"key\":\"2A87\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠦⠄\"}},\"key\":\"2A88\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠔⠄\"}},\"key\":\"2A89\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠁⠄\"}},\"key\":\"2A8A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠃⠄\"}},\"key\":\"2A8B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠉⠄\"}},\"key\":\"2A8C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠙⠄\"}},\"key\":\"2A8D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠑⠄\"}},\"key\":\"2A8E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠦⠋⠄\"}},\"key\":\"2A8F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠴⠄\"}},\"key\":\"2A90\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠂⠄\"}},\"key\":\"2A91\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠆⠄\"}},\"key\":\"2A92\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠒⠄\"}},\"key\":\"2A93\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠲⠄\"}},\"key\":\"2A94\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠢⠄\"}},\"key\":\"2A95\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠖⠄\"}},\"key\":\"2A96\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠶⠄\"}},\"key\":\"2A97\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠦⠄\"}},\"key\":\"2A98\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠔⠄\"}},\"key\":\"2A99\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠁⠄\"}},\"key\":\"2A9A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠃⠄\"}},\"key\":\"2A9B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠉⠄\"}},\"key\":\"2A9C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠙⠄\"}},\"key\":\"2A9D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠑⠄\"}},\"key\":\"2A9E\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠔⠋⠄\"}},\"key\":\"2A9F\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠴⠄\"}},\"key\":\"2AA0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠂⠄\"}},\"key\":\"2AA1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠆⠄\"}},\"key\":\"2AA2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠒⠄\"}},\"key\":\"2AA3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠲⠄\"}},\"key\":\"2AA4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠢⠄\"}},\"key\":\"2AA5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠖⠄\"}},\"key\":\"2AA6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠶⠄\"}},\"key\":\"2AA7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠦⠄\"}},\"key\":\"2AA8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠔⠄\"}},\"key\":\"2AA9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠁⠄\"}},\"key\":\"2AAA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠃⠄\"}},\"key\":\"2AAB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠉⠄\"}},\"key\":\"2AAC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠙⠄\"}},\"key\":\"2AAD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠁⠑⠄\"}},\"key\":\"2AAE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠱⠀\"}},\"key\":\"2AAF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠱⠀\"}},\"key\":\"2AB0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠌⠱⠀\"}},\"key\":\"2AB1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠌⠱⠀\"}},\"key\":\"2AB2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠨⠅⠀\"}},\"key\":\"2AB3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠨⠅⠀\"}},\"key\":\"2AB4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠌⠨⠅⠀\"}},\"key\":\"2AB5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠌⠨⠅⠀\"}},\"key\":\"2AB6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠈⠱⠈⠱⠀\"}},\"key\":\"2AB7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠈⠱⠈⠱⠀\"}},\"key\":\"2AB8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠌⠈⠱⠈⠱⠀\"}},\"key\":\"2AB9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠌⠈⠱⠈⠱⠀\"}},\"key\":\"2ABA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠐⠅⠈⠨⠐⠅⠻⠀\"}},\"key\":\"2ABB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠀⠨⠨⠐⠈⠨⠨⠐⠻⠀\"}},\"key\":\"2ABC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠃⠙⠄\"}},\"key\":\"2ABD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠃⠑⠄\"}},\"key\":\"2ABE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠃⠋⠄\"}},\"key\":\"2ABF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠴⠄\"}},\"key\":\"2AC0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠂⠄\"}},\"key\":\"2AC1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠆⠄\"}},\"key\":\"2AC2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠒⠄\"}},\"key\":\"2AC3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠲⠄\"}},\"key\":\"2AC4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠢⠄\"}},\"key\":\"2AC5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠖⠄\"}},\"key\":\"2AC6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠶⠄\"}},\"key\":\"2AC7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠦⠄\"}},\"key\":\"2AC8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠔⠄\"}},\"key\":\"2AC9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠁⠄\"}},\"key\":\"2ACA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠃⠄\"}},\"key\":\"2ACB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠉⠄\"}},\"key\":\"2ACC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠙⠄\"}},\"key\":\"2ACD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠑⠄\"}},\"key\":\"2ACE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠉⠋⠄\"}},\"key\":\"2ACF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠴⠄\"}},\"key\":\"2AD0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠂⠄\"}},\"key\":\"2AD1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠆⠄\"}},\"key\":\"2AD2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠒⠄\"}},\"key\":\"2AD3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠲⠄\"}},\"key\":\"2AD4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠢⠄\"}},\"key\":\"2AD5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠖⠄\"}},\"key\":\"2AD6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠶⠄\"}},\"key\":\"2AD7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠦⠄\"}},\"key\":\"2AD8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠔⠄\"}},\"key\":\"2AD9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠁⠄\"}},\"key\":\"2ADA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠃⠄\"}},\"key\":\"2ADB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠉⠄\"}},\"key\":\"2ADC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠙⠄\"}},\"key\":\"2ADD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠑⠄\"}},\"key\":\"2ADE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠙⠋⠄\"}},\"key\":\"2ADF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠴⠄\"}},\"key\":\"2AE0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠂⠄\"}},\"key\":\"2AE1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠆⠄\"}},\"key\":\"2AE2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠒⠄\"}},\"key\":\"2AE3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠲⠄\"}},\"key\":\"2AE4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠢⠄\"}},\"key\":\"2AE5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠖⠄\"}},\"key\":\"2AE6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠶⠄\"}},\"key\":\"2AE7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠦⠄\"}},\"key\":\"2AE8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠔⠄\"}},\"key\":\"2AE9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠁⠄\"}},\"key\":\"2AEA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠃⠄\"}},\"key\":\"2AEB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠉⠄\"}},\"key\":\"2AEC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠙⠄\"}},\"key\":\"2AED\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠑⠄\"}},\"key\":\"2AEE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠑⠋⠄\"}},\"key\":\"2AEF\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠴⠄\"}},\"key\":\"2AF0\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠂⠄\"}},\"key\":\"2AF1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠆⠄\"}},\"key\":\"2AF2\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠒⠄\"}},\"key\":\"2AF3\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠲⠄\"}},\"key\":\"2AF4\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠢⠄\"}},\"key\":\"2AF5\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠖⠄\"}},\"key\":\"2AF6\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠶⠄\"}},\"key\":\"2AF7\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠦⠄\"}},\"key\":\"2AF8\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠔⠄\"}},\"key\":\"2AF9\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠁⠄\"}},\"key\":\"2AFA\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠃⠄\"}},\"key\":\"2AFB\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠉⠄\"}},\"key\":\"2AFC\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠙⠄\"}},\"key\":\"2AFD\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠑⠄\"}},\"key\":\"2AFE\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠁⠋⠋⠄\"}},\"key\":\"2AFF\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠒⠴⠂⠉⠄\"}},\"key\":\"301C\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠴⠄\"}},\"key\":\"FE10\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠒⠄\"}},\"key\":\"FE13\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠲⠄\"}},\"key\":\"FE14\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠢⠄\"}},\"key\":\"FE15\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠖⠄\"}},\"key\":\"FE16\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠂⠔⠄\"}},\"key\":\"FE19\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠴⠄\"}},\"key\":\"FE30\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠂⠄\"}},\"key\":\"FE31\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠆⠄\"}},\"key\":\"FE32\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠒⠄\"}},\"key\":\"FE33\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠒⠲⠄\"}},\"key\":\"FE34\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠢⠄\"}},\"key\":\"FE45\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠖⠄\"}},\"key\":\"FE46\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠔⠄\"}},\"key\":\"FE49\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠁⠄\"}},\"key\":\"FE4A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠃⠄\"}},\"key\":\"FE4B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠉⠄\"}},\"key\":\"FE4C\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠙⠄\"}},\"key\":\"FE4D\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠑⠄\"}},\"key\":\"FE4E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠲⠋⠄\"}},\"key\":\"FE4F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠴⠄\"}},\"key\":\"FE50\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠆⠄\"}},\"key\":\"FE52\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠲⠄\"}},\"key\":\"FE54\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠢⠄\"}},\"key\":\"FE55\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠖⠄\"}},\"key\":\"FE56\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠶⠄\"}},\"key\":\"FE57\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠦⠄\"}},\"key\":\"FE58\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠢⠋⠄\"}},\"key\":\"FE5F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠴⠄\"}},\"key\":\"FE60\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠂⠄\"}},\"key\":\"FE61\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠆⠄\"}},\"key\":\"FE62\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠒⠄\"}},\"key\":\"FE63\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠲⠄\"}},\"key\":\"FE64\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠢⠄\"}},\"key\":\"FE65\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠖⠄\"}},\"key\":\"FE66\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠦⠄\"}},\"key\":\"FE68\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠔⠄\"}},\"key\":\"FE69\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠁⠄\"}},\"key\":\"FE6A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠖⠃⠄\"}},\"key\":\"FE6B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠂⠄\"}},\"key\":\"FF01\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠆⠄\"}},\"key\":\"FF02\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠒⠄\"}},\"key\":\"FF03\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠲⠄\"}},\"key\":\"FF04\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠢⠄\"}},\"key\":\"FF05\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠖⠄\"}},\"key\":\"FF06\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠶⠄\"}},\"key\":\"FF07\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠁⠄\"}},\"key\":\"FF0A\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠃⠄\"}},\"key\":\"FF0B\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠉⠄\"}},\"key\":\"FF0C\"},{\"category\":\"Pd\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠙⠄\"}},\"key\":\"FF0D\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠑⠄\"}},\"key\":\"FF0E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠴⠋⠄\"}},\"key\":\"FF0F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠁⠄\"}},\"key\":\"FF1A\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠃⠄\"}},\"key\":\"FF1B\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠉⠄\"}},\"key\":\"FF1C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠙⠄\"}},\"key\":\"FF1D\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠑⠄\"}},\"key\":\"FF1E\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠂⠋⠄\"}},\"key\":\"FF1F\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠆⠴⠄\"}},\"key\":\"FF20\"},{\"category\":\"Po\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠒⠉⠄\"}},\"key\":\"FF3C\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠒⠑⠄\"}},\"key\":\"FF3E\"},{\"category\":\"Pc\",\"mappings\":{\"default\":{\"default\":\"⠱\"}},\"key\":\"FF3F\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠲⠴⠄\"}},\"key\":\"FF40\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠢⠉⠄\"}},\"key\":\"FF5C\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠈⠱\"}},\"key\":\"FF5E\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠴⠄\"}},\"key\":\"FFE0\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠂⠄\"}},\"key\":\"FFE1\"},{\"category\":\"Sm\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠆⠄\"}},\"key\":\"FFE2\"},{\"category\":\"Sk\",\"mappings\":{\"default\":{\"default\":\"⠱\"}},\"key\":\"FFE3\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠲⠄\"}},\"key\":\"FFE4\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠢⠄\"}},\"key\":\"FFE5\"},{\"category\":\"Sc\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠖⠄\"}},\"key\":\"FFE6\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠦⠄\"}},\"key\":\"FFE8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠙⠄\"}},\"key\":\"FFED\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠑⠑⠄\"}},\"key\":\"FFEE\"}]\n,\n\"nemeth/symbols/math_whitespace.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"0020\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"00A0\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠤\"}},\"key\":\"00AD\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2000\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2001\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2002\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2003\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2004\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2005\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2006\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2007\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2008\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2009\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"200A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"200B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"\"}},\"key\":\"200C\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"\"}},\"key\":\"200D\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠴⠑⠄\"}},\"key\":\"200E\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠴⠋⠄\"}},\"key\":\"200F\"},{\"category\":\"Zl\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠦⠄\"}},\"key\":\"2028\"},{\"category\":\"Zp\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠔⠄\"}},\"key\":\"2029\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠁⠄\"}},\"key\":\"202A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠃⠄\"}},\"key\":\"202B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠉⠄\"}},\"key\":\"202C\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠙⠄\"}},\"key\":\"202D\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠆⠑⠄\"}},\"key\":\"202E\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"202F\"},{\"category\":\"Zs\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"205F\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"\"}},\"key\":\"2060\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠀\"}},\"key\":\"2061\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠈⠡\"}},\"key\":\"2062\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠠\"}},\"key\":\"2063\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠬\"}},\"key\":\"2064\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠖⠁⠄\"}},\"key\":\"206A\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠖⠃⠄\"}},\"key\":\"206B\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠖⠑⠄\"}},\"key\":\"206E\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠴⠖⠋⠄\"}},\"key\":\"206F\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠑⠋⠋⠄\"}},\"key\":\"FEFF\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠋⠔⠄\"}},\"key\":\"FFF9\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠋⠁⠄\"}},\"key\":\"FFFA\"},{\"category\":\"Cf\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠋⠋⠋⠃⠄\"}},\"key\":\"FFFB\"}]\n,\n\"nemeth/symbols/other_stars.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠒⠑⠦⠄\"}},\"key\":\"23E8\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠖⠴⠢⠄\"}},\"key\":\"2605\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠫⠎\"}},\"key\":\"2606\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠖⠁⠁⠄\"}},\"key\":\"26AA\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠖⠁⠃⠄\"}},\"key\":\"26AB\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠴⠢⠄\"}},\"key\":\"2705\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠒⠄\"}},\"key\":\"2713\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠲⠄\"}},\"key\":\"2714\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠈⠡\"}},\"key\":\"2715\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠖⠄\"}},\"key\":\"2716\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠶⠄\"}},\"key\":\"2717\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠦⠄\"}},\"key\":\"2718\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠃⠄\"}},\"key\":\"271B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠂⠉⠄\"}},\"key\":\"271C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠴⠄\"}},\"key\":\"2720\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠂⠄\"}},\"key\":\"2721\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠆⠄\"}},\"key\":\"2722\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠒⠄\"}},\"key\":\"2723\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠲⠄\"}},\"key\":\"2724\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠢⠄\"}},\"key\":\"2725\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠖⠄\"}},\"key\":\"2726\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠶⠄\"}},\"key\":\"2727\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠦⠄\"}},\"key\":\"2728\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠔⠄\"}},\"key\":\"2729\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠁⠄\"}},\"key\":\"272A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠃⠄\"}},\"key\":\"272B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠉⠄\"}},\"key\":\"272C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠙⠄\"}},\"key\":\"272D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠑⠄\"}},\"key\":\"272E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠆⠋⠄\"}},\"key\":\"272F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠴⠄\"}},\"key\":\"2730\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠂⠄\"}},\"key\":\"2731\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠆⠄\"}},\"key\":\"2732\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠒⠄\"}},\"key\":\"2733\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠲⠄\"}},\"key\":\"2734\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠢⠄\"}},\"key\":\"2735\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠖⠄\"}},\"key\":\"2736\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠔⠄\"}},\"key\":\"2739\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠁⠄\"}},\"key\":\"273A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠃⠄\"}},\"key\":\"273B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠉⠄\"}},\"key\":\"273C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠙⠄\"}},\"key\":\"273D\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠑⠄\"}},\"key\":\"273E\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠒⠋⠄\"}},\"key\":\"273F\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠴⠄\"}},\"key\":\"2740\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠂⠄\"}},\"key\":\"2741\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠆⠄\"}},\"key\":\"2742\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠒⠄\"}},\"key\":\"2743\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠲⠄\"}},\"key\":\"2744\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠢⠄\"}},\"key\":\"2745\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠖⠄\"}},\"key\":\"2746\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠶⠄\"}},\"key\":\"2747\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠦⠄\"}},\"key\":\"2748\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠔⠄\"}},\"key\":\"2749\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠁⠄\"}},\"key\":\"274A\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠃⠄\"}},\"key\":\"274B\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠉⠄\"}},\"key\":\"274C\"},{\"category\":\"So\",\"mappings\":{\"default\":{\"default\":\"⠄⡳⠭⠆⠶⠲⠙⠄\"}},\"key\":\"274D\"}]\n,\n\"nemeth/units/energy.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠠⠺\"}},\"key\":\"W\",\"names\":[\"W\",\"w\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠅⠠⠺\"}},\"key\":\"kW\",\"names\":[\"kw\",\"kW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠍⠠⠺\"}},\"key\":\"mW\",\"names\":[\"mw\",\"mW\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠅⠺⠓\"}},\"key\":\"kwh\",\"names\":[\"kwh\",\"kWh\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠠⠚\"}},\"key\":\"J\",\"names\":[\"J\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠠⠝\"}},\"key\":\"N\",\"names\":[\"N\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠠⠁\"}},\"key\":\"A\",\"names\":[\"A\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠠⠧\"}},\"key\":\"V\",\"names\":[\"V\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠨⠍⠨⠠⠺\"}},\"key\":\"µΩ\",\"names\":[\"µΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠍⠨⠠⠺\"}},\"key\":\"mΩ\",\"names\":[\"mΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠨⠠⠺\"}},\"key\":\"Ω\",\"names\":[\"Ω\",\"Ohm\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠅⠨⠠⠺\"}},\"key\":\"kΩ\",\"names\":[\"kΩ\",\"KΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠨⠠⠺\"}},\"key\":\"Ω\",\"names\":[\"Ω\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠍⠨⠠⠺\"}},\"key\":\"MΩ\",\"names\":[\"MΩ\"]},{\"category\":\"energy\",\"mappings\":{\"default\":{\"default\":\"⠛⠨⠠⠺\"}},\"key\":\"GΩ\",\"names\":[\"GΩ\"]}]\n,\n\"nemeth/units/length.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠍⠍\"}},\"key\":\"mm\",\"names\":[\"mm\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠉⠍\"}},\"key\":\"cm\",\"names\":[\"cm\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠍\"}},\"key\":\"m\",\"names\":[\"m\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠅⠍\"}},\"key\":\"km\",\"names\":[\"km\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠋⠞\"}},\"key\":\"ft\",\"names\":[\"ft\",\"ft.\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠊⠝\"}},\"key\":\"in\",\"names\":[\"in\",\"in.\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠍⠊\"}},\"key\":\"mi\",\"names\":[\"mi\",\"mi.\"]},{\"category\":\"Length\",\"mappings\":{\"default\":{\"default\":\"⠽⠙\"}},\"key\":\"yd\",\"names\":[\"yd\",\"yd.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠝⠲⠍⠸⠲\"}},\"key\":\"n.m.\",\"names\":[\"n.m.\"]}]\n,\n\"nemeth/units/memory.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠃\"}},\"key\":\"b\",\"names\":[\"b\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠠⠃\"}},\"key\":\"B\",\"names\":[\"B\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠅⠃\"}},\"key\":\"KB\",\"names\":[\"KB\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠍⠃\"}},\"key\":\"MB\",\"names\":[\"MB\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠛⠃\"}},\"key\":\"GB\",\"names\":[\"GB\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠞⠃\"}},\"key\":\"TB\",\"names\":[\"TB\"]}]\n,\n\"nemeth/units/other.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠙⠕⠵\"}},\"key\":\"doz\",\"names\":[\"doz\",\"doz.\",\"dz\",\"dz.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠎⠟\"}},\"key\":\"sq\",\"names\":[\"sq\",\"sq.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠓⠁\"}},\"key\":\"ha\",\"names\":[\"ha\"]}]\n,\n\"nemeth/units/speed.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠅⠞\"}},\"key\":\"kt\",\"names\":[\"kt\",\"kt.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠍⠏⠓\"}},\"key\":\"mph\",\"names\":[\"mph\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠗⠏⠍\"}},\"key\":\"rpm\",\"names\":[\"rpm\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠅⠍⠓\"}},\"key\":\"kmh\",\"names\":[\"kmh\"]}]\n,\n\"nemeth/units/temperature.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠠⠋\"}},\"key\":\"F\",\"names\":[\"F\",\"F.\",\"°F\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠠⠉\"}},\"key\":\"C\",\"names\":[\"C\",\"°C\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠠⠅\"}},\"key\":\"K\",\"names\":[\"K\",\"°K\"]}]\n,\n\"nemeth/units/time.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠝⠎\"}},\"key\":\"ns\",\"names\":[\"ns\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠨⠍⠎\"}},\"key\":\"µs\",\"names\":[\"µs\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠍⠎\"}},\"key\":\"ms\",\"names\":[\"ms\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠎\"}},\"key\":\"s\",\"names\":[\"s\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠍⠊⠝⠀\"}},\"key\":\"min\",\"names\":[\"min\"]},{\"category\":\"time\",\"mappings\":{\"default\":{\"default\":\"⠓\"}},\"key\":\"h\",\"names\":[\"h\",\"hr\"]}]\n,\n\"nemeth/units/volume.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠃⠃⠇\"}},\"key\":\"bbl\",\"names\":[\"bbl.\",\"bbl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠉⠥\"}},\"key\":\"cu\",\"names\":[\"cu\",\"cu.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠋⠇⠸⠲⠀⠕⠵⠸⠲\"}},\"key\":\"fl. oz.\",\"names\":[\"fl. oz.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠛⠁⠇\"}},\"key\":\"gal\",\"names\":[\"gal\",\"gal.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠏⠞\"}},\"key\":\"pt\",\"names\":[\"pt\",\"pt.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠟⠞\"}},\"key\":\"qt\",\"names\":[\"qt\",\"qt.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠞⠃⠎⠏\"}},\"key\":\"tbsp\",\"names\":[\"tbsp\",\"tbsp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠞⠎⠏\"}},\"key\":\"tsp\",\"names\":[\"tsp\",\"tsp.\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠉⠉\"}},\"key\":\"cc\",\"names\":[\"cc\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠅⠇\"}},\"key\":\"kl\",\"names\":[\"kl\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠇\"}},\"key\":\"l\",\"names\":[\"l\"]},{\"category\":\"volume\",\"mappings\":{\"default\":{\"default\":\"⠍⠇\"}},\"key\":\"ml\",\"names\":[\"ml\"]}]\n,\n\"nemeth/units/weight.js\": \n[{\"locale\":\"nemeth\"},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠇⠃\"}},\"key\":\"lb\",\"names\":[\"lb\",\"lb.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠇⠞\"}},\"key\":\"LT\",\"names\":[\"LT\",\"L.T.\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠕⠵\"}},\"key\":\"oz\",\"names\":[\"oz\",\"oz.\"]},{\"key\":\"µg\",\"names\":[\"µg\",\"mcg\"],\"mappings\":{\"default\":{\"default\":\"⠨⠍⠛\"}}},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠛⠗\"}},\"key\":\"gr\",\"names\":[\"g\",\"gr\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠅⠛\"}},\"key\":\"kg\",\"names\":[\"kg\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠍⠉⠛\"}},\"key\":\"mcg\",\"names\":[\"mg\",\"µg\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠍⠛\"}},\"key\":\"mg\",\"names\":[\"mg\"]},{\"category\":\"\",\"mappings\":{\"default\":{\"default\":\"⠞\"}},\"key\":\"t\",\"names\":[\"t\",\"T\"]}]\n}\n\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/sre/sre-node.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar SRE = require(\"speech-rule-engine\");\nglobal.SRE = SRE;\nglobal.sre = Object.create(SRE);\nglobal.sre.Engine = {\n    isReady: function () {\n        return SRE.engineReady();\n    }\n};\n//# sourceMappingURL=sre-node.js.map"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/sre/sre_browser.js",
    "content": "// Copyright 2014-2019 Volker Sorge\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/*\n\n Copyright The Closure Library Authors.\n SPDX-License-Identifier: Apache-2.0\n*/\nvar $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var b=\"undefined\"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):$jscomp.arrayIterator(a)};$jscomp.arrayFromIterator=function(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c};\n$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||\"function\"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\n$jscomp.getGlobal=function(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error(\"Cannot find global object\");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.IS_SYMBOL_NATIVE=\"function\"===typeof Symbol&&\"symbol\"===typeof Symbol(\"x\");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};\n$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX=\"$jscp$\";var $jscomp$lookupPolyfilledValue=function(a,b){var c=$jscomp.propertyToPolyfillSymbol[b];if(null==c)return a[b];c=a[c];return void 0!==c?c:a[b]};$jscomp.polyfill=function(a,b,c,d){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,c,d):$jscomp.polyfillUnisolated(a,b,c,d))};\n$jscomp.polyfillUnisolated=function(a,b,c,d){c=$jscomp.global;a=a.split(\".\");for(d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))return;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})};\n$jscomp.polyfillIsolated=function(a,b,c,d){var e=a.split(\".\");a=1===e.length;d=e[0];d=!a&&d in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var f=0;f<e.length-1;f++){var g=e[f];if(!(g in d))return;d=d[g]}e=e[e.length-1];c=$jscomp.IS_SYMBOL_NATIVE&&\"es6\"===c?d[e]:null;b=b(c);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,e,{configurable:!0,writable:!0,value:b}):b!==c&&($jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+e,e=\n$jscomp.propertyToPolyfillSymbol[e],$jscomp.defineProperty(d,e,{configurable:!0,writable:!0,value:b})))};$jscomp.initSymbol=function(){};\n$jscomp.polyfill(\"Symbol\",function(a){if(a)return a;var b=function(e,f){this.$jscomp$symbol$id_=e;$jscomp.defineProperty(this,\"description\",{configurable:!0,writable:!0,value:f})};b.prototype.toString=function(){return this.$jscomp$symbol$id_};var c=0,d=function(e){if(this instanceof d)throw new TypeError(\"Symbol is not a constructor\");return new b(\"jscomp_symbol_\"+(e||\"\")+\"_\"+c++,e)};return d},\"es6\",\"es3\");$jscomp.initSymbolIterator=function(){};\n$jscomp.polyfill(\"Symbol.iterator\",function(a){if(a)return a;a=Symbol(\"Symbol.iterator\");for(var b=\"Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array\".split(\" \"),c=0;c<b.length;c++){var d=$jscomp.global[b[c]];\"function\"===typeof d&&\"function\"!=typeof d.prototype[a]&&$jscomp.defineProperty(d.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this))}})}return a},\"es6\",\n\"es3\");$jscomp.initSymbolAsyncIterator=function(){};$jscomp.iteratorPrototype=function(a){a={next:a};a[Symbol.iterator]=function(){return this};return a};$jscomp.iteratorFromArray=function(a,b){a instanceof String&&(a+=\"\");var c=0,d={next:function(){if(c<a.length){var e=c++;return{value:b(e,a[e]),done:!1}}d.next=function(){return{done:!0,value:void 0}};return d.next()}};d[Symbol.iterator]=function(){return d};return d};\n$jscomp.polyfill(\"Array.prototype.keys\",function(a){return a?a:function(){return $jscomp.iteratorFromArray(this,function(b){return b})}},\"es6\",\"es3\");$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(b.call(c,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.polyfill(\"Array.prototype.find\",function(a){return a?a:function(b,c){return $jscomp.findInternal(this,b,c).v}},\"es6\",\"es3\");\n$jscomp.checkStringArgs=function(a,b,c){if(null==a)throw new TypeError(\"The 'this' value for String.prototype.\"+c+\" must not be null or undefined\");if(b instanceof RegExp)throw new TypeError(\"First argument to String.prototype.\"+c+\" must not be a regular expression\");return a+\"\"};\n$jscomp.polyfill(\"String.prototype.repeat\",function(a){return a?a:function(b){var c=$jscomp.checkStringArgs(this,null,\"repeat\");if(0>b||1342177279<b)throw new RangeError(\"Invalid count value\");b|=0;for(var d=\"\";b;)if(b&1&&(d+=c),b>>>=1)c+=c;return d}},\"es6\",\"es3\");var COMPILED=!0,goog=goog||{};goog.global=this||self;\ngoog.exportPath_=function(a,b,c){a=a.split(\".\");c=c||goog.global;a[0]in c||\"undefined\"==typeof c.execScript||c.execScript(\"var \"+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}:c[d]=b};\ngoog.define=function(a,b){if(!COMPILED){var c=goog.global.CLOSURE_UNCOMPILED_DEFINES,d=goog.global.CLOSURE_DEFINES;c&&void 0===c.nodeType&&Object.prototype.hasOwnProperty.call(c,a)?b=c[a]:d&&void 0===d.nodeType&&Object.prototype.hasOwnProperty.call(d,a)&&(b=d[a])}return b};goog.FEATURESET_YEAR=2012;goog.DEBUG=!0;goog.LOCALE=\"en\";goog.TRUSTED_SITE=!0;goog.STRICT_MODE_COMPATIBLE=!1;goog.DISALLOW_TEST_ONLY_CODE=COMPILED&&!goog.DEBUG;goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING=!1;\ngoog.provide=function(a){if(goog.isInModuleLoader_())throw Error(\"goog.provide cannot be used within a module.\");if(!COMPILED&&goog.isProvided_(a))throw Error('Namespace \"'+a+'\" already declared.');goog.constructNamespace_(a)};goog.constructNamespace_=function(a,b){if(!COMPILED){delete goog.implicitNamespaces_[a];for(var c=a;(c=c.substring(0,c.lastIndexOf(\".\")))&&!goog.getObjectByName(c);)goog.implicitNamespaces_[c]=!0}goog.exportPath_(a,b)};\ngoog.getScriptNonce=function(a){if(a&&a!=goog.global)return goog.getScriptNonce_(a.document);null===goog.cspNonce_&&(goog.cspNonce_=goog.getScriptNonce_(goog.global.document));return goog.cspNonce_};goog.NONCE_PATTERN_=/^[\\w+/_-]+[=]{0,2}$/;goog.cspNonce_=null;goog.getScriptNonce_=function(a){return(a=a.querySelector&&a.querySelector(\"script[nonce]\"))&&(a=a.nonce||a.getAttribute(\"nonce\"))&&goog.NONCE_PATTERN_.test(a)?a:\"\"};goog.VALID_MODULE_RE_=/^[a-zA-Z_$][a-zA-Z0-9._$]*$/;\ngoog.module=function(a){if(\"string\"!==typeof a||!a||-1==a.search(goog.VALID_MODULE_RE_))throw Error(\"Invalid module identifier\");if(!goog.isInGoogModuleLoader_())throw Error(\"Module \"+a+\" has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.\");\nif(goog.moduleLoaderState_.moduleName)throw Error(\"goog.module may only be called once per module.\");goog.moduleLoaderState_.moduleName=a;if(!COMPILED){if(goog.isProvided_(a))throw Error('Namespace \"'+a+'\" already declared.');delete goog.implicitNamespaces_[a]}};goog.module.get=function(a){return goog.module.getInternal_(a)};\ngoog.module.getInternal_=function(a){if(!COMPILED){if(a in goog.loadedModules_)return goog.loadedModules_[a].exports;if(!goog.implicitNamespaces_[a])return a=goog.getObjectByName(a),null!=a?a:null}return null};goog.ModuleType={ES6:\"es6\",GOOG:\"goog\"};goog.moduleLoaderState_=null;goog.isInModuleLoader_=function(){return goog.isInGoogModuleLoader_()||goog.isInEs6ModuleLoader_()};goog.isInGoogModuleLoader_=function(){return!!goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.GOOG};\ngoog.isInEs6ModuleLoader_=function(){if(goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.ES6)return!0;var a=goog.global.$jscomp;return a?\"function\"!=typeof a.getCurrentModulePath?!1:!!a.getCurrentModulePath():!1};\ngoog.module.declareLegacyNamespace=function(){if(!COMPILED&&!goog.isInGoogModuleLoader_())throw Error(\"goog.module.declareLegacyNamespace must be called from within a goog.module\");if(!COMPILED&&!goog.moduleLoaderState_.moduleName)throw Error(\"goog.module must be called prior to goog.module.declareLegacyNamespace.\");goog.moduleLoaderState_.declareLegacyNamespace=!0};\ngoog.declareModuleId=function(a){if(!COMPILED){if(!goog.isInEs6ModuleLoader_())throw Error(\"goog.declareModuleId may only be called from within an ES6 module\");if(goog.moduleLoaderState_&&goog.moduleLoaderState_.moduleName)throw Error(\"goog.declareModuleId may only be called once per module.\");if(a in goog.loadedModules_)throw Error('Module with namespace \"'+a+'\" already exists.');}if(goog.moduleLoaderState_)goog.moduleLoaderState_.moduleName=a;else{var b=goog.global.$jscomp;if(!b||\"function\"!=typeof b.getCurrentModulePath)throw Error('Module with namespace \"'+\na+'\" has been loaded incorrectly.');b=b.require(b.getCurrentModulePath());goog.loadedModules_[a]={exports:b,type:goog.ModuleType.ES6,moduleId:a}}};goog.setTestOnly=function(a){if(goog.DISALLOW_TEST_ONLY_CODE)throw a=a||\"\",Error(\"Importing test-only code into non-debug environment\"+(a?\": \"+a:\".\"));};goog.forwardDeclare=function(a){};COMPILED||(goog.isProvided_=function(a){return a in goog.loadedModules_||!goog.implicitNamespaces_[a]&&null!=goog.getObjectByName(a)},goog.implicitNamespaces_={\"goog.module\":!0});\ngoog.getObjectByName=function(a,b){a=a.split(\".\");b=b||goog.global;for(var c=0;c<a.length;c++)if(b=b[a[c]],null==b)return null;return b};goog.globalize=function(a,b){b=b||goog.global;for(var c in a)b[c]=a[c]};goog.addDependency=function(a,b,c,d){!COMPILED&&goog.DEPENDENCIES_ENABLED&&goog.debugLoader_.addDependency(a,b,c,d)};goog.ENABLE_DEBUG_LOADER=!0;goog.logToConsole_=function(a){goog.global.console&&goog.global.console.error(a)};\ngoog.require=function(a){if(!COMPILED){goog.ENABLE_DEBUG_LOADER&&goog.debugLoader_.requested(a);if(goog.isProvided_(a)){if(goog.isInModuleLoader_())return goog.module.getInternal_(a)}else if(goog.ENABLE_DEBUG_LOADER){var b=goog.moduleLoaderState_;goog.moduleLoaderState_=null;try{goog.debugLoader_.load_(a)}finally{goog.moduleLoaderState_=b}}return null}};goog.requireType=function(a){return{}};goog.basePath=\"\";goog.nullFunction=function(){};\ngoog.abstractMethod=function(){throw Error(\"unimplemented abstract method\");};goog.addSingletonGetter=function(a){a.instance_=void 0;a.getInstance=function(){if(a.instance_)return a.instance_;goog.DEBUG&&(goog.instantiatedSingletons_[goog.instantiatedSingletons_.length]=a);return a.instance_=new a}};goog.instantiatedSingletons_=[];goog.LOAD_MODULE_USING_EVAL=!0;goog.SEAL_MODULE_EXPORTS=goog.DEBUG;goog.loadedModules_={};goog.DEPENDENCIES_ENABLED=!COMPILED&&goog.ENABLE_DEBUG_LOADER;goog.TRANSPILE=\"detect\";\ngoog.ASSUME_ES_MODULES_TRANSPILED=!1;goog.TRANSPILE_TO_LANGUAGE=\"\";goog.TRANSPILER=\"transpile.js\";goog.hasBadLetScoping=null;goog.useSafari10Workaround=function(){if(null==goog.hasBadLetScoping){try{var a=!eval('\"use strict\";let x = 1; function f() { return typeof x; };f() == \"number\";')}catch(b){a=!1}goog.hasBadLetScoping=a}return goog.hasBadLetScoping};goog.workaroundSafari10EvalBug=function(a){return\"(function(){\"+a+\"\\n;})();\\n\"};\ngoog.loadModule=function(a){var b=goog.moduleLoaderState_;try{goog.moduleLoaderState_={moduleName:\"\",declareLegacyNamespace:!1,type:goog.ModuleType.GOOG};if(goog.isFunction(a))var c=a.call(void 0,{});else if(\"string\"===typeof a)goog.useSafari10Workaround()&&(a=goog.workaroundSafari10EvalBug(a)),c=goog.loadModuleFromSource_.call(void 0,a);else throw Error(\"Invalid module definition\");var d=goog.moduleLoaderState_.moduleName;if(\"string\"===typeof d&&d)goog.moduleLoaderState_.declareLegacyNamespace?goog.constructNamespace_(d,\nc):goog.SEAL_MODULE_EXPORTS&&Object.seal&&\"object\"==typeof c&&null!=c&&Object.seal(c),goog.loadedModules_[d]={exports:c,type:goog.ModuleType.GOOG,moduleId:goog.moduleLoaderState_.moduleName};else throw Error('Invalid module name \"'+d+'\"');}finally{goog.moduleLoaderState_=b}};goog.loadModuleFromSource_=function(a){eval(a);return{}};goog.normalizePath_=function(a){a=a.split(\"/\");for(var b=0;b<a.length;)\".\"==a[b]?a.splice(b,1):b&&\"..\"==a[b]&&a[b-1]&&\"..\"!=a[b-1]?a.splice(--b,2):b++;return a.join(\"/\")};\ngoog.loadFileSync_=function(a){if(goog.global.CLOSURE_LOAD_FILE_SYNC)return goog.global.CLOSURE_LOAD_FILE_SYNC(a);try{var b=new goog.global.XMLHttpRequest;b.open(\"get\",a,!1);b.send();return 0==b.status||200==b.status?b.responseText:null}catch(c){return null}};\ngoog.transpile_=function(a,b,c){var d=goog.global.$jscomp;d||(goog.global.$jscomp=d={});var e=d.transpile;if(!e){var f=goog.basePath+goog.TRANSPILER,g=goog.loadFileSync_(f);if(g){(function(){(0,eval)(g+\"\\n//# sourceURL=\"+f)}).call(goog.global);if(goog.global.$gwtExport&&goog.global.$gwtExport.$jscomp&&!goog.global.$gwtExport.$jscomp.transpile)throw Error('The transpiler did not properly export the \"transpile\" method. $gwtExport: '+JSON.stringify(goog.global.$gwtExport));goog.global.$jscomp.transpile=\ngoog.global.$gwtExport.$jscomp.transpile;d=goog.global.$jscomp;e=d.transpile}}e||(e=d.transpile=function(h,k){goog.logToConsole_(k+\" requires transpilation but no transpiler was found.\");return h});return e(a,b,c)};\ngoog.typeOf=function(a){var b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b};goog.isArray=function(a){return Array.isArray(a)};goog.isArrayLike=function(a){var b=goog.typeOf(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length};goog.isDateLike=function(a){return goog.isObject(a)&&\"function\"==typeof a.getFullYear};goog.isFunction=function(a){return\"function\"==goog.typeOf(a)};goog.isObject=function(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b};\ngoog.getUid=function(a){return Object.prototype.hasOwnProperty.call(a,goog.UID_PROPERTY_)&&a[goog.UID_PROPERTY_]||(a[goog.UID_PROPERTY_]=++goog.uidCounter_)};goog.hasUid=function(a){return!!a[goog.UID_PROPERTY_]};goog.removeUid=function(a){null!==a&&\"removeAttribute\"in a&&a.removeAttribute(goog.UID_PROPERTY_);try{delete a[goog.UID_PROPERTY_]}catch(b){}};goog.UID_PROPERTY_=\"closure_uid_\"+(1E9*Math.random()>>>0);goog.uidCounter_=0;goog.getHashCode=goog.getUid;goog.removeHashCode=goog.removeUid;\ngoog.cloneObject=function(a){var b=goog.typeOf(a);if(\"object\"==b||\"array\"==b){if(\"function\"===typeof a.clone)return a.clone();b=\"array\"==b?[]:{};for(var c in a)b[c]=goog.cloneObject(a[c]);return b}return a};goog.bindNative_=function(a,b,c){return a.call.apply(a.bind,arguments)};\ngoog.bindJs_=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}};goog.bind=function(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?goog.bind=goog.bindNative_:goog.bind=goog.bindJs_;return goog.bind.apply(null,arguments)};\ngoog.partial=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}};goog.mixin=function(a,b){for(var c in b)a[c]=b[c]};goog.now=goog.TRUSTED_SITE&&Date.now||function(){return+new Date};\ngoog.globalEval=function(a){if(goog.global.execScript)goog.global.execScript(a,\"JavaScript\");else if(goog.global.eval){if(null==goog.evalWorks_)try{goog.global.eval(\"\"),goog.evalWorks_=!0}catch(d){goog.evalWorks_=!1}if(goog.evalWorks_)goog.global.eval(a);else{var b=goog.global.document,c=b.createElement(\"script\");c.type=\"text/javascript\";c.defer=!1;c.appendChild(b.createTextNode(a));b.head.appendChild(c);b.head.removeChild(c)}}else throw Error(\"goog.globalEval not available\");};goog.evalWorks_=null;\ngoog.getCssName=function(a,b){if(\".\"==String(a).charAt(0))throw Error('className passed in goog.getCssName must not start with \".\". You passed: '+a);var c=function(e){return goog.cssNameMapping_[e]||e},d=function(e){e=e.split(\"-\");for(var f=[],g=0;g<e.length;g++)f.push(c(e[g]));return f.join(\"-\")};d=goog.cssNameMapping_?\"BY_WHOLE\"==goog.cssNameMappingStyle_?c:d:function(e){return e};a=b?a+\"-\"+d(b):d(a);return goog.global.CLOSURE_CSS_NAME_MAP_FN?goog.global.CLOSURE_CSS_NAME_MAP_FN(a):a};\ngoog.setCssNameMapping=function(a,b){goog.cssNameMapping_=a;goog.cssNameMappingStyle_=b};!COMPILED&&goog.global.CLOSURE_CSS_NAME_MAPPING&&(goog.cssNameMapping_=goog.global.CLOSURE_CSS_NAME_MAPPING);goog.getMsg=function(a,b,c){c&&c.html&&(a=a.replace(/</g,\"&lt;\"));b&&(a=a.replace(/\\{\\$([^}]+)}/g,function(d,e){return null!=b&&e in b?b[e]:d}));return a};goog.getMsgWithFallback=function(a,b){return a};goog.exportSymbol=function(a,b,c){goog.exportPath_(a,b,c)};\ngoog.exportProperty=function(a,b,c){a[b]=c};goog.inherits=function(a,b){function c(){}c.prototype=b.prototype;a.superClass_=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.base=function(d,e,f){for(var g=Array(arguments.length-2),h=2;h<arguments.length;h++)g[h-2]=arguments[h];return b.prototype[e].apply(d,g)}};goog.scope=function(a){if(goog.isInModuleLoader_())throw Error(\"goog.scope is not supported within a module.\");a.call(goog.global)};COMPILED||(goog.global.COMPILED=COMPILED);\ngoog.defineClass=function(a,b){var c=b.constructor,d=b.statics;c&&c!=Object.prototype.constructor||(c=function(){throw Error(\"cannot instantiate an interface (no constructor defined).\");});c=goog.defineClass.createSealingConstructor_(c,a);a&&goog.inherits(c,a);delete b.constructor;delete b.statics;goog.defineClass.applyProperties_(c.prototype,b);null!=d&&(d instanceof Function?d(c):goog.defineClass.applyProperties_(c,d));return c};goog.defineClass.SEAL_CLASS_INSTANCES=goog.DEBUG;\ngoog.defineClass.createSealingConstructor_=function(a,b){return goog.defineClass.SEAL_CLASS_INSTANCES?function(){var c=a.apply(this,arguments)||this;c[goog.UID_PROPERTY_]=c[goog.UID_PROPERTY_];return c}:a};goog.defineClass.OBJECT_PROTOTYPE_FIELDS_=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");\ngoog.defineClass.applyProperties_=function(a,b){for(var c in b)Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c]);for(var d=0;d<goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length;d++)c=goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[d],Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c])};\n!COMPILED&&goog.DEPENDENCIES_ENABLED&&(goog.inHtmlDocument_=function(){var a=goog.global.document;return null!=a&&\"write\"in a},goog.isDocumentLoading_=function(){var a=goog.global.document;return a.attachEvent?\"complete\"!=a.readyState:\"loading\"==a.readyState},goog.findBasePath_=function(){if(void 0!=goog.global.CLOSURE_BASE_PATH&&\"string\"===typeof goog.global.CLOSURE_BASE_PATH)goog.basePath=goog.global.CLOSURE_BASE_PATH;else if(goog.inHtmlDocument_()){var a=goog.global.document,b=a.currentScript;\na=b?[b]:a.getElementsByTagName(\"SCRIPT\");for(b=a.length-1;0<=b;--b){var c=a[b].src,d=c.lastIndexOf(\"?\");d=-1==d?c.length:d;if(\"base.js\"==c.substr(d-7,7)){goog.basePath=c.substr(0,d-7);break}}}},goog.findBasePath_(),goog.Transpiler=function(){this.requiresTranspilation_=null;this.transpilationTarget_=goog.TRANSPILE_TO_LANGUAGE},goog.Transpiler.prototype.createRequiresTranspilation_=function(){function a(g,h){e?d[g]=!0:h()?(c=g,d[g]=!1):e=d[g]=!0}function b(g){try{return!!eval(g)}catch(h){return!1}}\nvar c=\"es3\",d={es3:!1},e=!1,f=goog.global.navigator&&goog.global.navigator.userAgent?goog.global.navigator.userAgent:\"\";a(\"es5\",function(){return b(\"[1,].length==1\")});a(\"es6\",function(){return f.match(/Edge\\/(\\d+)(\\.\\d)*/i)?!1:b('(()=>{\"use strict\";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()')});\na(\"es7\",function(){return b(\"2 ** 2 == 4\")});a(\"es8\",function(){return b(\"async () => 1, true\")});a(\"es9\",function(){return b(\"({...rest} = {}), true\")});a(\"es_next\",function(){return!1});return{target:c,map:d}},goog.Transpiler.prototype.needsTranspile=function(a,b){if(\"always\"==goog.TRANSPILE)return!0;if(\"never\"==goog.TRANSPILE)return!1;if(!this.requiresTranspilation_){var c=this.createRequiresTranspilation_();this.requiresTranspilation_=c.map;this.transpilationTarget_=this.transpilationTarget_||\nc.target}if(a in this.requiresTranspilation_)return this.requiresTranspilation_[a]?!0:!goog.inHtmlDocument_()||\"es6\"!=b||\"noModule\"in goog.global.document.createElement(\"script\")?!1:!0;throw Error(\"Unknown language mode: \"+a);},goog.Transpiler.prototype.transpile=function(a,b){return goog.transpile_(a,b,this.transpilationTarget_)},goog.transpiler_=new goog.Transpiler,goog.protectScriptTag_=function(a){return a.replace(/<\\/(SCRIPT)/ig,\"\\\\x3c/$1\")},goog.DebugLoader_=function(){this.dependencies_={};\nthis.idToPath_={};this.written_={};this.loadingDeps_=[];this.depsToLoad_=[];this.paused_=!1;this.factory_=new goog.DependencyFactory(goog.transpiler_);this.deferredCallbacks_={};this.deferredQueue_=[]},goog.DebugLoader_.prototype.bootstrap=function(a,b){function c(){d&&(goog.global.setTimeout(d,0),d=null)}var d=b;if(a.length){b=[];for(var e=0;e<a.length;e++){var f=this.getPathFromDeps_(a[e]);if(!f)throw Error(\"Unregonized namespace: \"+a[e]);b.push(this.dependencies_[f])}f=goog.require;var g=0;for(e=\n0;e<a.length;e++)f(a[e]),b[e].onLoad(function(){++g==a.length&&c()})}else c()},goog.DebugLoader_.prototype.loadClosureDeps=function(){this.depsToLoad_.push(this.factory_.createDependency(goog.normalizePath_(goog.basePath+\"deps.js\"),\"deps.js\",[],[],{},!1));this.loadDeps_()},goog.DebugLoader_.prototype.requested=function(a,b){(a=this.getPathFromDeps_(a))&&(b||this.areDepsLoaded_(this.dependencies_[a].requires))&&(b=this.deferredCallbacks_[a])&&(delete this.deferredCallbacks_[a],b())},goog.DebugLoader_.prototype.setDependencyFactory=\nfunction(a){this.factory_=a},goog.DebugLoader_.prototype.load_=function(a){if(this.getPathFromDeps_(a)){var b=this,c=[],d=function(e){var f=b.getPathFromDeps_(e);if(!f)throw Error(\"Bad dependency path or symbol: \"+e);if(!b.written_[f]){b.written_[f]=!0;e=b.dependencies_[f];for(f=0;f<e.requires.length;f++)goog.isProvided_(e.requires[f])||d(e.requires[f]);c.push(e)}};d(a);a=!!this.depsToLoad_.length;this.depsToLoad_=this.depsToLoad_.concat(c);this.paused_||a||this.loadDeps_()}else throw a=\"goog.require could not find: \"+\na,goog.logToConsole_(a),Error(a);},goog.DebugLoader_.prototype.loadDeps_=function(){for(var a=this,b=this.paused_;this.depsToLoad_.length&&!b;)(function(){var c=!1,d=a.depsToLoad_.shift(),e=!1;a.loading_(d);var f={pause:function(){if(c)throw Error(\"Cannot call pause after the call to load.\");b=!0},resume:function(){c?a.resume_():b=!1},loaded:function(){if(e)throw Error(\"Double call to loaded.\");e=!0;a.loaded_(d)},pending:function(){for(var g=[],h=0;h<a.loadingDeps_.length;h++)g.push(a.loadingDeps_[h]);\nreturn g},setModuleState:function(g){goog.moduleLoaderState_={type:g,moduleName:\"\",declareLegacyNamespace:!1}},registerEs6ModuleExports:function(g,h,k){k&&(goog.loadedModules_[k]={exports:h,type:goog.ModuleType.ES6,moduleId:k||\"\"})},registerGoogModuleExports:function(g,h){goog.loadedModules_[g]={exports:h,type:goog.ModuleType.GOOG,moduleId:g}},clearModuleState:function(){goog.moduleLoaderState_=null},defer:function(g){if(c)throw Error(\"Cannot register with defer after the call to load.\");a.defer_(d,\ng)},areDepsLoaded:function(){return a.areDepsLoaded_(d.requires)}};try{d.load(f)}finally{c=!0}})();b&&this.pause_()},goog.DebugLoader_.prototype.pause_=function(){this.paused_=!0},goog.DebugLoader_.prototype.resume_=function(){this.paused_&&(this.paused_=!1,this.loadDeps_())},goog.DebugLoader_.prototype.loading_=function(a){this.loadingDeps_.push(a)},goog.DebugLoader_.prototype.loaded_=function(a){for(var b=0;b<this.loadingDeps_.length;b++)if(this.loadingDeps_[b]==a){this.loadingDeps_.splice(b,1);\nbreak}for(b=0;b<this.deferredQueue_.length;b++)if(this.deferredQueue_[b]==a.path){this.deferredQueue_.splice(b,1);break}if(this.loadingDeps_.length==this.deferredQueue_.length&&!this.depsToLoad_.length)for(;this.deferredQueue_.length;)this.requested(this.deferredQueue_.shift(),!0);a.loaded()},goog.DebugLoader_.prototype.areDepsLoaded_=function(a){for(var b=0;b<a.length;b++){var c=this.getPathFromDeps_(a[b]);if(!c||!(c in this.deferredCallbacks_||goog.isProvided_(a[b])))return!1}return!0},goog.DebugLoader_.prototype.getPathFromDeps_=\nfunction(a){return a in this.idToPath_?this.idToPath_[a]:a in this.dependencies_?a:null},goog.DebugLoader_.prototype.defer_=function(a,b){this.deferredCallbacks_[a.path]=b;this.deferredQueue_.push(a.path)},goog.LoadController=function(){},goog.LoadController.prototype.pause=function(){},goog.LoadController.prototype.resume=function(){},goog.LoadController.prototype.loaded=function(){},goog.LoadController.prototype.pending=function(){},goog.LoadController.prototype.registerEs6ModuleExports=function(a,\nb,c){},goog.LoadController.prototype.setModuleState=function(a){},goog.LoadController.prototype.clearModuleState=function(){},goog.LoadController.prototype.defer=function(a){},goog.LoadController.prototype.areDepsLoaded=function(){},goog.Dependency=function(a,b,c,d,e){this.path=a;this.relativePath=b;this.provides=c;this.requires=d;this.loadFlags=e;this.loaded_=!1;this.loadCallbacks_=[]},goog.Dependency.prototype.getPathName=function(){var a=this.path,b=a.indexOf(\"://\");0<=b&&(a=a.substring(b+3),b=\na.indexOf(\"/\"),0<=b&&(a=a.substring(b+1)));return a},goog.Dependency.prototype.onLoad=function(a){this.loaded_?a():this.loadCallbacks_.push(a)},goog.Dependency.prototype.loaded=function(){this.loaded_=!0;var a=this.loadCallbacks_;this.loadCallbacks_=[];for(var b=0;b<a.length;b++)a[b]()},goog.Dependency.defer_=!1,goog.Dependency.callbackMap_={},goog.Dependency.registerCallback_=function(a){var b=Math.random().toString(32);goog.Dependency.callbackMap_[b]=a;return b},goog.Dependency.unregisterCallback_=\nfunction(a){delete goog.Dependency.callbackMap_[a]},goog.Dependency.callback_=function(a,b){if(a in goog.Dependency.callbackMap_){for(var c=goog.Dependency.callbackMap_[a],d=[],e=1;e<arguments.length;e++)d.push(arguments[e]);c.apply(void 0,d)}else throw Error(\"Callback key \"+a+\" does not exist (was base.js loaded more than once?).\");},goog.Dependency.prototype.load=function(a){if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?a.loaded():a.pause();else if(goog.inHtmlDocument_()){var b=\ngoog.global.document;if(\"complete\"==b.readyState&&!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING){if(/\\bdeps.js$/.test(this.path)){a.loaded();return}throw Error('Cannot write \"'+this.path+'\" after document load');}if(!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING&&goog.isDocumentLoading_()){var c=goog.Dependency.registerCallback_(function(f){goog.DebugLoader_.IS_OLD_IE_&&\"complete\"!=f.readyState||(goog.Dependency.unregisterCallback_(c),a.loaded())}),d=!goog.DebugLoader_.IS_OLD_IE_&&goog.getScriptNonce()?\n' nonce=\"'+goog.getScriptNonce()+'\"':\"\";d='<script src=\"'+this.path+'\" '+(goog.DebugLoader_.IS_OLD_IE_?\"onreadystatechange\":\"onload\")+\"=\\\"goog.Dependency.callback_('\"+c+'\\', this)\" type=\"text/javascript\" '+(goog.Dependency.defer_?\"defer\":\"\")+d+\">\\x3c/script>\";b.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(d):d)}else{var e=b.createElement(\"script\");e.defer=goog.Dependency.defer_;e.async=!1;e.type=\"text/javascript\";(d=goog.getScriptNonce())&&e.setAttribute(\"nonce\",d);goog.DebugLoader_.IS_OLD_IE_?\n(a.pause(),e.onreadystatechange=function(){if(\"loaded\"==e.readyState||\"complete\"==e.readyState)a.loaded(),a.resume()}):e.onload=function(){e.onload=null;a.loaded()};e.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(this.path):this.path;b.head.appendChild(e)}}else goog.logToConsole_(\"Cannot use default debug loader outside of HTML documents.\"),\"deps.js\"==this.relativePath?(goog.logToConsole_(\"Consider setting CLOSURE_IMPORT_SCRIPT before loading base.js, or setting CLOSURE_NO_DEPS to true.\"),\na.loaded()):a.pause()},goog.Es6ModuleDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e)},goog.inherits(goog.Es6ModuleDependency,goog.Dependency),goog.Es6ModuleDependency.prototype.load=function(a){function b(l,m){l=m?'<script type=\"module\" crossorigin>'+m+\"\\x3c/script>\":'<script type=\"module\" crossorigin src=\"'+l+'\">\\x3c/script>';d.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(l):l)}function c(l,m){var n=d.createElement(\"script\");n.defer=!0;n.async=!1;n.type=\n\"module\";n.setAttribute(\"crossorigin\",!0);var p=goog.getScriptNonce();p&&n.setAttribute(\"nonce\",p);m?n.textContent=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScript(m):m:n.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(l):l;d.head.appendChild(n)}if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?a.loaded():a.pause();else if(goog.inHtmlDocument_()){var d=goog.global.document,e=this;if(goog.isDocumentLoading_()){var f=b;goog.Dependency.defer_=\n!0}else f=c;var g=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(g);a.setModuleState(goog.ModuleType.ES6)});f(void 0,'goog.Dependency.callback_(\"'+g+'\")');f(this.path,void 0);var h=goog.Dependency.registerCallback_(function(l){goog.Dependency.unregisterCallback_(h);a.registerEs6ModuleExports(e.path,l,goog.moduleLoaderState_.moduleName)});f(void 0,'import * as m from \"'+this.path+'\"; goog.Dependency.callback_(\"'+h+'\", m)');var k=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(k);\na.clearModuleState();a.loaded()});f(void 0,'goog.Dependency.callback_(\"'+k+'\")')}else goog.logToConsole_(\"Cannot use default debug loader outside of HTML documents.\"),a.pause()},goog.TransformedDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e);this.contents_=null;this.lazyFetch_=!goog.inHtmlDocument_()||!(\"noModule\"in goog.global.document.createElement(\"script\"))},goog.inherits(goog.TransformedDependency,goog.Dependency),goog.TransformedDependency.prototype.load=function(a){function b(){e.contents_=\ngoog.loadFileSync_(e.path);e.contents_&&(e.contents_=e.transform(e.contents_),e.contents_&&(e.contents_+=\"\\n//# sourceURL=\"+e.path))}function c(){e.lazyFetch_&&b();if(e.contents_){f&&a.setModuleState(goog.ModuleType.ES6);try{var m=e.contents_;e.contents_=null;goog.globalEval(m);if(f)var n=goog.moduleLoaderState_.moduleName}finally{f&&a.clearModuleState()}f&&goog.global.$jscomp.require.ensure([e.getPathName()],function(){a.registerEs6ModuleExports(e.path,goog.global.$jscomp.require(e.getPathName()),\nn)});a.loaded()}}function d(){var m=goog.global.document,n=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(n);c()}),p='<script type=\"text/javascript\">'+goog.protectScriptTag_('goog.Dependency.callback_(\"'+n+'\");')+\"\\x3c/script>\";m.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(p):p)}var e=this;if(goog.global.CLOSURE_IMPORT_SCRIPT)b(),this.contents_&&goog.global.CLOSURE_IMPORT_SCRIPT(\"\",this.contents_)?(this.contents_=null,a.loaded()):a.pause();\nelse{var f=this.loadFlags.module==goog.ModuleType.ES6;this.lazyFetch_||b();var g=1<a.pending().length,h=g&&goog.DebugLoader_.IS_OLD_IE_;g=goog.Dependency.defer_&&(g||goog.isDocumentLoading_());if(h||g)a.defer(function(){c()});else{var k=goog.global.document;h=goog.inHtmlDocument_()&&\"ActiveXObject\"in goog.global;if(f&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()&&!h){goog.Dependency.defer_=!0;a.pause();var l=k.onreadystatechange;k.onreadystatechange=function(){\"interactive\"==k.readyState&&(k.onreadystatechange=\nl,c(),a.resume());goog.isFunction(l)&&l.apply(void 0,arguments)}}else!goog.DebugLoader_.IS_OLD_IE_&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()?d():c()}}},goog.TransformedDependency.prototype.transform=function(a){},goog.TranspiledDependency=function(a,b,c,d,e,f){goog.TransformedDependency.call(this,a,b,c,d,e);this.transpiler=f},goog.inherits(goog.TranspiledDependency,goog.TransformedDependency),goog.TranspiledDependency.prototype.transform=function(a){return this.transpiler.transpile(a,this.getPathName())},\ngoog.PreTranspiledEs6ModuleDependency=function(a,b,c,d,e){goog.TransformedDependency.call(this,a,b,c,d,e)},goog.inherits(goog.PreTranspiledEs6ModuleDependency,goog.TransformedDependency),goog.PreTranspiledEs6ModuleDependency.prototype.transform=function(a){return a},goog.GoogModuleDependency=function(a,b,c,d,e,f,g){goog.TransformedDependency.call(this,a,b,c,d,e);this.needsTranspile_=f;this.transpiler_=g},goog.inherits(goog.GoogModuleDependency,goog.TransformedDependency),goog.GoogModuleDependency.prototype.transform=\nfunction(a){this.needsTranspile_&&(a=this.transpiler_.transpile(a,this.getPathName()));return goog.LOAD_MODULE_USING_EVAL&&void 0!==goog.global.JSON?\"goog.loadModule(\"+goog.global.JSON.stringify(a+\"\\n//# sourceURL=\"+this.path+\"\\n\")+\");\":'goog.loadModule(function(exports) {\"use strict\";'+a+\"\\n;return exports});\\n//# sourceURL=\"+this.path+\"\\n\"},goog.DebugLoader_.IS_OLD_IE_=!(goog.global.atob||!goog.global.document||!goog.global.document.all),goog.DebugLoader_.prototype.addDependency=function(a,b,c,\nd){b=b||[];a=a.replace(/\\\\/g,\"/\");var e=goog.normalizePath_(goog.basePath+a);d&&\"boolean\"!==typeof d||(d=d?{module:goog.ModuleType.GOOG}:{});c=this.factory_.createDependency(e,a,b,c,d,goog.transpiler_.needsTranspile(d.lang||\"es3\",d.module));this.dependencies_[e]=c;for(c=0;c<b.length;c++)this.idToPath_[b[c]]=e;this.idToPath_[a]=e},goog.DependencyFactory=function(a){this.transpiler=a},goog.DependencyFactory.prototype.createDependency=function(a,b,c,d,e,f){return e.module==goog.ModuleType.GOOG?new goog.GoogModuleDependency(a,\nb,c,d,e,f,this.transpiler):f?new goog.TranspiledDependency(a,b,c,d,e,this.transpiler):e.module==goog.ModuleType.ES6?\"never\"==goog.TRANSPILE&&goog.ASSUME_ES_MODULES_TRANSPILED?new goog.PreTranspiledEs6ModuleDependency(a,b,c,d,e):new goog.Es6ModuleDependency(a,b,c,d,e):new goog.Dependency(a,b,c,d,e)},goog.debugLoader_=new goog.DebugLoader_,goog.loadClosureDeps=function(){goog.debugLoader_.loadClosureDeps()},goog.setDependencyFactory=function(a){goog.debugLoader_.setDependencyFactory(a)},goog.TRUSTED_TYPES_POLICY_=\ngoog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+\"#base\"):null,goog.global.CLOSURE_NO_DEPS||goog.debugLoader_.loadClosureDeps(),goog.bootstrap=function(a,b){goog.debugLoader_.bootstrap(a,b)});goog.TRUSTED_TYPES_POLICY_NAME=\"\";goog.identity_=function(a){return a};goog.createTrustedTypesPolicy=function(a){var b=null,c=goog.global.trustedTypes;if(!c||!c.createPolicy)return b;try{b=c.createPolicy(a,{createHTML:goog.identity_,createScript:goog.identity_,createScriptURL:goog.identity_})}catch(d){goog.logToConsole_(d.message)}return b};var sre={Variables:function(){}};sre.Variables.VERSION=\"3.1.1\";sre.Variables.LOCALES=[\"de\",\"en\",\"es\",\"fr\",\"nemeth\"];sre.Variables.mathjaxVersion=\"3.0.0\";sre.Variables.url=\"https://cdn.jsdelivr.net/npm/speech-rule-engine@\"+sre.Variables.VERSION+\"/lib/mathmaps\";sre.Variables.WGXpath=\"https://cdn.jsdelivr.net/npm/wicked-good-xpath@1.3.0/dist/wgxpath.install.js\";sre.SystemExternal=function(){};sre.SystemExternal.require=function(a){return\"undefined\"!==typeof process&&\"undefined\"!==typeof require?require(a):null};sre.SystemExternal.documentSupported=function(){return\"undefined\"!=typeof document};sre.SystemExternal.process=sre.SystemExternal.require(\"process\");sre.SystemExternal.xmldom=sre.SystemExternal.documentSupported()?window:sre.SystemExternal.require(\"xmldom-sre\");\nsre.SystemExternal.document=sre.SystemExternal.documentSupported()?document:(new sre.SystemExternal.xmldom.DOMImplementation).createDocument(\"\",\"\",0);sre.SystemExternal.xpath=sre.SystemExternal.documentSupported()?document:function(){var a={document:{},XPathResult:{}};sre.SystemExternal.require(\"wicked-good-xpath\").install(a);a.document.XPathResult=a.XPathResult;return a.document}();sre.SystemExternal.commander=sre.SystemExternal.documentSupported()?null:sre.SystemExternal.require(\"commander\");\nsre.SystemExternal.fs=sre.SystemExternal.documentSupported()?null:sre.SystemExternal.require(\"fs\");sre.SystemExternal.url=sre.Variables.url;sre.SystemExternal.jsonPath=function(){return(sre.SystemExternal.process&&\"undefined\"!==typeof global?sre.SystemExternal.process.env.SRE_JSON_PATH||global.SRE_JSON_PATH||sre.SystemExternal.process.cwd():sre.SystemExternal.url)+\"/\"}();sre.SystemExternal.WGXpath=sre.Variables.WGXpath;sre.SystemExternal.wgxpath=null;sre.BrowserUtil={};sre.BrowserUtil.detectIE=function(){if(!(\"undefined\"!==typeof window&&\"ActiveXObject\"in window&&\"clipboardData\"in window))return!1;sre.BrowserUtil.loadMapsForIE_();sre.BrowserUtil.loadWGXpath_();return!0};sre.BrowserUtil.detectEdge=function(){if(!(\"undefined\"!==typeof window&&\"MSGestureEvent\"in window&&\"chrome\"in window&&null==window.chrome.loadTimes))return!1;document.evaluate=null;sre.BrowserUtil.loadWGXpath_(!0);return!0};sre.BrowserUtil.mapsForIE=null;\nsre.BrowserUtil.loadWGXpath_=function(a){sre.BrowserUtil.loadScript(sre.SystemExternal.WGXpath);sre.BrowserUtil.installWGXpath_(a)};\nsre.BrowserUtil.installWGXpath_=function(a,b){var c=b||1;\"undefined\"===typeof wgxpath&&10>c?setTimeout(function(){sre.BrowserUtil.installWGXpath_(a,c++)},200):10<=c||(sre.SystemExternal.wgxpath=wgxpath,a?sre.SystemExternal.wgxpath.install({document:document}):sre.SystemExternal.wgxpath.install(),sre.XpathUtil.xpathEvaluate=document.evaluate,sre.XpathUtil.xpathResult=XPathResult,sre.XpathUtil.createNSResolver=document.createNSResolver)};\nsre.BrowserUtil.loadMapsForIE_=function(){sre.BrowserUtil.loadScript(sre.SystemExternal.jsonPath+\"mathmaps_ie.js\")};sre.BrowserUtil.loadScript=function(a){var b=sre.SystemExternal.document.createElement(\"script\");b.type=\"text/javascript\";b.src=a;sre.SystemExternal.document.head?sre.SystemExternal.document.head.appendChild(b):sre.SystemExternal.document.body.appendChild(b)};sre.DynamicProperties=function(a,b){this.properties_=a;this.order_=b||Object.keys(a)};sre.DynamicProperties.prototype.getProperties=function(){return this.properties_};sre.DynamicProperties.prototype.getOrder=function(){return this.order_};sre.DynamicProperties.prototype.getAxes=function(){return this.order_};sre.DynamicProperties.prototype.getProperty=function(a){return this.properties_[a]};sre.DynamicProperties.prototype.updateProperties=function(a){this.properties_=a};\nsre.DynamicProperties.prototype.allProperties=function(){var a=[];this.order_.forEach(goog.bind(function(b){a.push(this.getProperty(b).slice())},this));return a};sre.DynamicProperties.prototype.toString=function(){var a=[];this.order_.forEach(goog.bind(function(b){a.push(b+\": \"+this.getProperty(b).toString())},this));return a.join(\"\\n\")};\nsre.DynamicCstr=function(a,b){this.components_=a;var c={},d;for(d in a){var e=a[d];c[d]=[e];sre.DynamicCstr.Values_.getInstance().add(d,e)}sre.DynamicProperties.call(this,c,b)};goog.inherits(sre.DynamicCstr,sre.DynamicProperties);sre.DynamicCstr.prototype.getComponents=function(){return this.components_};sre.DynamicCstr.prototype.getValue=function(a){return this.components_[a]};\nsre.DynamicCstr.prototype.getValues=function(){var a=[];this.order_.forEach(goog.bind(function(b){a.push(this.getValue(b))},this));return a};sre.DynamicCstr.prototype.allProperties=function(){for(var a=sre.DynamicCstr.superClass_.allProperties.call(this),b=0,c,d;c=a[b],d=this.order_[b];b++)d=this.getValue(d),-1===c.indexOf(d)&&c.unshift(d);return a};sre.DynamicCstr.prototype.toString=function(){return this.getValues().join(\".\")};\nsre.DynamicCstr.prototype.equal=function(a){var b=a.getAxes();if(this.order_.length!==b.length)return!1;for(var c=0,d;d=b[c];c++){var e=this.getValue(d);if(!e||a.getValue(d)!==e)return!1}return!0};sre.DynamicCstr.Axis={DOMAIN:\"domain\",STYLE:\"style\",LOCALE:\"locale\",TOPIC:\"topic\",MODALITY:\"modality\"};sre.DynamicCstr.Values_=function(){this.axisToValues=sre.DynamicCstr.Values_.makeAxisValueObject_()};goog.addSingletonGetter(sre.DynamicCstr.Values_);\nsre.DynamicCstr.Values_.prototype.add=function(a,b){this.axisToValues[a][b]=!0};sre.DynamicCstr.Values_.prototype.get=function(){var a={},b=sre.DynamicCstr.Values_.getInstance().axisToValues,c;for(c in b)a[c]=Object.keys(b[c]);return a};sre.DynamicCstr.Values_.makeAxisValueObject_=function(){var a={},b;for(b in sre.DynamicCstr.Axis)a[sre.DynamicCstr.Axis[b]]={};return a};sre.DynamicCstr.getAxisValues=function(){return sre.DynamicCstr.Values_.getInstance().get()};\nsre.DynamicCstr.DEFAULT_ORDER=[sre.DynamicCstr.Axis.LOCALE,sre.DynamicCstr.Axis.MODALITY,sre.DynamicCstr.Axis.DOMAIN,sre.DynamicCstr.Axis.STYLE,sre.DynamicCstr.Axis.TOPIC];sre.DynamicCstr.DEFAULT_VALUE=\"default\";sre.DynamicCstr.DEFAULT_VALUES={};sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.LOCALE]=\"en\";sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.DOMAIN]=sre.DynamicCstr.DEFAULT_VALUE;sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.STYLE]=sre.DynamicCstr.DEFAULT_VALUE;\nsre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.TOPIC]=sre.DynamicCstr.DEFAULT_VALUE;sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.MODALITY]=\"speech\";sre.DynamicCstr.Parser=function(a){this.order_=a};sre.DynamicCstr.Parser.prototype.parse=function(a){a=a.split(\".\");var b={};if(a.length>this.order_.length)throw Error(\"Invalid dynamic constraint: \"+b);for(var c=0,d;d=this.order_[c],a.length;c++){var e=a.shift();b[d]=e}return new sre.DynamicCstr(b,this.order_.slice(0,c))};\nsre.DynamicCstr.Comparator=function(){};sre.DynamicCstr.Comparator.prototype.getReference=function(){};sre.DynamicCstr.Comparator.prototype.setReference=function(a,b){};sre.DynamicCstr.Comparator.prototype.match=function(a){};sre.DynamicCstr.Comparator.prototype.compare=function(a,b){};sre.DynamicCstr.DefaultComparator=function(a,b){this.reference_=a;this.fallback_=b||new sre.DynamicProperties(a.getProperties(),a.getOrder());this.order_=this.reference_.getOrder()};\nsre.DynamicCstr.DefaultComparator.prototype.getReference=function(){return this.reference_};sre.DynamicCstr.DefaultComparator.prototype.setReference=function(a,b){this.reference_=a;this.fallback_=b||new sre.DynamicProperties(a.getProperties(),a.getOrder());this.order_=this.reference_.getOrder()};\nsre.DynamicCstr.DefaultComparator.prototype.match=function(a){var b=a.getAxes();return b.length===this.reference_.getAxes().length&&b.every(goog.bind(function(c){var d=a.getValue(c);return d===this.reference_.getValue(c)||-1!==this.fallback_.getProperty(c).indexOf(d)},this))};\nsre.DynamicCstr.DefaultComparator.prototype.compare=function(a,b){for(var c=!1,d=0,e;e=this.order_[d];d++){var f=a.getValue(e),g=b.getValue(e);if(!c){var h=this.reference_.getValue(e);if(h===f&&h!==g)return-1;if(h===g&&h!==f)return 1;if(h===f&&h===g)continue;h!==f&&h!==g&&(c=!0)}e=this.fallback_.getProperty(e);f=e.indexOf(f);g=e.indexOf(g);if(f<g)return-1;if(g<f)return 1}return 0};sre.DynamicCstr.DefaultComparator.prototype.toString=function(){return this.reference_.toString()+\"\\n\"+this.fallback_.toString()};\nsre.DynamicProperties.create=function(a){for(var b=sre.DynamicCstr.DEFAULT_ORDER,c={},d=Array.prototype.slice.call(arguments,0),e=0,f=d.length,g=b.length;e<f&&e<g;e++)c[b[e]]=d[e];return new sre.DynamicProperties(c)};sre.DynamicCstr.create=function(a){for(var b=sre.DynamicCstr.DEFAULT_ORDER,c={},d=Array.prototype.slice.call(arguments,0),e=0,f=d.length,g=b.length;e<f&&e<g;e++)c[b[e]]=d[e];return new sre.DynamicCstr(c)};\nsre.DynamicCstr.defaultCstr=function(){return sre.DynamicCstr.create.apply(null,sre.DynamicCstr.DEFAULT_ORDER.map(function(a){return sre.DynamicCstr.DEFAULT_VALUES[a]}))};sre.DynamicCstr.validOrder=function(a){var b=sre.DynamicCstr.DEFAULT_ORDER.slice();return a.every(function(c){c=b.indexOf(c);return-1!==c&&b.splice(c,1)})};sre.Engine=function(){this.evaluator=sre.Engine.defaultEvaluator;this.parser=this.defaultParser=new sre.DynamicCstr.Parser(sre.DynamicCstr.DEFAULT_ORDER);this.parsers={};this.dynamicCstr=sre.DynamicCstr.defaultCstr();this.comparator=null;this.comparators={};this.domain=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.DOMAIN];this.style=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.STYLE];this.locale=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.LOCALE];this.modality=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.MODALITY];\nthis.walker=\"Table\";this.mode=sre.Engine.Mode.SYNC;this.speech=sre.Engine.Speech.NONE;this.structure=!1;this.ruleSets=[];this.cache=!0;this.markup=sre.Engine.Markup.NONE;this.isEdge=this.isIE=this.strict=!1;this.rate=\"100\";this.pprint=!1;this.setupTests_=[];this.config=!1};goog.addSingletonGetter(sre.Engine);sre.Engine.personalityProps={PITCH:\"pitch\",RATE:\"rate\",VOLUME:\"volume\",PAUSE:\"pause\",JOIN:\"join\"};sre.Engine.Mode={SYNC:\"sync\",ASYNC:\"async\",HTTP:\"http\"};\nsre.Engine.Speech={NONE:\"none\",SHALLOW:\"shallow\",DEEP:\"deep\"};sre.Engine.Markup={NONE:\"none\",PUNCTUATION:\"punctuation\",SSML:\"ssml\",SSML_STEP:\"ssml_step\",ACSS:\"acss\",SABLE:\"sable\",VOICEXML:\"voicexml\"};sre.Engine.registerTest=function(a){sre.Engine.getInstance().setupTests_.push(a)};sre.Engine.isReady=function(){return sre.Engine.getInstance().setupTests_.every(function(a){return a()})};sre.Engine.prototype.setupBrowsers=function(){this.isIE=sre.BrowserUtil.detectIE();this.isEdge=sre.BrowserUtil.detectEdge()};\nsre.Engine.prototype.getAxisValues=function(){return sre.DynamicCstr.getAxisValues()};sre.Engine.defaultEvaluator=function(a,b){return a};sre.Engine.prototype.getRate=function(){var a=parseInt(this.rate,10);return isNaN(a)?100:a};sre.Engine.Error=function(a){Error.call(this);this.message=a||\"\";this.name=\"SRE Error\"};goog.inherits(sre.Engine.Error,Error);sre.Engine.BINARY_FEATURES=[\"strict\",\"cache\",\"structure\",\"pprint\"];sre.Engine.STRING_FEATURES=\"markup style domain speech walker locale modality rate\".split(\" \");\nsre.Engine.prototype.setDynamicCstr=function(a){if(a)for(var b=Object.keys(a),c=0;c<b.length;c++){var d=b[c];-1!==sre.DynamicCstr.DEFAULT_ORDER.indexOf(d)&&(this[d]=a[d])}sre.Engine.DOMAIN_TO_STYLES[this.domain]=this.style;a=[this.locale,this.modality,this.domain,this.style].join(\".\");b=sre.DynamicProperties.create([sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.LOCALE]],[sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.MODALITY]],[sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.DOMAIN]],\n[sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.STYLE]]);c=this.comparators[this.domain];this.parser=(d=this.parsers[this.domain])?d:this.defaultParser;this.dynamicCstr=this.parser.parse(a);this.dynamicCstr.updateProperties(b.getProperties());this.comparator=c?c():new sre.DynamicCstr.DefaultComparator(this.dynamicCstr)};sre.Engine.DOMAIN_TO_STYLES={mathspeak:\"default\",clearspeak:\"default\"};sre.BaseUtil={};sre.BaseUtil.removeEmpty=function(a){return a.filter(function(b){return b})};sre.BaseUtil.interleaveLists=function(a,b){for(var c=[];a.length||b.length;)a.length&&c.push(a.shift()),b.length&&c.push(b.shift());return c};sre.BaseUtil.setdifference=function(a,b){return a?b?a.filter(function(c){return 0>b.indexOf(c)}):a:[]};sre.BaseUtil.union=function(a,b){return a&&b?a.concat(sre.BaseUtil.setdifference(b,a)):a||b||[]};sre.BaseUtil.makePath=function(a){return a.match(\"/$\")?a:a+\"/\"};sre.Debugger=function(){this.isActive_=!1;this.outputFunction_=console.info;this.stream_=null};goog.addSingletonGetter(sre.Debugger);sre.Debugger.prototype.init=function(a){a&&this.startDebugFile_(a);this.isActive_=!0};\nsre.Debugger.prototype.startDebugFile_=function(a){this.stream_=sre.SystemExternal.fs.createWriteStream(a);this.outputFunction_=goog.bind(function(b){var c=Array.prototype.slice.call(arguments,0);this.stream_.write(c.join(\" \"));this.stream_.write(\"\\n\")},this);this.stream_.on(\"error\",goog.bind(function(b){console.info(\"Invalid log file. Debug information sent to console.\");this.outputFunction_=console.info},this));this.stream_.on(\"finish\",function(){console.info(\"Finalizing debug file.\")})};\nsre.Debugger.prototype.output_=function(a){this.outputFunction_.apply(console.info===this.outputFunction_?console:this.outputFunction_,[\"Speech Rule Engine Debugger:\"].concat(a))};sre.Debugger.prototype.output=function(a){this.isActive_&&this.output_(Array.prototype.slice.call(arguments,0))};sre.Debugger.prototype.generateOutput=function(a){this.isActive_&&this.output_(a.apply(a,[]))};sre.Debugger.prototype.exit=function(a){this.isActive_&&this.stream_&&this.stream_.end(\"\",\"\",a||function(){})};sre.Grammar=function(){this.parameters_={};this.corrections_={};this.preprocessors_={};this.stateStack_=[];this.currentFlags={}};goog.addSingletonGetter(sre.Grammar);sre.Grammar.ATTRIBUTE=\"grammar\";sre.Grammar.prototype.clear=function(){this.parameters_={};this.stateStack_=[]};sre.Grammar.prototype.setParameter=function(a,b){var c=this.parameters_[a];b?this.parameters_[a]=b:delete this.parameters_[a];return c};sre.Grammar.prototype.getParameter=function(a){return this.parameters_[a]};\nsre.Grammar.prototype.setCorrection=function(a,b){this.corrections_[a]=b};sre.Grammar.prototype.setPreprocessor=function(a,b){this.preprocessors_[a]=b};sre.Grammar.prototype.getCorrection=function(a){return this.corrections_[a]};sre.Grammar.prototype.getState=function(){var a=[],b;for(b in this.parameters_){var c=this.parameters_[b];a.push(\"string\"===typeof c?b+\":\"+c:b)}return a.join(\" \")};sre.Grammar.prototype.pushState=function(a){for(var b in a)a[b]=this.setParameter(b,a[b]);this.stateStack_.push(a)};\nsre.Grammar.prototype.popState=function(){var a=this.stateStack_.pop(),b;for(b in a)this.setParameter(b,a[b])};sre.Grammar.prototype.setAttribute=function(a){if(a&&a.nodeType===sre.DomUtil.NodeType.ELEMENT_NODE){var b=this.getState();b&&a.setAttribute(sre.Grammar.ATTRIBUTE,b)}};sre.Grammar.prototype.preprocess=function(a){return this.runProcessors_(a,this.preprocessors_)};sre.Grammar.prototype.correct=function(a){return this.runProcessors_(a,this.corrections_)};\nsre.Grammar.prototype.runProcessors_=function(a,b){for(var c in this.parameters_){var d=b[c];if(d){var e=this.parameters_[c];a=!0===e?d(a):d(a,e)}}return a};sre.Grammar.translateString_=function(a){a=sre.Grammar.prepareUnit_(a);var b=sre.Engine.getInstance();a=b.evaluator(a,b.dynamicCstr)||a;return sre.Grammar.cleanUnit_(a)};sre.Grammar.prepareUnit_=function(a){var b=a.match(/:unit$/);return b?a.slice(0,b.index).replace(/\\s+/g,\" \")+a.slice(b.index):a};\nsre.Grammar.cleanUnit_=function(a){return a.match(/:unit$/)?(sre.Grammar.getInstance().setParameter(\"plural\",!1),a.replace(/:unit$/,\"\")):a};\nsre.Grammar.prototype.apply=function(a,b){this.currentFlags=b||{};a=this.currentFlags.adjust||this.currentFlags.preprocess?sre.Grammar.getInstance().preprocess(a):a;if(this.parameters_.translate||this.currentFlags.translate)a=sre.Grammar.translateString_(a);a=this.currentFlags.adjust||this.currentFlags.correct?sre.Grammar.getInstance().correct(a):a;this.currentFlags={};return a};\nsre.Grammar.parseState=function(a){var b={};a=a.split(\" \");for(var c=0,d=a.length;c<d;c++){var e=a[c].split(\":\"),f=e[1];b[e[0]]=f?f:!0}return b};sre.Grammar.parseInput=function(a){var b={};a=a.split(\":\");for(var c=0,d=a.length;c<d;c++){var e=a[c].split(\"=\"),f=e[0].trim();e[1]?b[f]=e[1].trim():f.match(/^!/)?b[f.slice(1)]=!1:b[f]=!0}return b};sre.Grammar.correctFont_=function(a,b){if(!b||!a)return a;b=sre.Messages.MS_FUNC.FONT_REGEXP(sre.Locale.localFont(b));return a.replace(b,\"\")};\nsre.Grammar.addAnnotation_=function(a,b){return a+\":\"+b};sre.Grammar.noTranslateText_=function(a){a.match(new RegExp(\"^[\"+sre.Messages.REGEXP.TEXT+\"]+$\"))&&(sre.Grammar.getInstance().currentFlags.translate=!1);return a};sre.Grammar.getInstance().setCorrection(\"ignoreFont\",sre.Grammar.correctFont_);sre.Grammar.getInstance().setPreprocessor(\"annotation\",sre.Grammar.addAnnotation_);sre.Grammar.getInstance().setPreprocessor(\"noTranslateText\",sre.Grammar.noTranslateText_);\nsre.Grammar.getInstance().setCorrection(\"ignoreCaps\",sre.Grammar.correctFont_);sre.XpathUtil={};sre.XpathUtil.xpathSupported=function(){return\"undefined\"==typeof XPathResult?!1:!0};sre.XpathUtil.currentDocument=null;sre.XpathUtil.xpathEvaluate=sre.XpathUtil.xpathSupported()?document.evaluate:sre.SystemExternal.xpath.evaluate;sre.XpathUtil.xpathResult=sre.XpathUtil.xpathSupported()?XPathResult:sre.SystemExternal.xpath.XPathResult;sre.XpathUtil.createNSResolver=sre.XpathUtil.xpathSupported()?document.createNSResolver:sre.SystemExternal.xpath.createNSResolver;\nsre.XpathUtil.nameSpaces_={xhtml:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",mml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};sre.XpathUtil.resolveNameSpace=function(a){return sre.XpathUtil.nameSpaces_[a]||null};sre.XpathUtil.resolver_=function(){this.lookupNamespaceURI=sre.XpathUtil.resolveNameSpace};\nsre.XpathUtil.evaluateXpath_=function(a,b,c){var d=sre.Engine.getInstance();return d.mode!==sre.Engine.Mode.HTTP||d.isIE||d.isEdge?sre.XpathUtil.xpathEvaluate(a,b,new sre.XpathUtil.resolver_,c,null):sre.XpathUtil.currentDocument.evaluate(a,b,sre.XpathUtil.resolveNameSpace,c,null)};sre.XpathUtil.evalXPath=function(a,b){try{var c=sre.XpathUtil.evaluateXpath_(a,b,sre.XpathUtil.xpathResult.ORDERED_NODE_ITERATOR_TYPE)}catch(d){return[]}a=[];for(b=c.iterateNext();b;b=c.iterateNext())a.push(b);return a};\nsre.XpathUtil.getLeafNodes=function(a){return sre.XpathUtil.evalXPath(\".//*[count(*)=0]\",a)};sre.XpathUtil.evaluateBoolean=function(a,b){try{var c=sre.XpathUtil.evaluateXpath_(a,b,sre.XpathUtil.xpathResult.BOOLEAN_TYPE)}catch(d){return!1}return c.booleanValue};sre.XpathUtil.evaluateString=function(a,b){try{var c=sre.XpathUtil.evaluateXpath_(a,b,sre.XpathUtil.xpathResult.STRING_TYPE)}catch(d){return\"\"}return c.stringValue};sre.DomUtil={};sre.DomUtil.toArray=function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b};sre.DomUtil.trimInput_=function(a){a=a.replace(/&nbsp;/g,\"\\u00a0\");return a.replace(/>[ \\f\\n\\r\\t\\v\\u200b]+</g,\"><\").trim()};sre.DomUtil.XML_ENTITIES={\"&lt;\":!0,\"&gt;\":!0,\"&amp;\":!0,\"&quot;\":!0,\"&apos;\":!0};\nsre.DomUtil.parseInput=function(a,b){b=b||sre.Engine.Error;var c=new sre.SystemExternal.xmldom.DOMParser;a=sre.DomUtil.trimInput_(a);var d=!!a.match(/&(?!lt|gt|amp|quot|apos)\\w+;/g);if(!a)throw new b(\"Empty input!\");try{var e=c.parseFromString(a,d?\"text/html\":\"text/xml\");return sre.Engine.getInstance().mode===sre.Engine.Mode.HTTP?(sre.XpathUtil.currentDocument=e,d?e.body.childNodes[0]:e.documentElement):e.documentElement}catch(f){throw new b(\"Illegal input: \"+f.message);}};\nsre.DomUtil.NodeType={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};sre.DomUtil.replaceNode=function(a,b){a.parentNode&&(a.parentNode.insertBefore(b,a),a.parentNode.removeChild(a))};sre.DomUtil.createElement=function(a){return sre.SystemExternal.document.createElement(a)};\nsre.DomUtil.createElementNS=function(a,b){return sre.SystemExternal.document.createElementNS(a,b)};sre.DomUtil.createTextNode=function(a){return sre.SystemExternal.document.createTextNode(a)};\nsre.DomUtil.formatXml=function(a){var b=\"\",c=/(>)(<)(\\/*)/g;a=a.replace(c,\"$1\\r\\n$2$3\");var d=0;a=a.split(\"\\r\\n\");c=/(\\.)*(<)(\\/*)/g;for(a=a.map(function(h){return h.replace(c,\"$1\\r\\n$2$3\").split(\"\\r\\n\")}).reduce(function(h,k){return h.concat(k)},[]);a.length;){var e=a.shift();if(e){var f=0;if(e.match(/^<\\w[^>\\/]*>[^>]+$/)){var g=sre.DomUtil.matchingStartEnd_(e,a[0]);g[0]?g[1]?(e+=a.shift().slice(0,-g[1].length),g[1].trim()&&a.unshift(g[1])):e+=a.shift():f=1}else e.match(/^<\\/\\w/)?0!=d&&--d:e.match(/^<\\w[^>]*[^\\/]>.*$/)?\nf=1:e.match(/^<\\w[^>]*\\/>.+$/)?(g=e.indexOf(\">\")+1,e.slice(g).trim()&&a.unshift(),e=e.slice(0,g)):f=0;b+=Array(d+1).join(\"  \")+e+\"\\r\\n\";d+=f}}return b};sre.DomUtil.matchingStartEnd_=function(a,b){if(!b)return[!1,\"\"];a=a.match(/^<([^> ]+).*>/);b=b.match(/^<\\/([^>]+)>(.*)/);return a&&b&&a[1]===b[1]?[!0,b[2]]:[!1,\"\"]};sre.DomUtil.dataAttribute=function(a){a.match(/^data-/)&&(a=a.substr(5));return a.replace(/-([a-z])/g,function(b,c){return c.toUpperCase()})};\nsre.DomUtil.getDataAttribute=function(a,b){return a.dataset?a.dataset[sre.DomUtil.dataAttribute(b)]:a.getAttribute(b)};sre.DomUtil.querySelectorAllByAttr=function(a,b){return a.querySelectorAll?sre.DomUtil.toArray(a.querySelectorAll(\"[\"+b+\"]\")):sre.XpathUtil.evalXPath(\".//*[@\"+b+\"]\",a)};sre.DomUtil.querySelectorAllByAttrValue=function(a,b,c){return a.querySelectorAll?sre.DomUtil.toArray(a.querySelectorAll(\"[\"+b+'=\"'+c+'\"]')):sre.XpathUtil.evalXPath(\".//*[@\"+b+'=\"'+c+'\"]',a)};\nsre.DomUtil.querySelectorAll=function(a,b){return a.querySelectorAll?sre.DomUtil.toArray(a.querySelectorAll(b)):sre.XpathUtil.evalXPath(\".//\"+b,a)};sre.DomUtil.tagName=function(a){return a.tagName.toUpperCase()};sre.Numbers={};sre.Numbers.identityTransformer_=function(a){return a.toString()};sre.Numbers.pluralTransformer_=function(a,b){return a.toString()};sre.Numbers.NUMBERS={wordOrdinal:sre.Numbers.identityTransformer_,simpleOrdinal:sre.Numbers.identityTransformer_,numberToWords:sre.Numbers.identityTransformer_,numberToOrdinal:sre.Numbers.pluralTransformer_,vulgarSep:\" \",numSep:\" \"};sre.Messages={};sre.Messages.MS={START:\"\",FRAC_V:\"\",FRAC_B:\"\",FRAC_S:\"\",END:\"\",FRAC_OVER:\"\",TWICE:\"\",NEST_FRAC:\"\",ENDFRAC:\"\",SUPER:\"\",SUB:\"\",SUP:\"\",SUPERSCRIPT:\"\",SUBSCRIPT:\"\",BASELINE:\"\",BASE:\"\",NESTED:\"\",NEST_ROOT:\"\",STARTROOT:\"\",ENDROOT:\"\",ROOTINDEX:\"\",ROOT:\"\",INDEX:\"\",UNDER:\"\",UNDERSCRIPT:\"\",OVER:\"\",OVERSCRIPT:\"\"};sre.Messages.MS_FUNC={FRAC_NEST_DEPTH:function(a){return!1},RADICAL_NEST_DEPTH:function(a){return\"\"},COMBINE_ROOT_INDEX:function(a,b){return a}};sre.Messages.MS_ROOT_INDEX={};\nsre.Messages.FONT={bold:\"\",\"bold-fraktur\":\"\",\"bold-italic\":\"\",\"bold-script\":\"\",caligraphic:\"\",\"caligraphic-bold\":\"\",\"double-struck\":\"\",\"double-struck-italic\":\"\",fraktur:\"\",italic:\"\",monospace:\"\",normal:\"\",oldstyle:\"\",\"oldstyle-bold\":\"\",script:\"\",\"sans-serif\":\"\",\"sans-serif-italic\":\"\",\"sans-serif-bold\":\"\",\"sans-serif-bold-italic\":\"\",unknown:\"\"};\nsre.Messages.EMBELLISH={\"super\":\"\",sub:\"\",circled:\"\",parenthesized:\"\",period:\"\",\"negative-circled\":\"\",\"double-circled\":\"\",\"circled-sans-serif\":\"\",\"negative-circled-sans-serif\":\"\",blackboard:\"\",comma:\"\",squared:\"\",\"negative-squared\":\"\"};\nsre.Messages.ROLE={addition:\"\",multiplication:\"\",subtraction:\"\",division:\"\",equality:\"\",inequality:\"\",element:\"\",arrow:\"\",determinant:\"\",rowvector:\"\",binomial:\"\",squarematrix:\"\",\"set empty\":\"\",\"set extended\":\"\",\"set singleton\":\"\",\"set collection\":\"\",label:\"\",multiline:\"\",matrix:\"\",vector:\"\",cases:\"\",table:\"\",unknown:\"\"};\nsre.Messages.ENCLOSE={longdiv:\"\",actuarial:\"\",radical:\"\",box:\"\",roundedbox:\"\",circle:\"\",left:\"\",right:\"\",top:\"\",bottom:\"\",updiagonalstrike:\"\",downdiagonalstrike:\"\",verticalstrike:\"\",horizontalstrike:\"\",madruwb:\"\",updiagonalarrow:\"\",phasorangle:\"\",unknown:\"\"};sre.Messages.NAVIGATE={COLLAPSIBLE:\"\",EXPANDABLE:\"\",LEVEL:\"\"};sre.Messages.REGEXP={TEXT:\"a-zA-Z\",NUMBER:\"\",DECIMAL_MARK:\"\",DIGIT_GROUP:\"\",JOINER_SUBSUPER:\" \"};sre.Messages.PLURAL_UNIT={};\nsre.Messages.PLURAL=function(a){return/.*s$/.test(a)?a:a+\"s\"};sre.Messages.UNIT_TIMES=\"\";sre.Messages.NUMBERS=sre.Numbers.NUMBERS;sre.Messages.ALPHABETS={latinSmall:[],latinCap:[],greekSmall:[],greekCap:[]};sre.Messages.ALPHABET_PREFIXES={capPrefix:{default:\"\"},smallPrefix:{default:\"\"},digitPrefix:{default:\"\"}};sre.Messages.identityTransformer_=function(a){return a.toString()};sre.Messages.ALPHABET_TRANSFORMERS={digit:{default:sre.Messages.identityTransformer_},letter:{default:sre.Messages.identityTransformer_}};\nsre.Messages.ALPHABET_COMBINER=function(a,b,c){return a};sre.NumbersUtil={};sre.NumbersUtil.ordinalCounter=function(a,b){var c=0;return function(){return sre.Messages.NUMBERS.simpleOrdinal(++c)+\" \"+b}};\nsre.NumbersUtil.convertVulgarFraction_=function(a){if(!a.childNodes||!a.childNodes[0]||!a.childNodes[0].childNodes||2>a.childNodes[0].childNodes.length||a.childNodes[0].childNodes[0].tagName!==sre.SemanticAttr.Type.NUMBER||a.childNodes[0].childNodes[0].getAttribute(\"role\")!==sre.SemanticAttr.Role.INTEGER||a.childNodes[0].childNodes[1].tagName!==sre.SemanticAttr.Type.NUMBER||a.childNodes[0].childNodes[1].getAttribute(\"role\")!==sre.SemanticAttr.Role.INTEGER)return{convertible:!1,content:a.textContent};\nvar b=a.childNodes[0].childNodes[1].textContent;a=a.childNodes[0].childNodes[0].textContent;var c=Number(b),d=Number(a);return isNaN(c)||isNaN(d)?{convertible:!1,content:a+\" \"+sre.Messages.MS.FRAC_OVER+\" \"+b}:{convertible:!0,enumerator:d,denominator:c}};\nsre.NumbersUtil.vulgarFraction=function(a){a=sre.NumbersUtil.convertVulgarFraction_(a);return a.convertible&&a.enumerator&&a.denominator?sre.Messages.NUMBERS.numberToWords(a.enumerator)+sre.Messages.NUMBERS.vulgarSep+sre.Messages.NUMBERS.numberToOrdinal(a.denominator,1!==a.enumerator):a.content||\"\"};sre.NumbersUtil.vulgarFractionSmall=function(a,b,c){var d=sre.NumbersUtil.convertVulgarFraction_(a);return d.convertible?(a=d.enumerator,d=d.denominator,0<a&&a<b&&0<d&&d<c):!1};\nsre.NumbersUtil.ordinalPosition=function(a){var b=sre.DomUtil.toArray(a.parentNode.childNodes);return sre.Messages.NUMBERS.simpleOrdinal(b.indexOf(a)+1).toString()};sre.SemanticUtil=function(){};sre.SemanticUtil.objectsToKeys=function(a){a=Array.prototype.slice.call(arguments,0);var b=[];return b.concat.apply(b,a.map(Object.keys))};sre.SemanticUtil.objectsToValues=function(a){a=Array.prototype.slice.call(arguments,0);var b=[];a.forEach(function(c){for(var d in c)b.push(c[d])});return b};\nsre.SemanticUtil.unicodeToNumber=function(a){if(!a||2<a.length)return null;if(2==a.length){var b=a.charCodeAt(0);a=a.charCodeAt(1);return 55296<=b&&56319>=b&&!isNaN(a)?1024*(b-55296)+(a-56320)+65536:null}return a.charCodeAt(0)};sre.SemanticUtil.numberToUnicode=function(a){return 65536>a?String.fromCharCode(a):String.fromCharCode((a-65536)/1024+55296,(a-65536)%1024+56320)};\nsre.SemanticUtil.splitUnicode=function(a){a=a.split(\"\");for(var b=[],c=0,d;d=a[c];c++)\"\\ud800\"<=d&&\"\\udbff\">=d&&a[c+1]?b.push(d+a[++c]):b.push(d);return b};sre.SemanticUtil.LEAFTAGS=[\"MO\",\"MI\",\"MN\",\"MTEXT\",\"MS\"];sre.SemanticUtil.IGNORETAGS=\"MERROR MPHANTOM MSPACE MALIGNGROUP MALIGNMARK MPRESCRIPTS ANNOTATION ANNOTATION-XML\".split(\" \");sre.SemanticUtil.EMPTYTAGS=\"MATH MROW MPADDED MACTION NONE MSTYLE SEMANTICS\".split(\" \");sre.SemanticUtil.hasMathTag=function(a){return!!a&&\"MATH\"===sre.DomUtil.tagName(a)};\nsre.SemanticUtil.hasIgnoreTag=function(a){return!!a&&-1!==sre.SemanticUtil.IGNORETAGS.indexOf(sre.DomUtil.tagName(a))};sre.SemanticUtil.hasEmptyTag=function(a){return!!a&&-1!==sre.SemanticUtil.EMPTYTAGS.indexOf(sre.DomUtil.tagName(a))};sre.SemanticUtil.purgeNodes=function(a){for(var b=[],c=0,d;d=a[c];c++){var e=sre.DomUtil.tagName(d);-1!=sre.SemanticUtil.IGNORETAGS.indexOf(e)||-1!=sre.SemanticUtil.EMPTYTAGS.indexOf(e)&&0==d.childNodes.length||b.push(d)}return b};\nsre.SemanticUtil.isZeroLength=function(a){return a?-1!==\"negativeveryverythinmathspace negativeverythinmathspace negativethinmathspace negativemediummathspace negativethickmathspace negativeverythickmathspace negativeveryverythickmathspace\".split(\" \").indexOf(a)?!0:(a=a.match(/[0-9\\.]+/))?0===parseFloat(a)?!0:!1:!1:!1};sre.SemanticUtil.directSpeechKeys=[\"aria-label\",\"exact-speech\",\"alt\"];\nsre.SemanticUtil.addAttributes=function(a,b){if(b.hasAttributes()){b=b.attributes;for(var c=b.length-1;0<=c;c--){var d=b[c].name;d.match(/^ext/)&&(a.attributes[d]=b[c].value);-1!==sre.SemanticUtil.directSpeechKeys.indexOf(d)&&(a.attributes[\"ext-speech\"]=b[c].value)}}};sre.SemanticAttr=function(){this.generalPunctuations='!\"#%&:;?@\\\\\\u00a1\\u00a7\\u00b6\\u00bf\\u2017\\u2020\\u2021\\u2022\\u2023\\u2024\\u2025\\u2027\\u2030\\u2031\\u2038\\u203b\\u203c\\u203d\\u203e\\u2041\\u2042\\u2043\\u2047\\u2048\\u2049\\u204b\\u204c\\u204d\\u204e\\u204f\\u2050\\u2051\\u2053\\u2055\\u2056\\u2058\\u2059\\u205a\\u205b\\u205c\\u205d\\u205e\\ufe10\\ufe13\\ufe14\\ufe15\\ufe16\\ufe30\\ufe45\\ufe46\\ufe49\\ufe4a\\ufe4b\\ufe4c\\ufe50\\ufe54\\ufe55\\ufe56\\ufe57\\ufe5f\\ufe60\\ufe61\\ufe68\\ufe6a\\ufe6b\\uff01\\uff02\\uff03\\uff05\\uff06\\uff07\\uff0a\\uff0c\\uff0f\\uff1a\\uff1b\\uff1f\\uff20\\uff3c'.split(\"\");\nthis.colons=[\":\",\"\\uff1a\",\"\\ufe55\"];this.invisibleComma_=sre.SemanticUtil.numberToUnicode(8291);this.commas=[\",\",this.invisibleComma_];this.ellipses=\"\\u2026\\u22ee\\u22ef\\u22f0\\u22f1\\ufe19\".split(\"\");this.fullStops=[\".\",\"\\ufe52\",\"\\uff0e\"];this.dashes=\"\\u2012\\u2013\\u2014\\u2015\\u301c\\ufe31\\ufe32\\ufe58\".split(\"\");this.primes=\"'\\u2032\\u2033\\u2034\\u2035\\u2036\\u2037\\u2057\".split(\"\");this.degrees=[\"\\u00b0\"];this.openClosePairs={\"(\":\")\",\"[\":\"]\",\"{\":\"}\",\"\\u2045\":\"\\u2046\",\"\\u2329\":\"\\u232a\",\"\\u2768\":\"\\u2769\",\n\"\\u276a\":\"\\u276b\",\"\\u276c\":\"\\u276d\",\"\\u276e\":\"\\u276f\",\"\\u2770\":\"\\u2771\",\"\\u2772\":\"\\u2773\",\"\\u2774\":\"\\u2775\",\"\\u27c5\":\"\\u27c6\",\"\\u27e6\":\"\\u27e7\",\"\\u27e8\":\"\\u27e9\",\"\\u27ea\":\"\\u27eb\",\"\\u27ec\":\"\\u27ed\",\"\\u27ee\":\"\\u27ef\",\"\\u2983\":\"\\u2984\",\"\\u2985\":\"\\u2986\",\"\\u2987\":\"\\u2988\",\"\\u2989\":\"\\u298a\",\"\\u298b\":\"\\u298c\",\"\\u298d\":\"\\u298e\",\"\\u298f\":\"\\u2990\",\"\\u2991\":\"\\u2992\",\"\\u2993\":\"\\u2994\",\"\\u2995\":\"\\u2996\",\"\\u2997\":\"\\u2998\",\"\\u29d8\":\"\\u29d9\",\"\\u29da\":\"\\u29db\",\"\\u29fc\":\"\\u29fd\",\"\\u2e22\":\"\\u2e23\",\"\\u2e24\":\"\\u2e25\",\n\"\\u2e26\":\"\\u2e27\",\"\\u2e28\":\"\\u2e29\",\"\\u3008\":\"\\u3009\",\"\\u300a\":\"\\u300b\",\"\\u300c\":\"\\u300d\",\"\\u300e\":\"\\u300f\",\"\\u3010\":\"\\u3011\",\"\\u3014\":\"\\u3015\",\"\\u3016\":\"\\u3017\",\"\\u3018\":\"\\u3019\",\"\\u301a\":\"\\u301b\",\"\\u301d\":\"\\u301e\",\"\\ufd3e\":\"\\ufd3f\",\"\\ufe17\":\"\\ufe18\",\"\\ufe59\":\"\\ufe5a\",\"\\ufe5b\":\"\\ufe5c\",\"\\ufe5d\":\"\\ufe5e\",\"\\uff08\":\"\\uff09\",\"\\uff3b\":\"\\uff3d\",\"\\uff5b\":\"\\uff5d\",\"\\uff5f\":\"\\uff60\",\"\\uff62\":\"\\uff63\",\"\\u2308\":\"\\u2309\",\"\\u230a\":\"\\u230b\",\"\\u230c\":\"\\u230d\",\"\\u230e\":\"\\u230f\",\"\\u231c\":\"\\u231d\",\"\\u231e\":\"\\u231f\",\n\"\\u239b\":\"\\u239e\",\"\\u239c\":\"\\u239f\",\"\\u239d\":\"\\u23a0\",\"\\u23a1\":\"\\u23a4\",\"\\u23a2\":\"\\u23a5\",\"\\u23a3\":\"\\u23a6\",\"\\u23a7\":\"\\u23ab\",\"\\u23a8\":\"\\u23ac\",\"\\u23a9\":\"\\u23ad\",\"\\u23b0\":\"\\u23b1\",\"\\u23b8\":\"\\u23b9\"};this.topBottomPairs={\"\\u23b4\":\"\\u23b5\",\"\\u23dc\":\"\\u23dd\",\"\\u23de\":\"\\u23df\",\"\\u23e0\":\"\\u23e1\",\"\\ufe35\":\"\\ufe36\",\"\\ufe37\":\"\\ufe38\",\"\\ufe39\":\"\\ufe3a\",\"\\ufe3b\":\"\\ufe3c\",\"\\ufe3d\":\"\\ufe3e\",\"\\ufe3f\":\"\\ufe40\",\"\\ufe41\":\"\\ufe42\",\"\\ufe43\":\"\\ufe44\",\"\\ufe47\":\"\\ufe48\"};this.leftFences=sre.SemanticUtil.objectsToKeys(this.openClosePairs);\nthis.rightFences=sre.SemanticUtil.objectsToValues(this.openClosePairs);this.rightFences.push(\"\\u301f\");this.topFences=sre.SemanticUtil.objectsToKeys(this.topBottomPairs);this.bottomFences=sre.SemanticUtil.objectsToValues(this.topBottomPairs);this.neutralFences=\"|\\u00a6\\u2016\\u2758\\u2980\\u2af4\\uffe4\\uff5c\\u2223\".split(\"\");this.allFences=this.neutralFences.concat(this.leftFences,this.rightFences,this.topFences,this.bottomFences);this.capitalLatin=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\");this.smallLatin=\n\"abcdefghijklmnopqrstuvwxyz\\u0131\\u0237\".split(\"\");this.capitalLatinFullWidth=\"\\uff21\\uff22\\uff23\\uff24\\uff25\\uff26\\uff27\\uff28\\uff29\\uff2a\\uff2b\\uff2c\\uff2d\\uff2e\\uff2f\\uff30\\uff31\\uff32\\uff33\\uff34\\uff35\\uff36\\uff37\\uff38\\uff39\\uff3a\".split(\"\");this.smallLatinFullWidth=\"\\uff41\\uff42\\uff43\\uff44\\uff45\\uff46\\uff47\\uff48\\uff49\\uff4a\\uff4b\\uff4c\\uff4d\\uff4e\\uff4f\\uff50\\uff51\\uff52\\uff53\\uff54\\uff55\\uff56\\uff57\\uff58\\uff59\\uff5a\".split(\"\");this.capitalLatinBold=\"\\ud835\\udc00 \\ud835\\udc01 \\ud835\\udc02 \\ud835\\udc03 \\ud835\\udc04 \\ud835\\udc05 \\ud835\\udc06 \\ud835\\udc07 \\ud835\\udc08 \\ud835\\udc09 \\ud835\\udc0a \\ud835\\udc0b \\ud835\\udc0c \\ud835\\udc0d \\ud835\\udc0e \\ud835\\udc0f \\ud835\\udc10 \\ud835\\udc11 \\ud835\\udc12 \\ud835\\udc13 \\ud835\\udc14 \\ud835\\udc15 \\ud835\\udc16 \\ud835\\udc17 \\ud835\\udc18 \\ud835\\udc19\".split(\" \");\nthis.smallLatinBold=\"\\ud835\\udc1a \\ud835\\udc1b \\ud835\\udc1c \\ud835\\udc1d \\ud835\\udc1e \\ud835\\udc1f \\ud835\\udc20 \\ud835\\udc21 \\ud835\\udc22 \\ud835\\udc23 \\ud835\\udc24 \\ud835\\udc25 \\ud835\\udc26 \\ud835\\udc27 \\ud835\\udc28 \\ud835\\udc29 \\ud835\\udc2a \\ud835\\udc2b \\ud835\\udc2c \\ud835\\udc2d \\ud835\\udc2e \\ud835\\udc2f \\ud835\\udc30 \\ud835\\udc31 \\ud835\\udc32 \\ud835\\udc33\".split(\" \");this.capitalLatinItalic=\"\\ud835\\udc34 \\ud835\\udc35 \\ud835\\udc36 \\ud835\\udc37 \\ud835\\udc38 \\ud835\\udc39 \\ud835\\udc3a \\ud835\\udc3b \\ud835\\udc3c \\ud835\\udc3d \\ud835\\udc3e \\ud835\\udc3f \\ud835\\udc40 \\ud835\\udc41 \\ud835\\udc42 \\ud835\\udc43 \\ud835\\udc44 \\ud835\\udc45 \\ud835\\udc46 \\ud835\\udc47 \\ud835\\udc48 \\ud835\\udc49 \\ud835\\udc4a \\ud835\\udc4b \\ud835\\udc4c \\ud835\\udc4d\".split(\" \");\nthis.smallLatinItalic=\"\\ud835\\udc4e \\ud835\\udc4f \\ud835\\udc50 \\ud835\\udc51 \\ud835\\udc52 \\ud835\\udc53 \\ud835\\udc54 \\u210e \\ud835\\udc56 \\ud835\\udc57 \\ud835\\udc58 \\ud835\\udc59 \\ud835\\udc5a \\ud835\\udc5b \\ud835\\udc5c \\ud835\\udc5d \\ud835\\udc5e \\ud835\\udc5f \\ud835\\udc60 \\ud835\\udc61 \\ud835\\udc62 \\ud835\\udc63 \\ud835\\udc64 \\ud835\\udc65 \\ud835\\udc66 \\ud835\\udc67 \\ud835\\udea4 \\ud835\\udea5\".split(\" \");this.capitalLatinBoldItalic=\"\\ud835\\udc68 \\ud835\\udc69 \\ud835\\udc6a \\ud835\\udc6b \\ud835\\udc6c \\ud835\\udc6d \\ud835\\udc6e \\ud835\\udc6f \\ud835\\udc70 \\ud835\\udc71 \\ud835\\udc72 \\ud835\\udc73 \\ud835\\udc74 \\ud835\\udc75 \\ud835\\udc76 \\ud835\\udc77 \\ud835\\udc78 \\ud835\\udc79 \\ud835\\udc7a \\ud835\\udc7b \\ud835\\udc7c \\ud835\\udc7d \\ud835\\udc7e \\ud835\\udc7f \\ud835\\udc80 \\ud835\\udc81\".split(\" \");\nthis.smallLatinBoldItalic=\"\\ud835\\udc82 \\ud835\\udc83 \\ud835\\udc84 \\ud835\\udc85 \\ud835\\udc86 \\ud835\\udc87 \\ud835\\udc88 \\ud835\\udc89 \\ud835\\udc8a \\ud835\\udc8b \\ud835\\udc8c \\ud835\\udc8d \\ud835\\udc8e \\ud835\\udc8f \\ud835\\udc90 \\ud835\\udc91 \\ud835\\udc92 \\ud835\\udc93 \\ud835\\udc94 \\ud835\\udc95 \\ud835\\udc96 \\ud835\\udc97 \\ud835\\udc98 \\ud835\\udc99 \\ud835\\udc9a \\ud835\\udc9b\".split(\" \");this.capitalLatinScript=\"\\ud835\\udc9c \\u212c \\ud835\\udc9e \\ud835\\udc9f \\u2130 \\u2131 \\ud835\\udca2 \\u210b \\u2110 \\ud835\\udca5 \\ud835\\udca6 \\u2112 \\u2133 \\ud835\\udca9 \\ud835\\udcaa \\ud835\\udcab \\ud835\\udcac \\u211b \\ud835\\udcae \\ud835\\udcaf \\ud835\\udcb0 \\ud835\\udcb1 \\ud835\\udcb2 \\ud835\\udcb3 \\ud835\\udcb4 \\ud835\\udcb5 \\u2118\".split(\" \");\nthis.smallLatinScript=\"\\ud835\\udcb6 \\ud835\\udcb7 \\ud835\\udcb8 \\ud835\\udcb9 \\u212f \\ud835\\udcbb \\u210a \\ud835\\udcbd \\ud835\\udcbe \\ud835\\udcbf \\ud835\\udcc0 \\ud835\\udcc1 \\ud835\\udcc2 \\ud835\\udcc3 \\u2134 \\ud835\\udcc5 \\ud835\\udcc6 \\ud835\\udcc7 \\ud835\\udcc8 \\ud835\\udcc9 \\ud835\\udcca \\ud835\\udccb \\ud835\\udccc \\ud835\\udccd \\ud835\\udcce \\ud835\\udccf \\u2113\".split(\" \");this.capitalLatinBoldScript=\"\\ud835\\udcd0 \\ud835\\udcd1 \\ud835\\udcd2 \\ud835\\udcd3 \\ud835\\udcd4 \\ud835\\udcd5 \\ud835\\udcd6 \\ud835\\udcd7 \\ud835\\udcd8 \\ud835\\udcd9 \\ud835\\udcda \\ud835\\udcdb \\ud835\\udcdc \\ud835\\udcdd \\ud835\\udcde \\ud835\\udcdf \\ud835\\udce0 \\ud835\\udce1 \\ud835\\udce2 \\ud835\\udce3 \\ud835\\udce4 \\ud835\\udce5 \\ud835\\udce6 \\ud835\\udce7 \\ud835\\udce8 \\ud835\\udce9\".split(\" \");\nthis.smallLatinBoldScript=\"\\ud835\\udcea \\ud835\\udceb \\ud835\\udcec \\ud835\\udced \\ud835\\udcee \\ud835\\udcef \\ud835\\udcf0 \\ud835\\udcf1 \\ud835\\udcf2 \\ud835\\udcf3 \\ud835\\udcf4 \\ud835\\udcf5 \\ud835\\udcf6 \\ud835\\udcf7 \\ud835\\udcf8 \\ud835\\udcf9 \\ud835\\udcfa \\ud835\\udcfb \\ud835\\udcfc \\ud835\\udcfd \\ud835\\udcfe \\ud835\\udcff \\ud835\\udd00 \\ud835\\udd01 \\ud835\\udd02 \\ud835\\udd03\".split(\" \");this.capitalLatinFraktur=\"\\ud835\\udd04 \\ud835\\udd05 \\u212d \\ud835\\udd07 \\ud835\\udd08 \\ud835\\udd09 \\ud835\\udd0a \\u210c \\u2111 \\ud835\\udd0d \\ud835\\udd0e \\ud835\\udd0f \\ud835\\udd10 \\ud835\\udd11 \\ud835\\udd12 \\ud835\\udd13 \\ud835\\udd14 \\u211c \\ud835\\udd16 \\ud835\\udd17 \\ud835\\udd18 \\ud835\\udd19 \\ud835\\udd1a \\ud835\\udd1b \\ud835\\udd1c \\u2128\".split(\" \");\nthis.smallLatinFraktur=\"\\ud835\\udd1e \\ud835\\udd1f \\ud835\\udd20 \\ud835\\udd21 \\ud835\\udd22 \\ud835\\udd23 \\ud835\\udd24 \\ud835\\udd25 \\ud835\\udd26 \\ud835\\udd27 \\ud835\\udd28 \\ud835\\udd29 \\ud835\\udd2a \\ud835\\udd2b \\ud835\\udd2c \\ud835\\udd2d \\ud835\\udd2e \\ud835\\udd2f \\ud835\\udd30 \\ud835\\udd31 \\ud835\\udd32 \\ud835\\udd33 \\ud835\\udd34 \\ud835\\udd35 \\ud835\\udd36 \\ud835\\udd37\".split(\" \");this.capitalLatinDoubleStruck=\"\\ud835\\udd38 \\ud835\\udd39 \\u2102 \\ud835\\udd3b \\ud835\\udd3c \\ud835\\udd3d \\ud835\\udd3e \\u210d \\ud835\\udd40 \\ud835\\udd41 \\ud835\\udd42 \\ud835\\udd43 \\ud835\\udd44 \\u2115 \\ud835\\udd46 \\u2119 \\u211a \\u211d \\ud835\\udd4a \\ud835\\udd4b \\ud835\\udd4c \\ud835\\udd4d \\ud835\\udd4e \\ud835\\udd4f \\ud835\\udd50 \\u2124\".split(\" \");\nthis.smallLatinDoubleStruck=\"\\ud835\\udd52 \\ud835\\udd53 \\ud835\\udd54 \\ud835\\udd55 \\ud835\\udd56 \\ud835\\udd57 \\ud835\\udd58 \\ud835\\udd59 \\ud835\\udd5a \\ud835\\udd5b \\ud835\\udd5c \\ud835\\udd5d \\ud835\\udd5e \\ud835\\udd5f \\ud835\\udd60 \\ud835\\udd61 \\ud835\\udd62 \\ud835\\udd63 \\ud835\\udd64 \\ud835\\udd65 \\ud835\\udd66 \\ud835\\udd67 \\ud835\\udd68 \\ud835\\udd69 \\ud835\\udd6a \\ud835\\udd6b\".split(\" \");this.capitalLatinBoldFraktur=\"\\ud835\\udd6c \\ud835\\udd6d \\ud835\\udd6e \\ud835\\udd6f \\ud835\\udd70 \\ud835\\udd71 \\ud835\\udd72 \\ud835\\udd73 \\ud835\\udd74 \\ud835\\udd75 \\ud835\\udd76 \\ud835\\udd77 \\ud835\\udd78 \\ud835\\udd79 \\ud835\\udd7a \\ud835\\udd7b \\ud835\\udd7c \\ud835\\udd7d \\ud835\\udd7e \\ud835\\udd7f \\ud835\\udd80 \\ud835\\udd81 \\ud835\\udd82 \\ud835\\udd83 \\ud835\\udd84 \\ud835\\udd85\".split(\" \");\nthis.smallLatinBoldFraktur=\"\\ud835\\udd86 \\ud835\\udd87 \\ud835\\udd88 \\ud835\\udd89 \\ud835\\udd8a \\ud835\\udd8b \\ud835\\udd8c \\ud835\\udd8d \\ud835\\udd8e \\ud835\\udd8f \\ud835\\udd90 \\ud835\\udd91 \\ud835\\udd92 \\ud835\\udd93 \\ud835\\udd94 \\ud835\\udd95 \\ud835\\udd96 \\ud835\\udd97 \\ud835\\udd98 \\ud835\\udd99 \\ud835\\udd9a \\ud835\\udd9b \\ud835\\udd9c \\ud835\\udd9d \\ud835\\udd9e \\ud835\\udd9f\".split(\" \");this.capitalLatinSansSerif=\"\\ud835\\udda0 \\ud835\\udda1 \\ud835\\udda2 \\ud835\\udda3 \\ud835\\udda4 \\ud835\\udda5 \\ud835\\udda6 \\ud835\\udda7 \\ud835\\udda8 \\ud835\\udda9 \\ud835\\uddaa \\ud835\\uddab \\ud835\\uddac \\ud835\\uddad \\ud835\\uddae \\ud835\\uddaf \\ud835\\uddb0 \\ud835\\uddb1 \\ud835\\uddb2 \\ud835\\uddb3 \\ud835\\uddb4 \\ud835\\uddb5 \\ud835\\uddb6 \\ud835\\uddb7 \\ud835\\uddb8 \\ud835\\uddb9\".split(\" \");\nthis.smallLatinSansSerif=\"\\ud835\\uddba \\ud835\\uddbb \\ud835\\uddbc \\ud835\\uddbd \\ud835\\uddbe \\ud835\\uddbf \\ud835\\uddc0 \\ud835\\uddc1 \\ud835\\uddc2 \\ud835\\uddc3 \\ud835\\uddc4 \\ud835\\uddc5 \\ud835\\uddc6 \\ud835\\uddc7 \\ud835\\uddc8 \\ud835\\uddc9 \\ud835\\uddca \\ud835\\uddcb \\ud835\\uddcc \\ud835\\uddcd \\ud835\\uddce \\ud835\\uddcf \\ud835\\uddd0 \\ud835\\uddd1 \\ud835\\uddd2 \\ud835\\uddd3\".split(\" \");this.capitalLatinSansSerifBold=\"\\ud835\\uddd4 \\ud835\\uddd5 \\ud835\\uddd6 \\ud835\\uddd7 \\ud835\\uddd8 \\ud835\\uddd9 \\ud835\\uddda \\ud835\\udddb \\ud835\\udddc \\ud835\\udddd \\ud835\\uddde \\ud835\\udddf \\ud835\\udde0 \\ud835\\udde1 \\ud835\\udde2 \\ud835\\udde3 \\ud835\\udde4 \\ud835\\udde5 \\ud835\\udde6 \\ud835\\udde7 \\ud835\\udde8 \\ud835\\udde9 \\ud835\\uddea \\ud835\\uddeb \\ud835\\uddec \\ud835\\udded\".split(\" \");\nthis.smallLatinSansSerifBold=\"\\ud835\\uddee \\ud835\\uddef \\ud835\\uddf0 \\ud835\\uddf1 \\ud835\\uddf2 \\ud835\\uddf3 \\ud835\\uddf4 \\ud835\\uddf5 \\ud835\\uddf6 \\ud835\\uddf7 \\ud835\\uddf8 \\ud835\\uddf9 \\ud835\\uddfa \\ud835\\uddfb \\ud835\\uddfc \\ud835\\uddfd \\ud835\\uddfe \\ud835\\uddff \\ud835\\ude00 \\ud835\\ude01 \\ud835\\ude02 \\ud835\\ude03 \\ud835\\ude04 \\ud835\\ude05 \\ud835\\ude06 \\ud835\\ude07\".split(\" \");this.capitalLatinSansSerifItalic=\"\\ud835\\ude08 \\ud835\\ude09 \\ud835\\ude0a \\ud835\\ude0b \\ud835\\ude0c \\ud835\\ude0d \\ud835\\ude0e \\ud835\\ude0f \\ud835\\ude10 \\ud835\\ude11 \\ud835\\ude12 \\ud835\\ude13 \\ud835\\ude14 \\ud835\\ude15 \\ud835\\ude16 \\ud835\\ude17 \\ud835\\ude18 \\ud835\\ude19 \\ud835\\ude1a \\ud835\\ude1b \\ud835\\ude1c \\ud835\\ude1d \\ud835\\ude1e \\ud835\\ude1f \\ud835\\ude20 \\ud835\\ude21\".split(\" \");\nthis.smallLatinSansSerifItalic=\"\\ud835\\ude22 \\ud835\\ude23 \\ud835\\ude24 \\ud835\\ude25 \\ud835\\ude26 \\ud835\\ude27 \\ud835\\ude28 \\ud835\\ude29 \\ud835\\ude2a \\ud835\\ude2b \\ud835\\ude2c \\ud835\\ude2d \\ud835\\ude2e \\ud835\\ude2f \\ud835\\ude30 \\ud835\\ude31 \\ud835\\ude32 \\ud835\\ude33 \\ud835\\ude34 \\ud835\\ude35 \\ud835\\ude36 \\ud835\\ude37 \\ud835\\ude38 \\ud835\\ude39 \\ud835\\ude3a \\ud835\\ude3b\".split(\" \");this.capitalLatinSansSerifBoldItalic=\"\\ud835\\ude3c \\ud835\\ude3d \\ud835\\ude3e \\ud835\\ude3f \\ud835\\ude40 \\ud835\\ude41 \\ud835\\ude42 \\ud835\\ude43 \\ud835\\ude44 \\ud835\\ude45 \\ud835\\ude46 \\ud835\\ude47 \\ud835\\ude48 \\ud835\\ude49 \\ud835\\ude4a \\ud835\\ude4b \\ud835\\ude4c \\ud835\\ude4d \\ud835\\ude4e \\ud835\\ude4f \\ud835\\ude50 \\ud835\\ude51 \\ud835\\ude52 \\ud835\\ude53 \\ud835\\ude54 \\ud835\\ude55\".split(\" \");\nthis.smallLatinSansSerifBoldItalic=\"\\ud835\\ude56 \\ud835\\ude57 \\ud835\\ude58 \\ud835\\ude59 \\ud835\\ude5a \\ud835\\ude5b \\ud835\\ude5c \\ud835\\ude5d \\ud835\\ude5e \\ud835\\ude5f \\ud835\\ude60 \\ud835\\ude61 \\ud835\\ude62 \\ud835\\ude63 \\ud835\\ude64 \\ud835\\ude65 \\ud835\\ude66 \\ud835\\ude67 \\ud835\\ude68 \\ud835\\ude69 \\ud835\\ude6a \\ud835\\ude6b \\ud835\\ude6c \\ud835\\ude6d \\ud835\\ude6e \\ud835\\ude6f\".split(\" \");this.capitalLatinMonospace=\"\\ud835\\ude70 \\ud835\\ude71 \\ud835\\ude72 \\ud835\\ude73 \\ud835\\ude74 \\ud835\\ude75 \\ud835\\ude76 \\ud835\\ude77 \\ud835\\ude78 \\ud835\\ude79 \\ud835\\ude7a \\ud835\\ude7b \\ud835\\ude7c \\ud835\\ude7d \\ud835\\ude7e \\ud835\\ude7f \\ud835\\ude80 \\ud835\\ude81 \\ud835\\ude82 \\ud835\\ude83 \\ud835\\ude84 \\ud835\\ude85 \\ud835\\ude86 \\ud835\\ude87 \\ud835\\ude88 \\ud835\\ude89\".split(\" \");\nthis.smallLatinMonospace=\"\\ud835\\ude8a \\ud835\\ude8b \\ud835\\ude8c \\ud835\\ude8d \\ud835\\ude8e \\ud835\\ude8f \\ud835\\ude90 \\ud835\\ude91 \\ud835\\ude92 \\ud835\\ude93 \\ud835\\ude94 \\ud835\\ude95 \\ud835\\ude96 \\ud835\\ude97 \\ud835\\ude98 \\ud835\\ude99 \\ud835\\ude9a \\ud835\\ude9b \\ud835\\ude9c \\ud835\\ude9d \\ud835\\ude9e \\ud835\\ude9f \\ud835\\udea0 \\ud835\\udea1 \\ud835\\udea2 \\ud835\\udea3\".split(\" \");this.latinDoubleStruckItalic=[\"\\u2145\",\"\\u2146\",\"\\u2147\",\"\\u2148\",\"\\u2149\"];this.capitalGreek=\"\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\".split(\"\");\nthis.smallGreek=\"\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\".split(\"\");this.capitalGreekBold=\"\\ud835\\udea8 \\ud835\\udea9 \\ud835\\udeaa \\ud835\\udeab \\ud835\\udeac \\ud835\\udead \\ud835\\udeae \\ud835\\udeaf \\ud835\\udeb0 \\ud835\\udeb1 \\ud835\\udeb2 \\ud835\\udeb3 \\ud835\\udeb4 \\ud835\\udeb5 \\ud835\\udeb6 \\ud835\\udeb7 \\ud835\\udeb8 \\ud835\\udeba \\ud835\\udebb \\ud835\\udebc \\ud835\\udebd \\ud835\\udebe \\ud835\\udebf \\ud835\\udec0\".split(\" \");\nthis.smallGreekBold=\"\\ud835\\udec2 \\ud835\\udec3 \\ud835\\udec4 \\ud835\\udec5 \\ud835\\udec6 \\ud835\\udec7 \\ud835\\udec8 \\ud835\\udec9 \\ud835\\udeca \\ud835\\udecb \\ud835\\udecc \\ud835\\udecd \\ud835\\udece \\ud835\\udecf \\ud835\\uded0 \\ud835\\uded1 \\ud835\\uded2 \\ud835\\uded3 \\ud835\\uded4 \\ud835\\uded5 \\ud835\\uded6 \\ud835\\uded7 \\ud835\\uded8 \\ud835\\uded9 \\ud835\\udeda\".split(\" \");this.capitalGreekItalic=\"\\ud835\\udee2 \\ud835\\udee3 \\ud835\\udee4 \\ud835\\udee5 \\ud835\\udee6 \\ud835\\udee7 \\ud835\\udee8 \\ud835\\udee9 \\ud835\\udeea \\ud835\\udeeb \\ud835\\udeec \\ud835\\udeed \\ud835\\udeee \\ud835\\udeef \\ud835\\udef0 \\ud835\\udef1 \\ud835\\udef2 \\ud835\\udef4 \\ud835\\udef5 \\ud835\\udef6 \\ud835\\udef7 \\ud835\\udef8 \\ud835\\udef9 \\ud835\\udefa\".split(\" \");\nthis.smallGreekItalic=\"\\ud835\\udefc \\ud835\\udefd \\ud835\\udefe \\ud835\\udeff \\ud835\\udf00 \\ud835\\udf01 \\ud835\\udf02 \\ud835\\udf03 \\ud835\\udf04 \\ud835\\udf05 \\ud835\\udf06 \\ud835\\udf07 \\ud835\\udf08 \\ud835\\udf09 \\ud835\\udf0a \\ud835\\udf0b \\ud835\\udf0c \\ud835\\udf0d \\ud835\\udf0e \\ud835\\udf0f \\ud835\\udf10 \\ud835\\udf11 \\ud835\\udf12 \\ud835\\udf13 \\ud835\\udf14\".split(\" \");this.capitalGreekBoldItalic=\"\\ud835\\udf1c \\ud835\\udf1d \\ud835\\udf1e \\ud835\\udf1f \\ud835\\udf20 \\ud835\\udf21 \\ud835\\udf22 \\ud835\\udf23 \\ud835\\udf24 \\ud835\\udf25 \\ud835\\udf26 \\ud835\\udf27 \\ud835\\udf28 \\ud835\\udf29 \\ud835\\udf2a \\ud835\\udf2b \\ud835\\udf2c \\ud835\\udf2e \\ud835\\udf2f \\ud835\\udf30 \\ud835\\udf31 \\ud835\\udf32 \\ud835\\udf33 \\ud835\\udf34\".split(\" \");\nthis.smallGreekBoldItalic=\"\\ud835\\udf36 \\ud835\\udf37 \\ud835\\udf38 \\ud835\\udf39 \\ud835\\udf3a \\ud835\\udf3b \\ud835\\udf3c \\ud835\\udf3d \\ud835\\udf3e \\ud835\\udf3f \\ud835\\udf40 \\ud835\\udf41 \\ud835\\udf42 \\ud835\\udf43 \\ud835\\udf44 \\ud835\\udf45 \\ud835\\udf46 \\ud835\\udf47 \\ud835\\udf48 \\ud835\\udf49 \\ud835\\udf4a \\ud835\\udf4b \\ud835\\udf4c \\ud835\\udf4d \\ud835\\udf4e\".split(\" \");this.capitalGreekSansSerifBold=\"\\ud835\\udf56 \\ud835\\udf57 \\ud835\\udf58 \\ud835\\udf59 \\ud835\\udf5a \\ud835\\udf5b \\ud835\\udf5c \\ud835\\udf5d \\ud835\\udf5e \\ud835\\udf5f \\ud835\\udf60 \\ud835\\udf61 \\ud835\\udf62 \\ud835\\udf63 \\ud835\\udf64 \\ud835\\udf65 \\ud835\\udf66 \\ud835\\udf68 \\ud835\\udf69 \\ud835\\udf6a \\ud835\\udf6b \\ud835\\udf6c \\ud835\\udf6d \\ud835\\udf6e\".split(\" \");\nthis.smallGreekSansSerifBold=\"\\ud835\\udf70 \\ud835\\udf71 \\ud835\\udf72 \\ud835\\udf73 \\ud835\\udf74 \\ud835\\udf75 \\ud835\\udf76 \\ud835\\udf77 \\ud835\\udf78 \\ud835\\udf79 \\ud835\\udf7a \\ud835\\udf7b \\ud835\\udf7c \\ud835\\udf7d \\ud835\\udf7e \\ud835\\udf7f \\ud835\\udf80 \\ud835\\udf81 \\ud835\\udf82 \\ud835\\udf83 \\ud835\\udf84 \\ud835\\udf85 \\ud835\\udf86 \\ud835\\udf87 \\ud835\\udf88\".split(\" \");this.capitalGreekSansSerifBoldItalic=\"\\ud835\\udf90 \\ud835\\udf91 \\ud835\\udf92 \\ud835\\udf93 \\ud835\\udf94 \\ud835\\udf95 \\ud835\\udf96 \\ud835\\udf97 \\ud835\\udf98 \\ud835\\udf99 \\ud835\\udf9a \\ud835\\udf9b \\ud835\\udf9c \\ud835\\udf9d \\ud835\\udf9e \\ud835\\udf9f \\ud835\\udfa0 \\ud835\\udfa2 \\ud835\\udfa3 \\ud835\\udfa4 \\ud835\\udfa5 \\ud835\\udfa6 \\ud835\\udfa7 \\ud835\\udfa8\".split(\" \");\nthis.smallGreekSansSerifBoldItalic=\"\\ud835\\udfaa \\ud835\\udfab \\ud835\\udfac \\ud835\\udfad \\ud835\\udfae \\ud835\\udfaf \\ud835\\udfb0 \\ud835\\udfb1 \\ud835\\udfb2 \\ud835\\udfb3 \\ud835\\udfb4 \\ud835\\udfb5 \\ud835\\udfb6 \\ud835\\udfb7 \\ud835\\udfb8 \\ud835\\udfb9 \\ud835\\udfba \\ud835\\udfbb \\ud835\\udfbc \\ud835\\udfbd \\ud835\\udfbe \\ud835\\udfbf \\ud835\\udfc0 \\ud835\\udfc1 \\ud835\\udfc2\".split(\" \");this.greekDoubleStruck=[\"\\u213c\",\"\\u213d\",\"\\u213e\",\"\\u213f\"];this.greekSpecial=\"\\u03d0\\u03d1\\u03d5\\u03d6\\u03d7\\u03f0\\u03f1\\u03f5\\u03f6\\u03f4\".split(\"\");\nthis.greekSpecialBold=\"\\ud835\\udedc \\ud835\\udedd \\ud835\\udede \\ud835\\udedf \\ud835\\udee0 \\ud835\\udee1\".split(\" \");this.greekSpecialItalic=\"\\ud835\\udf16 \\ud835\\udf17 \\ud835\\udf18 \\ud835\\udf19 \\ud835\\udf1a \\ud835\\udf1b\".split(\" \");this.greekSpecialSansSerifBold=\"\\ud835\\udf8a \\ud835\\udf8b \\ud835\\udf8c \\ud835\\udf8d \\ud835\\udf8e \\ud835\\udf8f\".split(\" \");this.hebrewLetters=[\"\\u2135\",\"\\u2136\",\"\\u2137\",\"\\u2138\"];this.allLetters=this.capitalLatin.concat(this.smallLatin,this.capitalLatinFullWidth,this.smallLatinFullWidth,\nthis.capitalLatinBold,this.smallLatinBold,this.capitalLatinItalic,this.capitalLatinBoldItalic,this.smallLatinBoldItalic,this.smallLatinItalic,this.capitalLatinScript,this.smallLatinScript,this.capitalLatinBoldScript,this.smallLatinBoldScript,this.capitalLatinFraktur,this.smallLatinFraktur,this.capitalLatinDoubleStruck,this.smallLatinDoubleStruck,this.capitalLatinBoldFraktur,this.smallLatinBoldFraktur,this.capitalLatinSansSerif,this.smallLatinSansSerif,this.capitalLatinSansSerifBold,this.smallLatinSansSerifBold,\nthis.capitalLatinSansSerifItalic,this.smallLatinSansSerifItalic,this.capitalLatinSansSerifBoldItalic,this.smallLatinSansSerifBoldItalic,this.capitalLatinMonospace,this.smallLatinMonospace,this.latinDoubleStruckItalic,this.capitalGreek,this.smallGreek,this.capitalGreekBold,this.smallGreekBold,this.capitalGreekItalic,this.smallGreekItalic,this.capitalGreekBoldItalic,this.smallGreekBoldItalic,this.capitalGreekSansSerifBold,this.smallGreekSansSerifBold,this.greekDoubleStruck,this.greekSpecial,this.capitalGreekSansSerifBoldItalic,\nthis.smallGreekSansSerifBoldItalic,this.greekSpecialBold,this.greekSpecialItalic,this.greekSpecialSansSerifBold,this.hebrewLetters);this.additions=\"+\\u00b1\\u2213\\u2214\\u2227\\u2228\\u2229\\u222a\\u228c\\u2293\\u2294\\u229d\\u229e\\u22a4\\u22a5\\u22ba\\u22bb\\u22bc\\u22c4\\u22ce\\u22cf\\u22d2\\u22d3\\u25b3\\u25b7\\u25bd\\u25c1\\u2a5e\\u2295\".split(\"\");this.invisiblePlus_=sre.SemanticUtil.numberToUnicode(8292);this.additions.push(this.invisiblePlus_);this.multiplications=\"\\u2020\\u2021\\u2210\\u2217\\u2218\\u2219\\u2240\\u229a\\u229b\\u22a0\\u22a1\\u22c5\\u22c6\\u22c7\\u22c9\\u22ca\\u22cb\\u22cc\\u25cb\\u00b7*\".split(\"\");\nthis.invisibleTimes_=sre.SemanticUtil.numberToUnicode(8290);this.multiplications.push(this.invisibleTimes_);this.subtractions=\"-\\u2052\\u207b\\u208b\\u2212\\u2216\\u2238\\u2242\\u2296\\u229f\\u2796\\u2a29\\u2a2a\\u2a2b\\u2a2c\\u2a3a\\u2a41\\u2a6c\\ufe63\\uff0d\\u2010\\u2011\".split(\"\");this.divisions=\"/\\u00f7\\u2044\\u2215\\u2298\\u27cc\\u29bc\\u2a38\".split(\"\");this.functionApplication_=sre.SemanticUtil.numberToUnicode(8289);this.equalities=\"=~\\u207c\\u208c\\u223c\\u223d\\u2243\\u2245\\u2248\\u224a\\u224b\\u224c\\u224d\\u224e\\u2251\\u2252\\u2253\\u2254\\u2255\\u2256\\u2257\\u2258\\u2259\\u225a\\u225b\\u225c\\u225d\\u225e\\u225f\\u2261\\u2263\\u29e4\\u2a66\\u2a6e\\u2a6f\\u2a70\\u2a71\\u2a72\\u2a73\\u2a74\\u2a75\\u2a76\\u2a77\\u2a78\\u22d5\\u2a6d\\u2a6a\\u2a6b\\u2a6c\\ufe66\\uff1d\".split(\"\");\nthis.inequalities=\"<>\\u2241\\u2242\\u2244\\u2246\\u2247\\u2249\\u224f\\u2250\\u2260\\u2262\\u2264\\u2265\\u2266\\u2267\\u2268\\u2269\\u226a\\u226b\\u226c\\u226d\\u226e\\u226f\\u2270\\u2271\\u2272\\u2273\\u2274\\u2275\\u2276\\u2277\\u2278\\u2279\\u227a\\u227b\\u227c\\u227d\\u227e\\u227f\\u2280\\u2281\\u22d6\\u22d7\\u22d8\\u22d9\\u22da\\u22db\\u22dc\\u22dd\\u22de\\u22df\\u22e0\\u22e1\\u22e2\\u22e3\\u22e4\\u22e5\\u22e6\\u22e7\\u22e8\\u22e9\\u2a79\\u2a7a\\u2a7b\\u2a7c\\u2a7d\\u2a7e\\u2a7f\\u2a80\\u2a81\\u2a82\\u2a83\\u2a84\\u2a85\\u2a86\\u2a87\\u2a88\\u2a89\\u2a8a\\u2a8b\\u2a8c\\u2a8d\\u2a8e\\u2a8f\\u2a90\\u2a91\\u2a92\\u2a93\\u2a94\\u2a95\\u2a96\\u2a97\\u2a98\\u2a99\\u2a9a\\u2a9b\\u2a9c\\u2a9d\\u2a9e\\u2a9f\\u2aa0\\u2aa1\\u2aa2\\u2aa3\\u2aa4\\u2aa5\\u2aa6\\u2aa7\\u2aa8\\u2aa9\\u2aaa\\u2aab\\u2aac\\u2aad\\u2aae\\u2aaf\\u2ab0\\u2ab1\\u2ab2\\u2ab3\\u2ab4\\u2ab5\\u2ab6\\u2ab7\\u2ab8\\u2ab9\\u2aba\\u2abb\\u2abc\\u2af7\\u2af8\\u2af9\\u2afa\\u29c0\\u29c1\\ufe64\\ufe65\\uff1c\\uff1e\".split(\"\");\nthis.relations=[];this.arrows=\"\\u2190\\u2191\\u2192\\u2193\\u2194\\u2195\\u2196\\u2197\\u2198\\u2199\\u219a\\u219b\\u219c\\u219d\\u219e\\u219f\\u21a0\\u21a1\\u21a2\\u21a3\\u21a4\\u21a5\\u21a6\\u21a7\\u21a8\\u21a9\\u21aa\\u21ab\\u21ac\\u21ad\\u21ae\\u21af\\u21b0\\u21b1\\u21b2\\u21b3\\u21b4\\u21b5\\u21b6\\u21b7\\u21b8\\u21b9\\u21ba\\u21bb\\u21c4\\u21c5\\u21c6\\u21c7\\u21c8\\u21c9\\u21ca\\u21cd\\u21ce\\u21cf\\u21d0\\u21d1\\u21d2\\u21d3\\u21d4\\u21d5\\u21d6\\u21d7\\u21d8\\u21d9\\u21da\\u21db\\u21dc\\u21dd\\u21de\\u21df\\u21e0\\u21e1\\u21e2\\u21e3\\u21e4\\u21e5\\u21e6\\u21e7\\u21e8\\u21e9\\u21ea\\u21eb\\u21ec\\u21ed\\u21ee\\u21ef\\u21f0\\u21f1\\u21f2\\u21f3\\u21f4\\u21f5\\u21f6\\u21f7\\u21f8\\u21f9\\u21fa\\u21fb\\u21fc\\u21fd\\u21fe\\u21ff\\u2301\\u2303\\u2304\\u2324\\u238b\\u2794\\u2798\\u2799\\u279a\\u279b\\u279c\\u279d\\u279e\\u279f\\u27a0\\u27a1\\u27a2\\u27a3\\u27a4\\u27a5\\u27a6\\u27a7\\u27a8\\u27a9\\u27aa\\u27ab\\u27ac\\u27ad\\u27ae\\u27af\\u27b1\\u27b2\\u27b3\\u27b4\\u27b5\\u27b6\\u27b7\\u27b8\\u27b9\\u27ba\\u27bb\\u27bc\\u27bd\\u27be\\u27f0\\u27f1\\u27f2\\u27f3\\u27f4\\u27f5\\u27f6\\u27f7\\u27f8\\u27f9\\u27fa\\u27fb\\u27fc\\u27fd\\u27fe\\u27ff\\u2900\\u2901\\u2902\\u2903\\u2904\\u2905\\u2906\\u2907\\u2908\\u2909\\u290a\\u290b\\u290c\\u290d\\u290e\\u290f\\u2910\\u2911\\u2912\\u2913\\u2914\\u2915\\u2916\\u2917\\u2918\\u2919\\u291a\\u291b\\u291c\\u291d\\u291e\\u291f\\u2920\\u2921\\u2922\\u2923\\u2924\\u2925\\u2926\\u2927\\u2928\\u2929\\u292a\\u292d\\u292e\\u292f\\u2930\\u2931\\u2932\\u2933\\u2934\\u2935\\u2936\\u2937\\u2938\\u2939\\u293a\\u293b\\u293c\\u293d\\u293e\\u293f\\u2940\\u2941\\u2942\\u2943\\u2944\\u2945\\u2946\\u2947\\u2948\\u2949\\u2970\\u2971\\u2972\\u2973\\u2974\\u2975\\u2976\\u2977\\u2978\\u2979\\u297a\\u297b\\u29b3\\u29b4\\u29bd\\u29ea\\u29ec\\u29ed\\u2a17\\u2b00\\u2b01\\u2b02\\u2b03\\u2b04\\u2b05\\u2b06\\u2b07\\u2b08\\u2b09\\u2b0a\\u2b0b\\u2b0c\\u2b0d\\u2b0e\\u2b0f\\u2b10\\u2b11\\u2b30\\u2b31\\u2b32\\u2b33\\u2b34\\u2b35\\u2b36\\u2b37\\u2b38\\u2b39\\u2b3a\\u2b3b\\u2b3c\\u2b3d\\u2b3e\\u2b3f\\u2b40\\u2b41\\u2b42\\u2b43\\u2b44\\u2b45\\u2b46\\u2b47\\u2b48\\u2b49\\u2b4a\\u2b4b\\u2b4c\\uffe9\\uffea\\uffeb\\uffec\\u21bc\\u21bd\\u21be\\u21bf\\u21c0\\u21c1\\u21c2\\u21c3\\u21cb\\u21cc\\u294a\\u294b\\u294c\\u294d\\u294e\\u294f\\u2950\\u2951\\u2952\\u2953\\u2954\\u2955\\u2956\\u2957\\u2958\\u2959\\u295a\\u295b\\u295c\\u295d\\u295e\\u295f\\u2960\\u2961\\u2962\\u2963\\u2964\\u2965\\u2966\\u2967\\u2968\\u2969\\u296a\\u296b\\u296c\\u296d\\u296e\\u296f\\u297c\\u297d\\u297e\\u297f\".split(\"\");\nthis.sumOps=\"\\u2140\\u220f\\u2210\\u2211\\u22c0\\u22c1\\u22c2\\u22c3\\u2a00\\u2a01\\u2a02\\u2a03\\u2a04\\u2a05\\u2a06\\u2a07\\u2a08\\u2a09\\u2a0a\\u2a0b\\u2afc\\u2aff\".split(\"\");this.intOps=\"\\u222b\\u222c\\u222d\\u222e\\u222f\\u2230\\u2231\\u2232\\u2233\\u2a0c\\u2a0d\\u2a0e\\u2a0f\\u2a10\\u2a11\\u2a12\\u2a13\\u2a14\\u2a15\\u2a16\\u2a17\\u2a18\\u2a19\\u2a1a\\u2a1b\\u2a1c\".split(\"\");this.prefixOps=\"\\u2200\\u2203\\u2206\\u2207\\u2202\\u2201\\u2204\".split(\"\");this.prefixOpsBold=[\"\\ud835\\udec1\",\"\\ud835\\udedb\",\"\\ud835\\udfca\",\"\\ud835\\udfcb\"];this.prefixOpsItalic=\n[\"\\ud835\\udefb\",\"\\ud835\\udf15\"];this.prefixOpsSansSerifBold=[\"\\ud835\\udf6f\",\"\\ud835\\udf89\"];this.operatorBits=\"\\u2320\\u2321\\u23b6\\u23aa\\u23ae\\u23af\\u23b2\\u23b3\\u23b7\".split(\"\");this.digitsNormal=\"0123456789\".split(\"\");this.digitsFullWidth=\"\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19\".split(\"\");this.digitsBold=\"\\ud835\\udfce \\ud835\\udfcf \\ud835\\udfd0 \\ud835\\udfd1 \\ud835\\udfd2 \\ud835\\udfd3 \\ud835\\udfd4 \\ud835\\udfd5 \\ud835\\udfd6 \\ud835\\udfd7\".split(\" \");this.digitsDoubleStruck=\"\\ud835\\udfd8 \\ud835\\udfd9 \\ud835\\udfda \\ud835\\udfdb \\ud835\\udfdc \\ud835\\udfdd \\ud835\\udfde \\ud835\\udfdf \\ud835\\udfe0 \\ud835\\udfe1\".split(\" \");\nthis.digitsSansSerif=\"\\ud835\\udfe2 \\ud835\\udfe3 \\ud835\\udfe4 \\ud835\\udfe5 \\ud835\\udfe6 \\ud835\\udfe7 \\ud835\\udfe8 \\ud835\\udfe9 \\ud835\\udfea \\ud835\\udfeb\".split(\" \");this.digitsSansSerifBold=\"\\ud835\\udfec \\ud835\\udfed \\ud835\\udfee \\ud835\\udfef \\ud835\\udff0 \\ud835\\udff1 \\ud835\\udff2 \\ud835\\udff3 \\ud835\\udff4 \\ud835\\udff5\".split(\" \");this.digitsMonospace=\"\\ud835\\udff6 \\ud835\\udff7 \\ud835\\udff8 \\ud835\\udff9 \\ud835\\udffa \\ud835\\udffb \\ud835\\udffc \\ud835\\udffd \\ud835\\udffe \\ud835\\udfff\".split(\" \");this.digitsSuperscript=\n\"\\u00b2\\u00b3\\u00b9\\u2070\\u2074\\u2075\\u2076\\u2077\\u2078\\u2079\".split(\"\");this.digitsSubscript=\"\\u2080\\u2081\\u2082\\u2083\\u2084\\u2085\\u2086\\u2087\\u2088\\u2089\".split(\"\");this.fractions=\"\\u00bc\\u00bd\\u00be\\u2150\\u2151\\u2152\\u2153\\u2154\\u2155\\u2156\\u2157\\u2158\\u2159\\u215a\\u215b\\u215c\\u215d\\u215e\\u215f\\u2189\".split(\"\");this.enclosedNumbers=\"\\u2460\\u2461\\u2462\\u2463\\u2464\\u2465\\u2466\\u2467\\u2468\\u2469\\u246a\\u246b\\u246c\\u246d\\u246e\\u246f\\u2470\\u2471\\u2472\\u2473\\u24ea\\u24eb\\u24ec\\u24ed\\u24ee\\u24ef\\u24f0\\u24f1\\u24f2\\u24f3\\u24f4\\u24f5\\u24f6\\u24f7\\u24f8\\u24f9\\u24fa\\u24fb\\u24fc\\u24fd\\u24fe\\u24ff\\u2776\\u2777\\u2778\\u2779\\u277a\\u277b\\u277c\\u277d\\u277e\\u277f\\u2780\\u2781\\u2782\\u2783\\u2784\\u2785\\u2786\\u2787\\u2788\\u2789\\u278a\\u278b\\u278c\\u278d\\u278e\\u278f\\u2790\\u2791\\u2792\\u2793\\u3248\\u3249\\u324a\\u324b\\u324c\\u324d\\u324e\\u324f\\u3251\\u3252\\u3253\\u3254\\u3255\\u3256\\u3257\\u3258\\u3259\\u325a\\u325b\\u325c\\u325d\\u325e\\u325f\\u32b1\\u32b2\\u32b3\\u32b4\\u32b5\\u32b6\\u32b7\\u32b8\\u32b9\\u32ba\\u32bb\\u32bc\\u32bd\\u32be\\u32bf\".split(\"\");\nthis.fencedNumbers=\"\\u2474\\u2475\\u2476\\u2477\\u2478\\u2479\\u247a\\u247b\\u247c\\u247d\\u247e\\u247f\\u2480\\u2481\\u2482\\u2483\\u2484\\u2485\\u2486\\u2487\".split(\"\");this.punctuatedNumbers=\"\\u2488 \\u2489 \\u248a \\u248b \\u248c \\u248d \\u248e \\u248f \\u2490 \\u2491 \\u2492 \\u2493 \\u2494 \\u2495 \\u2496 \\u2497 \\u2498 \\u2499 \\u249a \\u249b \\ud83c\\udd00 \\ud83c\\udd01 \\ud83c\\udd02 \\ud83c\\udd03 \\ud83c\\udd04 \\ud83c\\udd05 \\ud83c\\udd06 \\ud83c\\udd07 \\ud83c\\udd08 \\ud83c\\udd09 \\ud83c\\udd0a\".split(\" \");this.digits=this.digitsNormal.concat(this.digitsFullWidth,\nthis.digitsBold,this.digitsDoubleStruck,this.digitsSansSerif,this.digitsSansSerifBold,this.digitsMonospace);this.numbers=this.fractions.concat(this.digitsSuperscript,this.digitsSubscript,this.enclosedNumbers,this.fencedNumbers,this.punctuatedNumbers);this.allNumbers=this.digits.concat(this.numbers);this.trigonometricFunctions=\"cos cot csc sec sin tan arccos arccot arccsc arcsec arcsin arctan\".split(\" \");this.hyperbolicFunctions=\"cosh coth csch sech sinh tanh arcosh arcoth arcsch arsech arsinh artanh arccosh arccoth arccsch arcsech arcsinh arctanh\".split(\" \");\nthis.algebraicFunctions=\"deg det dim hom ker Tr tr\".split(\" \");this.elementaryFunctions=\"log ln lg exp expt gcd gcd arg im re Pr\".split(\" \");this.prefixFunctions=this.trigonometricFunctions.concat(this.hyperbolicFunctions,this.algebraicFunctions,this.elementaryFunctions);this.limitFunctions=\"inf lim liminf limsup max min sup injlim projlim\".split(\" \");this.infixFunctions=[\"mod\",\"rem\"];this.symbolSetToSemantic_=[{set:this.generalPunctuations,type:sre.SemanticAttr.Type.PUNCTUATION,role:sre.SemanticAttr.Role.UNKNOWN},\n{set:this.colons,type:sre.SemanticAttr.Type.PUNCTUATION,role:sre.SemanticAttr.Role.COLON},{set:this.commas,type:sre.SemanticAttr.Type.PUNCTUATION,role:sre.SemanticAttr.Role.COMMA},{set:this.ellipses,type:sre.SemanticAttr.Type.PUNCTUATION,role:sre.SemanticAttr.Role.ELLIPSIS},{set:this.fullStops,type:sre.SemanticAttr.Type.PUNCTUATION,role:sre.SemanticAttr.Role.FULLSTOP},{set:this.dashes,type:sre.SemanticAttr.Type.PUNCTUATION,role:sre.SemanticAttr.Role.DASH},{set:this.primes,type:sre.SemanticAttr.Type.PUNCTUATION,\nrole:sre.SemanticAttr.Role.PRIME},{set:this.degrees,type:sre.SemanticAttr.Type.PUNCTUATION,role:sre.SemanticAttr.Role.DEGREE},{set:this.leftFences,type:sre.SemanticAttr.Type.FENCE,role:sre.SemanticAttr.Role.OPEN},{set:this.rightFences,type:sre.SemanticAttr.Type.FENCE,role:sre.SemanticAttr.Role.CLOSE},{set:this.topFences,type:sre.SemanticAttr.Type.FENCE,role:sre.SemanticAttr.Role.TOP},{set:this.bottomFences,type:sre.SemanticAttr.Type.FENCE,role:sre.SemanticAttr.Role.BOTTOM},{set:this.neutralFences,\ntype:sre.SemanticAttr.Type.FENCE,role:sre.SemanticAttr.Role.NEUTRAL},{set:this.smallLatin,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.NORMAL},{set:this.capitalLatin,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.NORMAL},{set:this.smallLatinFullWidth,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.NORMAL},{set:this.capitalLatinFullWidth,\ntype:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.NORMAL},{set:this.smallLatinBold,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.BOLD},{set:this.capitalLatinBold,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.BOLD},{set:this.smallLatinItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.ITALIC},\n{set:this.capitalLatinItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.ITALIC},{set:this.smallLatinBoldItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.BOLDITALIC},{set:this.capitalLatinBoldItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.BOLDITALIC},{set:this.smallLatinScript,type:sre.SemanticAttr.Type.IDENTIFIER,\nrole:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.SCRIPT},{set:this.capitalLatinScript,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.SCRIPT},{set:this.smallLatinBoldScript,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.BOLDSCRIPT},{set:this.capitalLatinBoldScript,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.BOLDSCRIPT},\n{set:this.smallLatinFraktur,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.FRAKTUR},{set:this.capitalLatinFraktur,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.FRAKTUR},{set:this.smallLatinDoubleStruck,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.DOUBLESTRUCK},{set:this.capitalLatinDoubleStruck,type:sre.SemanticAttr.Type.IDENTIFIER,\nrole:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.DOUBLESTRUCK},{set:this.smallLatinBoldFraktur,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.BOLDFRAKTUR},{set:this.capitalLatinBoldFraktur,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.BOLDFRAKTUR},{set:this.smallLatinSansSerif,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.SANSSERIF},\n{set:this.capitalLatinSansSerif,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.SANSSERIF},{set:this.smallLatinSansSerifBold,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.SANSSERIFBOLD},{set:this.capitalLatinSansSerifBold,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.SANSSERIFBOLD},{set:this.smallLatinSansSerifItalic,type:sre.SemanticAttr.Type.IDENTIFIER,\nrole:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.SANSSERIFITALIC},{set:this.capitalLatinSansSerifItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.SANSSERIFITALIC},{set:this.smallLatinSansSerifBoldItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.SANSSERIFBOLDITALIC},{set:this.capitalLatinSansSerifBoldItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,\nfont:sre.SemanticAttr.Font.SANSSERIFBOLDITALIC},{set:this.smallLatinMonospace,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.MONOSPACE},{set:this.capitalLatinMonospace,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.MONOSPACE},{set:this.latinDoubleStruckItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.LATINLETTER,font:sre.SemanticAttr.Font.DOUBLESTRUCKITALIC},{set:this.smallGreek,\ntype:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.NORMAL},{set:this.capitalGreek,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.NORMAL},{set:this.smallGreekBold,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.BOLD},{set:this.capitalGreekBold,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.BOLD},\n{set:this.smallGreekItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.ITALIC},{set:this.capitalGreekItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.ITALIC},{set:this.smallGreekBoldItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.BOLDITALIC},{set:this.capitalGreekBoldItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,\nfont:sre.SemanticAttr.Font.BOLDITALIC},{set:this.smallGreekSansSerifBold,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.SANSSERIFBOLD},{set:this.capitalGreekSansSerifBold,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.SANSSERIFBOLD},{set:this.capitalGreekSansSerifBoldItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.SANSSERIFBOLDITALIC},\n{set:this.smallGreekSansSerifBoldItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.SANSSERIFBOLDITALIC},{set:this.greekDoubleStruck,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.DOUBLESTRUCK},{set:this.greekSpecial,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.NORMAL},{set:this.greekSpecialBold,type:sre.SemanticAttr.Type.IDENTIFIER,\nrole:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.BOLD},{set:this.greekSpecialItalic,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.ITALIC},{set:this.greekSpecialSansSerifBold,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.GREEKLETTER,font:sre.SemanticAttr.Font.SANSSERIFBOLD},{set:this.hebrewLetters,type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.OTHERLETTER,font:sre.SemanticAttr.Font.NORMAL},\n{set:this.digitsNormal,type:sre.SemanticAttr.Type.NUMBER,role:sre.SemanticAttr.Role.INTEGER,font:sre.SemanticAttr.Font.NORMAL},{set:this.digitsFullWidth,type:sre.SemanticAttr.Type.NUMBER,role:sre.SemanticAttr.Role.INTEGER,font:sre.SemanticAttr.Font.NORMAL},{set:this.digitsBold,type:sre.SemanticAttr.Type.NUMBER,role:sre.SemanticAttr.Role.INTEGER,font:sre.SemanticAttr.Font.BOLD},{set:this.digitsDoubleStruck,type:sre.SemanticAttr.Type.NUMBER,role:sre.SemanticAttr.Role.INTEGER,font:sre.SemanticAttr.Font.DOUBLESTRUCK},\n{set:this.digitsSansSerif,type:sre.SemanticAttr.Type.NUMBER,role:sre.SemanticAttr.Role.INTEGER,font:sre.SemanticAttr.Font.SANSSERIF},{set:this.digitsSansSerifBold,type:sre.SemanticAttr.Type.NUMBER,role:sre.SemanticAttr.Role.INTEGER,font:sre.SemanticAttr.Font.SANSSERIFBOLD},{set:this.digitsMonospace,type:sre.SemanticAttr.Type.NUMBER,role:sre.SemanticAttr.Role.INTEGER,font:sre.SemanticAttr.Font.MONOSPACE},{set:this.numbers,type:sre.SemanticAttr.Type.NUMBER,role:sre.SemanticAttr.Role.FLOAT},{set:this.additions,\ntype:sre.SemanticAttr.Type.OPERATOR,role:sre.SemanticAttr.Role.ADDITION},{set:this.multiplications,type:sre.SemanticAttr.Type.OPERATOR,role:sre.SemanticAttr.Role.MULTIPLICATION},{set:this.subtractions,type:sre.SemanticAttr.Type.OPERATOR,role:sre.SemanticAttr.Role.SUBTRACTION},{set:this.divisions,type:sre.SemanticAttr.Type.OPERATOR,role:sre.SemanticAttr.Role.DIVISION},{set:this.prefixOps,type:sre.SemanticAttr.Type.OPERATOR,role:sre.SemanticAttr.Role.PREFIXOP},{set:this.prefixOpsBold,type:sre.SemanticAttr.Type.OPERATOR,\nrole:sre.SemanticAttr.Role.PREFIXOP,font:sre.SemanticAttr.Font.BOLD},{set:this.prefixOpsItalic,type:sre.SemanticAttr.Type.OPERATOR,role:sre.SemanticAttr.Role.PREFIXOP,font:sre.SemanticAttr.Font.ITALIC},{set:this.prefixOpsSansSerifBold,type:sre.SemanticAttr.Type.OPERATOR,role:sre.SemanticAttr.Role.PREFIXOP,font:sre.SemanticAttr.Font.SANSSERIFBOLD},{set:this.equalities,type:sre.SemanticAttr.Type.RELATION,role:sre.SemanticAttr.Role.EQUALITY},{set:this.inequalities,type:sre.SemanticAttr.Type.RELATION,\nrole:sre.SemanticAttr.Role.INEQUALITY},{set:this.relations,type:sre.SemanticAttr.Type.RELATION,role:sre.SemanticAttr.Role.UNKNOWN},{set:this.arrows,type:sre.SemanticAttr.Type.RELATION,role:sre.SemanticAttr.Role.ARROW},{set:this.sumOps,type:sre.SemanticAttr.Type.LARGEOP,role:sre.SemanticAttr.Role.SUM},{set:this.intOps,type:sre.SemanticAttr.Type.LARGEOP,role:sre.SemanticAttr.Role.INTEGRAL},{set:this.limitFunctions,type:sre.SemanticAttr.Type.FUNCTION,role:sre.SemanticAttr.Role.LIMFUNC},{set:this.prefixFunctions,\ntype:sre.SemanticAttr.Type.FUNCTION,role:sre.SemanticAttr.Role.PREFIXFUNC},{set:this.infixFunctions,type:sre.SemanticAttr.Type.OPERATOR,role:sre.SemanticAttr.Role.INFIXFUNC}];this.meaning_=this.initMeaning_()};goog.addSingletonGetter(sre.SemanticAttr);\nsre.SemanticAttr.Type={PUNCTUATION:\"punctuation\",FENCE:\"fence\",NUMBER:\"number\",IDENTIFIER:\"identifier\",TEXT:\"text\",OPERATOR:\"operator\",RELATION:\"relation\",LARGEOP:\"largeop\",FUNCTION:\"function\",ACCENT:\"accent\",FENCED:\"fenced\",FRACTION:\"fraction\",PUNCTUATED:\"punctuated\",RELSEQ:\"relseq\",MULTIREL:\"multirel\",INFIXOP:\"infixop\",PREFIXOP:\"prefixop\",POSTFIXOP:\"postfixop\",APPL:\"appl\",INTEGRAL:\"integral\",BIGOP:\"bigop\",SQRT:\"sqrt\",ROOT:\"root\",LIMUPPER:\"limupper\",LIMLOWER:\"limlower\",LIMBOTH:\"limboth\",SUBSCRIPT:\"subscript\",\nSUPERSCRIPT:\"superscript\",UNDERSCORE:\"underscore\",OVERSCORE:\"overscore\",TENSOR:\"tensor\",TABLE:\"table\",MULTILINE:\"multiline\",MATRIX:\"matrix\",VECTOR:\"vector\",CASES:\"cases\",ROW:\"row\",LINE:\"line\",CELL:\"cell\",ENCLOSE:\"enclose\",INFERENCE:\"inference\",RULELABEL:\"rulelabel\",CONCLUSION:\"conclusion\",PREMISES:\"premises\",UNKNOWN:\"unknown\",EMPTY:\"empty\"};\nsre.SemanticAttr.Role={COMMA:\"comma\",ELLIPSIS:\"ellipsis\",FULLSTOP:\"fullstop\",DASH:\"dash\",PRIME:\"prime\",DEGREE:\"degree\",VBAR:\"vbar\",COLON:\"colon\",OPENFENCE:\"openfence\",CLOSEFENCE:\"closefence\",APPLICATION:\"application\",DUMMY:\"dummy\",UNIT:\"unit\",LABEL:\"label\",OPEN:\"open\",CLOSE:\"close\",TOP:\"top\",BOTTOM:\"bottom\",NEUTRAL:\"neutral\",LATINLETTER:\"latinletter\",GREEKLETTER:\"greekletter\",OTHERLETTER:\"otherletter\",NUMBERSET:\"numbersetletter\",INTEGER:\"integer\",FLOAT:\"float\",OTHERNUMBER:\"othernumber\",MIXED:\"mixed\",\nMULTIACCENT:\"multiaccent\",OVERACCENT:\"overaccent\",UNDERACCENT:\"underaccent\",UNDEROVER:\"underover\",SUBSUP:\"subsup\",LEFTSUB:\"leftsub\",LEFTSUPER:\"leftsuper\",RIGHTSUB:\"rightsub\",RIGHTSUPER:\"rightsuper\",LEFTRIGHT:\"leftright\",ABOVEBELOW:\"abovebelow\",SETEMPTY:\"set empty\",SETEXT:\"set extended\",SETSINGLE:\"set singleton\",SETCOLLECT:\"set collection\",STRING:\"string\",SEQUENCE:\"sequence\",ENDPUNCT:\"endpunct\",STARTPUNCT:\"startpunct\",TEXT:\"text\",NEGATIVE:\"negative\",POSITIVE:\"positive\",NEGATION:\"negation\",MULTIOP:\"multiop\",\nPREFIXOP:\"prefix operator\",POSTFIXOP:\"postfix operator\",LIMFUNC:\"limit function\",INFIXFUNC:\"infix function\",PREFIXFUNC:\"prefix function\",POSTFIXFUNC:\"postfix function\",SIMPLEFUNC:\"simple function\",COMPFUNC:\"composed function\",SUM:\"sum\",INTEGRAL:\"integral\",ADDITION:\"addition\",MULTIPLICATION:\"multiplication\",SUBTRACTION:\"subtraction\",IMPLICIT:\"implicit\",DIVISION:\"division\",VULGAR:\"vulgar\",EQUALITY:\"equality\",INEQUALITY:\"inequality\",ELEMENT:\"element\",ARROW:\"arrow\",DETERMINANT:\"determinant\",ROWVECTOR:\"rowvector\",\nBINOMIAL:\"binomial\",SQUAREMATRIX:\"squarematrix\",MULTILINE:\"multiline\",MATRIX:\"matrix\",VECTOR:\"vector\",CASES:\"cases\",TABLE:\"table\",PROOF:\"proof\",LEFT:\"left\",RIGHT:\"right\",UP:\"up\",DOWN:\"down\",FINAL:\"final\",SINGLE:\"single\",HYP:\"hyp\",AXIOM:\"axiom\",UNKNOWN:\"unknown\"};\nsre.SemanticAttr.Font={BOLD:\"bold\",BOLDFRAKTUR:\"bold-fraktur\",BOLDITALIC:\"bold-italic\",BOLDSCRIPT:\"bold-script\",CALIGRAPHIC:\"caligraphic\",CALIGRAPHICBOLD:\"caligraphic-bold\",DOUBLESTRUCK:\"double-struck\",DOUBLESTRUCKITALIC:\"double-struck-italic\",FRAKTUR:\"fraktur\",ITALIC:\"italic\",MONOSPACE:\"monospace\",NORMAL:\"normal\",OLDSTYLE:\"oldstyle\",OLDSTYLEBOLD:\"oldstyle-bold\",SCRIPT:\"script\",SANSSERIF:\"sans-serif\",SANSSERIFITALIC:\"sans-serif-italic\",SANSSERIFBOLD:\"sans-serif-bold\",SANSSERIFBOLDITALIC:\"sans-serif-bold-italic\",\nUNKNOWN:\"unknown\"};sre.SemanticAttr.equal=function(a,b){return a.type===b.type&&a.role===b.role&&a.font===b.font};sre.SemanticAttr.prototype.lookupType=function(a){return sre.SemanticAttr.Type.UNKNOWN};sre.SemanticAttr.prototype.lookupRole=function(a){return sre.SemanticAttr.Role.UNKNOWN};sre.SemanticAttr.lookupMeaning=function(a){return sre.SemanticAttr.getInstance().lookupMeaning_(a)};sre.SemanticAttr.invisibleTimes=function(){return sre.SemanticAttr.getInstance().invisibleTimes_};\nsre.SemanticAttr.invisiblePlus=function(){return sre.SemanticAttr.getInstance().invisiblePlus_};sre.SemanticAttr.invisibleComma=function(){return sre.SemanticAttr.getInstance().invisibleComma_};sre.SemanticAttr.functionApplication=function(){return sre.SemanticAttr.getInstance().functionApplication_};\nsre.SemanticAttr.isMatchingFenceRole=function(a,b){return a==sre.SemanticAttr.Role.OPEN&&b==sre.SemanticAttr.Role.CLOSE||a==sre.SemanticAttr.Role.NEUTRAL&&b==sre.SemanticAttr.Role.NEUTRAL||a==sre.SemanticAttr.Role.TOP&&b==sre.SemanticAttr.Role.BOTTOM};sre.SemanticAttr.isMatchingFence=function(a,b){return sre.SemanticAttr.getInstance().isMatchingFence_(a,b)};sre.SemanticAttr.isOpeningFence=function(a){return a==sre.SemanticAttr.Role.OPEN||a==sre.SemanticAttr.Role.NEUTRAL};\nsre.SemanticAttr.isClosingFence=function(a){return a==sre.SemanticAttr.Role.CLOSE||a==sre.SemanticAttr.Role.NEUTRAL};sre.SemanticAttr.isEmbellishedType=function(a){return a===sre.SemanticAttr.Type.OPERATOR||a===sre.SemanticAttr.Type.RELATION||a===sre.SemanticAttr.Type.FENCE||a===sre.SemanticAttr.Type.PUNCTUATION};sre.SemanticAttr.isCharacterD=function(a){return-1!=\"d \\u2146 \\uff44 \\ud835\\udc1d \\ud835\\udc51 \\ud835\\udcb9 \\ud835\\udced \\ud835\\udd21 \\ud835\\udd55 \\ud835\\udd89 \\ud835\\uddbd \\ud835\\uddf1 \\ud835\\ude25 \\ud835\\ude8d\".split(\" \").indexOf(a)};\nsre.SemanticAttr.prototype.isMatchingFence_=function(a,b){return-1!=this.neutralFences.indexOf(a)?a==b:this.openClosePairs[a]==b||this.topBottomPairs[a]==b};sre.SemanticAttr.prototype.initMeaning_=function(){for(var a={},b=0,c;c=this.symbolSetToSemantic_[b];b++)c.set.forEach(function(d){a[d]={role:c.role||sre.SemanticAttr.Role.UNKNOWN,type:c.type||sre.SemanticAttr.Type.UNKNOWN,font:c.font||sre.SemanticAttr.Font.UNKNOWN}});return a};\nsre.SemanticAttr.prototype.lookupMeaning_=function(a){return this.meaning_[a]||{role:sre.SemanticAttr.Role.UNKNOWN,type:sre.SemanticAttr.Type.UNKNOWN,font:sre.SemanticAttr.Font.UNKNOWN}};sre.SemanticNode=function(a){this.id=a;this.mathml=[];this.parent=null;this.type=sre.SemanticAttr.Type.UNKNOWN;this.role=sre.SemanticAttr.Role.UNKNOWN;this.font=sre.SemanticAttr.Font.UNKNOWN;this.embellished=null;this.fencePointer=\"\";this.childNodes=[];this.textContent=\"\";this.mathmlTree=null;this.contentNodes=[];this.annotation={};this.attributes={}};\nsre.SemanticNode.prototype.querySelectorAll=function(a){for(var b=[],c=0,d;d=this.childNodes[c];c++)b=b.concat(d.querySelectorAll(a));for(c=0;d=this.contentNodes[c];c++)b=b.concat(d.querySelectorAll(a));a(this)&&b.unshift(this);return b};sre.SemanticNode.Attribute={EMBELLISHED:\"embellished\",FENCEPOINTER:\"fencepointer\",FONT:\"font\",ID:\"id\",ANNOTATION:\"annotation\",ROLE:\"role\",TYPE:\"type\",CHILDREN:\"children\",CONTENT:\"content\",TEXT:\"$t\"};\nsre.SemanticNode.prototype.xml=function(a,b){var c=function(e,f){f=f.map(function(k){return k.xml(a,b)});e=a.createElementNS(\"\",e);for(var g=0,h;h=f[g];g++)e.appendChild(h);return e},d=a.createElementNS(\"\",this.type);b||this.xmlAttributes_(d);d.textContent=this.textContent;0<this.contentNodes.length&&d.appendChild(c(sre.SemanticNode.Attribute.CONTENT,this.contentNodes));0<this.childNodes.length&&d.appendChild(c(sre.SemanticNode.Attribute.CHILDREN,this.childNodes));return d};\nsre.SemanticNode.prototype.toString=function(a){var b=new sre.SystemExternal.xmldom.XMLSerializer,c=(new sre.SystemExternal.xmldom.DOMParser).parseFromString(\"<snode/>\",\"text/xml\");return b.serializeToString(this.xml(c,a))};sre.SemanticNode.prototype.xmlAttributes_=function(a){for(var b=this.allAttributes(),c=0,d;d=b[c];c++)a.setAttribute(d[0],d[1]);this.addExternalAttributes_(a)};\nsre.SemanticNode.prototype.allAttributes=function(){var a=[];a.push([sre.SemanticNode.Attribute.ROLE,this.role]);this.font!=sre.SemanticAttr.Font.UNKNOWN&&a.push([sre.SemanticNode.Attribute.FONT,this.font]);Object.keys(this.annotation).length&&a.push([sre.SemanticNode.Attribute.ANNOTATION,this.xmlAnnotation()]);this.embellished&&a.push([sre.SemanticNode.Attribute.EMBELLISHED,this.embellished]);this.fencePointer&&a.push([sre.SemanticNode.Attribute.FENCEPOINTER,this.fencePointer]);a.push([sre.SemanticNode.Attribute.ID,\nthis.id]);return a};sre.SemanticNode.prototype.addExternalAttributes_=function(a){for(var b in this.attributes)a.setAttribute(b,this.attributes[b])};sre.SemanticNode.prototype.xmlAnnotation=function(){var a=[],b;for(b in this.annotation)this.annotation[b].forEach(function(c){a.push(b+\":\"+c)});return a.join(\";\")};\nsre.SemanticNode.prototype.toJson=function(){var a={};a[sre.SemanticNode.Attribute.TYPE]=this.type;for(var b=this.allAttributes(),c=0,d;d=b[c];c++)a[d[0]]=d[1].toString();this.textContent&&(a[sre.SemanticNode.Attribute.TEXT]=this.textContent);this.childNodes.length&&(a[sre.SemanticNode.Attribute.CHILDREN]=this.childNodes.map(function(e){return e.toJson()}));this.contentNodes.length&&(a[sre.SemanticNode.Attribute.CONTENT]=this.contentNodes.map(function(e){return e.toJson()}));return a};\nsre.SemanticNode.prototype.updateContent=function(a,b){b=b?a.replace(/^[ \\f\\n\\r\\t\\v\\u200b]*/,\"\").replace(/[ \\f\\n\\r\\t\\v\\u200b]*$/,\"\"):a.trim();a=a&&!b?a:b;this.textContent!=a&&(b=sre.SemanticAttr.lookupMeaning(a),this.textContent=a,this.role=b.role,this.type=b.type,this.font=b.font)};sre.SemanticNode.prototype.addMathmlNodes=function(a){for(var b=0,c;c=a[b];b++)-1==this.mathml.indexOf(c)&&this.mathml.push(c)};\nsre.SemanticNode.prototype.removeMathmlNodes_=function(a){for(var b=this.mathml,c=0,d;d=a[c];c++)d=b.indexOf(d),-1!=d&&b.splice(d,1);this.mathml=b};sre.SemanticNode.prototype.appendChild=function(a){this.childNodes.push(a);this.addMathmlNodes(a.mathml);a.parent=this};\nsre.SemanticNode.prototype.replaceChild=function(a,b){var c=this.childNodes.indexOf(a);if(-1!=c){a.parent=null;b.parent=this;this.childNodes[c]=b;c=a.mathml.filter(function(e){return-1==b.mathml.indexOf(e)});var d=b.mathml.filter(function(e){return-1==a.mathml.indexOf(e)});this.removeMathmlNodes_(c);this.addMathmlNodes(d)}};sre.SemanticNode.prototype.appendContentNode=function(a){a&&(this.contentNodes.push(a),this.addMathmlNodes(a.mathml),a.parent=this)};\nsre.SemanticNode.prototype.removeContentNode=function(a){a&&(a=this.contentNodes.indexOf(a),-1!=a&&this.contentNodes.slice(a,1))};\nsre.SemanticNode.prototype.equals=function(a){if(!a||this.type!==a.type||this.role!==a.role||this.textContent!==a.textContent||this.childNodes.length!==a.childNodes.length||this.contentNodes.length!==a.contentNodes.length)return!1;for(var b=0,c,d;c=this.childNodes[b],d=a.childNodes[b];b++)if(!c.equals(d))return!1;for(b=0;c=this.contentNodes[b],d=a.contentNodes[b];b++)if(!c.equals(d))return!1;return!0};sre.SemanticNode.prototype.displayTree=function(){console.info(this.displayTree_(0))};\nsre.SemanticNode.prototype.displayTree_=function(a){a++;var b=Array(a).join(\"  \"),c=\"\";c+=\"\\n\"+b+this.toString();c+=\"\\n\"+b+\"MathmlTree:\";c+=\"\\n\"+b+this.mathmlTreeString_();c+=\"\\n\"+b+\"MathML:\";for(var d=0,e;e=this.mathml[d];d++)c+=\"\\n\"+b+e.toString();c+=\"\\n\"+b+\"Begin Content\";this.contentNodes.forEach(function(f){c+=f.displayTree_(a)});c+=\"\\n\"+b+\"End Content\";c+=\"\\n\"+b+\"Begin Children\";this.childNodes.forEach(function(f){c+=f.displayTree_(a)});return c+=\"\\n\"+b+\"End Children\"};\nsre.SemanticNode.prototype.mathmlTreeString_=function(){return this.mathmlTree?this.mathmlTree.toString():\"EMPTY\"};sre.SemanticNode.prototype.addAnnotation=function(a,b){b&&this.addAnnotation_(a,b)};sre.SemanticNode.prototype.addAnnotation_=function(a,b){var c=this.annotation[a];c?c.push(b):this.annotation[a]=[b]};sre.SemanticNode.prototype.getAnnotation=function(a){return(a=this.annotation[a])?a:[]};\nsre.SemanticNode.prototype.hasAnnotation=function(a,b){return(a=this.annotation[a])?-1!==a.indexOf(b):!1};sre.SemanticNode.prototype.parseAnnotation=function(a){a=a.split(\";\");for(var b=0,c=a.length;b<c;b++){var d=a[b].split(\":\");this.addAnnotation(d[0],d[1])}};sre.SemanticNode.prototype.meaning=function(){return{type:this.type,role:this.role,font:this.font}};sre.SemanticAnnotator=function(a,b){this.domain=a;this.func=b;this.name=a};sre.SemanticAnnotator.prototype.annotate=function(a){a.childNodes.forEach(goog.bind(this.annotate,this));a.addAnnotation(this.domain,this.func(a))};sre.SemanticVisitor=function(a,b,c){this.domain=a;this.func=b;this.name=a;this.def=c||{}};sre.SemanticVisitor.prototype.visit=function(a,b){b=this.func(a,b);a.addAnnotation(this.domain,b[0]);for(var c=0,d;d=a.childNodes[c];c++)b=this.visit(d,b[1]);return b};sre.SemanticAnnotations=function(){this.annotators={};this.visitors={};this.counter=0};goog.addSingletonGetter(sre.SemanticAnnotations);sre.SemanticAnnotations.prototype.register=function(a){a.name=a.domain+this.counter++;(a instanceof sre.SemanticAnnotator?this.annotators:this.visitors)[a.name]=a};sre.SemanticAnnotations.prototype.unregister=function(a){delete this.annotators[a];delete this.visitors[a]};\nsre.SemanticAnnotations.prototype.annotate=function(a){for(var b in this.annotators)this.annotators[b].annotate(a);for(var c in this.visitors)this.visitors[c].visit(a,this.visitors[c].def)};sre.SemanticOrdering=function(){this.comparators=[]};goog.addSingletonGetter(sre.SemanticOrdering);sre.SemanticOrdering.prototype.add=function(a){this.comparators.push(a)};sre.SemanticOrdering.prototype.apply=function(a,b){for(var c=0,d;d=this.comparators[c];c++)if(d=d.compare(a,b),0!==d)return d;return 0};sre.SemanticOrdering.prototype.sort=function(a){a.sort(goog.bind(this.apply,this))};\nsre.SemanticOrdering.prototype.reduce=function(a){if(1>=a.length)return a;a=a.slice();this.sort(a);var b=[];do{var c=a.pop();b.push(c)}while(c&&a.length&&0===this.apply(a[a.length-1],c));return b};sre.SemanticComparator=function(a,b){this.comparator=a;this.type=b||null;sre.SemanticOrdering.getInstance().add(this)};sre.SemanticComparator.prototype.compare=function(a,b){return this.type&&this.type===a.type&&this.type===b.type?this.comparator(a,b):0};\nsre.SemanticOrdering.simpleFunction=function(a,b){return a.role===sre.SemanticAttr.Role.SIMPLEFUNC?1:b.role===sre.SemanticAttr.Role.SIMPLEFUNC?-1:0};new sre.SemanticComparator(sre.SemanticOrdering.simpleFunction,sre.SemanticAttr.Type.IDENTIFIER);sre.SemanticDefault=function(){this.map_={}};sre.SemanticDefault.prototype.add=function(a,b){this.map_[sre.SemanticDefault.key_(a,b.font)]=b};sre.SemanticDefault.prototype.addNode=function(a){this.add(a.textContent,a.meaning())};sre.SemanticDefault.prototype.retrieve=function(a,b){return this.map_[sre.SemanticDefault.key_(a,b)]};sre.SemanticDefault.prototype.retrieveNode=function(a){return this.retrieve(a.textContent,a.font)};sre.SemanticDefault.key_=function(a,b){return b?a+\":\"+b:a};\nsre.SemanticDefault.prototype.size=function(){return Object.keys(this.map_).length};sre.SemanticCollator_=function(){this.map_={}};sre.SemanticCollator_.prototype.add=function(a,b){a=sre.SemanticDefault.key_(a,b.font);var c=this.map_[a];c?c.push(b):this.map_[a]=[b]};sre.SemanticCollator_.prototype.addNode=function(a){this.add(a.textContent,a)};sre.SemanticCollator_.prototype.retrieve=function(a,b){return this.map_[sre.SemanticDefault.key_(a,b)]};\nsre.SemanticCollator_.prototype.retrieveNode=function(a){return this.retrieve(a.textContent,a.font)};sre.SemanticCollator_.prototype.copyCollator=goog.abstractMethod;sre.SemanticCollator_.prototype.copy=function(){var a=this.copyCollator(),b;for(b in this.map_)a.map_[b]=this.map_[b];return a};sre.SemanticCollator_.prototype.minimize=function(){for(var a in this.map_)1===this.map_[a].length&&delete this.map_[a]};\nsre.SemanticCollator_.prototype.reduce=function(){for(var a in this.map_)1!==this.map_[a].length&&(this.map_[a]=sre.SemanticOrdering.getInstance().reduce(this.map_[a]))};sre.SemanticCollator_.prototype.minimalCollator=function(){var a=this.copy(),b;for(b in a.map_)1===a.map_[b].length&&delete a.map_[b];return a};sre.SemanticCollator_.prototype.isMultiValued=function(){for(var a in this.map_)if(1<this.map_[a].length)return!0;return!1};sre.SemanticCollator_.prototype.isEmpty=function(){return!Object.keys(this.map_).length};\nsre.SemanticNodeCollator=function(){sre.SemanticCollator_.call(this)};goog.inherits(sre.SemanticNodeCollator,sre.SemanticCollator_);sre.SemanticNodeCollator.prototype.copyCollator=function(){return new sre.SemanticNodeCollator};sre.SemanticNodeCollator.prototype.toString=function(){var a=[],b;for(b in this.map_){for(var c=Array(b.length+3).join(\" \"),d=this.map_[b],e=[],f=0,g;g=d[f];f++)e.push(g.toString());a.push(b+\": \"+e.join(\"\\n\"+c))}return a.join(\"\\n\")};\nsre.SemanticNodeCollator.prototype.collateMeaning=function(){var a=new sre.SemanticMeaningCollator,b;for(b in this.map_)a.map_[b]=this.map_[b].map(function(c){return c.meaning()});return a};sre.SemanticMeaningCollator=function(){sre.SemanticCollator_.call(this)};goog.inherits(sre.SemanticMeaningCollator,sre.SemanticCollator_);sre.SemanticMeaningCollator.prototype.copyCollator=function(){return new sre.SemanticMeaningCollator};\nsre.SemanticMeaningCollator.prototype.add=function(a,b){var c=this.retrieve(a,b.font);c&&c.find(function(d){return sre.SemanticAttr.equal(d,b)})||sre.SemanticMeaningCollator.superClass_.add.call(this,a,b)};sre.SemanticMeaningCollator.prototype.addNode=function(a){this.add(a.textContent,a.meaning())};\nsre.SemanticMeaningCollator.prototype.toString=function(){var a=[],b;for(b in this.map_){for(var c=Array(b.length+3).join(\" \"),d=this.map_[b],e=[],f=0,g;g=d[f];f++)e.push(\"{type: \"+g.type+\", role: \"+g.role+\", font: \"+g.font+\"}\");a.push(b+\": \"+e.join(\"\\n\"+c))}return a.join(\"\\n\")};sre.SemanticMeaningCollator.prototype.default=function(){var a=new sre.SemanticDefault,b;for(b in this.map_)1===this.map_[b].length&&(a.map_[b]=this.map_[b][0]);return a};\nsre.SemanticMeaningCollator.prototype.newDefault=function(){var a=this.default();this.reduce();var b=this.default();return a.size()!==b.size()?b:null};sre.SemanticNodeFactory=function(){this.idCounter_=-1;this.leafMap=new sre.SemanticNodeCollator;this.defaultMap=new sre.SemanticDefault};sre.SemanticNodeFactory.prototype.createNode_=function(a){\"undefined\"!==typeof a?this.idCounter_=Math.max(this.idCounter_,a):a=++this.idCounter_;return new sre.SemanticNode(a)};sre.SemanticNodeFactory.prototype.makeNode=function(a){return this.createNode_(a)};sre.SemanticNodeFactory.prototype.makeUnprocessed=function(a){var b=this.createNode_();b.mathml=[a];return b};\nsre.SemanticNodeFactory.prototype.makeEmptyNode=function(){var a=this.createNode_();a.type=sre.SemanticAttr.Type.EMPTY;return a};sre.SemanticNodeFactory.prototype.makeContentNode=function(a){var b=this.createNode_();b.updateContent(a);return b};sre.SemanticNodeFactory.prototype.makeMultipleContentNodes=function(a,b){for(var c=[],d=0;d<a;d++)c.push(this.makeContentNode(b));return c};\nsre.SemanticNodeFactory.prototype.makeLeafNode=function(a,b){if(!a)return this.makeEmptyNode();a=this.makeContentNode(a);a.font=b||a.font;if(b=this.defaultMap.retrieveNode(a))a.type=b.type,a.role=b.role,a.font=b.font;this.leafMap.addNode(a);return a};sre.SemanticNodeFactory.prototype.makeBranchNode=function(a,b,c,d){var e=this.createNode_();d&&e.updateContent(d);e.type=a;e.childNodes=b;e.contentNodes=c;b.concat(c).forEach(function(f){f.parent=e;e.addMathmlNodes(f.mathml)});return e};sre.SemanticParser=function(){};sre.SemanticParser.prototype.parse=function(a){};sre.SemanticParser.prototype.parseList=function(a){};sre.SemanticParser.prototype.getFactory=function(){};sre.SemanticParser.prototype.setFactory=function(a){};sre.SemanticParser.prototype.getType=function(){};sre.SemanticAbstractParser=function(a){this.type_=a;this.factory_=new sre.SemanticNodeFactory};sre.SemanticAbstractParser.prototype.getFactory=function(){return this.factory_};\nsre.SemanticAbstractParser.prototype.setFactory=function(a){this.factory_=a};sre.SemanticAbstractParser.prototype.getType=function(){return this.type_};sre.SemanticAbstractParser.prototype.parse=goog.abstractMethod;sre.SemanticAbstractParser.prototype.parseList=function(a){for(var b=[],c=0,d;d=a[c];c++)b.push(this.parse(d));return b};sre.SemanticPred={};sre.SemanticPred.isAttribute=function(a,b){return function(c){c=c[a];a:switch(a){case \"role\":var d=sre.SemanticAttr.Role[b];break a;case \"font\":d=sre.SemanticAttr.Font[b];break a;default:d=sre.SemanticAttr.Type[b]}return c===d}};\nsre.SemanticPred.isAccent=function(a){return sre.SemanticPred.isAttribute(\"type\",\"FENCE\")(a)||sre.SemanticPred.isAttribute(\"type\",\"PUNCTUATION\")(a)||sre.SemanticPred.isAttribute(\"type\",\"OPERATOR\")(a)||sre.SemanticPred.isAttribute(\"type\",\"RELATION\")(a)||sre.SemanticPred.isAttribute(\"type\",\"IDENTIFIER\")(a)&&sre.SemanticPred.isAttribute(\"role\",\"UNKNOWN\")(a)&&!a.textContent.match(new RegExp(sre.SemanticAttr.getInstance().allLetters.join(\"|\")))};\nsre.SemanticPred.isSimpleFunctionScope=function(a){a=a.childNodes;if(0===a.length)return!0;if(1<a.length)return!1;a=a[0];return a.type!==sre.SemanticAttr.Type.INFIXOP||a.role===sre.SemanticAttr.Role.IMPLICIT&&!a.childNodes.some(sre.SemanticPred.isAttribute(\"type\",\"INFIXOP\"))?!0:!1};sre.SemanticPred.isPrefixFunctionBoundary=function(a){return sre.SemanticPred.isOperator(a)||sre.SemanticPred.isAttribute(\"type\",\"APPL\")(a)||sre.SemanticPred.isGeneralFunctionBoundary(a)};\nsre.SemanticPred.isBigOpBoundary=function(a){return sre.SemanticPred.isOperator(a)||sre.SemanticPred.isGeneralFunctionBoundary(a)};sre.SemanticPred.isIntegralDxBoundary=function(a,b){return!!b&&sre.SemanticPred.isAttribute(\"type\",\"IDENTIFIER\")(b)&&sre.SemanticAttr.isCharacterD(a.textContent)};sre.SemanticPred.isIntegralDxBoundarySingle=function(a){if(sre.SemanticPred.isAttribute(\"type\",\"IDENTIFIER\")(a)){var b=a.textContent[0];return b&&a.textContent[1]&&sre.SemanticAttr.isCharacterD(b)}return!1};\nsre.SemanticPred.isGeneralFunctionBoundary=function(a){return sre.SemanticPred.isRelation(a)||sre.SemanticPred.isPunctuation(a)};sre.SemanticPred.isEmbellished=function(a){return a.embellished?a.embellished:sre.SemanticAttr.isEmbellishedType(a.type)?a.type:null};sre.SemanticPred.isOperator=function(a){return sre.SemanticPred.isAttribute(\"type\",\"OPERATOR\")(a)||sre.SemanticPred.isAttribute(\"embellished\",\"OPERATOR\")(a)};\nsre.SemanticPred.isRelation=function(a){return sre.SemanticPred.isAttribute(\"type\",\"RELATION\")(a)||sre.SemanticPred.isAttribute(\"embellished\",\"RELATION\")(a)};sre.SemanticPred.isPunctuation=function(a){return sre.SemanticPred.isAttribute(\"type\",\"PUNCTUATION\")(a)||sre.SemanticPred.isAttribute(\"embellished\",\"PUNCTUATION\")(a)};sre.SemanticPred.isFence=function(a){return sre.SemanticPred.isAttribute(\"type\",\"FENCE\")(a)||sre.SemanticPred.isAttribute(\"embellished\",\"FENCE\")(a)};\nsre.SemanticPred.isElligibleEmbellishedFence=function(a){if(!a||!sre.SemanticPred.isFence(a))return!1;if(!a.embellished)return!0;var b=function(c){return c.embellished?!(!sre.SemanticPred.isAttribute(\"type\",\"TENSOR\")(c)||sre.SemanticPred.isAttribute(\"type\",\"EMPTY\")(c.childNodes[1])&&sre.SemanticPred.isAttribute(\"type\",\"EMPTY\")(c.childNodes[2])||sre.SemanticPred.isAttribute(\"type\",\"EMPTY\")(c.childNodes[3])&&sre.SemanticPred.isAttribute(\"type\",\"EMPTY\")(c.childNodes[4]))||sre.SemanticPred.isAttribute(\"role\",\n\"CLOSE\")(c)&&sre.SemanticPred.isAttribute(\"type\",\"TENSOR\")(c)||sre.SemanticPred.isAttribute(\"role\",\"OPEN\")(c)&&(sre.SemanticPred.isAttribute(\"type\",\"SUBSCRIPT\")(c)||sre.SemanticPred.isAttribute(\"type\",\"SUPERSCRIPT\")(c))?!1:b(c.childNodes[0]):!0};return b(a)};sre.SemanticPred.isTableOrMultiline=function(a){return!!a&&(sre.SemanticPred.isAttribute(\"type\",\"TABLE\")(a)||sre.SemanticPred.isAttribute(\"type\",\"MULTILINE\")(a))};\nsre.SemanticPred.tableIsMatrixOrVector=function(a){return!!a&&sre.SemanticPred.isFencedElement(a)&&sre.SemanticPred.isTableOrMultiline(a.childNodes[0])};sre.SemanticPred.isFencedElement=function(a){return!!a&&sre.SemanticPred.isAttribute(\"type\",\"FENCED\")(a)&&(sre.SemanticPred.isAttribute(\"role\",\"LEFTRIGHT\")(a)||sre.SemanticPred.isAttribute(\"role\",\"NEUTRAL\")(a))&&1===a.childNodes.length};\nsre.SemanticPred.tableIsCases=function(a,b){return 0<b.length&&sre.SemanticPred.isAttribute(\"role\",\"OPENFENCE\")(b[b.length-1])};sre.SemanticPred.tableIsMultiline=function(a){return a.childNodes.every(function(b){return 1>=b.childNodes.length})};sre.SemanticPred.isBinomial=function(a){return 2===a.childNodes.length};\nsre.SemanticPred.isLimitBase=function(a){return sre.SemanticPred.isAttribute(\"type\",\"LARGEOP\")(a)||sre.SemanticPred.isAttribute(\"type\",\"LIMBOTH\")(a)||sre.SemanticPred.isAttribute(\"type\",\"LIMLOWER\")(a)||sre.SemanticPred.isAttribute(\"type\",\"LIMUPPER\")(a)||sre.SemanticPred.isAttribute(\"type\",\"FUNCTION\")(a)&&sre.SemanticPred.isAttribute(\"role\",\"LIMFUNC\")(a)};\nsre.SemanticPred.isSimpleFunctionHead=function(a){return a.type===sre.SemanticAttr.Type.IDENTIFIER||a.role===sre.SemanticAttr.Role.LATINLETTER||a.role===sre.SemanticAttr.Role.GREEKLETTER||a.role===sre.SemanticAttr.Role.OTHERLETTER};sre.SemanticPred.singlePunctAtPosition=function(a,b,c){return 1===b.length&&(a[c].type===sre.SemanticAttr.Type.PUNCTUATION||a[c].embellished===sre.SemanticAttr.Type.PUNCTUATION)&&a[c]===b[0]};\nsre.SemanticPred.isSimpleFunction=function(a){return sre.SemanticPred.isAttribute(\"type\",\"IDENTIFIER\")(a)&&sre.SemanticPred.isAttribute(\"role\",\"SIMPLEFUNC\")(a)};sre.SemanticPred.isLeftBrace=function(a){var b=[\"{\",\"\\ufe5b\",\"\\uff5b\"];return!!a&&-1!==b.indexOf(a.textContent)};sre.SemanticPred.isRightBrace=function(a){var b=[\"}\",\"\\ufe5c\",\"\\uff5d\"];return!!a&&-1!==b.indexOf(a.textContent)};sre.SemanticPred.isSetNode=function(a){return sre.SemanticPred.isLeftBrace(a.contentNodes[0])&&sre.SemanticPred.isRightBrace(a.contentNodes[1])};\nsre.SemanticPred.illegalSingleton_=[sre.SemanticAttr.Type.PUNCTUATION,sre.SemanticAttr.Type.PUNCTUATED,sre.SemanticAttr.Type.RELSEQ,sre.SemanticAttr.Type.MULTIREL,sre.SemanticAttr.Type.TABLE,sre.SemanticAttr.Type.MULTILINE,sre.SemanticAttr.Type.CASES,sre.SemanticAttr.Type.INFERENCE];\nsre.SemanticPred.scriptedElement_=[sre.SemanticAttr.Type.LIMUPPER,sre.SemanticAttr.Type.LIMLOWER,sre.SemanticAttr.Type.LIMBOTH,sre.SemanticAttr.Type.SUBSCRIPT,sre.SemanticAttr.Type.SUPERSCRIPT,sre.SemanticAttr.Type.UNDERSCORE,sre.SemanticAttr.Type.OVERSCORE,sre.SemanticAttr.Type.TENSOR];\nsre.SemanticPred.isSingletonSetContent=function(a){var b=a.type;return-1!==sre.SemanticPred.illegalSingleton_.indexOf(b)||b===sre.SemanticAttr.Type.INFIXOP&&a.role!==sre.SemanticAttr.Role.IMPLICIT?!1:b===sre.SemanticAttr.Type.FENCED?a.role===sre.SemanticAttr.Role.LEFTRIGHT?sre.SemanticPred.isSingletonSetContent(a.childNodes[0]):!0:-1!==sre.SemanticPred.scriptedElement_.indexOf(b)?sre.SemanticPred.isSingletonSetContent(a.childNodes[0]):!0};\nsre.SemanticPred.isNumber=function(a){return a.type===sre.SemanticAttr.Type.NUMBER&&(a.role===sre.SemanticAttr.Role.INTEGER||a.role===sre.SemanticAttr.Role.FLOAT)};sre.SemanticPred.isUnitCounter=function(a){return sre.SemanticPred.isNumber(a)||a.role===sre.SemanticAttr.Role.VULGAR||a.role===sre.SemanticAttr.Role.MIXED};sre.SemanticPred.isPureUnit=function(a){var b=a.childNodes;return a.role===sre.SemanticAttr.Role.UNIT&&(!b.length||b[0].role===sre.SemanticAttr.Role.UNIT)};\nsre.SemanticPred.isImplicit=function(a){return a.role===sre.SemanticAttr.Role.IMPLICIT||a.role===sre.SemanticAttr.Role.UNIT&&!!a.contentNodes.length&&a.contentNodes[0].textContent===sre.SemanticAttr.invisibleTimes()};sre.SemanticProcessor=function(){this.factory_=new sre.SemanticNodeFactory};goog.addSingletonGetter(sre.SemanticProcessor);sre.SemanticProcessor.prototype.setNodeFactory=function(a){this.factory_=a};sre.SemanticProcessor.prototype.getNodeFactory=function(){return this.factory_};\nsre.SemanticProcessor.prototype.identifierNode=function(a,b,c){if(\"MathML-Unit\"===c)a.type=sre.SemanticAttr.Type.IDENTIFIER,a.role=sre.SemanticAttr.Role.UNIT;else if(!b&&1===a.textContent.length&&(a.role===sre.SemanticAttr.Role.INTEGER||a.role===sre.SemanticAttr.Role.LATINLETTER||a.role===sre.SemanticAttr.Role.GREEKLETTER)&&a.font===sre.SemanticAttr.Font.NORMAL)return a.font=sre.SemanticAttr.Font.ITALIC,a;a.type===sre.SemanticAttr.Type.UNKNOWN&&(a.type=sre.SemanticAttr.Type.IDENTIFIER);sre.SemanticProcessor.exprFont_(a);\nreturn a};sre.SemanticProcessor.prototype.implicitNode_=function(a){var b=sre.SemanticProcessor.getInstance().factory_.makeMultipleContentNodes(a.length-1,sre.SemanticAttr.invisibleTimes()),c=sre.SemanticProcessor.getInstance().infixNode_(a,b[0]);c.role=sre.SemanticAttr.Role.IMPLICIT;b.forEach(function(d){d.parent=c});c.contentNodes=b;return c};\nsre.SemanticProcessor.prototype.implicitNode=function(a){a=sre.SemanticProcessor.getInstance().getMixedNumbers_(a);a=sre.SemanticProcessor.getInstance().combineUnits_(a);return 1===a.length?a[0]:sre.SemanticProcessor.getInstance().implicitNode_(a)};\nsre.SemanticProcessor.prototype.infixNode_=function(a,b){a=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.INFIXOP,a,[b],sre.SemanticProcessor.getEmbellishedInner_(b).textContent);a.role=b.role;this.propagateSimpleFunction(a);return a};\nsre.SemanticProcessor.prototype.explicitMixed_=function(a){var b=sre.SemanticProcessor.partitionNodes_(a,function(h){return h.textContent===sre.SemanticAttr.invisiblePlus()});if(!b.rel.length)return a;a=[];for(var c=0,d;d=b.rel[c];c++){var e=b.comp[c],f=b.comp[c+1],g=e.length-1;e[g]&&f[0]&&sre.SemanticPred.isAttribute(\"type\",\"NUMBER\")(e[g])&&!sre.SemanticPred.isAttribute(\"role\",\"MIXED\")(e[g])&&sre.SemanticPred.isAttribute(\"type\",\"FRACTION\")(f[0])?(d=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.NUMBER,\n[e[g],f[0]],[]),d.role=sre.SemanticAttr.Role.MIXED,a=a.concat(e.slice(0,g)),a.push(d),f.shift()):(a=a.concat(e),a.push(d))}return a.concat(b.comp[b.comp.length-1])};sre.SemanticProcessor.prototype.concatNode_=function(a,b,c){if(0===b.length)return a;var d=b.map(function(e){return sre.SemanticProcessor.getEmbellishedInner_(e).textContent}).join(\" \");a=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(c,[a],b,d);1<b.length&&(a.role=sre.SemanticAttr.Role.MULTIOP);return a};\nsre.SemanticProcessor.prototype.prefixNode_=function(a,b){b=sre.SemanticProcessor.partitionNodes_(b,sre.SemanticPred.isAttribute(\"role\",\"SUBTRACTION\"));a=sre.SemanticProcessor.getInstance().concatNode_(a,b.comp.pop(),sre.SemanticAttr.Type.PREFIXOP);1===a.contentNodes.length&&a.contentNodes[0].role===sre.SemanticAttr.Role.ADDITION&&\"+\"===a.contentNodes[0].textContent&&(a.role=sre.SemanticAttr.Role.POSITIVE);for(;0<b.rel.length;)a=sre.SemanticProcessor.getInstance().concatNode_(a,[b.rel.pop()],sre.SemanticAttr.Type.PREFIXOP),\na.role=sre.SemanticAttr.Role.NEGATIVE,a=sre.SemanticProcessor.getInstance().concatNode_(a,b.comp.pop(),sre.SemanticAttr.Type.PREFIXOP);return a};sre.SemanticProcessor.prototype.postfixNode_=function(a,b){return b.length?sre.SemanticProcessor.getInstance().concatNode_(a,b,sre.SemanticAttr.Type.POSTFIXOP):a};sre.SemanticProcessor.prototype.text=function(a,b){a.type=sre.SemanticAttr.Type.TEXT;\"MS\"===b&&(a.role=sre.SemanticAttr.Role.STRING);sre.SemanticProcessor.exprFont_(a);return a};\nsre.SemanticProcessor.prototype.row=function(a){a=a.filter(function(b){return!sre.SemanticPred.isAttribute(\"type\",\"EMPTY\")(b)});if(0===a.length)return sre.SemanticProcessor.getInstance().factory_.makeEmptyNode();a=sre.SemanticProcessor.getInstance().getFencesInRow_(a);a=sre.SemanticProcessor.getInstance().tablesInRow(a);a=sre.SemanticProcessor.getInstance().getPunctuationInRow_(a);a=sre.SemanticProcessor.getInstance().getTextInRow_(a);a=sre.SemanticProcessor.getInstance().getFunctionsInRow_(a);return sre.SemanticProcessor.getInstance().relationsInRow_(a)};\nsre.SemanticProcessor.prototype.combineUnits_=function(a){var b=sre.SemanticProcessor.partitionNodes_(a,function(g){return!sre.SemanticPred.isAttribute(\"role\",\"UNIT\")(g)});if(a.length===b.rel.length)return b.rel;a=[];do{var c=b.comp.shift(),d=b.rel.shift(),e=null,f=a.pop();f&&(c.length&&sre.SemanticPred.isUnitCounter(f)?c.unshift(f):a.push(f));1===c.length&&(e=c.pop());1<c.length&&(e=sre.SemanticProcessor.getInstance().implicitNode_(c),e.role=sre.SemanticAttr.Role.UNIT);e&&a.push(e);d&&a.push(d)}while(d);\nreturn a};\nsre.SemanticProcessor.prototype.getMixedNumbers_=function(a){var b=sre.SemanticProcessor.partitionNodes_(a,function(g){return sre.SemanticPred.isAttribute(\"type\",\"FRACTION\")(g)&&sre.SemanticPred.isAttribute(\"role\",\"VULGAR\")(g)});if(!b.rel.length)return a;a=[];for(var c=0,d;d=b.rel[c];c++){var e=b.comp[c],f=e.length-1;e[f]&&sre.SemanticPred.isAttribute(\"type\",\"NUMBER\")(e[f])&&(sre.SemanticPred.isAttribute(\"role\",\"INTEGER\")(e[f])||sre.SemanticPred.isAttribute(\"role\",\"FLOAT\")(e[f]))?(d=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.NUMBER,[e[f],\nd],[]),d.role=sre.SemanticAttr.Role.MIXED,a=a.concat(e.slice(0,f)),a.push(d)):(a=a.concat(e),a.push(d))}return a.concat(b.comp[b.comp.length-1])};\nsre.SemanticProcessor.prototype.getTextInRow_=function(a){if(1>=a.length)return a;var b=sre.SemanticProcessor.partitionNodes_(a,sre.SemanticPred.isAttribute(\"type\",\"TEXT\"));if(0===b.rel.length)return a;a=[];var c=b.comp[0];0<c.length&&a.push(sre.SemanticProcessor.getInstance().row(c));for(var d=0;c=b.rel[d];d++)a.push(c),c=b.comp[d+1],0<c.length&&a.push(sre.SemanticProcessor.getInstance().row(c));return[sre.SemanticProcessor.getInstance().dummyNode_(a)]};\nsre.SemanticProcessor.prototype.relationsInRow_=function(a){var b=sre.SemanticProcessor.partitionNodes_(a,sre.SemanticPred.isRelation),c=b.rel[0];if(!c)return sre.SemanticProcessor.getInstance().operationsInRow_(a);if(1===a.length)return a[0];a=b.comp.map(goog.bind(sre.SemanticProcessor.getInstance().operationsInRow_,this));if(b.rel.some(function(d){return!d.equals(c)}))return a=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.MULTIREL,a,b.rel),b.rel.every(function(d){return d.role===\nc.role})&&(a.role=c.role),a;a=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.RELSEQ,a,b.rel,sre.SemanticProcessor.getEmbellishedInner_(c).textContent);a.role=c.role;return a};\nsre.SemanticProcessor.prototype.operationsInRow_=function(a){if(0===a.length)return sre.SemanticProcessor.getInstance().factory_.makeEmptyNode();a=this.explicitMixed_(a);if(1===a.length)return a[0];for(var b=[];0<a.length&&sre.SemanticPred.isOperator(a[0]);)b.push(a.shift());if(0===a.length)return sre.SemanticProcessor.getInstance().prefixNode_(b.pop(),b);if(1===a.length)return sre.SemanticProcessor.getInstance().prefixNode_(a[0],b);a=sre.SemanticProcessor.sliceNodes_(a,sre.SemanticPred.isOperator);\nb=sre.SemanticProcessor.getInstance().prefixNode_(sre.SemanticProcessor.getInstance().implicitNode(a.head),b);return a.div?sre.SemanticProcessor.getInstance().operationsTree_(a.tail,b,a.div):b};\nsre.SemanticProcessor.prototype.operationsTree_=function(a,b,c,d){d=d||[];if(0===a.length)return d.unshift(c),b.type===sre.SemanticAttr.Type.INFIXOP?(d=sre.SemanticProcessor.getInstance().postfixNode_(b.childNodes.pop(),d),b.appendChild(d),b):sre.SemanticProcessor.getInstance().postfixNode_(b,d);a=sre.SemanticProcessor.sliceNodes_(a,sre.SemanticPred.isOperator);if(0===a.head.length)return d.push(a.div),sre.SemanticProcessor.getInstance().operationsTree_(a.tail,b,c,d);d=sre.SemanticProcessor.getInstance().prefixNode_(sre.SemanticProcessor.getInstance().implicitNode(a.head),\nd);b=sre.SemanticProcessor.getInstance().appendOperand_(b,c,d);return a.div?sre.SemanticProcessor.getInstance().operationsTree_(a.tail,b,a.div,[]):b};\nsre.SemanticProcessor.prototype.appendOperand_=function(a,b,c){if(a.type!==sre.SemanticAttr.Type.INFIXOP)return sre.SemanticProcessor.getInstance().infixNode_([a,c],b);var d=this.appendDivisionOp_(a,b,c);return d?d:sre.SemanticProcessor.getInstance().appendExistingOperator_(a,b,c)?a:b.role===sre.SemanticAttr.Role.MULTIPLICATION?sre.SemanticProcessor.getInstance().appendMultiplicativeOp_(a,b,c):sre.SemanticProcessor.getInstance().appendAdditiveOp_(a,b,c)};\nsre.SemanticProcessor.prototype.appendDivisionOp_=function(a,b,c){return b.role===sre.SemanticAttr.Role.DIVISION?sre.SemanticPred.isImplicit(a)?sre.SemanticProcessor.getInstance().infixNode_([a,c],b):this.appendLastOperand_(a,b,c):a.role===sre.SemanticAttr.Role.DIVISION?this.infixNode_([a,c],b):null};\nsre.SemanticProcessor.prototype.appendLastOperand_=function(a,b,c){for(var d=a,e=a.childNodes[a.childNodes.length-1];e&&e.type===sre.SemanticAttr.Type.INFIXOP&&!sre.SemanticPred.isImplicit(e);)d=e,e=d.childNodes[a.childNodes.length-1];b=sre.SemanticProcessor.getInstance().infixNode_([d.childNodes.pop(),c],b);d.appendChild(b);return a};\nsre.SemanticProcessor.prototype.appendMultiplicativeOp_=function(a,b,c){if(sre.SemanticPred.isImplicit(a))return sre.SemanticProcessor.getInstance().infixNode_([a,c],b);for(var d=a,e=a.childNodes[a.childNodes.length-1];e&&e.type===sre.SemanticAttr.Type.INFIXOP&&!sre.SemanticPred.isImplicit(e);)d=e,e=d.childNodes[a.childNodes.length-1];b=sre.SemanticProcessor.getInstance().infixNode_([d.childNodes.pop(),c],b);d.appendChild(b);return a};\nsre.SemanticProcessor.prototype.appendAdditiveOp_=function(a,b,c){return sre.SemanticProcessor.getInstance().infixNode_([a,c],b)};sre.SemanticProcessor.prototype.appendExistingOperator_=function(a,b,c){return!a||a.type!==sre.SemanticAttr.Type.INFIXOP||sre.SemanticPred.isImplicit(a)?!1:a.contentNodes[0].equals(b)?(a.appendContentNode(b),a.appendChild(c),!0):sre.SemanticProcessor.getInstance().appendExistingOperator_(a.childNodes[a.childNodes.length-1],b,c)};\nsre.SemanticProcessor.prototype.getFencesInRow_=function(a){a=sre.SemanticProcessor.partitionNodes_(a,sre.SemanticPred.isFence);a=sre.SemanticProcessor.purgeFences_(a);var b=a.comp.shift();return sre.SemanticProcessor.getInstance().fences_(a.rel,a.comp,[],[b])};\nsre.SemanticProcessor.prototype.fences_=function(a,b,c,d){if(0===a.length&&0===c.length)return d[0];var e=sre.SemanticPred.isAttribute(\"role\",\"OPEN\");if(0===a.length){for(a=d.shift();0<c.length;){if(e(c[0]))b=c.shift(),sre.SemanticProcessor.fenceToPunct_(b),a.push(b);else{c=sre.SemanticProcessor.sliceNodes_(c,e);var f=c.head.length-1,g=sre.SemanticProcessor.getInstance().neutralFences_(c.head,d.slice(0,f));d=d.slice(f);a.push.apply(a,g);c.div&&c.tail.unshift(c.div);c=c.tail}a.push.apply(a,d.shift())}return a}f=\nc[c.length-1];g=a[0].role;if(g===sre.SemanticAttr.Role.OPEN||g===sre.SemanticAttr.Role.NEUTRAL&&(!f||a[0].textContent!==f.textContent))return c.push(a.shift()),(e=b.shift())&&d.push(e),sre.SemanticProcessor.getInstance().fences_(a,b,c,d);if(f&&(g===sre.SemanticAttr.Role.CLOSE&&f.role===sre.SemanticAttr.Role.OPEN||g===sre.SemanticAttr.Role.NEUTRAL&&a[0].textContent===f.textContent))return e=sre.SemanticProcessor.getInstance().horizontalFencedNode_(c.pop(),a.shift(),d.pop()),d.push(d.pop().concat([e],\nb.shift())),sre.SemanticProcessor.getInstance().fences_(a,b,c,d);if(f&&g===sre.SemanticAttr.Role.CLOSE&&f.role===sre.SemanticAttr.Role.NEUTRAL&&c.some(e))return c=sre.SemanticProcessor.sliceNodes_(c,e,!0),e=d.pop(),f=d.length-c.tail.length+1,g=sre.SemanticProcessor.getInstance().neutralFences_(c.tail,d.slice(f)),d=d.slice(0,f),e=sre.SemanticProcessor.getInstance().horizontalFencedNode_(c.div,a.shift(),d.pop().concat(g,e)),d.push(d.pop().concat([e],b.shift())),sre.SemanticProcessor.getInstance().fences_(a,\nb,c.head,d);e=a.shift();sre.SemanticProcessor.fenceToPunct_(e);d.push(d.pop().concat([e],b.shift()));return sre.SemanticProcessor.getInstance().fences_(a,b,c,d)};\nsre.SemanticProcessor.prototype.neutralFences_=function(a,b){if(0===a.length)return a;if(1===a.length)return sre.SemanticProcessor.fenceToPunct_(a[0]),a;var c=a.shift(),d=sre.SemanticProcessor.sliceNodes_(a,function(e){return sre.SemanticProcessor.getEmbellishedInner_(e).textContent==sre.SemanticProcessor.getEmbellishedInner_(c).textContent});if(!d.div)return sre.SemanticProcessor.fenceToPunct_(c),d=b.shift(),d.unshift(c),d.concat(sre.SemanticProcessor.getInstance().neutralFences_(a,b));b=sre.SemanticProcessor.getInstance().combineFencedContent_(c,\nd.div,d.head,b);return 0<d.tail.length?(a=b.shift(),d=sre.SemanticProcessor.getInstance().neutralFences_(d.tail,b),a.concat(d)):b[0]};\nsre.SemanticProcessor.prototype.combineFencedContent_=function(a,b,c,d){if(0===c.length)return a=sre.SemanticProcessor.getInstance().horizontalFencedNode_(a,b,d.shift()),0<d.length?d[0].unshift(a):d=[[a]],d;var e=d.shift(),f=c.length-1,g=d.slice(0,f);d=d.slice(f);f=d.shift();c=sre.SemanticProcessor.getInstance().neutralFences_(c,g);e.push.apply(e,c);e.push.apply(e,f);a=sre.SemanticProcessor.getInstance().horizontalFencedNode_(a,b,e);0<d.length?d[0].unshift(a):d=[[a]];return d};\nsre.SemanticProcessor.FENCE_TO_PUNCT_={};sre.SemanticProcessor.FENCE_TO_PUNCT_[sre.SemanticAttr.Role.NEUTRAL]=sre.SemanticAttr.Role.VBAR;sre.SemanticProcessor.FENCE_TO_PUNCT_[sre.SemanticAttr.Role.OPEN]=sre.SemanticAttr.Role.OPENFENCE;sre.SemanticProcessor.FENCE_TO_PUNCT_[sre.SemanticAttr.Role.CLOSE]=sre.SemanticAttr.Role.CLOSEFENCE;\nsre.SemanticProcessor.fenceToPunct_=function(a){var b=sre.SemanticProcessor.FENCE_TO_PUNCT_[a.role];if(b){for(;a.embellished;)a.embellished=sre.SemanticAttr.Type.PUNCTUATION,a.role=b,a=a.childNodes[0];a.type=sre.SemanticAttr.Type.PUNCTUATION;a.role=b}};\nsre.SemanticProcessor.prototype.horizontalFencedNode_=function(a,b,c){c=sre.SemanticProcessor.getInstance().row(c);b=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.FENCED,[c],[a,b]);a.role===sre.SemanticAttr.Role.OPEN?(this.classifyHorizontalFence_(b),this.propagateComposedFunction(b)):b.role=a.role;return sre.SemanticProcessor.rewriteFencedNode_(b)};\nsre.SemanticProcessor.prototype.classifyHorizontalFence_=function(a){a.role=sre.SemanticAttr.Role.LEFTRIGHT;var b=a.childNodes;if(sre.SemanticPred.isSetNode(a)&&!(1<b.length))if(0===b.length||b[0].type===sre.SemanticAttr.Type.EMPTY)a.role=sre.SemanticAttr.Role.SETEMPTY;else{var c=b[0].type;if(1===b.length&&sre.SemanticPred.isSingletonSetContent(b[0]))a.role=sre.SemanticAttr.Role.SETSINGLE;else{var d=b[0].role;c===sre.SemanticAttr.Type.PUNCTUATED&&d===sre.SemanticAttr.Role.SEQUENCE&&(b[0].contentNodes[0].role===\nsre.SemanticAttr.Role.COMMA?a.role=sre.SemanticAttr.Role.SETCOLLECT:1!==b[0].contentNodes.length||b[0].contentNodes[0].role!==sre.SemanticAttr.Role.VBAR&&b[0].contentNodes[0].role!==sre.SemanticAttr.Role.COLON||(a.role=sre.SemanticAttr.Role.SETEXT,this.setExtension_(a)))}}};\nsre.SemanticProcessor.prototype.setExtension_=function(a){(a=a.childNodes[0].childNodes[0])&&a.type===sre.SemanticAttr.Type.INFIXOP&&1===a.contentNodes.length&&a.contentNodes[0].role===sre.SemanticAttr.Role.UNKNOWN&&(a.contentNodes[0].role=sre.SemanticAttr.Role.SETEXT)};\nsre.SemanticProcessor.prototype.getPunctuationInRow_=function(a){if(1>=a.length)return a;var b=function(g){g=g.type;return\"punctuation\"===g||\"text\"===g||\"operator\"===g||\"relation\"===g},c=sre.SemanticProcessor.partitionNodes_(a,function(g){if(!sre.SemanticPred.isPunctuation(g))return!1;if(sre.SemanticPred.isPunctuation(g)&&!sre.SemanticPred.isAttribute(\"role\",\"ELLIPSIS\")(g))return!0;var h=a.indexOf(g);if(0===h)return a[1]&&b(a[1])?!1:!0;g=a[h-1];if(h===a.length-1)return b(g)?!1:!0;h=a[h+1];return b(g)&&\nb(h)?!1:!0});if(0===c.rel.length)return a;var d=[],e=c.comp.shift();0<e.length&&d.push(sre.SemanticProcessor.getInstance().row(e));for(var f=0;0<c.comp.length;)d.push(c.rel[f++]),e=c.comp.shift(),0<e.length&&d.push(sre.SemanticProcessor.getInstance().row(e));return[sre.SemanticProcessor.getInstance().punctuatedNode_(d,c.rel)]};\nsre.SemanticProcessor.prototype.punctuatedNode_=function(a,b){var c=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.PUNCTUATED,a,b);if(b.length===a.length){var d=b[0].role;if(d!==sre.SemanticAttr.Role.UNKNOWN&&b.every(function(e){return e.role===d}))return c.role=d,c}sre.SemanticPred.singlePunctAtPosition(a,b,0)?c.role=sre.SemanticAttr.Role.STARTPUNCT:sre.SemanticPred.singlePunctAtPosition(a,b,a.length-1)?c.role=sre.SemanticAttr.Role.ENDPUNCT:b.every(sre.SemanticPred.isAttribute(\"role\",\n\"DUMMY\"))?c.role=sre.SemanticAttr.Role.TEXT:c.role=sre.SemanticAttr.Role.SEQUENCE;return c};sre.SemanticProcessor.prototype.dummyNode_=function(a){var b=sre.SemanticProcessor.getInstance().factory_.makeMultipleContentNodes(a.length-1,sre.SemanticAttr.invisibleComma());b.forEach(function(c){c.role=sre.SemanticAttr.Role.DUMMY});return sre.SemanticProcessor.getInstance().punctuatedNode_(a,b)};\nsre.SemanticProcessor.MML_TO_LIMIT_={MSUB:sre.SemanticAttr.Type.LIMLOWER,MUNDER:sre.SemanticAttr.Type.LIMLOWER,MSUP:sre.SemanticAttr.Type.LIMUPPER,MOVER:sre.SemanticAttr.Type.LIMUPPER,MSUBSUP:sre.SemanticAttr.Type.LIMBOTH,MUNDEROVER:sre.SemanticAttr.Type.LIMBOTH};\nsre.SemanticProcessor.prototype.limitNode=function(a,b){var c=b[0];if(sre.SemanticPred.isLimitBase(c))a=sre.SemanticProcessor.MML_TO_LIMIT_[a];else switch(a){case \"MSUB\":a=sre.SemanticAttr.Type.SUBSCRIPT;break;case \"MSUP\":a=sre.SemanticAttr.Type.SUPERSCRIPT;break;case \"MSUBSUP\":var d=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.SUBSCRIPT,[c,b[1]],[]);d.role=sre.SemanticAttr.Role.SUBSUP;b=[d,b[2]];a=sre.SemanticAttr.Type.SUPERSCRIPT;break;case \"MOVER\":a=sre.SemanticAttr.Type.OVERSCORE;\nsre.SemanticPred.isAccent(b[1])&&(b[1].role=sre.SemanticAttr.Role.OVERACCENT);break;case \"MUNDER\":a=sre.SemanticAttr.Type.UNDERSCORE;sre.SemanticPred.isAccent(b[1])&&(b[1].role=sre.SemanticAttr.Role.UNDERACCENT);break;default:d=sre.SemanticPred.isAccent(b[1]),a=sre.SemanticPred.isAccent(b[2]),d&&(b[1].role=sre.SemanticAttr.Role.UNDERACCENT),a&&(b[2].role=sre.SemanticAttr.Role.OVERACCENT),a&&!d?(d=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.OVERSCORE,[c,b[2]],\n[]),b=[d,b[1]],a=sre.SemanticAttr.Type.UNDERSCORE):(d=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.UNDERSCORE,[c,b[1]],[]),b=[d,b[2]],a=sre.SemanticAttr.Type.OVERSCORE),d.role=sre.SemanticAttr.Role.UNDEROVER}b=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(a,b,[]);a=sre.SemanticPred.isEmbellished(c);d&&(d.embellished=a);b.embellished=a;b.role=c.role;return b};\nsre.SemanticProcessor.prototype.getFunctionsInRow_=function(a,b){b=b||[];if(0===a.length)return b;var c=a.shift(),d=sre.SemanticProcessor.classifyFunction_(c,a);if(!d)return b.push(c),sre.SemanticProcessor.getInstance().getFunctionsInRow_(a,b);a=sre.SemanticProcessor.getInstance().getFunctionsInRow_(a,[]);a=sre.SemanticProcessor.getInstance().getFunctionArgs_(c,a,d);return b.concat(a)};sre.SemanticProcessor.CLASSIFY_FUNCTION_={};\nsre.SemanticProcessor.CLASSIFY_FUNCTION_[sre.SemanticAttr.Role.INTEGRAL]=\"integral\";sre.SemanticProcessor.CLASSIFY_FUNCTION_[sre.SemanticAttr.Role.SUM]=\"bigop\";sre.SemanticProcessor.CLASSIFY_FUNCTION_[sre.SemanticAttr.Role.PREFIXFUNC]=\"prefix\";sre.SemanticProcessor.CLASSIFY_FUNCTION_[sre.SemanticAttr.Role.LIMFUNC]=\"prefix\";sre.SemanticProcessor.CLASSIFY_FUNCTION_[sre.SemanticAttr.Role.SIMPLEFUNC]=\"prefix\";sre.SemanticProcessor.CLASSIFY_FUNCTION_[sre.SemanticAttr.Role.COMPFUNC]=\"prefix\";\nsre.SemanticProcessor.classifyFunction_=function(a,b){if(a.type===sre.SemanticAttr.Type.APPL||a.type===sre.SemanticAttr.Type.BIGOP||a.type===sre.SemanticAttr.Type.INTEGRAL)return\"\";if(b[0]&&b[0].textContent===sre.SemanticAttr.functionApplication()){b.shift();b=sre.SemanticAttr.Role.SIMPLEFUNC;if(a.role===sre.SemanticAttr.Role.PREFIXFUNC||a.role===sre.SemanticAttr.Role.LIMFUNC)b=a.role;sre.SemanticProcessor.propagateFunctionRole_(a,b);return\"prefix\"}return(b=sre.SemanticProcessor.CLASSIFY_FUNCTION_[a.role])?\nb:sre.SemanticPred.isSimpleFunctionHead(a)?\"simple\":\"\"};sre.SemanticProcessor.propagateFunctionRole_=function(a,b){a&&(sre.SemanticPred.isAttribute(\"role\",\"SUBSUP\")(a)||(a.role=b),sre.SemanticProcessor.propagateFunctionRole_(a.childNodes[0],b))};\nsre.SemanticProcessor.prototype.getFunctionArgs_=function(a,b,c){switch(c){case \"integral\":b=sre.SemanticProcessor.getInstance().getIntegralArgs_(b);if(!b.intvar&&!b.integrand.length)return b.rest.unshift(a),b.rest;c=sre.SemanticProcessor.getInstance().row(b.integrand);a=sre.SemanticProcessor.getInstance().integralNode_(a,c,b.intvar);b.rest.unshift(a);return b.rest;case \"prefix\":if(b[0]&&b[0].type===sre.SemanticAttr.Type.FENCED){var d=b.shift();d.role!==sre.SemanticAttr.Role.NEUTRAL&&(d.role=sre.SemanticAttr.Role.LEFTRIGHT);\na=sre.SemanticProcessor.getInstance().functionNode_(a,d);b.unshift(a);return b}c=sre.SemanticProcessor.sliceNodes_(b,sre.SemanticPred.isPrefixFunctionBoundary);if(c.head.length)d=sre.SemanticProcessor.getInstance().row(c.head),c.div&&c.tail.unshift(c.div);else{if(!c.div||!sre.SemanticPred.isAttribute(\"type\",\"APPL\")(c.div))return b.unshift(a),b;d=c.div}a=sre.SemanticProcessor.getInstance().functionNode_(a,d);c.tail.unshift(a);return c.tail;case \"bigop\":c=sre.SemanticProcessor.sliceNodes_(b,sre.SemanticPred.isBigOpBoundary);\nif(!c.head.length)return b.unshift(a),b;d=sre.SemanticProcessor.getInstance().row(c.head);a=sre.SemanticProcessor.getInstance().bigOpNode_(a,d);c.div&&c.tail.unshift(c.div);c.tail.unshift(a);return c.tail;default:if(0===b.length)return[a];c=b[0];if(c.type===sre.SemanticAttr.Type.FENCED&&c.role!==sre.SemanticAttr.Role.NEUTRAL&&sre.SemanticPred.isSimpleFunctionScope(c))return c.role=sre.SemanticAttr.Role.LEFTRIGHT,sre.SemanticProcessor.propagateFunctionRole_(a,sre.SemanticAttr.Role.SIMPLEFUNC),a=sre.SemanticProcessor.getInstance().functionNode_(a,\nb.shift()),b.unshift(a),b;b.unshift(a);return b}};\nsre.SemanticProcessor.prototype.getIntegralArgs_=function(a,b){b=b||[];if(0===a.length)return{integrand:b,intvar:null,rest:a};var c=a[0];if(sre.SemanticPred.isGeneralFunctionBoundary(c))return{integrand:b,intvar:null,rest:a};if(sre.SemanticPred.isIntegralDxBoundarySingle(c))return{integrand:b,intvar:c,rest:a.slice(1)};if(a[1]&&sre.SemanticPred.isIntegralDxBoundary(c,a[1]))return c=sre.SemanticProcessor.getInstance().prefixNode_(a[1],[c]),c.role=sre.SemanticAttr.Role.INTEGRAL,{integrand:b,intvar:c,\nrest:a.slice(2)};b.push(a.shift());return sre.SemanticProcessor.getInstance().getIntegralArgs_(a,b)};\nsre.SemanticProcessor.prototype.functionNode_=function(a,b){var c=sre.SemanticProcessor.getInstance().factory_.makeContentNode(sre.SemanticAttr.functionApplication());c.type=sre.SemanticAttr.Type.PUNCTUATION;c.role=sre.SemanticAttr.Role.APPLICATION;var d=sre.SemanticProcessor.getFunctionOp_(a,function(e){return sre.SemanticPred.isAttribute(\"type\",\"FUNCTION\")(e)||sre.SemanticPred.isAttribute(\"type\",\"IDENTIFIER\")(e)&&sre.SemanticPred.isAttribute(\"role\",\"SIMPLEFUNC\")(e)});return sre.SemanticProcessor.getInstance().functionalNode_(sre.SemanticAttr.Type.APPL,\n[a,b],d,[c])};sre.SemanticProcessor.prototype.bigOpNode_=function(a,b){var c=sre.SemanticProcessor.getFunctionOp_(a,sre.SemanticPred.isAttribute(\"type\",\"LARGEOP\"));return sre.SemanticProcessor.getInstance().functionalNode_(sre.SemanticAttr.Type.BIGOP,[a,b],c,[])};\nsre.SemanticProcessor.prototype.integralNode_=function(a,b,c){b=b||sre.SemanticProcessor.getInstance().factory_.makeEmptyNode();c=c||sre.SemanticProcessor.getInstance().factory_.makeEmptyNode();var d=sre.SemanticProcessor.getFunctionOp_(a,sre.SemanticPred.isAttribute(\"type\",\"LARGEOP\"));return sre.SemanticProcessor.getInstance().functionalNode_(sre.SemanticAttr.Type.INTEGRAL,[a,b,c],d,[])};\nsre.SemanticProcessor.prototype.functionalNode_=function(a,b,c,d){var e=b[0];if(c){var f=c.parent;d.push(c)}a=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(a,b,d);a.role=e.role;f&&(c.parent=f);return a};sre.SemanticProcessor.getFunctionOp_=function(a,b){if(b(a))return a;for(var c=0,d;d=a.childNodes[c];c++)if(d=sre.SemanticProcessor.getFunctionOp_(d,b))return d;return null};\nsre.SemanticProcessor.prototype.tablesInRow=function(a){a=sre.SemanticProcessor.partitionNodes_(a,sre.SemanticPred.tableIsMatrixOrVector);for(var b=[],c=0,d;d=a.rel[c];c++)b=b.concat(a.comp.shift()),b.push(sre.SemanticProcessor.tableToMatrixOrVector_(d));b=b.concat(a.comp.shift());a=sre.SemanticProcessor.partitionNodes_(b,sre.SemanticPred.isTableOrMultiline);b=[];for(c=0;d=a.rel[c];c++){var e=a.comp.shift();sre.SemanticPred.tableIsCases(d,e)&&sre.SemanticProcessor.tableToCases_(d,e.pop());b=b.concat(e);\nb.push(d)}return b.concat(a.comp.shift())};sre.SemanticProcessor.tableToMatrixOrVector_=function(a){var b=a.childNodes[0];sre.SemanticPred.isAttribute(\"type\",\"MULTILINE\")(b)?sre.SemanticProcessor.tableToVector_(a):sre.SemanticProcessor.tableToMatrix_(a);a.contentNodes.forEach(goog.bind(b.appendContentNode,b));a=0;for(var c;c=b.childNodes[a];a++)sre.SemanticProcessor.assignRoleToRow_(c,sre.SemanticProcessor.getComponentRoles_(b));b.parent=null;return b};\nsre.SemanticProcessor.tableToVector_=function(a){var b=a.childNodes[0];b.type=sre.SemanticAttr.Type.VECTOR;1===b.childNodes.length?sre.SemanticProcessor.tableToSquare_(a):sre.SemanticProcessor.binomialForm_(b)};sre.SemanticProcessor.binomialForm_=function(a){sre.SemanticPred.isBinomial(a)&&(a.role=sre.SemanticAttr.Role.BINOMIAL,a.childNodes[0].role=sre.SemanticAttr.Role.BINOMIAL,a.childNodes[1].role=sre.SemanticAttr.Role.BINOMIAL)};\nsre.SemanticProcessor.tableToMatrix_=function(a){var b=a.childNodes[0];b.type=sre.SemanticAttr.Type.MATRIX;b.childNodes&&0<b.childNodes.length&&b.childNodes[0].childNodes&&b.childNodes.length===b.childNodes[0].childNodes.length?sre.SemanticProcessor.tableToSquare_(a):b.childNodes&&1===b.childNodes.length&&(b.role=sre.SemanticAttr.Role.ROWVECTOR)};\nsre.SemanticProcessor.tableToSquare_=function(a){var b=a.childNodes[0];sre.SemanticPred.isAttribute(\"role\",\"NEUTRAL\")(a)?b.role=sre.SemanticAttr.Role.DETERMINANT:b.role=sre.SemanticAttr.Role.SQUAREMATRIX};sre.SemanticProcessor.getComponentRoles_=function(a){var b=a.role;return b&&b!==sre.SemanticAttr.Role.UNKNOWN?b:sre.SemanticAttr.Role[a.type.toUpperCase()]||sre.SemanticAttr.Role.UNKNOWN};\nsre.SemanticProcessor.tableToCases_=function(a,b){for(var c=0,d;d=a.childNodes[c];c++)sre.SemanticProcessor.assignRoleToRow_(d,sre.SemanticAttr.Role.CASES);a.type=sre.SemanticAttr.Type.CASES;a.appendContentNode(b);sre.SemanticPred.tableIsMultiline(a)&&sre.SemanticProcessor.binomialForm_(a);return a};\nsre.SemanticProcessor.tableToMultiline=function(a){if(sre.SemanticPred.tableIsMultiline(a)){a.type=sre.SemanticAttr.Type.MULTILINE;for(var b=0,c;c=a.childNodes[b];b++)sre.SemanticProcessor.rowToLine_(c,sre.SemanticAttr.Role.MULTILINE);1===a.childNodes.length&&sre.SemanticPred.isFencedElement(a.childNodes[0].childNodes[0])&&sre.SemanticProcessor.tableToMatrixOrVector_(sre.SemanticProcessor.rewriteFencedLine_(a));sre.SemanticProcessor.binomialForm_(a);sre.SemanticProcessor.classifyMultiline(a)}else sre.SemanticProcessor.classifyTable(a)};\nsre.SemanticProcessor.rewriteFencedLine_=function(a){var b=a.childNodes[0],c=a.childNodes[0].childNodes[0],d=a.childNodes[0].childNodes[0].childNodes[0];c.parent=a.parent;a.parent=c;d.parent=b;c.childNodes=[a];b.childNodes=[d];return c};\nsre.SemanticProcessor.rowToLine_=function(a,b){b=b||sre.SemanticAttr.Role.UNKNOWN;sre.SemanticPred.isAttribute(\"type\",\"ROW\")(a)&&(a.type=sre.SemanticAttr.Type.LINE,a.role=b,1===a.childNodes.length&&sre.SemanticPred.isAttribute(\"type\",\"CELL\")(a.childNodes[0])&&(a.childNodes=a.childNodes[0].childNodes,a.childNodes.forEach(function(c){c.parent=a})))};\nsre.SemanticProcessor.assignRoleToRow_=function(a,b){if(sre.SemanticPred.isAttribute(\"type\",\"LINE\")(a))a.role=b;else if(sre.SemanticPred.isAttribute(\"type\",\"ROW\")(a)){a.role=b;var c=sre.SemanticPred.isAttribute(\"type\",\"CELL\");a.childNodes.forEach(function(d){c(d)&&(d.role=b)})}};\nsre.SemanticProcessor.sliceNodes_=function(a,b,c){c&&a.reverse();for(var d=[],e=0,f;f=a[e];e++){if(b(f))return c?{head:a.slice(e+1).reverse(),div:f,tail:d.reverse()}:{head:d,div:f,tail:a.slice(e+1)};d.push(f)}return c?{head:[],div:null,tail:d.reverse()}:{head:d,div:null,tail:[]}};sre.SemanticProcessor.partitionNodes_=function(a,b){var c=[],d=[];do{var e=sre.SemanticProcessor.sliceNodes_(a,b);d.push(e.head);c.push(e.div);a=e.tail}while(e.div);c.pop();return{rel:c,comp:d}};\nsre.SemanticProcessor.prototype.mfenced=function(a,b,c,d){if(c&&0<d.length){var e=sre.SemanticProcessor.nextSeparatorFunction_(c),f=[d.shift()];d.forEach(goog.bind(function(g){f.push(sre.SemanticProcessor.getInstance().factory_.makeContentNode(e()));f.push(g)},this));d=f}if(a&&b)return sre.SemanticProcessor.getInstance().horizontalFencedNode_(sre.SemanticProcessor.getInstance().factory_.makeContentNode(a),sre.SemanticProcessor.getInstance().factory_.makeContentNode(b),d);a&&d.unshift(sre.SemanticProcessor.getInstance().factory_.makeContentNode(a));\nb&&d.push(sre.SemanticProcessor.getInstance().factory_.makeContentNode(b));return sre.SemanticProcessor.getInstance().row(d)};sre.SemanticProcessor.nextSeparatorFunction_=function(a){if(a){if(a.match(/^\\s+$/))return null;var b=a.replace(/\\s/g,\"\").split(\"\").filter(function(c){return c})}else b=[\",\"];return function(){return 1<b.length?b.shift():b[0]}};\nsre.SemanticProcessor.number=function(a){if(a.type===sre.SemanticAttr.Type.UNKNOWN||a.type===sre.SemanticAttr.Type.IDENTIFIER)a.type=sre.SemanticAttr.Type.NUMBER;sre.SemanticProcessor.numberRole_(a);sre.SemanticProcessor.exprFont_(a)};\nsre.SemanticProcessor.numberRole_=function(a){if(a.role===sre.SemanticAttr.Role.UNKNOWN){var b=sre.SemanticUtil.splitUnicode(a.textContent).map(sre.SemanticAttr.lookupMeaning);b.every(function(c){return c.type===sre.SemanticAttr.Type.NUMBER&&c.role===sre.SemanticAttr.Role.INTEGER||c.type===sre.SemanticAttr.Type.PUNCTUATION&&c.role===sre.SemanticAttr.Role.COMMA})?a.role=sre.SemanticAttr.Role.INTEGER:b.every(function(c){return c.type===sre.SemanticAttr.Type.NUMBER&&c.role===sre.SemanticAttr.Role.INTEGER||\nc.type===sre.SemanticAttr.Type.PUNCTUATION})?a.role=sre.SemanticAttr.Role.FLOAT:a.role=sre.SemanticAttr.Role.OTHERNUMBER}};sre.SemanticProcessor.exprFont_=function(a){if(a.font===sre.SemanticAttr.Font.UNKNOWN){var b=sre.SemanticUtil.splitUnicode(a.textContent).map(sre.SemanticAttr.lookupMeaning).reduce(function(c,d){return c&&d.font&&d.font!==sre.SemanticAttr.Font.UNKNOWN&&d.font!==c?c===sre.SemanticAttr.Font.UNKNOWN?d.font:null:c},sre.SemanticAttr.Font.UNKNOWN);b&&(a.font=b)}};\nsre.SemanticProcessor.prototype.fractionLikeNode=function(a,b,c,d){!d&&sre.SemanticUtil.isZeroLength(c)?(d=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.LINE,[a],[]),b=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.LINE,[b],[]),b=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.MULTILINE,[d,b],[]),sre.SemanticProcessor.binomialForm_(b),sre.SemanticProcessor.classifyMultiline(b)):(b=sre.SemanticProcessor.getInstance().fractionNode_(a,\nb),d&&b.addAnnotation(\"general\",\"bevelled\"));return b};\nsre.SemanticProcessor.prototype.fractionNode_=function(a,b){a=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.FRACTION,[a,b],[]);a.role=a.childNodes.every(function(c){return sre.SemanticPred.isAttribute(\"type\",\"NUMBER\")(c)&&sre.SemanticPred.isAttribute(\"role\",\"INTEGER\")(c)})?sre.SemanticAttr.Role.VULGAR:a.childNodes.every(sre.SemanticPred.isPureUnit)?sre.SemanticAttr.Role.UNIT:sre.SemanticAttr.Role.DIVISION;this.propagateSimpleFunction(a);return a};\nsre.SemanticProcessor.prototype.tensor=function(a,b,c,d,e){b=sre.SemanticProcessor.getInstance().factory_.makeBranchNode(sre.SemanticAttr.Type.TENSOR,[a,sre.SemanticProcessor.getInstance().scriptNode_(b,sre.SemanticAttr.Role.LEFTSUB),sre.SemanticProcessor.getInstance().scriptNode_(c,sre.SemanticAttr.Role.LEFTSUPER),sre.SemanticProcessor.getInstance().scriptNode_(d,sre.SemanticAttr.Role.RIGHTSUB),sre.SemanticProcessor.getInstance().scriptNode_(e,sre.SemanticAttr.Role.RIGHTSUPER)],[]);b.role=a.role;\nb.embellished=sre.SemanticPred.isEmbellished(a);return b};\nsre.SemanticProcessor.prototype.pseudoTensor=function(a,b,c){var d=function(g){return!sre.SemanticPred.isAttribute(\"type\",\"EMPTY\")(g)},e=b.filter(d).length;d=c.filter(d).length;if(!e&&!d)return a;var f=e?d?\"MSUBSUP\":\"MSUB\":\"MSUP\";a=[a];e&&a.push(sre.SemanticProcessor.getInstance().scriptNode_(b,sre.SemanticAttr.Role.RIGHTSUB,!0));d&&a.push(sre.SemanticProcessor.getInstance().scriptNode_(c,sre.SemanticAttr.Role.RIGHTSUPER,!0));return sre.SemanticProcessor.getInstance().limitNode(f,a)};\nsre.SemanticProcessor.prototype.scriptNode_=function(a,b,c){switch(a.length){case 0:a=sre.SemanticProcessor.getInstance().factory_.makeEmptyNode();break;case 1:a=a[0];if(c)return a;break;default:a=sre.SemanticProcessor.getInstance().dummyNode_(a)}a.role=b;return a};sre.SemanticProcessor.getEmbellishedInner_=function(a){return a&&a.embellished&&0<a.childNodes.length?sre.SemanticProcessor.getEmbellishedInner_(a.childNodes[0]):a};\nsre.SemanticProcessor.purgeFences_=function(a){var b=a.rel;a=a.comp;for(var c=[],d=[];0<b.length;){var e=b.shift(),f=a.shift();sre.SemanticPred.isElligibleEmbellishedFence(e)?(c.push(e),d.push(f)):(sre.SemanticProcessor.fenceToPunct_(e),f.push(e),f=f.concat(a.shift()),a.unshift(f))}d.push(a.shift());return{rel:c,comp:d}};\nsre.SemanticProcessor.rewriteFencedNode_=function(a){var b=a.contentNodes[1],c=sre.SemanticProcessor.rewriteFence_(a,a.contentNodes[0]);a.contentNodes[0]=c.fence;c=sre.SemanticProcessor.rewriteFence_(c.node,b);a.contentNodes[1]=c.fence;a.contentNodes[0].parent=a;a.contentNodes[1].parent=a;c.node.parent=null;return c.node};\nsre.SemanticProcessor.rewriteFence_=function(a,b){if(!b.embellished)return{node:a,fence:b};var c=b.childNodes[0],d=sre.SemanticProcessor.rewriteFence_(a,c);if(sre.SemanticPred.isAttribute(\"type\",\"SUPERSCRIPT\")(b)||sre.SemanticPred.isAttribute(\"type\",\"SUBSCRIPT\")(b)||sre.SemanticPred.isAttribute(\"type\",\"TENSOR\")(b))return sre.SemanticPred.isAttribute(\"role\",\"SUBSUP\")(b)||(b.role=a.role),c!==d.node&&(b.replaceChild(c,d.node),c.parent=a),sre.SemanticProcessor.propagateFencePointer_(b,c),{node:b,fence:d.fence};\nb.replaceChild(c,d.fence);b.mathmlTree&&-1===b.mathml.indexOf(b.mathmlTree)&&b.mathml.push(b.mathmlTree);return{node:d.node,fence:b}};sre.SemanticProcessor.propagateFencePointer_=function(a,b){a.fencePointer=b.fencePointer||b.id.toString();a.embellished=null};\nsre.SemanticProcessor.classifyMultiline=function(a){for(var b=0,c=a.childNodes.length,d;b<c&&(!(d=a.childNodes[b])||!d.childNodes.length);)b++;if(!(b>=c)){var e=d.childNodes[0].role;e!==sre.SemanticAttr.Role.UNKNOWN&&a.childNodes.every(function(f){f=f.childNodes[0];return!f||f.role===e&&(sre.SemanticPred.isAttribute(\"type\",\"RELATION\")(f)||sre.SemanticPred.isAttribute(\"type\",\"RELSEQ\")(f))})&&(a.role=e)}};\nsre.SemanticProcessor.classifyTable=function(a){var b=sre.SemanticProcessor.computeColumns_(a);sre.SemanticProcessor.classifyByColumns_(a,b,\"EQUALITY\")||sre.SemanticProcessor.classifyByColumns_(a,b,\"INEQUALITY\",[\"EQUALITY\"])||sre.SemanticProcessor.classifyByColumns_(a,b,\"ARROW\")};\nsre.SemanticProcessor.classifyByColumns_=function(a,b,c,d){d=function(g){return sre.SemanticProcessor.isPureRelation_(g,c)};var e=function(g){return sre.SemanticProcessor.isEndRelation_(g,c)||sre.SemanticProcessor.isPureRelation_(g,c)},f=function(g){return sre.SemanticProcessor.isEndRelation_(g,c,!0)||sre.SemanticProcessor.isPureRelation_(g,c)};return 3===b.length&&sre.SemanticProcessor.testColumns_(b,1,d)||2===b.length&&(sre.SemanticProcessor.testColumns_(b,1,e)||sre.SemanticProcessor.testColumns_(b,\n0,f))?(a.role=sre.SemanticAttr.Role[c],!0):!1};sre.SemanticProcessor.isEndRelation_=function(a,b,c){c=c?a.childNodes.length-1:0;return sre.SemanticPred.isAttribute(\"type\",\"RELSEQ\")(a)&&sre.SemanticPred.isAttribute(\"role\",b)(a)&&sre.SemanticPred.isAttribute(\"type\",\"EMPTY\")(a.childNodes[c])};sre.SemanticProcessor.isPureRelation_=function(a,b){return sre.SemanticPred.isAttribute(\"type\",\"RELATION\")(a)&&sre.SemanticPred.isAttribute(\"role\",b)(a)};\nsre.SemanticProcessor.computeColumns_=function(a){for(var b=[],c=0,d;d=a.childNodes[c];c++)for(var e=0,f;f=d.childNodes[e];e++)b[e]?b[e].push(f):b[e]=[f];return b};sre.SemanticProcessor.testColumns_=function(a,b,c){return(a=a[b])?a.some(function(d){return d.childNodes.length&&c(d.childNodes[0])})&&a.every(function(d){return!d.childNodes.length||c(d.childNodes[0])}):!1};\nsre.SemanticProcessor.MATHJAX_FONTS={\"-tex-caligraphic\":sre.SemanticAttr.Font.CALIGRAPHIC,\"-tex-caligraphic-bold\":sre.SemanticAttr.Font.CALIGRAPHICBOLD,\"-tex-calligraphic\":sre.SemanticAttr.Font.CALIGRAPHIC,\"-tex-calligraphic-bold\":sre.SemanticAttr.Font.CALIGRAPHICBOLD,\"-tex-oldstyle\":sre.SemanticAttr.Font.OLDSTYLE,\"-tex-oldstyle-bold\":sre.SemanticAttr.Font.OLDSTYLEBOLD,\"-tex-mathit\":sre.SemanticAttr.Font.ITALIC};\nsre.SemanticProcessor.prototype.font=function(a){var b=sre.SemanticProcessor.MATHJAX_FONTS[a];return b?b:a};sre.SemanticProcessor.prototype.propagateSimpleFunction=function(a){\"clearspeak\"!==sre.Engine.getInstance().domain||a.type!==sre.SemanticAttr.Type.INFIXOP&&a.type!==sre.SemanticAttr.Type.FRACTION||!a.childNodes.every(sre.SemanticPred.isSimpleFunction)||(a.role=sre.SemanticAttr.Role.COMPFUNC)};\nsre.SemanticProcessor.prototype.propagateComposedFunction=function(a){\"clearspeak\"===sre.Engine.getInstance().domain&&a.type===sre.SemanticAttr.Type.FENCED&&a.childNodes[0].role===sre.SemanticAttr.Role.COMPFUNC&&(a.role=sre.SemanticAttr.Role.COMPFUNC)};sre.SemanticProcessor.proof=function(a,b,c){b=sre.SemanticProcessor.separateSemantics(b);return sre.SemanticProcessor.getInstance().proof(a,b,c)};\nsre.SemanticProcessor.prototype.proof=function(a,b,c){b.inference||b.axiom||console.log(\"Noise\");if(b.axiom)return b=this.cleanInference(a.childNodes),b=b.length?this.factory_.makeBranchNode(sre.SemanticAttr.Type.INFERENCE,c(b),[]):this.factory_.makeEmptyNode(),b.role=sre.SemanticAttr.Role.AXIOM,b.mathmlTree=a,b;a=this.inference(a,b,c);b.proof&&(a.role=sre.SemanticAttr.Role.PROOF,a.childNodes[0].role=sre.SemanticAttr.Role.FINAL);return a};\nsre.SemanticProcessor.prototype.inference=function(a,b,c){if(b.inferenceRule)return c=this.getFormulas(a,[],c),c=this.factory_.makeBranchNode(sre.SemanticAttr.Type.INFERENCE,[c.conclusion,c.premises],[]);var d=b.labelledRule,e=sre.DomUtil.toArray(a.childNodes);b=[];\"left\"!==d&&\"both\"!==d||b.push(this.getLabel(a,e,c,sre.SemanticAttr.Role.LEFT));\"right\"!==d&&\"both\"!==d||b.push(this.getLabel(a,e,c,sre.SemanticAttr.Role.RIGHT));c=this.getFormulas(a,e,c);c=this.factory_.makeBranchNode(sre.SemanticAttr.Type.INFERENCE,\n[c.conclusion,c.premises],b);c.mathmlTree=a;return c};sre.SemanticProcessor.prototype.getLabel=function(a,b,c,d){a=this.findNestedRow(b,\"prooflabel\",d);c=this.factory_.makeBranchNode(sre.SemanticAttr.Type.RULELABEL,c(sre.DomUtil.toArray(a.childNodes)),[]);c.role=d;c.mathmlTree=a;return c};\nsre.SemanticProcessor.prototype.getFormulas=function(a,b,c){b=b.length?this.findNestedRow(b,\"inferenceRule\"):a;var d=\"up\"===sre.SemanticProcessor.getSemantics(b).inferenceRule;a=d?b.childNodes[0]:b.childNodes[1];b=(d?b.childNodes[1]:b.childNodes[0]).childNodes[0].childNodes[0];var e=sre.DomUtil.toArray(b.childNodes[0].childNodes);d=[];var f=1;e=$jscomp.makeIterator(e);for(var g=e.next();!g.done;g=e.next())g=g.value,f%2&&d.push(g.childNodes[0]),f++;d=c(d);c=c(sre.DomUtil.toArray(a.childNodes[0].childNodes))[0];\nd=this.factory_.makeBranchNode(sre.SemanticAttr.Type.PREMISES,d,[]);d.mathmlTree=b;c=this.factory_.makeBranchNode(sre.SemanticAttr.Type.CONCLUSION,[c],[]);c.mathmlTree=a.childNodes[0].childNodes[0];return{conclusion:c,premises:d}};sre.SemanticProcessor.prototype.findNestedRow=function(a,b,c){return this.findNestedRow_(a,b,0,c)};\nsre.SemanticProcessor.prototype.findNestedRow_=function(a,b,c,d){if(3<c)return null;for(var e=0,f;f=a[e];e++){var g=sre.DomUtil.tagName(f);if(\"MSPACE\"!==g){if(\"MROW\"===g)return this.findNestedRow_(sre.DomUtil.toArray(f.childNodes),b,c+1,d);if(sre.SemanticProcessor.findSemantics(f,b,d))return f}}return null};sre.SemanticProcessor.prototype.cleanInference=function(a){return sre.DomUtil.toArray(a).filter(function(b){return\"MSPACE\"!==sre.DomUtil.tagName(b)})};\nsre.SemanticProcessor.findSemantics=function(a,b,c){c=null==c?null:c;return(a=sre.SemanticProcessor.getSemantics(a))&&a[b]?null==c?!0:a[b]===c:!1};sre.SemanticProcessor.getSemantics=function(a){return(a=a.getAttribute(\"semantics\"))?sre.SemanticProcessor.separateSemantics(a):null};sre.SemanticProcessor.removePrefix=function(a){a=$jscomp.makeIterator(a.split(\"_\"));a.next();return $jscomp.arrayFromIterator(a).join(\"_\")};\nsre.SemanticProcessor.separateSemantics=function(a){var b={};a.split(\";\").forEach(function(c){var d=$jscomp.makeIterator(c.split(\":\"));c=d.next().value;d=d.next().value;b[sre.SemanticProcessor.removePrefix(c)]=d});return b};sre.SemanticMathml=function(){sre.SemanticAbstractParser.call(this,\"MathML\");this.parseMap_={SEMANTICS:goog.bind(this.semantics_,this),MATH:goog.bind(this.rows_,this),MROW:goog.bind(this.rows_,this),MPADDED:goog.bind(this.rows_,this),MSTYLE:goog.bind(this.rows_,this),MFRAC:goog.bind(this.fraction_,this),MSUB:goog.bind(this.limits_,this),MSUP:goog.bind(this.limits_,this),MSUBSUP:goog.bind(this.limits_,this),MOVER:goog.bind(this.limits_,this),MUNDER:goog.bind(this.limits_,this),MUNDEROVER:goog.bind(this.limits_,\nthis),MROOT:goog.bind(this.root_,this),MSQRT:goog.bind(this.sqrt_,this),MTABLE:goog.bind(this.table_,this),MLABELEDTR:goog.bind(this.tableLabeledRow_,this),MTR:goog.bind(this.tableRow_,this),MTD:goog.bind(this.tableCell_,this),MS:goog.bind(this.text_,this),MTEXT:goog.bind(this.text_,this),\"ANNOTATION-XML\":goog.bind(this.text_,this),MI:goog.bind(this.identifier_,this),MN:goog.bind(this.number_,this),MO:goog.bind(this.operator_,this),MFENCED:goog.bind(this.fenced_,this),MENCLOSE:goog.bind(this.enclosed_,\nthis),MMULTISCRIPTS:goog.bind(this.multiscripts_,this),ANNOTATION:goog.bind(this.empty_,this),NONE:goog.bind(this.empty_,this),MACTION:goog.bind(this.action_,this)};var a={type:sre.SemanticAttr.Type.IDENTIFIER,role:sre.SemanticAttr.Role.NUMBERSET,font:sre.SemanticAttr.Font.DOUBLESTRUCK};\"CHNPQRZ\\u2102\\u210d\\u2115\\u2119\\u211a\\u211d\\u2124\".split(\"\").forEach(function(b){this.getFactory().defaultMap.add(b,a)}.bind(this))};goog.inherits(sre.SemanticMathml,sre.SemanticAbstractParser);\nsre.SemanticMathml.prototype.parse=function(a){sre.SemanticProcessor.getInstance().setNodeFactory(this.getFactory());var b=sre.DomUtil.toArray(a.childNodes),c=sre.DomUtil.tagName(a),d=this.parseMap_[c];b=(d?d:goog.bind(this.dummy_,this))(a,b);sre.SemanticUtil.addAttributes(b,a);if(-1!==[\"MATH\",\"MROW\",\"MPADDED\",\"MSTYLE\",\"SEMANTICS\"].indexOf(c))return b;b.mathml.unshift(a);b.mathmlTree=a;return b};sre.SemanticMathml.prototype.semantics_=function(a,b){return b.length?this.parse(b[0]):this.getFactory().makeEmptyNode()};\nsre.SemanticMathml.prototype.rows_=function(a,b){var c=a.getAttribute(\"semantics\");if(c&&c.match(\"bspr_\"))return sre.SemanticProcessor.proof(a,c,goog.bind(this.parseList,this));b=sre.SemanticUtil.purgeNodes(b);b=1===b.length?this.parse(b[0]):sre.SemanticProcessor.getInstance().row(this.parseList(b));b.mathml.unshift(a);return b};\nsre.SemanticMathml.prototype.fraction_=function(a,b){return sre.SemanticProcessor.getInstance().fractionLikeNode(this.parse(b[0]),this.parse(b[1]),a.getAttribute(\"linethickness\"),\"true\"===a.getAttribute(\"bevelled\"))};sre.SemanticMathml.prototype.limits_=function(a,b){return sre.SemanticProcessor.getInstance().limitNode(sre.DomUtil.tagName(a),this.parseList(b))};\nsre.SemanticMathml.prototype.root_=function(a,b){return this.getFactory().makeBranchNode(sre.SemanticAttr.Type.ROOT,[this.parse(b[1]),this.parse(b[0])],[])};sre.SemanticMathml.prototype.sqrt_=function(a,b){a=this.parseList(sre.SemanticUtil.purgeNodes(b));return this.getFactory().makeBranchNode(sre.SemanticAttr.Type.SQRT,[sre.SemanticProcessor.getInstance().row(a)],[])};\nsre.SemanticMathml.prototype.table_=function(a,b){var c=a.getAttribute(\"semantics\");if(c&&c.match(\"bspr_\"))return sre.SemanticProcessor.proof(a,c,goog.bind(this.parseList,this));a=this.getFactory().makeBranchNode(sre.SemanticAttr.Type.TABLE,this.parseList(b),[]);sre.SemanticProcessor.tableToMultiline(a);return a};sre.SemanticMathml.prototype.tableRow_=function(a,b){a=this.getFactory().makeBranchNode(sre.SemanticAttr.Type.ROW,this.parseList(b),[]);a.role=sre.SemanticAttr.Role.TABLE;return a};\nsre.SemanticMathml.prototype.tableLabeledRow_=function(a,b){if(!b.length)return this.tableRow_(a,b);a=this.parse(b[0]);a.role=sre.SemanticAttr.Role.LABEL;b=this.getFactory().makeBranchNode(sre.SemanticAttr.Type.ROW,this.parseList(b.slice(1)),[a]);b.role=sre.SemanticAttr.Role.TABLE;return b};\nsre.SemanticMathml.prototype.tableCell_=function(a,b){a=this.parseList(sre.SemanticUtil.purgeNodes(b));a=a.length?1===a.length&&sre.SemanticPred.isAttribute(\"type\",\"EMPTY\")(a[0])?a:[sre.SemanticProcessor.getInstance().row(a)]:[];a=this.getFactory().makeBranchNode(sre.SemanticAttr.Type.CELL,a,[]);a.role=sre.SemanticAttr.Role.TABLE;return a};\nsre.SemanticMathml.prototype.text_=function(a,b){b=this.leaf_(a,b);if(!a.textContent)return b;b.updateContent(a.textContent,!0);return sre.SemanticProcessor.getInstance().text(b,sre.DomUtil.tagName(a))};\nsre.SemanticMathml.prototype.identifier_=function(a,b){b=this.leaf_(a,b);a=sre.SemanticProcessor.getInstance().identifierNode(b,sre.SemanticProcessor.getInstance().font(a.getAttribute(\"mathvariant\")),a.getAttribute(\"class\"));if(\"clearspeak\"!==sre.Engine.getInstance().domain)return a;-1!==\"fghFGH\".split(\"\").indexOf(a.textContent)&&(a.role=sre.SemanticAttr.Role.SIMPLEFUNC);return a};sre.SemanticMathml.prototype.number_=function(a,b){a=this.leaf_(a,b);sre.SemanticProcessor.number(a);return a};\nsre.SemanticMathml.prototype.operator_=function(a,b){a=this.leaf_(a,b);a.type===sre.SemanticAttr.Type.UNKNOWN&&(a.type=sre.SemanticAttr.Type.OPERATOR);return a};sre.SemanticMathml.prototype.fenced_=function(a,b){b=this.parseList(sre.SemanticUtil.purgeNodes(b));var c=sre.SemanticMathml.getAttribute_(a,\"separators\",\",\"),d=sre.SemanticMathml.getAttribute_(a,\"open\",\"(\");a=sre.SemanticMathml.getAttribute_(a,\"close\",\")\");a=sre.SemanticProcessor.getInstance().mfenced(d,a,c,b);return sre.SemanticProcessor.getInstance().tablesInRow([a])[0]};\nsre.SemanticMathml.prototype.enclosed_=function(a,b){b=this.parseList(sre.SemanticUtil.purgeNodes(b));b=this.getFactory().makeBranchNode(sre.SemanticAttr.Type.ENCLOSE,[sre.SemanticProcessor.getInstance().row(b)],[]);b.role=a.getAttribute(\"notation\")||sre.SemanticAttr.Role.UNKNOWN;return b};\nsre.SemanticMathml.prototype.multiscripts_=function(a,b){if(!b.length)return this.getFactory().makeEmptyNode();a=this.parse(b.shift());if(!b.length)return a;for(var c=[],d=[],e=[],f=[],g=!1,h=0,k=0,l;l=b[k];k++)\"MPRESCRIPTS\"===sre.DomUtil.tagName(l)?(g=!0,h=0):(g?h&1?c.push(l):d.push(l):h&1?e.push(l):f.push(l),h++);return sre.SemanticUtil.purgeNodes(c).length||sre.SemanticUtil.purgeNodes(d).length?sre.SemanticProcessor.getInstance().tensor(a,this.parseList(d),this.parseList(c),this.parseList(f),this.parseList(e)):\nsre.SemanticProcessor.getInstance().pseudoTensor(a,this.parseList(f),this.parseList(e))};sre.SemanticMathml.prototype.empty_=function(a,b){return this.getFactory().makeEmptyNode()};sre.SemanticMathml.prototype.action_=function(a,b){return 1<b.length?this.parse(b[1]):this.getFactory().makeUnprocessed(a)};sre.SemanticMathml.prototype.dummy_=function(a,b){b=this.getFactory().makeUnprocessed(a);b.role=a.tagName;return b};\nsre.SemanticMathml.prototype.leaf_=function(a,b){return 1===b.length&&b[0].nodeType!==sre.DomUtil.NodeType.TEXT_NODE?(a=this.getFactory().makeUnprocessed(a),sre.SemanticUtil.addAttributes(a,b[0]),a):this.getFactory().makeLeafNode(a.textContent,sre.SemanticProcessor.getInstance().font(a.getAttribute(\"mathvariant\")))};sre.SemanticMathml.getAttribute_=function(a,b,c){if(!a.hasAttribute(b))return c;a=a.getAttribute(b);return a.match(/^\\s*$/)?null:a};sre.SemanticTree=function(a){this.mathml=a;this.parser=new sre.SemanticMathml;this.root=this.parser.parse(a);this.collator=this.parser.getFactory().leafMap.collateMeaning();var b=this.collator.newDefault();b&&(this.parser=new sre.SemanticMathml,this.parser.getFactory().defaultMap=b,this.root=this.parser.parse(a));sre.SemanticTree.implicitVisitor_.visit(this.root,{});sre.SemanticTree.unitVisitor_.visit(this.root,{});sre.SemanticAnnotations.getInstance().annotate(this.root)};\nsre.SemanticTree.implicitVisitor_=new sre.SemanticVisitor(\"general\",function(a,b){a.type===sre.SemanticAttr.Type.INFIXOP&&a.role===sre.SemanticAttr.Role.MULTIPLICATION&&a.contentNodes.every(function(c){return!c.embellished&&c.textContent===sre.SemanticAttr.invisibleTimes()})&&(a.role=sre.SemanticAttr.Role.IMPLICIT);return!1});\nsre.SemanticTree.unitVisitor_=new sre.SemanticVisitor(\"general\",function(a,b){a.type===sre.SemanticAttr.Type.INFIXOP&&a.role===sre.SemanticAttr.Role.MULTIPLICATION&&(b=a.childNodes,b.length&&(sre.SemanticPred.isPureUnit(b[0])||sre.SemanticPred.isUnitCounter(b[0]))&&a.childNodes.slice(1).every(sre.SemanticPred.isPureUnit)&&(a.role=sre.SemanticAttr.Role.UNIT));return!1});sre.SemanticTree.empty=function(){var a=sre.DomUtil.parseInput(\"<math/>\"),b=new sre.SemanticTree(a);b.mathml=a;return b};\nsre.SemanticTree.fromNode=function(a,b){var c=sre.SemanticTree.empty();c.root=a;b&&(c.mathml=b);return c};sre.SemanticTree.fromRoot=function(a,b){for(;a.parent;)a=a.parent;a=sre.SemanticTree.fromNode(a);b&&(a.mathml=b);return a};sre.SemanticTree.prototype.xml=function(a){var b=sre.DomUtil.parseInput(\"<stree></stree>\");a=this.root.xml(b.ownerDocument,a);b.appendChild(a);return b};sre.SemanticTree.prototype.toString=function(a){return(new sre.SystemExternal.xmldom.XMLSerializer).serializeToString(this.xml(a))};\nsre.SemanticTree.prototype.formatXml=function(a){a=this.toString(a);return sre.DomUtil.formatXml(a)};sre.SemanticTree.prototype.displayTree=function(){this.root.displayTree()};sre.SemanticTree.prototype.replaceNode=function(a,b){var c=a.parent;c?c.replaceChild(a,b):this.root=b};sre.SemanticTree.prototype.toJson=function(){var a={};a.stree=this.root.toJson();return a};sre.Semantic={};sre.Semantic.Font=sre.SemanticAttr.Font;sre.Semantic.Role=sre.SemanticAttr.Role;sre.Semantic.Type=sre.SemanticAttr.Type;sre.Semantic.xmlTree=function(a){return sre.Semantic.getTree(a).xml()};sre.Semantic.getTree=function(a){return new sre.SemanticTree(a)};sre.Semantic.getTreeFromString=function(a){a=sre.DomUtil.parseInput(a);return sre.Semantic.getTree(a)};sre.MathspeakUtil={};sre.MathspeakUtil.spaceoutText=function(a){return a.textContent.split(\"\").join(\" \")};sre.MathspeakUtil.spaceoutNodes=function(a,b){var c=a.textContent.split(\"\"),d=[],e=sre.SemanticProcessor.getInstance();a=a.ownerDocument;for(var f=0,g;g=c[f];f++)g=e.getNodeFactory().makeLeafNode(g,sre.Semantic.Font.UNKNOWN),g=e.identifierNode(g,sre.Semantic.Font.UNKNOWN,\"\"),b(g),d.push(g.xml(a));return d};\nsre.MathspeakUtil.spaceoutNumber=function(a){return sre.MathspeakUtil.spaceoutNodes(a,function(b){b.textContent.match(/\\W/)||(b.type=sre.Semantic.Type.NUMBER)})};sre.MathspeakUtil.spaceoutIdentifier=function(a){return sre.MathspeakUtil.spaceoutNodes(a,function(b){b.font=sre.Semantic.Font.UNKNOWN;b.type=sre.Semantic.Type.IDENTIFIER})};\nsre.MathspeakUtil.nestingBarriers=[sre.Semantic.Type.CASES,sre.Semantic.Type.CELL,sre.Semantic.Type.INTEGRAL,sre.Semantic.Type.LINE,sre.Semantic.Type.MATRIX,sre.Semantic.Type.MULTILINE,sre.Semantic.Type.OVERSCORE,sre.Semantic.Type.ROOT,sre.Semantic.Type.ROW,sre.Semantic.Type.SQRT,sre.Semantic.Type.SUBSCRIPT,sre.Semantic.Type.SUPERSCRIPT,sre.Semantic.Type.TABLE,sre.Semantic.Type.UNDERSCORE,sre.Semantic.Type.VECTOR];sre.MathspeakUtil.nestingDepth={};\nsre.MathspeakUtil.resetNestingDepth=function(a){sre.MathspeakUtil.nestingDepth={};return[a]};\nsre.MathspeakUtil.getNestingDepth=function(a,b,c,d,e,f){d=d||sre.MathspeakUtil.nestingBarriers;e=e||{};f=f||function(h){return!1};var g=(new sre.SystemExternal.xmldom.XMLSerializer).serializeToString(b);sre.MathspeakUtil.nestingDepth[a]||(sre.MathspeakUtil.nestingDepth[a]={});if(sre.MathspeakUtil.nestingDepth[a][g])return sre.MathspeakUtil.nestingDepth[a][g];if(f(b)||0>c.indexOf(b.tagName))return 0;b=sre.MathspeakUtil.computeNestingDepth_(b,c,sre.BaseUtil.setdifference(d,c),e,f,0);return sre.MathspeakUtil.nestingDepth[a][g]=\nb};sre.MathspeakUtil.containsAttr=function(a,b){if(!a.attributes)return!1;a=sre.DomUtil.toArray(a.attributes);for(var c=0,d;d=a[c];c++)if(b[d.nodeName]===d.nodeValue)return!0;return!1};\nsre.MathspeakUtil.computeNestingDepth_=function(a,b,c,d,e,f){if(e(a)||-1<c.indexOf(a.tagName)||sre.MathspeakUtil.containsAttr(a,d))return f;-1<b.indexOf(a.tagName)&&f++;if(!a.childNodes||0===a.childNodes.length)return f;a=sre.DomUtil.toArray(a.childNodes);return Math.max.apply(null,a.map(function(g){return sre.MathspeakUtil.computeNestingDepth_(g,b,c,d,e,f)}))};\nsre.MathspeakUtil.fractionNestingDepth=function(a){return sre.MathspeakUtil.getNestingDepth(\"fraction\",a,[\"fraction\"],sre.MathspeakUtil.nestingBarriers,{},sre.Messages.MS_FUNC.FRAC_NEST_DEPTH)};sre.MathspeakUtil.nestedFraction=function(a,b,c){a=sre.MathspeakUtil.fractionNestingDepth(a);a=Array.apply(null,Array(a)).map(function(d){return b});c&&a.push(c);return a.join(sre.Messages.REGEXP.JOINER_FRAC)};\nsre.MathspeakUtil.openingFractionVerbose=function(a){return sre.MathspeakUtil.nestedFraction(a,sre.Messages.MS.START,sre.Messages.MS.FRAC_V)};sre.MathspeakUtil.closingFractionVerbose=function(a){return sre.MathspeakUtil.nestedFraction(a,sre.Messages.MS.END,sre.Messages.MS.FRAC_V)};sre.MathspeakUtil.overFractionVerbose=function(a){return sre.MathspeakUtil.nestedFraction(a,sre.Messages.MS.FRAC_OVER)};\nsre.MathspeakUtil.openingFractionBrief=function(a){return sre.MathspeakUtil.nestedFraction(a,sre.Messages.MS.START,sre.Messages.MS.FRAC_B)};sre.MathspeakUtil.closingFractionBrief=function(a){return sre.MathspeakUtil.nestedFraction(a,sre.Messages.MS.END,sre.Messages.MS.FRAC_B)};\nsre.MathspeakUtil.openingFractionSbrief=function(a){a=sre.MathspeakUtil.fractionNestingDepth(a);return 1===a?sre.Messages.MS.FRAC_S:sre.Messages.MS_FUNC.COMBINE_NESTED_FRACTION(sre.Messages.MS.NEST_FRAC,sre.Messages.MS_FUNC.RADICAL_NEST_DEPTH(a-1),sre.Messages.MS.FRAC_S)};\nsre.MathspeakUtil.closingFractionSbrief=function(a){a=sre.MathspeakUtil.fractionNestingDepth(a);return 1===a?sre.Messages.MS.ENDFRAC:sre.Messages.MS_FUNC.COMBINE_NESTED_FRACTION(sre.Messages.MS.NEST_FRAC,sre.Messages.MS_FUNC.RADICAL_NEST_DEPTH(a-1),sre.Messages.MS.ENDFRAC)};\nsre.MathspeakUtil.overFractionSbrief=function(a){a=sre.MathspeakUtil.fractionNestingDepth(a);return 1===a?sre.Messages.MS.FRAC_OVER:sre.Messages.MS_FUNC.COMBINE_NESTED_FRACTION(sre.Messages.MS.NEST_FRAC,sre.Messages.MS_FUNC.RADICAL_NEST_DEPTH(a-1),sre.Messages.MS.FRAC_OVER)};sre.MathspeakUtil.isSmallVulgarFraction=function(a){return sre.NumbersUtil.vulgarFractionSmall(a,10,100)?[a]:[]};\nsre.MathspeakUtil.nestedSubSuper=function(a,b,c){for(;a.parentNode;){var d=a.parentNode,e=d.parentNode,f=a.getAttribute&&a.getAttribute(\"role\");if(e.tagName===sre.Semantic.Type.SUBSCRIPT&&a===d.childNodes[1]||e.tagName===sre.Semantic.Type.TENSOR&&f&&(f===sre.Semantic.Role.LEFTSUB||f===sre.Semantic.Role.RIGHTSUB))b=c.sub+sre.Messages.REGEXP.JOINER_SUBSUPER+b;if(e.tagName===sre.Semantic.Type.SUPERSCRIPT&&a===d.childNodes[1]||e.tagName===sre.Semantic.Type.TENSOR&&f&&(f===sre.Semantic.Role.LEFTSUPER||\nf===sre.Semantic.Role.RIGHTSUPER))b=c.sup+sre.Messages.REGEXP.JOINER_SUBSUPER+b;a=e}return b.trim()};sre.MathspeakUtil.subscriptVerbose=function(a){return sre.MathspeakUtil.nestedSubSuper(a,sre.Messages.MS.SUBSCRIPT,{sup:sre.Messages.MS.SUPER,sub:sre.Messages.MS.SUB})};sre.MathspeakUtil.subscriptBrief=function(a){return sre.MathspeakUtil.nestedSubSuper(a,sre.Messages.MS.SUB,{sup:sre.Messages.MS.SUP,sub:sre.Messages.MS.SUB})};\nsre.MathspeakUtil.superscriptVerbose=function(a){return sre.MathspeakUtil.nestedSubSuper(a,sre.Messages.MS.SUPERSCRIPT,{sup:sre.Messages.MS.SUPER,sub:sre.Messages.MS.SUB})};sre.MathspeakUtil.superscriptBrief=function(a){return sre.MathspeakUtil.nestedSubSuper(a,sre.Messages.MS.SUP,{sup:sre.Messages.MS.SUP,sub:sre.Messages.MS.SUB})};\nsre.MathspeakUtil.baselineVerbose=function(a){return(a=sre.MathspeakUtil.nestedSubSuper(a,\"\",{sup:sre.Messages.MS.SUPER,sub:sre.Messages.MS.SUB}))?a.replace(new RegExp(sre.Messages.MS.SUB+\"$\"),sre.Messages.MS.SUBSCRIPT).replace(new RegExp(sre.Messages.MS.SUPER+\"$\"),sre.Messages.MS.SUPERSCRIPT):sre.Messages.MS.BASELINE};sre.MathspeakUtil.baselineBrief=function(a){return sre.MathspeakUtil.nestedSubSuper(a,\"\",{sup:sre.Messages.MS.SUP,sub:sre.Messages.MS.SUB})||sre.Messages.MS.BASE};\nsre.MathspeakUtil.radicalNestingDepth=function(a){return sre.MathspeakUtil.getNestingDepth(\"radical\",a,[\"sqrt\",\"root\"],sre.MathspeakUtil.nestingBarriers,{})};sre.MathspeakUtil.nestedRadical=function(a,b,c){var d=sre.MathspeakUtil.radicalNestingDepth(a);c=(a=sre.MathspeakUtil.getRootIndex(a))?sre.Messages.MS_FUNC.COMBINE_ROOT_INDEX(c,a):c;return 1===d?c:sre.Messages.MS_FUNC.COMBINE_NESTED_RADICAL(b,sre.Messages.MS_FUNC.RADICAL_NEST_DEPTH(d-1),c)};\nsre.MathspeakUtil.getRootIndex=function(a){a=\"sqrt\"===a.tagName?\"2\":sre.XpathUtil.evalXPath(\"children/*[1]\",a)[0].textContent.trim();return sre.Messages.MS_ROOT_INDEX[a]||\"\"};sre.MathspeakUtil.openingRadicalVerbose=function(a){return sre.MathspeakUtil.nestedRadical(a,sre.Messages.MS.NESTED,sre.Messages.MS.STARTROOT)};sre.MathspeakUtil.closingRadicalVerbose=function(a){return sre.MathspeakUtil.nestedRadical(a,sre.Messages.MS.NESTED,sre.Messages.MS.ENDROOT)};\nsre.MathspeakUtil.indexRadicalVerbose=function(a){return sre.MathspeakUtil.nestedRadical(a,sre.Messages.MS.NESTED,sre.Messages.MS.ROOTINDEX)};sre.MathspeakUtil.openingRadicalBrief=function(a){return sre.MathspeakUtil.nestedRadical(a,sre.Messages.MS.NEST_ROOT,sre.Messages.MS.STARTROOT)};sre.MathspeakUtil.closingRadicalBrief=function(a){return sre.MathspeakUtil.nestedRadical(a,sre.Messages.MS.NEST_ROOT,sre.Messages.MS.ENDROOT)};\nsre.MathspeakUtil.indexRadicalBrief=function(a){return sre.MathspeakUtil.nestedRadical(a,sre.Messages.MS.NEST_ROOT,sre.Messages.MS.ROOTINDEX)};sre.MathspeakUtil.openingRadicalSbrief=function(a){return sre.MathspeakUtil.nestedRadical(a,sre.Messages.MS.NEST_ROOT,sre.Messages.MS.ROOT)};sre.MathspeakUtil.indexRadicalSbrief=function(a){return sre.MathspeakUtil.nestedRadical(a,sre.Messages.MS.NEST_ROOT,sre.Messages.MS.INDEX)};\nsre.MathspeakUtil.underscoreNestingDepth=function(a){return sre.MathspeakUtil.getNestingDepth(\"underscore\",a,[\"underscore\"],sre.MathspeakUtil.nestingBarriers,{},function(b){return b.tagName&&b.tagName===sre.Semantic.Type.UNDERSCORE&&b.childNodes[0].childNodes[1].getAttribute(\"role\")===sre.Semantic.Role.UNDERACCENT})};sre.MathspeakUtil.nestedUnderscore=function(a){a=sre.MathspeakUtil.underscoreNestingDepth(a);return Array(a).join(sre.Messages.MS.UNDER)+sre.Messages.MS.UNDERSCRIPT};\nsre.MathspeakUtil.overscoreNestingDepth=function(a){return sre.MathspeakUtil.getNestingDepth(\"overscore\",a,[\"overscore\"],sre.MathspeakUtil.nestingBarriers,{},function(b){return b.tagName&&b.tagName===sre.Semantic.Type.OVERSCORE&&b.childNodes[0].childNodes[1].getAttribute(\"role\")===sre.Semantic.Role.OVERACCENT})};sre.MathspeakUtil.nestedOverscore=function(a){a=sre.MathspeakUtil.overscoreNestingDepth(a);return Array(a).join(sre.Messages.MS.OVER)+sre.Messages.MS.OVERSCRIPT};\nsre.MathspeakUtil.determinantIsSimple=function(a){if(a.tagName!==sre.Semantic.Type.MATRIX||a.getAttribute(\"role\")!==sre.Semantic.Role.DETERMINANT)return[];for(var b=sre.XpathUtil.evalXPath(\"children/row/children/cell/children/*\",a),c=0,d;d=b[c];c++)if(d.tagName!==sre.Semantic.Type.NUMBER){if(d.tagName===sre.Semantic.Type.IDENTIFIER&&(d=d.getAttribute(\"role\"),d===sre.Semantic.Role.LATINLETTER||d===sre.Semantic.Role.GREEKLETTER||d===sre.Semantic.Role.OTHERLETTER))continue;return[]}return[a]};\nsre.MathspeakUtil.generateBaselineConstraint=function(){var a=function(g){return g.map(function(h){return\"ancestor::\"+h})},b=\"not(\"+a([\"subscript\",\"superscript\",\"tensor\"]).join(\" or \")+\")\",c=a([\"relseq\",\"multrel\"]);a=a([\"fraction\",\"punctuation\",\"fenced\",\"sqrt\",\"root\"]);for(var d=[],e=0,f;f=a[e];e++)d=d.concat(c.map(function(g){return f+\"/\"+g}));c=\"not(\"+d.join(\" | \")+\")\";return[\"ancestor::*/following-sibling::*\",b,c].join(\" and \")};\nsre.MathspeakUtil.removeParens=function(a){if(!a.childNodes.length||!a.childNodes[0].childNodes.length||!a.childNodes[0].childNodes[0].childNodes.length)return\"\";a=a.childNodes[0].childNodes[0].childNodes[0].textContent;return a.match(/^\\(.+\\)$/)?a.slice(1,-1):a};sre.MathspeakUtil.componentString_={3:\"CSFleftsuperscript\",4:\"CSFleftsubscript\",2:\"CSFbaseline\",1:\"CSFrightsubscript\",0:\"CSFrightsuperscript\"};sre.MathspeakUtil.childNumber_={4:2,3:3,2:1,1:4,0:5};\nsre.MathspeakUtil.generateTensorRuleStrings_=function(a){var b=[],c=\"\",d=\"\";a=parseInt(a,2);for(var e=0;5>e;e++){var f=\"children/*[\"+sre.MathspeakUtil.childNumber_[e]+\"]\";if(a&1){var g=sre.MathspeakUtil.componentString_[e%5];c=\"[t] \"+g+\"Verbose; [n] \"+f+\";\"+c;d=\"[t] \"+g+\"Brief; [n] \"+f+\";\"+d}else b.unshift(\"name(\"+f+')=\"empty\"');a>>=1}b.push(c);b.push(d);return b};\nsre.MathspeakUtil.generateTensorRules=function(a){var b=goog.bind(a.defineRule,a),c=goog.bind(a.defineRulesAlias,a);a=goog.bind(a.defineSpecialisedRule,a);for(var d=\"11111 11110 11101 11100 10111 10110 10101 10100 01111 01110 01101 01100\".split(\" \"),e=0,f;f=d[e];e++){var g=\"tensor\"+f;f=sre.MathspeakUtil.generateTensorRuleStrings_(f);var h=f.pop(),k=f.pop(),l=[g,\"default\",k,\"self::tensor\"].concat(f),m=[g,\"brief\",h,\"self::tensor\"].concat(f);b.apply(null,l);b.apply(null,m);a(g,\"brief\",\"sbrief\");l=sre.MathspeakUtil.componentString_[2];\nk+=\"; [t]\"+l+\"Verbose\";h+=\"; [t]\"+l+\"Brief\";g+=\"-baseline\";l=[g,\"default\",k,\"self::tensor\",\"following-sibling::*\"].concat(f);m=[g,\"brief\",h,\"self::tensor\",\"following-sibling::*\"].concat(f);b.apply(null,l);b.apply(null,m);a(g,\"brief\",\"sbrief\");g=[g,\"self::tensor\",\"not(following-sibling::*)\",\"ancestor::fraction|ancestor::punctuated|ancestor::fenced|ancestor::root|ancestor::sqrt|ancestor::relseq|ancestor::multirel|@embellished\"].concat(f);c.apply(null,g)}};sre.Locale={};sre.Locale.nestingToString=function(a){switch(a){case 1:return sre.Messages.MS.ONCE||\"\";case 2:return sre.Messages.MS.TWICE;default:return a.toString()}};sre.Locale.vulgarNestingDepth=function(a){return!!sre.MathspeakUtil.isSmallVulgarFraction(a).length};sre.Locale.combinePostfixIndex=function(a,b){return a===sre.Messages.MS.ROOTINDEX||a===sre.Messages.MS.INDEX?a:a+\" \"+b};sre.Locale.localFont=function(a){var b=sre.Messages.FONT[a];void 0===b&&(b=a||\"\");return\"string\"===typeof b?b:b[0]};\nsre.Grammar.getInstance().setCorrection(\"localFont\",sre.Locale.localFont);sre.Locale.localRole=function(a){return sre.Messages.ROLE[a]||a};sre.Grammar.getInstance().setCorrection(\"localRole\",sre.Locale.localRole);sre.Locale.localEnclose=function(a){return sre.Messages.ENCLOSE[a]||a};sre.Grammar.getInstance().setCorrection(\"localEnclose\",sre.Locale.localEnclose);sre.Locale.makePlural=function(a){var b=sre.Messages.PLURAL_UNIT[a];return b?b:sre.Messages.PLURAL(a)};\nsre.Grammar.getInstance().setCorrection(\"plural\",sre.Locale.makePlural);sre.Locale.prefixCombiner=function(a,b,c){a=c?c+\" \"+a:a;return b?b+\" \"+a:a};sre.Locale.postfixCombiner=function(a,b,c){a=c?c+\" \"+a:a;return b?a+\" \"+b:a};sre.Numbers.de={};sre.Numbers.de.onesNumbers_=\" eins zwei drei vier f\\u00fcnf sechs sieben acht neun zehn elf zw\\u00f6lf dreizehn vierzehn f\\u00fcnfzehn sechzehn siebzehn achtzehn neunzehn\".split(\" \");sre.Numbers.de.tensNumbers_=\"  zwanzig drei\\u00dfig vierzig f\\u00fcnfzig sechzig siebzig achtzig neunzig\".split(\" \");sre.Numbers.de.largeNumbers_=\" tausend million milliarde billion billiarde trillion trilliard quadrillion quadrilliard quintillion quintilliarde sextillion sextilliarde\".split(\" \");\nsre.Numbers.de.onePrefix_=function(a){return a===sre.Numbers.de.onesNumbers_[1]?\"ein\":a};sre.Numbers.de.hundredsToWords_=function(a){a%=1E3;var b=sre.Numbers.de.onesNumbers_[Math.floor(a/100)];var c=b?sre.Numbers.de.onePrefix_(b)+\"hundert\":\"\";if(a%=100)if(c+=c?sre.Numbers.de.NUMBERS.numSep:\"\",b=sre.Numbers.de.onesNumbers_[a])c+=b;else{var d=sre.Numbers.de.tensNumbers_[Math.floor(a/10)];b=sre.Numbers.de.onesNumbers_[a%10];c+=b?sre.Numbers.de.onePrefix_(b)+\"und\"+d:d}return c};\nsre.Numbers.de.numberToWords=function(a){if(a>=Math.pow(10,36))return a.toString();for(var b=0,c=\"\";0<a;){if(a%1E3){var d=sre.Numbers.de.hundredsToWords_(a%1E3);c=sre.Numbers.de.onePrefix_(d)+(b?sre.Numbers.de.largeNumbers_[b]:\"\")+c}a=Math.floor(a/1E3);b++}return c.replace(/ein$/,\"eins\")};sre.Numbers.de.numberToOrdinal=function(a,b){return 1===a?\"eintel\":2===a?b?\"halbe\":\"halb\":sre.Numbers.de.wordOrdinal(a)+\"l\"};\nsre.Numbers.de.wordOrdinal=function(a){return 1===a?\"erste\":3===a?\"dritte\":7===a?\"siebte\":8===a?\"achte\":sre.Numbers.de.numberToWords(a)+(19>a?\"te\":\"ste\")};sre.Numbers.de.simpleOrdinal=function(a){return a.toString()+\".\"};sre.Numbers.de.NUMBERS={wordOrdinal:sre.Numbers.de.wordOrdinal,simpleOrdinal:sre.Numbers.de.simpleOrdinal,numberToWords:sre.Numbers.de.numberToWords,numberToOrdinal:sre.Numbers.de.numberToOrdinal,vulgarSep:\" \",numSep:\"\"};var germanPrefixCombiner=function(a,b,c){\"s\"===c&&(b=b.split(\" \").map(function(d){return d.replace(/s$/,\"\")}).join(\" \"),c=\"\");a=c?c+\" \"+a:a;return b?b+\" \"+a:a},germanPostfixCombiner=function(a,b,c){a=c&&\"s\"!==c?c+\" \"+a:a;return b?a+\" \"+b:a};\nsre.Locale.de={MS:{START:\"Anfang\",FRAC_V:\"Bruch\",FRAC_B:\"Bruch\",FRAC_S:\"Bruch\",END:\"Ende\",FRAC_OVER:\"durch\",TWICE:\"Twice\",NEST_FRAC:\"geschachtelt\",ENDFRAC:\"Ende Bruch\",SUPER:\"hoch\",SUB:\"Index\",SUP:\"hoch\",SUPERSCRIPT:\"hoch\",SUBSCRIPT:\"Index\",BASELINE:\"Grundlinie\",BASE:\"Grund\",NESTED:\"geschachtelte\",NEST_ROOT:\"geschachtelte\",STARTROOT:\"Anfang Wurzel\",ENDROOT:\"Ende Wurzel\",ROOTINDEX:\"Wurzelexponent\",ROOT:\"Wurzel\",INDEX:\"Exponent\",UNDER:\"Unter\",UNDERSCRIPT:\"Unterschrift\",OVER:\"\\u00dcber\",OVERSCRIPT:\"\\u00dcberschrift\"},\nMS_FUNC:{FRAC_NEST_DEPTH:sre.Locale.vulgarNestingDepth,RADICAL_NEST_DEPTH:function(a){return 1<a?sre.Numbers.de.NUMBERS.numberToWords(a)+\"fach\":\"\"},COMBINE_ROOT_INDEX:function(a,b){return a.replace(\"Wurzel\",b?b+\"wurzel\":\"\")},COMBINE_NESTED_FRACTION:function(a,b,c){return a+b+c},COMBINE_NESTED_RADICAL:function(a,b,c){a=c.match(/exponent$/)?a+\"r\":a;a=(b?b+\" \":\"\")+a;return c.match(/ /)?c.replace(/ /,\" \"+a+\" \"):a+\" \"+c},FONT_REGEXP:function(a){a=a.split(\" \").map(function(b){return b.replace(/s$/,\"(|s)\")}).join(\" \");\nreturn new RegExp(\"((^\"+a+\" )|( \"+a+\"$))\")}},MS_ROOT_INDEX:{2:\"Quadrat\",3:\"Kubik\"},FONT:{bold:\"fettes\",\"bold-fraktur\":\"fettes Fraktur\",\"bold-italic\":\"fettkursives\",\"bold-script\":\"fettes Schreibschrift\",caligraphic:\"kalligrafisches\",\"caligraphic-bold\":\"fettes kalligrafisches\",\"double-struck\":[\"mit Doppelstrich\",germanPostfixCombiner],\"double-struck-italic\":[\"kursiv mit Doppelstrich\",germanPostfixCombiner],fraktur:\"Fraktur\",fullwidth:\"vollbreites\",italic:\"kursives\",monospace:\"nichtproportionales\",normal:\"normales\",\noldstyle:\"antiquiertes\",\"oldstyle-bold\":\"antiquiertes fettes\",script:\"Schreibschrift\",\"sans-serif\":\"serifenloses\",\"sans-serif-italic\":\"serifenloses kursives\",\"sans-serif-bold\":\"serifenloses fettes\",\"sans-serif-bold-italic\":\"serifenloses fettkursives\",unknown:\"unbekannt\"},EMBELLISH:{\"super\":\"hoch\",sub:\"Index\",circled:\"eingekreistes\",parenthesized:\"eingeklammertes\",period:[\"Punkt\",germanPostfixCombiner],\"negative-circled\":\"schwarz eingekreistes\",\"double-circled\":\"doppelt eingekreistes\",\"circled-sans-serif\":\"eingekreistes serifenloses\",\n\"negative-circled-sans-serif\":\"schwarz eingekreistes serifenloses\",comma:[\"Komma\",germanPostfixCombiner],squared:\"umrahmtes\",\"negative-squared\":\"schwarz umrahmtes\"},ROLE:{addition:\"Addition\",multiplication:\"Multiplikation\",subtraction:\"Subtraktion\",division:\"Division\",equality:\"Gleichung\",inequality:\"Ungleichung\",element:\"Element\",arrow:\"Pfeil\",determinant:\"Determinante\",rowvector:\"Zeilenvektor\",binomial:\"Binomialkoeffizient\",squarematrix:\"quadratische Matrize\",multiline:\"mehrzeiligem Ausdruck\",matrix:\"Matrize\",\nvector:\"Vektor\",cases:\"Fallunterscheidung\",table:\"Tabelle\",unknown:\"unbekannt\"},ENCLOSE:{longdiv:\"langer Bruchstrich\",actuarial:\"Bilanzsumme\",radical:\"Quadratwurzel\",box:\"rechteckige Umrandung\",roundedbox:\"abgerundete rechteckige Umrandung\",circle:\"kreis\\u00e4hnliche Umrandung\",left:\"senkrechte Linie links\",right:\"senkrechte Linie rechts\",top:\"waagerechte Linie oberhalb\",bottom:\"waagerechte Linie unterhalb\",updiagonalstrike:\"durchgestrichen\",downdiagonalstrike:\"durchgestrichen\",verticalstrike:\"senkrecht durchgestrichen\",\nhorizontalstrike:\"durchgestrichen\",madruwb:\"arabisches Fakult\\u00e4tssymbol\",updiagonalarrow:\"Pfeil von links unten nach rechts oben\",phasorangle:\"phasor angle\",unknown:\"langer Bruchstrich\"},NAVIGATE:{COLLAPSIBLE:\"kollabierbar\",EXPANDABLE:\"ausfaltbar\",LEVEL:\"Niveau\"},REGEXP:{TEXT:\"a-zA-Z\\u00e4\\u00f6\\u00fc\\u00c4\\u00d6\\u00dc\\u00df\",NUMBER:\"((\\\\d{1,3})(?=(.| ))((.| )\\\\d{3})*(\\\\,\\\\d+)?)|^\\\\d*\\\\,\\\\d+|^\\\\d+\",DECIMAL_MARK:\",\",DIGIT_GROUP:\"\\\\.\",JOINER_SUBSUPER:\" \",JOINER_FRAC:\" \"},PLURAL_UNIT:{Meile:\"Meilen\",\nYard:\"Yards\",Joule:\"Joules\",Gallone:\"Gallonen\",Unze:\"Unzen\",Tonne:\"Tonnen\",Minute:\"Minuten\",Stunde:\"Stunden\",Sekunde:\"Sekunden\"},PLURAL:function(a){return a.match(/(B|b)yte$/)?a.replace(/yte$/,\"ytes\"):a},NUMBERS:sre.Numbers.de.NUMBERS,ALPHABETS:{latinSmall:\"abcdefghijklmnopqrstuvwxyz\".split(\"\"),latinCap:\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\"),greekSmall:\"nabla;alpha;beta;gamma;delta;epsilon;zeta;eta;theta;iota;kappa;lambda;my;ny;xi;omikron;pi;rho;abschlie\\u00dfendes sigma;sigma;tau;ypsilon;phi;chi;psi;omega;partielle Ableitung;epsilon;theta;kappa;phi;rho;pi\".split(\";\"),\ngreekCap:\"Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lambda My Ny Xi Omikron Pi Rho Theta Sigma Tau Ypsilon Phi Chi Psi Omega\".split(\" \")},ALPHABET_TRANSFORMERS:{digit:{default:function(a){return 0===a?\"null\":sre.Numbers.de.numberToWords(a)},mathspeak:function(a){return a.toString()},clearspeak:function(a){return a.toString()}},letter:{default:function(a){return a}}},ALPHABET_PREFIXES:{capPrefix:{default:\"gro\\u00dfes\"},smallPrefix:{default:\"\"},digitPrefix:{default:\"s\"}},ALPHABET_COMBINER:germanPrefixCombiner};\nsre.Grammar.getInstance().setCorrection(\"correctOne\",function(a){return a.replace(/^eins /,\"ein \")});sre.Grammar.getInstance().setCorrection(\"localFontNumber\",function(a){var b=sre.Messages.FONT[a];void 0===b&&(b=a||\"\");b=\"string\"===typeof b?b:b[0];return b.split(\" \").map(function(c){return c.replace(/s$/,\"\")}).join(\" \")});sre.Grammar.getInstance().setCorrection(\"lowercase\",function(a){return a.toLowerCase()});\nsre.Grammar.getInstance().setCorrection(\"article\",function(a){return\"dative\"===sre.Grammar.getInstance().getParameter(\"case\")?{der:\"dem\",die:\"der\",das:\"dem\"}[a]:a});sre.Grammar.getInstance().setCorrection(\"masculine\",function(a){return\"dative\"===sre.Grammar.getInstance().getParameter(\"case\")?a+\"n\":a});sre.Numbers.en={};sre.Numbers.en.onesNumbers_=\" one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen\".split(\" \");sre.Numbers.en.tensNumbers_=\"  twenty thirty forty fifty sixty seventy eighty ninety\".split(\" \");sre.Numbers.en.largeNumbers_=\" thousand million billion trillion quadrillion quintillion sextillion septillion octillion nonillion decillion\".split(\" \");\nsre.Numbers.en.hundredsToWords_=function(a){a%=1E3;var b=sre.Numbers.en.onesNumbers_[Math.floor(a/100)]?sre.Numbers.en.onesNumbers_[Math.floor(a/100)]+sre.Numbers.en.NUMBERS.numSep+\"hundred\":\"\";if(a%=100)b+=b?sre.Numbers.en.NUMBERS.numSep:\"\",b+=sre.Numbers.en.onesNumbers_[a]||sre.Numbers.en.tensNumbers_[Math.floor(a/10)]+(a%10?sre.Numbers.en.NUMBERS.numSep+sre.Numbers.en.onesNumbers_[a%10]:\"\");return b};\nsre.Numbers.en.numberToWords=function(a){if(a>=Math.pow(10,36))return a.toString();for(var b=0,c=\"\";0<a;)a%1E3&&(c=sre.Numbers.en.hundredsToWords_(a%1E3)+(b?\"-\"+sre.Numbers.en.largeNumbers_[b]+\"-\":\"\")+c),a=Math.floor(a/1E3),b++;return c.replace(/-$/,\"\")};sre.Numbers.en.numberToOrdinal=function(a,b){if(1===a)return b?\"oneths\":\"oneth\";if(2===a)return b?\"halves\":\"half\";a=sre.Numbers.en.wordOrdinal(a);return b?a+\"s\":a};\nsre.Numbers.en.wordOrdinal=function(a){a=sre.Numbers.en.numberToWords(a);return a=a.match(/one$/)?a.slice(0,-3)+\"first\":a.match(/two$/)?a.slice(0,-3)+\"second\":a.match(/three$/)?a.slice(0,-5)+\"third\":a.match(/five$/)?a.slice(0,-4)+\"fifth\":a.match(/eight$/)?a.slice(0,-5)+\"eighth\":a.match(/nine$/)?a.slice(0,-4)+\"ninth\":a.match(/twelve$/)?a.slice(0,-6)+\"twelfth\":a.match(/ty$/)?a.slice(0,-2)+\"tieth\":a+\"th\"};\nsre.Numbers.en.simpleOrdinal=function(a){var b=a%100,c=a.toString();if(10<b&&20>b)return c+\"th\";switch(a%10){case 1:return c+\"st\";case 2:return c+\"nd\";case 3:return c+\"rd\";default:return c+\"th\"}};sre.Numbers.en.NUMBERS={wordOrdinal:sre.Numbers.en.wordOrdinal,simpleOrdinal:sre.Numbers.en.simpleOrdinal,numberToWords:sre.Numbers.en.numberToWords,numberToOrdinal:sre.Numbers.en.numberToOrdinal,vulgarSep:\" \",numSep:\" \"};sre.Locale.en={MS:{START:\"Start\",FRAC_V:\"Fraction\",FRAC_B:\"Frac\",FRAC_S:\"Frac\",END:\"End\",FRAC_OVER:\"Over\",TWICE:\"Twice\",NEST_FRAC:\"Nest\",ENDFRAC:\"EndFrac\",SUPER:\"Super\",SUB:\"Sub\",SUP:\"Sup\",SUPERSCRIPT:\"Superscript\",SUBSCRIPT:\"Subscript\",BASELINE:\"Baseline\",BASE:\"Base\",NESTED:\"Nested\",NEST_ROOT:\"Nest\",STARTROOT:\"StartRoot\",ENDROOT:\"EndRoot\",ROOTINDEX:\"RootIndex\",ROOT:\"Root\",INDEX:\"Index\",UNDER:\"Under\",UNDERSCRIPT:\"Underscript\",OVER:\"Over\",OVERSCRIPT:\"Overscript\"},MS_FUNC:{FRAC_NEST_DEPTH:sre.Locale.vulgarNestingDepth,\nRADICAL_NEST_DEPTH:sre.Locale.nestingToString,COMBINE_ROOT_INDEX:function(a,b){return a},COMBINE_NESTED_FRACTION:function(a,b,c){return a+b+c},COMBINE_NESTED_RADICAL:function(a,b,c){return a+b+c},FONT_REGEXP:function(a){return new RegExp(\"^\"+a.split(/ |-/).join(\"( |-)\")+\"( |-)\")}},MS_ROOT_INDEX:{},FONT:{bold:\"bold\",\"bold-fraktur\":\"bold fraktur\",\"bold-italic\":\"bold italic\",\"bold-script\":\"bold script\",caligraphic:\"calligraphic\",\"caligraphic-bold\":\"calligraphic bold\",\"double-struck\":\"double struck\",\n\"double-struck-italic\":\"double struck italic\",fraktur:\"fraktur\",fullwidth:\"fullwidth\",italic:\"italic\",monospace:\"monospace\",normal:\"normal\",oldstyle:\"oldstyle\",\"oldstyle-bold\":\"oldstyle bold\",script:\"script\",\"sans-serif\":\"sans serif\",\"sans-serif-italic\":\"sans serif italic\",\"sans-serif-bold\":\"sans serif bold\",\"sans-serif-bold-italic\":\"sans serif bold italic\",unknown:\"unknown\"},EMBELLISH:{\"super\":\"super\",sub:\"sub\",circled:\"circled\",parenthesized:\"parenthesized\",period:[\"period\",sre.Locale.postfixCombiner],\n\"negative-circled\":\"black circled\",\"double-circled\":\"double circled\",\"circled-sans-serif\":\"circled sans serif\",\"negative-circled-sans-serif\":\"black circled sans serif\",comma:[\"comma\",sre.Locale.postfixCombiner],squared:\"squared\",\"negative-squared\":\"black squared\"},ROLE:{addition:\"addition\",multiplication:\"multiplication\",subtraction:\"subtraction\",division:\"division\",equality:\"equality\",inequality:\"inequality\",element:\"element\",arrow:\"arrow\",determinant:\"determinant\",rowvector:\"row vector\",binomial:\"binomial\",\nsquarematrix:\"square matrix\",multiline:\"multiple lines\",matrix:\"matrix\",vector:\"vector\",cases:\"case statement\",table:\"table\",unknown:\"unknown\"},ENCLOSE:{longdiv:\"long division\",actuarial:\"actuarial symbol\",radical:\"square root\",box:\"box\",roundedbox:\"rounded box\",circle:\"circle\",left:\"left vertical-line\",right:\"right vertical-line\",top:\"overbar\",bottom:\"underbar\",updiagonalstrike:\"crossout\",downdiagonalstrike:\"crossout\",verticalstrike:\"vertical strikeout\",horizontalstrike:\"crossout\",madruwb:\"Arabic factorial symbol\",\nupdiagonalarrow:\"diagonal arrow\",phasorangle:\"phasor angle\",unknown:\"long division\"},NAVIGATE:{COLLAPSIBLE:\"collapsible\",EXPANDABLE:\"expandable\",LEVEL:\"Level\"},REGEXP:{TEXT:\"a-zA-Z\",NUMBER:\"((\\\\d{1,3})(?=(,| ))((,| )\\\\d{3})*(\\\\.\\\\d+)?)|^\\\\d*\\\\.\\\\d+|^\\\\d+\",DECIMAL_MARK:\"\\\\.\",DIGIT_GROUP:\",\",JOINER_SUBSUPER:\" \",JOINER_FRAC:\"\"},PLURAL_UNIT:{foot:\"feet\",inch:\"inches\",\"square foot\":\"square feet\",\"square inch\":\"square inches\",\"cubic foot\":\"cubic feet\",\"cubic inch\":\"cubic inches\"},NUMBERS:sre.Numbers.en.NUMBERS,\nALPHABETS:{latinSmall:\"abcdefghijklmnopqrstuvwxyz\".split(\"\"),latinCap:\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\"),greekSmall:\"nabla;alpha;beta;gamma;delta;epsilon;zeta;eta;theta;iota;kappa;lamda;mu;nu;xi;omicron;pi;rho;final sigma;sigma;tau;upsilon;phi;chi;psi;omega;partial differential;epsilon;theta;kappa;phi;rho;pi\".split(\";\"),greekCap:\"Alpha Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lamda Mu Nu Xi Omicron Pi Rho Theta Sigma Tau Upsilon Phi Chi Psi Omega\".split(\" \")},ALPHABET_TRANSFORMERS:{digit:{default:function(a){return 0===\na?\"zero\":sre.Numbers.en.numberToWords(a)},mathspeak:function(a){return a.toString()},clearspeak:function(a){return a.toString()}},letter:{default:function(a){return a}}},ALPHABET_PREFIXES:{capPrefix:{default:\"cap\",mathspeak:\"upper\"},smallPrefix:{default:\"\"},digitPrefix:{default:\"\"}},ALPHABET_COMBINER:sre.Locale.prefixCombiner};sre.Numbers.es={};sre.Numbers.es.onesNumbers_=\" uno dos tres cuatro cinco seis siete ocho nueve diez once doce trece catorce quince diecis\\u00e9is diecisiete dieciocho diecinueve veinte veintiuno veintid\\u00f3s veintitr\\u00e9s veinticuatro veinticinco veintis\\u00e9is veintisiete veintiocho veintinueve\".split(\" \");sre.Numbers.es.tensNumbers_=\"   treinta cuarenta cincuenta sesenta setenta ochenta noventa\".split(\" \");sre.Numbers.es.hundredsNumbers_=\" cien doscientos trescientos cuatrocientos quinientos seiscientos setecientos ochocientos novecientos\".split(\" \");\nsre.Numbers.es.largeNumbers_=\";mil;mill\\u00f3n;mil mill\\u00f3nes;bill\\u00f3n;mil bill\\u00f3nes;trill\\u00f3n;mil trill\\u00f3nes;cuatrill\\u00f3;mil cuatrill\\u00f3es;quintill\\u00f3n;mil quintill\\u00f3nes;sextill\\u00f3n;mil sextill\\u00f3nes;septill\\u00f3n;mil septill\\u00f3nes;octill\\u00f3n;mil octill\\u00f3nes;nonill\\u00f3n;mil nonill\\u00f3nes;decill\\u00f3n;mil decill\\u00f3nes\".split(\";\");\nsre.Numbers.es.tensToWords_=function(a){var b=a%100;if(30>b)return sre.Numbers.es.onesNumbers_[b];a=sre.Numbers.es.tensNumbers_[Math.floor(b/10)];b=sre.Numbers.es.onesNumbers_[b%10];return a&&b?a+\" y \"+b:a||b};sre.Numbers.es.hundredsToWords_=function(a){var b=a%1E3;a=Math.floor(b/100);var c=sre.Numbers.es.hundredsNumbers_[a];b=sre.Numbers.es.tensToWords_(b%100);return 1===a?b?c+\"to \"+b:c:c&&b?c+\" \"+b:c||b};\nsre.Numbers.es.numberToWords=function(a){if(a>=Math.pow(10,36))return a.toString();for(var b=0,c=\"\";0<a;){var d=a%1E3;if(d){var e=sre.Numbers.es.largeNumbers_[b],f=sre.Numbers.es.hundredsToWords_(d);b?1===d?(e=e.match(\"/^mil( |$)/\")?e:\"un \"+e,c=e+(c?\" \"+c:\"\")):(e=e.replace(/\\u00f3n$/,\"ones\"),c=sre.Numbers.es.hundredsToWords_(d)+\" \"+e+(c?\" \"+c:\"\")):c=f}a=Math.floor(a/1E3);b++}return c};sre.Numbers.es.onesOrdinals_=\"primera segunda tercera cuarta quinta sexta s\\u00e9ptima octava novena d\\u00e9cima und\\u00e9cima duod\\u00e9cima\".split(\" \");\nsre.Numbers.es.tensOrdinals_=\"d\\u00e9cima vig\\u00e9sima trig\\u00e9sima cuadrag\\u00e9sima quincuag\\u00e9sima sexag\\u00e9sima septuag\\u00e9sima octog\\u00e9sima nonag\\u00e9sima\".split(\" \");sre.Numbers.es.hundredsOrdinals_=\"cent\\u00e9sima ducent\\u00e9sima tricent\\u00e9sima cuadringent\\u00e9sima quingent\\u00e9sima sexcent\\u00e9sima septingent\\u00e9sima octingent\\u00e9sima noningent\\u00e9sima\".split(\" \");\nsre.Numbers.es.numberToOrdinal=function(a,b){if(1999<a)return a.toString()+\"a\";if(12>=a)return sre.Numbers.es.onesOrdinals_[a-1];b=[];1E3<=a&&(a-=1E3,b.push(\"mil\\u00e9sima\"));if(!a)return b.join(\" \");var c=Math.floor(a/100);0<c&&(b.push(sre.Numbers.es.hundredsOrdinals_[c-1]),a%=100);12>=a?b.push(sre.Numbers.es.onesOrdinals_[a-1]):(c=Math.floor(a/10),0<c&&(b.push(sre.Numbers.es.tensOrdinals_[c-1]),a%=10),0<a&&b.push(sre.Numbers.es.onesOrdinals_[a-1]));return b.join(\" \")};\nsre.Numbers.es.simpleOrdinal=function(a){var b=sre.Grammar.getInstance().getParameter(\"gender\");return a.toString()+(\"female\"===b?\"a\":\"o\")};sre.Numbers.es.NUMBERS={simpleOrdinal:sre.Numbers.es.simpleOrdinal,numberToWords:sre.Numbers.es.numberToWords,numberToOrdinal:sre.Numbers.es.numberToOrdinal,vulgarSep:\"-\"};var sansserifCombiner=function(a,b,c){a=\"sans serif \"+(c?c+\" \"+a:a);return b?a+\" \"+b:a};\nsre.Locale.es={MS:{START:\"empezar\",FRAC_V:\"fracci\\u00f3n\",FRAC_B:\"frac\",FRAC_S:\"frac\",END:\"finalizar\",FRAC_OVER:\"entre\",TWICE:\"\",NEST_FRAC:\"\",ENDFRAC:\"\",SUPER:\"super\",SUB:\"sub\",SUP:\"sup\",SUPERSCRIPT:\"super\\u00edndice\",SUBSCRIPT:\"sub\\u00edndice\",BASELINE:\"l\\u00ednea base\",BASE:\"\",NESTED:\"\",NEST_ROOT:\"\",STARTROOT:\"empezar ra\\u00edz\",ENDROOT:\"finalizar ra\\u00edz\",ROOTINDEX:\"\\u00edndice de ra\\u00edz\",ROOT:\"ra\\u00edz\",INDEX:\"\",UNDER:\"bajo\",UNDERSCRIPT:\"bajo\\u00edndice\",OVER:\"sobre\",OVERSCRIPT:\"sobre\\u00edndice\"},\nMS_FUNC:{FRAC_NEST_DEPTH:function(a){return!1},RADICAL_NEST_DEPTH:function(a){return\"\"},COMBINE_ROOT_INDEX:sre.Locale.combinePostfixIndex,COMBINE_NESTED_FRACTION:function(a,b,c){return a+b+c},COMBINE_NESTED_RADICAL:function(a,b,c){return a+c},FONT_REGEXP:function(a){return RegExp(\"^\"+a+\" \")}},MS_ROOT_INDEX:{2:\"cuadrada\",3:\"c\\u00fabica\",4:\"a la cuarta\",5:\"a la quinta\",6:\"a la sexta\",7:\"a la s\\u00e9ptima\",8:\"a la octava\",9:\"a la novena\",10:\"a la d\\u00e9cima\"},FONT:{bold:\"negrita\",\"bold-fraktur\":\"negrita Fraktur\",\n\"bold-italic\":\"negrita cursiva\",\"bold-script\":\"negrita script\",caligraphic:\"caligr\\u00e1fica\",\"caligraphic-bold\":\"caligr\\u00e1fica negrita\",\"double-struck\":\"negrita de pizarra\",\"double-struck-italic\":\"negrita de pizarra cursiva\",fraktur:\"Fraktur\",fullwidth:\"ancho completo\",italic:\"cursiva\",monospace:\"monoespacio\",normal:\"normal\",oldstyle:\"estilo antiguo\",\"oldstyle-bold\":\"estilo antiguo negrita\",script:\"script\",\"sans-serif\":\"sans serif\",\"sans-serif-italic\":\"sans serif cursiva\",\"sans-serif-bold\":\"sans serif negrita\",\n\"sans-serif-bold-italic\":\"sans serif negrita cursiva\",unknown:\"desconocida\"},ROLE:{addition:\"adici\\u00f3n\",multiplication:\"multiplicaci\\u00f3n\",subtraction:\"resta\",division:\"divisi\\u00f3n\",equality:\"igualdad\",inequality:\"desigualdad\",element:\"elemento\",arrow:\"flecha\",determinant:\"determinante\",rowvector:\"fila vector\",binomial:\"binomial\",squarematrix:\"matriz cuadrada\",multiline:\"l\\u00edneas m\\u00faltiples\",matrix:\"matriz\",vector:\"vector\",cases:\"declaraci\\u00f3n de caso\",table:\"mesa\",unknown:\"desconocida\"},\nENCLOSE:{longdiv:\"divisi\\u00f3n larga\",actuarial:\"s\\u00edmbolo actuarial\",radical:\"ra\\u00edz cuadrada\",box:\"caja\",roundedbox:\"caja redondeada\",circle:\"c\\u00edrculo\",left:\"barra vertical izquierda\",right:\"barra vertical derecha\",top:\"barra\",bottom:\"subbarra\",updiagonalstrike:\"tachadura\",downdiagonalstrike:\"tachadura\",verticalstrike:\"ponchado vertical\",horizontalstrike:\"cruce\",madruwb:\"s\\u00edmbolo factorial \\u00e1rabe\",updiagonalarrow:\"flecha diagonal\",phasorangle:\"\\u00e1ngulo de fasores\",unknown:\"divisi\\u00f3n larga\"},\nEMBELLISH:{\"super\":\"super\\u00edndice\",sub:\"sub\\u00edndice\",circled:[\"en circulo\",sre.Locale.postfixCombiner],parenthesized:[\"entre par\\u00e9ntesis\",sre.Locale.postfixCombiner],period:[\"punto\",sre.Locale.postfixCombiner],\"negative-circled\":[\"en circulo negro\",sre.Locale.postfixCombiner],\"double-circled\":[\"en doble circulo\",sre.Locale.postfixCombiner],\"circled-sans-serif\":[\"en circulo\",sansserifCombiner],\"negative-circled-sans-serif\":[\"en circulo negro\",sansserifCombiner],comma:[\"coma\",sre.Locale.postfixCombiner],\nsquared:[\"en cuadrado\",sre.Locale.postfixCombiner],\"negative-squared\":[\"en cuadrado negro\",sre.Locale.postfixCombiner]},NAVIGATE:{COLLAPSIBLE:\"plegable\",EXPANDABLE:\"ampliable\",LEVEL:\"nivel\"},REGEXP:{TEXT:\"a-zA-Z\\u00e1\\u00e9\\u00ed\\u00f3\\u00fa\\u00f1\\u00c1\\u00c9\\u00cd\\u00d3\\u00da\\u00d1\",NUMBER:\"((\\\\d{1,3})(?=( ))(( )\\\\d{3})*(,\\\\d+)?)|^\\\\d*,\\\\d+|^\\\\d+\",DECIMAL_MARK:\",\",DIGIT_GROUP:\"\",JOINER_SUBSUPER:\" \",JOINER_FRAC:\" \"},PLURAL_UNIT:{},PLURAL:function(a){return/.*s$/.test(a)?a:a+\"s\"},NUMBERS:sre.Numbers.es.NUMBERS,\nALPHABETS:{latinSmall:\"abcdefghijklmnopqrstuvwxyz\".split(\"\"),latinCap:\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\"),greekSmall:\"nabla;alfa;beta;gamma;delta;\\u00e9psilon;zeta;eta;theta;iota;kappa;lambda;mi;ni;xi;\\u00f3micron;pi;rho;sigma final;sigma;tau;\\u00edpsilon;phi;ji;psi;omega;diferencial parcial;\\u00e9psilon;theta;kappa;phi;rho;pi\".split(\";\"),greekCap:\"Alfa Beta Gamma Delta \\u00c9psilon Zeta Eta Theta Iota Kappa Lambda Mi Ni Xi \\u00d3micron Pi Rho Theta Sigma Tau \\u00cdpsilon Phi Ji Psi Omega\".split(\" \")},\nALPHABET_TRANSFORMERS:{digit:{default:function(a){return 0===a?\"cero\":sre.Numbers.es.numberToWords(a)},mathspeak:function(a){return a.toString()},clearspeak:function(a){return a.toString()}},letter:{default:function(a){return a}}},ALPHABET_PREFIXES:{capPrefix:{default:\"may\\u00fascula\"},smallPrefix:{default:\"\"},digitPrefix:{default:\"\"}},ALPHABET_COMBINER:sre.Locale.prefixCombiner,UNIT_TIMES:\"por\"};sre.Numbers.fr={};sre.Numbers.fr.SUB_ISO=\"fr\";sre.Numbers.fr.onesNumbers_=\" un deux trois quatre cinq six sept huit neuf dix onze douze treize quatorze quinze seize dix-sept dix-huit dix-neuf\".split(\" \");sre.Numbers.fr.tensNumbers_={fr:\"  vingt trente quarante cinquante soixante soixante-dix quatre-vingts quatre-vingt-dix\".split(\" \"),be:\"  vingt trente quarante cinquante soixante septante quatre-vingts nonante\".split(\" \"),sw:\"  vingt trente quarante cinquante soixante septante huitante nonante\".split(\" \")};\nsre.Numbers.fr.largeNumbers_=\";mille;millions;milliards;billions;mille billions;trillions;mille trillions;quadrillions;mille quadrillions;quintillions;mille quintillions\".split(\";\");\nsre.Numbers.fr.hundredsToWords_=function(a){var b=a%1E3;a=sre.Numbers.fr.onesNumbers_[Math.floor(b/100)]?sre.Numbers.fr.onesNumbers_[Math.floor(b/100)]+\"-cent\":\"\";if(b%=100){a+=a?\"-\":\"\";var c=sre.Numbers.fr.onesNumbers_[b];if(c)a+=c;else{var d=sre.Numbers.fr.tensNumbers_[sre.Numbers.fr.SUB_ISO][Math.floor(b/10)];d.match(/\\-dix$/)?(c=sre.Numbers.fr.onesNumbers_[b%10+10],a+=d.replace(/\\-dix$/,\"\")+\"-\"+c):a+=d+(b%10?\"-\"+sre.Numbers.fr.onesNumbers_[b%10]:\"\")}}return(b=a.match(/s\\-\\w+$/))?a.replace(/s\\-\\w+$/,\nb[0].slice(1)):a.replace(/\\-un$/,\"-et-un\")};\nsre.Numbers.fr.numberToWords=function(a){if(a>=Math.pow(10,36))return a.toString();for(var b=0,c=\"\";0<a;){var d=a%1E3;if(d){var e=sre.Numbers.fr.largeNumbers_[b],f=sre.Numbers.fr.hundredsToWords_(d);e&&e.match(/^mille /)?(d=e.replace(/^mille /,\"\"),c=c.match(RegExp(d))?f+(b?\"-mille-\":\"\")+c:c.match(RegExp(d.replace(/s$/,\"\")))?f+(b?\"-mille-\":\"\")+c.replace(d.replace(/s$/,\"\"),d):f+(b?\"-\"+e+\"-\":\"\")+c):(e=1===d&&e?e.replace(/s$/,\"\"):e,c=f+(b?\"-\"+e+\"-\":\"\")+c)}a=Math.floor(a/1E3);b++}return c.replace(/-$/,\n\"\")};sre.Numbers.fr.SMALL_ORDINAL={1:\"uni\\u00e8me\",2:\"demi\",3:\"tiers\",4:\"quart\"};sre.Numbers.fr.numberToOrdinal=function(a,b){var c=sre.Numbers.fr.SMALL_ORDINAL[a]||sre.Numbers.fr.wordOrdinal(a);return 3===a?c:b?c+\"s\":c};sre.Numbers.fr.wordOrdinal=function(a){if(1===a)return\"premi\\u00e8re\";a=sre.Numbers.fr.numberToWords(a);a.match(/^neuf$/)?a=a.slice(0,-1)+\"v\":a.match(/cinq$/)?a+=\"u\":a.match(/trois$/)||!a.match(/e$/)&&!a.match(/s$/)||(a=a.slice(0,-1));return a+\"i\\u00e8me\"};\nsre.Numbers.fr.simpleOrdinal=function(a){var b=sre.Grammar.getInstance().getParameter(\"gender\");return 1===a?a.toString()+(\"male\"===b?\"er\":\"re\"):a.toString()+\"e\"};sre.Numbers.fr.NUMBERS={wordOrdinal:sre.Numbers.fr.wordOrdinal,simpleOrdinal:sre.Numbers.fr.simpleOrdinal,numberToWords:sre.Numbers.fr.numberToWords,numberToOrdinal:sre.Numbers.fr.numberToOrdinal,vulgarSep:\"-\"};sre.Locale.fr={MS:{START:\"d\\u00e9but\",FRAC_V:\"fraction\",FRAC_B:\"frac\",FRAC_S:\"frac\",END:\"fin\",FRAC_OVER:\"sur\",ONCE:\"1\",TWICE:\"2\",NEST_FRAC:\"imbriqu\\u00e9e\",ENDFRAC:\"fin frac\",SUPER:\"sup\",SUB:\"sub\",SUP:\"sup\",SUPERSCRIPT:\"exposant\",SUBSCRIPT:\"indice\",BASELINE:\"position de base\",BASE:\"position de base\",NESTED:\"imbriqu\\u00e9e\",NEST_ROOT:\"imbriqu\\u00e9e\",STARTROOT:\"d\\u00e9but racine\",ENDROOT:\"fin racine\",ROOTINDEX:\"indice du radical\",ROOT:\"racine\",INDEX:\"indice\",UNDER:\"sous\",UNDERSCRIPT:\"souscript\",OVER:\"sus\",\nOVERSCRIPT:\"suscript\"},MS_FUNC:{FRAC_NEST_DEPTH:function(a){return!1},RADICAL_NEST_DEPTH:sre.Locale.nestingToString,COMBINE_ROOT_INDEX:sre.Locale.combinePostfixIndex,COMBINE_NESTED_FRACTION:function(a,b,c){return c.replace(/ $/g,\"\")+b+a},COMBINE_NESTED_RADICAL:function(a,b,c){return c+\" \"+a},FONT_REGEXP:function(a){return RegExp(\" (en |)\"+a+\"$\")}},MS_ROOT_INDEX:{2:\"carr\\u00e9e\",3:\"cubique\"},FONT:{bold:\"en gras\",\"bold-fraktur\":\"en gothique gras\",\"bold-italic\":\"en italique gras\",\"bold-script\":\"de ronde en gras\",\ncaligraphic:\"en calligraphique\",\"caligraphic-bold\":\"en calligraphique gras\",\"double-struck\":\"ajour\\u00e9\",\"double-struck-italic\":\"ajour\\u00e9 en italique\",fraktur:\"en gothique\",fullwidth:\"en pleine largeur\",italic:\"en italique\",monospace:\"en chasse fixe\",normal:\"en normal\",oldstyle:\"en ancien\",\"oldstyle-bold\":\"en ancien gras\",script:\"de ronde\",\"sans-serif\":\"sans empattement\",\"sans-serif-italic\":\"en italique sans empattement\",\"sans-serif-bold\":\"en gras sans empattement\",\"sans-serif-bold-italic\":\"en italique gras sans empattement\",\nunknown:\"inconnu\"},EMBELLISH:{\"super\":[\"exposant\",sre.Locale.prefixCombiner],sub:[\"indice\",sre.Locale.prefixCombiner],circled:\"encercl\\u00e9\",parenthesized:\"entre parenth\\u00e8ses\",period:\"un point\",\"negative-circled\":\"encercl\\u00e9 noir\",\"double-circled\":\"encercl\\u00e9 double\",\"circled-sans-serif\":\"sans empattement encercl\\u00e9\",\"negative-circled-sans-serif\":\"sans empattement encercl\\u00e9 noir\",comma:\"virgule\",squared:\"encadr\\u00e9\",\"negative-squared\":\"encadr\\u00e9 inverse\"},ROLE:{addition:\"addition\",\nmultiplication:\"multiplication\",subtraction:\"soustraction\",division:\"division\",equality:\"\\u00e9galit\\u00e9\",inequality:\"in\\u00e9galit\\u00e9\",element:\"\\u00e9l\\u00e9ment\",arrow:\"fl\\u00e8che\",determinant:\"d\\u00e9terminant\",rowvector:\"vecteur-rang\\u00e9e\",binomial:\"binomial\",squarematrix:\"matrice carr\\u00e9e\",\"set empty\":\"ensemble vide\",\"set extended\":\"extension\",\"set singleton\":\"singleton\",\"set collection\":\"collection\",label:\"\\u00e9tiquette\",multiline:\"multi-ligne\",matrix:\"matrice\",vector:\"vecteur\",\ncases:\"d\\u00e9claration de cas\",table:\"tableau\",unknown:\"inconnu\"},ENCLOSE:{longdiv:\"longue division\",actuarial:\"notation actuarielle\",radical:\"radical\",box:\"bo\\u00eete\",roundedbox:\"bo\\u00eete arrondie\",circle:\"cercle\",left:\"barre verticale gauche\",right:\"barre verticale droite\",top:\"trait suscrit\",bottom:\"trait souscrit\",updiagonalstrike:\"texte biff\\u00e9 diagonal montant\",downdiagonalstrike:\"texte biff\\u00e9 diagonal descendant\",verticalstrike:\"texte biff\\u00e9 vertical\",horizontalstrike:\"texte biff\\u00e9 horizontal\",\nmadruwb:\"symbole factorielle arabe\",updiagonalarrow:\"fl\\u00e8che diagonale montante\",phasorangle:\"angle de phase\",unknown:\"division longue\"},NAVIGATE:{COLLAPSIBLE:\"compressible\",EXPANDABLE:\"d\\u00e9compressible\",LEVEL:\"niveau\"},REGEXP:{TEXT:\"a-zA-Z\\u00e0\\u00e2\\u00e6\\u00e7\\u00e9\\u00e8\\u00ea\\u00eb\\u00ee\\u00ef\\u00f4\\u0153\\u00f9\\u00fb\\u00fc\\u00ff\\u00c0\\u00c2\\u00c6\\u00c7\\u00c9\\u00c8\\u00ca\\u00cb\\u00ce\\u00cf\\u00d4\\u0152\\u00d9\\u00db\\u00dc\\u0178\",NUMBER:\"((\\\\d{1,3})(?=( ))(( )\\\\d{3})*(,\\\\d+)?)|^\\\\d*,\\\\d+|^\\\\d+\",\nDECIMAL_MARK:\",\",DIGIT_GROUP:\"\",JOINER_SUBSUPER:\"-\",JOINER_FRAC:\" \"},PLURAL_UNIT:{foot:\"feet\",inch:\"inches\"},NUMBERS:sre.Numbers.fr.NUMBERS,ALPHABETS:{latinSmall:\"abcdefghijklmnopqrstuvwxyz\".split(\"\"),latinCap:\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\"),greekSmall:\"nabla;alpha;b\\u00eata;gamma;delta;epsilon;z\\u00eata;\\u00eata;th\\u00eata;iota;kappa;lambda;m\\u00fb;n\\u00fb;xi;omicron;pi;rh\\u00f4;sigma final;sigma;tau;upsilon;phi;chi;psi;om\\u00e9ga;d\\u00e9riv\\u00e9e partielle;epsilon;th\\u00eata;kappa;phi;rh\\u00f4;pi\".split(\";\"),\ngreekCap:\"Alpha B\\u00eata Gamma Delta Epsilon Z\\u00eata \\u00cata Th\\u00eata Iota Kappa Lambda M\\u00fb N\\u00fb Xi Omicron Pi Rh\\u00f4 Th\\u00eata Sigma Tau Upsilon Phi Chi Psi Om\\u00e9ga\".split(\" \")},ALPHABET_TRANSFORMERS:{digit:{default:function(a){return 0===a?\"zero\":sre.Numbers.fr.numberToWords(a)},mathspeak:function(a){return a.toString()},clearspeak:function(a){return a.toString()}},letter:{default:function(a){return a}}},ALPHABET_PREFIXES:{capPrefix:{default:\"majuscule\"},smallPrefix:{default:\"\"},\ndigitPrefix:{default:\"\"}},ALPHABET_COMBINER:function(a,b,c){a=c?a+\" \"+c:a;return b?a+\" \"+b:a}};sre.Numbers.nemeth={};sre.Numbers.nemeth.oneNumbers_=\"\\u2834\\u2802\\u2806\\u2812\\u2832\\u2822\\u2816\\u2836\\u2826\\u2814\".split(\"\");sre.Numbers.nemeth.numberToWords=function(a){return a.toString().split(\"\").map(function(b){return sre.Numbers.nemeth.oneNumbers_[parseInt(b,10)]}).join(\"\")};sre.Numbers.nemeth.NUMBERS={numberToWords:sre.Numbers.nemeth.numberToWords,simpleOrdinal:sre.Numbers.nemeth.numberToWords};var postfixCombiner=function(a,b,c){return b?a+b:a},embellishCombiner=function(a,b,c){return b+(c?c:\"\\u2830\")+a+\"\\u283b\"},doubleEmbellishCombiner=function(a,b,c){return b+(c?c:\"\\u2830\")+a+\"\\u283b\\u283b\"},parensCombiner=function(a,b,c){return b+(c?c:\"\\u2830\")+a+\"\\u283e\"};\nsre.Locale.nemeth={MS:{FRACTION_REPEAT:\"\\u2820\",FRACTION_START:\"\\u2839\",FRAC_V:\"\\u2839\",FRAC_B:\"Frac\",FRAC_S:\"Frac\",END:\"\\u2820\",FRACTION_OVER:\"\\u280c\",TWICE:\"Twice\",NEST_FRAC:\"Nest\",ENDFRAC:\"\\u283c\",FRACTION_END:\"\\u283c\",SUPER:\"\\u2818\",SUB:\"\\u2830\",SUP:\"\\u2818\",SUPERSCRIPT:\"\\u2818\",SUBSCRIPT:\"\\u2830\",BASELINE:\"\\u2810\",BASE:\"\\u2810\",NESTED:\"\\u2828\",NEST_ROOT:\"Nest\",STARTROOT:\"\\u281c\",ENDROOT:\"\\u283b\",ROOTINDEX:\"\\u2823\",ROOT:\"\\u2828\",INDEX:\"\\u2823\",UNDER:\"\\u2829\",UNDERSCRIPT:\"\\u2829\",OVER:\"\\u2823\",\nOVERSCRIPT:\"\\u2823\"},MS_FUNC:{FRAC_NEST_DEPTH:function(a){return!1},RADICAL_NEST_DEPTH:function(a){return\"\"},COMBINE_ROOT_INDEX:function(a,b){return a},FONT_REGEXP:function(a){return RegExp(\"^\"+a)}},MS_ROOT_INDEX:{},FONT:{bold:\"\\u2838\",\"bold-fraktur\":\"\\u2838\\u2800\\u2838\",\"bold-italic\":\"\\u2838\\u2828\",\"bold-script\":\"\\u2838\\u2808\",caligraphic:\"\\u2808\",\"caligraphic-bold\":\"\\u2808\\u2838\",\"double-struck\":\"\\u2838\",\"double-struck-italic\":\"\\u2838\\u2828\",fraktur:\"\\u2838\",italic:\"\\u2828\",monospace:\"\",normal:\"\",\noldstyle:\"\",\"oldstyle-bold\":\"\\u2838\",script:\"\\u2808\",\"sans-serif\":\"\\u2820\\u2828\",\"sans-serif-italic\":\"\\u2820\\u2828\\u2828\",\"sans-serif-bold\":\"\\u2820\\u2828\\u2838\",\"sans-serif-bold-italic\":\"\\u2820\\u2828\\u2838\\u2828\",unknown:\"\"},EMBELLISH:{\"super\":\"\\u2818\",sub:\"\\u2830\",circled:[\"\\u282b\\u2809\\u2838\\u282b\",embellishCombiner],parenthesized:[\"\\u2837\",parensCombiner],period:[\"\\u2838\\u2832\",postfixCombiner],\"negative-circled\":[\"\\u282b\\u2838\\u2809\\u2838\\u282b\",embellishCombiner],\"double-circled\":[\"\\u282b\\u2809\\u2838\\u282b\\u282b\\u2809\\u2838\\u282b\",\ndoubleEmbellishCombiner],\"circled-sans-serif\":[\"\\u282b\\u2809\\u2838\\u282b\\u2820\\u2828\",embellishCombiner],\"negative-circled-sans-serif\":[\"\\u282b\\u2838\\u2809\\u2838\\u282b\\u2820\\u2828\",embellishCombiner],comma:[\"\\u2820\",postfixCombiner],squared:[\"\\u282b\\u2832\\u2838\\u282b\",embellishCombiner],\"negative-squared\":[\"\\u282b\\u2838\\u2832\\u2838\\u282b\",embellishCombiner]},ROLE:{addition:\"addition\",multiplication:\"multiplication\",subtraction:\"subtraction\",division:\"division\",equality:\"equality\",inequality:\"inequality\",\nelement:\"element\",arrow:\"arrow\",determinant:\"determinant\",rowvector:\"row vector\",binomial:\"binomial\",squarematrix:\"square matrix\",multiline:\"multiple lines\",matrix:\"matrix\",vector:\"vector\",cases:\"case statement\",table:\"table\",unknown:\"unknown\"},ENCLOSE:{longdiv:\"long division\",actuarial:\"actuarial symbol\",radical:\"square root\",box:\"box\",roundedbox:\"rounded box\",circle:\"circle\",left:\"left vertical-line\",right:\"right vertical-line\",top:\"overbar\",bottom:\"underbar\",updiagonalstrike:\"crossout\",downdiagonalstrike:\"crossout\",\nverticalstrike:\"vertical strikeout\",horizontalstrike:\"crossout\",madruwb:\"Arabic factorial symbol\",updiagonalarrow:\"diagonal arrow\",phasorangle:\"phasor angle\",unknown:\"long division\"},REGEXP:{TEXT:\"a-zA-Z\",NUMBER:\"((\\\\d{1,3})(?=(,| ))((,| )\\\\d{3})*(\\\\.\\\\d+)?)|^\\\\d*\\\\.\\\\d+|^\\\\d+\",DECIMAL_MARK:\".\",DIGIT_GROUP:\",\",JOINER_SUBSUPER:\"\",JOINER_FRAC:\"\"},NAVIGATE:{COLLAPSIBLE:\"collapsible\",EXPANDABLE:\"expandable\",LEVEL:\"Level\"},NUMBERS:sre.Numbers.nemeth.NUMBERS,ALPHABETS:{latinSmall:\"\\u2801\\u2803\\u2809\\u2819\\u2811\\u280b\\u281b\\u2813\\u280a\\u281a\\u2805\\u2807\\u280d\\u281d\\u2815\\u280f\\u281f\\u2817\\u280e\\u281e\\u2825\\u2827\\u283a\\u282d\\u283d\\u2835\".split(\"\"),\nlatinCap:\"\\u2820\\u2801 \\u2820\\u2803 \\u2820\\u2809 \\u2820\\u2819 \\u2820\\u2811 \\u2820\\u280b \\u2820\\u281b \\u2820\\u2813 \\u2820\\u280a \\u2820\\u281a \\u2820\\u2805 \\u2820\\u2807 \\u2820\\u280d \\u2820\\u281d \\u2820\\u2815 \\u2820\\u280f \\u2820\\u281f \\u2820\\u2817 \\u2820\\u280e \\u2820\\u281e \\u2820\\u2825 \\u2820\\u2827 \\u2820\\u283a \\u2820\\u282d \\u2820\\u283d \\u2820\\u2835\".split(\" \"),greekSmall:\"\\u2828\\u282b \\u2828\\u2801 \\u2828\\u2803 \\u2828\\u281b \\u2828\\u2819 \\u2828\\u2811 \\u2828\\u2831 \\u2828\\u2826 \\u2828\\u2839 \\u2828\\u280a \\u2828\\u2805 \\u2828\\u2807 \\u2828\\u280d \\u2828\\u281d \\u2828\\u282d \\u2828\\u2815 \\u2828\\u280f \\u2828\\u2817 \\u2828\\u2812 \\u2828\\u280e \\u2828\\u281e \\u2828\\u2825 \\u2828\\u280b \\u2828\\u282f \\u2828\\u2813 \\u2828\\u2815 \\u2808\\u2819 \\u2828\\u2811 \\u2828\\u2839 \\u2828\\u2805 \\u2828\\u280b \\u2828\\u2817 \\u2828\\u280f\".split(\" \"),\ngreekCap:\"\\u2828\\u2820\\u2801 \\u2828\\u2820\\u2803 \\u2828\\u2820\\u281b \\u2828\\u2820\\u2819 \\u2828\\u2820\\u2811 \\u2828\\u2820\\u2831 \\u2828\\u2820\\u2823 \\u2828\\u2820\\u2839 \\u2828\\u2820\\u280a \\u2828\\u2820\\u2805 \\u2828\\u2820\\u2807 \\u2828\\u2820\\u280d \\u2828\\u2820\\u281d \\u2828\\u2820\\u282d \\u2828\\u2820\\u2815 \\u2828\\u2820\\u280f \\u2828\\u2820\\u2817 \\u2828\\u2820\\u2839 \\u2828\\u2820\\u280e \\u2828\\u2820\\u2825 \\u2828\\u2820\\u2825 \\u2828\\u2820\\u280b \\u2828\\u2820\\u282f \\u2828\\u2820\\u282b \\u2828\\u2820\\u283a\".split(\" \")},ALPHABET_TRANSFORMERS:{digit:{default:sre.Numbers.nemeth.numberToWords},\nletter:{default:function(a){return a}}},ALPHABET_PREFIXES:{capPrefix:{default:\"\"},smallPrefix:{default:\"\"},digitPrefix:{default:\"\\u283c\"}},ALPHABET_COMBINER:function(a,b,c){return b?b+a:a}};sre.L10n={};sre.L10n.setLocale=function(){var a=sre.L10n.getLocale();if(a)for(var b in a)sre.Messages[b]=a[b]};sre.L10n.getLocale=function(){var a=sre.Engine.getInstance().locale;-1===sre.Variables.LOCALES.indexOf(a)&&(console.error(\"Locale \"+a+\" does not exist! Using en instead.\"),sre.Engine.getInstance().locale=\"en\");return sre.Locale[sre.Engine.getInstance().locale]||sre.Locale.en};sre.EnrichCase=function(){};sre.EnrichCase.prototype.getMathml=function(){};sre.AbstractEnrichCase=function(a){this.semantic=a};sre.AbstractEnrichCase.prototype.getMathml=goog.abstractMethod;sre.EnrichCaseFactory=function(){};sre.EnrichCaseFactory.cases=[];sre.EnrichCaseFactory.getCase=function(a){for(var b=0,c;c=sre.EnrichCaseFactory.cases[b];b++)if(c.test(a))return new c.constr(a);return null};sre.SemanticSkeleton=function(a){this.array=a=0===a?a:a||[];this.levelsMap=this.parents=null};sre.SemanticSkeleton.prototype.populate=function(){this.parents&&this.levelsMap||(this.parents={},this.levelsMap={},this.populate_(this.array,this.array,[]))};\nsre.SemanticSkeleton.prototype.populate_=function(a,b,c){if(sre.SemanticSkeleton.simpleCollapseStructure(a))this.levelsMap[a]=b,this.parents[a]=a===c[0]?c.slice(1):c;else{b=sre.SemanticSkeleton.contentCollapseStructure(a)?a.slice(1):a;c=[b[0]].concat(c);for(var d=0,e=b.length;d<e;d++)this.populate_(b[d],a,c)}};sre.SemanticSkeleton.prototype.toString=function(){return sre.SemanticSkeleton.makeSexp_(this.array)};\nsre.SemanticSkeleton.makeSexp_=function(a){return sre.SemanticSkeleton.simpleCollapseStructure(a)?a.toString():sre.SemanticSkeleton.contentCollapseStructure(a)?\"(c \"+a.slice(1).map(sre.SemanticSkeleton.makeSexp_).join(\" \")+\")\":\"(\"+a.map(sre.SemanticSkeleton.makeSexp_).join(\" \")+\")\"};sre.SemanticSkeleton.fromTree=function(a){return sre.SemanticSkeleton.fromNode(a.root)};sre.SemanticSkeleton.fromNode=function(a){return new sre.SemanticSkeleton(sre.SemanticSkeleton.fromNode_(a))};\nsre.SemanticSkeleton.fromString=function(a){return new sre.SemanticSkeleton(sre.SemanticSkeleton.fromString_(a))};sre.SemanticSkeleton.fromString_=function(a){a=a.replace(/\\(/g,\"[\");a=a.replace(/\\)/g,\"]\");a=a.replace(/ /g,\",\");a=a.replace(/c/g,'\"c\"');return JSON.parse(a)};\nsre.SemanticSkeleton.fromNode_=function(a){if(!a)return[];var b=a.contentNodes;if(b.length){var c=b.map(sre.SemanticSkeleton.fromNode_);c.unshift(\"c\")}var d=a.childNodes;if(!d.length)return b.length?[a.id,c]:a.id;d=d.map(sre.SemanticSkeleton.fromNode_);b.length&&d.unshift(c);d.unshift(a.id);return d};sre.SemanticSkeleton.simpleCollapseStructure=function(a){return\"number\"===typeof a};\nsre.SemanticSkeleton.contentCollapseStructure=function(a){return!!a&&!sre.SemanticSkeleton.simpleCollapseStructure(a)&&\"c\"===a[0]};sre.SemanticSkeleton.interleaveIds=function(a,b){return sre.BaseUtil.interleaveLists(sre.SemanticSkeleton.collapsedLeafs(a),sre.SemanticSkeleton.collapsedLeafs(b))};\nsre.SemanticSkeleton.collapsedLeafs=function(a){var b=function(c){return sre.SemanticSkeleton.simpleCollapseStructure(c)?[c]:sre.SemanticSkeleton.contentCollapseStructure(c[1])?c.slice(2):c.slice(1)};return Array.prototype.slice.call(arguments,0).reduce(function(c,d){return c.concat(b(d))},[])};sre.SemanticSkeleton.fromStructure=function(a,b){return new sre.SemanticSkeleton(sre.SemanticSkeleton.tree_(a,b.root))};\nsre.SemanticSkeleton.tree_=function(a,b){if(!b)return[];if(!b.childNodes.length)return b.id;var c=b.id,d=[c];c=sre.XpathUtil.evalXPath(\".//self::*[@\"+sre.EnrichMathml.Attribute.ID+\"=\"+c+\"]\",a)[0];b=sre.SemanticSkeleton.combineContentChildren(b,b.contentNodes.map(function(f){return f}),b.childNodes.map(function(f){return f}));c&&c.setAttribute(sre.EnrichMathml.Attribute.OWNS,b.map(function(f){return f.id}).join(\" \"));c=0;for(var e;e=b[c];c++)d.push(sre.SemanticSkeleton.tree_(a,e));return d};\nsre.SemanticSkeleton.combineContentChildren=function(a,b,c){switch(a.type){case sre.Semantic.Type.RELSEQ:case sre.Semantic.Type.INFIXOP:case sre.Semantic.Type.MULTIREL:return sre.BaseUtil.interleaveLists(c,b);case sre.Semantic.Type.PREFIXOP:return b.concat(c);case sre.Semantic.Type.POSTFIXOP:return c.concat(b);case sre.Semantic.Type.FENCED:return c.unshift(b[0]),c.push(b[1]),c;case sre.Semantic.Type.APPL:return[c[0],b[0],c[1]];case sre.Semantic.Type.ROOT:return[c[1],c[0]];case sre.Semantic.Type.ROW:case sre.Semantic.Type.LINE:return b.length&&\nc.unshift(b[0]),c;default:return c}};sre.EnrichMathml={};sre.EnrichMathml.Error=function(a){Error.call(this);this.message=a||\"\";this.name=\"MathML Enrichment Error\"};goog.inherits(sre.EnrichMathml.Error,Error);sre.EnrichMathml.SETTINGS={collapsed:!0,implicit:!0};sre.EnrichMathml.ATTRIBUTE_PREFIX_=\"data-semantic-\";\nsre.EnrichMathml.Attribute={ADDED:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"added\",ALTERNATIVE:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"alternative\",CHILDREN:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"children\",COLLAPSED:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"collapsed\",CONTENT:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"content\",EMBELLISHED:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"embellished\",FENCEPOINTER:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"fencepointer\",FONT:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"font\",ID:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\n\"id\",ANNOTATION:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"annotation\",OPERATOR:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"operator\",OWNS:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"owns\",PARENT:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"parent\",PREFIX:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"prefix\",ROLE:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"role\",SPEECH:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"speech\",STRUCTURE:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"structure\",TYPE:sre.EnrichMathml.ATTRIBUTE_PREFIX_+\"type\"};\nsre.EnrichMathml.enrich=function(a,b){var c=a.cloneNode(!0);sre.EnrichMathml.walkTree(b.root);sre.Engine.getInstance().structure&&a.setAttribute(sre.EnrichMathml.Attribute.STRUCTURE,sre.SemanticSkeleton.fromStructure(a,b).toString());sre.Debugger.getInstance().generateOutput(function(){sre.EnrichMathml.formattedOutput(c,a,b,!0);return[]});return a};\nsre.EnrichMathml.walkTree=function(a){var b=sre.EnrichCaseFactory.getCase(a);if(b)return b=b.getMathml(),sre.EnrichMathml.ascendNewNode(b);if(1===a.mathml.length)return sre.Debugger.getInstance().output(\"Walktree Case 0\"),b=a.mathml[0],sre.EnrichMathml.setAttributes(b,a),sre.EnrichMathml.ascendNewNode(b);b=a.contentNodes.map(sre.EnrichMathml.cloneContentNode);sre.EnrichMathml.setOperatorAttribute_(a,b);var c=a.childNodes.map(sre.EnrichMathml.walkTree);c=sre.SemanticSkeleton.combineContentChildren(a,\nb,c);b=a.mathmlTree;if(null===b)sre.Debugger.getInstance().output(\"Walktree Case 1\"),b=sre.EnrichMathml.introduceNewLayer(c);else{var d=sre.EnrichMathml.attachedElement_(c);sre.Debugger.getInstance().output(\"Walktree Case 2\");d?(sre.Debugger.getInstance().output(\"Walktree Case 2.1\"),b=d.parentNode):(sre.Debugger.getInstance().output(\"Walktree Case 2.2\"),b=sre.EnrichMathml.getInnerNode(b))}b=sre.EnrichMathml.rewriteMfenced(b);sre.EnrichMathml.mergeChildren_(b,c);sre.EnrichMathml.setAttributes(b,a);\nreturn sre.EnrichMathml.ascendNewNode(b)};\nsre.EnrichMathml.introduceNewLayer=function(a){var b=sre.EnrichMathml.mathmlLca_(a),c=b.node,d=b.type;d===sre.EnrichMathml.lcaType.VALID&&sre.SemanticUtil.hasEmptyTag(c)||(sre.Debugger.getInstance().output(\"Walktree Case 1.1\"),c=sre.DomUtil.createElement(\"mrow\"),d===sre.EnrichMathml.lcaType.PRUNED?(sre.Debugger.getInstance().output(\"Walktree Case 1.1.0\"),c=sre.EnrichMathml.introduceLayerAboveLca(c,b.node,a)):a[0]&&(sre.Debugger.getInstance().output(\"Walktree Case 1.1.1\"),b=sre.EnrichMathml.attachedElement_(a),\na=sre.EnrichMathml.childrenSubset_(b.parentNode,a),sre.DomUtil.replaceNode(b,c),a.forEach(function(e){c.appendChild(e)})));return c};\nsre.EnrichMathml.introduceLayerAboveLca=function(a,b,c){var d=sre.EnrichMathml.descendNode_(b);if(sre.SemanticUtil.hasMathTag(d)){sre.Debugger.getInstance().output(\"Walktree Case 1.1.0.0\");sre.EnrichMathml.moveSemanticAttributes_(d,a);sre.DomUtil.toArray(d.childNodes).forEach(function(f){a.appendChild(f)});var e=a;a=d;d=e}b=c.indexOf(b);c[b]=d;sre.DomUtil.replaceNode(d,a);a.appendChild(d);c.forEach(function(f){a.appendChild(f)});return a};\nsre.EnrichMathml.moveSemanticAttributes_=function(a,b){for(var c in sre.EnrichMathml.Attribute){var d=sre.EnrichMathml.Attribute[c];a.hasAttribute(d)&&(b.setAttribute(d,a.getAttribute(d)),a.removeAttribute(d))}};sre.EnrichMathml.childrenSubset_=function(a,b){var c=sre.DomUtil.toArray(a.childNodes),d=Infinity,e=-Infinity;b.forEach(function(f){f=c.indexOf(f);-1!==f&&(d=Math.min(d,f),e=Math.max(e,f))});return c.slice(d,e+1)};\nsre.EnrichMathml.mergeChildren_=function(a,b){var c=a.childNodes;if(c.length)for(var d=0;b.length;)c[d]===b[0]||sre.EnrichMathml.functionApplication_(c[d],b[0])?(b.shift(),d++):c[d]&&-1===b.indexOf(c[d])?d++:(sre.EnrichMathml.isDescendant_(b[0],a)||a.insertBefore(b[0],c[d]||null),b.shift());else b.forEach(function(e){a.appendChild(e)})};sre.EnrichMathml.isDescendant_=function(a,b){if(!a)return!1;do if(a=a.parentNode,a===b)return!0;while(a);return!1};\nsre.EnrichMathml.functionApplication_=function(a,b){var c=sre.SemanticAttr.functionApplication();if(a&&b&&a.textContent&&b.textContent&&a.textContent===c&&b.textContent===c&&\"true\"===b.getAttribute(sre.EnrichMathml.Attribute.ADDED)){c=0;for(var d;d=a.attributes[c];c++)b.hasAttribute(d.nodeName)||b.setAttribute(d.nodeName,d.nodeValue);sre.DomUtil.replaceNode(a,b);return!0}return!1};sre.EnrichMathml.lcaType={VALID:\"valid\",INVALID:\"invalid\",PRUNED:\"pruned\"};\nsre.EnrichMathml.mathmlLca_=function(a){var b=sre.EnrichMathml.attachedElement_(a);if(!b)return{type:sre.EnrichMathml.lcaType.INVALID,node:null};var c=sre.EnrichMathml.attachedElement_(a.slice().reverse());if(b===c)return{type:sre.EnrichMathml.lcaType.VALID,node:b};b=sre.EnrichMathml.pathToRoot_(b);var d=sre.EnrichMathml.prunePath_(b,a);a=sre.EnrichMathml.pathToRoot_(c,function(f){return-1!==d.indexOf(f)});c=a[0];var e=d.indexOf(c);return-1===e?{type:sre.EnrichMathml.lcaType.INVALID,node:null}:{type:d.length!==\nb.length?sre.EnrichMathml.lcaType.PRUNED:sre.EnrichMathml.validLca_(d[e+1],a[1])?sre.EnrichMathml.lcaType.VALID:sre.EnrichMathml.lcaType.INVALID,node:c}};sre.EnrichMathml.prunePath_=function(a,b){for(var c=0;a[c]&&-1===b.indexOf(a[c]);)c++;return a.slice(0,c+1)};sre.EnrichMathml.attachedElement_=function(a){for(var b=0,c=null;!c&&b<a.length;)a[b].parentNode&&(c=a[b]),b++;return c};\nsre.EnrichMathml.pathToRoot_=function(a,b){b=b||function(d){return!1};for(var c=[a];!b(a)&&!sre.SemanticUtil.hasMathTag(a)&&a.parentNode;)a=sre.EnrichMathml.parentNode_(a),c.unshift(a);return c};sre.EnrichMathml.validLca_=function(a,b){return!(!a||!b||a.previousSibling||b.nextSibling)};sre.EnrichMathml.ascendNewNode=function(a){for(;!sre.SemanticUtil.hasMathTag(a)&&sre.EnrichMathml.unitChild_(a);)a=sre.EnrichMathml.parentNode_(a);return a};\nsre.EnrichMathml.descendNode_=function(a){var b=sre.DomUtil.toArray(a.childNodes);if(!b)return a;b=b.filter(function(c){return c.nodeType===sre.DomUtil.NodeType.ELEMENT_NODE&&!sre.SemanticUtil.hasIgnoreTag(c)});return 1===b.length&&sre.SemanticUtil.hasEmptyTag(b[0])&&!b[0].hasAttribute(sre.EnrichMathml.Attribute.TYPE)?sre.EnrichMathml.descendNode_(b[0]):a};\nsre.EnrichMathml.unitChild_=function(a){var b=sre.EnrichMathml.parentNode_(a);return b&&sre.SemanticUtil.hasEmptyTag(b)?sre.DomUtil.toArray(b.childNodes).every(function(c){return c===a||sre.EnrichMathml.isIgnorable_(c)}):!1};sre.EnrichMathml.isIgnorable_=function(a){if(!a||sre.SemanticUtil.hasIgnoreTag(a))return!0;var b=sre.DomUtil.toArray(a.childNodes);return!sre.SemanticUtil.hasEmptyTag(a)&&b.length?!1:sre.DomUtil.toArray(a.childNodes).every(sre.EnrichMathml.isIgnorable_)};\nsre.EnrichMathml.parentNode_=function(a){return a.parentNode};sre.EnrichMathml.addCollapsedAttribute=function(a,b){b=new sre.SemanticSkeleton(b);a.setAttribute(sre.EnrichMathml.Attribute.COLLAPSED,b.toString())};sre.EnrichMathml.cloneContentNode=function(a){if(a.mathml.length)return sre.EnrichMathml.walkTree(a);var b=sre.EnrichMathml.SETTINGS.implicit?sre.EnrichMathml.createInvisibleOperator_(a):sre.DomUtil.createElement(\"mrow\");a.mathml=[b];return b};sre.EnrichMathml.makeIdList=function(a){return a.map(function(b){return b.id}).join(\",\")};\nsre.EnrichMathml.setAttributes=function(a,b){a.setAttribute(sre.EnrichMathml.Attribute.TYPE,b.type);for(var c=b.allAttributes(),d=0,e;e=c[d];d++)a.setAttribute(sre.EnrichMathml.Attribute[e[0].toUpperCase()],e[1]);b.childNodes.length&&a.setAttribute(sre.EnrichMathml.Attribute.CHILDREN,sre.EnrichMathml.makeIdList(b.childNodes));b.contentNodes.length&&a.setAttribute(sre.EnrichMathml.Attribute.CONTENT,sre.EnrichMathml.makeIdList(b.contentNodes));b.parent&&a.setAttribute(sre.EnrichMathml.Attribute.PARENT,\nb.parent.id)};sre.EnrichMathml.rewriteMfenced=function(a){if(\"MFENCED\"!==sre.DomUtil.tagName(a))return a;for(var b=sre.DomUtil.createElement(\"mrow\"),c=0,d;d=a.attributes[c];c++)-1===[\"open\",\"close\",\"separators\"].indexOf(d.name)&&b.setAttribute(d.name,d.value);sre.DomUtil.toArray(a.childNodes).forEach(function(e){b.appendChild(e)});sre.DomUtil.replaceNode(a,b);return b};\nsre.EnrichMathml.createInvisibleOperator_=function(a){var b=sre.DomUtil.createElement(\"mo\"),c=sre.DomUtil.createTextNode(a.textContent);b.appendChild(c);sre.EnrichMathml.setAttributes(b,a);b.setAttribute(sre.EnrichMathml.Attribute.ADDED,\"true\");return b};sre.EnrichMathml.setOperatorAttribute_=function(a,b){var c=a.type+(a.textContent?\",\"+a.textContent:\"\");b.forEach(function(d){sre.EnrichMathml.getInnerNode(d).setAttribute(sre.EnrichMathml.Attribute.OPERATOR,c)})};\nsre.EnrichMathml.getInnerNode=function(a){var b=sre.DomUtil.toArray(a.childNodes);if(!b)return a;b=b.filter(function(g){return g.nodeType===sre.DomUtil.NodeType.ELEMENT_NODE&&!sre.EnrichMathml.isIgnorable_(g)});for(var c=[],d=0,e;e=b[d];d++)if(sre.SemanticUtil.hasEmptyTag(e)){var f=sre.EnrichMathml.getInnerNode(e);f&&f!==e&&c.push(f)}else c.push(e);return 1===c.length?c[0]:a};\nsre.EnrichMathml.formattedOutput=function(a,b,c,d){d=d||!1;sre.EnrichMathml.formattedOutput_(a,\"Original MathML\",d);sre.EnrichMathml.formattedOutput_(c,\"Semantic Tree\",d);sre.EnrichMathml.formattedOutput_(b,\"Semantically enriched MathML\",d)};sre.EnrichMathml.formattedOutput_=function(a,b,c){a=sre.DomUtil.formatXml(a.toString());c?console.info(b+\":\\n```html\\n\"+sre.EnrichMathml.removeAttributePrefix(a)+\"\\n```\\n\"):console.info(a)};\nsre.EnrichMathml.removeAttributePrefix=function(a){return a.toString().replace(new RegExp(sre.EnrichMathml.ATTRIBUTE_PREFIX_,\"g\"),\"\")};sre.EnrichMathml.addPrefix=function(a){var b=a.toUpperCase();return sre.EnrichMathml.Attribute[b]||sre.EnrichMathml.ATTRIBUTE_PREFIX_+a};\nsre.EnrichMathml.collapsePunctuated=function(a,b){var c=!!b;b=b||[];var d=a.parent,e=a.contentNodes.map(function(k){return k.id});e.unshift(\"c\");e=[a.id,e];for(var f=0,g;g=a.childNodes[f];f++){var h=sre.EnrichMathml.walkTree(g);b.push(h);h=sre.EnrichMathml.getInnerNode(h);d&&!c&&h.setAttribute(sre.EnrichMathml.Attribute.PARENT,d.id);e.push(g.id)}return e};sre.EnrichMathml.printNodeList__=function(a,b){console.info(a);sre.DomUtil.toArray(b).forEach(function(c){console.info(c.toString())});console.info(\"<<<<<<<<<<<<<<<<<\")};sre.CaseBinomial=function(a){sre.AbstractEnrichCase.call(this,a);this.mml=a.mathmlTree};goog.inherits(sre.CaseBinomial,sre.AbstractEnrichCase);sre.CaseBinomial.test=function(a){return!a.mathmlTree&&a.type===sre.SemanticAttr.Type.LINE&&a.role===sre.SemanticAttr.Role.BINOMIAL};\nsre.CaseBinomial.prototype.getMathml=function(){if(!this.semantic.childNodes.length)return this.mml;this.mml=sre.EnrichMathml.walkTree(this.semantic.childNodes[0]);if(this.mml.hasAttribute(sre.EnrichMathml.Attribute.TYPE)){var a=sre.DomUtil.createElement(\"mrow\");a.setAttribute(sre.EnrichMathml.Attribute.ADDED,\"true\");sre.DomUtil.replaceNode(this.mml,a);a.appendChild(this.mml);this.mml=a}sre.EnrichMathml.setAttributes(this.mml,this.semantic);return this.mml};sre.CaseDoubleScript=function(a){sre.AbstractEnrichCase.call(this,a);this.mml=a.mathmlTree};goog.inherits(sre.CaseDoubleScript,sre.AbstractEnrichCase);sre.CaseDoubleScript.test=function(a){if(!a.mathmlTree||!a.childNodes.length)return!1;var b=sre.DomUtil.tagName(a.mathmlTree);a=a.childNodes[0].role;return\"MSUBSUP\"===b&&a===sre.SemanticAttr.Role.SUBSUP||\"MUNDEROVER\"===b&&a===sre.SemanticAttr.Role.UNDEROVER};\nsre.CaseDoubleScript.prototype.getMathml=function(){var a=this.semantic.childNodes[0],b=a.childNodes[0],c=this.semantic.childNodes[1],d=a.childNodes[1],e=sre.EnrichMathml.walkTree(c),f=sre.EnrichMathml.walkTree(b),g=sre.EnrichMathml.walkTree(d);sre.EnrichMathml.setAttributes(this.mml,this.semantic);this.mml.setAttribute(sre.EnrichMathml.Attribute.CHILDREN,sre.EnrichMathml.makeIdList([b,d,c]));[f,g,e].forEach(goog.bind(function(h){sre.EnrichMathml.getInnerNode(h).setAttribute(sre.EnrichMathml.Attribute.PARENT,\nthis.mml.getAttribute(sre.EnrichMathml.Attribute.ID))},this));this.mml.setAttribute(sre.EnrichMathml.Attribute.TYPE,a.role);sre.EnrichMathml.addCollapsedAttribute(this.mml,[this.semantic.id,[a.id,b.id,d.id],c.id]);return this.mml};sre.CaseMultiindex=function(a){sre.AbstractEnrichCase.call(this,a);this.mml=a.mathmlTree};goog.inherits(sre.CaseMultiindex,sre.AbstractEnrichCase);\nsre.CaseMultiindex.prototype.completeMultiscript=function(a,b){var c=sre.DomUtil.toArray(this.mml.childNodes).slice(1),d=0,e=goog.bind(function(f){for(var g=0,h;h=f[g];g++){var k=c[d];if(k&&h==sre.EnrichMathml.getInnerNode(k).getAttribute(sre.EnrichMathml.Attribute.ID))sre.EnrichMathml.getInnerNode(k).setAttribute(sre.EnrichMathml.Attribute.PARENT,this.semantic.id),d++;else{var l=this.semantic.querySelectorAll(function(m){return m.id===h});this.mml.insertBefore(sre.CaseMultiindex.createNone_(l[0]),\nk||null)}}},this);e(a);c[d]&&\"MPRESCRIPTS\"!==sre.DomUtil.tagName(c[d])?this.mml.insertBefore(c[d],sre.DomUtil.createElement(\"mprescripts\")):d++;e(b)};sre.CaseMultiindex.createNone_=function(a){var b=sre.DomUtil.createElement(\"none\");a&&sre.EnrichMathml.setAttributes(b,a);b.setAttribute(sre.EnrichMathml.Attribute.ADDED,\"true\");return b};\nsre.CaseMultiindex.multiscriptIndex=function(a){if(a.type===sre.SemanticAttr.Type.PUNCTUATED&&a.contentNodes[0].role===sre.SemanticAttr.Role.DUMMY)return sre.EnrichMathml.collapsePunctuated(a);sre.EnrichMathml.walkTree(a);return a.id};sre.CaseMultiscripts=function(a){sre.CaseMultiindex.call(this,a)};goog.inherits(sre.CaseMultiscripts,sre.CaseMultiindex);sre.CaseMultiscripts.test=function(a){return a.mathmlTree?\"MMULTISCRIPTS\"===sre.DomUtil.tagName(a.mathmlTree)&&(a.type===sre.SemanticAttr.Type.SUPERSCRIPT||a.type===sre.SemanticAttr.Type.SUBSCRIPT):!1};\nsre.CaseMultiscripts.prototype.getMathml=function(){sre.EnrichMathml.setAttributes(this.mml,this.semantic);if(this.semantic.childNodes[0]&&this.semantic.childNodes[0].role===sre.SemanticAttr.Role.SUBSUP){var a=this.semantic.childNodes[0],b=a.childNodes[0],c=sre.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[1]),d=sre.CaseMultiindex.multiscriptIndex(a.childNodes[1]),e=[this.semantic.id,[a.id,b.id,d],c];sre.EnrichMathml.addCollapsedAttribute(this.mml,e);this.mml.setAttribute(sre.EnrichMathml.Attribute.TYPE,\na.role);this.completeMultiscript(sre.SemanticSkeleton.interleaveIds(d,c),[])}else b=this.semantic.childNodes[0],c=sre.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[1]),e=[this.semantic.id,b.id,c],sre.EnrichMathml.addCollapsedAttribute(this.mml,e);a=sre.SemanticSkeleton.collapsedLeafs(d||[],c);c=sre.EnrichMathml.walkTree(b);sre.EnrichMathml.getInnerNode(c).setAttribute(sre.EnrichMathml.Attribute.PARENT,this.semantic.id);a.unshift(b.id);this.mml.setAttribute(sre.EnrichMathml.Attribute.CHILDREN,\na.join(\",\"));return this.mml};sre.CaseEmbellished=function(a){sre.AbstractEnrichCase.call(this,a);this.ofenceMml=this.ofence=this.fencedMml=this.fenced=null;this.ofenceMap={};this.cfenceMml=this.cfence=null;this.cfenceMap={};this.parentCleanup=[]};goog.inherits(sre.CaseEmbellished,sre.AbstractEnrichCase);sre.CaseEmbellished.test=function(a){return!(!a.mathmlTree||!a.fencePointer)};sre.CaseEmbellished.prototype.getMathml=function(){this.getFenced_();this.fencedMml=sre.EnrichMathml.walkTree(this.fenced);this.getFencesMml_();return this.rewrite_()};\nsre.CaseEmbellished.prototype.getFenced_=function(){for(var a=this.semantic;a.type!==sre.SemanticAttr.Type.FENCED;)a=a.childNodes[0];this.fenced=a.childNodes[0];this.ofence=a.contentNodes[0];this.cfence=a.contentNodes[1];sre.CaseEmbellished.fencedMap_(this.ofence,this.ofenceMap);sre.CaseEmbellished.fencedMap_(this.cfence,this.cfenceMap)};sre.CaseEmbellished.fencedMap_=function(a,b){b[a.id]=a.mathmlTree;a.embellished&&sre.CaseEmbellished.fencedMap_(a.childNodes[0],b)};\nsre.CaseEmbellished.prototype.getFencesMml_=function(){for(var a=this.semantic,b=Object.keys(this.ofenceMap),c=Object.keys(this.cfenceMap);!(this.ofenceMml&&this.cfenceMml||a===this.fenced);)-1===b.indexOf(a.fencePointer)||this.ofenceMml||(this.ofenceMml=a.mathmlTree),-1===c.indexOf(a.fencePointer)||this.cfenceMml||(this.cfenceMml=a.mathmlTree),a=a.childNodes[0];this.ofenceMml||(this.ofenceMml=this.ofence.mathmlTree);this.cfenceMml||(this.cfenceMml=this.cfence.mathmlTree);this.ofenceMml&&(this.ofenceMml=\nsre.EnrichMathml.ascendNewNode(this.ofenceMml));this.cfenceMml&&(this.cfenceMml=sre.EnrichMathml.ascendNewNode(this.cfenceMml))};\nsre.CaseEmbellished.prototype.rewrite_=function(){var a=this.semantic,b=null,c=this.introduceNewLayer_();for(sre.EnrichMathml.setAttributes(c,this.fenced.parent);a.type!==sre.SemanticAttr.Type.FENCED;){var d=a.mathmlTree,e=this.specialCase_(a,d);if(e)a=e;else{sre.EnrichMathml.setAttributes(d,a);e=[];for(var f=1,g;g=a.childNodes[f];f++)e.push(sre.EnrichMathml.walkTree(g));a=a.childNodes[0]}e=sre.DomUtil.createElement(\"dummy\");f=c.parentNode;g=d.childNodes[0];sre.DomUtil.replaceNode(d,e);sre.DomUtil.replaceNode(c,\nd);sre.DomUtil.replaceNode(d.childNodes[0],c);sre.DomUtil.replaceNode(e,g);d.parentNode=f;c=d.childNodes[0];b||(b=d)}sre.EnrichMathml.walkTree(this.ofence);sre.EnrichMathml.walkTree(this.cfence);this.cleanupParents_();return b||c};\nsre.CaseEmbellished.prototype.specialCase_=function(a,b){var c=sre.DomUtil.tagName(b),d=null;if(\"MSUBSUP\"===c){d=a.childNodes[0];var e=sre.CaseDoubleScript}else\"MMULTISCRIPTS\"===c&&(a.type===sre.SemanticAttr.Type.SUPERSCRIPT||a.type===sre.SemanticAttr.Type.SUBSCRIPT?e=sre.CaseMultiscripts:a.type===sre.SemanticAttr.Type.TENSOR&&(e=sre.CaseTensor),d=e&&a.childNodes[0]&&a.childNodes[0].role===sre.SemanticAttr.Role.SUBSUP?a.childNodes[0]:a);if(!d)return null;c=d.childNodes[0];b=sre.CaseEmbellished.makeEmptyNode_(c.id);\nd.childNodes[0]=b;b=(new e(a)).getMathml();d.childNodes[0]=c;this.parentCleanup.push(b);return d.childNodes[0]};sre.CaseEmbellished.makeEmptyNode_=function(a){var b=sre.DomUtil.createElement(\"mrow\");a=new sre.SemanticNode(a);a.type=sre.SemanticAttr.Type.EMPTY;a.mathmlTree=b;return a};\nsre.CaseEmbellished.prototype.introduceNewLayer_=function(){var a=this.fullFence(this.ofenceMml),b=this.fullFence(this.cfenceMml),c=sre.DomUtil.createElement(\"mrow\");sre.DomUtil.replaceNode(this.fencedMml,c);c.appendChild(this.fencedMml);c.insertBefore(a,this.fencedMml);c.appendChild(b);if(!c.parentNode){for(a=sre.DomUtil.createElement(\"mrow\");0<c.childNodes.length;)a.appendChild(c.childNodes[0]);c.appendChild(a);c=a}return c};\nsre.CaseEmbellished.prototype.fullFence=function(a){for(var b=this.fencedMml.parentNode;a.parentNode&&a.parentNode!==b;)a=a.parentNode;return a};sre.CaseEmbellished.prototype.cleanupParents_=function(){this.parentCleanup.forEach(function(a){var b=a.childNodes[1].getAttribute(sre.EnrichMathml.Attribute.PARENT);a.childNodes[0].setAttribute(sre.EnrichMathml.Attribute.PARENT,b)})};sre.CaseLine=function(a){sre.AbstractEnrichCase.call(this,a);this.mml=a.mathmlTree};goog.inherits(sre.CaseLine,sre.AbstractEnrichCase);sre.CaseLine.test=function(a){return!!a.mathmlTree&&a.type===sre.SemanticAttr.Type.LINE};\nsre.CaseLine.prototype.getMathml=function(){this.semantic.contentNodes.length&&sre.EnrichMathml.walkTree(this.semantic.contentNodes[0]);this.semantic.childNodes.length&&sre.EnrichMathml.walkTree(this.semantic.childNodes[0]);sre.EnrichMathml.setAttributes(this.mml,this.semantic);return this.mml};sre.CaseProof=function(a){sre.AbstractEnrichCase.call(this,a);this.mml=a.mathmlTree};goog.inherits(sre.CaseProof,sre.AbstractEnrichCase);sre.CaseProof.test=function(a){return!!a.mathmlTree&&(a.type===sre.SemanticAttr.Type.INFERENCE||a.type===sre.SemanticAttr.Type.PREMISES)};\nsre.CaseProof.prototype.getMathml=function(){if(!this.semantic.childNodes.length)return this.mml;this.semantic.contentNodes.forEach(function(a){sre.EnrichMathml.walkTree(a);sre.EnrichMathml.setAttributes(a.mathmlTree,a)});this.semantic.childNodes.forEach(function(a){sre.EnrichMathml.walkTree(a)});sre.EnrichMathml.setAttributes(this.mml,this.semantic);this.mml.getAttribute(\"data-semantic-id\")===this.mml.getAttribute(\"data-semantic-parent\")&&this.mml.removeAttribute(\"data-semantic-parent\");return this.mml};sre.CaseTable=function(a){sre.AbstractEnrichCase.call(this,a);this.mml=a.mathmlTree;this.inner=[]};goog.inherits(sre.CaseTable,sre.AbstractEnrichCase);sre.CaseTable.test=function(a){return!!a.mathmlTree&&(a.type===sre.SemanticAttr.Type.MATRIX||a.type===sre.SemanticAttr.Type.VECTOR||a.type===sre.SemanticAttr.Type.CASES)};\nsre.CaseTable.prototype.getMathml=function(){var a=sre.EnrichMathml.cloneContentNode(this.semantic.contentNodes[0]),b=this.semantic.contentNodes[1]?sre.EnrichMathml.cloneContentNode(this.semantic.contentNodes[1]):null;this.inner=this.semantic.childNodes.map(sre.EnrichMathml.walkTree);\"MFENCED\"===sre.DomUtil.tagName(this.mml)?(this.mml.insertBefore(a,this.mml.childNodes[0]||null),b&&this.mml.appendChild(b),this.mml=sre.EnrichMathml.rewriteMfenced(this.mml)):(a=[a,this.mml],b&&a.push(b),this.mml=sre.EnrichMathml.introduceNewLayer(a));\nsre.EnrichMathml.setAttributes(this.mml,this.semantic);return this.mml};sre.CaseTensor=function(a){sre.CaseMultiindex.call(this,a)};goog.inherits(sre.CaseTensor,sre.CaseMultiindex);sre.CaseTensor.test=function(a){return!!a.mathmlTree&&a.type===sre.SemanticAttr.Type.TENSOR};\nsre.CaseTensor.prototype.getMathml=function(){sre.EnrichMathml.walkTree(this.semantic.childNodes[0]);var a=sre.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[1]),b=sre.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[2]),c=sre.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[3]),d=sre.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[4]);sre.EnrichMathml.setAttributes(this.mml,this.semantic);sre.EnrichMathml.addCollapsedAttribute(this.mml,[this.semantic.id,this.semantic.childNodes[0].id,\na,b,c,d]);var e=sre.SemanticSkeleton.collapsedLeafs(a,b,c,d);e.unshift(this.semantic.childNodes[0].id);this.mml.setAttribute(sre.EnrichMathml.Attribute.CHILDREN,e.join(\",\"));this.completeMultiscript(sre.SemanticSkeleton.interleaveIds(c,d),sre.SemanticSkeleton.interleaveIds(a,b));return this.mml};sre.CaseText=function(a){sre.AbstractEnrichCase.call(this,a);this.mml=a.mathmlTree};goog.inherits(sre.CaseText,sre.AbstractEnrichCase);sre.CaseText.test=function(a){return a.type===sre.SemanticAttr.Type.PUNCTUATED&&(a.role===sre.SemanticAttr.Role.TEXT||a.contentNodes.every(function(b){return b.role===sre.SemanticAttr.Role.DUMMY}))};\nsre.CaseText.prototype.getMathml=function(){var a=[],b=sre.EnrichMathml.collapsePunctuated(this.semantic,a);this.mml=sre.EnrichMathml.introduceNewLayer(a);sre.EnrichMathml.setAttributes(this.mml,this.semantic);this.mml.removeAttribute(sre.EnrichMathml.Attribute.CONTENT);sre.EnrichMathml.addCollapsedAttribute(this.mml,b);return this.mml};sre.EnrichCases=function(){};\nsre.EnrichCaseFactory.cases.push({test:sre.CaseEmbellished.test,constr:sre.CaseEmbellished},{test:sre.CaseDoubleScript.test,constr:sre.CaseDoubleScript},{test:sre.CaseTensor.test,constr:sre.CaseTensor},{test:sre.CaseMultiscripts.test,constr:sre.CaseMultiscripts},{test:sre.CaseLine.test,constr:sre.CaseLine},{test:sre.CaseBinomial.test,constr:sre.CaseBinomial},{test:sre.CaseProof.test,constr:sre.CaseProof},{test:sre.CaseTable.test,constr:sre.CaseTable},{test:sre.CaseText.test,constr:sre.CaseText});sre.Enrich={};sre.Enrich.semanticMathmlNode=function(a){a=a.cloneNode(!0);var b=sre.Semantic.getTree(a);return sre.EnrichMathml.enrich(a,b)};sre.Enrich.semanticMathmlSync=function(a){a=sre.DomUtil.parseInput(a);return sre.Enrich.semanticMathmlNode(a)};sre.Enrich.semanticMathml=function(a,b){if(sre.Engine.isReady()){var c=sre.DomUtil.parseInput(a);b(sre.Enrich.semanticMathmlNode(c))}else setTimeout(function(){sre.Enrich.semanticMathml(a,b)},500)};\nsre.Enrich.testTranslation__=function(a){new sre.EnrichCases;sre.Debugger.getInstance().init();a=sre.Enrich.semanticMathmlSync(sre.Enrich.prepareMmlString(a)).toString();sre.EnrichMathml.removeAttributePrefix(a);sre.Debugger.getInstance().exit();return a};sre.Enrich.prepareMmlString=function(a){a.match(/^<math/)||(a=\"<math>\"+a);a.match(/\\/math>$/)||(a+=\"</math>\");return a};sre.ColorPicker=function(a,b){this.foreground=sre.ColorPicker.getChannelColor_(b,sre.ColorPicker.DEFAULT_FOREGROUND_);this.background=sre.ColorPicker.getChannelColor_(a,sre.ColorPicker.DEFAULT_BACKGROUND_)};sre.ColorPicker.DEFAULT_BACKGROUND_=\"blue\";sre.ColorPicker.DEFAULT_FOREGROUND_=\"black\";\nsre.ColorPicker.namedColors_={red:{red:255,green:0,blue:0},green:{red:0,green:255,blue:0},blue:{red:0,green:0,blue:255},yellow:{red:255,green:255,blue:0},cyan:{red:0,green:255,blue:255},magenta:{red:255,green:0,blue:255},white:{red:255,green:255,blue:255},black:{red:0,green:0,blue:0}};sre.ColorPicker.getChannelColor_=function(a,b){a=a||{color:b};var c=a.color?sre.ColorPicker.namedColors_[a.color]:a;c||(c=sre.ColorPicker.namedColors_[b]);c.alpha=a.hasOwnProperty(\"alpha\")?a.alpha:1;return sre.ColorPicker.normalizeColor_(c)};\nsre.ColorPicker.normalizeColor_=function(a){var b=function(c){c=Math.max(c,0);c=Math.min(255,c);return Math.round(c)};a.red=b(a.red);a.green=b(a.green);a.blue=b(a.blue);a.alpha=Math.max(a.alpha,0);a.alpha=Math.min(1,a.alpha);return a};sre.ColorPicker.prototype.rgba=function(){var a=function(b){return\"rgba(\"+b.red+\",\"+b.green+\",\"+b.blue+\",\"+b.alpha+\")\"};return{background:a(this.background),foreground:a(this.foreground)}};\nsre.ColorPicker.prototype.rgb=function(){var a=function(b){return\"rgb(\"+b.red+\",\"+b.green+\",\"+b.blue+\")\"};return{background:a(this.background),alphaback:this.background.alpha.toString(),foreground:a(this.foreground),alphafore:this.foreground.alpha.toString()}};\nsre.ColorPicker.prototype.hex=function(){var a=function(b){return\"#\"+sre.ColorPicker.toHex_(b.red)+sre.ColorPicker.toHex_(b.green)+sre.ColorPicker.toHex_(b.blue)};return{background:a(this.background),alphaback:this.background.alpha.toString(),foreground:a(this.foreground),alphafore:this.foreground.alpha.toString()}};sre.ColorPicker.toHex_=function(a){a=a.toString(16);return 1===a.length?\"0\"+a:a};sre.ContrastPicker=function(){this.hue=10;this.sat=100;this.incr=this.light=50};\nsre.ContrastPicker.prototype.generate=function(){return sre.ColorPicker.RGB2hex_(sre.ColorPicker.rgb2RGB_(sre.ColorPicker.hsl2rgb_(this.hue,this.sat,this.light)))};sre.ContrastPicker.prototype.increment=function(){this.hue=(this.hue+this.incr)%360};\nsre.ColorPicker.hsl2rgb_=function(a,b,c){c=1<c?c/100:c;var d=(1-Math.abs(2*c-1))*(1<b?b/100:b),e=d*(1-Math.abs(a/60%2-1));c-=d/2;var f=b=0,g=0;0<=a&&60>a?(a=$jscomp.makeIterator([d,e,0]),b=a.next().value,f=a.next().value,g=a.next().value):60<=a&&120>a?(a=$jscomp.makeIterator([e,d,0]),b=a.next().value,f=a.next().value,g=a.next().value):120<=a&&180>a?(a=$jscomp.makeIterator([0,d,e]),b=a.next().value,f=a.next().value,g=a.next().value):180<=a&&240>a?(a=$jscomp.makeIterator([0,e,d]),b=a.next().value,f=\na.next().value,g=a.next().value):240<=a&&300>a?(a=$jscomp.makeIterator([e,0,d]),b=a.next().value,f=a.next().value,g=a.next().value):300<=a&&360>a&&(a=$jscomp.makeIterator([d,0,e]),b=a.next().value,f=a.next().value,g=a.next().value);return{red:b+c,green:f+c,blue:g+c}};sre.ColorPicker.rgb2RGB_=function(a){return{red:Math.round(255*a.red),green:Math.round(255*a.green),blue:Math.round(255*a.blue)}};sre.ColorPicker.RGB2hex_=function(a){return\"rgb(\"+a.red+\",\"+a.green+\",\"+a.blue+\")\"};sre.Highlighter=function(){};sre.Highlighter.prototype.highlight=function(a){};sre.Highlighter.prototype.unhighlight=function(){};sre.Highlighter.prototype.highlightAll=function(a){};sre.Highlighter.prototype.unhighlightAll=function(){};sre.Highlighter.prototype.setColor=function(a){};sre.Highlighter.prototype.addEvents=function(a,b){};sre.AbstractHighlighter=function(){this.currentHighlights_=[];this.color=null;this.mactionName=\"\"};sre.AbstractHighlighter.ATTR=\"sre-highlight\";sre.AbstractHighlighter.prototype.highlight=function(a){this.currentHighlights_.push(a.map(goog.bind(function(b){var c=this.highlightNode(b);this.setHighlighted(b);return c},this)))};sre.AbstractHighlighter.prototype.highlightNode=goog.abstractMethod;sre.AbstractHighlighter.prototype.highlightAll=function(a){a=this.getMactionNodes(a);for(var b=0,c;c=a[b];b++)this.highlight([c])};\nsre.AbstractHighlighter.prototype.unhighlight=function(){var a=this.currentHighlights_.pop();a&&a.forEach(goog.bind(function(b){this.isHighlighted(b.node)&&(this.unhighlightNode(b),this.unsetHighlighted(b.node))},this))};sre.AbstractHighlighter.prototype.unhighlightNode=goog.abstractMethod;sre.AbstractHighlighter.prototype.unhighlightAll=function(){for(;0<this.currentHighlights_.length;)this.unhighlight()};sre.AbstractHighlighter.prototype.setColor=function(a){this.color=a};\nsre.AbstractHighlighter.prototype.colorString=function(){return this.color.rgba()};sre.AbstractHighlighter.prototype.addEvents=function(a,b){a=this.getMactionNodes(a);for(var c=0,d;d=a[c];c++)for(var e in b)d.addEventListener(e,b[e])};sre.AbstractHighlighter.prototype.getMactionNodes=function(a){return a.getElementsByClassName(this.mactionName)};sre.AbstractHighlighter.prototype.isMactionNode=function(a){return(a=a.className||a.getAttribute(\"class\"))?a.match(new RegExp(this.mactionName)):!1};\nsre.AbstractHighlighter.prototype.isHighlighted=function(a){return a.hasAttribute(sre.AbstractHighlighter.ATTR)};sre.AbstractHighlighter.prototype.setHighlighted=function(a){a.setAttribute(sre.AbstractHighlighter.ATTR,!0)};sre.AbstractHighlighter.prototype.unsetHighlighted=function(a){a.removeAttribute(sre.AbstractHighlighter.ATTR)};\nsre.AbstractHighlighter.prototype.colorizeAll=function(a){sre.XpathUtil.evalXPath(\".//*[@\"+sre.EnrichMathml.Attribute.ID+\"]\",a).forEach(goog.bind(function(b){this.colorize(b)},this))};sre.AbstractHighlighter.prototype.uncolorizeAll=function(a){sre.XpathUtil.evalXPath(\".//*[@\"+sre.EnrichMathml.Attribute.ID+\"]\",a).forEach(goog.bind(function(b){this.uncolorize(b)},this))};\nsre.AbstractHighlighter.prototype.colorize=function(a){var b=sre.EnrichMathml.addPrefix(\"foreground\");a.hasAttribute(b)&&(a.setAttribute(b+\"-old\",a.style.color),a.style.color=a.getAttribute(b))};sre.AbstractHighlighter.prototype.uncolorize=function(a){var b=sre.EnrichMathml.addPrefix(\"foreground\")+\"-old\";a.hasAttribute(b)&&(a.style.color=a.getAttribute(b))};sre.CssHighlighter=function(){sre.AbstractHighlighter.call(this);this.mactionName=\"mjx-maction\"};goog.inherits(sre.CssHighlighter,sre.AbstractHighlighter);sre.CssHighlighter.prototype.highlightNode=function(a){var b={node:a,background:a.style.backgroundColor,foreground:a.style.color},c=this.colorString();a.style.backgroundColor=c.background;a.style.color=c.foreground;return b};sre.CssHighlighter.prototype.unhighlightNode=function(a){a.node.style.backgroundColor=a.background;a.node.style.color=a.foreground};sre.ChtmlHighlighter=function(){sre.CssHighlighter.call(this)};goog.inherits(sre.ChtmlHighlighter,sre.CssHighlighter);sre.ChtmlHighlighter.prototype.isMactionNode=function(a){return a.tagName.toUpperCase()===this.mactionName.toUpperCase()};sre.ChtmlHighlighter.prototype.getMactionNodes=function(a){return a.getElementsByTagName(this.mactionName)};sre.HtmlHighlighter=function(){sre.AbstractHighlighter.call(this);this.mactionName=\"maction\"};goog.inherits(sre.HtmlHighlighter,sre.AbstractHighlighter);sre.HtmlHighlighter.prototype.setMode=function(a){this.mode=a};\nsre.HtmlHighlighter.prototype.highlightNode=function(a){var b={node:a,foreground:a.style.color,position:a.style.position},c=this.color.rgb();a.style.color=c.foreground;a.style.position=\"relative\";var d=a.bbox;if(d&&d.w){var e=sre.DomUtil.createElement(\"span\"),f=parseFloat(a.style.paddingLeft||\"0\");e.style.backgroundColor=c.background;e.style.opacity=c.alphaback.toString();e.style.display=\"inline-block\";e.style.height=d.h+d.d+.1+\"em\";e.style.verticalAlign=-d.d+\"em\";e.style.marginTop=e.style.marginBottom=\n\"-0.05em\";e.style.width=d.w+0+\"em\";e.style.marginLeft=f-0+\"em\";e.style.marginRight=-d.w-f+\"em\";a.parentNode.insertBefore(e,a);b.box=e}return b};sre.HtmlHighlighter.prototype.unhighlightNode=function(a){var b=a.node;b.style.color=a.foreground;b.style.position=a.position;a.box&&a.box.parentNode.removeChild(a.box)};sre.MmlCssHighlighter=function(){sre.CssHighlighter.call(this);this.mactionName=\"maction\"};goog.inherits(sre.MmlCssHighlighter,sre.CssHighlighter);sre.MmlCssHighlighter.prototype.getMactionNodes=function(a){return a.getElementsByTagName(this.mactionName)};sre.MmlCssHighlighter.prototype.isMactionNode=function(a){return a.tagName===this.mactionName};sre.MmlHighlighter=function(){sre.AbstractHighlighter.call(this);this.mactionName=\"maction\"};goog.inherits(sre.MmlHighlighter,sre.AbstractHighlighter);sre.MmlHighlighter.prototype.highlightNode=function(a){var b=a.getAttribute(\"style\");b+=\";background-color: \"+this.colorString().background;b+=\";color: \"+this.colorString().foreground;a.setAttribute(\"style\",b);return{node:a}};\nsre.MmlHighlighter.prototype.unhighlightNode=function(a){var b=a.node.getAttribute(\"style\");b=b.replace(\";background-color: \"+this.colorString().background,\"\");b=b.replace(\";color: \"+this.colorString().foreground,\"\");a.node.setAttribute(\"style\",b)};sre.MmlHighlighter.prototype.colorString=function(){return this.color.rgba()};sre.MmlHighlighter.prototype.getMactionNodes=function(a){return a.getElementsByTagName(this.mactionName)};\nsre.MmlHighlighter.prototype.isMactionNode=function(a){return a.tagName===this.mactionName};sre.SvgHighlighter=function(){sre.AbstractHighlighter.call(this);this.mactionName=\"mjx-svg-maction\"};goog.inherits(sre.SvgHighlighter,sre.AbstractHighlighter);\nsre.SvgHighlighter.prototype.highlightNode=function(a){if(this.isHighlighted(a))return{node:a.previousSibling||a,background:a.style.backgroundColor,foreground:a.style.color};if(\"svg\"===a.tagName){var b={node:a,background:a.style.backgroundColor,foreground:a.style.color};a.style.backgroundColor=this.colorString().background;a.style.color=this.colorString().foreground;return b}b=sre.DomUtil.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\");if(\"use\"===a.nodeName){var c=sre.DomUtil.createElementNS(\"http://www.w3.org/2000/svg\",\n\"g\");a.parentNode.insertBefore(c,a);c.appendChild(a);var d=c.getBBox();c.parentNode.replaceChild(a,c)}else d=a.getBBox();b.setAttribute(\"x\",d.x-40);b.setAttribute(\"y\",d.y-40);b.setAttribute(\"width\",d.width+80);b.setAttribute(\"height\",d.height+80);(d=a.getAttribute(\"transform\"))&&b.setAttribute(\"transform\",d);b.setAttribute(\"fill\",this.colorString().background);b.setAttribute(sre.AbstractHighlighter.ATTR,!0);a.parentNode.insertBefore(b,a);b={node:b,foreground:a.getAttribute(\"fill\")};a.setAttribute(\"fill\",\nthis.colorString().foreground);return b};sre.SvgHighlighter.prototype.setHighlighted=function(a){\"svg\"===a.tagName&&sre.SvgHighlighter.superClass_.setHighlighted.call(this,a)};sre.SvgHighlighter.prototype.unhighlightNode=function(a){\"background\"in a?(a.node.style.backgroundColor=a.background,a.node.style.color=a.foreground):(a.foreground?a.node.nextSibling.setAttribute(\"fill\",a.foreground):a.node.nextSibling.removeAttribute(\"fill\"),a.node.parentNode.removeChild(a.node))};\nsre.SvgHighlighter.prototype.isMactionNode=function(a){a=a.className||a.getAttribute(\"class\");return(a=void 0!==a.baseVal?a.baseVal:a)?a.match(new RegExp(this.mactionName)):!1};sre.SvgV3Highlighter=function(){sre.SvgHighlighter.call(this);this.mactionName=\"maction\"};goog.inherits(sre.SvgV3Highlighter,sre.SvgHighlighter);\nsre.SvgV3Highlighter.prototype.highlightNode=function(a){if(this.isHighlighted(a))return{node:a,background:this.colorString().background,foreground:this.colorString().foreground};if(\"svg\"===a.tagName||\"MJX-CONTAINER\"===a.tagName){var b={node:a,background:a.style.backgroundColor,foreground:a.style.color};a.style.backgroundColor=this.colorString().background;a.style.color=this.colorString().foreground;return b}b=sre.DomUtil.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\");b.setAttribute(\"sre-highlighter-added\",\n!0);var c=a.getBBox();b.setAttribute(\"x\",c.x-40);b.setAttribute(\"y\",c.y-40);b.setAttribute(\"width\",c.width+80);b.setAttribute(\"height\",c.height+80);(c=a.getAttribute(\"transform\"))&&b.setAttribute(\"transform\",c);b.setAttribute(\"fill\",this.colorString().background);a.setAttribute(sre.AbstractHighlighter.ATTR,!0);a.parentNode.insertBefore(b,a);b={node:a,foreground:a.getAttribute(\"fill\")};\"rect\"===a.nodeName?(c=new sre.ColorPicker({alpha:0,color:\"black\"}),a.setAttribute(\"fill\",c.rgba().foreground)):a.setAttribute(\"fill\",\nthis.colorString().foreground);return b};sre.SvgV3Highlighter.prototype.unhighlightNode=function(a){var b=a.node.previousSibling;b&&b.hasAttribute(\"sre-highlighter-added\")?(a.foreground?a.node.setAttribute(\"fill\",a.foreground):a.node.removeAttribute(\"fill\"),a.node.parentNode.removeChild(b)):(a.node.style.backgroundColor=a.background,a.node.style.color=a.foreground)};sre.SvgV3Highlighter.prototype.isMactionNode=function(a){return a.getAttribute(\"data-mml-node\")===this.mactionName};\nsre.SvgV3Highlighter.prototype.getMactionNodes=function(a){return sre.XpathUtil.evalXPath('.//*[@data-mml-node=\"'+this.mactionName+'\"]',a)};sre.HighlighterFactory={};sre.HighlighterFactory.highlighter=function(a,b,c){a=new sre.ColorPicker(a,b);c=new (sre.HighlighterFactory.highlighterMapping_[\"NativeMML\"===c.renderer&&\"Safari\"===c.browser?\"MML-CSS\":\"SVG\"===c.renderer&&\"v3\"===c.browser?\"SVG-V3\":c.renderer]||sre.HighlighterFactory.highlighterMapping_.NativeMML);c.setColor(a);return c};sre.HighlighterFactory.addEvents=function(a,b,c){(c=sre.HighlighterFactory.highlighterMapping_[c.renderer])&&(new c).addEvents(a,b)};\nsre.HighlighterFactory.highlighterMapping_={SVG:sre.SvgHighlighter,\"SVG-V3\":sre.SvgV3Highlighter,NativeMML:sre.MmlHighlighter,\"HTML-CSS\":sre.HtmlHighlighter,\"MML-CSS\":sre.MmlCssHighlighter,CommonHTML:sre.CssHighlighter,CHTML:sre.ChtmlHighlighter};sre.Span=function(a,b){this.string=a;this.attributes=b};sre.AudioUtil={};sre.AudioUtil.mergePause=function(a,b,c){return a?{pause:sre.AudioUtil.mergePause_(a.pause,b.pause,c)}:b};sre.AudioUtil.mergePause_=function(a,b,c){return(c||function(d,e){return\"number\"===typeof d||\"number\"===typeof e?d+e:\"number\"===typeof d?e:\"number\"===typeof e?d:[a,b].sort()[0]}).call(null,a,b)};sre.AudioUtil.mergeMarkup=function(a,b){delete a.open;b.close.forEach(function(d){delete a[d]});b.open.forEach(function(d){a[d]=b[d]});var c=Object.keys(a);a.open=c};\nsre.AudioUtil.sortClose=function(a,b){if(1>=a.length)return a;for(var c=[],d=0,e;e=b[d],a.length;d++)e.close&&e.close.length&&e.close.forEach(function(f){var g=a.indexOf(f);-1!==g&&(c.unshift(f),a.splice(g,1))});return c};sre.AudioUtil.PersonalityRanges_={};sre.AudioUtil.LastOpen_=[];\nsre.AudioUtil.personalityMarkup=function(a){sre.AudioUtil.PersonalityRanges_={};sre.AudioUtil.LastOpen_=[];for(var b=[],c={},d=0,e;e=a[d];d++){var f=null,g=e.descriptionSpan(),h=e.personality;e=h[sre.Engine.personalityProps.JOIN];delete h[sre.Engine.personalityProps.JOIN];\"undefined\"!==typeof h[sre.Engine.personalityProps.PAUSE]&&(f={},f[sre.Engine.personalityProps.PAUSE]=h[sre.Engine.personalityProps.PAUSE],delete h[sre.Engine.personalityProps.PAUSE]);h=sre.AudioUtil.personalityDiff_(h,c);sre.AudioUtil.appendMarkup_(b,\ng,h,e,f,!0)}b=b.concat(sre.AudioUtil.finaliseMarkup_());return b=sre.AudioUtil.simplifyMarkup_(b)};\nsre.AudioUtil.appendElement_=function(a,b){var c=a[a.length-1];if(c)if(sre.AudioUtil.isSpanElement(b)&&sre.AudioUtil.isSpanElement(c))if(\"undefined\"===typeof c.join)c.span=c.span.concat(b.span);else{a=c.span.pop();var d=b.span.shift();c.span.push(a+c.join+d);c.span=c.span.concat(b.span);c.join=b.join}else sre.AudioUtil.isPauseElement(b)&&sre.AudioUtil.isPauseElement(c)?c.pause=sre.AudioUtil.mergePause_(c.pause,b.pause):a.push(b);else a.push(b)};\nsre.AudioUtil.simplifyMarkup_=function(a){for(var b={},c=[],d=0,e;e=a[d];d++)if(sre.AudioUtil.isMarkupElement(e))if(!e.close||1!==e.close.length||e.open.length)sre.AudioUtil.copyValues_(e,b),c.push(e);else{var f=a[d+1];if(!f||sre.AudioUtil.isSpanElement(f))sre.AudioUtil.copyValues_(e,b),c.push(e);else{var g=sre.AudioUtil.isPauseElement(f)?f:null;g&&(f=a[d+2]);f&&sre.AudioUtil.isMarkupElement(f)&&f.open[0]===e.close[0]&&!f.close.length&&f[f.open[0]]===b[f.open[0]]?g?(sre.AudioUtil.appendElement_(c,\ng),d+=2):d+=1:(sre.AudioUtil.copyValues_(e,b),c.push(e))}}else sre.AudioUtil.appendElement_(c,e);return c};sre.AudioUtil.copyValues_=function(a,b){a.rate&&(b.rate=a.rate);a.pitch&&(b.pitch=a.pitch);a.volume&&(b.volume=a.volume)};sre.AudioUtil.finaliseMarkup_=function(){for(var a=[],b=sre.AudioUtil.LastOpen_.length-1;0<=b;b--){var c=sre.AudioUtil.LastOpen_[b];if(c.length){for(var d={open:[],close:[]},e=0;e<c.length;e++){var f=c[e];d.close.push(f);d[f]=0}a.push(d)}}return a};\nsre.AudioUtil.isMarkupElement=function(a){return\"object\"===typeof a&&a.open};sre.AudioUtil.isPauseElement=function(a){return\"object\"===typeof a&&1===Object.keys(a).length&&Object.keys(a)[0]===sre.Engine.personalityProps.PAUSE};sre.AudioUtil.isSpanElement=function(a){var b=Object.keys(a);return\"object\"===typeof a&&(1===b.length&&\"span\"===b[0]||2===b.length&&(\"span\"===b[0]&&\"join\"===b[1]||\"span\"===b[1]&&\"join\"===b[0]))};\nsre.AudioUtil.appendMarkup_=function(a,b,c,d,e,f){if(f){if(f=a[a.length-1])var g=f[sre.Engine.personalityProps.JOIN];if(f&&!b.string&&e&&sre.AudioUtil.isPauseElement(f)){var h=sre.Engine.personalityProps.PAUSE;f[h]=sre.AudioUtil.mergePause_(f[h],e[h]);e=null}f&&b.string&&0===Object.keys(c).length&&sre.AudioUtil.isSpanElement(f)&&(\"undefined\"!==typeof g&&(h=f.span.pop(),b=new sre.Span(h.string+g+b.string,h.attributes)),f.span.push(b),b=new sre.Span(\"\",{}),f[sre.Engine.personalityProps.JOIN]=d)}0!==\nObject.keys(c).length&&a.push(c);b.string&&a.push({span:[b],join:d});e&&a.push(e)};\nsre.AudioUtil.personalityDiff_=function(a,b){if(!b)return a;var c={};for(h in sre.Engine.personalityProps){var d=sre.Engine.personalityProps[h],e=a[d],f=b[d];if(!(!e&&!f||e&&f&&e===f)){var g=e||0;sre.AudioUtil.isMarkupElement(c)||(c.open=[],c.close=[]);e||c.close.push(d);f||c.open.push(d);f&&e&&(c.close.push(d),c.open.push(d));b[d]=g;c[d]=g;sre.AudioUtil.PersonalityRanges_[d]?sre.AudioUtil.PersonalityRanges_[d].push(g):sre.AudioUtil.PersonalityRanges_[d]=[g]}}if(sre.AudioUtil.isMarkupElement(c)){for(a=\nc.close.slice();0<a.length;){var h=sre.AudioUtil.LastOpen_.pop();d=sre.BaseUtil.setdifference(h,a);a=sre.BaseUtil.setdifference(a,h);h=d;if(0===a.length)0!==h.length&&sre.AudioUtil.LastOpen_.push(h);else if(0!==h.length)for(c.close=c.close.concat(h),c.open=c.open.concat(h),d=0;e=h[d];d++)c[e]=b[e]}sre.AudioUtil.LastOpen_.push(c.open)}return c};sre.AudioRenderer=function(){};sre.AudioRenderer.prototype.setSeparator=function(a){};sre.AudioRenderer.prototype.getSeparator=function(){};sre.AudioRenderer.prototype.markup=function(a){};sre.AudioRenderer.prototype.error=function(a){};sre.AudioRenderer.prototype.merge=function(a){};sre.AudioRenderer.prototype.finalize=function(a){};sre.AbstractAudioRenderer=function(){this.separator_=\" \"};sre.AbstractAudioRenderer.prototype.setSeparator=function(a){this.separator_=a};sre.AbstractAudioRenderer.prototype.getSeparator=function(){return this.separator_};sre.AbstractAudioRenderer.prototype.markup=goog.abstractMethod;sre.AbstractAudioRenderer.prototype.error=function(a){return null};sre.AbstractAudioRenderer.prototype.merge=function(a){return a.map(function(b){return b.string}).join(this.getSeparator())};\nsre.AbstractAudioRenderer.prototype.finalize=function(a){return a};sre.AbstractAudioRenderer.prototype.pauseValue=function(a){switch(a){case \"long\":a=750;break;case \"medium\":a=500;break;case \"short\":a=250;break;default:a=parseInt(a,10)}return Math.floor(a*parseInt(sre.Engine.getInstance().getRate(),10)/100)};sre.MarkupRenderer=function(){sre.AbstractAudioRenderer.call(this);this.scaleFunction_=null};goog.inherits(sre.MarkupRenderer,sre.AbstractAudioRenderer);sre.MarkupRenderer.prototype.setScaleFunction=function(a,b,c,d,e){var f=e||0;this.scaleFunction_=function(g){g=(g-a)/(b-a);return+(Math.round(c*(1-g)+d*g+\"e+\"+f)+\"e-\"+f)}};sre.MarkupRenderer.prototype.applyScaleFunction=function(a){return this.scaleFunction_?this.scaleFunction_(a):a};sre.MarkupRenderer.prototype.pause=goog.abstractMethod;\nsre.MarkupRenderer.prototype.prosodyElement=goog.abstractMethod;sre.AcssRenderer=function(){sre.MarkupRenderer.call(this)};goog.inherits(sre.AcssRenderer,sre.MarkupRenderer);\nsre.AcssRenderer.prototype.markup=function(a){this.setScaleFunction(-2,2,0,10,0);a=sre.AudioUtil.personalityMarkup(a);for(var b=[],c={open:[]},d=null,e=!1,f=0,g;g=a[f];f++)if(sre.AudioUtil.isMarkupElement(g))sre.AudioUtil.mergeMarkup(c,g);else if(sre.AudioUtil.isPauseElement(g))e&&(d=sre.AudioUtil.mergePause(d,g,Math.max));else{g='\"'+this.merge(g.span)+'\"';e=!0;d&&(b.push(this.pause(d)),d=null);var h=this.prosody_(c);b.push(h?\"(text (\"+h+\") \"+g+\")\":g)}return\"(exp \"+b.join(\" \")+\")\"};\nsre.AcssRenderer.prototype.error=function(a){return'(error \"'+sre.EventUtil.Move[a.toString()]+'\")'};sre.AcssRenderer.prototype.prosody_=function(a){for(var b=a.open,c=[],d=0,e;e=b[d];d++)c.push(this.prosodyElement(e,a[e]));return c.join(\" \")};\nsre.AcssRenderer.prototype.prosodyElement=function(a,b){b=this.applyScaleFunction(b);switch(a){case sre.Engine.personalityProps.RATE:return\"(richness . \"+b+\")\";case sre.Engine.personalityProps.PITCH:return\"(average-pitch . \"+b+\")\";case sre.Engine.personalityProps.VOLUME:return\"(stress . \"+b+\")\"}return\"(value . \"+b+\")\"};sre.AcssRenderer.prototype.pause=function(a){return\"(pause . \"+this.pauseValue(a[sre.Engine.personalityProps.PAUSE])+\")\"};sre.PunctuationRenderer=function(){sre.AbstractAudioRenderer.call(this)};goog.inherits(sre.PunctuationRenderer,sre.AbstractAudioRenderer);\nsre.PunctuationRenderer.prototype.markup=function(a){a=sre.AudioUtil.personalityMarkup(a);for(var b=\"\",c=null,d=!1,e=0,f;f=a[e];e++)sre.AudioUtil.isMarkupElement(f)||(sre.AudioUtil.isPauseElement(f)?d&&(c=sre.AudioUtil.mergePause(c,f,Math.max)):(c&&(b+=this.pause(c[sre.Engine.personalityProps.PAUSE]),c=null),b+=(d?this.getSeparator():\"\")+this.merge(f.span),d=!0));return b};sre.PunctuationRenderer.PAUSE_PUNCTUATION_={\"short\":\",\",medium:\";\",\"long\":\".\"};\nsre.PunctuationRenderer.prototype.pause=function(a){return sre.PunctuationRenderer.PAUSE_PUNCTUATION_[\"number\"===typeof a?250>=a?\"short\":500>=a?\"medium\":\"long\":a]||\"\"};sre.XmlRenderer=function(){sre.MarkupRenderer.call(this)};goog.inherits(sre.XmlRenderer,sre.MarkupRenderer);\nsre.XmlRenderer.prototype.markup=function(a){this.setScaleFunction(-2,2,-100,100,2);a=sre.AudioUtil.personalityMarkup(a);for(var b=[],c=[],d=0,e;e=a[d];d++)if(e.span)b.push(this.merge(e.span));else if(sre.AudioUtil.isPauseElement(e))b.push(this.pause(e));else{if(e.close.length)for(var f=0;f<e.close.length;f++){var g=c.pop();if(-1===e.close.indexOf(g))throw new sre.Engine.Error(\"Unknown closing markup element: \"+g);b.push(this.closeTag(g))}e.open.length&&sre.AudioUtil.sortClose(e.open.slice(),a.slice(d+\n1)).forEach(goog.bind(function(h){b.push(this.prosodyElement(h,e[h]));c.push(h)},this))}return b.join(\" \")};sre.XmlRenderer.prototype.closeTag=goog.abstractMethod;sre.SableRenderer=function(){sre.XmlRenderer.call(this)};goog.inherits(sre.SableRenderer,sre.XmlRenderer);sre.SableRenderer.prototype.finalize=function(a){return'<?xml version=\"1.0\"?><!DOCTYPE SABLE PUBLIC \"-//SABLE//DTD SABLE speech mark up//EN\" \"Sable.v0_2.dtd\" []><SABLE>'+this.getSeparator()+a+this.getSeparator()+\"</SABLE>\"};sre.SableRenderer.prototype.pause=function(a){return'<BREAK MSEC=\"'+this.pauseValue(a[sre.Engine.personalityProps.PAUSE])+'\"/>'};\nsre.SableRenderer.prototype.prosodyElement=function(a,b){b=this.applyScaleFunction(b);switch(a){case sre.Engine.personalityProps.PITCH:return'<PITCH RANGE=\"'+b+'%\">';case sre.Engine.personalityProps.RATE:return'<RATE SPEED=\"'+b+'%\">';case sre.Engine.personalityProps.VOLUME:return'<VOLUME LEVEL=\"'+b+'%\">';default:return\"<\"+a.toUpperCase()+' VALUE=\"'+b+'\">'}};sre.SableRenderer.prototype.closeTag=function(a){return\"</\"+a.toUpperCase()+\">\"};sre.SsmlRenderer=function(){sre.XmlRenderer.call(this)};goog.inherits(sre.SsmlRenderer,sre.XmlRenderer);sre.SsmlRenderer.prototype.finalize=function(a){return'<?xml version=\"1.0\"?><speak version=\"1.1\" xmlns=\"http://www.w3.org/2001/10/synthesis\"><prosody rate=\"'+sre.Engine.getInstance().getRate()+'%\">'+this.getSeparator()+a+this.getSeparator()+\"</prosody></speak>\"};sre.SsmlRenderer.prototype.pause=function(a){return'<break time=\"'+this.pauseValue(a[sre.Engine.personalityProps.PAUSE])+'ms\"/>'};\nsre.SsmlRenderer.prototype.prosodyElement=function(a,b){b=Math.floor(this.applyScaleFunction(b));b=0>b?b.toString():\"+\"+b.toString();return\"<prosody \"+a.toLowerCase()+'=\"'+b+(a===sre.Engine.personalityProps.VOLUME?\">\":'%\">')};sre.SsmlRenderer.prototype.closeTag=function(a){return\"</prosody>\"};sre.SsmlStepRenderer=function(){sre.SsmlRenderer.call(this)};goog.inherits(sre.SsmlStepRenderer,sre.SsmlRenderer);sre.SsmlStepRenderer.prototype.markup=function(a){sre.SsmlStepRenderer.MARKS={};return sre.SsmlStepRenderer.superClass_.markup.call(this,a)};sre.SsmlStepRenderer.CHARACTER_ATTR_=\"character\";sre.SsmlStepRenderer.MARKS={};\nsre.SsmlStepRenderer.prototype.merge=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=d.attributes.extid;e&&!sre.SsmlStepRenderer.MARKS[e]&&(b.push('<mark name=\"'+e+'\"/>'),sre.SsmlStepRenderer.MARKS[e]=!0);1===d.string.length&&d.string.match(/[a-zA-Z]/)?b.push('<say-as interpret-as=\"'+sre.SsmlStepRenderer.CHARACTER_ATTR_+'\">'+d.string+\"</say-as>\"):b.push(d.string)}return b.join(this.getSeparator())};sre.StringRenderer=function(){sre.AbstractAudioRenderer.call(this)};goog.inherits(sre.StringRenderer,sre.AbstractAudioRenderer);sre.StringRenderer.prototype.markup=function(a){var b=\"\";a=a.filter(function(g){return g.descriptionString()});if(!a.length)return b;for(var c=0;c<a.length-1;c++){var d=a[c],e=d.personality[sre.Engine.personalityProps.JOIN],f=\"nemeth\"===sre.Engine.getInstance().locale?\"\":this.getSeparator();e=\"undefined\"===typeof e?f:e;b+=d.descriptionString()+e}return b+=a[c].descriptionString()};sre.AuralRendering=function(){};goog.addSingletonGetter(sre.AuralRendering);sre.AuralRendering.prototype.setSeparator=function(a){var b=sre.AuralRendering.rendererMapping_[sre.Engine.getInstance().markup];b&&b.setSeparator(a)};sre.AuralRendering.prototype.getSeparator=function(){var a=sre.AuralRendering.rendererMapping_[sre.Engine.getInstance().markup];return a?a.getSeparator():\"\"};\nsre.AuralRendering.prototype.markup=function(a){var b=sre.AuralRendering.rendererMapping_[sre.Engine.getInstance().markup];return b?b.markup(a):\"\"};sre.AuralRendering.prototype.merge=function(a){var b=a.map(function(d){return{string:d,attributes:{}}}),c=sre.AuralRendering.rendererMapping_[sre.Engine.getInstance().markup];return c?c.merge(b):a.join()};\nsre.AuralRendering.prototype.finalize=function(a){var b=sre.AuralRendering.rendererMapping_[sre.Engine.getInstance().markup];return b?b.finalize(a):a};sre.AuralRendering.prototype.error=function(a){var b=sre.AuralRendering.rendererMapping_[sre.Engine.getInstance().markup];return b?b.error(a):\"\"};sre.AuralRendering.registerRenderer=function(a,b){sre.AuralRendering.rendererMapping_[a]=b};\nsre.AuralRendering.ofType=function(a){return sre.AuralRendering.rendererMapping_[sre.Engine.getInstance().markup]instanceof a};sre.AuralRendering.rendererMapping_={};sre.AuralRendering.registerRenderer(sre.Engine.Markup.NONE,new sre.StringRenderer);sre.AuralRendering.registerRenderer(sre.Engine.Markup.PUNCTUATION,new sre.PunctuationRenderer);sre.AuralRendering.registerRenderer(sre.Engine.Markup.ACSS,new sre.AcssRenderer);sre.AuralRendering.registerRenderer(sre.Engine.Markup.SABLE,new sre.SableRenderer);\nsre.AuralRendering.xmlInstance=new sre.SsmlRenderer;sre.AuralRendering.registerRenderer(sre.Engine.Markup.VOICEXML,sre.AuralRendering.xmlInstance);sre.AuralRendering.registerRenderer(sre.Engine.Markup.SSML,sre.AuralRendering.xmlInstance);sre.AuralRendering.registerRenderer(sre.Engine.Markup.SSML_STEP,new sre.SsmlStepRenderer);sre.WalkerUtil={};sre.WalkerUtil.splitAttribute=function(a){return a?a.split(/,/):[]};sre.WalkerUtil.getAttribute=function(a,b){return sre.DomUtil.getDataAttribute(a,b)};sre.WalkerUtil.getSemanticRoot=function(a){if(a.hasAttribute(sre.EnrichMathml.Attribute.TYPE)&&!a.hasAttribute(sre.EnrichMathml.Attribute.PARENT))return a;for(var b=sre.DomUtil.querySelectorAllByAttr(a,sre.EnrichMathml.Attribute.TYPE),c=0,d;d=b[c];c++)if(!d.hasAttribute(sre.EnrichMathml.Attribute.PARENT))return d;return a};\nsre.WalkerUtil.getBySemanticId=function(a,b){return a.getAttribute(sre.EnrichMathml.Attribute.ID)===b?a:sre.DomUtil.querySelectorAllByAttrValue(a,sre.EnrichMathml.Attribute.ID,b)[0]};sre.RebuildStree=function(a){this.factory=new sre.SemanticNodeFactory;this.nodeDict={};this.mathml=a;this.mmlRoot=sre.WalkerUtil.getSemanticRoot(a);this.streeRoot=this.assembleTree(this.mmlRoot);this.stree=sre.SemanticTree.fromNode(this.streeRoot,this.mathml);this.xml=this.stree.xml();sre.SemanticProcessor.getInstance().setNodeFactory(this.factory)};sre.RebuildStree.prototype.getTree=function(){return this.stree};\nsre.RebuildStree.addAttributes=function(a,b,c){c&&1===b.childNodes.length&&b.childNodes[0].nodeType!==sre.DomUtil.NodeType.TEXT_NODE&&sre.SemanticUtil.addAttributes(a,b.childNodes[0]);sre.SemanticUtil.addAttributes(a,b)};\nsre.RebuildStree.prototype.assembleTree=function(a){var b=this.makeNode(a),c=sre.WalkerUtil.splitAttribute(sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.CHILDREN)),d=sre.WalkerUtil.splitAttribute(sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.CONTENT));sre.RebuildStree.addAttributes(b,a,!(c.length||d.length));if(0===d.length&&0===c.length)return b.textContent=a.textContent,b;if(0<d.length){var e=sre.WalkerUtil.getBySemanticId(a,d[0]);e&&(e=sre.WalkerUtil.splitAttribute(sre.WalkerUtil.getAttribute(e,\nsre.EnrichMathml.Attribute.OPERATOR)),1<e.length&&(b.textContent=e[1]))}e=function(f){f=sre.WalkerUtil.getBySemanticId(a,f);f=this.assembleTree(f);f.parent=b;return f};b.contentNodes=d.map(goog.bind(e,this));b.childNodes=c.map(goog.bind(e,this));return(c=sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.COLLAPSED))?this.postProcess(b,c):b};\nsre.RebuildStree.prototype.makeNode=function(a){var b=sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.TYPE),c=sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.ROLE),d=sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.FONT),e=sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.ANNOTATION)||\"\",f=sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.ID),g=sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.EMBELLISHED);a=sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.FENCEPOINTER);\nf=this.createNode(parseInt(f,10));f.type=b;f.role=c;f.font=d?d:sre.SemanticAttr.Font.UNKNOWN;f.parseAnnotation(e);a&&(f.fencePointer=a);g&&(f.embellished=g);return f};sre.RebuildStree.isPunctuated=function(a){return!sre.SemanticSkeleton.simpleCollapseStructure(a)&&a[1]&&sre.SemanticSkeleton.contentCollapseStructure(a[1])};sre.RebuildStree.prototype.makePunctuation=function(a){a=this.createNode(a);a.updateContent(sre.SemanticAttr.invisibleComma());a.role=sre.SemanticAttr.Role.DUMMY;return a};\nsre.RebuildStree.prototype.makePunctuated=function(a,b,c){var d=this.createNode(b[0]);d.type=sre.SemanticAttr.Type.PUNCTUATED;d.embellished=a.embellished;d.fencePointer=a.fencePointer;d.role=c;a=b.splice(1,1)[0].slice(1);d.contentNodes=a.map(goog.bind(this.makePunctuation,this));this.collapsedChildren_(b)};sre.RebuildStree.prototype.makeEmpty=function(a,b,c){b=this.createNode(b);b.type=sre.SemanticAttr.Type.EMPTY;b.embellished=a.embellished;b.fencePointer=a.fencePointer;b.role=c};\nsre.RebuildStree.prototype.makeIndex=function(a,b,c){sre.RebuildStree.isPunctuated(b)?this.makePunctuated(a,b,c):sre.SemanticSkeleton.simpleCollapseStructure(b)&&!this.nodeDict[b.toString()]&&this.makeEmpty(a,b,c)};\nsre.RebuildStree.prototype.postProcess=function(a,b){b=sre.SemanticSkeleton.fromString(b).array;if(a.type===sre.SemanticAttr.Role.SUBSUP){var c=this.createNode(b[1][0]);c.type=sre.SemanticAttr.Type.SUBSCRIPT;c.role=sre.SemanticAttr.Role.SUBSUP;a.type=sre.SemanticAttr.Type.SUPERSCRIPT;c.embellished=a.embellished;c.fencePointer=a.fencePointer;this.makeIndex(a,b[1][2],sre.SemanticAttr.Role.RIGHTSUB);this.makeIndex(a,b[2],sre.SemanticAttr.Role.RIGHTSUPER);this.collapsedChildren_(b);return a}if(a.type===\nsre.SemanticAttr.Type.SUBSCRIPT)return this.makeIndex(a,b[2],sre.SemanticAttr.Role.RIGHTSUB),this.collapsedChildren_(b),a;if(a.type===sre.SemanticAttr.Type.SUPERSCRIPT)return this.makeIndex(a,b[2],sre.SemanticAttr.Role.RIGHTSUPER),this.collapsedChildren_(b),a;if(a.type===sre.SemanticAttr.Type.TENSOR)return this.makeIndex(a,b[2],sre.SemanticAttr.Role.LEFTSUB),this.makeIndex(a,b[3],sre.SemanticAttr.Role.LEFTSUPER),this.makeIndex(a,b[4],sre.SemanticAttr.Role.RIGHTSUB),this.makeIndex(a,b[5],sre.SemanticAttr.Role.RIGHTSUPER),\nthis.collapsedChildren_(b),a;if(a.type===sre.SemanticAttr.Type.PUNCTUATED)return sre.RebuildStree.isPunctuated(b)&&(b=b.splice(1,1)[0].slice(1),a.contentNodes=b.map(goog.bind(this.makePunctuation,this))),a;a.type===sre.SemanticAttr.Role.UNDEROVER&&(c=this.createNode(b[1][0]),a.childNodes[1].role===sre.SemanticAttr.Role.OVERACCENT?(c.type=sre.SemanticAttr.Type.OVERSCORE,a.type=sre.SemanticAttr.Type.UNDERSCORE):(c.type=sre.SemanticAttr.Type.UNDERSCORE,a.type=sre.SemanticAttr.Type.OVERSCORE),c.role=\nsre.SemanticAttr.Role.UNDEROVER,c.embellished=a.embellished,c.fencePointer=a.fencePointer,this.collapsedChildren_(b));return a};sre.RebuildStree.prototype.createNode=function(a){var b=this.factory.makeNode(a);return this.nodeDict[a.toString()]=b};\nsre.RebuildStree.prototype.collapsedChildren_=function(a){var b=goog.bind(function(c){var d=this.nodeDict[c[0]];d.childNodes=[];for(var e=1,f=c.length;e<f;e++){var g=c[e];d.childNodes.push(sre.SemanticSkeleton.simpleCollapseStructure(g)?this.nodeDict[g]:b(g))}return d},this);b(a)};sre.SpeechGenerator=function(){};sre.SpeechGenerator.prototype.getSpeech=function(a,b){};sre.SpeechGenerator.prototype.getRebuilt=function(){};sre.SpeechGenerator.prototype.setRebuilt=function(a){};sre.SpeechGenerator.prototype.setOptions=function(a){};sre.SpeechGenerator.prototype.getOptions=function(){};sre.SpeechGenerator.prototype.start=function(){};sre.SpeechGenerator.prototype.end=function(){};sre.AuditoryDescription=function(a){this.context=a.context||\"\";this.text=a.text||\"\";this.userValue=a.userValue||\"\";this.annotation=a.annotation||\"\";this.attributes=a.attributes||{};this.personality=a.personality||{}};sre.AuditoryDescription.create=function(a,b){a.text=sre.Grammar.getInstance().apply(a.text,b||{});return new sre.AuditoryDescription(a)};sre.AuditoryDescription.prototype.isEmpty=function(){return 0==this.context.length&&0==this.text.length&&0==this.userValue.length&&0==this.annotation.length};\nsre.AuditoryDescription.prototype.clone=function(){if(this.personality){var a={};for(var b in this.personality)a=this.personality[b]}if(this.attributes){var c={};for(b in this.attributes)c=this.attributes[b]}return new sre.AuditoryDescription({context:this.context,text:this.text,userValue:this.userValue,annotation:this.annotation,personality:a,attributes:c})};\nsre.AuditoryDescription.prototype.toString=function(){return'AuditoryDescription(context=\"'+this.context+'\"  text=\"'+this.text+'\"  userValue=\"'+this.userValue+'\"  annotation=\"'+this.annotation+'\")'};sre.AuditoryDescription.prototype.descriptionString=function(){return this.context&&this.text?this.context+\" \"+this.text:this.context||this.text};sre.AuditoryDescription.prototype.descriptionSpan=function(){return new sre.Span(this.descriptionString(),this.attributes)};\nsre.AuditoryDescription.prototype.equals=function(a){return this.context==a.context&&this.text==a.text&&this.userValue==a.userValue&&this.annotation==a.annotation};sre.SpeechRule=function(a,b,c,d){this.name=a;this.dynamicCstr=b;this.precondition=c;this.action=d;this.context=null};sre.SpeechRule.prototype.toString=function(){return this.name+\" | \"+this.dynamicCstr.toString()+\" | \"+this.precondition.toString()+\" ==> \"+this.action.toString()};sre.SpeechRule.Type={NODE:\"NODE\",MULTI:\"MULTI\",TEXT:\"TEXT\",PERSONALITY:\"PERSONALITY\"};\nsre.SpeechRule.Type.fromString=function(a){switch(a){case \"[n]\":return sre.SpeechRule.Type.NODE;case \"[m]\":return sre.SpeechRule.Type.MULTI;case \"[t]\":return sre.SpeechRule.Type.TEXT;case \"[p]\":return sre.SpeechRule.Type.PERSONALITY;default:throw\"Parse error: \"+a;}};\nsre.SpeechRule.Type.toString=function(a){switch(a){case sre.SpeechRule.Type.NODE:return\"[n]\";case sre.SpeechRule.Type.MULTI:return\"[m]\";case sre.SpeechRule.Type.TEXT:return\"[t]\";case sre.SpeechRule.Type.PERSONALITY:return\"[p]\";default:throw\"Unknown type error: \"+a;}};sre.SpeechRule.Component=function(a){this.type=a.type;this.content=a.content;this.attributes=a.attributes;this.grammar=a.grammar};\nsre.SpeechRule.Component.fromString=function(a){var b={};b.type=sre.SpeechRule.Type.fromString(a.substring(0,3));a=a.slice(3).trim();if(!a)throw new sre.SpeechRule.OutputError(\"Missing content.\");switch(b.type){case sre.SpeechRule.Type.TEXT:if('\"'==a[0]){var c=sre.SpeechRule.splitString_(a,\"\\\\(\")[0].trim();if('\"'!=c.slice(-1))throw new sre.SpeechRule.OutputError(\"Invalid string syntax.\");b.content=c;a=a.slice(c.length).trim();-1==a.indexOf(\"(\")&&(a=\"\");break}case sre.SpeechRule.Type.NODE:case sre.SpeechRule.Type.MULTI:c=\na.indexOf(\" (\"),-1==c?(b.content=a.trim(),a=\"\"):(b.content=a.substring(0,c).trim(),a=a.slice(c).trim())}a&&(a=sre.SpeechRule.Component.attributesFromString(a),a.grammar&&(b.grammar=a.grammar,delete a.grammar),Object.keys(a).length&&(b.attributes=a));return b=new sre.SpeechRule.Component(b)};sre.SpeechRule.Component.prototype.toString=function(){var a=\"\"+sre.SpeechRule.Type.toString(this.type);a+=this.content?\" \"+this.content:\"\";var b=this.attributesToString();return a+(b?\" \"+b:\"\")};\nsre.SpeechRule.Component.grammarFromString=function(a){return sre.Grammar.parseInput(a)};sre.SpeechRule.Component.prototype.grammarToString=function(){return this.getGrammar().join(\":\")};sre.SpeechRule.Component.prototype.getGrammar=function(){var a=[],b;for(b in this.grammar)!0===this.grammar[b]?a.push(b):!1===this.grammar[b]?a.push(\"!\"+b):a.push(b+\"=\"+this.grammar[b]);return a};\nsre.SpeechRule.Component.attributesFromString=function(a){if(\"(\"!=a[0]||\")\"!=a.slice(-1))throw new sre.SpeechRule.OutputError(\"Invalid attribute expression: \"+a);var b={};a=sre.SpeechRule.splitString_(a.slice(1,-1),\",\");for(var c=0,d=a.length;c<d;c++){var e=a[c],f=e.indexOf(\":\");if(-1==f)b[e.trim()]=\"true\";else{var g=e.substring(0,f).trim();e=e.slice(f+1).trim();b[g]=\"grammar\"===g?sre.SpeechRule.Component.grammarFromString(e):b[g]=e}}return b};\nsre.SpeechRule.Component.prototype.attributesToString=function(){var a=this.getAttributes(),b=this.grammarToString();b&&a.push(\"grammar:\"+b);return 0<a.length?\"(\"+a.join(\", \")+\")\":\"\"};sre.SpeechRule.Component.prototype.getAttributes=function(){var a=[],b;for(b in this.attributes){var c=this.attributes[b];\"true\"===c?a.push(b):a.push(b+\":\"+c)}return a};sre.SpeechRule.Action=function(a){this.components=a};\nsre.SpeechRule.Action.fromString=function(a){a=sre.SpeechRule.splitString_(a,\";\").filter(function(f){return f.match(/\\S/)}).map(function(f){return f.trim()});for(var b=[],c=0,d=a.length;c<d;c++){var e=sre.SpeechRule.Component.fromString(a[c]);e&&b.push(e)}return new sre.SpeechRule.Action(b)};sre.SpeechRule.Action.prototype.toString=function(){return this.components.map(function(a){return a.toString()}).join(\"; \")};sre.SpeechRule.Precondition=function(a,b){this.query=a;this.constraints=b||[]};\nsre.SpeechRule.Precondition.prototype.toString=function(){var a=this.constraints.join(\", \");return this.query+\", \"+a};\nsre.SpeechRule.splitString_=function(a,b){for(var c=[],d=\"\";\"\"!=a;){var e=a.search(b);if(-1==e){if(0!=(a.match(/\"/g)||[]).length%2)throw new sre.SpeechRule.OutputError(\"Invalid string in expression: \"+a);c.push(d+a);a=d=\"\"}else if(0==(a.substring(0,e).match(/\"/g)||[]).length%2)c.push(d+a.substring(0,e)),d=\"\",a=a.substring(e+1);else{var f=a.substring(e).search('\"');if(-1==f)throw new sre.SpeechRule.OutputError(\"Invalid string in expression: \"+a);d+=a.substring(0,e+f+1);a=a.substring(e+f+1)}}d&&c.push(d);\nreturn c};sre.SpeechRule.OutputError=function(a){sre.Engine.Error.call(this,a);this.name=\"RuleError\"};goog.inherits(sre.SpeechRule.OutputError,sre.Engine.Error);sre.SpeechRuleFunctions=function(){};sre.SpeechRuleFunctions.Store_=function(a,b){this.prefix_=a;this.store_=b};sre.SpeechRuleFunctions.Store_.prototype.add=function(a,b){this.checkCustomFunctionSyntax_(a)&&(this.store_[a]=b)};sre.SpeechRuleFunctions.Store_.prototype.addStore=function(a){for(var b=Object.keys(a.store_),c=0,d;d=b[c];c++)this.add(d,a.store_[d])};sre.SpeechRuleFunctions.Store_.prototype.lookup=function(a){return this.store_[a]};\nsre.SpeechRuleFunctions.CustomQueries=function(){sre.SpeechRuleFunctions.Store_.call(this,\"CQF\",{})};goog.inherits(sre.SpeechRuleFunctions.CustomQueries,sre.SpeechRuleFunctions.Store_);sre.SpeechRuleFunctions.CustomStrings=function(){sre.SpeechRuleFunctions.Store_.call(this,\"CSF\",{})};goog.inherits(sre.SpeechRuleFunctions.CustomStrings,sre.SpeechRuleFunctions.Store_);sre.SpeechRuleFunctions.ContextFunctions=function(){sre.SpeechRuleFunctions.Store_.call(this,\"CTXF\",{})};\ngoog.inherits(sre.SpeechRuleFunctions.ContextFunctions,sre.SpeechRuleFunctions.Store_);sre.SpeechRuleFunctions.Store_.prototype.checkCustomFunctionSyntax_=function(a){return a.match(new RegExp(\"^\"+this.prefix_))?!0:(console.error(\"FunctionError: Invalid function name. Expected prefix \"+this.prefix_),!1)};sre.SpeechRuleContext=function(){this.customQueries=new sre.SpeechRuleFunctions.CustomQueries;this.customStrings=new sre.SpeechRuleFunctions.CustomStrings;this.contextFunctions=new sre.SpeechRuleFunctions.ContextFunctions};sre.SpeechRuleContext.prototype.applyCustomQuery=function(a,b){return(b=this.customQueries.lookup(b))?b(a):null};sre.SpeechRuleContext.prototype.applySelector=function(a,b){return this.applyCustomQuery(a,b)||sre.XpathUtil.evalXPath(b,a)};\nsre.SpeechRuleContext.prototype.applyQuery=function(a,b){a=this.applySelector(a,b);return 0<a.length?a[0]:null};sre.SpeechRuleContext.prototype.applyConstraint=function(a,b){return!!this.applyQuery(a,b)||sre.XpathUtil.evaluateBoolean(b,a)};sre.SpeechRuleContext.prototype.constructString=function(a,b){if(!b)return\"\";if('\"'==b.charAt(0))return b.slice(1,-1);var c=this.customStrings.lookup(b);return c?c(a):sre.XpathUtil.evaluateString(b,a)};\nsre.SpeechRuleContext.prototype.parse=function(a){for(var b=0,c;c=a[b];b++)({CQF:this.customQueries,CSF:this.customStrings,CTXF:this.contextFunctions})[c[0]].add(c[1],c[2])};sre.SpeechRuleEvaluator=function(){};sre.SpeechRuleEvaluator.prototype.evaluateDefault=goog.abstractMethod;sre.SpeechRuleStore=function(){};sre.SpeechRuleStore.prototype.addRule=goog.abstractMethod;sre.SpeechRuleStore.prototype.deleteRule=goog.abstractMethod;sre.SpeechRuleStore.prototype.findRule=goog.abstractMethod;sre.SpeechRuleStore.prototype.findAllRules=goog.abstractMethod;sre.SpeechRuleStore.prototype.lookupRule=goog.abstractMethod;sre.SpeechRuleStore.prototype.defineRule=goog.abstractMethod;sre.TrieNode=function(){};sre.TrieNode.prototype.getConstraint=function(){};sre.TrieNode.prototype.getKind=function(){};sre.TrieNode.prototype.applyTest=function(a){};sre.TrieNode.prototype.addChild=function(a){};sre.TrieNode.prototype.getChild=function(a){};sre.TrieNode.prototype.getChildren=function(){};sre.TrieNode.prototype.findChildren=function(a){};sre.TrieNode.Kind={ROOT:\"root\",DYNAMIC:\"dynamic\",QUERY:\"query\",BOOLEAN:\"boolean\",STATIC:\"static\"};sre.AbstractTrieNode=function(a,b){this.constraint=a;this.test=b;this.children_={};this.kind=sre.TrieNode.Kind.ROOT};sre.AbstractTrieNode.prototype.getConstraint=function(){return this.constraint};sre.AbstractTrieNode.prototype.getKind=function(){return this.kind};sre.AbstractTrieNode.prototype.applyTest=function(a){return this.test(a)};sre.AbstractTrieNode.prototype.addChild=function(a){var b=a.getConstraint(),c=this.children_[b];this.children_[b]=a;return c};\nsre.AbstractTrieNode.prototype.getChild=function(a){return this.children_[a]};sre.AbstractTrieNode.prototype.getChildren=function(){var a=[],b;for(b in this.children_)a.push(this.children_[b]);return a};sre.AbstractTrieNode.prototype.findChildren=function(a){var b=[],c;for(c in this.children_){var d=this.children_[c];d.applyTest(a)&&b.push(d)}return b};sre.AbstractTrieNode.prototype.toString=function(){return this.constraint};\nsre.StaticTrieNode=function(a,b){sre.AbstractTrieNode.call(this,a,b);this.kind=sre.TrieNode.Kind.STATIC;this.rule_=null};goog.inherits(sre.StaticTrieNode,sre.AbstractTrieNode);sre.StaticTrieNode.prototype.getRule=function(){return this.rule_};sre.StaticTrieNode.prototype.setRule=function(a){this.rule_&&sre.Debugger.getInstance().output(\"Replacing rule \"+this.rule_+\" with \"+a);this.rule_=a};\nsre.StaticTrieNode.prototype.toString=function(){return this.getRule()?this.constraint+\"\\n==> \"+this.getRule().action:this.constraint};sre.TrieNodeFactory={};sre.TrieNodeFactory.getNode=function(a,b,c){switch(a){case sre.TrieNode.Kind.ROOT:return new sre.RootTrieNode;case sre.TrieNode.Kind.DYNAMIC:return new sre.DynamicTrieNode(b);case sre.TrieNode.Kind.QUERY:return new sre.QueryTrieNode(b,c);case sre.TrieNode.Kind.BOOLEAN:return new sre.BooleanTrieNode(b,c);default:return null}};sre.RootTrieNode=function(){sre.AbstractTrieNode.call(this,\"\",function(){return!0});this.kind=sre.TrieNode.Kind.ROOT};goog.inherits(sre.RootTrieNode,sre.AbstractTrieNode);\nsre.DynamicTrieNode=function(a){sre.AbstractTrieNode.call(this,a,function(b){return b===a});this.kind=sre.TrieNode.Kind.DYNAMIC};goog.inherits(sre.DynamicTrieNode,sre.AbstractTrieNode);\nsre.TrieNodeFactory.constraintTest_=function(a){if(a.match(/^self::\\*$/))return function(f){return!0};if(a.match(/^self::\\w+$/)){var b=a.slice(6).toUpperCase();return function(f){return f.tagName&&sre.DomUtil.tagName(f)===b}}if(a.match(/^self::\\w+:\\w+$/)){a=a.split(\":\");var c=sre.XpathUtil.resolveNameSpace(a[2]);if(!c)return null;b=a[3].toUpperCase();return function(f){return f.localName&&f.localName.toUpperCase()===b&&f.namespaceURI===c}}if(a.match(/^@\\w+$/)){var d=a.slice(1);return function(f){return f.hasAttribute&&\nf.hasAttribute(d)}}if(a.match(/^@\\w+=\"[\\w\\d ]+\"$/)){a=a.split(\"=\");d=a[0].slice(1);var e=a[1].slice(1,-1);return function(f){return f.hasAttribute&&f.hasAttribute(d)&&f.getAttribute(d)===e}}return a.match(/^@\\w+!=\"[\\w\\d ]+\"$/)?(a=a.split(\"!=\"),d=a[0].slice(1),e=a[1].slice(1,-1),function(f){return!f.hasAttribute||!f.hasAttribute(d)||f.getAttribute(d)!==e}):a.match(/^contains\\(\\s*@grammar\\s*,\\s*\"[\\w\\d ]+\"\\s*\\)$/)?(a=a.split('\"'),e=a[1],function(f){return sre.Grammar.getInstance().getParameter(e)}):\na.match(/^not\\(\\s*contains\\(\\s*@grammar\\s*,\\s*\"[\\w\\d ]+\"\\s*\\)\\s*\\)$/)?(a=a.split('\"'),e=a[1],function(f){return!sre.Grammar.getInstance().getParameter(e)}):null};sre.QueryTrieNode=function(a,b){this.context_=b;sre.StaticTrieNode.call(this,a,sre.TrieNodeFactory.constraintTest_(a));this.kind=sre.TrieNode.Kind.QUERY};goog.inherits(sre.QueryTrieNode,sre.StaticTrieNode);sre.QueryTrieNode.prototype.applyTest=function(a){return this.test?this.test(a):this.context_.applyQuery(a,this.constraint)===a};\nsre.BooleanTrieNode=function(a,b){this.context_=b;sre.StaticTrieNode.call(this,a,sre.TrieNodeFactory.constraintTest_(a));this.kind=sre.TrieNode.Kind.BOOLEAN};goog.inherits(sre.BooleanTrieNode,sre.StaticTrieNode);sre.BooleanTrieNode.prototype.applyTest=function(a){return this.test?this.test(a):this.context_.applyConstraint(a,this.constraint)};sre.Trie=function(a){this.store=a;this.root=sre.TrieNodeFactory.getNode(sre.TrieNode.Kind.ROOT,\"\",this.store.context)};sre.Trie.prototype.addRule=function(a){for(var b=this.root,c=a.context,d=a.dynamicCstr.getValues(),e=0,f=d.length;e<f;e++)b=this.addNode_(b,d[e],sre.TrieNode.Kind.DYNAMIC,c);b=this.addNode_(b,a.precondition.query,sre.TrieNode.Kind.QUERY,c);d=a.precondition.constraints;e=0;for(f=d.length;e<f;e++)b=this.addNode_(b,d[e],sre.TrieNode.Kind.BOOLEAN,c);b.setRule(a)};\nsre.Trie.prototype.addNode_=function(a,b,c,d){var e=a.getChild(b);e||(e=sre.TrieNodeFactory.getNode(c,b,d),a.addChild(e));return e};\nsre.Trie.prototype.lookupRules=function(a,b){for(var c=[this.root],d=[];b.length;){for(var e=b.shift(),f=[];c.length;){var g=c.shift();g=g.getChildren();g.forEach(function(h){h.getKind()===sre.TrieNode.Kind.DYNAMIC&&-1===e.indexOf(h.getConstraint())||f.push(h)})}c=f.slice()}for(;c.length;)g=c.shift(),g.getRule&&(b=g.getRule())&&d.push(b),g=g.findChildren(a),c=c.concat(g);return d};\nsre.Trie.prototype.hasSubtrie=function(a){for(var b=this.root,c=0,d=a.length;c<d;c++)if(b=b.getChild(a[c]),!b)return!1;return!0};sre.Trie.prototype.toString=function(){return sre.Trie.printWithDepth_(this.root,0,\"\")};sre.Trie.prototype.collectRules=function(){return sre.Trie.collectRules_(this.root)};sre.Trie.prototype.order=function(){return sre.Trie.order_(this.root)};\nsre.Trie.printWithDepth_=function(a,b,c){var d=Array(b+2).join(b)+\": \";c+=d+a.toString()+\"\\n\";a=a.getChildren();d=0;for(var e;e=a[d];d++)c=sre.Trie.printWithDepth_(e,b+1,c);return c};sre.Trie.order_=function(a){a=a.getChildren();if(!a.length)return 0;var b=Math.max.apply(null,a.map(sre.Trie.order_));return Math.max(a.length,b)};\nsre.Trie.collectRules_=function(a){var b=[];for(a=[a];a.length;){var c=a.shift();if(c.getKind()===sre.TrieNode.Kind.QUERY||c.getKind()===sre.TrieNode.Kind.BOOLEAN){var d=c.getRule();d&&b.unshift(d)}a=a.concat(c.getChildren())}return b};sre.Trie.prototype.enumerate=function(a){return this.enumerate_(this.root,a)};\nsre.Trie.prototype.enumerate_=function(a,b){b=b||{};a=a.getChildren();for(var c=0,d;d=a[c];c++)d.kind===sre.TrieNode.Kind.DYNAMIC&&(b[d.getConstraint()]=this.enumerate_(d,b[d.getConstraint()]));return b};sre.BaseRuleStore=function(){this.context=new sre.SpeechRuleContext;this.customQueries=this.context.customQueries;this.customStrings=this.context.customStrings;this.contextFunctions=this.context.contextFunctions;this.speechRules_=[];this.trie=new sre.Trie(this);this.parseOrder=sre.DynamicCstr.DEFAULT_ORDER;this.parser=new sre.DynamicCstr.Parser(this.parseOrder);this.locale=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.LOCALE];this.modality=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.MODALITY];\nthis.domain=null;this.initialized=!1;this.parseMethods={Rule:goog.bind(this.defineRule,this)}};sre.BaseRuleStore.prototype.lookupRule=function(a,b){if(!a||a.nodeType!=sre.DomUtil.NodeType.ELEMENT_NODE&&a.nodeType!=sre.DomUtil.NodeType.TEXT_NODE)return null;a=this.trie.lookupRules(a,b.allProperties());return 0<a.length?this.pickMostConstraint_(b,a):null};\nsre.BaseRuleStore.prototype.defineRule=function(a,b,c,d,e){try{var f=sre.SpeechRule.Action.fromString(c),g=Array.prototype.slice.call(arguments,4),h=new sre.SpeechRule.Precondition(d,g),k=this.parseCstr(b);var l=new sre.SpeechRule(a,k,h,f)}catch(m){if(\"RuleError\"==m.name)return console.error(\"Rule Error \",d,\"(\"+b+\"):\",m.message),null;throw m;}this.addRule(l);return l};sre.BaseRuleStore.prototype.addRule=function(a){a.context=this.context;this.trie.addRule(a);this.speechRules_.unshift(a)};\nsre.BaseRuleStore.prototype.deleteRule=function(a){a=this.speechRules_.indexOf(a);-1!=a&&this.speechRules_.splice(a,1)};sre.BaseRuleStore.prototype.findRule=function(a){for(var b=0,c;c=this.speechRules_[b];b++)if(a(c))return c;return null};sre.BaseRuleStore.prototype.findAllRules=function(a){return this.speechRules_.filter(a)};sre.BaseRuleStore.prototype.evaluateDefault=function(a){return[sre.AuditoryDescription.create({text:a.textContent})]};\nsre.BaseRuleStore.prototype.debugSpeechRule=function(a,b){var c=a.precondition,d=a.context.applyQuery(b,c.query);sre.Debugger.getInstance().output(c.query,d?d.toString():d);c.constraints.forEach(goog.bind(function(e){sre.Debugger.getInstance().output(e,a.context.applyConstraint(b,e))},this))};sre.BaseRuleStore.prototype.initialize=goog.abstractMethod;\nsre.BaseRuleStore.prototype.removeDuplicates=function(a){for(var b=this.speechRules_.length-1,c;c=this.speechRules_[b];b--)c!=a&&a.dynamicCstr.equal(c.dynamicCstr)&&sre.BaseRuleStore.comparePreconditions_(c,a)&&this.speechRules_.splice(b,1)};\nsre.BaseRuleStore.strongQuery_=function(a,b){a=a.precondition.query;b=b.precondition.query;var c=a.match(/^self::\\*\\[@[\\w-]+\\]$/),d=b.match(/^self::\\*\\[@[\\w-]+\\]$/);if(c&&d)return 0;if(c)return(b=b.match(/^self::[\\w-]+\\[@[\\w-]+\\]$/))?1:-1;if(d)return(a=a.match(/^self::[\\w-]+\\[@[\\w-]+\\]$/))?-1:1;a=a.match(/^self::[\\w-]+\\[@[\\w-]+\\]$/);b=b.match(/^self::[\\w-]+\\[@[\\w-]+\\]$/);return a&&b?0:a?-1:b?1:0};\nsre.BaseRuleStore.prototype.pickMostConstraint_=function(a,b){var c=sre.Engine.getInstance().comparator;b.sort(function(d,e){return c.compare(d.dynamicCstr,e.dynamicCstr)||sre.BaseRuleStore.strongQuery_(d,e)||e.precondition.constraints.length-d.precondition.constraints.length});sre.Debugger.getInstance().generateOutput(goog.bind(function(){return b.map(function(d){return d.name+\"(\"+d.dynamicCstr.toString()+\")\"})},this));return b[0]};\nsre.BaseRuleStore.compareStaticConstraints_=function(a,b){if(a.length!=b.length)return!1;for(var c=0,d;d=a[c];c++)if(-1==b.indexOf(d))return!1;return!0};sre.BaseRuleStore.comparePreconditions_=function(a,b){a=a.precondition;b=b.precondition;return a.query!=b.query?!1:sre.BaseRuleStore.compareStaticConstraints_(a.constraints,b.constraints)};sre.BaseRuleStore.prototype.getSpeechRules=function(){return this.speechRules_};sre.BaseRuleStore.prototype.setSpeechRules=function(a){this.speechRules_=a};\nsre.BaseRuleStore.prototype.parseCstr=function(a){return this.parser.parse(this.locale+\".\"+this.modality+(this.domain?\".\"+this.domain:\"\")+\".\"+a)};sre.BaseRuleStore.prototype.parse=function(a){this.modality=a.modality||this.modality;this.locale=a.locale||this.locale;this.domain=a.domain||this.domain;this.context.parse(a.functions||[]);this.parseRules(a.rules||[])};sre.BaseRuleStore.prototype.parseRules=function(a){for(var b=0,c;c=a[b];b++){var d=c[0],e=this.parseMethods[d];d&&e&&e.apply(this,c.slice(1))}};sre.MathStore=function(){sre.BaseRuleStore.call(this);this.initializer=[];this.parseMethods.Alias=goog.bind(this.defineRuleAlias,this);this.parseMethods.Aliases=goog.bind(this.defineRulesAlias,this);this.parseMethods.UniqueAlias=goog.bind(this.defineUniqueRuleAlias,this);this.parseMethods.SpecializedRule=goog.bind(this.defineSpecialisedRule,this)};goog.inherits(sre.MathStore,sre.BaseRuleStore);\nsre.MathStore.prototype.initialize=function(){if(!this.initialized){for(var a=0,b;b=this.initializer[a];a++)b(this);this.setSpeechRules(this.trie.collectRules());this.initialized=!0}};\nsre.MathStore.prototype.defineUniqueRuleAlias=function(a,b,c,d){var e=this.parseCstr(b),f=this.findRule(goog.bind(function(g){return g.name==a&&e.equal(g.dynamicCstr)},this));if(!f)throw new sre.SpeechRule.OutputError(\"Rule named \"+a+\" with style \"+b+\" does not exist.\");this.addAlias_(f,c,Array.prototype.slice.call(arguments,3))};\nsre.MathStore.prototype.defineRuleAlias=function(a,b,c){var d=this.findRule(function(e){return e.name==a});if(!d)throw new sre.SpeechRule.OutputError(\"Rule with named \"+a+\" does not exist.\");this.addAlias_(d,b,Array.prototype.slice.call(arguments,2))};\nsre.MathStore.prototype.defineRulesAlias=function(a,b,c){var d=this.findAllRules(function(g){return g.name==a});if(0==d.length)throw new sre.SpeechRule.OutputError(\"Rule with name \"+a+\" does not exist.\");var e=Array.prototype.slice.call(arguments,2),f=[];d.forEach(goog.bind(function(g){a:{var h=g.dynamicCstr.toString();for(var k=g.action.toString(),l=0,m;m=f[l];l++)if(m.action===k&&m.cstr===h){h=!1;break a}f.push({cstr:h,action:k});h=!0}h&&this.addAlias_(g,b,e)},this))};\nsre.MathStore.prototype.addAlias_=function(a,b,c){b=new sre.SpeechRule.Precondition(b,c);b=new sre.SpeechRule(a.name,a.dynamicCstr,b,a.action);b.name=a.name;this.addRule(b)};\nsre.MathStore.prototype.defineSpecialisedRule=function(a,b,c,d){var e=this.parseCstr(b),f=this.findRule(goog.bind(function(g){return g.name==a&&e.equal(g.dynamicCstr)},this));if(!f)throw new sre.SpeechRule.OutputError(\"Rule named \"+a+\" with style \"+b+\" does not exist.\");b=this.parseCstr(c);d=d?sre.SpeechRule.Action.fromString(d):f.action;f=new sre.SpeechRule(f.name,b,f.precondition,d);this.addRule(f)};sre.MathStore.prototype.evaluateDefault=function(a){return this.evaluateString_(a.textContent)};\nsre.MathStore.prototype.evaluateString_=function(a){var b=[];if(a.match(/^\\s+$/))return b;var c=this.matchNumber_(a);if(c&&c.length===a.length)return b.push(this.evaluate_(c.number)),b;a=sre.BaseUtil.removeEmpty(a.replace(/\\s/g,\" \").split(\" \"));for(var d=0;c=a[d];d++)if(1==c.length)b.push(this.evaluate_(c));else if(c.match(new RegExp(\"^[\"+sre.Messages.REGEXP.TEXT+\"]+$\")))b.push(this.evaluate_(c));else for(var e=c;e;){c=this.matchNumber_(e);var f=e.match(new RegExp(\"^[\"+sre.Messages.REGEXP.TEXT+\"]+\"));\nc?(b.push(this.evaluate_(c.number)),e=e.substring(c.length)):f?(b.push(this.evaluate_(f[0])),e=e.substring(f[0].length)):(c=e[0].charCodeAt(0),55296<=c&&56319>=c&&1<e.length&&!isNaN(e.charCodeAt(1))?(b.push(this.evaluate_(e.slice(0,2))),e=e.substring(2)):(b.push(this.evaluate_(e[0])),e=e.substring(1)))}return b};\nsre.MathStore.prototype.matchNumber_=function(a){var b=a.match(new RegExp(\"^\"+sre.Messages.REGEXP.NUMBER)),c=a.match(new RegExp(\"^\"+sre.Locale.en.REGEXP.NUMBER));if(!b&&!c)return null;var d=c&&c[0]===a;return b&&b[0]===a||!d?{number:b[0],length:b[0].length}:{number:c[0].replace(new RegExp(sre.Locale.en.REGEXP.DIGIT_GROUP,\"g\"),\"X\").replace(new RegExp(sre.Locale.en.REGEXP.DECIMAL_MARK,\"g\"),sre.Messages.REGEXP.DECIMAL_MARK).replace(/X/g,sre.Messages.REGEXP.DIGIT_GROUP.replace(/\\\\/g,\"\")),length:c[0].length}};\nsre.MathStore.prototype.evaluate_=function(a){return sre.AuditoryDescription.create({text:a},{adjust:!0,translate:!0})};sre.MathStore.prototype.parse=function(a){sre.MathStore.superClass_.parse.call(this,a);this.initializer=a.initialize||[]};sre.BrailleStore=function(){sre.MathStore.call(this);this.modality=\"braille\"};goog.inherits(sre.BrailleStore,sre.MathStore);\nsre.BrailleStore.prototype.evaluateDefault=function(a){a=a.textContent.slice(0);var b=[];if(a.match(/^\\s+$/))return b;for(;a;){var c=a[0],d=c.charCodeAt(0);55296<=d&&56319>=d&&1<a.length&&!isNaN(a.charCodeAt(1))?(b.push(sre.AuditoryDescription.create({text:a.slice(0,2)},{adjust:!0,translate:!0})),a=a.substring(2)):(b.push(sre.AuditoryDescription.create({text:c},{adjust:!0,translate:!0})),a=a.substring(1))}return b};sre.ClearspeakPreferences=function(a,b){sre.DynamicCstr.call(this,a);this.preference=b};goog.inherits(sre.ClearspeakPreferences,sre.DynamicCstr);sre.ClearspeakPreferences.prototype.equal=function(a){if(!sre.ClearspeakPreferences.superClass_.equal.call(this,a))return!1;var b=Object.keys(this.preference);a=a.preference;if(b.length!==Object.keys(a).length)return!1;for(var c=0,d;d=b[c];c++)if(this.preference[d]!==a[d])return!1;return!0};sre.ClearspeakPreferences.AUTO=\"Auto\";\nsre.ClearspeakPreferences.PREFERENCES=new sre.DynamicProperties({AbsoluteValue:[\"Auto\",\"AbsEnd\",\"Cardinality\",\"Determinant\"],Bar:[\"Auto\",\"Conjugate\"],Caps:[\"Auto\",\"SayCaps\"],CombinationPermutation:[\"Auto\",\"ChoosePermute\"],Currency:[\"Auto\",\"Position\",\"Prefix\"],Ellipses:[\"Auto\",\"AndSoOn\"],Exponent:[\"Auto\",\"AfterPower\",\"Ordinal\",\"OrdinalPower\",\"Exponent\"],Fraction:\"Auto EndFrac FracOver General GeneralEndFrac Ordinal Over OverEndFrac Per\".split(\" \"),Functions:[\"Auto\",\"None\",\"Reciprocal\"],ImpliedTimes:[\"Auto\",\n\"MoreImpliedTimes\",\"None\"],Log:[\"Auto\",\"LnAsNaturalLog\"],Matrix:\"Auto Combinatoric EndMatrix EndVector SilentColNum SpeakColNum Vector\".split(\" \"),MultiLineLabel:\"Auto Case Constraint Equation Line None Row Step\".split(\" \"),MultiLineOverview:[\"Auto\",\"None\"],MultiLinePausesBetweenColumns:[\"Auto\",\"Long\",\"Short\"],MultsymbolDot:[\"Auto\",\"Dot\"],MultsymbolX:[\"Auto\",\"By\",\"Cross\"],Paren:\"Auto CoordPoint Interval Silent Speak SpeakNestingLevel\".split(\" \"),Prime:[\"Auto\",\"Angle\",\"Length\"],Roots:[\"Auto\",\"PosNegSqRoot\",\n\"PosNegSqRootEnd\",\"RootEnd\"],SetMemberSymbol:[\"Auto\",\"Belongs\",\"Element\",\"Member\"],Sets:[\"Auto\",\"SilentBracket\",\"woAll\"],TriangleSymbol:[\"Auto\",\"Delta\"],Trig:[\"Auto\",\"ArcTrig\",\"TrigInverse\",\"Reciprocal\"],VerticalLine:[\"Auto\",\"Divides\",\"Given\",\"SuchThat\"]});\nsre.ClearspeakPreferences.comparator=function(){return new sre.ClearspeakPreferences.Comparator(sre.Engine.getInstance().dynamicCstr,sre.DynamicProperties.create([sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.LOCALE]],[sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.MODALITY]],[sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.DOMAIN]],[sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.STYLE]]))};\nsre.ClearspeakPreferences.Comparator=function(a,b){sre.DynamicCstr.DefaultComparator.call(this,a,b);this.preference=a.preference||{}};goog.inherits(sre.ClearspeakPreferences.Comparator,sre.DynamicCstr.DefaultComparator);sre.ClearspeakPreferences.Comparator.prototype.match=function(a){if(!sre.ClearspeakPreferences.Comparator.superClass_.match.call(this,a))return!1;if(!a.preference)return!0;for(var b=Object.keys(a.preference),c=0,d;d=b[c];c++)if(this.preference[d]!==a.preference[d])return!1;return!0};\nsre.ClearspeakPreferences.Comparator.prototype.compare=function(a,b){var c=sre.ClearspeakPreferences.Comparator.superClass_.compare.call(this,a,b);if(0!==c)return c;if(!a.preference&&b.preference)return 1;if(a.preference&&!b.preference)return-1;if(!a.preference&&!b.preference)return 0;a=Object.keys(a.preference).length;b=Object.keys(b.preference).length;return a>b?-1:a<b?1:0};\nsre.ClearspeakPreferences.Parser=function(){sre.DynamicCstr.Parser.call(this,[sre.DynamicCstr.Axis.LOCALE,sre.DynamicCstr.Axis.MODALITY,sre.DynamicCstr.Axis.DOMAIN,sre.DynamicCstr.Axis.STYLE])};goog.inherits(sre.ClearspeakPreferences.Parser,sre.DynamicCstr.Parser);\nsre.ClearspeakPreferences.Parser.prototype.parse=function(a){var b=sre.ClearspeakPreferences.Parser.superClass_.parse.call(this,a);a=b.getValue(sre.DynamicCstr.Axis.STYLE);b=b.getValue(sre.DynamicCstr.Axis.LOCALE);var c={};a!==sre.DynamicCstr.DEFAULT_VALUE&&(c=this.fromPreference(a),a=this.toPreference(c));return new sre.ClearspeakPreferences({locale:b,modality:sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.MODALITY],domain:\"clearspeak\",style:a},c)};\nsre.ClearspeakPreferences.Parser.prototype.fromPreference=function(a){return sre.ClearspeakPreferences.fromPreference(a)};sre.ClearspeakPreferences.fromPreference=function(a){a=a.split(\":\");for(var b={},c=sre.ClearspeakPreferences.PREFERENCES.getProperties(),d=Object.keys(c),e=0,f;f=a[e];e++)if(f=f.split(\"_\"),-1!==d.indexOf(f[0])){var g=f[1];g&&g!==sre.ClearspeakPreferences.AUTO&&-1!==c[f[0]].indexOf(g)&&(b[f[0]]=f[1])}return b};sre.ClearspeakPreferences.Parser.prototype.toPreference=function(a){return sre.ClearspeakPreferences.toPreference(a)};\nsre.ClearspeakPreferences.toPreference=function(a){for(var b=Object.keys(a),c=[],d=0;d<b.length;d++)c.push(b[d]+\"_\"+a[b[d]]);return c.length?c.join(\":\"):sre.DynamicCstr.DEFAULT_VALUE};sre.ClearspeakPreferences.LOCALE_PREFERENCES=null;\nsre.ClearspeakPreferences.getLocalePreferences=function(a){sre.ClearspeakPreferences.LOCALE_PREFERENCES||(a=a||sre.MathCompoundStore.getInstance().enumerate(sre.SpeechRuleEngine.getInstance().enumerate()),sre.ClearspeakPreferences.LOCALE_PREFERENCES=sre.ClearspeakPreferences.getLocalePreferences_(a));return sre.ClearspeakPreferences.LOCALE_PREFERENCES};\nsre.ClearspeakPreferences.getLocalePreferences_=function(a){var b={},c;for(c in a)if(a[c].speech&&a[c].speech.clearspeak){var d=Object.keys(a[c].speech.clearspeak),e=b[c]={},f;for(f in sre.ClearspeakPreferences.PREFERENCES.getProperties()){var g=sre.ClearspeakPreferences.PREFERENCES.getProperties()[f],h=[f+\"_Auto\"];if(g){g=$jscomp.makeIterator(g);for(var k=g.next();!k.done;k=g.next())k=k.value,-1!==d.indexOf(f+\"_\"+k)&&h.push(f+\"_\"+k)}e[f]=h}}return b};\nsre.ClearspeakPreferences.getSpeechExplorer=function(a){return(a=a.attached)&&a.length?a.find(function(b){return b.speechGenerator&&\"speech\"===b.speechGenerator.getOptions().modality}):null};\nsre.ClearspeakPreferences.smartPreferences=function(a,b){b=sre.ClearspeakPreferences.getLocalePreferences()[b];if(!b)return[];a=sre.ClearspeakPreferences.getSpeechExplorer(a);if(!a)return[{type:\"radio\",content:\"Standard\",id:\"clearspeak-default\",variable:\"speechRules\"}];a=sre.ClearspeakPreferences.relevantPreferences(a.walker.getFocus().getSemanticPrimary());var c=sre.Engine.DOMAIN_TO_STYLES.clearspeak;return[{type:\"radio\",content:\"No Preferences\",id:\"clearspeak-default\",variable:\"speechRules\"},{type:\"radio\",\ncontent:\"Current Preferences\",id:\"clearspeak-\"+c,variable:\"speechRules\"},{type:\"rule\"},{type:\"label\",content:\"Preferences for \"+a},{type:\"rule\"}].concat(b[a].map(function(d){d=d.split(\"_\");return{type:\"radio\",content:d[1],id:\"clearspeak-\"+sre.ClearspeakPreferences.addPreference(c,d[0],d[1]),variable:\"speechRules\"}}))};sre.ClearspeakPreferences.relevantPreferences=function(a){var b=sre.ClearspeakPreferences.SEMANTIC_MAPPING_[a.type];return b?b[a.role]||b[\"\"]||\"ImpliedTimes\":\"ImpliedTimes\"};\nsre.ClearspeakPreferences.REVERSE_MAPPING_=[[\"AbsoluteValue\",sre.SemanticAttr.Type.FENCED,sre.SemanticAttr.Role.NEUTRAL],[\"Bar\",sre.SemanticAttr.Type.OVERSCORE,sre.SemanticAttr.Role.OVERACCENT],[\"Caps\",sre.SemanticAttr.Type.IDENTIFIER,sre.SemanticAttr.Role.LATINLETTER],[\"CombinationPermutation\",sre.SemanticAttr.Type.APPL,sre.SemanticAttr.Role.UNKNOWN],[\"Ellipses\",sre.SemanticAttr.Type.PUNCTUATION,sre.SemanticAttr.Role.ELLIPSIS],[\"Exponent\",sre.SemanticAttr.Type.SUPERSCRIPT,\"\"],[\"Fraction\",sre.SemanticAttr.Type.FRACTION,\n\"\"],[\"Functions\",sre.SemanticAttr.Type.APPL,sre.SemanticAttr.Role.SIMPLEFUNC],[\"ImpliedTimes\",sre.SemanticAttr.Type.OPERATOR,sre.SemanticAttr.Role.IMPLICIT],[\"Log\",sre.SemanticAttr.Type.APPL,sre.SemanticAttr.Role.PREFIXFUNC],[\"Matrix\",sre.SemanticAttr.Type.MATRIX,\"\"],[\"Matrix\",sre.SemanticAttr.Type.VECTOR,\"\"],[\"MultiLineLabel\",sre.SemanticAttr.Type.MULTILINE,sre.SemanticAttr.Role.LABEL],[\"MultiLineOverview\",sre.SemanticAttr.Type.MULTILINE,sre.SemanticAttr.Role.TABLE],[\"MultiLinePausesBetweenColumns\",\nsre.SemanticAttr.Type.MULTILINE,sre.SemanticAttr.Role.TABLE],[\"MultiLineLabel\",sre.SemanticAttr.Type.TABLE,sre.SemanticAttr.Role.LABEL],[\"MultiLineOverview\",sre.SemanticAttr.Type.TABLE,sre.SemanticAttr.Role.TABLE],[\"MultiLinePausesBetweenColumns\",sre.SemanticAttr.Type.TABLE,sre.SemanticAttr.Role.TABLE],[\"MultiLineLabel\",sre.SemanticAttr.Type.CASES,sre.SemanticAttr.Role.LABEL],[\"MultiLineOverview\",sre.SemanticAttr.Type.CASES,sre.SemanticAttr.Role.TABLE],[\"MultiLinePausesBetweenColumns\",sre.SemanticAttr.Type.CASES,\nsre.SemanticAttr.Role.TABLE],[\"MultsymbolDot\",sre.SemanticAttr.Type.OPERATOR,sre.SemanticAttr.Role.MULTIPLICATION],[\"MultsymbolX\",sre.SemanticAttr.Type.OPERATOR,sre.SemanticAttr.Role.MULTIPLICATION],[\"Paren\",sre.SemanticAttr.Type.FENCED,sre.SemanticAttr.Role.LEFTRIGHT],[\"Prime\",sre.SemanticAttr.Type.SUPERSCRIPT,sre.SemanticAttr.Role.PRIME],[\"Roots\",sre.SemanticAttr.Type.ROOT,\"\"],[\"Roots\",sre.SemanticAttr.Type.SQRT,\"\"],[\"SetMemberSymbol\",sre.SemanticAttr.Type.RELATION,sre.SemanticAttr.Role.ELEMENT],\n[\"Sets\",sre.SemanticAttr.Type.FENCED,sre.SemanticAttr.Role.SETEXT],[\"TriangleSymbol\",sre.SemanticAttr.Type.IDENTIFIER,sre.SemanticAttr.Role.GREEKLETTER],[\"Trig\",sre.SemanticAttr.Type.APPL,sre.SemanticAttr.Role.PREFIXFUNC],[\"VerticalLine\",sre.SemanticAttr.Type.PUNCTUATED,sre.SemanticAttr.Role.VBAR]];sre.ClearspeakPreferences.SEMANTIC_MAPPING_=function(){for(var a={},b=0,c;c=sre.ClearspeakPreferences.REVERSE_MAPPING_[b];b++){var d=c[0],e=a[c[1]];e||(e={},a[c[1]]=e);e[c[2]]=d}return a}();\nsre.ClearspeakPreferences.findPreference=function(a,b){return\"default\"===a?sre.ClearspeakPreferences.AUTO:sre.ClearspeakPreferences.fromPreference(a)[b]||sre.ClearspeakPreferences.AUTO};sre.ClearspeakPreferences.addPreference=function(a,b,c){if(\"default\"===a)return b+\"_\"+c;a=sre.ClearspeakPreferences.fromPreference(a);a[b]=c;return sre.ClearspeakPreferences.toPreference(a)};sre.Engine.getInstance().comparators.clearspeak=sre.ClearspeakPreferences.comparator;\nsre.Engine.getInstance().parsers.clearspeak=new sre.ClearspeakPreferences.Parser;sre.AlphabetGenerator={};sre.AlphabetGenerator.Font={BOLD:\"bold\",BOLDFRAKTUR:\"bold-fraktur\",BOLDITALIC:\"bold-italic\",BOLDSCRIPT:\"bold-script\",DOUBLESTRUCK:\"double-struck\",FULLWIDTH:\"fullwidth\",FRAKTUR:\"fraktur\",ITALIC:\"italic\",MONOSPACE:\"monospace\",NORMAL:\"normal\",SCRIPT:\"script\",SANSSERIF:\"sans-serif\",SANSSERIFITALIC:\"sans-serif-italic\",SANSSERIFBOLD:\"sans-serif-bold\",SANSSERIFBOLDITALIC:\"sans-serif-bold-italic\"};\nsre.AlphabetGenerator.Embellish={SUPER:\"super\",SUB:\"sub\",CIRCLED:\"circled\",PARENTHESIZED:\"parenthesized\",PERIOD:\"period\",NEGATIVECIRCLED:\"negative-circled\",DOUBLECIRCLED:\"double-circled\",CIRCLEDSANSSERIF:\"circled-sans-serif\",NEGATIVECIRCLEDSANSSERIF:\"negative-circled-sans-serif\",COMMA:\"comma\",SQUARED:\"squared\",NEGATIVESQUARED:\"negative-squared\"};sre.AlphabetGenerator.Base={LATINCAP:\"latinCap\",LATINSMALL:\"latinSmall\",GREEKCAP:\"greekCap\",GREEKSMALL:\"greekSmall\",DIGIT:\"digit\"};\nsre.AlphabetGenerator.Domains_={small:[\"default\"],capital:[\"default\"],digit:[\"default\"]};\nsre.AlphabetGenerator.makeDomains_=function(){var a=sre.Messages.ALPHABET_PREFIXES,b=sre.Messages.ALPHABET_TRANSFORMERS,c=function(d,e){var f={};Object.keys(d).forEach(function(g){f[g]=!0});Object.keys(e).forEach(function(g){f[g]=!0});return Object.keys(f)};sre.AlphabetGenerator.Domains_.small=c(a.smallPrefix,b.letter);sre.AlphabetGenerator.Domains_.capital=c(a.capPrefix,b.letter);sre.AlphabetGenerator.Domains_.digit=c(a.digitPrefix,b.digit)};\nsre.AlphabetGenerator.generate=function(a,b){var c=sre.Engine.getInstance().locale;sre.Engine.getInstance().locale=a;sre.L10n.setLocale();b.addSymbolRules({locale:a});sre.AlphabetGenerator.makeDomains_();a=sre.AlphabetGenerator.INTERVALS;for(var d=0,e;e=a[d];d++){var f=sre.AlphabetGenerator.makeInterval(e.interval,e.subst),g=f.map(function(h){return sre.SemanticUtil.numberToUnicode(parseInt(h,16))});\"offset\"in e?sre.AlphabetGenerator.numberRules(b,f,g,e.font,e.category,e.offset||0):sre.AlphabetGenerator.alphabetRules(b,\nf,g,sre.Messages.ALPHABETS[e.base],e.font,e.category,!!e.capital)}sre.Engine.getInstance().locale=c;sre.L10n.setLocale()};sre.AlphabetGenerator.makeInterval=function(a,b){var c=parseInt(a[0],16);a=parseInt(a[1],16);for(var d=[];c<=a;c++){var e=c.toString(16).toUpperCase();e=3<e.length?e:(\"000\"+e).slice(-4);!1!==b[e]&&(e=b[e]||e,d.push(e))}return d};\nsre.AlphabetGenerator.getFont=function(a){a=\"normal\"===a||\"fullwidth\"===a?\"\":sre.Messages.FONT[a]||sre.Messages.EMBELLISH[a]||\"\";return\"string\"===typeof a?{font:a,combiner:sre.Messages.ALPHABET_COMBINER}:{font:a[0],combiner:a[1]}};\nsre.AlphabetGenerator.alphabetRules=function(a,b,c,d,e,f,g){e=sre.AlphabetGenerator.getFont(e);for(var h=0,k,l,m;k=b[h],l=c[h],m=d[h];h++)sre.AlphabetGenerator.makeLetter(a,e.combiner,k,l,m,e.font,g?sre.Messages.ALPHABET_PREFIXES.capPrefix:sre.Messages.ALPHABET_PREFIXES.smallPrefix,f,sre.Messages.ALPHABET_TRANSFORMERS.letter,g?sre.AlphabetGenerator.Domains_.capital:sre.AlphabetGenerator.Domains_.small)};\nsre.AlphabetGenerator.numberRules=function(a,b,c,d,e,f){d=sre.AlphabetGenerator.getFont(d);for(var g=0,h,k;h=b[g],k=c[g];g++)sre.AlphabetGenerator.makeLetter(a,d.combiner,h,k,g+f,d.font,sre.Messages.ALPHABET_PREFIXES.digitPrefix,e,sre.Messages.ALPHABET_TRANSFORMERS.digit,sre.AlphabetGenerator.Domains_.digit)};\nsre.AlphabetGenerator.makeLetter=function(a,b,c,d,e,f,g,h,k,l){for(var m=0,n;n=l[m];m++){var p=n in g?g[n]:g[\"default\"];a.defineRule(c.toString(),n,\"default\",h,d,b((n in k?k[n]:k[\"default\"])(e),f,p))}};\nsre.AlphabetGenerator.INTERVALS=[{interval:[\"1D400\",\"1D419\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.BOLD},{interval:[\"1D41A\",\"1D433\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.BOLD},{interval:[\"1D56C\",\"1D585\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.BOLDFRAKTUR},{interval:[\"1D586\",\"1D59F\"],base:sre.AlphabetGenerator.Base.LATINSMALL,\nsubst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.BOLDFRAKTUR},{interval:[\"1D468\",\"1D481\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.BOLDITALIC},{interval:[\"1D482\",\"1D49B\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.BOLDITALIC},{interval:[\"1D4D0\",\"1D4E9\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.BOLDSCRIPT},\n{interval:[\"1D4EA\",\"1D503\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.BOLDSCRIPT},{interval:[\"1D538\",\"1D551\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{\"1D53A\":\"2102\",\"1D53F\":\"210D\",\"1D545\":\"2115\",\"1D547\":\"2119\",\"1D548\":\"211A\",\"1D549\":\"211D\",\"1D551\":\"2124\"},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.DOUBLESTRUCK},{interval:[\"1D552\",\"1D56B\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"Ll\",\nfont:sre.AlphabetGenerator.Font.DOUBLESTRUCK},{interval:[\"1D504\",\"1D51D\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{\"1D506\":\"212D\",\"1D50B\":\"210C\",\"1D50C\":\"2111\",\"1D515\":\"211C\",\"1D51D\":\"2128\"},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.FRAKTUR},{interval:[\"1D51E\",\"1D537\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.FRAKTUR},{interval:[\"FF21\",\"FF3A\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",\nfont:sre.AlphabetGenerator.Font.FULLWIDTH},{interval:[\"FF41\",\"FF5A\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.FULLWIDTH},{interval:[\"1D434\",\"1D44D\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.ITALIC},{interval:[\"1D44E\",\"1D467\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{\"1D455\":\"210E\"},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.ITALIC},{interval:[\"1D670\",\n\"1D689\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.MONOSPACE},{interval:[\"1D68A\",\"1D6A3\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.MONOSPACE},{interval:[\"0041\",\"005A\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.NORMAL},{interval:[\"0061\",\"007A\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,\ncategory:\"Ll\",font:sre.AlphabetGenerator.Font.NORMAL},{interval:[\"1D49C\",\"1D4B5\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{\"1D49D\":\"212C\",\"1D4A0\":\"2130\",\"1D4A1\":\"2131\",\"1D4A3\":\"210B\",\"1D4A4\":\"2110\",\"1D4A7\":\"2112\",\"1D4A8\":\"2133\",\"1D4AD\":\"211B\"},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.SCRIPT},{interval:[\"1D4B6\",\"1D4CF\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{\"1D4BA\":\"212F\",\"1D4BC\":\"210A\",\"1D4C4\":\"2134\"},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.SCRIPT},\n{interval:[\"1D5A0\",\"1D5B9\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.SANSSERIF},{interval:[\"1D5BA\",\"1D5D3\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.SANSSERIF},{interval:[\"1D608\",\"1D621\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.SANSSERIFITALIC},{interval:[\"1D622\",\"1D63B\"],base:sre.AlphabetGenerator.Base.LATINSMALL,\nsubst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.SANSSERIFITALIC},{interval:[\"1D5D4\",\"1D5ED\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.SANSSERIFBOLD},{interval:[\"1D5EE\",\"1D607\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.SANSSERIFBOLD},{interval:[\"1D63C\",\"1D655\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.SANSSERIFBOLDITALIC},\n{interval:[\"1D656\",\"1D66F\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.SANSSERIFBOLDITALIC},{interval:[\"0391\",\"03A9\"],base:sre.AlphabetGenerator.Base.GREEKCAP,subst:{\"03A2\":\"03F4\"},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.NORMAL},{interval:[\"03B0\",\"03D0\"],base:sre.AlphabetGenerator.Base.GREEKSMALL,subst:{\"03B0\":\"2207\",\"03CA\":\"2202\",\"03CB\":\"03F5\",\"03CC\":\"03D1\",\"03CD\":\"03F0\",\"03CE\":\"03D5\",\"03CF\":\"03F1\",\"03D0\":\"03D6\"},\ncapital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.NORMAL},{interval:[\"1D6A8\",\"1D6C0\"],base:sre.AlphabetGenerator.Base.GREEKCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.BOLD},{interval:[\"1D6C1\",\"1D6E1\"],base:sre.AlphabetGenerator.Base.GREEKSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.BOLD},{interval:[\"1D6E2\",\"1D6FA\"],base:sre.AlphabetGenerator.Base.GREEKCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.ITALIC},{interval:[\"1D6FB\",\n\"1D71B\"],base:sre.AlphabetGenerator.Base.GREEKSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.ITALIC},{interval:[\"1D71C\",\"1D734\"],base:sre.AlphabetGenerator.Base.GREEKCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.BOLDITALIC},{interval:[\"1D735\",\"1D755\"],base:sre.AlphabetGenerator.Base.GREEKSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.BOLDITALIC},{interval:[\"1D756\",\"1D76E\"],base:sre.AlphabetGenerator.Base.GREEKCAP,subst:{},capital:!0,\ncategory:\"Lu\",font:sre.AlphabetGenerator.Font.SANSSERIFBOLD},{interval:[\"1D76F\",\"1D78F\"],base:sre.AlphabetGenerator.Base.GREEKSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.SANSSERIFBOLD},{interval:[\"1D790\",\"1D7A8\"],base:sre.AlphabetGenerator.Base.GREEKCAP,subst:{},capital:!0,category:\"Lu\",font:sre.AlphabetGenerator.Font.SANSSERIFBOLDITALIC},{interval:[\"1D7A9\",\"1D7C9\"],base:sre.AlphabetGenerator.Base.GREEKSMALL,subst:{},capital:!1,category:\"Ll\",font:sre.AlphabetGenerator.Font.SANSSERIFBOLDITALIC},\n{interval:[\"0030\",\"0039\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:0,category:\"Nd\",font:sre.AlphabetGenerator.Font.NORMAL},{interval:[\"2070\",\"2079\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{2071:\"00B9\",2072:\"00B2\",2073:\"00B3\"},offset:0,category:\"No\",font:sre.AlphabetGenerator.Embellish.SUPER},{interval:[\"2080\",\"2089\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:0,category:\"No\",font:sre.AlphabetGenerator.Embellish.SUB},{interval:[\"245F\",\"2473\"],base:sre.AlphabetGenerator.Base.DIGIT,\nsubst:{\"245F\":\"24EA\"},offset:0,category:\"No\",font:sre.AlphabetGenerator.Embellish.CIRCLED},{interval:[\"3251\",\"325F\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:21,category:\"No\",font:sre.AlphabetGenerator.Embellish.CIRCLED},{interval:[\"32B1\",\"32BF\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:36,category:\"No\",font:sre.AlphabetGenerator.Embellish.CIRCLED},{interval:[\"2474\",\"2487\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:1,category:\"No\",font:sre.AlphabetGenerator.Embellish.PARENTHESIZED},\n{interval:[\"2487\",\"249B\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{2487:\"1F100\"},offset:0,category:\"No\",font:sre.AlphabetGenerator.Embellish.PERIOD},{interval:[\"2775\",\"277F\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{2775:\"24FF\"},offset:0,category:\"No\",font:sre.AlphabetGenerator.Embellish.NEGATIVECIRCLED},{interval:[\"24EB\",\"24F4\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:11,category:\"No\",font:sre.AlphabetGenerator.Embellish.NEGATIVECIRCLED},{interval:[\"24F5\",\"24FE\"],base:sre.AlphabetGenerator.Base.DIGIT,\nsubst:{},offset:1,category:\"No\",font:sre.AlphabetGenerator.Embellish.DOUBLECIRCLED},{interval:[\"277F\",\"2789\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{\"277F\":\"1F10B\"},offset:0,category:\"No\",font:sre.AlphabetGenerator.Embellish.CIRCLEDSANSSERIF},{interval:[\"2789\",\"2793\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{2789:\"1F10C\"},offset:0,category:\"No\",font:sre.AlphabetGenerator.Embellish.NEGATIVECIRCLEDSANSSERIF},{interval:[\"FF10\",\"FF19\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:0,\ncategory:\"Nd\",font:sre.AlphabetGenerator.Font.FULLWIDTH},{interval:[\"1D7CE\",\"1D7D7\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:0,category:\"Nd\",font:sre.AlphabetGenerator.Font.BOLD},{interval:[\"1D7D8\",\"1D7E1\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:0,category:\"Nd\",font:sre.AlphabetGenerator.Font.DOUBLESTRUCK},{interval:[\"1D7E2\",\"1D7EB\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:0,category:\"Nd\",font:sre.AlphabetGenerator.Font.SANSSERIF},{interval:[\"1D7EC\",\"1D7F5\"],\nbase:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:0,category:\"Nd\",font:sre.AlphabetGenerator.Font.SANSSERIFBOLD},{interval:[\"1D7F6\",\"1D7FF\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:0,category:\"Nd\",font:sre.AlphabetGenerator.Font.MONOSPACE},{interval:[\"1F101\",\"1F10A\"],base:sre.AlphabetGenerator.Base.DIGIT,subst:{},offset:0,category:\"No\",font:sre.AlphabetGenerator.Embellish.COMMA},{interval:[\"24B6\",\"24CF\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"So\",\nfont:sre.AlphabetGenerator.Embellish.CIRCLED},{interval:[\"24D0\",\"24E9\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"So\",font:sre.AlphabetGenerator.Embellish.CIRCLED},{interval:[\"1F110\",\"1F129\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"So\",font:sre.AlphabetGenerator.Embellish.PARENTHESIZED},{interval:[\"249C\",\"24B5\"],base:sre.AlphabetGenerator.Base.LATINSMALL,subst:{},capital:!1,category:\"So\",font:sre.AlphabetGenerator.Embellish.PARENTHESIZED},\n{interval:[\"1F130\",\"1F149\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"So\",font:sre.AlphabetGenerator.Embellish.SQUARED},{interval:[\"1F170\",\"1F189\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"So\",font:sre.AlphabetGenerator.Embellish.NEGATIVESQUARED},{interval:[\"1F150\",\"1F169\"],base:sre.AlphabetGenerator.Base.LATINCAP,subst:{},capital:!0,category:\"So\",font:sre.AlphabetGenerator.Embellish.NEGATIVECIRCLED}];sre.MathSimpleStore=function(){sre.MathStore.call(this);this.category=\"\"};goog.inherits(sre.MathSimpleStore,sre.MathStore);sre.MathSimpleStore.prototype.defineRulesFromMappings=function(a,b,c){for(var d in c)for(var e in c[d])this.defineRuleFromStrings(a,d,e,b,c[d][e])};sre.MathSimpleStore.prototype.defineRuleFromStrings=function(a,b,c,d,e){this.defineRule(a,b+\".\"+c,'[t] \"'+e+'\"',\"self::text()\",'\"'===d?\"self::text() = '\"+d+\"'\":'self::text() = \"'+d+'\"')};\nsre.MathSimpleStore.prototype.lookupRule=function(a,b){a=this.getSpeechRules().filter(function(c){return sre.MathSimpleStore.testDynamicConstraints_(b,c)});return a.length?a.sort(function(c,d){return sre.Engine.getInstance().comparator.compare(c.dynamicCstr,d.dynamicCstr)})[0]:null};sre.MathSimpleStore.testDynamicConstraints_=function(a,b){return sre.Engine.getInstance().strict?b.dynamicCstr.equal(a):sre.Engine.getInstance().comparator.match(b.dynamicCstr)};\nsre.MathCompoundStore=function(){this.subStores_={};this.locale=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.LOCALE];this.modality=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.MODALITY]};goog.addSingletonGetter(sre.MathCompoundStore);sre.MathCompoundStore.prototype.getSubStore_=function(a){var b=this.subStores_[a];if(b)return sre.Debugger.getInstance().output(\"Store exists! \"+a),b;b=new sre.MathSimpleStore;return this.subStores_[a]=b};\nsre.MathCompoundStore.prototype.setupStore_=function(a,b){a.locale=this.locale;a.modality=this.modality;b&&(a.category=b)};sre.MathCompoundStore.prototype.defineRules=function(a,b,c,d){var e=this.getSubStore_(b);this.setupStore_(e,c);e.defineRulesFromMappings(a,b,d)};sre.MathCompoundStore.prototype.defineRule=function(a,b,c,d,e,f){var g=this.getSubStore_(e);this.setupStore_(g,d);g.defineRuleFromStrings(a,b,c,e,f)};\nsre.MathCompoundStore.prototype.changeLocale_=function(a){if(!a.locale&&!a.modality)return!1;this.locale=a.locale||this.locale;this.modality=a.modality||this.modality;return!0};sre.MathCompoundStore.prototype.addSymbolRules=function(a){if(!this.changeLocale_(a)){var b=sre.MathSimpleStore.parseUnicode_(a.key);this.defineRules(a.key,b,a.category,a.mappings)}};\nsre.MathCompoundStore.prototype.addFunctionRules=function(a){if(!this.changeLocale_(a)){var b=a.names,c=a.mappings;a=a.category;for(var d=0,e;e=b[d];d++)this.defineRules(e,e,a,c)}};sre.MathCompoundStore.prototype.addUnitRules=function(a){if(!this.changeLocale_(a)){var b=a.names;b&&(a.names=b.map(function(c){return c+\":unit\"}));this.addFunctionRules(a)}};sre.MathCompoundStore.prototype.lookupRule=function(a,b){return(a=this.subStores_[a])?a.lookupRule(null,b):null};\nsre.MathCompoundStore.prototype.lookupCategory=function(a){return(a=this.subStores_[a])?a.category:\"\"};sre.MathCompoundStore.prototype.lookupString=function(a,b){return(a=this.lookupRule(a,b))?a.action.components.map(function(c){return c.content.slice(1,-1)}).join(\" \"):\"\"};sre.MathCompoundStore.prototype.enumerate=function(a){a=a||{};for(var b in this.subStores_)a=this.subStores_[b].trie.enumerate(a);return a};\nsre.MathSimpleStore.parseUnicode_=function(a){a=parseInt(a,16);if(65536>a)return String.fromCharCode(a);a-=65536;return String.fromCharCode((a>>10)+55296,(a&1023)+56320)};sre.MathMap=function(){this.store=sre.MathCompoundStore.getInstance();this.loaded_=[];this.addRules={functions:goog.bind(this.store.addFunctionRules,this.store),symbols:goog.bind(this.store.addSymbolRules,this.store),units:goog.bind(this.store.addUnitRules,this.store)}};goog.addSingletonGetter(sre.MathMap);sre.MathMap.oldInst_=sre.MathMap.getInstance;sre.MathMap.getInstance=function(){var a=sre.MathMap.oldInst_();a.loadLocale();return a};\nsre.MathMap.prototype.loadLocale=function(){var a=sre.Engine.getInstance().locale;if(-1===this.loaded_.indexOf(a)){var b=sre.Engine.getInstance().mode===sre.Engine.Mode.ASYNC;b&&(sre.Engine.getInstance().mode=sre.Engine.Mode.SYNC);this.loaded_.push(a);this.retrieveMaps(a);b&&(sre.Engine.getInstance().mode=sre.Engine.Mode.ASYNC)}};sre.MathMap.toFetch_=0;sre.Engine.registerTest(function(){return sre.MathMap.getInstance()&&!sre.MathMap.toFetch_});\nsre.MathMap.prototype.retrieveFiles=function(a){a=sre.BaseUtil.makePath(sre.SystemExternal.jsonPath)+a+\".js\";switch(sre.Engine.getInstance().mode){case sre.Engine.Mode.ASYNC:sre.MathMap.toFetch_++;var b=goog.bind(this.parseMaps,this);sre.MathMap.fromFile_(a,function(c,d){sre.MathMap.toFetch_--;c||b(d)});break;case sre.Engine.Mode.HTTP:sre.MathMap.toFetch_++;this.getJsonAjax_(a);break;default:a=sre.MathMap.loadFile(a),this.parseMaps(a)}};\nsre.MathMap.prototype.parseMaps=function(a){a=JSON.parse(a);this.addMaps(a)};sre.MathMap.prototype.addMaps=function(a,b){for(var c=0,d;d=Object.keys(a)[c];c++){var e=d.split(\"/\");b&&b!==e[0]||a[d].forEach(this.addRules[e[1]])}};sre.MathMap.prototype.retrieveMaps=function(a){sre.AlphabetGenerator.generate(a,this.store);sre.Engine.getInstance().isIE&&sre.Engine.getInstance().mode===sre.Engine.Mode.HTTP?this.getJsonIE_(a):this.retrieveFiles(a)};\nsre.MathMap.prototype.getJsonIE_=function(a,b){var c=b||1;sre.BrowserUtil.mapsForIE?this.addMaps(sre.BrowserUtil.mapsForIE,a):5>=c&&setTimeout(goog.bind(function(){this.getJsonIE_(a,c++)},this),300)};sre.MathMap.fromFile_=function(a,b){return sre.SystemExternal.fs.readFile(a,\"utf8\",b)};sre.MathMap.loadFile=function(a){try{return sre.MathMap.readJSON_(a)}catch(b){console.error(\"Unable to load file: \"+a+\"\\n\"+b)}return\"{}\"};sre.MathMap.readJSON_=function(a){return sre.SystemExternal.fs.readFileSync(a)};\nsre.MathMap.prototype.getJsonAjax_=function(a){var b=new XMLHttpRequest,c=goog.bind(this.parseMaps,this);b.onreadystatechange=function(){4===b.readyState&&(sre.MathMap.toFetch_--,200===b.status&&c(b.responseText))};b.open(\"GET\",a,!0);b.send()};sre.StoreUtil={};sre.StoreUtil.nodeCounter=function(a,b){var c=a.length,d=0,e=b;b||(e=\"\");return function(){d<c&&(d+=1);return e+\" \"+d}};sre.StoreUtil.pauseSeparator=function(a,b){a=parseFloat(b);var c=isNaN(a)?b:a;return function(){return[sre.AuditoryDescription.create({text:\"\",personality:{pause:c}})]}};\nsre.StoreUtil.contentIterator=function(a,b){var c=0<a.length?sre.XpathUtil.evalXPath(\"../../content/*\",a[0]):[];return function(){var d=c.shift(),e=b?[sre.AuditoryDescription.create({text:b},{translate:!0})]:[];if(!d)return e;d=sre.SpeechRuleEngine.getInstance().evaluateNode(d);return e.concat(d)}};sre.ClearspeakUtil={};sre.ClearspeakUtil.numbersToAlpha=function(a){return a.match(/\\d+/)?sre.Messages.NUMBERS.numberToWords(parseInt(a,10)):a};sre.ClearspeakUtil.nodeCounter=function(a,b){b=b.split(\"-\");var c=sre.StoreUtil.nodeCounter(a,b[0]||\"\"),d=b[1]||\"\",e=b[2]||\"\",f=!0;return function(){var g=c();return f?(f=!1,e+g+d):g+d}};\nsre.ClearspeakUtil.isSimpleExpression=function(a){return sre.ClearspeakUtil.isSimpleNumber_(a)||sre.ClearspeakUtil.isSimpleLetters_(a)||sre.ClearspeakUtil.isSimpleDegree_(a)||sre.ClearspeakUtil.isSimpleNegative_(a)||sre.ClearspeakUtil.isSimpleFunction_(a)};\nsre.ClearspeakUtil.isSimpleFunction_=function(a){return a.type===sre.SemanticAttr.Type.APPL&&(a.childNodes[0].role===sre.SemanticAttr.Role.PREFIXFUNC||a.childNodes[0].role===sre.SemanticAttr.Role.SIMPLEFUNC)&&(sre.ClearspeakUtil.isSimple_(a.childNodes[1])||a.childNodes[1].type===sre.SemanticAttr.Type.FENCED&&sre.ClearspeakUtil.isSimple_(a.childNodes[1].childNodes[0]))};\nsre.ClearspeakUtil.isSimpleNegative_=function(a){return a.type===sre.SemanticAttr.Type.PREFIXOP&&a.role===sre.SemanticAttr.Role.NEGATIVE&&sre.ClearspeakUtil.isSimple_(a.childNodes[0])&&a.childNodes[0].type!==sre.SemanticAttr.Type.PREFIXOP&&a.childNodes[0].type!==sre.SemanticAttr.Type.APPL&&a.childNodes[0].type!==sre.SemanticAttr.Type.PUNCTUATED};\nsre.ClearspeakUtil.isSimpleDegree_=function(a){return a.type===sre.SemanticAttr.Type.PUNCTUATED&&a.role===sre.SemanticAttr.Role.ENDPUNCT&&2===a.childNodes.length&&a.childNodes[1].role===sre.SemanticAttr.Role.DEGREE&&(sre.ClearspeakUtil.isLetter_(a.childNodes[0])||sre.ClearspeakUtil.isNumber_(a.childNodes[0])||a.childNodes[0].type===sre.SemanticAttr.Type.PREFIXOP&&a.childNodes[0].role===sre.SemanticAttr.Role.NEGATIVE&&(sre.ClearspeakUtil.isLetter_(a.childNodes[0].childNodes[0])||sre.ClearspeakUtil.isNumber_(a.childNodes[0].childNodes[0])))};\nsre.ClearspeakUtil.isSimpleLetters_=function(a){return sre.ClearspeakUtil.isLetter_(a)||a.type===sre.SemanticAttr.Type.INFIXOP&&a.role===sre.SemanticAttr.Role.IMPLICIT&&(2===a.childNodes.length&&(sre.ClearspeakUtil.isLetter_(a.childNodes[0])||sre.ClearspeakUtil.isSimpleNumber_(a.childNodes[0]))&&sre.ClearspeakUtil.isLetter_(a.childNodes[1])||3===a.childNodes.length&&sre.ClearspeakUtil.isSimpleNumber_(a.childNodes[0])&&sre.ClearspeakUtil.isLetter_(a.childNodes[1])&&sre.ClearspeakUtil.isLetter_(a.childNodes[2]))};\nsre.ClearspeakUtil.isSimple_=function(a){return a.hasAnnotation(\"clearspeak\",\"simple\")};sre.ClearspeakUtil.isLetter_=function(a){return a.type===sre.SemanticAttr.Type.IDENTIFIER&&(a.role===sre.SemanticAttr.Role.LATINLETTER||a.role===sre.SemanticAttr.Role.GREEKLETTER||a.role===sre.SemanticAttr.Role.OTHERLETTER||a.role===sre.SemanticAttr.Role.SIMPLEFUNC)};sre.ClearspeakUtil.isNumber_=function(a){return a.type===sre.SemanticAttr.Type.NUMBER&&(a.role===sre.SemanticAttr.Role.INTEGER||a.role===sre.SemanticAttr.Role.FLOAT)};\nsre.ClearspeakUtil.isSimpleNumber_=function(a){return sre.ClearspeakUtil.isNumber_(a)||sre.ClearspeakUtil.isSimpleFraction_(a)};\nsre.ClearspeakUtil.isSimpleFraction_=function(a){if(sre.ClearspeakUtil.hasPreference(\"Fraction_Over\")||sre.ClearspeakUtil.hasPreference(\"Fraction_FracOver\")||a.type!==sre.SemanticAttr.Type.FRACTION||a.role!==sre.SemanticAttr.Role.VULGAR)return!1;if(sre.ClearspeakUtil.hasPreference(\"Fraction_Ordinal\"))return!0;var b=parseInt(a.childNodes[0].textContent,10);a=parseInt(a.childNodes[1].textContent,10);return 0<b&&20>b&&0<a&&11>a};\nsre.ClearspeakUtil.hasPreference=function(a){return sre.Engine.getInstance().style===a};sre.ClearspeakUtil.simpleExpression=function(){return new sre.SemanticAnnotator(\"clearspeak\",function(a){return sre.ClearspeakUtil.isSimpleExpression(a)?\"simple\":\"\"})};sre.ClearspeakUtil.simpleNode=function(a){if(!a.hasAttribute(\"annotation\"))return!1;a=a.getAttribute(\"annotation\");return!!/clearspeak:simple$|clearspeak:simple;/.exec(a)};\nsre.ClearspeakUtil.simpleCell_=function(a){if(sre.ClearspeakUtil.simpleNode(a))return!0;if(a.tagName!==sre.SemanticAttr.Type.SUBSCRIPT)return!1;a=a.childNodes[0].childNodes;var b=a[1];return a[0].tagName===sre.SemanticAttr.Type.IDENTIFIER&&(sre.ClearspeakUtil.isInteger_(b)||b.tagName===sre.SemanticAttr.Type.INFIXOP&&b.hasAttribute(\"role\")&&b.getAttribute(\"role\")===sre.SemanticAttr.Role.IMPLICIT&&sre.ClearspeakUtil.allIndices_(b))};\nsre.ClearspeakUtil.isInteger_=function(a){return a.tagName===sre.SemanticAttr.Type.NUMBER&&a.hasAttribute(\"role\")&&a.getAttribute(\"role\")===sre.SemanticAttr.Role.INTEGER};sre.ClearspeakUtil.allIndices_=function(a){return sre.XpathUtil.evalXPath(\"children/*\",a).every(function(b){return sre.ClearspeakUtil.isInteger_(b)||b.tagName===sre.SemanticAttr.Type.IDENTIFIER})};\nsre.ClearspeakUtil.allCellsSimple=function(a){return sre.XpathUtil.evalXPath(a.tagName===sre.SemanticAttr.Type.MATRIX?\"children/row/children/cell/children/*\":\"children/line/children/*\",a).every(sre.ClearspeakUtil.simpleCell_)?[a]:[]};sre.ClearspeakUtil.isSmallVulgarFraction=function(a){return sre.NumbersUtil.vulgarFractionSmall(a,20,11)?[a]:[]};\nsre.ClearspeakUtil.isUnitExpression=function(a){return a.type===sre.SemanticAttr.Type.TEXT||a.type===sre.SemanticAttr.Type.PUNCTUATED&&a.role===sre.SemanticAttr.Role.TEXT&&sre.ClearspeakUtil.isNumber_(a.childNodes[0])&&sre.ClearspeakUtil.allTextLastContent_(a.childNodes.slice(1))||a.type===sre.SemanticAttr.Type.IDENTIFIER&&a.role===sre.SemanticAttr.Role.UNIT||a.type===sre.SemanticAttr.Type.INFIXOP&&(a.role===sre.SemanticAttr.Role.IMPLICIT||a.role===sre.SemanticAttr.Role.UNIT)};\nsre.ClearspeakUtil.allTextLastContent_=function(a){for(var b=0;b<a.length-1;b++)if(a[b].type!==sre.SemanticAttr.Type.TEXT||\"\"!==a[b].textContent)return!1;return a[a.length-1].type===sre.SemanticAttr.Type.TEXT};sre.ClearspeakUtil.unitExpression=function(){return new sre.SemanticAnnotator(\"clearspeak\",function(a){return sre.ClearspeakUtil.isUnitExpression(a)?\"unit\":\"\"})};\nsre.ClearspeakUtil.ordinalExponent=function(a){var b=parseInt(a.textContent,10);return isNaN(b)?a.textContent:10<b?sre.Messages.NUMBERS.simpleOrdinal(b):sre.Messages.NUMBERS.wordOrdinal(b)};sre.ClearspeakUtil.isCapitalLetter=function(a){return\"Lu\"===sre.MathCompoundStore.getInstance().lookupCategory(a.textContent)?[a]:[]};sre.ClearspeakUtil.NESTING_DEPTH=null;\nsre.ClearspeakUtil.nestingDepth=function(a){var b=0,c=a.textContent,d=\"open\"===a.getAttribute(\"role\")?0:1;for(a=a.parentNode;a;)a.tagName===sre.SemanticAttr.Type.FENCED&&a.childNodes[0].childNodes[d].textContent===c&&b++,a=a.parentNode;sre.ClearspeakUtil.NESTING_DEPTH=1<b?sre.Messages.NUMBERS.wordOrdinal(b):\"\";return sre.ClearspeakUtil.NESTING_DEPTH};\nsre.ClearspeakUtil.matchingFences=function(a){var b=a.previousSibling;if(b)var c=a;else b=a,c=a.nextSibling;return c?sre.SemanticAttr.isMatchingFence(b.textContent,c.textContent)?[a]:[]:[]};sre.ClearspeakUtil.insertNesting=function(a,b){if(!b||!a)return a;var c=a.match(/^(open|close) /);return c?c[0]+b+\" \"+a.substring(c[0].length):b+\" \"+a};sre.Grammar.getInstance().setCorrection(\"insertNesting\",sre.ClearspeakUtil.insertNesting);\nsre.ClearspeakUtil.fencedArguments=function(a){var b=sre.DomUtil.toArray(a.parentNode.childNodes),c=sre.XpathUtil.evalXPath(\"../../children/*\",a);b=b.indexOf(a);return sre.ClearspeakUtil.fencedFactor_(c[b])||sre.ClearspeakUtil.fencedFactor_(c[b+1])?[a]:[]};\nsre.ClearspeakUtil.simpleArguments=function(a){var b=sre.DomUtil.toArray(a.parentNode.childNodes),c=sre.XpathUtil.evalXPath(\"../../children/*\",a);b=b.indexOf(a);return sre.ClearspeakUtil.simpleFactor_(c[b])&&c[b+1]&&(sre.ClearspeakUtil.simpleFactor_(c[b+1])||c[b+1].tagName===sre.SemanticAttr.Type.ROOT||c[b+1].tagName===sre.SemanticAttr.Type.SQRT||c[b+1].tagName===sre.SemanticAttr.Type.SUPERSCRIPT&&c[b+1].childNodes[0].childNodes[0]&&(c[b+1].childNodes[0].childNodes[0].tagName===sre.SemanticAttr.Type.NUMBER||\nc[b+1].childNodes[0].childNodes[0].tagName===sre.SemanticAttr.Type.IDENTIFIER)&&(\"2\"===c[b+1].childNodes[0].childNodes[1].textContent||\"3\"===c[b+1].childNodes[0].childNodes[1].textContent))?[a]:[]};sre.ClearspeakUtil.simpleFactor_=function(a){return!!a&&(a.tagName===sre.SemanticAttr.Type.NUMBER||a.tagName===sre.SemanticAttr.Type.IDENTIFIER||a.tagName===sre.SemanticAttr.Type.FUNCTION||a.tagName===sre.SemanticAttr.Type.APPL||a.tagName===sre.SemanticAttr.Type.FRACTION)};\nsre.ClearspeakUtil.fencedFactor_=function(a){return a&&(a.tagName===sre.SemanticAttr.Type.FENCED||a.hasAttribute(\"role\")&&a.getAttribute(\"role\")===sre.SemanticAttr.Role.LEFTRIGHT||sre.ClearspeakUtil.layoutFactor_(a))};sre.ClearspeakUtil.layoutFactor_=function(a){return!!a&&(a.tagName===sre.SemanticAttr.Type.MATRIX||a.tagName===sre.SemanticAttr.Type.VECTOR)};\nsre.ClearspeakUtil.isHyperbolic=function(a){if(a.tagName===sre.SemanticAttr.Type.APPL){var b=sre.XpathUtil.evalXPath(\"children/*[1]\",a)[0];if(b&&b.tagName===sre.SemanticAttr.Type.FUNCTION&&\"Hyperbolic\"===sre.MathCompoundStore.getInstance().lookupCategory(b.textContent))return[a]}return[]};\nsre.ClearspeakUtil.isLogarithmWithBase=function(a){if(a.tagName===sre.SemanticAttr.Type.SUBSCRIPT){var b=sre.XpathUtil.evalXPath(\"children/*[1]\",a)[0];if(b&&b.tagName===sre.SemanticAttr.Type.FUNCTION&&\"Logarithm\"===sre.MathCompoundStore.getInstance().lookupCategory(b.textContent))return[a]}return[]};sre.ClearspeakUtil.wordOrdinal=function(a){return sre.Messages.NUMBERS.wordOrdinal(parseInt(a.textContent,10))};\nsre.ClearspeakUtil.firstCurrency=function(a){var b=sre.XpathUtil.evalXPath(\"children/*[1]\",a)[0];return b&&\"currency\"===sre.MathCompoundStore.getInstance().lookupCategory(b.textContent+\":unit\")?[a]:[]};sre.ClearspeakUtil.lastCurrency=function(a){var b=sre.XpathUtil.evalXPath(\"children/*[last()]\",a)[0];return b&&\"currency\"===sre.MathCompoundStore.getInstance().lookupCategory(b.textContent+\":unit\")?[a]:[]};\nsre.ClearspeakUtil.addAnnotators=function(){sre.SemanticAnnotations.getInstance().register(sre.ClearspeakUtil.simpleExpression());sre.SemanticAnnotations.getInstance().register(sre.ClearspeakUtil.unitExpression())};sre.ClearspeakFrench={locale:\"fr\",domain:\"clearspeak\",functions:[[\"CTXF\",\"CTXFpauseSeparator\",sre.StoreUtil.pauseSeparator],[\"CTXF\",\"CTXFnodeCounter\",sre.ClearspeakUtil.nodeCounter],[\"CTXF\",\"CTXFcontentIterator\",sre.StoreUtil.contentIterator],[\"CSF\",\"CSFvulgarFraction\",sre.NumbersUtil.vulgarFraction],[\"CQF\",\"CQFvulgarFractionSmall\",sre.ClearspeakUtil.isSmallVulgarFraction],[\"CQF\",\"CQFcellsSimple\",sre.ClearspeakUtil.allCellsSimple],[\"CSF\",\"CSFordinalExponent\",sre.ClearspeakUtil.ordinalExponent],[\"CSF\",\n\"CSFwordOrdinal\",sre.Messages.NUMBERS.wordOrdinal],[\"CQF\",\"CQFisCapital\",sre.ClearspeakUtil.isCapitalLetter],[\"CQF\",\"CQFmatchingFences\",sre.ClearspeakUtil.matchingFences],[\"CSF\",\"CSFnestingDepth\",sre.ClearspeakUtil.nestingDepth],[\"CQF\",\"CQFfencedArguments\",sre.ClearspeakUtil.fencedArguments],[\"CQF\",\"CQFsimpleArguments\",sre.ClearspeakUtil.simpleArguments],[\"CQF\",\"CQFisHyperbolic\",sre.ClearspeakUtil.isHyperbolic],[\"CQF\",\"CQFisLogarithm\",sre.ClearspeakUtil.isLogarithmWithBase],[\"CQF\",\"CQFspaceoutNumber\",\nsre.MathspeakUtil.spaceoutNumber]],rules:['Rule{collapsed{default{[t] \"compress\\u00e9e\"; [n] . (engine:modality=summary,grammar:collapsed){self::*{@alternative{not(contains(@grammar, \"collapsed\")){self::*{self::*{self::*{self::*{self::*'.split(\"{\"),[\"Rule\",\"stree\",\"default\",\"[n] ./*[1]\",\"self::stree\"],[\"Rule\",\"unknown\",\"default\",\"[n] text()\",\"self::unknown\"],'Rule;protected;default;[t] text();self::number;contains(@grammar, \"protected\")'.split(\";\"),[\"Rule\",\"omit-empty\",\"default\",'[p] (pause:\"short\")',\n\"self::empty\"],'Rule{font{default{[n] . (grammar:ignoreFont=@font);  [t] @font (grammar:localFont,pause:\"short\"){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),'Rule{font-identifier{default{[n] . (grammar:ignoreFont=@font);  [t] @font (grammar:localFont,pause:\"short\"){self::identifier{string-length(text())=1{@font{@font=\"normal\"{not(contains(@grammar, \"ignoreFont\")){@role!=\"unit\"'.split(\"{\"),'Rule;omit-font;default;[n] self::* (grammar:ignoreFont=@font);self::identifier;string-length(text())=1;@font;not(contains(@grammar, \"ignoreFont\"));@font=\"italic\"'.split(\";\"),\n[\"Rule\",\"text\",\"default\",\"[n] text()\",\"self::text\"],'Rule;capital;default;[n] text() (pitch:0.6,grammar:ignoreCaps=\"majuscule\");self::identifier;@role=\"latinletter\" or @role=\"greekletter\" or @role=\"simple function\";CQFisCapital'.split(\";\"),'Rule;capital;Caps_SayCaps;[n] text();self::identifier;@role=\"latinletter\" or @role=\"greekletter\";CQFisCapital'.split(\";\"),'Rule{capital{Caps_SayCaps{[p] (pause:\"short\"); [n] text(){self::identifier{@role=\"latinletter\" or @role=\"greekletter\"{CQFisCapital{preceding-sibling::*[1]{not(name(preceding-sibling::*[1])=\"function\"){not(contains(@grammar, \"angle\"))'.split(\"{\"),\n'Rule;capital;Caps_SayCaps;[n] text() (pause:\"short\");self::identifier;@role=\"latinletter\" or @role=\"greekletter\";CQFisCapital;following-sibling::*[1]'.split(\";\"),'Rule{capital{Caps_SayCaps{[p] (pause:\"short\"); [n] text() (pause:\"short\"){self::identifier{@role=\"latinletter\" or @role=\"greekletter\"{CQFisCapital{preceding-sibling::*[1]{following-sibling::*[1]{not(name(preceding-sibling::*[1])=\"function\"){not(contains(@grammar, \"angle\"))'.split(\"{\"),'Rule,punctuation-lr,default,[p] (pause:\"short\"); [n] text() (pause:\"short\"),self::punctuation,@role=\"comma\"'.split(\",\"),\n'Rule;punctuation;default;[n] text();self::punctuation;@role=\"comma\";not(preceding-sibling::*[1]/children);not(following-sibling::*[1]/children)'.split(\";\"),'Rule,punctuation-l,default,[p] (pause:\"short\"); [n] text(),self::punctuation,@role=\"comma\",not(following-sibling::*[1]/children)'.split(\",\"),'Rule;punctuation-r;default;[n] text() (pause:\"short\");self::punctuation;@role=\"comma\";not(preceding-sibling::*[1]/children)'.split(\";\"),'Rule;ellipsis;Ellipses_AndSoOn;[t] \"et ainsi de suite\";self::punctuation;@role=\"ellipsis\";not(following-sibling::*[1]);not(preceding-sibling::*[last()][@role=\"ellipsis\"])'.split(\";\"),\n'Rule;ellipsis;Ellipses_AndSoOn;[t] \"et ainsi de suite jusqu\\'\\u00e0\";self::punctuation;@role=\"ellipsis\";preceding-sibling::*[1];following-sibling::*[1]'.split(\";\"),'Rule,vbar-evaluated,default,[n] children/*[1]; [p] (pause:\"short\"); [t] \"\\u00e9valu\\u00e9 \\u00e0\"; [n] content/*[1]/children/*[2]; [p] (pause:\"short\"),self::punctuated,@role=\"endpunct\",content/*[1][@role=\"vbar\"],content/*[1][@embellished],name(content/*[1])=\"subscript\"'.split(\",\"),'Rule,vbar-evaluated,default,[n] children/*[1]; [p] (pause:\"short\"); [t] \"\\u00e9valu\\u00e9 \\u00e0\"; [n] content/*[1]/children/*[2]; [p] (pause:\"short\"); [t] \"moins la m\\u00eame expression \\u00e9valu\\u00e9e \\u00e0\"; [n] content/*[1]/children/*[1]/children/*[2]; [p] (pause:\"short\"),self::punctuated,@role=\"endpunct\",content/*[1][@role=\"vbar\"],content/*[1][@embellished],name(content/*[1])=\"superscript\",name(content/*[1]/children/*[1])=\"subscript\"'.split(\",\"),\n'Rule;vbar-such-that;VerticalLine_SuchThat;[t] \"tel que\";self::punctuation;@role=\"vbar\";not(parent::*/parent::*[@embellished=\"punctuation\"])'.split(\";\"),'Rule;vbar-such-that;VerticalLine_Divides;[t] \"diviseur de\";self::punctuation;@role=\"vbar\";not(parent::*/parent::*[@embellished=\"punctuation\"])'.split(\";\"),'Rule;vbar-such-that;VerticalLine_Given;[t] \"sachant\";self::punctuation;@role=\"vbar\";not(parent::*/parent::*[@embellished=\"punctuation\"])'.split(\";\"),'Rule;set-member;default;[t] \"est un\";self::operator;@role=\"set extended\";text()=\"\\u2208\" or text()=\"\\u220a\"'.split(\";\"),\n[\"SpecializedRule\",\"set-member\",\"default\",\"SetMemberSymbol_Member\",'[t] \"appartient \\u00e0\"'],[\"SpecializedRule\",\"set-member\",\"default\",\"SetMemberSymbol_Element\",'[t] \"est un \\u00e9l\\u00e9ment de\"'],[\"SpecializedRule\",\"set-member\",\"default\",\"SetMemberSymbol_Belongs\",'[t] \"est dans\"'],'Rule;set-not-member;default;[t] \"n\\'est pas un\";self::operator;@role=\"set extended\";text()=\"\\u2209\"'.split(\";\"),[\"SpecializedRule\",\"set-not-member\",\"default\",\"SetMemberSymbol_Member\",'[t] \"n\\'appartient pas \\u00e0\"'],\n[\"SpecializedRule\",\"set-not-member\",\"default\",\"SetMemberSymbol_Element\",'[t] \"n\\'est pas un \\u00e9l\\u00e9ment de\"'],[\"SpecializedRule\",\"set-not-member\",\"default\",\"SetMemberSymbol_Belongs\",'[t] \"n\\'est pas dans\"'],'Rule,prime,default,[n] children/*[1]; [n] children/*[2],self::superscript,children/*[2],children/*[2][@role=\"prime\"],self::*'.split(\",\"),'Rule,feet,default,[n] children/*[1]; [t] \"feet\",self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"number\",children/*[2][text()=\"\\u2032\"],not(preceding-sibling::*[@role=\"degree\"])'.split(\",\"),\n'Rule,foot,default,[n] children/*[1]; [t] \"foot\",self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"number\",children/*[2][text()=\"\\u2032\"],children/*[1][text()=\"1\"],not(preceding-sibling::*[@role=\"degree\"])'.split(\",\"),'Rule,inches,default,[n] children/*[1]; [t] \"inches\",self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"number\",children/*[2][text()=\"\\u2033\"],not(preceding-sibling::*[@role=\"degree\"])'.split(\",\"),'Rule,inch,default,[n] children/*[1]; [t] \"inch\",self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"number\",children/*[2][text()=\"\\u2033\"],children/*[1][text()=\"1\"],not(preceding-sibling::*[@role=\"degree\"])'.split(\",\"),\n'Rule,minutes,default,[p] (pause:short); [n] children/*[1]; [t] \"minutes\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2032\"]'.split(\",\"),'Rule,minute,default,[p] (pause:short); [n] children/*[1]; [t] \"minute\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2032\"],children/*[1][text()=\"1\"]'.split(\",\"),'Rule,seconds,default,[p] (pause:short); [n] children/*[1]; [t] \"seconds\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2033\"]'.split(\",\"),\n'Rule,second,default,[p] (pause:short); [n] children/*[1]; [t] \"second\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2033\"],children/*[1][text()=\"1\"]'.split(\",\"),'Rule,degrees-angle,Prime_Angle,[n] children/*[1]; [t] \"degrees\"; [p] (pause:short),self::punctuation,@role=\"degree\"'.split(\",\"),'Rule,degree-angle,Prime_Angle,[n] children/*[1]; [t] \"degree\"; [p] (pause:short),self::punctuation,@role=\"degree\",children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{minutes-angle{Prime_Angle{[n] children/*[1]; [t] \"minutes\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2032\"]'.split(\"{\"),'Rule,minute-angle,Prime_Angle,[n] children/*[1]; [t] \"minute\"; [p] (pause:short),self::superscript,children/*[2][@role=\"prime\"],children/*[2][text()=\"\\u2032\"],children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{seconds-angle{Prime_Angle{[n] children/*[1]; [t] \"seconds\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2033\"]'.split(\"{\"),'Rule,second-angle,Prime_Angle,[n] children/*[1]; [t] \"second\"; [p] (pause:short),self::superscript,children/*[2][@role=\"prime\"],children/*[2][text()=\"\\u2033\"],children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{feet-length{Prime_Length{[n] children/*[1]; [t] \"feet\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2032\"]'.split(\"{\"),'Rule,foot-length,Prime_Length,[n] children/*[1]; [t] \"foot\"; [p] (pause:short),self::superscript,children/*[2][@role=\"prime\"],children/*[2][text()=\"\\u2032\"],children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{inches-length{Prime_Length{[n] children/*[1]; [t] \"inches\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2033\"]'.split(\"{\"),'Rule,inch-length,Prime_Length,[n] children/*[1]; [t] \"inch\"; [p] (pause:short),self::superscript,children/*[2][@role=\"prime\"],children/*[2][text()=\"\\u2033\"],children/*[1][text()=\"1\"]'.split(\",\"),\n[\"Rule\",\"punctuated\",\"default\",\"[m] children/*\",\"self::punctuated\"],[\"Rule\",\"function\",\"default\",\"[n] text()\",\"self::function\"],[\"Rule\",\"appl\",\"default\",'[n] children/*[1]; [t] \"de\"; [n] children/*[2]; [p] (pause:\"short\")',\"self::appl\"],'Rule,appl-simple,default,[n] children/*[1]; [t] \"de\"; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"simple function\",name(children/*[2])=\"appl\"'.split(\",\"),'Rule,appl-simple,default,[n] children/*[1]; [t] \"de\"; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"simple function\",name(children/*[2])=\"fenced\",name(children/*[2]/children/*[1])=\"appl\"'.split(\",\"),\n[\"Rule\",\"appl\",\"Functions_None\",'[p] (pause:\"short\"); [n] children/*[1]; [t] \"fois\"; [n] children/*[2]; [p] (pause:\"short\")',\"self::appl\"],'Rule,function-prefix,default,[n] children/*[1]; [n] children/*[2],self::appl,@role=\"prefix function\"'.split(\",\"),'Rule{binary-operation{ImpliedTimes_MoreImpliedTimes{[n] . (grammar:impliedTimes); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{parent::*/parent::infixop[@role=\"implicit\"]{following-sibling::*{not(contains(@grammar, \"impliedTimes\"))'.split(\"{\"),\n'Rule{function-prefix-simple-arg{default{[n] children/*[1]; [n] children/*[2]{self::appl{@role=\"prefix function\"{name(children/*[2])=\"fenced\"{contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"){name(children/*[2]/children/*[1])!=\"number\"{name(children/*[2]/children/*[1])!=\"identifier\"{name(children/*[2]/children/*[1])!=\"appl\"'.split(\"{\"),'Rule,function-prefix-embell,default,[p] (pause:\"short\"); [n] children/*[1]; [n] children/*[2]; [p] (pause:\"short\"); ,self::appl,@role=\"prefix function\",name(children/*[1])!=\"function\"'.split(\",\"),\n'Rule{function-prefix-fenced-or-frac-arg{default{[p] (pause:\"short\"); [n] children/*[1]; [t] \"de\"; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{(name(children/*[2])=\"fenced\" and not(contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"))) or name(children/*[2])=\"fraction\" or (name(children/*[2])!=\"fenced\" and not(contains(children/*[2]/@annotation, \"clearspeak:simple\"))){self::*'.split(\"{\"),'Rule,function-prefix-subscript,default,[p] (pause:\"short\"); [n] children/*[1]; [t] \"de\"; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"prefix function\",name(children/*[1])=\"subscript\",self::*'.split(\",\"),\n'Rule{function-ln{default{[n] children/*[1]; [n] children/*[2]{self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{not(following-sibling::*){not(contains(@grammar, \"NatLog\"))'.split(\"{\"),'Rule{function-ln{default{[n] children/*[1]; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{not(contains(@grammar, \"NatLog\"))'.split(\"{\"),'Rule{function-ln{default{[n] children/*[1]; [t] \"de\"; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{name(children/*[2])=\"fenced\"{not(contains(@grammar, \"NatLog\"))'.split(\"{\"),\n'Rule;function-ln;Log_LnAsNaturalLog;[n] . (grammar:NatLog);self::appl;@role=\"prefix function\";content/*[2][text()=\"ln\"];not(following-sibling::*);not(contains(@grammar, \"NatLog\"))'.split(\";\"),'Rule{function-ln{Log_LnAsNaturalLog{[n] . (grammar:NatLog); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{not(contains(@grammar, \"NatLog\"))'.split(\"{\"),'Rule{function-prefix-as-exp{default{[n] children/*[1]; [t] \"de\"; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(parent::*/parent::*)=\"superscript\"{not(following-sibling::*){(name(children/*[2])=\"fenced\" and not(contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"))) or name(children/*[2])=\"fraction\" or (name(children/*[2])!=\"fenced\" and not(contains(children/*[2]/@annotation, \"clearspeak:simple\")))'.split(\"{\"),\n'Rule,function-prefix-subscript-as-exp,default,[n] children/*[1]; [t] \"de\"; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"prefix function\",name(parent::*/parent::*)=\"superscript\",not(following-sibling::*),name(children/*[1])=\"subscript\"'.split(\",\"),'Rule,function-prefix-hyper,default,[p] (pause:\"short\"); [n] children/*[1]; [t] \"de\"; [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"prefix function\",CQFisHyperbolic'.split(\",\"),'Rule{function-prefix-inverse{default{[p] (pause:\"short\");  [n] children/*[1]/children/*[1]; [t] \"inverse de\"; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),\n'Rule{function-prefix-inverse{Trig_Reciprocal{[p] (pause:\"short\"); [t] \"la reciproque de\"; [n] children/*[1]/children/*[1]; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),'Rule{function-prefix-inverse{Trig_Reciprocal{[p] (pause:\"short\"); [t] \"la reciproque de\"; [n] children/*[1]/children/*[1];[n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{contains(children/*[2]/@annotation, \"clearspeak:simple\"){children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),\n'Rule,appl-triginverse,Trig_TrigInverse,[p] (pause:\"short\"); [n] children/*[1]; [t] \"de\"; [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"prefix function\",name(children/*[1])=\"superscript\",name(children/*[1]/children/*[2])=\"prefixop\",children/*[1]/children/*[2][@role=\"negative\"],children/*[1]/children/*[2]/children/*[1][text()=\"1\"]'.split(\",\"),'Rule{function-prefix-arc-simple{Trig_ArcTrig{[p] (pause:\"short\"); [t] \"arc\"; [n] children/*[1]/children/*[1]; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),\n'Rule{function-prefix-arc-simple{Trig_ArcTrig{[p] (pause:\"short\"); [t] \"arc\"; [n] children/*[1]/children/*[1]; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{name(children/*[2])=\"fenced\"{children/*[2]/children/*[1][@role=\"prefix function\"]{contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"){not(contains(@grammar, \"functions_none\"))'.split(\"{\"),\n'Rule{function-prefix-arc{Trig_ArcTrig{[p] (pause:\"short\"); [t] \"arc\"; [n] children/*[1]/children/*[1]; [t] \"de\"; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\")){(name(children/*[2])=\"fenced\" and not(contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"))) or (name(children/*[2])=\"fraction\" and children/*[2][@role!=\"vulgar\"])'.split(\"{\"),\n'Rule{function-inverse{default{[n] children/*[1]; [t] \"inverse\"{self::superscript{@role=\"prefix function\" or @role=\"simple function\"{name(children/*[2])=\"prefixop\"{children/*[2][@role=\"negative\"]{children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),'Rule{function-inverse{Functions_Reciprocal{[t] \"la reciproque de\"; [n] children/*[1]{self::superscript{@role=\"prefix function\" or @role=\"simple function\"{name(children/*[2])=\"prefixop\"{children/*[2][@role=\"negative\"]{children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),\n'Rule;function-inverse;Functions_None;[n] . (grammar:functions_none);self::superscript;@role=\"prefix function\" or @role=\"simple function\";name(children/*[2])=\"prefixop\";children/*[2][@role=\"negative\"];children/*[2]/children/*[1][text()=\"1\"];not(contains(@grammar, \"functions_none\"))'.split(\";\"),[\"Rule\",\"superscript\",\"default\",'[n] children/*[1]; [t] \"\\u00e0 l\\'exposant\" (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"); [t] \"fin exposant\" (pause:\"short\")',\"self::superscript\"],'Rule,superscript-simple-exponent,default,[n] children/*[1]; [t] \"\\u00e0 la puissance\"; [n] children/*[2]; [p] (pause:\"medium\"),self::superscript,not(descendant::superscript)'.split(\",\"),\n'Rule,superscript-simple-exponent,default,[n] children/*[1]; [t] \"\\u00e0 la puissance\"; [n] children/*[2]; [p] (pause:\"medium\") ,self::superscript,not(descendant::superscript),not(following-sibling::*)'.split(\",\"),'Aliases;superscript-simple-exponent;self::superscript;children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"];name(children/superscript/children/*[1])=\"number\";contains(children/superscript/children/*[1]/@annotation, \"clearspeak:simple\")'.split(\";\"),\n'Aliases;superscript-simple-exponent;self::superscript;children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"];name(children/superscript/children/*[1])=\"fraction\";contains(children/superscript/children/*[1]/@annotation, \"clearspeak:simple\")'.split(\";\"),[\"Aliases\",\"superscript-simple-exponent\",\"self::superscript\",'children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"]','name(children/superscript/children/*[1])=\"identifier\"'],\n'Aliases;superscript-simple-exponent;self::superscript;children/*[2][@role=\"implicit\"];count(children/*[2]/children/*)=2;contains(children/*[2]/children/*[1]/@annotation, \"simple\");name(children/*[2]/children/*[2])=\"superscript\";(name(children/*[2]/children/*[2]/children/*[1])=\"number\" and contains(children/*[2]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\")) or name(children/*[2]/children/*[2]/children/*[1])=\"identifier\";children/*[2]/children/*[2]/children/*[2][text()=\"2\"] or children/*[2]/children/*[2]/children/*[2][text()=\"3\"]'.split(\";\"),\n'Rule;superscript-simple-function;Functions_None;[n] . (grammar:functions_none);self::superscript;name(children/*[1])=\"identifier\";children/*[1][@role=\"simple function\"];not(contains(@grammar, \"functions_none\"))'.split(\";\"),'Rule,superscript-ordinal,Exponent_Ordinal,[n] children/*[1]; [t] \"\\u00e0 la\"; [n] children/*[2] (grammar:ordinal); [t] \"puissance\" (pause:\"medium\"),self::superscript,name(children/*[2])=\"identifier\",children/*[2][@role=\"latinletter\"]'.split(\",\"),'Rule,superscript-ordinal,Exponent_Ordinal,[n] children/*[1]; [t] \"\\u00e0 la puissance\"; [n] children/*[2]; [p] (pause:\"medium\"),self::superscript,name(children/*[2])=\"identifier\",children/*[2][@role=\"latinletter\"],CQFisCaptial'.split(\",\"),\n'Rule{exponent{default{[n] text() (join:\"-\"); [t] \"i\\u00e8me\"{self::identifier{contains(@grammar, \"ordinal\")'.split(\"{\"),'Rule;exponent;default;[t] CSFordinalExponent;self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()!=\"0\"'.split(\";\"),'Rule;exponent;Exponent_Ordinal;[t] CSFwordOrdinal;self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()!=\"0\"'.split(\";\"),'Rule;exponent;Exponent_Ordinal;[t] \"zero\";self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()=\"0\"'.split(\";\"),\n'Rule;exponent;Exponent_OrdinalPower;[t] CSFwordOrdinal;self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()!=\"0\"'.split(\";\"),'Rule;exponent;Exponent_OrdinalPower;[t] \"zero\";self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()=\"0\"'.split(\";\"),'Rule,square,default,[n] children/*[1]; [t] \"au carr\\u00e9\",self::superscript,children/*[2][text()=\"2\"],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),self::*,self::*'.split(\",\"),\n'Rule,cube,default,[n] children/*[1]; [t] \"au cube\",self::superscript,children/*[2][text()=\"3\"],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),self::*,self::*'.split(\",\"),'Rule;paren-simple;default;[n] children/*[1];self::fenced;@role=\"leftright\";contains(children/*[1]/@annotation, \"clearspeak:simple\");name(../..)!=\"superscript\" and name(../..)!=\"subscript\"'.split(\";\"),'Rule;paren-simple-exp;default;[n] children/*[1];self::fenced;@role=\"leftright\";name(../..)=\"superscript\";children/*[1][@role=\"integer\"] or children/*[1][@role=\"float\"] or (children/*[1][@role=\"vulgar\"] and contains(children/*[1]/@annotation, \"clearspeak:simple\")) or children/*[1][@role=\"latinletter\"] or children/*[1][@role=\"greekletter\"] or children/*[1][@role=\"otherletter\"]'.split(\";\"),\n'Rule;paren-simple-nested-func;default;[n] children/*[1];self::fenced;@role=\"leftright\";name(../*[1])=\"identifier\" or name(../*[1])=\"function\";parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"];children/*[1][@role=\"simple function\" or @role=\"prefix function\"];contains(children/*[1]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\") or name(children/*[1]/children/*[2]/children/*[1])=\"subscript\" or name(children/*[1]/children/*[2]/children/*[1])=\"superscript\" or children/*[1]/children/*[2]/children/*[1][@role=\"vulgar\"] '.split(\";\"),\n'Rule{paren-simple-nested-func-no-bracket{Functions_None{[n] children/*[1];{self::fenced{@role=\"leftright\"{name(../*[1])=\"identifier\" or name(../*[1])=\"function\"{parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"]{children/*[1][@role=\"simple function\" or @role=\"prefix function\"]{name(children/*[1]/children/*[1])=\"identifier\" or name(children/*[1]/children/*[1])=\"function\"{contains(children/*[1]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"){name(children/*[1]/children/*[2]/children/*[1])=\"identifier\" or name(children/*[1]/children/*[2]/children/*[1])=\"number\"'.split(\"{\"),\n'Rule,fences-open-close,default,[p] (pause:\"short\"); [n] content/*[1] (grammar:spokenFence); [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2] (grammar:spokenFence); [p] (pause:\"short\"),self::fenced,@role=\"leftright\"'.split(\",\"),'Rule{paren-simple-nested-func{default{[p] (pause:\"short\"); [n] content/*[1]; [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2]; [p] (pause:\"short\"){self::fenced{@role=\"leftright\"{name(../*[1])=\"identifier\" or name(../*[1])=\"function\"{parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"]{not(contains(children/*[1]/@annotation, \"clearspeak:simple\"))'.split(\"{\"),\n'Rule{paren-simple-nested-func{Functions_None{[p] (pause:\"short\"); [n] content/*[1] (grammar:spokenFence); [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2] (grammar:spokenFence); [p] (pause:\"short\"){self::fenced{@role=\"leftright\"{name(../*[1])=\"identifier\" or name(../*[1])=\"function\"{parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"]{children/*[1][@role=\"simple function\" or @role=\"prefix function\"]{contains(children/*[1]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\") or name(children/*[1]/children/*[2]/children/*[1])=\"subscript\" or name(children/*[1]/children/*[2]/children/*[1])=\"superscript\" or children/*[1]/children/*[2]/children/*[1][@role=\"vulgar\"] '.split(\"{\"),\n[\"SpecializedRule\",\"fences-open-close\",\"default\",\"Paren_Speak\"],[\"Aliases\",\"fences-open-close\",\"self::fenced\",'@role=\"composed function\"'],[\"Rule\",\"fence-silent\",\"Paren_Silent\",'[p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\")',\"self::fenced\"],'Rule,fences-open-close,ImpliedTimes_None,[p] (pause:\"short\"); [n] content/*[1] (grammar:spokenFence); [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2] (grammar:spokenFence); [p] (pause:\"short\"),self::fenced,@role=\"leftright\",parent::*/parent::*[@role!=\"simple function\"],parent::*/parent::*[@role!=\"prefix function\"]'.split(\",\"),\n'Rule;fence-nesting;Paren_SpeakNestingLevel;[n] text() (grammar:insertNesting=CSFnestingDepth);self::fence;contains(@grammar, \"spokenFence\");CQFmatchingFences'.split(\";\"),[\"Rule\",\"fence-no-nesting\",\"Paren_SpeakNestingLevel\",\"[n] text()\",\"self::fence\"],'Rule,fences-points,Paren_CoordPoint,[t] \"le point avec coordon\\u00e9es\"; [n] children/*[1],self::fenced,name(children/*[1])=\"punctuated\",children/*[1][@role=\"sequence\"]'.split(\",\"),'Rule{fences-interval{Paren_Interval{[t] \"un intervalle de\"; [n] children/*[1]/children/*[1]; [t] \"\\u00e0\"; [n] children/*[1]/children/*[3]; [p] (pause:\"short\"); [n] . (grammar:interval){self::fenced{not(contains(@grammar, \"interval\")){name(children/*[1])=\"punctuated\"{children/*[1][@role=\"sequence\"]{count(./children/*[1]/content/*)=1{children/*[1]/content/*[1][@role=\"comma\"]'.split(\"{\"),\n'Rule{interval-open{Paren_Interval{[t] \"sans inclure\"; [n] children/*[1]/children/*[1]; [t] \"ni\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\")\"'.split(\"{\"),'Rule{interval-closed-open{Paren_Interval{[t] \"avec\"; [n] children/*[1]/children/*[1]; [t] \"inclus\"; [p] (pause:\"short\"); [t] \"mais sans inclure\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"[\"{content/*[2]/text()=\")\"'.split(\"{\"),\n'Rule{interval-open-closed{Paren_Interval{[t] \"sans inclure\"; [n] children/*[1]/children/*[1]; [p] (pause:\"short\"); [t] \"mais avec\"; [n] children/*[1]/children/*[3]; [t] \"inclus\"{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\"]\"'.split(\"{\"),'Rule{interval-closed{Paren_Interval{[t] \"avec\"; [n] children/*[1]/children/*[1]; [t] \"et\"; [n] children/*[1]/children/*[3]; [t] \"inclus\"{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"[\"{content/*[2]/text()=\"]\"'.split(\"{\"),\n'Rule{interval-open-inf-r{Paren_Interval{[t] \"sans inclure\"; [n] children/*[1]/children/*[1]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\")\"{children/*[1]/children/*[3]/text()=\"\\u221e\" or (name(children/*[1]/children/*[3])=\"prefixop\" and children/*[1]/children/*[3]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),'Rule{interval-open-inf-l{Paren_Interval{[t] \"sans inclure\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\")\"{children/*[1]/children/*[1]/text()=\"\\u221e\" or (name(children/*[1]/children/*[1])=\"prefixop\" and children/*[1]/children/*[1]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),\n'Rule;interval-open-inf-lr;Paren_Interval;;self::fenced;contains(@grammar, \"interval\");content/*[1]/text()=\"(\";content/*[2]/text()=\")\";children/*[1]/children/*[3]/text()=\"\\u221e\" or (name(children/*[1]/children/*[3])=\"prefixop\" and children/*[1]/children/*[3]/children/*[1]/text()=\"\\u221e\");children/*[1]/children/*[1]/text()=\"\\u221e\" or (name(children/*[1]/children/*[1])=\"prefixop\" and children/*[1]/children/*[1]/children/*[1]/text()=\"\\u221e\")'.split(\";\"),'Rule{interval-closed-open-inf{Paren_Interval{[t] \"avec\"; [n] children/*[1]/children/*[1]; [t] \"inclus\"{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"[\"{content/*[2]/text()=\")\"{children/*[1]/children/*[3]/text()=\"\\u221e\" or (name(children/*[1]/children/*[3])=\"prefixop\" and children/*[1]/children/*[3]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),\n'Rule{interval-open-closed-inf{Paren_Interval{[t] \"avec\"; [n] children/*[1]/children/*[3]; [t] \"inclus\"{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\"]\"{children/*[1]/children/*[1]/text()=\"\\u221e\" or (name(children/*[1]/children/*[1])=\"prefixop\" and children/*[1]/children/*[1]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),'Rule,paren-nested-embellished-funcs,Functions_None,[p] (pause:\"short\"); [n] content/*[1]; [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2]; [p] (pause:\"short\"),self::fenced,@role=\"leftright\",name(../..)=\"appl\",name(children/*[1]) = \"appl\",preceding-sibling::*/descendant-or-self::*[@role=\"subsup\"] or children/*[1]/descendant-or-self::*[@role=\"subsup\"]'.split(\",\"),\n'Rule;set-empty;default;[t] \"ensemble vide\";self::fenced;@role=\"set empty\"'.split(\";\"),'Rule,set-extended,default,[t] \"ensemble des\"; [n] children/*[1]/children/*[1]; [t] \"tel que\"; [n] children/*[1]/children/*[3],self::fenced,@role=\"set extended\"'.split(\",\"),'Rule,set-collection,default,[t] \"ensemble\"; [n] children/*[1],self::fenced,@role=\"set collection\"'.split(\",\"),[\"Aliases\",\"set-collection\",\"self::fenced\",'@role=\"set singleton\"'],'Rule,set-extended,Sets_woAll,[t] \"ensemble de\"; [n] children/*[1]/children/*[1]; [t] \"tel que\"; [n] children/*[1]/children/*[3],self::fenced,@role=\"set extended\"'.split(\",\"),\n'Rule;set-collection;Sets_SilentBracket;[n] children/*[1];self::fenced;@role=\"set collection\"'.split(\";\"),[\"Rule\",\"subscript\",\"default\",'[p] (pause:short); [n] children/*[1]; [t] \"sub\"; [n] children/*[2]; [p] (pause:short)',\"self::subscript\"],'Rule,subscript-base,default,[n] children/*[1]; [t] \"base\"; [n] children/*[2],self::subscript,CQFisLogarithm'.split(\",\"),'Rule{subscript-index{default{[n] children/*[1]; [t] \"sub\"; [n] children/*[2]{self::subscript{contains(@grammar, \"simpleDet\")'.split(\"{\"),\n[\"Rule\",\"fraction\",\"default\",'[p] (pause:short); [t] \"fraction avec num\\u00e9rateur\"; [n] children/*[1]; [p] (pause:short); [t] \"et d\\u00e9nominateur\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],'Rule,fraction,Functions_None,[p] (pause:short); [t] \"fraction avec num\\u00e9rateur\"; [n] children/*[1]; [p] (pause:short); [t] \"et d\\u00e9nominateur\"; [n] children/*[2]; [p] (pause:short),self::fraction,name(children/*[1])=\"appl\" or name(children/*[2])=\"appl\"'.split(\",\"),'Rule{simple-fraction{default{[p] (pause:short); [n] children/*[1]; [t] \"sur\"; [n] children/*[2]; [p] (pause:short){self::fraction{contains(children/*[1]/@annotation, \"clearspeak:simple\") or contains(children/*[1]/@annotation, \"clearspeak:unit\"){contains(children/*[2]/@annotation, \"clearspeak:simple\") or contains(children/*[2]/@annotation, \"clearspeak:unit\")'.split(\"{\"),\n'Rule,simple-vulgar-fraction,default,[p] (pause:short); [n] children/*[1]; [t] \"sur\"; [n] children/*[2]; [p] (pause:short),self::fraction,@role=\"vulgar\"'.split(\",\"),'Rule,simple-text-fraction,default,[p] (pause:short); [n] children/*[1]; [t] \"sur\"; [n] children/*[2]; [p] (pause:short),self::fraction,name(children/*[1])=\"text\",name(children/*[2])=\"text\"'.split(\",\"),'Rule,simple-text-fraction,default,[p] (pause:short); [n] children/*[1]; [t] \"sur\"; [n] children/*[2]; [p] (pause:short),self::fraction,name(children/*[1])=\"infixop\",children/*[1][@role=\"unit\"],name(children/*[2])=\"text\"'.split(\",\"),\n'Rule;vulgar-fraction;default;[t] CSFvulgarFraction;self::fraction;@role=\"vulgar\";CQFvulgarFractionSmall'.split(\";\"),[\"Rule\",\"fraction\",\"Fraction_Over\",'[p] (pause:short); [n] children/*[1]; [t] \"sur\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_OverEndFrac\",'[p] (pause:short); [n] children/*[1]; [t] \"sur\"; [n] children/*[2]; [p] (pause:short); [t] \"fin fraction\"; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_FracOver\",'[p] (pause:short); [t] \"fraction\"; [n] children/*[1]; [t] \"sur\"; [n] children/*[2]; [p] (pause:short)',\n\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_Per\",'[p] (pause:short); [n] children/*[1]; [t] \"par\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_GeneralEndFrac\",'[p] (pause:short); [t] \"fraction avec num\\u00e9rateur\"; [n] children/*[1]; [p] (pause:short); [t] \"et d\\u00e9nominateur\"; [n] children/*[2]; [p] (pause:short); [t] \"fin fraction\"; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_General\",'[p] (pause:short); [t] \"fraction avec num\\u00e9rateur\"; [n] children/*[1]; [p] (pause:short); [t] \"et d\\u00e9nominateur\"; [n] children/*[2]; [p] (pause:short)',\n\"self::fraction\"],'Rule;simple-vulgar-fraction;Fraction_Ordinal;[t] CSFvulgarFraction;self::fraction;@role=\"vulgar\"'.split(\";\"),'Rule{fraction{Fraction_EndFrac{[p] (pause:short); [n] . (grammar:endfrac); [t] \"fin fraction\"; [p] (pause:short){self::fraction{not(contains(@grammar, \"endfrac\")){not(contains(children/*[1]/@annotation, \"clearspeak:unit\")){not(contains(children/*[2]/@annotation, \"clearspeak:unit\"))'.split(\"{\"),'Rule{vulgar-fraction{Fraction_EndFrac{[p] (pause:short); [n] children/*[1]; [t] \"sur\"; [n] children/*[2]; [p] (pause:short){self::fraction{name(children/*[1])=\"fraction\"{name(children/*[2])=\"fraction\"{contains(children/*[1]/@annotation, \"clearspeak:simple\"){contains(children/*[2]/@annotation, \"clearspeak:simple\")'.split(\"{\"),\n'Rule;simple-vulgar-fraction;Fraction_EndFrac;[t] CSFvulgarFraction;self::fraction;@role=\"vulgar\";contains(@annotation, \"clearspeak:simple\");self::*'.split(\";\"),[\"Rule\",\"sqrt\",\"default\",'[t] \"la racine carr\\u00e9e de\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short)',\"self::sqrt\"],'Rule,sqrt-nested,default,[p] (pause: \"short\"); [t] \"la racine carr\\u00e9e de\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),\n'Rule,negative-sqrt,default,[t] \"la racine carr\\u00e9e n\\u00e9gative de\"; [n] children/*[1]/children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::prefixop,@role=\"negative\",name(children/*[1])=\"sqrt\"'.split(\",\"),'Rule,negative-sqrt,default,[p] (pause: \"short\"); [t] \"la racine carr\\u00e9e n\\u00e9gative de\"; [n] children/*[1]/children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::prefixop,@role=\"negative\",name(children/*[1])=\"sqrt\",not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),\n'Rule,sqrt-plus-minus,Roots_PosNegSqRoot,[t] \"la racine carr\\u00e9e positive de\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),'Rule,sqrt-nested-plus-minus,Roots_PosNegSqRoot,[p] (pause: \"short\"); [t] \"la racine carr\\u00e9e positive de\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,not(preceding-sibling::*),ancestor::sqrt|ancestor::root,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),\n'Rule,sqrt-plus-minus,Roots_PosNegSqRootEnd,[t] \"la racine carr\\u00e9e positive de\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),'Rule,sqrt-nested-plus-minus,Roots_PosNegSqRootEnd,[p] (pause: \"short\"); [t] \"la racine carr\\u00e9e positive de\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,not(preceding-sibling::*),ancestor::sqrt|ancestor::root,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),\n'Rule{sqrt-endroot{Roots_RootEnd{[n] . (grammar:EndRoot); [t] \"fin racine\"; [p] (pause:short){self::sqrt{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),'Rule{negative-sqrt-endroot{Roots_RootEnd{[n] . (grammar:EndRoot); [t] \"fin racine\"; [p] (pause:short){self::prefixop{@role=\"negative\"{name(children/*[1])=\"sqrt\"{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),'Rule{sqrt-endroot{Roots_PosNegSqRootEnd{[n] . (grammar:EndRoot); [t] \"fin racine\"; [p] (pause:short){self::sqrt{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),\n'Rule{negative-sqrt-endroot{Roots_PosNegSqRootEnd{[n] . (grammar:EndRoot); [t] \"fin racine\"; [p] (pause:short){self::prefixop{@role=\"negative\"{name(children/*[1])=\"sqrt\"{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),'Rule,cube,default,[t] \"la racine cubique de\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short),self::root,children/*[1][text()=\"3\"]'.split(\",\"),'Rule,cube-nested,default,[p] (pause:short); [t] \"la racine cubique de\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short),self::root,children/*[1][text()=\"3\"],not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),\n[\"Rule\",\"root\",\"default\",'[t] \"la\"; [n] children/*[1] (grammar:ordinal); [t] \"racine de\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short)',\"self::root\"],'Rule,root-nested,default,[p] (pause:short); [t] \"la\"; [n] children/*[1] (grammar:ordinal); [t] \"racine de\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short),self::root,not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),'Rule{root-endroot{Roots_RootEnd{[n] . (grammar:EndRoot); [t] \"fin racine\"; [p] (pause:short){self::root{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),\n'Rule{root-endroot{Roots_PosNegSqRootEnd{[n] . (grammar:EndRoot); [t] \"fin racine\"; [p] (pause:short){self::root{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),'Rule,negative,default,[t] \"n\\u00e9gatif\"; [n] children/*[1],self::prefixop,@role=\"negative\"'.split(\",\"),'Rule,positive,default,[t] \"positif\"; [n] children/*[1],self::prefixop,@role=\"positive\"'.split(\",\"),'Rule,angle-measure,default,[t] \"la mesure de l\\'\" (join:\"\"); [n] content/*[1]; [n] children/*[2] (grammar:angle),self::infixop,content/*[1]/text()=\"\\u2220\",children/*[1][text()=\"m\"]'.split(\",\"),\n[\"Rule\",\"prefix\",\"default\",\"[m] content/* (grammar:prefix); [n] children/*[1]\",\"self::prefixop\"],[\"Rule\",\"postfix\",\"default\",\"[n] children/*[1]; [m] content/* (grammar:postfix)\",\"self::postfixop\"],'Rule{set-prefix-operators{default{[t] \"le\"; [n] self::* (grammar:!prefix); [t] \"de\"{self::*{contains(@grammar,\"prefix\"){descendant-or-self::*/text()=\"\\u2229\" or descendant-or-self::*/text()=\"\\u222a\"{self::*{self::*{self::*'.split(\"{\"),[\"Rule\",\"binary-operation\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator);\",\n\"self::infixop\"],'Rule,binary-operation,ImpliedTimes_MoreImpliedTimes,[m] children/* (sepFunc:CTXFcontentIterator);,self::infixop,@role=\"implicit\"'.split(\",\"),'Rule,binary-operation-pause,default,[p] (pause:short); [m] children/* (sepFunc:CTXFcontentIterator);,self::infixop,@role=\"implicit\",name(children/*[1])=\"appl\"'.split(\",\"),'Rule,binary-operation-pause,default,[m] children/* (sepFunc:CTXFcontentIterator); [p] (pause:short),self::infixop,@role=\"implicit\",name(children/*[last()])=\"appl\"'.split(\",\"),\n'Rule,binary-operation-pause,default,[p] (pause:short); [m] children/* (sepFunc:CTXFcontentIterator); [p] (pause:short),self::infixop,@role=\"implicit\",name(children/*[1])=\"appl\",name(children/*[last()])=\"appl\"'.split(\",\"),'Rule;implicit-times;default;[p] (pause:short);self::operator;@role=\"multiplication\";text()=\"\\u2062\"'.split(\";\"),'Rule implicit-times default  self::operator @role=\"multiplication\" text()=\"\\u2062\" CQFsimpleArguments'.split(\" \"),'Rule;implicit-times;default;[n] text();self::operator;@role=\"multiplication\";text()=\"\\u2062\";CQFfencedArguments'.split(\";\"),\n'Rule;implicit-times;ImpliedTimes_MoreImpliedTimes;[n] text();self::operator;@role=\"multiplication\";text()=\"\\u2062\"'.split(\";\"),'Rule implicit-times ImpliedTimes_None  self::operator @role=\"multiplication\" text()=\"\\u2062\"'.split(\" \"),'Rule{binary-operation-simple{default{[m] children/* (rate:\"0.5\"); [p] (pause:short){self::infixop{@role=\"implicit\"{contains(@annotation, \"clearspeak:simple\"){not(contains(@grammar, \"inFrac\"))'.split(\"{\"),'Rule;simple-in-fraction;default;[n] . (rate:\"0.5\",grammar:inFrac);self::*;contains(@annotation, \"clearspeak:simple\");not(contains(@grammar, \"inFrac\"));name(.)!=\"identifier\";name(.)!=\"function\";name(.)!=\"number\";name(parent::*/parent::*)=\"fraction\";not(preceding-sibling::*)'.split(\";\"),\n'Rule;operators-after-power;Exponent_AfterPower;[m] children/* (rate:\"0.5\");self::infixop;@role=\"implicit\";contains(@grammar, \"afterPower\")'.split(\";\"),[\"Rule\",\"relseq\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::relseq\"],[\"Rule\",\"multrel\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::multirel\"],'Rule;natural-numbers;default;[t] \"les nombres entier naturel\";self::identifier;text()=\"\\u2115\" or (text()=\"N\" and @font=\"double-struck\");self::*;self::*;self::*'.split(\";\"),\n'Rule;integers;default;[t] \"les nombres entiers\";self::identifier;text()=\"\\u2124\" or (text()=\"Z\" and @font=\"double-struck\");self::*;self::*;self::*'.split(\";\"),'Rule;rational-numbers;default;[t] \"les Nombres rationnels\";self::identifier;text()=\"\\u211a\" or (text()=\"Q\" and @font=\"double-struck\");self::*;self::*;self::*'.split(\";\"),'Rule;real-numbers;default;[t] \"les nombres r\\u00e9els\";self::identifier;text()=\"\\u211d\" or (text()=\"R\" and @font=\"double-struck\");self::*;self::*;self::*'.split(\";\"),'Rule;complex-numbers;default;[t] \"les nombres complexes\";self::identifier;text()=\"\\u2102\" or (text()=\"C\" and @font=\"double-struck\");self::*;self::*;self::*'.split(\";\"),\n'Rule,natural-numbers-super,default,[t] \"n\" (join: \"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u2115\" or (children/*[1]/text()=\"N\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*'.split(\",\"),'Rule,integers-super,default,[t] \"z\" (join: \"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u2124\" or (children/*[1]/text()=\"Z\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*'.split(\",\"),'Rule,rational-numbers-super,default,[t] \"q\" (join: \"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u211a\" or (children/*[1]/text()=\"Q\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*'.split(\",\"),\n'Rule,real-numbers-super,default,[t] \"r\" (join:\"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u211d\" or (children/*[1]/text()=\"R\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*'.split(\",\"),'Rule,complex-numbers-super,default,[t] \"c\" (join:\"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u2102\" or (children/*[1]/text()=\"C\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*'.split(\",\"),\n'Rule;natural-numbers-with-zero;default;[t] \"les nombres entiers naturel avec zero\";self::subscript;children/*[1]/text()=\"\\u2115\" or (children/*[1]/text()=\"N\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"0\"'.split(\";\"),'Rule;positive-integers;default;[t] \"les nombres entiers positif\";self::superscript;children/*[1]/text()=\"\\u2124\" or (children/*[1]/text()=\"Z\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"+\";self::*;self::*;self::*'.split(\";\"),'Rule;positive-integers;default;[t] \"les nombres entiers n\\u00e9gatif\";self::superscript;children/*[1]/text()=\"\\u2124\" or (children/*[1]/text()=\"Z\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"-\";self::*;self::*;self::*'.split(\";\"),\n'Rule;positive-rational-numbers;default;[t] \"les nombres rationnels positif\";self::superscript;children/*[1]/text()=\"\\u211a\" or (children/*[1]/text()=\"Q\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"+\";self::*;self::*;self::*'.split(\";\"),'Rule;negative-rational-numbers;default;[t] \"les nombres rationnels n\\u00e9gatif\";self::superscript;children/*[1]/text()=\"\\u211a\" or (children/*[1]/text()=\"Q\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"-\";self::*;self::*;self::*'.split(\";\"),\n'Rule,fences-neutral,default,[p] (pause:short); [t] \"la valeur absolue de\"; [n] children/*[1]; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),'Rule,fences-neutral,AbsoluteValue_AbsEnd,[p] (pause:short); [t] \"la valeur absolue de\"; [n] children/*[1]; [p] (pause: short); [t] \"fin de valeur absolue\"; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),\n'Rule,fences-neutral,AbsoluteValue_Cardinality,[p] (pause:short); [t] \"la cardinalit\\u00e9 de\"; [n] children/*[1]; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),'Rule,fences-neutral,AbsoluteValue_Determinant,[p] (pause:short); [t] \"le d\\u00e9terminant de\"; [n] children/*[1]; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),\n[\"Rule\",\"matrix\",\"default\",'[t] \"la matrice de dimension\"; [t] count(children/*);  [t] \"par\";[t] count(children/*[1]/children/*); [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"rang\\u00e9e-:\"); [p] (pause:long)',\"self::matrix\"],'Rule{matrix-simple{default{[t] \"la matrice de dimension\"; [t] count(children/*);  [t] \"par\";[t] count(children/*[1]/children/*);  [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"rang\\u00e9e-:\",grammar:simpleDet); [p] (pause:long){self::matrix{count(children/*)<4{count(children/*[1]/children/*)<4{CQFcellsSimple'.split(\"{\"),\n'Rule,matrix-trivial,default,[t] \"la matrice de dimension 1 par 1 avec \\u00e9l\\u00e9ment\"; [n] children/*[1]; [p] (pause:long),self::vector,@role=\"squarematrix\"'.split(\",\"),'Rule{determinant{default{[t] \"le d\\u00e9terminant de la matrice de dimension\"; [t] count(children/*); [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"rang\\u00e9e-:\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"determinant\"{count(children/*)<4{CQFcellsSimple'.split(\"{\"),\n'Rule{determinant-simple{default{[t] \"le d\\u00e9terminant de la matrice de dimension\"; [t] count(children/*);  [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"rang\\u00e9e-:\"); [p] (pause:long){self::matrix{@role=\"determinant\"'.split(\"{\"),[\"Rule\",\"matrix-vector\",\"default\",'[t] \"la matrice colonne de dimension\"; [t] count(children/*); [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"rang\\u00e9e-:\",grammar:simpleDet); [p] (pause:long)',\n\"self::vector\"],[\"SpecializedRule\",\"matrix-vector\",\"default\",\"Matrix_SpeakColNum\"],'Rule{matrix-vector-simple{default{[t] \"la matrice colonne de dimension\"; [t] count(children/*); [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::vector{count(children/*)<4{CQFcellsSimple{@role!=\"squarematrix\"'.split(\"{\"),[\"Rule\",\"matrix-vector-simple\",\"Matrix_SilentColNum\",'[t] \"la matrice colonne de dimension\"; [t] count(children/*); [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long)',\n\"self::vector\"],'Rule{matrix-row-vector{default{[t] \"la matrice ligne de dimension\"; [t] count(children/*); [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/*[1]/children/* (ctxtFunc:CTXFnodeCounter,context:\"colonne-:\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"'.split(\"{\"),[\"SpecializedRule\",\"matrix-row-vector\",\"default\",\"Matrix_SpeakColNum\"],'Rule{matrix-row-vector-simple{default{[t] \"la matrice ligne de dimension\"; [t] count(children/*); [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/*[1]/children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"{count(children/*[1]/children/*)<4{CQFcellsSimple'.split(\"{\"),\n'Rule{matrix-row-vector-simple{Matrix_SilentColNum{[t] \"la matrice ligne de dimension\"; [t] count(children/*); [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/*[1]/children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"'.split(\"{\"),'Rule;matrix-row-simple;default;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\");self::row;contains(@grammar, \"simpleDet\")'.split(\";\"),[\"Rule\",\"matrix-row-simple\",\n\"Matrix_SilentColNum\",'[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\")',\"self::row\"],'Rule;line-simple;default;[n] children/*[1];self::line;contains(@grammar, \"simpleDet\")'.split(\";\"),[\"Rule\",\"matrix-row\",\"default\",'[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"colonne-,- \",sepFunc:CTXFpauseSeparator,separator:\"medium\"); [p] (pause:long)',\"self::row\"],[\"SpecializedRule\",\"matrix-row\",\"default\",\"Matrix_SpeakColNum\"],[\"Rule\",\"matrix-cell\",\"default\",\"[n] children/*[1]\",\"self::cell\"],\n'Rule{matrix-end-matrix{Matrix_EndMatrix{[n] . (grammar:EndMatrix); [t] \"fin matrice\"{self::matrix{not(contains(@grammar, \"EndMatrix\"))'.split(\"{\"),'Rule{matrix-end-vector{Matrix_EndMatrix{[n] . (grammar:EndMatrix); [t] \"fin matrice\"{self::vector{not(contains(@grammar, \"EndMatrix\"))'.split(\"{\"),'Rule{matrix-end-determinant{Matrix_EndMatrix{[n] . (grammar:EndMatrix); [t] \"fin d\\u00e9terminant\"{self::matrix{@role=\"determinant\"{not(contains(@grammar, \"EndMatrix\"))'.split(\"{\"),[\"Rule\",\"vector\",\"Matrix_Vector\",\n'[t] \"le vecteur colonne de dimension\"; [t] count(children/*); [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"rang\\u00e9e-:\",grammar:simpleDet); [p] (pause:long)',\"self::vector\"],[\"SpecializedRule\",\"vector\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{vector-simple{Matrix_Vector{[t] \"le vecteur colonne de dimension\"; [t] count(children/*); [t] \"par\";  [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::vector{count(children/*)<4{CQFcellsSimple'.split(\"{\"),\n[\"SpecializedRule\",\"vector-simple\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{row-vector{Matrix_Vector{[t] \"le vecteur ligne de dimension\"; [t] count(children/*); [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/*[1]/children/* (ctxtFunc:CTXFnodeCounter,context:\"colonne-:\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"'.split(\"{\"),[\"SpecializedRule\",\"row-vector\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{row-vector-simple{Matrix_Vector{[t] \"le vecteur ligne de dimension\"; [t] count(children/*); [t] \"par\"; [t] count(children/*[1]/children/*); [p] (pause:long); [m] children/*[1]/children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"{count(children/*[1]/children/*)<4{CQFcellsSimple'.split(\"{\"),\n[\"SpecializedRule\",\"row-vector-simple\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{vector-end-matrix{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"fin matrice\"{self::matrix{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),'Rule{vector-end-vector{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"fin vecteur\"{self::vector{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),'Rule{vector-end-vector{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"fin vecteur\"{self::matrix{@role=\"rowvector\"{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),\n'Rule{vector-end-determinant{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"fin d\\u00e9terminant\"{self::matrix{@role=\"determinant\"{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),'Rule,binomial,Matrix_Combinatoric,[n] children/*[2]/children/*[1]; [t] \"parmi\"; [n] children/*[1]/children/*[1]; ,self::vector,@role=\"binomial\"'.split(\",\"),'Rule{lines-summary{default{[p] (pause:short); [t] count(children/*); [t] \"lignes\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\")){self::*'.split(\"{\"),\n'Rule;lines-summary;MultiLineOverview_None;[n] . (grammar:layoutSummary);self::multiline;not(contains(@grammar, \"layoutSummary\"));self::*'.split(\";\"),[\"Aliases\",\"lines-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],'Rule{cases-summary{default{[p] (pause:short); [t] count(children/*); [t] \"cas\";  [n] . (grammar:layoutSummary){self::cases{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),'Rule;cases-summary;MultiLineOverview_None;[n] . (grammar:layoutSummary);self::cases;not(contains(@grammar, \"layoutSummary\"));self::*'.split(\";\"),\n[\"Rule\",\"lines\",\"default\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Ligne-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\"self::table\"],[\"Aliases\",\"lines\",\"self::multiline\"],[\"Rule\",\"line\",\"default\",\"[n] children/*[1]\",\"self::line\"],'Rule;row-medium;default;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"medium\");self::row;@role=\"table\"'.split(\";\"),[\"Aliases\",\"row-medium\",\"self::row\",'@role=\"cases\"'],'Rule;row-long;MultiLinePausesBetweenColumns_Long;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"long\");self::row;@role=\"table\"'.split(\";\"),\n[\"Aliases\",\"row-long\",\"self::row\",'@role=\"cases\"'],'Rule;row-short;MultiLinePausesBetweenColumns_Short;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\");self::row;@role=\"table\"'.split(\";\"),[\"Aliases\",\"row-short\",\"self::row\",'@role=\"cases\"'],'Rule;blank-cell;default;[t] \"vide\";self::cell;count(children/*)=0'.split(\";\"),'Rule;blank-empty;default;[t] \"vide\";self::empty;count(../*)=1;name(../..)=\"cell\" or name(../..)=\"line\"'.split(\";\"),[\"Rule\",\"cases\",\"default\",'[p] (pause:short);  [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Cas-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::cases\"],'Rule{lines-cases-summary{MultiLineLabel_Case{[p] (pause:short); [t] count(children/*); [t] \"cas\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-cases-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-cases\",\"MultiLineLabel_Case\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Cas-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\"self::table\"],\n[\"Aliases\",\"lines-cases\",\"self::multiline\"],'Rule{lines-equations-summary{MultiLineLabel_Equation{[p] (pause:short); [t] count(children/*); [t] \"\\u00e9quations\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-equations-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-equations\",\"MultiLineLabel_Equation\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"\\u00c9quation-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-equations\",\"self::multiline\"],'Rule{lines-steps-summary{MultiLineLabel_Step{[p] (pause:short); [t] count(children/*); [t] \" \\u00e9tapes\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-steps-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-steps\",\"MultiLineLabel_Step\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\" \\u00c9tape-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-steps\",\"self::multiline\"],'Rule{lines-rows-summary{MultiLineLabel_Row{[p] (pause:short); [t] count(children/*); [t] \"colonnes\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-rows-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-rows\",\"MultiLineLabel_Row\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"rang\\u00e9e-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-rows\",\"self::multiline\"],'Rule{lines-constraints-summary{MultiLineLabel_Constraint{[p] (pause:short); [t] count(children/*); [t] \"contraintes\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-constraints-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-constraints\",\"MultiLineLabel_Constraint\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Contrainte-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-constraints\",\"self::multiline\"],'Rule{lines-none{MultiLineLabel_None{[p] (pause:short); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long){self::table{contains(@grammar, \"layoutSummary\")'.split(\"{\"),[\"Aliases\",\"lines-none\",\"self::multiline\",'contains(@grammar, \"layoutSummary\")'],[\"Aliases\",\"lines-none\",\"self::cases\",'contains(@grammar, \"layoutSummary\")'],[\"Rule\",\"bigop\",\"default\",'[t] \"le\"; [n] children/*[1]; [t] \"de\"; [n] children/*[2]; [p] (pause:short)',\n\"self::bigop\"],[\"Rule\",\"limboth\",\"default\",'[n] children/*[1]; [t] \"de\"; [n] children/*[2];[t] \"\\u00e0\"; [n] children/*[3];',\"self::limboth\"],[\"Rule\",\"limlower\",\"default\",'[n] children/*[1]; [t] \"sur\"; [n] children/*[2]; [p] (pause:short)',\"self::limlower\"],[\"Rule\",\"limupper\",\"default\",'[n] children/*[1]; [t] \"sous\"; [n] children/*[2]; [p] (pause:short)',\"self::limupper\"],[\"Rule\",\"integral\",\"default\",'[t] \"le\"; [n] children/*[1]; [t] \"de\"; [n] children/*[2]; [p] (pause:short)',\"self::integral\"],[\"Rule\",\n\"overscript\",\"default\",'[n] children/*[1]; [t] \"sous\"; [n] children/*[2]; [p] (pause:short)',\"self::overscore\"],'Rule,overscript,default,[n] children/*[1]; [n] children/*[2];,self::overscore,children/*[2][@role=\"overaccent\"]'.split(\",\"),'Rule,overscript-limits,default,[n] children/*[1]; [t] \"\\u00e0\"; [n] children/*[2],self::overscore,children/*[2][@role!=\"overaccent\"],name(children/*[1])=\"underscore\",children/*[1]/children/*[2][@role!=\"underaccent\"]'.split(\",\"),[\"Rule\",\"underscript\",\"default\",'[n] children/*[1]; [t] \"sur\"; [n] children/*[2]; [p] (pause:short)',\n\"self::underscore\"],'Rule,underscript-limits,default,[n] children/*[1]; [t] \"de\"; [n] children/*[2],self::underscore,@role=\"underover\",children/*[2][@role!=\"underaccent\"]'.split(\",\"),[\"Rule\",\"number\",\"default\",\"[n] text()\",\"self::number\"],'Rule,mixed-number,default,[n] children/*[1]; [t] \"et\"; [n] children/*[2]; ,self::number,@role=\"mixed\"'.split(\",\"),'Rule{number-with-chars{default{[t] \"nombre\"; [m] CQFspaceoutNumber (grammar:protected){self::number{@role=\"othernumber\"{\"\" != translate(text(), \"0123456789.,\", \"\"){not(contains(@grammar, \"protected\"))'.split(\"{\"),\n'Rule,decimal-period,default,[t] \"la d\\u00e9cimale\"; [n] children/*[1] (grammar:spaceout); [t] \"virgule suivi par les chiffres r\\u00e9p\\u00e9t\\u00e9s\";  [n] children/*[3]/children/*[1] (grammar:spaceout),self::punctuated,@role=\"sequence\",count(./content/*)=1,./content/*[1][@role=\"fullstop\"],name(children/*[1])=\"number\",children/*[1][@role=\"integer\"],name(children/*[3])=\"overscore\",children/*[3][@role=\"integer\"],children/*[3]/children/*[2][@role=\"overaccent\"],children/*[3]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),\n'Rule,decimal-period,default,[t] \"la d\\u00e9cimale\"; [n] children/*[1] (grammar:spaceout); [t] \"suivi par les chiffres r\\u00e9p\\u00e9t\\u00e9s\";  [n] children/*[2]/children/*[1] (grammar:spaceout);,self::infixop,@role=\"implicit\",count(./children/*)=2,name(children/*[1])=\"number\",children/*[1][@role=\"float\"],name(children/*[2])=\"overscore\",children/*[2][@role=\"integer\"],children/*[2]/children/*[2][@role=\"overaccent\"],children/*[2]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),\n'Rule,decimal-period-singular,default,[t] \"la d\\u00e9cimale\"; [n] children/*[1] (grammar:spaceout); [t] \"virgule suivi par le chiffre r\\u00e9p\\u00e9t\\u00e9\";  [n] children/*[3]/children/*[1] (grammar:spaceout),self::punctuated,@role=\"sequence\",count(./content/*)=1,./content/*[1][@role=\"fullstop\"],name(children/*[1])=\"number\",children/*[1][@role=\"integer\"],name(children/*[3])=\"overscore\",children/*[3][@role=\"integer\"],children/*[3]/children/*[2][@role=\"overaccent\"],children/*[3]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"],string-length(./children/*[3]/children/*[1]/text())=1'.split(\",\"),\n'Rule,decimal-period-singular,default,[t] \"la d\\u00e9cimale\"; [n] children/*[1] (grammar:spaceout); [t] \"suivi par le chiffre r\\u00e9p\\u00e9t\\u00e9\";  [n] children/*[2]/children/*[1] (grammar:spaceout);,self::infixop,@role=\"implicit\",count(./children/*)=2,name(children/*[1])=\"number\",children/*[1][@role=\"float\"],name(children/*[2])=\"overscore\",children/*[2][@role=\"integer\"],children/*[2]/children/*[2][@role=\"overaccent\"],children/*[2]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"],string-length(./children/*[2]/children/*[1]/text())=1'.split(\",\"),\n'Rule;number-with-spaces;default;[m] CQFspaceoutNumber (grammar:!spaceout:number);self::number;contains(@grammar, \"spaceout\")'.split(\";\"),'Rule;decimal-point;default;[t] \"point\";self::punctuation;@role=\"fullstop\";contains(@grammar,\"number\")'.split(\";\"),'Rule,line-segment,default,[t] \"le segment\"; [n] children/*[1]/children/*[1]; [n] children/*[1]/children/*[2]; [p] (pause:short),self::overscore,@role=\"implicit\",children/*[2][@role=\"overaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"],name(children/*[1])=\"infixop\",count(./children/*[1]/children/*)=2'.split(\",\"),\n'Rule,conjugate,Bar_Conjugate,[t] \"le complexe conjugu\\u00e9 de\"; [n] children/*[1],self::overscore,children/*[2][@role=\"overaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),'Rule;defined-by;default;[t] \"est d\\u00e9fini par\" (pause:short);self::overscore;@role=\"equality\";@embellished=\"relation\";name(children/*[2])=\"text\";children/*[2][text()]=\"def\"'.split(\";\"),'Rule,adorned-sign,default,[t] \"signe\"; [n] children/*[1] ; [t] \"avec\"; [n] children/*[2]; [t] \"dessus\",self::overscore,@embellished,name(children/*[1])=\"operator\" or name(children/*[1])=\"relation\"'.split(\",\"),\n'Rule;factorial;default;[t] \"factorielle\";self::punctuation;text()=\"!\";name(preceding-sibling::*[1])!=\"text\"'.split(\";\"),[\"Rule\",\"tensor-base\",\"default\",\"[n] children/*[2]; [n] children/*[3]; [n] children/*[1]; [n] children/*[4]; [n] children/*[5]\",\"self::tensor\"],'Rule{left-super{default{[t] \"exposant gauche\"; [n] text(){self::*[@role=\"leftsuper\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{left-super{default{[t] \"exposant gauche\"; [m] children/*{self::punctuated{@role=\"leftsuper\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),\n'Rule{left-sub{default{[t] \"indice gauche\"; [n] text(){self::*[@role=\"leftsub\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{left-sub{default{[t] \"indice gauche\"; [m] children/*{self::punctuated{@role=\"leftsub\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{right-super{default{[t] \"exposant droite\"; [n] text(){self::*[@role=\"rightsuper\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{right-super{default{[t] \"exposant droite\"; [m] children/*{self::punctuated{@role=\"rightsuper\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),\n'Rule{right-sub{default{[t] \"indice droite\"; [n] text(){self::*[@role=\"rightsub\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{right-sub{default{[t] \"indice droite\"; [m] children/*{self::punctuated{@role=\"rightsub\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule;empty-index;default;[p] (pause:medium);self::empty;@role=\"rightsub\" or @role=\"rightsuper\" or @role=\"leftsub\" or @role=\"leftsuper\"'.split(\";\"),'Rule,combinatorics,default,[n] children/*[2] (grammar:combinatorics); [n] children/*[1]; [n] children/*[4] (grammar:combinatorics),self::tensor,name(children/*[3])=\"empty\",name(children/*[5])=\"empty\",children/*[1][text()=\"P\" or text()=\"C\"]'.split(\",\"),\n'Rule,choose,CombinationPermutation_ChoosePermute,[t] \"combinaison de\"; [n] children/*[3] (grammar:combinatorics); [t] \"parmi\"; [n] children/*[4] (grammar:combinatorics),self::tensor,name(children/*[3])=\"empty\",name(children/*[5])=\"empty\",children/*[1][text()=\"C\"]'.split(\",\"),'Rule,permute,CombinationPermutation_ChoosePermute,[t] \"permutation de\"; [n] children/*[2] (grammar:combinatorics); [t] \"parmi\"; [n] children/*[4] (grammar:combinatorics),self::tensor,name(children/*[3])=\"empty\",name(children/*[5])=\"empty\",children/*[1][text()=\"P\"]'.split(\",\")]};\nsre.Grammar.getInstance().setPreprocessor(\"numbers2alpha\",sre.ClearspeakUtil.numbersToAlpha);sre.ClearspeakGerman={locale:\"de\",domain:\"clearspeak\",functions:[[\"CTXF\",\"CTXFpauseSeparator\",sre.StoreUtil.pauseSeparator],[\"CTXF\",\"CTXFnodeCounter\",sre.ClearspeakUtil.nodeCounter],[\"CTXF\",\"CTXFcontentIterator\",sre.StoreUtil.contentIterator],[\"CSF\",\"CSFvulgarFraction\",sre.NumbersUtil.vulgarFraction],[\"CQF\",\"CQFvulgarFractionSmall\",sre.ClearspeakUtil.isSmallVulgarFraction],[\"CQF\",\"CQFcellsSimple\",sre.ClearspeakUtil.allCellsSimple],[\"CSF\",\"CSFwordOrdinal\",sre.ClearspeakUtil.wordOrdinal],[\"CQF\",\"CQFisCapital\",\nsre.ClearspeakUtil.isCapitalLetter],[\"CQF\",\"CQFmatchingFences\",sre.ClearspeakUtil.matchingFences],[\"CSF\",\"CSFnestingDepth\",sre.ClearspeakUtil.nestingDepth],[\"CQF\",\"CQFfencedArguments\",sre.ClearspeakUtil.fencedArguments],[\"CQF\",\"CQFsimpleArguments\",sre.ClearspeakUtil.simpleArguments],[\"CQF\",\"CQFisHyperbolic\",sre.ClearspeakUtil.isHyperbolic],[\"CQF\",\"CQFisLogarithm\",sre.ClearspeakUtil.isLogarithmWithBase],[\"CQF\",\"CQFspaceoutNumber\",sre.MathspeakUtil.spaceoutNumber]],rules:['Rule{collapsed{default{[t] \"kollapiert\"; [n] . (engine:modality=summary,grammar:collapsed){self::*{@alternative{not(contains(@grammar, \"collapsed\")){self::*{self::*{self::*{self::*{self::*'.split(\"{\"),\n[\"Rule\",\"stree\",\"default\",\"[n] ./*[1]\",\"self::stree\"],[\"Rule\",\"unknown\",\"default\",\"[n] text()\",\"self::unknown\"],'Rule;protected;default;[t] text();self::number;contains(@grammar, \"protected\")'.split(\";\"),[\"Rule\",\"omit-empty\",\"default\",'[p] (pause:\"short\")',\"self::empty\"],'Rule{font{default{[t] @font (grammar:localFont); [n] self::* (grammar:ignoreFont=@font,pause:\"short\"){self::*{name(self::*)!=\"number\"{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),[\"SpecializedRule\",\"font\",\n\"default\",\"Caps_SayCaps\"],'Rule{font-number{default{[t] @font (grammar:localFontNumber); [n] . (grammar:ignoreFont=@font){self::number{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),'Rule{font-identifier{default{[t] @font (grammar:localFont); [n] self::* (grammar:ignoreFont=@font,pause:\"short\"){self::identifier{string-length(text())=1 or string-length(text())=2{@font{@font=\"normal\"{not(contains(@grammar, \"ignoreFont\")){@role!=\"unit\"'.split(\"{\"),[\"SpecializedRule\",\"font-identifier\",\n\"default\",\"Caps_SayCaps\"],'Rule;omit-font;default;[n] self::* (grammar:ignoreFont=@font);self::identifier;string-length(text())=1 or string-length(text())=2;@font;not(contains(@grammar, \"ignoreFont\"));@font=\"italic\";self::*'.split(\";\"),[\"SpecializedRule\",\"omit-font\",\"default\",\"Caps_SayCaps\"],'Rule{font-double-struck{default{[n] . (grammar:ignoreFont=@font); [t] @font (grammar:localFont){self::*{name(self::*)!=\"number\"{string-length(text())=1 or string-length(text())=2{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"double-struck\"'.split(\"{\"),\n[\"SpecializedRule\",\"font-double-struck\",\"default\",\"Caps_SayCaps\"],'Rule{font-number-double-struck{default{[n] . (grammar:ignoreFont=@font); [t] @font (grammar:localFontNumber){self::number{string-length(text())=1 or string-length(text())=2{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"double-struck\"'.split(\"{\"),[\"Rule\",\"text\",\"default\",\"[n] text()\",\"self::text\"],'Rule;capital;default;[n] text() (pitch:0.6,grammar:ignoreCaps=\"gro\\u00dfes\");self::identifier;@role=\"latinletter\" or @role=\"greekletter\" or @role=\"simple function\";CQFisCapital'.split(\";\"),\n'Rule;capital;Caps_SayCaps;[n] text();self::identifier;@role=\"latinletter\" or @role=\"greekletter\";CQFisCapital'.split(\";\"),'Rule{capital{Caps_SayCaps{[p] (pause:\"short\"); [n] text(){self::identifier{@role=\"latinletter\" or @role=\"greekletter\"{CQFisCapital{preceding-sibling::*[1]{not(name(preceding-sibling::*[1])=\"function\"){not(contains(@grammar, \"angle\"))'.split(\"{\"),'Rule;capital;Caps_SayCaps;[n] text() (pause:\"short\");self::identifier;@role=\"latinletter\" or @role=\"greekletter\";CQFisCapital;following-sibling::*[1]'.split(\";\"),\n'Rule{capital{Caps_SayCaps{[p] (pause:\"short\"); [n] text() (pause:\"short\"){self::identifier{@role=\"latinletter\" or @role=\"greekletter\"{CQFisCapital{preceding-sibling::*[1]{following-sibling::*[1]{not(name(preceding-sibling::*[1])=\"function\"){not(contains(@grammar, \"angle\"))'.split(\"{\"),'Rule,punctuation-lr,default,[p] (pause:\"short\"); [n] text() (pause:\"short\"),self::punctuation,@role=\"comma\"'.split(\",\"),'Rule;punctuation;default;[n] text();self::punctuation;@role=\"comma\";not(preceding-sibling::*[1]/children);not(following-sibling::*[1]/children)'.split(\";\"),\n'Rule,punctuation-l,default,[p] (pause:\"short\"); [n] text(),self::punctuation,@role=\"comma\",not(following-sibling::*[1]/children)'.split(\",\"),'Rule;punctuation-r;default;[n] text() (pause:\"short\");self::punctuation;@role=\"comma\";not(preceding-sibling::*[1]/children)'.split(\";\"),'Rule;ellipsis;Ellipses_AndSoOn;[t] \"und so weiter\";self::punctuation;@role=\"ellipsis\";not(following-sibling::*[1]);not(preceding-sibling::*[last()][@role=\"ellipsis\"])'.split(\";\"),'Rule;ellipsis;Ellipses_AndSoOn;[t] \"und so weiter bis\";self::punctuation;@role=\"ellipsis\";preceding-sibling::*[1];following-sibling::*[1]'.split(\";\"),\n'Rule,vbar-evaluated,default,[n] children/*[1]; [p] (pause:\"short\"); [t] \"ausgewertet f\\u00fcr\"; [n] content/*[1]/children/*[2]; [p] (pause:\"short\"),self::punctuated,@role=\"endpunct\",content/*[1][@role=\"vbar\"],content/*[1][@embellished],name(content/*[1])=\"subscript\"'.split(\",\"),'Rule,vbar-evaluated,default,[n] children/*[1]; [p] (pause:\"short\"); [t] \"ausgewertet f\\u00fcr\"; [n] content/*[1]/children/*[2]; [p] (pause:\"short\"); [t] \"minus des gleichen Ausdrucks ausgewertet f\\u00fcr\"; [n] content/*[1]/children/*[1]/children/*[2]; [p] (pause:\"short\"),self::punctuated,@role=\"endpunct\",content/*[1][@role=\"vbar\"],content/*[1][@embellished],name(content/*[1])=\"superscript\",name(content/*[1]/children/*[1])=\"subscript\"'.split(\",\"),\n'Rule;vbar-such-that;VerticalLine_SuchThat;[t] \"so dass\";self::punctuation;@role=\"vbar\";not(parent::*/parent::*[@embellished=\"punctuation\"])'.split(\";\"),'Rule;vbar-such-that;VerticalLine_Divides;[t] \"teilt\";self::punctuation;@role=\"vbar\";not(parent::*/parent::*[@embellished=\"punctuation\"])'.split(\";\"),'Rule;vbar-such-that;VerticalLine_Given;[t] \"f\\u00fcr die gilt\";self::punctuation;@role=\"vbar\";not(parent::*/parent::*[@embellished=\"punctuation\"])'.split(\";\"),'Rule;set-member;default;[t] \"in\";self::operator;@role=\"set extended\";text()=\"\\u2208\" or text()=\"\\u220a\"'.split(\";\"),\n[\"SpecializedRule\",\"set-member\",\"default\",\"SetMemberSymbol_Element\",'[t] \"Element von\"'],[\"SpecializedRule\",\"set-member\",\"default\",\"SetMemberSymbol_Belongs\",'[t] \"geh\\u00f6rt zu\"'],'Rule;set-not-member;default;[t] \"nicht in\";self::operator;@role=\"set extended\";text()=\"\\u2209\"'.split(\";\"),[\"SpecializedRule\",\"set-not-member\",\"default\",\"SetMemberSymbol_Element\",'[t] \"kein Element von\"'],[\"SpecializedRule\",\"set-not-member\",\"default\",\"SetMemberSymbol_Belongs\",'[t] \"geh\\u00f6rt nicht zu\"'],'Rule,prime,default,[n] children/*[1]; [n] children/*[2],self::superscript,children/*[2],children/*[2][@role=\"prime\"],self::*'.split(\",\"),\n'Rule,feet,default,[n] children/*[1]; [t] \"Fu\\u00df\",self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"number\",children/*[2][text()=\"\\u2032\"],not(preceding-sibling::*[@role=\"degree\"])'.split(\",\"),'Rule,inches,default,[n] children/*[1]; [t] \"Zoll\",self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"number\",children/*[2][text()=\"\\u2033\"],not(preceding-sibling::*[@role=\"degree\"])'.split(\",\"),'Rule,minutes,default,[p] (pause:short); [n] children/*[1]; [t] \"Minuten\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2032\"]'.split(\",\"),\n'Rule,minute,default,[p] (pause:short); [n] children/*[1]; [t] \"Minute\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2032\"],children/*[1][text()=\"1\"]'.split(\",\"),'Rule,seconds,default,[p] (pause:short); [n] children/*[1]; [t] \"Sekunden\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2033\"]'.split(\",\"),'Rule,second,default,[p] (pause:short); [n] children/*[1]; [t] \"Sekunde\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2033\"],children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule,degrees-angle,Prime_Angle,[n] children/*[1]; [t] \"Grad\"; [p] (pause:short),self::punctuation,@role=\"degree\"'.split(\",\"),'Rule{minutes-angle{Prime_Angle{[n] children/*[1]; [t] \"Minuten\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2032\"]'.split(\"{\"),'Rule,minute-angle,Prime_Angle,[n] children/*[1]; [t] \"Minute\"; [p] (pause:short),self::superscript,children/*[2][@role=\"prime\"],children/*[2][text()=\"\\u2032\"],children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{seconds-angle{Prime_Angle{[n] children/*[1]; [t] \"Sekunden\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2033\"]'.split(\"{\"),'Rule,second-angle,Prime_Angle,[n] children/*[1]; [t] \"Sekunde\"; [p] (pause:short),self::superscript,children/*[2][@role=\"prime\"],children/*[2][text()=\"\\u2033\"],children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{feet-length{Prime_Length{[n] children/*[1]; [t] \"Fu\\u00df\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2032\"]'.split(\"{\"),'Rule{inches-length{Prime_Length{[n] children/*[1]; [t] \"Zoll\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2033\"]'.split(\"{\"),\n[\"Rule\",\"punctuated\",\"default\",\"[m] children/*\",\"self::punctuated\"],[\"Rule\",\"function\",\"default\",\"[n] text()\",\"self::function\"],'Rule{function-article{default{[t] \"der\" (grammar:article); [n] text(){self::function{@role=\"prefix function\"{contains(@grammar, \"addArticle\")'.split(\"{\"),'Rule{function-article-fem{default{[t] \"die\" (grammar:article); [n] text(){self::function{@role=\"prefix function\"{contains(@grammar, \"addArticle\"){text()=\"det\" or text()=\"dim\" or text()=\"tr\"'.split(\"{\"),[\"Rule\",\"appl\",\n\"default\",'[n] children/*[1]; [t] \"von\"; [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\")',\"self::appl\"],'Rule,appl-simple,default,[n] children/*[1]; [t] \"von\"; [p] (pause:\"short\"); [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"),self::appl,@role=\"simple function\",name(children/*[2])=\"appl\"'.split(\",\"),'Rule,appl-simple,default,[n] children/*[1]; [t] \"von\"; [p] (pause:\"short\"); [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"),self::appl,@role=\"simple function\",name(children/*[2])=\"fenced\",name(children/*[2]/children/*[1])=\"appl\"'.split(\",\"),\n[\"Rule\",\"appl\",\"Functions_None\",'[p] (pause:\"short\"); [n] children/*[1]; [t] \"mal\"; [n] children/*[2]; [p] (pause:\"short\")',\"self::appl\"],'Rule,function-prefix,default,[n] children/*[1]; [n] children/*[2],self::appl,@role=\"prefix function\"'.split(\",\"),'Rule{binary-operation{ImpliedTimes_MoreImpliedTimes{[n] . (grammar:impliedTimes); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{parent::*/parent::infixop[@role=\"implicit\"]{following-sibling::*{not(contains(@grammar, \"impliedTimes\"))'.split(\"{\"),\n'Rule{function-prefix-simple-arg{default{[n] children/*[1]; [n] children/*[2]{self::appl{@role=\"prefix function\"{name(children/*[2])=\"fenced\"{contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"){name(children/*[2]/children/*[1])!=\"number\"{name(children/*[2]/children/*[1])!=\"identifier\"{name(children/*[2]/children/*[1])!=\"appl\"'.split(\"{\"),'Rule,function-prefix-embell,default,[p] (pause:\"short\"); [n] children/*[1]; [n] children/*[2]; [p] (pause:\"short\"); ,self::appl,@role=\"prefix function\",name(children/*[1])!=\"function\"'.split(\",\"),\n'Rule{function-prefix-fenced-or-frac-arg{default{[p] (pause:\"short\"); [n] children/*[1] (grammar:addArticle); [t] \"von\"; [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{(name(children/*[2])=\"fenced\" and not(contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"))) or name(children/*[2])=\"fraction\" or (name(children/*[2])!=\"fenced\" and not(contains(children/*[2]/@annotation, \"clearspeak:simple\"))){self::*'.split(\"{\"),'Rule,function-prefix-subscript,default,[p] (pause:\"short\"); [n] children/*[1] (grammar:addArticle); [t] \"von\"; [p] (pause:\"short\"); [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"),self::appl,@role=\"prefix function\",name(children/*[1])=\"subscript\",self::*'.split(\",\"),\n'Rule{function-ln{default{[n] children/*[1]; [n] children/*[2]{self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{not(following-sibling::*){not(contains(@grammar, \"NatLog\"))'.split(\"{\"),'Rule{function-ln{default{[n] children/*[1]; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{not(contains(@grammar, \"NatLog\"))'.split(\"{\"),'Rule{function-ln{default{[n] children/*[1]; [t] \"von\"; [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{name(children/*[2])=\"fenced\"{not(contains(@grammar, \"NatLog\"))'.split(\"{\"),\n'Rule;function-ln;Log_LnAsNaturalLog;[n] . (grammar:NatLog);self::appl;@role=\"prefix function\";content/*[2][text()=\"ln\"];not(following-sibling::*);not(contains(@grammar, \"NatLog\"))'.split(\";\"),'Rule{function-ln{Log_LnAsNaturalLog{[n] . (grammar:NatLog); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{not(contains(@grammar, \"NatLog\"))'.split(\"{\"),'Rule{function-prefix-as-exp{default{[n] children/*[1]; [t] \"von\"; [p] (pause:\"short\"); [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(parent::*/parent::*)=\"superscript\"{not(following-sibling::*){(name(children/*[2])=\"fenced\" and not(contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"))) or name(children/*[2])=\"fraction\" or (name(children/*[2])!=\"fenced\" and not(contains(children/*[2]/@annotation, \"clearspeak:simple\")))'.split(\"{\"),\n'Rule,function-prefix-subscript-as-exp,default,[n] children/*[1]; [t] \"von\"; [p] (pause:\"short\"); [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"),self::appl,@role=\"prefix function\",name(parent::*/parent::*)=\"superscript\",not(following-sibling::*),name(children/*[1])=\"subscript\"'.split(\",\"),'Rule,function-prefix-hyper,default,[p] (pause:\"short\"); [n] children/*[1]; [t] \"von\"; [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"),self::appl,@role=\"prefix function\",CQFisHyperbolic'.split(\",\"),\n'Rule{function-prefix-inverse{default{[p] (pause:\"short\"); [t] \"der\" (grammar:article); [t] \"inverse\" (grammar:masculine); [n] children/*[1]/children/*[1]; [t] \"von\"; [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),'Rule,appl-triginverse,Trig_TrigInverse,[p] (pause:\"short\"); [n] children/*[1]; [t] \"von\"; [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"),self::appl,@role=\"prefix function\",name(children/*[1])=\"superscript\",name(children/*[1]/children/*[2])=\"prefixop\",children/*[1]/children/*[2][@role=\"negative\"],children/*[1]/children/*[2]/children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{function-prefix-arc-simple{Trig_ArcTrig{[p] (pause:\"short\"); [t] \"Arkus\" (join:\"\"); [n] children/*[1]/children/*[1] (grammar:lowercase); [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),'Rule{function-prefix-arc-simple{Trig_ArcTrig{[p] (pause:\"short\"); [t] \"Arkus\" (join:\"\"); [n] children/*[1]/children/*[1] (grammar:lowercase); [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{name(children/*[2])=\"fenced\"{children/*[2]/children/*[1][@role=\"prefix function\"]{contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"){not(contains(@grammar, \"functions_none\"))'.split(\"{\"),\n'Rule{function-prefix-arc{Trig_ArcTrig{[p] (pause:\"short\"); [t] \"Arkus\" (join:\"\"); [n] children/*[1]/children/*[1] (grammar:lowercase); [t] \"von\"; [n] children/*[2] (grammar:case=\"dative\"); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\")){(name(children/*[2])=\"fenced\" and not(contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"))) or (name(children/*[2])=\"fraction\" and children/*[2][@role!=\"vulgar\"])'.split(\"{\"),\n'Rule{function-inverse{default{[n] children/*[1]; [t] \"invers\"{self::superscript{@role=\"prefix function\" or @role=\"simple function\"{name(children/*[2])=\"prefixop\"{children/*[2][@role=\"negative\"]{children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),'Rule,superscript-prefix-function,default,[t] \"die\" (grammar:article); [n] children/*[2] (grammar:ordinal); [t] \"Potenz von\"; [n] children/*[1],self::superscript,@role=\"prefix function\",name(children/*[2])=\"number\",children/*[2][@role=\"integer\"]'.split(\",\"),\n'Rule,superscript-prefix-function,default,[t] \"die\" (grammar:article); [n] children/*[2] (grammar:ordinal); [t] \"Potenz von\"; [n] children/*[1],self::superscript,@role=\"prefix function\",name(children/*[2])=\"identifier\"'.split(\",\"),'Rule;function-inverse;Functions_None;[n] . (grammar:functions_none);self::superscript;@role=\"prefix function\" or @role=\"simple function\";name(children/*[2])=\"prefixop\";children/*[2][@role=\"negative\"];children/*[2]/children/*[1][text()=\"1\"];not(contains(@grammar, \"functions_none\"))'.split(\";\"),\n[\"Rule\",\"superscript\",\"default\",'[n] children/*[1]; [t] \"mit Exponent\" (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"); [t] \"Ende Exponent\" (pause:\"short\")',\"self::superscript\"],'Rule,superscript-ordinal,default,[n] children/*[1]; [t] \"hoch\"; [n] children/*[2]; [p] (pause:\"short\"),self::superscript,name(children/*[2])=\"number\",children/*[2][@role=\"integer\"]'.split(\",\"),'Rule,superscript-ordinal,default,[n] children/*[1]; [t] \"hoch\"; [n] children/*[2]; [p] (pause:\"short\"),self::superscript,name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],name(children/*[2]/children/*[1])=\"number\",children/*[2]/children/*[1][@role=\"integer\"]'.split(\",\"),\n'Rule,superscript-ordinal,default,[n] children/*[1]; [t] \"hoch\"; [n] children/*[2]; [p] (pause:\"short\"),self::superscript,name(children/*[2])=\"identifier\",children/*[2][@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]'.split(\",\"),'Rule,superscript-ordinal-default,default,[n] children/*[1]; [t] \"mit Exponent\" (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"); [t] \"Ende Exponent\" (pause:\"short\"),self::superscript,children//superscript'.split(\",\"),'Rule,superscript-simple-exponent,default,[n] children/*[1]; [t] \"hoch\"; [n] children/*[2]; [p] (pause:\"short\"),self::superscript,not(descendant::superscript)'.split(\",\"),\n'Rule,superscript-simple-exponent-end,default,[n] children/*[1]; [t] \"hoch\"; [n] children/*[2]; ,self::superscript,not(descendant::superscript),not(following-sibling::*)'.split(\",\"),'Aliases;superscript-simple-exponent;self::superscript;children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"];name(children/superscript/children/*[1])=\"number\";contains(children/superscript/children/*[1]/@annotation, \"clearspeak:simple\")'.split(\";\"),'Aliases;superscript-simple-exponent;self::superscript;children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"];name(children/superscript/children/*[1])=\"fraction\";contains(children/superscript/children/*[1]/@annotation, \"clearspeak:simple\")'.split(\";\"),\n[\"Aliases\",\"superscript-simple-exponent\",\"self::superscript\",'children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"]','name(children/superscript/children/*[1])=\"identifier\"'],'Aliases;superscript-simple-exponent;self::superscript;children/*[2][@role=\"implicit\"];count(children/*[2]/children/*)=2;contains(children/*[2]/children/*[1]/@annotation, \"simple\");name(children/*[2]/children/*[2])=\"superscript\";(name(children/*[2]/children/*[2]/children/*[1])=\"number\" and contains(children/*[2]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\")) or name(children/*[2]/children/*[2]/children/*[1])=\"identifier\";children/*[2]/children/*[2]/children/*[2][text()=\"2\"] or children/*[2]/children/*[2]/children/*[2][text()=\"3\"]'.split(\";\"),\n'Rule,superscript-simple-power,Exponent_OrdinalPower,[n] children/*[1]; [t] \"potenziert mit\"; [n] children/*[2]; [p] (pause:\"short\"),self::superscript,not(descendant::superscript)'.split(\",\"),'Rule,superscript-simple-power-end,Exponent_OrdinalPower,[n] children/*[1]; [t] \"potenziert mit\"; [n] children/*[2]; ,self::superscript,not(descendant::superscript),not(following-sibling::*)'.split(\",\"),'Aliases;superscript-simple-power;self::superscript;children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"];name(children/superscript/children/*[1])=\"number\";contains(children/superscript/children/*[1]/@annotation, \"clearspeak:simple\")'.split(\";\"),\n'Aliases;superscript-simple-power;self::superscript;children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"];name(children/superscript/children/*[1])=\"fraction\";contains(children/superscript/children/*[1]/@annotation, \"clearspeak:simple\")'.split(\";\"),[\"Aliases\",\"superscript-simple-power\",\"self::superscript\",'children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"]','name(children/superscript/children/*[1])=\"identifier\"'],\n'Aliases;superscript-simple-power;self::superscript;children/*[2][@role=\"implicit\"];count(children/*[2]/children/*)=2;contains(children/*[2]/children/*[1]/@annotation, \"simple\");name(children/*[2]/children/*[2])=\"superscript\";(name(children/*[2]/children/*[2]/children/*[1])=\"number\" and contains(children/*[2]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\")) or name(children/*[2]/children/*[2]/children/*[1])=\"identifier\";children/*[2]/children/*[2]/children/*[2][text()=\"2\"] or children/*[2]/children/*[2]/children/*[2][text()=\"3\"]'.split(\";\"),\n'Rule{superscript-ordinal-power{Exponent_OrdinalPower{[n] children/*[1]; [t] \"zur\"; [n] children/*[2] (grammar:ordinal,join:\"\"); [t] \"n Potenz\" (pause:\"short\"){self::superscript{name(children/*[2])=\"number\"{children/*[2][@role=\"integer\"]'.split(\"{\"),[\"Aliases\",\"superscript-ordinal-power\",\"self::superscript\",'name(children/*[2])=\"identifier\"','children/*[2][@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]'],'Rule{superscript-non-ordinal{Exponent_OrdinalPower{[n] children/*[1]; [t] \"zur negativ\"; [n] children/*[2]/children/*[1] (grammar:ordinal, join:\"\"); [t] \"n Potenz\" (pause:\"short\"){self::superscript{children/*[2][@role=\"negative\"]{name(children/*[2]/children/*[1])=\"number\"{children/*[2]/children/*[1][@role=\"integer\"]'.split(\"{\"),\n'Rule{superscript-simple-function{Exponent_OrdinalPower{[t] \"die\" (grammar:article); [n] children/*[2] (grammar:ordinal); [t] \"Potenz von\" (pause:\"short\"); [n] children/*[1]{self::superscript{name(children/*[1])=\"identifier\"{children/*[1][@role=\"simple function\"]{children/*[2][@role!=\"prime\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),'Rule{exponent{default{[n] text() (join:\"\"); [t] \"te\"{self::identifier{contains(@grammar, \"ordinal\")'.split(\"{\"),'Rule;exponent;default;[t] CSFwordOrdinal;self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()!=\"0\"'.split(\";\"),\n'Rule;exponent;default;[t] \"nullte\";self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()=\"0\"'.split(\";\"),'Rule,superscript-simple-exp,Exponent_Exponent,[n] children/*[1]; [t] \"mit Exponent\"; [n] children/*[2]; [p] (pause:\"short\"),self::superscript,not(descendant::superscript)'.split(\",\"),'Rule,superscript-simple-exp-end,Exponent_Exponent,[n] children/*[1]; [t] \"mit Exponent\"; [n] children/*[2]; ,self::superscript,not(descendant::superscript),not(following-sibling::*)'.split(\",\"),'Aliases;superscript-simple-exp;self::superscript;children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"];name(children/superscript/children/*[1])=\"number\";contains(children/superscript/children/*[1]/@annotation, \"clearspeak:simple\")'.split(\";\"),\n'Aliases;superscript-simple-exp;self::superscript;children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"];name(children/superscript/children/*[1])=\"fraction\";contains(children/superscript/children/*[1]/@annotation, \"clearspeak:simple\")'.split(\";\"),[\"Aliases\",\"superscript-simple-exp\",\"self::superscript\",'children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"]','name(children/superscript/children/*[1])=\"identifier\"'],\n'Aliases;superscript-simple-exp;self::superscript;children/*[2][@role=\"implicit\"];count(children/*[2]/children/*)=2;contains(children/*[2]/children/*[1]/@annotation, \"simple\");name(children/*[2]/children/*[2])=\"superscript\";(name(children/*[2]/children/*[2]/children/*[1])=\"number\" and contains(children/*[2]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\")) or name(children/*[2]/children/*[2]/children/*[1])=\"identifier\";children/*[2]/children/*[2]/children/*[2][text()=\"2\"] or children/*[2]/children/*[2]/children/*[2][text()=\"3\"]'.split(\";\"),\n'Rule;superscript-simple-function;Functions_None;[n] . (grammar:functions_none);self::superscript;name(children/*[1])=\"identifier\";children/*[1][@role=\"simple function\"];not(contains(@grammar, \"functions_none\"))'.split(\";\"),'Rule,square,default,[n] children/*[1]; [t] \"Quadrat\",self::superscript,children/*[2][text()=\"2\"],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),self::*,self::*'.split(\",\"),'Rule,cube,default,[n] children/*[1]; [t] \"Kubik\",self::superscript,children/*[2][text()=\"3\"],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),self::*,self::*'.split(\",\"),\n'Rule;paren-simple;default;[n] children/*[1];self::fenced;@role=\"leftright\";contains(children/*[1]/@annotation, \"clearspeak:simple\");name(../..)!=\"superscript\" and name(../..)!=\"subscript\"'.split(\";\"),'Rule;paren-simple-exp;default;[n] children/*[1];self::fenced;@role=\"leftright\";name(../..)=\"superscript\";children/*[1][@role=\"integer\"] or children/*[1][@role=\"float\"] or (children/*[1][@role=\"vulgar\"] and contains(children/*[1]/@annotation, \"clearspeak:simple\")) or children/*[1][@role=\"latinletter\"] or children/*[1][@role=\"greekletter\"] or children/*[1][@role=\"otherletter\"]'.split(\";\"),\n'Rule;paren-simple-nested-func;default;[n] children/*[1];self::fenced;@role=\"leftright\";name(../*[1])=\"identifier\" or name(../*[1])=\"function\";parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"];children/*[1][@role=\"simple function\" or @role=\"prefix function\"];contains(children/*[1]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\") or name(children/*[1]/children/*[2]/children/*[1])=\"subscript\" or name(children/*[1]/children/*[2]/children/*[1])=\"superscript\" or children/*[1]/children/*[2]/children/*[1][@role=\"vulgar\"] '.split(\";\"),\n'Rule{paren-simple-nested-func-no-bracket{Functions_None{[n] children/*[1];{self::fenced{@role=\"leftright\"{name(../*[1])=\"identifier\" or name(../*[1])=\"function\"{parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"]{children/*[1][@role=\"simple function\" or @role=\"prefix function\"]{name(children/*[1]/children/*[1])=\"identifier\" or name(children/*[1]/children/*[1])=\"function\"{contains(children/*[1]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"){name(children/*[1]/children/*[2]/children/*[1])=\"identifier\" or name(children/*[1]/children/*[2]/children/*[1])=\"number\"'.split(\"{\"),\n'Rule,fences-open-close,default,[p] (pause:\"short\"); [n] content/*[1] (grammar:spokenFence); [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2] (grammar:spokenFence); [p] (pause:\"short\"),self::fenced,@role=\"leftright\"'.split(\",\"),'Rule{paren-simple-nested-func{default{[p] (pause:\"short\"); [n] content/*[1]; [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2]; [p] (pause:\"short\"){self::fenced{@role=\"leftright\"{name(../*[1])=\"identifier\" or name(../*[1])=\"function\"{parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"]{not(contains(children/*[1]/@annotation, \"clearspeak:simple\"))'.split(\"{\"),\n'Rule{paren-simple-nested-func{Functions_None{[p] (pause:\"short\"); [n] content/*[1] (grammar:spokenFence); [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2] (grammar:spokenFence); [p] (pause:\"short\"){self::fenced{@role=\"leftright\"{name(../*[1])=\"identifier\" or name(../*[1])=\"function\"{parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"]{children/*[1][@role=\"simple function\" or @role=\"prefix function\"]{contains(children/*[1]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\") or name(children/*[1]/children/*[2]/children/*[1])=\"subscript\" or name(children/*[1]/children/*[2]/children/*[1])=\"superscript\" or children/*[1]/children/*[2]/children/*[1][@role=\"vulgar\"] '.split(\"{\"),\n[\"SpecializedRule\",\"fences-open-close\",\"default\",\"Paren_Speak\"],[\"Aliases\",\"fences-open-close\",\"self::fenced\",'@role=\"composed function\"'],[\"Rule\",\"fence-silent\",\"Paren_Silent\",'[p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\")',\"self::fenced\"],'Rule,fences-open-close,ImpliedTimes_None,[p] (pause:\"short\"); [n] content/*[1] (grammar:spokenFence); [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2] (grammar:spokenFence); [p] (pause:\"short\"),self::fenced,@role=\"leftright\",parent::*/parent::*[@role!=\"simple function\"],parent::*/parent::*[@role!=\"prefix function\"]'.split(\",\"),\n'Rule;fence-nesting;Paren_SpeakNestingLevel;[n] text() (grammar:insertNesting=CSFnestingDepth);self::fence;contains(@grammar, \"spokenFence\");CQFmatchingFences'.split(\";\"),[\"Rule\",\"fence-no-nesting\",\"Paren_SpeakNestingLevel\",\"[n] text()\",\"self::fence\"],'Rule,fences-points,Paren_CoordPoint,[t] \"der Punkt mit Koordinaten\"; [n] children/*[1],self::fenced,name(children/*[1])=\"punctuated\",children/*[1][@role=\"sequence\"]'.split(\",\"),'Rule{fences-interval{Paren_Interval{[t] \"das Interval von\"; [n] children/*[1]/children/*[1]; [t] \"bis\"; [n] children/*[1]/children/*[3]; [p] (pause:\"short\"); [n] . (grammar:interval){self::fenced{not(contains(@grammar, \"interval\")){name(children/*[1])=\"punctuated\"{children/*[1][@role=\"sequence\"]{count(./children/*[1]/content/*)=1{children/*[1]/content/*[1][@role=\"comma\"]'.split(\"{\"),\n'Rule{interval-open{Paren_Interval{[t] \"ohne\"; [n] children/*[1]/children/*[1]; [t] \"und\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\")\"'.split(\"{\"),'Rule{interval-closed-open{Paren_Interval{[t] \"einschlie\\u00dflich\"; [n] children/*[1]/children/*[1]; [p] (pause:\"short\"); [t] \"aber ohne\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"[\"{content/*[2]/text()=\")\"'.split(\"{\"),\n'Rule{interval-open-closed{Paren_Interval{[t] \"ohne\"; [n] children/*[1]/children/*[1]; [p] (pause:\"short\"); [t] \"aber einschlie\\u00dflich\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\"]\"'.split(\"{\"),'Rule{interval-closed{Paren_Interval{[t] \"einschlie\\u00dflich\"; [n] children/*[1]/children/*[1]; [t] \"und\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"[\"{content/*[2]/text()=\"]\"'.split(\"{\"),\n'Rule{interval-open-inf-r{Paren_Interval{[t] \"ohne\"; [n] children/*[1]/children/*[1]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\")\"{children/*[1]/children/*[3]/text()=\"\\u221e\" or (name(children/*[1]/children/*[3])=\"prefixop\" and children/*[1]/children/*[3]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),'Rule{interval-open-inf-l{Paren_Interval{[t] \"ohne\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\")\"{children/*[1]/children/*[1]/text()=\"\\u221e\" or (name(children/*[1]/children/*[1])=\"prefixop\" and children/*[1]/children/*[1]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),\n'Rule;interval-open-inf-lr;Paren_Interval;;self::fenced;contains(@grammar, \"interval\");content/*[1]/text()=\"(\";content/*[2]/text()=\")\";children/*[1]/children/*[3]/text()=\"\\u221e\" or (name(children/*[1]/children/*[3])=\"prefixop\" and children/*[1]/children/*[3]/children/*[1]/text()=\"\\u221e\");children/*[1]/children/*[1]/text()=\"\\u221e\" or (name(children/*[1]/children/*[1])=\"prefixop\" and children/*[1]/children/*[1]/children/*[1]/text()=\"\\u221e\")'.split(\";\"),'Rule{interval-closed-open-inf{Paren_Interval{[t] \"einschlie\\u00dflich\"; [n] children/*[1]/children/*[1]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"[\"{content/*[2]/text()=\")\"{children/*[1]/children/*[3]/text()=\"\\u221e\" or (name(children/*[1]/children/*[3])=\"prefixop\" and children/*[1]/children/*[3]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),\n'Rule{interval-open-closed-inf{Paren_Interval{[t] \"einschlie\\u00dflich\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\"]\"{children/*[1]/children/*[1]/text()=\"\\u221e\" or (name(children/*[1]/children/*[1])=\"prefixop\" and children/*[1]/children/*[1]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),'Rule,paren-nested-embellished-funcs,Functions_None,[p] (pause:\"short\"); [n] content/*[1]; [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2]; [p] (pause:\"short\"),self::fenced,@role=\"leftright\",name(../..)=\"appl\",name(children/*[1]) = \"appl\",preceding-sibling::*/descendant-or-self::*[@role=\"subsup\"] or children/*[1]/descendant-or-self::*[@role=\"subsup\"]'.split(\",\"),\n'Rule;set-empty;default;[t]  \"die leere Menge\";self::fenced;@role=\"set empty\"'.split(\";\"),'Rule,set-extended,default,[t] \"die Menge aller\"; [n] children/*[1]/children/*[1]; [t] \"mit\"; [n] children/*[1]/children/*[3],self::fenced,@role=\"set extended\"'.split(\",\"),'Rule,set-collection,default,[t] \"die Menge\"; [n] children/*[1],self::fenced,@role=\"set collection\"'.split(\",\"),[\"Aliases\",\"set-collection\",\"self::fenced\",'@role=\"set singleton\"'],'Rule,set-extended,Sets_woAll,[t] \"die Menge von\"; [n] children/*[1]/children/*[1]; [t] \"mit\"; [n] children/*[1]/children/*[3],self::fenced,@role=\"set extended\"'.split(\",\"),\n'Rule;set-collection;Sets_SilentBracket;[n] children/*[1];self::fenced;@role=\"set collection\"'.split(\";\"),[\"Rule\",\"subscript\",\"default\",'[p] (pause:short); [n] children/*[1]; [t] \"Index\"; [n] children/*[2]; [p] (pause:short)',\"self::subscript\"],'Rule,subscript-base,default,[n] children/*[1]; [t] \"Basis\"; [n] children/*[2],self::subscript,CQFisLogarithm'.split(\",\"),'Rule{subscript-index{default{[n] children/*[1]; [t] \"Index\"; [n] children/*[2]{self::subscript{contains(@grammar, \"simpleDet\")'.split(\"{\"),\n[\"Rule\",\"fraction\",\"default\",'[p] (pause:short); [t] \"Bruch mit Z\\u00e4hler\"; [n] children/*[1]; [p] (pause:short); [t] \"und Nenner\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],'Rule,fraction,Functions_None,[p] (pause:short); [t] \"Bruch mit Z\\u00e4hler\"; [n] children/*[1]; [p] (pause:short); [t] \"und Nenner\"; [n] children/*[2]; [p] (pause:short),self::fraction,name(children/*[1])=\"appl\" or name(children/*[2])=\"appl\"'.split(\",\"),'Rule{simple-fraction{default{[p] (pause:short); [n] children/*[1]; [t] \"geteilt durch\"; [n] children/*[2]; [p] (pause:short){self::fraction{contains(children/*[1]/@annotation, \"clearspeak:simple\") or contains(children/*[1]/@annotation, \"clearspeak:unit\"){contains(children/*[2]/@annotation, \"clearspeak:simple\") or contains(children/*[2]/@annotation, \"clearspeak:unit\")'.split(\"{\"),\n'Rule,simple-vulgar-fraction,default,[p] (pause:short); [n] children/*[1]; [t] \"geteilt durch\"; [n] children/*[2]; [p] (pause:short),self::fraction,@role=\"vulgar\"'.split(\",\"),'Rule,simple-text-fraction,default,[p] (pause:short); [n] children/*[1]; [t] \"geteilt durch\"; [n] children/*[2]; [p] (pause:short),self::fraction,name(children/*[1])=\"text\",name(children/*[2])=\"text\"'.split(\",\"),'Rule,simple-text-fraction,default,[p] (pause:short); [n] children/*[1]; [t] \"geteilt durch\"; [n] children/*[2]; [p] (pause:short),self::fraction,name(children/*[1])=\"infixop\",children/*[1][@role=\"unit\"],name(children/*[2])=\"text\"'.split(\",\"),\n'Rule;vulgar-fraction;default;[t] CSFvulgarFraction (grammar:correctOne);self::fraction;@role=\"vulgar\";CQFvulgarFractionSmall'.split(\";\"),[\"Rule\",\"fraction\",\"Fraction_Over\",'[p] (pause:short); [n] children/*[1]; [t] \"geteilt durch\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_OverEndFrac\",'[p] (pause:short); [n] children/*[1]; [t] \"geteilt durch\"; [n] children/*[2]; [p] (pause:short); [t] \"Ende Bruch\"; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\n\"Fraction_FracOver\",'[p] (pause:short); [t] \"Bruch\"; [n] children/*[1]; [t] \"geteilt durch\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_Per\",'[p] (pause:short); [n] children/*[1]; [t] \"per\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_GeneralEndFrac\",'[p] (pause:short); [t] \"Bruch mit Z\\u00e4hler\"; [n] children/*[1]; [p] (pause:short); [t] \"und Nenner\"; [n] children/*[2]; [p] (pause:short); [t] \"Ende Bruch\"; [p] (pause:short)',\n\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_General\",'[p] (pause:short); [t] \"Bruch mit Z\\u00e4hler\"; [n] children/*[1]; [p] (pause:short); [t] \"und Nenner\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],'Rule;simple-vulgar-fraction;Fraction_Ordinal;[t] CSFvulgarFraction (grammar:correctOne);self::fraction;@role=\"vulgar\"'.split(\";\"),'Rule{fraction{Fraction_EndFrac{[p] (pause:short); [n] . (grammar:endfrac); [t] \"Ende Bruch\"; [p] (pause:short){self::fraction{not(contains(@grammar, \"endfrac\")){not(contains(children/*[1]/@annotation, \"clearspeak:unit\")){not(contains(children/*[2]/@annotation, \"clearspeak:unit\"))'.split(\"{\"),\n'Rule{vulgar-fraction{Fraction_EndFrac{[p] (pause:short); [n] children/*[1]; [t] \"geteilt durch\"; [n] children/*[2]; [p] (pause:short){self::fraction{name(children/*[1])=\"fraction\"{name(children/*[2])=\"fraction\"{contains(children/*[1]/@annotation, \"clearspeak:simple\"){contains(children/*[2]/@annotation, \"clearspeak:simple\")'.split(\"{\"),'Rule;simple-vulgar-fraction;Fraction_EndFrac;[t] CSFvulgarFraction (grammar:correctOne);self::fraction;@role=\"vulgar\";contains(@annotation, \"clearspeak:simple\");self::*'.split(\";\"),\n[\"Rule\",\"sqrt\",\"default\",'[t] \"Quadratwurzel aus\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short)',\"self::sqrt\"],'Rule,sqrt-nested,default,[p] (pause: \"short\"); [t] \"Quadratwurzel aus\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),'Rule,negative-sqrt,default,[t] \"negative Quadratwurzel aus\"; [n] children/*[1]/children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::prefixop,@role=\"negative\",name(children/*[1])=\"sqrt\"'.split(\",\"),\n'Rule,negative-sqrt,default,[p] (pause: \"short\"); [t] \"negative Quadratwurzel aus\"; [n] children/*[1]/children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::prefixop,@role=\"negative\",name(children/*[1])=\"sqrt\",not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),'Rule,sqrt-plus-minus,Roots_PosNegSqRoot,[t] \"positive Quadratwurzel aus\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),\n'Rule,sqrt-nested-plus-minus,Roots_PosNegSqRoot,[p] (pause: \"short\"); [t] \"positive Quadratwurzel aus\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,not(preceding-sibling::*),ancestor::sqrt|ancestor::root,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),'Rule,sqrt-plus-minus,Roots_PosNegSqRootEnd,[t] \"positive Quadratwurzel aus\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),\n'Rule,sqrt-nested-plus-minus,Roots_PosNegSqRootEnd,[p] (pause: \"short\"); [t] \"positive Quadratwurzel aus\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,not(preceding-sibling::*),ancestor::sqrt|ancestor::root,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),'Rule{sqrt-endroot{Roots_RootEnd{[n] . (grammar:EndRoot); [t] \"Wurzel Ende\"; [p] (pause:short){self::sqrt{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),\n'Rule{negative-sqrt-endroot{Roots_RootEnd{[n] . (grammar:EndRoot); [t] \"Wurzel Ende\"; [p] (pause:short){self::prefixop{@role=\"negative\"{name(children/*[1])=\"sqrt\"{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),'Rule{sqrt-endroot{Roots_PosNegSqRootEnd{[n] . (grammar:EndRoot); [t] \"Wurzel Ende\"; [p] (pause:short){self::sqrt{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),'Rule{negative-sqrt-endroot{Roots_PosNegSqRootEnd{[n] . (grammar:EndRoot); [t] \"Wurzel Ende\"; [p] (pause:short){self::prefixop{@role=\"negative\"{name(children/*[1])=\"sqrt\"{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),\n'Rule,cube,default,[t] \"Kubikwurzel aus\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short),self::root,children/*[1][text()=\"3\"]'.split(\",\"),'Rule,cube-nested,default,[p] (pause:short); [t] \"Kubikwurzel aus\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short),self::root,children/*[1][text()=\"3\"],not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),[\"Rule\",\"root\",\"default\",'[t] \"die\" (grammar:article); [n] children/*[1] (grammar:ordinal); [t] \"Wurzel aus\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short)',\n\"self::root\"],'Rule,root-nested,default,[p] (pause:short); [t] \"die\" (grammar:article); [n] children/*[1] (grammar:ordinal); [t] \"Wurzel aus\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short),self::root,not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),'Rule{root-endroot{Roots_RootEnd{[n] . (grammar:EndRoot); [t] \"Wurzel Ende\"; [p] (pause:short){self::root{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),'Rule{root-endroot{Roots_PosNegSqRootEnd{[n] . (grammar:EndRoot); [t] \"Wurzel Ende\"; [p] (pause:short){self::root{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),\n'Rule,negative,default,[t] \"minus\"; [n] children/*[1],self::prefixop,@role=\"negative\"'.split(\",\"),'Rule,positive,default,[t] \"plus\"; [n] children/*[1],self::prefixop,@role=\"positive\"'.split(\",\"),'Rule,angle-measure,default,[t] \"das Ma\\u00df des Winkels\"; [n] children/*[2] (grammar:angle),self::infixop,content/*[1]/text()=\"\\u2220\",children/*[1][text()=\"m\"]'.split(\",\"),[\"Rule\",\"prefix\",\"default\",\"[m] content/* (grammar:prefix); [n] children/*[1]\",\"self::prefixop\"],[\"Rule\",\"postfix\",\"default\",\"[n] children/*[1]; [m] content/* (grammar:postfix)\",\n\"self::postfixop\"],'Rule{set-prefix-operators{default{[t] \"der\" (grammar:article); [n] self::* (grammar:!prefix); [t] \"von\"{self::*{contains(@grammar,\"prefix\"){descendant-or-self::*/text()=\"\\u2229\"{self::*{self::*{self::*'.split(\"{\"),'Rule{set-prefix-operators{default{[t] \"die\" (grammar:article); [n] self::* (grammar:!prefix); [t] \"von\"{self::*{contains(@grammar,\"prefix\"){descendant-or-self::*/text()=\"\\u222a\"{self::*{self::*{self::*'.split(\"{\"),[\"Rule\",\"binary-operation\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator);\",\n\"self::infixop\"],'Rule,binary-operation,ImpliedTimes_MoreImpliedTimes,[m] children/* (sepFunc:CTXFcontentIterator);,self::infixop,@role=\"implicit\"'.split(\",\"),'Rule,binary-operation-pause,default,[p] (pause:short); [m] children/* (sepFunc:CTXFcontentIterator);,self::infixop,@role=\"implicit\",name(children/*[1])=\"appl\"'.split(\",\"),'Rule,binary-operation-pause,default,[m] children/* (sepFunc:CTXFcontentIterator); [p] (pause:short),self::infixop,@role=\"implicit\",name(children/*[last()])=\"appl\"'.split(\",\"),\n'Rule,binary-operation-pause,default,[p] (pause:short); [m] children/* (sepFunc:CTXFcontentIterator); [p] (pause:short),self::infixop,@role=\"implicit\",name(children/*[1])=\"appl\",name(children/*[last()])=\"appl\"'.split(\",\"),'Rule;implicit-times;default;[p] (pause:short);self::operator;@role=\"multiplication\";text()=\"\\u2062\"'.split(\";\"),'Rule implicit-times default  self::operator @role=\"multiplication\" text()=\"\\u2062\" CQFsimpleArguments'.split(\" \"),'Rule;implicit-times;default;[n] text();self::operator;@role=\"multiplication\";text()=\"\\u2062\";CQFfencedArguments'.split(\";\"),\n'Rule;implicit-times;ImpliedTimes_MoreImpliedTimes;[n] text();self::operator;@role=\"multiplication\";text()=\"\\u2062\"'.split(\";\"),'Rule implicit-times ImpliedTimes_None  self::operator @role=\"multiplication\" text()=\"\\u2062\"'.split(\" \"),'Rule{binary-operation-simple{default{[m] children/* (rate:\"0.5\"); [p] (pause:short){self::infixop{@role=\"implicit\"{contains(@annotation, \"clearspeak:simple\"){not(contains(@grammar, \"inFrac\"))'.split(\"{\"),'Rule;simple-in-fraction;default;[n] . (rate:\"0.5\",grammar:inFrac);self::*;contains(@annotation, \"clearspeak:simple\");not(contains(@grammar, \"inFrac\"));name(.)!=\"identifier\";name(.)!=\"function\";name(.)!=\"number\";name(parent::*/parent::*)=\"fraction\";not(preceding-sibling::*)'.split(\";\"),\n'Rule;operators-after-power;Exponent_AfterPower;[m] children/* (rate:\"0.5\");self::infixop;@role=\"implicit\";contains(@grammar, \"afterPower\")'.split(\";\"),[\"Rule\",\"relseq\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::relseq\"],[\"Rule\",\"multrel\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::multirel\"],'Rule;natural-numbers;default;[t] \"die nat\\u00fcrlichen Zahlen\";self::identifier;text()=\"\\u2115\" or (text()=\"N\" and @font=\"double-struck\");self::*;self::*;self::*;self::*;self::*'.split(\";\"),\n'Rule;integers;default;[t] \"die ganzen Zahlen\";self::identifier;text()=\"\\u2124\" or (text()=\"Z\" and @font=\"double-struck\");self::*;self::*;self::*;self::*;self::*'.split(\";\"),'Rule;rational-numbers;default;[t] \"die rationalen Zahlen\";self::identifier;text()=\"\\u211a\" or (text()=\"Q\" and @font=\"double-struck\");self::*;self::*;self::*;self::*;self::*'.split(\";\"),'Rule;real-numbers;default;[t] \"die reellen Zahlen\";self::identifier;text()=\"\\u211d\" or (text()=\"R\" and @font=\"double-struck\");self::*;self::*;self::*;self::*;self::*'.split(\";\"),\n'Rule;complex-numbers;default;[t] \"die komplexen Zahlen\";self::identifier;text()=\"\\u2102\" or (text()=\"C\" and @font=\"double-struck\");self::*;self::*;self::*;self::*;self::*'.split(\";\"),'Rule,natural-numbers-super,default,[t] \"n\" (join: \"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u2115\" or (children/*[1]/text()=\"N\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*,self::*,self::*'.split(\",\"),'Rule,integers-super,default,[t] \"z\" (join: \"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u2124\" or (children/*[1]/text()=\"Z\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*,self::*,self::*'.split(\",\"),\n'Rule,rational-numbers-super,default,[t] \"q\" (join: \"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u211a\" or (children/*[1]/text()=\"Q\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*,self::*,self::*'.split(\",\"),'Rule,real-numbers-super,default,[t] \"r\" (join:\"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u211d\" or (children/*[1]/text()=\"R\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*,self::*,self::*'.split(\",\"),\n'Rule,complex-numbers-super,default,[t] \"c\" (join:\"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u2102\" or (children/*[1]/text()=\"C\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*,self::*,self::*'.split(\",\"),'Rule;natural-numbers-with-zero;default;[t] \"die nat\\u00fcrlichen Zahlen mit Null\";self::subscript;children/*[1]/text()=\"\\u2115\" or (children/*[1]/text()=\"N\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"0\";self::*;self::*;self::*;self::*;self::*'.split(\";\"),\n'Rule;positive-integers;default;[t] \"die positiven ganzen Zahlen\";self::superscript;children/*[1]/text()=\"\\u2124\" or (children/*[1]/text()=\"Z\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"+\";self::*;self::*;self::*;self::*;self::*'.split(\";\"),'Rule;positive-integers;default;[t] \"die negativen ganzen Zahlen\";self::superscript;children/*[1]/text()=\"\\u2124\" or (children/*[1]/text()=\"Z\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"-\";self::*;self::*;self::*;self::*;self::*'.split(\";\"),\n'Rule;positive-rational-numbers;default;[t] \"die positiven rationalen Zahlen\";self::superscript;children/*[1]/text()=\"\\u211a\" or (children/*[1]/text()=\"Q\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"+\";self::*;self::*;self::*;self::*;self::*'.split(\";\"),'Rule;negative-rational-numbers;default;[t] \"die negativen rationalen Zahlen\";self::superscript;children/*[1]/text()=\"\\u211a\" or (children/*[1]/text()=\"Q\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"-\";self::*;self::*;self::*;self::*;self::*'.split(\";\"),\n'Rule,fences-neutral,default,[p] (pause:short); [t] \"der Betrag von\"; [n] children/*[1]; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),'Rule,fences-neutral,AbsoluteValue_AbsEnd,[p] (pause:short); [t] \"der Betrag von\"; [n] children/*[1]; [p] (pause: short); [t] \"Ende Betrag\"; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),\n'Rule,fences-neutral,AbsoluteValue_Cardinality,[p] (pause:short); [t] \"die M\\u00e4chtigkeit der Menge\"; [n] children/*[1]; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),'Rule,fences-neutral,AbsoluteValue_Determinant,[p] (pause:short); [t] \"die Determinante von\"; [n] children/*[1]; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),\n[\"Rule\",\"matrix\",\"default\",'[t] \"die\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Matrize\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Zeile-:\"); [p] (pause:long)',\"self::matrix\"],'Rule{matrix-simple{default{[t] \"die\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Matrize\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Zeile-:\",grammar:simpleDet); [p] (pause:long){self::matrix{count(children/*)<4{count(children/*[1]/children/*)<4{CQFcellsSimple'.split(\"{\"),\n'Rule,matrix-trivial,default,[t] \"die 1 mal 1 Matrize mit Element\"; [n] children/*[1]; [p] (pause:long),self::vector,@role=\"squarematrix\"'.split(\",\"),'Rule{determinant{default{[t] \"die\" (grammar:article); [t] \"Determinante der\"; [t] count(children/*); [t] \"mal\"; [t] count(children/*[1]/children/*); [t] \"Matrize\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Zeile-:\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"determinant\"{count(children/*)<4{CQFcellsSimple'.split(\"{\"),\n'Rule{determinant-simple{default{[t] \"die\" (grammar:article); [t] \"Determinante der\"; [t] count(children/*); [t] \"mal\"; [t] count(children/*[1]/children/*); [t] \"Matrize\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Zeile-:\"); [p] (pause:long){self::matrix{@role=\"determinant\"'.split(\"{\"),[\"Rule\",\"matrix-vector\",\"default\",'[t] \"die\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Spaltenmatrize\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Zeile-:\",grammar:simpleDet); [p] (pause:long)',\n\"self::vector\"],[\"SpecializedRule\",\"matrix-vector\",\"default\",\"Matrix_SpeakColNum\"],'Rule{matrix-vector-simple{default{[t] \"die\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Spaltenmatrize\"; [p] (pause:long); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::vector{count(children/*)<4{CQFcellsSimple{@role!=\"squarematrix\"'.split(\"{\"),[\"Rule\",\"matrix-vector-simple\",\"Matrix_SilentColNum\",'[t] \"die\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Spaltenmatrize\"; [p] (pause:long); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long)',\n\"self::vector\"],'Rule{matrix-row-vector{default{[t] \"die\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Zeilenmatrize\"; [p] (pause:long); [m] children/*[1]/children/* (ctxtFunc:CTXFnodeCounter,context:\"Spalte-:\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"'.split(\"{\"),[\"SpecializedRule\",\"matrix-row-vector\",\"default\",\"Matrix_SpeakColNum\"],'Rule{matrix-row-vector-simple{default{[t] \"die\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Zeilenmatrize\"; [p] (pause:long); [m] children/*[1]/children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"{count(children/*[1]/children/*)<4{CQFcellsSimple'.split(\"{\"),\n'Rule{matrix-row-vector-simple{Matrix_SilentColNum{[t] \"die\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Zeilenmatrize\"; [p] (pause:long); [m] children/*[1]/children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"'.split(\"{\"),'Rule;matrix-row-simple;default;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\");self::row;contains(@grammar, \"simpleDet\")'.split(\";\"),[\"Rule\",\n\"matrix-row-simple\",\"Matrix_SilentColNum\",'[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\")',\"self::row\"],'Rule;line-simple;default;[n] children/*[1];self::line;contains(@grammar, \"simpleDet\")'.split(\";\"),[\"Rule\",\"matrix-row\",\"default\",'[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Spalte-,- \",sepFunc:CTXFpauseSeparator,separator:\"medium\"); [p] (pause:long)',\"self::row\"],[\"SpecializedRule\",\"matrix-row\",\"default\",\"Matrix_SpeakColNum\"],[\"Rule\",\"matrix-cell\",\"default\",\"[n] children/*[1]\",\n\"self::cell\"],'Rule{matrix-end-matrix{Matrix_EndMatrix{[n] . (grammar:EndMatrix); [t] \"Ende Matrize\"{self::matrix{not(contains(@grammar, \"EndMatrix\"))'.split(\"{\"),'Rule{matrix-end-vector{Matrix_EndMatrix{[n] . (grammar:EndMatrix); [t] \"Ende Matrize\"{self::vector{not(contains(@grammar, \"EndMatrix\"))'.split(\"{\"),'Rule{matrix-end-determinant{Matrix_EndMatrix{[n] . (grammar:EndMatrix); [t] \"Ende Determinante\"{self::matrix{@role=\"determinant\"{not(contains(@grammar, \"EndMatrix\"))'.split(\"{\"),[\"Rule\",\"vector\",\n\"Matrix_Vector\",'[t] \"der\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Spaltenvektor\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Zeile-:\",grammar:simpleDet); [p] (pause:long)',\"self::vector\"],[\"SpecializedRule\",\"vector\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{vector-simple{Matrix_Vector{[t] \"der\" (grammar:article); [t] count(children/*);  [t] \"mal\"; [t] count(children/*[1]/children/*); [t] \"Spaltenvektor\"; [p] (pause:long); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::vector{count(children/*)<4{CQFcellsSimple'.split(\"{\"),\n[\"SpecializedRule\",\"vector-simple\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{row-vector{Matrix_Vector{[t] \"der\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Zeilenvektor\"; [p] (pause:long); [m] children/*[1]/children/* (ctxtFunc:CTXFnodeCounter,context:\"Spalte-:\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"'.split(\"{\"),[\"SpecializedRule\",\"row-vector\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{row-vector-simple{Matrix_Vector{[t] \"der\" (grammar:article); [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Zeilenvektor\"; [p] (pause:long); [m] children/*[1]/children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"{count(children/*[1]/children/*)<4{CQFcellsSimple'.split(\"{\"),\n[\"SpecializedRule\",\"row-vector-simple\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{vector-end-matrix{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"Ende Matrize\"{self::matrix{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),'Rule{vector-end-vector{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"Ende Vektor\"{self::vector{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),'Rule{vector-end-vector{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"Ende Vektor\"{self::matrix{@role=\"rowvector\"{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),\n'Rule{vector-end-determinant{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"Ende Determinante\"{self::matrix{@role=\"determinant\"{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),'Rule,binomial,Matrix_Combinatoric,[n] children/*[1]/children/*[1]; [t] \"\\u00fcber\"; [n] children/*[2]/children/*[1]; ,self::vector,@role=\"binomial\"'.split(\",\"),'Rule{lines-summary{default{[p] (pause:short); [t] count(children/*); [t] \"Zeilen\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\")){self::*'.split(\"{\"),\n'Rule;lines-summary;MultiLineOverview_None;[n] . (grammar:layoutSummary);self::multiline;not(contains(@grammar, \"layoutSummary\"));self::*'.split(\";\"),[\"Aliases\",\"lines-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],'Rule{cases-summary{default{[p] (pause:short); [t] count(children/*); [t] \"F\\u00e4lle\";  [n] . (grammar:layoutSummary){self::cases{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),'Rule;cases-summary;MultiLineOverview_None;[n] . (grammar:layoutSummary);self::cases;not(contains(@grammar, \"layoutSummary\"));self::*'.split(\";\"),\n[\"Rule\",\"lines\",\"default\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Zeile-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\"self::table\"],[\"Aliases\",\"lines\",\"self::multiline\"],[\"Rule\",\"line\",\"default\",\"[n] children/*[1]\",\"self::line\"],'Rule;row-medium;default;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"medium\");self::row;@role=\"table\"'.split(\";\"),[\"Aliases\",\"row-medium\",\"self::row\",'@role=\"cases\"'],'Rule;row-long;MultiLinePausesBetweenColumns_Long;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"long\");self::row;@role=\"table\"'.split(\";\"),\n[\"Aliases\",\"row-long\",\"self::row\",'@role=\"cases\"'],'Rule;row-short;MultiLinePausesBetweenColumns_Short;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\");self::row;@role=\"table\"'.split(\";\"),[\"Aliases\",\"row-short\",\"self::row\",'@role=\"cases\"'],'Rule;blank-cell;default;[t] \"leer\";self::cell;count(children/*)=0'.split(\";\"),'Rule;blank-empty;default;[t] \"leer\";self::empty;count(../*)=1;name(../..)=\"cell\" or name(../..)=\"line\"'.split(\";\"),[\"Rule\",\"cases\",\"default\",'[p] (pause:short);  [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Fall-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::cases\"],'Rule{lines-cases-summary{MultiLineLabel_Case{[p] (pause:short); [t] count(children/*); [t] \"F\\u00e4lle\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-cases-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-cases\",\"MultiLineLabel_Case\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Fall-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\"self::table\"],\n[\"Aliases\",\"lines-cases\",\"self::multiline\"],'Rule{lines-equations-summary{MultiLineLabel_Equation{[p] (pause:short); [t] count(children/*); [t] \"Gleichungen\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-equations-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-equations\",\"MultiLineLabel_Equation\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Gleichung-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-equations\",\"self::multiline\"],'Rule{lines-steps-summary{MultiLineLabel_Step{[p] (pause:short); [t] count(children/*); [t] \"Rechenschritte\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-steps-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-steps\",\"MultiLineLabel_Step\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Schritt-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-steps\",\"self::multiline\"],'Rule{lines-rows-summary{MultiLineLabel_Row{[p] (pause:short); [t] count(children/*); [t] \"Zeilen\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-rows-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-rows\",\"MultiLineLabel_Row\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Zeile-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-rows\",\"self::multiline\"],'Rule{lines-constraints-summary{MultiLineLabel_Constraint{[p] (pause:short); [t] count(children/*); [t] \"Bedingungen\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-constraints-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-constraints\",\"MultiLineLabel_Constraint\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Bedingung-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-constraints\",\"self::multiline\"],'Rule{lines-none{MultiLineLabel_None{[p] (pause:short); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long){self::table{contains(@grammar, \"layoutSummary\")'.split(\"{\"),[\"Aliases\",\"lines-none\",\"self::multiline\",'contains(@grammar, \"layoutSummary\")'],[\"Aliases\",\"lines-none\",\"self::cases\",'contains(@grammar, \"layoutSummary\")'],[\"Rule\",\"bigop\",\"default\",'[n] children/*[1]; [t] \"\\u00fcber\"; [n] children/*[2]; [p] (pause:short)',\n\"self::bigop\"],[\"Rule\",\"limboth\",\"default\",'[n] children/*[1]; [t] \"von\"; [n] children/*[2];[t] \"bis\"; [n] children/*[3];',\"self::limboth\"],[\"Rule\",\"limlower\",\"default\",'[n] children/*[1]; [t] \"\\u00fcber\"; [n] children/*[2]; [p] (pause:short)',\"self::limlower\"],[\"Rule\",\"limupper\",\"default\",'[n] children/*[1]; [t] \"unter\"; [n] children/*[2]; [p] (pause:short)',\"self::limupper\"],[\"Rule\",\"integral\",\"default\",'[t] \"das\"; [n] children/*[1]; [t] \"\\u00fcber\"; [n] children/*[2]; [p] (pause:short)',\"self::integral\"],\n[\"Rule\",\"overscript\",\"default\",'[n] children/*[1]; [t] \"unter\"; [n] children/*[2]; [p] (pause:short)',\"self::overscore\"],'Rule,overscript,default,[n] children/*[1]; [n] children/*[2];,self::overscore,children/*[2][@role=\"overaccent\"]'.split(\",\"),'Rule,overscript-limits,default,[n] children/*[1]; [t] \"bis\"; [n] children/*[2],self::overscore,children/*[2][@role!=\"overaccent\"],name(children/*[1])=\"underscore\",children/*[1]/children/*[2][@role!=\"underaccent\"]'.split(\",\"),[\"Rule\",\"underscript\",\"default\",\n'[n] children/*[1]; [t] \"\\u00fcber\"; [n] children/*[2]; [p] (pause:short)',\"self::underscore\"],'Rule,underscript-limits,default,[n] children/*[1]; [t] \"von\"; [n] children/*[2],self::underscore,@role=\"underover\",children/*[2][@role!=\"underaccent\"]'.split(\",\"),[\"Rule\",\"number\",\"default\",\"[n] text()\",\"self::number\"],'Rule,mixed-number,default,[n] children/*[1]; [n] children/*[2]; ,self::number,@role=\"mixed\"'.split(\",\"),'Rule{number-with-chars{default{[t] \"Zahl\"; [m] CQFspaceoutNumber (grammar:protected){self::number{@role=\"othernumber\"{\"\" != translate(text(), \"0123456789.,\", \"\"){not(contains(@grammar, \"protected\"))'.split(\"{\"),\n'Rule,decimal-period,default,[t] \"Dezimalbruch\"; [n] children/*[1] (grammar:spaceout); [t] \"Komma mit Periode\";  [n] children/*[3]/children/*[1] (grammar:spaceout),self::punctuated,@role=\"sequence\",count(./content/*)=1,./content/*[1][@role=\"fullstop\"],name(children/*[1])=\"number\",children/*[1][@role=\"integer\"],name(children/*[3])=\"overscore\",children/*[3][@role=\"integer\"],children/*[3]/children/*[2][@role=\"overaccent\"],children/*[3]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),\n'Rule,decimal-period,default,[t] \"Dezimalbruch\"; [n] children/*[1] (grammar:spaceout); [t] \"mit Periode\";  [n] children/*[2]/children/*[1] (grammar:spaceout);,self::infixop,@role=\"implicit\",count(./children/*)=2,name(children/*[1])=\"number\",children/*[1][@role=\"float\"],name(children/*[2])=\"overscore\",children/*[2][@role=\"integer\"],children/*[2]/children/*[2][@role=\"overaccent\"],children/*[2]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),\n'Rule,decimal-period-singular,default,[t] \"Dezimalbruch\"; [n] children/*[1] (grammar:spaceout); [t] \"Komma mit Periode\";  [n] children/*[3]/children/*[1] (grammar:spaceout),self::punctuated,@role=\"sequence\",count(./content/*)=1,./content/*[1][@role=\"fullstop\"],name(children/*[1])=\"number\",children/*[1][@role=\"integer\"],name(children/*[3])=\"overscore\",children/*[3][@role=\"integer\"],children/*[3]/children/*[2][@role=\"overaccent\"],children/*[3]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"],string-length(./children/*[3]/children/*[1]/text())=1'.split(\",\"),\n'Rule,decimal-period-singular,default,[t] \"Dezimalbruch\"; [n] children/*[1] (grammar:spaceout); [t] \"mit Periode\";  [n] children/*[2]/children/*[1] (grammar:spaceout);,self::infixop,@role=\"implicit\",count(./children/*)=2,name(children/*[1])=\"number\",children/*[1][@role=\"float\"],name(children/*[2])=\"overscore\",children/*[2][@role=\"integer\"],children/*[2]/children/*[2][@role=\"overaccent\"],children/*[2]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"],string-length(./children/*[2]/children/*[1]/text())=1'.split(\",\"),\n'Rule;number-with-spaces;default;[m] CQFspaceoutNumber (grammar:!spaceout:number);self::number;contains(@grammar, \"spaceout\")'.split(\";\"),'Rule;decimal-point;default;[t] \"Komma\";self::punctuation;@role=\"fullstop\";contains(@grammar,\"number\")'.split(\";\"),'Rule,line-segment,default,[t] \"die Strecke\"; [n] children/*[1]/children/*[1]; [n] children/*[1]/children/*[2]; [p] (pause:short),self::overscore,@role=\"implicit\",children/*[2][@role=\"overaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"],name(children/*[1])=\"infixop\",count(./children/*[1]/children/*)=2'.split(\",\"),\n'Rule,conjugate,Bar_Conjugate,[t] \"die komplexe Konjugation von\"; [n] children/*[1],self::overscore,children/*[2][@role=\"overaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),'Rule;defined-by;default;[t] \"ist definiert als\" (pause:short);self::overscore;@role=\"equality\";@embellished=\"relation\";name(children/*[2])=\"text\";children/*[2][text()]=\"def\"'.split(\";\"),'Rule,adorned-sign,default,[n] children/*[1] ; [t] \"Zeichen mit dar\\u00fcberstehendem\"; [n] children/*[2],self::overscore,@embellished,name(children/*[1])=\"operator\" or name(children/*[1])=\"relation\"'.split(\",\"),\n'Rule;factorial;default;[t] \"Fakult\\u00e4t\";self::punctuation;text()=\"!\";name(preceding-sibling::*[1])!=\"text\"'.split(\";\"),[\"Rule\",\"tensor-base\",\"default\",\"[n] children/*[2]; [n] children/*[3]; [n] children/*[1]; [n] children/*[4]; [n] children/*[5]\",\"self::tensor\"],'Rule{left-super{default{[t] \"linker oberer Index\"; [n] text(){self::*[@role=\"leftsuper\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{left-super{default{[t] \"linker oberer Index\"; [m] children/*{self::punctuated{@role=\"leftsuper\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),\n'Rule{left-sub{default{[t] \"linker unterer Index\"; [n] text(){self::*[@role=\"leftsub\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{left-sub{default{[t] \"linker unterer Index\"; [m] children/*{self::punctuated{@role=\"leftsub\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{right-super{default{[t] \"rechter oberer Index\"; [n] text(){self::*[@role=\"rightsuper\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{right-super{default{[t] \"rechter oberer Index\"; [m] children/*{self::punctuated{@role=\"rightsuper\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),\n'Rule{right-sub{default{[t] \"rechter unterer Index\"; [n] text(){self::*[@role=\"rightsub\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{right-sub{default{[t] \"rechter unterer Index\"; [m] children/*{self::punctuated{@role=\"rightsub\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule;empty-index;default;[p] (pause:medium);self::empty;@role=\"rightsub\" or @role=\"rightsuper\" or @role=\"leftsub\" or @role=\"leftsuper\"'.split(\";\"),'Rule,combinatorics,default,[n] children/*[2] (grammar:combinatorics); [n] children/*[1]; [n] children/*[4] (grammar:combinatorics),self::tensor,name(children/*[3])=\"empty\",name(children/*[5])=\"empty\",children/*[1][text()=\"P\" or text()=\"C\"]'.split(\",\"),\n'Rule,choose,CombinationPermutation_ChoosePermute,[n] children/*[4] (grammar:combinatorics); [t] \"aus\"; [n] children/*[2] (grammar:combinatorics),self::tensor,name(children/*[3])=\"empty\",name(children/*[5])=\"empty\",children/*[1][text()=\"C\"]'.split(\",\"),'Rule,permute,CombinationPermutation_ChoosePermute,[n] children/*[4] (grammar:combinatorics); [t] \"Permutionen von\"; [n] children/*[2] (grammar:combinatorics),self::tensor,name(children/*[3])=\"empty\",name(children/*[5])=\"empty\",children/*[1][text()=\"P\"]'.split(\",\")]};\nsre.Grammar.getInstance().setPreprocessor(\"numbers2alpha\",sre.ClearspeakUtil.numbersToAlpha);sre.ClearspeakRules={domain:\"clearspeak\",functions:[[\"CTXF\",\"CTXFpauseSeparator\",sre.StoreUtil.pauseSeparator],[\"CTXF\",\"CTXFnodeCounter\",sre.ClearspeakUtil.nodeCounter],[\"CTXF\",\"CTXFcontentIterator\",sre.StoreUtil.contentIterator],[\"CSF\",\"CSFvulgarFraction\",sre.NumbersUtil.vulgarFraction],[\"CQF\",\"CQFvulgarFractionSmall\",sre.ClearspeakUtil.isSmallVulgarFraction],[\"CQF\",\"CQFcellsSimple\",sre.ClearspeakUtil.allCellsSimple],[\"CSF\",\"CSFordinalExponent\",sre.ClearspeakUtil.ordinalExponent],[\"CSF\",\"CSFwordOrdinal\",\nsre.ClearspeakUtil.wordOrdinal],[\"CQF\",\"CQFisCapital\",sre.ClearspeakUtil.isCapitalLetter],[\"CQF\",\"CQFmatchingFences\",sre.ClearspeakUtil.matchingFences],[\"CSF\",\"CSFnestingDepth\",sre.ClearspeakUtil.nestingDepth],[\"CQF\",\"CQFfencedArguments\",sre.ClearspeakUtil.fencedArguments],[\"CQF\",\"CQFsimpleArguments\",sre.ClearspeakUtil.simpleArguments],[\"CQF\",\"CQFisHyperbolic\",sre.ClearspeakUtil.isHyperbolic],[\"CQF\",\"CQFisLogarithm\",sre.ClearspeakUtil.isLogarithmWithBase],[\"CQF\",\"CQFspaceoutNumber\",sre.MathspeakUtil.spaceoutNumber],\n[\"CQF\",\"CQFfirstCurrency\",sre.ClearspeakUtil.firstCurrency],[\"CQF\",\"CQFlastCurrency\",sre.ClearspeakUtil.lastCurrency]],rules:['Rule{collapsed{default{[t] \"collapsed\"; [n] . (engine:modality=summary,grammar:collapsed){self::*[@alternative]{not(contains(@grammar, \"collapsed\"))'.split(\"{\"),[\"Rule\",\"direct-speech\",\"default\",\"[t] @ext-speech\",\"self::*[@ext-speech]\"],[\"Rule\",\"stree\",\"default\",\"[n] ./*[1]\",\"self::stree\"],[\"Rule\",\"unknown\",\"default\",\"[n] text()\",\"self::unknown\"],'Rule;protected;default;[t] text();self::number;contains(@grammar, \"protected\")'.split(\";\"),\n[\"Rule\",\"omit-empty\",\"default\",'[p] (pause:\"short\")',\"self::empty\"],'Rule{font{default{[t] @font (grammar:localFont); [n] self::* (grammar:ignoreFont=@font,pause:\"short\"){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),'Rule{font-identifier{default{[t] @font (grammar:localFont); [n] self::* (grammar:ignoreFont=@font,pause:\"short\"){self::identifier{string-length(text())=1{@font{@font=\"normal\"{not(contains(@grammar, \"ignoreFont\")){@role!=\"unit\"'.split(\"{\"),'Rule;omit-font;default;[n] self::* (grammar:ignoreFont=@font);self::identifier;string-length(text())=1;@font;not(contains(@grammar, \"ignoreFont\"));@font=\"italic\"'.split(\";\"),\n'Rule{german-font{default{[t] \"German\"; [n] self::* (grammar:ignoreFont=@font){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"fraktur\"'.split(\"{\"),'Rule{german-font{default{[t] \"bold German\"; [n] self::* (grammar:ignoreFont=@font){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"bold-fraktur\"'.split(\"{\"),[\"Rule\",\"text\",\"default\",\"[n] text()\",\"self::text\"],'Rule;capital;default;[n] text() (pitch:0.6,grammar:ignoreCaps=\"cap\");self::identifier;@role=\"latinletter\" or @role=\"greekletter\" or @role=\"simple function\";CQFisCapital'.split(\";\"),\n'Rule;capital;Caps_SayCaps;[n] text();self::identifier;@role=\"latinletter\" or @role=\"greekletter\";CQFisCapital'.split(\";\"),'Rule{capital{Caps_SayCaps{[p] (pause:\"short\"); [n] text(){self::identifier{@role=\"latinletter\" or @role=\"greekletter\"{CQFisCapital{preceding-sibling::*[1]{not(name(preceding-sibling::*[1])=\"function\"){not(contains(@grammar, \"angle\"))'.split(\"{\"),'Rule;capital;Caps_SayCaps;[n] text() (pause:\"short\");self::identifier;@role=\"latinletter\" or @role=\"greekletter\";CQFisCapital;following-sibling::*[1]'.split(\";\"),\n'Rule{capital{Caps_SayCaps{[p] (pause:\"short\"); [n] text() (pause:\"short\"){self::identifier{@role=\"latinletter\" or @role=\"greekletter\"{CQFisCapital{preceding-sibling::*[1]{following-sibling::*[1]{not(name(preceding-sibling::*[1])=\"function\"){not(contains(@grammar, \"angle\"))'.split(\"{\"),'Rule,punctuation-lr,default,[p] (pause:\"short\"); [n] text() (pause:\"short\"),self::punctuation,@role=\"comma\"'.split(\",\"),'Rule;punctuation;default;[n] text();self::punctuation;@role=\"comma\";not(preceding-sibling::*[1]/children);not(following-sibling::*[1]/children)'.split(\";\"),\n'Rule,punctuation-l,default,[p] (pause:\"short\"); [n] text(),self::punctuation,@role=\"comma\",not(following-sibling::*[1]/children)'.split(\",\"),'Rule;punctuation-r;default;[n] text() (pause:\"short\");self::punctuation;@role=\"comma\";not(preceding-sibling::*[1]/children)'.split(\";\"),'Rule;ellipsis;Ellipses_AndSoOn;[t] \"and so on\";self::punctuation;@role=\"ellipsis\";not(following-sibling::*[1]);not(preceding-sibling::*[last()][@role=\"ellipsis\"])'.split(\";\"),'Rule;ellipsis;Ellipses_AndSoOn;[t] \"and so on up to\";self::punctuation;@role=\"ellipsis\";preceding-sibling::*[1];following-sibling::*[1]'.split(\";\"),\n'Rule,vbar-evaluated,default,[n] children/*[1]; [p] (pause:\"short\"); [t] \"evaluated at\"; [n] content/*[1]/children/*[2]; [p] (pause:\"short\"),self::punctuated,@role=\"endpunct\",content/*[1][@role=\"vbar\"],content/*[1][@embellished],name(content/*[1])=\"subscript\"'.split(\",\"),'Rule,vbar-evaluated,default,[n] children/*[1]; [p] (pause:\"short\"); [t] \"evaluated at\"; [n] content/*[1]/children/*[2]; [p] (pause:\"short\"); [t] \"minus the same expression evaluated at\"; [n] content/*[1]/children/*[1]/children/*[2]; [p] (pause:\"short\"),self::punctuated,@role=\"endpunct\",content/*[1][@role=\"vbar\"],content/*[1][@embellished],name(content/*[1])=\"superscript\",name(content/*[1]/children/*[1])=\"subscript\"'.split(\",\"),\n'Rule;vbar-such-that;VerticalLine_SuchThat;[t] \"such that\";self::punctuation;@role=\"vbar\";not(parent::*/parent::*[@embellished=\"punctuation\"])'.split(\";\"),'Rule;vbar-divides;default;[t] \"divides\";self::punctuation;@role=\"vbar\";not(parent::*/parent::*[@embellished=\"punctuation\"]);parent::*/parent::*[@role=\"sequence\"]'.split(\";\"),'Rule;vbar-divides;VerticalLine_Divides;[t] \"divides\";self::punctuation;@role=\"vbar\";not(parent::*/parent::*[@embellished=\"punctuation\"])'.split(\";\"),'Rule;vbar-given;VerticalLine_Given;[t] \"given\";self::punctuation;@role=\"vbar\";not(parent::*/parent::*[@embellished=\"punctuation\"])'.split(\";\"),\n'Rule;set-member;default;[t] \"in\";self::operator;@role=\"set extended\";text()=\"\\u2208\" or text()=\"\\u220a\"'.split(\";\"),[\"SpecializedRule\",\"set-member\",\"default\",\"SetMemberSymbol_Member\",'[t] \"member of\"'],[\"SpecializedRule\",\"set-member\",\"default\",\"SetMemberSymbol_Element\",'[t] \"element of\"'],[\"SpecializedRule\",\"set-member\",\"default\",\"SetMemberSymbol_Belongs\",'[t] \"belonging to\"'],'Rule;set-not-member;default;[t] \"not in\";self::operator;@role=\"set extended\";text()=\"\\u2209\"'.split(\";\"),[\"SpecializedRule\",\n\"set-not-member\",\"default\",\"SetMemberSymbol_Member\",'[t] \"not member of\"'],[\"SpecializedRule\",\"set-not-member\",\"default\",\"SetMemberSymbol_Element\",'[t] \"not element of\"'],[\"SpecializedRule\",\"set-not-member\",\"default\",\"SetMemberSymbol_Belongs\",'[t] \"not belonging to\"'],'Rule,prime,default,[n] children/*[1]; [n] children/*[2],self::superscript,children/*[2],children/*[2][@role=\"prime\"],self::*'.split(\",\"),'Rule,feet,default,[n] children/*[1]; [t] \"feet\",self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"number\",children/*[2][text()=\"\\u2032\"],not(preceding-sibling::*[@role=\"degree\"])'.split(\",\"),\n'Rule,foot,default,[n] children/*[1]; [t] \"foot\",self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"number\",children/*[2][text()=\"\\u2032\"],children/*[1][text()=\"1\"],not(preceding-sibling::*[@role=\"degree\"])'.split(\",\"),'Rule,inches,default,[n] children/*[1]; [t] \"inches\",self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"number\",children/*[2][text()=\"\\u2033\"],not(preceding-sibling::*[@role=\"degree\"])'.split(\",\"),'Rule,inch,default,[n] children/*[1]; [t] \"inch\",self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"number\",children/*[2][text()=\"\\u2033\"],children/*[1][text()=\"1\"],not(preceding-sibling::*[@role=\"degree\"])'.split(\",\"),\n'Rule,minutes,default,[p] (pause:short); [n] children/*[1]; [t] \"minutes\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2032\"]'.split(\",\"),'Rule,minute,default,[p] (pause:short); [n] children/*[1]; [t] \"minute\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2032\"],children/*[1][text()=\"1\"]'.split(\",\"),'Rule,seconds,default,[p] (pause:short); [n] children/*[1]; [t] \"seconds\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2033\"]'.split(\",\"),\n'Rule,second,default,[p] (pause:short); [n] children/*[1]; [t] \"second\",self::superscript,children/*[2][@role=\"prime\"],preceding-sibling::*[@role=\"degree\"],children/*[2][text()=\"\\u2033\"],children/*[1][text()=\"1\"]'.split(\",\"),'Rule,degrees-angle,Prime_Angle,[n] children/*[1]; [t] \"degrees\"; [p] (pause:short),self::punctuation,@role=\"degree\"'.split(\",\"),'Rule,degree-angle,Prime_Angle,[n] children/*[1]; [t] \"degree\"; [p] (pause:short),self::punctuation,@role=\"degree\",children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{minutes-angle{Prime_Angle{[n] children/*[1]; [t] \"minutes\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2032\"]'.split(\"{\"),'Rule,minute-angle,Prime_Angle,[n] children/*[1]; [t] \"minute\"; [p] (pause:short),self::superscript,children/*[2][@role=\"prime\"],children/*[2][text()=\"\\u2032\"],children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{seconds-angle{Prime_Angle{[n] children/*[1]; [t] \"seconds\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2033\"]'.split(\"{\"),'Rule,second-angle,Prime_Angle,[n] children/*[1]; [t] \"second\"; [p] (pause:short),self::superscript,children/*[2][@role=\"prime\"],children/*[2][text()=\"\\u2033\"],children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{feet-length{Prime_Length{[n] children/*[1]; [t] \"feet\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2032\"]'.split(\"{\"),'Rule,foot-length,Prime_Length,[n] children/*[1]; [t] \"foot\"; [p] (pause:short),self::superscript,children/*[2][@role=\"prime\"],children/*[2][text()=\"\\u2032\"],children/*[1][text()=\"1\"]'.split(\",\"),\n'Rule{inches-length{Prime_Length{[n] children/*[1]; [t] \"inches\"; [p] (pause:short){self::superscript{children/*[2][@role=\"prime\"]{name(children/*[1])=\"number\" or (children/*[1][@role=\"latinletter\"] and \"\"=translate(children/*[1]/text(),\"abcdefghijklmnopqrstuvwxyz\", \"\")){children/*[2][text()=\"\\u2033\"]'.split(\"{\"),'Rule,inch-length,Prime_Length,[n] children/*[1]; [t] \"inch\"; [p] (pause:short),self::superscript,children/*[2][@role=\"prime\"],children/*[2][text()=\"\\u2033\"],children/*[1][text()=\"1\"]'.split(\",\"),\n[\"Rule\",\"punctuated\",\"default\",\"[m] children/*\",\"self::punctuated\"],[\"Rule\",\"function\",\"default\",\"[n] text()\",\"self::function\"],'Rule{function-article{default{[t] \"the\"; [n] text(){self::function{@role=\"prefix function\"{contains(@grammar, \"addArticle\")'.split(\"{\"),[\"Rule\",\"appl\",\"default\",'[n] children/*[1]; [t] \"of\"; [n] children/*[2]; [p] (pause:\"short\")',\"self::appl\"],'Rule,appl-simple,default,[n] children/*[1]; [t] \"of\"; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"simple function\",name(children/*[2])=\"appl\"'.split(\",\"),\n'Rule,appl-simple,default,[n] children/*[1]; [t] \"of\"; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"simple function\",name(children/*[2])=\"fenced\",name(children/*[2]/children/*[1])=\"appl\"'.split(\",\"),[\"Rule\",\"appl\",\"Functions_None\",'[p] (pause:\"short\"); [n] children/*[1]; [t] \"times\"; [n] children/*[2]; [p] (pause:\"short\")',\"self::appl\"],'Rule,function-prefix,default,[n] children/*[1]; [n] children/*[2],self::appl,@role=\"prefix function\"'.split(\",\"),'Rule{binary-operation{ImpliedTimes_MoreImpliedTimes{[n] . (grammar:impliedTimes); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{parent::*/parent::infixop[@role=\"implicit\"]{following-sibling::*{not(contains(@grammar, \"impliedTimes\"))'.split(\"{\"),\n'Rule{function-prefix-simple-arg{default{[n] children/*[1]; [n] children/*[2]{self::appl{@role=\"prefix function\"{name(children/*[2])=\"fenced\"{contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"){name(children/*[2]/children/*[1])!=\"number\"{name(children/*[2]/children/*[1])!=\"identifier\"{name(children/*[2]/children/*[1])!=\"appl\"'.split(\"{\"),'Rule,function-prefix-embell,default,[p] (pause:\"short\"); [n] children/*[1]; [n] children/*[2]; [p] (pause:\"short\"); ,self::appl,@role=\"prefix function\",name(children/*[1])!=\"function\"'.split(\",\"),\n'Rule{function-prefix-fenced-or-frac-arg{default{[p] (pause:\"short\"); [n] children/*[1] (grammar:addArticle); [t] \"of\"; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{(name(children/*[2])=\"fenced\" and not(contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"))) or name(children/*[2])=\"fraction\" or (name(children/*[2])!=\"fenced\" and not(contains(children/*[2]/@annotation, \"clearspeak:simple\"))){self::*'.split(\"{\"),'Rule,function-prefix-subscript,default,[p] (pause:\"short\"); [n] children/*[1] (grammar:addArticle); [t] \"of\"; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"prefix function\",name(children/*[1])=\"subscript\",self::*'.split(\",\"),\n'Rule{function-ln{default{[n] children/*[1]; [n] children/*[2]{self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{not(following-sibling::*){not(contains(@grammar, \"NatLog\"))'.split(\"{\"),'Rule{function-ln{default{[n] children/*[1]; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{not(contains(@grammar, \"NatLog\"))'.split(\"{\"),'Rule{function-ln{default{[n] children/*[1]; [t] \"of\"; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{name(children/*[2])=\"fenced\"{not(contains(@grammar, \"NatLog\"))'.split(\"{\"),\n'Rule;function-ln;Log_LnAsNaturalLog;[n] . (grammar:NatLog);self::appl;@role=\"prefix function\";content/*[2][text()=\"ln\"];not(following-sibling::*);not(contains(@grammar, \"NatLog\"))'.split(\";\"),'Rule{function-ln{Log_LnAsNaturalLog{[n] . (grammar:NatLog); [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{content/*[2][text()=\"ln\"]{not(contains(@grammar, \"NatLog\"))'.split(\"{\"),'Rule{function-prefix-as-exp{default{[n] children/*[1]; [t] \"of\"; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(parent::*/parent::*)=\"superscript\"{not(following-sibling::*){(name(children/*[2])=\"fenced\" and not(contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"))) or name(children/*[2])=\"fraction\" or (name(children/*[2])!=\"fenced\" and not(contains(children/*[2]/@annotation, \"clearspeak:simple\")))'.split(\"{\"),\n'Rule,function-prefix-subscript-as-exp,default,[n] children/*[1]; [t] \"of\"; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"prefix function\",name(parent::*/parent::*)=\"superscript\",not(following-sibling::*),name(children/*[1])=\"subscript\"'.split(\",\"),'Rule,function-prefix-hyper,default,[p] (pause:\"short\"); [n] children/*[1]; [t] \"of\"; [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"prefix function\",CQFisHyperbolic'.split(\",\"),'Rule{function-prefix-inverse{default{[p] (pause:\"short\"); [t] \"the inverse\"; [n] children/*[1]/children/*[1]; [t] \"of\"; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),\n'Rule,appl-triginverse,Trig_TrigInverse,[p] (pause:\"short\"); [n] children/*[1]; [t] \"of\"; [n] children/*[2]; [p] (pause:\"short\"),self::appl,@role=\"prefix function\",name(children/*[1])=\"superscript\",name(children/*[1]/children/*[2])=\"prefixop\",children/*[1]/children/*[2][@role=\"negative\"],children/*[1]/children/*[2]/children/*[1][text()=\"1\"]'.split(\",\"),'Rule{function-prefix-arc-simple{Trig_ArcTrig{[p] (pause:\"short\"); [t] \"arc\"; [n] children/*[1]/children/*[1]; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),\n'Rule{function-prefix-arc-simple{Trig_ArcTrig{[p] (pause:\"short\"); [t] \"arc\"; [n] children/*[1]/children/*[1]; [p] (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{name(children/*[2])=\"fenced\"{children/*[2]/children/*[1][@role=\"prefix function\"]{contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"){not(contains(@grammar, \"functions_none\"))'.split(\"{\"),\n'Rule{function-prefix-arc{Trig_ArcTrig{[p] (pause:\"short\"); [t] \"arc\"; [n] children/*[1]/children/*[1]; [t] \"of\"; [n] children/*[2]; [p] (pause:\"short\"){self::appl{@role=\"prefix function\"{name(children/*[1])=\"superscript\"{name(children/*[1]/children/*[2])=\"prefixop\"{children/*[1]/children/*[2][@role=\"negative\"]{children/*[1]/children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\")){(name(children/*[2])=\"fenced\" and not(contains(children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"))) or (name(children/*[2])=\"fraction\" and children/*[2][@role!=\"vulgar\"])'.split(\"{\"),\n'Rule{function-inverse{default{[n] children/*[1]; [t] \"inverse\"{self::superscript{@role=\"prefix function\" or @role=\"simple function\"{name(children/*[2])=\"prefixop\"{children/*[2][@role=\"negative\"]{children/*[2]/children/*[1][text()=\"1\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),'Rule,superscript-prefix-function,default,[t] \"the\"; [n] children/*[2] (grammar:ordinal); [t] \"power of\"; [n] children/*[1],self::superscript,@role=\"prefix function\",name(children/*[2])=\"number\",children/*[2][@role=\"integer\"]'.split(\",\"),\n'Rule,superscript-prefix-function,default,[t] \"the\"; [n] children/*[2] (grammar:ordinal); [t] \"power of\"; [n] children/*[1],self::superscript,@role=\"prefix function\",name(children/*[2])=\"identifier\"'.split(\",\"),'Rule;function-inverse;Functions_None;[n] . (grammar:functions_none);self::superscript;@role=\"prefix function\" or @role=\"simple function\";name(children/*[2])=\"prefixop\";children/*[2][@role=\"negative\"];children/*[2]/children/*[1][text()=\"1\"];not(contains(@grammar, \"functions_none\"))'.split(\";\"),\n[\"Rule\",\"superscript\",\"default\",'[n] children/*[1]; [t] \"raised to the exponent\" (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"); [t] \"end exponent\" (pause:\"short\")',\"self::superscript\"],'Rule,superscript-simple-exponent,default,[n] children/*[1]; [t] \"raised to the\"; [n] children/*[2]; [t] \"power\" (pause:\"short\"),self::superscript,not(descendant::superscript)'.split(\",\"),'Rule,superscript-simple-exponent-end,default,[n] children/*[1]; [t] \"raised to the\"; [n] children/*[2]; [t] \"power\",self::superscript,not(descendant::superscript),not(following-sibling::*)'.split(\",\"),\n'Aliases;superscript-simple-exponent;self::superscript;children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"];name(children/superscript/children/*[1])=\"number\";contains(children/superscript/children/*[1]/@annotation, \"clearspeak:simple\")'.split(\";\"),'Aliases;superscript-simple-exponent;self::superscript;children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"];name(children/superscript/children/*[1])=\"fraction\";contains(children/superscript/children/*[1]/@annotation, \"clearspeak:simple\")'.split(\";\"),\n[\"Aliases\",\"superscript-simple-exponent\",\"self::superscript\",'children/superscript/children/*[2][text()=\"2\"] or children/superscript/children/*[2][text()=\"3\"]','name(children/superscript/children/*[1])=\"identifier\"'],'Aliases;superscript-simple-exponent;self::superscript;children/*[2][@role=\"implicit\"];count(children/*[2]/children/*)=2;contains(children/*[2]/children/*[1]/@annotation, \"simple\");name(children/*[2]/children/*[2])=\"superscript\";(name(children/*[2]/children/*[2]/children/*[1])=\"number\" and contains(children/*[2]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\")) or name(children/*[2]/children/*[2]/children/*[1])=\"identifier\";children/*[2]/children/*[2]/children/*[2][text()=\"2\"] or children/*[2]/children/*[2]/children/*[2][text()=\"3\"]'.split(\";\"),\n'Rule,superscript-ordinal,default,[n] children/*[1]; [t] \"to the\"; [n] children/*[2] (grammar:ordinal); [t] \"power\" (pause:\"short\"),self::superscript,name(children/*[2])=\"number\",children/*[2][@role=\"integer\"]'.split(\",\"),[\"Aliases\",\"superscript-ordinal\",\"self::superscript\",'name(children/*[2])=\"identifier\"','children/*[2][@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]'],'Rule,superscript-non-ordinal,default,[n] children/*[1]; [t] \"to the\"; [n] children/*[2]; [t] \"power\" (pause:\"short\"),self::superscript,children/*[2][@role=\"negative\"],name(children/*[2]/children/*[1])=\"number\",children/*[2]/children/*[1][@role=\"integer\"]'.split(\",\"),\n'Rule{superscript-simple-function{default{[t] \"the\"; [n] children/*[2] (grammar:ordinal); [t] \"power of\" (pause:\"short\"); [n] children/*[1]{self::superscript{name(children/*[1])=\"identifier\"{children/*[1][@role=\"simple function\"]{children/*[2][@role!=\"prime\"]{not(contains(@grammar, \"functions_none\"))'.split(\"{\"),'Rule;superscript-simple-function;Functions_None;[n] . (grammar:functions_none);self::superscript;name(children/*[1])=\"identifier\";children/*[1][@role=\"simple function\"];not(contains(@grammar, \"functions_none\"))'.split(\";\"),\n'Rule,superscript-ordinal,Exponent_Ordinal,[n] children/*[1]; [t] \"to the\"; [n] children/*[2] (grammar:ordinal); [p] (pause:\"short\"),self::superscript,name(children/*[2])=\"number\",children/*[2][@role=\"integer\"]'.split(\",\"),'Rule,superscript-ordinal,Exponent_Ordinal,[n] children/*[1]; [t] \"to the\"; [n] children/*[2]; [p] (pause:\"short\"),self::superscript,name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],name(children/*[2]/children/*[1])=\"number\",children/*[2]/children/*[1][@role=\"integer\"]'.split(\",\"),\n'Rule,superscript-ordinal,Exponent_Ordinal,[n] children/*[1]; [t] \"to the\"; [n] children/*[2] (grammar:ordinal); [p] (pause:\"short\"),self::superscript,name(children/*[2])=\"identifier\",children/*[2][@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]'.split(\",\"),'Rule,superscript-ordinal-default,Exponent_Ordinal,[n] children/*[1]; [t] \"raised to the exponent\" (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"); [t] \"end exponent\" (pause:\"short\"),self::superscript,children//superscript'.split(\",\"),\n'Rule,superscript-ordinal,Exponent_OrdinalPower,[n] children/*[1]; [t] \"to the\"; [n] children/*[2] (grammar:ordinal); [t] \"power\"; [p] (pause:\"short\"),self::superscript,name(children/*[2])=\"number\",children/*[2][@role=\"integer\"]'.split(\",\"),'Rule,superscript-ordinal,Exponent_OrdinalPower,[n] children/*[1]; [t] \"to the\"; [n] children/*[2]; [t] \"power\"; [p] (pause:\"short\"),self::superscript,name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],name(children/*[2]/children/*[1])=\"number\",children/*[2]/children/*[1][@role=\"integer\"]'.split(\",\"),\n'Rule,superscript-ordinal,Exponent_OrdinalPower,[n] children/*[1]; [t] \"to the\"; [n] children/*[2] (grammar:ordinal); [t] \"power\"; [p] (pause:\"short\"),self::superscript,name(children/*[2])=\"identifier\",children/*[2][@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]'.split(\",\"),'Rule,superscript-ordinal-default,Exponent_OrdinalPower,[n] children/*[1]; [t] \"raised to the exponent\" (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"); [t] \"end exponent\" (pause:\"short\"),self::superscript,children//superscript'.split(\",\"),\n[\"Rule\",\"superscript-power\",\"Exponent_AfterPower\",'[n] children/*[1]; [t] \"raised to the power\"; [n] children/*[2] (grammar:afterPower); [p] (pause:\"short\")',\"self::superscript\"],'Rule,superscript-power-default,Exponent_AfterPower,[n] children/*[1]; [t] \"raised to the exponent\" (pause:\"short\"); [n] children/*[2]; [p] (pause:\"short\"); [t] \"end exponent\" (pause:\"short\"),self::superscript,children//superscript'.split(\",\"),'Rule{exponent{default{[n] text() (join:\"-\"); [t] \"th\"{self::identifier{contains(@grammar, \"ordinal\")'.split(\"{\"),\n'Rule;exponent;default;[t] CSFordinalExponent;self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()!=\"0\"'.split(\";\"),'Rule;exponent;Exponent_Ordinal;[t] CSFwordOrdinal;self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()!=\"0\"'.split(\";\"),'Rule;exponent;Exponent_Ordinal;[t] \"zero\";self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()=\"0\"'.split(\";\"),'Rule;exponent;Exponent_OrdinalPower;[t] CSFwordOrdinal;self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()!=\"0\"'.split(\";\"),\n'Rule;exponent;Exponent_OrdinalPower;[t] \"zero\";self::number;@role=\"integer\";contains(@grammar, \"ordinal\");text()=\"0\"'.split(\";\"),'Rule,square,default,[n] children/*[1]; [t] \"squared\",self::superscript,@role!=\"unit\",children/*[2][text()=\"2\"],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),self::*'.split(\",\"),'Rule,cube,default,[n] children/*[1]; [t] \"cubed\",self::superscript,@role!=\"unit\",children/*[2][text()=\"3\"],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),self::*'.split(\",\"),\n'Rule;paren-simple;default;[n] children/*[1];self::fenced;@role=\"leftright\";contains(children/*[1]/@annotation, \"clearspeak:simple\");name(../..)!=\"superscript\" and name(../..)!=\"subscript\"'.split(\";\"),'Rule;paren-simple-exp;default;[n] children/*[1];self::fenced;@role=\"leftright\";name(../..)=\"superscript\";children/*[1][@role=\"integer\"] or children/*[1][@role=\"float\"] or (children/*[1][@role=\"vulgar\"] and contains(children/*[1]/@annotation, \"clearspeak:simple\")) or children/*[1][@role=\"latinletter\"] or children/*[1][@role=\"greekletter\"] or children/*[1][@role=\"otherletter\"]'.split(\";\"),\n'Rule;paren-simple-nested-func;default;[n] children/*[1];self::fenced;@role=\"leftright\";name(../*[1])=\"identifier\" or name(../*[1])=\"function\";parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"];children/*[1][@role=\"simple function\" or @role=\"prefix function\"];contains(children/*[1]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\") or name(children/*[1]/children/*[2]/children/*[1])=\"subscript\" or name(children/*[1]/children/*[2]/children/*[1])=\"superscript\" or children/*[1]/children/*[2]/children/*[1][@role=\"vulgar\"] '.split(\";\"),\n'Rule{paren-simple-nested-func-no-bracket{Functions_None{[n] children/*[1];{self::fenced{@role=\"leftright\"{name(../*[1])=\"identifier\" or name(../*[1])=\"function\"{parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"]{children/*[1][@role=\"simple function\" or @role=\"prefix function\"]{name(children/*[1]/children/*[1])=\"identifier\" or name(children/*[1]/children/*[1])=\"function\"{contains(children/*[1]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\"){name(children/*[1]/children/*[2]/children/*[1])=\"identifier\" or name(children/*[1]/children/*[2]/children/*[1])=\"number\"'.split(\"{\"),\n'Rule,fences-open-close,default,[p] (pause:\"short\"); [n] content/*[1] (grammar:spokenFence); [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2] (grammar:spokenFence); [p] (pause:\"short\"),self::fenced,@role=\"leftright\"'.split(\",\"),'Rule{paren-simple-nested-func{default{[p] (pause:\"short\"); [n] content/*[1]; [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2]; [p] (pause:\"short\"){self::fenced{@role=\"leftright\"{name(../*[1])=\"identifier\" or name(../*[1])=\"function\"{parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"]{not(contains(children/*[1]/@annotation, \"clearspeak:simple\"))'.split(\"{\"),\n'Rule{paren-simple-nested-func{Functions_None{[p] (pause:\"short\"); [n] content/*[1] (grammar:spokenFence); [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2] (grammar:spokenFence); [p] (pause:\"short\"){self::fenced{@role=\"leftright\"{name(../*[1])=\"identifier\" or name(../*[1])=\"function\"{parent::*/parent::*[@role=\"simple function\" or @role=\"prefix function\"]{children/*[1][@role=\"simple function\" or @role=\"prefix function\"]{contains(children/*[1]/children/*[2]/children/*[1]/@annotation, \"clearspeak:simple\") or name(children/*[1]/children/*[2]/children/*[1])=\"subscript\" or name(children/*[1]/children/*[2]/children/*[1])=\"superscript\" or children/*[1]/children/*[2]/children/*[1][@role=\"vulgar\"] '.split(\"{\"),\n[\"SpecializedRule\",\"fences-open-close\",\"default\",\"Paren_Speak\"],[\"Aliases\",\"fences-open-close\",\"self::fenced\",'@role=\"composed function\"'],[\"Rule\",\"fence-silent\",\"Paren_Silent\",'[p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\")',\"self::fenced\"],'Rule,fences-open-close,ImpliedTimes_None,[p] (pause:\"short\"); [n] content/*[1] (grammar:spokenFence); [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2] (grammar:spokenFence); [p] (pause:\"short\"),self::fenced,@role=\"leftright\",parent::*/parent::*[@role!=\"simple function\"],parent::*/parent::*[@role!=\"prefix function\"]'.split(\",\"),\n'Rule;fence-nesting;Paren_SpeakNestingLevel;[n] text() (grammar:insertNesting=CSFnestingDepth);self::fence;contains(@grammar, \"spokenFence\");CQFmatchingFences'.split(\";\"),[\"Rule\",\"fence-no-nesting\",\"Paren_SpeakNestingLevel\",\"[n] text()\",\"self::fence\"],'Rule,fences-points,Paren_CoordPoint,[t] \"the point with coordinates\"; [n] children/*[1],self::fenced,name(children/*[1])=\"punctuated\",children/*[1][@role=\"sequence\"]'.split(\",\"),'Rule{fences-interval{Paren_Interval{[t] \"the interval from\"; [n] children/*[1]/children/*[1]; [t] \"to\"; [n] children/*[1]/children/*[3]; [p] (pause:\"short\"); [n] . (grammar:interval){self::fenced{not(contains(@grammar, \"interval\")){name(children/*[1])=\"punctuated\"{children/*[1][@role=\"sequence\"]{count(./children/*[1]/content/*)=1{children/*[1]/content/*[1][@role=\"comma\"]'.split(\"{\"),\n'Rule{interval-open{Paren_Interval{[t] \"not including\"; [n] children/*[1]/children/*[1]; [t] \"or\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\")\"'.split(\"{\"),'Rule{interval-closed-open{Paren_Interval{[t] \"including\"; [n] children/*[1]/children/*[1]; [p] (pause:\"short\"); [t] \"but not including\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"[\"{content/*[2]/text()=\")\"'.split(\"{\"),\n'Rule{interval-open-closed{Paren_Interval{[t] \"not including\"; [n] children/*[1]/children/*[1]; [p] (pause:\"short\"); [t] \"but including\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\"]\"'.split(\"{\"),'Rule{interval-closed{Paren_Interval{[t] \"including\"; [n] children/*[1]/children/*[1]; [t] \"and\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"[\"{content/*[2]/text()=\"]\"'.split(\"{\"),\n'Rule{interval-open-inf-r{Paren_Interval{[t] \"not including\"; [n] children/*[1]/children/*[1]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\")\"{children/*[1]/children/*[3]/text()=\"\\u221e\" or (name(children/*[1]/children/*[3])=\"prefixop\" and children/*[1]/children/*[3]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),'Rule{interval-open-inf-l{Paren_Interval{[t] \"not including\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\")\"{children/*[1]/children/*[1]/text()=\"\\u221e\" or (name(children/*[1]/children/*[1])=\"prefixop\" and children/*[1]/children/*[1]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),\n'Rule;interval-open-inf-lr;Paren_Interval;;self::fenced;contains(@grammar, \"interval\");content/*[1]/text()=\"(\";content/*[2]/text()=\")\";children/*[1]/children/*[3]/text()=\"\\u221e\" or (name(children/*[1]/children/*[3])=\"prefixop\" and children/*[1]/children/*[3]/children/*[1]/text()=\"\\u221e\");children/*[1]/children/*[1]/text()=\"\\u221e\" or (name(children/*[1]/children/*[1])=\"prefixop\" and children/*[1]/children/*[1]/children/*[1]/text()=\"\\u221e\")'.split(\";\"),'Rule{interval-closed-open-inf{Paren_Interval{[t] \"including\"; [n] children/*[1]/children/*[1]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"[\"{content/*[2]/text()=\")\"{children/*[1]/children/*[3]/text()=\"\\u221e\" or (name(children/*[1]/children/*[3])=\"prefixop\" and children/*[1]/children/*[3]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),\n'Rule{interval-open-closed-inf{Paren_Interval{[t] \"including\"; [n] children/*[1]/children/*[3]{self::fenced{contains(@grammar, \"interval\"){content/*[1]/text()=\"(\"{content/*[2]/text()=\"]\"{children/*[1]/children/*[1]/text()=\"\\u221e\" or (name(children/*[1]/children/*[1])=\"prefixop\" and children/*[1]/children/*[1]/children/*[1]/text()=\"\\u221e\")'.split(\"{\"),'Rule,paren-nested-embellished-funcs,Functions_None,[p] (pause:\"short\"); [n] content/*[1]; [p] (pause:\"short\"); [n] children/*[1]; [p] (pause:\"short\"); [n] content/*[2]; [p] (pause:\"short\"),self::fenced,@role=\"leftright\",name(../..)=\"appl\",name(children/*[1]) = \"appl\",preceding-sibling::*/descendant-or-self::*[@role=\"subsup\"] or children/*[1]/descendant-or-self::*[@role=\"subsup\"]'.split(\",\"),\n'Rule;set-empty;default;[t] \"the empty set\";self::fenced;@role=\"set empty\"'.split(\";\"),'Rule,set-extended,default,[t] \"the set of all\"; [n] children/*[1]/children/*[1]; [t] \"such that\"; [n] children/*[1]/children/*[3],self::fenced,@role=\"set extended\"'.split(\",\"),'Rule,set-collection,default,[t] \"the set\"; [n] children/*[1],self::fenced,@role=\"set collection\"'.split(\",\"),[\"Aliases\",\"set-collection\",\"self::fenced\",'@role=\"set singleton\"'],'Rule,set-extended,Sets_woAll,[t] \"the set of\"; [n] children/*[1]/children/*[1]; [t] \"such that\"; [n] children/*[1]/children/*[3],self::fenced,@role=\"set extended\"'.split(\",\"),\n'Rule;set-collection;Sets_SilentBracket;[n] children/*[1];self::fenced;@role=\"set collection\"'.split(\";\"),[\"Rule\",\"subscript\",\"default\",'[p] (pause:short); [n] children/*[1]; [t] \"sub\"; [n] children/*[2]; [p] (pause:short)',\"self::subscript\"],'Rule,subscript-base,default,[n] children/*[1]; [t] \"base\"; [n] children/*[2],self::subscript,CQFisLogarithm'.split(\",\"),'Rule{subscript-index{default{[n] children/*[1]; [t] \"sub\"; [n] children/*[2]{self::subscript{contains(@grammar, \"simpleDet\")'.split(\"{\"),\n[\"Rule\",\"fraction\",\"default\",'[p] (pause:short); [t] \"the fraction with numerator\"; [n] children/*[1]; [p] (pause:short); [t] \"and denominator\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],'Rule,fraction,Functions_None,[p] (pause:short); [t] \"the fraction with numerator\"; [n] children/*[1]; [p] (pause:short); [t] \"and denominator\"; [n] children/*[2]; [p] (pause:short),self::fraction,name(children/*[1])=\"appl\" or name(children/*[2])=\"appl\"'.split(\",\"),'Rule{simple-fraction{default{[p] (pause:short); [n] children/*[1]; [t] \"over\"; [n] children/*[2]; [p] (pause:short){self::fraction{contains(children/*[1]/@annotation, \"clearspeak:simple\") or contains(children/*[1]/@annotation, \"clearspeak:unit\"){contains(children/*[2]/@annotation, \"clearspeak:simple\") or contains(children/*[2]/@annotation, \"clearspeak:unit\")'.split(\"{\"),\n'Rule,simple-vulgar-fraction,default,[p] (pause:short); [n] children/*[1]; [t] \"over\"; [n] children/*[2]; [p] (pause:short),self::fraction,@role=\"vulgar\"'.split(\",\"),'Rule,simple-text-fraction,default,[p] (pause:short); [n] children/*[1]; [t] \"over\"; [n] children/*[2]; [p] (pause:short),self::fraction,name(children/*[1])=\"text\",name(children/*[2])=\"text\"'.split(\",\"),'Rule,simple-text-fraction,default,[p] (pause:short); [n] children/*[1]; [t] \"over\"; [n] children/*[2]; [p] (pause:short),self::fraction,name(children/*[1])=\"infixop\",children/*[1][@role=\"unit\"],name(children/*[2])=\"text\"'.split(\",\"),\n'Rule;vulgar-fraction;default;[t] CSFvulgarFraction;self::fraction;@role=\"vulgar\";CQFvulgarFractionSmall'.split(\";\"),[\"Rule\",\"fraction\",\"Fraction_Over\",'[p] (pause:short); [n] children/*[1]; [t] \"over\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_OverEndFrac\",'[p] (pause:short); [n] children/*[1]; [t] \"over\"; [n] children/*[2]; [p] (pause:short); [t] \"end fraction\"; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_FracOver\",'[p] (pause:short); [t] \"the fraction\"; [n] children/*[1]; [t] \"over\"; [n] children/*[2]; [p] (pause:short)',\n\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_Per\",'[p] (pause:short); [n] children/*[1]; [t] \"per\"; [n] children/*[2]; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_GeneralEndFrac\",'[p] (pause:short); [t] \"the fraction with numerator\"; [n] children/*[1]; [p] (pause:short); [t] \"and denominator\"; [n] children/*[2]; [p] (pause:short); [t] \"end fraction\"; [p] (pause:short)',\"self::fraction\"],[\"Rule\",\"fraction\",\"Fraction_General\",'[p] (pause:short); [t] \"the fraction with numerator\"; [n] children/*[1]; [p] (pause:short); [t] \"and denominator\"; [n] children/*[2]; [p] (pause:short)',\n\"self::fraction\"],'Rule;simple-vulgar-fraction;Fraction_Ordinal;[t] CSFvulgarFraction;self::fraction;@role=\"vulgar\"'.split(\";\"),'Rule{fraction{Fraction_EndFrac{[p] (pause:short); [n] . (grammar:endfrac); [t] \"end fraction\"; [p] (pause:short){self::fraction{not(contains(@grammar, \"endfrac\")){not(contains(children/*[1]/@annotation, \"clearspeak:unit\")){not(contains(children/*[2]/@annotation, \"clearspeak:unit\"))'.split(\"{\"),'Rule{vulgar-fraction{Fraction_EndFrac{[p] (pause:short); [n] children/*[1]; [t] \"over\"; [n] children/*[2]; [p] (pause:short){self::fraction{name(children/*[1])=\"fraction\"{name(children/*[2])=\"fraction\"{contains(children/*[1]/@annotation, \"clearspeak:simple\"){contains(children/*[2]/@annotation, \"clearspeak:simple\")'.split(\"{\"),\n'Rule;simple-vulgar-fraction;Fraction_EndFrac;[t] CSFvulgarFraction;self::fraction;@role=\"vulgar\";contains(@annotation, \"clearspeak:simple\");self::*'.split(\";\"),[\"Rule\",\"sqrt\",\"default\",'[t] \"the square root of\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short)',\"self::sqrt\"],'Rule,sqrt-nested,default,[p] (pause: \"short\"); [t] \"the square root of\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),\n'Rule,negative-sqrt,default,[t] \"the negative square root of\"; [n] children/*[1]/children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::prefixop,@role=\"negative\",name(children/*[1])=\"sqrt\"'.split(\",\"),'Rule,negative-sqrt,default,[p] (pause: \"short\"); [t] \"the negative square root of\"; [n] children/*[1]/children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::prefixop,@role=\"negative\",name(children/*[1])=\"sqrt\",not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),'Rule,sqrt-plus-minus,Roots_PosNegSqRoot,[t] \"the positive square root of\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),\n'Rule,sqrt-nested-plus-minus,Roots_PosNegSqRoot,[p] (pause: \"short\"); [t] \"the positive square root of\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,not(preceding-sibling::*),ancestor::sqrt|ancestor::root,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),'Rule,sqrt-plus-minus,Roots_PosNegSqRootEnd,[t] \"the positive square root of\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),\n'Rule,sqrt-nested-plus-minus,Roots_PosNegSqRootEnd,[p] (pause: \"short\"); [t] \"the positive square root of\"; [n] children/*[1] (grammar:EndRoot=false); [p] (pause:short),self::sqrt,not(preceding-sibling::*),ancestor::sqrt|ancestor::root,parent::stree or not(parent::*/parent::infixop[@role=\"addition\"]) or (parent::*/parent::*[1]/text()!=\"\\u00b1\" and parent::*/parent::*/text()!=\"\\u2213\")'.split(\",\"),'Rule{sqrt-endroot{Roots_RootEnd{[n] . (grammar:EndRoot); [t] \"end root\"; [p] (pause:short){self::sqrt{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),\n'Rule{negative-sqrt-endroot{Roots_RootEnd{[n] . (grammar:EndRoot); [t] \"end root\"; [p] (pause:short){self::prefixop{@role=\"negative\"{name(children/*[1])=\"sqrt\"{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),'Rule{sqrt-endroot{Roots_PosNegSqRootEnd{[n] . (grammar:EndRoot); [t] \"end root\"; [p] (pause:short){self::sqrt{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),'Rule{negative-sqrt-endroot{Roots_PosNegSqRootEnd{[n] . (grammar:EndRoot); [t] \"end root\"; [p] (pause:short){self::prefixop{@role=\"negative\"{name(children/*[1])=\"sqrt\"{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),\n'Rule,cube,default,[t] \"the cube root of\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short),self::root,children/*[1][text()=\"3\"]'.split(\",\"),'Rule,cube-nested,default,[p] (pause:short); [t] \"the cube root of\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short),self::root,children/*[1][text()=\"3\"],not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),[\"Rule\",\"root\",\"default\",'[t] \"the\"; [n] children/*[1] (grammar:ordinal); [t] \"root of\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short)',\n\"self::root\"],'Rule,root-nested,default,[p] (pause:short); [t] \"the\"; [n] children/*[1] (grammar:ordinal); [t] \"root of\"; [n] children/*[2] (grammar:EndRoot=false); [p] (pause:short),self::root,not(preceding-sibling::*),ancestor::sqrt|ancestor::root'.split(\",\"),'Rule{root-endroot{Roots_RootEnd{[n] . (grammar:EndRoot); [t] \"end root\"; [p] (pause:short){self::root{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),'Rule{root-endroot{Roots_PosNegSqRootEnd{[n] . (grammar:EndRoot); [t] \"end root\"; [p] (pause:short){self::root{not(contains(@grammar, \"EndRoot\"))'.split(\"{\"),\n'Rule,negative,default,[t] \"negative\"; [n] children/*[1],self::prefixop,@role=\"negative\"'.split(\",\"),'Rule,positive,default,[t] \"positive\"; [n] children/*[1],self::prefixop,@role=\"positive\"'.split(\",\"),'Rule,angle-measure,default,[t] \"the measure of\"; [n] content/*[1]; [n] children/*[2] (grammar:angle),self::infixop,content/*[1]/text()=\"\\u2220\",children/*[1][text()=\"m\"]'.split(\",\"),[\"Rule\",\"prefix\",\"default\",\"[m] content/* (grammar:prefix); [n] children/*[1]\",\"self::prefixop\"],[\"Rule\",\"postfix\",\"default\",\n\"[n] children/*[1]; [m] content/* (grammar:postfix)\",\"self::postfixop\"],'Rule{set-prefix-operators{default{[t] \"the\"; [n] self::* (grammar:!prefix); [t] \"of\"{self::*{contains(@grammar,\"prefix\"){descendant-or-self::*/text()=\"\\u2229\" or descendant-or-self::*/text()=\"\\u222a\"{self::*{self::*{self::*'.split(\"{\"),[\"Rule\",\"binary-operation\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator);\",\"self::infixop\"],'Rule,binary-operation,ImpliedTimes_MoreImpliedTimes,[m] children/* (sepFunc:CTXFcontentIterator);,self::infixop,@role=\"implicit\"'.split(\",\"),\n'Rule,binary-operation-pause,default,[p] (pause:short); [m] children/* (sepFunc:CTXFcontentIterator);,self::infixop,@role=\"implicit\",name(children/*[1])=\"appl\"'.split(\",\"),'Rule,binary-operation-pause,default,[m] children/* (sepFunc:CTXFcontentIterator); [p] (pause:short),self::infixop,@role=\"implicit\",name(children/*[last()])=\"appl\"'.split(\",\"),'Rule,binary-operation-pause,default,[p] (pause:short); [m] children/* (sepFunc:CTXFcontentIterator); [p] (pause:short),self::infixop,@role=\"implicit\",name(children/*[1])=\"appl\",name(children/*[last()])=\"appl\"'.split(\",\"),\n'Rule;implicit-times;default;[p] (pause:short);self::operator;@role=\"multiplication\";text()=\"\\u2062\"'.split(\";\"),'Rule implicit-times default  self::operator @role=\"multiplication\" text()=\"\\u2062\" CQFsimpleArguments'.split(\" \"),'Rule;implicit-times;default;[n] text();self::operator;@role=\"multiplication\";text()=\"\\u2062\";CQFfencedArguments'.split(\";\"),'Rule;implicit-times;ImpliedTimes_MoreImpliedTimes;[n] text();self::operator;@role=\"multiplication\";text()=\"\\u2062\"'.split(\";\"),'Rule implicit-times ImpliedTimes_None  self::operator @role=\"multiplication\" text()=\"\\u2062\"'.split(\" \"),\n'Rule{binary-operation-simple{default{[m] children/* (rate:\"0.5\"); [p] (pause:short){self::infixop{@role=\"implicit\"{contains(@annotation, \"clearspeak:simple\"){not(contains(@grammar, \"inFrac\"))'.split(\"{\"),'Rule;simple-in-fraction;default;[n] . (rate:\"0.5\",grammar:inFrac);self::*;contains(@annotation, \"clearspeak:simple\");not(contains(@grammar, \"inFrac\"));name(.)!=\"identifier\";name(.)!=\"function\";name(.)!=\"number\";name(parent::*/parent::*)=\"fraction\";not(preceding-sibling::*)'.split(\";\"),'Rule;operators-after-power;Exponent_AfterPower;[m] children/* (rate:\"0.5\");self::infixop;@role=\"implicit\";contains(@grammar, \"afterPower\")'.split(\";\"),\n[\"Rule\",\"relseq\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::relseq\"],[\"Rule\",\"multrel\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::multirel\"],'Rule;natural-numbers;default;[t] \"the natural numbers\";self::identifier;text()=\"\\u2115\" or (text()=\"N\" and @font=\"double-struck\");self::*;self::*;self::*'.split(\";\"),'Rule;integers;default;[t] \"the integers\";self::identifier;text()=\"\\u2124\" or (text()=\"Z\" and @font=\"double-struck\");self::*;self::*;self::*'.split(\";\"),\n'Rule;rational-numbers;default;[t] \"the rational numbers\";self::identifier;text()=\"\\u211a\" or (text()=\"Q\" and @font=\"double-struck\");self::*;self::*;self::*'.split(\";\"),'Rule;real-numbers;default;[t] \"the real numbers\";self::identifier;text()=\"\\u211d\" or (text()=\"R\" and @font=\"double-struck\");self::*;self::*;self::*'.split(\";\"),'Rule;complex-numbers;default;[t] \"the complex numbers\";self::identifier;text()=\"\\u2102\" or (text()=\"C\" and @font=\"double-struck\");self::*;self::*;self::*'.split(\";\"),'Rule,natural-numbers-super,default,[t] \"n\" (join: \"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u2115\" or (children/*[1]/text()=\"N\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*'.split(\",\"),\n'Rule,integers-super,default,[t] \"z\" (join: \"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u2124\" or (children/*[1]/text()=\"Z\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*'.split(\",\"),'Rule,rational-numbers-super,default,[t] \"q\" (join: \"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u211a\" or (children/*[1]/text()=\"Q\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*'.split(\",\"),'Rule,real-numbers-super,default,[t] \"r\" (join:\"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u211d\" or (children/*[1]/text()=\"R\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*'.split(\",\"),\n'Rule,complex-numbers-super,default,[t] \"c\" (join:\"-\"); [n] children/*[2] (grammar:numbers2alpha),self::superscript,children/*[1]/text()=\"\\u2102\" or (children/*[1]/text()=\"C\" and children/*[1]/@font=\"double-struck\"),self::*,self::*,self::*'.split(\",\"),'Rule;natural-numbers-with-zero;default;[t] \"the natural numbers with zero\";self::subscript;children/*[1]/text()=\"\\u2115\" or (children/*[1]/text()=\"N\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"0\"'.split(\";\"),'Rule;positive-integers;default;[t] \"the positive integers\";self::superscript;children/*[1]/text()=\"\\u2124\" or (children/*[1]/text()=\"Z\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"+\";self::*;self::*;self::*'.split(\";\"),\n'Rule;positive-integers;default;[t] \"the negative integers\";self::superscript;children/*[1]/text()=\"\\u2124\" or (children/*[1]/text()=\"Z\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"-\";self::*;self::*;self::*'.split(\";\"),'Rule;positive-rational-numbers;default;[t] \"the positive rational numbers\";self::superscript;children/*[1]/text()=\"\\u211a\" or (children/*[1]/text()=\"Q\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"+\";self::*;self::*;self::*'.split(\";\"),'Rule;negative-rational-numbers;default;[t] \"the negative rational numbers\";self::superscript;children/*[1]/text()=\"\\u211a\" or (children/*[1]/text()=\"Q\" and children/*[1]/@font=\"double-struck\");children/*[2]/text()=\"-\";self::*;self::*;self::*'.split(\";\"),\n'Rule,fences-neutral,default,[p] (pause:short); [t] \"the absolute value of\"; [n] children/*[1]; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),'Rule,fences-neutral,AbsoluteValue_AbsEnd,[p] (pause:short); [t] \"the absolute value of\"; [n] children/*[1]; [p] (pause: short); [t] \"end absolute value\"; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),\n'Rule,fences-neutral,AbsoluteValue_Cardinality,[p] (pause:short); [t] \"the cardinality of\"; [n] children/*[1]; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),'Rule,fences-neutral,AbsoluteValue_Determinant,[p] (pause:short); [t] \"the determinant of\"; [n] children/*[1]; [p] (pause: short),self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),\n[\"Rule\",\"matrix\",\"default\",'[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"matrix\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Row-:\"); [p] (pause:long)',\"self::matrix\"],'Rule{matrix-simple{default{[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"matrix\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Row-:\",grammar:simpleDet); [p] (pause:long){self::matrix{count(children/*)<4{count(children/*[1]/children/*)<4{CQFcellsSimple'.split(\"{\"),\n'Rule,matrix-trivial,default,[t] \"the 1 by 1 matrix with entry\"; [n] children/*[1]; [p] (pause:long),self::vector,@role=\"squarematrix\"'.split(\",\"),'Rule{determinant{default{[t] \"the determinant of the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"matrix\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Row-:\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"determinant\"{count(children/*)<4{CQFcellsSimple'.split(\"{\"),'Rule{determinant-simple{default{[t] \"the determinant of the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"matrix\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Row-:\"); [p] (pause:long){self::matrix{@role=\"determinant\"'.split(\"{\"),\n[\"Rule\",\"matrix-vector\",\"default\",'[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"column matrix\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Row-:\",grammar:simpleDet); [p] (pause:long)',\"self::vector\"],[\"SpecializedRule\",\"matrix-vector\",\"default\",\"Matrix_SpeakColNum\"],'Rule{matrix-vector-simple{default{[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"column matrix\"; [p] (pause:long); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::vector{count(children/*)<4{CQFcellsSimple{@role!=\"squarematrix\"'.split(\"{\"),\n[\"Rule\",\"matrix-vector-simple\",\"Matrix_SilentColNum\",'[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"column matrix\"; [p] (pause:long); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long)',\"self::vector\"],'Rule{matrix-row-vector{default{[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"row matrix\"; [p] (pause:long); [m] children/*[1]/children/* (ctxtFunc:CTXFnodeCounter,context:\"Column-:\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"'.split(\"{\"),\n[\"SpecializedRule\",\"matrix-row-vector\",\"default\",\"Matrix_SpeakColNum\"],'Rule{matrix-row-vector-simple{default{[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"row matrix\"; [p] (pause:long); [m] children/*[1]/children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"{count(children/*[1]/children/*)<4{CQFcellsSimple'.split(\"{\"),'Rule{matrix-row-vector-simple{Matrix_SilentColNum{[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"row matrix\"; [p] (pause:long); [m] children/*[1]/children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"'.split(\"{\"),\n'Rule;matrix-row-simple;default;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\");self::row;contains(@grammar, \"simpleDet\")'.split(\";\"),[\"Rule\",\"matrix-row-simple\",\"Matrix_SilentColNum\",'[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\")',\"self::row\"],'Rule;line-simple;default;[n] children/*[1];self::line;contains(@grammar, \"simpleDet\")'.split(\";\"),[\"Rule\",\"matrix-row\",\"default\",'[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Column-,- \",sepFunc:CTXFpauseSeparator,separator:\"medium\"); [p] (pause:long)',\n\"self::row\"],[\"SpecializedRule\",\"matrix-row\",\"default\",\"Matrix_SpeakColNum\"],[\"Rule\",\"matrix-cell\",\"default\",\"[n] children/*[1]\",\"self::cell\"],'Rule{matrix-end-matrix{Matrix_EndMatrix{[n] . (grammar:EndMatrix); [t] \"end matrix\"{self::matrix{not(contains(@grammar, \"EndMatrix\"))'.split(\"{\"),'Rule{matrix-end-vector{Matrix_EndMatrix{[n] . (grammar:EndMatrix); [t] \"end matrix\"{self::vector{not(contains(@grammar, \"EndMatrix\"))'.split(\"{\"),'Rule{matrix-end-determinant{Matrix_EndMatrix{[n] . (grammar:EndMatrix); [t] \"end determinant\"{self::matrix{@role=\"determinant\"{not(contains(@grammar, \"EndMatrix\"))'.split(\"{\"),\n[\"Rule\",\"vector\",\"Matrix_Vector\",'[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"column vector\"; [p] (pause:long); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Row-:\",grammar:simpleDet); [p] (pause:long)',\"self::vector\"],[\"SpecializedRule\",\"vector\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{vector-simple{Matrix_Vector{[t] \"the\"; [t] count(children/*);  [t] \"by\"; [t] count(children/*[1]/children/*); [t] \"column vector\"; [p] (pause:long); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::vector{count(children/*)<4{CQFcellsSimple'.split(\"{\"),\n[\"SpecializedRule\",\"vector-simple\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{row-vector{Matrix_Vector{[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"row vector\"; [p] (pause:long); [m] children/*[1]/children/* (ctxtFunc:CTXFnodeCounter,context:\"Column-:\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"'.split(\"{\"),[\"SpecializedRule\",\"row-vector\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{row-vector-simple{Matrix_Vector{[t] \"the\"; [t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"row vector\"; [p] (pause:long); [m] children/*[1]/children/* (sepFunc:CTXFpauseSeparator,separator:\"short\",grammar:simpleDet); [p] (pause:long){self::matrix{@role=\"rowvector\"{count(children/*[1]/children/*)<4{CQFcellsSimple'.split(\"{\"),\n[\"SpecializedRule\",\"row-vector-simple\",\"Matrix_Vector\",\"Matrix_EndVector\"],'Rule{vector-end-matrix{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"end matrix\"{self::matrix{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),'Rule{vector-end-vector{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"end vector\"{self::vector{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),'Rule{vector-end-vector{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"end vector\"{self::matrix{@role=\"rowvector\"{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),\n'Rule{vector-end-determinant{Matrix_EndVector{[n] . (grammar:EndMatrix); [t] \"end determinant\"{self::matrix{@role=\"determinant\"{not(contains(@grammar, \"EndMatrix\")){self::*'.split(\"{\"),'Rule,binomial,Matrix_Combinatoric,[n] children/*[1]/children/*[1]; [t] \"choose\"; [n] children/*[2]/children/*[1]; ,self::vector,@role=\"binomial\"'.split(\",\"),'Rule{lines-summary{default{[p] (pause:short); [t] count(children/*); [t] \"lines\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\")){self::*'.split(\"{\"),\n'Rule;lines-summary;MultiLineOverview_None;[n] . (grammar:layoutSummary);self::multiline;not(contains(@grammar, \"layoutSummary\"));self::*'.split(\";\"),[\"Aliases\",\"lines-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],'Rule{cases-summary{default{[p] (pause:short); [t] count(children/*); [t] \"cases\";  [n] . (grammar:layoutSummary){self::cases{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),'Rule;cases-summary;MultiLineOverview_None;[n] . (grammar:layoutSummary);self::cases;not(contains(@grammar, \"layoutSummary\"));self::*'.split(\";\"),\n[\"Rule\",\"lines\",\"default\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Line-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\"self::table\"],[\"Aliases\",\"lines\",\"self::multiline\"],[\"Rule\",\"line\",\"default\",\"[n] children/*[1]\",\"self::line\"],'Rule;row-medium;default;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"medium\");self::row;@role=\"table\"'.split(\";\"),[\"Aliases\",\"row-medium\",\"self::row\",'@role=\"cases\"'],'Rule;row-long;MultiLinePausesBetweenColumns_Long;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"long\");self::row;@role=\"table\"'.split(\";\"),\n[\"Aliases\",\"row-long\",\"self::row\",'@role=\"cases\"'],'Rule;row-short;MultiLinePausesBetweenColumns_Short;[m] children/* (sepFunc:CTXFpauseSeparator,separator:\"short\");self::row;@role=\"table\"'.split(\";\"),[\"Aliases\",\"row-short\",\"self::row\",'@role=\"cases\"'],'Rule;blank-cell;default;[t] \"blank\";self::cell;count(children/*)=0'.split(\";\"),'Rule;blank-empty;default;[t] \"blank\";self::empty;count(../*)=1;name(../..)=\"cell\" or name(../..)=\"line\"'.split(\";\"),[\"Rule\",\"cases\",\"default\",'[p] (pause:short);  [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Case-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::cases\"],'Rule{lines-cases-summary{MultiLineLabel_Case{[p] (pause:short); [t] count(children/*); [t] \"cases\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-cases-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-cases\",\"MultiLineLabel_Case\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Case-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\"self::table\"],\n[\"Aliases\",\"lines-cases\",\"self::multiline\"],'Rule{lines-equations-summary{MultiLineLabel_Equation{[p] (pause:short); [t] count(children/*); [t] \"equations\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-equations-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-equations\",\"MultiLineLabel_Equation\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Equation-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-equations\",\"self::multiline\"],'Rule{lines-steps-summary{MultiLineLabel_Step{[p] (pause:short); [t] count(children/*); [t] \"steps\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-steps-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-steps\",\"MultiLineLabel_Step\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Step-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-steps\",\"self::multiline\"],'Rule{lines-rows-summary{MultiLineLabel_Row{[p] (pause:short); [t] count(children/*); [t] \"rows\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-rows-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-rows\",\"MultiLineLabel_Row\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Row-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-rows\",\"self::multiline\"],'Rule{lines-constraints-summary{MultiLineLabel_Constraint{[p] (pause:short); [t] count(children/*); [t] \"constraints\";  [n] . (grammar:layoutSummary){self::multiline{not(contains(@grammar, \"layoutSummary\"))'.split(\"{\"),[\"Aliases\",\"lines-constraints-summary\",\"self::table\",'not(contains(@grammar, \"layoutSummary\"))'],[\"Rule\",\"lines-constraints\",\"MultiLineLabel_Constraint\",'[p] (pause:short); [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"Constraint-:\",sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long)',\n\"self::table\"],[\"Aliases\",\"lines-constraints\",\"self::multiline\"],'Rule{lines-none{MultiLineLabel_None{[p] (pause:short); [m] children/* (sepFunc:CTXFpauseSeparator,separator:\"long\"); [p] (pause:long){self::table{contains(@grammar, \"layoutSummary\")'.split(\"{\"),[\"Aliases\",\"lines-none\",\"self::multiline\",'contains(@grammar, \"layoutSummary\")'],[\"Aliases\",\"lines-none\",\"self::cases\",'contains(@grammar, \"layoutSummary\")'],[\"Rule\",\"bigop\",\"default\",'[t] \"the\"; [n] children/*[1]; [t] \"of\"; [n] children/*[2]; [p] (pause:short)',\n\"self::bigop\"],[\"Rule\",\"limboth\",\"default\",'[n] children/*[1]; [t] \"from\"; [n] children/*[2];[t] \"to\"; [n] children/*[3];',\"self::limboth\"],[\"Rule\",\"limlower\",\"default\",'[n] children/*[1]; [t] \"over\"; [n] children/*[2]; [p] (pause:short)',\"self::limlower\"],[\"Rule\",\"limupper\",\"default\",'[n] children/*[1]; [t] \"under\"; [n] children/*[2]; [p] (pause:short)',\"self::limupper\"],[\"Rule\",\"integral\",\"default\",'[t] \"the\"; [n] children/*[1]; [t] \"of\"; [n] children/*[2]; [p] (pause:short)',\"self::integral\"],\n[\"Rule\",\"overscript\",\"default\",'[n] children/*[1]; [t] \"under\"; [n] children/*[2]; [p] (pause:short)',\"self::overscore\"],'Rule,overscript,default,[n] children/*[1]; [n] children/*[2];,self::overscore,children/*[2][@role=\"overaccent\"]'.split(\",\"),'Rule,overscript-limits,default,[n] children/*[1]; [t] \"to\"; [n] children/*[2],self::overscore,children/*[2][@role!=\"overaccent\"],name(children/*[1])=\"underscore\",children/*[1]/children/*[2][@role!=\"underaccent\"]'.split(\",\"),[\"Rule\",\"underscript\",\"default\",\n'[n] children/*[1]; [t] \"over\"; [n] children/*[2]; [p] (pause:short)',\"self::underscore\"],'Rule,underscript-limits,default,[n] children/*[1]; [t] \"from\"; [n] children/*[2],self::underscore,@role=\"underover\",children/*[2][@role!=\"underaccent\"]'.split(\",\"),[\"Rule\",\"number\",\"default\",\"[n] text()\",\"self::number\"],'Rule,mixed-number,default,[n] children/*[1]; [t] \"and\"; [n] children/*[2]; ,self::number,@role=\"mixed\"'.split(\",\"),'Rule{number-with-chars{default{[t] \"number\"; [m] CQFspaceoutNumber (grammar:protected){self::number{@role=\"othernumber\"{\"\" != translate(text(), \"0123456789.,\", \"\"){not(contains(@grammar, \"protected\"))'.split(\"{\"),\n'Rule,decimal-period,default,[t] \"the repeating decimal\"; [n] children/*[1] (grammar:spaceout); [t] \"point followed by repeating digits\";  [n] children/*[3]/children/*[1] (grammar:spaceout),self::punctuated,@role=\"sequence\",count(./content/*)=1,./content/*[1][@role=\"fullstop\"],name(children/*[1])=\"number\",children/*[1][@role=\"integer\"],name(children/*[3])=\"overscore\",children/*[3][@role=\"integer\"],children/*[3]/children/*[2][@role=\"overaccent\"],children/*[3]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),\n'Rule,decimal-period,default,[t] \"the repeating decimal\"; [n] children/*[1] (grammar:spaceout); [t] \"followed by repeating digits\";  [n] children/*[2]/children/*[1] (grammar:spaceout);,self::infixop,@role=\"implicit\",count(./children/*)=2,name(children/*[1])=\"number\",children/*[1][@role=\"float\"],name(children/*[2])=\"overscore\",children/*[2][@role=\"integer\"],children/*[2]/children/*[2][@role=\"overaccent\"],children/*[2]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),\n'Rule,decimal-period-singular,default,[t] \"the repeating decimal\"; [n] children/*[1] (grammar:spaceout); [t] \"point followed by repeating digit\";  [n] children/*[3]/children/*[1] (grammar:spaceout),self::punctuated,@role=\"sequence\",count(./content/*)=1,./content/*[1][@role=\"fullstop\"],name(children/*[1])=\"number\",children/*[1][@role=\"integer\"],name(children/*[3])=\"overscore\",children/*[3][@role=\"integer\"],children/*[3]/children/*[2][@role=\"overaccent\"],children/*[3]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"],string-length(./children/*[3]/children/*[1]/text())=1'.split(\",\"),\n'Rule,decimal-period-singular,default,[t] \"the repeating decimal\"; [n] children/*[1] (grammar:spaceout); [t] \"followed by repeating digit\";  [n] children/*[2]/children/*[1] (grammar:spaceout);,self::infixop,@role=\"implicit\",count(./children/*)=2,name(children/*[1])=\"number\",children/*[1][@role=\"float\"],name(children/*[2])=\"overscore\",children/*[2][@role=\"integer\"],children/*[2]/children/*[2][@role=\"overaccent\"],children/*[2]/children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"],string-length(./children/*[2]/children/*[1]/text())=1'.split(\",\"),\n'Rule;number-with-spaces;default;[m] CQFspaceoutNumber (grammar:!spaceout:number);self::number;contains(@grammar, \"spaceout\")'.split(\";\"),'Rule;decimal-point;default;[t] \"point\";self::punctuation;@role=\"fullstop\";contains(@grammar,\"number\")'.split(\";\"),'Rule,line-segment,default,[t] \"the line segment\"; [n] children/*[1]/children/*[1]; [n] children/*[1]/children/*[2]; [p] (pause:short),self::overscore,@role=\"implicit\",children/*[2][@role=\"overaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"],name(children/*[1])=\"infixop\",count(./children/*[1]/children/*)=2'.split(\",\"),\n'Rule,conjugate,Bar_Conjugate,[t] \"the complex conjugate of\"; [n] children/*[1],self::overscore,children/*[2][@role=\"overaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),'Rule;defined-by;default;[t] \"is defined to be\" (pause:short);self::overscore;@role=\"equality\";@embellished=\"relation\";name(children/*[2])=\"text\";children/*[2][text()]=\"def\"'.split(\";\"),'Rule,adorned-sign,default,[n] children/*[1] ; [t] \"sign with\"; [n] children/*[2]; [t] \"over it\",self::overscore,@embellished,name(children/*[1])=\"operator\" or name(children/*[1])=\"relation\"'.split(\",\"),\n'Rule;factorial;default;[t] \"factorial\";self::punctuation;text()=\"!\";name(preceding-sibling::*[1])!=\"text\"'.split(\";\"),[\"Rule\",\"tensor-base\",\"default\",\"[n] children/*[2]; [n] children/*[3]; [n] children/*[1]; [n] children/*[4]; [n] children/*[5]\",\"self::tensor\"],'Rule{left-super{default{[t] \"left super\"; [n] text(){self::*[@role=\"leftsuper\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{left-super{default{[t] \"left super\"; [m] children/*{self::punctuated{@role=\"leftsuper\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),\n'Rule{left-sub{default{[t] \"left sub\"; [n] text(){self::*[@role=\"leftsub\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{left-sub{default{[t] \"left sub\"; [m] children/*{self::punctuated{@role=\"leftsub\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{right-super{default{[t] \"right super\"; [n] text(){self::*[@role=\"rightsuper\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{right-super{default{[t] \"right super\"; [m] children/*{self::punctuated{@role=\"rightsuper\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),\n'Rule{right-sub{default{[t] \"right sub\"; [n] text(){self::*[@role=\"rightsub\"]{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule{right-sub{default{[t] \"right sub\"; [m] children/*{self::punctuated{@role=\"rightsub\"{not(contains(@grammar,\"combinatorics\"))'.split(\"{\"),'Rule;empty-index;default;[p] (pause:medium);self::empty;@role=\"rightsub\" or @role=\"rightsuper\" or @role=\"leftsub\" or @role=\"leftsuper\"'.split(\";\"),'Rule,combinatorics,default,[n] children/*[2] (grammar:combinatorics); [n] children/*[1]; [n] children/*[4] (grammar:combinatorics),self::tensor,name(children/*[3])=\"empty\",name(children/*[5])=\"empty\",children/*[1][text()=\"P\" or text()=\"C\"]'.split(\",\"),\n'Rule,choose,CombinationPermutation_ChoosePermute,[n] children/*[2] (grammar:combinatorics); [t] \"choose\"; [n] children/*[4] (grammar:combinatorics),self::tensor,name(children/*[3])=\"empty\",name(children/*[5])=\"empty\",children/*[1][text()=\"C\"]'.split(\",\"),'Rule,permute,CombinationPermutation_ChoosePermute,[n] children/*[2] (grammar:combinatorics); [t] \"permute\"; [n] children/*[4] (grammar:combinatorics),self::tensor,name(children/*[3])=\"empty\",name(children/*[5])=\"empty\",children/*[1][text()=\"P\"]'.split(\",\"),\n'Rule;unit-singular;default;[t] text() (grammar:annotation=\"unit\":translate);self::identifier;@role=\"unit\"'.split(\";\"),'Rule;unit-plural;default;[t] text() (grammar:annotation=\"unit\":translate:plural);self::identifier;@role=\"unit\";not(contains(@grammar, \"singularUnit\"))'.split(\";\"),'Rule,unit-square,default,[t] \"square\"; [n] children/*[1],self::superscript,@role=\"unit\",children/*[2][text()=2],name(children/*[1])=\"identifier\"'.split(\",\"),'Rule,unit-cubic,default,[t] \"cubic\"; [n] children/*[1],self::superscript,@role=\"unit\",children/*[2][text()=3],name(children/*[1])=\"identifier\"'.split(\",\"),\n'Rule,unit-reciprocal,default,[t] \"reciprocal\"; [n] children/*[1],self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],count(preceding-sibling::*)=0 or preceding-sibling::*[@role!=\"unit\"]'.split(\",\"),'Rule,unit-reciprocal,default,[t] \"per\"; [n] children/*[1] (grammar:singularUnit),self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],preceding-sibling::*[@role=\"unit\"]'.split(\",\"),\n'Rule;unit-combine;default;[m] children/*;self::infixop;@role=\"unit\"'.split(\";\"),'Rule,unit-combine-singular,default,[n] children/*[1]; [n] children/*[2] (grammar:singularUnit); [m] children/*[position()>2],self::infixop,@role=\"unit\",name(children/*[1])=\"number\",children/*[1][text()=1]'.split(\",\"),'Rule,unit-divide,default,[n] children/*[1]; [t] \"per\"; [n] children/*[2] (grammar:singularUnit),self::fraction,@role=\"unit\"'.split(\",\"),'Rule{currency{default{[m] children/*[position()>1]; [n] children/*[1];{self::infixop{contains(@annotation, \"clearspeak:unit\"){children/*[1][@role=\"unit\"]{CQFfirstCurrency'.split(\"{\"),\n'Rule;currency;Currency_Position;[m] children/*;self::infixop;contains(@annotation, \"clearspeak:unit\")'.split(\";\"),[\"SpecializedRule\",\"currency\",\"Currency_Position\",\"Currency_Prefix\"],'Rule{currency{Currency_Prefix{[n] children/*[last()]; [m] children/*[position()<last()]; {self::infixop{contains(@annotation, \"clearspeak:unit\"){children/*[last()][@role=\"unit\"]{CQFlastCurrency'.split(\"{\")],initialize:[sre.ClearspeakUtil.addAnnotators]};sre.Grammar.getInstance().setPreprocessor(\"numbers2alpha\",sre.ClearspeakUtil.numbersToAlpha);sre.EmacspeakRules={domain:\"emacspeak\",functions:[[\"CTXF\",\"CTXFnodeCounter\",sre.StoreUtil.nodeCounter],[\"CTXF\",\"CTXFcontentIterator\",sre.StoreUtil.contentIterator],[\"CQF\",\"CQFvulgarFractionSmall\",sre.MathspeakUtil.isSmallVulgarFraction],[\"CSF\",\"CSFvulgarFraction\",sre.NumbersUtil.vulgarFraction]],rules:[[\"Rule\",\"stree\",\"default\",\"[n] ./*[1]\",\"self::stree\"],[\"Rule\",\"multrel\",\"default\",'[t] \"multirelation\"; [m] children/* (sepFunc:CTXFcontentIterator)',\"self::multirel\"],'Rule{variable-equality{default{[t] \"equation sequence\"; [m] children/* (context:\"part\",ctxtFunc:CTXFnodeCounter,sepFunc:CTXFcontentIterator){self::relseq[@role=\"equality\"]{count(./children/*)>2{./children/punctuation[@role=\"ellipsis\"]'.split(\"{\"),\n'Rule{multi-equality{default{[t] \"equation sequence\"; [m] children/* (context:\"part\",ctxtFunc:CTXFnodeCounter,sepFunc:CTXFcontentIterator){self::relseq[@role=\"equality\"]{count(./children/*)>2'.split(\"{\"),'Rule,equality,default,[t] \"equation\"; [t] \"left hand side\"; [n] children/*[1];[p] (pause:200); [n] content/*[1] (pause:200);[t] \"right hand side\"; [n] children/*[2],self::relseq[@role=\"equality\"],count(./children/*)=2'.split(\",\"),'Rule,simple-equality,default,[n] children/*[1]; [p] (pause:200); [n] content/*[1] (pause:200);[n] children/*[2],self::relseq[@role=\"equality\"],count(./children/*)=2,./children/identifier or ./children/number'.split(\",\"),\n'Rule,simple-equality2,default,[n] children/*[1]; [p] (pause:200); [n] content/*[1] (pause:200);[n] children/*[2],self::relseq[@role=\"equality\"],count(./children/*)=2,./children/function or ./children/appl'.split(\",\"),[\"Rule\",\"relseq\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::relseq\"],'Rule;implicit;default;[m] children/*;self::infixop;@role=\"implicit\";children/*[1][@role=\"latinletter\"] or children/*[1][@role=\"greekletter\"] or children/*[1][@role=\"otherletter\"] or name(children/*[1])=\"number\";children/*[2][@role=\"latinletter\"] or children/*[2][@role=\"greekletter\"] or children/*[2][@role=\"otherletter\"] or name(children/*[2])=\"number\"'.split(\";\"),\n[\"Rule\",\"binary-operation\",\"default\",\"[p] (pause:100); [m] children/* (sepFunc:CTXFcontentIterator); [p] (pause:100);\",\"self::infixop\"],'Rule,variable-addition,default,[t] \"sum with variable number of summands\";[p] (pause:400); [m] children/* (sepFunc:CTXFcontentIterator),self::infixop[@role=\"addition\"],count(children/*)>2,children/punctuation[@role=\"ellipsis\"]'.split(\",\"),[\"Rule\",\"prefix\",\"default\",'[t] \"prefix\"; [n] text(); [t] \"of\" (pause 150);[n] children/*[1]',\"self::prefixop\"],'Rule,negative,default,[t] \"negative\"; [n] children/*[1],self::prefixop,self::prefixop[@role=\"negative\"]'.split(\",\"),\n[\"Rule\",\"postfix\",\"default\",'[n] children/*[1]; [t] \"postfix\"; [n] text() (pause 300)',\"self::postfixop\"],[\"Rule\",\"identifier\",\"default\",\"[n] text()\",\"self::identifier\"],[\"Rule\",\"number\",\"default\",\"[n] text()\",\"self::number\"],'Rule{font{default{[t] @font; [n] . (grammar:ignoreFont=@font){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),'Rule{font-identifier-short{default{[t] @font; [n] CQFhideFont; [t] CSFshowFont{self::identifier{string-length(text())=1{@font{@font=\"normal\"{\"\"=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\"){@role!=\"unit\"'.split(\"{\"),\n'Rule{font-identifier{default{[t] @font; [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1{@font{@font=\"normal\"{not(contains(@grammar, \"ignoreFont\")){@role!=\"unit\"'.split(\"{\"),'Rule;omit-font;default;[n] . (grammar:ignoreFont=@font);self::identifier;string-length(text())=1;@font;not(contains(@grammar, \"ignoreFont\"));@font=\"italic\"'.split(\";\"),'Rule,simple-fraction,default,[p] (pause:100); [n] children/*[1] (rate:0.35); [t] \"over\";  [n] children/*[2] (rate:0.35); [p] (pause:100),self::fraction,name(children/*[1])=\"number\" or name(children/*[1])=\"identifier\",name(children/*[2])=\"number\" or name(children/*[2])=\"identifier\"'.split(\",\"),\n'Rule;vulgar-fraction;default;[t] CSFvulgarFraction;self::fraction;@role=\"vulgar\";CQFvulgarFractionSmall'.split(\";\"),[\"Rule\",\"fraction\",\"default\",'[p] (pause:250); [n] children/*[1] (rate:0.35); [p] (pause:250); [t] \"divided by\"; [p] (pause:250);  [n] children/*[2] (rate:0.35); [p] (pause:250)',\"self::fraction\"],[\"Rule\",\"superscript\",\"default\",'[n] children/*[1]; [t] \"super\"; [n] children/*[2] (pitch:0.35);[p] (pause:300)',\"self::superscript\"],[\"Rule\",\"subscript\",\"default\",'[n] children/*[1]; [t] \"sub\"; [n] children/*[2] (pitch:-0.35);[p] (pause:300)',\n\"self::subscript\"],'Rule,ellipsis,default,[p] (pause:200); [t] \"ellipsis\"; [p] (pause:300),self::punctuation,self::punctuation[@role=\"ellipsis\"]'.split(\",\"),'Rule;fence-single;default;[n] text();self::punctuation;self::punctuation[@role=\"openfence\"]'.split(\";\"),[\"Alias\",\"fence-single\",\"self::punctuation\",'self::punctuation[@role=\"closefence\"]'],[\"Alias\",\"fence-single\",\"self::punctuation\",'self::punctuation[@role=\"vbar\"]'],[\"Alias\",\"fence-single\",\"self::punctuation\",'self::punctuation[@role=\"application\"]'],\n[\"Rule\",\"omit-empty\",\"default\",\"[p] (pause:100)\",\"self::empty\"],'Rule,fences-open-close,default,[p] (pause:200); [n] children/*[1] (rate:0.35); [p] (pause:200),self::fenced,@role=\"leftright\"'.split(\",\"),'Rule,fences-open-close-in-appl,default,[p] (pause:200); [n] children/*[1]; [p] (pause:200);,self::fenced[@role=\"leftright\"],./parent::children/parent::appl'.split(\",\"),'Rule,fences-neutral,default,[p] (pause:100); [t] \"absolute value of\"; [n] children/*[1];[p] (pause:350);,self::fenced,self::fenced[@role=\"neutral\"]'.split(\",\"),\n[\"Rule\",\"omit-fences\",\"default\",\"[p] (pause:500); [n] children/*[1]; [p] (pause:200);\",\"self::fenced\"],[\"Rule\",\"matrix\",\"default\",'[t] \"matrix\"; [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"row\",pause:100)',\"self::matrix\"],[\"Rule\",\"matrix-row\",\"default\",'[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"column\",pause:100)','self::row[@role=\"matrix\"]'],[\"Rule\",\"matrix-cell\",\"default\",\"[n] children/*[1]\",'self::cell[@role=\"matrix\"]'],[\"Rule\",\"vector\",\"default\",'[t] \"vector\"; [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"element\",pause:100)',\n\"self::vector\"],[\"Rule\",\"cases\",\"default\",'[t] \"case statement\"; [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"case\",pause:100)',\"self::cases\"],[\"Rule\",\"cases-row\",\"default\",\"[m] children/*\",'self::row[@role=\"cases\"]'],[\"Rule\",\"cases-cell\",\"default\",\"[n] children/*[1]\",'self::cell[@role=\"cases\"]'],[\"Rule\",\"row\",\"default\",'[m] ./* (ctxtFunc:CTXFnodeCounter,context:\"column\",pause:100)',\"self::row\"],'Rule{cases-end{default{[t] \"case statement\"; [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"case\",pause:100);[t] \"end cases\"{self::cases{following-sibling::*'.split(\"{\"),\n[\"Rule\",\"multiline\",\"default\",'[t] \"multiline equation\";[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"line\",pause:100)',\"self::multiline\"],[\"Rule\",\"line\",\"default\",\"[m] children/*\",\"self::line\"],[\"Rule\",\"table\",\"default\",'[t] \"multiline equation\";[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"row\",pause:200)',\"self::table\"],[\"Rule\",\"table-row\",\"default\",\"[m] children/* (pause:100)\",'self::row[@role=\"table\"]'],[\"Alias\",\"cases-cell\",'self::cell[@role=\"table\"]'],'Rule,end-punct,default,[m] children/*; [p] (pause:300),self::punctuated,@role=\"endpunct\"'.split(\",\"),\n'Rule,start-punct,default,[n] content/*[1]; [p] (pause:200); [m] children/*[position()>1],self::punctuated,@role=\"startpunct\"'.split(\",\"),'Rule,integral-punct,default,[n] children/*[1] (rate:0.2); [n] children/*[3] (rate:0.2),self::punctuated,@role=\"integral\"'.split(\",\"),[\"Rule\",\"punctuated\",\"default\",\"[m] children/* (pause:100)\",\"self::punctuated\"],[\"Rule\",\"function\",\"default\",\"[n] text()\",\"self::function\"],[\"Rule\",\"appl\",\"default\",\"[n] children/*[1]; [n] content/*[1]; [n] children/*[2]\",\"self::appl\"],\n'Rule,sum-only,default,[n] children/*[1]; [t] \"from\"; [n] children/*[2]; [t] \"to\";[n] children/*[3],self::limboth,@role=\"sum\" or @role=\"integral\"'.split(\",\"),[\"Rule\",\"limboth\",\"default\",'[n] children/*[1]; [p] (pause 100); [t] \"over\"; [n] children/*[2];[t] \"under\"; [n] children/*[3]; [p] (pause 250);',\"self::limboth\"],[\"Rule\",\"limlower\",\"default\",'[n] children/*[1]; [t] \"over\"; [n] children/*[2];',\"self::limlower\"],[\"Rule\",\"limupper\",\"default\",'[n] children/*[1]; [t] \"under\"; [n] children/*[2];',\n\"self::limupper\"],[\"Rule\",\"largeop\",\"default\",\"[n] text()\",\"self::largeop\"],[\"Rule\",\"bigop\",\"default\",'[n] children/*[1]; [p] (pause 100); [t] \"over\"; [n] children/*[2];[p] (pause 250);',\"self::bigop\"],[\"Rule\",\"integral\",\"default\",\"[n] children/*[1]; [p] (pause 100); [n] children/*[2];[p] (pause 200); [n] children/*[3] (rate:0.35);\",\"self::integral\"],[\"Rule\",\"sqrt\",\"default\",'[t] \"Square root of\"; [n] children/*[1] (rate:0.35); [p] (pause:400)',\"self::sqrt\"],'Rule,square,default,[n] children/*[1]; [t] \"squared\" (pitch:0.35); [p] (pause:200),self::superscript,children/*[2][text()=2],name(./children/*[1])!=\"text\"'.split(\",\"),\n'Rule,cube,default,[n] children/*[1]; [t] \"cubed\" (pitch:0.35); [p] (pause:200),self::superscript,children/*[2][text()=3],name(./children/*[1])!=\"text\"'.split(\",\"),[\"Rule\",\"root\",\"default\",'[t] \"root of order\"; [n] children/*[1];[t] \"over\"; [n] children/*[1] (rate:0.35); [p] (pause:400)',\"self::root\"],\"Rule,text-no-mult,default,[n] children/*[1]; [p] (pause:200); [n] children/*[2],self::infixop,children/text\".split(\",\"),[\"Rule\",\"text\",\"default\",\"[n] text(); [p] (pause:200)\",\"self::text\"],'Rule;unit;default;[t] text() (annotation:unit, preprocess);self::identifier;@role=\"unit\"'.split(\";\"),\n'Rule,unit-square,default,[t] \"square\"; [n] children/*[1],self::superscript,@role=\"unit\",children/*[2][text()=2],name(children/*[1])=\"identifier\"'.split(\",\"),'Rule,unit-cubic,default,[t] \"cubic\"; [n] children/*[1],self::superscript,@role=\"unit\",children/*[2][text()=3],name(children/*[1])=\"identifier\"'.split(\",\"),'Rule,reciprocal,default,[t] \"reciprocal\"; [n] children/*[1],self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],count(preceding-sibling::*)=0 or preceding-sibling::*[@role!=\"unit\"]'.split(\",\"),\n'Rule,reciprocal,default,[t] \"per\"; [n] children/*[1],self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],preceding-sibling::*[@role=\"unit\"]'.split(\",\"),'Rule;unit-combine;default;[m] children/*;self::infixop;@role=\"unit\"'.split(\";\"),'Rule,unit-divide,default,[n] children/*[1] (pitch:0.3); [t] \"per\"; [n] children/*[2] (pitch:-0.3),self::fraction,@role=\"unit\"'.split(\",\")]};sre.MathspeakFrenchUtil={};sre.MathspeakFrenchUtil.smallRoot=function(a){if(!a.childNodes||0===a.childNodes.length||!a.childNodes[0].childNodes)return[];var b=a.childNodes[0].childNodes[0].textContent;if(!/^\\d+$/.test(b))return[];b=parseInt(b,10);return 1<b&&3>=b?[a]:[]};sre.MathspeakFrenchUtil.baselineVerbose=function(a){return sre.MathspeakUtil.baselineVerbose(a).replace(/\\-$/,\"\")};sre.MathspeakFrenchUtil.baselineBrief=function(a){return sre.MathspeakUtil.baselineBrief(a).replace(/\\-$/,\"\")};\nsre.MathspeakFrenchUtil.leftSuperscriptVerbose=function(a){return sre.MathspeakUtil.superscriptVerbose(a).replace(/^exposant/,\"exposant gauche\")};sre.MathspeakFrenchUtil.leftSubscriptVerbose=function(a){return sre.MathspeakUtil.subscriptVerbose(a).replace(/^indice/,\"indice gauche\")};sre.MathspeakFrenchUtil.leftSuperscriptBrief=function(a){return sre.MathspeakUtil.superscriptBrief(a).replace(/^sup/,\"sup gauche\")};\nsre.MathspeakFrenchUtil.leftSubscriptBrief=function(a){return sre.MathspeakUtil.subscriptBrief(a).replace(/^sub/,\"sub gauche\")};sre.MathspeakFrench={locale:\"fr\",domain:\"mathspeak\",functions:[[\"CQF\",\"CQFspaceoutNumber\",sre.MathspeakUtil.spaceoutNumber],[\"CQF\",\"CQFspaceoutIdentifier\",sre.MathspeakUtil.spaceoutIdentifier],[\"CSF\",\"CSFspaceoutText\",sre.MathspeakUtil.spaceoutText],[\"CSF\",\"CSFopenFracVerbose\",sre.MathspeakUtil.openingFractionVerbose],[\"CSF\",\"CSFcloseFracVerbose\",sre.MathspeakUtil.closingFractionVerbose],[\"CSF\",\"CSFoverFracVerbose\",sre.MathspeakUtil.overFractionVerbose],[\"CSF\",\"CSFopenFracBrief\",sre.MathspeakUtil.openingFractionBrief],\n[\"CSF\",\"CSFcloseFracBrief\",sre.MathspeakUtil.closingFractionBrief],[\"CSF\",\"CSFopenFracSbrief\",sre.MathspeakUtil.openingFractionSbrief],[\"CSF\",\"CSFcloseFracSbrief\",sre.MathspeakUtil.closingFractionSbrief],[\"CSF\",\"CSFoverFracSbrief\",sre.MathspeakUtil.overFractionSbrief],[\"CSF\",\"CSFvulgarFrFraction\",sre.NumbersUtil.vulgarFraction],[\"CQF\",\"CQFvulgarFractionSmall\",sre.MathspeakUtil.isSmallVulgarFraction],[\"CSF\",\"CSFopenRadicalVerbose\",sre.MathspeakUtil.openingRadicalVerbose],[\"CSF\",\"CSFcloseRadicalVerbose\",\nsre.MathspeakUtil.closingRadicalVerbose],[\"CSF\",\"CSFindexRadicalVerbose\",sre.MathspeakUtil.indexRadicalVerbose],[\"CSF\",\"CSFopenRadicalBrief\",sre.MathspeakUtil.openingRadicalBrief],[\"CSF\",\"CSFcloseRadicalBrief\",sre.MathspeakUtil.closingRadicalBrief],[\"CSF\",\"CSFindexRadicalBrief\",sre.MathspeakUtil.indexRadicalBrief],[\"CSF\",\"CSFopenRadicalSbrief\",sre.MathspeakUtil.openingRadicalSbrief],[\"CSF\",\"CSFindexRadicalSbrief\",sre.MathspeakUtil.indexRadicalSbrief],[\"CQF\",\"CQFisSmallRoot\",sre.MathspeakFrenchUtil.smallRoot],\n[\"CSF\",\"CSFsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],[\"CSF\",\"CSFsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],[\"CSF\",\"CSFsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFbaselineVerbose\",sre.MathspeakFrenchUtil.baselineVerbose],[\"CSF\",\"CSFbaselineBrief\",sre.MathspeakFrenchUtil.baselineBrief],[\"CSF\",\"CSFleftsuperscriptVerbose\",sre.MathspeakFrenchUtil.leftSuperscriptVerbose],[\"CSF\",\"CSFleftsubscriptVerbose\",\nsre.MathspeakFrenchUtil.leftSubscriptVerbose],[\"CSF\",\"CSFrightsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],[\"CSF\",\"CSFrightsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFleftsuperscriptBrief\",sre.MathspeakFrenchUtil.leftSuperscriptBrief],[\"CSF\",\"CSFleftsubscriptBrief\",sre.MathspeakFrenchUtil.leftSubscriptBrief],[\"CSF\",\"CSFrightsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],[\"CSF\",\"CSFrightsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFunderscript\",\nsre.MathspeakUtil.nestedUnderscore],[\"CSF\",\"CSFoverscript\",sre.MathspeakUtil.nestedOverscore],[\"CTXF\",\"CTXFordinalCounter\",sre.NumbersUtil.ordinalCounter],[\"CTXF\",\"CTXFcontentIterator\",sre.StoreUtil.contentIterator],[\"CQF\",\"CQFdetIsSimple\",sre.MathspeakUtil.determinantIsSimple],[\"CSF\",\"CSFRemoveParens\",sre.MathspeakUtil.removeParens],[\"CQF\",\"CQFresetNesting\",sre.MathspeakUtil.resetNestingDepth],[\"CQF\",\"CQFisLogarithm\",sre.ClearspeakUtil.isLogarithmWithBase]],rules:['Rule;collapsed;default;[n] . (engine:modality=summary,grammar:collapsed);self::*;@alternative;not(contains(@grammar, \"collapsed\"));self::*;self::*;self::*;self::*;self::*'.split(\";\"),\n[\"SpecializedRule\",\"collapsed\",\"default\",\"brief\"],[\"SpecializedRule\",\"collapsed\",\"brief\",\"sbrief\"],\"Rule;stree;default;[n] ./*[1];self::stree;CQFresetNesting\".split(\";\"),[\"Rule\",\"unknown\",\"default\",\"[n] text()\",\"self::unknown\"],'Rule;protected;default;[t] text();self::*;@role=\"protected\"'.split(\";\"),[\"Rule\",\"omit-empty\",\"default\",\"[p] (pause:100)\",\"self::empty\"],'Rule;blank-empty;default;[t] \"vide\";self::empty;count(../*)=1;name(../..)=\"cell\" or name(../..)=\"line\"'.split(\";\"),'Rule{font{default{[n] . (grammar:ignoreFont=@font); [t] @font (grammar:localFont){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),\n'Rule{font-identifier-short{default{[n] . (grammar:ignoreFont=@font); [t] @font (grammar:localFont);{self::identifier{string-length(text())=1{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"normal\"{\"\"=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\"){@role!=\"unit\"'.split(\"{\"),\n'Rule{font-identifier{default{[n] . (grammar:ignoreFont=@font); [t] @font (grammar:localFont){self::identifier{string-length(text())=1{@font{@font=\"normal\"{not(contains(@grammar, \"ignoreFont\")){@role!=\"unit\"'.split(\"{\"),'Rule;omit-font;default;[n] . (grammar:ignoreFont=@font);self::identifier;string-length(text())=1;@font;not(contains(@grammar, \"ignoreFont\"));@font=\"italic\"'.split(\";\"),[\"Rule\",\"number\",\"default\",\"[n] text()\",\"self::number\"],'Rule,mixed-number,default,[n] children/*[1]; [t] \"et\"; [n] children/*[2]; ,self::number,@role=\"mixed\"'.split(\",\"),\n'Rule{number-with-chars{default{[t] \"nombre\"; [m] CQFspaceoutNumber{self::number{\"\" != translate(text(), \"0123456789.,\", \"\"){text() != translate(text(), \"0123456789.,\", \"\")'.split(\"{\"),'Rule{number-as-upper-word{default{[t] \"MotMajuscule\"; [t] CSFspaceoutText{self::number{string-length(text())>1{text()=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\", \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\"){\"\"=translate(text(), \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\",\"\")'.split(\"{\"),\n'Rule{number-baseline{default{[t] \"position de base\"; [n] . (grammar:baseline){self::number{not(contains(@grammar, \"ignoreFont\")){preceding-sibling::identifier{not(contains(@grammar, \"baseline\")){preceding-sibling::*[1][@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]{parent::*/parent::infixop[@role=\"implicit\"]'.split(\"{\"),[\"SpecializedRule\",\"number-baseline\",\"default\",\"brief\",'[t] \"base\"; [n] . (grammar:baseline)'],[\"SpecializedRule\",\"number-baseline\",\"brief\",\"sbrief\"],'Rule{number-baseline-font{default{[t] \"position de base\"; [n] . (grammar:ignoreFont=@font); [t] @font (grammar:localFont){self::number{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"{preceding-sibling::identifier{preceding-sibling::*[@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]{parent::*/parent::infixop[@role=\"implicit\"]'.split(\"{\"),\n[\"SpecializedRule\",\"number-baseline-font\",\"default\",\"brief\",'[t] \"base\"; [n] . (grammar:ignoreFont=@font); [t] @font (grammar:localFont)'],[\"SpecializedRule\",\"number-baseline-font\",\"brief\",\"sbrief\"],'Rule;identifier;default;[m] CQFspaceoutIdentifier;self::identifier;string-length(text())>1;@role!=\"unit\";@role!=\"protected\";not(@font) or @font=\"normal\" or contains(@grammar, \"ignoreFont\");text()!=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\")'.split(\";\"),\n[\"Rule\",\"identifier\",\"default\",\"[n] text()\",\"self::identifier\"],'Rule,negative,default,[t] \"n\\u00e9gatif\"; [n] children/*[1],self::prefixop,@role=\"negative\",children/identifier'.split(\",\"),[\"Aliases\",\"negative\",\"self::prefixop\",'@role=\"negative\"',\"children/number\"],[\"Aliases\",\"negative\",\"self::prefixop\",'@role=\"negative\"','children/fraction[@role=\"vulgar\"]'],'Rule,negative,default,[t] \"n\\u00e9gatif\"; [n] children/*[1],self::prefixop,@role=\"negative\"'.split(\",\"),[\"Rule\",\"prefix\",\"default\",\"[m] content/*; [n] children/*[1]\",\n\"self::prefixop\"],[\"Rule\",\"postfix\",\"default\",\"[n] children/*[1]; [m] content/*\",\"self::postfixop\"],[\"Rule\",\"binary-operation\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator);\",\"self::infixop\"],'Rule;implicit;default;[m] children/*;self::infixop;@role=\"implicit\"'.split(\";\"),[\"Aliases\",\"implicit\",\"self::infixop\",'@role=\"leftsuper\" or @role=\"leftsub\" or @role=\"rightsuper\" or @role=\"rightsub\"'],'Rule,subtraction,default,[m] children/* (separator:\"moins\");,self::infixop,@role=\"subtraction\"'.split(\",\"),\n[\"Rule\",\"function-unknown\",\"default\",\"[n] children/*[1]; [n] children/*[2]\",\"self::appl\"],'Rule,function-prefix,default,[n] children/*[1]; [n] children/*[2],self::appl,children/*[1][@role=\"prefix function\"]'.split(\",\"),'Rule,fences-open-close,default,[n] content/*[1]; [n] children/*[1]; [n] content/*[2],self::fenced,@role=\"leftright\"'.split(\",\"),'Rule,fences-neutral,default,[t] \"d\\u00e9but valeur absolue\"; [n] children/*[1]; [t] \"fin valeur absolue\",self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),\n[\"SpecializedRule\",\"fences-neutral\",\"default\",\"sbrief\",'[t] \"valeur absolue\"; [n] children/*[1]; [t] \"fin valeur absolue\"'],'Rule,fences-neutral,default,[n] content/*[1]; [n] children/*[1]; [n] content/*[2],self::fenced,@role=\"neutral\"'.split(\",\"),'Rule,fences-set,default,[t] \"d\\u00e9but ensemble\"; [n] children/*[1]; [t] \"fin ensemble\",self::fenced,@role=\"set empty\" or @role=\"set extended\" or @role=\"set singleton\" or @role=\"set collection\",not(name(../..)=\"appl\")'.split(\",\"),[\"SpecializedRule\",\"fences-set\",\n\"default\",\"sbrief\",'[t] \"ensemble\"; [n] children/*[1]; [t] \"fin ensemble\"'],[\"Rule\",\"text\",\"default\",\"[n] text()\",\"self::text\"],'Rule;factorial;default;[t] \"factorielle\";self::punctuation;text()=\"!\";name(preceding-sibling::*[1])!=\"text\"'.split(\";\"),'Rule;minus;default;[t] \"moins\";self::operator;text()=\"-\"'.split(\";\"),'Rule;single-prime;default;[t] \"prime\";self::punctuated;@role=\"prime\";count(children/*)=1'.split(\";\"),'Rule;double-prime;default;[t] \"double prime\";self::punctuated;@role=\"prime\";count(children/*)=2'.split(\";\"),\n'Rule;triple-prime;default;[t] \"triple prime\";self::punctuated;@role=\"prime\";count(children/*)=3'.split(\";\"),'Rule;quadruple-prime;default;[t] \"quadruple prime\";self::punctuated;@role=\"prime\";count(children/*)=4'.split(\";\"),'Rule,counted-prime,default,[t] count(children/*); [t] \"prime\",self::punctuated,@role=\"prime\"'.split(\",\"),[\"Rule\",\"fraction\",\"default\",\"[t] CSFopenFracVerbose; [n] children/*[1]; [t] CSFoverFracVerbose; [n] children/*[2]; [t] CSFcloseFracVerbose\",\"self::fraction\"],[\"Rule\",\"fraction\",\n\"brief\",\"[t] CSFopenFracBrief; [n] children/*[1]; [t] CSFoverFracVerbose; [n] children/*[2]; [t] CSFcloseFracBrief\",\"self::fraction\"],[\"Rule\",\"fraction\",\"sbrief\",\"[t] CSFopenFracSbrief; [n] children/*[1]; [t] CSFoverFracSbrief; [n] children/*[2]; [t] CSFcloseFracSbrief\",\"self::fraction\"],'Rule;vulgar-fraction;default;[t] CSFvulgarFrFraction;self::fraction;@role=\"vulgar\";CQFvulgarFractionSmall'.split(\";\"),[\"SpecializedRule\",\"vulgar-fraction\",\"default\",\"brief\"],[\"SpecializedRule\",\"vulgar-fraction\",\n\"default\",\"sbrief\"],'Rule,continued-fraction-outer,default,[t] \"fraction continue\"; [n] children/*[1];[t] \"sur\"; [n] children/*[2],self::fraction,not(ancestor::fraction),children/*[2]/descendant-or-self::*[@role=\"ellipsis\" and not(following-sibling::*)]'.split(\",\"),[\"SpecializedRule\",\"continued-fraction-outer\",\"default\",\"brief\",'[t] \"frac continue\"; [n] children/*[1];[t] \"sur\"; [n] children/*[2]'],[\"SpecializedRule\",\"continued-fraction-outer\",\"brief\",\"sbrief\"],'Rule,continued-fraction-inner,default,[t] \"d\\u00e9but fraction\"; [n] children/*[1];[t] \"sur\"; [n] children/*[2],self::fraction,ancestor::fraction,children/*[2]/descendant-or-self::*[@role=\"ellipsis\" and not(following-sibling::*)]'.split(\",\"),\n[\"SpecializedRule\",\"continued-fraction-inner\",\"default\",\"brief\",'[t] \"d\\u00e9but frac\"; [n] children/*[1];[t] \"sur\"; [n] children/*[2]'],[\"SpecializedRule\",\"continued-fraction-inner\",\"brief\",\"sbrief\",'[t] \"frac\"; [n] children/*[1];[t] \"sur\"; [n] children/*[2]'],[\"Rule\",\"sqrt\",\"default\",\"[t] CSFopenRadicalVerbose; [n] children/*[1]; [t] CSFcloseRadicalVerbose\",\"self::sqrt\"],[\"Rule\",\"sqrt\",\"brief\",\"[t] CSFopenRadicalBrief; [n] children/*[1]; [t] CSFcloseRadicalBrief\",\"self::sqrt\"],[\"Rule\",\"sqrt\",\"sbrief\",\n\"[t] CSFopenRadicalSbrief; [n] children/*[1]; [t] CSFcloseRadicalBrief\",\"self::sqrt\"],\"Rule,root-small,default,[t] CSFopenRadicalVerbose; [n] children/*[2]; [t] CSFcloseRadicalVerbose,self::root,CQFisSmallRoot\".split(\",\"),\"Rule,root-small,brief,[t] CSFopenRadicalBrief; [n] children/*[2]; [t] CSFcloseRadicalBrief,self::root,CQFisSmallRoot\".split(\",\"),\"Rule,root-small,sbrief,[t] CSFopenRadicalSbrief; [n] children/*[2]; [t] CSFcloseRadicalBrief,self::root,CQFisSmallRoot\".split(\",\"),[\"Rule\",\"root\",\"default\",\n\"[t] CSFindexRadicalVerbose; [n] children/*[1];[t] CSFopenRadicalVerbose; [n] children/*[2]; [t] CSFcloseRadicalVerbose\",\"self::root\"],[\"Rule\",\"root\",\"brief\",\"[t] CSFindexRadicalBrief; [n] children/*[1];[t] CSFopenRadicalBrief; [n] children/*[2]; [t] CSFcloseRadicalBrief\",\"self::root\"],[\"Rule\",\"root\",\"sbrief\",\"[t] CSFindexRadicalSbrief; [n] children/*[1];[t] CSFopenRadicalSbrief; [n] children/*[2]; [t] CSFcloseRadicalBrief\",\"self::root\"],'Rule,limboth,default,[n] children/*[1]; [t] \"d\\u00e9but\"; [t] CSFunderscript; [n] children/*[2];[t] \"d\\u00e9but\"; [t] CSFoverscript; [n] children/*[3],self::limboth,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),\n'Rule,limlower,default,[n] children/*[1]; [t] \"d\\u00e9but\"; [t] CSFunderscript; [n] children/*[2];,self::limlower,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),'Rule,limupper,default,[n] children/*[1]; [t] \"d\\u00e9but\"; [t] CSFoverscript; [n] children/*[2];,self::limupper,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),'Aliases;limlower;self::underscore;@role=\"limit function\";name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),\n'Aliases;limlower;self::underscore;children/*[2][@role!=\"underaccent\"];name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),'Aliases;limupper;self::overscore;children/*[2][@role!=\"overaccent\"];name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),[\"Rule\",\"limboth-end\",\"default\",'[n] children/*[1]; [t] \"d\\u00e9but\"; [t] CSFunderscript; [n] children/*[2];[t] \"d\\u00e9but\"; [t] CSFoverscript; [n] children/*[3]; [t] \"fin scripts\"',\n\"self::limboth\"],[\"Rule\",\"limlower-end\",\"default\",'[n] children/*[1]; [t] \"d\\u00e9but\"; [t] CSFunderscript; [n] children/*[2]; [t] \"fin scripts\"',\"self::limlower\"],[\"Rule\",\"limupper-end\",\"default\",'[n] children/*[1]; [t] \"d\\u00e9but\"; [t] CSFoverscript; [n] children/*[2]; [t] \"fin scripts\"',\"self::limupper\"],[\"Aliases\",\"limlower-end\",\"self::underscore\",'@role=\"limit function\"'],[\"Aliases\",\"limlower-end\",\"self::underscore\"],[\"Aliases\",\"limupper-end\",\"self::overscore\"],[\"Rule\",\"integral\",\"default\",\n\"[n] children/*[1]; [n] children/*[2]; [n] children/*[3];\",\"self::integral\"],'Rule,integral,default,[n] children/*[1]; [t] \"indice inf\\u00e9rieur\"; [n] children/*[2];[t] \"indice sup\\u00e9rieur\"; [n] children/*[3]; [t] \"position de base\";,self::limboth,@role=\"integral\"'.split(\",\"),[\"SpecializedRule\",\"integral\",\"default\",\"brief\",'[n] children/*[1]; [t] \"inf\"; [n] children/*[2];[t] \"sup\"; [n] children/*[3]; [t] \"position de base\";'],[\"SpecializedRule\",\"integral\",\"brief\",\"sbrief\"],[\"Rule\",\"bigop\",\"default\",\n\"[n] children/*[1]; [n] children/*[2];\",\"self::bigop\"],[\"Rule\",\"relseq\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::relseq\"],'Rule,equality,default,[n] children/*[1]; [n] content/*[1]; [n] children/*[2],self::relseq,@role=\"equality\",count(./children/*)=2'.split(\",\"),'Rule;multi-equality;default;[m] children/* (sepFunc:CTXFcontentIterator);self::relseq;@role=\"equality\";count(./children/*)>2'.split(\";\"),[\"Rule\",\"multrel\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::multirel\"],\n[\"Rule\",\"subscript\",\"default\",\"[n] children/*[1]; [t] CSFsubscriptVerbose; [n] children/*[2]\",\"self::subscript\"],[\"Rule\",\"subscript\",\"brief\",\"[n] children/*[1]; [t] CSFsubscriptBrief; [n] children/*[2]\",\"self::subscript\"],[\"SpecializedRule\",\"subscript\",\"brief\",\"sbrief\"],'Rule,subscript-base,default,[n] children/*[1]; [t] \"base\"; [n] children/*[2],self::subscript,CQFisLogarithm,self::*,self::*,self::*'.split(\",\"),[\"SpecializedRule\",\"subscript-base\",\"default\",\"brief\"],[\"SpecializedRule\",\"subscript-base\",\n\"default\",\"sbrief\"],'Rule,subscript-simple,brief,[n] children/*[1]; [n] children/*[2],self::subscript,name(./children/*[1])=\"identifier\",name(./children/*[2])=\"number\",./children/*[2][@role!=\"mixed\"],./children/*[2][@role!=\"othernumber\"]'.split(\",\"),[\"SpecializedRule\",\"subscript-simple\",\"brief\",\"sbrief\"],'Rule,subscript-baseline,default,[n] children/*[1]; [t] CSFsubscriptVerbose; [n] children/*[2]; [t] CSFbaselineVerbose,self::subscript,following-sibling::*,not(name(following-sibling::subscript/children/*[1])=\"empty\" or (name(following-sibling::infixop[@role=\"implicit\"]/children/*[1])=\"subscript\" and name(following-sibling::*/children/*[1]/children/*[1])=\"empty\")) and @role!=\"subsup\",not(following-sibling::*[@role=\"rightsuper\" or @role=\"rightsub\" or @role=\"leftsub\" or @role=\"leftsub\"])'.split(\",\"),\n[\"SpecializedRule\",\"subscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsubscriptBrief; [n] children/*[2]; [t] CSFbaselineBrief\"],[\"SpecializedRule\",\"subscript-baseline\",\"brief\",\"sbrief\"],'Aliases;subscript-baseline;self::subscript;not(following-sibling::*);ancestor::fenced|ancestor::root|ancestor::sqrt|ancestor::punctuated|ancestor::fraction;not(ancestor::punctuated[@role=\"leftsuper\" or @role=\"rightsub\" or @role=\"rightsuper\" or @role=\"rightsub\"])'.split(\";\"),[\"Aliases\",\"subscript-baseline\",\n\"self::subscript\",\"not(following-sibling::*)\",\"ancestor::relseq|ancestor::multirel\",sre.MathspeakUtil.generateBaselineConstraint()],[\"Aliases\",\"subscript-baseline\",\"self::subscript\",\"not(following-sibling::*)\",\"@embellished\"],'Rule,subscript-empty-sup,default,[n] children/*[1]; [n] children/*[2],self::subscript,name(children/*[2])=\"infixop\",name(children/*[2][@role=\"implicit\"]/children/*[1])=\"superscript\",name(children/*[2]/children/*[1]/children/*[1])=\"empty\"'.split(\",\"),[\"SpecializedRule\",\"subscript-empty-sup\",\n\"default\",\"brief\"],[\"SpecializedRule\",\"subscript-empty-sup\",\"brief\",\"sbrief\"],[\"Aliases\",\"subscript-empty-sup\",\"self::subscript\",'name(children/*[2])=\"superscript\"','name(children/*[2]/children/*[1])=\"empty\"'],[\"Rule\",\"superscript\",\"default\",\"[n] children/*[1]; [t] CSFsuperscriptVerbose; [n] children/*[2]\",\"self::superscript\"],[\"SpecializedRule\",\"superscript\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsuperscriptBrief; [n] children/*[2]\"],[\"SpecializedRule\",\"superscript\",\"brief\",\"sbrief\"],'Rule,superscript-baseline,default,[n] children/*[1]; [t] CSFsuperscriptVerbose; [n] children/*[2];[t] CSFbaselineVerbose,self::superscript,following-sibling::*,not(name(following-sibling::superscript/children/*[1])=\"empty\" or (name(following-sibling::infixop[@role=\"implicit\"]/children/*[1])=\"superscript\" and name(following-sibling::*/children/*[1]/children/*[1])=\"empty\")) and not(following-sibling::*[@role=\"rightsuper\" or @role=\"rightsub\" or @role=\"leftsub\" or @role=\"leftsub\"])'.split(\",\"),\n[\"SpecializedRule\",\"superscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsuperscriptBrief; [n] children/*[2];[t] CSFbaselineBrief\"],[\"SpecializedRule\",\"superscript-baseline\",\"brief\",\"sbrief\"],'Aliases;superscript-baseline;self::superscript;not(following-sibling::*);ancestor::punctuated;ancestor::*/following-sibling::* and not(ancestor::punctuated[@role=\"leftsuper\" or @role=\"rightsub\" or @role=\"rightsuper\" or @role=\"rightsub\"])'.split(\";\"),[\"Aliases\",\"superscript-baseline\",\"self::superscript\",\n\"not(following-sibling::*)\",\"ancestor::fraction|ancestor::fenced|ancestor::root|ancestor::sqrt\"],[\"Aliases\",\"superscript-baseline\",\"self::superscript\",\"not(following-sibling::*)\",\"ancestor::relseq|ancestor::multirel\",\"not(@embellished)\",sre.MathspeakUtil.generateBaselineConstraint()],'Aliases superscript-baseline self::superscript not(following-sibling::*) @embellished not(children/*[2][@role=\"prime\"])'.split(\" \"),'Rule,superscript-empty-sub,default,[n] children/*[1]; [n] children/*[2],self::superscript,name(children/*[2])=\"infixop\",name(children/*[2][@role=\"implicit\"]/children/*[1])=\"subscript\",name(children/*[2]/children/*[1]/children/*[1])=\"empty\"'.split(\",\"),\n[\"SpecializedRule\",\"superscript-empty-sub\",\"default\",\"brief\"],[\"SpecializedRule\",\"superscript-empty-sub\",\"brief\",\"sbrief\"],[\"Aliases\",\"superscript-empty-sub\",\"self::superscript\",'name(children/*[2])=\"subscript\"','name(children/*[2]/children/*[1])=\"empty\"'],'Rule,square,default,[n] children/*[1]; [t] \"au carr\\u00e9\",self::superscript,children/*[2],children/*[2][text()=2],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),name(children/*[1])!=\"subscript\" or (name(children/*[1])=\"subscript\" and name(children/*[1]/children/*[1])=\"identifier\" and name(children/*[1]/children/*[2])=\"number\" and children/*[1]/children/*[2][@role!=\"mixed\"] and children/*[1]/children/*[2][@role!=\"othernumber\"]),not(@embellished)'.split(\",\"),\n[\"SpecializedRule\",\"square\",\"default\",\"brief\"],[\"SpecializedRule\",\"square\",\"default\",\"sbrief\"],'Aliases;square;self::superscript;children/*[2];children/*[2][text()=2];@embellished;children/*[1][@role=\"prefix operator\"]'.split(\";\"),'Rule,cube,default,[n] children/*[1]; [t] \"cubique\",self::superscript,children/*[2],children/*[2][text()=3],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),name(children/*[1])!=\"subscript\" or (name(children/*[1])=\"subscript\" and name(children/*[1]/children/*[1])=\"identifier\" and name(children/*[1]/children/*[2])=\"number\" and children/*[1]/children/*[2][@role!=\"mixed\"] and children/*[1]/children/*[2][@role!=\"othernumber\"]),not(@embellished)'.split(\",\"),\n[\"SpecializedRule\",\"cube\",\"default\",\"brief\"],[\"SpecializedRule\",\"cube\",\"default\",\"sbrief\"],'Aliases;cube;self::superscript;children/*[2];children/*[2][text()=3];@embellished;children/*[1][@role=\"prefix operator\"]'.split(\";\"),'Rule,prime,default,[n] children/*[1]; [n] children/*[2],self::superscript,children/*[2],children/*[2][@role=\"prime\"]'.split(\",\"),[\"SpecializedRule\",\"prime\",\"default\",\"brief\"],[\"SpecializedRule\",\"prime\",\"default\",\"sbrief\"],'Rule,prime-subscript,default,[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptVerbose; [n] children/*[1]/children/*[2],self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",not(following-sibling::*)'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript\",\"default\",\"brief\",\"[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptBrief; [n] children/*[1]/children/*[2]\"],[\"SpecializedRule\",\"prime-subscript\",\"brief\",\"sbrief\"],'Rule,prime-subscript-baseline,default,[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptVerbose; [n] children/*[1]/children/*[2]; [t] CSFbaselineVerbose,self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",following-sibling::*'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptBrief; [n] children/*[1]/children/*[2]; [t] CSFbaselineBrief\"],[\"SpecializedRule\",\"prime-subscript-baseline\",\"brief\",\"sbrief\"],'Aliases prime-subscript-baseline self::superscript children/*[2][@role=\"prime\"] name(children/*[1])=\"subscript\" not(following-sibling::*) @embellished'.split(\" \"),'Rule,prime-subscript-simple,brief,[n] children/*[1]/children/*[1]; [n] children/*[2];[n] children/*[1]/children/*[2],self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",name(children/*[1]/children/*[1])=\"identifier\",name(children/*[1]/children/*[2])=\"number\",children/*[1]/children/*[2][@role!=\"mixed\"],children/*[1]/children/*[2][@role!=\"othernumber\"]'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript-simple\",\"brief\",\"sbrief\"],'Rule,overscore,default,[t] \"suscrire\"; [n] children/*[1]; [t] \"avec\"; [n] children/*[2],self::overscore,children/*[2][@role=\"overaccent\"]'.split(\",\"),'Rule,double-overscore,default,[t] \"sus-suscrire\"; [n] children/*[1]; [t] \"avec\"; [n] children/*[2],self::overscore,children/*[2][@role=\"overaccent\"],name(children/*[1])=\"overscore\",children/*[1]/children/*[2][@role=\"overaccent\"]'.split(\",\"),'Rule,underscore,default,[t] \"souscrire\"; [n] children/*[1]; [t] \"avec\"; [n] children/*[2],self::underscore,children/*[2][@role=\"underaccent\"]'.split(\",\"),\n'Rule,double-underscore,default,[t] \"sous-souscrire\"; [n] children/*[1]; [t] \"avec\"; [n] children/*[2],self::underscore,children/*[2][@role=\"underaccent\"],name(children/*[1])=\"underscore\",children/*[1]/children/*[2][@role=\"underaccent\"]'.split(\",\"),'Rule,matrix-fence,default,[n] children/*[1];,self::fenced,count(children/*)=1,name(children/*[1])=\"matrix\"'.split(\",\"),[\"Rule\",\"matrix\",\"default\",'[t] \"d\\u00e9but matrice\"; [t] count(children/*);  [t] \"par\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"rang\\u00e9e \"); [t] \"fin matrice\"',\n\"self::matrix\"],[\"Rule\",\"matrix\",\"sbrief\",'[t] \"matrice\"; [t] count(children/*);  [t] \"par\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"rang\\u00e9e \"); [t] \"fin matrice\"',\"self::matrix\"],[\"Aliases\",\"matrix\",\"self::vector\"],[\"Rule\",\"matrix-row\",\"default\",'[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"colonne\");[p] (pause: 200)',\"self::row\"],'Rule{row-with-label{default{[t] \"avec \\u00e9tiquette\"; [n] content/*[1]; [t] \"fin \\u00e9tiquette\"(pause: 200); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"colonne\"){self::row{content'.split(\"{\"),\n'Rule{row-with-label{brief{[t] \"\\u00e9tiquette\"; [n] content/*[1]; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"colonne\"){self::row{content'.split(\"{\"),[\"SpecializedRule\",\"row-with-label\",\"brief\",\"sbrief\"],'Rule{row-with-text-label{sbrief{[t] \"\\u00e9tiquette\"; [t] CSFRemoveParens;[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"colonne\"){self::row{content{name(content/cell/children/*[1])=\"text\"'.split(\"{\"),'Rule;empty-row;default;[t] \"vide\";self::row;count(children/*)=0'.split(\";\"),[\"Rule\",\n\"matrix-cell\",\"default\",\"[n] children/*[1]; [p] (pause: 300)\",\"self::cell\"],'Rule,empty-cell,default,[t] \"vide\"; [p] (pause: 300),self::cell,count(children/*)=0'.split(\",\"),'Rule{determinant{default{[t] \"d\\u00e9but d\\u00e9terminant\"; [t] count(children/*);  [t] \"par\";[t] count(children/*[1]/children/*); [t] \"\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"rang\\u00e9e \"); [t] \"fin d\\u00e9terminant\"{self::matrix{@role=\"determinant\"'.split(\"{\"),[\"SpecializedRule\",\"determinant\",\"default\",\"sbrief\",\n'[t] \"d\\u00e9terminant\"; [t] count(children/*);  [t] \"par\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"rang\\u00e9e \"); [t] \"fin d\\u00e9terminant\"'],'Rule{determinant-simple{default{[t] \"d\\u00e9but d\\u00e9terminant\"; [t] count(children/*);  [t] \"par\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"rang\\u00e9e\",grammar:simpleDet); [t] \"fin d\\u00e9terminant\"{self::matrix{@role=\"determinant\"{CQFdetIsSimple'.split(\"{\"),\n[\"SpecializedRule\",\"determinant-simple\",\"default\",\"sbrief\",'[t] \"d\\u00e9terminant\"; [t] count(children/*);  [t] \"par\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"rang\\u00e9e\",grammar:simpleDet); [t] \"fin d\\u00e9terminant\"'],'Rule{row-simple{default{[m] children/*;{self::row{@role=\"determinant\"{contains(@grammar, \"simpleDet\")'.split(\"{\"),[\"Rule\",\"layout\",\"default\",'[t] \"d\\u00e9but tableau\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"rang\\u00e9e \"); [t] \"fin tableau\"',\n\"self::table\"],[\"Rule\",\"layout\",\"sbrief\",'[t] \"tableau\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"rang\\u00e9e \"); [t] \"fin tableau\"',\"self::table\"],'Rule,binomial,default,[t] \"d\\u00e9but binomiale\"; [n] children/*[2]/children/*[1]; [t] \"parmi\"; [n] children/*[1]/children/*[1];  [t] \"fin binomiale\",self::vector,@role=\"binomial\"'.split(\",\"),'Rule,binomial,sbrief,[t] \"binomiale\"; [n] children/*[1]/children/*[1]; [t] \"parmi\"; [n] children/*[2]/children/*[1];  [t] \"fin binomiale\",self::vector,@role=\"binomial\"'.split(\",\"),\n[\"Rule\",\"cases\",\"default\",'[t] \"d\\u00e9but tableau\"; [n] content/*[1]; [t] \"\\u00e9largie\";[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"rang\\u00e9e \"); [t] \"fin tableau\"',\"self::cases\"],[\"Rule\",\"cases\",\"sbrief\",'[t] \"tableau\"; [n] content/*[1]; [t] \"\\u00e9largie\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"rang\\u00e9e \"); [t] \"fin tableau\"',\"self::cases\"],[\"Aliases\",\"layout\",\"self::multiline\"],[\"Rule\",\"line\",\"default\",\"[m] children/*\",\"self::line\"],'Rule,line-with-label,default,[t] \"avec etiquette\"; [n] content/*[1]; [t] \"fin etiquette\" (pause: 200); [m] children/*,self::line,content'.split(\",\"),\n[\"SpecializedRule\",\"line-with-label\",\"default\",\"brief\",'[t] \"etiquette\"; [n] content/*[1] (pause: 200); [m] children/*'],[\"SpecializedRule\",\"line-with-label\",\"brief\",\"sbrief\"],'Rule,line-with-text-label,sbrief,[t] \"etiquette\"; [t] CSFRemoveParens; [m] children/*,self::line,content,name(content/cell/children/*[1])=\"text\"'.split(\",\"),'Rule;empty-line;default;[t] \"vide\";self::line;count(children/*)=0;not(content)'.split(\";\"),[\"SpecializedRule\",\"empty-line\",\"default\",\"brief\"],[\"SpecializedRule\",\"empty-line\",\n\"brief\",\"sbrief\"],'Rule,empty-line-with-label,default,[t] \"avec etiquette\"; [n] content/*[1]; [t] \"fin etiquette\" (pause: 200); [t] \"vide\",self::line,count(children/*)=0,content'.split(\",\"),[\"SpecializedRule\",\"empty-line-with-label\",\"default\",\"brief\",'[t] \"etiquette\"; [n] content/*[1] (pause: 200); [t] \"vide\"'],[\"SpecializedRule\",\"empty-line-with-label\",\"brief\",\"sbrief\"],[\"Rule\",\"enclose\",\"default\",'[t] \"d\\u00e9but enfermer en\"; [t] @role (grammar:localEnclose); [n] children/*[1]; [t] \"fin enfermer\"',\n\"self::enclose\"],'Rule,overbar,default,[t] \"d\\u00e9but trait suscrit\"; [n] children/*[1]; [t] \"fin trait suscrit\",self::enclose,@role=\"top\"'.split(\",\"),'Rule,underbar,default,[t] \"d\\u00e9but trait souscrit\"; [n] children/*[1]; [t] \"fin trait souscrit\",self::enclose,@role=\"bottom\"'.split(\",\"),'Rule,leftbar,default,[t] \"barre verticale\"; [n] children/*[1],self::enclose,@role=\"left\"'.split(\",\"),'Rule,rightbar,default,[n] children/*[1]; [t] \"barre verticale\",self::enclose,@role=\"right\"'.split(\",\"),'Rule,crossout,default,[t] \"d\\u00e9but biff\\u00e9\"; [n] children/*[1]; [t] \"fin biff\\u00e9\",self::enclose,@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'.split(\",\"),\n'Rule,cancel,default,[t] \"d\\u00e9but biff\\u00e9\"; [n] children/*[1]/children/*[1]; [t] \"avec\"; [n] children/*[2]; [t] \"fin biff\\u00e9\",self::overscore,@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'.split(\",\"),[\"SpecializedRule\",\"cancel\",\"default\",\"brief\"],[\"SpecializedRule\",\"cancel\",\"default\",\"sbrief\"],[\"Aliases\",\"cancel\",\"self::underscore\",'@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'],'Rule,cancel-reverse,default,[t] \"d\\u00e9but biff\\u00e9\"; [n] children/*[2]/children/*[1]; [t] \"avec\"; [n] children/*[1]; [t] \"fin biff\\u00e9\",self::overscore,name(children/*[2])=\"enclose\",children/*[2][@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"]'.split(\",\"),\n[\"SpecializedRule\",\"cancel-reverse\",\"default\",\"brief\"],[\"SpecializedRule\",\"cancel-reverse\",\"default\",\"sbrief\"],[\"Aliases\",\"cancel-reverse\",\"self::underscore\",'name(children/*[2])=\"enclose\"','children/*[2][@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"]'],'Rule;end-punct;default;[m] children/*;self::punctuated;@role=\"endpunct\"'.split(\";\"),'Rule,start-punct,default,[n] content/*[1]; [m] children/*[position()>1],self::punctuated,@role=\"startpunct\"'.split(\",\"),'Rule,integral-punct,default,[n] children/*[1]; [n] children/*[3],self::punctuated,@role=\"integral\"'.split(\",\"),\n[\"Rule\",\"punctuated\",\"default\",\"[m] children/*\",\"self::punctuated\"],'Rule;unit;default;[t] text() (grammar:annotation=\"unit\":translate);self::identifier;@role=\"unit\"'.split(\";\"),'Rule,unit-square,default,[n] children/*[1]; [t] \"carr\\u00e9\",self::superscript,@role=\"unit\",children/*[2][text()=2],name(children/*[1])=\"identifier\"'.split(\",\"),'Rule,unit-cubic,default,[n] children/*[1]; [t] \"cubique\",self::superscript,@role=\"unit\",children/*[2][text()=3],name(children/*[1])=\"identifier\"'.split(\",\"),'Rule,reciprocal,default,[t] \"r\\u00e9ciproque\"; [n] children/*[1],self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],count(preceding-sibling::*)=0 or preceding-sibling::*[@role!=\"unit\"]'.split(\",\"),\n'Rule,reciprocal,default,[t] \"par\"; [n] children/*[1],self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],preceding-sibling::*[@role=\"unit\"]'.split(\",\"),'Rule;unit-combine;default;[m] children/*;self::infixop;@role=\"unit\"'.split(\";\"),'Rule,unit-divide,default,[n] children/*[1]; [t] \"par\"; [n] children/*[2],self::fraction,@role=\"unit\"'.split(\",\")],initialize:[sre.MathspeakUtil.generateTensorRules]};sre.MathspeakGerman={locale:\"de\",domain:\"mathspeak\",functions:[[\"CQF\",\"CQFspaceoutNumber\",sre.MathspeakUtil.spaceoutNumber],[\"CQF\",\"CQFspaceoutIdentifier\",sre.MathspeakUtil.spaceoutIdentifier],[\"CSF\",\"CSFspaceoutText\",sre.MathspeakUtil.spaceoutText],[\"CSF\",\"CSFopenFracVerbose\",sre.MathspeakUtil.openingFractionVerbose],[\"CSF\",\"CSFcloseFracVerbose\",sre.MathspeakUtil.closingFractionVerbose],[\"CSF\",\"CSFoverFracVerbose\",sre.MathspeakUtil.overFractionVerbose],[\"CSF\",\"CSFopenFracBrief\",sre.MathspeakUtil.openingFractionBrief],\n[\"CSF\",\"CSFcloseFracBrief\",sre.MathspeakUtil.closingFractionBrief],[\"CSF\",\"CSFopenFracSbrief\",sre.MathspeakUtil.openingFractionSbrief],[\"CSF\",\"CSFcloseFracSbrief\",sre.MathspeakUtil.closingFractionSbrief],[\"CSF\",\"CSFoverFracSbrief\",sre.MathspeakUtil.overFractionSbrief],[\"CSF\",\"CSFvulgarFraction\",sre.NumbersUtil.vulgarFraction],[\"CQF\",\"CQFvulgarFractionSmall\",sre.MathspeakUtil.isSmallVulgarFraction],[\"CSF\",\"CSFopenRadicalVerbose\",sre.MathspeakUtil.openingRadicalVerbose],[\"CSF\",\"CSFcloseRadicalVerbose\",\nsre.MathspeakUtil.closingRadicalVerbose],[\"CSF\",\"CSFindexRadicalVerbose\",sre.MathspeakUtil.indexRadicalVerbose],[\"CSF\",\"CSFopenRadicalBrief\",sre.MathspeakUtil.openingRadicalBrief],[\"CSF\",\"CSFcloseRadicalBrief\",sre.MathspeakUtil.closingRadicalBrief],[\"CSF\",\"CSFindexRadicalBrief\",sre.MathspeakUtil.indexRadicalBrief],[\"CSF\",\"CSFopenRadicalSbrief\",sre.MathspeakUtil.openingRadicalSbrief],[\"CSF\",\"CSFindexRadicalSbrief\",sre.MathspeakUtil.indexRadicalSbrief],[\"CSF\",\"CSFsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],\n[\"CSF\",\"CSFsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],[\"CSF\",\"CSFsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFbaselineVerbose\",sre.MathspeakUtil.baselineVerbose],[\"CSF\",\"CSFbaselineBrief\",sre.MathspeakUtil.baselineBrief],[\"CSF\",\"CSFleftsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],[\"CSF\",\"CSFleftsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFrightsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],\n[\"CSF\",\"CSFrightsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFleftsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],[\"CSF\",\"CSFleftsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFrightsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],[\"CSF\",\"CSFrightsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFunderscript\",sre.MathspeakUtil.nestedUnderscore],[\"CSF\",\"CSFoverscript\",sre.MathspeakUtil.nestedOverscore],[\"CTXF\",\"CTXFordinalCounter\",sre.NumbersUtil.ordinalCounter],\n[\"CTXF\",\"CTXFcontentIterator\",sre.StoreUtil.contentIterator],[\"CQF\",\"CQFdetIsSimple\",sre.MathspeakUtil.determinantIsSimple],[\"CSF\",\"CSFRemoveParens\",sre.MathspeakUtil.removeParens],[\"CQF\",\"CQFresetNesting\",sre.MathspeakUtil.resetNestingDepth]],rules:['Rule{collapsed{default{[n] . (engine:modality=summary,grammar:collapsed); [t] \"kollabiert\"{self::*{@alternative{not(contains(@grammar, \"collapsed\")){self::*{self::*{self::*{self::*{self::*'.split(\"{\"),[\"SpecializedRule\",\"collapsed\",\"default\",\"brief\"],\n[\"SpecializedRule\",\"collapsed\",\"brief\",\"sbrief\"],\"Rule;stree;default;[n] ./*[1];self::stree;CQFresetNesting\".split(\";\"),[\"Rule\",\"unknown\",\"default\",\"[n] text()\",\"self::unknown\"],'Rule;protected;default;[t] text();self::number;contains(@grammar, \"protected\")'.split(\";\"),[\"Rule\",\"omit-empty\",\"default\",\"[p] (pause:100)\",\"self::empty\"],'Rule;blank-empty;default;[t] \"leer\";self::empty;count(../*)=1;name(../..)=\"cell\" or name(../..)=\"line\"'.split(\";\"),'Rule{font{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::*{name(self::*)!=\"number\"{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),\n'Rule{font-number{default{[t] @font (grammar:localFontNumber); [n] . (grammar:ignoreFont=@font){self::number{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),'Rule{font-identifier-short{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"normal\"{\"\"=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\"){@role!=\"unit\"'.split(\"{\"),\n'Rule{font-identifier{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1 or string-length(text())=2{@font{@font=\"normal\"{not(contains(@grammar, \"ignoreFont\")){@role!=\"unit\"'.split(\"{\"),'Rule;omit-font;default;[n] . (grammar:ignoreFont=@font);self::identifier;string-length(text())=1 or string-length(text())=2;@font;not(contains(@grammar, \"ignoreFont\"));@font=\"italic\";self::*'.split(\";\"),'Rule{font-double-struck{default{[n] . (grammar:ignoreFont=@font); [t] @font (grammar:localFont){self::*{name(self::*)!=\"number\"{string-length(text())=1 or string-length(text())=2{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"double-struck\"'.split(\"{\"),\n'Rule{font-number-double-struck{default{[n] . (grammar:ignoreFont=@font); [t] @font (grammar:localFontNumber){self::number{string-length(text())=1 or string-length(text())=2{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"double-struck\"'.split(\"{\"),[\"Rule\",\"number\",\"default\",\"[n] text()\",\"self::number\"],'Rule,mixed-number,default,[n] children/*[1]; [n] children/*[2]; ,self::number,@role=\"mixed\"'.split(\",\"),'Rule{number-with-chars{default{[t] \"Zahl\"; [m] CQFspaceoutNumber (grammar:protected){self::number{@role=\"othernumber\"{\"\" != translate(text(), \"0123456789.,\", \"\"){not(contains(@grammar, \"protected\"))'.split(\"{\"),\n'Rule{number-as-upper-word{default{[t] \"Wort gro\\u00df\"; [t] CSFspaceoutText{self::number{string-length(text())>1{text()=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\", \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\"){\"\"=translate(text(), \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\",\"\")'.split(\"{\"),\n[\"SpecializedRule\",\"number-as-upper-word\",\"default\",\"brief\"],[\"SpecializedRule\",\"number-as-upper-word\",\"default\",\"sbrief\"],'Rule{number-baseline{default{[t] \"Grundlinie\"; [n] . (grammar:baseline){self::number{not(contains(@grammar, \"ignoreFont\")){preceding-sibling::identifier{not(contains(@grammar, \"baseline\")){preceding-sibling::*[1][@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]{parent::*/parent::infixop[@role=\"implicit\"]'.split(\"{\"),[\"SpecializedRule\",\"number-baseline\",\"default\",\n\"brief\",'[t] \"Grund\"; [n] . (grammar:baseline)'],[\"SpecializedRule\",\"number-baseline\",\"brief\",\"sbrief\"],'Rule{number-baseline-font{default{[t] \"Grundlinie\"; [t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::number{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"{preceding-sibling::identifier{preceding-sibling::*[@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]{parent::*/parent::infixop[@role=\"implicit\"]'.split(\"{\"),[\"SpecializedRule\",\"number-baseline-font\",\n\"default\",\"brief\",'[t] \"Grund\"; [t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font)'],[\"SpecializedRule\",\"number-baseline-font\",\"brief\",\"sbrief\"],'Rule;identifier;default;[m] CQFspaceoutIdentifier;self::identifier;string-length(text())>1;@role!=\"unit\";not(@font) or @font=\"normal\" or contains(@grammar, \"ignoreFont\");text()!=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\")'.split(\";\"),\n[\"Rule\",\"identifier\",\"default\",\"[n] text()\",\"self::identifier\"],'Rule,negative,default,[t] \"minus\"; [n] children/*[1],self::prefixop,@role=\"negative\",children/identifier'.split(\",\"),[\"Aliases\",\"negative\",\"self::prefixop\",'@role=\"negative\"',\"children/number\"],[\"Aliases\",\"negative\",\"self::prefixop\",'@role=\"negative\"','children/fraction[@role=\"vulgar\"]'],'Rule,negative,default,[t] \"minus\"; [n] children/*[1],self::prefixop,@role=\"negative\"'.split(\",\"),[\"Rule\",\"prefix\",\"default\",\"[m] content/*; [n] children/*[1]\",\n\"self::prefixop\"],[\"Rule\",\"postfix\",\"default\",\"[n] children/*[1]; [m] content/*\",\"self::postfixop\"],[\"Rule\",\"binary-operation\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator);\",\"self::infixop\"],'Rule;implicit;default;[m] children/*;self::infixop;@role=\"implicit\"'.split(\";\"),[\"Aliases\",\"implicit\",\"self::infixop\",'@role=\"leftsuper\" or @role=\"leftsub\" or @role=\"rightsuper\" or @role=\"rightsub\"'],'Rule,subtraction,default,[m] children/* (separator:\"minus\");,self::infixop,@role=\"subtraction\"'.split(\",\"),\n[\"Rule\",\"function-unknown\",\"default\",\"[n] children/*[1]; [n] children/*[2]\",\"self::appl\"],'Rule,function-prefix,default,[n] children/*[1]; [n] children/*[2],self::appl,children/*[1][@role=\"prefix function\"]'.split(\",\"),'Rule,fences-open-close,default,[n] content/*[1]; [n] children/*[1]; [n] content/*[2],self::fenced,@role=\"leftright\"'.split(\",\"),'Rule,fences-neutral,default,[t] \"Anfang Betrag\"; [n] children/*[1]; [t] \"Ende Betrag\",self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),\n[\"SpecializedRule\",\"fences-neutral\",\"default\",\"sbrief\",'[t] \"Betrag\"; [n] children/*[1]; [t] \"Ende Betrag\"'],'Rule,fences-neutral,default,[n] content/*[1]; [n] children/*[1]; [n] content/*[2],self::fenced,@role=\"neutral\"'.split(\",\"),'Rule,fences-set,default,[t] \"Anfang Menge\"; [n] children/*[1]; [t] \"Ende Menge\",self::fenced,@role=\"set empty\" or @role=\"set extended\" or @role=\"set singleton\" or @role=\"set collection\",not(name(../..)=\"appl\")'.split(\",\"),[\"SpecializedRule\",\"fences-set\",\"default\",\"sbrief\",\n'[t] \"Menge\"; [n] children/*[1]; [t] \"Ende Menge\"'],[\"Rule\",\"text\",\"default\",\"[n] text()\",\"self::text\"],'Rule;factorial;default;[t] \"Fakult\\u00e4t\";self::punctuation;text()=\"!\";name(preceding-sibling::*[1])!=\"text\"'.split(\";\"),'Rule;minus;default;[t] \"minus\";self::operator;text()=\"-\"'.split(\";\"),'Rule;single-prime;default;[t] \"Strich\";self::punctuated;@role=\"prime\";count(children/*)=1'.split(\";\"),'Rule;double-prime;default;[t] \"zwei Strich\";self::punctuated;@role=\"prime\";count(children/*)=2'.split(\";\"),\n'Rule;triple-prime;default;[t] \"drei Strich\";self::punctuated;@role=\"prime\";count(children/*)=3'.split(\";\"),'Rule;quadruple-prime;default;[t] \"vier Strich\";self::punctuated;@role=\"prime\";count(children/*)=4'.split(\";\"),'Rule,counted-prime,default,[t] count(children/*); [t] \"Strich\",self::punctuated,@role=\"prime\"'.split(\",\"),[\"Rule\",\"fraction\",\"default\",\"[t] CSFopenFracVerbose; [n] children/*[1]; [t] CSFoverFracVerbose; [n] children/*[2]; [t] CSFcloseFracVerbose\",\"self::fraction\"],[\"Rule\",\"fraction\",\n\"brief\",\"[t] CSFopenFracBrief; [n] children/*[1]; [t] CSFoverFracVerbose; [n] children/*[2]; [t] CSFcloseFracBrief\",\"self::fraction\"],[\"Rule\",\"fraction\",\"sbrief\",\"[t] CSFopenFracSbrief; [n] children/*[1]; [t] CSFoverFracSbrief; [n] children/*[2]; [t] CSFcloseFracSbrief\",\"self::fraction\"],'Rule;vulgar-fraction;default;[t] CSFvulgarFraction (grammar:correctOne);self::fraction;@role=\"vulgar\";CQFvulgarFractionSmall'.split(\";\"),[\"SpecializedRule\",\"vulgar-fraction\",\"default\",\"brief\"],[\"SpecializedRule\",\n\"vulgar-fraction\",\"default\",\"sbrief\"],'Rule,continued-fraction-outer,default,[t] \"Kettenbruch\"; [n] children/*[1];[t] \"durch\"; [n] children/*[2],self::fraction,not(ancestor::fraction),children/*[2]/descendant-or-self::*[@role=\"ellipsis\" and not(following-sibling::*)]'.split(\",\"),'Rule,continued-fraction-inner,default,[t] \"Anfang Bruch\"; [n] children/*[1];[t] \"durch\"; [n] children/*[2],self::fraction,ancestor::fraction,children/*[2]/descendant-or-self::*[@role=\"ellipsis\" and not(following-sibling::*)]'.split(\",\"),\n[\"SpecializedRule\",\"continued-fraction-inner\",\"default\",\"sbrief\",'[t] \"Bruch\"; [n] children/*[1];[t] \"durch\"; [n] children/*[2]'],[\"Rule\",\"sqrt\",\"default\",\"[t] CSFopenRadicalVerbose; [n] children/*[1]; [t] CSFcloseRadicalVerbose\",\"self::sqrt\"],[\"Rule\",\"sqrt\",\"brief\",\"[t] CSFopenRadicalBrief; [n] children/*[1]; [t] CSFcloseRadicalBrief\",\"self::sqrt\"],[\"Rule\",\"sqrt\",\"sbrief\",\"[t] CSFopenRadicalSbrief; [n] children/*[1]; [t] CSFcloseRadicalBrief\",\"self::sqrt\"],\"Rule,root-small,default,[t] CSFopenRadicalVerbose; [n] children/*[2]; [t] CSFcloseRadicalVerbose,self::root,children/*[1][text()=3 or text()=2]\".split(\",\"),\n\"Rule,root-small,brief,[t] CSFopenRadicalBrief; [n] children/*[2]; [t] CSFcloseRadicalBrief,self::root,children/*[1][text()=3 or text()=2]\".split(\",\"),\"Rule,root-small,sbrief,[t] CSFopenRadicalSbrief; [n] children/*[2]; [t] CSFcloseRadicalBrief,self::root,children/*[1][text()=3 or text()=2]\".split(\",\"),[\"Rule\",\"root\",\"default\",\"[t] CSFindexRadicalVerbose; [n] children/*[1];[t] CSFopenRadicalVerbose; [n] children/*[2]; [t] CSFcloseRadicalVerbose\",\"self::root\"],[\"Rule\",\"root\",\"brief\",\"[t] CSFindexRadicalBrief; [n] children/*[1];[t] CSFopenRadicalBrief; [n] children/*[2]; [t] CSFcloseRadicalBrief\",\n\"self::root\"],[\"Rule\",\"root\",\"sbrief\",\"[t] CSFindexRadicalSbrief; [n] children/*[1];[t] CSFopenRadicalSbrief; [n] children/*[2]; [t] CSFcloseRadicalBrief\",\"self::root\"],'Rule,limboth,default,[n] children/*[1]; [t] CSFunderscript; [n] children/*[2];[t] CSFoverscript; [n] children/*[3],self::limboth,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),'Rule,limlower,default,[n] children/*[1]; [t] CSFunderscript; [n] children/*[2];,self::limlower,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),\n'Rule,limupper,default,[n] children/*[1]; [t] CSFoverscript; [n] children/*[2];,self::limupper,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),'Aliases;limlower;self::underscore;@role=\"limit function\";name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),'Aliases;limlower;self::underscore;children/*[2][@role!=\"underaccent\"];name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),\n'Aliases;limupper;self::overscore;children/*[2][@role!=\"overaccent\"];name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),[\"Rule\",\"limboth-end\",\"default\",'[n] children/*[1]; [t] CSFunderscript; [n] children/*[2];[t] CSFoverscript; [n] children/*[3]; [t] \"Ende \\u00dcberschrift\"',\"self::limboth\"],[\"Rule\",\"limlower-end\",\"default\",'[n] children/*[1]; [t] CSFunderscript; [n] children/*[2]; [t] \"Ende Unterschrift\"',\"self::limlower\"],\n[\"Rule\",\"limupper-end\",\"default\",'[n] children/*[1]; [t] CSFoverscript; [n] children/*[2]; [t] \"Ende \\u00dcberschrift\"',\"self::limupper\"],[\"Aliases\",\"limlower-end\",\"self::underscore\",'@role=\"limit function\"'],[\"Aliases\",\"limlower-end\",\"self::underscore\"],[\"Aliases\",\"limupper-end\",\"self::overscore\"],[\"Rule\",\"integral\",\"default\",\"[n] children/*[1]; [n] children/*[2]; [n] children/*[3];\",\"self::integral\"],'Rule,integral,default,[n] children/*[1]; [t] \"Index\"; [n] children/*[2];[t] \"Hoch\"; [n] children/*[3]; [t] \"Grundlinie\";,self::limboth,@role=\"integral\"'.split(\",\"),\n[\"SpecializedRule\",\"integral\",\"default\",\"brief\",'[n] children/*[1]; [t] \"Index\"; [n] children/*[2];[t] \"Hoch\"; [n] children/*[3]; [t] \"Base\";'],[\"SpecializedRule\",\"integral\",\"brief\",\"sbrief\"],[\"Rule\",\"bigop\",\"default\",\"[n] children/*[1]; [n] children/*[2];\",\"self::bigop\"],[\"Rule\",\"relseq\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::relseq\"],'Rule,equality,default,[n] children/*[1]; [n] content/*[1]; [n] children/*[2],self::relseq,@role=\"equality\",count(./children/*)=2'.split(\",\"),\n'Rule;multi-equality;default;[m] children/* (sepFunc:CTXFcontentIterator);self::relseq;@role=\"equality\";count(./children/*)>2'.split(\";\"),[\"Rule\",\"multrel\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::multirel\"],[\"Rule\",\"subscript\",\"default\",\"[n] children/*[1]; [t] CSFsubscriptVerbose; [n] children/*[2]\",\"self::subscript\"],[\"Rule\",\"subscript\",\"brief\",\"[n] children/*[1]; [t] CSFsubscriptBrief; [n] children/*[2]\",\"self::subscript\"],[\"SpecializedRule\",\"subscript\",\"brief\",\"sbrief\"],\n'Rule,subscript-simple,default,[n] children/*[1]; [n] children/*[2],self::subscript,name(./children/*[1])=\"identifier\",name(./children/*[2])=\"number\",./children/*[2][@role!=\"mixed\"],./children/*[2][@role!=\"othernumber\"]'.split(\",\"),[\"SpecializedRule\",\"subscript-simple\",\"default\",\"brief\"],[\"SpecializedRule\",\"subscript-simple\",\"default\",\"sbrief\"],'Rule,subscript-baseline,default,[n] children/*[1]; [t] CSFsubscriptVerbose; [n] children/*[2]; [t] CSFbaselineVerbose,self::subscript,following-sibling::*,not(name(following-sibling::subscript/children/*[1])=\"empty\" or (name(following-sibling::infixop[@role=\"implicit\"]/children/*[1])=\"subscript\" and name(following-sibling::*/children/*[1]/children/*[1])=\"empty\")) and @role!=\"subsup\",not(following-sibling::*[@role=\"rightsuper\" or @role=\"rightsub\" or @role=\"leftsub\" or @role=\"leftsub\"])'.split(\",\"),\n[\"SpecializedRule\",\"subscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsubscriptBrief; [n] children/*[2]; [t] CSFbaselineBrief\"],[\"SpecializedRule\",\"subscript-baseline\",\"brief\",\"sbrief\"],'Aliases;subscript-baseline;self::subscript;not(following-sibling::*);ancestor::fenced|ancestor::root|ancestor::sqrt|ancestor::punctuated|ancestor::fraction;not(ancestor::punctuated[@role=\"leftsuper\" or @role=\"rightsub\" or @role=\"rightsuper\" or @role=\"rightsub\"])'.split(\";\"),[\"Aliases\",\"subscript-baseline\",\n\"self::subscript\",\"not(following-sibling::*)\",\"ancestor::relseq|ancestor::multirel\",sre.MathspeakUtil.generateBaselineConstraint()],[\"Aliases\",\"subscript-baseline\",\"self::subscript\",\"not(following-sibling::*)\",\"@embellished\"],'Rule,subscript-empty-sup,default,[n] children/*[1]; [n] children/*[2],self::subscript,name(children/*[2])=\"infixop\",name(children/*[2][@role=\"implicit\"]/children/*[1])=\"superscript\",name(children/*[2]/children/*[1]/children/*[1])=\"empty\"'.split(\",\"),[\"SpecializedRule\",\"subscript-empty-sup\",\n\"default\",\"brief\"],[\"SpecializedRule\",\"subscript-empty-sup\",\"brief\",\"sbrief\"],[\"Aliases\",\"subscript-empty-sup\",\"self::subscript\",'name(children/*[2])=\"superscript\"','name(children/*[2]/children/*[1])=\"empty\"'],[\"Rule\",\"superscript\",\"default\",\"[n] children/*[1]; [t] CSFsuperscriptVerbose; [n] children/*[2]\",\"self::superscript\"],[\"SpecializedRule\",\"superscript\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsuperscriptBrief; [n] children/*[2]\"],[\"SpecializedRule\",\"superscript\",\"brief\",\"sbrief\"],'Rule,superscript-baseline,default,[n] children/*[1]; [t] CSFsuperscriptVerbose; [n] children/*[2];[t] CSFbaselineVerbose,self::superscript,following-sibling::*,not(name(following-sibling::superscript/children/*[1])=\"empty\" or (name(following-sibling::infixop[@role=\"implicit\"]/children/*[1])=\"superscript\" and name(following-sibling::*/children/*[1]/children/*[1])=\"empty\")) and not(following-sibling::*[@role=\"rightsuper\" or @role=\"rightsub\" or @role=\"leftsub\" or @role=\"leftsub\"])'.split(\",\"),\n[\"SpecializedRule\",\"superscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsuperscriptBrief; [n] children/*[2];[t] CSFbaselineBrief\"],[\"SpecializedRule\",\"superscript-baseline\",\"brief\",\"sbrief\"],'Aliases;superscript-baseline;self::superscript;not(following-sibling::*);ancestor::punctuated;ancestor::*/following-sibling::* and not(ancestor::punctuated[@role=\"leftsuper\" or @role=\"rightsub\" or @role=\"rightsuper\" or @role=\"rightsub\"])'.split(\";\"),[\"Aliases\",\"superscript-baseline\",\"self::superscript\",\n\"not(following-sibling::*)\",\"ancestor::fraction|ancestor::fenced|ancestor::root|ancestor::sqrt\"],[\"Aliases\",\"superscript-baseline\",\"self::superscript\",\"not(following-sibling::*)\",\"ancestor::relseq|ancestor::multirel\",\"not(@embellished)\",sre.MathspeakUtil.generateBaselineConstraint()],'Aliases superscript-baseline self::superscript not(following-sibling::*) @embellished not(children/*[2][@role=\"prime\"])'.split(\" \"),'Rule,superscript-empty-sub,default,[n] children/*[1]; [n] children/*[2],self::superscript,name(children/*[2])=\"infixop\",name(children/*[2][@role=\"implicit\"]/children/*[1])=\"subscript\",name(children/*[2]/children/*[1]/children/*[1])=\"empty\"'.split(\",\"),\n[\"SpecializedRule\",\"superscript-empty-sub\",\"default\",\"brief\"],[\"SpecializedRule\",\"superscript-empty-sub\",\"brief\",\"sbrief\"],[\"Aliases\",\"superscript-empty-sub\",\"self::superscript\",'name(children/*[2])=\"subscript\"','name(children/*[2]/children/*[1])=\"empty\"'],'Rule,square,default,[n] children/*[1]; [t] \"Quadrat\",self::superscript,children/*[2],children/*[2][text()=2],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),name(children/*[1])!=\"subscript\" or (name(children/*[1])=\"subscript\" and name(children/*[1]/children/*[1])=\"identifier\" and name(children/*[1]/children/*[2])=\"number\" and children/*[1]/children/*[2][@role!=\"mixed\"] and children/*[1]/children/*[2][@role!=\"othernumber\"]),not(@embellished)'.split(\",\"),\n[\"SpecializedRule\",\"square\",\"default\",\"brief\"],[\"SpecializedRule\",\"square\",\"default\",\"sbrief\"],'Aliases;square;self::superscript;children/*[2];children/*[2][text()=2];@embellished;children/*[1][@role=\"prefix operator\"]'.split(\";\"),'Rule,cube,default,[n] children/*[1]; [t] \"Kubik\",self::superscript,children/*[2],children/*[2][text()=3],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),name(children/*[1])!=\"subscript\" or (name(children/*[1])=\"subscript\" and name(children/*[1]/children/*[1])=\"identifier\" and name(children/*[1]/children/*[2])=\"number\" and children/*[1]/children/*[2][@role!=\"mixed\"] and children/*[1]/children/*[2][@role!=\"othernumber\"]),not(@embellished)'.split(\",\"),\n[\"SpecializedRule\",\"cube\",\"default\",\"brief\"],[\"SpecializedRule\",\"cube\",\"default\",\"sbrief\"],'Aliases;cube;self::superscript;children/*[2];children/*[2][text()=3];@embellished;children/*[1][@role=\"prefix operator\"]'.split(\";\"),'Rule,prime,default,[n] children/*[1]; [n] children/*[2],self::superscript,children/*[2],children/*[2][@role=\"prime\"]'.split(\",\"),[\"SpecializedRule\",\"prime\",\"default\",\"brief\"],[\"SpecializedRule\",\"prime\",\"default\",\"sbrief\"],'Rule,prime-subscript,default,[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptVerbose; [n] children/*[1]/children/*[2],self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",not(following-sibling::*)'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript\",\"default\",\"brief\",\"[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptBrief; [n] children/*[1]/children/*[2]\"],[\"SpecializedRule\",\"prime-subscript\",\"brief\",\"sbrief\"],'Rule,prime-subscript-baseline,default,[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptVerbose; [n] children/*[1]/children/*[2]; [t] CSFbaselineVerbose,self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",following-sibling::*'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptBrief; [n] children/*[1]/children/*[2]; [t] CSFbaselineBrief\"],[\"SpecializedRule\",\"prime-subscript-baseline\",\"brief\",\"sbrief\"],'Aliases prime-subscript-baseline self::superscript children/*[2][@role=\"prime\"] name(children/*[1])=\"subscript\" not(following-sibling::*) @embellished'.split(\" \"),'Rule,prime-subscript-simple,default,[n] children/*[1]/children/*[1]; [n] children/*[2];[n] children/*[1]/children/*[2],self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",name(children/*[1]/children/*[1])=\"identifier\",name(children/*[1]/children/*[2])=\"number\",children/*[1]/children/*[2][@role!=\"mixed\"],children/*[1]/children/*[2][@role!=\"othernumber\"]'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript-simple\",\"default\",\"brief\"],[\"SpecializedRule\",\"prime-subscript-simple\",\"default\",\"sbrief\"],'Rule,overscore,default,[t] \"modifiziert oben\"; [n] children/*[1]; [t] \"mit\"; [n] children/*[2],self::overscore,children/*[2][@role=\"overaccent\"]'.split(\",\"),[\"SpecializedRule\",\"overscore\",\"default\",\"brief\",'[t] \"mod oben\"; [n] children/*[1]; [t] \"mit\"; [n] children/*[2]'],[\"SpecializedRule\",\"overscore\",\"brief\",\"sbrief\"],'Rule,double-overscore,default,[t] \"modifiziert oben oben\"; [n] children/*[1]; [t] \"mit\"; [n] children/*[2],self::overscore,children/*[2][@role=\"overaccent\"],name(children/*[1])=\"overscore\",children/*[1]/children/*[2][@role=\"overaccent\"]'.split(\",\"),\n[\"SpecializedRule\",\"double-overscore\",\"default\",\"brief\",'[t] \"mod oben oben\"; [n] children/*[1]; [t] \"mit\"; [n] children/*[2]'],[\"SpecializedRule\",\"double-overscore\",\"brief\",\"sbrief\"],'Rule,underscore,default,[t] \"modifiziert unten\"; [n] children/*[1]; [t] \"mit\"; [n] children/*[2],self::underscore,children/*[2][@role=\"underaccent\"]'.split(\",\"),[\"SpecializedRule\",\"underscore\",\"default\",\"brief\",'[t] \"mod unten\"; [n] children/*[1]; [t] \"mit\"; [n] children/*[2]'],[\"SpecializedRule\",\"underscore\",\"brief\",\n\"sbrief\"],'Rule,double-underscore,default,[t] \"modifiziert unten unten\"; [n] children/*[1]; [t] \"mit\"; [n] children/*[2],self::underscore,children/*[2][@role=\"underaccent\"],name(children/*[1])=\"underscore\",children/*[1]/children/*[2][@role=\"underaccent\"]'.split(\",\"),[\"SpecializedRule\",\"double-underscore\",\"default\",\"brief\",'[t] \"mod unten unten\"; [n] children/*[1]; [t] \"mit\"; [n] children/*[2]'],[\"SpecializedRule\",\"double-underscore\",\"brief\",\"sbrief\"],'Rule,overbar,default,[n] children/*[1]; [t] \"\\u00dcberstrich\",self::overscore,@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][@role=\"overaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),\n'Rule,underbar,default,[n] children/*[1]; [t] \"Unterstrich\",self::underscore,@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][@role=\"underaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),'Rule,overtilde,default,[n] children/*[1]; [t] \"Tilde oben\",self::overscore,children/*[2][@role=\"overaccent\"],@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][text()=\"~\" or text()=\"\\u02dc\" or text()=\"\\u223c\" or text()=\"\\uff5e\"]'.split(\",\"),\n'Rule,undertilde,default,[n] children/*[1]; [t] \"Tilde unten\",self::underscore,@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][@role=\"underaccent\"],children/*[2][text()=\"~\" or text()=\"\\u02dc\" or text()=\"\\u223c\" or text()=\"\\uff5e\"]'.split(\",\"),'Rule,matrix-fence,default,[n] children/*[1];,self::fenced,count(children/*)=1,name(children/*[1])=\"matrix\"'.split(\",\"),[\"Rule\",\"matrix\",\"default\",'[t] \"Anfang\"; [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Matrize\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile \"); [t] \"Ende Matrize\"',\n\"self::matrix\"],[\"Rule\",\"matrix\",\"sbrief\",'[t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Matrize\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile \"); [t] \"Ende Matrize\"',\"self::matrix\"],[\"Aliases\",\"matrix\",\"self::vector\"],[\"Rule\",\"matrix-row\",\"default\",'[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Spalte\");[p] (pause: 200)',\"self::row\"],'Rule{row-with-label{default{[t] \"mit Bezeichner\"; [n] content/*[1]; [t] \"Ende Bezeichner\"(pause: 200); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Spalte\"){self::row{content'.split(\"{\"),\n'Rule{row-with-label{brief{[t] \"Bezeichner\"; [n] content/*[1]; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Spalte\"){self::row{content'.split(\"{\"),[\"SpecializedRule\",\"row-with-label\",\"brief\",\"sbrief\"],'Rule{row-with-text-label{sbrief{[t] \"Bezeichner\"; [t] CSFRemoveParens;[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Spalte\"){self::row{content{name(content/cell/children/*[1])=\"text\"'.split(\"{\"),'Rule;empty-row;default;[t] \"Blank\";self::row;count(children/*)=0'.split(\";\"),[\"Rule\",\"matrix-cell\",\n\"default\",\"[n] children/*[1]; [p] (pause: 300)\",\"self::cell\"],'Rule,empty-cell,default,[t] \"leer\"; [p] (pause: 300),self::cell,count(children/*)=0'.split(\",\"),'Rule{determinant{default{[t] \"Anfang\"; [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Determinante\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile \"); [t] \"Ende Determinante\"{self::matrix{@role=\"determinant\"'.split(\"{\"),[\"SpecializedRule\",\"determinant\",\"default\",\"sbrief\",'[t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Determinante\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile \"); [t] \"Ende Determinante\"'],\n'Rule{determinant-simple{default{[t] \"Anfang\"; [t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Determinante\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile\",grammar:simpleDet); [t] \"Ende Determinante\"{self::matrix{@role=\"determinant\"{CQFdetIsSimple'.split(\"{\"),[\"SpecializedRule\",\"determinant-simple\",\"default\",\"sbrief\",'[t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Determinante\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile\",grammar:simpleDet); [t] \"Ende Determinante\"'],\n'Rule{row-simple{default{[m] children/*;{self::row{@role=\"determinant\"{contains(@grammar, \"simpleDet\")'.split(\"{\"),[\"Rule\",\"layout\",\"default\",'[t] \"Anfang Anordnung\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile \"); [t] \"Ende Anordnung\"',\"self::table\"],[\"Rule\",\"layout\",\"sbrief\",'[t] \"Anordnung\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile \"); [t] \"Ende Anordnung\"',\"self::table\"],'Rule,binomial,default,[t] \"Anfang Binomialkoeffizient\"; [n] children/*[2]/children/*[1]; [t] \"aus\";  [n] children/*[1]/children/*[1]; [t] \"Ende Binomialkoeffizient\",self::vector,@role=\"binomial\"'.split(\",\"),\n'Rule,binomial,brief,[t] \"Anfang Binomial\"; [n] children/*[2]/children/*[1]; [t] \"aus\";  [n] children/*[1]/children/*[1]; [t] \"Ende Binomial\",self::vector,@role=\"binomial\"'.split(\",\"),'Rule,binomial,sbrief,[t] \"Binomial\"; [n] children/*[2]/children/*[1]; [t] \"aus\";  [n] children/*[1]/children/*[1]; [t] \"Ende Binomial\",self::vector,@role=\"binomial\"'.split(\",\"),[\"Rule\",\"cases\",\"default\",'[t] \"Anfang Fallunterscheidung\"; [t] \"gro\\u00dfe\"; [n] content/*[1];[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile \"); [t] \"Ende Fallunterscheidung\"',\n\"self::cases\"],[\"Rule\",\"cases\",\"brief\",'[t] \"Anfang F\\u00e4lle\"; [t] \"gro\\u00dfe\"; [n] content/*[1];[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile \"); [t] \"Ende F\\u00e4lle\"',\"self::cases\"],[\"Rule\",\"cases\",\"sbrief\",'[t] \"F\\u00e4lle\"; [t] \"gro\\u00dfe\"; [n] content/*[1];[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Zeile \"); [t] \"Ende F\\u00e4lle\"',\"self::cases\"],[\"Aliases\",\"layout\",\"self::multiline\"],[\"Rule\",\"line\",\"default\",\"[m] children/*\",\"self::line\"],'Rule,line-with-label,default,[t] \"mit Bezeichner\"; [n] content/*[1]; [t] \"Ende Bezeichner\" (pause: 200); [m] children/*,self::line,content'.split(\",\"),\n[\"SpecializedRule\",\"line-with-label\",\"default\",\"brief\",'[t] \"Bezeichner\"; [n] content/*[1] (pause: 200); [m] children/*'],[\"SpecializedRule\",\"line-with-label\",\"brief\",\"sbrief\"],'Rule,line-with-text-label,sbrief,[t] \"Bezeichner\"; [t] CSFRemoveParens; [m] children/*,self::line,content,name(content/cell/children/*[1])=\"text\"'.split(\",\"),'Rule;empty-line;default;[t] \"leer\";self::line;count(children/*)=0;not(content)'.split(\";\"),[\"SpecializedRule\",\"empty-line\",\"default\",\"brief\"],[\"SpecializedRule\",\"empty-line\",\n\"brief\",\"sbrief\"],'Rule,empty-line-with-label,default,[t] \"mit Bezeichner\"; [n] content/*[1]; [t] \"Ende Bezeichner\"(pause: 200); [t] \"leer\",self::line,count(children/*)=0,content'.split(\",\"),[\"SpecializedRule\",\"empty-line-with-label\",\"default\",\"brief\",'[t] \"Bezeichner\"; [n] content/*[1] (pause: 200); [t] \"leer\"'],[\"SpecializedRule\",\"empty-line-with-label\",\"brief\",\"sbrief\"],[\"Rule\",\"enclose\",\"default\",'[t] \"Anfang Umschlie\\u00dfung\"; [t] @role (grammar:localEnclose); [n] children/*[1]; [t] \"Ende Umschlie\\u00dfung\"',\n\"self::enclose\"],[\"Aliases\",\"overbar\",\"self::enclose\",'@role=\"top\"'],[\"Aliases\",\"underbar\",\"self::enclose\",'@role=\"bottom\"'],'Rule,leftbar,default,[t] \"senkrechter Strich\"; [n] children/*[1],self::enclose,@role=\"left\"'.split(\",\"),'Rule,rightbar,default,[n] children/*[1]; [t] \"senkrechter Strich\",self::enclose,@role=\"right\"'.split(\",\"),'Rule,crossout,default,[t] \"durchgestrichen\"; [n] children/*[1]; [t] \"Ende duchgestrichen\",self::enclose,@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'.split(\",\"),\n'Rule,cancel,default,[t] \"durchgestrichen\"; [n] children/*[1]/children/*[1]; [t] \"mit\"; [n] children/*[2]; [t] \"Ende duchgestrichen\",self::overscore,@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'.split(\",\"),[\"SpecializedRule\",\"cancel\",\"default\",\"brief\"],[\"SpecializedRule\",\"cancel\",\"default\",\"sbrief\"],[\"Aliases\",\"cancel\",\"self::underscore\",'@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'],'Rule,cancel-reverse,default,[t] \"durchgestrichen\"; [n] children/*[2]/children/*[1]; [t] \"mit\"; [n] children/*[1]; [t] \"Ende duchgestrichen\",self::overscore,name(children/*[2])=\"enclose\",children/*[2][@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"]'.split(\",\"),\n[\"SpecializedRule\",\"cancel-reverse\",\"default\",\"brief\"],[\"SpecializedRule\",\"cancel-reverse\",\"default\",\"sbrief\"],[\"Aliases\",\"cancel-reverse\",\"self::underscore\",'name(children/*[2])=\"enclose\"','children/*[2][@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"]'],'Rule;end-punct;default;[m] children/*;self::punctuated;@role=\"endpunct\"'.split(\";\"),'Rule,start-punct,default,[n] content/*[1]; [m] children/*[position()>1],self::punctuated,@role=\"startpunct\"'.split(\",\"),'Rule,integral-punct,default,[n] children/*[1]; [n] children/*[3],self::punctuated,@role=\"integral\"'.split(\",\"),\n[\"Rule\",\"punctuated\",\"default\",\"[m] children/*\",\"self::punctuated\"],'Rule;unit;default;[t] text() (grammar:annotation=\"unit\":translate:plural);self::identifier;@role=\"unit\"'.split(\";\"),'Rule,unit-square,default,[t] \"Quadrat\"; [n] children/*[1],self::superscript,@role=\"unit\",children/*[2][text()=2],name(children/*[1])=\"identifier\"'.split(\",\"),'Rule,unit-cubic,default,[t] \"Kubik\"; [n] children/*[1],self::superscript,@role=\"unit\",children/*[2][text()=3],name(children/*[1])=\"identifier\"'.split(\",\"),'Rule,reciprocal,default,[n] children/*[1]; [t] \"invers\",self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],count(preceding-sibling::*)=0 or preceding-sibling::*[@role!=\"unit\"]'.split(\",\"),\n'Rule,reciprocal,default,[t] \"pro\"; [n] children/*[1],self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],preceding-sibling::*[@role=\"unit\"]'.split(\",\"),'Rule;unit-combine;default;[m] children/*;self::infixop;@role=\"unit\"'.split(\";\"),'Rule,unit-divide,default,[n] children/*[1]; [t] \"pro\"; [n] children/*[2],self::fraction,@role=\"unit\"'.split(\",\"),[\"Rule\",\"inference\",\"default\",'[t] \"Schlussregel\"; [m] content/*; [t] \"mit Folgerung\"; [n] children/*[1]; [t] \"aus\"; [t] count(children/*[2]/children/*); [t] \"Pr\\u00e4missen\"',\n\"self::inference\"],'Rule,inference,default,[t] \"Schlussregel\"; ; [m] content/*; [t] \"mit Folgerung\"; [n] children/*[1]; [t] \"aus\"; [t] count(children/*[2]/children/*); [t] \"Pr\\u00e4misse\",self::inference,count(children/*[2]/children/*)<2'.split(\",\"),[\"Rule\",\"premise\",\"default\",'[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Pr\\u00e4misse \");',\"self::premises\"],[\"Rule\",\"conclusion\",\"default\",\"[n] children/*[1]\",\"self::conclusion\"],[\"Rule\",\"label\",\"default\",'[t] \"Regel\"; [n] children/*[1]',\"self::rulelabel\"],\n'Rule,axiom,default,[t] \"Axiom\"; [m] children/*[1];,self::inference,@role=\"axiom\"'.split(\",\"),'Rule,axiom,default,[t] \"leeres Axiom\";,self::empty,@role=\"axiom\"'.split(\",\")],initialize:[sre.MathspeakUtil.generateTensorRules]};sre.MathspeakRules={domain:\"mathspeak\",functions:[[\"CQF\",\"CQFspaceoutNumber\",sre.MathspeakUtil.spaceoutNumber],[\"CQF\",\"CQFspaceoutIdentifier\",sre.MathspeakUtil.spaceoutIdentifier],[\"CSF\",\"CSFspaceoutText\",sre.MathspeakUtil.spaceoutText],[\"CSF\",\"CSFopenFracVerbose\",sre.MathspeakUtil.openingFractionVerbose],[\"CSF\",\"CSFcloseFracVerbose\",sre.MathspeakUtil.closingFractionVerbose],[\"CSF\",\"CSFoverFracVerbose\",sre.MathspeakUtil.overFractionVerbose],[\"CSF\",\"CSFopenFracBrief\",sre.MathspeakUtil.openingFractionBrief],\n[\"CSF\",\"CSFcloseFracBrief\",sre.MathspeakUtil.closingFractionBrief],[\"CSF\",\"CSFopenFracSbrief\",sre.MathspeakUtil.openingFractionSbrief],[\"CSF\",\"CSFcloseFracSbrief\",sre.MathspeakUtil.closingFractionSbrief],[\"CSF\",\"CSFoverFracSbrief\",sre.MathspeakUtil.overFractionSbrief],[\"CSF\",\"CSFvulgarFraction\",sre.NumbersUtil.vulgarFraction],[\"CQF\",\"CQFvulgarFractionSmall\",sre.MathspeakUtil.isSmallVulgarFraction],[\"CSF\",\"CSFopenRadicalVerbose\",sre.MathspeakUtil.openingRadicalVerbose],[\"CSF\",\"CSFcloseRadicalVerbose\",\nsre.MathspeakUtil.closingRadicalVerbose],[\"CSF\",\"CSFindexRadicalVerbose\",sre.MathspeakUtil.indexRadicalVerbose],[\"CSF\",\"CSFopenRadicalBrief\",sre.MathspeakUtil.openingRadicalBrief],[\"CSF\",\"CSFcloseRadicalBrief\",sre.MathspeakUtil.closingRadicalBrief],[\"CSF\",\"CSFindexRadicalBrief\",sre.MathspeakUtil.indexRadicalBrief],[\"CSF\",\"CSFopenRadicalSbrief\",sre.MathspeakUtil.openingRadicalSbrief],[\"CSF\",\"CSFindexRadicalSbrief\",sre.MathspeakUtil.indexRadicalSbrief],[\"CSF\",\"CSFsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],\n[\"CSF\",\"CSFsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],[\"CSF\",\"CSFsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFbaselineVerbose\",sre.MathspeakUtil.baselineVerbose],[\"CSF\",\"CSFbaselineBrief\",sre.MathspeakUtil.baselineBrief],[\"CSF\",\"CSFleftsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],[\"CSF\",\"CSFleftsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFrightsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],\n[\"CSF\",\"CSFrightsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFleftsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],[\"CSF\",\"CSFleftsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFrightsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],[\"CSF\",\"CSFrightsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFunderscript\",sre.MathspeakUtil.nestedUnderscore],[\"CSF\",\"CSFoverscript\",sre.MathspeakUtil.nestedOverscore],[\"CTXF\",\"CTXFordinalCounter\",sre.NumbersUtil.ordinalCounter],\n[\"CTXF\",\"CTXFcontentIterator\",sre.StoreUtil.contentIterator],[\"CQF\",\"CQFdetIsSimple\",sre.MathspeakUtil.determinantIsSimple],[\"CSF\",\"CSFRemoveParens\",sre.MathspeakUtil.removeParens],[\"CQF\",\"CQFresetNesting\",sre.MathspeakUtil.resetNestingDepth]],rules:['Rule{collapsed{default{[t] \"collapsed\"; [n] . (engine:modality=summary,grammar:collapsed){self::*[@alternative]{not(contains(@grammar, \"collapsed\"))'.split(\"{\"),[\"SpecializedRule\",\"collapsed\",\"default\",\"brief\"],[\"SpecializedRule\",\"collapsed\",\"brief\",\n\"sbrief\"],[\"Rule\",\"direct-speech\",\"default\",\"[t] @ext-speech\",\"self::*[@ext-speech]\"],\"Rule;stree;default;[n] ./*[1];self::stree;CQFresetNesting\".split(\";\"),[\"Rule\",\"unknown\",\"default\",\"[n] text()\",\"self::unknown\"],'Rule;protected;default;[t] text();self::number;contains(@grammar, \"protected\")'.split(\";\"),[\"Rule\",\"omit-empty\",\"default\",\"[p] (pause:100)\",\"self::empty\"],'Rule;blank-empty;default;[t] \"Blank\";self::empty;count(../*)=1;name(../..)=\"cell\" or name(../..)=\"line\"'.split(\";\"),'Rule{font{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),\n'Rule{font-identifier-short{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"normal\"{\"\"=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\"){@role!=\"unit\"'.split(\"{\"),\n'Rule{font-identifier{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1{@font{@font=\"normal\"{not(contains(@grammar, \"ignoreFont\")){@role!=\"unit\"'.split(\"{\"),'Rule;omit-font;default;[n] . (grammar:ignoreFont=@font);self::identifier;string-length(text())=1;@font;not(contains(@grammar, \"ignoreFont\"));@font=\"italic\"'.split(\";\"),'Rule{german-font{default{[t] \"German\"; [n] . (grammar:ignoreFont=@font){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"fraktur\"'.split(\"{\"),\n'Rule{german-font{default{[t] \"bold German\"; [n] . (grammar:ignoreFont=@font){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"bold-fraktur\"'.split(\"{\"),[\"Rule\",\"number\",\"default\",\"[n] text()\",\"self::number\"],'Rule,mixed-number,default,[n] children/*[1]; [t] \"and\"; [n] children/*[2]; ,self::number,@role=\"mixed\"'.split(\",\"),'Rule{number-with-chars{default{[t] \"Number\"; [m] CQFspaceoutNumber (grammar:protected){self::number{@role=\"othernumber\"{\"\" != translate(text(), \"0123456789.,\", \"\"){not(contains(@grammar, \"protected\"))'.split(\"{\"),\n[\"SpecializedRule\",\"number-with-chars\",\"default\",\"brief\",'[t] \"Num\"; [m] CQFspaceoutNumber (grammar:protected)'],[\"SpecializedRule\",\"number-with-chars\",\"brief\",\"sbrief\"],'Rule{number-as-upper-word{default{[t] \"UpperWord\"; [t] CSFspaceoutText{self::number{string-length(text())>1{text()=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\", \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\"){\"\"=translate(text(), \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\",\"\")'.split(\"{\"),\n[\"SpecializedRule\",\"number-as-upper-word\",\"default\",\"brief\"],[\"SpecializedRule\",\"number-as-upper-word\",\"default\",\"sbrief\"],'Rule{number-baseline{default{[t] \"Baseline\"; [n] . (grammar:baseline){self::number{not(contains(@grammar, \"ignoreFont\")){preceding-sibling::identifier{not(contains(@grammar, \"baseline\")){preceding-sibling::*[1][@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]{parent::*/parent::infixop[@role=\"implicit\"]'.split(\"{\"),[\"SpecializedRule\",\"number-baseline\",\"default\",\n\"brief\",'[t] \"Base\"; [n] . (grammar:baseline)'],[\"SpecializedRule\",\"number-baseline\",\"brief\",\"sbrief\"],'Rule{number-baseline-font{default{[t] \"Baseline\"; [t] @font; [n] . (grammar:ignoreFont=@font){self::number{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"{preceding-sibling::identifier{preceding-sibling::*[@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]{parent::*/parent::infixop[@role=\"implicit\"]'.split(\"{\"),[\"SpecializedRule\",\"number-baseline-font\",\"default\",\"brief\",\n'[t] \"Base\"; [t] @font; [n] . (grammar:ignoreFont=@font)'],[\"SpecializedRule\",\"number-baseline-font\",\"brief\",\"sbrief\"],'Rule;identifier;default;[m] CQFspaceoutIdentifier;self::identifier;string-length(text())>1;@role!=\"unit\";not(@font) or @font=\"normal\" or contains(@grammar, \"ignoreFont\");text()!=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\")'.split(\";\"),\n[\"Rule\",\"identifier\",\"default\",\"[n] text()\",\"self::identifier\"],'Rule,negative,default,[t] \"negative\"; [n] children/*[1],self::prefixop,@role=\"negative\",children/identifier'.split(\",\"),[\"Aliases\",\"negative\",\"self::prefixop\",'@role=\"negative\"',\"children/number\"],[\"Aliases\",\"negative\",\"self::prefixop\",'@role=\"negative\"','children/fraction[@role=\"vulgar\"]'],'Rule,negative,default,[t] \"minus\"; [n] children/*[1],self::prefixop,@role=\"negative\"'.split(\",\"),[\"Rule\",\"prefix\",\"default\",\"[m] content/*; [n] children/*[1]\",\n\"self::prefixop\"],[\"Rule\",\"postfix\",\"default\",\"[n] children/*[1]; [m] content/*\",\"self::postfixop\"],[\"Rule\",\"binary-operation\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator);\",\"self::infixop\"],'Rule;implicit;default;[m] children/*;self::infixop;@role=\"implicit\"'.split(\";\"),[\"Aliases\",\"implicit\",\"self::infixop\",'@role=\"leftsuper\" or @role=\"leftsub\" or @role=\"rightsuper\" or @role=\"rightsub\"'],'Rule,subtraction,default,[m] children/* (separator:\"minus\");,self::infixop,@role=\"subtraction\"'.split(\",\"),\n[\"Rule\",\"function-unknown\",\"default\",\"[n] children/*[1]; [n] children/*[2]\",\"self::appl\"],'Rule,function-prefix,default,[n] children/*[1]; [n] children/*[2],self::appl,children/*[1][@role=\"prefix function\"]'.split(\",\"),'Rule,fences-open-close,default,[n] content/*[1]; [n] children/*[1]; [n] content/*[2],self::fenced,@role=\"leftright\"'.split(\",\"),'Rule,fences-neutral,default,[t] \"StartAbsoluteValue\"; [n] children/*[1]; [t] \"EndAbsoluteValue\",self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),\n[\"SpecializedRule\",\"fences-neutral\",\"default\",\"sbrief\",'[t] \"AbsoluteValue\"; [n] children/*[1]; [t] \"EndAbsoluteValue\"'],'Rule,fences-neutral,default,[n] content/*[1]; [n] children/*[1]; [n] content/*[2],self::fenced,@role=\"neutral\"'.split(\",\"),'Rule,fences-set,default,[t] \"StartSet\"; [n] children/*[1]; [t] \"EndSet\",self::fenced,@role=\"set empty\" or @role=\"set extended\" or @role=\"set singleton\" or @role=\"set collection\",not(name(../..)=\"appl\")'.split(\",\"),[\"SpecializedRule\",\"fences-set\",\"default\",\n\"sbrief\",'[t] \"Set\"; [n] children/*[1]; [t] \"EndSet\"'],[\"Rule\",\"text\",\"default\",\"[n] text()\",\"self::text\"],'Rule;factorial;default;[t] \"factorial\";self::punctuation;text()=\"!\";name(preceding-sibling::*[1])!=\"text\"'.split(\";\"),'Rule;minus;default;[t] \"minus\";self::operator;text()=\"-\"'.split(\";\"),'Rule;single-prime;default;[t] \"prime\";self::punctuated;@role=\"prime\";count(children/*)=1'.split(\";\"),'Rule;double-prime;default;[t] \"double prime\";self::punctuated;@role=\"prime\";count(children/*)=2'.split(\";\"),\n'Rule;triple-prime;default;[t] \"triple prime\";self::punctuated;@role=\"prime\";count(children/*)=3'.split(\";\"),'Rule;quadruple-prime;default;[t] \"quadruple prime\";self::punctuated;@role=\"prime\";count(children/*)=4'.split(\";\"),'Rule,counted-prime,default,[t] count(children/*); [t] \"prime\",self::punctuated,@role=\"prime\"'.split(\",\"),[\"Rule\",\"fraction\",\"default\",\"[t] CSFopenFracVerbose; [n] children/*[1]; [t] CSFoverFracVerbose; [n] children/*[2]; [t] CSFcloseFracVerbose\",\"self::fraction\"],[\"Rule\",\"fraction\",\n\"brief\",\"[t] CSFopenFracBrief; [n] children/*[1]; [t] CSFoverFracVerbose; [n] children/*[2]; [t] CSFcloseFracBrief\",\"self::fraction\"],[\"Rule\",\"fraction\",\"sbrief\",\"[t] CSFopenFracSbrief; [n] children/*[1]; [t] CSFoverFracSbrief; [n] children/*[2]; [t] CSFcloseFracSbrief\",\"self::fraction\"],'Rule;vulgar-fraction;default;[t] CSFvulgarFraction;self::fraction;@role=\"vulgar\";CQFvulgarFractionSmall'.split(\";\"),[\"SpecializedRule\",\"vulgar-fraction\",\"default\",\"brief\"],[\"SpecializedRule\",\"vulgar-fraction\",\"default\",\n\"sbrief\"],'Rule,continued-fraction-outer,default,[t] \"ContinuedFraction\"; [n] children/*[1];[t] \"Over\"; [n] children/*[2],self::fraction,not(ancestor::fraction),children/*[2]/descendant-or-self::*[@role=\"ellipsis\" and not(following-sibling::*)]'.split(\",\"),[\"SpecializedRule\",\"continued-fraction-outer\",\"default\",\"brief\",'[t] \"ContinuedFrac\"; [n] children/*[1];[t] \"Over\"; [n] children/*[2]'],[\"SpecializedRule\",\"continued-fraction-outer\",\"brief\",\"sbrief\"],'Rule,continued-fraction-inner,default,[t] \"StartFraction\"; [n] children/*[1];[t] \"Over\"; [n] children/*[2],self::fraction,ancestor::fraction,children/*[2]/descendant-or-self::*[@role=\"ellipsis\" and not(following-sibling::*)]'.split(\",\"),\n[\"SpecializedRule\",\"continued-fraction-inner\",\"default\",\"brief\",'[t] \"StartFrac\"; [n] children/*[1];[t] \"Over\"; [n] children/*[2]'],[\"SpecializedRule\",\"continued-fraction-inner\",\"brief\",\"sbrief\",'[t] \"Frac\"; [n] children/*[1];[t] \"Over\"; [n] children/*[2]'],[\"Rule\",\"sqrt\",\"default\",\"[t] CSFopenRadicalVerbose; [n] children/*[1]; [t] CSFcloseRadicalVerbose\",\"self::sqrt\"],[\"Rule\",\"sqrt\",\"brief\",\"[t] CSFopenRadicalBrief; [n] children/*[1]; [t] CSFcloseRadicalBrief\",\"self::sqrt\"],[\"Rule\",\"sqrt\",\"sbrief\",\n\"[t] CSFopenRadicalSbrief; [n] children/*[1]; [t] CSFcloseRadicalBrief\",\"self::sqrt\"],[\"Rule\",\"root\",\"default\",\"[t] CSFindexRadicalVerbose; [n] children/*[1];[t] CSFopenRadicalVerbose; [n] children/*[2]; [t] CSFcloseRadicalVerbose\",\"self::root\"],[\"Rule\",\"root\",\"brief\",\"[t] CSFindexRadicalBrief; [n] children/*[1];[t] CSFopenRadicalBrief; [n] children/*[2]; [t] CSFcloseRadicalBrief\",\"self::root\"],[\"Rule\",\"root\",\"sbrief\",\"[t] CSFindexRadicalSbrief; [n] children/*[1];[t] CSFopenRadicalSbrief; [n] children/*[2]; [t] CSFcloseRadicalBrief\",\n\"self::root\"],'Rule,limboth,default,[n] children/*[1]; [t] CSFunderscript; [n] children/*[2];[t] CSFoverscript; [n] children/*[3],self::limboth,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),'Rule,limlower,default,[n] children/*[1]; [t] CSFunderscript; [n] children/*[2];,self::limlower,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),\n'Rule,limupper,default,[n] children/*[1]; [t] CSFoverscript; [n] children/*[2];,self::limupper,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),'Aliases;limlower;self::underscore;@role=\"limit function\";name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),'Aliases;limlower;self::underscore;children/*[2][@role!=\"underaccent\"];name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),\n'Aliases;limupper;self::overscore;children/*[2][@role!=\"overaccent\"];name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),[\"Rule\",\"limboth-end\",\"default\",'[n] children/*[1]; [t] CSFunderscript; [n] children/*[2];[t] CSFoverscript; [n] children/*[3]; [t] \"Endscripts\"',\"self::limboth\"],[\"Rule\",\"limlower-end\",\"default\",'[n] children/*[1]; [t] CSFunderscript; [n] children/*[2]; [t] \"Endscripts\"',\"self::limlower\"],[\"Rule\",\"limupper-end\",\n\"default\",'[n] children/*[1]; [t] CSFoverscript; [n] children/*[2]; [t] \"Endscripts\"',\"self::limupper\"],[\"Aliases\",\"limlower-end\",\"self::underscore\",'@role=\"limit function\"'],[\"Aliases\",\"limlower-end\",\"self::underscore\"],[\"Aliases\",\"limupper-end\",\"self::overscore\"],[\"Rule\",\"integral\",\"default\",\"[n] children/*[1]; [n] children/*[2]; [n] children/*[3];\",\"self::integral\"],'Rule,integral,default,[n] children/*[1]; [t] \"Subscript\"; [n] children/*[2];[t] \"Superscript\"; [n] children/*[3]; [t] \"Baseline\";,self::limboth,@role=\"integral\"'.split(\",\"),\n[\"SpecializedRule\",\"integral\",\"default\",\"brief\",'[n] children/*[1]; [t] \"Sub\"; [n] children/*[2];[t] \"Sup\"; [n] children/*[3]; [t] \"Base\";'],[\"SpecializedRule\",\"integral\",\"brief\",\"sbrief\"],[\"Rule\",\"bigop\",\"default\",\"[n] children/*[1]; [n] children/*[2];\",\"self::bigop\"],[\"Rule\",\"relseq\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::relseq\"],'Rule,equality,default,[n] children/*[1]; [n] content/*[1]; [n] children/*[2],self::relseq,@role=\"equality\",count(./children/*)=2'.split(\",\"),\n'Rule;multi-equality;default;[m] children/* (sepFunc:CTXFcontentIterator);self::relseq;@role=\"equality\";count(./children/*)>2'.split(\";\"),[\"Rule\",\"multrel\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::multirel\"],[\"Rule\",\"subscript\",\"default\",\"[n] children/*[1]; [t] CSFsubscriptVerbose; [n] children/*[2]\",\"self::subscript\"],[\"Rule\",\"subscript\",\"brief\",\"[n] children/*[1]; [t] CSFsubscriptBrief; [n] children/*[2]\",\"self::subscript\"],[\"SpecializedRule\",\"subscript\",\"brief\",\"sbrief\"],\n'Rule,subscript-simple,default,[n] children/*[1]; [n] children/*[2],self::subscript,name(./children/*[1])=\"identifier\",name(./children/*[2])=\"number\",./children/*[2][@role!=\"mixed\"],./children/*[2][@role!=\"othernumber\"]'.split(\",\"),[\"SpecializedRule\",\"subscript-simple\",\"default\",\"brief\"],[\"SpecializedRule\",\"subscript-simple\",\"default\",\"sbrief\"],'Rule,subscript-baseline,default,[n] children/*[1]; [t] CSFsubscriptVerbose; [n] children/*[2]; [t] CSFbaselineVerbose,self::subscript,following-sibling::*,not(name(following-sibling::subscript/children/*[1])=\"empty\" or (name(following-sibling::infixop[@role=\"implicit\"]/children/*[1])=\"subscript\" and name(following-sibling::*/children/*[1]/children/*[1])=\"empty\")) and @role!=\"subsup\",not(following-sibling::*[@role=\"rightsuper\" or @role=\"rightsub\" or @role=\"leftsub\" or @role=\"leftsub\"])'.split(\",\"),\n[\"SpecializedRule\",\"subscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsubscriptBrief; [n] children/*[2]; [t] CSFbaselineBrief\"],[\"SpecializedRule\",\"subscript-baseline\",\"brief\",\"sbrief\"],'Aliases;subscript-baseline;self::subscript;not(following-sibling::*);ancestor::fenced|ancestor::root|ancestor::sqrt|ancestor::punctuated|ancestor::fraction;not(ancestor::punctuated[@role=\"leftsuper\" or @role=\"rightsub\" or @role=\"rightsuper\" or @role=\"rightsub\"])'.split(\";\"),[\"Aliases\",\"subscript-baseline\",\n\"self::subscript\",\"not(following-sibling::*)\",\"ancestor::relseq|ancestor::multirel\",sre.MathspeakUtil.generateBaselineConstraint()],[\"Aliases\",\"subscript-baseline\",\"self::subscript\",\"not(following-sibling::*)\",\"@embellished\"],'Rule,subscript-empty-sup,default,[n] children/*[1]; [n] children/*[2],self::subscript,name(children/*[2])=\"infixop\",name(children/*[2][@role=\"implicit\"]/children/*[1])=\"superscript\",name(children/*[2]/children/*[1]/children/*[1])=\"empty\"'.split(\",\"),[\"SpecializedRule\",\"subscript-empty-sup\",\n\"default\",\"brief\"],[\"SpecializedRule\",\"subscript-empty-sup\",\"brief\",\"sbrief\"],[\"Aliases\",\"subscript-empty-sup\",\"self::subscript\",'name(children/*[2])=\"superscript\"','name(children/*[2]/children/*[1])=\"empty\"'],[\"Rule\",\"superscript\",\"default\",\"[n] children/*[1]; [t] CSFsuperscriptVerbose; [n] children/*[2]\",\"self::superscript\"],[\"SpecializedRule\",\"superscript\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsuperscriptBrief; [n] children/*[2]\"],[\"SpecializedRule\",\"superscript\",\"brief\",\"sbrief\"],'Rule,superscript-baseline,default,[n] children/*[1]; [t] CSFsuperscriptVerbose; [n] children/*[2];[t] CSFbaselineVerbose,self::superscript,following-sibling::*,not(name(following-sibling::superscript/children/*[1])=\"empty\" or (name(following-sibling::infixop[@role=\"implicit\"]/children/*[1])=\"superscript\" and name(following-sibling::*/children/*[1]/children/*[1])=\"empty\")) and not(following-sibling::*[@role=\"rightsuper\" or @role=\"rightsub\" or @role=\"leftsub\" or @role=\"leftsub\"])'.split(\",\"),\n[\"SpecializedRule\",\"superscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsuperscriptBrief; [n] children/*[2];[t] CSFbaselineBrief\"],[\"SpecializedRule\",\"superscript-baseline\",\"brief\",\"sbrief\"],'Aliases;superscript-baseline;self::superscript;not(following-sibling::*);ancestor::punctuated;ancestor::*/following-sibling::* and not(ancestor::punctuated[@role=\"leftsuper\" or @role=\"rightsub\" or @role=\"rightsuper\" or @role=\"rightsub\"])'.split(\";\"),[\"Aliases\",\"superscript-baseline\",\"self::superscript\",\n\"not(following-sibling::*)\",\"ancestor::fraction|ancestor::fenced|ancestor::root|ancestor::sqrt\"],[\"Aliases\",\"superscript-baseline\",\"self::superscript\",\"not(following-sibling::*)\",\"ancestor::relseq|ancestor::multirel\",\"not(@embellished)\",sre.MathspeakUtil.generateBaselineConstraint()],'Aliases superscript-baseline self::superscript not(following-sibling::*) @embellished not(children/*[2][@role=\"prime\"])'.split(\" \"),'Rule,superscript-empty-sub,default,[n] children/*[1]; [n] children/*[2],self::superscript,name(children/*[2])=\"infixop\",name(children/*[2][@role=\"implicit\"]/children/*[1])=\"subscript\",name(children/*[2]/children/*[1]/children/*[1])=\"empty\"'.split(\",\"),\n[\"SpecializedRule\",\"superscript-empty-sub\",\"default\",\"brief\"],[\"SpecializedRule\",\"superscript-empty-sub\",\"brief\",\"sbrief\"],[\"Aliases\",\"superscript-empty-sub\",\"self::superscript\",'name(children/*[2])=\"subscript\"','name(children/*[2]/children/*[1])=\"empty\"'],'Rule,square,default,[n] children/*[1]; [t] \"squared\",self::superscript,children/*[2],children/*[2][text()=2],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),name(children/*[1])!=\"subscript\" or (name(children/*[1])=\"subscript\" and name(children/*[1]/children/*[1])=\"identifier\" and name(children/*[1]/children/*[2])=\"number\" and children/*[1]/children/*[2][@role!=\"mixed\"] and children/*[1]/children/*[2][@role!=\"othernumber\"]),not(@embellished)'.split(\",\"),\n[\"SpecializedRule\",\"square\",\"default\",\"brief\"],[\"SpecializedRule\",\"square\",\"default\",\"sbrief\"],'Aliases;square;self::superscript;children/*[2];children/*[2][text()=2];@embellished;children/*[1][@role=\"prefix operator\"]'.split(\";\"),'Rule,cube,default,[n] children/*[1]; [t] \"cubed\",self::superscript,children/*[2],children/*[2][text()=3],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),name(children/*[1])!=\"subscript\" or (name(children/*[1])=\"subscript\" and name(children/*[1]/children/*[1])=\"identifier\" and name(children/*[1]/children/*[2])=\"number\" and children/*[1]/children/*[2][@role!=\"mixed\"] and children/*[1]/children/*[2][@role!=\"othernumber\"]),not(@embellished)'.split(\",\"),\n[\"SpecializedRule\",\"cube\",\"default\",\"brief\"],[\"SpecializedRule\",\"cube\",\"default\",\"sbrief\"],'Aliases;cube;self::superscript;children/*[2];children/*[2][text()=3];@embellished;children/*[1][@role=\"prefix operator\"]'.split(\";\"),'Rule,prime,default,[n] children/*[1]; [n] children/*[2],self::superscript,children/*[2],children/*[2][@role=\"prime\"]'.split(\",\"),[\"SpecializedRule\",\"prime\",\"default\",\"brief\"],[\"SpecializedRule\",\"prime\",\"default\",\"sbrief\"],'Rule,prime-subscript,default,[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptVerbose; [n] children/*[1]/children/*[2],self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",not(following-sibling::*)'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript\",\"default\",\"brief\",\"[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptBrief; [n] children/*[1]/children/*[2]\"],[\"SpecializedRule\",\"prime-subscript\",\"brief\",\"sbrief\"],'Rule,prime-subscript-baseline,default,[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptVerbose; [n] children/*[1]/children/*[2]; [t] CSFbaselineVerbose,self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",following-sibling::*'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptBrief; [n] children/*[1]/children/*[2]; [t] CSFbaselineBrief\"],[\"SpecializedRule\",\"prime-subscript-baseline\",\"brief\",\"sbrief\"],'Aliases prime-subscript-baseline self::superscript children/*[2][@role=\"prime\"] name(children/*[1])=\"subscript\" not(following-sibling::*) @embellished'.split(\" \"),'Rule,prime-subscript-simple,default,[n] children/*[1]/children/*[1]; [n] children/*[2];[n] children/*[1]/children/*[2],self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",name(children/*[1]/children/*[1])=\"identifier\",name(children/*[1]/children/*[2])=\"number\",children/*[1]/children/*[2][@role!=\"mixed\"],children/*[1]/children/*[2][@role!=\"othernumber\"]'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript-simple\",\"default\",\"brief\"],[\"SpecializedRule\",\"prime-subscript-simple\",\"default\",\"sbrief\"],'Rule,overscore,default,[t] \"ModifyingAbove\"; [n] children/*[1]; [t] \"With\"; [n] children/*[2],self::overscore,children/*[2][@role=\"overaccent\"]'.split(\",\"),[\"SpecializedRule\",\"overscore\",\"default\",\"brief\",'[t] \"ModAbove\"; [n] children/*[1]; [t] \"With\"; [n] children/*[2]'],[\"SpecializedRule\",\"overscore\",\"brief\",\"sbrief\"],'Rule,double-overscore,default,[t] \"ModifyingAbove Above\"; [n] children/*[1]; [t] \"With\"; [n] children/*[2],self::overscore,children/*[2][@role=\"overaccent\"],name(children/*[1])=\"overscore\",children/*[1]/children/*[2][@role=\"overaccent\"]'.split(\",\"),\n[\"SpecializedRule\",\"double-overscore\",\"default\",\"brief\",'[t] \"ModAbove Above\"; [n] children/*[1]; [t] \"With\"; [n] children/*[2]'],[\"SpecializedRule\",\"double-overscore\",\"brief\",\"sbrief\"],'Rule,underscore,default,[t] \"ModifyingBelow\"; [n] children/*[1]; [t] \"With\"; [n] children/*[2],self::underscore,children/*[2][@role=\"underaccent\"]'.split(\",\"),[\"SpecializedRule\",\"underscore\",\"default\",\"brief\",'[t] \"ModBelow\"; [n] children/*[1]; [t] \"With\"; [n] children/*[2]'],[\"SpecializedRule\",\"underscore\",\"brief\",\n\"sbrief\"],'Rule,double-underscore,default,[t] \"ModifyingBelow Below\"; [n] children/*[1]; [t] \"With\"; [n] children/*[2],self::underscore,children/*[2][@role=\"underaccent\"],name(children/*[1])=\"underscore\",children/*[1]/children/*[2][@role=\"underaccent\"]'.split(\",\"),[\"SpecializedRule\",\"double-underscore\",\"default\",\"brief\",'[t] \"ModBelow Below\"; [n] children/*[1]; [t] \"With\"; [n] children/*[2]'],[\"SpecializedRule\",\"double-underscore\",\"brief\",\"sbrief\"],'Rule,overbar,default,[n] children/*[1]; [t] \"overbar\",self::overscore,@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][@role=\"overaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),\n[\"SpecializedRule\",\"overbar\",\"default\",\"brief\",'[n] children/*[1]; [t] \"overBar\"'],[\"SpecializedRule\",\"overbar\",\"brief\",\"sbrief\"],'Rule,underbar,default,[n] children/*[1]; [t] \"underbar\",self::underscore,@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][@role=\"underaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),[\"SpecializedRule\",\"underbar\",\"default\",\"brief\",'[n] children/*[1]; [t] \"underBar\"'],\n[\"SpecializedRule\",\"underbar\",\"brief\",\"sbrief\"],'Rule,overtilde,default,[n] children/*[1]; [t] \"overTilde\",self::overscore,children/*[2][@role=\"overaccent\"],@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][text()=\"~\" or text()=\"\\u02dc\" or text()=\"\\u223c\" or text()=\"\\uff5e\"]'.split(\",\"),[\"SpecializedRule\",\"overtilde\",\"default\",\"brief\",'[n] children/*[1]; [t] \"overtilde\"'],[\"SpecializedRule\",\"overtilde\",\"brief\",\"sbrief\"],'Rule,undertilde,default,[n] children/*[1]; [t] \"underTilde\",self::underscore,@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][@role=\"underaccent\"],children/*[2][text()=\"~\" or text()=\"\\u02dc\" or text()=\"\\u223c\" or text()=\"\\uff5e\"]'.split(\",\"),\n[\"SpecializedRule\",\"undertilde\",\"default\",\"brief\",'[n] children/*[1]; [t] \"undertilde\"'],[\"SpecializedRule\",\"undertilde\",\"brief\",\"sbrief\"],'Rule,matrix-fence,default,[n] children/*[1];,self::fenced,count(children/*)=1,name(children/*[1])=\"matrix\"'.split(\",\"),[\"Rule\",\"matrix\",\"default\",'[t] \"Start\"; [t] count(children/*);  [t] \"By\";[t] count(children/*[1]/children/*); [t] \"Matrix\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Row \"); [t] \"EndMatrix\"',\"self::matrix\"],[\"Rule\",\"matrix\",\"sbrief\",\n'[t] count(children/*);  [t] \"By\";[t] count(children/*[1]/children/*); [t] \"Matrix\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Row \"); [t] \"EndMatrix\"',\"self::matrix\"],[\"Aliases\",\"matrix\",\"self::vector\"],[\"Rule\",\"matrix-row\",\"default\",'[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Column\");[p] (pause: 200)',\"self::row\"],'Rule{row-with-label{default{[t] \"with Label\"; [n] content/*[1]; [t] \"EndLabel\"(pause: 200); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Column\"){self::row{content'.split(\"{\"),\n'Rule{row-with-label{brief{[t] \"Label\"; [n] content/*[1]; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Column\"){self::row{content'.split(\"{\"),[\"SpecializedRule\",\"row-with-label\",\"brief\",\"sbrief\"],'Rule{row-with-text-label{sbrief{[t] \"Label\"; [t] CSFRemoveParens;[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Column\"){self::row{content{name(content/cell/children/*[1])=\"text\"'.split(\"{\"),'Rule;empty-row;default;[t] \"Blank\";self::row;count(children/*)=0'.split(\";\"),[\"Rule\",\"matrix-cell\",\n\"default\",\"[n] children/*[1]; [p] (pause: 300)\",\"self::cell\"],'Rule,empty-cell,default,[t] \"Blank\"; [p] (pause: 300),self::cell,count(children/*)=0'.split(\",\"),'Rule{determinant{default{[t] \"Start\"; [t] count(children/*);  [t] \"By\";[t] count(children/*[1]/children/*); [t] \"Determinant\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Row \"); [t] \"EndDeterminant\"{self::matrix{@role=\"determinant\"'.split(\"{\"),[\"SpecializedRule\",\"determinant\",\"default\",\"sbrief\",'[t] count(children/*);  [t] \"By\";[t] count(children/*[1]/children/*); [t] \"Determinant\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Row \"); [t] \"EndDeterminant\"'],\n'Rule{determinant-simple{default{[t] \"Start\"; [t] count(children/*);  [t] \"By\";[t] count(children/*[1]/children/*); [t] \"Determinant\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Row\",grammar:simpleDet); [t] \"EndDeterminant\"{self::matrix{@role=\"determinant\"{CQFdetIsSimple'.split(\"{\"),[\"SpecializedRule\",\"determinant-simple\",\"default\",\"sbrief\",'[t] count(children/*);  [t] \"By\";[t] count(children/*[1]/children/*); [t] \"Determinant\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Row\",grammar:simpleDet); [t] \"EndDeterminant\"'],\n'Rule{row-simple{default{[m] children/*;{self::row{@role=\"determinant\"{contains(@grammar, \"simpleDet\")'.split(\"{\"),[\"Rule\",\"layout\",\"default\",'[t] \"StartLayout\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Row \"); [t] \"EndLayout\"',\"self::table\"],[\"Rule\",\"layout\",\"sbrief\",'[t] \"Layout\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Row \"); [t] \"EndLayout\"',\"self::table\"],'Rule,binomial,default,[t] \"StartBinomialOrMatrix\"; [n] children/*[1]/children/*[1]; [t] \"Choose\"; [n] children/*[2]/children/*[1];  [t] \"EndBinomialOrMatrix\",self::vector,@role=\"binomial\"'.split(\",\"),\n'Rule,binomial,sbrief,[t] \"BinomialOrMatrix\"; [n] children/*[1]/children/*[1]; [t] \"Choose\"; [n] children/*[2]/children/*[1];  [t] \"EndBinomialOrMatrix\",self::vector,@role=\"binomial\"'.split(\",\"),[\"Rule\",\"cases\",\"default\",'[t] \"StartLayout\"; [t] \"Enlarged\"; [n] content/*[1];[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Row \"); [t] \"EndLayout\"',\"self::cases\"],[\"Rule\",\"cases\",\"sbrief\",'[t] \"Layout\"; [t] \"Enlarged\"; [n] content/*[1];[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Row \"); [t] \"EndLayout\"',\n\"self::cases\"],[\"Aliases\",\"layout\",\"self::multiline\"],[\"Rule\",\"line\",\"default\",\"[m] children/*\",\"self::line\"],'Rule,line-with-label,default,[t] \"with Label\"; [n] content/*[1]; [t] \"EndLabel\" (pause: 200); [m] children/*,self::line,content'.split(\",\"),[\"SpecializedRule\",\"line-with-label\",\"default\",\"brief\",'[t] \"Label\"; [n] content/*[1] (pause: 200); [m] children/*'],[\"SpecializedRule\",\"line-with-label\",\"brief\",\"sbrief\"],'Rule,line-with-text-label,sbrief,[t] \"Label\"; [t] CSFRemoveParens; [m] children/*,self::line,content,name(content/cell/children/*[1])=\"text\"'.split(\",\"),\n'Rule;empty-line;default;[t] \"Blank\";self::line;count(children/*)=0;not(content)'.split(\";\"),[\"SpecializedRule\",\"empty-line\",\"default\",\"brief\"],[\"SpecializedRule\",\"empty-line\",\"brief\",\"sbrief\"],'Rule,empty-line-with-label,default,[t] \"with Label\"; [n] content/*[1]; [t] \"EndLabel\"(pause: 200); [t] \"Blank\",self::line,count(children/*)=0,content'.split(\",\"),[\"SpecializedRule\",\"empty-line-with-label\",\"default\",\"brief\",'[t] \"Label\"; [n] content/*[1] (pause: 200); [t] \"Blank\"'],[\"SpecializedRule\",\"empty-line-with-label\",\n\"brief\",\"sbrief\"],[\"Rule\",\"enclose\",\"default\",'[t] \"StartEnclose\"; [t] @role (grammar:localEnclose); [n] children/*[1]; [t] \"EndEnclose\"',\"self::enclose\"],[\"Aliases\",\"overbar\",\"self::enclose\",'@role=\"top\"'],[\"Aliases\",\"underbar\",\"self::enclose\",'@role=\"bottom\"'],'Rule,leftbar,default,[t] \"vertical bar\"; [n] children/*[1],self::enclose,@role=\"left\"'.split(\",\"),'Rule,rightbar,default,[n] children/*[1]; [t] \"vertical bar\",self::enclose,@role=\"right\"'.split(\",\"),'Rule,crossout,default,[t] \"CrossOut\"; [n] children/*[1]; [t] \"EndCrossOut\",self::enclose,@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'.split(\",\"),\n'Rule,cancel,default,[t] \"CrossOut\"; [n] children/*[1]/children/*[1]; [t] \"With\"; [n] children/*[2]; [t] \"EndCrossOut\",self::overscore,@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'.split(\",\"),[\"SpecializedRule\",\"cancel\",\"default\",\"brief\"],[\"SpecializedRule\",\"cancel\",\"default\",\"sbrief\"],[\"Aliases\",\"cancel\",\"self::underscore\",'@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'],'Rule,cancel-reverse,default,[t] \"CrossOut\"; [n] children/*[2]/children/*[1]; [t] \"With\"; [n] children/*[1]; [t] \"EndCrossOut\",self::overscore,name(children/*[2])=\"enclose\",children/*[2][@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"]'.split(\",\"),\n[\"SpecializedRule\",\"cancel-reverse\",\"default\",\"brief\"],[\"SpecializedRule\",\"cancel-reverse\",\"default\",\"sbrief\"],[\"Aliases\",\"cancel-reverse\",\"self::underscore\",'name(children/*[2])=\"enclose\"','children/*[2][@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"]'],'Rule;end-punct;default;[m] children/*;self::punctuated;@role=\"endpunct\"'.split(\";\"),'Rule,start-punct,default,[n] content/*[1]; [m] children/*[position()>1],self::punctuated,@role=\"startpunct\"'.split(\",\"),'Rule,integral-punct,default,[n] children/*[1]; [n] children/*[3],self::punctuated,@role=\"integral\"'.split(\",\"),\n[\"Rule\",\"punctuated\",\"default\",\"[m] children/*\",\"self::punctuated\"],'Rule;unit;default;[t] text() (grammar:annotation=\"unit\":translate:plural);self::identifier;@role=\"unit\"'.split(\";\"),'Rule;unit-combine;default;[m] children/*;self::infixop;@role=\"unit\"'.split(\";\"),'Rule,unit-divide,default,[n] children/*[1]; [t] \"per\"; [n] children/*[2],self::fraction,@role=\"unit\"'.split(\",\"),[\"Rule\",\"inference\",\"default\",'[t] \"inference rule\"; [m] content/*; [t] \"with conclusion\"; [n] children/*[1]; [t] \"and\"; [t] count(children/*[2]/children/*); [t] \"premises\"',\n\"self::inference\"],'Rule,inference,default,[t] \"inference rule\"; ; [m] content/*; [t] \"with conclusion\"; [n] children/*[1]; [t] \"and\"; [t] count(children/*[2]/children/*); [t] \"premise\",self::inference,count(children/*[2]/children/*)<2'.split(\",\"),[\"Rule\",\"premise\",\"default\",'[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"premise \");',\"self::premises\"],[\"Rule\",\"conclusion\",\"default\",\"[n] children/*[1]\",\"self::conclusion\"],[\"Rule\",\"label\",\"default\",'[t] \"label\"; [n] children/*[1]',\"self::rulelabel\"],\n'Rule,axiom,default,[t] \"axiom\"; [m] children/*[1];,self::inference,@role=\"axiom\"'.split(\",\"),'Rule,axiom,default,[t] \"empty axiom\";,self::empty,@role=\"axiom\"'.split(\",\")],initialize:[sre.MathspeakUtil.generateTensorRules]};sre.MathspeakSpanishUtil={};sre.MathspeakSpanishUtil.ordinalCounter=function(a,b){var c=0;return function(){return sre.Messages.NUMBERS.numberToOrdinal(++c,!1)+\" \"+b}};sre.MathspeakSpanishUtil.smallRoot=function(a){if(!a.childNodes||0===a.childNodes.length||!a.childNodes[0].childNodes)return[];var b=a.childNodes[0].childNodes[0].textContent;if(!/^\\d+$/.test(b))return[];b=parseInt(b,10);return 1<b&&10>=b?[a]:[]};sre.UnitUtil={};sre.UnitUtil.unitMultipliers=function(a,b){var c=0;return function(){var d=sre.AuditoryDescription.create({text:sre.UnitUtil.rightMostUnit(a[c])&&sre.UnitUtil.leftMostUnit(a[c+1])?sre.Messages.UNIT_TIMES:\"\"},{});c++;return[d]}};sre.UnitUtil.SCRIPT_ELEMENTS=[sre.SemanticAttr.Type.SUPERSCRIPT,sre.SemanticAttr.Type.SUBSCRIPT,sre.SemanticAttr.Type.OVERSCORE,sre.SemanticAttr.Type.UNDERSCORE];\nsre.UnitUtil.rightMostUnit=function(a){for(;a;){if(\"unit\"===a.getAttribute(\"role\"))return!0;var b=a.tagName;a=sre.XpathUtil.evalXPath(\"children/*\",a);a=-1!==sre.UnitUtil.SCRIPT_ELEMENTS.indexOf(b)?a[0]:a[a.length-1]}return!1};sre.UnitUtil.leftMostUnit=function(a){for(;a;){if(\"unit\"===a.getAttribute(\"role\"))return!0;a=sre.XpathUtil.evalXPath(\"children/*\",a)[0]}return!1};\nsre.UnitUtil.oneLeft=function(a){for(;a;){if(\"number\"===a.tagName&&\"1\"===a.textContent)return[a];if(\"infixop\"!==a.tagName||\"multiplication\"!==a.getAttribute(\"role\")&&\"implicit\"!==a.getAttribute(\"role\"))break;a=sre.XpathUtil.evalXPath(\"children/*\",a)[0]}return[]};sre.MathspeakSpanish={locale:\"es\",domain:\"mathspeak\",functions:[[\"CQF\",\"CQFspaceoutNumber\",sre.MathspeakUtil.spaceoutNumber],[\"CQF\",\"CQFspaceoutIdentifier\",sre.MathspeakUtil.spaceoutIdentifier],[\"CSF\",\"CSFspaceoutText\",sre.MathspeakUtil.spaceoutText],[\"CSF\",\"CSFopenFracVerbose\",sre.MathspeakUtil.openingFractionVerbose],[\"CSF\",\"CSFcloseFracVerbose\",sre.MathspeakUtil.closingFractionVerbose],[\"CSF\",\"CSFoverFracVerbose\",sre.MathspeakUtil.overFractionVerbose],[\"CSF\",\"CSFopenFracBrief\",sre.MathspeakUtil.openingFractionBrief],\n[\"CSF\",\"CSFcloseFracBrief\",sre.MathspeakUtil.closingFractionBrief],[\"CSF\",\"CSFopenFracSbrief\",sre.MathspeakUtil.openingFractionSbrief],[\"CSF\",\"CSFcloseFracSbrief\",sre.MathspeakUtil.closingFractionSbrief],[\"CSF\",\"CSFoverFracSbrief\",sre.MathspeakUtil.overFractionSbrief],[\"CSF\",\"CSFopenRadicalVerbose\",sre.MathspeakUtil.openingRadicalVerbose],[\"CSF\",\"CSFcloseRadicalVerbose\",sre.MathspeakUtil.closingRadicalVerbose],[\"CSF\",\"CSFindexRadicalVerbose\",sre.MathspeakUtil.indexRadicalVerbose],[\"CSF\",\"CSFopenRadicalBrief\",\nsre.MathspeakUtil.openingRadicalBrief],[\"CSF\",\"CSFcloseRadicalBrief\",sre.MathspeakUtil.closingRadicalBrief],[\"CSF\",\"CSFindexRadicalBrief\",sre.MathspeakUtil.indexRadicalBrief],[\"CSF\",\"CSFopenRadicalSbrief\",sre.MathspeakUtil.openingRadicalSbrief],[\"CSF\",\"CSFindexRadicalSbrief\",sre.MathspeakUtil.indexRadicalSbrief],[\"CQF\",\"CQFisSmallRoot\",sre.MathspeakSpanishUtil.smallRoot],[\"CSF\",\"CSFsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],[\"CSF\",\"CSFsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],\n[\"CSF\",\"CSFsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFbaselineVerbose\",sre.MathspeakUtil.baselineVerbose],[\"CSF\",\"CSFbaselineBrief\",sre.MathspeakUtil.baselineBrief],[\"CSF\",\"CSFleftsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],[\"CSF\",\"CSFleftsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFrightsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],[\"CSF\",\"CSFrightsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],\n[\"CSF\",\"CSFleftsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],[\"CSF\",\"CSFleftsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFrightsuperscriptBrief\",sre.MathspeakUtil.superscriptBrief],[\"CSF\",\"CSFrightsubscriptBrief\",sre.MathspeakUtil.subscriptBrief],[\"CSF\",\"CSFunderscript\",sre.MathspeakUtil.nestedUnderscore],[\"CSF\",\"CSFoverscript\",sre.MathspeakUtil.nestedOverscore],[\"CTXF\",\"CTXFordinalCounter\",sre.MathspeakSpanishUtil.ordinalCounter],[\"CTXF\",\"CTXFcontentIterator\",sre.StoreUtil.contentIterator],\n[\"CTXF\",\"CTXFunitMultipliers\",sre.UnitUtil.unitMultipliers],[\"CQF\",\"CQFdetIsSimple\",sre.MathspeakUtil.determinantIsSimple],[\"CSF\",\"CSFRemoveParens\",sre.MathspeakUtil.removeParens],[\"CQF\",\"CQFoneLeft\",sre.UnitUtil.oneLeft],[\"CQF\",\"CQFresetNesting\",sre.MathspeakUtil.resetNestingDepth]],rules:['Rule{collapsed{default{[n] . (engine:modality=summary,grammar:collapsed); [t] \"plegado\";{self::*{@alternative{not(contains(@grammar, \"collapsed\")){self::*{self::*{self::*{self::*{self::*'.split(\"{\"),[\"SpecializedRule\",\n\"collapsed\",\"default\",\"brief\"],[\"SpecializedRule\",\"collapsed\",\"brief\",\"sbrief\"],\"Rule;stree;default;[n] ./*[1];self::stree;CQFresetNesting\".split(\";\"),[\"Rule\",\"unknown\",\"default\",\"[n] text()\",\"self::unknown\"],'Rule;protected;default;[t] text();self::number;contains(@grammar, \"protected\")'.split(\";\"),[\"Rule\",\"omit-empty\",\"default\",\"[p] (pause:100)\",\"self::empty\"],'Rule;blank-empty;default;[t] \"espacio\";self::empty;count(../*)=1;name(../..)=\"cell\" or name(../..)=\"line\"'.split(\";\"),'Rule{font{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),\n'Rule{font-identifier-short{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"normal\"{\"\"=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\"){@role!=\"unit\"'.split(\"{\"),\n'Rule{font-identifier{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1{@font{@font=\"normal\"{not(contains(@grammar, \"ignoreFont\")){@role!=\"unit\"'.split(\"{\"),'Rule;omit-font;default;[n] . (grammar:ignoreFont=@font);self::identifier;string-length(text())=1;@font;not(contains(@grammar, \"ignoreFont\"));@font=\"italic\"'.split(\";\"),[\"Rule\",\"number\",\"default\",\"[n] text()\",\"self::number\"],'Rule,mixed-number,default,[n] children/*[1]; [t] \"m\\u00e1s\"; [n] children/*[2]; ,self::number,@role=\"mixed\"'.split(\",\"),\n'Rule{number-with-chars{default{[t] \"n\\u00famero\"; [m] CQFspaceoutNumber (grammar:protected){self::number{@role=\"othernumber\"{\"\" != translate(text(), \"0123456789.,\", \"\"){not(contains(@grammar, \"protected\"))'.split(\"{\"),[\"SpecializedRule\",\"number-with-chars\",\"default\",\"brief\",'[t] \"n\\u00fam\"; [m] CQFspaceoutNumber (grammar:protected)'],[\"SpecializedRule\",\"number-with-chars\",\"brief\",\"sbrief\"],'Rule{number-as-upper-word{default{[t] \"may\\u00fascula\"; [t] CSFspaceoutText{self::number{string-length(text())>1{text()=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\", \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\"){\"\"=translate(text(), \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\",\"\")'.split(\"{\"),\n[\"SpecializedRule\",\"number-as-upper-word\",\"default\",\"brief\"],[\"SpecializedRule\",\"number-as-upper-word\",\"default\",\"sbrief\"],'Rule{number-baseline{default{[t] \"l\\u00ednea base\"; [n] . (grammar:baseline){self::number{not(contains(@grammar, \"ignoreFont\")){preceding-sibling::identifier{not(contains(@grammar, \"baseline\")){preceding-sibling::*[1][@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]{parent::*/parent::infixop[@role=\"implicit\"]'.split(\"{\"),[\"SpecializedRule\",\"number-baseline\",\n\"default\",\"brief\",'[t] \"base\"; [n] text()'],[\"SpecializedRule\",\"number-baseline\",\"brief\",\"sbrief\"],'Rule{number-baseline-font{default{[t] \"l\\u00ednea base\"; [t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::number{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"{preceding-sibling::identifier{preceding-sibling::*[@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]{parent::*/parent::infixop[@role=\"implicit\"]'.split(\"{\"),[\"SpecializedRule\",\"number-baseline-font\",\n\"default\",\"brief\",'[t] \"base\"; [t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font)'],[\"SpecializedRule\",\"number-baseline-font\",\"brief\",\"sbrief\"],'Rule;identifier;default;[m] CQFspaceoutIdentifier;self::identifier;string-length(text())>1;@role!=\"unit\";not(@font) or @font=\"normal\" or contains(@grammar, \"ignoreFont\");text()!=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\")'.split(\";\"),\n[\"Rule\",\"identifier\",\"default\",\"[n] text()\",\"self::identifier\"],'Rule,negative,default,[t] \"menos\"; [n] children/*[1],self::prefixop,@role=\"negative\",children/identifier'.split(\",\"),[\"Aliases\",\"negative\",\"self::prefixop\",'@role=\"negative\"',\"children/number\"],[\"Aliases\",\"negative\",\"self::prefixop\",'@role=\"negative\"','children/fraction[@role=\"vulgar\"]'],'Rule,negative,default,[t] \"menos\"; [n] children/*[1],self::prefixop,@role=\"negative\"'.split(\",\"),[\"Rule\",\"prefix\",\"default\",\"[m] content/*; [n] children/*[1]\",\n\"self::prefixop\"],[\"Rule\",\"postfix\",\"default\",\"[n] children/*[1]; [m] content/*\",\"self::postfixop\"],[\"Rule\",\"binary-operation\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator);\",\"self::infixop\"],'Rule;implicit;default;[m] children/*;self::infixop;@role=\"implicit\"'.split(\";\"),[\"Aliases\",\"implicit\",\"self::infixop\",'@role=\"leftsuper\" or @role=\"leftsub\" or @role=\"rightsuper\" or @role=\"rightsub\"'],'Rule,subtraction,default,[m] children/* (separator:\"menos\");,self::infixop,@role=\"subtraction\"'.split(\",\"),\n[\"Rule\",\"function-unknown\",\"default\",\"[n] children/*[1]; [n] children/*[2]\",\"self::appl\"],'Rule,function-prefix,default,[n] children/*[1]; [n] children/*[2],self::appl,children/*[1][@role=\"prefix function\"]'.split(\",\"),'Rule,fences-open-close,default,[n] content/*[1]; [n] children/*[1]; [n] content/*[2],self::fenced,@role=\"leftright\"'.split(\",\"),'Rule,fences-neutral,default,[t] \"empezar valor absoluto\"; [n] children/*[1]; [t] \"finalizar valor absoluto\",self::fenced,@role=\"neutral\",content/*[1][text()]=\"|\" or content/*[1][text()]=\"\\u2758\" or content/*[1][text()]=\"\\uff5c\"'.split(\",\"),\n[\"SpecializedRule\",\"fences-neutral\",\"default\",\"sbrief\",'[t] \"valor absoluto\"; [n] children/*[1]; [t] \"finalizar valor absoluto\"'],'Rule,fences-neutral,default,[n] content/*[1]; [n] children/*[1]; [n] content/*[2],self::fenced,@role=\"neutral\"'.split(\",\"),'Rule,fences-set,default,[t] \"empezar llave\"; [n] children/*[1]; [t] \"finalizar llave\",self::fenced,@role=\"set empty\" or @role=\"set extended\" or @role=\"set singleton\" or @role=\"set collection\",not(name(../..)=\"appl\")'.split(\",\"),[\"SpecializedRule\",\n\"fences-set\",\"default\",\"sbrief\",'[t] \"llave\"; [n] children/*[1]; [t] \"finalizar llave\"'],[\"Rule\",\"text\",\"default\",\"[n] text() (grammar:noTranslateText)\",\"self::text\"],'Rule;factorial;default;[t] \"factorial\";self::punctuation;text()=\"!\";name(preceding-sibling::*[1])!=\"text\"'.split(\";\"),'Rule;minus;default;[t] \"menos\";self::operator;text()=\"-\"'.split(\";\"),'Rule;single-prime;default;[t] \"prima\";self::punctuated;@role=\"prime\";count(children/*)=1'.split(\";\"),'Rule;double-prime;default;[t] \"doble prima\";self::punctuated;@role=\"prime\";count(children/*)=2'.split(\";\"),\n'Rule;triple-prime;default;[t] \"triple prima\";self::punctuated;@role=\"prime\";count(children/*)=3'.split(\";\"),'Rule;quadruple-prime;default;[t] \"cuadruplicar prima\";self::punctuated;@role=\"prime\";count(children/*)=4'.split(\";\"),'Rule,counted-prime,default,[t] count(children/*); [t] \"prime\",self::punctuated,@role=\"prime\"'.split(\",\"),[\"Rule\",\"fraction\",\"default\",\"[t] CSFopenFracVerbose; [n] children/*[1]; [t] CSFoverFracVerbose; [n] children/*[2]; [t] CSFcloseFracVerbose\",\"self::fraction\"],[\"Rule\",\"fraction\",\n\"brief\",\"[t] CSFopenFracBrief; [n] children/*[1]; [t] CSFoverFracVerbose; [n] children/*[2]; [t] CSFcloseFracBrief\",\"self::fraction\"],[\"Rule\",\"fraction\",\"sbrief\",\"[t] CSFopenFracSbrief; [n] children/*[1]; [t] CSFoverFracSbrief; [n] children/*[2]; [t] CSFcloseFracSbrief\",\"self::fraction\"],'Rule,continued-fraction-outer,default,[t] \"fracci\\u00f3n continua\"; [n] children/*[1];[t] \"entre\"; [n] children/*[2],self::fraction,not(ancestor::fraction),children/*[2]/descendant-or-self::*[@role=\"ellipsis\" and not(following-sibling::*)]'.split(\",\"),\n[\"SpecializedRule\",\"continued-fraction-outer\",\"default\",\"brief\",'[t] \"frac continua\"; [n] children/*[1];[t] \"entre\"; [n] children/*[2]'],[\"SpecializedRule\",\"continued-fraction-outer\",\"brief\",\"sbrief\"],'Rule,continued-fraction-inner,default,[t] \"empezar fracci\\u00f3n\"; [n] children/*[1];[t] \"entre\"; [n] children/*[2],self::fraction,ancestor::fraction,children/*[2]/descendant-or-self::*[@role=\"ellipsis\" and not(following-sibling::*)]'.split(\",\"),[\"SpecializedRule\",\"continued-fraction-inner\",\"default\",\n\"brief\",'[t] \"empezar frac\"; [n] children/*[1];[t] \"entre\"; [n] children/*[2]'],[\"SpecializedRule\",\"continued-fraction-inner\",\"brief\",\"sbrief\",'[t] \"frac\"; [n] children/*[1];[t] \"entre\"; [n] children/*[2]'],[\"Rule\",\"sqrt\",\"default\",\"[t] CSFopenRadicalVerbose; [n] children/*[1]; [t] CSFcloseRadicalVerbose\",\"self::sqrt\"],[\"Rule\",\"sqrt\",\"brief\",\"[t] CSFopenRadicalBrief; [n] children/*[1]; [t] CSFcloseRadicalBrief\",\"self::sqrt\"],[\"Rule\",\"sqrt\",\"sbrief\",\"[t] CSFopenRadicalSbrief; [n] children/*[1]; [t] CSFcloseRadicalBrief\",\n\"self::sqrt\"],\"Rule,root-small,default,[t] CSFopenRadicalVerbose; [n] children/*[2]; [t] CSFcloseRadicalVerbose,self::root,CQFisSmallRoot\".split(\",\"),\"Rule,root-small,brief,[t] CSFopenRadicalBrief; [n] children/*[2]; [t] CSFcloseRadicalBrief,self::root,CQFisSmallRoot\".split(\",\"),\"Rule,root-small,sbrief,[t] CSFopenRadicalSbrief; [n] children/*[2]; [t] CSFcloseRadicalBrief,self::root,CQFisSmallRoot\".split(\",\"),[\"Rule\",\"root\",\"default\",\"[t] CSFindexRadicalVerbose; [n] children/*[1];[t] CSFopenRadicalVerbose; [n] children/*[2]; [t] CSFcloseRadicalVerbose\",\n\"self::root\"],[\"Rule\",\"root\",\"brief\",\"[t] CSFindexRadicalBrief; [n] children/*[1];[t] CSFopenRadicalBrief; [n] children/*[2]; [t] CSFcloseRadicalBrief\",\"self::root\"],[\"Rule\",\"root\",\"sbrief\",\"[t] CSFindexRadicalSbrief; [n] children/*[1];[t] CSFopenRadicalSbrief; [n] children/*[2]; [t] CSFcloseRadicalBrief\",\"self::root\"],'Rule,limboth,default,[n] children/*[1]; [t] CSFunderscript; [n] children/*[2];[t] CSFoverscript; [n] children/*[3],self::limboth,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),\n'Rule,limlower,default,[n] children/*[1]; [t] CSFunderscript; [n] children/*[2];,self::limlower,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),'Rule,limupper,default,[n] children/*[1]; [t] CSFoverscript; [n] children/*[2];,self::limupper,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),'Aliases;limlower;self::underscore;@role=\"limit function\";name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),\n'Aliases;limlower;self::underscore;children/*[2][@role!=\"underaccent\"];name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),'Aliases;limupper;self::overscore;children/*[2][@role!=\"overaccent\"];name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),[\"Rule\",\"limboth-end\",\"default\",'[n] children/*[1]; [t] CSFunderscript; [n] children/*[2];[t] CSFoverscript; [n] children/*[3]; [t] \"finalizar \\u00edndices\"',\n\"self::limboth\"],[\"Rule\",\"limlower-end\",\"default\",'[n] children/*[1]; [t] CSFunderscript; [n] children/*[2]; [t] \"finalizar \\u00edndices\"',\"self::limlower\"],[\"Rule\",\"limupper-end\",\"default\",'[n] children/*[1]; [t] CSFoverscript; [n] children/*[2]; [t] \"finalizar \\u00edndices\"',\"self::limupper\"],[\"Aliases\",\"limlower-end\",\"self::underscore\",'@role=\"limit function\"'],[\"Aliases\",\"limlower-end\",\"self::underscore\"],[\"Aliases\",\"limupper-end\",\"self::overscore\"],[\"Rule\",\"integral\",\"default\",\"[n] children/*[1]; [n] children/*[2]; [n] children/*[3];\",\n\"self::integral\"],'Rule,integral,default,[n] children/*[1]; [t] \"definida\"; [t] \"sub\\u00edndice\"; [n] children/*[2];[t] \"super\\u00edndice\"; [n] children/*[3]; [t] \"l\\u00ednea base\";,self::limboth,@role=\"integral\"'.split(\",\"),[\"SpecializedRule\",\"integral\",\"default\",\"brief\",'[n] children/*[1]; [t] \"Sub\"; [n] children/*[2];[t] \"Sup\"; [n] children/*[3]; [t] \"Base\";'],[\"SpecializedRule\",\"integral\",\"brief\",\"sbrief\"],[\"Rule\",\"bigop\",\"default\",\"[n] children/*[1]; [n] children/*[2];\",\"self::bigop\"],[\"Rule\",\n\"relseq\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::relseq\"],'Rule,equality,default,[n] children/*[1]; [n] content/*[1]; [n] children/*[2],self::relseq,@role=\"equality\",count(./children/*)=2'.split(\",\"),'Rule;multi-equality;default;[m] children/* (sepFunc:CTXFcontentIterator);self::relseq;@role=\"equality\";count(./children/*)>2'.split(\";\"),[\"Rule\",\"multrel\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::multirel\"],[\"Rule\",\"subscript\",\"default\",\"[n] children/*[1]; [t] CSFsubscriptVerbose; [n] children/*[2]\",\n\"self::subscript\"],[\"Rule\",\"subscript\",\"brief\",\"[n] children/*[1]; [t] CSFsubscriptBrief; [n] children/*[2]\",\"self::subscript\"],[\"SpecializedRule\",\"subscript\",\"brief\",\"sbrief\"],'Rule,subscript-baseline,default,[n] children/*[1]; [t] CSFsubscriptVerbose; [n] children/*[2]; [t] CSFbaselineVerbose,self::subscript,following-sibling::*,not(name(following-sibling::subscript/children/*[1])=\"empty\" or (name(following-sibling::infixop[@role=\"implicit\"]/children/*[1])=\"subscript\" and name(following-sibling::*/children/*[1]/children/*[1])=\"empty\")) and @role!=\"subsup\",not(following-sibling::*[@role=\"rightsuper\" or @role=\"rightsub\" or @role=\"leftsub\" or @role=\"leftsub\"])'.split(\",\"),\n[\"SpecializedRule\",\"subscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsubscriptBrief; [n] children/*[2]; [t] CSFbaselineBriefS\"],[\"SpecializedRule\",\"subscript-baseline\",\"brief\",\"sbrief\"],'Aliases;subscript-baseline;self::subscript;not(following-sibling::*);ancestor::fenced|ancestor::root|ancestor::sqrt|ancestor::punctuated|ancestor::fraction;not(ancestor::punctuated[@role=\"leftsuper\" or @role=\"rightsub\" or @role=\"rightsuper\" or @role=\"rightsub\"])'.split(\";\"),[\"Aliases\",\"subscript-baseline\",\n\"self::subscript\",\"not(following-sibling::*)\",\"ancestor::relseq|ancestor::multirel\",sre.MathspeakUtil.generateBaselineConstraint()],[\"Aliases\",\"subscript-baseline\",\"self::subscript\",\"not(following-sibling::*)\",\"@embellished\"],'Rule,subscript-empty-sup,default,[n] children/*[1]; [n] children/*[2],self::subscript,name(children/*[2])=\"infixop\",name(children/*[2][@role=\"implicit\"]/children/*[1])=\"superscript\",name(children/*[2]/children/*[1]/children/*[1])=\"empty\"'.split(\",\"),[\"SpecializedRule\",\"subscript-empty-sup\",\n\"default\",\"brief\"],[\"SpecializedRule\",\"subscript-empty-sup\",\"brief\",\"sbrief\"],[\"Aliases\",\"subscript-empty-sup\",\"self::subscript\",'name(children/*[2])=\"superscript\"','name(children/*[2]/children/*[1])=\"empty\"'],[\"Rule\",\"superscript\",\"default\",\"[n] children/*[1]; [t] CSFsuperscriptVerbose; [n] children/*[2]\",\"self::superscript\"],[\"SpecializedRule\",\"superscript\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsuperscriptBrief; [n] children/*[2]\"],[\"SpecializedRule\",\"superscript\",\"brief\",\"sbrief\"],'Rule,superscript-baseline,default,[n] children/*[1]; [t] CSFsuperscriptVerbose; [n] children/*[2];[t] CSFbaselineVerbose,self::superscript,following-sibling::*,not(name(following-sibling::superscript/children/*[1])=\"empty\" or (name(following-sibling::infixop[@role=\"implicit\"]/children/*[1])=\"superscript\" and name(following-sibling::*/children/*[1]/children/*[1])=\"empty\")) and not(following-sibling::*[@role=\"rightsuper\" or @role=\"rightsub\" or @role=\"leftsub\" or @role=\"leftsub\"])'.split(\",\"),\n[\"SpecializedRule\",\"superscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]; [t] CSFsuperscriptBrief; [n] children/*[2];[t] CSFbaselineBriefS\"],[\"SpecializedRule\",\"superscript-baseline\",\"brief\",\"sbrief\"],'Aliases;superscript-baseline;self::superscript;not(following-sibling::*);ancestor::punctuated;ancestor::*/following-sibling::* and not(ancestor::punctuated[@role=\"leftsuper\" or @role=\"rightsub\" or @role=\"rightsuper\" or @role=\"rightsub\"])'.split(\";\"),[\"Aliases\",\"superscript-baseline\",\"self::superscript\",\n\"not(following-sibling::*)\",\"ancestor::fraction|ancestor::fenced|ancestor::root|ancestor::sqrt\"],[\"Aliases\",\"superscript-baseline\",\"self::superscript\",\"not(following-sibling::*)\",\"ancestor::relseq|ancestor::multirel\",\"not(@embellished)\",sre.MathspeakUtil.generateBaselineConstraint()],'Aliases superscript-baseline self::superscript not(following-sibling::*) @embellished not(children/*[2][@role=\"prime\"])'.split(\" \"),'Rule,superscript-empty-sub,default,[n] children/*[1]; [n] children/*[2],self::superscript,name(children/*[2])=\"infixop\",name(children/*[2][@role=\"implicit\"]/children/*[1])=\"subscript\",name(children/*[2]/children/*[1]/children/*[1])=\"empty\"'.split(\",\"),\n[\"SpecializedRule\",\"superscript-empty-sub\",\"default\",\"brief\"],[\"SpecializedRule\",\"superscript-empty-sub\",\"brief\",\"sbrief\"],[\"Aliases\",\"superscript-empty-sub\",\"self::superscript\",'name(children/*[2])=\"subscript\"','name(children/*[2]/children/*[1])=\"empty\"'],'Rule,square,default,[n] children/*[1]; [t] \"al cuadrado\",self::superscript,children/*[2],children/*[2][text()=2],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),name(children/*[1])!=\"subscript\" or (name(children/*[1])=\"subscript\" and name(children/*[1]/children/*[1])=\"identifier\" and name(children/*[1]/children/*[2])=\"number\" and children/*[1]/children/*[2][@role!=\"mixed\"] and children/*[1]/children/*[2][@role!=\"othernumber\"]),not(@embellished)'.split(\",\"),\n[\"SpecializedRule\",\"square\",\"default\",\"brief\"],[\"SpecializedRule\",\"square\",\"default\",\"sbrief\"],'Aliases;square;self::superscript;children/*[2];children/*[2][text()=2];@embellished;children/*[1][@role=\"prefix operator\"]'.split(\";\"),'Rule,cube,default,[n] children/*[1]; [t] \"al cubo\",self::superscript,children/*[2],children/*[2][text()=3],name(children/*[1])!=\"text\" or not(name(children/*[1])=\"text\" and (name(../../../punctuated[@role=\"text\"]/..)=\"stree\" or name(..)=\"stree\")),name(children/*[1])!=\"subscript\" or (name(children/*[1])=\"subscript\" and name(children/*[1]/children/*[1])=\"identifier\" and name(children/*[1]/children/*[2])=\"number\" and children/*[1]/children/*[2][@role!=\"mixed\"] and children/*[1]/children/*[2][@role!=\"othernumber\"]),not(@embellished)'.split(\",\"),\n[\"SpecializedRule\",\"cube\",\"default\",\"brief\"],[\"SpecializedRule\",\"cube\",\"default\",\"sbrief\"],'Aliases;cube;self::superscript;children/*[2];children/*[2][text()=3];@embellished;children/*[1][@role=\"prefix operator\"]'.split(\";\"),'Rule,prime,default,[n] children/*[1]; [n] children/*[2],self::superscript,children/*[2],children/*[2][@role=\"prime\"]'.split(\",\"),[\"SpecializedRule\",\"prime\",\"default\",\"brief\"],[\"SpecializedRule\",\"prime\",\"default\",\"sbrief\"],'Rule,prime-subscript,default,[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptVerbose; [n] children/*[1]/children/*[2],self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",not(following-sibling::*)'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript\",\"default\",\"brief\",\"[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptBrief; [n] children/*[1]/children/*[2]\"],[\"SpecializedRule\",\"prime-subscript\",\"brief\",\"sbrief\"],'Rule,prime-subscript-baseline,default,[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptVerbose; [n] children/*[1]/children/*[2]; [t] CSFbaselineVerbose,self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",following-sibling::*'.split(\",\"),\n[\"SpecializedRule\",\"prime-subscript-baseline\",\"default\",\"brief\",\"[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptBrief; [n] children/*[1]/children/*[2]; [t] CSFbaselineBriefS\"],[\"SpecializedRule\",\"prime-subscript-baseline\",\"brief\",\"sbrief\"],'Aliases prime-subscript-baseline self::superscript children/*[2][@role=\"prime\"] name(children/*[1])=\"subscript\" not(following-sibling::*) @embellished'.split(\" \"),'Rule,overscore,default,[t] \"modificando superior\"; [n] children/*[1]; [t] \"con\"; [n] children/*[2],self::overscore,children/*[2][@role=\"overaccent\"]'.split(\",\"),\n[\"SpecializedRule\",\"overscore\",\"default\",\"brief\",'[t] \"mod superior\"; [n] children/*[1]; [t] \"con\"; [n] children/*[2]'],[\"SpecializedRule\",\"overscore\",\"brief\",\"sbrief\"],'Rule,double-overscore,default,[t] \"modificando superior superior\"; [n] children/*[1]; [t] \"con\"; [n] children/*[2],self::overscore,children/*[2][@role=\"overaccent\"],name(children/*[1])=\"overscore\",children/*[1]/children/*[2][@role=\"overaccent\"]'.split(\",\"),[\"SpecializedRule\",\"double-overscore\",\"default\",\"brief\",'[t] \"mod superior superior\"; [n] children/*[1]; [t] \"con\"; [n] children/*[2]'],\n[\"SpecializedRule\",\"double-overscore\",\"brief\",\"sbrief\"],'Rule,underscore,default,[t] \"modificando inferior\"; [n] children/*[1]; [t] \"con\"; [n] children/*[2],self::underscore,children/*[2][@role=\"underaccent\"]'.split(\",\"),[\"SpecializedRule\",\"underscore\",\"default\",\"brief\",'[t] \"mod inferior\"; [n] children/*[1]; [t] \"con\"; [n] children/*[2]'],[\"SpecializedRule\",\"underscore\",\"brief\",\"sbrief\"],'Rule,double-underscore,default,[t] \"modificando inferior inferior\"; [n] children/*[1]; [t] \"con\"; [n] children/*[2],self::underscore,children/*[2][@role=\"underaccent\"],name(children/*[1])=\"underscore\",children/*[1]/children/*[2][@role=\"underaccent\"]'.split(\",\"),\n[\"SpecializedRule\",\"double-underscore\",\"default\",\"brief\",'[t] \"mod inferior inferior\"; [n] children/*[1]; [t] \"con\"; [n] children/*[2]'],[\"SpecializedRule\",\"double-underscore\",\"brief\",\"sbrief\"],'Rule,overbar,default,[n] children/*[1]; [t] \"barra\",self::overscore,@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][@role=\"overaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),[\"SpecializedRule\",\"overbar\",\n\"default\",\"brief\",'[n] children/*[1]; [t] \"barra\"'],[\"SpecializedRule\",\"overbar\",\"brief\",\"sbrief\"],'Rule,underbar,default,[n] children/*[1]; [t] \"subbarra\",self::underscore,@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][@role=\"underaccent\"],children/*[2][text()=\"\\u00af\" or text()=\"\\uffe3\" or text()=\"\\uff3f\" or text()=\"_\" or text()=\"\\u203e\"]'.split(\",\"),[\"SpecializedRule\",\"underbar\",\"default\",\"brief\",'[n] children/*[1]; [t] \"subbarra\"'],[\"SpecializedRule\",\"underbar\",\n\"brief\",\"sbrief\"],'Rule,overtilde,default,[n] children/*[1]; [t] \"tilde\",self::overscore,children/*[2][@role=\"overaccent\"],@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][text()=\"~\" or text()=\"\\u02dc\" or text()=\"\\u223c\" or text()=\"\\uff5e\"]'.split(\",\"),[\"SpecializedRule\",\"overtilde\",\"default\",\"brief\",'[n] children/*[1]; [t] \"tilde\"'],[\"SpecializedRule\",\"overtilde\",\"brief\",\"sbrief\"],'Rule,undertilde,default,[n] children/*[1]; [t] \"subtilde\",self::underscore,@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\",children/*[2][@role=\"underaccent\"],children/*[2][text()=\"~\" or text()=\"\\u02dc\" or text()=\"\\u223c\" or text()=\"\\uff5e\"]'.split(\",\"),\n[\"SpecializedRule\",\"undertilde\",\"default\",\"brief\",'[n] children/*[1]; [t] \"subtilde\"'],[\"SpecializedRule\",\"undertilde\",\"brief\",\"sbrief\"],'Rule,matrix-fence,default,[n] children/*[1];,self::fenced,count(children/*)=1,name(children/*[1])=\"matrix\"'.split(\",\"),[\"Rule\",\"matrix\",\"default\",'[t] \"empezar matriz\"; [t] count(children/*);  [t] \"por\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"fila \"); [t] \"finalizar matriz\"',\"self::matrix\"],[\"Rule\",\"matrix\",\"sbrief\",\n'[t] \"matriz\"; [t] count(children/*);  [t] \"por\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\" \"); [t] \"finalizar matriz\"',\"self::matrix\"],[\"Aliases\",\"matrix\",\"self::vector\"],[\"Rule\",\"matrix-row\",\"default\",'[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"columna\");[p] (pause: 200)',\"self::row\"],'Rule{row-with-label{default{[t] \"con etiqueta\"; [n] content/*[1]; [t] \"finalizar etiqueta\" (pause: 200); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"columna\"){self::row{content'.split(\"{\"),\n'Rule{row-with-label{brief{[t] \"etiqueta\"; [n] content/*[1]; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"columna\"){self::row{content'.split(\"{\"),[\"SpecializedRule\",\"row-with-label\",\"brief\",\"sbrief\"],'Rule{row-with-text-label{sbrief{[t] \"etiqueta\"; [t] CSFRemoveParens;[m] children/* (ctxtFunc:CTXFordinalCounter,context:\"columna\"){self::row{content{name(content/cell/children/*[1])=\"text\"'.split(\"{\"),'Rule;empty-row;default;[t] \"espacio\";self::row;count(children/*)=0'.split(\";\"),[\"Rule\",\"matrix-cell\",\n\"default\",\"[n] children/*[1]; [p] (pause: 300)\",\"self::cell\"],'Rule,empty-cell,default,[t] \"espacio\"; [p] (pause: 300),self::cell,count(children/*)=0'.split(\",\"),'Rule{determinant{default{[t] \"empezar determinante\"; [t] count(children/*);  [t] \"por\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"fila \"); [t] \"finalizar determinante\"{self::matrix{@role=\"determinant\"'.split(\"{\"),[\"SpecializedRule\",\"determinant\",\"default\",\"sbrief\",'[t] \"determinante\"; [t] count(children/*);  [t] \"por\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"fila \"); [t] \"finalizar determinante\"'],\n'Rule{determinant-simple{default{[t] \"empezar determinante\"; [t] count(children/*);  [t] \"por\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"fila\",grammar:simpleDet); [t] \"finalizar determinante\"{self::matrix{@role=\"determinant\"{CQFdetIsSimple'.split(\"{\"),[\"SpecializedRule\",\"determinant-simple\",\"default\",\"sbrief\",'[t] \"determinante\"; [t] count(children/*);  [t] \"por\";[t] count(children/*[1]/children/*); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"fila\",grammar:simpleDet); [t] \"finalizar determinante\"'],\n'Rule{row-simple{default{[m] children/*;{self::row{@role=\"determinant\"{contains(@grammar, \"simpleDet\")'.split(\"{\"),[\"Rule\",\"layout\",\"default\",'[t] \"empezar esquema\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"fila \"); [t] \"finalizar esquema\"',\"self::table\"],[\"Rule\",\"layout\",\"sbrief\",'[t] \"esquema\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"fila \"); [t] \"finalizar esquema\"',\"self::table\"],'Rule,binomial,default,[t] \"empezar binomial\"; [n] children/*[1]/children/*[1]; [t] \"en\"; [n] children/*[2]/children/*[1];  [t] \"finalizar binomial\",self::vector,@role=\"binomial\"'.split(\",\"),\n'Rule,binomial,sbrief,[t] \"binomial\"; [n] children/*[1]/children/*[1]; [t] \"en\"; [n] children/*[2]/children/*[1];  [t] \"finalizar binomial\",self::vector,@role=\"binomial\"'.split(\",\"),[\"Rule\",\"cases\",\"default\",'[t] \"empezar esquema\"; [n] content/*[1]; [t] \"alargada\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"fila \"); [t] \"finalizar esquema\"',\"self::cases\"],[\"Rule\",\"cases\",\"sbrief\",'[t] \"esquema\"; [n] content/*[1]; [t] \"alargada\"; [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"fila \"); [t] \"finalizar esquema\"',\n\"self::cases\"],[\"Aliases\",\"layout\",\"self::multiline\"],[\"Rule\",\"line\",\"default\",\"[m] children/*\",\"self::line\"],'Rule,line-with-label,default,[t] \"con etiqueta\"; [n] content/*[1]; [t] \"finalizar etiqueta\" (pause: 200); [m] children/*,self::line,content'.split(\",\"),[\"SpecializedRule\",\"line-with-label\",\"default\",\"brief\",'[t] \"etiqueta\"; [n] content/*[1] (pause: 200); [m] children/*'],[\"SpecializedRule\",\"line-with-label\",\"brief\",\"sbrief\"],'Rule,line-with-text-label,sbrief,[t] \"etiqueta\"; [t] CSFRemoveParens; [m] children/*,self::line,content,name(content/cell/children/*[1])=\"text\"'.split(\",\"),\n'Rule;empty-line;default;[t] \"espacio\";self::line;count(children/*)=0;not(content)'.split(\";\"),[\"SpecializedRule\",\"empty-line\",\"default\",\"brief\"],[\"SpecializedRule\",\"empty-line\",\"brief\",\"sbrief\"],'Rule,empty-line-with-label,default,[t] \"con etiqueta\"; [n] content/*[1]; [t] \"finalizar etiqueta\" (pause: 200); [t] \"espacio\",self::line,count(children/*)=0,content'.split(\",\"),[\"SpecializedRule\",\"empty-line-with-label\",\"default\",\"brief\",'[t] \"etiqueta\"; [n] content/*[1] (pause: 200); [t] \"espacio\"'],[\"SpecializedRule\",\n\"empty-line-with-label\",\"brief\",\"sbrief\"],[\"Rule\",\"enclose\",\"default\",'[t] \"empezar rodear\"; [t] @role (grammar:localEnclose); [n] children/*[1]; [t] \"finalizar rodear\"',\"self::enclose\"],[\"Aliases\",\"overbar\",\"self::enclose\",'@role=\"top\"'],[\"Aliases\",\"underbar\",\"self::enclose\",'@role=\"bottom\"'],'Rule,leftbar,default,[t] \"barra vertical\"; [n] children/*[1],self::enclose,@role=\"left\"'.split(\",\"),'Rule,rightbar,default,[n] children/*[1]; [t] \"barra vertical\",self::enclose,@role=\"right\"'.split(\",\"),'Rule,crossout,default,[t] \"tachado\"; [n] children/*[1]; [t] \"finalizar tachado\",self::enclose,@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'.split(\",\"),\n'Rule,cancel,default,[t] \"tachado\"; [n] children/*[1]/children/*[1]; [t] \"con\"; [n] children/*[2]; [t] \"finalizar tachado\",self::overscore,@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'.split(\",\"),[\"SpecializedRule\",\"cancel\",\"default\",\"brief\"],[\"SpecializedRule\",\"cancel\",\"default\",\"sbrief\"],[\"Aliases\",\"cancel\",\"self::underscore\",'@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'],'Rule,cancel-reverse,default,[t] \"tachado\"; [n] children/*[2]/children/*[1]; [t] \"con\"; [n] children/*[1]; [t] \"finalizar tachado\",self::overscore,name(children/*[2])=\"enclose\",children/*[2][@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"]'.split(\",\"),\n[\"SpecializedRule\",\"cancel-reverse\",\"default\",\"brief\"],[\"SpecializedRule\",\"cancel-reverse\",\"default\",\"sbrief\"],[\"Aliases\",\"cancel-reverse\",\"self::underscore\",'name(children/*[2])=\"enclose\"','children/*[2][@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"]'],'Rule;end-punct;default;[m] children/*;self::punctuated;@role=\"endpunct\"'.split(\";\"),'Rule,start-punct,default,[n] content/*[1]; [m] children/*[position()>1],self::punctuated,@role=\"startpunct\"'.split(\",\"),'Rule,integral-punct,default,[n] children/*[1]; [n] children/*[3],self::punctuated,@role=\"integral\"'.split(\",\"),\n[\"Rule\",\"punctuated\",\"default\",\"[m] children/*\",\"self::punctuated\"],'Rule;unit-singular;default;[t] text() (grammar:annotation=\"unit\":translate);self::identifier;@role=\"unit\"'.split(\";\"),'Rule;unit-plural;default;[t] text() (grammar:annotation=\"unit\":translate:plural);self::identifier;@role=\"unit\";not(contains(@grammar, \"singularUnit\"))'.split(\";\"),'Rule,unit-square,default,[n] children/*[1]; [t] \"cuadrado\",self::superscript,@role=\"unit\",children/*[2][text()=2],name(children/*[1])=\"identifier\"'.split(\",\"),\n'Rule,unit-cubic,default,[n] children/*[1]; [t] \"c\\u00fabico\",self::superscript,@role=\"unit\",children/*[2][text()=3],name(children/*[1])=\"identifier\"'.split(\",\"),'Rule,reciprocal,default,[t] \"rec\\u00edproco\"; [n] children/*[1],self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],count(preceding-sibling::*)=0 or preceding-sibling::*[@role!=\"unit\"]'.split(\",\"),'Rule,reciprocal,default,[t] \"por\"; [n] children/*[1],self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],preceding-sibling::*[@role=\"unit\"]'.split(\",\"),\n'Rule;unit-combine;default;[m] children/* (sepFunc:CTXFunitMultipliers);self::infixop;@role=\"unit\"'.split(\";\"),'Rule,unit-combine-mult,default,[m] children/* (sepFunc:CTXFunitMultipliers);,self::infixop,@role=\"multiplication\" or @role=\"implicit\",children/*[@role=\"unit\"]'.split(\",\"),'Rule{unit-combiner-singular{default{[n] children/*[1]; [t] \"por\"; [m] children/*[position()>1] (grammar:!singularUnit, sepFunc:CTXFunitMultipliers){self::infixop{@role=\"unit\"{name(children/*[1])!=\"number\"{contains(@grammar, \"singularUnit\"){count(children/*)>1'.split(\"{\"),\n'Rule,unit-combine-singular-first,default,[n] children/*[1]; [n] children/*[2] (grammar:singularUnit); [t] \"por\"; [m] children/*[position()>2] (sepFunc:CTXFunitMultipliers),self::infixop,@role=\"unit\",name(children/*[1])=\"number\",children/*[1][text()=1]'.split(\",\"),'Rule,unit-combine-singular-first,default,[n] children/*[1]; [n] children/*[2] (grammar:singularUnit); ,self::infixop,@role=\"unit\",name(children/*[1])=\"number\",children/*[1][text()=1],count(children/*)=2'.split(\",\"),'Rule,unit-divide,default,[n] children/*[1]; [t] \"por\"; [n] children/*[2] (grammar:singularUnit),self::fraction,@role=\"unit\"'.split(\",\")],\ninitialize:[sre.MathspeakUtil.generateTensorRules]};sre.NemethUtil={};sre.NemethUtil.openingFraction=function(a){a=sre.MathspeakUtil.fractionNestingDepth(a);return Array(a).join(sre.Messages.MS.FRACTION_REPEAT)+sre.Messages.MS.FRACTION_START};sre.NemethUtil.closingFraction=function(a){a=sre.MathspeakUtil.fractionNestingDepth(a);return Array(a).join(sre.Messages.MS.FRACTION_REPEAT)+sre.Messages.MS.FRACTION_END};sre.NemethUtil.overFraction=function(a){a=sre.MathspeakUtil.fractionNestingDepth(a);return Array(a).join(sre.Messages.MS.FRACTION_REPEAT)+sre.Messages.MS.FRACTION_OVER};\nsre.NemethUtil.overBevelledFraction=function(a){a=sre.MathspeakUtil.fractionNestingDepth(a);return Array(a).join(sre.Messages.MS.FRACTION_REPEAT)+\"\\u2838\"+sre.Messages.MS.FRACTION_OVER};sre.NemethUtil.nestedRadical=function(a,b){a=sre.NemethUtil.radicalNestingDepth(a);return 1===a?b:Array(a).join(sre.Messages.MS.NESTED)+b};sre.NemethUtil.radicalNestingDepth=function(a,b){b=b||0;return a.parentNode?sre.NemethUtil.radicalNestingDepth(a.parentNode,\"root\"===a.tagName||\"sqrt\"===a.tagName?b+1:b):b};\nsre.NemethUtil.openingRadical=function(a){return sre.NemethUtil.nestedRadical(a,sre.Messages.MS.STARTROOT)};sre.NemethUtil.closingRadical=function(a){return sre.NemethUtil.nestedRadical(a,sre.Messages.MS.ENDROOT)};sre.NemethUtil.indexRadical=function(a){return sre.NemethUtil.nestedRadical(a,sre.Messages.MS.ROOTINDEX)};\nsre.NemethUtil.enlargeFence=function(a){if(1===a.length)return\"\\u2820\"+a;var b=a.split(\"\");return b.every(function(c){return\"\\u2833\"===c})?\"\\u2820\"+b.join(\"\\u2820\"):a.slice(0,1)+\"\\u2820\"+a.slice(1)};sre.Grammar.getInstance().setCorrection(\"enlargeFence\",sre.NemethUtil.enlargeFence);sre.NemethUtil.NUMBER_PROPAGATORS_=[sre.SemanticAttr.Type.MULTIREL,sre.SemanticAttr.Type.RELSEQ,sre.SemanticAttr.Type.PUNCTUATED,sre.SemanticAttr.Type.APPL];\nsre.NemethUtil.checkParent_=function(a){a=a.parent;if(!a)return!1;var b=a.type;return-1!==sre.NemethUtil.NUMBER_PROPAGATORS_.indexOf(b)||b===sre.SemanticAttr.Type.PREFIXOP&&a.role===sre.SemanticAttr.Role.NEGATIVE?!0:!1};sre.NemethUtil.propagateNumber=function(a,b){if(!a.childNodes.length)return sre.NemethUtil.checkParent_(a)&&(b.number=!0),[b.number?\"number\":\"\",{number:!1}];sre.NemethUtil.checkParent_(a)&&(b.number=!0);return[\"\",b]};\nsre.NemethUtil.numberIndicator=function(){return new sre.SemanticVisitor(\"nemeth\",sre.NemethUtil.propagateNumber,{number:!0})};sre.NemethUtil.addAnnotators=function(){sre.SemanticAnnotations.getInstance().register(sre.NemethUtil.numberIndicator())};sre.NemethUtil.componentString_={2:\"CSFbaseline\",1:\"CSFsubscript\",0:\"CSFsuperscript\"};sre.NemethUtil.childNumber_={4:2,3:3,2:1,1:4,0:5};\nsre.NemethUtil.generateTensorRuleStrings_=function(a){var b=[],c=\"\";a=parseInt(a,2);for(var d=0;5>d;d++){var e=\"children/*[\"+sre.NemethUtil.childNumber_[d]+\"]\";a&1?c=\"[t] \"+sre.NemethUtil.componentString_[d%3]+\"Verbose; [n] \"+e+\";\"+c:b.unshift(\"name(\"+e+')=\"empty\"');a>>=1}b.push(c);return b};\nsre.NemethUtil.generateTensorRules=function(a){var b=goog.bind(a.defineRule,a);a=goog.bind(a.defineRulesAlias,a);for(var c=\"11111 11110 11101 11100 10111 10110 10101 10100 01111 01110 01101 01100\".split(\" \"),d=0,e;e=c[d];d++){var f=\"tensor\"+e;e=sre.NemethUtil.generateTensorRuleStrings_(e);var g=e.pop(),h=[f,\"default\",g,\"self::tensor\"].concat(e);b.apply(null,h);g+=\"; [t]\"+sre.NemethUtil.componentString_[2]+\"Verbose\";f+=\"-baseline\";h=[f,\"default\",g,\"self::tensor\",\"following-sibling::*\"].concat(e);b.apply(null,\nh);f=[f,\"self::tensor\",\"not(following-sibling::*)\",\"ancestor::fraction|ancestor::punctuated|ancestor::fenced|ancestor::root|ancestor::sqrt|ancestor::relseq|ancestor::multirel|@embellished\"].concat(e);a.apply(null,f)}};sre.NemethRules={locale:\"nemeth\",modality:\"braille\",domain:\"default\",functions:[[\"CQF\",\"CQFspaceoutNumber\",sre.MathspeakUtil.spaceoutNumber],[\"CQF\",\"CQFspaceoutIdentifier\",sre.MathspeakUtil.spaceoutIdentifier],[\"CSF\",\"CSFspaceoutText\",sre.MathspeakUtil.spaceoutText],[\"CSF\",\"CSFopenFraction\",sre.NemethUtil.openingFraction],[\"CSF\",\"CSFcloseFraction\",sre.NemethUtil.closingFraction],[\"CSF\",\"CSFoverFraction\",sre.NemethUtil.overFraction],[\"CSF\",\"CSFoverBevFraction\",sre.NemethUtil.overBevelledFraction],\n[\"CSF\",\"CSFopenRadicalVerbose\",sre.NemethUtil.openingRadical],[\"CSF\",\"CSFcloseRadicalVerbose\",sre.NemethUtil.closingRadical],[\"CSF\",\"CSFindexRadicalVerbose\",sre.NemethUtil.indexRadical],[\"CSF\",\"CSFsuperscriptVerbose\",sre.MathspeakUtil.superscriptVerbose],[\"CSF\",\"CSFsubscriptVerbose\",sre.MathspeakUtil.subscriptVerbose],[\"CSF\",\"CSFbaselineVerbose\",sre.MathspeakUtil.baselineVerbose],[\"CSF\",\"CSFunderscript\",sre.MathspeakUtil.nestedUnderscore],[\"CSF\",\"CSFoverscript\",sre.MathspeakUtil.nestedOverscore],\n[\"CTXF\",\"CTXFordinalCounter\",sre.NumbersUtil.ordinalCounter],[\"CTXF\",\"CTXFcontentIterator\",sre.StoreUtil.contentIterator],[\"CQF\",\"CQFdetIsSimple\",sre.MathspeakUtil.determinantIsSimple],[\"CSF\",\"CSFRemoveParens\",sre.MathspeakUtil.removeParens],[\"CQF\",\"CQFresetNesting\",sre.MathspeakUtil.resetNestingDepth]],rules:[\"Rule;stree;default;[n] ./*[1];self::stree;CQFresetNesting\".split(\";\"),[\"Rule\",\"unknown\",\"default\",\"[n] text()\",\"self::unknown\"],'Rule;protected;default;[t] text();self::*;@role=\"protected\"'.split(\";\"),\n[\"Rule\",\"omit-empty\",\"default\",\"[p] (pause:100)\",\"self::empty\"],'Rule;blank-empty;default;[t] \"\\u2800\";self::empty;count(../*)=1;name(../..)=\"cell\" or name(../..)=\"line\"'.split(\";\"),'Rule{font{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),'Rule{font-identifier-short{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"normal\"{\"\"=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\"){@role!=\"unit\"'.split(\"{\"),\n'Rule{font-identifier{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1{@font{@font=\"normal\"{not(contains(@grammar, \"ignoreFont\")){@role!=\"unit\"'.split(\"{\"),'Rule;omit-font;default;[n] . (grammar:ignoreFont=@font);self::identifier;string-length(text())=1;@font;@role!=\"greekletter\";not(contains(@grammar, \"ignoreFont\"));@font=\"italic\"'.split(\";\"),'Rule{number-indicator{default{[t] \"\\u283c\"; [n] text() (pause:10){self::number{contains(@annotation, \"nemeth:number\"){not(ancestor::sqrt){not(ancestor::root){not(ancestor::fraction)'.split(\"{\"),\n[\"Rule\",\"number\",\"default\",\"[n] text()\",\"self::number\"],'Rule,mixed-number,default,[n] children/*[1]; [t] \"\\u2838\\u2839\"; [n] children/*[2]/children/*[1]; [t] \"\\u280c\"; [n] children/*[2]/children/*[2]; [t] \"\\u2838\\u283c\",self::number,@role=\"mixed\"'.split(\",\"),'Rule{number-with-chars{default{[t] \"\\u283c\"; [m] CQFspaceoutNumber{self::number{\"\" != translate(text(), \"0123456789.,\", \"\"){text() != translate(text(), \"0123456789.,\", \"\")'.split(\"{\"),'Rule{number-as-upper-word{default{[t] \"UpperWord\"; [t] CSFspaceoutText{self::number{string-length(text())>1{text()=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9\", \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\"){\"\"=translate(text(), \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\",\"\")'.split(\"{\"),\n'Rule{number-baseline{default{[t] \"\\u2810\"; [n] text(){self::number{not(contains(@grammar, \"ignoreFont\")){preceding-sibling::identifier{preceding-sibling::*[1][@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]{parent::*/parent::infixop[@role=\"implicit\"]'.split(\"{\"),'Rule{number-baseline-font{default{[t] \"\\u2810\"; [t] @font; [n] . (grammar:ignoreFont=@font){self::number{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"{preceding-sibling::identifier{preceding-sibling::*[@role=\"latinletter\" or @role=\"greekletter\" or @role=\"otherletter\"]{parent::*/parent::infixop[@role=\"implicit\"]'.split(\"{\"),\n'Rule;identifier;default;[n] text();self::identifier;@role=\"protected\"'.split(\";\"),'Rule,negative,default,[t] \"\\u2824\"; [n] children/*[1],self::prefixop,@role=\"negative\"'.split(\",\"),[\"Rule\",\"prefix\",\"default\",\"[n] text(); [n] children/*[1]\",\"self::prefixop\"],[\"Rule\",\"postfix\",\"default\",\"[n] children/*[1]; [n] text()\",\"self::postfixop\"],[\"Rule\",\"binary-operation\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator);\",\"self::infixop\"],'Rule;implicit;default;[m] children/*;self::infixop;@role=\"implicit\"'.split(\";\"),\n[\"Aliases\",\"implicit\",\"self::infixop\",'@role=\"leftsuper\" or @role=\"leftsub\" or @role=\"rightsuper\" or @role=\"rightsub\"'],[\"Rule\",\"function-named\",\"default\",'[n] children/*[1]; [t] \"\\u2800\"; [n] children/*[2]',\"self::appl\"],'Rule,function-prefix,default,[n] content/*[1]; [t] \"\\u2800\"; [n] children/*[1],self::prefixop,content/*[1][@role=\"infix function\"]'.split(\",\"),'Rule,function-infix,default,[n] children/*[1]; [n] content/*[1]; [t] \"\\u2800\"; [n] children/*[2],self::infixop,@role=\"infix function\"'.split(\",\"),\n'Rule,function-simple,default,[n] children/*[1]; [n] children/*[2],self::appl,children/*[1][@role=\"simple function\"]'.split(\",\"),[\"Rule\",\"fences-open-close\",\"default\",\"[n] content/*[1]; [n] children/*[1]; [n] content/*[2]\",\"self::fenced\"],'Rule,fences-neutral,default,[n] content/*[1]; [n] children/*[1]; [n] content/*[2],self::fenced,@role=\"neutral\"'.split(\",\"),[\"Rule\",\"text\",\"default\",\"[n] text()\",\"self::text\"],'Rule;factorial;default;[t] \"\\u282f\";self::punctuation;text()=\"!\";name(preceding-sibling::*[1])!=\"text\"'.split(\";\"),\n'Rule;single-prime;default;[t] \"\\u2804\";self::punctuated;@role=\"prime\";count(children/*)=1'.split(\";\"),'Rule;double-prime;default;[t] \"\\u2804\\u2804\";self::punctuated;@role=\"prime\";count(children/*)=2'.split(\";\"),'Rule;triple-prime;default;[t] \"\\u2804\\u2804\\u2804\";self::punctuated;@role=\"prime\";count(children/*)=3'.split(\";\"),'Rule;quadruple-prime;default;[t] \"\\u2804\\u2804\\u2804\\u2804\";self::punctuated;@role=\"prime\";count(children/*)=4'.split(\";\"),[\"Rule\",\"fraction\",\"default\",\"[t] CSFopenFraction; [n] children/*[1]; [t] CSFoverFraction; [n] children/*[2]; [t] CSFcloseFraction\",\n\"self::fraction\"],'Rule{bevelled-fraction{default{[t] CSFopenFraction; [n] children/*[1]; [t] CSFoverBevFraction; [n] children/*[2]; [t] CSFcloseFraction{self::fraction{contains(@annotation, \"general:bevelled\")'.split(\"{\"),[\"Rule\",\"sqrt\",\"default\",\"[t] CSFopenRadicalVerbose; [n] children/*[1]; [t] CSFcloseRadicalVerbose\",\"self::sqrt\"],[\"Rule\",\"root\",\"default\",'[t] CSFindexRadicalVerbose; [n] children/*[1];[t] \"\\u281c\"; [n] children/*[2]; [t] CSFcloseRadicalVerbose',\"self::root\"],'Rule,limboth,default,[t] \"\\u2810\"; [n] children/*[1]; [t] CSFunderscript; [n] children/*[2];[t] CSFoverscript; [n] children/*[3],self::limboth,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),\n'Rule,limlower,default,[t] \"\\u2810\"; [n] children/*[1]; [t] CSFunderscript; [n] children/*[2];,self::limlower,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),'Rule,limupper,default,[t] \"\\u2810\"; [n] children/*[1]; [t] CSFoverscript; [n] children/*[2];,self::limupper,name(../..)=\"underscore\" or name(../..)=\"overscore\",following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\",\"),'Aliases;limlower;self::underscore;@role=\"limit function\";name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),\n'Aliases;limlower;self::underscore;children/*[2][@role!=\"underaccent\"];name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),'Aliases;limupper;self::overscore;children/*[2][@role!=\"overaccent\"];name(../..)=\"underscore\" or name(../..)=\"overscore\";following-sibling::*[@role!=\"underaccent\" and @role!=\"overaccent\"]'.split(\";\"),[\"Rule\",\"limboth-end\",\"default\",'[t] \"\\u2810\"; [n] children/*[1]; [t] CSFunderscript; [n] children/*[2];[t] CSFoverscript; [n] children/*[3]; [t] \"\\u283b\"',\n\"self::limboth\"],[\"Rule\",\"limlower-end\",\"default\",'[t] \"\\u2810\"; [n] children/*[1]; [t] CSFunderscript; [n] children/*[2]; [t] \"\\u283b\"',\"self::limlower\"],[\"Rule\",\"limupper-end\",\"default\",'[t] \"\\u2810\"; [n] children/*[1]; [t] CSFoverscript; [n] children/*[2]; [t] \"\\u283b\"',\"self::limupper\"],[\"Aliases\",\"limlower-end\",\"self::underscore\",'@role=\"limit function\"'],[\"Aliases\",\"limlower-end\",\"self::underscore\"],[\"Aliases\",\"limupper-end\",\"self::overscore\"],[\"Rule\",\"integral\",\"default\",\"[n] children/*[1]; [n] children/*[2]; [n] children/*[3];\",\n\"self::integral\"],'Rule,integral,default,[n] children/*[1]; [t] \"\\u2830\"; [n] children/*[2];[t] \"\\u2818\"; [n] children/*[3]; [t] \"\\u2810\",self::limboth,@role=\"integral\"'.split(\",\"),[\"Rule\",\"bigop\",\"default\",\"[n] children/*[1]; [n] children/*[2];\",\"self::bigop\"],[\"Rule\",\"relseq\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::relseq\"],'Rule,equality,default,[n] children/*[1]; [n] content/*[1]; [n] children/*[2],self::relseq,@role=\"equality\",count(./children/*)=2'.split(\",\"),'Rule;multi-equality;default;[m] children/* (sepFunc:CTXFcontentIterator);self::relseq;@role=\"equality\";count(./children/*)>2'.split(\";\"),\n[\"Rule\",\"multrel\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::multirel\"],[\"Rule\",\"subscript\",\"default\",\"[n] children/*[1]; [t] CSFsubscriptVerbose; [n] children/*[2]\",\"self::subscript\"],'Rule,subscript-simple,default,[n] children/*[1]; [n] children/*[2],self::subscript,name(./children/*[1])=\"identifier\",name(./children/*[2])=\"number\",./children/*[2][@role!=\"mixed\"],./children/*[2][@role!=\"othernumber\"],self::*'.split(\",\"),'Rule,subscript-baseline,default,[n] children/*[1]; [t] CSFsubscriptVerbose; [n] children/*[2]; [t] CSFbaselineVerbose,self::subscript,following-sibling::*,@role!=\"prefix function\",not(name(following-sibling::subscript/children/*[1])=\"empty\" or (name(following-sibling::infixop[@role=\"implicit\"]/children/*[1])=\"subscript\" and name(following-sibling::*/children/*[1]/children/*[1])=\"empty\")) and @role!=\"subsup\",not(following-sibling::*[@role=\"rightsuper\" or @role=\"rightsub\" or @role=\"leftsub\" or @role=\"leftsub\"])'.split(\",\"),\n'Aliases;subscript-baseline;self::subscript;not(following-sibling::*);ancestor::fenced|ancestor::root|ancestor::sqrt|ancestor::punctuated|ancestor::fraction;not(ancestor::punctuated[@role=\"leftsuper\" or @role=\"rightsub\" or @role=\"rightsuper\" or @role=\"rightsub\"])'.split(\";\"),[\"Aliases\",\"subscript-baseline\",\"self::subscript\",\"not(following-sibling::*)\",\"ancestor::relseq|ancestor::multirel\",sre.MathspeakUtil.generateBaselineConstraint()],[\"Aliases\",\"subscript-baseline\",\"self::subscript\",\"not(following-sibling::*)\",\n\"@embellished\"],'Rule,subscript-empty-sup,default,[n] children/*[1]; [n] children/*[2],self::subscript,name(children/*[2])=\"infixop\",name(children/*[2][@role=\"implicit\"]/children/*[1])=\"superscript\",name(children/*[2]/children/*[1]/children/*[1])=\"empty\"'.split(\",\"),[\"Aliases\",\"subscript-empty-sup\",\"self::subscript\",'name(children/*[2])=\"superscript\"','name(children/*[2]/children/*[1])=\"empty\"'],[\"Rule\",\"superscript\",\"default\",\"[n] children/*[1]; [t] CSFsuperscriptVerbose; [n] children/*[2]\",\"self::superscript\"],\n'Rule,superscript-baseline,default,[n] children/*[1]; [t] CSFsuperscriptVerbose; [n] children/*[2];[t] CSFbaselineVerbose,self::superscript,following-sibling::*,@role!=\"prefix function\",not(name(following-sibling::superscript/children/*[1])=\"empty\" or (name(following-sibling::infixop[@role=\"implicit\"]/children/*[1])=\"superscript\" and name(following-sibling::*/children/*[1]/children/*[1])=\"empty\")) and not(following-sibling::*[@role=\"rightsuper\" or @role=\"rightsub\" or @role=\"leftsub\" or @role=\"leftsub\"])'.split(\",\"),\n'Aliases;superscript-baseline;self::superscript;not(following-sibling::*);ancestor::punctuated;ancestor::*/following-sibling::* and not(ancestor::punctuated[@role=\"leftsuper\" or @role=\"rightsub\" or @role=\"rightsuper\" or @role=\"rightsub\"])'.split(\";\"),[\"Aliases\",\"superscript-baseline\",\"self::superscript\",\"not(following-sibling::*)\",\"ancestor::fraction|ancestor::fenced|ancestor::root|ancestor::sqrt\"],[\"Aliases\",\"superscript-baseline\",\"self::superscript\",\"not(following-sibling::*)\",\"ancestor::relseq|ancestor::multirel\",\n\"not(@embellished)\",sre.MathspeakUtil.generateBaselineConstraint()],'Aliases superscript-baseline self::superscript not(following-sibling::*) @embellished not(children/*[2][@role=\"prime\"])'.split(\" \"),'Rule,superscript-empty-sub,default,[n] children/*[1]; [n] children/*[2],self::superscript,name(children/*[2])=\"infixop\",name(children/*[2][@role=\"implicit\"]/children/*[1])=\"subscript\",name(children/*[2]/children/*[1]/children/*[1])=\"empty\"'.split(\",\"),[\"Aliases\",\"superscript-empty-sub\",\"self::superscript\",\n'name(children/*[2])=\"subscript\"','name(children/*[2]/children/*[1])=\"empty\"'],'Rule,prime,default,[n] children/*[1]; [n] children/*[2],self::superscript,children/*[2],children/*[2][@role=\"prime\"]'.split(\",\"),'Rule,prime-subscript,default,[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptVerbose; [n] children/*[1]/children/*[2],self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",not(following-sibling::*)'.split(\",\"),'Rule,prime-subscript-baseline,default,[n] children/*[1]/children/*[1]; [n] children/*[2]; [t] CSFsubscriptVerbose; [n] children/*[1]/children/*[2]; [t] CSFbaselineVerbose,self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",following-sibling::*'.split(\",\"),\n'Aliases prime-subscript-baseline self::superscript children/*[2][@role=\"prime\"] name(children/*[1])=\"subscript\" not(following-sibling::*) @embellished'.split(\" \"),'Rule,prime-subscript-simple,default,[n] children/*[1]/children/*[1]; [n] children/*[2];[n] children/*[1]/children/*[2],self::superscript,children/*[2][@role=\"prime\"],name(children/*[1])=\"subscript\",name(children/*[1]/children/*[1])=\"identifier\",name(children/*[1]/children/*[2])=\"number\",children/*[1]/children/*[2][@role!=\"mixed\"],children/*[1]/children/*[2][@role!=\"othernumber\"]'.split(\",\"),\n'Rule,overscore,default,[t] \"\\u2810\"; [n] children/*[1]; [t] \"\\u2823\"; [n] children/*[2]; [t] \"\\u283b\",self::overscore,children/*[2][@role=\"overaccent\"]'.split(\",\"),'Rule{overscore{default{[n] children/*[1]; [t] \"\\u2823\"; [n] children/*[2]{self::overscore{children/*[2][@role=\"overaccent\"]{contains(@grammar, \"modified\")'.split(\"{\"),'Rule,double-overscore,default,[t] \"\\u2810\"; [n] children/*[1] (grammar:\"modified\"); [t] \"\\u2823\"; [n] children/*[2]; [t] \"\\u283b\",self::overscore,children/*[2][@role=\"overaccent\"],name(children/*[1])=\"overscore\",children/*[1]/children/*[2][@role=\"overaccent\"]'.split(\",\"),\n'Rule,underscore,default,[t] \"\\u2810\"; [n] children/*[1]; [t] \"\\u2829\"; [n] children/*[2]; [t] \"\\u283b\",self::underscore,children/*[2][@role=\"underaccent\"]'.split(\",\"),'Rule{underscore{default{[n] children/*[1]; [t] \"\\u2829\"; [n] children/*[2]{self::underscore{children/*[2][@role=\"underaccent\"]{contains(@grammar, \"modified\")'.split(\"{\"),'Rule,double-underscore,default,[t] \"\\u2810\"; [n] children/*[1] (grammar:\"modified\"); [t] \"\\u2829\"; [n] children/*[2]; [t] \"\\u283b\",self::underscore,children/*[2][@role=\"underaccent\"],name(children/*[1])=\"underscore\",children/*[1]/children/*[2][@role=\"underaccent\"]'.split(\",\"),\n'Rule,matrix-fence,default,[n] children/*[1];,self::fenced,count(children/*)=1,name(children/*[1])=\"matrix\"'.split(\",\"),[\"Rule\",\"matrix\",\"default\",'[m] children/* (separator:\"\\u2800\", join:\"\");',\"self::matrix\"],[\"Aliases\",\"matrix\",\"self::vector\"],[\"Rule\",\"matrix-row\",\"default\",'[n] ../../content/*[1] (grammar:enlargeFence); [m] children/* (separator:\"\\u2800\"); [n] ../../content/*[2] (grammar:enlargeFence); ',\"self::row\"],[\"Aliases\",\"matrix-row\",\"self::line\",'@role=\"vector\"'],[\"Aliases\",\"matrix-row\",\n\"self::line\",'@role=\"binomial\"'],'Rule{row-with-label{default{[t] \"with Label\"; [n] content/*[1]; [t] \"EndLabel\"(pause: 200); [m] children/* (ctxtFunc:CTXFordinalCounter,context:\"Column\"){self::row{content'.split(\"{\"),'Rule;empty-row;default;[t] \"\\u2800\" (pause:300);self::row;count(children/*)=0'.split(\";\"),[\"Rule\",\"matrix-cell\",\"default\",\"[n] children/*[1]\",\"self::cell\"],'Rule;empty-cell;default;[t] \"\\u2800\" (pause: 300);self::cell;count(children/*)=0'.split(\";\"),[\"Rule\",\"layout\",\"default\",'[m] children/* (separator:\"\\u2800\", join:\"\");',\n\"self::table\"],[\"Rule\",\"cases\",\"default\",'[n] ../../content/*[1] (grammar:enlargeFence); [m] children/* (separator:\"\\u2800\"); [t] \"\\u2810\"',\"self::cases\"],[\"Aliases\",\"layout\",\"self::multiline\"],[\"Rule\",\"line\",\"default\",\"[m] children/*\",\"self::line\"],'Rule,line-with-label,default,[t] \"with Label\"; [n] content/*[1]; [t] \"EndLabel\" (pause: 200); [m] children/*,self::line,content'.split(\",\"),'Rule;empty-line;default;[t] \"\\u2800\";self::line;count(children/*)=0;not(content)'.split(\";\"),'Rule,empty-line-with-label,default,[t] \"with Label\"; [n] content/*[1]; [t] \"EndLabel\"(pause: 200); [t] \"Blank\",self::line,count(children/*)=0,content'.split(\",\"),\n[\"Rule\",\"enclose\",\"default\",'[t] \"StartEnclose\"; [t] @role (grammar:localEnclose); [n] children/*[1]; [t] \"EndEnclose\"',\"self::enclose\"],'Rule,overbar,default,[t] \"\\u2810\"; [n] children/*[1]; [t] \"\\u2823\\u2831\\u283b\",self::enclose,@role=\"top\"'.split(\",\"),'Rule,underbar,default,[t] \"\\u2810\"; [n] children/*[1]; [t] \"\\u2829\\u2831\\u283b\",self::enclose,@role=\"bottom\"'.split(\",\"),'Rule,leftbar,default,[t] \"\\u2833\"; [n] children/*[1],self::enclose,@role=\"left\"'.split(\",\"),'Rule,rightbar,default,[n] children/*[1]; [t] \"\\u2833\",self::enclose,@role=\"right\"'.split(\",\"),\n'Rule,crossout,default,[t] \"\\u282a\"; [n] children/*[1]; [t] \"\\u283b\",self::enclose,@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'.split(\",\"),'Rule,cancel,default,[t] \"\\u282a\"; [n] children/*[1]/children/*[1]; [t] \"\\u282a\"; [n] children/*[2]; [t] \"\\u283b\",self::overscore,@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'.split(\",\"),[\"Aliases\",\"cancel\",\"self::underscore\",'@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"'],\n'Rule,cancel-reverse,default,[t] \"\\u282a\"; [n] children/*[2]/children/*[1]; [t] \"\\u282a\"; [n] children/*[1]; [t] \"\\u283b\",self::overscore,name(children/*[2])=\"enclose\",children/*[2][@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"]'.split(\",\"),[\"Aliases\",\"cancel-reverse\",\"self::underscore\",'name(children/*[2])=\"enclose\"','children/*[2][@role=\"updiagonalstrike\" or @role=\"downdiagonalstrike\" or @role=\"horizontalstrike\"]'],'Rule;end-punct;default;[m] children/*;self::punctuated;@role=\"endpunct\"'.split(\";\"),\n'Rule,start-punct,default,[n] content/*[1]; [m] children/*[position()>1],self::punctuated,@role=\"startpunct\"'.split(\",\"),'Rule{punctuation{default{[n] text(); [t] \"\\u2810\"{self::punctuation{@role=\"fullstop\"{contains(@annotation, \"nemeth:number\")'.split(\"{\"),'Rule,integral-punct,default,[n] children/*[1]; [n] children/*[3],self::punctuated,@role=\"integral\"'.split(\",\"),[\"Rule\",\"punctuated\",\"default\",\"[m] children/*\",\"self::punctuated\"],'Rule,punctuation-comma,default,[n] text(); [t] \"\\u2800\",self::punctuation,parent::*/parent::punctuated,following-sibling::*,@role!=\"fullstop\",@role!=\"vbar\"'.split(\",\"),\n'Rule,punctuation-ellipses,default,[t] \"\\u2800\"; [n] text(); [t] \"\\u2800\",self::punctuation,parent::*/parent::punctuated,following-sibling::*,@role=\"ellipsis\",name(preceding-sibling::*[1])!=\"punctuation\"'.split(\",\"),'Rule,punctuation-ellipses,default,[t] \"\\u2800\"; [n] text();,self::punctuation,parent::*/parent::punctuated,@role=\"ellipsis\",name(preceding-sibling::*[1])!=\"punctuation\"'.split(\",\"),'Rule,reference-sign,default,[n] children/*[1]; [n] children/*[2],self::superscript,name(children/*[1])=\"text\" or (name(children/*[1])=\"punctuated\" and children/*[1][@role=\"text\"]),name(children/*[2])=\"operator\" or name(children/*[2])=\"punctuation\"'.split(\",\"),\n'Rule,reference-number,default,[n] children/*[1]; [t] \"\\u2808\\u283b\"; [n] children/*[2]; [t] \"\\u2810\",self::superscript,name(children/*[1])=\"text\" or (name(children/*[1])=\"punctuated\" and children/*[1][@role=\"text\"]),name(children/*[2])=\"number\",children/*[2][@role=\"integer\"]'.split(\",\")],initialize:[sre.NemethUtil.generateTensorRules,sre.NemethUtil.addAnnotators]};sre.PrefixFrench={locale:\"fr\",modality:\"prefix\",domain:\"default\",functions:[[\"CSF\",\"CSFordinalPosition\",sre.NumbersUtil.ordinalPosition]],rules:['Rule,numerator,default,[t] \"num\\u00e9rateur\"; [p] (pause:200),self::*,name(../..)=\"fraction\",count(preceding-sibling::*)=0'.split(\",\"),'Rule,denominator,default,[t] \"d\\u00e9nominateur\"; [p] (pause:200),self::*,name(../..)=\"fraction\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,base,default,[t] \"base\"; [p] (pause:200),self::*,name(../..)=\"superscript\" or name(../..)=\"subscript\" or name(../..)=\"overscore\" or name(../..)=\"underscore\" or name(../..)=\"tensor\" or name(../..)=\"limlower\" or name(../..)=\"limupper\",count(preceding-sibling::*)=0'.split(\",\"),\n'Rule,base-limit,default,[t] \"base\"; [p] (pause:200),self::*,name(../..)=\"limboth\"'.split(\",\"),'Rule,exponent,default,[t] \"exposant\"; [p] (pause:200),self::*,name(../..)=\"superscript\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,subscript,default,[t] \"indice\"; [p] (pause:200),self::*,name(../..)=\"subscript\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,overscript,default,[t] \"indice suscrit\"; [p] (pause:200),self::*,name(../..)=\"overscore\" or name(../..)=\"limupper\" or name(../..)=\"limboth\",count(preceding-sibling::*)=1 or count(preceding-sibling::*)=2'.split(\",\"),\n'Rule,underscript,default,[t] \"indice souscrit\"; [p] (pause:200),self::*,name(../..)=\"underscore\" or name(../..)=\"limlower\" or name(../..)=\"limboth\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,radicand,default,[t] \"radicande\"; [p] (pause:200),self::*,name(../..)=\"sqrt\"'.split(\",\"),'Rule,radicand,default,[t] \"radicande\"; [p] (pause:200),self::*,name(../..)=\"root\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,index,default,[t] \"indice\"; [p] (pause:200),self::*,name(../..)=\"root\",count(preceding-sibling::*)=0'.split(\",\"),\n'Rule,leftsub,default,[t] \"indice inf\\u00e9rieur gauche\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"leftsub\"'.split(\",\"),'Rule,leftsub,default,[t] CSFordinalPosition (grammar:gender=\"male\"); [t] \"indice inf\\u00e9rieur gauche\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"leftsub\"'.split(\",\"),'Rule,leftsuper,default,[t] \"indice sup\\u00e9rieur gauche\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"leftsuper\"'.split(\",\"),'Rule,leftsuper,default,[t] CSFordinalPosition (grammar:gender=\"male\"); [t] \"indice sup\\u00e9rieur gauche\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"leftsuper\"'.split(\",\"),\n'Rule,rightsub,default,[t] \"indice inf\\u00e9rieur droite\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"rightsub\"'.split(\",\"),'Rule,rightsub,default,[t] CSFordinalPosition (grammar:gender=\"male\"); [t] \"indice inf\\u00e9rieur droite\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"rightsub\"'.split(\",\"),'Rule,rightsuper,default,[t] \"indice sup\\u00e9rieur droite\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"rightsuper\"'.split(\",\"),'Rule,rightsuper,default,[t] CSFordinalPosition (grammar:gender=\"male\"); [t] \"indice sup\\u00e9rieur droite\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"rightsuper\"'.split(\",\"),\n'Rule,choice,default,[t] \"nombre d\\'\\u00e9l\\u00e9ments choisis\"; [p] (pause:200),self::line,@role=\"binomial\",parent::*/parent::vector,count(preceding-sibling::*)=1'.split(\",\"),'Rule,select,default,[t] \"nombre d\\'\\u00e9l\\u00e9ments disponibles\"; [p] (pause:200),self::line,@role=\"binomial\",parent::*/parent::vector,count(preceding-sibling::*)=0'.split(\",\"),[\"Rule\",\"row\",\"default\",'[t] CSFordinalPosition (grammar:gender=\"female\"); [t] \"rang\\u00e9e\"; [p] (pause:200)',\"self::row\"],[\"Aliases\",\"row\",\"self::line\"],\n'Rule{cell{default{[n] ../..; [t] CSFordinalPosition (grammar:gender=\"female\"); [t] \"colonne\"; [p] (pause:200){self::cell{contains(@grammar,\"depth\")'.split(\"{\"),[\"Rule\",\"cell\",\"default\",'[t] CSFordinalPosition (grammar:gender=\"female\"); [t] \"colonne\"; [p] (pause:200)',\"self::cell\"]]};sre.PrefixGerman={modality:\"prefix\",locale:\"de\",domain:\"default\",functions:[[\"CSF\",\"CSFordinalPosition\",sre.NumbersUtil.ordinalPosition]],rules:['Rule,numerator,default,[t] \"Z\\u00e4hler\"; [p] (pause:200),self::*,name(../..)=\"fraction\",count(preceding-sibling::*)=0'.split(\",\"),'Rule,denominator,default,[t] \"Nenner\"; [p] (pause:200),self::*,name(../..)=\"fraction\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,base,default,[t] \"Basis\"; [p] (pause:200),self::*,name(../..)=\"superscript\" or name(../..)=\"subscript\" or name(../..)=\"overscore\" or name(../..)=\"underscore\" or name(../..)=\"tensor\",count(preceding-sibling::*)=0'.split(\",\"),\n'Rule,exponent,default,[t] \"Exponent\"; [p] (pause:200),self::*,name(../..)=\"superscript\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,subscript,default,[t] \"Index\"; [p] (pause:200),self::*,name(../..)=\"subscript\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,overscript,default,[t] \"Oberer Grenzwert\"; [p] (pause:200),self::*,name(../..)=\"overscore\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,underscript,default,[t] \"Unterer Grenzwert\"; [p] (pause:200),self::*,name(../..)=\"underscore\",count(preceding-sibling::*)=1'.split(\",\"),\n'Rule,radicand,default,[t] \"Radikand\"; [p] (pause:200),self::*,name(../..)=\"sqrt\"'.split(\",\"),'Rule,radicand,default,[t] \"Radikand\"; [p] (pause:200),self::*,name(../..)=\"root\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,index,default,[t] \"Wurzelexponent\"; [p] (pause:200),self::*,name(../..)=\"root\",count(preceding-sibling::*)=0'.split(\",\"),'Rule,leftsub,default,[t] \"linker unterer Index\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"leftsub\"'.split(\",\"),'Rule,leftsub,default,[t] CSFordinalPosition; [t] \"linker unterer Index\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"leftsub\"'.split(\",\"),\n'Rule,leftsuper,default,[t] \"linker oberer Index\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"leftsuper\"'.split(\",\"),'Rule,leftsuper,default,[t] CSFordinalPosition; [t] \"linker oberer Index\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"leftsuper\"'.split(\",\"),'Rule,rightsub,default,[t] \"rechter unterer Index\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"rightsub\"'.split(\",\"),'Rule,rightsub,default,[t] CSFordinalPosition; [t] \"rechter unterer Index\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"rightsub\"'.split(\",\"),\n'Rule,rightsuper,default,[t] \"rechter oberer Index\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"rightsuper\"'.split(\",\"),'Rule,rightsuper,default,[t] CSFordinalPosition; [t] \"rechter oberer Index\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"rightsuper\"'.split(\",\"),'Rule,choice,default,[t] \"Grundgesamtheit\"; [p] (pause:200),self::line,@role=\"binomial\",parent::*/parent::vector,count(preceding-sibling::*)=0'.split(\",\"),'Rule,select,default,[t] \"Stichprobengr\\u00f6\\u00dfe\"; [p] (pause:200),self::line,@role=\"binomial\",parent::*/parent::vector,count(preceding-sibling::*)=1'.split(\",\"),\n[\"Rule\",\"row\",\"default\",'[t] CSFordinalPosition; [t] \"Zeile\"; [p] (pause:200)',\"self::row\"],[\"Aliases\",\"row\",\"self::line\"],'Rule{cell{default{[n] ../..; [t] CSFordinalPosition; [t] \"Spalte\"; [p] (pause:200){self::cell{contains(@grammar,\"depth\")'.split(\"{\"),[\"Rule\",\"cell\",\"default\",'[t] CSFordinalPosition; [t] \"Spalte\"; [p] (pause:200)',\"self::cell\"]]};sre.PrefixRules={modality:\"prefix\",domain:\"default\",functions:[[\"CSF\",\"CSFordinalPosition\",sre.NumbersUtil.ordinalPosition]],rules:['Rule,numerator,default,[t] \"Numerator\"; [p] (pause:200),self::*,name(../..)=\"fraction\",count(preceding-sibling::*)=0'.split(\",\"),'Rule,denominator,default,[t] \"Denominator\"; [p] (pause:200),self::*,name(../..)=\"fraction\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,base,default,[t] \"Base\"; [p] (pause:200),self::*,name(../..)=\"superscript\" or name(../..)=\"subscript\" or name(../..)=\"overscore\" or name(../..)=\"underscore\" or name(../..)=\"tensor\",count(preceding-sibling::*)=0'.split(\",\"),\n'Rule,exponent,default,[t] \"Exponent\"; [p] (pause:200),self::*,name(../..)=\"superscript\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,subscript,default,[t] \"Subscript\"; [p] (pause:200),self::*,name(../..)=\"subscript\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,overscript,default,[t] \"Overscript\"; [p] (pause:200),self::*,name(../..)=\"overscore\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,underscript,default,[t] \"Underscript\"; [p] (pause:200),self::*,name(../..)=\"underscore\",count(preceding-sibling::*)=1'.split(\",\"),\n'Rule,radicand,default,[t] \"Radicand\"; [p] (pause:200),self::*,name(../..)=\"sqrt\"'.split(\",\"),'Rule,radicand,default,[t] \"Radicand\"; [p] (pause:200),self::*,name(../..)=\"root\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,index,default,[t] \"Index\"; [p] (pause:200),self::*,name(../..)=\"root\",count(preceding-sibling::*)=0'.split(\",\"),'Rule,leftsub,default,[t] \"Left Subscript\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"leftsub\"'.split(\",\"),'Rule,leftsub,default,[t] CSFordinalPosition; [t] \"Left Subscript\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"leftsub\"'.split(\",\"),\n'Rule,leftsuper,default,[t] \"Left Superscript\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"leftsuper\"'.split(\",\"),'Rule,leftsuper,default,[t] CSFordinalPosition; [t] \"Left Superscript\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"leftsuper\"'.split(\",\"),'Rule,rightsub,default,[t] \"Right Subscript\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"rightsub\"'.split(\",\"),'Rule,rightsub,default,[t] CSFordinalPosition; [t] \"Right Subscript\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"rightsub\"'.split(\",\"),\n'Rule,rightsuper,default,[t] \"Right Superscript\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"rightsuper\"'.split(\",\"),'Rule,rightsuper,default,[t] CSFordinalPosition; [t] \"Right Superscript\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"rightsuper\"'.split(\",\"),'Rule,choice,default,[t] \"Choice Quantity\"; [p] (pause:200),self::line,@role=\"binomial\",parent::*/parent::vector,count(preceding-sibling::*)=0'.split(\",\"),'Rule,select,default,[t] \"Selection Quantity\"; [p] (pause:200),self::line,@role=\"binomial\",parent::*/parent::vector,count(preceding-sibling::*)=1'.split(\",\"),\n[\"Rule\",\"row\",\"default\",'[t] CSFordinalPosition; [t] \"Row\"; [p] (pause:200)',\"self::row\"],[\"Aliases\",\"row\",\"self::line\"],'Rule{cell{default{[n] ../..; [t] CSFordinalPosition; [t] \"Column\"; [p] (pause:200){self::cell{contains(@grammar,\"depth\")'.split(\"{\"),[\"Rule\",\"cell\",\"default\",'[t] CSFordinalPosition; [t] \"Column\"; [p] (pause:200)',\"self::cell\"]]};sre.PrefixSpanish={locale:\"es\",modality:\"prefix\",domain:\"default\",functions:[[\"CSF\",\"CSFordinalPosition\",sre.NumbersUtil.ordinalPosition]],rules:['Rule,numerator,default,[t] \"numerador\"; [p] (pause:200),self::*,name(../..)=\"fraction\",count(preceding-sibling::*)=0'.split(\",\"),'Rule,denominator,default,[t] \"denominador\"; [p] (pause:200),self::*,name(../..)=\"fraction\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,base,default,[t] \"base\"; [p] (pause:200),self::*,name(../..)=\"superscript\" or name(../..)=\"subscript\" or name(../..)=\"overscore\" or name(../..)=\"underscore\" or name(../..)=\"tensor\",count(preceding-sibling::*)=0'.split(\",\"),\n'Rule,exponent,default,[t] \"exponente\"; [p] (pause:200),self::*,name(../..)=\"superscript\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,subscript,default,[t] \"sub\\u00edndice\"; [p] (pause:200),self::*,name(../..)=\"subscript\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,overscript,default,[t] \"sobre\\u00edndice\"; [p] (pause:200),self::*,name(../..)=\"overscore\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,underscript,default,[t] \"bajo\\u00edndice\"; [p] (pause:200),self::*,name(../..)=\"underscore\",count(preceding-sibling::*)=1'.split(\",\"),\n'Rule,radicand,default,[t] \"radicand\"; [p] (pause:200),self::*,name(../..)=\"sqrt\"'.split(\",\"),'Rule,radicand,default,[t] \"radicand\"; [p] (pause:200),self::*,name(../..)=\"root\",count(preceding-sibling::*)=1'.split(\",\"),'Rule,index,default,[t] \"\\u00edndice\"; [p] (pause:200),self::*,name(../..)=\"root\",count(preceding-sibling::*)=0'.split(\",\"),'Rule,leftsub,default,[t] \"sub\\u00edndice izquierdo\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"leftsub\"'.split(\",\"),'Rule,leftsub,default,[t] CSFordinalPosition (grammar:gender=\"male\"); [t] \"sub\\u00edndice izquierdo\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"leftsub\"'.split(\",\"),\n'Rule,leftsuper,default,[t] \"super\\u00edndice izquierdo\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"leftsuper\"'.split(\",\"),'Rule,leftsuper,default,[t] CSFordinalPosition (grammar:gender=\"male\"); [t] \"super\\u00edndice izquierdo\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"leftsuper\"'.split(\",\"),'Rule,rightsub,default,[t] \"sub\\u00edndice derecho\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"rightsub\"'.split(\",\"),'Rule,rightsub,default,[t] CSFordinalPosition (grammar:gender=\"male\"); [t] \"sub\\u00edndice derecho\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"rightsub\"'.split(\",\"),\n'Rule,rightsuper,default,[t] \"super\\u00edndice derecho\"; [p] (pause:200),self::*,name(../..)=\"tensor\",@role=\"rightsuper\"'.split(\",\"),'Rule,rightsuper,default,[t] CSFordinalPosition (grammar:gender=\"male\"); [t] \"super\\u00edndice derecho\"; [p] (pause:200),self::*,name(../..)=\"punctuated\",name(../../../..)=\"tensor\",../../@role=\"rightsuper\"'.split(\",\"),'Rule,choice,default,[t] \"cantidad de elecci\\u00f3n\"; [p] (pause:200),self::line,@role=\"binomial\",parent::*/parent::vector,count(preceding-sibling::*)=0'.split(\",\"),\n'Rule,select,default,[t] \"cantidad de selecci\\u00f3n\"; [p] (pause:200),self::line,@role=\"binomial\",parent::*/parent::vector,count(preceding-sibling::*)=1'.split(\",\"),[\"Rule\",\"row\",\"default\",'[t] CSFordinalPosition (grammar:gender=\"female\"); [t] \"fila\"; [p] (pause:200)',\"self::row\"],[\"Aliases\",\"row\",\"self::line\"],'Rule{cell{default{[n] ../..; [t] CSFordinalPosition (grammar:gender=\"female\"); [t] \"columna\"; [p] (pause:200){self::cell{contains(@grammar,\"depth\")'.split(\"{\"),[\"Rule\",\"cell\",\"default\",'[t] CSFordinalPosition (grammar:gender=\"female\"); [t] \"columna\"; [p] (pause:200)',\n\"self::cell\"]]};sre.SemanticTreeRules={domain:\"default\",functions:[[\"CTXF\",\"CTXFnodeCounter\",sre.StoreUtil.nodeCounter],[\"CTXF\",\"CTXFcontentIterator\",sre.StoreUtil.contentIterator]],rules:['Rule{collapsed{default{[t] \"collapsed\"; [n] . (engine:modality=summary,grammar:collapsed){self::*{@alternative{not(contains(@grammar, \"collapsed\")){self::*{self::*{self::*{self::*{self::*'.split(\"{\"),[\"Rule\",\"stree\",\"default\",\"[n] ./*[1]\",\"self::stree\"],'Rule;factorial;default;[t] \"factorial\";self::punctuation;text()=\"!\";name(preceding-sibling::*[1])!=\"text\"'.split(\";\"),\n[\"Rule\",\"multrel\",\"default\",'[t] \"multirelation\"; [m] children/* (sepFunc:CTXFcontentIterator)',\"self::multirel\"],'Rule{variable-equality{default{[t] \"equation sequence\"; [m] children/* (context:\"part\",ctxtFunc:CTXFnodeCounter,sepFunc:CTXFcontentIterator){self::relseq[@role=\"equality\"]{count(./children/*)>2{./children/punctuation[@role=\"ellipsis\"]'.split(\"{\"),'Rule{multi-equality{default{[t] \"equation sequence\"; [m] children/* (context:\"part\",ctxtFunc:CTXFnodeCounter,sepFunc:CTXFcontentIterator){self::relseq[@role=\"equality\"]{count(./children/*)>2'.split(\"{\"),\n'Rule,equality,default,[n] children/*[1]; [p] (pause:200); [n] content/*[1] (pause:200);[n] children/*[2],self::relseq[@role=\"equality\"],count(./children/*)=2'.split(\",\"),'Rule,simple-equality,default,[n] children/*[1]; [p] (pause:200); [n] content/*[1] (pause:200);[n] children/*[2],self::relseq[@role=\"equality\"],count(./children/*)=2,./children/identifier or ./children/number'.split(\",\"),'Rule,simple-equality2,default,[n] children/*[1]; [p] (pause:200); [n] content/*[1] (pause:200);[n] children/*[2],self::relseq[@role=\"equality\"],count(./children/*)=2,./children/function or ./children/appl'.split(\",\"),\n[\"Rule\",\"relseq\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator)\",\"self::relseq\"],[\"Rule\",\"binary-operation\",\"default\",\"[m] children/* (sepFunc:CTXFcontentIterator);\",\"self::infixop\"],'Rule,variable-addition,default,[t] \"sum with variable number of summands\";[p] (pause:400); [m] children/* (sepFunc:CTXFcontentIterator),self::infixop[@role=\"addition\"],count(children/*)>2,children/punctuation[@role=\"ellipsis\"]'.split(\",\"),'Rule,multi-addition,default,[t] \"sum with\"; [t] count(./children/*); [t] \"summands\";[p] (pause:400); [m] children/* (sepFunc:CTXFcontentIterator),self::infixop[@role=\"addition\"],count(./children/*)>2'.split(\",\"),\n[\"Rule\",\"prefix\",\"default\",'[t] \"prefix\"; [m] content/* (pause 150);[n] children/*[1]',\"self::prefixop\"],'Rule,negative,default,[t] \"negative\"; [n] children/*[1],self::prefixop,self::prefixop[@role=\"negative\"]'.split(\",\"),[\"Rule\",\"postfix\",\"default\",'[n] children/*[1]; [t] \"postfix\"; [m] content/* (pause 300)',\"self::postfixop\"],[\"Rule\",\"identifier\",\"default\",\"[n] text()\",\"self::identifier\"],[\"Rule\",\"number\",\"default\",\"[n] text()\",\"self::number\"],'Rule,mixed-number,default,[n] children/*[1]; [t] \"and\"; [n] children/*[2]; ,self::number,@role=\"mixed\"'.split(\",\"),\n'Rule{font{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::*{@font{not(contains(@grammar, \"ignoreFont\")){@font!=\"normal\"'.split(\"{\"),'Rule{font-identifier-short{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1{@font{not(contains(@grammar, \"ignoreFont\")){@font=\"normal\"{\"\"=translate(text(), \"abcdefghijklmnopqrstuvwxyz\\u03b1\\u03b2\\u03b3\\u03b4\\u03b5\\u03b6\\u03b7\\u03b8\\u03b9\\u03ba\\u03bb\\u03bc\\u03bd\\u03be\\u03bf\\u03c0\\u03c1\\u03c2\\u03c3\\u03c4\\u03c5\\u03c6\\u03c7\\u03c8\\u03c9ABCDEFGHIJKLMNOPQRSTUVWXYZ\\u0391\\u0392\\u0393\\u0394\\u0395\\u0396\\u0397\\u0398\\u0399\\u039a\\u039b\\u039c\\u039d\\u039e\\u039f\\u03a0\\u03a1\\u03a3\\u03a3\\u03a4\\u03a5\\u03a6\\u03a7\\u03a8\\u03a9\", \"\"){@role!=\"unit\"'.split(\"{\"),\n'Rule{font-identifier{default{[t] @font (grammar:localFont); [n] . (grammar:ignoreFont=@font){self::identifier{string-length(text())=1{@font{@font=\"normal\"{not(contains(@grammar, \"ignoreFont\")){@role!=\"unit\"'.split(\"{\"),'Rule;omit-font;default;[n] . (grammar:ignoreFont=@font);self::identifier;string-length(text())=1;@font;not(contains(@grammar, \"ignoreFont\"));@font=\"italic\"'.split(\";\"),[\"Rule\",\"fraction\",\"default\",'[p] (pause:250); [n] children/*[1] (rate:0.35); [p] (pause:250); [t] \"divided by\"; [n] children/*[2] (rate:-0.35); [p] (pause:400)',\n\"self::fraction\"],[\"Rule\",\"superscript\",\"default\",'[n] children/*[1]; [t] \"super\"; [n] children/*[2] (pitch:0.35);[p] (pause:300)',\"self::superscript\"],[\"Rule\",\"subscript\",\"default\",'[n] children/*[1]; [t] \"sub\"; [n] children/*[2] (pitch:-0.35);[p] (pause:300)',\"self::subscript\"],'Rule,ellipsis,default,[p] (pause:200); [t] \"ellipsis\"; [p] (pause:300),self::punctuation,self::punctuation[@role=\"ellipsis\"]'.split(\",\"),'Rule;fence-single;default;[n] text();self::punctuation;self::punctuation[@role=\"openfence\"]'.split(\";\"),\n[\"Aliases\",\"fence-single\",\"self::punctuation\",'self::punctuation[@role=\"closefence\"]'],[\"Aliases\",\"fence-single\",\"self::punctuation\",'self::punctuation[@role=\"vbar\"]'],[\"Aliases\",\"fence-single\",\"self::punctuation\",'self::punctuation[@role=\"application\"]'],[\"Rule\",\"omit-empty\",\"default\",\"[p] (pause:100)\",\"self::empty\"],'Rule,fences-open-close,default,[p] (pause:100); [n] content/*[1]; [n] children/*[1]; [n] content/*[2]; [p] (pause:100),self::fenced,@role=\"leftright\"'.split(\",\"),'Rule,fences-open-close-in-appl,default,[p] (pause:200); [n] children/*[1]; [p] (pause:200);,self::fenced[@role=\"leftright\"],./parent::children/parent::appl'.split(\",\"),\n'Rule,fences-neutral,default,[p] (pause:100); [t] \"absolute value of\"; [n] children/*[1];[p] (pause:350);,self::fenced,self::fenced[@role=\"neutral\"]'.split(\",\"),[\"Rule\",\"omit-fences\",\"default\",\"[p] (pause:500); [n] children/*[1]; [p] (pause:200);\",\"self::fenced\"],[\"Rule\",\"matrix\",\"default\",'[t] \"matrix\"; [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"row\",pause:100)',\"self::matrix\"],[\"Rule\",\"matrix-row\",\"default\",'[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"column\",pause:100)','self::row[@role=\"matrix\"]'],\n[\"Rule\",\"matrix-cell\",\"default\",\"[n] children/*[1]\",'self::cell[@role=\"matrix\"]'],[\"Rule\",\"vector\",\"default\",'[t] \"vector\"; [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"element\",pause:100)',\"self::vector\"],[\"Rule\",\"cases\",\"default\",'[t] \"case statement\"; [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"case\",pause:100)',\"self::cases\"],[\"Rule\",\"cases-row\",\"default\",\"[m] children/*\",'self::row[@role=\"cases\"]'],[\"Rule\",\"cases-cell\",\"default\",\"[n] children/*[1]\",'self::cell[@role=\"cases\"]'],[\"Rule\",\n\"row\",\"default\",'[m] ./* (ctxtFunc:CTXFnodeCounter,context:\"column\",pause:100)',\"self::row\"],'Rule{cases-end{default{[t] \"case statement\"; [m] children/* (ctxtFunc:CTXFnodeCounter,context:\"case\",pause:100);[t] \"end cases\"{self::cases{following-sibling::*'.split(\"{\"),[\"Rule\",\"multiline\",\"default\",'[t] \"multiline equation\";[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"line\",pause:100)',\"self::multiline\"],'Rule{multiline-ineq{default{[t] \"multiline inequality\";[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"row\",pause:100){self::multiline{@role=\"inequality\"'.split(\"{\"),\n[\"Rule\",\"line\",\"default\",\"[m] children/*\",\"self::line\"],[\"Rule\",\"table\",\"default\",'[t] \"multiline equation\";[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"row\",pause:200)',\"self::table\"],'Rule{table-ineq{default{[t] \"multiline inequality\";[m] children/* (ctxtFunc:CTXFnodeCounter,context:\"row\",pause:200){self::table{@role=\"inequality\"'.split(\"{\"),[\"Rule\",\"table-row\",\"default\",\"[m] children/* (pause:100)\",'self::row[@role=\"table\"]'],[\"Aliases\",\"cases-cell\",'self::cell[@role=\"table\"]'],'Rule;empty-cell;default;[t] \"Blank\";self::cell;count(children/*)=0'.split(\";\"),\n'Rule,end-punct,default,[m] children/*; [p] (pause:300),self::punctuated,@role=\"endpunct\"'.split(\",\"),'Rule,start-punct,default,[n] content/*[1]; [p] (pause:200); [m] children/*[position()>1],self::punctuated,@role=\"startpunct\"'.split(\",\"),'Rule,integral-punct,default,[n] children/*[1] (rate:0.2); [n] children/*[3] (rate:0.2),self::punctuated,@role=\"integral\"'.split(\",\"),[\"Rule\",\"punctuated\",\"default\",\"[m] children/* (pause:100)\",\"self::punctuated\"],[\"Rule\",\"function\",\"default\",\"[n] text()\",\"self::function\"],\n[\"Rule\",\"appl\",\"default\",\"[n] children/*[1]; [n] content/*[1]; [n] children/*[2]\",\"self::appl\"],'Rule,sum-only,default,[n] children/*[1]; [t] \"from\"; [n] children/*[2]; [t] \"to\";[n] children/*[3],self::limboth,self::limboth[@role=\"sum\"]'.split(\",\"),[\"Rule\",\"limboth\",\"default\",'[n] children/*[1]; [p] (pause 100); [t] \"over\"; [n] children/*[2];[t] \"under\"; [n] children/*[3]; [p] (pause 250);',\"self::limboth\"],[\"Rule\",\"limlower\",\"default\",'[n] children/*[1]; [t] \"over\"; [n] children/*[2];',\"self::limlower\"],\n[\"Rule\",\"limupper\",\"default\",'[n] children/*[1]; [t] \"under\"; [n] children/*[2];',\"self::limupper\"],[\"Rule\",\"largeop\",\"default\",\"[n] text()\",\"self::largeop\"],[\"Rule\",\"bigop\",\"default\",'[n] children/*[1]; [p] (pause 100); [t] \"over\"; [n] children/*[2];[p] (pause 250);',\"self::bigop\"],[\"Rule\",\"integral\",\"default\",\"[n] children/*[1]; [p] (pause 100); [n] children/*[2];[p] (pause 200); [n] children/*[3] (rate:0.35);\",\"self::integral\"],[\"Rule\",\"sqrt\",\"default\",'[t] \"Square root of\"; [n] children/*[1] (rate:0.35); [p] (pause:400)',\n\"self::sqrt\"],'Rule,square,default,[n] children/*[1]; [t] \"squared\" (pitch:0.35); [p] (pause:300),self::superscript,children/*[2][text()=2],name(./children/*[1])!=\"text\"'.split(\",\"),'Rule,cube,default,[n] children/*[1]; [t] \"cubed\" (pitch:0.35); [p] (pause:300),self::superscript,children/*[2][text()=3],name(./children/*[1])!=\"text\"'.split(\",\"),[\"Rule\",\"root\",\"default\",'[t] \"root of order\"; [n] children/*[1];[t] \"over\"; [n] children/*[2] (rate:0.35); [p] (pause:400)',\"self::root\"],[\"Rule\",\"text\",\"default\",\n\"[n] text(); [p] (pause:200)\",\"self::text\"],'Rule;unit;default;[t] text() (grammar:annotation=\"unit\":translate:plural);self::identifier;@role=\"unit\"'.split(\";\"),'Rule,unit-square,default,[t] \"square\"; [n] children/*[1],self::superscript,@role=\"unit\",children/*[2][text()=2],name(children/*[1])=\"identifier\"'.split(\",\"),'Rule,unit-cubic,default,[t] \"cubic\"; [n] children/*[1],self::superscript,@role=\"unit\",children/*[2][text()=3],name(children/*[1])=\"identifier\"'.split(\",\"),'Rule,reciprocal,default,[t] \"reciprocal\"; [n] children/*[1],self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],count(preceding-sibling::*)=0 or preceding-sibling::*[@role!=\"unit\"]'.split(\",\"),\n'Rule,reciprocal,default,[t] \"per\"; [n] children/*[1],self::superscript,@role=\"unit\",name(children/*[1])=\"identifier\",name(children/*[2])=\"prefixop\",children/*[2][@role=\"negative\"],children/*[2]/children/*[1][text()=1],preceding-sibling::*[@role=\"unit\"]'.split(\",\"),'Rule;unit-combine;default;[m] children/*;self::infixop;@role=\"unit\"'.split(\";\"),'Rule,unit-divide,default,[n] children/*[1] (pitch:0.3); [t] \"per\"; [n] children/*[2] (pitch:-0.3),self::fraction,@role=\"unit\"'.split(\",\")]};sre.SummaryFrench={locale:\"fr\",modality:\"summary\",rules:[[\"Rule\",\"collapsed-masculine\",\"default.masculine\",'[t] \"compress\\u00e9\"','contains(@grammar, \"collapsed\")'],[\"Rule\",\"collapsed-feminine\",\"default.feminine\",'[t] \"compress\\u00e9e\"','contains(@grammar, \"collapsed\")'],[\"Rule\",\"no-collapsed\",\"default.masculine\",'[t] \"\"','not(contains(@grammar, \"collapsed\"))'],[\"Rule\",\"no-collapsed\",\"default.feminine\",'[t] \"\"','not(contains(@grammar, \"collapsed\"))'],[\"Rule\",\"stree\",\"default.default\",\"[n] ./*[1]\",\n\"self::stree\"],'Rule{abstr-identifier{default.default{[t] \"identifiant long\"; [n] . (engine:style=masculine){self::identifier{contains(@grammar, \"collapsed\")'.split(\"{\"),[\"Rule\",\"abstr-identifier\",\"default.default\",'[t] \"identifiant\"; [n] . (engine:style=masculine)',\"self::identifier\"],'Rule{abstr-number{default.default{[t] \"nombre long\"; [n] . (engine:style=masculine){self::number{contains(@grammar, \"collapsed\")'.split(\"{\"),[\"Rule\",\"abstr-number\",\"default.default\",'[t] \"nombre\"; [n] . (engine:style=masculine)',\n\"self::number\"],'Rule{abstr-mixed-number{default.default{[t] \"nombre fractionnaire long\"; [n] . (engine:style=masculine){self::number{@role=\"mixed\"{contains(@grammar, \"collapsed\")'.split(\"{\"),'Rule,abstr-mixed-number,default.default,[t] \"nombre fractionnaire\"; [n] . (engine:style=masculine),self::number,@role=\"mixed\"'.split(\",\"),[\"Rule\",\"abstr-text\",\"default.default\",'[t] \"texte\"; [n] . (engine:style=masculine)',\"self::text\"],[\"Rule\",\"abstr-function\",\"default.default\",'[t] \"expression fonctionnelle\"; [n] . (engine:style=feminine)',\n\"self::function\"],[\"Rule\",\"abstr-function\",\"mathspeak.brief\",'[t] \"fonction\"; [n] . (engine:style=feminine)',\"self::function\"],[\"SpecializedRule\",\"abstr-function\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-lim,default.default,[t] \"fonction de limitation\"; [n] . (engine:style=feminine),self::function,@role=\"limit function\"'.split(\",\"),'Rule,abstr-lim,mathspeak.brief,[t] \"lim\"; [n] . (engine:style=feminine),self::function,@role=\"limit function\"'.split(\",\"),[\"SpecializedRule\",\"abstr-lim\",\"mathspeak.brief\",\n\"mathspeak.sbrief\"],[\"Rule\",\"abstr-fraction\",\"default.default\",'[t] \"fraction\"; [n] . (engine:style=feminine)',\"self::fraction\"],[\"Rule\",\"abstr-fraction\",\"mathspeak.brief\",'[t] \"frac\"; [n] . (engine:style=feminine)',\"self::fraction\"],[\"SpecializedRule\",\"abstr-fraction\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-continued-fraction,default.default,[t] \"fraction continue\"; [n] . (engine:style=feminine),self::fraction,children/*[2]/descendant-or-self::*[@role=\"ellipsis\"]'.split(\",\"),'Rule,abstr-continued-fraction,mathspeak.brief,[t] \"frac continue\"; [n] . (engine:style=feminine),self::fraction,children/*[2]/descendant-or-self::*[@role=\"ellipsis\"]'.split(\",\"),\n[\"SpecializedRule\",\"abstr-continued-fraction\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Rule\",\"abstr-sqrt\",\"default.default\",'[t] \"racine carr\\u00e9e\"; [n] . (engine:style=feminine)',\"self::sqrt\"],'Rule,abstr-sqrt-nested,default.default,[t] \"racine carr\\u00e9e imbriqu\\u00e9e\"; [n] . (engine:style=feminine),self::sqrt,children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\",\"),'Rule{abstr-root{default.default{[t] \"racine d\\'indice\"; [n] children/*[1] (engine:modality=\"speech\"); [t] \"fin indice\"; [n] . (engine:style=feminine);{self::root{contains(@grammar, \"collapsed\"){following-sibling::* or ancestor::*/following-sibling::*'.split(\"{\"),\n[\"Rule\",\"abstr-root\",\"default.default\",'[t] \"racine d\\'indice\"; [n] children/*[1] (engine:modality=speech); [n] . (engine:style=feminine)',\"self::root\"],[\"Rule\",\"abstr-root\",\"mathspeak.brief\",'[t] \"racine\"; [n] . (engine:style=feminine)',\"self::root\"],[\"SpecializedRule\",\"abstr-root\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule{abstr-root-nested{default.default{[t] \"racine imbriqu\\u00e9e d\\'indice\"; [n] children/*[1] (engine:modality=speech); [t] \"fin indice\"; [n] . (engine:style=feminine);{self::root{contains(@grammar, \"collapsed\"){children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root{following-sibling::* or ancestor::*/following-sibling::*'.split(\"{\"),\n'Rule,abstr-root-nested,default.default,[t] \"racine imbriqu\\u00e9e d\\'indice\"; [n] children/*[1] (engine:modality=speech); [n] . (engine:style=feminine),self::root,children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\",\"),'Rule,abstr-root-nested,mathspeak.brief,[t] \"racine imbriqu\\u00e9e\"; [n] . (engine:style=feminine),self::root,children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\",\"),[\"SpecializedRule\",\"abstr-root-nested\",\"mathspeak.brief\",\n\"mathspeak.sbrief\"],[\"Rule\",\"abstr-superscript\",\"default.default\",'[t] \"puissance\"; [n] . (engine:style=feminine)',\"self::superscript\"],[\"Rule\",\"abstr-subscript\",\"default.default\",'[t] \"indice\"; [n] . (engine:style=masculine)',\"self::subscript\"],'Rule,abstr-subsup,default.default,[t] \"puissance avec index\"; [n] . (engine:style=feminine),self::superscript,name(children/*[1])=\"subscript\"'.split(\",\"),[\"Rule\",\"abstr-infixop\",\"default.default\",'[t] @role (grammar:localRole); [t] \"avec\"; [t] count(./children/*); [t] \"\\u00e9l\\u00e9ments\"; [n] . (engine:style=masculine)',\n\"self::infixop\"],'Rule,abstr-infixop,default.default,[t] @role (grammar:localRole); [t] \"avec un nombre d\\'\\u00e9l\\u00e9ments variable\"; [n] . (engine:style=masculine),self::infixop,count(./children/*)>2,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),[\"Rule\",\"abstr-infixop\",\"mathspeak.brief\",\"[t] @role (grammar:localRole); [n] . (engine:style=masculine)\",\"self::infixop\"],[\"SpecializedRule\",\"abstr-infixop\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-addition,default.default,[t] \"somme avec\"; [t] count(./children/*); [t] \"op\\u00e9randes\"; [n] . (engine:style=feminine),self::infixop,@role=\"addition\"'.split(\",\"),\n'Rule,abstr-addition,mathspeak.brief,[t] \"somme\"; [n] . (engine:style=feminine),self::infixop,@role=\"addition\"'.split(\",\"),[\"SpecializedRule\",\"abstr-addition\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-addition,default.default,[t] \"somme avec un nombre variable d\\'op\\u00e9randes\"; [n] . (engine:style=feminine),self::infixop,@role=\"addition\",count(./children/*)>2,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),'Rule,abstr-multiplication,default.default,[t] \"produit avec\"; [t] count(./children/*); [t] \"facteurs\"; [n] . (engine:style=masculine);,self::infixop,@role=\"multiplication\"'.split(\",\"),\n'Rule,abstr-multiplication,mathspeak.brief,[t] \"produit\"; [n] . (engine:style=masculine),self::infixop,@role=\"multiplication\"'.split(\",\"),[\"SpecializedRule\",\"abstr-multiplication\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Aliases\",\"abstr-multiplication\",\"self::infixop\",'@role=\"implicit\"'],'Rule,abstr-var-multiplication,default.default,[t] \"produit avec un nombre de facteurs variable\"; [n] . (engine:style=masculine),self::infixop,@role=\"multiplication\",count(./children/*)>2,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),\n'Aliases abstr-var-multiplication self::infixop @role=\"implicit\" count(./children/*)>2 ./children/punctuation[@role=\"ellipsis\"]'.split(\" \"),[\"Rule\",\"abstr-vector\",\"default.default\",'[t] \"vecteur de dimension\"; [t] count(./children/*); [n] . (engine:style=masculine)',\"self::vector\"],[\"Rule\",\"abstr-vector\",\"mathspeak.brief\",'[t] \"vecteur\"; [n] . (engine:style=masculine)',\"self::vector\"],[\"SpecializedRule\",\"abstr-vector\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-vector,default.default,[t] \"vecteur colonne de dimension n\"; [n] . (engine:style=masculine),self::vector,./children/*/children/punctuation[@role=\"ellipsis\"]'.split(\",\"),\n'Rule,abstr-binomial,default.default,[t] \"binomial\"; [n] . (engine:style=masculine),self::vector,@role=\"binomial\"'.split(\",\"),[\"SpecializedRule\",\"abstr-binomial\",\"default.default\",\"mathspeak.brief\"],[\"SpecializedRule\",\"abstr-binomial\",\"default.default\",\"mathspeak.sbrief\"],'Rule,abstr-determinant,default.default,[t] \"d\\u00e9terminant de dimension\"; [t] count(./children/*); [n] . (engine:style=masculine),self::matrix,@role=\"determinant\"'.split(\",\"),'Rule,abstr-determinant,mathspeak.brief,[t] \"d\\u00e9terminant\"; [n] . (engine:style=masculine),self::matrix,@role=\"determinant\"'.split(\",\"),\n[\"SpecializedRule\",\"abstr-determinant\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-determinant,default.default,[t] \"d\\u00e9terminant de dimension n\"; [n] . (engine:style=masculine),self::matrix,@role=\"determinant\",./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\",\"),'Rule,abstr-squarematrix,default.default,[t] \"matrice carr\\u00e9e de dimension\"; [t] count(./children/*); [n] . (engine:style=feminine),self::matrix,@role=\"squarematrix\"'.split(\",\"),'Rule,abstr-squarematrix,mathspeak.brief,[t] \"matrice carr\\u00e9e\"; [n] . (engine:style=feminine),self::matrix,@role=\"squarematrix\"'.split(\",\"),\n[\"SpecializedRule\",\"abstr-squarematrix\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-rowvector,default.default,[t] \"vecteur ligne de dimension\"; [t] count(./children/row/children/*); [n] . (engine:style=masculine),self::matrix,@role=\"rowvector\"'.split(\",\"),'Rule,abstr-rowvector,mathspeak.brief,[t] \"vecteur ligne\"; [n] . (engine:style=masculine),self::matrix,@role=\"rowvector\"'.split(\",\"),[\"SpecializedRule\",\"abstr-rowvector\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-matrix;default.default;[t] \"vecteur ligne de dimension n\";self::matrix;@role=\"rowvector\";./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n[\"Rule\",\"abstr-matrix\",\"default.default\",'[t] \"matrice\"; [t] count(children/*);  [t] \"par\";[t] count(children/*[1]/children/*); [n] . (engine:style=feminine)',\"self::matrix\"],[\"Rule\",\"abstr-matrix\",\"mathspeak.brief\",'[t] \"matrice\"; [n] . (engine:style=feminine)',\"self::matrix\"],[\"SpecializedRule\",\"abstr-matrix\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-matrix,default.default,[t] \"matrice de dimension n par m\"; [n] . (engine:style=feminine),self::matrix,./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\",\"),\n[\"Rule\",\"abstr-cases\",\"default.default\",'[t] \"d\\u00e9claration de cas\";[t] \"avec\"; [t] count(children/*); [t] \"cas\"; [n] . (engine:style=feminine)',\"self::cases\"],[\"Rule\",\"abstr-cases\",\"mathspeak.brief\",'[t] \"d\\u00e9claration de cas\"; [n] . (engine:style=feminine)',\"self::cases\"],[\"SpecializedRule\",\"abstr-cases\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-cases,default.default,[t] \"d\\u00e9claration de cas variable\"; [n] . (engine:style=feminine),self::cases,./children/row/children/cell/children/punctuation[@role=\"ellipsis\"]or ./children/line/children/punctuation[@role=\"ellipsis\"]'.split(\",\"),\n[\"Rule\",\"abstr-punctuated\",\"default.default\",'[t] \"liste de longueur\"; [t] count(children/*) - count(content/*); [t] \"s\\u00e9par\\u00e9e par des\"; [n] content/*[1] (join:\"\"); [t] \"s\"; [n] . (engine:style=feminine)',\"self::punctuated\"],[\"Rule\",\"abstr-punctuated\",\"mathspeak.brief\",'[t] \"liste s\\u00e9par\\u00e9e par des\"; [n] content/*[1] (join:\"\"); [t] \"s\"; [n] . (engine:style=feminine)',\"self::punctuated\"],[\"SpecializedRule\",\"abstr-punctuated\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-punctuated,default.default,[t] \"liste de longueur variable s\\u00e9par\\u00e9e par des\"; [n] content/*[1] (join:\"\"); [t] \"s\"; [n] . (engine:style=feminine),self::punctuated,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),\n[\"Rule\",\"abstr-bigop\",\"default.default\",\"[n] content/*[1]; [n] . (engine:style=masculine)\",\"self::bigop\"],[\"Rule\",\"abstr-integral\",\"default.default\",'[t] \"int\\u00e9grale\"; [n] . (engine:style=feminine)','@role=\"integral\"'],\"Rule,abstr-relation,default.default,[t] @role (grammar:localRole); [n] . (engine:style=masculine);,self::relseq,count(./children/*)=2\".split(\",\"),'Rule,abstr-relation-seq,default.default,[t] @role (grammar:localRole); [t] \"s\\u00e9quence\"; [t] \"avec\"; [t] count(./children/*); [t] \"\\u00e9l\\u00e9ments\"; [n] . (engine:style=feminine),self::relseq,count(./children/*)>2'.split(\",\"),\n'Rule,abstr-relation-seq,mathspeak.brief,[t] @role (grammar:localRole); [t] \"s\\u00e9quence\"; [n] . (engine:style=feminine),self::relseq,count(./children/*)>2'.split(\",\"),[\"SpecializedRule\",\"abstr-relation-seq\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-relation,default.default,[t] @role (grammar:localRole); [t] \"s\\u00e9quence\"; [t] \"avec un nombre de \\u00e9l\\u00e9ments variable\"; [n] . (engine:style=feminine),self::relseq,count(./children/*)>2,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),\n'UniqueAlias abstr-relation default.default self::multirel @role!=\"unknown\" count(./children/*)>2'.split(\" \"),'Aliases abstr-var-relation self::multirel @role!=\"unknown\" count(./children/*)>2 ./children/punctuation[@role=\"ellipsis\"]'.split(\" \"),'Rule,abstr-multirel,default.default,[t] \"s\\u00e9quence de relation\"; [t] \"avec\"; [t] count(./children/*); [t] \"\\u00e9l\\u00e9ments\"; [n] . (engine:style=feminine),self::multirel,count(./children/*)>2'.split(\",\"),'Rule,abstr-multirel,mathspeak.brief,[t] \"s\\u00e9quence de relation\"; [n] . (engine:style=feminine),self::multirel,count(./children/*)>2'.split(\",\"),\n[\"SpecializedRule\",\"abstr-multirel\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-multirel,default.default,[t] \"s\\u00e9quence de relation avec un nombre de \\u00e9l\\u00e9ments variable\"; [n] . (engine:style=feminine),self::multirel,count(./children/*)>2,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),[\"Rule\",\"abstr-table\",\"default.default\",'[t] \"table avec\"; [t] count(children/*); [t] \"lignes et\";[t] count(children/*[1]/children/*); [t] \"colonnes\"; [n] . (engine:style=feminine);',\"self::table\"],\n[\"Rule\",\"abstr-line\",\"default.default\",'[t] \"dans\"; [t] @role (grammar:localRole); [n] . (engine:style=masculine)',\"self::line\"],[\"Rule\",\"abstr-row\",\"default.default\",'[t] \"dans\"; [t] @role (grammar:localRole);[t] count(preceding-sibling::..); [t] \"avec\";[t] count(children/*); [t] \"colonnes\"; [n] . (engine:style=feminine)',\"self::row\"],[\"Rule\",\"abstr-cell\",\"default.default\",'[t] \"dans\"; [t] @role (grammar:localRole); [n] . (engine:style=feminine);',\"self::cell\"]]};sre.SummaryGerman={modality:\"summary\",locale:\"de\",rules:['Rule;abstr-identifier;default.default;[t] \"langer Bezeichner\";self::identifier;contains(@grammar, \"collapsed\")'.split(\";\"),[\"Rule\",\"abstr-identifier\",\"default.default\",'[t] \"Bezeichner\"',\"self::identifier\"],'Rule;abstr-number;default.default;[t] \"lange Zahl\";self::number;contains(@grammar, \"collapsed\")'.split(\";\"),[\"Rule\",\"abstr-number\",\"default.default\",'[t] \"Zahl\"',\"self::number\"],'Rule;abstr-mixed-number;default.default;[t] \"langer gemischter Bruch\";self::number;@role=\"mixed\";contains(@grammar, \"collapsed\")'.split(\";\"),\n'Rule;abstr-mixed-number;default.default;[t] \"gemischter Bruch\";self::number;@role=\"mixed\"'.split(\";\"),[\"Rule\",\"abstr-text\",\"default.default\",'[t] \"Text\"',\"self::text\"],[\"Rule\",\"abstr-function\",\"default.default\",'[t] \"Funktionsausdruck\"',\"self::function\"],[\"Rule\",\"abstr-function\",\"mathspeak.brief\",'[t] \"Funktion\"',\"self::function\"],[\"SpecializedRule\",\"abstr-function\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-lim;default.default;[t] \"Grenzwertfunktion\";self::function;@role=\"limit function\"'.split(\";\"),\n'Rule;abstr-lim;mathspeak.brief;[t] \"Grenzwert\";self::function;@role=\"limit function\"'.split(\";\"),[\"SpecializedRule\",\"abstr-lim\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Rule\",\"abstr-fraction\",\"default.default\",'[t] \"Bruch\"',\"self::fraction\"],'Rule;abstr-continued-fraction;default.default;[t] \"Kettenbruch\";self::fraction;children/*[2]/descendant-or-self::*[@role=\"ellipsis\"]'.split(\";\"),[\"Rule\",\"abstr-sqrt\",\"default.default\",'[t] \"Quadratwurzel\"',\"self::sqrt\"],'Rule;abstr-sqrt-nested;default.default;[t] \"verschachtelte Quadratwurzel\";self::sqrt;children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\";\"),\n'Rule{abstr-root{default.default{[t] \"Wurzel mit Exponent\"; [n] children/*[1] (engine:modality=speech); [t] \"Exponentende\"{self::root{contains(@grammar, \"collapsed\"){following-sibling::* or ancestor::*/following-sibling::*'.split(\"{\"),[\"Rule\",\"abstr-root\",\"default.default\",'[t] \"Wurzel mit Exponent\"; [n] children/*[1] (engine:modality=speech)',\"self::root\"],[\"Rule\",\"abstr-root\",\"mathspeak.brief\",'[t] \"Wurzel\"',\"self::root\"],[\"SpecializedRule\",\"abstr-root\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule{abstr-root-nested{default.default{[t] \"verschachtelte Wurzel mit Wurzelexponent\"; [n] children/*[1] (engine:modality=\"speech\"); [t] \"Ende Wurzelexponent\"{self::root{contains(@grammar, \"collapsed\"){children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root{following-sibling::* or ancestor::*/following-sibling::*'.split(\"{\"),\n'Rule,abstr-root-nested,default.default,[t] \"verschachtelte Wurzel mit Exponent\"; [n] children/*[1] (engine:modality=\"speech\"),self::root,children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\",\"),'Rule;abstr-root-nested;mathspeak.brief;[t] \"verschachtelte Wurzel\";self::root;children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\";\"),[\"SpecializedRule\",\"abstr-root-nested\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Rule\",\"abstr-superscript\",\"default.default\",\n'[t] \"Potenz\"',\"self::superscript\"],[\"Rule\",\"abstr-subscript\",\"default.default\",'[t] \"Index\"',\"self::subscript\"],'Rule;abstr-subsup;default.default;[t] \"Potenz mit Index\";self::superscript;name(children/*[1])=\"subscript\"'.split(\";\"),[\"Rule\",\"abstr-infixop\",\"default.default\",'[t] @role (grammar:localRole); [t] \"mit\"; [t] count(./children/*); [t] \"Elementen\"',\"self::infixop\"],'Rule,abstr-infixop,default.default,[t] @role (grammar:localRole); [t] \"mit ver\\u00e4nderlicher Anzahl an Elementen\",self::infixop,count(./children/*)>2,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),\n[\"Rule\",\"abstr-infixop\",\"mathspeak.brief\",\"[t] @role (grammar:localRole)\",\"self::infixop\"],[\"SpecializedRule\",\"abstr-infixop\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-addition,default.default,[t] \"Summe mit\"; [t] count(./children/*); [t] \"Summanden\",self::infixop,@role=\"addition\"'.split(\",\"),'Rule;abstr-addition;mathspeak.brief;[t] \"Summe\";self::infixop;@role=\"addition\"'.split(\";\"),[\"SpecializedRule\",\"abstr-addition\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-addition;default.default;[t] \"Summe mit ver\\u00e4nderlicher Anzahl an Summanden\";self::infixop;@role=\"addition\";count(./children/*)>2;./children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n'Rule,abstr-multiplication,default.default,[t] \"Produkt mit\"; [t] count(./children/*); [t] \"Faktoren\",self::infixop,@role=\"multiplication\"'.split(\",\"),'Rule;abstr-multiplication;mathspeak.brief;[t] \"Produkt\";self::infixop;@role=\"multiplication\"'.split(\";\"),[\"SpecializedRule\",\"abstr-multiplication\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Aliases\",\"abstr-multiplication\",\"self::infixop\",'@role=\"implicit\"'],'Rule;abstr-var-multiplication;default.default;[t] \"Produkt mit ver\\u00e4nderlicher Anzahl an Faktoren\";self::infixop;@role=\"multiplication\";count(./children/*)>2;./children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n'Aliases abstr-var-multiplication self::infixop @role=\"implicit\" count(./children/*)>2 ./children/punctuation[@role=\"ellipsis\"]'.split(\" \"),[\"Rule\",\"abstr-vector\",\"default.default\",'[t] count(./children/*) ; [t] \"dimensionaler Vektor\"',\"self::vector\"],[\"Rule\",\"abstr-vector\",\"mathspeak.brief\",'[t] \"Vektor\"',\"self::vector\"],[\"SpecializedRule\",\"abstr-vector\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-vector;default.default;[t] \"n dimensionaler Vektor\";self::vector;./children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n'Rule;abstr-binomial;default.default;[t] \"Binomialkoeffizient\";self::vector;@role=\"binomial\"'.split(\";\"),[\"SpecializedRule\",\"abstr-binomial\",\"default.default\",\"mathspeak.brief\"],[\"SpecializedRule\",\"abstr-binomial\",\"default.default\",\"mathspeak.sbrief\"],'Rule,abstr-determinant,default.default,[t] count(./children/*); [t] \"dimensionale Determinante\",self::matrix,@role=\"determinant\"'.split(\",\"),'Rule;abstr-determinant;mathspeak.brief;[t] \"Determinante\";self::matrix;@role=\"determinant\"'.split(\";\"),[\"SpecializedRule\",\n\"abstr-determinant\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-determinant;default.default;[t] \"n dimensionale Determinante\";self::matrix;@role=\"determinant\";./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),'Rule,abstr-squarematrix,default.default,[t] count(./children/*); [t] \"dimensionale quadratische Matrize\",self::matrix,@role=\"squarematrix\"'.split(\",\"),'Rule;abstr-squarematrix;mathspeak.brief;[t] \"quadratische Matrize\";self::matrix;@role=\"squarematrix\"'.split(\";\"),\n[\"SpecializedRule\",\"abstr-squarematrix\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-rowvector,default.default,[t] count(./children/row/children/*); [t] \"dimensionaler Zeilenvektor\",self::matrix,@role=\"rowvector\"'.split(\",\"),'Rule;abstr-rowvector;mathspeak.brief;[t] \"Zeilenvektor\";self::matrix;@role=\"rowvector\"'.split(\";\"),[\"SpecializedRule\",\"abstr-rowvector\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-matrix;default.default;[t] \"n dimensionaler Zeilenvektor\";self::matrix;@role=\"rowvector\";./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n[\"Rule\",\"abstr-matrix\",\"default.default\",'[t] count(children/*);  [t] \"mal\";[t] count(children/*[1]/children/*); [t] \"Matrize\"',\"self::matrix\"],[\"Rule\",\"abstr-matrix\",\"mathspeak.brief\",'[t] \"Matrize\"',\"self::matrix\"],[\"SpecializedRule\",\"abstr-matrix\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-matrix;default.default;[t] \"n mal m dimensionale Matrize\";self::matrix;./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),[\"Rule\",\"abstr-cases\",\"default.default\",'[t] \"Fallunterscheidung\";[t] \"mit\"; [t] count(children/*); [t] \"F\\u00e4llen\"',\n\"self::cases\"],[\"Rule\",\"abstr-cases\",\"mathspeak.brief\",'[t] \"Fallunterscheidung\"',\"self::cases\"],[\"SpecializedRule\",\"abstr-cases\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-cases;default.default;[t] \"Fallunterscheidung mit ver\\u00e4nderlicher Anzahl an F\\u00e4llen\";self::cases;./children/row/children/cell/children/punctuation[@role=\"ellipsis\"]or ./children/line/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),[\"Rule\",\"abstr-punctuated\",\"default.default\",'[t] \"mit\"; [n] content/*[1]; [t] \"getrennte Liste der L\\u00e4nge\"; [t] count(children/*) - count(content/*)',\n\"self::punctuated\"],[\"Rule\",\"abstr-punctuated\",\"mathspeak.brief\",'[t] \"mit\"; [n] content/*[1]; [t] \"getrennte Liste\";',\"self::punctuated\"],[\"SpecializedRule\",\"abstr-punctuated\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-punctuated,default.default,[t] \"mit\"; [n] content/*[1]; [t] \"getrennte Liste\";[t] \"ver\\u00e4nderlicher L\\u00e4nge\",self::punctuated,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),[\"Rule\",\"abstr-bigop\",\"default.default\",\"[n] content/*[1]\",\"self::bigop\"],[\"Rule\",\"abstr-integral\",\n\"default.default\",'[t] \"Integral\"','@role=\"integral\"'],\"Rule,abstr-relation,default.default,[t] @role (grammar:localRole);,self::relseq,count(./children/*)=2\".split(\",\"),'Rule{abstr-relation-seq{default.default{[t] @role (grammar:localRole, join:\"\"); [t] \"ssequenz\"; [t] \"mit\"; [t] count(./children/*); [t] \"Elementen\"{self::relseq{count(./children/*)>2'.split(\"{\"),'Rule{abstr-relation-seq{mathspeak.brief{[t] @role (grammar:localRole, join:\"\"); [t] \"ssequenz\"{self::relseq{count(./children/*)>2'.split(\"{\"),\n[\"SpecializedRule\",\"abstr-relation-seq\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule{abstr-var-relation{default.default{[t] @role (grammar:localRole, join:\"\"); [t] \"ssequenz\";[t] \"mit ver\\u00e4nderlicher Anzahl an Elementen\"{self::relseq{count(./children/*)>2{./children/punctuation[@role=\"ellipsis\"]'.split(\"{\"),'UniqueAlias abstr-relation default.default self::multirel @role!=\"unknown\" count(./children/*)>2'.split(\" \"),'Aliases abstr-var-relation self::multirel @role!=\"unknown\" count(./children/*)>2 ./children/punctuation[@role=\"ellipsis\"]'.split(\" \"),\n'Rule,abstr-multirel,default.default,[t] \"Relationsequenz\"; [t] \"mit\"; [t] count(./children/*); [t] \"Elementen\",self::multirel,count(./children/*)>2'.split(\",\"),'Rule;abstr-multirel;mathspeak.brief;[t] \"Relationsequenz\";self::multirel;count(./children/*)>2'.split(\";\"),[\"SpecializedRule\",\"abstr-multirel\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-multirel;default.default;[t] \"Relationsequenz mit ver\\u00e4nderlicher Anzahl an Elementen\";self::multirel;count(./children/*)>2;./children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n[\"Rule\",\"abstr-table\",\"default.default\",'[t] \"Tabelle mit\"; [t] count(children/*); [t] \"Zeilen und\";[t] count(children/*[1]/children/*); [t] \"Spalten\"',\"self::table\"],[\"Rule\",\"abstr-line\",\"default.default\",'[t] \"in\"; [t] @role (grammar:localRole);',\"self::line\"],[\"Rule\",\"abstr-row\",\"default.default\",'[t] \"in\"; [t] @role (grammar:localRole);[t] count(preceding-sibling::..); [t] \"mit\";[t] count(children/*); [t] \"Spalten\"',\"self::row\"],[\"Rule\",\"abstr-cell\",\"default.default\",'[t] \"in\"; [t] @role (grammar:localRole);',\n\"self::cell\"]]};sre.SummaryRules={modality:\"summary\",rules:['Rule;abstr-identifier;default.default;[t] \"long identifier\";self::identifier;contains(@grammar, \"collapsed\")'.split(\";\"),[\"Rule\",\"abstr-identifier\",\"default.default\",'[t] \"identifier\"',\"self::identifier\"],'Rule;abstr-number;default.default;[t] \"long number\";self::number;contains(@grammar, \"collapsed\")'.split(\";\"),[\"Rule\",\"abstr-number\",\"default.default\",'[t] \"number\"',\"self::number\"],'Rule;abstr-mixed-number;default.default;[t] \"long mixed number\";self::number;@role=\"mixed\";contains(@grammar, \"collapsed\")'.split(\";\"),\n'Rule;abstr-mixed-number;default.default;[t] \"mixed number\";self::number;@role=\"mixed\"'.split(\";\"),[\"Rule\",\"abstr-text\",\"default.default\",'[t] \"text\"',\"self::text\"],[\"Rule\",\"abstr-function\",\"default.default\",'[t] \"functional expression\"',\"self::function\"],[\"Rule\",\"abstr-function\",\"mathspeak.brief\",'[t] \"function\"',\"self::function\"],[\"SpecializedRule\",\"abstr-function\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-lim;default.default;[t] \"limit function\";self::function;@role=\"limit function\"'.split(\";\"),\n'Rule;abstr-lim;mathspeak.brief;[t] \"lim\";self::function;@role=\"limit function\"'.split(\";\"),[\"SpecializedRule\",\"abstr-lim\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Rule\",\"abstr-fraction\",\"default.default\",'[t] \"fraction\"',\"self::fraction\"],[\"Rule\",\"abstr-fraction\",\"mathspeak.brief\",'[t] \"frac\"',\"self::fraction\"],[\"SpecializedRule\",\"abstr-fraction\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-continued-fraction;default.default;[t] \"continued fraction\";self::fraction;children/*[2]/descendant-or-self::*[@role=\"ellipsis\"]'.split(\";\"),\n'Rule;abstr-continued-fraction;mathspeak.brief;[t] \"continued frac\";self::fraction;children/*[2]/descendant-or-self::*[@role=\"ellipsis\"]'.split(\";\"),[\"SpecializedRule\",\"abstr-continued-fraction\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Rule\",\"abstr-sqrt\",\"default.default\",'[t] \"square root\"',\"self::sqrt\"],'Rule;abstr-sqrt-nested;default.default;[t] \"nested square root\";self::sqrt;children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\";\"),'Rule{abstr-root{default.default{[t] \"root of index\"; [n] children/*[1] (engine:modality=\"speech\"); [t] \"endindex\"{self::root{contains(@grammar, \"collapsed\"){following-sibling::* or ancestor::*/following-sibling::*'.split(\"{\"),\n[\"Rule\",\"abstr-root\",\"default.default\",'[t] \"root of index\"; [n] children/*[1] (engine:modality=speech)',\"self::root\"],[\"Rule\",\"abstr-root\",\"mathspeak.brief\",'[t] \"root\"',\"self::root\"],[\"SpecializedRule\",\"abstr-root\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule{abstr-root-nested{default.default{[t] \"nested root of index\"; [n] children/*[1] (engine:modality=\"speech\"); [t] \"endindex\"{self::root{contains(@grammar, \"collapsed\"){children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root{following-sibling::* or ancestor::*/following-sibling::*'.split(\"{\"),\n'Rule,abstr-root-nested,default.default,[t] \"nested root of index\"; [n] children/*[1] (engine:modality=\"speech\"),self::root,children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\",\"),'Rule;abstr-root-nested;mathspeak.brief;[t] \"nested root\";self::root;children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\";\"),[\"SpecializedRule\",\"abstr-root-nested\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Rule\",\"abstr-superscript\",\"default.default\",'[t] \"power\"',\n\"self::superscript\"],[\"Rule\",\"abstr-subscript\",\"default.default\",'[t] \"subscript\"',\"self::subscript\"],'Rule;abstr-subsup;default.default;[t] \"power with subscript\";self::superscript;name(children/*[1])=\"subscript\"'.split(\";\"),[\"Rule\",\"abstr-infixop\",\"default.default\",'[t] @role (grammar:localRole); [t] \"with\"; [t] count(./children/*); [t] \"elements\"',\"self::infixop\"],'Rule,abstr-infixop,default.default,[t] @role (grammar:localRole); [t] \"with variable number of elements\",self::infixop,count(./children/*)>2,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),\n[\"Rule\",\"abstr-infixop\",\"mathspeak.brief\",\"[t] @role (grammar:localRole)\",\"self::infixop\"],[\"SpecializedRule\",\"abstr-infixop\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-addition,default.default,[t] \"sum with\"; [t] count(./children/*); [t] \"summands\",self::infixop,@role=\"addition\"'.split(\",\"),'Rule;abstr-addition;mathspeak.brief;[t] \"sum\";self::infixop;@role=\"addition\"'.split(\";\"),[\"SpecializedRule\",\"abstr-addition\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-addition;default.default;[t] \"sum with variable number of summands\";self::infixop;@role=\"addition\";count(./children/*)>2;./children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n'Rule,abstr-multiplication,default.default,[t] \"product with\"; [t] count(./children/*); [t] \"factors\",self::infixop,@role=\"multiplication\"'.split(\",\"),'Rule;abstr-multiplication;mathspeak.brief;[t] \"product\";self::infixop;@role=\"multiplication\"'.split(\";\"),[\"SpecializedRule\",\"abstr-multiplication\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Aliases\",\"abstr-multiplication\",\"self::infixop\",'@role=\"implicit\"'],'Rule;abstr-var-multiplication;default.default;[t] \"product with variable number of factors\";self::infixop;@role=\"multiplication\";count(./children/*)>2;./children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n'Aliases abstr-var-multiplication self::infixop @role=\"implicit\" count(./children/*)>2 ./children/punctuation[@role=\"ellipsis\"]'.split(\" \"),[\"Rule\",\"abstr-vector\",\"default.default\",'[t] count(./children/*) ; [t] \"dimensional vector\"',\"self::vector\"],[\"Rule\",\"abstr-vector\",\"mathspeak.brief\",'[t] \"vector\"',\"self::vector\"],[\"SpecializedRule\",\"abstr-vector\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-vector;default.default;[t] \"n dimensional vector\";self::vector;./children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n'Rule;abstr-binomial;default.default;[t] \"binomial\";self::vector;@role=\"binomial\"'.split(\";\"),[\"SpecializedRule\",\"abstr-binomial\",\"default.default\",\"mathspeak.brief\"],[\"SpecializedRule\",\"abstr-binomial\",\"default.default\",\"mathspeak.sbrief\"],'Rule,abstr-determinant,default.default,[t] count(./children/*); [t] \"dimensional determinant\",self::matrix,@role=\"determinant\"'.split(\",\"),'Rule;abstr-determinant;mathspeak.brief;[t] \"determinant\";self::matrix;@role=\"determinant\"'.split(\";\"),[\"SpecializedRule\",\n\"abstr-determinant\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-determinant;default.default;[t] \"n dimensional determinant\";self::matrix;@role=\"determinant\";./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),'Rule,abstr-squarematrix,default.default,[t] count(./children/*); [t] \"dimensional square matrix\",self::matrix,@role=\"squarematrix\"'.split(\",\"),'Rule;abstr-squarematrix;mathspeak.brief;[t] \"square matrix\";self::matrix;@role=\"squarematrix\"'.split(\";\"),[\"SpecializedRule\",\n\"abstr-squarematrix\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-rowvector,default.default,[t] count(./children/row/children/*); [t] \"dimensional row vector\",self::matrix,@role=\"rowvector\"'.split(\",\"),'Rule;abstr-rowvector;mathspeak.brief;[t] \"row vector\";self::matrix;@role=\"rowvector\"'.split(\";\"),[\"SpecializedRule\",\"abstr-rowvector\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-matrix;default.default;[t] \"n dimensional row vector\";self::matrix;@role=\"rowvector\";./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n[\"Rule\",\"abstr-matrix\",\"default.default\",'[t] count(children/*);  [t] \"by\";[t] count(children/*[1]/children/*); [t] \"matrix\"',\"self::matrix\"],[\"Rule\",\"abstr-matrix\",\"mathspeak.brief\",'[t] \"matrix\"',\"self::matrix\"],[\"SpecializedRule\",\"abstr-matrix\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-matrix;default.default;[t] \"n by m dimensional matrix\";self::matrix;./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),[\"Rule\",\"abstr-cases\",\"default.default\",'[t] \"case statement\";[t] \"with\"; [t] count(children/*); [t] \"cases\"',\n\"self::cases\"],[\"Rule\",\"abstr-cases\",\"mathspeak.brief\",'[t] \"case statement\"',\"self::cases\"],[\"SpecializedRule\",\"abstr-cases\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-cases;default.default;[t] \"case statement with variable number of cases\";self::cases;./children/row/children/cell/children/punctuation[@role=\"ellipsis\"]or ./children/line/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),[\"Rule\",\"abstr-punctuated\",\"default.default\",'[n] content/*[1]; [t] \"separated list\"; [t] \"of length\"; [t] count(children/*) - count(content/*)',\n\"self::punctuated\"],[\"Rule\",\"abstr-punctuated\",\"mathspeak.brief\",'[n] content/*[1]; [t] \"separated list\"',\"self::punctuated\"],[\"SpecializedRule\",\"abstr-punctuated\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-punctuated,default.default,[n] content/*[1]; [t] \"separated list\";[t] \"of variable length\",self::punctuated,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),[\"Rule\",\"abstr-bigop\",\"default.default\",\"[n] content/*[1]\",\"self::bigop\"],[\"Rule\",\"abstr-integral\",\"default.default\",'[t] \"integral\"',\n'@role=\"integral\"'],\"Rule,abstr-relation,default.default,[t] @role (grammar:localRole);,self::relseq,count(./children/*)=2\".split(\",\"),'Rule,abstr-relation-seq,default.default,[t] @role (grammar:localRole); [t] \"sequence\"; [t] \"with\"; [t] count(./children/*); [t] \"elements\",self::relseq,count(./children/*)>2'.split(\",\"),'Rule,abstr-relation-seq,mathspeak.brief,[t] @role (grammar:localRole); [t] \"sequence\",self::relseq,count(./children/*)>2'.split(\",\"),[\"SpecializedRule\",\"abstr-relation-seq\",\"mathspeak.brief\",\n\"mathspeak.sbrief\"],'Rule,abstr-var-relation,default.default,[t] @role (grammar:localRole); [t] \"sequence\"; [t] \"with variable number of elements\",self::relseq,count(./children/*)>2,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),'UniqueAlias abstr-relation default.default self::multirel @role!=\"unknown\" count(./children/*)>2'.split(\" \"),'Aliases abstr-var-relation self::multirel @role!=\"unknown\" count(./children/*)>2 ./children/punctuation[@role=\"ellipsis\"]'.split(\" \"),'Rule,abstr-multirel,default.default,[t] \"relation sequence\"; [t] \"with\"; [t] count(./children/*); [t] \"elements\",self::multirel,count(./children/*)>2'.split(\",\"),\n'Rule;abstr-multirel;mathspeak.brief;[t] \"relation sequence\";self::multirel;count(./children/*)>2'.split(\";\"),[\"SpecializedRule\",\"abstr-multirel\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-multirel;default.default;[t] \"relation sequence with variable number of elements\";self::multirel;count(./children/*)>2;./children/punctuation[@role=\"ellipsis\"]'.split(\";\"),[\"Rule\",\"abstr-table\",\"default.default\",'[t] \"table with\"; [t] count(children/*); [t] \"rows and\";[t] count(children/*[1]/children/*); [t] \"columns\"',\n\"self::table\"],[\"Rule\",\"abstr-line\",\"default.default\",'[t] \"in\"; [t] @role (grammar:localRole);',\"self::line\"],[\"Rule\",\"abstr-row\",\"default.default\",'[t] \"in\"; [t] @role (grammar:localRole);[t] count(preceding-sibling::..); [t] \"with\";[t] count(children/*); [t] \"columns\"',\"self::row\"],[\"Rule\",\"abstr-cell\",\"default.default\",'[t] \"in\"; [t] @role (grammar:localRole);',\"self::cell\"]]};sre.SummarySpanish={locale:\"es\",modality:\"summary\",rules:[[\"Rule\",\"stree\",\"default.default\",\"[n] ./*[1]\",\"self::stree\"],'Rule;abstr-identifier;default.default;[t] \"identificador largo\";self::identifier;contains(@grammar, \"collapsed\")'.split(\";\"),[\"Rule\",\"abstr-identifier\",\"default.default\",'[t] \"identificador\"',\"self::identifier\"],'Rule;abstr-number;default.default;[t] \"n\\u00famero largo\";self::number;contains(@grammar, \"collapsed\")'.split(\";\"),[\"Rule\",\"abstr-number\",\"default.default\",'[t] \"n\\u00famero\"',\n\"self::number\"],'Rule;abstr-mixed-number;default.default;[t] \"n\\u00famero largo mixto\";self::number;@role=\"mixed\";contains(@grammar, \"collapsed\")'.split(\";\"),'Rule;abstr-mixed-number;default.default;[t] \"n\\u00famero mixto\";self::number;@role=\"mixed\"'.split(\";\"),[\"Rule\",\"abstr-text\",\"default.default\",'[t] \"texto\"',\"self::text\"],[\"Rule\",\"abstr-function\",\"default.default\",'[t] \"expresi\\u00f3n funcional\"',\"self::function\"],[\"Rule\",\"abstr-function\",\"mathspeak.brief\",'[t] \"funci\\u00f3n\"',\"self::function\"],\n[\"SpecializedRule\",\"abstr-function\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-lim;default.default;[t] \"funci\\u00f3n de l\\u00edmite\";self::function;@role=\"limit function\"'.split(\";\"),'Rule;abstr-lim;mathspeak.brief;[t] \"l\\u00edmite\";self::function;@role=\"limit function\"'.split(\";\"),[\"SpecializedRule\",\"abstr-lim\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Rule\",\"abstr-fraction\",\"default.default\",'[t] \"fracci\\u00f3n\"',\"self::fraction\"],[\"Rule\",\"abstr-fraction\",\"mathspeak.brief\",'[t] \"frac\"',\"self::fraction\"],\n[\"SpecializedRule\",\"abstr-fraction\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-continued-fraction;default.default;[t] \"fracci\\u00f3n continua\";self::fraction;children/*[2]/descendant-or-self::*[@role=\"ellipsis\"]'.split(\";\"),'Rule;abstr-continued-fraction;mathspeak.brief;[t] \"frac continua\";self::fraction;children/*[2]/descendant-or-self::*[@role=\"ellipsis\"]'.split(\";\"),[\"SpecializedRule\",\"abstr-continued-fraction\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Rule\",\"abstr-sqrt\",\"default.default\",\n'[t] \"ra\\u00edz cuadrada\"',\"self::sqrt\"],'Rule;abstr-sqrt-nested;default.default;[t] \"ra\\u00edz cuadrada anidada\";self::sqrt;children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\";\"),'Rule{abstr-root{default.default{[t] \"ra\\u00edz del \\u00edndice\"; [n] children/*[1] (engine:modality=\"speech\"); [t] \"finalizar de \\u00edndice\"{self::root{contains(@grammar, \"collapsed\"){following-sibling::* or ancestor::*/following-sibling::*'.split(\"{\"),[\"Rule\",\"abstr-root\",\"default.default\",\n'[t] \"ra\\u00edz del \\u00edndice\"; [n] children/*[1] (engine:modality=speech)',\"self::root\"],[\"Rule\",\"abstr-root\",\"mathspeak.brief\",'[t] \"ra\\u00edz\"',\"self::root\"],[\"SpecializedRule\",\"abstr-root\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule{abstr-root-nested{default.default{[t] \"ra\\u00edz anidada del \\u00edndice\"; [n] children/*[1] (engine:modality=\"speech\"); [t] \"finalizar de \\u00edndice\"{self::root{contains(@grammar, \"collapsed\"){children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root{following-sibling::* or ancestor::*/following-sibling::*'.split(\"{\"),\n'Rule,abstr-root-nested,default.default,[t] \"ra\\u00edz anidada del \\u00edndice\"; [n] children/*[1] (engine:modality=\"speech\"),self::root,children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\",\"),'Rule;abstr-root-nested;mathspeak.brief;[t] \"ra\\u00edz anidada\";self::root;children/*/descendant-or-self::sqrt or children/*/descendant-or-self::root'.split(\";\"),[\"SpecializedRule\",\"abstr-root-nested\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Rule\",\"abstr-superscript\",\"default.default\",\n'[t] \"potencia\"',\"self::superscript\"],[\"Rule\",\"abstr-subscript\",\"default.default\",'[t] \"sub\\u00edndice\"',\"self::subscript\"],'Rule;abstr-subsup;default.default;[t] \"potencia con sub\\u00edndice\";self::superscript;name(children/*[1])=\"subscript\"'.split(\";\"),[\"Rule\",\"abstr-infixop\",\"default.default\",'[t] @role (grammar:localRole); [t] \"con\"; [t] count(./children/*); [t] \"elementos\"',\"self::infixop\"],'Rule,abstr-infixop,default.default,[t] @role (grammar:localRole); [t] \"con una cantidad variable de elementos\",self::infixop,count(./children/*)>2,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),\n[\"Rule\",\"abstr-infixop\",\"mathspeak.brief\",\"[t] @role (grammar:localRole)\",\"self::infixop\"],[\"SpecializedRule\",\"abstr-infixop\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-addition,default.default,[t] \"suma con\"; [t] count(./children/*); [t] \"sumandos\",self::infixop,@role=\"addition\"'.split(\",\"),'Rule;abstr-addition;mathspeak.brief;[t] \"suma\";self::infixop;@role=\"addition\"'.split(\";\"),[\"SpecializedRule\",\"abstr-addition\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-addition;default.default;[t] \"suma con n\\u00famero variable de sumandos\";self::infixop;@role=\"addition\";count(./children/*)>2;./children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n'Rule,abstr-multiplication,default.default,[t] \"producto con\"; [t] count(./children/*); [t] \"factores\",self::infixop,@role=\"multiplication\"'.split(\",\"),'Rule;abstr-multiplication;mathspeak.brief;[t] \"producto\";self::infixop;@role=\"multiplication\"'.split(\";\"),[\"SpecializedRule\",\"abstr-multiplication\",\"mathspeak.brief\",\"mathspeak.sbrief\"],[\"Aliases\",\"abstr-multiplication\",\"self::infixop\",'@role=\"implicit\"'],'Rule;abstr-var-multiplication;default.default;[t] \"producto con una cantidad variable de factores\";self::infixop;@role=\"multiplication\";count(./children/*)>2;./children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n'Aliases abstr-var-multiplication self::infixop @role=\"implicit\" count(./children/*)>2 ./children/punctuation[@role=\"ellipsis\"]'.split(\" \"),[\"Rule\",\"abstr-vector\",\"default.default\",'[t] \"vector de dimensi\\u00f3n\"; [t] count(./children/*)',\"self::vector\"],[\"Rule\",\"abstr-vector\",\"mathspeak.brief\",'[t] \"vector\"',\"self::vector\"],[\"SpecializedRule\",\"abstr-vector\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-vector;default.default;[t] \"vector de dimensi\\u00f3n n\";self::vector;./children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n'Rule;abstr-binomial;default.default;[t] \"binomio\";self::vector;@role=\"binomial\"'.split(\";\"),[\"SpecializedRule\",\"abstr-binomial\",\"default.default\",\"mathspeak.brief\"],[\"SpecializedRule\",\"abstr-binomial\",\"default.default\",\"mathspeak.sbrief\"],'Rule,abstr-determinant,default.default,[t] \"determinante de dimensi\\u00f3n\"; [t] count(./children/*),self::matrix,@role=\"determinant\"'.split(\",\"),'Rule;abstr-determinant;mathspeak.brief;[t] \"determinante\";self::matrix;@role=\"determinant\"'.split(\";\"),[\"SpecializedRule\",\n\"abstr-determinant\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-determinant;default.default;[t] \"determinante de dimensi\\u00f3n n\";self::matrix;@role=\"determinant\";./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),'Rule,abstr-squarematrix,default.default,[t] \"matriz cuadrada de dimensi\\u00f3n\"; [t] count(./children/*),self::matrix,@role=\"squarematrix\"'.split(\",\"),'Rule;abstr-squarematrix;mathspeak.brief;[t] \"matriz cuadrada\";self::matrix;@role=\"squarematrix\"'.split(\";\"),\n[\"SpecializedRule\",\"abstr-squarematrix\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-rowvector,default.default,[t] \"vector fila de dimensi\\u00f3n\"; [t] count(./children/row/children/*),self::matrix,@role=\"rowvector\"'.split(\",\"),'Rule;abstr-rowvector;mathspeak.brief;[t] \"vector fila\";self::matrix;@role=\"rowvector\"'.split(\";\"),[\"SpecializedRule\",\"abstr-rowvector\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-matrix;default.default;[t] \"vector fila de dimensi\\u00f3n n\";self::matrix;@role=\"rowvector\";./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n[\"Rule\",\"abstr-matrix\",\"default.default\",'[t] count(children/*);  [t] \"por\";[t] count(children/*[1]/children/*); [t] \"matriz\"',\"self::matrix\"],[\"Rule\",\"abstr-matrix\",\"mathspeak.brief\",'[t] \"matriz\"',\"self::matrix\"],[\"SpecializedRule\",\"abstr-matrix\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-matrix;default.default;[t] \"matriz de dimensi\\u00f3n n por m\";self::matrix;./children/*/children/*/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),[\"Rule\",\"abstr-cases\",\"default.default\",'[t] \"declaraci\\u00f3n de caso\";[t] \"con\"; [t] count(children/*); [t] \"casos\"',\n\"self::cases\"],[\"Rule\",\"abstr-cases\",\"mathspeak.brief\",'[t] \"declaraci\\u00f3n de caso\"',\"self::cases\"],[\"SpecializedRule\",\"abstr-cases\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-cases;default.default;[t] \"declaraci\\u00f3n de caso con n\\u00famero variable de casos\";self::cases;./children/row/children/cell/children/punctuation[@role=\"ellipsis\"]or ./children/line/children/punctuation[@role=\"ellipsis\"]'.split(\";\"),[\"Rule\",\"abstr-punctuated\",\"default.default\",'[t] \"lista separada por\"; [n] content/*[1]; [t] \"de longitud\"; [t] count(children/*) - count(content/*)',\n\"self::punctuated\"],[\"Rule\",\"abstr-punctuated\",\"mathspeak.brief\",'[t] \"lista separada por\"; [n] content/*[1]',\"self::punctuated\"],[\"SpecializedRule\",\"abstr-punctuated\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-punctuated,default.default,[t] \"lista separada por\"; [n] content/*[1],[t] \"de longitud variable\",self::punctuated,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),[\"Rule\",\"abstr-bigop\",\"default.default\",\"[n] content/*[1]\",\"self::bigop\"],[\"Rule\",\"abstr-integral\",\"default.default\",\n'[t] \"integral\"','@role=\"integral\"'],\"Rule,abstr-relation,default.default,[t] @role (grammar:localRole);,self::relseq,count(./children/*)=2\".split(\",\"),'Rule,abstr-relation-seq,default.default,[t] \"secuencia de\"; [t] @role (grammar:localRole); [t] \"con\"; [t] count(./children/*); [t] \"elementos\",self::relseq,count(./children/*)>2'.split(\",\"),'Rule,abstr-relation-seq,mathspeak.brief,[t] \"secuencia de\"; [t] @role (grammar:localRole),self::relseq,count(./children/*)>2'.split(\",\"),[\"SpecializedRule\",\"abstr-relation-seq\",\n\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule,abstr-var-relation,default.default,[t] \"secuencia de\"; [t] @role (grammar:localRole); [t] \"con una cantidad variable de elementos\",self::relseq,count(./children/*)>2,./children/punctuation[@role=\"ellipsis\"]'.split(\",\"),'UniqueAlias abstr-relation default.default self::multirel @role!=\"unknown\" count(./children/*)>2'.split(\" \"),'Aliases abstr-var-relation self::multirel @role!=\"unknown\" count(./children/*)>2 ./children/punctuation[@role=\"ellipsis\"]'.split(\" \"),\n'Rule,abstr-multirel,default.default,[t] \"secuencia de relaci\\u00f3n\"; [t] \"con\"; [t] count(./children/*); [t] \"elementos\",self::multirel,count(./children/*)>2'.split(\",\"),'Rule;abstr-multirel;mathspeak.brief;[t] \"secuencia de relaci\\u00f3n\";self::multirel;count(./children/*)>2'.split(\";\"),[\"SpecializedRule\",\"abstr-multirel\",\"mathspeak.brief\",\"mathspeak.sbrief\"],'Rule;abstr-var-multirel;default.default;[t] \"secuencia de relaci\\u00f3n con n\\u00famero variable de elementos\";self::multirel;count(./children/*)>2;./children/punctuation[@role=\"ellipsis\"]'.split(\";\"),\n[\"Rule\",\"abstr-table\",\"default.default\",'[t] \"mesa con\"; [t] count(children/*); [t] \"filas y\";[t] count(children/*[1]/children/*); [t] \"columnas\"',\"self::table\"],[\"Rule\",\"abstr-line\",\"default.default\",'[t] \"en\"; [t] @role (grammar:localRole);',\"self::line\"],[\"Rule\",\"abstr-row\",\"default.default\",'[t] \"en\"; [t] @role (grammar:localRole);[t] count(preceding-sibling::..); [t] \"con\";[t] count(children/*); [t] \"columnas\"',\"self::row\"],[\"Rule\",\"abstr-cell\",\"default.default\",'[t] \"en\"; [t] @role (grammar:localRole);',\n\"self::cell\"]]};sre.SpeechRuleStores={};\nsre.SpeechRuleStores.RULE_SETS_={SemanticTreeRules:sre.SemanticTreeRules,MathspeakFrench:sre.MathspeakFrench,MathspeakGerman:sre.MathspeakGerman,MathspeakRules:sre.MathspeakRules,MathspeakSpanish:sre.MathspeakSpanish,NemethRules:sre.NemethRules,ClearspeakFrench:sre.ClearspeakFrench,ClearspeakGerman:sre.ClearspeakGerman,ClearspeakRules:sre.ClearspeakRules,EmacspeakRules:sre.EmacspeakRules,SummaryFrench:sre.SummaryFrench,SummaryGerman:sre.SummaryGerman,SummaryRules:sre.SummaryRules,SummarySpanish:sre.SummarySpanish,\nPrefixFrench:sre.PrefixFrench,PrefixGerman:sre.PrefixGerman,PrefixRules:sre.PrefixRules,PrefixSpanish:sre.PrefixSpanish};sre.SpeechRuleStores.availableSets=function(){return Object.keys(sre.SpeechRuleStores.RULE_SETS_)};sre.SpeechRuleStores.getConstructor=function(a){return(a=sre.SpeechRuleStores.RULE_SETS_[a])?a:null};sre.SpeechRuleEngine=function(){this.activeStore_=null;this.cache_={};this.ready_=!0;this.combinedStores_={};this.evaluators_={};this.ruleSets_={};sre.Engine.registerTest(goog.bind(function(a){return this.ready_},this))};goog.addSingletonGetter(sre.SpeechRuleEngine);\nsre.SpeechRuleEngine.prototype.parameterize=function(a){for(var b={},c=0,d=a.length;c<d;c++){var e=a[c];if(this.ruleSets_[e])b[e]=this.ruleSets_[e];else{var f=sre.SpeechRuleStores.getConstructor(e);if(f&&f.getInstance)b[e]=f.getInstance(),this.ruleSets_[e]=f.getInstance();else if(f){var g=this.storeFactory_(f.modality);g.parse(f);this.ruleSets_[e]=g;b[e]=g}}}this.parameterize_(b)};\nsre.SpeechRuleEngine.prototype.storeFactory_=function(a){return new ({braille:sre.BrailleStore,speech:sre.MathStore}[a]||sre.MathStore)};sre.SpeechRuleEngine.prototype.parameterize_=function(a){try{this.activeStore_=this.combineStores_(a)}catch(b){if(\"StoreError\"==b.name)console.error(\"Store Error:\",b.message);else throw b;}this.updateEngine()};sre.SpeechRuleEngine.prototype.clearCache=function(){this.cache_={}};sre.SpeechRuleEngine.prototype.forCache=function(a){for(var b in this.cache_)a(b,this.cache_[b])};\nsre.SpeechRuleEngine.prototype.getCacheForNode_=function(a){if(!a||!a.getAttribute)return null;a=a.getAttribute(\"id\");return\"undefined\"===a||\"\"===a?null:this.getCache(a)};sre.SpeechRuleEngine.prototype.getCache=function(a){return(a=this.cache_[a])?this.cloneCache(a):a};sre.SpeechRuleEngine.prototype.cloneCache=function(a){return a.map(function(b){return b.clone()})};\nsre.SpeechRuleEngine.prototype.pushCache_=function(a,b){sre.Engine.getInstance().cache&&a.getAttribute&&(a=a.getAttribute(\"id\"))&&(this.cache_[a]=this.cloneCache(b))};sre.SpeechRuleEngine.prototype.evaluateNode=function(a){var b=(new Date).getTime();a=this.evaluateNode_(a);var c=(new Date).getTime();sre.Debugger.getInstance().output(\"Time:\",c-b);return a};sre.SpeechRuleEngine.prototype.evaluateNode_=function(a){if(!a)return[];this.updateConstraint_();return this.evaluateTree_(a)};\nsre.SpeechRuleEngine.prototype.evaluateTree_=function(a){var b=sre.Engine.getInstance();sre.Debugger.getInstance().output(b.mode!==sre.Engine.Mode.HTTP?a.toString():a);if(b.cache){var c=this.getCacheForNode_(a);if(c)return a.attributes&&this.addPersonality_(c,{},!1,a),c}sre.Grammar.getInstance().setAttribute(a);var d=this.activeStore_.lookupRule(a,b.dynamicCstr);if(!d){if(b.strict)return[];c=this.getEvaluator(b.locale,b.modality)(a);a.attributes&&this.addPersonality_(c,{},!1,a);this.pushCache_(a,\nc);return c}sre.Debugger.getInstance().generateOutput(goog.bind(function(){return[\"Apply Rule:\",d.name,d.dynamicCstr.toString(),b.mode!==sre.Engine.Mode.HTTP?a.toString():a]},this));var e=d.context||this.activeStore_.context,f=d.action.components;c=[];for(var g=0,h;h=f[g];g++){var k=[],l=h.content||\"\",m=h.attributes||{},n=!1;h.grammar&&this.processGrammar(e,a,h.grammar);var p=null,q=null;if(m.engine){p=sre.Engine.getInstance().dynamicCstr.getComponents();var r=sre.Grammar.parseInput(m.engine);q=this.cache_;\nthis.clearCache();sre.Engine.getInstance().setDynamicCstr(r)}switch(h.type){case sre.SpeechRule.Type.NODE:(l=e.applyQuery(a,l))&&(k=this.evaluateTree_(l));break;case sre.SpeechRule.Type.MULTI:n=!0;l=e.applySelector(a,l);0<l.length&&(k=this.evaluateNodeList_(e,l,m.sepFunc,e.constructString(a,m.separator),m.ctxtFunc,e.constructString(a,m.context)));break;case sre.SpeechRule.Type.TEXT:(l=e.constructString(a,l))&&(k=[sre.AuditoryDescription.create({text:l},{adjust:!0})]);break;default:k=[sre.AuditoryDescription.create({text:l})]}k[0]&&\n!n&&(m.context&&(k[0].context=e.constructString(a,m.context)+(k[0].context||\"\")),m.annotation&&(k[0].annotation=m.annotation));h.grammar&&sre.Grammar.getInstance().popState();c=c.concat(this.addPersonality_(k,m,n,a));p&&(this.cache_=q,sre.Engine.getInstance().setDynamicCstr(p))}this.pushCache_(a,c);return c};\nsre.SpeechRuleEngine.prototype.evaluateNodeList_=function(a,b,c,d,e,f){if(b==[])return[];var g=d||\"\",h=f||\"\";d=(d=a.contextFunctions.lookup(e))?d(b,h):function(){return h};a=(a=a.contextFunctions.lookup(c))?a(b,g):function(){return sre.AuditoryDescription.create({text:g},{translate:!0})};c=[];for(e=0;f=b[e];e++)f=this.evaluateTree_(f),0<f.length&&(f[0].context=d()+(f[0].context||\"\"),c=c.concat(f),e<b.length-1&&(f=a(),c=c.concat(f)));return c};\nsre.SpeechRuleEngine.prototype.addPersonality_=function(a,b,c,d){var e={},f;for(f in sre.Engine.personalityProps){var g=b[sre.Engine.personalityProps[f]];if(\"undefined\"!==typeof g){var h=parseFloat(g);e[sre.Engine.personalityProps[f]]=isNaN(h)?'\"'==g.charAt(0)?g.slice(1,-1):g:h}}for(b=0;f=a[b];b++)this.addRelativePersonality_(f,e),this.addExternalAttributes_(f,d);c&&a.length&&delete a[a.length-1].personality[sre.Engine.personalityProps.JOIN];return a};\nsre.SpeechRuleEngine.prototype.addExternalAttributes_=function(a,b){if(b.hasAttributes()){b=b.attributes;for(var c=b.length-1;0<=c;c--){var d=b[c].name;!a.attributes[d]&&d.match(/^ext/)&&(a.attributes[d]=b[c].value)}}};sre.SpeechRuleEngine.prototype.addRelativePersonality_=function(a,b){if(!a.personality)return a.personality=b,a;var c=a.personality,d;for(d in b)c[d]=c[d]&&\"number\"==typeof c[d]&&\"number\"==typeof b[d]?c[d]+b[d]:b[d];return a};sre.SpeechRuleEngine.prototype.toString=function(){return this.activeStore_.findAllRules(function(a){return!0}).map(function(a){return a.toString()}).join(\"\\n\")};\nsre.SpeechRuleEngine.debugSpeechRule=function(a,b){var c=sre.SpeechRuleEngine.getInstance().activeStore_;c&&c.debugSpeechRule(a,b)};sre.SpeechRuleEngine.debugNamedSpeechRule=function(a,b){var c=sre.SpeechRuleEngine.getInstance().activeStore_;if(c)for(var d=c.findAllRules(function(g){return g.name==a}),e=0,f;f=d[e];e++)sre.Debugger.getInstance().output(\"Rule\",a,\"DynamicCstr:\",f.dynamicCstr.toString(),\"number\",e),c.debugSpeechRule(f,b)};\nsre.SpeechRuleEngine.prototype.runInSetting=function(a,b){var c=sre.Engine.getInstance(),d={},e=null,f;for(f in a)\"rules\"===f?(e=this.activeStore_,c.ruleSets=a[f],this.parameterize(c.ruleSets)):(d[f]=c[f],c[f]=a[f]);c.setDynamicCstr();a=b();for(f in d)c[f]=d[f];e&&(this.activeStore_=e);c.setDynamicCstr();return a};\nsre.SpeechRuleEngine.prototype.combineStores_=function(a){var b=this.cachedStore_(a);if(b)return b;b=new sre.MathStore;for(var c in a){var d=a[c];d.initialize();d.getSpeechRules().forEach(function(e){b.trie.addRule(e)});this.addEvaluator(d)}b.setSpeechRules(b.trie.collectRules());return this.combinedStores_[this.combinedStoreName_(Object.keys(a))]=b};sre.SpeechRuleEngine.prototype.combinedStoreName_=function(a){return a.sort().join(\"-\")};\nsre.SpeechRuleEngine.prototype.cachedStore_=function(a){var b=Object.keys(a);return b.some(function(c){return!a[c].initialized})?null:this.combinedStores_[this.combinedStoreName_(b)]};sre.SpeechRuleEngine.prototype.updateEngine=function(){this.ready_=!0;var a=sre.MathMap.getInstance();sre.Engine.isReady()?sre.Engine.getInstance().evaluator=goog.bind(a.store.lookupString,a.store):(this.ready_=!1,setTimeout(goog.bind(this.updateEngine,this),250))};\nsre.SpeechRuleEngine.prototype.processGrammar=function(a,b,c){var d={},e;for(e in c){var f=c[e];d[e]=\"string\"===typeof f?a.constructString(b,f):f}sre.Grammar.getInstance().pushState(d)};\nsre.SpeechRuleEngine.prototype.updateConstraint_=function(){var a=sre.Engine.getInstance().dynamicCstr,b=sre.Engine.getInstance().strict,c=this.activeStore_.trie,d={},e=a.getValue(sre.DynamicCstr.Axis.LOCALE),f=a.getValue(sre.DynamicCstr.Axis.MODALITY),g=a.getValue(sre.DynamicCstr.Axis.DOMAIN);c.hasSubtrie([e,f,g])||(e=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.LOCALE],c.hasSubtrie([e,f,g])||(f=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.MODALITY],c.hasSubtrie([e,f,g])||(g=sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.DOMAIN])));\nd[sre.DynamicCstr.Axis.LOCALE]=[e];d[sre.DynamicCstr.Axis.MODALITY]=[\"summary\"!==f?f:sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.MODALITY]];d[sre.DynamicCstr.Axis.DOMAIN]=[\"speech\"!==f?sre.DynamicCstr.DEFAULT_VALUES[sre.DynamicCstr.Axis.DOMAIN]:g];c=a.getOrder();for(e=0;f=c[e];e++)if(!d[f]){g=a.getValue(f);var h=this.makeSet_(g,a.preference),k=sre.DynamicCstr.DEFAULT_VALUES[f];b||g===k||h.push(k);d[f]=h}a.updateProperties(d)};\nsre.SpeechRuleEngine.prototype.makeSet_=function(a,b){return b&&Object.keys(b).length?a.split(\":\"):[a]};sre.SpeechRuleEngine.prototype.addEvaluator=function(a){var b=goog.bind(a.evaluateDefault,a),c=this.evaluators_[a.locale];c?c[a.modality]=b:(c={},c[a.modality]=b,this.evaluators_[a.locale]=c)};sre.SpeechRuleEngine.prototype.getEvaluator=function(a,b){return(b=(a=this.evaluators_[a])?a[b]:null)?b:goog.bind(this.activeStore_.evaluateDefault,this.activeStore_)};\nsre.SpeechRuleEngine.prototype.enumerate=function(a){return this.activeStore_.trie.enumerate(a)};sre.SpeechGeneratorUtil={};sre.SpeechGeneratorUtil.computeSpeech=function(a){var b=sre.SpeechRuleEngine.getInstance();b.clearCache();return b.evaluateNode(a)};sre.SpeechGeneratorUtil.recomputeSpeech=function(a){a=sre.SemanticTree.fromNode(a);return sre.SpeechRuleEngine.getInstance().evaluateNode(a.xml())};\nsre.SpeechGeneratorUtil.computeSpeechWithoutCache=function(a){var b=sre.Engine.getInstance().cache;sre.Engine.getInstance().cache=!1;a=sre.SpeechRuleEngine.getInstance().evaluateNode(a);sre.Engine.getInstance().cache=b;return a};sre.SpeechGeneratorUtil.retrieveSpeech=function(a){var b=null;sre.Engine.getInstance().cache&&(b=sre.SpeechRuleEngine.getInstance().getCache(a.id.toString()));b||(b=sre.SpeechGeneratorUtil.recomputeSpeech(a));return sre.AuralRendering.getInstance().markup(b)};\nsre.SpeechGeneratorUtil.addSpeech=function(a,b,c){b=sre.SpeechGeneratorUtil.retrieveSpeech(b);a.setAttribute(c||sre.EnrichMathml.Attribute.SPEECH,b)};sre.SpeechGeneratorUtil.addPrefix=function(a,b){(b=sre.SpeechGeneratorUtil.retrievePrefix(b))&&a.setAttribute(sre.EnrichMathml.Attribute.PREFIX,b)};sre.SpeechGeneratorUtil.retrievePrefix=function(a){a=sre.SpeechGeneratorUtil.computePrefix_(a);return sre.AuralRendering.getInstance().markup(a)};\nsre.SpeechGeneratorUtil.computePrefix_=function(a){var b=sre.SemanticTree.fromRoot(a),c=sre.XpathUtil.evalXPath('.//*[@id=\"'+a.id+'\"]',b.xml())[0];return c?sre.SpeechRuleEngine.getInstance().runInSetting({modality:\"prefix\",domain:\"default\",style:\"default\",strict:!0,cache:!1,speech:!0},function(){return sre.SpeechRuleEngine.getInstance().evaluateNode(c)}):[]};\nsre.SpeechGeneratorUtil.connectMactions=function(a,b,c){b=sre.DomUtil.querySelectorAll(b,\"maction\");for(var d=0,e;e=b[d];d++){var f=e.getAttribute(\"id\");if(f=sre.DomUtil.querySelectorAllByAttrValue(a,\"id\",f)[0]){var g=e.childNodes[1];e=g.getAttribute(sre.EnrichMathml.Attribute.ID);var h=sre.WalkerUtil.getBySemanticId(a,e);h&&\"dummy\"!==h.getAttribute(sre.EnrichMathml.Attribute.TYPE)||(h=f.childNodes[0],h.getAttribute(\"sre-highlighter-added\")||((f=g.getAttribute(sre.EnrichMathml.Attribute.PARENT))&&\nh.setAttribute(sre.EnrichMathml.Attribute.PARENT,f),h.setAttribute(sre.EnrichMathml.Attribute.TYPE,\"dummy\"),h.setAttribute(sre.EnrichMathml.Attribute.ID,e),sre.DomUtil.querySelectorAllByAttrValue(c,\"id\",e)[0].setAttribute(\"alternative\",e)))}}};\nsre.SpeechGeneratorUtil.connectAllMactions=function(a,b){a=sre.DomUtil.querySelectorAll(a,\"maction\");for(var c=0,d;d=a[c];c++)d=d.childNodes[1].getAttribute(sre.EnrichMathml.Attribute.ID),sre.DomUtil.querySelectorAllByAttrValue(b,\"id\",d)[0].setAttribute(\"alternative\",d)};sre.SpeechGeneratorUtil.retrieveSummary=function(a){a=sre.SpeechGeneratorUtil.computeSummary_(a);return sre.AuralRendering.getInstance().markup(a)};\nsre.SpeechGeneratorUtil.computeSummary_=function(a){return a?sre.SpeechRuleEngine.getInstance().runInSetting({modality:\"summary\",strict:!1,cache:!1,speech:!0},function(){return sre.SpeechRuleEngine.getInstance().evaluateNode(a)}):[]};sre.AbstractSpeechGenerator=function(){this.rebuilt_=null;this.options_={};this.modality=sre.EnrichMathml.addPrefix(\"speech\")};sre.AbstractSpeechGenerator.prototype.getRebuilt=function(){return this.rebuilt_};sre.AbstractSpeechGenerator.prototype.setRebuilt=function(a){this.rebuilt_=a};sre.AbstractSpeechGenerator.prototype.setOptions=function(a){this.options_=a||{};this.modality=sre.EnrichMathml.addPrefix(this.options_.modality||\"speech\")};sre.AbstractSpeechGenerator.prototype.getOptions=function(){return this.options_};\nsre.AbstractSpeechGenerator.prototype.getSpeech=goog.abstractMethod;sre.AbstractSpeechGenerator.prototype.start=function(){};sre.AbstractSpeechGenerator.prototype.end=function(){};sre.AbstractSpeechGenerator.prototype.generateSpeech=function(a,b){this.rebuilt_||(this.rebuilt_=new sre.RebuildStree(b));sre.System.getInstance().setupEngine(this.options_);a=sre.SpeechGeneratorUtil.computeSpeech(this.getRebuilt().xml);return sre.AuralRendering.getInstance().markup(a)};sre.AdhocSpeechGenerator=function(){sre.AbstractSpeechGenerator.call(this)};goog.inherits(sre.AdhocSpeechGenerator,sre.AbstractSpeechGenerator);sre.AdhocSpeechGenerator.prototype.getSpeech=function(a,b){b=this.generateSpeech(a,b);a.setAttribute(this.modality,b);return b};sre.ColorGenerator=function(){sre.AbstractSpeechGenerator.call(this);this.modality=sre.EnrichMathml.addPrefix(\"foreground\");this.contrast=new sre.ContrastPicker};goog.inherits(sre.ColorGenerator,sre.AbstractSpeechGenerator);sre.ColorGenerator.prototype.getSpeech=function(a,b){return sre.WalkerUtil.getAttribute(a,this.modality)};\nsre.ColorGenerator.prototype.generateSpeech=function(a,b){this.getRebuilt()||this.setRebuilt(new sre.RebuildStree(a));this.colorLeaves_(a);return sre.WalkerUtil.getAttribute(a,this.modality)};\nsre.ColorGenerator.prototype.colorLeaves_=function(a){var b=this,c=[];sre.ColorGenerator.visitStree_(this.getRebuilt().streeRoot,c,{});var d={};c=$jscomp.makeIterator(c);for(var e=c.next();!e.done;d={$jscomp$loop$prop$color$5:d.$jscomp$loop$prop$color$5},e=c.next()){e=e.value;d.$jscomp$loop$prop$color$5=this.contrast.generate();var f=!1;(f=Array.isArray(e)?e.map(function(g){return function(h){return b.colorLeave_(a,h,g.$jscomp$loop$prop$color$5)}}(d)).reduce(function(g,h){return g||h},!1):this.colorLeave_(a,\ne,d.$jscomp$loop$prop$color$5))&&this.contrast.increment()}};sre.ColorGenerator.prototype.colorLeave_=function(a,b,c){return(a=sre.WalkerUtil.getBySemanticId(a,b))?(a.setAttribute(this.modality,c),!0):!1};\nsre.ColorGenerator.visitStree_=function(a,b,c){if(a.childNodes.length){if(a.contentNodes.length&&(\"punctuated\"===a.type&&a.contentNodes.forEach(function(h){return c[h.id]=!0}),\"implicit\"!==a.role&&b.push(a.contentNodes.map(function(h){return h.id}))),a.childNodes.length)if(\"implicit\"===a.role){var d=[],e=[];a=$jscomp.makeIterator(a.childNodes);for(var f=a.next();!f.done;f=a.next()){var g=[];sre.ColorGenerator.visitStree_(f.value,g,c);2>=g.length&&d.push(g.shift());e=e.concat(g)}b.push(d);e.forEach(function(h){return b.push(h)})}else a.childNodes.forEach(function(h){return sre.ColorGenerator.visitStree_(h,\nb,c)})}else c[a.id]||b.push(a.id)};sre.DirectSpeechGenerator=function(){sre.AbstractSpeechGenerator.call(this)};goog.inherits(sre.DirectSpeechGenerator,sre.AbstractSpeechGenerator);sre.DirectSpeechGenerator.prototype.getSpeech=function(a,b){return sre.WalkerUtil.getAttribute(a,this.modality)};sre.DummySpeechGenerator=function(){sre.AbstractSpeechGenerator.call(this)};goog.inherits(sre.DummySpeechGenerator,sre.AbstractSpeechGenerator);sre.DummySpeechGenerator.prototype.getSpeech=function(a,b){return\"\"};sre.TreeSpeechGenerator=function(){sre.AbstractSpeechGenerator.call(this)};goog.inherits(sre.TreeSpeechGenerator,sre.AbstractSpeechGenerator);\nsre.TreeSpeechGenerator.prototype.getSpeech=function(a,b){var c=this.generateSpeech(a,b);a.setAttribute(this.modality,c);var d=this.getRebuilt().nodeDict,e;for(e in d){var f=d[e],g=sre.WalkerUtil.getBySemanticId(b,e),h=sre.WalkerUtil.getBySemanticId(a,e);g&&h&&(sre.SpeechGeneratorUtil.addSpeech(h,f,this.modality),this.modality===sre.EnrichMathml.Attribute.SPEECH&&sre.SpeechGeneratorUtil.addPrefix(h,f))}return c};sre.NodeSpeechGenerator=function(){sre.TreeSpeechGenerator.call(this)};goog.inherits(sre.NodeSpeechGenerator,sre.TreeSpeechGenerator);sre.NodeSpeechGenerator.prototype.getSpeech=function(a,b){var c=sre.WalkerUtil.getAttribute(a,this.modality);return c?c:sre.NodeSpeechGenerator.superClass_.getSpeech.call(this,a,b)};sre.SummarySpeechGenerator=function(){sre.AbstractSpeechGenerator.call(this)};goog.inherits(sre.SummarySpeechGenerator,sre.AbstractSpeechGenerator);sre.SummarySpeechGenerator.prototype.getSpeech=function(a,b){sre.SpeechGeneratorUtil.connectAllMactions(b,this.getRebuilt().xml);return this.generateSpeech(a,b)};sre.SpeechGeneratorFactory={};sre.SpeechGeneratorFactory.generator=function(a){return new (sre.SpeechGeneratorFactory.generatorMapping_[a]||sre.SpeechGeneratorFactory.generatorMapping_.Direct)};sre.SpeechGeneratorFactory.generatorMapping_={Adhoc:sre.AdhocSpeechGenerator,Color:sre.ColorGenerator,Direct:sre.DirectSpeechGenerator,Dummy:sre.DummySpeechGenerator,Node:sre.NodeSpeechGenerator,Summary:sre.SummarySpeechGenerator,Tree:sre.TreeSpeechGenerator};sre.EventUtil={};sre.EventUtil.KeyCode={ENTER:13,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,TAB:9,LESS:188,GREATER:190,DASH:189,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90};sre.EventUtil.Move=function(){var a={},b;for(b in sre.EventUtil.KeyCode)a[sre.EventUtil.KeyCode[b]]=b;return a}();\nsre.EventUtil.EventType={CLICK:\"click\",DBLCLICK:\"dblclick\",MOUSEDOWN:\"mousedown\",MOUSEUP:\"mouseup\",MOUSEOVER:\"mouseover\",MOUSEOUT:\"mouseout\",MOUSEMOVE:\"mousemove\",SELECTSTART:\"selectstart\",KEYPRESS:\"keypress\",KEYDOWN:\"keydown\",KEYUP:\"keyup\",TOUCHSTART:\"touchstart\",TOUCHMOVE:\"touchmove\",TOUCHEND:\"touchend\",TOUCHCANCEL:\"touchcancel\"};sre.EventUtil.Event=function(a,b,c){this.src=a;this.type=b;this.callback=c};sre.EventUtil.Event.prototype.add=function(){this.src.addEventListener(this.type,this.callback)};\nsre.EventUtil.Event.prototype.remove=function(){this.src.removeEventListener(this.type,this.callback)};sre.Focus=function(a,b){this.semanticNodes_=a;this.semanticPrimary_=b;this.domNodes_=[];this.domPrimary_=null;this.allNodes_=[]};sre.Focus.prototype.getSemanticPrimary=function(){return this.semanticPrimary_};sre.Focus.prototype.getSemanticNodes=function(){return this.semanticNodes_};sre.Focus.prototype.getNodes=function(){return this.allNodes_};sre.Focus.prototype.getDomNodes=function(){return this.domNodes_};sre.Focus.prototype.getDomPrimary=function(){return this.domPrimary_};\nsre.Focus.prototype.toString=function(){return\"Primary:\"+this.domPrimary_+\" Nodes:\"+this.domNodes_};sre.Focus.prototype.clone=function(){var a=new sre.Focus(this.semanticNodes_,this.semanticPrimary_);a.domNodes_=this.domNodes_;a.domPrimary_=this.domPrimary_;a.allNodes_=this.allNodes_;return a};\nsre.Focus.factory=function(a,b,c,d){var e=function(h){return sre.WalkerUtil.getBySemanticId(d,h)},f=c.nodeDict;c=e(a);e=b.map(e);var g=b.map(function(h){return f[h]});a=new sre.Focus(g,f[a]);a.domNodes_=e;a.domPrimary_=c;a.allNodes_=sre.Focus.generateAllVisibleNodes_(b,e,f,d);return a};\nsre.Focus.generateAllVisibleNodes_=function(a,b,c,d){for(var e=function(m){return sre.WalkerUtil.getBySemanticId(d,m)},f=[],g=0,h=a.length;g<h;g++)if(b[g])f.push(b[g]);else{var k=c[a[g]];if(k){k=k.childNodes.map(function(m){return m.id.toString()});var l=k.map(e);f=f.concat(sre.Focus.generateAllVisibleNodes_(k,l,c,d))}}return f};sre.Levels=function(){this.level_=[]};sre.Levels.prototype.push=function(a){this.level_.push(a)};sre.Levels.prototype.pop=function(){return this.level_.pop()};sre.Levels.prototype.peek=function(){return this.level_[this.level_.length-1]||null};sre.Levels.prototype.indexOf=function(a){var b=this.peek();return b?b.indexOf(a):null};sre.Levels.prototype.find=function(a){var b=this.peek();if(!b)return null;for(var c=0,d=b.length;c<d;c++)if(a(b[c]))return b[c];return null};\nsre.Levels.prototype.get=function(a){var b=this.peek();return!b||0>a||a>=b.length?null:b[a]};sre.Levels.prototype.depth=function(){return this.level_.length};sre.Levels.prototype.clone=function(){var a=new sre.Levels;a.level_=this.level_.slice(0);return a};sre.Levels.prototype.toString=function(){for(var a=\"\",b=0,c;c=this.level_[b];b++)a+=\"\\n\"+c.map(function(d){return d.toString()});return a};sre.Walker=function(){};sre.Walker.prototype.isActive=function(){};sre.Walker.prototype.activate=function(){};sre.Walker.prototype.deactivate=function(){};sre.Walker.prototype.speech=function(){};sre.Walker.prototype.getXml=function(){};sre.Walker.prototype.getRebuilt=function(){};sre.Walker.prototype.getFocus=function(a){};sre.Walker.prototype.setFocus=function(a){};sre.Walker.prototype.getDepth=function(){};sre.Walker.prototype.move=function(a){};sre.Walker.prototype.update=function(a){};\nsre.Walker.move={UP:\"up\",DOWN:\"down\",LEFT:\"left\",RIGHT:\"right\",REPEAT:\"repeat\",DEPTH:\"depth\",ENTER:\"enter\",EXPAND:\"expand\",HOME:\"home\",SUMMARY:\"summary\",DETAIL:\"detail\",ROW:\"row\",CELL:\"cell\"};sre.Walker.STATE_={};sre.Walker.resetState=function(a){delete sre.Walker.STATE_[a]};sre.Walker.setState=function(a,b){sre.Walker.STATE_[a]=b};sre.Walker.getState=function(a){return sre.Walker.STATE_[a]};sre.AbstractWalker=function(a,b,c,d){this.node=a;this.node.id?this.id=this.node.id:this.node.hasAttribute(sre.AbstractWalker.SRE_ID_ATTR)?this.id=this.node.getAttribute(sre.AbstractWalker.SRE_ID_ATTR):(this.node.setAttribute(sre.AbstractWalker.SRE_ID_ATTR,sre.AbstractWalker.ID_COUNTER),this.id=sre.AbstractWalker.ID_COUNTER++);this.generator=b;this.highlighter=c;this.rootNode=sre.WalkerUtil.getSemanticRoot(a);this.rootId=this.rootNode.getAttribute(sre.EnrichMathml.Attribute.ID);this.xmlString_=d;this.focus_=\nthis.rebuilt_=this.xml_=null;this.keyMapping={};this.keyMapping[sre.EventUtil.KeyCode.UP]=goog.bind(this.up,this);this.keyMapping[sre.EventUtil.KeyCode.DOWN]=goog.bind(this.down,this);this.keyMapping[sre.EventUtil.KeyCode.RIGHT]=goog.bind(this.right,this);this.keyMapping[sre.EventUtil.KeyCode.LEFT]=goog.bind(this.left,this);this.keyMapping[sre.EventUtil.KeyCode.TAB]=goog.bind(this.repeat,this);this.keyMapping[sre.EventUtil.KeyCode.DASH]=goog.bind(this.expand,this);this.keyMapping[sre.EventUtil.KeyCode.SPACE]=\ngoog.bind(this.depth,this);this.keyMapping[sre.EventUtil.KeyCode.HOME]=goog.bind(this.home,this);this.keyMapping[sre.EventUtil.KeyCode.X]=goog.bind(this.summary,this);this.keyMapping[sre.EventUtil.KeyCode.Z]=goog.bind(this.detail,this);this.keyMapping[sre.EventUtil.KeyCode.V]=goog.bind(this.virtualize,this);this.keyMapping[sre.EventUtil.KeyCode.P]=goog.bind(this.previous,this);this.keyMapping[sre.EventUtil.KeyCode.U]=goog.bind(this.undo,this);this.keyMapping[sre.EventUtil.KeyCode.LESS]=goog.bind(this.previousRules,\nthis);this.keyMapping[sre.EventUtil.KeyCode.GREATER]=goog.bind(this.nextRules,this);this.active_=!1;this.moved=sre.Walker.move.ENTER;this.cursors=[]};sre.AbstractWalker.prototype.getXml=function(){this.xml_||(this.xml_=sre.DomUtil.parseInput(this.xmlString_));return this.xml_};sre.AbstractWalker.prototype.getRebuilt=function(){this.rebuilt_||(this.rebuilt_=this.rebuildStree());return this.rebuilt_};sre.AbstractWalker.ID_COUNTER=0;sre.AbstractWalker.SRE_ID_ATTR=\"sre-explorer-id\";\nsre.AbstractWalker.prototype.isActive=function(){return this.active_};sre.AbstractWalker.prototype.toggleActive_=function(){this.active_=!this.active_};sre.AbstractWalker.prototype.activate=function(){this.isActive()||(this.generator.start(),this.toggleActive_())};sre.AbstractWalker.prototype.deactivate=function(){this.isActive()&&(sre.Walker.setState(this.id,this.primaryId()),this.generator.end(),this.toggleActive_())};\nsre.AbstractWalker.prototype.getFocus=function(a){this.focus_||(this.focus_=sre.Focus.factory(this.rootId,[this.rootId],this.getRebuilt(),this.node));a&&this.updateFocus();return this.focus_};sre.AbstractWalker.prototype.setFocus=function(a){this.focus_=a};sre.AbstractWalker.prototype.getDepth=function(){return this.levels.depth()-1};sre.AbstractWalker.prototype.isSpeech=function(){return this.generator.modality===sre.EnrichMathml.Attribute.SPEECH};\nsre.AbstractWalker.prototype.speech=function(){var a=this.getFocus().getDomNodes();if(!a.length)return\"\";var b=this.specialMove();if(null!==b)return b;switch(this.moved){case sre.Walker.move.DEPTH:return this.depth_();case sre.Walker.move.SUMMARY:return this.summary_();case sre.Walker.move.DETAIL:return this.detail_();default:b=[];for(var c=this.getFocus().getSemanticNodes(),d=0,e=a.length;d<e;d++){var f=a[d],g=c[d];b.push(f?this.generator.getSpeech(f,this.getXml()):sre.SpeechGeneratorUtil.retrieveSpeech(g))}return this.mergePrefix_(b)}};\nsre.AbstractWalker.prototype.mergePrefix_=function(a,b){b=b||[];var c=this.isSpeech()?this.prefix_():\"\",d=sre.AuralRendering.getInstance();c&&a.unshift(c);return d.finalize(d.merge(b.concat(a)))};sre.AbstractWalker.prototype.prefix_=function(){var a=this.getFocus().getDomNodes(),b=this.getFocus().getSemanticNodes();return a[0]?sre.WalkerUtil.getAttribute(a[0],sre.EnrichMathml.Attribute.PREFIX):sre.SpeechGeneratorUtil.retrievePrefix(b[0])};\nsre.AbstractWalker.prototype.move=function(a){a=this.keyMapping[a];if(!a)return null;a=a();if(!a||a===this.getFocus())return!1;this.setFocus(a);this.moved===sre.Walker.move.HOME&&(this.levels=this.initLevels());return!0};sre.AbstractWalker.prototype.up=function(){this.moved=sre.Walker.move.UP;return this.getFocus()};sre.AbstractWalker.prototype.down=function(){this.moved=sre.Walker.move.DOWN;return this.getFocus()};sre.AbstractWalker.prototype.left=function(){this.moved=sre.Walker.move.LEFT;return this.getFocus()};\nsre.AbstractWalker.prototype.right=function(){this.moved=sre.Walker.move.RIGHT;return this.getFocus()};sre.AbstractWalker.prototype.repeat=function(){this.moved=sre.Walker.move.REPEAT;return this.getFocus().clone()};sre.AbstractWalker.prototype.depth=function(){this.moved=this.isSpeech()?sre.Walker.move.DEPTH:sre.Walker.move.REPEAT;return this.getFocus().clone()};\nsre.AbstractWalker.prototype.depth_=function(){var a=sre.Grammar.getInstance().getParameter(\"depth\");sre.Grammar.getInstance().setParameter(\"depth\",!0);var b=this.getFocus().getDomPrimary();b=this.expandable(b)&&[sre.Messages.NAVIGATE.EXPANDABLE]||this.collapsible(b)&&[sre.Messages.NAVIGATE.COLLAPSIBLE]||[];var c=[sre.AuralRendering.getInstance().markup([new sre.AuditoryDescription({text:sre.Messages.NAVIGATE.LEVEL+\" \"+this.getDepth(),personality:{}})])],d=this.getFocus().getSemanticNodes();d=sre.SpeechGeneratorUtil.retrievePrefix(d[0]);\nvar e=sre.AuralRendering.getInstance();d&&c.push(d);sre.Grammar.getInstance().setParameter(\"depth\",a);return e.finalize(e.merge(c.concat(b)))};sre.AbstractWalker.prototype.home=function(){this.moved=sre.Walker.move.HOME;return sre.Focus.factory(this.rootId,[this.rootId],this.getRebuilt(),this.node)};sre.AbstractWalker.prototype.getBySemanticId=function(a){return sre.WalkerUtil.getBySemanticId(this.node,a)};sre.AbstractWalker.prototype.primaryId=function(){return this.getFocus().getSemanticPrimary().id.toString()};\nsre.AbstractWalker.prototype.expand=function(){var a=this.getFocus().getDomPrimary();a=this.actionable_(a);if(!a)return this.getFocus();this.moved=sre.Walker.move.EXPAND;a.dispatchEvent(new Event(\"click\"));return this.getFocus().clone()};sre.AbstractWalker.prototype.actionable_=function(a){return a&&a.parentNode&&this.highlighter.isMactionNode(a.parentNode)?a.parentNode:null};sre.AbstractWalker.prototype.expandable=function(a){return!!this.actionable_(a)&&0===a.childNodes.length};\nsre.AbstractWalker.prototype.collapsible=function(a){return!!this.actionable_(a)&&0<a.childNodes.length};sre.AbstractWalker.prototype.restoreState=function(){if(this.highlighter){var a=sre.Walker.getState(this.id);if(a){var b=this.getRebuilt().nodeDict[a];for(a=[];b;)a.push(b.id),b=b.parent;for(a.pop();0<a.length;){this.down();b=a.pop();b=this.findFocusOnLevel(b);if(!b)break;this.setFocus(b)}this.moved=sre.Walker.move.ENTER}}};\nsre.AbstractWalker.prototype.updateFocus=function(){this.setFocus(sre.Focus.factory(this.getFocus().getSemanticPrimary().id.toString(),this.getFocus().getSemanticNodes().map(function(a){return a.id}),this.getRebuilt(),this.node))};sre.AbstractWalker.prototype.findFocusOnLevel=goog.abstractMethod;sre.AbstractWalker.prototype.initLevels=goog.abstractMethod;\nsre.AbstractWalker.prototype.rebuildStree=function(){var a=new sre.RebuildStree(this.getXml());this.rootId=a.stree.root.id.toString();this.generator.setRebuilt(a);this.focus_=sre.Focus.factory(this.rootId,[this.rootId],a,this.node);this.levels=this.initLevels();sre.SpeechGeneratorUtil.connectMactions(this.node,this.getXml(),a.xml);return a};\nsre.AbstractWalker.prototype.previousLevel=function(){var a=this.getFocus().getDomPrimary();return a?sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.PARENT):this.getFocus().getSemanticPrimary().parent.id.toString()};\nsre.AbstractWalker.prototype.nextLevel=function(){var a=this.getFocus().getDomPrimary();if(a){var b=sre.WalkerUtil.splitAttribute(sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.CHILDREN)),c=sre.WalkerUtil.splitAttribute(sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.CONTENT)),d=sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.TYPE);a=sre.WalkerUtil.getAttribute(a,sre.EnrichMathml.Attribute.ROLE);return this.combineContentChildren(d,a,c,b)}c=function(e){return e.id.toString()};\nd=this.getRebuilt().nodeDict[this.primaryId()];b=d.childNodes.map(c);c=d.contentNodes.map(c);return 0===b.length?[]:this.combineContentChildren(d.type,d.role,c,b)};sre.AbstractWalker.prototype.combineContentChildren=goog.abstractMethod;sre.AbstractWalker.prototype.singletonFocus=function(a){return this.focusFromId(a,[a])};sre.AbstractWalker.prototype.focusFromId=function(a,b){return sre.Focus.factory(a,b,this.getRebuilt(),this.node)};\nsre.AbstractWalker.prototype.summary=function(){this.moved=this.isSpeech()?sre.Walker.move.SUMMARY:sre.Walker.move.REPEAT;return this.getFocus().clone()};sre.AbstractWalker.prototype.summary_=function(){var a=this.getFocus().getSemanticPrimary().id.toString();a=this.getRebuilt().xml.getAttribute(\"id\")===a?this.getRebuilt().xml:sre.DomUtil.querySelectorAllByAttrValue(this.getRebuilt().xml,\"id\",a)[0];a=sre.SpeechGeneratorUtil.retrieveSummary(a);return this.mergePrefix_([a])};\nsre.AbstractWalker.prototype.detail=function(){this.moved=this.isSpeech()?sre.Walker.move.DETAIL:sre.Walker.move.REPEAT;return this.getFocus().clone()};\nsre.AbstractWalker.prototype.detail_=function(){var a=this.getFocus().getSemanticPrimary().id.toString();a=this.getRebuilt().xml.getAttribute(\"id\")===a?this.getRebuilt().xml:sre.DomUtil.querySelectorAllByAttrValue(this.getRebuilt().xml,\"id\",a)[0];var b=a.getAttribute(\"alternative\");a.removeAttribute(\"alternative\");var c=sre.SpeechGeneratorUtil.computeSpeechWithoutCache(a);c=sre.AuralRendering.getInstance().markup(c);c=this.mergePrefix_([c]);a.setAttribute(\"alternative\",b);return c};\nsre.AbstractWalker.prototype.specialMove=function(){return null};sre.AbstractWalker.prototype.virtualize=function(a){this.cursors.push({focus:this.getFocus(),levels:this.levels,undo:a||!this.cursors.length});this.levels=this.levels.clone();return this.getFocus().clone()};sre.AbstractWalker.prototype.previous=function(){var a=this.cursors.pop();if(!a)return this.getFocus();this.levels=a.levels;return a.focus};\nsre.AbstractWalker.prototype.undo=function(){do var a=this.cursors.pop();while(a&&!a.undo);if(!a)return this.getFocus();this.levels=a.levels;return a.focus};sre.AbstractWalker.prototype.update=function(a){this.generator.setOptions(a);sre.System.getInstance().setupEngine(a);sre.SpeechGeneratorFactory.generator(\"Tree\").getSpeech(this.node,this.getXml())};\nsre.AbstractWalker.prototype.nextRules=function(){var a=this.generator.getOptions();if(\"speech\"!==a.modality)return this.getFocus();sre.Engine.DOMAIN_TO_STYLES[a.domain]=a.style;a.domain=\"mathspeak\"===a.domain?\"clearspeak\":\"mathspeak\";a.style=sre.Engine.DOMAIN_TO_STYLES[a.domain];this.update(a);this.moved=sre.Walker.move.REPEAT;return this.getFocus().clone()};\nsre.AbstractWalker.prototype.nextStyle=function(a,b){if(\"mathspeak\"===a){a=[\"default\",\"brief\",\"sbrief\"];var c=a.indexOf(b);return-1===c?b:c>=a.length-1?a[0]:a[c+1]}if(\"clearspeak\"===a){var d=sre.ClearspeakPreferences.getLocalePreferences().en;if(!d)return\"default\";a=sre.ClearspeakPreferences.relevantPreferences(this.getFocus().getSemanticPrimary());c=sre.ClearspeakPreferences.findPreference(b,a);d=d[a].map(function(e){return e.split(\"_\")[1]});c=d.indexOf(c);return-1===c?b:sre.ClearspeakPreferences.addPreference(b,\na,c>=d.length-1?d[0]:d[c+1])}return b};sre.AbstractWalker.prototype.previousRules=function(){var a=this.generator.getOptions();if(\"speech\"!==a.modality)return this.getFocus();a.style=this.nextStyle(a.domain,a.style);this.update(a);this.moved=sre.Walker.move.REPEAT;return this.getFocus().clone()};sre.DummyWalker=function(a,b,c,d){sre.AbstractWalker.call(this,a,b,c,d)};goog.inherits(sre.DummyWalker,sre.AbstractWalker);sre.DummyWalker.prototype.up=function(){};sre.DummyWalker.prototype.down=function(){};sre.DummyWalker.prototype.left=function(){};sre.DummyWalker.prototype.right=function(){};sre.DummyWalker.prototype.repeat=function(){};sre.DummyWalker.prototype.depth=function(){};sre.DummyWalker.prototype.home=function(){};sre.DummyWalker.prototype.getDepth=function(){return 0};\nsre.DummyWalker.prototype.initLevels=function(){};sre.SemanticWalker=function(a,b,c,d){sre.AbstractWalker.call(this,a,b,c,d);this.levels=null;this.restoreState()};goog.inherits(sre.SemanticWalker,sre.AbstractWalker);sre.SemanticWalker.prototype.initLevels=function(){var a=new sre.Levels;a.push([this.getFocus()]);return a};\nsre.SemanticWalker.prototype.up=function(){sre.SemanticWalker.superClass_.up.call(this);var a=this.previousLevel();if(!a)return null;this.levels.pop();return this.levels.find(function(b){return b.getSemanticNodes().some(function(c){return c.id.toString()===a})})};sre.SemanticWalker.prototype.down=function(){sre.SemanticWalker.superClass_.down.call(this);var a=this.nextLevel();if(0===a.length)return null;this.levels.push(a);return a[0]};\nsre.SemanticWalker.prototype.combineContentChildren=function(a,b,c,d){switch(a){case sre.SemanticAttr.Type.RELSEQ:case sre.SemanticAttr.Type.INFIXOP:case sre.SemanticAttr.Type.MULTIREL:return this.makePairList(d,c);case sre.SemanticAttr.Type.PREFIXOP:return[this.focusFromId(d[0],c.concat(d))];case sre.SemanticAttr.Type.POSTFIXOP:return[this.focusFromId(d[0],d.concat(c))];case sre.SemanticAttr.Type.MATRIX:case sre.SemanticAttr.Type.VECTOR:case sre.SemanticAttr.Type.FENCED:return[this.focusFromId(d[0],\n[c[0],d[0],c[1]])];case sre.SemanticAttr.Type.CASES:return[this.focusFromId(d[0],[c[0],d[0]])];case sre.SemanticAttr.Type.PUNCTUATED:return b===sre.SemanticAttr.Role.TEXT?d.map(goog.bind(this.singletonFocus,this)):d.length===c.length?c.map(goog.bind(this.singletonFocus,this)):this.combinePunctuations(d,c,[],[]);case sre.SemanticAttr.Type.APPL:return[this.focusFromId(d[0],[d[0],c[0]]),this.singletonFocus(d[1])];case sre.SemanticAttr.Type.ROOT:return[this.singletonFocus(d[1]),this.singletonFocus(d[0])];\ndefault:return d.map(goog.bind(this.singletonFocus,this))}};sre.SemanticWalker.prototype.combinePunctuations=function(a,b,c,d){if(0===a.length)return d;var e=a.shift(),f=b.shift();if(e===f)return c.push(f),this.combinePunctuations(a,b,c,d);b.unshift(f);c.push(e);if(a.length===b.length)return d.push(this.focusFromId(e,c.concat(b))),d;d.push(this.focusFromId(e,c));return this.combinePunctuations(a,b,[],d)};\nsre.SemanticWalker.prototype.makePairList=function(a,b){if(0===a.length)return[];if(1===a.length)return[this.singletonFocus(a[0])];for(var c=[this.singletonFocus(a.shift())],d=0,e=a.length;d<e;d++)c.push(this.focusFromId(a[d],[b[d],a[d]]));return c};sre.SemanticWalker.prototype.left=function(){sre.SemanticWalker.superClass_.left.call(this);var a=this.levels.indexOf(this.getFocus());return null===a?null:(a=this.levels.get(a-1))?a:null};\nsre.SemanticWalker.prototype.right=function(){sre.SemanticWalker.superClass_.right.call(this);var a=this.levels.indexOf(this.getFocus());return null===a?null:(a=this.levels.get(a+1))?a:null};sre.SemanticWalker.prototype.findFocusOnLevel=function(a){return this.levels.find(function(b){return b.getSemanticPrimary().id===a})};sre.SyntaxWalker=function(a,b,c,d){sre.AbstractWalker.call(this,a,b,c,d);this.levels=null;this.restoreState()};goog.inherits(sre.SyntaxWalker,sre.AbstractWalker);sre.SyntaxWalker.prototype.initLevels=function(){var a=new sre.Levels;a.push([this.primaryId()]);return a};sre.SyntaxWalker.prototype.up=function(){sre.SyntaxWalker.superClass_.up.call(this);var a=this.previousLevel();if(!a)return null;this.levels.pop();return this.singletonFocus(a)};\nsre.SyntaxWalker.prototype.down=function(){sre.SyntaxWalker.superClass_.down.call(this);var a=this.nextLevel();if(0===a.length)return null;var b=this.singletonFocus(a[0]);b&&this.levels.push(a);return b};\nsre.SyntaxWalker.prototype.combineContentChildren=function(a,b,c,d){switch(a){case sre.SemanticAttr.Type.RELSEQ:case sre.SemanticAttr.Type.INFIXOP:case sre.SemanticAttr.Type.MULTIREL:return sre.BaseUtil.interleaveLists(d,c);case sre.SemanticAttr.Type.PREFIXOP:return c.concat(d);case sre.SemanticAttr.Type.POSTFIXOP:return d.concat(c);case sre.SemanticAttr.Type.MATRIX:case sre.SemanticAttr.Type.VECTOR:case sre.SemanticAttr.Type.FENCED:return d.unshift(c[0]),d.push(c[1]),d;case sre.SemanticAttr.Type.CASES:return d.unshift(c[0]),\nd;case sre.SemanticAttr.Type.PUNCTUATED:return b===sre.SemanticAttr.Role.TEXT?sre.BaseUtil.interleaveLists(d,c):d;case sre.SemanticAttr.Type.APPL:return[d[0],c[0],d[1]];case sre.SemanticAttr.Type.ROOT:return[d[1],d[0]];default:return d}};sre.SyntaxWalker.prototype.left=function(){sre.SyntaxWalker.superClass_.left.call(this);var a=this.levels.indexOf(this.primaryId());return null===a?null:(a=this.levels.get(a-1))?this.singletonFocus(a):null};\nsre.SyntaxWalker.prototype.right=function(){sre.SyntaxWalker.superClass_.right.call(this);var a=this.levels.indexOf(this.primaryId());return null===a?null:(a=this.levels.get(a+1))?this.singletonFocus(a):null};sre.SyntaxWalker.prototype.findFocusOnLevel=function(a){return this.singletonFocus(a.toString())};sre.TableWalker=function(a,b,c,d){sre.SyntaxWalker.call(this,a,b,c,d);this.modifier=!1;this.keyMapping[sre.EventUtil.KeyCode[\"0\"]]=goog.bind(this.jumpCell,this);this.keyMapping[sre.EventUtil.KeyCode[\"1\"]]=goog.bind(this.jumpCell,this);this.keyMapping[sre.EventUtil.KeyCode[\"2\"]]=goog.bind(this.jumpCell,this);this.keyMapping[sre.EventUtil.KeyCode[\"3\"]]=goog.bind(this.jumpCell,this);this.keyMapping[sre.EventUtil.KeyCode[\"4\"]]=goog.bind(this.jumpCell,this);this.keyMapping[sre.EventUtil.KeyCode[\"5\"]]=\ngoog.bind(this.jumpCell,this);this.keyMapping[sre.EventUtil.KeyCode[\"6\"]]=goog.bind(this.jumpCell,this);this.keyMapping[sre.EventUtil.KeyCode[\"7\"]]=goog.bind(this.jumpCell,this);this.keyMapping[sre.EventUtil.KeyCode[\"8\"]]=goog.bind(this.jumpCell,this);this.keyMapping[sre.EventUtil.KeyCode[\"9\"]]=goog.bind(this.jumpCell,this);this.key_=null;this.row_=0;this.firstJump=this.currentTable_=null};goog.inherits(sre.TableWalker,sre.SyntaxWalker);\nsre.TableWalker.prototype.move=function(a){this.key_=a;a=sre.TableWalker.superClass_.move.call(this,a);this.modifier=!1;return a};sre.TableWalker.prototype.up=function(){this.moved=sre.Walker.move.UP;return this.eligibleCell_()?this.verticalMove_(!1):sre.TableWalker.superClass_.up.call(this)};sre.TableWalker.prototype.down=function(){this.moved=sre.Walker.move.DOWN;return this.eligibleCell_()?this.verticalMove_(!0):sre.TableWalker.superClass_.down.call(this)};\nsre.TableWalker.ELIGIBLE_CELL_ROLES=[sre.SemanticAttr.Role.DETERMINANT,sre.SemanticAttr.Role.ROWVECTOR,sre.SemanticAttr.Role.BINOMIAL,sre.SemanticAttr.Role.SQUAREMATRIX,sre.SemanticAttr.Role.MULTILINE,sre.SemanticAttr.Role.MATRIX,sre.SemanticAttr.Role.VECTOR,sre.SemanticAttr.Role.CASES,sre.SemanticAttr.Role.TABLE];sre.TableWalker.ELIGIBLE_TABLE_TYPES=[sre.SemanticAttr.Type.MULTILINE,sre.SemanticAttr.Type.MATRIX,sre.SemanticAttr.Type.VECTOR,sre.SemanticAttr.Type.CASES,sre.SemanticAttr.Type.TABLE];\nsre.TableWalker.prototype.eligibleCell_=function(){var a=this.getFocus().getSemanticPrimary();return this.modifier&&a.type===sre.SemanticAttr.Type.CELL&&-1!==sre.TableWalker.ELIGIBLE_CELL_ROLES.indexOf(a.role)};\nsre.TableWalker.prototype.verticalMove_=function(a){var b=this.previousLevel();if(!b)return null;var c=this.getFocus(),d=this.levels.indexOf(this.primaryId()),e=this.levels.pop();b=this.levels.indexOf(b);a=this.levels.get(a?b+1:b-1);if(!a)return this.levels.push(e),null;this.setFocus(this.singletonFocus(a));a=this.nextLevel();if(!a[d])return this.setFocus(c),this.levels.push(e),null;this.levels.push(a);return this.singletonFocus(a[d])};\nsre.TableWalker.prototype.jumpCell=function(){if(!this.isInTable_()||null===this.key_)return this.getFocus();if(this.moved===sre.Walker.move.ROW){this.moved=sre.Walker.move.CELL;var a=this.key_-sre.EventUtil.KeyCode[\"0\"];return this.isLegalJump_(this.row_,a)?this.jumpCell_(this.row_,a):this.getFocus()}a=this.key_-sre.EventUtil.KeyCode[\"0\"];if(a>this.currentTable_.childNodes.length)return this.getFocus();this.row_=a;this.moved=sre.Walker.move.ROW;return this.getFocus().clone()};\nsre.TableWalker.prototype.jumpCell_=function(a,b){this.firstJump?this.virtualize(!1):(this.firstJump=this.getFocus(),this.virtualize(!0));var c=this.currentTable_.id.toString();do var d=this.levels.pop();while(-1===d.indexOf(c));this.levels.push(d);this.setFocus(this.singletonFocus(c));this.levels.push(this.nextLevel());a=this.currentTable_.childNodes[a-1];this.setFocus(this.singletonFocus(a.id.toString()));this.levels.push(this.nextLevel());return this.singletonFocus(a.childNodes[b-1].id.toString())};\nsre.TableWalker.prototype.isLegalJump_=function(a,b){var c=sre.DomUtil.querySelectorAllByAttrValue(this.getRebuilt().xml,\"id\",this.currentTable_.id.toString())[0];if(!c||c.hasAttribute(\"alternative\"))return!1;a=this.currentTable_.childNodes[a-1];if(!a)return!1;c=sre.DomUtil.querySelectorAllByAttrValue(c,\"id\",a.id.toString())[0];return!c||c.hasAttribute(\"alternative\")?!1:!(!a||!a.childNodes[b-1])};\nsre.TableWalker.prototype.isInTable_=function(){for(var a=this.getFocus().getSemanticPrimary();a;){if(-1!==sre.TableWalker.ELIGIBLE_TABLE_TYPES.indexOf(a.type))return this.currentTable_=a,!0;a=a.parent}return!1};sre.TableWalker.prototype.undo=function(){var a=sre.TableWalker.superClass_.undo.call(this);a===this.firstJump&&(this.firstJump=null);return a};sre.WalkerFactory={};sre.WalkerFactory.walker=function(a,b,c,d,e){return new (sre.WalkerFactory.walkerMapping_[a.toLowerCase()]||sre.WalkerFactory.walkerMapping_.dummy)(b,c,d,e)};sre.WalkerFactory.walkerMapping_={dummy:sre.DummyWalker,semantic:sre.SemanticWalker,syntax:sre.SyntaxWalker,table:sre.TableWalker};sre.ProcessorFactory={};sre.ProcessorFactory.PROCESSORS_={};sre.ProcessorFactory.get_=function(a){var b=sre.ProcessorFactory.PROCESSORS_[a.toLowerCase()];if(!b)throw new sre.Engine.Error(\"Unknown processor \"+a);return b};sre.ProcessorFactory.process=function(a,b){return sre.ProcessorFactory.get_(a).processor(b)};sre.ProcessorFactory.print=function(a,b){a=sre.ProcessorFactory.get_(a);return sre.Engine.getInstance().pprint?a.pprint(b):a.print(b)};\nsre.ProcessorFactory.output=function(a,b){a=sre.ProcessorFactory.get_(a);b=a.processor(b);return sre.Engine.getInstance().pprint?a.pprint(b):a.print(b)};sre.ProcessorFactory.keypress=function(a,b){a=sre.ProcessorFactory.get_(a);b=a.key?a.key(b):b;b=a.processor(b);return sre.Engine.getInstance().pprint?a.pprint(b):a.print(b)};\nsre.Processor=function(a,b){this.name=a;this.processor=b.processor;this.print=b.print||sre.Processor.stringify_;this.pprint=b.pprint||this.print;sre.ProcessorFactory.PROCESSORS_[this.name]=this};sre.KeyProcessor=function(a,b){sre.Processor.call(this,a,b);this.key=b.key||sre.KeyProcessor.getKey_};goog.inherits(sre.KeyProcessor,sre.Processor);sre.KeyProcessor.getKey_=function(a){return\"string\"===typeof a?sre.EventUtil.KeyCode[a.toUpperCase()]:a};\nsre.Processor.LocalState_={walker:null,speechGenerator:null,highlighter:null};sre.Processor.stringify_=function(a){return a?a.toString():a};new sre.Processor(\"semantic\",{processor:function(a){a=sre.DomUtil.parseInput(a);return sre.Semantic.xmlTree(a)},pprint:function(a){return sre.DomUtil.formatXml(a.toString())}});\nnew sre.Processor(\"speech\",{processor:function(a){a=sre.DomUtil.parseInput(a);a=sre.Semantic.xmlTree(a);a=sre.SpeechGeneratorUtil.computeSpeech(a);var b=sre.AuralRendering.getInstance();return b.finalize(b.markup(a))},pprint:function(a){a=a.toString();return sre.AuralRendering.ofType(sre.XmlRenderer)?sre.DomUtil.formatXml(a):a}});\nnew sre.Processor(\"json\",{processor:function(a){a=sre.DomUtil.parseInput(a,sre.Engine.Error);return sre.Semantic.getTree(a).toJson()},print:function(a){return JSON.stringify(a)},pprint:function(a){return JSON.stringify(a,null,2)}});new sre.Processor(\"description\",{processor:function(a){a=sre.DomUtil.parseInput(a);a=sre.Semantic.xmlTree(a);return sre.SpeechGeneratorUtil.computeSpeech(a)},print:function(a){return JSON.stringify(a)},pprint:function(a){return JSON.stringify(a,null,2)}});\nnew sre.Processor(\"enriched\",{processor:function(a){a=sre.Enrich.semanticMathmlSync(a);var b=sre.WalkerUtil.getSemanticRoot(a);switch(sre.Engine.getInstance().speech){case sre.Engine.Speech.SHALLOW:var c=sre.SpeechGeneratorFactory.generator(\"Adhoc\");c.getSpeech(b,a);break;case sre.Engine.Speech.DEEP:c=sre.SpeechGeneratorFactory.generator(\"Tree\"),c.getSpeech(b,a)}return a},pprint:function(a){return sre.DomUtil.formatXml(a.toString())}});\nnew sre.Processor(\"walker\",{processor:function(a){var b=sre.SpeechGeneratorFactory.generator(\"Node\");sre.Processor.LocalState_.speechGenerator=b;sre.Processor.LocalState_.highlighter=sre.HighlighterFactory.highlighter({color:\"black\"},{color:\"white\"},{renderer:\"NativeMML\"});a=sre.ProcessorFactory.process(\"enriched\",a);var c=sre.ProcessorFactory.print(\"enriched\",a);sre.Processor.LocalState_.walker=sre.WalkerFactory.walker(sre.Engine.getInstance().walker,a,b,sre.Processor.LocalState_.highlighter,c);\nreturn sre.Processor.LocalState_.walker},print:function(a){return sre.Processor.LocalState_.walker.speech()}});new sre.KeyProcessor(\"move\",{processor:function(a){return sre.Processor.LocalState_.walker?!1===sre.Processor.LocalState_.walker.move(a)?sre.AuralRendering.getInstance().error(a):sre.Processor.LocalState_.walker.speech():null}});sre.System=function(){this.version=sre.Variables.VERSION};goog.addSingletonGetter(sre.System);\nsre.System.prototype.setupEngine=function(a){var b=sre.Engine.getInstance(),c=function(d){b[d]=a[d]||b[d]};c(\"mode\");sre.System.prototype.configBlocks_(a);sre.Engine.BINARY_FEATURES.forEach(function(d){\"undefined\"!==typeof a[d]&&(b[d]=!!a[d])});sre.Engine.STRING_FEATURES.forEach(c);a.json&&(sre.SystemExternal.jsonPath=sre.BaseUtil.makePath(a.json));a.xpath&&(sre.SystemExternal.WGXpath=a.xpath);b.setupBrowsers();b.ruleSets=a.rules?a.rules:sre.SpeechRuleStores.availableSets();sre.SpeechRuleEngine.getInstance().parameterize(b.ruleSets);\nb.setDynamicCstr();sre.L10n.setLocale()};sre.System.prototype.configBlocks_=function(a){if(!sre.Engine.getInstance().config&&sre.Engine.getInstance().mode===sre.Engine.Mode.HTTP){sre.Engine.getInstance().config=!0;for(var b=document.documentElement.querySelectorAll('script[type=\"text/x-sre-config\"]'),c=0,d=b.length;c<d;c++)try{var e=b[c].innerHTML,f=JSON.parse(e),g;for(g in f)a[g]=f[g]}catch(h){sre.Debugger.getInstance().output(\"Illegal configuration \",e)}}};\nsre.System.setAsync=function(){sre.Engine.isReady()||setTimeout(sre.System.setAsync,500);sre.System.getInstance().setupEngine({mode:sre.Engine.Mode.ASYNC})};sre.System.prototype.engineSetup=function(){var a=[\"mode\"].concat(sre.Engine.STRING_FEATURES,sre.Engine.BINARY_FEATURES),b=sre.Engine.getInstance(),c={};a.forEach(function(d){c[d]=b[d]});c.json=sre.SystemExternal.jsonPath;c.xpath=sre.SystemExternal.WGXpath;c.rules=b.ruleSets.slice();return c};sre.System.prototype.engineReady=function(){return sre.Engine.isReady()};\nsre.System.prototype.toSpeech=function(a){return sre.System.getInstance().processString(\"speech\",a)};sre.System.prototype.toSemantic=function(a){return sre.System.getInstance().processString(\"semantic\",a)};sre.System.prototype.toJson=function(a){return sre.System.getInstance().processString(\"json\",a)};sre.System.prototype.toDescription=function(a){return sre.System.getInstance().processString(\"description\",a)};\nsre.System.prototype.toEnriched=function(a){return sre.System.getInstance().processString(\"enriched\",a)};sre.System.prototype.processString=function(a,b){return sre.ProcessorFactory.process(a,b)};sre.System.prototype.fileToSpeech=function(a,b){sre.System.getInstance().processFile(\"speech\",a,b)};sre.System.prototype.fileToSemantic=function(a,b){sre.System.getInstance().processFile(\"semantic\",a,b)};sre.System.prototype.fileToJson=function(a,b){sre.System.getInstance().processFile(\"json\",a,b)};\nsre.System.prototype.fileToDescription=function(a,b){sre.System.getInstance().processFile(\"description\",a,b)};sre.System.prototype.fileToEnriched=function(a,b){sre.System.getInstance().processFile(\"enriched\",a,b)};sre.System.prototype.processFile=function(a,b,c){sre.Engine.isReady()?sre.Engine.getInstance().mode===sre.Engine.Mode.SYNC?this.processFileSync_(a,b,c):this.processFileAsync_(a,b,c):setTimeout(goog.bind(function(){this.processFile(a,b,c)},this),100)};\nsre.System.prototype.inputFileSync_=function(a){try{var b=sre.SystemExternal.fs.readFileSync(a,{encoding:\"utf8\"})}catch(c){throw new sre.Engine.Error(\"Can not open file: \"+a);}return b};sre.System.prototype.processFileSync_=function(a,b,c){b=sre.System.getInstance().inputFileSync_(b);a=sre.ProcessorFactory.output(a,b);if(c)try{sre.SystemExternal.fs.writeFileSync(c,a)}catch(d){throw new sre.Engine.Error(\"Can not write to file: \"+c);}else console.info(a)};\nsre.System.prototype.inputFileAsync_=function(a,b){sre.SystemExternal.fs.readFile(a,{encoding:\"utf8\"},goog.bind(function(c,d){if(c)throw new sre.Engine.Error(\"Can not open file: \"+a);b(d)},this))};sre.System.prototype.processFileAsync_=function(a,b,c){sre.System.getInstance().inputFileAsync_(b,goog.bind(function(d){d=sre.ProcessorFactory.output(a,d);c?sre.SystemExternal.fs.writeFile(c,d,function(e){if(e)throw new sre.Engine.Error(\"Can not write to file: \"+c);}):console.info(d)},this))};\nsre.System.prototype.walk=function(a){return sre.ProcessorFactory.output(\"walker\",a)};sre.System.prototype.move=function(a){return sre.ProcessorFactory.keypress(\"move\",a)};sre.Browser={};sre.System.getInstance().setupEngine({mode:sre.Engine.Mode.HTTP,domain:\"mathspeak\",style:\"default\"});var SRE=sre.System.getInstance();\n\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/tex-mml-chtml.js",
    "content": "(function () {\n    \"use strict\";\n    var __webpack_modules__ = {\n            351: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    a =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    l =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AssistiveMmlHandler =\n                        e.AssistiveMmlMathDocumentMixin =\n                        e.AssistiveMmlMathItemMixin =\n                        e.LimitedMmlVisitor =\n                            void 0);\n                var c = r(4474),\n                    u = r(9259),\n                    p = r(7233),\n                    h = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.getAttributes = function (e) {\n                                return t.prototype.getAttributes\n                                    .call(this, e)\n                                    .replace(/ ?id=\".*?\"/, \"\");\n                            }),\n                            e\n                        );\n                    })(u.SerializedMmlVisitor);\n                function f(t) {\n                    return (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.assistiveMml = function (t, e) {\n                                if (\n                                    (void 0 === e && (e = !1),\n                                    !(this.state() >= c.STATE.ASSISTIVEMML))\n                                ) {\n                                    if (\n                                        !this.isEscaped &&\n                                        (t.options.enableAssistiveMml || e)\n                                    ) {\n                                        var r = t.adaptor,\n                                            n = t\n                                                .toMML(this.root)\n                                                .replace(/\\n */g, \"\")\n                                                .replace(/<!--.*?-->/g, \"\"),\n                                            o = r.firstChild(\n                                                r.body(r.parse(n, \"text/html\"))\n                                            ),\n                                            i = r.node(\n                                                \"mjx-assistive-mml\",\n                                                {\n                                                    unselectable: \"on\",\n                                                    display: this.display\n                                                        ? \"block\"\n                                                        : \"inline\",\n                                                },\n                                                [o]\n                                            );\n                                        r.setAttribute(\n                                            r.firstChild(this.typesetRoot),\n                                            \"aria-hidden\",\n                                            \"true\"\n                                        ),\n                                            r.setStyle(\n                                                this.typesetRoot,\n                                                \"position\",\n                                                \"relative\"\n                                            ),\n                                            r.append(this.typesetRoot, i);\n                                    }\n                                    this.state(c.STATE.ASSISTIVEMML);\n                                }\n                            }),\n                            e\n                        );\n                    })(t);\n                }\n                function d(t) {\n                    var e;\n                    return (\n                        (e = (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, a([], s(e), !1)) || this,\n                                    o = n.constructor,\n                                    i = o.ProcessBits;\n                                return (\n                                    i.has(\"assistive-mml\") ||\n                                        i.allocate(\"assistive-mml\"),\n                                    (n.visitor = new h(n.mmlFactory)),\n                                    (n.options.MathItem = f(\n                                        n.options.MathItem\n                                    )),\n                                    \"addStyles\" in n &&\n                                        n.addStyles(o.assistiveStyles),\n                                    n\n                                );\n                            }\n                            return (\n                                o(e, t),\n                                (e.prototype.toMML = function (t) {\n                                    return this.visitor.visitTree(t);\n                                }),\n                                (e.prototype.assistiveMml = function () {\n                                    var t, e;\n                                    if (\n                                        !this.processed.isSet(\"assistive-mml\")\n                                    ) {\n                                        try {\n                                            for (\n                                                var r = l(this.math),\n                                                    n = r.next();\n                                                !n.done;\n                                                n = r.next()\n                                            ) {\n                                                n.value.assistiveMml(this);\n                                            }\n                                        } catch (e) {\n                                            t = { error: e };\n                                        } finally {\n                                            try {\n                                                n &&\n                                                    !n.done &&\n                                                    (e = r.return) &&\n                                                    e.call(r);\n                                            } finally {\n                                                if (t) throw t.error;\n                                            }\n                                        }\n                                        this.processed.set(\"assistive-mml\");\n                                    }\n                                    return this;\n                                }),\n                                (e.prototype.state = function (e, r) {\n                                    return (\n                                        void 0 === r && (r = !1),\n                                        t.prototype.state.call(this, e, r),\n                                        e < c.STATE.ASSISTIVEMML &&\n                                            this.processed.clear(\n                                                \"assistive-mml\"\n                                            ),\n                                        this\n                                    );\n                                }),\n                                e\n                            );\n                        })(t)),\n                        (e.OPTIONS = i(i({}, t.OPTIONS), {\n                            enableAssistiveMml: !0,\n                            renderActions: (0, p.expandable)(\n                                i(i({}, t.OPTIONS.renderActions), {\n                                    assistiveMml: [c.STATE.ASSISTIVEMML],\n                                })\n                            ),\n                        })),\n                        (e.assistiveStyles = {\n                            \"mjx-assistive-mml\": {\n                                position: \"absolute !important\",\n                                top: \"0px\",\n                                left: \"0px\",\n                                clip: \"rect(1px, 1px, 1px, 1px)\",\n                                padding: \"1px 0px 0px 0px !important\",\n                                border: \"0px !important\",\n                                display: \"block !important\",\n                                width: \"auto !important\",\n                                overflow: \"hidden !important\",\n                                \"-webkit-touch-callout\": \"none\",\n                                \"-webkit-user-select\": \"none\",\n                                \"-khtml-user-select\": \"none\",\n                                \"-moz-user-select\": \"none\",\n                                \"-ms-user-select\": \"none\",\n                                \"user-select\": \"none\",\n                            },\n                            'mjx-assistive-mml[display=\"block\"]': {\n                                width: \"100% !important\",\n                            },\n                        }),\n                        e\n                    );\n                }\n                (e.LimitedMmlVisitor = h),\n                    (0, c.newState)(\"ASSISTIVEMML\", 153),\n                    (e.AssistiveMmlMathItemMixin = f),\n                    (e.AssistiveMmlMathDocumentMixin = d),\n                    (e.AssistiveMmlHandler = function (t) {\n                        return (t.documentClass = d(t.documentClass)), t;\n                    });\n            },\n            5282: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var r = new Map();\n                e.default = r;\n            },\n            5445: function (t, e, r) {\n                var n =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    o =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    i =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        n(e, t, r);\n                            return o(e, t), e;\n                        },\n                    s =\n                        (this && this.__awaiter) ||\n                        function (t, e, r, n) {\n                            return new (r || (r = Promise))(function (o, i) {\n                                function s(t) {\n                                    try {\n                                        l(n.next(t));\n                                    } catch (t) {\n                                        i(t);\n                                    }\n                                }\n                                function a(t) {\n                                    try {\n                                        l(n.throw(t));\n                                    } catch (t) {\n                                        i(t);\n                                    }\n                                }\n                                function l(t) {\n                                    var e;\n                                    t.done\n                                        ? o(t.value)\n                                        : ((e = t.value),\n                                          e instanceof r\n                                              ? e\n                                              : new r(function (t) {\n                                                    t(e);\n                                                })).then(s, a);\n                                }\n                                l((n = n.apply(t, e || [])).next());\n                            });\n                        },\n                    a =\n                        (this && this.__generator) ||\n                        function (t, e) {\n                            var r,\n                                n,\n                                o,\n                                i,\n                                s = {\n                                    label: 0,\n                                    sent: function () {\n                                        if (1 & o[0]) throw o[1];\n                                        return o[1];\n                                    },\n                                    trys: [],\n                                    ops: [],\n                                };\n                            return (\n                                (i = { next: a(0), throw: a(1), return: a(2) }),\n                                \"function\" == typeof Symbol &&\n                                    (i[Symbol.iterator] = function () {\n                                        return this;\n                                    }),\n                                i\n                            );\n                            function a(i) {\n                                return function (a) {\n                                    return (function (i) {\n                                        if (r)\n                                            throw new TypeError(\n                                                \"Generator is already executing.\"\n                                            );\n                                        for (; s; )\n                                            try {\n                                                if (\n                                                    ((r = 1),\n                                                    n &&\n                                                        (o =\n                                                            2 & i[0]\n                                                                ? n.return\n                                                                : i[0]\n                                                                  ? n.throw ||\n                                                                    ((o =\n                                                                        n.return) &&\n                                                                        o.call(\n                                                                            n\n                                                                        ),\n                                                                    0)\n                                                                  : n.next) &&\n                                                        !(o = o.call(n, i[1]))\n                                                            .done)\n                                                )\n                                                    return o;\n                                                switch (\n                                                    ((n = 0),\n                                                    o &&\n                                                        (i = [\n                                                            2 & i[0],\n                                                            o.value,\n                                                        ]),\n                                                    i[0])\n                                                ) {\n                                                    case 0:\n                                                    case 1:\n                                                        o = i;\n                                                        break;\n                                                    case 4:\n                                                        return (\n                                                            s.label++,\n                                                            {\n                                                                value: i[1],\n                                                                done: !1,\n                                                            }\n                                                        );\n                                                    case 5:\n                                                        s.label++,\n                                                            (n = i[1]),\n                                                            (i = [0]);\n                                                        continue;\n                                                    case 7:\n                                                        (i = s.ops.pop()),\n                                                            s.trys.pop();\n                                                        continue;\n                                                    default:\n                                                        if (\n                                                            !((o = s.trys),\n                                                            (o =\n                                                                o.length > 0 &&\n                                                                o[\n                                                                    o.length - 1\n                                                                ]) ||\n                                                                (6 !== i[0] &&\n                                                                    2 !== i[0]))\n                                                        ) {\n                                                            s = 0;\n                                                            continue;\n                                                        }\n                                                        if (\n                                                            3 === i[0] &&\n                                                            (!o ||\n                                                                (i[1] > o[0] &&\n                                                                    i[1] <\n                                                                        o[3]))\n                                                        ) {\n                                                            s.label = i[1];\n                                                            break;\n                                                        }\n                                                        if (\n                                                            6 === i[0] &&\n                                                            s.label < o[1]\n                                                        ) {\n                                                            (s.label = o[1]),\n                                                                (o = i);\n                                                            break;\n                                                        }\n                                                        if (\n                                                            o &&\n                                                            s.label < o[2]\n                                                        ) {\n                                                            (s.label = o[2]),\n                                                                s.ops.push(i);\n                                                            break;\n                                                        }\n                                                        o[2] && s.ops.pop(),\n                                                            s.trys.pop();\n                                                        continue;\n                                                }\n                                                i = e.call(t, s);\n                                            } catch (t) {\n                                                (i = [6, t]), (n = 0);\n                                            } finally {\n                                                r = o = 0;\n                                            }\n                                        if (5 & i[0]) throw i[1];\n                                        return {\n                                            value: i[0] ? i[1] : void 0,\n                                            done: !0,\n                                        };\n                                    })([i, a]);\n                                };\n                            }\n                        },\n                    l =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.sreReady = e.Sre = void 0);\n                var c,\n                    u = i(r(2998)),\n                    p = i(r(3362)),\n                    h = i(r(9552)),\n                    f = i(r(4440)),\n                    d = l(r(5897)),\n                    m = r(8504),\n                    y = i(r(3090)),\n                    g = r(1377),\n                    b = l(r(5282));\n                !(function (t) {\n                    (t.locales = g.Variables.LOCALES),\n                        (t.sreReady = u.engineReady),\n                        (t.setupEngine = u.setupEngine),\n                        (t.engineSetup = u.engineSetup),\n                        (t.toEnriched = u.toEnriched),\n                        (t.toSpeech = u.toSpeech),\n                        (t.clearspeakPreferences = m.ClearspeakPreferences),\n                        (t.getHighlighter = y.highlighter),\n                        (t.getSpeechGenerator = h.generator),\n                        (t.getWalker = p.walker),\n                        (t.clearspeakStyle = function () {\n                            return f.DOMAIN_TO_STYLES.clearspeak;\n                        }),\n                        (t.preloadLocales = function (t) {\n                            return s(this, void 0, void 0, function () {\n                                var e;\n                                return a(this, function (r) {\n                                    return [\n                                        2,\n                                        (e = b.default.get(t))\n                                            ? new Promise(function (t, r) {\n                                                  return t(JSON.stringify(e));\n                                              })\n                                            : u.localeLoader()(t),\n                                    ];\n                                });\n                            });\n                        });\n                })((c = e.Sre || (e.Sre = {}))),\n                    (e.sreReady = c.sreReady),\n                    (d.default.getInstance().delay = !0),\n                    (e.default = c);\n            },\n            444: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.HTMLAdaptor = void 0);\n                var s = (function (t) {\n                    function e(e) {\n                        var r = t.call(this, e.document) || this;\n                        return (\n                            (r.window = e), (r.parser = new e.DOMParser()), r\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.parse = function (t, e) {\n                            return (\n                                void 0 === e && (e = \"text/html\"),\n                                this.parser.parseFromString(t, e)\n                            );\n                        }),\n                        (e.prototype.create = function (t, e) {\n                            return e\n                                ? this.document.createElementNS(e, t)\n                                : this.document.createElement(t);\n                        }),\n                        (e.prototype.text = function (t) {\n                            return this.document.createTextNode(t);\n                        }),\n                        (e.prototype.head = function (t) {\n                            return t.head || t;\n                        }),\n                        (e.prototype.body = function (t) {\n                            return t.body || t;\n                        }),\n                        (e.prototype.root = function (t) {\n                            return t.documentElement || t;\n                        }),\n                        (e.prototype.doctype = function (t) {\n                            return t.doctype\n                                ? \"<!DOCTYPE \".concat(t.doctype.name, \">\")\n                                : \"\";\n                        }),\n                        (e.prototype.tags = function (t, e, r) {\n                            void 0 === r && (r = null);\n                            var n = r\n                                ? t.getElementsByTagNameNS(r, e)\n                                : t.getElementsByTagName(e);\n                            return Array.from(n);\n                        }),\n                        (e.prototype.getElements = function (t, e) {\n                            var r,\n                                n,\n                                o = [];\n                            try {\n                                for (\n                                    var s = i(t), a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var l = a.value;\n                                    \"string\" == typeof l\n                                        ? (o = o.concat(\n                                              Array.from(\n                                                  this.document.querySelectorAll(\n                                                      l\n                                                  )\n                                              )\n                                          ))\n                                        : Array.isArray(l) ||\n                                            l instanceof this.window.NodeList ||\n                                            l instanceof\n                                                this.window.HTMLCollection\n                                          ? (o = o.concat(Array.from(l)))\n                                          : o.push(l);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (n = s.return) && n.call(s);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            return o;\n                        }),\n                        (e.prototype.contains = function (t, e) {\n                            return t.contains(e);\n                        }),\n                        (e.prototype.parent = function (t) {\n                            return t.parentNode;\n                        }),\n                        (e.prototype.append = function (t, e) {\n                            return t.appendChild(e);\n                        }),\n                        (e.prototype.insert = function (t, e) {\n                            return this.parent(e).insertBefore(t, e);\n                        }),\n                        (e.prototype.remove = function (t) {\n                            return this.parent(t).removeChild(t);\n                        }),\n                        (e.prototype.replace = function (t, e) {\n                            return this.parent(e).replaceChild(t, e);\n                        }),\n                        (e.prototype.clone = function (t) {\n                            return t.cloneNode(!0);\n                        }),\n                        (e.prototype.split = function (t, e) {\n                            return t.splitText(e);\n                        }),\n                        (e.prototype.next = function (t) {\n                            return t.nextSibling;\n                        }),\n                        (e.prototype.previous = function (t) {\n                            return t.previousSibling;\n                        }),\n                        (e.prototype.firstChild = function (t) {\n                            return t.firstChild;\n                        }),\n                        (e.prototype.lastChild = function (t) {\n                            return t.lastChild;\n                        }),\n                        (e.prototype.childNodes = function (t) {\n                            return Array.from(t.childNodes);\n                        }),\n                        (e.prototype.childNode = function (t, e) {\n                            return t.childNodes[e];\n                        }),\n                        (e.prototype.kind = function (t) {\n                            var e = t.nodeType;\n                            return 1 === e || 3 === e || 8 === e\n                                ? t.nodeName.toLowerCase()\n                                : \"\";\n                        }),\n                        (e.prototype.value = function (t) {\n                            return t.nodeValue || \"\";\n                        }),\n                        (e.prototype.textContent = function (t) {\n                            return t.textContent;\n                        }),\n                        (e.prototype.innerHTML = function (t) {\n                            return t.innerHTML;\n                        }),\n                        (e.prototype.outerHTML = function (t) {\n                            return t.outerHTML;\n                        }),\n                        (e.prototype.serializeXML = function (t) {\n                            return new this.window.XMLSerializer().serializeToString(\n                                t\n                            );\n                        }),\n                        (e.prototype.setAttribute = function (t, e, r, n) {\n                            return (\n                                void 0 === n && (n = null),\n                                n\n                                    ? ((e =\n                                          n.replace(/.*\\//, \"\") +\n                                          \":\" +\n                                          e.replace(/^.*:/, \"\")),\n                                      t.setAttributeNS(n, e, r))\n                                    : t.setAttribute(e, r)\n                            );\n                        }),\n                        (e.prototype.getAttribute = function (t, e) {\n                            return t.getAttribute(e);\n                        }),\n                        (e.prototype.removeAttribute = function (t, e) {\n                            return t.removeAttribute(e);\n                        }),\n                        (e.prototype.hasAttribute = function (t, e) {\n                            return t.hasAttribute(e);\n                        }),\n                        (e.prototype.allAttributes = function (t) {\n                            return Array.from(t.attributes).map(function (t) {\n                                return { name: t.name, value: t.value };\n                            });\n                        }),\n                        (e.prototype.addClass = function (t, e) {\n                            t.classList\n                                ? t.classList.add(e)\n                                : (t.className = (\n                                      t.className +\n                                      \" \" +\n                                      e\n                                  ).trim());\n                        }),\n                        (e.prototype.removeClass = function (t, e) {\n                            t.classList\n                                ? t.classList.remove(e)\n                                : (t.className = t.className\n                                      .split(/ /)\n                                      .filter(function (t) {\n                                          return t !== e;\n                                      })\n                                      .join(\" \"));\n                        }),\n                        (e.prototype.hasClass = function (t, e) {\n                            return t.classList\n                                ? t.classList.contains(e)\n                                : t.className.split(/ /).indexOf(e) >= 0;\n                        }),\n                        (e.prototype.setStyle = function (t, e, r) {\n                            t.style[e] = r;\n                        }),\n                        (e.prototype.getStyle = function (t, e) {\n                            return t.style[e];\n                        }),\n                        (e.prototype.allStyles = function (t) {\n                            return t.style.cssText;\n                        }),\n                        (e.prototype.insertRules = function (t, e) {\n                            var r, n;\n                            try {\n                                for (\n                                    var o = i(e.reverse()), s = o.next();\n                                    !s.done;\n                                    s = o.next()\n                                ) {\n                                    var a = s.value;\n                                    try {\n                                        t.sheet.insertRule(a, 0);\n                                    } catch (t) {\n                                        console.warn(\n                                            \"MathJax: can't insert css rule '\"\n                                                .concat(a, \"': \")\n                                                .concat(t.message)\n                                        );\n                                    }\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    s && !s.done && (n = o.return) && n.call(o);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                        }),\n                        (e.prototype.fontSize = function (t) {\n                            var e = this.window.getComputedStyle(t);\n                            return parseFloat(e.fontSize);\n                        }),\n                        (e.prototype.fontFamily = function (t) {\n                            return (\n                                this.window.getComputedStyle(t).fontFamily || \"\"\n                            );\n                        }),\n                        (e.prototype.nodeSize = function (t, e, r) {\n                            if (\n                                (void 0 === e && (e = 1),\n                                void 0 === r && (r = !1),\n                                r && t.getBBox)\n                            ) {\n                                var n = t.getBBox();\n                                return [n.width / e, n.height / e];\n                            }\n                            return [t.offsetWidth / e, t.offsetHeight / e];\n                        }),\n                        (e.prototype.nodeBBox = function (t) {\n                            var e = t.getBoundingClientRect();\n                            return {\n                                left: e.left,\n                                right: e.right,\n                                top: e.top,\n                                bottom: e.bottom,\n                            };\n                        }),\n                        e\n                    );\n                })(r(5009).AbstractDOMAdaptor);\n                e.HTMLAdaptor = s;\n            },\n            6191: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.browserAdaptor = void 0);\n                var n = r(444);\n                e.browserAdaptor = function () {\n                    return new n.HTMLAdaptor(window);\n                };\n            },\n            9515: function (t, e, r) {\n                var n =\n                    (this && this.__values) ||\n                    function (t) {\n                        var e = \"function\" == typeof Symbol && Symbol.iterator,\n                            r = e && t[e],\n                            n = 0;\n                        if (r) return r.call(t);\n                        if (t && \"number\" == typeof t.length)\n                            return {\n                                next: function () {\n                                    return (\n                                        t && n >= t.length && (t = void 0),\n                                        { value: t && t[n++], done: !t }\n                                    );\n                                },\n                            };\n                        throw new TypeError(\n                            e\n                                ? \"Object is not iterable.\"\n                                : \"Symbol.iterator is not defined.\"\n                        );\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MathJax =\n                        e.combineWithMathJax =\n                        e.combineDefaults =\n                        e.combineConfig =\n                        e.isObject =\n                            void 0);\n                var o = r(3282);\n                function i(t) {\n                    return \"object\" == typeof t && null !== t;\n                }\n                function s(t, e) {\n                    var r, o;\n                    try {\n                        for (\n                            var a = n(Object.keys(e)), l = a.next();\n                            !l.done;\n                            l = a.next()\n                        ) {\n                            var c = l.value;\n                            \"__esModule\" !== c &&\n                                (!i(t[c]) || !i(e[c]) || e[c] instanceof Promise\n                                    ? null !== e[c] &&\n                                      void 0 !== e[c] &&\n                                      (t[c] = e[c])\n                                    : s(t[c], e[c]));\n                        }\n                    } catch (t) {\n                        r = { error: t };\n                    } finally {\n                        try {\n                            l && !l.done && (o = a.return) && o.call(a);\n                        } finally {\n                            if (r) throw r.error;\n                        }\n                    }\n                    return t;\n                }\n                (e.isObject = i),\n                    (e.combineConfig = s),\n                    (e.combineDefaults = function t(e, r, o) {\n                        var s, a;\n                        e[r] || (e[r] = {}), (e = e[r]);\n                        try {\n                            for (\n                                var l = n(Object.keys(o)), c = l.next();\n                                !c.done;\n                                c = l.next()\n                            ) {\n                                var u = c.value;\n                                i(e[u]) && i(o[u])\n                                    ? t(e, u, o[u])\n                                    : null == e[u] &&\n                                      null != o[u] &&\n                                      (e[u] = o[u]);\n                            }\n                        } catch (t) {\n                            s = { error: t };\n                        } finally {\n                            try {\n                                c && !c.done && (a = l.return) && a.call(l);\n                            } finally {\n                                if (s) throw s.error;\n                            }\n                        }\n                        return e;\n                    }),\n                    (e.combineWithMathJax = function (t) {\n                        return s(e.MathJax, t);\n                    }),\n                    void 0 === r.g.MathJax && (r.g.MathJax = {}),\n                    r.g.MathJax.version ||\n                        (r.g.MathJax = {\n                            version: o.VERSION,\n                            _: {},\n                            config: r.g.MathJax,\n                        }),\n                    (e.MathJax = r.g.MathJax);\n            },\n            235: function (t, e, r) {\n                var n,\n                    o,\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CONFIG =\n                        e.MathJax =\n                        e.Loader =\n                        e.PathFilters =\n                        e.PackageError =\n                        e.Package =\n                            void 0);\n                var s = r(9515),\n                    a = r(265),\n                    l = r(265);\n                Object.defineProperty(e, \"Package\", {\n                    enumerable: !0,\n                    get: function () {\n                        return l.Package;\n                    },\n                }),\n                    Object.defineProperty(e, \"PackageError\", {\n                        enumerable: !0,\n                        get: function () {\n                            return l.PackageError;\n                        },\n                    });\n                var c,\n                    u = r(7525);\n                if (\n                    ((e.PathFilters = {\n                        source: function (t) {\n                            return (\n                                e.CONFIG.source.hasOwnProperty(t.name) &&\n                                    (t.name = e.CONFIG.source[t.name]),\n                                !0\n                            );\n                        },\n                        normalize: function (t) {\n                            var e = t.name;\n                            return (\n                                e.match(/^(?:[a-z]+:\\/)?\\/|[a-z]:\\\\|\\[/i) ||\n                                    (t.name =\n                                        \"[mathjax]/\" + e.replace(/^\\.\\//, \"\")),\n                                t.addExtension &&\n                                    !e.match(/\\.[^\\/]+$/) &&\n                                    (t.name += \".js\"),\n                                !0\n                            );\n                        },\n                        prefix: function (t) {\n                            for (\n                                var r;\n                                (r = t.name.match(/^\\[([^\\]]*)\\]/)) &&\n                                e.CONFIG.paths.hasOwnProperty(r[1]);\n\n                            )\n                                t.name =\n                                    e.CONFIG.paths[r[1]] +\n                                    t.name.substr(r[0].length);\n                            return !0;\n                        },\n                    }),\n                    (function (t) {\n                        var r = s.MathJax.version;\n                        (t.versions = new Map()),\n                            (t.ready = function () {\n                                for (\n                                    var t, e, r = [], n = 0;\n                                    n < arguments.length;\n                                    n++\n                                )\n                                    r[n] = arguments[n];\n                                0 === r.length &&\n                                    (r = Array.from(a.Package.packages.keys()));\n                                var o = [];\n                                try {\n                                    for (\n                                        var s = i(r), l = s.next();\n                                        !l.done;\n                                        l = s.next()\n                                    ) {\n                                        var c = l.value,\n                                            u =\n                                                a.Package.packages.get(c) ||\n                                                new a.Package(c, !0);\n                                        o.push(u.promise);\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        l &&\n                                            !l.done &&\n                                            (e = s.return) &&\n                                            e.call(s);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                                return Promise.all(o);\n                            }),\n                            (t.load = function () {\n                                for (\n                                    var r, n, o = [], s = 0;\n                                    s < arguments.length;\n                                    s++\n                                )\n                                    o[s] = arguments[s];\n                                if (0 === o.length) return Promise.resolve();\n                                var l = [],\n                                    c = function (r) {\n                                        var n = a.Package.packages.get(r);\n                                        n ||\n                                            (n = new a.Package(r)).provides(\n                                                e.CONFIG.provides[r]\n                                            ),\n                                            n.checkNoLoad(),\n                                            l.push(\n                                                n.promise.then(function () {\n                                                    e.CONFIG.versionWarnings &&\n                                                        n.isLoaded &&\n                                                        !t.versions.has(\n                                                            a.Package.resolvePath(\n                                                                r\n                                                            )\n                                                        ) &&\n                                                        console.warn(\n                                                            \"No version information available for component \".concat(\n                                                                r\n                                                            )\n                                                        );\n                                                })\n                                            );\n                                    };\n                                try {\n                                    for (\n                                        var u = i(o), p = u.next();\n                                        !p.done;\n                                        p = u.next()\n                                    ) {\n                                        var h = p.value;\n                                        c(h);\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        p &&\n                                            !p.done &&\n                                            (n = u.return) &&\n                                            n.call(u);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                                return a.Package.loadAll(), Promise.all(l);\n                            }),\n                            (t.preLoad = function () {\n                                for (\n                                    var t, r, n = [], o = 0;\n                                    o < arguments.length;\n                                    o++\n                                )\n                                    n[o] = arguments[o];\n                                try {\n                                    for (\n                                        var s = i(n), l = s.next();\n                                        !l.done;\n                                        l = s.next()\n                                    ) {\n                                        var c = l.value,\n                                            u = a.Package.packages.get(c);\n                                        u ||\n                                            (u = new a.Package(c, !0)).provides(\n                                                e.CONFIG.provides[c]\n                                            ),\n                                            u.loaded();\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        l &&\n                                            !l.done &&\n                                            (r = s.return) &&\n                                            r.call(s);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (t.defaultReady = function () {\n                                void 0 !== e.MathJax.startup &&\n                                    e.MathJax.config.startup.ready();\n                            }),\n                            (t.getRoot = function () {\n                                var t = \"//../../es5\";\n                                if (\"undefined\" != typeof document) {\n                                    var e =\n                                        document.currentScript ||\n                                        document.getElementById(\n                                            \"MathJax-script\"\n                                        );\n                                    e && (t = e.src.replace(/\\/[^\\/]*$/, \"\"));\n                                }\n                                return t;\n                            }),\n                            (t.checkVersion = function (n, o, i) {\n                                return (\n                                    t.versions.set(a.Package.resolvePath(n), r),\n                                    !(!e.CONFIG.versionWarnings || o === r) &&\n                                        (console.warn(\n                                            \"Component \"\n                                                .concat(n, \" uses \")\n                                                .concat(\n                                                    o,\n                                                    \" of MathJax; version in use is \"\n                                                )\n                                                .concat(r)\n                                        ),\n                                        !0)\n                                );\n                            }),\n                            (t.pathFilters = new u.FunctionList()),\n                            t.pathFilters.add(e.PathFilters.source, 0),\n                            t.pathFilters.add(e.PathFilters.normalize, 10),\n                            t.pathFilters.add(e.PathFilters.prefix, 20);\n                    })((c = e.Loader || (e.Loader = {}))),\n                    (e.MathJax = s.MathJax),\n                    void 0 === e.MathJax.loader)\n                ) {\n                    (0, s.combineDefaults)(e.MathJax.config, \"loader\", {\n                        paths: { mathjax: c.getRoot() },\n                        source: {},\n                        dependencies: {},\n                        provides: {},\n                        load: [],\n                        ready: c.defaultReady.bind(c),\n                        failed: function (t) {\n                            return console.log(\n                                \"MathJax(\"\n                                    .concat(t.package || \"?\", \"): \")\n                                    .concat(t.message)\n                            );\n                        },\n                        require: null,\n                        pathFilters: [],\n                        versionWarnings: !0,\n                    }),\n                        (0, s.combineWithMathJax)({ loader: c });\n                    try {\n                        for (\n                            var p = i(e.MathJax.config.loader.pathFilters),\n                                h = p.next();\n                            !h.done;\n                            h = p.next()\n                        ) {\n                            var f = h.value;\n                            Array.isArray(f)\n                                ? c.pathFilters.add(f[0], f[1])\n                                : c.pathFilters.add(f);\n                        }\n                    } catch (t) {\n                        n = { error: t };\n                    } finally {\n                        try {\n                            h && !h.done && (o = p.return) && o.call(p);\n                        } finally {\n                            if (n) throw n.error;\n                        }\n                    }\n                }\n                e.CONFIG = e.MathJax.config.loader;\n            },\n            265: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    a =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Package = e.PackageError = void 0);\n                var l = r(235),\n                    c = (function (t) {\n                        function e(e, r) {\n                            var n = t.call(this, e) || this;\n                            return (n.package = r), n;\n                        }\n                        return o(e, t), e;\n                    })(Error);\n                e.PackageError = c;\n                var u = (function () {\n                    function t(e, r) {\n                        void 0 === r && (r = !1),\n                            (this.isLoaded = !1),\n                            (this.isLoading = !1),\n                            (this.hasFailed = !1),\n                            (this.dependents = []),\n                            (this.dependencies = []),\n                            (this.dependencyCount = 0),\n                            (this.provided = []),\n                            (this.name = e),\n                            (this.noLoad = r),\n                            t.packages.set(e, this),\n                            (this.promise = this.makePromise(\n                                this.makeDependencies()\n                            ));\n                    }\n                    return (\n                        Object.defineProperty(t.prototype, \"canLoad\", {\n                            get: function () {\n                                return (\n                                    0 === this.dependencyCount &&\n                                    !this.noLoad &&\n                                    !this.isLoading &&\n                                    !this.hasFailed\n                                );\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (t.resolvePath = function (t, e) {\n                            void 0 === e && (e = !0);\n                            var r = { name: t, original: t, addExtension: e };\n                            return l.Loader.pathFilters.execute(r), r.name;\n                        }),\n                        (t.loadAll = function () {\n                            var t, e;\n                            try {\n                                for (\n                                    var r = i(this.packages.values()),\n                                        n = r.next();\n                                    !n.done;\n                                    n = r.next()\n                                ) {\n                                    var o = n.value;\n                                    o.canLoad && o.load();\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    n && !n.done && (e = r.return) && e.call(r);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.makeDependencies = function () {\n                            var e,\n                                r,\n                                n = [],\n                                o = t.packages,\n                                c = this.noLoad,\n                                u = this.name,\n                                p = [];\n                            l.CONFIG.dependencies.hasOwnProperty(u)\n                                ? p.push.apply(\n                                      p,\n                                      a([], s(l.CONFIG.dependencies[u]), !1)\n                                  )\n                                : \"core\" !== u && p.push(\"core\");\n                            try {\n                                for (\n                                    var h = i(p), f = h.next();\n                                    !f.done;\n                                    f = h.next()\n                                ) {\n                                    var d = f.value,\n                                        m = o.get(d) || new t(d, c);\n                                    this.dependencies.indexOf(m) < 0 &&\n                                        (m.addDependent(this, c),\n                                        this.dependencies.push(m),\n                                        m.isLoaded ||\n                                            (this.dependencyCount++,\n                                            n.push(m.promise)));\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    f && !f.done && (r = h.return) && r.call(h);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            return n;\n                        }),\n                        (t.prototype.makePromise = function (t) {\n                            var e = this,\n                                r = new Promise(function (t, r) {\n                                    (e.resolve = t), (e.reject = r);\n                                }),\n                                n = l.CONFIG[this.name] || {};\n                            return (\n                                n.ready &&\n                                    (r = r.then(function (t) {\n                                        return n.ready(e.name);\n                                    })),\n                                t.length &&\n                                    (t.push(r),\n                                    (r = Promise.all(t).then(function (t) {\n                                        return t.join(\", \");\n                                    }))),\n                                n.failed &&\n                                    r.catch(function (t) {\n                                        return n.failed(new c(t, e.name));\n                                    }),\n                                r\n                            );\n                        }),\n                        (t.prototype.load = function () {\n                            if (\n                                !this.isLoaded &&\n                                !this.isLoading &&\n                                !this.noLoad\n                            ) {\n                                this.isLoading = !0;\n                                var e = t.resolvePath(this.name);\n                                l.CONFIG.require\n                                    ? this.loadCustom(e)\n                                    : this.loadScript(e);\n                            }\n                        }),\n                        (t.prototype.loadCustom = function (t) {\n                            var e = this;\n                            try {\n                                var r = l.CONFIG.require(t);\n                                r instanceof Promise\n                                    ? r\n                                          .then(function () {\n                                              return e.checkLoad();\n                                          })\n                                          .catch(function (r) {\n                                              return e.failed(\n                                                  \"Can't load \\\"\" +\n                                                      t +\n                                                      '\"\\n' +\n                                                      r.message.trim()\n                                              );\n                                          })\n                                    : this.checkLoad();\n                            } catch (t) {\n                                this.failed(t.message);\n                            }\n                        }),\n                        (t.prototype.loadScript = function (t) {\n                            var e = this,\n                                r = document.createElement(\"script\");\n                            (r.src = t),\n                                (r.charset = \"UTF-8\"),\n                                (r.onload = function (t) {\n                                    return e.checkLoad();\n                                }),\n                                (r.onerror = function (r) {\n                                    return e.failed(\"Can't load \\\"\" + t + '\"');\n                                }),\n                                document.head.appendChild(r);\n                        }),\n                        (t.prototype.loaded = function () {\n                            var t, e, r, n;\n                            (this.isLoaded = !0), (this.isLoading = !1);\n                            try {\n                                for (\n                                    var o = i(this.dependents), s = o.next();\n                                    !s.done;\n                                    s = o.next()\n                                ) {\n                                    s.value.requirementSatisfied();\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    s && !s.done && (e = o.return) && e.call(o);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            try {\n                                for (\n                                    var a = i(this.provided), l = a.next();\n                                    !l.done;\n                                    l = a.next()\n                                ) {\n                                    l.value.loaded();\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    l && !l.done && (n = a.return) && n.call(a);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            this.resolve(this.name);\n                        }),\n                        (t.prototype.failed = function (t) {\n                            (this.hasFailed = !0),\n                                (this.isLoading = !1),\n                                this.reject(new c(t, this.name));\n                        }),\n                        (t.prototype.checkLoad = function () {\n                            var t = this;\n                            (\n                                (l.CONFIG[this.name] || {}).checkReady ||\n                                function () {\n                                    return Promise.resolve();\n                                }\n                            )()\n                                .then(function () {\n                                    return t.loaded();\n                                })\n                                .catch(function (e) {\n                                    return t.failed(e);\n                                });\n                        }),\n                        (t.prototype.requirementSatisfied = function () {\n                            this.dependencyCount &&\n                                (this.dependencyCount--,\n                                this.canLoad && this.load());\n                        }),\n                        (t.prototype.provides = function (e) {\n                            var r, n;\n                            void 0 === e && (e = []);\n                            try {\n                                for (\n                                    var o = i(e), s = o.next();\n                                    !s.done;\n                                    s = o.next()\n                                ) {\n                                    var a = s.value,\n                                        c = t.packages.get(a);\n                                    c ||\n                                        (l.CONFIG.dependencies[a] ||\n                                            (l.CONFIG.dependencies[a] = []),\n                                        l.CONFIG.dependencies[a].push(a),\n                                        ((c = new t(a, !0)).isLoading = !0)),\n                                        this.provided.push(c);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    s && !s.done && (n = o.return) && n.call(o);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.addDependent = function (t, e) {\n                            this.dependents.push(t), e || this.checkNoLoad();\n                        }),\n                        (t.prototype.checkNoLoad = function () {\n                            var t, e;\n                            if (this.noLoad) {\n                                this.noLoad = !1;\n                                try {\n                                    for (\n                                        var r = i(this.dependencies),\n                                            n = r.next();\n                                        !n.done;\n                                        n = r.next()\n                                    ) {\n                                        n.value.checkNoLoad();\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        n &&\n                                            !n.done &&\n                                            (e = r.return) &&\n                                            e.call(r);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }\n                        }),\n                        (t.packages = new Map()),\n                        t\n                    );\n                })();\n                e.Package = u;\n            },\n            2388: function (t, e, r) {\n                var n =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (n =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                n.apply(this, arguments)\n                            );\n                        },\n                    o =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CONFIG = e.MathJax = e.Startup = void 0);\n                var a,\n                    l = r(9515),\n                    c = r(8666),\n                    u = r(7233);\n                !(function (t) {\n                    var a,\n                        l,\n                        u = new c.PrioritizedList();\n                    function h(e) {\n                        return a.visitTree(e, t.document);\n                    }\n                    function f() {\n                        (a =\n                            new e.MathJax._.core.MmlTree.SerializedMmlVisitor.SerializedMmlVisitor()),\n                            (l = e.MathJax._.mathjax.mathjax),\n                            (t.input = v()),\n                            (t.output = _()),\n                            (t.adaptor = S()),\n                            t.handler && l.handlers.unregister(t.handler),\n                            (t.handler = M()),\n                            t.handler &&\n                                (l.handlers.register(t.handler),\n                                (t.document = O()));\n                    }\n                    function d() {\n                        var e, r;\n                        t.input && t.output && m();\n                        var n = t.output ? t.output.name.toLowerCase() : \"\";\n                        try {\n                            for (\n                                var i = o(t.input), s = i.next();\n                                !s.done;\n                                s = i.next()\n                            ) {\n                                var a = s.value,\n                                    l = a.name.toLowerCase();\n                                g(l, a), b(l, a), t.output && y(l, n, a);\n                            }\n                        } catch (t) {\n                            e = { error: t };\n                        } finally {\n                            try {\n                                s && !s.done && (r = i.return) && r.call(i);\n                            } finally {\n                                if (e) throw e.error;\n                            }\n                        }\n                    }\n                    function m() {\n                        (e.MathJax.typeset = function (e) {\n                            void 0 === e && (e = null),\n                                (t.document.options.elements = e),\n                                t.document.reset(),\n                                t.document.render();\n                        }),\n                            (e.MathJax.typesetPromise = function (e) {\n                                return (\n                                    void 0 === e && (e = null),\n                                    (t.document.options.elements = e),\n                                    t.document.reset(),\n                                    l.handleRetriesFor(function () {\n                                        t.document.render();\n                                    })\n                                );\n                            }),\n                            (e.MathJax.typesetClear = function (e) {\n                                void 0 === e && (e = null),\n                                    e\n                                        ? t.document.clearMathItemsWithin(e)\n                                        : t.document.clear();\n                            });\n                    }\n                    function y(r, n, o) {\n                        var i = r + \"2\" + n;\n                        (e.MathJax[i] = function (e, r) {\n                            return (\n                                void 0 === r && (r = {}),\n                                (r.format = o.name),\n                                t.document.convert(e, r)\n                            );\n                        }),\n                            (e.MathJax[i + \"Promise\"] = function (e, r) {\n                                return (\n                                    void 0 === r && (r = {}),\n                                    (r.format = o.name),\n                                    l.handleRetriesFor(function () {\n                                        return t.document.convert(e, r);\n                                    })\n                                );\n                            }),\n                            (e.MathJax[n + \"Stylesheet\"] = function () {\n                                return t.output.styleSheet(t.document);\n                            }),\n                            \"getMetricsFor\" in t.output &&\n                                (e.MathJax.getMetricsFor = function (e, r) {\n                                    return t.output.getMetricsFor(e, r);\n                                });\n                    }\n                    function g(r, n) {\n                        var o = e.MathJax._.core.MathItem.STATE;\n                        (e.MathJax[r + \"2mml\"] = function (e, r) {\n                            return (\n                                void 0 === r && (r = {}),\n                                (r.end = o.CONVERT),\n                                (r.format = n.name),\n                                h(t.document.convert(e, r))\n                            );\n                        }),\n                            (e.MathJax[r + \"2mmlPromise\"] = function (e, r) {\n                                return (\n                                    void 0 === r && (r = {}),\n                                    (r.end = o.CONVERT),\n                                    (r.format = n.name),\n                                    l.handleRetriesFor(function () {\n                                        return h(t.document.convert(e, r));\n                                    })\n                                );\n                            });\n                    }\n                    function b(t, r) {\n                        e.MathJax[t + \"Reset\"] = function () {\n                            for (var t = [], e = 0; e < arguments.length; e++)\n                                t[e] = arguments[e];\n                            return r.reset.apply(r, s([], i(t), !1));\n                        };\n                    }\n                    function v() {\n                        var r,\n                            n,\n                            i = [];\n                        try {\n                            for (\n                                var s = o(e.CONFIG.input), a = s.next();\n                                !a.done;\n                                a = s.next()\n                            ) {\n                                var l = a.value,\n                                    c = t.constructors[l];\n                                if (!c)\n                                    throw Error(\n                                        'Input Jax \"' +\n                                            l +\n                                            '\" is not defined (has it been loaded?)'\n                                    );\n                                i.push(new c(e.MathJax.config[l]));\n                            }\n                        } catch (t) {\n                            r = { error: t };\n                        } finally {\n                            try {\n                                a && !a.done && (n = s.return) && n.call(s);\n                            } finally {\n                                if (r) throw r.error;\n                            }\n                        }\n                        return i;\n                    }\n                    function _() {\n                        var r = e.CONFIG.output;\n                        if (!r) return null;\n                        var n = t.constructors[r];\n                        if (!n)\n                            throw Error(\n                                'Output Jax \"' +\n                                    r +\n                                    '\" is not defined (has it been loaded?)'\n                            );\n                        return new n(e.MathJax.config[r]);\n                    }\n                    function S() {\n                        var r = e.CONFIG.adaptor;\n                        if (!r || \"none\" === r) return null;\n                        var n = t.constructors[r];\n                        if (!n)\n                            throw Error(\n                                'DOMAdaptor \"' +\n                                    r +\n                                    '\" is not defined (has it been loaded?)'\n                            );\n                        return n(e.MathJax.config[r]);\n                    }\n                    function M() {\n                        var r,\n                            n,\n                            i = e.CONFIG.handler;\n                        if (!i || \"none\" === i || !t.adaptor) return null;\n                        var s = t.constructors[i];\n                        if (!s)\n                            throw Error(\n                                'Handler \"' +\n                                    i +\n                                    '\" is not defined (has it been loaded?)'\n                            );\n                        var a = new s(t.adaptor, 5);\n                        try {\n                            for (\n                                var l = o(u), c = l.next();\n                                !c.done;\n                                c = l.next()\n                            ) {\n                                a = c.value.item(a);\n                            }\n                        } catch (t) {\n                            r = { error: t };\n                        } finally {\n                            try {\n                                c && !c.done && (n = l.return) && n.call(l);\n                            } finally {\n                                if (r) throw r.error;\n                            }\n                        }\n                        return a;\n                    }\n                    function O(r) {\n                        return (\n                            void 0 === r && (r = null),\n                            l.document(\n                                r || e.CONFIG.document,\n                                n(n({}, e.MathJax.config.options), {\n                                    InputJax: t.input,\n                                    OutputJax: t.output,\n                                })\n                            )\n                        );\n                    }\n                    (t.constructors = {}),\n                        (t.input = []),\n                        (t.output = null),\n                        (t.handler = null),\n                        (t.adaptor = null),\n                        (t.elements = null),\n                        (t.document = null),\n                        (t.promise = new Promise(function (e, r) {\n                            (t.promiseResolve = e), (t.promiseReject = r);\n                        })),\n                        (t.pagePromise = new Promise(function (t, e) {\n                            var n = r.g.document;\n                            if (\n                                n &&\n                                n.readyState &&\n                                \"complete\" !== n.readyState &&\n                                \"interactive\" !== n.readyState\n                            ) {\n                                var o = function () {\n                                    return t();\n                                };\n                                n.defaultView.addEventListener(\"load\", o, !0),\n                                    n.defaultView.addEventListener(\n                                        \"DOMContentLoaded\",\n                                        o,\n                                        !0\n                                    );\n                            } else t();\n                        })),\n                        (t.toMML = h),\n                        (t.registerConstructor = function (e, r) {\n                            t.constructors[e] = r;\n                        }),\n                        (t.useHandler = function (t, r) {\n                            void 0 === r && (r = !1),\n                                (e.CONFIG.handler && !r) ||\n                                    (e.CONFIG.handler = t);\n                        }),\n                        (t.useAdaptor = function (t, r) {\n                            void 0 === r && (r = !1),\n                                (e.CONFIG.adaptor && !r) ||\n                                    (e.CONFIG.adaptor = t);\n                        }),\n                        (t.useInput = function (t, r) {\n                            void 0 === r && (r = !1),\n                                (p && !r) || e.CONFIG.input.push(t);\n                        }),\n                        (t.useOutput = function (t, r) {\n                            void 0 === r && (r = !1),\n                                (e.CONFIG.output && !r) ||\n                                    (e.CONFIG.output = t);\n                        }),\n                        (t.extendHandler = function (t, e) {\n                            void 0 === e && (e = 10), u.add(t, e);\n                        }),\n                        (t.defaultReady = function () {\n                            f(),\n                                d(),\n                                t.pagePromise\n                                    .then(function () {\n                                        return e.CONFIG.pageReady();\n                                    })\n                                    .then(function () {\n                                        return t.promiseResolve();\n                                    })\n                                    .catch(function (e) {\n                                        return t.promiseReject(e);\n                                    });\n                        }),\n                        (t.defaultPageReady = function () {\n                            return e.CONFIG.typeset && e.MathJax.typesetPromise\n                                ? e.MathJax.typesetPromise(e.CONFIG.elements)\n                                : Promise.resolve();\n                        }),\n                        (t.getComponents = f),\n                        (t.makeMethods = d),\n                        (t.makeTypesetMethods = m),\n                        (t.makeOutputMethods = y),\n                        (t.makeMmlMethods = g),\n                        (t.makeResetMethod = b),\n                        (t.getInputJax = v),\n                        (t.getOutputJax = _),\n                        (t.getAdaptor = S),\n                        (t.getHandler = M),\n                        (t.getDocument = O);\n                })((a = e.Startup || (e.Startup = {}))),\n                    (e.MathJax = l.MathJax),\n                    void 0 === e.MathJax._.startup &&\n                        ((0, l.combineDefaults)(e.MathJax.config, \"startup\", {\n                            input: [],\n                            output: \"\",\n                            handler: null,\n                            adaptor: null,\n                            document:\n                                \"undefined\" == typeof document ? \"\" : document,\n                            elements: null,\n                            typeset: !0,\n                            ready: a.defaultReady.bind(a),\n                            pageReady: a.defaultPageReady.bind(a),\n                        }),\n                        (0, l.combineWithMathJax)({ startup: a, options: {} }),\n                        e.MathJax.config.startup.invalidOption &&\n                            (u.OPTIONS.invalidOption =\n                                e.MathJax.config.startup.invalidOption),\n                        e.MathJax.config.startup.optionError &&\n                            (u.OPTIONS.optionError =\n                                e.MathJax.config.startup.optionError)),\n                    (e.CONFIG = e.MathJax.config.startup);\n                var p = 0 !== e.CONFIG.input.length;\n            },\n            3282: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.VERSION = void 0),\n                    (e.VERSION = \"3.2.2\");\n            },\n            5009: function (t, e) {\n                var r =\n                    (this && this.__values) ||\n                    function (t) {\n                        var e = \"function\" == typeof Symbol && Symbol.iterator,\n                            r = e && t[e],\n                            n = 0;\n                        if (r) return r.call(t);\n                        if (t && \"number\" == typeof t.length)\n                            return {\n                                next: function () {\n                                    return (\n                                        t && n >= t.length && (t = void 0),\n                                        { value: t && t[n++], done: !t }\n                                    );\n                                },\n                            };\n                        throw new TypeError(\n                            e\n                                ? \"Object is not iterable.\"\n                                : \"Symbol.iterator is not defined.\"\n                        );\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractDOMAdaptor = void 0);\n                var n = (function () {\n                    function t(t) {\n                        void 0 === t && (t = null), (this.document = t);\n                    }\n                    return (\n                        (t.prototype.node = function (t, e, n, o) {\n                            var i, s;\n                            void 0 === e && (e = {}), void 0 === n && (n = []);\n                            var a = this.create(t, o);\n                            this.setAttributes(a, e);\n                            try {\n                                for (\n                                    var l = r(n), c = l.next();\n                                    !c.done;\n                                    c = l.next()\n                                ) {\n                                    var u = c.value;\n                                    this.append(a, u);\n                                }\n                            } catch (t) {\n                                i = { error: t };\n                            } finally {\n                                try {\n                                    c && !c.done && (s = l.return) && s.call(l);\n                                } finally {\n                                    if (i) throw i.error;\n                                }\n                            }\n                            return a;\n                        }),\n                        (t.prototype.setAttributes = function (t, e) {\n                            var n, o, i, s, a, l;\n                            if (e.style && \"string\" != typeof e.style)\n                                try {\n                                    for (\n                                        var c = r(Object.keys(e.style)),\n                                            u = c.next();\n                                        !u.done;\n                                        u = c.next()\n                                    ) {\n                                        var p = u.value;\n                                        this.setStyle(\n                                            t,\n                                            p.replace(\n                                                /-([a-z])/g,\n                                                function (t, e) {\n                                                    return e.toUpperCase();\n                                                }\n                                            ),\n                                            e.style[p]\n                                        );\n                                    }\n                                } catch (t) {\n                                    n = { error: t };\n                                } finally {\n                                    try {\n                                        u &&\n                                            !u.done &&\n                                            (o = c.return) &&\n                                            o.call(c);\n                                    } finally {\n                                        if (n) throw n.error;\n                                    }\n                                }\n                            if (e.properties)\n                                try {\n                                    for (\n                                        var h = r(Object.keys(e.properties)),\n                                            f = h.next();\n                                        !f.done;\n                                        f = h.next()\n                                    ) {\n                                        t[(p = f.value)] = e.properties[p];\n                                    }\n                                } catch (t) {\n                                    i = { error: t };\n                                } finally {\n                                    try {\n                                        f &&\n                                            !f.done &&\n                                            (s = h.return) &&\n                                            s.call(h);\n                                    } finally {\n                                        if (i) throw i.error;\n                                    }\n                                }\n                            try {\n                                for (\n                                    var d = r(Object.keys(e)), m = d.next();\n                                    !m.done;\n                                    m = d.next()\n                                ) {\n                                    (\"style\" === (p = m.value) &&\n                                        \"string\" != typeof e.style) ||\n                                        \"properties\" === p ||\n                                        this.setAttribute(t, p, e[p]);\n                                }\n                            } catch (t) {\n                                a = { error: t };\n                            } finally {\n                                try {\n                                    m && !m.done && (l = d.return) && l.call(d);\n                                } finally {\n                                    if (a) throw a.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.replace = function (t, e) {\n                            return this.insert(t, e), this.remove(e), e;\n                        }),\n                        (t.prototype.childNode = function (t, e) {\n                            return this.childNodes(t)[e];\n                        }),\n                        (t.prototype.allClasses = function (t) {\n                            var e = this.getAttribute(t, \"class\");\n                            return e\n                                ? e\n                                      .replace(/  +/g, \" \")\n                                      .replace(/^ /, \"\")\n                                      .replace(/ $/, \"\")\n                                      .split(/ /)\n                                : [];\n                        }),\n                        t\n                    );\n                })();\n                e.AbstractDOMAdaptor = n;\n            },\n            3494: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractFindMath = void 0);\n                var n = r(7233),\n                    o = (function () {\n                        function t(t) {\n                            var e = this.constructor;\n                            this.options = (0, n.userOptions)(\n                                (0, n.defaultOptions)({}, e.OPTIONS),\n                                t\n                            );\n                        }\n                        return (t.OPTIONS = {}), t;\n                    })();\n                e.AbstractFindMath = o;\n            },\n            3670: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractHandler = void 0);\n                var i = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return o(e, t), e;\n                    })(r(5722).AbstractMathDocument),\n                    s = (function () {\n                        function t(t, e) {\n                            void 0 === e && (e = 5),\n                                (this.documentClass = i),\n                                (this.adaptor = t),\n                                (this.priority = e);\n                        }\n                        return (\n                            Object.defineProperty(t.prototype, \"name\", {\n                                get: function () {\n                                    return this.constructor.NAME;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.handlesDocument = function (t) {\n                                return !1;\n                            }),\n                            (t.prototype.create = function (t, e) {\n                                return new this.documentClass(\n                                    t,\n                                    this.adaptor,\n                                    e\n                                );\n                            }),\n                            (t.NAME = \"generic\"),\n                            t\n                        );\n                    })();\n                e.AbstractHandler = s;\n            },\n            805: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.HandlerList = void 0);\n                var s = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.register = function (t) {\n                            return this.add(t, t.priority);\n                        }),\n                        (e.prototype.unregister = function (t) {\n                            this.remove(t);\n                        }),\n                        (e.prototype.handlesDocument = function (t) {\n                            var e, r;\n                            try {\n                                for (\n                                    var n = i(this), o = n.next();\n                                    !o.done;\n                                    o = n.next()\n                                ) {\n                                    var s = o.value.item;\n                                    if (s.handlesDocument(t)) return s;\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    o && !o.done && (r = n.return) && r.call(n);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            throw new Error(\"Can't find handler for document\");\n                        }),\n                        (e.prototype.document = function (t, e) {\n                            return (\n                                void 0 === e && (e = null),\n                                this.handlesDocument(t).create(t, e)\n                            );\n                        }),\n                        e\n                    );\n                })(r(8666).PrioritizedList);\n                e.HandlerList = s;\n            },\n            9206: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractInputJax = void 0);\n                var n = r(7233),\n                    o = r(7525),\n                    i = (function () {\n                        function t(t) {\n                            void 0 === t && (t = {}),\n                                (this.adaptor = null),\n                                (this.mmlFactory = null);\n                            var e = this.constructor;\n                            (this.options = (0, n.userOptions)(\n                                (0, n.defaultOptions)({}, e.OPTIONS),\n                                t\n                            )),\n                                (this.preFilters = new o.FunctionList()),\n                                (this.postFilters = new o.FunctionList());\n                        }\n                        return (\n                            Object.defineProperty(t.prototype, \"name\", {\n                                get: function () {\n                                    return this.constructor.NAME;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.setAdaptor = function (t) {\n                                this.adaptor = t;\n                            }),\n                            (t.prototype.setMmlFactory = function (t) {\n                                this.mmlFactory = t;\n                            }),\n                            (t.prototype.initialize = function () {}),\n                            (t.prototype.reset = function () {\n                                for (\n                                    var t = [], e = 0;\n                                    e < arguments.length;\n                                    e++\n                                )\n                                    t[e] = arguments[e];\n                            }),\n                            Object.defineProperty(\n                                t.prototype,\n                                \"processStrings\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (t.prototype.findMath = function (t, e) {\n                                return [];\n                            }),\n                            (t.prototype.executeFilters = function (\n                                t,\n                                e,\n                                r,\n                                n\n                            ) {\n                                var o = { math: e, document: r, data: n };\n                                return t.execute(o), o.data;\n                            }),\n                            (t.NAME = \"generic\"),\n                            (t.OPTIONS = {}),\n                            t\n                        );\n                    })();\n                e.AbstractInputJax = i;\n            },\n            5722: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    a =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractMathDocument =\n                        e.resetAllOptions =\n                        e.resetOptions =\n                        e.RenderList =\n                            void 0);\n                var l = r(7233),\n                    c = r(9206),\n                    u = r(2975),\n                    p = r(9e3),\n                    h = r(4474),\n                    f = r(3909),\n                    d = r(6751),\n                    m = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.create = function (t) {\n                                var e,\n                                    r,\n                                    n = new this();\n                                try {\n                                    for (\n                                        var o = i(Object.keys(t)), a = o.next();\n                                        !a.done;\n                                        a = o.next()\n                                    ) {\n                                        var l = a.value,\n                                            c = s(this.action(l, t[l]), 2),\n                                            u = c[0],\n                                            p = c[1];\n                                        p && n.add(u, p);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        a &&\n                                            !a.done &&\n                                            (r = o.return) &&\n                                            r.call(o);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return n;\n                            }),\n                            (e.action = function (t, e) {\n                                var r,\n                                    n,\n                                    o,\n                                    i,\n                                    a,\n                                    l,\n                                    c = !0,\n                                    u = e[0];\n                                if (1 === e.length || \"boolean\" == typeof e[1])\n                                    2 === e.length && (c = e[1]),\n                                        (a = (r = s(\n                                            this.methodActions(t),\n                                            2\n                                        ))[0]),\n                                        (l = r[1]);\n                                else if (\"string\" == typeof e[1])\n                                    if (\"string\" == typeof e[2]) {\n                                        4 === e.length && (c = e[3]);\n                                        var p = s(e.slice(1), 2),\n                                            h = p[0],\n                                            f = p[1];\n                                        (a = (n = s(\n                                            this.methodActions(h, f),\n                                            2\n                                        ))[0]),\n                                            (l = n[1]);\n                                    } else\n                                        3 === e.length && (c = e[2]),\n                                            (a = (o = s(\n                                                this.methodActions(e[1]),\n                                                2\n                                            ))[0]),\n                                            (l = o[1]);\n                                else\n                                    4 === e.length && (c = e[3]),\n                                        (a = (i = s(e.slice(1), 2))[0]),\n                                        (l = i[1]);\n                                return [\n                                    {\n                                        id: t,\n                                        renderDoc: a,\n                                        renderMath: l,\n                                        convert: c,\n                                    },\n                                    u,\n                                ];\n                            }),\n                            (e.methodActions = function (t, e) {\n                                return (\n                                    void 0 === e && (e = t),\n                                    [\n                                        function (e) {\n                                            return t && e[t](), !1;\n                                        },\n                                        function (t, r) {\n                                            return e && t[e](r), !1;\n                                        },\n                                    ]\n                                );\n                            }),\n                            (e.prototype.renderDoc = function (t, e) {\n                                var r, n;\n                                void 0 === e && (e = h.STATE.UNPROCESSED);\n                                try {\n                                    for (\n                                        var o = i(this.items), s = o.next();\n                                        !s.done;\n                                        s = o.next()\n                                    ) {\n                                        var a = s.value;\n                                        if (\n                                            a.priority >= e &&\n                                            a.item.renderDoc(t)\n                                        )\n                                            return;\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (n = o.return) &&\n                                            n.call(o);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.renderMath = function (t, e, r) {\n                                var n, o;\n                                void 0 === r && (r = h.STATE.UNPROCESSED);\n                                try {\n                                    for (\n                                        var s = i(this.items), a = s.next();\n                                        !a.done;\n                                        a = s.next()\n                                    ) {\n                                        var l = a.value;\n                                        if (\n                                            l.priority >= r &&\n                                            l.item.renderMath(t, e)\n                                        )\n                                            return;\n                                    }\n                                } catch (t) {\n                                    n = { error: t };\n                                } finally {\n                                    try {\n                                        a &&\n                                            !a.done &&\n                                            (o = s.return) &&\n                                            o.call(s);\n                                    } finally {\n                                        if (n) throw n.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.renderConvert = function (t, e, r) {\n                                var n, o;\n                                void 0 === r && (r = h.STATE.LAST);\n                                try {\n                                    for (\n                                        var s = i(this.items), a = s.next();\n                                        !a.done;\n                                        a = s.next()\n                                    ) {\n                                        var l = a.value;\n                                        if (l.priority > r) return;\n                                        if (\n                                            l.item.convert &&\n                                            l.item.renderMath(t, e)\n                                        )\n                                            return;\n                                    }\n                                } catch (t) {\n                                    n = { error: t };\n                                } finally {\n                                    try {\n                                        a &&\n                                            !a.done &&\n                                            (o = s.return) &&\n                                            o.call(s);\n                                    } finally {\n                                        if (n) throw n.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.findID = function (t) {\n                                var e, r;\n                                try {\n                                    for (\n                                        var n = i(this.items), o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var s = o.value;\n                                        if (s.item.id === t) return s.item;\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (r = n.return) &&\n                                            r.call(n);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return null;\n                            }),\n                            e\n                        );\n                    })(r(8666).PrioritizedList);\n                (e.RenderList = m),\n                    (e.resetOptions = {\n                        all: !1,\n                        processed: !1,\n                        inputJax: null,\n                        outputJax: null,\n                    }),\n                    (e.resetAllOptions = {\n                        all: !0,\n                        processed: !0,\n                        inputJax: [],\n                        outputJax: [],\n                    });\n                var y = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.compile = function (t) {\n                                return null;\n                            }),\n                            e\n                        );\n                    })(c.AbstractInputJax),\n                    g = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.typeset = function (t, e) {\n                                return void 0 === e && (e = null), null;\n                            }),\n                            (e.prototype.escaped = function (t, e) {\n                                return null;\n                            }),\n                            e\n                        );\n                    })(u.AbstractOutputJax),\n                    b = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return o(e, t), e;\n                    })(p.AbstractMathList),\n                    v = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return o(e, t), e;\n                    })(h.AbstractMathItem),\n                    _ = (function () {\n                        function t(e, r, n) {\n                            var o = this,\n                                i = this.constructor;\n                            (this.document = e),\n                                (this.options = (0, l.userOptions)(\n                                    (0, l.defaultOptions)({}, i.OPTIONS),\n                                    n\n                                )),\n                                (this.math = new (this.options.MathList ||\n                                    b)()),\n                                (this.renderActions = m.create(\n                                    this.options.renderActions\n                                )),\n                                (this.processed = new t.ProcessBits()),\n                                (this.outputJax =\n                                    this.options.OutputJax || new g());\n                            var s = this.options.InputJax || [new y()];\n                            Array.isArray(s) || (s = [s]),\n                                (this.inputJax = s),\n                                (this.adaptor = r),\n                                this.outputJax.setAdaptor(r),\n                                this.inputJax.map(function (t) {\n                                    return t.setAdaptor(r);\n                                }),\n                                (this.mmlFactory =\n                                    this.options.MmlFactory ||\n                                    new f.MmlFactory()),\n                                this.inputJax.map(function (t) {\n                                    return t.setMmlFactory(o.mmlFactory);\n                                }),\n                                this.outputJax.initialize(),\n                                this.inputJax.map(function (t) {\n                                    return t.initialize();\n                                });\n                        }\n                        return (\n                            Object.defineProperty(t.prototype, \"kind\", {\n                                get: function () {\n                                    return this.constructor.KIND;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.addRenderAction = function (t) {\n                                for (\n                                    var e = [], r = 1;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r - 1] = arguments[r];\n                                var n = s(m.action(t, e), 2),\n                                    o = n[0],\n                                    i = n[1];\n                                this.renderActions.add(o, i);\n                            }),\n                            (t.prototype.removeRenderAction = function (t) {\n                                var e = this.renderActions.findID(t);\n                                e && this.renderActions.remove(e);\n                            }),\n                            (t.prototype.render = function () {\n                                return this.renderActions.renderDoc(this), this;\n                            }),\n                            (t.prototype.rerender = function (t) {\n                                return (\n                                    void 0 === t && (t = h.STATE.RERENDER),\n                                    this.state(t - 1),\n                                    this.render(),\n                                    this\n                                );\n                            }),\n                            (t.prototype.convert = function (t, e) {\n                                void 0 === e && (e = {});\n                                var r = (0, l.userOptions)(\n                                        {\n                                            format: this.inputJax[0].name,\n                                            display: !0,\n                                            end: h.STATE.LAST,\n                                            em: 16,\n                                            ex: 8,\n                                            containerWidth: null,\n                                            lineWidth: 1e6,\n                                            scale: 1,\n                                            family: \"\",\n                                        },\n                                        e\n                                    ),\n                                    n = r.format,\n                                    o = r.display,\n                                    i = r.end,\n                                    s = r.ex,\n                                    a = r.em,\n                                    c = r.containerWidth,\n                                    u = r.lineWidth,\n                                    p = r.scale,\n                                    f = r.family;\n                                null === c && (c = 80 * s);\n                                var d = this.inputJax.reduce(function (t, e) {\n                                        return e.name === n ? e : t;\n                                    }, null),\n                                    m = new this.options.MathItem(t, d, o);\n                                return (\n                                    (m.start.node = this.adaptor.body(\n                                        this.document\n                                    )),\n                                    m.setMetrics(a, s, c, u, p),\n                                    this.outputJax.options.mtextInheritFont &&\n                                        (m.outputData.mtextFamily = f),\n                                    this.outputJax.options.merrorInheritFont &&\n                                        (m.outputData.merrorFamily = f),\n                                    m.convert(this, i),\n                                    m.typesetRoot || m.root\n                                );\n                            }),\n                            (t.prototype.findMath = function (t) {\n                                return (\n                                    void 0 === t && (t = null),\n                                    this.processed.set(\"findMath\"),\n                                    this\n                                );\n                            }),\n                            (t.prototype.compile = function () {\n                                var t, e, r, n;\n                                if (!this.processed.isSet(\"compile\")) {\n                                    var o = [];\n                                    try {\n                                        for (\n                                            var s = i(this.math), a = s.next();\n                                            !a.done;\n                                            a = s.next()\n                                        ) {\n                                            var l = a.value;\n                                            this.compileMath(l),\n                                                void 0 !==\n                                                    l.inputData.recompile &&\n                                                    o.push(l);\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            a &&\n                                                !a.done &&\n                                                (e = s.return) &&\n                                                e.call(s);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                    try {\n                                        for (\n                                            var c = i(o), u = c.next();\n                                            !u.done;\n                                            u = c.next()\n                                        ) {\n                                            var p = (l = u.value).inputData\n                                                .recompile;\n                                            l.state(p.state),\n                                                (l.inputData.recompile = p),\n                                                this.compileMath(l);\n                                        }\n                                    } catch (t) {\n                                        r = { error: t };\n                                    } finally {\n                                        try {\n                                            u &&\n                                                !u.done &&\n                                                (n = c.return) &&\n                                                n.call(c);\n                                        } finally {\n                                            if (r) throw r.error;\n                                        }\n                                    }\n                                    this.processed.set(\"compile\");\n                                }\n                                return this;\n                            }),\n                            (t.prototype.compileMath = function (t) {\n                                try {\n                                    t.compile(this);\n                                } catch (e) {\n                                    if (e.retry || e.restart) throw e;\n                                    this.options.compileError(this, t, e),\n                                        (t.inputData.error = e);\n                                }\n                            }),\n                            (t.prototype.compileError = function (t, e) {\n                                (t.root = this.mmlFactory.create(\"math\", null, [\n                                    this.mmlFactory.create(\n                                        \"merror\",\n                                        {\n                                            \"data-mjx-error\": e.message,\n                                            title: e.message,\n                                        },\n                                        [\n                                            this.mmlFactory.create(\n                                                \"mtext\",\n                                                null,\n                                                [\n                                                    this.mmlFactory\n                                                        .create(\"text\")\n                                                        .setText(\n                                                            \"Math input error\"\n                                                        ),\n                                                ]\n                                            ),\n                                        ]\n                                    ),\n                                ])),\n                                    t.display &&\n                                        t.root.attributes.set(\n                                            \"display\",\n                                            \"block\"\n                                        ),\n                                    (t.inputData.error = e.message);\n                            }),\n                            (t.prototype.typeset = function () {\n                                var t, e;\n                                if (!this.processed.isSet(\"typeset\")) {\n                                    try {\n                                        for (\n                                            var r = i(this.math), n = r.next();\n                                            !n.done;\n                                            n = r.next()\n                                        ) {\n                                            var o = n.value;\n                                            try {\n                                                o.typeset(this);\n                                            } catch (t) {\n                                                if (t.retry || t.restart)\n                                                    throw t;\n                                                this.options.typesetError(\n                                                    this,\n                                                    o,\n                                                    t\n                                                ),\n                                                    (o.outputData.error = t);\n                                            }\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            n &&\n                                                !n.done &&\n                                                (e = r.return) &&\n                                                e.call(r);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                    this.processed.set(\"typeset\");\n                                }\n                                return this;\n                            }),\n                            (t.prototype.typesetError = function (t, e) {\n                                (t.typesetRoot = this.adaptor.node(\n                                    \"mjx-container\",\n                                    {\n                                        class: \"MathJax mjx-output-error\",\n                                        jax: this.outputJax.name,\n                                    },\n                                    [\n                                        this.adaptor.node(\n                                            \"span\",\n                                            {\n                                                \"data-mjx-error\": e.message,\n                                                title: e.message,\n                                                style: {\n                                                    color: \"red\",\n                                                    \"background-color\":\n                                                        \"yellow\",\n                                                    \"line-height\": \"normal\",\n                                                },\n                                            },\n                                            [\n                                                this.adaptor.text(\n                                                    \"Math output error\"\n                                                ),\n                                            ]\n                                        ),\n                                    ]\n                                )),\n                                    t.display &&\n                                        this.adaptor.setAttributes(\n                                            t.typesetRoot,\n                                            {\n                                                style: {\n                                                    display: \"block\",\n                                                    margin: \"1em 0\",\n                                                    \"text-align\": \"center\",\n                                                },\n                                            }\n                                        ),\n                                    (t.outputData.error = e.message);\n                            }),\n                            (t.prototype.getMetrics = function () {\n                                return (\n                                    this.processed.isSet(\"getMetrics\") ||\n                                        (this.outputJax.getMetrics(this),\n                                        this.processed.set(\"getMetrics\")),\n                                    this\n                                );\n                            }),\n                            (t.prototype.updateDocument = function () {\n                                var t, e;\n                                if (!this.processed.isSet(\"updateDocument\")) {\n                                    try {\n                                        for (\n                                            var r = i(this.math.reversed()),\n                                                n = r.next();\n                                            !n.done;\n                                            n = r.next()\n                                        ) {\n                                            n.value.updateDocument(this);\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            n &&\n                                                !n.done &&\n                                                (e = r.return) &&\n                                                e.call(r);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                    this.processed.set(\"updateDocument\");\n                                }\n                                return this;\n                            }),\n                            (t.prototype.removeFromDocument = function (t) {\n                                return void 0 === t && (t = !1), this;\n                            }),\n                            (t.prototype.state = function (t, e) {\n                                var r, n;\n                                void 0 === e && (e = !1);\n                                try {\n                                    for (\n                                        var o = i(this.math), s = o.next();\n                                        !s.done;\n                                        s = o.next()\n                                    ) {\n                                        s.value.state(t, e);\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (n = o.return) &&\n                                            n.call(o);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                                return (\n                                    t < h.STATE.INSERTED &&\n                                        this.processed.clear(\"updateDocument\"),\n                                    t < h.STATE.TYPESET &&\n                                        (this.processed.clear(\"typeset\"),\n                                        this.processed.clear(\"getMetrics\")),\n                                    t < h.STATE.COMPILED &&\n                                        this.processed.clear(\"compile\"),\n                                    this\n                                );\n                            }),\n                            (t.prototype.reset = function (t) {\n                                var r;\n                                return (\n                                    void 0 === t && (t = { processed: !0 }),\n                                    (t = (0, l.userOptions)(\n                                        Object.assign({}, e.resetOptions),\n                                        t\n                                    )).all &&\n                                        Object.assign(t, e.resetAllOptions),\n                                    t.processed && this.processed.reset(),\n                                    t.inputJax &&\n                                        this.inputJax.forEach(function (e) {\n                                            return e.reset.apply(\n                                                e,\n                                                a([], s(t.inputJax), !1)\n                                            );\n                                        }),\n                                    t.outputJax &&\n                                        (r = this.outputJax).reset.apply(\n                                            r,\n                                            a([], s(t.outputJax), !1)\n                                        ),\n                                    this\n                                );\n                            }),\n                            (t.prototype.clear = function () {\n                                return this.reset(), this.math.clear(), this;\n                            }),\n                            (t.prototype.concat = function (t) {\n                                return this.math.merge(t), this;\n                            }),\n                            (t.prototype.clearMathItemsWithin = function (t) {\n                                var e,\n                                    r = this.getMathItemsWithin(t);\n                                return (\n                                    (e = this.math).remove.apply(\n                                        e,\n                                        a([], s(r), !1)\n                                    ),\n                                    r\n                                );\n                            }),\n                            (t.prototype.getMathItemsWithin = function (t) {\n                                var e, r, n, o;\n                                Array.isArray(t) || (t = [t]);\n                                var s = this.adaptor,\n                                    a = [],\n                                    l = s.getElements(t, this.document);\n                                try {\n                                    t: for (\n                                        var c = i(this.math), u = c.next();\n                                        !u.done;\n                                        u = c.next()\n                                    ) {\n                                        var p = u.value;\n                                        try {\n                                            for (\n                                                var h = ((n = void 0), i(l)),\n                                                    f = h.next();\n                                                !f.done;\n                                                f = h.next()\n                                            ) {\n                                                var d = f.value;\n                                                if (\n                                                    p.start.node &&\n                                                    s.contains(d, p.start.node)\n                                                ) {\n                                                    a.push(p);\n                                                    continue t;\n                                                }\n                                            }\n                                        } catch (t) {\n                                            n = { error: t };\n                                        } finally {\n                                            try {\n                                                f &&\n                                                    !f.done &&\n                                                    (o = h.return) &&\n                                                    o.call(h);\n                                            } finally {\n                                                if (n) throw n.error;\n                                            }\n                                        }\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        u &&\n                                            !u.done &&\n                                            (r = c.return) &&\n                                            r.call(c);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return a;\n                            }),\n                            (t.KIND = \"MathDocument\"),\n                            (t.OPTIONS = {\n                                OutputJax: null,\n                                InputJax: null,\n                                MmlFactory: null,\n                                MathList: b,\n                                MathItem: v,\n                                compileError: function (t, e, r) {\n                                    t.compileError(e, r);\n                                },\n                                typesetError: function (t, e, r) {\n                                    t.typesetError(e, r);\n                                },\n                                renderActions: (0, l.expandable)({\n                                    find: [\n                                        h.STATE.FINDMATH,\n                                        \"findMath\",\n                                        \"\",\n                                        !1,\n                                    ],\n                                    compile: [h.STATE.COMPILED],\n                                    metrics: [\n                                        h.STATE.METRICS,\n                                        \"getMetrics\",\n                                        \"\",\n                                        !1,\n                                    ],\n                                    typeset: [h.STATE.TYPESET],\n                                    update: [\n                                        h.STATE.INSERTED,\n                                        \"updateDocument\",\n                                        !1,\n                                    ],\n                                }),\n                            }),\n                            (t.ProcessBits = (0, d.BitFieldClass)(\n                                \"findMath\",\n                                \"compile\",\n                                \"getMetrics\",\n                                \"typeset\",\n                                \"updateDocument\"\n                            )),\n                            t\n                        );\n                    })();\n                e.AbstractMathDocument = _;\n            },\n            4474: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.newState =\n                        e.STATE =\n                        e.AbstractMathItem =\n                        e.protoItem =\n                            void 0),\n                    (e.protoItem = function (t, e, r, n, o, i, s) {\n                        return (\n                            void 0 === s && (s = null),\n                            {\n                                open: t,\n                                math: e,\n                                close: r,\n                                n: n,\n                                start: { n: o },\n                                end: { n: i },\n                                display: s,\n                            }\n                        );\n                    });\n                var r = (function () {\n                    function t(t, r, n, o, i) {\n                        void 0 === n && (n = !0),\n                            void 0 === o && (o = { i: 0, n: 0, delim: \"\" }),\n                            void 0 === i && (i = { i: 0, n: 0, delim: \"\" }),\n                            (this.root = null),\n                            (this.typesetRoot = null),\n                            (this.metrics = {}),\n                            (this.inputData = {}),\n                            (this.outputData = {}),\n                            (this._state = e.STATE.UNPROCESSED),\n                            (this.math = t),\n                            (this.inputJax = r),\n                            (this.display = n),\n                            (this.start = o),\n                            (this.end = i),\n                            (this.root = null),\n                            (this.typesetRoot = null),\n                            (this.metrics = {}),\n                            (this.inputData = {}),\n                            (this.outputData = {});\n                    }\n                    return (\n                        Object.defineProperty(t.prototype, \"isEscaped\", {\n                            get: function () {\n                                return null === this.display;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (t.prototype.render = function (t) {\n                            t.renderActions.renderMath(this, t);\n                        }),\n                        (t.prototype.rerender = function (t, r) {\n                            void 0 === r && (r = e.STATE.RERENDER),\n                                this.state() >= r && this.state(r - 1),\n                                t.renderActions.renderMath(this, t, r);\n                        }),\n                        (t.prototype.convert = function (t, r) {\n                            void 0 === r && (r = e.STATE.LAST),\n                                t.renderActions.renderConvert(this, t, r);\n                        }),\n                        (t.prototype.compile = function (t) {\n                            this.state() < e.STATE.COMPILED &&\n                                ((this.root = this.inputJax.compile(this, t)),\n                                this.state(e.STATE.COMPILED));\n                        }),\n                        (t.prototype.typeset = function (t) {\n                            this.state() < e.STATE.TYPESET &&\n                                ((this.typesetRoot = t.outputJax[\n                                    this.isEscaped ? \"escaped\" : \"typeset\"\n                                ](this, t)),\n                                this.state(e.STATE.TYPESET));\n                        }),\n                        (t.prototype.updateDocument = function (t) {}),\n                        (t.prototype.removeFromDocument = function (t) {\n                            void 0 === t && (t = !1);\n                        }),\n                        (t.prototype.setMetrics = function (t, e, r, n, o) {\n                            this.metrics = {\n                                em: t,\n                                ex: e,\n                                containerWidth: r,\n                                lineWidth: n,\n                                scale: o,\n                            };\n                        }),\n                        (t.prototype.state = function (t, r) {\n                            return (\n                                void 0 === t && (t = null),\n                                void 0 === r && (r = !1),\n                                null != t &&\n                                    (t < e.STATE.INSERTED &&\n                                        this._state >= e.STATE.INSERTED &&\n                                        this.removeFromDocument(r),\n                                    t < e.STATE.TYPESET &&\n                                        this._state >= e.STATE.TYPESET &&\n                                        (this.outputData = {}),\n                                    t < e.STATE.COMPILED &&\n                                        this._state >= e.STATE.COMPILED &&\n                                        (this.inputData = {}),\n                                    (this._state = t)),\n                                this._state\n                            );\n                        }),\n                        (t.prototype.reset = function (t) {\n                            void 0 === t && (t = !1),\n                                this.state(e.STATE.UNPROCESSED, t);\n                        }),\n                        t\n                    );\n                })();\n                (e.AbstractMathItem = r),\n                    (e.STATE = {\n                        UNPROCESSED: 0,\n                        FINDMATH: 10,\n                        COMPILED: 20,\n                        CONVERT: 100,\n                        METRICS: 110,\n                        RERENDER: 125,\n                        TYPESET: 150,\n                        INSERTED: 200,\n                        LAST: 1e4,\n                    }),\n                    (e.newState = function (t, r) {\n                        if (t in e.STATE)\n                            throw Error(\"State \" + t + \" already exists\");\n                        e.STATE[t] = r;\n                    });\n            },\n            9e3: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractMathList = void 0);\n                var i = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.isBefore = function (t, e) {\n                            return (\n                                t.start.i < e.start.i ||\n                                (t.start.i === e.start.i &&\n                                    t.start.n < e.start.n)\n                            );\n                        }),\n                        e\n                    );\n                })(r(103).LinkedList);\n                e.AbstractMathList = i;\n            },\n            91: function (t, e) {\n                var r =\n                    (this && this.__values) ||\n                    function (t) {\n                        var e = \"function\" == typeof Symbol && Symbol.iterator,\n                            r = e && t[e],\n                            n = 0;\n                        if (r) return r.call(t);\n                        if (t && \"number\" == typeof t.length)\n                            return {\n                                next: function () {\n                                    return (\n                                        t && n >= t.length && (t = void 0),\n                                        { value: t && t[n++], done: !t }\n                                    );\n                                },\n                            };\n                        throw new TypeError(\n                            e\n                                ? \"Object is not iterable.\"\n                                : \"Symbol.iterator is not defined.\"\n                        );\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Attributes = e.INHERIT = void 0),\n                    (e.INHERIT = \"_inherit_\");\n                var n = (function () {\n                    function t(t, e) {\n                        (this.global = e),\n                            (this.defaults = Object.create(e)),\n                            (this.inherited = Object.create(this.defaults)),\n                            (this.attributes = Object.create(this.inherited)),\n                            Object.assign(this.defaults, t);\n                    }\n                    return (\n                        (t.prototype.set = function (t, e) {\n                            this.attributes[t] = e;\n                        }),\n                        (t.prototype.setList = function (t) {\n                            Object.assign(this.attributes, t);\n                        }),\n                        (t.prototype.get = function (t) {\n                            var r = this.attributes[t];\n                            return r === e.INHERIT && (r = this.global[t]), r;\n                        }),\n                        (t.prototype.getExplicit = function (t) {\n                            if (this.attributes.hasOwnProperty(t))\n                                return this.attributes[t];\n                        }),\n                        (t.prototype.getList = function () {\n                            for (\n                                var t, e, n = [], o = 0;\n                                o < arguments.length;\n                                o++\n                            )\n                                n[o] = arguments[o];\n                            var i = {};\n                            try {\n                                for (\n                                    var s = r(n), a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var l = a.value;\n                                    i[l] = this.get(l);\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    a && !a.done && (e = s.return) && e.call(s);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            return i;\n                        }),\n                        (t.prototype.setInherited = function (t, e) {\n                            this.inherited[t] = e;\n                        }),\n                        (t.prototype.getInherited = function (t) {\n                            return this.inherited[t];\n                        }),\n                        (t.prototype.getDefault = function (t) {\n                            return this.defaults[t];\n                        }),\n                        (t.prototype.isSet = function (t) {\n                            return (\n                                this.attributes.hasOwnProperty(t) ||\n                                this.inherited.hasOwnProperty(t)\n                            );\n                        }),\n                        (t.prototype.hasDefault = function (t) {\n                            return t in this.defaults;\n                        }),\n                        (t.prototype.getExplicitNames = function () {\n                            return Object.keys(this.attributes);\n                        }),\n                        (t.prototype.getInheritedNames = function () {\n                            return Object.keys(this.inherited);\n                        }),\n                        (t.prototype.getDefaultNames = function () {\n                            return Object.keys(this.defaults);\n                        }),\n                        (t.prototype.getGlobalNames = function () {\n                            return Object.keys(this.global);\n                        }),\n                        (t.prototype.getAllAttributes = function () {\n                            return this.attributes;\n                        }),\n                        (t.prototype.getAllInherited = function () {\n                            return this.inherited;\n                        }),\n                        (t.prototype.getAllDefaults = function () {\n                            return this.defaults;\n                        }),\n                        (t.prototype.getAllGlobals = function () {\n                            return this.global;\n                        }),\n                        t\n                    );\n                })();\n                e.Attributes = n;\n            },\n            6336: function (t, e, r) {\n                var n;\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MML = void 0);\n                var o = r(9007),\n                    i = r(3233),\n                    s = r(450),\n                    a = r(3050),\n                    l = r(2756),\n                    c = r(4770),\n                    u = r(6030),\n                    p = r(7265),\n                    h = r(9878),\n                    f = r(6850),\n                    d = r(7131),\n                    m = r(6145),\n                    y = r(1314),\n                    g = r(1581),\n                    b = r(7238),\n                    v = r(5741),\n                    _ = r(5410),\n                    S = r(6661),\n                    M = r(9145),\n                    O = r(4461),\n                    x = r(5184),\n                    E = r(6405),\n                    A = r(1349),\n                    C = r(5022),\n                    T = r(4359),\n                    N = r(142),\n                    w = r(7590),\n                    L = r(3985),\n                    I = r(9102),\n                    P = r(3948),\n                    R = r(1334);\n                e.MML =\n                    (((n = {})[i.MmlMath.prototype.kind] = i.MmlMath),\n                    (n[s.MmlMi.prototype.kind] = s.MmlMi),\n                    (n[a.MmlMn.prototype.kind] = a.MmlMn),\n                    (n[l.MmlMo.prototype.kind] = l.MmlMo),\n                    (n[c.MmlMtext.prototype.kind] = c.MmlMtext),\n                    (n[u.MmlMspace.prototype.kind] = u.MmlMspace),\n                    (n[p.MmlMs.prototype.kind] = p.MmlMs),\n                    (n[h.MmlMrow.prototype.kind] = h.MmlMrow),\n                    (n[h.MmlInferredMrow.prototype.kind] = h.MmlInferredMrow),\n                    (n[f.MmlMfrac.prototype.kind] = f.MmlMfrac),\n                    (n[d.MmlMsqrt.prototype.kind] = d.MmlMsqrt),\n                    (n[m.MmlMroot.prototype.kind] = m.MmlMroot),\n                    (n[y.MmlMstyle.prototype.kind] = y.MmlMstyle),\n                    (n[g.MmlMerror.prototype.kind] = g.MmlMerror),\n                    (n[b.MmlMpadded.prototype.kind] = b.MmlMpadded),\n                    (n[v.MmlMphantom.prototype.kind] = v.MmlMphantom),\n                    (n[_.MmlMfenced.prototype.kind] = _.MmlMfenced),\n                    (n[S.MmlMenclose.prototype.kind] = S.MmlMenclose),\n                    (n[M.MmlMaction.prototype.kind] = M.MmlMaction),\n                    (n[O.MmlMsub.prototype.kind] = O.MmlMsub),\n                    (n[O.MmlMsup.prototype.kind] = O.MmlMsup),\n                    (n[O.MmlMsubsup.prototype.kind] = O.MmlMsubsup),\n                    (n[x.MmlMunder.prototype.kind] = x.MmlMunder),\n                    (n[x.MmlMover.prototype.kind] = x.MmlMover),\n                    (n[x.MmlMunderover.prototype.kind] = x.MmlMunderover),\n                    (n[E.MmlMmultiscripts.prototype.kind] = E.MmlMmultiscripts),\n                    (n[E.MmlMprescripts.prototype.kind] = E.MmlMprescripts),\n                    (n[E.MmlNone.prototype.kind] = E.MmlNone),\n                    (n[A.MmlMtable.prototype.kind] = A.MmlMtable),\n                    (n[C.MmlMlabeledtr.prototype.kind] = C.MmlMlabeledtr),\n                    (n[C.MmlMtr.prototype.kind] = C.MmlMtr),\n                    (n[T.MmlMtd.prototype.kind] = T.MmlMtd),\n                    (n[N.MmlMaligngroup.prototype.kind] = N.MmlMaligngroup),\n                    (n[w.MmlMalignmark.prototype.kind] = w.MmlMalignmark),\n                    (n[L.MmlMglyph.prototype.kind] = L.MmlMglyph),\n                    (n[I.MmlSemantics.prototype.kind] = I.MmlSemantics),\n                    (n[I.MmlAnnotation.prototype.kind] = I.MmlAnnotation),\n                    (n[I.MmlAnnotationXML.prototype.kind] = I.MmlAnnotationXML),\n                    (n[P.TeXAtom.prototype.kind] = P.TeXAtom),\n                    (n[R.MathChoice.prototype.kind] = R.MathChoice),\n                    (n[o.TextNode.prototype.kind] = o.TextNode),\n                    (n[o.XMLNode.prototype.kind] = o.XMLNode),\n                    n);\n            },\n            1759: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MathMLVisitor = void 0);\n                var s = (function (t) {\n                    function e() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (e.document = null), e;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.visitTree = function (t, e) {\n                            this.document = e;\n                            var r = e.createElement(\"top\");\n                            return (\n                                this.visitNode(t, r),\n                                (this.document = null),\n                                r.firstChild\n                            );\n                        }),\n                        (e.prototype.visitTextNode = function (t, e) {\n                            e.appendChild(\n                                this.document.createTextNode(t.getText())\n                            );\n                        }),\n                        (e.prototype.visitXMLNode = function (t, e) {\n                            e.appendChild(t.getXML().cloneNode(!0));\n                        }),\n                        (e.prototype.visitInferredMrowNode = function (t, e) {\n                            var r, n;\n                            try {\n                                for (\n                                    var o = i(t.childNodes), s = o.next();\n                                    !s.done;\n                                    s = o.next()\n                                ) {\n                                    var a = s.value;\n                                    this.visitNode(a, e);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    s && !s.done && (n = o.return) && n.call(o);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                        }),\n                        (e.prototype.visitDefault = function (t, e) {\n                            var r,\n                                n,\n                                o = this.document.createElement(t.kind);\n                            this.addAttributes(t, o);\n                            try {\n                                for (\n                                    var s = i(t.childNodes), a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var l = a.value;\n                                    this.visitNode(l, o);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (n = s.return) && n.call(s);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            e.appendChild(o);\n                        }),\n                        (e.prototype.addAttributes = function (t, e) {\n                            var r,\n                                n,\n                                o = t.attributes,\n                                s = o.getExplicitNames();\n                            try {\n                                for (\n                                    var a = i(s), l = a.next();\n                                    !l.done;\n                                    l = a.next()\n                                ) {\n                                    var c = l.value;\n                                    e.setAttribute(\n                                        c,\n                                        o.getExplicit(c).toString()\n                                    );\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    l && !l.done && (n = a.return) && n.call(a);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                        }),\n                        e\n                    );\n                })(r(6325).MmlVisitor);\n                e.MathMLVisitor = s;\n            },\n            3909: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlFactory = void 0);\n                var i = r(7860),\n                    s = r(6336),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"MML\", {\n                                get: function () {\n                                    return this.node;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.defaultNodes = s.MML),\n                            e\n                        );\n                    })(i.AbstractNodeFactory);\n                e.MmlFactory = a;\n            },\n            9007: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    a =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.XMLNode =\n                        e.TextNode =\n                        e.AbstractMmlEmptyNode =\n                        e.AbstractMmlBaseNode =\n                        e.AbstractMmlLayoutNode =\n                        e.AbstractMmlTokenNode =\n                        e.AbstractMmlNode =\n                        e.indentAttributes =\n                        e.TEXCLASSNAMES =\n                        e.TEXCLASS =\n                            void 0);\n                var l = r(91),\n                    c = r(4596);\n                (e.TEXCLASS = {\n                    ORD: 0,\n                    OP: 1,\n                    BIN: 2,\n                    REL: 3,\n                    OPEN: 4,\n                    CLOSE: 5,\n                    PUNCT: 6,\n                    INNER: 7,\n                    VCENTER: 8,\n                    NONE: -1,\n                }),\n                    (e.TEXCLASSNAMES = [\n                        \"ORD\",\n                        \"OP\",\n                        \"BIN\",\n                        \"REL\",\n                        \"OPEN\",\n                        \"CLOSE\",\n                        \"PUNCT\",\n                        \"INNER\",\n                        \"VCENTER\",\n                    ]);\n                var u = [\n                        \"\",\n                        \"thinmathspace\",\n                        \"mediummathspace\",\n                        \"thickmathspace\",\n                    ],\n                    p = [\n                        [0, -1, 2, 3, 0, 0, 0, 1],\n                        [-1, -1, 0, 3, 0, 0, 0, 1],\n                        [2, 2, 0, 0, 2, 0, 0, 2],\n                        [3, 3, 0, 0, 3, 0, 0, 3],\n                        [0, 0, 0, 0, 0, 0, 0, 0],\n                        [0, -1, 2, 3, 0, 0, 0, 1],\n                        [1, 1, 0, 1, 1, 1, 1, 1],\n                        [1, -1, 2, 3, 1, 0, 1, 1],\n                    ];\n                e.indentAttributes = [\n                    \"indentalign\",\n                    \"indentalignfirst\",\n                    \"indentshift\",\n                    \"indentshiftfirst\",\n                ];\n                var h = (function (t) {\n                    function r(e, r, n) {\n                        void 0 === r && (r = {}), void 0 === n && (n = []);\n                        var o = t.call(this, e) || this;\n                        return (\n                            (o.prevClass = null),\n                            (o.prevLevel = null),\n                            (o.texclass = null),\n                            o.arity < 0 &&\n                                ((o.childNodes = [e.create(\"inferredMrow\")]),\n                                (o.childNodes[0].parent = o)),\n                            o.setChildren(n),\n                            (o.attributes = new l.Attributes(\n                                e.getNodeClass(o.kind).defaults,\n                                e.getNodeClass(\"math\").defaults\n                            )),\n                            o.attributes.setList(r),\n                            o\n                        );\n                    }\n                    return (\n                        o(r, t),\n                        (r.prototype.copy = function (t) {\n                            var e, r, n, o;\n                            void 0 === t && (t = !1);\n                            var a = this.factory.create(this.kind);\n                            if (\n                                ((a.properties = i({}, this.properties)),\n                                this.attributes)\n                            ) {\n                                var l = this.attributes.getAllAttributes();\n                                try {\n                                    for (\n                                        var c = s(Object.keys(l)), u = c.next();\n                                        !u.done;\n                                        u = c.next()\n                                    ) {\n                                        var p = u.value;\n                                        (\"id\" !== p || t) &&\n                                            a.attributes.set(p, l[p]);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        u &&\n                                            !u.done &&\n                                            (r = c.return) &&\n                                            r.call(c);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                            }\n                            if (this.childNodes && this.childNodes.length) {\n                                var h = this.childNodes;\n                                1 === h.length &&\n                                    h[0].isInferred &&\n                                    (h = h[0].childNodes);\n                                try {\n                                    for (\n                                        var f = s(h), d = f.next();\n                                        !d.done;\n                                        d = f.next()\n                                    ) {\n                                        var m = d.value;\n                                        m\n                                            ? a.appendChild(m.copy())\n                                            : a.childNodes.push(null);\n                                    }\n                                } catch (t) {\n                                    n = { error: t };\n                                } finally {\n                                    try {\n                                        d &&\n                                            !d.done &&\n                                            (o = f.return) &&\n                                            o.call(f);\n                                    } finally {\n                                        if (n) throw n.error;\n                                    }\n                                }\n                            }\n                            return a;\n                        }),\n                        Object.defineProperty(r.prototype, \"texClass\", {\n                            get: function () {\n                                return this.texclass;\n                            },\n                            set: function (t) {\n                                this.texclass = t;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"isToken\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"isEmbellished\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"isSpacelike\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(\n                            r.prototype,\n                            \"linebreakContainer\",\n                            {\n                                get: function () {\n                                    return !1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }\n                        ),\n                        Object.defineProperty(r.prototype, \"hasNewLine\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"arity\", {\n                            get: function () {\n                                return 1 / 0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"isInferred\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"Parent\", {\n                            get: function () {\n                                for (var t = this.parent; t && t.notParent; )\n                                    t = t.Parent;\n                                return t;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"notParent\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (r.prototype.setChildren = function (e) {\n                            return this.arity < 0\n                                ? this.childNodes[0].setChildren(e)\n                                : t.prototype.setChildren.call(this, e);\n                        }),\n                        (r.prototype.appendChild = function (e) {\n                            var r,\n                                n,\n                                o = this;\n                            if (this.arity < 0)\n                                return this.childNodes[0].appendChild(e), e;\n                            if (e.isInferred) {\n                                if (this.arity === 1 / 0)\n                                    return (\n                                        e.childNodes.forEach(function (e) {\n                                            return t.prototype.appendChild.call(\n                                                o,\n                                                e\n                                            );\n                                        }),\n                                        e\n                                    );\n                                var i = e;\n                                (e = this.factory.create(\"mrow\")).setChildren(\n                                    i.childNodes\n                                ),\n                                    (e.attributes = i.attributes);\n                                try {\n                                    for (\n                                        var a = s(i.getPropertyNames()),\n                                            l = a.next();\n                                        !l.done;\n                                        l = a.next()\n                                    ) {\n                                        var c = l.value;\n                                        e.setProperty(c, i.getProperty(c));\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        l &&\n                                            !l.done &&\n                                            (n = a.return) &&\n                                            n.call(a);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                            }\n                            return t.prototype.appendChild.call(this, e);\n                        }),\n                        (r.prototype.replaceChild = function (e, r) {\n                            return this.arity < 0\n                                ? (this.childNodes[0].replaceChild(e, r), e)\n                                : t.prototype.replaceChild.call(this, e, r);\n                        }),\n                        (r.prototype.core = function () {\n                            return this;\n                        }),\n                        (r.prototype.coreMO = function () {\n                            return this;\n                        }),\n                        (r.prototype.coreIndex = function () {\n                            return 0;\n                        }),\n                        (r.prototype.childPosition = function () {\n                            for (\n                                var t, e, r = this, n = r.parent;\n                                n && n.notParent;\n\n                            )\n                                (r = n), (n = n.parent);\n                            if (n) {\n                                var o = 0;\n                                try {\n                                    for (\n                                        var i = s(n.childNodes), a = i.next();\n                                        !a.done;\n                                        a = i.next()\n                                    ) {\n                                        if (a.value === r) return o;\n                                        o++;\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        a &&\n                                            !a.done &&\n                                            (e = i.return) &&\n                                            e.call(i);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }\n                            return null;\n                        }),\n                        (r.prototype.setTeXclass = function (t) {\n                            return (\n                                this.getPrevClass(t),\n                                null != this.texClass ? this : t\n                            );\n                        }),\n                        (r.prototype.updateTeXclass = function (t) {\n                            t &&\n                                ((this.prevClass = t.prevClass),\n                                (this.prevLevel = t.prevLevel),\n                                (t.prevClass = t.prevLevel = null),\n                                (this.texClass = t.texClass));\n                        }),\n                        (r.prototype.getPrevClass = function (t) {\n                            t &&\n                                ((this.prevClass = t.texClass),\n                                (this.prevLevel =\n                                    t.attributes.get(\"scriptlevel\")));\n                        }),\n                        (r.prototype.texSpacing = function () {\n                            var t =\n                                    null != this.prevClass\n                                        ? this.prevClass\n                                        : e.TEXCLASS.NONE,\n                                r = this.texClass || e.TEXCLASS.ORD;\n                            if (t === e.TEXCLASS.NONE || r === e.TEXCLASS.NONE)\n                                return \"\";\n                            t === e.TEXCLASS.VCENTER && (t = e.TEXCLASS.ORD),\n                                r === e.TEXCLASS.VCENTER &&\n                                    (r = e.TEXCLASS.ORD);\n                            var n = p[t][r];\n                            return (this.prevLevel > 0 ||\n                                this.attributes.get(\"scriptlevel\") > 0) &&\n                                n >= 0\n                                ? \"\"\n                                : u[Math.abs(n)];\n                        }),\n                        (r.prototype.hasSpacingAttributes = function () {\n                            return (\n                                this.isEmbellished &&\n                                this.coreMO().hasSpacingAttributes()\n                            );\n                        }),\n                        (r.prototype.setInheritedAttributes = function (\n                            t,\n                            e,\n                            n,\n                            o\n                        ) {\n                            var i, l;\n                            void 0 === t && (t = {}),\n                                void 0 === e && (e = !1),\n                                void 0 === n && (n = 0),\n                                void 0 === o && (o = !1);\n                            var c = this.attributes.getAllDefaults();\n                            try {\n                                for (\n                                    var u = s(Object.keys(t)), p = u.next();\n                                    !p.done;\n                                    p = u.next()\n                                ) {\n                                    var h = p.value;\n                                    if (\n                                        c.hasOwnProperty(h) ||\n                                        r.alwaysInherit.hasOwnProperty(h)\n                                    ) {\n                                        var f = a(t[h], 2),\n                                            d = f[0],\n                                            m = f[1];\n                                        ((r.noInherit[d] || {})[this.kind] ||\n                                            {})[h] ||\n                                            this.attributes.setInherited(h, m);\n                                    }\n                                }\n                            } catch (t) {\n                                i = { error: t };\n                            } finally {\n                                try {\n                                    p && !p.done && (l = u.return) && l.call(u);\n                                } finally {\n                                    if (i) throw i.error;\n                                }\n                            }\n                            void 0 ===\n                                this.attributes.getExplicit(\"displaystyle\") &&\n                                this.attributes.setInherited(\"displaystyle\", e),\n                                void 0 ===\n                                    this.attributes.getExplicit(\n                                        \"scriptlevel\"\n                                    ) &&\n                                    this.attributes.setInherited(\n                                        \"scriptlevel\",\n                                        n\n                                    ),\n                                o && this.setProperty(\"texprimestyle\", o);\n                            var y = this.arity;\n                            if (\n                                y >= 0 &&\n                                y !== 1 / 0 &&\n                                ((1 === y && 0 === this.childNodes.length) ||\n                                    (1 !== y && this.childNodes.length !== y))\n                            )\n                                if (y < this.childNodes.length)\n                                    this.childNodes = this.childNodes.slice(\n                                        0,\n                                        y\n                                    );\n                                else\n                                    for (; this.childNodes.length < y; )\n                                        this.appendChild(\n                                            this.factory.create(\"mrow\")\n                                        );\n                            this.setChildInheritedAttributes(t, e, n, o);\n                        }),\n                        (r.prototype.setChildInheritedAttributes = function (\n                            t,\n                            e,\n                            r,\n                            n\n                        ) {\n                            var o, i;\n                            try {\n                                for (\n                                    var a = s(this.childNodes), l = a.next();\n                                    !l.done;\n                                    l = a.next()\n                                ) {\n                                    l.value.setInheritedAttributes(t, e, r, n);\n                                }\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    l && !l.done && (i = a.return) && i.call(a);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                        }),\n                        (r.prototype.addInheritedAttributes = function (t, e) {\n                            var r,\n                                n,\n                                o = i({}, t);\n                            try {\n                                for (\n                                    var a = s(Object.keys(e)), l = a.next();\n                                    !l.done;\n                                    l = a.next()\n                                ) {\n                                    var c = l.value;\n                                    \"displaystyle\" !== c &&\n                                        \"scriptlevel\" !== c &&\n                                        \"style\" !== c &&\n                                        (o[c] = [this.kind, e[c]]);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    l && !l.done && (n = a.return) && n.call(a);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            return o;\n                        }),\n                        (r.prototype.inheritAttributesFrom = function (t) {\n                            var e = t.attributes,\n                                r = e.get(\"displaystyle\"),\n                                n = e.get(\"scriptlevel\"),\n                                o = e.isSet(\"mathsize\")\n                                    ? { mathsize: [\"math\", e.get(\"mathsize\")] }\n                                    : {},\n                                i = t.getProperty(\"texprimestyle\") || !1;\n                            this.setInheritedAttributes(o, r, n, i);\n                        }),\n                        (r.prototype.verifyTree = function (t) {\n                            if ((void 0 === t && (t = null), null !== t)) {\n                                this.verifyAttributes(t);\n                                var e = this.arity;\n                                t.checkArity &&\n                                    e >= 0 &&\n                                    e !== 1 / 0 &&\n                                    ((1 === e &&\n                                        0 === this.childNodes.length) ||\n                                        (1 !== e &&\n                                            this.childNodes.length !== e)) &&\n                                    this.mError(\n                                        'Wrong number of children for \"' +\n                                            this.kind +\n                                            '\" node',\n                                        t,\n                                        !0\n                                    ),\n                                    this.verifyChildren(t);\n                            }\n                        }),\n                        (r.prototype.verifyAttributes = function (t) {\n                            var e, r;\n                            if (t.checkAttributes) {\n                                var n = this.attributes,\n                                    o = [];\n                                try {\n                                    for (\n                                        var i = s(n.getExplicitNames()),\n                                            a = i.next();\n                                        !a.done;\n                                        a = i.next()\n                                    ) {\n                                        var l = a.value;\n                                        \"data-\" === l.substr(0, 5) ||\n                                            void 0 !== n.getDefault(l) ||\n                                            l.match(\n                                                /^(?:class|style|id|(?:xlink:)?href)$/\n                                            ) ||\n                                            o.push(l);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        a &&\n                                            !a.done &&\n                                            (r = i.return) &&\n                                            r.call(i);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                o.length &&\n                                    this.mError(\n                                        \"Unknown attributes for \" +\n                                            this.kind +\n                                            \" node: \" +\n                                            o.join(\", \"),\n                                        t\n                                    );\n                            }\n                        }),\n                        (r.prototype.verifyChildren = function (t) {\n                            var e, r;\n                            try {\n                                for (\n                                    var n = s(this.childNodes), o = n.next();\n                                    !o.done;\n                                    o = n.next()\n                                ) {\n                                    o.value.verifyTree(t);\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    o && !o.done && (r = n.return) && r.call(n);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                        }),\n                        (r.prototype.mError = function (t, e, r) {\n                            if (\n                                (void 0 === r && (r = !1),\n                                this.parent && this.parent.isKind(\"merror\"))\n                            )\n                                return null;\n                            var n = this.factory.create(\"merror\");\n                            if (\n                                (n.attributes.set(\"data-mjx-message\", t),\n                                e.fullErrors || r)\n                            ) {\n                                var o = this.factory.create(\"mtext\"),\n                                    i = this.factory.create(\"text\");\n                                i.setText(e.fullErrors ? t : this.kind),\n                                    o.appendChild(i),\n                                    n.appendChild(o),\n                                    this.parent.replaceChild(n, this);\n                            } else\n                                this.parent.replaceChild(n, this),\n                                    n.appendChild(this);\n                            return n;\n                        }),\n                        (r.defaults = {\n                            mathbackground: l.INHERIT,\n                            mathcolor: l.INHERIT,\n                            mathsize: l.INHERIT,\n                            dir: l.INHERIT,\n                        }),\n                        (r.noInherit = {\n                            mstyle: {\n                                mpadded: {\n                                    width: !0,\n                                    height: !0,\n                                    depth: !0,\n                                    lspace: !0,\n                                    voffset: !0,\n                                },\n                                mtable: {\n                                    width: !0,\n                                    height: !0,\n                                    depth: !0,\n                                    align: !0,\n                                },\n                            },\n                            maligngroup: {\n                                mrow: { groupalign: !0 },\n                                mtable: { groupalign: !0 },\n                            },\n                        }),\n                        (r.alwaysInherit = {\n                            scriptminsize: !0,\n                            scriptsizemultiplier: !0,\n                        }),\n                        (r.verifyDefaults = {\n                            checkArity: !0,\n                            checkAttributes: !1,\n                            fullErrors: !1,\n                            fixMmultiscripts: !0,\n                            fixMtables: !0,\n                        }),\n                        r\n                    );\n                })(c.AbstractNode);\n                e.AbstractMmlNode = h;\n                var f = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"isToken\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.getText = function () {\n                            var t,\n                                e,\n                                r = \"\";\n                            try {\n                                for (\n                                    var n = s(this.childNodes), o = n.next();\n                                    !o.done;\n                                    o = n.next()\n                                ) {\n                                    var i = o.value;\n                                    i instanceof g && (r += i.getText());\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    o && !o.done && (e = n.return) && e.call(n);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            return r;\n                        }),\n                        (e.prototype.setChildInheritedAttributes = function (\n                            t,\n                            e,\n                            r,\n                            n\n                        ) {\n                            var o, i;\n                            try {\n                                for (\n                                    var a = s(this.childNodes), l = a.next();\n                                    !l.done;\n                                    l = a.next()\n                                ) {\n                                    var c = l.value;\n                                    c instanceof h &&\n                                        c.setInheritedAttributes(t, e, r, n);\n                                }\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    l && !l.done && (i = a.return) && i.call(a);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                        }),\n                        (e.prototype.walkTree = function (t, e) {\n                            var r, n;\n                            t(this, e);\n                            try {\n                                for (\n                                    var o = s(this.childNodes), i = o.next();\n                                    !i.done;\n                                    i = o.next()\n                                ) {\n                                    var a = i.value;\n                                    a instanceof h && a.walkTree(t, e);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    i && !i.done && (n = o.return) && n.call(o);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            return e;\n                        }),\n                        (e.defaults = i(i({}, h.defaults), {\n                            mathvariant: \"normal\",\n                            mathsize: l.INHERIT,\n                        })),\n                        e\n                    );\n                })(h);\n                e.AbstractMmlTokenNode = f;\n                var d = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"isSpacelike\", {\n                            get: function () {\n                                return this.childNodes[0].isSpacelike;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isEmbellished\", {\n                            get: function () {\n                                return this.childNodes[0].isEmbellished;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"arity\", {\n                            get: function () {\n                                return -1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.core = function () {\n                            return this.childNodes[0];\n                        }),\n                        (e.prototype.coreMO = function () {\n                            return this.childNodes[0].coreMO();\n                        }),\n                        (e.prototype.setTeXclass = function (t) {\n                            return (\n                                (t = this.childNodes[0].setTeXclass(t)),\n                                this.updateTeXclass(this.childNodes[0]),\n                                t\n                            );\n                        }),\n                        (e.defaults = h.defaults),\n                        e\n                    );\n                })(h);\n                e.AbstractMmlLayoutNode = d;\n                var m = (function (t) {\n                    function r() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(r, t),\n                        Object.defineProperty(r.prototype, \"isEmbellished\", {\n                            get: function () {\n                                return this.childNodes[0].isEmbellished;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (r.prototype.core = function () {\n                            return this.childNodes[0];\n                        }),\n                        (r.prototype.coreMO = function () {\n                            return this.childNodes[0].coreMO();\n                        }),\n                        (r.prototype.setTeXclass = function (t) {\n                            var r, n;\n                            this.getPrevClass(t),\n                                (this.texClass = e.TEXCLASS.ORD);\n                            var o = this.childNodes[0];\n                            o\n                                ? this.isEmbellished || o.isKind(\"mi\")\n                                    ? ((t = o.setTeXclass(t)),\n                                      this.updateTeXclass(this.core()))\n                                    : (o.setTeXclass(null), (t = this))\n                                : (t = this);\n                            try {\n                                for (\n                                    var i = s(this.childNodes.slice(1)),\n                                        a = i.next();\n                                    !a.done;\n                                    a = i.next()\n                                ) {\n                                    var l = a.value;\n                                    l && l.setTeXclass(null);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (n = i.return) && n.call(i);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            return t;\n                        }),\n                        (r.defaults = h.defaults),\n                        r\n                    );\n                })(h);\n                e.AbstractMmlBaseNode = m;\n                var y = (function (t) {\n                    function r() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(r, t),\n                        Object.defineProperty(r.prototype, \"isToken\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"isEmbellished\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"isSpacelike\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(\n                            r.prototype,\n                            \"linebreakContainer\",\n                            {\n                                get: function () {\n                                    return !1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }\n                        ),\n                        Object.defineProperty(r.prototype, \"hasNewLine\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"arity\", {\n                            get: function () {\n                                return 0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"isInferred\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"notParent\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"Parent\", {\n                            get: function () {\n                                return this.parent;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"texClass\", {\n                            get: function () {\n                                return e.TEXCLASS.NONE;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"prevClass\", {\n                            get: function () {\n                                return e.TEXCLASS.NONE;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(r.prototype, \"prevLevel\", {\n                            get: function () {\n                                return 0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (r.prototype.hasSpacingAttributes = function () {\n                            return !1;\n                        }),\n                        Object.defineProperty(r.prototype, \"attributes\", {\n                            get: function () {\n                                return null;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (r.prototype.core = function () {\n                            return this;\n                        }),\n                        (r.prototype.coreMO = function () {\n                            return this;\n                        }),\n                        (r.prototype.coreIndex = function () {\n                            return 0;\n                        }),\n                        (r.prototype.childPosition = function () {\n                            return 0;\n                        }),\n                        (r.prototype.setTeXclass = function (t) {\n                            return t;\n                        }),\n                        (r.prototype.texSpacing = function () {\n                            return \"\";\n                        }),\n                        (r.prototype.setInheritedAttributes = function (\n                            t,\n                            e,\n                            r,\n                            n\n                        ) {}),\n                        (r.prototype.inheritAttributesFrom = function (t) {}),\n                        (r.prototype.verifyTree = function (t) {}),\n                        (r.prototype.mError = function (t, e, r) {\n                            return void 0 === r && (r = !1), null;\n                        }),\n                        r\n                    );\n                })(c.AbstractEmptyNode);\n                e.AbstractMmlEmptyNode = y;\n                var g = (function (t) {\n                    function e() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (e.text = \"\"), e;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"text\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.getText = function () {\n                            return this.text;\n                        }),\n                        (e.prototype.setText = function (t) {\n                            return (this.text = t), this;\n                        }),\n                        (e.prototype.copy = function () {\n                            return this.factory\n                                .create(this.kind)\n                                .setText(this.getText());\n                        }),\n                        (e.prototype.toString = function () {\n                            return this.text;\n                        }),\n                        e\n                    );\n                })(y);\n                e.TextNode = g;\n                var b = (function (t) {\n                    function e() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (e.xml = null), (e.adaptor = null), e;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"XML\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.getXML = function () {\n                            return this.xml;\n                        }),\n                        (e.prototype.setXML = function (t, e) {\n                            return (\n                                void 0 === e && (e = null),\n                                (this.xml = t),\n                                (this.adaptor = e),\n                                this\n                            );\n                        }),\n                        (e.prototype.getSerializedXML = function () {\n                            return this.adaptor.serializeXML(this.xml);\n                        }),\n                        (e.prototype.copy = function () {\n                            return this.factory\n                                .create(this.kind)\n                                .setXML(this.adaptor.clone(this.xml));\n                        }),\n                        (e.prototype.toString = function () {\n                            return \"XML data\";\n                        }),\n                        e\n                    );\n                })(y);\n                e.XMLNode = b;\n            },\n            3948: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.TeXAtom = void 0);\n                var s = r(9007),\n                    a = r(2756),\n                    l = (function (t) {\n                        function e(e, r, n) {\n                            var o = t.call(this, e, r, n) || this;\n                            return (\n                                (o.texclass = s.TEXCLASS.ORD),\n                                o.setProperty(\"texClass\", o.texClass),\n                                o\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"TeXAtom\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return -1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"notParent\", {\n                                get: function () {\n                                    return (\n                                        this.childNodes[0] &&\n                                        1 ===\n                                            this.childNodes[0].childNodes.length\n                                    );\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.setTeXclass = function (t) {\n                                return (\n                                    this.childNodes[0].setTeXclass(null),\n                                    this.adjustTeXclass(t)\n                                );\n                            }),\n                            (e.prototype.adjustTeXclass = function (t) {\n                                return t;\n                            }),\n                            (e.defaults = i(\n                                {},\n                                s.AbstractMmlBaseNode.defaults\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlBaseNode);\n                (e.TeXAtom = l),\n                    (l.prototype.adjustTeXclass =\n                        a.MmlMo.prototype.adjustTeXclass);\n            },\n            9145: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMaction = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"maction\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return 1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"selected\", {\n                                get: function () {\n                                    var t = this.attributes.get(\"selection\"),\n                                        e =\n                                            Math.max(\n                                                1,\n                                                Math.min(\n                                                    this.childNodes.length,\n                                                    t\n                                                )\n                                            ) - 1;\n                                    return (\n                                        this.childNodes[e] ||\n                                        this.factory.create(\"mrow\")\n                                    );\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"isEmbellished\",\n                                {\n                                    get: function () {\n                                        return this.selected.isEmbellished;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            Object.defineProperty(e.prototype, \"isSpacelike\", {\n                                get: function () {\n                                    return this.selected.isSpacelike;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.core = function () {\n                                return this.selected.core();\n                            }),\n                            (e.prototype.coreMO = function () {\n                                return this.selected.coreMO();\n                            }),\n                            (e.prototype.verifyAttributes = function (e) {\n                                (t.prototype.verifyAttributes.call(this, e),\n                                \"toggle\" !==\n                                    this.attributes.get(\"actiontype\") &&\n                                    void 0 !==\n                                        this.attributes.getExplicit(\n                                            \"selection\"\n                                        )) &&\n                                    delete this.attributes.getAllAttributes()\n                                        .selection;\n                            }),\n                            (e.prototype.setTeXclass = function (t) {\n                                \"tooltip\" ===\n                                    this.attributes.get(\"actiontype\") &&\n                                    this.childNodes[1] &&\n                                    this.childNodes[1].setTeXclass(null);\n                                var e = this.selected;\n                                return (\n                                    (t = e.setTeXclass(t)),\n                                    this.updateTeXclass(e),\n                                    t\n                                );\n                            }),\n                            (e.prototype.nextToggleSelection = function () {\n                                var t = Math.max(\n                                    1,\n                                    this.attributes.get(\"selection\") + 1\n                                );\n                                t > this.childNodes.length && (t = 1),\n                                    this.attributes.set(\"selection\", t);\n                            }),\n                            (e.defaults = i(i({}, s.AbstractMmlNode.defaults), {\n                                actiontype: \"toggle\",\n                                selection: 1,\n                            })),\n                            e\n                        );\n                    })(s.AbstractMmlNode);\n                e.MmlMaction = a;\n            },\n            142: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMaligngroup = void 0);\n                var s = r(9007),\n                    a = r(91),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"maligngroup\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"isSpacelike\", {\n                                get: function () {\n                                    return !0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (e, r, n, o) {\n                                    (e = this.addInheritedAttributes(\n                                        e,\n                                        this.attributes.getAllAttributes()\n                                    )),\n                                        t.prototype.setChildInheritedAttributes.call(\n                                            this,\n                                            e,\n                                            r,\n                                            n,\n                                            o\n                                        );\n                                }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlLayoutNode.defaults),\n                                { groupalign: a.INHERIT }\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlLayoutNode);\n                e.MmlMaligngroup = l;\n            },\n            7590: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMalignmark = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"malignmark\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return 0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"isSpacelike\", {\n                                get: function () {\n                                    return !0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.defaults = i(i({}, s.AbstractMmlNode.defaults), {\n                                edge: \"left\",\n                            })),\n                            e\n                        );\n                    })(s.AbstractMmlNode);\n                e.MmlMalignmark = a;\n            },\n            3233: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMath = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"math\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"linebreakContainer\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (e, r, n, o) {\n                                    \"display\" === this.attributes.get(\"mode\") &&\n                                        this.attributes.setInherited(\n                                            \"display\",\n                                            \"block\"\n                                        ),\n                                        (e = this.addInheritedAttributes(\n                                            e,\n                                            this.attributes.getAllAttributes()\n                                        )),\n                                        (r =\n                                            !!this.attributes.get(\n                                                \"displaystyle\"\n                                            ) ||\n                                            (!this.attributes.get(\n                                                \"displaystyle\"\n                                            ) &&\n                                                \"block\" ===\n                                                    this.attributes.get(\n                                                        \"display\"\n                                                    ))),\n                                        this.attributes.setInherited(\n                                            \"displaystyle\",\n                                            r\n                                        ),\n                                        (n =\n                                            this.attributes.get(\n                                                \"scriptlevel\"\n                                            ) ||\n                                            this.constructor.defaults\n                                                .scriptlevel),\n                                        t.prototype.setChildInheritedAttributes.call(\n                                            this,\n                                            e,\n                                            r,\n                                            n,\n                                            o\n                                        );\n                                }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlLayoutNode.defaults),\n                                {\n                                    mathvariant: \"normal\",\n                                    mathsize: \"normal\",\n                                    mathcolor: \"\",\n                                    mathbackground: \"transparent\",\n                                    dir: \"ltr\",\n                                    scriptlevel: 0,\n                                    displaystyle: !1,\n                                    display: \"inline\",\n                                    maxwidth: \"\",\n                                    overflow: \"linebreak\",\n                                    altimg: \"\",\n                                    \"altimg-width\": \"\",\n                                    \"altimg-height\": \"\",\n                                    \"altimg-valign\": \"\",\n                                    alttext: \"\",\n                                    cdgroup: \"\",\n                                    scriptsizemultiplier: 1 / Math.sqrt(2),\n                                    scriptminsize: \"8px\",\n                                    infixlinebreakstyle: \"before\",\n                                    lineleading: \"1ex\",\n                                    linebreakmultchar: \"\\u2062\",\n                                    indentshift: \"auto\",\n                                    indentalign: \"auto\",\n                                    indenttarget: \"\",\n                                    indentalignfirst: \"indentalign\",\n                                    indentshiftfirst: \"indentshift\",\n                                    indentalignlast: \"indentalign\",\n                                    indentshiftlast: \"indentshift\",\n                                }\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlLayoutNode);\n                e.MmlMath = a;\n            },\n            1334: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MathChoice = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"MathChoice\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return 4;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"notParent\", {\n                                get: function () {\n                                    return !0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.setInheritedAttributes = function (\n                                t,\n                                e,\n                                r,\n                                n\n                            ) {\n                                var o = e ? 0 : Math.max(0, Math.min(r, 2)) + 1,\n                                    i =\n                                        this.childNodes[o] ||\n                                        this.factory.create(\"mrow\");\n                                this.parent.replaceChild(i, this),\n                                    i.setInheritedAttributes(t, e, r, n);\n                            }),\n                            (e.defaults = i(\n                                {},\n                                s.AbstractMmlBaseNode.defaults\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlBaseNode);\n                e.MathChoice = a;\n            },\n            6661: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMenclose = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.ORD), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"menclose\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return -1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"linebreakContininer\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.prototype.setTeXclass = function (t) {\n                                return (\n                                    (t = this.childNodes[0].setTeXclass(t)),\n                                    this.updateTeXclass(this.childNodes[0]),\n                                    t\n                                );\n                            }),\n                            (e.defaults = i(i({}, s.AbstractMmlNode.defaults), {\n                                notation: \"longdiv\",\n                            })),\n                            e\n                        );\n                    })(s.AbstractMmlNode);\n                e.MmlMenclose = a;\n            },\n            1581: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMerror = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.ORD), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"merror\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return -1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"linebreakContainer\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.defaults = i({}, s.AbstractMmlNode.defaults)),\n                            e\n                        );\n                    })(s.AbstractMmlNode);\n                e.MmlMerror = a;\n            },\n            5410: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMfenced = void 0);\n                var a = r(9007),\n                    l = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (\n                                (e.texclass = a.TEXCLASS.INNER),\n                                (e.separators = []),\n                                (e.open = null),\n                                (e.close = null),\n                                e\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mfenced\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.setTeXclass = function (t) {\n                                this.getPrevClass(t),\n                                    this.open && (t = this.open.setTeXclass(t)),\n                                    this.childNodes[0] &&\n                                        (t = this.childNodes[0].setTeXclass(t));\n                                for (\n                                    var e = 1, r = this.childNodes.length;\n                                    e < r;\n                                    e++\n                                )\n                                    this.separators[e - 1] &&\n                                        (t =\n                                            this.separators[e - 1].setTeXclass(\n                                                t\n                                            )),\n                                        this.childNodes[e] &&\n                                            (t =\n                                                this.childNodes[e].setTeXclass(\n                                                    t\n                                                ));\n                                return (\n                                    this.close &&\n                                        (t = this.close.setTeXclass(t)),\n                                    this.updateTeXclass(this.open),\n                                    t\n                                );\n                            }),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (e, r, n, o) {\n                                    var i, a;\n                                    this.addFakeNodes();\n                                    try {\n                                        for (\n                                            var l = s(\n                                                    [\n                                                        this.open,\n                                                        this.close,\n                                                    ].concat(this.separators)\n                                                ),\n                                                c = l.next();\n                                            !c.done;\n                                            c = l.next()\n                                        ) {\n                                            var u = c.value;\n                                            u &&\n                                                u.setInheritedAttributes(\n                                                    e,\n                                                    r,\n                                                    n,\n                                                    o\n                                                );\n                                        }\n                                    } catch (t) {\n                                        i = { error: t };\n                                    } finally {\n                                        try {\n                                            c &&\n                                                !c.done &&\n                                                (a = l.return) &&\n                                                a.call(l);\n                                        } finally {\n                                            if (i) throw i.error;\n                                        }\n                                    }\n                                    t.prototype.setChildInheritedAttributes.call(\n                                        this,\n                                        e,\n                                        r,\n                                        n,\n                                        o\n                                    );\n                                }),\n                            (e.prototype.addFakeNodes = function () {\n                                var t,\n                                    e,\n                                    r = this.attributes.getList(\n                                        \"open\",\n                                        \"close\",\n                                        \"separators\"\n                                    ),\n                                    n = r.open,\n                                    o = r.close,\n                                    i = r.separators;\n                                if (\n                                    ((n = n.replace(/[ \\t\\n\\r]/g, \"\")),\n                                    (o = o.replace(/[ \\t\\n\\r]/g, \"\")),\n                                    (i = i.replace(/[ \\t\\n\\r]/g, \"\")),\n                                    n &&\n                                        (this.open = this.fakeNode(\n                                            n,\n                                            { fence: !0, form: \"prefix\" },\n                                            a.TEXCLASS.OPEN\n                                        )),\n                                    i)\n                                ) {\n                                    for (\n                                        ;\n                                        i.length < this.childNodes.length - 1;\n\n                                    )\n                                        i += i.charAt(i.length - 1);\n                                    var l = 0;\n                                    try {\n                                        for (\n                                            var c = s(this.childNodes.slice(1)),\n                                                u = c.next();\n                                            !u.done;\n                                            u = c.next()\n                                        ) {\n                                            u.value &&\n                                                this.separators.push(\n                                                    this.fakeNode(i.charAt(l++))\n                                                );\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            u &&\n                                                !u.done &&\n                                                (e = c.return) &&\n                                                e.call(c);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                }\n                                o &&\n                                    (this.close = this.fakeNode(\n                                        o,\n                                        { fence: !0, form: \"postfix\" },\n                                        a.TEXCLASS.CLOSE\n                                    ));\n                            }),\n                            (e.prototype.fakeNode = function (t, e, r) {\n                                void 0 === e && (e = {}),\n                                    void 0 === r && (r = null);\n                                var n = this.factory.create(\"text\").setText(t),\n                                    o = this.factory.create(\"mo\", e, [n]);\n                                return (o.texClass = r), (o.parent = this), o;\n                            }),\n                            (e.defaults = i(i({}, a.AbstractMmlNode.defaults), {\n                                open: \"(\",\n                                close: \")\",\n                                separators: \",\",\n                            })),\n                            e\n                        );\n                    })(a.AbstractMmlNode);\n                e.MmlMfenced = l;\n            },\n            6850: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMfrac = void 0);\n                var a = r(9007),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mfrac\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return 2;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"linebreakContainer\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.prototype.setTeXclass = function (t) {\n                                var e, r;\n                                this.getPrevClass(t);\n                                try {\n                                    for (\n                                        var n = s(this.childNodes),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        o.value.setTeXclass(null);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (r = n.return) &&\n                                            r.call(n);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return this;\n                            }),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (t, e, r, n) {\n                                    (!e || r > 0) && r++,\n                                        this.childNodes[0].setInheritedAttributes(\n                                            t,\n                                            !1,\n                                            r,\n                                            n\n                                        ),\n                                        this.childNodes[1].setInheritedAttributes(\n                                            t,\n                                            !1,\n                                            r,\n                                            !0\n                                        );\n                                }),\n                            (e.defaults = i(\n                                i({}, a.AbstractMmlBaseNode.defaults),\n                                {\n                                    linethickness: \"medium\",\n                                    numalign: \"center\",\n                                    denomalign: \"center\",\n                                    bevelled: !1,\n                                }\n                            )),\n                            e\n                        );\n                    })(a.AbstractMmlBaseNode);\n                e.MmlMfrac = l;\n            },\n            3985: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMglyph = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.ORD), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mglyph\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.verifyAttributes = function (e) {\n                                var r = this.attributes.getList(\n                                        \"src\",\n                                        \"fontfamily\",\n                                        \"index\"\n                                    ),\n                                    n = r.src,\n                                    o = r.fontfamily,\n                                    i = r.index;\n                                \"\" !== n || (\"\" !== o && \"\" !== i)\n                                    ? t.prototype.verifyAttributes.call(this, e)\n                                    : this.mError(\n                                          \"mglyph must have either src or fontfamily and index attributes\",\n                                          e,\n                                          !0\n                                      );\n                            }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlTokenNode.defaults),\n                                {\n                                    alt: \"\",\n                                    src: \"\",\n                                    index: \"\",\n                                    width: \"auto\",\n                                    height: \"auto\",\n                                    valign: \"0em\",\n                                }\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlTokenNode);\n                e.MmlMglyph = a;\n            },\n            450: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMi = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.ORD), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mi\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.setInheritedAttributes = function (\n                                r,\n                                n,\n                                o,\n                                i\n                            ) {\n                                void 0 === r && (r = {}),\n                                    void 0 === n && (n = !1),\n                                    void 0 === o && (o = 0),\n                                    void 0 === i && (i = !1),\n                                    t.prototype.setInheritedAttributes.call(\n                                        this,\n                                        r,\n                                        n,\n                                        o,\n                                        i\n                                    ),\n                                    this.getText().match(e.singleCharacter) &&\n                                        !r.mathvariant &&\n                                        this.attributes.setInherited(\n                                            \"mathvariant\",\n                                            \"italic\"\n                                        );\n                            }),\n                            (e.prototype.setTeXclass = function (t) {\n                                this.getPrevClass(t);\n                                var r = this.getText();\n                                return (\n                                    r.length > 1 &&\n                                        r.match(e.operatorName) &&\n                                        \"normal\" ===\n                                            this.attributes.get(\n                                                \"mathvariant\"\n                                            ) &&\n                                        void 0 === this.getProperty(\"autoOP\") &&\n                                        void 0 ===\n                                            this.getProperty(\"texClass\") &&\n                                        ((this.texClass = s.TEXCLASS.OP),\n                                        this.setProperty(\"autoOP\", !0)),\n                                    this\n                                );\n                            }),\n                            (e.defaults = i(\n                                {},\n                                s.AbstractMmlTokenNode.defaults\n                            )),\n                            (e.operatorName = /^[a-z][a-z0-9]*$/i),\n                            (e.singleCharacter =\n                                /^[\\uD800-\\uDBFF]?.[\\u0300-\\u036F\\u1AB0-\\u1ABE\\u1DC0-\\u1DFF\\u20D0-\\u20EF]*$/),\n                            e\n                        );\n                    })(s.AbstractMmlTokenNode);\n                e.MmlMi = a;\n            },\n            6405: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlNone =\n                        e.MmlMprescripts =\n                        e.MmlMmultiscripts =\n                            void 0);\n                var s = r(9007),\n                    a = r(4461),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mmultiscripts\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return 1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (t, e, r, n) {\n                                    this.childNodes[0].setInheritedAttributes(\n                                        t,\n                                        e,\n                                        r,\n                                        n\n                                    );\n                                    for (\n                                        var o = !1, i = 1, s = 0;\n                                        i < this.childNodes.length;\n                                        i++\n                                    ) {\n                                        var a = this.childNodes[i];\n                                        if (a.isKind(\"mprescripts\")) {\n                                            if (!o && ((o = !0), i % 2 == 0)) {\n                                                var l =\n                                                    this.factory.create(\"mrow\");\n                                                this.childNodes.splice(i, 0, l),\n                                                    (l.parent = this),\n                                                    i++;\n                                            }\n                                        } else {\n                                            var c = n || s % 2 == 0;\n                                            a.setInheritedAttributes(\n                                                t,\n                                                !1,\n                                                r + 1,\n                                                c\n                                            ),\n                                                s++;\n                                        }\n                                    }\n                                    this.childNodes.length % 2 == (o ? 1 : 0) &&\n                                        (this.appendChild(\n                                            this.factory.create(\"mrow\")\n                                        ),\n                                        this.childNodes[\n                                            this.childNodes.length - 1\n                                        ].setInheritedAttributes(\n                                            t,\n                                            !1,\n                                            r + 1,\n                                            n\n                                        ));\n                                }),\n                            (e.prototype.verifyChildren = function (e) {\n                                for (\n                                    var r = !1, n = e.fixMmultiscripts, o = 0;\n                                    o < this.childNodes.length;\n                                    o++\n                                ) {\n                                    var i = this.childNodes[o];\n                                    i.isKind(\"mprescripts\") &&\n                                        (r\n                                            ? i.mError(\n                                                  i.kind +\n                                                      \" can only appear once in \" +\n                                                      this.kind,\n                                                  e,\n                                                  !0\n                                              )\n                                            : ((r = !0),\n                                              o % 2 != 0 ||\n                                                  n ||\n                                                  this.mError(\n                                                      \"There must be an equal number of prescripts of each type\",\n                                                      e\n                                                  )));\n                                }\n                                this.childNodes.length % 2 != (r ? 1 : 0) ||\n                                    n ||\n                                    this.mError(\n                                        \"There must be an equal number of scripts of each type\",\n                                        e\n                                    ),\n                                    t.prototype.verifyChildren.call(this, e);\n                            }),\n                            (e.defaults = i({}, a.MmlMsubsup.defaults)),\n                            e\n                        );\n                    })(a.MmlMsubsup);\n                e.MmlMmultiscripts = l;\n                var c = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"mprescripts\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"arity\", {\n                            get: function () {\n                                return 0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.verifyTree = function (e) {\n                            t.prototype.verifyTree.call(this, e),\n                                this.parent &&\n                                    !this.parent.isKind(\"mmultiscripts\") &&\n                                    this.mError(\n                                        this.kind +\n                                            \" must be a child of mmultiscripts\",\n                                        e,\n                                        !0\n                                    );\n                        }),\n                        (e.defaults = i({}, s.AbstractMmlNode.defaults)),\n                        e\n                    );\n                })(s.AbstractMmlNode);\n                e.MmlMprescripts = c;\n                var u = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"none\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"arity\", {\n                            get: function () {\n                                return 0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.verifyTree = function (e) {\n                            t.prototype.verifyTree.call(this, e),\n                                this.parent &&\n                                    !this.parent.isKind(\"mmultiscripts\") &&\n                                    this.mError(\n                                        this.kind +\n                                            \" must be a child of mmultiscripts\",\n                                        e,\n                                        !0\n                                    );\n                        }),\n                        (e.defaults = i({}, s.AbstractMmlNode.defaults)),\n                        e\n                    );\n                })(s.AbstractMmlNode);\n                e.MmlNone = u;\n            },\n            3050: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMn = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.ORD), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mn\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.defaults = i(\n                                {},\n                                s.AbstractMmlTokenNode.defaults\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlTokenNode);\n                e.MmlMn = a;\n            },\n            2756: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    a =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMo = void 0);\n                var l = r(9007),\n                    c = r(4082),\n                    u = r(505),\n                    p = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (\n                                (e._texClass = null),\n                                (e.lspace = 5 / 18),\n                                (e.rspace = 5 / 18),\n                                e\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"texClass\", {\n                                get: function () {\n                                    if (null === this._texClass) {\n                                        var t = this.getText(),\n                                            e = s(\n                                                this.handleExplicitForm(\n                                                    this.getForms()\n                                                ),\n                                                3\n                                            ),\n                                            r = e[0],\n                                            n = e[1],\n                                            o = e[2],\n                                            i = this.constructor.OPTABLE,\n                                            a = i[r][t] || i[n][t] || i[o][t];\n                                        return a ? a[2] : l.TEXCLASS.REL;\n                                    }\n                                    return this._texClass;\n                                },\n                                set: function (t) {\n                                    this._texClass = t;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mo\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"isEmbellished\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            Object.defineProperty(e.prototype, \"hasNewLine\", {\n                                get: function () {\n                                    return (\n                                        \"newline\" ===\n                                        this.attributes.get(\"linebreak\")\n                                    );\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.coreParent = function () {\n                                for (\n                                    var t = this,\n                                        e = this,\n                                        r = this.factory.getNodeClass(\"math\");\n                                    e &&\n                                    e.isEmbellished &&\n                                    e.coreMO() === this &&\n                                    !(e instanceof r);\n\n                                )\n                                    (t = e), (e = e.parent);\n                                return t;\n                            }),\n                            (e.prototype.coreText = function (t) {\n                                if (!t) return \"\";\n                                if (t.isEmbellished)\n                                    return t.coreMO().getText();\n                                for (\n                                    ;\n                                    (((t.isKind(\"mrow\") ||\n                                        (t.isKind(\"TeXAtom\") &&\n                                            t.texClass !==\n                                                l.TEXCLASS.VCENTER) ||\n                                        t.isKind(\"mstyle\") ||\n                                        t.isKind(\"mphantom\")) &&\n                                        1 === t.childNodes.length) ||\n                                        t.isKind(\"munderover\")) &&\n                                    t.childNodes[0];\n\n                                )\n                                    t = t.childNodes[0];\n                                return t.isToken ? t.getText() : \"\";\n                            }),\n                            (e.prototype.hasSpacingAttributes = function () {\n                                return (\n                                    this.attributes.isSet(\"lspace\") ||\n                                    this.attributes.isSet(\"rspace\")\n                                );\n                            }),\n                            Object.defineProperty(e.prototype, \"isAccent\", {\n                                get: function () {\n                                    var t = !1,\n                                        e = this.coreParent().parent;\n                                    if (e) {\n                                        var r = e.isKind(\"mover\")\n                                            ? e.childNodes[e.over].coreMO()\n                                                ? \"accent\"\n                                                : \"\"\n                                            : e.isKind(\"munder\")\n                                              ? e.childNodes[e.under].coreMO()\n                                                  ? \"accentunder\"\n                                                  : \"\"\n                                              : e.isKind(\"munderover\")\n                                                ? this ===\n                                                  e.childNodes[e.over].coreMO()\n                                                    ? \"accent\"\n                                                    : this ===\n                                                        e.childNodes[\n                                                            e.under\n                                                        ].coreMO()\n                                                      ? \"accentunder\"\n                                                      : \"\"\n                                                : \"\";\n                                        if (r)\n                                            t =\n                                                void 0 !==\n                                                e.attributes.getExplicit(r)\n                                                    ? t\n                                                    : this.attributes.get(\n                                                          \"accent\"\n                                                      );\n                                    }\n                                    return t;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.setTeXclass = function (t) {\n                                var e = this.attributes.getList(\n                                        \"form\",\n                                        \"fence\"\n                                    ),\n                                    r = e.form,\n                                    n = e.fence;\n                                return void 0 ===\n                                    this.getProperty(\"texClass\") &&\n                                    (this.attributes.isSet(\"lspace\") ||\n                                        this.attributes.isSet(\"rspace\"))\n                                    ? null\n                                    : (n &&\n                                          this.texClass === l.TEXCLASS.REL &&\n                                          (\"prefix\" === r &&\n                                              (this.texClass = l.TEXCLASS.OPEN),\n                                          \"postfix\" === r &&\n                                              (this.texClass =\n                                                  l.TEXCLASS.CLOSE)),\n                                      this.adjustTeXclass(t));\n                            }),\n                            (e.prototype.adjustTeXclass = function (t) {\n                                var e = this.texClass,\n                                    r = this.prevClass;\n                                if (e === l.TEXCLASS.NONE) return t;\n                                if (\n                                    (t\n                                        ? (!t.getProperty(\"autoOP\") ||\n                                              (e !== l.TEXCLASS.BIN &&\n                                                  e !== l.TEXCLASS.REL) ||\n                                              (r = t.texClass = l.TEXCLASS.ORD),\n                                          (r = this.prevClass =\n                                              t.texClass || l.TEXCLASS.ORD),\n                                          (this.prevLevel =\n                                              this.attributes.getInherited(\n                                                  \"scriptlevel\"\n                                              )))\n                                        : (r = this.prevClass =\n                                              l.TEXCLASS.NONE),\n                                    e !== l.TEXCLASS.BIN ||\n                                        (r !== l.TEXCLASS.NONE &&\n                                            r !== l.TEXCLASS.BIN &&\n                                            r !== l.TEXCLASS.OP &&\n                                            r !== l.TEXCLASS.REL &&\n                                            r !== l.TEXCLASS.OPEN &&\n                                            r !== l.TEXCLASS.PUNCT))\n                                )\n                                    if (\n                                        r !== l.TEXCLASS.BIN ||\n                                        (e !== l.TEXCLASS.REL &&\n                                            e !== l.TEXCLASS.CLOSE &&\n                                            e !== l.TEXCLASS.PUNCT)\n                                    ) {\n                                        if (e === l.TEXCLASS.BIN) {\n                                            for (\n                                                var n = this, o = this.parent;\n                                                o &&\n                                                o.parent &&\n                                                o.isEmbellished &&\n                                                (1 === o.childNodes.length ||\n                                                    (!o.isKind(\"mrow\") &&\n                                                        o.core() === n));\n\n                                            )\n                                                (n = o), (o = o.parent);\n                                            o.childNodes[\n                                                o.childNodes.length - 1\n                                            ] === n &&\n                                                (this.texClass =\n                                                    l.TEXCLASS.ORD);\n                                        }\n                                    } else\n                                        t.texClass = this.prevClass =\n                                            l.TEXCLASS.ORD;\n                                else this.texClass = l.TEXCLASS.ORD;\n                                return this;\n                            }),\n                            (e.prototype.setInheritedAttributes = function (\n                                e,\n                                r,\n                                n,\n                                o\n                            ) {\n                                void 0 === e && (e = {}),\n                                    void 0 === r && (r = !1),\n                                    void 0 === n && (n = 0),\n                                    void 0 === o && (o = !1),\n                                    t.prototype.setInheritedAttributes.call(\n                                        this,\n                                        e,\n                                        r,\n                                        n,\n                                        o\n                                    );\n                                var i = this.getText();\n                                this.checkOperatorTable(i),\n                                    this.checkPseudoScripts(i),\n                                    this.checkPrimes(i),\n                                    this.checkMathAccent(i);\n                            }),\n                            (e.prototype.checkOperatorTable = function (t) {\n                                var e,\n                                    r,\n                                    n = s(\n                                        this.handleExplicitForm(\n                                            this.getForms()\n                                        ),\n                                        3\n                                    ),\n                                    o = n[0],\n                                    i = n[1],\n                                    l = n[2];\n                                this.attributes.setInherited(\"form\", o);\n                                var u = this.constructor.OPTABLE,\n                                    p = u[o][t] || u[i][t] || u[l][t];\n                                if (p) {\n                                    void 0 === this.getProperty(\"texClass\") &&\n                                        (this.texClass = p[2]);\n                                    try {\n                                        for (\n                                            var h = a(Object.keys(p[3] || {})),\n                                                f = h.next();\n                                            !f.done;\n                                            f = h.next()\n                                        ) {\n                                            var d = f.value;\n                                            this.attributes.setInherited(\n                                                d,\n                                                p[3][d]\n                                            );\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            f &&\n                                                !f.done &&\n                                                (r = h.return) &&\n                                                r.call(h);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                                    (this.lspace = (p[0] + 1) / 18),\n                                        (this.rspace = (p[1] + 1) / 18);\n                                } else {\n                                    var m = (0, c.getRange)(t);\n                                    if (m) {\n                                        void 0 ===\n                                            this.getProperty(\"texClass\") &&\n                                            (this.texClass = m[2]);\n                                        var y =\n                                            this.constructor.MMLSPACING[m[2]];\n                                        (this.lspace = (y[0] + 1) / 18),\n                                            (this.rspace = (y[1] + 1) / 18);\n                                    }\n                                }\n                            }),\n                            (e.prototype.getForms = function () {\n                                for (\n                                    var t = this,\n                                        e = this.parent,\n                                        r = this.Parent;\n                                    r && r.isEmbellished;\n\n                                )\n                                    (t = e), (e = r.parent), (r = r.Parent);\n                                if (\n                                    e &&\n                                    e.isKind(\"mrow\") &&\n                                    1 !== e.nonSpaceLength()\n                                ) {\n                                    if (e.firstNonSpace() === t)\n                                        return [\"prefix\", \"infix\", \"postfix\"];\n                                    if (e.lastNonSpace() === t)\n                                        return [\"postfix\", \"infix\", \"prefix\"];\n                                }\n                                return [\"infix\", \"prefix\", \"postfix\"];\n                            }),\n                            (e.prototype.handleExplicitForm = function (t) {\n                                if (this.attributes.isSet(\"form\")) {\n                                    var e = this.attributes.get(\"form\");\n                                    t = [e].concat(\n                                        t.filter(function (t) {\n                                            return t !== e;\n                                        })\n                                    );\n                                }\n                                return t;\n                            }),\n                            (e.prototype.checkPseudoScripts = function (t) {\n                                var e = this.constructor.pseudoScripts;\n                                if (t.match(e)) {\n                                    var r = this.coreParent().Parent,\n                                        n =\n                                            !r ||\n                                            !(\n                                                r.isKind(\"msubsup\") &&\n                                                !r.isKind(\"msub\")\n                                            );\n                                    this.setProperty(\"pseudoscript\", n),\n                                        n &&\n                                            (this.attributes.setInherited(\n                                                \"lspace\",\n                                                0\n                                            ),\n                                            this.attributes.setInherited(\n                                                \"rspace\",\n                                                0\n                                            ));\n                                }\n                            }),\n                            (e.prototype.checkPrimes = function (t) {\n                                var e = this.constructor.primes;\n                                if (t.match(e)) {\n                                    var r = this.constructor.remapPrimes,\n                                        n = (0, u.unicodeString)(\n                                            (0, u.unicodeChars)(t).map(\n                                                function (t) {\n                                                    return r[t];\n                                                }\n                                            )\n                                        );\n                                    this.setProperty(\"primes\", n);\n                                }\n                            }),\n                            (e.prototype.checkMathAccent = function (t) {\n                                var e = this.Parent;\n                                if (\n                                    void 0 === this.getProperty(\"mathaccent\") &&\n                                    e &&\n                                    e.isKind(\"munderover\")\n                                ) {\n                                    var r = e.childNodes[0];\n                                    if (\n                                        !r.isEmbellished ||\n                                        r.coreMO() !== this\n                                    ) {\n                                        var n = this.constructor.mathaccents;\n                                        t.match(n) &&\n                                            this.setProperty(\"mathaccent\", !0);\n                                    }\n                                }\n                            }),\n                            (e.defaults = i(\n                                i({}, l.AbstractMmlTokenNode.defaults),\n                                {\n                                    form: \"infix\",\n                                    fence: !1,\n                                    separator: !1,\n                                    lspace: \"thickmathspace\",\n                                    rspace: \"thickmathspace\",\n                                    stretchy: !1,\n                                    symmetric: !1,\n                                    maxsize: \"infinity\",\n                                    minsize: \"0em\",\n                                    largeop: !1,\n                                    movablelimits: !1,\n                                    accent: !1,\n                                    linebreak: \"auto\",\n                                    lineleading: \"1ex\",\n                                    linebreakstyle: \"before\",\n                                    indentalign: \"auto\",\n                                    indentshift: \"0\",\n                                    indenttarget: \"\",\n                                    indentalignfirst: \"indentalign\",\n                                    indentshiftfirst: \"indentshift\",\n                                    indentalignlast: \"indentalign\",\n                                    indentshiftlast: \"indentshift\",\n                                }\n                            )),\n                            (e.MMLSPACING = c.MMLSPACING),\n                            (e.OPTABLE = c.OPTABLE),\n                            (e.pseudoScripts = new RegExp(\n                                [\n                                    \"^[\\\"'*`\",\n                                    \"\\xaa\",\n                                    \"\\xb0\",\n                                    \"\\xb2-\\xb4\",\n                                    \"\\xb9\",\n                                    \"\\xba\",\n                                    \"\\u2018-\\u201f\",\n                                    \"\\u2032-\\u2037\\u2057\",\n                                    \"\\u2070\\u2071\",\n                                    \"\\u2074-\\u207f\",\n                                    \"\\u2080-\\u208e\",\n                                    \"]+$\",\n                                ].join(\"\")\n                            )),\n                            (e.primes = new RegExp(\n                                [\"^[\\\"'`\", \"\\u2018-\\u201f\", \"]+$\"].join(\"\")\n                            )),\n                            (e.remapPrimes = {\n                                34: 8243,\n                                39: 8242,\n                                96: 8245,\n                                8216: 8245,\n                                8217: 8242,\n                                8218: 8242,\n                                8219: 8245,\n                                8220: 8246,\n                                8221: 8243,\n                                8222: 8243,\n                                8223: 8246,\n                            }),\n                            (e.mathaccents = new RegExp(\n                                [\n                                    \"^[\",\n                                    \"\\xb4\\u0301\\u02ca\",\n                                    \"`\\u0300\\u02cb\",\n                                    \"\\xa8\\u0308\",\n                                    \"~\\u0303\\u02dc\",\n                                    \"\\xaf\\u0304\\u02c9\",\n                                    \"\\u02d8\\u0306\",\n                                    \"\\u02c7\\u030c\",\n                                    \"^\\u0302\\u02c6\",\n                                    \"\\u2192\\u20d7\",\n                                    \"\\u02d9\\u0307\",\n                                    \"\\u02da\\u030a\",\n                                    \"\\u20db\",\n                                    \"\\u20dc\",\n                                    \"]$\",\n                                ].join(\"\")\n                            )),\n                            e\n                        );\n                    })(l.AbstractMmlTokenNode);\n                e.MmlMo = p;\n            },\n            7238: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMpadded = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mpadded\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlLayoutNode.defaults),\n                                {\n                                    width: \"\",\n                                    height: \"\",\n                                    depth: \"\",\n                                    lspace: 0,\n                                    voffset: 0,\n                                }\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlLayoutNode);\n                e.MmlMpadded = a;\n            },\n            5741: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMphantom = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.ORD), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mphantom\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.defaults = i(\n                                {},\n                                s.AbstractMmlLayoutNode.defaults\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlLayoutNode);\n                e.MmlMphantom = a;\n            },\n            6145: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMroot = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.ORD), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mroot\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return 2;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.setTeXclass = function (t) {\n                                return (\n                                    this.getPrevClass(t),\n                                    this.childNodes[0].setTeXclass(null),\n                                    this.childNodes[1].setTeXclass(null),\n                                    this\n                                );\n                            }),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (t, e, r, n) {\n                                    this.childNodes[0].setInheritedAttributes(\n                                        t,\n                                        e,\n                                        r,\n                                        !0\n                                    ),\n                                        this.childNodes[1].setInheritedAttributes(\n                                            t,\n                                            !1,\n                                            r + 2,\n                                            n\n                                        );\n                                }),\n                            (e.defaults = i({}, s.AbstractMmlNode.defaults)),\n                            e\n                        );\n                    })(s.AbstractMmlNode);\n                e.MmlMroot = a;\n            },\n            9878: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlInferredMrow = e.MmlMrow = void 0);\n                var a = r(9007),\n                    l = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e._core = null), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mrow\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"isSpacelike\", {\n                                get: function () {\n                                    var t, e;\n                                    try {\n                                        for (\n                                            var r = s(this.childNodes),\n                                                n = r.next();\n                                            !n.done;\n                                            n = r.next()\n                                        ) {\n                                            if (!n.value.isSpacelike) return !1;\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            n &&\n                                                !n.done &&\n                                                (e = r.return) &&\n                                                e.call(r);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                    return !0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"isEmbellished\",\n                                {\n                                    get: function () {\n                                        var t,\n                                            e,\n                                            r = !1,\n                                            n = 0;\n                                        try {\n                                            for (\n                                                var o = s(this.childNodes),\n                                                    i = o.next();\n                                                !i.done;\n                                                i = o.next()\n                                            ) {\n                                                var a = i.value;\n                                                if (a)\n                                                    if (a.isEmbellished) {\n                                                        if (r) return !1;\n                                                        (r = !0),\n                                                            (this._core = n);\n                                                    } else if (!a.isSpacelike)\n                                                        return !1;\n                                                n++;\n                                            }\n                                        } catch (e) {\n                                            t = { error: e };\n                                        } finally {\n                                            try {\n                                                i &&\n                                                    !i.done &&\n                                                    (e = o.return) &&\n                                                    e.call(o);\n                                            } finally {\n                                                if (t) throw t.error;\n                                            }\n                                        }\n                                        return r;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.prototype.core = function () {\n                                return this.isEmbellished && null != this._core\n                                    ? this.childNodes[this._core]\n                                    : this;\n                            }),\n                            (e.prototype.coreMO = function () {\n                                return this.isEmbellished && null != this._core\n                                    ? this.childNodes[this._core].coreMO()\n                                    : this;\n                            }),\n                            (e.prototype.nonSpaceLength = function () {\n                                var t,\n                                    e,\n                                    r = 0;\n                                try {\n                                    for (\n                                        var n = s(this.childNodes),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var i = o.value;\n                                        i && !i.isSpacelike && r++;\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (e = n.return) &&\n                                            e.call(n);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                                return r;\n                            }),\n                            (e.prototype.firstNonSpace = function () {\n                                var t, e;\n                                try {\n                                    for (\n                                        var r = s(this.childNodes),\n                                            n = r.next();\n                                        !n.done;\n                                        n = r.next()\n                                    ) {\n                                        var o = n.value;\n                                        if (o && !o.isSpacelike) return o;\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        n &&\n                                            !n.done &&\n                                            (e = r.return) &&\n                                            e.call(r);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                                return null;\n                            }),\n                            (e.prototype.lastNonSpace = function () {\n                                for (\n                                    var t = this.childNodes.length;\n                                    --t >= 0;\n\n                                ) {\n                                    var e = this.childNodes[t];\n                                    if (e && !e.isSpacelike) return e;\n                                }\n                                return null;\n                            }),\n                            (e.prototype.setTeXclass = function (t) {\n                                var e, r, n, o;\n                                if (\n                                    null != this.getProperty(\"open\") ||\n                                    null != this.getProperty(\"close\")\n                                ) {\n                                    this.getPrevClass(t), (t = null);\n                                    try {\n                                        for (\n                                            var i = s(this.childNodes),\n                                                l = i.next();\n                                            !l.done;\n                                            l = i.next()\n                                        ) {\n                                            t = l.value.setTeXclass(t);\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            l &&\n                                                !l.done &&\n                                                (r = i.return) &&\n                                                r.call(i);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                                    null == this.texClass &&\n                                        (this.texClass = a.TEXCLASS.INNER);\n                                } else {\n                                    try {\n                                        for (\n                                            var c = s(this.childNodes),\n                                                u = c.next();\n                                            !u.done;\n                                            u = c.next()\n                                        ) {\n                                            t = u.value.setTeXclass(t);\n                                        }\n                                    } catch (t) {\n                                        n = { error: t };\n                                    } finally {\n                                        try {\n                                            u &&\n                                                !u.done &&\n                                                (o = c.return) &&\n                                                o.call(c);\n                                        } finally {\n                                            if (n) throw n.error;\n                                        }\n                                    }\n                                    this.childNodes[0] &&\n                                        this.updateTeXclass(this.childNodes[0]);\n                                }\n                                return t;\n                            }),\n                            (e.defaults = i({}, a.AbstractMmlNode.defaults)),\n                            e\n                        );\n                    })(a.AbstractMmlNode);\n                e.MmlMrow = l;\n                var c = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"inferredMrow\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isInferred\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"notParent\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.toString = function () {\n                            return \"[\" + this.childNodes.join(\",\") + \"]\";\n                        }),\n                        (e.defaults = l.defaults),\n                        e\n                    );\n                })(l);\n                e.MmlInferredMrow = c;\n            },\n            7265: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMs = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.ORD), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"ms\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlTokenNode.defaults),\n                                { lquote: '\"', rquote: '\"' }\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlTokenNode);\n                e.MmlMs = a;\n            },\n            6030: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMspace = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.NONE), e;\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.setTeXclass = function (t) {\n                                return t;\n                            }),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mspace\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return 0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"isSpacelike\", {\n                                get: function () {\n                                    return !0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"hasNewline\", {\n                                get: function () {\n                                    var t = this.attributes;\n                                    return (\n                                        null == t.getExplicit(\"width\") &&\n                                        null == t.getExplicit(\"height\") &&\n                                        null == t.getExplicit(\"depth\") &&\n                                        \"newline\" === t.get(\"linebreak\")\n                                    );\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlTokenNode.defaults),\n                                {\n                                    width: \"0em\",\n                                    height: \"0ex\",\n                                    depth: \"0ex\",\n                                    linebreak: \"auto\",\n                                }\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlTokenNode);\n                e.MmlMspace = a;\n            },\n            7131: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMsqrt = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.ORD), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"msqrt\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return -1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"linebreakContainer\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.prototype.setTeXclass = function (t) {\n                                return (\n                                    this.getPrevClass(t),\n                                    this.childNodes[0].setTeXclass(null),\n                                    this\n                                );\n                            }),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (t, e, r, n) {\n                                    this.childNodes[0].setInheritedAttributes(\n                                        t,\n                                        e,\n                                        r,\n                                        !0\n                                    );\n                                }),\n                            (e.defaults = i({}, s.AbstractMmlNode.defaults)),\n                            e\n                        );\n                    })(s.AbstractMmlNode);\n                e.MmlMsqrt = a;\n            },\n            1314: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMstyle = void 0);\n                var s = r(9007),\n                    a = r(91),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mstyle\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"notParent\", {\n                                get: function () {\n                                    return (\n                                        this.childNodes[0] &&\n                                        1 ===\n                                            this.childNodes[0].childNodes.length\n                                    );\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (t, e, r, n) {\n                                    var o =\n                                        this.attributes.getExplicit(\n                                            \"scriptlevel\"\n                                        );\n                                    null != o &&\n                                        ((o = o.toString()).match(/^\\s*[-+]/)\n                                            ? (r += parseInt(o))\n                                            : (r = parseInt(o)),\n                                        (n = !1));\n                                    var i =\n                                        this.attributes.getExplicit(\n                                            \"displaystyle\"\n                                        );\n                                    null != i && ((e = !0 === i), (n = !1));\n                                    var s =\n                                        this.attributes.getExplicit(\n                                            \"data-cramped\"\n                                        );\n                                    null != s && (n = s),\n                                        (t = this.addInheritedAttributes(\n                                            t,\n                                            this.attributes.getAllAttributes()\n                                        )),\n                                        this.childNodes[0].setInheritedAttributes(\n                                            t,\n                                            e,\n                                            r,\n                                            n\n                                        );\n                                }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlLayoutNode.defaults),\n                                {\n                                    scriptlevel: a.INHERIT,\n                                    displaystyle: a.INHERIT,\n                                    scriptsizemultiplier: 1 / Math.sqrt(2),\n                                    scriptminsize: \"8px\",\n                                    mathbackground: a.INHERIT,\n                                    mathcolor: a.INHERIT,\n                                    dir: a.INHERIT,\n                                    infixlinebreakstyle: \"before\",\n                                }\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlLayoutNode);\n                e.MmlMstyle = l;\n            },\n            4461: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMsup = e.MmlMsub = e.MmlMsubsup = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"msubsup\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return 3;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"base\", {\n                                get: function () {\n                                    return 0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"sub\", {\n                                get: function () {\n                                    return 1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"sup\", {\n                                get: function () {\n                                    return 2;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (t, e, r, n) {\n                                    var o = this.childNodes;\n                                    o[0].setInheritedAttributes(t, e, r, n),\n                                        o[1].setInheritedAttributes(\n                                            t,\n                                            !1,\n                                            r + 1,\n                                            n || 1 === this.sub\n                                        ),\n                                        o[2] &&\n                                            o[2].setInheritedAttributes(\n                                                t,\n                                                !1,\n                                                r + 1,\n                                                n || 2 === this.sub\n                                            );\n                                }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlBaseNode.defaults),\n                                { subscriptshift: \"\", superscriptshift: \"\" }\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlBaseNode);\n                e.MmlMsubsup = a;\n                var l = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"msub\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"arity\", {\n                            get: function () {\n                                return 2;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.defaults = i({}, a.defaults)),\n                        e\n                    );\n                })(a);\n                e.MmlMsub = l;\n                var c = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"msup\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"arity\", {\n                            get: function () {\n                                return 2;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"sup\", {\n                            get: function () {\n                                return 1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"sub\", {\n                            get: function () {\n                                return 2;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.defaults = i({}, a.defaults)),\n                        e\n                    );\n                })(a);\n                e.MmlMsup = c;\n            },\n            1349: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMtable = void 0);\n                var a = r(9007),\n                    l = r(505),\n                    c = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (\n                                (e.properties = { useHeight: !0 }),\n                                (e.texclass = a.TEXCLASS.ORD),\n                                e\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mtable\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"linebreakContainer\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.prototype.setInheritedAttributes = function (\n                                e,\n                                r,\n                                n,\n                                o\n                            ) {\n                                var i, l;\n                                try {\n                                    for (\n                                        var c = s(a.indentAttributes),\n                                            u = c.next();\n                                        !u.done;\n                                        u = c.next()\n                                    ) {\n                                        var p = u.value;\n                                        e[p] &&\n                                            this.attributes.setInherited(\n                                                p,\n                                                e[p][1]\n                                            ),\n                                            void 0 !==\n                                                this.attributes.getExplicit(\n                                                    p\n                                                ) &&\n                                                delete this.attributes.getAllAttributes()[\n                                                    p\n                                                ];\n                                    }\n                                } catch (t) {\n                                    i = { error: t };\n                                } finally {\n                                    try {\n                                        u &&\n                                            !u.done &&\n                                            (l = c.return) &&\n                                            l.call(c);\n                                    } finally {\n                                        if (i) throw i.error;\n                                    }\n                                }\n                                t.prototype.setInheritedAttributes.call(\n                                    this,\n                                    e,\n                                    r,\n                                    n,\n                                    o\n                                );\n                            }),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (t, e, r, n) {\n                                    var o, i, a, c;\n                                    try {\n                                        for (\n                                            var u = s(this.childNodes),\n                                                p = u.next();\n                                            !p.done;\n                                            p = u.next()\n                                        ) {\n                                            (y = p.value).isKind(\"mtr\") ||\n                                                this.replaceChild(\n                                                    this.factory.create(\"mtr\"),\n                                                    y\n                                                ).appendChild(y);\n                                        }\n                                    } catch (t) {\n                                        o = { error: t };\n                                    } finally {\n                                        try {\n                                            p &&\n                                                !p.done &&\n                                                (i = u.return) &&\n                                                i.call(u);\n                                        } finally {\n                                            if (o) throw o.error;\n                                        }\n                                    }\n                                    (r = this.getProperty(\"scriptlevel\") || r),\n                                        (e = !(\n                                            !this.attributes.getExplicit(\n                                                \"displaystyle\"\n                                            ) &&\n                                            !this.attributes.getDefault(\n                                                \"displaystyle\"\n                                            )\n                                        )),\n                                        (t = this.addInheritedAttributes(t, {\n                                            columnalign:\n                                                this.attributes.get(\n                                                    \"columnalign\"\n                                                ),\n                                            rowalign: \"center\",\n                                        }));\n                                    var h =\n                                            this.attributes.getExplicit(\n                                                \"data-cramped\"\n                                            ),\n                                        f = (0, l.split)(\n                                            this.attributes.get(\"rowalign\")\n                                        );\n                                    try {\n                                        for (\n                                            var d = s(this.childNodes),\n                                                m = d.next();\n                                            !m.done;\n                                            m = d.next()\n                                        ) {\n                                            var y = m.value;\n                                            (t.rowalign[1] =\n                                                f.shift() || t.rowalign[1]),\n                                                y.setInheritedAttributes(\n                                                    t,\n                                                    e,\n                                                    r,\n                                                    !!h\n                                                );\n                                        }\n                                    } catch (t) {\n                                        a = { error: t };\n                                    } finally {\n                                        try {\n                                            m &&\n                                                !m.done &&\n                                                (c = d.return) &&\n                                                c.call(d);\n                                        } finally {\n                                            if (a) throw a.error;\n                                        }\n                                    }\n                                }),\n                            (e.prototype.verifyChildren = function (e) {\n                                for (\n                                    var r = null, n = this.factory, o = 0;\n                                    o < this.childNodes.length;\n                                    o++\n                                ) {\n                                    var i = this.childNodes[o];\n                                    if (i.isKind(\"mtr\")) r = null;\n                                    else {\n                                        var s = i.isKind(\"mtd\");\n                                        if (\n                                            (r\n                                                ? (this.removeChild(i), o--)\n                                                : (r = this.replaceChild(\n                                                      n.create(\"mtr\"),\n                                                      i\n                                                  )),\n                                            r.appendChild(\n                                                s ? i : n.create(\"mtd\", {}, [i])\n                                            ),\n                                            !e.fixMtables)\n                                        ) {\n                                            i.parent.removeChild(i),\n                                                (i.parent = this),\n                                                s &&\n                                                    r.appendChild(\n                                                        n.create(\"mtd\")\n                                                    );\n                                            var a = i.mError(\n                                                \"Children of \" +\n                                                    this.kind +\n                                                    \" must be mtr or mlabeledtr\",\n                                                e,\n                                                s\n                                            );\n                                            r.childNodes[\n                                                r.childNodes.length - 1\n                                            ].appendChild(a);\n                                        }\n                                    }\n                                }\n                                t.prototype.verifyChildren.call(this, e);\n                            }),\n                            (e.prototype.setTeXclass = function (t) {\n                                var e, r;\n                                this.getPrevClass(t);\n                                try {\n                                    for (\n                                        var n = s(this.childNodes),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        o.value.setTeXclass(null);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (r = n.return) &&\n                                            r.call(n);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return this;\n                            }),\n                            (e.defaults = i(i({}, a.AbstractMmlNode.defaults), {\n                                align: \"axis\",\n                                rowalign: \"baseline\",\n                                columnalign: \"center\",\n                                groupalign: \"{left}\",\n                                alignmentscope: !0,\n                                columnwidth: \"auto\",\n                                width: \"auto\",\n                                rowspacing: \"1ex\",\n                                columnspacing: \".8em\",\n                                rowlines: \"none\",\n                                columnlines: \"none\",\n                                frame: \"none\",\n                                framespacing: \"0.4em 0.5ex\",\n                                equalrows: !1,\n                                equalcolumns: !1,\n                                displaystyle: !1,\n                                side: \"right\",\n                                minlabelspacing: \"0.8em\",\n                            })),\n                            e\n                        );\n                    })(a.AbstractMmlNode);\n                e.MmlMtable = c;\n            },\n            4359: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMtd = void 0);\n                var s = r(9007),\n                    a = r(91),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mtd\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return -1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"linebreakContainer\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.prototype.verifyChildren = function (e) {\n                                !this.parent || this.parent.isKind(\"mtr\")\n                                    ? t.prototype.verifyChildren.call(this, e)\n                                    : this.mError(\n                                          this.kind +\n                                              \" can only be a child of an mtr or mlabeledtr\",\n                                          e,\n                                          !0\n                                      );\n                            }),\n                            (e.prototype.setTeXclass = function (t) {\n                                return (\n                                    this.getPrevClass(t),\n                                    this.childNodes[0].setTeXclass(null),\n                                    this\n                                );\n                            }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlBaseNode.defaults),\n                                {\n                                    rowspan: 1,\n                                    columnspan: 1,\n                                    rowalign: a.INHERIT,\n                                    columnalign: a.INHERIT,\n                                    groupalign: a.INHERIT,\n                                }\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlBaseNode);\n                e.MmlMtd = l;\n            },\n            4770: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMtext = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.texclass = s.TEXCLASS.ORD), e;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mtext\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"isSpacelike\", {\n                                get: function () {\n                                    return !0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.defaults = i(\n                                {},\n                                s.AbstractMmlTokenNode.defaults\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlTokenNode);\n                e.MmlMtext = a;\n            },\n            5022: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMlabeledtr = e.MmlMtr = void 0);\n                var a = r(9007),\n                    l = r(91),\n                    c = r(505),\n                    u = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"mtr\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"linebreakContainer\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (t, e, r, n) {\n                                    var o, i, a, l;\n                                    try {\n                                        for (\n                                            var u = s(this.childNodes),\n                                                p = u.next();\n                                            !p.done;\n                                            p = u.next()\n                                        ) {\n                                            (m = p.value).isKind(\"mtd\") ||\n                                                this.replaceChild(\n                                                    this.factory.create(\"mtd\"),\n                                                    m\n                                                ).appendChild(m);\n                                        }\n                                    } catch (t) {\n                                        o = { error: t };\n                                    } finally {\n                                        try {\n                                            p &&\n                                                !p.done &&\n                                                (i = u.return) &&\n                                                i.call(u);\n                                        } finally {\n                                            if (o) throw o.error;\n                                        }\n                                    }\n                                    var h = (0, c.split)(\n                                        this.attributes.get(\"columnalign\")\n                                    );\n                                    1 === this.arity &&\n                                        h.unshift(\n                                            this.parent.attributes.get(\"side\")\n                                        ),\n                                        (t = this.addInheritedAttributes(t, {\n                                            rowalign:\n                                                this.attributes.get(\"rowalign\"),\n                                            columnalign: \"center\",\n                                        }));\n                                    try {\n                                        for (\n                                            var f = s(this.childNodes),\n                                                d = f.next();\n                                            !d.done;\n                                            d = f.next()\n                                        ) {\n                                            var m = d.value;\n                                            (t.columnalign[1] =\n                                                h.shift() || t.columnalign[1]),\n                                                m.setInheritedAttributes(\n                                                    t,\n                                                    e,\n                                                    r,\n                                                    n\n                                                );\n                                        }\n                                    } catch (t) {\n                                        a = { error: t };\n                                    } finally {\n                                        try {\n                                            d &&\n                                                !d.done &&\n                                                (l = f.return) &&\n                                                l.call(f);\n                                        } finally {\n                                            if (a) throw a.error;\n                                        }\n                                    }\n                                }),\n                            (e.prototype.verifyChildren = function (e) {\n                                var r, n;\n                                if (\n                                    !this.parent ||\n                                    this.parent.isKind(\"mtable\")\n                                ) {\n                                    try {\n                                        for (\n                                            var o = s(this.childNodes),\n                                                i = o.next();\n                                            !i.done;\n                                            i = o.next()\n                                        ) {\n                                            var a = i.value;\n                                            if (!a.isKind(\"mtd\"))\n                                                this.replaceChild(\n                                                    this.factory.create(\"mtd\"),\n                                                    a\n                                                ).appendChild(a),\n                                                    e.fixMtables ||\n                                                        a.mError(\n                                                            \"Children of \" +\n                                                                this.kind +\n                                                                \" must be mtd\",\n                                                            e\n                                                        );\n                                        }\n                                    } catch (t) {\n                                        r = { error: t };\n                                    } finally {\n                                        try {\n                                            i &&\n                                                !i.done &&\n                                                (n = o.return) &&\n                                                n.call(o);\n                                        } finally {\n                                            if (r) throw r.error;\n                                        }\n                                    }\n                                    t.prototype.verifyChildren.call(this, e);\n                                } else\n                                    this.mError(\n                                        this.kind +\n                                            \" can only be a child of an mtable\",\n                                        e,\n                                        !0\n                                    );\n                            }),\n                            (e.prototype.setTeXclass = function (t) {\n                                var e, r;\n                                this.getPrevClass(t);\n                                try {\n                                    for (\n                                        var n = s(this.childNodes),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        o.value.setTeXclass(null);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (r = n.return) &&\n                                            r.call(n);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return this;\n                            }),\n                            (e.defaults = i(i({}, a.AbstractMmlNode.defaults), {\n                                rowalign: l.INHERIT,\n                                columnalign: l.INHERIT,\n                                groupalign: l.INHERIT,\n                            })),\n                            e\n                        );\n                    })(a.AbstractMmlNode);\n                e.MmlMtr = u;\n                var p = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"mlabeledtr\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"arity\", {\n                            get: function () {\n                                return 1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        e\n                    );\n                })(u);\n                e.MmlMlabeledtr = p;\n            },\n            5184: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlMover = e.MmlMunder = e.MmlMunderover = void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"munderover\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return 3;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"base\", {\n                                get: function () {\n                                    return 0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"under\", {\n                                get: function () {\n                                    return 1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"over\", {\n                                get: function () {\n                                    return 2;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"linebreakContainer\",\n                                {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.prototype.setChildInheritedAttributes =\n                                function (t, e, r, n) {\n                                    var o = this.childNodes;\n                                    o[0].setInheritedAttributes(\n                                        t,\n                                        e,\n                                        r,\n                                        n || !!o[this.over]\n                                    );\n                                    var i = !(\n                                            e ||\n                                            !o[0]\n                                                .coreMO()\n                                                .attributes.get(\"movablelimits\")\n                                        ),\n                                        s = this.constructor.ACCENTS;\n                                    o[1].setInheritedAttributes(\n                                        t,\n                                        !1,\n                                        this.getScriptlevel(s[1], i, r),\n                                        n || 1 === this.under\n                                    ),\n                                        this.setInheritedAccent(\n                                            1,\n                                            s[1],\n                                            e,\n                                            r,\n                                            n,\n                                            i\n                                        ),\n                                        o[2] &&\n                                            (o[2].setInheritedAttributes(\n                                                t,\n                                                !1,\n                                                this.getScriptlevel(s[2], i, r),\n                                                n || 2 === this.under\n                                            ),\n                                            this.setInheritedAccent(\n                                                2,\n                                                s[2],\n                                                e,\n                                                r,\n                                                n,\n                                                i\n                                            ));\n                                }),\n                            (e.prototype.getScriptlevel = function (t, e, r) {\n                                return (!e && this.attributes.get(t)) || r++, r;\n                            }),\n                            (e.prototype.setInheritedAccent = function (\n                                t,\n                                e,\n                                r,\n                                n,\n                                o,\n                                i\n                            ) {\n                                var s = this.childNodes[t];\n                                if (\n                                    null == this.attributes.getExplicit(e) &&\n                                    s.isEmbellished\n                                ) {\n                                    var a = s.coreMO().attributes.get(\"accent\");\n                                    this.attributes.setInherited(e, a),\n                                        a !== this.attributes.getDefault(e) &&\n                                            s.setInheritedAttributes(\n                                                {},\n                                                r,\n                                                this.getScriptlevel(e, i, n),\n                                                o\n                                            );\n                                }\n                            }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlBaseNode.defaults),\n                                { accent: !1, accentunder: !1, align: \"center\" }\n                            )),\n                            (e.ACCENTS = [\"\", \"accentunder\", \"accent\"]),\n                            e\n                        );\n                    })(s.AbstractMmlBaseNode);\n                e.MmlMunderover = a;\n                var l = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"munder\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"arity\", {\n                            get: function () {\n                                return 2;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.defaults = i({}, a.defaults)),\n                        e\n                    );\n                })(a);\n                e.MmlMunder = l;\n                var c = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"mover\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"arity\", {\n                            get: function () {\n                                return 2;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"over\", {\n                            get: function () {\n                                return 1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"under\", {\n                            get: function () {\n                                return 2;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.defaults = i({}, a.defaults)),\n                        (e.ACCENTS = [\"\", \"accent\", \"accentunder\"]),\n                        e\n                    );\n                })(a);\n                e.MmlMover = c;\n            },\n            9102: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlAnnotation =\n                        e.MmlAnnotationXML =\n                        e.MmlSemantics =\n                            void 0);\n                var s = r(9007),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"semantics\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"arity\", {\n                                get: function () {\n                                    return 1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"notParent\", {\n                                get: function () {\n                                    return !0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.defaults = i(\n                                i({}, s.AbstractMmlBaseNode.defaults),\n                                { definitionUrl: null, encoding: null }\n                            )),\n                            e\n                        );\n                    })(s.AbstractMmlBaseNode);\n                e.MmlSemantics = a;\n                var l = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"annotation-xml\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.setChildInheritedAttributes =\n                            function () {}),\n                        (e.defaults = i(i({}, s.AbstractMmlNode.defaults), {\n                            definitionUrl: null,\n                            encoding: null,\n                            cd: \"mathmlkeys\",\n                            name: \"\",\n                            src: null,\n                        })),\n                        e\n                    );\n                })(s.AbstractMmlNode);\n                e.MmlAnnotationXML = l;\n                var c = (function (t) {\n                    function e() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (e.properties = { isChars: !0 }), e;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"annotation\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.defaults = i({}, l.defaults)),\n                        e\n                    );\n                })(l);\n                e.MmlAnnotation = c;\n            },\n            6325: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlVisitor = void 0);\n                var i = r(3909),\n                    s = (function (t) {\n                        function e(e) {\n                            return (\n                                void 0 === e && (e = null),\n                                e || (e = new i.MmlFactory()),\n                                t.call(this, e) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.visitTextNode = function (t) {\n                                for (\n                                    var e = [], r = 1;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r - 1] = arguments[r];\n                            }),\n                            (e.prototype.visitXMLNode = function (t) {\n                                for (\n                                    var e = [], r = 1;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r - 1] = arguments[r];\n                            }),\n                            e\n                        );\n                    })(r(8823).AbstractVisitor);\n                e.MmlVisitor = s;\n            },\n            4082: function (t, e, r) {\n                var n =\n                    (this && this.__values) ||\n                    function (t) {\n                        var e = \"function\" == typeof Symbol && Symbol.iterator,\n                            r = e && t[e],\n                            n = 0;\n                        if (r) return r.call(t);\n                        if (t && \"number\" == typeof t.length)\n                            return {\n                                next: function () {\n                                    return (\n                                        t && n >= t.length && (t = void 0),\n                                        { value: t && t[n++], done: !t }\n                                    );\n                                },\n                            };\n                        throw new TypeError(\n                            e\n                                ? \"Object is not iterable.\"\n                                : \"Symbol.iterator is not defined.\"\n                        );\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.OPTABLE =\n                        e.MMLSPACING =\n                        e.getRange =\n                        e.RANGES =\n                        e.MO =\n                        e.OPDEF =\n                            void 0);\n                var o = r(9007);\n                function i(t, e, r, n) {\n                    return (\n                        void 0 === r && (r = o.TEXCLASS.BIN),\n                        void 0 === n && (n = null),\n                        [t, e, r, n]\n                    );\n                }\n                (e.OPDEF = i),\n                    (e.MO = {\n                        ORD: i(0, 0, o.TEXCLASS.ORD),\n                        ORD11: i(1, 1, o.TEXCLASS.ORD),\n                        ORD21: i(2, 1, o.TEXCLASS.ORD),\n                        ORD02: i(0, 2, o.TEXCLASS.ORD),\n                        ORD55: i(5, 5, o.TEXCLASS.ORD),\n                        NONE: i(0, 0, o.TEXCLASS.NONE),\n                        OP: i(1, 2, o.TEXCLASS.OP, {\n                            largeop: !0,\n                            movablelimits: !0,\n                            symmetric: !0,\n                        }),\n                        OPFIXED: i(1, 2, o.TEXCLASS.OP, {\n                            largeop: !0,\n                            movablelimits: !0,\n                        }),\n                        INTEGRAL: i(0, 1, o.TEXCLASS.OP, {\n                            largeop: !0,\n                            symmetric: !0,\n                        }),\n                        INTEGRAL2: i(1, 2, o.TEXCLASS.OP, {\n                            largeop: !0,\n                            symmetric: !0,\n                        }),\n                        BIN3: i(3, 3, o.TEXCLASS.BIN),\n                        BIN4: i(4, 4, o.TEXCLASS.BIN),\n                        BIN01: i(0, 1, o.TEXCLASS.BIN),\n                        BIN5: i(5, 5, o.TEXCLASS.BIN),\n                        TALLBIN: i(4, 4, o.TEXCLASS.BIN, { stretchy: !0 }),\n                        BINOP: i(4, 4, o.TEXCLASS.BIN, {\n                            largeop: !0,\n                            movablelimits: !0,\n                        }),\n                        REL: i(5, 5, o.TEXCLASS.REL),\n                        REL1: i(1, 1, o.TEXCLASS.REL, { stretchy: !0 }),\n                        REL4: i(4, 4, o.TEXCLASS.REL),\n                        RELSTRETCH: i(5, 5, o.TEXCLASS.REL, { stretchy: !0 }),\n                        RELACCENT: i(5, 5, o.TEXCLASS.REL, { accent: !0 }),\n                        WIDEREL: i(5, 5, o.TEXCLASS.REL, {\n                            accent: !0,\n                            stretchy: !0,\n                        }),\n                        OPEN: i(0, 0, o.TEXCLASS.OPEN, {\n                            fence: !0,\n                            stretchy: !0,\n                            symmetric: !0,\n                        }),\n                        CLOSE: i(0, 0, o.TEXCLASS.CLOSE, {\n                            fence: !0,\n                            stretchy: !0,\n                            symmetric: !0,\n                        }),\n                        INNER: i(0, 0, o.TEXCLASS.INNER),\n                        PUNCT: i(0, 3, o.TEXCLASS.PUNCT),\n                        ACCENT: i(0, 0, o.TEXCLASS.ORD, { accent: !0 }),\n                        WIDEACCENT: i(0, 0, o.TEXCLASS.ORD, {\n                            accent: !0,\n                            stretchy: !0,\n                        }),\n                    }),\n                    (e.RANGES = [\n                        [32, 127, o.TEXCLASS.REL, \"mo\"],\n                        [160, 191, o.TEXCLASS.ORD, \"mo\"],\n                        [192, 591, o.TEXCLASS.ORD, \"mi\"],\n                        [688, 879, o.TEXCLASS.ORD, \"mo\"],\n                        [880, 6688, o.TEXCLASS.ORD, \"mi\"],\n                        [6832, 6911, o.TEXCLASS.ORD, \"mo\"],\n                        [6912, 7615, o.TEXCLASS.ORD, \"mi\"],\n                        [7616, 7679, o.TEXCLASS.ORD, \"mo\"],\n                        [7680, 8191, o.TEXCLASS.ORD, \"mi\"],\n                        [8192, 8303, o.TEXCLASS.ORD, \"mo\"],\n                        [8304, 8351, o.TEXCLASS.ORD, \"mo\"],\n                        [8448, 8527, o.TEXCLASS.ORD, \"mi\"],\n                        [8528, 8591, o.TEXCLASS.ORD, \"mn\"],\n                        [8592, 8703, o.TEXCLASS.REL, \"mo\"],\n                        [8704, 8959, o.TEXCLASS.BIN, \"mo\"],\n                        [8960, 9215, o.TEXCLASS.ORD, \"mo\"],\n                        [9312, 9471, o.TEXCLASS.ORD, \"mn\"],\n                        [9472, 10223, o.TEXCLASS.ORD, \"mo\"],\n                        [10224, 10239, o.TEXCLASS.REL, \"mo\"],\n                        [10240, 10495, o.TEXCLASS.ORD, \"mtext\"],\n                        [10496, 10623, o.TEXCLASS.REL, \"mo\"],\n                        [10624, 10751, o.TEXCLASS.ORD, \"mo\"],\n                        [10752, 11007, o.TEXCLASS.BIN, \"mo\"],\n                        [11008, 11055, o.TEXCLASS.ORD, \"mo\"],\n                        [11056, 11087, o.TEXCLASS.REL, \"mo\"],\n                        [11088, 11263, o.TEXCLASS.ORD, \"mo\"],\n                        [11264, 11744, o.TEXCLASS.ORD, \"mi\"],\n                        [11776, 11903, o.TEXCLASS.ORD, \"mo\"],\n                        [11904, 12255, o.TEXCLASS.ORD, \"mi\", \"normal\"],\n                        [12272, 12351, o.TEXCLASS.ORD, \"mo\"],\n                        [12352, 42143, o.TEXCLASS.ORD, \"mi\", \"normal\"],\n                        [42192, 43055, o.TEXCLASS.ORD, \"mi\"],\n                        [43056, 43071, o.TEXCLASS.ORD, \"mn\"],\n                        [43072, 55295, o.TEXCLASS.ORD, \"mi\"],\n                        [63744, 64255, o.TEXCLASS.ORD, \"mi\", \"normal\"],\n                        [64256, 65023, o.TEXCLASS.ORD, \"mi\"],\n                        [65024, 65135, o.TEXCLASS.ORD, \"mo\"],\n                        [65136, 65791, o.TEXCLASS.ORD, \"mi\"],\n                        [65792, 65935, o.TEXCLASS.ORD, \"mn\"],\n                        [65936, 74751, o.TEXCLASS.ORD, \"mi\", \"normal\"],\n                        [74752, 74879, o.TEXCLASS.ORD, \"mn\"],\n                        [74880, 113823, o.TEXCLASS.ORD, \"mi\", \"normal\"],\n                        [113824, 119391, o.TEXCLASS.ORD, \"mo\"],\n                        [119648, 119679, o.TEXCLASS.ORD, \"mn\"],\n                        [119808, 120781, o.TEXCLASS.ORD, \"mi\"],\n                        [120782, 120831, o.TEXCLASS.ORD, \"mn\"],\n                        [122624, 129023, o.TEXCLASS.ORD, \"mo\"],\n                        [129024, 129279, o.TEXCLASS.REL, \"mo\"],\n                        [129280, 129535, o.TEXCLASS.ORD, \"mo\"],\n                        [131072, 195103, o.TEXCLASS.ORD, \"mi\", \"normnal\"],\n                    ]),\n                    (e.getRange = function (t) {\n                        var r,\n                            o,\n                            i = t.codePointAt(0);\n                        try {\n                            for (\n                                var s = n(e.RANGES), a = s.next();\n                                !a.done;\n                                a = s.next()\n                            ) {\n                                var l = a.value;\n                                if (i <= l[1]) {\n                                    if (i >= l[0]) return l;\n                                    break;\n                                }\n                            }\n                        } catch (t) {\n                            r = { error: t };\n                        } finally {\n                            try {\n                                a && !a.done && (o = s.return) && o.call(s);\n                            } finally {\n                                if (r) throw r.error;\n                            }\n                        }\n                        return null;\n                    }),\n                    (e.MMLSPACING = [\n                        [0, 0],\n                        [1, 2],\n                        [3, 3],\n                        [4, 4],\n                        [0, 0],\n                        [0, 0],\n                        [0, 3],\n                    ]),\n                    (e.OPTABLE = {\n                        prefix: {\n                            \"(\": e.MO.OPEN,\n                            \"+\": e.MO.BIN01,\n                            \"-\": e.MO.BIN01,\n                            \"[\": e.MO.OPEN,\n                            \"{\": e.MO.OPEN,\n                            \"|\": e.MO.OPEN,\n                            \"||\": [\n                                0,\n                                0,\n                                o.TEXCLASS.BIN,\n                                { fence: !0, stretchy: !0, symmetric: !0 },\n                            ],\n                            \"|||\": [\n                                0,\n                                0,\n                                o.TEXCLASS.ORD,\n                                { fence: !0, stretchy: !0, symmetric: !0 },\n                            ],\n                            \"\\xac\": e.MO.ORD21,\n                            \"\\xb1\": e.MO.BIN01,\n                            \"\\u2016\": [\n                                0,\n                                0,\n                                o.TEXCLASS.ORD,\n                                { fence: !0, stretchy: !0 },\n                            ],\n                            \"\\u2018\": [0, 0, o.TEXCLASS.OPEN, { fence: !0 }],\n                            \"\\u201c\": [0, 0, o.TEXCLASS.OPEN, { fence: !0 }],\n                            \"\\u2145\": e.MO.ORD21,\n                            \"\\u2146\": i(2, 0, o.TEXCLASS.ORD),\n                            \"\\u2200\": e.MO.ORD21,\n                            \"\\u2202\": e.MO.ORD21,\n                            \"\\u2203\": e.MO.ORD21,\n                            \"\\u2204\": e.MO.ORD21,\n                            \"\\u2207\": e.MO.ORD21,\n                            \"\\u220f\": e.MO.OP,\n                            \"\\u2210\": e.MO.OP,\n                            \"\\u2211\": e.MO.OP,\n                            \"\\u2212\": e.MO.BIN01,\n                            \"\\u2213\": e.MO.BIN01,\n                            \"\\u221a\": [1, 1, o.TEXCLASS.ORD, { stretchy: !0 }],\n                            \"\\u221b\": e.MO.ORD11,\n                            \"\\u221c\": e.MO.ORD11,\n                            \"\\u2220\": e.MO.ORD,\n                            \"\\u2221\": e.MO.ORD,\n                            \"\\u2222\": e.MO.ORD,\n                            \"\\u222b\": e.MO.INTEGRAL,\n                            \"\\u222c\": e.MO.INTEGRAL,\n                            \"\\u222d\": e.MO.INTEGRAL,\n                            \"\\u222e\": e.MO.INTEGRAL,\n                            \"\\u222f\": e.MO.INTEGRAL,\n                            \"\\u2230\": e.MO.INTEGRAL,\n                            \"\\u2231\": e.MO.INTEGRAL,\n                            \"\\u2232\": e.MO.INTEGRAL,\n                            \"\\u2233\": e.MO.INTEGRAL,\n                            \"\\u22c0\": e.MO.OP,\n                            \"\\u22c1\": e.MO.OP,\n                            \"\\u22c2\": e.MO.OP,\n                            \"\\u22c3\": e.MO.OP,\n                            \"\\u2308\": e.MO.OPEN,\n                            \"\\u230a\": e.MO.OPEN,\n                            \"\\u2329\": e.MO.OPEN,\n                            \"\\u2772\": e.MO.OPEN,\n                            \"\\u27e6\": e.MO.OPEN,\n                            \"\\u27e8\": e.MO.OPEN,\n                            \"\\u27ea\": e.MO.OPEN,\n                            \"\\u27ec\": e.MO.OPEN,\n                            \"\\u27ee\": e.MO.OPEN,\n                            \"\\u2980\": [\n                                0,\n                                0,\n                                o.TEXCLASS.ORD,\n                                { fence: !0, stretchy: !0 },\n                            ],\n                            \"\\u2983\": e.MO.OPEN,\n                            \"\\u2985\": e.MO.OPEN,\n                            \"\\u2987\": e.MO.OPEN,\n                            \"\\u2989\": e.MO.OPEN,\n                            \"\\u298b\": e.MO.OPEN,\n                            \"\\u298d\": e.MO.OPEN,\n                            \"\\u298f\": e.MO.OPEN,\n                            \"\\u2991\": e.MO.OPEN,\n                            \"\\u2993\": e.MO.OPEN,\n                            \"\\u2995\": e.MO.OPEN,\n                            \"\\u2997\": e.MO.OPEN,\n                            \"\\u29fc\": e.MO.OPEN,\n                            \"\\u2a00\": e.MO.OP,\n                            \"\\u2a01\": e.MO.OP,\n                            \"\\u2a02\": e.MO.OP,\n                            \"\\u2a03\": e.MO.OP,\n                            \"\\u2a04\": e.MO.OP,\n                            \"\\u2a05\": e.MO.OP,\n                            \"\\u2a06\": e.MO.OP,\n                            \"\\u2a07\": e.MO.OP,\n                            \"\\u2a08\": e.MO.OP,\n                            \"\\u2a09\": e.MO.OP,\n                            \"\\u2a0a\": e.MO.OP,\n                            \"\\u2a0b\": e.MO.INTEGRAL2,\n                            \"\\u2a0c\": e.MO.INTEGRAL,\n                            \"\\u2a0d\": e.MO.INTEGRAL2,\n                            \"\\u2a0e\": e.MO.INTEGRAL2,\n                            \"\\u2a0f\": e.MO.INTEGRAL2,\n                            \"\\u2a10\": e.MO.OP,\n                            \"\\u2a11\": e.MO.OP,\n                            \"\\u2a12\": e.MO.OP,\n                            \"\\u2a13\": e.MO.OP,\n                            \"\\u2a14\": e.MO.OP,\n                            \"\\u2a15\": e.MO.INTEGRAL2,\n                            \"\\u2a16\": e.MO.INTEGRAL2,\n                            \"\\u2a17\": e.MO.INTEGRAL2,\n                            \"\\u2a18\": e.MO.INTEGRAL2,\n                            \"\\u2a19\": e.MO.INTEGRAL2,\n                            \"\\u2a1a\": e.MO.INTEGRAL2,\n                            \"\\u2a1b\": e.MO.INTEGRAL2,\n                            \"\\u2a1c\": e.MO.INTEGRAL2,\n                            \"\\u2afc\": e.MO.OP,\n                            \"\\u2aff\": e.MO.OP,\n                        },\n                        postfix: {\n                            \"!!\": i(1, 0),\n                            \"!\": [1, 0, o.TEXCLASS.CLOSE, null],\n                            '\"': e.MO.ACCENT,\n                            \"&\": e.MO.ORD,\n                            \")\": e.MO.CLOSE,\n                            \"++\": i(0, 0),\n                            \"--\": i(0, 0),\n                            \"..\": i(0, 0),\n                            \"...\": e.MO.ORD,\n                            \"'\": e.MO.ACCENT,\n                            \"]\": e.MO.CLOSE,\n                            \"^\": e.MO.WIDEACCENT,\n                            _: e.MO.WIDEACCENT,\n                            \"`\": e.MO.ACCENT,\n                            \"|\": e.MO.CLOSE,\n                            \"}\": e.MO.CLOSE,\n                            \"~\": e.MO.WIDEACCENT,\n                            \"||\": [\n                                0,\n                                0,\n                                o.TEXCLASS.BIN,\n                                { fence: !0, stretchy: !0, symmetric: !0 },\n                            ],\n                            \"|||\": [\n                                0,\n                                0,\n                                o.TEXCLASS.ORD,\n                                { fence: !0, stretchy: !0, symmetric: !0 },\n                            ],\n                            \"\\xa8\": e.MO.ACCENT,\n                            \"\\xaa\": e.MO.ACCENT,\n                            \"\\xaf\": e.MO.WIDEACCENT,\n                            \"\\xb0\": e.MO.ORD,\n                            \"\\xb2\": e.MO.ACCENT,\n                            \"\\xb3\": e.MO.ACCENT,\n                            \"\\xb4\": e.MO.ACCENT,\n                            \"\\xb8\": e.MO.ACCENT,\n                            \"\\xb9\": e.MO.ACCENT,\n                            \"\\xba\": e.MO.ACCENT,\n                            \"\\u02c6\": e.MO.WIDEACCENT,\n                            \"\\u02c7\": e.MO.WIDEACCENT,\n                            \"\\u02c9\": e.MO.WIDEACCENT,\n                            \"\\u02ca\": e.MO.ACCENT,\n                            \"\\u02cb\": e.MO.ACCENT,\n                            \"\\u02cd\": e.MO.WIDEACCENT,\n                            \"\\u02d8\": e.MO.ACCENT,\n                            \"\\u02d9\": e.MO.ACCENT,\n                            \"\\u02da\": e.MO.ACCENT,\n                            \"\\u02dc\": e.MO.WIDEACCENT,\n                            \"\\u02dd\": e.MO.ACCENT,\n                            \"\\u02f7\": e.MO.WIDEACCENT,\n                            \"\\u0302\": e.MO.WIDEACCENT,\n                            \"\\u0311\": e.MO.ACCENT,\n                            \"\\u03f6\": e.MO.REL,\n                            \"\\u2016\": [\n                                0,\n                                0,\n                                o.TEXCLASS.ORD,\n                                { fence: !0, stretchy: !0 },\n                            ],\n                            \"\\u2019\": [0, 0, o.TEXCLASS.CLOSE, { fence: !0 }],\n                            \"\\u201a\": e.MO.ACCENT,\n                            \"\\u201b\": e.MO.ACCENT,\n                            \"\\u201d\": [0, 0, o.TEXCLASS.CLOSE, { fence: !0 }],\n                            \"\\u201e\": e.MO.ACCENT,\n                            \"\\u201f\": e.MO.ACCENT,\n                            \"\\u2032\": e.MO.ORD,\n                            \"\\u2033\": e.MO.ACCENT,\n                            \"\\u2034\": e.MO.ACCENT,\n                            \"\\u2035\": e.MO.ACCENT,\n                            \"\\u2036\": e.MO.ACCENT,\n                            \"\\u2037\": e.MO.ACCENT,\n                            \"\\u203e\": e.MO.WIDEACCENT,\n                            \"\\u2057\": e.MO.ACCENT,\n                            \"\\u20db\": e.MO.ACCENT,\n                            \"\\u20dc\": e.MO.ACCENT,\n                            \"\\u2309\": e.MO.CLOSE,\n                            \"\\u230b\": e.MO.CLOSE,\n                            \"\\u232a\": e.MO.CLOSE,\n                            \"\\u23b4\": e.MO.WIDEACCENT,\n                            \"\\u23b5\": e.MO.WIDEACCENT,\n                            \"\\u23dc\": e.MO.WIDEACCENT,\n                            \"\\u23dd\": e.MO.WIDEACCENT,\n                            \"\\u23de\": e.MO.WIDEACCENT,\n                            \"\\u23df\": e.MO.WIDEACCENT,\n                            \"\\u23e0\": e.MO.WIDEACCENT,\n                            \"\\u23e1\": e.MO.WIDEACCENT,\n                            \"\\u25a0\": e.MO.BIN3,\n                            \"\\u25a1\": e.MO.BIN3,\n                            \"\\u25aa\": e.MO.BIN3,\n                            \"\\u25ab\": e.MO.BIN3,\n                            \"\\u25ad\": e.MO.BIN3,\n                            \"\\u25ae\": e.MO.BIN3,\n                            \"\\u25af\": e.MO.BIN3,\n                            \"\\u25b0\": e.MO.BIN3,\n                            \"\\u25b1\": e.MO.BIN3,\n                            \"\\u25b2\": e.MO.BIN4,\n                            \"\\u25b4\": e.MO.BIN4,\n                            \"\\u25b6\": e.MO.BIN4,\n                            \"\\u25b7\": e.MO.BIN4,\n                            \"\\u25b8\": e.MO.BIN4,\n                            \"\\u25bc\": e.MO.BIN4,\n                            \"\\u25be\": e.MO.BIN4,\n                            \"\\u25c0\": e.MO.BIN4,\n                            \"\\u25c1\": e.MO.BIN4,\n                            \"\\u25c2\": e.MO.BIN4,\n                            \"\\u25c4\": e.MO.BIN4,\n                            \"\\u25c5\": e.MO.BIN4,\n                            \"\\u25c6\": e.MO.BIN4,\n                            \"\\u25c7\": e.MO.BIN4,\n                            \"\\u25c8\": e.MO.BIN4,\n                            \"\\u25c9\": e.MO.BIN4,\n                            \"\\u25cc\": e.MO.BIN4,\n                            \"\\u25cd\": e.MO.BIN4,\n                            \"\\u25ce\": e.MO.BIN4,\n                            \"\\u25cf\": e.MO.BIN4,\n                            \"\\u25d6\": e.MO.BIN4,\n                            \"\\u25d7\": e.MO.BIN4,\n                            \"\\u25e6\": e.MO.BIN4,\n                            \"\\u266d\": e.MO.ORD02,\n                            \"\\u266e\": e.MO.ORD02,\n                            \"\\u266f\": e.MO.ORD02,\n                            \"\\u2773\": e.MO.CLOSE,\n                            \"\\u27e7\": e.MO.CLOSE,\n                            \"\\u27e9\": e.MO.CLOSE,\n                            \"\\u27eb\": e.MO.CLOSE,\n                            \"\\u27ed\": e.MO.CLOSE,\n                            \"\\u27ef\": e.MO.CLOSE,\n                            \"\\u2980\": [\n                                0,\n                                0,\n                                o.TEXCLASS.ORD,\n                                { fence: !0, stretchy: !0 },\n                            ],\n                            \"\\u2984\": e.MO.CLOSE,\n                            \"\\u2986\": e.MO.CLOSE,\n                            \"\\u2988\": e.MO.CLOSE,\n                            \"\\u298a\": e.MO.CLOSE,\n                            \"\\u298c\": e.MO.CLOSE,\n                            \"\\u298e\": e.MO.CLOSE,\n                            \"\\u2990\": e.MO.CLOSE,\n                            \"\\u2992\": e.MO.CLOSE,\n                            \"\\u2994\": e.MO.CLOSE,\n                            \"\\u2996\": e.MO.CLOSE,\n                            \"\\u2998\": e.MO.CLOSE,\n                            \"\\u29fd\": e.MO.CLOSE,\n                        },\n                        infix: {\n                            \"!=\": e.MO.BIN4,\n                            \"#\": e.MO.ORD,\n                            $: e.MO.ORD,\n                            \"%\": [3, 3, o.TEXCLASS.ORD, null],\n                            \"&&\": e.MO.BIN4,\n                            \"\": e.MO.ORD,\n                            \"*\": e.MO.BIN3,\n                            \"**\": i(1, 1),\n                            \"*=\": e.MO.BIN4,\n                            \"+\": e.MO.BIN4,\n                            \"+=\": e.MO.BIN4,\n                            \",\": [\n                                0,\n                                3,\n                                o.TEXCLASS.PUNCT,\n                                { linebreakstyle: \"after\", separator: !0 },\n                            ],\n                            \"-\": e.MO.BIN4,\n                            \"-=\": e.MO.BIN4,\n                            \"->\": e.MO.BIN5,\n                            \".\": [0, 3, o.TEXCLASS.PUNCT, { separator: !0 }],\n                            \"/\": e.MO.ORD11,\n                            \"//\": i(1, 1),\n                            \"/=\": e.MO.BIN4,\n                            \":\": [1, 2, o.TEXCLASS.REL, null],\n                            \":=\": e.MO.BIN4,\n                            \";\": [\n                                0,\n                                3,\n                                o.TEXCLASS.PUNCT,\n                                { linebreakstyle: \"after\", separator: !0 },\n                            ],\n                            \"<\": e.MO.REL,\n                            \"<=\": e.MO.BIN5,\n                            \"<>\": i(1, 1),\n                            \"=\": e.MO.REL,\n                            \"==\": e.MO.BIN4,\n                            \">\": e.MO.REL,\n                            \">=\": e.MO.BIN5,\n                            \"?\": [1, 1, o.TEXCLASS.CLOSE, null],\n                            \"@\": e.MO.ORD11,\n                            \"\\\\\": e.MO.ORD,\n                            \"^\": e.MO.ORD11,\n                            _: e.MO.ORD11,\n                            \"|\": [\n                                2,\n                                2,\n                                o.TEXCLASS.ORD,\n                                { fence: !0, stretchy: !0, symmetric: !0 },\n                            ],\n                            \"||\": [\n                                2,\n                                2,\n                                o.TEXCLASS.BIN,\n                                { fence: !0, stretchy: !0, symmetric: !0 },\n                            ],\n                            \"|||\": [\n                                2,\n                                2,\n                                o.TEXCLASS.ORD,\n                                { fence: !0, stretchy: !0, symmetric: !0 },\n                            ],\n                            \"\\xb1\": e.MO.BIN4,\n                            \"\\xb7\": e.MO.BIN4,\n                            \"\\xd7\": e.MO.BIN4,\n                            \"\\xf7\": e.MO.BIN4,\n                            \"\\u02b9\": e.MO.ORD,\n                            \"\\u0300\": e.MO.ACCENT,\n                            \"\\u0301\": e.MO.ACCENT,\n                            \"\\u0303\": e.MO.WIDEACCENT,\n                            \"\\u0304\": e.MO.ACCENT,\n                            \"\\u0306\": e.MO.ACCENT,\n                            \"\\u0307\": e.MO.ACCENT,\n                            \"\\u0308\": e.MO.ACCENT,\n                            \"\\u030c\": e.MO.ACCENT,\n                            \"\\u0332\": e.MO.WIDEACCENT,\n                            \"\\u0338\": e.MO.REL4,\n                            \"\\u2015\": [0, 0, o.TEXCLASS.ORD, { stretchy: !0 }],\n                            \"\\u2017\": [0, 0, o.TEXCLASS.ORD, { stretchy: !0 }],\n                            \"\\u2020\": e.MO.BIN3,\n                            \"\\u2021\": e.MO.BIN3,\n                            \"\\u2022\": e.MO.BIN4,\n                            \"\\u2026\": e.MO.INNER,\n                            \"\\u2043\": e.MO.BIN4,\n                            \"\\u2044\": e.MO.TALLBIN,\n                            \"\\u2061\": e.MO.NONE,\n                            \"\\u2062\": e.MO.NONE,\n                            \"\\u2063\": [\n                                0,\n                                0,\n                                o.TEXCLASS.NONE,\n                                { linebreakstyle: \"after\", separator: !0 },\n                            ],\n                            \"\\u2064\": e.MO.NONE,\n                            \"\\u20d7\": e.MO.ACCENT,\n                            \"\\u2111\": e.MO.ORD,\n                            \"\\u2113\": e.MO.ORD,\n                            \"\\u2118\": e.MO.ORD,\n                            \"\\u211c\": e.MO.ORD,\n                            \"\\u2190\": e.MO.WIDEREL,\n                            \"\\u2191\": e.MO.RELSTRETCH,\n                            \"\\u2192\": e.MO.WIDEREL,\n                            \"\\u2193\": e.MO.RELSTRETCH,\n                            \"\\u2194\": e.MO.WIDEREL,\n                            \"\\u2195\": e.MO.RELSTRETCH,\n                            \"\\u2196\": e.MO.RELSTRETCH,\n                            \"\\u2197\": e.MO.RELSTRETCH,\n                            \"\\u2198\": e.MO.RELSTRETCH,\n                            \"\\u2199\": e.MO.RELSTRETCH,\n                            \"\\u219a\": e.MO.RELACCENT,\n                            \"\\u219b\": e.MO.RELACCENT,\n                            \"\\u219c\": e.MO.WIDEREL,\n                            \"\\u219d\": e.MO.WIDEREL,\n                            \"\\u219e\": e.MO.WIDEREL,\n                            \"\\u219f\": e.MO.WIDEREL,\n                            \"\\u21a0\": e.MO.WIDEREL,\n                            \"\\u21a1\": e.MO.RELSTRETCH,\n                            \"\\u21a2\": e.MO.WIDEREL,\n                            \"\\u21a3\": e.MO.WIDEREL,\n                            \"\\u21a4\": e.MO.WIDEREL,\n                            \"\\u21a5\": e.MO.RELSTRETCH,\n                            \"\\u21a6\": e.MO.WIDEREL,\n                            \"\\u21a7\": e.MO.RELSTRETCH,\n                            \"\\u21a8\": e.MO.RELSTRETCH,\n                            \"\\u21a9\": e.MO.WIDEREL,\n                            \"\\u21aa\": e.MO.WIDEREL,\n                            \"\\u21ab\": e.MO.WIDEREL,\n                            \"\\u21ac\": e.MO.WIDEREL,\n                            \"\\u21ad\": e.MO.WIDEREL,\n                            \"\\u21ae\": e.MO.RELACCENT,\n                            \"\\u21af\": e.MO.RELSTRETCH,\n                            \"\\u21b0\": e.MO.RELSTRETCH,\n                            \"\\u21b1\": e.MO.RELSTRETCH,\n                            \"\\u21b2\": e.MO.RELSTRETCH,\n                            \"\\u21b3\": e.MO.RELSTRETCH,\n                            \"\\u21b4\": e.MO.RELSTRETCH,\n                            \"\\u21b5\": e.MO.RELSTRETCH,\n                            \"\\u21b6\": e.MO.RELACCENT,\n                            \"\\u21b7\": e.MO.RELACCENT,\n                            \"\\u21b8\": e.MO.REL,\n                            \"\\u21b9\": e.MO.WIDEREL,\n                            \"\\u21ba\": e.MO.REL,\n                            \"\\u21bb\": e.MO.REL,\n                            \"\\u21bc\": e.MO.WIDEREL,\n                            \"\\u21bd\": e.MO.WIDEREL,\n                            \"\\u21be\": e.MO.RELSTRETCH,\n                            \"\\u21bf\": e.MO.RELSTRETCH,\n                            \"\\u21c0\": e.MO.WIDEREL,\n                            \"\\u21c1\": e.MO.WIDEREL,\n                            \"\\u21c2\": e.MO.RELSTRETCH,\n                            \"\\u21c3\": e.MO.RELSTRETCH,\n                            \"\\u21c4\": e.MO.WIDEREL,\n                            \"\\u21c5\": e.MO.RELSTRETCH,\n                            \"\\u21c6\": e.MO.WIDEREL,\n                            \"\\u21c7\": e.MO.WIDEREL,\n                            \"\\u21c8\": e.MO.RELSTRETCH,\n                            \"\\u21c9\": e.MO.WIDEREL,\n                            \"\\u21ca\": e.MO.RELSTRETCH,\n                            \"\\u21cb\": e.MO.WIDEREL,\n                            \"\\u21cc\": e.MO.WIDEREL,\n                            \"\\u21cd\": e.MO.RELACCENT,\n                            \"\\u21ce\": e.MO.RELACCENT,\n                            \"\\u21cf\": e.MO.RELACCENT,\n                            \"\\u21d0\": e.MO.WIDEREL,\n                            \"\\u21d1\": e.MO.RELSTRETCH,\n                            \"\\u21d2\": e.MO.WIDEREL,\n                            \"\\u21d3\": e.MO.RELSTRETCH,\n                            \"\\u21d4\": e.MO.WIDEREL,\n                            \"\\u21d5\": e.MO.RELSTRETCH,\n                            \"\\u21d6\": e.MO.RELSTRETCH,\n                            \"\\u21d7\": e.MO.RELSTRETCH,\n                            \"\\u21d8\": e.MO.RELSTRETCH,\n                            \"\\u21d9\": e.MO.RELSTRETCH,\n                            \"\\u21da\": e.MO.WIDEREL,\n                            \"\\u21db\": e.MO.WIDEREL,\n                            \"\\u21dc\": e.MO.WIDEREL,\n                            \"\\u21dd\": e.MO.WIDEREL,\n                            \"\\u21de\": e.MO.REL,\n                            \"\\u21df\": e.MO.REL,\n                            \"\\u21e0\": e.MO.WIDEREL,\n                            \"\\u21e1\": e.MO.RELSTRETCH,\n                            \"\\u21e2\": e.MO.WIDEREL,\n                            \"\\u21e3\": e.MO.RELSTRETCH,\n                            \"\\u21e4\": e.MO.WIDEREL,\n                            \"\\u21e5\": e.MO.WIDEREL,\n                            \"\\u21e6\": e.MO.WIDEREL,\n                            \"\\u21e7\": e.MO.RELSTRETCH,\n                            \"\\u21e8\": e.MO.WIDEREL,\n                            \"\\u21e9\": e.MO.RELSTRETCH,\n                            \"\\u21ea\": e.MO.RELSTRETCH,\n                            \"\\u21eb\": e.MO.RELSTRETCH,\n                            \"\\u21ec\": e.MO.RELSTRETCH,\n                            \"\\u21ed\": e.MO.RELSTRETCH,\n                            \"\\u21ee\": e.MO.RELSTRETCH,\n                            \"\\u21ef\": e.MO.RELSTRETCH,\n                            \"\\u21f0\": e.MO.WIDEREL,\n                            \"\\u21f1\": e.MO.REL,\n                            \"\\u21f2\": e.MO.REL,\n                            \"\\u21f3\": e.MO.RELSTRETCH,\n                            \"\\u21f4\": e.MO.RELACCENT,\n                            \"\\u21f5\": e.MO.RELSTRETCH,\n                            \"\\u21f6\": e.MO.WIDEREL,\n                            \"\\u21f7\": e.MO.RELACCENT,\n                            \"\\u21f8\": e.MO.RELACCENT,\n                            \"\\u21f9\": e.MO.RELACCENT,\n                            \"\\u21fa\": e.MO.RELACCENT,\n                            \"\\u21fb\": e.MO.RELACCENT,\n                            \"\\u21fc\": e.MO.RELACCENT,\n                            \"\\u21fd\": e.MO.WIDEREL,\n                            \"\\u21fe\": e.MO.WIDEREL,\n                            \"\\u21ff\": e.MO.WIDEREL,\n                            \"\\u2201\": i(1, 2, o.TEXCLASS.ORD),\n                            \"\\u2205\": e.MO.ORD,\n                            \"\\u2206\": e.MO.BIN3,\n                            \"\\u2208\": e.MO.REL,\n                            \"\\u2209\": e.MO.REL,\n                            \"\\u220a\": e.MO.REL,\n                            \"\\u220b\": e.MO.REL,\n                            \"\\u220c\": e.MO.REL,\n                            \"\\u220d\": e.MO.REL,\n                            \"\\u220e\": e.MO.BIN3,\n                            \"\\u2212\": e.MO.BIN4,\n                            \"\\u2213\": e.MO.BIN4,\n                            \"\\u2214\": e.MO.BIN4,\n                            \"\\u2215\": e.MO.TALLBIN,\n                            \"\\u2216\": e.MO.BIN4,\n                            \"\\u2217\": e.MO.BIN4,\n                            \"\\u2218\": e.MO.BIN4,\n                            \"\\u2219\": e.MO.BIN4,\n                            \"\\u221d\": e.MO.REL,\n                            \"\\u221e\": e.MO.ORD,\n                            \"\\u221f\": e.MO.REL,\n                            \"\\u2223\": e.MO.REL,\n                            \"\\u2224\": e.MO.REL,\n                            \"\\u2225\": e.MO.REL,\n                            \"\\u2226\": e.MO.REL,\n                            \"\\u2227\": e.MO.BIN4,\n                            \"\\u2228\": e.MO.BIN4,\n                            \"\\u2229\": e.MO.BIN4,\n                            \"\\u222a\": e.MO.BIN4,\n                            \"\\u2234\": e.MO.REL,\n                            \"\\u2235\": e.MO.REL,\n                            \"\\u2236\": e.MO.REL,\n                            \"\\u2237\": e.MO.REL,\n                            \"\\u2238\": e.MO.BIN4,\n                            \"\\u2239\": e.MO.REL,\n                            \"\\u223a\": e.MO.BIN4,\n                            \"\\u223b\": e.MO.REL,\n                            \"\\u223c\": e.MO.REL,\n                            \"\\u223d\": e.MO.REL,\n                            \"\\u223d\\u0331\": e.MO.BIN3,\n                            \"\\u223e\": e.MO.REL,\n                            \"\\u223f\": e.MO.BIN3,\n                            \"\\u2240\": e.MO.BIN4,\n                            \"\\u2241\": e.MO.REL,\n                            \"\\u2242\": e.MO.REL,\n                            \"\\u2242\\u0338\": e.MO.REL,\n                            \"\\u2243\": e.MO.REL,\n                            \"\\u2244\": e.MO.REL,\n                            \"\\u2245\": e.MO.REL,\n                            \"\\u2246\": e.MO.REL,\n                            \"\\u2247\": e.MO.REL,\n                            \"\\u2248\": e.MO.REL,\n                            \"\\u2249\": e.MO.REL,\n                            \"\\u224a\": e.MO.REL,\n                            \"\\u224b\": e.MO.REL,\n                            \"\\u224c\": e.MO.REL,\n                            \"\\u224d\": e.MO.REL,\n                            \"\\u224e\": e.MO.REL,\n                            \"\\u224e\\u0338\": e.MO.REL,\n                            \"\\u224f\": e.MO.REL,\n                            \"\\u224f\\u0338\": e.MO.REL,\n                            \"\\u2250\": e.MO.REL,\n                            \"\\u2251\": e.MO.REL,\n                            \"\\u2252\": e.MO.REL,\n                            \"\\u2253\": e.MO.REL,\n                            \"\\u2254\": e.MO.REL,\n                            \"\\u2255\": e.MO.REL,\n                            \"\\u2256\": e.MO.REL,\n                            \"\\u2257\": e.MO.REL,\n                            \"\\u2258\": e.MO.REL,\n                            \"\\u2259\": e.MO.REL,\n                            \"\\u225a\": e.MO.REL,\n                            \"\\u225b\": e.MO.REL,\n                            \"\\u225c\": e.MO.REL,\n                            \"\\u225d\": e.MO.REL,\n                            \"\\u225e\": e.MO.REL,\n                            \"\\u225f\": e.MO.REL,\n                            \"\\u2260\": e.MO.REL,\n                            \"\\u2261\": e.MO.REL,\n                            \"\\u2262\": e.MO.REL,\n                            \"\\u2263\": e.MO.REL,\n                            \"\\u2264\": e.MO.REL,\n                            \"\\u2265\": e.MO.REL,\n                            \"\\u2266\": e.MO.REL,\n                            \"\\u2266\\u0338\": e.MO.REL,\n                            \"\\u2267\": e.MO.REL,\n                            \"\\u2268\": e.MO.REL,\n                            \"\\u2269\": e.MO.REL,\n                            \"\\u226a\": e.MO.REL,\n                            \"\\u226a\\u0338\": e.MO.REL,\n                            \"\\u226b\": e.MO.REL,\n                            \"\\u226b\\u0338\": e.MO.REL,\n                            \"\\u226c\": e.MO.REL,\n                            \"\\u226d\": e.MO.REL,\n                            \"\\u226e\": e.MO.REL,\n                            \"\\u226f\": e.MO.REL,\n                            \"\\u2270\": e.MO.REL,\n                            \"\\u2271\": e.MO.REL,\n                            \"\\u2272\": e.MO.REL,\n                            \"\\u2273\": e.MO.REL,\n                            \"\\u2274\": e.MO.REL,\n                            \"\\u2275\": e.MO.REL,\n                            \"\\u2276\": e.MO.REL,\n                            \"\\u2277\": e.MO.REL,\n                            \"\\u2278\": e.MO.REL,\n                            \"\\u2279\": e.MO.REL,\n                            \"\\u227a\": e.MO.REL,\n                            \"\\u227b\": e.MO.REL,\n                            \"\\u227c\": e.MO.REL,\n                            \"\\u227d\": e.MO.REL,\n                            \"\\u227e\": e.MO.REL,\n                            \"\\u227f\": e.MO.REL,\n                            \"\\u227f\\u0338\": e.MO.REL,\n                            \"\\u2280\": e.MO.REL,\n                            \"\\u2281\": e.MO.REL,\n                            \"\\u2282\": e.MO.REL,\n                            \"\\u2282\\u20d2\": e.MO.REL,\n                            \"\\u2283\": e.MO.REL,\n                            \"\\u2283\\u20d2\": e.MO.REL,\n                            \"\\u2284\": e.MO.REL,\n                            \"\\u2285\": e.MO.REL,\n                            \"\\u2286\": e.MO.REL,\n                            \"\\u2287\": e.MO.REL,\n                            \"\\u2288\": e.MO.REL,\n                            \"\\u2289\": e.MO.REL,\n                            \"\\u228a\": e.MO.REL,\n                            \"\\u228b\": e.MO.REL,\n                            \"\\u228c\": e.MO.BIN4,\n                            \"\\u228d\": e.MO.BIN4,\n                            \"\\u228e\": e.MO.BIN4,\n                            \"\\u228f\": e.MO.REL,\n                            \"\\u228f\\u0338\": e.MO.REL,\n                            \"\\u2290\": e.MO.REL,\n                            \"\\u2290\\u0338\": e.MO.REL,\n                            \"\\u2291\": e.MO.REL,\n                            \"\\u2292\": e.MO.REL,\n                            \"\\u2293\": e.MO.BIN4,\n                            \"\\u2294\": e.MO.BIN4,\n                            \"\\u2295\": e.MO.BIN4,\n                            \"\\u2296\": e.MO.BIN4,\n                            \"\\u2297\": e.MO.BIN4,\n                            \"\\u2298\": e.MO.BIN4,\n                            \"\\u2299\": e.MO.BIN4,\n                            \"\\u229a\": e.MO.BIN4,\n                            \"\\u229b\": e.MO.BIN4,\n                            \"\\u229c\": e.MO.BIN4,\n                            \"\\u229d\": e.MO.BIN4,\n                            \"\\u229e\": e.MO.BIN4,\n                            \"\\u229f\": e.MO.BIN4,\n                            \"\\u22a0\": e.MO.BIN4,\n                            \"\\u22a1\": e.MO.BIN4,\n                            \"\\u22a2\": e.MO.REL,\n                            \"\\u22a3\": e.MO.REL,\n                            \"\\u22a4\": e.MO.ORD55,\n                            \"\\u22a5\": e.MO.REL,\n                            \"\\u22a6\": e.MO.REL,\n                            \"\\u22a7\": e.MO.REL,\n                            \"\\u22a8\": e.MO.REL,\n                            \"\\u22a9\": e.MO.REL,\n                            \"\\u22aa\": e.MO.REL,\n                            \"\\u22ab\": e.MO.REL,\n                            \"\\u22ac\": e.MO.REL,\n                            \"\\u22ad\": e.MO.REL,\n                            \"\\u22ae\": e.MO.REL,\n                            \"\\u22af\": e.MO.REL,\n                            \"\\u22b0\": e.MO.REL,\n                            \"\\u22b1\": e.MO.REL,\n                            \"\\u22b2\": e.MO.REL,\n                            \"\\u22b3\": e.MO.REL,\n                            \"\\u22b4\": e.MO.REL,\n                            \"\\u22b5\": e.MO.REL,\n                            \"\\u22b6\": e.MO.REL,\n                            \"\\u22b7\": e.MO.REL,\n                            \"\\u22b8\": e.MO.REL,\n                            \"\\u22b9\": e.MO.REL,\n                            \"\\u22ba\": e.MO.BIN4,\n                            \"\\u22bb\": e.MO.BIN4,\n                            \"\\u22bc\": e.MO.BIN4,\n                            \"\\u22bd\": e.MO.BIN4,\n                            \"\\u22be\": e.MO.BIN3,\n                            \"\\u22bf\": e.MO.BIN3,\n                            \"\\u22c4\": e.MO.BIN4,\n                            \"\\u22c5\": e.MO.BIN4,\n                            \"\\u22c6\": e.MO.BIN4,\n                            \"\\u22c7\": e.MO.BIN4,\n                            \"\\u22c8\": e.MO.REL,\n                            \"\\u22c9\": e.MO.BIN4,\n                            \"\\u22ca\": e.MO.BIN4,\n                            \"\\u22cb\": e.MO.BIN4,\n                            \"\\u22cc\": e.MO.BIN4,\n                            \"\\u22cd\": e.MO.REL,\n                            \"\\u22ce\": e.MO.BIN4,\n                            \"\\u22cf\": e.MO.BIN4,\n                            \"\\u22d0\": e.MO.REL,\n                            \"\\u22d1\": e.MO.REL,\n                            \"\\u22d2\": e.MO.BIN4,\n                            \"\\u22d3\": e.MO.BIN4,\n                            \"\\u22d4\": e.MO.REL,\n                            \"\\u22d5\": e.MO.REL,\n                            \"\\u22d6\": e.MO.REL,\n                            \"\\u22d7\": e.MO.REL,\n                            \"\\u22d8\": e.MO.REL,\n                            \"\\u22d9\": e.MO.REL,\n                            \"\\u22da\": e.MO.REL,\n                            \"\\u22db\": e.MO.REL,\n                            \"\\u22dc\": e.MO.REL,\n                            \"\\u22dd\": e.MO.REL,\n                            \"\\u22de\": e.MO.REL,\n                            \"\\u22df\": e.MO.REL,\n                            \"\\u22e0\": e.MO.REL,\n                            \"\\u22e1\": e.MO.REL,\n                            \"\\u22e2\": e.MO.REL,\n                            \"\\u22e3\": e.MO.REL,\n                            \"\\u22e4\": e.MO.REL,\n                            \"\\u22e5\": e.MO.REL,\n                            \"\\u22e6\": e.MO.REL,\n                            \"\\u22e7\": e.MO.REL,\n                            \"\\u22e8\": e.MO.REL,\n                            \"\\u22e9\": e.MO.REL,\n                            \"\\u22ea\": e.MO.REL,\n                            \"\\u22eb\": e.MO.REL,\n                            \"\\u22ec\": e.MO.REL,\n                            \"\\u22ed\": e.MO.REL,\n                            \"\\u22ee\": e.MO.ORD55,\n                            \"\\u22ef\": e.MO.INNER,\n                            \"\\u22f0\": e.MO.REL,\n                            \"\\u22f1\": [5, 5, o.TEXCLASS.INNER, null],\n                            \"\\u22f2\": e.MO.REL,\n                            \"\\u22f3\": e.MO.REL,\n                            \"\\u22f4\": e.MO.REL,\n                            \"\\u22f5\": e.MO.REL,\n                            \"\\u22f6\": e.MO.REL,\n                            \"\\u22f7\": e.MO.REL,\n                            \"\\u22f8\": e.MO.REL,\n                            \"\\u22f9\": e.MO.REL,\n                            \"\\u22fa\": e.MO.REL,\n                            \"\\u22fb\": e.MO.REL,\n                            \"\\u22fc\": e.MO.REL,\n                            \"\\u22fd\": e.MO.REL,\n                            \"\\u22fe\": e.MO.REL,\n                            \"\\u22ff\": e.MO.REL,\n                            \"\\u2305\": e.MO.BIN3,\n                            \"\\u2306\": e.MO.BIN3,\n                            \"\\u2322\": e.MO.REL4,\n                            \"\\u2323\": e.MO.REL4,\n                            \"\\u2329\": e.MO.OPEN,\n                            \"\\u232a\": e.MO.CLOSE,\n                            \"\\u23aa\": e.MO.ORD,\n                            \"\\u23af\": [0, 0, o.TEXCLASS.ORD, { stretchy: !0 }],\n                            \"\\u23b0\": e.MO.OPEN,\n                            \"\\u23b1\": e.MO.CLOSE,\n                            \"\\u2500\": e.MO.ORD,\n                            \"\\u25b3\": e.MO.BIN4,\n                            \"\\u25b5\": e.MO.BIN4,\n                            \"\\u25b9\": e.MO.BIN4,\n                            \"\\u25bd\": e.MO.BIN4,\n                            \"\\u25bf\": e.MO.BIN4,\n                            \"\\u25c3\": e.MO.BIN4,\n                            \"\\u25ef\": e.MO.BIN3,\n                            \"\\u2660\": e.MO.ORD,\n                            \"\\u2661\": e.MO.ORD,\n                            \"\\u2662\": e.MO.ORD,\n                            \"\\u2663\": e.MO.ORD,\n                            \"\\u2758\": e.MO.REL,\n                            \"\\u27f0\": e.MO.RELSTRETCH,\n                            \"\\u27f1\": e.MO.RELSTRETCH,\n                            \"\\u27f5\": e.MO.WIDEREL,\n                            \"\\u27f6\": e.MO.WIDEREL,\n                            \"\\u27f7\": e.MO.WIDEREL,\n                            \"\\u27f8\": e.MO.WIDEREL,\n                            \"\\u27f9\": e.MO.WIDEREL,\n                            \"\\u27fa\": e.MO.WIDEREL,\n                            \"\\u27fb\": e.MO.WIDEREL,\n                            \"\\u27fc\": e.MO.WIDEREL,\n                            \"\\u27fd\": e.MO.WIDEREL,\n                            \"\\u27fe\": e.MO.WIDEREL,\n                            \"\\u27ff\": e.MO.WIDEREL,\n                            \"\\u2900\": e.MO.RELACCENT,\n                            \"\\u2901\": e.MO.RELACCENT,\n                            \"\\u2902\": e.MO.RELACCENT,\n                            \"\\u2903\": e.MO.RELACCENT,\n                            \"\\u2904\": e.MO.RELACCENT,\n                            \"\\u2905\": e.MO.RELACCENT,\n                            \"\\u2906\": e.MO.RELACCENT,\n                            \"\\u2907\": e.MO.RELACCENT,\n                            \"\\u2908\": e.MO.REL,\n                            \"\\u2909\": e.MO.REL,\n                            \"\\u290a\": e.MO.RELSTRETCH,\n                            \"\\u290b\": e.MO.RELSTRETCH,\n                            \"\\u290c\": e.MO.WIDEREL,\n                            \"\\u290d\": e.MO.WIDEREL,\n                            \"\\u290e\": e.MO.WIDEREL,\n                            \"\\u290f\": e.MO.WIDEREL,\n                            \"\\u2910\": e.MO.WIDEREL,\n                            \"\\u2911\": e.MO.RELACCENT,\n                            \"\\u2912\": e.MO.RELSTRETCH,\n                            \"\\u2913\": e.MO.RELSTRETCH,\n                            \"\\u2914\": e.MO.RELACCENT,\n                            \"\\u2915\": e.MO.RELACCENT,\n                            \"\\u2916\": e.MO.RELACCENT,\n                            \"\\u2917\": e.MO.RELACCENT,\n                            \"\\u2918\": e.MO.RELACCENT,\n                            \"\\u2919\": e.MO.RELACCENT,\n                            \"\\u291a\": e.MO.RELACCENT,\n                            \"\\u291b\": e.MO.RELACCENT,\n                            \"\\u291c\": e.MO.RELACCENT,\n                            \"\\u291d\": e.MO.RELACCENT,\n                            \"\\u291e\": e.MO.RELACCENT,\n                            \"\\u291f\": e.MO.RELACCENT,\n                            \"\\u2920\": e.MO.RELACCENT,\n                            \"\\u2921\": e.MO.RELSTRETCH,\n                            \"\\u2922\": e.MO.RELSTRETCH,\n                            \"\\u2923\": e.MO.REL,\n                            \"\\u2924\": e.MO.REL,\n                            \"\\u2925\": e.MO.REL,\n                            \"\\u2926\": e.MO.REL,\n                            \"\\u2927\": e.MO.REL,\n                            \"\\u2928\": e.MO.REL,\n                            \"\\u2929\": e.MO.REL,\n                            \"\\u292a\": e.MO.REL,\n                            \"\\u292b\": e.MO.REL,\n                            \"\\u292c\": e.MO.REL,\n                            \"\\u292d\": e.MO.REL,\n                            \"\\u292e\": e.MO.REL,\n                            \"\\u292f\": e.MO.REL,\n                            \"\\u2930\": e.MO.REL,\n                            \"\\u2931\": e.MO.REL,\n                            \"\\u2932\": e.MO.REL,\n                            \"\\u2933\": e.MO.RELACCENT,\n                            \"\\u2934\": e.MO.REL,\n                            \"\\u2935\": e.MO.REL,\n                            \"\\u2936\": e.MO.REL,\n                            \"\\u2937\": e.MO.REL,\n                            \"\\u2938\": e.MO.REL,\n                            \"\\u2939\": e.MO.REL,\n                            \"\\u293a\": e.MO.RELACCENT,\n                            \"\\u293b\": e.MO.RELACCENT,\n                            \"\\u293c\": e.MO.RELACCENT,\n                            \"\\u293d\": e.MO.RELACCENT,\n                            \"\\u293e\": e.MO.REL,\n                            \"\\u293f\": e.MO.REL,\n                            \"\\u2940\": e.MO.REL,\n                            \"\\u2941\": e.MO.REL,\n                            \"\\u2942\": e.MO.RELACCENT,\n                            \"\\u2943\": e.MO.RELACCENT,\n                            \"\\u2944\": e.MO.RELACCENT,\n                            \"\\u2945\": e.MO.RELACCENT,\n                            \"\\u2946\": e.MO.RELACCENT,\n                            \"\\u2947\": e.MO.RELACCENT,\n                            \"\\u2948\": e.MO.RELACCENT,\n                            \"\\u2949\": e.MO.REL,\n                            \"\\u294a\": e.MO.RELACCENT,\n                            \"\\u294b\": e.MO.RELACCENT,\n                            \"\\u294c\": e.MO.REL,\n                            \"\\u294d\": e.MO.REL,\n                            \"\\u294e\": e.MO.WIDEREL,\n                            \"\\u294f\": e.MO.RELSTRETCH,\n                            \"\\u2950\": e.MO.WIDEREL,\n                            \"\\u2951\": e.MO.RELSTRETCH,\n                            \"\\u2952\": e.MO.WIDEREL,\n                            \"\\u2953\": e.MO.WIDEREL,\n                            \"\\u2954\": e.MO.RELSTRETCH,\n                            \"\\u2955\": e.MO.RELSTRETCH,\n                            \"\\u2956\": e.MO.RELSTRETCH,\n                            \"\\u2957\": e.MO.RELSTRETCH,\n                            \"\\u2958\": e.MO.RELSTRETCH,\n                            \"\\u2959\": e.MO.RELSTRETCH,\n                            \"\\u295a\": e.MO.WIDEREL,\n                            \"\\u295b\": e.MO.WIDEREL,\n                            \"\\u295c\": e.MO.RELSTRETCH,\n                            \"\\u295d\": e.MO.RELSTRETCH,\n                            \"\\u295e\": e.MO.WIDEREL,\n                            \"\\u295f\": e.MO.WIDEREL,\n                            \"\\u2960\": e.MO.RELSTRETCH,\n                            \"\\u2961\": e.MO.RELSTRETCH,\n                            \"\\u2962\": e.MO.RELACCENT,\n                            \"\\u2963\": e.MO.REL,\n                            \"\\u2964\": e.MO.RELACCENT,\n                            \"\\u2965\": e.MO.REL,\n                            \"\\u2966\": e.MO.RELACCENT,\n                            \"\\u2967\": e.MO.RELACCENT,\n                            \"\\u2968\": e.MO.RELACCENT,\n                            \"\\u2969\": e.MO.RELACCENT,\n                            \"\\u296a\": e.MO.RELACCENT,\n                            \"\\u296b\": e.MO.RELACCENT,\n                            \"\\u296c\": e.MO.RELACCENT,\n                            \"\\u296d\": e.MO.RELACCENT,\n                            \"\\u296e\": e.MO.RELSTRETCH,\n                            \"\\u296f\": e.MO.RELSTRETCH,\n                            \"\\u2970\": e.MO.RELACCENT,\n                            \"\\u2971\": e.MO.RELACCENT,\n                            \"\\u2972\": e.MO.RELACCENT,\n                            \"\\u2973\": e.MO.RELACCENT,\n                            \"\\u2974\": e.MO.RELACCENT,\n                            \"\\u2975\": e.MO.RELACCENT,\n                            \"\\u2976\": e.MO.RELACCENT,\n                            \"\\u2977\": e.MO.RELACCENT,\n                            \"\\u2978\": e.MO.RELACCENT,\n                            \"\\u2979\": e.MO.RELACCENT,\n                            \"\\u297a\": e.MO.RELACCENT,\n                            \"\\u297b\": e.MO.RELACCENT,\n                            \"\\u297c\": e.MO.RELACCENT,\n                            \"\\u297d\": e.MO.RELACCENT,\n                            \"\\u297e\": e.MO.REL,\n                            \"\\u297f\": e.MO.REL,\n                            \"\\u2981\": e.MO.BIN3,\n                            \"\\u2982\": e.MO.BIN3,\n                            \"\\u2999\": e.MO.BIN3,\n                            \"\\u299a\": e.MO.BIN3,\n                            \"\\u299b\": e.MO.BIN3,\n                            \"\\u299c\": e.MO.BIN3,\n                            \"\\u299d\": e.MO.BIN3,\n                            \"\\u299e\": e.MO.BIN3,\n                            \"\\u299f\": e.MO.BIN3,\n                            \"\\u29a0\": e.MO.BIN3,\n                            \"\\u29a1\": e.MO.BIN3,\n                            \"\\u29a2\": e.MO.BIN3,\n                            \"\\u29a3\": e.MO.BIN3,\n                            \"\\u29a4\": e.MO.BIN3,\n                            \"\\u29a5\": e.MO.BIN3,\n                            \"\\u29a6\": e.MO.BIN3,\n                            \"\\u29a7\": e.MO.BIN3,\n                            \"\\u29a8\": e.MO.BIN3,\n                            \"\\u29a9\": e.MO.BIN3,\n                            \"\\u29aa\": e.MO.BIN3,\n                            \"\\u29ab\": e.MO.BIN3,\n                            \"\\u29ac\": e.MO.BIN3,\n                            \"\\u29ad\": e.MO.BIN3,\n                            \"\\u29ae\": e.MO.BIN3,\n                            \"\\u29af\": e.MO.BIN3,\n                            \"\\u29b0\": e.MO.BIN3,\n                            \"\\u29b1\": e.MO.BIN3,\n                            \"\\u29b2\": e.MO.BIN3,\n                            \"\\u29b3\": e.MO.BIN3,\n                            \"\\u29b4\": e.MO.BIN3,\n                            \"\\u29b5\": e.MO.BIN3,\n                            \"\\u29b6\": e.MO.BIN4,\n                            \"\\u29b7\": e.MO.BIN4,\n                            \"\\u29b8\": e.MO.BIN4,\n                            \"\\u29b9\": e.MO.BIN4,\n                            \"\\u29ba\": e.MO.BIN4,\n                            \"\\u29bb\": e.MO.BIN4,\n                            \"\\u29bc\": e.MO.BIN4,\n                            \"\\u29bd\": e.MO.BIN4,\n                            \"\\u29be\": e.MO.BIN4,\n                            \"\\u29bf\": e.MO.BIN4,\n                            \"\\u29c0\": e.MO.REL,\n                            \"\\u29c1\": e.MO.REL,\n                            \"\\u29c2\": e.MO.BIN3,\n                            \"\\u29c3\": e.MO.BIN3,\n                            \"\\u29c4\": e.MO.BIN4,\n                            \"\\u29c5\": e.MO.BIN4,\n                            \"\\u29c6\": e.MO.BIN4,\n                            \"\\u29c7\": e.MO.BIN4,\n                            \"\\u29c8\": e.MO.BIN4,\n                            \"\\u29c9\": e.MO.BIN3,\n                            \"\\u29ca\": e.MO.BIN3,\n                            \"\\u29cb\": e.MO.BIN3,\n                            \"\\u29cc\": e.MO.BIN3,\n                            \"\\u29cd\": e.MO.BIN3,\n                            \"\\u29ce\": e.MO.REL,\n                            \"\\u29cf\": e.MO.REL,\n                            \"\\u29cf\\u0338\": e.MO.REL,\n                            \"\\u29d0\": e.MO.REL,\n                            \"\\u29d0\\u0338\": e.MO.REL,\n                            \"\\u29d1\": e.MO.REL,\n                            \"\\u29d2\": e.MO.REL,\n                            \"\\u29d3\": e.MO.REL,\n                            \"\\u29d4\": e.MO.REL,\n                            \"\\u29d5\": e.MO.REL,\n                            \"\\u29d6\": e.MO.BIN4,\n                            \"\\u29d7\": e.MO.BIN4,\n                            \"\\u29d8\": e.MO.BIN3,\n                            \"\\u29d9\": e.MO.BIN3,\n                            \"\\u29db\": e.MO.BIN3,\n                            \"\\u29dc\": e.MO.BIN3,\n                            \"\\u29dd\": e.MO.BIN3,\n                            \"\\u29de\": e.MO.REL,\n                            \"\\u29df\": e.MO.BIN3,\n                            \"\\u29e0\": e.MO.BIN3,\n                            \"\\u29e1\": e.MO.REL,\n                            \"\\u29e2\": e.MO.BIN4,\n                            \"\\u29e3\": e.MO.REL,\n                            \"\\u29e4\": e.MO.REL,\n                            \"\\u29e5\": e.MO.REL,\n                            \"\\u29e6\": e.MO.REL,\n                            \"\\u29e7\": e.MO.BIN3,\n                            \"\\u29e8\": e.MO.BIN3,\n                            \"\\u29e9\": e.MO.BIN3,\n                            \"\\u29ea\": e.MO.BIN3,\n                            \"\\u29eb\": e.MO.BIN3,\n                            \"\\u29ec\": e.MO.BIN3,\n                            \"\\u29ed\": e.MO.BIN3,\n                            \"\\u29ee\": e.MO.BIN3,\n                            \"\\u29ef\": e.MO.BIN3,\n                            \"\\u29f0\": e.MO.BIN3,\n                            \"\\u29f1\": e.MO.BIN3,\n                            \"\\u29f2\": e.MO.BIN3,\n                            \"\\u29f3\": e.MO.BIN3,\n                            \"\\u29f4\": e.MO.REL,\n                            \"\\u29f5\": e.MO.BIN4,\n                            \"\\u29f6\": e.MO.BIN4,\n                            \"\\u29f7\": e.MO.BIN4,\n                            \"\\u29f8\": e.MO.BIN3,\n                            \"\\u29f9\": e.MO.BIN3,\n                            \"\\u29fa\": e.MO.BIN3,\n                            \"\\u29fb\": e.MO.BIN3,\n                            \"\\u29fe\": e.MO.BIN4,\n                            \"\\u29ff\": e.MO.BIN4,\n                            \"\\u2a1d\": e.MO.BIN3,\n                            \"\\u2a1e\": e.MO.BIN3,\n                            \"\\u2a1f\": e.MO.BIN3,\n                            \"\\u2a20\": e.MO.BIN3,\n                            \"\\u2a21\": e.MO.BIN3,\n                            \"\\u2a22\": e.MO.BIN4,\n                            \"\\u2a23\": e.MO.BIN4,\n                            \"\\u2a24\": e.MO.BIN4,\n                            \"\\u2a25\": e.MO.BIN4,\n                            \"\\u2a26\": e.MO.BIN4,\n                            \"\\u2a27\": e.MO.BIN4,\n                            \"\\u2a28\": e.MO.BIN4,\n                            \"\\u2a29\": e.MO.BIN4,\n                            \"\\u2a2a\": e.MO.BIN4,\n                            \"\\u2a2b\": e.MO.BIN4,\n                            \"\\u2a2c\": e.MO.BIN4,\n                            \"\\u2a2d\": e.MO.BIN4,\n                            \"\\u2a2e\": e.MO.BIN4,\n                            \"\\u2a2f\": e.MO.BIN4,\n                            \"\\u2a30\": e.MO.BIN4,\n                            \"\\u2a31\": e.MO.BIN4,\n                            \"\\u2a32\": e.MO.BIN4,\n                            \"\\u2a33\": e.MO.BIN4,\n                            \"\\u2a34\": e.MO.BIN4,\n                            \"\\u2a35\": e.MO.BIN4,\n                            \"\\u2a36\": e.MO.BIN4,\n                            \"\\u2a37\": e.MO.BIN4,\n                            \"\\u2a38\": e.MO.BIN4,\n                            \"\\u2a39\": e.MO.BIN4,\n                            \"\\u2a3a\": e.MO.BIN4,\n                            \"\\u2a3b\": e.MO.BIN4,\n                            \"\\u2a3c\": e.MO.BIN4,\n                            \"\\u2a3d\": e.MO.BIN4,\n                            \"\\u2a3e\": e.MO.BIN4,\n                            \"\\u2a3f\": e.MO.BIN4,\n                            \"\\u2a40\": e.MO.BIN4,\n                            \"\\u2a41\": e.MO.BIN4,\n                            \"\\u2a42\": e.MO.BIN4,\n                            \"\\u2a43\": e.MO.BIN4,\n                            \"\\u2a44\": e.MO.BIN4,\n                            \"\\u2a45\": e.MO.BIN4,\n                            \"\\u2a46\": e.MO.BIN4,\n                            \"\\u2a47\": e.MO.BIN4,\n                            \"\\u2a48\": e.MO.BIN4,\n                            \"\\u2a49\": e.MO.BIN4,\n                            \"\\u2a4a\": e.MO.BIN4,\n                            \"\\u2a4b\": e.MO.BIN4,\n                            \"\\u2a4c\": e.MO.BIN4,\n                            \"\\u2a4d\": e.MO.BIN4,\n                            \"\\u2a4e\": e.MO.BIN4,\n                            \"\\u2a4f\": e.MO.BIN4,\n                            \"\\u2a50\": e.MO.BIN4,\n                            \"\\u2a51\": e.MO.BIN4,\n                            \"\\u2a52\": e.MO.BIN4,\n                            \"\\u2a53\": e.MO.BIN4,\n                            \"\\u2a54\": e.MO.BIN4,\n                            \"\\u2a55\": e.MO.BIN4,\n                            \"\\u2a56\": e.MO.BIN4,\n                            \"\\u2a57\": e.MO.BIN4,\n                            \"\\u2a58\": e.MO.BIN4,\n                            \"\\u2a59\": e.MO.REL,\n                            \"\\u2a5a\": e.MO.BIN4,\n                            \"\\u2a5b\": e.MO.BIN4,\n                            \"\\u2a5c\": e.MO.BIN4,\n                            \"\\u2a5d\": e.MO.BIN4,\n                            \"\\u2a5e\": e.MO.BIN4,\n                            \"\\u2a5f\": e.MO.BIN4,\n                            \"\\u2a60\": e.MO.BIN4,\n                            \"\\u2a61\": e.MO.BIN4,\n                            \"\\u2a62\": e.MO.BIN4,\n                            \"\\u2a63\": e.MO.BIN4,\n                            \"\\u2a64\": e.MO.BIN4,\n                            \"\\u2a65\": e.MO.BIN4,\n                            \"\\u2a66\": e.MO.REL,\n                            \"\\u2a67\": e.MO.REL,\n                            \"\\u2a68\": e.MO.REL,\n                            \"\\u2a69\": e.MO.REL,\n                            \"\\u2a6a\": e.MO.REL,\n                            \"\\u2a6b\": e.MO.REL,\n                            \"\\u2a6c\": e.MO.REL,\n                            \"\\u2a6d\": e.MO.REL,\n                            \"\\u2a6e\": e.MO.REL,\n                            \"\\u2a6f\": e.MO.REL,\n                            \"\\u2a70\": e.MO.REL,\n                            \"\\u2a71\": e.MO.BIN4,\n                            \"\\u2a72\": e.MO.BIN4,\n                            \"\\u2a73\": e.MO.REL,\n                            \"\\u2a74\": e.MO.REL,\n                            \"\\u2a75\": e.MO.REL,\n                            \"\\u2a76\": e.MO.REL,\n                            \"\\u2a77\": e.MO.REL,\n                            \"\\u2a78\": e.MO.REL,\n                            \"\\u2a79\": e.MO.REL,\n                            \"\\u2a7a\": e.MO.REL,\n                            \"\\u2a7b\": e.MO.REL,\n                            \"\\u2a7c\": e.MO.REL,\n                            \"\\u2a7d\": e.MO.REL,\n                            \"\\u2a7d\\u0338\": e.MO.REL,\n                            \"\\u2a7e\": e.MO.REL,\n                            \"\\u2a7e\\u0338\": e.MO.REL,\n                            \"\\u2a7f\": e.MO.REL,\n                            \"\\u2a80\": e.MO.REL,\n                            \"\\u2a81\": e.MO.REL,\n                            \"\\u2a82\": e.MO.REL,\n                            \"\\u2a83\": e.MO.REL,\n                            \"\\u2a84\": e.MO.REL,\n                            \"\\u2a85\": e.MO.REL,\n                            \"\\u2a86\": e.MO.REL,\n                            \"\\u2a87\": e.MO.REL,\n                            \"\\u2a88\": e.MO.REL,\n                            \"\\u2a89\": e.MO.REL,\n                            \"\\u2a8a\": e.MO.REL,\n                            \"\\u2a8b\": e.MO.REL,\n                            \"\\u2a8c\": e.MO.REL,\n                            \"\\u2a8d\": e.MO.REL,\n                            \"\\u2a8e\": e.MO.REL,\n                            \"\\u2a8f\": e.MO.REL,\n                            \"\\u2a90\": e.MO.REL,\n                            \"\\u2a91\": e.MO.REL,\n                            \"\\u2a92\": e.MO.REL,\n                            \"\\u2a93\": e.MO.REL,\n                            \"\\u2a94\": e.MO.REL,\n                            \"\\u2a95\": e.MO.REL,\n                            \"\\u2a96\": e.MO.REL,\n                            \"\\u2a97\": e.MO.REL,\n                            \"\\u2a98\": e.MO.REL,\n                            \"\\u2a99\": e.MO.REL,\n                            \"\\u2a9a\": e.MO.REL,\n                            \"\\u2a9b\": e.MO.REL,\n                            \"\\u2a9c\": e.MO.REL,\n                            \"\\u2a9d\": e.MO.REL,\n                            \"\\u2a9e\": e.MO.REL,\n                            \"\\u2a9f\": e.MO.REL,\n                            \"\\u2aa0\": e.MO.REL,\n                            \"\\u2aa1\": e.MO.REL,\n                            \"\\u2aa1\\u0338\": e.MO.REL,\n                            \"\\u2aa2\": e.MO.REL,\n                            \"\\u2aa2\\u0338\": e.MO.REL,\n                            \"\\u2aa3\": e.MO.REL,\n                            \"\\u2aa4\": e.MO.REL,\n                            \"\\u2aa5\": e.MO.REL,\n                            \"\\u2aa6\": e.MO.REL,\n                            \"\\u2aa7\": e.MO.REL,\n                            \"\\u2aa8\": e.MO.REL,\n                            \"\\u2aa9\": e.MO.REL,\n                            \"\\u2aaa\": e.MO.REL,\n                            \"\\u2aab\": e.MO.REL,\n                            \"\\u2aac\": e.MO.REL,\n                            \"\\u2aad\": e.MO.REL,\n                            \"\\u2aae\": e.MO.REL,\n                            \"\\u2aaf\": e.MO.REL,\n                            \"\\u2aaf\\u0338\": e.MO.REL,\n                            \"\\u2ab0\": e.MO.REL,\n                            \"\\u2ab0\\u0338\": e.MO.REL,\n                            \"\\u2ab1\": e.MO.REL,\n                            \"\\u2ab2\": e.MO.REL,\n                            \"\\u2ab3\": e.MO.REL,\n                            \"\\u2ab4\": e.MO.REL,\n                            \"\\u2ab5\": e.MO.REL,\n                            \"\\u2ab6\": e.MO.REL,\n                            \"\\u2ab7\": e.MO.REL,\n                            \"\\u2ab8\": e.MO.REL,\n                            \"\\u2ab9\": e.MO.REL,\n                            \"\\u2aba\": e.MO.REL,\n                            \"\\u2abb\": e.MO.REL,\n                            \"\\u2abc\": e.MO.REL,\n                            \"\\u2abd\": e.MO.REL,\n                            \"\\u2abe\": e.MO.REL,\n                            \"\\u2abf\": e.MO.REL,\n                            \"\\u2ac0\": e.MO.REL,\n                            \"\\u2ac1\": e.MO.REL,\n                            \"\\u2ac2\": e.MO.REL,\n                            \"\\u2ac3\": e.MO.REL,\n                            \"\\u2ac4\": e.MO.REL,\n                            \"\\u2ac5\": e.MO.REL,\n                            \"\\u2ac6\": e.MO.REL,\n                            \"\\u2ac7\": e.MO.REL,\n                            \"\\u2ac8\": e.MO.REL,\n                            \"\\u2ac9\": e.MO.REL,\n                            \"\\u2aca\": e.MO.REL,\n                            \"\\u2acb\": e.MO.REL,\n                            \"\\u2acc\": e.MO.REL,\n                            \"\\u2acd\": e.MO.REL,\n                            \"\\u2ace\": e.MO.REL,\n                            \"\\u2acf\": e.MO.REL,\n                            \"\\u2ad0\": e.MO.REL,\n                            \"\\u2ad1\": e.MO.REL,\n                            \"\\u2ad2\": e.MO.REL,\n                            \"\\u2ad3\": e.MO.REL,\n                            \"\\u2ad4\": e.MO.REL,\n                            \"\\u2ad5\": e.MO.REL,\n                            \"\\u2ad6\": e.MO.REL,\n                            \"\\u2ad7\": e.MO.REL,\n                            \"\\u2ad8\": e.MO.REL,\n                            \"\\u2ad9\": e.MO.REL,\n                            \"\\u2ada\": e.MO.REL,\n                            \"\\u2adb\": e.MO.REL,\n                            \"\\u2add\": e.MO.REL,\n                            \"\\u2add\\u0338\": e.MO.REL,\n                            \"\\u2ade\": e.MO.REL,\n                            \"\\u2adf\": e.MO.REL,\n                            \"\\u2ae0\": e.MO.REL,\n                            \"\\u2ae1\": e.MO.REL,\n                            \"\\u2ae2\": e.MO.REL,\n                            \"\\u2ae3\": e.MO.REL,\n                            \"\\u2ae4\": e.MO.REL,\n                            \"\\u2ae5\": e.MO.REL,\n                            \"\\u2ae6\": e.MO.REL,\n                            \"\\u2ae7\": e.MO.REL,\n                            \"\\u2ae8\": e.MO.REL,\n                            \"\\u2ae9\": e.MO.REL,\n                            \"\\u2aea\": e.MO.REL,\n                            \"\\u2aeb\": e.MO.REL,\n                            \"\\u2aec\": e.MO.REL,\n                            \"\\u2aed\": e.MO.REL,\n                            \"\\u2aee\": e.MO.REL,\n                            \"\\u2aef\": e.MO.REL,\n                            \"\\u2af0\": e.MO.REL,\n                            \"\\u2af1\": e.MO.REL,\n                            \"\\u2af2\": e.MO.REL,\n                            \"\\u2af3\": e.MO.REL,\n                            \"\\u2af4\": e.MO.BIN4,\n                            \"\\u2af5\": e.MO.BIN4,\n                            \"\\u2af6\": e.MO.BIN4,\n                            \"\\u2af7\": e.MO.REL,\n                            \"\\u2af8\": e.MO.REL,\n                            \"\\u2af9\": e.MO.REL,\n                            \"\\u2afa\": e.MO.REL,\n                            \"\\u2afb\": e.MO.BIN4,\n                            \"\\u2afd\": e.MO.BIN4,\n                            \"\\u2afe\": e.MO.BIN3,\n                            \"\\u2b45\": e.MO.RELSTRETCH,\n                            \"\\u2b46\": e.MO.RELSTRETCH,\n                            \"\\u3008\": e.MO.OPEN,\n                            \"\\u3009\": e.MO.CLOSE,\n                            \"\\ufe37\": e.MO.WIDEACCENT,\n                            \"\\ufe38\": e.MO.WIDEACCENT,\n                        },\n                    }),\n                    (e.OPTABLE.infix[\"^\"] = e.MO.WIDEREL),\n                    (e.OPTABLE.infix._ = e.MO.WIDEREL),\n                    (e.OPTABLE.infix[\"\\u2adc\"] = e.MO.REL);\n            },\n            9259: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SerializedMmlVisitor = e.toEntity = e.DATAMJX = void 0);\n                var a = r(6325),\n                    l = r(9007),\n                    c = r(450);\n                e.DATAMJX = \"data-mjx-\";\n                e.toEntity = function (t) {\n                    return (\n                        \"&#x\" +\n                        t.codePointAt(0).toString(16).toUpperCase() +\n                        \";\"\n                    );\n                };\n                var u = (function (t) {\n                    function r() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(r, t),\n                        (r.prototype.visitTree = function (t) {\n                            return this.visitNode(t, \"\");\n                        }),\n                        (r.prototype.visitTextNode = function (t, e) {\n                            return this.quoteHTML(t.getText());\n                        }),\n                        (r.prototype.visitXMLNode = function (t, e) {\n                            return e + t.getSerializedXML();\n                        }),\n                        (r.prototype.visitInferredMrowNode = function (t, e) {\n                            var r,\n                                n,\n                                o = [];\n                            try {\n                                for (\n                                    var s = i(t.childNodes), a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var l = a.value;\n                                    o.push(this.visitNode(l, e));\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (n = s.return) && n.call(s);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            return o.join(\"\\n\");\n                        }),\n                        (r.prototype.visitTeXAtomNode = function (t, e) {\n                            var r = this.childNodeMml(t, e + \"  \", \"\\n\");\n                            return (\n                                e +\n                                \"<mrow\" +\n                                this.getAttributes(t) +\n                                \">\" +\n                                (r.match(/\\S/) ? \"\\n\" + r + e : \"\") +\n                                \"</mrow>\"\n                            );\n                        }),\n                        (r.prototype.visitAnnotationNode = function (t, e) {\n                            return (\n                                e +\n                                \"<annotation\" +\n                                this.getAttributes(t) +\n                                \">\" +\n                                this.childNodeMml(t, \"\", \"\") +\n                                \"</annotation>\"\n                            );\n                        }),\n                        (r.prototype.visitDefault = function (t, e) {\n                            var r = t.kind,\n                                n = s(\n                                    t.isToken || 0 === t.childNodes.length\n                                        ? [\"\", \"\"]\n                                        : [\"\\n\", e],\n                                    2\n                                ),\n                                o = n[0],\n                                i = n[1],\n                                a = this.childNodeMml(t, e + \"  \", o);\n                            return (\n                                e +\n                                \"<\" +\n                                r +\n                                this.getAttributes(t) +\n                                \">\" +\n                                (a.match(/\\S/) ? o + a + i : \"\") +\n                                \"</\" +\n                                r +\n                                \">\"\n                            );\n                        }),\n                        (r.prototype.childNodeMml = function (t, e, r) {\n                            var n,\n                                o,\n                                s = \"\";\n                            try {\n                                for (\n                                    var a = i(t.childNodes), l = a.next();\n                                    !l.done;\n                                    l = a.next()\n                                ) {\n                                    var c = l.value;\n                                    s += this.visitNode(c, e) + r;\n                                }\n                            } catch (t) {\n                                n = { error: t };\n                            } finally {\n                                try {\n                                    l && !l.done && (o = a.return) && o.call(a);\n                                } finally {\n                                    if (n) throw n.error;\n                                }\n                            }\n                            return s;\n                        }),\n                        (r.prototype.getAttributes = function (t) {\n                            var e,\n                                r,\n                                n = [],\n                                o =\n                                    this.constructor.defaultAttributes[\n                                        t.kind\n                                    ] || {},\n                                s = Object.assign(\n                                    {},\n                                    o,\n                                    this.getDataAttributes(t),\n                                    t.attributes.getAllAttributes()\n                                ),\n                                a = this.constructor.variants;\n                            s.hasOwnProperty(\"mathvariant\") &&\n                                a.hasOwnProperty(s.mathvariant) &&\n                                (s.mathvariant = a[s.mathvariant]);\n                            try {\n                                for (\n                                    var l = i(Object.keys(s)), c = l.next();\n                                    !c.done;\n                                    c = l.next()\n                                ) {\n                                    var u = c.value,\n                                        p = String(s[u]);\n                                    void 0 !== p &&\n                                        n.push(\n                                            u + '=\"' + this.quoteHTML(p) + '\"'\n                                        );\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    c && !c.done && (r = l.return) && r.call(l);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            return n.length ? \" \" + n.join(\" \") : \"\";\n                        }),\n                        (r.prototype.getDataAttributes = function (t) {\n                            var e = {},\n                                r = t.attributes.getExplicit(\"mathvariant\"),\n                                n = this.constructor.variants;\n                            r &&\n                                n.hasOwnProperty(r) &&\n                                this.setDataAttribute(e, \"variant\", r),\n                                t.getProperty(\"variantForm\") &&\n                                    this.setDataAttribute(e, \"alternate\", \"1\"),\n                                t.getProperty(\"pseudoscript\") &&\n                                    this.setDataAttribute(\n                                        e,\n                                        \"pseudoscript\",\n                                        \"true\"\n                                    ),\n                                !1 === t.getProperty(\"autoOP\") &&\n                                    this.setDataAttribute(\n                                        e,\n                                        \"auto-op\",\n                                        \"false\"\n                                    );\n                            var o = t.getProperty(\"scriptalign\");\n                            o && this.setDataAttribute(e, \"script-align\", o);\n                            var i = t.getProperty(\"texClass\");\n                            if (void 0 !== i) {\n                                var s = !0;\n                                if (i === l.TEXCLASS.OP && t.isKind(\"mi\")) {\n                                    var a = t.getText();\n                                    s = !(\n                                        a.length > 1 &&\n                                        a.match(c.MmlMi.operatorName)\n                                    );\n                                }\n                                s &&\n                                    this.setDataAttribute(\n                                        e,\n                                        \"texclass\",\n                                        i < 0 ? \"NONE\" : l.TEXCLASSNAMES[i]\n                                    );\n                            }\n                            return (\n                                t.getProperty(\"scriptlevel\") &&\n                                    !1 === t.getProperty(\"useHeight\") &&\n                                    this.setDataAttribute(\n                                        e,\n                                        \"smallmatrix\",\n                                        \"true\"\n                                    ),\n                                e\n                            );\n                        }),\n                        (r.prototype.setDataAttribute = function (t, r, n) {\n                            t[e.DATAMJX + r] = n;\n                        }),\n                        (r.prototype.quoteHTML = function (t) {\n                            return t\n                                .replace(/&/g, \"&amp;\")\n                                .replace(/</g, \"&lt;\")\n                                .replace(/>/g, \"&gt;\")\n                                .replace(/\\\"/g, \"&quot;\")\n                                .replace(/[\\uD800-\\uDBFF]./g, e.toEntity)\n                                .replace(\n                                    /[\\u0080-\\uD7FF\\uE000-\\uFFFF]/g,\n                                    e.toEntity\n                                );\n                        }),\n                        (r.variants = {\n                            \"-tex-calligraphic\": \"script\",\n                            \"-tex-bold-calligraphic\": \"bold-script\",\n                            \"-tex-oldstyle\": \"normal\",\n                            \"-tex-bold-oldstyle\": \"bold\",\n                            \"-tex-mathit\": \"italic\",\n                        }),\n                        (r.defaultAttributes = {\n                            math: {\n                                xmlns: \"http://www.w3.org/1998/Math/MathML\",\n                            },\n                        }),\n                        r\n                    );\n                })(a.MmlVisitor);\n                e.SerializedMmlVisitor = u;\n            },\n            2975: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractOutputJax = void 0);\n                var n = r(7233),\n                    o = r(7525),\n                    i = (function () {\n                        function t(t) {\n                            void 0 === t && (t = {}), (this.adaptor = null);\n                            var e = this.constructor;\n                            (this.options = (0, n.userOptions)(\n                                (0, n.defaultOptions)({}, e.OPTIONS),\n                                t\n                            )),\n                                (this.postFilters = new o.FunctionList());\n                        }\n                        return (\n                            Object.defineProperty(t.prototype, \"name\", {\n                                get: function () {\n                                    return this.constructor.NAME;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.setAdaptor = function (t) {\n                                this.adaptor = t;\n                            }),\n                            (t.prototype.initialize = function () {}),\n                            (t.prototype.reset = function () {\n                                for (\n                                    var t = [], e = 0;\n                                    e < arguments.length;\n                                    e++\n                                )\n                                    t[e] = arguments[e];\n                            }),\n                            (t.prototype.getMetrics = function (t) {}),\n                            (t.prototype.styleSheet = function (t) {\n                                return null;\n                            }),\n                            (t.prototype.pageElements = function (t) {\n                                return null;\n                            }),\n                            (t.prototype.executeFilters = function (\n                                t,\n                                e,\n                                r,\n                                n\n                            ) {\n                                var o = { math: e, document: r, data: n };\n                                return t.execute(o), o.data;\n                            }),\n                            (t.NAME = \"generic\"),\n                            (t.OPTIONS = {}),\n                            t\n                        );\n                    })();\n                e.AbstractOutputJax = i;\n            },\n            4574: function (t, e) {\n                var r =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    n =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    o =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractFactory = void 0);\n                var i = (function () {\n                    function t(t) {\n                        var e, n;\n                        void 0 === t && (t = null),\n                            (this.defaultKind = \"unknown\"),\n                            (this.nodeMap = new Map()),\n                            (this.node = {}),\n                            null === t && (t = this.constructor.defaultNodes);\n                        try {\n                            for (\n                                var o = r(Object.keys(t)), i = o.next();\n                                !i.done;\n                                i = o.next()\n                            ) {\n                                var s = i.value;\n                                this.setNodeClass(s, t[s]);\n                            }\n                        } catch (t) {\n                            e = { error: t };\n                        } finally {\n                            try {\n                                i && !i.done && (n = o.return) && n.call(o);\n                            } finally {\n                                if (e) throw e.error;\n                            }\n                        }\n                    }\n                    return (\n                        (t.prototype.create = function (t) {\n                            for (var e = [], r = 1; r < arguments.length; r++)\n                                e[r - 1] = arguments[r];\n                            return (\n                                this.node[t] || this.node[this.defaultKind]\n                            ).apply(void 0, o([], n(e), !1));\n                        }),\n                        (t.prototype.setNodeClass = function (t, e) {\n                            this.nodeMap.set(t, e);\n                            var r = this,\n                                i = this.nodeMap.get(t);\n                            this.node[t] = function () {\n                                for (\n                                    var t = [], e = 0;\n                                    e < arguments.length;\n                                    e++\n                                )\n                                    t[e] = arguments[e];\n                                return new (i.bind.apply(\n                                    i,\n                                    o([void 0, r], n(t), !1)\n                                ))();\n                            };\n                        }),\n                        (t.prototype.getNodeClass = function (t) {\n                            return this.nodeMap.get(t);\n                        }),\n                        (t.prototype.deleteNodeClass = function (t) {\n                            this.nodeMap.delete(t), delete this.node[t];\n                        }),\n                        (t.prototype.nodeIsKind = function (t, e) {\n                            return t instanceof this.getNodeClass(e);\n                        }),\n                        (t.prototype.getKinds = function () {\n                            return Array.from(this.nodeMap.keys());\n                        }),\n                        (t.defaultNodes = {}),\n                        t\n                    );\n                })();\n                e.AbstractFactory = i;\n            },\n            4596: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (o =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                o.apply(this, arguments)\n                            );\n                        },\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractEmptyNode = e.AbstractNode = void 0);\n                var s = (function () {\n                    function t(t, e, r) {\n                        var n, o;\n                        void 0 === e && (e = {}),\n                            void 0 === r && (r = []),\n                            (this.factory = t),\n                            (this.parent = null),\n                            (this.properties = {}),\n                            (this.childNodes = []);\n                        try {\n                            for (\n                                var s = i(Object.keys(e)), a = s.next();\n                                !a.done;\n                                a = s.next()\n                            ) {\n                                var l = a.value;\n                                this.setProperty(l, e[l]);\n                            }\n                        } catch (t) {\n                            n = { error: t };\n                        } finally {\n                            try {\n                                a && !a.done && (o = s.return) && o.call(s);\n                            } finally {\n                                if (n) throw n.error;\n                            }\n                        }\n                        r.length && this.setChildren(r);\n                    }\n                    return (\n                        Object.defineProperty(t.prototype, \"kind\", {\n                            get: function () {\n                                return \"unknown\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (t.prototype.setProperty = function (t, e) {\n                            this.properties[t] = e;\n                        }),\n                        (t.prototype.getProperty = function (t) {\n                            return this.properties[t];\n                        }),\n                        (t.prototype.getPropertyNames = function () {\n                            return Object.keys(this.properties);\n                        }),\n                        (t.prototype.getAllProperties = function () {\n                            return this.properties;\n                        }),\n                        (t.prototype.removeProperty = function () {\n                            for (\n                                var t, e, r = [], n = 0;\n                                n < arguments.length;\n                                n++\n                            )\n                                r[n] = arguments[n];\n                            try {\n                                for (\n                                    var o = i(r), s = o.next();\n                                    !s.done;\n                                    s = o.next()\n                                ) {\n                                    var a = s.value;\n                                    delete this.properties[a];\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    s && !s.done && (e = o.return) && e.call(o);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.isKind = function (t) {\n                            return this.factory.nodeIsKind(this, t);\n                        }),\n                        (t.prototype.setChildren = function (t) {\n                            var e, r;\n                            this.childNodes = [];\n                            try {\n                                for (\n                                    var n = i(t), o = n.next();\n                                    !o.done;\n                                    o = n.next()\n                                ) {\n                                    var s = o.value;\n                                    this.appendChild(s);\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    o && !o.done && (r = n.return) && r.call(n);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.appendChild = function (t) {\n                            return (\n                                this.childNodes.push(t), (t.parent = this), t\n                            );\n                        }),\n                        (t.prototype.replaceChild = function (t, e) {\n                            var r = this.childIndex(e);\n                            return (\n                                null !== r &&\n                                    ((this.childNodes[r] = t),\n                                    (t.parent = this),\n                                    (e.parent = null)),\n                                t\n                            );\n                        }),\n                        (t.prototype.removeChild = function (t) {\n                            var e = this.childIndex(t);\n                            return (\n                                null !== e &&\n                                    (this.childNodes.splice(e, 1),\n                                    (t.parent = null)),\n                                t\n                            );\n                        }),\n                        (t.prototype.childIndex = function (t) {\n                            var e = this.childNodes.indexOf(t);\n                            return -1 === e ? null : e;\n                        }),\n                        (t.prototype.copy = function () {\n                            var t,\n                                e,\n                                r = this.factory.create(this.kind);\n                            r.properties = o({}, this.properties);\n                            try {\n                                for (\n                                    var n = i(this.childNodes || []),\n                                        s = n.next();\n                                    !s.done;\n                                    s = n.next()\n                                ) {\n                                    var a = s.value;\n                                    a && r.appendChild(a.copy());\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    s && !s.done && (e = n.return) && e.call(n);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            return r;\n                        }),\n                        (t.prototype.findNodes = function (t) {\n                            var e = [];\n                            return (\n                                this.walkTree(function (r) {\n                                    r.isKind(t) && e.push(r);\n                                }),\n                                e\n                            );\n                        }),\n                        (t.prototype.walkTree = function (t, e) {\n                            var r, n;\n                            t(this, e);\n                            try {\n                                for (\n                                    var o = i(this.childNodes), s = o.next();\n                                    !s.done;\n                                    s = o.next()\n                                ) {\n                                    var a = s.value;\n                                    a && a.walkTree(t, e);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    s && !s.done && (n = o.return) && n.call(o);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            return e;\n                        }),\n                        (t.prototype.toString = function () {\n                            return (\n                                this.kind +\n                                \"(\" +\n                                this.childNodes.join(\",\") +\n                                \")\"\n                            );\n                        }),\n                        t\n                    );\n                })();\n                e.AbstractNode = s;\n                var a = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        n(e, t),\n                        (e.prototype.setChildren = function (t) {}),\n                        (e.prototype.appendChild = function (t) {\n                            return t;\n                        }),\n                        (e.prototype.replaceChild = function (t, e) {\n                            return e;\n                        }),\n                        (e.prototype.childIndex = function (t) {\n                            return null;\n                        }),\n                        (e.prototype.walkTree = function (t, e) {\n                            return t(this, e), e;\n                        }),\n                        (e.prototype.toString = function () {\n                            return this.kind;\n                        }),\n                        e\n                    );\n                })(s);\n                e.AbstractEmptyNode = a;\n            },\n            7860: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractNodeFactory = void 0);\n                var i = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.create = function (t, e, r) {\n                            return (\n                                void 0 === e && (e = {}),\n                                void 0 === r && (r = []),\n                                this.node[t](e, r)\n                            );\n                        }),\n                        e\n                    );\n                })(r(4574).AbstractFactory);\n                e.AbstractNodeFactory = i;\n            },\n            8823: function (t, e, r) {\n                var n =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractVisitor = void 0);\n                var s = r(4596),\n                    a = (function () {\n                        function t(e) {\n                            var r, o;\n                            this.nodeHandlers = new Map();\n                            try {\n                                for (\n                                    var i = n(e.getKinds()), s = i.next();\n                                    !s.done;\n                                    s = i.next()\n                                ) {\n                                    var a = s.value,\n                                        l = this[t.methodName(a)];\n                                    l && this.nodeHandlers.set(a, l);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    s && !s.done && (o = i.return) && o.call(i);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                        }\n                        return (\n                            (t.methodName = function (t) {\n                                return (\n                                    \"visit\" +\n                                    (\n                                        t.charAt(0).toUpperCase() + t.substr(1)\n                                    ).replace(/[^a-z0-9_]/gi, \"_\") +\n                                    \"Node\"\n                                );\n                            }),\n                            (t.prototype.visitTree = function (t) {\n                                for (\n                                    var e = [], r = 1;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r - 1] = arguments[r];\n                                return this.visitNode.apply(\n                                    this,\n                                    i([t], o(e), !1)\n                                );\n                            }),\n                            (t.prototype.visitNode = function (t) {\n                                for (\n                                    var e = [], r = 1;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r - 1] = arguments[r];\n                                var n =\n                                    this.nodeHandlers.get(t.kind) ||\n                                    this.visitDefault;\n                                return n.call.apply(n, i([this, t], o(e), !1));\n                            }),\n                            (t.prototype.visitDefault = function (t) {\n                                for (\n                                    var e, r, a = [], l = 1;\n                                    l < arguments.length;\n                                    l++\n                                )\n                                    a[l - 1] = arguments[l];\n                                if (t instanceof s.AbstractNode)\n                                    try {\n                                        for (\n                                            var c = n(t.childNodes),\n                                                u = c.next();\n                                            !u.done;\n                                            u = c.next()\n                                        ) {\n                                            var p = u.value;\n                                            this.visitNode.apply(\n                                                this,\n                                                i([p], o(a), !1)\n                                            );\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            u &&\n                                                !u.done &&\n                                                (r = c.return) &&\n                                                r.call(c);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                            }),\n                            (t.prototype.setNodeHandler = function (t, e) {\n                                this.nodeHandlers.set(t, e);\n                            }),\n                            (t.prototype.removeNodeHandler = function (t) {\n                                this.nodeHandlers.delete(t);\n                            }),\n                            t\n                        );\n                    })();\n                e.AbstractVisitor = a;\n            },\n            8912: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractWrapper = void 0);\n                var r = (function () {\n                    function t(t, e) {\n                        (this.factory = t), (this.node = e);\n                    }\n                    return (\n                        Object.defineProperty(t.prototype, \"kind\", {\n                            get: function () {\n                                return this.node.kind;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (t.prototype.wrap = function (t) {\n                            return this.factory.wrap(t);\n                        }),\n                        t\n                    );\n                })();\n                e.AbstractWrapper = r;\n            },\n            3811: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractWrapperFactory = void 0);\n                var a = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.wrap = function (t) {\n                            for (var e = [], r = 1; r < arguments.length; r++)\n                                e[r - 1] = arguments[r];\n                            return this.create.apply(\n                                this,\n                                s([t.kind, t], i(e), !1)\n                            );\n                        }),\n                        e\n                    );\n                })(r(4574).AbstractFactory);\n                e.AbstractWrapperFactory = a;\n            },\n            6272: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.RegisterHTMLHandler = void 0);\n                var n = r(5713),\n                    o = r(3726);\n                e.RegisterHTMLHandler = function (t) {\n                    var e = new o.HTMLHandler(t);\n                    return n.mathjax.handlers.register(e), e;\n                };\n            },\n            3683: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    a =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.HTMLDocument = void 0);\n                var l = r(5722),\n                    c = r(7233),\n                    u = r(3363),\n                    p = r(3335),\n                    h = r(5138),\n                    f = r(4474),\n                    d = (function (t) {\n                        function e(e, r, n) {\n                            var o = this,\n                                i = s(\n                                    (0, c.separateOptions)(\n                                        n,\n                                        h.HTMLDomStrings.OPTIONS\n                                    ),\n                                    2\n                                ),\n                                a = i[0],\n                                l = i[1];\n                            return (\n                                ((o =\n                                    t.call(this, e, r, a) || this).domStrings =\n                                    o.options.DomStrings ||\n                                    new h.HTMLDomStrings(l)),\n                                (o.domStrings.adaptor = r),\n                                (o.styles = []),\n                                o\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.findPosition = function (t, e, r, n) {\n                                var o,\n                                    i,\n                                    l = this.adaptor;\n                                try {\n                                    for (\n                                        var c = a(n[t]), u = c.next();\n                                        !u.done;\n                                        u = c.next()\n                                    ) {\n                                        var p = u.value,\n                                            h = s(p, 2),\n                                            f = h[0],\n                                            d = h[1];\n                                        if (e <= d && \"#text\" === l.kind(f))\n                                            return {\n                                                node: f,\n                                                n: Math.max(e, 0),\n                                                delim: r,\n                                            };\n                                        e -= d;\n                                    }\n                                } catch (t) {\n                                    o = { error: t };\n                                } finally {\n                                    try {\n                                        u &&\n                                            !u.done &&\n                                            (i = c.return) &&\n                                            i.call(c);\n                                    } finally {\n                                        if (o) throw o.error;\n                                    }\n                                }\n                                return { node: null, n: 0, delim: r };\n                            }),\n                            (e.prototype.mathItem = function (t, e, r) {\n                                var n = t.math,\n                                    o = this.findPosition(\n                                        t.n,\n                                        t.start.n,\n                                        t.open,\n                                        r\n                                    ),\n                                    i = this.findPosition(\n                                        t.n,\n                                        t.end.n,\n                                        t.close,\n                                        r\n                                    );\n                                return new this.options.MathItem(\n                                    n,\n                                    e,\n                                    t.display,\n                                    o,\n                                    i\n                                );\n                            }),\n                            (e.prototype.findMath = function (t) {\n                                var e, r, n, o, i, l, u, p, h;\n                                if (!this.processed.isSet(\"findMath\")) {\n                                    (this.adaptor.document = this.document),\n                                        (t = (0, c.userOptions)(\n                                            {\n                                                elements: this.options\n                                                    .elements || [\n                                                    this.adaptor.body(\n                                                        this.document\n                                                    ),\n                                                ],\n                                            },\n                                            t\n                                        ));\n                                    try {\n                                        for (\n                                            var f = a(\n                                                    this.adaptor.getElements(\n                                                        t.elements,\n                                                        this.document\n                                                    )\n                                                ),\n                                                d = f.next();\n                                            !d.done;\n                                            d = f.next()\n                                        ) {\n                                            var m = d.value,\n                                                y = s([null, null], 2),\n                                                g = y[0],\n                                                b = y[1];\n                                            try {\n                                                for (\n                                                    var v =\n                                                            ((n = void 0),\n                                                            a(this.inputJax)),\n                                                        _ = v.next();\n                                                    !_.done;\n                                                    _ = v.next()\n                                                ) {\n                                                    var S = _.value,\n                                                        M =\n                                                            new this.options.MathList();\n                                                    if (S.processStrings) {\n                                                        null === g &&\n                                                            ((g = (i = s(\n                                                                this.domStrings.find(\n                                                                    m\n                                                                ),\n                                                                2\n                                                            ))[0]),\n                                                            (b = i[1]));\n                                                        try {\n                                                            for (\n                                                                var O =\n                                                                        ((l =\n                                                                            void 0),\n                                                                        a(\n                                                                            S.findMath(\n                                                                                g\n                                                                            )\n                                                                        )),\n                                                                    x =\n                                                                        O.next();\n                                                                !x.done;\n                                                                x = O.next()\n                                                            ) {\n                                                                var E = x.value;\n                                                                M.push(\n                                                                    this.mathItem(\n                                                                        E,\n                                                                        S,\n                                                                        b\n                                                                    )\n                                                                );\n                                                            }\n                                                        } catch (t) {\n                                                            l = { error: t };\n                                                        } finally {\n                                                            try {\n                                                                x &&\n                                                                    !x.done &&\n                                                                    (u =\n                                                                        O.return) &&\n                                                                    u.call(O);\n                                                            } finally {\n                                                                if (l)\n                                                                    throw l.error;\n                                                            }\n                                                        }\n                                                    } else\n                                                        try {\n                                                            for (\n                                                                var A =\n                                                                        ((p =\n                                                                            void 0),\n                                                                        a(\n                                                                            S.findMath(\n                                                                                m\n                                                                            )\n                                                                        )),\n                                                                    C =\n                                                                        A.next();\n                                                                !C.done;\n                                                                C = A.next()\n                                                            ) {\n                                                                E = C.value;\n                                                                var T =\n                                                                    new this.options.MathItem(\n                                                                        E.math,\n                                                                        S,\n                                                                        E.display,\n                                                                        E.start,\n                                                                        E.end\n                                                                    );\n                                                                M.push(T);\n                                                            }\n                                                        } catch (t) {\n                                                            p = { error: t };\n                                                        } finally {\n                                                            try {\n                                                                C &&\n                                                                    !C.done &&\n                                                                    (h =\n                                                                        A.return) &&\n                                                                    h.call(A);\n                                                            } finally {\n                                                                if (p)\n                                                                    throw p.error;\n                                                            }\n                                                        }\n                                                    this.math.merge(M);\n                                                }\n                                            } catch (t) {\n                                                n = { error: t };\n                                            } finally {\n                                                try {\n                                                    _ &&\n                                                        !_.done &&\n                                                        (o = v.return) &&\n                                                        o.call(v);\n                                                } finally {\n                                                    if (n) throw n.error;\n                                                }\n                                            }\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            d &&\n                                                !d.done &&\n                                                (r = f.return) &&\n                                                r.call(f);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                                    this.processed.set(\"findMath\");\n                                }\n                                return this;\n                            }),\n                            (e.prototype.updateDocument = function () {\n                                return (\n                                    this.processed.isSet(\"updateDocument\") ||\n                                        (this.addPageElements(),\n                                        this.addStyleSheet(),\n                                        t.prototype.updateDocument.call(this),\n                                        this.processed.set(\"updateDocument\")),\n                                    this\n                                );\n                            }),\n                            (e.prototype.addPageElements = function () {\n                                var t = this.adaptor.body(this.document),\n                                    e = this.documentPageElements();\n                                e && this.adaptor.append(t, e);\n                            }),\n                            (e.prototype.addStyleSheet = function () {\n                                var t = this.documentStyleSheet(),\n                                    e = this.adaptor;\n                                if (t && !e.parent(t)) {\n                                    var r = e.head(this.document),\n                                        n = this.findSheet(\n                                            r,\n                                            e.getAttribute(t, \"id\")\n                                        );\n                                    n ? e.replace(t, n) : e.append(r, t);\n                                }\n                            }),\n                            (e.prototype.findSheet = function (t, e) {\n                                var r, n;\n                                if (e)\n                                    try {\n                                        for (\n                                            var o = a(\n                                                    this.adaptor.tags(\n                                                        t,\n                                                        \"style\"\n                                                    )\n                                                ),\n                                                i = o.next();\n                                            !i.done;\n                                            i = o.next()\n                                        ) {\n                                            var s = i.value;\n                                            if (\n                                                this.adaptor.getAttribute(\n                                                    s,\n                                                    \"id\"\n                                                ) === e\n                                            )\n                                                return s;\n                                        }\n                                    } catch (t) {\n                                        r = { error: t };\n                                    } finally {\n                                        try {\n                                            i &&\n                                                !i.done &&\n                                                (n = o.return) &&\n                                                n.call(o);\n                                        } finally {\n                                            if (r) throw r.error;\n                                        }\n                                    }\n                                return null;\n                            }),\n                            (e.prototype.removeFromDocument = function (t) {\n                                var e, r;\n                                if (\n                                    (void 0 === t && (t = !1),\n                                    this.processed.isSet(\"updateDocument\"))\n                                )\n                                    try {\n                                        for (\n                                            var n = a(this.math), o = n.next();\n                                            !o.done;\n                                            o = n.next()\n                                        ) {\n                                            var i = o.value;\n                                            i.state() >= f.STATE.INSERTED &&\n                                                i.state(f.STATE.TYPESET, t);\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            o &&\n                                                !o.done &&\n                                                (r = n.return) &&\n                                                r.call(n);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                                return (\n                                    this.processed.clear(\"updateDocument\"), this\n                                );\n                            }),\n                            (e.prototype.documentStyleSheet = function () {\n                                return this.outputJax.styleSheet(this);\n                            }),\n                            (e.prototype.documentPageElements = function () {\n                                return this.outputJax.pageElements(this);\n                            }),\n                            (e.prototype.addStyles = function (t) {\n                                this.styles.push(t);\n                            }),\n                            (e.prototype.getStyles = function () {\n                                return this.styles;\n                            }),\n                            (e.KIND = \"HTML\"),\n                            (e.OPTIONS = i(\n                                i({}, l.AbstractMathDocument.OPTIONS),\n                                {\n                                    renderActions: (0, c.expandable)(\n                                        i(\n                                            i(\n                                                {},\n                                                l.AbstractMathDocument.OPTIONS\n                                                    .renderActions\n                                            ),\n                                            {\n                                                styles: [\n                                                    f.STATE.INSERTED + 1,\n                                                    \"\",\n                                                    \"updateStyleSheet\",\n                                                    !1,\n                                                ],\n                                            }\n                                        )\n                                    ),\n                                    MathList: p.HTMLMathList,\n                                    MathItem: u.HTMLMathItem,\n                                    DomStrings: null,\n                                }\n                            )),\n                            e\n                        );\n                    })(l.AbstractMathDocument);\n                e.HTMLDocument = d;\n            },\n            5138: function (t, e, r) {\n                var n =\n                    (this && this.__read) ||\n                    function (t, e) {\n                        var r =\n                            \"function\" == typeof Symbol && t[Symbol.iterator];\n                        if (!r) return t;\n                        var n,\n                            o,\n                            i = r.call(t),\n                            s = [];\n                        try {\n                            for (\n                                ;\n                                (void 0 === e || e-- > 0) &&\n                                !(n = i.next()).done;\n\n                            )\n                                s.push(n.value);\n                        } catch (t) {\n                            o = { error: t };\n                        } finally {\n                            try {\n                                n && !n.done && (r = i.return) && r.call(i);\n                            } finally {\n                                if (o) throw o.error;\n                            }\n                        }\n                        return s;\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.HTMLDomStrings = void 0);\n                var o = r(7233),\n                    i = (function () {\n                        function t(t) {\n                            void 0 === t && (t = null);\n                            var e = this.constructor;\n                            (this.options = (0, o.userOptions)(\n                                (0, o.defaultOptions)({}, e.OPTIONS),\n                                t\n                            )),\n                                this.init(),\n                                this.getPatterns();\n                        }\n                        return (\n                            (t.prototype.init = function () {\n                                (this.strings = []),\n                                    (this.string = \"\"),\n                                    (this.snodes = []),\n                                    (this.nodes = []),\n                                    (this.stack = []);\n                            }),\n                            (t.prototype.getPatterns = function () {\n                                var t = (0, o.makeArray)(\n                                        this.options.skipHtmlTags\n                                    ),\n                                    e = (0, o.makeArray)(\n                                        this.options.ignoreHtmlClass\n                                    ),\n                                    r = (0, o.makeArray)(\n                                        this.options.processHtmlClass\n                                    );\n                                (this.skipHtmlTags = new RegExp(\n                                    \"^(?:\" + t.join(\"|\") + \")$\",\n                                    \"i\"\n                                )),\n                                    (this.ignoreHtmlClass = new RegExp(\n                                        \"(?:^| )(?:\" + e.join(\"|\") + \")(?: |$)\"\n                                    )),\n                                    (this.processHtmlClass = new RegExp(\n                                        \"(?:^| )(?:\" + r + \")(?: |$)\"\n                                    ));\n                            }),\n                            (t.prototype.pushString = function () {\n                                this.string.match(/\\S/) &&\n                                    (this.strings.push(this.string),\n                                    this.nodes.push(this.snodes)),\n                                    (this.string = \"\"),\n                                    (this.snodes = []);\n                            }),\n                            (t.prototype.extendString = function (t, e) {\n                                this.snodes.push([t, e.length]),\n                                    (this.string += e);\n                            }),\n                            (t.prototype.handleText = function (t, e) {\n                                return (\n                                    e ||\n                                        this.extendString(\n                                            t,\n                                            this.adaptor.value(t)\n                                        ),\n                                    this.adaptor.next(t)\n                                );\n                            }),\n                            (t.prototype.handleTag = function (t, e) {\n                                if (!e) {\n                                    var r =\n                                        this.options.includeHtmlTags[\n                                            this.adaptor.kind(t)\n                                        ];\n                                    this.extendString(t, r);\n                                }\n                                return this.adaptor.next(t);\n                            }),\n                            (t.prototype.handleContainer = function (t, e) {\n                                this.pushString();\n                                var r =\n                                        this.adaptor.getAttribute(t, \"class\") ||\n                                        \"\",\n                                    n = this.adaptor.kind(t) || \"\",\n                                    o = this.processHtmlClass.exec(r),\n                                    i = t;\n                                return (\n                                    !this.adaptor.firstChild(t) ||\n                                    this.adaptor.getAttribute(t, \"data-MJX\") ||\n                                    (!o && this.skipHtmlTags.exec(n))\n                                        ? (i = this.adaptor.next(t))\n                                        : (this.adaptor.next(t) &&\n                                              this.stack.push([\n                                                  this.adaptor.next(t),\n                                                  e,\n                                              ]),\n                                          (i = this.adaptor.firstChild(t)),\n                                          (e =\n                                              (e ||\n                                                  this.ignoreHtmlClass.exec(\n                                                      r\n                                                  )) &&\n                                              !o)),\n                                    [i, e]\n                                );\n                            }),\n                            (t.prototype.handleOther = function (t, e) {\n                                return this.pushString(), this.adaptor.next(t);\n                            }),\n                            (t.prototype.find = function (t) {\n                                var e, r;\n                                this.init();\n                                for (\n                                    var o = this.adaptor.next(t),\n                                        i = !1,\n                                        s = this.options.includeHtmlTags;\n                                    t && t !== o;\n\n                                ) {\n                                    var a = this.adaptor.kind(t);\n                                    \"#text\" === a\n                                        ? (t = this.handleText(t, i))\n                                        : s.hasOwnProperty(a)\n                                          ? (t = this.handleTag(t, i))\n                                          : a\n                                            ? ((t = (e = n(\n                                                  this.handleContainer(t, i),\n                                                  2\n                                              ))[0]),\n                                              (i = e[1]))\n                                            : (t = this.handleOther(t, i)),\n                                        !t &&\n                                            this.stack.length &&\n                                            (this.pushString(),\n                                            (t = (r = n(\n                                                this.stack.pop(),\n                                                2\n                                            ))[0]),\n                                            (i = r[1]));\n                                }\n                                this.pushString();\n                                var l = [this.strings, this.nodes];\n                                return this.init(), l;\n                            }),\n                            (t.OPTIONS = {\n                                skipHtmlTags: [\n                                    \"script\",\n                                    \"noscript\",\n                                    \"style\",\n                                    \"textarea\",\n                                    \"pre\",\n                                    \"code\",\n                                    \"annotation\",\n                                    \"annotation-xml\",\n                                ],\n                                includeHtmlTags: {\n                                    br: \"\\n\",\n                                    wbr: \"\",\n                                    \"#comment\": \"\",\n                                },\n                                ignoreHtmlClass: \"mathjax_ignore\",\n                                processHtmlClass: \"mathjax_process\",\n                            }),\n                            t\n                        );\n                    })();\n                e.HTMLDomStrings = i;\n            },\n            3726: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.HTMLHandler = void 0);\n                var i = r(3670),\n                    s = r(3683),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (e.documentClass = s.HTMLDocument), e;\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.handlesDocument = function (t) {\n                                var e = this.adaptor;\n                                if (\"string\" == typeof t)\n                                    try {\n                                        t = e.parse(t, \"text/html\");\n                                    } catch (t) {}\n                                return (\n                                    t instanceof e.window.Document ||\n                                    t instanceof e.window.HTMLElement ||\n                                    t instanceof e.window.DocumentFragment\n                                );\n                            }),\n                            (e.prototype.create = function (e, r) {\n                                var n = this.adaptor;\n                                if (\"string\" == typeof e)\n                                    e = n.parse(e, \"text/html\");\n                                else if (\n                                    e instanceof n.window.HTMLElement ||\n                                    e instanceof n.window.DocumentFragment\n                                ) {\n                                    var o = e;\n                                    (e = n.parse(\"\", \"text/html\")),\n                                        n.append(n.body(e), o);\n                                }\n                                return t.prototype.create.call(this, e, r);\n                            }),\n                            e\n                        );\n                    })(i.AbstractHandler);\n                e.HTMLHandler = a;\n            },\n            3363: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.HTMLMathItem = void 0);\n                var i = r(4474),\n                    s = (function (t) {\n                        function e(e, r, n, o, i) {\n                            return (\n                                void 0 === n && (n = !0),\n                                void 0 === o &&\n                                    (o = { node: null, n: 0, delim: \"\" }),\n                                void 0 === i &&\n                                    (i = { node: null, n: 0, delim: \"\" }),\n                                t.call(this, e, r, n, o, i) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"adaptor\", {\n                                get: function () {\n                                    return this.inputJax.adaptor;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.updateDocument = function (t) {\n                                if (this.state() < i.STATE.INSERTED) {\n                                    if (this.inputJax.processStrings) {\n                                        var e = this.start.node;\n                                        if (e === this.end.node)\n                                            this.end.n &&\n                                                this.end.n <\n                                                    this.adaptor.value(\n                                                        this.end.node\n                                                    ).length &&\n                                                this.adaptor.split(\n                                                    this.end.node,\n                                                    this.end.n\n                                                ),\n                                                this.start.n &&\n                                                    (e = this.adaptor.split(\n                                                        this.start.node,\n                                                        this.start.n\n                                                    )),\n                                                this.adaptor.replace(\n                                                    this.typesetRoot,\n                                                    e\n                                                );\n                                        else {\n                                            for (\n                                                this.start.n &&\n                                                (e = this.adaptor.split(\n                                                    e,\n                                                    this.start.n\n                                                ));\n                                                e !== this.end.node;\n\n                                            ) {\n                                                var r = this.adaptor.next(e);\n                                                this.adaptor.remove(e), (e = r);\n                                            }\n                                            this.adaptor.insert(\n                                                this.typesetRoot,\n                                                e\n                                            ),\n                                                this.end.n <\n                                                    this.adaptor.value(e)\n                                                        .length &&\n                                                    this.adaptor.split(\n                                                        e,\n                                                        this.end.n\n                                                    ),\n                                                this.adaptor.remove(e);\n                                        }\n                                    } else\n                                        this.adaptor.replace(\n                                            this.typesetRoot,\n                                            this.start.node\n                                        );\n                                    (this.start.node = this.end.node =\n                                        this.typesetRoot),\n                                        (this.start.n = this.end.n = 0),\n                                        this.state(i.STATE.INSERTED);\n                                }\n                            }),\n                            (e.prototype.updateStyleSheet = function (t) {\n                                t.addStyleSheet();\n                            }),\n                            (e.prototype.removeFromDocument = function (t) {\n                                if (\n                                    (void 0 === t && (t = !1),\n                                    this.state() >= i.STATE.TYPESET)\n                                ) {\n                                    var e = this.adaptor,\n                                        r = this.start.node,\n                                        n = e.text(\"\");\n                                    if (t) {\n                                        var o =\n                                            this.start.delim +\n                                            this.math +\n                                            this.end.delim;\n                                        if (this.inputJax.processStrings)\n                                            n = e.text(o);\n                                        else {\n                                            var s = e.parse(o, \"text/html\");\n                                            n = e.firstChild(e.body(s));\n                                        }\n                                    }\n                                    e.parent(r) && e.replace(n, r),\n                                        (this.start.node = this.end.node = n),\n                                        (this.start.n = this.end.n = 0);\n                                }\n                            }),\n                            e\n                        );\n                    })(i.AbstractMathItem);\n                e.HTMLMathItem = s;\n            },\n            3335: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.HTMLMathList = void 0);\n                var i = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return o(e, t), e;\n                })(r(9e3).AbstractMathList);\n                e.HTMLMathList = i;\n            },\n            2892: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MathML = void 0);\n                var s = r(9206),\n                    a = r(7233),\n                    l = r(7525),\n                    c = r(625),\n                    u = r(2769),\n                    p = (function (t) {\n                        function e(e) {\n                            void 0 === e && (e = {});\n                            var r = this,\n                                n = i(\n                                    (0, a.separateOptions)(\n                                        e,\n                                        c.FindMathML.OPTIONS,\n                                        u.MathMLCompile.OPTIONS\n                                    ),\n                                    3\n                                ),\n                                o = n[0],\n                                s = n[1],\n                                p = n[2];\n                            return (\n                                ((r = t.call(this, o) || this).findMathML =\n                                    r.options.FindMathML ||\n                                    new c.FindMathML(s)),\n                                (r.mathml =\n                                    r.options.MathMLCompile ||\n                                    new u.MathMLCompile(p)),\n                                (r.mmlFilters = new l.FunctionList()),\n                                r\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.setAdaptor = function (e) {\n                                t.prototype.setAdaptor.call(this, e),\n                                    (this.findMathML.adaptor = e),\n                                    (this.mathml.adaptor = e);\n                            }),\n                            (e.prototype.setMmlFactory = function (e) {\n                                t.prototype.setMmlFactory.call(this, e),\n                                    this.mathml.setMmlFactory(e);\n                            }),\n                            Object.defineProperty(\n                                e.prototype,\n                                \"processStrings\",\n                                {\n                                    get: function () {\n                                        return !1;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (e.prototype.compile = function (t, e) {\n                                var r = t.start.node;\n                                if (\n                                    !r ||\n                                    !t.end.node ||\n                                    this.options.forceReparse ||\n                                    \"#text\" === this.adaptor.kind(r)\n                                ) {\n                                    var n = this.executeFilters(\n                                            this.preFilters,\n                                            t,\n                                            e,\n                                            (t.math || \"<math></math>\").trim()\n                                        ),\n                                        o = this.checkForErrors(\n                                            this.adaptor.parse(\n                                                n,\n                                                \"text/\" + this.options.parseAs\n                                            )\n                                        ),\n                                        i = this.adaptor.body(o);\n                                    1 !== this.adaptor.childNodes(i).length &&\n                                        this.error(\n                                            \"MathML must consist of a single element\"\n                                        ),\n                                        (r = this.adaptor.remove(\n                                            this.adaptor.firstChild(i)\n                                        )),\n                                        \"math\" !==\n                                            this.adaptor\n                                                .kind(r)\n                                                .replace(/^[a-z]+:/, \"\") &&\n                                            this.error(\n                                                \"MathML must be formed by a <math> element, not <\" +\n                                                    this.adaptor.kind(r) +\n                                                    \">\"\n                                            );\n                                }\n                                return (\n                                    (r = this.executeFilters(\n                                        this.mmlFilters,\n                                        t,\n                                        e,\n                                        r\n                                    )),\n                                    this.executeFilters(\n                                        this.postFilters,\n                                        t,\n                                        e,\n                                        this.mathml.compile(r)\n                                    )\n                                );\n                            }),\n                            (e.prototype.checkForErrors = function (t) {\n                                var e = this.adaptor.tags(\n                                    this.adaptor.body(t),\n                                    \"parsererror\"\n                                )[0];\n                                return (\n                                    e &&\n                                        (\"\" === this.adaptor.textContent(e) &&\n                                            this.error(\n                                                \"Error processing MathML\"\n                                            ),\n                                        this.options.parseError.call(this, e)),\n                                    t\n                                );\n                            }),\n                            (e.prototype.error = function (t) {\n                                throw new Error(t);\n                            }),\n                            (e.prototype.findMath = function (t) {\n                                return this.findMathML.findMath(t);\n                            }),\n                            (e.NAME = \"MathML\"),\n                            (e.OPTIONS = (0, a.defaultOptions)(\n                                {\n                                    parseAs: \"html\",\n                                    forceReparse: !1,\n                                    FindMathML: null,\n                                    MathMLCompile: null,\n                                    parseError: function (t) {\n                                        this.error(\n                                            this.adaptor\n                                                .textContent(t)\n                                                .replace(/\\n.*/g, \"\")\n                                        );\n                                    },\n                                },\n                                s.AbstractInputJax.OPTIONS\n                            )),\n                            e\n                        );\n                    })(s.AbstractInputJax);\n                e.MathML = p;\n            },\n            625: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.FindMathML = void 0);\n                var s = r(3494),\n                    a = \"http://www.w3.org/1998/Math/MathML\",\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.findMath = function (t) {\n                                var e = new Set();\n                                this.findMathNodes(t, e),\n                                    this.findMathPrefixed(t, e);\n                                var r = this.adaptor.root(\n                                    this.adaptor.document\n                                );\n                                return (\n                                    \"html\" === this.adaptor.kind(r) &&\n                                        0 === e.size &&\n                                        this.findMathNS(t, e),\n                                    this.processMath(e)\n                                );\n                            }),\n                            (e.prototype.findMathNodes = function (t, e) {\n                                var r, n;\n                                try {\n                                    for (\n                                        var o = i(this.adaptor.tags(t, \"math\")),\n                                            s = o.next();\n                                        !s.done;\n                                        s = o.next()\n                                    ) {\n                                        var a = s.value;\n                                        e.add(a);\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (n = o.return) &&\n                                            n.call(o);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.findMathPrefixed = function (t, e) {\n                                var r,\n                                    n,\n                                    o,\n                                    s,\n                                    l = this.adaptor.root(\n                                        this.adaptor.document\n                                    );\n                                try {\n                                    for (\n                                        var c = i(\n                                                this.adaptor.allAttributes(l)\n                                            ),\n                                            u = c.next();\n                                        !u.done;\n                                        u = c.next()\n                                    ) {\n                                        var p = u.value;\n                                        if (\n                                            \"xmlns:\" === p.name.substr(0, 6) &&\n                                            p.value === a\n                                        ) {\n                                            var h = p.name.substr(6);\n                                            try {\n                                                for (\n                                                    var f =\n                                                            ((o = void 0),\n                                                            i(\n                                                                this.adaptor.tags(\n                                                                    t,\n                                                                    h + \":math\"\n                                                                )\n                                                            )),\n                                                        d = f.next();\n                                                    !d.done;\n                                                    d = f.next()\n                                                ) {\n                                                    var m = d.value;\n                                                    e.add(m);\n                                                }\n                                            } catch (t) {\n                                                o = { error: t };\n                                            } finally {\n                                                try {\n                                                    d &&\n                                                        !d.done &&\n                                                        (s = f.return) &&\n                                                        s.call(f);\n                                                } finally {\n                                                    if (o) throw o.error;\n                                                }\n                                            }\n                                        }\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        u &&\n                                            !u.done &&\n                                            (n = c.return) &&\n                                            n.call(c);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.findMathNS = function (t, e) {\n                                var r, n;\n                                try {\n                                    for (\n                                        var o = i(\n                                                this.adaptor.tags(t, \"math\", a)\n                                            ),\n                                            s = o.next();\n                                        !s.done;\n                                        s = o.next()\n                                    ) {\n                                        var l = s.value;\n                                        e.add(l);\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (n = o.return) &&\n                                            n.call(o);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.processMath = function (t) {\n                                var e,\n                                    r,\n                                    n = [];\n                                try {\n                                    for (\n                                        var o = i(Array.from(t)), s = o.next();\n                                        !s.done;\n                                        s = o.next()\n                                    ) {\n                                        var a = s.value,\n                                            l =\n                                                \"block\" ===\n                                                    this.adaptor.getAttribute(\n                                                        a,\n                                                        \"display\"\n                                                    ) ||\n                                                \"display\" ===\n                                                    this.adaptor.getAttribute(\n                                                        a,\n                                                        \"mode\"\n                                                    ),\n                                            c = { node: a, n: 0, delim: \"\" },\n                                            u = { node: a, n: 0, delim: \"\" };\n                                        n.push({\n                                            math: this.adaptor.outerHTML(a),\n                                            start: c,\n                                            end: u,\n                                            display: l,\n                                        });\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (r = o.return) &&\n                                            r.call(o);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return n;\n                            }),\n                            (e.OPTIONS = {}),\n                            e\n                        );\n                    })(s.AbstractFindMath);\n                e.FindMathML = l;\n            },\n            2769: function (t, e, r) {\n                var n =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (n =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                n.apply(this, arguments)\n                            );\n                        },\n                    o =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    i =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    s =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        o(e, t, r);\n                            return i(e, t), e;\n                        },\n                    a =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MathMLCompile = void 0);\n                var l = r(9007),\n                    c = r(7233),\n                    u = s(r(5368)),\n                    p = (function () {\n                        function t(t) {\n                            void 0 === t && (t = {});\n                            var e = this.constructor;\n                            this.options = (0, c.userOptions)(\n                                (0, c.defaultOptions)({}, e.OPTIONS),\n                                t\n                            );\n                        }\n                        return (\n                            (t.prototype.setMmlFactory = function (t) {\n                                this.factory = t;\n                            }),\n                            (t.prototype.compile = function (t) {\n                                var e = this.makeNode(t);\n                                return (\n                                    e.verifyTree(this.options.verify),\n                                    e.setInheritedAttributes({}, !1, 0, !1),\n                                    e.walkTree(this.markMrows),\n                                    e\n                                );\n                            }),\n                            (t.prototype.makeNode = function (t) {\n                                var e,\n                                    r,\n                                    n = this.adaptor,\n                                    o = !1,\n                                    i = n.kind(t).replace(/^.*:/, \"\"),\n                                    s =\n                                        n.getAttribute(\n                                            t,\n                                            \"data-mjx-texclass\"\n                                        ) || \"\";\n                                s &&\n                                    (s =\n                                        this.filterAttribute(\n                                            \"data-mjx-texclass\",\n                                            s\n                                        ) || \"\");\n                                var c = s && \"mrow\" === i ? \"TeXAtom\" : i;\n                                try {\n                                    for (\n                                        var u = a(\n                                                this.filterClassList(\n                                                    n.allClasses(t)\n                                                )\n                                            ),\n                                            p = u.next();\n                                        !p.done;\n                                        p = u.next()\n                                    ) {\n                                        var h = p.value;\n                                        h.match(/^MJX-TeXAtom-/) && \"mrow\" === i\n                                            ? ((s = h.substr(12)),\n                                              (c = \"TeXAtom\"))\n                                            : \"MJX-fixedlimits\" === h &&\n                                              (o = !0);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        p &&\n                                            !p.done &&\n                                            (r = u.return) &&\n                                            r.call(u);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                this.factory.getNodeClass(c) ||\n                                    this.error('Unknown node type \"' + c + '\"');\n                                var f = this.factory.create(c);\n                                return (\n                                    \"TeXAtom\" !== c ||\n                                        \"OP\" !== s ||\n                                        o ||\n                                        (f.setProperty(\"movesupsub\", !0),\n                                        f.attributes.setInherited(\n                                            \"movablelimits\",\n                                            !0\n                                        )),\n                                    s &&\n                                        ((f.texClass = l.TEXCLASS[s]),\n                                        f.setProperty(\"texClass\", f.texClass)),\n                                    this.addAttributes(f, t),\n                                    this.checkClass(f, t),\n                                    this.addChildren(f, t),\n                                    f\n                                );\n                            }),\n                            (t.prototype.addAttributes = function (t, e) {\n                                var r,\n                                    n,\n                                    o = !1;\n                                try {\n                                    for (\n                                        var i = a(\n                                                this.adaptor.allAttributes(e)\n                                            ),\n                                            s = i.next();\n                                        !s.done;\n                                        s = i.next()\n                                    ) {\n                                        var l = s.value,\n                                            c = l.name,\n                                            u = this.filterAttribute(\n                                                c,\n                                                l.value\n                                            );\n                                        if (null !== u && \"xmlns\" !== c)\n                                            if (\"data-mjx-\" === c.substr(0, 9))\n                                                switch (c.substr(9)) {\n                                                    case \"alternate\":\n                                                        t.setProperty(\n                                                            \"variantForm\",\n                                                            !0\n                                                        );\n                                                        break;\n                                                    case \"variant\":\n                                                        t.attributes.set(\n                                                            \"mathvariant\",\n                                                            u\n                                                        ),\n                                                            (o = !0);\n                                                        break;\n                                                    case \"smallmatrix\":\n                                                        t.setProperty(\n                                                            \"scriptlevel\",\n                                                            1\n                                                        ),\n                                                            t.setProperty(\n                                                                \"useHeight\",\n                                                                !1\n                                                            );\n                                                        break;\n                                                    case \"accent\":\n                                                        t.setProperty(\n                                                            \"mathaccent\",\n                                                            \"true\" === u\n                                                        );\n                                                        break;\n                                                    case \"auto-op\":\n                                                        t.setProperty(\n                                                            \"autoOP\",\n                                                            \"true\" === u\n                                                        );\n                                                        break;\n                                                    case \"script-align\":\n                                                        t.setProperty(\n                                                            \"scriptalign\",\n                                                            u\n                                                        );\n                                                }\n                                            else if (\"class\" !== c) {\n                                                var p = u.toLowerCase();\n                                                \"true\" === p || \"false\" === p\n                                                    ? t.attributes.set(\n                                                          c,\n                                                          \"true\" === p\n                                                      )\n                                                    : (o &&\n                                                          \"mathvariant\" ===\n                                                              c) ||\n                                                      t.attributes.set(c, u);\n                                            }\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (n = i.return) &&\n                                            n.call(i);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                            }),\n                            (t.prototype.filterAttribute = function (t, e) {\n                                return e;\n                            }),\n                            (t.prototype.filterClassList = function (t) {\n                                return t;\n                            }),\n                            (t.prototype.addChildren = function (t, e) {\n                                var r, n;\n                                if (0 !== t.arity) {\n                                    var o = this.adaptor;\n                                    try {\n                                        for (\n                                            var i = a(o.childNodes(e)),\n                                                s = i.next();\n                                            !s.done;\n                                            s = i.next()\n                                        ) {\n                                            var l = s.value,\n                                                c = o.kind(l);\n                                            if (\"#comment\" !== c)\n                                                if (\"#text\" === c)\n                                                    this.addText(t, l);\n                                                else if (\n                                                    t.isKind(\"annotation-xml\")\n                                                )\n                                                    t.appendChild(\n                                                        this.factory\n                                                            .create(\"XML\")\n                                                            .setXML(l, o)\n                                                    );\n                                                else {\n                                                    var u = t.appendChild(\n                                                        this.makeNode(l)\n                                                    );\n                                                    0 === u.arity &&\n                                                        o.childNodes(l)\n                                                            .length &&\n                                                        (this.options\n                                                            .fixMisplacedChildren\n                                                            ? this.addChildren(\n                                                                  t,\n                                                                  l\n                                                              )\n                                                            : u.mError(\n                                                                  \"There should not be children for \" +\n                                                                      u.kind +\n                                                                      \" nodes\",\n                                                                  this.options\n                                                                      .verify,\n                                                                  !0\n                                                              ));\n                                                }\n                                        }\n                                    } catch (t) {\n                                        r = { error: t };\n                                    } finally {\n                                        try {\n                                            s &&\n                                                !s.done &&\n                                                (n = i.return) &&\n                                                n.call(i);\n                                        } finally {\n                                            if (r) throw r.error;\n                                        }\n                                    }\n                                }\n                            }),\n                            (t.prototype.addText = function (t, e) {\n                                var r = this.adaptor.value(e);\n                                (t.isToken || t.getProperty(\"isChars\")) &&\n                                t.arity\n                                    ? (t.isToken &&\n                                          ((r = u.translate(r)),\n                                          (r = this.trimSpace(r))),\n                                      t.appendChild(\n                                          this.factory.create(\"text\").setText(r)\n                                      ))\n                                    : r.match(/\\S/) &&\n                                      this.error(\n                                          'Unexpected text node \"' + r + '\"'\n                                      );\n                            }),\n                            (t.prototype.checkClass = function (t, e) {\n                                var r,\n                                    n,\n                                    o = [];\n                                try {\n                                    for (\n                                        var i = a(\n                                                this.filterClassList(\n                                                    this.adaptor.allClasses(e)\n                                                )\n                                            ),\n                                            s = i.next();\n                                        !s.done;\n                                        s = i.next()\n                                    ) {\n                                        var l = s.value;\n                                        \"MJX-\" === l.substr(0, 4)\n                                            ? \"MJX-variant\" === l\n                                                ? t.setProperty(\n                                                      \"variantForm\",\n                                                      !0\n                                                  )\n                                                : \"MJX-TeXAtom\" !==\n                                                      l.substr(0, 11) &&\n                                                  t.attributes.set(\n                                                      \"mathvariant\",\n                                                      this.fixCalligraphic(\n                                                          l.substr(3)\n                                                      )\n                                                  )\n                                            : o.push(l);\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (n = i.return) &&\n                                            n.call(i);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                                o.length &&\n                                    t.attributes.set(\"class\", o.join(\" \"));\n                            }),\n                            (t.prototype.fixCalligraphic = function (t) {\n                                return t.replace(/caligraphic/, \"calligraphic\");\n                            }),\n                            (t.prototype.markMrows = function (t) {\n                                if (\n                                    t.isKind(\"mrow\") &&\n                                    !t.isInferred &&\n                                    t.childNodes.length >= 2\n                                ) {\n                                    var e = t.childNodes[0],\n                                        r =\n                                            t.childNodes[\n                                                t.childNodes.length - 1\n                                            ];\n                                    e.isKind(\"mo\") &&\n                                        e.attributes.get(\"fence\") &&\n                                        e.attributes.get(\"stretchy\") &&\n                                        r.isKind(\"mo\") &&\n                                        r.attributes.get(\"fence\") &&\n                                        r.attributes.get(\"stretchy\") &&\n                                        (e.childNodes.length &&\n                                            t.setProperty(\"open\", e.getText()),\n                                        r.childNodes.length &&\n                                            t.setProperty(\n                                                \"close\",\n                                                r.getText()\n                                            ));\n                                }\n                            }),\n                            (t.prototype.trimSpace = function (t) {\n                                return t\n                                    .replace(/[\\t\\n\\r]/g, \" \")\n                                    .replace(/^ +/, \"\")\n                                    .replace(/ +$/, \"\")\n                                    .replace(/  +/g, \" \");\n                            }),\n                            (t.prototype.error = function (t) {\n                                throw new Error(t);\n                            }),\n                            (t.OPTIONS = {\n                                MmlFactory: null,\n                                fixMisplacedChildren: !0,\n                                verify: n({}, l.AbstractMmlNode.verifyDefaults),\n                                translateEntities: !0,\n                            }),\n                            t\n                        );\n                    })();\n                e.MathMLCompile = p;\n            },\n            8462: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    a =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.TeX = void 0);\n                var l = r(9206),\n                    c = r(7233),\n                    u = r(7073),\n                    p = a(r(4676)),\n                    h = a(r(1256)),\n                    f = a(r(8417)),\n                    d = a(r(3971)),\n                    m = a(r(8562)),\n                    y = r(6521),\n                    g = r(9899);\n                r(2942);\n                var b = (function (t) {\n                    function e(r) {\n                        void 0 === r && (r = {});\n                        var n = this,\n                            o = s(\n                                (0, c.separateOptions)(\n                                    r,\n                                    e.OPTIONS,\n                                    u.FindTeX.OPTIONS\n                                ),\n                                3\n                            ),\n                            i = o[0],\n                            a = o[1],\n                            l = o[2];\n                        (n = t.call(this, a) || this).findTeX =\n                            n.options.FindTeX || new u.FindTeX(l);\n                        var h = n.options.packages,\n                            f = (n.configuration = e.configure(h)),\n                            d = (n._parseOptions = new m.default(f, [\n                                n.options,\n                                y.TagsFactory.OPTIONS,\n                            ]));\n                        return (\n                            (0, c.userOptions)(d.options, i),\n                            f.config(n),\n                            e.tags(d, f),\n                            n.postFilters.add(p.default.cleanSubSup, -6),\n                            n.postFilters.add(p.default.setInherited, -5),\n                            n.postFilters.add(p.default.moveLimits, -4),\n                            n.postFilters.add(p.default.cleanStretchy, -3),\n                            n.postFilters.add(p.default.cleanAttributes, -2),\n                            n.postFilters.add(p.default.combineRelations, -1),\n                            n\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        (e.configure = function (t) {\n                            var e = new g.ParserConfiguration(t, [\"tex\"]);\n                            return e.init(), e;\n                        }),\n                        (e.tags = function (t, e) {\n                            y.TagsFactory.addTags(e.tags),\n                                y.TagsFactory.setDefault(t.options.tags),\n                                (t.tags = y.TagsFactory.getDefault()),\n                                (t.tags.configuration = t);\n                        }),\n                        (e.prototype.setMmlFactory = function (e) {\n                            t.prototype.setMmlFactory.call(this, e),\n                                this._parseOptions.nodeFactory.setMmlFactory(e);\n                        }),\n                        Object.defineProperty(e.prototype, \"parseOptions\", {\n                            get: function () {\n                                return this._parseOptions;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.reset = function (t) {\n                            void 0 === t && (t = 0),\n                                this.parseOptions.tags.reset(t);\n                        }),\n                        (e.prototype.compile = function (t, e) {\n                            this.parseOptions.clear(),\n                                this.executeFilters(\n                                    this.preFilters,\n                                    t,\n                                    e,\n                                    this.parseOptions\n                                );\n                            var r,\n                                n,\n                                o = t.display;\n                            (this.latex = t.math),\n                                this.parseOptions.tags.startEquation(t);\n                            try {\n                                var i = new f.default(\n                                    this.latex,\n                                    { display: o, isInner: !1 },\n                                    this.parseOptions\n                                );\n                                (r = i.mml()), (n = i.stack.global);\n                            } catch (t) {\n                                if (!(t instanceof d.default)) throw t;\n                                (this.parseOptions.error = !0),\n                                    (r = this.options.formatError(this, t));\n                            }\n                            return (\n                                (r = this.parseOptions.nodeFactory.create(\n                                    \"node\",\n                                    \"math\",\n                                    [r]\n                                )),\n                                (null == n ? void 0 : n.indentalign) &&\n                                    h.default.setAttribute(\n                                        r,\n                                        \"indentalign\",\n                                        n.indentalign\n                                    ),\n                                o &&\n                                    h.default.setAttribute(\n                                        r,\n                                        \"display\",\n                                        \"block\"\n                                    ),\n                                this.parseOptions.tags.finishEquation(t),\n                                (this.parseOptions.root = r),\n                                this.executeFilters(\n                                    this.postFilters,\n                                    t,\n                                    e,\n                                    this.parseOptions\n                                ),\n                                (this.mathNode = this.parseOptions.root),\n                                this.mathNode\n                            );\n                        }),\n                        (e.prototype.findMath = function (t) {\n                            return this.findTeX.findMath(t);\n                        }),\n                        (e.prototype.formatError = function (t) {\n                            var e = t.message.replace(/\\n.*/, \"\");\n                            return this.parseOptions.nodeFactory.create(\n                                \"error\",\n                                e,\n                                t.id,\n                                this.latex\n                            );\n                        }),\n                        (e.NAME = \"TeX\"),\n                        (e.OPTIONS = i(i({}, l.AbstractInputJax.OPTIONS), {\n                            FindTeX: null,\n                            packages: [\"base\"],\n                            digits: /^(?:[0-9]+(?:\\{,\\}[0-9]{3})*(?:\\.[0-9]*)?|\\.[0-9]+)/,\n                            maxBuffer: 5120,\n                            formatError: function (t, e) {\n                                return t.formatError(e);\n                            },\n                        })),\n                        e\n                    );\n                })(l.AbstractInputJax);\n                e.TeX = b;\n            },\n            9899: function (t, e, r) {\n                var n =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.ParserConfiguration =\n                        e.ConfigurationHandler =\n                        e.Configuration =\n                            void 0);\n                var i,\n                    s = r(7233),\n                    a = r(2947),\n                    l = r(7525),\n                    c = r(8666),\n                    u = r(6521),\n                    p = (function () {\n                        function t(t, e, r, n, o, i, s, a, l, c, u, p, h) {\n                            void 0 === e && (e = {}),\n                                void 0 === r && (r = {}),\n                                void 0 === n && (n = {}),\n                                void 0 === o && (o = {}),\n                                void 0 === i && (i = {}),\n                                void 0 === s && (s = {}),\n                                void 0 === a && (a = []),\n                                void 0 === l && (l = []),\n                                void 0 === c && (c = null),\n                                void 0 === u && (u = null),\n                                (this.name = t),\n                                (this.handler = e),\n                                (this.fallback = r),\n                                (this.items = n),\n                                (this.tags = o),\n                                (this.options = i),\n                                (this.nodes = s),\n                                (this.preprocessors = a),\n                                (this.postprocessors = l),\n                                (this.initMethod = c),\n                                (this.configMethod = u),\n                                (this.priority = p),\n                                (this.parser = h),\n                                (this.handler = Object.assign(\n                                    {\n                                        character: [],\n                                        delimiter: [],\n                                        macro: [],\n                                        environment: [],\n                                    },\n                                    e\n                                ));\n                        }\n                        return (\n                            (t.makeProcessor = function (t, e) {\n                                return Array.isArray(t) ? t : [t, e];\n                            }),\n                            (t._create = function (e, r) {\n                                var n = this;\n                                void 0 === r && (r = {});\n                                var o =\n                                        r.priority ||\n                                        c.PrioritizedList.DEFAULTPRIORITY,\n                                    i = r.init\n                                        ? this.makeProcessor(r.init, o)\n                                        : null,\n                                    s = r.config\n                                        ? this.makeProcessor(r.config, o)\n                                        : null,\n                                    a = (r.preprocessors || []).map(\n                                        function (t) {\n                                            return n.makeProcessor(t, o);\n                                        }\n                                    ),\n                                    l = (r.postprocessors || []).map(\n                                        function (t) {\n                                            return n.makeProcessor(t, o);\n                                        }\n                                    ),\n                                    u = r.parser || \"tex\";\n                                return new t(\n                                    e,\n                                    r.handler || {},\n                                    r.fallback || {},\n                                    r.items || {},\n                                    r.tags || {},\n                                    r.options || {},\n                                    r.nodes || {},\n                                    a,\n                                    l,\n                                    i,\n                                    s,\n                                    o,\n                                    u\n                                );\n                            }),\n                            (t.create = function (e, r) {\n                                void 0 === r && (r = {});\n                                var n = t._create(e, r);\n                                return i.set(e, n), n;\n                            }),\n                            (t.local = function (e) {\n                                return (\n                                    void 0 === e && (e = {}), t._create(\"\", e)\n                                );\n                            }),\n                            Object.defineProperty(t.prototype, \"init\", {\n                                get: function () {\n                                    return this.initMethod\n                                        ? this.initMethod[0]\n                                        : null;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(t.prototype, \"config\", {\n                                get: function () {\n                                    return this.configMethod\n                                        ? this.configMethod[0]\n                                        : null;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            t\n                        );\n                    })();\n                (e.Configuration = p),\n                    (function (t) {\n                        var e = new Map();\n                        (t.set = function (t, r) {\n                            e.set(t, r);\n                        }),\n                            (t.get = function (t) {\n                                return e.get(t);\n                            }),\n                            (t.keys = function () {\n                                return e.keys();\n                            });\n                    })(\n                        (i =\n                            e.ConfigurationHandler ||\n                            (e.ConfigurationHandler = {}))\n                    );\n                var h = (function () {\n                    function t(t, e) {\n                        var r, o, i, s;\n                        void 0 === e && (e = [\"tex\"]),\n                            (this.initMethod = new l.FunctionList()),\n                            (this.configMethod = new l.FunctionList()),\n                            (this.configurations = new c.PrioritizedList()),\n                            (this.parsers = []),\n                            (this.handlers = new a.SubHandlers()),\n                            (this.items = {}),\n                            (this.tags = {}),\n                            (this.options = {}),\n                            (this.nodes = {}),\n                            (this.parsers = e);\n                        try {\n                            for (\n                                var u = n(t.slice().reverse()), p = u.next();\n                                !p.done;\n                                p = u.next()\n                            ) {\n                                var h = p.value;\n                                this.addPackage(h);\n                            }\n                        } catch (t) {\n                            r = { error: t };\n                        } finally {\n                            try {\n                                p && !p.done && (o = u.return) && o.call(u);\n                            } finally {\n                                if (r) throw r.error;\n                            }\n                        }\n                        try {\n                            for (\n                                var f = n(this.configurations), d = f.next();\n                                !d.done;\n                                d = f.next()\n                            ) {\n                                var m = d.value,\n                                    y = m.item,\n                                    g = m.priority;\n                                this.append(y, g);\n                            }\n                        } catch (t) {\n                            i = { error: t };\n                        } finally {\n                            try {\n                                d && !d.done && (s = f.return) && s.call(f);\n                            } finally {\n                                if (i) throw i.error;\n                            }\n                        }\n                    }\n                    return (\n                        (t.prototype.init = function () {\n                            this.initMethod.execute(this);\n                        }),\n                        (t.prototype.config = function (t) {\n                            var e, r;\n                            this.configMethod.execute(this, t);\n                            try {\n                                for (\n                                    var o = n(this.configurations),\n                                        i = o.next();\n                                    !i.done;\n                                    i = o.next()\n                                ) {\n                                    var s = i.value;\n                                    this.addFilters(t, s.item);\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    i && !i.done && (r = o.return) && r.call(o);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.addPackage = function (t) {\n                            var e = \"string\" == typeof t ? t : t[0],\n                                r = this.getPackage(e);\n                            r &&\n                                this.configurations.add(\n                                    r,\n                                    \"string\" == typeof t ? r.priority : t[1]\n                                );\n                        }),\n                        (t.prototype.add = function (t, e, r) {\n                            var o, i;\n                            void 0 === r && (r = {});\n                            var a = this.getPackage(t);\n                            this.append(a),\n                                this.configurations.add(a, a.priority),\n                                this.init();\n                            var l = e.parseOptions;\n                            l.nodeFactory.setCreators(a.nodes);\n                            try {\n                                for (\n                                    var c = n(Object.keys(a.items)),\n                                        p = c.next();\n                                    !p.done;\n                                    p = c.next()\n                                ) {\n                                    var h = p.value;\n                                    l.itemFactory.setNodeClass(h, a.items[h]);\n                                }\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    p && !p.done && (i = c.return) && i.call(c);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            u.TagsFactory.addTags(a.tags),\n                                (0, s.defaultOptions)(l.options, a.options),\n                                (0, s.userOptions)(l.options, r),\n                                this.addFilters(e, a),\n                                a.config && a.config(this, e);\n                        }),\n                        (t.prototype.getPackage = function (t) {\n                            var e = i.get(t);\n                            if (e && this.parsers.indexOf(e.parser) < 0)\n                                throw Error(\n                                    \"Package \".concat(\n                                        t,\n                                        \" doesn't target the proper parser\"\n                                    )\n                                );\n                            return e;\n                        }),\n                        (t.prototype.append = function (t, e) {\n                            (e = e || t.priority),\n                                t.initMethod &&\n                                    this.initMethod.add(\n                                        t.initMethod[0],\n                                        t.initMethod[1]\n                                    ),\n                                t.configMethod &&\n                                    this.configMethod.add(\n                                        t.configMethod[0],\n                                        t.configMethod[1]\n                                    ),\n                                this.handlers.add(t.handler, t.fallback, e),\n                                Object.assign(this.items, t.items),\n                                Object.assign(this.tags, t.tags),\n                                (0, s.defaultOptions)(this.options, t.options),\n                                Object.assign(this.nodes, t.nodes);\n                        }),\n                        (t.prototype.addFilters = function (t, e) {\n                            var r, i, s, a;\n                            try {\n                                for (\n                                    var l = n(e.preprocessors), c = l.next();\n                                    !c.done;\n                                    c = l.next()\n                                ) {\n                                    var u = o(c.value, 2),\n                                        p = u[0],\n                                        h = u[1];\n                                    t.preFilters.add(p, h);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    c && !c.done && (i = l.return) && i.call(l);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            try {\n                                for (\n                                    var f = n(e.postprocessors), d = f.next();\n                                    !d.done;\n                                    d = f.next()\n                                ) {\n                                    var m = o(d.value, 2),\n                                        y = m[0];\n                                    h = m[1];\n                                    t.postFilters.add(y, h);\n                                }\n                            } catch (t) {\n                                s = { error: t };\n                            } finally {\n                                try {\n                                    d && !d.done && (a = f.return) && a.call(f);\n                                } finally {\n                                    if (s) throw s.error;\n                                }\n                            }\n                        }),\n                        t\n                    );\n                })();\n                e.ParserConfiguration = h;\n            },\n            4676: function (t, e, r) {\n                var n =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    o =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var i,\n                    s = r(9007),\n                    a = o(r(1256));\n                !(function (t) {\n                    (t.cleanStretchy = function (t) {\n                        var e,\n                            r,\n                            o = t.data;\n                        try {\n                            for (\n                                var i = n(o.getList(\"fixStretchy\")),\n                                    s = i.next();\n                                !s.done;\n                                s = i.next()\n                            ) {\n                                var l = s.value;\n                                if (a.default.getProperty(l, \"fixStretchy\")) {\n                                    var c = a.default.getForm(l);\n                                    c &&\n                                        c[3] &&\n                                        c[3].stretchy &&\n                                        a.default.setAttribute(\n                                            l,\n                                            \"stretchy\",\n                                            !1\n                                        );\n                                    var u = l.parent;\n                                    if (\n                                        !(\n                                            a.default.getTexClass(l) ||\n                                            (c && c[2])\n                                        )\n                                    ) {\n                                        var p = o.nodeFactory.create(\n                                            \"node\",\n                                            \"TeXAtom\",\n                                            [l]\n                                        );\n                                        u.replaceChild(p, l),\n                                            p.inheritAttributesFrom(l);\n                                    }\n                                    a.default.removeProperties(\n                                        l,\n                                        \"fixStretchy\"\n                                    );\n                                }\n                            }\n                        } catch (t) {\n                            e = { error: t };\n                        } finally {\n                            try {\n                                s && !s.done && (r = i.return) && r.call(i);\n                            } finally {\n                                if (e) throw e.error;\n                            }\n                        }\n                    }),\n                        (t.cleanAttributes = function (t) {\n                            t.data.root.walkTree(function (t, e) {\n                                var r,\n                                    o,\n                                    i = t.attributes;\n                                if (i) {\n                                    var s = new Set(\n                                        (i.get(\"mjx-keep-attrs\") || \"\").split(\n                                            / /\n                                        )\n                                    );\n                                    delete i.getAllAttributes()[\n                                        \"mjx-keep-attrs\"\n                                    ];\n                                    try {\n                                        for (\n                                            var a = n(i.getExplicitNames()),\n                                                l = a.next();\n                                            !l.done;\n                                            l = a.next()\n                                        ) {\n                                            var c = l.value;\n                                            s.has(c) ||\n                                                i.attributes[c] !==\n                                                    t.attributes.getInherited(\n                                                        c\n                                                    ) ||\n                                                delete i.attributes[c];\n                                        }\n                                    } catch (t) {\n                                        r = { error: t };\n                                    } finally {\n                                        try {\n                                            l &&\n                                                !l.done &&\n                                                (o = a.return) &&\n                                                o.call(a);\n                                        } finally {\n                                            if (r) throw r.error;\n                                        }\n                                    }\n                                }\n                            }, {});\n                        }),\n                        (t.combineRelations = function (t) {\n                            var o,\n                                i,\n                                l,\n                                c,\n                                u = [];\n                            try {\n                                for (\n                                    var p = n(t.data.getList(\"mo\")),\n                                        h = p.next();\n                                    !h.done;\n                                    h = p.next()\n                                ) {\n                                    var f = h.value;\n                                    if (\n                                        !f.getProperty(\"relationsCombined\") &&\n                                        f.parent &&\n                                        (!f.parent ||\n                                            a.default.isType(\n                                                f.parent,\n                                                \"mrow\"\n                                            )) &&\n                                        a.default.getTexClass(f) ===\n                                            s.TEXCLASS.REL\n                                    ) {\n                                        for (\n                                            var d = f.parent,\n                                                m = void 0,\n                                                y = d.childNodes,\n                                                g = y.indexOf(f) + 1,\n                                                b = a.default.getProperty(\n                                                    f,\n                                                    \"variantForm\"\n                                                );\n                                            g < y.length &&\n                                            (m = y[g]) &&\n                                            a.default.isType(m, \"mo\") &&\n                                            a.default.getTexClass(m) ===\n                                                s.TEXCLASS.REL;\n\n                                        ) {\n                                            if (\n                                                b !==\n                                                    a.default.getProperty(\n                                                        m,\n                                                        \"variantForm\"\n                                                    ) ||\n                                                !r(f, m)\n                                            ) {\n                                                null ==\n                                                    f.attributes.getExplicit(\n                                                        \"rspace\"\n                                                    ) &&\n                                                    a.default.setAttribute(\n                                                        f,\n                                                        \"rspace\",\n                                                        \"0pt\"\n                                                    ),\n                                                    null ==\n                                                        m.attributes.getExplicit(\n                                                            \"lspace\"\n                                                        ) &&\n                                                        a.default.setAttribute(\n                                                            m,\n                                                            \"lspace\",\n                                                            \"0pt\"\n                                                        );\n                                                break;\n                                            }\n                                            a.default.appendChildren(\n                                                f,\n                                                a.default.getChildren(m)\n                                            ),\n                                                e([\"stretchy\", \"rspace\"], f, m);\n                                            try {\n                                                for (\n                                                    var v =\n                                                            ((l = void 0),\n                                                            n(\n                                                                m.getPropertyNames()\n                                                            )),\n                                                        _ = v.next();\n                                                    !_.done;\n                                                    _ = v.next()\n                                                ) {\n                                                    var S = _.value;\n                                                    f.setProperty(\n                                                        S,\n                                                        m.getProperty(S)\n                                                    );\n                                                }\n                                            } catch (t) {\n                                                l = { error: t };\n                                            } finally {\n                                                try {\n                                                    _ &&\n                                                        !_.done &&\n                                                        (c = v.return) &&\n                                                        c.call(v);\n                                                } finally {\n                                                    if (l) throw l.error;\n                                                }\n                                            }\n                                            y.splice(g, 1),\n                                                u.push(m),\n                                                (m.parent = null),\n                                                m.setProperty(\n                                                    \"relationsCombined\",\n                                                    !0\n                                                );\n                                        }\n                                        f.attributes.setInherited(\n                                            \"form\",\n                                            f.getForms()[0]\n                                        );\n                                    }\n                                }\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    h && !h.done && (i = p.return) && i.call(p);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            t.data.removeFromList(\"mo\", u);\n                        });\n                    var e = function (t, e, r) {\n                            var n = e.attributes,\n                                o = r.attributes;\n                            t.forEach(function (t) {\n                                var e = o.getExplicit(t);\n                                null != e && n.set(t, e);\n                            });\n                        },\n                        r = function (t, e) {\n                            var r,\n                                o,\n                                i = function (t, e) {\n                                    return t\n                                        .getExplicitNames()\n                                        .filter(function (r) {\n                                            return (\n                                                r !== e &&\n                                                (\"stretchy\" !== r ||\n                                                    t.getExplicit(\"stretchy\"))\n                                            );\n                                        });\n                                },\n                                s = t.attributes,\n                                a = e.attributes,\n                                l = i(s, \"lspace\"),\n                                c = i(a, \"rspace\");\n                            if (l.length !== c.length) return !1;\n                            try {\n                                for (\n                                    var u = n(l), p = u.next();\n                                    !p.done;\n                                    p = u.next()\n                                ) {\n                                    var h = p.value;\n                                    if (s.getExplicit(h) !== a.getExplicit(h))\n                                        return !1;\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    p && !p.done && (o = u.return) && o.call(u);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            return !0;\n                        },\n                        o = function (t, e, r) {\n                            var o,\n                                i,\n                                s = [];\n                            try {\n                                for (\n                                    var l = n(t.getList(\"m\" + e + r)),\n                                        c = l.next();\n                                    !c.done;\n                                    c = l.next()\n                                ) {\n                                    var u = c.value,\n                                        p = u.childNodes;\n                                    if (!p[u[e]] || !p[u[r]]) {\n                                        var h = u.parent,\n                                            f = p[u[e]]\n                                                ? t.nodeFactory.create(\n                                                      \"node\",\n                                                      \"m\" + e,\n                                                      [p[u.base], p[u[e]]]\n                                                  )\n                                                : t.nodeFactory.create(\n                                                      \"node\",\n                                                      \"m\" + r,\n                                                      [p[u.base], p[u[r]]]\n                                                  );\n                                        a.default.copyAttributes(u, f),\n                                            h\n                                                ? h.replaceChild(f, u)\n                                                : (t.root = f),\n                                            s.push(u);\n                                    }\n                                }\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    c && !c.done && (i = l.return) && i.call(l);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            t.removeFromList(\"m\" + e + r, s);\n                        };\n                    t.cleanSubSup = function (t) {\n                        var e = t.data;\n                        e.error || (o(e, \"sub\", \"sup\"), o(e, \"under\", \"over\"));\n                    };\n                    var i = function (t, e, r) {\n                        var o,\n                            i,\n                            s = [];\n                        try {\n                            for (\n                                var l = n(t.getList(e)), c = l.next();\n                                !c.done;\n                                c = l.next()\n                            ) {\n                                var u = c.value;\n                                if (!u.attributes.get(\"displaystyle\")) {\n                                    var p = u.childNodes[u.base],\n                                        h = p.coreMO();\n                                    if (\n                                        p.getProperty(\"movablelimits\") &&\n                                        !h.attributes.getExplicit(\n                                            \"movablelimits\"\n                                        )\n                                    ) {\n                                        var f = t.nodeFactory.create(\n                                            \"node\",\n                                            r,\n                                            u.childNodes\n                                        );\n                                        a.default.copyAttributes(u, f),\n                                            u.parent\n                                                ? u.parent.replaceChild(f, u)\n                                                : (t.root = f),\n                                            s.push(u);\n                                    }\n                                }\n                            }\n                        } catch (t) {\n                            o = { error: t };\n                        } finally {\n                            try {\n                                c && !c.done && (i = l.return) && i.call(l);\n                            } finally {\n                                if (o) throw o.error;\n                            }\n                        }\n                        t.removeFromList(e, s);\n                    };\n                    (t.moveLimits = function (t) {\n                        var e = t.data;\n                        i(e, \"munderover\", \"msubsup\"),\n                            i(e, \"munder\", \"msub\"),\n                            i(e, \"mover\", \"msup\");\n                    }),\n                        (t.setInherited = function (t) {\n                            t.data.root.setInheritedAttributes(\n                                {},\n                                t.math.display,\n                                0,\n                                !1\n                            );\n                        });\n                })(i || (i = {})),\n                    (e.default = i);\n            },\n            7073: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.FindTeX = void 0);\n                var s = r(3494),\n                    a = r(505),\n                    l = r(4474),\n                    c = (function (t) {\n                        function e(e) {\n                            var r = t.call(this, e) || this;\n                            return r.getPatterns(), r;\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.getPatterns = function () {\n                                var t = this,\n                                    e = this.options,\n                                    r = [],\n                                    n = [],\n                                    o = [];\n                                (this.end = {}), (this.env = this.sub = 0);\n                                var i = 1;\n                                e.inlineMath.forEach(function (e) {\n                                    return t.addPattern(r, e, !1);\n                                }),\n                                    e.displayMath.forEach(function (e) {\n                                        return t.addPattern(r, e, !0);\n                                    }),\n                                    r.length &&\n                                        n.push(r.sort(a.sortLength).join(\"|\")),\n                                    e.processEnvironments &&\n                                        (n.push(\"\\\\\\\\begin\\\\s*\\\\{([^}]*)\\\\}\"),\n                                        (this.env = i),\n                                        i++),\n                                    e.processEscapes && o.push(\"\\\\\\\\([\\\\\\\\$])\"),\n                                    e.processRefs &&\n                                        o.push(\n                                            \"(\\\\\\\\(?:eq)?ref\\\\s*\\\\{[^}]*\\\\})\"\n                                        ),\n                                    o.length &&\n                                        (n.push(\"(\" + o.join(\"|\") + \")\"),\n                                        (this.sub = i)),\n                                    (this.start = new RegExp(n.join(\"|\"), \"g\")),\n                                    (this.hasPatterns = n.length > 0);\n                            }),\n                            (e.prototype.addPattern = function (t, e, r) {\n                                var n = i(e, 2),\n                                    o = n[0],\n                                    s = n[1];\n                                t.push((0, a.quotePattern)(o)),\n                                    (this.end[o] = [s, r, this.endPattern(s)]);\n                            }),\n                            (e.prototype.endPattern = function (t, e) {\n                                return new RegExp(\n                                    (e || (0, a.quotePattern)(t)) +\n                                        \"|\\\\\\\\(?:[a-zA-Z]|.)|[{}]\",\n                                    \"g\"\n                                );\n                            }),\n                            (e.prototype.findEnd = function (t, e, r, n) {\n                                for (\n                                    var o,\n                                        s = i(n, 3),\n                                        a = s[0],\n                                        c = s[1],\n                                        u = s[2],\n                                        p = (u.lastIndex =\n                                            r.index + r[0].length),\n                                        h = 0;\n                                    (o = u.exec(t));\n\n                                ) {\n                                    if ((o[1] || o[0]) === a && 0 === h)\n                                        return (0, l.protoItem)(\n                                            r[0],\n                                            t.substr(p, o.index - p),\n                                            o[0],\n                                            e,\n                                            r.index,\n                                            o.index + o[0].length,\n                                            c\n                                        );\n                                    \"{\" === o[0]\n                                        ? h++\n                                        : \"}\" === o[0] && h && h--;\n                                }\n                                return null;\n                            }),\n                            (e.prototype.findMathInString = function (t, e, r) {\n                                var n, o;\n                                for (\n                                    this.start.lastIndex = 0;\n                                    (n = this.start.exec(r));\n\n                                ) {\n                                    if (void 0 !== n[this.env] && this.env) {\n                                        var i =\n                                            \"\\\\\\\\end\\\\s*(\\\\{\" +\n                                            (0, a.quotePattern)(n[this.env]) +\n                                            \"\\\\})\";\n                                        (o = this.findEnd(r, e, n, [\n                                            \"{\" + n[this.env] + \"}\",\n                                            !0,\n                                            this.endPattern(null, i),\n                                        ])) &&\n                                            ((o.math =\n                                                o.open + o.math + o.close),\n                                            (o.open = o.close = \"\"));\n                                    } else if (\n                                        void 0 !== n[this.sub] &&\n                                        this.sub\n                                    ) {\n                                        var s = n[this.sub];\n                                        i = n.index + n[this.sub].length;\n                                        o =\n                                            2 === s.length\n                                                ? (0, l.protoItem)(\n                                                      \"\",\n                                                      s.substr(1),\n                                                      \"\",\n                                                      e,\n                                                      n.index,\n                                                      i\n                                                  )\n                                                : (0, l.protoItem)(\n                                                      \"\",\n                                                      s,\n                                                      \"\",\n                                                      e,\n                                                      n.index,\n                                                      i,\n                                                      !1\n                                                  );\n                                    } else\n                                        o = this.findEnd(\n                                            r,\n                                            e,\n                                            n,\n                                            this.end[n[0]]\n                                        );\n                                    o &&\n                                        (t.push(o),\n                                        (this.start.lastIndex = o.end.n));\n                                }\n                            }),\n                            (e.prototype.findMath = function (t) {\n                                var e = [];\n                                if (this.hasPatterns)\n                                    for (var r = 0, n = t.length; r < n; r++)\n                                        this.findMathInString(e, r, t[r]);\n                                return e;\n                            }),\n                            (e.OPTIONS = {\n                                inlineMath: [[\"\\\\(\", \"\\\\)\"]],\n                                displayMath: [\n                                    [\"$$\", \"$$\"],\n                                    [\"\\\\[\", \"\\\\]\"],\n                                ],\n                                processEscapes: !0,\n                                processEnvironments: !0,\n                                processRefs: !0,\n                            }),\n                            e\n                        );\n                    })(s.AbstractFindMath);\n                e.FindTeX = c;\n            },\n            2947: function (t, e, r) {\n                var n =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SubHandlers = e.SubHandler = e.MapHandler = void 0);\n                var i,\n                    s = r(8666),\n                    a = r(7525);\n                !(function (t) {\n                    var e = new Map();\n                    (t.register = function (t) {\n                        e.set(t.name, t);\n                    }),\n                        (t.getMap = function (t) {\n                            return e.get(t);\n                        });\n                })((i = e.MapHandler || (e.MapHandler = {})));\n                var l = (function () {\n                    function t() {\n                        (this._configuration = new s.PrioritizedList()),\n                            (this._fallback = new a.FunctionList());\n                    }\n                    return (\n                        (t.prototype.add = function (t, e, r) {\n                            var o, a;\n                            void 0 === r &&\n                                (r = s.PrioritizedList.DEFAULTPRIORITY);\n                            try {\n                                for (\n                                    var l = n(t.slice().reverse()),\n                                        c = l.next();\n                                    !c.done;\n                                    c = l.next()\n                                ) {\n                                    var u = c.value,\n                                        p = i.getMap(u);\n                                    if (!p)\n                                        return void this.warn(\n                                            \"Configuration \" +\n                                                u +\n                                                \" not found! Omitted.\"\n                                        );\n                                    this._configuration.add(p, r);\n                                }\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    c && !c.done && (a = l.return) && a.call(l);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            e && this._fallback.add(e, r);\n                        }),\n                        (t.prototype.parse = function (t) {\n                            var e, r;\n                            try {\n                                for (\n                                    var i = n(this._configuration),\n                                        s = i.next();\n                                    !s.done;\n                                    s = i.next()\n                                ) {\n                                    var a = s.value.item.parse(t);\n                                    if (a) return a;\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    s && !s.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            var l = o(t, 2),\n                                c = l[0],\n                                u = l[1];\n                            Array.from(this._fallback)[0].item(c, u);\n                        }),\n                        (t.prototype.lookup = function (t) {\n                            var e = this.applicable(t);\n                            return e ? e.lookup(t) : null;\n                        }),\n                        (t.prototype.contains = function (t) {\n                            return !!this.applicable(t);\n                        }),\n                        (t.prototype.toString = function () {\n                            var t,\n                                e,\n                                r = [];\n                            try {\n                                for (\n                                    var o = n(this._configuration),\n                                        i = o.next();\n                                    !i.done;\n                                    i = o.next()\n                                ) {\n                                    var s = i.value.item;\n                                    r.push(s.name);\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    i && !i.done && (e = o.return) && e.call(o);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            return r.join(\", \");\n                        }),\n                        (t.prototype.applicable = function (t) {\n                            var e, r;\n                            try {\n                                for (\n                                    var o = n(this._configuration),\n                                        i = o.next();\n                                    !i.done;\n                                    i = o.next()\n                                ) {\n                                    var s = i.value.item;\n                                    if (s.contains(t)) return s;\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    i && !i.done && (r = o.return) && r.call(o);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            return null;\n                        }),\n                        (t.prototype.retrieve = function (t) {\n                            var e, r;\n                            try {\n                                for (\n                                    var o = n(this._configuration),\n                                        i = o.next();\n                                    !i.done;\n                                    i = o.next()\n                                ) {\n                                    var s = i.value.item;\n                                    if (s.name === t) return s;\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    i && !i.done && (r = o.return) && r.call(o);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            return null;\n                        }),\n                        (t.prototype.warn = function (t) {\n                            console.log(\"TexParser Warning: \" + t);\n                        }),\n                        t\n                    );\n                })();\n                e.SubHandler = l;\n                var c = (function () {\n                    function t() {\n                        this.map = new Map();\n                    }\n                    return (\n                        (t.prototype.add = function (t, e, r) {\n                            var o, i;\n                            void 0 === r &&\n                                (r = s.PrioritizedList.DEFAULTPRIORITY);\n                            try {\n                                for (\n                                    var a = n(Object.keys(t)), c = a.next();\n                                    !c.done;\n                                    c = a.next()\n                                ) {\n                                    var u = c.value,\n                                        p = this.get(u);\n                                    p || ((p = new l()), this.set(u, p)),\n                                        p.add(t[u], e[u], r);\n                                }\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    c && !c.done && (i = a.return) && i.call(a);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.set = function (t, e) {\n                            this.map.set(t, e);\n                        }),\n                        (t.prototype.get = function (t) {\n                            return this.map.get(t);\n                        }),\n                        (t.prototype.retrieve = function (t) {\n                            var e, r;\n                            try {\n                                for (\n                                    var o = n(this.map.values()), i = o.next();\n                                    !i.done;\n                                    i = o.next()\n                                ) {\n                                    var s = i.value.retrieve(t);\n                                    if (s) return s;\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    i && !i.done && (r = o.return) && r.call(o);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            return null;\n                        }),\n                        (t.prototype.keys = function () {\n                            return this.map.keys();\n                        }),\n                        t\n                    );\n                })();\n                e.SubHandlers = c;\n            },\n            8929: function (t, e, r) {\n                var n =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    o =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    i =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.NodeFactory = void 0);\n                var s = i(r(1256)),\n                    a = (function () {\n                        function t() {\n                            (this.mmlFactory = null),\n                                (this.factory = {\n                                    node: t.createNode,\n                                    token: t.createToken,\n                                    text: t.createText,\n                                    error: t.createError,\n                                });\n                        }\n                        return (\n                            (t.createNode = function (t, e, r, n, o) {\n                                void 0 === r && (r = []),\n                                    void 0 === n && (n = {});\n                                var i = t.mmlFactory.create(e);\n                                return (\n                                    i.setChildren(r),\n                                    o && i.appendChild(o),\n                                    s.default.setProperties(i, n),\n                                    i\n                                );\n                            }),\n                            (t.createToken = function (t, e, r, n) {\n                                void 0 === r && (r = {}),\n                                    void 0 === n && (n = \"\");\n                                var o = t.create(\"text\", n);\n                                return t.create(\"node\", e, [], r, o);\n                            }),\n                            (t.createText = function (t, e) {\n                                return null == e\n                                    ? null\n                                    : t.mmlFactory.create(\"text\").setText(e);\n                            }),\n                            (t.createError = function (t, e) {\n                                var r = t.create(\"text\", e),\n                                    n = t.create(\"node\", \"mtext\", [], {}, r);\n                                return t.create(\"node\", \"merror\", [n], {\n                                    \"data-mjx-error\": e,\n                                });\n                            }),\n                            (t.prototype.setMmlFactory = function (t) {\n                                this.mmlFactory = t;\n                            }),\n                            (t.prototype.set = function (t, e) {\n                                this.factory[t] = e;\n                            }),\n                            (t.prototype.setCreators = function (t) {\n                                for (var e in t) this.set(e, t[e]);\n                            }),\n                            (t.prototype.create = function (t) {\n                                for (\n                                    var e = [], r = 1;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r - 1] = arguments[r];\n                                var i = this.factory[t] || this.factory.node,\n                                    s = i.apply(\n                                        void 0,\n                                        o([this, e[0]], n(e.slice(1)), !1)\n                                    );\n                                return (\n                                    \"node\" === t &&\n                                        this.configuration.addNode(e[0], s),\n                                    s\n                                );\n                            }),\n                            (t.prototype.get = function (t) {\n                                return this.factory[t];\n                            }),\n                            t\n                        );\n                    })();\n                e.NodeFactory = a;\n            },\n            1256: function (t, e, r) {\n                var n =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var s,\n                    a = r(9007),\n                    l = r(2756);\n                !(function (t) {\n                    var e = new Map([\n                        [\"autoOP\", !0],\n                        [\"fnOP\", !0],\n                        [\"movesupsub\", !0],\n                        [\"subsupOK\", !0],\n                        [\"texprimestyle\", !0],\n                        [\"useHeight\", !0],\n                        [\"variantForm\", !0],\n                        [\"withDelims\", !0],\n                        [\"mathaccent\", !0],\n                        [\"open\", !0],\n                        [\"close\", !0],\n                    ]);\n                    function r(t, r) {\n                        var o, i;\n                        try {\n                            for (\n                                var s = n(Object.keys(r)), a = s.next();\n                                !a.done;\n                                a = s.next()\n                            ) {\n                                var l = a.value,\n                                    c = r[l];\n                                \"texClass\" === l\n                                    ? ((t.texClass = c), t.setProperty(l, c))\n                                    : \"movablelimits\" === l\n                                      ? (t.setProperty(\"movablelimits\", c),\n                                        (t.isKind(\"mo\") ||\n                                            t.isKind(\"mstyle\")) &&\n                                            t.attributes.set(\n                                                \"movablelimits\",\n                                                c\n                                            ))\n                                      : \"inferred\" === l ||\n                                        (e.has(l)\n                                            ? t.setProperty(l, c)\n                                            : t.attributes.set(l, c));\n                            }\n                        } catch (t) {\n                            o = { error: t };\n                        } finally {\n                            try {\n                                a && !a.done && (i = s.return) && i.call(s);\n                            } finally {\n                                if (o) throw o.error;\n                            }\n                        }\n                    }\n                    function s(t, e, r) {\n                        (t.childNodes[e] = r), r && (r.parent = t);\n                    }\n                    function c(t, e) {\n                        return t.isKind(e);\n                    }\n                    (t.createEntity = function (t) {\n                        return String.fromCodePoint(parseInt(t, 16));\n                    }),\n                        (t.getChildren = function (t) {\n                            return t.childNodes;\n                        }),\n                        (t.getText = function (t) {\n                            return t.getText();\n                        }),\n                        (t.appendChildren = function (t, e) {\n                            var r, o;\n                            try {\n                                for (\n                                    var i = n(e), s = i.next();\n                                    !s.done;\n                                    s = i.next()\n                                ) {\n                                    var a = s.value;\n                                    t.appendChild(a);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    s && !s.done && (o = i.return) && o.call(i);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                        }),\n                        (t.setAttribute = function (t, e, r) {\n                            t.attributes.set(e, r);\n                        }),\n                        (t.setProperty = function (t, e, r) {\n                            t.setProperty(e, r);\n                        }),\n                        (t.setProperties = r),\n                        (t.getProperty = function (t, e) {\n                            return t.getProperty(e);\n                        }),\n                        (t.getAttribute = function (t, e) {\n                            return t.attributes.get(e);\n                        }),\n                        (t.removeProperties = function (t) {\n                            for (var e = [], r = 1; r < arguments.length; r++)\n                                e[r - 1] = arguments[r];\n                            t.removeProperty.apply(t, i([], o(e), !1));\n                        }),\n                        (t.getChildAt = function (t, e) {\n                            return t.childNodes[e];\n                        }),\n                        (t.setChild = s),\n                        (t.copyChildren = function (t, e) {\n                            for (var r = t.childNodes, n = 0; n < r.length; n++)\n                                s(e, n, r[n]);\n                        }),\n                        (t.copyAttributes = function (t, e) {\n                            (e.attributes = t.attributes),\n                                r(e, t.getAllProperties());\n                        }),\n                        (t.isType = c),\n                        (t.isEmbellished = function (t) {\n                            return t.isEmbellished;\n                        }),\n                        (t.getTexClass = function (t) {\n                            return t.texClass;\n                        }),\n                        (t.getCoreMO = function (t) {\n                            return t.coreMO();\n                        }),\n                        (t.isNode = function (t) {\n                            return (\n                                t instanceof a.AbstractMmlNode ||\n                                t instanceof a.AbstractMmlEmptyNode\n                            );\n                        }),\n                        (t.isInferred = function (t) {\n                            return t.isInferred;\n                        }),\n                        (t.getForm = function (t) {\n                            var e, r;\n                            if (!c(t, \"mo\")) return null;\n                            var o = t,\n                                i = o.getForms();\n                            try {\n                                for (\n                                    var s = n(i), a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var u = a.value,\n                                        p = l.MmlMo.OPTABLE[u][o.getText()];\n                                    if (p) return p;\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (r = s.return) && r.call(s);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            return null;\n                        });\n                })(s || (s = {})),\n                    (e.default = s);\n            },\n            5450: function (t, e, r) {\n                var n =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    o =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    i =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var s,\n                    a = i(r(1256)),\n                    l = r(8317),\n                    c = i(r(1130));\n                !(function (t) {\n                    (t.variable = function (t, e) {\n                        var r = c.default.getFontDef(t),\n                            n = t.stack.env;\n                        n.multiLetterIdentifiers &&\n                            \"\" !== n.font &&\n                            ((e = t.string\n                                .substr(t.i - 1)\n                                .match(n.multiLetterIdentifiers)[0]),\n                            (t.i += e.length - 1),\n                            r.mathvariant === l.TexConstant.Variant.NORMAL &&\n                                n.noAutoOP &&\n                                e.length > 1 &&\n                                (r.autoOP = !1));\n                        var o = t.create(\"token\", \"mi\", r, e);\n                        t.Push(o);\n                    }),\n                        (t.digit = function (t, e) {\n                            var r,\n                                n = t.configuration.options.digits,\n                                o = t.string.slice(t.i - 1).match(n),\n                                i = c.default.getFontDef(t);\n                            o\n                                ? ((r = t.create(\n                                      \"token\",\n                                      \"mn\",\n                                      i,\n                                      o[0].replace(/[{}]/g, \"\")\n                                  )),\n                                  (t.i += o[0].length - 1))\n                                : (r = t.create(\"token\", \"mo\", i, e)),\n                                t.Push(r);\n                        }),\n                        (t.controlSequence = function (t, e) {\n                            var r = t.GetCS();\n                            t.parse(\"macro\", [t, r]);\n                        }),\n                        (t.mathchar0mi = function (t, e) {\n                            var r = e.attributes || {\n                                    mathvariant: l.TexConstant.Variant.ITALIC,\n                                },\n                                n = t.create(\"token\", \"mi\", r, e.char);\n                            t.Push(n);\n                        }),\n                        (t.mathchar0mo = function (t, e) {\n                            var r = e.attributes || {};\n                            r.stretchy = !1;\n                            var n = t.create(\"token\", \"mo\", r, e.char);\n                            a.default.setProperty(n, \"fixStretchy\", !0),\n                                t.configuration.addNode(\"fixStretchy\", n),\n                                t.Push(n);\n                        }),\n                        (t.mathchar7 = function (t, e) {\n                            var r = e.attributes || {\n                                mathvariant: l.TexConstant.Variant.NORMAL,\n                            };\n                            t.stack.env.font &&\n                                (r.mathvariant = t.stack.env.font);\n                            var n = t.create(\"token\", \"mi\", r, e.char);\n                            t.Push(n);\n                        }),\n                        (t.delimiter = function (t, e) {\n                            var r = e.attributes || {};\n                            r = Object.assign({ fence: !1, stretchy: !1 }, r);\n                            var n = t.create(\"token\", \"mo\", r, e.char);\n                            t.Push(n);\n                        }),\n                        (t.environment = function (t, e, r, i) {\n                            var s = i[0],\n                                a = t.itemFactory\n                                    .create(\"begin\")\n                                    .setProperties({ name: e, end: s });\n                            (a = r.apply(void 0, o([t, a], n(i.slice(1)), !1))),\n                                t.Push(a);\n                        });\n                })(s || (s = {})),\n                    (e.default = s);\n            },\n            8562: function (t, e, r) {\n                var n =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    o =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    s =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var a = s(r(5453)),\n                    l = r(8929),\n                    c = s(r(1256)),\n                    u = r(7233),\n                    p = (function () {\n                        function t(t, e) {\n                            void 0 === e && (e = []),\n                                (this.options = {}),\n                                (this.packageData = new Map()),\n                                (this.parsers = []),\n                                (this.root = null),\n                                (this.nodeLists = {}),\n                                (this.error = !1),\n                                (this.handlers = t.handlers),\n                                (this.nodeFactory = new l.NodeFactory()),\n                                (this.nodeFactory.configuration = this),\n                                this.nodeFactory.setCreators(t.nodes),\n                                (this.itemFactory = new a.default(t.items)),\n                                (this.itemFactory.configuration = this),\n                                u.defaultOptions.apply(\n                                    void 0,\n                                    o([this.options], n(e), !1)\n                                ),\n                                (0, u.defaultOptions)(this.options, t.options);\n                        }\n                        return (\n                            (t.prototype.pushParser = function (t) {\n                                this.parsers.unshift(t);\n                            }),\n                            (t.prototype.popParser = function () {\n                                this.parsers.shift();\n                            }),\n                            Object.defineProperty(t.prototype, \"parser\", {\n                                get: function () {\n                                    return this.parsers[0];\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.clear = function () {\n                                (this.parsers = []),\n                                    (this.root = null),\n                                    (this.nodeLists = {}),\n                                    (this.error = !1),\n                                    this.tags.resetTag();\n                            }),\n                            (t.prototype.addNode = function (t, e) {\n                                var r = this.nodeLists[t];\n                                if (\n                                    (r || (r = this.nodeLists[t] = []),\n                                    r.push(e),\n                                    e.kind !== t)\n                                ) {\n                                    var n =\n                                            c.default.getProperty(\n                                                e,\n                                                \"in-lists\"\n                                            ) || \"\",\n                                        o = (n ? n.split(/,/) : [])\n                                            .concat(t)\n                                            .join(\",\");\n                                    c.default.setProperty(e, \"in-lists\", o);\n                                }\n                            }),\n                            (t.prototype.getList = function (t) {\n                                var e,\n                                    r,\n                                    n = this.nodeLists[t] || [],\n                                    o = [];\n                                try {\n                                    for (\n                                        var s = i(n), a = s.next();\n                                        !a.done;\n                                        a = s.next()\n                                    ) {\n                                        var l = a.value;\n                                        this.inTree(l) && o.push(l);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        a &&\n                                            !a.done &&\n                                            (r = s.return) &&\n                                            r.call(s);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return (this.nodeLists[t] = o), o;\n                            }),\n                            (t.prototype.removeFromList = function (t, e) {\n                                var r,\n                                    n,\n                                    o = this.nodeLists[t] || [];\n                                try {\n                                    for (\n                                        var s = i(e), a = s.next();\n                                        !a.done;\n                                        a = s.next()\n                                    ) {\n                                        var l = a.value,\n                                            c = o.indexOf(l);\n                                        c >= 0 && o.splice(c, 1);\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        a &&\n                                            !a.done &&\n                                            (n = s.return) &&\n                                            n.call(s);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                            }),\n                            (t.prototype.inTree = function (t) {\n                                for (; t && t !== this.root; ) t = t.parent;\n                                return !!t;\n                            }),\n                            t\n                        );\n                    })();\n                e.default = p;\n            },\n            1130: function (t, e, r) {\n                var n =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    o =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    i =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var s,\n                    a = r(9007),\n                    l = i(r(1256)),\n                    c = i(r(8417)),\n                    u = i(r(3971)),\n                    p = r(5368);\n                !(function (t) {\n                    var e = 7.2,\n                        r = {\n                            em: function (t) {\n                                return t;\n                            },\n                            ex: function (t) {\n                                return 0.43 * t;\n                            },\n                            pt: function (t) {\n                                return t / 10;\n                            },\n                            pc: function (t) {\n                                return 1.2 * t;\n                            },\n                            px: function (t) {\n                                return (t * e) / 72;\n                            },\n                            in: function (t) {\n                                return t * e;\n                            },\n                            cm: function (t) {\n                                return (t * e) / 2.54;\n                            },\n                            mm: function (t) {\n                                return (t * e) / 25.4;\n                            },\n                            mu: function (t) {\n                                return t / 18;\n                            },\n                        },\n                        i = \"([-+]?([.,]\\\\d+|\\\\d+([.,]\\\\d*)?))\",\n                        s = \"(pt|em|ex|mu|px|mm|cm|in|pc)\",\n                        h = RegExp(\"^\\\\s*\" + i + \"\\\\s*\" + s + \"\\\\s*$\"),\n                        f = RegExp(\"^\\\\s*\" + i + \"\\\\s*\" + s + \" ?\");\n                    function d(t, e) {\n                        void 0 === e && (e = !1);\n                        var o = t.match(e ? f : h);\n                        return o\n                            ? (function (t) {\n                                  var e = n(t, 3),\n                                      o = e[0],\n                                      i = e[1],\n                                      s = e[2];\n                                  if (\"mu\" !== i) return [o, i, s];\n                                  return [\n                                      m(r[i](parseFloat(o || \"1\"))).slice(\n                                          0,\n                                          -2\n                                      ),\n                                      \"em\",\n                                      s,\n                                  ];\n                              })([o[1].replace(/,/, \".\"), o[4], o[0].length])\n                            : [null, null, 0];\n                    }\n                    function m(t) {\n                        return Math.abs(t) < 6e-4\n                            ? \"0em\"\n                            : t.toFixed(3).replace(/\\.?0+$/, \"\") + \"em\";\n                    }\n                    function y(t, e, r) {\n                        (\"{\" !== e && \"}\" !== e) || (e = \"\\\\\" + e);\n                        var n = \"{\\\\bigg\" + r + \" \" + e + \"}\",\n                            o = \"{\\\\big\" + r + \" \" + e + \"}\";\n                        return new c.default(\n                            \"\\\\mathchoice\" + n + o + o + o,\n                            {},\n                            t\n                        ).mml();\n                    }\n                    function g(t, e, r) {\n                        e = e\n                            .replace(/^\\s+/, p.entities.nbsp)\n                            .replace(/\\s+$/, p.entities.nbsp);\n                        var n = t.create(\"text\", e);\n                        return t.create(\"node\", \"mtext\", [], r, n);\n                    }\n                    function b(t, e, r) {\n                        if (\n                            (r.match(/^[a-z]/i) &&\n                                e.match(/(^|[^\\\\])(\\\\\\\\)*\\\\[a-z]+$/i) &&\n                                (e += \" \"),\n                            e.length + r.length >\n                                t.configuration.options.maxBuffer)\n                        )\n                            throw new u.default(\n                                \"MaxBufferSize\",\n                                \"MathJax internal buffer size exceeded; is there a recursive macro call?\"\n                            );\n                        return e + r;\n                    }\n                    function v(t, e) {\n                        for (; e > 0; ) (t = t.trim().slice(1, -1)), e--;\n                        return t.trim();\n                    }\n                    function _(t, e) {\n                        for (\n                            var r = t.length,\n                                n = 0,\n                                o = \"\",\n                                i = 0,\n                                s = 0,\n                                a = !0,\n                                l = !1;\n                            i < r;\n\n                        ) {\n                            var c = t[i++];\n                            switch (c) {\n                                case \" \":\n                                    break;\n                                case \"{\":\n                                    a ? s++ : ((l = !1), s > n && (s = n)), n++;\n                                    break;\n                                case \"}\":\n                                    n && n--,\n                                        (a || l) && (s--, (l = !0)),\n                                        (a = !1);\n                                    break;\n                                default:\n                                    if (!n && -1 !== e.indexOf(c))\n                                        return [\n                                            l ? \"true\" : v(o, s),\n                                            c,\n                                            t.slice(i),\n                                        ];\n                                    (a = !1), (l = !1);\n                            }\n                            o += c;\n                        }\n                        if (n)\n                            throw new u.default(\n                                \"ExtraOpenMissingClose\",\n                                \"Extra open brace or missing close brace\"\n                            );\n                        return [l ? \"true\" : v(o, s), \"\", t.slice(i)];\n                    }\n                    (t.matchDimen = d),\n                        (t.dimen2em = function (t) {\n                            var e = n(d(t), 2),\n                                o = e[0],\n                                i = e[1],\n                                s = parseFloat(o || \"1\"),\n                                a = r[i];\n                            return a ? a(s) : 0;\n                        }),\n                        (t.Em = m),\n                        (t.cols = function () {\n                            for (var t = [], e = 0; e < arguments.length; e++)\n                                t[e] = arguments[e];\n                            return t\n                                .map(function (t) {\n                                    return m(t);\n                                })\n                                .join(\" \");\n                        }),\n                        (t.fenced = function (t, e, r, n, o, i) {\n                            void 0 === o && (o = \"\"), void 0 === i && (i = \"\");\n                            var s,\n                                u = t.nodeFactory,\n                                p = u.create(\"node\", \"mrow\", [], {\n                                    open: e,\n                                    close: n,\n                                    texClass: a.TEXCLASS.INNER,\n                                });\n                            if (o)\n                                s = new c.default(\n                                    \"\\\\\" + o + \"l\" + e,\n                                    t.parser.stack.env,\n                                    t\n                                ).mml();\n                            else {\n                                var h = u.create(\"text\", e);\n                                s = u.create(\n                                    \"node\",\n                                    \"mo\",\n                                    [],\n                                    {\n                                        fence: !0,\n                                        stretchy: !0,\n                                        symmetric: !0,\n                                        texClass: a.TEXCLASS.OPEN,\n                                    },\n                                    h\n                                );\n                            }\n                            if ((l.default.appendChildren(p, [s, r]), o))\n                                s = new c.default(\n                                    \"\\\\\" + o + \"r\" + n,\n                                    t.parser.stack.env,\n                                    t\n                                ).mml();\n                            else {\n                                var f = u.create(\"text\", n);\n                                s = u.create(\n                                    \"node\",\n                                    \"mo\",\n                                    [],\n                                    {\n                                        fence: !0,\n                                        stretchy: !0,\n                                        symmetric: !0,\n                                        texClass: a.TEXCLASS.CLOSE,\n                                    },\n                                    f\n                                );\n                            }\n                            return (\n                                i && s.attributes.set(\"mathcolor\", i),\n                                l.default.appendChildren(p, [s]),\n                                p\n                            );\n                        }),\n                        (t.fixedFence = function (t, e, r, n) {\n                            var o = t.nodeFactory.create(\"node\", \"mrow\", [], {\n                                open: e,\n                                close: n,\n                                texClass: a.TEXCLASS.ORD,\n                            });\n                            return (\n                                e &&\n                                    l.default.appendChildren(o, [y(t, e, \"l\")]),\n                                l.default.isType(r, \"mrow\")\n                                    ? l.default.appendChildren(\n                                          o,\n                                          l.default.getChildren(r)\n                                      )\n                                    : l.default.appendChildren(o, [r]),\n                                n &&\n                                    l.default.appendChildren(o, [y(t, n, \"r\")]),\n                                o\n                            );\n                        }),\n                        (t.mathPalette = y),\n                        (t.fixInitialMO = function (t, e) {\n                            for (var r = 0, n = e.length; r < n; r++) {\n                                var o = e[r];\n                                if (\n                                    o &&\n                                    !l.default.isType(o, \"mspace\") &&\n                                    (!l.default.isType(o, \"TeXAtom\") ||\n                                        (l.default.getChildren(o)[0] &&\n                                            l.default.getChildren(\n                                                l.default.getChildren(o)[0]\n                                            ).length))\n                                ) {\n                                    if (\n                                        l.default.isEmbellished(o) ||\n                                        (l.default.isType(o, \"TeXAtom\") &&\n                                            l.default.getTexClass(o) ===\n                                                a.TEXCLASS.REL)\n                                    ) {\n                                        var i = t.nodeFactory.create(\n                                            \"node\",\n                                            \"mi\"\n                                        );\n                                        e.unshift(i);\n                                    }\n                                    break;\n                                }\n                            }\n                        }),\n                        (t.internalMath = function (t, e, r, n) {\n                            if (t.configuration.options.internalMath)\n                                return t.configuration.options.internalMath(\n                                    t,\n                                    e,\n                                    r,\n                                    n\n                                );\n                            var o,\n                                i,\n                                s = n || t.stack.env.font,\n                                a = s ? { mathvariant: s } : {},\n                                l = [],\n                                p = 0,\n                                h = 0,\n                                f = \"\",\n                                d = 0;\n                            if (e.match(/\\\\?[${}\\\\]|\\\\\\(|\\\\(eq)?ref\\s*\\{/)) {\n                                for (; p < e.length; )\n                                    if (\"$\" === (o = e.charAt(p++)))\n                                        \"$\" === f && 0 === d\n                                            ? ((i = t.create(\n                                                  \"node\",\n                                                  \"TeXAtom\",\n                                                  [\n                                                      new c.default(\n                                                          e.slice(h, p - 1),\n                                                          {},\n                                                          t.configuration\n                                                      ).mml(),\n                                                  ]\n                                              )),\n                                              l.push(i),\n                                              (f = \"\"),\n                                              (h = p))\n                                            : \"\" === f &&\n                                              (h < p - 1 &&\n                                                  l.push(\n                                                      g(t, e.slice(h, p - 1), a)\n                                                  ),\n                                              (f = \"$\"),\n                                              (h = p));\n                                    else if (\"{\" === o && \"\" !== f) d++;\n                                    else if (\"}\" === o)\n                                        if (\"}\" === f && 0 === d) {\n                                            var m = new c.default(\n                                                e.slice(h, p),\n                                                {},\n                                                t.configuration\n                                            ).mml();\n                                            (i = t.create(\n                                                \"node\",\n                                                \"TeXAtom\",\n                                                [m],\n                                                a\n                                            )),\n                                                l.push(i),\n                                                (f = \"\"),\n                                                (h = p);\n                                        } else \"\" !== f && d && d--;\n                                    else if (\"\\\\\" === o)\n                                        if (\n                                            \"\" === f &&\n                                            e.substr(p).match(/^(eq)?ref\\s*\\{/)\n                                        ) {\n                                            var y = RegExp[\"$&\"].length;\n                                            h < p - 1 &&\n                                                l.push(\n                                                    g(t, e.slice(h, p - 1), a)\n                                                ),\n                                                (f = \"}\"),\n                                                (h = p - 1),\n                                                (p += y);\n                                        } else\n                                            \"(\" === (o = e.charAt(p++)) &&\n                                            \"\" === f\n                                                ? (h < p - 2 &&\n                                                      l.push(\n                                                          g(\n                                                              t,\n                                                              e.slice(h, p - 2),\n                                                              a\n                                                          )\n                                                      ),\n                                                  (f = \")\"),\n                                                  (h = p))\n                                                : \")\" === o &&\n                                                    \")\" === f &&\n                                                    0 === d\n                                                  ? ((i = t.create(\n                                                        \"node\",\n                                                        \"TeXAtom\",\n                                                        [\n                                                            new c.default(\n                                                                e.slice(\n                                                                    h,\n                                                                    p - 2\n                                                                ),\n                                                                {},\n                                                                t.configuration\n                                                            ).mml(),\n                                                        ]\n                                                    )),\n                                                    l.push(i),\n                                                    (f = \"\"),\n                                                    (h = p))\n                                                  : o.match(/[${}\\\\]/) &&\n                                                    \"\" === f &&\n                                                    (p--,\n                                                    (e =\n                                                        e.substr(0, p - 1) +\n                                                        e.substr(p)));\n                                if (\"\" !== f)\n                                    throw new u.default(\n                                        \"MathNotTerminated\",\n                                        \"Math not terminated in text box\"\n                                    );\n                            }\n                            return (\n                                h < e.length && l.push(g(t, e.slice(h), a)),\n                                null != r\n                                    ? (l = [\n                                          t.create(\"node\", \"mstyle\", l, {\n                                              displaystyle: !1,\n                                              scriptlevel: r,\n                                          }),\n                                      ])\n                                    : l.length > 1 &&\n                                      (l = [t.create(\"node\", \"mrow\", l)]),\n                                l\n                            );\n                        }),\n                        (t.internalText = g),\n                        (t.underOver = function (e, r, n, o, i) {\n                            if (\n                                (t.checkMovableLimits(r),\n                                l.default.isType(r, \"munderover\") &&\n                                    l.default.isEmbellished(r))\n                            ) {\n                                l.default.setProperties(\n                                    l.default.getCoreMO(r),\n                                    { lspace: 0, rspace: 0 }\n                                );\n                                var s = e.create(\"node\", \"mo\", [], {\n                                    rspace: 0,\n                                });\n                                r = e.create(\"node\", \"mrow\", [s, r]);\n                            }\n                            var c = e.create(\"node\", \"munderover\", [r]);\n                            l.default.setChild(\n                                c,\n                                \"over\" === o ? c.over : c.under,\n                                n\n                            );\n                            var u = c;\n                            return (\n                                i &&\n                                    (u = e.create(\"node\", \"TeXAtom\", [c], {\n                                        texClass: a.TEXCLASS.OP,\n                                        movesupsub: !0,\n                                    })),\n                                l.default.setProperty(u, \"subsupOK\", !0),\n                                u\n                            );\n                        }),\n                        (t.checkMovableLimits = function (t) {\n                            var e = l.default.isType(t, \"mo\")\n                                ? l.default.getForm(t)\n                                : null;\n                            (l.default.getProperty(t, \"movablelimits\") ||\n                                (e && e[3] && e[3].movablelimits)) &&\n                                l.default.setProperties(t, {\n                                    movablelimits: !1,\n                                });\n                        }),\n                        (t.trimSpaces = function (t) {\n                            if (\"string\" != typeof t) return t;\n                            var e = t.trim();\n                            return (\n                                e.match(/\\\\$/) && t.match(/ $/) && (e += \" \"), e\n                            );\n                        }),\n                        (t.setArrayAlign = function (e, r) {\n                            return (\n                                \"t\" === (r = t.trimSpaces(r || \"\"))\n                                    ? (e.arraydef.align = \"baseline 1\")\n                                    : \"b\" === r\n                                      ? (e.arraydef.align = \"baseline -1\")\n                                      : \"c\" === r\n                                        ? (e.arraydef.align = \"axis\")\n                                        : r && (e.arraydef.align = r),\n                                e\n                            );\n                        }),\n                        (t.substituteArgs = function (t, e, r) {\n                            for (var n = \"\", o = \"\", i = 0; i < r.length; ) {\n                                var s = r.charAt(i++);\n                                if (\"\\\\\" === s) n += s + r.charAt(i++);\n                                else if (\"#\" === s)\n                                    if (\"#\" === (s = r.charAt(i++))) n += s;\n                                    else {\n                                        if (\n                                            !s.match(/[1-9]/) ||\n                                            parseInt(s, 10) > e.length\n                                        )\n                                            throw new u.default(\n                                                \"IllegalMacroParam\",\n                                                \"Illegal macro parameter reference\"\n                                            );\n                                        (o = b(\n                                            t,\n                                            b(t, o, n),\n                                            e[parseInt(s, 10) - 1]\n                                        )),\n                                            (n = \"\");\n                                    }\n                                else n += s;\n                            }\n                            return b(t, o, n);\n                        }),\n                        (t.addArgs = b),\n                        (t.checkMaxMacros = function (t, e) {\n                            if (\n                                (void 0 === e && (e = !0),\n                                !(\n                                    ++t.macroCount <=\n                                    t.configuration.options.maxMacros\n                                ))\n                            )\n                                throw e\n                                    ? new u.default(\n                                          \"MaxMacroSub1\",\n                                          \"MathJax maximum macro substitution count exceeded; is here a recursive macro call?\"\n                                      )\n                                    : new u.default(\n                                          \"MaxMacroSub2\",\n                                          \"MathJax maximum substitution count exceeded; is there a recursive latex environment?\"\n                                      );\n                        }),\n                        (t.checkEqnEnv = function (t) {\n                            if (t.stack.global.eqnenv)\n                                throw new u.default(\n                                    \"ErroneousNestingEq\",\n                                    \"Erroneous nesting of equation structures\"\n                                );\n                            t.stack.global.eqnenv = !0;\n                        }),\n                        (t.copyNode = function (t, e) {\n                            var r = t.copy(),\n                                n = e.configuration;\n                            return (\n                                r.walkTree(function (t) {\n                                    var e, r;\n                                    n.addNode(t.kind, t);\n                                    var i = (\n                                        t.getProperty(\"in-lists\") || \"\"\n                                    ).split(/,/);\n                                    try {\n                                        for (\n                                            var s = o(i), a = s.next();\n                                            !a.done;\n                                            a = s.next()\n                                        ) {\n                                            var l = a.value;\n                                            l && n.addNode(l, t);\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            a &&\n                                                !a.done &&\n                                                (r = s.return) &&\n                                                r.call(s);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                                }),\n                                r\n                            );\n                        }),\n                        (t.MmlFilterAttribute = function (t, e, r) {\n                            return r;\n                        }),\n                        (t.getFontDef = function (t) {\n                            var e = t.stack.env.font;\n                            return e ? { mathvariant: e } : {};\n                        }),\n                        (t.keyvalOptions = function (t, e, r) {\n                            var i, s;\n                            void 0 === e && (e = null),\n                                void 0 === r && (r = !1);\n                            var a = (function (t) {\n                                var e,\n                                    r,\n                                    o,\n                                    i,\n                                    s,\n                                    a = {},\n                                    l = t;\n                                for (; l; )\n                                    (i = (e = n(_(l, [\"=\", \",\"]), 3))[0]),\n                                        (o = e[1]),\n                                        (l = e[2]),\n                                        \"=\" === o\n                                            ? ((s = (r = n(_(l, [\",\"]), 3))[0]),\n                                              (o = r[1]),\n                                              (l = r[2]),\n                                              (s =\n                                                  \"false\" === s || \"true\" === s\n                                                      ? JSON.parse(s)\n                                                      : s),\n                                              (a[i] = s))\n                                            : i && (a[i] = !0);\n                                return a;\n                            })(t);\n                            if (e)\n                                try {\n                                    for (\n                                        var l = o(Object.keys(a)), c = l.next();\n                                        !c.done;\n                                        c = l.next()\n                                    ) {\n                                        var p = c.value;\n                                        if (!e.hasOwnProperty(p)) {\n                                            if (r)\n                                                throw new u.default(\n                                                    \"InvalidOption\",\n                                                    \"Invalid option: %1\",\n                                                    p\n                                                );\n                                            delete a[p];\n                                        }\n                                    }\n                                } catch (t) {\n                                    i = { error: t };\n                                } finally {\n                                    try {\n                                        c &&\n                                            !c.done &&\n                                            (s = l.return) &&\n                                            s.call(l);\n                                    } finally {\n                                        if (i) throw i.error;\n                                    }\n                                }\n                            return a;\n                        });\n                })(s || (s = {})),\n                    (e.default = s);\n            },\n            9497: function (t, e, r) {\n                var n =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    s =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var a = s(r(1256)),\n                    l = (function () {\n                        function t(t, e, r) {\n                            (this._factory = t),\n                                (this._env = e),\n                                (this.global = {}),\n                                (this.stack = []),\n                                (this.global = { isInner: r }),\n                                (this.stack = [\n                                    this._factory.create(\"start\", this.global),\n                                ]),\n                                e && (this.stack[0].env = e),\n                                (this.env = this.stack[0].env);\n                        }\n                        return (\n                            Object.defineProperty(t.prototype, \"env\", {\n                                get: function () {\n                                    return this._env;\n                                },\n                                set: function (t) {\n                                    this._env = t;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.Push = function () {\n                                for (\n                                    var t, e, r = [], s = 0;\n                                    s < arguments.length;\n                                    s++\n                                )\n                                    r[s] = arguments[s];\n                                try {\n                                    for (\n                                        var l = n(r), c = l.next();\n                                        !c.done;\n                                        c = l.next()\n                                    ) {\n                                        var u = c.value;\n                                        if (u) {\n                                            var p = a.default.isNode(u)\n                                                ? this._factory.create(\"mml\", u)\n                                                : u;\n                                            p.global = this.global;\n                                            var h = o(\n                                                    this.stack.length\n                                                        ? this.Top().checkItem(\n                                                              p\n                                                          )\n                                                        : [null, !0],\n                                                    2\n                                                ),\n                                                f = h[0],\n                                                d = h[1];\n                                            d &&\n                                                (f\n                                                    ? (this.Pop(),\n                                                      this.Push.apply(\n                                                          this,\n                                                          i([], o(f), !1)\n                                                      ))\n                                                    : (this.stack.push(p),\n                                                      p.env\n                                                          ? (p.copyEnv &&\n                                                                Object.assign(\n                                                                    p.env,\n                                                                    this.env\n                                                                ),\n                                                            (this.env = p.env))\n                                                          : (p.env =\n                                                                this.env)));\n                                        }\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        c &&\n                                            !c.done &&\n                                            (e = l.return) &&\n                                            e.call(l);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (t.prototype.Pop = function () {\n                                var t = this.stack.pop();\n                                return (\n                                    t.isOpen || delete t.env,\n                                    (this.env = this.stack.length\n                                        ? this.Top().env\n                                        : {}),\n                                    t\n                                );\n                            }),\n                            (t.prototype.Top = function (t) {\n                                return (\n                                    void 0 === t && (t = 1),\n                                    this.stack.length < t\n                                        ? null\n                                        : this.stack[this.stack.length - t]\n                                );\n                            }),\n                            (t.prototype.Prev = function (t) {\n                                var e = this.Top();\n                                return t ? e.First : e.Pop();\n                            }),\n                            (t.prototype.toString = function () {\n                                return (\n                                    \"stack[\\n  \" +\n                                    this.stack.join(\"\\n  \") +\n                                    \"\\n]\"\n                                );\n                            }),\n                            t\n                        );\n                    })();\n                e.default = l;\n            },\n            8292: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    a =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    l =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.BaseItem = e.MmlStack = void 0);\n                var c = l(r(3971)),\n                    u = (function () {\n                        function t(t) {\n                            this._nodes = t;\n                        }\n                        return (\n                            Object.defineProperty(t.prototype, \"nodes\", {\n                                get: function () {\n                                    return this._nodes;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.Push = function () {\n                                for (\n                                    var t, e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                (t = this._nodes).push.apply(\n                                    t,\n                                    s([], i(e), !1)\n                                );\n                            }),\n                            (t.prototype.Pop = function () {\n                                return this._nodes.pop();\n                            }),\n                            Object.defineProperty(t.prototype, \"First\", {\n                                get: function () {\n                                    return this._nodes[this.Size() - 1];\n                                },\n                                set: function (t) {\n                                    this._nodes[this.Size() - 1] = t;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(t.prototype, \"Last\", {\n                                get: function () {\n                                    return this._nodes[0];\n                                },\n                                set: function (t) {\n                                    this._nodes[0] = t;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.Peek = function (t) {\n                                return (\n                                    null == t && (t = 1),\n                                    this._nodes.slice(this.Size() - t)\n                                );\n                            }),\n                            (t.prototype.Size = function () {\n                                return this._nodes.length;\n                            }),\n                            (t.prototype.Clear = function () {\n                                this._nodes = [];\n                            }),\n                            (t.prototype.toMml = function (t, e) {\n                                return (\n                                    void 0 === t && (t = !0),\n                                    1 !== this._nodes.length || e\n                                        ? this.create(\n                                              \"node\",\n                                              t ? \"inferredMrow\" : \"mrow\",\n                                              this._nodes,\n                                              {}\n                                          )\n                                        : this.First\n                                );\n                            }),\n                            (t.prototype.create = function (t) {\n                                for (\n                                    var e, r = [], n = 1;\n                                    n < arguments.length;\n                                    n++\n                                )\n                                    r[n - 1] = arguments[n];\n                                return (e =\n                                    this.factory.configuration\n                                        .nodeFactory).create.apply(\n                                    e,\n                                    s([t], i(r), !1)\n                                );\n                            }),\n                            t\n                        );\n                    })();\n                e.MmlStack = u;\n                var p = (function (t) {\n                    function e(e) {\n                        for (var r = [], n = 1; n < arguments.length; n++)\n                            r[n - 1] = arguments[n];\n                        var o = t.call(this, r) || this;\n                        return (\n                            (o.factory = e),\n                            (o.global = {}),\n                            (o._properties = {}),\n                            o.isOpen && (o._env = {}),\n                            o\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"base\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"env\", {\n                            get: function () {\n                                return this._env;\n                            },\n                            set: function (t) {\n                                this._env = t;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"copyEnv\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.getProperty = function (t) {\n                            return this._properties[t];\n                        }),\n                        (e.prototype.setProperty = function (t, e) {\n                            return (this._properties[t] = e), this;\n                        }),\n                        Object.defineProperty(e.prototype, \"isOpen\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isClose\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isFinal\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.isKind = function (t) {\n                            return t === this.kind;\n                        }),\n                        (e.prototype.checkItem = function (t) {\n                            if (\n                                (t.isKind(\"over\") &&\n                                    this.isOpen &&\n                                    (t.setProperty(\"num\", this.toMml(!1)),\n                                    this.Clear()),\n                                t.isKind(\"cell\") && this.isOpen)\n                            ) {\n                                if (t.getProperty(\"linebreak\")) return e.fail;\n                                throw new c.default(\n                                    \"Misplaced\",\n                                    \"Misplaced %1\",\n                                    t.getName()\n                                );\n                            }\n                            if (t.isClose && this.getErrors(t.kind)) {\n                                var r = i(this.getErrors(t.kind), 2),\n                                    n = r[0],\n                                    o = r[1];\n                                throw new c.default(n, o, t.getName());\n                            }\n                            return t.isFinal\n                                ? (this.Push(t.First), e.fail)\n                                : e.success;\n                        }),\n                        (e.prototype.clearEnv = function () {\n                            var t, e;\n                            try {\n                                for (\n                                    var r = a(Object.keys(this.env)),\n                                        n = r.next();\n                                    !n.done;\n                                    n = r.next()\n                                ) {\n                                    var o = n.value;\n                                    delete this.env[o];\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    n && !n.done && (e = r.return) && e.call(r);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                        }),\n                        (e.prototype.setProperties = function (t) {\n                            return Object.assign(this._properties, t), this;\n                        }),\n                        (e.prototype.getName = function () {\n                            return this.getProperty(\"name\");\n                        }),\n                        (e.prototype.toString = function () {\n                            return (\n                                this.kind + \"[\" + this.nodes.join(\"; \") + \"]\"\n                            );\n                        }),\n                        (e.prototype.getErrors = function (t) {\n                            return (\n                                (this.constructor.errors || {})[t] ||\n                                e.errors[t]\n                            );\n                        }),\n                        (e.fail = [null, !1]),\n                        (e.success = [null, !0]),\n                        (e.errors = {\n                            end: [\n                                \"MissingBeginExtraEnd\",\n                                \"Missing \\\\begin{%1} or extra \\\\end{%1}\",\n                            ],\n                            close: [\n                                \"ExtraCloseMissingOpen\",\n                                \"Extra close brace or missing open brace\",\n                            ],\n                            right: [\n                                \"MissingLeftExtraRight\",\n                                \"Missing \\\\left or extra \\\\right\",\n                            ],\n                            middle: [\"ExtraMiddle\", \"Extra \\\\middle\"],\n                        }),\n                        e\n                    );\n                })(u);\n                e.BaseItem = p;\n            },\n            5453: function (t, e, r) {\n                var n,\n                    o,\n                    i =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var s = r(8292),\n                    a = r(4574),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return i(e, t), e;\n                    })(s.BaseItem),\n                    c = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (\n                                (e.defaultKind = \"dummy\"),\n                                (e.configuration = null),\n                                e\n                            );\n                        }\n                        return (\n                            i(e, t),\n                            (e.DefaultStackItems =\n                                (((o = {})[l.prototype.kind] = l), o)),\n                            e\n                        );\n                    })(a.AbstractFactory);\n                e.default = c;\n            },\n            8803: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Macro = e.Symbol = void 0);\n                var r = (function () {\n                    function t(t, e, r) {\n                        (this._symbol = t),\n                            (this._char = e),\n                            (this._attributes = r);\n                    }\n                    return (\n                        Object.defineProperty(t.prototype, \"symbol\", {\n                            get: function () {\n                                return this._symbol;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(t.prototype, \"char\", {\n                            get: function () {\n                                return this._char;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(t.prototype, \"attributes\", {\n                            get: function () {\n                                return this._attributes;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        t\n                    );\n                })();\n                e.Symbol = r;\n                var n = (function () {\n                    function t(t, e, r) {\n                        void 0 === r && (r = []),\n                            (this._symbol = t),\n                            (this._func = e),\n                            (this._args = r);\n                    }\n                    return (\n                        Object.defineProperty(t.prototype, \"symbol\", {\n                            get: function () {\n                                return this._symbol;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(t.prototype, \"func\", {\n                            get: function () {\n                                return this._func;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(t.prototype, \"args\", {\n                            get: function () {\n                                return this._args;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        t\n                    );\n                })();\n                e.Macro = n;\n            },\n            9140: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    a =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.EnvironmentMap =\n                        e.CommandMap =\n                        e.MacroMap =\n                        e.DelimiterMap =\n                        e.CharacterMap =\n                        e.AbstractParseMap =\n                        e.RegExpMap =\n                        e.AbstractSymbolMap =\n                        e.parseResult =\n                            void 0);\n                var l = r(8803),\n                    c = r(2947);\n                function u(t) {\n                    return void 0 === t || t;\n                }\n                e.parseResult = u;\n                var p = (function () {\n                    function t(t, e) {\n                        (this._name = t),\n                            (this._parser = e),\n                            c.MapHandler.register(this);\n                    }\n                    return (\n                        Object.defineProperty(t.prototype, \"name\", {\n                            get: function () {\n                                return this._name;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (t.prototype.parserFor = function (t) {\n                            return this.contains(t) ? this.parser : null;\n                        }),\n                        (t.prototype.parse = function (t) {\n                            var e = i(t, 2),\n                                r = e[0],\n                                n = e[1],\n                                o = this.parserFor(n),\n                                s = this.lookup(n);\n                            return o && s ? u(o(r, s)) : null;\n                        }),\n                        Object.defineProperty(t.prototype, \"parser\", {\n                            get: function () {\n                                return this._parser;\n                            },\n                            set: function (t) {\n                                this._parser = t;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        t\n                    );\n                })();\n                e.AbstractSymbolMap = p;\n                var h = (function (t) {\n                    function e(e, r, n) {\n                        var o = t.call(this, e, r) || this;\n                        return (o._regExp = n), o;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.contains = function (t) {\n                            return this._regExp.test(t);\n                        }),\n                        (e.prototype.lookup = function (t) {\n                            return this.contains(t) ? t : null;\n                        }),\n                        e\n                    );\n                })(p);\n                e.RegExpMap = h;\n                var f = (function (t) {\n                    function e() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (e.map = new Map()), e;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.lookup = function (t) {\n                            return this.map.get(t);\n                        }),\n                        (e.prototype.contains = function (t) {\n                            return this.map.has(t);\n                        }),\n                        (e.prototype.add = function (t, e) {\n                            this.map.set(t, e);\n                        }),\n                        (e.prototype.remove = function (t) {\n                            this.map.delete(t);\n                        }),\n                        e\n                    );\n                })(p);\n                e.AbstractParseMap = f;\n                var d = (function (t) {\n                    function e(e, r, n) {\n                        var o,\n                            a,\n                            c = t.call(this, e, r) || this;\n                        try {\n                            for (\n                                var u = s(Object.keys(n)), p = u.next();\n                                !p.done;\n                                p = u.next()\n                            ) {\n                                var h = p.value,\n                                    f = n[h],\n                                    d = i(\n                                        \"string\" == typeof f ? [f, null] : f,\n                                        2\n                                    ),\n                                    m = d[0],\n                                    y = d[1],\n                                    g = new l.Symbol(h, m, y);\n                                c.add(h, g);\n                            }\n                        } catch (t) {\n                            o = { error: t };\n                        } finally {\n                            try {\n                                p && !p.done && (a = u.return) && a.call(u);\n                            } finally {\n                                if (o) throw o.error;\n                            }\n                        }\n                        return c;\n                    }\n                    return o(e, t), e;\n                })(f);\n                e.CharacterMap = d;\n                var m = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.parse = function (e) {\n                            var r = i(e, 2),\n                                n = r[0],\n                                o = r[1];\n                            return t.prototype.parse.call(this, [n, \"\\\\\" + o]);\n                        }),\n                        e\n                    );\n                })(d);\n                e.DelimiterMap = m;\n                var y = (function (t) {\n                    function e(e, r, n) {\n                        var o,\n                            a,\n                            c = t.call(this, e, null) || this;\n                        try {\n                            for (\n                                var u = s(Object.keys(r)), p = u.next();\n                                !p.done;\n                                p = u.next()\n                            ) {\n                                var h = p.value,\n                                    f = r[h],\n                                    d = i(\"string\" == typeof f ? [f] : f),\n                                    m = d[0],\n                                    y = d.slice(1),\n                                    g = new l.Macro(h, n[m], y);\n                                c.add(h, g);\n                            }\n                        } catch (t) {\n                            o = { error: t };\n                        } finally {\n                            try {\n                                p && !p.done && (a = u.return) && a.call(u);\n                            } finally {\n                                if (o) throw o.error;\n                            }\n                        }\n                        return c;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.parserFor = function (t) {\n                            var e = this.lookup(t);\n                            return e ? e.func : null;\n                        }),\n                        (e.prototype.parse = function (t) {\n                            var e = i(t, 2),\n                                r = e[0],\n                                n = e[1],\n                                o = this.lookup(n),\n                                s = this.parserFor(n);\n                            return o && s\n                                ? u(\n                                      s.apply(\n                                          void 0,\n                                          a([r, o.symbol], i(o.args), !1)\n                                      )\n                                  )\n                                : null;\n                        }),\n                        e\n                    );\n                })(f);\n                e.MacroMap = y;\n                var g = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.parse = function (t) {\n                            var e = i(t, 2),\n                                r = e[0],\n                                n = e[1],\n                                o = this.lookup(n),\n                                s = this.parserFor(n);\n                            if (!o || !s) return null;\n                            var l = r.currentCS;\n                            r.currentCS = \"\\\\\" + n;\n                            var c = s.apply(\n                                void 0,\n                                a([r, \"\\\\\" + o.symbol], i(o.args), !1)\n                            );\n                            return (r.currentCS = l), u(c);\n                        }),\n                        e\n                    );\n                })(y);\n                e.CommandMap = g;\n                var b = (function (t) {\n                    function e(e, r, n, o) {\n                        var i = t.call(this, e, n, o) || this;\n                        return (i.parser = r), i;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.parse = function (t) {\n                            var e = i(t, 2),\n                                r = e[0],\n                                n = e[1],\n                                o = this.lookup(n),\n                                s = this.parserFor(n);\n                            return o && s\n                                ? u(this.parser(r, o.symbol, s, o.args))\n                                : null;\n                        }),\n                        e\n                    );\n                })(y);\n                e.EnvironmentMap = b;\n            },\n            6521: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    s =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.TagsFactory =\n                        e.AllTags =\n                        e.NoTags =\n                        e.AbstractTags =\n                        e.TagInfo =\n                        e.Label =\n                            void 0);\n                var a = s(r(8417)),\n                    l = function (t, e) {\n                        void 0 === t && (t = \"???\"),\n                            void 0 === e && (e = \"\"),\n                            (this.tag = t),\n                            (this.id = e);\n                    };\n                e.Label = l;\n                var c = function (t, e, r, n, o, i, s, a) {\n                    void 0 === t && (t = \"\"),\n                        void 0 === e && (e = !1),\n                        void 0 === r && (r = !1),\n                        void 0 === n && (n = null),\n                        void 0 === o && (o = \"\"),\n                        void 0 === i && (i = \"\"),\n                        void 0 === s && (s = !1),\n                        void 0 === a && (a = \"\"),\n                        (this.env = t),\n                        (this.taggable = e),\n                        (this.defaultTags = r),\n                        (this.tag = n),\n                        (this.tagId = o),\n                        (this.tagFormat = i),\n                        (this.noTag = s),\n                        (this.labelId = a);\n                };\n                e.TagInfo = c;\n                var u = (function () {\n                    function t() {\n                        (this.counter = 0),\n                            (this.allCounter = 0),\n                            (this.configuration = null),\n                            (this.ids = {}),\n                            (this.allIds = {}),\n                            (this.labels = {}),\n                            (this.allLabels = {}),\n                            (this.redo = !1),\n                            (this.refUpdate = !1),\n                            (this.currentTag = new c()),\n                            (this.history = []),\n                            (this.stack = []),\n                            (this.enTag = function (t, e) {\n                                var r = this.configuration.nodeFactory,\n                                    n = r.create(\"node\", \"mtd\", [t]),\n                                    o = r.create(\"node\", \"mlabeledtr\", [e, n]);\n                                return r.create(\"node\", \"mtable\", [o], {\n                                    side: this.configuration.options.tagSide,\n                                    minlabelspacing:\n                                        this.configuration.options.tagIndent,\n                                    displaystyle: !0,\n                                });\n                            });\n                    }\n                    return (\n                        (t.prototype.start = function (t, e, r) {\n                            this.currentTag && this.stack.push(this.currentTag),\n                                (this.currentTag = new c(t, e, r));\n                        }),\n                        Object.defineProperty(t.prototype, \"env\", {\n                            get: function () {\n                                return this.currentTag.env;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (t.prototype.end = function () {\n                            this.history.push(this.currentTag),\n                                (this.currentTag = this.stack.pop());\n                        }),\n                        (t.prototype.tag = function (t, e) {\n                            (this.currentTag.tag = t),\n                                (this.currentTag.tagFormat = e\n                                    ? t\n                                    : this.formatTag(t)),\n                                (this.currentTag.noTag = !1);\n                        }),\n                        (t.prototype.notag = function () {\n                            this.tag(\"\", !0), (this.currentTag.noTag = !0);\n                        }),\n                        Object.defineProperty(t.prototype, \"noTag\", {\n                            get: function () {\n                                return this.currentTag.noTag;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(t.prototype, \"label\", {\n                            get: function () {\n                                return this.currentTag.labelId;\n                            },\n                            set: function (t) {\n                                this.currentTag.labelId = t;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (t.prototype.formatUrl = function (t, e) {\n                            return e + \"#\" + encodeURIComponent(t);\n                        }),\n                        (t.prototype.formatTag = function (t) {\n                            return \"(\" + t + \")\";\n                        }),\n                        (t.prototype.formatId = function (t) {\n                            return \"mjx-eqn:\" + t.replace(/\\s/g, \"_\");\n                        }),\n                        (t.prototype.formatNumber = function (t) {\n                            return t.toString();\n                        }),\n                        (t.prototype.autoTag = function () {\n                            null == this.currentTag.tag &&\n                                (this.counter++,\n                                this.tag(this.formatNumber(this.counter), !1));\n                        }),\n                        (t.prototype.clearTag = function () {\n                            (this.label = \"\"),\n                                this.tag(null, !0),\n                                (this.currentTag.tagId = \"\");\n                        }),\n                        (t.prototype.getTag = function (t) {\n                            if ((void 0 === t && (t = !1), t))\n                                return this.autoTag(), this.makeTag();\n                            var e = this.currentTag;\n                            return e.taggable &&\n                                !e.noTag &&\n                                (e.defaultTags && this.autoTag(), e.tag)\n                                ? this.makeTag()\n                                : null;\n                        }),\n                        (t.prototype.resetTag = function () {\n                            (this.history = []),\n                                (this.redo = !1),\n                                (this.refUpdate = !1),\n                                this.clearTag();\n                        }),\n                        (t.prototype.reset = function (t) {\n                            void 0 === t && (t = 0),\n                                this.resetTag(),\n                                (this.counter = this.allCounter = t),\n                                (this.allLabels = {}),\n                                (this.allIds = {});\n                        }),\n                        (t.prototype.startEquation = function (t) {\n                            (this.history = []),\n                                (this.stack = []),\n                                this.clearTag(),\n                                (this.currentTag = new c(\"\", void 0, void 0)),\n                                (this.labels = {}),\n                                (this.ids = {}),\n                                (this.counter = this.allCounter),\n                                (this.redo = !1);\n                            var e = t.inputData.recompile;\n                            e &&\n                                ((this.refUpdate = !0),\n                                (this.counter = e.counter));\n                        }),\n                        (t.prototype.finishEquation = function (t) {\n                            this.redo &&\n                                (t.inputData.recompile = {\n                                    state: t.state(),\n                                    counter: this.allCounter,\n                                }),\n                                this.refUpdate ||\n                                    (this.allCounter = this.counter),\n                                Object.assign(this.allIds, this.ids),\n                                Object.assign(this.allLabels, this.labels);\n                        }),\n                        (t.prototype.finalize = function (t, e) {\n                            if (\n                                !e.display ||\n                                this.currentTag.env ||\n                                null == this.currentTag.tag\n                            )\n                                return t;\n                            var r = this.makeTag();\n                            return this.enTag(t, r);\n                        }),\n                        (t.prototype.makeId = function () {\n                            this.currentTag.tagId = this.formatId(\n                                (this.configuration.options.useLabelIds &&\n                                    this.label) ||\n                                    this.currentTag.tag\n                            );\n                        }),\n                        (t.prototype.makeTag = function () {\n                            this.makeId(),\n                                this.label &&\n                                    (this.labels[this.label] = new l(\n                                        this.currentTag.tag,\n                                        this.currentTag.tagId\n                                    ));\n                            var t = new a.default(\n                                \"\\\\text{\" + this.currentTag.tagFormat + \"}\",\n                                {},\n                                this.configuration\n                            ).mml();\n                            return this.configuration.nodeFactory.create(\n                                \"node\",\n                                \"mtd\",\n                                [t],\n                                { id: this.currentTag.tagId }\n                            );\n                        }),\n                        t\n                    );\n                })();\n                e.AbstractTags = u;\n                var p = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.autoTag = function () {}),\n                        (e.prototype.getTag = function () {\n                            return this.currentTag.tag\n                                ? t.prototype.getTag.call(this)\n                                : null;\n                        }),\n                        e\n                    );\n                })(u);\n                e.NoTags = p;\n                var h = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.finalize = function (t, e) {\n                            if (\n                                !e.display ||\n                                this.history.find(function (t) {\n                                    return t.taggable;\n                                })\n                            )\n                                return t;\n                            var r = this.getTag(!0);\n                            return this.enTag(t, r);\n                        }),\n                        e\n                    );\n                })(u);\n                (e.AllTags = h),\n                    (function (t) {\n                        var e = new Map([\n                                [\"none\", p],\n                                [\"all\", h],\n                            ]),\n                            r = \"none\";\n                        (t.OPTIONS = {\n                            tags: r,\n                            tagSide: \"right\",\n                            tagIndent: \"0.8em\",\n                            useLabelIds: !0,\n                            ignoreDuplicateLabels: !1,\n                        }),\n                            (t.add = function (t, r) {\n                                e.set(t, r);\n                            }),\n                            (t.addTags = function (e) {\n                                var r, n;\n                                try {\n                                    for (\n                                        var o = i(Object.keys(e)), s = o.next();\n                                        !s.done;\n                                        s = o.next()\n                                    ) {\n                                        var a = s.value;\n                                        t.add(a, e[a]);\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (n = o.return) &&\n                                            n.call(o);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                            }),\n                            (t.create = function (t) {\n                                var n = e.get(t) || e.get(r);\n                                if (!n) throw Error(\"Unknown tags class\");\n                                return new n();\n                            }),\n                            (t.setDefault = function (t) {\n                                r = t;\n                            }),\n                            (t.getDefault = function () {\n                                return t.create(r);\n                            });\n                    })(e.TagsFactory || (e.TagsFactory = {}));\n            },\n            8317: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.TexConstant = void 0),\n                    (function (t) {\n                        (t.Variant = {\n                            NORMAL: \"normal\",\n                            BOLD: \"bold\",\n                            ITALIC: \"italic\",\n                            BOLDITALIC: \"bold-italic\",\n                            DOUBLESTRUCK: \"double-struck\",\n                            FRAKTUR: \"fraktur\",\n                            BOLDFRAKTUR: \"bold-fraktur\",\n                            SCRIPT: \"script\",\n                            BOLDSCRIPT: \"bold-script\",\n                            SANSSERIF: \"sans-serif\",\n                            BOLDSANSSERIF: \"bold-sans-serif\",\n                            SANSSERIFITALIC: \"sans-serif-italic\",\n                            SANSSERIFBOLDITALIC: \"sans-serif-bold-italic\",\n                            MONOSPACE: \"monospace\",\n                            INITIAL: \"inital\",\n                            TAILED: \"tailed\",\n                            LOOPED: \"looped\",\n                            STRETCHED: \"stretched\",\n                            CALLIGRAPHIC: \"-tex-calligraphic\",\n                            BOLDCALLIGRAPHIC: \"-tex-bold-calligraphic\",\n                            OLDSTYLE: \"-tex-oldstyle\",\n                            BOLDOLDSTYLE: \"-tex-bold-oldstyle\",\n                            MATHITALIC: \"-tex-mathit\",\n                        }),\n                            (t.Form = {\n                                PREFIX: \"prefix\",\n                                INFIX: \"infix\",\n                                POSTFIX: \"postfix\",\n                            }),\n                            (t.LineBreak = {\n                                AUTO: \"auto\",\n                                NEWLINE: \"newline\",\n                                NOBREAK: \"nobreak\",\n                                GOODBREAK: \"goodbreak\",\n                                BADBREAK: \"badbreak\",\n                            }),\n                            (t.LineBreakStyle = {\n                                BEFORE: \"before\",\n                                AFTER: \"after\",\n                                DUPLICATE: \"duplicate\",\n                                INFIXLINBREAKSTYLE: \"infixlinebreakstyle\",\n                            }),\n                            (t.IndentAlign = {\n                                LEFT: \"left\",\n                                CENTER: \"center\",\n                                RIGHT: \"right\",\n                                AUTO: \"auto\",\n                                ID: \"id\",\n                                INDENTALIGN: \"indentalign\",\n                            }),\n                            (t.IndentShift = { INDENTSHIFT: \"indentshift\" }),\n                            (t.LineThickness = {\n                                THIN: \"thin\",\n                                MEDIUM: \"medium\",\n                                THICK: \"thick\",\n                            }),\n                            (t.Notation = {\n                                LONGDIV: \"longdiv\",\n                                ACTUARIAL: \"actuarial\",\n                                PHASORANGLE: \"phasorangle\",\n                                RADICAL: \"radical\",\n                                BOX: \"box\",\n                                ROUNDEDBOX: \"roundedbox\",\n                                CIRCLE: \"circle\",\n                                LEFT: \"left\",\n                                RIGHT: \"right\",\n                                TOP: \"top\",\n                                BOTTOM: \"bottom\",\n                                UPDIAGONALSTRIKE: \"updiagonalstrike\",\n                                DOWNDIAGONALSTRIKE: \"downdiagonalstrike\",\n                                VERTICALSTRIKE: \"verticalstrike\",\n                                HORIZONTALSTRIKE: \"horizontalstrike\",\n                                NORTHEASTARROW: \"northeastarrow\",\n                                MADRUWB: \"madruwb\",\n                                UPDIAGONALARROW: \"updiagonalarrow\",\n                            }),\n                            (t.Align = {\n                                TOP: \"top\",\n                                BOTTOM: \"bottom\",\n                                CENTER: \"center\",\n                                BASELINE: \"baseline\",\n                                AXIS: \"axis\",\n                                LEFT: \"left\",\n                                RIGHT: \"right\",\n                            }),\n                            (t.Lines = {\n                                NONE: \"none\",\n                                SOLID: \"solid\",\n                                DASHED: \"dashed\",\n                            }),\n                            (t.Side = {\n                                LEFT: \"left\",\n                                RIGHT: \"right\",\n                                LEFTOVERLAP: \"leftoverlap\",\n                                RIGHTOVERLAP: \"rightoverlap\",\n                            }),\n                            (t.Width = { AUTO: \"auto\", FIT: \"fit\" }),\n                            (t.Actiontype = {\n                                TOGGLE: \"toggle\",\n                                STATUSLINE: \"statusline\",\n                                TOOLTIP: \"tooltip\",\n                                INPUT: \"input\",\n                            }),\n                            (t.Overflow = {\n                                LINBREAK: \"linebreak\",\n                                SCROLL: \"scroll\",\n                                ELIDE: \"elide\",\n                                TRUNCATE: \"truncate\",\n                                SCALE: \"scale\",\n                            }),\n                            (t.Unit = {\n                                EM: \"em\",\n                                EX: \"ex\",\n                                PX: \"px\",\n                                IN: \"in\",\n                                CM: \"cm\",\n                                MM: \"mm\",\n                                PT: \"pt\",\n                                PC: \"pc\",\n                            });\n                    })(e.TexConstant || (e.TexConstant = {}));\n            },\n            3971: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var r = (function () {\n                    function t(e, r) {\n                        for (var n = [], o = 2; o < arguments.length; o++)\n                            n[o - 2] = arguments[o];\n                        (this.id = e), (this.message = t.processString(r, n));\n                    }\n                    return (\n                        (t.processString = function (e, r) {\n                            for (\n                                var n = e.split(t.pattern), o = 1, i = n.length;\n                                o < i;\n                                o += 2\n                            ) {\n                                var s = n[o].charAt(0);\n                                if (s >= \"0\" && s <= \"9\")\n                                    (n[o] = r[parseInt(n[o], 10) - 1]),\n                                        \"number\" == typeof n[o] &&\n                                            (n[o] = n[o].toString());\n                                else if (\"{\" === s) {\n                                    if ((s = n[o].substr(1)) >= \"0\" && s <= \"9\")\n                                        (n[o] =\n                                            r[\n                                                parseInt(\n                                                    n[o].substr(\n                                                        1,\n                                                        n[o].length - 2\n                                                    ),\n                                                    10\n                                                ) - 1\n                                            ]),\n                                            \"number\" == typeof n[o] &&\n                                                (n[o] = n[o].toString());\n                                    else\n                                        n[o].match(\n                                            /^\\{([a-z]+):%(\\d+)\\|(.*)\\}$/\n                                        ) && (n[o] = \"%\" + n[o]);\n                                }\n                                null == n[o] && (n[o] = \"???\");\n                            }\n                            return n.join(\"\");\n                        }),\n                        (t.pattern =\n                            /%(\\d+|\\{\\d+\\}|\\{[a-z]+:\\%\\d+(?:\\|(?:%\\{\\d+\\}|%.|[^\\}])*)+\\}|.)/g),\n                        t\n                    );\n                })();\n                e.default = r;\n            },\n            8417: function (t, e, r) {\n                var n =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    s =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var a = s(r(1130)),\n                    l = s(r(9497)),\n                    c = s(r(3971)),\n                    u = r(9007),\n                    p = (function () {\n                        function t(t, e, r) {\n                            var o, i;\n                            (this._string = t),\n                                (this.configuration = r),\n                                (this.macroCount = 0),\n                                (this.i = 0),\n                                (this.currentCS = \"\");\n                            var s,\n                                a = e.hasOwnProperty(\"isInner\"),\n                                c = e.isInner;\n                            if ((delete e.isInner, e)) {\n                                s = {};\n                                try {\n                                    for (\n                                        var u = n(Object.keys(e)), p = u.next();\n                                        !p.done;\n                                        p = u.next()\n                                    ) {\n                                        var h = p.value;\n                                        s[h] = e[h];\n                                    }\n                                } catch (t) {\n                                    o = { error: t };\n                                } finally {\n                                    try {\n                                        p &&\n                                            !p.done &&\n                                            (i = u.return) &&\n                                            i.call(u);\n                                    } finally {\n                                        if (o) throw o.error;\n                                    }\n                                }\n                            }\n                            this.configuration.pushParser(this),\n                                (this.stack = new l.default(\n                                    this.itemFactory,\n                                    s,\n                                    !a || c\n                                )),\n                                this.Parse(),\n                                this.Push(this.itemFactory.create(\"stop\"));\n                        }\n                        return (\n                            Object.defineProperty(t.prototype, \"options\", {\n                                get: function () {\n                                    return this.configuration.options;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(t.prototype, \"itemFactory\", {\n                                get: function () {\n                                    return this.configuration.itemFactory;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(t.prototype, \"tags\", {\n                                get: function () {\n                                    return this.configuration.tags;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(t.prototype, \"string\", {\n                                get: function () {\n                                    return this._string;\n                                },\n                                set: function (t) {\n                                    this._string = t;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.parse = function (t, e) {\n                                return this.configuration.handlers\n                                    .get(t)\n                                    .parse(e);\n                            }),\n                            (t.prototype.lookup = function (t, e) {\n                                return this.configuration.handlers\n                                    .get(t)\n                                    .lookup(e);\n                            }),\n                            (t.prototype.contains = function (t, e) {\n                                return this.configuration.handlers\n                                    .get(t)\n                                    .contains(e);\n                            }),\n                            (t.prototype.toString = function () {\n                                var t,\n                                    e,\n                                    r = \"\";\n                                try {\n                                    for (\n                                        var o = n(\n                                                Array.from(\n                                                    this.configuration.handlers.keys()\n                                                )\n                                            ),\n                                            i = o.next();\n                                        !i.done;\n                                        i = o.next()\n                                    ) {\n                                        var s = i.value;\n                                        r +=\n                                            s +\n                                            \": \" +\n                                            this.configuration.handlers.get(s) +\n                                            \"\\n\";\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        i &&\n                                            !i.done &&\n                                            (e = o.return) &&\n                                            e.call(o);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                                return r;\n                            }),\n                            (t.prototype.Parse = function () {\n                                for (var t; this.i < this.string.length; )\n                                    (t = this.getCodePoint()),\n                                        (this.i += t.length),\n                                        this.parse(\"character\", [this, t]);\n                            }),\n                            (t.prototype.Push = function (t) {\n                                t instanceof u.AbstractMmlNode && t.isInferred\n                                    ? this.PushAll(t.childNodes)\n                                    : this.stack.Push(t);\n                            }),\n                            (t.prototype.PushAll = function (t) {\n                                var e, r;\n                                try {\n                                    for (\n                                        var o = n(t), i = o.next();\n                                        !i.done;\n                                        i = o.next()\n                                    ) {\n                                        var s = i.value;\n                                        this.stack.Push(s);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        i &&\n                                            !i.done &&\n                                            (r = o.return) &&\n                                            r.call(o);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                            }),\n                            (t.prototype.mml = function () {\n                                if (!this.stack.Top().isKind(\"mml\"))\n                                    return null;\n                                var t = this.stack.Top().First;\n                                return this.configuration.popParser(), t;\n                            }),\n                            (t.prototype.convertDelimiter = function (t) {\n                                var e = this.lookup(\"delimiter\", t);\n                                return e ? e.char : null;\n                            }),\n                            (t.prototype.getCodePoint = function () {\n                                var t = this.string.codePointAt(this.i);\n                                return void 0 === t\n                                    ? \"\"\n                                    : String.fromCodePoint(t);\n                            }),\n                            (t.prototype.nextIsSpace = function () {\n                                return !!this.string.charAt(this.i).match(/\\s/);\n                            }),\n                            (t.prototype.GetNext = function () {\n                                for (; this.nextIsSpace(); ) this.i++;\n                                return this.getCodePoint();\n                            }),\n                            (t.prototype.GetCS = function () {\n                                var t = this.string\n                                    .slice(this.i)\n                                    .match(/^(([a-z]+) ?|[\\uD800-\\uDBFF].|.)/i);\n                                return t\n                                    ? ((this.i += t[0].length), t[2] || t[1])\n                                    : (this.i++, \" \");\n                            }),\n                            (t.prototype.GetArgument = function (t, e) {\n                                switch (this.GetNext()) {\n                                    case \"\":\n                                        if (!e)\n                                            throw new c.default(\n                                                \"MissingArgFor\",\n                                                \"Missing argument for %1\",\n                                                this.currentCS\n                                            );\n                                        return null;\n                                    case \"}\":\n                                        if (!e)\n                                            throw new c.default(\n                                                \"ExtraCloseMissingOpen\",\n                                                \"Extra close brace or missing open brace\"\n                                            );\n                                        return null;\n                                    case \"\\\\\":\n                                        return this.i++, \"\\\\\" + this.GetCS();\n                                    case \"{\":\n                                        for (\n                                            var r = ++this.i, n = 1;\n                                            this.i < this.string.length;\n\n                                        )\n                                            switch (\n                                                this.string.charAt(this.i++)\n                                            ) {\n                                                case \"\\\\\":\n                                                    this.i++;\n                                                    break;\n                                                case \"{\":\n                                                    n++;\n                                                    break;\n                                                case \"}\":\n                                                    if (0 == --n)\n                                                        return this.string.slice(\n                                                            r,\n                                                            this.i - 1\n                                                        );\n                                            }\n                                        throw new c.default(\n                                            \"MissingCloseBrace\",\n                                            \"Missing close brace\"\n                                        );\n                                }\n                                var o = this.getCodePoint();\n                                return (this.i += o.length), o;\n                            }),\n                            (t.prototype.GetBrackets = function (t, e) {\n                                if (\"[\" !== this.GetNext()) return e;\n                                for (\n                                    var r = ++this.i, n = 0;\n                                    this.i < this.string.length;\n\n                                )\n                                    switch (this.string.charAt(this.i++)) {\n                                        case \"{\":\n                                            n++;\n                                            break;\n                                        case \"\\\\\":\n                                            this.i++;\n                                            break;\n                                        case \"}\":\n                                            if (n-- <= 0)\n                                                throw new c.default(\n                                                    \"ExtraCloseLooking\",\n                                                    \"Extra close brace while looking for %1\",\n                                                    \"']'\"\n                                                );\n                                            break;\n                                        case \"]\":\n                                            if (0 === n)\n                                                return this.string.slice(\n                                                    r,\n                                                    this.i - 1\n                                                );\n                                    }\n                                throw new c.default(\n                                    \"MissingCloseBracket\",\n                                    \"Could not find closing ']' for argument to %1\",\n                                    this.currentCS\n                                );\n                            }),\n                            (t.prototype.GetDelimiter = function (t, e) {\n                                var r = this.GetNext();\n                                if (\n                                    ((this.i += r.length),\n                                    this.i <= this.string.length &&\n                                        (\"\\\\\" === r\n                                            ? (r += this.GetCS())\n                                            : \"{\" === r &&\n                                              e &&\n                                              (this.i--,\n                                              (r = this.GetArgument(t).trim())),\n                                        this.contains(\"delimiter\", r)))\n                                )\n                                    return this.convertDelimiter(r);\n                                throw new c.default(\n                                    \"MissingOrUnrecognizedDelim\",\n                                    \"Missing or unrecognized delimiter for %1\",\n                                    this.currentCS\n                                );\n                            }),\n                            (t.prototype.GetDimen = function (t) {\n                                if (\"{\" === this.GetNext()) {\n                                    var e = this.GetArgument(t),\n                                        r = o(a.default.matchDimen(e), 2),\n                                        n = r[0],\n                                        i = r[1];\n                                    if (n) return n + i;\n                                } else {\n                                    e = this.string.slice(this.i);\n                                    var s = o(a.default.matchDimen(e, !0), 3),\n                                        l = ((n = s[0]), (i = s[1]), s[2]);\n                                    if (n) return (this.i += l), n + i;\n                                }\n                                throw new c.default(\n                                    \"MissingDimOrUnits\",\n                                    \"Missing dimension or its units for %1\",\n                                    this.currentCS\n                                );\n                            }),\n                            (t.prototype.GetUpTo = function (t, e) {\n                                for (; this.nextIsSpace(); ) this.i++;\n                                for (\n                                    var r = this.i, n = 0;\n                                    this.i < this.string.length;\n\n                                ) {\n                                    var o = this.i,\n                                        i = this.GetNext();\n                                    switch (((this.i += i.length), i)) {\n                                        case \"\\\\\":\n                                            i += this.GetCS();\n                                            break;\n                                        case \"{\":\n                                            n++;\n                                            break;\n                                        case \"}\":\n                                            if (0 === n)\n                                                throw new c.default(\n                                                    \"ExtraCloseLooking\",\n                                                    \"Extra close brace while looking for %1\",\n                                                    e\n                                                );\n                                            n--;\n                                    }\n                                    if (0 === n && i === e)\n                                        return this.string.slice(r, o);\n                                }\n                                throw new c.default(\n                                    \"TokenNotFoundForCommand\",\n                                    \"Could not find %1 for %2\",\n                                    e,\n                                    this.currentCS\n                                );\n                            }),\n                            (t.prototype.ParseArg = function (e) {\n                                return new t(\n                                    this.GetArgument(e),\n                                    this.stack.env,\n                                    this.configuration\n                                ).mml();\n                            }),\n                            (t.prototype.ParseUpTo = function (e, r) {\n                                return new t(\n                                    this.GetUpTo(e, r),\n                                    this.stack.env,\n                                    this.configuration\n                                ).mml();\n                            }),\n                            (t.prototype.GetDelimiterArg = function (t) {\n                                var e = a.default.trimSpaces(\n                                    this.GetArgument(t)\n                                );\n                                if (\"\" === e) return null;\n                                if (this.contains(\"delimiter\", e)) return e;\n                                throw new c.default(\n                                    \"MissingOrUnrecognizedDelim\",\n                                    \"Missing or unrecognized delimiter for %1\",\n                                    this.currentCS\n                                );\n                            }),\n                            (t.prototype.GetStar = function () {\n                                var t = \"*\" === this.GetNext();\n                                return t && this.i++, t;\n                            }),\n                            (t.prototype.create = function (t) {\n                                for (\n                                    var e, r = [], n = 1;\n                                    n < arguments.length;\n                                    n++\n                                )\n                                    r[n - 1] = arguments[n];\n                                return (e =\n                                    this.configuration\n                                        .nodeFactory).create.apply(\n                                    e,\n                                    i([t], o(r), !1)\n                                );\n                            }),\n                            t\n                        );\n                    })();\n                e.default = p;\n            },\n            8021: function (t, e, r) {\n                var n,\n                    o,\n                    i =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AmsConfiguration = e.AmsTags = void 0);\n                var s = r(9899),\n                    a = r(2790),\n                    l = r(6521),\n                    c = r(4387);\n                r(7379);\n                var u = r(9140),\n                    p = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return i(e, t), e;\n                    })(l.AbstractTags);\n                e.AmsTags = p;\n                e.AmsConfiguration = s.Configuration.create(\"ams\", {\n                    handler: {\n                        character: [\"AMSmath-operatorLetter\"],\n                        delimiter: [\n                            \"AMSsymbols-delimiter\",\n                            \"AMSmath-delimiter\",\n                        ],\n                        macro: [\n                            \"AMSsymbols-mathchar0mi\",\n                            \"AMSsymbols-mathchar0mo\",\n                            \"AMSsymbols-delimiter\",\n                            \"AMSsymbols-macros\",\n                            \"AMSmath-mathchar0mo\",\n                            \"AMSmath-macros\",\n                            \"AMSmath-delimiter\",\n                        ],\n                        environment: [\"AMSmath-environment\"],\n                    },\n                    items:\n                        ((o = {}),\n                        (o[a.MultlineItem.prototype.kind] = a.MultlineItem),\n                        (o[a.FlalignItem.prototype.kind] = a.FlalignItem),\n                        o),\n                    tags: { ams: p },\n                    init: function (t) {\n                        new u.CommandMap(c.NEW_OPS, {}, {}),\n                            t.append(\n                                s.Configuration.local({\n                                    handler: { macro: [c.NEW_OPS] },\n                                    priority: -1,\n                                })\n                            );\n                    },\n                    config: function (t, e) {\n                        e.parseOptions.options.multlineWidth &&\n                            (e.parseOptions.options.ams.multlineWidth =\n                                e.parseOptions.options.multlineWidth),\n                            delete e.parseOptions.options.multlineWidth;\n                    },\n                    options: {\n                        multlineWidth: \"\",\n                        ams: { multlineWidth: \"100%\", multlineIndent: \"1em\" },\n                    },\n                });\n            },\n            2790: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.FlalignItem = e.MultlineItem = void 0);\n                var a = r(1181),\n                    l = s(r(1130)),\n                    c = s(r(1256)),\n                    u = s(r(3971)),\n                    p = r(8317),\n                    h = (function (t) {\n                        function e(e) {\n                            for (var r = [], n = 1; n < arguments.length; n++)\n                                r[n - 1] = arguments[n];\n                            var o = t.call(this, e) || this;\n                            return (\n                                o.factory.configuration.tags.start(\n                                    \"multline\",\n                                    !0,\n                                    r[0]\n                                ),\n                                o\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"multline\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.EndEntry = function () {\n                                this.table.length &&\n                                    l.default.fixInitialMO(\n                                        this.factory.configuration,\n                                        this.nodes\n                                    );\n                                var t = this.getProperty(\"shove\"),\n                                    e = this.create(\n                                        \"node\",\n                                        \"mtd\",\n                                        this.nodes,\n                                        t ? { columnalign: t } : {}\n                                    );\n                                this.setProperty(\"shove\", null),\n                                    this.row.push(e),\n                                    this.Clear();\n                            }),\n                            (e.prototype.EndRow = function () {\n                                if (1 !== this.row.length)\n                                    throw new u.default(\n                                        \"MultlineRowsOneCol\",\n                                        \"The rows within the %1 environment must have exactly one column\",\n                                        \"multline\"\n                                    );\n                                var t = this.create(\"node\", \"mtr\", this.row);\n                                this.table.push(t), (this.row = []);\n                            }),\n                            (e.prototype.EndTable = function () {\n                                if (\n                                    (t.prototype.EndTable.call(this),\n                                    this.table.length)\n                                ) {\n                                    var e = this.table.length - 1,\n                                        r = -1;\n                                    c.default.getAttribute(\n                                        c.default.getChildren(this.table[0])[0],\n                                        \"columnalign\"\n                                    ) ||\n                                        c.default.setAttribute(\n                                            c.default.getChildren(\n                                                this.table[0]\n                                            )[0],\n                                            \"columnalign\",\n                                            p.TexConstant.Align.LEFT\n                                        ),\n                                        c.default.getAttribute(\n                                            c.default.getChildren(\n                                                this.table[e]\n                                            )[0],\n                                            \"columnalign\"\n                                        ) ||\n                                            c.default.setAttribute(\n                                                c.default.getChildren(\n                                                    this.table[e]\n                                                )[0],\n                                                \"columnalign\",\n                                                p.TexConstant.Align.RIGHT\n                                            );\n                                    var n =\n                                        this.factory.configuration.tags.getTag();\n                                    if (n) {\n                                        r =\n                                            this.arraydef.side ===\n                                            p.TexConstant.Align.LEFT\n                                                ? 0\n                                                : this.table.length - 1;\n                                        var o = this.table[r],\n                                            i = this.create(\n                                                \"node\",\n                                                \"mlabeledtr\",\n                                                [n].concat(\n                                                    c.default.getChildren(o)\n                                                )\n                                            );\n                                        c.default.copyAttributes(o, i),\n                                            (this.table[r] = i);\n                                    }\n                                }\n                                this.factory.configuration.tags.end();\n                            }),\n                            e\n                        );\n                    })(a.ArrayItem);\n                e.MultlineItem = h;\n                var f = (function (t) {\n                    function e(e, r, n, o, i) {\n                        var s = t.call(this, e) || this;\n                        return (\n                            (s.name = r),\n                            (s.numbered = n),\n                            (s.padded = o),\n                            (s.center = i),\n                            s.factory.configuration.tags.start(r, n, n),\n                            s\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"flalign\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.EndEntry = function () {\n                            t.prototype.EndEntry.call(this);\n                            var e = this.getProperty(\"xalignat\");\n                            if (e && this.row.length > e)\n                                throw new u.default(\n                                    \"XalignOverflow\",\n                                    \"Extra %1 in row of %2\",\n                                    \"&\",\n                                    this.name\n                                );\n                        }),\n                        (e.prototype.EndRow = function () {\n                            for (\n                                var e,\n                                    r = this.row,\n                                    n = this.getProperty(\"xalignat\");\n                                r.length < n;\n\n                            )\n                                r.push(this.create(\"node\", \"mtd\"));\n                            for (\n                                this.row = [],\n                                    this.padded &&\n                                        this.row.push(\n                                            this.create(\"node\", \"mtd\")\n                                        );\n                                (e = r.shift());\n\n                            )\n                                this.row.push(e),\n                                    (e = r.shift()) && this.row.push(e),\n                                    (r.length || this.padded) &&\n                                        this.row.push(\n                                            this.create(\"node\", \"mtd\")\n                                        );\n                            this.row.length > this.maxrow &&\n                                (this.maxrow = this.row.length),\n                                t.prototype.EndRow.call(this);\n                            var o = this.table[this.table.length - 1];\n                            if (\n                                this.getProperty(\"zeroWidthLabel\") &&\n                                o.isKind(\"mlabeledtr\")\n                            ) {\n                                var s = c.default.getChildren(o)[0],\n                                    a =\n                                        this.factory.configuration.options\n                                            .tagSide,\n                                    l = i(\n                                        { width: 0 },\n                                        \"right\" === a\n                                            ? { lspace: \"-1width\" }\n                                            : {}\n                                    ),\n                                    u = this.create(\n                                        \"node\",\n                                        \"mpadded\",\n                                        c.default.getChildren(s),\n                                        l\n                                    );\n                                s.setChildren([u]);\n                            }\n                        }),\n                        (e.prototype.EndTable = function () {\n                            (t.prototype.EndTable.call(this), this.center) &&\n                                this.maxrow <= 2 &&\n                                (delete this.arraydef.width,\n                                delete this.global.indentalign);\n                        }),\n                        e\n                    );\n                })(a.EqnArrayItem);\n                e.FlalignItem = f;\n            },\n            7379: function (t, e, r) {\n                var n =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    o =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    i =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        n(e, t, r);\n                            return o(e, t), e;\n                        },\n                    s =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var a = r(4387),\n                    l = i(r(9140)),\n                    c = r(8317),\n                    u = s(r(5450)),\n                    p = s(r(1130)),\n                    h = r(9007),\n                    f = r(6010);\n                new l.CharacterMap(\n                    \"AMSmath-mathchar0mo\",\n                    u.default.mathchar0mo,\n                    { iiiint: [\"\\u2a0c\", { texClass: h.TEXCLASS.OP }] }\n                ),\n                    new l.RegExpMap(\n                        \"AMSmath-operatorLetter\",\n                        a.AmsMethods.operatorLetter,\n                        /[-*]/i\n                    ),\n                    new l.CommandMap(\n                        \"AMSmath-macros\",\n                        {\n                            mathring: [\"Accent\", \"02DA\"],\n                            nobreakspace: \"Tilde\",\n                            negmedspace: [\n                                \"Spacer\",\n                                f.MATHSPACE.negativemediummathspace,\n                            ],\n                            negthickspace: [\n                                \"Spacer\",\n                                f.MATHSPACE.negativethickmathspace,\n                            ],\n                            idotsint: [\"MultiIntegral\", \"\\\\int\\\\cdots\\\\int\"],\n                            dddot: [\"Accent\", \"20DB\"],\n                            ddddot: [\"Accent\", \"20DC\"],\n                            sideset: \"SideSet\",\n                            boxed: [\"Macro\", \"\\\\fbox{$\\\\displaystyle{#1}$}\", 1],\n                            tag: \"HandleTag\",\n                            notag: \"HandleNoTag\",\n                            eqref: [\"HandleRef\", !0],\n                            substack: [\n                                \"Macro\",\n                                \"\\\\begin{subarray}{c}#1\\\\end{subarray}\",\n                                1,\n                            ],\n                            injlim: [\"NamedOp\", \"inj&thinsp;lim\"],\n                            projlim: [\"NamedOp\", \"proj&thinsp;lim\"],\n                            varliminf: [\n                                \"Macro\",\n                                \"\\\\mathop{\\\\underline{\\\\mmlToken{mi}{lim}}}\",\n                            ],\n                            varlimsup: [\n                                \"Macro\",\n                                \"\\\\mathop{\\\\overline{\\\\mmlToken{mi}{lim}}}\",\n                            ],\n                            varinjlim: [\n                                \"Macro\",\n                                \"\\\\mathop{\\\\underrightarrow{\\\\mmlToken{mi}{lim}}}\",\n                            ],\n                            varprojlim: [\n                                \"Macro\",\n                                \"\\\\mathop{\\\\underleftarrow{\\\\mmlToken{mi}{lim}}}\",\n                            ],\n                            DeclareMathOperator: \"HandleDeclareOp\",\n                            operatorname: \"HandleOperatorName\",\n                            genfrac: \"Genfrac\",\n                            frac: [\"Genfrac\", \"\", \"\", \"\", \"\"],\n                            tfrac: [\"Genfrac\", \"\", \"\", \"\", \"1\"],\n                            dfrac: [\"Genfrac\", \"\", \"\", \"\", \"0\"],\n                            binom: [\"Genfrac\", \"(\", \")\", \"0\", \"\"],\n                            tbinom: [\"Genfrac\", \"(\", \")\", \"0\", \"1\"],\n                            dbinom: [\"Genfrac\", \"(\", \")\", \"0\", \"0\"],\n                            cfrac: \"CFrac\",\n                            shoveleft: [\n                                \"HandleShove\",\n                                c.TexConstant.Align.LEFT,\n                            ],\n                            shoveright: [\n                                \"HandleShove\",\n                                c.TexConstant.Align.RIGHT,\n                            ],\n                            xrightarrow: [\"xArrow\", 8594, 5, 10],\n                            xleftarrow: [\"xArrow\", 8592, 10, 5],\n                        },\n                        a.AmsMethods\n                    ),\n                    new l.EnvironmentMap(\n                        \"AMSmath-environment\",\n                        u.default.environment,\n                        {\n                            \"equation*\": [\"Equation\", null, !1],\n                            \"eqnarray*\": [\n                                \"EqnArray\",\n                                null,\n                                !1,\n                                !0,\n                                \"rcl\",\n                                p.default.cols(0, f.MATHSPACE.thickmathspace),\n                                \".5em\",\n                            ],\n                            align: [\n                                \"EqnArray\",\n                                null,\n                                !0,\n                                !0,\n                                \"rl\",\n                                p.default.cols(0, 2),\n                            ],\n                            \"align*\": [\n                                \"EqnArray\",\n                                null,\n                                !1,\n                                !0,\n                                \"rl\",\n                                p.default.cols(0, 2),\n                            ],\n                            multline: [\"Multline\", null, !0],\n                            \"multline*\": [\"Multline\", null, !1],\n                            split: [\n                                \"EqnArray\",\n                                null,\n                                !1,\n                                !1,\n                                \"rl\",\n                                p.default.cols(0),\n                            ],\n                            gather: [\"EqnArray\", null, !0, !0, \"c\"],\n                            \"gather*\": [\"EqnArray\", null, !1, !0, \"c\"],\n                            alignat: [\"AlignAt\", null, !0, !0],\n                            \"alignat*\": [\"AlignAt\", null, !1, !0],\n                            alignedat: [\"AlignAt\", null, !1, !1],\n                            aligned: [\n                                \"AmsEqnArray\",\n                                null,\n                                null,\n                                null,\n                                \"rl\",\n                                p.default.cols(0, 2),\n                                \".5em\",\n                                \"D\",\n                            ],\n                            gathered: [\n                                \"AmsEqnArray\",\n                                null,\n                                null,\n                                null,\n                                \"c\",\n                                null,\n                                \".5em\",\n                                \"D\",\n                            ],\n                            xalignat: [\"XalignAt\", null, !0, !0],\n                            \"xalignat*\": [\"XalignAt\", null, !1, !0],\n                            xxalignat: [\"XalignAt\", null, !1, !1],\n                            flalign: [\n                                \"FlalignArray\",\n                                null,\n                                !0,\n                                !1,\n                                !0,\n                                \"rlc\",\n                                \"auto auto fit\",\n                            ],\n                            \"flalign*\": [\n                                \"FlalignArray\",\n                                null,\n                                !1,\n                                !1,\n                                !0,\n                                \"rlc\",\n                                \"auto auto fit\",\n                            ],\n                            subarray: [\n                                \"Array\",\n                                null,\n                                null,\n                                null,\n                                null,\n                                p.default.cols(0),\n                                \"0.1em\",\n                                \"S\",\n                                1,\n                            ],\n                            smallmatrix: [\n                                \"Array\",\n                                null,\n                                null,\n                                null,\n                                \"c\",\n                                p.default.cols(1 / 3),\n                                \".2em\",\n                                \"S\",\n                                1,\n                            ],\n                            matrix: [\"Array\", null, null, null, \"c\"],\n                            pmatrix: [\"Array\", null, \"(\", \")\", \"c\"],\n                            bmatrix: [\"Array\", null, \"[\", \"]\", \"c\"],\n                            Bmatrix: [\"Array\", null, \"\\\\{\", \"\\\\}\", \"c\"],\n                            vmatrix: [\"Array\", null, \"\\\\vert\", \"\\\\vert\", \"c\"],\n                            Vmatrix: [\"Array\", null, \"\\\\Vert\", \"\\\\Vert\", \"c\"],\n                            cases: [\n                                \"Array\",\n                                null,\n                                \"\\\\{\",\n                                \".\",\n                                \"ll\",\n                                null,\n                                \".2em\",\n                                \"T\",\n                            ],\n                        },\n                        a.AmsMethods\n                    ),\n                    new l.DelimiterMap(\n                        \"AMSmath-delimiter\",\n                        u.default.delimiter,\n                        {\n                            \"\\\\lvert\": [\"|\", { texClass: h.TEXCLASS.OPEN }],\n                            \"\\\\rvert\": [\"|\", { texClass: h.TEXCLASS.CLOSE }],\n                            \"\\\\lVert\": [\n                                \"\\u2016\",\n                                { texClass: h.TEXCLASS.OPEN },\n                            ],\n                            \"\\\\rVert\": [\n                                \"\\u2016\",\n                                { texClass: h.TEXCLASS.CLOSE },\n                            ],\n                        }\n                    ),\n                    new l.CharacterMap(\n                        \"AMSsymbols-mathchar0mi\",\n                        u.default.mathchar0mi,\n                        {\n                            digamma: \"\\u03dd\",\n                            varkappa: \"\\u03f0\",\n                            varGamma: [\n                                \"\\u0393\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            varDelta: [\n                                \"\\u0394\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            varTheta: [\n                                \"\\u0398\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            varLambda: [\n                                \"\\u039b\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            varXi: [\n                                \"\\u039e\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            varPi: [\n                                \"\\u03a0\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            varSigma: [\n                                \"\\u03a3\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            varUpsilon: [\n                                \"\\u03a5\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            varPhi: [\n                                \"\\u03a6\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            varPsi: [\n                                \"\\u03a8\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            varOmega: [\n                                \"\\u03a9\",\n                                { mathvariant: c.TexConstant.Variant.ITALIC },\n                            ],\n                            beth: \"\\u2136\",\n                            gimel: \"\\u2137\",\n                            daleth: \"\\u2138\",\n                            backprime: [\"\\u2035\", { variantForm: !0 }],\n                            hslash: \"\\u210f\",\n                            varnothing: [\"\\u2205\", { variantForm: !0 }],\n                            blacktriangle: \"\\u25b4\",\n                            triangledown: [\"\\u25bd\", { variantForm: !0 }],\n                            blacktriangledown: \"\\u25be\",\n                            square: \"\\u25fb\",\n                            Box: \"\\u25fb\",\n                            blacksquare: \"\\u25fc\",\n                            lozenge: \"\\u25ca\",\n                            Diamond: \"\\u25ca\",\n                            blacklozenge: \"\\u29eb\",\n                            circledS: [\n                                \"\\u24c8\",\n                                { mathvariant: c.TexConstant.Variant.NORMAL },\n                            ],\n                            bigstar: \"\\u2605\",\n                            sphericalangle: \"\\u2222\",\n                            measuredangle: \"\\u2221\",\n                            nexists: \"\\u2204\",\n                            complement: \"\\u2201\",\n                            mho: \"\\u2127\",\n                            eth: [\n                                \"\\xf0\",\n                                { mathvariant: c.TexConstant.Variant.NORMAL },\n                            ],\n                            Finv: \"\\u2132\",\n                            diagup: \"\\u2571\",\n                            Game: \"\\u2141\",\n                            diagdown: \"\\u2572\",\n                            Bbbk: [\n                                \"k\",\n                                {\n                                    mathvariant:\n                                        c.TexConstant.Variant.DOUBLESTRUCK,\n                                },\n                            ],\n                            yen: \"\\xa5\",\n                            circledR: \"\\xae\",\n                            checkmark: \"\\u2713\",\n                            maltese: \"\\u2720\",\n                        }\n                    ),\n                    new l.CharacterMap(\n                        \"AMSsymbols-mathchar0mo\",\n                        u.default.mathchar0mo,\n                        {\n                            dotplus: \"\\u2214\",\n                            ltimes: \"\\u22c9\",\n                            smallsetminus: [\"\\u2216\", { variantForm: !0 }],\n                            rtimes: \"\\u22ca\",\n                            Cap: \"\\u22d2\",\n                            doublecap: \"\\u22d2\",\n                            leftthreetimes: \"\\u22cb\",\n                            Cup: \"\\u22d3\",\n                            doublecup: \"\\u22d3\",\n                            rightthreetimes: \"\\u22cc\",\n                            barwedge: \"\\u22bc\",\n                            curlywedge: \"\\u22cf\",\n                            veebar: \"\\u22bb\",\n                            curlyvee: \"\\u22ce\",\n                            doublebarwedge: \"\\u2a5e\",\n                            boxminus: \"\\u229f\",\n                            circleddash: \"\\u229d\",\n                            boxtimes: \"\\u22a0\",\n                            circledast: \"\\u229b\",\n                            boxdot: \"\\u22a1\",\n                            circledcirc: \"\\u229a\",\n                            boxplus: \"\\u229e\",\n                            centerdot: [\"\\u22c5\", { variantForm: !0 }],\n                            divideontimes: \"\\u22c7\",\n                            intercal: \"\\u22ba\",\n                            leqq: \"\\u2266\",\n                            geqq: \"\\u2267\",\n                            leqslant: \"\\u2a7d\",\n                            geqslant: \"\\u2a7e\",\n                            eqslantless: \"\\u2a95\",\n                            eqslantgtr: \"\\u2a96\",\n                            lesssim: \"\\u2272\",\n                            gtrsim: \"\\u2273\",\n                            lessapprox: \"\\u2a85\",\n                            gtrapprox: \"\\u2a86\",\n                            approxeq: \"\\u224a\",\n                            lessdot: \"\\u22d6\",\n                            gtrdot: \"\\u22d7\",\n                            lll: \"\\u22d8\",\n                            llless: \"\\u22d8\",\n                            ggg: \"\\u22d9\",\n                            gggtr: \"\\u22d9\",\n                            lessgtr: \"\\u2276\",\n                            gtrless: \"\\u2277\",\n                            lesseqgtr: \"\\u22da\",\n                            gtreqless: \"\\u22db\",\n                            lesseqqgtr: \"\\u2a8b\",\n                            gtreqqless: \"\\u2a8c\",\n                            doteqdot: \"\\u2251\",\n                            Doteq: \"\\u2251\",\n                            eqcirc: \"\\u2256\",\n                            risingdotseq: \"\\u2253\",\n                            circeq: \"\\u2257\",\n                            fallingdotseq: \"\\u2252\",\n                            triangleq: \"\\u225c\",\n                            backsim: \"\\u223d\",\n                            thicksim: [\"\\u223c\", { variantForm: !0 }],\n                            backsimeq: \"\\u22cd\",\n                            thickapprox: [\"\\u2248\", { variantForm: !0 }],\n                            subseteqq: \"\\u2ac5\",\n                            supseteqq: \"\\u2ac6\",\n                            Subset: \"\\u22d0\",\n                            Supset: \"\\u22d1\",\n                            sqsubset: \"\\u228f\",\n                            sqsupset: \"\\u2290\",\n                            preccurlyeq: \"\\u227c\",\n                            succcurlyeq: \"\\u227d\",\n                            curlyeqprec: \"\\u22de\",\n                            curlyeqsucc: \"\\u22df\",\n                            precsim: \"\\u227e\",\n                            succsim: \"\\u227f\",\n                            precapprox: \"\\u2ab7\",\n                            succapprox: \"\\u2ab8\",\n                            vartriangleleft: \"\\u22b2\",\n                            lhd: \"\\u22b2\",\n                            vartriangleright: \"\\u22b3\",\n                            rhd: \"\\u22b3\",\n                            trianglelefteq: \"\\u22b4\",\n                            unlhd: \"\\u22b4\",\n                            trianglerighteq: \"\\u22b5\",\n                            unrhd: \"\\u22b5\",\n                            vDash: [\"\\u22a8\", { variantForm: !0 }],\n                            Vdash: \"\\u22a9\",\n                            Vvdash: \"\\u22aa\",\n                            smallsmile: [\"\\u2323\", { variantForm: !0 }],\n                            shortmid: [\"\\u2223\", { variantForm: !0 }],\n                            smallfrown: [\"\\u2322\", { variantForm: !0 }],\n                            shortparallel: [\"\\u2225\", { variantForm: !0 }],\n                            bumpeq: \"\\u224f\",\n                            between: \"\\u226c\",\n                            Bumpeq: \"\\u224e\",\n                            pitchfork: \"\\u22d4\",\n                            varpropto: [\"\\u221d\", { variantForm: !0 }],\n                            backepsilon: \"\\u220d\",\n                            blacktriangleleft: \"\\u25c2\",\n                            blacktriangleright: \"\\u25b8\",\n                            therefore: \"\\u2234\",\n                            because: \"\\u2235\",\n                            eqsim: \"\\u2242\",\n                            vartriangle: [\"\\u25b3\", { variantForm: !0 }],\n                            Join: \"\\u22c8\",\n                            nless: \"\\u226e\",\n                            ngtr: \"\\u226f\",\n                            nleq: \"\\u2270\",\n                            ngeq: \"\\u2271\",\n                            nleqslant: [\"\\u2a87\", { variantForm: !0 }],\n                            ngeqslant: [\"\\u2a88\", { variantForm: !0 }],\n                            nleqq: [\"\\u2270\", { variantForm: !0 }],\n                            ngeqq: [\"\\u2271\", { variantForm: !0 }],\n                            lneq: \"\\u2a87\",\n                            gneq: \"\\u2a88\",\n                            lneqq: \"\\u2268\",\n                            gneqq: \"\\u2269\",\n                            lvertneqq: [\"\\u2268\", { variantForm: !0 }],\n                            gvertneqq: [\"\\u2269\", { variantForm: !0 }],\n                            lnsim: \"\\u22e6\",\n                            gnsim: \"\\u22e7\",\n                            lnapprox: \"\\u2a89\",\n                            gnapprox: \"\\u2a8a\",\n                            nprec: \"\\u2280\",\n                            nsucc: \"\\u2281\",\n                            npreceq: [\"\\u22e0\", { variantForm: !0 }],\n                            nsucceq: [\"\\u22e1\", { variantForm: !0 }],\n                            precneqq: \"\\u2ab5\",\n                            succneqq: \"\\u2ab6\",\n                            precnsim: \"\\u22e8\",\n                            succnsim: \"\\u22e9\",\n                            precnapprox: \"\\u2ab9\",\n                            succnapprox: \"\\u2aba\",\n                            nsim: \"\\u2241\",\n                            ncong: \"\\u2247\",\n                            nshortmid: [\"\\u2224\", { variantForm: !0 }],\n                            nshortparallel: [\"\\u2226\", { variantForm: !0 }],\n                            nmid: \"\\u2224\",\n                            nparallel: \"\\u2226\",\n                            nvdash: \"\\u22ac\",\n                            nvDash: \"\\u22ad\",\n                            nVdash: \"\\u22ae\",\n                            nVDash: \"\\u22af\",\n                            ntriangleleft: \"\\u22ea\",\n                            ntriangleright: \"\\u22eb\",\n                            ntrianglelefteq: \"\\u22ec\",\n                            ntrianglerighteq: \"\\u22ed\",\n                            nsubseteq: \"\\u2288\",\n                            nsupseteq: \"\\u2289\",\n                            nsubseteqq: [\"\\u2288\", { variantForm: !0 }],\n                            nsupseteqq: [\"\\u2289\", { variantForm: !0 }],\n                            subsetneq: \"\\u228a\",\n                            supsetneq: \"\\u228b\",\n                            varsubsetneq: [\"\\u228a\", { variantForm: !0 }],\n                            varsupsetneq: [\"\\u228b\", { variantForm: !0 }],\n                            subsetneqq: \"\\u2acb\",\n                            supsetneqq: \"\\u2acc\",\n                            varsubsetneqq: [\"\\u2acb\", { variantForm: !0 }],\n                            varsupsetneqq: [\"\\u2acc\", { variantForm: !0 }],\n                            leftleftarrows: \"\\u21c7\",\n                            rightrightarrows: \"\\u21c9\",\n                            leftrightarrows: \"\\u21c6\",\n                            rightleftarrows: \"\\u21c4\",\n                            Lleftarrow: \"\\u21da\",\n                            Rrightarrow: \"\\u21db\",\n                            twoheadleftarrow: \"\\u219e\",\n                            twoheadrightarrow: \"\\u21a0\",\n                            leftarrowtail: \"\\u21a2\",\n                            rightarrowtail: \"\\u21a3\",\n                            looparrowleft: \"\\u21ab\",\n                            looparrowright: \"\\u21ac\",\n                            leftrightharpoons: \"\\u21cb\",\n                            rightleftharpoons: [\"\\u21cc\", { variantForm: !0 }],\n                            curvearrowleft: \"\\u21b6\",\n                            curvearrowright: \"\\u21b7\",\n                            circlearrowleft: \"\\u21ba\",\n                            circlearrowright: \"\\u21bb\",\n                            Lsh: \"\\u21b0\",\n                            Rsh: \"\\u21b1\",\n                            upuparrows: \"\\u21c8\",\n                            downdownarrows: \"\\u21ca\",\n                            upharpoonleft: \"\\u21bf\",\n                            upharpoonright: \"\\u21be\",\n                            downharpoonleft: \"\\u21c3\",\n                            restriction: \"\\u21be\",\n                            multimap: \"\\u22b8\",\n                            downharpoonright: \"\\u21c2\",\n                            leftrightsquigarrow: \"\\u21ad\",\n                            rightsquigarrow: \"\\u21dd\",\n                            leadsto: \"\\u21dd\",\n                            dashrightarrow: \"\\u21e2\",\n                            dashleftarrow: \"\\u21e0\",\n                            nleftarrow: \"\\u219a\",\n                            nrightarrow: \"\\u219b\",\n                            nLeftarrow: \"\\u21cd\",\n                            nRightarrow: \"\\u21cf\",\n                            nleftrightarrow: \"\\u21ae\",\n                            nLeftrightarrow: \"\\u21ce\",\n                        }\n                    ),\n                    new l.DelimiterMap(\n                        \"AMSsymbols-delimiter\",\n                        u.default.delimiter,\n                        {\n                            \"\\\\ulcorner\": \"\\u231c\",\n                            \"\\\\urcorner\": \"\\u231d\",\n                            \"\\\\llcorner\": \"\\u231e\",\n                            \"\\\\lrcorner\": \"\\u231f\",\n                        }\n                    ),\n                    new l.CommandMap(\n                        \"AMSsymbols-macros\",\n                        {\n                            implies: [\"Macro\", \"\\\\;\\\\Longrightarrow\\\\;\"],\n                            impliedby: [\"Macro\", \"\\\\;\\\\Longleftarrow\\\\;\"],\n                        },\n                        a.AmsMethods\n                    );\n            },\n            4387: function (t, e, r) {\n                var n =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (n =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                n.apply(this, arguments)\n                            );\n                        },\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.NEW_OPS = e.AmsMethods = void 0);\n                var s = i(r(1130)),\n                    a = i(r(5450)),\n                    l = i(r(1256)),\n                    c = r(8317),\n                    u = i(r(8417)),\n                    p = i(r(3971)),\n                    h = r(8803),\n                    f = i(r(7693)),\n                    d = r(9007);\n                function m(t) {\n                    if (!t || (t.isInferred && 0 === t.childNodes.length))\n                        return [null, null];\n                    if (t.isKind(\"msubsup\") && y(t)) return [t, null];\n                    var e = l.default.getChildAt(t, 0);\n                    return t.isInferred && e && y(e)\n                        ? (t.childNodes.splice(0, 1), [e, t])\n                        : [null, t];\n                }\n                function y(t) {\n                    var e = t.childNodes[0];\n                    return e && e.isKind(\"mi\") && \"\" === e.getText();\n                }\n                (e.AmsMethods = {}),\n                    (e.AmsMethods.AmsEqnArray = function (t, e, r, n, o, i, a) {\n                        var l = t.GetBrackets(\"\\\\begin{\" + e.getName() + \"}\"),\n                            c = f.default.EqnArray(t, e, r, n, o, i, a);\n                        return s.default.setArrayAlign(c, l);\n                    }),\n                    (e.AmsMethods.AlignAt = function (t, r, n, o) {\n                        var i,\n                            a,\n                            l = r.getName(),\n                            c = \"\",\n                            u = [];\n                        if (\n                            (o || (a = t.GetBrackets(\"\\\\begin{\" + l + \"}\")),\n                            (i = t.GetArgument(\"\\\\begin{\" + l + \"}\")).match(\n                                /[^0-9]/\n                            ))\n                        )\n                            throw new p.default(\n                                \"PositiveIntegerArg\",\n                                \"Argument to %1 must me a positive integer\",\n                                \"\\\\begin{\" + l + \"}\"\n                            );\n                        for (var h = parseInt(i, 10); h > 0; )\n                            (c += \"rl\"), u.push(\"0em 0em\"), h--;\n                        var f = u.join(\" \");\n                        if (o) return e.AmsMethods.EqnArray(t, r, n, o, c, f);\n                        var d = e.AmsMethods.EqnArray(t, r, n, o, c, f);\n                        return s.default.setArrayAlign(d, a);\n                    }),\n                    (e.AmsMethods.Multline = function (t, e, r) {\n                        t.Push(e), s.default.checkEqnEnv(t);\n                        var n = t.itemFactory.create(\"multline\", r, t.stack);\n                        return (\n                            (n.arraydef = {\n                                displaystyle: !0,\n                                rowspacing: \".5em\",\n                                columnspacing: \"100%\",\n                                width: t.options.ams.multlineWidth,\n                                side: t.options.tagSide,\n                                minlabelspacing: t.options.tagIndent,\n                                framespacing:\n                                    t.options.ams.multlineIndent + \" 0\",\n                                frame: \"\",\n                                \"data-width-includes-label\": !0,\n                            }),\n                            n\n                        );\n                    }),\n                    (e.AmsMethods.XalignAt = function (t, r, n, o) {\n                        var i = t.GetArgument(\"\\\\begin{\" + r.getName() + \"}\");\n                        if (i.match(/[^0-9]/))\n                            throw new p.default(\n                                \"PositiveIntegerArg\",\n                                \"Argument to %1 must me a positive integer\",\n                                \"\\\\begin{\" + r.getName() + \"}\"\n                            );\n                        var s = o ? \"crl\" : \"rlc\",\n                            a = o ? \"fit auto auto\" : \"auto auto fit\",\n                            l = e.AmsMethods.FlalignArray(\n                                t,\n                                r,\n                                n,\n                                o,\n                                !1,\n                                s,\n                                a,\n                                !0\n                            );\n                        return l.setProperty(\"xalignat\", 2 * parseInt(i)), l;\n                    }),\n                    (e.AmsMethods.FlalignArray = function (\n                        t,\n                        e,\n                        r,\n                        n,\n                        o,\n                        i,\n                        a,\n                        l\n                    ) {\n                        void 0 === l && (l = !1),\n                            t.Push(e),\n                            s.default.checkEqnEnv(t),\n                            (i = i\n                                .split(\"\")\n                                .join(\" \")\n                                .replace(/r/g, \"right\")\n                                .replace(/l/g, \"left\")\n                                .replace(/c/g, \"center\"));\n                        var c = t.itemFactory.create(\n                            \"flalign\",\n                            e.getName(),\n                            r,\n                            n,\n                            o,\n                            t.stack\n                        );\n                        return (\n                            (c.arraydef = {\n                                width: \"100%\",\n                                displaystyle: !0,\n                                columnalign: i,\n                                columnspacing: \"0em\",\n                                columnwidth: a,\n                                rowspacing: \"3pt\",\n                                side: t.options.tagSide,\n                                minlabelspacing: l ? \"0\" : t.options.tagIndent,\n                                \"data-width-includes-label\": !0,\n                            }),\n                            c.setProperty(\"zeroWidthLabel\", l),\n                            c\n                        );\n                    }),\n                    (e.NEW_OPS = \"ams-declare-ops\"),\n                    (e.AmsMethods.HandleDeclareOp = function (t, r) {\n                        var n = t.GetStar() ? \"*\" : \"\",\n                            o = s.default.trimSpaces(t.GetArgument(r));\n                        \"\\\\\" === o.charAt(0) && (o = o.substr(1));\n                        var i = t.GetArgument(r);\n                        t.configuration.handlers\n                            .retrieve(e.NEW_OPS)\n                            .add(\n                                o,\n                                new h.Macro(o, e.AmsMethods.Macro, [\n                                    \"\\\\operatorname\"\n                                        .concat(n, \"{\")\n                                        .concat(i, \"}\"),\n                                ])\n                            );\n                    }),\n                    (e.AmsMethods.HandleOperatorName = function (t, e) {\n                        var r = t.GetStar(),\n                            o = s.default.trimSpaces(t.GetArgument(e)),\n                            i = new u.default(\n                                o,\n                                n(n({}, t.stack.env), {\n                                    font: c.TexConstant.Variant.NORMAL,\n                                    multiLetterIdentifiers: /^[-*a-z]+/i,\n                                    operatorLetters: !0,\n                                }),\n                                t.configuration\n                            ).mml();\n                        if (\n                            (i.isKind(\"mi\") ||\n                                (i = t.create(\"node\", \"TeXAtom\", [i])),\n                            l.default.setProperties(i, {\n                                movesupsub: r,\n                                movablelimits: !0,\n                                texClass: d.TEXCLASS.OP,\n                            }),\n                            !r)\n                        ) {\n                            var a = t.GetNext(),\n                                p = t.i;\n                            \"\\\\\" === a &&\n                                ++t.i &&\n                                \"limits\" !== t.GetCS() &&\n                                (t.i = p);\n                        }\n                        t.Push(i);\n                    }),\n                    (e.AmsMethods.SideSet = function (t, e) {\n                        var r = o(m(t.ParseArg(e)), 2),\n                            n = r[0],\n                            i = r[1],\n                            a = o(m(t.ParseArg(e)), 2),\n                            c = a[0],\n                            u = a[1],\n                            p = t.ParseArg(e),\n                            h = p;\n                        n &&\n                            (i\n                                ? n.replaceChild(\n                                      t.create(\"node\", \"mphantom\", [\n                                          t.create(\n                                              \"node\",\n                                              \"mpadded\",\n                                              [s.default.copyNode(p, t)],\n                                              { width: 0 }\n                                          ),\n                                      ]),\n                                      l.default.getChildAt(n, 0)\n                                  )\n                                : ((h = t.create(\"node\", \"mmultiscripts\", [p])),\n                                  c &&\n                                      l.default.appendChildren(h, [\n                                          l.default.getChildAt(c, 1) ||\n                                              t.create(\"node\", \"none\"),\n                                          l.default.getChildAt(c, 2) ||\n                                              t.create(\"node\", \"none\"),\n                                      ]),\n                                  l.default.setProperty(\n                                      h,\n                                      \"scriptalign\",\n                                      \"left\"\n                                  ),\n                                  l.default.appendChildren(h, [\n                                      t.create(\"node\", \"mprescripts\"),\n                                      l.default.getChildAt(n, 1) ||\n                                          t.create(\"node\", \"none\"),\n                                      l.default.getChildAt(n, 2) ||\n                                          t.create(\"node\", \"none\"),\n                                  ]))),\n                            c &&\n                                h === p &&\n                                (c.replaceChild(p, l.default.getChildAt(c, 0)),\n                                (h = c));\n                        var f = t.create(\"node\", \"TeXAtom\", [], {\n                            texClass: d.TEXCLASS.OP,\n                            movesupsub: !0,\n                            movablelimits: !0,\n                        });\n                        i && (n && f.appendChild(n), f.appendChild(i)),\n                            f.appendChild(h),\n                            u && f.appendChild(u),\n                            t.Push(f);\n                    }),\n                    (e.AmsMethods.operatorLetter = function (t, e) {\n                        return (\n                            !!t.stack.env.operatorLetters &&\n                            a.default.variable(t, e)\n                        );\n                    }),\n                    (e.AmsMethods.MultiIntegral = function (t, e, r) {\n                        var n = t.GetNext();\n                        if (\"\\\\\" === n) {\n                            var o = t.i;\n                            (n = t.GetArgument(e)),\n                                (t.i = o),\n                                \"\\\\limits\" === n &&\n                                    (r =\n                                        \"\\\\idotsint\" === e\n                                            ? \"\\\\!\\\\!\\\\mathop{\\\\,\\\\,\" + r + \"}\"\n                                            : \"\\\\!\\\\!\\\\!\\\\mathop{\\\\,\\\\,\\\\,\" +\n                                              r +\n                                              \"}\");\n                        }\n                        (t.string = r + \" \" + t.string.slice(t.i)), (t.i = 0);\n                    }),\n                    (e.AmsMethods.xArrow = function (t, e, r, n, o) {\n                        var i = {\n                                width: \"+\" + s.default.Em((n + o) / 18),\n                                lspace: s.default.Em(n / 18),\n                            },\n                            a = t.GetBrackets(e),\n                            c = t.ParseArg(e),\n                            p = t.create(\"node\", \"mspace\", [], {\n                                depth: \".25em\",\n                            }),\n                            h = t.create(\n                                \"token\",\n                                \"mo\",\n                                { stretchy: !0, texClass: d.TEXCLASS.REL },\n                                String.fromCodePoint(r)\n                            );\n                        h = t.create(\"node\", \"mstyle\", [h], { scriptlevel: 0 });\n                        var f = t.create(\"node\", \"munderover\", [h]),\n                            m = t.create(\"node\", \"mpadded\", [c, p], i);\n                        if (\n                            (l.default.setAttribute(m, \"voffset\", \"-.2em\"),\n                            l.default.setAttribute(m, \"height\", \"-.2em\"),\n                            l.default.setChild(f, f.over, m),\n                            a)\n                        ) {\n                            var y = new u.default(\n                                    a,\n                                    t.stack.env,\n                                    t.configuration\n                                ).mml(),\n                                g = t.create(\"node\", \"mspace\", [], {\n                                    height: \".75em\",\n                                });\n                            (m = t.create(\"node\", \"mpadded\", [y, g], i)),\n                                l.default.setAttribute(m, \"voffset\", \".15em\"),\n                                l.default.setAttribute(m, \"depth\", \"-.15em\"),\n                                l.default.setChild(f, f.under, m);\n                        }\n                        l.default.setProperty(f, \"subsupOK\", !0), t.Push(f);\n                    }),\n                    (e.AmsMethods.HandleShove = function (t, e, r) {\n                        var n = t.stack.Top();\n                        if (\"multline\" !== n.kind)\n                            throw new p.default(\n                                \"CommandOnlyAllowedInEnv\",\n                                \"%1 only allowed in %2 environment\",\n                                t.currentCS,\n                                \"multline\"\n                            );\n                        if (n.Size())\n                            throw new p.default(\n                                \"CommandAtTheBeginingOfLine\",\n                                \"%1 must come at the beginning of the line\",\n                                t.currentCS\n                            );\n                        n.setProperty(\"shove\", r);\n                    }),\n                    (e.AmsMethods.CFrac = function (t, e) {\n                        var r = s.default.trimSpaces(t.GetBrackets(e, \"\")),\n                            n = t.GetArgument(e),\n                            o = t.GetArgument(e),\n                            i = {\n                                l: c.TexConstant.Align.LEFT,\n                                r: c.TexConstant.Align.RIGHT,\n                                \"\": \"\",\n                            },\n                            a = new u.default(\n                                \"\\\\strut\\\\textstyle{\" + n + \"}\",\n                                t.stack.env,\n                                t.configuration\n                            ).mml(),\n                            h = new u.default(\n                                \"\\\\strut\\\\textstyle{\" + o + \"}\",\n                                t.stack.env,\n                                t.configuration\n                            ).mml(),\n                            f = t.create(\"node\", \"mfrac\", [a, h]);\n                        if (null == (r = i[r]))\n                            throw new p.default(\n                                \"IllegalAlign\",\n                                \"Illegal alignment specified in %1\",\n                                t.currentCS\n                            );\n                        r &&\n                            l.default.setProperties(f, {\n                                numalign: r,\n                                denomalign: r,\n                            }),\n                            t.Push(f);\n                    }),\n                    (e.AmsMethods.Genfrac = function (t, e, r, n, o, i) {\n                        null == r && (r = t.GetDelimiterArg(e)),\n                            null == n && (n = t.GetDelimiterArg(e)),\n                            null == o && (o = t.GetArgument(e)),\n                            null == i &&\n                                (i = s.default.trimSpaces(t.GetArgument(e)));\n                        var a = t.ParseArg(e),\n                            c = t.ParseArg(e),\n                            u = t.create(\"node\", \"mfrac\", [a, c]);\n                        if (\n                            (\"\" !== o &&\n                                l.default.setAttribute(u, \"linethickness\", o),\n                            (r || n) &&\n                                (l.default.setProperty(u, \"withDelims\", !0),\n                                (u = s.default.fixedFence(\n                                    t.configuration,\n                                    r,\n                                    u,\n                                    n\n                                ))),\n                            \"\" !== i)\n                        ) {\n                            var h = parseInt(i, 10),\n                                f = [\"D\", \"T\", \"S\", \"SS\"][h];\n                            if (null == f)\n                                throw new p.default(\n                                    \"BadMathStyleFor\",\n                                    \"Bad math style for %1\",\n                                    t.currentCS\n                                );\n                            (u = t.create(\"node\", \"mstyle\", [u])),\n                                \"D\" === f\n                                    ? l.default.setProperties(u, {\n                                          displaystyle: !0,\n                                          scriptlevel: 0,\n                                      })\n                                    : l.default.setProperties(u, {\n                                          displaystyle: !1,\n                                          scriptlevel: h - 1,\n                                      });\n                        }\n                        t.Push(u);\n                    }),\n                    (e.AmsMethods.HandleTag = function (t, e) {\n                        if (!t.tags.currentTag.taggable && t.tags.env)\n                            throw new p.default(\n                                \"CommandNotAllowedInEnv\",\n                                \"%1 not allowed in %2 environment\",\n                                t.currentCS,\n                                t.tags.env\n                            );\n                        if (t.tags.currentTag.tag)\n                            throw new p.default(\n                                \"MultipleCommand\",\n                                \"Multiple %1\",\n                                t.currentCS\n                            );\n                        var r = t.GetStar(),\n                            n = s.default.trimSpaces(t.GetArgument(e));\n                        t.tags.tag(n, r);\n                    }),\n                    (e.AmsMethods.HandleNoTag = f.default.HandleNoTag),\n                    (e.AmsMethods.HandleRef = f.default.HandleRef),\n                    (e.AmsMethods.Macro = f.default.Macro),\n                    (e.AmsMethods.Accent = f.default.Accent),\n                    (e.AmsMethods.Tilde = f.default.Tilde),\n                    (e.AmsMethods.Array = f.default.Array),\n                    (e.AmsMethods.Spacer = f.default.Spacer),\n                    (e.AmsMethods.NamedOp = f.default.NamedOp),\n                    (e.AmsMethods.EqnArray = f.default.EqnArray),\n                    (e.AmsMethods.Equation = f.default.Equation);\n            },\n            1275: function (t, e, r) {\n                var n =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    o =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AutoloadConfiguration = void 0);\n                var i = r(9899),\n                    s = r(9140),\n                    a = r(8803),\n                    l = r(7741),\n                    c = r(265),\n                    u = r(7233);\n                function p(t, e, r, i) {\n                    var s, a, u, p;\n                    if (c.Package.packages.has(t.options.require.prefix + r)) {\n                        var d = t.options.autoload[r],\n                            m = n(\n                                2 === d.length && Array.isArray(d[0])\n                                    ? d\n                                    : [d, []],\n                                2\n                            ),\n                            y = m[0],\n                            g = m[1];\n                        try {\n                            for (\n                                var b = o(y), v = b.next();\n                                !v.done;\n                                v = b.next()\n                            ) {\n                                var _ = v.value;\n                                h.remove(_);\n                            }\n                        } catch (t) {\n                            s = { error: t };\n                        } finally {\n                            try {\n                                v && !v.done && (a = b.return) && a.call(b);\n                            } finally {\n                                if (s) throw s.error;\n                            }\n                        }\n                        try {\n                            for (\n                                var S = o(g), M = S.next();\n                                !M.done;\n                                M = S.next()\n                            ) {\n                                var O = M.value;\n                                f.remove(O);\n                            }\n                        } catch (t) {\n                            u = { error: t };\n                        } finally {\n                            try {\n                                M && !M.done && (p = S.return) && p.call(S);\n                            } finally {\n                                if (u) throw u.error;\n                            }\n                        }\n                        (t.string =\n                            (i ? e + \" \" : \"\\\\begin{\" + e.slice(1) + \"}\") +\n                            t.string.slice(t.i)),\n                            (t.i = 0);\n                    }\n                    (0, l.RequireLoad)(t, r);\n                }\n                var h = new s.CommandMap(\"autoload-macros\", {}, {}),\n                    f = new s.CommandMap(\"autoload-environments\", {}, {});\n                e.AutoloadConfiguration = i.Configuration.create(\"autoload\", {\n                    handler: {\n                        macro: [\"autoload-macros\"],\n                        environment: [\"autoload-environments\"],\n                    },\n                    options: {\n                        autoload: (0, u.expandable)({\n                            action: [\"toggle\", \"mathtip\", \"texttip\"],\n                            amscd: [[], [\"CD\"]],\n                            bbox: [\"bbox\"],\n                            boldsymbol: [\"boldsymbol\"],\n                            braket: [\n                                \"bra\",\n                                \"ket\",\n                                \"braket\",\n                                \"set\",\n                                \"Bra\",\n                                \"Ket\",\n                                \"Braket\",\n                                \"Set\",\n                                \"ketbra\",\n                                \"Ketbra\",\n                            ],\n                            bussproofs: [[], [\"prooftree\"]],\n                            cancel: [\n                                \"cancel\",\n                                \"bcancel\",\n                                \"xcancel\",\n                                \"cancelto\",\n                            ],\n                            color: [\n                                \"color\",\n                                \"definecolor\",\n                                \"textcolor\",\n                                \"colorbox\",\n                                \"fcolorbox\",\n                            ],\n                            enclose: [\"enclose\"],\n                            extpfeil: [\n                                \"xtwoheadrightarrow\",\n                                \"xtwoheadleftarrow\",\n                                \"xmapsto\",\n                                \"xlongequal\",\n                                \"xtofrom\",\n                                \"Newextarrow\",\n                            ],\n                            html: [\"href\", \"class\", \"style\", \"cssId\"],\n                            mhchem: [\"ce\", \"pu\"],\n                            newcommand: [\n                                \"newcommand\",\n                                \"renewcommand\",\n                                \"newenvironment\",\n                                \"renewenvironment\",\n                                \"def\",\n                                \"let\",\n                            ],\n                            unicode: [\"unicode\"],\n                            verb: [\"verb\"],\n                        }),\n                    },\n                    config: function (t, e) {\n                        var r,\n                            i,\n                            s,\n                            c,\n                            u,\n                            d,\n                            m = e.parseOptions,\n                            y = m.handlers.get(\"macro\"),\n                            g = m.handlers.get(\"environment\"),\n                            b = m.options.autoload;\n                        m.packageData.set(\"autoload\", { Autoload: p });\n                        try {\n                            for (\n                                var v = o(Object.keys(b)), _ = v.next();\n                                !_.done;\n                                _ = v.next()\n                            ) {\n                                var S = _.value,\n                                    M = b[S],\n                                    O = n(\n                                        2 === M.length && Array.isArray(M[0])\n                                            ? M\n                                            : [M, []],\n                                        2\n                                    ),\n                                    x = O[0],\n                                    E = O[1];\n                                try {\n                                    for (\n                                        var A = ((s = void 0), o(x)),\n                                            C = A.next();\n                                        !C.done;\n                                        C = A.next()\n                                    ) {\n                                        var T = C.value;\n                                        (y.lookup(T) && \"color\" !== T) ||\n                                            h.add(\n                                                T,\n                                                new a.Macro(T, p, [S, !0])\n                                            );\n                                    }\n                                } catch (t) {\n                                    s = { error: t };\n                                } finally {\n                                    try {\n                                        C &&\n                                            !C.done &&\n                                            (c = A.return) &&\n                                            c.call(A);\n                                    } finally {\n                                        if (s) throw s.error;\n                                    }\n                                }\n                                try {\n                                    for (\n                                        var N = ((u = void 0), o(E)),\n                                            w = N.next();\n                                        !w.done;\n                                        w = N.next()\n                                    ) {\n                                        var L = w.value;\n                                        g.lookup(L) ||\n                                            f.add(\n                                                L,\n                                                new a.Macro(L, p, [S, !1])\n                                            );\n                                    }\n                                } catch (t) {\n                                    u = { error: t };\n                                } finally {\n                                    try {\n                                        w &&\n                                            !w.done &&\n                                            (d = N.return) &&\n                                            d.call(N);\n                                    } finally {\n                                        if (u) throw u.error;\n                                    }\n                                }\n                            }\n                        } catch (t) {\n                            r = { error: t };\n                        } finally {\n                            try {\n                                _ && !_.done && (i = v.return) && i.call(v);\n                            } finally {\n                                if (r) throw r.error;\n                            }\n                        }\n                        m.packageData.get(\"require\") ||\n                            l.RequireConfiguration.config(t, e);\n                    },\n                    init: function (t) {\n                        t.options.require ||\n                            (0, u.defaultOptions)(\n                                t.options,\n                                l.RequireConfiguration.options\n                            );\n                    },\n                    priority: 10,\n                });\n            },\n            2942: function (t, e, r) {\n                var n,\n                    o,\n                    i =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    s =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    a =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    l =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        s(e, t, r);\n                            return a(e, t), e;\n                        },\n                    c =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    u =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.BaseConfiguration = e.BaseTags = e.Other = void 0);\n                var p = r(9899),\n                    h = r(2947),\n                    f = u(r(3971)),\n                    d = u(r(1256)),\n                    m = r(9140),\n                    y = l(r(1181)),\n                    g = r(6521);\n                r(1267);\n                var b = r(4082);\n                function v(t, e) {\n                    var r = t.stack.env.font\n                            ? { mathvariant: t.stack.env.font }\n                            : {},\n                        n = h.MapHandler.getMap(\"remap\").lookup(e),\n                        o = (0, b.getRange)(e),\n                        i = o ? o[3] : \"mo\",\n                        s = t.create(\"token\", i, r, n ? n.char : e);\n                    o[4] && s.attributes.set(\"mathvariant\", o[4]),\n                        \"mo\" === i &&\n                            (d.default.setProperty(s, \"fixStretchy\", !0),\n                            t.configuration.addNode(\"fixStretchy\", s)),\n                        t.Push(s);\n                }\n                new m.CharacterMap(\"remap\", null, {\n                    \"-\": \"\\u2212\",\n                    \"*\": \"\\u2217\",\n                    \"`\": \"\\u2018\",\n                }),\n                    (e.Other = v);\n                var _ = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return i(e, t), e;\n                })(g.AbstractTags);\n                (e.BaseTags = _),\n                    (e.BaseConfiguration = p.Configuration.create(\"base\", {\n                        handler: {\n                            character: [\n                                \"command\",\n                                \"special\",\n                                \"letter\",\n                                \"digit\",\n                            ],\n                            delimiter: [\"delimiter\"],\n                            macro: [\n                                \"delimiter\",\n                                \"macros\",\n                                \"mathchar0mi\",\n                                \"mathchar0mo\",\n                                \"mathchar7\",\n                            ],\n                            environment: [\"environment\"],\n                        },\n                        fallback: {\n                            character: v,\n                            macro: function (t, e) {\n                                throw new f.default(\n                                    \"UndefinedControlSequence\",\n                                    \"Undefined control sequence %1\",\n                                    \"\\\\\" + e\n                                );\n                            },\n                            environment: function (t, e) {\n                                throw new f.default(\n                                    \"UnknownEnv\",\n                                    \"Unknown environment '%1'\",\n                                    e\n                                );\n                            },\n                        },\n                        items:\n                            ((o = {}),\n                            (o[y.StartItem.prototype.kind] = y.StartItem),\n                            (o[y.StopItem.prototype.kind] = y.StopItem),\n                            (o[y.OpenItem.prototype.kind] = y.OpenItem),\n                            (o[y.CloseItem.prototype.kind] = y.CloseItem),\n                            (o[y.PrimeItem.prototype.kind] = y.PrimeItem),\n                            (o[y.SubsupItem.prototype.kind] = y.SubsupItem),\n                            (o[y.OverItem.prototype.kind] = y.OverItem),\n                            (o[y.LeftItem.prototype.kind] = y.LeftItem),\n                            (o[y.Middle.prototype.kind] = y.Middle),\n                            (o[y.RightItem.prototype.kind] = y.RightItem),\n                            (o[y.BeginItem.prototype.kind] = y.BeginItem),\n                            (o[y.EndItem.prototype.kind] = y.EndItem),\n                            (o[y.StyleItem.prototype.kind] = y.StyleItem),\n                            (o[y.PositionItem.prototype.kind] = y.PositionItem),\n                            (o[y.CellItem.prototype.kind] = y.CellItem),\n                            (o[y.MmlItem.prototype.kind] = y.MmlItem),\n                            (o[y.FnItem.prototype.kind] = y.FnItem),\n                            (o[y.NotItem.prototype.kind] = y.NotItem),\n                            (o[y.NonscriptItem.prototype.kind] =\n                                y.NonscriptItem),\n                            (o[y.DotsItem.prototype.kind] = y.DotsItem),\n                            (o[y.ArrayItem.prototype.kind] = y.ArrayItem),\n                            (o[y.EqnArrayItem.prototype.kind] = y.EqnArrayItem),\n                            (o[y.EquationItem.prototype.kind] = y.EquationItem),\n                            o),\n                        options: {\n                            maxMacros: 1e3,\n                            baseURL:\n                                \"undefined\" == typeof document ||\n                                0 ===\n                                    document.getElementsByTagName(\"base\").length\n                                    ? \"\"\n                                    : String(document.location).replace(\n                                          /#.*$/,\n                                          \"\"\n                                      ),\n                        },\n                        tags: { base: _ },\n                        postprocessors: [\n                            [\n                                function (t) {\n                                    var e,\n                                        r,\n                                        n = t.data;\n                                    try {\n                                        for (\n                                            var o = c(n.getList(\"nonscript\")),\n                                                i = o.next();\n                                            !i.done;\n                                            i = o.next()\n                                        ) {\n                                            var s = i.value;\n                                            if (\n                                                s.attributes.get(\n                                                    \"scriptlevel\"\n                                                ) > 0\n                                            ) {\n                                                var a = s.parent;\n                                                if (\n                                                    (a.childNodes.splice(\n                                                        a.childIndex(s),\n                                                        1\n                                                    ),\n                                                    n.removeFromList(s.kind, [\n                                                        s,\n                                                    ]),\n                                                    s.isKind(\"mrow\"))\n                                                ) {\n                                                    var l = s.childNodes[0];\n                                                    n.removeFromList(\"mstyle\", [\n                                                        l,\n                                                    ]),\n                                                        n.removeFromList(\n                                                            \"mspace\",\n                                                            l.childNodes[0]\n                                                                .childNodes\n                                                        );\n                                                }\n                                            } else\n                                                s.isKind(\"mrow\") &&\n                                                    (s.parent.replaceChild(\n                                                        s.childNodes[0],\n                                                        s\n                                                    ),\n                                                    n.removeFromList(\"mrow\", [\n                                                        s,\n                                                    ]));\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            i &&\n                                                !i.done &&\n                                                (r = o.return) &&\n                                                r.call(o);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                                },\n                                -4,\n                            ],\n                        ],\n                    }));\n            },\n            1181: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    a =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.EquationItem =\n                        e.EqnArrayItem =\n                        e.ArrayItem =\n                        e.DotsItem =\n                        e.NonscriptItem =\n                        e.NotItem =\n                        e.FnItem =\n                        e.MmlItem =\n                        e.CellItem =\n                        e.PositionItem =\n                        e.StyleItem =\n                        e.EndItem =\n                        e.BeginItem =\n                        e.RightItem =\n                        e.Middle =\n                        e.LeftItem =\n                        e.OverItem =\n                        e.SubsupItem =\n                        e.PrimeItem =\n                        e.CloseItem =\n                        e.OpenItem =\n                        e.StopItem =\n                        e.StartItem =\n                            void 0);\n                var l = r(2947),\n                    c = r(5368),\n                    u = r(9007),\n                    p = a(r(3971)),\n                    h = a(r(1130)),\n                    f = a(r(1256)),\n                    d = r(8292),\n                    m = (function (t) {\n                        function e(e, r) {\n                            var n = t.call(this, e) || this;\n                            return (n.global = r), n;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"start\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"isOpen\", {\n                                get: function () {\n                                    return !0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.checkItem = function (e) {\n                                if (e.isKind(\"stop\")) {\n                                    var r = this.toMml();\n                                    return (\n                                        this.global.isInner ||\n                                            (r =\n                                                this.factory.configuration.tags.finalize(\n                                                    r,\n                                                    this.env\n                                                )),\n                                        [[this.factory.create(\"mml\", r)], !0]\n                                    );\n                                }\n                                return t.prototype.checkItem.call(this, e);\n                            }),\n                            e\n                        );\n                    })(d.BaseItem);\n                e.StartItem = m;\n                var y = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"stop\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isClose\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.StopItem = y;\n                var g = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"open\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isOpen\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (e) {\n                            if (e.isKind(\"close\")) {\n                                var r = this.toMml(),\n                                    n = this.create(\"node\", \"TeXAtom\", [r]);\n                                return [[this.factory.create(\"mml\", n)], !0];\n                            }\n                            return t.prototype.checkItem.call(this, e);\n                        }),\n                        (e.errors = Object.assign(\n                            Object.create(d.BaseItem.errors),\n                            {\n                                stop: [\n                                    \"ExtraOpenMissingClose\",\n                                    \"Extra open brace or missing close brace\",\n                                ],\n                            }\n                        )),\n                        e\n                    );\n                })(d.BaseItem);\n                e.OpenItem = g;\n                var b = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"close\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isClose\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.CloseItem = b;\n                var v = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"prime\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (t) {\n                            var e = i(this.Peek(2), 2),\n                                r = e[0],\n                                n = e[1];\n                            return !f.default.isType(r, \"msubsup\") ||\n                                f.default.isType(r, \"msup\")\n                                ? [[this.create(\"node\", \"msup\", [r, n]), t], !0]\n                                : (f.default.setChild(r, r.sup, n),\n                                  [[r, t], !0]);\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.PrimeItem = v;\n                var _ = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"subsup\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (e) {\n                            if (e.isKind(\"open\") || e.isKind(\"left\"))\n                                return d.BaseItem.success;\n                            var r = this.First,\n                                n = this.getProperty(\"position\");\n                            if (e.isKind(\"mml\")) {\n                                if (this.getProperty(\"primes\"))\n                                    if (2 !== n)\n                                        f.default.setChild(\n                                            r,\n                                            2,\n                                            this.getProperty(\"primes\")\n                                        );\n                                    else {\n                                        f.default.setProperty(\n                                            this.getProperty(\"primes\"),\n                                            \"variantForm\",\n                                            !0\n                                        );\n                                        var o = this.create(\"node\", \"mrow\", [\n                                            this.getProperty(\"primes\"),\n                                            e.First,\n                                        ]);\n                                        e.First = o;\n                                    }\n                                return (\n                                    f.default.setChild(r, n, e.First),\n                                    null != this.getProperty(\"movesupsub\") &&\n                                        f.default.setProperty(\n                                            r,\n                                            \"movesupsub\",\n                                            this.getProperty(\"movesupsub\")\n                                        ),\n                                    [[this.factory.create(\"mml\", r)], !0]\n                                );\n                            }\n                            if (t.prototype.checkItem.call(this, e)[1]) {\n                                var a = this.getErrors([\"\", \"sub\", \"sup\"][n]);\n                                throw new (p.default.bind.apply(\n                                    p.default,\n                                    s([void 0, a[0], a[1]], i(a.splice(2)), !1)\n                                ))();\n                            }\n                            return null;\n                        }),\n                        (e.errors = Object.assign(\n                            Object.create(d.BaseItem.errors),\n                            {\n                                stop: [\n                                    \"MissingScript\",\n                                    \"Missing superscript or subscript argument\",\n                                ],\n                                sup: [\n                                    \"MissingOpenForSup\",\n                                    \"Missing open brace for superscript\",\n                                ],\n                                sub: [\n                                    \"MissingOpenForSub\",\n                                    \"Missing open brace for subscript\",\n                                ],\n                            }\n                        )),\n                        e\n                    );\n                })(d.BaseItem);\n                e.SubsupItem = _;\n                var S = (function (t) {\n                    function e(e) {\n                        var r = t.call(this, e) || this;\n                        return r.setProperty(\"name\", \"\\\\over\"), r;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"over\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isClose\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (e) {\n                            if (e.isKind(\"over\"))\n                                throw new p.default(\n                                    \"AmbiguousUseOf\",\n                                    \"Ambiguous use of %1\",\n                                    e.getName()\n                                );\n                            if (e.isClose) {\n                                var r = this.create(\"node\", \"mfrac\", [\n                                    this.getProperty(\"num\"),\n                                    this.toMml(!1),\n                                ]);\n                                return (\n                                    null != this.getProperty(\"thickness\") &&\n                                        f.default.setAttribute(\n                                            r,\n                                            \"linethickness\",\n                                            this.getProperty(\"thickness\")\n                                        ),\n                                    (this.getProperty(\"open\") ||\n                                        this.getProperty(\"close\")) &&\n                                        (f.default.setProperty(\n                                            r,\n                                            \"withDelims\",\n                                            !0\n                                        ),\n                                        (r = h.default.fixedFence(\n                                            this.factory.configuration,\n                                            this.getProperty(\"open\"),\n                                            r,\n                                            this.getProperty(\"close\")\n                                        ))),\n                                    [[this.factory.create(\"mml\", r), e], !0]\n                                );\n                            }\n                            return t.prototype.checkItem.call(this, e);\n                        }),\n                        (e.prototype.toString = function () {\n                            return (\n                                \"over[\" +\n                                this.getProperty(\"num\") +\n                                \" / \" +\n                                this.nodes.join(\"; \") +\n                                \"]\"\n                            );\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.OverItem = S;\n                var M = (function (t) {\n                    function e(e, r) {\n                        var n = t.call(this, e) || this;\n                        return n.setProperty(\"delim\", r), n;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"left\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isOpen\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (e) {\n                            if (e.isKind(\"right\"))\n                                return [\n                                    [\n                                        this.factory.create(\n                                            \"mml\",\n                                            h.default.fenced(\n                                                this.factory.configuration,\n                                                this.getProperty(\"delim\"),\n                                                this.toMml(),\n                                                e.getProperty(\"delim\"),\n                                                \"\",\n                                                e.getProperty(\"color\")\n                                            )\n                                        ),\n                                    ],\n                                    !0,\n                                ];\n                            if (e.isKind(\"middle\")) {\n                                var r = { stretchy: !0 };\n                                return (\n                                    e.getProperty(\"color\") &&\n                                        (r.mathcolor = e.getProperty(\"color\")),\n                                    this.Push(\n                                        this.create(\"node\", \"TeXAtom\", [], {\n                                            texClass: u.TEXCLASS.CLOSE,\n                                        }),\n                                        this.create(\n                                            \"token\",\n                                            \"mo\",\n                                            r,\n                                            e.getProperty(\"delim\")\n                                        ),\n                                        this.create(\"node\", \"TeXAtom\", [], {\n                                            texClass: u.TEXCLASS.OPEN,\n                                        })\n                                    ),\n                                    (this.env = {}),\n                                    [[this], !0]\n                                );\n                            }\n                            return t.prototype.checkItem.call(this, e);\n                        }),\n                        (e.errors = Object.assign(\n                            Object.create(d.BaseItem.errors),\n                            {\n                                stop: [\n                                    \"ExtraLeftMissingRight\",\n                                    \"Extra \\\\left or missing \\\\right\",\n                                ],\n                            }\n                        )),\n                        e\n                    );\n                })(d.BaseItem);\n                e.LeftItem = M;\n                var O = (function (t) {\n                    function e(e, r, n) {\n                        var o = t.call(this, e) || this;\n                        return (\n                            o.setProperty(\"delim\", r),\n                            n && o.setProperty(\"color\", n),\n                            o\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"middle\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isClose\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.Middle = O;\n                var x = (function (t) {\n                    function e(e, r, n) {\n                        var o = t.call(this, e) || this;\n                        return (\n                            o.setProperty(\"delim\", r),\n                            n && o.setProperty(\"color\", n),\n                            o\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"right\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isClose\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.RightItem = x;\n                var E = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"begin\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isOpen\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (e) {\n                            if (e.isKind(\"end\")) {\n                                if (e.getName() !== this.getName())\n                                    throw new p.default(\n                                        \"EnvBadEnd\",\n                                        \"\\\\begin{%1} ended with \\\\end{%2}\",\n                                        this.getName(),\n                                        e.getName()\n                                    );\n                                return this.getProperty(\"end\")\n                                    ? d.BaseItem.fail\n                                    : [\n                                          [\n                                              this.factory.create(\n                                                  \"mml\",\n                                                  this.toMml()\n                                              ),\n                                          ],\n                                          !0,\n                                      ];\n                            }\n                            if (e.isKind(\"stop\"))\n                                throw new p.default(\n                                    \"EnvMissingEnd\",\n                                    \"Missing \\\\end{%1}\",\n                                    this.getName()\n                                );\n                            return t.prototype.checkItem.call(this, e);\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.BeginItem = E;\n                var A = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"end\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isClose\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.EndItem = A;\n                var C = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"style\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (e) {\n                            if (!e.isClose)\n                                return t.prototype.checkItem.call(this, e);\n                            var r = this.create(\n                                \"node\",\n                                \"mstyle\",\n                                this.nodes,\n                                this.getProperty(\"styles\")\n                            );\n                            return [[this.factory.create(\"mml\", r), e], !0];\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.StyleItem = C;\n                var T = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"position\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (e) {\n                            if (e.isClose)\n                                throw new p.default(\n                                    \"MissingBoxFor\",\n                                    \"Missing box for %1\",\n                                    this.getName()\n                                );\n                            if (e.isFinal) {\n                                var r = e.toMml();\n                                switch (this.getProperty(\"move\")) {\n                                    case \"vertical\":\n                                        return (\n                                            (r = this.create(\n                                                \"node\",\n                                                \"mpadded\",\n                                                [r],\n                                                {\n                                                    height: this.getProperty(\n                                                        \"dh\"\n                                                    ),\n                                                    depth: this.getProperty(\n                                                        \"dd\"\n                                                    ),\n                                                    voffset:\n                                                        this.getProperty(\"dh\"),\n                                                }\n                                            )),\n                                            [\n                                                [this.factory.create(\"mml\", r)],\n                                                !0,\n                                            ]\n                                        );\n                                    case \"horizontal\":\n                                        return [\n                                            [\n                                                this.factory.create(\n                                                    \"mml\",\n                                                    this.getProperty(\"left\")\n                                                ),\n                                                e,\n                                                this.factory.create(\n                                                    \"mml\",\n                                                    this.getProperty(\"right\")\n                                                ),\n                                            ],\n                                            !0,\n                                        ];\n                                }\n                            }\n                            return t.prototype.checkItem.call(this, e);\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.PositionItem = T;\n                var N = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"cell\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isClose\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.CellItem = N;\n                var w = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"isFinal\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"mml\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.MmlItem = w;\n                var L = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"fn\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (e) {\n                            var r = this.First;\n                            if (r) {\n                                if (e.isOpen) return d.BaseItem.success;\n                                if (!e.isKind(\"fn\")) {\n                                    var n = e.First;\n                                    if (!e.isKind(\"mml\") || !n)\n                                        return [[r, e], !0];\n                                    if (\n                                        (f.default.isType(n, \"mstyle\") &&\n                                            n.childNodes.length &&\n                                            f.default.isType(\n                                                n.childNodes[0].childNodes[0],\n                                                \"mspace\"\n                                            )) ||\n                                        f.default.isType(n, \"mspace\")\n                                    )\n                                        return [[r, e], !0];\n                                    f.default.isEmbellished(n) &&\n                                        (n = f.default.getCoreMO(n));\n                                    var o = f.default.getForm(n);\n                                    if (\n                                        null != o &&\n                                        [0, 0, 1, 1, 0, 1, 1, 0, 0, 0][o[2]]\n                                    )\n                                        return [[r, e], !0];\n                                }\n                                var i = this.create(\n                                    \"token\",\n                                    \"mo\",\n                                    { texClass: u.TEXCLASS.NONE },\n                                    c.entities.ApplyFunction\n                                );\n                                return [[r, i, e], !0];\n                            }\n                            return t.prototype.checkItem.apply(this, arguments);\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.FnItem = L;\n                var I = (function (t) {\n                    function e() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (e.remap = l.MapHandler.getMap(\"not_remap\")), e;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"not\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (t) {\n                            var e, r, n;\n                            if (t.isKind(\"open\") || t.isKind(\"left\"))\n                                return d.BaseItem.success;\n                            if (\n                                t.isKind(\"mml\") &&\n                                (f.default.isType(t.First, \"mo\") ||\n                                    f.default.isType(t.First, \"mi\") ||\n                                    f.default.isType(t.First, \"mtext\")) &&\n                                ((e = t.First),\n                                1 === (r = f.default.getText(e)).length &&\n                                    !f.default.getProperty(e, \"movesupsub\") &&\n                                    1 === f.default.getChildren(e).length)\n                            )\n                                return (\n                                    this.remap.contains(r)\n                                        ? ((n = this.create(\n                                              \"text\",\n                                              this.remap.lookup(r).char\n                                          )),\n                                          f.default.setChild(e, 0, n))\n                                        : ((n = this.create(\"text\", \"\\u0338\")),\n                                          f.default.appendChildren(e, [n])),\n                                    [[t], !0]\n                                );\n                            n = this.create(\"text\", \"\\u29f8\");\n                            var o = this.create(\"node\", \"mtext\", [], {}, n),\n                                i = this.create(\"node\", \"mpadded\", [o], {\n                                    width: 0,\n                                });\n                            return [\n                                [\n                                    (e = this.create(\"node\", \"TeXAtom\", [i], {\n                                        texClass: u.TEXCLASS.REL,\n                                    })),\n                                    t,\n                                ],\n                                !0,\n                            ];\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.NotItem = I;\n                var P = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"nonscript\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (t) {\n                            if (t.isKind(\"mml\") && 1 === t.Size()) {\n                                var e = t.First;\n                                if (\n                                    (e.isKind(\"mstyle\") &&\n                                        e.notParent &&\n                                        (e = f.default.getChildren(\n                                            f.default.getChildren(e)[0]\n                                        )[0]),\n                                    e.isKind(\"mspace\"))\n                                ) {\n                                    if (e !== t.First) {\n                                        var r = this.create(\"node\", \"mrow\", [\n                                            t.Pop(),\n                                        ]);\n                                        t.Push(r);\n                                    }\n                                    this.factory.configuration.addNode(\n                                        \"nonscript\",\n                                        t.First\n                                    );\n                                }\n                            }\n                            return [[t], !0];\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.NonscriptItem = P;\n                var R = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"dots\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (t) {\n                            if (t.isKind(\"open\") || t.isKind(\"left\"))\n                                return d.BaseItem.success;\n                            var e = this.getProperty(\"ldots\"),\n                                r = t.First;\n                            if (t.isKind(\"mml\") && f.default.isEmbellished(r)) {\n                                var n = f.default.getTexClass(\n                                    f.default.getCoreMO(r)\n                                );\n                                (n !== u.TEXCLASS.BIN &&\n                                    n !== u.TEXCLASS.REL) ||\n                                    (e = this.getProperty(\"cdots\"));\n                            }\n                            return [[e, t], !0];\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.DotsItem = R;\n                var k = (function (t) {\n                    function e() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (\n                            (e.table = []),\n                            (e.row = []),\n                            (e.frame = []),\n                            (e.hfill = []),\n                            (e.arraydef = {}),\n                            (e.dashed = !1),\n                            e\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"array\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isOpen\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"copyEnv\", {\n                            get: function () {\n                                return !1;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (e) {\n                            if (e.isClose && !e.isKind(\"over\")) {\n                                if (e.getProperty(\"isEntry\"))\n                                    return (\n                                        this.EndEntry(),\n                                        this.clearEnv(),\n                                        d.BaseItem.fail\n                                    );\n                                if (e.getProperty(\"isCR\"))\n                                    return (\n                                        this.EndEntry(),\n                                        this.EndRow(),\n                                        this.clearEnv(),\n                                        d.BaseItem.fail\n                                    );\n                                this.EndTable(), this.clearEnv();\n                                var r = this.factory.create(\n                                    \"mml\",\n                                    this.createMml()\n                                );\n                                if (this.getProperty(\"requireClose\")) {\n                                    if (e.isKind(\"close\")) return [[r], !0];\n                                    throw new p.default(\n                                        \"MissingCloseBrace\",\n                                        \"Missing close brace\"\n                                    );\n                                }\n                                return [[r, e], !0];\n                            }\n                            return t.prototype.checkItem.call(this, e);\n                        }),\n                        (e.prototype.createMml = function () {\n                            var t = this.arraydef.scriptlevel;\n                            delete this.arraydef.scriptlevel;\n                            var e = this.create(\n                                \"node\",\n                                \"mtable\",\n                                this.table,\n                                this.arraydef\n                            );\n                            return (\n                                t && e.setProperty(\"scriptlevel\", t),\n                                4 === this.frame.length\n                                    ? f.default.setAttribute(\n                                          e,\n                                          \"frame\",\n                                          this.dashed ? \"dashed\" : \"solid\"\n                                      )\n                                    : this.frame.length &&\n                                      (this.arraydef.rowlines &&\n                                          (this.arraydef.rowlines =\n                                              this.arraydef.rowlines.replace(\n                                                  /none( none)+$/,\n                                                  \"none\"\n                                              )),\n                                      f.default.setAttribute(e, \"frame\", \"\"),\n                                      (e = this.create(\n                                          \"node\",\n                                          \"menclose\",\n                                          [e],\n                                          { notation: this.frame.join(\" \") }\n                                      )),\n                                      (\"none\" ===\n                                          (this.arraydef.columnlines ||\n                                              \"none\") &&\n                                          \"none\" ===\n                                              (this.arraydef.rowlines ||\n                                                  \"none\")) ||\n                                          f.default.setAttribute(\n                                              e,\n                                              \"data-padding\",\n                                              0\n                                          )),\n                                (this.getProperty(\"open\") ||\n                                    this.getProperty(\"close\")) &&\n                                    (e = h.default.fenced(\n                                        this.factory.configuration,\n                                        this.getProperty(\"open\"),\n                                        e,\n                                        this.getProperty(\"close\")\n                                    )),\n                                e\n                            );\n                        }),\n                        (e.prototype.EndEntry = function () {\n                            var t = this.create(\"node\", \"mtd\", this.nodes);\n                            this.hfill.length &&\n                                (0 === this.hfill[0] &&\n                                    f.default.setAttribute(\n                                        t,\n                                        \"columnalign\",\n                                        \"right\"\n                                    ),\n                                this.hfill[this.hfill.length - 1] ===\n                                    this.Size() &&\n                                    f.default.setAttribute(\n                                        t,\n                                        \"columnalign\",\n                                        f.default.getAttribute(t, \"columnalign\")\n                                            ? \"center\"\n                                            : \"left\"\n                                    )),\n                                this.row.push(t),\n                                this.Clear(),\n                                (this.hfill = []);\n                        }),\n                        (e.prototype.EndRow = function () {\n                            var t;\n                            this.getProperty(\"isNumbered\") &&\n                            3 === this.row.length\n                                ? (this.row.unshift(this.row.pop()),\n                                  (t = this.create(\n                                      \"node\",\n                                      \"mlabeledtr\",\n                                      this.row\n                                  )))\n                                : (t = this.create(\"node\", \"mtr\", this.row)),\n                                this.table.push(t),\n                                (this.row = []);\n                        }),\n                        (e.prototype.EndTable = function () {\n                            (this.Size() || this.row.length) &&\n                                (this.EndEntry(), this.EndRow()),\n                                this.checkLines();\n                        }),\n                        (e.prototype.checkLines = function () {\n                            if (this.arraydef.rowlines) {\n                                var t = this.arraydef.rowlines.split(/ /);\n                                t.length === this.table.length\n                                    ? (this.frame.push(\"bottom\"),\n                                      t.pop(),\n                                      (this.arraydef.rowlines = t.join(\" \")))\n                                    : t.length < this.table.length - 1 &&\n                                      (this.arraydef.rowlines += \" none\");\n                            }\n                            if (this.getProperty(\"rowspacing\")) {\n                                for (\n                                    var e = this.arraydef.rowspacing.split(/ /);\n                                    e.length < this.table.length;\n\n                                )\n                                    e.push(\n                                        this.getProperty(\"rowspacing\") + \"em\"\n                                    );\n                                this.arraydef.rowspacing = e.join(\" \");\n                            }\n                        }),\n                        (e.prototype.addRowSpacing = function (t) {\n                            if (this.arraydef.rowspacing) {\n                                var e = this.arraydef.rowspacing.split(/ /);\n                                if (!this.getProperty(\"rowspacing\")) {\n                                    var r = h.default.dimen2em(e[0]);\n                                    this.setProperty(\"rowspacing\", r);\n                                }\n                                for (\n                                    var n = this.getProperty(\"rowspacing\");\n                                    e.length < this.table.length;\n\n                                )\n                                    e.push(h.default.Em(n));\n                                (e[this.table.length - 1] = h.default.Em(\n                                    Math.max(0, n + h.default.dimen2em(t))\n                                )),\n                                    (this.arraydef.rowspacing = e.join(\" \"));\n                            }\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.ArrayItem = k;\n                var j = (function (t) {\n                    function e(e) {\n                        for (var r = [], n = 1; n < arguments.length; n++)\n                            r[n - 1] = arguments[n];\n                        var o = t.call(this, e) || this;\n                        return (\n                            (o.maxrow = 0),\n                            o.factory.configuration.tags.start(\n                                r[0],\n                                r[2],\n                                r[1]\n                            ),\n                            o\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"eqnarray\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.EndEntry = function () {\n                            this.row.length &&\n                                h.default.fixInitialMO(\n                                    this.factory.configuration,\n                                    this.nodes\n                                );\n                            var t = this.create(\"node\", \"mtd\", this.nodes);\n                            this.row.push(t), this.Clear();\n                        }),\n                        (e.prototype.EndRow = function () {\n                            this.row.length > this.maxrow &&\n                                (this.maxrow = this.row.length);\n                            var t = \"mtr\",\n                                e = this.factory.configuration.tags.getTag();\n                            e &&\n                                ((this.row = [e].concat(this.row)),\n                                (t = \"mlabeledtr\")),\n                                this.factory.configuration.tags.clearTag();\n                            var r = this.create(\"node\", t, this.row);\n                            this.table.push(r), (this.row = []);\n                        }),\n                        (e.prototype.EndTable = function () {\n                            t.prototype.EndTable.call(this),\n                                this.factory.configuration.tags.end(),\n                                this.extendArray(\"columnalign\", this.maxrow),\n                                this.extendArray(\"columnwidth\", this.maxrow),\n                                this.extendArray(\n                                    \"columnspacing\",\n                                    this.maxrow - 1\n                                );\n                        }),\n                        (e.prototype.extendArray = function (t, e) {\n                            if (this.arraydef[t]) {\n                                var r = this.arraydef[t].split(/ /),\n                                    n = s([], i(r), !1);\n                                if (n.length > 1) {\n                                    for (; n.length < e; )\n                                        n.push.apply(n, s([], i(r), !1));\n                                    this.arraydef[t] = n.slice(0, e).join(\" \");\n                                }\n                            }\n                        }),\n                        e\n                    );\n                })(k);\n                e.EqnArrayItem = j;\n                var B = (function (t) {\n                    function e(e) {\n                        for (var r = [], n = 1; n < arguments.length; n++)\n                            r[n - 1] = arguments[n];\n                        var o = t.call(this, e) || this;\n                        return (\n                            o.factory.configuration.tags.start(\n                                \"equation\",\n                                !0,\n                                r[0]\n                            ),\n                            o\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"kind\", {\n                            get: function () {\n                                return \"equation\";\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"isOpen\", {\n                            get: function () {\n                                return !0;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.checkItem = function (e) {\n                            if (e.isKind(\"end\")) {\n                                var r = this.toMml(),\n                                    n =\n                                        this.factory.configuration.tags.getTag();\n                                return (\n                                    this.factory.configuration.tags.end(),\n                                    [\n                                        [\n                                            n\n                                                ? this.factory.configuration.tags.enTag(\n                                                      r,\n                                                      n\n                                                  )\n                                                : r,\n                                            e,\n                                        ],\n                                        !0,\n                                    ]\n                                );\n                            }\n                            if (e.isKind(\"stop\"))\n                                throw new p.default(\n                                    \"EnvMissingEnd\",\n                                    \"Missing \\\\end{%1}\",\n                                    this.getName()\n                                );\n                            return t.prototype.checkItem.call(this, e);\n                        }),\n                        e\n                    );\n                })(d.BaseItem);\n                e.EquationItem = B;\n            },\n            1267: function (t, e, r) {\n                var n =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    o =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    i =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        n(e, t, r);\n                            return o(e, t), e;\n                        },\n                    s =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var a = i(r(9140)),\n                    l = r(8317),\n                    c = s(r(7693)),\n                    u = s(r(5450)),\n                    p = s(r(1130)),\n                    h = r(9007),\n                    f = r(6010);\n                new a.RegExpMap(\"letter\", u.default.variable, /[a-z]/i),\n                    new a.RegExpMap(\"digit\", u.default.digit, /[0-9.,]/),\n                    new a.RegExpMap(\n                        \"command\",\n                        u.default.controlSequence,\n                        /^\\\\/\n                    ),\n                    new a.MacroMap(\n                        \"special\",\n                        {\n                            \"{\": \"Open\",\n                            \"}\": \"Close\",\n                            \"~\": \"Tilde\",\n                            \"^\": \"Superscript\",\n                            _: \"Subscript\",\n                            \" \": \"Space\",\n                            \"\\t\": \"Space\",\n                            \"\\r\": \"Space\",\n                            \"\\n\": \"Space\",\n                            \"'\": \"Prime\",\n                            \"%\": \"Comment\",\n                            \"&\": \"Entry\",\n                            \"#\": \"Hash\",\n                            \"\\xa0\": \"Space\",\n                            \"\\u2019\": \"Prime\",\n                        },\n                        c.default\n                    ),\n                    new a.CharacterMap(\"mathchar0mi\", u.default.mathchar0mi, {\n                        alpha: \"\\u03b1\",\n                        beta: \"\\u03b2\",\n                        gamma: \"\\u03b3\",\n                        delta: \"\\u03b4\",\n                        epsilon: \"\\u03f5\",\n                        zeta: \"\\u03b6\",\n                        eta: \"\\u03b7\",\n                        theta: \"\\u03b8\",\n                        iota: \"\\u03b9\",\n                        kappa: \"\\u03ba\",\n                        lambda: \"\\u03bb\",\n                        mu: \"\\u03bc\",\n                        nu: \"\\u03bd\",\n                        xi: \"\\u03be\",\n                        omicron: \"\\u03bf\",\n                        pi: \"\\u03c0\",\n                        rho: \"\\u03c1\",\n                        sigma: \"\\u03c3\",\n                        tau: \"\\u03c4\",\n                        upsilon: \"\\u03c5\",\n                        phi: \"\\u03d5\",\n                        chi: \"\\u03c7\",\n                        psi: \"\\u03c8\",\n                        omega: \"\\u03c9\",\n                        varepsilon: \"\\u03b5\",\n                        vartheta: \"\\u03d1\",\n                        varpi: \"\\u03d6\",\n                        varrho: \"\\u03f1\",\n                        varsigma: \"\\u03c2\",\n                        varphi: \"\\u03c6\",\n                        S: [\n                            \"\\xa7\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        aleph: [\n                            \"\\u2135\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        hbar: [\"\\u210f\", { variantForm: !0 }],\n                        imath: \"\\u0131\",\n                        jmath: \"\\u0237\",\n                        ell: \"\\u2113\",\n                        wp: [\n                            \"\\u2118\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        Re: [\n                            \"\\u211c\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        Im: [\n                            \"\\u2111\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        partial: [\n                            \"\\u2202\",\n                            { mathvariant: l.TexConstant.Variant.ITALIC },\n                        ],\n                        infty: [\n                            \"\\u221e\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        prime: [\"\\u2032\", { variantForm: !0 }],\n                        emptyset: [\n                            \"\\u2205\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        nabla: [\n                            \"\\u2207\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        top: [\n                            \"\\u22a4\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        bot: [\n                            \"\\u22a5\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        angle: [\n                            \"\\u2220\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        triangle: [\n                            \"\\u25b3\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        backslash: [\n                            \"\\u2216\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        forall: [\n                            \"\\u2200\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        exists: [\n                            \"\\u2203\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        neg: [\n                            \"\\xac\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        lnot: [\n                            \"\\xac\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        flat: [\n                            \"\\u266d\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        natural: [\n                            \"\\u266e\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        sharp: [\n                            \"\\u266f\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        clubsuit: [\n                            \"\\u2663\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        diamondsuit: [\n                            \"\\u2662\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        heartsuit: [\n                            \"\\u2661\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                        spadesuit: [\n                            \"\\u2660\",\n                            { mathvariant: l.TexConstant.Variant.NORMAL },\n                        ],\n                    }),\n                    new a.CharacterMap(\"mathchar0mo\", u.default.mathchar0mo, {\n                        surd: \"\\u221a\",\n                        coprod: [\n                            \"\\u2210\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        bigvee: [\n                            \"\\u22c1\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        bigwedge: [\n                            \"\\u22c0\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        biguplus: [\n                            \"\\u2a04\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        bigcap: [\n                            \"\\u22c2\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        bigcup: [\n                            \"\\u22c3\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        int: [\"\\u222b\", { texClass: h.TEXCLASS.OP }],\n                        intop: [\n                            \"\\u222b\",\n                            {\n                                texClass: h.TEXCLASS.OP,\n                                movesupsub: !0,\n                                movablelimits: !0,\n                            },\n                        ],\n                        iint: [\"\\u222c\", { texClass: h.TEXCLASS.OP }],\n                        iiint: [\"\\u222d\", { texClass: h.TEXCLASS.OP }],\n                        prod: [\n                            \"\\u220f\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        sum: [\n                            \"\\u2211\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        bigotimes: [\n                            \"\\u2a02\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        bigoplus: [\n                            \"\\u2a01\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        bigodot: [\n                            \"\\u2a00\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        oint: [\"\\u222e\", { texClass: h.TEXCLASS.OP }],\n                        bigsqcup: [\n                            \"\\u2a06\",\n                            { texClass: h.TEXCLASS.OP, movesupsub: !0 },\n                        ],\n                        smallint: [\"\\u222b\", { largeop: !1 }],\n                        triangleleft: \"\\u25c3\",\n                        triangleright: \"\\u25b9\",\n                        bigtriangleup: \"\\u25b3\",\n                        bigtriangledown: \"\\u25bd\",\n                        wedge: \"\\u2227\",\n                        land: \"\\u2227\",\n                        vee: \"\\u2228\",\n                        lor: \"\\u2228\",\n                        cap: \"\\u2229\",\n                        cup: \"\\u222a\",\n                        ddagger: \"\\u2021\",\n                        dagger: \"\\u2020\",\n                        sqcap: \"\\u2293\",\n                        sqcup: \"\\u2294\",\n                        uplus: \"\\u228e\",\n                        amalg: \"\\u2a3f\",\n                        diamond: \"\\u22c4\",\n                        bullet: \"\\u2219\",\n                        wr: \"\\u2240\",\n                        div: \"\\xf7\",\n                        divsymbol: \"\\xf7\",\n                        odot: [\"\\u2299\", { largeop: !1 }],\n                        oslash: [\"\\u2298\", { largeop: !1 }],\n                        otimes: [\"\\u2297\", { largeop: !1 }],\n                        ominus: [\"\\u2296\", { largeop: !1 }],\n                        oplus: [\"\\u2295\", { largeop: !1 }],\n                        mp: \"\\u2213\",\n                        pm: \"\\xb1\",\n                        circ: \"\\u2218\",\n                        bigcirc: \"\\u25ef\",\n                        setminus: \"\\u2216\",\n                        cdot: \"\\u22c5\",\n                        ast: \"\\u2217\",\n                        times: \"\\xd7\",\n                        star: \"\\u22c6\",\n                        propto: \"\\u221d\",\n                        sqsubseteq: \"\\u2291\",\n                        sqsupseteq: \"\\u2292\",\n                        parallel: \"\\u2225\",\n                        mid: \"\\u2223\",\n                        dashv: \"\\u22a3\",\n                        vdash: \"\\u22a2\",\n                        leq: \"\\u2264\",\n                        le: \"\\u2264\",\n                        geq: \"\\u2265\",\n                        ge: \"\\u2265\",\n                        lt: \"<\",\n                        gt: \">\",\n                        succ: \"\\u227b\",\n                        prec: \"\\u227a\",\n                        approx: \"\\u2248\",\n                        succeq: \"\\u2ab0\",\n                        preceq: \"\\u2aaf\",\n                        supset: \"\\u2283\",\n                        subset: \"\\u2282\",\n                        supseteq: \"\\u2287\",\n                        subseteq: \"\\u2286\",\n                        in: \"\\u2208\",\n                        ni: \"\\u220b\",\n                        notin: \"\\u2209\",\n                        owns: \"\\u220b\",\n                        gg: \"\\u226b\",\n                        ll: \"\\u226a\",\n                        sim: \"\\u223c\",\n                        simeq: \"\\u2243\",\n                        perp: \"\\u22a5\",\n                        equiv: \"\\u2261\",\n                        asymp: \"\\u224d\",\n                        smile: \"\\u2323\",\n                        frown: \"\\u2322\",\n                        ne: \"\\u2260\",\n                        neq: \"\\u2260\",\n                        cong: \"\\u2245\",\n                        doteq: \"\\u2250\",\n                        bowtie: \"\\u22c8\",\n                        models: \"\\u22a8\",\n                        notChar: \"\\u29f8\",\n                        Leftrightarrow: \"\\u21d4\",\n                        Leftarrow: \"\\u21d0\",\n                        Rightarrow: \"\\u21d2\",\n                        leftrightarrow: \"\\u2194\",\n                        leftarrow: \"\\u2190\",\n                        gets: \"\\u2190\",\n                        rightarrow: \"\\u2192\",\n                        to: [\"\\u2192\", { accent: !1 }],\n                        mapsto: \"\\u21a6\",\n                        leftharpoonup: \"\\u21bc\",\n                        leftharpoondown: \"\\u21bd\",\n                        rightharpoonup: \"\\u21c0\",\n                        rightharpoondown: \"\\u21c1\",\n                        nearrow: \"\\u2197\",\n                        searrow: \"\\u2198\",\n                        nwarrow: \"\\u2196\",\n                        swarrow: \"\\u2199\",\n                        rightleftharpoons: \"\\u21cc\",\n                        hookrightarrow: \"\\u21aa\",\n                        hookleftarrow: \"\\u21a9\",\n                        longleftarrow: \"\\u27f5\",\n                        Longleftarrow: \"\\u27f8\",\n                        longrightarrow: \"\\u27f6\",\n                        Longrightarrow: \"\\u27f9\",\n                        Longleftrightarrow: \"\\u27fa\",\n                        longleftrightarrow: \"\\u27f7\",\n                        longmapsto: \"\\u27fc\",\n                        ldots: \"\\u2026\",\n                        cdots: \"\\u22ef\",\n                        vdots: \"\\u22ee\",\n                        ddots: \"\\u22f1\",\n                        dotsc: \"\\u2026\",\n                        dotsb: \"\\u22ef\",\n                        dotsm: \"\\u22ef\",\n                        dotsi: \"\\u22ef\",\n                        dotso: \"\\u2026\",\n                        ldotp: [\".\", { texClass: h.TEXCLASS.PUNCT }],\n                        cdotp: [\"\\u22c5\", { texClass: h.TEXCLASS.PUNCT }],\n                        colon: [\":\", { texClass: h.TEXCLASS.PUNCT }],\n                    }),\n                    new a.CharacterMap(\"mathchar7\", u.default.mathchar7, {\n                        Gamma: \"\\u0393\",\n                        Delta: \"\\u0394\",\n                        Theta: \"\\u0398\",\n                        Lambda: \"\\u039b\",\n                        Xi: \"\\u039e\",\n                        Pi: \"\\u03a0\",\n                        Sigma: \"\\u03a3\",\n                        Upsilon: \"\\u03a5\",\n                        Phi: \"\\u03a6\",\n                        Psi: \"\\u03a8\",\n                        Omega: \"\\u03a9\",\n                        _: \"_\",\n                        \"#\": \"#\",\n                        $: \"$\",\n                        \"%\": \"%\",\n                        \"&\": \"&\",\n                        And: \"&\",\n                    }),\n                    new a.DelimiterMap(\"delimiter\", u.default.delimiter, {\n                        \"(\": \"(\",\n                        \")\": \")\",\n                        \"[\": \"[\",\n                        \"]\": \"]\",\n                        \"<\": \"\\u27e8\",\n                        \">\": \"\\u27e9\",\n                        \"\\\\lt\": \"\\u27e8\",\n                        \"\\\\gt\": \"\\u27e9\",\n                        \"/\": \"/\",\n                        \"|\": [\"|\", { texClass: h.TEXCLASS.ORD }],\n                        \".\": \"\",\n                        \"\\\\\\\\\": \"\\\\\",\n                        \"\\\\lmoustache\": \"\\u23b0\",\n                        \"\\\\rmoustache\": \"\\u23b1\",\n                        \"\\\\lgroup\": \"\\u27ee\",\n                        \"\\\\rgroup\": \"\\u27ef\",\n                        \"\\\\arrowvert\": \"\\u23d0\",\n                        \"\\\\Arrowvert\": \"\\u2016\",\n                        \"\\\\bracevert\": \"\\u23aa\",\n                        \"\\\\Vert\": [\"\\u2016\", { texClass: h.TEXCLASS.ORD }],\n                        \"\\\\|\": [\"\\u2016\", { texClass: h.TEXCLASS.ORD }],\n                        \"\\\\vert\": [\"|\", { texClass: h.TEXCLASS.ORD }],\n                        \"\\\\uparrow\": \"\\u2191\",\n                        \"\\\\downarrow\": \"\\u2193\",\n                        \"\\\\updownarrow\": \"\\u2195\",\n                        \"\\\\Uparrow\": \"\\u21d1\",\n                        \"\\\\Downarrow\": \"\\u21d3\",\n                        \"\\\\Updownarrow\": \"\\u21d5\",\n                        \"\\\\backslash\": \"\\\\\",\n                        \"\\\\rangle\": \"\\u27e9\",\n                        \"\\\\langle\": \"\\u27e8\",\n                        \"\\\\rbrace\": \"}\",\n                        \"\\\\lbrace\": \"{\",\n                        \"\\\\}\": \"}\",\n                        \"\\\\{\": \"{\",\n                        \"\\\\rceil\": \"\\u2309\",\n                        \"\\\\lceil\": \"\\u2308\",\n                        \"\\\\rfloor\": \"\\u230b\",\n                        \"\\\\lfloor\": \"\\u230a\",\n                        \"\\\\lbrack\": \"[\",\n                        \"\\\\rbrack\": \"]\",\n                    }),\n                    new a.CommandMap(\n                        \"macros\",\n                        {\n                            displaystyle: [\"SetStyle\", \"D\", !0, 0],\n                            textstyle: [\"SetStyle\", \"T\", !1, 0],\n                            scriptstyle: [\"SetStyle\", \"S\", !1, 1],\n                            scriptscriptstyle: [\"SetStyle\", \"SS\", !1, 2],\n                            rm: [\"SetFont\", l.TexConstant.Variant.NORMAL],\n                            mit: [\"SetFont\", l.TexConstant.Variant.ITALIC],\n                            oldstyle: [\n                                \"SetFont\",\n                                l.TexConstant.Variant.OLDSTYLE,\n                            ],\n                            cal: [\n                                \"SetFont\",\n                                l.TexConstant.Variant.CALLIGRAPHIC,\n                            ],\n                            it: [\"SetFont\", l.TexConstant.Variant.MATHITALIC],\n                            bf: [\"SetFont\", l.TexConstant.Variant.BOLD],\n                            bbFont: [\n                                \"SetFont\",\n                                l.TexConstant.Variant.DOUBLESTRUCK,\n                            ],\n                            scr: [\"SetFont\", l.TexConstant.Variant.SCRIPT],\n                            frak: [\"SetFont\", l.TexConstant.Variant.FRAKTUR],\n                            sf: [\"SetFont\", l.TexConstant.Variant.SANSSERIF],\n                            tt: [\"SetFont\", l.TexConstant.Variant.MONOSPACE],\n                            mathrm: [\"MathFont\", l.TexConstant.Variant.NORMAL],\n                            mathup: [\"MathFont\", l.TexConstant.Variant.NORMAL],\n                            mathnormal: [\"MathFont\", \"\"],\n                            mathbf: [\"MathFont\", l.TexConstant.Variant.BOLD],\n                            mathbfup: [\"MathFont\", l.TexConstant.Variant.BOLD],\n                            mathit: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.MATHITALIC,\n                            ],\n                            mathbfit: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDITALIC,\n                            ],\n                            mathbb: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.DOUBLESTRUCK,\n                            ],\n                            Bbb: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.DOUBLESTRUCK,\n                            ],\n                            mathfrak: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.FRAKTUR,\n                            ],\n                            mathbffrak: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDFRAKTUR,\n                            ],\n                            mathscr: [\"MathFont\", l.TexConstant.Variant.SCRIPT],\n                            mathbfscr: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDSCRIPT,\n                            ],\n                            mathsf: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.SANSSERIF,\n                            ],\n                            mathsfup: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.SANSSERIF,\n                            ],\n                            mathbfsf: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDSANSSERIF,\n                            ],\n                            mathbfsfup: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDSANSSERIF,\n                            ],\n                            mathsfit: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.SANSSERIFITALIC,\n                            ],\n                            mathbfsfit: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.SANSSERIFBOLDITALIC,\n                            ],\n                            mathtt: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.MONOSPACE,\n                            ],\n                            mathcal: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.CALLIGRAPHIC,\n                            ],\n                            mathbfcal: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDCALLIGRAPHIC,\n                            ],\n                            symrm: [\"MathFont\", l.TexConstant.Variant.NORMAL],\n                            symup: [\"MathFont\", l.TexConstant.Variant.NORMAL],\n                            symnormal: [\"MathFont\", \"\"],\n                            symbf: [\"MathFont\", l.TexConstant.Variant.BOLD],\n                            symbfup: [\"MathFont\", l.TexConstant.Variant.BOLD],\n                            symit: [\"MathFont\", l.TexConstant.Variant.ITALIC],\n                            symbfit: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDITALIC,\n                            ],\n                            symbb: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.DOUBLESTRUCK,\n                            ],\n                            symfrak: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.FRAKTUR,\n                            ],\n                            symbffrak: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDFRAKTUR,\n                            ],\n                            symscr: [\"MathFont\", l.TexConstant.Variant.SCRIPT],\n                            symbfscr: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDSCRIPT,\n                            ],\n                            symsf: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.SANSSERIF,\n                            ],\n                            symsfup: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.SANSSERIF,\n                            ],\n                            symbfsf: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDSANSSERIF,\n                            ],\n                            symbfsfup: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDSANSSERIF,\n                            ],\n                            symsfit: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.SANSSERIFITALIC,\n                            ],\n                            symbfsfit: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.SANSSERIFBOLDITALIC,\n                            ],\n                            symtt: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.MONOSPACE,\n                            ],\n                            symcal: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.CALLIGRAPHIC,\n                            ],\n                            symbfcal: [\n                                \"MathFont\",\n                                l.TexConstant.Variant.BOLDCALLIGRAPHIC,\n                            ],\n                            textrm: [\n                                \"HBox\",\n                                null,\n                                l.TexConstant.Variant.NORMAL,\n                            ],\n                            textup: [\n                                \"HBox\",\n                                null,\n                                l.TexConstant.Variant.NORMAL,\n                            ],\n                            textnormal: [\"HBox\"],\n                            textit: [\n                                \"HBox\",\n                                null,\n                                l.TexConstant.Variant.ITALIC,\n                            ],\n                            textbf: [\"HBox\", null, l.TexConstant.Variant.BOLD],\n                            textsf: [\n                                \"HBox\",\n                                null,\n                                l.TexConstant.Variant.SANSSERIF,\n                            ],\n                            texttt: [\n                                \"HBox\",\n                                null,\n                                l.TexConstant.Variant.MONOSPACE,\n                            ],\n                            tiny: [\"SetSize\", 0.5],\n                            Tiny: [\"SetSize\", 0.6],\n                            scriptsize: [\"SetSize\", 0.7],\n                            small: [\"SetSize\", 0.85],\n                            normalsize: [\"SetSize\", 1],\n                            large: [\"SetSize\", 1.2],\n                            Large: [\"SetSize\", 1.44],\n                            LARGE: [\"SetSize\", 1.73],\n                            huge: [\"SetSize\", 2.07],\n                            Huge: [\"SetSize\", 2.49],\n                            arcsin: \"NamedFn\",\n                            arccos: \"NamedFn\",\n                            arctan: \"NamedFn\",\n                            arg: \"NamedFn\",\n                            cos: \"NamedFn\",\n                            cosh: \"NamedFn\",\n                            cot: \"NamedFn\",\n                            coth: \"NamedFn\",\n                            csc: \"NamedFn\",\n                            deg: \"NamedFn\",\n                            det: \"NamedOp\",\n                            dim: \"NamedFn\",\n                            exp: \"NamedFn\",\n                            gcd: \"NamedOp\",\n                            hom: \"NamedFn\",\n                            inf: \"NamedOp\",\n                            ker: \"NamedFn\",\n                            lg: \"NamedFn\",\n                            lim: \"NamedOp\",\n                            liminf: [\"NamedOp\", \"lim&thinsp;inf\"],\n                            limsup: [\"NamedOp\", \"lim&thinsp;sup\"],\n                            ln: \"NamedFn\",\n                            log: \"NamedFn\",\n                            max: \"NamedOp\",\n                            min: \"NamedOp\",\n                            Pr: \"NamedOp\",\n                            sec: \"NamedFn\",\n                            sin: \"NamedFn\",\n                            sinh: \"NamedFn\",\n                            sup: \"NamedOp\",\n                            tan: \"NamedFn\",\n                            tanh: \"NamedFn\",\n                            limits: [\"Limits\", 1],\n                            nolimits: [\"Limits\", 0],\n                            overline: [\"UnderOver\", \"2015\"],\n                            underline: [\"UnderOver\", \"2015\"],\n                            overbrace: [\"UnderOver\", \"23DE\", 1],\n                            underbrace: [\"UnderOver\", \"23DF\", 1],\n                            overparen: [\"UnderOver\", \"23DC\"],\n                            underparen: [\"UnderOver\", \"23DD\"],\n                            overrightarrow: [\"UnderOver\", \"2192\"],\n                            underrightarrow: [\"UnderOver\", \"2192\"],\n                            overleftarrow: [\"UnderOver\", \"2190\"],\n                            underleftarrow: [\"UnderOver\", \"2190\"],\n                            overleftrightarrow: [\"UnderOver\", \"2194\"],\n                            underleftrightarrow: [\"UnderOver\", \"2194\"],\n                            overset: \"Overset\",\n                            underset: \"Underset\",\n                            overunderset: \"Overunderset\",\n                            stackrel: [\n                                \"Macro\",\n                                \"\\\\mathrel{\\\\mathop{#2}\\\\limits^{#1}}\",\n                                2,\n                            ],\n                            stackbin: [\n                                \"Macro\",\n                                \"\\\\mathbin{\\\\mathop{#2}\\\\limits^{#1}}\",\n                                2,\n                            ],\n                            over: \"Over\",\n                            overwithdelims: \"Over\",\n                            atop: \"Over\",\n                            atopwithdelims: \"Over\",\n                            above: \"Over\",\n                            abovewithdelims: \"Over\",\n                            brace: [\"Over\", \"{\", \"}\"],\n                            brack: [\"Over\", \"[\", \"]\"],\n                            choose: [\"Over\", \"(\", \")\"],\n                            frac: \"Frac\",\n                            sqrt: \"Sqrt\",\n                            root: \"Root\",\n                            uproot: [\"MoveRoot\", \"upRoot\"],\n                            leftroot: [\"MoveRoot\", \"leftRoot\"],\n                            left: \"LeftRight\",\n                            right: \"LeftRight\",\n                            middle: \"LeftRight\",\n                            llap: \"Lap\",\n                            rlap: \"Lap\",\n                            raise: \"RaiseLower\",\n                            lower: \"RaiseLower\",\n                            moveleft: \"MoveLeftRight\",\n                            moveright: \"MoveLeftRight\",\n                            \",\": [\"Spacer\", f.MATHSPACE.thinmathspace],\n                            \":\": [\"Spacer\", f.MATHSPACE.mediummathspace],\n                            \">\": [\"Spacer\", f.MATHSPACE.mediummathspace],\n                            \";\": [\"Spacer\", f.MATHSPACE.thickmathspace],\n                            \"!\": [\"Spacer\", f.MATHSPACE.negativethinmathspace],\n                            enspace: [\"Spacer\", 0.5],\n                            quad: [\"Spacer\", 1],\n                            qquad: [\"Spacer\", 2],\n                            thinspace: [\"Spacer\", f.MATHSPACE.thinmathspace],\n                            negthinspace: [\n                                \"Spacer\",\n                                f.MATHSPACE.negativethinmathspace,\n                            ],\n                            hskip: \"Hskip\",\n                            hspace: \"Hskip\",\n                            kern: \"Hskip\",\n                            mskip: \"Hskip\",\n                            mspace: \"Hskip\",\n                            mkern: \"Hskip\",\n                            rule: \"rule\",\n                            Rule: [\"Rule\"],\n                            Space: [\"Rule\", \"blank\"],\n                            nonscript: \"Nonscript\",\n                            big: [\"MakeBig\", h.TEXCLASS.ORD, 0.85],\n                            Big: [\"MakeBig\", h.TEXCLASS.ORD, 1.15],\n                            bigg: [\"MakeBig\", h.TEXCLASS.ORD, 1.45],\n                            Bigg: [\"MakeBig\", h.TEXCLASS.ORD, 1.75],\n                            bigl: [\"MakeBig\", h.TEXCLASS.OPEN, 0.85],\n                            Bigl: [\"MakeBig\", h.TEXCLASS.OPEN, 1.15],\n                            biggl: [\"MakeBig\", h.TEXCLASS.OPEN, 1.45],\n                            Biggl: [\"MakeBig\", h.TEXCLASS.OPEN, 1.75],\n                            bigr: [\"MakeBig\", h.TEXCLASS.CLOSE, 0.85],\n                            Bigr: [\"MakeBig\", h.TEXCLASS.CLOSE, 1.15],\n                            biggr: [\"MakeBig\", h.TEXCLASS.CLOSE, 1.45],\n                            Biggr: [\"MakeBig\", h.TEXCLASS.CLOSE, 1.75],\n                            bigm: [\"MakeBig\", h.TEXCLASS.REL, 0.85],\n                            Bigm: [\"MakeBig\", h.TEXCLASS.REL, 1.15],\n                            biggm: [\"MakeBig\", h.TEXCLASS.REL, 1.45],\n                            Biggm: [\"MakeBig\", h.TEXCLASS.REL, 1.75],\n                            mathord: [\"TeXAtom\", h.TEXCLASS.ORD],\n                            mathop: [\"TeXAtom\", h.TEXCLASS.OP],\n                            mathopen: [\"TeXAtom\", h.TEXCLASS.OPEN],\n                            mathclose: [\"TeXAtom\", h.TEXCLASS.CLOSE],\n                            mathbin: [\"TeXAtom\", h.TEXCLASS.BIN],\n                            mathrel: [\"TeXAtom\", h.TEXCLASS.REL],\n                            mathpunct: [\"TeXAtom\", h.TEXCLASS.PUNCT],\n                            mathinner: [\"TeXAtom\", h.TEXCLASS.INNER],\n                            vcenter: [\"TeXAtom\", h.TEXCLASS.VCENTER],\n                            buildrel: \"BuildRel\",\n                            hbox: [\"HBox\", 0],\n                            text: \"HBox\",\n                            mbox: [\"HBox\", 0],\n                            fbox: \"FBox\",\n                            boxed: [\"Macro\", \"\\\\fbox{$\\\\displaystyle{#1}$}\", 1],\n                            framebox: \"FrameBox\",\n                            strut: \"Strut\",\n                            mathstrut: [\"Macro\", \"\\\\vphantom{(}\"],\n                            phantom: \"Phantom\",\n                            vphantom: [\"Phantom\", 1, 0],\n                            hphantom: [\"Phantom\", 0, 1],\n                            smash: \"Smash\",\n                            acute: [\"Accent\", \"00B4\"],\n                            grave: [\"Accent\", \"0060\"],\n                            ddot: [\"Accent\", \"00A8\"],\n                            tilde: [\"Accent\", \"007E\"],\n                            bar: [\"Accent\", \"00AF\"],\n                            breve: [\"Accent\", \"02D8\"],\n                            check: [\"Accent\", \"02C7\"],\n                            hat: [\"Accent\", \"005E\"],\n                            vec: [\"Accent\", \"2192\"],\n                            dot: [\"Accent\", \"02D9\"],\n                            widetilde: [\"Accent\", \"007E\", 1],\n                            widehat: [\"Accent\", \"005E\", 1],\n                            matrix: \"Matrix\",\n                            array: \"Matrix\",\n                            pmatrix: [\"Matrix\", \"(\", \")\"],\n                            cases: [\n                                \"Matrix\",\n                                \"{\",\n                                \"\",\n                                \"left left\",\n                                null,\n                                \".1em\",\n                                null,\n                                !0,\n                            ],\n                            eqalign: [\n                                \"Matrix\",\n                                null,\n                                null,\n                                \"right left\",\n                                (0, f.em)(f.MATHSPACE.thickmathspace),\n                                \".5em\",\n                                \"D\",\n                            ],\n                            displaylines: [\n                                \"Matrix\",\n                                null,\n                                null,\n                                \"center\",\n                                null,\n                                \".5em\",\n                                \"D\",\n                            ],\n                            cr: \"Cr\",\n                            \"\\\\\": \"CrLaTeX\",\n                            newline: [\"CrLaTeX\", !0],\n                            hline: [\"HLine\", \"solid\"],\n                            hdashline: [\"HLine\", \"dashed\"],\n                            eqalignno: [\n                                \"Matrix\",\n                                null,\n                                null,\n                                \"right left\",\n                                (0, f.em)(f.MATHSPACE.thickmathspace),\n                                \".5em\",\n                                \"D\",\n                                null,\n                                \"right\",\n                            ],\n                            leqalignno: [\n                                \"Matrix\",\n                                null,\n                                null,\n                                \"right left\",\n                                (0, f.em)(f.MATHSPACE.thickmathspace),\n                                \".5em\",\n                                \"D\",\n                                null,\n                                \"left\",\n                            ],\n                            hfill: \"HFill\",\n                            hfil: \"HFill\",\n                            hfilll: \"HFill\",\n                            bmod: [\n                                \"Macro\",\n                                '\\\\mmlToken{mo}[lspace=\"thickmathspace\" rspace=\"thickmathspace\"]{mod}',\n                            ],\n                            pmod: [\n                                \"Macro\",\n                                \"\\\\pod{\\\\mmlToken{mi}{mod}\\\\kern 6mu #1}\",\n                                1,\n                            ],\n                            mod: [\n                                \"Macro\",\n                                \"\\\\mathchoice{\\\\kern18mu}{\\\\kern12mu}{\\\\kern12mu}{\\\\kern12mu}\\\\mmlToken{mi}{mod}\\\\,\\\\,#1\",\n                                1,\n                            ],\n                            pod: [\n                                \"Macro\",\n                                \"\\\\mathchoice{\\\\kern18mu}{\\\\kern8mu}{\\\\kern8mu}{\\\\kern8mu}(#1)\",\n                                1,\n                            ],\n                            iff: [\"Macro\", \"\\\\;\\\\Longleftrightarrow\\\\;\"],\n                            skew: [\n                                \"Macro\",\n                                \"{{#2{#3\\\\mkern#1mu}\\\\mkern-#1mu}{}}\",\n                                3,\n                            ],\n                            pmb: [\"Macro\", \"\\\\rlap{#1}\\\\kern1px{#1}\", 1],\n                            TeX: [\n                                \"Macro\",\n                                \"T\\\\kern-.14em\\\\lower.5ex{E}\\\\kern-.115em X\",\n                            ],\n                            LaTeX: [\n                                \"Macro\",\n                                \"L\\\\kern-.325em\\\\raise.21em{\\\\scriptstyle{A}}\\\\kern-.17em\\\\TeX\",\n                            ],\n                            \" \": [\"Macro\", \"\\\\text{ }\"],\n                            not: \"Not\",\n                            dots: \"Dots\",\n                            space: \"Tilde\",\n                            \"\\xa0\": \"Tilde\",\n                            begin: \"BeginEnd\",\n                            end: \"BeginEnd\",\n                            label: \"HandleLabel\",\n                            ref: \"HandleRef\",\n                            nonumber: \"HandleNoTag\",\n                            mathchoice: \"MathChoice\",\n                            mmlToken: \"MmlToken\",\n                        },\n                        c.default\n                    ),\n                    new a.EnvironmentMap(\n                        \"environment\",\n                        u.default.environment,\n                        {\n                            array: [\"AlignedArray\"],\n                            equation: [\"Equation\", null, !0],\n                            eqnarray: [\n                                \"EqnArray\",\n                                null,\n                                !0,\n                                !0,\n                                \"rcl\",\n                                p.default.cols(0, f.MATHSPACE.thickmathspace),\n                                \".5em\",\n                            ],\n                        },\n                        c.default\n                    ),\n                    new a.CharacterMap(\"not_remap\", null, {\n                        \"\\u2190\": \"\\u219a\",\n                        \"\\u2192\": \"\\u219b\",\n                        \"\\u2194\": \"\\u21ae\",\n                        \"\\u21d0\": \"\\u21cd\",\n                        \"\\u21d2\": \"\\u21cf\",\n                        \"\\u21d4\": \"\\u21ce\",\n                        \"\\u2208\": \"\\u2209\",\n                        \"\\u220b\": \"\\u220c\",\n                        \"\\u2223\": \"\\u2224\",\n                        \"\\u2225\": \"\\u2226\",\n                        \"\\u223c\": \"\\u2241\",\n                        \"~\": \"\\u2241\",\n                        \"\\u2243\": \"\\u2244\",\n                        \"\\u2245\": \"\\u2247\",\n                        \"\\u2248\": \"\\u2249\",\n                        \"\\u224d\": \"\\u226d\",\n                        \"=\": \"\\u2260\",\n                        \"\\u2261\": \"\\u2262\",\n                        \"<\": \"\\u226e\",\n                        \">\": \"\\u226f\",\n                        \"\\u2264\": \"\\u2270\",\n                        \"\\u2265\": \"\\u2271\",\n                        \"\\u2272\": \"\\u2274\",\n                        \"\\u2273\": \"\\u2275\",\n                        \"\\u2276\": \"\\u2278\",\n                        \"\\u2277\": \"\\u2279\",\n                        \"\\u227a\": \"\\u2280\",\n                        \"\\u227b\": \"\\u2281\",\n                        \"\\u2282\": \"\\u2284\",\n                        \"\\u2283\": \"\\u2285\",\n                        \"\\u2286\": \"\\u2288\",\n                        \"\\u2287\": \"\\u2289\",\n                        \"\\u22a2\": \"\\u22ac\",\n                        \"\\u22a8\": \"\\u22ad\",\n                        \"\\u22a9\": \"\\u22ae\",\n                        \"\\u22ab\": \"\\u22af\",\n                        \"\\u227c\": \"\\u22e0\",\n                        \"\\u227d\": \"\\u22e1\",\n                        \"\\u2291\": \"\\u22e2\",\n                        \"\\u2292\": \"\\u22e3\",\n                        \"\\u22b2\": \"\\u22ea\",\n                        \"\\u22b3\": \"\\u22eb\",\n                        \"\\u22b4\": \"\\u22ec\",\n                        \"\\u22b5\": \"\\u22ed\",\n                        \"\\u2203\": \"\\u2204\",\n                    });\n            },\n            7693: function (t, e, r) {\n                var n =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (n =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                n.apply(this, arguments)\n                            );\n                        },\n                    o =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    i =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    s =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        o(e, t, r);\n                            return i(e, t), e;\n                        },\n                    a =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    l =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var c = s(r(1181)),\n                    u = l(r(1256)),\n                    p = l(r(3971)),\n                    h = l(r(8417)),\n                    f = r(8317),\n                    d = l(r(1130)),\n                    m = r(9007),\n                    y = r(6521),\n                    g = r(6010),\n                    b = r(5368),\n                    v = r(7233),\n                    _ = {},\n                    S = {\n                        fontfamily: 1,\n                        fontsize: 1,\n                        fontweight: 1,\n                        fontstyle: 1,\n                        color: 1,\n                        background: 1,\n                        id: 1,\n                        class: 1,\n                        href: 1,\n                        style: 1,\n                    };\n                function M(t, e) {\n                    var r = t.stack.env,\n                        n = r.inRoot;\n                    r.inRoot = !0;\n                    var o = new h.default(e, r, t.configuration),\n                        i = o.mml(),\n                        s = o.stack.global;\n                    if (s.leftRoot || s.upRoot) {\n                        var a = {};\n                        s.leftRoot && (a.width = s.leftRoot),\n                            s.upRoot &&\n                                ((a.voffset = s.upRoot), (a.height = s.upRoot)),\n                            (i = t.create(\"node\", \"mpadded\", [i], a));\n                    }\n                    return (r.inRoot = n), i;\n                }\n                (_.Open = function (t, e) {\n                    t.Push(t.itemFactory.create(\"open\"));\n                }),\n                    (_.Close = function (t, e) {\n                        t.Push(t.itemFactory.create(\"close\"));\n                    }),\n                    (_.Tilde = function (t, e) {\n                        t.Push(t.create(\"token\", \"mtext\", {}, b.entities.nbsp));\n                    }),\n                    (_.Space = function (t, e) {}),\n                    (_.Superscript = function (t, e) {\n                        var r, n, o;\n                        t.GetNext().match(/\\d/) &&\n                            (t.string =\n                                t.string.substr(0, t.i + 1) +\n                                \" \" +\n                                t.string.substr(t.i + 1));\n                        var i = t.stack.Top();\n                        i.isKind(\"prime\")\n                            ? ((o = (r = a(i.Peek(2), 2))[0]),\n                              (n = r[1]),\n                              t.stack.Pop())\n                            : (o = t.stack.Prev()) ||\n                              (o = t.create(\"token\", \"mi\", {}, \"\"));\n                        var s = u.default.getProperty(o, \"movesupsub\"),\n                            l = u.default.isType(o, \"msubsup\") ? o.sup : o.over;\n                        if (\n                            (u.default.isType(o, \"msubsup\") &&\n                                !u.default.isType(o, \"msup\") &&\n                                u.default.getChildAt(o, o.sup)) ||\n                            (u.default.isType(o, \"munderover\") &&\n                                !u.default.isType(o, \"mover\") &&\n                                u.default.getChildAt(o, o.over) &&\n                                !u.default.getProperty(o, \"subsupOK\"))\n                        )\n                            throw new p.default(\n                                \"DoubleExponent\",\n                                \"Double exponent: use braces to clarify\"\n                            );\n                        (u.default.isType(o, \"msubsup\") &&\n                            !u.default.isType(o, \"msup\")) ||\n                            (s\n                                ? ((!u.default.isType(o, \"munderover\") ||\n                                      u.default.isType(o, \"mover\") ||\n                                      u.default.getChildAt(o, o.over)) &&\n                                      (o = t.create(\"node\", \"munderover\", [o], {\n                                          movesupsub: !0,\n                                      })),\n                                  (l = o.over))\n                                : (l = (o = t.create(\"node\", \"msubsup\", [o]))\n                                      .sup)),\n                            t.Push(\n                                t.itemFactory\n                                    .create(\"subsup\", o)\n                                    .setProperties({\n                                        position: l,\n                                        primes: n,\n                                        movesupsub: s,\n                                    })\n                            );\n                    }),\n                    (_.Subscript = function (t, e) {\n                        var r, n, o;\n                        t.GetNext().match(/\\d/) &&\n                            (t.string =\n                                t.string.substr(0, t.i + 1) +\n                                \" \" +\n                                t.string.substr(t.i + 1));\n                        var i = t.stack.Top();\n                        i.isKind(\"prime\")\n                            ? ((o = (r = a(i.Peek(2), 2))[0]),\n                              (n = r[1]),\n                              t.stack.Pop())\n                            : (o = t.stack.Prev()) ||\n                              (o = t.create(\"token\", \"mi\", {}, \"\"));\n                        var s = u.default.getProperty(o, \"movesupsub\"),\n                            l = u.default.isType(o, \"msubsup\")\n                                ? o.sub\n                                : o.under;\n                        if (\n                            (u.default.isType(o, \"msubsup\") &&\n                                !u.default.isType(o, \"msup\") &&\n                                u.default.getChildAt(o, o.sub)) ||\n                            (u.default.isType(o, \"munderover\") &&\n                                !u.default.isType(o, \"mover\") &&\n                                u.default.getChildAt(o, o.under) &&\n                                !u.default.getProperty(o, \"subsupOK\"))\n                        )\n                            throw new p.default(\n                                \"DoubleSubscripts\",\n                                \"Double subscripts: use braces to clarify\"\n                            );\n                        (u.default.isType(o, \"msubsup\") &&\n                            !u.default.isType(o, \"msup\")) ||\n                            (s\n                                ? ((!u.default.isType(o, \"munderover\") ||\n                                      u.default.isType(o, \"mover\") ||\n                                      u.default.getChildAt(o, o.under)) &&\n                                      (o = t.create(\"node\", \"munderover\", [o], {\n                                          movesupsub: !0,\n                                      })),\n                                  (l = o.under))\n                                : (l = (o = t.create(\"node\", \"msubsup\", [o]))\n                                      .sub)),\n                            t.Push(\n                                t.itemFactory\n                                    .create(\"subsup\", o)\n                                    .setProperties({\n                                        position: l,\n                                        primes: n,\n                                        movesupsub: s,\n                                    })\n                            );\n                    }),\n                    (_.Prime = function (t, e) {\n                        var r = t.stack.Prev();\n                        if (\n                            (r || (r = t.create(\"node\", \"mi\")),\n                            u.default.isType(r, \"msubsup\") &&\n                                !u.default.isType(r, \"msup\") &&\n                                u.default.getChildAt(r, r.sup))\n                        )\n                            throw new p.default(\n                                \"DoubleExponentPrime\",\n                                \"Prime causes double exponent: use braces to clarify\"\n                            );\n                        var n = \"\";\n                        t.i--;\n                        do {\n                            (n += b.entities.prime), t.i++, (e = t.GetNext());\n                        } while (\"'\" === e || e === b.entities.rsquo);\n                        n =\n                            [\"\", \"\\u2032\", \"\\u2033\", \"\\u2034\", \"\\u2057\"][\n                                n.length\n                            ] || n;\n                        var o = t.create(\"token\", \"mo\", { variantForm: !0 }, n);\n                        t.Push(t.itemFactory.create(\"prime\", r, o));\n                    }),\n                    (_.Comment = function (t, e) {\n                        for (\n                            ;\n                            t.i < t.string.length &&\n                            \"\\n\" !== t.string.charAt(t.i);\n\n                        )\n                            t.i++;\n                    }),\n                    (_.Hash = function (t, e) {\n                        throw new p.default(\n                            \"CantUseHash1\",\n                            \"You can't use 'macro parameter character #' in math mode\"\n                        );\n                    }),\n                    (_.MathFont = function (t, e, r) {\n                        var o = t.GetArgument(e),\n                            i = new h.default(\n                                o,\n                                n(n({}, t.stack.env), {\n                                    font: r,\n                                    multiLetterIdentifiers: /^[a-zA-Z]+/,\n                                    noAutoOP: !0,\n                                }),\n                                t.configuration\n                            ).mml();\n                        t.Push(t.create(\"node\", \"TeXAtom\", [i]));\n                    }),\n                    (_.SetFont = function (t, e, r) {\n                        t.stack.env.font = r;\n                    }),\n                    (_.SetStyle = function (t, e, r, n, o) {\n                        (t.stack.env.style = r),\n                            (t.stack.env.level = o),\n                            t.Push(\n                                t.itemFactory\n                                    .create(\"style\")\n                                    .setProperty(\"styles\", {\n                                        displaystyle: n,\n                                        scriptlevel: o,\n                                    })\n                            );\n                    }),\n                    (_.SetSize = function (t, e, r) {\n                        (t.stack.env.size = r),\n                            t.Push(\n                                t.itemFactory\n                                    .create(\"style\")\n                                    .setProperty(\"styles\", {\n                                        mathsize: (0, g.em)(r),\n                                    })\n                            );\n                    }),\n                    (_.Spacer = function (t, e, r) {\n                        var n = t.create(\"node\", \"mspace\", [], {\n                                width: (0, g.em)(r),\n                            }),\n                            o = t.create(\"node\", \"mstyle\", [n], {\n                                scriptlevel: 0,\n                            });\n                        t.Push(o);\n                    }),\n                    (_.LeftRight = function (t, e) {\n                        var r = e.substr(1);\n                        t.Push(\n                            t.itemFactory.create(\n                                r,\n                                t.GetDelimiter(e),\n                                t.stack.env.color\n                            )\n                        );\n                    }),\n                    (_.NamedFn = function (t, e, r) {\n                        r || (r = e.substr(1));\n                        var n = t.create(\n                            \"token\",\n                            \"mi\",\n                            { texClass: m.TEXCLASS.OP },\n                            r\n                        );\n                        t.Push(t.itemFactory.create(\"fn\", n));\n                    }),\n                    (_.NamedOp = function (t, e, r) {\n                        r || (r = e.substr(1)),\n                            (r = r.replace(/&thinsp;/, \"\\u2006\"));\n                        var n = t.create(\n                            \"token\",\n                            \"mo\",\n                            {\n                                movablelimits: !0,\n                                movesupsub: !0,\n                                form: f.TexConstant.Form.PREFIX,\n                                texClass: m.TEXCLASS.OP,\n                            },\n                            r\n                        );\n                        t.Push(n);\n                    }),\n                    (_.Limits = function (t, e, r) {\n                        var n = t.stack.Prev(!0);\n                        if (\n                            !n ||\n                            (u.default.getTexClass(u.default.getCoreMO(n)) !==\n                                m.TEXCLASS.OP &&\n                                null == u.default.getProperty(n, \"movesupsub\"))\n                        )\n                            throw new p.default(\n                                \"MisplacedLimits\",\n                                \"%1 is allowed only on operators\",\n                                t.currentCS\n                            );\n                        var o,\n                            i = t.stack.Top();\n                        u.default.isType(n, \"munderover\") && !r\n                            ? ((o = t.create(\"node\", \"msubsup\")),\n                              u.default.copyChildren(n, o),\n                              (n = i.Last = o))\n                            : u.default.isType(n, \"msubsup\") &&\n                              r &&\n                              ((o = t.create(\"node\", \"munderover\")),\n                              u.default.copyChildren(n, o),\n                              (n = i.Last = o)),\n                            u.default.setProperty(n, \"movesupsub\", !!r),\n                            u.default.setProperties(u.default.getCoreMO(n), {\n                                movablelimits: !1,\n                            }),\n                            (u.default.getAttribute(n, \"movablelimits\") ||\n                                u.default.getProperty(n, \"movablelimits\")) &&\n                                u.default.setProperties(n, {\n                                    movablelimits: !1,\n                                });\n                    }),\n                    (_.Over = function (t, e, r, n) {\n                        var o = t.itemFactory\n                            .create(\"over\")\n                            .setProperty(\"name\", t.currentCS);\n                        r || n\n                            ? (o.setProperty(\"open\", r),\n                              o.setProperty(\"close\", n))\n                            : e.match(/withdelims$/) &&\n                              (o.setProperty(\"open\", t.GetDelimiter(e)),\n                              o.setProperty(\"close\", t.GetDelimiter(e))),\n                            e.match(/^\\\\above/)\n                                ? o.setProperty(\"thickness\", t.GetDimen(e))\n                                : (e.match(/^\\\\atop/) || r || n) &&\n                                  o.setProperty(\"thickness\", 0),\n                            t.Push(o);\n                    }),\n                    (_.Frac = function (t, e) {\n                        var r = t.ParseArg(e),\n                            n = t.ParseArg(e),\n                            o = t.create(\"node\", \"mfrac\", [r, n]);\n                        t.Push(o);\n                    }),\n                    (_.Sqrt = function (t, e) {\n                        var r = t.GetBrackets(e),\n                            n = t.GetArgument(e);\n                        \"\\\\frac\" === n &&\n                            (n +=\n                                \"{\" +\n                                t.GetArgument(n) +\n                                \"}{\" +\n                                t.GetArgument(n) +\n                                \"}\");\n                        var o = new h.default(\n                            n,\n                            t.stack.env,\n                            t.configuration\n                        ).mml();\n                        (o = r\n                            ? t.create(\"node\", \"mroot\", [o, M(t, r)])\n                            : t.create(\"node\", \"msqrt\", [o])),\n                            t.Push(o);\n                    }),\n                    (_.Root = function (t, e) {\n                        var r = t.GetUpTo(e, \"\\\\of\"),\n                            n = t.ParseArg(e),\n                            o = t.create(\"node\", \"mroot\", [n, M(t, r)]);\n                        t.Push(o);\n                    }),\n                    (_.MoveRoot = function (t, e, r) {\n                        if (!t.stack.env.inRoot)\n                            throw new p.default(\n                                \"MisplacedMoveRoot\",\n                                \"%1 can appear only within a root\",\n                                t.currentCS\n                            );\n                        if (t.stack.global[r])\n                            throw new p.default(\n                                \"MultipleMoveRoot\",\n                                \"Multiple use of %1\",\n                                t.currentCS\n                            );\n                        var n = t.GetArgument(e);\n                        if (!n.match(/-?[0-9]+/))\n                            throw new p.default(\n                                \"IntegerArg\",\n                                \"The argument to %1 must be an integer\",\n                                t.currentCS\n                            );\n                        \"-\" !==\n                            (n = parseInt(n, 10) / 15 + \"em\").substr(0, 1) &&\n                            (n = \"+\" + n),\n                            (t.stack.global[r] = n);\n                    }),\n                    (_.Accent = function (t, e, r, o) {\n                        var i = t.ParseArg(e),\n                            s = n(n({}, d.default.getFontDef(t)), {\n                                accent: !0,\n                                mathaccent: !0,\n                            }),\n                            a = u.default.createEntity(r),\n                            l = t.create(\"token\", \"mo\", s, a);\n                        u.default.setAttribute(l, \"stretchy\", !!o);\n                        var c = u.default.isEmbellished(i)\n                            ? u.default.getCoreMO(i)\n                            : i;\n                        (u.default.isType(c, \"mo\") ||\n                            u.default.getProperty(c, \"movablelimits\")) &&\n                            u.default.setProperties(c, { movablelimits: !1 });\n                        var p = t.create(\"node\", \"munderover\");\n                        u.default.setChild(p, 0, i),\n                            u.default.setChild(p, 1, null),\n                            u.default.setChild(p, 2, l);\n                        var h = t.create(\"node\", \"TeXAtom\", [p]);\n                        t.Push(h);\n                    }),\n                    (_.UnderOver = function (t, e, r, n) {\n                        var o = u.default.createEntity(r),\n                            i = t.create(\n                                \"token\",\n                                \"mo\",\n                                { stretchy: !0, accent: !0 },\n                                o\n                            ),\n                            s = \"o\" === e.charAt(1) ? \"over\" : \"under\",\n                            a = t.ParseArg(e);\n                        t.Push(d.default.underOver(t, a, i, s, n));\n                    }),\n                    (_.Overset = function (t, e) {\n                        var r = t.ParseArg(e),\n                            n = t.ParseArg(e);\n                        d.default.checkMovableLimits(n),\n                            r.isKind(\"mo\") &&\n                                u.default.setAttribute(r, \"accent\", !1);\n                        var o = t.create(\"node\", \"mover\", [n, r]);\n                        t.Push(o);\n                    }),\n                    (_.Underset = function (t, e) {\n                        var r = t.ParseArg(e),\n                            n = t.ParseArg(e);\n                        d.default.checkMovableLimits(n),\n                            r.isKind(\"mo\") &&\n                                u.default.setAttribute(r, \"accent\", !1);\n                        var o = t.create(\"node\", \"munder\", [n, r], {\n                            accentunder: !1,\n                        });\n                        t.Push(o);\n                    }),\n                    (_.Overunderset = function (t, e) {\n                        var r = t.ParseArg(e),\n                            n = t.ParseArg(e),\n                            o = t.ParseArg(e);\n                        d.default.checkMovableLimits(o),\n                            r.isKind(\"mo\") &&\n                                u.default.setAttribute(r, \"accent\", !1),\n                            n.isKind(\"mo\") &&\n                                u.default.setAttribute(n, \"accent\", !1);\n                        var i = t.create(\"node\", \"munderover\", [o, n, r], {\n                            accent: !1,\n                            accentunder: !1,\n                        });\n                        t.Push(i);\n                    }),\n                    (_.TeXAtom = function (t, e, r) {\n                        var n,\n                            o,\n                            i,\n                            s = { texClass: r };\n                        if (r === m.TEXCLASS.OP) {\n                            s.movesupsub = s.movablelimits = !0;\n                            var a = t.GetArgument(e),\n                                l = a.match(/^\\s*\\\\rm\\s+([a-zA-Z0-9 ]+)$/);\n                            l\n                                ? ((s.mathvariant =\n                                      f.TexConstant.Variant.NORMAL),\n                                  (o = t.create(\"token\", \"mi\", s, l[1])))\n                                : ((i = new h.default(\n                                      a,\n                                      t.stack.env,\n                                      t.configuration\n                                  ).mml()),\n                                  (o = t.create(\"node\", \"TeXAtom\", [i], s))),\n                                (n = t.itemFactory.create(\"fn\", o));\n                        } else\n                            (i = t.ParseArg(e)),\n                                (n = t.create(\"node\", \"TeXAtom\", [i], s));\n                        t.Push(n);\n                    }),\n                    (_.MmlToken = function (t, e) {\n                        var r,\n                            n = t.GetArgument(e),\n                            o = t.GetBrackets(e, \"\").replace(/^\\s+/, \"\"),\n                            i = t.GetArgument(e),\n                            s = {},\n                            a = [];\n                        try {\n                            r = t.create(\"node\", n);\n                        } catch (t) {\n                            r = null;\n                        }\n                        if (!r || !r.isToken)\n                            throw new p.default(\n                                \"NotMathMLToken\",\n                                \"%1 is not a token element\",\n                                n\n                            );\n                        for (; \"\" !== o; ) {\n                            var l = o.match(\n                                /^([a-z]+)\\s*=\\s*('[^']*'|\"[^\"]*\"|[^ ,]*)\\s*,?\\s*/i\n                            );\n                            if (!l)\n                                throw new p.default(\n                                    \"InvalidMathMLAttr\",\n                                    \"Invalid MathML attribute: %1\",\n                                    o\n                                );\n                            if (!r.attributes.hasDefault(l[1]) && !S[l[1]])\n                                throw new p.default(\n                                    \"UnknownAttrForElement\",\n                                    \"%1 is not a recognized attribute for %2\",\n                                    l[1],\n                                    n\n                                );\n                            var c = d.default.MmlFilterAttribute(\n                                t,\n                                l[1],\n                                l[2].replace(/^(['\"])(.*)\\1$/, \"$2\")\n                            );\n                            c &&\n                                (\"true\" === c.toLowerCase()\n                                    ? (c = !0)\n                                    : \"false\" === c.toLowerCase() && (c = !1),\n                                (s[l[1]] = c),\n                                a.push(l[1])),\n                                (o = o.substr(l[0].length));\n                        }\n                        a.length && (s[\"mjx-keep-attrs\"] = a.join(\" \"));\n                        var h = t.create(\"text\", i);\n                        r.appendChild(h),\n                            u.default.setProperties(r, s),\n                            t.Push(r);\n                    }),\n                    (_.Strut = function (t, e) {\n                        var r = t.create(\"node\", \"mrow\"),\n                            n = t.create(\"node\", \"mpadded\", [r], {\n                                height: \"8.6pt\",\n                                depth: \"3pt\",\n                                width: 0,\n                            });\n                        t.Push(n);\n                    }),\n                    (_.Phantom = function (t, e, r, n) {\n                        var o = t.create(\"node\", \"mphantom\", [t.ParseArg(e)]);\n                        (r || n) &&\n                            ((o = t.create(\"node\", \"mpadded\", [o])),\n                            n &&\n                                (u.default.setAttribute(o, \"height\", 0),\n                                u.default.setAttribute(o, \"depth\", 0)),\n                            r && u.default.setAttribute(o, \"width\", 0));\n                        var i = t.create(\"node\", \"TeXAtom\", [o]);\n                        t.Push(i);\n                    }),\n                    (_.Smash = function (t, e) {\n                        var r = d.default.trimSpaces(t.GetBrackets(e, \"\")),\n                            n = t.create(\"node\", \"mpadded\", [t.ParseArg(e)]);\n                        switch (r) {\n                            case \"b\":\n                                u.default.setAttribute(n, \"depth\", 0);\n                                break;\n                            case \"t\":\n                                u.default.setAttribute(n, \"height\", 0);\n                                break;\n                            default:\n                                u.default.setAttribute(n, \"height\", 0),\n                                    u.default.setAttribute(n, \"depth\", 0);\n                        }\n                        var o = t.create(\"node\", \"TeXAtom\", [n]);\n                        t.Push(o);\n                    }),\n                    (_.Lap = function (t, e) {\n                        var r = t.create(\"node\", \"mpadded\", [t.ParseArg(e)], {\n                            width: 0,\n                        });\n                        \"\\\\llap\" === e &&\n                            u.default.setAttribute(r, \"lspace\", \"-1width\");\n                        var n = t.create(\"node\", \"TeXAtom\", [r]);\n                        t.Push(n);\n                    }),\n                    (_.RaiseLower = function (t, e) {\n                        var r = t.GetDimen(e),\n                            n = t.itemFactory\n                                .create(\"position\")\n                                .setProperties({\n                                    name: t.currentCS,\n                                    move: \"vertical\",\n                                });\n                        \"-\" === r.charAt(0) &&\n                            ((r = r.slice(1)),\n                            (e =\n                                \"raise\" === e.substr(1)\n                                    ? \"\\\\lower\"\n                                    : \"\\\\raise\")),\n                            \"\\\\lower\" === e\n                                ? (n.setProperty(\"dh\", \"-\" + r),\n                                  n.setProperty(\"dd\", \"+\" + r))\n                                : (n.setProperty(\"dh\", \"+\" + r),\n                                  n.setProperty(\"dd\", \"-\" + r)),\n                            t.Push(n);\n                    }),\n                    (_.MoveLeftRight = function (t, e) {\n                        var r = t.GetDimen(e),\n                            n = \"-\" === r.charAt(0) ? r.slice(1) : \"-\" + r;\n                        if (\"\\\\moveleft\" === e) {\n                            var o = r;\n                            (r = n), (n = o);\n                        }\n                        t.Push(\n                            t.itemFactory\n                                .create(\"position\")\n                                .setProperties({\n                                    name: t.currentCS,\n                                    move: \"horizontal\",\n                                    left: t.create(\"node\", \"mspace\", [], {\n                                        width: r,\n                                    }),\n                                    right: t.create(\"node\", \"mspace\", [], {\n                                        width: n,\n                                    }),\n                                })\n                        );\n                    }),\n                    (_.Hskip = function (t, e) {\n                        var r = t.create(\"node\", \"mspace\", [], {\n                            width: t.GetDimen(e),\n                        });\n                        t.Push(r);\n                    }),\n                    (_.Nonscript = function (t, e) {\n                        t.Push(t.itemFactory.create(\"nonscript\"));\n                    }),\n                    (_.Rule = function (t, e, r) {\n                        var n = {\n                            width: t.GetDimen(e),\n                            height: t.GetDimen(e),\n                            depth: t.GetDimen(e),\n                        };\n                        \"blank\" !== r &&\n                            (n.mathbackground = t.stack.env.color || \"black\");\n                        var o = t.create(\"node\", \"mspace\", [], n);\n                        t.Push(o);\n                    }),\n                    (_.rule = function (t, e) {\n                        var r = t.GetBrackets(e),\n                            n = t.GetDimen(e),\n                            o = t.GetDimen(e),\n                            i = t.create(\"node\", \"mspace\", [], {\n                                width: n,\n                                height: o,\n                                mathbackground: t.stack.env.color || \"black\",\n                            });\n                        r &&\n                            ((i = t.create(\"node\", \"mpadded\", [i], {\n                                voffset: r,\n                            })),\n                            r.match(/^\\-/)\n                                ? (u.default.setAttribute(i, \"height\", r),\n                                  u.default.setAttribute(\n                                      i,\n                                      \"depth\",\n                                      \"+\" + r.substr(1)\n                                  ))\n                                : u.default.setAttribute(i, \"height\", \"+\" + r)),\n                            t.Push(i);\n                    }),\n                    (_.MakeBig = function (t, e, r, n) {\n                        var o =\n                                String((n *= 1.411764705882353)).replace(\n                                    /(\\.\\d\\d\\d).+/,\n                                    \"$1\"\n                                ) + \"em\",\n                            i = t.GetDelimiter(e, !0),\n                            s = t.create(\n                                \"token\",\n                                \"mo\",\n                                {\n                                    minsize: o,\n                                    maxsize: o,\n                                    fence: !0,\n                                    stretchy: !0,\n                                    symmetric: !0,\n                                },\n                                i\n                            ),\n                            a = t.create(\"node\", \"TeXAtom\", [s], {\n                                texClass: r,\n                            });\n                        t.Push(a);\n                    }),\n                    (_.BuildRel = function (t, e) {\n                        var r = t.ParseUpTo(e, \"\\\\over\"),\n                            n = t.ParseArg(e),\n                            o = t.create(\"node\", \"munderover\");\n                        u.default.setChild(o, 0, n),\n                            u.default.setChild(o, 1, null),\n                            u.default.setChild(o, 2, r);\n                        var i = t.create(\"node\", \"TeXAtom\", [o], {\n                            texClass: m.TEXCLASS.REL,\n                        });\n                        t.Push(i);\n                    }),\n                    (_.HBox = function (t, e, r, n) {\n                        t.PushAll(\n                            d.default.internalMath(t, t.GetArgument(e), r, n)\n                        );\n                    }),\n                    (_.FBox = function (t, e) {\n                        var r = d.default.internalMath(t, t.GetArgument(e)),\n                            n = t.create(\"node\", \"menclose\", r, {\n                                notation: \"box\",\n                            });\n                        t.Push(n);\n                    }),\n                    (_.FrameBox = function (t, e) {\n                        var r = t.GetBrackets(e),\n                            n = t.GetBrackets(e) || \"c\",\n                            o = d.default.internalMath(t, t.GetArgument(e));\n                        r &&\n                            (o = [\n                                t.create(\"node\", \"mpadded\", o, {\n                                    width: r,\n                                    \"data-align\": (0, v.lookup)(\n                                        n,\n                                        { l: \"left\", r: \"right\" },\n                                        \"center\"\n                                    ),\n                                }),\n                            ]);\n                        var i = t.create(\n                            \"node\",\n                            \"TeXAtom\",\n                            [\n                                t.create(\"node\", \"menclose\", o, {\n                                    notation: \"box\",\n                                }),\n                            ],\n                            { texClass: m.TEXCLASS.ORD }\n                        );\n                        t.Push(i);\n                    }),\n                    (_.Not = function (t, e) {\n                        t.Push(t.itemFactory.create(\"not\"));\n                    }),\n                    (_.Dots = function (t, e) {\n                        var r = u.default.createEntity(\"2026\"),\n                            n = u.default.createEntity(\"22EF\"),\n                            o = t.create(\"token\", \"mo\", { stretchy: !1 }, r),\n                            i = t.create(\"token\", \"mo\", { stretchy: !1 }, n);\n                        t.Push(\n                            t.itemFactory\n                                .create(\"dots\")\n                                .setProperties({ ldots: o, cdots: i })\n                        );\n                    }),\n                    (_.Matrix = function (t, e, r, n, o, i, s, a, l, c) {\n                        var u = t.GetNext();\n                        if (\"\" === u)\n                            throw new p.default(\n                                \"MissingArgFor\",\n                                \"Missing argument for %1\",\n                                t.currentCS\n                            );\n                        \"{\" === u\n                            ? t.i++\n                            : ((t.string = u + \"}\" + t.string.slice(t.i + 1)),\n                              (t.i = 0));\n                        var h = t.itemFactory\n                            .create(\"array\")\n                            .setProperty(\"requireClose\", !0);\n                        (h.arraydef = {\n                            rowspacing: s || \"4pt\",\n                            columnspacing: i || \"1em\",\n                        }),\n                            l && h.setProperty(\"isCases\", !0),\n                            c &&\n                                (h.setProperty(\"isNumbered\", !0),\n                                (h.arraydef.side = c)),\n                            (r || n) &&\n                                (h.setProperty(\"open\", r),\n                                h.setProperty(\"close\", n)),\n                            \"D\" === a && (h.arraydef.displaystyle = !0),\n                            null != o && (h.arraydef.columnalign = o),\n                            t.Push(h);\n                    }),\n                    (_.Entry = function (t, e) {\n                        t.Push(\n                            t.itemFactory\n                                .create(\"cell\")\n                                .setProperties({ isEntry: !0, name: e })\n                        );\n                        var r = t.stack.Top(),\n                            n = r.getProperty(\"casesEnv\");\n                        if (r.getProperty(\"isCases\") || n) {\n                            for (\n                                var o = t.string,\n                                    i = 0,\n                                    s = -1,\n                                    a = t.i,\n                                    l = o.length,\n                                    c = n\n                                        ? new RegExp(\n                                              \"^\\\\\\\\end\\\\s*\\\\{\".concat(\n                                                  n.replace(/\\*/, \"\\\\*\"),\n                                                  \"\\\\}\"\n                                              )\n                                          )\n                                        : null;\n                                a < l;\n\n                            ) {\n                                var u = o.charAt(a);\n                                if (\"{\" === u) i++, a++;\n                                else if (\"}\" === u)\n                                    0 === i\n                                        ? (l = 0)\n                                        : (0 === --i && s < 0 && (s = a - t.i),\n                                          a++);\n                                else {\n                                    if (\"&\" === u && 0 === i)\n                                        throw new p.default(\n                                            \"ExtraAlignTab\",\n                                            \"Extra alignment tab in \\\\cases text\"\n                                        );\n                                    if (\"\\\\\" === u) {\n                                        var h = o.substr(a);\n                                        h.match(/^((\\\\cr)[^a-zA-Z]|\\\\\\\\)/) ||\n                                        (c && h.match(c))\n                                            ? (l = 0)\n                                            : (a += 2);\n                                    } else a++;\n                                }\n                            }\n                            var f = o.substr(t.i, a - t.i);\n                            if (\n                                !f.match(/^\\s*\\\\text[^a-zA-Z]/) ||\n                                s !== f.replace(/\\s+$/, \"\").length - 1\n                            ) {\n                                var m = d.default.internalMath(\n                                    t,\n                                    d.default.trimSpaces(f),\n                                    0\n                                );\n                                t.PushAll(m), (t.i = a);\n                            }\n                        }\n                    }),\n                    (_.Cr = function (t, e) {\n                        t.Push(\n                            t.itemFactory\n                                .create(\"cell\")\n                                .setProperties({ isCR: !0, name: e })\n                        );\n                    }),\n                    (_.CrLaTeX = function (t, e, r) {\n                        var n;\n                        if (\n                            (void 0 === r && (r = !1),\n                            !r &&\n                                (\"*\" === t.string.charAt(t.i) && t.i++,\n                                \"[\" === t.string.charAt(t.i)))\n                        ) {\n                            var o = t.GetBrackets(e, \"\"),\n                                i = a(d.default.matchDimen(o), 2),\n                                s = i[0],\n                                l = i[1];\n                            if (o && !s)\n                                throw new p.default(\n                                    \"BracketMustBeDimension\",\n                                    \"Bracket argument to %1 must be a dimension\",\n                                    t.currentCS\n                                );\n                            n = s + l;\n                        }\n                        t.Push(\n                            t.itemFactory\n                                .create(\"cell\")\n                                .setProperties({\n                                    isCR: !0,\n                                    name: e,\n                                    linebreak: !0,\n                                })\n                        );\n                        var u,\n                            h = t.stack.Top();\n                        h instanceof c.ArrayItem\n                            ? n && h.addRowSpacing(n)\n                            : (n &&\n                                  ((u = t.create(\"node\", \"mspace\", [], {\n                                      depth: n,\n                                  })),\n                                  t.Push(u)),\n                              (u = t.create(\"node\", \"mspace\", [], {\n                                  linebreak: f.TexConstant.LineBreak.NEWLINE,\n                              })),\n                              t.Push(u));\n                    }),\n                    (_.HLine = function (t, e, r) {\n                        null == r && (r = \"solid\");\n                        var n = t.stack.Top();\n                        if (!(n instanceof c.ArrayItem) || n.Size())\n                            throw new p.default(\n                                \"Misplaced\",\n                                \"Misplaced %1\",\n                                t.currentCS\n                            );\n                        if (n.table.length) {\n                            for (\n                                var o = n.arraydef.rowlines\n                                    ? n.arraydef.rowlines.split(/ /)\n                                    : [];\n                                o.length < n.table.length;\n\n                            )\n                                o.push(\"none\");\n                            (o[n.table.length - 1] = r),\n                                (n.arraydef.rowlines = o.join(\" \"));\n                        } else n.frame.push(\"top\");\n                    }),\n                    (_.HFill = function (t, e) {\n                        var r = t.stack.Top();\n                        if (!(r instanceof c.ArrayItem))\n                            throw new p.default(\n                                \"UnsupportedHFill\",\n                                \"Unsupported use of %1\",\n                                t.currentCS\n                            );\n                        r.hfill.push(r.Size());\n                    }),\n                    (_.BeginEnd = function (t, e) {\n                        var r = t.GetArgument(e);\n                        if (r.match(/\\\\/i))\n                            throw new p.default(\n                                \"InvalidEnv\",\n                                \"Invalid environment name '%1'\",\n                                r\n                            );\n                        var n = t.configuration.handlers\n                            .get(\"environment\")\n                            .lookup(r);\n                        if (n && \"\\\\end\" === e) {\n                            if (!n.args[0]) {\n                                var o = t.itemFactory\n                                    .create(\"end\")\n                                    .setProperty(\"name\", r);\n                                return void t.Push(o);\n                            }\n                            t.stack.env.closing = r;\n                        }\n                        d.default.checkMaxMacros(t, !1),\n                            t.parse(\"environment\", [t, r]);\n                    }),\n                    (_.Array = function (t, e, r, n, o, i, s, a, l) {\n                        o ||\n                            (o = t.GetArgument(\"\\\\begin{\" + e.getName() + \"}\"));\n                        var c = (\"c\" + o)\n                            .replace(/[^clr|:]/g, \"\")\n                            .replace(/[^|:]([|:])+/g, \"$1\");\n                        o = (o = o\n                            .replace(/[^clr]/g, \"\")\n                            .split(\"\")\n                            .join(\" \"))\n                            .replace(/l/g, \"left\")\n                            .replace(/r/g, \"right\")\n                            .replace(/c/g, \"center\");\n                        var u = t.itemFactory.create(\"array\");\n                        return (\n                            (u.arraydef = {\n                                columnalign: o,\n                                columnspacing: i || \"1em\",\n                                rowspacing: s || \"4pt\",\n                            }),\n                            c.match(/[|:]/) &&\n                                (c.charAt(0).match(/[|:]/) &&\n                                    (u.frame.push(\"left\"),\n                                    (u.dashed = \":\" === c.charAt(0))),\n                                c.charAt(c.length - 1).match(/[|:]/) &&\n                                    u.frame.push(\"right\"),\n                                (c = c.substr(1, c.length - 2)),\n                                (u.arraydef.columnlines = c\n                                    .split(\"\")\n                                    .join(\" \")\n                                    .replace(/[^|: ]/g, \"none\")\n                                    .replace(/\\|/g, \"solid\")\n                                    .replace(/:/g, \"dashed\"))),\n                            r && u.setProperty(\"open\", t.convertDelimiter(r)),\n                            n && u.setProperty(\"close\", t.convertDelimiter(n)),\n                            \"'\" === (a || \"\").charAt(1) &&\n                                ((u.arraydef[\"data-cramped\"] = !0),\n                                (a = a.charAt(0))),\n                            \"D\" === a\n                                ? (u.arraydef.displaystyle = !0)\n                                : a && (u.arraydef.displaystyle = !1),\n                            \"S\" === a && (u.arraydef.scriptlevel = 1),\n                            l && (u.arraydef.useHeight = !1),\n                            t.Push(e),\n                            u\n                        );\n                    }),\n                    (_.AlignedArray = function (t, e) {\n                        var r = t.GetBrackets(\"\\\\begin{\" + e.getName() + \"}\"),\n                            n = _.Array(t, e);\n                        return d.default.setArrayAlign(n, r);\n                    }),\n                    (_.Equation = function (t, e, r) {\n                        return (\n                            t.Push(e),\n                            d.default.checkEqnEnv(t),\n                            t.itemFactory\n                                .create(\"equation\", r)\n                                .setProperty(\"name\", e.getName())\n                        );\n                    }),\n                    (_.EqnArray = function (t, e, r, n, o, i) {\n                        t.Push(e),\n                            n && d.default.checkEqnEnv(t),\n                            (o = (o = o\n                                .replace(/[^clr]/g, \"\")\n                                .split(\"\")\n                                .join(\" \"))\n                                .replace(/l/g, \"left\")\n                                .replace(/r/g, \"right\")\n                                .replace(/c/g, \"center\"));\n                        var s = t.itemFactory.create(\n                            \"eqnarray\",\n                            e.getName(),\n                            r,\n                            n,\n                            t.stack.global\n                        );\n                        return (\n                            (s.arraydef = {\n                                displaystyle: !0,\n                                columnalign: o,\n                                columnspacing: i || \"1em\",\n                                rowspacing: \"3pt\",\n                                side: t.options.tagSide,\n                                minlabelspacing: t.options.tagIndent,\n                            }),\n                            s\n                        );\n                    }),\n                    (_.HandleNoTag = function (t, e) {\n                        t.tags.notag();\n                    }),\n                    (_.HandleLabel = function (t, e) {\n                        var r = t.GetArgument(e);\n                        if (\"\" !== r && !t.tags.refUpdate) {\n                            if (t.tags.label)\n                                throw new p.default(\n                                    \"MultipleCommand\",\n                                    \"Multiple %1\",\n                                    t.currentCS\n                                );\n                            if (\n                                ((t.tags.label = r),\n                                (t.tags.allLabels[r] || t.tags.labels[r]) &&\n                                    !t.options.ignoreDuplicateLabels)\n                            )\n                                throw new p.default(\n                                    \"MultipleLabel\",\n                                    \"Label '%1' multiply defined\",\n                                    r\n                                );\n                            t.tags.labels[r] = new y.Label();\n                        }\n                    }),\n                    (_.HandleRef = function (t, e, r) {\n                        var n = t.GetArgument(e),\n                            o = t.tags.allLabels[n] || t.tags.labels[n];\n                        o ||\n                            (t.tags.refUpdate || (t.tags.redo = !0),\n                            (o = new y.Label()));\n                        var i = o.tag;\n                        r && (i = t.tags.formatTag(i));\n                        var s = t.create(\n                            \"node\",\n                            \"mrow\",\n                            d.default.internalMath(t, i),\n                            {\n                                href: t.tags.formatUrl(o.id, t.options.baseURL),\n                                class: \"MathJax_ref\",\n                            }\n                        );\n                        t.Push(s);\n                    }),\n                    (_.Macro = function (t, e, r, n, o) {\n                        if (n) {\n                            var i = [];\n                            if (null != o) {\n                                var s = t.GetBrackets(e);\n                                i.push(null == s ? o : s);\n                            }\n                            for (var a = i.length; a < n; a++)\n                                i.push(t.GetArgument(e));\n                            r = d.default.substituteArgs(t, i, r);\n                        }\n                        (t.string = d.default.addArgs(\n                            t,\n                            r,\n                            t.string.slice(t.i)\n                        )),\n                            (t.i = 0),\n                            d.default.checkMaxMacros(t);\n                    }),\n                    (_.MathChoice = function (t, e) {\n                        var r = t.ParseArg(e),\n                            n = t.ParseArg(e),\n                            o = t.ParseArg(e),\n                            i = t.ParseArg(e);\n                        t.Push(t.create(\"node\", \"MathChoice\", [r, n, o, i]));\n                    }),\n                    (e.default = _);\n            },\n            8458: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    i =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.ConfigMacrosConfiguration = void 0);\n                var s = r(9899),\n                    a = r(7233),\n                    l = r(9140),\n                    c = i(r(5450)),\n                    u = r(8803),\n                    p = i(r(1110)),\n                    h = r(6793),\n                    f = \"configmacros-map\",\n                    d = \"configmacros-env-map\";\n                e.ConfigMacrosConfiguration = s.Configuration.create(\n                    \"configmacros\",\n                    {\n                        init: function (t) {\n                            new l.CommandMap(f, {}, {}),\n                                new l.EnvironmentMap(\n                                    d,\n                                    c.default.environment,\n                                    {},\n                                    {}\n                                ),\n                                t.append(\n                                    s.Configuration.local({\n                                        handler: {\n                                            macro: [f],\n                                            environment: [d],\n                                        },\n                                        priority: 3,\n                                    })\n                                );\n                        },\n                        config: function (t, e) {\n                            !(function (t) {\n                                var e,\n                                    r,\n                                    n = t.parseOptions.handlers.retrieve(f),\n                                    i = t.parseOptions.options.macros;\n                                try {\n                                    for (\n                                        var s = o(Object.keys(i)), a = s.next();\n                                        !a.done;\n                                        a = s.next()\n                                    ) {\n                                        var l = a.value,\n                                            c =\n                                                \"string\" == typeof i[l]\n                                                    ? [i[l]]\n                                                    : i[l],\n                                            h = Array.isArray(c[2])\n                                                ? new u.Macro(\n                                                      l,\n                                                      p.default.MacroWithTemplate,\n                                                      c.slice(0, 2).concat(c[2])\n                                                  )\n                                                : new u.Macro(\n                                                      l,\n                                                      p.default.Macro,\n                                                      c\n                                                  );\n                                        n.add(l, h);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        a &&\n                                            !a.done &&\n                                            (r = s.return) &&\n                                            r.call(s);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                            })(e),\n                                (function (t) {\n                                    var e,\n                                        r,\n                                        n = t.parseOptions.handlers.retrieve(d),\n                                        i = t.parseOptions.options.environments;\n                                    try {\n                                        for (\n                                            var s = o(Object.keys(i)),\n                                                a = s.next();\n                                            !a.done;\n                                            a = s.next()\n                                        ) {\n                                            var l = a.value;\n                                            n.add(\n                                                l,\n                                                new u.Macro(\n                                                    l,\n                                                    p.default.BeginEnv,\n                                                    [!0].concat(i[l])\n                                                )\n                                            );\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            a &&\n                                                !a.done &&\n                                                (r = s.return) &&\n                                                r.call(s);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                                })(e);\n                        },\n                        items:\n                            ((n = {}),\n                            (n[h.BeginEnvItem.prototype.kind] = h.BeginEnvItem),\n                            n),\n                        options: {\n                            macros: (0, a.expandable)({}),\n                            environments: (0, a.expandable)({}),\n                        },\n                    }\n                );\n            },\n            1496: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    i =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    s =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        o(e, t, r);\n                            return i(e, t), e;\n                        },\n                    a =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.NewcommandConfiguration = void 0);\n                var l = r(9899),\n                    c = r(6793),\n                    u = a(r(5579));\n                r(5117);\n                var p = a(r(5450)),\n                    h = s(r(9140));\n                e.NewcommandConfiguration = l.Configuration.create(\n                    \"newcommand\",\n                    {\n                        handler: { macro: [\"Newcommand-macros\"] },\n                        items:\n                            ((n = {}),\n                            (n[c.BeginEnvItem.prototype.kind] = c.BeginEnvItem),\n                            n),\n                        options: { maxMacros: 1e3 },\n                        init: function (t) {\n                            new h.DelimiterMap(\n                                u.default.NEW_DELIMITER,\n                                p.default.delimiter,\n                                {}\n                            ),\n                                new h.CommandMap(u.default.NEW_COMMAND, {}, {}),\n                                new h.EnvironmentMap(\n                                    u.default.NEW_ENVIRONMENT,\n                                    p.default.environment,\n                                    {},\n                                    {}\n                                ),\n                                t.append(\n                                    l.Configuration.local({\n                                        handler: {\n                                            character: [],\n                                            delimiter: [\n                                                u.default.NEW_DELIMITER,\n                                            ],\n                                            macro: [\n                                                u.default.NEW_DELIMITER,\n                                                u.default.NEW_COMMAND,\n                                            ],\n                                            environment: [\n                                                u.default.NEW_ENVIRONMENT,\n                                            ],\n                                        },\n                                        priority: -1,\n                                    })\n                                );\n                        },\n                    }\n                );\n            },\n            6793: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.BeginEnvItem = void 0);\n                var s = i(r(3971)),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"kind\", {\n                                get: function () {\n                                    return \"beginEnv\";\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"isOpen\", {\n                                get: function () {\n                                    return !0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.checkItem = function (e) {\n                                if (e.isKind(\"end\")) {\n                                    if (e.getName() !== this.getName())\n                                        throw new s.default(\n                                            \"EnvBadEnd\",\n                                            \"\\\\begin{%1} ended with \\\\end{%2}\",\n                                            this.getName(),\n                                            e.getName()\n                                        );\n                                    return [\n                                        [\n                                            this.factory.create(\n                                                \"mml\",\n                                                this.toMml()\n                                            ),\n                                        ],\n                                        !0,\n                                    ];\n                                }\n                                if (e.isKind(\"stop\"))\n                                    throw new s.default(\n                                        \"EnvMissingEnd\",\n                                        \"Missing \\\\end{%1}\",\n                                        this.getName()\n                                    );\n                                return t.prototype.checkItem.call(this, e);\n                            }),\n                            e\n                        );\n                    })(r(8292).BaseItem);\n                e.BeginEnvItem = a;\n            },\n            5117: function (t, e, r) {\n                var n =\n                    (this && this.__importDefault) ||\n                    function (t) {\n                        return t && t.__esModule ? t : { default: t };\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var o = n(r(1110));\n                new (r(9140).CommandMap)(\n                    \"Newcommand-macros\",\n                    {\n                        newcommand: \"NewCommand\",\n                        renewcommand: \"NewCommand\",\n                        newenvironment: \"NewEnvironment\",\n                        renewenvironment: \"NewEnvironment\",\n                        def: \"MacroDef\",\n                        let: \"Let\",\n                    },\n                    o.default\n                );\n            },\n            1110: function (t, e, r) {\n                var n =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    o =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    i =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        n(e, t, r);\n                            return o(e, t), e;\n                        },\n                    s =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var a = s(r(3971)),\n                    l = i(r(9140)),\n                    c = s(r(7693)),\n                    u = s(r(1130)),\n                    p = s(r(5579)),\n                    h = {\n                        NewCommand: function (t, e) {\n                            var r = p.default.GetCsNameArgument(t, e),\n                                n = p.default.GetArgCount(t, e),\n                                o = t.GetBrackets(e),\n                                i = t.GetArgument(e);\n                            p.default.addMacro(t, r, h.Macro, [i, n, o]);\n                        },\n                        NewEnvironment: function (t, e) {\n                            var r = u.default.trimSpaces(t.GetArgument(e)),\n                                n = p.default.GetArgCount(t, e),\n                                o = t.GetBrackets(e),\n                                i = t.GetArgument(e),\n                                s = t.GetArgument(e);\n                            p.default.addEnvironment(t, r, h.BeginEnv, [\n                                !0,\n                                i,\n                                s,\n                                n,\n                                o,\n                            ]);\n                        },\n                        MacroDef: function (t, e) {\n                            var r = p.default.GetCSname(t, e),\n                                n = p.default.GetTemplate(t, e, \"\\\\\" + r),\n                                o = t.GetArgument(e);\n                            n instanceof Array\n                                ? p.default.addMacro(\n                                      t,\n                                      r,\n                                      h.MacroWithTemplate,\n                                      [o].concat(n)\n                                  )\n                                : p.default.addMacro(t, r, h.Macro, [o, n]);\n                        },\n                        Let: function (t, e) {\n                            var r = p.default.GetCSname(t, e),\n                                n = t.GetNext();\n                            \"=\" === n && (t.i++, (n = t.GetNext()));\n                            var o = t.configuration.handlers;\n                            if (\"\\\\\" !== n) {\n                                t.i++;\n                                var i = o.get(\"delimiter\").lookup(n);\n                                i\n                                    ? p.default.addDelimiter(\n                                          t,\n                                          \"\\\\\" + r,\n                                          i.char,\n                                          i.attributes\n                                      )\n                                    : p.default.addMacro(t, r, h.Macro, [n]);\n                            } else {\n                                e = p.default.GetCSname(t, e);\n                                var s = o.get(\"delimiter\").lookup(\"\\\\\" + e);\n                                if (s)\n                                    return void p.default.addDelimiter(\n                                        t,\n                                        \"\\\\\" + r,\n                                        s.char,\n                                        s.attributes\n                                    );\n                                var a = o.get(\"macro\").applicable(e);\n                                if (!a) return;\n                                if (a instanceof l.MacroMap) {\n                                    var c = a.lookup(e);\n                                    return void p.default.addMacro(\n                                        t,\n                                        r,\n                                        c.func,\n                                        c.args,\n                                        c.symbol\n                                    );\n                                }\n                                s = a.lookup(e);\n                                var u = p.default.disassembleSymbol(r, s);\n                                p.default.addMacro(\n                                    t,\n                                    r,\n                                    function (t, e) {\n                                        for (\n                                            var r = [], n = 2;\n                                            n < arguments.length;\n                                            n++\n                                        )\n                                            r[n - 2] = arguments[n];\n                                        var o = p.default.assembleSymbol(r);\n                                        return a.parser(t, o);\n                                    },\n                                    u\n                                );\n                            }\n                        },\n                        MacroWithTemplate: function (t, e, r, n) {\n                            for (var o = [], i = 4; i < arguments.length; i++)\n                                o[i - 4] = arguments[i];\n                            var s = parseInt(n, 10);\n                            if (s) {\n                                var l = [];\n                                if (\n                                    (t.GetNext(),\n                                    o[0] && !p.default.MatchParam(t, o[0]))\n                                )\n                                    throw new a.default(\n                                        \"MismatchUseDef\",\n                                        \"Use of %1 doesn't match its definition\",\n                                        e\n                                    );\n                                for (var c = 0; c < s; c++)\n                                    l.push(\n                                        p.default.GetParameter(t, e, o[c + 1])\n                                    );\n                                r = u.default.substituteArgs(t, l, r);\n                            }\n                            (t.string = u.default.addArgs(\n                                t,\n                                r,\n                                t.string.slice(t.i)\n                            )),\n                                (t.i = 0),\n                                u.default.checkMaxMacros(t);\n                        },\n                        BeginEnv: function (t, e, r, n, o, i) {\n                            if (\n                                e.getProperty(\"end\") &&\n                                t.stack.env.closing === e.getName()\n                            ) {\n                                delete t.stack.env.closing;\n                                var s = t.string.slice(t.i);\n                                return (\n                                    (t.string = n),\n                                    (t.i = 0),\n                                    t.Parse(),\n                                    (t.string = s),\n                                    (t.i = 0),\n                                    t.itemFactory\n                                        .create(\"end\")\n                                        .setProperty(\"name\", e.getName())\n                                );\n                            }\n                            if (o) {\n                                var a = [];\n                                if (null != i) {\n                                    var l = t.GetBrackets(\n                                        \"\\\\begin{\" + e.getName() + \"}\"\n                                    );\n                                    a.push(null == l ? i : l);\n                                }\n                                for (var c = a.length; c < o; c++)\n                                    a.push(\n                                        t.GetArgument(\n                                            \"\\\\begin{\" + e.getName() + \"}\"\n                                        )\n                                    );\n                                (r = u.default.substituteArgs(t, a, r)),\n                                    (n = u.default.substituteArgs(t, [], n));\n                            }\n                            return (\n                                (t.string = u.default.addArgs(\n                                    t,\n                                    r,\n                                    t.string.slice(t.i)\n                                )),\n                                (t.i = 0),\n                                t.itemFactory\n                                    .create(\"beginEnv\")\n                                    .setProperty(\"name\", e.getName())\n                            );\n                        },\n                    };\n                (h.Macro = c.default.Macro), (e.default = h);\n            },\n            5579: function (t, e, r) {\n                var n =\n                    (this && this.__importDefault) ||\n                    function (t) {\n                        return t && t.__esModule ? t : { default: t };\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                var o,\n                    i = n(r(1130)),\n                    s = n(r(3971)),\n                    a = r(8803);\n                !(function (t) {\n                    function e(t, e) {\n                        return t.string.substr(t.i, e.length) !== e ||\n                            (e.match(/\\\\[a-z]+$/i) &&\n                                t.string.charAt(t.i + e.length).match(/[a-z]/i))\n                            ? 0\n                            : ((t.i += e.length), 1);\n                    }\n                    (t.disassembleSymbol = function (t, e) {\n                        var r = [t, e.char];\n                        if (e.attributes)\n                            for (var n in e.attributes)\n                                r.push(n), r.push(e.attributes[n]);\n                        return r;\n                    }),\n                        (t.assembleSymbol = function (t) {\n                            for (\n                                var e = t[0], r = t[1], n = {}, o = 2;\n                                o < t.length;\n                                o += 2\n                            )\n                                n[t[o]] = t[o + 1];\n                            return new a.Symbol(e, r, n);\n                        }),\n                        (t.GetCSname = function (t, e) {\n                            if (\"\\\\\" !== t.GetNext())\n                                throw new s.default(\n                                    \"MissingCS\",\n                                    \"%1 must be followed by a control sequence\",\n                                    e\n                                );\n                            return i.default\n                                .trimSpaces(t.GetArgument(e))\n                                .substr(1);\n                        }),\n                        (t.GetCsNameArgument = function (t, e) {\n                            var r = i.default.trimSpaces(t.GetArgument(e));\n                            if (\n                                (\"\\\\\" === r.charAt(0) && (r = r.substr(1)),\n                                !r.match(/^(.|[a-z]+)$/i))\n                            )\n                                throw new s.default(\n                                    \"IllegalControlSequenceName\",\n                                    \"Illegal control sequence name for %1\",\n                                    e\n                                );\n                            return r;\n                        }),\n                        (t.GetArgCount = function (t, e) {\n                            var r = t.GetBrackets(e);\n                            if (\n                                r &&\n                                !(r = i.default.trimSpaces(r)).match(/^[0-9]+$/)\n                            )\n                                throw new s.default(\n                                    \"IllegalParamNumber\",\n                                    \"Illegal number of parameters specified in %1\",\n                                    e\n                                );\n                            return r;\n                        }),\n                        (t.GetTemplate = function (t, e, r) {\n                            for (\n                                var n = t.GetNext(), o = [], i = 0, a = t.i;\n                                t.i < t.string.length;\n\n                            ) {\n                                if (\"#\" === (n = t.GetNext())) {\n                                    if (\n                                        (a !== t.i &&\n                                            (o[i] = t.string.substr(\n                                                a,\n                                                t.i - a\n                                            )),\n                                        !(n = t.string.charAt(++t.i)).match(\n                                            /^[1-9]$/\n                                        ))\n                                    )\n                                        throw new s.default(\n                                            \"CantUseHash2\",\n                                            \"Illegal use of # in template for %1\",\n                                            r\n                                        );\n                                    if (parseInt(n) !== ++i)\n                                        throw new s.default(\n                                            \"SequentialParam\",\n                                            \"Parameters for %1 must be numbered sequentially\",\n                                            r\n                                        );\n                                    a = t.i + 1;\n                                } else if (\"{\" === n)\n                                    return (\n                                        a !== t.i &&\n                                            (o[i] = t.string.substr(\n                                                a,\n                                                t.i - a\n                                            )),\n                                        o.length > 0\n                                            ? [i.toString()].concat(o)\n                                            : i\n                                    );\n                                t.i++;\n                            }\n                            throw new s.default(\n                                \"MissingReplacementString\",\n                                \"Missing replacement string for definition of %1\",\n                                e\n                            );\n                        }),\n                        (t.GetParameter = function (t, r, n) {\n                            if (null == n) return t.GetArgument(r);\n                            for (\n                                var o = t.i, i = 0, a = 0;\n                                t.i < t.string.length;\n\n                            ) {\n                                var l = t.string.charAt(t.i);\n                                if (\"{\" === l)\n                                    t.i === o && (a = 1),\n                                        t.GetArgument(r),\n                                        (i = t.i - o);\n                                else {\n                                    if (e(t, n))\n                                        return (\n                                            a && (o++, (i -= 2)),\n                                            t.string.substr(o, i)\n                                        );\n                                    if (\"\\\\\" === l) {\n                                        t.i++, i++, (a = 0);\n                                        var c = t.string\n                                            .substr(t.i)\n                                            .match(/[a-z]+|./i);\n                                        c &&\n                                            ((t.i += c[0].length),\n                                            (i = t.i - o));\n                                    } else t.i++, i++, (a = 0);\n                                }\n                            }\n                            throw new s.default(\n                                \"RunawayArgument\",\n                                \"Runaway argument for %1?\",\n                                r\n                            );\n                        }),\n                        (t.MatchParam = e),\n                        (t.addDelimiter = function (e, r, n, o) {\n                            e.configuration.handlers\n                                .retrieve(t.NEW_DELIMITER)\n                                .add(r, new a.Symbol(r, n, o));\n                        }),\n                        (t.addMacro = function (e, r, n, o, i) {\n                            void 0 === i && (i = \"\"),\n                                e.configuration.handlers\n                                    .retrieve(t.NEW_COMMAND)\n                                    .add(r, new a.Macro(i || r, n, o));\n                        }),\n                        (t.addEnvironment = function (e, r, n, o) {\n                            e.configuration.handlers\n                                .retrieve(t.NEW_ENVIRONMENT)\n                                .add(r, new a.Macro(r, n, o));\n                        }),\n                        (t.NEW_DELIMITER = \"new-Delimiter\"),\n                        (t.NEW_COMMAND = \"new-Command\"),\n                        (t.NEW_ENVIRONMENT = \"new-Environment\");\n                })(o || (o = {})),\n                    (e.default = o);\n            },\n            4898: function (t, e, r) {\n                var n =\n                    (this && this.__values) ||\n                    function (t) {\n                        var e = \"function\" == typeof Symbol && Symbol.iterator,\n                            r = e && t[e],\n                            n = 0;\n                        if (r) return r.call(t);\n                        if (t && \"number\" == typeof t.length)\n                            return {\n                                next: function () {\n                                    return (\n                                        t && n >= t.length && (t = void 0),\n                                        { value: t && t[n++], done: !t }\n                                    );\n                                },\n                            };\n                        throw new TypeError(\n                            e\n                                ? \"Object is not iterable.\"\n                                : \"Symbol.iterator is not defined.\"\n                        );\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.NoUndefinedConfiguration = void 0);\n                var o = r(9899);\n                e.NoUndefinedConfiguration = o.Configuration.create(\n                    \"noundefined\",\n                    {\n                        fallback: {\n                            macro: function (t, e) {\n                                var r,\n                                    o,\n                                    i = t.create(\"text\", \"\\\\\" + e),\n                                    s = t.options.noundefined || {},\n                                    a = {};\n                                try {\n                                    for (\n                                        var l = n([\n                                                \"color\",\n                                                \"background\",\n                                                \"size\",\n                                            ]),\n                                            c = l.next();\n                                        !c.done;\n                                        c = l.next()\n                                    ) {\n                                        var u = c.value;\n                                        s[u] && (a[\"math\" + u] = s[u]);\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        c &&\n                                            !c.done &&\n                                            (o = l.return) &&\n                                            o.call(l);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                                t.Push(t.create(\"node\", \"mtext\", [], a, i));\n                            },\n                        },\n                        options: {\n                            noundefined: {\n                                color: \"red\",\n                                background: \"\",\n                                size: \"\",\n                            },\n                        },\n                        priority: 3,\n                    }\n                );\n            },\n            7741: function (t, e, r) {\n                var n =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    s =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.RequireConfiguration =\n                        e.options =\n                        e.RequireMethods =\n                        e.RequireLoad =\n                            void 0);\n                var a = r(9899),\n                    l = r(9140),\n                    c = s(r(3971)),\n                    u = r(9515),\n                    p = r(265),\n                    h = r(235),\n                    f = r(5713),\n                    d = r(7233),\n                    m = u.MathJax.config;\n                function y(t, e) {\n                    var r,\n                        o = t.parseOptions.options.require,\n                        i = t.parseOptions.packageData.get(\"require\").required,\n                        s = e.substr(o.prefix.length);\n                    if (i.indexOf(s) < 0) {\n                        i.push(s),\n                            (function (t, e) {\n                                var r, o;\n                                void 0 === e && (e = []);\n                                var i = t.parseOptions.options.require.prefix;\n                                try {\n                                    for (\n                                        var s = n(e), a = s.next();\n                                        !a.done;\n                                        a = s.next()\n                                    ) {\n                                        var l = a.value;\n                                        l.substr(0, i.length) === i && y(t, l);\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        a &&\n                                            !a.done &&\n                                            (o = s.return) &&\n                                            o.call(s);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                            })(t, h.CONFIG.dependencies[e]);\n                        var l = a.ConfigurationHandler.get(s);\n                        if (l) {\n                            var c = m[e] || {};\n                            l.options &&\n                                1 === Object.keys(l.options).length &&\n                                l.options[s] &&\n                                (((r = {})[s] = c), (c = r)),\n                                t.configuration.add(s, t, c);\n                            var u =\n                                t.parseOptions.packageData.get(\n                                    \"require\"\n                                ).configured;\n                            l.preprocessors.length &&\n                                !u.has(s) &&\n                                (u.set(s, !0),\n                                f.mathjax.retryAfter(Promise.resolve()));\n                        }\n                    }\n                }\n                function g(t, e) {\n                    var r = t.options.require,\n                        n = r.allow,\n                        o = (\"[\" === e.substr(0, 1) ? \"\" : r.prefix) + e;\n                    if (\n                        !(n.hasOwnProperty(o)\n                            ? n[o]\n                            : n.hasOwnProperty(e)\n                              ? n[e]\n                              : r.defaultAllow)\n                    )\n                        throw new c.default(\n                            \"BadRequire\",\n                            'Extension \"%1\" is not allowed to be loaded',\n                            o\n                        );\n                    p.Package.packages.has(o)\n                        ? y(t.configuration.packageData.get(\"require\").jax, o)\n                        : f.mathjax.retryAfter(h.Loader.load(o));\n                }\n                (e.RequireLoad = g),\n                    (e.RequireMethods = {\n                        Require: function (t, e) {\n                            var r = t.GetArgument(e);\n                            if (r.match(/[^_a-zA-Z0-9]/) || \"\" === r)\n                                throw new c.default(\n                                    \"BadPackageName\",\n                                    \"Argument for %1 is not a valid package name\",\n                                    e\n                                );\n                            g(t, r);\n                        },\n                    }),\n                    (e.options = {\n                        require: {\n                            allow: (0, d.expandable)({\n                                base: !1,\n                                \"all-packages\": !1,\n                                autoload: !1,\n                                configmacros: !1,\n                                tagformat: !1,\n                                setoptions: !1,\n                            }),\n                            defaultAllow: !0,\n                            prefix: \"tex\",\n                        },\n                    }),\n                    new l.CommandMap(\n                        \"require\",\n                        { require: \"Require\" },\n                        e.RequireMethods\n                    ),\n                    (e.RequireConfiguration = a.Configuration.create(\n                        \"require\",\n                        {\n                            handler: { macro: [\"require\"] },\n                            config: function (t, e) {\n                                e.parseOptions.packageData.set(\"require\", {\n                                    jax: e,\n                                    required: i([], o(e.options.packages), !1),\n                                    configured: new Map(),\n                                });\n                                var r = e.parseOptions.options.require,\n                                    n = r.prefix;\n                                if (n.match(/[^_a-zA-Z0-9]/))\n                                    throw Error(\n                                        \"Illegal characters used in \\\\require prefix\"\n                                    );\n                                h.CONFIG.paths[n] ||\n                                    (h.CONFIG.paths[n] =\n                                        \"[mathjax]/input/tex/extensions\"),\n                                    (r.prefix = \"[\" + n + \"]/\");\n                            },\n                            options: e.options,\n                        }\n                    ));\n            },\n            5713: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.mathjax = void 0);\n                var n = r(3282),\n                    o = r(805),\n                    i = r(4542);\n                e.mathjax = {\n                    version: n.VERSION,\n                    handlers: new o.HandlerList(),\n                    document: function (t, r) {\n                        return e.mathjax.handlers.document(t, r);\n                    },\n                    handleRetriesFor: i.handleRetriesFor,\n                    retryAfter: i.retryAfter,\n                    asyncLoad: null,\n                };\n            },\n            50: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    a =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    l =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        s(e, t, r);\n                            return a(e, t), e;\n                        },\n                    c =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTML = void 0);\n                var u = r(3055),\n                    p = r(4139),\n                    h = r(9261),\n                    f = r(6797),\n                    d = r(2760),\n                    m = l(r(6010)),\n                    y = r(505),\n                    g = (function (t) {\n                        function e(e) {\n                            void 0 === e && (e = null);\n                            var r =\n                                t.call(\n                                    this,\n                                    e,\n                                    h.CHTMLWrapperFactory,\n                                    d.TeXFont\n                                ) || this;\n                            return (\n                                (r.chtmlStyles = null),\n                                r.font.adaptiveCSS(r.options.adaptiveCSS),\n                                (r.wrapperUsage = new f.Usage()),\n                                r\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.escaped = function (t, e) {\n                                return (\n                                    this.setDocument(e),\n                                    this.html(\"span\", {}, [this.text(t.math)])\n                                );\n                            }),\n                            (e.prototype.styleSheet = function (r) {\n                                if (this.chtmlStyles) {\n                                    if (this.options.adaptiveCSS) {\n                                        var n = new p.CssStyles();\n                                        this.addWrapperStyles(n),\n                                            this.updateFontStyles(n),\n                                            this.adaptor.insertRules(\n                                                this.chtmlStyles,\n                                                n.getStyleRules()\n                                            );\n                                    }\n                                    return this.chtmlStyles;\n                                }\n                                var o = (this.chtmlStyles =\n                                    t.prototype.styleSheet.call(this, r));\n                                return (\n                                    this.adaptor.setAttribute(\n                                        o,\n                                        \"id\",\n                                        e.STYLESHEETID\n                                    ),\n                                    this.wrapperUsage.update(),\n                                    o\n                                );\n                            }),\n                            (e.prototype.updateFontStyles = function (t) {\n                                t.addStyles(this.font.updateStyles({}));\n                            }),\n                            (e.prototype.addWrapperStyles = function (e) {\n                                var r, n;\n                                if (this.options.adaptiveCSS)\n                                    try {\n                                        for (\n                                            var o = c(\n                                                    this.wrapperUsage.update()\n                                                ),\n                                                i = o.next();\n                                            !i.done;\n                                            i = o.next()\n                                        ) {\n                                            var s = i.value,\n                                                a =\n                                                    this.factory.getNodeClass(\n                                                        s\n                                                    );\n                                            a && this.addClassStyles(a, e);\n                                        }\n                                    } catch (t) {\n                                        r = { error: t };\n                                    } finally {\n                                        try {\n                                            i &&\n                                                !i.done &&\n                                                (n = o.return) &&\n                                                n.call(o);\n                                        } finally {\n                                            if (r) throw r.error;\n                                        }\n                                    }\n                                else t.prototype.addWrapperStyles.call(this, e);\n                            }),\n                            (e.prototype.addClassStyles = function (e, r) {\n                                var n,\n                                    o = e;\n                                o.autoStyle &&\n                                    \"unknown\" !== o.kind &&\n                                    r.addStyles(\n                                        (((n = {})[\"mjx-\" + o.kind] = {\n                                            display: \"inline-block\",\n                                            \"text-align\": \"left\",\n                                        }),\n                                        n)\n                                    ),\n                                    this.wrapperUsage.add(o.kind),\n                                    t.prototype.addClassStyles.call(this, e, r);\n                            }),\n                            (e.prototype.processMath = function (t, e) {\n                                this.factory.wrap(t).toCHTML(e);\n                            }),\n                            (e.prototype.clearCache = function () {\n                                this.cssStyles.clear(),\n                                    this.font.clearCache(),\n                                    this.wrapperUsage.clear(),\n                                    (this.chtmlStyles = null);\n                            }),\n                            (e.prototype.reset = function () {\n                                this.clearCache();\n                            }),\n                            (e.prototype.unknownText = function (t, e, r) {\n                                void 0 === r && (r = null);\n                                var n = {},\n                                    o = 100 / this.math.metrics.scale;\n                                if (\n                                    (100 !== o &&\n                                        ((n[\"font-size\"] =\n                                            this.fixed(o, 1) + \"%\"),\n                                        (n.padding =\n                                            m.em(75 / o) +\n                                            \" 0 \" +\n                                            m.em(20 / o) +\n                                            \" 0\")),\n                                    \"-explicitFont\" !== e)\n                                ) {\n                                    var i = (0, y.unicodeChars)(t);\n                                    (1 !== i.length ||\n                                        i[0] < 119808 ||\n                                        i[0] > 120831) &&\n                                        this.cssFontStyles(\n                                            this.font.getCssFont(e),\n                                            n\n                                        );\n                                }\n                                if (null !== r) {\n                                    var s = this.math.metrics;\n                                    n.width =\n                                        Math.round(r * s.em * s.scale) + \"px\";\n                                }\n                                return this.html(\n                                    \"mjx-utext\",\n                                    { variant: e, style: n },\n                                    [this.text(t)]\n                                );\n                            }),\n                            (e.prototype.measureTextNode = function (t) {\n                                var e = this.adaptor,\n                                    r = e.clone(t);\n                                e.setStyle(\n                                    r,\n                                    \"font-family\",\n                                    e\n                                        .getStyle(r, \"font-family\")\n                                        .replace(/MJXZERO, /g, \"\")\n                                );\n                                var n = this.html(\n                                    \"mjx-measure-text\",\n                                    {\n                                        style: {\n                                            position: \"absolute\",\n                                            \"white-space\": \"nowrap\",\n                                        },\n                                    },\n                                    [r]\n                                );\n                                e.append(\n                                    e.parent(this.math.start.node),\n                                    this.container\n                                ),\n                                    e.append(this.container, n);\n                                var o =\n                                    e.nodeSize(r, this.math.metrics.em)[0] /\n                                    this.math.metrics.scale;\n                                return (\n                                    e.remove(this.container),\n                                    e.remove(n),\n                                    { w: o, h: 0.75, d: 0.2 }\n                                );\n                            }),\n                            (e.NAME = \"CHTML\"),\n                            (e.OPTIONS = i(i({}, u.CommonOutputJax.OPTIONS), {\n                                adaptiveCSS: !0,\n                                matchFontHeight: !0,\n                            })),\n                            (e.commonStyles = {\n                                'mjx-container[jax=\"CHTML\"]': {\n                                    \"line-height\": 0,\n                                },\n                                'mjx-container [space=\"1\"]': {\n                                    \"margin-left\": \".111em\",\n                                },\n                                'mjx-container [space=\"2\"]': {\n                                    \"margin-left\": \".167em\",\n                                },\n                                'mjx-container [space=\"3\"]': {\n                                    \"margin-left\": \".222em\",\n                                },\n                                'mjx-container [space=\"4\"]': {\n                                    \"margin-left\": \".278em\",\n                                },\n                                'mjx-container [space=\"5\"]': {\n                                    \"margin-left\": \".333em\",\n                                },\n                                'mjx-container [rspace=\"1\"]': {\n                                    \"margin-right\": \".111em\",\n                                },\n                                'mjx-container [rspace=\"2\"]': {\n                                    \"margin-right\": \".167em\",\n                                },\n                                'mjx-container [rspace=\"3\"]': {\n                                    \"margin-right\": \".222em\",\n                                },\n                                'mjx-container [rspace=\"4\"]': {\n                                    \"margin-right\": \".278em\",\n                                },\n                                'mjx-container [rspace=\"5\"]': {\n                                    \"margin-right\": \".333em\",\n                                },\n                                'mjx-container [size=\"s\"]': {\n                                    \"font-size\": \"70.7%\",\n                                },\n                                'mjx-container [size=\"ss\"]': {\n                                    \"font-size\": \"50%\",\n                                },\n                                'mjx-container [size=\"Tn\"]': {\n                                    \"font-size\": \"60%\",\n                                },\n                                'mjx-container [size=\"sm\"]': {\n                                    \"font-size\": \"85%\",\n                                },\n                                'mjx-container [size=\"lg\"]': {\n                                    \"font-size\": \"120%\",\n                                },\n                                'mjx-container [size=\"Lg\"]': {\n                                    \"font-size\": \"144%\",\n                                },\n                                'mjx-container [size=\"LG\"]': {\n                                    \"font-size\": \"173%\",\n                                },\n                                'mjx-container [size=\"hg\"]': {\n                                    \"font-size\": \"207%\",\n                                },\n                                'mjx-container [size=\"HG\"]': {\n                                    \"font-size\": \"249%\",\n                                },\n                                'mjx-container [width=\"full\"]': {\n                                    width: \"100%\",\n                                },\n                                \"mjx-box\": { display: \"inline-block\" },\n                                \"mjx-block\": { display: \"block\" },\n                                \"mjx-itable\": { display: \"inline-table\" },\n                                \"mjx-row\": { display: \"table-row\" },\n                                \"mjx-row > *\": { display: \"table-cell\" },\n                                \"mjx-mtext\": { display: \"inline-block\" },\n                                \"mjx-mstyle\": { display: \"inline-block\" },\n                                \"mjx-merror\": {\n                                    display: \"inline-block\",\n                                    color: \"red\",\n                                    \"background-color\": \"yellow\",\n                                },\n                                \"mjx-mphantom\": { visibility: \"hidden\" },\n                                \"_::-webkit-full-page-media, _:future, :root mjx-container\":\n                                    { \"will-change\": \"opacity\" },\n                            }),\n                            (e.STYLESHEETID = \"MJX-CHTML-styles\"),\n                            e\n                        );\n                    })(u.CommonOutputJax);\n                e.CHTML = g;\n            },\n            8042: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    a =\n                        (this && this.__exportStar) ||\n                        function (t, e) {\n                            for (var r in t)\n                                \"default\" === r ||\n                                    Object.prototype.hasOwnProperty.call(\n                                        e,\n                                        r\n                                    ) ||\n                                    s(e, t, r);\n                        },\n                    l =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    c =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AddCSS = e.CHTMLFontData = void 0);\n                var u = r(5884),\n                    p = r(6797),\n                    h = r(6010);\n                a(r(5884), e);\n                var f = (function (t) {\n                    function e() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (\n                            (e.charUsage = new p.Usage()),\n                            (e.delimUsage = new p.Usage()),\n                            e\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        (e.charOptions = function (e, r) {\n                            return t.charOptions.call(this, e, r);\n                        }),\n                        (e.prototype.adaptiveCSS = function (t) {\n                            this.options.adaptiveCSS = t;\n                        }),\n                        (e.prototype.clearCache = function () {\n                            this.options.adaptiveCSS &&\n                                (this.charUsage.clear(),\n                                this.delimUsage.clear());\n                        }),\n                        (e.prototype.createVariant = function (e, r, n) {\n                            void 0 === r && (r = null),\n                                void 0 === n && (n = null),\n                                t.prototype.createVariant.call(this, e, r, n);\n                            var o = this.constructor;\n                            (this.variant[e].classes =\n                                o.defaultVariantClasses[e]),\n                                (this.variant[e].letter =\n                                    o.defaultVariantLetters[e]);\n                        }),\n                        (e.prototype.defineChars = function (r, n) {\n                            var o, i;\n                            t.prototype.defineChars.call(this, r, n);\n                            var s = this.variant[r].letter;\n                            try {\n                                for (\n                                    var a = l(Object.keys(n)), c = a.next();\n                                    !c.done;\n                                    c = a.next()\n                                ) {\n                                    var u = c.value,\n                                        p = e.charOptions(n, parseInt(u));\n                                    void 0 === p.f && (p.f = s);\n                                }\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    c && !c.done && (i = a.return) && i.call(a);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                        }),\n                        Object.defineProperty(e.prototype, \"styles\", {\n                            get: function () {\n                                var t = this.constructor,\n                                    e = i({}, t.defaultStyles);\n                                return (\n                                    this.addFontURLs(\n                                        e,\n                                        t.defaultFonts,\n                                        this.options.fontURL\n                                    ),\n                                    this.options.adaptiveCSS\n                                        ? this.updateStyles(e)\n                                        : this.allStyles(e),\n                                    e\n                                );\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.updateStyles = function (t) {\n                            var e, r, n, o;\n                            try {\n                                for (\n                                    var i = l(this.delimUsage.update()),\n                                        s = i.next();\n                                    !s.done;\n                                    s = i.next()\n                                ) {\n                                    var a = s.value;\n                                    this.addDelimiterStyles(\n                                        t,\n                                        a,\n                                        this.delimiters[a]\n                                    );\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    s && !s.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            try {\n                                for (\n                                    var u = l(this.charUsage.update()),\n                                        p = u.next();\n                                    !p.done;\n                                    p = u.next()\n                                ) {\n                                    var h = c(p.value, 2),\n                                        f = h[0],\n                                        d = ((a = h[1]), this.variant[f]);\n                                    this.addCharStyles(\n                                        t,\n                                        d.letter,\n                                        a,\n                                        d.chars[a]\n                                    );\n                                }\n                            } catch (t) {\n                                n = { error: t };\n                            } finally {\n                                try {\n                                    p && !p.done && (o = u.return) && o.call(u);\n                                } finally {\n                                    if (n) throw n.error;\n                                }\n                            }\n                            return t;\n                        }),\n                        (e.prototype.allStyles = function (t) {\n                            var e, r, n, o, i, s;\n                            try {\n                                for (\n                                    var a = l(Object.keys(this.delimiters)),\n                                        c = a.next();\n                                    !c.done;\n                                    c = a.next()\n                                ) {\n                                    var u = c.value,\n                                        p = parseInt(u);\n                                    this.addDelimiterStyles(\n                                        t,\n                                        p,\n                                        this.delimiters[p]\n                                    );\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    c && !c.done && (r = a.return) && r.call(a);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            try {\n                                for (\n                                    var h = l(Object.keys(this.variant)),\n                                        f = h.next();\n                                    !f.done;\n                                    f = h.next()\n                                ) {\n                                    var d = f.value,\n                                        m = this.variant[d],\n                                        y = m.letter;\n                                    try {\n                                        for (\n                                            var g =\n                                                    ((i = void 0),\n                                                    l(Object.keys(m.chars))),\n                                                b = g.next();\n                                            !b.done;\n                                            b = g.next()\n                                        ) {\n                                            (u = b.value), (p = parseInt(u));\n                                            var v = m.chars[p];\n                                            (v[3] || {}).smp ||\n                                                (v.length < 4 && (v[3] = {}),\n                                                this.addCharStyles(t, y, p, v));\n                                        }\n                                    } catch (t) {\n                                        i = { error: t };\n                                    } finally {\n                                        try {\n                                            b &&\n                                                !b.done &&\n                                                (s = g.return) &&\n                                                s.call(g);\n                                        } finally {\n                                            if (i) throw i.error;\n                                        }\n                                    }\n                                }\n                            } catch (t) {\n                                n = { error: t };\n                            } finally {\n                                try {\n                                    f && !f.done && (o = h.return) && o.call(h);\n                                } finally {\n                                    if (n) throw n.error;\n                                }\n                            }\n                        }),\n                        (e.prototype.addFontURLs = function (t, e, r) {\n                            var n, o;\n                            try {\n                                for (\n                                    var s = l(Object.keys(e)), a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var c = a.value,\n                                        u = i({}, e[c]);\n                                    (u.src = u.src.replace(/%%URL%%/, r)),\n                                        (t[c] = u);\n                                }\n                            } catch (t) {\n                                n = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (o = s.return) && o.call(s);\n                                } finally {\n                                    if (n) throw n.error;\n                                }\n                            }\n                        }),\n                        (e.prototype.addDelimiterStyles = function (t, e, r) {\n                            var n = this.charSelector(e);\n                            r.c &&\n                                r.c !== e &&\n                                (t[\n                                    \".mjx-stretched mjx-c\" +\n                                        (n = this.charSelector(r.c)) +\n                                        \"::before\"\n                                ] = { content: this.charContent(r.c) }),\n                                r.stretch &&\n                                    (1 === r.dir\n                                        ? this.addDelimiterVStyles(t, n, r)\n                                        : this.addDelimiterHStyles(t, n, r));\n                        }),\n                        (e.prototype.addDelimiterVStyles = function (t, e, r) {\n                            var n = r.HDW,\n                                o = c(r.stretch, 4),\n                                i = o[0],\n                                s = o[1],\n                                a = o[2],\n                                l = o[3],\n                                u = this.addDelimiterVPart(t, e, \"beg\", i, n);\n                            this.addDelimiterVPart(t, e, \"ext\", s, n);\n                            var p = this.addDelimiterVPart(t, e, \"end\", a, n),\n                                h = {};\n                            if (l) {\n                                var f = this.addDelimiterVPart(\n                                    t,\n                                    e,\n                                    \"mid\",\n                                    l,\n                                    n\n                                );\n                                (h.height = \"50%\"),\n                                    (t[\"mjx-stretchy-v\" + e + \" > mjx-mid\"] = {\n                                        \"margin-top\": this.em(-f / 2),\n                                        \"margin-bottom\": this.em(-f / 2),\n                                    });\n                            }\n                            u && (h[\"border-top-width\"] = this.em0(u - 0.03)),\n                                p &&\n                                    ((h[\"border-bottom-width\"] = this.em0(\n                                        p - 0.03\n                                    )),\n                                    (t[\"mjx-stretchy-v\" + e + \" > mjx-end\"] = {\n                                        \"margin-top\": this.em(-p),\n                                    })),\n                                Object.keys(h).length &&\n                                    (t[\"mjx-stretchy-v\" + e + \" > mjx-ext\"] =\n                                        h);\n                        }),\n                        (e.prototype.addDelimiterVPart = function (\n                            t,\n                            e,\n                            r,\n                            n,\n                            o\n                        ) {\n                            if (!n) return 0;\n                            var i = this.getDelimiterData(n),\n                                s = (o[2] - i[2]) / 2,\n                                a = { content: this.charContent(n) };\n                            return (\n                                \"ext\" !== r\n                                    ? (a.padding = this.padding(i, s))\n                                    : ((a.width = this.em0(o[2])),\n                                      s && (a[\"padding-left\"] = this.em0(s))),\n                                (t[\n                                    \"mjx-stretchy-v\" +\n                                        e +\n                                        \" mjx-\" +\n                                        r +\n                                        \" mjx-c::before\"\n                                ] = a),\n                                i[0] + i[1]\n                            );\n                        }),\n                        (e.prototype.addDelimiterHStyles = function (t, e, r) {\n                            var n = c(r.stretch, 4),\n                                o = n[0],\n                                i = n[1],\n                                s = n[2],\n                                a = n[3],\n                                l = r.HDW;\n                            this.addDelimiterHPart(t, e, \"beg\", o, l),\n                                this.addDelimiterHPart(t, e, \"ext\", i, l),\n                                this.addDelimiterHPart(t, e, \"end\", s, l),\n                                a &&\n                                    (this.addDelimiterHPart(t, e, \"mid\", a, l),\n                                    (t[\"mjx-stretchy-h\" + e + \" > mjx-ext\"] = {\n                                        width: \"50%\",\n                                    }));\n                        }),\n                        (e.prototype.addDelimiterHPart = function (\n                            t,\n                            e,\n                            r,\n                            n,\n                            o\n                        ) {\n                            if (n) {\n                                var i = this.getDelimiterData(n)[3],\n                                    s = {\n                                        content:\n                                            i && i.c\n                                                ? '\"' + i.c + '\"'\n                                                : this.charContent(n),\n                                    };\n                                (s.padding = this.padding(o, 0, -o[2])),\n                                    (t[\n                                        \"mjx-stretchy-h\" +\n                                            e +\n                                            \" mjx-\" +\n                                            r +\n                                            \" mjx-c::before\"\n                                    ] = s);\n                            }\n                        }),\n                        (e.prototype.addCharStyles = function (t, e, r, n) {\n                            var o = n[3],\n                                i = void 0 !== o.f ? o.f : e;\n                            t[\n                                \"mjx-c\" +\n                                    this.charSelector(r) +\n                                    (i ? \".TEX-\" + i : \"\") +\n                                    \"::before\"\n                            ] = {\n                                padding: this.padding(n, 0, o.ic || 0),\n                                content:\n                                    null != o.c\n                                        ? '\"' + o.c + '\"'\n                                        : this.charContent(r),\n                            };\n                        }),\n                        (e.prototype.getDelimiterData = function (t) {\n                            return this.getChar(\"-smallop\", t);\n                        }),\n                        (e.prototype.em = function (t) {\n                            return (0, h.em)(t);\n                        }),\n                        (e.prototype.em0 = function (t) {\n                            return (0, h.em)(Math.max(0, t));\n                        }),\n                        (e.prototype.padding = function (t, e, r) {\n                            var n = c(t, 3),\n                                o = n[0],\n                                i = n[1];\n                            return (\n                                void 0 === e && (e = 0),\n                                void 0 === r && (r = 0),\n                                [o, n[2] + r, i, e].map(this.em0).join(\" \")\n                            );\n                        }),\n                        (e.prototype.charContent = function (t) {\n                            return (\n                                '\"' +\n                                (t >= 32 &&\n                                t <= 126 &&\n                                34 !== t &&\n                                39 !== t &&\n                                92 !== t\n                                    ? String.fromCharCode(t)\n                                    : \"\\\\\" + t.toString(16).toUpperCase()) +\n                                '\"'\n                            );\n                        }),\n                        (e.prototype.charSelector = function (t) {\n                            return \".mjx-c\" + t.toString(16).toUpperCase();\n                        }),\n                        (e.OPTIONS = i(i({}, u.FontData.OPTIONS), {\n                            fontURL: \"js/output/chtml/fonts/tex-woff-v2\",\n                        })),\n                        (e.JAX = \"CHTML\"),\n                        (e.defaultVariantClasses = {}),\n                        (e.defaultVariantLetters = {}),\n                        (e.defaultStyles = {\n                            \"mjx-c::before\": { display: \"block\", width: 0 },\n                        }),\n                        (e.defaultFonts = {\n                            \"@font-face /* 0 */\": {\n                                \"font-family\": \"MJXZERO\",\n                                src: 'url(\"%%URL%%/MathJax_Zero.woff\") format(\"woff\")',\n                            },\n                        }),\n                        e\n                    );\n                })(u.FontData);\n                (e.CHTMLFontData = f),\n                    (e.AddCSS = function (t, e) {\n                        var r, n;\n                        try {\n                            for (\n                                var o = l(Object.keys(e)), i = o.next();\n                                !i.done;\n                                i = o.next()\n                            ) {\n                                var s = i.value,\n                                    a = parseInt(s);\n                                Object.assign(\n                                    u.FontData.charOptions(t, a),\n                                    e[a]\n                                );\n                            }\n                        } catch (t) {\n                            r = { error: t };\n                        } finally {\n                            try {\n                                i && !i.done && (n = o.return) && n.call(o);\n                            } finally {\n                                if (r) throw r.error;\n                            }\n                        }\n                        return t;\n                    });\n            },\n            8270: function (t, e, r) {\n                var n =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    o =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    i =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        n(e, t, r);\n                            return o(e, t), e;\n                        },\n                    s =\n                        (this && this.__exportStar) ||\n                        function (t, e) {\n                            for (var r in t)\n                                \"default\" === r ||\n                                    Object.prototype.hasOwnProperty.call(\n                                        e,\n                                        r\n                                    ) ||\n                                    n(e, t, r);\n                        },\n                    a =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Arrow =\n                        e.DiagonalArrow =\n                        e.DiagonalStrike =\n                        e.Border2 =\n                        e.Border =\n                        e.RenderElement =\n                            void 0);\n                var l = i(r(5552));\n                s(r(5552), e);\n                e.RenderElement = function (t, e) {\n                    return (\n                        void 0 === e && (e = \"\"),\n                        function (r, n) {\n                            var o = r.adjustBorder(r.html(\"mjx-\" + t));\n                            if (e) {\n                                var i = r.getOffset(e);\n                                if (r.thickness !== l.THICKNESS || i) {\n                                    var s = \"translate\"\n                                        .concat(e, \"(\")\n                                        .concat(r.em(r.thickness / 2 - i), \")\");\n                                    r.adaptor.setStyle(o, \"transform\", s);\n                                }\n                            }\n                            r.adaptor.append(r.chtml, o);\n                        }\n                    );\n                };\n                e.Border = function (t) {\n                    return l.CommonBorder(function (e, r) {\n                        e.adaptor.setStyle(\n                            r,\n                            \"border-\" + t,\n                            e.em(e.thickness) + \" solid\"\n                        );\n                    })(t);\n                };\n                e.Border2 = function (t, e, r) {\n                    return l.CommonBorder2(function (t, n) {\n                        var o = t.em(t.thickness) + \" solid\";\n                        t.adaptor.setStyle(n, \"border-\" + e, o),\n                            t.adaptor.setStyle(n, \"border-\" + r, o);\n                    })(t, e, r);\n                };\n                e.DiagonalStrike = function (t, e) {\n                    return l.CommonDiagonalStrike(function (t) {\n                        return function (r, n) {\n                            var o = r.getBBox(),\n                                i = o.w,\n                                s = o.h,\n                                l = o.d,\n                                c = a(r.getArgMod(i, s + l), 2),\n                                u = c[0],\n                                p = c[1],\n                                h = (e * r.thickness) / 2,\n                                f = r.adjustBorder(\n                                    r.html(t, {\n                                        style: {\n                                            width: r.em(p),\n                                            transform:\n                                                \"rotate(\" +\n                                                r.fixed(-e * u) +\n                                                \"rad) translateY(\" +\n                                                h +\n                                                \"em)\",\n                                        },\n                                    })\n                                );\n                            r.adaptor.append(r.chtml, f);\n                        };\n                    })(t);\n                };\n                e.DiagonalArrow = function (t) {\n                    return l.CommonDiagonalArrow(function (t, e) {\n                        t.adaptor.append(t.chtml, e);\n                    })(t);\n                };\n                e.Arrow = function (t) {\n                    return l.CommonArrow(function (t, e) {\n                        t.adaptor.append(t.chtml, e);\n                    })(t);\n                };\n            },\n            6797: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Usage = void 0);\n                var r = (function () {\n                    function t() {\n                        (this.used = new Set()), (this.needsUpdate = []);\n                    }\n                    return (\n                        (t.prototype.add = function (t) {\n                            var e = JSON.stringify(t);\n                            this.used.has(e) || this.needsUpdate.push(t),\n                                this.used.add(e);\n                        }),\n                        (t.prototype.has = function (t) {\n                            return this.used.has(JSON.stringify(t));\n                        }),\n                        (t.prototype.clear = function () {\n                            this.used.clear(), (this.needsUpdate = []);\n                        }),\n                        (t.prototype.update = function () {\n                            var t = this.needsUpdate;\n                            return (this.needsUpdate = []), t;\n                        }),\n                        t\n                    );\n                })();\n                e.Usage = r;\n            },\n            5355: function (t, e, r) {\n                var n,\n                    o,\n                    i =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    s =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    a =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    l =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        s(e, t, r);\n                            return a(e, t), e;\n                        },\n                    c =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    u =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLWrapper = e.SPACE = e.FONTSIZE = void 0);\n                var p = l(r(6010)),\n                    h = r(7519),\n                    f = r(6469);\n                (e.FONTSIZE = {\n                    \"70.7%\": \"s\",\n                    \"70%\": \"s\",\n                    \"50%\": \"ss\",\n                    \"60%\": \"Tn\",\n                    \"85%\": \"sm\",\n                    \"120%\": \"lg\",\n                    \"144%\": \"Lg\",\n                    \"173%\": \"LG\",\n                    \"207%\": \"hg\",\n                    \"249%\": \"HG\",\n                }),\n                    (e.SPACE =\n                        (((o = {})[p.em(2 / 18)] = \"1\"),\n                        (o[p.em(3 / 18)] = \"2\"),\n                        (o[p.em(4 / 18)] = \"3\"),\n                        (o[p.em(5 / 18)] = \"4\"),\n                        (o[p.em(6 / 18)] = \"5\"),\n                        o));\n                var d = (function (t) {\n                    function r() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (e.chtml = null), e;\n                    }\n                    return (\n                        i(r, t),\n                        (r.prototype.toCHTML = function (t) {\n                            var e,\n                                r,\n                                n = this.standardCHTMLnode(t);\n                            try {\n                                for (\n                                    var o = c(this.childNodes), i = o.next();\n                                    !i.done;\n                                    i = o.next()\n                                ) {\n                                    i.value.toCHTML(n);\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    i && !i.done && (r = o.return) && r.call(o);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                        }),\n                        (r.prototype.standardCHTMLnode = function (t) {\n                            this.markUsed();\n                            var e = this.createCHTMLnode(t);\n                            return (\n                                this.handleStyles(),\n                                this.handleVariant(),\n                                this.handleScale(),\n                                this.handleColor(),\n                                this.handleSpace(),\n                                this.handleAttributes(),\n                                this.handlePWidth(),\n                                e\n                            );\n                        }),\n                        (r.prototype.markUsed = function () {\n                            this.jax.wrapperUsage.add(this.kind);\n                        }),\n                        (r.prototype.createCHTMLnode = function (t) {\n                            var e = this.node.attributes.get(\"href\");\n                            return (\n                                e &&\n                                    (t = this.adaptor.append(\n                                        t,\n                                        this.html(\"a\", { href: e })\n                                    )),\n                                (this.chtml = this.adaptor.append(\n                                    t,\n                                    this.html(\"mjx-\" + this.node.kind)\n                                )),\n                                this.chtml\n                            );\n                        }),\n                        (r.prototype.handleStyles = function () {\n                            if (this.styles) {\n                                var t = this.styles.cssText;\n                                if (t) {\n                                    this.adaptor.setAttribute(\n                                        this.chtml,\n                                        \"style\",\n                                        t\n                                    );\n                                    var e = this.styles.get(\"font-family\");\n                                    e &&\n                                        this.adaptor.setStyle(\n                                            this.chtml,\n                                            \"font-family\",\n                                            \"MJXZERO, \" + e\n                                        );\n                                }\n                            }\n                        }),\n                        (r.prototype.handleVariant = function () {\n                            this.node.isToken &&\n                                \"-explicitFont\" !== this.variant &&\n                                this.adaptor.setAttribute(\n                                    this.chtml,\n                                    \"class\",\n                                    (\n                                        this.font.getVariant(this.variant) ||\n                                        this.font.getVariant(\"normal\")\n                                    ).classes\n                                );\n                        }),\n                        (r.prototype.handleScale = function () {\n                            this.setScale(this.chtml, this.bbox.rscale);\n                        }),\n                        (r.prototype.setScale = function (t, r) {\n                            var n = Math.abs(r - 1) < 0.001 ? 1 : r;\n                            if (t && 1 !== n) {\n                                var o = this.percent(n);\n                                e.FONTSIZE[o]\n                                    ? this.adaptor.setAttribute(\n                                          t,\n                                          \"size\",\n                                          e.FONTSIZE[o]\n                                      )\n                                    : this.adaptor.setStyle(t, \"fontSize\", o);\n                            }\n                            return t;\n                        }),\n                        (r.prototype.handleSpace = function () {\n                            var t, r;\n                            try {\n                                for (\n                                    var n = c([\n                                            [\n                                                this.bbox.L,\n                                                \"space\",\n                                                \"marginLeft\",\n                                            ],\n                                            [\n                                                this.bbox.R,\n                                                \"rspace\",\n                                                \"marginRight\",\n                                            ],\n                                        ]),\n                                        o = n.next();\n                                    !o.done;\n                                    o = n.next()\n                                ) {\n                                    var i = o.value,\n                                        s = u(i, 3),\n                                        a = s[0],\n                                        l = s[1],\n                                        p = s[2];\n                                    if (a) {\n                                        var h = this.em(a);\n                                        e.SPACE[h]\n                                            ? this.adaptor.setAttribute(\n                                                  this.chtml,\n                                                  l,\n                                                  e.SPACE[h]\n                                              )\n                                            : this.adaptor.setStyle(\n                                                  this.chtml,\n                                                  p,\n                                                  h\n                                              );\n                                    }\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    o && !o.done && (r = n.return) && r.call(n);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                        }),\n                        (r.prototype.handleColor = function () {\n                            var t = this.node.attributes,\n                                e = t.getExplicit(\"mathcolor\"),\n                                r = t.getExplicit(\"color\"),\n                                n = t.getExplicit(\"mathbackground\"),\n                                o = t.getExplicit(\"background\");\n                            (e || r) &&\n                                this.adaptor.setStyle(\n                                    this.chtml,\n                                    \"color\",\n                                    e || r\n                                ),\n                                (n || o) &&\n                                    this.adaptor.setStyle(\n                                        this.chtml,\n                                        \"backgroundColor\",\n                                        n || o\n                                    );\n                        }),\n                        (r.prototype.handleAttributes = function () {\n                            var t,\n                                e,\n                                n,\n                                o,\n                                i = this.node.attributes,\n                                s = i.getAllDefaults(),\n                                a = r.skipAttributes;\n                            try {\n                                for (\n                                    var l = c(i.getExplicitNames()),\n                                        u = l.next();\n                                    !u.done;\n                                    u = l.next()\n                                ) {\n                                    var p = u.value;\n                                    (!1 !== a[p] &&\n                                        (p in s ||\n                                            a[p] ||\n                                            this.adaptor.hasAttribute(\n                                                this.chtml,\n                                                p\n                                            ))) ||\n                                        this.adaptor.setAttribute(\n                                            this.chtml,\n                                            p,\n                                            i.getExplicit(p)\n                                        );\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    u && !u.done && (e = l.return) && e.call(l);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            if (i.get(\"class\")) {\n                                var h = i.get(\"class\").trim().split(/ +/);\n                                try {\n                                    for (\n                                        var f = c(h), d = f.next();\n                                        !d.done;\n                                        d = f.next()\n                                    ) {\n                                        var m = d.value;\n                                        this.adaptor.addClass(this.chtml, m);\n                                    }\n                                } catch (t) {\n                                    n = { error: t };\n                                } finally {\n                                    try {\n                                        d &&\n                                            !d.done &&\n                                            (o = f.return) &&\n                                            o.call(f);\n                                    } finally {\n                                        if (n) throw n.error;\n                                    }\n                                }\n                            }\n                        }),\n                        (r.prototype.handlePWidth = function () {\n                            this.bbox.pwidth &&\n                                (this.bbox.pwidth === f.BBox.fullWidth\n                                    ? this.adaptor.setAttribute(\n                                          this.chtml,\n                                          \"width\",\n                                          \"full\"\n                                      )\n                                    : this.adaptor.setStyle(\n                                          this.chtml,\n                                          \"width\",\n                                          this.bbox.pwidth\n                                      ));\n                        }),\n                        (r.prototype.setIndent = function (t, e, r) {\n                            var n = this.adaptor;\n                            if (\"center\" === e || \"left\" === e) {\n                                var o = this.getBBox().L;\n                                n.setStyle(t, \"margin-left\", this.em(r + o));\n                            }\n                            if (\"center\" === e || \"right\" === e) {\n                                var i = this.getBBox().R;\n                                n.setStyle(t, \"margin-right\", this.em(-r + i));\n                            }\n                        }),\n                        (r.prototype.drawBBox = function () {\n                            var t = this.getBBox(),\n                                e = t.w,\n                                r = t.h,\n                                n = t.d,\n                                o = t.R,\n                                i = this.html(\n                                    \"mjx-box\",\n                                    {\n                                        style: {\n                                            opacity: 0.25,\n                                            \"margin-left\": this.em(-e - o),\n                                        },\n                                    },\n                                    [\n                                        this.html(\"mjx-box\", {\n                                            style: {\n                                                height: this.em(r),\n                                                width: this.em(e),\n                                                \"background-color\": \"red\",\n                                            },\n                                        }),\n                                        this.html(\"mjx-box\", {\n                                            style: {\n                                                height: this.em(n),\n                                                width: this.em(e),\n                                                \"margin-left\": this.em(-e),\n                                                \"vertical-align\": this.em(-n),\n                                                \"background-color\": \"green\",\n                                            },\n                                        }),\n                                    ]\n                                ),\n                                s = this.chtml || this.parent.chtml,\n                                a = this.adaptor.getAttribute(s, \"size\");\n                            a && this.adaptor.setAttribute(i, \"size\", a);\n                            var l = this.adaptor.getStyle(s, \"fontSize\");\n                            l && this.adaptor.setStyle(i, \"fontSize\", l),\n                                this.adaptor.append(this.adaptor.parent(s), i),\n                                this.adaptor.setStyle(\n                                    s,\n                                    \"backgroundColor\",\n                                    \"#FFEE00\"\n                                );\n                        }),\n                        (r.prototype.html = function (t, e, r) {\n                            return (\n                                void 0 === e && (e = {}),\n                                void 0 === r && (r = []),\n                                this.jax.html(t, e, r)\n                            );\n                        }),\n                        (r.prototype.text = function (t) {\n                            return this.jax.text(t);\n                        }),\n                        (r.prototype.char = function (t) {\n                            return this.font.charSelector(t).substr(1);\n                        }),\n                        (r.kind = \"unknown\"),\n                        (r.autoStyle = !0),\n                        r\n                    );\n                })(h.CommonWrapper);\n                e.CHTMLWrapper = d;\n            },\n            9261: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLWrapperFactory = void 0);\n                var i = r(4420),\n                    s = r(9086),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return o(e, t), (e.defaultNodes = s.CHTMLWrappers), e;\n                    })(i.CommonWrapperFactory);\n                e.CHTMLWrapperFactory = a;\n            },\n            9086: function (t, e, r) {\n                var n;\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLWrappers = void 0);\n                var o = r(5355),\n                    i = r(804),\n                    s = r(1653),\n                    a = r(6287),\n                    l = r(6460),\n                    c = r(4597),\n                    u = r(1259),\n                    p = r(2970),\n                    h = r(5964),\n                    f = r(8147),\n                    d = r(4798),\n                    m = r(2275),\n                    y = r(9063),\n                    g = r(5610),\n                    b = r(8776),\n                    v = r(4300),\n                    _ = r(6590),\n                    S = r(6781),\n                    M = r(8002),\n                    O = r(3571),\n                    x = r(7056),\n                    E = r(8102),\n                    A = r(6911),\n                    C = r(421),\n                    T = r(95),\n                    N = r(1148);\n                e.CHTMLWrappers =\n                    (((n = {})[i.CHTMLmath.kind] = i.CHTMLmath),\n                    (n[d.CHTMLmrow.kind] = d.CHTMLmrow),\n                    (n[d.CHTMLinferredMrow.kind] = d.CHTMLinferredMrow),\n                    (n[s.CHTMLmi.kind] = s.CHTMLmi),\n                    (n[a.CHTMLmo.kind] = a.CHTMLmo),\n                    (n[l.CHTMLmn.kind] = l.CHTMLmn),\n                    (n[c.CHTMLms.kind] = c.CHTMLms),\n                    (n[u.CHTMLmtext.kind] = u.CHTMLmtext),\n                    (n[p.CHTMLmspace.kind] = p.CHTMLmspace),\n                    (n[h.CHTMLmpadded.kind] = h.CHTMLmpadded),\n                    (n[f.CHTMLmenclose.kind] = f.CHTMLmenclose),\n                    (n[y.CHTMLmfrac.kind] = y.CHTMLmfrac),\n                    (n[g.CHTMLmsqrt.kind] = g.CHTMLmsqrt),\n                    (n[b.CHTMLmroot.kind] = b.CHTMLmroot),\n                    (n[v.CHTMLmsub.kind] = v.CHTMLmsub),\n                    (n[v.CHTMLmsup.kind] = v.CHTMLmsup),\n                    (n[v.CHTMLmsubsup.kind] = v.CHTMLmsubsup),\n                    (n[_.CHTMLmunder.kind] = _.CHTMLmunder),\n                    (n[_.CHTMLmover.kind] = _.CHTMLmover),\n                    (n[_.CHTMLmunderover.kind] = _.CHTMLmunderover),\n                    (n[S.CHTMLmmultiscripts.kind] = S.CHTMLmmultiscripts),\n                    (n[m.CHTMLmfenced.kind] = m.CHTMLmfenced),\n                    (n[M.CHTMLmtable.kind] = M.CHTMLmtable),\n                    (n[O.CHTMLmtr.kind] = O.CHTMLmtr),\n                    (n[O.CHTMLmlabeledtr.kind] = O.CHTMLmlabeledtr),\n                    (n[x.CHTMLmtd.kind] = x.CHTMLmtd),\n                    (n[E.CHTMLmaction.kind] = E.CHTMLmaction),\n                    (n[A.CHTMLmglyph.kind] = A.CHTMLmglyph),\n                    (n[C.CHTMLsemantics.kind] = C.CHTMLsemantics),\n                    (n[C.CHTMLannotation.kind] = C.CHTMLannotation),\n                    (n[C.CHTMLannotationXML.kind] = C.CHTMLannotationXML),\n                    (n[C.CHTMLxml.kind] = C.CHTMLxml),\n                    (n[T.CHTMLTeXAtom.kind] = T.CHTMLTeXAtom),\n                    (n[N.CHTMLTextNode.kind] = N.CHTMLTextNode),\n                    (n[o.CHTMLWrapper.kind] = o.CHTMLWrapper),\n                    n);\n            },\n            95: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLTeXAtom = void 0);\n                var i = r(5355),\n                    s = r(9800),\n                    a = r(3948),\n                    l = r(9007),\n                    c = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (e) {\n                                if (\n                                    (t.prototype.toCHTML.call(this, e),\n                                    this.adaptor.setAttribute(\n                                        this.chtml,\n                                        \"texclass\",\n                                        l.TEXCLASSNAMES[this.node.texClass]\n                                    ),\n                                    this.node.texClass === l.TEXCLASS.VCENTER)\n                                ) {\n                                    var r = this.childNodes[0].getBBox(),\n                                        n = r.h,\n                                        o =\n                                            (n + r.d) / 2 +\n                                            this.font.params.axis_height -\n                                            n;\n                                    this.adaptor.setStyle(\n                                        this.chtml,\n                                        \"verticalAlign\",\n                                        this.em(o)\n                                    );\n                                }\n                            }),\n                            (e.kind = a.TeXAtom.prototype.kind),\n                            e\n                        );\n                    })((0, s.CommonTeXAtomMixin)(i.CHTMLWrapper));\n                e.CHTMLTeXAtom = c;\n            },\n            1148: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLTextNode = void 0);\n                var s = r(9007),\n                    a = r(5355),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e, r;\n                                this.markUsed();\n                                var n = this.adaptor,\n                                    o = this.parent.variant,\n                                    s = this.node.getText();\n                                if (0 !== s.length)\n                                    if (\"-explicitFont\" === o)\n                                        n.append(\n                                            t,\n                                            this.jax.unknownText(\n                                                s,\n                                                o,\n                                                this.getBBox().w\n                                            )\n                                        );\n                                    else {\n                                        var a = this.remappedText(s, o);\n                                        try {\n                                            for (\n                                                var l = i(a), c = l.next();\n                                                !c.done;\n                                                c = l.next()\n                                            ) {\n                                                var u = c.value,\n                                                    p = this.getVariantChar(\n                                                        o,\n                                                        u\n                                                    )[3],\n                                                    h = p.f\n                                                        ? \" TEX-\" + p.f\n                                                        : \"\",\n                                                    f = p.unknown\n                                                        ? this.jax.unknownText(\n                                                              String.fromCodePoint(\n                                                                  u\n                                                              ),\n                                                              o\n                                                          )\n                                                        : this.html(\"mjx-c\", {\n                                                              class:\n                                                                  this.char(u) +\n                                                                  h,\n                                                          });\n                                                n.append(t, f),\n                                                    !p.unknown &&\n                                                        this.font.charUsage.add(\n                                                            [o, u]\n                                                        );\n                                            }\n                                        } catch (t) {\n                                            e = { error: t };\n                                        } finally {\n                                            try {\n                                                c &&\n                                                    !c.done &&\n                                                    (r = l.return) &&\n                                                    r.call(l);\n                                            } finally {\n                                                if (e) throw e.error;\n                                            }\n                                        }\n                                    }\n                            }),\n                            (e.kind = s.TextNode.prototype.kind),\n                            (e.autoStyle = !1),\n                            (e.styles = {\n                                \"mjx-c\": { display: \"inline-block\" },\n                                \"mjx-utext\": {\n                                    display: \"inline-block\",\n                                    padding: \".75em 0 .2em 0\",\n                                },\n                            }),\n                            e\n                        );\n                    })((0, r(1160).CommonTextNodeMixin)(a.CHTMLWrapper));\n                e.CHTMLTextNode = l;\n            },\n            8102: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmaction = void 0);\n                var i = r(5355),\n                    s = r(1956),\n                    a = r(1956),\n                    l = r(9145),\n                    c = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e = this.standardCHTMLnode(t);\n                                this.selected.toCHTML(e),\n                                    this.action(this, this.data);\n                            }),\n                            (e.prototype.setEventHandler = function (t, e) {\n                                this.chtml.addEventListener(t, e);\n                            }),\n                            (e.kind = l.MmlMaction.prototype.kind),\n                            (e.styles = {\n                                \"mjx-maction\": { position: \"relative\" },\n                                \"mjx-maction > mjx-tool\": {\n                                    display: \"none\",\n                                    position: \"absolute\",\n                                    bottom: 0,\n                                    right: 0,\n                                    width: 0,\n                                    height: 0,\n                                    \"z-index\": 500,\n                                },\n                                \"mjx-tool > mjx-tip\": {\n                                    display: \"inline-block\",\n                                    padding: \".2em\",\n                                    border: \"1px solid #888\",\n                                    \"font-size\": \"70%\",\n                                    \"background-color\": \"#F8F8F8\",\n                                    color: \"black\",\n                                    \"box-shadow\": \"2px 2px 5px #AAAAAA\",\n                                },\n                                \"mjx-maction[toggle]\": { cursor: \"pointer\" },\n                                \"mjx-status\": {\n                                    display: \"block\",\n                                    position: \"fixed\",\n                                    left: \"1em\",\n                                    bottom: \"1em\",\n                                    \"min-width\": \"25%\",\n                                    padding: \".2em .4em\",\n                                    border: \"1px solid #888\",\n                                    \"font-size\": \"90%\",\n                                    \"background-color\": \"#F8F8F8\",\n                                    color: \"black\",\n                                },\n                            }),\n                            (e.actions = new Map([\n                                [\n                                    \"toggle\",\n                                    [\n                                        function (t, e) {\n                                            t.adaptor.setAttribute(\n                                                t.chtml,\n                                                \"toggle\",\n                                                t.node.attributes.get(\n                                                    \"selection\"\n                                                )\n                                            );\n                                            var r = t.factory.jax.math,\n                                                n = t.factory.jax.document,\n                                                o = t.node;\n                                            t.setEventHandler(\n                                                \"click\",\n                                                function (t) {\n                                                    r.end.node ||\n                                                        ((r.start.node =\n                                                            r.end.node =\n                                                                r.typesetRoot),\n                                                        (r.start.n = r.end.n =\n                                                            0)),\n                                                        o.nextToggleSelection(),\n                                                        r.rerender(n),\n                                                        t.stopPropagation();\n                                                }\n                                            );\n                                        },\n                                        {},\n                                    ],\n                                ],\n                                [\n                                    \"tooltip\",\n                                    [\n                                        function (t, e) {\n                                            var r = t.childNodes[1];\n                                            if (r)\n                                                if (r.node.isKind(\"mtext\")) {\n                                                    var n = r.node.getText();\n                                                    t.adaptor.setAttribute(\n                                                        t.chtml,\n                                                        \"title\",\n                                                        n\n                                                    );\n                                                } else {\n                                                    var o = t.adaptor,\n                                                        i = o.append(\n                                                            t.chtml,\n                                                            t.html(\n                                                                \"mjx-tool\",\n                                                                {\n                                                                    style: {\n                                                                        bottom: t.em(\n                                                                            -t.dy\n                                                                        ),\n                                                                        right: t.em(\n                                                                            -t.dx\n                                                                        ),\n                                                                    },\n                                                                },\n                                                                [\n                                                                    t.html(\n                                                                        \"mjx-tip\"\n                                                                    ),\n                                                                ]\n                                                            )\n                                                        );\n                                                    r.toCHTML(o.firstChild(i)),\n                                                        t.setEventHandler(\n                                                            \"mouseover\",\n                                                            function (r) {\n                                                                e.stopTimers(\n                                                                    t,\n                                                                    e\n                                                                );\n                                                                var n =\n                                                                    setTimeout(\n                                                                        function () {\n                                                                            return o.setStyle(\n                                                                                i,\n                                                                                \"display\",\n                                                                                \"block\"\n                                                                            );\n                                                                        },\n                                                                        e.postDelay\n                                                                    );\n                                                                e.hoverTimer.set(\n                                                                    t,\n                                                                    n\n                                                                ),\n                                                                    r.stopPropagation();\n                                                            }\n                                                        ),\n                                                        t.setEventHandler(\n                                                            \"mouseout\",\n                                                            function (r) {\n                                                                e.stopTimers(\n                                                                    t,\n                                                                    e\n                                                                );\n                                                                var n =\n                                                                    setTimeout(\n                                                                        function () {\n                                                                            return o.setStyle(\n                                                                                i,\n                                                                                \"display\",\n                                                                                \"\"\n                                                                            );\n                                                                        },\n                                                                        e.clearDelay\n                                                                    );\n                                                                e.clearTimer.set(\n                                                                    t,\n                                                                    n\n                                                                ),\n                                                                    r.stopPropagation();\n                                                            }\n                                                        );\n                                                }\n                                        },\n                                        a.TooltipData,\n                                    ],\n                                ],\n                                [\n                                    \"statusline\",\n                                    [\n                                        function (t, e) {\n                                            var r = t.childNodes[1];\n                                            if (r && r.node.isKind(\"mtext\")) {\n                                                var n = t.adaptor,\n                                                    o = r.node.getText();\n                                                n.setAttribute(\n                                                    t.chtml,\n                                                    \"statusline\",\n                                                    o\n                                                ),\n                                                    t.setEventHandler(\n                                                        \"mouseover\",\n                                                        function (r) {\n                                                            if (\n                                                                null ===\n                                                                e.status\n                                                            ) {\n                                                                var i = n.body(\n                                                                    n.document\n                                                                );\n                                                                e.status =\n                                                                    n.append(\n                                                                        i,\n                                                                        t.html(\n                                                                            \"mjx-status\",\n                                                                            {},\n                                                                            [\n                                                                                t.text(\n                                                                                    o\n                                                                                ),\n                                                                            ]\n                                                                        )\n                                                                    );\n                                                            }\n                                                            r.stopPropagation();\n                                                        }\n                                                    ),\n                                                    t.setEventHandler(\n                                                        \"mouseout\",\n                                                        function (t) {\n                                                            e.status &&\n                                                                (n.remove(\n                                                                    e.status\n                                                                ),\n                                                                (e.status =\n                                                                    null)),\n                                                                t.stopPropagation();\n                                                        }\n                                                    );\n                                            }\n                                        },\n                                        { status: null },\n                                    ],\n                                ],\n                            ])),\n                            e\n                        );\n                    })((0, s.CommonMactionMixin)(i.CHTMLWrapper));\n                e.CHTMLmaction = c;\n            },\n            804: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmath = void 0);\n                var s = r(5355),\n                    a = r(7490),\n                    l = r(3233),\n                    c = r(6469),\n                    u = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (e) {\n                                t.prototype.toCHTML.call(this, e);\n                                var r = this.chtml,\n                                    n = this.adaptor;\n                                \"block\" === this.node.attributes.get(\"display\")\n                                    ? (n.setAttribute(r, \"display\", \"true\"),\n                                      n.setAttribute(e, \"display\", \"true\"),\n                                      this.handleDisplay(e))\n                                    : this.handleInline(e),\n                                    n.addClass(r, \"MJX-TEX\");\n                            }),\n                            (e.prototype.handleDisplay = function (t) {\n                                var e = this.adaptor,\n                                    r = i(this.getAlignShift(), 2),\n                                    n = r[0],\n                                    o = r[1];\n                                if (\n                                    (\"center\" !== n &&\n                                        e.setAttribute(t, \"justify\", n),\n                                    this.bbox.pwidth === c.BBox.fullWidth)\n                                ) {\n                                    if (\n                                        (e.setAttribute(t, \"width\", \"full\"),\n                                        this.jax.table)\n                                    ) {\n                                        var s = this.jax.table.getOuterBBox(),\n                                            a = s.L,\n                                            l = s.w,\n                                            u = s.R;\n                                        \"right\" === n\n                                            ? (u = Math.max(u || -o, -o))\n                                            : \"left\" === n\n                                              ? (a = Math.max(a || o, o))\n                                              : \"center\" === n &&\n                                                (l += 2 * Math.abs(o));\n                                        var p = this.em(Math.max(0, a + l + u));\n                                        e.setStyle(t, \"min-width\", p),\n                                            e.setStyle(\n                                                this.jax.table.chtml,\n                                                \"min-width\",\n                                                p\n                                            );\n                                    }\n                                } else this.setIndent(this.chtml, n, o);\n                            }),\n                            (e.prototype.handleInline = function (t) {\n                                var e = this.adaptor,\n                                    r = e.getStyle(this.chtml, \"margin-right\");\n                                r &&\n                                    (e.setStyle(this.chtml, \"margin-right\", \"\"),\n                                    e.setStyle(t, \"margin-right\", r),\n                                    e.setStyle(t, \"width\", \"0\"));\n                            }),\n                            (e.prototype.setChildPWidths = function (e, r, n) {\n                                return (\n                                    void 0 === r && (r = null),\n                                    void 0 === n && (n = !0),\n                                    !!this.parent &&\n                                        t.prototype.setChildPWidths.call(\n                                            this,\n                                            e,\n                                            r,\n                                            n\n                                        )\n                                );\n                            }),\n                            (e.kind = l.MmlMath.prototype.kind),\n                            (e.styles = {\n                                \"mjx-math\": {\n                                    \"line-height\": 0,\n                                    \"text-align\": \"left\",\n                                    \"text-indent\": 0,\n                                    \"font-style\": \"normal\",\n                                    \"font-weight\": \"normal\",\n                                    \"font-size\": \"100%\",\n                                    \"font-size-adjust\": \"none\",\n                                    \"letter-spacing\": \"normal\",\n                                    \"border-collapse\": \"collapse\",\n                                    \"word-wrap\": \"normal\",\n                                    \"word-spacing\": \"normal\",\n                                    \"white-space\": \"nowrap\",\n                                    direction: \"ltr\",\n                                    padding: \"1px 0\",\n                                },\n                                'mjx-container[jax=\"CHTML\"][display=\"true\"]': {\n                                    display: \"block\",\n                                    \"text-align\": \"center\",\n                                    margin: \"1em 0\",\n                                },\n                                'mjx-container[jax=\"CHTML\"][display=\"true\"][width=\"full\"]':\n                                    { display: \"flex\" },\n                                'mjx-container[jax=\"CHTML\"][display=\"true\"] mjx-math':\n                                    { padding: 0 },\n                                'mjx-container[jax=\"CHTML\"][justify=\"left\"]': {\n                                    \"text-align\": \"left\",\n                                },\n                                'mjx-container[jax=\"CHTML\"][justify=\"right\"]': {\n                                    \"text-align\": \"right\",\n                                },\n                            }),\n                            e\n                        );\n                    })((0, a.CommonMathMixin)(s.CHTMLWrapper));\n                e.CHTMLmath = u;\n            },\n            8147: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    s =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    a =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        i(e, t, r);\n                            return s(e, t), e;\n                        },\n                    l =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    c =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmenclose = void 0);\n                var u = r(5355),\n                    p = r(7313),\n                    h = a(r(8270)),\n                    f = r(6661),\n                    d = r(6010);\n                function m(t, e) {\n                    return Math.atan2(t, e)\n                        .toFixed(3)\n                        .replace(/\\.?0+$/, \"\");\n                }\n                var y = m(h.ARROWDX, h.ARROWY),\n                    g = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e,\n                                    r,\n                                    n,\n                                    o,\n                                    i = this.adaptor,\n                                    s = this.standardCHTMLnode(t),\n                                    a = i.append(s, this.html(\"mjx-box\"));\n                                this.renderChild\n                                    ? this.renderChild(this, a)\n                                    : this.childNodes[0].toCHTML(a);\n                                try {\n                                    for (\n                                        var c = l(Object.keys(this.notations)),\n                                            u = c.next();\n                                        !u.done;\n                                        u = c.next()\n                                    ) {\n                                        var p = u.value,\n                                            f = this.notations[p];\n                                        !f.renderChild && f.renderer(this, a);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        u &&\n                                            !u.done &&\n                                            (r = c.return) &&\n                                            r.call(c);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                var d = this.getPadding();\n                                try {\n                                    for (\n                                        var m = l(h.sideNames), y = m.next();\n                                        !y.done;\n                                        y = m.next()\n                                    ) {\n                                        var g = y.value,\n                                            b = h.sideIndex[g];\n                                        d[b] > 0 &&\n                                            i.setStyle(\n                                                a,\n                                                \"padding-\" + g,\n                                                this.em(d[b])\n                                            );\n                                    }\n                                } catch (t) {\n                                    n = { error: t };\n                                } finally {\n                                    try {\n                                        y &&\n                                            !y.done &&\n                                            (o = m.return) &&\n                                            o.call(m);\n                                    } finally {\n                                        if (n) throw n.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.arrow = function (t, e, r, n, o) {\n                                void 0 === n && (n = \"\"),\n                                    void 0 === o && (o = 0);\n                                var i = this.getBBox().w,\n                                    s = { width: this.em(t) };\n                                i !== t && (s.left = this.em((i - t) / 2)),\n                                    e &&\n                                        (s.transform =\n                                            \"rotate(\" + this.fixed(e) + \"rad)\");\n                                var a = this.html(\"mjx-arrow\", { style: s }, [\n                                    this.html(\"mjx-aline\"),\n                                    this.html(\"mjx-rthead\"),\n                                    this.html(\"mjx-rbhead\"),\n                                ]);\n                                return (\n                                    r &&\n                                        (this.adaptor.append(\n                                            a,\n                                            this.html(\"mjx-lthead\")\n                                        ),\n                                        this.adaptor.append(\n                                            a,\n                                            this.html(\"mjx-lbhead\")\n                                        ),\n                                        this.adaptor.setAttribute(\n                                            a,\n                                            \"double\",\n                                            \"true\"\n                                        )),\n                                    this.adjustArrow(a, r),\n                                    this.moveArrow(a, n, o),\n                                    a\n                                );\n                            }),\n                            (e.prototype.adjustArrow = function (t, e) {\n                                var r = this,\n                                    n = this.thickness,\n                                    o = this.arrowhead;\n                                if (\n                                    o.x !== h.ARROWX ||\n                                    o.y !== h.ARROWY ||\n                                    o.dx !== h.ARROWDX ||\n                                    n !== h.THICKNESS\n                                ) {\n                                    var i = c(\n                                            [n * o.x, n * o.y].map(\n                                                function (t) {\n                                                    return r.em(t);\n                                                }\n                                            ),\n                                            2\n                                        ),\n                                        s = i[0],\n                                        a = i[1],\n                                        l = m(o.dx, o.y),\n                                        u = c(this.adaptor.childNodes(t), 5),\n                                        p = u[0],\n                                        f = u[1],\n                                        d = u[2],\n                                        y = u[3],\n                                        g = u[4];\n                                    this.adjustHead(f, [a, \"0\", \"1px\", s], l),\n                                        this.adjustHead(\n                                            d,\n                                            [\"1px\", \"0\", a, s],\n                                            \"-\" + l\n                                        ),\n                                        this.adjustHead(\n                                            y,\n                                            [a, s, \"1px\", \"0\"],\n                                            \"-\" + l\n                                        ),\n                                        this.adjustHead(\n                                            g,\n                                            [\"1px\", s, a, \"0\"],\n                                            l\n                                        ),\n                                        this.adjustLine(p, n, o.x, e);\n                                }\n                            }),\n                            (e.prototype.adjustHead = function (t, e, r) {\n                                t &&\n                                    (this.adaptor.setStyle(\n                                        t,\n                                        \"border-width\",\n                                        e.join(\" \")\n                                    ),\n                                    this.adaptor.setStyle(\n                                        t,\n                                        \"transform\",\n                                        \"skewX(\" + r + \"rad)\"\n                                    ));\n                            }),\n                            (e.prototype.adjustLine = function (t, e, r, n) {\n                                this.adaptor.setStyle(\n                                    t,\n                                    \"borderTop\",\n                                    this.em(e) + \" solid\"\n                                ),\n                                    this.adaptor.setStyle(\n                                        t,\n                                        \"top\",\n                                        this.em(-e / 2)\n                                    ),\n                                    this.adaptor.setStyle(\n                                        t,\n                                        \"right\",\n                                        this.em(e * (r - 1))\n                                    ),\n                                    n &&\n                                        this.adaptor.setStyle(\n                                            t,\n                                            \"left\",\n                                            this.em(e * (r - 1))\n                                        );\n                            }),\n                            (e.prototype.moveArrow = function (t, e, r) {\n                                if (r) {\n                                    var n = this.adaptor.getStyle(\n                                        t,\n                                        \"transform\"\n                                    );\n                                    this.adaptor.setStyle(\n                                        t,\n                                        \"transform\",\n                                        \"translate\"\n                                            .concat(e, \"(\")\n                                            .concat(this.em(-r), \")\")\n                                            .concat(n ? \" \" + n : \"\")\n                                    );\n                                }\n                            }),\n                            (e.prototype.adjustBorder = function (t) {\n                                return (\n                                    this.thickness !== h.THICKNESS &&\n                                        this.adaptor.setStyle(\n                                            t,\n                                            \"borderWidth\",\n                                            this.em(this.thickness)\n                                        ),\n                                    t\n                                );\n                            }),\n                            (e.prototype.adjustThickness = function (t) {\n                                return (\n                                    this.thickness !== h.THICKNESS &&\n                                        this.adaptor.setStyle(\n                                            t,\n                                            \"strokeWidth\",\n                                            this.fixed(this.thickness)\n                                        ),\n                                    t\n                                );\n                            }),\n                            (e.prototype.fixed = function (t, e) {\n                                return (\n                                    void 0 === e && (e = 3),\n                                    Math.abs(t) < 6e-4\n                                        ? \"0\"\n                                        : t.toFixed(e).replace(/\\.?0+$/, \"\")\n                                );\n                            }),\n                            (e.prototype.em = function (e) {\n                                return t.prototype.em.call(this, e);\n                            }),\n                            (e.kind = f.MmlMenclose.prototype.kind),\n                            (e.styles = {\n                                \"mjx-menclose\": { position: \"relative\" },\n                                \"mjx-menclose > mjx-dstrike\": {\n                                    display: \"inline-block\",\n                                    left: 0,\n                                    top: 0,\n                                    position: \"absolute\",\n                                    \"border-top\": h.SOLID,\n                                    \"transform-origin\": \"top left\",\n                                },\n                                \"mjx-menclose > mjx-ustrike\": {\n                                    display: \"inline-block\",\n                                    left: 0,\n                                    bottom: 0,\n                                    position: \"absolute\",\n                                    \"border-top\": h.SOLID,\n                                    \"transform-origin\": \"bottom left\",\n                                },\n                                \"mjx-menclose > mjx-hstrike\": {\n                                    \"border-top\": h.SOLID,\n                                    position: \"absolute\",\n                                    left: 0,\n                                    right: 0,\n                                    bottom: \"50%\",\n                                    transform:\n                                        \"translateY(\" +\n                                        (0, d.em)(h.THICKNESS / 2) +\n                                        \")\",\n                                },\n                                \"mjx-menclose > mjx-vstrike\": {\n                                    \"border-left\": h.SOLID,\n                                    position: \"absolute\",\n                                    top: 0,\n                                    bottom: 0,\n                                    right: \"50%\",\n                                    transform:\n                                        \"translateX(\" +\n                                        (0, d.em)(h.THICKNESS / 2) +\n                                        \")\",\n                                },\n                                \"mjx-menclose > mjx-rbox\": {\n                                    position: \"absolute\",\n                                    top: 0,\n                                    bottom: 0,\n                                    right: 0,\n                                    left: 0,\n                                    border: h.SOLID,\n                                    \"border-radius\": (0, d.em)(\n                                        h.THICKNESS + h.PADDING\n                                    ),\n                                },\n                                \"mjx-menclose > mjx-cbox\": {\n                                    position: \"absolute\",\n                                    top: 0,\n                                    bottom: 0,\n                                    right: 0,\n                                    left: 0,\n                                    border: h.SOLID,\n                                    \"border-radius\": \"50%\",\n                                },\n                                \"mjx-menclose > mjx-arrow\": {\n                                    position: \"absolute\",\n                                    left: 0,\n                                    bottom: \"50%\",\n                                    height: 0,\n                                    width: 0,\n                                },\n                                \"mjx-menclose > mjx-arrow > *\": {\n                                    display: \"block\",\n                                    position: \"absolute\",\n                                    \"transform-origin\": \"bottom\",\n                                    \"border-left\":\n                                        (0, d.em)(h.THICKNESS * h.ARROWX) +\n                                        \" solid\",\n                                    \"border-right\": 0,\n                                    \"box-sizing\": \"border-box\",\n                                },\n                                \"mjx-menclose > mjx-arrow > mjx-aline\": {\n                                    left: 0,\n                                    top: (0, d.em)(-h.THICKNESS / 2),\n                                    right: (0, d.em)(\n                                        h.THICKNESS * (h.ARROWX - 1)\n                                    ),\n                                    height: 0,\n                                    \"border-top\":\n                                        (0, d.em)(h.THICKNESS) + \" solid\",\n                                    \"border-left\": 0,\n                                },\n                                \"mjx-menclose > mjx-arrow[double] > mjx-aline\":\n                                    {\n                                        left: (0, d.em)(\n                                            h.THICKNESS * (h.ARROWX - 1)\n                                        ),\n                                        height: 0,\n                                    },\n                                \"mjx-menclose > mjx-arrow > mjx-rthead\": {\n                                    transform: \"skewX(\" + y + \"rad)\",\n                                    right: 0,\n                                    bottom: \"-1px\",\n                                    \"border-bottom\": \"1px solid transparent\",\n                                    \"border-top\":\n                                        (0, d.em)(h.THICKNESS * h.ARROWY) +\n                                        \" solid transparent\",\n                                },\n                                \"mjx-menclose > mjx-arrow > mjx-rbhead\": {\n                                    transform: \"skewX(-\" + y + \"rad)\",\n                                    \"transform-origin\": \"top\",\n                                    right: 0,\n                                    top: \"-1px\",\n                                    \"border-top\": \"1px solid transparent\",\n                                    \"border-bottom\":\n                                        (0, d.em)(h.THICKNESS * h.ARROWY) +\n                                        \" solid transparent\",\n                                },\n                                \"mjx-menclose > mjx-arrow > mjx-lthead\": {\n                                    transform: \"skewX(-\" + y + \"rad)\",\n                                    left: 0,\n                                    bottom: \"-1px\",\n                                    \"border-left\": 0,\n                                    \"border-right\":\n                                        (0, d.em)(h.THICKNESS * h.ARROWX) +\n                                        \" solid\",\n                                    \"border-bottom\": \"1px solid transparent\",\n                                    \"border-top\":\n                                        (0, d.em)(h.THICKNESS * h.ARROWY) +\n                                        \" solid transparent\",\n                                },\n                                \"mjx-menclose > mjx-arrow > mjx-lbhead\": {\n                                    transform: \"skewX(\" + y + \"rad)\",\n                                    \"transform-origin\": \"top\",\n                                    left: 0,\n                                    top: \"-1px\",\n                                    \"border-left\": 0,\n                                    \"border-right\":\n                                        (0, d.em)(h.THICKNESS * h.ARROWX) +\n                                        \" solid\",\n                                    \"border-top\": \"1px solid transparent\",\n                                    \"border-bottom\":\n                                        (0, d.em)(h.THICKNESS * h.ARROWY) +\n                                        \" solid transparent\",\n                                },\n                                \"mjx-menclose > dbox\": {\n                                    position: \"absolute\",\n                                    top: 0,\n                                    bottom: 0,\n                                    left: (0, d.em)(-1.5 * h.PADDING),\n                                    width: (0, d.em)(3 * h.PADDING),\n                                    border: (0, d.em)(h.THICKNESS) + \" solid\",\n                                    \"border-radius\": \"50%\",\n                                    \"clip-path\":\n                                        \"inset(0 0 0 \" +\n                                        (0, d.em)(1.5 * h.PADDING) +\n                                        \")\",\n                                    \"box-sizing\": \"border-box\",\n                                },\n                            }),\n                            (e.notations = new Map([\n                                h.Border(\"top\"),\n                                h.Border(\"right\"),\n                                h.Border(\"bottom\"),\n                                h.Border(\"left\"),\n                                h.Border2(\"actuarial\", \"top\", \"right\"),\n                                h.Border2(\"madruwb\", \"bottom\", \"right\"),\n                                h.DiagonalStrike(\"up\", 1),\n                                h.DiagonalStrike(\"down\", -1),\n                                [\n                                    \"horizontalstrike\",\n                                    {\n                                        renderer: h.RenderElement(\n                                            \"hstrike\",\n                                            \"Y\"\n                                        ),\n                                        bbox: function (t) {\n                                            return [0, t.padding, 0, t.padding];\n                                        },\n                                    },\n                                ],\n                                [\n                                    \"verticalstrike\",\n                                    {\n                                        renderer: h.RenderElement(\n                                            \"vstrike\",\n                                            \"X\"\n                                        ),\n                                        bbox: function (t) {\n                                            return [t.padding, 0, t.padding, 0];\n                                        },\n                                    },\n                                ],\n                                [\n                                    \"box\",\n                                    {\n                                        renderer: function (t, e) {\n                                            t.adaptor.setStyle(\n                                                e,\n                                                \"border\",\n                                                t.em(t.thickness) + \" solid\"\n                                            );\n                                        },\n                                        bbox: h.fullBBox,\n                                        border: h.fullBorder,\n                                        remove: \"left right top bottom\",\n                                    },\n                                ],\n                                [\n                                    \"roundedbox\",\n                                    {\n                                        renderer: h.RenderElement(\"rbox\"),\n                                        bbox: h.fullBBox,\n                                    },\n                                ],\n                                [\n                                    \"circle\",\n                                    {\n                                        renderer: h.RenderElement(\"cbox\"),\n                                        bbox: h.fullBBox,\n                                    },\n                                ],\n                                [\n                                    \"phasorangle\",\n                                    {\n                                        renderer: function (t, e) {\n                                            var r = t.getBBox(),\n                                                n = r.h,\n                                                o = r.d,\n                                                i = c(\n                                                    t.getArgMod(\n                                                        1.75 * t.padding,\n                                                        n + o\n                                                    ),\n                                                    2\n                                                ),\n                                                s = i[0],\n                                                a = i[1],\n                                                l =\n                                                    t.thickness *\n                                                    Math.sin(s) *\n                                                    0.9;\n                                            t.adaptor.setStyle(\n                                                e,\n                                                \"border-bottom\",\n                                                t.em(t.thickness) + \" solid\"\n                                            );\n                                            var u = t.adjustBorder(\n                                                t.html(\"mjx-ustrike\", {\n                                                    style: {\n                                                        width: t.em(a),\n                                                        transform:\n                                                            \"translateX(\" +\n                                                            t.em(l) +\n                                                            \") rotate(\" +\n                                                            t.fixed(-s) +\n                                                            \"rad)\",\n                                                    },\n                                                })\n                                            );\n                                            t.adaptor.append(t.chtml, u);\n                                        },\n                                        bbox: function (t) {\n                                            var e = t.padding / 2,\n                                                r = t.thickness;\n                                            return [2 * e, e, e + r, 3 * e + r];\n                                        },\n                                        border: function (t) {\n                                            return [0, 0, t.thickness, 0];\n                                        },\n                                        remove: \"bottom\",\n                                    },\n                                ],\n                                h.Arrow(\"up\"),\n                                h.Arrow(\"down\"),\n                                h.Arrow(\"left\"),\n                                h.Arrow(\"right\"),\n                                h.Arrow(\"updown\"),\n                                h.Arrow(\"leftright\"),\n                                h.DiagonalArrow(\"updiagonal\"),\n                                h.DiagonalArrow(\"northeast\"),\n                                h.DiagonalArrow(\"southeast\"),\n                                h.DiagonalArrow(\"northwest\"),\n                                h.DiagonalArrow(\"southwest\"),\n                                h.DiagonalArrow(\"northeastsouthwest\"),\n                                h.DiagonalArrow(\"northwestsoutheast\"),\n                                [\n                                    \"longdiv\",\n                                    {\n                                        renderer: function (t, e) {\n                                            var r = t.adaptor;\n                                            r.setStyle(\n                                                e,\n                                                \"border-top\",\n                                                t.em(t.thickness) + \" solid\"\n                                            );\n                                            var n = r.append(\n                                                    t.chtml,\n                                                    t.html(\"dbox\")\n                                                ),\n                                                o = t.thickness,\n                                                i = t.padding;\n                                            o !== h.THICKNESS &&\n                                                r.setStyle(\n                                                    n,\n                                                    \"border-width\",\n                                                    t.em(o)\n                                                ),\n                                                i !== h.PADDING &&\n                                                    (r.setStyle(\n                                                        n,\n                                                        \"left\",\n                                                        t.em(-1.5 * i)\n                                                    ),\n                                                    r.setStyle(\n                                                        n,\n                                                        \"width\",\n                                                        t.em(3 * i)\n                                                    ),\n                                                    r.setStyle(\n                                                        n,\n                                                        \"clip-path\",\n                                                        \"inset(0 0 0 \" +\n                                                            t.em(1.5 * i) +\n                                                            \")\"\n                                                    ));\n                                        },\n                                        bbox: function (t) {\n                                            var e = t.padding,\n                                                r = t.thickness;\n                                            return [e + r, e, e, 2 * e + r / 2];\n                                        },\n                                    },\n                                ],\n                                [\n                                    \"radical\",\n                                    {\n                                        renderer: function (t, e) {\n                                            t.msqrt.toCHTML(e);\n                                            var r = t.sqrtTRBL();\n                                            t.adaptor.setStyle(\n                                                t.msqrt.chtml,\n                                                \"margin\",\n                                                r\n                                                    .map(function (e) {\n                                                        return t.em(-e);\n                                                    })\n                                                    .join(\" \")\n                                            );\n                                        },\n                                        init: function (t) {\n                                            t.msqrt = t.createMsqrt(\n                                                t.childNodes[0]\n                                            );\n                                        },\n                                        bbox: function (t) {\n                                            return t.sqrtTRBL();\n                                        },\n                                        renderChild: !0,\n                                    },\n                                ],\n                            ])),\n                            e\n                        );\n                    })((0, p.CommonMencloseMixin)(u.CHTMLWrapper));\n                e.CHTMLmenclose = g;\n            },\n            2275: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmfenced = void 0);\n                var i = r(5355),\n                    s = r(7555),\n                    a = r(5410),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e = this.standardCHTMLnode(t);\n                                this.mrow.toCHTML(e);\n                            }),\n                            (e.kind = a.MmlMfenced.prototype.kind),\n                            e\n                        );\n                    })((0, s.CommonMfencedMixin)(i.CHTMLWrapper));\n                e.CHTMLmfenced = l;\n            },\n            9063: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmfrac = void 0);\n                var s = r(5355),\n                    a = r(2688),\n                    l = r(6850),\n                    c = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                this.standardCHTMLnode(t);\n                                var e = this.node.attributes.getList(\n                                        \"linethickness\",\n                                        \"bevelled\"\n                                    ),\n                                    r = e.linethickness,\n                                    n = e.bevelled,\n                                    o = this.isDisplay();\n                                if (n) this.makeBevelled(o);\n                                else {\n                                    var i = this.length2em(String(r), 0.06);\n                                    0 === i\n                                        ? this.makeAtop(o)\n                                        : this.makeFraction(o, i);\n                                }\n                            }),\n                            (e.prototype.makeFraction = function (t, e) {\n                                var r,\n                                    n,\n                                    o = this.node.attributes.getList(\n                                        \"numalign\",\n                                        \"denomalign\"\n                                    ),\n                                    s = o.numalign,\n                                    a = o.denomalign,\n                                    l = t ? { type: \"d\" } : {},\n                                    c = this.node.getProperty(\"withDelims\")\n                                        ? i(i({}, l), { delims: \"true\" })\n                                        : i({}, l),\n                                    u = \"center\" !== s ? { align: s } : {},\n                                    p = \"center\" !== a ? { align: a } : {},\n                                    h = i({}, l),\n                                    f = i({}, l),\n                                    d = this.font.params;\n                                if (0.06 !== e) {\n                                    var m = d.axis_height,\n                                        y = this.em(e),\n                                        g = this.getTUV(t, e),\n                                        b = g.T,\n                                        v = g.u,\n                                        _ = g.v,\n                                        S = (t ? this.em(3 * e) : y) + \" -.1em\";\n                                    l.style = {\n                                        height: y,\n                                        \"border-top\": y + \" solid\",\n                                        margin: S,\n                                    };\n                                    var M = this.em(Math.max(0, v));\n                                    (f.style = {\n                                        height: M,\n                                        \"vertical-align\": \"-\" + M,\n                                    }),\n                                        (h.style = {\n                                            height: this.em(Math.max(0, _)),\n                                        }),\n                                        (c.style = {\n                                            \"vertical-align\": this.em(m - b),\n                                        });\n                                }\n                                this.adaptor.append(\n                                    this.chtml,\n                                    this.html(\"mjx-frac\", c, [\n                                        (r = this.html(\"mjx-num\", u, [\n                                            this.html(\"mjx-nstrut\", f),\n                                        ])),\n                                        this.html(\"mjx-dbox\", {}, [\n                                            this.html(\"mjx-dtable\", {}, [\n                                                this.html(\"mjx-line\", l),\n                                                this.html(\"mjx-row\", {}, [\n                                                    (n = this.html(\n                                                        \"mjx-den\",\n                                                        p,\n                                                        [\n                                                            this.html(\n                                                                \"mjx-dstrut\",\n                                                                h\n                                                            ),\n                                                        ]\n                                                    )),\n                                                ]),\n                                            ]),\n                                        ]),\n                                    ])\n                                ),\n                                    this.childNodes[0].toCHTML(r),\n                                    this.childNodes[1].toCHTML(n);\n                            }),\n                            (e.prototype.makeAtop = function (t) {\n                                var e,\n                                    r,\n                                    n = this.node.attributes.getList(\n                                        \"numalign\",\n                                        \"denomalign\"\n                                    ),\n                                    o = n.numalign,\n                                    s = n.denomalign,\n                                    a = t\n                                        ? { type: \"d\", atop: !0 }\n                                        : { atop: !0 },\n                                    l = this.node.getProperty(\"withDelims\")\n                                        ? i(i({}, a), { delims: !0 })\n                                        : i({}, a),\n                                    c = \"center\" !== o ? { align: o } : {},\n                                    u = \"center\" !== s ? { align: s } : {},\n                                    p = this.getUVQ(t),\n                                    h = p.v,\n                                    f = p.q;\n                                (c.style = { \"padding-bottom\": this.em(f) }),\n                                    (l.style = {\n                                        \"vertical-align\": this.em(-h),\n                                    }),\n                                    this.adaptor.append(\n                                        this.chtml,\n                                        this.html(\"mjx-frac\", l, [\n                                            (e = this.html(\"mjx-num\", c)),\n                                            (r = this.html(\"mjx-den\", u)),\n                                        ])\n                                    ),\n                                    this.childNodes[0].toCHTML(e),\n                                    this.childNodes[1].toCHTML(r);\n                            }),\n                            (e.prototype.makeBevelled = function (t) {\n                                var e = this.adaptor;\n                                e.setAttribute(this.chtml, \"bevelled\", \"ture\");\n                                var r = e.append(\n                                    this.chtml,\n                                    this.html(\"mjx-num\")\n                                );\n                                this.childNodes[0].toCHTML(r),\n                                    this.bevel.toCHTML(this.chtml);\n                                var n = e.append(\n                                    this.chtml,\n                                    this.html(\"mjx-den\")\n                                );\n                                this.childNodes[1].toCHTML(n);\n                                var o = this.getBevelData(t),\n                                    i = o.u,\n                                    s = o.v,\n                                    a = o.delta,\n                                    l = o.nbox,\n                                    c = o.dbox;\n                                i &&\n                                    e.setStyle(\n                                        r,\n                                        \"verticalAlign\",\n                                        this.em(i / l.scale)\n                                    ),\n                                    s &&\n                                        e.setStyle(\n                                            n,\n                                            \"verticalAlign\",\n                                            this.em(s / c.scale)\n                                        );\n                                var u = this.em(-a / 2);\n                                e.setStyle(this.bevel.chtml, \"marginLeft\", u),\n                                    e.setStyle(\n                                        this.bevel.chtml,\n                                        \"marginRight\",\n                                        u\n                                    );\n                            }),\n                            (e.kind = l.MmlMfrac.prototype.kind),\n                            (e.styles = {\n                                \"mjx-frac\": {\n                                    display: \"inline-block\",\n                                    \"vertical-align\": \"0.17em\",\n                                    padding: \"0 .22em\",\n                                },\n                                'mjx-frac[type=\"d\"]': {\n                                    \"vertical-align\": \".04em\",\n                                },\n                                \"mjx-frac[delims]\": { padding: \"0 .1em\" },\n                                \"mjx-frac[atop]\": { padding: \"0 .12em\" },\n                                \"mjx-frac[atop][delims]\": { padding: \"0\" },\n                                \"mjx-dtable\": {\n                                    display: \"inline-table\",\n                                    width: \"100%\",\n                                },\n                                \"mjx-dtable > *\": { \"font-size\": \"2000%\" },\n                                \"mjx-dbox\": {\n                                    display: \"block\",\n                                    \"font-size\": \"5%\",\n                                },\n                                \"mjx-num\": {\n                                    display: \"block\",\n                                    \"text-align\": \"center\",\n                                },\n                                \"mjx-den\": {\n                                    display: \"block\",\n                                    \"text-align\": \"center\",\n                                },\n                                \"mjx-mfrac[bevelled] > mjx-num\": {\n                                    display: \"inline-block\",\n                                },\n                                \"mjx-mfrac[bevelled] > mjx-den\": {\n                                    display: \"inline-block\",\n                                },\n                                'mjx-den[align=\"right\"], mjx-num[align=\"right\"]':\n                                    { \"text-align\": \"right\" },\n                                'mjx-den[align=\"left\"], mjx-num[align=\"left\"]':\n                                    { \"text-align\": \"left\" },\n                                \"mjx-nstrut\": {\n                                    display: \"inline-block\",\n                                    height: \".054em\",\n                                    width: 0,\n                                    \"vertical-align\": \"-.054em\",\n                                },\n                                'mjx-nstrut[type=\"d\"]': {\n                                    height: \".217em\",\n                                    \"vertical-align\": \"-.217em\",\n                                },\n                                \"mjx-dstrut\": {\n                                    display: \"inline-block\",\n                                    height: \".505em\",\n                                    width: 0,\n                                },\n                                'mjx-dstrut[type=\"d\"]': { height: \".726em\" },\n                                \"mjx-line\": {\n                                    display: \"block\",\n                                    \"box-sizing\": \"border-box\",\n                                    \"min-height\": \"1px\",\n                                    height: \".06em\",\n                                    \"border-top\": \".06em solid\",\n                                    margin: \".06em -.1em\",\n                                    overflow: \"hidden\",\n                                },\n                                'mjx-line[type=\"d\"]': { margin: \".18em -.1em\" },\n                            }),\n                            e\n                        );\n                    })((0, a.CommonMfracMixin)(s.CHTMLWrapper));\n                e.CHTMLmfrac = c;\n            },\n            6911: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmglyph = void 0);\n                var i = r(5355),\n                    s = r(5636),\n                    a = r(3985),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e = this.standardCHTMLnode(t);\n                                if (this.charWrapper)\n                                    this.charWrapper.toCHTML(e);\n                                else {\n                                    var r = this.node.attributes.getList(\n                                            \"src\",\n                                            \"alt\"\n                                        ),\n                                        n = r.src,\n                                        o = r.alt,\n                                        i = {\n                                            width: this.em(this.width),\n                                            height: this.em(this.height),\n                                        };\n                                    this.valign &&\n                                        (i.verticalAlign = this.em(\n                                            this.valign\n                                        ));\n                                    var s = this.html(\"img\", {\n                                        src: n,\n                                        style: i,\n                                        alt: o,\n                                        title: o,\n                                    });\n                                    this.adaptor.append(e, s);\n                                }\n                            }),\n                            (e.kind = a.MmlMglyph.prototype.kind),\n                            (e.styles = {\n                                \"mjx-mglyph > img\": {\n                                    display: \"inline-block\",\n                                    border: 0,\n                                    padding: 0,\n                                },\n                            }),\n                            e\n                        );\n                    })((0, s.CommonMglyphMixin)(i.CHTMLWrapper));\n                e.CHTMLmglyph = l;\n            },\n            1653: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmi = void 0);\n                var i = r(5355),\n                    s = r(5723),\n                    a = r(450),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return o(e, t), (e.kind = a.MmlMi.prototype.kind), e;\n                    })((0, s.CommonMiMixin)(i.CHTMLWrapper));\n                e.CHTMLmi = l;\n            },\n            6781: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmmultiscripts = void 0);\n                var s = r(4300),\n                    a = r(8009),\n                    l = r(6405),\n                    c = r(505),\n                    u = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e = this.standardCHTMLnode(t),\n                                    r = this.scriptData,\n                                    n =\n                                        this.node.getProperty(\"scriptalign\") ||\n                                        \"right left\",\n                                    o = i((0, c.split)(n + \" \" + n), 2),\n                                    s = o[0],\n                                    a = o[1],\n                                    l = this.combinePrePost(r.sub, r.psub),\n                                    u = this.combinePrePost(r.sup, r.psup),\n                                    p = i(this.getUVQ(l, u), 2),\n                                    h = p[0],\n                                    f = p[1];\n                                if (r.numPrescripts) {\n                                    var d = this.addScripts(\n                                        h,\n                                        -f,\n                                        !0,\n                                        r.psub,\n                                        r.psup,\n                                        this.firstPrescript,\n                                        r.numPrescripts\n                                    );\n                                    \"right\" !== s &&\n                                        this.adaptor.setAttribute(\n                                            d,\n                                            \"script-align\",\n                                            s\n                                        );\n                                }\n                                if (\n                                    (this.childNodes[0].toCHTML(e),\n                                    r.numScripts)\n                                ) {\n                                    d = this.addScripts(\n                                        h,\n                                        -f,\n                                        !1,\n                                        r.sub,\n                                        r.sup,\n                                        1,\n                                        r.numScripts\n                                    );\n                                    \"left\" !== a &&\n                                        this.adaptor.setAttribute(\n                                            d,\n                                            \"script-align\",\n                                            a\n                                        );\n                                }\n                            }),\n                            (e.prototype.addScripts = function (\n                                t,\n                                e,\n                                r,\n                                n,\n                                o,\n                                i,\n                                s\n                            ) {\n                                for (\n                                    var a = this.adaptor,\n                                        l = t - o.d + (e - n.h),\n                                        c = t < 0 && 0 === e ? n.h + t : t,\n                                        u =\n                                            l > 0\n                                                ? {\n                                                      style: {\n                                                          height: this.em(l),\n                                                      },\n                                                  }\n                                                : {},\n                                        p = c\n                                            ? {\n                                                  style: {\n                                                      \"vertical-align\":\n                                                          this.em(c),\n                                                  },\n                                              }\n                                            : {},\n                                        h = this.html(\"mjx-row\"),\n                                        f = this.html(\"mjx-row\", u),\n                                        d = this.html(\"mjx-row\"),\n                                        m =\n                                            \"mjx-\" +\n                                            (r ? \"pre\" : \"\") +\n                                            \"scripts\",\n                                        y = i + 2 * s;\n                                    i < y;\n\n                                )\n                                    this.childNodes[i++].toCHTML(\n                                        a.append(d, this.html(\"mjx-cell\"))\n                                    ),\n                                        this.childNodes[i++].toCHTML(\n                                            a.append(h, this.html(\"mjx-cell\"))\n                                        );\n                                return a.append(\n                                    this.chtml,\n                                    this.html(m, p, [h, f, d])\n                                );\n                            }),\n                            (e.kind = l.MmlMmultiscripts.prototype.kind),\n                            (e.styles = {\n                                \"mjx-prescripts\": {\n                                    display: \"inline-table\",\n                                    \"padding-left\": \".05em\",\n                                },\n                                \"mjx-scripts\": {\n                                    display: \"inline-table\",\n                                    \"padding-right\": \".05em\",\n                                },\n                                \"mjx-prescripts > mjx-row > mjx-cell\": {\n                                    \"text-align\": \"right\",\n                                },\n                                '[script-align=\"left\"] > mjx-row > mjx-cell': {\n                                    \"text-align\": \"left\",\n                                },\n                                '[script-align=\"center\"] > mjx-row > mjx-cell':\n                                    { \"text-align\": \"center\" },\n                                '[script-align=\"right\"] > mjx-row > mjx-cell': {\n                                    \"text-align\": \"right\",\n                                },\n                            }),\n                            e\n                        );\n                    })((0, a.CommonMmultiscriptsMixin)(s.CHTMLmsubsup));\n                e.CHTMLmmultiscripts = u;\n            },\n            6460: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmn = void 0);\n                var i = r(5355),\n                    s = r(5023),\n                    a = r(3050),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return o(e, t), (e.kind = a.MmlMn.prototype.kind), e;\n                    })((0, s.CommonMnMixin)(i.CHTMLWrapper));\n                e.CHTMLmn = l;\n            },\n            6287: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmo = void 0);\n                var s = r(5355),\n                    a = r(7096),\n                    l = r(2756),\n                    c = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e,\n                                    r,\n                                    n = this.node.attributes,\n                                    o =\n                                        n.get(\"symmetric\") &&\n                                        2 !== this.stretch.dir,\n                                    s = 0 !== this.stretch.dir;\n                                s &&\n                                    null === this.size &&\n                                    this.getStretchedVariant([]);\n                                var a = this.standardCHTMLnode(t);\n                                if (s && this.size < 0) this.stretchHTML(a);\n                                else {\n                                    if (o || n.get(\"largeop\")) {\n                                        var l = this.em(this.getCenterOffset());\n                                        \"0\" !== l &&\n                                            this.adaptor.setStyle(\n                                                a,\n                                                \"verticalAlign\",\n                                                l\n                                            );\n                                    }\n                                    this.node.getProperty(\"mathaccent\") &&\n                                        (this.adaptor.setStyle(a, \"width\", \"0\"),\n                                        this.adaptor.setStyle(\n                                            a,\n                                            \"margin-left\",\n                                            this.em(this.getAccentOffset())\n                                        ));\n                                    try {\n                                        for (\n                                            var c = i(this.childNodes),\n                                                u = c.next();\n                                            !u.done;\n                                            u = c.next()\n                                        ) {\n                                            u.value.toCHTML(a);\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            u &&\n                                                !u.done &&\n                                                (r = c.return) &&\n                                                r.call(c);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                                }\n                            }),\n                            (e.prototype.stretchHTML = function (t) {\n                                var e = this.getText().codePointAt(0);\n                                this.font.delimUsage.add(e),\n                                    this.childNodes[0].markUsed();\n                                var r = this.stretch,\n                                    n = r.stretch,\n                                    o = [];\n                                n[0] &&\n                                    o.push(\n                                        this.html(\"mjx-beg\", {}, [\n                                            this.html(\"mjx-c\"),\n                                        ])\n                                    ),\n                                    o.push(\n                                        this.html(\"mjx-ext\", {}, [\n                                            this.html(\"mjx-c\"),\n                                        ])\n                                    ),\n                                    4 === n.length &&\n                                        o.push(\n                                            this.html(\"mjx-mid\", {}, [\n                                                this.html(\"mjx-c\"),\n                                            ]),\n                                            this.html(\"mjx-ext\", {}, [\n                                                this.html(\"mjx-c\"),\n                                            ])\n                                        ),\n                                    n[2] &&\n                                        o.push(\n                                            this.html(\"mjx-end\", {}, [\n                                                this.html(\"mjx-c\"),\n                                            ])\n                                        );\n                                var i = {},\n                                    s = this.bbox,\n                                    l = s.h,\n                                    c = s.d,\n                                    u = s.w;\n                                1 === r.dir\n                                    ? (o.push(this.html(\"mjx-mark\")),\n                                      (i.height = this.em(l + c)),\n                                      (i.verticalAlign = this.em(-c)))\n                                    : (i.width = this.em(u));\n                                var p = a.DirectionVH[r.dir],\n                                    h = {\n                                        class: this.char(r.c || e),\n                                        style: i,\n                                    },\n                                    f = this.html(\"mjx-stretchy-\" + p, h, o);\n                                this.adaptor.append(t, f);\n                            }),\n                            (e.kind = l.MmlMo.prototype.kind),\n                            (e.styles = {\n                                \"mjx-stretchy-h\": {\n                                    display: \"inline-table\",\n                                    width: \"100%\",\n                                },\n                                \"mjx-stretchy-h > *\": {\n                                    display: \"table-cell\",\n                                    width: 0,\n                                },\n                                \"mjx-stretchy-h > * > mjx-c\": {\n                                    display: \"inline-block\",\n                                    transform: \"scalex(1.0000001)\",\n                                },\n                                \"mjx-stretchy-h > * > mjx-c::before\": {\n                                    display: \"inline-block\",\n                                    width: \"initial\",\n                                },\n                                \"mjx-stretchy-h > mjx-ext\": {\n                                    \"/* IE */ overflow\": \"hidden\",\n                                    \"/* others */ overflow\": \"clip visible\",\n                                    width: \"100%\",\n                                },\n                                \"mjx-stretchy-h > mjx-ext > mjx-c::before\": {\n                                    transform: \"scalex(500)\",\n                                },\n                                \"mjx-stretchy-h > mjx-ext > mjx-c\": {\n                                    width: 0,\n                                },\n                                \"mjx-stretchy-h > mjx-beg > mjx-c\": {\n                                    \"margin-right\": \"-.1em\",\n                                },\n                                \"mjx-stretchy-h > mjx-end > mjx-c\": {\n                                    \"margin-left\": \"-.1em\",\n                                },\n                                \"mjx-stretchy-v\": { display: \"inline-block\" },\n                                \"mjx-stretchy-v > *\": { display: \"block\" },\n                                \"mjx-stretchy-v > mjx-beg\": { height: 0 },\n                                \"mjx-stretchy-v > mjx-end > mjx-c\": {\n                                    display: \"block\",\n                                },\n                                \"mjx-stretchy-v > * > mjx-c\": {\n                                    transform: \"scaley(1.0000001)\",\n                                    \"transform-origin\": \"left center\",\n                                    overflow: \"hidden\",\n                                },\n                                \"mjx-stretchy-v > mjx-ext\": {\n                                    display: \"block\",\n                                    height: \"100%\",\n                                    \"box-sizing\": \"border-box\",\n                                    border: \"0px solid transparent\",\n                                    \"/* IE */ overflow\": \"hidden\",\n                                    \"/* others */ overflow\": \"visible clip\",\n                                },\n                                \"mjx-stretchy-v > mjx-ext > mjx-c::before\": {\n                                    width: \"initial\",\n                                    \"box-sizing\": \"border-box\",\n                                },\n                                \"mjx-stretchy-v > mjx-ext > mjx-c\": {\n                                    transform: \"scaleY(500) translateY(.075em)\",\n                                    overflow: \"visible\",\n                                },\n                                \"mjx-mark\": {\n                                    display: \"inline-block\",\n                                    height: \"0px\",\n                                },\n                            }),\n                            e\n                        );\n                    })((0, a.CommonMoMixin)(s.CHTMLWrapper));\n                e.CHTMLmo = c;\n            },\n            5964: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmpadded = void 0);\n                var a = r(5355),\n                    l = r(6898),\n                    c = r(7238),\n                    u = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e,\n                                    r,\n                                    n = this.standardCHTMLnode(t),\n                                    o = [],\n                                    a = {},\n                                    l = i(this.getDimens(), 9),\n                                    c = l[2],\n                                    u = l[3],\n                                    p = l[4],\n                                    h = l[5],\n                                    f = l[6],\n                                    d = l[7],\n                                    m = l[8];\n                                if (\n                                    (h && (a.width = this.em(c + h)),\n                                    (u || p) &&\n                                        (a.margin =\n                                            this.em(u) + \" 0 \" + this.em(p)),\n                                    f + m || d)\n                                ) {\n                                    a.position = \"relative\";\n                                    var y = this.html(\"mjx-rbox\", {\n                                        style: {\n                                            left: this.em(f + m),\n                                            top: this.em(-d),\n                                            \"max-width\": a.width,\n                                        },\n                                    });\n                                    f + m &&\n                                        this.childNodes[0].getBBox().pwidth &&\n                                        (this.adaptor.setAttribute(\n                                            y,\n                                            \"width\",\n                                            \"full\"\n                                        ),\n                                        this.adaptor.setStyle(\n                                            y,\n                                            \"left\",\n                                            this.em(f)\n                                        )),\n                                        o.push(y);\n                                }\n                                n = this.adaptor.append(\n                                    n,\n                                    this.html(\"mjx-block\", { style: a }, o)\n                                );\n                                try {\n                                    for (\n                                        var g = s(this.childNodes),\n                                            b = g.next();\n                                        !b.done;\n                                        b = g.next()\n                                    ) {\n                                        b.value.toCHTML(o[0] || n);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        b &&\n                                            !b.done &&\n                                            (r = g.return) &&\n                                            r.call(g);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                            }),\n                            (e.kind = c.MmlMpadded.prototype.kind),\n                            (e.styles = {\n                                \"mjx-mpadded\": { display: \"inline-block\" },\n                                \"mjx-rbox\": {\n                                    display: \"inline-block\",\n                                    position: \"relative\",\n                                },\n                            }),\n                            e\n                        );\n                    })((0, l.CommonMpaddedMixin)(a.CHTMLWrapper));\n                e.CHTMLmpadded = u;\n            },\n            8776: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmroot = void 0);\n                var s = r(5610),\n                    a = r(6991),\n                    l = r(6145),\n                    c = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.addRoot = function (t, e, r, n) {\n                                e.toCHTML(t);\n                                var o = i(this.getRootDimens(r, n), 3),\n                                    s = o[0],\n                                    a = o[1],\n                                    l = o[2];\n                                this.adaptor.setStyle(\n                                    t,\n                                    \"verticalAlign\",\n                                    this.em(a)\n                                ),\n                                    this.adaptor.setStyle(\n                                        t,\n                                        \"width\",\n                                        this.em(s)\n                                    ),\n                                    l &&\n                                        this.adaptor.setStyle(\n                                            this.adaptor.firstChild(t),\n                                            \"paddingLeft\",\n                                            this.em(l)\n                                        );\n                            }),\n                            (e.kind = l.MmlMroot.prototype.kind),\n                            e\n                        );\n                    })((0, a.CommonMrootMixin)(s.CHTMLmsqrt));\n                e.CHTMLmroot = c;\n            },\n            4798: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLinferredMrow = e.CHTMLmrow = void 0);\n                var s = r(5355),\n                    a = r(8411),\n                    l = r(8411),\n                    c = r(9878),\n                    u = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e,\n                                    r,\n                                    n = this.node.isInferred\n                                        ? (this.chtml = t)\n                                        : this.standardCHTMLnode(t),\n                                    o = !1;\n                                try {\n                                    for (\n                                        var s = i(this.childNodes),\n                                            a = s.next();\n                                        !a.done;\n                                        a = s.next()\n                                    ) {\n                                        var l = a.value;\n                                        l.toCHTML(n), l.bbox.w < 0 && (o = !0);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        a &&\n                                            !a.done &&\n                                            (r = s.return) &&\n                                            r.call(s);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                if (o) {\n                                    var c = this.getBBox().w;\n                                    c &&\n                                        (this.adaptor.setStyle(\n                                            n,\n                                            \"width\",\n                                            this.em(Math.max(0, c))\n                                        ),\n                                        c < 0 &&\n                                            this.adaptor.setStyle(\n                                                n,\n                                                \"marginRight\",\n                                                this.em(c)\n                                            ));\n                                }\n                            }),\n                            (e.kind = c.MmlMrow.prototype.kind),\n                            e\n                        );\n                    })((0, a.CommonMrowMixin)(s.CHTMLWrapper));\n                e.CHTMLmrow = u;\n                var p = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t), (e.kind = c.MmlInferredMrow.prototype.kind), e\n                    );\n                })((0, l.CommonInferredMrowMixin)(u));\n                e.CHTMLinferredMrow = p;\n            },\n            4597: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLms = void 0);\n                var i = r(5355),\n                    s = r(4126),\n                    a = r(7265),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return o(e, t), (e.kind = a.MmlMs.prototype.kind), e;\n                    })((0, s.CommonMsMixin)(i.CHTMLWrapper));\n                e.CHTMLms = l;\n            },\n            2970: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmspace = void 0);\n                var i = r(5355),\n                    s = r(258),\n                    a = r(6030),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e = this.standardCHTMLnode(t),\n                                    r = this.getBBox(),\n                                    n = r.w,\n                                    o = r.h,\n                                    i = r.d;\n                                n < 0 &&\n                                    (this.adaptor.setStyle(\n                                        e,\n                                        \"marginRight\",\n                                        this.em(n)\n                                    ),\n                                    (n = 0)),\n                                    n &&\n                                        this.adaptor.setStyle(\n                                            e,\n                                            \"width\",\n                                            this.em(n)\n                                        ),\n                                    (o = Math.max(0, o + i)) &&\n                                        this.adaptor.setStyle(\n                                            e,\n                                            \"height\",\n                                            this.em(Math.max(0, o))\n                                        ),\n                                    i &&\n                                        this.adaptor.setStyle(\n                                            e,\n                                            \"verticalAlign\",\n                                            this.em(-i)\n                                        );\n                            }),\n                            (e.kind = a.MmlMspace.prototype.kind),\n                            e\n                        );\n                    })((0, s.CommonMspaceMixin)(i.CHTMLWrapper));\n                e.CHTMLmspace = l;\n            },\n            5610: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmsqrt = void 0);\n                var s = r(5355),\n                    a = r(4093),\n                    l = r(7131),\n                    c = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e,\n                                    r,\n                                    n,\n                                    o,\n                                    s = this.childNodes[this.surd],\n                                    a = this.childNodes[this.base],\n                                    l = s.getBBox(),\n                                    c = a.getOuterBBox(),\n                                    u = i(this.getPQ(l), 2)[1],\n                                    p = this.font.params.rule_thickness,\n                                    h = c.h + u + p,\n                                    f = this.standardCHTMLnode(t);\n                                null != this.root &&\n                                    ((n = this.adaptor.append(\n                                        f,\n                                        this.html(\"mjx-root\")\n                                    )),\n                                    (o = this.childNodes[this.root]));\n                                var d = this.adaptor.append(\n                                    f,\n                                    this.html(\"mjx-sqrt\", {}, [\n                                        (e = this.html(\"mjx-surd\")),\n                                        (r = this.html(\"mjx-box\", {\n                                            style: { paddingTop: this.em(u) },\n                                        })),\n                                    ])\n                                );\n                                this.addRoot(n, o, l, h),\n                                    s.toCHTML(e),\n                                    a.toCHTML(r),\n                                    s.size < 0 &&\n                                        this.adaptor.addClass(d, \"mjx-tall\");\n                            }),\n                            (e.prototype.addRoot = function (t, e, r, n) {}),\n                            (e.kind = l.MmlMsqrt.prototype.kind),\n                            (e.styles = {\n                                \"mjx-root\": {\n                                    display: \"inline-block\",\n                                    \"white-space\": \"nowrap\",\n                                },\n                                \"mjx-surd\": {\n                                    display: \"inline-block\",\n                                    \"vertical-align\": \"top\",\n                                },\n                                \"mjx-sqrt\": {\n                                    display: \"inline-block\",\n                                    \"padding-top\": \".07em\",\n                                },\n                                \"mjx-sqrt > mjx-box\": {\n                                    \"border-top\": \".07em solid\",\n                                },\n                                \"mjx-sqrt.mjx-tall > mjx-box\": {\n                                    \"padding-left\": \".3em\",\n                                    \"margin-left\": \"-.3em\",\n                                },\n                            }),\n                            e\n                        );\n                    })((0, a.CommonMsqrtMixin)(s.CHTMLWrapper));\n                e.CHTMLmsqrt = c;\n            },\n            4300: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmsubsup = e.CHTMLmsup = e.CHTMLmsub = void 0);\n                var s = r(8650),\n                    a = r(905),\n                    l = r(905),\n                    c = r(905),\n                    u = r(4461),\n                    p = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return o(e, t), (e.kind = u.MmlMsub.prototype.kind), e;\n                    })((0, a.CommonMsubMixin)(s.CHTMLscriptbase));\n                e.CHTMLmsub = p;\n                var h = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return o(e, t), (e.kind = u.MmlMsup.prototype.kind), e;\n                })((0, l.CommonMsupMixin)(s.CHTMLscriptbase));\n                e.CHTMLmsup = h;\n                var f = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.toCHTML = function (t) {\n                            var e = this.adaptor,\n                                r = this.standardCHTMLnode(t),\n                                n = i(\n                                    [\n                                        this.baseChild,\n                                        this.supChild,\n                                        this.subChild,\n                                    ],\n                                    3\n                                ),\n                                o = n[0],\n                                s = n[1],\n                                a = n[2],\n                                l = i(this.getUVQ(), 3),\n                                c = l[1],\n                                u = l[2],\n                                p = { \"vertical-align\": this.em(c) };\n                            o.toCHTML(r);\n                            var h = e.append(\n                                r,\n                                this.html(\"mjx-script\", { style: p })\n                            );\n                            s.toCHTML(h),\n                                e.append(\n                                    h,\n                                    this.html(\"mjx-spacer\", {\n                                        style: { \"margin-top\": this.em(u) },\n                                    })\n                                ),\n                                a.toCHTML(h);\n                            var f = this.getAdjustedIc();\n                            f &&\n                                e.setStyle(\n                                    s.chtml,\n                                    \"marginLeft\",\n                                    this.em(f / s.bbox.rscale)\n                                ),\n                                this.baseRemoveIc &&\n                                    e.setStyle(\n                                        h,\n                                        \"marginLeft\",\n                                        this.em(-this.baseIc)\n                                    );\n                        }),\n                        (e.kind = u.MmlMsubsup.prototype.kind),\n                        (e.styles = {\n                            \"mjx-script\": {\n                                display: \"inline-block\",\n                                \"padding-right\": \".05em\",\n                                \"padding-left\": \".033em\",\n                            },\n                            \"mjx-script > mjx-spacer\": { display: \"block\" },\n                        }),\n                        e\n                    );\n                })((0, c.CommonMsubsupMixin)(s.CHTMLscriptbase));\n                e.CHTMLmsubsup = f;\n            },\n            8002: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmtable = void 0);\n                var a = r(5355),\n                    l = r(6237),\n                    c = r(1349),\n                    u = r(505),\n                    p = (function (t) {\n                        function e(e, r, n) {\n                            void 0 === n && (n = null);\n                            var o = t.call(this, e, r, n) || this;\n                            return (\n                                (o.itable = o.html(\"mjx-itable\")),\n                                (o.labels = o.html(\"mjx-itable\")),\n                                o\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.getAlignShift = function () {\n                                var e = t.prototype.getAlignShift.call(this);\n                                return this.isTop || (e[1] = 0), e;\n                            }),\n                            (e.prototype.toCHTML = function (t) {\n                                var e,\n                                    r,\n                                    n = this.standardCHTMLnode(t);\n                                this.adaptor.append(\n                                    n,\n                                    this.html(\"mjx-table\", {}, [this.itable])\n                                );\n                                try {\n                                    for (\n                                        var o = i(this.childNodes),\n                                            s = o.next();\n                                        !s.done;\n                                        s = o.next()\n                                    ) {\n                                        s.value.toCHTML(this.itable);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (r = o.return) &&\n                                            r.call(o);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                this.padRows(),\n                                    this.handleColumnSpacing(),\n                                    this.handleColumnLines(),\n                                    this.handleColumnWidths(),\n                                    this.handleRowSpacing(),\n                                    this.handleRowLines(),\n                                    this.handleRowHeights(),\n                                    this.handleFrame(),\n                                    this.handleWidth(),\n                                    this.handleLabels(),\n                                    this.handleAlign(),\n                                    this.handleJustify(),\n                                    this.shiftColor();\n                            }),\n                            (e.prototype.shiftColor = function () {\n                                var t = this.adaptor,\n                                    e = t.getStyle(\n                                        this.chtml,\n                                        \"backgroundColor\"\n                                    );\n                                e &&\n                                    (t.setStyle(\n                                        this.chtml,\n                                        \"backgroundColor\",\n                                        \"\"\n                                    ),\n                                    t.setStyle(\n                                        this.itable,\n                                        \"backgroundColor\",\n                                        e\n                                    ));\n                            }),\n                            (e.prototype.padRows = function () {\n                                var t,\n                                    e,\n                                    r = this.adaptor;\n                                try {\n                                    for (\n                                        var n = i(r.childNodes(this.itable)),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    )\n                                        for (\n                                            var s = o.value;\n                                            r.childNodes(s).length <\n                                            this.numCols;\n\n                                        )\n                                            r.append(\n                                                s,\n                                                this.html(\"mjx-mtd\", {\n                                                    extra: !0,\n                                                })\n                                            );\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (e = n.return) &&\n                                            e.call(n);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.handleColumnSpacing = function () {\n                                var t,\n                                    e,\n                                    r,\n                                    n,\n                                    o = this.childNodes[0]\n                                        ? 1 /\n                                          this.childNodes[0].getBBox().rscale\n                                        : 1,\n                                    s = this.getEmHalfSpacing(\n                                        this.fSpace[0],\n                                        this.cSpace,\n                                        o\n                                    ),\n                                    a = this.frame;\n                                try {\n                                    for (\n                                        var l = i(this.tableRows), c = l.next();\n                                        !c.done;\n                                        c = l.next()\n                                    ) {\n                                        var u = c.value,\n                                            p = 0;\n                                        try {\n                                            for (\n                                                var h =\n                                                        ((r = void 0),\n                                                        i(u.tableCells)),\n                                                    f = h.next();\n                                                !f.done;\n                                                f = h.next()\n                                            ) {\n                                                var d = f.value,\n                                                    m = s[p++],\n                                                    y = s[p],\n                                                    g = d\n                                                        ? d.chtml\n                                                        : this.adaptor.childNodes(\n                                                              u.chtml\n                                                          )[p];\n                                                ((p > 1 && \"0.4em\" !== m) ||\n                                                    (a && 1 === p)) &&\n                                                    this.adaptor.setStyle(\n                                                        g,\n                                                        \"paddingLeft\",\n                                                        m\n                                                    ),\n                                                    ((p < this.numCols &&\n                                                        \"0.4em\" !== y) ||\n                                                        (a &&\n                                                            p ===\n                                                                this\n                                                                    .numCols)) &&\n                                                        this.adaptor.setStyle(\n                                                            g,\n                                                            \"paddingRight\",\n                                                            y\n                                                        );\n                                            }\n                                        } catch (t) {\n                                            r = { error: t };\n                                        } finally {\n                                            try {\n                                                f &&\n                                                    !f.done &&\n                                                    (n = h.return) &&\n                                                    n.call(h);\n                                            } finally {\n                                                if (r) throw r.error;\n                                            }\n                                        }\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        c &&\n                                            !c.done &&\n                                            (e = l.return) &&\n                                            e.call(l);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.handleColumnLines = function () {\n                                var t, e, r, n;\n                                if (\n                                    \"none\" !==\n                                    this.node.attributes.get(\"columnlines\")\n                                ) {\n                                    var o =\n                                        this.getColumnAttributes(\"columnlines\");\n                                    try {\n                                        for (\n                                            var s = i(this.childNodes),\n                                                a = s.next();\n                                            !a.done;\n                                            a = s.next()\n                                        ) {\n                                            var l = a.value,\n                                                c = 0;\n                                            try {\n                                                for (\n                                                    var u =\n                                                            ((r = void 0),\n                                                            i(\n                                                                this.adaptor\n                                                                    .childNodes(\n                                                                        l.chtml\n                                                                    )\n                                                                    .slice(1)\n                                                            )),\n                                                        p = u.next();\n                                                    !p.done;\n                                                    p = u.next()\n                                                ) {\n                                                    var h = p.value,\n                                                        f = o[c++];\n                                                    \"none\" !== f &&\n                                                        this.adaptor.setStyle(\n                                                            h,\n                                                            \"borderLeft\",\n                                                            \".07em \" + f\n                                                        );\n                                                }\n                                            } catch (t) {\n                                                r = { error: t };\n                                            } finally {\n                                                try {\n                                                    p &&\n                                                        !p.done &&\n                                                        (n = u.return) &&\n                                                        n.call(u);\n                                                } finally {\n                                                    if (r) throw r.error;\n                                                }\n                                            }\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            a &&\n                                                !a.done &&\n                                                (e = s.return) &&\n                                                e.call(s);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                }\n                            }),\n                            (e.prototype.handleColumnWidths = function () {\n                                var t, e, r, n;\n                                try {\n                                    for (\n                                        var o = i(this.childNodes),\n                                            s = o.next();\n                                        !s.done;\n                                        s = o.next()\n                                    ) {\n                                        var a = s.value,\n                                            l = 0;\n                                        try {\n                                            for (\n                                                var c =\n                                                        ((r = void 0),\n                                                        i(\n                                                            this.adaptor.childNodes(\n                                                                a.chtml\n                                                            )\n                                                        )),\n                                                    u = c.next();\n                                                !u.done;\n                                                u = c.next()\n                                            ) {\n                                                var p = u.value,\n                                                    h = this.cWidths[l++];\n                                                if (null !== h) {\n                                                    var f =\n                                                        \"number\" == typeof h\n                                                            ? this.em(h)\n                                                            : h;\n                                                    this.adaptor.setStyle(\n                                                        p,\n                                                        \"width\",\n                                                        f\n                                                    ),\n                                                        this.adaptor.setStyle(\n                                                            p,\n                                                            \"maxWidth\",\n                                                            f\n                                                        ),\n                                                        this.adaptor.setStyle(\n                                                            p,\n                                                            \"minWidth\",\n                                                            f\n                                                        );\n                                                }\n                                            }\n                                        } catch (t) {\n                                            r = { error: t };\n                                        } finally {\n                                            try {\n                                                u &&\n                                                    !u.done &&\n                                                    (n = c.return) &&\n                                                    n.call(c);\n                                            } finally {\n                                                if (r) throw r.error;\n                                            }\n                                        }\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (e = o.return) &&\n                                            e.call(o);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.handleRowSpacing = function () {\n                                var t,\n                                    e,\n                                    r,\n                                    n,\n                                    o = this.childNodes[0]\n                                        ? 1 /\n                                          this.childNodes[0].getBBox().rscale\n                                        : 1,\n                                    s = this.getEmHalfSpacing(\n                                        this.fSpace[1],\n                                        this.rSpace,\n                                        o\n                                    ),\n                                    a = this.frame,\n                                    l = 0;\n                                try {\n                                    for (\n                                        var c = i(this.childNodes),\n                                            u = c.next();\n                                        !u.done;\n                                        u = c.next()\n                                    ) {\n                                        var p = u.value,\n                                            h = s[l++],\n                                            f = s[l];\n                                        try {\n                                            for (\n                                                var d =\n                                                        ((r = void 0),\n                                                        i(p.childNodes)),\n                                                    m = d.next();\n                                                !m.done;\n                                                m = d.next()\n                                            ) {\n                                                var y = m.value;\n                                                ((l > 1 && \"0.215em\" !== h) ||\n                                                    (a && 1 === l)) &&\n                                                    this.adaptor.setStyle(\n                                                        y.chtml,\n                                                        \"paddingTop\",\n                                                        h\n                                                    ),\n                                                    ((l < this.numRows &&\n                                                        \"0.215em\" !== f) ||\n                                                        (a &&\n                                                            l ===\n                                                                this\n                                                                    .numRows)) &&\n                                                        this.adaptor.setStyle(\n                                                            y.chtml,\n                                                            \"paddingBottom\",\n                                                            f\n                                                        );\n                                            }\n                                        } catch (t) {\n                                            r = { error: t };\n                                        } finally {\n                                            try {\n                                                m &&\n                                                    !m.done &&\n                                                    (n = d.return) &&\n                                                    n.call(d);\n                                            } finally {\n                                                if (r) throw r.error;\n                                            }\n                                        }\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        u &&\n                                            !u.done &&\n                                            (e = c.return) &&\n                                            e.call(c);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.handleRowLines = function () {\n                                var t, e, r, n;\n                                if (\n                                    \"none\" !==\n                                    this.node.attributes.get(\"rowlines\")\n                                ) {\n                                    var o = this.getRowAttributes(\"rowlines\"),\n                                        s = 0;\n                                    try {\n                                        for (\n                                            var a = i(this.childNodes.slice(1)),\n                                                l = a.next();\n                                            !l.done;\n                                            l = a.next()\n                                        ) {\n                                            var c = l.value,\n                                                u = o[s++];\n                                            if (\"none\" !== u)\n                                                try {\n                                                    for (\n                                                        var p =\n                                                                ((r = void 0),\n                                                                i(\n                                                                    this.adaptor.childNodes(\n                                                                        c.chtml\n                                                                    )\n                                                                )),\n                                                            h = p.next();\n                                                        !h.done;\n                                                        h = p.next()\n                                                    ) {\n                                                        var f = h.value;\n                                                        this.adaptor.setStyle(\n                                                            f,\n                                                            \"borderTop\",\n                                                            \".07em \" + u\n                                                        );\n                                                    }\n                                                } catch (t) {\n                                                    r = { error: t };\n                                                } finally {\n                                                    try {\n                                                        h &&\n                                                            !h.done &&\n                                                            (n = p.return) &&\n                                                            n.call(p);\n                                                    } finally {\n                                                        if (r) throw r.error;\n                                                    }\n                                                }\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            l &&\n                                                !l.done &&\n                                                (e = a.return) &&\n                                                e.call(a);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                }\n                            }),\n                            (e.prototype.handleRowHeights = function () {\n                                this.node.attributes.get(\"equalrows\") &&\n                                    this.handleEqualRows();\n                            }),\n                            (e.prototype.handleEqualRows = function () {\n                                for (\n                                    var t = this.getRowHalfSpacing(),\n                                        e = this.getTableData(),\n                                        r = e.H,\n                                        n = e.D,\n                                        o = e.NH,\n                                        i = e.ND,\n                                        s = this.getEqualRowHeight(),\n                                        a = 0;\n                                    a < this.numRows;\n                                    a++\n                                ) {\n                                    var l = this.childNodes[a];\n                                    this.setRowHeight(\n                                        l,\n                                        s + t[a] + t[a + 1] + this.rLines[a]\n                                    ),\n                                        s !== o[a] + i[a] &&\n                                            this.setRowBaseline(\n                                                l,\n                                                s,\n                                                (s - r[a] + n[a]) / 2\n                                            );\n                                }\n                            }),\n                            (e.prototype.setRowHeight = function (t, e) {\n                                this.adaptor.setStyle(\n                                    t.chtml,\n                                    \"height\",\n                                    this.em(e)\n                                );\n                            }),\n                            (e.prototype.setRowBaseline = function (t, e, r) {\n                                var n,\n                                    o,\n                                    s = t.node.attributes.get(\"rowalign\");\n                                try {\n                                    for (\n                                        var a = i(t.childNodes), l = a.next();\n                                        !l.done;\n                                        l = a.next()\n                                    ) {\n                                        var c = l.value;\n                                        if (this.setCellBaseline(c, s, e, r))\n                                            break;\n                                    }\n                                } catch (t) {\n                                    n = { error: t };\n                                } finally {\n                                    try {\n                                        l &&\n                                            !l.done &&\n                                            (o = a.return) &&\n                                            o.call(a);\n                                    } finally {\n                                        if (n) throw n.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.setCellBaseline = function (\n                                t,\n                                e,\n                                r,\n                                n\n                            ) {\n                                var o = t.node.attributes.get(\"rowalign\");\n                                if (\"baseline\" === o || \"axis\" === o) {\n                                    var i = this.adaptor,\n                                        s = i.lastChild(t.chtml);\n                                    i.setStyle(s, \"height\", this.em(r)),\n                                        i.setStyle(\n                                            s,\n                                            \"verticalAlign\",\n                                            this.em(-n)\n                                        );\n                                    var a = t.parent;\n                                    if (\n                                        !(\n                                            (a.node.isKind(\"mlabeledtr\") &&\n                                                t === a.childNodes[0]) ||\n                                            (\"baseline\" !== e && \"axis\" !== e)\n                                        )\n                                    )\n                                        return !0;\n                                }\n                                return !1;\n                            }),\n                            (e.prototype.handleFrame = function () {\n                                this.frame &&\n                                    this.fLine &&\n                                    this.adaptor.setStyle(\n                                        this.itable,\n                                        \"border\",\n                                        \".07em \" +\n                                            this.node.attributes.get(\"frame\")\n                                    );\n                            }),\n                            (e.prototype.handleWidth = function () {\n                                var t = this.adaptor,\n                                    e = this.getBBox(),\n                                    r = e.w,\n                                    n = e.L,\n                                    o = e.R;\n                                t.setStyle(\n                                    this.chtml,\n                                    \"minWidth\",\n                                    this.em(n + r + o)\n                                );\n                                var i = this.node.attributes.get(\"width\");\n                                if ((0, u.isPercent)(i))\n                                    t.setStyle(this.chtml, \"width\", \"\"),\n                                        t.setAttribute(\n                                            this.chtml,\n                                            \"width\",\n                                            \"full\"\n                                        );\n                                else if (!this.hasLabels) {\n                                    if (\"auto\" === i) return;\n                                    i = this.em(\n                                        this.length2em(i) + 2 * this.fLine\n                                    );\n                                }\n                                var s = t.firstChild(this.chtml);\n                                if (\n                                    (t.setStyle(s, \"width\", i),\n                                    t.setStyle(s, \"minWidth\", this.em(r)),\n                                    n || o)\n                                ) {\n                                    t.setStyle(this.chtml, \"margin\", \"\");\n                                    var a = this.node.attributes.get(\n                                        \"data-width-includes-label\"\n                                    )\n                                        ? \"padding\"\n                                        : \"margin\";\n                                    n === o\n                                        ? t.setStyle(s, a, \"0 \" + this.em(o))\n                                        : t.setStyle(\n                                              s,\n                                              a,\n                                              \"0 \" +\n                                                  this.em(o) +\n                                                  \" 0 \" +\n                                                  this.em(n)\n                                          );\n                                }\n                                t.setAttribute(this.itable, \"width\", \"full\");\n                            }),\n                            (e.prototype.handleAlign = function () {\n                                var t = s(this.getAlignmentRow(), 2),\n                                    e = t[0],\n                                    r = t[1];\n                                if (null === r)\n                                    \"axis\" !== e &&\n                                        this.adaptor.setAttribute(\n                                            this.chtml,\n                                            \"align\",\n                                            e\n                                        );\n                                else {\n                                    var n = this.getVerticalPosition(r, e);\n                                    this.adaptor.setAttribute(\n                                        this.chtml,\n                                        \"align\",\n                                        \"top\"\n                                    ),\n                                        this.adaptor.setStyle(\n                                            this.chtml,\n                                            \"verticalAlign\",\n                                            this.em(n)\n                                        );\n                                }\n                            }),\n                            (e.prototype.handleJustify = function () {\n                                var t = this.getAlignShift()[0];\n                                \"center\" !== t &&\n                                    this.adaptor.setAttribute(\n                                        this.chtml,\n                                        \"justify\",\n                                        t\n                                    );\n                            }),\n                            (e.prototype.handleLabels = function () {\n                                if (this.hasLabels) {\n                                    var t = this.labels,\n                                        e = this.node.attributes,\n                                        r = this.adaptor,\n                                        n = e.get(\"side\");\n                                    r.setAttribute(this.chtml, \"side\", n),\n                                        r.setAttribute(t, \"align\", n),\n                                        r.setStyle(t, n, \"0\");\n                                    var o = s(this.addLabelPadding(n), 2),\n                                        i = o[0],\n                                        a = o[1];\n                                    if (a) {\n                                        var l = r.firstChild(this.chtml);\n                                        this.setIndent(l, i, a);\n                                    }\n                                    this.updateRowHeights(),\n                                        this.addLabelSpacing();\n                                }\n                            }),\n                            (e.prototype.addLabelPadding = function (t) {\n                                var e = s(this.getPadAlignShift(t), 3),\n                                    r = e[1],\n                                    n = e[2],\n                                    o = {};\n                                if (\n                                    \"right\" === t &&\n                                    !this.node.attributes.get(\n                                        \"data-width-includes-label\"\n                                    )\n                                ) {\n                                    var i = this.node.attributes.get(\"width\"),\n                                        a = this.getBBox(),\n                                        l = a.w,\n                                        c = a.L,\n                                        p = a.R;\n                                    o.style = {\n                                        width: (0, u.isPercent)(i)\n                                            ? \"calc(\" +\n                                              i +\n                                              \" + \" +\n                                              this.em(c + p) +\n                                              \")\"\n                                            : this.em(c + l + p),\n                                    };\n                                }\n                                return (\n                                    this.adaptor.append(\n                                        this.chtml,\n                                        this.html(\"mjx-labels\", o, [\n                                            this.labels,\n                                        ])\n                                    ),\n                                    [r, n]\n                                );\n                            }),\n                            (e.prototype.updateRowHeights = function () {\n                                for (\n                                    var t = this.getTableData(),\n                                        e = t.H,\n                                        r = t.D,\n                                        n = t.NH,\n                                        o = t.ND,\n                                        i = this.getRowHalfSpacing(),\n                                        s = 0;\n                                    s < this.numRows;\n                                    s++\n                                ) {\n                                    var a = this.childNodes[s];\n                                    this.setRowHeight(\n                                        a,\n                                        e[s] +\n                                            r[s] +\n                                            i[s] +\n                                            i[s + 1] +\n                                            this.rLines[s]\n                                    ),\n                                        e[s] !== n[s] || r[s] !== o[s]\n                                            ? this.setRowBaseline(\n                                                  a,\n                                                  e[s] + r[s],\n                                                  r[s]\n                                              )\n                                            : a.node.isKind(\"mlabeledtr\") &&\n                                              this.setCellBaseline(\n                                                  a.childNodes[0],\n                                                  \"\",\n                                                  e[s] + r[s],\n                                                  r[s]\n                                              );\n                                }\n                            }),\n                            (e.prototype.addLabelSpacing = function () {\n                                for (\n                                    var t = this.adaptor,\n                                        e =\n                                            this.node.attributes.get(\n                                                \"equalrows\"\n                                            ),\n                                        r = this.getTableData(),\n                                        n = r.H,\n                                        o = r.D,\n                                        i = e ? this.getEqualRowHeight() : 0,\n                                        s = this.getRowHalfSpacing(),\n                                        a = this.fLine,\n                                        l = t.firstChild(this.labels),\n                                        c = 0;\n                                    c < this.numRows;\n                                    c++\n                                ) {\n                                    this.childNodes[c].node.isKind(\"mlabeledtr\")\n                                        ? (a &&\n                                              t.insert(\n                                                  this.html(\"mjx-mtr\", {\n                                                      style: {\n                                                          height: this.em(a),\n                                                      },\n                                                  }),\n                                                  l\n                                              ),\n                                          t.setStyle(\n                                              l,\n                                              \"height\",\n                                              this.em(\n                                                  (e ? i : n[c] + o[c]) +\n                                                      s[c] +\n                                                      s[c + 1]\n                                              )\n                                          ),\n                                          (l = t.next(l)),\n                                          (a = this.rLines[c]))\n                                        : (a +=\n                                              s[c] +\n                                              (e ? i : n[c] + o[c]) +\n                                              s[c + 1] +\n                                              this.rLines[c]);\n                                }\n                            }),\n                            (e.kind = c.MmlMtable.prototype.kind),\n                            (e.styles = {\n                                \"mjx-mtable\": {\n                                    \"vertical-align\": \".25em\",\n                                    \"text-align\": \"center\",\n                                    position: \"relative\",\n                                    \"box-sizing\": \"border-box\",\n                                    \"border-spacing\": 0,\n                                    \"border-collapse\": \"collapse\",\n                                },\n                                'mjx-mstyle[size=\"s\"] mjx-mtable': {\n                                    \"vertical-align\": \".354em\",\n                                },\n                                \"mjx-labels\": {\n                                    position: \"absolute\",\n                                    left: 0,\n                                    top: 0,\n                                },\n                                \"mjx-table\": {\n                                    display: \"inline-block\",\n                                    \"vertical-align\": \"-.5ex\",\n                                    \"box-sizing\": \"border-box\",\n                                },\n                                \"mjx-table > mjx-itable\": {\n                                    \"vertical-align\": \"middle\",\n                                    \"text-align\": \"left\",\n                                    \"box-sizing\": \"border-box\",\n                                },\n                                \"mjx-labels > mjx-itable\": {\n                                    position: \"absolute\",\n                                    top: 0,\n                                },\n                                'mjx-mtable[justify=\"left\"]': {\n                                    \"text-align\": \"left\",\n                                },\n                                'mjx-mtable[justify=\"right\"]': {\n                                    \"text-align\": \"right\",\n                                },\n                                'mjx-mtable[justify=\"left\"][side=\"left\"]': {\n                                    \"padding-right\": \"0 ! important\",\n                                },\n                                'mjx-mtable[justify=\"left\"][side=\"right\"]': {\n                                    \"padding-left\": \"0 ! important\",\n                                },\n                                'mjx-mtable[justify=\"right\"][side=\"left\"]': {\n                                    \"padding-right\": \"0 ! important\",\n                                },\n                                'mjx-mtable[justify=\"right\"][side=\"right\"]': {\n                                    \"padding-left\": \"0 ! important\",\n                                },\n                                \"mjx-mtable[align]\": {\n                                    \"vertical-align\": \"baseline\",\n                                },\n                                'mjx-mtable[align=\"top\"] > mjx-table': {\n                                    \"vertical-align\": \"top\",\n                                },\n                                'mjx-mtable[align=\"bottom\"] > mjx-table': {\n                                    \"vertical-align\": \"bottom\",\n                                },\n                                'mjx-mtable[side=\"right\"] mjx-labels': {\n                                    \"min-width\": \"100%\",\n                                },\n                            }),\n                            e\n                        );\n                    })((0, l.CommonMtableMixin)(a.CHTMLWrapper));\n                e.CHTMLmtable = p;\n            },\n            7056: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmtd = void 0);\n                var i = r(5355),\n                    s = r(5164),\n                    a = r(4359),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (e) {\n                                t.prototype.toCHTML.call(this, e);\n                                var r = this.node.attributes.get(\"rowalign\"),\n                                    n = this.node.attributes.get(\"columnalign\");\n                                r !==\n                                    this.parent.node.attributes.get(\n                                        \"rowalign\"\n                                    ) &&\n                                    this.adaptor.setAttribute(\n                                        this.chtml,\n                                        \"rowalign\",\n                                        r\n                                    ),\n                                    \"center\" === n ||\n                                        (\"mlabeledtr\" === this.parent.kind &&\n                                            this ===\n                                                this.parent.childNodes[0] &&\n                                            n ===\n                                                this.parent.parent.node.attributes.get(\n                                                    \"side\"\n                                                )) ||\n                                        this.adaptor.setStyle(\n                                            this.chtml,\n                                            \"textAlign\",\n                                            n\n                                        ),\n                                    this.parent.parent.node.getProperty(\n                                        \"useHeight\"\n                                    ) &&\n                                        this.adaptor.append(\n                                            this.chtml,\n                                            this.html(\"mjx-tstrut\")\n                                        );\n                            }),\n                            (e.kind = a.MmlMtd.prototype.kind),\n                            (e.styles = {\n                                \"mjx-mtd\": {\n                                    display: \"table-cell\",\n                                    \"text-align\": \"center\",\n                                    padding: \".215em .4em\",\n                                },\n                                \"mjx-mtd:first-child\": { \"padding-left\": 0 },\n                                \"mjx-mtd:last-child\": { \"padding-right\": 0 },\n                                \"mjx-mtable > * > mjx-itable > *:first-child > mjx-mtd\":\n                                    { \"padding-top\": 0 },\n                                \"mjx-mtable > * > mjx-itable > *:last-child > mjx-mtd\":\n                                    { \"padding-bottom\": 0 },\n                                \"mjx-tstrut\": {\n                                    display: \"inline-block\",\n                                    height: \"1em\",\n                                    \"vertical-align\": \"-.25em\",\n                                },\n                                'mjx-labels[align=\"left\"] > mjx-mtr > mjx-mtd':\n                                    { \"text-align\": \"left\" },\n                                'mjx-labels[align=\"right\"] > mjx-mtr > mjx-mtd':\n                                    { \"text-align\": \"right\" },\n                                \"mjx-mtd[extra]\": { padding: 0 },\n                                'mjx-mtd[rowalign=\"top\"]': {\n                                    \"vertical-align\": \"top\",\n                                },\n                                'mjx-mtd[rowalign=\"center\"]': {\n                                    \"vertical-align\": \"middle\",\n                                },\n                                'mjx-mtd[rowalign=\"bottom\"]': {\n                                    \"vertical-align\": \"bottom\",\n                                },\n                                'mjx-mtd[rowalign=\"baseline\"]': {\n                                    \"vertical-align\": \"baseline\",\n                                },\n                                'mjx-mtd[rowalign=\"axis\"]': {\n                                    \"vertical-align\": \".25em\",\n                                },\n                            }),\n                            e\n                        );\n                    })((0, s.CommonMtdMixin)(i.CHTMLWrapper));\n                e.CHTMLmtd = l;\n            },\n            1259: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmtext = void 0);\n                var i = r(5355),\n                    s = r(6319),\n                    a = r(4770),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return o(e, t), (e.kind = a.MmlMtext.prototype.kind), e;\n                    })((0, s.CommonMtextMixin)(i.CHTMLWrapper));\n                e.CHTMLmtext = l;\n            },\n            3571: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmlabeledtr = e.CHTMLmtr = void 0);\n                var i = r(5355),\n                    s = r(5766),\n                    a = r(5766),\n                    l = r(5022),\n                    c = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (e) {\n                                t.prototype.toCHTML.call(this, e);\n                                var r = this.node.attributes.get(\"rowalign\");\n                                \"baseline\" !== r &&\n                                    this.adaptor.setAttribute(\n                                        this.chtml,\n                                        \"rowalign\",\n                                        r\n                                    );\n                            }),\n                            (e.kind = l.MmlMtr.prototype.kind),\n                            (e.styles = {\n                                \"mjx-mtr\": { display: \"table-row\" },\n                                'mjx-mtr[rowalign=\"top\"] > mjx-mtd': {\n                                    \"vertical-align\": \"top\",\n                                },\n                                'mjx-mtr[rowalign=\"center\"] > mjx-mtd': {\n                                    \"vertical-align\": \"middle\",\n                                },\n                                'mjx-mtr[rowalign=\"bottom\"] > mjx-mtd': {\n                                    \"vertical-align\": \"bottom\",\n                                },\n                                'mjx-mtr[rowalign=\"baseline\"] > mjx-mtd': {\n                                    \"vertical-align\": \"baseline\",\n                                },\n                                'mjx-mtr[rowalign=\"axis\"] > mjx-mtd': {\n                                    \"vertical-align\": \".25em\",\n                                },\n                            }),\n                            e\n                        );\n                    })((0, s.CommonMtrMixin)(i.CHTMLWrapper));\n                e.CHTMLmtr = c;\n                var u = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.toCHTML = function (e) {\n                            t.prototype.toCHTML.call(this, e);\n                            var r = this.adaptor.firstChild(this.chtml);\n                            if (r) {\n                                this.adaptor.remove(r);\n                                var n = this.node.attributes.get(\"rowalign\"),\n                                    o =\n                                        \"baseline\" !== n && \"axis\" !== n\n                                            ? { rowalign: n }\n                                            : {},\n                                    i = this.html(\"mjx-mtr\", o, [r]);\n                                this.adaptor.append(this.parent.labels, i);\n                            }\n                        }),\n                        (e.prototype.markUsed = function () {\n                            t.prototype.markUsed.call(this),\n                                this.jax.wrapperUsage.add(c.kind);\n                        }),\n                        (e.kind = l.MmlMlabeledtr.prototype.kind),\n                        (e.styles = {\n                            \"mjx-mlabeledtr\": { display: \"table-row\" },\n                            'mjx-mlabeledtr[rowalign=\"top\"] > mjx-mtd': {\n                                \"vertical-align\": \"top\",\n                            },\n                            'mjx-mlabeledtr[rowalign=\"center\"] > mjx-mtd': {\n                                \"vertical-align\": \"middle\",\n                            },\n                            'mjx-mlabeledtr[rowalign=\"bottom\"] > mjx-mtd': {\n                                \"vertical-align\": \"bottom\",\n                            },\n                            'mjx-mlabeledtr[rowalign=\"baseline\"] > mjx-mtd': {\n                                \"vertical-align\": \"baseline\",\n                            },\n                            'mjx-mlabeledtr[rowalign=\"axis\"] > mjx-mtd': {\n                                \"vertical-align\": \".25em\",\n                            },\n                        }),\n                        e\n                    );\n                })((0, a.CommonMlabeledtrMixin)(c));\n                e.CHTMLmlabeledtr = u;\n            },\n            6590: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLmunderover = e.CHTMLmover = e.CHTMLmunder = void 0);\n                var i = r(4300),\n                    s = r(1971),\n                    a = r(1971),\n                    l = r(1971),\n                    c = r(5184),\n                    u = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (e) {\n                                if (this.hasMovableLimits())\n                                    return (\n                                        t.prototype.toCHTML.call(this, e),\n                                        void this.adaptor.setAttribute(\n                                            this.chtml,\n                                            \"limits\",\n                                            \"false\"\n                                        )\n                                    );\n                                this.chtml = this.standardCHTMLnode(e);\n                                var r = this.adaptor.append(\n                                        this.adaptor.append(\n                                            this.chtml,\n                                            this.html(\"mjx-row\")\n                                        ),\n                                        this.html(\"mjx-base\")\n                                    ),\n                                    n = this.adaptor.append(\n                                        this.adaptor.append(\n                                            this.chtml,\n                                            this.html(\"mjx-row\")\n                                        ),\n                                        this.html(\"mjx-under\")\n                                    );\n                                this.baseChild.toCHTML(r),\n                                    this.scriptChild.toCHTML(n);\n                                var o = this.baseChild.getOuterBBox(),\n                                    i = this.scriptChild.getOuterBBox(),\n                                    s = this.getUnderKV(o, i)[0],\n                                    a = this.isLineBelow\n                                        ? 0\n                                        : this.getDelta(!0);\n                                this.adaptor.setStyle(\n                                    n,\n                                    \"paddingTop\",\n                                    this.em(s)\n                                ),\n                                    this.setDeltaW(\n                                        [r, n],\n                                        this.getDeltaW([o, i], [0, -a])\n                                    ),\n                                    this.adjustUnderDepth(n, i);\n                            }),\n                            (e.kind = c.MmlMunder.prototype.kind),\n                            (e.styles = {\n                                \"mjx-over\": { \"text-align\": \"left\" },\n                                'mjx-munder:not([limits=\"false\"])': {\n                                    display: \"inline-table\",\n                                },\n                                \"mjx-munder > mjx-row\": {\n                                    \"text-align\": \"left\",\n                                },\n                                \"mjx-under\": { \"padding-bottom\": \".1em\" },\n                            }),\n                            e\n                        );\n                    })((0, s.CommonMunderMixin)(i.CHTMLmsub));\n                e.CHTMLmunder = u;\n                var p = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.toCHTML = function (e) {\n                            if (this.hasMovableLimits())\n                                return (\n                                    t.prototype.toCHTML.call(this, e),\n                                    void this.adaptor.setAttribute(\n                                        this.chtml,\n                                        \"limits\",\n                                        \"false\"\n                                    )\n                                );\n                            this.chtml = this.standardCHTMLnode(e);\n                            var r = this.adaptor.append(\n                                    this.chtml,\n                                    this.html(\"mjx-over\")\n                                ),\n                                n = this.adaptor.append(\n                                    this.chtml,\n                                    this.html(\"mjx-base\")\n                                );\n                            this.scriptChild.toCHTML(r),\n                                this.baseChild.toCHTML(n);\n                            var o = this.scriptChild.getOuterBBox(),\n                                i = this.baseChild.getOuterBBox();\n                            this.adjustBaseHeight(n, i);\n                            var s = this.getOverKU(i, o)[0],\n                                a = this.isLineAbove ? 0 : this.getDelta();\n                            this.adaptor.setStyle(\n                                r,\n                                \"paddingBottom\",\n                                this.em(s)\n                            ),\n                                this.setDeltaW(\n                                    [n, r],\n                                    this.getDeltaW([i, o], [0, a])\n                                ),\n                                this.adjustOverDepth(r, o);\n                        }),\n                        (e.kind = c.MmlMover.prototype.kind),\n                        (e.styles = {\n                            'mjx-mover:not([limits=\"false\"])': {\n                                \"padding-top\": \".1em\",\n                            },\n                            'mjx-mover:not([limits=\"false\"]) > *': {\n                                display: \"block\",\n                                \"text-align\": \"left\",\n                            },\n                        }),\n                        e\n                    );\n                })((0, a.CommonMoverMixin)(i.CHTMLmsup));\n                e.CHTMLmover = p;\n                var h = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.toCHTML = function (e) {\n                            if (this.hasMovableLimits())\n                                return (\n                                    t.prototype.toCHTML.call(this, e),\n                                    void this.adaptor.setAttribute(\n                                        this.chtml,\n                                        \"limits\",\n                                        \"false\"\n                                    )\n                                );\n                            this.chtml = this.standardCHTMLnode(e);\n                            var r = this.adaptor.append(\n                                    this.chtml,\n                                    this.html(\"mjx-over\")\n                                ),\n                                n = this.adaptor.append(\n                                    this.adaptor.append(\n                                        this.chtml,\n                                        this.html(\"mjx-box\")\n                                    ),\n                                    this.html(\"mjx-munder\")\n                                ),\n                                o = this.adaptor.append(\n                                    this.adaptor.append(\n                                        n,\n                                        this.html(\"mjx-row\")\n                                    ),\n                                    this.html(\"mjx-base\")\n                                ),\n                                i = this.adaptor.append(\n                                    this.adaptor.append(\n                                        n,\n                                        this.html(\"mjx-row\")\n                                    ),\n                                    this.html(\"mjx-under\")\n                                );\n                            this.overChild.toCHTML(r),\n                                this.baseChild.toCHTML(o),\n                                this.underChild.toCHTML(i);\n                            var s = this.overChild.getOuterBBox(),\n                                a = this.baseChild.getOuterBBox(),\n                                l = this.underChild.getOuterBBox();\n                            this.adjustBaseHeight(o, a);\n                            var c = this.getOverKU(a, s)[0],\n                                u = this.getUnderKV(a, l)[0],\n                                p = this.getDelta();\n                            this.adaptor.setStyle(\n                                r,\n                                \"paddingBottom\",\n                                this.em(c)\n                            ),\n                                this.adaptor.setStyle(\n                                    i,\n                                    \"paddingTop\",\n                                    this.em(u)\n                                ),\n                                this.setDeltaW(\n                                    [o, i, r],\n                                    this.getDeltaW(\n                                        [a, l, s],\n                                        [\n                                            0,\n                                            this.isLineBelow ? 0 : -p,\n                                            this.isLineAbove ? 0 : p,\n                                        ]\n                                    )\n                                ),\n                                this.adjustOverDepth(r, s),\n                                this.adjustUnderDepth(i, l);\n                        }),\n                        (e.prototype.markUsed = function () {\n                            t.prototype.markUsed.call(this),\n                                this.jax.wrapperUsage.add(i.CHTMLmsubsup.kind);\n                        }),\n                        (e.kind = c.MmlMunderover.prototype.kind),\n                        (e.styles = {\n                            'mjx-munderover:not([limits=\"false\"])': {\n                                \"padding-top\": \".1em\",\n                            },\n                            'mjx-munderover:not([limits=\"false\"]) > *': {\n                                display: \"block\",\n                            },\n                        }),\n                        e\n                    );\n                })((0, l.CommonMunderoverMixin)(i.CHTMLmsubsup));\n                e.CHTMLmunderover = h;\n            },\n            8650: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLscriptbase = void 0);\n                var a = r(5355),\n                    l = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                this.chtml = this.standardCHTMLnode(t);\n                                var e = i(this.getOffset(), 2),\n                                    r = e[0],\n                                    n = e[1],\n                                    o =\n                                        r -\n                                        (this.baseRemoveIc ? this.baseIc : 0),\n                                    s = { \"vertical-align\": this.em(n) };\n                                o && (s[\"margin-left\"] = this.em(o)),\n                                    this.baseChild.toCHTML(this.chtml),\n                                    this.scriptChild.toCHTML(\n                                        this.adaptor.append(\n                                            this.chtml,\n                                            this.html(\"mjx-script\", {\n                                                style: s,\n                                            })\n                                        )\n                                    );\n                            }),\n                            (e.prototype.setDeltaW = function (t, e) {\n                                for (var r = 0; r < e.length; r++)\n                                    e[r] &&\n                                        this.adaptor.setStyle(\n                                            t[r],\n                                            \"paddingLeft\",\n                                            this.em(e[r])\n                                        );\n                            }),\n                            (e.prototype.adjustOverDepth = function (t, e) {\n                                e.d >= 0 ||\n                                    this.adaptor.setStyle(\n                                        t,\n                                        \"marginBottom\",\n                                        this.em(e.d * e.rscale)\n                                    );\n                            }),\n                            (e.prototype.adjustUnderDepth = function (t, e) {\n                                var r, n;\n                                if (!(e.d >= 0)) {\n                                    var o = this.adaptor,\n                                        i = this.em(e.d),\n                                        a = this.html(\"mjx-box\", {\n                                            style: {\n                                                \"margin-bottom\": i,\n                                                \"vertical-align\": i,\n                                            },\n                                        });\n                                    try {\n                                        for (\n                                            var l = s(\n                                                    o.childNodes(\n                                                        o.firstChild(t)\n                                                    )\n                                                ),\n                                                c = l.next();\n                                            !c.done;\n                                            c = l.next()\n                                        ) {\n                                            var u = c.value;\n                                            o.append(a, u);\n                                        }\n                                    } catch (t) {\n                                        r = { error: t };\n                                    } finally {\n                                        try {\n                                            c &&\n                                                !c.done &&\n                                                (n = l.return) &&\n                                                n.call(l);\n                                        } finally {\n                                            if (r) throw r.error;\n                                        }\n                                    }\n                                    o.append(o.firstChild(t), a);\n                                }\n                            }),\n                            (e.prototype.adjustBaseHeight = function (t, e) {\n                                if (this.node.attributes.get(\"accent\")) {\n                                    var r = this.font.params.x_height * e.scale;\n                                    e.h < r &&\n                                        (this.adaptor.setStyle(\n                                            t,\n                                            \"paddingTop\",\n                                            this.em(r - e.h)\n                                        ),\n                                        (e.h = r));\n                                }\n                            }),\n                            (e.kind = \"scriptbase\"),\n                            e\n                        );\n                    })((0, r(167).CommonScriptbaseMixin)(a.CHTMLWrapper));\n                e.CHTMLscriptbase = l;\n            },\n            421: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CHTMLxml =\n                        e.CHTMLannotationXML =\n                        e.CHTMLannotation =\n                        e.CHTMLsemantics =\n                            void 0);\n                var i = r(5355),\n                    s = r(5806),\n                    a = r(9102),\n                    l = r(9007),\n                    c = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.toCHTML = function (t) {\n                                var e = this.standardCHTMLnode(t);\n                                this.childNodes.length &&\n                                    this.childNodes[0].toCHTML(e);\n                            }),\n                            (e.kind = a.MmlSemantics.prototype.kind),\n                            e\n                        );\n                    })((0, s.CommonSemanticsMixin)(i.CHTMLWrapper));\n                e.CHTMLsemantics = c;\n                var u = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.toCHTML = function (e) {\n                            t.prototype.toCHTML.call(this, e);\n                        }),\n                        (e.prototype.computeBBox = function () {\n                            return this.bbox;\n                        }),\n                        (e.kind = a.MmlAnnotation.prototype.kind),\n                        e\n                    );\n                })(i.CHTMLWrapper);\n                e.CHTMLannotation = u;\n                var p = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.kind = a.MmlAnnotationXML.prototype.kind),\n                        (e.styles = {\n                            \"mjx-annotation-xml\": {\n                                \"font-family\": \"initial\",\n                                \"line-height\": \"normal\",\n                            },\n                        }),\n                        e\n                    );\n                })(i.CHTMLWrapper);\n                e.CHTMLannotationXML = p;\n                var h = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.toCHTML = function (t) {\n                            this.chtml = this.adaptor.append(\n                                t,\n                                this.adaptor.clone(this.node.getXML())\n                            );\n                        }),\n                        (e.prototype.computeBBox = function (t, e) {\n                            void 0 === e && (e = !1);\n                            var r = this.jax.measureXMLnode(this.node.getXML()),\n                                n = r.w,\n                                o = r.h,\n                                i = r.d;\n                            (t.w = n), (t.h = o), (t.d = i);\n                        }),\n                        (e.prototype.getStyles = function () {}),\n                        (e.prototype.getScale = function () {}),\n                        (e.prototype.getVariant = function () {}),\n                        (e.kind = l.XMLNode.prototype.kind),\n                        (e.autoStyle = !1),\n                        e\n                    );\n                })(i.CHTMLWrapper);\n                e.CHTMLxml = h;\n            },\n            2760: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.TeXFont = void 0);\n                var s = r(8042),\n                    a = r(5920),\n                    l = r(4005),\n                    c = r(1015),\n                    u = r(4515),\n                    p = r(6555),\n                    h = r(2183),\n                    f = r(3490),\n                    d = r(9056),\n                    m = r(3019),\n                    y = r(2713),\n                    g = r(7517),\n                    b = r(4182),\n                    v = r(2679),\n                    _ = r(5469),\n                    S = r(7563),\n                    M = r(9409),\n                    O = r(775),\n                    x = r(9551),\n                    E = r(7907),\n                    A = r(9659),\n                    C = r(98),\n                    T = r(6275),\n                    N = r(6530),\n                    w = r(4409),\n                    L = r(5292),\n                    I = r(9124),\n                    P = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.defaultCssFamilyPrefix = \"MJXZERO\"),\n                            (e.defaultVariantClasses = {\n                                normal: \"mjx-n\",\n                                bold: \"mjx-b\",\n                                italic: \"mjx-i\",\n                                \"bold-italic\": \"mjx-b mjx-i\",\n                                \"double-struck\": \"mjx-ds mjx-b\",\n                                fraktur: \"mjx-fr\",\n                                \"bold-fraktur\": \"mjx-fr mjx-b\",\n                                script: \"mjx-sc mjx-i\",\n                                \"bold-script\": \"mjx-sc mjx-b mjx-i\",\n                                \"sans-serif\": \"mjx-ss\",\n                                \"bold-sans-serif\": \"mjx-ss mjx-b\",\n                                \"sans-serif-italic\": \"mjx-ss mjx-i\",\n                                \"sans-serif-bold-italic\": \"mjx-ss mjx-b mjx-i\",\n                                monospace: \"mjx-ty\",\n                                \"-smallop\": \"mjx-sop\",\n                                \"-largeop\": \"mjx-lop\",\n                                \"-size3\": \"mjx-s3\",\n                                \"-size4\": \"mjx-s4\",\n                                \"-tex-calligraphic\": \"mjx-cal mjx-i\",\n                                \"-tex-bold-calligraphic\": \"mjx-cal mjx-b\",\n                                \"-tex-mathit\": \"mjx-mit mjx-i\",\n                                \"-tex-oldstyle\": \"mjx-os\",\n                                \"-tex-bold-oldstyle\": \"mjx-os mjx-b\",\n                                \"-tex-variant\": \"mjx-var\",\n                            }),\n                            (e.defaultVariantLetters = {\n                                normal: \"\",\n                                bold: \"B\",\n                                italic: \"MI\",\n                                \"bold-italic\": \"BI\",\n                                \"double-struck\": \"A\",\n                                fraktur: \"FR\",\n                                \"bold-fraktur\": \"FRB\",\n                                script: \"SC\",\n                                \"bold-script\": \"SCB\",\n                                \"sans-serif\": \"SS\",\n                                \"bold-sans-serif\": \"SSB\",\n                                \"sans-serif-italic\": \"SSI\",\n                                \"sans-serif-bold-italic\": \"SSBI\",\n                                monospace: \"T\",\n                                \"-smallop\": \"S1\",\n                                \"-largeop\": \"S2\",\n                                \"-size3\": \"S3\",\n                                \"-size4\": \"S4\",\n                                \"-tex-calligraphic\": \"C\",\n                                \"-tex-bold-calligraphic\": \"CB\",\n                                \"-tex-mathit\": \"MI\",\n                                \"-tex-oldstyle\": \"C\",\n                                \"-tex-bold-oldstyle\": \"CB\",\n                                \"-tex-variant\": \"A\",\n                            }),\n                            (e.defaultDelimiters = I.delimiters),\n                            (e.defaultChars = {\n                                normal: y.normal,\n                                bold: c.bold,\n                                italic: f.italic,\n                                \"bold-italic\": l.boldItalic,\n                                \"double-struck\": u.doubleStruck,\n                                fraktur: h.fraktur,\n                                \"bold-fraktur\": p.frakturBold,\n                                script: M.script,\n                                \"bold-script\": S.scriptBold,\n                                \"sans-serif\": _.sansSerif,\n                                \"bold-sans-serif\": b.sansSerifBold,\n                                \"sans-serif-italic\": v.sansSerifItalic,\n                                \"sans-serif-bold-italic\": g.sansSerifBoldItalic,\n                                monospace: m.monospace,\n                                \"-smallop\": O.smallop,\n                                \"-largeop\": d.largeop,\n                                \"-size3\": N.texSize3,\n                                \"-size4\": w.texSize4,\n                                \"-tex-calligraphic\": E.texCalligraphic,\n                                \"-tex-bold-calligraphic\": x.texCalligraphicBold,\n                                \"-tex-mathit\": A.texMathit,\n                                \"-tex-oldstyle\": T.texOldstyle,\n                                \"-tex-bold-oldstyle\": C.texOldstyleBold,\n                                \"-tex-variant\": L.texVariant,\n                            }),\n                            (e.defaultStyles = i(\n                                i({}, s.CHTMLFontData.defaultStyles),\n                                {\n                                    \".MJX-TEX\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX\",\n                                    },\n                                    \".TEX-B\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-B\",\n                                    },\n                                    \".TEX-I\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-I\",\n                                    },\n                                    \".TEX-MI\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-MI\",\n                                    },\n                                    \".TEX-BI\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-BI\",\n                                    },\n                                    \".TEX-S1\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-S1\",\n                                    },\n                                    \".TEX-S2\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-S2\",\n                                    },\n                                    \".TEX-S3\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-S3\",\n                                    },\n                                    \".TEX-S4\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-S4\",\n                                    },\n                                    \".TEX-A\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-A\",\n                                    },\n                                    \".TEX-C\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-C\",\n                                    },\n                                    \".TEX-CB\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-CB\",\n                                    },\n                                    \".TEX-FR\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-FR\",\n                                    },\n                                    \".TEX-FRB\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-FRB\",\n                                    },\n                                    \".TEX-SS\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-SS\",\n                                    },\n                                    \".TEX-SSB\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-SSB\",\n                                    },\n                                    \".TEX-SSI\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-SSI\",\n                                    },\n                                    \".TEX-SC\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-SC\",\n                                    },\n                                    \".TEX-T\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-T\",\n                                    },\n                                    \".TEX-V\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-V\",\n                                    },\n                                    \".TEX-VB\": {\n                                        \"font-family\": \"MJXZERO, MJXTEX-VB\",\n                                    },\n                                    \"mjx-stretchy-v mjx-c, mjx-stretchy-h mjx-c\":\n                                        {\n                                            \"font-family\":\n                                                \"MJXZERO, MJXTEX-S1, MJXTEX-S4, MJXTEX, MJXTEX-A ! important\",\n                                        },\n                                }\n                            )),\n                            (e.defaultFonts = i(\n                                i({}, s.CHTMLFontData.defaultFonts),\n                                {\n                                    \"@font-face /* 1 */\": {\n                                        \"font-family\": \"MJXTEX\",\n                                        src: 'url(\"%%URL%%/MathJax_Main-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 2 */\": {\n                                        \"font-family\": \"MJXTEX-B\",\n                                        src: 'url(\"%%URL%%/MathJax_Main-Bold.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 3 */\": {\n                                        \"font-family\": \"MJXTEX-I\",\n                                        src: 'url(\"%%URL%%/MathJax_Math-Italic.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 4 */\": {\n                                        \"font-family\": \"MJXTEX-MI\",\n                                        src: 'url(\"%%URL%%/MathJax_Main-Italic.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 5 */\": {\n                                        \"font-family\": \"MJXTEX-BI\",\n                                        src: 'url(\"%%URL%%/MathJax_Math-BoldItalic.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 6 */\": {\n                                        \"font-family\": \"MJXTEX-S1\",\n                                        src: 'url(\"%%URL%%/MathJax_Size1-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 7 */\": {\n                                        \"font-family\": \"MJXTEX-S2\",\n                                        src: 'url(\"%%URL%%/MathJax_Size2-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 8 */\": {\n                                        \"font-family\": \"MJXTEX-S3\",\n                                        src: 'url(\"%%URL%%/MathJax_Size3-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 9 */\": {\n                                        \"font-family\": \"MJXTEX-S4\",\n                                        src: 'url(\"%%URL%%/MathJax_Size4-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 10 */\": {\n                                        \"font-family\": \"MJXTEX-A\",\n                                        src: 'url(\"%%URL%%/MathJax_AMS-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 11 */\": {\n                                        \"font-family\": \"MJXTEX-C\",\n                                        src: 'url(\"%%URL%%/MathJax_Calligraphic-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 12 */\": {\n                                        \"font-family\": \"MJXTEX-CB\",\n                                        src: 'url(\"%%URL%%/MathJax_Calligraphic-Bold.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 13 */\": {\n                                        \"font-family\": \"MJXTEX-FR\",\n                                        src: 'url(\"%%URL%%/MathJax_Fraktur-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 14 */\": {\n                                        \"font-family\": \"MJXTEX-FRB\",\n                                        src: 'url(\"%%URL%%/MathJax_Fraktur-Bold.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 15 */\": {\n                                        \"font-family\": \"MJXTEX-SS\",\n                                        src: 'url(\"%%URL%%/MathJax_SansSerif-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 16 */\": {\n                                        \"font-family\": \"MJXTEX-SSB\",\n                                        src: 'url(\"%%URL%%/MathJax_SansSerif-Bold.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 17 */\": {\n                                        \"font-family\": \"MJXTEX-SSI\",\n                                        src: 'url(\"%%URL%%/MathJax_SansSerif-Italic.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 18 */\": {\n                                        \"font-family\": \"MJXTEX-SC\",\n                                        src: 'url(\"%%URL%%/MathJax_Script-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 19 */\": {\n                                        \"font-family\": \"MJXTEX-T\",\n                                        src: 'url(\"%%URL%%/MathJax_Typewriter-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 20 */\": {\n                                        \"font-family\": \"MJXTEX-V\",\n                                        src: 'url(\"%%URL%%/MathJax_Vector-Regular.woff\") format(\"woff\")',\n                                    },\n                                    \"@font-face /* 21 */\": {\n                                        \"font-family\": \"MJXTEX-VB\",\n                                        src: 'url(\"%%URL%%/MathJax_Vector-Bold.woff\") format(\"woff\")',\n                                    },\n                                }\n                            )),\n                            e\n                        );\n                    })((0, a.CommonTeXFontMixin)(s.CHTMLFontData));\n                e.TeXFont = P;\n            },\n            4005: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.boldItalic = void 0);\n                var n = r(8042),\n                    o = r(3980);\n                e.boldItalic = (0, n.AddCSS)(o.boldItalic, {\n                    305: { f: \"B\" },\n                    567: { f: \"B\" },\n                    8260: { c: \"/\" },\n                    8710: { c: \"\\\\394\" },\n                    10744: { c: \"/\" },\n                });\n            },\n            1015: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.bold = void 0);\n                var n = r(8042),\n                    o = r(1103);\n                e.bold = (0, n.AddCSS)(o.bold, {\n                    183: { c: \"\\\\22C5\" },\n                    305: { f: \"\" },\n                    567: { f: \"\" },\n                    697: { c: \"\\\\2032\" },\n                    8194: { c: \"\" },\n                    8195: { c: \"\" },\n                    8196: { c: \"\" },\n                    8197: { c: \"\" },\n                    8198: { c: \"\" },\n                    8201: { c: \"\" },\n                    8202: { c: \"\" },\n                    8213: { c: \"\\\\2014\" },\n                    8214: { c: \"\\\\2225\" },\n                    8215: { c: \"_\" },\n                    8226: { c: \"\\\\2219\" },\n                    8243: { c: \"\\\\2032\\\\2032\" },\n                    8244: { c: \"\\\\2032\\\\2032\\\\2032\" },\n                    8254: { c: \"\\\\2C9\" },\n                    8260: { c: \"/\" },\n                    8279: { c: \"\\\\2032\\\\2032\\\\2032\\\\2032\" },\n                    8407: { c: \"\\\\2192\", f: \"VB\" },\n                    8602: { c: \"\\\\2190\\\\338\" },\n                    8603: { c: \"\\\\2192\\\\338\" },\n                    8622: { c: \"\\\\2194\\\\338\" },\n                    8653: { c: \"\\\\21D0\\\\338\" },\n                    8654: { c: \"\\\\21D4\\\\338\" },\n                    8655: { c: \"\\\\21D2\\\\338\" },\n                    8708: { c: \"\\\\2203\\\\338\" },\n                    8710: { c: \"\\\\394\" },\n                    8716: { c: \"\\\\220B\\\\338\" },\n                    8740: { c: \"\\\\2223\\\\338\" },\n                    8742: { c: \"\\\\2225\\\\338\" },\n                    8769: { c: \"\\\\223C\\\\338\" },\n                    8772: { c: \"\\\\2243\\\\338\" },\n                    8775: { c: \"\\\\2245\\\\338\" },\n                    8777: { c: \"\\\\2248\\\\338\" },\n                    8802: { c: \"\\\\2261\\\\338\" },\n                    8813: { c: \"\\\\224D\\\\338\" },\n                    8814: { c: \"<\\\\338\" },\n                    8815: { c: \">\\\\338\" },\n                    8816: { c: \"\\\\2264\\\\338\" },\n                    8817: { c: \"\\\\2265\\\\338\" },\n                    8832: { c: \"\\\\227A\\\\338\" },\n                    8833: { c: \"\\\\227B\\\\338\" },\n                    8836: { c: \"\\\\2282\\\\338\" },\n                    8837: { c: \"\\\\2283\\\\338\" },\n                    8840: { c: \"\\\\2286\\\\338\" },\n                    8841: { c: \"\\\\2287\\\\338\" },\n                    8876: { c: \"\\\\22A2\\\\338\" },\n                    8877: { c: \"\\\\22A8\\\\338\" },\n                    8930: { c: \"\\\\2291\\\\338\" },\n                    8931: { c: \"\\\\2292\\\\338\" },\n                    9001: { c: \"\\\\27E8\" },\n                    9002: { c: \"\\\\27E9\" },\n                    9653: { c: \"\\\\25B3\" },\n                    9663: { c: \"\\\\25BD\" },\n                    10072: { c: \"\\\\2223\" },\n                    10744: { c: \"/\", f: \"BI\" },\n                    10799: { c: \"\\\\D7\" },\n                    12296: { c: \"\\\\27E8\" },\n                    12297: { c: \"\\\\27E9\" },\n                });\n            },\n            4515: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.doubleStruck = void 0);\n                var n = r(6001);\n                Object.defineProperty(e, \"doubleStruck\", {\n                    enumerable: !0,\n                    get: function () {\n                        return n.doubleStruck;\n                    },\n                });\n            },\n            6555: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.frakturBold = void 0);\n                var n = r(8042),\n                    o = r(3696);\n                e.frakturBold = (0, n.AddCSS)(o.frakturBold, {\n                    8260: { c: \"/\" },\n                });\n            },\n            2183: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.fraktur = void 0);\n                var n = r(8042),\n                    o = r(9587);\n                e.fraktur = (0, n.AddCSS)(o.fraktur, { 8260: { c: \"/\" } });\n            },\n            3490: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.italic = void 0);\n                var n = r(8042),\n                    o = r(8348);\n                e.italic = (0, n.AddCSS)(o.italic, {\n                    47: { f: \"I\" },\n                    989: { c: \"\\\\E008\", f: \"A\" },\n                    8213: { c: \"\\\\2014\" },\n                    8215: { c: \"_\" },\n                    8260: { c: \"/\", f: \"I\" },\n                    8710: { c: \"\\\\394\", f: \"I\" },\n                    10744: { c: \"/\", f: \"I\" },\n                });\n            },\n            9056: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.largeop = void 0);\n                var n = r(8042),\n                    o = r(1376);\n                e.largeop = (0, n.AddCSS)(o.largeop, {\n                    8214: { f: \"S1\" },\n                    8260: { c: \"/\" },\n                    8593: { f: \"S1\" },\n                    8595: { f: \"S1\" },\n                    8657: { f: \"S1\" },\n                    8659: { f: \"S1\" },\n                    8739: { f: \"S1\" },\n                    8741: { f: \"S1\" },\n                    9001: { c: \"\\\\27E8\" },\n                    9002: { c: \"\\\\27E9\" },\n                    9168: { f: \"S1\" },\n                    10072: { c: \"\\\\2223\", f: \"S1\" },\n                    10764: { c: \"\\\\222C\\\\222C\" },\n                    12296: { c: \"\\\\27E8\" },\n                    12297: { c: \"\\\\27E9\" },\n                });\n            },\n            3019: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.monospace = void 0);\n                var n = r(8042),\n                    o = r(1439);\n                e.monospace = (0, n.AddCSS)(o.monospace, {\n                    697: { c: \"\\\\2032\" },\n                    913: { c: \"A\" },\n                    914: { c: \"B\" },\n                    917: { c: \"E\" },\n                    918: { c: \"Z\" },\n                    919: { c: \"H\" },\n                    921: { c: \"I\" },\n                    922: { c: \"K\" },\n                    924: { c: \"M\" },\n                    925: { c: \"N\" },\n                    927: { c: \"O\" },\n                    929: { c: \"P\" },\n                    932: { c: \"T\" },\n                    935: { c: \"X\" },\n                    8215: { c: \"_\" },\n                    8243: { c: \"\\\\2032\\\\2032\" },\n                    8244: { c: \"\\\\2032\\\\2032\\\\2032\" },\n                    8260: { c: \"/\" },\n                    8279: { c: \"\\\\2032\\\\2032\\\\2032\\\\2032\" },\n                    8710: { c: \"\\\\394\" },\n                });\n            },\n            2713: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.normal = void 0);\n                var n = r(8042),\n                    o = r(331);\n                e.normal = (0, n.AddCSS)(o.normal, {\n                    163: { f: \"MI\" },\n                    165: { f: \"A\" },\n                    174: { f: \"A\" },\n                    183: { c: \"\\\\22C5\" },\n                    240: { f: \"A\" },\n                    697: { c: \"\\\\2032\" },\n                    913: { c: \"A\" },\n                    914: { c: \"B\" },\n                    917: { c: \"E\" },\n                    918: { c: \"Z\" },\n                    919: { c: \"H\" },\n                    921: { c: \"I\" },\n                    922: { c: \"K\" },\n                    924: { c: \"M\" },\n                    925: { c: \"N\" },\n                    927: { c: \"O\" },\n                    929: { c: \"P\" },\n                    932: { c: \"T\" },\n                    935: { c: \"X\" },\n                    8192: { c: \"\" },\n                    8193: { c: \"\" },\n                    8194: { c: \"\" },\n                    8195: { c: \"\" },\n                    8196: { c: \"\" },\n                    8197: { c: \"\" },\n                    8198: { c: \"\" },\n                    8201: { c: \"\" },\n                    8202: { c: \"\" },\n                    8203: { c: \"\" },\n                    8204: { c: \"\" },\n                    8213: { c: \"\\\\2014\" },\n                    8214: { c: \"\\\\2225\" },\n                    8215: { c: \"_\" },\n                    8226: { c: \"\\\\2219\" },\n                    8243: { c: \"\\\\2032\\\\2032\" },\n                    8244: { c: \"\\\\2032\\\\2032\\\\2032\" },\n                    8245: { f: \"A\" },\n                    8246: { c: \"\\\\2035\\\\2035\", f: \"A\" },\n                    8247: { c: \"\\\\2035\\\\2035\\\\2035\", f: \"A\" },\n                    8254: { c: \"\\\\2C9\" },\n                    8260: { c: \"/\" },\n                    8279: { c: \"\\\\2032\\\\2032\\\\2032\\\\2032\" },\n                    8288: { c: \"\" },\n                    8289: { c: \"\" },\n                    8290: { c: \"\" },\n                    8291: { c: \"\" },\n                    8292: { c: \"\" },\n                    8407: { c: \"\\\\2192\", f: \"V\" },\n                    8450: { c: \"C\", f: \"A\" },\n                    8459: { c: \"H\", f: \"SC\" },\n                    8460: { c: \"H\", f: \"FR\" },\n                    8461: { c: \"H\", f: \"A\" },\n                    8462: { c: \"h\", f: \"I\" },\n                    8463: { f: \"A\" },\n                    8464: { c: \"I\", f: \"SC\" },\n                    8465: { c: \"I\", f: \"FR\" },\n                    8466: { c: \"L\", f: \"SC\" },\n                    8469: { c: \"N\", f: \"A\" },\n                    8473: { c: \"P\", f: \"A\" },\n                    8474: { c: \"Q\", f: \"A\" },\n                    8475: { c: \"R\", f: \"SC\" },\n                    8476: { c: \"R\", f: \"FR\" },\n                    8477: { c: \"R\", f: \"A\" },\n                    8484: { c: \"Z\", f: \"A\" },\n                    8486: { c: \"\\\\3A9\" },\n                    8487: { f: \"A\" },\n                    8488: { c: \"Z\", f: \"FR\" },\n                    8492: { c: \"B\", f: \"SC\" },\n                    8493: { c: \"C\", f: \"FR\" },\n                    8496: { c: \"E\", f: \"SC\" },\n                    8497: { c: \"F\", f: \"SC\" },\n                    8498: { f: \"A\" },\n                    8499: { c: \"M\", f: \"SC\" },\n                    8502: { f: \"A\" },\n                    8503: { f: \"A\" },\n                    8504: { f: \"A\" },\n                    8513: { f: \"A\" },\n                    8602: { f: \"A\" },\n                    8603: { f: \"A\" },\n                    8606: { f: \"A\" },\n                    8608: { f: \"A\" },\n                    8610: { f: \"A\" },\n                    8611: { f: \"A\" },\n                    8619: { f: \"A\" },\n                    8620: { f: \"A\" },\n                    8621: { f: \"A\" },\n                    8622: { f: \"A\" },\n                    8624: { f: \"A\" },\n                    8625: { f: \"A\" },\n                    8630: { f: \"A\" },\n                    8631: { f: \"A\" },\n                    8634: { f: \"A\" },\n                    8635: { f: \"A\" },\n                    8638: { f: \"A\" },\n                    8639: { f: \"A\" },\n                    8642: { f: \"A\" },\n                    8643: { f: \"A\" },\n                    8644: { f: \"A\" },\n                    8646: { f: \"A\" },\n                    8647: { f: \"A\" },\n                    8648: { f: \"A\" },\n                    8649: { f: \"A\" },\n                    8650: { f: \"A\" },\n                    8651: { f: \"A\" },\n                    8653: { f: \"A\" },\n                    8654: { f: \"A\" },\n                    8655: { f: \"A\" },\n                    8666: { f: \"A\" },\n                    8667: { f: \"A\" },\n                    8669: { f: \"A\" },\n                    8672: { f: \"A\" },\n                    8674: { f: \"A\" },\n                    8705: { f: \"A\" },\n                    8708: { c: \"\\\\2203\\\\338\" },\n                    8710: { c: \"\\\\394\" },\n                    8716: { c: \"\\\\220B\\\\338\" },\n                    8717: { f: \"A\" },\n                    8719: { f: \"S1\" },\n                    8720: { f: \"S1\" },\n                    8721: { f: \"S1\" },\n                    8724: { f: \"A\" },\n                    8737: { f: \"A\" },\n                    8738: { f: \"A\" },\n                    8740: { f: \"A\" },\n                    8742: { f: \"A\" },\n                    8748: { f: \"S1\" },\n                    8749: { f: \"S1\" },\n                    8750: { f: \"S1\" },\n                    8756: { f: \"A\" },\n                    8757: { f: \"A\" },\n                    8765: { f: \"A\" },\n                    8769: { f: \"A\" },\n                    8770: { f: \"A\" },\n                    8772: { c: \"\\\\2243\\\\338\" },\n                    8775: { c: \"\\\\2246\", f: \"A\" },\n                    8777: { c: \"\\\\2248\\\\338\" },\n                    8778: { f: \"A\" },\n                    8782: { f: \"A\" },\n                    8783: { f: \"A\" },\n                    8785: { f: \"A\" },\n                    8786: { f: \"A\" },\n                    8787: { f: \"A\" },\n                    8790: { f: \"A\" },\n                    8791: { f: \"A\" },\n                    8796: { f: \"A\" },\n                    8802: { c: \"\\\\2261\\\\338\" },\n                    8806: { f: \"A\" },\n                    8807: { f: \"A\" },\n                    8808: { f: \"A\" },\n                    8809: { f: \"A\" },\n                    8812: { f: \"A\" },\n                    8813: { c: \"\\\\224D\\\\338\" },\n                    8814: { f: \"A\" },\n                    8815: { f: \"A\" },\n                    8816: { f: \"A\" },\n                    8817: { f: \"A\" },\n                    8818: { f: \"A\" },\n                    8819: { f: \"A\" },\n                    8820: { c: \"\\\\2272\\\\338\" },\n                    8821: { c: \"\\\\2273\\\\338\" },\n                    8822: { f: \"A\" },\n                    8823: { f: \"A\" },\n                    8824: { c: \"\\\\2276\\\\338\" },\n                    8825: { c: \"\\\\2277\\\\338\" },\n                    8828: { f: \"A\" },\n                    8829: { f: \"A\" },\n                    8830: { f: \"A\" },\n                    8831: { f: \"A\" },\n                    8832: { f: \"A\" },\n                    8833: { f: \"A\" },\n                    8836: { c: \"\\\\2282\\\\338\" },\n                    8837: { c: \"\\\\2283\\\\338\" },\n                    8840: { f: \"A\" },\n                    8841: { f: \"A\" },\n                    8842: { f: \"A\" },\n                    8843: { f: \"A\" },\n                    8847: { f: \"A\" },\n                    8848: { f: \"A\" },\n                    8858: { f: \"A\" },\n                    8859: { f: \"A\" },\n                    8861: { f: \"A\" },\n                    8862: { f: \"A\" },\n                    8863: { f: \"A\" },\n                    8864: { f: \"A\" },\n                    8865: { f: \"A\" },\n                    8873: { f: \"A\" },\n                    8874: { f: \"A\" },\n                    8876: { f: \"A\" },\n                    8877: { f: \"A\" },\n                    8878: { f: \"A\" },\n                    8879: { f: \"A\" },\n                    8882: { f: \"A\" },\n                    8883: { f: \"A\" },\n                    8884: { f: \"A\" },\n                    8885: { f: \"A\" },\n                    8888: { f: \"A\" },\n                    8890: { f: \"A\" },\n                    8891: { f: \"A\" },\n                    8892: { f: \"A\" },\n                    8896: { f: \"S1\" },\n                    8897: { f: \"S1\" },\n                    8898: { f: \"S1\" },\n                    8899: { f: \"S1\" },\n                    8903: { f: \"A\" },\n                    8905: { f: \"A\" },\n                    8906: { f: \"A\" },\n                    8907: { f: \"A\" },\n                    8908: { f: \"A\" },\n                    8909: { f: \"A\" },\n                    8910: { f: \"A\" },\n                    8911: { f: \"A\" },\n                    8912: { f: \"A\" },\n                    8913: { f: \"A\" },\n                    8914: { f: \"A\" },\n                    8915: { f: \"A\" },\n                    8916: { f: \"A\" },\n                    8918: { f: \"A\" },\n                    8919: { f: \"A\" },\n                    8920: { f: \"A\" },\n                    8921: { f: \"A\" },\n                    8922: { f: \"A\" },\n                    8923: { f: \"A\" },\n                    8926: { f: \"A\" },\n                    8927: { f: \"A\" },\n                    8928: { f: \"A\" },\n                    8929: { f: \"A\" },\n                    8930: { c: \"\\\\2291\\\\338\" },\n                    8931: { c: \"\\\\2292\\\\338\" },\n                    8934: { f: \"A\" },\n                    8935: { f: \"A\" },\n                    8936: { f: \"A\" },\n                    8937: { f: \"A\" },\n                    8938: { f: \"A\" },\n                    8939: { f: \"A\" },\n                    8940: { f: \"A\" },\n                    8941: { f: \"A\" },\n                    8965: { c: \"\\\\22BC\", f: \"A\" },\n                    8966: { c: \"\\\\2A5E\", f: \"A\" },\n                    8988: { c: \"\\\\250C\", f: \"A\" },\n                    8989: { c: \"\\\\2510\", f: \"A\" },\n                    8990: { c: \"\\\\2514\", f: \"A\" },\n                    8991: { c: \"\\\\2518\", f: \"A\" },\n                    9001: { c: \"\\\\27E8\" },\n                    9002: { c: \"\\\\27E9\" },\n                    9168: { f: \"S1\" },\n                    9416: { f: \"A\" },\n                    9484: { f: \"A\" },\n                    9488: { f: \"A\" },\n                    9492: { f: \"A\" },\n                    9496: { f: \"A\" },\n                    9585: { f: \"A\" },\n                    9586: { f: \"A\" },\n                    9632: { f: \"A\" },\n                    9633: { f: \"A\" },\n                    9642: { c: \"\\\\25A0\", f: \"A\" },\n                    9650: { f: \"A\" },\n                    9652: { c: \"\\\\25B2\", f: \"A\" },\n                    9653: { c: \"\\\\25B3\" },\n                    9654: { f: \"A\" },\n                    9656: { c: \"\\\\25B6\", f: \"A\" },\n                    9660: { f: \"A\" },\n                    9662: { c: \"\\\\25BC\", f: \"A\" },\n                    9663: { c: \"\\\\25BD\" },\n                    9664: { f: \"A\" },\n                    9666: { c: \"\\\\25C0\", f: \"A\" },\n                    9674: { f: \"A\" },\n                    9723: { c: \"\\\\25A1\", f: \"A\" },\n                    9724: { c: \"\\\\25A0\", f: \"A\" },\n                    9733: { f: \"A\" },\n                    10003: { f: \"A\" },\n                    10016: { f: \"A\" },\n                    10072: { c: \"\\\\2223\" },\n                    10731: { f: \"A\" },\n                    10744: { c: \"/\", f: \"I\" },\n                    10752: { f: \"S1\" },\n                    10753: { f: \"S1\" },\n                    10754: { f: \"S1\" },\n                    10756: { f: \"S1\" },\n                    10758: { f: \"S1\" },\n                    10764: { c: \"\\\\222C\\\\222C\", f: \"S1\" },\n                    10799: { c: \"\\\\D7\" },\n                    10846: { f: \"A\" },\n                    10877: { f: \"A\" },\n                    10878: { f: \"A\" },\n                    10885: { f: \"A\" },\n                    10886: { f: \"A\" },\n                    10887: { f: \"A\" },\n                    10888: { f: \"A\" },\n                    10889: { f: \"A\" },\n                    10890: { f: \"A\" },\n                    10891: { f: \"A\" },\n                    10892: { f: \"A\" },\n                    10901: { f: \"A\" },\n                    10902: { f: \"A\" },\n                    10933: { f: \"A\" },\n                    10934: { f: \"A\" },\n                    10935: { f: \"A\" },\n                    10936: { f: \"A\" },\n                    10937: { f: \"A\" },\n                    10938: { f: \"A\" },\n                    10949: { f: \"A\" },\n                    10950: { f: \"A\" },\n                    10955: { f: \"A\" },\n                    10956: { f: \"A\" },\n                    12296: { c: \"\\\\27E8\" },\n                    12297: { c: \"\\\\27E9\" },\n                    57350: { f: \"A\" },\n                    57351: { f: \"A\" },\n                    57352: { f: \"A\" },\n                    57353: { f: \"A\" },\n                    57356: { f: \"A\" },\n                    57357: { f: \"A\" },\n                    57358: { f: \"A\" },\n                    57359: { f: \"A\" },\n                    57360: { f: \"A\" },\n                    57361: { f: \"A\" },\n                    57366: { f: \"A\" },\n                    57367: { f: \"A\" },\n                    57368: { f: \"A\" },\n                    57369: { f: \"A\" },\n                    57370: { f: \"A\" },\n                    57371: { f: \"A\" },\n                    119808: { c: \"A\", f: \"B\" },\n                    119809: { c: \"B\", f: \"B\" },\n                    119810: { c: \"C\", f: \"B\" },\n                    119811: { c: \"D\", f: \"B\" },\n                    119812: { c: \"E\", f: \"B\" },\n                    119813: { c: \"F\", f: \"B\" },\n                    119814: { c: \"G\", f: \"B\" },\n                    119815: { c: \"H\", f: \"B\" },\n                    119816: { c: \"I\", f: \"B\" },\n                    119817: { c: \"J\", f: \"B\" },\n                    119818: { c: \"K\", f: \"B\" },\n                    119819: { c: \"L\", f: \"B\" },\n                    119820: { c: \"M\", f: \"B\" },\n                    119821: { c: \"N\", f: \"B\" },\n                    119822: { c: \"O\", f: \"B\" },\n                    119823: { c: \"P\", f: \"B\" },\n                    119824: { c: \"Q\", f: \"B\" },\n                    119825: { c: \"R\", f: \"B\" },\n                    119826: { c: \"S\", f: \"B\" },\n                    119827: { c: \"T\", f: \"B\" },\n                    119828: { c: \"U\", f: \"B\" },\n                    119829: { c: \"V\", f: \"B\" },\n                    119830: { c: \"W\", f: \"B\" },\n                    119831: { c: \"X\", f: \"B\" },\n                    119832: { c: \"Y\", f: \"B\" },\n                    119833: { c: \"Z\", f: \"B\" },\n                    119834: { c: \"a\", f: \"B\" },\n                    119835: { c: \"b\", f: \"B\" },\n                    119836: { c: \"c\", f: \"B\" },\n                    119837: { c: \"d\", f: \"B\" },\n                    119838: { c: \"e\", f: \"B\" },\n                    119839: { c: \"f\", f: \"B\" },\n                    119840: { c: \"g\", f: \"B\" },\n                    119841: { c: \"h\", f: \"B\" },\n                    119842: { c: \"i\", f: \"B\" },\n                    119843: { c: \"j\", f: \"B\" },\n                    119844: { c: \"k\", f: \"B\" },\n                    119845: { c: \"l\", f: \"B\" },\n                    119846: { c: \"m\", f: \"B\" },\n                    119847: { c: \"n\", f: \"B\" },\n                    119848: { c: \"o\", f: \"B\" },\n                    119849: { c: \"p\", f: \"B\" },\n                    119850: { c: \"q\", f: \"B\" },\n                    119851: { c: \"r\", f: \"B\" },\n                    119852: { c: \"s\", f: \"B\" },\n                    119853: { c: \"t\", f: \"B\" },\n                    119854: { c: \"u\", f: \"B\" },\n                    119855: { c: \"v\", f: \"B\" },\n                    119856: { c: \"w\", f: \"B\" },\n                    119857: { c: \"x\", f: \"B\" },\n                    119858: { c: \"y\", f: \"B\" },\n                    119859: { c: \"z\", f: \"B\" },\n                    119860: { c: \"A\", f: \"I\" },\n                    119861: { c: \"B\", f: \"I\" },\n                    119862: { c: \"C\", f: \"I\" },\n                    119863: { c: \"D\", f: \"I\" },\n                    119864: { c: \"E\", f: \"I\" },\n                    119865: { c: \"F\", f: \"I\" },\n                    119866: { c: \"G\", f: \"I\" },\n                    119867: { c: \"H\", f: \"I\" },\n                    119868: { c: \"I\", f: \"I\" },\n                    119869: { c: \"J\", f: \"I\" },\n                    119870: { c: \"K\", f: \"I\" },\n                    119871: { c: \"L\", f: \"I\" },\n                    119872: { c: \"M\", f: \"I\" },\n                    119873: { c: \"N\", f: \"I\" },\n                    119874: { c: \"O\", f: \"I\" },\n                    119875: { c: \"P\", f: \"I\" },\n                    119876: { c: \"Q\", f: \"I\" },\n                    119877: { c: \"R\", f: \"I\" },\n                    119878: { c: \"S\", f: \"I\" },\n                    119879: { c: \"T\", f: \"I\" },\n                    119880: { c: \"U\", f: \"I\" },\n                    119881: { c: \"V\", f: \"I\" },\n                    119882: { c: \"W\", f: \"I\" },\n                    119883: { c: \"X\", f: \"I\" },\n                    119884: { c: \"Y\", f: \"I\" },\n                    119885: { c: \"Z\", f: \"I\" },\n                    119886: { c: \"a\", f: \"I\" },\n                    119887: { c: \"b\", f: \"I\" },\n                    119888: { c: \"c\", f: \"I\" },\n                    119889: { c: \"d\", f: \"I\" },\n                    119890: { c: \"e\", f: \"I\" },\n                    119891: { c: \"f\", f: \"I\" },\n                    119892: { c: \"g\", f: \"I\" },\n                    119894: { c: \"i\", f: \"I\" },\n                    119895: { c: \"j\", f: \"I\" },\n                    119896: { c: \"k\", f: \"I\" },\n                    119897: { c: \"l\", f: \"I\" },\n                    119898: { c: \"m\", f: \"I\" },\n                    119899: { c: \"n\", f: \"I\" },\n                    119900: { c: \"o\", f: \"I\" },\n                    119901: { c: \"p\", f: \"I\" },\n                    119902: { c: \"q\", f: \"I\" },\n                    119903: { c: \"r\", f: \"I\" },\n                    119904: { c: \"s\", f: \"I\" },\n                    119905: { c: \"t\", f: \"I\" },\n                    119906: { c: \"u\", f: \"I\" },\n                    119907: { c: \"v\", f: \"I\" },\n                    119908: { c: \"w\", f: \"I\" },\n                    119909: { c: \"x\", f: \"I\" },\n                    119910: { c: \"y\", f: \"I\" },\n                    119911: { c: \"z\", f: \"I\" },\n                    119912: { c: \"A\", f: \"BI\" },\n                    119913: { c: \"B\", f: \"BI\" },\n                    119914: { c: \"C\", f: \"BI\" },\n                    119915: { c: \"D\", f: \"BI\" },\n                    119916: { c: \"E\", f: \"BI\" },\n                    119917: { c: \"F\", f: \"BI\" },\n                    119918: { c: \"G\", f: \"BI\" },\n                    119919: { c: \"H\", f: \"BI\" },\n                    119920: { c: \"I\", f: \"BI\" },\n                    119921: { c: \"J\", f: \"BI\" },\n                    119922: { c: \"K\", f: \"BI\" },\n                    119923: { c: \"L\", f: \"BI\" },\n                    119924: { c: \"M\", f: \"BI\" },\n                    119925: { c: \"N\", f: \"BI\" },\n                    119926: { c: \"O\", f: \"BI\" },\n                    119927: { c: \"P\", f: \"BI\" },\n                    119928: { c: \"Q\", f: \"BI\" },\n                    119929: { c: \"R\", f: \"BI\" },\n                    119930: { c: \"S\", f: \"BI\" },\n                    119931: { c: \"T\", f: \"BI\" },\n                    119932: { c: \"U\", f: \"BI\" },\n                    119933: { c: \"V\", f: \"BI\" },\n                    119934: { c: \"W\", f: \"BI\" },\n                    119935: { c: \"X\", f: \"BI\" },\n                    119936: { c: \"Y\", f: \"BI\" },\n                    119937: { c: \"Z\", f: \"BI\" },\n                    119938: { c: \"a\", f: \"BI\" },\n                    119939: { c: \"b\", f: \"BI\" },\n                    119940: { c: \"c\", f: \"BI\" },\n                    119941: { c: \"d\", f: \"BI\" },\n                    119942: { c: \"e\", f: \"BI\" },\n                    119943: { c: \"f\", f: \"BI\" },\n                    119944: { c: \"g\", f: \"BI\" },\n                    119945: { c: \"h\", f: \"BI\" },\n                    119946: { c: \"i\", f: \"BI\" },\n                    119947: { c: \"j\", f: \"BI\" },\n                    119948: { c: \"k\", f: \"BI\" },\n                    119949: { c: \"l\", f: \"BI\" },\n                    119950: { c: \"m\", f: \"BI\" },\n                    119951: { c: \"n\", f: \"BI\" },\n                    119952: { c: \"o\", f: \"BI\" },\n                    119953: { c: \"p\", f: \"BI\" },\n                    119954: { c: \"q\", f: \"BI\" },\n                    119955: { c: \"r\", f: \"BI\" },\n                    119956: { c: \"s\", f: \"BI\" },\n                    119957: { c: \"t\", f: \"BI\" },\n                    119958: { c: \"u\", f: \"BI\" },\n                    119959: { c: \"v\", f: \"BI\" },\n                    119960: { c: \"w\", f: \"BI\" },\n                    119961: { c: \"x\", f: \"BI\" },\n                    119962: { c: \"y\", f: \"BI\" },\n                    119963: { c: \"z\", f: \"BI\" },\n                    119964: { c: \"A\", f: \"SC\" },\n                    119966: { c: \"C\", f: \"SC\" },\n                    119967: { c: \"D\", f: \"SC\" },\n                    119970: { c: \"G\", f: \"SC\" },\n                    119973: { c: \"J\", f: \"SC\" },\n                    119974: { c: \"K\", f: \"SC\" },\n                    119977: { c: \"N\", f: \"SC\" },\n                    119978: { c: \"O\", f: \"SC\" },\n                    119979: { c: \"P\", f: \"SC\" },\n                    119980: { c: \"Q\", f: \"SC\" },\n                    119982: { c: \"S\", f: \"SC\" },\n                    119983: { c: \"T\", f: \"SC\" },\n                    119984: { c: \"U\", f: \"SC\" },\n                    119985: { c: \"V\", f: \"SC\" },\n                    119986: { c: \"W\", f: \"SC\" },\n                    119987: { c: \"X\", f: \"SC\" },\n                    119988: { c: \"Y\", f: \"SC\" },\n                    119989: { c: \"Z\", f: \"SC\" },\n                    120068: { c: \"A\", f: \"FR\" },\n                    120069: { c: \"B\", f: \"FR\" },\n                    120071: { c: \"D\", f: \"FR\" },\n                    120072: { c: \"E\", f: \"FR\" },\n                    120073: { c: \"F\", f: \"FR\" },\n                    120074: { c: \"G\", f: \"FR\" },\n                    120077: { c: \"J\", f: \"FR\" },\n                    120078: { c: \"K\", f: \"FR\" },\n                    120079: { c: \"L\", f: \"FR\" },\n                    120080: { c: \"M\", f: \"FR\" },\n                    120081: { c: \"N\", f: \"FR\" },\n                    120082: { c: \"O\", f: \"FR\" },\n                    120083: { c: \"P\", f: \"FR\" },\n                    120084: { c: \"Q\", f: \"FR\" },\n                    120086: { c: \"S\", f: \"FR\" },\n                    120087: { c: \"T\", f: \"FR\" },\n                    120088: { c: \"U\", f: \"FR\" },\n                    120089: { c: \"V\", f: \"FR\" },\n                    120090: { c: \"W\", f: \"FR\" },\n                    120091: { c: \"X\", f: \"FR\" },\n                    120092: { c: \"Y\", f: \"FR\" },\n                    120094: { c: \"a\", f: \"FR\" },\n                    120095: { c: \"b\", f: \"FR\" },\n                    120096: { c: \"c\", f: \"FR\" },\n                    120097: { c: \"d\", f: \"FR\" },\n                    120098: { c: \"e\", f: \"FR\" },\n                    120099: { c: \"f\", f: \"FR\" },\n                    120100: { c: \"g\", f: \"FR\" },\n                    120101: { c: \"h\", f: \"FR\" },\n                    120102: { c: \"i\", f: \"FR\" },\n                    120103: { c: \"j\", f: \"FR\" },\n                    120104: { c: \"k\", f: \"FR\" },\n                    120105: { c: \"l\", f: \"FR\" },\n                    120106: { c: \"m\", f: \"FR\" },\n                    120107: { c: \"n\", f: \"FR\" },\n                    120108: { c: \"o\", f: \"FR\" },\n                    120109: { c: \"p\", f: \"FR\" },\n                    120110: { c: \"q\", f: \"FR\" },\n                    120111: { c: \"r\", f: \"FR\" },\n                    120112: { c: \"s\", f: \"FR\" },\n                    120113: { c: \"t\", f: \"FR\" },\n                    120114: { c: \"u\", f: \"FR\" },\n                    120115: { c: \"v\", f: \"FR\" },\n                    120116: { c: \"w\", f: \"FR\" },\n                    120117: { c: \"x\", f: \"FR\" },\n                    120118: { c: \"y\", f: \"FR\" },\n                    120119: { c: \"z\", f: \"FR\" },\n                    120120: { c: \"A\", f: \"A\" },\n                    120121: { c: \"B\", f: \"A\" },\n                    120123: { c: \"D\", f: \"A\" },\n                    120124: { c: \"E\", f: \"A\" },\n                    120125: { c: \"F\", f: \"A\" },\n                    120126: { c: \"G\", f: \"A\" },\n                    120128: { c: \"I\", f: \"A\" },\n                    120129: { c: \"J\", f: \"A\" },\n                    120130: { c: \"K\", f: \"A\" },\n                    120131: { c: \"L\", f: \"A\" },\n                    120132: { c: \"M\", f: \"A\" },\n                    120134: { c: \"O\", f: \"A\" },\n                    120138: { c: \"S\", f: \"A\" },\n                    120139: { c: \"T\", f: \"A\" },\n                    120140: { c: \"U\", f: \"A\" },\n                    120141: { c: \"V\", f: \"A\" },\n                    120142: { c: \"W\", f: \"A\" },\n                    120143: { c: \"X\", f: \"A\" },\n                    120144: { c: \"Y\", f: \"A\" },\n                    120172: { c: \"A\", f: \"FRB\" },\n                    120173: { c: \"B\", f: \"FRB\" },\n                    120174: { c: \"C\", f: \"FRB\" },\n                    120175: { c: \"D\", f: \"FRB\" },\n                    120176: { c: \"E\", f: \"FRB\" },\n                    120177: { c: \"F\", f: \"FRB\" },\n                    120178: { c: \"G\", f: \"FRB\" },\n                    120179: { c: \"H\", f: \"FRB\" },\n                    120180: { c: \"I\", f: \"FRB\" },\n                    120181: { c: \"J\", f: \"FRB\" },\n                    120182: { c: \"K\", f: \"FRB\" },\n                    120183: { c: \"L\", f: \"FRB\" },\n                    120184: { c: \"M\", f: \"FRB\" },\n                    120185: { c: \"N\", f: \"FRB\" },\n                    120186: { c: \"O\", f: \"FRB\" },\n                    120187: { c: \"P\", f: \"FRB\" },\n                    120188: { c: \"Q\", f: \"FRB\" },\n                    120189: { c: \"R\", f: \"FRB\" },\n                    120190: { c: \"S\", f: \"FRB\" },\n                    120191: { c: \"T\", f: \"FRB\" },\n                    120192: { c: \"U\", f: \"FRB\" },\n                    120193: { c: \"V\", f: \"FRB\" },\n                    120194: { c: \"W\", f: \"FRB\" },\n                    120195: { c: \"X\", f: \"FRB\" },\n                    120196: { c: \"Y\", f: \"FRB\" },\n                    120197: { c: \"Z\", f: \"FRB\" },\n                    120198: { c: \"a\", f: \"FRB\" },\n                    120199: { c: \"b\", f: \"FRB\" },\n                    120200: { c: \"c\", f: \"FRB\" },\n                    120201: { c: \"d\", f: \"FRB\" },\n                    120202: { c: \"e\", f: \"FRB\" },\n                    120203: { c: \"f\", f: \"FRB\" },\n                    120204: { c: \"g\", f: \"FRB\" },\n                    120205: { c: \"h\", f: \"FRB\" },\n                    120206: { c: \"i\", f: \"FRB\" },\n                    120207: { c: \"j\", f: \"FRB\" },\n                    120208: { c: \"k\", f: \"FRB\" },\n                    120209: { c: \"l\", f: \"FRB\" },\n                    120210: { c: \"m\", f: \"FRB\" },\n                    120211: { c: \"n\", f: \"FRB\" },\n                    120212: { c: \"o\", f: \"FRB\" },\n                    120213: { c: \"p\", f: \"FRB\" },\n                    120214: { c: \"q\", f: \"FRB\" },\n                    120215: { c: \"r\", f: \"FRB\" },\n                    120216: { c: \"s\", f: \"FRB\" },\n                    120217: { c: \"t\", f: \"FRB\" },\n                    120218: { c: \"u\", f: \"FRB\" },\n                    120219: { c: \"v\", f: \"FRB\" },\n                    120220: { c: \"w\", f: \"FRB\" },\n                    120221: { c: \"x\", f: \"FRB\" },\n                    120222: { c: \"y\", f: \"FRB\" },\n                    120223: { c: \"z\", f: \"FRB\" },\n                    120224: { c: \"A\", f: \"SS\" },\n                    120225: { c: \"B\", f: \"SS\" },\n                    120226: { c: \"C\", f: \"SS\" },\n                    120227: { c: \"D\", f: \"SS\" },\n                    120228: { c: \"E\", f: \"SS\" },\n                    120229: { c: \"F\", f: \"SS\" },\n                    120230: { c: \"G\", f: \"SS\" },\n                    120231: { c: \"H\", f: \"SS\" },\n                    120232: { c: \"I\", f: \"SS\" },\n                    120233: { c: \"J\", f: \"SS\" },\n                    120234: { c: \"K\", f: \"SS\" },\n                    120235: { c: \"L\", f: \"SS\" },\n                    120236: { c: \"M\", f: \"SS\" },\n                    120237: { c: \"N\", f: \"SS\" },\n                    120238: { c: \"O\", f: \"SS\" },\n                    120239: { c: \"P\", f: \"SS\" },\n                    120240: { c: \"Q\", f: \"SS\" },\n                    120241: { c: \"R\", f: \"SS\" },\n                    120242: { c: \"S\", f: \"SS\" },\n                    120243: { c: \"T\", f: \"SS\" },\n                    120244: { c: \"U\", f: \"SS\" },\n                    120245: { c: \"V\", f: \"SS\" },\n                    120246: { c: \"W\", f: \"SS\" },\n                    120247: { c: \"X\", f: \"SS\" },\n                    120248: { c: \"Y\", f: \"SS\" },\n                    120249: { c: \"Z\", f: \"SS\" },\n                    120250: { c: \"a\", f: \"SS\" },\n                    120251: { c: \"b\", f: \"SS\" },\n                    120252: { c: \"c\", f: \"SS\" },\n                    120253: { c: \"d\", f: \"SS\" },\n                    120254: { c: \"e\", f: \"SS\" },\n                    120255: { c: \"f\", f: \"SS\" },\n                    120256: { c: \"g\", f: \"SS\" },\n                    120257: { c: \"h\", f: \"SS\" },\n                    120258: { c: \"i\", f: \"SS\" },\n                    120259: { c: \"j\", f: \"SS\" },\n                    120260: { c: \"k\", f: \"SS\" },\n                    120261: { c: \"l\", f: \"SS\" },\n                    120262: { c: \"m\", f: \"SS\" },\n                    120263: { c: \"n\", f: \"SS\" },\n                    120264: { c: \"o\", f: \"SS\" },\n                    120265: { c: \"p\", f: \"SS\" },\n                    120266: { c: \"q\", f: \"SS\" },\n                    120267: { c: \"r\", f: \"SS\" },\n                    120268: { c: \"s\", f: \"SS\" },\n                    120269: { c: \"t\", f: \"SS\" },\n                    120270: { c: \"u\", f: \"SS\" },\n                    120271: { c: \"v\", f: \"SS\" },\n                    120272: { c: \"w\", f: \"SS\" },\n                    120273: { c: \"x\", f: \"SS\" },\n                    120274: { c: \"y\", f: \"SS\" },\n                    120275: { c: \"z\", f: \"SS\" },\n                    120276: { c: \"A\", f: \"SSB\" },\n                    120277: { c: \"B\", f: \"SSB\" },\n                    120278: { c: \"C\", f: \"SSB\" },\n                    120279: { c: \"D\", f: \"SSB\" },\n                    120280: { c: \"E\", f: \"SSB\" },\n                    120281: { c: \"F\", f: \"SSB\" },\n                    120282: { c: \"G\", f: \"SSB\" },\n                    120283: { c: \"H\", f: \"SSB\" },\n                    120284: { c: \"I\", f: \"SSB\" },\n                    120285: { c: \"J\", f: \"SSB\" },\n                    120286: { c: \"K\", f: \"SSB\" },\n                    120287: { c: \"L\", f: \"SSB\" },\n                    120288: { c: \"M\", f: \"SSB\" },\n                    120289: { c: \"N\", f: \"SSB\" },\n                    120290: { c: \"O\", f: \"SSB\" },\n                    120291: { c: \"P\", f: \"SSB\" },\n                    120292: { c: \"Q\", f: \"SSB\" },\n                    120293: { c: \"R\", f: \"SSB\" },\n                    120294: { c: \"S\", f: \"SSB\" },\n                    120295: { c: \"T\", f: \"SSB\" },\n                    120296: { c: \"U\", f: \"SSB\" },\n                    120297: { c: \"V\", f: \"SSB\" },\n                    120298: { c: \"W\", f: \"SSB\" },\n                    120299: { c: \"X\", f: \"SSB\" },\n                    120300: { c: \"Y\", f: \"SSB\" },\n                    120301: { c: \"Z\", f: \"SSB\" },\n                    120302: { c: \"a\", f: \"SSB\" },\n                    120303: { c: \"b\", f: \"SSB\" },\n                    120304: { c: \"c\", f: \"SSB\" },\n                    120305: { c: \"d\", f: \"SSB\" },\n                    120306: { c: \"e\", f: \"SSB\" },\n                    120307: { c: \"f\", f: \"SSB\" },\n                    120308: { c: \"g\", f: \"SSB\" },\n                    120309: { c: \"h\", f: \"SSB\" },\n                    120310: { c: \"i\", f: \"SSB\" },\n                    120311: { c: \"j\", f: \"SSB\" },\n                    120312: { c: \"k\", f: \"SSB\" },\n                    120313: { c: \"l\", f: \"SSB\" },\n                    120314: { c: \"m\", f: \"SSB\" },\n                    120315: { c: \"n\", f: \"SSB\" },\n                    120316: { c: \"o\", f: \"SSB\" },\n                    120317: { c: \"p\", f: \"SSB\" },\n                    120318: { c: \"q\", f: \"SSB\" },\n                    120319: { c: \"r\", f: \"SSB\" },\n                    120320: { c: \"s\", f: \"SSB\" },\n                    120321: { c: \"t\", f: \"SSB\" },\n                    120322: { c: \"u\", f: \"SSB\" },\n                    120323: { c: \"v\", f: \"SSB\" },\n                    120324: { c: \"w\", f: \"SSB\" },\n                    120325: { c: \"x\", f: \"SSB\" },\n                    120326: { c: \"y\", f: \"SSB\" },\n                    120327: { c: \"z\", f: \"SSB\" },\n                    120328: { c: \"A\", f: \"SSI\" },\n                    120329: { c: \"B\", f: \"SSI\" },\n                    120330: { c: \"C\", f: \"SSI\" },\n                    120331: { c: \"D\", f: \"SSI\" },\n                    120332: { c: \"E\", f: \"SSI\" },\n                    120333: { c: \"F\", f: \"SSI\" },\n                    120334: { c: \"G\", f: \"SSI\" },\n                    120335: { c: \"H\", f: \"SSI\" },\n                    120336: { c: \"I\", f: \"SSI\" },\n                    120337: { c: \"J\", f: \"SSI\" },\n                    120338: { c: \"K\", f: \"SSI\" },\n                    120339: { c: \"L\", f: \"SSI\" },\n                    120340: { c: \"M\", f: \"SSI\" },\n                    120341: { c: \"N\", f: \"SSI\" },\n                    120342: { c: \"O\", f: \"SSI\" },\n                    120343: { c: \"P\", f: \"SSI\" },\n                    120344: { c: \"Q\", f: \"SSI\" },\n                    120345: { c: \"R\", f: \"SSI\" },\n                    120346: { c: \"S\", f: \"SSI\" },\n                    120347: { c: \"T\", f: \"SSI\" },\n                    120348: { c: \"U\", f: \"SSI\" },\n                    120349: { c: \"V\", f: \"SSI\" },\n                    120350: { c: \"W\", f: \"SSI\" },\n                    120351: { c: \"X\", f: \"SSI\" },\n                    120352: { c: \"Y\", f: \"SSI\" },\n                    120353: { c: \"Z\", f: \"SSI\" },\n                    120354: { c: \"a\", f: \"SSI\" },\n                    120355: { c: \"b\", f: \"SSI\" },\n                    120356: { c: \"c\", f: \"SSI\" },\n                    120357: { c: \"d\", f: \"SSI\" },\n                    120358: { c: \"e\", f: \"SSI\" },\n                    120359: { c: \"f\", f: \"SSI\" },\n                    120360: { c: \"g\", f: \"SSI\" },\n                    120361: { c: \"h\", f: \"SSI\" },\n                    120362: { c: \"i\", f: \"SSI\" },\n                    120363: { c: \"j\", f: \"SSI\" },\n                    120364: { c: \"k\", f: \"SSI\" },\n                    120365: { c: \"l\", f: \"SSI\" },\n                    120366: { c: \"m\", f: \"SSI\" },\n                    120367: { c: \"n\", f: \"SSI\" },\n                    120368: { c: \"o\", f: \"SSI\" },\n                    120369: { c: \"p\", f: \"SSI\" },\n                    120370: { c: \"q\", f: \"SSI\" },\n                    120371: { c: \"r\", f: \"SSI\" },\n                    120372: { c: \"s\", f: \"SSI\" },\n                    120373: { c: \"t\", f: \"SSI\" },\n                    120374: { c: \"u\", f: \"SSI\" },\n                    120375: { c: \"v\", f: \"SSI\" },\n                    120376: { c: \"w\", f: \"SSI\" },\n                    120377: { c: \"x\", f: \"SSI\" },\n                    120378: { c: \"y\", f: \"SSI\" },\n                    120379: { c: \"z\", f: \"SSI\" },\n                    120432: { c: \"A\", f: \"T\" },\n                    120433: { c: \"B\", f: \"T\" },\n                    120434: { c: \"C\", f: \"T\" },\n                    120435: { c: \"D\", f: \"T\" },\n                    120436: { c: \"E\", f: \"T\" },\n                    120437: { c: \"F\", f: \"T\" },\n                    120438: { c: \"G\", f: \"T\" },\n                    120439: { c: \"H\", f: \"T\" },\n                    120440: { c: \"I\", f: \"T\" },\n                    120441: { c: \"J\", f: \"T\" },\n                    120442: { c: \"K\", f: \"T\" },\n                    120443: { c: \"L\", f: \"T\" },\n                    120444: { c: \"M\", f: \"T\" },\n                    120445: { c: \"N\", f: \"T\" },\n                    120446: { c: \"O\", f: \"T\" },\n                    120447: { c: \"P\", f: \"T\" },\n                    120448: { c: \"Q\", f: \"T\" },\n                    120449: { c: \"R\", f: \"T\" },\n                    120450: { c: \"S\", f: \"T\" },\n                    120451: { c: \"T\", f: \"T\" },\n                    120452: { c: \"U\", f: \"T\" },\n                    120453: { c: \"V\", f: \"T\" },\n                    120454: { c: \"W\", f: \"T\" },\n                    120455: { c: \"X\", f: \"T\" },\n                    120456: { c: \"Y\", f: \"T\" },\n                    120457: { c: \"Z\", f: \"T\" },\n                    120458: { c: \"a\", f: \"T\" },\n                    120459: { c: \"b\", f: \"T\" },\n                    120460: { c: \"c\", f: \"T\" },\n                    120461: { c: \"d\", f: \"T\" },\n                    120462: { c: \"e\", f: \"T\" },\n                    120463: { c: \"f\", f: \"T\" },\n                    120464: { c: \"g\", f: \"T\" },\n                    120465: { c: \"h\", f: \"T\" },\n                    120466: { c: \"i\", f: \"T\" },\n                    120467: { c: \"j\", f: \"T\" },\n                    120468: { c: \"k\", f: \"T\" },\n                    120469: { c: \"l\", f: \"T\" },\n                    120470: { c: \"m\", f: \"T\" },\n                    120471: { c: \"n\", f: \"T\" },\n                    120472: { c: \"o\", f: \"T\" },\n                    120473: { c: \"p\", f: \"T\" },\n                    120474: { c: \"q\", f: \"T\" },\n                    120475: { c: \"r\", f: \"T\" },\n                    120476: { c: \"s\", f: \"T\" },\n                    120477: { c: \"t\", f: \"T\" },\n                    120478: { c: \"u\", f: \"T\" },\n                    120479: { c: \"v\", f: \"T\" },\n                    120480: { c: \"w\", f: \"T\" },\n                    120481: { c: \"x\", f: \"T\" },\n                    120482: { c: \"y\", f: \"T\" },\n                    120483: { c: \"z\", f: \"T\" },\n                    120488: { c: \"A\", f: \"B\" },\n                    120489: { c: \"B\", f: \"B\" },\n                    120490: { c: \"\\\\393\", f: \"B\" },\n                    120491: { c: \"\\\\394\", f: \"B\" },\n                    120492: { c: \"E\", f: \"B\" },\n                    120493: { c: \"Z\", f: \"B\" },\n                    120494: { c: \"H\", f: \"B\" },\n                    120495: { c: \"\\\\398\", f: \"B\" },\n                    120496: { c: \"I\", f: \"B\" },\n                    120497: { c: \"K\", f: \"B\" },\n                    120498: { c: \"\\\\39B\", f: \"B\" },\n                    120499: { c: \"M\", f: \"B\" },\n                    120500: { c: \"N\", f: \"B\" },\n                    120501: { c: \"\\\\39E\", f: \"B\" },\n                    120502: { c: \"O\", f: \"B\" },\n                    120503: { c: \"\\\\3A0\", f: \"B\" },\n                    120504: { c: \"P\", f: \"B\" },\n                    120506: { c: \"\\\\3A3\", f: \"B\" },\n                    120507: { c: \"T\", f: \"B\" },\n                    120508: { c: \"\\\\3A5\", f: \"B\" },\n                    120509: { c: \"\\\\3A6\", f: \"B\" },\n                    120510: { c: \"X\", f: \"B\" },\n                    120511: { c: \"\\\\3A8\", f: \"B\" },\n                    120512: { c: \"\\\\3A9\", f: \"B\" },\n                    120513: { c: \"\\\\2207\", f: \"B\" },\n                    120546: { c: \"A\", f: \"I\" },\n                    120547: { c: \"B\", f: \"I\" },\n                    120548: { c: \"\\\\393\", f: \"I\" },\n                    120549: { c: \"\\\\394\", f: \"I\" },\n                    120550: { c: \"E\", f: \"I\" },\n                    120551: { c: \"Z\", f: \"I\" },\n                    120552: { c: \"H\", f: \"I\" },\n                    120553: { c: \"\\\\398\", f: \"I\" },\n                    120554: { c: \"I\", f: \"I\" },\n                    120555: { c: \"K\", f: \"I\" },\n                    120556: { c: \"\\\\39B\", f: \"I\" },\n                    120557: { c: \"M\", f: \"I\" },\n                    120558: { c: \"N\", f: \"I\" },\n                    120559: { c: \"\\\\39E\", f: \"I\" },\n                    120560: { c: \"O\", f: \"I\" },\n                    120561: { c: \"\\\\3A0\", f: \"I\" },\n                    120562: { c: \"P\", f: \"I\" },\n                    120564: { c: \"\\\\3A3\", f: \"I\" },\n                    120565: { c: \"T\", f: \"I\" },\n                    120566: { c: \"\\\\3A5\", f: \"I\" },\n                    120567: { c: \"\\\\3A6\", f: \"I\" },\n                    120568: { c: \"X\", f: \"I\" },\n                    120569: { c: \"\\\\3A8\", f: \"I\" },\n                    120570: { c: \"\\\\3A9\", f: \"I\" },\n                    120572: { c: \"\\\\3B1\", f: \"I\" },\n                    120573: { c: \"\\\\3B2\", f: \"I\" },\n                    120574: { c: \"\\\\3B3\", f: \"I\" },\n                    120575: { c: \"\\\\3B4\", f: \"I\" },\n                    120576: { c: \"\\\\3B5\", f: \"I\" },\n                    120577: { c: \"\\\\3B6\", f: \"I\" },\n                    120578: { c: \"\\\\3B7\", f: \"I\" },\n                    120579: { c: \"\\\\3B8\", f: \"I\" },\n                    120580: { c: \"\\\\3B9\", f: \"I\" },\n                    120581: { c: \"\\\\3BA\", f: \"I\" },\n                    120582: { c: \"\\\\3BB\", f: \"I\" },\n                    120583: { c: \"\\\\3BC\", f: \"I\" },\n                    120584: { c: \"\\\\3BD\", f: \"I\" },\n                    120585: { c: \"\\\\3BE\", f: \"I\" },\n                    120586: { c: \"\\\\3BF\", f: \"I\" },\n                    120587: { c: \"\\\\3C0\", f: \"I\" },\n                    120588: { c: \"\\\\3C1\", f: \"I\" },\n                    120589: { c: \"\\\\3C2\", f: \"I\" },\n                    120590: { c: \"\\\\3C3\", f: \"I\" },\n                    120591: { c: \"\\\\3C4\", f: \"I\" },\n                    120592: { c: \"\\\\3C5\", f: \"I\" },\n                    120593: { c: \"\\\\3C6\", f: \"I\" },\n                    120594: { c: \"\\\\3C7\", f: \"I\" },\n                    120595: { c: \"\\\\3C8\", f: \"I\" },\n                    120596: { c: \"\\\\3C9\", f: \"I\" },\n                    120597: { c: \"\\\\2202\" },\n                    120598: { c: \"\\\\3F5\", f: \"I\" },\n                    120599: { c: \"\\\\3D1\", f: \"I\" },\n                    120600: { c: \"\\\\E009\", f: \"A\" },\n                    120601: { c: \"\\\\3D5\", f: \"I\" },\n                    120602: { c: \"\\\\3F1\", f: \"I\" },\n                    120603: { c: \"\\\\3D6\", f: \"I\" },\n                    120604: { c: \"A\", f: \"BI\" },\n                    120605: { c: \"B\", f: \"BI\" },\n                    120606: { c: \"\\\\393\", f: \"BI\" },\n                    120607: { c: \"\\\\394\", f: \"BI\" },\n                    120608: { c: \"E\", f: \"BI\" },\n                    120609: { c: \"Z\", f: \"BI\" },\n                    120610: { c: \"H\", f: \"BI\" },\n                    120611: { c: \"\\\\398\", f: \"BI\" },\n                    120612: { c: \"I\", f: \"BI\" },\n                    120613: { c: \"K\", f: \"BI\" },\n                    120614: { c: \"\\\\39B\", f: \"BI\" },\n                    120615: { c: \"M\", f: \"BI\" },\n                    120616: { c: \"N\", f: \"BI\" },\n                    120617: { c: \"\\\\39E\", f: \"BI\" },\n                    120618: { c: \"O\", f: \"BI\" },\n                    120619: { c: \"\\\\3A0\", f: \"BI\" },\n                    120620: { c: \"P\", f: \"BI\" },\n                    120622: { c: \"\\\\3A3\", f: \"BI\" },\n                    120623: { c: \"T\", f: \"BI\" },\n                    120624: { c: \"\\\\3A5\", f: \"BI\" },\n                    120625: { c: \"\\\\3A6\", f: \"BI\" },\n                    120626: { c: \"X\", f: \"BI\" },\n                    120627: { c: \"\\\\3A8\", f: \"BI\" },\n                    120628: { c: \"\\\\3A9\", f: \"BI\" },\n                    120630: { c: \"\\\\3B1\", f: \"BI\" },\n                    120631: { c: \"\\\\3B2\", f: \"BI\" },\n                    120632: { c: \"\\\\3B3\", f: \"BI\" },\n                    120633: { c: \"\\\\3B4\", f: \"BI\" },\n                    120634: { c: \"\\\\3B5\", f: \"BI\" },\n                    120635: { c: \"\\\\3B6\", f: \"BI\" },\n                    120636: { c: \"\\\\3B7\", f: \"BI\" },\n                    120637: { c: \"\\\\3B8\", f: \"BI\" },\n                    120638: { c: \"\\\\3B9\", f: \"BI\" },\n                    120639: { c: \"\\\\3BA\", f: \"BI\" },\n                    120640: { c: \"\\\\3BB\", f: \"BI\" },\n                    120641: { c: \"\\\\3BC\", f: \"BI\" },\n                    120642: { c: \"\\\\3BD\", f: \"BI\" },\n                    120643: { c: \"\\\\3BE\", f: \"BI\" },\n                    120644: { c: \"\\\\3BF\", f: \"BI\" },\n                    120645: { c: \"\\\\3C0\", f: \"BI\" },\n                    120646: { c: \"\\\\3C1\", f: \"BI\" },\n                    120647: { c: \"\\\\3C2\", f: \"BI\" },\n                    120648: { c: \"\\\\3C3\", f: \"BI\" },\n                    120649: { c: \"\\\\3C4\", f: \"BI\" },\n                    120650: { c: \"\\\\3C5\", f: \"BI\" },\n                    120651: { c: \"\\\\3C6\", f: \"BI\" },\n                    120652: { c: \"\\\\3C7\", f: \"BI\" },\n                    120653: { c: \"\\\\3C8\", f: \"BI\" },\n                    120654: { c: \"\\\\3C9\", f: \"BI\" },\n                    120655: { c: \"\\\\2202\", f: \"B\" },\n                    120656: { c: \"\\\\3F5\", f: \"BI\" },\n                    120657: { c: \"\\\\3D1\", f: \"BI\" },\n                    120658: { c: \"\\\\E009\", f: \"A\" },\n                    120659: { c: \"\\\\3D5\", f: \"BI\" },\n                    120660: { c: \"\\\\3F1\", f: \"BI\" },\n                    120661: { c: \"\\\\3D6\", f: \"BI\" },\n                    120662: { c: \"A\", f: \"SSB\" },\n                    120663: { c: \"B\", f: \"SSB\" },\n                    120664: { c: \"\\\\393\", f: \"SSB\" },\n                    120665: { c: \"\\\\394\", f: \"SSB\" },\n                    120666: { c: \"E\", f: \"SSB\" },\n                    120667: { c: \"Z\", f: \"SSB\" },\n                    120668: { c: \"H\", f: \"SSB\" },\n                    120669: { c: \"\\\\398\", f: \"SSB\" },\n                    120670: { c: \"I\", f: \"SSB\" },\n                    120671: { c: \"K\", f: \"SSB\" },\n                    120672: { c: \"\\\\39B\", f: \"SSB\" },\n                    120673: { c: \"M\", f: \"SSB\" },\n                    120674: { c: \"N\", f: \"SSB\" },\n                    120675: { c: \"\\\\39E\", f: \"SSB\" },\n                    120676: { c: \"O\", f: \"SSB\" },\n                    120677: { c: \"\\\\3A0\", f: \"SSB\" },\n                    120678: { c: \"P\", f: \"SSB\" },\n                    120680: { c: \"\\\\3A3\", f: \"SSB\" },\n                    120681: { c: \"T\", f: \"SSB\" },\n                    120682: { c: \"\\\\3A5\", f: \"SSB\" },\n                    120683: { c: \"\\\\3A6\", f: \"SSB\" },\n                    120684: { c: \"X\", f: \"SSB\" },\n                    120685: { c: \"\\\\3A8\", f: \"SSB\" },\n                    120686: { c: \"\\\\3A9\", f: \"SSB\" },\n                    120782: { c: \"0\", f: \"B\" },\n                    120783: { c: \"1\", f: \"B\" },\n                    120784: { c: \"2\", f: \"B\" },\n                    120785: { c: \"3\", f: \"B\" },\n                    120786: { c: \"4\", f: \"B\" },\n                    120787: { c: \"5\", f: \"B\" },\n                    120788: { c: \"6\", f: \"B\" },\n                    120789: { c: \"7\", f: \"B\" },\n                    120790: { c: \"8\", f: \"B\" },\n                    120791: { c: \"9\", f: \"B\" },\n                    120802: { c: \"0\", f: \"SS\" },\n                    120803: { c: \"1\", f: \"SS\" },\n                    120804: { c: \"2\", f: \"SS\" },\n                    120805: { c: \"3\", f: \"SS\" },\n                    120806: { c: \"4\", f: \"SS\" },\n                    120807: { c: \"5\", f: \"SS\" },\n                    120808: { c: \"6\", f: \"SS\" },\n                    120809: { c: \"7\", f: \"SS\" },\n                    120810: { c: \"8\", f: \"SS\" },\n                    120811: { c: \"9\", f: \"SS\" },\n                    120812: { c: \"0\", f: \"SSB\" },\n                    120813: { c: \"1\", f: \"SSB\" },\n                    120814: { c: \"2\", f: \"SSB\" },\n                    120815: { c: \"3\", f: \"SSB\" },\n                    120816: { c: \"4\", f: \"SSB\" },\n                    120817: { c: \"5\", f: \"SSB\" },\n                    120818: { c: \"6\", f: \"SSB\" },\n                    120819: { c: \"7\", f: \"SSB\" },\n                    120820: { c: \"8\", f: \"SSB\" },\n                    120821: { c: \"9\", f: \"SSB\" },\n                    120822: { c: \"0\", f: \"T\" },\n                    120823: { c: \"1\", f: \"T\" },\n                    120824: { c: \"2\", f: \"T\" },\n                    120825: { c: \"3\", f: \"T\" },\n                    120826: { c: \"4\", f: \"T\" },\n                    120827: { c: \"5\", f: \"T\" },\n                    120828: { c: \"6\", f: \"T\" },\n                    120829: { c: \"7\", f: \"T\" },\n                    120830: { c: \"8\", f: \"T\" },\n                    120831: { c: \"9\", f: \"T\" },\n                });\n            },\n            7517: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.sansSerifBoldItalic = void 0);\n                var n = r(8042),\n                    o = r(4886);\n                e.sansSerifBoldItalic = (0, n.AddCSS)(o.sansSerifBoldItalic, {\n                    305: { f: \"SSB\" },\n                    567: { f: \"SSB\" },\n                });\n            },\n            4182: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.sansSerifBold = void 0);\n                var n = r(8042),\n                    o = r(4471);\n                e.sansSerifBold = (0, n.AddCSS)(o.sansSerifBold, {\n                    8213: { c: \"\\\\2014\" },\n                    8215: { c: \"_\" },\n                    8260: { c: \"/\" },\n                    8710: { c: \"\\\\394\" },\n                });\n            },\n            2679: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.sansSerifItalic = void 0);\n                var n = r(8042),\n                    o = r(5181);\n                e.sansSerifItalic = (0, n.AddCSS)(o.sansSerifItalic, {\n                    913: { c: \"A\" },\n                    914: { c: \"B\" },\n                    917: { c: \"E\" },\n                    918: { c: \"Z\" },\n                    919: { c: \"H\" },\n                    921: { c: \"I\" },\n                    922: { c: \"K\" },\n                    924: { c: \"M\" },\n                    925: { c: \"N\" },\n                    927: { c: \"O\" },\n                    929: { c: \"P\" },\n                    932: { c: \"T\" },\n                    935: { c: \"X\" },\n                    8213: { c: \"\\\\2014\" },\n                    8215: { c: \"_\" },\n                    8260: { c: \"/\" },\n                    8710: { c: \"\\\\394\" },\n                });\n            },\n            5469: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.sansSerif = void 0);\n                var n = r(8042),\n                    o = r(3526);\n                e.sansSerif = (0, n.AddCSS)(o.sansSerif, {\n                    913: { c: \"A\" },\n                    914: { c: \"B\" },\n                    917: { c: \"E\" },\n                    918: { c: \"Z\" },\n                    919: { c: \"H\" },\n                    921: { c: \"I\" },\n                    922: { c: \"K\" },\n                    924: { c: \"M\" },\n                    925: { c: \"N\" },\n                    927: { c: \"O\" },\n                    929: { c: \"P\" },\n                    932: { c: \"T\" },\n                    935: { c: \"X\" },\n                    8213: { c: \"\\\\2014\" },\n                    8215: { c: \"_\" },\n                    8260: { c: \"/\" },\n                    8710: { c: \"\\\\394\" },\n                });\n            },\n            7563: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.scriptBold = void 0);\n                var n = r(5649);\n                Object.defineProperty(e, \"scriptBold\", {\n                    enumerable: !0,\n                    get: function () {\n                        return n.scriptBold;\n                    },\n                });\n            },\n            9409: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.script = void 0);\n                var n = r(7153);\n                Object.defineProperty(e, \"script\", {\n                    enumerable: !0,\n                    get: function () {\n                        return n.script;\n                    },\n                });\n            },\n            775: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.smallop = void 0);\n                var n = r(8042),\n                    o = r(5745);\n                e.smallop = (0, n.AddCSS)(o.smallop, {\n                    8260: { c: \"/\" },\n                    9001: { c: \"\\\\27E8\" },\n                    9002: { c: \"\\\\27E9\" },\n                    10072: { c: \"\\\\2223\" },\n                    10764: { c: \"\\\\222C\\\\222C\" },\n                    12296: { c: \"\\\\27E8\" },\n                    12297: { c: \"\\\\27E9\" },\n                });\n            },\n            9551: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texCalligraphicBold = void 0);\n                var n = r(8042),\n                    o = r(1411);\n                e.texCalligraphicBold = (0, n.AddCSS)(o.texCalligraphicBold, {\n                    305: { f: \"B\" },\n                    567: { f: \"B\" },\n                });\n            },\n            7907: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texCalligraphic = void 0);\n                var n = r(6384);\n                Object.defineProperty(e, \"texCalligraphic\", {\n                    enumerable: !0,\n                    get: function () {\n                        return n.texCalligraphic;\n                    },\n                });\n            },\n            9659: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texMathit = void 0);\n                var n = r(6041);\n                Object.defineProperty(e, \"texMathit\", {\n                    enumerable: !0,\n                    get: function () {\n                        return n.texMathit;\n                    },\n                });\n            },\n            98: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texOldstyleBold = void 0);\n                var n = r(8199);\n                Object.defineProperty(e, \"texOldstyleBold\", {\n                    enumerable: !0,\n                    get: function () {\n                        return n.texOldstyleBold;\n                    },\n                });\n            },\n            6275: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texOldstyle = void 0);\n                var n = r(9848);\n                Object.defineProperty(e, \"texOldstyle\", {\n                    enumerable: !0,\n                    get: function () {\n                        return n.texOldstyle;\n                    },\n                });\n            },\n            6530: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texSize3 = void 0);\n                var n = r(8042),\n                    o = r(7906);\n                e.texSize3 = (0, n.AddCSS)(o.texSize3, {\n                    8260: { c: \"/\" },\n                    9001: { c: \"\\\\27E8\" },\n                    9002: { c: \"\\\\27E9\" },\n                    12296: { c: \"\\\\27E8\" },\n                    12297: { c: \"\\\\27E9\" },\n                });\n            },\n            4409: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texSize4 = void 0);\n                var n = r(8042),\n                    o = r(2644);\n                e.texSize4 = (0, n.AddCSS)(o.texSize4, {\n                    8260: { c: \"/\" },\n                    9001: { c: \"\\\\27E8\" },\n                    9002: { c: \"\\\\27E9\" },\n                    12296: { c: \"\\\\27E8\" },\n                    12297: { c: \"\\\\27E9\" },\n                    57685: { c: \"\\\\E153\\\\E152\" },\n                    57686: { c: \"\\\\E151\\\\E150\" },\n                });\n            },\n            5292: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texVariant = void 0);\n                var n = r(8042),\n                    o = r(4926);\n                e.texVariant = (0, n.AddCSS)(o.texVariant, {\n                    1008: { c: \"\\\\E009\" },\n                    8463: { f: \"\" },\n                    8740: { c: \"\\\\E006\" },\n                    8742: { c: \"\\\\E007\" },\n                    8808: { c: \"\\\\E00C\" },\n                    8809: { c: \"\\\\E00D\" },\n                    8816: { c: \"\\\\E011\" },\n                    8817: { c: \"\\\\E00E\" },\n                    8840: { c: \"\\\\E016\" },\n                    8841: { c: \"\\\\E018\" },\n                    8842: { c: \"\\\\E01A\" },\n                    8843: { c: \"\\\\E01B\" },\n                    10887: { c: \"\\\\E010\" },\n                    10888: { c: \"\\\\E00F\" },\n                    10955: { c: \"\\\\E017\" },\n                    10956: { c: \"\\\\E019\" },\n                });\n            },\n            5884: function (t, e, r) {\n                var n =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (n =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                n.apply(this, arguments)\n                            );\n                        },\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.FontData = e.NOSTRETCH = e.H = e.V = void 0);\n                var a = r(7233);\n                (e.V = 1), (e.H = 2), (e.NOSTRETCH = { dir: 0 });\n                var l = (function () {\n                    function t(t) {\n                        var e, r, l, c;\n                        void 0 === t && (t = null),\n                            (this.variant = {}),\n                            (this.delimiters = {}),\n                            (this.cssFontMap = {}),\n                            (this.remapChars = {}),\n                            (this.skewIcFactor = 0.75);\n                        var u = this.constructor;\n                        (this.options = (0, a.userOptions)(\n                            (0, a.defaultOptions)({}, u.OPTIONS),\n                            t\n                        )),\n                            (this.params = n({}, u.defaultParams)),\n                            (this.sizeVariants = i(\n                                [],\n                                o(u.defaultSizeVariants),\n                                !1\n                            )),\n                            (this.stretchVariants = i(\n                                [],\n                                o(u.defaultStretchVariants),\n                                !1\n                            )),\n                            (this.cssFontMap = n({}, u.defaultCssFonts));\n                        try {\n                            for (\n                                var p = s(Object.keys(this.cssFontMap)),\n                                    h = p.next();\n                                !h.done;\n                                h = p.next()\n                            ) {\n                                var f = h.value;\n                                \"unknown\" === this.cssFontMap[f][0] &&\n                                    (this.cssFontMap[f][0] =\n                                        this.options.unknownFamily);\n                            }\n                        } catch (t) {\n                            e = { error: t };\n                        } finally {\n                            try {\n                                h && !h.done && (r = p.return) && r.call(p);\n                            } finally {\n                                if (e) throw e.error;\n                            }\n                        }\n                        (this.cssFamilyPrefix = u.defaultCssFamilyPrefix),\n                            this.createVariants(u.defaultVariants),\n                            this.defineDelimiters(u.defaultDelimiters);\n                        try {\n                            for (\n                                var d = s(Object.keys(u.defaultChars)),\n                                    m = d.next();\n                                !m.done;\n                                m = d.next()\n                            ) {\n                                var y = m.value;\n                                this.defineChars(y, u.defaultChars[y]);\n                            }\n                        } catch (t) {\n                            l = { error: t };\n                        } finally {\n                            try {\n                                m && !m.done && (c = d.return) && c.call(d);\n                            } finally {\n                                if (l) throw l.error;\n                            }\n                        }\n                        this.defineRemap(\"accent\", u.defaultAccentMap),\n                            this.defineRemap(\"mo\", u.defaultMoMap),\n                            this.defineRemap(\"mn\", u.defaultMnMap);\n                    }\n                    return (\n                        (t.charOptions = function (t, e) {\n                            var r = t[e];\n                            return 3 === r.length && (r[3] = {}), r[3];\n                        }),\n                        Object.defineProperty(t.prototype, \"styles\", {\n                            get: function () {\n                                return this._styles;\n                            },\n                            set: function (t) {\n                                this._styles = t;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (t.prototype.createVariant = function (t, e, r) {\n                            void 0 === e && (e = null),\n                                void 0 === r && (r = null);\n                            var n = {\n                                linked: [],\n                                chars: e\n                                    ? Object.create(this.variant[e].chars)\n                                    : {},\n                            };\n                            r &&\n                                this.variant[r] &&\n                                (Object.assign(n.chars, this.variant[r].chars),\n                                this.variant[r].linked.push(n.chars),\n                                (n.chars = Object.create(n.chars))),\n                                this.remapSmpChars(n.chars, t),\n                                (this.variant[t] = n);\n                        }),\n                        (t.prototype.remapSmpChars = function (t, e) {\n                            var r,\n                                n,\n                                i,\n                                a,\n                                l = this.constructor;\n                            if (l.VariantSmp[e]) {\n                                var c = l.SmpRemap,\n                                    u = [\n                                        null,\n                                        null,\n                                        l.SmpRemapGreekU,\n                                        l.SmpRemapGreekL,\n                                    ];\n                                try {\n                                    for (\n                                        var p = s(l.SmpRanges), h = p.next();\n                                        !h.done;\n                                        h = p.next()\n                                    ) {\n                                        var f = o(h.value, 3),\n                                            d = f[0],\n                                            m = f[1],\n                                            y = f[2],\n                                            g = l.VariantSmp[e][d];\n                                        if (g) {\n                                            for (var b = m; b <= y; b++)\n                                                if (930 !== b) {\n                                                    var v = g + b - m;\n                                                    t[b] = this.smpChar(\n                                                        c[v] || v\n                                                    );\n                                                }\n                                            if (u[d])\n                                                try {\n                                                    for (\n                                                        var _ =\n                                                                ((i = void 0),\n                                                                s(\n                                                                    Object.keys(\n                                                                        u[d]\n                                                                    ).map(\n                                                                        function (\n                                                                            t\n                                                                        ) {\n                                                                            return parseInt(\n                                                                                t\n                                                                            );\n                                                                        }\n                                                                    )\n                                                                )),\n                                                            S = _.next();\n                                                        !S.done;\n                                                        S = _.next()\n                                                    ) {\n                                                        t[(b = S.value)] =\n                                                            this.smpChar(\n                                                                g + u[d][b]\n                                                            );\n                                                    }\n                                                } catch (t) {\n                                                    i = { error: t };\n                                                } finally {\n                                                    try {\n                                                        S &&\n                                                            !S.done &&\n                                                            (a = _.return) &&\n                                                            a.call(_);\n                                                    } finally {\n                                                        if (i) throw i.error;\n                                                    }\n                                                }\n                                        }\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        h &&\n                                            !h.done &&\n                                            (n = p.return) &&\n                                            n.call(p);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                            }\n                            \"bold\" === e &&\n                                ((t[988] = this.smpChar(120778)),\n                                (t[989] = this.smpChar(120779)));\n                        }),\n                        (t.prototype.smpChar = function (t) {\n                            return [, , , { smp: t }];\n                        }),\n                        (t.prototype.createVariants = function (t) {\n                            var e, r;\n                            try {\n                                for (\n                                    var n = s(t), o = n.next();\n                                    !o.done;\n                                    o = n.next()\n                                ) {\n                                    var i = o.value;\n                                    this.createVariant(i[0], i[1], i[2]);\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    o && !o.done && (r = n.return) && r.call(n);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.defineChars = function (t, e) {\n                            var r,\n                                n,\n                                o = this.variant[t];\n                            Object.assign(o.chars, e);\n                            try {\n                                for (\n                                    var i = s(o.linked), a = i.next();\n                                    !a.done;\n                                    a = i.next()\n                                ) {\n                                    var l = a.value;\n                                    Object.assign(l, e);\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (n = i.return) && n.call(i);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.defineDelimiters = function (t) {\n                            Object.assign(this.delimiters, t);\n                        }),\n                        (t.prototype.defineRemap = function (t, e) {\n                            this.remapChars.hasOwnProperty(t) ||\n                                (this.remapChars[t] = {}),\n                                Object.assign(this.remapChars[t], e);\n                        }),\n                        (t.prototype.getDelimiter = function (t) {\n                            return this.delimiters[t];\n                        }),\n                        (t.prototype.getSizeVariant = function (t, e) {\n                            return (\n                                this.delimiters[t].variants &&\n                                    (e = this.delimiters[t].variants[e]),\n                                this.sizeVariants[e]\n                            );\n                        }),\n                        (t.prototype.getStretchVariant = function (t, e) {\n                            return this.stretchVariants[\n                                this.delimiters[t].stretchv\n                                    ? this.delimiters[t].stretchv[e]\n                                    : 0\n                            ];\n                        }),\n                        (t.prototype.getChar = function (t, e) {\n                            return this.variant[t].chars[e];\n                        }),\n                        (t.prototype.getVariant = function (t) {\n                            return this.variant[t];\n                        }),\n                        (t.prototype.getCssFont = function (t) {\n                            return this.cssFontMap[t] || [\"serif\", !1, !1];\n                        }),\n                        (t.prototype.getFamily = function (t) {\n                            return this.cssFamilyPrefix\n                                ? this.cssFamilyPrefix + \", \" + t\n                                : t;\n                        }),\n                        (t.prototype.getRemappedChar = function (t, e) {\n                            return (this.remapChars[t] || {})[e];\n                        }),\n                        (t.OPTIONS = { unknownFamily: \"serif\" }),\n                        (t.JAX = \"common\"),\n                        (t.NAME = \"\"),\n                        (t.defaultVariants = [\n                            [\"normal\"],\n                            [\"bold\", \"normal\"],\n                            [\"italic\", \"normal\"],\n                            [\"bold-italic\", \"italic\", \"bold\"],\n                            [\"double-struck\", \"bold\"],\n                            [\"fraktur\", \"normal\"],\n                            [\"bold-fraktur\", \"bold\", \"fraktur\"],\n                            [\"script\", \"italic\"],\n                            [\"bold-script\", \"bold-italic\", \"script\"],\n                            [\"sans-serif\", \"normal\"],\n                            [\"bold-sans-serif\", \"bold\", \"sans-serif\"],\n                            [\"sans-serif-italic\", \"italic\", \"sans-serif\"],\n                            [\n                                \"sans-serif-bold-italic\",\n                                \"bold-italic\",\n                                \"bold-sans-serif\",\n                            ],\n                            [\"monospace\", \"normal\"],\n                        ]),\n                        (t.defaultCssFonts = {\n                            normal: [\"unknown\", !1, !1],\n                            bold: [\"unknown\", !1, !0],\n                            italic: [\"unknown\", !0, !1],\n                            \"bold-italic\": [\"unknown\", !0, !0],\n                            \"double-struck\": [\"unknown\", !1, !0],\n                            fraktur: [\"unknown\", !1, !1],\n                            \"bold-fraktur\": [\"unknown\", !1, !0],\n                            script: [\"cursive\", !1, !1],\n                            \"bold-script\": [\"cursive\", !1, !0],\n                            \"sans-serif\": [\"sans-serif\", !1, !1],\n                            \"bold-sans-serif\": [\"sans-serif\", !1, !0],\n                            \"sans-serif-italic\": [\"sans-serif\", !0, !1],\n                            \"sans-serif-bold-italic\": [\"sans-serif\", !0, !0],\n                            monospace: [\"monospace\", !1, !1],\n                        }),\n                        (t.defaultCssFamilyPrefix = \"\"),\n                        (t.VariantSmp = {\n                            bold: [119808, 119834, 120488, 120514, 120782],\n                            italic: [119860, 119886, 120546, 120572],\n                            \"bold-italic\": [119912, 119938, 120604, 120630],\n                            script: [119964, 119990],\n                            \"bold-script\": [120016, 120042],\n                            fraktur: [120068, 120094],\n                            \"double-struck\": [120120, 120146, , , 120792],\n                            \"bold-fraktur\": [120172, 120198],\n                            \"sans-serif\": [120224, 120250, , , 120802],\n                            \"bold-sans-serif\": [\n                                120276, 120302, 120662, 120688, 120812,\n                            ],\n                            \"sans-serif-italic\": [120328, 120354],\n                            \"sans-serif-bold-italic\": [\n                                120380, 120406, 120720, 120746,\n                            ],\n                            monospace: [120432, 120458, , , 120822],\n                        }),\n                        (t.SmpRanges = [\n                            [0, 65, 90],\n                            [1, 97, 122],\n                            [2, 913, 937],\n                            [3, 945, 969],\n                            [4, 48, 57],\n                        ]),\n                        (t.SmpRemap = {\n                            119893: 8462,\n                            119965: 8492,\n                            119968: 8496,\n                            119969: 8497,\n                            119971: 8459,\n                            119972: 8464,\n                            119975: 8466,\n                            119976: 8499,\n                            119981: 8475,\n                            119994: 8495,\n                            119996: 8458,\n                            120004: 8500,\n                            120070: 8493,\n                            120075: 8460,\n                            120076: 8465,\n                            120085: 8476,\n                            120093: 8488,\n                            120122: 8450,\n                            120127: 8461,\n                            120133: 8469,\n                            120135: 8473,\n                            120136: 8474,\n                            120137: 8477,\n                            120145: 8484,\n                        }),\n                        (t.SmpRemapGreekU = { 8711: 25, 1012: 17 }),\n                        (t.SmpRemapGreekL = {\n                            977: 27,\n                            981: 29,\n                            982: 31,\n                            1008: 28,\n                            1009: 30,\n                            1013: 26,\n                            8706: 25,\n                        }),\n                        (t.defaultAccentMap = {\n                            768: \"\\u02cb\",\n                            769: \"\\u02ca\",\n                            770: \"\\u02c6\",\n                            771: \"\\u02dc\",\n                            772: \"\\u02c9\",\n                            774: \"\\u02d8\",\n                            775: \"\\u02d9\",\n                            776: \"\\xa8\",\n                            778: \"\\u02da\",\n                            780: \"\\u02c7\",\n                            8594: \"\\u20d7\",\n                            8242: \"'\",\n                            8243: \"''\",\n                            8244: \"'''\",\n                            8245: \"`\",\n                            8246: \"``\",\n                            8247: \"```\",\n                            8279: \"''''\",\n                            8400: \"\\u21bc\",\n                            8401: \"\\u21c0\",\n                            8406: \"\\u2190\",\n                            8417: \"\\u2194\",\n                            8432: \"*\",\n                            8411: \"...\",\n                            8412: \"....\",\n                            8428: \"\\u21c1\",\n                            8429: \"\\u21bd\",\n                            8430: \"\\u2190\",\n                            8431: \"\\u2192\",\n                        }),\n                        (t.defaultMoMap = { 45: \"\\u2212\" }),\n                        (t.defaultMnMap = { 45: \"\\u2212\" }),\n                        (t.defaultParams = {\n                            x_height: 0.442,\n                            quad: 1,\n                            num1: 0.676,\n                            num2: 0.394,\n                            num3: 0.444,\n                            denom1: 0.686,\n                            denom2: 0.345,\n                            sup1: 0.413,\n                            sup2: 0.363,\n                            sup3: 0.289,\n                            sub1: 0.15,\n                            sub2: 0.247,\n                            sup_drop: 0.386,\n                            sub_drop: 0.05,\n                            delim1: 2.39,\n                            delim2: 1,\n                            axis_height: 0.25,\n                            rule_thickness: 0.06,\n                            big_op_spacing1: 0.111,\n                            big_op_spacing2: 0.167,\n                            big_op_spacing3: 0.2,\n                            big_op_spacing4: 0.6,\n                            big_op_spacing5: 0.1,\n                            surd_height: 0.075,\n                            scriptspace: 0.05,\n                            nulldelimiterspace: 0.12,\n                            delimiterfactor: 901,\n                            delimitershortfall: 0.3,\n                            min_rule_thickness: 1.25,\n                            separation_factor: 1.75,\n                            extra_ic: 0.033,\n                        }),\n                        (t.defaultDelimiters = {}),\n                        (t.defaultChars = {}),\n                        (t.defaultSizeVariants = []),\n                        (t.defaultStretchVariants = []),\n                        t\n                    );\n                })();\n                e.FontData = l;\n            },\n            5552: function (t, e) {\n                var r =\n                    (this && this.__read) ||\n                    function (t, e) {\n                        var r =\n                            \"function\" == typeof Symbol && t[Symbol.iterator];\n                        if (!r) return t;\n                        var n,\n                            o,\n                            i = r.call(t),\n                            s = [];\n                        try {\n                            for (\n                                ;\n                                (void 0 === e || e-- > 0) &&\n                                !(n = i.next()).done;\n\n                            )\n                                s.push(n.value);\n                        } catch (t) {\n                            o = { error: t };\n                        } finally {\n                            try {\n                                n && !n.done && (r = i.return) && r.call(i);\n                            } finally {\n                                if (o) throw o.error;\n                            }\n                        }\n                        return s;\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonArrow =\n                        e.CommonDiagonalArrow =\n                        e.CommonDiagonalStrike =\n                        e.CommonBorder2 =\n                        e.CommonBorder =\n                        e.arrowBBox =\n                        e.diagonalArrowDef =\n                        e.arrowDef =\n                        e.arrowBBoxW =\n                        e.arrowBBoxHD =\n                        e.arrowHead =\n                        e.fullBorder =\n                        e.fullPadding =\n                        e.fullBBox =\n                        e.sideNames =\n                        e.sideIndex =\n                        e.SOLID =\n                        e.PADDING =\n                        e.THICKNESS =\n                        e.ARROWY =\n                        e.ARROWDX =\n                        e.ARROWX =\n                            void 0),\n                    (e.ARROWX = 4),\n                    (e.ARROWDX = 1),\n                    (e.ARROWY = 2),\n                    (e.THICKNESS = 0.067),\n                    (e.PADDING = 0.2),\n                    (e.SOLID = e.THICKNESS + \"em solid\"),\n                    (e.sideIndex = { top: 0, right: 1, bottom: 2, left: 3 }),\n                    (e.sideNames = Object.keys(e.sideIndex)),\n                    (e.fullBBox = function (t) {\n                        return new Array(4).fill(t.thickness + t.padding);\n                    }),\n                    (e.fullPadding = function (t) {\n                        return new Array(4).fill(t.padding);\n                    }),\n                    (e.fullBorder = function (t) {\n                        return new Array(4).fill(t.thickness);\n                    });\n                e.arrowHead = function (t) {\n                    return Math.max(\n                        t.padding,\n                        t.thickness * (t.arrowhead.x + t.arrowhead.dx + 1)\n                    );\n                };\n                e.arrowBBoxHD = function (t, e) {\n                    if (t.childNodes[0]) {\n                        var r = t.childNodes[0].getBBox(),\n                            n = r.h,\n                            o = r.d;\n                        e[0] = e[2] = Math.max(\n                            0,\n                            t.thickness * t.arrowhead.y - (n + o) / 2\n                        );\n                    }\n                    return e;\n                };\n                (e.arrowBBoxW = function (t, e) {\n                    if (t.childNodes[0]) {\n                        var r = t.childNodes[0].getBBox().w;\n                        e[1] = e[3] = Math.max(\n                            0,\n                            t.thickness * t.arrowhead.y - r / 2\n                        );\n                    }\n                    return e;\n                }),\n                    (e.arrowDef = {\n                        up: [-Math.PI / 2, !1, !0, \"verticalstrike\"],\n                        down: [Math.PI / 2, !1, !0, \"verticakstrike\"],\n                        right: [0, !1, !1, \"horizontalstrike\"],\n                        left: [Math.PI, !1, !1, \"horizontalstrike\"],\n                        updown: [\n                            Math.PI / 2,\n                            !0,\n                            !0,\n                            \"verticalstrike uparrow downarrow\",\n                        ],\n                        leftright: [\n                            0,\n                            !0,\n                            !1,\n                            \"horizontalstrike leftarrow rightarrow\",\n                        ],\n                    }),\n                    (e.diagonalArrowDef = {\n                        updiagonal: [\n                            -1,\n                            0,\n                            !1,\n                            \"updiagonalstrike northeastarrow\",\n                        ],\n                        northeast: [\n                            -1,\n                            0,\n                            !1,\n                            \"updiagonalstrike updiagonalarrow\",\n                        ],\n                        southeast: [1, 0, !1, \"downdiagonalstrike\"],\n                        northwest: [1, Math.PI, !1, \"downdiagonalstrike\"],\n                        southwest: [-1, Math.PI, !1, \"updiagonalstrike\"],\n                        northeastsouthwest: [\n                            -1,\n                            0,\n                            !0,\n                            \"updiagonalstrike northeastarrow updiagonalarrow southwestarrow\",\n                        ],\n                        northwestsoutheast: [\n                            1,\n                            0,\n                            !0,\n                            \"downdiagonalstrike northwestarrow southeastarrow\",\n                        ],\n                    }),\n                    (e.arrowBBox = {\n                        up: function (t) {\n                            return (0, e.arrowBBoxW)(t, [\n                                (0, e.arrowHead)(t),\n                                0,\n                                t.padding,\n                                0,\n                            ]);\n                        },\n                        down: function (t) {\n                            return (0, e.arrowBBoxW)(t, [\n                                t.padding,\n                                0,\n                                (0, e.arrowHead)(t),\n                                0,\n                            ]);\n                        },\n                        right: function (t) {\n                            return (0, e.arrowBBoxHD)(t, [\n                                0,\n                                (0, e.arrowHead)(t),\n                                0,\n                                t.padding,\n                            ]);\n                        },\n                        left: function (t) {\n                            return (0, e.arrowBBoxHD)(t, [\n                                0,\n                                t.padding,\n                                0,\n                                (0, e.arrowHead)(t),\n                            ]);\n                        },\n                        updown: function (t) {\n                            return (0, e.arrowBBoxW)(t, [\n                                (0, e.arrowHead)(t),\n                                0,\n                                (0, e.arrowHead)(t),\n                                0,\n                            ]);\n                        },\n                        leftright: function (t) {\n                            return (0, e.arrowBBoxHD)(t, [\n                                0,\n                                (0, e.arrowHead)(t),\n                                0,\n                                (0, e.arrowHead)(t),\n                            ]);\n                        },\n                    });\n                e.CommonBorder = function (t) {\n                    return function (r) {\n                        var n = e.sideIndex[r];\n                        return [\n                            r,\n                            {\n                                renderer: t,\n                                bbox: function (t) {\n                                    var e = [0, 0, 0, 0];\n                                    return (e[n] = t.thickness + t.padding), e;\n                                },\n                                border: function (t) {\n                                    var e = [0, 0, 0, 0];\n                                    return (e[n] = t.thickness), e;\n                                },\n                            },\n                        ];\n                    };\n                };\n                e.CommonBorder2 = function (t) {\n                    return function (r, n, o) {\n                        var i = e.sideIndex[n],\n                            s = e.sideIndex[o];\n                        return [\n                            r,\n                            {\n                                renderer: t,\n                                bbox: function (t) {\n                                    var e = t.thickness + t.padding,\n                                        r = [0, 0, 0, 0];\n                                    return (r[i] = r[s] = e), r;\n                                },\n                                border: function (t) {\n                                    var e = [0, 0, 0, 0];\n                                    return (e[i] = e[s] = t.thickness), e;\n                                },\n                                remove: n + \" \" + o,\n                            },\n                        ];\n                    };\n                };\n                e.CommonDiagonalStrike = function (t) {\n                    return function (r) {\n                        var n = \"mjx-\" + r.charAt(0) + \"strike\";\n                        return [\n                            r + \"diagonalstrike\",\n                            { renderer: t(n), bbox: e.fullBBox },\n                        ];\n                    };\n                };\n                e.CommonDiagonalArrow = function (t) {\n                    return function (n) {\n                        var o = r(e.diagonalArrowDef[n], 4),\n                            i = o[0],\n                            s = o[1],\n                            a = o[2];\n                        return [\n                            n + \"arrow\",\n                            {\n                                renderer: function (e, n) {\n                                    var o = r(e.arrowAW(), 2),\n                                        l = o[0],\n                                        c = o[1],\n                                        u = e.arrow(c, i * (l - s), a);\n                                    t(e, u);\n                                },\n                                bbox: function (t) {\n                                    var e = t.arrowData(),\n                                        n = e.a,\n                                        o = e.x,\n                                        i = e.y,\n                                        s = r(\n                                            [\n                                                t.arrowhead.x,\n                                                t.arrowhead.y,\n                                                t.arrowhead.dx,\n                                            ],\n                                            3\n                                        ),\n                                        a = s[0],\n                                        l = s[1],\n                                        c = s[2],\n                                        u = r(t.getArgMod(a + c, l), 2),\n                                        p = u[0],\n                                        h = u[1],\n                                        f =\n                                            i +\n                                            (p > n\n                                                ? t.thickness *\n                                                  h *\n                                                  Math.sin(p - n)\n                                                : 0),\n                                        d =\n                                            o +\n                                            (p > Math.PI / 2 - n\n                                                ? t.thickness *\n                                                  h *\n                                                  Math.sin(p + n - Math.PI / 2)\n                                                : 0);\n                                    return [f, d, f, d];\n                                },\n                                remove: o[3],\n                            },\n                        ];\n                    };\n                };\n                e.CommonArrow = function (t) {\n                    return function (n) {\n                        var o = r(e.arrowDef[n], 4),\n                            i = o[0],\n                            s = o[1],\n                            a = o[2],\n                            l = o[3];\n                        return [\n                            n + \"arrow\",\n                            {\n                                renderer: function (e, n) {\n                                    var o = e.getBBox(),\n                                        l = o.w,\n                                        c = o.h,\n                                        u = o.d,\n                                        p = r(a ? [c + u, \"X\"] : [l, \"Y\"], 2),\n                                        h = p[0],\n                                        f = p[1],\n                                        d = e.getOffset(f),\n                                        m = e.arrow(h, i, s, f, d);\n                                    t(e, m);\n                                },\n                                bbox: e.arrowBBox[n],\n                                remove: l,\n                            },\n                        ];\n                    };\n                };\n            },\n            3055: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    a =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonOutputJax = void 0);\n                var l = r(2975),\n                    c = r(4474),\n                    u = r(7233),\n                    p = r(6010),\n                    h = r(8054),\n                    f = r(4139),\n                    d = (function (t) {\n                        function e(e, r, n) {\n                            void 0 === e && (e = null),\n                                void 0 === r && (r = null),\n                                void 0 === n && (n = null);\n                            var o = this,\n                                i = s((0, u.separateOptions)(e, n.OPTIONS), 2),\n                                a = i[0],\n                                l = i[1];\n                            return (\n                                ((o = t.call(this, a) || this).factory =\n                                    o.options.wrapperFactory || new r()),\n                                (o.factory.jax = o),\n                                (o.cssStyles =\n                                    o.options.cssStyles || new f.CssStyles()),\n                                (o.font = o.options.font || new n(l)),\n                                (o.unknownCache = new Map()),\n                                o\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.typeset = function (t, e) {\n                                this.setDocument(e);\n                                var r = this.createNode();\n                                return this.toDOM(t, r, e), r;\n                            }),\n                            (e.prototype.createNode = function () {\n                                var t = this.constructor.NAME;\n                                return this.html(\"mjx-container\", {\n                                    class: \"MathJax\",\n                                    jax: t,\n                                });\n                            }),\n                            (e.prototype.setScale = function (t) {\n                                var e =\n                                    this.math.metrics.scale *\n                                    this.options.scale;\n                                1 !== e &&\n                                    this.adaptor.setStyle(\n                                        t,\n                                        \"fontSize\",\n                                        (0, p.percent)(e)\n                                    );\n                            }),\n                            (e.prototype.toDOM = function (t, e, r) {\n                                void 0 === r && (r = null),\n                                    this.setDocument(r),\n                                    (this.math = t),\n                                    (this.pxPerEm =\n                                        t.metrics.ex /\n                                        this.font.params.x_height),\n                                    t.root.setTeXclass(null),\n                                    this.setScale(e),\n                                    (this.nodeMap = new Map()),\n                                    (this.container = e),\n                                    this.processMath(t.root, e),\n                                    (this.nodeMap = null),\n                                    this.executeFilters(\n                                        this.postFilters,\n                                        t,\n                                        r,\n                                        e\n                                    );\n                            }),\n                            (e.prototype.getBBox = function (t, e) {\n                                this.setDocument(e),\n                                    (this.math = t),\n                                    t.root.setTeXclass(null),\n                                    (this.nodeMap = new Map());\n                                var r = this.factory\n                                    .wrap(t.root)\n                                    .getOuterBBox();\n                                return (this.nodeMap = null), r;\n                            }),\n                            (e.prototype.getMetrics = function (t) {\n                                var e, r;\n                                this.setDocument(t);\n                                var n = this.adaptor,\n                                    o = this.getMetricMaps(t);\n                                try {\n                                    for (\n                                        var i = a(t.math), s = i.next();\n                                        !s.done;\n                                        s = i.next()\n                                    ) {\n                                        var l = s.value,\n                                            u = n.parent(l.start.node);\n                                        if (l.state() < c.STATE.METRICS && u) {\n                                            var p = o[l.display ? 1 : 0].get(u),\n                                                h = p.em,\n                                                f = p.ex,\n                                                d = p.containerWidth,\n                                                m = p.lineWidth,\n                                                y = p.scale,\n                                                g = p.family;\n                                            l.setMetrics(h, f, d, m, y),\n                                                this.options.mtextInheritFont &&\n                                                    (l.outputData.mtextFamily =\n                                                        g),\n                                                this.options\n                                                    .merrorInheritFont &&\n                                                    (l.outputData.merrorFamily =\n                                                        g),\n                                                l.state(c.STATE.METRICS);\n                                        }\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (r = i.return) &&\n                                            r.call(i);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.getMetricsFor = function (t, e) {\n                                var r =\n                                        this.options.mtextInheritFont ||\n                                        this.options.merrorInheritFont,\n                                    n = this.getTestElement(t, e),\n                                    o = this.measureMetrics(n, r);\n                                return this.adaptor.remove(n), o;\n                            }),\n                            (e.prototype.getMetricMaps = function (t) {\n                                var e,\n                                    r,\n                                    n,\n                                    o,\n                                    i,\n                                    s,\n                                    l,\n                                    u,\n                                    p,\n                                    h,\n                                    f = this.adaptor,\n                                    d = [new Map(), new Map()];\n                                try {\n                                    for (\n                                        var m = a(t.math), y = m.next();\n                                        !y.done;\n                                        y = m.next()\n                                    ) {\n                                        var g = y.value;\n                                        if (\n                                            (A = f.parent(g.start.node)) &&\n                                            g.state() < c.STATE.METRICS\n                                        ) {\n                                            var b = d[g.display ? 1 : 0];\n                                            b.has(A) ||\n                                                b.set(\n                                                    A,\n                                                    this.getTestElement(\n                                                        A,\n                                                        g.display\n                                                    )\n                                                );\n                                        }\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        y &&\n                                            !y.done &&\n                                            (r = m.return) &&\n                                            r.call(m);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                var v =\n                                        this.options.mtextInheritFont ||\n                                        this.options.merrorInheritFont,\n                                    _ = [new Map(), new Map()];\n                                try {\n                                    for (\n                                        var S = a(_.keys()), M = S.next();\n                                        !M.done;\n                                        M = S.next()\n                                    ) {\n                                        var O = M.value;\n                                        try {\n                                            for (\n                                                var x =\n                                                        ((i = void 0),\n                                                        a(d[O].keys())),\n                                                    E = x.next();\n                                                !E.done;\n                                                E = x.next()\n                                            ) {\n                                                var A = E.value;\n                                                _[O].set(\n                                                    A,\n                                                    this.measureMetrics(\n                                                        d[O].get(A),\n                                                        v\n                                                    )\n                                                );\n                                            }\n                                        } catch (t) {\n                                            i = { error: t };\n                                        } finally {\n                                            try {\n                                                E &&\n                                                    !E.done &&\n                                                    (s = x.return) &&\n                                                    s.call(x);\n                                            } finally {\n                                                if (i) throw i.error;\n                                            }\n                                        }\n                                    }\n                                } catch (t) {\n                                    n = { error: t };\n                                } finally {\n                                    try {\n                                        M &&\n                                            !M.done &&\n                                            (o = S.return) &&\n                                            o.call(S);\n                                    } finally {\n                                        if (n) throw n.error;\n                                    }\n                                }\n                                try {\n                                    for (\n                                        var C = a(_.keys()), T = C.next();\n                                        !T.done;\n                                        T = C.next()\n                                    ) {\n                                        O = T.value;\n                                        try {\n                                            for (\n                                                var N =\n                                                        ((p = void 0),\n                                                        a(d[O].values())),\n                                                    w = N.next();\n                                                !w.done;\n                                                w = N.next()\n                                            ) {\n                                                A = w.value;\n                                                f.remove(A);\n                                            }\n                                        } catch (t) {\n                                            p = { error: t };\n                                        } finally {\n                                            try {\n                                                w &&\n                                                    !w.done &&\n                                                    (h = N.return) &&\n                                                    h.call(N);\n                                            } finally {\n                                                if (p) throw p.error;\n                                            }\n                                        }\n                                    }\n                                } catch (t) {\n                                    l = { error: t };\n                                } finally {\n                                    try {\n                                        T &&\n                                            !T.done &&\n                                            (u = C.return) &&\n                                            u.call(C);\n                                    } finally {\n                                        if (l) throw l.error;\n                                    }\n                                }\n                                return _;\n                            }),\n                            (e.prototype.getTestElement = function (t, e) {\n                                var r = this.adaptor;\n                                if (!this.testInline) {\n                                    (this.testInline = this.html(\n                                        \"mjx-test\",\n                                        {\n                                            style: {\n                                                display: \"inline-block\",\n                                                width: \"100%\",\n                                                \"font-style\": \"normal\",\n                                                \"font-weight\": \"normal\",\n                                                \"font-size\": \"100%\",\n                                                \"font-size-adjust\": \"none\",\n                                                \"text-indent\": 0,\n                                                \"text-transform\": \"none\",\n                                                \"letter-spacing\": \"normal\",\n                                                \"word-spacing\": \"normal\",\n                                                overflow: \"hidden\",\n                                                height: \"1px\",\n                                                \"margin-right\": \"-1px\",\n                                            },\n                                        },\n                                        [\n                                            this.html(\"mjx-left-box\", {\n                                                style: {\n                                                    display: \"inline-block\",\n                                                    width: 0,\n                                                    float: \"left\",\n                                                },\n                                            }),\n                                            this.html(\"mjx-ex-box\", {\n                                                style: {\n                                                    position: \"absolute\",\n                                                    overflow: \"hidden\",\n                                                    width: \"1px\",\n                                                    height: \"60ex\",\n                                                },\n                                            }),\n                                            this.html(\"mjx-right-box\", {\n                                                style: {\n                                                    display: \"inline-block\",\n                                                    width: 0,\n                                                    float: \"right\",\n                                                },\n                                            }),\n                                        ]\n                                    )),\n                                        (this.testDisplay = r.clone(\n                                            this.testInline\n                                        )),\n                                        r.setStyle(\n                                            this.testDisplay,\n                                            \"display\",\n                                            \"table\"\n                                        ),\n                                        r.setStyle(\n                                            this.testDisplay,\n                                            \"margin-right\",\n                                            \"\"\n                                        ),\n                                        r.setStyle(\n                                            r.firstChild(this.testDisplay),\n                                            \"display\",\n                                            \"none\"\n                                        );\n                                    var n = r.lastChild(this.testDisplay);\n                                    r.setStyle(n, \"display\", \"table-cell\"),\n                                        r.setStyle(n, \"width\", \"10000em\"),\n                                        r.setStyle(n, \"float\", \"\");\n                                }\n                                return r.append(\n                                    t,\n                                    r.clone(\n                                        e ? this.testDisplay : this.testInline\n                                    )\n                                );\n                            }),\n                            (e.prototype.measureMetrics = function (t, e) {\n                                var r = this.adaptor,\n                                    n = e ? r.fontFamily(t) : \"\",\n                                    o = r.fontSize(t),\n                                    i = s(r.nodeSize(r.childNode(t, 1)), 2),\n                                    a = i[0],\n                                    l = i[1],\n                                    c = a ? l / 60 : o * this.options.exFactor;\n                                return {\n                                    em: o,\n                                    ex: c,\n                                    containerWidth: a\n                                        ? \"table\" === r.getStyle(t, \"display\")\n                                            ? r.nodeSize(r.lastChild(t))[0] - 1\n                                            : r.nodeBBox(r.lastChild(t)).left -\n                                              r.nodeBBox(r.firstChild(t)).left -\n                                              2\n                                        : 1e6,\n                                    lineWidth: 1e6,\n                                    scale: Math.max(\n                                        this.options.minScale,\n                                        this.options.matchFontHeight\n                                            ? c / this.font.params.x_height / o\n                                            : 1\n                                    ),\n                                    family: n,\n                                };\n                            }),\n                            (e.prototype.styleSheet = function (t) {\n                                var e, r;\n                                if (\n                                    (this.setDocument(t),\n                                    this.cssStyles.clear(),\n                                    this.cssStyles.addStyles(\n                                        this.constructor.commonStyles\n                                    ),\n                                    \"getStyles\" in t)\n                                )\n                                    try {\n                                        for (\n                                            var n = a(t.getStyles()),\n                                                o = n.next();\n                                            !o.done;\n                                            o = n.next()\n                                        ) {\n                                            var i = o.value;\n                                            this.cssStyles.addStyles(i);\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            o &&\n                                                !o.done &&\n                                                (r = n.return) &&\n                                                r.call(n);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                                return (\n                                    this.addWrapperStyles(this.cssStyles),\n                                    this.addFontStyles(this.cssStyles),\n                                    this.html(\"style\", { id: \"MJX-styles\" }, [\n                                        this.text(\n                                            \"\\n\" + this.cssStyles.cssText + \"\\n\"\n                                        ),\n                                    ])\n                                );\n                            }),\n                            (e.prototype.addFontStyles = function (t) {\n                                t.addStyles(this.font.styles);\n                            }),\n                            (e.prototype.addWrapperStyles = function (t) {\n                                var e, r;\n                                try {\n                                    for (\n                                        var n = a(this.factory.getKinds()),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var i = o.value;\n                                        this.addClassStyles(\n                                            this.factory.getNodeClass(i),\n                                            t\n                                        );\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (r = n.return) &&\n                                            r.call(n);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.addClassStyles = function (t, e) {\n                                e.addStyles(t.styles);\n                            }),\n                            (e.prototype.setDocument = function (t) {\n                                t &&\n                                    ((this.document = t),\n                                    (this.adaptor.document = t.document));\n                            }),\n                            (e.prototype.html = function (t, e, r, n) {\n                                return (\n                                    void 0 === e && (e = {}),\n                                    void 0 === r && (r = []),\n                                    this.adaptor.node(t, e, r, n)\n                                );\n                            }),\n                            (e.prototype.text = function (t) {\n                                return this.adaptor.text(t);\n                            }),\n                            (e.prototype.fixed = function (t, e) {\n                                return (\n                                    void 0 === e && (e = 3),\n                                    Math.abs(t) < 6e-4\n                                        ? \"0\"\n                                        : t.toFixed(e).replace(/\\.?0+$/, \"\")\n                                );\n                            }),\n                            (e.prototype.measureText = function (t, e, r) {\n                                void 0 === r && (r = [\"\", !1, !1]);\n                                var n = this.unknownText(t, e);\n                                if (\"-explicitFont\" === e) {\n                                    var o = this.cssFontStyles(r);\n                                    this.adaptor.setAttributes(n, { style: o });\n                                }\n                                return this.measureTextNodeWithCache(\n                                    n,\n                                    t,\n                                    e,\n                                    r\n                                );\n                            }),\n                            (e.prototype.measureTextNodeWithCache = function (\n                                t,\n                                e,\n                                r,\n                                n\n                            ) {\n                                void 0 === n && (n = [\"\", !1, !1]),\n                                    \"-explicitFont\" === r &&\n                                        (r = [\n                                            n[0],\n                                            n[1] ? \"T\" : \"F\",\n                                            n[2] ? \"T\" : \"F\",\n                                            \"\",\n                                        ].join(\"-\")),\n                                    this.unknownCache.has(r) ||\n                                        this.unknownCache.set(r, new Map());\n                                var o = this.unknownCache.get(r),\n                                    i = o.get(e);\n                                if (i) return i;\n                                var s = this.measureTextNode(t);\n                                return o.set(e, s), s;\n                            }),\n                            (e.prototype.measureXMLnode = function (t) {\n                                var e = this.adaptor,\n                                    r = this.html(\n                                        \"mjx-xml-block\",\n                                        { style: { display: \"inline-block\" } },\n                                        [e.clone(t)]\n                                    ),\n                                    n = this.html(\"mjx-baseline\", {\n                                        style: {\n                                            display: \"inline-block\",\n                                            width: 0,\n                                            height: 0,\n                                        },\n                                    }),\n                                    o = this.html(\n                                        \"mjx-measure-xml\",\n                                        {\n                                            style: {\n                                                position: \"absolute\",\n                                                display: \"inline-block\",\n                                                \"font-family\": \"initial\",\n                                                \"line-height\": \"normal\",\n                                            },\n                                        },\n                                        [n, r]\n                                    );\n                                e.append(\n                                    e.parent(this.math.start.node),\n                                    this.container\n                                ),\n                                    e.append(this.container, o);\n                                var i =\n                                        this.math.metrics.em *\n                                        this.math.metrics.scale,\n                                    s = e.nodeBBox(r),\n                                    a = s.left,\n                                    l = s.right,\n                                    c = s.bottom,\n                                    u = s.top,\n                                    p = (l - a) / i,\n                                    h = (e.nodeBBox(n).top - u) / i,\n                                    f = (c - u) / i - h;\n                                return (\n                                    e.remove(this.container),\n                                    e.remove(o),\n                                    { w: p, h: h, d: f }\n                                );\n                            }),\n                            (e.prototype.cssFontStyles = function (t, e) {\n                                void 0 === e && (e = {});\n                                var r = s(t, 3),\n                                    n = r[0],\n                                    o = r[1],\n                                    i = r[2];\n                                return (\n                                    (e[\"font-family\"] = this.font.getFamily(n)),\n                                    o && (e[\"font-style\"] = \"italic\"),\n                                    i && (e[\"font-weight\"] = \"bold\"),\n                                    e\n                                );\n                            }),\n                            (e.prototype.getFontData = function (t) {\n                                return (\n                                    t || (t = new h.Styles()),\n                                    [\n                                        this.font.getFamily(\n                                            t.get(\"font-family\")\n                                        ),\n                                        \"italic\" === t.get(\"font-style\"),\n                                        \"bold\" === t.get(\"font-weight\"),\n                                    ]\n                                );\n                            }),\n                            (e.NAME = \"Common\"),\n                            (e.OPTIONS = i(i({}, l.AbstractOutputJax.OPTIONS), {\n                                scale: 1,\n                                minScale: 0.5,\n                                mtextInheritFont: !1,\n                                merrorInheritFont: !1,\n                                mtextFont: \"\",\n                                merrorFont: \"serif\",\n                                mathmlSpacing: !1,\n                                skipAttributes: {},\n                                exFactor: 0.5,\n                                displayAlign: \"center\",\n                                displayIndent: \"0\",\n                                wrapperFactory: null,\n                                font: null,\n                                cssStyles: null,\n                            })),\n                            (e.commonStyles = {}),\n                            e\n                        );\n                    })(l.AbstractOutputJax);\n                e.CommonOutputJax = d;\n            },\n            7519: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    s =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    a =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        i(e, t, r);\n                            return s(e, t), e;\n                        },\n                    l =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    c =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    u =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonWrapper = void 0);\n                var p = r(8912),\n                    h = r(9007),\n                    f = r(505),\n                    d = a(r(6010)),\n                    m = r(8054),\n                    y = r(6469),\n                    g = r(5884),\n                    b = 2 / 18;\n                function v(t, e) {\n                    return t ? (e < b ? 0 : b) : e;\n                }\n                var _ = (function (t) {\n                    function e(e, r, n) {\n                        void 0 === n && (n = null);\n                        var o = t.call(this, e, r) || this;\n                        return (\n                            (o.parent = null),\n                            (o.removedStyles = null),\n                            (o.styles = null),\n                            (o.variant = \"\"),\n                            (o.bboxComputed = !1),\n                            (o.stretch = g.NOSTRETCH),\n                            (o.font = null),\n                            (o.parent = n),\n                            (o.font = e.jax.font),\n                            (o.bbox = y.BBox.zero()),\n                            o.getStyles(),\n                            o.getVariant(),\n                            o.getScale(),\n                            o.getSpace(),\n                            (o.childNodes = r.childNodes.map(function (t) {\n                                var e = o.wrap(t);\n                                return (\n                                    e.bbox.pwidth &&\n                                        (r.notParent || r.isKind(\"math\")) &&\n                                        (o.bbox.pwidth = y.BBox.fullWidth),\n                                    e\n                                );\n                            })),\n                            o\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"jax\", {\n                            get: function () {\n                                return this.factory.jax;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"adaptor\", {\n                            get: function () {\n                                return this.factory.jax.adaptor;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"metrics\", {\n                            get: function () {\n                                return this.factory.jax.math.metrics;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        Object.defineProperty(e.prototype, \"fixesPWidth\", {\n                            get: function () {\n                                return (\n                                    !this.node.notParent && !this.node.isToken\n                                );\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.wrap = function (t, e) {\n                            void 0 === e && (e = null);\n                            var r = this.factory.wrap(t, e || this);\n                            return (\n                                e && e.childNodes.push(r),\n                                this.jax.nodeMap.set(t, r),\n                                r\n                            );\n                        }),\n                        (e.prototype.getBBox = function (t) {\n                            if ((void 0 === t && (t = !0), this.bboxComputed))\n                                return this.bbox;\n                            var e = t ? this.bbox : y.BBox.zero();\n                            return (\n                                this.computeBBox(e), (this.bboxComputed = t), e\n                            );\n                        }),\n                        (e.prototype.getOuterBBox = function (t) {\n                            var e, r;\n                            void 0 === t && (t = !0);\n                            var n = this.getBBox(t);\n                            if (!this.styles) return n;\n                            var o = new y.BBox();\n                            Object.assign(o, n);\n                            try {\n                                for (\n                                    var i = l(y.BBox.StyleAdjust), s = i.next();\n                                    !s.done;\n                                    s = i.next()\n                                ) {\n                                    var a = c(s.value, 2),\n                                        u = a[0],\n                                        p = a[1],\n                                        h = this.styles.get(u);\n                                    h &&\n                                        (o[p] += this.length2em(\n                                            h,\n                                            1,\n                                            o.rscale\n                                        ));\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    s && !s.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            return o;\n                        }),\n                        (e.prototype.computeBBox = function (t, e) {\n                            var r, n;\n                            void 0 === e && (e = !1), t.empty();\n                            try {\n                                for (\n                                    var o = l(this.childNodes), i = o.next();\n                                    !i.done;\n                                    i = o.next()\n                                ) {\n                                    var s = i.value;\n                                    t.append(s.getOuterBBox());\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    i && !i.done && (n = o.return) && n.call(o);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            t.clean(),\n                                this.fixesPWidth &&\n                                    this.setChildPWidths(e) &&\n                                    this.computeBBox(t, !0);\n                        }),\n                        (e.prototype.setChildPWidths = function (t, e, r) {\n                            var n, o;\n                            if (\n                                (void 0 === e && (e = null),\n                                void 0 === r && (r = !0),\n                                t)\n                            )\n                                return !1;\n                            r && (this.bbox.pwidth = \"\");\n                            var i = !1;\n                            try {\n                                for (\n                                    var s = l(this.childNodes), a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var c = a.value,\n                                        u = c.getOuterBBox();\n                                    u.pwidth &&\n                                        c.setChildPWidths(\n                                            t,\n                                            null === e ? u.w : e,\n                                            r\n                                        ) &&\n                                        (i = !0);\n                                }\n                            } catch (t) {\n                                n = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (o = s.return) && o.call(s);\n                                } finally {\n                                    if (n) throw n.error;\n                                }\n                            }\n                            return i;\n                        }),\n                        (e.prototype.invalidateBBox = function () {\n                            this.bboxComputed &&\n                                ((this.bboxComputed = !1),\n                                this.parent && this.parent.invalidateBBox());\n                        }),\n                        (e.prototype.copySkewIC = function (t) {\n                            var e = this.childNodes[0];\n                            (null == e ? void 0 : e.bbox.sk) &&\n                                (t.sk = e.bbox.sk),\n                                (null == e ? void 0 : e.bbox.dx) &&\n                                    (t.dx = e.bbox.dx);\n                            var r = this.childNodes[this.childNodes.length - 1];\n                            (null == r ? void 0 : r.bbox.ic) &&\n                                ((t.ic = r.bbox.ic), (t.w += t.ic));\n                        }),\n                        (e.prototype.getStyles = function () {\n                            var t = this.node.attributes.getExplicit(\"style\");\n                            if (t)\n                                for (\n                                    var r = (this.styles = new m.Styles(t)),\n                                        n = 0,\n                                        o = e.removeStyles.length;\n                                    n < o;\n                                    n++\n                                ) {\n                                    var i = e.removeStyles[n];\n                                    r.get(i) &&\n                                        (this.removedStyles ||\n                                            (this.removedStyles = {}),\n                                        (this.removedStyles[i] = r.get(i)),\n                                        r.set(i, \"\"));\n                                }\n                        }),\n                        (e.prototype.getVariant = function () {\n                            if (this.node.isToken) {\n                                var t = this.node.attributes,\n                                    r = t.get(\"mathvariant\");\n                                if (!t.getExplicit(\"mathvariant\")) {\n                                    var n = t.getList(\n                                        \"fontfamily\",\n                                        \"fontweight\",\n                                        \"fontstyle\"\n                                    );\n                                    if (this.removedStyles) {\n                                        var o = this.removedStyles;\n                                        o.fontFamily &&\n                                            (n.family = o.fontFamily),\n                                            o.fontWeight &&\n                                                (n.weight = o.fontWeight),\n                                            o.fontStyle &&\n                                                (n.style = o.fontStyle);\n                                    }\n                                    n.fontfamily && (n.family = n.fontfamily),\n                                        n.fontweight &&\n                                            (n.weight = n.fontweight),\n                                        n.fontstyle && (n.style = n.fontstyle),\n                                        n.weight &&\n                                            n.weight.match(/^\\d+$/) &&\n                                            (n.weight =\n                                                parseInt(n.weight) > 600\n                                                    ? \"bold\"\n                                                    : \"normal\"),\n                                        n.family\n                                            ? (r = this.explicitVariant(\n                                                  n.family,\n                                                  n.weight,\n                                                  n.style\n                                              ))\n                                            : (this.node.getProperty(\n                                                  \"variantForm\"\n                                              ) && (r = \"-tex-variant\"),\n                                              (r =\n                                                  (e.BOLDVARIANTS[n.weight] ||\n                                                      {})[r] || r),\n                                              (r =\n                                                  (e.ITALICVARIANTS[n.style] ||\n                                                      {})[r] || r));\n                                }\n                                this.variant = r;\n                            }\n                        }),\n                        (e.prototype.explicitVariant = function (t, e, r) {\n                            var n = this.styles;\n                            return (\n                                n || (n = this.styles = new m.Styles()),\n                                n.set(\"fontFamily\", t),\n                                e && n.set(\"fontWeight\", e),\n                                r && n.set(\"fontStyle\", r),\n                                \"-explicitFont\"\n                            );\n                        }),\n                        (e.prototype.getScale = function () {\n                            var t = 1,\n                                e = this.parent,\n                                r = e ? e.bbox.scale : 1,\n                                n = this.node.attributes,\n                                o = Math.min(n.get(\"scriptlevel\"), 2),\n                                i = n.get(\"fontsize\"),\n                                s =\n                                    this.node.isToken ||\n                                    this.node.isKind(\"mstyle\")\n                                        ? n.get(\"mathsize\")\n                                        : n.getInherited(\"mathsize\");\n                            if (0 !== o) {\n                                t = Math.pow(n.get(\"scriptsizemultiplier\"), o);\n                                var a = this.length2em(\n                                    n.get(\"scriptminsize\"),\n                                    0.8,\n                                    1\n                                );\n                                t < a && (t = a);\n                            }\n                            this.removedStyles &&\n                                this.removedStyles.fontSize &&\n                                !i &&\n                                (i = this.removedStyles.fontSize),\n                                i && !n.getExplicit(\"mathsize\") && (s = i),\n                                \"1\" !== s && (t *= this.length2em(s, 1, 1)),\n                                (this.bbox.scale = t),\n                                (this.bbox.rscale = t / r);\n                        }),\n                        (e.prototype.getSpace = function () {\n                            var t = this.isTopEmbellished(),\n                                e = this.node.hasSpacingAttributes();\n                            this.jax.options.mathmlSpacing || e\n                                ? t && this.getMathMLSpacing()\n                                : this.getTeXSpacing(t, e);\n                        }),\n                        (e.prototype.getMathMLSpacing = function () {\n                            var t = this.node.coreMO(),\n                                e = t.coreParent(),\n                                r = e.parent;\n                            if (\n                                r &&\n                                r.isKind(\"mrow\") &&\n                                1 !== r.childNodes.length\n                            ) {\n                                var n = t.attributes,\n                                    o = n.get(\"scriptlevel\") > 0;\n                                (this.bbox.L = n.isSet(\"lspace\")\n                                    ? Math.max(\n                                          0,\n                                          this.length2em(n.get(\"lspace\"))\n                                      )\n                                    : v(o, t.lspace)),\n                                    (this.bbox.R = n.isSet(\"rspace\")\n                                        ? Math.max(\n                                              0,\n                                              this.length2em(n.get(\"rspace\"))\n                                          )\n                                        : v(o, t.rspace));\n                                var i = r.childIndex(e);\n                                if (0 !== i) {\n                                    var s = r.childNodes[i - 1];\n                                    if (s.isEmbellished) {\n                                        var a = this.jax.nodeMap\n                                            .get(s)\n                                            .getBBox();\n                                        a.R &&\n                                            (this.bbox.L = Math.max(\n                                                0,\n                                                this.bbox.L - a.R\n                                            ));\n                                    }\n                                }\n                            }\n                        }),\n                        (e.prototype.getTeXSpacing = function (t, e) {\n                            if (!e) {\n                                var r = this.node.texSpacing();\n                                r && (this.bbox.L = this.length2em(r));\n                            }\n                            if (t || e) {\n                                var n = this.node.coreMO().attributes;\n                                n.isSet(\"lspace\") &&\n                                    (this.bbox.L = Math.max(\n                                        0,\n                                        this.length2em(n.get(\"lspace\"))\n                                    )),\n                                    n.isSet(\"rspace\") &&\n                                        (this.bbox.R = Math.max(\n                                            0,\n                                            this.length2em(n.get(\"rspace\"))\n                                        ));\n                            }\n                        }),\n                        (e.prototype.isTopEmbellished = function () {\n                            return (\n                                this.node.isEmbellished &&\n                                !(\n                                    this.node.parent &&\n                                    this.node.parent.isEmbellished\n                                )\n                            );\n                        }),\n                        (e.prototype.core = function () {\n                            return this.jax.nodeMap.get(this.node.core());\n                        }),\n                        (e.prototype.coreMO = function () {\n                            return this.jax.nodeMap.get(this.node.coreMO());\n                        }),\n                        (e.prototype.getText = function () {\n                            var t,\n                                e,\n                                r = \"\";\n                            if (this.node.isToken)\n                                try {\n                                    for (\n                                        var n = l(this.node.childNodes),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var i = o.value;\n                                        i instanceof h.TextNode &&\n                                            (r += i.getText());\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (e = n.return) &&\n                                            e.call(n);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            return r;\n                        }),\n                        (e.prototype.canStretch = function (t) {\n                            if (\n                                ((this.stretch = g.NOSTRETCH),\n                                this.node.isEmbellished)\n                            ) {\n                                var e = this.core();\n                                e &&\n                                    e.node !== this.node &&\n                                    e.canStretch(t) &&\n                                    (this.stretch = e.stretch);\n                            }\n                            return 0 !== this.stretch.dir;\n                        }),\n                        (e.prototype.getAlignShift = function () {\n                            var t,\n                                e = (t = this.node.attributes).getList.apply(\n                                    t,\n                                    u([], c(h.indentAttributes), !1)\n                                ),\n                                r = e.indentalign,\n                                n = e.indentshift,\n                                o = e.indentalignfirst,\n                                i = e.indentshiftfirst;\n                            return (\n                                \"indentalign\" !== o && (r = o),\n                                \"auto\" === r &&\n                                    (r = this.jax.options.displayAlign),\n                                \"indentshift\" !== i && (n = i),\n                                \"auto\" === n &&\n                                    ((n = this.jax.options.displayIndent),\n                                    \"right\" !== r ||\n                                        n.match(/^\\s*0[a-z]*\\s*$/) ||\n                                        (n = (\"-\" + n.trim()).replace(\n                                            /^--/,\n                                            \"\"\n                                        ))),\n                                [\n                                    r,\n                                    this.length2em(\n                                        n,\n                                        this.metrics.containerWidth\n                                    ),\n                                ]\n                            );\n                        }),\n                        (e.prototype.getAlignX = function (t, e, r) {\n                            return \"right\" === r\n                                ? t - (e.w + e.R) * e.rscale\n                                : \"left\" === r\n                                  ? e.L * e.rscale\n                                  : (t - e.w * e.rscale) / 2;\n                        }),\n                        (e.prototype.getAlignY = function (t, e, r, n, o) {\n                            return \"top\" === o\n                                ? t - r\n                                : \"bottom\" === o\n                                  ? n - e\n                                  : \"center\" === o\n                                    ? (t - r - (e - n)) / 2\n                                    : 0;\n                        }),\n                        (e.prototype.getWrapWidth = function (t) {\n                            return this.childNodes[t].getBBox().w;\n                        }),\n                        (e.prototype.getChildAlign = function (t) {\n                            return \"left\";\n                        }),\n                        (e.prototype.percent = function (t) {\n                            return d.percent(t);\n                        }),\n                        (e.prototype.em = function (t) {\n                            return d.em(t);\n                        }),\n                        (e.prototype.px = function (t, e) {\n                            return (\n                                void 0 === e && (e = -d.BIGDIMEN),\n                                d.px(t, e, this.metrics.em)\n                            );\n                        }),\n                        (e.prototype.length2em = function (t, e, r) {\n                            return (\n                                void 0 === e && (e = 1),\n                                void 0 === r && (r = null),\n                                null === r && (r = this.bbox.scale),\n                                d.length2em(t, e, r, this.jax.pxPerEm)\n                            );\n                        }),\n                        (e.prototype.unicodeChars = function (t, e) {\n                            void 0 === e && (e = this.variant);\n                            var r = (0, f.unicodeChars)(t),\n                                n = this.font.getVariant(e);\n                            if (n && n.chars) {\n                                var o = n.chars;\n                                r = r.map(function (t) {\n                                    return ((o[t] || [])[3] || {}).smp || t;\n                                });\n                            }\n                            return r;\n                        }),\n                        (e.prototype.remapChars = function (t) {\n                            return t;\n                        }),\n                        (e.prototype.mmlText = function (t) {\n                            return this.node.factory.create(\"text\").setText(t);\n                        }),\n                        (e.prototype.mmlNode = function (t, e, r) {\n                            return (\n                                void 0 === e && (e = {}),\n                                void 0 === r && (r = []),\n                                this.node.factory.create(t, e, r)\n                            );\n                        }),\n                        (e.prototype.createMo = function (t) {\n                            var e = this.node.factory,\n                                r = e.create(\"text\").setText(t),\n                                n = e.create(\"mo\", { stretchy: !0 }, [r]);\n                            n.inheritAttributesFrom(this.node);\n                            var o = this.wrap(n);\n                            return (o.parent = this), o;\n                        }),\n                        (e.prototype.getVariantChar = function (t, e) {\n                            var r = this.font.getChar(t, e) || [\n                                0,\n                                0,\n                                0,\n                                { unknown: !0 },\n                            ];\n                            return 3 === r.length && (r[3] = {}), r;\n                        }),\n                        (e.kind = \"unknown\"),\n                        (e.styles = {}),\n                        (e.removeStyles = [\n                            \"fontSize\",\n                            \"fontFamily\",\n                            \"fontWeight\",\n                            \"fontStyle\",\n                            \"fontVariant\",\n                            \"font\",\n                        ]),\n                        (e.skipAttributes = {\n                            fontfamily: !0,\n                            fontsize: !0,\n                            fontweight: !0,\n                            fontstyle: !0,\n                            color: !0,\n                            background: !0,\n                            class: !0,\n                            href: !0,\n                            style: !0,\n                            xmlns: !0,\n                        }),\n                        (e.BOLDVARIANTS = {\n                            bold: {\n                                normal: \"bold\",\n                                italic: \"bold-italic\",\n                                fraktur: \"bold-fraktur\",\n                                script: \"bold-script\",\n                                \"sans-serif\": \"bold-sans-serif\",\n                                \"sans-serif-italic\": \"sans-serif-bold-italic\",\n                            },\n                            normal: {\n                                bold: \"normal\",\n                                \"bold-italic\": \"italic\",\n                                \"bold-fraktur\": \"fraktur\",\n                                \"bold-script\": \"script\",\n                                \"bold-sans-serif\": \"sans-serif\",\n                                \"sans-serif-bold-italic\": \"sans-serif-italic\",\n                            },\n                        }),\n                        (e.ITALICVARIANTS = {\n                            italic: {\n                                normal: \"italic\",\n                                bold: \"bold-italic\",\n                                \"sans-serif\": \"sans-serif-italic\",\n                                \"bold-sans-serif\": \"sans-serif-bold-italic\",\n                            },\n                            normal: {\n                                italic: \"normal\",\n                                \"bold-italic\": \"bold\",\n                                \"sans-serif-italic\": \"sans-serif\",\n                                \"sans-serif-bold-italic\": \"bold-sans-serif\",\n                            },\n                        }),\n                        e\n                    );\n                })(p.AbstractWrapper);\n                e.CommonWrapper = _;\n            },\n            4420: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonWrapperFactory = void 0);\n                var i = (function (t) {\n                    function e() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (e.jax = null), e;\n                    }\n                    return (\n                        o(e, t),\n                        Object.defineProperty(e.prototype, \"Wrappers\", {\n                            get: function () {\n                                return this.node;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.defaultNodes = {}),\n                        e\n                    );\n                })(r(3811).AbstractWrapperFactory);\n                e.CommonWrapperFactory = i;\n            },\n            9800: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonTeXAtomMixin = void 0);\n                var i = r(9007);\n                e.CommonTeXAtomMixin = function (t) {\n                    return (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.computeBBox = function (e, r) {\n                                if (\n                                    (void 0 === r && (r = !1),\n                                    t.prototype.computeBBox.call(this, e, r),\n                                    this.childNodes[0] &&\n                                        this.childNodes[0].bbox.ic &&\n                                        (e.ic = this.childNodes[0].bbox.ic),\n                                    this.node.texClass === i.TEXCLASS.VCENTER)\n                                ) {\n                                    var n = e.h,\n                                        o =\n                                            (n + e.d) / 2 +\n                                            this.font.params.axis_height -\n                                            n;\n                                    (e.h += o), (e.d -= o);\n                                }\n                            }),\n                            e\n                        );\n                    })(t);\n                };\n            },\n            1160: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonTextNodeMixin = void 0),\n                    (e.CommonTextNodeMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.computeBBox = function (t, e) {\n                                    var r, n;\n                                    void 0 === e && (e = !1);\n                                    var s = this.parent.variant,\n                                        a = this.node.getText();\n                                    if (\"-explicitFont\" === s) {\n                                        var l = this.jax.getFontData(\n                                                this.parent.styles\n                                            ),\n                                            c = this.jax.measureText(a, s, l),\n                                            u = c.w,\n                                            p = c.h,\n                                            h = c.d;\n                                        (t.h = p), (t.d = h), (t.w = u);\n                                    } else {\n                                        var f = this.remappedText(a, s);\n                                        t.empty();\n                                        try {\n                                            for (\n                                                var d = o(f), m = d.next();\n                                                !m.done;\n                                                m = d.next()\n                                            ) {\n                                                var y = m.value,\n                                                    g = i(\n                                                        this.getVariantChar(\n                                                            s,\n                                                            y\n                                                        ),\n                                                        4\n                                                    ),\n                                                    b =\n                                                        ((p = g[0]),\n                                                        (h = g[1]),\n                                                        (u = g[2]),\n                                                        g[3]);\n                                                if (b.unknown) {\n                                                    var v =\n                                                        this.jax.measureText(\n                                                            String.fromCodePoint(\n                                                                y\n                                                            ),\n                                                            s\n                                                        );\n                                                    (u = v.w),\n                                                        (p = v.h),\n                                                        (h = v.d);\n                                                }\n                                                (t.w += u),\n                                                    p > t.h && (t.h = p),\n                                                    h > t.d && (t.d = h),\n                                                    (t.ic = b.ic || 0),\n                                                    (t.sk = b.sk || 0),\n                                                    (t.dx = b.dx || 0);\n                                            }\n                                        } catch (t) {\n                                            r = { error: t };\n                                        } finally {\n                                            try {\n                                                m &&\n                                                    !m.done &&\n                                                    (n = d.return) &&\n                                                    n.call(d);\n                                            } finally {\n                                                if (r) throw r.error;\n                                            }\n                                        }\n                                        f.length > 1 && (t.sk = 0), t.clean();\n                                    }\n                                }),\n                                (e.prototype.remappedText = function (t, e) {\n                                    var r = this.parent.stretch.c;\n                                    return r\n                                        ? [r]\n                                        : this.parent.remapChars(\n                                              this.unicodeChars(t, e)\n                                          );\n                                }),\n                                (e.prototype.getStyles = function () {}),\n                                (e.prototype.getVariant = function () {}),\n                                (e.prototype.getScale = function () {}),\n                                (e.prototype.getSpace = function () {}),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            1956: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMactionMixin = e.TooltipData = void 0);\n                var a = r(505);\n                (e.TooltipData = {\n                    dx: \".2em\",\n                    dy: \".1em\",\n                    postDelay: 600,\n                    clearDelay: 100,\n                    hoverTimer: new Map(),\n                    clearTimer: new Map(),\n                    stopTimers: function (t, e) {\n                        e.clearTimer.has(t) &&\n                            (clearTimeout(e.clearTimer.get(t)),\n                            e.clearTimer.delete(t)),\n                            e.hoverTimer.has(t) &&\n                                (clearTimeout(e.hoverTimer.get(t)),\n                                e.hoverTimer.delete(t));\n                    },\n                }),\n                    (e.CommonMactionMixin = function (t) {\n                        return (function (t) {\n                            function r() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, s([], i(e), !1)) || this,\n                                    o = n.constructor.actions,\n                                    a = n.node.attributes.get(\"actiontype\"),\n                                    l = i(\n                                        o.get(a) || [function (t, e) {}, {}],\n                                        2\n                                    ),\n                                    c = l[0],\n                                    u = l[1];\n                                return (\n                                    (n.action = c),\n                                    (n.data = u),\n                                    n.getParameters(),\n                                    n\n                                );\n                            }\n                            return (\n                                o(r, t),\n                                Object.defineProperty(r.prototype, \"selected\", {\n                                    get: function () {\n                                        var t =\n                                                this.node.attributes.get(\n                                                    \"selection\"\n                                                ),\n                                            e =\n                                                Math.max(\n                                                    1,\n                                                    Math.min(\n                                                        this.childNodes.length,\n                                                        t\n                                                    )\n                                                ) - 1;\n                                        return (\n                                            this.childNodes[e] ||\n                                            this.wrap(this.node.selected)\n                                        );\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }),\n                                (r.prototype.getParameters = function () {\n                                    var t =\n                                            this.node.attributes.get(\n                                                \"data-offsets\"\n                                            ),\n                                        r = i((0, a.split)(t || \"\"), 2),\n                                        n = r[0],\n                                        o = r[1];\n                                    (this.dx = this.length2em(\n                                        n || e.TooltipData.dx\n                                    )),\n                                        (this.dy = this.length2em(\n                                            o || e.TooltipData.dy\n                                        ));\n                                }),\n                                (r.prototype.computeBBox = function (t, e) {\n                                    void 0 === e && (e = !1),\n                                        t.updateFrom(\n                                            this.selected.getOuterBBox()\n                                        ),\n                                        this.selected.setChildPWidths(e);\n                                }),\n                                r\n                            );\n                        })(t);\n                    });\n            },\n            7490: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMathMixin = void 0),\n                    (e.CommonMathMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.getWrapWidth = function (t) {\n                                    return this.parent\n                                        ? this.getBBox().w\n                                        : this.metrics.containerWidth /\n                                              this.jax.pxPerEm;\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            7313: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__createBinding) ||\n                        (Object.create\n                            ? function (t, e, r, n) {\n                                  void 0 === n && (n = r);\n                                  var o = Object.getOwnPropertyDescriptor(e, r);\n                                  (o &&\n                                      !(\"get\" in o\n                                          ? !e.__esModule\n                                          : o.writable || o.configurable)) ||\n                                      (o = {\n                                          enumerable: !0,\n                                          get: function () {\n                                              return e[r];\n                                          },\n                                      }),\n                                      Object.defineProperty(t, n, o);\n                              }\n                            : function (t, e, r, n) {\n                                  void 0 === n && (n = r), (t[n] = e[r]);\n                              }),\n                    s =\n                        (this && this.__setModuleDefault) ||\n                        (Object.create\n                            ? function (t, e) {\n                                  Object.defineProperty(t, \"default\", {\n                                      enumerable: !0,\n                                      value: e,\n                                  });\n                              }\n                            : function (t, e) {\n                                  t.default = e;\n                              }),\n                    a =\n                        (this && this.__importStar) ||\n                        function (t) {\n                            if (t && t.__esModule) return t;\n                            var e = {};\n                            if (null != t)\n                                for (var r in t)\n                                    \"default\" !== r &&\n                                        Object.prototype.hasOwnProperty.call(\n                                            t,\n                                            r\n                                        ) &&\n                                        i(e, t, r);\n                            return s(e, t), e;\n                        },\n                    l =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    c =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    u =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMencloseMixin = void 0);\n                var p = a(r(5552)),\n                    h = r(505);\n                e.CommonMencloseMixin = function (t) {\n                    return (function (t) {\n                        function e() {\n                            for (var e = [], r = 0; r < arguments.length; r++)\n                                e[r] = arguments[r];\n                            var n = t.apply(this, c([], l(e), !1)) || this;\n                            return (\n                                (n.notations = {}),\n                                (n.renderChild = null),\n                                (n.msqrt = null),\n                                (n.padding = p.PADDING),\n                                (n.thickness = p.THICKNESS),\n                                (n.arrowhead = {\n                                    x: p.ARROWX,\n                                    y: p.ARROWY,\n                                    dx: p.ARROWDX,\n                                }),\n                                (n.TRBL = [0, 0, 0, 0]),\n                                n.getParameters(),\n                                n.getNotations(),\n                                n.removeRedundantNotations(),\n                                n.initializeNotations(),\n                                (n.TRBL = n.getBBoxExtenders()),\n                                n\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.getParameters = function () {\n                                var t = this.node.attributes,\n                                    e = t.get(\"data-padding\");\n                                void 0 !== e &&\n                                    (this.padding = this.length2em(\n                                        e,\n                                        p.PADDING\n                                    ));\n                                var r = t.get(\"data-thickness\");\n                                void 0 !== r &&\n                                    (this.thickness = this.length2em(\n                                        r,\n                                        p.THICKNESS\n                                    ));\n                                var n = t.get(\"data-arrowhead\");\n                                if (void 0 !== n) {\n                                    var o = l((0, h.split)(n), 3),\n                                        i = o[0],\n                                        s = o[1],\n                                        a = o[2];\n                                    this.arrowhead = {\n                                        x: i ? parseFloat(i) : p.ARROWX,\n                                        y: s ? parseFloat(s) : p.ARROWY,\n                                        dx: a ? parseFloat(a) : p.ARROWDX,\n                                    };\n                                }\n                            }),\n                            (e.prototype.getNotations = function () {\n                                var t,\n                                    e,\n                                    r = this.constructor.notations;\n                                try {\n                                    for (\n                                        var n = u(\n                                                (0, h.split)(\n                                                    this.node.attributes.get(\n                                                        \"notation\"\n                                                    )\n                                                )\n                                            ),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var i = o.value,\n                                            s = r.get(i);\n                                        s &&\n                                            ((this.notations[i] = s),\n                                            s.renderChild &&\n                                                (this.renderChild =\n                                                    s.renderer));\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (e = n.return) &&\n                                            e.call(n);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.removeRedundantNotations =\n                                function () {\n                                    var t, e, r, n;\n                                    try {\n                                        for (\n                                            var o = u(\n                                                    Object.keys(this.notations)\n                                                ),\n                                                i = o.next();\n                                            !i.done;\n                                            i = o.next()\n                                        ) {\n                                            var s = i.value;\n                                            if (this.notations[s]) {\n                                                var a =\n                                                    this.notations[s].remove ||\n                                                    \"\";\n                                                try {\n                                                    for (\n                                                        var l =\n                                                                ((r = void 0),\n                                                                u(\n                                                                    a.split(/ /)\n                                                                )),\n                                                            c = l.next();\n                                                        !c.done;\n                                                        c = l.next()\n                                                    ) {\n                                                        var p = c.value;\n                                                        delete this.notations[\n                                                            p\n                                                        ];\n                                                    }\n                                                } catch (t) {\n                                                    r = { error: t };\n                                                } finally {\n                                                    try {\n                                                        c &&\n                                                            !c.done &&\n                                                            (n = l.return) &&\n                                                            n.call(l);\n                                                    } finally {\n                                                        if (r) throw r.error;\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            i &&\n                                                !i.done &&\n                                                (e = o.return) &&\n                                                e.call(o);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                }),\n                            (e.prototype.initializeNotations = function () {\n                                var t, e;\n                                try {\n                                    for (\n                                        var r = u(Object.keys(this.notations)),\n                                            n = r.next();\n                                        !n.done;\n                                        n = r.next()\n                                    ) {\n                                        var o = n.value,\n                                            i = this.notations[o].init;\n                                        i && i(this);\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        n &&\n                                            !n.done &&\n                                            (e = r.return) &&\n                                            e.call(r);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.computeBBox = function (t, e) {\n                                void 0 === e && (e = !1);\n                                var r = l(this.TRBL, 4),\n                                    n = r[0],\n                                    o = r[1],\n                                    i = r[2],\n                                    s = r[3],\n                                    a = this.childNodes[0].getBBox();\n                                t.combine(a, s, 0),\n                                    (t.h += n),\n                                    (t.d += i),\n                                    (t.w += o),\n                                    this.setChildPWidths(e);\n                            }),\n                            (e.prototype.getBBoxExtenders = function () {\n                                var t,\n                                    e,\n                                    r = [0, 0, 0, 0];\n                                try {\n                                    for (\n                                        var n = u(Object.keys(this.notations)),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var i = o.value;\n                                        this.maximizeEntries(\n                                            r,\n                                            this.notations[i].bbox(this)\n                                        );\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (e = n.return) &&\n                                            e.call(n);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                                return r;\n                            }),\n                            (e.prototype.getPadding = function () {\n                                var t,\n                                    e,\n                                    r = this,\n                                    n = [0, 0, 0, 0];\n                                try {\n                                    for (\n                                        var o = u(Object.keys(this.notations)),\n                                            i = o.next();\n                                        !i.done;\n                                        i = o.next()\n                                    ) {\n                                        var s = i.value,\n                                            a = this.notations[s].border;\n                                        a && this.maximizeEntries(n, a(this));\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        i &&\n                                            !i.done &&\n                                            (e = o.return) &&\n                                            e.call(o);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                                return [0, 1, 2, 3].map(function (t) {\n                                    return r.TRBL[t] - n[t];\n                                });\n                            }),\n                            (e.prototype.maximizeEntries = function (t, e) {\n                                for (var r = 0; r < t.length; r++)\n                                    t[r] < e[r] && (t[r] = e[r]);\n                            }),\n                            (e.prototype.getOffset = function (t) {\n                                var e = l(this.TRBL, 4),\n                                    r = e[0],\n                                    n = e[1],\n                                    o = e[2],\n                                    i = e[3],\n                                    s = (\"X\" === t ? n - i : o - r) / 2;\n                                return Math.abs(s) > 0.001 ? s : 0;\n                            }),\n                            (e.prototype.getArgMod = function (t, e) {\n                                return [\n                                    Math.atan2(e, t),\n                                    Math.sqrt(t * t + e * e),\n                                ];\n                            }),\n                            (e.prototype.arrow = function (t, e, r, n, o) {\n                                return (\n                                    void 0 === n && (n = \"\"),\n                                    void 0 === o && (o = 0),\n                                    null\n                                );\n                            }),\n                            (e.prototype.arrowData = function () {\n                                var t = l([this.padding, this.thickness], 2),\n                                    e = t[0],\n                                    r =\n                                        t[1] *\n                                        (this.arrowhead.x +\n                                            Math.max(1, this.arrowhead.dx)),\n                                    n = this.childNodes[0].getBBox(),\n                                    o = n.h,\n                                    i = n.d,\n                                    s = n.w,\n                                    a = o + i,\n                                    c = Math.sqrt(a * a + s * s),\n                                    u = Math.max(e, (r * s) / c),\n                                    p = Math.max(e, (r * a) / c),\n                                    h = l(\n                                        this.getArgMod(s + 2 * u, a + 2 * p),\n                                        2\n                                    );\n                                return { a: h[0], W: h[1], x: u, y: p };\n                            }),\n                            (e.prototype.arrowAW = function () {\n                                var t = this.childNodes[0].getBBox(),\n                                    e = t.h,\n                                    r = t.d,\n                                    n = t.w,\n                                    o = l(this.TRBL, 4),\n                                    i = o[0],\n                                    s = o[1],\n                                    a = o[2],\n                                    c = o[3];\n                                return this.getArgMod(c + n + s, i + e + r + a);\n                            }),\n                            (e.prototype.createMsqrt = function (t) {\n                                var e = this.node.factory.create(\"msqrt\");\n                                e.inheritAttributesFrom(this.node),\n                                    (e.childNodes[0] = t.node);\n                                var r = this.wrap(e);\n                                return (r.parent = this), r;\n                            }),\n                            (e.prototype.sqrtTRBL = function () {\n                                var t = this.msqrt.getBBox(),\n                                    e = this.msqrt.childNodes[0].getBBox();\n                                return [t.h - e.h, 0, t.d - e.d, t.w - e.w];\n                            }),\n                            e\n                        );\n                    })(t);\n                };\n            },\n            7555: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    s =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMfencedMixin = void 0),\n                    (e.CommonMfencedMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, i([], o(e), !1)) || this;\n                                return (\n                                    (n.mrow = null),\n                                    n.createMrow(),\n                                    n.addMrowChildren(),\n                                    n\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.createMrow = function () {\n                                    var t =\n                                        this.node.factory.create(\n                                            \"inferredMrow\"\n                                        );\n                                    t.inheritAttributesFrom(this.node),\n                                        (this.mrow = this.wrap(t)),\n                                        (this.mrow.parent = this);\n                                }),\n                                (e.prototype.addMrowChildren = function () {\n                                    var t,\n                                        e,\n                                        r = this.node,\n                                        n = this.mrow;\n                                    this.addMo(r.open),\n                                        this.childNodes.length &&\n                                            n.childNodes.push(\n                                                this.childNodes[0]\n                                            );\n                                    var o = 0;\n                                    try {\n                                        for (\n                                            var i = s(this.childNodes.slice(1)),\n                                                a = i.next();\n                                            !a.done;\n                                            a = i.next()\n                                        ) {\n                                            var l = a.value;\n                                            this.addMo(r.separators[o++]),\n                                                n.childNodes.push(l);\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            a &&\n                                                !a.done &&\n                                                (e = i.return) &&\n                                                e.call(i);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                    this.addMo(r.close), n.stretchChildren();\n                                }),\n                                (e.prototype.addMo = function (t) {\n                                    if (t) {\n                                        var e = this.wrap(t);\n                                        this.mrow.childNodes.push(e),\n                                            (e.parent = this.mrow);\n                                    }\n                                }),\n                                (e.prototype.computeBBox = function (t, e) {\n                                    void 0 === e && (e = !1),\n                                        t.updateFrom(this.mrow.getOuterBBox()),\n                                        this.setChildPWidths(e);\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            2688: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMfracMixin = void 0),\n                    (e.CommonMfracMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, i([], o(e), !1)) || this;\n                                if (\n                                    ((n.bevel = null),\n                                    (n.pad = n.node.getProperty(\"withDelims\")\n                                        ? 0\n                                        : n.font.params.nulldelimiterspace),\n                                    n.node.attributes.get(\"bevelled\"))\n                                ) {\n                                    var s = n.getBevelData(n.isDisplay()).H,\n                                        a = (n.bevel = n.createMo(\"/\"));\n                                    a.node.attributes.set(\"symmetric\", !0),\n                                        a.canStretch(1),\n                                        a.getStretchedVariant([s], !0);\n                                }\n                                return n;\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.computeBBox = function (t, e) {\n                                    void 0 === e && (e = !1), t.empty();\n                                    var r = this.node.attributes.getList(\n                                            \"linethickness\",\n                                            \"bevelled\"\n                                        ),\n                                        n = r.linethickness,\n                                        o = r.bevelled,\n                                        i = this.isDisplay(),\n                                        s = null;\n                                    if (o) this.getBevelledBBox(t, i);\n                                    else {\n                                        var a = this.length2em(String(n), 0.06);\n                                        (s = -2 * this.pad),\n                                            0 === a\n                                                ? this.getAtopBBox(t, i)\n                                                : (this.getFractionBBox(\n                                                      t,\n                                                      i,\n                                                      a\n                                                  ),\n                                                  (s -= 0.2)),\n                                            (s += t.w);\n                                    }\n                                    t.clean(), this.setChildPWidths(e, s);\n                                }),\n                                (e.prototype.getFractionBBox = function (\n                                    t,\n                                    e,\n                                    r\n                                ) {\n                                    var n = this.childNodes[0].getOuterBBox(),\n                                        o = this.childNodes[1].getOuterBBox(),\n                                        i = this.font.params.axis_height,\n                                        s = this.getTUV(e, r),\n                                        a = s.T,\n                                        l = s.u,\n                                        c = s.v;\n                                    t.combine(\n                                        n,\n                                        0,\n                                        i + a + Math.max(n.d * n.rscale, l)\n                                    ),\n                                        t.combine(\n                                            o,\n                                            0,\n                                            i - a - Math.max(o.h * o.rscale, c)\n                                        ),\n                                        (t.w += 2 * this.pad + 0.2);\n                                }),\n                                (e.prototype.getTUV = function (t, e) {\n                                    var r = this.font.params,\n                                        n = r.axis_height,\n                                        o = (t ? 3.5 : 1.5) * e;\n                                    return {\n                                        T: (t ? 3.5 : 1.5) * e,\n                                        u: (t ? r.num1 : r.num2) - n - o,\n                                        v: (t ? r.denom1 : r.denom2) + n - o,\n                                    };\n                                }),\n                                (e.prototype.getAtopBBox = function (t, e) {\n                                    var r = this.getUVQ(e),\n                                        n = r.u,\n                                        o = r.v,\n                                        i = r.nbox,\n                                        s = r.dbox;\n                                    t.combine(i, 0, n),\n                                        t.combine(s, 0, -o),\n                                        (t.w += 2 * this.pad);\n                                }),\n                                (e.prototype.getUVQ = function (t) {\n                                    var e = this.childNodes[0].getOuterBBox(),\n                                        r = this.childNodes[1].getOuterBBox(),\n                                        n = this.font.params,\n                                        i = o(\n                                            t\n                                                ? [n.num1, n.denom1]\n                                                : [n.num3, n.denom2],\n                                            2\n                                        ),\n                                        s = i[0],\n                                        a = i[1],\n                                        l = (t ? 7 : 3) * n.rule_thickness,\n                                        c =\n                                            s -\n                                            e.d * e.scale -\n                                            (r.h * r.scale - a);\n                                    return (\n                                        c < l &&\n                                            ((s += (l - c) / 2),\n                                            (a += (l - c) / 2),\n                                            (c = l)),\n                                        { u: s, v: a, q: c, nbox: e, dbox: r }\n                                    );\n                                }),\n                                (e.prototype.getBevelledBBox = function (t, e) {\n                                    var r = this.getBevelData(e),\n                                        n = r.u,\n                                        o = r.v,\n                                        i = r.delta,\n                                        s = r.nbox,\n                                        a = r.dbox,\n                                        l = this.bevel.getOuterBBox();\n                                    t.combine(s, 0, n),\n                                        t.combine(l, t.w - i / 2, 0),\n                                        t.combine(a, t.w - i / 2, o);\n                                }),\n                                (e.prototype.getBevelData = function (t) {\n                                    var e = this.childNodes[0].getOuterBBox(),\n                                        r = this.childNodes[1].getOuterBBox(),\n                                        n = t ? 0.4 : 0.15,\n                                        o =\n                                            Math.max(\n                                                e.scale * (e.h + e.d),\n                                                r.scale * (r.h + r.d)\n                                            ) +\n                                            2 * n,\n                                        i = this.font.params.axis_height;\n                                    return {\n                                        H: o,\n                                        delta: n,\n                                        u: (e.scale * (e.d - e.h)) / 2 + i + n,\n                                        v: (r.scale * (r.d - r.h)) / 2 + i - n,\n                                        nbox: e,\n                                        dbox: r,\n                                    };\n                                }),\n                                (e.prototype.canStretch = function (t) {\n                                    return !1;\n                                }),\n                                (e.prototype.isDisplay = function () {\n                                    var t = this.node.attributes.getList(\n                                            \"displaystyle\",\n                                            \"scriptlevel\"\n                                        ),\n                                        e = t.displaystyle,\n                                        r = t.scriptlevel;\n                                    return e && 0 === r;\n                                }),\n                                (e.prototype.getWrapWidth = function (t) {\n                                    var e = this.node.attributes;\n                                    return e.get(\"bevelled\")\n                                        ? this.childNodes[t].getOuterBBox().w\n                                        : this.getBBox().w -\n                                              (this.length2em(\n                                                  e.get(\"linethickness\")\n                                              )\n                                                  ? 0.2\n                                                  : 0) -\n                                              2 * this.pad;\n                                }),\n                                (e.prototype.getChildAlign = function (t) {\n                                    var e = this.node.attributes;\n                                    return e.get(\"bevelled\")\n                                        ? \"left\"\n                                        : e.get([\"numalign\", \"denomalign\"][t]);\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            5636: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMglyphMixin = void 0),\n                    (e.CommonMglyphMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, i([], o(e), !1)) || this;\n                                return n.getParameters(), n;\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.getParameters = function () {\n                                    var t = this.node.attributes.getList(\n                                            \"width\",\n                                            \"height\",\n                                            \"valign\",\n                                            \"src\",\n                                            \"index\"\n                                        ),\n                                        e = t.width,\n                                        r = t.height,\n                                        n = t.valign,\n                                        o = t.src,\n                                        i = t.index;\n                                    if (o)\n                                        (this.width =\n                                            \"auto\" === e\n                                                ? 1\n                                                : this.length2em(e)),\n                                            (this.height =\n                                                \"auto\" === r\n                                                    ? 1\n                                                    : this.length2em(r)),\n                                            (this.valign = this.length2em(\n                                                n || \"0\"\n                                            ));\n                                    else {\n                                        var s = String.fromCodePoint(\n                                                parseInt(i)\n                                            ),\n                                            a = this.node.factory;\n                                        (this.charWrapper = this.wrap(\n                                            a.create(\"text\").setText(s)\n                                        )),\n                                            (this.charWrapper.parent = this);\n                                    }\n                                }),\n                                (e.prototype.computeBBox = function (t, e) {\n                                    void 0 === e && (e = !1),\n                                        this.charWrapper\n                                            ? t.updateFrom(\n                                                  this.charWrapper.getBBox()\n                                              )\n                                            : ((t.w = this.width),\n                                              (t.h = this.height + this.valign),\n                                              (t.d = -this.valign));\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            5723: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMiMixin = void 0),\n                    (e.CommonMiMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.computeBBox = function (e, r) {\n                                    void 0 === r && (r = !1),\n                                        t.prototype.computeBBox.call(this, e),\n                                        this.copySkewIC(e);\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            8009: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    a =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMmultiscriptsMixin =\n                        e.ScriptNames =\n                        e.NextScript =\n                            void 0);\n                var l = r(6469);\n                (e.NextScript = {\n                    base: \"subList\",\n                    subList: \"supList\",\n                    supList: \"subList\",\n                    psubList: \"psupList\",\n                    psupList: \"psubList\",\n                }),\n                    (e.ScriptNames = [\"sup\", \"sup\", \"psup\", \"psub\"]),\n                    (e.CommonMmultiscriptsMixin = function (t) {\n                        return (function (t) {\n                            function r() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, s([], i(e), !1)) || this;\n                                return (\n                                    (n.scriptData = null),\n                                    (n.firstPrescript = 0),\n                                    n.getScriptData(),\n                                    n\n                                );\n                            }\n                            return (\n                                o(r, t),\n                                (r.prototype.combinePrePost = function (t, e) {\n                                    var r = new l.BBox(t);\n                                    return r.combine(e, 0, 0), r;\n                                }),\n                                (r.prototype.computeBBox = function (t, e) {\n                                    void 0 === e && (e = !1);\n                                    var r = this.font.params.scriptspace,\n                                        n = this.scriptData,\n                                        o = this.combinePrePost(n.sub, n.psub),\n                                        s = this.combinePrePost(n.sup, n.psup),\n                                        a = i(this.getUVQ(o, s), 2),\n                                        l = a[0],\n                                        c = a[1];\n                                    if (\n                                        (t.empty(),\n                                        n.numPrescripts &&\n                                            (t.combine(n.psup, r, l),\n                                            t.combine(n.psub, r, c)),\n                                        t.append(n.base),\n                                        n.numScripts)\n                                    ) {\n                                        var u = t.w;\n                                        t.combine(n.sup, u, l),\n                                            t.combine(n.sub, u, c),\n                                            (t.w += r);\n                                    }\n                                    t.clean(), this.setChildPWidths(e);\n                                }),\n                                (r.prototype.getScriptData = function () {\n                                    var t = (this.scriptData = {\n                                            base: null,\n                                            sub: l.BBox.empty(),\n                                            sup: l.BBox.empty(),\n                                            psub: l.BBox.empty(),\n                                            psup: l.BBox.empty(),\n                                            numPrescripts: 0,\n                                            numScripts: 0,\n                                        }),\n                                        e = this.getScriptBBoxLists();\n                                    this.combineBBoxLists(\n                                        t.sub,\n                                        t.sup,\n                                        e.subList,\n                                        e.supList\n                                    ),\n                                        this.combineBBoxLists(\n                                            t.psub,\n                                            t.psup,\n                                            e.psubList,\n                                            e.psupList\n                                        ),\n                                        (t.base = e.base[0]),\n                                        (t.numPrescripts = e.psubList.length),\n                                        (t.numScripts = e.subList.length);\n                                }),\n                                (r.prototype.getScriptBBoxLists = function () {\n                                    var t,\n                                        r,\n                                        n = {\n                                            base: [],\n                                            subList: [],\n                                            supList: [],\n                                            psubList: [],\n                                            psupList: [],\n                                        },\n                                        o = \"base\";\n                                    try {\n                                        for (\n                                            var i = a(this.childNodes),\n                                                s = i.next();\n                                            !s.done;\n                                            s = i.next()\n                                        ) {\n                                            var l = s.value;\n                                            l.node.isKind(\"mprescripts\")\n                                                ? (o = \"psubList\")\n                                                : (n[o].push(l.getOuterBBox()),\n                                                  (o = e.NextScript[o]));\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            s &&\n                                                !s.done &&\n                                                (r = i.return) &&\n                                                r.call(i);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                    return (\n                                        (this.firstPrescript =\n                                            n.subList.length +\n                                            n.supList.length +\n                                            2),\n                                        this.padLists(n.subList, n.supList),\n                                        this.padLists(n.psubList, n.psupList),\n                                        n\n                                    );\n                                }),\n                                (r.prototype.padLists = function (t, e) {\n                                    t.length > e.length &&\n                                        e.push(l.BBox.empty());\n                                }),\n                                (r.prototype.combineBBoxLists = function (\n                                    t,\n                                    e,\n                                    r,\n                                    n\n                                ) {\n                                    for (var o = 0; o < r.length; o++) {\n                                        var s = i(this.getScaledWHD(r[o]), 3),\n                                            a = s[0],\n                                            l = s[1],\n                                            c = s[2],\n                                            u = i(this.getScaledWHD(n[o]), 3),\n                                            p = u[0],\n                                            h = u[1],\n                                            f = u[2],\n                                            d = Math.max(a, p);\n                                        (t.w += d),\n                                            (e.w += d),\n                                            l > t.h && (t.h = l),\n                                            c > t.d && (t.d = c),\n                                            h > e.h && (e.h = h),\n                                            f > e.d && (e.d = f);\n                                    }\n                                }),\n                                (r.prototype.getScaledWHD = function (t) {\n                                    var e = t.w,\n                                        r = t.h,\n                                        n = t.d,\n                                        o = t.rscale;\n                                    return [e * o, r * o, n * o];\n                                }),\n                                (r.prototype.getUVQ = function (e, r) {\n                                    var n;\n                                    if (!this.UVQ) {\n                                        var o = i([0, 0, 0], 3),\n                                            s = o[0],\n                                            a = o[1],\n                                            l = o[2];\n                                        0 === e.h && 0 === e.d\n                                            ? (s = this.getU())\n                                            : 0 === r.h && 0 === r.d\n                                              ? (s = -this.getV())\n                                              : ((s = (n = i(\n                                                    t.prototype.getUVQ.call(\n                                                        this,\n                                                        e,\n                                                        r\n                                                    ),\n                                                    3\n                                                ))[0]),\n                                                (a = n[1]),\n                                                (l = n[2])),\n                                            (this.UVQ = [s, a, l]);\n                                    }\n                                    return this.UVQ;\n                                }),\n                                r\n                            );\n                        })(t);\n                    });\n            },\n            5023: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMnMixin = void 0),\n                    (e.CommonMnMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.remapChars = function (t) {\n                                    if (t.length) {\n                                        var e = this.font.getRemappedChar(\n                                            \"mn\",\n                                            t[0]\n                                        );\n                                        if (e) {\n                                            var r = this.unicodeChars(\n                                                e,\n                                                this.variant\n                                            );\n                                            1 === r.length\n                                                ? (t[0] = r[0])\n                                                : (t = r.concat(t.slice(1)));\n                                        }\n                                    }\n                                    return t;\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            7096: function (t, e, r) {\n                var n,\n                    o,\n                    i =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    s =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (s =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                s.apply(this, arguments)\n                            );\n                        },\n                    a =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    l =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    c =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMoMixin = e.DirectionVH = void 0);\n                var u = r(6469),\n                    p = r(505),\n                    h = r(5884);\n                (e.DirectionVH = (((o = {})[1] = \"v\"), (o[2] = \"h\"), o)),\n                    (e.CommonMoMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, l([], a(e), !1)) || this;\n                                return (\n                                    (n.size = null),\n                                    (n.isAccent = n.node.isAccent),\n                                    n\n                                );\n                            }\n                            return (\n                                i(e, t),\n                                (e.prototype.computeBBox = function (t, e) {\n                                    if (\n                                        (void 0 === e && (e = !1),\n                                        this.protoBBox(t),\n                                        this.node.attributes.get(\"symmetric\") &&\n                                            2 !== this.stretch.dir)\n                                    ) {\n                                        var r = this.getCenterOffset(t);\n                                        (t.h += r), (t.d -= r);\n                                    }\n                                    this.node.getProperty(\"mathaccent\") &&\n                                        (0 === this.stretch.dir ||\n                                            this.size >= 0) &&\n                                        (t.w = 0);\n                                }),\n                                (e.prototype.protoBBox = function (e) {\n                                    var r = 0 !== this.stretch.dir;\n                                    r &&\n                                        null === this.size &&\n                                        this.getStretchedVariant([0]),\n                                        (r && this.size < 0) ||\n                                            (t.prototype.computeBBox.call(\n                                                this,\n                                                e\n                                            ),\n                                            this.copySkewIC(e));\n                                }),\n                                (e.prototype.getAccentOffset = function () {\n                                    var t = u.BBox.empty();\n                                    return this.protoBBox(t), -t.w / 2;\n                                }),\n                                (e.prototype.getCenterOffset = function (e) {\n                                    return (\n                                        void 0 === e && (e = null),\n                                        e ||\n                                            ((e = u.BBox.empty()),\n                                            t.prototype.computeBBox.call(\n                                                this,\n                                                e\n                                            )),\n                                        (e.h + e.d) / 2 +\n                                            this.font.params.axis_height -\n                                            e.h\n                                    );\n                                }),\n                                (e.prototype.getVariant = function () {\n                                    this.node.attributes.get(\"largeop\")\n                                        ? (this.variant =\n                                              this.node.attributes.get(\n                                                  \"displaystyle\"\n                                              )\n                                                  ? \"-largeop\"\n                                                  : \"-smallop\")\n                                        : this.node.attributes.getExplicit(\n                                                \"mathvariant\"\n                                            ) ||\n                                            !1 !==\n                                                this.node.getProperty(\n                                                    \"pseudoscript\"\n                                                )\n                                          ? t.prototype.getVariant.call(this)\n                                          : (this.variant = \"-tex-variant\");\n                                }),\n                                (e.prototype.canStretch = function (t) {\n                                    if (0 !== this.stretch.dir)\n                                        return this.stretch.dir === t;\n                                    if (!this.node.attributes.get(\"stretchy\"))\n                                        return !1;\n                                    var e = this.getText();\n                                    if (1 !== Array.from(e).length) return !1;\n                                    var r = this.font.getDelimiter(\n                                        e.codePointAt(0)\n                                    );\n                                    return (\n                                        (this.stretch =\n                                            r && r.dir === t ? r : h.NOSTRETCH),\n                                        0 !== this.stretch.dir\n                                    );\n                                }),\n                                (e.prototype.getStretchedVariant = function (\n                                    t,\n                                    e\n                                ) {\n                                    var r, n;\n                                    if (\n                                        (void 0 === e && (e = !1),\n                                        0 !== this.stretch.dir)\n                                    ) {\n                                        var o = this.getWH(t),\n                                            i = this.getSize(\"minsize\", 0),\n                                            a = this.getSize(\"maxsize\", 1 / 0),\n                                            l =\n                                                this.node.getProperty(\n                                                    \"mathaccent\"\n                                                );\n                                        o = Math.max(i, Math.min(a, o));\n                                        var u =\n                                                this.font.params\n                                                    .delimiterfactor / 1e3,\n                                            p =\n                                                this.font.params\n                                                    .delimitershortfall,\n                                            h =\n                                                i || e\n                                                    ? o\n                                                    : l\n                                                      ? Math.min(o / u, o + p)\n                                                      : Math.max(o * u, o - p),\n                                            f = this.stretch,\n                                            d =\n                                                f.c ||\n                                                this.getText().codePointAt(0),\n                                            m = 0;\n                                        if (f.sizes)\n                                            try {\n                                                for (\n                                                    var y = c(f.sizes),\n                                                        g = y.next();\n                                                    !g.done;\n                                                    g = y.next()\n                                                ) {\n                                                    if (g.value >= h)\n                                                        return (\n                                                            l && m && m--,\n                                                            (this.variant =\n                                                                this.font.getSizeVariant(\n                                                                    d,\n                                                                    m\n                                                                )),\n                                                            (this.size = m),\n                                                            void (\n                                                                f.schar &&\n                                                                f.schar[m] &&\n                                                                (this.stretch =\n                                                                    s(\n                                                                        s(\n                                                                            {},\n                                                                            this\n                                                                                .stretch\n                                                                        ),\n                                                                        {\n                                                                            c: f\n                                                                                .schar[\n                                                                                m\n                                                                            ],\n                                                                        }\n                                                                    ))\n                                                            )\n                                                        );\n                                                    m++;\n                                                }\n                                            } catch (t) {\n                                                r = { error: t };\n                                            } finally {\n                                                try {\n                                                    g &&\n                                                        !g.done &&\n                                                        (n = y.return) &&\n                                                        n.call(y);\n                                                } finally {\n                                                    if (r) throw r.error;\n                                                }\n                                            }\n                                        f.stretch\n                                            ? ((this.size = -1),\n                                              this.invalidateBBox(),\n                                              this.getStretchBBox(\n                                                  t,\n                                                  this.checkExtendedHeight(\n                                                      o,\n                                                      f\n                                                  ),\n                                                  f\n                                              ))\n                                            : ((this.variant =\n                                                  this.font.getSizeVariant(\n                                                      d,\n                                                      m - 1\n                                                  )),\n                                              (this.size = m - 1));\n                                    }\n                                }),\n                                (e.prototype.getSize = function (t, e) {\n                                    var r = this.node.attributes;\n                                    return (\n                                        r.isSet(t) &&\n                                            (e = this.length2em(\n                                                r.get(t),\n                                                1,\n                                                1\n                                            )),\n                                        e\n                                    );\n                                }),\n                                (e.prototype.getWH = function (t) {\n                                    if (0 === t.length) return 0;\n                                    if (1 === t.length) return t[0];\n                                    var e = a(t, 2),\n                                        r = e[0],\n                                        n = e[1],\n                                        o = this.font.params.axis_height;\n                                    return this.node.attributes.get(\"symmetric\")\n                                        ? 2 * Math.max(r - o, n + o)\n                                        : r + n;\n                                }),\n                                (e.prototype.getStretchBBox = function (\n                                    t,\n                                    e,\n                                    r\n                                ) {\n                                    var n;\n                                    r.hasOwnProperty(\"min\") &&\n                                        r.min > e &&\n                                        (e = r.min);\n                                    var o = a(r.HDW, 3),\n                                        i = o[0],\n                                        s = o[1],\n                                        l = o[2];\n                                    1 === this.stretch.dir\n                                        ? ((i = (n = a(\n                                              this.getBaseline(t, e, r),\n                                              2\n                                          ))[0]),\n                                          (s = n[1]))\n                                        : (l = e),\n                                        (this.bbox.h = i),\n                                        (this.bbox.d = s),\n                                        (this.bbox.w = l);\n                                }),\n                                (e.prototype.getBaseline = function (t, e, r) {\n                                    var n = 2 === t.length && t[0] + t[1] === e,\n                                        o =\n                                            this.node.attributes.get(\n                                                \"symmetric\"\n                                            ),\n                                        i = a(n ? t : [e, 0], 2),\n                                        s = i[0],\n                                        l = i[1],\n                                        c = a([s + l, 0], 2),\n                                        u = c[0],\n                                        p = c[1];\n                                    if (o) {\n                                        var h = this.font.params.axis_height;\n                                        n && (u = 2 * Math.max(s - h, l + h)),\n                                            (p = u / 2 - h);\n                                    } else if (n) p = l;\n                                    else {\n                                        var f = a(r.HDW || [0.75, 0.25], 2),\n                                            d = f[0],\n                                            m = f[1];\n                                        p = m * (u / (d + m));\n                                    }\n                                    return [u - p, p];\n                                }),\n                                (e.prototype.checkExtendedHeight = function (\n                                    t,\n                                    e\n                                ) {\n                                    if (e.fullExt) {\n                                        var r = a(e.fullExt, 2),\n                                            n = r[0],\n                                            o = r[1];\n                                        t =\n                                            o +\n                                            Math.ceil(Math.max(0, t - o) / n) *\n                                                n;\n                                    }\n                                    return t;\n                                }),\n                                (e.prototype.remapChars = function (t) {\n                                    var e = this.node.getProperty(\"primes\");\n                                    if (e) return (0, p.unicodeChars)(e);\n                                    if (1 === t.length) {\n                                        var r = this.node.coreParent().parent,\n                                            n =\n                                                this.isAccent &&\n                                                !r.isKind(\"mrow\")\n                                                    ? \"accent\"\n                                                    : \"mo\",\n                                            o = this.font.getRemappedChar(\n                                                n,\n                                                t[0]\n                                            );\n                                        o &&\n                                            (t = this.unicodeChars(\n                                                o,\n                                                this.variant\n                                            ));\n                                    }\n                                    return t;\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            6898: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMpaddedMixin = void 0),\n                    (e.CommonMpaddedMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.getDimens = function () {\n                                    var t = this.node.attributes.getList(\n                                            \"width\",\n                                            \"height\",\n                                            \"depth\",\n                                            \"lspace\",\n                                            \"voffset\"\n                                        ),\n                                        e = this.childNodes[0].getBBox(),\n                                        r = e.w,\n                                        n = e.h,\n                                        o = e.d,\n                                        i = r,\n                                        s = n,\n                                        a = o,\n                                        l = 0,\n                                        c = 0,\n                                        u = 0;\n                                    \"\" !== t.width &&\n                                        (r = this.dimen(t.width, e, \"w\", 0)),\n                                        \"\" !== t.height &&\n                                            (n = this.dimen(\n                                                t.height,\n                                                e,\n                                                \"h\",\n                                                0\n                                            )),\n                                        \"\" !== t.depth &&\n                                            (o = this.dimen(\n                                                t.depth,\n                                                e,\n                                                \"d\",\n                                                0\n                                            )),\n                                        \"\" !== t.voffset &&\n                                            (c = this.dimen(t.voffset, e)),\n                                        \"\" !== t.lspace &&\n                                            (l = this.dimen(t.lspace, e));\n                                    var p =\n                                        this.node.attributes.get(\"data-align\");\n                                    return (\n                                        p && (u = this.getAlignX(r, e, p)),\n                                        [s, a, i, n - s, o - a, r - i, l, c, u]\n                                    );\n                                }),\n                                (e.prototype.dimen = function (t, e, r, n) {\n                                    void 0 === r && (r = \"\"),\n                                        void 0 === n && (n = null);\n                                    var o = (t = String(t)).match(\n                                            /width|height|depth/\n                                        ),\n                                        i = o\n                                            ? e[o[0].charAt(0)]\n                                            : r\n                                              ? e[r]\n                                              : 0,\n                                        s = this.length2em(t, i) || 0;\n                                    return (\n                                        t.match(/^[-+]/) && r && (s += i),\n                                        null != n && (s = Math.max(n, s)),\n                                        s\n                                    );\n                                }),\n                                (e.prototype.computeBBox = function (t, e) {\n                                    void 0 === e && (e = !1);\n                                    var r = o(this.getDimens(), 6),\n                                        n = r[0],\n                                        i = r[1],\n                                        s = r[2],\n                                        a = r[3],\n                                        l = r[4],\n                                        c = r[5];\n                                    (t.w = s + c),\n                                        (t.h = n + a),\n                                        (t.d = i + l),\n                                        this.setChildPWidths(e, t.w);\n                                }),\n                                (e.prototype.getWrapWidth = function (t) {\n                                    return this.getBBox().w;\n                                }),\n                                (e.prototype.getChildAlign = function (t) {\n                                    return (\n                                        this.node.attributes.get(\n                                            \"data-align\"\n                                        ) || \"left\"\n                                    );\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            6991: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMrootMixin = void 0),\n                    (e.CommonMrootMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                Object.defineProperty(e.prototype, \"surd\", {\n                                    get: function () {\n                                        return 2;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }),\n                                Object.defineProperty(e.prototype, \"root\", {\n                                    get: function () {\n                                        return 1;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }),\n                                (e.prototype.combineRootBBox = function (\n                                    t,\n                                    e,\n                                    r\n                                ) {\n                                    var n =\n                                            this.childNodes[\n                                                this.root\n                                            ].getOuterBBox(),\n                                        o = this.getRootDimens(e, r)[1];\n                                    t.combine(n, 0, o);\n                                }),\n                                (e.prototype.getRootDimens = function (t, e) {\n                                    var r = this.childNodes[this.surd],\n                                        n =\n                                            this.childNodes[\n                                                this.root\n                                            ].getOuterBBox(),\n                                        o = (r.size < 0 ? 0.5 : 0.6) * t.w,\n                                        i = n.w,\n                                        s = n.rscale,\n                                        a = Math.max(i, o / s),\n                                        l = Math.max(0, a - i);\n                                    return [\n                                        a * s - o,\n                                        this.rootHeight(n, t, r.size, e),\n                                        l,\n                                    ];\n                                }),\n                                (e.prototype.rootHeight = function (\n                                    t,\n                                    e,\n                                    r,\n                                    n\n                                ) {\n                                    var o = e.h + e.d;\n                                    return (\n                                        (r < 0 ? 1.9 : 0.55 * o) -\n                                        (o - n) +\n                                        Math.max(0, t.d * t.rscale)\n                                    );\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            8411: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    a =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonInferredMrowMixin = e.CommonMrowMixin = void 0);\n                var l = r(6469);\n                (e.CommonMrowMixin = function (t) {\n                    return (function (t) {\n                        function e() {\n                            for (\n                                var e, r, n = [], o = 0;\n                                o < arguments.length;\n                                o++\n                            )\n                                n[o] = arguments[o];\n                            var c = t.apply(this, s([], i(n), !1)) || this;\n                            c.stretchChildren();\n                            try {\n                                for (\n                                    var u = a(c.childNodes), p = u.next();\n                                    !p.done;\n                                    p = u.next()\n                                ) {\n                                    var h = p.value;\n                                    if (h.bbox.pwidth) {\n                                        c.bbox.pwidth = l.BBox.fullWidth;\n                                        break;\n                                    }\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    p && !p.done && (r = u.return) && r.call(u);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            return c;\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"fixesPWidth\", {\n                                get: function () {\n                                    return !1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.stretchChildren = function () {\n                                var t,\n                                    e,\n                                    r,\n                                    n,\n                                    o,\n                                    i,\n                                    s = [];\n                                try {\n                                    for (\n                                        var l = a(this.childNodes),\n                                            c = l.next();\n                                        !c.done;\n                                        c = l.next()\n                                    ) {\n                                        (x = c.value).canStretch(1) &&\n                                            s.push(x);\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        c &&\n                                            !c.done &&\n                                            (e = l.return) &&\n                                            e.call(l);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                                var u = s.length,\n                                    p = this.childNodes.length;\n                                if (u && p > 1) {\n                                    var h = 0,\n                                        f = 0,\n                                        d = u > 1 && u === p;\n                                    try {\n                                        for (\n                                            var m = a(this.childNodes),\n                                                y = m.next();\n                                            !y.done;\n                                            y = m.next()\n                                        ) {\n                                            var g =\n                                                0 === (x = y.value).stretch.dir;\n                                            if (d || g) {\n                                                var b = x.getOuterBBox(g),\n                                                    v = b.h,\n                                                    _ = b.d,\n                                                    S = b.rscale;\n                                                (v *= S) > h && (h = v),\n                                                    (_ *= S) > f && (f = _);\n                                            }\n                                        }\n                                    } catch (t) {\n                                        r = { error: t };\n                                    } finally {\n                                        try {\n                                            y &&\n                                                !y.done &&\n                                                (n = m.return) &&\n                                                n.call(m);\n                                        } finally {\n                                            if (r) throw r.error;\n                                        }\n                                    }\n                                    try {\n                                        for (\n                                            var M = a(s), O = M.next();\n                                            !O.done;\n                                            O = M.next()\n                                        ) {\n                                            var x;\n                                            (x = O.value)\n                                                .coreMO()\n                                                .getStretchedVariant([h, f]);\n                                        }\n                                    } catch (t) {\n                                        o = { error: t };\n                                    } finally {\n                                        try {\n                                            O &&\n                                                !O.done &&\n                                                (i = M.return) &&\n                                                i.call(M);\n                                        } finally {\n                                            if (o) throw o.error;\n                                        }\n                                    }\n                                }\n                            }),\n                            e\n                        );\n                    })(t);\n                }),\n                    (e.CommonInferredMrowMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                o(e, t),\n                                (e.prototype.getScale = function () {\n                                    (this.bbox.scale = this.parent.bbox.scale),\n                                        (this.bbox.rscale = 1);\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            4126: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMsMixin = void 0),\n                    (e.CommonMsMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, i([], o(e), !1)) || this,\n                                    s = n.node.attributes,\n                                    a = s.getList(\"lquote\", \"rquote\");\n                                return (\n                                    \"monospace\" !== n.variant &&\n                                        (s.isSet(\"lquote\") ||\n                                            '\"' !== a.lquote ||\n                                            (a.lquote = \"\\u201c\"),\n                                        s.isSet(\"rquote\") ||\n                                            '\"' !== a.rquote ||\n                                            (a.rquote = \"\\u201d\")),\n                                    n.childNodes.unshift(\n                                        n.createText(a.lquote)\n                                    ),\n                                    n.childNodes.push(n.createText(a.rquote)),\n                                    n\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.createText = function (t) {\n                                    var e = this.wrap(this.mmlText(t));\n                                    return (e.parent = this), e;\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            258: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMspaceMixin = void 0),\n                    (e.CommonMspaceMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.computeBBox = function (t, e) {\n                                    void 0 === e && (e = !1);\n                                    var r = this.node.attributes;\n                                    (t.w = this.length2em(r.get(\"width\"), 0)),\n                                        (t.h = this.length2em(\n                                            r.get(\"height\"),\n                                            0\n                                        )),\n                                        (t.d = this.length2em(\n                                            r.get(\"depth\"),\n                                            0\n                                        ));\n                                }),\n                                (e.prototype.handleVariant = function () {}),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            4093: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMsqrtMixin = void 0);\n                var a = r(6469);\n                e.CommonMsqrtMixin = function (t) {\n                    return (function (t) {\n                        function e() {\n                            for (var e = [], r = 0; r < arguments.length; r++)\n                                e[r] = arguments[r];\n                            var n = t.apply(this, s([], i(e), !1)) || this,\n                                o = n.createMo(\"\\u221a\");\n                            o.canStretch(1);\n                            var a = n.childNodes[n.base].getOuterBBox(),\n                                l = a.h,\n                                c = a.d,\n                                u = n.font.params.rule_thickness,\n                                p = n.node.attributes.get(\"displaystyle\")\n                                    ? n.font.params.x_height\n                                    : u;\n                            return (\n                                (n.surdH = l + c + 2 * u + p / 4),\n                                o.getStretchedVariant([n.surdH - c, c], !0),\n                                n\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"base\", {\n                                get: function () {\n                                    return 0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"surd\", {\n                                get: function () {\n                                    return 1;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"root\", {\n                                get: function () {\n                                    return null;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.createMo = function (e) {\n                                var r = t.prototype.createMo.call(this, e);\n                                return this.childNodes.push(r), r;\n                            }),\n                            (e.prototype.computeBBox = function (t, e) {\n                                void 0 === e && (e = !1);\n                                var r = this.childNodes[this.surd].getBBox(),\n                                    n = new a.BBox(\n                                        this.childNodes[\n                                            this.base\n                                        ].getOuterBBox()\n                                    ),\n                                    o = this.getPQ(r)[1],\n                                    s = this.font.params.rule_thickness,\n                                    l = n.h + o + s,\n                                    c = i(this.getRootDimens(r, l), 1)[0];\n                                (t.h = l + s),\n                                    this.combineRootBBox(t, r, l),\n                                    t.combine(r, c, l - r.h),\n                                    t.combine(n, c + r.w, 0),\n                                    t.clean(),\n                                    this.setChildPWidths(e);\n                            }),\n                            (e.prototype.combineRootBBox = function (\n                                t,\n                                e,\n                                r\n                            ) {}),\n                            (e.prototype.getPQ = function (t) {\n                                var e = this.font.params.rule_thickness,\n                                    r = this.node.attributes.get(\"displaystyle\")\n                                        ? this.font.params.x_height\n                                        : e;\n                                return [\n                                    r,\n                                    t.h + t.d > this.surdH\n                                        ? (t.h +\n                                              t.d -\n                                              (this.surdH - 2 * e - r / 2)) /\n                                          2\n                                        : e + r / 4,\n                                ];\n                            }),\n                            (e.prototype.getRootDimens = function (t, e) {\n                                return [0, 0, 0, 0];\n                            }),\n                            e\n                        );\n                    })(t);\n                };\n            },\n            905: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMsubsupMixin =\n                        e.CommonMsupMixin =\n                        e.CommonMsubMixin =\n                            void 0),\n                    (e.CommonMsubMixin = function (t) {\n                        var e;\n                        return (\n                            (e = (function (t) {\n                                function e() {\n                                    return (\n                                        (null !== t &&\n                                            t.apply(this, arguments)) ||\n                                        this\n                                    );\n                                }\n                                return (\n                                    n(e, t),\n                                    Object.defineProperty(\n                                        e.prototype,\n                                        \"scriptChild\",\n                                        {\n                                            get: function () {\n                                                return this.childNodes[\n                                                    this.node.sub\n                                                ];\n                                            },\n                                            enumerable: !1,\n                                            configurable: !0,\n                                        }\n                                    ),\n                                    (e.prototype.getOffset = function () {\n                                        return [0, -this.getV()];\n                                    }),\n                                    e\n                                );\n                            })(t)),\n                            (e.useIC = !1),\n                            e\n                        );\n                    }),\n                    (e.CommonMsupMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"scriptChild\",\n                                    {\n                                        get: function () {\n                                            return this.childNodes[\n                                                this.node.sup\n                                            ];\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                (e.prototype.getOffset = function () {\n                                    return [\n                                        this.getAdjustedIc() -\n                                            (this.baseRemoveIc\n                                                ? 0\n                                                : this.baseIc),\n                                        this.getU(),\n                                    ];\n                                }),\n                                e\n                            );\n                        })(t);\n                    }),\n                    (e.CommonMsubsupMixin = function (t) {\n                        var e;\n                        return (\n                            (e = (function (t) {\n                                function e() {\n                                    var e =\n                                        (null !== t &&\n                                            t.apply(this, arguments)) ||\n                                        this;\n                                    return (e.UVQ = null), e;\n                                }\n                                return (\n                                    n(e, t),\n                                    Object.defineProperty(\n                                        e.prototype,\n                                        \"subChild\",\n                                        {\n                                            get: function () {\n                                                return this.childNodes[\n                                                    this.node.sub\n                                                ];\n                                            },\n                                            enumerable: !1,\n                                            configurable: !0,\n                                        }\n                                    ),\n                                    Object.defineProperty(\n                                        e.prototype,\n                                        \"supChild\",\n                                        {\n                                            get: function () {\n                                                return this.childNodes[\n                                                    this.node.sup\n                                                ];\n                                            },\n                                            enumerable: !1,\n                                            configurable: !0,\n                                        }\n                                    ),\n                                    (e.prototype.computeBBox = function (t, e) {\n                                        void 0 === e && (e = !1);\n                                        var r = this.baseChild.getOuterBBox(),\n                                            n = o(\n                                                [\n                                                    this.subChild.getOuterBBox(),\n                                                    this.supChild.getOuterBBox(),\n                                                ],\n                                                2\n                                            ),\n                                            i = n[0],\n                                            s = n[1];\n                                        t.empty(), t.append(r);\n                                        var a = this.getBaseWidth(),\n                                            l = this.getAdjustedIc(),\n                                            c = o(this.getUVQ(), 2),\n                                            u = c[0],\n                                            p = c[1];\n                                        t.combine(i, a, p),\n                                            t.combine(s, a + l, u),\n                                            (t.w +=\n                                                this.font.params.scriptspace),\n                                            t.clean(),\n                                            this.setChildPWidths(e);\n                                    }),\n                                    (e.prototype.getUVQ = function (t, e) {\n                                        void 0 === t &&\n                                            (t = this.subChild.getOuterBBox()),\n                                            void 0 === e &&\n                                                (e =\n                                                    this.supChild.getOuterBBox());\n                                        var r = this.baseCore.getOuterBBox();\n                                        if (this.UVQ) return this.UVQ;\n                                        var n = this.font.params,\n                                            i = 3 * n.rule_thickness,\n                                            s = this.length2em(\n                                                this.node.attributes.get(\n                                                    \"subscriptshift\"\n                                                ),\n                                                n.sub2\n                                            ),\n                                            a = this.baseCharZero(\n                                                r.d * this.baseScale +\n                                                    n.sub_drop * t.rscale\n                                            ),\n                                            l = o(\n                                                [this.getU(), Math.max(a, s)],\n                                                2\n                                            ),\n                                            c = l[0],\n                                            u = l[1],\n                                            p =\n                                                c -\n                                                e.d * e.rscale -\n                                                (t.h * t.rscale - u);\n                                        if (p < i) {\n                                            u += i - p;\n                                            var h =\n                                                0.8 * n.x_height -\n                                                (c - e.d * e.rscale);\n                                            h > 0 && ((c += h), (u -= h));\n                                        }\n                                        return (\n                                            (c = Math.max(\n                                                this.length2em(\n                                                    this.node.attributes.get(\n                                                        \"superscriptshift\"\n                                                    ),\n                                                    c\n                                                ),\n                                                c\n                                            )),\n                                            (u = Math.max(\n                                                this.length2em(\n                                                    this.node.attributes.get(\n                                                        \"subscriptshift\"\n                                                    ),\n                                                    u\n                                                ),\n                                                u\n                                            )),\n                                            (p =\n                                                c -\n                                                e.d * e.rscale -\n                                                (t.h * t.rscale - u)),\n                                            (this.UVQ = [c, -u, p]),\n                                            this.UVQ\n                                        );\n                                    }),\n                                    e\n                                );\n                            })(t)),\n                            (e.useIC = !1),\n                            e\n                        );\n                    });\n            },\n            6237: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    a =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMtableMixin = void 0);\n                var l = r(6469),\n                    c = r(505),\n                    u = r(7875);\n                e.CommonMtableMixin = function (t) {\n                    return (function (t) {\n                        function e() {\n                            for (var e = [], r = 0; r < arguments.length; r++)\n                                e[r] = arguments[r];\n                            var n = t.apply(this, s([], i(e), !1)) || this;\n                            (n.numCols = 0),\n                                (n.numRows = 0),\n                                (n.data = null),\n                                (n.pwidthCells = []),\n                                (n.pWidth = 0),\n                                (n.numCols = (0, u.max)(\n                                    n.tableRows.map(function (t) {\n                                        return t.numCells;\n                                    })\n                                )),\n                                (n.numRows = n.childNodes.length),\n                                (n.hasLabels = n.childNodes.reduce(function (\n                                    t,\n                                    e\n                                ) {\n                                    return t || e.node.isKind(\"mlabeledtr\");\n                                }, !1)),\n                                n.findContainer(),\n                                (n.isTop =\n                                    !n.container ||\n                                    (n.container.node.isKind(\"math\") &&\n                                        !n.container.parent)),\n                                n.isTop && (n.jax.table = n),\n                                n.getPercentageWidth();\n                            var o = n.node.attributes;\n                            return (\n                                (n.frame = \"none\" !== o.get(\"frame\")),\n                                (n.fLine =\n                                    n.frame && o.get(\"frame\") ? 0.07 : 0),\n                                (n.fSpace = n.frame\n                                    ? n.convertLengths(\n                                          n.getAttributeArray(\"framespacing\")\n                                      )\n                                    : [0, 0]),\n                                (n.cSpace = n.convertLengths(\n                                    n.getColumnAttributes(\"columnspacing\")\n                                )),\n                                (n.rSpace = n.convertLengths(\n                                    n.getRowAttributes(\"rowspacing\")\n                                )),\n                                (n.cLines = n\n                                    .getColumnAttributes(\"columnlines\")\n                                    .map(function (t) {\n                                        return \"none\" === t ? 0 : 0.07;\n                                    })),\n                                (n.rLines = n\n                                    .getRowAttributes(\"rowlines\")\n                                    .map(function (t) {\n                                        return \"none\" === t ? 0 : 0.07;\n                                    })),\n                                (n.cWidths = n.getColumnWidths()),\n                                n.stretchRows(),\n                                n.stretchColumns(),\n                                n\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"tableRows\", {\n                                get: function () {\n                                    return this.childNodes;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.findContainer = function () {\n                                for (\n                                    var t = this, e = t.parent;\n                                    e &&\n                                    (e.node.notParent || e.node.isKind(\"mrow\"));\n\n                                )\n                                    (t = e), (e = e.parent);\n                                (this.container = e),\n                                    (this.containerI = t.node.childPosition());\n                            }),\n                            (e.prototype.getPercentageWidth = function () {\n                                if (this.hasLabels)\n                                    this.bbox.pwidth = l.BBox.fullWidth;\n                                else {\n                                    var t = this.node.attributes.get(\"width\");\n                                    (0, c.isPercent)(t) &&\n                                        (this.bbox.pwidth = t);\n                                }\n                            }),\n                            (e.prototype.stretchRows = function () {\n                                for (\n                                    var t =\n                                            this.node.attributes.get(\n                                                \"equalrows\"\n                                            ),\n                                        e = t ? this.getEqualRowHeight() : 0,\n                                        r = t\n                                            ? this.getTableData()\n                                            : { H: [0], D: [0] },\n                                        n = r.H,\n                                        o = r.D,\n                                        i = this.tableRows,\n                                        s = 0;\n                                    s < this.numRows;\n                                    s++\n                                ) {\n                                    var a = t\n                                        ? [\n                                              (e + n[s] - o[s]) / 2,\n                                              (e - n[s] + o[s]) / 2,\n                                          ]\n                                        : null;\n                                    i[s].stretchChildren(a);\n                                }\n                            }),\n                            (e.prototype.stretchColumns = function () {\n                                for (var t = 0; t < this.numCols; t++) {\n                                    var e =\n                                        \"number\" == typeof this.cWidths[t]\n                                            ? this.cWidths[t]\n                                            : null;\n                                    this.stretchColumn(t, e);\n                                }\n                            }),\n                            (e.prototype.stretchColumn = function (t, e) {\n                                var r,\n                                    n,\n                                    o,\n                                    i,\n                                    s,\n                                    l,\n                                    c = [];\n                                try {\n                                    for (\n                                        var u = a(this.tableRows), p = u.next();\n                                        !p.done;\n                                        p = u.next()\n                                    ) {\n                                        if ((g = p.value.getChild(t)))\n                                            0 ===\n                                                (M = g.childNodes[0]).stretch\n                                                    .dir &&\n                                                M.canStretch(2) &&\n                                                c.push(M);\n                                    }\n                                } catch (t) {\n                                    r = { error: t };\n                                } finally {\n                                    try {\n                                        p &&\n                                            !p.done &&\n                                            (n = u.return) &&\n                                            n.call(u);\n                                    } finally {\n                                        if (r) throw r.error;\n                                    }\n                                }\n                                var h = c.length,\n                                    f = this.childNodes.length;\n                                if (h && f > 1) {\n                                    if (null === e) {\n                                        e = 0;\n                                        var d = h > 1 && h === f;\n                                        try {\n                                            for (\n                                                var m = a(this.tableRows),\n                                                    y = m.next();\n                                                !y.done;\n                                                y = m.next()\n                                            ) {\n                                                var g;\n                                                if ((g = y.value.getChild(t))) {\n                                                    var b =\n                                                        0 ===\n                                                        (M = g.childNodes[0])\n                                                            .stretch.dir;\n                                                    if (d || b) {\n                                                        var v = M.getBBox(b).w;\n                                                        v > e && (e = v);\n                                                    }\n                                                }\n                                            }\n                                        } catch (t) {\n                                            o = { error: t };\n                                        } finally {\n                                            try {\n                                                y &&\n                                                    !y.done &&\n                                                    (i = m.return) &&\n                                                    i.call(m);\n                                            } finally {\n                                                if (o) throw o.error;\n                                            }\n                                        }\n                                    }\n                                    try {\n                                        for (\n                                            var _ = a(c), S = _.next();\n                                            !S.done;\n                                            S = _.next()\n                                        ) {\n                                            var M;\n                                            (M = S.value)\n                                                .coreMO()\n                                                .getStretchedVariant([e]);\n                                        }\n                                    } catch (t) {\n                                        s = { error: t };\n                                    } finally {\n                                        try {\n                                            S &&\n                                                !S.done &&\n                                                (l = _.return) &&\n                                                l.call(_);\n                                        } finally {\n                                            if (s) throw s.error;\n                                        }\n                                    }\n                                }\n                            }),\n                            (e.prototype.getTableData = function () {\n                                if (this.data) return this.data;\n                                for (\n                                    var t = new Array(this.numRows).fill(0),\n                                        e = new Array(this.numRows).fill(0),\n                                        r = new Array(this.numCols).fill(0),\n                                        n = new Array(this.numRows),\n                                        o = new Array(this.numRows),\n                                        i = [0],\n                                        s = this.tableRows,\n                                        a = 0;\n                                    a < s.length;\n                                    a++\n                                ) {\n                                    for (\n                                        var l = 0,\n                                            c = s[a],\n                                            u =\n                                                c.node.attributes.get(\n                                                    \"rowalign\"\n                                                ),\n                                            p = 0;\n                                        p < c.numCells;\n                                        p++\n                                    ) {\n                                        var h = c.getChild(p);\n                                        (l = this.updateHDW(\n                                            h,\n                                            p,\n                                            a,\n                                            u,\n                                            t,\n                                            e,\n                                            r,\n                                            l\n                                        )),\n                                            this.recordPWidthCell(h, p);\n                                    }\n                                    (n[a] = t[a]),\n                                        (o[a] = e[a]),\n                                        c.labeled &&\n                                            (l = this.updateHDW(\n                                                c.childNodes[0],\n                                                0,\n                                                a,\n                                                u,\n                                                t,\n                                                e,\n                                                i,\n                                                l\n                                            )),\n                                        this.extendHD(a, t, e, l),\n                                        this.extendHD(a, n, o, l);\n                                }\n                                var f = i[0];\n                                return (\n                                    (this.data = {\n                                        H: t,\n                                        D: e,\n                                        W: r,\n                                        NH: n,\n                                        ND: o,\n                                        L: f,\n                                    }),\n                                    this.data\n                                );\n                            }),\n                            (e.prototype.updateHDW = function (\n                                t,\n                                e,\n                                r,\n                                n,\n                                o,\n                                i,\n                                s,\n                                a\n                            ) {\n                                var l = t.getBBox(),\n                                    c = l.h,\n                                    u = l.d,\n                                    p = l.w,\n                                    h = t.parent.bbox.rscale;\n                                1 !== t.parent.bbox.rscale &&\n                                    ((c *= h), (u *= h), (p *= h)),\n                                    this.node.getProperty(\"useHeight\") &&\n                                        (c < 0.75 && (c = 0.75),\n                                        u < 0.25 && (u = 0.25));\n                                var f = 0;\n                                return (\n                                    \"baseline\" !==\n                                        (n =\n                                            t.node.attributes.get(\"rowalign\") ||\n                                            n) &&\n                                        \"axis\" !== n &&\n                                        ((f = c + u), (c = u = 0)),\n                                    c > o[r] && (o[r] = c),\n                                    u > i[r] && (i[r] = u),\n                                    f > a && (a = f),\n                                    s && p > s[e] && (s[e] = p),\n                                    a\n                                );\n                            }),\n                            (e.prototype.extendHD = function (t, e, r, n) {\n                                var o = (n - (e[t] + r[t])) / 2;\n                                o < 1e-5 || ((e[t] += o), (r[t] += o));\n                            }),\n                            (e.prototype.recordPWidthCell = function (t, e) {\n                                t.childNodes[0] &&\n                                    t.childNodes[0].getBBox().pwidth &&\n                                    this.pwidthCells.push([t, e]);\n                            }),\n                            (e.prototype.computeBBox = function (t, e) {\n                                void 0 === e && (e = !1);\n                                var r,\n                                    n,\n                                    o = this.getTableData(),\n                                    s = o.H,\n                                    a = o.D;\n                                if (this.node.attributes.get(\"equalrows\")) {\n                                    var l = this.getEqualRowHeight();\n                                    r =\n                                        (0, u.sum)(\n                                            [].concat(this.rLines, this.rSpace)\n                                        ) +\n                                        l * this.numRows;\n                                } else\n                                    r = (0, u.sum)(\n                                        s.concat(a, this.rLines, this.rSpace)\n                                    );\n                                r += 2 * (this.fLine + this.fSpace[1]);\n                                var p = this.getComputedWidths();\n                                n =\n                                    (0, u.sum)(\n                                        p.concat(this.cLines, this.cSpace)\n                                    ) +\n                                    2 * (this.fLine + this.fSpace[0]);\n                                var h = this.node.attributes.get(\"width\");\n                                \"auto\" !== h &&\n                                    (n = Math.max(\n                                        this.length2em(h, 0) + 2 * this.fLine,\n                                        n\n                                    ));\n                                var f = i(this.getBBoxHD(r), 2),\n                                    d = f[0],\n                                    m = f[1];\n                                (t.h = d), (t.d = m), (t.w = n);\n                                var y = i(this.getBBoxLR(), 2),\n                                    g = y[0],\n                                    b = y[1];\n                                (t.L = g),\n                                    (t.R = b),\n                                    (0, c.isPercent)(h) ||\n                                        this.setColumnPWidths();\n                            }),\n                            (e.prototype.setChildPWidths = function (t, e, r) {\n                                var n = this.node.attributes.get(\"width\");\n                                if (!(0, c.isPercent)(n)) return !1;\n                                this.hasLabels ||\n                                    ((this.bbox.pwidth = \"\"),\n                                    (this.container.bbox.pwidth = \"\"));\n                                var o = this.bbox,\n                                    i = o.w,\n                                    s = o.L,\n                                    a = o.R,\n                                    l = this.node.attributes.get(\n                                        \"data-width-includes-label\"\n                                    ),\n                                    p =\n                                        Math.max(\n                                            i,\n                                            this.length2em(\n                                                n,\n                                                Math.max(e, s + i + a)\n                                            )\n                                        ) - (l ? s + a : 0),\n                                    h = this.node.attributes.get(\"equalcolumns\")\n                                        ? Array(this.numCols).fill(\n                                              this.percent(\n                                                  1 / Math.max(1, this.numCols)\n                                              )\n                                          )\n                                        : this.getColumnAttributes(\n                                              \"columnwidth\",\n                                              0\n                                          );\n                                this.cWidths = this.getColumnWidthsFixed(h, p);\n                                var f = this.getComputedWidths();\n                                return (\n                                    (this.pWidth =\n                                        (0, u.sum)(\n                                            f.concat(this.cLines, this.cSpace)\n                                        ) +\n                                        2 * (this.fLine + this.fSpace[0])),\n                                    this.isTop && (this.bbox.w = this.pWidth),\n                                    this.setColumnPWidths(),\n                                    this.pWidth !== i &&\n                                        this.parent.invalidateBBox(),\n                                    this.pWidth !== i\n                                );\n                            }),\n                            (e.prototype.setColumnPWidths = function () {\n                                var t,\n                                    e,\n                                    r = this.cWidths;\n                                try {\n                                    for (\n                                        var n = a(this.pwidthCells),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var s = i(o.value, 2),\n                                            l = s[0],\n                                            c = s[1];\n                                        l.setChildPWidths(!1, r[c]) &&\n                                            (l.invalidateBBox(), l.getBBox());\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (e = n.return) &&\n                                            e.call(n);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.getBBoxHD = function (t) {\n                                var e = i(this.getAlignmentRow(), 2),\n                                    r = e[0],\n                                    n = e[1];\n                                if (null === n) {\n                                    var o = this.font.params.axis_height,\n                                        s = t / 2;\n                                    return (\n                                        {\n                                            top: [0, t],\n                                            center: [s, s],\n                                            bottom: [t, 0],\n                                            baseline: [s, s],\n                                            axis: [s + o, s - o],\n                                        }[r] || [s, s]\n                                    );\n                                }\n                                var a = this.getVerticalPosition(n, r);\n                                return [a, t - a];\n                            }),\n                            (e.prototype.getBBoxLR = function () {\n                                if (this.hasLabels) {\n                                    var t = this.node.attributes,\n                                        e = t.get(\"side\"),\n                                        r = i(this.getPadAlignShift(e), 2),\n                                        n = r[0],\n                                        o = r[1],\n                                        s =\n                                            this.hasLabels &&\n                                            !!t.get(\n                                                \"data-width-includes-label\"\n                                            );\n                                    return (\n                                        s &&\n                                            this.frame &&\n                                            this.fSpace[0] &&\n                                            (n -= this.fSpace[0]),\n                                        \"center\" !== o || s\n                                            ? \"left\" === e\n                                                ? [n, 0]\n                                                : [0, n]\n                                            : [n, n]\n                                    );\n                                }\n                                return [0, 0];\n                            }),\n                            (e.prototype.getPadAlignShift = function (t) {\n                                var e =\n                                        this.getTableData().L +\n                                        this.length2em(\n                                            this.node.attributes.get(\n                                                \"minlabelspacing\"\n                                            )\n                                        ),\n                                    r = i(\n                                        null == this.styles\n                                            ? [\"\", \"\"]\n                                            : [\n                                                  this.styles.get(\n                                                      \"padding-left\"\n                                                  ),\n                                                  this.styles.get(\n                                                      \"padding-right\"\n                                                  ),\n                                              ],\n                                        2\n                                    ),\n                                    n = r[0],\n                                    o = r[1];\n                                (n || o) &&\n                                    (e = Math.max(\n                                        e,\n                                        this.length2em(n || \"0\"),\n                                        this.length2em(o || \"0\")\n                                    ));\n                                var s = i(this.getAlignShift(), 2),\n                                    a = s[0],\n                                    l = s[1];\n                                return (\n                                    a === t &&\n                                        (l =\n                                            \"left\" === t\n                                                ? Math.max(e, l) - e\n                                                : Math.min(-e, l) + e),\n                                    [e, a, l]\n                                );\n                            }),\n                            (e.prototype.getAlignShift = function () {\n                                return this.isTop\n                                    ? t.prototype.getAlignShift.call(this)\n                                    : [\n                                          this.container.getChildAlign(\n                                              this.containerI\n                                          ),\n                                          0,\n                                      ];\n                            }),\n                            (e.prototype.getWidth = function () {\n                                return this.pWidth || this.getBBox().w;\n                            }),\n                            (e.prototype.getEqualRowHeight = function () {\n                                var t = this.getTableData(),\n                                    e = t.H,\n                                    r = t.D,\n                                    n = Array.from(e.keys()).map(function (t) {\n                                        return e[t] + r[t];\n                                    });\n                                return Math.max.apply(Math, n);\n                            }),\n                            (e.prototype.getComputedWidths = function () {\n                                var t = this,\n                                    e = this.getTableData().W,\n                                    r = Array.from(e.keys()).map(function (r) {\n                                        return \"number\" == typeof t.cWidths[r]\n                                            ? t.cWidths[r]\n                                            : e[r];\n                                    });\n                                return (\n                                    this.node.attributes.get(\"equalcolumns\") &&\n                                        (r = Array(r.length).fill(\n                                            (0, u.max)(r)\n                                        )),\n                                    r\n                                );\n                            }),\n                            (e.prototype.getColumnWidths = function () {\n                                var t = this.node.attributes.get(\"width\");\n                                if (this.node.attributes.get(\"equalcolumns\"))\n                                    return this.getEqualColumns(t);\n                                var e = this.getColumnAttributes(\n                                    \"columnwidth\",\n                                    0\n                                );\n                                return \"auto\" === t\n                                    ? this.getColumnWidthsAuto(e)\n                                    : (0, c.isPercent)(t)\n                                      ? this.getColumnWidthsPercent(e)\n                                      : this.getColumnWidthsFixed(\n                                            e,\n                                            this.length2em(t)\n                                        );\n                            }),\n                            (e.prototype.getEqualColumns = function (t) {\n                                var e,\n                                    r = Math.max(1, this.numCols);\n                                if (\"auto\" === t) {\n                                    var n = this.getTableData().W;\n                                    e = (0, u.max)(n);\n                                } else if ((0, c.isPercent)(t))\n                                    e = this.percent(1 / r);\n                                else {\n                                    var o =\n                                        (0, u.sum)(\n                                            [].concat(this.cLines, this.cSpace)\n                                        ) +\n                                        2 * this.fSpace[0];\n                                    e = Math.max(0, this.length2em(t) - o) / r;\n                                }\n                                return Array(this.numCols).fill(e);\n                            }),\n                            (e.prototype.getColumnWidthsAuto = function (t) {\n                                var e = this;\n                                return t.map(function (t) {\n                                    return \"auto\" === t || \"fit\" === t\n                                        ? null\n                                        : (0, c.isPercent)(t)\n                                          ? t\n                                          : e.length2em(t);\n                                });\n                            }),\n                            (e.prototype.getColumnWidthsPercent = function (t) {\n                                var e = this,\n                                    r = t.indexOf(\"fit\") >= 0,\n                                    n = (r ? this.getTableData() : { W: null })\n                                        .W;\n                                return Array.from(t.keys()).map(function (o) {\n                                    var i = t[o];\n                                    return \"fit\" === i\n                                        ? null\n                                        : \"auto\" === i\n                                          ? r\n                                              ? n[o]\n                                              : null\n                                          : (0, c.isPercent)(i)\n                                            ? i\n                                            : e.length2em(i);\n                                });\n                            }),\n                            (e.prototype.getColumnWidthsFixed = function (\n                                t,\n                                e\n                            ) {\n                                var r = this,\n                                    n = Array.from(t.keys()),\n                                    o = n.filter(function (e) {\n                                        return \"fit\" === t[e];\n                                    }),\n                                    i = n.filter(function (e) {\n                                        return \"auto\" === t[e];\n                                    }),\n                                    s = o.length || i.length,\n                                    a = (s ? this.getTableData() : { W: null })\n                                        .W,\n                                    l =\n                                        e -\n                                        (0, u.sum)(\n                                            [].concat(this.cLines, this.cSpace)\n                                        ) -\n                                        2 * this.fSpace[0],\n                                    c = l;\n                                n.forEach(function (e) {\n                                    var n = t[e];\n                                    c -=\n                                        \"fit\" === n || \"auto\" === n\n                                            ? a[e]\n                                            : r.length2em(n, l);\n                                });\n                                var p = s && c > 0 ? c / s : 0;\n                                return n.map(function (e) {\n                                    var n = t[e];\n                                    return \"fit\" === n\n                                        ? a[e] + p\n                                        : \"auto\" === n\n                                          ? a[e] + (0 === o.length ? p : 0)\n                                          : r.length2em(n, l);\n                                });\n                            }),\n                            (e.prototype.getVerticalPosition = function (t, e) {\n                                for (\n                                    var r =\n                                            this.node.attributes.get(\n                                                \"equalrows\"\n                                            ),\n                                        n = this.getTableData(),\n                                        o = n.H,\n                                        s = n.D,\n                                        a = r ? this.getEqualRowHeight() : 0,\n                                        l = this.getRowHalfSpacing(),\n                                        c = this.fLine,\n                                        u = 0;\n                                    u < t;\n                                    u++\n                                )\n                                    c +=\n                                        l[u] +\n                                        (r ? a : o[u] + s[u]) +\n                                        l[u + 1] +\n                                        this.rLines[u];\n                                var p = i(\n                                        r\n                                            ? [\n                                                  (a + o[t] - s[t]) / 2,\n                                                  (a - o[t] + s[t]) / 2,\n                                              ]\n                                            : [o[t], s[t]],\n                                        2\n                                    ),\n                                    h = p[0],\n                                    f = p[1];\n                                return (c +=\n                                    {\n                                        top: 0,\n                                        center: l[t] + (h + f) / 2,\n                                        bottom: l[t] + h + f + l[t + 1],\n                                        baseline: l[t] + h,\n                                        axis: l[t] + h - 0.25,\n                                    }[e] || 0);\n                            }),\n                            (e.prototype.getEmHalfSpacing = function (t, e, r) {\n                                void 0 === r && (r = 1);\n                                var n = this.em(t * r),\n                                    o = this.addEm(e, 2 / r);\n                                return o.unshift(n), o.push(n), o;\n                            }),\n                            (e.prototype.getRowHalfSpacing = function () {\n                                var t = this.rSpace.map(function (t) {\n                                    return t / 2;\n                                });\n                                return (\n                                    t.unshift(this.fSpace[1]),\n                                    t.push(this.fSpace[1]),\n                                    t\n                                );\n                            }),\n                            (e.prototype.getColumnHalfSpacing = function () {\n                                var t = this.cSpace.map(function (t) {\n                                    return t / 2;\n                                });\n                                return (\n                                    t.unshift(this.fSpace[0]),\n                                    t.push(this.fSpace[0]),\n                                    t\n                                );\n                            }),\n                            (e.prototype.getAlignmentRow = function () {\n                                var t = i(\n                                        (0, c.split)(\n                                            this.node.attributes.get(\"align\")\n                                        ),\n                                        2\n                                    ),\n                                    e = t[0],\n                                    r = t[1];\n                                if (null == r) return [e, null];\n                                var n = parseInt(r);\n                                return (\n                                    n < 0 && (n += this.numRows + 1),\n                                    [\n                                        e,\n                                        n < 1 || n > this.numRows\n                                            ? null\n                                            : n - 1,\n                                    ]\n                                );\n                            }),\n                            (e.prototype.getColumnAttributes = function (t, e) {\n                                void 0 === e && (e = 1);\n                                var r = this.numCols - e,\n                                    n = this.getAttributeArray(t);\n                                if (0 === n.length) return null;\n                                for (; n.length < r; ) n.push(n[n.length - 1]);\n                                return n.length > r && n.splice(r), n;\n                            }),\n                            (e.prototype.getRowAttributes = function (t, e) {\n                                void 0 === e && (e = 1);\n                                var r = this.numRows - e,\n                                    n = this.getAttributeArray(t);\n                                if (0 === n.length) return null;\n                                for (; n.length < r; ) n.push(n[n.length - 1]);\n                                return n.length > r && n.splice(r), n;\n                            }),\n                            (e.prototype.getAttributeArray = function (t) {\n                                var e = this.node.attributes.get(t);\n                                return e\n                                    ? (0, c.split)(e)\n                                    : [this.node.attributes.getDefault(t)];\n                            }),\n                            (e.prototype.addEm = function (t, e) {\n                                var r = this;\n                                return (\n                                    void 0 === e && (e = 1),\n                                    t\n                                        ? t.map(function (t) {\n                                              return r.em(t / e);\n                                          })\n                                        : null\n                                );\n                            }),\n                            (e.prototype.convertLengths = function (t) {\n                                var e = this;\n                                return t\n                                    ? t.map(function (t) {\n                                          return e.length2em(t);\n                                      })\n                                    : null;\n                            }),\n                            e\n                        );\n                    })(t);\n                };\n            },\n            5164: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMtdMixin = void 0),\n                    (e.CommonMtdMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"fixesPWidth\",\n                                    {\n                                        get: function () {\n                                            return !1;\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                (e.prototype.invalidateBBox = function () {\n                                    this.bboxComputed = !1;\n                                }),\n                                (e.prototype.getWrapWidth = function (t) {\n                                    var e = this.parent.parent,\n                                        r = this.parent,\n                                        n =\n                                            this.node.childPosition() -\n                                            (r.labeled ? 1 : 0);\n                                    return \"number\" == typeof e.cWidths[n]\n                                        ? e.cWidths[n]\n                                        : e.getTableData().W[n];\n                                }),\n                                (e.prototype.getChildAlign = function (t) {\n                                    return this.node.attributes.get(\n                                        \"columnalign\"\n                                    );\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            6319: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMtextMixin = void 0),\n                    (e.CommonMtextMixin = function (t) {\n                        var e;\n                        return (\n                            (e = (function (t) {\n                                function e() {\n                                    return (\n                                        (null !== t &&\n                                            t.apply(this, arguments)) ||\n                                        this\n                                    );\n                                }\n                                return (\n                                    n(e, t),\n                                    (e.prototype.getVariant = function () {\n                                        var e = this.jax.options,\n                                            r = this.jax.math.outputData,\n                                            n =\n                                                (!!r.merrorFamily ||\n                                                    !!e.merrorFont) &&\n                                                this.node.Parent.isKind(\n                                                    \"merror\"\n                                                );\n                                        if (r.mtextFamily || e.mtextFont || n) {\n                                            var o =\n                                                    this.node.attributes.get(\n                                                        \"mathvariant\"\n                                                    ),\n                                                i =\n                                                    this.constructor\n                                                        .INHERITFONTS[o] ||\n                                                    this.jax.font.getCssFont(o),\n                                                s =\n                                                    i[0] ||\n                                                    (n\n                                                        ? r.merrorFamily ||\n                                                          e.merrorFont\n                                                        : r.mtextFamily ||\n                                                          e.mtextFont);\n                                            this.variant = this.explicitVariant(\n                                                s,\n                                                i[2] ? \"bold\" : \"\",\n                                                i[1] ? \"italic\" : \"\"\n                                            );\n                                        } else\n                                            t.prototype.getVariant.call(this);\n                                    }),\n                                    e\n                                );\n                            })(t)),\n                            (e.INHERITFONTS = {\n                                normal: [\"\", !1, !1],\n                                bold: [\"\", !1, !0],\n                                italic: [\"\", !0, !1],\n                                \"bold-italic\": [\"\", !0, !0],\n                            }),\n                            e\n                        );\n                    });\n            },\n            5766: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMlabeledtrMixin = e.CommonMtrMixin = void 0),\n                    (e.CommonMtrMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"fixesPWidth\",\n                                    {\n                                        get: function () {\n                                            return !1;\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                Object.defineProperty(e.prototype, \"numCells\", {\n                                    get: function () {\n                                        return this.childNodes.length;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }),\n                                Object.defineProperty(e.prototype, \"labeled\", {\n                                    get: function () {\n                                        return !1;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"tableCells\",\n                                    {\n                                        get: function () {\n                                            return this.childNodes;\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                (e.prototype.getChild = function (t) {\n                                    return this.childNodes[t];\n                                }),\n                                (e.prototype.getChildBBoxes = function () {\n                                    return this.childNodes.map(function (t) {\n                                        return t.getBBox();\n                                    });\n                                }),\n                                (e.prototype.stretchChildren = function (t) {\n                                    var e, r, n, i, s, a;\n                                    void 0 === t && (t = null);\n                                    var l = [],\n                                        c = this.labeled\n                                            ? this.childNodes.slice(1)\n                                            : this.childNodes;\n                                    try {\n                                        for (\n                                            var u = o(c), p = u.next();\n                                            !p.done;\n                                            p = u.next()\n                                        ) {\n                                            (E =\n                                                p.value\n                                                    .childNodes[0]).canStretch(\n                                                1\n                                            ) && l.push(E);\n                                        }\n                                    } catch (t) {\n                                        e = { error: t };\n                                    } finally {\n                                        try {\n                                            p &&\n                                                !p.done &&\n                                                (r = u.return) &&\n                                                r.call(u);\n                                        } finally {\n                                            if (e) throw e.error;\n                                        }\n                                    }\n                                    var h = l.length,\n                                        f = this.childNodes.length;\n                                    if (h && f > 1) {\n                                        if (null === t) {\n                                            var d = 0,\n                                                m = 0,\n                                                y = h > 1 && h === f;\n                                            try {\n                                                for (\n                                                    var g = o(c), b = g.next();\n                                                    !b.done;\n                                                    b = g.next()\n                                                ) {\n                                                    var v =\n                                                        0 ===\n                                                        (E =\n                                                            b.value\n                                                                .childNodes[0])\n                                                            .stretch.dir;\n                                                    if (y || v) {\n                                                        var _ = E.getBBox(v),\n                                                            S = _.h,\n                                                            M = _.d;\n                                                        S > d && (d = S),\n                                                            M > m && (m = M);\n                                                    }\n                                                }\n                                            } catch (t) {\n                                                n = { error: t };\n                                            } finally {\n                                                try {\n                                                    b &&\n                                                        !b.done &&\n                                                        (i = g.return) &&\n                                                        i.call(g);\n                                                } finally {\n                                                    if (n) throw n.error;\n                                                }\n                                            }\n                                            t = [d, m];\n                                        }\n                                        try {\n                                            for (\n                                                var O = o(l), x = O.next();\n                                                !x.done;\n                                                x = O.next()\n                                            ) {\n                                                var E;\n                                                (E = x.value)\n                                                    .coreMO()\n                                                    .getStretchedVariant(t);\n                                            }\n                                        } catch (t) {\n                                            s = { error: t };\n                                        } finally {\n                                            try {\n                                                x &&\n                                                    !x.done &&\n                                                    (a = O.return) &&\n                                                    a.call(O);\n                                            } finally {\n                                                if (s) throw s.error;\n                                            }\n                                        }\n                                    }\n                                }),\n                                e\n                            );\n                        })(t);\n                    }),\n                    (e.CommonMlabeledtrMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                Object.defineProperty(e.prototype, \"numCells\", {\n                                    get: function () {\n                                        return Math.max(\n                                            0,\n                                            this.childNodes.length - 1\n                                        );\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }),\n                                Object.defineProperty(e.prototype, \"labeled\", {\n                                    get: function () {\n                                        return !0;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"tableCells\",\n                                    {\n                                        get: function () {\n                                            return this.childNodes.slice(1);\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                (e.prototype.getChild = function (t) {\n                                    return this.childNodes[t + 1];\n                                }),\n                                (e.prototype.getChildBBoxes = function () {\n                                    return this.childNodes\n                                        .slice(1)\n                                        .map(function (t) {\n                                            return t.getBBox();\n                                        });\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            1971: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonMunderoverMixin =\n                        e.CommonMoverMixin =\n                        e.CommonMunderMixin =\n                            void 0),\n                    (e.CommonMunderMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, i([], o(e), !1)) || this;\n                                return n.stretchChildren(), n;\n                            }\n                            return (\n                                n(e, t),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"scriptChild\",\n                                    {\n                                        get: function () {\n                                            return this.childNodes[\n                                                this.node.under\n                                            ];\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                (e.prototype.computeBBox = function (e, r) {\n                                    if (\n                                        (void 0 === r && (r = !1),\n                                        this.hasMovableLimits())\n                                    )\n                                        t.prototype.computeBBox.call(\n                                            this,\n                                            e,\n                                            r\n                                        );\n                                    else {\n                                        e.empty();\n                                        var n = this.baseChild.getOuterBBox(),\n                                            i = this.scriptChild.getOuterBBox(),\n                                            s = this.getUnderKV(n, i)[1],\n                                            a = this.isLineBelow\n                                                ? 0\n                                                : this.getDelta(!0),\n                                            l = o(\n                                                this.getDeltaW([n, i], [0, -a]),\n                                                2\n                                            ),\n                                            c = l[0],\n                                            u = l[1];\n                                        e.combine(n, c, 0),\n                                            e.combine(i, u, s),\n                                            (e.d +=\n                                                this.font.params.big_op_spacing5),\n                                            e.clean(),\n                                            this.setChildPWidths(r);\n                                    }\n                                }),\n                                e\n                            );\n                        })(t);\n                    }),\n                    (e.CommonMoverMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, i([], o(e), !1)) || this;\n                                return n.stretchChildren(), n;\n                            }\n                            return (\n                                n(e, t),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"scriptChild\",\n                                    {\n                                        get: function () {\n                                            return this.childNodes[\n                                                this.node.over\n                                            ];\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                (e.prototype.computeBBox = function (e) {\n                                    if (this.hasMovableLimits())\n                                        t.prototype.computeBBox.call(this, e);\n                                    else {\n                                        e.empty();\n                                        var r = this.baseChild.getOuterBBox(),\n                                            n = this.scriptChild.getOuterBBox();\n                                        this.node.attributes.get(\"accent\") &&\n                                            (r.h = Math.max(\n                                                r.h,\n                                                this.font.params.x_height *\n                                                    r.scale\n                                            ));\n                                        var i = this.getOverKU(r, n)[1],\n                                            s = this.isLineAbove\n                                                ? 0\n                                                : this.getDelta(),\n                                            a = o(\n                                                this.getDeltaW([r, n], [0, s]),\n                                                2\n                                            ),\n                                            l = a[0],\n                                            c = a[1];\n                                        e.combine(r, l, 0),\n                                            e.combine(n, c, i),\n                                            (e.h +=\n                                                this.font.params.big_op_spacing5),\n                                            e.clean();\n                                    }\n                                }),\n                                e\n                            );\n                        })(t);\n                    }),\n                    (e.CommonMunderoverMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, i([], o(e), !1)) || this;\n                                return n.stretchChildren(), n;\n                            }\n                            return (\n                                n(e, t),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"underChild\",\n                                    {\n                                        get: function () {\n                                            return this.childNodes[\n                                                this.node.under\n                                            ];\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"overChild\",\n                                    {\n                                        get: function () {\n                                            return this.childNodes[\n                                                this.node.over\n                                            ];\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                Object.defineProperty(e.prototype, \"subChild\", {\n                                    get: function () {\n                                        return this.underChild;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }),\n                                Object.defineProperty(e.prototype, \"supChild\", {\n                                    get: function () {\n                                        return this.overChild;\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }),\n                                (e.prototype.computeBBox = function (e) {\n                                    if (this.hasMovableLimits())\n                                        t.prototype.computeBBox.call(this, e);\n                                    else {\n                                        e.empty();\n                                        var r = this.overChild.getOuterBBox(),\n                                            n = this.baseChild.getOuterBBox(),\n                                            i = this.underChild.getOuterBBox();\n                                        this.node.attributes.get(\"accent\") &&\n                                            (n.h = Math.max(\n                                                n.h,\n                                                this.font.params.x_height *\n                                                    n.scale\n                                            ));\n                                        var s = this.getOverKU(n, r)[1],\n                                            a = this.getUnderKV(n, i)[1],\n                                            l = this.getDelta(),\n                                            c = o(\n                                                this.getDeltaW(\n                                                    [n, i, r],\n                                                    [\n                                                        0,\n                                                        this.isLineBelow\n                                                            ? 0\n                                                            : -l,\n                                                        this.isLineAbove\n                                                            ? 0\n                                                            : l,\n                                                    ]\n                                                ),\n                                                3\n                                            ),\n                                            u = c[0],\n                                            p = c[1],\n                                            h = c[2];\n                                        e.combine(n, u, 0),\n                                            e.combine(r, h, s),\n                                            e.combine(i, p, a);\n                                        var f =\n                                            this.font.params.big_op_spacing5;\n                                        (e.h += f), (e.d += f), e.clean();\n                                    }\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            167: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    a =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonScriptbaseMixin = void 0);\n                var l = r(9007);\n                e.CommonScriptbaseMixin = function (t) {\n                    var e;\n                    return (\n                        (e = (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, s([], i(e), !1)) || this;\n                                (n.baseScale = 1),\n                                    (n.baseIc = 0),\n                                    (n.baseRemoveIc = !1),\n                                    (n.baseIsChar = !1),\n                                    (n.baseHasAccentOver = null),\n                                    (n.baseHasAccentUnder = null),\n                                    (n.isLineAbove = !1),\n                                    (n.isLineBelow = !1),\n                                    (n.isMathAccent = !1);\n                                var o = (n.baseCore = n.getBaseCore());\n                                return o\n                                    ? (n.setBaseAccentsFor(o),\n                                      (n.baseScale = n.getBaseScale()),\n                                      (n.baseIc = n.getBaseIc()),\n                                      (n.baseIsChar = n.isCharBase()),\n                                      (n.isMathAccent =\n                                          n.baseIsChar &&\n                                          n.scriptChild &&\n                                          !!n.scriptChild\n                                              .coreMO()\n                                              .node.getProperty(\"mathaccent\")),\n                                      n.checkLineAccents(),\n                                      (n.baseRemoveIc =\n                                          !n.isLineAbove &&\n                                          !n.isLineBelow &&\n                                          (!n.constructor.useIC ||\n                                              n.isMathAccent)),\n                                      n)\n                                    : n;\n                            }\n                            return (\n                                o(e, t),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"baseChild\",\n                                    {\n                                        get: function () {\n                                            return this.childNodes[\n                                                this.node.base\n                                            ];\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                Object.defineProperty(\n                                    e.prototype,\n                                    \"scriptChild\",\n                                    {\n                                        get: function () {\n                                            return this.childNodes[1];\n                                        },\n                                        enumerable: !1,\n                                        configurable: !0,\n                                    }\n                                ),\n                                (e.prototype.getBaseCore = function () {\n                                    for (\n                                        var t =\n                                            this.getSemanticBase() ||\n                                            this.childNodes[0];\n                                        t &&\n                                        ((1 === t.childNodes.length &&\n                                            (t.node.isKind(\"mrow\") ||\n                                                (t.node.isKind(\"TeXAtom\") &&\n                                                    t.node.texClass !==\n                                                        l.TEXCLASS.VCENTER) ||\n                                                t.node.isKind(\"mstyle\") ||\n                                                t.node.isKind(\"mpadded\") ||\n                                                t.node.isKind(\"mphantom\") ||\n                                                t.node.isKind(\"semantics\"))) ||\n                                            (t.node.isKind(\"munderover\") &&\n                                                t.isMathAccent));\n\n                                    )\n                                        this.setBaseAccentsFor(t),\n                                            (t = t.childNodes[0]);\n                                    return (\n                                        t ||\n                                            (this.baseHasAccentOver =\n                                                this.baseHasAccentUnder =\n                                                    !1),\n                                        t || this.childNodes[0]\n                                    );\n                                }),\n                                (e.prototype.setBaseAccentsFor = function (t) {\n                                    t.node.isKind(\"munderover\") &&\n                                        (null === this.baseHasAccentOver &&\n                                            (this.baseHasAccentOver =\n                                                !!t.node.attributes.get(\n                                                    \"accent\"\n                                                )),\n                                        null === this.baseHasAccentUnder &&\n                                            (this.baseHasAccentUnder =\n                                                !!t.node.attributes.get(\n                                                    \"accentunder\"\n                                                )));\n                                }),\n                                (e.prototype.getSemanticBase = function () {\n                                    var t = this.node.attributes.getExplicit(\n                                        \"data-semantic-fencepointer\"\n                                    );\n                                    return this.getBaseFence(this.baseChild, t);\n                                }),\n                                (e.prototype.getBaseFence = function (t, e) {\n                                    var r, n;\n                                    if (!t || !t.node.attributes || !e)\n                                        return null;\n                                    if (\n                                        t.node.attributes.getExplicit(\n                                            \"data-semantic-id\"\n                                        ) === e\n                                    )\n                                        return t;\n                                    try {\n                                        for (\n                                            var o = a(t.childNodes),\n                                                i = o.next();\n                                            !i.done;\n                                            i = o.next()\n                                        ) {\n                                            var s = i.value,\n                                                l = this.getBaseFence(s, e);\n                                            if (l) return l;\n                                        }\n                                    } catch (t) {\n                                        r = { error: t };\n                                    } finally {\n                                        try {\n                                            i &&\n                                                !i.done &&\n                                                (n = o.return) &&\n                                                n.call(o);\n                                        } finally {\n                                            if (r) throw r.error;\n                                        }\n                                    }\n                                    return null;\n                                }),\n                                (e.prototype.getBaseScale = function () {\n                                    for (\n                                        var t = this.baseCore, e = 1;\n                                        t && t !== this;\n\n                                    ) {\n                                        (e *= t.getOuterBBox().rscale),\n                                            (t = t.parent);\n                                    }\n                                    return e;\n                                }),\n                                (e.prototype.getBaseIc = function () {\n                                    return (\n                                        this.baseCore.getOuterBBox().ic *\n                                        this.baseScale\n                                    );\n                                }),\n                                (e.prototype.getAdjustedIc = function () {\n                                    var t = this.baseCore.getOuterBBox();\n                                    return (\n                                        (t.ic ? 1.05 * t.ic + 0.05 : 0) *\n                                        this.baseScale\n                                    );\n                                }),\n                                (e.prototype.isCharBase = function () {\n                                    var t = this.baseCore;\n                                    return (\n                                        ((t.node.isKind(\"mo\") &&\n                                            null === t.size) ||\n                                            t.node.isKind(\"mi\") ||\n                                            t.node.isKind(\"mn\")) &&\n                                        1 === t.bbox.rscale &&\n                                        1 === Array.from(t.getText()).length\n                                    );\n                                }),\n                                (e.prototype.checkLineAccents = function () {\n                                    if (this.node.isKind(\"munderover\"))\n                                        if (this.node.isKind(\"mover\"))\n                                            this.isLineAbove =\n                                                this.isLineAccent(\n                                                    this.scriptChild\n                                                );\n                                        else if (this.node.isKind(\"munder\"))\n                                            this.isLineBelow =\n                                                this.isLineAccent(\n                                                    this.scriptChild\n                                                );\n                                        else {\n                                            (this.isLineAbove =\n                                                this.isLineAccent(\n                                                    this.overChild\n                                                )),\n                                                (this.isLineBelow =\n                                                    this.isLineAccent(\n                                                        this.underChild\n                                                    ));\n                                        }\n                                }),\n                                (e.prototype.isLineAccent = function (t) {\n                                    var e = t.coreMO().node;\n                                    return (\n                                        e.isToken && \"\\u2015\" === e.getText()\n                                    );\n                                }),\n                                (e.prototype.getBaseWidth = function () {\n                                    var t = this.baseChild.getOuterBBox();\n                                    return (\n                                        t.w * t.rscale -\n                                        (this.baseRemoveIc ? this.baseIc : 0) +\n                                        this.font.params.extra_ic\n                                    );\n                                }),\n                                (e.prototype.computeBBox = function (t, e) {\n                                    void 0 === e && (e = !1);\n                                    var r = this.getBaseWidth(),\n                                        n = i(this.getOffset(), 2),\n                                        o = n[0],\n                                        s = n[1];\n                                    t.append(this.baseChild.getOuterBBox()),\n                                        t.combine(\n                                            this.scriptChild.getOuterBBox(),\n                                            r + o,\n                                            s\n                                        ),\n                                        (t.w += this.font.params.scriptspace),\n                                        t.clean(),\n                                        this.setChildPWidths(e);\n                                }),\n                                (e.prototype.getOffset = function () {\n                                    return [0, 0];\n                                }),\n                                (e.prototype.baseCharZero = function (t) {\n                                    var e =\n                                            !!this.baseCore.node.attributes.get(\n                                                \"largeop\"\n                                            ),\n                                        r = this.baseScale;\n                                    return this.baseIsChar && !e && 1 === r\n                                        ? 0\n                                        : t;\n                                }),\n                                (e.prototype.getV = function () {\n                                    var t = this.baseCore.getOuterBBox(),\n                                        e = this.scriptChild.getOuterBBox(),\n                                        r = this.font.params,\n                                        n = this.length2em(\n                                            this.node.attributes.get(\n                                                \"subscriptshift\"\n                                            ),\n                                            r.sub1\n                                        );\n                                    return Math.max(\n                                        this.baseCharZero(\n                                            t.d * this.baseScale +\n                                                r.sub_drop * e.rscale\n                                        ),\n                                        n,\n                                        e.h * e.rscale - 0.8 * r.x_height\n                                    );\n                                }),\n                                (e.prototype.getU = function () {\n                                    var t = this.baseCore.getOuterBBox(),\n                                        e = this.scriptChild.getOuterBBox(),\n                                        r = this.font.params,\n                                        n = this.node.attributes.getList(\n                                            \"displaystyle\",\n                                            \"superscriptshift\"\n                                        ),\n                                        o = this.node.getProperty(\n                                            \"texprimestyle\"\n                                        )\n                                            ? r.sup3\n                                            : n.displaystyle\n                                              ? r.sup1\n                                              : r.sup2,\n                                        i = this.length2em(\n                                            n.superscriptshift,\n                                            o\n                                        );\n                                    return Math.max(\n                                        this.baseCharZero(\n                                            t.h * this.baseScale -\n                                                r.sup_drop * e.rscale\n                                        ),\n                                        i,\n                                        e.d * e.rscale + (1 / 4) * r.x_height\n                                    );\n                                }),\n                                (e.prototype.hasMovableLimits = function () {\n                                    var t =\n                                            this.node.attributes.get(\n                                                \"displaystyle\"\n                                            ),\n                                        e = this.baseChild.coreMO().node;\n                                    return (\n                                        !t &&\n                                        !!e.attributes.get(\"movablelimits\")\n                                    );\n                                }),\n                                (e.prototype.getOverKU = function (t, e) {\n                                    var r = this.node.attributes.get(\"accent\"),\n                                        n = this.font.params,\n                                        o = e.d * e.rscale,\n                                        i =\n                                            n.rule_thickness *\n                                            n.separation_factor,\n                                        s = this.baseHasAccentOver ? i : 0,\n                                        a = this.isLineAbove\n                                            ? 3 * n.rule_thickness\n                                            : i,\n                                        l =\n                                            (r\n                                                ? a\n                                                : Math.max(\n                                                      n.big_op_spacing1,\n                                                      n.big_op_spacing3 -\n                                                          Math.max(0, o)\n                                                  )) - s;\n                                    return [l, t.h * t.rscale + l + o];\n                                }),\n                                (e.prototype.getUnderKV = function (t, e) {\n                                    var r =\n                                            this.node.attributes.get(\n                                                \"accentunder\"\n                                            ),\n                                        n = this.font.params,\n                                        o = e.h * e.rscale,\n                                        i =\n                                            n.rule_thickness *\n                                            n.separation_factor,\n                                        s = this.baseHasAccentUnder ? i : 0,\n                                        a = this.isLineBelow\n                                            ? 3 * n.rule_thickness\n                                            : i,\n                                        l =\n                                            (r\n                                                ? a\n                                                : Math.max(\n                                                      n.big_op_spacing2,\n                                                      n.big_op_spacing4 - o\n                                                  )) - s;\n                                    return [l, -(t.d * t.rscale + l + o)];\n                                }),\n                                (e.prototype.getDeltaW = function (t, e) {\n                                    var r, n, o, l;\n                                    void 0 === e && (e = [0, 0, 0]);\n                                    var c = this.node.attributes.get(\"align\"),\n                                        u = t.map(function (t) {\n                                            return t.w * t.rscale;\n                                        });\n                                    u[0] -=\n                                        this.baseRemoveIc &&\n                                        !this.baseCore.node.attributes.get(\n                                            \"largeop\"\n                                        )\n                                            ? this.baseIc\n                                            : 0;\n                                    var p = Math.max.apply(\n                                            Math,\n                                            s([], i(u), !1)\n                                        ),\n                                        h = [],\n                                        f = 0;\n                                    try {\n                                        for (\n                                            var d = a(u.keys()), m = d.next();\n                                            !m.done;\n                                            m = d.next()\n                                        ) {\n                                            var y = m.value;\n                                            (h[y] =\n                                                (\"center\" === c\n                                                    ? (p - u[y]) / 2\n                                                    : \"right\" === c\n                                                      ? p - u[y]\n                                                      : 0) + e[y]),\n                                                h[y] < f && (f = -h[y]);\n                                        }\n                                    } catch (t) {\n                                        r = { error: t };\n                                    } finally {\n                                        try {\n                                            m &&\n                                                !m.done &&\n                                                (n = d.return) &&\n                                                n.call(d);\n                                        } finally {\n                                            if (r) throw r.error;\n                                        }\n                                    }\n                                    if (f)\n                                        try {\n                                            for (\n                                                var g = a(h.keys()),\n                                                    b = g.next();\n                                                !b.done;\n                                                b = g.next()\n                                            ) {\n                                                y = b.value;\n                                                h[y] += f;\n                                            }\n                                        } catch (t) {\n                                            o = { error: t };\n                                        } finally {\n                                            try {\n                                                b &&\n                                                    !b.done &&\n                                                    (l = g.return) &&\n                                                    l.call(g);\n                                            } finally {\n                                                if (o) throw o.error;\n                                            }\n                                        }\n                                    return (\n                                        [1, 2].map(function (e) {\n                                            return (h[e] += t[e]\n                                                ? t[e].dx * t[0].scale\n                                                : 0);\n                                        }),\n                                        h\n                                    );\n                                }),\n                                (e.prototype.getDelta = function (t) {\n                                    void 0 === t && (t = !1);\n                                    var e = this.node.attributes.get(\"accent\"),\n                                        r = this.baseCore.getOuterBBox(),\n                                        n = r.sk,\n                                        o = r.ic;\n                                    return (\n                                        ((e && !t ? n : 0) +\n                                            this.font.skewIcFactor * o) *\n                                        this.baseScale\n                                    );\n                                }),\n                                (e.prototype.stretchChildren = function () {\n                                    var t,\n                                        e,\n                                        r,\n                                        n,\n                                        o,\n                                        i,\n                                        s = [];\n                                    try {\n                                        for (\n                                            var l = a(this.childNodes),\n                                                c = l.next();\n                                            !c.done;\n                                            c = l.next()\n                                        ) {\n                                            (M = c.value).canStretch(2) &&\n                                                s.push(M);\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            c &&\n                                                !c.done &&\n                                                (e = l.return) &&\n                                                e.call(l);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                    var u = s.length,\n                                        p = this.childNodes.length;\n                                    if (u && p > 1) {\n                                        var h = 0,\n                                            f = u > 1 && u === p;\n                                        try {\n                                            for (\n                                                var d = a(this.childNodes),\n                                                    m = d.next();\n                                                !m.done;\n                                                m = d.next()\n                                            ) {\n                                                var y =\n                                                    0 ===\n                                                    (M = m.value).stretch.dir;\n                                                if (f || y) {\n                                                    var g = M.getOuterBBox(y),\n                                                        b = g.w,\n                                                        v = g.rscale;\n                                                    b * v > h && (h = b * v);\n                                                }\n                                            }\n                                        } catch (t) {\n                                            r = { error: t };\n                                        } finally {\n                                            try {\n                                                m &&\n                                                    !m.done &&\n                                                    (n = d.return) &&\n                                                    n.call(d);\n                                            } finally {\n                                                if (r) throw r.error;\n                                            }\n                                        }\n                                        try {\n                                            for (\n                                                var _ = a(s), S = _.next();\n                                                !S.done;\n                                                S = _.next()\n                                            ) {\n                                                var M;\n                                                (M = S.value)\n                                                    .coreMO()\n                                                    .getStretchedVariant([\n                                                        h / M.bbox.rscale,\n                                                    ]);\n                                            }\n                                        } catch (t) {\n                                            o = { error: t };\n                                        } finally {\n                                            try {\n                                                S &&\n                                                    !S.done &&\n                                                    (i = _.return) &&\n                                                    i.call(_);\n                                            } finally {\n                                                if (o) throw o.error;\n                                            }\n                                        }\n                                    }\n                                }),\n                                e\n                            );\n                        })(t)),\n                        (e.useIC = !0),\n                        e\n                    );\n                };\n            },\n            5806: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonSemanticsMixin = void 0),\n                    (e.CommonSemanticsMixin = function (t) {\n                        return (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return (\n                                n(e, t),\n                                (e.prototype.computeBBox = function (t, e) {\n                                    if (\n                                        (void 0 === e && (e = !1),\n                                        this.childNodes.length)\n                                    ) {\n                                        var r = this.childNodes[0].getBBox(),\n                                            n = r.w,\n                                            o = r.h,\n                                            i = r.d;\n                                        (t.w = n), (t.h = o), (t.d = i);\n                                    }\n                                }),\n                                e\n                            );\n                        })(t);\n                    });\n            },\n            5920: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (o =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                o.apply(this, arguments)\n                            );\n                        },\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CommonTeXFontMixin = void 0),\n                    (e.CommonTeXFontMixin = function (t) {\n                        var e;\n                        return (\n                            (e = (function (t) {\n                                function e() {\n                                    return (\n                                        (null !== t &&\n                                            t.apply(this, arguments)) ||\n                                        this\n                                    );\n                                }\n                                return (\n                                    n(e, t),\n                                    (e.prototype.getDelimiterData = function (\n                                        t\n                                    ) {\n                                        return (\n                                            this.getChar(\"-smallop\", t) ||\n                                            this.getChar(\"-size4\", t)\n                                        );\n                                    }),\n                                    e\n                                );\n                            })(t)),\n                            (e.NAME = \"TeX\"),\n                            (e.defaultVariants = s(\n                                s([], i(t.defaultVariants), !1),\n                                [\n                                    [\"-smallop\", \"normal\"],\n                                    [\"-largeop\", \"normal\"],\n                                    [\"-size3\", \"normal\"],\n                                    [\"-size4\", \"normal\"],\n                                    [\"-tex-calligraphic\", \"italic\"],\n                                    [\"-tex-bold-calligraphic\", \"bold-italic\"],\n                                    [\"-tex-oldstyle\", \"normal\"],\n                                    [\"-tex-bold-oldstyle\", \"bold\"],\n                                    [\"-tex-mathit\", \"italic\"],\n                                    [\"-tex-variant\", \"normal\"],\n                                ],\n                                !1\n                            )),\n                            (e.defaultCssFonts = o(o({}, t.defaultCssFonts), {\n                                \"-smallop\": [\"serif\", !1, !1],\n                                \"-largeop\": [\"serif\", !1, !1],\n                                \"-size3\": [\"serif\", !1, !1],\n                                \"-size4\": [\"serif\", !1, !1],\n                                \"-tex-calligraphic\": [\"cursive\", !0, !1],\n                                \"-tex-bold-calligraphic\": [\"cursive\", !0, !0],\n                                \"-tex-oldstyle\": [\"serif\", !1, !1],\n                                \"-tex-bold-oldstyle\": [\"serif\", !1, !0],\n                                \"-tex-mathit\": [\"serif\", !0, !1],\n                            })),\n                            (e.defaultSizeVariants = [\n                                \"normal\",\n                                \"-smallop\",\n                                \"-largeop\",\n                                \"-size3\",\n                                \"-size4\",\n                                \"-tex-variant\",\n                            ]),\n                            (e.defaultStretchVariants = [\"-size4\"]),\n                            e\n                        );\n                    });\n            },\n            3980: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.boldItalic = void 0),\n                    (e.boldItalic = {\n                        47: [0.711, 0.21, 0.894],\n                        305: [0.452, 0.008, 0.394, { sk: 0.0319 }],\n                        567: [0.451, 0.201, 0.439, { sk: 0.0958 }],\n                        8260: [0.711, 0.21, 0.894],\n                        8710: [0.711, 0, 0.958, { sk: 0.192 }],\n                        10744: [0.711, 0.21, 0.894],\n                    });\n            },\n            1103: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.bold = void 0),\n                    (e.bold = {\n                        33: [0.705, 0, 0.35],\n                        34: [0.694, -0.329, 0.603],\n                        35: [0.694, 0.193, 0.958],\n                        36: [0.75, 0.056, 0.575],\n                        37: [0.75, 0.056, 0.958],\n                        38: [0.705, 0.011, 0.894],\n                        39: [0.694, -0.329, 0.319],\n                        40: [0.75, 0.249, 0.447],\n                        41: [0.75, 0.249, 0.447],\n                        42: [0.75, -0.306, 0.575],\n                        43: [0.633, 0.131, 0.894],\n                        44: [0.171, 0.194, 0.319],\n                        45: [0.278, -0.166, 0.383],\n                        46: [0.171, 0, 0.319],\n                        47: [0.75, 0.25, 0.575],\n                        58: [0.444, 0, 0.319],\n                        59: [0.444, 0.194, 0.319],\n                        60: [0.587, 0.085, 0.894],\n                        61: [0.393, -0.109, 0.894],\n                        62: [0.587, 0.085, 0.894],\n                        63: [0.7, 0, 0.543],\n                        64: [0.699, 0.006, 0.894],\n                        91: [0.75, 0.25, 0.319],\n                        92: [0.75, 0.25, 0.575],\n                        93: [0.75, 0.25, 0.319],\n                        94: [0.694, -0.52, 0.575],\n                        95: [-0.01, 0.061, 0.575],\n                        96: [0.706, -0.503, 0.575],\n                        123: [0.75, 0.25, 0.575],\n                        124: [0.75, 0.249, 0.319],\n                        125: [0.75, 0.25, 0.575],\n                        126: [0.344, -0.202, 0.575],\n                        168: [0.695, -0.535, 0.575],\n                        172: [0.371, -0.061, 0.767],\n                        175: [0.607, -0.54, 0.575],\n                        176: [0.702, -0.536, 0.575],\n                        177: [0.728, 0.035, 0.894],\n                        180: [0.706, -0.503, 0.575],\n                        183: [0.336, -0.166, 0.319],\n                        215: [0.53, 0.028, 0.894],\n                        247: [0.597, 0.096, 0.894],\n                        305: [0.442, 0, 0.278, { sk: 0.0278 }],\n                        567: [0.442, 0.205, 0.306, { sk: 0.0833 }],\n                        697: [0.563, -0.033, 0.344],\n                        710: [0.694, -0.52, 0.575],\n                        711: [0.66, -0.515, 0.575],\n                        713: [0.607, -0.54, 0.575],\n                        714: [0.706, -0.503, 0.575],\n                        715: [0.706, -0.503, 0.575],\n                        728: [0.694, -0.5, 0.575],\n                        729: [0.695, -0.525, 0.575],\n                        730: [0.702, -0.536, 0.575],\n                        732: [0.694, -0.552, 0.575],\n                        768: [0.706, -0.503, 0],\n                        769: [0.706, -0.503, 0],\n                        770: [0.694, -0.52, 0],\n                        771: [0.694, -0.552, 0],\n                        772: [0.607, -0.54, 0],\n                        774: [0.694, -0.5, 0],\n                        775: [0.695, -0.525, 0],\n                        776: [0.695, -0.535, 0],\n                        778: [0.702, -0.536, 0],\n                        779: [0.714, -0.511, 0],\n                        780: [0.66, -0.515, 0],\n                        824: [0.711, 0.21, 0],\n                        8194: [0, 0, 0.5],\n                        8195: [0, 0, 0.999],\n                        8196: [0, 0, 0.333],\n                        8197: [0, 0, 0.25],\n                        8198: [0, 0, 0.167],\n                        8201: [0, 0, 0.167],\n                        8202: [0, 0, 0.083],\n                        8211: [0.3, -0.249, 0.575],\n                        8212: [0.3, -0.249, 1.15],\n                        8213: [0.3, -0.249, 1.15],\n                        8214: [0.75, 0.248, 0.575],\n                        8215: [-0.01, 0.061, 0.575],\n                        8216: [0.694, -0.329, 0.319],\n                        8217: [0.694, -0.329, 0.319],\n                        8220: [0.694, -0.329, 0.603],\n                        8221: [0.694, -0.329, 0.603],\n                        8224: [0.702, 0.211, 0.511],\n                        8225: [0.702, 0.202, 0.511],\n                        8226: [0.474, -0.028, 0.575],\n                        8230: [0.171, 0, 1.295],\n                        8242: [0.563, -0.033, 0.344],\n                        8243: [0.563, 0, 0.688],\n                        8244: [0.563, 0, 1.032],\n                        8254: [0.607, -0.54, 0.575],\n                        8260: [0.75, 0.25, 0.575],\n                        8279: [0.563, 0, 1.376],\n                        8407: [0.723, -0.513, 0.575],\n                        8463: [0.694, 0.008, 0.668, { sk: -0.0319 }],\n                        8467: [0.702, 0.019, 0.474, { sk: 0.128 }],\n                        8472: [0.461, 0.21, 0.74],\n                        8501: [0.694, 0, 0.703],\n                        8592: [0.518, 0.017, 1.15],\n                        8593: [0.694, 0.193, 0.575],\n                        8594: [0.518, 0.017, 1.15],\n                        8595: [0.694, 0.194, 0.575],\n                        8596: [0.518, 0.017, 1.15],\n                        8597: [0.767, 0.267, 0.575],\n                        8598: [0.724, 0.194, 1.15],\n                        8599: [0.724, 0.193, 1.15],\n                        8600: [0.694, 0.224, 1.15],\n                        8601: [0.694, 0.224, 1.15],\n                        8602: [0.711, 0.21, 1.15],\n                        8603: [0.711, 0.21, 1.15],\n                        8614: [0.518, 0.017, 1.15],\n                        8617: [0.518, 0.017, 1.282],\n                        8618: [0.518, 0.017, 1.282],\n                        8622: [0.711, 0.21, 1.15],\n                        8636: [0.518, -0.22, 1.15],\n                        8637: [0.281, 0.017, 1.15],\n                        8640: [0.518, -0.22, 1.15],\n                        8641: [0.281, 0.017, 1.15],\n                        8652: [0.718, 0.017, 1.15],\n                        8653: [0.711, 0.21, 1.15],\n                        8654: [0.711, 0.21, 1.15],\n                        8655: [0.711, 0.21, 1.15],\n                        8656: [0.547, 0.046, 1.15],\n                        8657: [0.694, 0.193, 0.703],\n                        8658: [0.547, 0.046, 1.15],\n                        8659: [0.694, 0.194, 0.703],\n                        8660: [0.547, 0.046, 1.15],\n                        8661: [0.767, 0.267, 0.703],\n                        8704: [0.694, 0.016, 0.639],\n                        8707: [0.694, 0, 0.639],\n                        8708: [0.711, 0.21, 0.639],\n                        8709: [0.767, 0.073, 0.575],\n                        8710: [0.698, 0, 0.958],\n                        8712: [0.587, 0.086, 0.767],\n                        8713: [0.711, 0.21, 0.767],\n                        8715: [0.587, 0.086, 0.767],\n                        8716: [0.711, 0.21, 0.767],\n                        8722: [0.281, -0.221, 0.894],\n                        8723: [0.537, 0.227, 0.894],\n                        8725: [0.75, 0.25, 0.575],\n                        8726: [0.75, 0.25, 0.575],\n                        8727: [0.472, -0.028, 0.575],\n                        8728: [0.474, -0.028, 0.575],\n                        8729: [0.474, -0.028, 0.575],\n                        8730: [0.82, 0.18, 0.958, { ic: 0.03 }],\n                        8733: [0.451, 0.008, 0.894],\n                        8734: [0.452, 0.008, 1.15],\n                        8736: [0.714, 0, 0.722],\n                        8739: [0.75, 0.249, 0.319],\n                        8740: [0.75, 0.249, 0.319],\n                        8741: [0.75, 0.248, 0.575],\n                        8742: [0.75, 0.248, 0.575],\n                        8743: [0.604, 0.017, 0.767],\n                        8744: [0.604, 0.016, 0.767],\n                        8745: [0.603, 0.016, 0.767],\n                        8746: [0.604, 0.016, 0.767],\n                        8747: [0.711, 0.211, 0.569, { ic: 0.063 }],\n                        8764: [0.391, -0.109, 0.894],\n                        8768: [0.583, 0.082, 0.319],\n                        8769: [0.711, 0.21, 0.894],\n                        8771: [0.502, 0, 0.894],\n                        8772: [0.711, 0.21, 0.894],\n                        8773: [0.638, 0.027, 0.894],\n                        8775: [0.711, 0.21, 0.894],\n                        8776: [0.524, -0.032, 0.894],\n                        8777: [0.711, 0.21, 0.894],\n                        8781: [0.533, 0.032, 0.894],\n                        8784: [0.721, -0.109, 0.894],\n                        8800: [0.711, 0.21, 0.894],\n                        8801: [0.505, 0, 0.894],\n                        8802: [0.711, 0.21, 0.894],\n                        8804: [0.697, 0.199, 0.894],\n                        8805: [0.697, 0.199, 0.894],\n                        8810: [0.617, 0.116, 1.15],\n                        8811: [0.618, 0.116, 1.15],\n                        8813: [0.711, 0.21, 0.894],\n                        8814: [0.711, 0.21, 0.894],\n                        8815: [0.711, 0.21, 0.894],\n                        8816: [0.711, 0.21, 0.894],\n                        8817: [0.711, 0.21, 0.894],\n                        8826: [0.585, 0.086, 0.894],\n                        8827: [0.586, 0.086, 0.894],\n                        8832: [0.711, 0.21, 0.894],\n                        8833: [0.711, 0.21, 0.894],\n                        8834: [0.587, 0.085, 0.894],\n                        8835: [0.587, 0.086, 0.894],\n                        8836: [0.711, 0.21, 0.894],\n                        8837: [0.711, 0.21, 0.894],\n                        8838: [0.697, 0.199, 0.894],\n                        8839: [0.697, 0.199, 0.894],\n                        8840: [0.711, 0.21, 0.894],\n                        8841: [0.711, 0.21, 0.894],\n                        8846: [0.604, 0.016, 0.767],\n                        8849: [0.697, 0.199, 0.894],\n                        8850: [0.697, 0.199, 0.894],\n                        8851: [0.604, 0, 0.767],\n                        8852: [0.604, 0, 0.767],\n                        8853: [0.632, 0.132, 0.894],\n                        8854: [0.632, 0.132, 0.894],\n                        8855: [0.632, 0.132, 0.894],\n                        8856: [0.632, 0.132, 0.894],\n                        8857: [0.632, 0.132, 0.894],\n                        8866: [0.693, 0, 0.703],\n                        8867: [0.693, 0, 0.703],\n                        8868: [0.694, 0, 0.894],\n                        8869: [0.693, 0, 0.894],\n                        8872: [0.75, 0.249, 0.974],\n                        8876: [0.711, 0.21, 0.703],\n                        8877: [0.75, 0.249, 0.974],\n                        8900: [0.523, 0.021, 0.575],\n                        8901: [0.336, -0.166, 0.319],\n                        8902: [0.502, 0, 0.575],\n                        8904: [0.54, 0.039, 1],\n                        8930: [0.711, 0.21, 0.894],\n                        8931: [0.711, 0.21, 0.894],\n                        8942: [0.951, 0.029, 0.319],\n                        8943: [0.336, -0.166, 1.295],\n                        8945: [0.871, -0.101, 1.323],\n                        8968: [0.75, 0.248, 0.511],\n                        8969: [0.75, 0.248, 0.511],\n                        8970: [0.749, 0.248, 0.511],\n                        8971: [0.749, 0.248, 0.511],\n                        8994: [0.405, -0.108, 1.15],\n                        8995: [0.392, -0.126, 1.15],\n                        9001: [0.75, 0.249, 0.447],\n                        9002: [0.75, 0.249, 0.447],\n                        9651: [0.711, 0, 1.022],\n                        9653: [0.711, 0, 1.022],\n                        9657: [0.54, 0.039, 0.575],\n                        9661: [0.5, 0.21, 1.022],\n                        9663: [0.5, 0.21, 1.022],\n                        9667: [0.539, 0.038, 0.575],\n                        9711: [0.711, 0.211, 1.15],\n                        9824: [0.719, 0.129, 0.894],\n                        9825: [0.711, 0.024, 0.894],\n                        9826: [0.719, 0.154, 0.894],\n                        9827: [0.719, 0.129, 0.894],\n                        9837: [0.75, 0.017, 0.447],\n                        9838: [0.741, 0.223, 0.447],\n                        9839: [0.724, 0.224, 0.447],\n                        10072: [0.75, 0.249, 0.319],\n                        10216: [0.75, 0.249, 0.447],\n                        10217: [0.75, 0.249, 0.447],\n                        10229: [0.518, 0.017, 1.805],\n                        10230: [0.518, 0.017, 1.833],\n                        10231: [0.518, 0.017, 2.126],\n                        10232: [0.547, 0.046, 1.868],\n                        10233: [0.547, 0.046, 1.87],\n                        10234: [0.547, 0.046, 2.126],\n                        10236: [0.518, 0.017, 1.833],\n                        10744: [0.711, 0.21, 0.894],\n                        10799: [0.53, 0.028, 0.894],\n                        10815: [0.686, 0, 0.9],\n                        10927: [0.696, 0.199, 0.894],\n                        10928: [0.697, 0.199, 0.894],\n                        12296: [0.75, 0.249, 0.447],\n                        12297: [0.75, 0.249, 0.447],\n                    });\n            },\n            9124: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.delimiters =\n                        e.VSIZES =\n                        e.HDW3 =\n                        e.HDW2 =\n                        e.HDW1 =\n                            void 0);\n                var n = r(5884);\n                (e.HDW1 = [0.75, 0.25, 0.875]),\n                    (e.HDW2 = [0.85, 0.349, 0.667]),\n                    (e.HDW3 = [0.583, 0.082, 0.5]),\n                    (e.VSIZES = [1, 1.2, 1.8, 2.4, 3]);\n                var o = { c: 47, dir: n.V, sizes: e.VSIZES },\n                    i = {\n                        c: 175,\n                        dir: n.H,\n                        sizes: [0.5],\n                        stretch: [0, 175],\n                        HDW: [0.59, -0.544, 0.5],\n                    },\n                    s = {\n                        c: 710,\n                        dir: n.H,\n                        sizes: [0.5, 0.556, 1, 1.444, 1.889],\n                    },\n                    a = {\n                        c: 732,\n                        dir: n.H,\n                        sizes: [0.5, 0.556, 1, 1.444, 1.889],\n                    },\n                    l = {\n                        c: 8211,\n                        dir: n.H,\n                        sizes: [0.5],\n                        stretch: [0, 8211],\n                        HDW: [0.285, -0.248, 0.5],\n                    },\n                    c = {\n                        c: 8592,\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [8592, 8722],\n                        HDW: e.HDW3,\n                    },\n                    u = {\n                        c: 8594,\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [0, 8722, 8594],\n                        HDW: e.HDW3,\n                    },\n                    p = {\n                        c: 8596,\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [8592, 8722, 8594],\n                        HDW: e.HDW3,\n                    },\n                    h = {\n                        c: 8612,\n                        dir: n.H,\n                        stretch: [8592, 8722, 8739],\n                        HDW: e.HDW3,\n                        min: 1.278,\n                    },\n                    f = {\n                        c: 8614,\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [8739, 8722, 8594],\n                        HDW: e.HDW3,\n                    },\n                    d = {\n                        c: 8656,\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [8656, 61],\n                        HDW: e.HDW3,\n                    },\n                    m = {\n                        c: 8658,\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [0, 61, 8658],\n                        HDW: e.HDW3,\n                    },\n                    y = {\n                        c: 8660,\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [8656, 61, 8658],\n                        HDW: e.HDW3,\n                    },\n                    g = {\n                        c: 8722,\n                        dir: n.H,\n                        sizes: [0.778],\n                        stretch: [0, 8722],\n                        HDW: e.HDW3,\n                    },\n                    b = {\n                        c: 8739,\n                        dir: n.V,\n                        sizes: [1],\n                        stretch: [0, 8739],\n                        HDW: [0.627, 0.015, 0.333],\n                    },\n                    v = {\n                        c: 9180,\n                        dir: n.H,\n                        sizes: [0.778, 1],\n                        schar: [8994, 8994],\n                        variants: [5, 0],\n                        stretch: [57680, 57684, 57681],\n                        HDW: [0.32, 0.2, 0.5],\n                    },\n                    _ = {\n                        c: 9181,\n                        dir: n.H,\n                        sizes: [0.778, 1],\n                        schar: [8995, 8995],\n                        variants: [5, 0],\n                        stretch: [57682, 57684, 57683],\n                        HDW: [0.32, 0.2, 0.5],\n                    },\n                    S = {\n                        c: 9182,\n                        dir: n.H,\n                        stretch: [57680, 57684, 57681, 57685],\n                        HDW: [0.32, 0.2, 0.5],\n                        min: 1.8,\n                    },\n                    M = {\n                        c: 9183,\n                        dir: n.H,\n                        stretch: [57682, 57684, 57683, 57686],\n                        HDW: [0.32, 0.2, 0.5],\n                        min: 1.8,\n                    },\n                    O = { c: 10216, dir: n.V, sizes: e.VSIZES },\n                    x = { c: 10217, dir: n.V, sizes: e.VSIZES },\n                    E = {\n                        c: 10502,\n                        dir: n.H,\n                        stretch: [8656, 61, 8739],\n                        HDW: e.HDW3,\n                        min: 1.278,\n                    },\n                    A = {\n                        c: 10503,\n                        dir: n.H,\n                        stretch: [8872, 61, 8658],\n                        HDW: e.HDW3,\n                        min: 1.278,\n                    };\n                e.delimiters = {\n                    40: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [9115, 9116, 9117],\n                        HDW: [0.85, 0.349, 0.875],\n                    },\n                    41: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [9118, 9119, 9120],\n                        HDW: [0.85, 0.349, 0.875],\n                    },\n                    45: g,\n                    47: o,\n                    61: {\n                        dir: n.H,\n                        sizes: [0.778],\n                        stretch: [0, 61],\n                        HDW: e.HDW3,\n                    },\n                    91: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [9121, 9122, 9123],\n                        HDW: e.HDW2,\n                    },\n                    92: { dir: n.V, sizes: e.VSIZES },\n                    93: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [9124, 9125, 9126],\n                        HDW: e.HDW2,\n                    },\n                    94: s,\n                    95: l,\n                    123: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [9127, 9130, 9129, 9128],\n                        HDW: [0.85, 0.349, 0.889],\n                    },\n                    124: {\n                        dir: n.V,\n                        sizes: [1],\n                        stretch: [0, 8739],\n                        HDW: [0.75, 0.25, 0.333],\n                    },\n                    125: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [9131, 9130, 9133, 9132],\n                        HDW: [0.85, 0.349, 0.889],\n                    },\n                    126: a,\n                    175: i,\n                    710: s,\n                    713: i,\n                    732: a,\n                    770: s,\n                    771: a,\n                    818: l,\n                    8211: l,\n                    8212: l,\n                    8213: l,\n                    8214: {\n                        dir: n.V,\n                        sizes: [0.602, 1],\n                        schar: [0, 8741],\n                        variants: [1, 0],\n                        stretch: [0, 8741],\n                        HDW: [0.602, 0, 0.556],\n                    },\n                    8215: l,\n                    8254: i,\n                    8407: u,\n                    8592: c,\n                    8593: {\n                        dir: n.V,\n                        sizes: [0.888],\n                        stretch: [8593, 9168],\n                        HDW: [0.6, 0, 0.667],\n                    },\n                    8594: u,\n                    8595: {\n                        dir: n.V,\n                        sizes: [0.888],\n                        stretch: [0, 9168, 8595],\n                        HDW: [0.6, 0, 0.667],\n                    },\n                    8596: p,\n                    8597: {\n                        dir: n.V,\n                        sizes: [1.044],\n                        stretch: [8593, 9168, 8595],\n                        HDW: e.HDW1,\n                    },\n                    8606: {\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [8606, 8722],\n                        HDW: e.HDW3,\n                    },\n                    8608: {\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [0, 8722, 8608],\n                        HDW: e.HDW3,\n                    },\n                    8612: h,\n                    8613: {\n                        dir: n.V,\n                        stretch: [8593, 9168, 8869],\n                        HDW: e.HDW1,\n                        min: 1.555,\n                    },\n                    8614: f,\n                    8615: {\n                        dir: n.V,\n                        stretch: [8868, 9168, 8595],\n                        HDW: e.HDW1,\n                        min: 1.555,\n                    },\n                    8624: {\n                        dir: n.V,\n                        sizes: [0.722],\n                        stretch: [8624, 9168],\n                        HDW: e.HDW1,\n                    },\n                    8625: {\n                        dir: n.V,\n                        sizes: [0.722],\n                        stretch: [8625, 9168],\n                        HDW: e.HDW1,\n                    },\n                    8636: {\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [8636, 8722],\n                        HDW: e.HDW3,\n                    },\n                    8637: {\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [8637, 8722],\n                        HDW: e.HDW3,\n                    },\n                    8638: {\n                        dir: n.V,\n                        sizes: [0.888],\n                        stretch: [8638, 9168],\n                        HDW: e.HDW1,\n                    },\n                    8639: {\n                        dir: n.V,\n                        sizes: [0.888],\n                        stretch: [8639, 9168],\n                        HDW: e.HDW1,\n                    },\n                    8640: {\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [0, 8722, 8640],\n                        HDW: e.HDW3,\n                    },\n                    8641: {\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [0, 8722, 8641],\n                        HDW: e.HDW3,\n                    },\n                    8642: {\n                        dir: n.V,\n                        sizes: [0.888],\n                        stretch: [0, 9168, 8642],\n                        HDW: e.HDW1,\n                    },\n                    8643: {\n                        dir: n.V,\n                        sizes: [0.888],\n                        stretch: [0, 9168, 8643],\n                        HDW: e.HDW1,\n                    },\n                    8656: d,\n                    8657: {\n                        dir: n.V,\n                        sizes: [0.888],\n                        stretch: [8657, 8214],\n                        HDW: [0.599, 0, 0.778],\n                    },\n                    8658: m,\n                    8659: {\n                        dir: n.V,\n                        sizes: [0.888],\n                        stretch: [0, 8214, 8659],\n                        HDW: [0.6, 0, 0.778],\n                    },\n                    8660: y,\n                    8661: {\n                        dir: n.V,\n                        sizes: [1.044],\n                        stretch: [8657, 8214, 8659],\n                        HDW: [0.75, 0.25, 0.778],\n                    },\n                    8666: {\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [8666, 8801],\n                        HDW: [0.464, -0.036, 0.5],\n                    },\n                    8667: {\n                        dir: n.H,\n                        sizes: [1],\n                        stretch: [0, 8801, 8667],\n                        HDW: [0.464, -0.036, 0.5],\n                    },\n                    8722: g,\n                    8725: o,\n                    8730: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [57345, 57344, 9143],\n                        fullExt: [0.65, 2.3],\n                        HDW: [0.85, 0.35, 1.056],\n                    },\n                    8739: b,\n                    8741: {\n                        dir: n.V,\n                        sizes: [1],\n                        stretch: [0, 8741],\n                        HDW: [0.627, 0.015, 0.556],\n                    },\n                    8968: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [9121, 9122],\n                        HDW: e.HDW2,\n                    },\n                    8969: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [9124, 9125],\n                        HDW: e.HDW2,\n                    },\n                    8970: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [0, 9122, 9123],\n                        HDW: e.HDW2,\n                    },\n                    8971: {\n                        dir: n.V,\n                        sizes: e.VSIZES,\n                        stretch: [0, 9125, 9126],\n                        HDW: e.HDW2,\n                    },\n                    8978: v,\n                    8994: v,\n                    8995: _,\n                    9001: O,\n                    9002: x,\n                    9130: {\n                        dir: n.V,\n                        sizes: [0.32],\n                        stretch: [9130, 9130, 9130],\n                        HDW: [0.29, 0.015, 0.889],\n                    },\n                    9135: l,\n                    9136: {\n                        dir: n.V,\n                        sizes: [0.989],\n                        stretch: [9127, 9130, 9133],\n                        HDW: [0.75, 0.25, 0.889],\n                    },\n                    9137: {\n                        dir: n.V,\n                        sizes: [0.989],\n                        stretch: [9131, 9130, 9129],\n                        HDW: [0.75, 0.25, 0.889],\n                    },\n                    9140: {\n                        dir: n.H,\n                        stretch: [9484, 8722, 9488],\n                        HDW: e.HDW3,\n                        min: 1,\n                    },\n                    9141: {\n                        dir: n.H,\n                        stretch: [9492, 8722, 9496],\n                        HDW: e.HDW3,\n                        min: 1,\n                    },\n                    9168: {\n                        dir: n.V,\n                        sizes: [0.602, 1],\n                        schar: [0, 8739],\n                        variants: [1, 0],\n                        stretch: [0, 8739],\n                        HDW: [0.602, 0, 0.333],\n                    },\n                    9180: v,\n                    9181: _,\n                    9182: S,\n                    9183: M,\n                    9184: {\n                        dir: n.H,\n                        stretch: [714, 713, 715],\n                        HDW: [0.59, -0.544, 0.5],\n                        min: 1,\n                    },\n                    9185: {\n                        dir: n.H,\n                        stretch: [715, 713, 714],\n                        HDW: [0.59, -0.544, 0.5],\n                        min: 1,\n                    },\n                    9472: l,\n                    10072: b,\n                    10216: O,\n                    10217: x,\n                    10222: {\n                        dir: n.V,\n                        sizes: [0.989],\n                        stretch: [9127, 9130, 9129],\n                        HDW: [0.75, 0.25, 0.889],\n                    },\n                    10223: {\n                        dir: n.V,\n                        sizes: [0.989],\n                        stretch: [9131, 9130, 9133],\n                        HDW: [0.75, 0.25, 0.889],\n                    },\n                    10229: c,\n                    10230: u,\n                    10231: p,\n                    10232: d,\n                    10233: m,\n                    10234: y,\n                    10235: h,\n                    10236: f,\n                    10237: E,\n                    10238: A,\n                    10502: E,\n                    10503: A,\n                    10574: {\n                        dir: n.H,\n                        stretch: [8636, 8722, 8640],\n                        HDW: e.HDW3,\n                        min: 2,\n                    },\n                    10575: {\n                        dir: n.V,\n                        stretch: [8638, 9168, 8642],\n                        HDW: e.HDW1,\n                        min: 1.776,\n                    },\n                    10576: {\n                        dir: n.H,\n                        stretch: [8637, 8722, 8641],\n                        HDW: e.HDW3,\n                        min: 2,\n                    },\n                    10577: {\n                        dir: n.V,\n                        stretch: [8639, 9168, 8643],\n                        HDW: e.HDW1,\n                        min: 0.5,\n                    },\n                    10586: {\n                        dir: n.H,\n                        stretch: [8636, 8722, 8739],\n                        HDW: e.HDW3,\n                        min: 1.278,\n                    },\n                    10587: {\n                        dir: n.H,\n                        stretch: [8739, 8722, 8640],\n                        HDW: e.HDW3,\n                        min: 1.278,\n                    },\n                    10588: {\n                        dir: n.V,\n                        stretch: [8638, 9168, 8869],\n                        HDW: e.HDW1,\n                        min: 1.556,\n                    },\n                    10589: {\n                        dir: n.V,\n                        stretch: [8868, 9168, 8642],\n                        HDW: e.HDW1,\n                        min: 1.556,\n                    },\n                    10590: {\n                        dir: n.H,\n                        stretch: [8637, 8722, 8739],\n                        HDW: e.HDW3,\n                        min: 1.278,\n                    },\n                    10591: {\n                        dir: n.H,\n                        stretch: [8739, 8722, 8641],\n                        HDW: e.HDW3,\n                        min: 1.278,\n                    },\n                    10592: {\n                        dir: n.V,\n                        stretch: [8639, 9168, 8869],\n                        HDW: e.HDW1,\n                        min: 1.776,\n                    },\n                    10593: {\n                        dir: n.V,\n                        stretch: [8868, 9168, 8643],\n                        HDW: e.HDW1,\n                        min: 1.776,\n                    },\n                    12296: O,\n                    12297: x,\n                    65079: S,\n                    65080: M,\n                };\n            },\n            6001: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.doubleStruck = void 0),\n                    (e.doubleStruck = {});\n            },\n            3696: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.frakturBold = void 0),\n                    (e.frakturBold = {\n                        33: [0.689, 0.012, 0.349],\n                        34: [0.695, -0.432, 0.254],\n                        38: [0.696, 0.016, 0.871],\n                        39: [0.695, -0.436, 0.25],\n                        40: [0.737, 0.186, 0.459],\n                        41: [0.735, 0.187, 0.459],\n                        42: [0.692, -0.449, 0.328],\n                        43: [0.598, 0.082, 0.893],\n                        44: [0.107, 0.191, 0.328],\n                        45: [0.275, -0.236, 0.893],\n                        46: [0.102, 0.015, 0.328],\n                        47: [0.721, 0.182, 0.593],\n                        48: [0.501, 0.012, 0.593],\n                        49: [0.489, 0, 0.593],\n                        50: [0.491, 0, 0.593],\n                        51: [0.487, 0.193, 0.593],\n                        52: [0.495, 0.196, 0.593],\n                        53: [0.481, 0.19, 0.593],\n                        54: [0.704, 0.012, 0.593],\n                        55: [0.479, 0.197, 0.593],\n                        56: [0.714, 0.005, 0.593],\n                        57: [0.487, 0.195, 0.593],\n                        58: [0.457, 0.012, 0.255],\n                        59: [0.458, 0.19, 0.255],\n                        61: [0.343, -0.168, 0.582],\n                        63: [0.697, 0.014, 0.428],\n                        91: [0.74, 0.13, 0.257],\n                        93: [0.738, 0.132, 0.257],\n                        94: [0.734, -0.452, 0.59],\n                        8216: [0.708, -0.411, 0.254],\n                        8217: [0.692, -0.394, 0.254],\n                        8260: [0.721, 0.182, 0.593],\n                        58113: [0.63, 0.027, 0.587],\n                        58114: [0.693, 0.212, 0.394, { ic: 0.014 }],\n                        58115: [0.681, 0.219, 0.387],\n                        58116: [0.473, 0.212, 0.593],\n                        58117: [0.684, 0.027, 0.393],\n                        58120: [0.679, 0.22, 0.981],\n                        58121: [0.717, 0.137, 0.727],\n                    });\n            },\n            9587: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.fraktur = void 0),\n                    (e.fraktur = {\n                        33: [0.689, 0.012, 0.296],\n                        34: [0.695, -0.432, 0.215],\n                        38: [0.698, 0.011, 0.738],\n                        39: [0.695, -0.436, 0.212],\n                        40: [0.737, 0.186, 0.389],\n                        41: [0.735, 0.187, 0.389],\n                        42: [0.692, -0.449, 0.278],\n                        43: [0.598, 0.082, 0.756],\n                        44: [0.107, 0.191, 0.278],\n                        45: [0.275, -0.236, 0.756],\n                        46: [0.102, 0.015, 0.278],\n                        47: [0.721, 0.182, 0.502],\n                        48: [0.492, 0.013, 0.502],\n                        49: [0.468, 0, 0.502],\n                        50: [0.474, 0, 0.502],\n                        51: [0.473, 0.182, 0.502],\n                        52: [0.476, 0.191, 0.502],\n                        53: [0.458, 0.184, 0.502],\n                        54: [0.7, 0.013, 0.502],\n                        55: [0.468, 0.181, 0.502],\n                        56: [0.705, 0.01, 0.502],\n                        57: [0.469, 0.182, 0.502],\n                        58: [0.457, 0.012, 0.216],\n                        59: [0.458, 0.189, 0.216],\n                        61: [0.368, -0.132, 0.756],\n                        63: [0.693, 0.011, 0.362],\n                        91: [0.74, 0.13, 0.278],\n                        93: [0.738, 0.131, 0.278],\n                        94: [0.734, -0.452, 0.5],\n                        8216: [0.708, -0.41, 0.215],\n                        8217: [0.692, -0.395, 0.215],\n                        8260: [0.721, 0.182, 0.502],\n                        58112: [0.683, 0.032, 0.497],\n                        58113: [0.616, 0.03, 0.498],\n                        58114: [0.68, 0.215, 0.333],\n                        58115: [0.679, 0.224, 0.329],\n                        58116: [0.471, 0.214, 0.503],\n                        58117: [0.686, 0.02, 0.333],\n                        58118: [0.577, 0.021, 0.334, { ic: 0.013 }],\n                        58119: [0.475, 0.022, 0.501, { ic: 0.013 }],\n                    });\n            },\n            8348: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.italic = void 0),\n                    (e.italic = {\n                        33: [0.716, 0, 0.307, { ic: 0.073 }],\n                        34: [0.694, -0.379, 0.514, { ic: 0.024 }],\n                        35: [0.694, 0.194, 0.818, { ic: 0.01 }],\n                        37: [0.75, 0.056, 0.818, { ic: 0.029 }],\n                        38: [0.716, 0.022, 0.767, { ic: 0.035 }],\n                        39: [0.694, -0.379, 0.307, { ic: 0.07 }],\n                        40: [0.75, 0.25, 0.409, { ic: 0.108 }],\n                        41: [0.75, 0.25, 0.409],\n                        42: [0.75, -0.32, 0.511, { ic: 0.073 }],\n                        43: [0.557, 0.057, 0.767],\n                        44: [0.121, 0.194, 0.307],\n                        45: [0.251, -0.18, 0.358],\n                        46: [0.121, 0, 0.307],\n                        47: [0.716, 0.215, 0.778],\n                        48: [0.665, 0.021, 0.511, { ic: 0.051 }],\n                        49: [0.666, 0, 0.511],\n                        50: [0.666, 0.022, 0.511, { ic: 0.04 }],\n                        51: [0.666, 0.022, 0.511, { ic: 0.051 }],\n                        52: [0.666, 0.194, 0.511],\n                        53: [0.666, 0.022, 0.511, { ic: 0.056 }],\n                        54: [0.665, 0.022, 0.511, { ic: 0.054 }],\n                        55: [0.666, 0.022, 0.511, { ic: 0.123 }],\n                        56: [0.666, 0.021, 0.511, { ic: 0.042 }],\n                        57: [0.666, 0.022, 0.511, { ic: 0.042 }],\n                        58: [0.431, 0, 0.307],\n                        59: [0.431, 0.194, 0.307],\n                        61: [0.367, -0.133, 0.767],\n                        63: [0.716, 0, 0.511, { ic: 0.04 }],\n                        64: [0.705, 0.011, 0.767, { ic: 0.022 }],\n                        91: [0.75, 0.25, 0.307, { ic: 0.139 }],\n                        93: [0.75, 0.25, 0.307, { ic: 0.052 }],\n                        94: [0.694, -0.527, 0.511, { ic: 0.017 }],\n                        95: [-0.025, 0.062, 0.511, { ic: 0.043 }],\n                        126: [0.318, -0.208, 0.511, { ic: 0.06 }],\n                        305: [0.441, 0.01, 0.307, { ic: 0.033 }],\n                        567: [0.442, 0.204, 0.332],\n                        768: [0.697, -0.5, 0],\n                        769: [0.697, -0.5, 0, { ic: 0.039 }],\n                        770: [0.694, -0.527, 0, { ic: 0.017 }],\n                        771: [0.668, -0.558, 0, { ic: 0.06 }],\n                        772: [0.589, -0.544, 0, { ic: 0.054 }],\n                        774: [0.694, -0.515, 0, { ic: 0.062 }],\n                        775: [0.669, -0.548, 0],\n                        776: [0.669, -0.554, 0, { ic: 0.045 }],\n                        778: [0.716, -0.542, 0],\n                        779: [0.697, -0.503, 0, { ic: 0.065 }],\n                        780: [0.638, -0.502, 0, { ic: 0.029 }],\n                        989: [0.605, 0.085, 0.778],\n                        8211: [0.285, -0.248, 0.511, { ic: 0.043 }],\n                        8212: [0.285, -0.248, 1.022, { ic: 0.016 }],\n                        8213: [0.285, -0.248, 1.022, { ic: 0.016 }],\n                        8215: [-0.025, 0.062, 0.511, { ic: 0.043 }],\n                        8216: [0.694, -0.379, 0.307, { ic: 0.055 }],\n                        8217: [0.694, -0.379, 0.307, { ic: 0.07 }],\n                        8220: [0.694, -0.379, 0.514, { ic: 0.092 }],\n                        8221: [0.694, -0.379, 0.514, { ic: 0.024 }],\n                        8260: [0.716, 0.215, 0.778],\n                        8463: [0.695, 0.013, 0.54, { ic: 0.022 }],\n                        8710: [0.716, 0, 0.833, { sk: 0.167 }],\n                        10744: [0.716, 0.215, 0.778],\n                    });\n            },\n            1376: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.largeop = void 0),\n                    (e.largeop = {\n                        40: [1.15, 0.649, 0.597],\n                        41: [1.15, 0.649, 0.597],\n                        47: [1.15, 0.649, 0.811],\n                        91: [1.15, 0.649, 0.472],\n                        92: [1.15, 0.649, 0.811],\n                        93: [1.15, 0.649, 0.472],\n                        123: [1.15, 0.649, 0.667],\n                        125: [1.15, 0.649, 0.667],\n                        710: [0.772, -0.565, 1],\n                        732: [0.75, -0.611, 1],\n                        770: [0.772, -0.565, 0],\n                        771: [0.75, -0.611, 0],\n                        8214: [0.602, 0, 0.778],\n                        8260: [1.15, 0.649, 0.811],\n                        8593: [0.6, 0, 0.667],\n                        8595: [0.6, 0, 0.667],\n                        8657: [0.599, 0, 0.778],\n                        8659: [0.6, 0, 0.778],\n                        8719: [0.95, 0.45, 1.278],\n                        8720: [0.95, 0.45, 1.278],\n                        8721: [0.95, 0.45, 1.444],\n                        8730: [1.15, 0.65, 1, { ic: 0.02 }],\n                        8739: [0.627, 0.015, 0.333],\n                        8741: [0.627, 0.015, 0.556],\n                        8747: [1.36, 0.862, 0.556, { ic: 0.388 }],\n                        8748: [1.36, 0.862, 1.084, { ic: 0.388 }],\n                        8749: [1.36, 0.862, 1.592, { ic: 0.388 }],\n                        8750: [1.36, 0.862, 0.556, { ic: 0.388 }],\n                        8896: [0.95, 0.45, 1.111],\n                        8897: [0.95, 0.45, 1.111],\n                        8898: [0.949, 0.45, 1.111],\n                        8899: [0.95, 0.449, 1.111],\n                        8968: [1.15, 0.649, 0.528],\n                        8969: [1.15, 0.649, 0.528],\n                        8970: [1.15, 0.649, 0.528],\n                        8971: [1.15, 0.649, 0.528],\n                        9001: [1.15, 0.649, 0.611],\n                        9002: [1.15, 0.649, 0.611],\n                        9168: [0.602, 0, 0.667],\n                        10072: [0.627, 0.015, 0.333],\n                        10216: [1.15, 0.649, 0.611],\n                        10217: [1.15, 0.649, 0.611],\n                        10752: [0.949, 0.449, 1.511],\n                        10753: [0.949, 0.449, 1.511],\n                        10754: [0.949, 0.449, 1.511],\n                        10756: [0.95, 0.449, 1.111],\n                        10758: [0.95, 0.45, 1.111],\n                        10764: [1.36, 0.862, 2.168, { ic: 0.388 }],\n                        12296: [1.15, 0.649, 0.611],\n                        12297: [1.15, 0.649, 0.611],\n                    });\n            },\n            1439: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.monospace = void 0),\n                    (e.monospace = {\n                        32: [0, 0, 0.525],\n                        33: [0.622, 0, 0.525],\n                        34: [0.623, -0.333, 0.525],\n                        35: [0.611, 0, 0.525],\n                        36: [0.694, 0.082, 0.525],\n                        37: [0.694, 0.083, 0.525],\n                        38: [0.622, 0.011, 0.525],\n                        39: [0.611, -0.287, 0.525],\n                        40: [0.694, 0.082, 0.525],\n                        41: [0.694, 0.082, 0.525],\n                        42: [0.52, -0.09, 0.525],\n                        43: [0.531, -0.081, 0.525],\n                        44: [0.14, 0.139, 0.525],\n                        45: [0.341, -0.271, 0.525],\n                        46: [0.14, 0, 0.525],\n                        47: [0.694, 0.083, 0.525],\n                        58: [0.431, 0, 0.525],\n                        59: [0.431, 0.139, 0.525],\n                        60: [0.557, -0.055, 0.525],\n                        61: [0.417, -0.195, 0.525],\n                        62: [0.557, -0.055, 0.525],\n                        63: [0.617, 0, 0.525],\n                        64: [0.617, 0.006, 0.525],\n                        91: [0.694, 0.082, 0.525],\n                        92: [0.694, 0.083, 0.525],\n                        93: [0.694, 0.082, 0.525],\n                        94: [0.611, -0.46, 0.525],\n                        95: [-0.025, 0.095, 0.525],\n                        96: [0.681, -0.357, 0.525],\n                        123: [0.694, 0.083, 0.525],\n                        124: [0.694, 0.082, 0.525],\n                        125: [0.694, 0.083, 0.525],\n                        126: [0.611, -0.466, 0.525],\n                        127: [0.612, -0.519, 0.525],\n                        160: [0, 0, 0.525],\n                        305: [0.431, 0, 0.525],\n                        567: [0.431, 0.228, 0.525],\n                        697: [0.623, -0.334, 0.525],\n                        768: [0.611, -0.485, 0],\n                        769: [0.611, -0.485, 0],\n                        770: [0.611, -0.46, 0],\n                        771: [0.611, -0.466, 0],\n                        772: [0.577, -0.5, 0],\n                        774: [0.611, -0.504, 0],\n                        776: [0.612, -0.519, 0],\n                        778: [0.619, -0.499, 0],\n                        780: [0.577, -0.449, 0],\n                        913: [0.623, 0, 0.525],\n                        914: [0.611, 0, 0.525],\n                        915: [0.611, 0, 0.525],\n                        916: [0.623, 0, 0.525],\n                        917: [0.611, 0, 0.525],\n                        918: [0.611, 0, 0.525],\n                        919: [0.611, 0, 0.525],\n                        920: [0.621, 0.01, 0.525],\n                        921: [0.611, 0, 0.525],\n                        922: [0.611, 0, 0.525],\n                        923: [0.623, 0, 0.525],\n                        924: [0.611, 0, 0.525],\n                        925: [0.611, 0, 0.525],\n                        926: [0.611, 0, 0.525],\n                        927: [0.621, 0.01, 0.525],\n                        928: [0.611, 0, 0.525],\n                        929: [0.611, 0, 0.525],\n                        931: [0.611, 0, 0.525],\n                        932: [0.611, 0, 0.525],\n                        933: [0.622, 0, 0.525],\n                        934: [0.611, 0, 0.525],\n                        935: [0.611, 0, 0.525],\n                        936: [0.611, 0, 0.525],\n                        937: [0.622, 0, 0.525],\n                        8215: [-0.025, 0.095, 0.525],\n                        8242: [0.623, -0.334, 0.525],\n                        8243: [0.623, 0, 1.05],\n                        8244: [0.623, 0, 1.575],\n                        8260: [0.694, 0.083, 0.525],\n                        8279: [0.623, 0, 2.1],\n                        8710: [0.623, 0, 0.525],\n                    });\n            },\n            331: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.normal = void 0),\n                    (e.normal = {\n                        32: [0, 0, 0.25],\n                        33: [0.716, 0, 0.278],\n                        34: [0.694, -0.379, 0.5],\n                        35: [0.694, 0.194, 0.833],\n                        36: [0.75, 0.056, 0.5],\n                        37: [0.75, 0.056, 0.833],\n                        38: [0.716, 0.022, 0.778],\n                        39: [0.694, -0.379, 0.278],\n                        40: [0.75, 0.25, 0.389],\n                        41: [0.75, 0.25, 0.389],\n                        42: [0.75, -0.32, 0.5],\n                        43: [0.583, 0.082, 0.778],\n                        44: [0.121, 0.194, 0.278],\n                        45: [0.252, -0.179, 0.333],\n                        46: [0.12, 0, 0.278],\n                        47: [0.75, 0.25, 0.5],\n                        48: [0.666, 0.022, 0.5],\n                        49: [0.666, 0, 0.5],\n                        50: [0.666, 0, 0.5],\n                        51: [0.665, 0.022, 0.5],\n                        52: [0.677, 0, 0.5],\n                        53: [0.666, 0.022, 0.5],\n                        54: [0.666, 0.022, 0.5],\n                        55: [0.676, 0.022, 0.5],\n                        56: [0.666, 0.022, 0.5],\n                        57: [0.666, 0.022, 0.5],\n                        58: [0.43, 0, 0.278],\n                        59: [0.43, 0.194, 0.278],\n                        60: [0.54, 0.04, 0.778],\n                        61: [0.583, 0.082, 0.778],\n                        62: [0.54, 0.04, 0.778],\n                        63: [0.705, 0, 0.472],\n                        64: [0.705, 0.011, 0.778],\n                        65: [0.716, 0, 0.75],\n                        66: [0.683, 0, 0.708],\n                        67: [0.705, 0.021, 0.722],\n                        68: [0.683, 0, 0.764],\n                        69: [0.68, 0, 0.681],\n                        70: [0.68, 0, 0.653],\n                        71: [0.705, 0.022, 0.785],\n                        72: [0.683, 0, 0.75],\n                        73: [0.683, 0, 0.361],\n                        74: [0.683, 0.022, 0.514],\n                        75: [0.683, 0, 0.778],\n                        76: [0.683, 0, 0.625],\n                        77: [0.683, 0, 0.917],\n                        78: [0.683, 0, 0.75],\n                        79: [0.705, 0.022, 0.778],\n                        80: [0.683, 0, 0.681],\n                        81: [0.705, 0.193, 0.778],\n                        82: [0.683, 0.022, 0.736],\n                        83: [0.705, 0.022, 0.556],\n                        84: [0.677, 0, 0.722],\n                        85: [0.683, 0.022, 0.75],\n                        86: [0.683, 0.022, 0.75],\n                        87: [0.683, 0.022, 1.028],\n                        88: [0.683, 0, 0.75],\n                        89: [0.683, 0, 0.75],\n                        90: [0.683, 0, 0.611],\n                        91: [0.75, 0.25, 0.278],\n                        92: [0.75, 0.25, 0.5],\n                        93: [0.75, 0.25, 0.278],\n                        94: [0.694, -0.531, 0.5],\n                        95: [-0.025, 0.062, 0.5],\n                        96: [0.699, -0.505, 0.5],\n                        97: [0.448, 0.011, 0.5],\n                        98: [0.694, 0.011, 0.556],\n                        99: [0.448, 0.011, 0.444],\n                        100: [0.694, 0.011, 0.556],\n                        101: [0.448, 0.011, 0.444],\n                        102: [0.705, 0, 0.306, { ic: 0.066 }],\n                        103: [0.453, 0.206, 0.5],\n                        104: [0.694, 0, 0.556],\n                        105: [0.669, 0, 0.278],\n                        106: [0.669, 0.205, 0.306],\n                        107: [0.694, 0, 0.528],\n                        108: [0.694, 0, 0.278],\n                        109: [0.442, 0, 0.833],\n                        110: [0.442, 0, 0.556],\n                        111: [0.448, 0.01, 0.5],\n                        112: [0.442, 0.194, 0.556],\n                        113: [0.442, 0.194, 0.528],\n                        114: [0.442, 0, 0.392],\n                        115: [0.448, 0.011, 0.394],\n                        116: [0.615, 0.01, 0.389],\n                        117: [0.442, 0.011, 0.556],\n                        118: [0.431, 0.011, 0.528],\n                        119: [0.431, 0.011, 0.722],\n                        120: [0.431, 0, 0.528],\n                        121: [0.431, 0.204, 0.528],\n                        122: [0.431, 0, 0.444],\n                        123: [0.75, 0.25, 0.5],\n                        124: [0.75, 0.249, 0.278],\n                        125: [0.75, 0.25, 0.5],\n                        126: [0.318, -0.215, 0.5],\n                        160: [0, 0, 0.25],\n                        163: [0.714, 0.011, 0.769],\n                        165: [0.683, 0, 0.75],\n                        168: [0.669, -0.554, 0.5],\n                        172: [0.356, -0.089, 0.667],\n                        174: [0.709, 0.175, 0.947],\n                        175: [0.59, -0.544, 0.5],\n                        176: [0.715, -0.542, 0.5],\n                        177: [0.666, 0, 0.778],\n                        180: [0.699, -0.505, 0.5],\n                        183: [0.31, -0.19, 0.278],\n                        215: [0.491, -0.009, 0.778],\n                        240: [0.749, 0.021, 0.556],\n                        247: [0.537, 0.036, 0.778],\n                        305: [0.442, 0, 0.278, { sk: 0.0278 }],\n                        567: [0.442, 0.205, 0.306, { sk: 0.0833 }],\n                        697: [0.56, -0.043, 0.275],\n                        710: [0.694, -0.531, 0.5],\n                        711: [0.644, -0.513, 0.5],\n                        713: [0.59, -0.544, 0.5],\n                        714: [0.699, -0.505, 0.5],\n                        715: [0.699, -0.505, 0.5],\n                        728: [0.694, -0.515, 0.5],\n                        729: [0.669, -0.549, 0.5],\n                        730: [0.715, -0.542, 0.5],\n                        732: [0.668, -0.565, 0.5],\n                        768: [0.699, -0.505, 0],\n                        769: [0.699, -0.505, 0],\n                        770: [0.694, -0.531, 0],\n                        771: [0.668, -0.565, 0],\n                        772: [0.59, -0.544, 0],\n                        774: [0.694, -0.515, 0],\n                        775: [0.669, -0.549, 0],\n                        776: [0.669, -0.554, 0],\n                        778: [0.715, -0.542, 0],\n                        779: [0.701, -0.51, 0],\n                        780: [0.644, -0.513, 0],\n                        824: [0.716, 0.215, 0],\n                        913: [0.716, 0, 0.75],\n                        914: [0.683, 0, 0.708],\n                        915: [0.68, 0, 0.625],\n                        916: [0.716, 0, 0.833],\n                        917: [0.68, 0, 0.681],\n                        918: [0.683, 0, 0.611],\n                        919: [0.683, 0, 0.75],\n                        920: [0.705, 0.022, 0.778],\n                        921: [0.683, 0, 0.361],\n                        922: [0.683, 0, 0.778],\n                        923: [0.716, 0, 0.694],\n                        924: [0.683, 0, 0.917],\n                        925: [0.683, 0, 0.75],\n                        926: [0.677, 0, 0.667],\n                        927: [0.705, 0.022, 0.778],\n                        928: [0.68, 0, 0.75],\n                        929: [0.683, 0, 0.681],\n                        931: [0.683, 0, 0.722],\n                        932: [0.677, 0, 0.722],\n                        933: [0.705, 0, 0.778],\n                        934: [0.683, 0, 0.722],\n                        935: [0.683, 0, 0.75],\n                        936: [0.683, 0, 0.778],\n                        937: [0.704, 0, 0.722],\n                        8192: [0, 0, 0.5],\n                        8193: [0, 0, 1],\n                        8194: [0, 0, 0.5],\n                        8195: [0, 0, 1],\n                        8196: [0, 0, 0.333],\n                        8197: [0, 0, 0.25],\n                        8198: [0, 0, 0.167],\n                        8201: [0, 0, 0.167],\n                        8202: [0, 0, 0.1],\n                        8203: [0, 0, 0],\n                        8204: [0, 0, 0],\n                        8211: [0.285, -0.248, 0.5],\n                        8212: [0.285, -0.248, 1],\n                        8213: [0.285, -0.248, 1],\n                        8214: [0.75, 0.25, 0.5],\n                        8215: [-0.025, 0.062, 0.5],\n                        8216: [0.694, -0.379, 0.278],\n                        8217: [0.694, -0.379, 0.278],\n                        8220: [0.694, -0.379, 0.5],\n                        8221: [0.694, -0.379, 0.5],\n                        8224: [0.705, 0.216, 0.444],\n                        8225: [0.705, 0.205, 0.444],\n                        8226: [0.444, -0.055, 0.5],\n                        8230: [0.12, 0, 1.172],\n                        8242: [0.56, -0.043, 0.275],\n                        8243: [0.56, 0, 0.55],\n                        8244: [0.56, 0, 0.825],\n                        8245: [0.56, -0.043, 0.275],\n                        8246: [0.56, 0, 0.55],\n                        8247: [0.56, 0, 0.825],\n                        8254: [0.59, -0.544, 0.5],\n                        8260: [0.75, 0.25, 0.5],\n                        8279: [0.56, 0, 1.1],\n                        8288: [0, 0, 0],\n                        8289: [0, 0, 0],\n                        8290: [0, 0, 0],\n                        8291: [0, 0, 0],\n                        8292: [0, 0, 0],\n                        8407: [0.714, -0.516, 0.5],\n                        8450: [0.702, 0.019, 0.722],\n                        8459: [0.717, 0.036, 0.969, { ic: 0.272, sk: 0.333 }],\n                        8460: [0.666, 0.133, 0.72],\n                        8461: [0.683, 0, 0.778],\n                        8462: [0.694, 0.011, 0.576, { sk: -0.0278 }],\n                        8463: [0.695, 0.013, 0.54, { ic: 0.022 }],\n                        8464: [0.717, 0.017, 0.809, { ic: 0.137, sk: 0.333 }],\n                        8465: [0.686, 0.026, 0.554],\n                        8466: [0.717, 0.017, 0.874, { ic: 0.161, sk: 0.306 }],\n                        8467: [0.705, 0.02, 0.417, { sk: 0.111 }],\n                        8469: [0.683, 0.02, 0.722],\n                        8472: [0.453, 0.216, 0.636, { sk: 0.111 }],\n                        8473: [0.683, 0, 0.611],\n                        8474: [0.701, 0.181, 0.778],\n                        8475: [0.717, 0.017, 0.85, { ic: 0.037, sk: 0.194 }],\n                        8476: [0.686, 0.026, 0.828],\n                        8477: [0.683, 0, 0.722],\n                        8484: [0.683, 0, 0.667],\n                        8486: [0.704, 0, 0.722],\n                        8487: [0.684, 0.022, 0.722],\n                        8488: [0.729, 0.139, 0.602],\n                        8492: [0.708, 0.028, 0.908, { ic: 0.02, sk: 0.194 }],\n                        8493: [0.685, 0.024, 0.613],\n                        8496: [0.707, 0.008, 0.562, { ic: 0.156, sk: 0.139 }],\n                        8497: [0.735, 0.036, 0.895, { ic: 0.095, sk: 0.222 }],\n                        8498: [0.695, 0, 0.556],\n                        8499: [0.721, 0.05, 1.08, { ic: 0.136, sk: 0.444 }],\n                        8501: [0.694, 0, 0.611],\n                        8502: [0.763, 0.021, 0.667, { ic: 0.02 }],\n                        8503: [0.764, 0.043, 0.444],\n                        8504: [0.764, 0.043, 0.667],\n                        8513: [0.705, 0.023, 0.639],\n                        8592: [0.511, 0.011, 1],\n                        8593: [0.694, 0.193, 0.5],\n                        8594: [0.511, 0.011, 1],\n                        8595: [0.694, 0.194, 0.5],\n                        8596: [0.511, 0.011, 1],\n                        8597: [0.772, 0.272, 0.5],\n                        8598: [0.72, 0.195, 1],\n                        8599: [0.72, 0.195, 1],\n                        8600: [0.695, 0.22, 1],\n                        8601: [0.695, 0.22, 1],\n                        8602: [0.437, -0.06, 1],\n                        8603: [0.437, -0.06, 1],\n                        8606: [0.417, -0.083, 1],\n                        8608: [0.417, -0.083, 1],\n                        8610: [0.417, -0.083, 1.111],\n                        8611: [0.417, -0.083, 1.111],\n                        8614: [0.511, 0.011, 1],\n                        8617: [0.511, 0.011, 1.126],\n                        8618: [0.511, 0.011, 1.126],\n                        8619: [0.575, 0.041, 1],\n                        8620: [0.575, 0.041, 1],\n                        8621: [0.417, -0.083, 1.389],\n                        8622: [0.437, -0.06, 1],\n                        8624: [0.722, 0, 0.5],\n                        8625: [0.722, 0, 0.5],\n                        8630: [0.461, 0, 1],\n                        8631: [0.46, 0, 1],\n                        8634: [0.65, 0.083, 0.778],\n                        8635: [0.65, 0.083, 0.778],\n                        8636: [0.511, -0.23, 1],\n                        8637: [0.27, 0.011, 1],\n                        8638: [0.694, 0.194, 0.417],\n                        8639: [0.694, 0.194, 0.417],\n                        8640: [0.511, -0.23, 1],\n                        8641: [0.27, 0.011, 1],\n                        8642: [0.694, 0.194, 0.417],\n                        8643: [0.694, 0.194, 0.417],\n                        8644: [0.667, 0, 1],\n                        8646: [0.667, 0, 1],\n                        8647: [0.583, 0.083, 1],\n                        8648: [0.694, 0.193, 0.833],\n                        8649: [0.583, 0.083, 1],\n                        8650: [0.694, 0.194, 0.833],\n                        8651: [0.514, 0.014, 1],\n                        8652: [0.671, 0.011, 1],\n                        8653: [0.534, 0.035, 1],\n                        8654: [0.534, 0.037, 1],\n                        8655: [0.534, 0.035, 1],\n                        8656: [0.525, 0.024, 1],\n                        8657: [0.694, 0.194, 0.611],\n                        8658: [0.525, 0.024, 1],\n                        8659: [0.694, 0.194, 0.611],\n                        8660: [0.526, 0.025, 1],\n                        8661: [0.772, 0.272, 0.611],\n                        8666: [0.611, 0.111, 1],\n                        8667: [0.611, 0.111, 1],\n                        8669: [0.417, -0.083, 1],\n                        8672: [0.437, -0.064, 1.334],\n                        8674: [0.437, -0.064, 1.334],\n                        8704: [0.694, 0.022, 0.556],\n                        8705: [0.846, 0.021, 0.5],\n                        8706: [0.715, 0.022, 0.531, { ic: 0.035, sk: 0.0833 }],\n                        8707: [0.694, 0, 0.556],\n                        8708: [0.716, 0.215, 0.556],\n                        8709: [0.772, 0.078, 0.5],\n                        8710: [0.716, 0, 0.833],\n                        8711: [0.683, 0.033, 0.833],\n                        8712: [0.54, 0.04, 0.667],\n                        8713: [0.716, 0.215, 0.667],\n                        8715: [0.54, 0.04, 0.667],\n                        8716: [0.716, 0.215, 0.667],\n                        8717: [0.44, 0, 0.429, { ic: 0.027 }],\n                        8719: [0.75, 0.25, 0.944],\n                        8720: [0.75, 0.25, 0.944],\n                        8721: [0.75, 0.25, 1.056],\n                        8722: [0.583, 0.082, 0.778],\n                        8723: [0.5, 0.166, 0.778],\n                        8724: [0.766, 0.093, 0.778],\n                        8725: [0.75, 0.25, 0.5],\n                        8726: [0.75, 0.25, 0.5],\n                        8727: [0.465, -0.035, 0.5],\n                        8728: [0.444, -0.055, 0.5],\n                        8729: [0.444, -0.055, 0.5],\n                        8730: [0.8, 0.2, 0.833, { ic: 0.02 }],\n                        8733: [0.442, 0.011, 0.778],\n                        8734: [0.442, 0.011, 1],\n                        8736: [0.694, 0, 0.722],\n                        8737: [0.714, 0.02, 0.722],\n                        8738: [0.551, 0.051, 0.722],\n                        8739: [0.75, 0.249, 0.278],\n                        8740: [0.75, 0.252, 0.278, { ic: 0.019 }],\n                        8741: [0.75, 0.25, 0.5],\n                        8742: [0.75, 0.25, 0.5, { ic: 0.018 }],\n                        8743: [0.598, 0.022, 0.667],\n                        8744: [0.598, 0.022, 0.667],\n                        8745: [0.598, 0.022, 0.667],\n                        8746: [0.598, 0.022, 0.667],\n                        8747: [0.716, 0.216, 0.417, { ic: 0.055 }],\n                        8748: [0.805, 0.306, 0.819, { ic: 0.138 }],\n                        8749: [0.805, 0.306, 1.166, { ic: 0.138 }],\n                        8750: [0.805, 0.306, 0.472, { ic: 0.138 }],\n                        8756: [0.471, 0.082, 0.667],\n                        8757: [0.471, 0.082, 0.667],\n                        8764: [0.367, -0.133, 0.778],\n                        8765: [0.367, -0.133, 0.778],\n                        8768: [0.583, 0.083, 0.278],\n                        8769: [0.467, -0.032, 0.778],\n                        8770: [0.463, -0.034, 0.778],\n                        8771: [0.464, -0.036, 0.778],\n                        8772: [0.716, 0.215, 0.778],\n                        8773: [0.589, -0.022, 0.778],\n                        8775: [0.652, 0.155, 0.778],\n                        8776: [0.483, -0.055, 0.778],\n                        8777: [0.716, 0.215, 0.778],\n                        8778: [0.579, 0.039, 0.778],\n                        8781: [0.484, -0.016, 0.778],\n                        8782: [0.492, -0.008, 0.778],\n                        8783: [0.492, -0.133, 0.778],\n                        8784: [0.67, -0.133, 0.778],\n                        8785: [0.609, 0.108, 0.778],\n                        8786: [0.601, 0.101, 0.778],\n                        8787: [0.601, 0.102, 0.778],\n                        8790: [0.367, -0.133, 0.778],\n                        8791: [0.721, -0.133, 0.778],\n                        8796: [0.859, -0.133, 0.778],\n                        8800: [0.716, 0.215, 0.778],\n                        8801: [0.464, -0.036, 0.778],\n                        8802: [0.716, 0.215, 0.778],\n                        8804: [0.636, 0.138, 0.778],\n                        8805: [0.636, 0.138, 0.778],\n                        8806: [0.753, 0.175, 0.778],\n                        8807: [0.753, 0.175, 0.778],\n                        8808: [0.752, 0.286, 0.778],\n                        8809: [0.752, 0.286, 0.778],\n                        8810: [0.568, 0.067, 1],\n                        8811: [0.567, 0.067, 1],\n                        8812: [0.75, 0.25, 0.5],\n                        8813: [0.716, 0.215, 0.778],\n                        8814: [0.708, 0.209, 0.778],\n                        8815: [0.708, 0.209, 0.778],\n                        8816: [0.801, 0.303, 0.778],\n                        8817: [0.801, 0.303, 0.778],\n                        8818: [0.732, 0.228, 0.778],\n                        8819: [0.732, 0.228, 0.778],\n                        8820: [0.732, 0.228, 0.778],\n                        8821: [0.732, 0.228, 0.778],\n                        8822: [0.681, 0.253, 0.778],\n                        8823: [0.681, 0.253, 0.778],\n                        8824: [0.716, 0.253, 0.778],\n                        8825: [0.716, 0.253, 0.778],\n                        8826: [0.539, 0.041, 0.778],\n                        8827: [0.539, 0.041, 0.778],\n                        8828: [0.58, 0.153, 0.778],\n                        8829: [0.58, 0.154, 0.778],\n                        8830: [0.732, 0.228, 0.778],\n                        8831: [0.732, 0.228, 0.778],\n                        8832: [0.705, 0.208, 0.778],\n                        8833: [0.705, 0.208, 0.778],\n                        8834: [0.54, 0.04, 0.778],\n                        8835: [0.54, 0.04, 0.778],\n                        8836: [0.716, 0.215, 0.778],\n                        8837: [0.716, 0.215, 0.778],\n                        8838: [0.636, 0.138, 0.778],\n                        8839: [0.636, 0.138, 0.778],\n                        8840: [0.801, 0.303, 0.778],\n                        8841: [0.801, 0.303, 0.778],\n                        8842: [0.635, 0.241, 0.778],\n                        8843: [0.635, 0.241, 0.778],\n                        8846: [0.598, 0.022, 0.667],\n                        8847: [0.539, 0.041, 0.778],\n                        8848: [0.539, 0.041, 0.778],\n                        8849: [0.636, 0.138, 0.778],\n                        8850: [0.636, 0.138, 0.778],\n                        8851: [0.598, 0, 0.667],\n                        8852: [0.598, 0, 0.667],\n                        8853: [0.583, 0.083, 0.778],\n                        8854: [0.583, 0.083, 0.778],\n                        8855: [0.583, 0.083, 0.778],\n                        8856: [0.583, 0.083, 0.778],\n                        8857: [0.583, 0.083, 0.778],\n                        8858: [0.582, 0.082, 0.778],\n                        8859: [0.582, 0.082, 0.778],\n                        8861: [0.582, 0.082, 0.778],\n                        8862: [0.689, 0, 0.778],\n                        8863: [0.689, 0, 0.778],\n                        8864: [0.689, 0, 0.778],\n                        8865: [0.689, 0, 0.778],\n                        8866: [0.694, 0, 0.611],\n                        8867: [0.694, 0, 0.611],\n                        8868: [0.668, 0, 0.778],\n                        8869: [0.668, 0, 0.778],\n                        8872: [0.75, 0.249, 0.867],\n                        8873: [0.694, 0, 0.722],\n                        8874: [0.694, 0, 0.889],\n                        8876: [0.695, 0, 0.611],\n                        8877: [0.695, 0, 0.611],\n                        8878: [0.695, 0, 0.722],\n                        8879: [0.695, 0, 0.722],\n                        8882: [0.539, 0.041, 0.778],\n                        8883: [0.539, 0.041, 0.778],\n                        8884: [0.636, 0.138, 0.778],\n                        8885: [0.636, 0.138, 0.778],\n                        8888: [0.408, -0.092, 1.111],\n                        8890: [0.431, 0.212, 0.556],\n                        8891: [0.716, 0, 0.611],\n                        8892: [0.716, 0, 0.611],\n                        8896: [0.75, 0.249, 0.833],\n                        8897: [0.75, 0.249, 0.833],\n                        8898: [0.75, 0.249, 0.833],\n                        8899: [0.75, 0.249, 0.833],\n                        8900: [0.488, -0.012, 0.5],\n                        8901: [0.31, -0.19, 0.278],\n                        8902: [0.486, -0.016, 0.5],\n                        8903: [0.545, 0.044, 0.778],\n                        8904: [0.505, 0.005, 0.9],\n                        8905: [0.492, -0.008, 0.778],\n                        8906: [0.492, -0.008, 0.778],\n                        8907: [0.694, 0.022, 0.778],\n                        8908: [0.694, 0.022, 0.778],\n                        8909: [0.464, -0.036, 0.778],\n                        8910: [0.578, 0.021, 0.76],\n                        8911: [0.578, 0.022, 0.76],\n                        8912: [0.54, 0.04, 0.778],\n                        8913: [0.54, 0.04, 0.778],\n                        8914: [0.598, 0.022, 0.667],\n                        8915: [0.598, 0.022, 0.667],\n                        8916: [0.736, 0.022, 0.667],\n                        8918: [0.541, 0.041, 0.778],\n                        8919: [0.541, 0.041, 0.778],\n                        8920: [0.568, 0.067, 1.333],\n                        8921: [0.568, 0.067, 1.333],\n                        8922: [0.886, 0.386, 0.778],\n                        8923: [0.886, 0.386, 0.778],\n                        8926: [0.734, 0, 0.778],\n                        8927: [0.734, 0, 0.778],\n                        8928: [0.801, 0.303, 0.778],\n                        8929: [0.801, 0.303, 0.778],\n                        8930: [0.716, 0.215, 0.778],\n                        8931: [0.716, 0.215, 0.778],\n                        8934: [0.73, 0.359, 0.778],\n                        8935: [0.73, 0.359, 0.778],\n                        8936: [0.73, 0.359, 0.778],\n                        8937: [0.73, 0.359, 0.778],\n                        8938: [0.706, 0.208, 0.778],\n                        8939: [0.706, 0.208, 0.778],\n                        8940: [0.802, 0.303, 0.778],\n                        8941: [0.801, 0.303, 0.778],\n                        8942: [1.3, 0.03, 0.278],\n                        8943: [0.31, -0.19, 1.172],\n                        8945: [1.52, -0.1, 1.282],\n                        8965: [0.716, 0, 0.611],\n                        8966: [0.813, 0.097, 0.611],\n                        8968: [0.75, 0.25, 0.444],\n                        8969: [0.75, 0.25, 0.444],\n                        8970: [0.75, 0.25, 0.444],\n                        8971: [0.75, 0.25, 0.444],\n                        8988: [0.694, -0.306, 0.5],\n                        8989: [0.694, -0.306, 0.5],\n                        8990: [0.366, 0.022, 0.5],\n                        8991: [0.366, 0.022, 0.5],\n                        8994: [0.388, -0.122, 1],\n                        8995: [0.378, -0.134, 1],\n                        9001: [0.75, 0.25, 0.389],\n                        9002: [0.75, 0.25, 0.389],\n                        9136: [0.744, 0.244, 0.412],\n                        9137: [0.744, 0.244, 0.412],\n                        9168: [0.602, 0, 0.667],\n                        9416: [0.709, 0.175, 0.902],\n                        9484: [0.694, -0.306, 0.5],\n                        9488: [0.694, -0.306, 0.5],\n                        9492: [0.366, 0.022, 0.5],\n                        9496: [0.366, 0.022, 0.5],\n                        9585: [0.694, 0.195, 0.889],\n                        9586: [0.694, 0.195, 0.889],\n                        9632: [0.689, 0, 0.778],\n                        9633: [0.689, 0, 0.778],\n                        9642: [0.689, 0, 0.778],\n                        9650: [0.575, 0.02, 0.722],\n                        9651: [0.716, 0, 0.889],\n                        9652: [0.575, 0.02, 0.722],\n                        9653: [0.716, 0, 0.889],\n                        9654: [0.539, 0.041, 0.778],\n                        9656: [0.539, 0.041, 0.778],\n                        9657: [0.505, 0.005, 0.5],\n                        9660: [0.576, 0.019, 0.722],\n                        9661: [0.5, 0.215, 0.889],\n                        9662: [0.576, 0.019, 0.722],\n                        9663: [0.5, 0.215, 0.889],\n                        9664: [0.539, 0.041, 0.778],\n                        9666: [0.539, 0.041, 0.778],\n                        9667: [0.505, 0.005, 0.5],\n                        9674: [0.716, 0.132, 0.667],\n                        9711: [0.715, 0.215, 1],\n                        9723: [0.689, 0, 0.778],\n                        9724: [0.689, 0, 0.778],\n                        9733: [0.694, 0.111, 0.944],\n                        9824: [0.727, 0.13, 0.778],\n                        9825: [0.716, 0.033, 0.778],\n                        9826: [0.727, 0.162, 0.778],\n                        9827: [0.726, 0.13, 0.778],\n                        9837: [0.75, 0.022, 0.389],\n                        9838: [0.734, 0.223, 0.389],\n                        9839: [0.723, 0.223, 0.389],\n                        10003: [0.706, 0.034, 0.833],\n                        10016: [0.716, 0.022, 0.833],\n                        10072: [0.75, 0.249, 0.278],\n                        10216: [0.75, 0.25, 0.389],\n                        10217: [0.75, 0.25, 0.389],\n                        10222: [0.744, 0.244, 0.412],\n                        10223: [0.744, 0.244, 0.412],\n                        10229: [0.511, 0.011, 1.609],\n                        10230: [0.511, 0.011, 1.638],\n                        10231: [0.511, 0.011, 1.859],\n                        10232: [0.525, 0.024, 1.609],\n                        10233: [0.525, 0.024, 1.638],\n                        10234: [0.525, 0.024, 1.858],\n                        10236: [0.511, 0.011, 1.638],\n                        10731: [0.716, 0.132, 0.667],\n                        10744: [0.716, 0.215, 0.778],\n                        10752: [0.75, 0.25, 1.111],\n                        10753: [0.75, 0.25, 1.111],\n                        10754: [0.75, 0.25, 1.111],\n                        10756: [0.75, 0.249, 0.833],\n                        10758: [0.75, 0.249, 0.833],\n                        10764: [0.805, 0.306, 1.638, { ic: 0.138 }],\n                        10799: [0.491, -0.009, 0.778],\n                        10815: [0.683, 0, 0.75],\n                        10846: [0.813, 0.097, 0.611],\n                        10877: [0.636, 0.138, 0.778],\n                        10878: [0.636, 0.138, 0.778],\n                        10885: [0.762, 0.29, 0.778],\n                        10886: [0.762, 0.29, 0.778],\n                        10887: [0.635, 0.241, 0.778],\n                        10888: [0.635, 0.241, 0.778],\n                        10889: [0.761, 0.387, 0.778],\n                        10890: [0.761, 0.387, 0.778],\n                        10891: [1.003, 0.463, 0.778],\n                        10892: [1.003, 0.463, 0.778],\n                        10901: [0.636, 0.138, 0.778],\n                        10902: [0.636, 0.138, 0.778],\n                        10927: [0.636, 0.138, 0.778],\n                        10928: [0.636, 0.138, 0.778],\n                        10933: [0.752, 0.286, 0.778],\n                        10934: [0.752, 0.286, 0.778],\n                        10935: [0.761, 0.294, 0.778],\n                        10936: [0.761, 0.294, 0.778],\n                        10937: [0.761, 0.337, 0.778],\n                        10938: [0.761, 0.337, 0.778],\n                        10949: [0.753, 0.215, 0.778],\n                        10950: [0.753, 0.215, 0.778],\n                        10955: [0.783, 0.385, 0.778],\n                        10956: [0.783, 0.385, 0.778],\n                        12296: [0.75, 0.25, 0.389],\n                        12297: [0.75, 0.25, 0.389],\n                        57350: [0.43, 0.023, 0.222, { ic: 0.018 }],\n                        57351: [0.431, 0.024, 0.389, { ic: 0.018 }],\n                        57352: [0.605, 0.085, 0.778],\n                        57353: [0.434, 0.006, 0.667, { ic: 0.067 }],\n                        57356: [0.752, 0.284, 0.778],\n                        57357: [0.752, 0.284, 0.778],\n                        57358: [0.919, 0.421, 0.778],\n                        57359: [0.801, 0.303, 0.778],\n                        57360: [0.801, 0.303, 0.778],\n                        57361: [0.919, 0.421, 0.778],\n                        57366: [0.828, 0.33, 0.778],\n                        57367: [0.752, 0.332, 0.778],\n                        57368: [0.828, 0.33, 0.778],\n                        57369: [0.752, 0.333, 0.778],\n                        57370: [0.634, 0.255, 0.778],\n                        57371: [0.634, 0.254, 0.778],\n                        119808: [0.698, 0, 0.869],\n                        119809: [0.686, 0, 0.818],\n                        119810: [0.697, 0.011, 0.831],\n                        119811: [0.686, 0, 0.882],\n                        119812: [0.68, 0, 0.756],\n                        119813: [0.68, 0, 0.724],\n                        119814: [0.697, 0.01, 0.904],\n                        119815: [0.686, 0, 0.9],\n                        119816: [0.686, 0, 0.436],\n                        119817: [0.686, 0.011, 0.594],\n                        119818: [0.686, 0, 0.901],\n                        119819: [0.686, 0, 0.692],\n                        119820: [0.686, 0, 1.092],\n                        119821: [0.686, 0, 0.9],\n                        119822: [0.696, 0.01, 0.864],\n                        119823: [0.686, 0, 0.786],\n                        119824: [0.696, 0.193, 0.864],\n                        119825: [0.686, 0.011, 0.862],\n                        119826: [0.697, 0.011, 0.639],\n                        119827: [0.675, 0, 0.8],\n                        119828: [0.686, 0.011, 0.885],\n                        119829: [0.686, 0.007, 0.869],\n                        119830: [0.686, 0.007, 1.189],\n                        119831: [0.686, 0, 0.869],\n                        119832: [0.686, 0, 0.869],\n                        119833: [0.686, 0, 0.703],\n                        119834: [0.453, 0.006, 0.559],\n                        119835: [0.694, 0.006, 0.639],\n                        119836: [0.453, 0.006, 0.511],\n                        119837: [0.694, 0.006, 0.639],\n                        119838: [0.452, 0.006, 0.527],\n                        119839: [0.7, 0, 0.351, { ic: 0.101 }],\n                        119840: [0.455, 0.201, 0.575],\n                        119841: [0.694, 0, 0.639],\n                        119842: [0.695, 0, 0.319],\n                        119843: [0.695, 0.2, 0.351],\n                        119844: [0.694, 0, 0.607],\n                        119845: [0.694, 0, 0.319],\n                        119846: [0.45, 0, 0.958],\n                        119847: [0.45, 0, 0.639],\n                        119848: [0.452, 0.005, 0.575],\n                        119849: [0.45, 0.194, 0.639],\n                        119850: [0.45, 0.194, 0.607],\n                        119851: [0.45, 0, 0.474],\n                        119852: [0.453, 0.006, 0.454],\n                        119853: [0.635, 0.005, 0.447],\n                        119854: [0.45, 0.006, 0.639],\n                        119855: [0.444, 0, 0.607],\n                        119856: [0.444, 0, 0.831],\n                        119857: [0.444, 0, 0.607],\n                        119858: [0.444, 0.2, 0.607],\n                        119859: [0.444, 0, 0.511],\n                        119860: [0.716, 0, 0.75, { sk: 0.139 }],\n                        119861: [0.683, 0, 0.759, { sk: 0.0833 }],\n                        119862: [\n                            0.705,\n                            0.022,\n                            0.715,\n                            { ic: 0.045, sk: 0.0833 },\n                        ],\n                        119863: [0.683, 0, 0.828, { sk: 0.0556 }],\n                        119864: [0.68, 0, 0.738, { ic: 0.026, sk: 0.0833 }],\n                        119865: [0.68, 0, 0.643, { ic: 0.106, sk: 0.0833 }],\n                        119866: [0.705, 0.022, 0.786, { sk: 0.0833 }],\n                        119867: [0.683, 0, 0.831, { ic: 0.057, sk: 0.0556 }],\n                        119868: [0.683, 0, 0.44, { ic: 0.064, sk: 0.111 }],\n                        119869: [0.683, 0.022, 0.555, { ic: 0.078, sk: 0.167 }],\n                        119870: [0.683, 0, 0.849, { ic: 0.04, sk: 0.0556 }],\n                        119871: [0.683, 0, 0.681, { sk: 0.0278 }],\n                        119872: [0.683, 0, 0.97, { ic: 0.081, sk: 0.0833 }],\n                        119873: [0.683, 0, 0.803, { ic: 0.085, sk: 0.0833 }],\n                        119874: [0.704, 0.022, 0.763, { sk: 0.0833 }],\n                        119875: [0.683, 0, 0.642, { ic: 0.109, sk: 0.0833 }],\n                        119876: [0.704, 0.194, 0.791, { sk: 0.0833 }],\n                        119877: [0.683, 0.021, 0.759, { sk: 0.0833 }],\n                        119878: [\n                            0.705,\n                            0.022,\n                            0.613,\n                            { ic: 0.032, sk: 0.0833 },\n                        ],\n                        119879: [0.677, 0, 0.584, { ic: 0.12, sk: 0.0833 }],\n                        119880: [\n                            0.683,\n                            0.022,\n                            0.683,\n                            { ic: 0.084, sk: 0.0278 },\n                        ],\n                        119881: [0.683, 0.022, 0.583, { ic: 0.186 }],\n                        119882: [0.683, 0.022, 0.944, { ic: 0.104 }],\n                        119883: [0.683, 0, 0.828, { ic: 0.024, sk: 0.0833 }],\n                        119884: [0.683, 0, 0.581, { ic: 0.182 }],\n                        119885: [0.683, 0, 0.683, { ic: 0.04, sk: 0.0833 }],\n                        119886: [0.441, 0.01, 0.529],\n                        119887: [0.694, 0.011, 0.429],\n                        119888: [0.442, 0.011, 0.433, { sk: 0.0556 }],\n                        119889: [0.694, 0.01, 0.52, { sk: 0.167 }],\n                        119890: [0.442, 0.011, 0.466, { sk: 0.0556 }],\n                        119891: [0.705, 0.205, 0.49, { ic: 0.06, sk: 0.167 }],\n                        119892: [0.442, 0.205, 0.477, { sk: 0.0278 }],\n                        119894: [0.661, 0.011, 0.345],\n                        119895: [0.661, 0.204, 0.412],\n                        119896: [0.694, 0.011, 0.521],\n                        119897: [0.694, 0.011, 0.298, { sk: 0.0833 }],\n                        119898: [0.442, 0.011, 0.878],\n                        119899: [0.442, 0.011, 0.6],\n                        119900: [0.441, 0.011, 0.485, { sk: 0.0556 }],\n                        119901: [0.442, 0.194, 0.503, { sk: 0.0833 }],\n                        119902: [\n                            0.442,\n                            0.194,\n                            0.446,\n                            { ic: 0.014, sk: 0.0833 },\n                        ],\n                        119903: [0.442, 0.011, 0.451, { sk: 0.0556 }],\n                        119904: [0.442, 0.01, 0.469, { sk: 0.0556 }],\n                        119905: [0.626, 0.011, 0.361, { sk: 0.0833 }],\n                        119906: [0.442, 0.011, 0.572, { sk: 0.0278 }],\n                        119907: [0.443, 0.011, 0.485, { sk: 0.0278 }],\n                        119908: [0.443, 0.011, 0.716, { sk: 0.0833 }],\n                        119909: [0.442, 0.011, 0.572, { sk: 0.0278 }],\n                        119910: [0.442, 0.205, 0.49, { sk: 0.0556 }],\n                        119911: [0.442, 0.011, 0.465, { sk: 0.0556 }],\n                        119912: [0.711, 0, 0.869, { sk: 0.16 }],\n                        119913: [0.686, 0, 0.866, { sk: 0.0958 }],\n                        119914: [\n                            0.703,\n                            0.017,\n                            0.817,\n                            { ic: 0.038, sk: 0.0958 },\n                        ],\n                        119915: [0.686, 0, 0.938, { sk: 0.0639 }],\n                        119916: [0.68, 0, 0.81, { ic: 0.015, sk: 0.0958 }],\n                        119917: [0.68, 0, 0.689, { ic: 0.12, sk: 0.0958 }],\n                        119918: [0.703, 0.016, 0.887, { sk: 0.0958 }],\n                        119919: [0.686, 0, 0.982, { ic: 0.045, sk: 0.0639 }],\n                        119920: [0.686, 0, 0.511, { ic: 0.062, sk: 0.128 }],\n                        119921: [0.686, 0.017, 0.631, { ic: 0.063, sk: 0.192 }],\n                        119922: [0.686, 0, 0.971, { ic: 0.032, sk: 0.0639 }],\n                        119923: [0.686, 0, 0.756, { sk: 0.0319 }],\n                        119924: [0.686, 0, 1.142, { ic: 0.077, sk: 0.0958 }],\n                        119925: [0.686, 0, 0.95, { ic: 0.077, sk: 0.0958 }],\n                        119926: [0.703, 0.017, 0.837, { sk: 0.0958 }],\n                        119927: [0.686, 0, 0.723, { ic: 0.124, sk: 0.0958 }],\n                        119928: [0.703, 0.194, 0.869, { sk: 0.0958 }],\n                        119929: [0.686, 0.017, 0.872, { sk: 0.0958 }],\n                        119930: [\n                            0.703,\n                            0.017,\n                            0.693,\n                            { ic: 0.021, sk: 0.0958 },\n                        ],\n                        119931: [0.675, 0, 0.637, { ic: 0.135, sk: 0.0958 }],\n                        119932: [0.686, 0.016, 0.8, { ic: 0.077, sk: 0.0319 }],\n                        119933: [0.686, 0.016, 0.678, { ic: 0.208 }],\n                        119934: [0.686, 0.017, 1.093, { ic: 0.114 }],\n                        119935: [0.686, 0, 0.947, { sk: 0.0958 }],\n                        119936: [0.686, 0, 0.675, { ic: 0.201 }],\n                        119937: [0.686, 0, 0.773, { ic: 0.032, sk: 0.0958 }],\n                        119938: [0.452, 0.008, 0.633],\n                        119939: [0.694, 0.008, 0.521],\n                        119940: [0.451, 0.008, 0.513, { sk: 0.0639 }],\n                        119941: [0.694, 0.008, 0.61, { sk: 0.192 }],\n                        119942: [0.452, 0.008, 0.554, { sk: 0.0639 }],\n                        119943: [0.701, 0.201, 0.568, { ic: 0.056, sk: 0.192 }],\n                        119944: [0.452, 0.202, 0.545, { sk: 0.0319 }],\n                        119945: [0.694, 0.008, 0.668, { sk: -0.0319 }],\n                        119946: [0.694, 0.008, 0.405],\n                        119947: [0.694, 0.202, 0.471],\n                        119948: [0.694, 0.008, 0.604],\n                        119949: [0.694, 0.008, 0.348, { sk: 0.0958 }],\n                        119950: [0.452, 0.008, 1.032],\n                        119951: [0.452, 0.008, 0.713],\n                        119952: [0.452, 0.008, 0.585, { sk: 0.0639 }],\n                        119953: [0.452, 0.194, 0.601, { sk: 0.0958 }],\n                        119954: [0.452, 0.194, 0.542, { sk: 0.0958 }],\n                        119955: [0.452, 0.008, 0.529, { sk: 0.0639 }],\n                        119956: [0.451, 0.008, 0.531, { sk: 0.0639 }],\n                        119957: [0.643, 0.007, 0.415, { sk: 0.0958 }],\n                        119958: [0.452, 0.008, 0.681, { sk: 0.0319 }],\n                        119959: [0.453, 0.008, 0.567, { sk: 0.0319 }],\n                        119960: [0.453, 0.008, 0.831, { sk: 0.0958 }],\n                        119961: [0.452, 0.008, 0.659, { sk: 0.0319 }],\n                        119962: [0.452, 0.202, 0.59, { sk: 0.0639 }],\n                        119963: [0.452, 0.008, 0.555, { sk: 0.0639 }],\n                        119964: [0.717, 0.008, 0.803, { ic: 0.213, sk: 0.389 }],\n                        119966: [0.728, 0.026, 0.666, { ic: 0.153, sk: 0.278 }],\n                        119967: [0.708, 0.031, 0.774, { ic: 0.081, sk: 0.111 }],\n                        119970: [0.717, 0.037, 0.61, { ic: 0.128, sk: 0.25 }],\n                        119973: [0.717, 0.314, 1.052, { ic: 0.081, sk: 0.417 }],\n                        119974: [0.717, 0.037, 0.914, { ic: 0.29, sk: 0.361 }],\n                        119977: [0.726, 0.036, 0.902, { ic: 0.306, sk: 0.389 }],\n                        119978: [0.707, 0.008, 0.738, { ic: 0.067, sk: 0.167 }],\n                        119979: [0.716, 0.037, 1.013, { ic: 0.018, sk: 0.222 }],\n                        119980: [0.717, 0.017, 0.883, { sk: 0.278 }],\n                        119982: [0.708, 0.036, 0.868, { ic: 0.148, sk: 0.333 }],\n                        119983: [0.735, 0.037, 0.747, { ic: 0.249, sk: 0.222 }],\n                        119984: [0.717, 0.017, 0.8, { ic: 0.16, sk: 0.25 }],\n                        119985: [0.717, 0.017, 0.622, { ic: 0.228, sk: 0.222 }],\n                        119986: [0.717, 0.017, 0.805, { ic: 0.221, sk: 0.25 }],\n                        119987: [0.717, 0.017, 0.944, { ic: 0.187, sk: 0.278 }],\n                        119988: [0.716, 0.017, 0.71, { ic: 0.249, sk: 0.194 }],\n                        119989: [0.717, 0.016, 0.821, { ic: 0.211, sk: 0.306 }],\n                        120068: [0.696, 0.026, 0.718],\n                        120069: [0.691, 0.027, 0.884],\n                        120071: [0.685, 0.027, 0.832],\n                        120072: [0.685, 0.024, 0.663],\n                        120073: [0.686, 0.153, 0.611],\n                        120074: [0.69, 0.026, 0.785],\n                        120077: [0.686, 0.139, 0.552],\n                        120078: [0.68, 0.027, 0.668, { ic: 0.014 }],\n                        120079: [0.686, 0.026, 0.666],\n                        120080: [0.692, 0.027, 1.05],\n                        120081: [0.686, 0.025, 0.832],\n                        120082: [0.729, 0.027, 0.827],\n                        120083: [0.692, 0.218, 0.828],\n                        120084: [0.729, 0.069, 0.827],\n                        120086: [0.692, 0.027, 0.829],\n                        120087: [0.701, 0.027, 0.669],\n                        120088: [0.697, 0.027, 0.646, { ic: 0.019 }],\n                        120089: [0.686, 0.026, 0.831],\n                        120090: [0.686, 0.027, 1.046],\n                        120091: [0.688, 0.027, 0.719],\n                        120092: [0.686, 0.218, 0.833],\n                        120094: [0.47, 0.035, 0.5],\n                        120095: [0.685, 0.031, 0.513],\n                        120096: [0.466, 0.029, 0.389],\n                        120097: [0.609, 0.033, 0.499],\n                        120098: [0.467, 0.03, 0.401],\n                        120099: [0.681, 0.221, 0.326],\n                        120100: [0.47, 0.209, 0.504],\n                        120101: [0.688, 0.205, 0.521],\n                        120102: [0.673, 0.02, 0.279],\n                        120103: [0.672, 0.208, 0.281],\n                        120104: [0.689, 0.025, 0.389],\n                        120105: [0.685, 0.02, 0.28],\n                        120106: [0.475, 0.026, 0.767],\n                        120107: [0.475, 0.022, 0.527],\n                        120108: [0.48, 0.028, 0.489],\n                        120109: [0.541, 0.212, 0.5],\n                        120110: [0.479, 0.219, 0.489],\n                        120111: [0.474, 0.021, 0.389],\n                        120112: [0.478, 0.029, 0.443],\n                        120113: [0.64, 0.02, 0.333, { ic: 0.015 }],\n                        120114: [0.474, 0.023, 0.517],\n                        120115: [0.53, 0.028, 0.512],\n                        120116: [0.532, 0.028, 0.774],\n                        120117: [0.472, 0.188, 0.389],\n                        120118: [0.528, 0.218, 0.499],\n                        120119: [0.471, 0.214, 0.391],\n                        120120: [0.701, 0, 0.722],\n                        120121: [0.683, 0, 0.667],\n                        120123: [0.683, 0, 0.722],\n                        120124: [0.683, 0, 0.667],\n                        120125: [0.683, 0, 0.611],\n                        120126: [0.702, 0.019, 0.778],\n                        120128: [0.683, 0, 0.389],\n                        120129: [0.683, 0.077, 0.5],\n                        120130: [0.683, 0, 0.778],\n                        120131: [0.683, 0, 0.667],\n                        120132: [0.683, 0, 0.944],\n                        120134: [0.701, 0.019, 0.778],\n                        120138: [0.702, 0.012, 0.556],\n                        120139: [0.683, 0, 0.667],\n                        120140: [0.683, 0.019, 0.722],\n                        120141: [0.683, 0.02, 0.722],\n                        120142: [0.683, 0.019, 1],\n                        120143: [0.683, 0, 0.722],\n                        120144: [0.683, 0, 0.722],\n                        120172: [0.686, 0.031, 0.847],\n                        120173: [0.684, 0.031, 1.044],\n                        120174: [0.676, 0.032, 0.723],\n                        120175: [0.683, 0.029, 0.982],\n                        120176: [0.686, 0.029, 0.783],\n                        120177: [0.684, 0.146, 0.722],\n                        120178: [0.687, 0.029, 0.927],\n                        120179: [0.683, 0.126, 0.851],\n                        120180: [0.681, 0.025, 0.655],\n                        120181: [0.68, 0.141, 0.652],\n                        120182: [0.681, 0.026, 0.789, { ic: 0.017 }],\n                        120183: [0.683, 0.028, 0.786],\n                        120184: [0.683, 0.032, 1.239],\n                        120185: [0.679, 0.03, 0.983],\n                        120186: [0.726, 0.03, 0.976],\n                        120187: [0.688, 0.223, 0.977],\n                        120188: [0.726, 0.083, 0.976],\n                        120189: [0.688, 0.028, 0.978],\n                        120190: [0.685, 0.031, 0.978],\n                        120191: [0.686, 0.03, 0.79, { ic: 0.012 }],\n                        120192: [0.688, 0.039, 0.851, { ic: 0.02 }],\n                        120193: [0.685, 0.029, 0.982],\n                        120194: [0.683, 0.03, 1.235],\n                        120195: [0.681, 0.035, 0.849],\n                        120196: [0.688, 0.214, 0.984],\n                        120197: [0.677, 0.148, 0.711],\n                        120198: [0.472, 0.032, 0.603],\n                        120199: [0.69, 0.032, 0.59],\n                        120200: [0.473, 0.026, 0.464],\n                        120201: [0.632, 0.028, 0.589],\n                        120202: [0.471, 0.027, 0.472],\n                        120203: [0.687, 0.222, 0.388],\n                        120204: [0.472, 0.208, 0.595],\n                        120205: [0.687, 0.207, 0.615],\n                        120206: [0.686, 0.025, 0.331],\n                        120207: [0.682, 0.203, 0.332],\n                        120208: [0.682, 0.025, 0.464],\n                        120209: [0.681, 0.024, 0.337],\n                        120210: [0.476, 0.031, 0.921],\n                        120211: [0.473, 0.028, 0.654],\n                        120212: [0.482, 0.034, 0.609],\n                        120213: [0.557, 0.207, 0.604],\n                        120214: [0.485, 0.211, 0.596],\n                        120215: [0.472, 0.026, 0.46],\n                        120216: [0.479, 0.034, 0.523],\n                        120217: [0.648, 0.027, 0.393, { ic: 0.014 }],\n                        120218: [0.472, 0.032, 0.589, { ic: 0.014 }],\n                        120219: [0.546, 0.027, 0.604],\n                        120220: [0.549, 0.032, 0.918],\n                        120221: [0.471, 0.188, 0.459],\n                        120222: [0.557, 0.221, 0.589],\n                        120223: [0.471, 0.214, 0.461],\n                        120224: [0.694, 0, 0.667],\n                        120225: [0.694, 0, 0.667],\n                        120226: [0.705, 0.011, 0.639],\n                        120227: [0.694, 0, 0.722],\n                        120228: [0.691, 0, 0.597],\n                        120229: [0.691, 0, 0.569],\n                        120230: [0.704, 0.011, 0.667],\n                        120231: [0.694, 0, 0.708],\n                        120232: [0.694, 0, 0.278],\n                        120233: [0.694, 0.022, 0.472],\n                        120234: [0.694, 0, 0.694],\n                        120235: [0.694, 0, 0.542],\n                        120236: [0.694, 0, 0.875],\n                        120237: [0.694, 0, 0.708],\n                        120238: [0.715, 0.022, 0.736],\n                        120239: [0.694, 0, 0.639],\n                        120240: [0.715, 0.125, 0.736],\n                        120241: [0.694, 0, 0.646],\n                        120242: [0.716, 0.022, 0.556],\n                        120243: [0.688, 0, 0.681],\n                        120244: [0.694, 0.022, 0.688],\n                        120245: [0.694, 0, 0.667],\n                        120246: [0.694, 0, 0.944],\n                        120247: [0.694, 0, 0.667],\n                        120248: [0.694, 0, 0.667],\n                        120249: [0.694, 0, 0.611],\n                        120250: [0.46, 0.01, 0.481],\n                        120251: [0.694, 0.011, 0.517],\n                        120252: [0.46, 0.01, 0.444],\n                        120253: [0.694, 0.01, 0.517],\n                        120254: [0.461, 0.01, 0.444],\n                        120255: [0.705, 0, 0.306, { ic: 0.041 }],\n                        120256: [0.455, 0.206, 0.5],\n                        120257: [0.694, 0, 0.517],\n                        120258: [0.68, 0, 0.239],\n                        120259: [0.68, 0.205, 0.267],\n                        120260: [0.694, 0, 0.489],\n                        120261: [0.694, 0, 0.239],\n                        120262: [0.455, 0, 0.794],\n                        120263: [0.455, 0, 0.517],\n                        120264: [0.46, 0.01, 0.5],\n                        120265: [0.455, 0.194, 0.517],\n                        120266: [0.455, 0.194, 0.517],\n                        120267: [0.455, 0, 0.342],\n                        120268: [0.46, 0.01, 0.383],\n                        120269: [0.571, 0.01, 0.361],\n                        120270: [0.444, 0.01, 0.517],\n                        120271: [0.444, 0, 0.461],\n                        120272: [0.444, 0, 0.683],\n                        120273: [0.444, 0, 0.461],\n                        120274: [0.444, 0.204, 0.461],\n                        120275: [0.444, 0, 0.435],\n                        120276: [0.694, 0, 0.733],\n                        120277: [0.694, 0, 0.733],\n                        120278: [0.704, 0.011, 0.703],\n                        120279: [0.694, 0, 0.794],\n                        120280: [0.691, 0, 0.642],\n                        120281: [0.691, 0, 0.611],\n                        120282: [0.705, 0.011, 0.733],\n                        120283: [0.694, 0, 0.794],\n                        120284: [0.694, 0, 0.331],\n                        120285: [0.694, 0.022, 0.519],\n                        120286: [0.694, 0, 0.764],\n                        120287: [0.694, 0, 0.581],\n                        120288: [0.694, 0, 0.978],\n                        120289: [0.694, 0, 0.794],\n                        120290: [0.716, 0.022, 0.794],\n                        120291: [0.694, 0, 0.703],\n                        120292: [0.716, 0.106, 0.794],\n                        120293: [0.694, 0, 0.703],\n                        120294: [0.716, 0.022, 0.611],\n                        120295: [0.688, 0, 0.733],\n                        120296: [0.694, 0.022, 0.764],\n                        120297: [0.694, 0, 0.733],\n                        120298: [0.694, 0, 1.039],\n                        120299: [0.694, 0, 0.733],\n                        120300: [0.694, 0, 0.733],\n                        120301: [0.694, 0, 0.672],\n                        120302: [0.475, 0.011, 0.525],\n                        120303: [0.694, 0.01, 0.561],\n                        120304: [0.475, 0.011, 0.489],\n                        120305: [0.694, 0.011, 0.561],\n                        120306: [0.474, 0.01, 0.511],\n                        120307: [0.705, 0, 0.336, { ic: 0.045 }],\n                        120308: [0.469, 0.206, 0.55],\n                        120309: [0.694, 0, 0.561],\n                        120310: [0.695, 0, 0.256],\n                        120311: [0.695, 0.205, 0.286],\n                        120312: [0.694, 0, 0.531],\n                        120313: [0.694, 0, 0.256],\n                        120314: [0.469, 0, 0.867],\n                        120315: [0.468, 0, 0.561],\n                        120316: [0.474, 0.011, 0.55],\n                        120317: [0.469, 0.194, 0.561],\n                        120318: [0.469, 0.194, 0.561],\n                        120319: [0.469, 0, 0.372],\n                        120320: [0.474, 0.01, 0.422],\n                        120321: [0.589, 0.01, 0.404],\n                        120322: [0.458, 0.011, 0.561],\n                        120323: [0.458, 0, 0.5],\n                        120324: [0.458, 0, 0.744],\n                        120325: [0.458, 0, 0.5],\n                        120326: [0.458, 0.205, 0.5],\n                        120327: [0.458, 0, 0.476],\n                        120328: [0.694, 0, 0.667],\n                        120329: [0.694, 0, 0.667, { ic: 0.029 }],\n                        120330: [0.705, 0.01, 0.639, { ic: 0.08 }],\n                        120331: [0.694, 0, 0.722, { ic: 0.025 }],\n                        120332: [0.691, 0, 0.597, { ic: 0.091 }],\n                        120333: [0.691, 0, 0.569, { ic: 0.104 }],\n                        120334: [0.705, 0.011, 0.667, { ic: 0.063 }],\n                        120335: [0.694, 0, 0.708, { ic: 0.06 }],\n                        120336: [0.694, 0, 0.278, { ic: 0.06 }],\n                        120337: [0.694, 0.022, 0.472, { ic: 0.063 }],\n                        120338: [0.694, 0, 0.694, { ic: 0.091 }],\n                        120339: [0.694, 0, 0.542],\n                        120340: [0.694, 0, 0.875, { ic: 0.054 }],\n                        120341: [0.694, 0, 0.708, { ic: 0.058 }],\n                        120342: [0.716, 0.022, 0.736, { ic: 0.027 }],\n                        120343: [0.694, 0, 0.639, { ic: 0.051 }],\n                        120344: [0.716, 0.125, 0.736, { ic: 0.027 }],\n                        120345: [0.694, 0, 0.646, { ic: 0.052 }],\n                        120346: [0.716, 0.022, 0.556, { ic: 0.053 }],\n                        120347: [0.688, 0, 0.681, { ic: 0.109 }],\n                        120348: [0.694, 0.022, 0.688, { ic: 0.059 }],\n                        120349: [0.694, 0, 0.667, { ic: 0.132 }],\n                        120350: [0.694, 0, 0.944, { ic: 0.132 }],\n                        120351: [0.694, 0, 0.667, { ic: 0.091 }],\n                        120352: [0.694, 0, 0.667, { ic: 0.143 }],\n                        120353: [0.694, 0, 0.611, { ic: 0.091 }],\n                        120354: [0.461, 0.01, 0.481],\n                        120355: [0.694, 0.011, 0.517, { ic: 0.022 }],\n                        120356: [0.46, 0.011, 0.444, { ic: 0.055 }],\n                        120357: [0.694, 0.01, 0.517, { ic: 0.071 }],\n                        120358: [0.46, 0.011, 0.444, { ic: 0.028 }],\n                        120359: [0.705, 0, 0.306, { ic: 0.188 }],\n                        120360: [0.455, 0.206, 0.5, { ic: 0.068 }],\n                        120361: [0.694, 0, 0.517],\n                        120362: [0.68, 0, 0.239, { ic: 0.076 }],\n                        120363: [0.68, 0.204, 0.267, { ic: 0.069 }],\n                        120364: [0.694, 0, 0.489, { ic: 0.054 }],\n                        120365: [0.694, 0, 0.239, { ic: 0.072 }],\n                        120366: [0.455, 0, 0.794],\n                        120367: [0.454, 0, 0.517],\n                        120368: [0.461, 0.011, 0.5, { ic: 0.023 }],\n                        120369: [0.455, 0.194, 0.517, { ic: 0.021 }],\n                        120370: [0.455, 0.194, 0.517, { ic: 0.021 }],\n                        120371: [0.455, 0, 0.342, { ic: 0.082 }],\n                        120372: [0.461, 0.011, 0.383, { ic: 0.053 }],\n                        120373: [0.571, 0.011, 0.361, { ic: 0.049 }],\n                        120374: [0.444, 0.01, 0.517, { ic: 0.02 }],\n                        120375: [0.444, 0, 0.461, { ic: 0.079 }],\n                        120376: [0.444, 0, 0.683, { ic: 0.079 }],\n                        120377: [0.444, 0, 0.461, { ic: 0.076 }],\n                        120378: [0.444, 0.205, 0.461, { ic: 0.079 }],\n                        120379: [0.444, 0, 0.435, { ic: 0.059 }],\n                        120432: [0.623, 0, 0.525],\n                        120433: [0.611, 0, 0.525],\n                        120434: [0.622, 0.011, 0.525],\n                        120435: [0.611, 0, 0.525],\n                        120436: [0.611, 0, 0.525],\n                        120437: [0.611, 0, 0.525],\n                        120438: [0.622, 0.011, 0.525],\n                        120439: [0.611, 0, 0.525],\n                        120440: [0.611, 0, 0.525],\n                        120441: [0.611, 0.011, 0.525],\n                        120442: [0.611, 0, 0.525],\n                        120443: [0.611, 0, 0.525],\n                        120444: [0.611, 0, 0.525],\n                        120445: [0.611, 0, 0.525],\n                        120446: [0.621, 0.01, 0.525],\n                        120447: [0.611, 0, 0.525],\n                        120448: [0.621, 0.138, 0.525],\n                        120449: [0.611, 0.011, 0.525],\n                        120450: [0.622, 0.011, 0.525],\n                        120451: [0.611, 0, 0.525],\n                        120452: [0.611, 0.011, 0.525],\n                        120453: [0.611, 0.007, 0.525],\n                        120454: [0.611, 0.007, 0.525],\n                        120455: [0.611, 0, 0.525],\n                        120456: [0.611, 0, 0.525],\n                        120457: [0.611, 0, 0.525],\n                        120458: [0.439, 0.006, 0.525],\n                        120459: [0.611, 0.006, 0.525],\n                        120460: [0.44, 0.006, 0.525],\n                        120461: [0.611, 0.006, 0.525],\n                        120462: [0.44, 0.006, 0.525],\n                        120463: [0.617, 0, 0.525],\n                        120464: [0.442, 0.229, 0.525],\n                        120465: [0.611, 0, 0.525],\n                        120466: [0.612, 0, 0.525],\n                        120467: [0.612, 0.228, 0.525],\n                        120468: [0.611, 0, 0.525],\n                        120469: [0.611, 0, 0.525],\n                        120470: [0.436, 0, 0.525, { ic: 0.011 }],\n                        120471: [0.436, 0, 0.525],\n                        120472: [0.44, 0.006, 0.525],\n                        120473: [0.437, 0.221, 0.525],\n                        120474: [0.437, 0.221, 0.525, { ic: 0.02 }],\n                        120475: [0.437, 0, 0.525],\n                        120476: [0.44, 0.006, 0.525],\n                        120477: [0.554, 0.006, 0.525],\n                        120478: [0.431, 0.005, 0.525],\n                        120479: [0.431, 0, 0.525],\n                        120480: [0.431, 0, 0.525],\n                        120481: [0.431, 0, 0.525],\n                        120482: [0.431, 0.228, 0.525],\n                        120483: [0.431, 0, 0.525],\n                        120488: [0.698, 0, 0.869],\n                        120489: [0.686, 0, 0.818],\n                        120490: [0.68, 0, 0.692],\n                        120491: [0.698, 0, 0.958],\n                        120492: [0.68, 0, 0.756],\n                        120493: [0.686, 0, 0.703],\n                        120494: [0.686, 0, 0.9],\n                        120495: [0.696, 0.01, 0.894],\n                        120496: [0.686, 0, 0.436],\n                        120497: [0.686, 0, 0.901],\n                        120498: [0.698, 0, 0.806],\n                        120499: [0.686, 0, 1.092],\n                        120500: [0.686, 0, 0.9],\n                        120501: [0.675, 0, 0.767],\n                        120502: [0.696, 0.01, 0.864],\n                        120503: [0.68, 0, 0.9],\n                        120504: [0.686, 0, 0.786],\n                        120506: [0.686, 0, 0.831],\n                        120507: [0.675, 0, 0.8],\n                        120508: [0.697, 0, 0.894],\n                        120509: [0.686, 0, 0.831],\n                        120510: [0.686, 0, 0.869],\n                        120511: [0.686, 0, 0.894],\n                        120512: [0.696, 0, 0.831],\n                        120513: [0.686, 0.024, 0.958],\n                        120546: [0.716, 0, 0.75, { sk: 0.139 }],\n                        120547: [0.683, 0, 0.759, { sk: 0.0833 }],\n                        120548: [0.68, 0, 0.615, { ic: 0.106, sk: 0.0833 }],\n                        120549: [0.716, 0, 0.833, { sk: 0.167 }],\n                        120550: [0.68, 0, 0.738, { ic: 0.026, sk: 0.0833 }],\n                        120551: [0.683, 0, 0.683, { ic: 0.04, sk: 0.0833 }],\n                        120552: [0.683, 0, 0.831, { ic: 0.057, sk: 0.0556 }],\n                        120553: [0.704, 0.022, 0.763, { sk: 0.0833 }],\n                        120554: [0.683, 0, 0.44, { ic: 0.064, sk: 0.111 }],\n                        120555: [0.683, 0, 0.849, { ic: 0.04, sk: 0.0556 }],\n                        120556: [0.716, 0, 0.694, { sk: 0.167 }],\n                        120557: [0.683, 0, 0.97, { ic: 0.081, sk: 0.0833 }],\n                        120558: [0.683, 0, 0.803, { ic: 0.085, sk: 0.0833 }],\n                        120559: [0.677, 0, 0.742, { ic: 0.035, sk: 0.0833 }],\n                        120560: [0.704, 0.022, 0.763, { sk: 0.0833 }],\n                        120561: [0.68, 0, 0.831, { ic: 0.056, sk: 0.0556 }],\n                        120562: [0.683, 0, 0.642, { ic: 0.109, sk: 0.0833 }],\n                        120564: [0.683, 0, 0.78, { ic: 0.026, sk: 0.0833 }],\n                        120565: [0.677, 0, 0.584, { ic: 0.12, sk: 0.0833 }],\n                        120566: [0.705, 0, 0.583, { ic: 0.117, sk: 0.0556 }],\n                        120567: [0.683, 0, 0.667, { sk: 0.0833 }],\n                        120568: [0.683, 0, 0.828, { ic: 0.024, sk: 0.0833 }],\n                        120569: [0.683, 0, 0.612, { ic: 0.08, sk: 0.0556 }],\n                        120570: [0.704, 0, 0.772, { ic: 0.014, sk: 0.0833 }],\n                        120572: [0.442, 0.011, 0.64, { sk: 0.0278 }],\n                        120573: [0.705, 0.194, 0.566, { sk: 0.0833 }],\n                        120574: [0.441, 0.216, 0.518, { ic: 0.025 }],\n                        120575: [0.717, 0.01, 0.444, { sk: 0.0556 }],\n                        120576: [0.452, 0.022, 0.466, { sk: 0.0833 }],\n                        120577: [\n                            0.704,\n                            0.204,\n                            0.438,\n                            { ic: 0.033, sk: 0.0833 },\n                        ],\n                        120578: [0.442, 0.216, 0.497, { sk: 0.0556 }],\n                        120579: [0.705, 0.01, 0.469, { sk: 0.0833 }],\n                        120580: [0.442, 0.01, 0.354, { sk: 0.0556 }],\n                        120581: [0.442, 0.011, 0.576],\n                        120582: [0.694, 0.012, 0.583],\n                        120583: [0.442, 0.216, 0.603, { sk: 0.0278 }],\n                        120584: [0.442, 0, 0.494, { ic: 0.036, sk: 0.0278 }],\n                        120585: [0.704, 0.205, 0.438, { sk: 0.111 }],\n                        120586: [0.441, 0.011, 0.485, { sk: 0.0556 }],\n                        120587: [0.431, 0.011, 0.57],\n                        120588: [0.442, 0.216, 0.517, { sk: 0.0833 }],\n                        120589: [\n                            0.442,\n                            0.107,\n                            0.363,\n                            { ic: 0.042, sk: 0.0833 },\n                        ],\n                        120590: [0.431, 0.011, 0.571],\n                        120591: [0.431, 0.013, 0.437, { ic: 0.08, sk: 0.0278 }],\n                        120592: [0.443, 0.01, 0.54, { sk: 0.0278 }],\n                        120593: [0.442, 0.218, 0.654, { sk: 0.0833 }],\n                        120594: [0.442, 0.204, 0.626, { sk: 0.0556 }],\n                        120595: [0.694, 0.205, 0.651, { sk: 0.111 }],\n                        120596: [0.443, 0.011, 0.622],\n                        120597: [\n                            0.715,\n                            0.022,\n                            0.531,\n                            { ic: 0.035, sk: 0.0833 },\n                        ],\n                        120598: [0.431, 0.011, 0.406, { sk: 0.0556 }],\n                        120599: [0.705, 0.011, 0.591, { sk: 0.0833 }],\n                        120600: [0.434, 0.006, 0.667, { ic: 0.067 }],\n                        120601: [0.694, 0.205, 0.596, { sk: 0.0833 }],\n                        120602: [0.442, 0.194, 0.517, { sk: 0.0833 }],\n                        120603: [0.431, 0.01, 0.828],\n                        120604: [0.711, 0, 0.869, { sk: 0.16 }],\n                        120605: [0.686, 0, 0.866, { sk: 0.0958 }],\n                        120606: [0.68, 0, 0.657, { ic: 0.12, sk: 0.0958 }],\n                        120607: [0.711, 0, 0.958, { sk: 0.192 }],\n                        120608: [0.68, 0, 0.81, { ic: 0.015, sk: 0.0958 }],\n                        120609: [0.686, 0, 0.773, { ic: 0.032, sk: 0.0958 }],\n                        120610: [0.686, 0, 0.982, { ic: 0.045, sk: 0.0639 }],\n                        120611: [0.702, 0.017, 0.867, { sk: 0.0958 }],\n                        120612: [0.686, 0, 0.511, { ic: 0.062, sk: 0.128 }],\n                        120613: [0.686, 0, 0.971, { ic: 0.032, sk: 0.0639 }],\n                        120614: [0.711, 0, 0.806, { sk: 0.192 }],\n                        120615: [0.686, 0, 1.142, { ic: 0.077, sk: 0.0958 }],\n                        120616: [0.686, 0, 0.95, { ic: 0.077, sk: 0.0958 }],\n                        120617: [0.675, 0, 0.841, { ic: 0.026, sk: 0.0958 }],\n                        120618: [0.703, 0.017, 0.837, { sk: 0.0958 }],\n                        120619: [0.68, 0, 0.982, { ic: 0.044, sk: 0.0639 }],\n                        120620: [0.686, 0, 0.723, { ic: 0.124, sk: 0.0958 }],\n                        120622: [0.686, 0, 0.885, { ic: 0.017, sk: 0.0958 }],\n                        120623: [0.675, 0, 0.637, { ic: 0.135, sk: 0.0958 }],\n                        120624: [0.703, 0, 0.671, { ic: 0.131, sk: 0.0639 }],\n                        120625: [0.686, 0, 0.767, { sk: 0.0958 }],\n                        120626: [0.686, 0, 0.947, { sk: 0.0958 }],\n                        120627: [0.686, 0, 0.714, { ic: 0.076, sk: 0.0639 }],\n                        120628: [0.703, 0, 0.879, { sk: 0.0958 }],\n                        120630: [0.452, 0.008, 0.761, { sk: 0.0319 }],\n                        120631: [0.701, 0.194, 0.66, { sk: 0.0958 }],\n                        120632: [0.451, 0.211, 0.59, { ic: 0.027 }],\n                        120633: [0.725, 0.008, 0.522, { sk: 0.0639 }],\n                        120634: [0.461, 0.017, 0.529, { sk: 0.0958 }],\n                        120635: [\n                            0.711,\n                            0.202,\n                            0.508,\n                            { ic: 0.013, sk: 0.0958 },\n                        ],\n                        120636: [0.452, 0.211, 0.6, { sk: 0.0639 }],\n                        120637: [0.702, 0.008, 0.562, { sk: 0.0958 }],\n                        120638: [0.452, 0.008, 0.412, { sk: 0.0639 }],\n                        120639: [0.452, 0.008, 0.668],\n                        120640: [0.694, 0.013, 0.671],\n                        120641: [0.452, 0.211, 0.708, { sk: 0.0319 }],\n                        120642: [0.452, 0, 0.577, { ic: 0.031, sk: 0.0319 }],\n                        120643: [0.711, 0.201, 0.508, { sk: 0.128 }],\n                        120644: [0.452, 0.008, 0.585, { sk: 0.0639 }],\n                        120645: [0.444, 0.008, 0.682],\n                        120646: [0.451, 0.211, 0.612, { sk: 0.0958 }],\n                        120647: [\n                            0.451,\n                            0.105,\n                            0.424,\n                            { ic: 0.033, sk: 0.0958 },\n                        ],\n                        120648: [0.444, 0.008, 0.686],\n                        120649: [\n                            0.444,\n                            0.013,\n                            0.521,\n                            { ic: 0.089, sk: 0.0319 },\n                        ],\n                        120650: [0.453, 0.008, 0.631, { sk: 0.0319 }],\n                        120651: [0.452, 0.216, 0.747, { sk: 0.0958 }],\n                        120652: [0.452, 0.201, 0.718, { sk: 0.0639 }],\n                        120653: [0.694, 0.202, 0.758, { sk: 0.128 }],\n                        120654: [0.453, 0.008, 0.718],\n                        120655: [0.71, 0.017, 0.628, { ic: 0.029, sk: 0.0958 }],\n                        120656: [0.444, 0.007, 0.483, { sk: 0.0639 }],\n                        120657: [0.701, 0.008, 0.692, { sk: 0.0958 }],\n                        120658: [0.434, 0.006, 0.667, { ic: 0.067 }],\n                        120659: [0.694, 0.202, 0.712, { sk: 0.0958 }],\n                        120660: [0.451, 0.194, 0.612, { sk: 0.0958 }],\n                        120661: [0.444, 0.008, 0.975],\n                        120662: [0.694, 0, 0.733],\n                        120663: [0.694, 0, 0.733],\n                        120664: [0.691, 0, 0.581],\n                        120665: [0.694, 0, 0.917],\n                        120666: [0.691, 0, 0.642],\n                        120667: [0.694, 0, 0.672],\n                        120668: [0.694, 0, 0.794],\n                        120669: [0.716, 0.022, 0.856],\n                        120670: [0.694, 0, 0.331],\n                        120671: [0.694, 0, 0.764],\n                        120672: [0.694, 0, 0.672],\n                        120673: [0.694, 0, 0.978],\n                        120674: [0.694, 0, 0.794],\n                        120675: [0.688, 0, 0.733],\n                        120676: [0.716, 0.022, 0.794],\n                        120677: [0.691, 0, 0.794],\n                        120678: [0.694, 0, 0.703],\n                        120680: [0.694, 0, 0.794],\n                        120681: [0.688, 0, 0.733],\n                        120682: [0.715, 0, 0.856],\n                        120683: [0.694, 0, 0.794],\n                        120684: [0.694, 0, 0.733],\n                        120685: [0.694, 0, 0.856],\n                        120686: [0.716, 0, 0.794],\n                        120782: [0.654, 0.01, 0.575],\n                        120783: [0.655, 0, 0.575],\n                        120784: [0.654, 0, 0.575],\n                        120785: [0.655, 0.011, 0.575],\n                        120786: [0.656, 0, 0.575],\n                        120787: [0.655, 0.011, 0.575],\n                        120788: [0.655, 0.011, 0.575],\n                        120789: [0.676, 0.011, 0.575],\n                        120790: [0.654, 0.011, 0.575],\n                        120791: [0.654, 0.011, 0.575],\n                        120802: [0.678, 0.022, 0.5],\n                        120803: [0.678, 0, 0.5],\n                        120804: [0.677, 0, 0.5],\n                        120805: [0.678, 0.022, 0.5],\n                        120806: [0.656, 0, 0.5],\n                        120807: [0.656, 0.021, 0.5],\n                        120808: [0.677, 0.022, 0.5],\n                        120809: [0.656, 0.011, 0.5],\n                        120810: [0.678, 0.022, 0.5],\n                        120811: [0.677, 0.022, 0.5],\n                        120812: [0.715, 0.022, 0.55],\n                        120813: [0.716, 0, 0.55],\n                        120814: [0.716, 0, 0.55],\n                        120815: [0.716, 0.022, 0.55],\n                        120816: [0.694, 0, 0.55],\n                        120817: [0.694, 0.022, 0.55],\n                        120818: [0.716, 0.022, 0.55],\n                        120819: [0.695, 0.011, 0.55],\n                        120820: [0.715, 0.022, 0.55],\n                        120821: [0.716, 0.022, 0.55],\n                        120822: [0.621, 0.01, 0.525],\n                        120823: [0.622, 0, 0.525],\n                        120824: [0.622, 0, 0.525],\n                        120825: [0.622, 0.011, 0.525],\n                        120826: [0.624, 0, 0.525],\n                        120827: [0.611, 0.01, 0.525],\n                        120828: [0.622, 0.011, 0.525],\n                        120829: [0.627, 0.01, 0.525],\n                        120830: [0.621, 0.01, 0.525],\n                        120831: [0.622, 0.011, 0.525],\n                    });\n            },\n            4886: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.sansSerifBoldItalic = void 0),\n                    (e.sansSerifBoldItalic = {\n                        305: [0.458, 0, 0.256],\n                        567: [0.458, 0.205, 0.286],\n                    });\n            },\n            4471: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.sansSerifBold = void 0),\n                    (e.sansSerifBold = {\n                        33: [0.694, 0, 0.367],\n                        34: [0.694, -0.442, 0.558],\n                        35: [0.694, 0.193, 0.917],\n                        36: [0.75, 0.056, 0.55],\n                        37: [0.75, 0.056, 1.029],\n                        38: [0.716, 0.022, 0.831],\n                        39: [0.694, -0.442, 0.306],\n                        40: [0.75, 0.249, 0.428],\n                        41: [0.75, 0.25, 0.428],\n                        42: [0.75, -0.293, 0.55],\n                        43: [0.617, 0.116, 0.856],\n                        44: [0.146, 0.106, 0.306],\n                        45: [0.273, -0.186, 0.367],\n                        46: [0.146, 0, 0.306],\n                        47: [0.75, 0.249, 0.55],\n                        58: [0.458, 0, 0.306],\n                        59: [0.458, 0.106, 0.306],\n                        61: [0.407, -0.094, 0.856],\n                        63: [0.705, 0, 0.519],\n                        64: [0.704, 0.011, 0.733],\n                        91: [0.75, 0.25, 0.343],\n                        93: [0.75, 0.25, 0.343],\n                        94: [0.694, -0.537, 0.55],\n                        95: [-0.023, 0.11, 0.55],\n                        126: [0.344, -0.198, 0.55],\n                        305: [0.458, 0, 0.256],\n                        567: [0.458, 0.205, 0.286],\n                        768: [0.694, -0.537, 0],\n                        769: [0.694, -0.537, 0],\n                        770: [0.694, -0.537, 0],\n                        771: [0.694, -0.548, 0],\n                        772: [0.66, -0.56, 0],\n                        774: [0.694, -0.552, 0],\n                        775: [0.695, -0.596, 0],\n                        776: [0.695, -0.595, 0],\n                        778: [0.694, -0.538, 0],\n                        779: [0.694, -0.537, 0],\n                        780: [0.657, -0.5, 0],\n                        8211: [0.327, -0.24, 0.55],\n                        8212: [0.327, -0.24, 1.1],\n                        8213: [0.327, -0.24, 1.1],\n                        8215: [-0.023, 0.11, 0.55],\n                        8216: [0.694, -0.443, 0.306],\n                        8217: [0.694, -0.442, 0.306],\n                        8220: [0.694, -0.443, 0.558],\n                        8221: [0.694, -0.442, 0.558],\n                        8260: [0.75, 0.249, 0.55],\n                        8710: [0.694, 0, 0.917],\n                    });\n            },\n            5181: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.sansSerifItalic = void 0),\n                    (e.sansSerifItalic = {\n                        33: [0.694, 0, 0.319, { ic: 0.036 }],\n                        34: [0.694, -0.471, 0.5],\n                        35: [0.694, 0.194, 0.833, { ic: 0.018 }],\n                        36: [0.75, 0.056, 0.5, { ic: 0.065 }],\n                        37: [0.75, 0.056, 0.833],\n                        38: [0.716, 0.022, 0.758],\n                        39: [0.694, -0.471, 0.278, { ic: 0.057 }],\n                        40: [0.75, 0.25, 0.389, { ic: 0.102 }],\n                        41: [0.75, 0.25, 0.389],\n                        42: [0.75, -0.306, 0.5, { ic: 0.068 }],\n                        43: [0.583, 0.083, 0.778],\n                        44: [0.098, 0.125, 0.278],\n                        45: [0.259, -0.186, 0.333],\n                        46: [0.098, 0, 0.278],\n                        47: [0.75, 0.25, 0.5, { ic: 0.1 }],\n                        48: [0.678, 0.022, 0.5, { ic: 0.049 }],\n                        49: [0.678, 0, 0.5],\n                        50: [0.678, 0, 0.5, { ic: 0.051 }],\n                        51: [0.678, 0.022, 0.5, { ic: 0.044 }],\n                        52: [0.656, 0, 0.5, { ic: 0.021 }],\n                        53: [0.656, 0.022, 0.5, { ic: 0.055 }],\n                        54: [0.678, 0.022, 0.5, { ic: 0.048 }],\n                        55: [0.656, 0.011, 0.5, { ic: 0.096 }],\n                        56: [0.678, 0.022, 0.5, { ic: 0.054 }],\n                        57: [0.677, 0.022, 0.5, { ic: 0.045 }],\n                        58: [0.444, 0, 0.278],\n                        59: [0.444, 0.125, 0.278],\n                        61: [0.37, -0.13, 0.778, { ic: 0.018 }],\n                        63: [0.704, 0, 0.472, { ic: 0.064 }],\n                        64: [0.705, 0.01, 0.667, { ic: 0.04 }],\n                        91: [0.75, 0.25, 0.289, { ic: 0.136 }],\n                        93: [0.75, 0.25, 0.289, { ic: 0.064 }],\n                        94: [0.694, -0.527, 0.5, { ic: 0.033 }],\n                        95: [-0.038, 0.114, 0.5, { ic: 0.065 }],\n                        126: [0.327, -0.193, 0.5, { ic: 0.06 }],\n                        305: [0.444, 0, 0.239, { ic: 0.019 }],\n                        567: [0.444, 0.204, 0.267, { ic: 0.019 }],\n                        768: [0.694, -0.527, 0],\n                        769: [0.694, -0.527, 0, { ic: 0.063 }],\n                        770: [0.694, -0.527, 0, { ic: 0.033 }],\n                        771: [0.677, -0.543, 0, { ic: 0.06 }],\n                        772: [0.631, -0.552, 0, { ic: 0.064 }],\n                        774: [0.694, -0.508, 0, { ic: 0.073 }],\n                        775: [0.68, -0.576, 0],\n                        776: [0.68, -0.582, 0, { ic: 0.04 }],\n                        778: [0.693, -0.527, 0],\n                        779: [0.694, -0.527, 0, { ic: 0.063 }],\n                        780: [0.654, -0.487, 0, { ic: 0.06 }],\n                        913: [0.694, 0, 0.667],\n                        914: [0.694, 0, 0.667, { ic: 0.029 }],\n                        915: [0.691, 0, 0.542, { ic: 0.104 }],\n                        916: [0.694, 0, 0.833],\n                        917: [0.691, 0, 0.597, { ic: 0.091 }],\n                        918: [0.694, 0, 0.611, { ic: 0.091 }],\n                        919: [0.694, 0, 0.708, { ic: 0.06 }],\n                        920: [0.715, 0.022, 0.778, { ic: 0.026 }],\n                        921: [0.694, 0, 0.278, { ic: 0.06 }],\n                        922: [0.694, 0, 0.694, { ic: 0.091 }],\n                        923: [0.694, 0, 0.611],\n                        924: [0.694, 0, 0.875, { ic: 0.054 }],\n                        925: [0.694, 0, 0.708, { ic: 0.058 }],\n                        926: [0.688, 0, 0.667, { ic: 0.098 }],\n                        927: [0.716, 0.022, 0.736, { ic: 0.027 }],\n                        928: [0.691, 0, 0.708, { ic: 0.06 }],\n                        929: [0.694, 0, 0.639, { ic: 0.051 }],\n                        931: [0.694, 0, 0.722, { ic: 0.091 }],\n                        932: [0.688, 0, 0.681, { ic: 0.109 }],\n                        933: [0.716, 0, 0.778, { ic: 0.065 }],\n                        934: [0.694, 0, 0.722, { ic: 0.021 }],\n                        935: [0.694, 0, 0.667, { ic: 0.091 }],\n                        936: [0.694, 0, 0.778, { ic: 0.076 }],\n                        937: [0.716, 0, 0.722, { ic: 0.047 }],\n                        8211: [0.312, -0.236, 0.5, { ic: 0.065 }],\n                        8212: [0.312, -0.236, 1, { ic: 0.065 }],\n                        8213: [0.312, -0.236, 1, { ic: 0.065 }],\n                        8215: [-0.038, 0.114, 0.5, { ic: 0.065 }],\n                        8216: [0.694, -0.471, 0.278, { ic: 0.058 }],\n                        8217: [0.694, -0.471, 0.278, { ic: 0.057 }],\n                        8220: [0.694, -0.471, 0.5, { ic: 0.114 }],\n                        8221: [0.694, -0.471, 0.5],\n                        8260: [0.75, 0.25, 0.5, { ic: 0.1 }],\n                        8710: [0.694, 0, 0.833],\n                    });\n            },\n            3526: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.sansSerif = void 0),\n                    (e.sansSerif = {\n                        33: [0.694, 0, 0.319],\n                        34: [0.694, -0.471, 0.5],\n                        35: [0.694, 0.194, 0.833],\n                        36: [0.75, 0.056, 0.5],\n                        37: [0.75, 0.056, 0.833],\n                        38: [0.716, 0.022, 0.758],\n                        39: [0.694, -0.471, 0.278],\n                        40: [0.75, 0.25, 0.389],\n                        41: [0.75, 0.25, 0.389],\n                        42: [0.75, -0.306, 0.5],\n                        43: [0.583, 0.082, 0.778],\n                        44: [0.098, 0.125, 0.278],\n                        45: [0.259, -0.186, 0.333],\n                        46: [0.098, 0, 0.278],\n                        47: [0.75, 0.25, 0.5],\n                        58: [0.444, 0, 0.278],\n                        59: [0.444, 0.125, 0.278],\n                        61: [0.37, -0.13, 0.778],\n                        63: [0.704, 0, 0.472],\n                        64: [0.704, 0.011, 0.667],\n                        91: [0.75, 0.25, 0.289],\n                        93: [0.75, 0.25, 0.289],\n                        94: [0.694, -0.527, 0.5],\n                        95: [-0.038, 0.114, 0.5],\n                        126: [0.327, -0.193, 0.5],\n                        305: [0.444, 0, 0.239],\n                        567: [0.444, 0.205, 0.267],\n                        768: [0.694, -0.527, 0],\n                        769: [0.694, -0.527, 0],\n                        770: [0.694, -0.527, 0],\n                        771: [0.677, -0.543, 0],\n                        772: [0.631, -0.552, 0],\n                        774: [0.694, -0.508, 0],\n                        775: [0.68, -0.576, 0],\n                        776: [0.68, -0.582, 0],\n                        778: [0.694, -0.527, 0],\n                        779: [0.694, -0.527, 0],\n                        780: [0.654, -0.487, 0],\n                        913: [0.694, 0, 0.667],\n                        914: [0.694, 0, 0.667],\n                        915: [0.691, 0, 0.542],\n                        916: [0.694, 0, 0.833],\n                        917: [0.691, 0, 0.597],\n                        918: [0.694, 0, 0.611],\n                        919: [0.694, 0, 0.708],\n                        920: [0.716, 0.021, 0.778],\n                        921: [0.694, 0, 0.278],\n                        922: [0.694, 0, 0.694],\n                        923: [0.694, 0, 0.611],\n                        924: [0.694, 0, 0.875],\n                        925: [0.694, 0, 0.708],\n                        926: [0.688, 0, 0.667],\n                        927: [0.715, 0.022, 0.736],\n                        928: [0.691, 0, 0.708],\n                        929: [0.694, 0, 0.639],\n                        931: [0.694, 0, 0.722],\n                        932: [0.688, 0, 0.681],\n                        933: [0.716, 0, 0.778],\n                        934: [0.694, 0, 0.722],\n                        935: [0.694, 0, 0.667],\n                        936: [0.694, 0, 0.778],\n                        937: [0.716, 0, 0.722],\n                        8211: [0.312, -0.236, 0.5],\n                        8212: [0.312, -0.236, 1],\n                        8213: [0.312, -0.236, 1],\n                        8215: [-0.038, 0.114, 0.5],\n                        8216: [0.694, -0.471, 0.278],\n                        8217: [0.694, -0.471, 0.278],\n                        8220: [0.694, -0.471, 0.5],\n                        8221: [0.694, -0.471, 0.5],\n                        8260: [0.75, 0.25, 0.5],\n                        8710: [0.694, 0, 0.833],\n                    });\n            },\n            5649: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.scriptBold = void 0),\n                    (e.scriptBold = {});\n            },\n            7153: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.script = void 0),\n                    (e.script = {});\n            },\n            5745: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.smallop = void 0),\n                    (e.smallop = {\n                        40: [0.85, 0.349, 0.458],\n                        41: [0.85, 0.349, 0.458],\n                        47: [0.85, 0.349, 0.578],\n                        91: [0.85, 0.349, 0.417],\n                        92: [0.85, 0.349, 0.578],\n                        93: [0.85, 0.349, 0.417],\n                        123: [0.85, 0.349, 0.583],\n                        125: [0.85, 0.349, 0.583],\n                        710: [0.744, -0.551, 0.556],\n                        732: [0.722, -0.597, 0.556],\n                        770: [0.744, -0.551, 0],\n                        771: [0.722, -0.597, 0],\n                        8214: [0.602, 0, 0.778],\n                        8260: [0.85, 0.349, 0.578],\n                        8593: [0.6, 0, 0.667],\n                        8595: [0.6, 0, 0.667],\n                        8657: [0.599, 0, 0.778],\n                        8659: [0.6, 0, 0.778],\n                        8719: [0.75, 0.25, 0.944],\n                        8720: [0.75, 0.25, 0.944],\n                        8721: [0.75, 0.25, 1.056],\n                        8730: [0.85, 0.35, 1, { ic: 0.02 }],\n                        8739: [0.627, 0.015, 0.333],\n                        8741: [0.627, 0.015, 0.556],\n                        8747: [0.805, 0.306, 0.472, { ic: 0.138 }],\n                        8748: [0.805, 0.306, 0.819, { ic: 0.138 }],\n                        8749: [0.805, 0.306, 1.166, { ic: 0.138 }],\n                        8750: [0.805, 0.306, 0.472, { ic: 0.138 }],\n                        8896: [0.75, 0.249, 0.833],\n                        8897: [0.75, 0.249, 0.833],\n                        8898: [0.75, 0.249, 0.833],\n                        8899: [0.75, 0.249, 0.833],\n                        8968: [0.85, 0.349, 0.472],\n                        8969: [0.85, 0.349, 0.472],\n                        8970: [0.85, 0.349, 0.472],\n                        8971: [0.85, 0.349, 0.472],\n                        9001: [0.85, 0.35, 0.472],\n                        9002: [0.85, 0.35, 0.472],\n                        9168: [0.602, 0, 0.667],\n                        10072: [0.627, 0.015, 0.333],\n                        10216: [0.85, 0.35, 0.472],\n                        10217: [0.85, 0.35, 0.472],\n                        10752: [0.75, 0.25, 1.111],\n                        10753: [0.75, 0.25, 1.111],\n                        10754: [0.75, 0.25, 1.111],\n                        10756: [0.75, 0.249, 0.833],\n                        10758: [0.75, 0.249, 0.833],\n                        10764: [0.805, 0.306, 1.638, { ic: 0.138 }],\n                        12296: [0.85, 0.35, 0.472],\n                        12297: [0.85, 0.35, 0.472],\n                    });\n            },\n            1411: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texCalligraphicBold = void 0),\n                    (e.texCalligraphicBold = {\n                        65: [0.751, 0.049, 0.921, { ic: 0.068, sk: 0.224 }],\n                        66: [0.705, 0.017, 0.748, { sk: 0.16 }],\n                        67: [0.703, 0.02, 0.613, { sk: 0.16 }],\n                        68: [0.686, 0, 0.892, { sk: 0.0958 }],\n                        69: [0.703, 0.016, 0.607, { ic: 0.02, sk: 0.128 }],\n                        70: [0.686, 0.03, 0.814, { ic: 0.116, sk: 0.128 }],\n                        71: [0.703, 0.113, 0.682, { sk: 0.128 }],\n                        72: [0.686, 0.048, 0.987, { sk: 0.128 }],\n                        73: [0.686, 0, 0.642, { ic: 0.104, sk: 0.0319 }],\n                        74: [0.686, 0.114, 0.779, { ic: 0.158, sk: 0.192 }],\n                        75: [0.703, 0.017, 0.871, { sk: 0.0639 }],\n                        76: [0.703, 0.017, 0.788, { sk: 0.16 }],\n                        77: [0.703, 0.049, 1.378, { sk: 0.16 }],\n                        78: [0.84, 0.049, 0.937, { ic: 0.168, sk: 0.0958 }],\n                        79: [0.703, 0.017, 0.906, { sk: 0.128 }],\n                        80: [0.686, 0.067, 0.81, { ic: 0.036, sk: 0.0958 }],\n                        81: [0.703, 0.146, 0.939, { sk: 0.128 }],\n                        82: [0.686, 0.017, 0.99, { sk: 0.0958 }],\n                        83: [0.703, 0.016, 0.696, { ic: 0.025, sk: 0.16 }],\n                        84: [0.72, 0.069, 0.644, { ic: 0.303, sk: 0.0319 }],\n                        85: [0.686, 0.024, 0.715, { ic: 0.056, sk: 0.0958 }],\n                        86: [0.686, 0.077, 0.737, { ic: 0.037, sk: 0.0319 }],\n                        87: [0.686, 0.077, 1.169, { ic: 0.037, sk: 0.0958 }],\n                        88: [0.686, 0, 0.817, { ic: 0.089, sk: 0.16 }],\n                        89: [0.686, 0.164, 0.759, { ic: 0.038, sk: 0.0958 }],\n                        90: [0.686, 0, 0.818, { ic: 0.035, sk: 0.16 }],\n                        305: [0.452, 0.008, 0.394, { sk: 0.0319 }],\n                        567: [0.451, 0.201, 0.439, { sk: 0.0958 }],\n                    });\n            },\n            6384: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texCalligraphic = void 0),\n                    (e.texCalligraphic = {\n                        65: [0.728, 0.05, 0.798, { ic: 0.021, sk: 0.194 }],\n                        66: [0.705, 0.022, 0.657, { sk: 0.139 }],\n                        67: [0.705, 0.025, 0.527, { sk: 0.139 }],\n                        68: [0.683, 0, 0.771, { sk: 0.0833 }],\n                        69: [0.705, 0.022, 0.528, { ic: 0.036, sk: 0.111 }],\n                        70: [0.683, 0.032, 0.719, { ic: 0.11, sk: 0.111 }],\n                        71: [0.704, 0.119, 0.595, { sk: 0.111 }],\n                        72: [0.683, 0.048, 0.845, { sk: 0.111 }],\n                        73: [0.683, 0, 0.545, { ic: 0.097, sk: 0.0278 }],\n                        74: [0.683, 0.119, 0.678, { ic: 0.161, sk: 0.167 }],\n                        75: [0.705, 0.022, 0.762, { sk: 0.0556 }],\n                        76: [0.705, 0.022, 0.69, { sk: 0.139 }],\n                        77: [0.705, 0.05, 1.201, { sk: 0.139 }],\n                        78: [0.789, 0.05, 0.82, { ic: 0.159, sk: 0.0833 }],\n                        79: [0.705, 0.022, 0.796, { sk: 0.111 }],\n                        80: [0.683, 0.057, 0.696, { ic: 0.037, sk: 0.0833 }],\n                        81: [0.705, 0.131, 0.817, { sk: 0.111 }],\n                        82: [0.682, 0.022, 0.848, { sk: 0.0833 }],\n                        83: [0.705, 0.022, 0.606, { ic: 0.036, sk: 0.139 }],\n                        84: [0.717, 0.068, 0.545, { ic: 0.288, sk: 0.0278 }],\n                        85: [0.683, 0.028, 0.626, { ic: 0.061, sk: 0.0833 }],\n                        86: [0.683, 0.052, 0.613, { ic: 0.045, sk: 0.0278 }],\n                        87: [0.683, 0.053, 0.988, { ic: 0.046, sk: 0.0833 }],\n                        88: [0.683, 0, 0.713, { ic: 0.094, sk: 0.139 }],\n                        89: [0.683, 0.143, 0.668, { ic: 0.046, sk: 0.0833 }],\n                        90: [0.683, 0, 0.725, { ic: 0.042, sk: 0.139 }],\n                    });\n            },\n            6041: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texMathit = void 0),\n                    (e.texMathit = {\n                        65: [0.716, 0, 0.743],\n                        66: [0.683, 0, 0.704],\n                        67: [0.705, 0.021, 0.716],\n                        68: [0.683, 0, 0.755],\n                        69: [0.68, 0, 0.678],\n                        70: [0.68, 0, 0.653],\n                        71: [0.705, 0.022, 0.774],\n                        72: [0.683, 0, 0.743],\n                        73: [0.683, 0, 0.386],\n                        74: [0.683, 0.021, 0.525],\n                        75: [0.683, 0, 0.769],\n                        76: [0.683, 0, 0.627],\n                        77: [0.683, 0, 0.897],\n                        78: [0.683, 0, 0.743],\n                        79: [0.704, 0.022, 0.767],\n                        80: [0.683, 0, 0.678],\n                        81: [0.704, 0.194, 0.767],\n                        82: [0.683, 0.022, 0.729],\n                        83: [0.705, 0.022, 0.562],\n                        84: [0.677, 0, 0.716],\n                        85: [0.683, 0.022, 0.743],\n                        86: [0.683, 0.022, 0.743],\n                        87: [0.683, 0.022, 0.999],\n                        88: [0.683, 0, 0.743],\n                        89: [0.683, 0, 0.743],\n                        90: [0.683, 0, 0.613],\n                        97: [0.442, 0.011, 0.511],\n                        98: [0.694, 0.011, 0.46],\n                        99: [0.441, 0.01, 0.46],\n                        100: [0.694, 0.011, 0.511],\n                        101: [0.442, 0.01, 0.46],\n                        102: [0.705, 0.204, 0.307],\n                        103: [0.442, 0.205, 0.46],\n                        104: [0.694, 0.011, 0.511],\n                        105: [0.656, 0.01, 0.307],\n                        106: [0.656, 0.204, 0.307],\n                        107: [0.694, 0.011, 0.46],\n                        108: [0.694, 0.011, 0.256],\n                        109: [0.442, 0.011, 0.818],\n                        110: [0.442, 0.011, 0.562],\n                        111: [0.442, 0.011, 0.511],\n                        112: [0.442, 0.194, 0.511],\n                        113: [0.442, 0.194, 0.46],\n                        114: [0.442, 0.011, 0.422],\n                        115: [0.442, 0.011, 0.409],\n                        116: [0.626, 0.011, 0.332],\n                        117: [0.441, 0.011, 0.537],\n                        118: [0.443, 0.01, 0.46],\n                        119: [0.443, 0.011, 0.664],\n                        120: [0.442, 0.011, 0.464],\n                        121: [0.441, 0.205, 0.486],\n                        122: [0.442, 0.011, 0.409],\n                    });\n            },\n            8199: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texOldstyleBold = void 0),\n                    (e.texOldstyleBold = {\n                        48: [0.46, 0.017, 0.575],\n                        49: [0.461, 0, 0.575],\n                        50: [0.46, 0, 0.575],\n                        51: [0.461, 0.211, 0.575],\n                        52: [0.469, 0.194, 0.575],\n                        53: [0.461, 0.211, 0.575],\n                        54: [0.66, 0.017, 0.575],\n                        55: [0.476, 0.211, 0.575],\n                        56: [0.661, 0.017, 0.575],\n                        57: [0.461, 0.21, 0.575],\n                        65: [0.751, 0.049, 0.921, { ic: 0.068, sk: 0.224 }],\n                        66: [0.705, 0.017, 0.748, { sk: 0.16 }],\n                        67: [0.703, 0.02, 0.613, { sk: 0.16 }],\n                        68: [0.686, 0, 0.892, { sk: 0.0958 }],\n                        69: [0.703, 0.016, 0.607, { ic: 0.02, sk: 0.128 }],\n                        70: [0.686, 0.03, 0.814, { ic: 0.116, sk: 0.128 }],\n                        71: [0.703, 0.113, 0.682, { sk: 0.128 }],\n                        72: [0.686, 0.048, 0.987, { sk: 0.128 }],\n                        73: [0.686, 0, 0.642, { ic: 0.104, sk: 0.0319 }],\n                        74: [0.686, 0.114, 0.779, { ic: 0.158, sk: 0.192 }],\n                        75: [0.703, 0.017, 0.871, { sk: 0.0639 }],\n                        76: [0.703, 0.017, 0.788, { sk: 0.16 }],\n                        77: [0.703, 0.049, 1.378, { sk: 0.16 }],\n                        78: [0.84, 0.049, 0.937, { ic: 0.168, sk: 0.0958 }],\n                        79: [0.703, 0.017, 0.906, { sk: 0.128 }],\n                        80: [0.686, 0.067, 0.81, { ic: 0.036, sk: 0.0958 }],\n                        81: [0.703, 0.146, 0.939, { sk: 0.128 }],\n                        82: [0.686, 0.017, 0.99, { sk: 0.0958 }],\n                        83: [0.703, 0.016, 0.696, { ic: 0.025, sk: 0.16 }],\n                        84: [0.72, 0.069, 0.644, { ic: 0.303, sk: 0.0319 }],\n                        85: [0.686, 0.024, 0.715, { ic: 0.056, sk: 0.0958 }],\n                        86: [0.686, 0.077, 0.737, { ic: 0.037, sk: 0.0319 }],\n                        87: [0.686, 0.077, 1.169, { ic: 0.037, sk: 0.0958 }],\n                        88: [0.686, 0, 0.817, { ic: 0.089, sk: 0.16 }],\n                        89: [0.686, 0.164, 0.759, { ic: 0.038, sk: 0.0958 }],\n                        90: [0.686, 0, 0.818, { ic: 0.035, sk: 0.16 }],\n                    });\n            },\n            9848: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texOldstyle = void 0),\n                    (e.texOldstyle = {\n                        48: [0.452, 0.022, 0.5],\n                        49: [0.453, 0, 0.5],\n                        50: [0.453, 0, 0.5],\n                        51: [0.452, 0.216, 0.5],\n                        52: [0.464, 0.194, 0.5],\n                        53: [0.453, 0.216, 0.5],\n                        54: [0.665, 0.022, 0.5],\n                        55: [0.463, 0.216, 0.5],\n                        56: [0.666, 0.021, 0.5],\n                        57: [0.453, 0.216, 0.5],\n                        65: [0.728, 0.05, 0.798, { ic: 0.021, sk: 0.194 }],\n                        66: [0.705, 0.022, 0.657, { sk: 0.139 }],\n                        67: [0.705, 0.025, 0.527, { sk: 0.139 }],\n                        68: [0.683, 0, 0.771, { sk: 0.0833 }],\n                        69: [0.705, 0.022, 0.528, { ic: 0.036, sk: 0.111 }],\n                        70: [0.683, 0.032, 0.719, { ic: 0.11, sk: 0.111 }],\n                        71: [0.704, 0.119, 0.595, { sk: 0.111 }],\n                        72: [0.683, 0.048, 0.845, { sk: 0.111 }],\n                        73: [0.683, 0, 0.545, { ic: 0.097, sk: 0.0278 }],\n                        74: [0.683, 0.119, 0.678, { ic: 0.161, sk: 0.167 }],\n                        75: [0.705, 0.022, 0.762, { sk: 0.0556 }],\n                        76: [0.705, 0.022, 0.69, { sk: 0.139 }],\n                        77: [0.705, 0.05, 1.201, { sk: 0.139 }],\n                        78: [0.789, 0.05, 0.82, { ic: 0.159, sk: 0.0833 }],\n                        79: [0.705, 0.022, 0.796, { sk: 0.111 }],\n                        80: [0.683, 0.057, 0.696, { ic: 0.037, sk: 0.0833 }],\n                        81: [0.705, 0.131, 0.817, { sk: 0.111 }],\n                        82: [0.682, 0.022, 0.848, { sk: 0.0833 }],\n                        83: [0.705, 0.022, 0.606, { ic: 0.036, sk: 0.139 }],\n                        84: [0.717, 0.068, 0.545, { ic: 0.288, sk: 0.0278 }],\n                        85: [0.683, 0.028, 0.626, { ic: 0.061, sk: 0.0833 }],\n                        86: [0.683, 0.052, 0.613, { ic: 0.045, sk: 0.0278 }],\n                        87: [0.683, 0.053, 0.988, { ic: 0.046, sk: 0.0833 }],\n                        88: [0.683, 0, 0.713, { ic: 0.094, sk: 0.139 }],\n                        89: [0.683, 0.143, 0.668, { ic: 0.046, sk: 0.0833 }],\n                        90: [0.683, 0, 0.725, { ic: 0.042, sk: 0.139 }],\n                    });\n            },\n            7906: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texSize3 = void 0),\n                    (e.texSize3 = {\n                        40: [1.45, 0.949, 0.736],\n                        41: [1.45, 0.949, 0.736],\n                        47: [1.45, 0.949, 1.044],\n                        91: [1.45, 0.949, 0.528],\n                        92: [1.45, 0.949, 1.044],\n                        93: [1.45, 0.949, 0.528],\n                        123: [1.45, 0.949, 0.75],\n                        125: [1.45, 0.949, 0.75],\n                        710: [0.772, -0.564, 1.444],\n                        732: [0.749, -0.61, 1.444],\n                        770: [0.772, -0.564, 0],\n                        771: [0.749, -0.61, 0],\n                        8260: [1.45, 0.949, 1.044],\n                        8730: [1.45, 0.95, 1, { ic: 0.02 }],\n                        8968: [1.45, 0.949, 0.583],\n                        8969: [1.45, 0.949, 0.583],\n                        8970: [1.45, 0.949, 0.583],\n                        8971: [1.45, 0.949, 0.583],\n                        9001: [1.45, 0.95, 0.75],\n                        9002: [1.45, 0.949, 0.75],\n                        10216: [1.45, 0.95, 0.75],\n                        10217: [1.45, 0.949, 0.75],\n                        12296: [1.45, 0.95, 0.75],\n                        12297: [1.45, 0.949, 0.75],\n                    });\n            },\n            2644: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texSize4 = void 0),\n                    (e.texSize4 = {\n                        40: [1.75, 1.249, 0.792],\n                        41: [1.75, 1.249, 0.792],\n                        47: [1.75, 1.249, 1.278],\n                        91: [1.75, 1.249, 0.583],\n                        92: [1.75, 1.249, 1.278],\n                        93: [1.75, 1.249, 0.583],\n                        123: [1.75, 1.249, 0.806],\n                        125: [1.75, 1.249, 0.806],\n                        710: [0.845, -0.561, 1.889, { ic: 0.013 }],\n                        732: [0.823, -0.583, 1.889],\n                        770: [0.845, -0.561, 0, { ic: 0.013 }],\n                        771: [0.823, -0.583, 0],\n                        8260: [1.75, 1.249, 1.278],\n                        8730: [1.75, 1.25, 1, { ic: 0.02 }],\n                        8968: [1.75, 1.249, 0.639],\n                        8969: [1.75, 1.249, 0.639],\n                        8970: [1.75, 1.249, 0.639],\n                        8971: [1.75, 1.249, 0.639],\n                        9001: [1.75, 1.248, 0.806],\n                        9002: [1.75, 1.248, 0.806],\n                        9115: [1.154, 0.655, 0.875],\n                        9116: [0.61, 0.01, 0.875],\n                        9117: [1.165, 0.644, 0.875],\n                        9118: [1.154, 0.655, 0.875],\n                        9119: [0.61, 0.01, 0.875],\n                        9120: [1.165, 0.644, 0.875],\n                        9121: [1.154, 0.645, 0.667],\n                        9122: [0.602, 0, 0.667],\n                        9123: [1.155, 0.644, 0.667],\n                        9124: [1.154, 0.645, 0.667],\n                        9125: [0.602, 0, 0.667],\n                        9126: [1.155, 0.644, 0.667],\n                        9127: [0.899, 0.01, 0.889],\n                        9128: [1.16, 0.66, 0.889],\n                        9129: [0.01, 0.899, 0.889],\n                        9130: [0.29, 0.015, 0.889],\n                        9131: [0.899, 0.01, 0.889],\n                        9132: [1.16, 0.66, 0.889],\n                        9133: [0.01, 0.899, 0.889],\n                        9143: [0.935, 0.885, 1.056],\n                        10216: [1.75, 1.248, 0.806],\n                        10217: [1.75, 1.248, 0.806],\n                        12296: [1.75, 1.248, 0.806],\n                        12297: [1.75, 1.248, 0.806],\n                        57344: [0.625, 0.014, 1.056],\n                        57345: [0.605, 0.014, 1.056, { ic: 0.02 }],\n                        57680: [0.12, 0.213, 0.45, { ic: 0.01 }],\n                        57681: [0.12, 0.213, 0.45, { ic: 0.024 }],\n                        57682: [0.333, 0, 0.45, { ic: 0.01 }],\n                        57683: [0.333, 0, 0.45, { ic: 0.024 }],\n                        57684: [0.32, 0.2, 0.4, { ic: 0.01 }],\n                        57685: [0.333, 0, 0.9, { ic: 0.01 }],\n                        57686: [0.12, 0.213, 0.9, { ic: 0.01 }],\n                    });\n            },\n            4926: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.texVariant = void 0),\n                    (e.texVariant = {\n                        710: [0.845, -0.561, 2.333, { ic: 0.013 }],\n                        732: [0.899, -0.628, 2.333],\n                        770: [0.845, -0.561, 0, { ic: 0.013 }],\n                        771: [0.899, -0.628, 0],\n                        1008: [0.434, 0.006, 0.667, { ic: 0.067 }],\n                        8463: [0.695, 0.013, 0.54, { ic: 0.022 }],\n                        8592: [0.437, -0.064, 0.5],\n                        8594: [0.437, -0.064, 0.5],\n                        8652: [0.514, 0.014, 1],\n                        8708: [0.86, 0.166, 0.556],\n                        8709: [0.587, 0, 0.778],\n                        8722: [0.27, -0.23, 0.5],\n                        8726: [0.43, 0.023, 0.778],\n                        8733: [0.472, -0.028, 0.778],\n                        8739: [0.43, 0.023, 0.222],\n                        8740: [0.43, 0.023, 0.222, { ic: 0.018 }],\n                        8741: [0.431, 0.023, 0.389],\n                        8742: [0.431, 0.024, 0.389, { ic: 0.018 }],\n                        8764: [0.365, -0.132, 0.778],\n                        8776: [0.481, -0.05, 0.778],\n                        8808: [0.752, 0.284, 0.778],\n                        8809: [0.752, 0.284, 0.778],\n                        8816: [0.919, 0.421, 0.778],\n                        8817: [0.919, 0.421, 0.778],\n                        8840: [0.828, 0.33, 0.778],\n                        8841: [0.828, 0.33, 0.778],\n                        8842: [0.634, 0.255, 0.778],\n                        8843: [0.634, 0.254, 0.778],\n                        8872: [0.694, 0, 0.611],\n                        8901: [0.189, 0, 0.278],\n                        8994: [0.378, -0.122, 0.778],\n                        8995: [0.378, -0.143, 0.778],\n                        9651: [0.575, 0.02, 0.722],\n                        9661: [0.576, 0.019, 0.722],\n                        10887: [0.801, 0.303, 0.778],\n                        10888: [0.801, 0.303, 0.778],\n                        10955: [0.752, 0.332, 0.778],\n                        10956: [0.752, 0.333, 0.778],\n                    });\n            },\n            5865: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MJContextMenu = void 0);\n                var a = r(5073),\n                    l = r(6186),\n                    c = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (\n                                (e.mathItem = null),\n                                (e.annotation = \"\"),\n                                (e.annotationTypes = {}),\n                                e\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.post = function (e, r) {\n                                if (this.mathItem) {\n                                    if (void 0 !== r) {\n                                        var n = this.mathItem.inputJax.name,\n                                            o = this.findID(\"Show\", \"Original\");\n                                        (o.content =\n                                            \"MathML\" === n\n                                                ? \"Original MathML\"\n                                                : n + \" Commands\"),\n                                            (this.findID(\n                                                \"Copy\",\n                                                \"Original\"\n                                            ).content = o.content);\n                                        var i = this.findID(\n                                            \"Settings\",\n                                            \"semantics\"\n                                        );\n                                        \"MathML\" === n\n                                            ? i.disable()\n                                            : i.enable(),\n                                            this.getAnnotationMenu(),\n                                            this.dynamicSubmenus();\n                                    }\n                                    t.prototype.post.call(this, e, r);\n                                }\n                            }),\n                            (e.prototype.unpost = function () {\n                                t.prototype.unpost.call(this),\n                                    (this.mathItem = null);\n                            }),\n                            (e.prototype.findID = function () {\n                                for (\n                                    var t, e, r = [], n = 0;\n                                    n < arguments.length;\n                                    n++\n                                )\n                                    r[n] = arguments[n];\n                                var o = this,\n                                    s = null;\n                                try {\n                                    for (\n                                        var a = i(r), c = a.next();\n                                        !c.done;\n                                        c = a.next()\n                                    ) {\n                                        var u = c.value;\n                                        o\n                                            ? ((s = o.find(u)),\n                                              (o =\n                                                  s instanceof l.Submenu\n                                                      ? s.submenu\n                                                      : null))\n                                            : (s = null);\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        c &&\n                                            !c.done &&\n                                            (e = a.return) &&\n                                            e.call(a);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                                return s;\n                            }),\n                            (e.prototype.getAnnotationMenu = function () {\n                                var t = this,\n                                    e = this.getAnnotations(\n                                        this.getSemanticNode()\n                                    );\n                                this.createAnnotationMenu(\n                                    \"Show\",\n                                    e,\n                                    function () {\n                                        return t.showAnnotation.post();\n                                    }\n                                ),\n                                    this.createAnnotationMenu(\n                                        \"Copy\",\n                                        e,\n                                        function () {\n                                            return t.copyAnnotation();\n                                        }\n                                    );\n                            }),\n                            (e.prototype.getSemanticNode = function () {\n                                for (\n                                    var t = this.mathItem.root;\n                                    t && !t.isKind(\"semantics\");\n\n                                ) {\n                                    if (t.isToken || 1 !== t.childNodes.length)\n                                        return null;\n                                    t = t.childNodes[0];\n                                }\n                                return t;\n                            }),\n                            (e.prototype.getAnnotations = function (t) {\n                                var e,\n                                    r,\n                                    n = [];\n                                if (!t) return n;\n                                try {\n                                    for (\n                                        var o = i(t.childNodes), s = o.next();\n                                        !s.done;\n                                        s = o.next()\n                                    ) {\n                                        var a = s.value;\n                                        if (a.isKind(\"annotation\")) {\n                                            var l = this.annotationMatch(a);\n                                            if (l) {\n                                                var c = a.childNodes.reduce(\n                                                    function (t, e) {\n                                                        return t + e.toString();\n                                                    },\n                                                    \"\"\n                                                );\n                                                n.push([l, c]);\n                                            }\n                                        }\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (r = o.return) &&\n                                            r.call(o);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return n;\n                            }),\n                            (e.prototype.annotationMatch = function (t) {\n                                var e,\n                                    r,\n                                    n = t.attributes.get(\"encoding\");\n                                try {\n                                    for (\n                                        var o = i(\n                                                Object.keys(\n                                                    this.annotationTypes\n                                                )\n                                            ),\n                                            s = o.next();\n                                        !s.done;\n                                        s = o.next()\n                                    ) {\n                                        var a = s.value;\n                                        if (\n                                            this.annotationTypes[a].indexOf(\n                                                n\n                                            ) >= 0\n                                        )\n                                            return a;\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (r = o.return) &&\n                                            r.call(o);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return null;\n                            }),\n                            (e.prototype.createAnnotationMenu = function (\n                                t,\n                                e,\n                                r\n                            ) {\n                                var n = this,\n                                    o = this.findID(t, \"Annotation\");\n                                (o.submenu = this.factory.get(\"subMenu\")(\n                                    this.factory,\n                                    {\n                                        items: e.map(function (t) {\n                                            var e = s(t, 2),\n                                                o = e[0],\n                                                i = e[1];\n                                            return {\n                                                type: \"command\",\n                                                id: o,\n                                                content: o,\n                                                action: function () {\n                                                    (n.annotation = i), r();\n                                                },\n                                            };\n                                        }),\n                                        id: \"annotations\",\n                                    },\n                                    o\n                                )),\n                                    e.length ? o.enable() : o.disable();\n                            }),\n                            (e.prototype.dynamicSubmenus = function () {\n                                var t, r;\n                                try {\n                                    for (\n                                        var n = i(e.DynamicSubmenus),\n                                            o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var a = s(o.value, 2),\n                                            l = a[0],\n                                            c = a[1],\n                                            u = this.find(l);\n                                        if (u) {\n                                            var p = c(this, u);\n                                            (u.submenu = p),\n                                                p.items.length\n                                                    ? u.enable()\n                                                    : u.disable();\n                                        }\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (r = n.return) &&\n                                            r.call(n);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (e.DynamicSubmenus = new Map()),\n                            e\n                        );\n                    })(a.ContextMenu);\n                e.MJContextMenu = c;\n            },\n            8310: function (t, e, r) {\n                var n =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    o =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    i =\n                        (this && this.__importDefault) ||\n                        function (t) {\n                            return t && t.__esModule ? t : { default: t };\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Menu = void 0);\n                var s = r(5713),\n                    a = r(4474),\n                    l = r(9515),\n                    c = r(7233),\n                    u = r(5865),\n                    p = r(473),\n                    h = r(4414),\n                    f = r(4922),\n                    d = r(6914),\n                    m = r(3463),\n                    y = r(7309),\n                    g = i(r(5445)),\n                    b = l.MathJax,\n                    v =\n                        \"undefined\" != typeof window &&\n                        window.navigator &&\n                        \"Mac\" === window.navigator.platform.substr(0, 3),\n                    _ = (function () {\n                        function t(t, e) {\n                            void 0 === e && (e = {});\n                            var r = this;\n                            (this.settings = null),\n                                (this.defaultSettings = null),\n                                (this.menu = null),\n                                (this.MmlVisitor = new p.MmlVisitor()),\n                                (this.jax = { CHTML: null, SVG: null }),\n                                (this.rerenderStart = a.STATE.LAST),\n                                (this.about = new f.Info(\n                                    '<b style=\"font-size:120%;\">MathJax</b> v' +\n                                        s.mathjax.version,\n                                    function () {\n                                        var t = [];\n                                        return (\n                                            t.push(\n                                                \"Input Jax: \" +\n                                                    r.document.inputJax\n                                                        .map(function (t) {\n                                                            return t.name;\n                                                        })\n                                                        .join(\", \")\n                                            ),\n                                            t.push(\n                                                \"Output Jax: \" +\n                                                    r.document.outputJax.name\n                                            ),\n                                            t.push(\n                                                \"Document Type: \" +\n                                                    r.document.kind\n                                            ),\n                                            t.join(\"<br/>\")\n                                        );\n                                    },\n                                    '<a href=\"https://www.mathjax.org\">www.mathjax.org</a>'\n                                )),\n                                (this.help = new f.Info(\n                                    \"<b>MathJax Help</b>\",\n                                    function () {\n                                        return [\n                                            \"<p><b>MathJax</b> is a JavaScript library that allows page\",\n                                            \" authors to include mathematics within their web pages.\",\n                                            \" As a reader, you don't need to do anything to make that happen.</p>\",\n                                            \"<p><b>Browsers</b>: MathJax works with all modern browsers including\",\n                                            \" Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.</p>\",\n                                            \"<p><b>Math Menu</b>: MathJax adds a contextual menu to equations.\",\n                                            \" Right-click or CTRL-click on any mathematics to access the menu.</p>\",\n                                            '<div style=\"margin-left: 1em;\">',\n                                            \"<p><b>Show Math As:</b> These options allow you to view the formula's\",\n                                            \" source markup (as MathML or in its original format).</p>\",\n                                            \"<p><b>Copy to Clipboard:</b> These options copy the formula's source markup,\",\n                                            \" as MathML or in its original format, to the clipboard\",\n                                            \" (in browsers that support that).</p>\",\n                                            \"<p><b>Math Settings:</b> These give you control over features of MathJax,\",\n                                            \" such the size of the mathematics, and the mechanism used\",\n                                            \" to display equations.</p>\",\n                                            \"<p><b>Accessibility</b>: MathJax can work with screen\",\n                                            \" readers to make mathematics accessible to the visually impaired.\",\n                                            \" Turn on the explorer to enable generation of speech strings\",\n                                            \" and the ability to investigate expressions interactively.</p>\",\n                                            \"<p><b>Language</b>: This menu lets you select the language used by MathJax\",\n                                            \" for its menus and warning messages. (Not yet implemented in version 3.)</p>\",\n                                            \"</div>\",\n                                            \"<p><b>Math Zoom</b>: If you are having difficulty reading an\",\n                                            \" equation, MathJax can enlarge it to help you see it better, or\",\n                                            \" you can scall all the math on the page to make it larger.\",\n                                            \" Turn these features on in the <b>Math Settings</b> menu.</p>\",\n                                            \"<p><b>Preferences</b>: MathJax uses your browser's localStorage database\",\n                                            \" to save the preferences set via this menu locally in your browser.  These\",\n                                            \" are not used to track you, and are not transferred or used remotely by\",\n                                            \" MathJax in any way.</p>\",\n                                        ].join(\"\\n\");\n                                    },\n                                    '<a href=\"https://www.mathjax.org\">www.mathjax.org</a>'\n                                )),\n                                (this.mathmlCode = new h.SelectableInfo(\n                                    \"MathJax MathML Expression\",\n                                    function () {\n                                        if (!r.menu.mathItem) return \"\";\n                                        var t = r.toMML(r.menu.mathItem);\n                                        return (\n                                            \"<pre>\" +\n                                            r.formatSource(t) +\n                                            \"</pre>\"\n                                        );\n                                    },\n                                    \"\"\n                                )),\n                                (this.originalText = new h.SelectableInfo(\n                                    \"MathJax Original Source\",\n                                    function () {\n                                        if (!r.menu.mathItem) return \"\";\n                                        var t = r.menu.mathItem.math;\n                                        return (\n                                            '<pre style=\"font-size:125%; margin:0\">' +\n                                            r.formatSource(t) +\n                                            \"</pre>\"\n                                        );\n                                    },\n                                    \"\"\n                                )),\n                                (this.annotationText = new h.SelectableInfo(\n                                    \"MathJax Annotation Text\",\n                                    function () {\n                                        if (!r.menu.mathItem) return \"\";\n                                        var t = r.menu.annotation;\n                                        return (\n                                            '<pre style=\"font-size:125%; margin:0\">' +\n                                            r.formatSource(t) +\n                                            \"</pre>\"\n                                        );\n                                    },\n                                    \"\"\n                                )),\n                                (this.zoomBox = new f.Info(\n                                    \"MathJax Zoomed Expression\",\n                                    function () {\n                                        if (!r.menu.mathItem) return \"\";\n                                        var t =\n                                            r.menu.mathItem.typesetRoot.cloneNode(\n                                                !0\n                                            );\n                                        return (\n                                            (t.style.margin = \"0\"),\n                                            '<div style=\"font-size: ' +\n                                                1.25 *\n                                                    parseFloat(\n                                                        r.settings.zscale\n                                                    ) +\n                                                '%\">' +\n                                                t.outerHTML +\n                                                \"</div>\"\n                                        );\n                                    },\n                                    \"\"\n                                )),\n                                (this.document = t),\n                                (this.options = (0, c.userOptions)(\n                                    (0, c.defaultOptions)(\n                                        {},\n                                        this.constructor.OPTIONS\n                                    ),\n                                    e\n                                )),\n                                this.initSettings(),\n                                this.mergeUserSettings(),\n                                this.initMenu(),\n                                this.applySettings();\n                        }\n                        return (\n                            Object.defineProperty(t.prototype, \"isLoading\", {\n                                get: function () {\n                                    return t.loading > 0;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(\n                                t.prototype,\n                                \"loadingPromise\",\n                                {\n                                    get: function () {\n                                        return this.isLoading\n                                            ? (t._loadingPromise ||\n                                                  (t._loadingPromise =\n                                                      new Promise(function (\n                                                          e,\n                                                          r\n                                                      ) {\n                                                          (t._loadingOK = e),\n                                                              (t._loadingFailed =\n                                                                  r);\n                                                      })),\n                                              t._loadingPromise)\n                                            : Promise.resolve();\n                                    },\n                                    enumerable: !1,\n                                    configurable: !0,\n                                }\n                            ),\n                            (t.prototype.initSettings = function () {\n                                (this.settings = this.options.settings),\n                                    (this.jax = this.options.jax);\n                                var t = this.document.outputJax;\n                                (this.jax[t.name] = t),\n                                    (this.settings.renderer = t.name),\n                                    b._.a11y &&\n                                        b._.a11y.explorer &&\n                                        Object.assign(\n                                            this.settings,\n                                            this.document.options.a11y\n                                        ),\n                                    (this.settings.scale = t.options.scale),\n                                    (this.defaultSettings = Object.assign(\n                                        {},\n                                        this.settings\n                                    ));\n                            }),\n                            (t.prototype.initMenu = function () {\n                                var t = this,\n                                    e = new d.Parser([\n                                        [\n                                            \"contextMenu\",\n                                            u.MJContextMenu.fromJson.bind(\n                                                u.MJContextMenu\n                                            ),\n                                        ],\n                                    ]);\n                                this.menu = e.parse({\n                                    type: \"contextMenu\",\n                                    id: \"MathJax_Menu\",\n                                    pool: [\n                                        this.variable(\"texHints\"),\n                                        this.variable(\"semantics\"),\n                                        this.variable(\"zoom\"),\n                                        this.variable(\"zscale\"),\n                                        this.variable(\"renderer\", function (e) {\n                                            return t.setRenderer(e);\n                                        }),\n                                        this.variable(\"alt\"),\n                                        this.variable(\"cmd\"),\n                                        this.variable(\"ctrl\"),\n                                        this.variable(\"shift\"),\n                                        this.variable(\"scale\", function (e) {\n                                            return t.setScale(e);\n                                        }),\n                                        this.variable(\"explorer\", function (e) {\n                                            return t.setExplorer(e);\n                                        }),\n                                        this.a11yVar(\"highlight\"),\n                                        this.a11yVar(\"backgroundColor\"),\n                                        this.a11yVar(\"backgroundOpacity\"),\n                                        this.a11yVar(\"foregroundColor\"),\n                                        this.a11yVar(\"foregroundOpacity\"),\n                                        this.a11yVar(\"speech\"),\n                                        this.a11yVar(\"subtitles\"),\n                                        this.a11yVar(\"braille\"),\n                                        this.a11yVar(\"viewBraille\"),\n                                        this.a11yVar(\"locale\", function (t) {\n                                            return g.default.setupEngine({\n                                                locale: t,\n                                            });\n                                        }),\n                                        this.a11yVar(\n                                            \"speechRules\",\n                                            function (e) {\n                                                var r = n(e.split(\"-\"), 2),\n                                                    o = r[0],\n                                                    i = r[1];\n                                                (t.document.options.sre.domain =\n                                                    o),\n                                                    (t.document.options.sre.style =\n                                                        i);\n                                            }\n                                        ),\n                                        this.a11yVar(\"magnification\"),\n                                        this.a11yVar(\"magnify\"),\n                                        this.a11yVar(\"treeColoring\"),\n                                        this.a11yVar(\"infoType\"),\n                                        this.a11yVar(\"infoRole\"),\n                                        this.a11yVar(\"infoPrefix\"),\n                                        this.variable(\"autocollapse\"),\n                                        this.variable(\n                                            \"collapsible\",\n                                            function (e) {\n                                                return t.setCollapsible(e);\n                                            }\n                                        ),\n                                        this.variable(\n                                            \"inTabOrder\",\n                                            function (e) {\n                                                return t.setTabOrder(e);\n                                            }\n                                        ),\n                                        this.variable(\n                                            \"assistiveMml\",\n                                            function (e) {\n                                                return t.setAssistiveMml(e);\n                                            }\n                                        ),\n                                    ],\n                                    items: [\n                                        this.submenu(\"Show\", \"Show Math As\", [\n                                            this.command(\n                                                \"MathMLcode\",\n                                                \"MathML Code\",\n                                                function () {\n                                                    return t.mathmlCode.post();\n                                                }\n                                            ),\n                                            this.command(\n                                                \"Original\",\n                                                \"Original Form\",\n                                                function () {\n                                                    return t.originalText.post();\n                                                }\n                                            ),\n                                            this.submenu(\n                                                \"Annotation\",\n                                                \"Annotation\"\n                                            ),\n                                        ]),\n                                        this.submenu(\n                                            \"Copy\",\n                                            \"Copy to Clipboard\",\n                                            [\n                                                this.command(\n                                                    \"MathMLcode\",\n                                                    \"MathML Code\",\n                                                    function () {\n                                                        return t.copyMathML();\n                                                    }\n                                                ),\n                                                this.command(\n                                                    \"Original\",\n                                                    \"Original Form\",\n                                                    function () {\n                                                        return t.copyOriginal();\n                                                    }\n                                                ),\n                                                this.submenu(\n                                                    \"Annotation\",\n                                                    \"Annotation\"\n                                                ),\n                                            ]\n                                        ),\n                                        this.rule(),\n                                        this.submenu(\n                                            \"Settings\",\n                                            \"Math Settings\",\n                                            [\n                                                this.submenu(\n                                                    \"Renderer\",\n                                                    \"Math Renderer\",\n                                                    this.radioGroup(\n                                                        \"renderer\",\n                                                        [[\"CHTML\"], [\"SVG\"]]\n                                                    )\n                                                ),\n                                                this.rule(),\n                                                this.submenu(\n                                                    \"ZoomTrigger\",\n                                                    \"Zoom Trigger\",\n                                                    [\n                                                        this.command(\n                                                            \"ZoomNow\",\n                                                            \"Zoom Once Now\",\n                                                            function () {\n                                                                return t.zoom(\n                                                                    null,\n                                                                    \"\",\n                                                                    t.menu\n                                                                        .mathItem\n                                                                );\n                                                            }\n                                                        ),\n                                                        this.rule(),\n                                                        this.radioGroup(\n                                                            \"zoom\",\n                                                            [\n                                                                [\"Click\"],\n                                                                [\n                                                                    \"DoubleClick\",\n                                                                    \"Double-Click\",\n                                                                ],\n                                                                [\n                                                                    \"NoZoom\",\n                                                                    \"No Zoom\",\n                                                                ],\n                                                            ]\n                                                        ),\n                                                        this.rule(),\n                                                        this.label(\n                                                            \"TriggerRequires\",\n                                                            \"Trigger Requires:\"\n                                                        ),\n                                                        this.checkbox(\n                                                            v\n                                                                ? \"Option\"\n                                                                : \"Alt\",\n                                                            v\n                                                                ? \"Option\"\n                                                                : \"Alt\",\n                                                            \"alt\"\n                                                        ),\n                                                        this.checkbox(\n                                                            \"Command\",\n                                                            \"Command\",\n                                                            \"cmd\",\n                                                            { hidden: !v }\n                                                        ),\n                                                        this.checkbox(\n                                                            \"Control\",\n                                                            \"Control\",\n                                                            \"ctrl\",\n                                                            { hiddne: v }\n                                                        ),\n                                                        this.checkbox(\n                                                            \"Shift\",\n                                                            \"Shift\",\n                                                            \"shift\"\n                                                        ),\n                                                    ]\n                                                ),\n                                                this.submenu(\n                                                    \"ZoomFactor\",\n                                                    \"Zoom Factor\",\n                                                    this.radioGroup(\"zscale\", [\n                                                        [\"150%\"],\n                                                        [\"175%\"],\n                                                        [\"200%\"],\n                                                        [\"250%\"],\n                                                        [\"300%\"],\n                                                        [\"400%\"],\n                                                    ])\n                                                ),\n                                                this.rule(),\n                                                this.command(\n                                                    \"Scale\",\n                                                    \"Scale All Math...\",\n                                                    function () {\n                                                        return t.scaleAllMath();\n                                                    }\n                                                ),\n                                                this.rule(),\n                                                this.checkbox(\n                                                    \"texHints\",\n                                                    \"Add TeX hints to MathML\",\n                                                    \"texHints\"\n                                                ),\n                                                this.checkbox(\n                                                    \"semantics\",\n                                                    \"Add original as annotation\",\n                                                    \"semantics\"\n                                                ),\n                                                this.rule(),\n                                                this.command(\n                                                    \"Reset\",\n                                                    \"Reset to defaults\",\n                                                    function () {\n                                                        return t.resetDefaults();\n                                                    }\n                                                ),\n                                            ]\n                                        ),\n                                        this.submenu(\n                                            \"Accessibility\",\n                                            \"Accessibility\",\n                                            [\n                                                this.checkbox(\n                                                    \"Activate\",\n                                                    \"Activate\",\n                                                    \"explorer\"\n                                                ),\n                                                this.submenu(\n                                                    \"Speech\",\n                                                    \"Speech\",\n                                                    [\n                                                        this.checkbox(\n                                                            \"Speech\",\n                                                            \"Speech Output\",\n                                                            \"speech\"\n                                                        ),\n                                                        this.checkbox(\n                                                            \"Subtitles\",\n                                                            \"Speech Subtitles\",\n                                                            \"subtitles\"\n                                                        ),\n                                                        this.checkbox(\n                                                            \"Braille\",\n                                                            \"Braille Output\",\n                                                            \"braille\"\n                                                        ),\n                                                        this.checkbox(\n                                                            \"View Braille\",\n                                                            \"Braille Subtitles\",\n                                                            \"viewBraille\"\n                                                        ),\n                                                        this.rule(),\n                                                        this.submenu(\n                                                            \"A11yLanguage\",\n                                                            \"Language\"\n                                                        ),\n                                                        this.rule(),\n                                                        this.submenu(\n                                                            \"Mathspeak\",\n                                                            \"Mathspeak Rules\",\n                                                            this.radioGroup(\n                                                                \"speechRules\",\n                                                                [\n                                                                    [\n                                                                        \"mathspeak-default\",\n                                                                        \"Verbose\",\n                                                                    ],\n                                                                    [\n                                                                        \"mathspeak-brief\",\n                                                                        \"Brief\",\n                                                                    ],\n                                                                    [\n                                                                        \"mathspeak-sbrief\",\n                                                                        \"Superbrief\",\n                                                                    ],\n                                                                ]\n                                                            )\n                                                        ),\n                                                        this.submenu(\n                                                            \"Clearspeak\",\n                                                            \"Clearspeak Rules\",\n                                                            this.radioGroup(\n                                                                \"speechRules\",\n                                                                [\n                                                                    [\n                                                                        \"clearspeak-default\",\n                                                                        \"Auto\",\n                                                                    ],\n                                                                ]\n                                                            )\n                                                        ),\n                                                        this.submenu(\n                                                            \"ChromeVox\",\n                                                            \"ChromeVox Rules\",\n                                                            this.radioGroup(\n                                                                \"speechRules\",\n                                                                [\n                                                                    [\n                                                                        \"chromevox-default\",\n                                                                        \"Standard\",\n                                                                    ],\n                                                                    [\n                                                                        \"chromevox-alternative\",\n                                                                        \"Alternative\",\n                                                                    ],\n                                                                ]\n                                                            )\n                                                        ),\n                                                    ]\n                                                ),\n                                                this.submenu(\n                                                    \"Highlight\",\n                                                    \"Highlight\",\n                                                    [\n                                                        this.submenu(\n                                                            \"Background\",\n                                                            \"Background\",\n                                                            this.radioGroup(\n                                                                \"backgroundColor\",\n                                                                [\n                                                                    [\"Blue\"],\n                                                                    [\"Red\"],\n                                                                    [\"Green\"],\n                                                                    [\"Yellow\"],\n                                                                    [\"Cyan\"],\n                                                                    [\"Magenta\"],\n                                                                    [\"White\"],\n                                                                    [\"Black\"],\n                                                                ]\n                                                            )\n                                                        ),\n                                                        {\n                                                            type: \"slider\",\n                                                            variable:\n                                                                \"backgroundOpacity\",\n                                                            content: \" \",\n                                                        },\n                                                        this.submenu(\n                                                            \"Foreground\",\n                                                            \"Foreground\",\n                                                            this.radioGroup(\n                                                                \"foregroundColor\",\n                                                                [\n                                                                    [\"Black\"],\n                                                                    [\"White\"],\n                                                                    [\"Magenta\"],\n                                                                    [\"Cyan\"],\n                                                                    [\"Yellow\"],\n                                                                    [\"Green\"],\n                                                                    [\"Red\"],\n                                                                    [\"Blue\"],\n                                                                ]\n                                                            )\n                                                        ),\n                                                        {\n                                                            type: \"slider\",\n                                                            variable:\n                                                                \"foregroundOpacity\",\n                                                            content: \" \",\n                                                        },\n                                                        this.rule(),\n                                                        this.radioGroup(\n                                                            \"highlight\",\n                                                            [\n                                                                [\"None\"],\n                                                                [\"Hover\"],\n                                                                [\"Flame\"],\n                                                            ]\n                                                        ),\n                                                        this.rule(),\n                                                        this.checkbox(\n                                                            \"TreeColoring\",\n                                                            \"Tree Coloring\",\n                                                            \"treeColoring\"\n                                                        ),\n                                                    ]\n                                                ),\n                                                this.submenu(\n                                                    \"Magnification\",\n                                                    \"Magnification\",\n                                                    [\n                                                        this.radioGroup(\n                                                            \"magnification\",\n                                                            [\n                                                                [\"None\"],\n                                                                [\"Keyboard\"],\n                                                                [\"Mouse\"],\n                                                            ]\n                                                        ),\n                                                        this.rule(),\n                                                        this.radioGroup(\n                                                            \"magnify\",\n                                                            [\n                                                                [\"200%\"],\n                                                                [\"300%\"],\n                                                                [\"400%\"],\n                                                                [\"500%\"],\n                                                            ]\n                                                        ),\n                                                    ]\n                                                ),\n                                                this.submenu(\n                                                    \"Semantic Info\",\n                                                    \"Semantic Info\",\n                                                    [\n                                                        this.checkbox(\n                                                            \"Type\",\n                                                            \"Type\",\n                                                            \"infoType\"\n                                                        ),\n                                                        this.checkbox(\n                                                            \"Role\",\n                                                            \"Role\",\n                                                            \"infoRole\"\n                                                        ),\n                                                        this.checkbox(\n                                                            \"Prefix\",\n                                                            \"Prefix\",\n                                                            \"infoPrefix\"\n                                                        ),\n                                                    ],\n                                                    !0\n                                                ),\n                                                this.rule(),\n                                                this.checkbox(\n                                                    \"Collapsible\",\n                                                    \"Collapsible Math\",\n                                                    \"collapsible\"\n                                                ),\n                                                this.checkbox(\n                                                    \"AutoCollapse\",\n                                                    \"Auto Collapse\",\n                                                    \"autocollapse\",\n                                                    { disabled: !0 }\n                                                ),\n                                                this.rule(),\n                                                this.checkbox(\n                                                    \"InTabOrder\",\n                                                    \"Include in Tab Order\",\n                                                    \"inTabOrder\"\n                                                ),\n                                                this.checkbox(\n                                                    \"AssistiveMml\",\n                                                    \"Include Hidden MathML\",\n                                                    \"assistiveMml\"\n                                                ),\n                                            ]\n                                        ),\n                                        this.submenu(\"Language\", \"Language\"),\n                                        this.rule(),\n                                        this.command(\n                                            \"About\",\n                                            \"About MathJax\",\n                                            function () {\n                                                return t.about.post();\n                                            }\n                                        ),\n                                        this.command(\n                                            \"Help\",\n                                            \"MathJax Help\",\n                                            function () {\n                                                return t.help.post();\n                                            }\n                                        ),\n                                    ],\n                                });\n                                var r = this.menu;\n                                this.about.attachMenu(r),\n                                    this.help.attachMenu(r),\n                                    this.originalText.attachMenu(r),\n                                    this.annotationText.attachMenu(r),\n                                    this.mathmlCode.attachMenu(r),\n                                    this.zoomBox.attachMenu(r),\n                                    this.checkLoadableItems(),\n                                    this.enableExplorerItems(\n                                        this.settings.explorer\n                                    ),\n                                    (r.showAnnotation = this.annotationText),\n                                    (r.copyAnnotation =\n                                        this.copyAnnotation.bind(this)),\n                                    (r.annotationTypes =\n                                        this.options.annotationTypes),\n                                    y.CssStyles.addInfoStyles(\n                                        this.document.document\n                                    ),\n                                    y.CssStyles.addMenuStyles(\n                                        this.document.document\n                                    );\n                            }),\n                            (t.prototype.checkLoadableItems = function () {\n                                var t, e;\n                                if (b && b._ && b.loader && b.startup)\n                                    !this.settings.collapsible ||\n                                        (b._.a11y && b._.a11y.complexity) ||\n                                        this.loadA11y(\"complexity\"),\n                                        !this.settings.explorer ||\n                                            (b._.a11y && b._.a11y.explorer) ||\n                                            this.loadA11y(\"explorer\"),\n                                        !this.settings.assistiveMml ||\n                                            (b._.a11y &&\n                                                b._.a11y[\"assistive-mml\"]) ||\n                                            this.loadA11y(\"assistive-mml\");\n                                else {\n                                    var r = this.menu;\n                                    try {\n                                        for (\n                                            var n = o(Object.keys(this.jax)),\n                                                i = n.next();\n                                            !i.done;\n                                            i = n.next()\n                                        ) {\n                                            var s = i.value;\n                                            this.jax[s] ||\n                                                r\n                                                    .findID(\n                                                        \"Settings\",\n                                                        \"Renderer\",\n                                                        s\n                                                    )\n                                                    .disable();\n                                        }\n                                    } catch (e) {\n                                        t = { error: e };\n                                    } finally {\n                                        try {\n                                            i &&\n                                                !i.done &&\n                                                (e = n.return) &&\n                                                e.call(n);\n                                        } finally {\n                                            if (t) throw t.error;\n                                        }\n                                    }\n                                    r\n                                        .findID(\"Accessibility\", \"Activate\")\n                                        .disable(),\n                                        r\n                                            .findID(\n                                                \"Accessibility\",\n                                                \"AutoCollapse\"\n                                            )\n                                            .disable(),\n                                        r\n                                            .findID(\n                                                \"Accessibility\",\n                                                \"Collapsible\"\n                                            )\n                                            .disable();\n                                }\n                            }),\n                            (t.prototype.enableExplorerItems = function (t) {\n                                var e,\n                                    r,\n                                    n = this.menu.findID(\n                                        \"Accessibility\",\n                                        \"Activate\"\n                                    ).menu;\n                                try {\n                                    for (\n                                        var i = o(n.items.slice(1)),\n                                            s = i.next();\n                                        !s.done;\n                                        s = i.next()\n                                    ) {\n                                        var a = s.value;\n                                        if (a instanceof m.Rule) break;\n                                        t ? a.enable() : a.disable();\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (r = i.return) &&\n                                            r.call(i);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                            }),\n                            (t.prototype.mergeUserSettings = function () {\n                                try {\n                                    var e = localStorage.getItem(\n                                        t.MENU_STORAGE\n                                    );\n                                    if (!e) return;\n                                    Object.assign(this.settings, JSON.parse(e)),\n                                        this.setA11y(this.settings);\n                                } catch (t) {\n                                    console.log(\n                                        \"MathJax localStorage error: \" +\n                                            t.message\n                                    );\n                                }\n                            }),\n                            (t.prototype.saveUserSettings = function () {\n                                var e,\n                                    r,\n                                    n = {};\n                                try {\n                                    for (\n                                        var i = o(Object.keys(this.settings)),\n                                            s = i.next();\n                                        !s.done;\n                                        s = i.next()\n                                    ) {\n                                        var a = s.value;\n                                        this.settings[a] !==\n                                            this.defaultSettings[a] &&\n                                            (n[a] = this.settings[a]);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (r = i.return) &&\n                                            r.call(i);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                try {\n                                    Object.keys(n).length\n                                        ? localStorage.setItem(\n                                              t.MENU_STORAGE,\n                                              JSON.stringify(n)\n                                          )\n                                        : localStorage.removeItem(\n                                              t.MENU_STORAGE\n                                          );\n                                } catch (t) {\n                                    console.log(\n                                        \"MathJax localStorage error: \" +\n                                            t.message\n                                    );\n                                }\n                            }),\n                            (t.prototype.setA11y = function (t) {\n                                b._.a11y &&\n                                    b._.a11y.explorer &&\n                                    b._.a11y.explorer_ts.setA11yOptions(\n                                        this.document,\n                                        t\n                                    );\n                            }),\n                            (t.prototype.getA11y = function (t) {\n                                if (b._.a11y && b._.a11y.explorer)\n                                    return void 0 !==\n                                        this.document.options.a11y[t]\n                                        ? this.document.options.a11y[t]\n                                        : this.document.options.sre[t];\n                            }),\n                            (t.prototype.applySettings = function () {\n                                this.setTabOrder(this.settings.inTabOrder),\n                                    (this.document.options.enableAssistiveMml =\n                                        this.settings.assistiveMml),\n                                    (this.document.outputJax.options.scale =\n                                        parseFloat(this.settings.scale)),\n                                    this.settings.renderer !==\n                                        this.defaultSettings.renderer &&\n                                        this.setRenderer(\n                                            this.settings.renderer\n                                        );\n                            }),\n                            (t.prototype.setScale = function (t) {\n                                (this.document.outputJax.options.scale =\n                                    parseFloat(t)),\n                                    this.document.rerender();\n                            }),\n                            (t.prototype.setRenderer = function (t) {\n                                var e = this;\n                                if (this.jax[t]) this.setOutputJax(t);\n                                else {\n                                    var r = t.toLowerCase();\n                                    this.loadComponent(\n                                        \"output/\" + r,\n                                        function () {\n                                            var n = b.startup;\n                                            r in n.constructors &&\n                                                (n.useOutput(r, !0),\n                                                (n.output = n.getOutputJax()),\n                                                (e.jax[t] = n.output),\n                                                e.setOutputJax(t));\n                                        }\n                                    );\n                                }\n                            }),\n                            (t.prototype.setOutputJax = function (t) {\n                                this.jax[t].setAdaptor(this.document.adaptor),\n                                    (this.document.outputJax = this.jax[t]),\n                                    this.rerender();\n                            }),\n                            (t.prototype.setTabOrder = function (t) {\n                                this.menu.store.inTaborder(t);\n                            }),\n                            (t.prototype.setAssistiveMml = function (t) {\n                                (this.document.options.enableAssistiveMml = t),\n                                    !t ||\n                                    (b._.a11y && b._.a11y[\"assistive-mml\"])\n                                        ? this.rerender()\n                                        : this.loadA11y(\"assistive-mml\");\n                            }),\n                            (t.prototype.setExplorer = function (t) {\n                                this.enableExplorerItems(t),\n                                    (this.document.options.enableExplorer = t),\n                                    !t || (b._.a11y && b._.a11y.explorer)\n                                        ? this.rerender(\n                                              this.settings.collapsible\n                                                  ? a.STATE.RERENDER\n                                                  : a.STATE.COMPILED\n                                          )\n                                        : this.loadA11y(\"explorer\");\n                            }),\n                            (t.prototype.setCollapsible = function (t) {\n                                (this.document.options.enableComplexity = t),\n                                    !t || (b._.a11y && b._.a11y.complexity)\n                                        ? this.rerender(a.STATE.COMPILED)\n                                        : this.loadA11y(\"complexity\");\n                            }),\n                            (t.prototype.scaleAllMath = function () {\n                                var t = (100 * parseFloat(this.settings.scale))\n                                        .toFixed(1)\n                                        .replace(/.0$/, \"\"),\n                                    e = prompt(\n                                        \"Scale all mathematics (compared to surrounding text) by\",\n                                        t + \"%\"\n                                    );\n                                if (e)\n                                    if (e.match(/^\\s*\\d+(\\.\\d*)?\\s*%?\\s*$/)) {\n                                        var r = parseFloat(e) / 100;\n                                        r\n                                            ? this.menu.pool\n                                                  .lookup(\"scale\")\n                                                  .setValue(String(r))\n                                            : alert(\n                                                  \"The scale should not be zero\"\n                                              );\n                                    } else\n                                        alert(\n                                            \"The scale should be a percentage (e.g., 120%)\"\n                                        );\n                            }),\n                            (t.prototype.resetDefaults = function () {\n                                var e, r;\n                                t.loading++;\n                                var n = this.menu.pool,\n                                    i = this.defaultSettings;\n                                try {\n                                    for (\n                                        var s = o(Object.keys(this.settings)),\n                                            l = s.next();\n                                        !l.done;\n                                        l = s.next()\n                                    ) {\n                                        var c = l.value,\n                                            u = n.lookup(c);\n                                        if (u) {\n                                            u.setValue(i[c]);\n                                            var p = u.items[0];\n                                            p && p.executeCallbacks_();\n                                        } else this.settings[c] = i[c];\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        l &&\n                                            !l.done &&\n                                            (r = s.return) &&\n                                            r.call(s);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                t.loading--, this.rerender(a.STATE.COMPILED);\n                            }),\n                            (t.prototype.checkComponent = function (e) {\n                                var r = t.loadingPromises.get(e);\n                                r && s.mathjax.retryAfter(r);\n                            }),\n                            (t.prototype.loadComponent = function (e, r) {\n                                if (!t.loadingPromises.has(e)) {\n                                    var n = b.loader;\n                                    if (n) {\n                                        t.loading++;\n                                        var o = n\n                                            .load(e)\n                                            .then(function () {\n                                                t.loading--,\n                                                    t.loadingPromises.delete(e),\n                                                    r(),\n                                                    0 === t.loading &&\n                                                        t._loadingPromise &&\n                                                        ((t._loadingPromise =\n                                                            null),\n                                                        t._loadingOK());\n                                            })\n                                            .catch(function (e) {\n                                                t._loadingPromise\n                                                    ? ((t._loadingPromise =\n                                                          null),\n                                                      t._loadingFailed(e))\n                                                    : console.log(e);\n                                            });\n                                        t.loadingPromises.set(e, o);\n                                    }\n                                }\n                            }),\n                            (t.prototype.loadA11y = function (e) {\n                                var r = this,\n                                    n = !a.STATE.ENRICHED;\n                                this.loadComponent(\"a11y/\" + e, function () {\n                                    var o = b.startup;\n                                    s.mathjax.handlers.unregister(o.handler),\n                                        (o.handler = o.getHandler()),\n                                        s.mathjax.handlers.register(o.handler);\n                                    var i = r.document;\n                                    (r.document = o.document = o.getDocument()),\n                                        (r.document.menu = r),\n                                        r.document.outputJax.reset(),\n                                        r.transferMathList(i),\n                                        (r.document.processed = i.processed),\n                                        t._loadingPromise ||\n                                            (r.document.outputJax.reset(),\n                                            r.rerender(\n                                                \"complexity\" === e || n\n                                                    ? a.STATE.COMPILED\n                                                    : a.STATE.TYPESET\n                                            ));\n                                });\n                            }),\n                            (t.prototype.transferMathList = function (t) {\n                                var e,\n                                    r,\n                                    n = this.document.options.MathItem;\n                                try {\n                                    for (\n                                        var i = o(t.math), s = i.next();\n                                        !s.done;\n                                        s = i.next()\n                                    ) {\n                                        var a = s.value,\n                                            l = new n();\n                                        Object.assign(l, a),\n                                            this.document.math.push(l);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (r = i.return) &&\n                                            r.call(i);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                            }),\n                            (t.prototype.formatSource = function (t) {\n                                return t\n                                    .trim()\n                                    .replace(/&/g, \"&amp;\")\n                                    .replace(/</g, \"&lt;\")\n                                    .replace(/>/g, \"&gt;\");\n                            }),\n                            (t.prototype.toMML = function (t) {\n                                return this.MmlVisitor.visitTree(t.root, t, {\n                                    texHints: this.settings.texHints,\n                                    semantics:\n                                        this.settings.semantics &&\n                                        \"MathML\" !== t.inputJax.name,\n                                });\n                            }),\n                            (t.prototype.zoom = function (t, e, r) {\n                                (t && !this.isZoomEvent(t, e)) ||\n                                    ((this.menu.mathItem = r),\n                                    t && this.menu.post(t),\n                                    this.zoomBox.post());\n                            }),\n                            (t.prototype.isZoomEvent = function (t, e) {\n                                return (\n                                    this.settings.zoom === e &&\n                                    (!this.settings.alt || t.altKey) &&\n                                    (!this.settings.ctrl || t.ctrlKey) &&\n                                    (!this.settings.cmd || t.metaKey) &&\n                                    (!this.settings.shift || t.shiftKey)\n                                );\n                            }),\n                            (t.prototype.rerender = function (e) {\n                                void 0 === e && (e = a.STATE.TYPESET),\n                                    (this.rerenderStart = Math.min(\n                                        e,\n                                        this.rerenderStart\n                                    )),\n                                    t.loading ||\n                                        (this.rerenderStart <=\n                                            a.STATE.COMPILED &&\n                                            this.document.reset({\n                                                inputJax: [],\n                                            }),\n                                        this.document.rerender(\n                                            this.rerenderStart\n                                        ),\n                                        (this.rerenderStart = a.STATE.LAST));\n                            }),\n                            (t.prototype.copyMathML = function () {\n                                this.copyToClipboard(\n                                    this.toMML(this.menu.mathItem)\n                                );\n                            }),\n                            (t.prototype.copyOriginal = function () {\n                                this.copyToClipboard(\n                                    this.menu.mathItem.math.trim()\n                                );\n                            }),\n                            (t.prototype.copyAnnotation = function () {\n                                this.copyToClipboard(\n                                    this.menu.annotation.trim()\n                                );\n                            }),\n                            (t.prototype.copyToClipboard = function (t) {\n                                var e = document.createElement(\"textarea\");\n                                (e.value = t),\n                                    e.setAttribute(\"readonly\", \"\"),\n                                    (e.style.cssText =\n                                        \"height: 1px; width: 1px; padding: 1px; position: absolute; left: -10px\"),\n                                    document.body.appendChild(e),\n                                    e.select();\n                                try {\n                                    document.execCommand(\"copy\");\n                                } catch (t) {\n                                    alert(\n                                        \"Can't copy to clipboard: \" + t.message\n                                    );\n                                }\n                                document.body.removeChild(e);\n                            }),\n                            (t.prototype.addMenu = function (t) {\n                                var e = this,\n                                    r = t.typesetRoot;\n                                r.addEventListener(\n                                    \"contextmenu\",\n                                    function () {\n                                        return (e.menu.mathItem = t);\n                                    },\n                                    !0\n                                ),\n                                    r.addEventListener(\n                                        \"keydown\",\n                                        function () {\n                                            return (e.menu.mathItem = t);\n                                        },\n                                        !0\n                                    ),\n                                    r.addEventListener(\n                                        \"click\",\n                                        function (r) {\n                                            return e.zoom(r, \"Click\", t);\n                                        },\n                                        !0\n                                    ),\n                                    r.addEventListener(\n                                        \"dblclick\",\n                                        function (r) {\n                                            return e.zoom(r, \"DoubleClick\", t);\n                                        },\n                                        !0\n                                    ),\n                                    this.menu.store.insert(r);\n                            }),\n                            (t.prototype.clear = function () {\n                                this.menu.store.clear();\n                            }),\n                            (t.prototype.variable = function (t, e) {\n                                var r = this;\n                                return {\n                                    name: t,\n                                    getter: function () {\n                                        return r.settings[t];\n                                    },\n                                    setter: function (n) {\n                                        (r.settings[t] = n),\n                                            e && e(n),\n                                            r.saveUserSettings();\n                                    },\n                                };\n                            }),\n                            (t.prototype.a11yVar = function (t, e) {\n                                var r = this;\n                                return {\n                                    name: t,\n                                    getter: function () {\n                                        return r.getA11y(t);\n                                    },\n                                    setter: function (n) {\n                                        r.settings[t] = n;\n                                        var o = {};\n                                        (o[t] = n),\n                                            r.setA11y(o),\n                                            e && e(n),\n                                            r.saveUserSettings();\n                                    },\n                                };\n                            }),\n                            (t.prototype.submenu = function (t, e, r, n) {\n                                var i, s;\n                                void 0 === r && (r = []),\n                                    void 0 === n && (n = !1);\n                                var a = [];\n                                try {\n                                    for (\n                                        var l = o(r), c = l.next();\n                                        !c.done;\n                                        c = l.next()\n                                    ) {\n                                        var u = c.value;\n                                        Array.isArray(u)\n                                            ? (a = a.concat(u))\n                                            : a.push(u);\n                                    }\n                                } catch (t) {\n                                    i = { error: t };\n                                } finally {\n                                    try {\n                                        c &&\n                                            !c.done &&\n                                            (s = l.return) &&\n                                            s.call(l);\n                                    } finally {\n                                        if (i) throw i.error;\n                                    }\n                                }\n                                return {\n                                    type: \"submenu\",\n                                    id: t,\n                                    content: e,\n                                    menu: { items: a },\n                                    disabled: 0 === a.length || n,\n                                };\n                            }),\n                            (t.prototype.command = function (t, e, r, n) {\n                                return (\n                                    void 0 === n && (n = {}),\n                                    Object.assign(\n                                        {\n                                            type: \"command\",\n                                            id: t,\n                                            content: e,\n                                            action: r,\n                                        },\n                                        n\n                                    )\n                                );\n                            }),\n                            (t.prototype.checkbox = function (t, e, r, n) {\n                                return (\n                                    void 0 === n && (n = {}),\n                                    Object.assign(\n                                        {\n                                            type: \"checkbox\",\n                                            id: t,\n                                            content: e,\n                                            variable: r,\n                                        },\n                                        n\n                                    )\n                                );\n                            }),\n                            (t.prototype.radioGroup = function (t, e) {\n                                var r = this;\n                                return e.map(function (e) {\n                                    return r.radio(e[0], e[1] || e[0], t);\n                                });\n                            }),\n                            (t.prototype.radio = function (t, e, r, n) {\n                                return (\n                                    void 0 === n && (n = {}),\n                                    Object.assign(\n                                        {\n                                            type: \"radio\",\n                                            id: t,\n                                            content: e,\n                                            variable: r,\n                                        },\n                                        n\n                                    )\n                                );\n                            }),\n                            (t.prototype.label = function (t, e) {\n                                return { type: \"label\", id: t, content: e };\n                            }),\n                            (t.prototype.rule = function () {\n                                return { type: \"rule\" };\n                            }),\n                            (t.MENU_STORAGE = \"MathJax-Menu-Settings\"),\n                            (t.OPTIONS = {\n                                settings: {\n                                    texHints: !0,\n                                    semantics: !1,\n                                    zoom: \"NoZoom\",\n                                    zscale: \"200%\",\n                                    renderer: \"CHTML\",\n                                    alt: !1,\n                                    cmd: !1,\n                                    ctrl: !1,\n                                    shift: !1,\n                                    scale: 1,\n                                    autocollapse: !1,\n                                    collapsible: !1,\n                                    inTabOrder: !0,\n                                    assistiveMml: !0,\n                                    explorer: !1,\n                                },\n                                jax: { CHTML: null, SVG: null },\n                                annotationTypes: (0, c.expandable)({\n                                    TeX: [\"TeX\", \"LaTeX\", \"application/x-tex\"],\n                                    StarMath: [\"StarMath 5.0\"],\n                                    Maple: [\"Maple\"],\n                                    ContentMathML: [\n                                        \"MathML-Content\",\n                                        \"application/mathml-content+xml\",\n                                    ],\n                                    OpenMath: [\"OpenMath\"],\n                                }),\n                            }),\n                            (t.loading = 0),\n                            (t.loadingPromises = new Map()),\n                            (t._loadingPromise = null),\n                            (t._loadingOK = null),\n                            (t._loadingFailed = null),\n                            t\n                        );\n                    })();\n                e.Menu = _;\n            },\n            4001: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__assign) ||\n                        function () {\n                            return (\n                                (i =\n                                    Object.assign ||\n                                    function (t) {\n                                        for (\n                                            var e, r = 1, n = arguments.length;\n                                            r < n;\n                                            r++\n                                        )\n                                            for (var o in (e = arguments[r]))\n                                                Object.prototype.hasOwnProperty.call(\n                                                    e,\n                                                    o\n                                                ) && (t[o] = e[o]);\n                                        return t;\n                                    }),\n                                i.apply(this, arguments)\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    a =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    l =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MenuHandler =\n                        e.MenuMathDocumentMixin =\n                        e.MenuMathItemMixin =\n                            void 0);\n                var c = r(5713),\n                    u = r(4474),\n                    p = r(7233),\n                    h = r(8310);\n                function f(t) {\n                    return (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.addMenu = function (t, e) {\n                                void 0 === e && (e = !1),\n                                    this.state() >= u.STATE.CONTEXT_MENU ||\n                                        (this.isEscaped ||\n                                            (!t.options.enableMenu && !e) ||\n                                            t.menu.addMenu(this),\n                                        this.state(u.STATE.CONTEXT_MENU));\n                            }),\n                            (e.prototype.checkLoading = function (t) {\n                                t.checkLoading();\n                            }),\n                            e\n                        );\n                    })(t);\n                }\n                function d(t) {\n                    var e;\n                    return (\n                        (e = (function (t) {\n                            function e() {\n                                for (\n                                    var e = [], r = 0;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r] = arguments[r];\n                                var n = t.apply(this, a([], s(e), !1)) || this;\n                                n.menu = new n.options.MenuClass(\n                                    n,\n                                    n.options.menuOptions\n                                );\n                                var o = n.constructor.ProcessBits;\n                                return (\n                                    o.has(\"context-menu\") ||\n                                        o.allocate(\"context-menu\"),\n                                    (n.options.MathItem = f(\n                                        n.options.MathItem\n                                    )),\n                                    n\n                                );\n                            }\n                            return (\n                                o(e, t),\n                                (e.prototype.addMenu = function () {\n                                    var t, e;\n                                    if (!this.processed.isSet(\"context-menu\")) {\n                                        try {\n                                            for (\n                                                var r = l(this.math),\n                                                    n = r.next();\n                                                !n.done;\n                                                n = r.next()\n                                            ) {\n                                                n.value.addMenu(this);\n                                            }\n                                        } catch (e) {\n                                            t = { error: e };\n                                        } finally {\n                                            try {\n                                                n &&\n                                                    !n.done &&\n                                                    (e = r.return) &&\n                                                    e.call(r);\n                                            } finally {\n                                                if (t) throw t.error;\n                                            }\n                                        }\n                                        this.processed.set(\"context-menu\");\n                                    }\n                                    return this;\n                                }),\n                                (e.prototype.checkLoading = function () {\n                                    this.menu.isLoading &&\n                                        c.mathjax.retryAfter(\n                                            this.menu.loadingPromise.catch(\n                                                function (t) {\n                                                    return console.log(t);\n                                                }\n                                            )\n                                        );\n                                    var t = this.menu.settings;\n                                    return (\n                                        t.collapsible &&\n                                            ((this.options.enableComplexity =\n                                                !0),\n                                            this.menu.checkComponent(\n                                                \"a11y/complexity\"\n                                            )),\n                                        t.explorer &&\n                                            ((this.options.enableEnrichment =\n                                                !0),\n                                            (this.options.enableExplorer = !0),\n                                            this.menu.checkComponent(\n                                                \"a11y/explorer\"\n                                            )),\n                                        this\n                                    );\n                                }),\n                                (e.prototype.state = function (e, r) {\n                                    return (\n                                        void 0 === r && (r = !1),\n                                        t.prototype.state.call(this, e, r),\n                                        e < u.STATE.CONTEXT_MENU &&\n                                            this.processed.clear(\n                                                \"context-menu\"\n                                            ),\n                                        this\n                                    );\n                                }),\n                                (e.prototype.updateDocument = function () {\n                                    return (\n                                        t.prototype.updateDocument.call(this),\n                                        this.menu.menu.store.sort(),\n                                        this\n                                    );\n                                }),\n                                e\n                            );\n                        })(t)),\n                        (e.OPTIONS = i(\n                            i(\n                                {\n                                    enableEnrichment: !0,\n                                    enableComplexity: !0,\n                                    enableExplorer: !0,\n                                    enrichSpeech: \"none\",\n                                    enrichError: function (t, e, r) {\n                                        return console.warn(\n                                            \"Enrichment Error:\",\n                                            r\n                                        );\n                                    },\n                                },\n                                t.OPTIONS\n                            ),\n                            {\n                                MenuClass: h.Menu,\n                                menuOptions: h.Menu.OPTIONS,\n                                enableMenu: !0,\n                                sre: t.OPTIONS.sre || (0, p.expandable)({}),\n                                a11y: t.OPTIONS.a11y || (0, p.expandable)({}),\n                                renderActions: (0, p.expandable)(\n                                    i(i({}, t.OPTIONS.renderActions), {\n                                        addMenu: [u.STATE.CONTEXT_MENU],\n                                        checkLoading: [u.STATE.UNPROCESSED + 1],\n                                    })\n                                ),\n                            }\n                        )),\n                        e\n                    );\n                }\n                (0, u.newState)(\"CONTEXT_MENU\", 170),\n                    (e.MenuMathItemMixin = f),\n                    (e.MenuMathDocumentMixin = d),\n                    (e.MenuHandler = function (t) {\n                        return (t.documentClass = d(t.documentClass)), t;\n                    });\n            },\n            473: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlVisitor = void 0);\n                var i = r(9259),\n                    s = r(7233),\n                    a = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (\n                                (e.options = { texHints: !0, semantics: !1 }),\n                                (e.mathItem = null),\n                                e\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.visitTree = function (t, e, r) {\n                                return (\n                                    void 0 === e && (e = null),\n                                    void 0 === r && (r = {}),\n                                    (this.mathItem = e),\n                                    (0, s.userOptions)(this.options, r),\n                                    this.visitNode(t, \"\")\n                                );\n                            }),\n                            (e.prototype.visitTeXAtomNode = function (e, r) {\n                                return this.options.texHints\n                                    ? t.prototype.visitTeXAtomNode.call(\n                                          this,\n                                          e,\n                                          r\n                                      )\n                                    : e.childNodes[0] &&\n                                        1 === e.childNodes[0].childNodes.length\n                                      ? this.visitNode(e.childNodes[0], r)\n                                      : r +\n                                        \"<mrow\" +\n                                        this.getAttributes(e) +\n                                        \">\\n\" +\n                                        this.childNodeMml(e, r + \"  \", \"\\n\") +\n                                        r +\n                                        \"</mrow>\";\n                            }),\n                            (e.prototype.visitMathNode = function (e, r) {\n                                if (\n                                    !this.options.semantics ||\n                                    \"TeX\" !== this.mathItem.inputJax.name\n                                )\n                                    return t.prototype.visitDefault.call(\n                                        this,\n                                        e,\n                                        r\n                                    );\n                                var n =\n                                    e.childNodes.length &&\n                                    e.childNodes[0].childNodes.length > 1;\n                                return (\n                                    r +\n                                    \"<math\" +\n                                    this.getAttributes(e) +\n                                    \">\\n\" +\n                                    r +\n                                    \"  <semantics>\\n\" +\n                                    (n ? r + \"    <mrow>\\n\" : \"\") +\n                                    this.childNodeMml(\n                                        e,\n                                        r + (n ? \"      \" : \"    \"),\n                                        \"\\n\"\n                                    ) +\n                                    (n ? r + \"    </mrow>\\n\" : \"\") +\n                                    r +\n                                    '    <annotation encoding=\"application/x-tex\">' +\n                                    this.mathItem.math +\n                                    \"</annotation>\\n\" +\n                                    r +\n                                    \"  </semantics>\\n\" +\n                                    r +\n                                    \"</math>\"\n                                );\n                            }),\n                            e\n                        );\n                    })(i.SerializedMmlVisitor);\n                e.MmlVisitor = a;\n            },\n            4414: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SelectableInfo = void 0);\n                var i = r(4922),\n                    s = r(2165),\n                    a = (function (t) {\n                        function e() {\n                            return (\n                                (null !== t && t.apply(this, arguments)) || this\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.addEvents = function (t) {\n                                var e = this;\n                                t.addEventListener(\"keypress\", function (t) {\n                                    \"a\" === t.key &&\n                                        (t.ctrlKey || t.metaKey) &&\n                                        (e.selectAll(), e.stop(t));\n                                });\n                            }),\n                            (e.prototype.selectAll = function () {\n                                document\n                                    .getSelection()\n                                    .selectAllChildren(\n                                        this.html.querySelector(\"pre\")\n                                    );\n                            }),\n                            (e.prototype.copyToClipboard = function () {\n                                this.selectAll();\n                                try {\n                                    document.execCommand(\"copy\");\n                                } catch (t) {\n                                    alert(\n                                        \"Can't copy to clipboard: \" + t.message\n                                    );\n                                }\n                                document.getSelection().removeAllRanges();\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                var e = this;\n                                t.prototype.generateHtml.call(this);\n                                var r = this.html\n                                    .querySelector(\n                                        \"span.\" + s.HtmlClasses.INFOSIGNATURE\n                                    )\n                                    .appendChild(\n                                        document.createElement(\"input\")\n                                    );\n                                (r.type = \"button\"),\n                                    (r.value = \"Copy to Clipboard\"),\n                                    r.addEventListener(\"click\", function (t) {\n                                        return e.copyToClipboard();\n                                    });\n                            }),\n                            e\n                        );\n                    })(i.Info);\n                e.SelectableInfo = a;\n            },\n            9923: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.asyncLoad = void 0);\n                var n = r(5713);\n                e.asyncLoad = function (t) {\n                    return n.mathjax.asyncLoad\n                        ? new Promise(function (e, r) {\n                              var o = n.mathjax.asyncLoad(t);\n                              o instanceof Promise\n                                  ? o\n                                        .then(function (t) {\n                                            return e(t);\n                                        })\n                                        .catch(function (t) {\n                                            return r(t);\n                                        })\n                                  : e(o);\n                          })\n                        : Promise.reject(\n                              \"Can't load '\".concat(\n                                  t,\n                                  \"': No asyncLoad method specified\"\n                              )\n                          );\n                };\n            },\n            6469: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.BBox = void 0);\n                var n = r(6010),\n                    o = (function () {\n                        function t(t) {\n                            void 0 === t &&\n                                (t = { w: 0, h: -n.BIGDIMEN, d: -n.BIGDIMEN }),\n                                (this.w = t.w || 0),\n                                (this.h = \"h\" in t ? t.h : -n.BIGDIMEN),\n                                (this.d = \"d\" in t ? t.d : -n.BIGDIMEN),\n                                (this.L =\n                                    this.R =\n                                    this.ic =\n                                    this.sk =\n                                    this.dx =\n                                        0),\n                                (this.scale = this.rscale = 1),\n                                (this.pwidth = \"\");\n                        }\n                        return (\n                            (t.zero = function () {\n                                return new t({ h: 0, d: 0, w: 0 });\n                            }),\n                            (t.empty = function () {\n                                return new t();\n                            }),\n                            (t.prototype.empty = function () {\n                                return (\n                                    (this.w = 0),\n                                    (this.h = this.d = -n.BIGDIMEN),\n                                    this\n                                );\n                            }),\n                            (t.prototype.clean = function () {\n                                this.w === -n.BIGDIMEN && (this.w = 0),\n                                    this.h === -n.BIGDIMEN && (this.h = 0),\n                                    this.d === -n.BIGDIMEN && (this.d = 0);\n                            }),\n                            (t.prototype.rescale = function (t) {\n                                (this.w *= t), (this.h *= t), (this.d *= t);\n                            }),\n                            (t.prototype.combine = function (t, e, r) {\n                                void 0 === e && (e = 0),\n                                    void 0 === r && (r = 0);\n                                var n = t.rscale,\n                                    o = e + n * (t.w + t.L + t.R),\n                                    i = r + n * t.h,\n                                    s = n * t.d - r;\n                                o > this.w && (this.w = o),\n                                    i > this.h && (this.h = i),\n                                    s > this.d && (this.d = s);\n                            }),\n                            (t.prototype.append = function (t) {\n                                var e = t.rscale;\n                                (this.w += e * (t.w + t.L + t.R)),\n                                    e * t.h > this.h && (this.h = e * t.h),\n                                    e * t.d > this.d && (this.d = e * t.d);\n                            }),\n                            (t.prototype.updateFrom = function (t) {\n                                (this.h = t.h),\n                                    (this.d = t.d),\n                                    (this.w = t.w),\n                                    t.pwidth && (this.pwidth = t.pwidth);\n                            }),\n                            (t.fullWidth = \"100%\"),\n                            (t.StyleAdjust = [\n                                [\"borderTopWidth\", \"h\"],\n                                [\"borderRightWidth\", \"w\"],\n                                [\"borderBottomWidth\", \"d\"],\n                                [\"borderLeftWidth\", \"w\", 0],\n                                [\"paddingTop\", \"h\"],\n                                [\"paddingRight\", \"w\"],\n                                [\"paddingBottom\", \"d\"],\n                                [\"paddingLeft\", \"w\", 0],\n                            ]),\n                            t\n                        );\n                    })();\n                e.BBox = o;\n            },\n            6751: function (t, e) {\n                var r,\n                    n =\n                        (this && this.__extends) ||\n                        ((r = function (t, e) {\n                            return (\n                                (r =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                r(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function n() {\n                                this.constructor = t;\n                            }\n                            r(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((n.prototype = e.prototype),\n                                          new n()));\n                        }),\n                    o =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    s =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.BitFieldClass = e.BitField = void 0);\n                var a = (function () {\n                    function t() {\n                        this.bits = 0;\n                    }\n                    return (\n                        (t.allocate = function () {\n                            for (\n                                var e, r, n = [], i = 0;\n                                i < arguments.length;\n                                i++\n                            )\n                                n[i] = arguments[i];\n                            try {\n                                for (\n                                    var s = o(n), a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var l = a.value;\n                                    if (this.has(l))\n                                        throw new Error(\n                                            \"Bit already allocated for \" + l\n                                        );\n                                    if (this.next === t.MAXBIT)\n                                        throw new Error(\n                                            \"Maximum number of bits already allocated\"\n                                        );\n                                    this.names.set(l, this.next),\n                                        (this.next <<= 1);\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (r = s.return) && r.call(s);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                        }),\n                        (t.has = function (t) {\n                            return this.names.has(t);\n                        }),\n                        (t.prototype.set = function (t) {\n                            this.bits |= this.getBit(t);\n                        }),\n                        (t.prototype.clear = function (t) {\n                            this.bits &= ~this.getBit(t);\n                        }),\n                        (t.prototype.isSet = function (t) {\n                            return !!(this.bits & this.getBit(t));\n                        }),\n                        (t.prototype.reset = function () {\n                            this.bits = 0;\n                        }),\n                        (t.prototype.getBit = function (t) {\n                            var e = this.constructor.names.get(t);\n                            if (!e)\n                                throw new Error(\"Unknown bit-field name: \" + t);\n                            return e;\n                        }),\n                        (t.MAXBIT = 1 << 31),\n                        (t.next = 1),\n                        (t.names = new Map()),\n                        t\n                    );\n                })();\n                (e.BitField = a),\n                    (e.BitFieldClass = function () {\n                        for (var t = [], e = 0; e < arguments.length; e++)\n                            t[e] = arguments[e];\n                        var r = (function (t) {\n                            function e() {\n                                return (\n                                    (null !== t && t.apply(this, arguments)) ||\n                                    this\n                                );\n                            }\n                            return n(e, t), e;\n                        })(a);\n                        return r.allocate.apply(r, s([], i(t), !1)), r;\n                    });\n            },\n            5368: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.numeric =\n                        e.translate =\n                        e.remove =\n                        e.add =\n                        e.entities =\n                        e.options =\n                            void 0);\n                var n = r(4542),\n                    o = r(9923);\n                (e.options = { loadMissingEntities: !0 }),\n                    (e.entities = {\n                        ApplyFunction: \"\\u2061\",\n                        Backslash: \"\\u2216\",\n                        Because: \"\\u2235\",\n                        Breve: \"\\u02d8\",\n                        Cap: \"\\u22d2\",\n                        CenterDot: \"\\xb7\",\n                        CircleDot: \"\\u2299\",\n                        CircleMinus: \"\\u2296\",\n                        CirclePlus: \"\\u2295\",\n                        CircleTimes: \"\\u2297\",\n                        Congruent: \"\\u2261\",\n                        ContourIntegral: \"\\u222e\",\n                        Coproduct: \"\\u2210\",\n                        Cross: \"\\u2a2f\",\n                        Cup: \"\\u22d3\",\n                        CupCap: \"\\u224d\",\n                        Dagger: \"\\u2021\",\n                        Del: \"\\u2207\",\n                        Delta: \"\\u0394\",\n                        Diamond: \"\\u22c4\",\n                        DifferentialD: \"\\u2146\",\n                        DotEqual: \"\\u2250\",\n                        DoubleDot: \"\\xa8\",\n                        DoubleRightTee: \"\\u22a8\",\n                        DoubleVerticalBar: \"\\u2225\",\n                        DownArrow: \"\\u2193\",\n                        DownLeftVector: \"\\u21bd\",\n                        DownRightVector: \"\\u21c1\",\n                        DownTee: \"\\u22a4\",\n                        Downarrow: \"\\u21d3\",\n                        Element: \"\\u2208\",\n                        EqualTilde: \"\\u2242\",\n                        Equilibrium: \"\\u21cc\",\n                        Exists: \"\\u2203\",\n                        ExponentialE: \"\\u2147\",\n                        FilledVerySmallSquare: \"\\u25aa\",\n                        ForAll: \"\\u2200\",\n                        Gamma: \"\\u0393\",\n                        Gg: \"\\u22d9\",\n                        GreaterEqual: \"\\u2265\",\n                        GreaterEqualLess: \"\\u22db\",\n                        GreaterFullEqual: \"\\u2267\",\n                        GreaterLess: \"\\u2277\",\n                        GreaterSlantEqual: \"\\u2a7e\",\n                        GreaterTilde: \"\\u2273\",\n                        Hacek: \"\\u02c7\",\n                        Hat: \"^\",\n                        HumpDownHump: \"\\u224e\",\n                        HumpEqual: \"\\u224f\",\n                        Im: \"\\u2111\",\n                        ImaginaryI: \"\\u2148\",\n                        Integral: \"\\u222b\",\n                        Intersection: \"\\u22c2\",\n                        InvisibleComma: \"\\u2063\",\n                        InvisibleTimes: \"\\u2062\",\n                        Lambda: \"\\u039b\",\n                        Larr: \"\\u219e\",\n                        LeftAngleBracket: \"\\u27e8\",\n                        LeftArrow: \"\\u2190\",\n                        LeftArrowRightArrow: \"\\u21c6\",\n                        LeftCeiling: \"\\u2308\",\n                        LeftDownVector: \"\\u21c3\",\n                        LeftFloor: \"\\u230a\",\n                        LeftRightArrow: \"\\u2194\",\n                        LeftTee: \"\\u22a3\",\n                        LeftTriangle: \"\\u22b2\",\n                        LeftTriangleEqual: \"\\u22b4\",\n                        LeftUpVector: \"\\u21bf\",\n                        LeftVector: \"\\u21bc\",\n                        Leftarrow: \"\\u21d0\",\n                        Leftrightarrow: \"\\u21d4\",\n                        LessEqualGreater: \"\\u22da\",\n                        LessFullEqual: \"\\u2266\",\n                        LessGreater: \"\\u2276\",\n                        LessSlantEqual: \"\\u2a7d\",\n                        LessTilde: \"\\u2272\",\n                        Ll: \"\\u22d8\",\n                        Lleftarrow: \"\\u21da\",\n                        LongLeftArrow: \"\\u27f5\",\n                        LongLeftRightArrow: \"\\u27f7\",\n                        LongRightArrow: \"\\u27f6\",\n                        Longleftarrow: \"\\u27f8\",\n                        Longleftrightarrow: \"\\u27fa\",\n                        Longrightarrow: \"\\u27f9\",\n                        Lsh: \"\\u21b0\",\n                        MinusPlus: \"\\u2213\",\n                        NestedGreaterGreater: \"\\u226b\",\n                        NestedLessLess: \"\\u226a\",\n                        NotDoubleVerticalBar: \"\\u2226\",\n                        NotElement: \"\\u2209\",\n                        NotEqual: \"\\u2260\",\n                        NotExists: \"\\u2204\",\n                        NotGreater: \"\\u226f\",\n                        NotGreaterEqual: \"\\u2271\",\n                        NotLeftTriangle: \"\\u22ea\",\n                        NotLeftTriangleEqual: \"\\u22ec\",\n                        NotLess: \"\\u226e\",\n                        NotLessEqual: \"\\u2270\",\n                        NotPrecedes: \"\\u2280\",\n                        NotPrecedesSlantEqual: \"\\u22e0\",\n                        NotRightTriangle: \"\\u22eb\",\n                        NotRightTriangleEqual: \"\\u22ed\",\n                        NotSubsetEqual: \"\\u2288\",\n                        NotSucceeds: \"\\u2281\",\n                        NotSucceedsSlantEqual: \"\\u22e1\",\n                        NotSupersetEqual: \"\\u2289\",\n                        NotTilde: \"\\u2241\",\n                        NotVerticalBar: \"\\u2224\",\n                        Omega: \"\\u03a9\",\n                        OverBar: \"\\u203e\",\n                        OverBrace: \"\\u23de\",\n                        PartialD: \"\\u2202\",\n                        Phi: \"\\u03a6\",\n                        Pi: \"\\u03a0\",\n                        PlusMinus: \"\\xb1\",\n                        Precedes: \"\\u227a\",\n                        PrecedesEqual: \"\\u2aaf\",\n                        PrecedesSlantEqual: \"\\u227c\",\n                        PrecedesTilde: \"\\u227e\",\n                        Product: \"\\u220f\",\n                        Proportional: \"\\u221d\",\n                        Psi: \"\\u03a8\",\n                        Rarr: \"\\u21a0\",\n                        Re: \"\\u211c\",\n                        ReverseEquilibrium: \"\\u21cb\",\n                        RightAngleBracket: \"\\u27e9\",\n                        RightArrow: \"\\u2192\",\n                        RightArrowLeftArrow: \"\\u21c4\",\n                        RightCeiling: \"\\u2309\",\n                        RightDownVector: \"\\u21c2\",\n                        RightFloor: \"\\u230b\",\n                        RightTee: \"\\u22a2\",\n                        RightTeeArrow: \"\\u21a6\",\n                        RightTriangle: \"\\u22b3\",\n                        RightTriangleEqual: \"\\u22b5\",\n                        RightUpVector: \"\\u21be\",\n                        RightVector: \"\\u21c0\",\n                        Rightarrow: \"\\u21d2\",\n                        Rrightarrow: \"\\u21db\",\n                        Rsh: \"\\u21b1\",\n                        Sigma: \"\\u03a3\",\n                        SmallCircle: \"\\u2218\",\n                        Sqrt: \"\\u221a\",\n                        Square: \"\\u25a1\",\n                        SquareIntersection: \"\\u2293\",\n                        SquareSubset: \"\\u228f\",\n                        SquareSubsetEqual: \"\\u2291\",\n                        SquareSuperset: \"\\u2290\",\n                        SquareSupersetEqual: \"\\u2292\",\n                        SquareUnion: \"\\u2294\",\n                        Star: \"\\u22c6\",\n                        Subset: \"\\u22d0\",\n                        SubsetEqual: \"\\u2286\",\n                        Succeeds: \"\\u227b\",\n                        SucceedsEqual: \"\\u2ab0\",\n                        SucceedsSlantEqual: \"\\u227d\",\n                        SucceedsTilde: \"\\u227f\",\n                        SuchThat: \"\\u220b\",\n                        Sum: \"\\u2211\",\n                        Superset: \"\\u2283\",\n                        SupersetEqual: \"\\u2287\",\n                        Supset: \"\\u22d1\",\n                        Therefore: \"\\u2234\",\n                        Theta: \"\\u0398\",\n                        Tilde: \"\\u223c\",\n                        TildeEqual: \"\\u2243\",\n                        TildeFullEqual: \"\\u2245\",\n                        TildeTilde: \"\\u2248\",\n                        UnderBar: \"_\",\n                        UnderBrace: \"\\u23df\",\n                        Union: \"\\u22c3\",\n                        UnionPlus: \"\\u228e\",\n                        UpArrow: \"\\u2191\",\n                        UpDownArrow: \"\\u2195\",\n                        UpTee: \"\\u22a5\",\n                        Uparrow: \"\\u21d1\",\n                        Updownarrow: \"\\u21d5\",\n                        Upsilon: \"\\u03a5\",\n                        Vdash: \"\\u22a9\",\n                        Vee: \"\\u22c1\",\n                        VerticalBar: \"\\u2223\",\n                        VerticalTilde: \"\\u2240\",\n                        Vvdash: \"\\u22aa\",\n                        Wedge: \"\\u22c0\",\n                        Xi: \"\\u039e\",\n                        amp: \"&\",\n                        acute: \"\\xb4\",\n                        aleph: \"\\u2135\",\n                        alpha: \"\\u03b1\",\n                        amalg: \"\\u2a3f\",\n                        and: \"\\u2227\",\n                        ang: \"\\u2220\",\n                        angmsd: \"\\u2221\",\n                        angsph: \"\\u2222\",\n                        ape: \"\\u224a\",\n                        backprime: \"\\u2035\",\n                        backsim: \"\\u223d\",\n                        backsimeq: \"\\u22cd\",\n                        beta: \"\\u03b2\",\n                        beth: \"\\u2136\",\n                        between: \"\\u226c\",\n                        bigcirc: \"\\u25ef\",\n                        bigodot: \"\\u2a00\",\n                        bigoplus: \"\\u2a01\",\n                        bigotimes: \"\\u2a02\",\n                        bigsqcup: \"\\u2a06\",\n                        bigstar: \"\\u2605\",\n                        bigtriangledown: \"\\u25bd\",\n                        bigtriangleup: \"\\u25b3\",\n                        biguplus: \"\\u2a04\",\n                        blacklozenge: \"\\u29eb\",\n                        blacktriangle: \"\\u25b4\",\n                        blacktriangledown: \"\\u25be\",\n                        blacktriangleleft: \"\\u25c2\",\n                        bowtie: \"\\u22c8\",\n                        boxdl: \"\\u2510\",\n                        boxdr: \"\\u250c\",\n                        boxminus: \"\\u229f\",\n                        boxplus: \"\\u229e\",\n                        boxtimes: \"\\u22a0\",\n                        boxul: \"\\u2518\",\n                        boxur: \"\\u2514\",\n                        bsol: \"\\\\\",\n                        bull: \"\\u2022\",\n                        cap: \"\\u2229\",\n                        check: \"\\u2713\",\n                        chi: \"\\u03c7\",\n                        circ: \"\\u02c6\",\n                        circeq: \"\\u2257\",\n                        circlearrowleft: \"\\u21ba\",\n                        circlearrowright: \"\\u21bb\",\n                        circledR: \"\\xae\",\n                        circledS: \"\\u24c8\",\n                        circledast: \"\\u229b\",\n                        circledcirc: \"\\u229a\",\n                        circleddash: \"\\u229d\",\n                        clubs: \"\\u2663\",\n                        colon: \":\",\n                        comp: \"\\u2201\",\n                        ctdot: \"\\u22ef\",\n                        cuepr: \"\\u22de\",\n                        cuesc: \"\\u22df\",\n                        cularr: \"\\u21b6\",\n                        cup: \"\\u222a\",\n                        curarr: \"\\u21b7\",\n                        curlyvee: \"\\u22ce\",\n                        curlywedge: \"\\u22cf\",\n                        dagger: \"\\u2020\",\n                        daleth: \"\\u2138\",\n                        ddarr: \"\\u21ca\",\n                        deg: \"\\xb0\",\n                        delta: \"\\u03b4\",\n                        digamma: \"\\u03dd\",\n                        div: \"\\xf7\",\n                        divideontimes: \"\\u22c7\",\n                        dot: \"\\u02d9\",\n                        doteqdot: \"\\u2251\",\n                        dotplus: \"\\u2214\",\n                        dotsquare: \"\\u22a1\",\n                        dtdot: \"\\u22f1\",\n                        ecir: \"\\u2256\",\n                        efDot: \"\\u2252\",\n                        egs: \"\\u2a96\",\n                        ell: \"\\u2113\",\n                        els: \"\\u2a95\",\n                        empty: \"\\u2205\",\n                        epsi: \"\\u03b5\",\n                        epsiv: \"\\u03f5\",\n                        erDot: \"\\u2253\",\n                        eta: \"\\u03b7\",\n                        eth: \"\\xf0\",\n                        flat: \"\\u266d\",\n                        fork: \"\\u22d4\",\n                        frown: \"\\u2322\",\n                        gEl: \"\\u2a8c\",\n                        gamma: \"\\u03b3\",\n                        gap: \"\\u2a86\",\n                        gimel: \"\\u2137\",\n                        gnE: \"\\u2269\",\n                        gnap: \"\\u2a8a\",\n                        gne: \"\\u2a88\",\n                        gnsim: \"\\u22e7\",\n                        gt: \">\",\n                        gtdot: \"\\u22d7\",\n                        harrw: \"\\u21ad\",\n                        hbar: \"\\u210f\",\n                        hellip: \"\\u2026\",\n                        hookleftarrow: \"\\u21a9\",\n                        hookrightarrow: \"\\u21aa\",\n                        imath: \"\\u0131\",\n                        infin: \"\\u221e\",\n                        intcal: \"\\u22ba\",\n                        iota: \"\\u03b9\",\n                        jmath: \"\\u0237\",\n                        kappa: \"\\u03ba\",\n                        kappav: \"\\u03f0\",\n                        lEg: \"\\u2a8b\",\n                        lambda: \"\\u03bb\",\n                        lap: \"\\u2a85\",\n                        larrlp: \"\\u21ab\",\n                        larrtl: \"\\u21a2\",\n                        lbrace: \"{\",\n                        lbrack: \"[\",\n                        le: \"\\u2264\",\n                        leftleftarrows: \"\\u21c7\",\n                        leftthreetimes: \"\\u22cb\",\n                        lessdot: \"\\u22d6\",\n                        lmoust: \"\\u23b0\",\n                        lnE: \"\\u2268\",\n                        lnap: \"\\u2a89\",\n                        lne: \"\\u2a87\",\n                        lnsim: \"\\u22e6\",\n                        longmapsto: \"\\u27fc\",\n                        looparrowright: \"\\u21ac\",\n                        lowast: \"\\u2217\",\n                        loz: \"\\u25ca\",\n                        lt: \"<\",\n                        ltimes: \"\\u22c9\",\n                        ltri: \"\\u25c3\",\n                        macr: \"\\xaf\",\n                        malt: \"\\u2720\",\n                        mho: \"\\u2127\",\n                        mu: \"\\u03bc\",\n                        multimap: \"\\u22b8\",\n                        nLeftarrow: \"\\u21cd\",\n                        nLeftrightarrow: \"\\u21ce\",\n                        nRightarrow: \"\\u21cf\",\n                        nVDash: \"\\u22af\",\n                        nVdash: \"\\u22ae\",\n                        natur: \"\\u266e\",\n                        nearr: \"\\u2197\",\n                        nharr: \"\\u21ae\",\n                        nlarr: \"\\u219a\",\n                        not: \"\\xac\",\n                        nrarr: \"\\u219b\",\n                        nu: \"\\u03bd\",\n                        nvDash: \"\\u22ad\",\n                        nvdash: \"\\u22ac\",\n                        nwarr: \"\\u2196\",\n                        omega: \"\\u03c9\",\n                        omicron: \"\\u03bf\",\n                        or: \"\\u2228\",\n                        osol: \"\\u2298\",\n                        period: \".\",\n                        phi: \"\\u03c6\",\n                        phiv: \"\\u03d5\",\n                        pi: \"\\u03c0\",\n                        piv: \"\\u03d6\",\n                        prap: \"\\u2ab7\",\n                        precnapprox: \"\\u2ab9\",\n                        precneqq: \"\\u2ab5\",\n                        precnsim: \"\\u22e8\",\n                        prime: \"\\u2032\",\n                        psi: \"\\u03c8\",\n                        quot: '\"',\n                        rarrtl: \"\\u21a3\",\n                        rbrace: \"}\",\n                        rbrack: \"]\",\n                        rho: \"\\u03c1\",\n                        rhov: \"\\u03f1\",\n                        rightrightarrows: \"\\u21c9\",\n                        rightthreetimes: \"\\u22cc\",\n                        ring: \"\\u02da\",\n                        rmoust: \"\\u23b1\",\n                        rtimes: \"\\u22ca\",\n                        rtri: \"\\u25b9\",\n                        scap: \"\\u2ab8\",\n                        scnE: \"\\u2ab6\",\n                        scnap: \"\\u2aba\",\n                        scnsim: \"\\u22e9\",\n                        sdot: \"\\u22c5\",\n                        searr: \"\\u2198\",\n                        sect: \"\\xa7\",\n                        sharp: \"\\u266f\",\n                        sigma: \"\\u03c3\",\n                        sigmav: \"\\u03c2\",\n                        simne: \"\\u2246\",\n                        smile: \"\\u2323\",\n                        spades: \"\\u2660\",\n                        sub: \"\\u2282\",\n                        subE: \"\\u2ac5\",\n                        subnE: \"\\u2acb\",\n                        subne: \"\\u228a\",\n                        supE: \"\\u2ac6\",\n                        supnE: \"\\u2acc\",\n                        supne: \"\\u228b\",\n                        swarr: \"\\u2199\",\n                        tau: \"\\u03c4\",\n                        theta: \"\\u03b8\",\n                        thetav: \"\\u03d1\",\n                        tilde: \"\\u02dc\",\n                        times: \"\\xd7\",\n                        triangle: \"\\u25b5\",\n                        triangleq: \"\\u225c\",\n                        upsi: \"\\u03c5\",\n                        upuparrows: \"\\u21c8\",\n                        veebar: \"\\u22bb\",\n                        vellip: \"\\u22ee\",\n                        weierp: \"\\u2118\",\n                        xi: \"\\u03be\",\n                        yen: \"\\xa5\",\n                        zeta: \"\\u03b6\",\n                        zigrarr: \"\\u21dd\",\n                        nbsp: \"\\xa0\",\n                        rsquo: \"\\u2019\",\n                        lsquo: \"\\u2018\",\n                    });\n                var i = {};\n                function s(t, r) {\n                    if (\"#\" === r.charAt(0)) return a(r.slice(1));\n                    if (e.entities[r]) return e.entities[r];\n                    if (e.options.loadMissingEntities) {\n                        var s = r.match(/^[a-zA-Z](fr|scr|opf)$/)\n                            ? RegExp.$1\n                            : r.charAt(0).toLowerCase();\n                        i[s] ||\n                            ((i[s] = !0),\n                            (0, n.retryAfter)(\n                                (0, o.asyncLoad)(\"./util/entities/\" + s + \".js\")\n                            ));\n                    }\n                    return t;\n                }\n                function a(t) {\n                    var e =\n                        \"x\" === t.charAt(0)\n                            ? parseInt(t.slice(1), 16)\n                            : parseInt(t);\n                    return String.fromCodePoint(e);\n                }\n                (e.add = function (t, r) {\n                    Object.assign(e.entities, t), (i[r] = !0);\n                }),\n                    (e.remove = function (t) {\n                        delete e.entities[t];\n                    }),\n                    (e.translate = function (t) {\n                        return t.replace(\n                            /&([a-z][a-z0-9]*|#(?:[0-9]+|x[0-9a-f]+));/gi,\n                            s\n                        );\n                    }),\n                    (e.numeric = a);\n            },\n            7525: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            Object.prototype.hasOwnProperty.call(\n                                                e,\n                                                r\n                                            ) && (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            if (\"function\" != typeof e && null !== e)\n                                throw new TypeError(\n                                    \"Class extends value \" +\n                                        String(e) +\n                                        \" is not a constructor or null\"\n                                );\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    s =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    a =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.FunctionList = void 0);\n                var l = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.execute = function () {\n                            for (\n                                var t, e, r = [], n = 0;\n                                n < arguments.length;\n                                n++\n                            )\n                                r[n] = arguments[n];\n                            try {\n                                for (\n                                    var o = i(this), l = o.next();\n                                    !l.done;\n                                    l = o.next()\n                                ) {\n                                    var c = l.value,\n                                        u = c.item.apply(c, a([], s(r), !1));\n                                    if (!1 === u) return !1;\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    l && !l.done && (e = o.return) && e.call(o);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            return !0;\n                        }),\n                        (e.prototype.asyncExecute = function () {\n                            for (var t = [], e = 0; e < arguments.length; e++)\n                                t[e] = arguments[e];\n                            var r = -1,\n                                n = this.items;\n                            return new Promise(function (e, o) {\n                                !(function i() {\n                                    for (var l; ++r < n.length; ) {\n                                        var c = (l = n[r]).item.apply(\n                                            l,\n                                            a([], s(t), !1)\n                                        );\n                                        if (c instanceof Promise)\n                                            return void c\n                                                .then(i)\n                                                .catch(function (t) {\n                                                    return o(t);\n                                                });\n                                        if (!1 === c) return void e(!1);\n                                    }\n                                    e(!0);\n                                })();\n                            });\n                        }),\n                        e\n                    );\n                })(r(8666).PrioritizedList);\n                e.FunctionList = l;\n            },\n            103: function (t, e) {\n                var r =\n                        (this && this.__generator) ||\n                        function (t, e) {\n                            var r,\n                                n,\n                                o,\n                                i,\n                                s = {\n                                    label: 0,\n                                    sent: function () {\n                                        if (1 & o[0]) throw o[1];\n                                        return o[1];\n                                    },\n                                    trys: [],\n                                    ops: [],\n                                };\n                            return (\n                                (i = { next: a(0), throw: a(1), return: a(2) }),\n                                \"function\" == typeof Symbol &&\n                                    (i[Symbol.iterator] = function () {\n                                        return this;\n                                    }),\n                                i\n                            );\n                            function a(i) {\n                                return function (a) {\n                                    return (function (i) {\n                                        if (r)\n                                            throw new TypeError(\n                                                \"Generator is already executing.\"\n                                            );\n                                        for (; s; )\n                                            try {\n                                                if (\n                                                    ((r = 1),\n                                                    n &&\n                                                        (o =\n                                                            2 & i[0]\n                                                                ? n.return\n                                                                : i[0]\n                                                                  ? n.throw ||\n                                                                    ((o =\n                                                                        n.return) &&\n                                                                        o.call(\n                                                                            n\n                                                                        ),\n                                                                    0)\n                                                                  : n.next) &&\n                                                        !(o = o.call(n, i[1]))\n                                                            .done)\n                                                )\n                                                    return o;\n                                                switch (\n                                                    ((n = 0),\n                                                    o &&\n                                                        (i = [\n                                                            2 & i[0],\n                                                            o.value,\n                                                        ]),\n                                                    i[0])\n                                                ) {\n                                                    case 0:\n                                                    case 1:\n                                                        o = i;\n                                                        break;\n                                                    case 4:\n                                                        return (\n                                                            s.label++,\n                                                            {\n                                                                value: i[1],\n                                                                done: !1,\n                                                            }\n                                                        );\n                                                    case 5:\n                                                        s.label++,\n                                                            (n = i[1]),\n                                                            (i = [0]);\n                                                        continue;\n                                                    case 7:\n                                                        (i = s.ops.pop()),\n                                                            s.trys.pop();\n                                                        continue;\n                                                    default:\n                                                        if (\n                                                            !((o = s.trys),\n                                                            (o =\n                                                                o.length > 0 &&\n                                                                o[\n                                                                    o.length - 1\n                                                                ]) ||\n                                                                (6 !== i[0] &&\n                                                                    2 !== i[0]))\n                                                        ) {\n                                                            s = 0;\n                                                            continue;\n                                                        }\n                                                        if (\n                                                            3 === i[0] &&\n                                                            (!o ||\n                                                                (i[1] > o[0] &&\n                                                                    i[1] <\n                                                                        o[3]))\n                                                        ) {\n                                                            s.label = i[1];\n                                                            break;\n                                                        }\n                                                        if (\n                                                            6 === i[0] &&\n                                                            s.label < o[1]\n                                                        ) {\n                                                            (s.label = o[1]),\n                                                                (o = i);\n                                                            break;\n                                                        }\n                                                        if (\n                                                            o &&\n                                                            s.label < o[2]\n                                                        ) {\n                                                            (s.label = o[2]),\n                                                                s.ops.push(i);\n                                                            break;\n                                                        }\n                                                        o[2] && s.ops.pop(),\n                                                            s.trys.pop();\n                                                        continue;\n                                                }\n                                                i = e.call(t, s);\n                                            } catch (t) {\n                                                (i = [6, t]), (n = 0);\n                                            } finally {\n                                                r = o = 0;\n                                            }\n                                        if (5 & i[0]) throw i[1];\n                                        return {\n                                            value: i[0] ? i[1] : void 0,\n                                            done: !0,\n                                        };\n                                    })([i, a]);\n                                };\n                            }\n                        },\n                    n =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    o =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        },\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.LinkedList = e.ListItem = e.END = void 0),\n                    (e.END = Symbol());\n                var s = function (t) {\n                    void 0 === t && (t = null),\n                        (this.next = null),\n                        (this.prev = null),\n                        (this.data = t);\n                };\n                e.ListItem = s;\n                var a = (function () {\n                    function t() {\n                        for (var t = [], r = 0; r < arguments.length; r++)\n                            t[r] = arguments[r];\n                        (this.list = new s(e.END)),\n                            (this.list.next = this.list.prev = this.list),\n                            this.push.apply(this, o([], n(t), !1));\n                    }\n                    return (\n                        (t.prototype.isBefore = function (t, e) {\n                            return t < e;\n                        }),\n                        (t.prototype.push = function () {\n                            for (\n                                var t, e, r = [], n = 0;\n                                n < arguments.length;\n                                n++\n                            )\n                                r[n] = arguments[n];\n                            try {\n                                for (\n                                    var o = i(r), a = o.next();\n                                    !a.done;\n                                    a = o.next()\n                                ) {\n                                    var l = a.value,\n                                        c = new s(l);\n                                    (c.next = this.list),\n                                        (c.prev = this.list.prev),\n                                        (this.list.prev = c),\n                                        (c.prev.next = c);\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    a && !a.done && (e = o.return) && e.call(o);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            return this;\n                        }),\n                        (t.prototype.pop = function () {\n                            var t = this.list.prev;\n                            return t.data === e.END\n                                ? null\n                                : ((this.list.prev = t.prev),\n                                  (t.prev.next = this.list),\n                                  (t.next = t.prev = null),\n                                  t.data);\n                        }),\n                        (t.prototype.unshift = function () {\n                            for (\n                                var t, e, r = [], n = 0;\n                                n < arguments.length;\n                                n++\n                            )\n                                r[n] = arguments[n];\n                            try {\n                                for (\n                                    var o = i(r.slice(0).reverse()),\n                                        a = o.next();\n                                    !a.done;\n                                    a = o.next()\n                                ) {\n                                    var l = a.value,\n                                        c = new s(l);\n                                    (c.next = this.list.next),\n                                        (c.prev = this.list),\n                                        (this.list.next = c),\n                                        (c.next.prev = c);\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    a && !a.done && (e = o.return) && e.call(o);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            return this;\n                        }),\n                        (t.prototype.shift = function () {\n                            var t = this.list.next;\n                            return t.data === e.END\n                                ? null\n                                : ((this.list.next = t.next),\n                                  (t.next.prev = this.list),\n                                  (t.next = t.prev = null),\n                                  t.data);\n                        }),\n                        (t.prototype.remove = function () {\n                            for (\n                                var t, r, n = [], o = 0;\n                                o < arguments.length;\n                                o++\n                            )\n                                n[o] = arguments[o];\n                            var s = new Map();\n                            try {\n                                for (\n                                    var a = i(n), l = a.next();\n                                    !l.done;\n                                    l = a.next()\n                                ) {\n                                    var c = l.value;\n                                    s.set(c, !0);\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    l && !l.done && (r = a.return) && r.call(a);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            for (var u = this.list.next; u.data !== e.END; ) {\n                                var p = u.next;\n                                s.has(u.data) &&\n                                    ((u.prev.next = u.next),\n                                    (u.next.prev = u.prev),\n                                    (u.next = u.prev = null)),\n                                    (u = p);\n                            }\n                        }),\n                        (t.prototype.clear = function () {\n                            return (\n                                (this.list.next.prev = this.list.prev.next =\n                                    null),\n                                (this.list.next = this.list.prev = this.list),\n                                this\n                            );\n                        }),\n                        (t.prototype[Symbol.iterator] = function () {\n                            var t;\n                            return r(this, function (r) {\n                                switch (r.label) {\n                                    case 0:\n                                        (t = this.list.next), (r.label = 1);\n                                    case 1:\n                                        return t.data === e.END\n                                            ? [3, 3]\n                                            : [4, t.data];\n                                    case 2:\n                                        return r.sent(), (t = t.next), [3, 1];\n                                    case 3:\n                                        return [2];\n                                }\n                            });\n                        }),\n                        (t.prototype.reversed = function () {\n                            var t;\n                            return r(this, function (r) {\n                                switch (r.label) {\n                                    case 0:\n                                        (t = this.list.prev), (r.label = 1);\n                                    case 1:\n                                        return t.data === e.END\n                                            ? [3, 3]\n                                            : [4, t.data];\n                                    case 2:\n                                        return r.sent(), (t = t.prev), [3, 1];\n                                    case 3:\n                                        return [2];\n                                }\n                            });\n                        }),\n                        (t.prototype.insert = function (t, r) {\n                            void 0 === r && (r = null),\n                                null === r && (r = this.isBefore.bind(this));\n                            for (\n                                var n = new s(t), o = this.list.next;\n                                o.data !== e.END && r(o.data, n.data);\n\n                            )\n                                o = o.next;\n                            return (\n                                (n.prev = o.prev),\n                                (n.next = o),\n                                (o.prev.next = o.prev = n),\n                                this\n                            );\n                        }),\n                        (t.prototype.sort = function (e) {\n                            var r, n;\n                            void 0 === e && (e = null),\n                                null === e && (e = this.isBefore.bind(this));\n                            var o = [];\n                            try {\n                                for (\n                                    var s = i(this), a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var l = a.value;\n                                    o.push(new t(l));\n                                }\n                            } catch (t) {\n                                r = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (n = s.return) && n.call(s);\n                                } finally {\n                                    if (r) throw r.error;\n                                }\n                            }\n                            for (\n                                this.list.next = this.list.prev = this.list;\n                                o.length > 1;\n\n                            ) {\n                                var c = o.shift(),\n                                    u = o.shift();\n                                c.merge(u, e), o.push(c);\n                            }\n                            return o.length && (this.list = o[0].list), this;\n                        }),\n                        (t.prototype.merge = function (t, r) {\n                            var o, i, s, a, l;\n                            void 0 === r && (r = null),\n                                null === r && (r = this.isBefore.bind(this));\n                            for (\n                                var c = this.list.next, u = t.list.next;\n                                c.data !== e.END && u.data !== e.END;\n\n                            )\n                                r(u.data, c.data)\n                                    ? ((o = n([c, u], 2)),\n                                      (u.prev.next = o[0]),\n                                      (c.prev.next = o[1]),\n                                      (i = n([c.prev, u.prev], 2)),\n                                      (u.prev = i[0]),\n                                      (c.prev = i[1]),\n                                      (s = n([t.list, this.list], 2)),\n                                      (this.list.prev.next = s[0]),\n                                      (t.list.prev.next = s[1]),\n                                      (a = n([t.list.prev, this.list.prev], 2)),\n                                      (this.list.prev = a[0]),\n                                      (t.list.prev = a[1]),\n                                      (c = (l = n([u.next, c], 2))[0]),\n                                      (u = l[1]))\n                                    : (c = c.next);\n                            return (\n                                u.data !== e.END &&\n                                    ((this.list.prev.next = t.list.next),\n                                    (t.list.next.prev = this.list.prev),\n                                    (t.list.prev.next = this.list),\n                                    (this.list.prev = t.list.prev),\n                                    (t.list.next = t.list.prev = t.list)),\n                                this\n                            );\n                        }),\n                        t\n                    );\n                })();\n                e.LinkedList = a;\n            },\n            7233: function (t, e) {\n                var r =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    n =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    o =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.lookup =\n                        e.separateOptions =\n                        e.selectOptionsFromKeys =\n                        e.selectOptions =\n                        e.userOptions =\n                        e.defaultOptions =\n                        e.insert =\n                        e.copy =\n                        e.keys =\n                        e.makeArray =\n                        e.expandable =\n                        e.Expandable =\n                        e.OPTIONS =\n                        e.REMOVE =\n                        e.APPEND =\n                        e.isObject =\n                            void 0);\n                var i = {}.constructor;\n                function s(t) {\n                    return (\n                        \"object\" == typeof t &&\n                        null !== t &&\n                        (t.constructor === i || t.constructor === a)\n                    );\n                }\n                (e.isObject = s),\n                    (e.APPEND = \"[+]\"),\n                    (e.REMOVE = \"[-]\"),\n                    (e.OPTIONS = {\n                        invalidOption: \"warn\",\n                        optionError: function (t, r) {\n                            if (\"fatal\" === e.OPTIONS.invalidOption)\n                                throw new Error(t);\n                            console.warn(\"MathJax: \" + t);\n                        },\n                    });\n                var a = function () {};\n                function l(t) {\n                    return Object.assign(Object.create(a.prototype), t);\n                }\n                function c(t) {\n                    return t\n                        ? Object.keys(t).concat(Object.getOwnPropertySymbols(t))\n                        : [];\n                }\n                function u(t) {\n                    var e,\n                        n,\n                        o = {};\n                    try {\n                        for (\n                            var i = r(c(t)), h = i.next();\n                            !h.done;\n                            h = i.next()\n                        ) {\n                            var f = h.value,\n                                d = Object.getOwnPropertyDescriptor(t, f),\n                                m = d.value;\n                            Array.isArray(m)\n                                ? (d.value = p([], m, !1))\n                                : s(m) && (d.value = u(m)),\n                                d.enumerable && (o[f] = d);\n                        }\n                    } catch (t) {\n                        e = { error: t };\n                    } finally {\n                        try {\n                            h && !h.done && (n = i.return) && n.call(i);\n                        } finally {\n                            if (e) throw e.error;\n                        }\n                    }\n                    return Object.defineProperties(\n                        t.constructor === a ? l({}) : {},\n                        o\n                    );\n                }\n                function p(t, i, l) {\n                    var h, f;\n                    void 0 === l && (l = !0);\n                    var d = function (r) {\n                        if (l && void 0 === t[r] && t.constructor !== a)\n                            return (\n                                \"symbol\" == typeof r && (r = r.toString()),\n                                e.OPTIONS.optionError(\n                                    'Invalid option \"'.concat(\n                                        r,\n                                        '\" (no default value).'\n                                    ),\n                                    r\n                                ),\n                                \"continue\"\n                            );\n                        var h = i[r],\n                            f = t[r];\n                        if (\n                            !s(h) ||\n                            null === f ||\n                            (\"object\" != typeof f && \"function\" != typeof f)\n                        )\n                            Array.isArray(h)\n                                ? ((t[r] = []), p(t[r], h, !1))\n                                : s(h)\n                                  ? (t[r] = u(h))\n                                  : (t[r] = h);\n                        else {\n                            var d = c(h);\n                            Array.isArray(f) &&\n                            ((1 === d.length &&\n                                (d[0] === e.APPEND || d[0] === e.REMOVE) &&\n                                Array.isArray(h[d[0]])) ||\n                                (2 === d.length &&\n                                    d.sort().join(\",\") ===\n                                        e.APPEND + \",\" + e.REMOVE &&\n                                    Array.isArray(h[e.APPEND]) &&\n                                    Array.isArray(h[e.REMOVE])))\n                                ? (h[e.REMOVE] &&\n                                      (f = t[r] =\n                                          f.filter(function (t) {\n                                              return h[e.REMOVE].indexOf(t) < 0;\n                                          })),\n                                  h[e.APPEND] &&\n                                      (t[r] = o(\n                                          o([], n(f), !1),\n                                          n(h[e.APPEND]),\n                                          !1\n                                      )))\n                                : p(f, h, l);\n                        }\n                    };\n                    try {\n                        for (\n                            var m = r(c(i)), y = m.next();\n                            !y.done;\n                            y = m.next()\n                        ) {\n                            d(y.value);\n                        }\n                    } catch (t) {\n                        h = { error: t };\n                    } finally {\n                        try {\n                            y && !y.done && (f = m.return) && f.call(m);\n                        } finally {\n                            if (h) throw h.error;\n                        }\n                    }\n                    return t;\n                }\n                function h(t) {\n                    for (var e, n, o = [], i = 1; i < arguments.length; i++)\n                        o[i - 1] = arguments[i];\n                    var s = {};\n                    try {\n                        for (\n                            var a = r(o), l = a.next();\n                            !l.done;\n                            l = a.next()\n                        ) {\n                            var c = l.value;\n                            t.hasOwnProperty(c) && (s[c] = t[c]);\n                        }\n                    } catch (t) {\n                        e = { error: t };\n                    } finally {\n                        try {\n                            l && !l.done && (n = a.return) && n.call(a);\n                        } finally {\n                            if (e) throw e.error;\n                        }\n                    }\n                    return s;\n                }\n                (e.Expandable = a),\n                    (e.expandable = l),\n                    (e.makeArray = function (t) {\n                        return Array.isArray(t) ? t : [t];\n                    }),\n                    (e.keys = c),\n                    (e.copy = u),\n                    (e.insert = p),\n                    (e.defaultOptions = function (t) {\n                        for (var e = [], r = 1; r < arguments.length; r++)\n                            e[r - 1] = arguments[r];\n                        return (\n                            e.forEach(function (e) {\n                                return p(t, e, !1);\n                            }),\n                            t\n                        );\n                    }),\n                    (e.userOptions = function (t) {\n                        for (var e = [], r = 1; r < arguments.length; r++)\n                            e[r - 1] = arguments[r];\n                        return (\n                            e.forEach(function (e) {\n                                return p(t, e, !0);\n                            }),\n                            t\n                        );\n                    }),\n                    (e.selectOptions = h),\n                    (e.selectOptionsFromKeys = function (t, e) {\n                        return h.apply(void 0, o([t], n(Object.keys(e)), !1));\n                    }),\n                    (e.separateOptions = function (t) {\n                        for (\n                            var e, n, o, i, s = [], a = 1;\n                            a < arguments.length;\n                            a++\n                        )\n                            s[a - 1] = arguments[a];\n                        var l = [];\n                        try {\n                            for (\n                                var c = r(s), u = c.next();\n                                !u.done;\n                                u = c.next()\n                            ) {\n                                var p = u.value,\n                                    h = {},\n                                    f = {};\n                                try {\n                                    for (\n                                        var d =\n                                                ((o = void 0),\n                                                r(Object.keys(t || {}))),\n                                            m = d.next();\n                                        !m.done;\n                                        m = d.next()\n                                    ) {\n                                        var y = m.value;\n                                        (void 0 === p[y] ? f : h)[y] = t[y];\n                                    }\n                                } catch (t) {\n                                    o = { error: t };\n                                } finally {\n                                    try {\n                                        m &&\n                                            !m.done &&\n                                            (i = d.return) &&\n                                            i.call(d);\n                                    } finally {\n                                        if (o) throw o.error;\n                                    }\n                                }\n                                l.push(h), (t = f);\n                            }\n                        } catch (t) {\n                            e = { error: t };\n                        } finally {\n                            try {\n                                u && !u.done && (n = c.return) && n.call(c);\n                            } finally {\n                                if (e) throw e.error;\n                            }\n                        }\n                        return l.unshift(t), l;\n                    }),\n                    (e.lookup = function (t, e, r) {\n                        return (\n                            void 0 === r && (r = null),\n                            e.hasOwnProperty(t) ? e[t] : r\n                        );\n                    });\n            },\n            8666: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.PrioritizedList = void 0);\n                var r = (function () {\n                    function t() {\n                        (this.items = []), (this.items = []);\n                    }\n                    return (\n                        (t.prototype[Symbol.iterator] = function () {\n                            var t = 0,\n                                e = this.items;\n                            return {\n                                next: function () {\n                                    return {\n                                        value: e[t++],\n                                        done: t > e.length,\n                                    };\n                                },\n                            };\n                        }),\n                        (t.prototype.add = function (e, r) {\n                            void 0 === r && (r = t.DEFAULTPRIORITY);\n                            var n = this.items.length;\n                            do {\n                                n--;\n                            } while (n >= 0 && r < this.items[n].priority);\n                            return (\n                                this.items.splice(n + 1, 0, {\n                                    item: e,\n                                    priority: r,\n                                }),\n                                e\n                            );\n                        }),\n                        (t.prototype.remove = function (t) {\n                            var e = this.items.length;\n                            do {\n                                e--;\n                            } while (e >= 0 && this.items[e].item !== t);\n                            e >= 0 && this.items.splice(e, 1);\n                        }),\n                        (t.DEFAULTPRIORITY = 5),\n                        t\n                    );\n                })();\n                e.PrioritizedList = r;\n            },\n            4542: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.retryAfter = e.handleRetriesFor = void 0),\n                    (e.handleRetriesFor = function (t) {\n                        return new Promise(function e(r, n) {\n                            try {\n                                r(t());\n                            } catch (t) {\n                                t.retry && t.retry instanceof Promise\n                                    ? t.retry\n                                          .then(function () {\n                                              return e(r, n);\n                                          })\n                                          .catch(function (t) {\n                                              return n(t);\n                                          })\n                                    : t.restart && t.restart.isCallback\n                                      ? MathJax.Callback.After(function () {\n                                            return e(r, n);\n                                        }, t.restart)\n                                      : n(t);\n                            }\n                        });\n                    }),\n                    (e.retryAfter = function (t) {\n                        var e = new Error(\"MathJax retry\");\n                        throw ((e.retry = t), e);\n                    });\n            },\n            4139: function (t, e) {\n                var r =\n                    (this && this.__values) ||\n                    function (t) {\n                        var e = \"function\" == typeof Symbol && Symbol.iterator,\n                            r = e && t[e],\n                            n = 0;\n                        if (r) return r.call(t);\n                        if (t && \"number\" == typeof t.length)\n                            return {\n                                next: function () {\n                                    return (\n                                        t && n >= t.length && (t = void 0),\n                                        { value: t && t[n++], done: !t }\n                                    );\n                                },\n                            };\n                        throw new TypeError(\n                            e\n                                ? \"Object is not iterable.\"\n                                : \"Symbol.iterator is not defined.\"\n                        );\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CssStyles = void 0);\n                var n = (function () {\n                    function t(t) {\n                        void 0 === t && (t = null),\n                            (this.styles = {}),\n                            this.addStyles(t);\n                    }\n                    return (\n                        Object.defineProperty(t.prototype, \"cssText\", {\n                            get: function () {\n                                return this.getStyleString();\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (t.prototype.addStyles = function (t) {\n                            var e, n;\n                            if (t)\n                                try {\n                                    for (\n                                        var o = r(Object.keys(t)), i = o.next();\n                                        !i.done;\n                                        i = o.next()\n                                    ) {\n                                        var s = i.value;\n                                        this.styles[s] || (this.styles[s] = {}),\n                                            Object.assign(this.styles[s], t[s]);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        i &&\n                                            !i.done &&\n                                            (n = o.return) &&\n                                            n.call(o);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                        }),\n                        (t.prototype.removeStyles = function () {\n                            for (\n                                var t, e, n = [], o = 0;\n                                o < arguments.length;\n                                o++\n                            )\n                                n[o] = arguments[o];\n                            try {\n                                for (\n                                    var i = r(n), s = i.next();\n                                    !s.done;\n                                    s = i.next()\n                                ) {\n                                    var a = s.value;\n                                    delete this.styles[a];\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    s && !s.done && (e = i.return) && e.call(i);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.clear = function () {\n                            this.styles = {};\n                        }),\n                        (t.prototype.getStyleString = function () {\n                            return this.getStyleRules().join(\"\\n\\n\");\n                        }),\n                        (t.prototype.getStyleRules = function () {\n                            var t,\n                                e,\n                                n = Object.keys(this.styles),\n                                o = new Array(n.length),\n                                i = 0;\n                            try {\n                                for (\n                                    var s = r(n), a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var l = a.value;\n                                    o[i++] =\n                                        l +\n                                        \" {\\n\" +\n                                        this.getStyleDefString(this.styles[l]) +\n                                        \"\\n}\";\n                                }\n                            } catch (e) {\n                                t = { error: e };\n                            } finally {\n                                try {\n                                    a && !a.done && (e = s.return) && e.call(s);\n                                } finally {\n                                    if (t) throw t.error;\n                                }\n                            }\n                            return o;\n                        }),\n                        (t.prototype.getStyleDefString = function (t) {\n                            var e,\n                                n,\n                                o = Object.keys(t),\n                                i = new Array(o.length),\n                                s = 0;\n                            try {\n                                for (\n                                    var a = r(o), l = a.next();\n                                    !l.done;\n                                    l = a.next()\n                                ) {\n                                    var c = l.value;\n                                    i[s++] = \"  \" + c + \": \" + t[c] + \";\";\n                                }\n                            } catch (t) {\n                                e = { error: t };\n                            } finally {\n                                try {\n                                    l && !l.done && (n = a.return) && n.call(a);\n                                } finally {\n                                    if (e) throw e.error;\n                                }\n                            }\n                            return i.join(\"\\n\");\n                        }),\n                        t\n                    );\n                })();\n                e.CssStyles = n;\n            },\n            8054: function (t, e) {\n                var r =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    n =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    o =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Styles = void 0);\n                var i = [\"top\", \"right\", \"bottom\", \"left\"],\n                    s = [\"width\", \"style\", \"color\"];\n                function a(t) {\n                    for (\n                        var e = t.split(\n                                /((?:'[^']*'|\"[^\"]*\"|,[\\s\\n]|[^\\s\\n])*)/g\n                            ),\n                            r = [];\n                        e.length > 1;\n\n                    )\n                        e.shift(), r.push(e.shift());\n                    return r;\n                }\n                function l(t) {\n                    var e,\n                        n,\n                        o = a(this.styles[t]);\n                    0 === o.length && o.push(\"\"),\n                        1 === o.length && o.push(o[0]),\n                        2 === o.length && o.push(o[0]),\n                        3 === o.length && o.push(o[1]);\n                    try {\n                        for (\n                            var i = r(v.connect[t].children), s = i.next();\n                            !s.done;\n                            s = i.next()\n                        ) {\n                            var l = s.value;\n                            this.setStyle(this.childName(t, l), o.shift());\n                        }\n                    } catch (t) {\n                        e = { error: t };\n                    } finally {\n                        try {\n                            s && !s.done && (n = i.return) && n.call(i);\n                        } finally {\n                            if (e) throw e.error;\n                        }\n                    }\n                }\n                function c(t) {\n                    var e,\n                        n,\n                        o = v.connect[t].children,\n                        i = [];\n                    try {\n                        for (\n                            var s = r(o), a = s.next();\n                            !a.done;\n                            a = s.next()\n                        ) {\n                            var l = a.value,\n                                c = this.styles[t + \"-\" + l];\n                            if (!c) return void delete this.styles[t];\n                            i.push(c);\n                        }\n                    } catch (t) {\n                        e = { error: t };\n                    } finally {\n                        try {\n                            a && !a.done && (n = s.return) && n.call(s);\n                        } finally {\n                            if (e) throw e.error;\n                        }\n                    }\n                    i[3] === i[1] &&\n                        (i.pop(),\n                        i[2] === i[0] && (i.pop(), i[1] === i[0] && i.pop())),\n                        (this.styles[t] = i.join(\" \"));\n                }\n                function u(t) {\n                    var e, n;\n                    try {\n                        for (\n                            var o = r(v.connect[t].children), i = o.next();\n                            !i.done;\n                            i = o.next()\n                        ) {\n                            var s = i.value;\n                            this.setStyle(this.childName(t, s), this.styles[t]);\n                        }\n                    } catch (t) {\n                        e = { error: t };\n                    } finally {\n                        try {\n                            i && !i.done && (n = o.return) && n.call(o);\n                        } finally {\n                            if (e) throw e.error;\n                        }\n                    }\n                }\n                function p(t) {\n                    var e,\n                        i,\n                        s = o([], n(v.connect[t].children), !1),\n                        a = this.styles[this.childName(t, s.shift())];\n                    try {\n                        for (\n                            var l = r(s), c = l.next();\n                            !c.done;\n                            c = l.next()\n                        ) {\n                            var u = c.value;\n                            if (this.styles[this.childName(t, u)] !== a)\n                                return void delete this.styles[t];\n                        }\n                    } catch (t) {\n                        e = { error: t };\n                    } finally {\n                        try {\n                            c && !c.done && (i = l.return) && i.call(l);\n                        } finally {\n                            if (e) throw e.error;\n                        }\n                    }\n                    this.styles[t] = a;\n                }\n                var h =\n                        /^(?:[\\d.]+(?:[a-z]+)|thin|medium|thick|inherit|initial|unset)$/,\n                    f =\n                        /^(?:none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset|inherit|initial|unset)$/;\n                function d(t) {\n                    var e,\n                        n,\n                        o,\n                        i,\n                        s = { width: \"\", style: \"\", color: \"\" };\n                    try {\n                        for (\n                            var l = r(a(this.styles[t])), c = l.next();\n                            !c.done;\n                            c = l.next()\n                        ) {\n                            var u = c.value;\n                            u.match(h) && \"\" === s.width\n                                ? (s.width = u)\n                                : u.match(f) && \"\" === s.style\n                                  ? (s.style = u)\n                                  : (s.color = u);\n                        }\n                    } catch (t) {\n                        e = { error: t };\n                    } finally {\n                        try {\n                            c && !c.done && (n = l.return) && n.call(l);\n                        } finally {\n                            if (e) throw e.error;\n                        }\n                    }\n                    try {\n                        for (\n                            var p = r(v.connect[t].children), d = p.next();\n                            !d.done;\n                            d = p.next()\n                        ) {\n                            var m = d.value;\n                            this.setStyle(this.childName(t, m), s[m]);\n                        }\n                    } catch (t) {\n                        o = { error: t };\n                    } finally {\n                        try {\n                            d && !d.done && (i = p.return) && i.call(p);\n                        } finally {\n                            if (o) throw o.error;\n                        }\n                    }\n                }\n                function m(t) {\n                    var e,\n                        n,\n                        o = [];\n                    try {\n                        for (\n                            var i = r(v.connect[t].children), s = i.next();\n                            !s.done;\n                            s = i.next()\n                        ) {\n                            var a = s.value,\n                                l = this.styles[this.childName(t, a)];\n                            l && o.push(l);\n                        }\n                    } catch (t) {\n                        e = { error: t };\n                    } finally {\n                        try {\n                            s && !s.done && (n = i.return) && n.call(i);\n                        } finally {\n                            if (e) throw e.error;\n                        }\n                    }\n                    o.length\n                        ? (this.styles[t] = o.join(\" \"))\n                        : delete this.styles[t];\n                }\n                var y = {\n                    style: /^(?:normal|italic|oblique|inherit|initial|unset)$/,\n                    variant: new RegExp(\n                        \"^(?:\" +\n                            [\n                                \"normal|none\",\n                                \"inherit|initial|unset\",\n                                \"common-ligatures|no-common-ligatures\",\n                                \"discretionary-ligatures|no-discretionary-ligatures\",\n                                \"historical-ligatures|no-historical-ligatures\",\n                                \"contextual|no-contextual\",\n                                \"(?:stylistic|character-variant|swash|ornaments|annotation)\\\\([^)]*\\\\)\",\n                                \"small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps\",\n                                \"lining-nums|oldstyle-nums|proportional-nums|tabular-nums\",\n                                \"diagonal-fractions|stacked-fractions\",\n                                \"ordinal|slashed-zero\",\n                                \"jis78|jis83|jis90|jis04|simplified|traditional\",\n                                \"full-width|proportional-width\",\n                                \"ruby\",\n                            ].join(\"|\") +\n                            \")$\"\n                    ),\n                    weight: /^(?:normal|bold|bolder|lighter|[1-9]00|inherit|initial|unset)$/,\n                    stretch: new RegExp(\n                        \"^(?:\" +\n                            [\n                                \"normal\",\n                                \"(?:(?:ultra|extra|semi)-)?condensed\",\n                                \"(?:(?:semi|extra|ulta)-)?expanded\",\n                                \"inherit|initial|unset\",\n                            ].join(\"|\") +\n                            \")$\"\n                    ),\n                    size: new RegExp(\n                        \"^(?:\" +\n                            [\n                                \"xx-small|x-small|small|medium|large|x-large|xx-large|larger|smaller\",\n                                \"[d.]+%|[d.]+[a-z]+\",\n                                \"inherit|initial|unset\",\n                            ].join(\"|\") +\n                            \")(?:/(?:normal|[d.+](?:%|[a-z]+)?))?$\"\n                    ),\n                };\n                function g(t) {\n                    var e,\n                        o,\n                        i,\n                        s,\n                        l = a(this.styles[t]),\n                        c = {\n                            style: \"\",\n                            variant: [],\n                            weight: \"\",\n                            stretch: \"\",\n                            size: \"\",\n                            family: \"\",\n                            \"line-height\": \"\",\n                        };\n                    try {\n                        for (\n                            var u = r(l), p = u.next();\n                            !p.done;\n                            p = u.next()\n                        ) {\n                            var h = p.value;\n                            c.family = h;\n                            try {\n                                for (\n                                    var f = ((i = void 0), r(Object.keys(y))),\n                                        d = f.next();\n                                    !d.done;\n                                    d = f.next()\n                                ) {\n                                    var m = d.value;\n                                    if (\n                                        (Array.isArray(c[m]) || \"\" === c[m]) &&\n                                        h.match(y[m])\n                                    )\n                                        if (\"size\" === m) {\n                                            var g = n(h.split(/\\//), 2),\n                                                b = g[0],\n                                                _ = g[1];\n                                            (c[m] = b),\n                                                _ && (c[\"line-height\"] = _);\n                                        } else\n                                            \"\" === c.size &&\n                                                (Array.isArray(c[m])\n                                                    ? c[m].push(h)\n                                                    : (c[m] = h));\n                                }\n                            } catch (t) {\n                                i = { error: t };\n                            } finally {\n                                try {\n                                    d && !d.done && (s = f.return) && s.call(f);\n                                } finally {\n                                    if (i) throw i.error;\n                                }\n                            }\n                        }\n                    } catch (t) {\n                        e = { error: t };\n                    } finally {\n                        try {\n                            p && !p.done && (o = u.return) && o.call(u);\n                        } finally {\n                            if (e) throw e.error;\n                        }\n                    }\n                    !(function (t, e) {\n                        var n, o;\n                        try {\n                            for (\n                                var i = r(v.connect[t].children), s = i.next();\n                                !s.done;\n                                s = i.next()\n                            ) {\n                                var a = s.value,\n                                    l = this.childName(t, a);\n                                if (Array.isArray(e[a])) {\n                                    var c = e[a];\n                                    c.length && (this.styles[l] = c.join(\" \"));\n                                } else \"\" !== e[a] && (this.styles[l] = e[a]);\n                            }\n                        } catch (t) {\n                            n = { error: t };\n                        } finally {\n                            try {\n                                s && !s.done && (o = i.return) && o.call(i);\n                            } finally {\n                                if (n) throw n.error;\n                            }\n                        }\n                    })(t, c),\n                        delete this.styles[t];\n                }\n                function b(t) {}\n                var v = (function () {\n                    function t(t) {\n                        void 0 === t && (t = \"\"), this.parse(t);\n                    }\n                    return (\n                        Object.defineProperty(t.prototype, \"cssText\", {\n                            get: function () {\n                                var t,\n                                    e,\n                                    n = [];\n                                try {\n                                    for (\n                                        var o = r(Object.keys(this.styles)),\n                                            i = o.next();\n                                        !i.done;\n                                        i = o.next()\n                                    ) {\n                                        var s = i.value,\n                                            a = this.parentName(s);\n                                        this.styles[a] ||\n                                            n.push(\n                                                s + \": \" + this.styles[s] + \";\"\n                                            );\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        i &&\n                                            !i.done &&\n                                            (e = o.return) &&\n                                            e.call(o);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                                return n.join(\" \");\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (t.prototype.set = function (e, r) {\n                            for (\n                                e = this.normalizeName(e),\n                                    this.setStyle(e, r),\n                                    t.connect[e] &&\n                                        !t.connect[e].combine &&\n                                        (this.combineChildren(e),\n                                        delete this.styles[e]);\n                                e.match(/-/) &&\n                                ((e = this.parentName(e)), t.connect[e]);\n\n                            )\n                                t.connect[e].combine.call(this, e);\n                        }),\n                        (t.prototype.get = function (t) {\n                            return (\n                                (t = this.normalizeName(t)),\n                                this.styles.hasOwnProperty(t)\n                                    ? this.styles[t]\n                                    : \"\"\n                            );\n                        }),\n                        (t.prototype.setStyle = function (e, r) {\n                            (this.styles[e] = r),\n                                t.connect[e] &&\n                                    t.connect[e].children &&\n                                    t.connect[e].split.call(this, e),\n                                \"\" === r && delete this.styles[e];\n                        }),\n                        (t.prototype.combineChildren = function (e) {\n                            var n,\n                                o,\n                                i = this.parentName(e);\n                            try {\n                                for (\n                                    var s = r(t.connect[e].children),\n                                        a = s.next();\n                                    !a.done;\n                                    a = s.next()\n                                ) {\n                                    var l = a.value,\n                                        c = this.childName(i, l);\n                                    t.connect[c].combine.call(this, c);\n                                }\n                            } catch (t) {\n                                n = { error: t };\n                            } finally {\n                                try {\n                                    a && !a.done && (o = s.return) && o.call(s);\n                                } finally {\n                                    if (n) throw n.error;\n                                }\n                            }\n                        }),\n                        (t.prototype.parentName = function (t) {\n                            var e = t.replace(/-[^-]*$/, \"\");\n                            return t === e ? \"\" : e;\n                        }),\n                        (t.prototype.childName = function (e, r) {\n                            return r.match(/-/)\n                                ? r\n                                : (t.connect[e] &&\n                                      !t.connect[e].combine &&\n                                      ((r += e.replace(/.*-/, \"-\")),\n                                      (e = this.parentName(e))),\n                                  e + \"-\" + r);\n                        }),\n                        (t.prototype.normalizeName = function (t) {\n                            return t.replace(/[A-Z]/g, function (t) {\n                                return \"-\" + t.toLowerCase();\n                            });\n                        }),\n                        (t.prototype.parse = function (t) {\n                            void 0 === t && (t = \"\");\n                            var e = this.constructor.pattern;\n                            this.styles = {};\n                            for (\n                                var r = t.replace(e.comment, \"\").split(e.style);\n                                r.length > 1;\n\n                            ) {\n                                var o = n(r.splice(0, 3), 3),\n                                    i = o[0],\n                                    s = o[1],\n                                    a = o[2];\n                                if (i.match(/[^\\s\\n]/)) return;\n                                this.set(s, a);\n                            }\n                        }),\n                        (t.pattern = {\n                            style: /([-a-z]+)[\\s\\n]*:[\\s\\n]*((?:'[^']*'|\"[^\"]*\"|\\n|.)*?)[\\s\\n]*(?:;|$)/g,\n                            comment: /\\/\\*[^]*?\\*\\//g,\n                        }),\n                        (t.connect = {\n                            padding: { children: i, split: l, combine: c },\n                            border: { children: i, split: u, combine: p },\n                            \"border-top\": { children: s, split: d, combine: m },\n                            \"border-right\": {\n                                children: s,\n                                split: d,\n                                combine: m,\n                            },\n                            \"border-bottom\": {\n                                children: s,\n                                split: d,\n                                combine: m,\n                            },\n                            \"border-left\": {\n                                children: s,\n                                split: d,\n                                combine: m,\n                            },\n                            \"border-width\": {\n                                children: i,\n                                split: l,\n                                combine: null,\n                            },\n                            \"border-style\": {\n                                children: i,\n                                split: l,\n                                combine: null,\n                            },\n                            \"border-color\": {\n                                children: i,\n                                split: l,\n                                combine: null,\n                            },\n                            font: {\n                                children: [\n                                    \"style\",\n                                    \"variant\",\n                                    \"weight\",\n                                    \"stretch\",\n                                    \"line-height\",\n                                    \"size\",\n                                    \"family\",\n                                ],\n                                split: g,\n                                combine: b,\n                            },\n                        }),\n                        t\n                    );\n                })();\n                e.Styles = v;\n            },\n            6010: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.px =\n                        e.emRounded =\n                        e.em =\n                        e.percent =\n                        e.length2em =\n                        e.MATHSPACE =\n                        e.RELUNITS =\n                        e.UNITS =\n                        e.BIGDIMEN =\n                            void 0),\n                    (e.BIGDIMEN = 1e6),\n                    (e.UNITS = { px: 1, in: 96, cm: 96 / 2.54, mm: 96 / 25.4 }),\n                    (e.RELUNITS = {\n                        em: 1,\n                        ex: 0.431,\n                        pt: 0.1,\n                        pc: 1.2,\n                        mu: 1 / 18,\n                    }),\n                    (e.MATHSPACE = {\n                        veryverythinmathspace: 1 / 18,\n                        verythinmathspace: 2 / 18,\n                        thinmathspace: 3 / 18,\n                        mediummathspace: 4 / 18,\n                        thickmathspace: 5 / 18,\n                        verythickmathspace: 6 / 18,\n                        veryverythickmathspace: 7 / 18,\n                        negativeveryverythinmathspace: -1 / 18,\n                        negativeverythinmathspace: -2 / 18,\n                        negativethinmathspace: -3 / 18,\n                        negativemediummathspace: -4 / 18,\n                        negativethickmathspace: -5 / 18,\n                        negativeverythickmathspace: -6 / 18,\n                        negativeveryverythickmathspace: -7 / 18,\n                        thin: 0.04,\n                        medium: 0.06,\n                        thick: 0.1,\n                        normal: 1,\n                        big: 2,\n                        small: 1 / Math.sqrt(2),\n                        infinity: e.BIGDIMEN,\n                    }),\n                    (e.length2em = function (t, r, n, o) {\n                        if (\n                            (void 0 === r && (r = 0),\n                            void 0 === n && (n = 1),\n                            void 0 === o && (o = 16),\n                            \"string\" != typeof t && (t = String(t)),\n                            \"\" === t || null == t)\n                        )\n                            return r;\n                        if (e.MATHSPACE[t]) return e.MATHSPACE[t];\n                        var i = t.match(\n                            /^\\s*([-+]?(?:\\.\\d+|\\d+(?:\\.\\d*)?))?(pt|em|ex|mu|px|pc|in|mm|cm|%)?/\n                        );\n                        if (!i) return r;\n                        var s = parseFloat(i[1] || \"1\"),\n                            a = i[2];\n                        return e.UNITS.hasOwnProperty(a)\n                            ? (s * e.UNITS[a]) / o / n\n                            : e.RELUNITS.hasOwnProperty(a)\n                              ? s * e.RELUNITS[a]\n                              : \"%\" === a\n                                ? (s / 100) * r\n                                : s * r;\n                    }),\n                    (e.percent = function (t) {\n                        return (100 * t).toFixed(1).replace(/\\.?0+$/, \"\") + \"%\";\n                    }),\n                    (e.em = function (t) {\n                        return Math.abs(t) < 0.001\n                            ? \"0\"\n                            : t.toFixed(3).replace(/\\.?0+$/, \"\") + \"em\";\n                    }),\n                    (e.emRounded = function (t, e) {\n                        return (\n                            void 0 === e && (e = 16),\n                            (t = (Math.round(t * e) + 0.05) / e),\n                            Math.abs(t) < 0.001\n                                ? \"0em\"\n                                : t.toFixed(3).replace(/\\.?0+$/, \"\") + \"em\"\n                        );\n                    }),\n                    (e.px = function (t, r, n) {\n                        return (\n                            void 0 === r && (r = -e.BIGDIMEN),\n                            void 0 === n && (n = 16),\n                            (t *= n),\n                            r && t < r && (t = r),\n                            Math.abs(t) < 0.1\n                                ? \"0\"\n                                : t.toFixed(1).replace(/\\.0$/, \"\") + \"px\"\n                        );\n                    });\n            },\n            7875: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.max = e.sum = void 0),\n                    (e.sum = function (t) {\n                        return t.reduce(function (t, e) {\n                            return t + e;\n                        }, 0);\n                    }),\n                    (e.max = function (t) {\n                        return t.reduce(function (t, e) {\n                            return Math.max(t, e);\n                        }, 0);\n                    });\n            },\n            505: function (t, e) {\n                var r =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    n =\n                        (this && this.__spreadArray) ||\n                        function (t, e, r) {\n                            if (r || 2 === arguments.length)\n                                for (var n, o = 0, i = e.length; o < i; o++)\n                                    (!n && o in e) ||\n                                        (n ||\n                                            (n = Array.prototype.slice.call(\n                                                e,\n                                                0,\n                                                o\n                                            )),\n                                        (n[o] = e[o]));\n                            return t.concat(n || Array.prototype.slice.call(e));\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.split =\n                        e.isPercent =\n                        e.unicodeString =\n                        e.unicodeChars =\n                        e.quotePattern =\n                        e.sortLength =\n                            void 0),\n                    (e.sortLength = function (t, e) {\n                        return t.length !== e.length\n                            ? e.length - t.length\n                            : t === e\n                              ? 0\n                              : t < e\n                                ? -1\n                                : 1;\n                    }),\n                    (e.quotePattern = function (t) {\n                        return t.replace(/([\\^$(){}+*?\\-|\\[\\]\\:\\\\])/g, \"\\\\$1\");\n                    }),\n                    (e.unicodeChars = function (t) {\n                        return Array.from(t).map(function (t) {\n                            return t.codePointAt(0);\n                        });\n                    }),\n                    (e.unicodeString = function (t) {\n                        return String.fromCodePoint.apply(\n                            String,\n                            n([], r(t), !1)\n                        );\n                    }),\n                    (e.isPercent = function (t) {\n                        return !!t.match(/%\\s*$/);\n                    }),\n                    (e.split = function (t) {\n                        return t.trim().split(/\\s+/);\n                    });\n            },\n            9329: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractEntry = void 0);\n                var i = r(9328),\n                    s = r(2165),\n                    a = (function (t) {\n                        function e(e, r) {\n                            var n = t.call(this) || this;\n                            return (\n                                (n._menu = e),\n                                (n._type = r),\n                                (n.className = s.HtmlClasses.MENUITEM),\n                                (n.role = \"menuitem\"),\n                                (n.hidden = !1),\n                                n\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"menu\", {\n                                get: function () {\n                                    return this._menu;\n                                },\n                                set: function (t) {\n                                    this._menu = t;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"type\", {\n                                get: function () {\n                                    return this._type;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.hide = function () {\n                                (this.hidden = !0), this.menu.generateMenu();\n                            }),\n                            (e.prototype.show = function () {\n                                (this.hidden = !1), this.menu.generateMenu();\n                            }),\n                            (e.prototype.isHidden = function () {\n                                return this.hidden;\n                            }),\n                            e\n                        );\n                    })(i.MenuElement);\n                e.AbstractEntry = a;\n            },\n            1340: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractItem = void 0);\n                var s = r(9329),\n                    a = r(2556),\n                    l = r(2165),\n                    c = (function (t) {\n                        function e(e, r, n, o) {\n                            var i = t.call(this, e, r) || this;\n                            return (\n                                (i._content = n),\n                                (i.disabled = !1),\n                                (i.callbacks = []),\n                                (i._id = o || n),\n                                i\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"content\", {\n                                get: function () {\n                                    return this._content;\n                                },\n                                set: function (t) {\n                                    (this._content = t),\n                                        this.generateHtml(),\n                                        this.menu && this.menu.generateHtml();\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"id\", {\n                                get: function () {\n                                    return this._id;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.press = function () {\n                                this.disabled ||\n                                    (this.executeAction(),\n                                    this.executeCallbacks_());\n                            }),\n                            (e.prototype.executeAction = function () {}),\n                            (e.prototype.registerCallback = function (t) {\n                                -1 === this.callbacks.indexOf(t) &&\n                                    this.callbacks.push(t);\n                            }),\n                            (e.prototype.unregisterCallback = function (t) {\n                                var e = this.callbacks.indexOf(t);\n                                -1 !== e && this.callbacks.splice(e, 1);\n                            }),\n                            (e.prototype.mousedown = function (t) {\n                                this.press(), this.stop(t);\n                            }),\n                            (e.prototype.mouseover = function (t) {\n                                this.focus(), this.stop(t);\n                            }),\n                            (e.prototype.mouseout = function (t) {\n                                this.deactivate(), this.stop(t);\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                t.prototype.generateHtml.call(this);\n                                var e = this.html;\n                                e.setAttribute(\"aria-disabled\", \"false\"),\n                                    (e.textContent = this.content);\n                            }),\n                            (e.prototype.activate = function () {\n                                this.disabled ||\n                                    this.html.classList.add(\n                                        l.HtmlClasses.MENUACTIVE\n                                    );\n                            }),\n                            (e.prototype.deactivate = function () {\n                                this.html.classList.remove(\n                                    l.HtmlClasses.MENUACTIVE\n                                );\n                            }),\n                            (e.prototype.focus = function () {\n                                (this.menu.focused = this),\n                                    t.prototype.focus.call(this),\n                                    this.activate();\n                            }),\n                            (e.prototype.unfocus = function () {\n                                this.deactivate(),\n                                    t.prototype.unfocus.call(this);\n                            }),\n                            (e.prototype.escape = function (t) {\n                                a.MenuUtil.close(this);\n                            }),\n                            (e.prototype.up = function (t) {\n                                this.menu.up(t);\n                            }),\n                            (e.prototype.down = function (t) {\n                                this.menu.down(t);\n                            }),\n                            (e.prototype.left = function (t) {\n                                this.menu.left(t);\n                            }),\n                            (e.prototype.right = function (t) {\n                                this.menu.right(t);\n                            }),\n                            (e.prototype.space = function (t) {\n                                this.press();\n                            }),\n                            (e.prototype.disable = function () {\n                                this.disabled = !0;\n                                var t = this.html;\n                                t.classList.add(l.HtmlClasses.MENUDISABLED),\n                                    t.setAttribute(\"aria-disabled\", \"true\");\n                            }),\n                            (e.prototype.enable = function () {\n                                this.disabled = !1;\n                                var t = this.html;\n                                t.classList.remove(l.HtmlClasses.MENUDISABLED),\n                                    t.removeAttribute(\"aria-disabled\");\n                            }),\n                            (e.prototype.executeCallbacks_ = function () {\n                                var t, e;\n                                try {\n                                    for (\n                                        var r = i(this.callbacks), n = r.next();\n                                        !n.done;\n                                        n = r.next()\n                                    ) {\n                                        var o = n.value;\n                                        try {\n                                            o(this);\n                                        } catch (t) {\n                                            a.MenuUtil.error(\n                                                t,\n                                                \"Callback for menu entry \" +\n                                                    this.id +\n                                                    \" failed.\"\n                                            );\n                                        }\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        n &&\n                                            !n.done &&\n                                            (e = r.return) &&\n                                            e.call(r);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            e\n                        );\n                    })(s.AbstractEntry);\n                e.AbstractItem = c;\n            },\n            1484: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractMenu = void 0);\n                var s = r(8372),\n                    a = r(1340),\n                    l = r(2165),\n                    c = r(6186),\n                    u = (function (t) {\n                        function e() {\n                            var e =\n                                (null !== t && t.apply(this, arguments)) ||\n                                this;\n                            return (\n                                (e.className = l.HtmlClasses.CONTEXTMENU),\n                                (e.role = \"menu\"),\n                                (e._items = []),\n                                (e._baseMenu = null),\n                                e\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            Object.defineProperty(e.prototype, \"baseMenu\", {\n                                get: function () {\n                                    return this._baseMenu;\n                                },\n                                set: function (t) {\n                                    this._baseMenu = t;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"items\", {\n                                get: function () {\n                                    return this._items;\n                                },\n                                set: function (t) {\n                                    this._items = t;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"pool\", {\n                                get: function () {\n                                    return this.variablePool;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"focused\", {\n                                get: function () {\n                                    return this._focused;\n                                },\n                                set: function (t) {\n                                    if (this._focused !== t) {\n                                        this._focused || this.unfocus();\n                                        var e = this._focused;\n                                        (this._focused = t), e && e.unfocus();\n                                    }\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.up = function (t) {\n                                var e = this.items.filter(function (t) {\n                                    return (\n                                        t instanceof a.AbstractItem &&\n                                        !t.isHidden()\n                                    );\n                                });\n                                if (0 !== e.length)\n                                    if (this.focused) {\n                                        var r = e.indexOf(this.focused);\n                                        -1 !== r &&\n                                            e[\n                                                (r = r ? --r : e.length - 1)\n                                            ].focus();\n                                    } else e[e.length - 1].focus();\n                            }),\n                            (e.prototype.down = function (t) {\n                                var e = this.items.filter(function (t) {\n                                    return (\n                                        t instanceof a.AbstractItem &&\n                                        !t.isHidden()\n                                    );\n                                });\n                                if (0 !== e.length)\n                                    if (this.focused) {\n                                        var r = e.indexOf(this.focused);\n                                        -1 !== r &&\n                                            e[\n                                                (r = ++r === e.length ? 0 : r)\n                                            ].focus();\n                                    } else e[0].focus();\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                t.prototype.generateHtml.call(this),\n                                    this.generateMenu();\n                            }),\n                            (e.prototype.generateMenu = function () {\n                                var t,\n                                    e,\n                                    r = this.html;\n                                r.classList.add(l.HtmlClasses.MENU);\n                                try {\n                                    for (\n                                        var n = i(this.items), o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var s = o.value;\n                                        if (s.isHidden()) {\n                                            var a = s.html;\n                                            a.parentNode &&\n                                                a.parentNode.removeChild(a);\n                                        } else r.appendChild(s.html);\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (e = n.return) &&\n                                            e.call(n);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.post = function (e, r) {\n                                this.variablePool.update(),\n                                    t.prototype.post.call(this, e, r);\n                            }),\n                            (e.prototype.unpostSubmenus = function () {\n                                var t,\n                                    e,\n                                    r = this.items.filter(function (t) {\n                                        return t instanceof c.Submenu;\n                                    });\n                                try {\n                                    for (\n                                        var n = i(r), o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var s = o.value;\n                                        s.submenu.unpost(),\n                                            s !== this.focused && s.unfocus();\n                                    }\n                                } catch (e) {\n                                    t = { error: e };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (e = n.return) &&\n                                            e.call(n);\n                                    } finally {\n                                        if (t) throw t.error;\n                                    }\n                                }\n                            }),\n                            (e.prototype.unpost = function () {\n                                t.prototype.unpost.call(this),\n                                    this.unpostSubmenus(),\n                                    (this.focused = null);\n                            }),\n                            (e.prototype.find = function (t) {\n                                var e, r;\n                                try {\n                                    for (\n                                        var n = i(this.items), o = n.next();\n                                        !o.done;\n                                        o = n.next()\n                                    ) {\n                                        var s = o.value;\n                                        if (\"rule\" !== s.type) {\n                                            if (s.id === t) return s;\n                                            if (\"submenu\" === s.type) {\n                                                var a = s.submenu.find(t);\n                                                if (a) return a;\n                                            }\n                                        }\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        o &&\n                                            !o.done &&\n                                            (r = n.return) &&\n                                            r.call(n);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                return null;\n                            }),\n                            e\n                        );\n                    })(s.AbstractPostable);\n                e.AbstractMenu = u;\n            },\n            2868: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractNavigatable = void 0);\n                var n = r(3205),\n                    o = r(8853),\n                    i = (function () {\n                        function t() {\n                            this.bubble = !1;\n                        }\n                        return (\n                            (t.prototype.bubbleKey = function () {\n                                this.bubble = !0;\n                            }),\n                            (t.prototype.keydown = function (t) {\n                                switch (t.keyCode) {\n                                    case n.KEY.ESCAPE:\n                                        this.escape(t);\n                                        break;\n                                    case n.KEY.RIGHT:\n                                        this.right(t);\n                                        break;\n                                    case n.KEY.LEFT:\n                                        this.left(t);\n                                        break;\n                                    case n.KEY.UP:\n                                        this.up(t);\n                                        break;\n                                    case n.KEY.DOWN:\n                                        this.down(t);\n                                        break;\n                                    case n.KEY.RETURN:\n                                    case n.KEY.SPACE:\n                                        this.space(t);\n                                        break;\n                                    default:\n                                        return;\n                                }\n                                this.bubble ? (this.bubble = !1) : this.stop(t);\n                            }),\n                            (t.prototype.escape = function (t) {}),\n                            (t.prototype.space = function (t) {}),\n                            (t.prototype.left = function (t) {}),\n                            (t.prototype.right = function (t) {}),\n                            (t.prototype.up = function (t) {}),\n                            (t.prototype.down = function (t) {}),\n                            (t.prototype.stop = function (t) {\n                                t &&\n                                    (t.stopPropagation(),\n                                    t.preventDefault(),\n                                    (t.cancelBubble = !0));\n                            }),\n                            (t.prototype.mousedown = function (t) {\n                                return this.stop(t);\n                            }),\n                            (t.prototype.mouseup = function (t) {\n                                return this.stop(t);\n                            }),\n                            (t.prototype.mouseover = function (t) {\n                                return this.stop(t);\n                            }),\n                            (t.prototype.mouseout = function (t) {\n                                return this.stop(t);\n                            }),\n                            (t.prototype.click = function (t) {\n                                return this.stop(t);\n                            }),\n                            (t.prototype.addEvents = function (t) {\n                                t.addEventListener(\n                                    o.MOUSE.DOWN,\n                                    this.mousedown.bind(this)\n                                ),\n                                    t.addEventListener(\n                                        o.MOUSE.UP,\n                                        this.mouseup.bind(this)\n                                    ),\n                                    t.addEventListener(\n                                        o.MOUSE.OVER,\n                                        this.mouseover.bind(this)\n                                    ),\n                                    t.addEventListener(\n                                        o.MOUSE.OUT,\n                                        this.mouseout.bind(this)\n                                    ),\n                                    t.addEventListener(\n                                        o.MOUSE.CLICK,\n                                        this.click.bind(this)\n                                    ),\n                                    t.addEventListener(\n                                        \"keydown\",\n                                        this.keydown.bind(this)\n                                    ),\n                                    t.addEventListener(\n                                        \"dragstart\",\n                                        this.stop.bind(this)\n                                    ),\n                                    t.addEventListener(\n                                        o.MOUSE.SELECTSTART,\n                                        this.stop.bind(this)\n                                    ),\n                                    t.addEventListener(\n                                        \"contextmenu\",\n                                        this.stop.bind(this)\n                                    ),\n                                    t.addEventListener(\n                                        o.MOUSE.DBLCLICK,\n                                        this.stop.bind(this)\n                                    );\n                            }),\n                            t\n                        );\n                    })();\n                e.AbstractNavigatable = i;\n            },\n            8372: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractPostable = void 0);\n                var i = (function (t) {\n                    function e() {\n                        var e =\n                            (null !== t && t.apply(this, arguments)) || this;\n                        return (e.posted = !1), e;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.isPosted = function () {\n                            return this.posted;\n                        }),\n                        (e.prototype.post = function (t, e) {\n                            this.posted ||\n                                (void 0 !== t &&\n                                    void 0 !== e &&\n                                    this.html.setAttribute(\n                                        \"style\",\n                                        \"left: \" + t + \"px; top: \" + e + \"px;\"\n                                    ),\n                                this.display(),\n                                (this.posted = !0));\n                        }),\n                        (e.prototype.unpost = function () {\n                            if (this.posted) {\n                                var t = this.html;\n                                t.parentNode && t.parentNode.removeChild(t),\n                                    (this.posted = !1);\n                            }\n                        }),\n                        e\n                    );\n                })(r(9328).MenuElement);\n                e.AbstractPostable = i;\n            },\n            6765: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractVariableItem = void 0);\n                var i = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.generateHtml = function () {\n                            t.prototype.generateHtml.call(this);\n                            var e = this.html;\n                            this.span || this.generateSpan(),\n                                e.appendChild(this.span),\n                                this.update();\n                        }),\n                        (e.prototype.register = function () {\n                            this.variable.register(this);\n                        }),\n                        (e.prototype.unregister = function () {\n                            this.variable.unregister(this);\n                        }),\n                        (e.prototype.update = function () {\n                            this.updateAria(), this.span && this.updateSpan();\n                        }),\n                        e\n                    );\n                })(r(1340).AbstractItem);\n                e.AbstractVariableItem = i;\n            },\n            5179: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CloseButton = void 0);\n                var i = r(8372),\n                    s = r(2165),\n                    a = (function (t) {\n                        function e(e) {\n                            var r = t.call(this) || this;\n                            return (\n                                (r.element = e),\n                                (r.className = s.HtmlClasses.MENUCLOSE),\n                                (r.role = \"button\"),\n                                r\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.generateHtml = function () {\n                                var t = document.createElement(\"span\");\n                                t.classList.add(this.className),\n                                    t.setAttribute(\"role\", this.role),\n                                    t.setAttribute(\"tabindex\", \"0\");\n                                var e = document.createElement(\"span\");\n                                (e.textContent = \"\\xd7\"),\n                                    t.appendChild(e),\n                                    (this.html = t);\n                            }),\n                            (e.prototype.display = function () {}),\n                            (e.prototype.unpost = function () {\n                                t.prototype.unpost.call(this),\n                                    this.element.unpost();\n                            }),\n                            (e.prototype.keydown = function (e) {\n                                this.bubbleKey(),\n                                    t.prototype.keydown.call(this, e);\n                            }),\n                            (e.prototype.space = function (t) {\n                                this.unpost(), this.stop(t);\n                            }),\n                            (e.prototype.mousedown = function (t) {\n                                this.unpost(), this.stop(t);\n                            }),\n                            e\n                        );\n                    })(i.AbstractPostable);\n                e.CloseButton = a;\n            },\n            5073: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.ContextMenu = void 0);\n                var i = r(1484),\n                    s = r(2165),\n                    a = r(1932),\n                    l = r(2358),\n                    c = (function (t) {\n                        function e(e) {\n                            var r = t.call(this) || this;\n                            return (\n                                (r.factory = e),\n                                (r.id = \"\"),\n                                (r.moving = !1),\n                                (r._store = new a.MenuStore(r)),\n                                (r.widgets = []),\n                                (r.variablePool = new l.VariablePool()),\n                                r\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.fromJson = function (t, e) {\n                                var r = e.pool,\n                                    n = e.items,\n                                    o = e.id,\n                                    i = void 0 === o ? \"\" : o,\n                                    s = new this(t);\n                                s.id = i;\n                                var a = t.get(\"variable\");\n                                r.forEach(function (e) {\n                                    return a(t, e, s.pool);\n                                });\n                                var l = t.get(\"items\")(t, n, s);\n                                return (s.items = l), s;\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                this.isPosted() && this.unpost(),\n                                    t.prototype.generateHtml.call(this),\n                                    (this._frame =\n                                        document.createElement(\"div\")),\n                                    this._frame.classList.add(\n                                        s.HtmlClasses.MENUFRAME\n                                    );\n                                var e =\n                                    \"left: 0px; top: 0px; z-index: 200; width: 100%; height: 100%; border: 0px; padding: 0px; margin: 0px;\";\n                                this._frame.setAttribute(\n                                    \"style\",\n                                    \"position: absolute; \" + e\n                                );\n                                var r = document.createElement(\"div\");\n                                r.setAttribute(\n                                    \"style\",\n                                    \"position: fixed; \" + e\n                                ),\n                                    this._frame.appendChild(r),\n                                    r.addEventListener(\n                                        \"mousedown\",\n                                        function (t) {\n                                            this.unpost(),\n                                                this.unpostWidgets(),\n                                                this.stop(t);\n                                        }.bind(this)\n                                    );\n                            }),\n                            (e.prototype.display = function () {\n                                document.body.appendChild(this.frame),\n                                    this.frame.appendChild(this.html),\n                                    this.focus();\n                            }),\n                            (e.prototype.escape = function (t) {\n                                this.unpost(), this.unpostWidgets();\n                            }),\n                            (e.prototype.unpost = function () {\n                                if (\n                                    (t.prototype.unpost.call(this),\n                                    !(this.widgets.length > 0))\n                                ) {\n                                    this.frame.parentNode.removeChild(\n                                        this.frame\n                                    );\n                                    var e = this.store;\n                                    this.moving || e.insertTaborder(),\n                                        e.active.focus();\n                                }\n                            }),\n                            (e.prototype.left = function (t) {\n                                this.move_(this.store.previous());\n                            }),\n                            (e.prototype.right = function (t) {\n                                this.move_(this.store.next());\n                            }),\n                            Object.defineProperty(e.prototype, \"frame\", {\n                                get: function () {\n                                    return this._frame;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            Object.defineProperty(e.prototype, \"store\", {\n                                get: function () {\n                                    return this._store;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.post = function (e, r) {\n                                if (void 0 !== r)\n                                    return (\n                                        this.moving ||\n                                            this.store.removeTaborder(),\n                                        void t.prototype.post.call(this, e, r)\n                                    );\n                                var n,\n                                    o,\n                                    i,\n                                    s = e;\n                                if (\n                                    (s instanceof Event\n                                        ? ((n = s.target), this.stop(s))\n                                        : (n = s),\n                                    s instanceof MouseEvent &&\n                                        ((o = s.pageX),\n                                        (i = s.pageY),\n                                        o ||\n                                            i ||\n                                            !s.clientX ||\n                                            ((o =\n                                                s.clientX +\n                                                document.body.scrollLeft +\n                                                document.documentElement\n                                                    .scrollLeft),\n                                            (i =\n                                                s.clientY +\n                                                document.body.scrollTop +\n                                                document.documentElement\n                                                    .scrollTop))),\n                                    !o && !i && n)\n                                ) {\n                                    var a =\n                                            window.pageXOffset ||\n                                            document.documentElement.scrollLeft,\n                                        l =\n                                            window.pageYOffset ||\n                                            document.documentElement.scrollTop,\n                                        c = n.getBoundingClientRect();\n                                    (o = (c.right + c.left) / 2 + a),\n                                        (i = (c.bottom + c.top) / 2 + l);\n                                }\n                                (this.store.active = n),\n                                    (this.anchor = this.store.active);\n                                var u = this.html;\n                                o + u.offsetWidth >\n                                    document.body.offsetWidth - 5 &&\n                                    (o =\n                                        document.body.offsetWidth -\n                                        u.offsetWidth -\n                                        5),\n                                    this.post(o, i);\n                            }),\n                            (e.prototype.registerWidget = function (t) {\n                                this.widgets.push(t);\n                            }),\n                            (e.prototype.unregisterWidget = function (t) {\n                                var e = this.widgets.indexOf(t);\n                                e > -1 && this.widgets.splice(e, 1),\n                                    0 === this.widgets.length && this.unpost();\n                            }),\n                            (e.prototype.unpostWidgets = function () {\n                                this.widgets.forEach(function (t) {\n                                    return t.unpost();\n                                });\n                            }),\n                            (e.prototype.toJson = function () {\n                                return { type: \"\" };\n                            }),\n                            (e.prototype.move_ = function (t) {\n                                this.anchor &&\n                                    t !== this.anchor &&\n                                    ((this.moving = !0),\n                                    this.unpost(),\n                                    this.post(t),\n                                    (this.moving = !1));\n                            }),\n                            e\n                        );\n                    })(i.AbstractMenu);\n                e.ContextMenu = c;\n            },\n            7309: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CssStyles = void 0);\n                var n = r(2165);\n                !(function (t) {\n                    function e(t) {\n                        return \".\" + (n.HtmlClasses[t] || t);\n                    }\n                    var r = {};\n                    (r[e(\"INFOCLOSE\")] = \"{  top:.2em; right:.2em;}\"),\n                        (r[e(\"INFOCONTENT\")] =\n                            \"{  overflow:auto; text-align:left; font-size:80%;  padding:.4em .6em; border:1px inset; margin:1em 0px;  max-height:20em; max-width:30em; background-color:#EEEEEE;  white-space:normal;}\"),\n                        (r[e(\"INFO\") + e(\"MOUSEPOST\")] = \"{outline:none;}\"),\n                        (r[e(\"INFO\")] =\n                            '{  position:fixed; left:50%; width:auto; text-align:center;  border:3px outset; padding:1em 2em; background-color:#DDDDDD;  color:black;  cursor:default; font-family:message-box; font-size:120%;  font-style:normal; text-indent:0; text-transform:none;  line-height:normal; letter-spacing:normal; word-spacing:normal;  word-wrap:normal; white-space:nowrap; float:none; z-index:201;  border-radius: 15px;                     /* Opera 10.5 and IE9 */  -webkit-border-radius:15px;               /* Safari and Chrome */  -moz-border-radius:15px;                  /* Firefox */  -khtml-border-radius:15px;                /* Konqueror */  box-shadow:0px 10px 20px #808080;         /* Opera 10.5 and IE9 */  -webkit-box-shadow:0px 10px 20px #808080; /* Safari 3 & Chrome */  -moz-box-shadow:0px 10px 20px #808080;    /* Forefox 3.5 */  -khtml-box-shadow:0px 10px 20px #808080;  /* Konqueror */  filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color=\"gray\", Positive=\"true\"); /* IE */}');\n                    var o = {};\n                    (o[e(\"MENU\")] =\n                        \"{  position:absolute;  background-color:white;  color:black;  width:auto; padding:5px 0px;  border:1px solid #CCCCCC; margin:0; cursor:default;  font: menu; text-align:left; text-indent:0; text-transform:none;  line-height:normal; letter-spacing:normal; word-spacing:normal;  word-wrap:normal; white-space:nowrap; float:none; z-index:201;  border-radius: 5px;                     /* Opera 10.5 and IE9 */  -webkit-border-radius: 5px;             /* Safari and Chrome */  -moz-border-radius: 5px;                /* Firefox */  -khtml-border-radius: 5px;              /* Konqueror */  box-shadow:0px 10px 20px #808080;         /* Opera 10.5 and IE9 */  -webkit-box-shadow:0px 10px 20px #808080; /* Safari 3 & Chrome */  -moz-box-shadow:0px 10px 20px #808080;    /* Forefox 3.5 */  -khtml-box-shadow:0px 10px 20px #808080;  /* Konqueror */}\"),\n                        (o[e(\"MENUITEM\")] =\n                            \"{  padding: 1px 2em;  background:transparent;}\"),\n                        (o[e(\"MENUARROW\")] =\n                            \"{  position:absolute; right:.5em; padding-top:.25em; color:#666666;  font-family: null; font-size: .75em}\"),\n                        (o[e(\"MENUACTIVE\") + \" \" + e(\"MENUARROW\")] =\n                            \"{color:white}\"),\n                        (o[e(\"MENUARROW\") + e(\"RTL\")] =\n                            \"{left:.5em; right:auto}\"),\n                        (o[e(\"MENUCHECK\")] =\n                            \"{  position:absolute; left:.7em;  font-family: null}\"),\n                        (o[e(\"MENUCHECK\") + e(\"RTL\")] =\n                            \"{ right:.7em; left:auto }\"),\n                        (o[e(\"MENURADIOCHECK\")] =\n                            \"{  position:absolute; left: .7em;}\"),\n                        (o[e(\"MENURADIOCHECK\") + e(\"RTL\")] =\n                            \"{  right: .7em; left:auto}\"),\n                        (o[e(\"MENUINPUTBOX\")] =\n                            \"{  padding-left: 1em; right:.5em; color:#666666;  font-family: null;}\"),\n                        (o[e(\"MENUINPUTBOX\") + e(\"RTL\")] = \"{  left: .1em;}\"),\n                        (o[e(\"MENUCOMBOBOX\")] =\n                            \"{  left:.1em; padding-bottom:.5em;}\"),\n                        (o[e(\"MENUSLIDER\")] = \"{  left: .1em;}\"),\n                        (o[e(\"SLIDERVALUE\")] =\n                            \"{  position:absolute; right:.1em; padding-top:.25em; color:#333333;  font-size: .75em}\"),\n                        (o[e(\"SLIDERBAR\")] =\n                            \"{  outline: none; background: #d3d3d3}\"),\n                        (o[e(\"MENULABEL\")] =\n                            \"{  padding: 1px 2em 3px 1.33em;  font-style:italic}\"),\n                        (o[e(\"MENURULE\")] =\n                            \"{  border-top: 1px solid #DDDDDD;  margin: 4px 3px;}\"),\n                        (o[e(\"MENUDISABLED\")] = \"{  color:GrayText}\"),\n                        (o[e(\"MENUACTIVE\")] =\n                            \"{  background-color: #606872;  color: white;}\"),\n                        (o[e(\"MENUDISABLED\") + \":focus\"] =\n                            \"{  background-color: #E8E8E8}\"),\n                        (o[e(\"MENULABEL\") + \":focus\"] =\n                            \"{  background-color: #E8E8E8}\"),\n                        (o[e(\"CONTEXTMENU\") + \":focus\"] = \"{  outline:none}\"),\n                        (o[e(\"CONTEXTMENU\") + \" \" + e(\"MENUITEM\") + \":focus\"] =\n                            \"{  outline:none}\"),\n                        (o[e(\"SELECTIONMENU\")] =\n                            \"{  position:relative; float:left;  border-bottom: none; -webkit-box-shadow:none; -webkit-border-radius:0px; }\"),\n                        (o[e(\"SELECTIONITEM\")] = \"{  padding-right: 1em;}\"),\n                        (o[e(\"SELECTION\")] = \"{  right: 40%; width:50%; }\"),\n                        (o[e(\"SELECTIONBOX\")] =\n                            \"{  padding: 0em; max-height:20em; max-width: none;  background-color:#FFFFFF;}\"),\n                        (o[e(\"SELECTIONDIVIDER\")] =\n                            \"{  clear: both; border-top: 2px solid #000000;}\"),\n                        (o[e(\"MENU\") + \" \" + e(\"MENUCLOSE\")] =\n                            \"{  top:-10px; left:-10px}\");\n                    var i = {};\n                    (i[e(\"MENUCLOSE\")] =\n                        '{  position:absolute;  cursor:pointer;  display:inline-block;  border:2px solid #AAA;  border-radius:18px;  -webkit-border-radius: 18px;             /* Safari and Chrome */  -moz-border-radius: 18px;                /* Firefox */  -khtml-border-radius: 18px;              /* Konqueror */  font-family: \"Courier New\", Courier;  font-size:24px;  color:#F0F0F0}'),\n                        (i[e(\"MENUCLOSE\") + \" span\"] =\n                            \"{  display:block; background-color:#AAA; border:1.5px solid;  border-radius:18px;  -webkit-border-radius: 18px;             /* Safari and Chrome */  -moz-border-radius: 18px;                /* Firefox */  -khtml-border-radius: 18px;              /* Konqueror */  line-height:0;  padding:8px 0 6px     /* may need to be browser-specific */}\"),\n                        (i[e(\"MENUCLOSE\") + \":hover\"] =\n                            \"{  color:white!important;  border:2px solid #CCC!important}\"),\n                        (i[e(\"MENUCLOSE\") + \":hover span\"] =\n                            \"{  background-color:#CCC!important}\"),\n                        (i[e(\"MENUCLOSE\") + \":hover:focus\"] =\n                            \"{  outline:none}\");\n                    var s = !1,\n                        a = !1,\n                        l = !1;\n                    function c(t) {\n                        l || (u(i, t), (l = !0));\n                    }\n                    function u(t, e) {\n                        var r = e || document,\n                            n = r.createElement(\"style\");\n                        n.type = \"text/css\";\n                        var o = \"\";\n                        for (var i in t)\n                            (o += i), (o += \" \"), (o += t[i]), (o += \"\\n\");\n                        (n.innerHTML = o), r.head.appendChild(n);\n                    }\n                    (t.addMenuStyles = function (t) {\n                        a || (u(o, t), (a = !0), c(t));\n                    }),\n                        (t.addInfoStyles = function (t) {\n                            s || (u(r, t), (s = !0), c(t));\n                        });\n                })(e.CssStyles || (e.CssStyles = {}));\n            },\n            2165: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.HtmlAttrs = e.HtmlClasses = void 0);\n                function r(t) {\n                    return \"CtxtMenu_\" + t;\n                }\n                function n(t) {\n                    return r(t);\n                }\n                function o(t) {\n                    return r(t);\n                }\n                (e.HtmlClasses = {\n                    ATTACHED: n(\"Attached\"),\n                    CONTEXTMENU: n(\"ContextMenu\"),\n                    MENU: n(\"Menu\"),\n                    MENUARROW: n(\"MenuArrow\"),\n                    MENUACTIVE: n(\"MenuActive\"),\n                    MENUCHECK: n(\"MenuCheck\"),\n                    MENUCLOSE: n(\"MenuClose\"),\n                    MENUCOMBOBOX: n(\"MenuComboBox\"),\n                    MENUDISABLED: n(\"MenuDisabled\"),\n                    MENUFRAME: n(\"MenuFrame\"),\n                    MENUITEM: n(\"MenuItem\"),\n                    MENULABEL: n(\"MenuLabel\"),\n                    MENURADIOCHECK: n(\"MenuRadioCheck\"),\n                    MENUINPUTBOX: n(\"MenuInputBox\"),\n                    MENURULE: n(\"MenuRule\"),\n                    MENUSLIDER: n(\"MenuSlider\"),\n                    MOUSEPOST: n(\"MousePost\"),\n                    RTL: n(\"RTL\"),\n                    INFO: n(\"Info\"),\n                    INFOCLOSE: n(\"InfoClose\"),\n                    INFOCONTENT: n(\"InfoContent\"),\n                    INFOSIGNATURE: n(\"InfoSignature\"),\n                    INFOTITLE: n(\"InfoTitle\"),\n                    SLIDERVALUE: n(\"SliderValue\"),\n                    SLIDERBAR: n(\"SliderBar\"),\n                    SELECTION: n(\"Selection\"),\n                    SELECTIONBOX: n(\"SelectionBox\"),\n                    SELECTIONMENU: n(\"SelectionMenu\"),\n                    SELECTIONDIVIDER: n(\"SelectionDivider\"),\n                    SELECTIONITEM: n(\"SelectionItem\"),\n                }),\n                    (e.HtmlAttrs = {\n                        COUNTER: o(\"Counter\"),\n                        KEYDOWNFUNC: o(\"keydownFunc\"),\n                        CONTEXTMENUFUNC: o(\"contextmenuFunc\"),\n                        OLDTAB: o(\"Oldtabindex\"),\n                        TOUCHFUNC: o(\"TouchFunc\"),\n                    });\n            },\n            4922: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Info = void 0);\n                var i = r(5179),\n                    s = r(2165),\n                    a = (function (t) {\n                        function e(e, r, n) {\n                            var o = t.call(this) || this;\n                            return (\n                                (o.title = e),\n                                (o.signature = n),\n                                (o.className = s.HtmlClasses.INFO),\n                                (o.role = \"dialog\"),\n                                (o.contentDiv = o.generateContent()),\n                                (o.close = o.generateClose()),\n                                (o.content =\n                                    r ||\n                                    function () {\n                                        return \"\";\n                                    }),\n                                o\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.prototype.attachMenu = function (t) {\n                                this.menu = t;\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                t.prototype.generateHtml.call(this);\n                                var e = this.html;\n                                e.appendChild(this.generateTitle()),\n                                    e.appendChild(this.contentDiv),\n                                    e.appendChild(this.generateSignature()),\n                                    e.appendChild(this.close.html),\n                                    e.setAttribute(\"tabindex\", \"0\");\n                            }),\n                            (e.prototype.post = function () {\n                                t.prototype.post.call(this);\n                                var e = document.documentElement,\n                                    r = this.html,\n                                    n =\n                                        window.innerHeight ||\n                                        e.clientHeight ||\n                                        e.scrollHeight ||\n                                        0,\n                                    o = Math.floor(-r.offsetWidth / 2),\n                                    i = Math.floor((n - r.offsetHeight) / 3);\n                                r.setAttribute(\n                                    \"style\",\n                                    \"margin-left: \" +\n                                        o +\n                                        \"px; top: \" +\n                                        i +\n                                        \"px;\"\n                                ),\n                                    window.event instanceof MouseEvent &&\n                                        r.classList.add(\n                                            s.HtmlClasses.MOUSEPOST\n                                        ),\n                                    r.focus();\n                            }),\n                            (e.prototype.display = function () {\n                                this.menu.registerWidget(this),\n                                    (this.contentDiv.innerHTML =\n                                        this.content());\n                                var t = this.menu.html;\n                                t.parentNode && t.parentNode.removeChild(t),\n                                    this.menu.frame.appendChild(this.html);\n                            }),\n                            (e.prototype.click = function (t) {}),\n                            (e.prototype.keydown = function (e) {\n                                this.bubbleKey(),\n                                    t.prototype.keydown.call(this, e);\n                            }),\n                            (e.prototype.escape = function (t) {\n                                this.unpost();\n                            }),\n                            (e.prototype.unpost = function () {\n                                t.prototype.unpost.call(this),\n                                    this.html.classList.remove(\n                                        s.HtmlClasses.MOUSEPOST\n                                    ),\n                                    this.menu.unregisterWidget(this);\n                            }),\n                            (e.prototype.generateClose = function () {\n                                var t = new i.CloseButton(this),\n                                    e = t.html;\n                                return (\n                                    e.classList.add(s.HtmlClasses.INFOCLOSE),\n                                    e.setAttribute(\n                                        \"aria-label\",\n                                        \"Close Dialog Box\"\n                                    ),\n                                    t\n                                );\n                            }),\n                            (e.prototype.generateTitle = function () {\n                                var t = document.createElement(\"span\");\n                                return (\n                                    (t.innerHTML = this.title),\n                                    t.classList.add(s.HtmlClasses.INFOTITLE),\n                                    t\n                                );\n                            }),\n                            (e.prototype.generateContent = function () {\n                                var t = document.createElement(\"div\");\n                                return (\n                                    t.classList.add(s.HtmlClasses.INFOCONTENT),\n                                    t.setAttribute(\"tabindex\", \"0\"),\n                                    t\n                                );\n                            }),\n                            (e.prototype.generateSignature = function () {\n                                var t = document.createElement(\"span\");\n                                return (\n                                    (t.innerHTML = this.signature),\n                                    t.classList.add(\n                                        s.HtmlClasses.INFOSIGNATURE\n                                    ),\n                                    t\n                                );\n                            }),\n                            (e.prototype.toJson = function () {\n                                return { type: \"\" };\n                            }),\n                            e\n                        );\n                    })(r(8372).AbstractPostable);\n                e.Info = a;\n            },\n            1409: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Checkbox = void 0);\n                var i = r(6765),\n                    s = r(2556),\n                    a = r(2165),\n                    l = (function (t) {\n                        function e(e, r, n, o) {\n                            var i = t.call(this, e, \"checkbox\", r, o) || this;\n                            return (\n                                (i.role = \"menuitemcheckbox\"),\n                                (i.variable = e.pool.lookup(n)),\n                                i.register(),\n                                i\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.fromJson = function (t, e, r) {\n                                return new this(r, e.content, e.variable, e.id);\n                            }),\n                            (e.prototype.executeAction = function () {\n                                this.variable.setValue(\n                                    !this.variable.getValue()\n                                ),\n                                    s.MenuUtil.close(this);\n                            }),\n                            (e.prototype.generateSpan = function () {\n                                (this.span = document.createElement(\"span\")),\n                                    (this.span.textContent = \"\\u2713\"),\n                                    this.span.classList.add(\n                                        a.HtmlClasses.MENUCHECK\n                                    );\n                            }),\n                            (e.prototype.updateAria = function () {\n                                this.html.setAttribute(\n                                    \"aria-checked\",\n                                    this.variable.getValue() ? \"true\" : \"false\"\n                                );\n                            }),\n                            (e.prototype.updateSpan = function () {\n                                this.span.style.display =\n                                    this.variable.getValue() ? \"\" : \"none\";\n                            }),\n                            (e.prototype.toJson = function () {\n                                return { type: \"\" };\n                            }),\n                            e\n                        );\n                    })(i.AbstractVariableItem);\n                e.Checkbox = l;\n            },\n            9886: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Combo = void 0);\n                var i = r(6765),\n                    s = r(2556),\n                    a = r(2165),\n                    l = r(3205),\n                    c = (function (t) {\n                        function e(e, r, n, o) {\n                            var i = t.call(this, e, \"combobox\", r, o) || this;\n                            return (\n                                (i.role = \"combobox\"),\n                                (i.inputEvent = !1),\n                                (i.variable = e.pool.lookup(n)),\n                                i.register(),\n                                i\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.fromJson = function (t, e, r) {\n                                return new this(r, e.content, e.variable, e.id);\n                            }),\n                            (e.prototype.executeAction = function () {\n                                this.variable.setValue(\n                                    this.input.value,\n                                    s.MenuUtil.getActiveElement(this)\n                                );\n                            }),\n                            (e.prototype.space = function (e) {\n                                t.prototype.space.call(this, e),\n                                    s.MenuUtil.close(this);\n                            }),\n                            (e.prototype.focus = function () {\n                                t.prototype.focus.call(this),\n                                    this.input.focus();\n                            }),\n                            (e.prototype.unfocus = function () {\n                                t.prototype.unfocus.call(this),\n                                    this.updateSpan();\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                t.prototype.generateHtml.call(this),\n                                    this.html.classList.add(\n                                        a.HtmlClasses.MENUCOMBOBOX\n                                    );\n                            }),\n                            (e.prototype.generateSpan = function () {\n                                (this.span = document.createElement(\"span\")),\n                                    this.span.classList.add(\n                                        a.HtmlClasses.MENUINPUTBOX\n                                    ),\n                                    (this.input =\n                                        document.createElement(\"input\")),\n                                    this.input.addEventListener(\n                                        \"keydown\",\n                                        this.inputKey.bind(this)\n                                    ),\n                                    this.input.setAttribute(\"size\", \"10em\"),\n                                    this.input.setAttribute(\"type\", \"text\"),\n                                    this.input.setAttribute(\"tabindex\", \"-1\"),\n                                    this.span.appendChild(this.input);\n                            }),\n                            (e.prototype.inputKey = function (t) {\n                                this.bubbleKey(), (this.inputEvent = !0);\n                            }),\n                            (e.prototype.keydown = function (e) {\n                                if (\n                                    this.inputEvent &&\n                                    e.keyCode !== l.KEY.ESCAPE &&\n                                    e.keyCode !== l.KEY.RETURN\n                                )\n                                    return (\n                                        (this.inputEvent = !1),\n                                        void e.stopPropagation()\n                                    );\n                                t.prototype.keydown.call(this, e),\n                                    e.stopPropagation();\n                            }),\n                            (e.prototype.updateAria = function () {}),\n                            (e.prototype.updateSpan = function () {\n                                var t;\n                                try {\n                                    t = this.variable.getValue(\n                                        s.MenuUtil.getActiveElement(this)\n                                    );\n                                } catch (e) {\n                                    t = \"\";\n                                }\n                                this.input.value = t;\n                            }),\n                            (e.prototype.toJson = function () {\n                                return { type: \"\" };\n                            }),\n                            e\n                        );\n                    })(i.AbstractVariableItem);\n                e.Combo = c;\n            },\n            3467: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Command = void 0);\n                var i = r(1340),\n                    s = r(2556),\n                    a = (function (t) {\n                        function e(e, r, n, o) {\n                            var i = t.call(this, e, \"command\", r, o) || this;\n                            return (i.command = n), i;\n                        }\n                        return (\n                            o(e, t),\n                            (e.fromJson = function (t, e, r) {\n                                return new this(r, e.content, e.action, e.id);\n                            }),\n                            (e.prototype.executeAction = function () {\n                                try {\n                                    this.command(\n                                        s.MenuUtil.getActiveElement(this)\n                                    );\n                                } catch (t) {\n                                    s.MenuUtil.error(\n                                        t,\n                                        \"Illegal command callback.\"\n                                    );\n                                }\n                                s.MenuUtil.close(this);\n                            }),\n                            (e.prototype.toJson = function () {\n                                return { type: \"\" };\n                            }),\n                            e\n                        );\n                    })(i.AbstractItem);\n                e.Command = a;\n            },\n            2965: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Label = void 0);\n                var i = r(1340),\n                    s = r(2165),\n                    a = (function (t) {\n                        function e(e, r, n) {\n                            return t.call(this, e, \"label\", r, n) || this;\n                        }\n                        return (\n                            o(e, t),\n                            (e.fromJson = function (t, e, r) {\n                                return new this(r, e.content, e.id);\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                t.prototype.generateHtml.call(this),\n                                    this.html.classList.add(\n                                        s.HtmlClasses.MENULABEL\n                                    );\n                            }),\n                            (e.prototype.toJson = function () {\n                                return { type: \"\" };\n                            }),\n                            e\n                        );\n                    })(i.AbstractItem);\n                e.Label = a;\n            },\n            385: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Radio = void 0);\n                var i = r(6765),\n                    s = r(2556),\n                    a = r(2165),\n                    l = (function (t) {\n                        function e(e, r, n, o) {\n                            var i = t.call(this, e, \"radio\", r, o) || this;\n                            return (\n                                (i.role = \"menuitemradio\"),\n                                (i.variable = e.pool.lookup(n)),\n                                i.register(),\n                                i\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.fromJson = function (t, e, r) {\n                                return new this(r, e.content, e.variable, e.id);\n                            }),\n                            (e.prototype.executeAction = function () {\n                                this.variable.setValue(this.id),\n                                    s.MenuUtil.close(this);\n                            }),\n                            (e.prototype.generateSpan = function () {\n                                (this.span = document.createElement(\"span\")),\n                                    (this.span.textContent = \"\\u2713\"),\n                                    this.span.classList.add(\n                                        a.HtmlClasses.MENURADIOCHECK\n                                    );\n                            }),\n                            (e.prototype.updateAria = function () {\n                                this.html.setAttribute(\n                                    \"aria-checked\",\n                                    this.variable.getValue() === this.id\n                                        ? \"true\"\n                                        : \"false\"\n                                );\n                            }),\n                            (e.prototype.updateSpan = function () {\n                                this.span.style.display =\n                                    this.variable.getValue() === this.id\n                                        ? \"\"\n                                        : \"none\";\n                            }),\n                            (e.prototype.toJson = function () {\n                                return { type: \"\" };\n                            }),\n                            e\n                        );\n                    })(i.AbstractVariableItem);\n                e.Radio = l;\n            },\n            3463: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Rule = void 0);\n                var i = r(9329),\n                    s = r(2165),\n                    a = (function (t) {\n                        function e(e) {\n                            var r = t.call(this, e, \"rule\") || this;\n                            return (\n                                (r.className = s.HtmlClasses.MENUITEM),\n                                (r.role = \"separator\"),\n                                r\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.fromJson = function (t, e, r) {\n                                return new this(r);\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                t.prototype.generateHtml.call(this);\n                                var e = this.html;\n                                e.classList.add(s.HtmlClasses.MENURULE),\n                                    e.setAttribute(\n                                        \"aria-orientation\",\n                                        \"vertical\"\n                                    );\n                            }),\n                            (e.prototype.addEvents = function (t) {}),\n                            (e.prototype.toJson = function () {\n                                return { type: \"rule\" };\n                            }),\n                            e\n                        );\n                    })(i.AbstractEntry);\n                e.Rule = a;\n            },\n            7625: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Slider = void 0);\n                var i = r(6765),\n                    s = r(2556),\n                    a = r(2165),\n                    l = r(3205),\n                    c = (function (t) {\n                        function e(e, r, n, o) {\n                            var i = t.call(this, e, \"slider\", r, o) || this;\n                            return (\n                                (i.role = \"slider\"),\n                                (i.labelId =\n                                    \"ctx_slideLabel\" + s.MenuUtil.counter()),\n                                (i.valueId =\n                                    \"ctx_slideValue\" + s.MenuUtil.counter()),\n                                (i.inputEvent = !1),\n                                (i.variable = e.pool.lookup(n)),\n                                i.register(),\n                                i\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.fromJson = function (t, e, r) {\n                                return new this(r, e.content, e.variable, e.id);\n                            }),\n                            (e.prototype.executeAction = function () {\n                                this.variable.setValue(\n                                    this.input.value,\n                                    s.MenuUtil.getActiveElement(this)\n                                ),\n                                    this.update();\n                            }),\n                            (e.prototype.space = function (e) {\n                                t.prototype.space.call(this, e),\n                                    s.MenuUtil.close(this);\n                            }),\n                            (e.prototype.focus = function () {\n                                t.prototype.focus.call(this),\n                                    this.input.focus();\n                            }),\n                            (e.prototype.unfocus = function () {\n                                t.prototype.unfocus.call(this),\n                                    this.updateSpan();\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                t.prototype.generateHtml.call(this),\n                                    this.html.classList.add(\n                                        a.HtmlClasses.MENUSLIDER\n                                    ),\n                                    (this.valueSpan =\n                                        document.createElement(\"span\")),\n                                    this.valueSpan.setAttribute(\n                                        \"id\",\n                                        this.valueId\n                                    ),\n                                    this.valueSpan.classList.add(\n                                        a.HtmlClasses.SLIDERVALUE\n                                    ),\n                                    this.html.appendChild(this.valueSpan);\n                            }),\n                            (e.prototype.generateSpan = function () {\n                                (this.span = document.createElement(\"span\")),\n                                    (this.labelSpan =\n                                        document.createElement(\"span\")),\n                                    this.labelSpan.setAttribute(\n                                        \"id\",\n                                        this.labelId\n                                    ),\n                                    this.labelSpan.appendChild(\n                                        this.html.childNodes[0]\n                                    ),\n                                    this.html.appendChild(this.labelSpan),\n                                    (this.input =\n                                        document.createElement(\"input\")),\n                                    this.input.setAttribute(\"type\", \"range\"),\n                                    this.input.setAttribute(\"min\", \"0\"),\n                                    this.input.setAttribute(\"max\", \"100\"),\n                                    this.input.setAttribute(\n                                        \"aria-valuemin\",\n                                        \"0\"\n                                    ),\n                                    this.input.setAttribute(\n                                        \"aria-valuemax\",\n                                        \"100\"\n                                    ),\n                                    this.input.setAttribute(\n                                        \"aria-labelledby\",\n                                        this.labelId\n                                    ),\n                                    this.input.addEventListener(\n                                        \"keydown\",\n                                        this.inputKey.bind(this)\n                                    ),\n                                    this.input.addEventListener(\n                                        \"input\",\n                                        this.executeAction.bind(this)\n                                    ),\n                                    this.input.classList.add(\n                                        a.HtmlClasses.SLIDERBAR\n                                    ),\n                                    this.span.appendChild(this.input);\n                            }),\n                            (e.prototype.inputKey = function (t) {\n                                this.inputEvent = !0;\n                            }),\n                            (e.prototype.mousedown = function (t) {\n                                t.stopPropagation();\n                            }),\n                            (e.prototype.mouseup = function (t) {\n                                event.stopPropagation();\n                            }),\n                            (e.prototype.keydown = function (e) {\n                                var r = e.keyCode;\n                                return r === l.KEY.UP || r === l.KEY.DOWN\n                                    ? (e.preventDefault(),\n                                      void t.prototype.keydown.call(this, e))\n                                    : this.inputEvent &&\n                                        r !== l.KEY.ESCAPE &&\n                                        r !== l.KEY.RETURN\n                                      ? ((this.inputEvent = !1),\n                                        void e.stopPropagation())\n                                      : (t.prototype.keydown.call(this, e),\n                                        void e.stopPropagation());\n                            }),\n                            (e.prototype.updateAria = function () {\n                                var t = this.variable.getValue();\n                                t &&\n                                    this.input &&\n                                    (this.input.setAttribute(\n                                        \"aria-valuenow\",\n                                        t\n                                    ),\n                                    this.input.setAttribute(\n                                        \"aria-valuetext\",\n                                        t + \"%\"\n                                    ));\n                            }),\n                            (e.prototype.updateSpan = function () {\n                                var t;\n                                try {\n                                    (t = this.variable.getValue(\n                                        s.MenuUtil.getActiveElement(this)\n                                    )),\n                                        (this.valueSpan.innerHTML = t + \"%\");\n                                } catch (e) {\n                                    t = \"\";\n                                }\n                                this.input.value = t;\n                            }),\n                            (e.prototype.toJson = function () {\n                                return { type: \"\" };\n                            }),\n                            e\n                        );\n                    })(i.AbstractVariableItem);\n                e.Slider = c;\n            },\n            6186: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Submenu = void 0);\n                var i = r(1340),\n                    s = r(2165),\n                    a = (function (t) {\n                        function e(e, r, n) {\n                            var o = t.call(this, e, \"submenu\", r, n) || this;\n                            return (o._submenu = null), o;\n                        }\n                        return (\n                            o(e, t),\n                            (e.fromJson = function (t, e, r) {\n                                var n = e.content,\n                                    o = e.menu,\n                                    i = new this(r, n, e.id),\n                                    s = t.get(\"subMenu\")(t, o, i);\n                                return (i.submenu = s), i;\n                            }),\n                            Object.defineProperty(e.prototype, \"submenu\", {\n                                get: function () {\n                                    return this._submenu;\n                                },\n                                set: function (t) {\n                                    this._submenu = t;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (e.prototype.mouseover = function (t) {\n                                this.focus(), this.stop(t);\n                            }),\n                            (e.prototype.mouseout = function (t) {\n                                this.stop(t);\n                            }),\n                            (e.prototype.unfocus = function () {\n                                if (this.submenu.isPosted()) {\n                                    if (this.menu.focused !== this)\n                                        return (\n                                            t.prototype.unfocus.call(this),\n                                            void this.menu.unpostSubmenus()\n                                        );\n                                    this.html.setAttribute(\"tabindex\", \"-1\"),\n                                        this.html.blur();\n                                } else t.prototype.unfocus.call(this);\n                            }),\n                            (e.prototype.focus = function () {\n                                t.prototype.focus.call(this),\n                                    this.submenu.isPosted() ||\n                                        this.disabled ||\n                                        this.submenu.post();\n                            }),\n                            (e.prototype.executeAction = function () {\n                                this.submenu.isPosted()\n                                    ? this.submenu.unpost()\n                                    : this.submenu.post();\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                t.prototype.generateHtml.call(this);\n                                var e = this.html;\n                                (this.span = document.createElement(\"span\")),\n                                    (this.span.textContent = \"\\u25ba\"),\n                                    this.span.classList.add(\n                                        s.HtmlClasses.MENUARROW\n                                    ),\n                                    e.appendChild(this.span),\n                                    e.setAttribute(\"aria-haspopup\", \"true\");\n                            }),\n                            (e.prototype.left = function (e) {\n                                this.submenu.isPosted()\n                                    ? this.submenu.unpost()\n                                    : t.prototype.left.call(this, e);\n                            }),\n                            (e.prototype.right = function (t) {\n                                this.submenu.isPosted()\n                                    ? this.submenu.down(t)\n                                    : this.submenu.post();\n                            }),\n                            (e.prototype.toJson = function () {\n                                return { type: \"\" };\n                            }),\n                            e\n                        );\n                    })(i.AbstractItem);\n                e.Submenu = a;\n            },\n            3205: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.KEY = void 0),\n                    (function (t) {\n                        (t[(t.RETURN = 13)] = \"RETURN\"),\n                            (t[(t.ESCAPE = 27)] = \"ESCAPE\"),\n                            (t[(t.SPACE = 32)] = \"SPACE\"),\n                            (t[(t.LEFT = 37)] = \"LEFT\"),\n                            (t[(t.UP = 38)] = \"UP\"),\n                            (t[(t.RIGHT = 39)] = \"RIGHT\"),\n                            (t[(t.DOWN = 40)] = \"DOWN\");\n                    })(e.KEY || (e.KEY = {}));\n            },\n            9328: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MenuElement = void 0);\n                var i = (function (t) {\n                    function e() {\n                        return (null !== t && t.apply(this, arguments)) || this;\n                    }\n                    return (\n                        o(e, t),\n                        (e.prototype.addAttributes = function (t) {\n                            for (var e in t) this.html.setAttribute(e, t[e]);\n                        }),\n                        Object.defineProperty(e.prototype, \"html\", {\n                            get: function () {\n                                return (\n                                    this._html || this.generateHtml(),\n                                    this._html\n                                );\n                            },\n                            set: function (t) {\n                                (this._html = t), this.addEvents(t);\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.generateHtml = function () {\n                            var t = document.createElement(\"div\");\n                            t.classList.add(this.className),\n                                t.setAttribute(\"role\", this.role),\n                                (this.html = t);\n                        }),\n                        (e.prototype.focus = function () {\n                            var t = this.html;\n                            t.setAttribute(\"tabindex\", \"0\"), t.focus();\n                        }),\n                        (e.prototype.unfocus = function () {\n                            var t = this.html;\n                            t.hasAttribute(\"tabindex\") &&\n                                t.setAttribute(\"tabindex\", \"-1\");\n                            try {\n                                t.blur();\n                            } catch (t) {}\n                            t.blur();\n                        }),\n                        e\n                    );\n                })(r(2868).AbstractNavigatable);\n                e.MenuElement = i;\n            },\n            1932: function (t, e, r) {\n                var n =\n                    (this && this.__values) ||\n                    function (t) {\n                        var e = \"function\" == typeof Symbol && Symbol.iterator,\n                            r = e && t[e],\n                            n = 0;\n                        if (r) return r.call(t);\n                        if (t && \"number\" == typeof t.length)\n                            return {\n                                next: function () {\n                                    return (\n                                        t && n >= t.length && (t = void 0),\n                                        { value: t && t[n++], done: !t }\n                                    );\n                                },\n                            };\n                        throw new TypeError(\n                            e\n                                ? \"Object is not iterable.\"\n                                : \"Symbol.iterator is not defined.\"\n                        );\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MenuStore = void 0);\n                var o = r(2556),\n                    i = r(2165),\n                    s = r(3205),\n                    a = (function () {\n                        function t(t) {\n                            (this.menu = t),\n                                (this.store = []),\n                                (this._active = null),\n                                (this.counter = 0),\n                                (this.attachedClass =\n                                    i.HtmlClasses.ATTACHED +\n                                    \"_\" +\n                                    o.MenuUtil.counter()),\n                                (this.taborder = !0),\n                                (this.attrMap = {});\n                        }\n                        return (\n                            Object.defineProperty(t.prototype, \"active\", {\n                                get: function () {\n                                    return this._active;\n                                },\n                                set: function (t) {\n                                    do {\n                                        if (-1 !== this.store.indexOf(t)) {\n                                            this._active = t;\n                                            break;\n                                        }\n                                        t = t.parentNode;\n                                    } while (t);\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.next = function () {\n                                var t = this.store.length;\n                                if (0 === t) return (this.active = null), null;\n                                var e = this.store.indexOf(this.active);\n                                return (\n                                    (e = -1 === e ? 0 : e < t - 1 ? e + 1 : 0),\n                                    (this.active = this.store[e]),\n                                    this.active\n                                );\n                            }),\n                            (t.prototype.previous = function () {\n                                var t = this.store.length;\n                                if (0 === t) return (this.active = null), null;\n                                var e = t - 1,\n                                    r = this.store.indexOf(this.active);\n                                return (\n                                    (r = -1 === r || 0 === r ? e : r - 1),\n                                    (this.active = this.store[r]),\n                                    this.active\n                                );\n                            }),\n                            (t.prototype.clear = function () {\n                                this.remove(this.store);\n                            }),\n                            (t.prototype.insert = function (t) {\n                                var e,\n                                    r,\n                                    o = t instanceof HTMLElement ? [t] : t;\n                                try {\n                                    for (\n                                        var i = n(o), s = i.next();\n                                        !s.done;\n                                        s = i.next()\n                                    ) {\n                                        var a = s.value;\n                                        this.insertElement(a);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (r = i.return) &&\n                                            r.call(i);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                this.sort();\n                            }),\n                            (t.prototype.remove = function (t) {\n                                var e,\n                                    r,\n                                    o = t instanceof HTMLElement ? [t] : t;\n                                try {\n                                    for (\n                                        var i = n(o), s = i.next();\n                                        !s.done;\n                                        s = i.next()\n                                    ) {\n                                        var a = s.value;\n                                        this.removeElement(a);\n                                    }\n                                } catch (t) {\n                                    e = { error: t };\n                                } finally {\n                                    try {\n                                        s &&\n                                            !s.done &&\n                                            (r = i.return) &&\n                                            r.call(i);\n                                    } finally {\n                                        if (e) throw e.error;\n                                    }\n                                }\n                                this.sort();\n                            }),\n                            (t.prototype.inTaborder = function (t) {\n                                this.taborder && !t && this.removeTaborder(),\n                                    !this.taborder &&\n                                        t &&\n                                        this.insertTaborder(),\n                                    (this.taborder = t);\n                            }),\n                            (t.prototype.insertTaborder = function () {\n                                this.taborder && this.insertTaborder_();\n                            }),\n                            (t.prototype.removeTaborder = function () {\n                                this.taborder && this.removeTaborder_();\n                            }),\n                            (t.prototype.insertElement = function (t) {\n                                t.classList.contains(this.attachedClass) ||\n                                    (t.classList.add(this.attachedClass),\n                                    this.taborder && this.addTabindex(t),\n                                    this.addEvents(t));\n                            }),\n                            (t.prototype.removeElement = function (t) {\n                                t.classList.contains(this.attachedClass) &&\n                                    (t.classList.remove(this.attachedClass),\n                                    this.taborder && this.removeTabindex(t),\n                                    this.removeEvents(t));\n                            }),\n                            (t.prototype.sort = function () {\n                                var t = document.getElementsByClassName(\n                                    this.attachedClass\n                                );\n                                this.store = [].slice.call(t);\n                            }),\n                            (t.prototype.insertTaborder_ = function () {\n                                this.store.forEach(function (t) {\n                                    return t.setAttribute(\"tabindex\", \"0\");\n                                });\n                            }),\n                            (t.prototype.removeTaborder_ = function () {\n                                this.store.forEach(function (t) {\n                                    return t.setAttribute(\"tabindex\", \"-1\");\n                                });\n                            }),\n                            (t.prototype.addTabindex = function (t) {\n                                t.hasAttribute(\"tabindex\") &&\n                                    t.setAttribute(\n                                        i.HtmlAttrs.OLDTAB,\n                                        t.getAttribute(\"tabindex\")\n                                    ),\n                                    t.setAttribute(\"tabindex\", \"0\");\n                            }),\n                            (t.prototype.removeTabindex = function (t) {\n                                t.hasAttribute(i.HtmlAttrs.OLDTAB)\n                                    ? (t.setAttribute(\n                                          \"tabindex\",\n                                          t.getAttribute(i.HtmlAttrs.OLDTAB)\n                                      ),\n                                      t.removeAttribute(i.HtmlAttrs.OLDTAB))\n                                    : t.removeAttribute(\"tabindex\");\n                            }),\n                            (t.prototype.addEvents = function (t) {\n                                t.hasAttribute(i.HtmlAttrs.COUNTER) ||\n                                    (this.addEvent(\n                                        t,\n                                        \"contextmenu\",\n                                        this.menu.post.bind(this.menu)\n                                    ),\n                                    this.addEvent(\n                                        t,\n                                        \"keydown\",\n                                        this.keydown.bind(this)\n                                    ),\n                                    t.setAttribute(\n                                        i.HtmlAttrs.COUNTER,\n                                        this.counter.toString()\n                                    ),\n                                    this.counter++);\n                            }),\n                            (t.prototype.addEvent = function (t, e, r) {\n                                var n = i.HtmlAttrs[e.toUpperCase() + \"FUNC\"];\n                                (this.attrMap[n + this.counter] = r),\n                                    t.addEventListener(e, r);\n                            }),\n                            (t.prototype.removeEvents = function (t) {\n                                if (t.hasAttribute(i.HtmlAttrs.COUNTER)) {\n                                    var e = t.getAttribute(i.HtmlAttrs.COUNTER);\n                                    this.removeEvent(t, \"contextmenu\", e),\n                                        this.removeEvent(t, \"keydown\", e),\n                                        t.removeAttribute(i.HtmlAttrs.COUNTER);\n                                }\n                            }),\n                            (t.prototype.removeEvent = function (t, e, r) {\n                                var n = i.HtmlAttrs[e.toUpperCase() + \"FUNC\"],\n                                    o = this.attrMap[n + r];\n                                t.removeEventListener(e, o);\n                            }),\n                            (t.prototype.keydown = function (t) {\n                                t.keyCode === s.KEY.SPACE &&\n                                    (this.menu.post(t),\n                                    t.preventDefault(),\n                                    t.stopImmediatePropagation());\n                            }),\n                            t\n                        );\n                    })();\n                e.MenuStore = a;\n            },\n            2556: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MenuUtil = void 0),\n                    (function (t) {\n                        (t.close = function (t) {\n                            var e = t.menu;\n                            e.baseMenu ? e.baseMenu.unpost() : e.unpost();\n                        }),\n                            (t.getActiveElement = function (t) {\n                                var e = t.menu;\n                                return (e.baseMenu ? e.baseMenu : e).store\n                                    .active;\n                            }),\n                            (t.error = function (t, e) {\n                                console.error(\"ContextMenu Error: \" + e);\n                            }),\n                            (t.counter = function () {\n                                return e++;\n                            });\n                        var e = 0;\n                    })(e.MenuUtil || (e.MenuUtil = {}));\n            },\n            8853: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MOUSE = void 0),\n                    (e.MOUSE = {\n                        CLICK: \"click\",\n                        DBLCLICK: \"dblclick\",\n                        DOWN: \"mousedown\",\n                        UP: \"mouseup\",\n                        OVER: \"mouseover\",\n                        OUT: \"mouseout\",\n                        MOVE: \"mousemove\",\n                        SELECTEND: \"selectend\",\n                        SELECTSTART: \"selectstart\",\n                    });\n            },\n            6914: function (t, e, r) {\n                var n =\n                        (this && this.__rest) ||\n                        function (t, e) {\n                            var r = {};\n                            for (var n in t)\n                                Object.prototype.hasOwnProperty.call(t, n) &&\n                                    e.indexOf(n) < 0 &&\n                                    (r[n] = t[n]);\n                            if (\n                                null != t &&\n                                \"function\" ==\n                                    typeof Object.getOwnPropertySymbols\n                            ) {\n                                var o = 0;\n                                for (\n                                    n = Object.getOwnPropertySymbols(t);\n                                    o < n.length;\n                                    o++\n                                )\n                                    e.indexOf(n[o]) < 0 &&\n                                        Object.prototype.propertyIsEnumerable.call(\n                                            t,\n                                            n[o]\n                                        ) &&\n                                        (r[n[o]] = t[n[o]]);\n                            }\n                            return r;\n                        },\n                    o =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        },\n                    i =\n                        (this && this.__values) ||\n                        function (t) {\n                            var e =\n                                    \"function\" == typeof Symbol &&\n                                    Symbol.iterator,\n                                r = e && t[e],\n                                n = 0;\n                            if (r) return r.call(t);\n                            if (t && \"number\" == typeof t.length)\n                                return {\n                                    next: function () {\n                                        return (\n                                            t && n >= t.length && (t = void 0),\n                                            { value: t && t[n++], done: !t }\n                                        );\n                                    },\n                                };\n                            throw new TypeError(\n                                e\n                                    ? \"Object is not iterable.\"\n                                    : \"Symbol.iterator is not defined.\"\n                            );\n                        },\n                    s =\n                        (this && this.__spread) ||\n                        function () {\n                            for (var t = [], e = 0; e < arguments.length; e++)\n                                t = t.concat(o(arguments[e]));\n                            return t;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Parser = void 0);\n                var a = r(3467),\n                    l = r(5073),\n                    c = r(3737),\n                    u = r(1409),\n                    p = r(9886),\n                    h = r(2965),\n                    f = r(385),\n                    d = r(6186),\n                    m = r(3463),\n                    y = r(7625),\n                    g = r(4834),\n                    b = r(2100),\n                    v = r(2308),\n                    _ = (function () {\n                        function t(t) {\n                            var e = this;\n                            void 0 === t && (t = []),\n                                (this._initList = [\n                                    [\n                                        \"command\",\n                                        a.Command.fromJson.bind(a.Command),\n                                    ],\n                                    [\n                                        \"checkbox\",\n                                        u.Checkbox.fromJson.bind(u.Checkbox),\n                                    ],\n                                    [\"combo\", p.Combo.fromJson.bind(p.Combo)],\n                                    [\n                                        \"slider\",\n                                        y.Slider.fromJson.bind(y.Slider),\n                                    ],\n                                    [\"label\", h.Label.fromJson.bind(h.Label)],\n                                    [\"radio\", f.Radio.fromJson.bind(f.Radio)],\n                                    [\"rule\", m.Rule.fromJson.bind(m.Rule)],\n                                    [\n                                        \"submenu\",\n                                        d.Submenu.fromJson.bind(d.Submenu),\n                                    ],\n                                    [\n                                        \"contextMenu\",\n                                        l.ContextMenu.fromJson.bind(\n                                            l.ContextMenu\n                                        ),\n                                    ],\n                                    [\n                                        \"subMenu\",\n                                        g.SubMenu.fromJson.bind(g.SubMenu),\n                                    ],\n                                    [\n                                        \"variable\",\n                                        c.Variable.fromJson.bind(c.Variable),\n                                    ],\n                                    [\"items\", this.items.bind(this)],\n                                    [\n                                        \"selectionMenu\",\n                                        b.SelectionMenu.fromJson.bind(\n                                            b.SelectionMenu\n                                        ),\n                                    ],\n                                    [\n                                        \"selectionBox\",\n                                        b.SelectionBox.fromJson.bind(\n                                            b.SelectionBox\n                                        ),\n                                    ],\n                                ]),\n                                (this._factory = new v.ParserFactory(\n                                    this._initList\n                                )),\n                                t.forEach(function (t) {\n                                    var r = o(t, 2),\n                                        n = r[0],\n                                        i = r[1];\n                                    return e.factory.add(n, i);\n                                });\n                        }\n                        return (\n                            Object.defineProperty(t.prototype, \"factory\", {\n                                get: function () {\n                                    return this._factory;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.items = function (t, e, r) {\n                                var n,\n                                    o,\n                                    s = [];\n                                try {\n                                    for (\n                                        var a = i(e), l = a.next();\n                                        !l.done;\n                                        l = a.next()\n                                    ) {\n                                        var c = l.value,\n                                            u = this.parse(c, r);\n                                        u &&\n                                            (r.items.push(u),\n                                            c.disabled && u.disable(),\n                                            c.hidden && s.push(u));\n                                    }\n                                } catch (t) {\n                                    n = { error: t };\n                                } finally {\n                                    try {\n                                        l &&\n                                            !l.done &&\n                                            (o = a.return) &&\n                                            o.call(a);\n                                    } finally {\n                                        if (n) throw n.error;\n                                    }\n                                }\n                                return (\n                                    s.forEach(function (t) {\n                                        return t.hide();\n                                    }),\n                                    r.items\n                                );\n                            }),\n                            (t.prototype.parse = function (t) {\n                                for (\n                                    var e = [], r = 1;\n                                    r < arguments.length;\n                                    r++\n                                )\n                                    e[r - 1] = arguments[r];\n                                var o = t.type,\n                                    i = n(t, [\"type\"]),\n                                    a = this.factory.get(o);\n                                return a\n                                    ? a.apply(void 0, s([this.factory, i], e))\n                                    : null;\n                            }),\n                            t\n                        );\n                    })();\n                e.Parser = _;\n            },\n            2308: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.ParserFactory = void 0);\n                var r = (function () {\n                    function t(t) {\n                        this._parser = new Map(t);\n                    }\n                    return (\n                        (t.prototype.get = function (t) {\n                            return this._parser.get(t);\n                        }),\n                        (t.prototype.add = function (t, e) {\n                            this._parser.set(t, e);\n                        }),\n                        t\n                    );\n                })();\n                e.ParserFactory = r;\n            },\n            2100: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        }),\n                    i =\n                        (this && this.__read) ||\n                        function (t, e) {\n                            var r =\n                                \"function\" == typeof Symbol &&\n                                t[Symbol.iterator];\n                            if (!r) return t;\n                            var n,\n                                o,\n                                i = r.call(t),\n                                s = [];\n                            try {\n                                for (\n                                    ;\n                                    (void 0 === e || e-- > 0) &&\n                                    !(n = i.next()).done;\n\n                                )\n                                    s.push(n.value);\n                            } catch (t) {\n                                o = { error: t };\n                            } finally {\n                                try {\n                                    n && !n.done && (r = i.return) && r.call(i);\n                                } finally {\n                                    if (o) throw o.error;\n                                }\n                            }\n                            return s;\n                        };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SelectionBox = e.SelectionMenu = void 0);\n                var s = r(2556),\n                    a = r(2165),\n                    l = r(1484),\n                    c = r(4922),\n                    u = (function (t) {\n                        function e(e) {\n                            var r = t.call(this) || this;\n                            return (\n                                (r.anchor = e),\n                                (r.className = a.HtmlClasses.SELECTIONMENU),\n                                (r.variablePool = r.anchor.menu.pool),\n                                (r.baseMenu = r.anchor.menu),\n                                r\n                            );\n                        }\n                        return (\n                            o(e, t),\n                            (e.fromJson = function (t, e, r) {\n                                var n = e.title,\n                                    o = e.values,\n                                    i = e.variable,\n                                    s = new this(r),\n                                    a = t.get(\"label\")(\n                                        t,\n                                        { content: n || \"\", id: n || \"id\" },\n                                        s\n                                    ),\n                                    l = t.get(\"rule\")(t, {}, s),\n                                    c = o.map(function (e) {\n                                        return t.get(\"radio\")(\n                                            t,\n                                            { content: e, variable: i, id: e },\n                                            s\n                                        );\n                                    }),\n                                    u = [a, l].concat(c);\n                                return (s.items = u), s;\n                            }),\n                            (e.prototype.generateHtml = function () {\n                                t.prototype.generateHtml.call(this),\n                                    this.items.forEach(function (t) {\n                                        return t.html.classList.add(\n                                            a.HtmlClasses.SELECTIONITEM\n                                        );\n                                    });\n                            }),\n                            (e.prototype.display = function () {}),\n                            (e.prototype.right = function (t) {\n                                this.anchor.right(t);\n                            }),\n                            (e.prototype.left = function (t) {\n                                this.anchor.left(t);\n                            }),\n                            e\n                        );\n                    })(l.AbstractMenu);\n                e.SelectionMenu = u;\n                var p = (function (t) {\n                    function e(e, r, n, o) {\n                        void 0 === n && (n = \"none\"),\n                            void 0 === o && (o = \"vertical\");\n                        var i = t.call(this, e, null, r) || this;\n                        return (\n                            (i.style = n),\n                            (i.grid = o),\n                            (i._selections = []),\n                            (i.prefix = \"ctxt-selection\"),\n                            (i._balanced = !0),\n                            i\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        (e.fromJson = function (t, e, r) {\n                            var n = e.title,\n                                o = e.signature,\n                                i = e.selections,\n                                s = new this(n, o, e.order, e.grid);\n                            s.attachMenu(r);\n                            var a = i.map(function (e) {\n                                return t.get(\"selectionMenu\")(t, e, s);\n                            });\n                            return (s.selections = a), s;\n                        }),\n                        (e.prototype.attachMenu = function (t) {\n                            this.menu = t;\n                        }),\n                        Object.defineProperty(e.prototype, \"selections\", {\n                            get: function () {\n                                return this._selections;\n                            },\n                            set: function (t) {\n                                var e = this;\n                                (this._selections = []),\n                                    t.forEach(function (t) {\n                                        return e.addSelection(t);\n                                    });\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.addSelection = function (t) {\n                            (t.anchor = this), this._selections.push(t);\n                        }),\n                        (e.prototype.rowDiv = function (t) {\n                            var e = this,\n                                r = document.createElement(\"div\");\n                            this.contentDiv.appendChild(r);\n                            var n = t.map(function (t) {\n                                    return (\n                                        r.appendChild(t.html),\n                                        t.html.id ||\n                                            (t.html.id =\n                                                e.prefix +\n                                                s.MenuUtil.counter()),\n                                        t.html.getBoundingClientRect()\n                                    );\n                                }),\n                                o = n.map(function (t) {\n                                    return t.width;\n                                }),\n                                i = o.reduce(function (t, e) {\n                                    return t + e;\n                                }, 0),\n                                l = n.reduce(function (t, e) {\n                                    return Math.max(t, e.height);\n                                }, 0);\n                            return (\n                                r.classList.add(a.HtmlClasses.SELECTIONDIVIDER),\n                                r.setAttribute(\"style\", \"height: \" + l + \"px;\"),\n                                [r, i, l, o]\n                            );\n                        }),\n                        (e.prototype.display = function () {\n                            if (\n                                (t.prototype.display.call(this),\n                                this.order(),\n                                this.selections.length)\n                            ) {\n                                for (\n                                    var e = [],\n                                        r = 0,\n                                        n = [],\n                                        o = this.getChunkSize(\n                                            this.selections.length\n                                        ),\n                                        s = function (t) {\n                                            var s = a.selections.slice(\n                                                    t,\n                                                    t + o\n                                                ),\n                                                l = i(a.rowDiv(s), 4),\n                                                c = l[0],\n                                                u = l[1],\n                                                p = l[2],\n                                                h = l[3];\n                                            e.push(c),\n                                                (r = Math.max(r, u)),\n                                                s.forEach(function (t) {\n                                                    return (t.html.style.height =\n                                                        p + \"px\");\n                                                }),\n                                                (n = a.combineColumn(n, h));\n                                        },\n                                        a = this,\n                                        l = 0;\n                                    l < this.selections.length;\n                                    l += o\n                                )\n                                    s(l);\n                                this._balanced &&\n                                    (this.balanceColumn(e, n),\n                                    (r = n.reduce(function (t, e) {\n                                        return t + e;\n                                    }, 20))),\n                                    e.forEach(function (t) {\n                                        return (t.style.width = r + \"px\");\n                                    });\n                            }\n                        }),\n                        (e.prototype.getChunkSize = function (t) {\n                            switch (this.grid) {\n                                case \"square\":\n                                    return Math.floor(Math.sqrt(t));\n                                case \"horizontal\":\n                                    return Math.floor(t / e.chunkSize);\n                                default:\n                                    return e.chunkSize;\n                            }\n                        }),\n                        (e.prototype.balanceColumn = function (t, e) {\n                            t.forEach(function (t) {\n                                for (\n                                    var r = Array.from(t.children),\n                                        n = 0,\n                                        o = void 0;\n                                    (o = r[n]);\n                                    n++\n                                )\n                                    o.style.width = e[n] + \"px\";\n                            });\n                        }),\n                        (e.prototype.combineColumn = function (t, e) {\n                            for (var r = [], n = 0; t[n] || e[n]; ) {\n                                if (!t[n]) {\n                                    r = r.concat(e.slice(n));\n                                    break;\n                                }\n                                if (!e[n]) {\n                                    r = r.concat(t.slice(n));\n                                    break;\n                                }\n                                r.push(Math.max(t[n], e[n])), n++;\n                            }\n                            return r;\n                        }),\n                        (e.prototype.left = function (t) {\n                            var e = this;\n                            this.move(t, function (t) {\n                                return (0 === t ? e.selections.length : t) - 1;\n                            });\n                        }),\n                        (e.prototype.right = function (t) {\n                            var e = this;\n                            this.move(t, function (t) {\n                                return t === e.selections.length - 1\n                                    ? 0\n                                    : t + 1;\n                            });\n                        }),\n                        (e.prototype.generateHtml = function () {\n                            t.prototype.generateHtml.call(this),\n                                this.html.classList.add(\n                                    a.HtmlClasses.SELECTION\n                                );\n                        }),\n                        (e.prototype.generateContent = function () {\n                            var e = t.prototype.generateContent.call(this);\n                            return (\n                                e.classList.add(a.HtmlClasses.SELECTIONBOX),\n                                e.removeAttribute(\"tabindex\"),\n                                e\n                            );\n                        }),\n                        (e.prototype.findSelection = function (t) {\n                            var e = t.target,\n                                r = null;\n                            if (\n                                (e.id &&\n                                    (r = this.selections.find(function (t) {\n                                        return t.html.id === e.id;\n                                    })),\n                                !r)\n                            ) {\n                                var n = e.parentElement.id;\n                                r = this.selections.find(function (t) {\n                                    return t.html.id === n;\n                                });\n                            }\n                            return r;\n                        }),\n                        (e.prototype.move = function (t, e) {\n                            var r = this.findSelection(t);\n                            r.focused && r.focused.unfocus();\n                            var n = e(this.selections.indexOf(r));\n                            this.selections[n].focus();\n                        }),\n                        (e.prototype.order = function () {\n                            this.selections.sort(e.orderMethod.get(this.style));\n                        }),\n                        (e.prototype.toJson = function () {\n                            return { type: \"\" };\n                        }),\n                        (e.chunkSize = 4),\n                        (e.orderMethod = new Map([\n                            [\n                                \"alphabetical\",\n                                function (t, e) {\n                                    return t.items[0].content.localeCompare(\n                                        e.items[0].content\n                                    );\n                                },\n                            ],\n                            [\n                                \"none\",\n                                function (t, e) {\n                                    return 1;\n                                },\n                            ],\n                            [\n                                \"decreasing\",\n                                function (t, e) {\n                                    var r = t.items.length,\n                                        n = e.items.length;\n                                    return r < n ? 1 : n < r ? -1 : 0;\n                                },\n                            ],\n                            [\n                                \"increasing\",\n                                function (t, e) {\n                                    var r = t.items.length,\n                                        n = e.items.length;\n                                    return r < n ? -1 : n < r ? 1 : 0;\n                                },\n                            ],\n                        ])),\n                        e\n                    );\n                })(c.Info);\n                e.SelectionBox = p;\n            },\n            4834: function (t, e, r) {\n                var n,\n                    o =\n                        (this && this.__extends) ||\n                        ((n = function (t, e) {\n                            return (\n                                (n =\n                                    Object.setPrototypeOf ||\n                                    ({ __proto__: [] } instanceof Array &&\n                                        function (t, e) {\n                                            t.__proto__ = e;\n                                        }) ||\n                                    function (t, e) {\n                                        for (var r in e)\n                                            e.hasOwnProperty(r) &&\n                                                (t[r] = e[r]);\n                                    }),\n                                n(t, e)\n                            );\n                        }),\n                        function (t, e) {\n                            function r() {\n                                this.constructor = t;\n                            }\n                            n(t, e),\n                                (t.prototype =\n                                    null === e\n                                        ? Object.create(e)\n                                        : ((r.prototype = e.prototype),\n                                          new r()));\n                        });\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SubMenu = void 0);\n                var i = (function (t) {\n                    function e(e) {\n                        var r = t.call(this) || this;\n                        return (\n                            (r._anchor = e),\n                            (r.variablePool = r.anchor.menu.pool),\n                            r.setBaseMenu(),\n                            r\n                        );\n                    }\n                    return (\n                        o(e, t),\n                        (e.fromJson = function (t, e, r) {\n                            var n = e.items,\n                                o = new this(r),\n                                i = t.get(\"items\")(t, n, o);\n                            return (o.items = i), o;\n                        }),\n                        Object.defineProperty(e.prototype, \"anchor\", {\n                            get: function () {\n                                return this._anchor;\n                            },\n                            enumerable: !1,\n                            configurable: !0,\n                        }),\n                        (e.prototype.post = function () {\n                            if (this.anchor.menu.isPosted()) {\n                                for (\n                                    var e = this.anchor.html,\n                                        r = this.html,\n                                        n = this.baseMenu.frame,\n                                        o = e.offsetWidth,\n                                        i = o - 2,\n                                        s = 0;\n                                    e && e !== n;\n\n                                )\n                                    (i += e.offsetLeft),\n                                        (s += e.offsetTop),\n                                        (e = e.parentNode);\n                                i + r.offsetWidth >\n                                    document.body.offsetWidth - 5 &&\n                                    (i = Math.max(\n                                        5,\n                                        i - o - r.offsetWidth + 6\n                                    )),\n                                    t.prototype.post.call(this, i, s);\n                            }\n                        }),\n                        (e.prototype.display = function () {\n                            this.baseMenu.frame.appendChild(this.html);\n                        }),\n                        (e.prototype.setBaseMenu = function () {\n                            var t = this;\n                            do {\n                                t = t.anchor.menu;\n                            } while (t instanceof e);\n                            this.baseMenu = t;\n                        }),\n                        (e.prototype.left = function (t) {\n                            (this.focused = null), this.anchor.focus();\n                        }),\n                        (e.prototype.toJson = function () {\n                            return { type: \"\" };\n                        }),\n                        e\n                    );\n                })(r(1484).AbstractMenu);\n                e.SubMenu = i;\n            },\n            3737: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Variable = void 0);\n                var n = r(2556),\n                    o = (function () {\n                        function t(t, e, r) {\n                            (this._name = t),\n                                (this.getter = e),\n                                (this.setter = r),\n                                (this.items = []);\n                        }\n                        return (\n                            (t.fromJson = function (t, e, r) {\n                                var n = new this(e.name, e.getter, e.setter);\n                                r.insert(n);\n                            }),\n                            Object.defineProperty(t.prototype, \"name\", {\n                                get: function () {\n                                    return this._name;\n                                },\n                                enumerable: !1,\n                                configurable: !0,\n                            }),\n                            (t.prototype.getValue = function (t) {\n                                try {\n                                    return this.getter(t);\n                                } catch (t) {\n                                    return (\n                                        n.MenuUtil.error(\n                                            t,\n                                            \"Command of variable \" +\n                                                this.name +\n                                                \" failed.\"\n                                        ),\n                                        null\n                                    );\n                                }\n                            }),\n                            (t.prototype.setValue = function (t, e) {\n                                try {\n                                    this.setter(t, e);\n                                } catch (t) {\n                                    n.MenuUtil.error(\n                                        t,\n                                        \"Command of variable \" +\n                                            this.name +\n                                            \" failed.\"\n                                    );\n                                }\n                                this.update();\n                            }),\n                            (t.prototype.register = function (t) {\n                                -1 === this.items.indexOf(t) &&\n                                    this.items.push(t);\n                            }),\n                            (t.prototype.unregister = function (t) {\n                                var e = this.items.indexOf(t);\n                                -1 !== e && this.items.splice(e, 1);\n                            }),\n                            (t.prototype.update = function () {\n                                this.items.forEach(function (t) {\n                                    return t.update();\n                                });\n                            }),\n                            (t.prototype.registerCallback = function (t) {\n                                this.items.forEach(function (e) {\n                                    return e.registerCallback(t);\n                                });\n                            }),\n                            (t.prototype.unregisterCallback = function (t) {\n                                this.items.forEach(function (e) {\n                                    return e.unregisterCallback(t);\n                                });\n                            }),\n                            (t.prototype.toJson = function () {\n                                return {\n                                    type: \"variable\",\n                                    name: this.name,\n                                    getter: this.getter.toString(),\n                                    setter: this.setter.toString(),\n                                };\n                            }),\n                            t\n                        );\n                    })();\n                e.Variable = o;\n            },\n            2358: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.VariablePool = void 0);\n                var r = (function () {\n                    function t() {\n                        this.pool = {};\n                    }\n                    return (\n                        (t.prototype.insert = function (t) {\n                            this.pool[t.name] = t;\n                        }),\n                        (t.prototype.lookup = function (t) {\n                            return this.pool[t];\n                        }),\n                        (t.prototype.remove = function (t) {\n                            delete this.pool[t];\n                        }),\n                        (t.prototype.update = function () {\n                            for (var t in this.pool) this.pool[t].update();\n                        }),\n                        t\n                    );\n                })();\n                e.VariablePool = r;\n            },\n            3921: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractAudioRenderer = void 0);\n                const n = r(5897);\n                e.AbstractAudioRenderer = class {\n                    constructor() {\n                        this.separator_ = \" \";\n                    }\n                    setSeparator(t) {\n                        this.separator_ = t;\n                    }\n                    getSeparator() {\n                        return \"braille\" === n.default.getInstance().modality\n                            ? \"\"\n                            : this.separator_;\n                    }\n                    error(t) {\n                        return null;\n                    }\n                    merge(t) {\n                        let e = \"\";\n                        const r = t.length - 1;\n                        for (let n, o = 0; (n = t[o]); o++)\n                            if (((e += n.speech), o < r)) {\n                                const t = n.attributes.separator;\n                                e += void 0 !== t ? t : this.getSeparator();\n                            }\n                        return e;\n                    }\n                    finalize(t) {\n                        return t;\n                    }\n                    pauseValue(t) {\n                        let e;\n                        switch (t) {\n                            case \"long\":\n                                e = 750;\n                                break;\n                            case \"medium\":\n                                e = 500;\n                                break;\n                            case \"short\":\n                                e = 250;\n                                break;\n                            default:\n                                e = parseInt(t, 10);\n                        }\n                        return Math.floor(\n                            (e * n.default.getInstance().getRate()) / 100\n                        );\n                    }\n                };\n            },\n            4196: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AcssRenderer = void 0);\n                const n = r(4440),\n                    o = r(8496),\n                    i = r(3706),\n                    s = r(182);\n                class a extends s.MarkupRenderer {\n                    markup(t) {\n                        this.setScaleFunction(-2, 2, 0, 10, 0);\n                        const e = i.personalityMarkup(t),\n                            r = [],\n                            n = { open: [] };\n                        let o = null,\n                            s = !1;\n                        for (let t, a = 0; (t = e[a]); a++) {\n                            if (i.isMarkupElement(t)) {\n                                i.mergeMarkup(n, t);\n                                continue;\n                            }\n                            if (i.isPauseElement(t)) {\n                                s && (o = i.mergePause(o, t, Math.max));\n                                continue;\n                            }\n                            const e = '\"' + this.merge(t.span) + '\"';\n                            (s = !0), o && (r.push(this.pause(o)), (o = null));\n                            const a = this.prosody_(n);\n                            r.push(a ? \"(text (\" + a + \") \" + e + \")\" : e);\n                        }\n                        return \"(exp \" + r.join(\" \") + \")\";\n                    }\n                    error(t) {\n                        return '(error \"' + o.Move.get(t) + '\")';\n                    }\n                    prosodyElement(t, e) {\n                        switch (((e = this.applyScaleFunction(e)), t)) {\n                            case n.personalityProps.RATE:\n                                return \"(richness . \" + e + \")\";\n                            case n.personalityProps.PITCH:\n                                return \"(average-pitch . \" + e + \")\";\n                            case n.personalityProps.VOLUME:\n                                return \"(stress . \" + e + \")\";\n                        }\n                        return \"(value . \" + e + \")\";\n                    }\n                    pause(t) {\n                        return (\n                            \"(pause . \" +\n                            this.pauseValue(t[n.personalityProps.PAUSE]) +\n                            \")\"\n                        );\n                    }\n                    prosody_(t) {\n                        const e = t.open,\n                            r = [];\n                        for (let n, o = 0; (n = e[o]); o++)\n                            r.push(this.prosodyElement(n, t[n]));\n                        return r.join(\" \");\n                    }\n                }\n                e.AcssRenderer = a;\n            },\n            3706: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.isSpanElement =\n                        e.isPauseElement =\n                        e.isMarkupElement =\n                        e.personalityMarkup =\n                        e.sortClose =\n                        e.mergeMarkup =\n                        e.mergePause =\n                            void 0);\n                const n = r(707),\n                    o = r(4440),\n                    i = r(9536);\n                function s(t, e, r) {\n                    return (\n                        r ||\n                        function (r, n) {\n                            return \"number\" == typeof r && \"number\" == typeof n\n                                ? r + n\n                                : \"number\" == typeof r\n                                  ? n\n                                  : \"number\" == typeof n\n                                    ? r\n                                    : [t, e].sort()[0];\n                        }\n                    ).call(null, t, e);\n                }\n                (e.mergePause = function (t, e, r) {\n                    return t ? { pause: s(t.pause, e.pause, r) } : e;\n                }),\n                    (e.mergeMarkup = function (t, e) {\n                        delete t.open,\n                            e.close.forEach((e) => delete t[e]),\n                            e.open.forEach((r) => (t[r] = e[r]));\n                        const r = Object.keys(t);\n                        t.open = r;\n                    }),\n                    (e.sortClose = function (t, e) {\n                        if (t.length <= 1) return t;\n                        const r = [];\n                        for (let n, o = 0; (n = e[o]), t.length; o++)\n                            n.close &&\n                                n.close.length &&\n                                n.close.forEach(function (e) {\n                                    const n = t.indexOf(e);\n                                    -1 !== n && (r.unshift(e), t.splice(n, 1));\n                                });\n                        return r;\n                    });\n                let a = {},\n                    l = [];\n                function c(t, e) {\n                    const r = t[t.length - 1];\n                    if (r) {\n                        if (f(e) && f(r)) {\n                            if (void 0 === r.join)\n                                return void (r.span = r.span.concat(e.span));\n                            const t = r.span.pop(),\n                                n = e.span.shift();\n                            return (\n                                r.span.push(t + r.join + n),\n                                (r.span = r.span.concat(e.span)),\n                                void (r.join = e.join)\n                            );\n                        }\n                        h(e) && h(r)\n                            ? (r.pause = s(r.pause, e.pause))\n                            : t.push(e);\n                    } else t.push(e);\n                }\n                function u(t, e) {\n                    t.rate && (e.rate = t.rate),\n                        t.pitch && (e.pitch = t.pitch),\n                        t.volume && (e.volume = t.volume);\n                }\n                function p(t) {\n                    return \"object\" == typeof t && t.open;\n                }\n                function h(t) {\n                    return (\n                        \"object\" == typeof t &&\n                        1 === Object.keys(t).length &&\n                        Object.keys(t)[0] === o.personalityProps.PAUSE\n                    );\n                }\n                function f(t) {\n                    const e = Object.keys(t);\n                    return (\n                        \"object\" == typeof t &&\n                        ((1 === e.length && \"span\" === e[0]) ||\n                            (2 === e.length &&\n                                ((\"span\" === e[0] && \"join\" === e[1]) ||\n                                    (\"span\" === e[1] && \"join\" === e[0]))))\n                    );\n                }\n                function d(t, e, r, n, a, l = !1) {\n                    if (l) {\n                        const l = t[t.length - 1];\n                        let c;\n                        if (\n                            (l && (c = l[o.personalityProps.JOIN]),\n                            l && !e.speech && a && h(l))\n                        ) {\n                            const t = o.personalityProps.PAUSE;\n                            (l[t] = s(l[t], a[t])), (a = null);\n                        }\n                        if (\n                            l &&\n                            e.speech &&\n                            0 === Object.keys(r).length &&\n                            f(l)\n                        ) {\n                            if (void 0 !== c) {\n                                const t = l.span.pop();\n                                e = new i.Span(\n                                    t.speech + c + e.speech,\n                                    t.attributes\n                                );\n                            }\n                            l.span.push(e),\n                                (e = new i.Span(\"\", {})),\n                                (l[o.personalityProps.JOIN] = n);\n                        }\n                    }\n                    0 !== Object.keys(r).length && t.push(r),\n                        e.speech && t.push({ span: [e], join: n }),\n                        a && t.push(a);\n                }\n                function m(t, e) {\n                    if (!e) return t;\n                    const r = {};\n                    for (const n of o.personalityPropList) {\n                        const o = t[n],\n                            i = e[n];\n                        if ((!o && !i) || (o && i && o === i)) continue;\n                        const s = o || 0;\n                        p(r) || ((r.open = []), (r.close = [])),\n                            o || r.close.push(n),\n                            i || r.open.push(n),\n                            i && o && (r.close.push(n), r.open.push(n)),\n                            (e[n] = s),\n                            (r[n] = s),\n                            a[n] ? a[n].push(s) : (a[n] = [s]);\n                    }\n                    if (p(r)) {\n                        let t = r.close.slice();\n                        for (; t.length > 0; ) {\n                            let o = l.pop();\n                            const i = (0, n.setdifference)(o, t);\n                            if (\n                                ((t = (0, n.setdifference)(t, o)),\n                                (o = i),\n                                0 !== t.length)\n                            ) {\n                                if (0 !== o.length) {\n                                    (r.close = r.close.concat(o)),\n                                        (r.open = r.open.concat(o));\n                                    for (let t, n = 0; (t = o[n]); n++)\n                                        r[t] = e[t];\n                                }\n                            } else 0 !== o.length && l.push(o);\n                        }\n                        l.push(r.open);\n                    }\n                    return r;\n                }\n                (e.personalityMarkup = function (t) {\n                    (a = {}), (l = []);\n                    let e = [];\n                    const r = {};\n                    for (let n, i = 0; (n = t[i]); i++) {\n                        let t = null;\n                        const i = n.descriptionSpan(),\n                            s = n.personality,\n                            a = s[o.personalityProps.JOIN];\n                        delete s[o.personalityProps.JOIN],\n                            void 0 !== s[o.personalityProps.PAUSE] &&\n                                ((t = {\n                                    [o.personalityProps.PAUSE]:\n                                        s[o.personalityProps.PAUSE],\n                                }),\n                                delete s[o.personalityProps.PAUSE]);\n                        d(e, i, m(s, r), a, t, !0);\n                    }\n                    return (\n                        (e = e.concat(\n                            (function () {\n                                const t = [];\n                                for (let e = l.length - 1; e >= 0; e--) {\n                                    const r = l[e];\n                                    if (r.length) {\n                                        const e = { open: [], close: [] };\n                                        for (let t = 0; t < r.length; t++) {\n                                            const n = r[t];\n                                            e.close.push(n), (e[n] = 0);\n                                        }\n                                        t.push(e);\n                                    }\n                                }\n                                return t;\n                            })()\n                        )),\n                        (e = (function (t) {\n                            const e = {},\n                                r = [];\n                            for (let n, o = 0; (n = t[o]); o++) {\n                                if (!p(n)) {\n                                    c(r, n);\n                                    continue;\n                                }\n                                if (\n                                    !n.close ||\n                                    1 !== n.close.length ||\n                                    n.open.length\n                                ) {\n                                    u(n, e), r.push(n);\n                                    continue;\n                                }\n                                let i = t[o + 1];\n                                if (!i || f(i)) {\n                                    u(n, e), r.push(n);\n                                    continue;\n                                }\n                                const s = h(i) ? i : null;\n                                s && (i = t[o + 2]),\n                                    i &&\n                                    p(i) &&\n                                    i.open[0] === n.close[0] &&\n                                    !i.close.length &&\n                                    i[i.open[0]] === e[i.open[0]]\n                                        ? s\n                                            ? (c(r, s), (o += 2))\n                                            : (o += 1)\n                                        : (u(n, e), r.push(n));\n                            }\n                            return r;\n                        })(e)),\n                        e\n                    );\n                }),\n                    (e.isMarkupElement = p),\n                    (e.isPauseElement = h),\n                    (e.isSpanElement = f);\n            },\n            7052: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AuditoryDescription = void 0);\n                const n = r(2105),\n                    o = r(9536);\n                class i {\n                    constructor({\n                        context: t,\n                        text: e,\n                        userValue: r,\n                        annotation: n,\n                        attributes: o,\n                        personality: i,\n                        layout: s,\n                    }) {\n                        (this.context = t || \"\"),\n                            (this.text = e || \"\"),\n                            (this.userValue = r || \"\"),\n                            (this.annotation = n || \"\"),\n                            (this.attributes = o || {}),\n                            (this.personality = i || {}),\n                            (this.layout = s || \"\");\n                    }\n                    static create(t, e = {}) {\n                        return (\n                            (t.text = n.Grammar.getInstance().apply(t.text, e)),\n                            new i(t)\n                        );\n                    }\n                    isEmpty() {\n                        return (\n                            0 === this.context.length &&\n                            0 === this.text.length &&\n                            0 === this.userValue.length &&\n                            0 === this.annotation.length\n                        );\n                    }\n                    clone() {\n                        let t, e;\n                        if (this.personality) {\n                            t = {};\n                            for (const e in this.personality)\n                                t[e] = this.personality[e];\n                        }\n                        if (this.attributes) {\n                            e = {};\n                            for (const t in this.attributes)\n                                e[t] = this.attributes[t];\n                        }\n                        return new i({\n                            context: this.context,\n                            text: this.text,\n                            userValue: this.userValue,\n                            annotation: this.annotation,\n                            personality: t,\n                            attributes: e,\n                            layout: this.layout,\n                        });\n                    }\n                    toString() {\n                        return (\n                            'AuditoryDescription(context=\"' +\n                            this.context +\n                            '\"  text=\"' +\n                            this.text +\n                            '\"  userValue=\"' +\n                            this.userValue +\n                            '\"  annotation=\"' +\n                            this.annotation +\n                            '\")'\n                        );\n                    }\n                    descriptionString() {\n                        return this.context && this.text\n                            ? this.context + \" \" + this.text\n                            : this.context || this.text;\n                    }\n                    descriptionSpan() {\n                        return new o.Span(\n                            this.descriptionString(),\n                            this.attributes\n                        );\n                    }\n                    equals(t) {\n                        return (\n                            this.context === t.context &&\n                            this.text === t.text &&\n                            this.userValue === t.userValue &&\n                            this.annotation === t.annotation\n                        );\n                    }\n                }\n                e.AuditoryDescription = i;\n            },\n            8290: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.isXml =\n                        e.registerRenderer =\n                        e.error =\n                        e.finalize =\n                        e.merge =\n                        e.markup =\n                        e.getSeparator =\n                        e.setSeparator =\n                            void 0);\n                const n = r(5897),\n                    o = r(4440),\n                    i = r(4196),\n                    s = r(8639),\n                    a = r(8990),\n                    l = r(6660),\n                    c = r(9536),\n                    u = r(7504),\n                    p = r(3757),\n                    h = r(4032),\n                    f = r(2456),\n                    d = new u.SsmlRenderer(),\n                    m = new Map([\n                        [o.Markup.NONE, new h.StringRenderer()],\n                        [o.Markup.PUNCTUATION, new a.PunctuationRenderer()],\n                        [o.Markup.LAYOUT, new s.LayoutRenderer()],\n                        [o.Markup.ACSS, new i.AcssRenderer()],\n                        [o.Markup.SABLE, new l.SableRenderer()],\n                        [o.Markup.VOICEXML, d],\n                        [o.Markup.SSML, d],\n                        [o.Markup.SSML_STEP, new p.SsmlStepRenderer()],\n                    ]);\n                (e.setSeparator = function (t) {\n                    const e = m.get(n.default.getInstance().markup);\n                    e && e.setSeparator(t);\n                }),\n                    (e.getSeparator = function () {\n                        const t = m.get(n.default.getInstance().markup);\n                        return t ? t.getSeparator() : \"\";\n                    }),\n                    (e.markup = function (t) {\n                        const e = m.get(n.default.getInstance().markup);\n                        return e ? e.markup(t) : \"\";\n                    }),\n                    (e.merge = function (t) {\n                        const e = t.map((t) =>\n                                \"string\" == typeof t ? new c.Span(t, {}) : t\n                            ),\n                            r = m.get(n.default.getInstance().markup);\n                        return r ? r.merge(e) : t.join();\n                    }),\n                    (e.finalize = function (t) {\n                        const e = m.get(n.default.getInstance().markup);\n                        return e ? e.finalize(t) : t;\n                    }),\n                    (e.error = function (t) {\n                        const e = m.get(n.default.getInstance().markup);\n                        return e ? e.error(t) : \"\";\n                    }),\n                    (e.registerRenderer = function (t, e) {\n                        m.set(t, e);\n                    }),\n                    (e.isXml = function () {\n                        return (\n                            m.get(n.default.getInstance().markup) instanceof\n                            f.XmlRenderer\n                        );\n                    });\n            },\n            8639: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.LayoutRenderer = void 0);\n                const n = r(2057),\n                    o = r(5740),\n                    i = r(4440),\n                    s = r(3706),\n                    a = r(2456);\n                class l extends a.XmlRenderer {\n                    finalize(t) {\n                        return (function (t) {\n                            c = \"\";\n                            const e = o.parseInput(`<all>${t}</all>`);\n                            return (\n                                n.Debugger.getInstance().output(\n                                    o.formatXml(e.toString())\n                                ),\n                                (c = f(e)),\n                                c\n                            );\n                        })(t);\n                    }\n                    pause(t) {\n                        return \"\";\n                    }\n                    prosodyElement(t, e) {\n                        return t === i.personalityProps.LAYOUT ? `<${e}>` : \"\";\n                    }\n                    closeTag(t) {\n                        return `</${t}>`;\n                    }\n                    markup(t) {\n                        const e = [];\n                        let r = [];\n                        for (const n of t) {\n                            if (!n.layout) {\n                                r.push(n);\n                                continue;\n                            }\n                            e.push(this.processContent(r)), (r = []);\n                            const t = n.layout;\n                            t.match(/^begin/)\n                                ? e.push(\"<\" + t.replace(/^begin/, \"\") + \">\")\n                                : t.match(/^end/)\n                                  ? e.push(\"</\" + t.replace(/^end/, \"\") + \">\")\n                                  : console.warn(\n                                        \"Something went wrong with layout markup: \" +\n                                            t\n                                    );\n                        }\n                        return e.push(this.processContent(r)), e.join(\"\");\n                    }\n                    processContent(t) {\n                        const e = [],\n                            r = s.personalityMarkup(t);\n                        for (let t, n = 0; (t = r[n]); n++)\n                            t.span\n                                ? e.push(this.merge(t.span))\n                                : s.isPauseElement(t);\n                        return e.join(\"\");\n                    }\n                }\n                e.LayoutRenderer = l;\n                let c = \"\";\n                const u = {\n                    TABLE: function (t) {\n                        let e = g(t);\n                        e.forEach((t) => {\n                            (t.cells = t.cells.slice(1).slice(0, -1)),\n                                (t.width = t.width.slice(1).slice(0, -1));\n                        });\n                        const [r, n] = b(e);\n                        return (e = v(e, n)), _(e, r);\n                    },\n                    CASES: function (t) {\n                        let e = g(t);\n                        e.forEach((t) => {\n                            (t.cells = t.cells.slice(0, -1)),\n                                (t.width = t.width.slice(0, -1));\n                        });\n                        const [r, n] = b(e);\n                        return (e = v(e, n)), _(e, r);\n                    },\n                    CAYLEY: function (t) {\n                        let e = g(t);\n                        e.forEach((t) => {\n                            (t.cells = t.cells.slice(1).slice(0, -1)),\n                                (t.width = t.width.slice(1).slice(0, -1)),\n                                (t.sep = t.sep + t.sep);\n                        });\n                        const [r, n] = b(e),\n                            o = {\n                                lfence: \"\",\n                                rfence: \"\",\n                                cells: n.map(\n                                    (t) =>\n                                        \"\\u2810\" + new Array(t).join(\"\\u2812\")\n                                ),\n                                width: n,\n                                height: 1,\n                                sep: e[0].sep,\n                            };\n                        return e.splice(1, 0, o), (e = v(e, n)), _(e, r);\n                    },\n                    MATRIX: function (t) {\n                        let e = g(t);\n                        const [r, n] = b(e);\n                        return (e = v(e, n)), _(e, r);\n                    },\n                    CELL: f,\n                    FENCE: f,\n                    ROW: f,\n                    FRACTION: function (t) {\n                        const [e, r, , n, o] = Array.from(t.childNodes),\n                            i = p(r),\n                            s = p(n),\n                            a = m(i),\n                            l = m(s);\n                        let c = Math.max(a, l);\n                        const u = e + new Array(c + 1).join(\"\\u2812\") + o;\n                        return (c = u.length), `${x(i, c)}\\n${u}\\n${x(s, c)}`;\n                    },\n                    NUMERATOR: E,\n                    DENOMINATOR: E,\n                };\n                function p(t) {\n                    const e = o.tagName(t),\n                        r = u[e];\n                    return r ? r(t) : t.textContent;\n                }\n                function h(t, e) {\n                    if (!t || !e) return t + e;\n                    const r = d(t),\n                        n = d(e),\n                        o = r - n;\n                    (t = o < 0 ? y(t, n, m(t)) : t),\n                        (e = o > 0 ? y(e, r, m(e)) : e);\n                    const i = t.split(/\\r\\n|\\r|\\n/),\n                        s = e.split(/\\r\\n|\\r|\\n/),\n                        a = [];\n                    for (let t = 0; t < i.length; t++) a.push(i[t] + s[t]);\n                    return a.join(\"\\n\");\n                }\n                function f(t) {\n                    let e = \"\";\n                    for (const r of Array.from(t.childNodes))\n                        e =\n                            r.nodeType !== o.NodeType.TEXT_NODE\n                                ? h(e, p(r))\n                                : h(e, r.textContent);\n                    return e;\n                }\n                function d(t) {\n                    return t.split(/\\r\\n|\\r|\\n/).length;\n                }\n                function m(t) {\n                    return t\n                        .split(/\\r\\n|\\r|\\n/)\n                        .reduce((t, e) => Math.max(e.length, t), 0);\n                }\n                function y(t, e, r) {\n                    return (\n                        (t = (function (t, e) {\n                            const r = e - d(t);\n                            return (\n                                t + (r > 0 ? new Array(r + 1).join(\"\\n\") : \"\")\n                            );\n                        })(t, e)),\n                        (function (t, e) {\n                            const r = t.split(/\\r\\n|\\r|\\n/),\n                                n = [];\n                            for (const t of r) {\n                                const r = e - t.length;\n                                n.push(\n                                    t +\n                                        (r > 0\n                                            ? new Array(r + 1).join(\"\\u2800\")\n                                            : \"\")\n                                );\n                            }\n                            return n.join(\"\\n\");\n                        })(t, r)\n                    );\n                }\n                function g(t) {\n                    const e = Array.from(t.childNodes),\n                        r = [];\n                    for (const t of e)\n                        t.nodeType === o.NodeType.ELEMENT_NODE && r.push(O(t));\n                    return r;\n                }\n                function b(t) {\n                    const e = t.reduce((t, e) => Math.max(e.height, t), 0),\n                        r = [];\n                    for (let e = 0; e < t[0].width.length; e++)\n                        r.push(\n                            t\n                                .map((t) => t.width[e])\n                                .reduce((t, e) => Math.max(t, e), 0)\n                        );\n                    return [e, r];\n                }\n                function v(t, e) {\n                    const r = [];\n                    for (const n of t) {\n                        if (0 === n.height) continue;\n                        const t = [];\n                        for (let r = 0; r < n.cells.length; r++)\n                            t.push(y(n.cells[r], n.height, e[r]));\n                        (n.cells = t), r.push(n);\n                    }\n                    return r;\n                }\n                function _(t, e) {\n                    if (1 === e)\n                        return t\n                            .map(\n                                (t) => t.lfence + t.cells.join(t.sep) + t.rfence\n                            )\n                            .join(\"\\n\");\n                    const r = [];\n                    for (const e of t) {\n                        const t = S(e.sep, e.height);\n                        let n = e.cells.shift();\n                        for (; e.cells.length; )\n                            (n = h(n, t)), (n = h(n, e.cells.shift()));\n                        (n = h(S(e.lfence, e.height), n)),\n                            (n = h(n, S(e.rfence, e.height))),\n                            r.push(n),\n                            r.push(\n                                e.lfence +\n                                    new Array(m(n) - 3).join(e.sep) +\n                                    e.rfence\n                            );\n                    }\n                    return r.slice(0, -1).join(\"\\n\");\n                }\n                function S(t, e) {\n                    let r = \"\";\n                    for (; e; ) (r += t + \"\\n\"), e--;\n                    return r.slice(0, -1);\n                }\n                function M(t) {\n                    return t.nodeType === o.NodeType.ELEMENT_NODE &&\n                        \"FENCE\" === o.tagName(t)\n                        ? p(t)\n                        : \"\";\n                }\n                function O(t) {\n                    const e = Array.from(t.childNodes),\n                        r = M(e[0]),\n                        n = M(e[e.length - 1]);\n                    r && e.shift(), n && e.pop();\n                    let i = \"\";\n                    const s = [];\n                    for (const t of e) {\n                        if (t.nodeType === o.NodeType.TEXT_NODE) {\n                            i = t.textContent;\n                            continue;\n                        }\n                        const e = p(t);\n                        s.push(e);\n                    }\n                    return {\n                        lfence: r,\n                        rfence: n,\n                        sep: i,\n                        cells: s,\n                        height: s.reduce((t, e) => Math.max(d(e), t), 0),\n                        width: s.map(m),\n                    };\n                }\n                function x(t, e) {\n                    const r = (e - m(t)) / 2,\n                        [n, o] =\n                            Math.floor(r) === r\n                                ? [r, r]\n                                : [Math.floor(r), Math.ceil(r)],\n                        i = t.split(/\\r\\n|\\r|\\n/),\n                        s = [],\n                        [a, l] = [\n                            new Array(n + 1).join(\"\\u2800\"),\n                            new Array(o + 1).join(\"\\u2800\"),\n                        ];\n                    for (const t of i) s.push(a + t + l);\n                    return s.join(\"\\n\");\n                }\n                function E(t) {\n                    const e = t.firstChild,\n                        r = f(t);\n                    if (e && e.nodeType === o.NodeType.ELEMENT_NODE) {\n                        if (\"ENGLISH\" === o.tagName(e)) return \"\\u2830\" + r;\n                        if (\"NUMBER\" === o.tagName(e)) return \"\\u283c\" + r;\n                    }\n                    return r;\n                }\n            },\n            182: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MarkupRenderer = void 0);\n                const n = r(4440),\n                    o = r(3921);\n                class i extends o.AbstractAudioRenderer {\n                    constructor() {\n                        super(...arguments),\n                            (this.ignoreElements = [n.personalityProps.LAYOUT]),\n                            (this.scaleFunction = null);\n                    }\n                    setScaleFunction(t, e, r, n, o = 0) {\n                        this.scaleFunction = (i) => {\n                            const s = (i - t) / (e - t),\n                                a = r * (1 - s) + n * s;\n                            return +(Math.round(a + \"e+\" + o) + \"e-\" + o);\n                        };\n                    }\n                    applyScaleFunction(t) {\n                        return this.scaleFunction ? this.scaleFunction(t) : t;\n                    }\n                    ignoreElement(t) {\n                        return -1 !== this.ignoreElements.indexOf(t);\n                    }\n                }\n                e.MarkupRenderer = i;\n            },\n            8990: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.PunctuationRenderer = void 0);\n                const n = r(4440),\n                    o = r(3921),\n                    i = r(3706);\n                class s extends o.AbstractAudioRenderer {\n                    markup(t) {\n                        const e = i.personalityMarkup(t);\n                        let r = \"\",\n                            o = null,\n                            s = !1;\n                        for (let t, a = 0; (t = e[a]); a++)\n                            i.isMarkupElement(t) ||\n                                (i.isPauseElement(t)\n                                    ? s && (o = i.mergePause(o, t, Math.max))\n                                    : (o &&\n                                          ((r += this.pause(\n                                              o[n.personalityProps.PAUSE]\n                                          )),\n                                          (o = null)),\n                                      (r +=\n                                          (s ? this.getSeparator() : \"\") +\n                                          this.merge(t.span)),\n                                      (s = !0)));\n                        return r;\n                    }\n                    pause(t) {\n                        let e;\n                        return (\n                            (e =\n                                \"number\" == typeof t\n                                    ? t <= 250\n                                        ? \"short\"\n                                        : t <= 500\n                                          ? \"medium\"\n                                          : \"long\"\n                                    : t),\n                            s.PAUSE_PUNCTUATION.get(e) || \"\"\n                        );\n                    }\n                }\n                (e.PunctuationRenderer = s),\n                    (s.PAUSE_PUNCTUATION = new Map([\n                        [\"short\", \",\"],\n                        [\"medium\", \";\"],\n                        [\"long\", \".\"],\n                    ]));\n            },\n            6660: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SableRenderer = void 0);\n                const n = r(4440),\n                    o = r(2456);\n                class i extends o.XmlRenderer {\n                    finalize(t) {\n                        return (\n                            '<?xml version=\"1.0\"?><!DOCTYPE SABLE PUBLIC \"-//SABLE//DTD SABLE speech mark up//EN\" \"Sable.v0_2.dtd\" []><SABLE>' +\n                            this.getSeparator() +\n                            t +\n                            this.getSeparator() +\n                            \"</SABLE>\"\n                        );\n                    }\n                    pause(t) {\n                        return (\n                            '<BREAK MSEC=\"' +\n                            this.pauseValue(t[n.personalityProps.PAUSE]) +\n                            '\"/>'\n                        );\n                    }\n                    prosodyElement(t, e) {\n                        switch (((e = this.applyScaleFunction(e)), t)) {\n                            case n.personalityProps.PITCH:\n                                return '<PITCH RANGE=\"' + e + '%\">';\n                            case n.personalityProps.RATE:\n                                return '<RATE SPEED=\"' + e + '%\">';\n                            case n.personalityProps.VOLUME:\n                                return '<VOLUME LEVEL=\"' + e + '%\">';\n                            default:\n                                return (\n                                    \"<\" +\n                                    t.toUpperCase() +\n                                    ' VALUE=\"' +\n                                    e +\n                                    '\">'\n                                );\n                        }\n                    }\n                    closeTag(t) {\n                        return \"</\" + t.toUpperCase() + \">\";\n                    }\n                }\n                e.SableRenderer = i;\n            },\n            9536: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Span = void 0);\n                e.Span = class {\n                    constructor(t, e) {\n                        (this.speech = t), (this.attributes = e);\n                    }\n                };\n            },\n            7504: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SsmlRenderer = void 0);\n                const n = r(5897),\n                    o = r(4440),\n                    i = r(2456);\n                class s extends i.XmlRenderer {\n                    finalize(t) {\n                        return (\n                            '<?xml version=\"1.0\"?><speak version=\"1.1\" xmlns=\"http://www.w3.org/2001/10/synthesis\"><prosody rate=\"' +\n                            n.default.getInstance().getRate() +\n                            '%\">' +\n                            this.getSeparator() +\n                            t +\n                            this.getSeparator() +\n                            \"</prosody></speak>\"\n                        );\n                    }\n                    pause(t) {\n                        return (\n                            '<break time=\"' +\n                            this.pauseValue(t[o.personalityProps.PAUSE]) +\n                            'ms\"/>'\n                        );\n                    }\n                    prosodyElement(t, e) {\n                        const r =\n                            (e = Math.floor(this.applyScaleFunction(e))) < 0\n                                ? e.toString()\n                                : \"+\" + e.toString();\n                        return (\n                            \"<prosody \" +\n                            t.toLowerCase() +\n                            '=\"' +\n                            r +\n                            (t === o.personalityProps.VOLUME ? \">\" : '%\">')\n                        );\n                    }\n                    closeTag(t) {\n                        return \"</prosody>\";\n                    }\n                }\n                e.SsmlRenderer = s;\n            },\n            3757: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SsmlStepRenderer = void 0);\n                const n = r(7504);\n                class o extends n.SsmlRenderer {\n                    markup(t) {\n                        return (o.MARKS = {}), super.markup(t);\n                    }\n                    merge(t) {\n                        const e = [];\n                        for (let r = 0; r < t.length; r++) {\n                            const n = t[r],\n                                i = n.attributes.extid;\n                            i &&\n                                !o.MARKS[i] &&\n                                (e.push('<mark name=\"' + i + '\"/>'),\n                                (o.MARKS[i] = !0)),\n                                1 === n.speech.length &&\n                                n.speech.match(/[a-zA-Z]/)\n                                    ? e.push(\n                                          '<say-as interpret-as=\"' +\n                                              o.CHARACTER_ATTR +\n                                              '\">' +\n                                              n.speech +\n                                              \"</say-as>\"\n                                      )\n                                    : e.push(n.speech);\n                        }\n                        return e.join(this.getSeparator());\n                    }\n                }\n                (e.SsmlStepRenderer = o),\n                    (o.CHARACTER_ATTR = \"character\"),\n                    (o.MARKS = {});\n            },\n            4032: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.StringRenderer = void 0);\n                const n = r(3921),\n                    o = r(3706);\n                class i extends n.AbstractAudioRenderer {\n                    markup(t) {\n                        let e = \"\";\n                        const r = (0, o.personalityMarkup)(t).filter(\n                            (t) => t.span\n                        );\n                        if (!r.length) return e;\n                        const n = r.length - 1;\n                        for (let t, o = 0; (t = r[o]); o++) {\n                            if ((t.span && (e += this.merge(t.span)), o >= n))\n                                continue;\n                            const r = t.join;\n                            e += void 0 === r ? this.getSeparator() : r;\n                        }\n                        return e;\n                    }\n                }\n                e.StringRenderer = i;\n            },\n            2456: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.XmlRenderer = void 0);\n                const n = r(5897),\n                    o = r(3706),\n                    i = r(182);\n                class s extends i.MarkupRenderer {\n                    markup(t) {\n                        this.setScaleFunction(-2, 2, -100, 100, 2);\n                        const e = o.personalityMarkup(t),\n                            r = [],\n                            i = [];\n                        for (let t, s = 0; (t = e[s]); s++)\n                            if (t.span) r.push(this.merge(t.span));\n                            else if (o.isPauseElement(t)) r.push(this.pause(t));\n                            else {\n                                if (t.close.length)\n                                    for (let e = 0; e < t.close.length; e++) {\n                                        const e = i.pop();\n                                        if (-1 === t.close.indexOf(e))\n                                            throw new n.SREError(\n                                                \"Unknown closing markup element: \" +\n                                                    e\n                                            );\n                                        r.push(this.closeTag(e));\n                                    }\n                                if (t.open.length) {\n                                    o.sortClose(\n                                        t.open.slice(),\n                                        e.slice(s + 1)\n                                    ).forEach((e) => {\n                                        r.push(this.prosodyElement(e, t[e])),\n                                            i.push(e);\n                                    });\n                                }\n                            }\n                        return r.join(\" \");\n                    }\n                }\n                e.XmlRenderer = s;\n            },\n            707: function (t, e) {\n                function r(t, e) {\n                    return t ? (e ? t.filter((t) => e.indexOf(t) < 0) : t) : [];\n                }\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.union =\n                        e.setdifference =\n                        e.interleaveLists =\n                        e.removeEmpty =\n                            void 0),\n                    (e.removeEmpty = function (t) {\n                        return t.filter((t) => t);\n                    }),\n                    (e.interleaveLists = function (t, e) {\n                        const r = [];\n                        for (; t.length || e.length; )\n                            t.length && r.push(t.shift()),\n                                e.length && r.push(e.shift());\n                        return r;\n                    }),\n                    (e.setdifference = r),\n                    (e.union = function (t, e) {\n                        return t && e ? t.concat(r(e, t)) : t || e || [];\n                    });\n            },\n            2139: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.loadScript =\n                        e.loadMapsForIE_ =\n                        e.installWGXpath_ =\n                        e.loadWGXpath_ =\n                        e.mapsForIE =\n                        e.detectEdge =\n                        e.detectIE =\n                            void 0);\n                const n = r(2315),\n                    o = r(5274);\n                function i(t) {\n                    l(n.default.WGXpath), s(t);\n                }\n                function s(t, e) {\n                    let r = e || 1;\n                    \"undefined\" == typeof wgxpath && r < 10\n                        ? setTimeout(function () {\n                              s(t, r++);\n                          }, 200)\n                        : r >= 10 ||\n                          ((n.default.wgxpath = wgxpath),\n                          t\n                              ? n.default.wgxpath.install({\n                                    document: document,\n                                })\n                              : n.default.wgxpath.install(),\n                          (o.xpath.evaluate = document.evaluate),\n                          (o.xpath.result = XPathResult),\n                          (o.xpath.createNSResolver =\n                              document.createNSResolver));\n                }\n                function a() {\n                    l(n.default.mathmapsIePath);\n                }\n                function l(t) {\n                    const e = n.default.document.createElement(\"script\");\n                    (e.type = \"text/javascript\"),\n                        (e.src = t),\n                        n.default.document.head\n                            ? n.default.document.head.appendChild(e)\n                            : n.default.document.body.appendChild(e);\n                }\n                (e.detectIE = function () {\n                    return (\n                        \"undefined\" != typeof window &&\n                        \"ActiveXObject\" in window &&\n                        \"clipboardData\" in window &&\n                        (a(), i(), !0)\n                    );\n                }),\n                    (e.detectEdge = function () {\n                        var t;\n                        return (\n                            \"undefined\" != typeof window &&\n                            \"MSGestureEvent\" in window &&\n                            null ===\n                                (null === (t = window.chrome) || void 0 === t\n                                    ? void 0\n                                    : t.loadTimes) &&\n                            ((document.evaluate = null), i(!0), !0)\n                        );\n                    }),\n                    (e.mapsForIE = null),\n                    (e.loadWGXpath_ = i),\n                    (e.installWGXpath_ = s),\n                    (e.loadMapsForIE_ = a),\n                    (e.loadScript = l);\n            },\n            2057: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Debugger = void 0);\n                const n = r(2315);\n                class o {\n                    constructor() {\n                        (this.isActive_ = !1),\n                            (this.outputFunction_ = console.info),\n                            (this.stream_ = null);\n                    }\n                    static getInstance() {\n                        return (o.instance = o.instance || new o()), o.instance;\n                    }\n                    init(t) {\n                        t && this.startDebugFile_(t), (this.isActive_ = !0);\n                    }\n                    output(...t) {\n                        this.isActive_ && this.output_(t);\n                    }\n                    generateOutput(t) {\n                        this.isActive_ && this.output_(t.apply(t, []));\n                    }\n                    exit(t = () => {}) {\n                        this.isActive_ &&\n                            this.stream_ &&\n                            this.stream_.end(\"\", \"\", t);\n                    }\n                    startDebugFile_(t) {\n                        (this.stream_ = n.default.fs.createWriteStream(t)),\n                            (this.outputFunction_ = function (...t) {\n                                this.stream_.write(t.join(\" \")),\n                                    this.stream_.write(\"\\n\");\n                            }.bind(this)),\n                            this.stream_.on(\n                                \"error\",\n                                function (t) {\n                                    console.info(\n                                        \"Invalid log file. Debug information sent to console.\"\n                                    ),\n                                        (this.outputFunction_ = console.info);\n                                }.bind(this)\n                            ),\n                            this.stream_.on(\"finish\", function () {\n                                console.info(\"Finalizing debug file.\");\n                            });\n                    }\n                    output_(t) {\n                        this.outputFunction_.apply(\n                            console.info === this.outputFunction_\n                                ? console\n                                : this.outputFunction_,\n                            [\"Speech Rule Engine Debugger:\"].concat(t)\n                        );\n                    }\n                }\n                e.Debugger = o;\n            },\n            5740: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.serializeXml =\n                        e.cloneNode =\n                        e.tagName =\n                        e.querySelectorAll =\n                        e.querySelectorAllByAttrValue =\n                        e.querySelectorAllByAttr =\n                        e.formatXml =\n                        e.createTextNode =\n                        e.createElementNS =\n                        e.createElement =\n                        e.replaceNode =\n                        e.NodeType =\n                        e.parseInput =\n                        e.XML_ENTITIES =\n                        e.trimInput_ =\n                        e.toArray =\n                            void 0);\n                const n = r(5897),\n                    o = r(4440),\n                    i = r(2315),\n                    s = r(5274);\n                function a(t) {\n                    const e = [];\n                    for (let r = 0, n = t.length; r < n; r++) e.push(t[r]);\n                    return e;\n                }\n                function l(t) {\n                    return (t = t.replace(/&nbsp;/g, \"\\xa0\"))\n                        .replace(/>[ \\f\\n\\r\\t\\v\\u200b]+</g, \"><\")\n                        .trim();\n                }\n                function c(t, e) {\n                    if (!e) return [!1, \"\"];\n                    const r = t.match(/^<([^> ]+).*>/),\n                        n = e.match(/^<\\/([^>]+)>(.*)/);\n                    return r && n && r[1] === n[1] ? [!0, n[2]] : [!1, \"\"];\n                }\n                (e.toArray = a),\n                    (e.trimInput_ = l),\n                    (e.XML_ENTITIES = {\n                        \"&lt;\": !0,\n                        \"&gt;\": !0,\n                        \"&amp;\": !0,\n                        \"&quot;\": !0,\n                        \"&apos;\": !0,\n                    }),\n                    (e.parseInput = function (t) {\n                        const e = new i.default.xmldom.DOMParser(),\n                            r = l(t),\n                            a = !!r.match(/&(?!lt|gt|amp|quot|apos)\\w+;/g);\n                        if (!r) throw new Error(\"Empty input!\");\n                        try {\n                            const t = e.parseFromString(\n                                r,\n                                a ? \"text/html\" : \"text/xml\"\n                            );\n                            return n.default.getInstance().mode === o.Mode.HTTP\n                                ? ((s.xpath.currentDocument = t),\n                                  a ? t.body.childNodes[0] : t.documentElement)\n                                : t.documentElement;\n                        } catch (t) {\n                            throw new n.SREError(\"Illegal input: \" + t.message);\n                        }\n                    }),\n                    (function (t) {\n                        (t[(t.ELEMENT_NODE = 1)] = \"ELEMENT_NODE\"),\n                            (t[(t.ATTRIBUTE_NODE = 2)] = \"ATTRIBUTE_NODE\"),\n                            (t[(t.TEXT_NODE = 3)] = \"TEXT_NODE\"),\n                            (t[(t.CDATA_SECTION_NODE = 4)] =\n                                \"CDATA_SECTION_NODE\"),\n                            (t[(t.ENTITY_REFERENCE_NODE = 5)] =\n                                \"ENTITY_REFERENCE_NODE\"),\n                            (t[(t.ENTITY_NODE = 6)] = \"ENTITY_NODE\"),\n                            (t[(t.PROCESSING_INSTRUCTION_NODE = 7)] =\n                                \"PROCESSING_INSTRUCTION_NODE\"),\n                            (t[(t.COMMENT_NODE = 8)] = \"COMMENT_NODE\"),\n                            (t[(t.DOCUMENT_NODE = 9)] = \"DOCUMENT_NODE\"),\n                            (t[(t.DOCUMENT_TYPE_NODE = 10)] =\n                                \"DOCUMENT_TYPE_NODE\"),\n                            (t[(t.DOCUMENT_FRAGMENT_NODE = 11)] =\n                                \"DOCUMENT_FRAGMENT_NODE\"),\n                            (t[(t.NOTATION_NODE = 12)] = \"NOTATION_NODE\");\n                    })(e.NodeType || (e.NodeType = {})),\n                    (e.replaceNode = function (t, e) {\n                        t.parentNode &&\n                            (t.parentNode.insertBefore(e, t),\n                            t.parentNode.removeChild(t));\n                    }),\n                    (e.createElement = function (t) {\n                        return i.default.document.createElement(t);\n                    }),\n                    (e.createElementNS = function (t, e) {\n                        return i.default.document.createElementNS(t, e);\n                    }),\n                    (e.createTextNode = function (t) {\n                        return i.default.document.createTextNode(t);\n                    }),\n                    (e.formatXml = function (t) {\n                        let e = \"\",\n                            r = /(>)(<)(\\/*)/g,\n                            n = 0,\n                            o = (t = t.replace(r, \"$1\\r\\n$2$3\")).split(\"\\r\\n\");\n                        for (\n                            r = /(\\.)*(<)(\\/*)/g,\n                                o = o\n                                    .map((t) =>\n                                        t.replace(r, \"$1\\r\\n$2$3\").split(\"\\r\\n\")\n                                    )\n                                    .reduce((t, e) => t.concat(e), []);\n                            o.length;\n\n                        ) {\n                            let t = o.shift();\n                            if (!t) continue;\n                            let r = 0;\n                            if (t.match(/^<\\w[^>/]*>[^>]+$/)) {\n                                const e = c(t, o[0]);\n                                e[0]\n                                    ? e[1]\n                                        ? ((t += o\n                                              .shift()\n                                              .slice(0, -e[1].length)),\n                                          e[1].trim() && o.unshift(e[1]))\n                                        : (t += o.shift())\n                                    : (r = 1);\n                            } else if (t.match(/^<\\/\\w/)) 0 !== n && (n -= 1);\n                            else if (t.match(/^<\\w[^>]*[^/]>.*$/)) r = 1;\n                            else if (t.match(/^<\\w[^>]*\\/>.+$/)) {\n                                const e = t.indexOf(\">\") + 1;\n                                t.slice(e).trim() && o.unshift(),\n                                    (t = t.slice(0, e));\n                            } else r = 0;\n                            (e += new Array(n + 1).join(\"  \") + t + \"\\r\\n\"),\n                                (n += r);\n                        }\n                        return e;\n                    }),\n                    (e.querySelectorAllByAttr = function (t, e) {\n                        return t.querySelectorAll\n                            ? a(t.querySelectorAll(`[${e}]`))\n                            : s.evalXPath(`.//*[@${e}]`, t);\n                    }),\n                    (e.querySelectorAllByAttrValue = function (t, e, r) {\n                        return t.querySelectorAll\n                            ? a(t.querySelectorAll(`[${e}=\"${r}\"]`))\n                            : s.evalXPath(`.//*[@${e}=\"${r}\"]`, t);\n                    }),\n                    (e.querySelectorAll = function (t, e) {\n                        return t.querySelectorAll\n                            ? a(t.querySelectorAll(e))\n                            : s.evalXPath(`.//${e}`, t);\n                    }),\n                    (e.tagName = function (t) {\n                        return t.tagName.toUpperCase();\n                    }),\n                    (e.cloneNode = function (t) {\n                        return t.cloneNode(!0);\n                    }),\n                    (e.serializeXml = function (t) {\n                        return new i.default.xmldom.XMLSerializer().serializeToString(\n                            t\n                        );\n                    });\n            },\n            5897: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.EnginePromise = e.SREError = void 0);\n                const n = r(1676),\n                    o = r(4440),\n                    i = r(2057),\n                    s = r(1377);\n                class a extends Error {\n                    constructor(t = \"\") {\n                        super(), (this.message = t), (this.name = \"SRE Error\");\n                    }\n                }\n                e.SREError = a;\n                class l {\n                    constructor() {\n                        (this.customLoader = null),\n                            (this.parsers = {}),\n                            (this.comparator = null),\n                            (this.mode = o.Mode.SYNC),\n                            (this.init = !0),\n                            (this.delay = !1),\n                            (this.comparators = {}),\n                            (this.domain = \"mathspeak\"),\n                            (this.style =\n                                n.DynamicCstr.DEFAULT_VALUES[n.Axis.STYLE]),\n                            (this._defaultLocale =\n                                n.DynamicCstr.DEFAULT_VALUES[n.Axis.LOCALE]),\n                            (this.locale = this.defaultLocale),\n                            (this.subiso = \"\"),\n                            (this.modality =\n                                n.DynamicCstr.DEFAULT_VALUES[n.Axis.MODALITY]),\n                            (this.speech = o.Speech.NONE),\n                            (this.markup = o.Markup.NONE),\n                            (this.walker = \"Table\"),\n                            (this.structure = !1),\n                            (this.ruleSets = []),\n                            (this.strict = !1),\n                            (this.isIE = !1),\n                            (this.isEdge = !1),\n                            (this.rate = \"100\"),\n                            (this.pprint = !1),\n                            (this.config = !1),\n                            (this.rules = \"\"),\n                            (this.prune = \"\"),\n                            (this.evaluator = l.defaultEvaluator),\n                            (this.defaultParser = new n.DynamicCstrParser(\n                                n.DynamicCstr.DEFAULT_ORDER\n                            )),\n                            (this.parser = this.defaultParser),\n                            (this.dynamicCstr = n.DynamicCstr.defaultCstr());\n                    }\n                    set defaultLocale(t) {\n                        this._defaultLocale = s.Variables.ensureLocale(\n                            t,\n                            this._defaultLocale\n                        );\n                    }\n                    get defaultLocale() {\n                        return this._defaultLocale;\n                    }\n                    static getInstance() {\n                        return (l.instance = l.instance || new l()), l.instance;\n                    }\n                    static defaultEvaluator(t, e) {\n                        return t;\n                    }\n                    static evaluateNode(t) {\n                        return l.nodeEvaluator(t);\n                    }\n                    getRate() {\n                        const t = parseInt(this.rate, 10);\n                        return isNaN(t) ? 100 : t;\n                    }\n                    setDynamicCstr(t) {\n                        if (\n                            (this.defaultLocale &&\n                                (n.DynamicCstr.DEFAULT_VALUES[n.Axis.LOCALE] =\n                                    this.defaultLocale),\n                            t)\n                        ) {\n                            const e = Object.keys(t);\n                            for (let r = 0; r < e.length; r++) {\n                                const o = e[r];\n                                if (\n                                    -1 !==\n                                    n.DynamicCstr.DEFAULT_ORDER.indexOf(o)\n                                ) {\n                                    const e = t[o];\n                                    this[o] = e;\n                                }\n                            }\n                        }\n                        o.DOMAIN_TO_STYLES[this.domain] = this.style;\n                        const e = [\n                                this.locale,\n                                this.modality,\n                                this.domain,\n                                this.style,\n                            ].join(\".\"),\n                            r = n.DynamicProperties.createProp(\n                                [n.DynamicCstr.DEFAULT_VALUES[n.Axis.LOCALE]],\n                                [n.DynamicCstr.DEFAULT_VALUES[n.Axis.MODALITY]],\n                                [n.DynamicCstr.DEFAULT_VALUES[n.Axis.DOMAIN]],\n                                [n.DynamicCstr.DEFAULT_VALUES[n.Axis.STYLE]]\n                            ),\n                            i = this.comparators[this.domain],\n                            s = this.parsers[this.domain];\n                        (this.parser = s || this.defaultParser),\n                            (this.dynamicCstr = this.parser.parse(e)),\n                            this.dynamicCstr.updateProperties(\n                                r.getProperties()\n                            ),\n                            (this.comparator = i\n                                ? i()\n                                : new n.DefaultComparator(this.dynamicCstr));\n                    }\n                    configurate(t) {\n                        this.mode !== o.Mode.HTTP ||\n                            this.config ||\n                            (!(function (t) {\n                                const e =\n                                    document.documentElement.querySelectorAll(\n                                        'script[type=\"text/x-sre-config\"]'\n                                    );\n                                for (let r = 0, n = e.length; r < n; r++) {\n                                    let n;\n                                    try {\n                                        n = e[r].innerHTML;\n                                        const o = JSON.parse(n);\n                                        for (const e in o) t[e] = o[e];\n                                    } catch (t) {\n                                        i.Debugger.getInstance().output(\n                                            \"Illegal configuration \",\n                                            n\n                                        );\n                                    }\n                                }\n                            })(t),\n                            (this.config = !0)),\n                            (function (t) {\n                                if (\"undefined\" != typeof SREfeature)\n                                    for (const [e, r] of Object.entries(\n                                        SREfeature\n                                    ))\n                                        t[e] = r;\n                            })(t);\n                    }\n                    setCustomLoader(t) {\n                        t && (this.customLoader = t);\n                    }\n                }\n                (e.default = l),\n                    (l.BINARY_FEATURES = [\"strict\", \"structure\", \"pprint\"]),\n                    (l.STRING_FEATURES = [\n                        \"markup\",\n                        \"style\",\n                        \"domain\",\n                        \"speech\",\n                        \"walker\",\n                        \"defaultLocale\",\n                        \"locale\",\n                        \"delay\",\n                        \"modality\",\n                        \"rate\",\n                        \"rules\",\n                        \"subiso\",\n                        \"prune\",\n                    ]),\n                    (l.nodeEvaluator = function (t) {\n                        return [];\n                    });\n                class c {\n                    static get(t = l.getInstance().locale) {\n                        return c.promises[t] || Promise.resolve(\"\");\n                    }\n                    static getall() {\n                        return Promise.all(Object.values(c.promises));\n                    }\n                }\n                (e.EnginePromise = c), (c.loaded = {}), (c.promises = {});\n            },\n            4440: function (t, e) {\n                var r;\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.DOMAIN_TO_STYLES =\n                        e.Markup =\n                        e.Speech =\n                        e.personalityPropList =\n                        e.personalityProps =\n                        e.Mode =\n                            void 0),\n                    (function (t) {\n                        (t.SYNC = \"sync\"),\n                            (t.ASYNC = \"async\"),\n                            (t.HTTP = \"http\");\n                    })(e.Mode || (e.Mode = {})),\n                    (function (t) {\n                        (t.PITCH = \"pitch\"),\n                            (t.RATE = \"rate\"),\n                            (t.VOLUME = \"volume\"),\n                            (t.PAUSE = \"pause\"),\n                            (t.JOIN = \"join\"),\n                            (t.LAYOUT = \"layout\");\n                    })((r = e.personalityProps || (e.personalityProps = {}))),\n                    (e.personalityPropList = [\n                        r.PITCH,\n                        r.RATE,\n                        r.VOLUME,\n                        r.PAUSE,\n                        r.JOIN,\n                    ]),\n                    (function (t) {\n                        (t.NONE = \"none\"),\n                            (t.SHALLOW = \"shallow\"),\n                            (t.DEEP = \"deep\");\n                    })(e.Speech || (e.Speech = {})),\n                    (function (t) {\n                        (t.NONE = \"none\"),\n                            (t.LAYOUT = \"layout\"),\n                            (t.PUNCTUATION = \"punctuation\"),\n                            (t.SSML = \"ssml\"),\n                            (t.SSML_STEP = \"ssml_step\"),\n                            (t.ACSS = \"acss\"),\n                            (t.SABLE = \"sable\"),\n                            (t.VOICEXML = \"voicexml\");\n                    })(e.Markup || (e.Markup = {})),\n                    (e.DOMAIN_TO_STYLES = {\n                        mathspeak: \"default\",\n                        clearspeak: \"default\",\n                    });\n            },\n            6828: function (t, e, r) {\n                var n =\n                    (this && this.__awaiter) ||\n                    function (t, e, r, n) {\n                        return new (r || (r = Promise))(function (o, i) {\n                            function s(t) {\n                                try {\n                                    l(n.next(t));\n                                } catch (t) {\n                                    i(t);\n                                }\n                            }\n                            function a(t) {\n                                try {\n                                    l(n.throw(t));\n                                } catch (t) {\n                                    i(t);\n                                }\n                            }\n                            function l(t) {\n                                var e;\n                                t.done\n                                    ? o(t.value)\n                                    : ((e = t.value),\n                                      e instanceof r\n                                          ? e\n                                          : new r(function (t) {\n                                                t(e);\n                                            })).then(s, a);\n                            }\n                            l((n = n.apply(t, e || [])).next());\n                        });\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.setup = void 0);\n                const o = r(7491),\n                    i = r(6141),\n                    s = r(2139),\n                    a = r(5897),\n                    l = r(7248),\n                    c = r(2315);\n                e.setup = function (t) {\n                    return n(this, void 0, void 0, function* () {\n                        const e = a.default.getInstance();\n                        \"default\" !== t.domain ||\n                            (\"speech\" !== t.modality &&\n                                t.modality &&\n                                \"speech\" !== e.modality) ||\n                            (t.domain = \"mathspeak\");\n                        const r = (r) => {\n                            void 0 !== t[r] && (e[r] = t[r]);\n                        };\n                        return (\n                            r(\"mode\"),\n                            e.configurate(t),\n                            a.default.BINARY_FEATURES.forEach((r) => {\n                                void 0 !== t[r] && (e[r] = !!t[r]);\n                            }),\n                            a.default.STRING_FEATURES.forEach(r),\n                            t.json && (c.default.jsonPath = l.makePath(t.json)),\n                            t.xpath && (c.default.WGXpath = t.xpath),\n                            e.setCustomLoader(t.custom),\n                            (function (t) {\n                                (t.isIE = s.detectIE()),\n                                    (t.isEdge = s.detectEdge());\n                            })(e),\n                            o.setLocale(),\n                            e.setDynamicCstr(),\n                            e.init\n                                ? ((a.EnginePromise.promises.init = new Promise(\n                                      (t, e) => {\n                                          setTimeout(() => {\n                                              t(\"init\");\n                                          }, 10);\n                                      }\n                                  )),\n                                  (e.init = !1),\n                                  a.EnginePromise.get())\n                                : e.delay\n                                  ? ((e.delay = !1), a.EnginePromise.get())\n                                  : i.loadLocale()\n                        );\n                    });\n                };\n            },\n            8496: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Event = e.EventType = e.Move = e.KeyCode = void 0),\n                    (function (t) {\n                        (t[(t.ENTER = 13)] = \"ENTER\"),\n                            (t[(t.ESC = 27)] = \"ESC\"),\n                            (t[(t.SPACE = 32)] = \"SPACE\"),\n                            (t[(t.PAGE_UP = 33)] = \"PAGE_UP\"),\n                            (t[(t.PAGE_DOWN = 34)] = \"PAGE_DOWN\"),\n                            (t[(t.END = 35)] = \"END\"),\n                            (t[(t.HOME = 36)] = \"HOME\"),\n                            (t[(t.LEFT = 37)] = \"LEFT\"),\n                            (t[(t.UP = 38)] = \"UP\"),\n                            (t[(t.RIGHT = 39)] = \"RIGHT\"),\n                            (t[(t.DOWN = 40)] = \"DOWN\"),\n                            (t[(t.TAB = 9)] = \"TAB\"),\n                            (t[(t.LESS = 188)] = \"LESS\"),\n                            (t[(t.GREATER = 190)] = \"GREATER\"),\n                            (t[(t.DASH = 189)] = \"DASH\"),\n                            (t[(t.ZERO = 48)] = \"ZERO\"),\n                            (t[(t.ONE = 49)] = \"ONE\"),\n                            (t[(t.TWO = 50)] = \"TWO\"),\n                            (t[(t.THREE = 51)] = \"THREE\"),\n                            (t[(t.FOUR = 52)] = \"FOUR\"),\n                            (t[(t.FIVE = 53)] = \"FIVE\"),\n                            (t[(t.SIX = 54)] = \"SIX\"),\n                            (t[(t.SEVEN = 55)] = \"SEVEN\"),\n                            (t[(t.EIGHT = 56)] = \"EIGHT\"),\n                            (t[(t.NINE = 57)] = \"NINE\"),\n                            (t[(t.A = 65)] = \"A\"),\n                            (t[(t.B = 66)] = \"B\"),\n                            (t[(t.C = 67)] = \"C\"),\n                            (t[(t.D = 68)] = \"D\"),\n                            (t[(t.E = 69)] = \"E\"),\n                            (t[(t.F = 70)] = \"F\"),\n                            (t[(t.G = 71)] = \"G\"),\n                            (t[(t.H = 72)] = \"H\"),\n                            (t[(t.I = 73)] = \"I\"),\n                            (t[(t.J = 74)] = \"J\"),\n                            (t[(t.K = 75)] = \"K\"),\n                            (t[(t.L = 76)] = \"L\"),\n                            (t[(t.M = 77)] = \"M\"),\n                            (t[(t.N = 78)] = \"N\"),\n                            (t[(t.O = 79)] = \"O\"),\n                            (t[(t.P = 80)] = \"P\"),\n                            (t[(t.Q = 81)] = \"Q\"),\n                            (t[(t.R = 82)] = \"R\"),\n                            (t[(t.S = 83)] = \"S\"),\n                            (t[(t.T = 84)] = \"T\"),\n                            (t[(t.U = 85)] = \"U\"),\n                            (t[(t.V = 86)] = \"V\"),\n                            (t[(t.W = 87)] = \"W\"),\n                            (t[(t.X = 88)] = \"X\"),\n                            (t[(t.Y = 89)] = \"Y\"),\n                            (t[(t.Z = 90)] = \"Z\");\n                    })(e.KeyCode || (e.KeyCode = {})),\n                    (e.Move = new Map([\n                        [13, \"ENTER\"],\n                        [27, \"ESC\"],\n                        [32, \"SPACE\"],\n                        [33, \"PAGE_UP\"],\n                        [34, \"PAGE_DOWN\"],\n                        [35, \"END\"],\n                        [36, \"HOME\"],\n                        [37, \"LEFT\"],\n                        [38, \"UP\"],\n                        [39, \"RIGHT\"],\n                        [40, \"DOWN\"],\n                        [9, \"TAB\"],\n                        [188, \"LESS\"],\n                        [190, \"GREATER\"],\n                        [189, \"DASH\"],\n                        [48, \"ZERO\"],\n                        [49, \"ONE\"],\n                        [50, \"TWO\"],\n                        [51, \"THREE\"],\n                        [52, \"FOUR\"],\n                        [53, \"FIVE\"],\n                        [54, \"SIX\"],\n                        [55, \"SEVEN\"],\n                        [56, \"EIGHT\"],\n                        [57, \"NINE\"],\n                        [65, \"A\"],\n                        [66, \"B\"],\n                        [67, \"C\"],\n                        [68, \"D\"],\n                        [69, \"E\"],\n                        [70, \"F\"],\n                        [71, \"G\"],\n                        [72, \"H\"],\n                        [73, \"I\"],\n                        [74, \"J\"],\n                        [75, \"K\"],\n                        [76, \"L\"],\n                        [77, \"M\"],\n                        [78, \"N\"],\n                        [79, \"O\"],\n                        [80, \"P\"],\n                        [81, \"Q\"],\n                        [82, \"R\"],\n                        [83, \"S\"],\n                        [84, \"T\"],\n                        [85, \"U\"],\n                        [86, \"V\"],\n                        [87, \"W\"],\n                        [88, \"X\"],\n                        [89, \"Y\"],\n                        [90, \"Z\"],\n                    ])),\n                    (function (t) {\n                        (t.CLICK = \"click\"),\n                            (t.DBLCLICK = \"dblclick\"),\n                            (t.MOUSEDOWN = \"mousedown\"),\n                            (t.MOUSEUP = \"mouseup\"),\n                            (t.MOUSEOVER = \"mouseover\"),\n                            (t.MOUSEOUT = \"mouseout\"),\n                            (t.MOUSEMOVE = \"mousemove\"),\n                            (t.SELECTSTART = \"selectstart\"),\n                            (t.KEYPRESS = \"keypress\"),\n                            (t.KEYDOWN = \"keydown\"),\n                            (t.KEYUP = \"keyup\"),\n                            (t.TOUCHSTART = \"touchstart\"),\n                            (t.TOUCHMOVE = \"touchmove\"),\n                            (t.TOUCHEND = \"touchend\"),\n                            (t.TOUCHCANCEL = \"touchcancel\");\n                    })(e.EventType || (e.EventType = {}));\n                e.Event = class {\n                    constructor(t, e, r) {\n                        (this.src = t), (this.type = e), (this.callback = r);\n                    }\n                    add() {\n                        this.src.addEventListener(this.type, this.callback);\n                    }\n                    remove() {\n                        this.src.removeEventListener(this.type, this.callback);\n                    }\n                };\n            },\n            7248: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.localePath = e.makePath = void 0);\n                const n = r(2315);\n                function o(t) {\n                    return t.match(\"/$\") ? t : t + \"/\";\n                }\n                (e.makePath = o),\n                    (e.localePath = function (t, e = \"json\") {\n                        return (\n                            o(n.default.jsonPath) +\n                            t +\n                            (e.match(/^\\./) ? e : \".\" + e)\n                        );\n                    });\n            },\n            3769: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.KeyProcessor = e.Processor = void 0);\n                const n = r(8496);\n                class o {\n                    constructor(t, e) {\n                        (this.name = t),\n                            (this.process = e.processor),\n                            (this.postprocess =\n                                e.postprocessor || ((t, e) => t)),\n                            (this.processor = this.postprocess\n                                ? function (t) {\n                                      return this.postprocess(\n                                          this.process(t),\n                                          t\n                                      );\n                                  }\n                                : this.process),\n                            (this.print = e.print || o.stringify_),\n                            (this.pprint = e.pprint || this.print);\n                    }\n                    static stringify_(t) {\n                        return t ? t.toString() : t;\n                    }\n                }\n                (e.Processor = o),\n                    (o.LocalState = {\n                        walker: null,\n                        speechGenerator: null,\n                        highlighter: null,\n                    });\n                class i extends o {\n                    constructor(t, e) {\n                        super(t, e), (this.key = e.key || i.getKey_);\n                    }\n                    static getKey_(t) {\n                        return \"string\" == typeof t\n                            ? n.KeyCode[t.toUpperCase()]\n                            : t;\n                    }\n                }\n                e.KeyProcessor = i;\n            },\n            6499: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.keypress =\n                        e.output =\n                        e.print =\n                        e.process =\n                        e.set =\n                            void 0);\n                const n = r(8290),\n                    o = r(5714),\n                    i = r(3090),\n                    s = r(4356),\n                    a = r(1414),\n                    l = r(9552),\n                    c = r(9543),\n                    u = r(3362),\n                    p = r(1204),\n                    h = r(5740),\n                    f = r(5897),\n                    d = r(4440),\n                    m = r(3769),\n                    y = r(5274),\n                    g = new Map();\n                function b(t) {\n                    g.set(t.name, t);\n                }\n                function v(t) {\n                    const e = g.get(t);\n                    if (!e) throw new f.SREError(\"Unknown processor \" + t);\n                    return e;\n                }\n                function _(t, e) {\n                    const r = v(t);\n                    try {\n                        return r.processor(e);\n                    } catch (t) {\n                        throw new f.SREError(\n                            \"Processing error for expression \" + e\n                        );\n                    }\n                }\n                function S(t, e) {\n                    const r = v(t);\n                    return f.default.getInstance().pprint\n                        ? r.pprint(e)\n                        : r.print(e);\n                }\n                (e.set = b),\n                    (e.process = _),\n                    (e.print = S),\n                    (e.output = function (t, e) {\n                        const r = v(t);\n                        try {\n                            const t = r.processor(e);\n                            return f.default.getInstance().pprint\n                                ? r.pprint(t)\n                                : r.print(t);\n                        } catch (t) {\n                            throw new f.SREError(\n                                \"Processing error for expression \" + e\n                            );\n                        }\n                    }),\n                    (e.keypress = function (t, e) {\n                        const r = v(t),\n                            n = r instanceof m.KeyProcessor ? r.key(e) : e,\n                            o = r.processor(n);\n                        return f.default.getInstance().pprint\n                            ? r.pprint(o)\n                            : r.print(o);\n                    }),\n                    b(\n                        new m.Processor(\"semantic\", {\n                            processor: function (t) {\n                                const e = h.parseInput(t);\n                                return a.xmlTree(e);\n                            },\n                            postprocessor: function (t, e) {\n                                const r = f.default.getInstance().speech;\n                                if (r === d.Speech.NONE) return t;\n                                const o = h.cloneNode(t);\n                                let i = c.computeMarkup(o);\n                                if (r === d.Speech.SHALLOW)\n                                    return (\n                                        t.setAttribute(\"speech\", n.finalize(i)),\n                                        t\n                                    );\n                                const s = y.evalXPath(\".//*[@id]\", t),\n                                    a = y.evalXPath(\".//*[@id]\", o);\n                                for (\n                                    let t, e, r = 0;\n                                    (t = s[r]), (e = a[r]);\n                                    r++\n                                )\n                                    (i = c.computeMarkup(e)),\n                                        t.setAttribute(\"speech\", n.finalize(i));\n                                return t;\n                            },\n                            pprint: function (t) {\n                                return h.formatXml(t.toString());\n                            },\n                        })\n                    ),\n                    b(\n                        new m.Processor(\"speech\", {\n                            processor: function (t) {\n                                const e = h.parseInput(t),\n                                    r = a.xmlTree(e),\n                                    o = c.computeSpeech(r);\n                                return n.finalize(n.markup(o));\n                            },\n                            pprint: function (t) {\n                                const e = t.toString();\n                                return n.isXml() ? h.formatXml(e) : e;\n                            },\n                        })\n                    ),\n                    b(\n                        new m.Processor(\"json\", {\n                            processor: function (t) {\n                                const e = h.parseInput(t);\n                                return a.getTree(e).toJson();\n                            },\n                            postprocessor: function (t, e) {\n                                const r = f.default.getInstance().speech;\n                                if (r === d.Speech.NONE) return t;\n                                const o = h.parseInput(e),\n                                    i = a.xmlTree(o),\n                                    s = c.computeMarkup(i);\n                                if (r === d.Speech.SHALLOW)\n                                    return (t.stree.speech = n.finalize(s)), t;\n                                const l = (t) => {\n                                    const e = y.evalXPath(\n                                            `.//*[@id=${t.id}]`,\n                                            i\n                                        )[0],\n                                        r = c.computeMarkup(e);\n                                    (t.speech = n.finalize(r)),\n                                        t.children && t.children.forEach(l);\n                                };\n                                return l(t.stree), t;\n                            },\n                            print: function (t) {\n                                return JSON.stringify(t);\n                            },\n                            pprint: function (t) {\n                                return JSON.stringify(t, null, 2);\n                            },\n                        })\n                    ),\n                    b(\n                        new m.Processor(\"description\", {\n                            processor: function (t) {\n                                const e = h.parseInput(t),\n                                    r = a.xmlTree(e);\n                                return c.computeSpeech(r);\n                            },\n                            print: function (t) {\n                                return JSON.stringify(t);\n                            },\n                            pprint: function (t) {\n                                return JSON.stringify(t, null, 2);\n                            },\n                        })\n                    ),\n                    b(\n                        new m.Processor(\"enriched\", {\n                            processor: function (t) {\n                                return o.semanticMathmlSync(t);\n                            },\n                            postprocessor: function (t, e) {\n                                const r = p.getSemanticRoot(t);\n                                let n;\n                                switch (f.default.getInstance().speech) {\n                                    case d.Speech.NONE:\n                                        break;\n                                    case d.Speech.SHALLOW:\n                                        (n = l.generator(\"Adhoc\")),\n                                            n.getSpeech(r, t);\n                                        break;\n                                    case d.Speech.DEEP:\n                                        (n = l.generator(\"Tree\")),\n                                            n.getSpeech(t, t);\n                                }\n                                return t;\n                            },\n                            pprint: function (t) {\n                                return h.formatXml(t.toString());\n                            },\n                        })\n                    ),\n                    b(\n                        new m.Processor(\"walker\", {\n                            processor: function (t) {\n                                const e = l.generator(\"Node\");\n                                (m.Processor.LocalState.speechGenerator = e),\n                                    e.setOptions({\n                                        modality:\n                                            f.default.getInstance().modality,\n                                        locale: f.default.getInstance().locale,\n                                        domain: f.default.getInstance().domain,\n                                        style: f.default.getInstance().style,\n                                    }),\n                                    (m.Processor.LocalState.highlighter =\n                                        i.highlighter(\n                                            { color: \"black\" },\n                                            { color: \"white\" },\n                                            { renderer: \"NativeMML\" }\n                                        ));\n                                const r = _(\"enriched\", t),\n                                    n = S(\"enriched\", r);\n                                return (\n                                    (m.Processor.LocalState.walker = u.walker(\n                                        f.default.getInstance().walker,\n                                        r,\n                                        e,\n                                        m.Processor.LocalState.highlighter,\n                                        n\n                                    )),\n                                    m.Processor.LocalState.walker\n                                );\n                            },\n                            print: function (t) {\n                                return m.Processor.LocalState.walker.speech();\n                            },\n                        })\n                    ),\n                    b(\n                        new m.KeyProcessor(\"move\", {\n                            processor: function (t) {\n                                if (!m.Processor.LocalState.walker) return null;\n                                return !1 ===\n                                    m.Processor.LocalState.walker.move(t)\n                                    ? n.error(t)\n                                    : m.Processor.LocalState.walker.speech();\n                            },\n                        })\n                    ),\n                    b(\n                        new m.Processor(\"number\", {\n                            processor: function (t) {\n                                const e = parseInt(t, 10);\n                                return isNaN(e)\n                                    ? \"\"\n                                    : s.LOCALE.NUMBERS.numberToWords(e);\n                            },\n                        })\n                    ),\n                    b(\n                        new m.Processor(\"ordinal\", {\n                            processor: function (t) {\n                                const e = parseInt(t, 10);\n                                return isNaN(e)\n                                    ? \"\"\n                                    : s.LOCALE.NUMBERS.wordOrdinal(e);\n                            },\n                        })\n                    ),\n                    b(\n                        new m.Processor(\"numericOrdinal\", {\n                            processor: function (t) {\n                                const e = parseInt(t, 10);\n                                return isNaN(e)\n                                    ? \"\"\n                                    : s.LOCALE.NUMBERS.numericOrdinal(e);\n                            },\n                        })\n                    ),\n                    b(\n                        new m.Processor(\"vulgar\", {\n                            processor: function (t) {\n                                const [e, r] = t\n                                    .split(\"/\")\n                                    .map((t) => parseInt(t, 10));\n                                return isNaN(e) || isNaN(r)\n                                    ? \"\"\n                                    : _(\n                                          \"speech\",\n                                          `<mfrac><mn>${e}</mn><mn>${r}</mn></mfrac>`\n                                      );\n                            },\n                        })\n                    );\n            },\n            2998: function (t, e, r) {\n                var n =\n                    (this && this.__awaiter) ||\n                    function (t, e, r, n) {\n                        return new (r || (r = Promise))(function (o, i) {\n                            function s(t) {\n                                try {\n                                    l(n.next(t));\n                                } catch (t) {\n                                    i(t);\n                                }\n                            }\n                            function a(t) {\n                                try {\n                                    l(n.throw(t));\n                                } catch (t) {\n                                    i(t);\n                                }\n                            }\n                            function l(t) {\n                                var e;\n                                t.done\n                                    ? o(t.value)\n                                    : ((e = t.value),\n                                      e instanceof r\n                                          ? e\n                                          : new r(function (t) {\n                                                t(e);\n                                            })).then(s, a);\n                            }\n                            l((n = n.apply(t, e || [])).next());\n                        });\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.localePath =\n                        e.exit =\n                        e.move =\n                        e.walk =\n                        e.processFile =\n                        e.file =\n                        e.vulgar =\n                        e.numericOrdinal =\n                        e.ordinal =\n                        e.number =\n                        e.toEnriched =\n                        e.toDescription =\n                        e.toJson =\n                        e.toSemantic =\n                        e.toSpeech =\n                        e.localeLoader =\n                        e.engineReady =\n                        e.engineSetup =\n                        e.setupEngine =\n                        e.version =\n                            void 0);\n                const o = r(5897),\n                    i = r(6828),\n                    s = r(4440),\n                    a = r(7248),\n                    l = r(6499),\n                    c = r(2315),\n                    u = r(1377),\n                    p = r(6141);\n                function h(t) {\n                    return n(this, void 0, void 0, function* () {\n                        return (0, i.setup)(t);\n                    });\n                }\n                function f(t, e) {\n                    return l.process(t, e);\n                }\n                function d(t, e, r) {\n                    switch (o.default.getInstance().mode) {\n                        case s.Mode.ASYNC:\n                            return (function (t, e, r) {\n                                return n(this, void 0, void 0, function* () {\n                                    const n =\n                                            yield c.default.fs.promises.readFile(\n                                                e,\n                                                { encoding: \"utf8\" }\n                                            ),\n                                        i = l.output(t, n);\n                                    if (r)\n                                        try {\n                                            c.default.fs.promises.writeFile(\n                                                r,\n                                                i\n                                            );\n                                        } catch (t) {\n                                            throw new o.SREError(\n                                                \"Can not write to file: \" + r\n                                            );\n                                        }\n                                    return i;\n                                });\n                            })(t, e, r);\n                        case s.Mode.SYNC:\n                            return (function (t, e, r) {\n                                const n = (function (t) {\n                                        let e;\n                                        try {\n                                            e = c.default.fs.readFileSync(t, {\n                                                encoding: \"utf8\",\n                                            });\n                                        } catch (e) {\n                                            throw new o.SREError(\n                                                \"Can not open file: \" + t\n                                            );\n                                        }\n                                        return e;\n                                    })(e),\n                                    i = l.output(t, n);\n                                if (r)\n                                    try {\n                                        c.default.fs.writeFileSync(r, i);\n                                    } catch (t) {\n                                        throw new o.SREError(\n                                            \"Can not write to file: \" + r\n                                        );\n                                    }\n                                return i;\n                            })(t, e, r);\n                        default:\n                            throw new o.SREError(\n                                `Can process files in ${o.default.getInstance().mode} mode`\n                            );\n                    }\n                }\n                (e.version = u.Variables.VERSION),\n                    (e.setupEngine = h),\n                    (e.engineSetup = function () {\n                        const t = [\"mode\"].concat(\n                                o.default.STRING_FEATURES,\n                                o.default.BINARY_FEATURES\n                            ),\n                            e = o.default.getInstance(),\n                            r = {};\n                        return (\n                            t.forEach(function (t) {\n                                r[t] = e[t];\n                            }),\n                            (r.json = c.default.jsonPath),\n                            (r.xpath = c.default.WGXpath),\n                            (r.rules = e.ruleSets.slice()),\n                            r\n                        );\n                    }),\n                    (e.engineReady = function () {\n                        return n(this, void 0, void 0, function* () {\n                            return h({}).then(() => o.EnginePromise.getall());\n                        });\n                    }),\n                    (e.localeLoader = p.standardLoader),\n                    (e.toSpeech = function (t) {\n                        return f(\"speech\", t);\n                    }),\n                    (e.toSemantic = function (t) {\n                        return f(\"semantic\", t);\n                    }),\n                    (e.toJson = function (t) {\n                        return f(\"json\", t);\n                    }),\n                    (e.toDescription = function (t) {\n                        return f(\"description\", t);\n                    }),\n                    (e.toEnriched = function (t) {\n                        return f(\"enriched\", t);\n                    }),\n                    (e.number = function (t) {\n                        return f(\"number\", t);\n                    }),\n                    (e.ordinal = function (t) {\n                        return f(\"ordinal\", t);\n                    }),\n                    (e.numericOrdinal = function (t) {\n                        return f(\"numericOrdinal\", t);\n                    }),\n                    (e.vulgar = function (t) {\n                        return f(\"vulgar\", t);\n                    }),\n                    (e.file = {}),\n                    (e.file.toSpeech = function (t, e) {\n                        return d(\"speech\", t, e);\n                    }),\n                    (e.file.toSemantic = function (t, e) {\n                        return d(\"semantic\", t, e);\n                    }),\n                    (e.file.toJson = function (t, e) {\n                        return d(\"json\", t, e);\n                    }),\n                    (e.file.toDescription = function (t, e) {\n                        return d(\"description\", t, e);\n                    }),\n                    (e.file.toEnriched = function (t, e) {\n                        return d(\"enriched\", t, e);\n                    }),\n                    (e.processFile = d),\n                    (e.walk = function (t) {\n                        return l.output(\"walker\", t);\n                    }),\n                    (e.move = function (t) {\n                        return l.keypress(\"move\", t);\n                    }),\n                    (e.exit = function (t) {\n                        const e = t || 0;\n                        o.EnginePromise.getall().then(() => process.exit(e));\n                    }),\n                    (e.localePath = a.localePath),\n                    c.default.documentSupported\n                        ? h({ mode: s.Mode.HTTP }).then(() => h({}))\n                        : h({ mode: s.Mode.SYNC }).then(() =>\n                              h({ mode: s.Mode.ASYNC })\n                          );\n            },\n            2315: function (\n                __unused_webpack_module,\n                exports,\n                __webpack_require__\n            ) {\n                var __dirname = \"/\";\n                Object.defineProperty(exports, \"__esModule\", { value: !0 });\n                const variables_1 = __webpack_require__(1377);\n                class SystemExternal {\n                    static extRequire(library) {\n                        if (\"undefined\" != typeof process) {\n                            const nodeRequire = eval(\"require\");\n                            return nodeRequire(library);\n                        }\n                        return null;\n                    }\n                }\n                (exports.default = SystemExternal),\n                    (SystemExternal.windowSupported = !(\n                        \"undefined\" == typeof window\n                    )),\n                    (SystemExternal.documentSupported =\n                        SystemExternal.windowSupported &&\n                        !(void 0 === window.document)),\n                    (SystemExternal.xmldom = SystemExternal.documentSupported\n                        ? window\n                        : SystemExternal.extRequire(\"xmldom-sre\")),\n                    (SystemExternal.document = SystemExternal.documentSupported\n                        ? window.document\n                        : new SystemExternal.xmldom.DOMImplementation().createDocument(\n                              \"\",\n                              \"\",\n                              0\n                          )),\n                    (SystemExternal.xpath = SystemExternal.documentSupported\n                        ? document\n                        : (function () {\n                              const t = { document: {}, XPathResult: {} };\n                              return (\n                                  SystemExternal.extRequire(\n                                      \"wicked-good-xpath\"\n                                  ).install(t),\n                                  (t.document.XPathResult = t.XPathResult),\n                                  t.document\n                              );\n                          })()),\n                    (SystemExternal.mathmapsIePath =\n                        \"https://cdn.jsdelivr.net/npm/sre-mathmaps-ie@\" +\n                        variables_1.Variables.VERSION +\n                        \"mathmaps_ie.js\"),\n                    (SystemExternal.commander = SystemExternal.documentSupported\n                        ? null\n                        : SystemExternal.extRequire(\"commander\")),\n                    (SystemExternal.fs = SystemExternal.documentSupported\n                        ? null\n                        : SystemExternal.extRequire(\"fs\")),\n                    (SystemExternal.url = variables_1.Variables.url),\n                    (SystemExternal.jsonPath =\n                        (SystemExternal.documentSupported\n                            ? SystemExternal.url\n                            : process.env.SRE_JSON_PATH ||\n                              __webpack_require__.g.SRE_JSON_PATH ||\n                              __dirname + \"/mathmaps\") + \"/\"),\n                    (SystemExternal.WGXpath = variables_1.Variables.WGXpath),\n                    (SystemExternal.wgxpath = null);\n            },\n            1377: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Variables = void 0);\n                class r {\n                    static ensureLocale(t, e) {\n                        return r.LOCALES.get(t)\n                            ? t\n                            : (console.error(\n                                  `Locale ${t} does not exist! Using ${r.LOCALES.get(e)} instead.`\n                              ),\n                              e);\n                    }\n                }\n                (e.Variables = r),\n                    (r.VERSION = \"4.0.6\"),\n                    (r.LOCALES = new Map([\n                        [\"ca\", \"Catalan\"],\n                        [\"da\", \"Danish\"],\n                        [\"de\", \"German\"],\n                        [\"en\", \"English\"],\n                        [\"es\", \"Spanish\"],\n                        [\"fr\", \"French\"],\n                        [\"hi\", \"Hindi\"],\n                        [\"it\", \"Italian\"],\n                        [\"nb\", \"Bokm\\xe5l\"],\n                        [\"nn\", \"Nynorsk\"],\n                        [\"sv\", \"Swedish\"],\n                        [\"nemeth\", \"Nemeth\"],\n                    ])),\n                    (r.mathjaxVersion = \"3.2.1\"),\n                    (r.url =\n                        \"https://cdn.jsdelivr.net/npm/speech-rule-engine@\" +\n                        r.VERSION +\n                        \"/lib/mathmaps\"),\n                    (r.WGXpath =\n                        \"https://cdn.jsdelivr.net/npm/wicked-good-xpath@1.3.0/dist/wgxpath.install.js\");\n            },\n            5274: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.updateEvaluator =\n                        e.evaluateString =\n                        e.evaluateBoolean =\n                        e.getLeafNodes =\n                        e.evalXPath =\n                        e.resolveNameSpace =\n                        e.xpath =\n                            void 0);\n                const n = r(5897),\n                    o = r(4440),\n                    i = r(2315);\n                function s() {\n                    return \"undefined\" != typeof XPathResult;\n                }\n                e.xpath = {\n                    currentDocument: null,\n                    evaluate: s()\n                        ? document.evaluate\n                        : i.default.xpath.evaluate,\n                    result: s() ? XPathResult : i.default.xpath.XPathResult,\n                    createNSResolver: s()\n                        ? document.createNSResolver\n                        : i.default.xpath.createNSResolver,\n                };\n                const a = {\n                    xhtml: \"http://www.w3.org/1999/xhtml\",\n                    mathml: \"http://www.w3.org/1998/Math/MathML\",\n                    mml: \"http://www.w3.org/1998/Math/MathML\",\n                    svg: \"http://www.w3.org/2000/svg\",\n                };\n                function l(t) {\n                    return a[t] || null;\n                }\n                e.resolveNameSpace = l;\n                class c {\n                    constructor() {\n                        this.lookupNamespaceURI = l;\n                    }\n                }\n                function u(t, r, i) {\n                    return n.default.getInstance().mode !== o.Mode.HTTP ||\n                        n.default.getInstance().isIE ||\n                        n.default.getInstance().isEdge\n                        ? e.xpath.evaluate(t, r, new c(), i, null)\n                        : e.xpath.currentDocument.evaluate(t, r, l, i, null);\n                }\n                function p(t, r) {\n                    let n;\n                    try {\n                        n = u(t, r, e.xpath.result.ORDERED_NODE_ITERATOR_TYPE);\n                    } catch (t) {\n                        return [];\n                    }\n                    const o = [];\n                    for (let t = n.iterateNext(); t; t = n.iterateNext())\n                        o.push(t);\n                    return o;\n                }\n                (e.evalXPath = p),\n                    (e.getLeafNodes = function (t) {\n                        return p(\".//*[count(*)=0]\", t);\n                    }),\n                    (e.evaluateBoolean = function (t, r) {\n                        let n;\n                        try {\n                            n = u(t, r, e.xpath.result.BOOLEAN_TYPE);\n                        } catch (t) {\n                            return !1;\n                        }\n                        return n.booleanValue;\n                    }),\n                    (e.evaluateString = function (t, r) {\n                        let n;\n                        try {\n                            n = u(t, r, e.xpath.result.STRING_TYPE);\n                        } catch (t) {\n                            return \"\";\n                        }\n                        return n.stringValue;\n                    }),\n                    (e.updateEvaluator = function (t) {\n                        if (n.default.getInstance().mode !== o.Mode.HTTP)\n                            return;\n                        let r = t;\n                        for (; r && !r.evaluate; ) r = r.parentNode;\n                        r && r.evaluate\n                            ? (e.xpath.currentDocument = r)\n                            : t.ownerDocument &&\n                              (e.xpath.currentDocument = t.ownerDocument);\n                    });\n            },\n            9268: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractEnrichCase = void 0);\n                e.AbstractEnrichCase = class {\n                    constructor(t) {\n                        this.semantic = t;\n                    }\n                };\n            },\n            6061: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseBinomial = void 0);\n                const n = r(5740),\n                    o = r(9268),\n                    i = r(5452),\n                    s = r(2298);\n                class a extends o.AbstractEnrichCase {\n                    constructor(t) {\n                        super(t), (this.mml = t.mathmlTree);\n                    }\n                    static test(t) {\n                        return (\n                            !t.mathmlTree &&\n                            \"line\" === t.type &&\n                            \"binomial\" === t.role\n                        );\n                    }\n                    getMathml() {\n                        if (!this.semantic.childNodes.length) return this.mml;\n                        const t = this.semantic.childNodes[0];\n                        if (\n                            ((this.mml = (0, i.walkTree)(t)),\n                            this.mml.hasAttribute(s.Attribute.TYPE))\n                        ) {\n                            const t = n.createElement(\"mrow\");\n                            t.setAttribute(s.Attribute.ADDED, \"true\"),\n                                n.replaceNode(this.mml, t),\n                                t.appendChild(this.mml),\n                                (this.mml = t);\n                        }\n                        return (\n                            (0, s.setAttributes)(this.mml, this.semantic),\n                            this.mml\n                        );\n                    }\n                }\n                e.CaseBinomial = a;\n            },\n            5765: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseDoubleScript = void 0);\n                const n = r(5740),\n                    o = r(9268),\n                    i = r(5452),\n                    s = r(2298);\n                class a extends o.AbstractEnrichCase {\n                    constructor(t) {\n                        super(t), (this.mml = t.mathmlTree);\n                    }\n                    static test(t) {\n                        if (!t.mathmlTree || !t.childNodes.length) return !1;\n                        const e = n.tagName(t.mathmlTree),\n                            r = t.childNodes[0].role;\n                        return (\n                            (\"MSUBSUP\" === e && \"subsup\" === r) ||\n                            (\"MUNDEROVER\" === e && \"underover\" === r)\n                        );\n                    }\n                    getMathml() {\n                        const t = this.semantic.childNodes[0],\n                            e = t.childNodes[0],\n                            r = this.semantic.childNodes[1],\n                            n = t.childNodes[1],\n                            o = i.walkTree(r),\n                            a = i.walkTree(e),\n                            l = i.walkTree(n);\n                        return (\n                            (0, s.setAttributes)(this.mml, this.semantic),\n                            this.mml.setAttribute(\n                                s.Attribute.CHILDREN,\n                                (0, s.makeIdList)([e, n, r])\n                            ),\n                            [a, l, o].forEach((t) =>\n                                i\n                                    .getInnerNode(t)\n                                    .setAttribute(\n                                        s.Attribute.PARENT,\n                                        this.mml.getAttribute(s.Attribute.ID)\n                                    )\n                            ),\n                            this.mml.setAttribute(s.Attribute.TYPE, t.role),\n                            i.addCollapsedAttribute(this.mml, [\n                                this.semantic.id,\n                                [t.id, e.id, n.id],\n                                r.id,\n                            ]),\n                            this.mml\n                        );\n                    }\n                }\n                e.CaseDoubleScript = a;\n            },\n            7251: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseEmbellished = void 0);\n                const n = r(5740),\n                    o = r(5952),\n                    i = r(9268),\n                    s = r(5765),\n                    a = r(7014),\n                    l = r(6887),\n                    c = r(5452),\n                    u = r(2298);\n                class p extends i.AbstractEnrichCase {\n                    constructor(t) {\n                        super(t),\n                            (this.fenced = null),\n                            (this.fencedMml = null),\n                            (this.fencedMmlNodes = []),\n                            (this.ofence = null),\n                            (this.ofenceMml = null),\n                            (this.ofenceMap = {}),\n                            (this.cfence = null),\n                            (this.cfenceMml = null),\n                            (this.cfenceMap = {}),\n                            (this.parentCleanup = []);\n                    }\n                    static test(t) {\n                        return !(\n                            !t.mathmlTree ||\n                            !t.fencePointer ||\n                            t.mathmlTree.getAttribute(\"data-semantic-type\")\n                        );\n                    }\n                    static makeEmptyNode_(t) {\n                        const e = n.createElement(\"mrow\"),\n                            r = new o.SemanticNode(t);\n                        return (r.type = \"empty\"), (r.mathmlTree = e), r;\n                    }\n                    static fencedMap_(t, e) {\n                        (e[t.id] = t.mathmlTree),\n                            t.embellished && p.fencedMap_(t.childNodes[0], e);\n                    }\n                    getMathml() {\n                        this.getFenced_(),\n                            (this.fencedMml = c.walkTree(this.fenced)),\n                            this.getFencesMml_(),\n                            \"empty\" !== this.fenced.type ||\n                                this.fencedMml.parentNode ||\n                                (this.fencedMml.setAttribute(\n                                    u.Attribute.ADDED,\n                                    \"true\"\n                                ),\n                                this.cfenceMml.parentNode.insertBefore(\n                                    this.fencedMml,\n                                    this.cfenceMml\n                                )),\n                            this.getFencedMml_();\n                        return this.rewrite_();\n                    }\n                    fencedElement(t) {\n                        return (\n                            \"fenced\" === t.type ||\n                            \"matrix\" === t.type ||\n                            \"vector\" === t.type\n                        );\n                    }\n                    getFenced_() {\n                        let t = this.semantic;\n                        for (; !this.fencedElement(t); ) t = t.childNodes[0];\n                        (this.fenced = t.childNodes[0]),\n                            (this.ofence = t.contentNodes[0]),\n                            (this.cfence = t.contentNodes[1]),\n                            p.fencedMap_(this.ofence, this.ofenceMap),\n                            p.fencedMap_(this.cfence, this.cfenceMap);\n                    }\n                    getFencedMml_() {\n                        let t = this.ofenceMml.nextSibling;\n                        for (\n                            t = t === this.fencedMml ? t : this.fencedMml;\n                            t && t !== this.cfenceMml;\n\n                        )\n                            this.fencedMmlNodes.push(t), (t = t.nextSibling);\n                    }\n                    getFencesMml_() {\n                        let t = this.semantic;\n                        const e = Object.keys(this.ofenceMap),\n                            r = Object.keys(this.cfenceMap);\n                        for (\n                            ;\n                            !(\n                                (this.ofenceMml && this.cfenceMml) ||\n                                t === this.fenced\n                            );\n\n                        )\n                            -1 === e.indexOf(t.fencePointer) ||\n                                this.ofenceMml ||\n                                (this.ofenceMml = t.mathmlTree),\n                                -1 === r.indexOf(t.fencePointer) ||\n                                    this.cfenceMml ||\n                                    (this.cfenceMml = t.mathmlTree),\n                                (t = t.childNodes[0]);\n                        this.ofenceMml ||\n                            (this.ofenceMml = this.ofence.mathmlTree),\n                            this.cfenceMml ||\n                                (this.cfenceMml = this.cfence.mathmlTree),\n                            this.ofenceMml &&\n                                (this.ofenceMml = c.ascendNewNode(\n                                    this.ofenceMml\n                                )),\n                            this.cfenceMml &&\n                                (this.cfenceMml = c.ascendNewNode(\n                                    this.cfenceMml\n                                ));\n                    }\n                    rewrite_() {\n                        let t = this.semantic,\n                            e = null;\n                        const r = this.introduceNewLayer_();\n                        for (\n                            (0, u.setAttributes)(r, this.fenced.parent);\n                            !this.fencedElement(t);\n\n                        ) {\n                            const o = t.mathmlTree,\n                                i = this.specialCase_(t, o);\n                            if (i) t = i;\n                            else {\n                                (0, u.setAttributes)(o, t);\n                                const e = [];\n                                for (let r, n = 1; (r = t.childNodes[n]); n++)\n                                    e.push(c.walkTree(r));\n                                t = t.childNodes[0];\n                            }\n                            const s = n.createElement(\"dummy\"),\n                                a = o.childNodes[0];\n                            n.replaceNode(o, s),\n                                n.replaceNode(r, o),\n                                n.replaceNode(o.childNodes[0], r),\n                                n.replaceNode(s, a),\n                                e || (e = o);\n                        }\n                        return (\n                            c.walkTree(this.ofence),\n                            c.walkTree(this.cfence),\n                            this.cleanupParents_(),\n                            e || r\n                        );\n                    }\n                    specialCase_(t, e) {\n                        const r = n.tagName(e);\n                        let o,\n                            i = null;\n                        if (\n                            (\"MSUBSUP\" === r\n                                ? ((i = t.childNodes[0]),\n                                  (o = s.CaseDoubleScript))\n                                : \"MMULTISCRIPTS\" === r &&\n                                  (\"superscript\" === t.type ||\n                                  \"subscript\" === t.type\n                                      ? (o = a.CaseMultiscripts)\n                                      : \"tensor\" === t.type &&\n                                        (o = l.CaseTensor),\n                                  (i =\n                                      o &&\n                                      t.childNodes[0] &&\n                                      \"subsup\" === t.childNodes[0].role\n                                          ? t.childNodes[0]\n                                          : t)),\n                            !i)\n                        )\n                            return null;\n                        const c = i.childNodes[0],\n                            u = p.makeEmptyNode_(c.id);\n                        return (\n                            (i.childNodes[0] = u),\n                            (e = new o(t).getMathml()),\n                            (i.childNodes[0] = c),\n                            this.parentCleanup.push(e),\n                            i.childNodes[0]\n                        );\n                    }\n                    introduceNewLayer_() {\n                        const t = this.fullFence(this.ofenceMml),\n                            e = this.fullFence(this.cfenceMml);\n                        let r = n.createElement(\"mrow\");\n                        if (\n                            (n.replaceNode(this.fencedMml, r),\n                            this.fencedMmlNodes.forEach((t) =>\n                                r.appendChild(t)\n                            ),\n                            r.insertBefore(t, this.fencedMml),\n                            r.appendChild(e),\n                            !r.parentNode)\n                        ) {\n                            const t = n.createElement(\"mrow\");\n                            for (; r.childNodes.length > 0; )\n                                t.appendChild(r.childNodes[0]);\n                            r.appendChild(t), (r = t);\n                        }\n                        return r;\n                    }\n                    fullFence(t) {\n                        const e = this.fencedMml.parentNode;\n                        let r = t;\n                        for (; r.parentNode && r.parentNode !== e; )\n                            r = r.parentNode;\n                        return r;\n                    }\n                    cleanupParents_() {\n                        this.parentCleanup.forEach(function (t) {\n                            const e = t.childNodes[1].getAttribute(\n                                u.Attribute.PARENT\n                            );\n                            t.childNodes[0].setAttribute(u.Attribute.PARENT, e);\n                        });\n                    }\n                }\n                e.CaseEmbellished = p;\n            },\n            6265: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseLimit = void 0);\n                const n = r(5740),\n                    o = r(9268),\n                    i = r(5452),\n                    s = r(2298);\n                class a extends o.AbstractEnrichCase {\n                    constructor(t) {\n                        super(t), (this.mml = t.mathmlTree);\n                    }\n                    static test(t) {\n                        if (!t.mathmlTree || !t.childNodes.length) return !1;\n                        const e = n.tagName(t.mathmlTree),\n                            r = t.type;\n                        return (\n                            ((\"limupper\" === r || \"limlower\" === r) &&\n                                (\"MSUBSUP\" === e || \"MUNDEROVER\" === e)) ||\n                            (\"limboth\" === r &&\n                                (\"MSUB\" === e ||\n                                    \"MUNDER\" === e ||\n                                    \"MSUP\" === e ||\n                                    \"MOVER\" === e))\n                        );\n                    }\n                    static walkTree_(t) {\n                        t && i.walkTree(t);\n                    }\n                    getMathml() {\n                        const t = this.semantic.childNodes;\n                        return (\n                            \"limboth\" !== this.semantic.type &&\n                                this.mml.childNodes.length >= 3 &&\n                                (this.mml = i.introduceNewLayer(\n                                    [this.mml],\n                                    this.semantic\n                                )),\n                            (0, s.setAttributes)(this.mml, this.semantic),\n                            t[0].mathmlTree ||\n                                (t[0].mathmlTree = this.semantic.mathmlTree),\n                            t.forEach(a.walkTree_),\n                            this.mml\n                        );\n                    }\n                }\n                e.CaseLimit = a;\n            },\n            6514: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseLine = void 0);\n                const n = r(9268),\n                    o = r(5452),\n                    i = r(2298);\n                class s extends n.AbstractEnrichCase {\n                    constructor(t) {\n                        super(t), (this.mml = t.mathmlTree);\n                    }\n                    static test(t) {\n                        return !!t.mathmlTree && \"line\" === t.type;\n                    }\n                    getMathml() {\n                        return (\n                            this.semantic.contentNodes.length &&\n                                o.walkTree(this.semantic.contentNodes[0]),\n                            this.semantic.childNodes.length &&\n                                o.walkTree(this.semantic.childNodes[0]),\n                            (0, i.setAttributes)(this.mml, this.semantic),\n                            this.mml\n                        );\n                    }\n                }\n                e.CaseLine = s;\n            },\n            6839: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseMultiindex = void 0);\n                const n = r(5740),\n                    o = r(9268),\n                    i = r(5452),\n                    s = r(2298);\n                class a extends o.AbstractEnrichCase {\n                    constructor(t) {\n                        super(t), (this.mml = t.mathmlTree);\n                    }\n                    static multiscriptIndex(t) {\n                        return \"punctuated\" === t.type &&\n                            \"dummy\" === t.contentNodes[0].role\n                            ? i.collapsePunctuated(t)\n                            : (i.walkTree(t), t.id);\n                    }\n                    static createNone_(t) {\n                        const e = n.createElement(\"none\");\n                        return (\n                            t && (0, s.setAttributes)(e, t),\n                            e.setAttribute(s.Attribute.ADDED, \"true\"),\n                            e\n                        );\n                    }\n                    completeMultiscript(t, e) {\n                        const r = n.toArray(this.mml.childNodes).slice(1);\n                        let o = 0;\n                        const l = (t) => {\n                            for (let e, n = 0; (e = t[n]); n++) {\n                                const t = r[o];\n                                if (\n                                    t &&\n                                    e ===\n                                        parseInt(\n                                            i\n                                                .getInnerNode(t)\n                                                .getAttribute(s.Attribute.ID)\n                                        )\n                                )\n                                    i\n                                        .getInnerNode(t)\n                                        .setAttribute(\n                                            s.Attribute.PARENT,\n                                            this.semantic.id.toString()\n                                        ),\n                                        o++;\n                                else {\n                                    const r = this.semantic.querySelectorAll(\n                                        (t) => t.id === e\n                                    );\n                                    this.mml.insertBefore(\n                                        a.createNone_(r[0]),\n                                        t || null\n                                    );\n                                }\n                            }\n                        };\n                        l(t),\n                            r[o] && \"MPRESCRIPTS\" !== n.tagName(r[o])\n                                ? this.mml.insertBefore(\n                                      r[o],\n                                      n.createElement(\"mprescripts\")\n                                  )\n                                : o++,\n                            l(e);\n                    }\n                }\n                e.CaseMultiindex = a;\n            },\n            7014: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseMultiscripts = void 0);\n                const n = r(5740),\n                    o = r(5656),\n                    i = r(6839),\n                    s = r(5452),\n                    a = r(2298);\n                class l extends i.CaseMultiindex {\n                    static test(t) {\n                        if (!t.mathmlTree) return !1;\n                        return (\n                            \"MMULTISCRIPTS\" === n.tagName(t.mathmlTree) &&\n                            (\"superscript\" === t.type || \"subscript\" === t.type)\n                        );\n                    }\n                    constructor(t) {\n                        super(t);\n                    }\n                    getMathml() {\n                        let t, e, r;\n                        if (\n                            ((0, a.setAttributes)(this.mml, this.semantic),\n                            this.semantic.childNodes[0] &&\n                                \"subsup\" === this.semantic.childNodes[0].role)\n                        ) {\n                            const n = this.semantic.childNodes[0];\n                            (t = n.childNodes[0]),\n                                (e = i.CaseMultiindex.multiscriptIndex(\n                                    this.semantic.childNodes[1]\n                                )),\n                                (r = i.CaseMultiindex.multiscriptIndex(\n                                    n.childNodes[1]\n                                ));\n                            const l = [this.semantic.id, [n.id, t.id, r], e];\n                            s.addCollapsedAttribute(this.mml, l),\n                                this.mml.setAttribute(a.Attribute.TYPE, n.role),\n                                this.completeMultiscript(\n                                    o.SemanticSkeleton.interleaveIds(r, e),\n                                    []\n                                );\n                        } else {\n                            (t = this.semantic.childNodes[0]),\n                                (e = i.CaseMultiindex.multiscriptIndex(\n                                    this.semantic.childNodes[1]\n                                ));\n                            const r = [this.semantic.id, t.id, e];\n                            s.addCollapsedAttribute(this.mml, r);\n                        }\n                        const n = o.SemanticSkeleton.collapsedLeafs(r || [], e),\n                            l = s.walkTree(t);\n                        return (\n                            s\n                                .getInnerNode(l)\n                                .setAttribute(\n                                    a.Attribute.PARENT,\n                                    this.semantic.id.toString()\n                                ),\n                            n.unshift(t.id),\n                            this.mml.setAttribute(\n                                a.Attribute.CHILDREN,\n                                n.join(\",\")\n                            ),\n                            this.mml\n                        );\n                    }\n                }\n                e.CaseMultiscripts = l;\n            },\n            3416: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseProof = void 0);\n                const n = r(9268),\n                    o = r(5452),\n                    i = r(2298);\n                class s extends n.AbstractEnrichCase {\n                    constructor(t) {\n                        super(t), (this.mml = t.mathmlTree);\n                    }\n                    static test(t) {\n                        return (\n                            !!t.mathmlTree &&\n                            (\"inference\" === t.type || \"premises\" === t.type)\n                        );\n                    }\n                    getMathml() {\n                        return this.semantic.childNodes.length\n                            ? (this.semantic.contentNodes.forEach(function (t) {\n                                  o.walkTree(t),\n                                      (0, i.setAttributes)(t.mathmlTree, t);\n                              }),\n                              this.semantic.childNodes.forEach(function (t) {\n                                  o.walkTree(t);\n                              }),\n                              (0, i.setAttributes)(this.mml, this.semantic),\n                              this.mml.getAttribute(\"data-semantic-id\") ===\n                                  this.mml.getAttribute(\n                                      \"data-semantic-parent\"\n                                  ) &&\n                                  this.mml.removeAttribute(\n                                      \"data-semantic-parent\"\n                                  ),\n                              this.mml)\n                            : this.mml;\n                    }\n                }\n                e.CaseProof = s;\n            },\n            5699: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseTable = void 0);\n                const n = r(5740),\n                    o = r(9268),\n                    i = r(5452),\n                    s = r(2298);\n                class a extends o.AbstractEnrichCase {\n                    constructor(t) {\n                        super(t), (this.inner = []), (this.mml = t.mathmlTree);\n                    }\n                    static test(t) {\n                        return (\n                            \"matrix\" === t.type ||\n                            \"vector\" === t.type ||\n                            \"cases\" === t.type\n                        );\n                    }\n                    getMathml() {\n                        const t = i.cloneContentNode(\n                                this.semantic.contentNodes[0]\n                            ),\n                            e = this.semantic.contentNodes[1]\n                                ? i.cloneContentNode(\n                                      this.semantic.contentNodes[1]\n                                  )\n                                : null;\n                        if (\n                            ((this.inner = this.semantic.childNodes.map(\n                                i.walkTree\n                            )),\n                            this.mml)\n                        )\n                            if (\"MFENCED\" === n.tagName(this.mml)) {\n                                const r = this.mml.childNodes;\n                                this.mml.insertBefore(t, r[0] || null),\n                                    e && this.mml.appendChild(e),\n                                    (this.mml = i.rewriteMfenced(this.mml));\n                            } else {\n                                const r = [t, this.mml];\n                                e && r.push(e),\n                                    (this.mml = i.introduceNewLayer(\n                                        r,\n                                        this.semantic\n                                    ));\n                            }\n                        else\n                            this.mml = i.introduceNewLayer(\n                                [t].concat(this.inner, [e]),\n                                this.semantic\n                            );\n                        return (\n                            (0, s.setAttributes)(this.mml, this.semantic),\n                            this.mml\n                        );\n                    }\n                }\n                e.CaseTable = a;\n            },\n            6887: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseTensor = void 0);\n                const n = r(5656),\n                    o = r(6839),\n                    i = r(5452),\n                    s = r(2298);\n                class a extends o.CaseMultiindex {\n                    static test(t) {\n                        return !!t.mathmlTree && \"tensor\" === t.type;\n                    }\n                    constructor(t) {\n                        super(t);\n                    }\n                    getMathml() {\n                        i.walkTree(this.semantic.childNodes[0]);\n                        const t = o.CaseMultiindex.multiscriptIndex(\n                                this.semantic.childNodes[1]\n                            ),\n                            e = o.CaseMultiindex.multiscriptIndex(\n                                this.semantic.childNodes[2]\n                            ),\n                            r = o.CaseMultiindex.multiscriptIndex(\n                                this.semantic.childNodes[3]\n                            ),\n                            a = o.CaseMultiindex.multiscriptIndex(\n                                this.semantic.childNodes[4]\n                            );\n                        (0, s.setAttributes)(this.mml, this.semantic);\n                        const l = [\n                            this.semantic.id,\n                            this.semantic.childNodes[0].id,\n                            t,\n                            e,\n                            r,\n                            a,\n                        ];\n                        i.addCollapsedAttribute(this.mml, l);\n                        const c = n.SemanticSkeleton.collapsedLeafs(t, e, r, a);\n                        return (\n                            c.unshift(this.semantic.childNodes[0].id),\n                            this.mml.setAttribute(\n                                s.Attribute.CHILDREN,\n                                c.join(\",\")\n                            ),\n                            this.completeMultiscript(\n                                n.SemanticSkeleton.interleaveIds(r, a),\n                                n.SemanticSkeleton.interleaveIds(t, e)\n                            ),\n                            this.mml\n                        );\n                    }\n                }\n                e.CaseTensor = a;\n            },\n            9236: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CaseText = void 0);\n                const n = r(9268),\n                    o = r(5452),\n                    i = r(2298);\n                class s extends n.AbstractEnrichCase {\n                    constructor(t) {\n                        super(t), (this.mml = t.mathmlTree);\n                    }\n                    static test(t) {\n                        return (\n                            \"punctuated\" === t.type &&\n                            (\"text\" === t.role ||\n                                t.contentNodes.every((t) => \"dummy\" === t.role))\n                        );\n                    }\n                    getMathml() {\n                        const t = [],\n                            e = o.collapsePunctuated(this.semantic, t);\n                        return (\n                            (this.mml = o.introduceNewLayer(t, this.semantic)),\n                            (0, i.setAttributes)(this.mml, this.semantic),\n                            this.mml.removeAttribute(i.Attribute.CONTENT),\n                            o.addCollapsedAttribute(this.mml, e),\n                            this.mml\n                        );\n                    }\n                }\n                e.CaseText = s;\n            },\n            5714: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.prepareMmlString =\n                        e.testTranslation__ =\n                        e.semanticMathml =\n                        e.semanticMathmlSync =\n                        e.semanticMathmlNode =\n                            void 0);\n                const n = r(2057),\n                    o = r(5740),\n                    i = r(5897),\n                    s = r(1414),\n                    a = r(5452),\n                    l = r(2298);\n                function c(t) {\n                    const e = o.cloneNode(t),\n                        r = s.getTree(e);\n                    return a.enrich(e, r);\n                }\n                function u(t) {\n                    return c(o.parseInput(t));\n                }\n                function p(t) {\n                    return (\n                        t.match(/^<math/) || (t = \"<math>\" + t),\n                        t.match(/\\/math>$/) || (t += \"</math>\"),\n                        t\n                    );\n                }\n                r(1513),\n                    (e.semanticMathmlNode = c),\n                    (e.semanticMathmlSync = u),\n                    (e.semanticMathml = function (t, e) {\n                        i.EnginePromise.getall().then(() => {\n                            const r = o.parseInput(t);\n                            e(c(r));\n                        });\n                    }),\n                    (e.testTranslation__ = function (t) {\n                        n.Debugger.getInstance().init();\n                        const e = u(p(t)).toString();\n                        return (\n                            (0, l.removeAttributePrefix)(e),\n                            n.Debugger.getInstance().exit(),\n                            e\n                        );\n                    }),\n                    (e.prepareMmlString = p);\n            },\n            2298: function (t, e) {\n                var r;\n                function n(t) {\n                    return t\n                        .map(function (t) {\n                            return t.id;\n                        })\n                        .join(\",\");\n                }\n                function o(t, e) {\n                    const n = [];\n                    \"mglyph\" === e.role && n.push(\"image\"),\n                        e.attributes.href && n.push(\"link\"),\n                        n.length && t.setAttribute(r.POSTFIX, n.join(\" \"));\n                }\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.addPrefix =\n                        e.removeAttributePrefix =\n                        e.setPostfix =\n                        e.setAttributes =\n                        e.makeIdList =\n                        e.EnrichAttributes =\n                        e.Attribute =\n                        e.Prefix =\n                            void 0),\n                    (e.Prefix = \"data-semantic-\"),\n                    (function (t) {\n                        (t.ADDED = \"data-semantic-added\"),\n                            (t.ALTERNATIVE = \"data-semantic-alternative\"),\n                            (t.CHILDREN = \"data-semantic-children\"),\n                            (t.COLLAPSED = \"data-semantic-collapsed\"),\n                            (t.CONTENT = \"data-semantic-content\"),\n                            (t.EMBELLISHED = \"data-semantic-embellished\"),\n                            (t.FENCEPOINTER = \"data-semantic-fencepointer\"),\n                            (t.FONT = \"data-semantic-font\"),\n                            (t.ID = \"data-semantic-id\"),\n                            (t.ANNOTATION = \"data-semantic-annotation\"),\n                            (t.OPERATOR = \"data-semantic-operator\"),\n                            (t.OWNS = \"data-semantic-owns\"),\n                            (t.PARENT = \"data-semantic-parent\"),\n                            (t.POSTFIX = \"data-semantic-postfix\"),\n                            (t.PREFIX = \"data-semantic-prefix\"),\n                            (t.ROLE = \"data-semantic-role\"),\n                            (t.SPEECH = \"data-semantic-speech\"),\n                            (t.STRUCTURE = \"data-semantic-structure\"),\n                            (t.TYPE = \"data-semantic-type\");\n                    })((r = e.Attribute || (e.Attribute = {}))),\n                    (e.EnrichAttributes = [\n                        r.ADDED,\n                        r.ALTERNATIVE,\n                        r.CHILDREN,\n                        r.COLLAPSED,\n                        r.CONTENT,\n                        r.EMBELLISHED,\n                        r.FENCEPOINTER,\n                        r.FONT,\n                        r.ID,\n                        r.ANNOTATION,\n                        r.OPERATOR,\n                        r.OWNS,\n                        r.PARENT,\n                        r.POSTFIX,\n                        r.PREFIX,\n                        r.ROLE,\n                        r.SPEECH,\n                        r.STRUCTURE,\n                        r.TYPE,\n                    ]),\n                    (e.makeIdList = n),\n                    (e.setAttributes = function (t, i) {\n                        t.setAttribute(r.TYPE, i.type);\n                        const s = i.allAttributes();\n                        for (let r, n = 0; (r = s[n]); n++)\n                            t.setAttribute(e.Prefix + r[0].toLowerCase(), r[1]);\n                        i.childNodes.length &&\n                            t.setAttribute(r.CHILDREN, n(i.childNodes)),\n                            i.contentNodes.length &&\n                                t.setAttribute(r.CONTENT, n(i.contentNodes)),\n                            i.parent &&\n                                t.setAttribute(\n                                    r.PARENT,\n                                    i.parent.id.toString()\n                                ),\n                            o(t, i);\n                    }),\n                    (e.setPostfix = o),\n                    (e.removeAttributePrefix = function (t) {\n                        return t\n                            .toString()\n                            .replace(new RegExp(e.Prefix, \"g\"), \"\");\n                    }),\n                    (e.addPrefix = function (t) {\n                        return e.Prefix + t;\n                    });\n            },\n            3532: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.factory = e.getCase = void 0),\n                    (e.getCase = function (t) {\n                        for (let r, n = 0; (r = e.factory[n]); n++)\n                            if (r.test(t)) return r.constr(t);\n                        return null;\n                    }),\n                    (e.factory = []);\n            },\n            1513: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                const n = r(6061),\n                    o = r(5765),\n                    i = r(7251),\n                    s = r(6265),\n                    a = r(6514),\n                    l = r(7014),\n                    c = r(3416),\n                    u = r(5699),\n                    p = r(6887),\n                    h = r(9236);\n                r(3532).factory.push(\n                    {\n                        test: s.CaseLimit.test,\n                        constr: (t) => new s.CaseLimit(t),\n                    },\n                    {\n                        test: i.CaseEmbellished.test,\n                        constr: (t) => new i.CaseEmbellished(t),\n                    },\n                    {\n                        test: o.CaseDoubleScript.test,\n                        constr: (t) => new o.CaseDoubleScript(t),\n                    },\n                    {\n                        test: p.CaseTensor.test,\n                        constr: (t) => new p.CaseTensor(t),\n                    },\n                    {\n                        test: l.CaseMultiscripts.test,\n                        constr: (t) => new l.CaseMultiscripts(t),\n                    },\n                    { test: a.CaseLine.test, constr: (t) => new a.CaseLine(t) },\n                    {\n                        test: n.CaseBinomial.test,\n                        constr: (t) => new n.CaseBinomial(t),\n                    },\n                    {\n                        test: c.CaseProof.test,\n                        constr: (t) => new c.CaseProof(t),\n                    },\n                    {\n                        test: u.CaseTable.test,\n                        constr: (t) => new u.CaseTable(t),\n                    },\n                    { test: h.CaseText.test, constr: (t) => new h.CaseText(t) }\n                );\n            },\n            5452: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.printNodeList__ =\n                        e.collapsePunctuated =\n                        e.formattedOutput_ =\n                        e.formattedOutput =\n                        e.getInnerNode =\n                        e.setOperatorAttribute_ =\n                        e.createInvisibleOperator_ =\n                        e.rewriteMfenced =\n                        e.cloneContentNode =\n                        e.addCollapsedAttribute =\n                        e.parentNode_ =\n                        e.isIgnorable_ =\n                        e.unitChild_ =\n                        e.descendNode_ =\n                        e.ascendNewNode =\n                        e.validLca_ =\n                        e.pathToRoot_ =\n                        e.attachedElement_ =\n                        e.prunePath_ =\n                        e.mathmlLca_ =\n                        e.lcaType =\n                        e.functionApplication_ =\n                        e.isDescendant_ =\n                        e.insertNewChild_ =\n                        e.mergeChildren_ =\n                        e.collectChildNodes_ =\n                        e.collateChildNodes_ =\n                        e.childrenSubset_ =\n                        e.moveSemanticAttributes_ =\n                        e.introduceLayerAboveLca =\n                        e.introduceNewLayer =\n                        e.walkTree =\n                        e.enrich =\n                        e.SETTINGS =\n                            void 0);\n                const n = r(2057),\n                    o = r(5740),\n                    i = r(5897),\n                    s = r(3588),\n                    a = r(7516),\n                    l = r(5656),\n                    c = r(4795),\n                    u = r(2298),\n                    p = r(3532);\n                function h(t) {\n                    const e = (0, p.getCase)(t);\n                    let r;\n                    if (e) return (r = e.getMathml()), N(r);\n                    if (1 === t.mathml.length)\n                        return (\n                            n.Debugger.getInstance().output(\"Walktree Case 0\"),\n                            (r = t.mathml[0]),\n                            u.setAttributes(r, t),\n                            t.childNodes.length &&\n                                (n.Debugger.getInstance().output(\n                                    \"Walktree Case 0.1\"\n                                ),\n                                t.childNodes.forEach(function (t) {\n                                    \"empty\" === t.type && r.appendChild(h(t));\n                                })),\n                            N(r)\n                        );\n                    const o = t.contentNodes.map(R);\n                    B(t, o);\n                    const i = t.childNodes.map(h),\n                        s = l.SemanticSkeleton.combineContentChildren(t, o, i);\n                    if (((r = t.mathmlTree), null === r))\n                        n.Debugger.getInstance().output(\"Walktree Case 1\"),\n                            (r = f(s, t));\n                    else {\n                        const t = A(s);\n                        n.Debugger.getInstance().output(\"Walktree Case 2\"),\n                            t\n                                ? (n.Debugger.getInstance().output(\n                                      \"Walktree Case 2.1\"\n                                  ),\n                                  (r = t.parentNode))\n                                : (n.Debugger.getInstance().output(\n                                      \"Walktree Case 2.2\"\n                                  ),\n                                  (r = D(r)));\n                    }\n                    return (r = k(r)), v(r, s, t), u.setAttributes(r, t), N(r);\n                }\n                function f(t, e) {\n                    const r = x(t);\n                    let i = r.node;\n                    const s = r.type;\n                    if (s !== O.VALID || !c.hasEmptyTag(i))\n                        if (\n                            (n.Debugger.getInstance().output(\n                                \"Walktree Case 1.1\"\n                            ),\n                            (i = o.createElement(\"mrow\")),\n                            s === O.PRUNED)\n                        )\n                            n.Debugger.getInstance().output(\n                                \"Walktree Case 1.1.0\"\n                            ),\n                                (i = d(i, r.node, t));\n                        else if (t[0]) {\n                            n.Debugger.getInstance().output(\n                                \"Walktree Case 1.1.1\"\n                            );\n                            const e = A(t),\n                                r = y(e.parentNode, t);\n                            o.replaceNode(e, i),\n                                r.forEach(function (t) {\n                                    i.appendChild(t);\n                                });\n                        }\n                    return e.mathmlTree || (e.mathmlTree = i), i;\n                }\n                function d(t, e, r) {\n                    let i = w(e);\n                    if (c.hasMathTag(i)) {\n                        n.Debugger.getInstance().output(\n                            \"Walktree Case 1.1.0.0\"\n                        ),\n                            m(i, t),\n                            o.toArray(i.childNodes).forEach(function (e) {\n                                t.appendChild(e);\n                            });\n                        const e = t;\n                        (t = i), (i = e);\n                    }\n                    const s = r.indexOf(e);\n                    return (\n                        (r[s] = i),\n                        o.replaceNode(i, t),\n                        t.appendChild(i),\n                        r.forEach(function (e) {\n                            t.appendChild(e);\n                        }),\n                        t\n                    );\n                }\n                function m(t, e) {\n                    for (const r of u.EnrichAttributes)\n                        t.hasAttribute(r) &&\n                            (e.setAttribute(r, t.getAttribute(r)),\n                            t.removeAttribute(r));\n                }\n                function y(t, e) {\n                    const r = o.toArray(t.childNodes);\n                    let n = 1 / 0,\n                        i = -1 / 0;\n                    return (\n                        e.forEach(function (t) {\n                            const e = r.indexOf(t);\n                            -1 !== e &&\n                                ((n = Math.min(n, e)), (i = Math.max(i, e)));\n                        }),\n                        r.slice(n, i + 1)\n                    );\n                }\n                function g(t, e, r) {\n                    const n = [];\n                    let i = o.toArray(t.childNodes),\n                        s = !1;\n                    for (; i.length; ) {\n                        const t = i.shift();\n                        if (t.hasAttribute(u.Attribute.TYPE)) {\n                            n.push(t);\n                            continue;\n                        }\n                        const e = b(t);\n                        0 !== e.length &&\n                            (1 !== e.length\n                                ? (s\n                                      ? t.setAttribute(\"AuxiliaryImplicit\", !0)\n                                      : (s = !0),\n                                  (i = e.concat(i)))\n                                : n.push(t));\n                    }\n                    const a = [],\n                        l = r.childNodes.map(function (t) {\n                            return t.mathmlTree;\n                        });\n                    for (; l.length; ) {\n                        const t = l.pop();\n                        if (t) {\n                            if (-1 !== n.indexOf(t)) break;\n                            -1 !== e.indexOf(t) && a.unshift(t);\n                        }\n                    }\n                    return n.concat(a);\n                }\n                function b(t) {\n                    const e = [];\n                    let r = o.toArray(t.childNodes);\n                    for (; r.length; ) {\n                        const t = r.shift();\n                        t.nodeType === o.NodeType.ELEMENT_NODE &&\n                            (t.hasAttribute(u.Attribute.TYPE)\n                                ? e.push(t)\n                                : (r = o.toArray(t.childNodes).concat(r)));\n                    }\n                    return e;\n                }\n                function v(t, e, r) {\n                    const n =\n                        \"implicit\" === r.role && a.flags.combine_juxtaposition\n                            ? g(t, e, r)\n                            : o.toArray(t.childNodes);\n                    if (!n.length)\n                        return void e.forEach(function (e) {\n                            t.appendChild(e);\n                        });\n                    let i = 0;\n                    for (; e.length; ) {\n                        const r = e[0];\n                        n[i] === r || M(n[i], r)\n                            ? (e.shift(), i++)\n                            : n[i] && -1 === e.indexOf(n[i])\n                              ? i++\n                              : (S(r, t) || _(t, n[i], r), e.shift());\n                    }\n                }\n                function _(t, e, r) {\n                    if (!e) return void t.insertBefore(r, null);\n                    let n = e,\n                        o = P(n);\n                    for (\n                        ;\n                        o &&\n                        o.firstChild === n &&\n                        !n.hasAttribute(\"AuxiliaryImplicit\") &&\n                        o !== t;\n\n                    )\n                        (n = o), (o = P(n));\n                    o &&\n                        (o.insertBefore(r, n),\n                        n.removeAttribute(\"AuxiliaryImplicit\"));\n                }\n                function S(t, e) {\n                    if (!t) return !1;\n                    do {\n                        if ((t = t.parentNode) === e) return !0;\n                    } while (t);\n                    return !1;\n                }\n                function M(t, e) {\n                    const r = s.functionApplication();\n                    if (\n                        t &&\n                        e &&\n                        t.textContent &&\n                        e.textContent &&\n                        t.textContent === r &&\n                        e.textContent === r &&\n                        \"true\" === e.getAttribute(u.Attribute.ADDED)\n                    ) {\n                        for (let r, n = 0; (r = t.attributes[n]); n++)\n                            e.hasAttribute(r.nodeName) ||\n                                e.setAttribute(r.nodeName, r.nodeValue);\n                        return o.replaceNode(t, e), !0;\n                    }\n                    return !1;\n                }\n                var O;\n                function x(t) {\n                    const e = A(t);\n                    if (!e) return { type: O.INVALID, node: null };\n                    const r = A(t.slice().reverse());\n                    if (e === r) return { type: O.VALID, node: e };\n                    const n = C(e),\n                        o = E(n, t),\n                        i = C(r, function (t) {\n                            return -1 !== o.indexOf(t);\n                        }),\n                        s = i[0],\n                        a = o.indexOf(s);\n                    return -1 === a\n                        ? { type: O.INVALID, node: null }\n                        : {\n                              type:\n                                  o.length !== n.length\n                                      ? O.PRUNED\n                                      : T(o[a + 1], i[1])\n                                        ? O.VALID\n                                        : O.INVALID,\n                              node: s,\n                          };\n                }\n                function E(t, e) {\n                    let r = 0;\n                    for (; t[r] && -1 === e.indexOf(t[r]); ) r++;\n                    return t.slice(0, r + 1);\n                }\n                function A(t) {\n                    let e = 0,\n                        r = null;\n                    for (; !r && e < t.length; )\n                        t[e].parentNode && (r = t[e]), e++;\n                    return r;\n                }\n                function C(t, e) {\n                    const r = e || ((t) => !1),\n                        n = [t];\n                    for (; !r(t) && !c.hasMathTag(t) && t.parentNode; )\n                        (t = P(t)), n.unshift(t);\n                    return n;\n                }\n                function T(t, e) {\n                    return !(!t || !e || t.previousSibling || e.nextSibling);\n                }\n                function N(t) {\n                    for (; !c.hasMathTag(t) && L(t); ) t = P(t);\n                    return t;\n                }\n                function w(t) {\n                    const e = o.toArray(t.childNodes);\n                    if (!e) return t;\n                    const r = e.filter(function (t) {\n                        return (\n                            t.nodeType === o.NodeType.ELEMENT_NODE &&\n                            !c.hasIgnoreTag(t)\n                        );\n                    });\n                    return 1 === r.length &&\n                        c.hasEmptyTag(r[0]) &&\n                        !r[0].hasAttribute(u.Attribute.TYPE)\n                        ? w(r[0])\n                        : t;\n                }\n                function L(t) {\n                    const e = P(t);\n                    return (\n                        !(!e || !c.hasEmptyTag(e)) &&\n                        o.toArray(e.childNodes).every(function (e) {\n                            return e === t || I(e);\n                        })\n                    );\n                }\n                function I(t) {\n                    if (t.nodeType !== o.NodeType.ELEMENT_NODE) return !0;\n                    if (!t || c.hasIgnoreTag(t)) return !0;\n                    const e = o.toArray(t.childNodes);\n                    return (\n                        !(\n                            (!c.hasEmptyTag(t) && e.length) ||\n                            c.hasDisplayTag(t) ||\n                            t.hasAttribute(u.Attribute.TYPE) ||\n                            c.isOrphanedGlyph(t)\n                        ) && o.toArray(t.childNodes).every(I)\n                    );\n                }\n                function P(t) {\n                    return t.parentNode;\n                }\n                function R(t) {\n                    if (t.mathml.length) return h(t);\n                    const r = e.SETTINGS.implicit\n                        ? j(t)\n                        : o.createElement(\"mrow\");\n                    return (t.mathml = [r]), r;\n                }\n                function k(t) {\n                    if (\"MFENCED\" !== o.tagName(t)) return t;\n                    const e = o.createElement(\"mrow\");\n                    for (let r, n = 0; (r = t.attributes[n]); n++)\n                        -1 ===\n                            [\"open\", \"close\", \"separators\"].indexOf(r.name) &&\n                            e.setAttribute(r.name, r.value);\n                    return (\n                        o.toArray(t.childNodes).forEach(function (t) {\n                            e.appendChild(t);\n                        }),\n                        o.replaceNode(t, e),\n                        e\n                    );\n                }\n                function j(t) {\n                    const e = o.createElement(\"mo\"),\n                        r = o.createTextNode(t.textContent);\n                    return (\n                        e.appendChild(r),\n                        u.setAttributes(e, t),\n                        e.setAttribute(u.Attribute.ADDED, \"true\"),\n                        e\n                    );\n                }\n                function B(t, e) {\n                    const r =\n                        t.type + (t.textContent ? \",\" + t.textContent : \"\");\n                    e.forEach(function (t) {\n                        D(t).setAttribute(u.Attribute.OPERATOR, r);\n                    });\n                }\n                function D(t) {\n                    const e = o.toArray(t.childNodes);\n                    if (!e) return t;\n                    const r = e.filter(function (t) {\n                            return !I(t);\n                        }),\n                        n = [];\n                    for (let t, e = 0; (t = r[e]); e++)\n                        if (c.hasEmptyTag(t)) {\n                            const e = D(t);\n                            e && e !== t && n.push(e);\n                        } else n.push(t);\n                    return 1 === n.length ? n[0] : t;\n                }\n                function F(t, e, r, n) {\n                    const o = n || !1;\n                    H(t, \"Original MathML\", o),\n                        H(r, \"Semantic Tree\", o),\n                        H(e, \"Semantically enriched MathML\", o);\n                }\n                function H(t, e, r) {\n                    const n = o.formatXml(t.toString());\n                    r\n                        ? console.info(\n                              e +\n                                  \":\\n```html\\n\" +\n                                  u.removeAttributePrefix(n) +\n                                  \"\\n```\\n\"\n                          )\n                        : console.info(n);\n                }\n                (e.SETTINGS = { collapsed: !0, implicit: !0 }),\n                    (e.enrich = function (t, e) {\n                        const r = o.cloneNode(t);\n                        return (\n                            h(e.root),\n                            i.default.getInstance().structure &&\n                                t.setAttribute(\n                                    u.Attribute.STRUCTURE,\n                                    l.SemanticSkeleton.fromStructure(\n                                        t,\n                                        e\n                                    ).toString()\n                                ),\n                            n.Debugger.getInstance().generateOutput(\n                                function () {\n                                    return F(r, t, e, !0), [];\n                                }\n                            ),\n                            t\n                        );\n                    }),\n                    (e.walkTree = h),\n                    (e.introduceNewLayer = f),\n                    (e.introduceLayerAboveLca = d),\n                    (e.moveSemanticAttributes_ = m),\n                    (e.childrenSubset_ = y),\n                    (e.collateChildNodes_ = g),\n                    (e.collectChildNodes_ = b),\n                    (e.mergeChildren_ = v),\n                    (e.insertNewChild_ = _),\n                    (e.isDescendant_ = S),\n                    (e.functionApplication_ = M),\n                    (function (t) {\n                        (t.VALID = \"valid\"),\n                            (t.INVALID = \"invalid\"),\n                            (t.PRUNED = \"pruned\");\n                    })((O = e.lcaType || (e.lcaType = {}))),\n                    (e.mathmlLca_ = x),\n                    (e.prunePath_ = E),\n                    (e.attachedElement_ = A),\n                    (e.pathToRoot_ = C),\n                    (e.validLca_ = T),\n                    (e.ascendNewNode = N),\n                    (e.descendNode_ = w),\n                    (e.unitChild_ = L),\n                    (e.isIgnorable_ = I),\n                    (e.parentNode_ = P),\n                    (e.addCollapsedAttribute = function (t, e) {\n                        const r = new l.SemanticSkeleton(e);\n                        t.setAttribute(u.Attribute.COLLAPSED, r.toString());\n                    }),\n                    (e.cloneContentNode = R),\n                    (e.rewriteMfenced = k),\n                    (e.createInvisibleOperator_ = j),\n                    (e.setOperatorAttribute_ = B),\n                    (e.getInnerNode = D),\n                    (e.formattedOutput = F),\n                    (e.formattedOutput_ = H),\n                    (e.collapsePunctuated = function (t, e) {\n                        const r = !!e,\n                            n = e || [],\n                            o = t.parent,\n                            i = t.contentNodes.map(function (t) {\n                                return t.id;\n                            });\n                        i.unshift(\"c\");\n                        const s = [t.id, i];\n                        for (let e, i = 0; (e = t.childNodes[i]); i++) {\n                            const t = h(e);\n                            n.push(t);\n                            const i = D(t);\n                            o &&\n                                !r &&\n                                i.setAttribute(\n                                    u.Attribute.PARENT,\n                                    o.id.toString()\n                                ),\n                                s.push(e.id);\n                        }\n                        return s;\n                    }),\n                    (e.printNodeList__ = function (t, e) {\n                        console.info(t),\n                            o.toArray(e).forEach(function (t) {\n                                console.info(t.toString());\n                            }),\n                            console.info(\"<<<<<<<<<<<<<<<<<\");\n                    });\n            },\n            5105: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractHighlighter = void 0);\n                const n = r(5274),\n                    o = r(2298);\n                class i {\n                    constructor() {\n                        (this.color = null),\n                            (this.mactionName = \"\"),\n                            (this.currentHighlights = []);\n                    }\n                    highlight(t) {\n                        this.currentHighlights.push(\n                            t.map((t) => {\n                                const e = this.highlightNode(t);\n                                return this.setHighlighted(t), e;\n                            })\n                        );\n                    }\n                    highlightAll(t) {\n                        const e = this.getMactionNodes(t);\n                        for (let t, r = 0; (t = e[r]); r++) this.highlight([t]);\n                    }\n                    unhighlight() {\n                        const t = this.currentHighlights.pop();\n                        t &&\n                            t.forEach((t) => {\n                                this.isHighlighted(t.node) &&\n                                    (this.unhighlightNode(t),\n                                    this.unsetHighlighted(t.node));\n                            });\n                    }\n                    unhighlightAll() {\n                        for (; this.currentHighlights.length > 0; )\n                            this.unhighlight();\n                    }\n                    setColor(t) {\n                        this.color = t;\n                    }\n                    colorString() {\n                        return this.color.rgba();\n                    }\n                    addEvents(t, e) {\n                        const r = this.getMactionNodes(t);\n                        for (let t, n = 0; (t = r[n]); n++)\n                            for (const r in e) t.addEventListener(r, e[r]);\n                    }\n                    getMactionNodes(t) {\n                        return Array.from(\n                            t.getElementsByClassName(this.mactionName)\n                        );\n                    }\n                    isMactionNode(t) {\n                        const e = t.className || t.getAttribute(\"class\");\n                        return !!e && !!e.match(new RegExp(this.mactionName));\n                    }\n                    isHighlighted(t) {\n                        return t.hasAttribute(i.ATTR);\n                    }\n                    setHighlighted(t) {\n                        t.setAttribute(i.ATTR, \"true\");\n                    }\n                    unsetHighlighted(t) {\n                        t.removeAttribute(i.ATTR);\n                    }\n                    colorizeAll(t) {\n                        n.evalXPath(`.//*[@${o.Attribute.ID}]`, t).forEach(\n                            (t) => this.colorize(t)\n                        );\n                    }\n                    uncolorizeAll(t) {\n                        n.evalXPath(`.//*[@${o.Attribute.ID}]`, t).forEach(\n                            (t) => this.uncolorize(t)\n                        );\n                    }\n                    colorize(t) {\n                        const e = (0, o.addPrefix)(\"foreground\");\n                        t.hasAttribute(e) &&\n                            (t.setAttribute(e + \"-old\", t.style.color),\n                            (t.style.color = t.getAttribute(e)));\n                    }\n                    uncolorize(t) {\n                        const e = (0, o.addPrefix)(\"foreground\") + \"-old\";\n                        t.hasAttribute(e) &&\n                            (t.style.color = t.getAttribute(e));\n                    }\n                }\n                (e.AbstractHighlighter = i), (i.ATTR = \"sre-highlight\");\n            },\n            6937: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.ChtmlHighlighter = void 0);\n                const n = r(933);\n                class o extends n.CssHighlighter {\n                    constructor() {\n                        super();\n                    }\n                    isMactionNode(t) {\n                        return (\n                            t.tagName.toUpperCase() ===\n                            this.mactionName.toUpperCase()\n                        );\n                    }\n                    getMactionNodes(t) {\n                        return Array.from(\n                            t.getElementsByTagName(this.mactionName)\n                        );\n                    }\n                }\n                e.ChtmlHighlighter = o;\n            },\n            8396: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.ContrastPicker = e.ColorPicker = void 0);\n                const r = {\n                    red: { red: 255, green: 0, blue: 0 },\n                    green: { red: 0, green: 255, blue: 0 },\n                    blue: { red: 0, green: 0, blue: 255 },\n                    yellow: { red: 255, green: 255, blue: 0 },\n                    cyan: { red: 0, green: 255, blue: 255 },\n                    magenta: { red: 255, green: 0, blue: 255 },\n                    white: { red: 255, green: 255, blue: 255 },\n                    black: { red: 0, green: 0, blue: 0 },\n                };\n                function n(t, e) {\n                    const n = t || { color: e };\n                    let o = Object.prototype.hasOwnProperty.call(n, \"color\")\n                        ? r[n.color]\n                        : n;\n                    return (\n                        o || (o = r[e]),\n                        (o.alpha = Object.prototype.hasOwnProperty.call(\n                            n,\n                            \"alpha\"\n                        )\n                            ? n.alpha\n                            : 1),\n                        (function (t) {\n                            const e = (t) => (\n                                (t = Math.max(t, 0)),\n                                (t = Math.min(255, t)),\n                                Math.round(t)\n                            );\n                            return (\n                                (t.red = e(t.red)),\n                                (t.green = e(t.green)),\n                                (t.blue = e(t.blue)),\n                                (t.alpha = Math.max(t.alpha, 0)),\n                                (t.alpha = Math.min(1, t.alpha)),\n                                t\n                            );\n                        })(o)\n                    );\n                }\n                class o {\n                    constructor(t, e) {\n                        (this.foreground = n(e, o.DEFAULT_FOREGROUND_)),\n                            (this.background = n(t, o.DEFAULT_BACKGROUND_));\n                    }\n                    static toHex(t) {\n                        const e = t.toString(16);\n                        return 1 === e.length ? \"0\" + e : e;\n                    }\n                    rgba() {\n                        const t = function (t) {\n                            return (\n                                \"rgba(\" +\n                                t.red +\n                                \",\" +\n                                t.green +\n                                \",\" +\n                                t.blue +\n                                \",\" +\n                                t.alpha +\n                                \")\"\n                            );\n                        };\n                        return {\n                            background: t(this.background),\n                            foreground: t(this.foreground),\n                        };\n                    }\n                    rgb() {\n                        const t = function (t) {\n                            return (\n                                \"rgb(\" +\n                                t.red +\n                                \",\" +\n                                t.green +\n                                \",\" +\n                                t.blue +\n                                \")\"\n                            );\n                        };\n                        return {\n                            background: t(this.background),\n                            alphaback: this.background.alpha.toString(),\n                            foreground: t(this.foreground),\n                            alphafore: this.foreground.alpha.toString(),\n                        };\n                    }\n                    hex() {\n                        const t = function (t) {\n                            return (\n                                \"#\" +\n                                o.toHex(t.red) +\n                                o.toHex(t.green) +\n                                o.toHex(t.blue)\n                            );\n                        };\n                        return {\n                            background: t(this.background),\n                            alphaback: this.background.alpha.toString(),\n                            foreground: t(this.foreground),\n                            alphafore: this.foreground.alpha.toString(),\n                        };\n                    }\n                }\n                (e.ColorPicker = o),\n                    (o.DEFAULT_BACKGROUND_ = \"blue\"),\n                    (o.DEFAULT_FOREGROUND_ = \"black\");\n                e.ContrastPicker = class {\n                    constructor() {\n                        (this.hue = 10),\n                            (this.sat = 100),\n                            (this.light = 50),\n                            (this.incr = 50);\n                    }\n                    generate() {\n                        return (\n                            (e = (function (t, e, r) {\n                                (e = e > 1 ? e / 100 : e),\n                                    (r = r > 1 ? r / 100 : r);\n                                const n = (1 - Math.abs(2 * r - 1)) * e,\n                                    o = n * (1 - Math.abs(((t / 60) % 2) - 1)),\n                                    i = r - n / 2;\n                                let s = 0,\n                                    a = 0,\n                                    l = 0;\n                                return (\n                                    0 <= t && t < 60\n                                        ? ([s, a, l] = [n, o, 0])\n                                        : 60 <= t && t < 120\n                                          ? ([s, a, l] = [o, n, 0])\n                                          : 120 <= t && t < 180\n                                            ? ([s, a, l] = [0, n, o])\n                                            : 180 <= t && t < 240\n                                              ? ([s, a, l] = [0, o, n])\n                                              : 240 <= t && t < 300\n                                                ? ([s, a, l] = [o, 0, n])\n                                                : 300 <= t &&\n                                                  t < 360 &&\n                                                  ([s, a, l] = [n, 0, o]),\n                                    { red: s + i, green: a + i, blue: l + i }\n                                );\n                            })(this.hue, this.sat, this.light)),\n                            \"rgb(\" +\n                                (t = {\n                                    red: Math.round(255 * e.red),\n                                    green: Math.round(255 * e.green),\n                                    blue: Math.round(255 * e.blue),\n                                }).red +\n                                \",\" +\n                                t.green +\n                                \",\" +\n                                t.blue +\n                                \")\"\n                        );\n                    }\n                    increment() {\n                        this.hue = (this.hue + this.incr) % 360;\n                    }\n                };\n            },\n            933: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CssHighlighter = void 0);\n                const n = r(5105);\n                class o extends n.AbstractHighlighter {\n                    constructor() {\n                        super(), (this.mactionName = \"mjx-maction\");\n                    }\n                    highlightNode(t) {\n                        const e = {\n                                node: t,\n                                background: t.style.backgroundColor,\n                                foreground: t.style.color,\n                            },\n                            r = this.colorString();\n                        return (\n                            (t.style.backgroundColor = r.background),\n                            (t.style.color = r.foreground),\n                            e\n                        );\n                    }\n                    unhighlightNode(t) {\n                        (t.node.style.backgroundColor = t.background),\n                            (t.node.style.color = t.foreground);\n                    }\n                }\n                e.CssHighlighter = o;\n            },\n            3090: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.highlighterMapping_ =\n                        e.addEvents =\n                        e.highlighter =\n                            void 0);\n                const n = r(6937),\n                    o = r(8396),\n                    i = r(933),\n                    s = r(2598),\n                    a = r(4500),\n                    l = r(7071),\n                    c = r(4346),\n                    u = r(2222);\n                (e.highlighter = function (t, r, n) {\n                    const i = new o.ColorPicker(t, r),\n                        s =\n                            \"NativeMML\" === n.renderer && \"Safari\" === n.browser\n                                ? \"MML-CSS\"\n                                : \"SVG\" === n.renderer && \"v3\" === n.browser\n                                  ? \"SVG-V3\"\n                                  : n.renderer,\n                        a = new (e.highlighterMapping_[s] ||\n                            e.highlighterMapping_.NativeMML)();\n                    return a.setColor(i), a;\n                }),\n                    (e.addEvents = function (t, r, n) {\n                        const o = e.highlighterMapping_[n.renderer];\n                        o && new o().addEvents(t, r);\n                    }),\n                    (e.highlighterMapping_ = {\n                        SVG: c.SvgHighlighter,\n                        \"SVG-V3\": u.SvgV3Highlighter,\n                        NativeMML: l.MmlHighlighter,\n                        \"HTML-CSS\": s.HtmlHighlighter,\n                        \"MML-CSS\": a.MmlCssHighlighter,\n                        CommonHTML: i.CssHighlighter,\n                        CHTML: n.ChtmlHighlighter,\n                    });\n            },\n            2598: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.HtmlHighlighter = void 0);\n                const n = r(5740),\n                    o = r(5105);\n                class i extends o.AbstractHighlighter {\n                    constructor() {\n                        super(), (this.mactionName = \"maction\");\n                    }\n                    highlightNode(t) {\n                        const e = {\n                                node: t,\n                                foreground: t.style.color,\n                                position: t.style.position,\n                            },\n                            r = this.color.rgb();\n                        (t.style.color = r.foreground),\n                            (t.style.position = \"relative\");\n                        const o = t.bbox;\n                        if (o && o.w) {\n                            const i = 0.05,\n                                s = 0,\n                                a = n.createElement(\"span\"),\n                                l = parseFloat(t.style.paddingLeft || \"0\");\n                            (a.style.backgroundColor = r.background),\n                                (a.style.opacity = r.alphaback.toString()),\n                                (a.style.display = \"inline-block\"),\n                                (a.style.height = o.h + o.d + 2 * i + \"em\"),\n                                (a.style.verticalAlign = -o.d + \"em\"),\n                                (a.style.marginTop = a.style.marginBottom =\n                                    -i + \"em\"),\n                                (a.style.width = o.w + 2 * s + \"em\"),\n                                (a.style.marginLeft = l - s + \"em\"),\n                                (a.style.marginRight = -o.w - s - l + \"em\"),\n                                t.parentNode.insertBefore(a, t),\n                                (e.box = a);\n                        }\n                        return e;\n                    }\n                    unhighlightNode(t) {\n                        const e = t.node;\n                        (e.style.color = t.foreground),\n                            (e.style.position = t.position),\n                            t.box && t.box.parentNode.removeChild(t.box);\n                    }\n                }\n                e.HtmlHighlighter = i;\n            },\n            4500: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlCssHighlighter = void 0);\n                const n = r(933);\n                class o extends n.CssHighlighter {\n                    constructor() {\n                        super(), (this.mactionName = \"maction\");\n                    }\n                    getMactionNodes(t) {\n                        return Array.from(\n                            t.getElementsByTagName(this.mactionName)\n                        );\n                    }\n                    isMactionNode(t) {\n                        return t.tagName === this.mactionName;\n                    }\n                }\n                e.MmlCssHighlighter = o;\n            },\n            7071: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MmlHighlighter = void 0);\n                const n = r(5105);\n                class o extends n.AbstractHighlighter {\n                    constructor() {\n                        super(), (this.mactionName = \"maction\");\n                    }\n                    highlightNode(t) {\n                        let e = t.getAttribute(\"style\");\n                        return (\n                            (e +=\n                                \";background-color: \" +\n                                this.colorString().background),\n                            (e += \";color: \" + this.colorString().foreground),\n                            t.setAttribute(\"style\", e),\n                            { node: t }\n                        );\n                    }\n                    unhighlightNode(t) {\n                        let e = t.node.getAttribute(\"style\");\n                        (e = e.replace(\n                            \";background-color: \" +\n                                this.colorString().background,\n                            \"\"\n                        )),\n                            (e = e.replace(\n                                \";color: \" + this.colorString().foreground,\n                                \"\"\n                            )),\n                            t.node.setAttribute(\"style\", e);\n                    }\n                    colorString() {\n                        return this.color.rgba();\n                    }\n                    getMactionNodes(t) {\n                        return Array.from(\n                            t.getElementsByTagName(this.mactionName)\n                        );\n                    }\n                    isMactionNode(t) {\n                        return t.tagName === this.mactionName;\n                    }\n                }\n                e.MmlHighlighter = o;\n            },\n            4346: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SvgHighlighter = void 0);\n                const n = r(5740),\n                    o = r(5105);\n                class i extends o.AbstractHighlighter {\n                    constructor() {\n                        super(), (this.mactionName = \"mjx-svg-maction\");\n                    }\n                    highlightNode(t) {\n                        let e;\n                        if (this.isHighlighted(t))\n                            return (\n                                (e = {\n                                    node: t.previousSibling || t,\n                                    background: t.style.backgroundColor,\n                                    foreground: t.style.color,\n                                }),\n                                e\n                            );\n                        if (\"svg\" === t.tagName) {\n                            const e = {\n                                node: t,\n                                background: t.style.backgroundColor,\n                                foreground: t.style.color,\n                            };\n                            return (\n                                (t.style.backgroundColor =\n                                    this.colorString().background),\n                                (t.style.color = this.colorString().foreground),\n                                e\n                            );\n                        }\n                        const r = n.createElementNS(\n                            \"http://www.w3.org/2000/svg\",\n                            \"rect\"\n                        );\n                        let i;\n                        if (\"use\" === t.nodeName) {\n                            const e = n.createElementNS(\n                                \"http://www.w3.org/2000/svg\",\n                                \"g\"\n                            );\n                            t.parentNode.insertBefore(e, t),\n                                e.appendChild(t),\n                                (i = e.getBBox()),\n                                e.parentNode.replaceChild(t, e);\n                        } else i = t.getBBox();\n                        r.setAttribute(\"x\", (i.x - 40).toString()),\n                            r.setAttribute(\"y\", (i.y - 40).toString()),\n                            r.setAttribute(\"width\", (i.width + 80).toString()),\n                            r.setAttribute(\n                                \"height\",\n                                (i.height + 80).toString()\n                            );\n                        const s = t.getAttribute(\"transform\");\n                        return (\n                            s && r.setAttribute(\"transform\", s),\n                            r.setAttribute(\n                                \"fill\",\n                                this.colorString().background\n                            ),\n                            r.setAttribute(o.AbstractHighlighter.ATTR, \"true\"),\n                            t.parentNode.insertBefore(r, t),\n                            (e = {\n                                node: r,\n                                foreground: t.getAttribute(\"fill\"),\n                            }),\n                            t.setAttribute(\n                                \"fill\",\n                                this.colorString().foreground\n                            ),\n                            e\n                        );\n                    }\n                    setHighlighted(t) {\n                        \"svg\" === t.tagName && super.setHighlighted(t);\n                    }\n                    unhighlightNode(t) {\n                        if (\"background\" in t)\n                            return (\n                                (t.node.style.backgroundColor = t.background),\n                                void (t.node.style.color = t.foreground)\n                            );\n                        t.foreground\n                            ? t.node.nextSibling.setAttribute(\n                                  \"fill\",\n                                  t.foreground\n                              )\n                            : t.node.nextSibling.removeAttribute(\"fill\"),\n                            t.node.parentNode.removeChild(t.node);\n                    }\n                    isMactionNode(t) {\n                        let e = t.className || t.getAttribute(\"class\");\n                        return (\n                            (e = void 0 !== e.baseVal ? e.baseVal : e),\n                            !!e && !!e.match(new RegExp(this.mactionName))\n                        );\n                    }\n                }\n                e.SvgHighlighter = i;\n            },\n            2222: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SvgV3Highlighter = void 0);\n                const n = r(5740),\n                    o = r(5274),\n                    i = r(5105),\n                    s = r(8396),\n                    a = r(4346);\n                class l extends a.SvgHighlighter {\n                    constructor() {\n                        super(), (this.mactionName = \"maction\");\n                    }\n                    highlightNode(t) {\n                        let e;\n                        if (this.isHighlighted(t))\n                            return (\n                                (e = {\n                                    node: t,\n                                    background: this.colorString().background,\n                                    foreground: this.colorString().foreground,\n                                }),\n                                e\n                            );\n                        if (\n                            \"svg\" === t.tagName ||\n                            \"MJX-CONTAINER\" === t.tagName\n                        )\n                            return (\n                                (e = {\n                                    node: t,\n                                    background: t.style.backgroundColor,\n                                    foreground: t.style.color,\n                                }),\n                                (t.style.backgroundColor =\n                                    this.colorString().background),\n                                (t.style.color = this.colorString().foreground),\n                                e\n                            );\n                        const r = n.createElementNS(\n                            \"http://www.w3.org/2000/svg\",\n                            \"rect\"\n                        );\n                        r.setAttribute(\"sre-highlighter-added\", \"true\");\n                        const o = t.getBBox();\n                        r.setAttribute(\"x\", (o.x - 40).toString()),\n                            r.setAttribute(\"y\", (o.y - 40).toString()),\n                            r.setAttribute(\"width\", (o.width + 80).toString()),\n                            r.setAttribute(\n                                \"height\",\n                                (o.height + 80).toString()\n                            );\n                        const a = t.getAttribute(\"transform\");\n                        if (\n                            (a && r.setAttribute(\"transform\", a),\n                            r.setAttribute(\n                                \"fill\",\n                                this.colorString().background\n                            ),\n                            t.setAttribute(i.AbstractHighlighter.ATTR, \"true\"),\n                            t.parentNode.insertBefore(r, t),\n                            (e = {\n                                node: t,\n                                foreground: t.getAttribute(\"fill\"),\n                            }),\n                            \"rect\" === t.nodeName)\n                        ) {\n                            const e = new s.ColorPicker({\n                                alpha: 0,\n                                color: \"black\",\n                            });\n                            t.setAttribute(\"fill\", e.rgba().foreground);\n                        } else\n                            t.setAttribute(\n                                \"fill\",\n                                this.colorString().foreground\n                            );\n                        return e;\n                    }\n                    unhighlightNode(t) {\n                        const e = t.node.previousSibling;\n                        if (e && e.hasAttribute(\"sre-highlighter-added\"))\n                            return (\n                                t.foreground\n                                    ? t.node.setAttribute(\"fill\", t.foreground)\n                                    : t.node.removeAttribute(\"fill\"),\n                                void t.node.parentNode.removeChild(e)\n                            );\n                        (t.node.style.backgroundColor = t.background),\n                            (t.node.style.color = t.foreground);\n                    }\n                    isMactionNode(t) {\n                        return (\n                            t.getAttribute(\"data-mml-node\") === this.mactionName\n                        );\n                    }\n                    getMactionNodes(t) {\n                        return Array.from(\n                            o.evalXPath(\n                                `.//*[@data-mml-node=\"${this.mactionName}\"]`,\n                                t\n                            )\n                        );\n                    }\n                }\n                e.SvgV3Highlighter = l;\n            },\n            7222: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.StaticTrieNode = e.AbstractTrieNode = void 0);\n                const n = r(2057),\n                    o = r(4391);\n                class i {\n                    constructor(t, e) {\n                        (this.constraint = t),\n                            (this.test = e),\n                            (this.children_ = {}),\n                            (this.kind = o.TrieNodeKind.ROOT);\n                    }\n                    getConstraint() {\n                        return this.constraint;\n                    }\n                    getKind() {\n                        return this.kind;\n                    }\n                    applyTest(t) {\n                        return this.test(t);\n                    }\n                    addChild(t) {\n                        const e = t.getConstraint(),\n                            r = this.children_[e];\n                        return (this.children_[e] = t), r;\n                    }\n                    getChild(t) {\n                        return this.children_[t];\n                    }\n                    getChildren() {\n                        const t = [];\n                        for (const e in this.children_)\n                            t.push(this.children_[e]);\n                        return t;\n                    }\n                    findChildren(t) {\n                        const e = [];\n                        for (const r in this.children_) {\n                            const n = this.children_[r];\n                            n.applyTest(t) && e.push(n);\n                        }\n                        return e;\n                    }\n                    removeChild(t) {\n                        delete this.children_[t];\n                    }\n                    toString() {\n                        return this.constraint;\n                    }\n                }\n                e.AbstractTrieNode = i;\n                e.StaticTrieNode = class extends i {\n                    constructor(t, e) {\n                        super(t, e),\n                            (this.rule_ = null),\n                            (this.kind = o.TrieNodeKind.STATIC);\n                    }\n                    getRule() {\n                        return this.rule_;\n                    }\n                    setRule(t) {\n                        this.rule_ &&\n                            n.Debugger.getInstance().output(\n                                \"Replacing rule \" + this.rule_ + \" with \" + t\n                            ),\n                            (this.rule_ = t);\n                    }\n                    toString() {\n                        return this.getRule()\n                            ? this.constraint + \"\\n==> \" + this.getRule().action\n                            : this.constraint;\n                    }\n                };\n            },\n            4508: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Trie = void 0);\n                const n = r(4391),\n                    o = r(9701);\n                class i {\n                    constructor() {\n                        this.root = (0, o.getNode)(\n                            n.TrieNodeKind.ROOT,\n                            \"\",\n                            null\n                        );\n                    }\n                    static collectRules_(t) {\n                        const e = [];\n                        let r = [t];\n                        for (; r.length; ) {\n                            const t = r.shift();\n                            if (\n                                t.getKind() === n.TrieNodeKind.QUERY ||\n                                t.getKind() === n.TrieNodeKind.BOOLEAN\n                            ) {\n                                const r = t.getRule();\n                                r && e.unshift(r);\n                            }\n                            r = r.concat(t.getChildren());\n                        }\n                        return e;\n                    }\n                    static printWithDepth_(t, e, r) {\n                        r +=\n                            new Array(e + 2).join(e.toString()) +\n                            \": \" +\n                            t.toString() +\n                            \"\\n\";\n                        const n = t.getChildren();\n                        for (let t, o = 0; (t = n[o]); o++)\n                            r = i.printWithDepth_(t, e + 1, r);\n                        return r;\n                    }\n                    static order_(t) {\n                        const e = t.getChildren();\n                        if (!e.length) return 0;\n                        const r = Math.max.apply(null, e.map(i.order_));\n                        return Math.max(e.length, r);\n                    }\n                    addRule(t) {\n                        let e = this.root;\n                        const r = t.context,\n                            o = t.dynamicCstr.getValues();\n                        for (let t = 0, i = o.length; t < i; t++)\n                            e = this.addNode_(\n                                e,\n                                o[t],\n                                n.TrieNodeKind.DYNAMIC,\n                                r\n                            );\n                        e = this.addNode_(\n                            e,\n                            t.precondition.query,\n                            n.TrieNodeKind.QUERY,\n                            r\n                        );\n                        const i = t.precondition.constraints;\n                        for (let t = 0, o = i.length; t < o; t++)\n                            e = this.addNode_(\n                                e,\n                                i[t],\n                                n.TrieNodeKind.BOOLEAN,\n                                r\n                            );\n                        e.setRule(t);\n                    }\n                    lookupRules(t, e) {\n                        let r = [this.root];\n                        const o = [];\n                        for (; e.length; ) {\n                            const t = e.shift(),\n                                o = [];\n                            for (; r.length; ) {\n                                r.shift()\n                                    .getChildren()\n                                    .forEach((e) => {\n                                        (e.getKind() ===\n                                            n.TrieNodeKind.DYNAMIC &&\n                                            -1 ===\n                                                t.indexOf(e.getConstraint())) ||\n                                            o.push(e);\n                                    });\n                            }\n                            r = o.slice();\n                        }\n                        for (; r.length; ) {\n                            const e = r.shift();\n                            if (e.getRule) {\n                                const t = e.getRule();\n                                t && o.push(t);\n                            }\n                            const n = e.findChildren(t);\n                            r = r.concat(n);\n                        }\n                        return o;\n                    }\n                    hasSubtrie(t) {\n                        let e = this.root;\n                        for (let r = 0, n = t.length; r < n; r++) {\n                            const n = t[r];\n                            if (((e = e.getChild(n)), !e)) return !1;\n                        }\n                        return !0;\n                    }\n                    toString() {\n                        return i.printWithDepth_(this.root, 0, \"\");\n                    }\n                    collectRules() {\n                        return i.collectRules_(this.root);\n                    }\n                    order() {\n                        return i.order_(this.root);\n                    }\n                    enumerate(t) {\n                        return this.enumerate_(this.root, t);\n                    }\n                    byConstraint(t) {\n                        let e = this.root;\n                        for (; t.length && e; ) {\n                            const r = t.shift();\n                            e = e.getChild(r);\n                        }\n                        return e || null;\n                    }\n                    enumerate_(t, e) {\n                        e = e || {};\n                        const r = t.getChildren();\n                        for (let t, o = 0; (t = r[o]); o++)\n                            t.kind === n.TrieNodeKind.DYNAMIC &&\n                                (e[t.getConstraint()] = this.enumerate_(\n                                    t,\n                                    e[t.getConstraint()]\n                                ));\n                        return e;\n                    }\n                    addNode_(t, e, r, n) {\n                        let i = t.getChild(e);\n                        return (\n                            i || ((i = (0, o.getNode)(r, e, n)), t.addChild(i)),\n                            i\n                        );\n                    }\n                }\n                e.Trie = i;\n            },\n            4391: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.TrieNodeKind = void 0),\n                    (function (t) {\n                        (t.ROOT = \"root\"),\n                            (t.DYNAMIC = \"dynamic\"),\n                            (t.QUERY = \"query\"),\n                            (t.BOOLEAN = \"boolean\"),\n                            (t.STATIC = \"static\");\n                    })(e.TrieNodeKind || (e.TrieNodeKind = {}));\n            },\n            9701: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.BooleanTrieNode =\n                        e.QueryTrieNode =\n                        e.constraintTest_ =\n                        e.DynamicTrieNode =\n                        e.RootTrieNode =\n                        e.getNode =\n                            void 0);\n                const n = r(5740),\n                    o = r(5274),\n                    i = r(2105),\n                    s = r(2780),\n                    a = r(7222),\n                    l = r(7222),\n                    c = r(4391);\n                e.getNode = function (t, e, r) {\n                    switch (t) {\n                        case c.TrieNodeKind.ROOT:\n                            return new u();\n                        case c.TrieNodeKind.DYNAMIC:\n                            return new p(e);\n                        case c.TrieNodeKind.QUERY:\n                            return new d(e, r);\n                        case c.TrieNodeKind.BOOLEAN:\n                            return new m(e, r);\n                        default:\n                            return null;\n                    }\n                };\n                class u extends a.AbstractTrieNode {\n                    constructor() {\n                        super(\"\", () => !0), (this.kind = c.TrieNodeKind.ROOT);\n                    }\n                }\n                e.RootTrieNode = u;\n                class p extends a.AbstractTrieNode {\n                    constructor(t) {\n                        super(t, (e) => e === t),\n                            (this.kind = c.TrieNodeKind.DYNAMIC);\n                    }\n                }\n                e.DynamicTrieNode = p;\n                const h = {\n                    \"=\": (t, e) => t === e,\n                    \"!=\": (t, e) => t !== e,\n                    \"<\": (t, e) => t < e,\n                    \">\": (t, e) => t > e,\n                    \"<=\": (t, e) => t <= e,\n                    \">=\": (t, e) => t >= e,\n                };\n                function f(t) {\n                    if (t.match(/^self::\\*$/)) return (t) => !0;\n                    if (t.match(/^self::\\w+$/)) {\n                        const e = t.slice(6).toUpperCase();\n                        return (t) => t.tagName && n.tagName(t) === e;\n                    }\n                    if (t.match(/^self::\\w+:\\w+$/)) {\n                        const e = t.split(\":\"),\n                            r = o.resolveNameSpace(e[2]);\n                        if (!r) return null;\n                        const n = e[3].toUpperCase();\n                        return (t) =>\n                            t.localName &&\n                            t.localName.toUpperCase() === n &&\n                            t.namespaceURI === r;\n                    }\n                    if (t.match(/^@\\w+$/)) {\n                        const e = t.slice(1);\n                        return (t) => t.hasAttribute && t.hasAttribute(e);\n                    }\n                    if (t.match(/^@\\w+=\"[\\w\\d ]+\"$/)) {\n                        const e = t.split(\"=\"),\n                            r = e[0].slice(1),\n                            n = e[1].slice(1, -1);\n                        return (t) =>\n                            t.hasAttribute &&\n                            t.hasAttribute(r) &&\n                            t.getAttribute(r) === n;\n                    }\n                    if (t.match(/^@\\w+!=\"[\\w\\d ]+\"$/)) {\n                        const e = t.split(\"!=\"),\n                            r = e[0].slice(1),\n                            n = e[1].slice(1, -1);\n                        return (t) =>\n                            !t.hasAttribute ||\n                            !t.hasAttribute(r) ||\n                            t.getAttribute(r) !== n;\n                    }\n                    if (\n                        t.match(/^contains\\(\\s*@grammar\\s*,\\s*\"[\\w\\d ]+\"\\s*\\)$/)\n                    ) {\n                        const e = t.split('\"')[1];\n                        return (t) => !!i.Grammar.getInstance().getParameter(e);\n                    }\n                    if (\n                        t.match(\n                            /^not\\(\\s*contains\\(\\s*@grammar\\s*,\\s*\"[\\w\\d ]+\"\\s*\\)\\s*\\)$/\n                        )\n                    ) {\n                        const e = t.split('\"')[1];\n                        return (t) => !i.Grammar.getInstance().getParameter(e);\n                    }\n                    if (t.match(/^name\\(\\.\\.\\/\\.\\.\\)=\"\\w+\"$/)) {\n                        const e = t.split('\"')[1].toUpperCase();\n                        return (t) => {\n                            var r, o;\n                            return (\n                                (null ===\n                                    (o =\n                                        null === (r = t.parentNode) ||\n                                        void 0 === r\n                                            ? void 0\n                                            : r.parentNode) || void 0 === o\n                                    ? void 0\n                                    : o.tagName) &&\n                                n.tagName(t.parentNode.parentNode) === e\n                            );\n                        };\n                    }\n                    if (t.match(/^count\\(preceding-sibling::\\*\\)=\\d+$/)) {\n                        const e = t.split(\"=\"),\n                            r = parseInt(e[1], 10);\n                        return (t) => {\n                            var e;\n                            return (\n                                (null === (e = t.parentNode) || void 0 === e\n                                    ? void 0\n                                    : e.childNodes[r]) === t\n                            );\n                        };\n                    }\n                    if (t.match(/^.+\\[@category!?=\".+\"\\]$/)) {\n                        let [, e, r, n] = t.match(\n                            /^(.+)\\[@category(!?=)\"(.+)\"\\]$/\n                        );\n                        const i = n.match(/^unit:(.+)$/);\n                        let a = \"\";\n                        return (\n                            i && ((n = i[1]), (a = \":unit\")),\n                            (t) => {\n                                const i = o.evalXPath(e, t)[0];\n                                if (i) {\n                                    const t = s.lookupCategory(\n                                        i.textContent + a\n                                    );\n                                    return \"=\" === r ? t === n : t !== n;\n                                }\n                                return !1;\n                            }\n                        );\n                    }\n                    if (t.match(/^string-length\\(.+\\)\\W+\\d+/)) {\n                        const [, e, r, n] = t.match(\n                                /^string-length\\((.+)\\)(\\W+)(\\d+)/\n                            ),\n                            i = h[r] || h[\"=\"],\n                            s = parseInt(n, 10);\n                        return (t) => {\n                            const r = o.evalXPath(e, t)[0];\n                            return (\n                                !!r && i(Array.from(r.textContent).length, s)\n                            );\n                        };\n                    }\n                    return null;\n                }\n                e.constraintTest_ = f;\n                class d extends l.StaticTrieNode {\n                    constructor(t, e) {\n                        super(t, f(t)),\n                            (this.context = e),\n                            (this.kind = c.TrieNodeKind.QUERY);\n                    }\n                    applyTest(t) {\n                        return this.test\n                            ? this.test(t)\n                            : this.context.applyQuery(t, this.constraint) === t;\n                    }\n                }\n                e.QueryTrieNode = d;\n                class m extends l.StaticTrieNode {\n                    constructor(t, e) {\n                        super(t, f(t)),\n                            (this.context = e),\n                            (this.kind = c.TrieNodeKind.BOOLEAN);\n                    }\n                    applyTest(t) {\n                        return this.test\n                            ? this.test(t)\n                            : this.context.applyConstraint(t, this.constraint);\n                    }\n                }\n                e.BooleanTrieNode = m;\n            },\n            7491: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.completeLocale =\n                        e.getLocale =\n                        e.setLocale =\n                        e.locales =\n                            void 0);\n                const n = r(5897),\n                    o = r(1377),\n                    i = r(2105),\n                    s = r(4249),\n                    a = r(8657),\n                    l = r(173),\n                    c = r(9393),\n                    u = r(7978),\n                    p = r(5540),\n                    h = r(5218),\n                    f = r(3887),\n                    d = r(8384),\n                    m = r(7206),\n                    y = r(7734),\n                    g = r(7264),\n                    b = r(4356);\n                function v() {\n                    const t = o.Variables.ensureLocale(\n                        n.default.getInstance().locale,\n                        n.default.getInstance().defaultLocale\n                    );\n                    return (n.default.getInstance().locale = t), e.locales[t]();\n                }\n                (e.locales = {\n                    ca: s.ca,\n                    da: a.da,\n                    de: l.de,\n                    en: c.en,\n                    es: u.es,\n                    fr: p.fr,\n                    hi: h.hi,\n                    it: f.it,\n                    nb: d.nb,\n                    nn: y.nn,\n                    sv: g.sv,\n                    nemeth: m.nemeth,\n                }),\n                    (e.setLocale = function () {\n                        const t = v();\n                        if (\n                            ((function (t) {\n                                const e = n.default.getInstance().subiso;\n                                -1 === t.SUBISO.all.indexOf(e) &&\n                                    (n.default.getInstance().subiso =\n                                        t.SUBISO.default);\n                                t.SUBISO.current =\n                                    n.default.getInstance().subiso;\n                            })(t),\n                            t)\n                        ) {\n                            for (const e of Object.getOwnPropertyNames(t))\n                                b.LOCALE[e] = t[e];\n                            for (const [e, r] of Object.entries(t.CORRECTIONS))\n                                i.Grammar.getInstance().setCorrection(e, r);\n                        }\n                    }),\n                    (e.getLocale = v),\n                    (e.completeLocale = function (t) {\n                        const r = e.locales[t.locale];\n                        if (!r)\n                            return void console.error(\n                                \"Locale \" + t.locale + \" does not exist!\"\n                            );\n                        const n = t.kind.toUpperCase(),\n                            o = t.messages;\n                        if (!o) return;\n                        const i = r();\n                        for (const [t, e] of Object.entries(o)) i[n][t] = e;\n                    });\n            },\n            4356: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.createLocale = e.LOCALE = void 0);\n                const n = r(7549);\n                function o() {\n                    return {\n                        FUNCTIONS: (0, n.FUNCTIONS)(),\n                        MESSAGES: (0, n.MESSAGES)(),\n                        ALPHABETS: (0, n.ALPHABETS)(),\n                        NUMBERS: (0, n.NUMBERS)(),\n                        COMBINERS: {},\n                        CORRECTIONS: {},\n                        SUBISO: (0, n.SUBISO)(),\n                    };\n                }\n                (e.LOCALE = o()), (e.createLocale = o);\n            },\n            2536: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.localeFontCombiner =\n                        e.extractString =\n                        e.localEnclose =\n                        e.localRole =\n                        e.localFont =\n                        e.combinePostfixIndex =\n                        e.nestingToString =\n                            void 0);\n                const n = r(4356),\n                    o = r(4977);\n                function i(t, e) {\n                    return void 0 === t ? e : \"string\" == typeof t ? t : t[0];\n                }\n                (e.nestingToString = function (t) {\n                    switch (t) {\n                        case 1:\n                            return n.LOCALE.MESSAGES.MS.ONCE || \"\";\n                        case 2:\n                            return n.LOCALE.MESSAGES.MS.TWICE;\n                        default:\n                            return t.toString();\n                    }\n                }),\n                    (e.combinePostfixIndex = function (t, e) {\n                        return t === n.LOCALE.MESSAGES.MS.ROOTINDEX ||\n                            t === n.LOCALE.MESSAGES.MS.INDEX\n                            ? t\n                            : t + \" \" + e;\n                    }),\n                    (e.localFont = function (t) {\n                        return i(n.LOCALE.MESSAGES.font[t], t);\n                    }),\n                    (e.localRole = function (t) {\n                        return i(n.LOCALE.MESSAGES.role[t], t);\n                    }),\n                    (e.localEnclose = function (t) {\n                        return i(n.LOCALE.MESSAGES.enclose[t], t);\n                    }),\n                    (e.extractString = i),\n                    (e.localeFontCombiner = function (t) {\n                        return \"string\" == typeof t\n                            ? { font: t, combiner: n.LOCALE.ALPHABETS.combiner }\n                            : {\n                                  font: t[0],\n                                  combiner:\n                                      n.LOCALE.COMBINERS[t[1]] ||\n                                      o.Combiners[t[1]] ||\n                                      n.LOCALE.ALPHABETS.combiner,\n                              };\n                    });\n            },\n            4249: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.ca = void 0);\n                const n = r(4356),\n                    o = r(2536),\n                    i = r(614),\n                    s = r(4977),\n                    a = function (t, e, r) {\n                        return (\n                            (t = \"sans serif \" + (r ? r + \" \" + t : t)),\n                            e ? t + \" \" + e : t\n                        );\n                    };\n                let l = null;\n                e.ca = function () {\n                    return (\n                        l ||\n                            (l = (function () {\n                                const t = (0, n.createLocale)();\n                                return (\n                                    (t.NUMBERS = i.default),\n                                    (t.COMBINERS.sansserif = a),\n                                    (t.FUNCTIONS.fracNestDepth = (t) => !1),\n                                    (t.FUNCTIONS.combineRootIndex =\n                                        o.combinePostfixIndex),\n                                    (t.FUNCTIONS.combineNestedRadical = (\n                                        t,\n                                        e,\n                                        r\n                                    ) => t + r),\n                                    (t.FUNCTIONS.fontRegexp = (t) =>\n                                        RegExp(\"^\" + t + \" \")),\n                                    (t.FUNCTIONS.plural = (t) =>\n                                        /.*os$/.test(t)\n                                            ? t + \"sos\"\n                                            : /.*s$/.test(t)\n                                              ? t + \"os\"\n                                              : /.*ga$/.test(t)\n                                                ? t.slice(0, -2) + \"gues\"\n                                                : /.*\\xe7a$/.test(t)\n                                                  ? t.slice(0, -2) + \"ces\"\n                                                  : /.*ca$/.test(t)\n                                                    ? t.slice(0, -2) + \"ques\"\n                                                    : /.*ja$/.test(t)\n                                                      ? t.slice(0, -2) + \"ges\"\n                                                      : /.*qua$/.test(t)\n                                                        ? t.slice(0, -3) +\n                                                          \"q\\xfces\"\n                                                        : /.*a$/.test(t)\n                                                          ? t.slice(0, -1) +\n                                                            \"es\"\n                                                          : /.*(e|i)$/.test(t)\n                                                            ? t + \"ns\"\n                                                            : /.*\\xed$/.test(t)\n                                                              ? t.slice(0, -1) +\n                                                                \"ins\"\n                                                              : t + \"s\"),\n                                    (t.FUNCTIONS.si = (t, e) => (\n                                        e.match(/^metre/) &&\n                                            (t = t\n                                                .replace(/a$/, \"\\xe0\")\n                                                .replace(/o$/, \"\\xf2\")\n                                                .replace(/i$/, \"\\xed\")),\n                                        t + e\n                                    )),\n                                    (t.ALPHABETS.combiner =\n                                        s.Combiners.prefixCombiner),\n                                    t\n                                );\n                            })()),\n                        l\n                    );\n                };\n            },\n            8657: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.da = void 0);\n                const n = r(4356),\n                    o = r(2536),\n                    i = r(3866),\n                    s = r(4977);\n                let a = null;\n                e.da = function () {\n                    return (\n                        a ||\n                            (a = (function () {\n                                const t = (0, n.createLocale)();\n                                return (\n                                    (t.NUMBERS = i.default),\n                                    (t.FUNCTIONS.radicalNestDepth =\n                                        o.nestingToString),\n                                    (t.FUNCTIONS.fontRegexp = (e) =>\n                                        e === t.ALPHABETS.capPrefix.default\n                                            ? RegExp(\"^\" + e + \" \")\n                                            : RegExp(\" \" + e + \"$\")),\n                                    (t.ALPHABETS.combiner =\n                                        s.Combiners.postfixCombiner),\n                                    (t.ALPHABETS.digitTrans.default =\n                                        i.default.numberToWords),\n                                    t\n                                );\n                            })()),\n                        a\n                    );\n                };\n            },\n            173: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.de = void 0);\n                const n = r(2105),\n                    o = r(2536),\n                    i = r(4356),\n                    s = r(1435),\n                    a = function (t, e, r) {\n                        return (\n                            \"s\" === r &&\n                                ((e = e\n                                    .split(\" \")\n                                    .map(function (t) {\n                                        return t.replace(/s$/, \"\");\n                                    })\n                                    .join(\" \")),\n                                (r = \"\")),\n                            (t = r ? r + \" \" + t : t),\n                            e ? e + \" \" + t : t\n                        );\n                    },\n                    l = function (t, e, r) {\n                        return (\n                            (t = r && \"s\" !== r ? r + \" \" + t : t),\n                            e ? t + \" \" + e : t\n                        );\n                    };\n                let c = null;\n                e.de = function () {\n                    return (\n                        c ||\n                            (c = (function () {\n                                const t = (0, i.createLocale)();\n                                return (\n                                    (t.NUMBERS = s.default),\n                                    (t.COMBINERS.germanPostfix = l),\n                                    (t.ALPHABETS.combiner = a),\n                                    (t.FUNCTIONS.radicalNestDepth = (e) =>\n                                        e > 1\n                                            ? t.NUMBERS.numberToWords(e) +\n                                              \"fach\"\n                                            : \"\"),\n                                    (t.FUNCTIONS.combineRootIndex = (t, e) => {\n                                        const r = e ? e + \"wurzel\" : \"\";\n                                        return t.replace(\"Wurzel\", r);\n                                    }),\n                                    (t.FUNCTIONS.combineNestedRadical = (\n                                        t,\n                                        e,\n                                        r\n                                    ) => {\n                                        const n =\n                                            (e ? e + \" \" : \"\") +\n                                            (t = r.match(/exponent$/)\n                                                ? t + \"r\"\n                                                : t);\n                                        return r.match(/ /)\n                                            ? r.replace(/ /, \" \" + n + \" \")\n                                            : n + \" \" + r;\n                                    }),\n                                    (t.FUNCTIONS.fontRegexp = function (t) {\n                                        return (\n                                            (t = t\n                                                .split(\" \")\n                                                .map(function (t) {\n                                                    return t.replace(\n                                                        /s$/,\n                                                        \"(|s)\"\n                                                    );\n                                                })\n                                                .join(\" \")),\n                                            new RegExp(\n                                                \"((^\" + t + \" )|( \" + t + \"$))\"\n                                            )\n                                        );\n                                    }),\n                                    (t.CORRECTIONS.correctOne = (t) =>\n                                        t.replace(/^eins$/, \"ein\")),\n                                    (t.CORRECTIONS.localFontNumber = (t) =>\n                                        (0, o.localFont)(t)\n                                            .split(\" \")\n                                            .map(function (t) {\n                                                return t.replace(/s$/, \"\");\n                                            })\n                                            .join(\" \")),\n                                    (t.CORRECTIONS.lowercase = (t) =>\n                                        t.toLowerCase()),\n                                    (t.CORRECTIONS.article = (t) => {\n                                        const e =\n                                                n.Grammar.getInstance().getParameter(\n                                                    \"case\"\n                                                ),\n                                            r =\n                                                n.Grammar.getInstance().getParameter(\n                                                    \"plural\"\n                                                );\n                                        return \"dative\" === e\n                                            ? {\n                                                  der: \"dem\",\n                                                  die: r ? \"den\" : \"der\",\n                                                  das: \"dem\",\n                                              }[t]\n                                            : t;\n                                    }),\n                                    (t.CORRECTIONS.masculine = (t) =>\n                                        \"dative\" ===\n                                        n.Grammar.getInstance().getParameter(\n                                            \"case\"\n                                        )\n                                            ? t + \"n\"\n                                            : t),\n                                    t\n                                );\n                            })()),\n                        c\n                    );\n                };\n            },\n            9393: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.en = void 0);\n                const n = r(2105),\n                    o = r(4356),\n                    i = r(2536),\n                    s = r(310),\n                    a = r(4977);\n                let l = null;\n                e.en = function () {\n                    return (\n                        l ||\n                            (l = (function () {\n                                const t = (0, o.createLocale)();\n                                return (\n                                    (t.NUMBERS = s.default),\n                                    (t.FUNCTIONS.radicalNestDepth =\n                                        i.nestingToString),\n                                    (t.FUNCTIONS.plural = (t) =>\n                                        /.*s$/.test(t) ? t : t + \"s\"),\n                                    (t.ALPHABETS.combiner =\n                                        a.Combiners.prefixCombiner),\n                                    (t.ALPHABETS.digitTrans.default =\n                                        s.default.numberToWords),\n                                    (t.CORRECTIONS.article = (t) =>\n                                        n.Grammar.getInstance().getParameter(\n                                            \"noArticle\"\n                                        )\n                                            ? \"\"\n                                            : t),\n                                    t\n                                );\n                            })()),\n                        l\n                    );\n                };\n            },\n            7978: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.es = void 0);\n                const n = r(4356),\n                    o = r(2536),\n                    i = r(4634),\n                    s = r(4977),\n                    a = function (t, e, r) {\n                        return (\n                            (t = \"sans serif \" + (r ? r + \" \" + t : t)),\n                            e ? t + \" \" + e : t\n                        );\n                    };\n                let l = null;\n                e.es = function () {\n                    return (\n                        l ||\n                            (l = (function () {\n                                const t = (0, n.createLocale)();\n                                return (\n                                    (t.NUMBERS = i.default),\n                                    (t.COMBINERS.sansserif = a),\n                                    (t.FUNCTIONS.fracNestDepth = (t) => !1),\n                                    (t.FUNCTIONS.combineRootIndex =\n                                        o.combinePostfixIndex),\n                                    (t.FUNCTIONS.combineNestedRadical = (\n                                        t,\n                                        e,\n                                        r\n                                    ) => t + r),\n                                    (t.FUNCTIONS.fontRegexp = (t) =>\n                                        RegExp(\"^\" + t + \" \")),\n                                    (t.FUNCTIONS.plural = (t) =>\n                                        /.*(a|e|i|o|u)$/.test(t)\n                                            ? t + \"s\"\n                                            : /.*z$/.test(t)\n                                              ? t.slice(0, -1) + \"ces\"\n                                              : /.*c$/.test(t)\n                                                ? t.slice(0, -1) + \"ques\"\n                                                : /.*g$/.test(t)\n                                                  ? t + \"ues\"\n                                                  : /.*\\u00f3n$/.test(t)\n                                                    ? t.slice(0, -2) + \"ones\"\n                                                    : t + \"es\"),\n                                    (t.FUNCTIONS.si = (t, e) => (\n                                        e.match(/^metro/) &&\n                                            (t = t\n                                                .replace(/a$/, \"\\xe1\")\n                                                .replace(/o$/, \"\\xf3\")\n                                                .replace(/i$/, \"\\xed\")),\n                                        t + e\n                                    )),\n                                    (t.ALPHABETS.combiner =\n                                        s.Combiners.prefixCombiner),\n                                    t\n                                );\n                            })()),\n                        l\n                    );\n                };\n            },\n            5540: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.fr = void 0);\n                const n = r(2105),\n                    o = r(4356),\n                    i = r(2536),\n                    s = r(2350),\n                    a = r(4977);\n                let l = null;\n                e.fr = function () {\n                    return (\n                        l ||\n                            (l = (function () {\n                                const t = (0, o.createLocale)();\n                                return (\n                                    (t.NUMBERS = s.default),\n                                    (t.FUNCTIONS.radicalNestDepth =\n                                        i.nestingToString),\n                                    (t.FUNCTIONS.combineRootIndex =\n                                        i.combinePostfixIndex),\n                                    (t.FUNCTIONS.combineNestedFraction = (\n                                        t,\n                                        e,\n                                        r\n                                    ) => r.replace(/ $/g, \"\") + e + t),\n                                    (t.FUNCTIONS.combineNestedRadical = (\n                                        t,\n                                        e,\n                                        r\n                                    ) => r + \" \" + t),\n                                    (t.FUNCTIONS.fontRegexp = (t) =>\n                                        RegExp(\" (en |)\" + t + \"$\")),\n                                    (t.FUNCTIONS.plural = (t) =>\n                                        /.*s$/.test(t) ? t : t + \"s\"),\n                                    (t.CORRECTIONS.article = (t) =>\n                                        n.Grammar.getInstance().getParameter(\n                                            \"noArticle\"\n                                        )\n                                            ? \"\"\n                                            : t),\n                                    (t.ALPHABETS.combiner =\n                                        a.Combiners.romanceCombiner),\n                                    (t.SUBISO = {\n                                        default: \"fr\",\n                                        current: \"fr\",\n                                        all: [\"fr\", \"be\", \"ch\"],\n                                    }),\n                                    t\n                                );\n                            })()),\n                        l\n                    );\n                };\n            },\n            5218: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.hi = void 0);\n                const n = r(4356),\n                    o = r(4438),\n                    i = r(4977),\n                    s = r(2536);\n                let a = null;\n                e.hi = function () {\n                    return (\n                        a ||\n                            (a = (function () {\n                                const t = (0, n.createLocale)();\n                                return (\n                                    (t.NUMBERS = o.default),\n                                    (t.ALPHABETS.combiner =\n                                        i.Combiners.prefixCombiner),\n                                    (t.FUNCTIONS.radicalNestDepth =\n                                        s.nestingToString),\n                                    t\n                                );\n                            })()),\n                        a\n                    );\n                };\n            },\n            3887: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.it = void 0);\n                const n = r(2536),\n                    o = r(4356),\n                    i = r(8825),\n                    s = r(4977),\n                    a = function (t, e, r) {\n                        return (\n                            t.match(/^[a-zA-Z]$/) &&\n                                (e = e.replace(\"cerchiato\", \"cerchiata\")),\n                            (t = r ? t + \" \" + r : t),\n                            e ? t + \" \" + e : t\n                        );\n                    };\n                let l = null;\n                e.it = function () {\n                    return (\n                        l ||\n                            (l = (function () {\n                                const t = (0, o.createLocale)();\n                                return (\n                                    (t.NUMBERS = i.default),\n                                    (t.COMBINERS.italianPostfix = a),\n                                    (t.FUNCTIONS.radicalNestDepth =\n                                        n.nestingToString),\n                                    (t.FUNCTIONS.combineRootIndex =\n                                        n.combinePostfixIndex),\n                                    (t.FUNCTIONS.combineNestedFraction = (\n                                        t,\n                                        e,\n                                        r\n                                    ) => r.replace(/ $/g, \"\") + e + t),\n                                    (t.FUNCTIONS.combineNestedRadical = (\n                                        t,\n                                        e,\n                                        r\n                                    ) => r + \" \" + t),\n                                    (t.FUNCTIONS.fontRegexp = (t) =>\n                                        RegExp(\" (en |)\" + t + \"$\")),\n                                    (t.ALPHABETS.combiner =\n                                        s.Combiners.romanceCombiner),\n                                    t\n                                );\n                            })()),\n                        l\n                    );\n                };\n            },\n            8384: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.nb = void 0);\n                const n = r(4356),\n                    o = r(2536),\n                    i = r(8274),\n                    s = r(4977);\n                let a = null;\n                e.nb = function () {\n                    return (\n                        a ||\n                            (a = (function () {\n                                const t = (0, n.createLocale)();\n                                return (\n                                    (t.NUMBERS = i.default),\n                                    (t.ALPHABETS.combiner =\n                                        s.Combiners.prefixCombiner),\n                                    (t.ALPHABETS.digitTrans.default =\n                                        i.default.numberToWords),\n                                    (t.FUNCTIONS.radicalNestDepth =\n                                        o.nestingToString),\n                                    t\n                                );\n                            })()),\n                        a\n                    );\n                };\n            },\n            7206: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.nemeth = void 0);\n                const n = r(4356),\n                    o = r(3720),\n                    i = r(4977),\n                    s = function (t) {\n                        return t.match(\n                            RegExp(\"^\" + h.ALPHABETS.languagePrefix.english)\n                        )\n                            ? t.slice(1)\n                            : t;\n                    },\n                    a = function (t, e, r) {\n                        return (t = s(t)), e ? t + e : t;\n                    },\n                    l = function (t, e, r) {\n                        return e + s(t);\n                    },\n                    c = function (t, e, r) {\n                        return e + (r || \"\") + (t = s(t)) + \"\\u283b\";\n                    },\n                    u = function (t, e, r) {\n                        return e + (r || \"\") + (t = s(t)) + \"\\u283b\\u283b\";\n                    },\n                    p = function (t, e, r) {\n                        return e + (t = s(t)) + \"\\u283e\";\n                    };\n                let h = null;\n                e.nemeth = function () {\n                    return (\n                        h ||\n                            (h = (function () {\n                                const t = (0, n.createLocale)();\n                                return (\n                                    (t.NUMBERS = o.default),\n                                    (t.COMBINERS = {\n                                        postfixCombiner: a,\n                                        germanCombiner: l,\n                                        embellishCombiner: c,\n                                        doubleEmbellishCombiner: u,\n                                        parensCombiner: p,\n                                    }),\n                                    (t.FUNCTIONS.fracNestDepth = (t) => !1),\n                                    (t.FUNCTIONS.fontRegexp = (t) =>\n                                        RegExp(\"^\" + t)),\n                                    (t.FUNCTIONS.si = i.identityTransformer),\n                                    (t.ALPHABETS.combiner = (t, e, r) =>\n                                        e ? e + r + t : s(t)),\n                                    (t.ALPHABETS.digitTrans = {\n                                        default: o.default.numberToWords,\n                                    }),\n                                    t\n                                );\n                            })()),\n                        h\n                    );\n                };\n            },\n            7734: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.nn = void 0);\n                const n = r(4356),\n                    o = r(2536),\n                    i = r(8274),\n                    s = r(4977);\n                let a = null;\n                e.nn = function () {\n                    return (\n                        a ||\n                            (a = (function () {\n                                const t = (0, n.createLocale)();\n                                return (\n                                    (t.NUMBERS = i.default),\n                                    (t.ALPHABETS.combiner =\n                                        s.Combiners.prefixCombiner),\n                                    (t.ALPHABETS.digitTrans.default =\n                                        i.default.numberToWords),\n                                    (t.FUNCTIONS.radicalNestDepth =\n                                        o.nestingToString),\n                                    (t.SUBISO = {\n                                        default: \"\",\n                                        current: \"\",\n                                        all: [\"\", \"alt\"],\n                                    }),\n                                    t\n                                );\n                            })()),\n                        a\n                    );\n                };\n            },\n            7264: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.sv = void 0);\n                const n = r(4356),\n                    o = r(2536),\n                    i = r(3898),\n                    s = r(4977);\n                let a = null;\n                e.sv = function () {\n                    return (\n                        a ||\n                            (a = (function () {\n                                const t = (0, n.createLocale)();\n                                return (\n                                    (t.NUMBERS = i.default),\n                                    (t.FUNCTIONS.radicalNestDepth =\n                                        o.nestingToString),\n                                    (t.FUNCTIONS.fontRegexp = function (t) {\n                                        return new RegExp(\n                                            \"((^\" + t + \" )|( \" + t + \"$))\"\n                                        );\n                                    }),\n                                    (t.ALPHABETS.combiner =\n                                        s.Combiners.prefixCombiner),\n                                    (t.ALPHABETS.digitTrans.default =\n                                        i.default.numberToWords),\n                                    (t.CORRECTIONS.correctOne = (t) =>\n                                        t.replace(/^ett$/, \"en\")),\n                                    t\n                                );\n                            })()),\n                        a\n                    );\n                };\n            },\n            7549: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SUBISO =\n                        e.FUNCTIONS =\n                        e.ALPHABETS =\n                        e.NUMBERS =\n                        e.MESSAGES =\n                            void 0);\n                const n = r(4977);\n                (e.MESSAGES = function () {\n                    return {\n                        MS: {},\n                        MSroots: {},\n                        font: {},\n                        embellish: {},\n                        role: {},\n                        enclose: {},\n                        navigate: {},\n                        regexp: {},\n                        unitTimes: \"\",\n                    };\n                }),\n                    (e.NUMBERS = function () {\n                        return {\n                            zero: \"zero\",\n                            ones: [],\n                            tens: [],\n                            large: [],\n                            special: {},\n                            wordOrdinal: n.identityTransformer,\n                            numericOrdinal: n.identityTransformer,\n                            numberToWords: n.identityTransformer,\n                            numberToOrdinal: n.pluralCase,\n                            vulgarSep: \" \",\n                            numSep: \" \",\n                        };\n                    }),\n                    (e.ALPHABETS = function () {\n                        return {\n                            latinSmall: [],\n                            latinCap: [],\n                            greekSmall: [],\n                            greekCap: [],\n                            capPrefix: { default: \"\" },\n                            smallPrefix: { default: \"\" },\n                            digitPrefix: { default: \"\" },\n                            languagePrefix: {},\n                            digitTrans: {\n                                default: n.identityTransformer,\n                                mathspeak: n.identityTransformer,\n                                clearspeak: n.identityTransformer,\n                            },\n                            letterTrans: { default: n.identityTransformer },\n                            combiner: (t, e, r) => t,\n                        };\n                    }),\n                    (e.FUNCTIONS = function () {\n                        return {\n                            fracNestDepth: (t) =>\n                                n.vulgarFractionSmall(t, 10, 100),\n                            radicalNestDepth: (t) => \"\",\n                            combineRootIndex: function (t, e) {\n                                return t;\n                            },\n                            combineNestedFraction: n.Combiners.identityCombiner,\n                            combineNestedRadical: n.Combiners.identityCombiner,\n                            fontRegexp: function (t) {\n                                return new RegExp(\n                                    \"^\" + t.split(/ |-/).join(\"( |-)\") + \"( |-)\"\n                                );\n                            },\n                            si: n.siCombiner,\n                            plural: n.identityTransformer,\n                        };\n                    }),\n                    (e.SUBISO = function () {\n                        return { default: \"\", current: \"\", all: [] };\n                    });\n            },\n            614: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                const n = r(2105);\n                function o(t) {\n                    const e = t % 1e3,\n                        r = Math.floor(e / 100),\n                        n = r ? (1 === r ? \"cent\" : a.ones[r] + \"-cents\") : \"\",\n                        o = (function (t) {\n                            const e = t % 100;\n                            if (e < 20) return a.ones[e];\n                            const r = Math.floor(e / 10),\n                                n = a.tens[r],\n                                o = a.ones[e % 10];\n                            return n && o\n                                ? n + (2 === r ? \"-i-\" : \"-\") + o\n                                : n || o;\n                        })(e % 100);\n                    return n && o ? n + a.numSep + o : n || o;\n                }\n                function i(t) {\n                    if (0 === t) return a.zero;\n                    if (t >= Math.pow(10, 36)) return t.toString();\n                    let e = 0,\n                        r = \"\";\n                    for (; t > 0; ) {\n                        const n = t % (e > 1 ? 1e6 : 1e3);\n                        if (n) {\n                            let t = a.large[e];\n                            if (e)\n                                if (1 === e)\n                                    r =\n                                        (1 === n ? \"\" : o(n) + a.numSep) +\n                                        t +\n                                        (r ? a.numSep + r : \"\");\n                                else {\n                                    const e = i(n);\n                                    (t =\n                                        1 === n\n                                            ? t\n                                            : t.replace(/\\u00f3$/, \"ons\")),\n                                        (r =\n                                            e +\n                                            a.numSep +\n                                            t +\n                                            (r ? a.numSep + r : \"\"));\n                                }\n                            else r = o(n);\n                        }\n                        (t = Math.floor(t / (e > 1 ? 1e6 : 1e3))), e++;\n                    }\n                    return r;\n                }\n                function s(t) {\n                    const e = n.Grammar.getInstance().getParameter(\"gender\");\n                    return t.toString() + (\"f\" === e ? \"a\" : \"n\");\n                }\n                const a = (0, r(7549).NUMBERS)();\n                (a.numericOrdinal = s),\n                    (a.numberToWords = i),\n                    (a.numberToOrdinal = function (t, e) {\n                        if (t > 1999) return s(t);\n                        if (t <= 10) return a.special.onesOrdinals[t - 1];\n                        const r = i(t);\n                        return r.match(/mil$/)\n                            ? r.replace(/mil$/, \"mil\\xb7l\\xe8sima\")\n                            : r.match(/u$/)\n                              ? r.replace(/u$/, \"vena\")\n                              : r.match(/a$/)\n                                ? r.replace(/a$/, \"ena\")\n                                : r + (r.match(/e$/) ? \"na\" : \"ena\");\n                    }),\n                    (e.default = a);\n            },\n            3866: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                function n(t, e = !1) {\n                    return t === a.ones[1] ? (e ? \"et\" : \"en\") : t;\n                }\n                function o(t, e = !1) {\n                    let r = t % 1e3,\n                        o = \"\",\n                        i = a.ones[Math.floor(r / 100)];\n                    if (((o += i ? n(i, !0) + \" hundrede\" : \"\"), (r %= 100), r))\n                        if (\n                            ((o += o ? \" og \" : \"\"),\n                            (i = e ? a.special.smallOrdinals[r] : a.ones[r]),\n                            i)\n                        )\n                            o += i;\n                        else {\n                            const t = e\n                                ? a.special.tensOrdinals[Math.floor(r / 10)]\n                                : a.tens[Math.floor(r / 10)];\n                            (i = a.ones[r % 10]),\n                                (o += i ? n(i) + \"og\" + t : t);\n                        }\n                    return o;\n                }\n                function i(t, e = !1) {\n                    if (0 === t) return a.zero;\n                    if (t >= Math.pow(10, 36)) return t.toString();\n                    let r = 0,\n                        i = \"\";\n                    for (; t > 0; ) {\n                        const s = t % 1e3;\n                        if (s) {\n                            const t = o(s, e && !r);\n                            if (r) {\n                                const e = a.large[r],\n                                    o = s > 1 ? \"er\" : \"\";\n                                i =\n                                    n(t, r <= 1) +\n                                    \" \" +\n                                    e +\n                                    o +\n                                    (i ? \" og \" : \"\") +\n                                    i;\n                            } else i = n(t) + i;\n                        }\n                        (t = Math.floor(t / 1e3)), r++;\n                    }\n                    return i;\n                }\n                function s(t) {\n                    if (t % 100) return i(t, !0);\n                    const e = i(t);\n                    return e.match(/e$/) ? e : e + \"e\";\n                }\n                const a = (0, r(7549).NUMBERS)();\n                (a.wordOrdinal = s),\n                    (a.numericOrdinal = function (t) {\n                        return t.toString() + \".\";\n                    }),\n                    (a.numberToWords = i),\n                    (a.numberToOrdinal = function (t, e) {\n                        return 1 === t\n                            ? e\n                                ? \"hel\"\n                                : \"hele\"\n                            : 2 === t\n                              ? e\n                                  ? \"halv\"\n                                  : \"halve\"\n                              : s(t) + (e ? \"dele\" : \"del\");\n                    }),\n                    (e.default = a);\n            },\n            1435: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                function n(t, e = !1) {\n                    return t === a.ones[1] ? (e ? \"eine\" : \"ein\") : t;\n                }\n                function o(t) {\n                    let e = t % 1e3,\n                        r = \"\",\n                        o = a.ones[Math.floor(e / 100)];\n                    if (((r += o ? n(o) + \"hundert\" : \"\"), (e %= 100), e))\n                        if (((r += r ? a.numSep : \"\"), (o = a.ones[e]), o))\n                            r += o;\n                        else {\n                            const t = a.tens[Math.floor(e / 10)];\n                            (o = a.ones[e % 10]),\n                                (r += o ? n(o) + \"und\" + t : t);\n                        }\n                    return r;\n                }\n                function i(t) {\n                    if (0 === t) return a.zero;\n                    if (t >= Math.pow(10, 36)) return t.toString();\n                    let e = 0,\n                        r = \"\";\n                    for (; t > 0; ) {\n                        const i = t % 1e3;\n                        if (i) {\n                            const s = o(t % 1e3);\n                            if (e) {\n                                const t = a.large[e],\n                                    o =\n                                        e > 1 && i > 1\n                                            ? t.match(/e$/)\n                                                ? \"n\"\n                                                : \"en\"\n                                            : \"\";\n                                r = n(s, e > 1) + t + o + r;\n                            } else r = n(s, e > 1) + r;\n                        }\n                        (t = Math.floor(t / 1e3)), e++;\n                    }\n                    return r.replace(/ein$/, \"eins\");\n                }\n                function s(t) {\n                    if (1 === t) return \"erste\";\n                    if (3 === t) return \"dritte\";\n                    if (7 === t) return \"siebte\";\n                    if (8 === t) return \"achte\";\n                    return i(t) + (t < 19 ? \"te\" : \"ste\");\n                }\n                const a = (0, r(7549).NUMBERS)();\n                (a.wordOrdinal = s),\n                    (a.numericOrdinal = function (t) {\n                        return t.toString() + \".\";\n                    }),\n                    (a.numberToWords = i),\n                    (a.numberToOrdinal = function (t, e) {\n                        return 1 === t\n                            ? \"eintel\"\n                            : 2 === t\n                              ? e\n                                  ? \"halbe\"\n                                  : \"halb\"\n                              : s(t) + \"l\";\n                    }),\n                    (e.default = a);\n            },\n            310: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                function n(t) {\n                    let e = t % 1e3,\n                        r = \"\";\n                    return (\n                        (r += s.ones[Math.floor(e / 100)]\n                            ? s.ones[Math.floor(e / 100)] + s.numSep + \"hundred\"\n                            : \"\"),\n                        (e %= 100),\n                        e &&\n                            ((r += r ? s.numSep : \"\"),\n                            (r +=\n                                s.ones[e] ||\n                                s.tens[Math.floor(e / 10)] +\n                                    (e % 10 ? s.numSep + s.ones[e % 10] : \"\"))),\n                        r\n                    );\n                }\n                function o(t) {\n                    if (0 === t) return s.zero;\n                    if (t >= Math.pow(10, 36)) return t.toString();\n                    let e = 0,\n                        r = \"\";\n                    for (; t > 0; ) {\n                        t % 1e3 &&\n                            (r =\n                                n(t % 1e3) +\n                                (e ? \"-\" + s.large[e] + \"-\" : \"\") +\n                                r),\n                            (t = Math.floor(t / 1e3)),\n                            e++;\n                    }\n                    return r.replace(/-$/, \"\");\n                }\n                function i(t) {\n                    let e = o(t);\n                    return (\n                        e.match(/one$/)\n                            ? (e = e.slice(0, -3) + \"first\")\n                            : e.match(/two$/)\n                              ? (e = e.slice(0, -3) + \"second\")\n                              : e.match(/three$/)\n                                ? (e = e.slice(0, -5) + \"third\")\n                                : e.match(/five$/)\n                                  ? (e = e.slice(0, -4) + \"fifth\")\n                                  : e.match(/eight$/)\n                                    ? (e = e.slice(0, -5) + \"eighth\")\n                                    : e.match(/nine$/)\n                                      ? (e = e.slice(0, -4) + \"ninth\")\n                                      : e.match(/twelve$/)\n                                        ? (e = e.slice(0, -6) + \"twelfth\")\n                                        : e.match(/ty$/)\n                                          ? (e = e.slice(0, -2) + \"tieth\")\n                                          : (e += \"th\"),\n                        e\n                    );\n                }\n                const s = (0, r(7549).NUMBERS)();\n                (s.wordOrdinal = i),\n                    (s.numericOrdinal = function (t) {\n                        const e = t % 100,\n                            r = t.toString();\n                        if (e > 10 && e < 20) return r + \"th\";\n                        switch (t % 10) {\n                            case 1:\n                                return r + \"st\";\n                            case 2:\n                                return r + \"nd\";\n                            case 3:\n                                return r + \"rd\";\n                            default:\n                                return r + \"th\";\n                        }\n                    }),\n                    (s.numberToWords = o),\n                    (s.numberToOrdinal = function (t, e) {\n                        if (1 === t) return e ? \"oneths\" : \"oneth\";\n                        if (2 === t) return e ? \"halves\" : \"half\";\n                        const r = i(t);\n                        return e ? r + \"s\" : r;\n                    }),\n                    (e.default = s);\n            },\n            4634: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                const n = r(2105);\n                function o(t) {\n                    const e = t % 1e3,\n                        r = Math.floor(e / 100),\n                        n = i.special.hundreds[r],\n                        o = (function (t) {\n                            const e = t % 100;\n                            if (e < 30) return i.ones[e];\n                            const r = i.tens[Math.floor(e / 10)],\n                                n = i.ones[e % 10];\n                            return r && n ? r + \" y \" + n : r || n;\n                        })(e % 100);\n                    return 1 === r\n                        ? o\n                            ? n + \"to \" + o\n                            : n\n                        : n && o\n                          ? n + \" \" + o\n                          : n || o;\n                }\n                const i = (0, r(7549).NUMBERS)();\n                (i.numericOrdinal = function (t) {\n                    const e = n.Grammar.getInstance().getParameter(\"gender\");\n                    return t.toString() + (\"f\" === e ? \"a\" : \"o\");\n                }),\n                    (i.numberToWords = function (t) {\n                        if (0 === t) return i.zero;\n                        if (t >= Math.pow(10, 36)) return t.toString();\n                        let e = 0,\n                            r = \"\";\n                        for (; t > 0; ) {\n                            const n = t % 1e3;\n                            if (n) {\n                                let t = i.large[e];\n                                const s = o(n);\n                                e\n                                    ? 1 === n\n                                        ? ((t = t.match(\"/^mil( |$)/\")\n                                              ? t\n                                              : \"un \" + t),\n                                          (r = t + (r ? \" \" + r : \"\")))\n                                        : ((t = t.replace(/\\u00f3n$/, \"ones\")),\n                                          (r =\n                                              o(n) +\n                                              \" \" +\n                                              t +\n                                              (r ? \" \" + r : \"\")))\n                                    : (r = s);\n                            }\n                            (t = Math.floor(t / 1e3)), e++;\n                        }\n                        return r;\n                    }),\n                    (i.numberToOrdinal = function (t, e) {\n                        if (t > 1999) return t.toString() + \"a\";\n                        if (t <= 12) return i.special.onesOrdinals[t - 1];\n                        const r = [];\n                        if (\n                            (t >= 1e3 && ((t -= 1e3), r.push(\"mil\\xe9sima\")),\n                            !t)\n                        )\n                            return r.join(\" \");\n                        let n = 0;\n                        return (\n                            (n = Math.floor(t / 100)),\n                            n > 0 &&\n                                (r.push(i.special.hundredsOrdinals[n - 1]),\n                                (t %= 100)),\n                            t <= 12\n                                ? r.push(i.special.onesOrdinals[t - 1])\n                                : ((n = Math.floor(t / 10)),\n                                  n > 0 &&\n                                      (r.push(i.special.tensOrdinals[n - 1]),\n                                      (t %= 10)),\n                                  t > 0 &&\n                                      r.push(i.special.onesOrdinals[t - 1])),\n                            r.join(\" \")\n                        );\n                    }),\n                    (e.default = i);\n            },\n            2350: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                const n = r(5897),\n                    o = r(2105),\n                    i = r(7549);\n                function s(t) {\n                    let e = t % 1e3,\n                        r = \"\";\n                    if (\n                        ((r += u.ones[Math.floor(e / 100)]\n                            ? u.ones[Math.floor(e / 100)] + \"-cent\"\n                            : \"\"),\n                        (e %= 100),\n                        e)\n                    ) {\n                        r += r ? \"-\" : \"\";\n                        let t = u.ones[e];\n                        if (t) r += t;\n                        else {\n                            const n = u.tens[Math.floor(e / 10)];\n                            n.match(/-dix$/)\n                                ? ((t = u.ones[(e % 10) + 10]),\n                                  (r += n.replace(/-dix$/, \"\") + \"-\" + t))\n                                : (r +=\n                                      n + (e % 10 ? \"-\" + u.ones[e % 10] : \"\"));\n                        }\n                    }\n                    const n = r.match(/s-\\w+$/);\n                    return n\n                        ? r.replace(/s-\\w+$/, n[0].slice(1))\n                        : r.replace(/-un$/, \"-et-un\");\n                }\n                function a(t) {\n                    if (0 === t) return u.zero;\n                    if (t >= Math.pow(10, 36)) return t.toString();\n                    u.special[\"tens-\" + n.default.getInstance().subiso] &&\n                        (u.tens =\n                            u.special[\n                                \"tens-\" + n.default.getInstance().subiso\n                            ]);\n                    let e = 0,\n                        r = \"\";\n                    for (; t > 0; ) {\n                        const n = t % 1e3;\n                        if (n) {\n                            let t = u.large[e];\n                            const o = s(n);\n                            if (t && t.match(/^mille /)) {\n                                const n = t.replace(/^mille /, \"\");\n                                r = r.match(RegExp(n))\n                                    ? o + (e ? \"-mille-\" : \"\") + r\n                                    : r.match(RegExp(n.replace(/s$/, \"\")))\n                                      ? o +\n                                        (e ? \"-mille-\" : \"\") +\n                                        r.replace(n.replace(/s$/, \"\"), n)\n                                      : o + (e ? \"-\" + t + \"-\" : \"\") + r;\n                            } else\n                                (t = 1 === n && t ? t.replace(/s$/, \"\") : t),\n                                    (r = o + (e ? \"-\" + t + \"-\" : \"\") + r);\n                        }\n                        (t = Math.floor(t / 1e3)), e++;\n                    }\n                    return r.replace(/-$/, \"\");\n                }\n                const l = { 1: \"uni\\xe8me\", 2: \"demi\", 3: \"tiers\", 4: \"quart\" };\n                function c(t) {\n                    if (1 === t) return \"premi\\xe8re\";\n                    let e = a(t);\n                    return (\n                        e.match(/^neuf$/)\n                            ? (e = e.slice(0, -1) + \"v\")\n                            : e.match(/cinq$/)\n                              ? (e += \"u\")\n                              : e.match(/trois$/)\n                                ? (e += \"\")\n                                : (e.match(/e$/) || e.match(/s$/)) &&\n                                  (e = e.slice(0, -1)),\n                        (e += \"i\\xe8me\"),\n                        e\n                    );\n                }\n                const u = (0, i.NUMBERS)();\n                (u.wordOrdinal = c),\n                    (u.numericOrdinal = function (t) {\n                        const e =\n                            o.Grammar.getInstance().getParameter(\"gender\");\n                        return 1 === t\n                            ? t.toString() + (\"m\" === e ? \"er\" : \"re\")\n                            : t.toString() + \"e\";\n                    }),\n                    (u.numberToWords = a),\n                    (u.numberToOrdinal = function (t, e) {\n                        const r = l[t] || c(t);\n                        return 3 === t ? r : e ? r + \"s\" : r;\n                    }),\n                    (e.default = u);\n            },\n            4438: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                const n = r(2105);\n                function o(t) {\n                    if (0 === t) return s.zero;\n                    if (t >= Math.pow(10, 32)) return t.toString();\n                    let e = 0,\n                        r = \"\";\n                    const n = (function (t) {\n                        let e = t % 1e3,\n                            r = \"\";\n                        return (\n                            (r += s.ones[Math.floor(e / 100)]\n                                ? s.ones[Math.floor(e / 100)] +\n                                  s.numSep +\n                                  s.special.hundred\n                                : \"\"),\n                            (e %= 100),\n                            e && ((r += r ? s.numSep : \"\"), (r += s.ones[e])),\n                            r\n                        );\n                    })(t % 1e3);\n                    if (!(t = Math.floor(t / 1e3))) return n;\n                    for (; t > 0; ) {\n                        const n = t % 100;\n                        n &&\n                            (r =\n                                s.ones[n] +\n                                s.numSep +\n                                s.large[e] +\n                                (r ? s.numSep + r : \"\")),\n                            (t = Math.floor(t / 100)),\n                            e++;\n                    }\n                    return n ? r + s.numSep + n : r;\n                }\n                function i(t) {\n                    const e = n.Grammar.getInstance().getParameter(\"gender\");\n                    if (t <= 0) return t.toString();\n                    if (t < 10)\n                        return \"f\" === e\n                            ? s.special.ordinalsFeminine[t]\n                            : s.special.ordinalsMasculine[t];\n                    return (\n                        o(t) +\n                        (\"f\" === e\n                            ? \"\\u0935\\u0940\\u0902\"\n                            : \"\\u0935\\u093e\\u0901\")\n                    );\n                }\n                const s = (0, r(7549).NUMBERS)();\n                (s.wordOrdinal = i),\n                    (s.numericOrdinal = function (t) {\n                        const e =\n                            n.Grammar.getInstance().getParameter(\"gender\");\n                        return t > 0 && t < 10\n                            ? \"f\" === e\n                                ? s.special.simpleSmallOrdinalsFeminine[t]\n                                : s.special.simpleSmallOrdinalsMasculine[t]\n                            : t\n                                  .toString()\n                                  .split(\"\")\n                                  .map(function (t) {\n                                      const e = parseInt(t, 10);\n                                      return isNaN(e)\n                                          ? \"\"\n                                          : s.special.simpleNumbers[e];\n                                  })\n                                  .join(\"\") +\n                                  (\"f\" === e\n                                      ? \"\\u0935\\u0940\\u0902\"\n                                      : \"\\u0935\\u093e\\u0901\");\n                    }),\n                    (s.numberToWords = o),\n                    (s.numberToOrdinal = function (t, e) {\n                        return t <= 10\n                            ? s.special.smallDenominators[t]\n                            : i(t) + \" \\u0905\\u0902\\u0936\";\n                    }),\n                    (e.default = s);\n            },\n            8825: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                const n = r(2105);\n                function o(t) {\n                    let e = t % 1e3,\n                        r = \"\";\n                    if (\n                        ((r += a.ones[Math.floor(e / 100)]\n                            ? a.ones[Math.floor(e / 100)] + a.numSep + \"cento\"\n                            : \"\"),\n                        (e %= 100),\n                        e)\n                    ) {\n                        r += r ? a.numSep : \"\";\n                        const t = a.ones[e];\n                        if (t) r += t;\n                        else {\n                            let t = a.tens[Math.floor(e / 10)];\n                            const n = e % 10;\n                            (1 !== n && 8 !== n) || (t = t.slice(0, -1)),\n                                (r += t),\n                                (r += n ? a.numSep + a.ones[e % 10] : \"\");\n                        }\n                    }\n                    return r;\n                }\n                function i(t) {\n                    if (0 === t) return a.zero;\n                    if (t >= Math.pow(10, 36)) return t.toString();\n                    if (\n                        1 === t &&\n                        n.Grammar.getInstance().getParameter(\"fraction\")\n                    )\n                        return \"un\";\n                    let e = 0,\n                        r = \"\";\n                    for (; t > 0; ) {\n                        t % 1e3 &&\n                            (r =\n                                o(t % 1e3) +\n                                (e ? \"-\" + a.large[e] + \"-\" : \"\") +\n                                r),\n                            (t = Math.floor(t / 1e3)),\n                            e++;\n                    }\n                    return r.replace(/-$/, \"\");\n                }\n                function s(t) {\n                    const e =\n                        \"m\" === n.Grammar.getInstance().getParameter(\"gender\")\n                            ? \"o\"\n                            : \"a\";\n                    let r = a.special.onesOrdinals[t];\n                    return r\n                        ? r.slice(0, -1) + e\n                        : ((r = i(t)), r.slice(0, -1) + \"esim\" + e);\n                }\n                const a = (0, r(7549).NUMBERS)();\n                (a.wordOrdinal = s),\n                    (a.numericOrdinal = function (t) {\n                        const e =\n                            n.Grammar.getInstance().getParameter(\"gender\");\n                        return t.toString() + (\"m\" === e ? \"o\" : \"a\");\n                    }),\n                    (a.numberToWords = i),\n                    (a.numberToOrdinal = function (t, e) {\n                        if (2 === t) return e ? \"mezzi\" : \"mezzo\";\n                        const r = s(t);\n                        if (!e) return r;\n                        const n = r.match(/o$/) ? \"i\" : \"e\";\n                        return r.slice(0, -1) + n;\n                    }),\n                    (e.default = a);\n            },\n            3720: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                function n(t) {\n                    return t\n                        .toString()\n                        .split(\"\")\n                        .map(function (t) {\n                            return o.ones[parseInt(t, 10)];\n                        })\n                        .join(\"\");\n                }\n                const o = (0, r(7549).NUMBERS)();\n                (o.numberToWords = n), (o.numberToOrdinal = n), (e.default = o);\n            },\n            8274: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                const n = r(5897);\n                function o(t, e = !1) {\n                    let r = t % 1e3,\n                        n = \"\";\n                    const o = Math.floor(r / 100),\n                        s = a.ones[o];\n                    if (\n                        ((n += s ? (1 === o ? \"\" : s) + \"hundre\" : \"\"),\n                        (r %= 100),\n                        r)\n                    ) {\n                        if (((n += n ? \"og\" : \"\"), e)) {\n                            const t = a.special.smallOrdinals[r];\n                            if (t) return n + t;\n                            if (r % 10)\n                                return (\n                                    n +\n                                    a.tens[Math.floor(r / 10)] +\n                                    a.special.smallOrdinals[r % 10]\n                                );\n                        }\n                        n +=\n                            a.ones[r] ||\n                            a.tens[Math.floor(r / 10)] +\n                                (r % 10 ? a.ones[r % 10] : \"\");\n                    }\n                    return e ? i(n) : n;\n                }\n                function i(t) {\n                    const e = a.special.endOrdinal[0];\n                    return \"a\" === e && t.match(/en$/)\n                        ? t.slice(0, -2) + a.special.endOrdinal\n                        : t.match(/(d|n)$/) || t.match(/hundre$/)\n                          ? t + \"de\"\n                          : t.match(/i$/)\n                            ? t + a.special.endOrdinal\n                            : \"a\" === e && t.match(/e$/)\n                              ? t.slice(0, -1) + a.special.endOrdinal\n                              : (t.match(/e$/), t + \"nde\");\n                }\n                function s(t) {\n                    return u(t, !0);\n                }\n                const a = (0, r(7549).NUMBERS)();\n                function l(t, e = !1) {\n                    return t === a.ones[1]\n                        ? \"ein\" === t\n                            ? \"eitt \"\n                            : e\n                              ? \"et\"\n                              : \"ett\"\n                        : t;\n                }\n                function c(t, e = !1) {\n                    let r = t % 1e3,\n                        n = \"\",\n                        o = a.ones[Math.floor(r / 100)];\n                    if (((n += o ? l(o) + \"hundre\" : \"\"), (r %= 100), r)) {\n                        if (((n += n ? \"og\" : \"\"), e)) {\n                            const t = a.special.smallOrdinals[r];\n                            if (t) return n + t;\n                        }\n                        if (((o = a.ones[r]), o)) n += o;\n                        else {\n                            const t = a.tens[Math.floor(r / 10)];\n                            (o = a.ones[r % 10]), (n += o ? o + \"og\" + t : t);\n                        }\n                    }\n                    return e ? i(n) : n;\n                }\n                function u(t, e = !1) {\n                    const r =\n                        \"alt\" === n.default.getInstance().subiso\n                            ? (function (t, e = !1) {\n                                  if (0 === t)\n                                      return e\n                                          ? a.special.smallOrdinals[0]\n                                          : a.zero;\n                                  if (t >= Math.pow(10, 36))\n                                      return t.toString();\n                                  let r = 0,\n                                      n = \"\";\n                                  for (; t > 0; ) {\n                                      const o = t % 1e3;\n                                      if (o) {\n                                          const i = c(t % 1e3, !r && e);\n                                          !r && e && (e = !e),\n                                              (n =\n                                                  (1 === r ? l(i, !0) : i) +\n                                                  (r > 1 ? a.numSep : \"\") +\n                                                  (r\n                                                      ? a.large[r] +\n                                                        (r > 1 && o > 1\n                                                            ? \"er\"\n                                                            : \"\")\n                                                      : \"\") +\n                                                  (r > 1 && n ? a.numSep : \"\") +\n                                                  n);\n                                      }\n                                      (t = Math.floor(t / 1e3)), r++;\n                                  }\n                                  return e\n                                      ? n + (n.match(/tusen$/) ? \"de\" : \"te\")\n                                      : n;\n                              })(t, e)\n                            : (function (t, e = !1) {\n                                  if (0 === t)\n                                      return e\n                                          ? a.special.smallOrdinals[0]\n                                          : a.zero;\n                                  if (t >= Math.pow(10, 36))\n                                      return t.toString();\n                                  let r = 0,\n                                      n = \"\";\n                                  for (; t > 0; ) {\n                                      const i = t % 1e3;\n                                      if (i) {\n                                          const s = o(t % 1e3, !r && e);\n                                          !r && e && (e = !e),\n                                              (n =\n                                                  s +\n                                                  (r\n                                                      ? \" \" +\n                                                        a.large[r] +\n                                                        (r > 1 && i > 1\n                                                            ? \"er\"\n                                                            : \"\") +\n                                                        (n ? \" \" : \"\")\n                                                      : \"\") +\n                                                  n);\n                                      }\n                                      (t = Math.floor(t / 1e3)), r++;\n                                  }\n                                  return e\n                                      ? n + (n.match(/tusen$/) ? \"de\" : \"te\")\n                                      : n;\n                              })(t, e);\n                    return r;\n                }\n                (a.wordOrdinal = s),\n                    (a.numericOrdinal = function (t) {\n                        return t.toString() + \".\";\n                    }),\n                    (a.numberToWords = u),\n                    (a.numberToOrdinal = function (t, e) {\n                        return s(t);\n                    }),\n                    (e.default = a);\n            },\n            3898: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                function n(t) {\n                    let e = t % 1e3,\n                        r = \"\";\n                    const n = Math.floor(e / 100);\n                    return (\n                        (r += s.ones[n]\n                            ? (1 === n ? \"\" : s.ones[n] + s.numSep) + \"hundra\"\n                            : \"\"),\n                        (e %= 100),\n                        e &&\n                            ((r += r ? s.numSep : \"\"),\n                            (r +=\n                                s.ones[e] ||\n                                s.tens[Math.floor(e / 10)] +\n                                    (e % 10 ? s.numSep + s.ones[e % 10] : \"\"))),\n                        r\n                    );\n                }\n                function o(t, e = !1) {\n                    if (0 === t) return s.zero;\n                    if (t >= Math.pow(10, 36)) return t.toString();\n                    let r = 0,\n                        o = \"\";\n                    for (; t > 0; ) {\n                        const i = t % 1e3;\n                        if (i) {\n                            const a = s.large[r],\n                                l = i > 1 && r > 1 && !e ? \"er\" : \"\";\n                            o =\n                                (1 === r && 1 === i\n                                    ? \"\"\n                                    : (r > 1 && 1 === i ? \"en\" : n(t % 1e3)) +\n                                      (r > 1 ? \" \" : \"\")) +\n                                (r ? a + l + (r > 1 ? \" \" : \"\") : \"\") +\n                                o;\n                        }\n                        (t = Math.floor(t / 1e3)), r++;\n                    }\n                    return o.replace(/ $/, \"\");\n                }\n                function i(t) {\n                    let e = o(t, !0);\n                    return (\n                        e.match(/^noll$/)\n                            ? (e = \"nollte\")\n                            : e.match(/ett$/)\n                              ? (e = e.replace(/ett$/, \"f\\xf6rsta\"))\n                              : e.match(/tv\\xe5$/)\n                                ? (e = e.replace(/tv\\xe5$/, \"andra\"))\n                                : e.match(/tre$/)\n                                  ? (e = e.replace(/tre$/, \"tredje\"))\n                                  : e.match(/fyra$/)\n                                    ? (e = e.replace(/fyra$/, \"fj\\xe4rde\"))\n                                    : e.match(/fem$/)\n                                      ? (e = e.replace(/fem$/, \"femte\"))\n                                      : e.match(/sex$/)\n                                        ? (e = e.replace(/sex$/, \"sj\\xe4tte\"))\n                                        : e.match(/sju$/)\n                                          ? (e = e.replace(/sju$/, \"sjunde\"))\n                                          : e.match(/\\xe5tta$/)\n                                            ? (e = e.replace(\n                                                  /\\xe5tta$/,\n                                                  \"\\xe5ttonde\"\n                                              ))\n                                            : e.match(/nio$/)\n                                              ? (e = e.replace(\n                                                    /nio$/,\n                                                    \"nionde\"\n                                                ))\n                                              : e.match(/tio$/)\n                                                ? (e = e.replace(\n                                                      /tio$/,\n                                                      \"tionde\"\n                                                  ))\n                                                : e.match(/elva$/)\n                                                  ? (e = e.replace(\n                                                        /elva$/,\n                                                        \"elfte\"\n                                                    ))\n                                                  : e.match(/tolv$/)\n                                                    ? (e = e.replace(\n                                                          /tolv$/,\n                                                          \"tolfte\"\n                                                      ))\n                                                    : e.match(/tusen$/)\n                                                      ? (e = e.replace(\n                                                            /tusen$/,\n                                                            \"tusonde\"\n                                                        ))\n                                                      : e.match(/jard$/) ||\n                                                          e.match(/jon$/)\n                                                        ? (e += \"te\")\n                                                        : (e += \"de\"),\n                        e\n                    );\n                }\n                const s = (0, r(7549).NUMBERS)();\n                (s.wordOrdinal = i),\n                    (s.numericOrdinal = function (t) {\n                        const e = t.toString();\n                        return e.match(/11$|12$/)\n                            ? e + \":e\"\n                            : e + (e.match(/1$|2$/) ? \":a\" : \":e\");\n                    }),\n                    (s.numberToWords = o),\n                    (s.numberToOrdinal = function (t, e) {\n                        if (1 === t) return \"hel\";\n                        if (2 === t) return e ? \"halva\" : \"halv\";\n                        let r = i(t);\n                        return (\n                            (r = r.match(/de$/) ? r.replace(/de$/, \"\") : r),\n                            r + (e ? \"delar\" : \"del\")\n                        );\n                    }),\n                    (e.default = s);\n            },\n            4977: function (t, e) {\n                function r(t, e = \"\") {\n                    if (\n                        !t.childNodes ||\n                        !t.childNodes[0] ||\n                        !t.childNodes[0].childNodes ||\n                        t.childNodes[0].childNodes.length < 2 ||\n                        \"number\" !== t.childNodes[0].childNodes[0].tagName ||\n                        \"integer\" !==\n                            t.childNodes[0].childNodes[0].getAttribute(\n                                \"role\"\n                            ) ||\n                        \"number\" !== t.childNodes[0].childNodes[1].tagName ||\n                        \"integer\" !==\n                            t.childNodes[0].childNodes[1].getAttribute(\"role\")\n                    )\n                        return { convertible: !1, content: t.textContent };\n                    const r = t.childNodes[0].childNodes[1].textContent,\n                        n = t.childNodes[0].childNodes[0].textContent,\n                        o = Number(r),\n                        i = Number(n);\n                    return isNaN(o) || isNaN(i)\n                        ? { convertible: !1, content: `${n} ${e} ${r}` }\n                        : { convertible: !0, enumerator: i, denominator: o };\n                }\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.vulgarFractionSmall =\n                        e.convertVulgarFraction =\n                        e.Combiners =\n                        e.siCombiner =\n                        e.identityTransformer =\n                        e.pluralCase =\n                            void 0),\n                    (e.pluralCase = function (t, e) {\n                        return t.toString();\n                    }),\n                    (e.identityTransformer = function (t) {\n                        return t.toString();\n                    }),\n                    (e.siCombiner = function (t, e) {\n                        return t + e.toLowerCase();\n                    }),\n                    (e.Combiners = {}),\n                    (e.Combiners.identityCombiner = function (t, e, r) {\n                        return t + e + r;\n                    }),\n                    (e.Combiners.prefixCombiner = function (t, e, r) {\n                        return (t = r ? r + \" \" + t : t), e ? e + \" \" + t : t;\n                    }),\n                    (e.Combiners.postfixCombiner = function (t, e, r) {\n                        return (t = r ? r + \" \" + t : t), e ? t + \" \" + e : t;\n                    }),\n                    (e.Combiners.romanceCombiner = function (t, e, r) {\n                        return (t = r ? t + \" \" + r : t), e ? t + \" \" + e : t;\n                    }),\n                    (e.convertVulgarFraction = r),\n                    (e.vulgarFractionSmall = function (t, e, n) {\n                        const o = r(t);\n                        if (o.convertible) {\n                            const t = o.enumerator,\n                                r = o.denominator;\n                            return t > 0 && t < e && r > 0 && r < n;\n                        }\n                        return !1;\n                    });\n            },\n            4504: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Condition = e.BaseRuleStore = void 0);\n                const n = r(7052),\n                    o = r(1676),\n                    i = r(4650),\n                    s = r(4106);\n                class a {\n                    constructor() {\n                        (this.context = new s.SpeechRuleContext()),\n                            (this.parseOrder = o.DynamicCstr.DEFAULT_ORDER),\n                            (this.parser = new o.DynamicCstrParser(\n                                this.parseOrder\n                            )),\n                            (this.locale =\n                                o.DynamicCstr.DEFAULT_VALUES[o.Axis.LOCALE]),\n                            (this.modality =\n                                o.DynamicCstr.DEFAULT_VALUES[o.Axis.MODALITY]),\n                            (this.domain = \"\"),\n                            (this.initialized = !1),\n                            (this.inherits = null),\n                            (this.kind = \"standard\"),\n                            (this.customTranscriptions = {}),\n                            (this.preconditions = new Map()),\n                            (this.speechRules_ = []),\n                            (this.rank = 0),\n                            (this.parseMethods = {\n                                Rule: this.defineRule,\n                                Generator: this.generateRules,\n                                Action: this.defineAction,\n                                Precondition: this.definePrecondition,\n                                Ignore: this.ignoreRules,\n                            });\n                    }\n                    static compareStaticConstraints_(t, e) {\n                        if (t.length !== e.length) return !1;\n                        for (let r, n = 0; (r = t[n]); n++)\n                            if (-1 === e.indexOf(r)) return !1;\n                        return !0;\n                    }\n                    static comparePreconditions_(t, e) {\n                        const r = t.precondition,\n                            n = e.precondition;\n                        return (\n                            r.query === n.query &&\n                            a.compareStaticConstraints_(\n                                r.constraints,\n                                n.constraints\n                            )\n                        );\n                    }\n                    defineRule(t, e, r, n, ...o) {\n                        const s = this.parseAction(r),\n                            a = this.parsePrecondition(n, o),\n                            l = this.parseCstr(e);\n                        if (!(s && a && l))\n                            return (\n                                console.error(`Rule Error: ${n}, (${e}): ${r}`),\n                                null\n                            );\n                        const c = new i.SpeechRule(t, l, a, s);\n                        return (\n                            (c.precondition.rank = this.rank++),\n                            this.addRule(c),\n                            c\n                        );\n                    }\n                    addRule(t) {\n                        (t.context = this.context),\n                            this.speechRules_.unshift(t);\n                    }\n                    deleteRule(t) {\n                        const e = this.speechRules_.indexOf(t);\n                        -1 !== e && this.speechRules_.splice(e, 1);\n                    }\n                    findRule(t) {\n                        for (let e, r = 0; (e = this.speechRules_[r]); r++)\n                            if (t(e)) return e;\n                        return null;\n                    }\n                    findAllRules(t) {\n                        return this.speechRules_.filter(t);\n                    }\n                    evaluateDefault(t) {\n                        const e = t.textContent.slice(0);\n                        return e.match(/^\\s+$/)\n                            ? this.evaluateWhitespace(e)\n                            : this.evaluateString(e);\n                    }\n                    evaluateWhitespace(t) {\n                        return [];\n                    }\n                    evaluateCustom(t) {\n                        const e = this.customTranscriptions[t];\n                        return void 0 !== e\n                            ? n.AuditoryDescription.create(\n                                  { text: e },\n                                  { adjust: !0, translate: !1 }\n                              )\n                            : null;\n                    }\n                    evaluateCharacter(t) {\n                        return (\n                            this.evaluateCustom(t) ||\n                            n.AuditoryDescription.create(\n                                { text: t },\n                                { adjust: !0, translate: !0 }\n                            )\n                        );\n                    }\n                    removeDuplicates(t) {\n                        for (\n                            let e, r = this.speechRules_.length - 1;\n                            (e = this.speechRules_[r]);\n                            r--\n                        )\n                            e !== t &&\n                                t.dynamicCstr.equal(e.dynamicCstr) &&\n                                a.comparePreconditions_(e, t) &&\n                                this.speechRules_.splice(r, 1);\n                    }\n                    getSpeechRules() {\n                        return this.speechRules_;\n                    }\n                    setSpeechRules(t) {\n                        this.speechRules_ = t;\n                    }\n                    getPreconditions() {\n                        return this.preconditions;\n                    }\n                    parseCstr(t) {\n                        try {\n                            return this.parser.parse(\n                                this.locale +\n                                    \".\" +\n                                    this.modality +\n                                    (this.domain ? \".\" + this.domain : \"\") +\n                                    \".\" +\n                                    t\n                            );\n                        } catch (e) {\n                            if (\"RuleError\" === e.name)\n                                return (\n                                    console.error(\n                                        \"Rule Error \",\n                                        `Illegal Dynamic Constraint: ${t}.`,\n                                        e.message\n                                    ),\n                                    null\n                                );\n                            throw e;\n                        }\n                    }\n                    parsePrecondition(t, e) {\n                        try {\n                            const r = this.parsePrecondition_(t);\n                            t = r[0];\n                            let n = r.slice(1);\n                            for (const t of e)\n                                n = n.concat(this.parsePrecondition_(t));\n                            return new i.Precondition(t, ...n);\n                        } catch (r) {\n                            if (\"RuleError\" === r.name)\n                                return (\n                                    console.error(\n                                        \"Rule Error \",\n                                        `Illegal preconditions: ${t}, ${e}.`,\n                                        r.message\n                                    ),\n                                    null\n                                );\n                            throw r;\n                        }\n                    }\n                    parseAction(t) {\n                        try {\n                            return i.Action.fromString(t);\n                        } catch (e) {\n                            if (\"RuleError\" === e.name)\n                                return (\n                                    console.error(\n                                        \"Rule Error \",\n                                        `Illegal action: ${t}.`,\n                                        e.message\n                                    ),\n                                    null\n                                );\n                            throw e;\n                        }\n                    }\n                    parse(t) {\n                        (this.modality = t.modality || this.modality),\n                            (this.locale = t.locale || this.locale),\n                            (this.domain = t.domain || this.domain),\n                            this.context.parse(t.functions || []),\n                            \"actions\" !== t.kind &&\n                                ((this.kind = t.kind || this.kind),\n                                this.inheritRules()),\n                            this.parseRules(t.rules || []);\n                    }\n                    parseRules(t) {\n                        for (let e, r = 0; (e = t[r]); r++) {\n                            const t = e[0],\n                                r = this.parseMethods[t];\n                            t && r && r.apply(this, e.slice(1));\n                        }\n                    }\n                    generateRules(t) {\n                        const e = this.context.customGenerators.lookup(t);\n                        e && e(this);\n                    }\n                    defineAction(t, e) {\n                        let r;\n                        try {\n                            r = i.Action.fromString(e);\n                        } catch (t) {\n                            if (\"RuleError\" === t.name)\n                                return void console.error(\n                                    \"Action Error \",\n                                    e,\n                                    t.message\n                                );\n                            throw t;\n                        }\n                        const n = this.getFullPreconditions(t);\n                        if (!n)\n                            return void console.error(\n                                `Action Error: No precondition for action ${t}`\n                            );\n                        this.ignoreRules(t);\n                        const o = new RegExp(\n                            \"^\\\\w+\\\\.\\\\w+\\\\.\" + (this.domain ? \"\\\\w+\\\\.\" : \"\")\n                        );\n                        n.conditions.forEach(([e, n]) => {\n                            const s = this.parseCstr(\n                                e.toString().replace(o, \"\")\n                            );\n                            this.addRule(new i.SpeechRule(t, s, n, r));\n                        });\n                    }\n                    getFullPreconditions(t) {\n                        const e = this.preconditions.get(t);\n                        return e || !this.inherits\n                            ? e\n                            : this.inherits.getFullPreconditions(t);\n                    }\n                    definePrecondition(t, e, r, ...n) {\n                        const o = this.parsePrecondition(r, n),\n                            i = this.parseCstr(e);\n                        o && i\n                            ? ((o.rank = this.rank++),\n                              this.preconditions.set(t, new l(i, o)))\n                            : console.error(`Precondition Error: ${r}, (${e})`);\n                    }\n                    inheritRules() {\n                        if (\n                            !this.inherits ||\n                            !this.inherits.getSpeechRules().length\n                        )\n                            return;\n                        const t = new RegExp(\n                            \"^\\\\w+\\\\.\\\\w+\\\\.\" + (this.domain ? \"\\\\w+\\\\.\" : \"\")\n                        );\n                        this.inherits.getSpeechRules().forEach((e) => {\n                            const r = this.parseCstr(\n                                e.dynamicCstr.toString().replace(t, \"\")\n                            );\n                            this.addRule(\n                                new i.SpeechRule(\n                                    e.name,\n                                    r,\n                                    e.precondition,\n                                    e.action\n                                )\n                            );\n                        });\n                    }\n                    ignoreRules(t, ...e) {\n                        let r = this.findAllRules((e) => e.name === t);\n                        if (!e.length)\n                            return void r.forEach(this.deleteRule.bind(this));\n                        let n = [];\n                        for (const t of e) {\n                            const e = this.parseCstr(t);\n                            for (const t of r)\n                                e.equal(t.dynamicCstr)\n                                    ? this.deleteRule(t)\n                                    : n.push(t);\n                            (r = n), (n = []);\n                        }\n                    }\n                    parsePrecondition_(t) {\n                        const e = this.context.customGenerators.lookup(t);\n                        return e ? e() : [t];\n                    }\n                }\n                e.BaseRuleStore = a;\n                class l {\n                    constructor(t, e) {\n                        (this.base = t),\n                            (this._conditions = []),\n                            (this.constraints = []),\n                            (this.allCstr = {}),\n                            this.constraints.push(t),\n                            this.addCondition(t, e);\n                    }\n                    get conditions() {\n                        return this._conditions;\n                    }\n                    addConstraint(t) {\n                        if (this.constraints.filter((e) => e.equal(t)).length)\n                            return;\n                        this.constraints.push(t);\n                        const e = [];\n                        for (const [r, n] of this.conditions)\n                            this.base.equal(r) && e.push([t, n]);\n                        this._conditions = this._conditions.concat(e);\n                    }\n                    addBaseCondition(t) {\n                        this.addCondition(this.base, t);\n                    }\n                    addFullCondition(t) {\n                        this.constraints.forEach((e) =>\n                            this.addCondition(e, t)\n                        );\n                    }\n                    addCondition(t, e) {\n                        const r = t.toString() + \" \" + e.toString();\n                        this.allCstr.condStr ||\n                            ((this.allCstr[r] = !0),\n                            this._conditions.push([t, e]));\n                    }\n                }\n                e.Condition = l;\n            },\n            2469: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.BrailleStore = void 0);\n                const n = r(7630),\n                    o = r(9935);\n                class i extends o.MathStore {\n                    constructor() {\n                        super(...arguments),\n                            (this.modality = \"braille\"),\n                            (this.customTranscriptions = {\n                                \"\\u22ca\": \"\\u2808\\u2821\\u2833\",\n                            });\n                    }\n                    evaluateString(t) {\n                        const e = [],\n                            r = Array.from(t);\n                        for (let t = 0; t < r.length; t++)\n                            e.push(this.evaluateCharacter(r[t]));\n                        return e;\n                    }\n                    annotations() {\n                        for (let t, e = 0; (t = this.annotators[e]); e++)\n                            (0, n.activate)(this.locale, t);\n                    }\n                }\n                e.BrailleStore = i;\n            },\n            1676: function (t, e) {\n                var r;\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.DefaultComparator =\n                        e.DynamicCstrParser =\n                        e.DynamicCstr =\n                        e.DynamicProperties =\n                        e.Axis =\n                            void 0),\n                    (function (t) {\n                        (t.DOMAIN = \"domain\"),\n                            (t.STYLE = \"style\"),\n                            (t.LOCALE = \"locale\"),\n                            (t.TOPIC = \"topic\"),\n                            (t.MODALITY = \"modality\");\n                    })((r = e.Axis || (e.Axis = {})));\n                class n {\n                    constructor(t, e = Object.keys(t)) {\n                        (this.properties = t), (this.order = e);\n                    }\n                    static createProp(...t) {\n                        const e = o.DEFAULT_ORDER,\n                            r = {};\n                        for (\n                            let n = 0, o = t.length, i = e.length;\n                            n < o && n < i;\n                            n++\n                        )\n                            r[e[n]] = t[n];\n                        return new n(r);\n                    }\n                    getProperties() {\n                        return this.properties;\n                    }\n                    getOrder() {\n                        return this.order;\n                    }\n                    getAxes() {\n                        return this.order;\n                    }\n                    getProperty(t) {\n                        return this.properties[t];\n                    }\n                    updateProperties(t) {\n                        this.properties = t;\n                    }\n                    allProperties() {\n                        const t = [];\n                        return (\n                            this.order.forEach((e) =>\n                                t.push(this.getProperty(e).slice())\n                            ),\n                            t\n                        );\n                    }\n                    toString() {\n                        const t = [];\n                        return (\n                            this.order.forEach((e) =>\n                                t.push(\n                                    e + \": \" + this.getProperty(e).toString()\n                                )\n                            ),\n                            t.join(\"\\n\")\n                        );\n                    }\n                }\n                e.DynamicProperties = n;\n                class o extends n {\n                    constructor(t, e) {\n                        const r = {};\n                        for (const [e, n] of Object.entries(t)) r[e] = [n];\n                        super(r, e), (this.components = t);\n                    }\n                    static createCstr(...t) {\n                        const e = o.DEFAULT_ORDER,\n                            r = {};\n                        for (\n                            let n = 0, o = t.length, i = e.length;\n                            n < o && n < i;\n                            n++\n                        )\n                            r[e[n]] = t[n];\n                        return new o(r);\n                    }\n                    static defaultCstr() {\n                        return o.createCstr.apply(\n                            null,\n                            o.DEFAULT_ORDER.map(function (t) {\n                                return o.DEFAULT_VALUES[t];\n                            })\n                        );\n                    }\n                    static validOrder(t) {\n                        const e = o.DEFAULT_ORDER.slice();\n                        return t.every((t) => {\n                            const r = e.indexOf(t);\n                            return -1 !== r && e.splice(r, 1);\n                        });\n                    }\n                    getComponents() {\n                        return this.components;\n                    }\n                    getValue(t) {\n                        return this.components[t];\n                    }\n                    getValues() {\n                        return this.order.map((t) => this.getValue(t));\n                    }\n                    allProperties() {\n                        const t = super.allProperties();\n                        for (\n                            let e, r, n = 0;\n                            (e = t[n]), (r = this.order[n]);\n                            n++\n                        ) {\n                            const t = this.getValue(r);\n                            -1 === e.indexOf(t) && e.unshift(t);\n                        }\n                        return t;\n                    }\n                    toString() {\n                        return this.getValues().join(\".\");\n                    }\n                    equal(t) {\n                        const e = t.getAxes();\n                        if (this.order.length !== e.length) return !1;\n                        for (let r, n = 0; (r = e[n]); n++) {\n                            const e = this.getValue(r);\n                            if (!e || t.getValue(r) !== e) return !1;\n                        }\n                        return !0;\n                    }\n                }\n                (e.DynamicCstr = o),\n                    (o.DEFAULT_ORDER = [\n                        r.LOCALE,\n                        r.MODALITY,\n                        r.DOMAIN,\n                        r.STYLE,\n                        r.TOPIC,\n                    ]),\n                    (o.BASE_LOCALE = \"base\"),\n                    (o.DEFAULT_VALUE = \"default\"),\n                    (o.DEFAULT_VALUES = {\n                        [r.LOCALE]: \"en\",\n                        [r.DOMAIN]: o.DEFAULT_VALUE,\n                        [r.STYLE]: o.DEFAULT_VALUE,\n                        [r.TOPIC]: o.DEFAULT_VALUE,\n                        [r.MODALITY]: \"speech\",\n                    });\n                e.DynamicCstrParser = class {\n                    constructor(t) {\n                        this.order = t;\n                    }\n                    parse(t) {\n                        const e = t.split(\".\"),\n                            r = {};\n                        if (e.length > this.order.length)\n                            throw new Error(\"Invalid dynamic constraint: \" + r);\n                        let n = 0;\n                        for (\n                            let t, o = 0;\n                            (t = this.order[o]), e.length;\n                            o++, n++\n                        ) {\n                            const n = e.shift();\n                            r[t] = n;\n                        }\n                        return new o(r, this.order.slice(0, n));\n                    }\n                };\n                e.DefaultComparator = class {\n                    constructor(t, e = new n(t.getProperties(), t.getOrder())) {\n                        (this.reference = t),\n                            (this.fallback = e),\n                            (this.order = this.reference.getOrder());\n                    }\n                    getReference() {\n                        return this.reference;\n                    }\n                    setReference(t, e) {\n                        (this.reference = t),\n                            (this.fallback =\n                                e || new n(t.getProperties(), t.getOrder())),\n                            (this.order = this.reference.getOrder());\n                    }\n                    match(t) {\n                        const e = t.getAxes();\n                        return (\n                            e.length === this.reference.getAxes().length &&\n                            e.every((e) => {\n                                const r = t.getValue(e);\n                                return (\n                                    r === this.reference.getValue(e) ||\n                                    -1 !==\n                                        this.fallback.getProperty(e).indexOf(r)\n                                );\n                            })\n                        );\n                    }\n                    compare(t, e) {\n                        let r = !1;\n                        for (let n, o = 0; (n = this.order[o]); o++) {\n                            const o = t.getValue(n),\n                                i = e.getValue(n);\n                            if (!r) {\n                                const t = this.reference.getValue(n);\n                                if (t === o && t !== i) return -1;\n                                if (t === i && t !== o) return 1;\n                                if (t === o && t === i) continue;\n                                t !== o && t !== i && (r = !0);\n                            }\n                            const s = this.fallback.getProperty(n),\n                                a = s.indexOf(o),\n                                l = s.indexOf(i);\n                            if (a < l) return -1;\n                            if (l < a) return 1;\n                        }\n                        return 0;\n                    }\n                    toString() {\n                        return (\n                            this.reference.toString() +\n                            \"\\n\" +\n                            this.fallback.toString()\n                        );\n                    }\n                };\n            },\n            2105: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.numbersToAlpha = e.Grammar = e.ATTRIBUTE = void 0);\n                const n = r(5740),\n                    o = r(5897),\n                    i = r(2536),\n                    s = r(4356);\n                e.ATTRIBUTE = \"grammar\";\n                class a {\n                    constructor() {\n                        (this.currentFlags = {}),\n                            (this.parameters_ = {}),\n                            (this.corrections_ = {}),\n                            (this.preprocessors_ = {}),\n                            (this.stateStack_ = []);\n                    }\n                    static getInstance() {\n                        return (a.instance = a.instance || new a()), a.instance;\n                    }\n                    static parseInput(t) {\n                        const e = {},\n                            r = t.split(\":\");\n                        for (let t = 0, n = r.length; t < n; t++) {\n                            const n = r[t].split(\"=\"),\n                                o = n[0].trim();\n                            n[1]\n                                ? (e[o] = n[1].trim())\n                                : o.match(/^!/)\n                                  ? (e[o.slice(1)] = !1)\n                                  : (e[o] = !0);\n                        }\n                        return e;\n                    }\n                    static parseState(t) {\n                        const e = {},\n                            r = t.split(\" \");\n                        for (let t = 0, n = r.length; t < n; t++) {\n                            const n = r[t].split(\":\"),\n                                o = n[0],\n                                i = n[1];\n                            e[o] = i || !0;\n                        }\n                        return e;\n                    }\n                    static translateString_(t) {\n                        if (t.match(/:unit$/)) return a.translateUnit_(t);\n                        const e = o.default.getInstance();\n                        let r = e.evaluator(t, e.dynamicCstr);\n                        return (\n                            (r = null === r ? t : r),\n                            a.getInstance().getParameter(\"plural\") &&\n                                (r = s.LOCALE.FUNCTIONS.plural(r)),\n                            r\n                        );\n                    }\n                    static translateUnit_(t) {\n                        t = a.prepareUnit_(t);\n                        const e = o.default.getInstance(),\n                            r = a.getInstance().getParameter(\"plural\"),\n                            n = e.strict,\n                            i = `${e.locale}.${e.modality}.default`;\n                        let l, c;\n                        return (\n                            (e.strict = !0),\n                            r &&\n                                ((l = e.defaultParser.parse(i + \".plural\")),\n                                (c = e.evaluator(t, l))),\n                            c\n                                ? ((e.strict = n), c)\n                                : ((l = e.defaultParser.parse(i + \".default\")),\n                                  (c = e.evaluator(t, l)),\n                                  (e.strict = n),\n                                  c\n                                      ? (r &&\n                                            (c = s.LOCALE.FUNCTIONS.plural(c)),\n                                        c)\n                                      : a.cleanUnit_(t))\n                        );\n                    }\n                    static prepareUnit_(t) {\n                        const e = t.match(/:unit$/);\n                        return e\n                            ? t.slice(0, e.index).replace(/\\s+/g, \" \") +\n                                  t.slice(e.index)\n                            : t;\n                    }\n                    static cleanUnit_(t) {\n                        return t.match(/:unit$/) ? t.replace(/:unit$/, \"\") : t;\n                    }\n                    clear() {\n                        (this.parameters_ = {}), (this.stateStack_ = []);\n                    }\n                    setParameter(t, e) {\n                        const r = this.parameters_[t];\n                        return (\n                            e\n                                ? (this.parameters_[t] = e)\n                                : delete this.parameters_[t],\n                            r\n                        );\n                    }\n                    getParameter(t) {\n                        return this.parameters_[t];\n                    }\n                    setCorrection(t, e) {\n                        this.corrections_[t] = e;\n                    }\n                    setPreprocessor(t, e) {\n                        this.preprocessors_[t] = e;\n                    }\n                    getCorrection(t) {\n                        return this.corrections_[t];\n                    }\n                    getState() {\n                        const t = [];\n                        for (const e in this.parameters_) {\n                            const r = this.parameters_[e];\n                            t.push(\"string\" == typeof r ? e + \":\" + r : e);\n                        }\n                        return t.join(\" \");\n                    }\n                    pushState(t) {\n                        for (const e in t) t[e] = this.setParameter(e, t[e]);\n                        this.stateStack_.push(t);\n                    }\n                    popState() {\n                        const t = this.stateStack_.pop();\n                        for (const e in t) this.setParameter(e, t[e]);\n                    }\n                    setAttribute(t) {\n                        if (t && t.nodeType === n.NodeType.ELEMENT_NODE) {\n                            const r = this.getState();\n                            r && t.setAttribute(e.ATTRIBUTE, r);\n                        }\n                    }\n                    preprocess(t) {\n                        return this.runProcessors_(t, this.preprocessors_);\n                    }\n                    correct(t) {\n                        return this.runProcessors_(t, this.corrections_);\n                    }\n                    apply(t, e) {\n                        return (\n                            (this.currentFlags = e || {}),\n                            (t =\n                                this.currentFlags.adjust ||\n                                this.currentFlags.preprocess\n                                    ? a.getInstance().preprocess(t)\n                                    : t),\n                            (this.parameters_.translate ||\n                                this.currentFlags.translate) &&\n                                (t = a.translateString_(t)),\n                            (t =\n                                this.currentFlags.adjust ||\n                                this.currentFlags.correct\n                                    ? a.getInstance().correct(t)\n                                    : t),\n                            (this.currentFlags = {}),\n                            t\n                        );\n                    }\n                    runProcessors_(t, e) {\n                        for (const r in this.parameters_) {\n                            const n = e[r];\n                            if (!n) continue;\n                            const o = this.parameters_[r];\n                            t = !0 === o ? n(t) : n(t, o);\n                        }\n                        return t;\n                    }\n                }\n                function l(t, e) {\n                    if (!e || !t) return t;\n                    const r = s.LOCALE.FUNCTIONS.fontRegexp(i.localFont(e));\n                    return t.replace(r, \"\");\n                }\n                function c(t) {\n                    return t.match(/\\d+/)\n                        ? s.LOCALE.NUMBERS.numberToWords(parseInt(t, 10))\n                        : t;\n                }\n                (e.Grammar = a),\n                    (e.numbersToAlpha = c),\n                    a.getInstance().setCorrection(\"localFont\", i.localFont),\n                    a.getInstance().setCorrection(\"localRole\", i.localRole),\n                    a\n                        .getInstance()\n                        .setCorrection(\"localEnclose\", i.localEnclose),\n                    a.getInstance().setCorrection(\"ignoreFont\", l),\n                    a\n                        .getInstance()\n                        .setPreprocessor(\"annotation\", function (t, e) {\n                            return t + \":\" + e;\n                        }),\n                    a\n                        .getInstance()\n                        .setPreprocessor(\"noTranslateText\", function (t) {\n                            return (\n                                t.match(\n                                    new RegExp(\n                                        \"^[\" +\n                                            s.LOCALE.MESSAGES.regexp.TEXT +\n                                            \"]+$\"\n                                    )\n                                ) &&\n                                    (a.getInstance().currentFlags.translate =\n                                        !1),\n                                t\n                            );\n                        }),\n                    a.getInstance().setCorrection(\"ignoreCaps\", function (t) {\n                        let e =\n                            s.LOCALE.ALPHABETS.capPrefix[\n                                o.default.getInstance().domain\n                            ];\n                        return (\n                            void 0 === e &&\n                                (e = s.LOCALE.ALPHABETS.capPrefix.default),\n                            l(t, e)\n                        );\n                    }),\n                    a.getInstance().setPreprocessor(\"numbers2alpha\", c);\n            },\n            2780: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.enumerate =\n                        e.lookupString =\n                        e.lookupCategory =\n                        e.lookupRule =\n                        e.addSiUnitRules =\n                        e.addUnitRules =\n                        e.addFunctionRules =\n                        e.addSymbolRules =\n                        e.defineRule =\n                        e.defineRules =\n                        e.setSiPrefixes =\n                            void 0);\n                const n = r(2057),\n                    o = r(5897),\n                    i = r(7491),\n                    s = r(4658),\n                    a = r(1676);\n                let l = a.DynamicCstr.DEFAULT_VALUES[a.Axis.LOCALE],\n                    c = a.DynamicCstr.DEFAULT_VALUES[a.Axis.MODALITY],\n                    u = {};\n                e.setSiPrefixes = function (t) {\n                    u = t;\n                };\n                const p = {};\n                function h(t, e, r, n) {\n                    const o = _(e);\n                    S(o, r), o.defineRulesFromMappings(t, l, c, e, n);\n                }\n                function f(t) {\n                    if (v(t)) return;\n                    const e = t.names,\n                        r = t.mappings,\n                        n = t.category;\n                    for (let t, o = 0; (t = e[o]); o++) h(t, t, n, r);\n                }\n                function d(t) {\n                    for (const e of Object.keys(u)) {\n                        const r = Object.assign({}, t);\n                        r.mappings = {};\n                        const n = u[e];\n                        (r.key = e + r.key),\n                            (r.names = r.names.map(function (t) {\n                                return e + t;\n                            }));\n                        for (const e of Object.keys(t.mappings)) {\n                            r.mappings[e] = {};\n                            for (const o of Object.keys(t.mappings[e]))\n                                r.mappings[e][o] = i.locales[l]().FUNCTIONS.si(\n                                    n,\n                                    t.mappings[e][o]\n                                );\n                        }\n                        b(r);\n                    }\n                    b(t);\n                }\n                function m(t, e) {\n                    const r = p[t];\n                    return r ? r.lookupRule(null, e) : null;\n                }\n                function y(t, e) {\n                    const r = m(t, e);\n                    return r ? r.action : null;\n                }\n                function g(t, e) {\n                    return (\n                        (e = e || {}),\n                        t.length ? ((e[t[0]] = g(t.slice(1), e[t[0]])), e) : e\n                    );\n                }\n                function b(t) {\n                    const e = t.names;\n                    e &&\n                        (t.names = e.map(function (t) {\n                            return t + \":unit\";\n                        })),\n                        f(t);\n                }\n                function v(t) {\n                    return (\n                        !(!t.locale && !t.modality) &&\n                        ((l = t.locale || l), (c = t.modality || c), !0)\n                    );\n                }\n                function _(t) {\n                    let e = p[t];\n                    return e\n                        ? (n.Debugger.getInstance().output(\n                              \"Store exists! \" + t\n                          ),\n                          e)\n                        : ((e = new s.MathSimpleStore()), (p[t] = e), e);\n                }\n                function S(t, e) {\n                    e && (t.category = e);\n                }\n                (e.defineRules = h),\n                    (e.defineRule = function (t, e, r, n, o, i) {\n                        const s = _(o);\n                        S(s, n), s.defineRuleFromStrings(t, l, c, e, r, o, i);\n                    }),\n                    (e.addSymbolRules = function (t) {\n                        if (v(t)) return;\n                        const e = s.MathSimpleStore.parseUnicode(t.key);\n                        h(t.key, e, t.category, t.mappings);\n                    }),\n                    (e.addFunctionRules = f),\n                    (e.addUnitRules = function (t) {\n                        v(t) || (t.si ? d(t) : b(t));\n                    }),\n                    (e.addSiUnitRules = d),\n                    (e.lookupRule = m),\n                    (e.lookupCategory = function (t) {\n                        const e = p[t];\n                        return e ? e.category : \"\";\n                    }),\n                    (e.lookupString = y),\n                    (o.default.getInstance().evaluator = y),\n                    (e.enumerate = function (t = {}) {\n                        for (const e of Object.values(p))\n                            for (const [, r] of e.rules.entries())\n                                for (const { cstr: e } of r)\n                                    t = g(e.getValues(), t);\n                        return t;\n                    });\n            },\n            4658: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MathSimpleStore = void 0);\n                const n = r(5897),\n                    o = r(1676);\n                class i {\n                    constructor() {\n                        (this.category = \"\"), (this.rules = new Map());\n                    }\n                    static parseUnicode(t) {\n                        const e = parseInt(t, 16);\n                        return String.fromCodePoint(e);\n                    }\n                    static testDynamicConstraints_(t, e) {\n                        return n.default.getInstance().strict\n                            ? e.cstr.equal(t)\n                            : n.default.getInstance().comparator.match(e.cstr);\n                    }\n                    defineRulesFromMappings(t, e, r, n, o) {\n                        for (const i in o)\n                            for (const s in o[i]) {\n                                const a = o[i][s];\n                                this.defineRuleFromStrings(t, e, r, i, s, n, a);\n                            }\n                    }\n                    getRules(t) {\n                        let e = this.rules.get(t);\n                        return e || ((e = []), this.rules.set(t, e)), e;\n                    }\n                    defineRuleFromStrings(t, e, r, o, i, s, a) {\n                        let l = this.getRules(e);\n                        const c =\n                                n.default.getInstance().parsers[o] ||\n                                n.default.getInstance().defaultParser,\n                            u = n.default.getInstance().comparators[o],\n                            p = `${e}.${r}.${o}.${i}`,\n                            h = c.parse(p),\n                            f = u ? u() : n.default.getInstance().comparator,\n                            d = f.getReference();\n                        f.setReference(h);\n                        const m = { cstr: h, action: a };\n                        (l = l.filter((t) => !h.equal(t.cstr))),\n                            l.push(m),\n                            this.rules.set(e, l),\n                            f.setReference(d);\n                    }\n                    lookupRule(t, e) {\n                        let r = this.getRules(e.getValue(o.Axis.LOCALE));\n                        return (\n                            (r = r.filter(function (t) {\n                                return i.testDynamicConstraints_(e, t);\n                            })),\n                            1 === r.length\n                                ? r[0]\n                                : r.length\n                                  ? r.sort((t, e) =>\n                                        n.default\n                                            .getInstance()\n                                            .comparator.compare(t.cstr, e.cstr)\n                                    )[0]\n                                  : null\n                        );\n                    }\n                }\n                e.MathSimpleStore = i;\n            },\n            9935: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MathStore = void 0);\n                const n = r(707),\n                    o = r(4356),\n                    i = r(7630),\n                    s = r(4504),\n                    a = r(4650);\n                class l extends s.BaseRuleStore {\n                    constructor() {\n                        super(),\n                            (this.annotators = []),\n                            (this.parseMethods.Alias = this.defineAlias),\n                            (this.parseMethods.SpecializedRule =\n                                this.defineSpecializedRule),\n                            (this.parseMethods.Specialized =\n                                this.defineSpecialized);\n                    }\n                    initialize() {\n                        this.initialized ||\n                            (this.annotations(), (this.initialized = !0));\n                    }\n                    annotations() {\n                        for (let t, e = 0; (t = this.annotators[e]); e++)\n                            (0, i.activate)(this.domain, t);\n                    }\n                    defineAlias(t, e, ...r) {\n                        const n = this.parsePrecondition(e, r);\n                        if (!n)\n                            return void console.error(\n                                `Precondition Error: ${e} ${r}`\n                            );\n                        const o = this.preconditions.get(t);\n                        o\n                            ? o.addFullCondition(n)\n                            : console.error(\n                                  `Alias Error: No precondition by the name of ${t}`\n                              );\n                    }\n                    defineRulesAlias(t, e, ...r) {\n                        const n = this.findAllRules(function (e) {\n                            return e.name === t;\n                        });\n                        if (0 === n.length)\n                            throw new a.OutputError(\n                                \"Rule with name \" + t + \" does not exist.\"\n                            );\n                        const o = [];\n                        n.forEach((t) => {\n                            ((t) => {\n                                const e = t.dynamicCstr.toString(),\n                                    r = t.action.toString();\n                                for (let t, n = 0; (t = o[n]); n++)\n                                    if (t.action === r && t.cstr === e)\n                                        return !1;\n                                return o.push({ cstr: e, action: r }), !0;\n                            })(t) && this.addAlias_(t, e, r);\n                        });\n                    }\n                    defineSpecializedRule(t, e, r, n) {\n                        const o = this.parseCstr(e),\n                            i = this.findRule(\n                                (e) => e.name === t && o.equal(e.dynamicCstr)\n                            ),\n                            s = this.parseCstr(r);\n                        if (!i && n)\n                            throw new a.OutputError(\n                                \"Rule named \" +\n                                    t +\n                                    \" with style \" +\n                                    e +\n                                    \" does not exist.\"\n                            );\n                        const l = n ? a.Action.fromString(n) : i.action,\n                            c = new a.SpeechRule(i.name, s, i.precondition, l);\n                        this.addRule(c);\n                    }\n                    defineSpecialized(t, e, r) {\n                        const n = this.parseCstr(r);\n                        if (!n)\n                            return void console.error(\n                                `Dynamic Constraint Error: ${r}`\n                            );\n                        const o = this.preconditions.get(t);\n                        o\n                            ? o.addConstraint(n)\n                            : console.error(\n                                  `Alias Error: No precondition by the name of ${t}`\n                              );\n                    }\n                    evaluateString(t) {\n                        const e = [];\n                        if (t.match(/^\\s+$/)) return e;\n                        let r = this.matchNumber_(t);\n                        if (r && r.length === t.length)\n                            return e.push(this.evaluateCharacter(r.number)), e;\n                        const i = n.removeEmpty(\n                            t.replace(/\\s/g, \" \").split(\" \")\n                        );\n                        for (let t, n = 0; (t = i[n]); n++)\n                            if (1 === t.length)\n                                e.push(this.evaluateCharacter(t));\n                            else if (\n                                t.match(\n                                    new RegExp(\n                                        \"^[\" +\n                                            o.LOCALE.MESSAGES.regexp.TEXT +\n                                            \"]+$\"\n                                    )\n                                )\n                            )\n                                e.push(this.evaluateCharacter(t));\n                            else {\n                                let n = t;\n                                for (; n; ) {\n                                    r = this.matchNumber_(n);\n                                    const t = n.match(\n                                        new RegExp(\n                                            \"^[\" +\n                                                o.LOCALE.MESSAGES.regexp.TEXT +\n                                                \"]+\"\n                                        )\n                                    );\n                                    if (r)\n                                        e.push(\n                                            this.evaluateCharacter(r.number)\n                                        ),\n                                            (n = n.substring(r.length));\n                                    else if (t)\n                                        e.push(this.evaluateCharacter(t[0])),\n                                            (n = n.substring(t[0].length));\n                                    else {\n                                        const t = Array.from(n),\n                                            r = t[0];\n                                        e.push(this.evaluateCharacter(r)),\n                                            (n = t.slice(1).join(\"\"));\n                                    }\n                                }\n                            }\n                        return e;\n                    }\n                    parse(t) {\n                        super.parse(t), (this.annotators = t.annotators || []);\n                    }\n                    addAlias_(t, e, r) {\n                        const n = this.parsePrecondition(e, r),\n                            o = new a.SpeechRule(\n                                t.name,\n                                t.dynamicCstr,\n                                n,\n                                t.action\n                            );\n                        (o.name = t.name), this.addRule(o);\n                    }\n                    matchNumber_(t) {\n                        const e = t.match(\n                                new RegExp(\n                                    \"^\" + o.LOCALE.MESSAGES.regexp.NUMBER\n                                )\n                            ),\n                            r = t.match(new RegExp(\"^\" + l.regexp.NUMBER));\n                        if (!e && !r) return null;\n                        const n = r && r[0] === t;\n                        if ((e && e[0] === t) || !n)\n                            return e\n                                ? { number: e[0], length: e[0].length }\n                                : null;\n                        return {\n                            number: r[0]\n                                .replace(\n                                    new RegExp(l.regexp.DIGIT_GROUP, \"g\"),\n                                    \"X\"\n                                )\n                                .replace(\n                                    new RegExp(l.regexp.DECIMAL_MARK, \"g\"),\n                                    o.LOCALE.MESSAGES.regexp.DECIMAL_MARK\n                                )\n                                .replace(\n                                    /X/g,\n                                    o.LOCALE.MESSAGES.regexp.DIGIT_GROUP.replace(\n                                        /\\\\/g,\n                                        \"\"\n                                    )\n                                ),\n                            length: r[0].length,\n                        };\n                    }\n                }\n                (e.MathStore = l),\n                    (l.regexp = {\n                        NUMBER: \"((\\\\d{1,3})(?=(,| ))((,| )\\\\d{3})*(\\\\.\\\\d+)?)|^\\\\d*\\\\.\\\\d+|^\\\\d+\",\n                        DECIMAL_MARK: \"\\\\.\",\n                        DIGIT_GROUP: \",\",\n                    });\n            },\n            4650: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.OutputError =\n                        e.Precondition =\n                        e.Action =\n                        e.Component =\n                        e.ActionType =\n                        e.SpeechRule =\n                            void 0);\n                const n = r(5897),\n                    o = r(2105);\n                var i;\n                function s(t) {\n                    switch (t) {\n                        case \"[n]\":\n                            return i.NODE;\n                        case \"[m]\":\n                            return i.MULTI;\n                        case \"[t]\":\n                            return i.TEXT;\n                        case \"[p]\":\n                            return i.PERSONALITY;\n                        default:\n                            throw \"Parse error: \" + t;\n                    }\n                }\n                (e.SpeechRule = class {\n                    constructor(t, e, r, n) {\n                        (this.name = t),\n                            (this.dynamicCstr = e),\n                            (this.precondition = r),\n                            (this.action = n),\n                            (this.context = null);\n                    }\n                    toString() {\n                        return (\n                            this.name +\n                            \" | \" +\n                            this.dynamicCstr.toString() +\n                            \" | \" +\n                            this.precondition.toString() +\n                            \" ==> \" +\n                            this.action.toString()\n                        );\n                    }\n                }),\n                    (function (t) {\n                        (t.NODE = \"NODE\"),\n                            (t.MULTI = \"MULTI\"),\n                            (t.TEXT = \"TEXT\"),\n                            (t.PERSONALITY = \"PERSONALITY\");\n                    })((i = e.ActionType || (e.ActionType = {})));\n                class a {\n                    constructor({\n                        type: t,\n                        content: e,\n                        attributes: r,\n                        grammar: n,\n                    }) {\n                        (this.type = t),\n                            (this.content = e),\n                            (this.attributes = r),\n                            (this.grammar = n);\n                    }\n                    static grammarFromString(t) {\n                        return o.Grammar.parseInput(t);\n                    }\n                    static fromString(t) {\n                        const e = { type: s(t.substring(0, 3)) };\n                        let r = t.slice(3).trim();\n                        if (!r) throw new u(\"Missing content.\");\n                        switch (e.type) {\n                            case i.TEXT:\n                                if ('\"' === r[0]) {\n                                    const t = p(r, \"\\\\(\")[0].trim();\n                                    if ('\"' !== t.slice(-1))\n                                        throw new u(\"Invalid string syntax.\");\n                                    (e.content = t),\n                                        (r = r.slice(t.length).trim()),\n                                        -1 === r.indexOf(\"(\") && (r = \"\");\n                                    break;\n                                }\n                            case i.NODE:\n                            case i.MULTI: {\n                                const t = r.indexOf(\" (\");\n                                if (-1 === t) {\n                                    (e.content = r.trim()), (r = \"\");\n                                    break;\n                                }\n                                (e.content = r.substring(0, t).trim()),\n                                    (r = r.slice(t).trim());\n                            }\n                        }\n                        if (r) {\n                            const t = a.attributesFromString(r);\n                            t.grammar &&\n                                ((e.grammar = t.grammar), delete t.grammar),\n                                Object.keys(t).length && (e.attributes = t);\n                        }\n                        return new a(e);\n                    }\n                    static attributesFromString(t) {\n                        if (\"(\" !== t[0] || \")\" !== t.slice(-1))\n                            throw new u(\"Invalid attribute expression: \" + t);\n                        const e = {},\n                            r = p(t.slice(1, -1), \",\");\n                        for (let t = 0, n = r.length; t < n; t++) {\n                            const n = r[t],\n                                i = n.indexOf(\":\");\n                            if (-1 === i) e[n.trim()] = \"true\";\n                            else {\n                                const t = n.substring(0, i).trim(),\n                                    r = n.slice(i + 1).trim();\n                                e[t] =\n                                    t === o.ATTRIBUTE\n                                        ? a.grammarFromString(r)\n                                        : r;\n                            }\n                        }\n                        return e;\n                    }\n                    toString() {\n                        let t = \"\";\n                        (t += (function (t) {\n                            switch (t) {\n                                case i.NODE:\n                                    return \"[n]\";\n                                case i.MULTI:\n                                    return \"[m]\";\n                                case i.TEXT:\n                                    return \"[t]\";\n                                case i.PERSONALITY:\n                                    return \"[p]\";\n                                default:\n                                    throw \"Unknown type error: \" + t;\n                            }\n                        })(this.type)),\n                            (t += this.content ? \" \" + this.content : \"\");\n                        const e = this.attributesToString();\n                        return (t += e ? \" \" + e : \"\"), t;\n                    }\n                    grammarToString() {\n                        return this.getGrammar().join(\":\");\n                    }\n                    getGrammar() {\n                        const t = [];\n                        for (const e in this.grammar)\n                            !0 === this.grammar[e]\n                                ? t.push(e)\n                                : !1 === this.grammar[e]\n                                  ? t.push(\"!\" + e)\n                                  : t.push(e + \"=\" + this.grammar[e]);\n                        return t;\n                    }\n                    attributesToString() {\n                        const t = this.getAttributes(),\n                            e = this.grammarToString();\n                        return (\n                            e && t.push(\"grammar:\" + e),\n                            t.length > 0 ? \"(\" + t.join(\", \") + \")\" : \"\"\n                        );\n                    }\n                    getAttributes() {\n                        const t = [];\n                        for (const e in this.attributes) {\n                            const r = this.attributes[e];\n                            \"true\" === r ? t.push(e) : t.push(e + \":\" + r);\n                        }\n                        return t;\n                    }\n                }\n                e.Component = a;\n                class l {\n                    constructor(t) {\n                        this.components = t;\n                    }\n                    static fromString(t) {\n                        const e = p(t, \";\")\n                                .filter(function (t) {\n                                    return t.match(/\\S/);\n                                })\n                                .map(function (t) {\n                                    return t.trim();\n                                }),\n                            r = [];\n                        for (let t = 0, n = e.length; t < n; t++) {\n                            const n = a.fromString(e[t]);\n                            n && r.push(n);\n                        }\n                        return new l(r);\n                    }\n                    toString() {\n                        return this.components\n                            .map(function (t) {\n                                return t.toString();\n                            })\n                            .join(\"; \");\n                    }\n                }\n                e.Action = l;\n                class c {\n                    constructor(t, ...e) {\n                        (this.query = t), (this.constraints = e);\n                        const [r, n] = this.presetPriority();\n                        this.priority = r ? n : this.calculatePriority();\n                    }\n                    static constraintValue(t, e) {\n                        for (let r, n = 0; (r = e[n]); n++)\n                            if (t.match(r)) return ++n;\n                        return 0;\n                    }\n                    toString() {\n                        const t = this.constraints.join(\", \");\n                        return `${this.query}, ${t} (${this.priority}, ${this.rank})`;\n                    }\n                    calculatePriority() {\n                        const t = c.constraintValue(\n                            this.query,\n                            c.queryPriorities\n                        );\n                        if (!t) return 0;\n                        const e = this.query.match(/^self::.+\\[(.+)\\]/)[1];\n                        return (\n                            100 * t +\n                            10 * c.constraintValue(e, c.attributePriorities)\n                        );\n                    }\n                    presetPriority() {\n                        if (!this.constraints.length) return [!1, 0];\n                        const t =\n                            this.constraints[this.constraints.length - 1].match(\n                                /^priority=(.*$)/\n                            );\n                        if (!t) return [!1, 0];\n                        this.constraints.pop();\n                        const e = parseFloat(t[1]);\n                        return [!0, isNaN(e) ? 0 : e];\n                    }\n                }\n                (e.Precondition = c),\n                    (c.queryPriorities = [\n                        /^self::\\*\\[.+\\]$/,\n                        /^self::[\\w-]+\\[.+\\]$/,\n                    ]),\n                    (c.attributePriorities = [\n                        /^@[\\w-]+$/,\n                        /^@[\\w-]+!=\".+\"$/,\n                        /^not\\(contains\\(@[\\w-]+,\\s*\".+\"\\)\\)$/,\n                        /^contains\\(@[\\w-]+,\".+\"\\)$/,\n                        /^@[\\w-]+=\".+\"$/,\n                    ]);\n                class u extends n.SREError {\n                    constructor(t) {\n                        super(t), (this.name = \"RuleError\");\n                    }\n                }\n                function p(t, e) {\n                    const r = [];\n                    let n = \"\";\n                    for (; \"\" !== t; ) {\n                        const o = t.search(e);\n                        if (-1 === o) {\n                            if ((t.match(/\"/g) || []).length % 2 != 0)\n                                throw new u(\n                                    \"Invalid string in expression: \" + t\n                                );\n                            r.push(n + t), (n = \"\"), (t = \"\");\n                        } else if (\n                            (t.substring(0, o).match(/\"/g) || []).length % 2 ==\n                            0\n                        )\n                            r.push(n + t.substring(0, o)),\n                                (n = \"\"),\n                                (t = t.substring(o + 1));\n                        else {\n                            const e = t.substring(o).search('\"');\n                            if (-1 === e)\n                                throw new u(\n                                    \"Invalid string in expression: \" + t\n                                );\n                            (n += t.substring(0, o + e + 1)),\n                                (t = t.substring(o + e + 1));\n                        }\n                    }\n                    return n && r.push(n), r;\n                }\n                e.OutputError = u;\n            },\n            4106: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SpeechRuleContext = void 0);\n                const n = r(5274),\n                    o = r(5662);\n                e.SpeechRuleContext = class {\n                    constructor() {\n                        (this.customQueries = new o.CustomQueries()),\n                            (this.customStrings = new o.CustomStrings()),\n                            (this.contextFunctions = new o.ContextFunctions()),\n                            (this.customGenerators = new o.CustomGenerators());\n                    }\n                    applyCustomQuery(t, e) {\n                        const r = this.customQueries.lookup(e);\n                        return r ? r(t) : null;\n                    }\n                    applySelector(t, e) {\n                        return this.applyCustomQuery(t, e) || n.evalXPath(e, t);\n                    }\n                    applyQuery(t, e) {\n                        const r = this.applySelector(t, e);\n                        return r.length > 0 ? r[0] : null;\n                    }\n                    applyConstraint(t, e) {\n                        return (\n                            !!this.applyQuery(t, e) || n.evaluateBoolean(e, t)\n                        );\n                    }\n                    constructString(t, e) {\n                        if (!e) return \"\";\n                        if ('\"' === e.charAt(0)) return e.slice(1, -1);\n                        const r = this.customStrings.lookup(e);\n                        return r ? r(t) : n.evaluateString(e, t);\n                    }\n                    parse(t) {\n                        const e = Array.isArray(t) ? t : Object.entries(t);\n                        for (let t, r = 0; (t = e[r]); r++) {\n                            switch (t[0].slice(0, 3)) {\n                                case \"CQF\":\n                                    this.customQueries.add(t[0], t[1]);\n                                    break;\n                                case \"CSF\":\n                                    this.customStrings.add(t[0], t[1]);\n                                    break;\n                                case \"CTF\":\n                                    this.contextFunctions.add(t[0], t[1]);\n                                    break;\n                                case \"CGF\":\n                                    this.customGenerators.add(t[0], t[1]);\n                                    break;\n                                default:\n                                    console.error(\n                                        \"FunctionError: Invalid function name \" +\n                                            t[0]\n                                    );\n                            }\n                        }\n                    }\n                };\n            },\n            2362: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.storeFactory = e.SpeechRuleEngine = void 0);\n                const n = r(7052),\n                    o = r(2057),\n                    i = r(5740),\n                    s = r(5897),\n                    a = r(4440),\n                    l = r(5274),\n                    c = r(7283),\n                    u = r(7599),\n                    p = r(2469),\n                    h = r(1676),\n                    f = r(2105),\n                    d = r(9935),\n                    m = r(4650),\n                    y = r(4508);\n                class g {\n                    constructor() {\n                        (this.trie = null),\n                            (this.evaluators_ = {}),\n                            (this.trie = new y.Trie());\n                    }\n                    static getInstance() {\n                        return (g.instance = g.instance || new g()), g.instance;\n                    }\n                    static debugSpeechRule(t, e) {\n                        const r = t.precondition,\n                            n = t.context.applyQuery(e, r.query);\n                        o.Debugger.getInstance().output(\n                            r.query,\n                            n ? n.toString() : n\n                        ),\n                            r.constraints.forEach((r) =>\n                                o.Debugger.getInstance().output(\n                                    r,\n                                    t.context.applyConstraint(e, r)\n                                )\n                            );\n                    }\n                    static debugNamedSpeechRule(t, e) {\n                        const r = g\n                            .getInstance()\n                            .trie.collectRules()\n                            .filter((e) => e.name == t);\n                        for (let n, i = 0; (n = r[i]); i++)\n                            o.Debugger.getInstance().output(\n                                \"Rule\",\n                                t,\n                                \"DynamicCstr:\",\n                                n.dynamicCstr.toString(),\n                                \"number\",\n                                i\n                            ),\n                                g.debugSpeechRule(n, e);\n                    }\n                    evaluateNode(t) {\n                        (0, l.updateEvaluator)(t);\n                        const e = new Date().getTime();\n                        let r = [];\n                        try {\n                            r = this.evaluateNode_(t);\n                        } catch (t) {\n                            console.error(\n                                \"Something went wrong computing speech.\"\n                            ),\n                                o.Debugger.getInstance().output(t);\n                        }\n                        const n = new Date().getTime();\n                        return (\n                            o.Debugger.getInstance().output(\"Time:\", n - e), r\n                        );\n                    }\n                    toString() {\n                        return this.trie\n                            .collectRules()\n                            .map((t) => t.toString())\n                            .join(\"\\n\");\n                    }\n                    runInSetting(t, e) {\n                        const r = s.default.getInstance(),\n                            n = {};\n                        for (const e in t) (n[e] = r[e]), (r[e] = t[e]);\n                        r.setDynamicCstr();\n                        const o = e();\n                        for (const t in n) r[t] = n[t];\n                        return r.setDynamicCstr(), o;\n                    }\n                    addStore(t) {\n                        const e = v(t);\n                        \"abstract\" !== e.kind &&\n                            e\n                                .getSpeechRules()\n                                .forEach((t) => this.trie.addRule(t)),\n                            this.addEvaluator(e);\n                    }\n                    processGrammar(t, e, r) {\n                        const n = {};\n                        for (const o in r) {\n                            const i = r[o];\n                            n[o] =\n                                \"string\" == typeof i\n                                    ? t.constructString(e, i)\n                                    : i;\n                        }\n                        f.Grammar.getInstance().pushState(n);\n                    }\n                    addEvaluator(t) {\n                        const e = t.evaluateDefault.bind(t),\n                            r = this.evaluators_[t.locale];\n                        if (r) return void (r[t.modality] = e);\n                        const n = {};\n                        (n[t.modality] = e), (this.evaluators_[t.locale] = n);\n                    }\n                    getEvaluator(t, e) {\n                        const r =\n                            this.evaluators_[t] ||\n                            this.evaluators_[\n                                h.DynamicCstr.DEFAULT_VALUES[h.Axis.LOCALE]\n                            ];\n                        return (\n                            r[e] ||\n                            r[h.DynamicCstr.DEFAULT_VALUES[h.Axis.MODALITY]]\n                        );\n                    }\n                    enumerate(t) {\n                        return this.trie.enumerate(t);\n                    }\n                    evaluateNode_(t) {\n                        return t\n                            ? (this.updateConstraint_(), this.evaluateTree_(t))\n                            : [];\n                    }\n                    evaluateTree_(t) {\n                        const e = s.default.getInstance();\n                        let r;\n                        o.Debugger.getInstance().output(\n                            e.mode !== a.Mode.HTTP ? t.toString() : t\n                        ),\n                            f.Grammar.getInstance().setAttribute(t);\n                        const i = this.lookupRule(t, e.dynamicCstr);\n                        if (!i)\n                            return e.strict\n                                ? []\n                                : ((r = this.getEvaluator(\n                                      e.locale,\n                                      e.modality\n                                  )(t)),\n                                  t.attributes &&\n                                      this.addPersonality_(r, {}, !1, t),\n                                  r);\n                        o.Debugger.getInstance().generateOutput(() => [\n                            \"Apply Rule:\",\n                            i.name,\n                            i.dynamicCstr.toString(),\n                            (e.mode, a.Mode.HTTP, t).toString(),\n                        ]);\n                        const c = i.context,\n                            u = i.action.components;\n                        r = [];\n                        for (let e, o = 0; (e = u[o]); o++) {\n                            let o = [];\n                            const i = e.content || \"\",\n                                a = e.attributes || {};\n                            let u = !1;\n                            e.grammar && this.processGrammar(c, t, e.grammar);\n                            let p = null;\n                            if (a.engine) {\n                                p = s.default\n                                    .getInstance()\n                                    .dynamicCstr.getComponents();\n                                const t = f.Grammar.parseInput(a.engine);\n                                s.default.getInstance().setDynamicCstr(t);\n                            }\n                            switch (e.type) {\n                                case m.ActionType.NODE:\n                                    {\n                                        const e = c.applyQuery(t, i);\n                                        e && (o = this.evaluateTree_(e));\n                                    }\n                                    break;\n                                case m.ActionType.MULTI:\n                                    {\n                                        u = !0;\n                                        const e = c.applySelector(t, i);\n                                        e.length > 0 &&\n                                            (o = this.evaluateNodeList_(\n                                                c,\n                                                e,\n                                                a.sepFunc,\n                                                c.constructString(\n                                                    t,\n                                                    a.separator\n                                                ),\n                                                a.ctxtFunc,\n                                                c.constructString(t, a.context)\n                                            ));\n                                    }\n                                    break;\n                                case m.ActionType.TEXT:\n                                    {\n                                        const e = a.span,\n                                            r = {};\n                                        if (e) {\n                                            const n = (0, l.evalXPath)(e, t);\n                                            n.length &&\n                                                (r.extid =\n                                                    n[0].getAttribute(\"extid\"));\n                                        }\n                                        const s = c.constructString(t, i);\n                                        (s || \"\" === s) &&\n                                            (o = Array.isArray(s)\n                                                ? s.map(function (t) {\n                                                      return n.AuditoryDescription.create(\n                                                          {\n                                                              text: t.speech,\n                                                              attributes:\n                                                                  t.attributes,\n                                                          },\n                                                          { adjust: !0 }\n                                                      );\n                                                  })\n                                                : [\n                                                      n.AuditoryDescription.create(\n                                                          {\n                                                              text: s,\n                                                              attributes: r,\n                                                          },\n                                                          { adjust: !0 }\n                                                      ),\n                                                  ]);\n                                    }\n                                    break;\n                                case m.ActionType.PERSONALITY:\n                                default:\n                                    o = [\n                                        n.AuditoryDescription.create({\n                                            text: i,\n                                        }),\n                                    ];\n                            }\n                            o[0] &&\n                                !u &&\n                                (a.context &&\n                                    (o[0].context =\n                                        c.constructString(t, a.context) +\n                                        (o[0].context || \"\")),\n                                a.annotation &&\n                                    (o[0].annotation = a.annotation)),\n                                this.addLayout(o, a, u),\n                                e.grammar && f.Grammar.getInstance().popState(),\n                                (r = r.concat(\n                                    this.addPersonality_(o, a, u, t)\n                                )),\n                                p && s.default.getInstance().setDynamicCstr(p);\n                        }\n                        return r;\n                    }\n                    evaluateNodeList_(t, e, r, o, i, s) {\n                        if (!e.length) return [];\n                        const a = o || \"\",\n                            l = s || \"\",\n                            c = t.contextFunctions.lookup(i),\n                            u = c\n                                ? c(e, l)\n                                : function () {\n                                      return l;\n                                  },\n                            p = t.contextFunctions.lookup(r),\n                            h = p\n                                ? p(e, a)\n                                : function () {\n                                      return [\n                                          n.AuditoryDescription.create(\n                                              { text: a },\n                                              { translate: !0 }\n                                          ),\n                                      ];\n                                  };\n                        let f = [];\n                        for (let t, r = 0; (t = e[r]); r++) {\n                            const n = this.evaluateTree_(t);\n                            if (\n                                n.length > 0 &&\n                                ((n[0].context = u() + (n[0].context || \"\")),\n                                (f = f.concat(n)),\n                                r < e.length - 1)\n                            ) {\n                                const t = h();\n                                f = f.concat(t);\n                            }\n                        }\n                        return f;\n                    }\n                    addLayout(t, e, r) {\n                        const o = e.layout;\n                        o &&\n                            (o.match(/^begin/)\n                                ? t.unshift(\n                                      new n.AuditoryDescription({\n                                          text: \"\",\n                                          layout: o,\n                                      })\n                                  )\n                                : o.match(/^end/)\n                                  ? t.push(\n                                        new n.AuditoryDescription({\n                                            text: \"\",\n                                            layout: o,\n                                        })\n                                    )\n                                  : (t.unshift(\n                                        new n.AuditoryDescription({\n                                            text: \"\",\n                                            layout: `begin${o}`,\n                                        })\n                                    ),\n                                    t.push(\n                                        new n.AuditoryDescription({\n                                            text: \"\",\n                                            layout: `end${o}`,\n                                        })\n                                    )));\n                    }\n                    addPersonality_(t, e, r, o) {\n                        const i = {};\n                        let s = null;\n                        for (const t of a.personalityPropList) {\n                            const r = e[t];\n                            if (void 0 === r) continue;\n                            const n = parseFloat(r),\n                                o = isNaN(n)\n                                    ? '\"' === r.charAt(0)\n                                        ? r.slice(1, -1)\n                                        : r\n                                    : n;\n                            t === a.personalityProps.PAUSE\n                                ? (s = o)\n                                : (i[t] = o);\n                        }\n                        for (let e, r = 0; (e = t[r]); r++)\n                            this.addRelativePersonality_(e, i),\n                                this.addExternalAttributes_(e, o);\n                        if (\n                            (r &&\n                                t.length &&\n                                delete t[t.length - 1].personality[\n                                    a.personalityProps.JOIN\n                                ],\n                            s && t.length)\n                        ) {\n                            const e = t[t.length - 1];\n                            e.text || Object.keys(e.personality).length\n                                ? t.push(\n                                      n.AuditoryDescription.create({\n                                          text: \"\",\n                                          personality: { pause: s },\n                                      })\n                                  )\n                                : (e.personality[a.personalityProps.PAUSE] = s);\n                        }\n                        return t;\n                    }\n                    addExternalAttributes_(t, e) {\n                        if (e.hasAttributes()) {\n                            const r = e.attributes;\n                            for (let e = r.length - 1; e >= 0; e--) {\n                                const n = r[e].name;\n                                !t.attributes[n] &&\n                                    n.match(/^ext/) &&\n                                    (t.attributes[n] = r[e].value);\n                            }\n                        }\n                    }\n                    addRelativePersonality_(t, e) {\n                        if (!t.personality) return (t.personality = e), t;\n                        const r = t.personality;\n                        for (const t in e)\n                            r[t] &&\n                            \"number\" == typeof r[t] &&\n                            \"number\" == typeof e[t]\n                                ? (r[t] = r[t] + e[t])\n                                : r[t] || (r[t] = e[t]);\n                        return t;\n                    }\n                    updateConstraint_() {\n                        const t = s.default.getInstance().dynamicCstr,\n                            e = s.default.getInstance().strict,\n                            r = this.trie,\n                            n = {};\n                        let o = t.getValue(h.Axis.LOCALE),\n                            i = t.getValue(h.Axis.MODALITY),\n                            a = t.getValue(h.Axis.DOMAIN);\n                        r.hasSubtrie([o, i, a]) ||\n                            ((a = h.DynamicCstr.DEFAULT_VALUES[h.Axis.DOMAIN]),\n                            r.hasSubtrie([o, i, a]) ||\n                                ((i =\n                                    h.DynamicCstr.DEFAULT_VALUES[\n                                        h.Axis.MODALITY\n                                    ]),\n                                r.hasSubtrie([o, i, a]) ||\n                                    (o =\n                                        h.DynamicCstr.DEFAULT_VALUES[\n                                            h.Axis.LOCALE\n                                        ]))),\n                            (n[h.Axis.LOCALE] = [o]),\n                            (n[h.Axis.MODALITY] = [\n                                \"summary\" !== i\n                                    ? i\n                                    : h.DynamicCstr.DEFAULT_VALUES[\n                                          h.Axis.MODALITY\n                                      ],\n                            ]),\n                            (n[h.Axis.DOMAIN] = [\n                                \"speech\" !== i\n                                    ? h.DynamicCstr.DEFAULT_VALUES[\n                                          h.Axis.DOMAIN\n                                      ]\n                                    : a,\n                            ]);\n                        const l = t.getOrder();\n                        for (let r, o = 0; (r = l[o]); o++)\n                            if (!n[r]) {\n                                const o = t.getValue(r),\n                                    i = this.makeSet_(o, t.preference),\n                                    s = h.DynamicCstr.DEFAULT_VALUES[r];\n                                e || o === s || i.push(s), (n[r] = i);\n                            }\n                        t.updateProperties(n);\n                    }\n                    makeSet_(t, e) {\n                        return e && Object.keys(e).length ? t.split(\":\") : [t];\n                    }\n                    lookupRule(t, e) {\n                        if (\n                            !t ||\n                            (t.nodeType !== i.NodeType.ELEMENT_NODE &&\n                                t.nodeType !== i.NodeType.TEXT_NODE)\n                        )\n                            return null;\n                        const r = this.lookupRules(t, e);\n                        return r.length > 0\n                            ? this.pickMostConstraint_(e, r)\n                            : null;\n                    }\n                    lookupRules(t, e) {\n                        return this.trie.lookupRules(t, e.allProperties());\n                    }\n                    pickMostConstraint_(t, e) {\n                        const r = s.default.getInstance().comparator;\n                        return (\n                            e.sort(function (t, e) {\n                                return (\n                                    r.compare(t.dynamicCstr, e.dynamicCstr) ||\n                                    e.precondition.priority -\n                                        t.precondition.priority ||\n                                    e.precondition.constraints.length -\n                                        t.precondition.constraints.length ||\n                                    e.precondition.rank - t.precondition.rank\n                                );\n                            }),\n                            o.Debugger.getInstance().generateOutput(\n                                (() =>\n                                    e.map(\n                                        (t) =>\n                                            t.name +\n                                            \"(\" +\n                                            t.dynamicCstr.toString() +\n                                            \")\"\n                                    )).bind(this)\n                            ),\n                            e[0]\n                        );\n                    }\n                }\n                e.SpeechRuleEngine = g;\n                const b = new Map();\n                function v(t) {\n                    const e = `${t.locale}.${t.modality}.${t.domain}`;\n                    if (\"actions\" === t.kind) {\n                        const r = b.get(e);\n                        return r.parse(t), r;\n                    }\n                    u.init(),\n                        t &&\n                            !t.functions &&\n                            (t.functions = c.getStore(\n                                t.locale,\n                                t.modality,\n                                t.domain\n                            ));\n                    const r =\n                        \"braille\" === t.modality\n                            ? new p.BrailleStore()\n                            : new d.MathStore();\n                    return (\n                        b.set(e, r),\n                        t.inherits &&\n                            (r.inherits = b.get(\n                                `${t.inherits}.${t.modality}.${t.domain}`\n                            )),\n                        r.parse(t),\n                        r.initialize(),\n                        r\n                    );\n                }\n                (e.storeFactory = v),\n                    (s.default.nodeEvaluator = g\n                        .getInstance()\n                        .evaluateNode.bind(g.getInstance()));\n            },\n            5662: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.CustomGenerators =\n                        e.ContextFunctions =\n                        e.CustomStrings =\n                        e.CustomQueries =\n                            void 0);\n                class r {\n                    constructor(t, e) {\n                        (this.prefix = t), (this.store = e);\n                    }\n                    add(t, e) {\n                        this.checkCustomFunctionSyntax_(t) &&\n                            (this.store[t] = e);\n                    }\n                    addStore(t) {\n                        const e = Object.keys(t.store);\n                        for (let r, n = 0; (r = e[n]); n++)\n                            this.add(r, t.store[r]);\n                    }\n                    lookup(t) {\n                        return this.store[t];\n                    }\n                    checkCustomFunctionSyntax_(t) {\n                        const e = new RegExp(\"^\" + this.prefix);\n                        return (\n                            !!t.match(e) ||\n                            (console.error(\n                                \"FunctionError: Invalid function name. Expected prefix \" +\n                                    this.prefix\n                            ),\n                            !1)\n                        );\n                    }\n                }\n                e.CustomQueries = class extends r {\n                    constructor() {\n                        super(\"CQF\", {});\n                    }\n                };\n                e.CustomStrings = class extends r {\n                    constructor() {\n                        super(\"CSF\", {});\n                    }\n                };\n                e.ContextFunctions = class extends r {\n                    constructor() {\n                        super(\"CTF\", {});\n                    }\n                };\n                e.CustomGenerators = class extends r {\n                    constructor() {\n                        super(\"CGF\", {});\n                    }\n                };\n            },\n            365: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.contentIterator =\n                        e.pauseSeparator =\n                        e.nodeCounter =\n                            void 0);\n                const n = r(7052),\n                    o = r(5274),\n                    i = r(5897);\n                (e.nodeCounter = function (t, e) {\n                    const r = t.length;\n                    let n = 0,\n                        o = e;\n                    return (\n                        e || (o = \"\"),\n                        function () {\n                            return n < r && (n += 1), o + \" \" + n;\n                        }\n                    );\n                }),\n                    (e.pauseSeparator = function (t, e) {\n                        const r = parseFloat(e),\n                            o = isNaN(r) ? e : r;\n                        return function () {\n                            return [\n                                n.AuditoryDescription.create({\n                                    text: \"\",\n                                    personality: { pause: o },\n                                }),\n                            ];\n                        };\n                    }),\n                    (e.contentIterator = function (t, e) {\n                        let r;\n                        return (\n                            (r =\n                                t.length > 0\n                                    ? o.evalXPath(\"../../content/*\", t[0])\n                                    : []),\n                            function () {\n                                const t = r.shift(),\n                                    o = e\n                                        ? [\n                                              n.AuditoryDescription.create(\n                                                  { text: e },\n                                                  { translate: !0 }\n                                              ),\n                                          ]\n                                        : [];\n                                if (!t) return o;\n                                const s = i.default.evaluateNode(t);\n                                return o.concat(s);\n                            }\n                        );\n                    });\n            },\n            1414: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.getTreeFromString = e.getTree = e.xmlTree = void 0);\n                const n = r(5740),\n                    o = r(7075);\n                function i(t) {\n                    return new o.SemanticTree(t);\n                }\n                (e.xmlTree = function (t) {\n                    return i(t).xml();\n                }),\n                    (e.getTree = i),\n                    (e.getTreeFromString = function (t) {\n                        return i(n.parseInput(t));\n                    });\n            },\n            7630: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.annotate =\n                        e.activate =\n                        e.register =\n                        e.visitors =\n                        e.annotators =\n                            void 0);\n                const n = r(9265);\n                (e.annotators = new Map()),\n                    (e.visitors = new Map()),\n                    (e.register = function (t) {\n                        const r = t.domain + \":\" + t.name;\n                        t instanceof n.SemanticAnnotator\n                            ? e.annotators.set(r, t)\n                            : e.visitors.set(r, t);\n                    }),\n                    (e.activate = function (t, r) {\n                        const n = t + \":\" + r,\n                            o = e.annotators.get(n) || e.visitors.get(n);\n                        o && (o.active = !0);\n                    }),\n                    (e.annotate = function (t) {\n                        for (const r of e.annotators.values())\n                            r.active && r.annotate(t);\n                        for (const r of e.visitors.values())\n                            r.active && r.visit(t, Object.assign({}, r.def));\n                    });\n            },\n            9265: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticVisitor = e.SemanticAnnotator = void 0);\n                e.SemanticAnnotator = class {\n                    constructor(t, e, r) {\n                        (this.domain = t),\n                            (this.name = e),\n                            (this.func = r),\n                            (this.active = !1);\n                    }\n                    annotate(t) {\n                        t.childNodes.forEach(this.annotate.bind(this)),\n                            t.addAnnotation(this.domain, this.func(t));\n                    }\n                };\n                e.SemanticVisitor = class {\n                    constructor(t, e, r, n = {}) {\n                        (this.domain = t),\n                            (this.name = e),\n                            (this.func = r),\n                            (this.def = n),\n                            (this.active = !1);\n                    }\n                    visit(t, e) {\n                        let r = this.func(t, e);\n                        t.addAnnotation(this.domain, r[0]);\n                        for (let e, n = 0; (e = t.childNodes[n]); n++)\n                            r = this.visit(e, r[1]);\n                        return r;\n                    }\n                };\n            },\n            3588: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.lookupSecondary =\n                        e.isEmbellishedType =\n                        e.isMatchingFence =\n                        e.functionApplication =\n                        e.invisibleComma =\n                        e.invisiblePlus =\n                        e.invisibleTimes =\n                        e.lookupMeaning =\n                        e.lookupRole =\n                        e.lookupType =\n                        e.equal =\n                        e.allLettersRegExp =\n                            void 0);\n                const r = String.fromCodePoint(8291),\n                    n = [\"\\uff0c\", \"\\ufe50\", \",\", r],\n                    o = [\n                        \"\\xaf\",\n                        \"\\u2012\",\n                        \"\\u2013\",\n                        \"\\u2014\",\n                        \"\\u2015\",\n                        \"\\ufe58\",\n                        \"-\",\n                        \"\\u207b\",\n                        \"\\u208b\",\n                        \"\\u2212\",\n                        \"\\u2796\",\n                        \"\\ufe63\",\n                        \"\\uff0d\",\n                        \"\\u2010\",\n                        \"\\u2011\",\n                        \"\\u203e\",\n                        \"_\",\n                    ],\n                    i = [\n                        \"~\",\n                        \"\\u0303\",\n                        \"\\u223c\",\n                        \"\\u02dc\",\n                        \"\\u223d\",\n                        \"\\u02f7\",\n                        \"\\u0334\",\n                        \"\\u0330\",\n                    ],\n                    s = {\n                        \"(\": \")\",\n                        \"[\": \"]\",\n                        \"{\": \"}\",\n                        \"\\u2045\": \"\\u2046\",\n                        \"\\u2329\": \"\\u232a\",\n                        \"\\u2768\": \"\\u2769\",\n                        \"\\u276a\": \"\\u276b\",\n                        \"\\u276c\": \"\\u276d\",\n                        \"\\u276e\": \"\\u276f\",\n                        \"\\u2770\": \"\\u2771\",\n                        \"\\u2772\": \"\\u2773\",\n                        \"\\u2774\": \"\\u2775\",\n                        \"\\u27c5\": \"\\u27c6\",\n                        \"\\u27e6\": \"\\u27e7\",\n                        \"\\u27e8\": \"\\u27e9\",\n                        \"\\u27ea\": \"\\u27eb\",\n                        \"\\u27ec\": \"\\u27ed\",\n                        \"\\u27ee\": \"\\u27ef\",\n                        \"\\u2983\": \"\\u2984\",\n                        \"\\u2985\": \"\\u2986\",\n                        \"\\u2987\": \"\\u2988\",\n                        \"\\u2989\": \"\\u298a\",\n                        \"\\u298b\": \"\\u298c\",\n                        \"\\u298d\": \"\\u298e\",\n                        \"\\u298f\": \"\\u2990\",\n                        \"\\u2991\": \"\\u2992\",\n                        \"\\u2993\": \"\\u2994\",\n                        \"\\u2995\": \"\\u2996\",\n                        \"\\u2997\": \"\\u2998\",\n                        \"\\u29d8\": \"\\u29d9\",\n                        \"\\u29da\": \"\\u29db\",\n                        \"\\u29fc\": \"\\u29fd\",\n                        \"\\u2e22\": \"\\u2e23\",\n                        \"\\u2e24\": \"\\u2e25\",\n                        \"\\u2e26\": \"\\u2e27\",\n                        \"\\u2e28\": \"\\u2e29\",\n                        \"\\u3008\": \"\\u3009\",\n                        \"\\u300a\": \"\\u300b\",\n                        \"\\u300c\": \"\\u300d\",\n                        \"\\u300e\": \"\\u300f\",\n                        \"\\u3010\": \"\\u3011\",\n                        \"\\u3014\": \"\\u3015\",\n                        \"\\u3016\": \"\\u3017\",\n                        \"\\u3018\": \"\\u3019\",\n                        \"\\u301a\": \"\\u301b\",\n                        \"\\u301d\": \"\\u301e\",\n                        \"\\ufd3e\": \"\\ufd3f\",\n                        \"\\ufe17\": \"\\ufe18\",\n                        \"\\ufe59\": \"\\ufe5a\",\n                        \"\\ufe5b\": \"\\ufe5c\",\n                        \"\\ufe5d\": \"\\ufe5e\",\n                        \"\\uff08\": \"\\uff09\",\n                        \"\\uff3b\": \"\\uff3d\",\n                        \"\\uff5b\": \"\\uff5d\",\n                        \"\\uff5f\": \"\\uff60\",\n                        \"\\uff62\": \"\\uff63\",\n                        \"\\u2308\": \"\\u2309\",\n                        \"\\u230a\": \"\\u230b\",\n                        \"\\u230c\": \"\\u230d\",\n                        \"\\u230e\": \"\\u230f\",\n                        \"\\u231c\": \"\\u231d\",\n                        \"\\u231e\": \"\\u231f\",\n                        \"\\u239b\": \"\\u239e\",\n                        \"\\u239c\": \"\\u239f\",\n                        \"\\u239d\": \"\\u23a0\",\n                        \"\\u23a1\": \"\\u23a4\",\n                        \"\\u23a2\": \"\\u23a5\",\n                        \"\\u23a3\": \"\\u23a6\",\n                        \"\\u23a7\": \"\\u23ab\",\n                        \"\\u23a8\": \"\\u23ac\",\n                        \"\\u23a9\": \"\\u23ad\",\n                        \"\\u23b0\": \"\\u23b1\",\n                        \"\\u23b8\": \"\\u23b9\",\n                    },\n                    a = {\n                        \"\\u23b4\": \"\\u23b5\",\n                        \"\\u23dc\": \"\\u23dd\",\n                        \"\\u23de\": \"\\u23df\",\n                        \"\\u23e0\": \"\\u23e1\",\n                        \"\\ufe35\": \"\\ufe36\",\n                        \"\\ufe37\": \"\\ufe38\",\n                        \"\\ufe39\": \"\\ufe3a\",\n                        \"\\ufe3b\": \"\\ufe3c\",\n                        \"\\ufe3d\": \"\\ufe3e\",\n                        \"\\ufe3f\": \"\\ufe40\",\n                        \"\\ufe41\": \"\\ufe42\",\n                        \"\\ufe43\": \"\\ufe44\",\n                        \"\\ufe47\": \"\\ufe48\",\n                    },\n                    l = Object.keys(s),\n                    c = Object.values(s);\n                c.push(\"\\u301f\");\n                const u = Object.keys(a),\n                    p = Object.values(a),\n                    h = [\n                        \"|\",\n                        \"\\xa6\",\n                        \"\\u2223\",\n                        \"\\u23d0\",\n                        \"\\u23b8\",\n                        \"\\u23b9\",\n                        \"\\u2758\",\n                        \"\\uff5c\",\n                        \"\\uffe4\",\n                        \"\\ufe31\",\n                        \"\\ufe32\",\n                    ],\n                    f = [\"\\u2016\", \"\\u2225\", \"\\u2980\", \"\\u2af4\"],\n                    d = [\n                        \"A\",\n                        \"B\",\n                        \"C\",\n                        \"D\",\n                        \"E\",\n                        \"F\",\n                        \"G\",\n                        \"H\",\n                        \"I\",\n                        \"J\",\n                        \"K\",\n                        \"L\",\n                        \"M\",\n                        \"N\",\n                        \"O\",\n                        \"P\",\n                        \"Q\",\n                        \"R\",\n                        \"S\",\n                        \"T\",\n                        \"U\",\n                        \"V\",\n                        \"W\",\n                        \"X\",\n                        \"Y\",\n                        \"Z\",\n                    ],\n                    m = [\n                        \"a\",\n                        \"b\",\n                        \"c\",\n                        \"d\",\n                        \"e\",\n                        \"f\",\n                        \"g\",\n                        \"h\",\n                        \"i\",\n                        \"j\",\n                        \"k\",\n                        \"l\",\n                        \"m\",\n                        \"n\",\n                        \"o\",\n                        \"p\",\n                        \"q\",\n                        \"r\",\n                        \"s\",\n                        \"t\",\n                        \"u\",\n                        \"v\",\n                        \"w\",\n                        \"x\",\n                        \"y\",\n                        \"z\",\n                        \"\\u0131\",\n                        \"\\u0237\",\n                    ],\n                    y = [\n                        \"\\uff21\",\n                        \"\\uff22\",\n                        \"\\uff23\",\n                        \"\\uff24\",\n                        \"\\uff25\",\n                        \"\\uff26\",\n                        \"\\uff27\",\n                        \"\\uff28\",\n                        \"\\uff29\",\n                        \"\\uff2a\",\n                        \"\\uff2b\",\n                        \"\\uff2c\",\n                        \"\\uff2d\",\n                        \"\\uff2e\",\n                        \"\\uff2f\",\n                        \"\\uff30\",\n                        \"\\uff31\",\n                        \"\\uff32\",\n                        \"\\uff33\",\n                        \"\\uff34\",\n                        \"\\uff35\",\n                        \"\\uff36\",\n                        \"\\uff37\",\n                        \"\\uff38\",\n                        \"\\uff39\",\n                        \"\\uff3a\",\n                    ],\n                    g = [\n                        \"\\uff41\",\n                        \"\\uff42\",\n                        \"\\uff43\",\n                        \"\\uff44\",\n                        \"\\uff45\",\n                        \"\\uff46\",\n                        \"\\uff47\",\n                        \"\\uff48\",\n                        \"\\uff49\",\n                        \"\\uff4a\",\n                        \"\\uff4b\",\n                        \"\\uff4c\",\n                        \"\\uff4d\",\n                        \"\\uff4e\",\n                        \"\\uff4f\",\n                        \"\\uff50\",\n                        \"\\uff51\",\n                        \"\\uff52\",\n                        \"\\uff53\",\n                        \"\\uff54\",\n                        \"\\uff55\",\n                        \"\\uff56\",\n                        \"\\uff57\",\n                        \"\\uff58\",\n                        \"\\uff59\",\n                        \"\\uff5a\",\n                    ],\n                    b = [\n                        \"\\ud835\\udc00\",\n                        \"\\ud835\\udc01\",\n                        \"\\ud835\\udc02\",\n                        \"\\ud835\\udc03\",\n                        \"\\ud835\\udc04\",\n                        \"\\ud835\\udc05\",\n                        \"\\ud835\\udc06\",\n                        \"\\ud835\\udc07\",\n                        \"\\ud835\\udc08\",\n                        \"\\ud835\\udc09\",\n                        \"\\ud835\\udc0a\",\n                        \"\\ud835\\udc0b\",\n                        \"\\ud835\\udc0c\",\n                        \"\\ud835\\udc0d\",\n                        \"\\ud835\\udc0e\",\n                        \"\\ud835\\udc0f\",\n                        \"\\ud835\\udc10\",\n                        \"\\ud835\\udc11\",\n                        \"\\ud835\\udc12\",\n                        \"\\ud835\\udc13\",\n                        \"\\ud835\\udc14\",\n                        \"\\ud835\\udc15\",\n                        \"\\ud835\\udc16\",\n                        \"\\ud835\\udc17\",\n                        \"\\ud835\\udc18\",\n                        \"\\ud835\\udc19\",\n                    ],\n                    v = [\n                        \"\\ud835\\udc1a\",\n                        \"\\ud835\\udc1b\",\n                        \"\\ud835\\udc1c\",\n                        \"\\ud835\\udc1d\",\n                        \"\\ud835\\udc1e\",\n                        \"\\ud835\\udc1f\",\n                        \"\\ud835\\udc20\",\n                        \"\\ud835\\udc21\",\n                        \"\\ud835\\udc22\",\n                        \"\\ud835\\udc23\",\n                        \"\\ud835\\udc24\",\n                        \"\\ud835\\udc25\",\n                        \"\\ud835\\udc26\",\n                        \"\\ud835\\udc27\",\n                        \"\\ud835\\udc28\",\n                        \"\\ud835\\udc29\",\n                        \"\\ud835\\udc2a\",\n                        \"\\ud835\\udc2b\",\n                        \"\\ud835\\udc2c\",\n                        \"\\ud835\\udc2d\",\n                        \"\\ud835\\udc2e\",\n                        \"\\ud835\\udc2f\",\n                        \"\\ud835\\udc30\",\n                        \"\\ud835\\udc31\",\n                        \"\\ud835\\udc32\",\n                        \"\\ud835\\udc33\",\n                    ],\n                    _ = [\n                        \"\\ud835\\udc34\",\n                        \"\\ud835\\udc35\",\n                        \"\\ud835\\udc36\",\n                        \"\\ud835\\udc37\",\n                        \"\\ud835\\udc38\",\n                        \"\\ud835\\udc39\",\n                        \"\\ud835\\udc3a\",\n                        \"\\ud835\\udc3b\",\n                        \"\\ud835\\udc3c\",\n                        \"\\ud835\\udc3d\",\n                        \"\\ud835\\udc3e\",\n                        \"\\ud835\\udc3f\",\n                        \"\\ud835\\udc40\",\n                        \"\\ud835\\udc41\",\n                        \"\\ud835\\udc42\",\n                        \"\\ud835\\udc43\",\n                        \"\\ud835\\udc44\",\n                        \"\\ud835\\udc45\",\n                        \"\\ud835\\udc46\",\n                        \"\\ud835\\udc47\",\n                        \"\\ud835\\udc48\",\n                        \"\\ud835\\udc49\",\n                        \"\\ud835\\udc4a\",\n                        \"\\ud835\\udc4b\",\n                        \"\\ud835\\udc4c\",\n                        \"\\ud835\\udc4d\",\n                    ],\n                    S = [\n                        \"\\ud835\\udc4e\",\n                        \"\\ud835\\udc4f\",\n                        \"\\ud835\\udc50\",\n                        \"\\ud835\\udc51\",\n                        \"\\ud835\\udc52\",\n                        \"\\ud835\\udc53\",\n                        \"\\ud835\\udc54\",\n                        \"\\u210e\",\n                        \"\\ud835\\udc56\",\n                        \"\\ud835\\udc57\",\n                        \"\\ud835\\udc58\",\n                        \"\\ud835\\udc59\",\n                        \"\\ud835\\udc5a\",\n                        \"\\ud835\\udc5b\",\n                        \"\\ud835\\udc5c\",\n                        \"\\ud835\\udc5d\",\n                        \"\\ud835\\udc5e\",\n                        \"\\ud835\\udc5f\",\n                        \"\\ud835\\udc60\",\n                        \"\\ud835\\udc61\",\n                        \"\\ud835\\udc62\",\n                        \"\\ud835\\udc63\",\n                        \"\\ud835\\udc64\",\n                        \"\\ud835\\udc65\",\n                        \"\\ud835\\udc66\",\n                        \"\\ud835\\udc67\",\n                        \"\\ud835\\udea4\",\n                        \"\\ud835\\udea5\",\n                    ],\n                    M = [\n                        \"\\ud835\\udc68\",\n                        \"\\ud835\\udc69\",\n                        \"\\ud835\\udc6a\",\n                        \"\\ud835\\udc6b\",\n                        \"\\ud835\\udc6c\",\n                        \"\\ud835\\udc6d\",\n                        \"\\ud835\\udc6e\",\n                        \"\\ud835\\udc6f\",\n                        \"\\ud835\\udc70\",\n                        \"\\ud835\\udc71\",\n                        \"\\ud835\\udc72\",\n                        \"\\ud835\\udc73\",\n                        \"\\ud835\\udc74\",\n                        \"\\ud835\\udc75\",\n                        \"\\ud835\\udc76\",\n                        \"\\ud835\\udc77\",\n                        \"\\ud835\\udc78\",\n                        \"\\ud835\\udc79\",\n                        \"\\ud835\\udc7a\",\n                        \"\\ud835\\udc7b\",\n                        \"\\ud835\\udc7c\",\n                        \"\\ud835\\udc7d\",\n                        \"\\ud835\\udc7e\",\n                        \"\\ud835\\udc7f\",\n                        \"\\ud835\\udc80\",\n                        \"\\ud835\\udc81\",\n                    ],\n                    O = [\n                        \"\\ud835\\udc82\",\n                        \"\\ud835\\udc83\",\n                        \"\\ud835\\udc84\",\n                        \"\\ud835\\udc85\",\n                        \"\\ud835\\udc86\",\n                        \"\\ud835\\udc87\",\n                        \"\\ud835\\udc88\",\n                        \"\\ud835\\udc89\",\n                        \"\\ud835\\udc8a\",\n                        \"\\ud835\\udc8b\",\n                        \"\\ud835\\udc8c\",\n                        \"\\ud835\\udc8d\",\n                        \"\\ud835\\udc8e\",\n                        \"\\ud835\\udc8f\",\n                        \"\\ud835\\udc90\",\n                        \"\\ud835\\udc91\",\n                        \"\\ud835\\udc92\",\n                        \"\\ud835\\udc93\",\n                        \"\\ud835\\udc94\",\n                        \"\\ud835\\udc95\",\n                        \"\\ud835\\udc96\",\n                        \"\\ud835\\udc97\",\n                        \"\\ud835\\udc98\",\n                        \"\\ud835\\udc99\",\n                        \"\\ud835\\udc9a\",\n                        \"\\ud835\\udc9b\",\n                    ],\n                    x = [\n                        \"\\ud835\\udc9c\",\n                        \"\\u212c\",\n                        \"\\ud835\\udc9e\",\n                        \"\\ud835\\udc9f\",\n                        \"\\u2130\",\n                        \"\\u2131\",\n                        \"\\ud835\\udca2\",\n                        \"\\u210b\",\n                        \"\\u2110\",\n                        \"\\ud835\\udca5\",\n                        \"\\ud835\\udca6\",\n                        \"\\u2112\",\n                        \"\\u2133\",\n                        \"\\ud835\\udca9\",\n                        \"\\ud835\\udcaa\",\n                        \"\\ud835\\udcab\",\n                        \"\\ud835\\udcac\",\n                        \"\\u211b\",\n                        \"\\ud835\\udcae\",\n                        \"\\ud835\\udcaf\",\n                        \"\\ud835\\udcb0\",\n                        \"\\ud835\\udcb1\",\n                        \"\\ud835\\udcb2\",\n                        \"\\ud835\\udcb3\",\n                        \"\\ud835\\udcb4\",\n                        \"\\ud835\\udcb5\",\n                        \"\\u2118\",\n                    ],\n                    E = [\n                        \"\\ud835\\udcb6\",\n                        \"\\ud835\\udcb7\",\n                        \"\\ud835\\udcb8\",\n                        \"\\ud835\\udcb9\",\n                        \"\\u212f\",\n                        \"\\ud835\\udcbb\",\n                        \"\\u210a\",\n                        \"\\ud835\\udcbd\",\n                        \"\\ud835\\udcbe\",\n                        \"\\ud835\\udcbf\",\n                        \"\\ud835\\udcc0\",\n                        \"\\ud835\\udcc1\",\n                        \"\\ud835\\udcc2\",\n                        \"\\ud835\\udcc3\",\n                        \"\\u2134\",\n                        \"\\ud835\\udcc5\",\n                        \"\\ud835\\udcc6\",\n                        \"\\ud835\\udcc7\",\n                        \"\\ud835\\udcc8\",\n                        \"\\ud835\\udcc9\",\n                        \"\\ud835\\udcca\",\n                        \"\\ud835\\udccb\",\n                        \"\\ud835\\udccc\",\n                        \"\\ud835\\udccd\",\n                        \"\\ud835\\udcce\",\n                        \"\\ud835\\udccf\",\n                        \"\\u2113\",\n                    ],\n                    A = [\n                        \"\\ud835\\udcd0\",\n                        \"\\ud835\\udcd1\",\n                        \"\\ud835\\udcd2\",\n                        \"\\ud835\\udcd3\",\n                        \"\\ud835\\udcd4\",\n                        \"\\ud835\\udcd5\",\n                        \"\\ud835\\udcd6\",\n                        \"\\ud835\\udcd7\",\n                        \"\\ud835\\udcd8\",\n                        \"\\ud835\\udcd9\",\n                        \"\\ud835\\udcda\",\n                        \"\\ud835\\udcdb\",\n                        \"\\ud835\\udcdc\",\n                        \"\\ud835\\udcdd\",\n                        \"\\ud835\\udcde\",\n                        \"\\ud835\\udcdf\",\n                        \"\\ud835\\udce0\",\n                        \"\\ud835\\udce1\",\n                        \"\\ud835\\udce2\",\n                        \"\\ud835\\udce3\",\n                        \"\\ud835\\udce4\",\n                        \"\\ud835\\udce5\",\n                        \"\\ud835\\udce6\",\n                        \"\\ud835\\udce7\",\n                        \"\\ud835\\udce8\",\n                        \"\\ud835\\udce9\",\n                    ],\n                    C = [\n                        \"\\ud835\\udcea\",\n                        \"\\ud835\\udceb\",\n                        \"\\ud835\\udcec\",\n                        \"\\ud835\\udced\",\n                        \"\\ud835\\udcee\",\n                        \"\\ud835\\udcef\",\n                        \"\\ud835\\udcf0\",\n                        \"\\ud835\\udcf1\",\n                        \"\\ud835\\udcf2\",\n                        \"\\ud835\\udcf3\",\n                        \"\\ud835\\udcf4\",\n                        \"\\ud835\\udcf5\",\n                        \"\\ud835\\udcf6\",\n                        \"\\ud835\\udcf7\",\n                        \"\\ud835\\udcf8\",\n                        \"\\ud835\\udcf9\",\n                        \"\\ud835\\udcfa\",\n                        \"\\ud835\\udcfb\",\n                        \"\\ud835\\udcfc\",\n                        \"\\ud835\\udcfd\",\n                        \"\\ud835\\udcfe\",\n                        \"\\ud835\\udcff\",\n                        \"\\ud835\\udd00\",\n                        \"\\ud835\\udd01\",\n                        \"\\ud835\\udd02\",\n                        \"\\ud835\\udd03\",\n                    ],\n                    T = [\n                        \"\\ud835\\udd04\",\n                        \"\\ud835\\udd05\",\n                        \"\\u212d\",\n                        \"\\ud835\\udd07\",\n                        \"\\ud835\\udd08\",\n                        \"\\ud835\\udd09\",\n                        \"\\ud835\\udd0a\",\n                        \"\\u210c\",\n                        \"\\u2111\",\n                        \"\\ud835\\udd0d\",\n                        \"\\ud835\\udd0e\",\n                        \"\\ud835\\udd0f\",\n                        \"\\ud835\\udd10\",\n                        \"\\ud835\\udd11\",\n                        \"\\ud835\\udd12\",\n                        \"\\ud835\\udd13\",\n                        \"\\ud835\\udd14\",\n                        \"\\u211c\",\n                        \"\\ud835\\udd16\",\n                        \"\\ud835\\udd17\",\n                        \"\\ud835\\udd18\",\n                        \"\\ud835\\udd19\",\n                        \"\\ud835\\udd1a\",\n                        \"\\ud835\\udd1b\",\n                        \"\\ud835\\udd1c\",\n                        \"\\u2128\",\n                    ],\n                    N = [\n                        \"\\ud835\\udd1e\",\n                        \"\\ud835\\udd1f\",\n                        \"\\ud835\\udd20\",\n                        \"\\ud835\\udd21\",\n                        \"\\ud835\\udd22\",\n                        \"\\ud835\\udd23\",\n                        \"\\ud835\\udd24\",\n                        \"\\ud835\\udd25\",\n                        \"\\ud835\\udd26\",\n                        \"\\ud835\\udd27\",\n                        \"\\ud835\\udd28\",\n                        \"\\ud835\\udd29\",\n                        \"\\ud835\\udd2a\",\n                        \"\\ud835\\udd2b\",\n                        \"\\ud835\\udd2c\",\n                        \"\\ud835\\udd2d\",\n                        \"\\ud835\\udd2e\",\n                        \"\\ud835\\udd2f\",\n                        \"\\ud835\\udd30\",\n                        \"\\ud835\\udd31\",\n                        \"\\ud835\\udd32\",\n                        \"\\ud835\\udd33\",\n                        \"\\ud835\\udd34\",\n                        \"\\ud835\\udd35\",\n                        \"\\ud835\\udd36\",\n                        \"\\ud835\\udd37\",\n                    ],\n                    w = [\n                        \"\\ud835\\udd38\",\n                        \"\\ud835\\udd39\",\n                        \"\\u2102\",\n                        \"\\ud835\\udd3b\",\n                        \"\\ud835\\udd3c\",\n                        \"\\ud835\\udd3d\",\n                        \"\\ud835\\udd3e\",\n                        \"\\u210d\",\n                        \"\\ud835\\udd40\",\n                        \"\\ud835\\udd41\",\n                        \"\\ud835\\udd42\",\n                        \"\\ud835\\udd43\",\n                        \"\\ud835\\udd44\",\n                        \"\\u2115\",\n                        \"\\ud835\\udd46\",\n                        \"\\u2119\",\n                        \"\\u211a\",\n                        \"\\u211d\",\n                        \"\\ud835\\udd4a\",\n                        \"\\ud835\\udd4b\",\n                        \"\\ud835\\udd4c\",\n                        \"\\ud835\\udd4d\",\n                        \"\\ud835\\udd4e\",\n                        \"\\ud835\\udd4f\",\n                        \"\\ud835\\udd50\",\n                        \"\\u2124\",\n                    ],\n                    L = [\n                        \"\\ud835\\udd52\",\n                        \"\\ud835\\udd53\",\n                        \"\\ud835\\udd54\",\n                        \"\\ud835\\udd55\",\n                        \"\\ud835\\udd56\",\n                        \"\\ud835\\udd57\",\n                        \"\\ud835\\udd58\",\n                        \"\\ud835\\udd59\",\n                        \"\\ud835\\udd5a\",\n                        \"\\ud835\\udd5b\",\n                        \"\\ud835\\udd5c\",\n                        \"\\ud835\\udd5d\",\n                        \"\\ud835\\udd5e\",\n                        \"\\ud835\\udd5f\",\n                        \"\\ud835\\udd60\",\n                        \"\\ud835\\udd61\",\n                        \"\\ud835\\udd62\",\n                        \"\\ud835\\udd63\",\n                        \"\\ud835\\udd64\",\n                        \"\\ud835\\udd65\",\n                        \"\\ud835\\udd66\",\n                        \"\\ud835\\udd67\",\n                        \"\\ud835\\udd68\",\n                        \"\\ud835\\udd69\",\n                        \"\\ud835\\udd6a\",\n                        \"\\ud835\\udd6b\",\n                    ],\n                    I = [\n                        \"\\ud835\\udd6c\",\n                        \"\\ud835\\udd6d\",\n                        \"\\ud835\\udd6e\",\n                        \"\\ud835\\udd6f\",\n                        \"\\ud835\\udd70\",\n                        \"\\ud835\\udd71\",\n                        \"\\ud835\\udd72\",\n                        \"\\ud835\\udd73\",\n                        \"\\ud835\\udd74\",\n                        \"\\ud835\\udd75\",\n                        \"\\ud835\\udd76\",\n                        \"\\ud835\\udd77\",\n                        \"\\ud835\\udd78\",\n                        \"\\ud835\\udd79\",\n                        \"\\ud835\\udd7a\",\n                        \"\\ud835\\udd7b\",\n                        \"\\ud835\\udd7c\",\n                        \"\\ud835\\udd7d\",\n                        \"\\ud835\\udd7e\",\n                        \"\\ud835\\udd7f\",\n                        \"\\ud835\\udd80\",\n                        \"\\ud835\\udd81\",\n                        \"\\ud835\\udd82\",\n                        \"\\ud835\\udd83\",\n                        \"\\ud835\\udd84\",\n                        \"\\ud835\\udd85\",\n                    ],\n                    P = [\n                        \"\\ud835\\udd86\",\n                        \"\\ud835\\udd87\",\n                        \"\\ud835\\udd88\",\n                        \"\\ud835\\udd89\",\n                        \"\\ud835\\udd8a\",\n                        \"\\ud835\\udd8b\",\n                        \"\\ud835\\udd8c\",\n                        \"\\ud835\\udd8d\",\n                        \"\\ud835\\udd8e\",\n                        \"\\ud835\\udd8f\",\n                        \"\\ud835\\udd90\",\n                        \"\\ud835\\udd91\",\n                        \"\\ud835\\udd92\",\n                        \"\\ud835\\udd93\",\n                        \"\\ud835\\udd94\",\n                        \"\\ud835\\udd95\",\n                        \"\\ud835\\udd96\",\n                        \"\\ud835\\udd97\",\n                        \"\\ud835\\udd98\",\n                        \"\\ud835\\udd99\",\n                        \"\\ud835\\udd9a\",\n                        \"\\ud835\\udd9b\",\n                        \"\\ud835\\udd9c\",\n                        \"\\ud835\\udd9d\",\n                        \"\\ud835\\udd9e\",\n                        \"\\ud835\\udd9f\",\n                    ],\n                    R = [\n                        \"\\ud835\\udda0\",\n                        \"\\ud835\\udda1\",\n                        \"\\ud835\\udda2\",\n                        \"\\ud835\\udda3\",\n                        \"\\ud835\\udda4\",\n                        \"\\ud835\\udda5\",\n                        \"\\ud835\\udda6\",\n                        \"\\ud835\\udda7\",\n                        \"\\ud835\\udda8\",\n                        \"\\ud835\\udda9\",\n                        \"\\ud835\\uddaa\",\n                        \"\\ud835\\uddab\",\n                        \"\\ud835\\uddac\",\n                        \"\\ud835\\uddad\",\n                        \"\\ud835\\uddae\",\n                        \"\\ud835\\uddaf\",\n                        \"\\ud835\\uddb0\",\n                        \"\\ud835\\uddb1\",\n                        \"\\ud835\\uddb2\",\n                        \"\\ud835\\uddb3\",\n                        \"\\ud835\\uddb4\",\n                        \"\\ud835\\uddb5\",\n                        \"\\ud835\\uddb6\",\n                        \"\\ud835\\uddb7\",\n                        \"\\ud835\\uddb8\",\n                        \"\\ud835\\uddb9\",\n                    ],\n                    k = [\n                        \"\\ud835\\uddba\",\n                        \"\\ud835\\uddbb\",\n                        \"\\ud835\\uddbc\",\n                        \"\\ud835\\uddbd\",\n                        \"\\ud835\\uddbe\",\n                        \"\\ud835\\uddbf\",\n                        \"\\ud835\\uddc0\",\n                        \"\\ud835\\uddc1\",\n                        \"\\ud835\\uddc2\",\n                        \"\\ud835\\uddc3\",\n                        \"\\ud835\\uddc4\",\n                        \"\\ud835\\uddc5\",\n                        \"\\ud835\\uddc6\",\n                        \"\\ud835\\uddc7\",\n                        \"\\ud835\\uddc8\",\n                        \"\\ud835\\uddc9\",\n                        \"\\ud835\\uddca\",\n                        \"\\ud835\\uddcb\",\n                        \"\\ud835\\uddcc\",\n                        \"\\ud835\\uddcd\",\n                        \"\\ud835\\uddce\",\n                        \"\\ud835\\uddcf\",\n                        \"\\ud835\\uddd0\",\n                        \"\\ud835\\uddd1\",\n                        \"\\ud835\\uddd2\",\n                        \"\\ud835\\uddd3\",\n                    ],\n                    j = [\n                        \"\\ud835\\uddd4\",\n                        \"\\ud835\\uddd5\",\n                        \"\\ud835\\uddd6\",\n                        \"\\ud835\\uddd7\",\n                        \"\\ud835\\uddd8\",\n                        \"\\ud835\\uddd9\",\n                        \"\\ud835\\uddda\",\n                        \"\\ud835\\udddb\",\n                        \"\\ud835\\udddc\",\n                        \"\\ud835\\udddd\",\n                        \"\\ud835\\uddde\",\n                        \"\\ud835\\udddf\",\n                        \"\\ud835\\udde0\",\n                        \"\\ud835\\udde1\",\n                        \"\\ud835\\udde2\",\n                        \"\\ud835\\udde3\",\n                        \"\\ud835\\udde4\",\n                        \"\\ud835\\udde5\",\n                        \"\\ud835\\udde6\",\n                        \"\\ud835\\udde7\",\n                        \"\\ud835\\udde8\",\n                        \"\\ud835\\udde9\",\n                        \"\\ud835\\uddea\",\n                        \"\\ud835\\uddeb\",\n                        \"\\ud835\\uddec\",\n                        \"\\ud835\\udded\",\n                    ],\n                    B = [\n                        \"\\ud835\\uddee\",\n                        \"\\ud835\\uddef\",\n                        \"\\ud835\\uddf0\",\n                        \"\\ud835\\uddf1\",\n                        \"\\ud835\\uddf2\",\n                        \"\\ud835\\uddf3\",\n                        \"\\ud835\\uddf4\",\n                        \"\\ud835\\uddf5\",\n                        \"\\ud835\\uddf6\",\n                        \"\\ud835\\uddf7\",\n                        \"\\ud835\\uddf8\",\n                        \"\\ud835\\uddf9\",\n                        \"\\ud835\\uddfa\",\n                        \"\\ud835\\uddfb\",\n                        \"\\ud835\\uddfc\",\n                        \"\\ud835\\uddfd\",\n                        \"\\ud835\\uddfe\",\n                        \"\\ud835\\uddff\",\n                        \"\\ud835\\ude00\",\n                        \"\\ud835\\ude01\",\n                        \"\\ud835\\ude02\",\n                        \"\\ud835\\ude03\",\n                        \"\\ud835\\ude04\",\n                        \"\\ud835\\ude05\",\n                        \"\\ud835\\ude06\",\n                        \"\\ud835\\ude07\",\n                    ],\n                    D = [\n                        \"\\ud835\\ude08\",\n                        \"\\ud835\\ude09\",\n                        \"\\ud835\\ude0a\",\n                        \"\\ud835\\ude0b\",\n                        \"\\ud835\\ude0c\",\n                        \"\\ud835\\ude0d\",\n                        \"\\ud835\\ude0e\",\n                        \"\\ud835\\ude0f\",\n                        \"\\ud835\\ude10\",\n                        \"\\ud835\\ude11\",\n                        \"\\ud835\\ude12\",\n                        \"\\ud835\\ude13\",\n                        \"\\ud835\\ude14\",\n                        \"\\ud835\\ude15\",\n                        \"\\ud835\\ude16\",\n                        \"\\ud835\\ude17\",\n                        \"\\ud835\\ude18\",\n                        \"\\ud835\\ude19\",\n                        \"\\ud835\\ude1a\",\n                        \"\\ud835\\ude1b\",\n                        \"\\ud835\\ude1c\",\n                        \"\\ud835\\ude1d\",\n                        \"\\ud835\\ude1e\",\n                        \"\\ud835\\ude1f\",\n                        \"\\ud835\\ude20\",\n                        \"\\ud835\\ude21\",\n                    ],\n                    F = [\n                        \"\\ud835\\ude22\",\n                        \"\\ud835\\ude23\",\n                        \"\\ud835\\ude24\",\n                        \"\\ud835\\ude25\",\n                        \"\\ud835\\ude26\",\n                        \"\\ud835\\ude27\",\n                        \"\\ud835\\ude28\",\n                        \"\\ud835\\ude29\",\n                        \"\\ud835\\ude2a\",\n                        \"\\ud835\\ude2b\",\n                        \"\\ud835\\ude2c\",\n                        \"\\ud835\\ude2d\",\n                        \"\\ud835\\ude2e\",\n                        \"\\ud835\\ude2f\",\n                        \"\\ud835\\ude30\",\n                        \"\\ud835\\ude31\",\n                        \"\\ud835\\ude32\",\n                        \"\\ud835\\ude33\",\n                        \"\\ud835\\ude34\",\n                        \"\\ud835\\ude35\",\n                        \"\\ud835\\ude36\",\n                        \"\\ud835\\ude37\",\n                        \"\\ud835\\ude38\",\n                        \"\\ud835\\ude39\",\n                        \"\\ud835\\ude3a\",\n                        \"\\ud835\\ude3b\",\n                    ],\n                    H = [\n                        \"\\ud835\\ude3c\",\n                        \"\\ud835\\ude3d\",\n                        \"\\ud835\\ude3e\",\n                        \"\\ud835\\ude3f\",\n                        \"\\ud835\\ude40\",\n                        \"\\ud835\\ude41\",\n                        \"\\ud835\\ude42\",\n                        \"\\ud835\\ude43\",\n                        \"\\ud835\\ude44\",\n                        \"\\ud835\\ude45\",\n                        \"\\ud835\\ude46\",\n                        \"\\ud835\\ude47\",\n                        \"\\ud835\\ude48\",\n                        \"\\ud835\\ude49\",\n                        \"\\ud835\\ude4a\",\n                        \"\\ud835\\ude4b\",\n                        \"\\ud835\\ude4c\",\n                        \"\\ud835\\ude4d\",\n                        \"\\ud835\\ude4e\",\n                        \"\\ud835\\ude4f\",\n                        \"\\ud835\\ude50\",\n                        \"\\ud835\\ude51\",\n                        \"\\ud835\\ude52\",\n                        \"\\ud835\\ude53\",\n                        \"\\ud835\\ude54\",\n                        \"\\ud835\\ude55\",\n                    ],\n                    U = [\n                        \"\\ud835\\ude56\",\n                        \"\\ud835\\ude57\",\n                        \"\\ud835\\ude58\",\n                        \"\\ud835\\ude59\",\n                        \"\\ud835\\ude5a\",\n                        \"\\ud835\\ude5b\",\n                        \"\\ud835\\ude5c\",\n                        \"\\ud835\\ude5d\",\n                        \"\\ud835\\ude5e\",\n                        \"\\ud835\\ude5f\",\n                        \"\\ud835\\ude60\",\n                        \"\\ud835\\ude61\",\n                        \"\\ud835\\ude62\",\n                        \"\\ud835\\ude63\",\n                        \"\\ud835\\ude64\",\n                        \"\\ud835\\ude65\",\n                        \"\\ud835\\ude66\",\n                        \"\\ud835\\ude67\",\n                        \"\\ud835\\ude68\",\n                        \"\\ud835\\ude69\",\n                        \"\\ud835\\ude6a\",\n                        \"\\ud835\\ude6b\",\n                        \"\\ud835\\ude6c\",\n                        \"\\ud835\\ude6d\",\n                        \"\\ud835\\ude6e\",\n                        \"\\ud835\\ude6f\",\n                    ],\n                    X = [\n                        \"\\ud835\\ude70\",\n                        \"\\ud835\\ude71\",\n                        \"\\ud835\\ude72\",\n                        \"\\ud835\\ude73\",\n                        \"\\ud835\\ude74\",\n                        \"\\ud835\\ude75\",\n                        \"\\ud835\\ude76\",\n                        \"\\ud835\\ude77\",\n                        \"\\ud835\\ude78\",\n                        \"\\ud835\\ude79\",\n                        \"\\ud835\\ude7a\",\n                        \"\\ud835\\ude7b\",\n                        \"\\ud835\\ude7c\",\n                        \"\\ud835\\ude7d\",\n                        \"\\ud835\\ude7e\",\n                        \"\\ud835\\ude7f\",\n                        \"\\ud835\\ude80\",\n                        \"\\ud835\\ude81\",\n                        \"\\ud835\\ude82\",\n                        \"\\ud835\\ude83\",\n                        \"\\ud835\\ude84\",\n                        \"\\ud835\\ude85\",\n                        \"\\ud835\\ude86\",\n                        \"\\ud835\\ude87\",\n                        \"\\ud835\\ude88\",\n                        \"\\ud835\\ude89\",\n                    ],\n                    V = [\n                        \"\\ud835\\ude8a\",\n                        \"\\ud835\\ude8b\",\n                        \"\\ud835\\ude8c\",\n                        \"\\ud835\\ude8d\",\n                        \"\\ud835\\ude8e\",\n                        \"\\ud835\\ude8f\",\n                        \"\\ud835\\ude90\",\n                        \"\\ud835\\ude91\",\n                        \"\\ud835\\ude92\",\n                        \"\\ud835\\ude93\",\n                        \"\\ud835\\ude94\",\n                        \"\\ud835\\ude95\",\n                        \"\\ud835\\ude96\",\n                        \"\\ud835\\ude97\",\n                        \"\\ud835\\ude98\",\n                        \"\\ud835\\ude99\",\n                        \"\\ud835\\ude9a\",\n                        \"\\ud835\\ude9b\",\n                        \"\\ud835\\ude9c\",\n                        \"\\ud835\\ude9d\",\n                        \"\\ud835\\ude9e\",\n                        \"\\ud835\\ude9f\",\n                        \"\\ud835\\udea0\",\n                        \"\\ud835\\udea1\",\n                        \"\\ud835\\udea2\",\n                        \"\\ud835\\udea3\",\n                    ],\n                    q = [\"\\u2145\", \"\\u2146\", \"\\u2147\", \"\\u2148\", \"\\u2149\"],\n                    W = [\n                        \"\\u0391\",\n                        \"\\u0392\",\n                        \"\\u0393\",\n                        \"\\u0394\",\n                        \"\\u0395\",\n                        \"\\u0396\",\n                        \"\\u0397\",\n                        \"\\u0398\",\n                        \"\\u0399\",\n                        \"\\u039a\",\n                        \"\\u039b\",\n                        \"\\u039c\",\n                        \"\\u039d\",\n                        \"\\u039e\",\n                        \"\\u039f\",\n                        \"\\u03a0\",\n                        \"\\u03a1\",\n                        \"\\u03a3\",\n                        \"\\u03a4\",\n                        \"\\u03a5\",\n                        \"\\u03a6\",\n                        \"\\u03a7\",\n                        \"\\u03a8\",\n                        \"\\u03a9\",\n                    ],\n                    G = [\n                        \"\\u03b1\",\n                        \"\\u03b2\",\n                        \"\\u03b3\",\n                        \"\\u03b4\",\n                        \"\\u03b5\",\n                        \"\\u03b6\",\n                        \"\\u03b7\",\n                        \"\\u03b8\",\n                        \"\\u03b9\",\n                        \"\\u03ba\",\n                        \"\\u03bb\",\n                        \"\\u03bc\",\n                        \"\\u03bd\",\n                        \"\\u03be\",\n                        \"\\u03bf\",\n                        \"\\u03c0\",\n                        \"\\u03c1\",\n                        \"\\u03c2\",\n                        \"\\u03c3\",\n                        \"\\u03c4\",\n                        \"\\u03c5\",\n                        \"\\u03c6\",\n                        \"\\u03c7\",\n                        \"\\u03c8\",\n                        \"\\u03c9\",\n                    ],\n                    z = [\n                        \"\\ud835\\udea8\",\n                        \"\\ud835\\udea9\",\n                        \"\\ud835\\udeaa\",\n                        \"\\ud835\\udeab\",\n                        \"\\ud835\\udeac\",\n                        \"\\ud835\\udead\",\n                        \"\\ud835\\udeae\",\n                        \"\\ud835\\udeaf\",\n                        \"\\ud835\\udeb0\",\n                        \"\\ud835\\udeb1\",\n                        \"\\ud835\\udeb2\",\n                        \"\\ud835\\udeb3\",\n                        \"\\ud835\\udeb4\",\n                        \"\\ud835\\udeb5\",\n                        \"\\ud835\\udeb6\",\n                        \"\\ud835\\udeb7\",\n                        \"\\ud835\\udeb8\",\n                        \"\\ud835\\udeba\",\n                        \"\\ud835\\udebb\",\n                        \"\\ud835\\udebc\",\n                        \"\\ud835\\udebd\",\n                        \"\\ud835\\udebe\",\n                        \"\\ud835\\udebf\",\n                        \"\\ud835\\udec0\",\n                    ],\n                    J = [\n                        \"\\ud835\\udec2\",\n                        \"\\ud835\\udec3\",\n                        \"\\ud835\\udec4\",\n                        \"\\ud835\\udec5\",\n                        \"\\ud835\\udec6\",\n                        \"\\ud835\\udec7\",\n                        \"\\ud835\\udec8\",\n                        \"\\ud835\\udec9\",\n                        \"\\ud835\\udeca\",\n                        \"\\ud835\\udecb\",\n                        \"\\ud835\\udecc\",\n                        \"\\ud835\\udecd\",\n                        \"\\ud835\\udece\",\n                        \"\\ud835\\udecf\",\n                        \"\\ud835\\uded0\",\n                        \"\\ud835\\uded1\",\n                        \"\\ud835\\uded2\",\n                        \"\\ud835\\uded3\",\n                        \"\\ud835\\uded4\",\n                        \"\\ud835\\uded5\",\n                        \"\\ud835\\uded6\",\n                        \"\\ud835\\uded7\",\n                        \"\\ud835\\uded8\",\n                        \"\\ud835\\uded9\",\n                        \"\\ud835\\udeda\",\n                    ],\n                    K = [\n                        \"\\ud835\\udee2\",\n                        \"\\ud835\\udee3\",\n                        \"\\ud835\\udee4\",\n                        \"\\ud835\\udee5\",\n                        \"\\ud835\\udee6\",\n                        \"\\ud835\\udee7\",\n                        \"\\ud835\\udee8\",\n                        \"\\ud835\\udee9\",\n                        \"\\ud835\\udeea\",\n                        \"\\ud835\\udeeb\",\n                        \"\\ud835\\udeec\",\n                        \"\\ud835\\udeed\",\n                        \"\\ud835\\udeee\",\n                        \"\\ud835\\udeef\",\n                        \"\\ud835\\udef0\",\n                        \"\\ud835\\udef1\",\n                        \"\\ud835\\udef2\",\n                        \"\\ud835\\udef4\",\n                        \"\\ud835\\udef5\",\n                        \"\\ud835\\udef6\",\n                        \"\\ud835\\udef7\",\n                        \"\\ud835\\udef8\",\n                        \"\\ud835\\udef9\",\n                        \"\\ud835\\udefa\",\n                    ],\n                    $ = [\n                        \"\\ud835\\udefc\",\n                        \"\\ud835\\udefd\",\n                        \"\\ud835\\udefe\",\n                        \"\\ud835\\udeff\",\n                        \"\\ud835\\udf00\",\n                        \"\\ud835\\udf01\",\n                        \"\\ud835\\udf02\",\n                        \"\\ud835\\udf03\",\n                        \"\\ud835\\udf04\",\n                        \"\\ud835\\udf05\",\n                        \"\\ud835\\udf06\",\n                        \"\\ud835\\udf07\",\n                        \"\\ud835\\udf08\",\n                        \"\\ud835\\udf09\",\n                        \"\\ud835\\udf0a\",\n                        \"\\ud835\\udf0b\",\n                        \"\\ud835\\udf0c\",\n                        \"\\ud835\\udf0d\",\n                        \"\\ud835\\udf0e\",\n                        \"\\ud835\\udf0f\",\n                        \"\\ud835\\udf10\",\n                        \"\\ud835\\udf11\",\n                        \"\\ud835\\udf12\",\n                        \"\\ud835\\udf13\",\n                        \"\\ud835\\udf14\",\n                    ],\n                    Y = [\n                        \"\\ud835\\udf1c\",\n                        \"\\ud835\\udf1d\",\n                        \"\\ud835\\udf1e\",\n                        \"\\ud835\\udf1f\",\n                        \"\\ud835\\udf20\",\n                        \"\\ud835\\udf21\",\n                        \"\\ud835\\udf22\",\n                        \"\\ud835\\udf23\",\n                        \"\\ud835\\udf24\",\n                        \"\\ud835\\udf25\",\n                        \"\\ud835\\udf26\",\n                        \"\\ud835\\udf27\",\n                        \"\\ud835\\udf28\",\n                        \"\\ud835\\udf29\",\n                        \"\\ud835\\udf2a\",\n                        \"\\ud835\\udf2b\",\n                        \"\\ud835\\udf2c\",\n                        \"\\ud835\\udf2e\",\n                        \"\\ud835\\udf2f\",\n                        \"\\ud835\\udf30\",\n                        \"\\ud835\\udf31\",\n                        \"\\ud835\\udf32\",\n                        \"\\ud835\\udf33\",\n                        \"\\ud835\\udf34\",\n                    ],\n                    Z = [\n                        \"\\ud835\\udf36\",\n                        \"\\ud835\\udf37\",\n                        \"\\ud835\\udf38\",\n                        \"\\ud835\\udf39\",\n                        \"\\ud835\\udf3a\",\n                        \"\\ud835\\udf3b\",\n                        \"\\ud835\\udf3c\",\n                        \"\\ud835\\udf3d\",\n                        \"\\ud835\\udf3e\",\n                        \"\\ud835\\udf3f\",\n                        \"\\ud835\\udf40\",\n                        \"\\ud835\\udf41\",\n                        \"\\ud835\\udf42\",\n                        \"\\ud835\\udf43\",\n                        \"\\ud835\\udf44\",\n                        \"\\ud835\\udf45\",\n                        \"\\ud835\\udf46\",\n                        \"\\ud835\\udf47\",\n                        \"\\ud835\\udf48\",\n                        \"\\ud835\\udf49\",\n                        \"\\ud835\\udf4a\",\n                        \"\\ud835\\udf4b\",\n                        \"\\ud835\\udf4c\",\n                        \"\\ud835\\udf4d\",\n                        \"\\ud835\\udf4e\",\n                    ],\n                    Q = [\n                        \"\\ud835\\udf56\",\n                        \"\\ud835\\udf57\",\n                        \"\\ud835\\udf58\",\n                        \"\\ud835\\udf59\",\n                        \"\\ud835\\udf5a\",\n                        \"\\ud835\\udf5b\",\n                        \"\\ud835\\udf5c\",\n                        \"\\ud835\\udf5d\",\n                        \"\\ud835\\udf5e\",\n                        \"\\ud835\\udf5f\",\n                        \"\\ud835\\udf60\",\n                        \"\\ud835\\udf61\",\n                        \"\\ud835\\udf62\",\n                        \"\\ud835\\udf63\",\n                        \"\\ud835\\udf64\",\n                        \"\\ud835\\udf65\",\n                        \"\\ud835\\udf66\",\n                        \"\\ud835\\udf68\",\n                        \"\\ud835\\udf69\",\n                        \"\\ud835\\udf6a\",\n                        \"\\ud835\\udf6b\",\n                        \"\\ud835\\udf6c\",\n                        \"\\ud835\\udf6d\",\n                        \"\\ud835\\udf6e\",\n                    ],\n                    tt = [\n                        \"\\ud835\\udf70\",\n                        \"\\ud835\\udf71\",\n                        \"\\ud835\\udf72\",\n                        \"\\ud835\\udf73\",\n                        \"\\ud835\\udf74\",\n                        \"\\ud835\\udf75\",\n                        \"\\ud835\\udf76\",\n                        \"\\ud835\\udf77\",\n                        \"\\ud835\\udf78\",\n                        \"\\ud835\\udf79\",\n                        \"\\ud835\\udf7a\",\n                        \"\\ud835\\udf7b\",\n                        \"\\ud835\\udf7c\",\n                        \"\\ud835\\udf7d\",\n                        \"\\ud835\\udf7e\",\n                        \"\\ud835\\udf7f\",\n                        \"\\ud835\\udf80\",\n                        \"\\ud835\\udf81\",\n                        \"\\ud835\\udf82\",\n                        \"\\ud835\\udf83\",\n                        \"\\ud835\\udf84\",\n                        \"\\ud835\\udf85\",\n                        \"\\ud835\\udf86\",\n                        \"\\ud835\\udf87\",\n                        \"\\ud835\\udf88\",\n                    ],\n                    et = [\n                        \"\\ud835\\udf90\",\n                        \"\\ud835\\udf91\",\n                        \"\\ud835\\udf92\",\n                        \"\\ud835\\udf93\",\n                        \"\\ud835\\udf94\",\n                        \"\\ud835\\udf95\",\n                        \"\\ud835\\udf96\",\n                        \"\\ud835\\udf97\",\n                        \"\\ud835\\udf98\",\n                        \"\\ud835\\udf99\",\n                        \"\\ud835\\udf9a\",\n                        \"\\ud835\\udf9b\",\n                        \"\\ud835\\udf9c\",\n                        \"\\ud835\\udf9d\",\n                        \"\\ud835\\udf9e\",\n                        \"\\ud835\\udf9f\",\n                        \"\\ud835\\udfa0\",\n                        \"\\ud835\\udfa2\",\n                        \"\\ud835\\udfa3\",\n                        \"\\ud835\\udfa4\",\n                        \"\\ud835\\udfa5\",\n                        \"\\ud835\\udfa6\",\n                        \"\\ud835\\udfa7\",\n                        \"\\ud835\\udfa8\",\n                    ],\n                    rt = [\n                        \"\\ud835\\udfaa\",\n                        \"\\ud835\\udfab\",\n                        \"\\ud835\\udfac\",\n                        \"\\ud835\\udfad\",\n                        \"\\ud835\\udfae\",\n                        \"\\ud835\\udfaf\",\n                        \"\\ud835\\udfb0\",\n                        \"\\ud835\\udfb1\",\n                        \"\\ud835\\udfb2\",\n                        \"\\ud835\\udfb3\",\n                        \"\\ud835\\udfb4\",\n                        \"\\ud835\\udfb5\",\n                        \"\\ud835\\udfb6\",\n                        \"\\ud835\\udfb7\",\n                        \"\\ud835\\udfb8\",\n                        \"\\ud835\\udfb9\",\n                        \"\\ud835\\udfba\",\n                        \"\\ud835\\udfbb\",\n                        \"\\ud835\\udfbc\",\n                        \"\\ud835\\udfbd\",\n                        \"\\ud835\\udfbe\",\n                        \"\\ud835\\udfbf\",\n                        \"\\ud835\\udfc0\",\n                        \"\\ud835\\udfc1\",\n                        \"\\ud835\\udfc2\",\n                    ],\n                    nt = [\"\\u213c\", \"\\u213d\", \"\\u213e\", \"\\u213f\"],\n                    ot = [\n                        \"\\u03d0\",\n                        \"\\u03d1\",\n                        \"\\u03d5\",\n                        \"\\u03d6\",\n                        \"\\u03d7\",\n                        \"\\u03f0\",\n                        \"\\u03f1\",\n                        \"\\u03f5\",\n                        \"\\u03f6\",\n                        \"\\u03f4\",\n                    ],\n                    it = [\n                        \"\\ud835\\udedc\",\n                        \"\\ud835\\udedd\",\n                        \"\\ud835\\udede\",\n                        \"\\ud835\\udedf\",\n                        \"\\ud835\\udee0\",\n                        \"\\ud835\\udee1\",\n                    ],\n                    st = [\n                        \"\\ud835\\udf16\",\n                        \"\\ud835\\udf17\",\n                        \"\\ud835\\udf18\",\n                        \"\\ud835\\udf19\",\n                        \"\\ud835\\udf1a\",\n                        \"\\ud835\\udf1b\",\n                    ],\n                    at = [\n                        \"\\ud835\\udf8a\",\n                        \"\\ud835\\udf8b\",\n                        \"\\ud835\\udf8c\",\n                        \"\\ud835\\udf8d\",\n                        \"\\ud835\\udf8e\",\n                        \"\\ud835\\udf8f\",\n                    ],\n                    lt = [\"\\u2135\", \"\\u2136\", \"\\u2137\", \"\\u2138\"],\n                    ct = d.concat(\n                        m,\n                        y,\n                        g,\n                        b,\n                        v,\n                        _,\n                        M,\n                        O,\n                        S,\n                        x,\n                        E,\n                        A,\n                        C,\n                        T,\n                        N,\n                        w,\n                        L,\n                        I,\n                        P,\n                        R,\n                        k,\n                        j,\n                        B,\n                        D,\n                        F,\n                        H,\n                        U,\n                        X,\n                        V,\n                        q,\n                        W,\n                        G,\n                        z,\n                        J,\n                        K,\n                        $,\n                        Y,\n                        Z,\n                        Q,\n                        tt,\n                        nt,\n                        ot,\n                        et,\n                        rt,\n                        it,\n                        st,\n                        at,\n                        lt\n                    );\n                e.allLettersRegExp = new RegExp(ct.join(\"|\"));\n                const ut = [\n                        \"+\",\n                        \"\\xb1\",\n                        \"\\u2213\",\n                        \"\\u2214\",\n                        \"\\u2227\",\n                        \"\\u2228\",\n                        \"\\u2229\",\n                        \"\\u222a\",\n                        \"\\u228c\",\n                        \"\\u228d\",\n                        \"\\u228e\",\n                        \"\\u2293\",\n                        \"\\u2294\",\n                        \"\\u229d\",\n                        \"\\u229e\",\n                        \"\\u22a4\",\n                        \"\\u22a5\",\n                        \"\\u22ba\",\n                        \"\\u22bb\",\n                        \"\\u22bc\",\n                        \"\\u22c4\",\n                        \"\\u22ce\",\n                        \"\\u22cf\",\n                        \"\\u22d2\",\n                        \"\\u22d3\",\n                        \"\\u2a5e\",\n                        \"\\u2295\",\n                        \"\\u22d4\",\n                    ],\n                    pt = String.fromCodePoint(8292);\n                ut.push(pt);\n                const ht = [\n                        \"\\u2020\",\n                        \"\\u2021\",\n                        \"\\u2210\",\n                        \"\\u2217\",\n                        \"\\u2218\",\n                        \"\\u2219\",\n                        \"\\u2240\",\n                        \"\\u229a\",\n                        \"\\u229b\",\n                        \"\\u22a0\",\n                        \"\\u22a1\",\n                        \"\\u22c5\",\n                        \"\\u22c6\",\n                        \"\\u22c7\",\n                        \"\\u22c8\",\n                        \"\\u22c9\",\n                        \"\\u22ca\",\n                        \"\\u22cb\",\n                        \"\\u22cc\",\n                        \"\\u25cb\",\n                        \"\\xb7\",\n                        \"*\",\n                        \"\\u2297\",\n                        \"\\u2299\",\n                    ],\n                    ft = String.fromCodePoint(8290);\n                ht.push(ft);\n                const dt = String.fromCodePoint(8289),\n                    mt = [\n                        \"\\xbc\",\n                        \"\\xbd\",\n                        \"\\xbe\",\n                        \"\\u2150\",\n                        \"\\u2151\",\n                        \"\\u2152\",\n                        \"\\u2153\",\n                        \"\\u2154\",\n                        \"\\u2155\",\n                        \"\\u2156\",\n                        \"\\u2157\",\n                        \"\\u2158\",\n                        \"\\u2159\",\n                        \"\\u215a\",\n                        \"\\u215b\",\n                        \"\\u215c\",\n                        \"\\u215d\",\n                        \"\\u215e\",\n                        \"\\u215f\",\n                        \"\\u2189\",\n                    ],\n                    yt = [\n                        \"\\xb2\",\n                        \"\\xb3\",\n                        \"\\xb9\",\n                        \"\\u2070\",\n                        \"\\u2074\",\n                        \"\\u2075\",\n                        \"\\u2076\",\n                        \"\\u2077\",\n                        \"\\u2078\",\n                        \"\\u2079\",\n                    ].concat(\n                        [\n                            \"\\u2080\",\n                            \"\\u2081\",\n                            \"\\u2082\",\n                            \"\\u2083\",\n                            \"\\u2084\",\n                            \"\\u2085\",\n                            \"\\u2086\",\n                            \"\\u2087\",\n                            \"\\u2088\",\n                            \"\\u2089\",\n                        ],\n                        [\n                            \"\\u2460\",\n                            \"\\u2461\",\n                            \"\\u2462\",\n                            \"\\u2463\",\n                            \"\\u2464\",\n                            \"\\u2465\",\n                            \"\\u2466\",\n                            \"\\u2467\",\n                            \"\\u2468\",\n                            \"\\u2469\",\n                            \"\\u246a\",\n                            \"\\u246b\",\n                            \"\\u246c\",\n                            \"\\u246d\",\n                            \"\\u246e\",\n                            \"\\u246f\",\n                            \"\\u2470\",\n                            \"\\u2471\",\n                            \"\\u2472\",\n                            \"\\u2473\",\n                            \"\\u24ea\",\n                            \"\\u24eb\",\n                            \"\\u24ec\",\n                            \"\\u24ed\",\n                            \"\\u24ee\",\n                            \"\\u24ef\",\n                            \"\\u24f0\",\n                            \"\\u24f1\",\n                            \"\\u24f2\",\n                            \"\\u24f3\",\n                            \"\\u24f4\",\n                            \"\\u24f5\",\n                            \"\\u24f6\",\n                            \"\\u24f7\",\n                            \"\\u24f8\",\n                            \"\\u24f9\",\n                            \"\\u24fa\",\n                            \"\\u24fb\",\n                            \"\\u24fc\",\n                            \"\\u24fd\",\n                            \"\\u24fe\",\n                            \"\\u24ff\",\n                            \"\\u2776\",\n                            \"\\u2777\",\n                            \"\\u2778\",\n                            \"\\u2779\",\n                            \"\\u277a\",\n                            \"\\u277b\",\n                            \"\\u277c\",\n                            \"\\u277d\",\n                            \"\\u277e\",\n                            \"\\u277f\",\n                            \"\\u2780\",\n                            \"\\u2781\",\n                            \"\\u2782\",\n                            \"\\u2783\",\n                            \"\\u2784\",\n                            \"\\u2785\",\n                            \"\\u2786\",\n                            \"\\u2787\",\n                            \"\\u2788\",\n                            \"\\u2789\",\n                            \"\\u278a\",\n                            \"\\u278b\",\n                            \"\\u278c\",\n                            \"\\u278d\",\n                            \"\\u278e\",\n                            \"\\u278f\",\n                            \"\\u2790\",\n                            \"\\u2791\",\n                            \"\\u2792\",\n                            \"\\u2793\",\n                            \"\\u3248\",\n                            \"\\u3249\",\n                            \"\\u324a\",\n                            \"\\u324b\",\n                            \"\\u324c\",\n                            \"\\u324d\",\n                            \"\\u324e\",\n                            \"\\u324f\",\n                            \"\\u3251\",\n                            \"\\u3252\",\n                            \"\\u3253\",\n                            \"\\u3254\",\n                            \"\\u3255\",\n                            \"\\u3256\",\n                            \"\\u3257\",\n                            \"\\u3258\",\n                            \"\\u3259\",\n                            \"\\u325a\",\n                            \"\\u325b\",\n                            \"\\u325c\",\n                            \"\\u325d\",\n                            \"\\u325e\",\n                            \"\\u325f\",\n                            \"\\u32b1\",\n                            \"\\u32b2\",\n                            \"\\u32b3\",\n                            \"\\u32b4\",\n                            \"\\u32b5\",\n                            \"\\u32b6\",\n                            \"\\u32b7\",\n                            \"\\u32b8\",\n                            \"\\u32b9\",\n                            \"\\u32ba\",\n                            \"\\u32bb\",\n                            \"\\u32bc\",\n                            \"\\u32bd\",\n                            \"\\u32be\",\n                            \"\\u32bf\",\n                        ],\n                        [\n                            \"\\u2474\",\n                            \"\\u2475\",\n                            \"\\u2476\",\n                            \"\\u2477\",\n                            \"\\u2478\",\n                            \"\\u2479\",\n                            \"\\u247a\",\n                            \"\\u247b\",\n                            \"\\u247c\",\n                            \"\\u247d\",\n                            \"\\u247e\",\n                            \"\\u247f\",\n                            \"\\u2480\",\n                            \"\\u2481\",\n                            \"\\u2482\",\n                            \"\\u2483\",\n                            \"\\u2484\",\n                            \"\\u2485\",\n                            \"\\u2486\",\n                            \"\\u2487\",\n                        ],\n                        [\n                            \"\\u2488\",\n                            \"\\u2489\",\n                            \"\\u248a\",\n                            \"\\u248b\",\n                            \"\\u248c\",\n                            \"\\u248d\",\n                            \"\\u248e\",\n                            \"\\u248f\",\n                            \"\\u2490\",\n                            \"\\u2491\",\n                            \"\\u2492\",\n                            \"\\u2493\",\n                            \"\\u2494\",\n                            \"\\u2495\",\n                            \"\\u2496\",\n                            \"\\u2497\",\n                            \"\\u2498\",\n                            \"\\u2499\",\n                            \"\\u249a\",\n                            \"\\u249b\",\n                            \"\\ud83c\\udd00\",\n                            \"\\ud83c\\udd01\",\n                            \"\\ud83c\\udd02\",\n                            \"\\ud83c\\udd03\",\n                            \"\\ud83c\\udd04\",\n                            \"\\ud83c\\udd05\",\n                            \"\\ud83c\\udd06\",\n                            \"\\ud83c\\udd07\",\n                            \"\\ud83c\\udd08\",\n                            \"\\ud83c\\udd09\",\n                            \"\\ud83c\\udd0a\",\n                        ]\n                    ),\n                    gt = [\n                        \"cos\",\n                        \"cot\",\n                        \"csc\",\n                        \"sec\",\n                        \"sin\",\n                        \"tan\",\n                        \"arccos\",\n                        \"arccot\",\n                        \"arccsc\",\n                        \"arcsec\",\n                        \"arcsin\",\n                        \"arctan\",\n                        \"arc cos\",\n                        \"arc cot\",\n                        \"arc csc\",\n                        \"arc sec\",\n                        \"arc sin\",\n                        \"arc tan\",\n                    ].concat(\n                        [\n                            \"cosh\",\n                            \"coth\",\n                            \"csch\",\n                            \"sech\",\n                            \"sinh\",\n                            \"tanh\",\n                            \"arcosh\",\n                            \"arcoth\",\n                            \"arcsch\",\n                            \"arsech\",\n                            \"arsinh\",\n                            \"artanh\",\n                            \"arccosh\",\n                            \"arccoth\",\n                            \"arccsch\",\n                            \"arcsech\",\n                            \"arcsinh\",\n                            \"arctanh\",\n                        ],\n                        [\"deg\", \"det\", \"dim\", \"hom\", \"ker\", \"Tr\", \"tr\"],\n                        [\n                            \"log\",\n                            \"ln\",\n                            \"lg\",\n                            \"exp\",\n                            \"expt\",\n                            \"gcd\",\n                            \"gcd\",\n                            \"arg\",\n                            \"im\",\n                            \"re\",\n                            \"Pr\",\n                        ]\n                    ),\n                    bt = [\n                        {\n                            set: [\n                                \"!\",\n                                '\"',\n                                \"#\",\n                                \"%\",\n                                \"&\",\n                                \";\",\n                                \"?\",\n                                \"@\",\n                                \"\\\\\",\n                                \"\\xa1\",\n                                \"\\xa7\",\n                                \"\\xb6\",\n                                \"\\xbf\",\n                                \"\\u2017\",\n                                \"\\u2020\",\n                                \"\\u2021\",\n                                \"\\u2022\",\n                                \"\\u2023\",\n                                \"\\u2024\",\n                                \"\\u2025\",\n                                \"\\u2027\",\n                                \"\\u2030\",\n                                \"\\u2031\",\n                                \"\\u2038\",\n                                \"\\u203b\",\n                                \"\\u203c\",\n                                \"\\u203d\",\n                                \"\\u203e\",\n                                \"\\u2041\",\n                                \"\\u2042\",\n                                \"\\u2043\",\n                                \"\\u2047\",\n                                \"\\u2048\",\n                                \"\\u2049\",\n                                \"\\u204b\",\n                                \"\\u204c\",\n                                \"\\u204d\",\n                                \"\\u204e\",\n                                \"\\u204f\",\n                                \"\\u2050\",\n                                \"\\u2051\",\n                                \"\\u2053\",\n                                \"\\u2055\",\n                                \"\\u2056\",\n                                \"\\u2058\",\n                                \"\\u2059\",\n                                \"\\u205a\",\n                                \"\\u205b\",\n                                \"\\u205c\",\n                                \"\\u205d\",\n                                \"\\u205e\",\n                                \"\\ufe10\",\n                                \"\\ufe14\",\n                                \"\\ufe15\",\n                                \"\\ufe16\",\n                                \"\\ufe30\",\n                                \"\\ufe45\",\n                                \"\\ufe46\",\n                                \"\\ufe49\",\n                                \"\\ufe4a\",\n                                \"\\ufe4b\",\n                                \"\\ufe4c\",\n                                \"\\ufe54\",\n                                \"\\ufe56\",\n                                \"\\ufe57\",\n                                \"\\ufe5f\",\n                                \"\\ufe60\",\n                                \"\\ufe61\",\n                                \"\\ufe68\",\n                                \"\\ufe6a\",\n                                \"\\ufe6b\",\n                                \"\\uff01\",\n                                \"\\uff02\",\n                                \"\\uff03\",\n                                \"\\uff05\",\n                                \"\\uff06\",\n                                \"\\uff07\",\n                                \"\\uff0a\",\n                                \"\\uff0f\",\n                                \"\\uff1b\",\n                                \"\\uff1f\",\n                                \"\\uff20\",\n                                \"\\uff3c\",\n                            ],\n                            type: \"punctuation\",\n                            role: \"unknown\",\n                        },\n                        {\n                            set: [\"\\ufe13\", \":\", \"\\uff1a\", \"\\ufe55\"],\n                            type: \"punctuation\",\n                            role: \"colon\",\n                        },\n                        { set: n, type: \"punctuation\", role: \"comma\" },\n                        {\n                            set: [\n                                \"\\u2026\",\n                                \"\\u22ee\",\n                                \"\\u22ef\",\n                                \"\\u22f0\",\n                                \"\\u22f1\",\n                                \"\\ufe19\",\n                            ],\n                            type: \"punctuation\",\n                            role: \"ellipsis\",\n                        },\n                        {\n                            set: [\".\", \"\\ufe52\", \"\\uff0e\"],\n                            type: \"punctuation\",\n                            role: \"fullstop\",\n                        },\n                        { set: o, type: \"operator\", role: \"dash\" },\n                        { set: i, type: \"operator\", role: \"tilde\" },\n                        {\n                            set: [\n                                \"'\",\n                                \"\\u2032\",\n                                \"\\u2033\",\n                                \"\\u2034\",\n                                \"\\u2035\",\n                                \"\\u2036\",\n                                \"\\u2037\",\n                                \"\\u2057\",\n                                \"\\u02b9\",\n                                \"\\u02ba\",\n                            ],\n                            type: \"punctuation\",\n                            role: \"prime\",\n                        },\n                        { set: [\"\\xb0\"], type: \"punctuation\", role: \"degree\" },\n                        { set: l, type: \"fence\", role: \"open\" },\n                        { set: c, type: \"fence\", role: \"close\" },\n                        { set: u, type: \"fence\", role: \"top\" },\n                        { set: p, type: \"fence\", role: \"bottom\" },\n                        { set: h, type: \"fence\", role: \"neutral\" },\n                        { set: f, type: \"fence\", role: \"metric\" },\n                        {\n                            set: m,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"normal\",\n                        },\n                        {\n                            set: d,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"normal\",\n                        },\n                        {\n                            set: g,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"normal\",\n                        },\n                        {\n                            set: y,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"normal\",\n                        },\n                        {\n                            set: v,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"bold\",\n                        },\n                        {\n                            set: b,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"bold\",\n                        },\n                        {\n                            set: S,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"italic\",\n                        },\n                        {\n                            set: _,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"italic\",\n                        },\n                        {\n                            set: O,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"bold-italic\",\n                        },\n                        {\n                            set: M,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"bold-italic\",\n                        },\n                        {\n                            set: E,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"script\",\n                        },\n                        {\n                            set: x,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"script\",\n                        },\n                        {\n                            set: C,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"bold-script\",\n                        },\n                        {\n                            set: A,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"bold-script\",\n                        },\n                        {\n                            set: N,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"fraktur\",\n                        },\n                        {\n                            set: T,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"fraktur\",\n                        },\n                        {\n                            set: L,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"double-struck\",\n                        },\n                        {\n                            set: w,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"double-struck\",\n                        },\n                        {\n                            set: P,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"bold-fraktur\",\n                        },\n                        {\n                            set: I,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"bold-fraktur\",\n                        },\n                        {\n                            set: k,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"sans-serif\",\n                        },\n                        {\n                            set: R,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"sans-serif\",\n                        },\n                        {\n                            set: B,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"sans-serif-bold\",\n                        },\n                        {\n                            set: j,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"sans-serif-bold\",\n                        },\n                        {\n                            set: F,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"sans-serif-italic\",\n                        },\n                        {\n                            set: D,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"sans-serif-italic\",\n                        },\n                        {\n                            set: U,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"sans-serif-bold-italic\",\n                        },\n                        {\n                            set: H,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"sans-serif-bold-italic\",\n                        },\n                        {\n                            set: V,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"monospace\",\n                        },\n                        {\n                            set: X,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"monospace\",\n                        },\n                        {\n                            set: q,\n                            type: \"identifier\",\n                            role: \"latinletter\",\n                            font: \"double-struck-italic\",\n                        },\n                        {\n                            set: G,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"normal\",\n                        },\n                        {\n                            set: W,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"normal\",\n                        },\n                        {\n                            set: J,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"bold\",\n                        },\n                        {\n                            set: z,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"bold\",\n                        },\n                        {\n                            set: $,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"italic\",\n                        },\n                        {\n                            set: K,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"italic\",\n                        },\n                        {\n                            set: Z,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"bold-italic\",\n                        },\n                        {\n                            set: Y,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"bold-italic\",\n                        },\n                        {\n                            set: tt,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"sans-serif-bold\",\n                        },\n                        {\n                            set: Q,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"sans-serif-bold\",\n                        },\n                        {\n                            set: et,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"sans-serif-bold-italic\",\n                        },\n                        {\n                            set: rt,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"sans-serif-bold-italic\",\n                        },\n                        {\n                            set: nt,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"double-struck\",\n                        },\n                        {\n                            set: ot,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"normal\",\n                        },\n                        {\n                            set: it,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"bold\",\n                        },\n                        {\n                            set: st,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"italic\",\n                        },\n                        {\n                            set: at,\n                            type: \"identifier\",\n                            role: \"greekletter\",\n                            font: \"sans-serif-bold\",\n                        },\n                        {\n                            set: lt,\n                            type: \"identifier\",\n                            role: \"otherletter\",\n                            font: \"normal\",\n                        },\n                        {\n                            set: [\n                                \"0\",\n                                \"1\",\n                                \"2\",\n                                \"3\",\n                                \"4\",\n                                \"5\",\n                                \"6\",\n                                \"7\",\n                                \"8\",\n                                \"9\",\n                            ],\n                            type: \"number\",\n                            role: \"integer\",\n                            font: \"normal\",\n                        },\n                        {\n                            set: [\n                                \"\\uff10\",\n                                \"\\uff11\",\n                                \"\\uff12\",\n                                \"\\uff13\",\n                                \"\\uff14\",\n                                \"\\uff15\",\n                                \"\\uff16\",\n                                \"\\uff17\",\n                                \"\\uff18\",\n                                \"\\uff19\",\n                            ],\n                            type: \"number\",\n                            role: \"integer\",\n                            font: \"normal\",\n                        },\n                        {\n                            set: [\n                                \"\\ud835\\udfce\",\n                                \"\\ud835\\udfcf\",\n                                \"\\ud835\\udfd0\",\n                                \"\\ud835\\udfd1\",\n                                \"\\ud835\\udfd2\",\n                                \"\\ud835\\udfd3\",\n                                \"\\ud835\\udfd4\",\n                                \"\\ud835\\udfd5\",\n                                \"\\ud835\\udfd6\",\n                                \"\\ud835\\udfd7\",\n                            ],\n                            type: \"number\",\n                            role: \"integer\",\n                            font: \"bold\",\n                        },\n                        {\n                            set: [\n                                \"\\ud835\\udfd8\",\n                                \"\\ud835\\udfd9\",\n                                \"\\ud835\\udfda\",\n                                \"\\ud835\\udfdb\",\n                                \"\\ud835\\udfdc\",\n                                \"\\ud835\\udfdd\",\n                                \"\\ud835\\udfde\",\n                                \"\\ud835\\udfdf\",\n                                \"\\ud835\\udfe0\",\n                                \"\\ud835\\udfe1\",\n                            ],\n                            type: \"number\",\n                            role: \"integer\",\n                            font: \"double-struck\",\n                        },\n                        {\n                            set: [\n                                \"\\ud835\\udfe2\",\n                                \"\\ud835\\udfe3\",\n                                \"\\ud835\\udfe4\",\n                                \"\\ud835\\udfe5\",\n                                \"\\ud835\\udfe6\",\n                                \"\\ud835\\udfe7\",\n                                \"\\ud835\\udfe8\",\n                                \"\\ud835\\udfe9\",\n                                \"\\ud835\\udfea\",\n                                \"\\ud835\\udfeb\",\n                            ],\n                            type: \"number\",\n                            role: \"integer\",\n                            font: \"sans-serif\",\n                        },\n                        {\n                            set: [\n                                \"\\ud835\\udfec\",\n                                \"\\ud835\\udfed\",\n                                \"\\ud835\\udfee\",\n                                \"\\ud835\\udfef\",\n                                \"\\ud835\\udff0\",\n                                \"\\ud835\\udff1\",\n                                \"\\ud835\\udff2\",\n                                \"\\ud835\\udff3\",\n                                \"\\ud835\\udff4\",\n                                \"\\ud835\\udff5\",\n                            ],\n                            type: \"number\",\n                            role: \"integer\",\n                            font: \"sans-serif-bold\",\n                        },\n                        {\n                            set: [\n                                \"\\ud835\\udff6\",\n                                \"\\ud835\\udff7\",\n                                \"\\ud835\\udff8\",\n                                \"\\ud835\\udff9\",\n                                \"\\ud835\\udffa\",\n                                \"\\ud835\\udffb\",\n                                \"\\ud835\\udffc\",\n                                \"\\ud835\\udffd\",\n                                \"\\ud835\\udffe\",\n                                \"\\ud835\\udfff\",\n                            ],\n                            type: \"number\",\n                            role: \"integer\",\n                            font: \"monospace\",\n                        },\n                        { set: mt, type: \"number\", role: \"float\" },\n                        { set: yt, type: \"number\", role: \"othernumber\" },\n                        { set: ut, type: \"operator\", role: \"addition\" },\n                        { set: ht, type: \"operator\", role: \"multiplication\" },\n                        {\n                            set: [\n                                \"\\xaf\",\n                                \"-\",\n                                \"\\u2052\",\n                                \"\\u207b\",\n                                \"\\u208b\",\n                                \"\\u2212\",\n                                \"\\u2216\",\n                                \"\\u2238\",\n                                \"\\u2242\",\n                                \"\\u2296\",\n                                \"\\u229f\",\n                                \"\\u2796\",\n                                \"\\u2a29\",\n                                \"\\u2a2a\",\n                                \"\\u2a2b\",\n                                \"\\u2a2c\",\n                                \"\\u2a3a\",\n                                \"\\u2a41\",\n                                \"\\ufe63\",\n                                \"\\uff0d\",\n                                \"\\u2010\",\n                                \"\\u2011\",\n                            ],\n                            type: \"operator\",\n                            role: \"subtraction\",\n                        },\n                        {\n                            set: [\n                                \"/\",\n                                \"\\xf7\",\n                                \"\\u2044\",\n                                \"\\u2215\",\n                                \"\\u2298\",\n                                \"\\u27cc\",\n                                \"\\u29bc\",\n                                \"\\u2a38\",\n                            ],\n                            type: \"operator\",\n                            role: \"division\",\n                        },\n                        {\n                            set: [\n                                \"\\u2200\",\n                                \"\\u2203\",\n                                \"\\u2206\",\n                                \"\\u2207\",\n                                \"\\u2202\",\n                                \"\\u2201\",\n                                \"\\u2204\",\n                            ],\n                            type: \"operator\",\n                            role: \"prefix operator\",\n                        },\n                        {\n                            set: [\n                                \"\\ud835\\udec1\",\n                                \"\\ud835\\udedb\",\n                                \"\\ud835\\udfca\",\n                                \"\\ud835\\udfcb\",\n                            ],\n                            type: \"operator\",\n                            role: \"prefix operator\",\n                            font: \"bold\",\n                        },\n                        {\n                            set: [\"\\ud835\\udefb\", \"\\ud835\\udf15\"],\n                            type: \"operator\",\n                            role: \"prefix operator\",\n                            font: \"italic\",\n                        },\n                        {\n                            set: [\"\\ud835\\udf6f\", \"\\ud835\\udf89\"],\n                            type: \"operator\",\n                            role: \"prefix operator\",\n                            font: \"sans-serif-bold\",\n                        },\n                        {\n                            set: [\n                                \"=\",\n                                \"~\",\n                                \"\\u207c\",\n                                \"\\u208c\",\n                                \"\\u223c\",\n                                \"\\u223d\",\n                                \"\\u2243\",\n                                \"\\u2245\",\n                                \"\\u2248\",\n                                \"\\u224a\",\n                                \"\\u224b\",\n                                \"\\u224c\",\n                                \"\\u224d\",\n                                \"\\u224e\",\n                                \"\\u2251\",\n                                \"\\u2252\",\n                                \"\\u2253\",\n                                \"\\u2254\",\n                                \"\\u2255\",\n                                \"\\u2256\",\n                                \"\\u2257\",\n                                \"\\u2258\",\n                                \"\\u2259\",\n                                \"\\u225a\",\n                                \"\\u225b\",\n                                \"\\u225c\",\n                                \"\\u225d\",\n                                \"\\u225e\",\n                                \"\\u225f\",\n                                \"\\u2261\",\n                                \"\\u2263\",\n                                \"\\u29e4\",\n                                \"\\u2a66\",\n                                \"\\u2a6e\",\n                                \"\\u2a6f\",\n                                \"\\u2a70\",\n                                \"\\u2a71\",\n                                \"\\u2a72\",\n                                \"\\u2a73\",\n                                \"\\u2a74\",\n                                \"\\u2a75\",\n                                \"\\u2a76\",\n                                \"\\u2a77\",\n                                \"\\u2a78\",\n                                \"\\u22d5\",\n                                \"\\u2a6d\",\n                                \"\\u2a6a\",\n                                \"\\u2a6b\",\n                                \"\\u2a6c\",\n                                \"\\ufe66\",\n                                \"\\uff1d\",\n                                \"\\u2a6c\",\n                                \"\\u229c\",\n                                \"\\u2237\",\n                            ],\n                            type: \"relation\",\n                            role: \"equality\",\n                        },\n                        {\n                            set: [\n                                \"<\",\n                                \">\",\n                                \"\\u2241\",\n                                \"\\u2242\",\n                                \"\\u2244\",\n                                \"\\u2246\",\n                                \"\\u2247\",\n                                \"\\u2249\",\n                                \"\\u224f\",\n                                \"\\u2250\",\n                                \"\\u2260\",\n                                \"\\u2262\",\n                                \"\\u2264\",\n                                \"\\u2265\",\n                                \"\\u2266\",\n                                \"\\u2267\",\n                                \"\\u2268\",\n                                \"\\u2269\",\n                                \"\\u226a\",\n                                \"\\u226b\",\n                                \"\\u226c\",\n                                \"\\u226d\",\n                                \"\\u226e\",\n                                \"\\u226f\",\n                                \"\\u2270\",\n                                \"\\u2271\",\n                                \"\\u2272\",\n                                \"\\u2273\",\n                                \"\\u2274\",\n                                \"\\u2275\",\n                                \"\\u2276\",\n                                \"\\u2277\",\n                                \"\\u2278\",\n                                \"\\u2279\",\n                                \"\\u227a\",\n                                \"\\u227b\",\n                                \"\\u227c\",\n                                \"\\u227d\",\n                                \"\\u227e\",\n                                \"\\u227f\",\n                                \"\\u2280\",\n                                \"\\u2281\",\n                                \"\\u22d6\",\n                                \"\\u22d7\",\n                                \"\\u22d8\",\n                                \"\\u22d9\",\n                                \"\\u22da\",\n                                \"\\u22db\",\n                                \"\\u22dc\",\n                                \"\\u22dd\",\n                                \"\\u22de\",\n                                \"\\u22df\",\n                                \"\\u22e0\",\n                                \"\\u22e1\",\n                                \"\\u22e6\",\n                                \"\\u22e7\",\n                                \"\\u22e8\",\n                                \"\\u22e9\",\n                                \"\\u2a79\",\n                                \"\\u2a7a\",\n                                \"\\u2a7b\",\n                                \"\\u2a7c\",\n                                \"\\u2a7d\",\n                                \"\\u2a7e\",\n                                \"\\u2a7f\",\n                                \"\\u2a80\",\n                                \"\\u2a81\",\n                                \"\\u2a82\",\n                                \"\\u2a83\",\n                                \"\\u2a84\",\n                                \"\\u2a85\",\n                                \"\\u2a86\",\n                                \"\\u2a87\",\n                                \"\\u2a88\",\n                                \"\\u2a89\",\n                                \"\\u2a8a\",\n                                \"\\u2a8b\",\n                                \"\\u2a8c\",\n                                \"\\u2a8d\",\n                                \"\\u2a8e\",\n                                \"\\u2a8f\",\n                                \"\\u2a90\",\n                                \"\\u2a91\",\n                                \"\\u2a92\",\n                                \"\\u2a93\",\n                                \"\\u2a94\",\n                                \"\\u2a95\",\n                                \"\\u2a96\",\n                                \"\\u2a97\",\n                                \"\\u2a98\",\n                                \"\\u2a99\",\n                                \"\\u2a9a\",\n                                \"\\u2a9b\",\n                                \"\\u2a9c\",\n                                \"\\u2a9d\",\n                                \"\\u2a9e\",\n                                \"\\u2a9f\",\n                                \"\\u2aa0\",\n                                \"\\u2aa1\",\n                                \"\\u2aa2\",\n                                \"\\u2aa3\",\n                                \"\\u2aa4\",\n                                \"\\u2aa5\",\n                                \"\\u2aa6\",\n                                \"\\u2aa7\",\n                                \"\\u2aa8\",\n                                \"\\u2aa9\",\n                                \"\\u2aaa\",\n                                \"\\u2aab\",\n                                \"\\u2aac\",\n                                \"\\u2aad\",\n                                \"\\u2aae\",\n                                \"\\u2aaf\",\n                                \"\\u2ab0\",\n                                \"\\u2ab1\",\n                                \"\\u2ab2\",\n                                \"\\u2ab3\",\n                                \"\\u2ab4\",\n                                \"\\u2ab5\",\n                                \"\\u2ab6\",\n                                \"\\u2ab7\",\n                                \"\\u2ab8\",\n                                \"\\u2ab9\",\n                                \"\\u2aba\",\n                                \"\\u2abb\",\n                                \"\\u2abc\",\n                                \"\\u2af7\",\n                                \"\\u2af8\",\n                                \"\\u2af9\",\n                                \"\\u2afa\",\n                                \"\\u29c0\",\n                                \"\\u29c1\",\n                                \"\\ufe64\",\n                                \"\\ufe65\",\n                                \"\\uff1c\",\n                                \"\\uff1e\",\n                            ],\n                            type: \"relation\",\n                            role: \"inequality\",\n                        },\n                        {\n                            set: [\n                                \"\\u22e2\",\n                                \"\\u22e3\",\n                                \"\\u22e4\",\n                                \"\\u22e5\",\n                                \"\\u2282\",\n                                \"\\u2283\",\n                                \"\\u2284\",\n                                \"\\u2285\",\n                                \"\\u2286\",\n                                \"\\u2287\",\n                                \"\\u2288\",\n                                \"\\u2289\",\n                                \"\\u228a\",\n                                \"\\u228b\",\n                                \"\\u228f\",\n                                \"\\u2290\",\n                                \"\\u2291\",\n                                \"\\u2292\",\n                                \"\\u2abd\",\n                                \"\\u2abe\",\n                                \"\\u2abf\",\n                                \"\\u2ac0\",\n                                \"\\u2ac1\",\n                                \"\\u2ac2\",\n                                \"\\u2ac3\",\n                                \"\\u2ac4\",\n                                \"\\u2ac5\",\n                                \"\\u2ac6\",\n                                \"\\u2ac7\",\n                                \"\\u2ac8\",\n                                \"\\u2ac9\",\n                                \"\\u2aca\",\n                                \"\\u2acb\",\n                                \"\\u2acc\",\n                                \"\\u2acd\",\n                                \"\\u2ace\",\n                                \"\\u2acf\",\n                                \"\\u2ad0\",\n                                \"\\u2ad1\",\n                                \"\\u2ad2\",\n                                \"\\u2ad3\",\n                                \"\\u2ad4\",\n                                \"\\u2ad5\",\n                                \"\\u2ad6\",\n                                \"\\u2ad7\",\n                                \"\\u2ad8\",\n                                \"\\u22d0\",\n                                \"\\u22d1\",\n                                \"\\u22ea\",\n                                \"\\u22eb\",\n                                \"\\u22ec\",\n                                \"\\u22ed\",\n                                \"\\u22b2\",\n                                \"\\u22b3\",\n                                \"\\u22b4\",\n                                \"\\u22b5\",\n                            ],\n                            type: \"relation\",\n                            role: \"set\",\n                        },\n                        {\n                            set: [\n                                \"\\u22a2\",\n                                \"\\u22a3\",\n                                \"\\u22a6\",\n                                \"\\u22a7\",\n                                \"\\u22a8\",\n                                \"\\u22a9\",\n                                \"\\u22aa\",\n                                \"\\u22ab\",\n                                \"\\u22ac\",\n                                \"\\u22ad\",\n                                \"\\u22ae\",\n                                \"\\u22af\",\n                                \"\\u2ade\",\n                                \"\\u2adf\",\n                                \"\\u2ae0\",\n                                \"\\u2ae1\",\n                                \"\\u2ae2\",\n                                \"\\u2ae3\",\n                                \"\\u2ae4\",\n                                \"\\u2ae5\",\n                                \"\\u2ae6\",\n                                \"\\u2ae7\",\n                                \"\\u2ae8\",\n                                \"\\u2ae9\",\n                                \"\\u2aea\",\n                                \"\\u2aeb\",\n                                \"\\u2aec\",\n                                \"\\u2aed\",\n                            ],\n                            type: \"relation\",\n                            role: \"unknown\",\n                        },\n                        {\n                            set: [\n                                \"\\u2190\",\n                                \"\\u2191\",\n                                \"\\u2192\",\n                                \"\\u2193\",\n                                \"\\u2194\",\n                                \"\\u2195\",\n                                \"\\u2196\",\n                                \"\\u2197\",\n                                \"\\u2198\",\n                                \"\\u2199\",\n                                \"\\u219a\",\n                                \"\\u219b\",\n                                \"\\u219c\",\n                                \"\\u219d\",\n                                \"\\u219e\",\n                                \"\\u219f\",\n                                \"\\u21a0\",\n                                \"\\u21a1\",\n                                \"\\u21a2\",\n                                \"\\u21a3\",\n                                \"\\u21a4\",\n                                \"\\u21a5\",\n                                \"\\u21a6\",\n                                \"\\u21a7\",\n                                \"\\u21a8\",\n                                \"\\u21a9\",\n                                \"\\u21aa\",\n                                \"\\u21ab\",\n                                \"\\u21ac\",\n                                \"\\u21ad\",\n                                \"\\u21ae\",\n                                \"\\u21af\",\n                                \"\\u21b0\",\n                                \"\\u21b1\",\n                                \"\\u21b2\",\n                                \"\\u21b3\",\n                                \"\\u21b4\",\n                                \"\\u21b5\",\n                                \"\\u21b6\",\n                                \"\\u21b7\",\n                                \"\\u21b8\",\n                                \"\\u21b9\",\n                                \"\\u21ba\",\n                                \"\\u21bb\",\n                                \"\\u21c4\",\n                                \"\\u21c5\",\n                                \"\\u21c6\",\n                                \"\\u21c7\",\n                                \"\\u21c8\",\n                                \"\\u21c9\",\n                                \"\\u21ca\",\n                                \"\\u21cd\",\n                                \"\\u21ce\",\n                                \"\\u21cf\",\n                                \"\\u21d0\",\n                                \"\\u21d1\",\n                                \"\\u21d2\",\n                                \"\\u21d3\",\n                                \"\\u21d4\",\n                                \"\\u21d5\",\n                                \"\\u21d6\",\n                                \"\\u21d7\",\n                                \"\\u21d8\",\n                                \"\\u21d9\",\n                                \"\\u21da\",\n                                \"\\u21db\",\n                                \"\\u21dc\",\n                                \"\\u21dd\",\n                                \"\\u21de\",\n                                \"\\u21df\",\n                                \"\\u21e0\",\n                                \"\\u21e1\",\n                                \"\\u21e2\",\n                                \"\\u21e3\",\n                                \"\\u21e4\",\n                                \"\\u21e5\",\n                                \"\\u21e6\",\n                                \"\\u21e7\",\n                                \"\\u21e8\",\n                                \"\\u21e9\",\n                                \"\\u21ea\",\n                                \"\\u21eb\",\n                                \"\\u21ec\",\n                                \"\\u21ed\",\n                                \"\\u21ee\",\n                                \"\\u21ef\",\n                                \"\\u21f0\",\n                                \"\\u21f1\",\n                                \"\\u21f2\",\n                                \"\\u21f3\",\n                                \"\\u21f4\",\n                                \"\\u21f5\",\n                                \"\\u21f6\",\n                                \"\\u21f7\",\n                                \"\\u21f8\",\n                                \"\\u21f9\",\n                                \"\\u21fa\",\n                                \"\\u21fb\",\n                                \"\\u21fc\",\n                                \"\\u21fd\",\n                                \"\\u21fe\",\n                                \"\\u21ff\",\n                                \"\\u2301\",\n                                \"\\u2303\",\n                                \"\\u2304\",\n                                \"\\u2324\",\n                                \"\\u238b\",\n                                \"\\u2794\",\n                                \"\\u2798\",\n                                \"\\u2799\",\n                                \"\\u279a\",\n                                \"\\u279b\",\n                                \"\\u279c\",\n                                \"\\u279d\",\n                                \"\\u279e\",\n                                \"\\u279f\",\n                                \"\\u27a0\",\n                                \"\\u27a1\",\n                                \"\\u27a2\",\n                                \"\\u27a3\",\n                                \"\\u27a4\",\n                                \"\\u27a5\",\n                                \"\\u27a6\",\n                                \"\\u27a7\",\n                                \"\\u27a8\",\n                                \"\\u27a9\",\n                                \"\\u27aa\",\n                                \"\\u27ab\",\n                                \"\\u27ac\",\n                                \"\\u27ad\",\n                                \"\\u27ae\",\n                                \"\\u27af\",\n                                \"\\u27b1\",\n                                \"\\u27b2\",\n                                \"\\u27b3\",\n                                \"\\u27b4\",\n                                \"\\u27b5\",\n                                \"\\u27b6\",\n                                \"\\u27b7\",\n                                \"\\u27b8\",\n                                \"\\u27b9\",\n                                \"\\u27ba\",\n                                \"\\u27bb\",\n                                \"\\u27bc\",\n                                \"\\u27bd\",\n                                \"\\u27be\",\n                                \"\\u27f0\",\n                                \"\\u27f1\",\n                                \"\\u27f2\",\n                                \"\\u27f3\",\n                                \"\\u27f4\",\n                                \"\\u27f5\",\n                                \"\\u27f6\",\n                                \"\\u27f7\",\n                                \"\\u27f8\",\n                                \"\\u27f9\",\n                                \"\\u27fa\",\n                                \"\\u27fb\",\n                                \"\\u27fc\",\n                                \"\\u27fd\",\n                                \"\\u27fe\",\n                                \"\\u27ff\",\n                                \"\\u2900\",\n                                \"\\u2901\",\n                                \"\\u2902\",\n                                \"\\u2903\",\n                                \"\\u2904\",\n                                \"\\u2905\",\n                                \"\\u2906\",\n                                \"\\u2907\",\n                                \"\\u2908\",\n                                \"\\u2909\",\n                                \"\\u290a\",\n                                \"\\u290b\",\n                                \"\\u290c\",\n                                \"\\u290d\",\n                                \"\\u290e\",\n                                \"\\u290f\",\n                                \"\\u2910\",\n                                \"\\u2911\",\n                                \"\\u2912\",\n                                \"\\u2913\",\n                                \"\\u2914\",\n                                \"\\u2915\",\n                                \"\\u2916\",\n                                \"\\u2917\",\n                                \"\\u2918\",\n                                \"\\u2919\",\n                                \"\\u291a\",\n                                \"\\u291b\",\n                                \"\\u291c\",\n                                \"\\u291d\",\n                                \"\\u291e\",\n                                \"\\u291f\",\n                                \"\\u2920\",\n                                \"\\u2921\",\n                                \"\\u2922\",\n                                \"\\u2923\",\n                                \"\\u2924\",\n                                \"\\u2925\",\n                                \"\\u2926\",\n                                \"\\u2927\",\n                                \"\\u2928\",\n                                \"\\u2929\",\n                                \"\\u292a\",\n                                \"\\u292d\",\n                                \"\\u292e\",\n                                \"\\u292f\",\n                                \"\\u2930\",\n                                \"\\u2931\",\n                                \"\\u2932\",\n                                \"\\u2933\",\n                                \"\\u2934\",\n                                \"\\u2935\",\n                                \"\\u2936\",\n                                \"\\u2937\",\n                                \"\\u2938\",\n                                \"\\u2939\",\n                                \"\\u293a\",\n                                \"\\u293b\",\n                                \"\\u293c\",\n                                \"\\u293d\",\n                                \"\\u293e\",\n                                \"\\u293f\",\n                                \"\\u2940\",\n                                \"\\u2941\",\n                                \"\\u2942\",\n                                \"\\u2943\",\n                                \"\\u2944\",\n                                \"\\u2945\",\n                                \"\\u2946\",\n                                \"\\u2947\",\n                                \"\\u2948\",\n                                \"\\u2949\",\n                                \"\\u2970\",\n                                \"\\u2971\",\n                                \"\\u2972\",\n                                \"\\u2973\",\n                                \"\\u2974\",\n                                \"\\u2975\",\n                                \"\\u2976\",\n                                \"\\u2977\",\n                                \"\\u2978\",\n                                \"\\u2979\",\n                                \"\\u297a\",\n                                \"\\u297b\",\n                                \"\\u29b3\",\n                                \"\\u29b4\",\n                                \"\\u29bd\",\n                                \"\\u29ea\",\n                                \"\\u29ec\",\n                                \"\\u29ed\",\n                                \"\\u2a17\",\n                                \"\\u2b00\",\n                                \"\\u2b01\",\n                                \"\\u2b02\",\n                                \"\\u2b03\",\n                                \"\\u2b04\",\n                                \"\\u2b05\",\n                                \"\\u2b06\",\n                                \"\\u2b07\",\n                                \"\\u2b08\",\n                                \"\\u2b09\",\n                                \"\\u2b0a\",\n                                \"\\u2b0b\",\n                                \"\\u2b0c\",\n                                \"\\u2b0d\",\n                                \"\\u2b0e\",\n                                \"\\u2b0f\",\n                                \"\\u2b10\",\n                                \"\\u2b11\",\n                                \"\\u2b30\",\n                                \"\\u2b31\",\n                                \"\\u2b32\",\n                                \"\\u2b33\",\n                                \"\\u2b34\",\n                                \"\\u2b35\",\n                                \"\\u2b36\",\n                                \"\\u2b37\",\n                                \"\\u2b38\",\n                                \"\\u2b39\",\n                                \"\\u2b3a\",\n                                \"\\u2b3b\",\n                                \"\\u2b3c\",\n                                \"\\u2b3d\",\n                                \"\\u2b3e\",\n                                \"\\u2b3f\",\n                                \"\\u2b40\",\n                                \"\\u2b41\",\n                                \"\\u2b42\",\n                                \"\\u2b43\",\n                                \"\\u2b44\",\n                                \"\\u2b45\",\n                                \"\\u2b46\",\n                                \"\\u2b47\",\n                                \"\\u2b48\",\n                                \"\\u2b49\",\n                                \"\\u2b4a\",\n                                \"\\u2b4b\",\n                                \"\\u2b4c\",\n                                \"\\uffe9\",\n                                \"\\uffea\",\n                                \"\\uffeb\",\n                                \"\\uffec\",\n                                \"\\u21bc\",\n                                \"\\u21bd\",\n                                \"\\u21be\",\n                                \"\\u21bf\",\n                                \"\\u21c0\",\n                                \"\\u21c1\",\n                                \"\\u21c2\",\n                                \"\\u21c3\",\n                                \"\\u21cb\",\n                                \"\\u21cc\",\n                                \"\\u294a\",\n                                \"\\u294b\",\n                                \"\\u294c\",\n                                \"\\u294d\",\n                                \"\\u294e\",\n                                \"\\u294f\",\n                                \"\\u2950\",\n                                \"\\u2951\",\n                                \"\\u2952\",\n                                \"\\u2953\",\n                                \"\\u2954\",\n                                \"\\u2955\",\n                                \"\\u2956\",\n                                \"\\u2957\",\n                                \"\\u2958\",\n                                \"\\u2959\",\n                                \"\\u295a\",\n                                \"\\u295b\",\n                                \"\\u295c\",\n                                \"\\u295d\",\n                                \"\\u295e\",\n                                \"\\u295f\",\n                                \"\\u2960\",\n                                \"\\u2961\",\n                                \"\\u2962\",\n                                \"\\u2963\",\n                                \"\\u2964\",\n                                \"\\u2965\",\n                                \"\\u2966\",\n                                \"\\u2967\",\n                                \"\\u2968\",\n                                \"\\u2969\",\n                                \"\\u296a\",\n                                \"\\u296b\",\n                                \"\\u296c\",\n                                \"\\u296d\",\n                                \"\\u296e\",\n                                \"\\u296f\",\n                                \"\\u297c\",\n                                \"\\u297d\",\n                                \"\\u297e\",\n                                \"\\u297f\",\n                            ],\n                            type: \"relation\",\n                            role: \"arrow\",\n                        },\n                        {\n                            set: [\n                                \"\\u2208\",\n                                \"\\u220a\",\n                                \"\\u22f2\",\n                                \"\\u22f3\",\n                                \"\\u22f4\",\n                                \"\\u22f5\",\n                                \"\\u22f6\",\n                                \"\\u22f7\",\n                                \"\\u22f8\",\n                                \"\\u22f9\",\n                                \"\\u22ff\",\n                            ],\n                            type: \"operator\",\n                            role: \"element\",\n                        },\n                        {\n                            set: [\"\\u2209\"],\n                            type: \"operator\",\n                            role: \"nonelement\",\n                        },\n                        {\n                            set: [\n                                \"\\u220b\",\n                                \"\\u220d\",\n                                \"\\u22fa\",\n                                \"\\u22fb\",\n                                \"\\u22fc\",\n                                \"\\u22fd\",\n                                \"\\u22fe\",\n                            ],\n                            type: \"operator\",\n                            role: \"reelement\",\n                        },\n                        {\n                            set: [\"\\u220c\"],\n                            type: \"operator\",\n                            role: \"renonelement\",\n                        },\n                        {\n                            set: [\n                                \"\\u2140\",\n                                \"\\u220f\",\n                                \"\\u2210\",\n                                \"\\u2211\",\n                                \"\\u22c0\",\n                                \"\\u22c1\",\n                                \"\\u22c2\",\n                                \"\\u22c3\",\n                                \"\\u2a00\",\n                                \"\\u2a01\",\n                                \"\\u2a02\",\n                                \"\\u2a03\",\n                                \"\\u2a04\",\n                                \"\\u2a05\",\n                                \"\\u2a06\",\n                                \"\\u2a07\",\n                                \"\\u2a08\",\n                                \"\\u2a09\",\n                                \"\\u2a0a\",\n                                \"\\u2a0b\",\n                                \"\\u2afc\",\n                                \"\\u2aff\",\n                            ],\n                            type: \"largeop\",\n                            role: \"sum\",\n                        },\n                        {\n                            set: [\n                                \"\\u222b\",\n                                \"\\u222c\",\n                                \"\\u222d\",\n                                \"\\u222e\",\n                                \"\\u222f\",\n                                \"\\u2230\",\n                                \"\\u2231\",\n                                \"\\u2232\",\n                                \"\\u2233\",\n                                \"\\u2a0c\",\n                                \"\\u2a0d\",\n                                \"\\u2a0e\",\n                                \"\\u2a0f\",\n                                \"\\u2a10\",\n                                \"\\u2a11\",\n                                \"\\u2a12\",\n                                \"\\u2a13\",\n                                \"\\u2a14\",\n                                \"\\u2a15\",\n                                \"\\u2a16\",\n                                \"\\u2a17\",\n                                \"\\u2a18\",\n                                \"\\u2a19\",\n                                \"\\u2a1a\",\n                                \"\\u2a1b\",\n                                \"\\u2a1c\",\n                            ],\n                            type: \"largeop\",\n                            role: \"integral\",\n                        },\n                        {\n                            set: [\n                                \"\\u221f\",\n                                \"\\u2220\",\n                                \"\\u2221\",\n                                \"\\u2222\",\n                                \"\\u22be\",\n                                \"\\u22bf\",\n                                \"\\u25b3\",\n                                \"\\u25b7\",\n                                \"\\u25bd\",\n                                \"\\u25c1\",\n                            ],\n                            type: \"operator\",\n                            role: \"geometry\",\n                        },\n                        {\n                            set: [\n                                \"inf\",\n                                \"lim\",\n                                \"liminf\",\n                                \"limsup\",\n                                \"max\",\n                                \"min\",\n                                \"sup\",\n                                \"injlim\",\n                                \"projlim\",\n                                \"inj lim\",\n                                \"proj lim\",\n                            ],\n                            type: \"function\",\n                            role: \"limit function\",\n                        },\n                        { set: gt, type: \"function\", role: \"prefix function\" },\n                        {\n                            set: [\"mod\", \"rem\"],\n                            type: \"operator\",\n                            role: \"prefix function\",\n                        },\n                    ],\n                    vt = (function () {\n                        const t = {};\n                        for (let e, r = 0; (e = bt[r]); r++)\n                            e.set.forEach(function (r) {\n                                t[r] = {\n                                    role: e.role || \"unknown\",\n                                    type: e.type || \"unknown\",\n                                    font: e.font || \"unknown\",\n                                };\n                            });\n                        return t;\n                    })();\n                (e.equal = function (t, e) {\n                    return (\n                        t.type === e.type &&\n                        t.role === e.role &&\n                        t.font === e.font\n                    );\n                }),\n                    (e.lookupType = function (t) {\n                        var e;\n                        return (\n                            (null === (e = vt[t]) || void 0 === e\n                                ? void 0\n                                : e.type) || \"unknown\"\n                        );\n                    }),\n                    (e.lookupRole = function (t) {\n                        var e;\n                        return (\n                            (null === (e = vt[t]) || void 0 === e\n                                ? void 0\n                                : e.role) || \"unknown\"\n                        );\n                    }),\n                    (e.lookupMeaning = function (t) {\n                        return (\n                            vt[t] || {\n                                role: \"unknown\",\n                                type: \"unknown\",\n                                font: \"unknown\",\n                            }\n                        );\n                    }),\n                    (e.invisibleTimes = function () {\n                        return ft;\n                    }),\n                    (e.invisiblePlus = function () {\n                        return pt;\n                    }),\n                    (e.invisibleComma = function () {\n                        return r;\n                    }),\n                    (e.functionApplication = function () {\n                        return dt;\n                    }),\n                    (e.isMatchingFence = function (t, e) {\n                        return -1 !== h.indexOf(t) || -1 !== f.indexOf(t)\n                            ? t === e\n                            : s[t] === e || a[t] === e;\n                    }),\n                    (e.isEmbellishedType = function (t) {\n                        return (\n                            \"operator\" === t ||\n                            \"relation\" === t ||\n                            \"fence\" === t ||\n                            \"punctuation\" === t\n                        );\n                    });\n                const _t = new Map();\n                function St(t, e) {\n                    return `${t} ${e}`;\n                }\n                function Mt(t, e, r = \"\") {\n                    for (const n of e) _t.set(St(t, n), r || t);\n                }\n                Mt(\"d\", [\n                    \"d\",\n                    \"\\u2146\",\n                    \"\\uff44\",\n                    \"\\ud835\\udc1d\",\n                    \"\\ud835\\udc51\",\n                    \"\\ud835\\udcb9\",\n                    \"\\ud835\\udced\",\n                    \"\\ud835\\udd21\",\n                    \"\\ud835\\udd55\",\n                    \"\\ud835\\udd89\",\n                    \"\\ud835\\uddbd\",\n                    \"\\ud835\\uddf1\",\n                    \"\\ud835\\ude25\",\n                    \"\\ud835\\ude8d\",\n                ]),\n                    Mt(\"bar\", o),\n                    Mt(\"tilde\", i),\n                    (e.lookupSecondary = function (t, e) {\n                        return _t.get(St(t, e));\n                    });\n            },\n            8158: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticMeaningCollator =\n                        e.SemanticNodeCollator =\n                        e.SemanticDefault =\n                            void 0);\n                const n = r(3588),\n                    o = r(3882);\n                class i {\n                    constructor() {\n                        this.map = {};\n                    }\n                    static key(t, e) {\n                        return e ? t + \":\" + e : t;\n                    }\n                    add(t, e) {\n                        this.map[i.key(t, e.font)] = e;\n                    }\n                    addNode(t) {\n                        this.add(t.textContent, t.meaning());\n                    }\n                    retrieve(t, e) {\n                        return this.map[i.key(t, e)];\n                    }\n                    retrieveNode(t) {\n                        return this.retrieve(t.textContent, t.font);\n                    }\n                    size() {\n                        return Object.keys(this.map).length;\n                    }\n                }\n                e.SemanticDefault = i;\n                class s {\n                    constructor() {\n                        this.map = {};\n                    }\n                    add(t, e) {\n                        const r = this.map[t];\n                        r ? r.push(e) : (this.map[t] = [e]);\n                    }\n                    retrieve(t, e) {\n                        return this.map[i.key(t, e)];\n                    }\n                    retrieveNode(t) {\n                        return this.retrieve(t.textContent, t.font);\n                    }\n                    copy() {\n                        const t = this.copyCollator();\n                        for (const e in this.map) t.map[e] = this.map[e];\n                        return t;\n                    }\n                    minimize() {\n                        for (const t in this.map)\n                            1 === this.map[t].length && delete this.map[t];\n                    }\n                    minimalCollator() {\n                        const t = this.copy();\n                        for (const e in t.map)\n                            1 === t.map[e].length && delete t.map[e];\n                        return t;\n                    }\n                    isMultiValued() {\n                        for (const t in this.map)\n                            if (this.map[t].length > 1) return !0;\n                        return !1;\n                    }\n                    isEmpty() {\n                        return !Object.keys(this.map).length;\n                    }\n                }\n                class a extends s {\n                    copyCollator() {\n                        return new a();\n                    }\n                    add(t, e) {\n                        const r = i.key(t, e.font);\n                        super.add(r, e);\n                    }\n                    addNode(t) {\n                        this.add(t.textContent, t);\n                    }\n                    toString() {\n                        const t = [];\n                        for (const e in this.map) {\n                            const r = Array(e.length + 3).join(\" \"),\n                                n = this.map[e],\n                                o = [];\n                            for (let t, e = 0; (t = n[e]); e++)\n                                o.push(t.toString());\n                            t.push(e + \": \" + o.join(\"\\n\" + r));\n                        }\n                        return t.join(\"\\n\");\n                    }\n                    collateMeaning() {\n                        const t = new l();\n                        for (const e in this.map)\n                            t.map[e] = this.map[e].map(function (t) {\n                                return t.meaning();\n                            });\n                        return t;\n                    }\n                }\n                e.SemanticNodeCollator = a;\n                class l extends s {\n                    copyCollator() {\n                        return new l();\n                    }\n                    add(t, e) {\n                        const r = this.retrieve(t, e.font);\n                        if (\n                            !r ||\n                            !r.find(function (t) {\n                                return n.equal(t, e);\n                            })\n                        ) {\n                            const r = i.key(t, e.font);\n                            super.add(r, e);\n                        }\n                    }\n                    addNode(t) {\n                        this.add(t.textContent, t.meaning());\n                    }\n                    toString() {\n                        const t = [];\n                        for (const e in this.map) {\n                            const r = Array(e.length + 3).join(\" \"),\n                                n = this.map[e],\n                                o = [];\n                            for (let t, e = 0; (t = n[e]); e++)\n                                o.push(\n                                    \"{type: \" +\n                                        t.type +\n                                        \", role: \" +\n                                        t.role +\n                                        \", font: \" +\n                                        t.font +\n                                        \"}\"\n                                );\n                            t.push(e + \": \" + o.join(\"\\n\" + r));\n                        }\n                        return t.join(\"\\n\");\n                    }\n                    reduce() {\n                        for (const t in this.map)\n                            1 !== this.map[t].length &&\n                                (this.map[t] = (0, o.reduce)(this.map[t]));\n                    }\n                    default() {\n                        const t = new i();\n                        for (const e in this.map)\n                            1 === this.map[e].length &&\n                                (t.map[e] = this.map[e][0]);\n                        return t;\n                    }\n                    newDefault() {\n                        const t = this.default();\n                        this.reduce();\n                        const e = this.default();\n                        return t.size() !== e.size() ? e : null;\n                    }\n                }\n                e.SemanticMeaningCollator = l;\n            },\n            9911: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticMultiHeuristic =\n                        e.SemanticTreeHeuristic =\n                        e.SemanticAbstractHeuristic =\n                            void 0);\n                class r {\n                    constructor(t, e, r = (t) => !1) {\n                        (this.name = t),\n                            (this.apply = e),\n                            (this.applicable = r);\n                    }\n                }\n                e.SemanticAbstractHeuristic = r;\n                e.SemanticTreeHeuristic = class extends r {};\n                e.SemanticMultiHeuristic = class extends r {};\n            },\n            7516: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.lookup =\n                        e.run =\n                        e.add =\n                        e.blacklist =\n                        e.flags =\n                        e.updateFactory =\n                        e.factory =\n                            void 0),\n                    (e.factory = null),\n                    (e.updateFactory = function (t) {\n                        e.factory = t;\n                    });\n                const r = new Map();\n                function n(t) {\n                    return r.get(t);\n                }\n                (e.flags = {\n                    combine_juxtaposition: !0,\n                    convert_juxtaposition: !0,\n                    multioperator: !0,\n                }),\n                    (e.blacklist = {}),\n                    (e.add = function (t) {\n                        const n = t.name;\n                        r.set(n, t), e.flags[n] || (e.flags[n] = !1);\n                    }),\n                    (e.run = function (t, r, o) {\n                        const i = n(t);\n                        return i &&\n                            !e.blacklist[t] &&\n                            (e.flags[t] || i.applicable(r))\n                            ? i.apply(r)\n                            : o\n                              ? o(r)\n                              : r;\n                    }),\n                    (e.lookup = n);\n            },\n            94: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                const n = r(2057),\n                    o = r(5897),\n                    i = r(3588),\n                    s = r(7516),\n                    a = r(9911),\n                    l = r(5609),\n                    c = r(3308),\n                    u = r(4795);\n                function p(t, e, r) {\n                    let n = null;\n                    if (!t.length) return n;\n                    const o = r[r.length - 1],\n                        i = o && o.length,\n                        s = e && e.length,\n                        a = c.default.getInstance();\n                    if (i && s) {\n                        if (\"infixop\" === e[0].type && \"implicit\" === e[0].role)\n                            return (\n                                (n = t.pop()),\n                                o.push(a.postfixNode_(o.pop(), t)),\n                                n\n                            );\n                        n = t.shift();\n                        const r = a.prefixNode_(e.shift(), t);\n                        return e.unshift(r), n;\n                    }\n                    return i\n                        ? (o.push(a.postfixNode_(o.pop(), t)), n)\n                        : (s && e.unshift(a.prefixNode_(e.shift(), t)), n);\n                }\n                function h(t, e, r) {\n                    if (!e.length) return t;\n                    const o = t.pop(),\n                        i = e.shift(),\n                        a = r.shift();\n                    if (l.isImplicitOp(i)) {\n                        n.Debugger.getInstance().output(\n                            \"Juxta Heuristic Case 2\"\n                        );\n                        const s = (o ? [o, i] : [i]).concat(a);\n                        return h(t.concat(s), e, r);\n                    }\n                    if (!o)\n                        return (\n                            n.Debugger.getInstance().output(\n                                \"Juxta Heuristic Case 3\"\n                            ),\n                            h([i].concat(a), e, r)\n                        );\n                    const c = a.shift();\n                    if (!c) {\n                        n.Debugger.getInstance().output(\n                            \"Juxta Heuristic Case 9\"\n                        );\n                        const a = s.factory.makeBranchNode(\n                            \"infixop\",\n                            [o, e.shift()],\n                            [i],\n                            i.textContent\n                        );\n                        return (\n                            (a.role = \"implicit\"),\n                            s.run(\"combine_juxtaposition\", a),\n                            e.unshift(a),\n                            h(t, e, r)\n                        );\n                    }\n                    if (l.isOperator(o) || l.isOperator(c))\n                        return (\n                            n.Debugger.getInstance().output(\n                                \"Juxta Heuristic Case 4\"\n                            ),\n                            h(t.concat([o, i, c]).concat(a), e, r)\n                        );\n                    let u = null;\n                    return (\n                        l.isImplicitOp(o) && l.isImplicitOp(c)\n                            ? (n.Debugger.getInstance().output(\n                                  \"Juxta Heuristic Case 5\"\n                              ),\n                              o.contentNodes.push(i),\n                              (o.contentNodes = o.contentNodes.concat(\n                                  c.contentNodes\n                              )),\n                              o.childNodes.push(c),\n                              (o.childNodes = o.childNodes.concat(\n                                  c.childNodes\n                              )),\n                              c.childNodes.forEach((t) => (t.parent = o)),\n                              (i.parent = o),\n                              o.addMathmlNodes(i.mathml),\n                              o.addMathmlNodes(c.mathml),\n                              (u = o))\n                            : l.isImplicitOp(o)\n                              ? (n.Debugger.getInstance().output(\n                                    \"Juxta Heuristic Case 6\"\n                                ),\n                                o.contentNodes.push(i),\n                                o.childNodes.push(c),\n                                (c.parent = o),\n                                (i.parent = o),\n                                o.addMathmlNodes(i.mathml),\n                                o.addMathmlNodes(c.mathml),\n                                (u = o))\n                              : l.isImplicitOp(c)\n                                ? (n.Debugger.getInstance().output(\n                                      \"Juxta Heuristic Case 7\"\n                                  ),\n                                  c.contentNodes.unshift(i),\n                                  c.childNodes.unshift(o),\n                                  (o.parent = c),\n                                  (i.parent = c),\n                                  c.addMathmlNodes(i.mathml),\n                                  c.addMathmlNodes(o.mathml),\n                                  (u = c))\n                                : (n.Debugger.getInstance().output(\n                                      \"Juxta Heuristic Case 8\"\n                                  ),\n                                  (u = s.factory.makeBranchNode(\n                                      \"infixop\",\n                                      [o, c],\n                                      [i],\n                                      i.textContent\n                                  )),\n                                  (u.role = \"implicit\")),\n                        t.push(u),\n                        h(t.concat(a), e, r)\n                    );\n                }\n                s.add(\n                    new a.SemanticTreeHeuristic(\n                        \"combine_juxtaposition\",\n                        function (t) {\n                            for (\n                                let e, r = t.childNodes.length - 1;\n                                (e = t.childNodes[r]);\n                                r--\n                            )\n                                l.isImplicitOp(e) &&\n                                    !e.nobreaking &&\n                                    (t.childNodes.splice(r, 1, ...e.childNodes),\n                                    t.contentNodes.splice(\n                                        r,\n                                        0,\n                                        ...e.contentNodes\n                                    ),\n                                    e.childNodes\n                                        .concat(e.contentNodes)\n                                        .forEach(function (e) {\n                                            e.parent = t;\n                                        }),\n                                    t.addMathmlNodes(e.mathml));\n                            return t;\n                        }\n                    )\n                ),\n                    s.add(\n                        new a.SemanticTreeHeuristic(\n                            \"propagateSimpleFunction\",\n                            (t) => (\n                                (\"infixop\" !== t.type &&\n                                    \"fraction\" !== t.type) ||\n                                    !t.childNodes.every(l.isSimpleFunction) ||\n                                    (t.role = \"composed function\"),\n                                t\n                            ),\n                            (t) =>\n                                \"clearspeak\" === o.default.getInstance().domain\n                        )\n                    ),\n                    s.add(\n                        new a.SemanticTreeHeuristic(\n                            \"simpleNamedFunction\",\n                            (t) => (\n                                \"unit\" !== t.role &&\n                                    -1 !==\n                                        [\"f\", \"g\", \"h\", \"F\", \"G\", \"H\"].indexOf(\n                                            t.textContent\n                                        ) &&\n                                    (t.role = \"simple function\"),\n                                t\n                            ),\n                            (t) =>\n                                \"clearspeak\" === o.default.getInstance().domain\n                        )\n                    ),\n                    s.add(\n                        new a.SemanticTreeHeuristic(\n                            \"propagateComposedFunction\",\n                            (t) => (\n                                \"fenced\" === t.type &&\n                                    \"composed function\" ===\n                                        t.childNodes[0].role &&\n                                    (t.role = \"composed function\"),\n                                t\n                            ),\n                            (t) =>\n                                \"clearspeak\" === o.default.getInstance().domain\n                        )\n                    ),\n                    s.add(\n                        new a.SemanticTreeHeuristic(\"multioperator\", (t) => {\n                            if (\n                                \"unknown\" !== t.role ||\n                                t.textContent.length <= 1\n                            )\n                                return;\n                            const e = [...t.textContent]\n                                .map(i.lookupMeaning)\n                                .reduce(function (t, e) {\n                                    return t &&\n                                        e.role &&\n                                        \"unknown\" !== e.role &&\n                                        e.role !== t\n                                        ? \"unknown\" === t\n                                            ? e.role\n                                            : null\n                                        : t;\n                                }, \"unknown\");\n                            e && (t.role = e);\n                        })\n                    ),\n                    s.add(\n                        new a.SemanticMultiHeuristic(\n                            \"convert_juxtaposition\",\n                            (t) => {\n                                let e = u.partitionNodes(t, function (t) {\n                                    return (\n                                        t.textContent === i.invisibleTimes() &&\n                                        \"operator\" === t.type\n                                    );\n                                });\n                                (e = e.rel.length\n                                    ? (function (t) {\n                                          const e = [],\n                                              r = [];\n                                          let n = t.comp.shift(),\n                                              o = null,\n                                              i = [];\n                                          for (; t.comp.length; )\n                                              if (((i = []), n.length))\n                                                  o && e.push(o),\n                                                      r.push(n),\n                                                      (o = t.rel.shift()),\n                                                      (n = t.comp.shift());\n                                              else {\n                                                  for (\n                                                      o && i.push(o);\n                                                      !n.length &&\n                                                      t.comp.length;\n\n                                                  )\n                                                      (n = t.comp.shift()),\n                                                          i.push(t.rel.shift());\n                                                  o = p(i, n, r);\n                                              }\n                                          i.length || n.length\n                                              ? (e.push(o), r.push(n))\n                                              : (i.push(o), p(i, n, r));\n                                          return { rel: e, comp: r };\n                                      })(e)\n                                    : e),\n                                    (t = e.comp[0]);\n                                for (\n                                    let r, n, o = 1;\n                                    (r = e.comp[o]), (n = e.rel[o - 1]);\n                                    o++\n                                )\n                                    t.push(n), (t = t.concat(r));\n                                return (\n                                    (e = u.partitionNodes(t, function (t) {\n                                        return (\n                                            t.textContent ===\n                                                i.invisibleTimes() &&\n                                            (\"operator\" === t.type ||\n                                                \"infixop\" === t.type)\n                                        );\n                                    })),\n                                    e.rel.length\n                                        ? h(e.comp.shift(), e.rel, e.comp)\n                                        : t\n                                );\n                            }\n                        )\n                    ),\n                    s.add(\n                        new a.SemanticTreeHeuristic(\n                            \"simple2prefix\",\n                            (t) => (\n                                t.textContent.length > 1 &&\n                                    !t.textContent[0].match(/[A-Z]/) &&\n                                    (t.role = \"prefix function\"),\n                                t\n                            ),\n                            (t) =>\n                                \"braille\" ===\n                                    o.default.getInstance().modality &&\n                                \"identifier\" === t.type\n                        )\n                    ),\n                    s.add(\n                        new a.SemanticTreeHeuristic(\n                            \"detect_cycle\",\n                            (t) => {\n                                (t.type = \"matrix\"), (t.role = \"cycle\");\n                                const e = t.childNodes[0];\n                                return (\n                                    (e.type = \"row\"),\n                                    (e.role = \"cycle\"),\n                                    (e.textContent = \"\"),\n                                    (e.contentNodes = []),\n                                    t\n                                );\n                            },\n                            (t) =>\n                                \"fenced\" === t.type &&\n                                \"infixop\" === t.childNodes[0].type &&\n                                \"implicit\" === t.childNodes[0].role &&\n                                t.childNodes[0].childNodes.every(function (t) {\n                                    return \"number\" === t.type;\n                                }) &&\n                                t.childNodes[0].contentNodes.every(\n                                    function (t) {\n                                        return \"space\" === t.role;\n                                    }\n                                )\n                        )\n                    );\n            },\n            7228: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticMathml = void 0);\n                const n = r(5740),\n                    o = r(5250),\n                    i = r(5609),\n                    s = r(3308),\n                    a = r(4795);\n                class l extends o.SemanticAbstractParser {\n                    constructor() {\n                        super(\"MathML\"),\n                            (this.parseMap_ = {\n                                SEMANTICS: this.semantics_.bind(this),\n                                MATH: this.rows_.bind(this),\n                                MROW: this.rows_.bind(this),\n                                MPADDED: this.rows_.bind(this),\n                                MSTYLE: this.rows_.bind(this),\n                                MFRAC: this.fraction_.bind(this),\n                                MSUB: this.limits_.bind(this),\n                                MSUP: this.limits_.bind(this),\n                                MSUBSUP: this.limits_.bind(this),\n                                MOVER: this.limits_.bind(this),\n                                MUNDER: this.limits_.bind(this),\n                                MUNDEROVER: this.limits_.bind(this),\n                                MROOT: this.root_.bind(this),\n                                MSQRT: this.sqrt_.bind(this),\n                                MTABLE: this.table_.bind(this),\n                                MLABELEDTR: this.tableLabeledRow_.bind(this),\n                                MTR: this.tableRow_.bind(this),\n                                MTD: this.tableCell_.bind(this),\n                                MS: this.text_.bind(this),\n                                MTEXT: this.text_.bind(this),\n                                MSPACE: this.space_.bind(this),\n                                \"ANNOTATION-XML\": this.text_.bind(this),\n                                MI: this.identifier_.bind(this),\n                                MN: this.number_.bind(this),\n                                MO: this.operator_.bind(this),\n                                MFENCED: this.fenced_.bind(this),\n                                MENCLOSE: this.enclosed_.bind(this),\n                                MMULTISCRIPTS: this.multiscripts_.bind(this),\n                                ANNOTATION: this.empty_.bind(this),\n                                NONE: this.empty_.bind(this),\n                                MACTION: this.action_.bind(this),\n                            });\n                        const t = {\n                            type: \"identifier\",\n                            role: \"numbersetletter\",\n                            font: \"double-struck\",\n                        };\n                        [\n                            \"C\",\n                            \"H\",\n                            \"N\",\n                            \"P\",\n                            \"Q\",\n                            \"R\",\n                            \"Z\",\n                            \"\\u2102\",\n                            \"\\u210d\",\n                            \"\\u2115\",\n                            \"\\u2119\",\n                            \"\\u211a\",\n                            \"\\u211d\",\n                            \"\\u2124\",\n                        ].forEach(\n                            ((e) =>\n                                this.getFactory().defaultMap.add(e, t)).bind(\n                                this\n                            )\n                        );\n                    }\n                    static getAttribute_(t, e, r) {\n                        if (!t.hasAttribute(e)) return r;\n                        const n = t.getAttribute(e);\n                        return n.match(/^\\s*$/) ? null : n;\n                    }\n                    parse(t) {\n                        s.default\n                            .getInstance()\n                            .setNodeFactory(this.getFactory());\n                        const e = n.toArray(t.childNodes),\n                            r = n.tagName(t),\n                            o = this.parseMap_[r],\n                            i = (o || this.dummy_.bind(this))(t, e);\n                        return (\n                            a.addAttributes(i, t),\n                            -1 !==\n                                [\n                                    \"MATH\",\n                                    \"MROW\",\n                                    \"MPADDED\",\n                                    \"MSTYLE\",\n                                    \"SEMANTICS\",\n                                ].indexOf(r) ||\n                                (i.mathml.unshift(t), (i.mathmlTree = t)),\n                            i\n                        );\n                    }\n                    semantics_(t, e) {\n                        return e.length\n                            ? this.parse(e[0])\n                            : this.getFactory().makeEmptyNode();\n                    }\n                    rows_(t, e) {\n                        const r = t.getAttribute(\"semantics\");\n                        if (r && r.match(\"bspr_\"))\n                            return s.default.proof(\n                                t,\n                                r,\n                                this.parseList.bind(this)\n                            );\n                        let n;\n                        return (\n                            1 === (e = a.purgeNodes(e)).length\n                                ? ((n = this.parse(e[0])),\n                                  \"empty\" !== n.type ||\n                                      n.mathmlTree ||\n                                      (n.mathmlTree = t))\n                                : (n = s.default\n                                      .getInstance()\n                                      .row(this.parseList(e))),\n                            n.mathml.unshift(t),\n                            n\n                        );\n                    }\n                    fraction_(t, e) {\n                        if (!e.length) return this.getFactory().makeEmptyNode();\n                        const r = this.parse(e[0]),\n                            n = e[1]\n                                ? this.parse(e[1])\n                                : this.getFactory().makeEmptyNode();\n                        return s.default\n                            .getInstance()\n                            .fractionLikeNode(\n                                r,\n                                n,\n                                t.getAttribute(\"linethickness\"),\n                                \"true\" === t.getAttribute(\"bevelled\")\n                            );\n                    }\n                    limits_(t, e) {\n                        return s.default\n                            .getInstance()\n                            .limitNode(n.tagName(t), this.parseList(e));\n                    }\n                    root_(t, e) {\n                        return e[1]\n                            ? this.getFactory().makeBranchNode(\n                                  \"root\",\n                                  [this.parse(e[1]), this.parse(e[0])],\n                                  []\n                              )\n                            : this.sqrt_(t, e);\n                    }\n                    sqrt_(t, e) {\n                        const r = this.parseList(a.purgeNodes(e));\n                        return this.getFactory().makeBranchNode(\n                            \"sqrt\",\n                            [s.default.getInstance().row(r)],\n                            []\n                        );\n                    }\n                    table_(t, e) {\n                        const r = t.getAttribute(\"semantics\");\n                        if (r && r.match(\"bspr_\"))\n                            return s.default.proof(\n                                t,\n                                r,\n                                this.parseList.bind(this)\n                            );\n                        const n = this.getFactory().makeBranchNode(\n                            \"table\",\n                            this.parseList(e),\n                            []\n                        );\n                        return (\n                            (n.mathmlTree = t), s.default.tableToMultiline(n), n\n                        );\n                    }\n                    tableRow_(t, e) {\n                        const r = this.getFactory().makeBranchNode(\n                            \"row\",\n                            this.parseList(e),\n                            []\n                        );\n                        return (r.role = \"table\"), r;\n                    }\n                    tableLabeledRow_(t, e) {\n                        if (!e.length) return this.tableRow_(t, e);\n                        const r = this.parse(e[0]);\n                        r.role = \"label\";\n                        const n = this.getFactory().makeBranchNode(\n                            \"row\",\n                            this.parseList(e.slice(1)),\n                            [r]\n                        );\n                        return (n.role = \"table\"), n;\n                    }\n                    tableCell_(t, e) {\n                        const r = this.parseList(a.purgeNodes(e));\n                        let n;\n                        n = r.length\n                            ? 1 === r.length && i.isType(r[0], \"empty\")\n                                ? r\n                                : [s.default.getInstance().row(r)]\n                            : [];\n                        const o = this.getFactory().makeBranchNode(\n                            \"cell\",\n                            n,\n                            []\n                        );\n                        return (o.role = \"table\"), o;\n                    }\n                    space_(t, e) {\n                        const r = t.getAttribute(\"width\"),\n                            o = r && r.match(/[a-z]*$/);\n                        if (!o) return this.empty_(t, e);\n                        const i = o[0],\n                            a = parseFloat(r.slice(0, o.index)),\n                            l = {\n                                cm: 0.4,\n                                pc: 0.5,\n                                em: 0.5,\n                                ex: 1,\n                                in: 0.15,\n                                pt: 5,\n                                mm: 5,\n                            }[i];\n                        if (!l || isNaN(a) || a < l) return this.empty_(t, e);\n                        const c = this.getFactory().makeUnprocessed(t);\n                        return s.default.getInstance().text(c, n.tagName(t));\n                    }\n                    text_(t, e) {\n                        const r = this.leaf_(t, e);\n                        return t.textContent\n                            ? (r.updateContent(t.textContent, !0),\n                              s.default.getInstance().text(r, n.tagName(t)))\n                            : r;\n                    }\n                    identifier_(t, e) {\n                        const r = this.leaf_(t, e);\n                        return s.default\n                            .getInstance()\n                            .identifierNode(\n                                r,\n                                s.default\n                                    .getInstance()\n                                    .font(t.getAttribute(\"mathvariant\")),\n                                t.getAttribute(\"class\")\n                            );\n                    }\n                    number_(t, e) {\n                        const r = this.leaf_(t, e);\n                        return s.default.number(r), r;\n                    }\n                    operator_(t, e) {\n                        const r = this.leaf_(t, e);\n                        return s.default.getInstance().operatorNode(r), r;\n                    }\n                    fenced_(t, e) {\n                        const r = this.parseList(a.purgeNodes(e)),\n                            n = l.getAttribute_(t, \"separators\", \",\"),\n                            o = l.getAttribute_(t, \"open\", \"(\"),\n                            i = l.getAttribute_(t, \"close\", \")\"),\n                            c = s.default.getInstance().mfenced(o, i, n, r);\n                        return s.default.getInstance().tablesInRow([c])[0];\n                    }\n                    enclosed_(t, e) {\n                        const r = this.parseList(a.purgeNodes(e)),\n                            n = this.getFactory().makeBranchNode(\n                                \"enclose\",\n                                [s.default.getInstance().row(r)],\n                                []\n                            );\n                        return (\n                            (n.role = t.getAttribute(\"notation\") || \"unknown\"),\n                            n\n                        );\n                    }\n                    multiscripts_(t, e) {\n                        if (!e.length) return this.getFactory().makeEmptyNode();\n                        const r = this.parse(e.shift());\n                        if (!e.length) return r;\n                        const o = [],\n                            i = [],\n                            l = [],\n                            c = [];\n                        let u = !1,\n                            p = 0;\n                        for (let t, r = 0; (t = e[r]); r++)\n                            \"MPRESCRIPTS\" !== n.tagName(t)\n                                ? (u\n                                      ? 1 & p\n                                          ? o.push(t)\n                                          : i.push(t)\n                                      : 1 & p\n                                        ? l.push(t)\n                                        : c.push(t),\n                                  p++)\n                                : ((u = !0), (p = 0));\n                        return a.purgeNodes(o).length || a.purgeNodes(i).length\n                            ? s.default\n                                  .getInstance()\n                                  .tensor(\n                                      r,\n                                      this.parseList(i),\n                                      this.parseList(o),\n                                      this.parseList(c),\n                                      this.parseList(l)\n                                  )\n                            : s.default\n                                  .getInstance()\n                                  .pseudoTensor(\n                                      r,\n                                      this.parseList(c),\n                                      this.parseList(l)\n                                  );\n                    }\n                    empty_(t, e) {\n                        return this.getFactory().makeEmptyNode();\n                    }\n                    action_(t, e) {\n                        return e.length > 1\n                            ? this.parse(e[1])\n                            : this.getFactory().makeUnprocessed(t);\n                    }\n                    dummy_(t, e) {\n                        const r = this.getFactory().makeUnprocessed(t);\n                        return (\n                            (r.role = t.tagName),\n                            (r.textContent = t.textContent),\n                            r\n                        );\n                    }\n                    leaf_(t, e) {\n                        if (\n                            1 === e.length &&\n                            e[0].nodeType !== n.NodeType.TEXT_NODE\n                        ) {\n                            const r = this.getFactory().makeUnprocessed(t);\n                            return (\n                                (r.role = e[0].tagName),\n                                a.addAttributes(r, e[0]),\n                                r\n                            );\n                        }\n                        return this.getFactory().makeLeafNode(\n                            t.textContent,\n                            s.default\n                                .getInstance()\n                                .font(t.getAttribute(\"mathvariant\"))\n                        );\n                    }\n                }\n                e.SemanticMathml = l;\n            },\n            5952: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticNode = void 0);\n                const n = r(5740),\n                    o = r(3588),\n                    i = r(4795);\n                class s {\n                    constructor(t) {\n                        (this.id = t),\n                            (this.mathml = []),\n                            (this.parent = null),\n                            (this.type = \"unknown\"),\n                            (this.role = \"unknown\"),\n                            (this.font = \"unknown\"),\n                            (this.embellished = null),\n                            (this.fencePointer = \"\"),\n                            (this.childNodes = []),\n                            (this.textContent = \"\"),\n                            (this.mathmlTree = null),\n                            (this.contentNodes = []),\n                            (this.annotation = {}),\n                            (this.attributes = {}),\n                            (this.nobreaking = !1);\n                    }\n                    static fromXml(t) {\n                        const e = parseInt(t.getAttribute(\"id\"), 10),\n                            r = new s(e);\n                        return (\n                            (r.type = t.tagName),\n                            s.setAttribute(r, t, \"role\"),\n                            s.setAttribute(r, t, \"font\"),\n                            s.setAttribute(r, t, \"embellished\"),\n                            s.setAttribute(\n                                r,\n                                t,\n                                \"fencepointer\",\n                                \"fencePointer\"\n                            ),\n                            t.getAttribute(\"annotation\") &&\n                                r.parseAnnotation(t.getAttribute(\"annotation\")),\n                            i.addAttributes(r, t),\n                            s.processChildren(r, t),\n                            r\n                        );\n                    }\n                    static setAttribute(t, e, r, n) {\n                        n = n || r;\n                        const o = e.getAttribute(r);\n                        o && (t[n] = o);\n                    }\n                    static processChildren(t, e) {\n                        for (const r of n.toArray(e.childNodes)) {\n                            if (r.nodeType === n.NodeType.TEXT_NODE) {\n                                t.textContent = r.textContent;\n                                continue;\n                            }\n                            const e = n.toArray(r.childNodes).map(s.fromXml);\n                            e.forEach((e) => (e.parent = t)),\n                                \"CONTENT\" === n.tagName(r)\n                                    ? (t.contentNodes = e)\n                                    : (t.childNodes = e);\n                        }\n                    }\n                    querySelectorAll(t) {\n                        let e = [];\n                        for (let r, n = 0; (r = this.childNodes[n]); n++)\n                            e = e.concat(r.querySelectorAll(t));\n                        for (let r, n = 0; (r = this.contentNodes[n]); n++)\n                            e = e.concat(r.querySelectorAll(t));\n                        return t(this) && e.unshift(this), e;\n                    }\n                    xml(t, e) {\n                        const r = function (r, n) {\n                                const o = n.map(function (r) {\n                                        return r.xml(t, e);\n                                    }),\n                                    i = t.createElementNS(\"\", r);\n                                for (let t, e = 0; (t = o[e]); e++)\n                                    i.appendChild(t);\n                                return i;\n                            },\n                            n = t.createElementNS(\"\", this.type);\n                        return (\n                            e || this.xmlAttributes(n),\n                            (n.textContent = this.textContent),\n                            this.contentNodes.length > 0 &&\n                                n.appendChild(r(\"content\", this.contentNodes)),\n                            this.childNodes.length > 0 &&\n                                n.appendChild(r(\"children\", this.childNodes)),\n                            n\n                        );\n                    }\n                    toString(t = !1) {\n                        const e = n.parseInput(\"<snode/>\");\n                        return n.serializeXml(this.xml(e, t));\n                    }\n                    allAttributes() {\n                        const t = [];\n                        return (\n                            t.push([\"role\", this.role]),\n                            \"unknown\" !== this.font &&\n                                t.push([\"font\", this.font]),\n                            Object.keys(this.annotation).length &&\n                                t.push([\"annotation\", this.xmlAnnotation()]),\n                            this.embellished &&\n                                t.push([\"embellished\", this.embellished]),\n                            this.fencePointer &&\n                                t.push([\"fencepointer\", this.fencePointer]),\n                            t.push([\"id\", this.id.toString()]),\n                            t\n                        );\n                    }\n                    xmlAnnotation() {\n                        const t = [];\n                        for (const e in this.annotation)\n                            this.annotation[e].forEach(function (r) {\n                                t.push(e + \":\" + r);\n                            });\n                        return t.join(\";\");\n                    }\n                    toJson() {\n                        const t = {};\n                        t.type = this.type;\n                        const e = this.allAttributes();\n                        for (let r, n = 0; (r = e[n]); n++)\n                            t[r[0]] = r[1].toString();\n                        return (\n                            this.textContent && (t.$t = this.textContent),\n                            this.childNodes.length &&\n                                (t.children = this.childNodes.map(function (t) {\n                                    return t.toJson();\n                                })),\n                            this.contentNodes.length &&\n                                (t.content = this.contentNodes.map(\n                                    function (t) {\n                                        return t.toJson();\n                                    }\n                                )),\n                            t\n                        );\n                    }\n                    updateContent(t, e) {\n                        const r = e\n                            ? t\n                                  .replace(/^[ \\f\\n\\r\\t\\v\\u200b]*/, \"\")\n                                  .replace(/[ \\f\\n\\r\\t\\v\\u200b]*$/, \"\")\n                            : t.trim();\n                        if (((t = t && !r ? t : r), this.textContent === t))\n                            return;\n                        const n = (0, o.lookupMeaning)(t);\n                        (this.textContent = t),\n                            (this.role = n.role),\n                            (this.type = n.type),\n                            (this.font = n.font);\n                    }\n                    addMathmlNodes(t) {\n                        for (let e, r = 0; (e = t[r]); r++)\n                            -1 === this.mathml.indexOf(e) &&\n                                this.mathml.push(e);\n                    }\n                    appendChild(t) {\n                        this.childNodes.push(t),\n                            this.addMathmlNodes(t.mathml),\n                            (t.parent = this);\n                    }\n                    replaceChild(t, e) {\n                        const r = this.childNodes.indexOf(t);\n                        if (-1 === r) return;\n                        (t.parent = null),\n                            (e.parent = this),\n                            (this.childNodes[r] = e);\n                        const n = t.mathml.filter(function (t) {\n                                return -1 === e.mathml.indexOf(t);\n                            }),\n                            o = e.mathml.filter(function (e) {\n                                return -1 === t.mathml.indexOf(e);\n                            });\n                        this.removeMathmlNodes(n), this.addMathmlNodes(o);\n                    }\n                    appendContentNode(t) {\n                        t &&\n                            (this.contentNodes.push(t),\n                            this.addMathmlNodes(t.mathml),\n                            (t.parent = this));\n                    }\n                    removeContentNode(t) {\n                        if (t) {\n                            const e = this.contentNodes.indexOf(t);\n                            -1 !== e && this.contentNodes.slice(e, 1);\n                        }\n                    }\n                    equals(t) {\n                        if (!t) return !1;\n                        if (\n                            this.type !== t.type ||\n                            this.role !== t.role ||\n                            this.textContent !== t.textContent ||\n                            this.childNodes.length !== t.childNodes.length ||\n                            this.contentNodes.length !== t.contentNodes.length\n                        )\n                            return !1;\n                        for (\n                            let e, r, n = 0;\n                            (e = this.childNodes[n]), (r = t.childNodes[n]);\n                            n++\n                        )\n                            if (!e.equals(r)) return !1;\n                        for (\n                            let e, r, n = 0;\n                            (e = this.contentNodes[n]), (r = t.contentNodes[n]);\n                            n++\n                        )\n                            if (!e.equals(r)) return !1;\n                        return !0;\n                    }\n                    displayTree() {\n                        console.info(this.displayTree_(0));\n                    }\n                    addAnnotation(t, e) {\n                        e && this.addAnnotation_(t, e);\n                    }\n                    getAnnotation(t) {\n                        const e = this.annotation[t];\n                        return e || [];\n                    }\n                    hasAnnotation(t, e) {\n                        const r = this.annotation[t];\n                        return !!r && -1 !== r.indexOf(e);\n                    }\n                    parseAnnotation(t) {\n                        const e = t.split(\";\");\n                        for (let t = 0, r = e.length; t < r; t++) {\n                            const r = e[t].split(\":\");\n                            this.addAnnotation(r[0], r[1]);\n                        }\n                    }\n                    meaning() {\n                        return {\n                            type: this.type,\n                            role: this.role,\n                            font: this.font,\n                        };\n                    }\n                    xmlAttributes(t) {\n                        const e = this.allAttributes();\n                        for (let r, n = 0; (r = e[n]); n++)\n                            t.setAttribute(r[0], r[1]);\n                        this.addExternalAttributes(t);\n                    }\n                    addExternalAttributes(t) {\n                        for (const e in this.attributes)\n                            t.setAttribute(e, this.attributes[e]);\n                    }\n                    removeMathmlNodes(t) {\n                        const e = this.mathml;\n                        for (let r, n = 0; (r = t[n]); n++) {\n                            const t = e.indexOf(r);\n                            -1 !== t && e.splice(t, 1);\n                        }\n                        this.mathml = e;\n                    }\n                    displayTree_(t) {\n                        t++;\n                        const e = Array(t).join(\"  \");\n                        let r = \"\";\n                        (r += \"\\n\" + e + this.toString()),\n                            (r += \"\\n\" + e + \"MathmlTree:\"),\n                            (r += \"\\n\" + e + this.mathmlTreeString()),\n                            (r += \"\\n\" + e + \"MathML:\");\n                        for (let t, n = 0; (t = this.mathml[n]); n++)\n                            r += \"\\n\" + e + t.toString();\n                        return (\n                            (r += \"\\n\" + e + \"Begin Content\"),\n                            this.contentNodes.forEach(function (e) {\n                                r += e.displayTree_(t);\n                            }),\n                            (r += \"\\n\" + e + \"End Content\"),\n                            (r += \"\\n\" + e + \"Begin Children\"),\n                            this.childNodes.forEach(function (e) {\n                                r += e.displayTree_(t);\n                            }),\n                            (r += \"\\n\" + e + \"End Children\"),\n                            r\n                        );\n                    }\n                    mathmlTreeString() {\n                        return this.mathmlTree\n                            ? this.mathmlTree.toString()\n                            : \"EMPTY\";\n                    }\n                    addAnnotation_(t, e) {\n                        const r = this.annotation[t];\n                        r ? r.push(e) : (this.annotation[t] = [e]);\n                    }\n                }\n                e.SemanticNode = s;\n            },\n            6537: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticNodeFactory = void 0);\n                const n = r(8158),\n                    o = r(8158),\n                    i = r(5952);\n                e.SemanticNodeFactory = class {\n                    constructor() {\n                        (this.leafMap = new o.SemanticNodeCollator()),\n                            (this.defaultMap = new n.SemanticDefault()),\n                            (this.idCounter_ = -1);\n                    }\n                    makeNode(t) {\n                        return this.createNode_(t);\n                    }\n                    makeUnprocessed(t) {\n                        const e = this.createNode_();\n                        return (e.mathml = [t]), (e.mathmlTree = t), e;\n                    }\n                    makeEmptyNode() {\n                        const t = this.createNode_();\n                        return (t.type = \"empty\"), t;\n                    }\n                    makeContentNode(t) {\n                        const e = this.createNode_();\n                        return e.updateContent(t), e;\n                    }\n                    makeMultipleContentNodes(t, e) {\n                        const r = [];\n                        for (let n = 0; n < t; n++)\n                            r.push(this.makeContentNode(e));\n                        return r;\n                    }\n                    makeLeafNode(t, e) {\n                        if (!t) return this.makeEmptyNode();\n                        const r = this.makeContentNode(t);\n                        r.font = e || r.font;\n                        const n = this.defaultMap.retrieveNode(r);\n                        return (\n                            n &&\n                                ((r.type = n.type),\n                                (r.role = n.role),\n                                (r.font = n.font)),\n                            this.leafMap.addNode(r),\n                            r\n                        );\n                    }\n                    makeBranchNode(t, e, r, n) {\n                        const o = this.createNode_();\n                        return (\n                            n && o.updateContent(n),\n                            (o.type = t),\n                            (o.childNodes = e),\n                            (o.contentNodes = r),\n                            e.concat(r).forEach(function (t) {\n                                (t.parent = o), o.addMathmlNodes(t.mathml);\n                            }),\n                            o\n                        );\n                    }\n                    createNode_(t) {\n                        return (\n                            void 0 !== t\n                                ? (this.idCounter_ = Math.max(\n                                      this.idCounter_,\n                                      t\n                                  ))\n                                : (t = ++this.idCounter_),\n                            new i.SemanticNode(t)\n                        );\n                    }\n                };\n            },\n            3882: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticComparator =\n                        e.reduce =\n                        e.sort =\n                        e.apply =\n                        e.add =\n                            void 0);\n                const r = [];\n                function n(t) {\n                    r.push(t);\n                }\n                function o(t, e) {\n                    for (let n, o = 0; (n = r[o]); o++) {\n                        const r = n.compare(t, e);\n                        if (0 !== r) return r;\n                    }\n                    return 0;\n                }\n                function i(t) {\n                    t.sort(o);\n                }\n                (e.add = n),\n                    (e.apply = o),\n                    (e.sort = i),\n                    (e.reduce = function (t) {\n                        if (t.length <= 1) return t;\n                        const e = t.slice();\n                        i(e);\n                        const r = [];\n                        let n;\n                        do {\n                            (n = e.pop()), r.push(n);\n                        } while (n && e.length && 0 === o(e[e.length - 1], n));\n                        return r;\n                    });\n                class s {\n                    constructor(t, e = null) {\n                        (this.comparator = t), (this.type = e), n(this);\n                    }\n                    compare(t, e) {\n                        return this.type &&\n                            this.type === t.type &&\n                            this.type === e.type\n                            ? this.comparator(t, e)\n                            : 0;\n                    }\n                }\n                (e.SemanticComparator = s),\n                    new s(function (t, e) {\n                        return \"simple function\" === t.role\n                            ? 1\n                            : \"simple function\" === e.role\n                              ? -1\n                              : 0;\n                    }, \"identifier\");\n            },\n            5250: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticAbstractParser = void 0);\n                const n = r(6537);\n                e.SemanticAbstractParser = class {\n                    constructor(t) {\n                        (this.type = t),\n                            (this.factory_ = new n.SemanticNodeFactory());\n                    }\n                    getFactory() {\n                        return this.factory_;\n                    }\n                    setFactory(t) {\n                        this.factory_ = t;\n                    }\n                    getType() {\n                        return this.type;\n                    }\n                    parseList(t) {\n                        const e = [];\n                        for (let r, n = 0; (r = t[n]); n++)\n                            e.push(this.parse(r));\n                        return e;\n                    }\n                };\n            },\n            5609: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.isMembership =\n                        e.elligibleRightNeutral =\n                        e.elligibleLeftNeutral =\n                        e.compareNeutralFences =\n                        e.isNeutralFence =\n                        e.isImplicitOp =\n                        e.isImplicit =\n                        e.isPureUnit =\n                        e.isUnitCounter =\n                        e.isNumber =\n                        e.isSingletonSetContent =\n                        e.scriptedElement_ =\n                        e.illegalSingleton_ =\n                        e.isSetNode =\n                        e.isRightBrace =\n                        e.isLeftBrace =\n                        e.isSimpleFunction =\n                        e.singlePunctAtPosition =\n                        e.isSimpleFunctionHead =\n                        e.isLimitBase =\n                        e.isBinomial =\n                        e.lineIsLabelled =\n                        e.tableIsMultiline =\n                        e.tableIsCases =\n                        e.isFencedElement =\n                        e.tableIsMatrixOrVector =\n                        e.isTableOrMultiline =\n                        e.isElligibleEmbellishedFence =\n                        e.isFence =\n                        e.isPunctuation =\n                        e.isRelation =\n                        e.isOperator =\n                        e.isEmbellished =\n                        e.isGeneralFunctionBoundary =\n                        e.isIntegralDxBoundarySingle =\n                        e.isIntegralDxBoundary =\n                        e.isBigOpBoundary =\n                        e.isPrefixFunctionBoundary =\n                        e.isSimpleFunctionScope =\n                        e.isAccent =\n                        e.isRole =\n                        e.embellishedType =\n                        e.isType =\n                            void 0);\n                const n = r(3588),\n                    o = r(4795);\n                function i(t, e) {\n                    return t.type === e;\n                }\n                function s(t, e) {\n                    return t.embellished === e;\n                }\n                function a(t, e) {\n                    return t.role === e;\n                }\n                function l(t) {\n                    return u(t) || p(t);\n                }\n                function c(t) {\n                    return i(t, \"operator\") || s(t, \"operator\");\n                }\n                function u(t) {\n                    return i(t, \"relation\") || s(t, \"relation\");\n                }\n                function p(t) {\n                    return i(t, \"punctuation\") || s(t, \"punctuation\");\n                }\n                function h(t) {\n                    return i(t, \"fence\") || s(t, \"fence\");\n                }\n                function f(t) {\n                    return (\n                        !t.embellished ||\n                        (!(function (t) {\n                            return (\n                                i(t, \"tensor\") &&\n                                (!i(t.childNodes[1], \"empty\") ||\n                                    !i(t.childNodes[2], \"empty\")) &&\n                                (!i(t.childNodes[3], \"empty\") ||\n                                    !i(t.childNodes[4], \"empty\"))\n                            );\n                        })(t) &&\n                            (!a(t, \"close\") || !i(t, \"tensor\")) &&\n                            (!a(t, \"open\") ||\n                                (!i(t, \"subscript\") && !i(t, \"superscript\"))) &&\n                            f(t.childNodes[0]))\n                    );\n                }\n                function d(t) {\n                    return !!t && (i(t, \"table\") || i(t, \"multiline\"));\n                }\n                function m(t) {\n                    return (\n                        !!t &&\n                        i(t, \"fenced\") &&\n                        (a(t, \"leftright\") || v(t)) &&\n                        1 === t.childNodes.length\n                    );\n                }\n                function y(t) {\n                    return (\n                        !!t &&\n                        -1 !== [\"{\", \"\\ufe5b\", \"\\uff5b\"].indexOf(t.textContent)\n                    );\n                }\n                function g(t) {\n                    return (\n                        !!t &&\n                        -1 !== [\"}\", \"\\ufe5c\", \"\\uff5d\"].indexOf(t.textContent)\n                    );\n                }\n                function b(t) {\n                    return (\n                        \"number\" === t.type &&\n                        (\"integer\" === t.role || \"float\" === t.role)\n                    );\n                }\n                function v(t) {\n                    return \"neutral\" === t.role || \"metric\" === t.role;\n                }\n                (e.isType = i),\n                    (e.embellishedType = s),\n                    (e.isRole = a),\n                    (e.isAccent = function (t) {\n                        const e = new RegExp(\"\\u221e|\\u1ab2\");\n                        return (\n                            i(t, \"fence\") ||\n                            i(t, \"punctuation\") ||\n                            (i(t, \"operator\") && !t.textContent.match(e)) ||\n                            i(t, \"relation\") ||\n                            (i(t, \"identifier\") &&\n                                a(t, \"unknown\") &&\n                                !t.textContent.match(n.allLettersRegExp) &&\n                                !t.textContent.match(e))\n                        );\n                    }),\n                    (e.isSimpleFunctionScope = function (t) {\n                        const e = t.childNodes;\n                        if (0 === e.length) return !0;\n                        if (e.length > 1) return !1;\n                        const r = e[0];\n                        if (\"infixop\" === r.type) {\n                            if (\"implicit\" !== r.role) return !1;\n                            if (r.childNodes.some((t) => i(t, \"infixop\")))\n                                return !1;\n                        }\n                        return !0;\n                    }),\n                    (e.isPrefixFunctionBoundary = function (t) {\n                        return (\n                            (c(t) && !a(t, \"division\")) || i(t, \"appl\") || l(t)\n                        );\n                    }),\n                    (e.isBigOpBoundary = function (t) {\n                        return c(t) || l(t);\n                    }),\n                    (e.isIntegralDxBoundary = function (t, e) {\n                        return (\n                            !!e &&\n                            i(e, \"identifier\") &&\n                            n.lookupSecondary(\"d\", t.textContent)\n                        );\n                    }),\n                    (e.isIntegralDxBoundarySingle = function (t) {\n                        if (i(t, \"identifier\")) {\n                            const e = t.textContent[0];\n                            return (\n                                e &&\n                                t.textContent[1] &&\n                                n.lookupSecondary(\"d\", e)\n                            );\n                        }\n                        return !1;\n                    }),\n                    (e.isGeneralFunctionBoundary = l),\n                    (e.isEmbellished = function (t) {\n                        return t.embellished\n                            ? t.embellished\n                            : n.isEmbellishedType(t.type)\n                              ? t.type\n                              : null;\n                    }),\n                    (e.isOperator = c),\n                    (e.isRelation = u),\n                    (e.isPunctuation = p),\n                    (e.isFence = h),\n                    (e.isElligibleEmbellishedFence = function (t) {\n                        return !(!t || !h(t)) && (!t.embellished || f(t));\n                    }),\n                    (e.isTableOrMultiline = d),\n                    (e.tableIsMatrixOrVector = function (t) {\n                        return !!t && m(t) && d(t.childNodes[0]);\n                    }),\n                    (e.isFencedElement = m),\n                    (e.tableIsCases = function (t, e) {\n                        return e.length > 0 && a(e[e.length - 1], \"openfence\");\n                    }),\n                    (e.tableIsMultiline = function (t) {\n                        return t.childNodes.every(function (t) {\n                            return t.childNodes.length <= 1;\n                        });\n                    }),\n                    (e.lineIsLabelled = function (t) {\n                        return (\n                            i(t, \"line\") &&\n                            t.contentNodes.length &&\n                            a(t.contentNodes[0], \"label\")\n                        );\n                    }),\n                    (e.isBinomial = function (t) {\n                        return 2 === t.childNodes.length;\n                    }),\n                    (e.isLimitBase = function t(e) {\n                        return (\n                            i(e, \"largeop\") ||\n                            i(e, \"limboth\") ||\n                            i(e, \"limlower\") ||\n                            i(e, \"limupper\") ||\n                            (i(e, \"function\") && a(e, \"limit function\")) ||\n                            ((i(e, \"overscore\") || i(e, \"underscore\")) &&\n                                t(e.childNodes[0]))\n                        );\n                    }),\n                    (e.isSimpleFunctionHead = function (t) {\n                        return (\n                            \"identifier\" === t.type ||\n                            \"latinletter\" === t.role ||\n                            \"greekletter\" === t.role ||\n                            \"otherletter\" === t.role\n                        );\n                    }),\n                    (e.singlePunctAtPosition = function (t, e, r) {\n                        return (\n                            1 === e.length &&\n                            (\"punctuation\" === t[r].type ||\n                                \"punctuation\" === t[r].embellished) &&\n                            t[r] === e[0]\n                        );\n                    }),\n                    (e.isSimpleFunction = function (t) {\n                        return i(t, \"identifier\") && a(t, \"simple function\");\n                    }),\n                    (e.isLeftBrace = y),\n                    (e.isRightBrace = g),\n                    (e.isSetNode = function (t) {\n                        return y(t.contentNodes[0]) && g(t.contentNodes[1]);\n                    }),\n                    (e.illegalSingleton_ = [\n                        \"punctuation\",\n                        \"punctuated\",\n                        \"relseq\",\n                        \"multirel\",\n                        \"table\",\n                        \"multiline\",\n                        \"cases\",\n                        \"inference\",\n                    ]),\n                    (e.scriptedElement_ = [\n                        \"limupper\",\n                        \"limlower\",\n                        \"limboth\",\n                        \"subscript\",\n                        \"superscript\",\n                        \"underscore\",\n                        \"overscore\",\n                        \"tensor\",\n                    ]),\n                    (e.isSingletonSetContent = function t(r) {\n                        const n = r.type;\n                        return (\n                            -1 === e.illegalSingleton_.indexOf(n) &&\n                            (\"infixop\" !== n || \"implicit\" === r.role) &&\n                            (\"fenced\" === n\n                                ? \"leftright\" !== r.role || t(r.childNodes[0])\n                                : -1 === e.scriptedElement_.indexOf(n) ||\n                                  t(r.childNodes[0]))\n                        );\n                    }),\n                    (e.isNumber = b),\n                    (e.isUnitCounter = function (t) {\n                        return (\n                            b(t) || \"vulgar\" === t.role || \"mixed\" === t.role\n                        );\n                    }),\n                    (e.isPureUnit = function (t) {\n                        const e = t.childNodes;\n                        return (\n                            \"unit\" === t.role &&\n                            (!e.length || \"unit\" === e[0].role)\n                        );\n                    }),\n                    (e.isImplicit = function (t) {\n                        return (\n                            \"implicit\" === t.role ||\n                            (\"unit\" === t.role &&\n                                !!t.contentNodes.length &&\n                                t.contentNodes[0].textContent ===\n                                    n.invisibleTimes())\n                        );\n                    }),\n                    (e.isImplicitOp = function (t) {\n                        return \"infixop\" === t.type && \"implicit\" === t.role;\n                    }),\n                    (e.isNeutralFence = v),\n                    (e.compareNeutralFences = function (t, e) {\n                        return (\n                            v(t) &&\n                            v(e) &&\n                            (0, o.getEmbellishedInner)(t).textContent ===\n                                (0, o.getEmbellishedInner)(e).textContent\n                        );\n                    }),\n                    (e.elligibleLeftNeutral = function (t) {\n                        return (\n                            !!v(t) &&\n                            (!t.embellished ||\n                                (\"superscript\" !== t.type &&\n                                    \"subscript\" !== t.type &&\n                                    (\"tensor\" !== t.type ||\n                                        (\"empty\" === t.childNodes[3].type &&\n                                            \"empty\" === t.childNodes[4].type))))\n                        );\n                    }),\n                    (e.elligibleRightNeutral = function (t) {\n                        return (\n                            !!v(t) &&\n                            (!t.embellished ||\n                                \"tensor\" !== t.type ||\n                                (\"empty\" === t.childNodes[1].type &&\n                                    \"empty\" === t.childNodes[2].type))\n                        );\n                    }),\n                    (e.isMembership = function (t) {\n                        return [\n                            \"element\",\n                            \"nonelement\",\n                            \"reelement\",\n                            \"renonelement\",\n                        ].includes(t.role);\n                    });\n            },\n            3308: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 });\n                const n = r(5740),\n                    o = r(3588),\n                    i = r(7516),\n                    s = r(6537),\n                    a = r(5609),\n                    l = r(4795);\n                class c {\n                    constructor() {\n                        (this.funcAppls = {}),\n                            (this.factory_ = new s.SemanticNodeFactory()),\n                            i.updateFactory(this.factory_);\n                    }\n                    static getInstance() {\n                        return (c.instance = c.instance || new c()), c.instance;\n                    }\n                    static tableToMultiline(t) {\n                        if (a.tableIsMultiline(t)) {\n                            t.type = \"multiline\";\n                            for (let e, r = 0; (e = t.childNodes[r]); r++)\n                                c.rowToLine_(e, \"multiline\");\n                            1 === t.childNodes.length &&\n                                !a.lineIsLabelled(t.childNodes[0]) &&\n                                a.isFencedElement(\n                                    t.childNodes[0].childNodes[0]\n                                ) &&\n                                c.tableToMatrixOrVector_(\n                                    c.rewriteFencedLine_(t)\n                                ),\n                                c.binomialForm_(t),\n                                c.classifyMultiline(t);\n                        } else c.classifyTable(t);\n                    }\n                    static number(t) {\n                        (\"unknown\" !== t.type && \"identifier\" !== t.type) ||\n                            (t.type = \"number\"),\n                            c.numberRole_(t),\n                            c.exprFont_(t);\n                    }\n                    static classifyMultiline(t) {\n                        let e = 0;\n                        const r = t.childNodes.length;\n                        let n;\n                        for (\n                            ;\n                            e < r &&\n                            (!(n = t.childNodes[e]) || !n.childNodes.length);\n\n                        )\n                            e++;\n                        if (e >= r) return;\n                        const o = n.childNodes[0].role;\n                        \"unknown\" !== o &&\n                            t.childNodes.every(function (t) {\n                                const e = t.childNodes[0];\n                                return (\n                                    !e ||\n                                    (e.role === o &&\n                                        (a.isType(e, \"relation\") ||\n                                            a.isType(e, \"relseq\")))\n                                );\n                            }) &&\n                            (t.role = o);\n                    }\n                    static classifyTable(t) {\n                        const e = c.computeColumns_(t);\n                        c.classifyByColumns_(t, e, \"equality\") ||\n                            c.classifyByColumns_(t, e, \"inequality\", [\n                                \"equality\",\n                            ]) ||\n                            c.classifyByColumns_(t, e, \"arrow\") ||\n                            c.detectCaleyTable(t);\n                    }\n                    static detectCaleyTable(t) {\n                        if (!t.mathmlTree) return !1;\n                        const e = t.mathmlTree,\n                            r = e.getAttribute(\"columnlines\"),\n                            n = e.getAttribute(\"rowlines\");\n                        return (\n                            !(!r || !n) &&\n                            !(!c.cayleySpacing(r) || !c.cayleySpacing(n)) &&\n                            ((t.role = \"cayley\"), !0)\n                        );\n                    }\n                    static cayleySpacing(t) {\n                        const e = t.split(\" \");\n                        return (\n                            (\"solid\" === e[0] || \"dashed\" === e[0]) &&\n                            e.slice(1).every((t) => \"none\" === t)\n                        );\n                    }\n                    static proof(t, e, r) {\n                        const n = c.separateSemantics(e);\n                        return c.getInstance().proof(t, n, r);\n                    }\n                    static findSemantics(t, e, r) {\n                        const n = null == r ? null : r,\n                            o = c.getSemantics(t);\n                        return !!o && !!o[e] && (null == n || o[e] === n);\n                    }\n                    static getSemantics(t) {\n                        const e = t.getAttribute(\"semantics\");\n                        return e ? c.separateSemantics(e) : null;\n                    }\n                    static removePrefix(t) {\n                        const [, ...e] = t.split(\"_\");\n                        return e.join(\"_\");\n                    }\n                    static separateSemantics(t) {\n                        const e = {};\n                        return (\n                            t.split(\";\").forEach(function (t) {\n                                const [r, n] = t.split(\":\");\n                                e[c.removePrefix(r)] = n;\n                            }),\n                            e\n                        );\n                    }\n                    static matchSpaces_(t, e) {\n                        for (let r, n = 0; (r = e[n]); n++) {\n                            const e = t[n].mathmlTree,\n                                o = t[n + 1].mathmlTree;\n                            if (!e || !o) continue;\n                            const i = e.nextSibling;\n                            if (!i || i === o) continue;\n                            const s = c.getSpacer_(i);\n                            s &&\n                                (r.mathml.push(s),\n                                (r.mathmlTree = s),\n                                (r.role = \"space\"));\n                        }\n                    }\n                    static getSpacer_(t) {\n                        if (\"MSPACE\" === n.tagName(t)) return t;\n                        for (; l.hasEmptyTag(t) && 1 === t.childNodes.length; )\n                            if (\n                                ((t = t.childNodes[0]),\n                                \"MSPACE\" === n.tagName(t))\n                            )\n                                return t;\n                        return null;\n                    }\n                    static fenceToPunct_(t) {\n                        const e = c.FENCE_TO_PUNCT_[t.role];\n                        if (e) {\n                            for (; t.embellished; )\n                                (t.embellished = \"punctuation\"),\n                                    a.isRole(t, \"subsup\") ||\n                                        a.isRole(t, \"underover\") ||\n                                        (t.role = e),\n                                    (t = t.childNodes[0]);\n                            (t.type = \"punctuation\"), (t.role = e);\n                        }\n                    }\n                    static classifyFunction_(t, e) {\n                        if (\n                            \"appl\" === t.type ||\n                            \"bigop\" === t.type ||\n                            \"integral\" === t.type\n                        )\n                            return \"\";\n                        if (\n                            e[0] &&\n                            e[0].textContent === o.functionApplication()\n                        ) {\n                            c.getInstance().funcAppls[t.id] = e.shift();\n                            let r = \"simple function\";\n                            return (\n                                i.run(\"simple2prefix\", t),\n                                (\"prefix function\" !== t.role &&\n                                    \"limit function\" !== t.role) ||\n                                    (r = t.role),\n                                c.propagateFunctionRole_(t, r),\n                                \"prefix\"\n                            );\n                        }\n                        const r = c.CLASSIFY_FUNCTION_[t.role];\n                        return r || (a.isSimpleFunctionHead(t) ? \"simple\" : \"\");\n                    }\n                    static propagateFunctionRole_(t, e) {\n                        if (t) {\n                            if (\"infixop\" === t.type) return;\n                            a.isRole(t, \"subsup\") ||\n                                a.isRole(t, \"underover\") ||\n                                (t.role = e),\n                                c.propagateFunctionRole_(t.childNodes[0], e);\n                        }\n                    }\n                    static getFunctionOp_(t, e) {\n                        if (e(t)) return t;\n                        for (let r, n = 0; (r = t.childNodes[n]); n++) {\n                            const t = c.getFunctionOp_(r, e);\n                            if (t) return t;\n                        }\n                        return null;\n                    }\n                    static tableToMatrixOrVector_(t) {\n                        const e = t.childNodes[0];\n                        a.isType(e, \"multiline\")\n                            ? c.tableToVector_(t)\n                            : c.tableToMatrix_(t),\n                            t.contentNodes.forEach(e.appendContentNode.bind(e));\n                        for (let t, r = 0; (t = e.childNodes[r]); r++)\n                            c.assignRoleToRow_(t, c.getComponentRoles_(e));\n                        return (e.parent = null), e;\n                    }\n                    static tableToVector_(t) {\n                        const e = t.childNodes[0];\n                        (e.type = \"vector\"),\n                            1 !== e.childNodes.length\n                                ? c.binomialForm_(e)\n                                : c.tableToSquare_(t);\n                    }\n                    static binomialForm_(t) {\n                        a.isBinomial(t) &&\n                            ((t.role = \"binomial\"),\n                            (t.childNodes[0].role = \"binomial\"),\n                            (t.childNodes[1].role = \"binomial\"));\n                    }\n                    static tableToMatrix_(t) {\n                        const e = t.childNodes[0];\n                        (e.type = \"matrix\"),\n                            e.childNodes &&\n                            e.childNodes.length > 0 &&\n                            e.childNodes[0].childNodes &&\n                            e.childNodes.length ===\n                                e.childNodes[0].childNodes.length\n                                ? c.tableToSquare_(t)\n                                : e.childNodes &&\n                                  1 === e.childNodes.length &&\n                                  (e.role = \"rowvector\");\n                    }\n                    static tableToSquare_(t) {\n                        const e = t.childNodes[0];\n                        a.isNeutralFence(t)\n                            ? (e.role = \"determinant\")\n                            : (e.role = \"squarematrix\");\n                    }\n                    static getComponentRoles_(t) {\n                        const e = t.role;\n                        return e && \"unknown\" !== e\n                            ? e\n                            : t.type.toLowerCase() || \"unknown\";\n                    }\n                    static tableToCases_(t, e) {\n                        for (let e, r = 0; (e = t.childNodes[r]); r++)\n                            c.assignRoleToRow_(e, \"cases\");\n                        return (\n                            (t.type = \"cases\"),\n                            t.appendContentNode(e),\n                            a.tableIsMultiline(t) && c.binomialForm_(t),\n                            t\n                        );\n                    }\n                    static rewriteFencedLine_(t) {\n                        const e = t.childNodes[0],\n                            r = t.childNodes[0].childNodes[0],\n                            n = t.childNodes[0].childNodes[0].childNodes[0];\n                        return (\n                            (r.parent = t.parent),\n                            (t.parent = r),\n                            (n.parent = e),\n                            (r.childNodes = [t]),\n                            (e.childNodes = [n]),\n                            r\n                        );\n                    }\n                    static rowToLine_(t, e) {\n                        const r = e || \"unknown\";\n                        a.isType(t, \"row\") &&\n                            ((t.type = \"line\"),\n                            (t.role = r),\n                            1 === t.childNodes.length &&\n                                a.isType(t.childNodes[0], \"cell\") &&\n                                ((t.childNodes = t.childNodes[0].childNodes),\n                                t.childNodes.forEach(function (e) {\n                                    e.parent = t;\n                                })));\n                    }\n                    static assignRoleToRow_(t, e) {\n                        a.isType(t, \"line\")\n                            ? (t.role = e)\n                            : a.isType(t, \"row\") &&\n                              ((t.role = e),\n                              t.childNodes.forEach(function (t) {\n                                  a.isType(t, \"cell\") && (t.role = e);\n                              }));\n                    }\n                    static nextSeparatorFunction_(t) {\n                        let e;\n                        if (t) {\n                            if (t.match(/^\\s+$/)) return null;\n                            e = t\n                                .replace(/\\s/g, \"\")\n                                .split(\"\")\n                                .filter(function (t) {\n                                    return t;\n                                });\n                        } else e = [\",\"];\n                        return function () {\n                            return e.length > 1 ? e.shift() : e[0];\n                        };\n                    }\n                    static numberRole_(t) {\n                        if (\"unknown\" !== t.role) return;\n                        const e = [...t.textContent].filter((t) =>\n                                t.match(/[^\\s]/)\n                            ),\n                            r = e.map(o.lookupMeaning);\n                        if (\n                            r.every(function (t) {\n                                return (\n                                    (\"number\" === t.type &&\n                                        \"integer\" === t.role) ||\n                                    (\"punctuation\" === t.type &&\n                                        \"comma\" === t.role)\n                                );\n                            })\n                        )\n                            return (\n                                (t.role = \"integer\"),\n                                void (\n                                    \"0\" === e[0] &&\n                                    t.addAnnotation(\"general\", \"basenumber\")\n                                )\n                            );\n                        r.every(function (t) {\n                            return (\n                                (\"number\" === t.type && \"integer\" === t.role) ||\n                                \"punctuation\" === t.type\n                            );\n                        })\n                            ? (t.role = \"float\")\n                            : (t.role = \"othernumber\");\n                    }\n                    static exprFont_(t) {\n                        if (\"unknown\" !== t.font) return;\n                        const e = [...t.textContent]\n                            .map(o.lookupMeaning)\n                            .reduce(function (t, e) {\n                                return t &&\n                                    e.font &&\n                                    \"unknown\" !== e.font &&\n                                    e.font !== t\n                                    ? \"unknown\" === t\n                                        ? e.font\n                                        : null\n                                    : t;\n                            }, \"unknown\");\n                        e && (t.font = e);\n                    }\n                    static purgeFences_(t) {\n                        const e = t.rel,\n                            r = t.comp,\n                            n = [],\n                            o = [];\n                        for (; e.length > 0; ) {\n                            const t = e.shift();\n                            let i = r.shift();\n                            a.isElligibleEmbellishedFence(t)\n                                ? (n.push(t), o.push(i))\n                                : (c.fenceToPunct_(t),\n                                  i.push(t),\n                                  (i = i.concat(r.shift())),\n                                  r.unshift(i));\n                        }\n                        return o.push(r.shift()), { rel: n, comp: o };\n                    }\n                    static rewriteFencedNode_(t) {\n                        const e = t.contentNodes[0],\n                            r = t.contentNodes[1];\n                        let n = c.rewriteFence_(t, e);\n                        return (\n                            (t.contentNodes[0] = n.fence),\n                            (n = c.rewriteFence_(n.node, r)),\n                            (t.contentNodes[1] = n.fence),\n                            (t.contentNodes[0].parent = t),\n                            (t.contentNodes[1].parent = t),\n                            (n.node.parent = null),\n                            n.node\n                        );\n                    }\n                    static rewriteFence_(t, e) {\n                        if (!e.embellished) return { node: t, fence: e };\n                        const r = e.childNodes[0],\n                            n = c.rewriteFence_(t, r);\n                        return a.isType(e, \"superscript\") ||\n                            a.isType(e, \"subscript\") ||\n                            a.isType(e, \"tensor\")\n                            ? (a.isRole(e, \"subsup\") || (e.role = t.role),\n                              r !== n.node &&\n                                  (e.replaceChild(r, n.node), (r.parent = t)),\n                              c.propagateFencePointer_(e, r),\n                              { node: e, fence: n.fence })\n                            : (e.replaceChild(r, n.fence),\n                              e.mathmlTree &&\n                                  -1 === e.mathml.indexOf(e.mathmlTree) &&\n                                  e.mathml.push(e.mathmlTree),\n                              { node: n.node, fence: e });\n                    }\n                    static propagateFencePointer_(t, e) {\n                        (t.fencePointer = e.fencePointer || e.id.toString()),\n                            (t.embellished = null);\n                    }\n                    static classifyByColumns_(t, e, r, n) {\n                        return (\n                            !!(\n                                (3 === e.length &&\n                                    c.testColumns_(e, 1, (t) =>\n                                        c.isPureRelation_(t, r)\n                                    )) ||\n                                (2 === e.length &&\n                                    (c.testColumns_(\n                                        e,\n                                        1,\n                                        (t) =>\n                                            c.isEndRelation_(t, r) ||\n                                            c.isPureRelation_(t, r)\n                                    ) ||\n                                        c.testColumns_(\n                                            e,\n                                            0,\n                                            (t) =>\n                                                c.isEndRelation_(t, r, !0) ||\n                                                c.isPureRelation_(t, r)\n                                        )))\n                            ) && ((t.role = r), !0)\n                        );\n                    }\n                    static isEndRelation_(t, e, r) {\n                        const n = r ? t.childNodes.length - 1 : 0;\n                        return (\n                            a.isType(t, \"relseq\") &&\n                            a.isRole(t, e) &&\n                            a.isType(t.childNodes[n], \"empty\")\n                        );\n                    }\n                    static isPureRelation_(t, e) {\n                        return a.isType(t, \"relation\") && a.isRole(t, e);\n                    }\n                    static computeColumns_(t) {\n                        const e = [];\n                        for (let r, n = 0; (r = t.childNodes[n]); n++)\n                            for (let t, n = 0; (t = r.childNodes[n]); n++) {\n                                e[n] ? e[n].push(t) : (e[n] = [t]);\n                            }\n                        return e;\n                    }\n                    static testColumns_(t, e, r) {\n                        const n = t[e];\n                        return (\n                            !!n &&\n                            n.some(function (t) {\n                                return (\n                                    t.childNodes.length && r(t.childNodes[0])\n                                );\n                            }) &&\n                            n.every(function (t) {\n                                return (\n                                    !t.childNodes.length || r(t.childNodes[0])\n                                );\n                            })\n                        );\n                    }\n                    setNodeFactory(t) {\n                        (c.getInstance().factory_ = t),\n                            i.updateFactory(c.getInstance().factory_);\n                    }\n                    getNodeFactory() {\n                        return c.getInstance().factory_;\n                    }\n                    identifierNode(t, e, r) {\n                        if (\"MathML-Unit\" === r)\n                            (t.type = \"identifier\"), (t.role = \"unit\");\n                        else if (\n                            !e &&\n                            1 === t.textContent.length &&\n                            (\"integer\" === t.role ||\n                                \"latinletter\" === t.role ||\n                                \"greekletter\" === t.role) &&\n                            \"normal\" === t.font\n                        )\n                            return (\n                                (t.font = \"italic\"),\n                                i.run(\"simpleNamedFunction\", t)\n                            );\n                        return (\n                            \"unknown\" === t.type && (t.type = \"identifier\"),\n                            c.exprFont_(t),\n                            i.run(\"simpleNamedFunction\", t)\n                        );\n                    }\n                    implicitNode(t) {\n                        if (\n                            ((t = c.getInstance().getMixedNumbers_(t)),\n                            1 === (t = c.getInstance().combineUnits_(t)).length)\n                        )\n                            return t[0];\n                        const e = c.getInstance().implicitNode_(t);\n                        return i.run(\"combine_juxtaposition\", e);\n                    }\n                    text(t, e) {\n                        return (\n                            c.exprFont_(t),\n                            (t.type = \"text\"),\n                            \"MS\" === e\n                                ? ((t.role = \"string\"), t)\n                                : \"MSPACE\" === e || t.textContent.match(/^\\s*$/)\n                                  ? ((t.role = \"space\"), t)\n                                  : t\n                        );\n                    }\n                    row(t) {\n                        return 0 ===\n                            (t = t.filter(function (t) {\n                                return !a.isType(t, \"empty\");\n                            })).length\n                            ? c.getInstance().factory_.makeEmptyNode()\n                            : ((t = c.getInstance().getFencesInRow_(t)),\n                              (t = c.getInstance().tablesInRow(t)),\n                              (t = c.getInstance().getPunctuationInRow_(t)),\n                              (t = c.getInstance().getTextInRow_(t)),\n                              (t = c.getInstance().getFunctionsInRow_(t)),\n                              c.getInstance().relationsInRow_(t));\n                    }\n                    limitNode(t, e) {\n                        if (!e.length)\n                            return c.getInstance().factory_.makeEmptyNode();\n                        let r,\n                            n = e[0],\n                            o = \"unknown\";\n                        if (!e[1]) return n;\n                        if (a.isLimitBase(n)) {\n                            r = c.MML_TO_LIMIT_[t];\n                            const i = r.length;\n                            if (\n                                ((o = r.type),\n                                (e = e.slice(0, r.length + 1)),\n                                (1 === i && a.isAccent(e[1])) ||\n                                    (2 === i &&\n                                        a.isAccent(e[1]) &&\n                                        a.isAccent(e[2])))\n                            )\n                                return (\n                                    (r = c.MML_TO_BOUNDS_[t]),\n                                    c\n                                        .getInstance()\n                                        .accentNode_(\n                                            n,\n                                            e,\n                                            r.type,\n                                            r.length,\n                                            r.accent\n                                        )\n                                );\n                            if (2 === i) {\n                                if (a.isAccent(e[1]))\n                                    return (\n                                        (n = c\n                                            .getInstance()\n                                            .accentNode_(\n                                                n,\n                                                [n, e[1]],\n                                                {\n                                                    MSUBSUP: \"subscript\",\n                                                    MUNDEROVER: \"underscore\",\n                                                }[t],\n                                                1,\n                                                !0\n                                            )),\n                                        e[2]\n                                            ? c\n                                                  .getInstance()\n                                                  .makeLimitNode_(\n                                                      n,\n                                                      [n, e[2]],\n                                                      null,\n                                                      \"limupper\"\n                                                  )\n                                            : n\n                                    );\n                                if (e[2] && a.isAccent(e[2]))\n                                    return (\n                                        (n = c\n                                            .getInstance()\n                                            .accentNode_(\n                                                n,\n                                                [n, e[2]],\n                                                {\n                                                    MSUBSUP: \"superscript\",\n                                                    MUNDEROVER: \"overscore\",\n                                                }[t],\n                                                1,\n                                                !0\n                                            )),\n                                        c\n                                            .getInstance()\n                                            .makeLimitNode_(\n                                                n,\n                                                [n, e[1]],\n                                                null,\n                                                \"limlower\"\n                                            )\n                                    );\n                                e[i] || (o = \"limlower\");\n                            }\n                            return c\n                                .getInstance()\n                                .makeLimitNode_(n, e, null, o);\n                        }\n                        return (\n                            (r = c.MML_TO_BOUNDS_[t]),\n                            c\n                                .getInstance()\n                                .accentNode_(n, e, r.type, r.length, r.accent)\n                        );\n                    }\n                    tablesInRow(t) {\n                        let e = l.partitionNodes(t, a.tableIsMatrixOrVector),\n                            r = [];\n                        for (let t, n = 0; (t = e.rel[n]); n++)\n                            (r = r.concat(e.comp.shift())),\n                                r.push(c.tableToMatrixOrVector_(t));\n                        (r = r.concat(e.comp.shift())),\n                            (e = l.partitionNodes(r, a.isTableOrMultiline)),\n                            (r = []);\n                        for (let t, n = 0; (t = e.rel[n]); n++) {\n                            const n = e.comp.shift();\n                            a.tableIsCases(t, n) && c.tableToCases_(t, n.pop()),\n                                (r = r.concat(n)),\n                                r.push(t);\n                        }\n                        return r.concat(e.comp.shift());\n                    }\n                    mfenced(t, e, r, n) {\n                        if (r && n.length > 0) {\n                            const t = c.nextSeparatorFunction_(r),\n                                e = [n.shift()];\n                            n.forEach((r) => {\n                                e.push(\n                                    c\n                                        .getInstance()\n                                        .factory_.makeContentNode(t())\n                                ),\n                                    e.push(r);\n                            }),\n                                (n = e);\n                        }\n                        return t && e\n                            ? c\n                                  .getInstance()\n                                  .horizontalFencedNode_(\n                                      c\n                                          .getInstance()\n                                          .factory_.makeContentNode(t),\n                                      c\n                                          .getInstance()\n                                          .factory_.makeContentNode(e),\n                                      n\n                                  )\n                            : (t &&\n                                  n.unshift(\n                                      c\n                                          .getInstance()\n                                          .factory_.makeContentNode(t)\n                                  ),\n                              e &&\n                                  n.push(\n                                      c\n                                          .getInstance()\n                                          .factory_.makeContentNode(e)\n                                  ),\n                              c.getInstance().row(n));\n                    }\n                    fractionLikeNode(t, e, r, n) {\n                        let o;\n                        if (!n && l.isZeroLength(r)) {\n                            const r = c\n                                    .getInstance()\n                                    .factory_.makeBranchNode(\"line\", [t], []),\n                                n = c\n                                    .getInstance()\n                                    .factory_.makeBranchNode(\"line\", [e], []);\n                            return (\n                                (o = c\n                                    .getInstance()\n                                    .factory_.makeBranchNode(\n                                        \"multiline\",\n                                        [r, n],\n                                        []\n                                    )),\n                                c.binomialForm_(o),\n                                c.classifyMultiline(o),\n                                o\n                            );\n                        }\n                        return (\n                            (o = c.getInstance().fractionNode_(t, e)),\n                            n && o.addAnnotation(\"general\", \"bevelled\"),\n                            o\n                        );\n                    }\n                    tensor(t, e, r, n, o) {\n                        const i = c\n                            .getInstance()\n                            .factory_.makeBranchNode(\n                                \"tensor\",\n                                [\n                                    t,\n                                    c.getInstance().scriptNode_(e, \"leftsub\"),\n                                    c.getInstance().scriptNode_(r, \"leftsuper\"),\n                                    c.getInstance().scriptNode_(n, \"rightsub\"),\n                                    c\n                                        .getInstance()\n                                        .scriptNode_(o, \"rightsuper\"),\n                                ],\n                                []\n                            );\n                        return (\n                            (i.role = t.role),\n                            (i.embellished = a.isEmbellished(t)),\n                            i\n                        );\n                    }\n                    pseudoTensor(t, e, r) {\n                        const n = (t) => !a.isType(t, \"empty\"),\n                            o = e.filter(n).length,\n                            i = r.filter(n).length;\n                        if (!o && !i) return t;\n                        const s = o ? (i ? \"MSUBSUP\" : \"MSUB\") : \"MSUP\",\n                            l = [t];\n                        return (\n                            o &&\n                                l.push(\n                                    c\n                                        .getInstance()\n                                        .scriptNode_(e, \"rightsub\", !0)\n                                ),\n                            i &&\n                                l.push(\n                                    c\n                                        .getInstance()\n                                        .scriptNode_(r, \"rightsuper\", !0)\n                                ),\n                            c.getInstance().limitNode(s, l)\n                        );\n                    }\n                    font(t) {\n                        const e = c.MATHJAX_FONTS[t];\n                        return e || t;\n                    }\n                    proof(t, e, r) {\n                        if (\n                            (e.inference || e.axiom || console.log(\"Noise\"),\n                            e.axiom)\n                        ) {\n                            const e = c\n                                    .getInstance()\n                                    .cleanInference(t.childNodes),\n                                n = e.length\n                                    ? c\n                                          .getInstance()\n                                          .factory_.makeBranchNode(\n                                              \"inference\",\n                                              r(e),\n                                              []\n                                          )\n                                    : c.getInstance().factory_.makeEmptyNode();\n                            return (n.role = \"axiom\"), (n.mathmlTree = t), n;\n                        }\n                        const n = c.getInstance().inference(t, e, r);\n                        return (\n                            e.proof &&\n                                ((n.role = \"proof\"),\n                                (n.childNodes[0].role = \"final\")),\n                            n\n                        );\n                    }\n                    inference(t, e, r) {\n                        if (e.inferenceRule) {\n                            const e = c.getInstance().getFormulas(t, [], r);\n                            return c\n                                .getInstance()\n                                .factory_.makeBranchNode(\n                                    \"inference\",\n                                    [e.conclusion, e.premises],\n                                    []\n                                );\n                        }\n                        const o = e.labelledRule,\n                            i = n.toArray(t.childNodes),\n                            s = [];\n                        (\"left\" !== o && \"both\" !== o) ||\n                            s.push(c.getInstance().getLabel(t, i, r, \"left\")),\n                            (\"right\" !== o && \"both\" !== o) ||\n                                s.push(\n                                    c.getInstance().getLabel(t, i, r, \"right\")\n                                );\n                        const a = c.getInstance().getFormulas(t, i, r),\n                            l = c\n                                .getInstance()\n                                .factory_.makeBranchNode(\n                                    \"inference\",\n                                    [a.conclusion, a.premises],\n                                    s\n                                );\n                        return (l.mathmlTree = t), l;\n                    }\n                    getLabel(t, e, r, o) {\n                        const i = c\n                                .getInstance()\n                                .findNestedRow(e, \"prooflabel\", o),\n                            s = c\n                                .getInstance()\n                                .factory_.makeBranchNode(\n                                    \"rulelabel\",\n                                    r(n.toArray(i.childNodes)),\n                                    []\n                                );\n                        return (s.role = o), (s.mathmlTree = i), s;\n                    }\n                    getFormulas(t, e, r) {\n                        const o = e.length\n                                ? c\n                                      .getInstance()\n                                      .findNestedRow(e, \"inferenceRule\")\n                                : t,\n                            i = \"up\" === c.getSemantics(o).inferenceRule,\n                            s = i ? o.childNodes[1] : o.childNodes[0],\n                            a = i ? o.childNodes[0] : o.childNodes[1],\n                            l = s.childNodes[0].childNodes[0],\n                            u = n.toArray(l.childNodes[0].childNodes),\n                            p = [];\n                        let h = 1;\n                        for (const t of u)\n                            h % 2 && p.push(t.childNodes[0]), h++;\n                        const f = r(p),\n                            d = r(n.toArray(a.childNodes[0].childNodes))[0],\n                            m = c\n                                .getInstance()\n                                .factory_.makeBranchNode(\"premises\", f, []);\n                        m.mathmlTree = l;\n                        const y = c\n                            .getInstance()\n                            .factory_.makeBranchNode(\"conclusion\", [d], []);\n                        return (\n                            (y.mathmlTree = a.childNodes[0].childNodes[0]),\n                            { conclusion: y, premises: m }\n                        );\n                    }\n                    findNestedRow(t, e, r) {\n                        return c.getInstance().findNestedRow_(t, e, 0, r);\n                    }\n                    cleanInference(t) {\n                        return n.toArray(t).filter(function (t) {\n                            return \"MSPACE\" !== n.tagName(t);\n                        });\n                    }\n                    operatorNode(t) {\n                        return (\n                            \"unknown\" === t.type && (t.type = \"operator\"),\n                            i.run(\"multioperator\", t)\n                        );\n                    }\n                    implicitNode_(t) {\n                        const e = c\n                            .getInstance()\n                            .factory_.makeMultipleContentNodes(\n                                t.length - 1,\n                                o.invisibleTimes()\n                            );\n                        c.matchSpaces_(t, e);\n                        const r = c.getInstance().infixNode_(t, e[0]);\n                        return (\n                            (r.role = \"implicit\"),\n                            e.forEach(function (t) {\n                                t.parent = r;\n                            }),\n                            (r.contentNodes = e),\n                            r\n                        );\n                    }\n                    infixNode_(t, e) {\n                        const r = c\n                            .getInstance()\n                            .factory_.makeBranchNode(\n                                \"infixop\",\n                                t,\n                                [e],\n                                l.getEmbellishedInner(e).textContent\n                            );\n                        return (\n                            (r.role = e.role),\n                            i.run(\"propagateSimpleFunction\", r)\n                        );\n                    }\n                    explicitMixed_(t) {\n                        const e = l.partitionNodes(t, function (t) {\n                            return t.textContent === o.invisiblePlus();\n                        });\n                        if (!e.rel.length) return t;\n                        let r = [];\n                        for (let t, n = 0; (t = e.rel[n]); n++) {\n                            const o = e.comp[n],\n                                i = e.comp[n + 1],\n                                s = o.length - 1;\n                            if (\n                                o[s] &&\n                                i[0] &&\n                                a.isType(o[s], \"number\") &&\n                                !a.isRole(o[s], \"mixed\") &&\n                                a.isType(i[0], \"fraction\")\n                            ) {\n                                const t = c\n                                    .getInstance()\n                                    .factory_.makeBranchNode(\n                                        \"number\",\n                                        [o[s], i[0]],\n                                        []\n                                    );\n                                (t.role = \"mixed\"),\n                                    (r = r.concat(o.slice(0, s))),\n                                    r.push(t),\n                                    i.shift();\n                            } else (r = r.concat(o)), r.push(t);\n                        }\n                        return r.concat(e.comp[e.comp.length - 1]);\n                    }\n                    concatNode_(t, e, r) {\n                        if (0 === e.length) return t;\n                        const n = e\n                                .map(function (t) {\n                                    return l.getEmbellishedInner(t).textContent;\n                                })\n                                .join(\" \"),\n                            o = c\n                                .getInstance()\n                                .factory_.makeBranchNode(r, [t], e, n);\n                        return e.length > 1 && (o.role = \"multiop\"), o;\n                    }\n                    prefixNode_(t, e) {\n                        const r = l.partitionNodes(e, (t) =>\n                            a.isRole(t, \"subtraction\")\n                        );\n                        let n = c\n                            .getInstance()\n                            .concatNode_(t, r.comp.pop(), \"prefixop\");\n                        for (\n                            1 === n.contentNodes.length &&\n                            \"addition\" === n.contentNodes[0].role &&\n                            \"+\" === n.contentNodes[0].textContent &&\n                            (n.role = \"positive\");\n                            r.rel.length > 0;\n\n                        )\n                            (n = c\n                                .getInstance()\n                                .concatNode_(n, [r.rel.pop()], \"prefixop\")),\n                                (n.role = \"negative\"),\n                                (n = c\n                                    .getInstance()\n                                    .concatNode_(n, r.comp.pop(), \"prefixop\"));\n                        return n;\n                    }\n                    postfixNode_(t, e) {\n                        return e.length\n                            ? c.getInstance().concatNode_(t, e, \"postfixop\")\n                            : t;\n                    }\n                    combineUnits_(t) {\n                        const e = l.partitionNodes(t, function (t) {\n                            return !a.isRole(t, \"unit\");\n                        });\n                        if (t.length === e.rel.length) return e.rel;\n                        const r = [];\n                        let n, o;\n                        do {\n                            const t = e.comp.shift();\n                            n = e.rel.shift();\n                            let i = null;\n                            (o = r.pop()),\n                                o &&\n                                    (t.length && a.isUnitCounter(o)\n                                        ? t.unshift(o)\n                                        : r.push(o)),\n                                1 === t.length && (i = t.pop()),\n                                t.length > 1 &&\n                                    ((i = c.getInstance().implicitNode_(t)),\n                                    (i.role = \"unit\")),\n                                i && r.push(i),\n                                n && r.push(n);\n                        } while (n);\n                        return r;\n                    }\n                    getMixedNumbers_(t) {\n                        const e = l.partitionNodes(t, function (t) {\n                            return (\n                                a.isType(t, \"fraction\") && a.isRole(t, \"vulgar\")\n                            );\n                        });\n                        if (!e.rel.length) return t;\n                        let r = [];\n                        for (let t, n = 0; (t = e.rel[n]); n++) {\n                            const o = e.comp[n],\n                                i = o.length - 1;\n                            if (\n                                o[i] &&\n                                a.isType(o[i], \"number\") &&\n                                (a.isRole(o[i], \"integer\") ||\n                                    a.isRole(o[i], \"float\"))\n                            ) {\n                                const e = c\n                                    .getInstance()\n                                    .factory_.makeBranchNode(\n                                        \"number\",\n                                        [o[i], t],\n                                        []\n                                    );\n                                (e.role = \"mixed\"),\n                                    (r = r.concat(o.slice(0, i))),\n                                    r.push(e);\n                            } else (r = r.concat(o)), r.push(t);\n                        }\n                        return r.concat(e.comp[e.comp.length - 1]);\n                    }\n                    getTextInRow_(t) {\n                        if (t.length <= 1) return t;\n                        const e = l.partitionNodes(t, (t) =>\n                            a.isType(t, \"text\")\n                        );\n                        if (0 === e.rel.length) return t;\n                        const r = [];\n                        let n = e.comp[0];\n                        n.length > 0 && r.push(c.getInstance().row(n));\n                        for (let t, o = 0; (t = e.rel[o]); o++)\n                            r.push(t),\n                                (n = e.comp[o + 1]),\n                                n.length > 0 && r.push(c.getInstance().row(n));\n                        return [c.getInstance().dummyNode_(r)];\n                    }\n                    relationsInRow_(t) {\n                        const e = l.partitionNodes(t, a.isRelation),\n                            r = e.rel[0];\n                        if (!r) return c.getInstance().operationsInRow_(t);\n                        if (1 === t.length) return t[0];\n                        const n = e.comp.map(c.getInstance().operationsInRow_);\n                        let o;\n                        return e.rel.some(function (t) {\n                            return !t.equals(r);\n                        })\n                            ? ((o = c\n                                  .getInstance()\n                                  .factory_.makeBranchNode(\n                                      \"multirel\",\n                                      n,\n                                      e.rel\n                                  )),\n                              e.rel.every(function (t) {\n                                  return t.role === r.role;\n                              }) && (o.role = r.role),\n                              o)\n                            : ((o = c\n                                  .getInstance()\n                                  .factory_.makeBranchNode(\n                                      \"relseq\",\n                                      n,\n                                      e.rel,\n                                      l.getEmbellishedInner(r).textContent\n                                  )),\n                              (o.role = r.role),\n                              o);\n                    }\n                    operationsInRow_(t) {\n                        if (0 === t.length)\n                            return c.getInstance().factory_.makeEmptyNode();\n                        if (\n                            1 === (t = c.getInstance().explicitMixed_(t)).length\n                        )\n                            return t[0];\n                        const e = [];\n                        for (; t.length > 0 && a.isOperator(t[0]); )\n                            e.push(t.shift());\n                        if (0 === t.length)\n                            return c.getInstance().prefixNode_(e.pop(), e);\n                        if (1 === t.length)\n                            return c.getInstance().prefixNode_(t[0], e);\n                        t = i.run(\"convert_juxtaposition\", t);\n                        const r = l.sliceNodes(t, a.isOperator),\n                            n = c\n                                .getInstance()\n                                .prefixNode_(\n                                    c.getInstance().implicitNode(r.head),\n                                    e\n                                );\n                        return r.div\n                            ? c.getInstance().operationsTree_(r.tail, n, r.div)\n                            : n;\n                    }\n                    operationsTree_(t, e, r, n) {\n                        const o = n || [];\n                        if (0 === t.length) {\n                            if ((o.unshift(r), \"infixop\" === e.type)) {\n                                const t = c\n                                    .getInstance()\n                                    .postfixNode_(e.childNodes.pop(), o);\n                                return e.appendChild(t), e;\n                            }\n                            return c.getInstance().postfixNode_(e, o);\n                        }\n                        const i = l.sliceNodes(t, a.isOperator);\n                        if (0 === i.head.length)\n                            return (\n                                o.push(i.div),\n                                c.getInstance().operationsTree_(i.tail, e, r, o)\n                            );\n                        const s = c\n                                .getInstance()\n                                .prefixNode_(\n                                    c.getInstance().implicitNode(i.head),\n                                    o\n                                ),\n                            u = c.getInstance().appendOperand_(e, r, s);\n                        return i.div\n                            ? c\n                                  .getInstance()\n                                  .operationsTree_(i.tail, u, i.div, [])\n                            : u;\n                    }\n                    appendOperand_(t, e, r) {\n                        if (\"infixop\" !== t.type)\n                            return c.getInstance().infixNode_([t, r], e);\n                        const n = c.getInstance().appendDivisionOp_(t, e, r);\n                        return (\n                            n ||\n                            (c.getInstance().appendExistingOperator_(t, e, r)\n                                ? t\n                                : \"multiplication\" === e.role\n                                  ? c\n                                        .getInstance()\n                                        .appendMultiplicativeOp_(t, e, r)\n                                  : c.getInstance().appendAdditiveOp_(t, e, r))\n                        );\n                    }\n                    appendDivisionOp_(t, e, r) {\n                        return \"division\" === e.role\n                            ? a.isImplicit(t)\n                                ? c.getInstance().infixNode_([t, r], e)\n                                : c.getInstance().appendLastOperand_(t, e, r)\n                            : \"division\" === t.role\n                              ? c.getInstance().infixNode_([t, r], e)\n                              : null;\n                    }\n                    appendLastOperand_(t, e, r) {\n                        let n = t,\n                            o = t.childNodes[t.childNodes.length - 1];\n                        for (; o && \"infixop\" === o.type && !a.isImplicit(o); )\n                            (n = o),\n                                (o = n.childNodes[t.childNodes.length - 1]);\n                        const i = c\n                            .getInstance()\n                            .infixNode_([n.childNodes.pop(), r], e);\n                        return n.appendChild(i), t;\n                    }\n                    appendMultiplicativeOp_(t, e, r) {\n                        if (a.isImplicit(t))\n                            return c.getInstance().infixNode_([t, r], e);\n                        let n = t,\n                            o = t.childNodes[t.childNodes.length - 1];\n                        for (; o && \"infixop\" === o.type && !a.isImplicit(o); )\n                            (n = o),\n                                (o = n.childNodes[t.childNodes.length - 1]);\n                        const i = c\n                            .getInstance()\n                            .infixNode_([n.childNodes.pop(), r], e);\n                        return n.appendChild(i), t;\n                    }\n                    appendAdditiveOp_(t, e, r) {\n                        return c.getInstance().infixNode_([t, r], e);\n                    }\n                    appendExistingOperator_(t, e, r) {\n                        return (\n                            !(!t || \"infixop\" !== t.type || a.isImplicit(t)) &&\n                            (t.contentNodes[0].equals(e)\n                                ? (t.appendContentNode(e), t.appendChild(r), !0)\n                                : c\n                                      .getInstance()\n                                      .appendExistingOperator_(\n                                          t.childNodes[t.childNodes.length - 1],\n                                          e,\n                                          r\n                                      ))\n                        );\n                    }\n                    getFencesInRow_(t) {\n                        let e = l.partitionNodes(t, a.isFence);\n                        e = c.purgeFences_(e);\n                        const r = e.comp.shift();\n                        return c.getInstance().fences_(e.rel, e.comp, [], [r]);\n                    }\n                    fences_(t, e, r, n) {\n                        if (0 === t.length && 0 === r.length) return n[0];\n                        const o = (t) => a.isRole(t, \"open\");\n                        if (0 === t.length) {\n                            const t = n.shift();\n                            for (; r.length > 0; ) {\n                                if (o(r[0])) {\n                                    const e = r.shift();\n                                    c.fenceToPunct_(e), t.push(e);\n                                } else {\n                                    const e = l.sliceNodes(r, o),\n                                        i = e.head.length - 1,\n                                        s = c\n                                            .getInstance()\n                                            .neutralFences_(\n                                                e.head,\n                                                n.slice(0, i)\n                                            );\n                                    (n = n.slice(i)),\n                                        t.push(...s),\n                                        e.div && e.tail.unshift(e.div),\n                                        (r = e.tail);\n                                }\n                                t.push(...n.shift());\n                            }\n                            return t;\n                        }\n                        const i = r[r.length - 1],\n                            s = t[0].role;\n                        if (\n                            \"open\" === s ||\n                            (a.isNeutralFence(t[0]) &&\n                                (!i || !a.compareNeutralFences(t[0], i)))\n                        ) {\n                            r.push(t.shift());\n                            const o = e.shift();\n                            return (\n                                o && n.push(o),\n                                c.getInstance().fences_(t, e, r, n)\n                            );\n                        }\n                        if (i && \"close\" === s && \"open\" === i.role) {\n                            const o = c\n                                .getInstance()\n                                .horizontalFencedNode_(\n                                    r.pop(),\n                                    t.shift(),\n                                    n.pop()\n                                );\n                            return (\n                                n.push(n.pop().concat([o], e.shift())),\n                                c.getInstance().fences_(t, e, r, n)\n                            );\n                        }\n                        if (i && a.compareNeutralFences(t[0], i)) {\n                            if (\n                                !a.elligibleLeftNeutral(i) ||\n                                !a.elligibleRightNeutral(t[0])\n                            ) {\n                                r.push(t.shift());\n                                const o = e.shift();\n                                return (\n                                    o && n.push(o),\n                                    c.getInstance().fences_(t, e, r, n)\n                                );\n                            }\n                            const o = c\n                                .getInstance()\n                                .horizontalFencedNode_(\n                                    r.pop(),\n                                    t.shift(),\n                                    n.pop()\n                                );\n                            return (\n                                n.push(n.pop().concat([o], e.shift())),\n                                c.getInstance().fences_(t, e, r, n)\n                            );\n                        }\n                        if (\n                            i &&\n                            \"close\" === s &&\n                            a.isNeutralFence(i) &&\n                            r.some(o)\n                        ) {\n                            const i = l.sliceNodes(r, o, !0),\n                                s = n.pop(),\n                                a = n.length - i.tail.length + 1,\n                                u = c\n                                    .getInstance()\n                                    .neutralFences_(i.tail, n.slice(a));\n                            n = n.slice(0, a);\n                            const p = c\n                                .getInstance()\n                                .horizontalFencedNode_(\n                                    i.div,\n                                    t.shift(),\n                                    n.pop().concat(u, s)\n                                );\n                            return (\n                                n.push(n.pop().concat([p], e.shift())),\n                                c.getInstance().fences_(t, e, i.head, n)\n                            );\n                        }\n                        const u = t.shift();\n                        return (\n                            c.fenceToPunct_(u),\n                            n.push(n.pop().concat([u], e.shift())),\n                            c.getInstance().fences_(t, e, r, n)\n                        );\n                    }\n                    neutralFences_(t, e) {\n                        if (0 === t.length) return t;\n                        if (1 === t.length) return c.fenceToPunct_(t[0]), t;\n                        const r = t.shift();\n                        if (!a.elligibleLeftNeutral(r)) {\n                            c.fenceToPunct_(r);\n                            const n = e.shift();\n                            return (\n                                n.unshift(r),\n                                n.concat(c.getInstance().neutralFences_(t, e))\n                            );\n                        }\n                        const n = l.sliceNodes(t, function (t) {\n                            return a.compareNeutralFences(t, r);\n                        });\n                        if (!n.div) {\n                            c.fenceToPunct_(r);\n                            const n = e.shift();\n                            return (\n                                n.unshift(r),\n                                n.concat(c.getInstance().neutralFences_(t, e))\n                            );\n                        }\n                        if (!a.elligibleRightNeutral(n.div))\n                            return (\n                                c.fenceToPunct_(n.div),\n                                t.unshift(r),\n                                c.getInstance().neutralFences_(t, e)\n                            );\n                        const o = c\n                            .getInstance()\n                            .combineFencedContent_(r, n.div, n.head, e);\n                        if (n.tail.length > 0) {\n                            const t = o.shift(),\n                                e = c.getInstance().neutralFences_(n.tail, o);\n                            return t.concat(e);\n                        }\n                        return o[0];\n                    }\n                    combineFencedContent_(t, e, r, n) {\n                        if (0 === r.length) {\n                            const r = c\n                                .getInstance()\n                                .horizontalFencedNode_(t, e, n.shift());\n                            return (\n                                n.length > 0 ? n[0].unshift(r) : (n = [[r]]), n\n                            );\n                        }\n                        const o = n.shift(),\n                            i = r.length - 1,\n                            s = n.slice(0, i),\n                            a = (n = n.slice(i)).shift(),\n                            l = c.getInstance().neutralFences_(r, s);\n                        o.push(...l), o.push(...a);\n                        const u = c\n                            .getInstance()\n                            .horizontalFencedNode_(t, e, o);\n                        return n.length > 0 ? n[0].unshift(u) : (n = [[u]]), n;\n                    }\n                    horizontalFencedNode_(t, e, r) {\n                        const n = c.getInstance().row(r);\n                        let o = c\n                            .getInstance()\n                            .factory_.makeBranchNode(\"fenced\", [n], [t, e]);\n                        return (\n                            \"open\" === t.role\n                                ? (c.getInstance().classifyHorizontalFence_(o),\n                                  (o = i.run(\"propagateComposedFunction\", o)))\n                                : (o.role = t.role),\n                            (o = i.run(\"detect_cycle\", o)),\n                            c.rewriteFencedNode_(o)\n                        );\n                    }\n                    classifyHorizontalFence_(t) {\n                        t.role = \"leftright\";\n                        const e = t.childNodes;\n                        if (!a.isSetNode(t) || e.length > 1) return;\n                        if (0 === e.length || \"empty\" === e[0].type)\n                            return void (t.role = \"set empty\");\n                        const r = e[0].type;\n                        if (1 === e.length && a.isSingletonSetContent(e[0]))\n                            return void (t.role = \"set singleton\");\n                        const n = e[0].role;\n                        if (\"punctuated\" === r && \"sequence\" === n) {\n                            if (\"comma\" !== e[0].contentNodes[0].role)\n                                return 1 !== e[0].contentNodes.length ||\n                                    (\"vbar\" !== e[0].contentNodes[0].role &&\n                                        \"colon\" !== e[0].contentNodes[0].role)\n                                    ? void 0\n                                    : ((t.role = \"set extended\"),\n                                      void c.getInstance().setExtension_(t));\n                            t.role = \"set collection\";\n                        }\n                    }\n                    setExtension_(t) {\n                        const e = t.childNodes[0].childNodes[0];\n                        e &&\n                            \"infixop\" === e.type &&\n                            1 === e.contentNodes.length &&\n                            a.isMembership(e.contentNodes[0]) &&\n                            (e.addAnnotation(\"set\", \"intensional\"),\n                            e.contentNodes[0].addAnnotation(\n                                \"set\",\n                                \"intensional\"\n                            ));\n                    }\n                    getPunctuationInRow_(t) {\n                        if (t.length <= 1) return t;\n                        const e = (t) => {\n                                const e = t.type;\n                                return (\n                                    \"punctuation\" === e ||\n                                    \"text\" === e ||\n                                    \"operator\" === e ||\n                                    \"relation\" === e\n                                );\n                            },\n                            r = l.partitionNodes(t, function (r) {\n                                if (!a.isPunctuation(r)) return !1;\n                                if (\n                                    a.isPunctuation(r) &&\n                                    !a.isRole(r, \"ellipsis\")\n                                )\n                                    return !0;\n                                const n = t.indexOf(r);\n                                if (0 === n) return !t[1] || !e(t[1]);\n                                const o = t[n - 1];\n                                if (n === t.length - 1) return !e(o);\n                                const i = t[n + 1];\n                                return !e(o) || !e(i);\n                            });\n                        if (0 === r.rel.length) return t;\n                        const n = [];\n                        let o = r.comp.shift();\n                        o.length > 0 && n.push(c.getInstance().row(o));\n                        let i = 0;\n                        for (; r.comp.length > 0; )\n                            n.push(r.rel[i++]),\n                                (o = r.comp.shift()),\n                                o.length > 0 && n.push(c.getInstance().row(o));\n                        return [c.getInstance().punctuatedNode_(n, r.rel)];\n                    }\n                    punctuatedNode_(t, e) {\n                        const r = c\n                            .getInstance()\n                            .factory_.makeBranchNode(\"punctuated\", t, e);\n                        if (e.length === t.length) {\n                            const t = e[0].role;\n                            if (\n                                \"unknown\" !== t &&\n                                e.every(function (e) {\n                                    return e.role === t;\n                                })\n                            )\n                                return (r.role = t), r;\n                        }\n                        return (\n                            a.singlePunctAtPosition(t, e, 0)\n                                ? (r.role = \"startpunct\")\n                                : a.singlePunctAtPosition(t, e, t.length - 1)\n                                  ? (r.role = \"endpunct\")\n                                  : e.every((t) => a.isRole(t, \"dummy\"))\n                                    ? (r.role = \"text\")\n                                    : e.every((t) => a.isRole(t, \"space\"))\n                                      ? (r.role = \"space\")\n                                      : (r.role = \"sequence\"),\n                            r\n                        );\n                    }\n                    dummyNode_(t) {\n                        const e = c\n                            .getInstance()\n                            .factory_.makeMultipleContentNodes(\n                                t.length - 1,\n                                o.invisibleComma()\n                            );\n                        return (\n                            e.forEach(function (t) {\n                                t.role = \"dummy\";\n                            }),\n                            c.getInstance().punctuatedNode_(t, e)\n                        );\n                    }\n                    accentRole_(t, e) {\n                        if (!a.isAccent(t)) return !1;\n                        const r = t.textContent,\n                            n =\n                                o.lookupSecondary(\"bar\", r) ||\n                                o.lookupSecondary(\"tilde\", r) ||\n                                t.role;\n                        return (\n                            (t.role =\n                                \"underscore\" === e\n                                    ? \"underaccent\"\n                                    : \"overaccent\"),\n                            t.addAnnotation(\"accent\", n),\n                            !0\n                        );\n                    }\n                    accentNode_(t, e, r, n, o) {\n                        const i = (e = e.slice(0, n + 1))[1],\n                            s = e[2];\n                        let a;\n                        if (\n                            (!o &&\n                                s &&\n                                ((a = c\n                                    .getInstance()\n                                    .factory_.makeBranchNode(\n                                        \"subscript\",\n                                        [t, i],\n                                        []\n                                    )),\n                                (a.role = \"subsup\"),\n                                (e = [a, s]),\n                                (r = \"superscript\")),\n                            o)\n                        ) {\n                            const n = c.getInstance().accentRole_(i, r);\n                            if (s) {\n                                c.getInstance().accentRole_(s, \"overscore\") &&\n                                !n\n                                    ? ((a = c\n                                          .getInstance()\n                                          .factory_.makeBranchNode(\n                                              \"overscore\",\n                                              [t, s],\n                                              []\n                                          )),\n                                      (e = [a, i]),\n                                      (r = \"underscore\"))\n                                    : ((a = c\n                                          .getInstance()\n                                          .factory_.makeBranchNode(\n                                              \"underscore\",\n                                              [t, i],\n                                              []\n                                          )),\n                                      (e = [a, s]),\n                                      (r = \"overscore\")),\n                                    (a.role = \"underover\");\n                            }\n                        }\n                        return c.getInstance().makeLimitNode_(t, e, a, r);\n                    }\n                    makeLimitNode_(t, e, r, n) {\n                        if (\"limupper\" === n && \"limlower\" === t.type)\n                            return (\n                                t.childNodes.push(e[1]),\n                                (e[1].parent = t),\n                                (t.type = \"limboth\"),\n                                t\n                            );\n                        if (\"limlower\" === n && \"limupper\" === t.type)\n                            return (\n                                t.childNodes.splice(1, -1, e[1]),\n                                (e[1].parent = t),\n                                (t.type = \"limboth\"),\n                                t\n                            );\n                        const o = c\n                                .getInstance()\n                                .factory_.makeBranchNode(n, e, []),\n                            i = a.isEmbellished(t);\n                        return (\n                            r && (r.embellished = i),\n                            (o.embellished = i),\n                            (o.role = t.role),\n                            o\n                        );\n                    }\n                    getFunctionsInRow_(t, e) {\n                        const r = e || [];\n                        if (0 === t.length) return r;\n                        const n = t.shift(),\n                            o = c.classifyFunction_(n, t);\n                        if (!o)\n                            return (\n                                r.push(n),\n                                c.getInstance().getFunctionsInRow_(t, r)\n                            );\n                        const i = c.getInstance().getFunctionsInRow_(t, []),\n                            s = c.getInstance().getFunctionArgs_(n, i, o);\n                        return r.concat(s);\n                    }\n                    getFunctionArgs_(t, e, r) {\n                        let n, o, i;\n                        switch (r) {\n                            case \"integral\": {\n                                const r = c.getInstance().getIntegralArgs_(e);\n                                if (!r.intvar && !r.integrand.length)\n                                    return r.rest.unshift(t), r.rest;\n                                const n = c.getInstance().row(r.integrand);\n                                return (\n                                    (i = c\n                                        .getInstance()\n                                        .integralNode_(t, n, r.intvar)),\n                                    r.rest.unshift(i),\n                                    r.rest\n                                );\n                            }\n                            case \"prefix\":\n                                if (e[0] && \"fenced\" === e[0].type) {\n                                    const r = e.shift();\n                                    return (\n                                        a.isNeutralFence(r) ||\n                                            (r.role = \"leftright\"),\n                                        (i = c\n                                            .getInstance()\n                                            .functionNode_(t, r)),\n                                        e.unshift(i),\n                                        e\n                                    );\n                                }\n                                if (\n                                    ((n = l.sliceNodes(\n                                        e,\n                                        a.isPrefixFunctionBoundary\n                                    )),\n                                    n.head.length)\n                                )\n                                    (o = c.getInstance().row(n.head)),\n                                        n.div && n.tail.unshift(n.div);\n                                else {\n                                    if (!n.div || !a.isType(n.div, \"appl\"))\n                                        return e.unshift(t), e;\n                                    o = n.div;\n                                }\n                                return (\n                                    (i = c.getInstance().functionNode_(t, o)),\n                                    n.tail.unshift(i),\n                                    n.tail\n                                );\n                            case \"bigop\":\n                                return (\n                                    (n = l.sliceNodes(e, a.isBigOpBoundary)),\n                                    n.head.length\n                                        ? ((o = c.getInstance().row(n.head)),\n                                          (i = c\n                                              .getInstance()\n                                              .bigOpNode_(t, o)),\n                                          n.div && n.tail.unshift(n.div),\n                                          n.tail.unshift(i),\n                                          n.tail)\n                                        : (e.unshift(t), e)\n                                );\n                            default: {\n                                if (0 === e.length) return [t];\n                                const r = e[0];\n                                return \"fenced\" === r.type &&\n                                    !a.isNeutralFence(r) &&\n                                    a.isSimpleFunctionScope(r)\n                                    ? ((r.role = \"leftright\"),\n                                      c.propagateFunctionRole_(\n                                          t,\n                                          \"simple function\"\n                                      ),\n                                      (i = c\n                                          .getInstance()\n                                          .functionNode_(t, e.shift())),\n                                      e.unshift(i),\n                                      e)\n                                    : (e.unshift(t), e);\n                            }\n                        }\n                    }\n                    getIntegralArgs_(t, e = []) {\n                        if (0 === t.length)\n                            return { integrand: e, intvar: null, rest: t };\n                        const r = t[0];\n                        if (a.isGeneralFunctionBoundary(r))\n                            return { integrand: e, intvar: null, rest: t };\n                        if (a.isIntegralDxBoundarySingle(r))\n                            return (\n                                (r.role = \"integral\"),\n                                { integrand: e, intvar: r, rest: t.slice(1) }\n                            );\n                        if (t[1] && a.isIntegralDxBoundary(r, t[1])) {\n                            const n = c.getInstance().prefixNode_(t[1], [r]);\n                            return (\n                                (n.role = \"integral\"),\n                                { integrand: e, intvar: n, rest: t.slice(2) }\n                            );\n                        }\n                        return (\n                            e.push(t.shift()),\n                            c.getInstance().getIntegralArgs_(t, e)\n                        );\n                    }\n                    functionNode_(t, e) {\n                        const r = c\n                                .getInstance()\n                                .factory_.makeContentNode(\n                                    o.functionApplication()\n                                ),\n                            n = c.getInstance().funcAppls[t.id];\n                        n &&\n                            ((r.mathmlTree = n.mathmlTree),\n                            (r.mathml = n.mathml),\n                            (r.annotation = n.annotation),\n                            (r.attributes = n.attributes),\n                            delete c.getInstance().funcAppls[t.id]),\n                            (r.type = \"punctuation\"),\n                            (r.role = \"application\");\n                        const i = c.getFunctionOp_(t, function (t) {\n                            return (\n                                a.isType(t, \"function\") ||\n                                (a.isType(t, \"identifier\") &&\n                                    a.isRole(t, \"simple function\"))\n                            );\n                        });\n                        return c\n                            .getInstance()\n                            .functionalNode_(\"appl\", [t, e], i, [r]);\n                    }\n                    bigOpNode_(t, e) {\n                        const r = c.getFunctionOp_(t, (t) =>\n                            a.isType(t, \"largeop\")\n                        );\n                        return c\n                            .getInstance()\n                            .functionalNode_(\"bigop\", [t, e], r, []);\n                    }\n                    integralNode_(t, e, r) {\n                        (e = e || c.getInstance().factory_.makeEmptyNode()),\n                            (r = r || c.getInstance().factory_.makeEmptyNode());\n                        const n = c.getFunctionOp_(t, (t) =>\n                            a.isType(t, \"largeop\")\n                        );\n                        return c\n                            .getInstance()\n                            .functionalNode_(\"integral\", [t, e, r], n, []);\n                    }\n                    functionalNode_(t, e, r, n) {\n                        const o = e[0];\n                        let i;\n                        r && ((i = r.parent), n.push(r));\n                        const s = c\n                            .getInstance()\n                            .factory_.makeBranchNode(t, e, n);\n                        return (s.role = o.role), i && (r.parent = i), s;\n                    }\n                    fractionNode_(t, e) {\n                        const r = c\n                            .getInstance()\n                            .factory_.makeBranchNode(\"fraction\", [t, e], []);\n                        return (\n                            (r.role = r.childNodes.every(function (t) {\n                                return (\n                                    a.isType(t, \"number\") &&\n                                    a.isRole(t, \"integer\")\n                                );\n                            })\n                                ? \"vulgar\"\n                                : r.childNodes.every(a.isPureUnit)\n                                  ? \"unit\"\n                                  : \"division\"),\n                            i.run(\"propagateSimpleFunction\", r)\n                        );\n                    }\n                    scriptNode_(t, e, r) {\n                        let n;\n                        switch (t.length) {\n                            case 0:\n                                n = c.getInstance().factory_.makeEmptyNode();\n                                break;\n                            case 1:\n                                if (((n = t[0]), r)) return n;\n                                break;\n                            default:\n                                n = c.getInstance().dummyNode_(t);\n                        }\n                        return (n.role = e), n;\n                    }\n                    findNestedRow_(t, e, r, o) {\n                        if (r > 3) return null;\n                        for (let i, s = 0; (i = t[s]); s++) {\n                            const t = n.tagName(i);\n                            if (\"MSPACE\" !== t) {\n                                if (\"MROW\" === t)\n                                    return c\n                                        .getInstance()\n                                        .findNestedRow_(\n                                            n.toArray(i.childNodes),\n                                            e,\n                                            r + 1,\n                                            o\n                                        );\n                                if (c.findSemantics(i, e, o)) return i;\n                            }\n                        }\n                        return null;\n                    }\n                }\n                (e.default = c),\n                    (c.FENCE_TO_PUNCT_ = {\n                        metric: \"metric\",\n                        neutral: \"vbar\",\n                        open: \"openfence\",\n                        close: \"closefence\",\n                    }),\n                    (c.MML_TO_LIMIT_ = {\n                        MSUB: { type: \"limlower\", length: 1 },\n                        MUNDER: { type: \"limlower\", length: 1 },\n                        MSUP: { type: \"limupper\", length: 1 },\n                        MOVER: { type: \"limupper\", length: 1 },\n                        MSUBSUP: { type: \"limboth\", length: 2 },\n                        MUNDEROVER: { type: \"limboth\", length: 2 },\n                    }),\n                    (c.MML_TO_BOUNDS_ = {\n                        MSUB: { type: \"subscript\", length: 1, accent: !1 },\n                        MSUP: { type: \"superscript\", length: 1, accent: !1 },\n                        MSUBSUP: { type: \"subscript\", length: 2, accent: !1 },\n                        MUNDER: { type: \"underscore\", length: 1, accent: !0 },\n                        MOVER: { type: \"overscore\", length: 1, accent: !0 },\n                        MUNDEROVER: {\n                            type: \"underscore\",\n                            length: 2,\n                            accent: !0,\n                        },\n                    }),\n                    (c.CLASSIFY_FUNCTION_ = {\n                        integral: \"integral\",\n                        sum: \"bigop\",\n                        \"prefix function\": \"prefix\",\n                        \"limit function\": \"prefix\",\n                        \"simple function\": \"prefix\",\n                        \"composed function\": \"prefix\",\n                    }),\n                    (c.MATHJAX_FONTS = {\n                        \"-tex-caligraphic\": \"caligraphic\",\n                        \"-tex-caligraphic-bold\": \"caligraphic-bold\",\n                        \"-tex-calligraphic\": \"caligraphic\",\n                        \"-tex-calligraphic-bold\": \"caligraphic-bold\",\n                        \"-tex-oldstyle\": \"oldstyle\",\n                        \"-tex-oldstyle-bold\": \"oldstyle-bold\",\n                        \"-tex-mathit\": \"italic\",\n                    });\n            },\n            5656: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticSkeleton = void 0);\n                const n = r(707),\n                    o = r(5274),\n                    i = r(2298);\n                class s {\n                    constructor(t) {\n                        (this.parents = null),\n                            (this.levelsMap = null),\n                            (t = 0 === t ? t : t || []),\n                            (this.array = t);\n                    }\n                    static fromTree(t) {\n                        return s.fromNode(t.root);\n                    }\n                    static fromNode(t) {\n                        return new s(s.fromNode_(t));\n                    }\n                    static fromString(t) {\n                        return new s(s.fromString_(t));\n                    }\n                    static simpleCollapseStructure(t) {\n                        return \"number\" == typeof t;\n                    }\n                    static contentCollapseStructure(t) {\n                        return (\n                            !!t && !s.simpleCollapseStructure(t) && \"c\" === t[0]\n                        );\n                    }\n                    static interleaveIds(t, e) {\n                        return n.interleaveLists(\n                            s.collapsedLeafs(t),\n                            s.collapsedLeafs(e)\n                        );\n                    }\n                    static collapsedLeafs(...t) {\n                        return t.reduce((t, e) => {\n                            return t.concat(\n                                ((r = e),\n                                s.simpleCollapseStructure(r)\n                                    ? [r]\n                                    : ((r = r),\n                                      s.contentCollapseStructure(r[1])\n                                          ? r.slice(2)\n                                          : r.slice(1)))\n                            );\n                        }, []);\n                    }\n                    static fromStructure(t, e) {\n                        return new s(s.tree_(t, e.root));\n                    }\n                    static combineContentChildren(t, e, r) {\n                        switch (t.type) {\n                            case \"relseq\":\n                            case \"infixop\":\n                            case \"multirel\":\n                                return n.interleaveLists(r, e);\n                            case \"prefixop\":\n                                return e.concat(r);\n                            case \"postfixop\":\n                                return r.concat(e);\n                            case \"fenced\":\n                                return r.unshift(e[0]), r.push(e[1]), r;\n                            case \"appl\":\n                                return [r[0], e[0], r[1]];\n                            case \"root\":\n                                return [r[1], r[0]];\n                            case \"row\":\n                            case \"line\":\n                                return e.length && r.unshift(e[0]), r;\n                            default:\n                                return r;\n                        }\n                    }\n                    static makeSexp_(t) {\n                        return s.simpleCollapseStructure(t)\n                            ? t.toString()\n                            : s.contentCollapseStructure(t)\n                              ? \"(c \" +\n                                t.slice(1).map(s.makeSexp_).join(\" \") +\n                                \")\"\n                              : \"(\" + t.map(s.makeSexp_).join(\" \") + \")\";\n                    }\n                    static fromString_(t) {\n                        let e = t.replace(/\\(/g, \"[\");\n                        return (\n                            (e = e.replace(/\\)/g, \"]\")),\n                            (e = e.replace(/ /g, \",\")),\n                            (e = e.replace(/c/g, '\"c\"')),\n                            JSON.parse(e)\n                        );\n                    }\n                    static fromNode_(t) {\n                        if (!t) return [];\n                        const e = t.contentNodes;\n                        let r;\n                        e.length && ((r = e.map(s.fromNode_)), r.unshift(\"c\"));\n                        const n = t.childNodes;\n                        if (!n.length) return e.length ? [t.id, r] : t.id;\n                        const o = n.map(s.fromNode_);\n                        return e.length && o.unshift(r), o.unshift(t.id), o;\n                    }\n                    static tree_(t, e) {\n                        if (!e) return [];\n                        if (!e.childNodes.length) return e.id;\n                        const r = e.id,\n                            n = [r],\n                            a = o.evalXPath(\n                                `.//self::*[@${i.Attribute.ID}=${r}]`,\n                                t\n                            )[0],\n                            l = s.combineContentChildren(\n                                e,\n                                e.contentNodes.map(function (t) {\n                                    return t;\n                                }),\n                                e.childNodes.map(function (t) {\n                                    return t;\n                                })\n                            );\n                        a && s.addOwns_(a, l);\n                        for (let e, r = 0; (e = l[r]); r++)\n                            n.push(s.tree_(t, e));\n                        return n;\n                    }\n                    static addOwns_(t, e) {\n                        const r = t.getAttribute(i.Attribute.COLLAPSED),\n                            n = r\n                                ? s.realLeafs_(s.fromString(r).array)\n                                : e.map((t) => t.id);\n                        t.setAttribute(i.Attribute.OWNS, n.join(\" \"));\n                    }\n                    static realLeafs_(t) {\n                        if (s.simpleCollapseStructure(t)) return [t];\n                        if (s.contentCollapseStructure(t)) return [];\n                        t = t;\n                        let e = [];\n                        for (let r = 1; r < t.length; r++)\n                            e = e.concat(s.realLeafs_(t[r]));\n                        return e;\n                    }\n                    populate() {\n                        (this.parents && this.levelsMap) ||\n                            ((this.parents = {}),\n                            (this.levelsMap = {}),\n                            this.populate_(this.array, this.array, []));\n                    }\n                    toString() {\n                        return s.makeSexp_(this.array);\n                    }\n                    populate_(t, e, r) {\n                        if (s.simpleCollapseStructure(t))\n                            return (\n                                (t = t),\n                                (this.levelsMap[t] = e),\n                                void (this.parents[t] =\n                                    t === r[0] ? r.slice(1) : r)\n                            );\n                        const n = s.contentCollapseStructure(t)\n                                ? t.slice(1)\n                                : t,\n                            o = [n[0]].concat(r);\n                        for (let e = 0, r = n.length; e < r; e++) {\n                            const r = n[e];\n                            this.populate_(r, t, o);\n                        }\n                    }\n                    isRoot(t) {\n                        return t === this.levelsMap[t][0];\n                    }\n                    directChildren(t) {\n                        if (!this.isRoot(t)) return [];\n                        return this.levelsMap[t]\n                            .slice(1)\n                            .map((t) =>\n                                s.simpleCollapseStructure(t)\n                                    ? t\n                                    : s.contentCollapseStructure(t)\n                                      ? t[1]\n                                      : t[0]\n                            );\n                    }\n                    subtreeNodes(t) {\n                        if (!this.isRoot(t)) return [];\n                        const e = (t, r) => {\n                                s.simpleCollapseStructure(t)\n                                    ? r.push(t)\n                                    : ((t = t),\n                                      s.contentCollapseStructure(t) &&\n                                          (t = t.slice(1)),\n                                      t.forEach((t) => e(t, r)));\n                            },\n                            r = this.levelsMap[t],\n                            n = [];\n                        return e(r.slice(1), n), n;\n                    }\n                }\n                e.SemanticSkeleton = s;\n            },\n            7075: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticTree = void 0);\n                const n = r(5740),\n                    o = r(7630),\n                    i = r(9265),\n                    s = r(7228),\n                    a = r(5952),\n                    l = r(5609);\n                r(94);\n                class c {\n                    constructor(t) {\n                        (this.mathml = t),\n                            (this.parser = new s.SemanticMathml()),\n                            (this.root = this.parser.parse(t)),\n                            (this.collator = this.parser\n                                .getFactory()\n                                .leafMap.collateMeaning());\n                        const e = this.collator.newDefault();\n                        e &&\n                            ((this.parser = new s.SemanticMathml()),\n                            (this.parser.getFactory().defaultMap = e),\n                            (this.root = this.parser.parse(t))),\n                            u.visit(this.root, {}),\n                            (0, o.annotate)(this.root);\n                    }\n                    static empty() {\n                        const t = n.parseInput(\"<math/>\"),\n                            e = new c(t);\n                        return (e.mathml = t), e;\n                    }\n                    static fromNode(t, e) {\n                        const r = c.empty();\n                        return (r.root = t), e && (r.mathml = e), r;\n                    }\n                    static fromRoot(t, e) {\n                        let r = t;\n                        for (; r.parent; ) r = r.parent;\n                        const n = c.fromNode(r);\n                        return e && (n.mathml = e), n;\n                    }\n                    static fromXml(t) {\n                        const e = c.empty();\n                        return (\n                            t.childNodes[0] &&\n                                (e.root = a.SemanticNode.fromXml(\n                                    t.childNodes[0]\n                                )),\n                            e\n                        );\n                    }\n                    xml(t) {\n                        const e = n.parseInput(\"<stree></stree>\"),\n                            r = this.root.xml(e.ownerDocument, t);\n                        return e.appendChild(r), e;\n                    }\n                    toString(t) {\n                        return n.serializeXml(this.xml(t));\n                    }\n                    formatXml(t) {\n                        const e = this.toString(t);\n                        return n.formatXml(e);\n                    }\n                    displayTree() {\n                        this.root.displayTree();\n                    }\n                    replaceNode(t, e) {\n                        const r = t.parent;\n                        r ? r.replaceChild(t, e) : (this.root = e);\n                    }\n                    toJson() {\n                        const t = {};\n                        return (t.stree = this.root.toJson()), t;\n                    }\n                }\n                e.SemanticTree = c;\n                const u = new i.SemanticVisitor(\"general\", \"unit\", (t, e) => {\n                    if (\n                        \"infixop\" === t.type &&\n                        (\"multiplication\" === t.role || \"implicit\" === t.role)\n                    ) {\n                        const e = t.childNodes;\n                        e.length &&\n                            (l.isPureUnit(e[0]) || l.isUnitCounter(e[0])) &&\n                            t.childNodes.slice(1).every(l.isPureUnit) &&\n                            (t.role = \"unit\");\n                    }\n                    return !1;\n                });\n            },\n            4795: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.partitionNodes =\n                        e.sliceNodes =\n                        e.getEmbellishedInner =\n                        e.addAttributes =\n                        e.isZeroLength =\n                        e.purgeNodes =\n                        e.isOrphanedGlyph =\n                        e.hasDisplayTag =\n                        e.hasEmptyTag =\n                        e.hasIgnoreTag =\n                        e.hasLeafTag =\n                        e.hasMathTag =\n                        e.directSpeechKeys =\n                        e.DISPLAYTAGS =\n                        e.EMPTYTAGS =\n                        e.IGNORETAGS =\n                        e.LEAFTAGS =\n                            void 0);\n                const n = r(5740);\n                function o(t) {\n                    return !!t && -1 !== e.LEAFTAGS.indexOf(n.tagName(t));\n                }\n                function i(t, e, r) {\n                    r && t.reverse();\n                    const n = [];\n                    for (let o, i = 0; (o = t[i]); i++) {\n                        if (e(o))\n                            return r\n                                ? {\n                                      head: t.slice(i + 1).reverse(),\n                                      div: o,\n                                      tail: n.reverse(),\n                                  }\n                                : { head: n, div: o, tail: t.slice(i + 1) };\n                        n.push(o);\n                    }\n                    return r\n                        ? { head: [], div: null, tail: n.reverse() }\n                        : { head: n, div: null, tail: [] };\n                }\n                (e.LEAFTAGS = [\"MO\", \"MI\", \"MN\", \"MTEXT\", \"MS\", \"MSPACE\"]),\n                    (e.IGNORETAGS = [\n                        \"MERROR\",\n                        \"MPHANTOM\",\n                        \"MALIGNGROUP\",\n                        \"MALIGNMARK\",\n                        \"MPRESCRIPTS\",\n                        \"ANNOTATION\",\n                        \"ANNOTATION-XML\",\n                    ]),\n                    (e.EMPTYTAGS = [\n                        \"MATH\",\n                        \"MROW\",\n                        \"MPADDED\",\n                        \"MACTION\",\n                        \"NONE\",\n                        \"MSTYLE\",\n                        \"SEMANTICS\",\n                    ]),\n                    (e.DISPLAYTAGS = [\"MROOT\", \"MSQRT\"]),\n                    (e.directSpeechKeys = [\n                        \"aria-label\",\n                        \"exact-speech\",\n                        \"alt\",\n                    ]),\n                    (e.hasMathTag = function (t) {\n                        return !!t && \"MATH\" === n.tagName(t);\n                    }),\n                    (e.hasLeafTag = o),\n                    (e.hasIgnoreTag = function (t) {\n                        return !!t && -1 !== e.IGNORETAGS.indexOf(n.tagName(t));\n                    }),\n                    (e.hasEmptyTag = function (t) {\n                        return !!t && -1 !== e.EMPTYTAGS.indexOf(n.tagName(t));\n                    }),\n                    (e.hasDisplayTag = function (t) {\n                        return (\n                            !!t && -1 !== e.DISPLAYTAGS.indexOf(n.tagName(t))\n                        );\n                    }),\n                    (e.isOrphanedGlyph = function (t) {\n                        return (\n                            !!t && \"MGLYPH\" === n.tagName(t) && !o(t.parentNode)\n                        );\n                    }),\n                    (e.purgeNodes = function (t) {\n                        const r = [];\n                        for (let o, i = 0; (o = t[i]); i++) {\n                            if (o.nodeType !== n.NodeType.ELEMENT_NODE)\n                                continue;\n                            const t = n.tagName(o);\n                            -1 === e.IGNORETAGS.indexOf(t) &&\n                                ((-1 !== e.EMPTYTAGS.indexOf(t) &&\n                                    0 === o.childNodes.length) ||\n                                    r.push(o));\n                        }\n                        return r;\n                    }),\n                    (e.isZeroLength = function (t) {\n                        if (!t) return !1;\n                        if (\n                            -1 !==\n                            [\n                                \"negativeveryverythinmathspace\",\n                                \"negativeverythinmathspace\",\n                                \"negativethinmathspace\",\n                                \"negativemediummathspace\",\n                                \"negativethickmathspace\",\n                                \"negativeverythickmathspace\",\n                                \"negativeveryverythickmathspace\",\n                            ].indexOf(t)\n                        )\n                            return !0;\n                        const e = t.match(/[0-9.]+/);\n                        return !!e && 0 === parseFloat(e[0]);\n                    }),\n                    (e.addAttributes = function (t, r) {\n                        if (r.hasAttributes()) {\n                            const n = r.attributes;\n                            for (let r = n.length - 1; r >= 0; r--) {\n                                const o = n[r].name;\n                                o.match(/^ext/) &&\n                                    ((t.attributes[o] = n[r].value),\n                                    (t.nobreaking = !0)),\n                                    -1 !== e.directSpeechKeys.indexOf(o) &&\n                                        ((t.attributes[\"ext-speech\"] =\n                                            n[r].value),\n                                        (t.nobreaking = !0)),\n                                    o.match(/texclass$/) &&\n                                        (t.attributes.texclass = n[r].value),\n                                    \"href\" === o &&\n                                        ((t.attributes.href = n[r].value),\n                                        (t.nobreaking = !0));\n                            }\n                        }\n                    }),\n                    (e.getEmbellishedInner = function t(e) {\n                        return e && e.embellished && e.childNodes.length > 0\n                            ? t(e.childNodes[0])\n                            : e;\n                    }),\n                    (e.sliceNodes = i),\n                    (e.partitionNodes = function (t, e) {\n                        let r = t;\n                        const n = [],\n                            o = [];\n                        let s = null;\n                        do {\n                            (s = i(r, e)),\n                                o.push(s.head),\n                                n.push(s.div),\n                                (r = s.tail);\n                        } while (s.div);\n                        return n.pop(), { rel: n, comp: o };\n                    });\n            },\n            6278: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractSpeechGenerator = void 0);\n                const n = r(6828),\n                    o = r(2298),\n                    i = r(1214),\n                    s = r(9543);\n                e.AbstractSpeechGenerator = class {\n                    constructor() {\n                        (this.modality = o.addPrefix(\"speech\")),\n                            (this.rebuilt_ = null),\n                            (this.options_ = {});\n                    }\n                    getRebuilt() {\n                        return this.rebuilt_;\n                    }\n                    setRebuilt(t) {\n                        this.rebuilt_ = t;\n                    }\n                    setOptions(t) {\n                        (this.options_ = t || {}),\n                            (this.modality = o.addPrefix(\n                                this.options_.modality || \"speech\"\n                            ));\n                    }\n                    getOptions() {\n                        return this.options_;\n                    }\n                    start() {}\n                    end() {}\n                    generateSpeech(t, e) {\n                        return (\n                            this.rebuilt_ ||\n                                (this.rebuilt_ = new i.RebuildStree(e)),\n                            (0, n.setup)(this.options_),\n                            s.computeMarkup(this.getRebuilt().xml)\n                        );\n                    }\n                };\n            },\n            1452: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AdhocSpeechGenerator = void 0);\n                const n = r(6278);\n                class o extends n.AbstractSpeechGenerator {\n                    getSpeech(t, e) {\n                        const r = this.generateSpeech(t, e);\n                        return t.setAttribute(this.modality, r), r;\n                    }\n                }\n                e.AdhocSpeechGenerator = o;\n            },\n            5152: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.ColorGenerator = void 0);\n                const n = r(2298),\n                    o = r(8396),\n                    i = r(1214),\n                    s = r(1204),\n                    a = r(6278);\n                class l extends a.AbstractSpeechGenerator {\n                    constructor() {\n                        super(...arguments),\n                            (this.modality = (0, n.addPrefix)(\"foreground\")),\n                            (this.contrast = new o.ContrastPicker());\n                    }\n                    static visitStree_(t, e, r) {\n                        if (t.childNodes.length) {\n                            if (\n                                (t.contentNodes.length &&\n                                    (\"punctuated\" === t.type &&\n                                        t.contentNodes.forEach(\n                                            (t) => (r[t.id] = !0)\n                                        ),\n                                    \"implicit\" !== t.role &&\n                                        e.push(\n                                            t.contentNodes.map((t) => t.id)\n                                        )),\n                                t.childNodes.length)\n                            ) {\n                                if (\"implicit\" === t.role) {\n                                    const n = [];\n                                    let o = [];\n                                    for (const e of t.childNodes) {\n                                        const t = [];\n                                        l.visitStree_(e, t, r),\n                                            t.length <= 2 && n.push(t.shift()),\n                                            (o = o.concat(t));\n                                    }\n                                    return (\n                                        e.push(n),\n                                        void o.forEach((t) => e.push(t))\n                                    );\n                                }\n                                t.childNodes.forEach((t) =>\n                                    l.visitStree_(t, e, r)\n                                );\n                            }\n                        } else r[t.id] || e.push(t.id);\n                    }\n                    getSpeech(t, e) {\n                        return s.getAttribute(t, this.modality);\n                    }\n                    generateSpeech(t, e) {\n                        return (\n                            this.getRebuilt() ||\n                                this.setRebuilt(new i.RebuildStree(t)),\n                            this.colorLeaves_(t),\n                            s.getAttribute(t, this.modality)\n                        );\n                    }\n                    colorLeaves_(t) {\n                        const e = [];\n                        l.visitStree_(this.getRebuilt().streeRoot, e, {});\n                        for (const r of e) {\n                            const e = this.contrast.generate();\n                            let n = !1;\n                            (n = Array.isArray(r)\n                                ? r\n                                      .map((r) => this.colorLeave_(t, r, e))\n                                      .reduce((t, e) => t || e, !1)\n                                : this.colorLeave_(t, r.toString(), e)),\n                                n && this.contrast.increment();\n                        }\n                    }\n                    colorLeave_(t, e, r) {\n                        const n = s.getBySemanticId(t, e);\n                        return !!n && (n.setAttribute(this.modality, r), !0);\n                    }\n                }\n                e.ColorGenerator = l;\n            },\n            6604: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.DirectSpeechGenerator = void 0);\n                const n = r(1204),\n                    o = r(6278);\n                class i extends o.AbstractSpeechGenerator {\n                    getSpeech(t, e) {\n                        return n.getAttribute(t, this.modality);\n                    }\n                }\n                e.DirectSpeechGenerator = i;\n            },\n            3123: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.DummySpeechGenerator = void 0);\n                const n = r(6278);\n                class o extends n.AbstractSpeechGenerator {\n                    getSpeech(t, e) {\n                        return \"\";\n                    }\n                }\n                e.DummySpeechGenerator = o;\n            },\n            5858: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.NodeSpeechGenerator = void 0);\n                const n = r(1204),\n                    o = r(4598);\n                class i extends o.TreeSpeechGenerator {\n                    getSpeech(t, e) {\n                        return (\n                            super.getSpeech(t, e),\n                            n.getAttribute(t, this.modality)\n                        );\n                    }\n                }\n                e.NodeSpeechGenerator = i;\n            },\n            9552: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.generatorMapping_ = e.generator = void 0);\n                const n = r(1452),\n                    o = r(5152),\n                    i = r(6604),\n                    s = r(3123),\n                    a = r(5858),\n                    l = r(597),\n                    c = r(4598);\n                (e.generator = function (t) {\n                    return (\n                        e.generatorMapping_[t] || e.generatorMapping_.Direct\n                    )();\n                }),\n                    (e.generatorMapping_ = {\n                        Adhoc: () => new n.AdhocSpeechGenerator(),\n                        Color: () => new o.ColorGenerator(),\n                        Direct: () => new i.DirectSpeechGenerator(),\n                        Dummy: () => new s.DummySpeechGenerator(),\n                        Node: () => new a.NodeSpeechGenerator(),\n                        Summary: () => new l.SummarySpeechGenerator(),\n                        Tree: () => new c.TreeSpeechGenerator(),\n                    });\n            },\n            9543: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.computeSummary_ =\n                        e.retrieveSummary =\n                        e.connectAllMactions =\n                        e.connectMactions =\n                        e.nodeAtPosition_ =\n                        e.computePrefix_ =\n                        e.retrievePrefix =\n                        e.addPrefix =\n                        e.addModality =\n                        e.addSpeech =\n                        e.recomputeMarkup =\n                        e.computeMarkup =\n                        e.recomputeSpeech =\n                        e.computeSpeech =\n                            void 0);\n                const n = r(8290),\n                    o = r(5740),\n                    i = r(5274),\n                    s = r(2298),\n                    a = r(2362),\n                    l = r(7075),\n                    c = r(1204);\n                function u(t) {\n                    return a.SpeechRuleEngine.getInstance().evaluateNode(t);\n                }\n                function p(t) {\n                    return u(l.SemanticTree.fromNode(t).xml());\n                }\n                function h(t) {\n                    const e = p(t);\n                    return n.markup(e);\n                }\n                function f(t) {\n                    const e = d(t);\n                    return n.markup(e);\n                }\n                function d(t) {\n                    const e = l.SemanticTree.fromRoot(t),\n                        r = i.evalXPath('.//*[@id=\"' + t.id + '\"]', e.xml());\n                    let n = r[0];\n                    return (\n                        r.length > 1 && (n = m(t, r) || n),\n                        n\n                            ? a.SpeechRuleEngine.getInstance().runInSetting(\n                                  {\n                                      modality: \"prefix\",\n                                      domain: \"default\",\n                                      style: \"default\",\n                                      strict: !0,\n                                      speech: !0,\n                                  },\n                                  function () {\n                                      return a.SpeechRuleEngine.getInstance().evaluateNode(\n                                          n\n                                      );\n                                  }\n                              )\n                            : []\n                    );\n                }\n                function m(t, e) {\n                    const r = e[0];\n                    if (!t.parent) return r;\n                    const n = [];\n                    for (; t; ) n.push(t.id), (t = t.parent);\n                    const o = function (t, e) {\n                        for (\n                            ;\n                            e.length &&\n                            e.shift().toString() === t.getAttribute(\"id\") &&\n                            t.parentNode &&\n                            t.parentNode.parentNode;\n\n                        )\n                            t = t.parentNode.parentNode;\n                        return !e.length;\n                    };\n                    for (let t, r = 0; (t = e[r]); r++)\n                        if (o(t, n.slice())) return t;\n                    return r;\n                }\n                function y(t) {\n                    return t\n                        ? a.SpeechRuleEngine.getInstance().runInSetting(\n                              { modality: \"summary\", strict: !1, speech: !0 },\n                              function () {\n                                  return a.SpeechRuleEngine.getInstance().evaluateNode(\n                                      t\n                                  );\n                              }\n                          )\n                        : [];\n                }\n                (e.computeSpeech = u),\n                    (e.recomputeSpeech = p),\n                    (e.computeMarkup = function (t) {\n                        const e = u(t);\n                        return n.markup(e);\n                    }),\n                    (e.recomputeMarkup = h),\n                    (e.addSpeech = function (t, e, r) {\n                        const i = o.querySelectorAllByAttrValue(\n                                r,\n                                \"id\",\n                                e.id.toString()\n                            )[0],\n                            a = i ? n.markup(u(i)) : h(e);\n                        t.setAttribute(s.Attribute.SPEECH, a);\n                    }),\n                    (e.addModality = function (t, e, r) {\n                        const n = h(e);\n                        t.setAttribute(r, n);\n                    }),\n                    (e.addPrefix = function (t, e) {\n                        const r = f(e);\n                        r && t.setAttribute(s.Attribute.PREFIX, r);\n                    }),\n                    (e.retrievePrefix = f),\n                    (e.computePrefix_ = d),\n                    (e.nodeAtPosition_ = m),\n                    (e.connectMactions = function (t, e, r) {\n                        const n = o.querySelectorAll(e, \"maction\");\n                        for (let e, i = 0; (e = n[i]); i++) {\n                            const n = e.getAttribute(\"id\"),\n                                i = o.querySelectorAllByAttrValue(\n                                    t,\n                                    \"id\",\n                                    n\n                                )[0];\n                            if (!i) continue;\n                            const a = e.childNodes[1],\n                                l = a.getAttribute(s.Attribute.ID);\n                            let u = c.getBySemanticId(t, l);\n                            if (\n                                u &&\n                                \"dummy\" !== u.getAttribute(s.Attribute.TYPE)\n                            )\n                                continue;\n                            if (\n                                ((u = i.childNodes[0]),\n                                u.getAttribute(\"sre-highlighter-added\"))\n                            )\n                                continue;\n                            const p = a.getAttribute(s.Attribute.PARENT);\n                            p && u.setAttribute(s.Attribute.PARENT, p),\n                                u.setAttribute(s.Attribute.TYPE, \"dummy\"),\n                                u.setAttribute(s.Attribute.ID, l);\n                            o.querySelectorAllByAttrValue(\n                                r,\n                                \"id\",\n                                l\n                            )[0].setAttribute(\"alternative\", l);\n                        }\n                    }),\n                    (e.connectAllMactions = function (t, e) {\n                        const r = o.querySelectorAll(t, \"maction\");\n                        for (let t, n = 0; (t = r[n]); n++) {\n                            const r = t.childNodes[1].getAttribute(\n                                s.Attribute.ID\n                            );\n                            o.querySelectorAllByAttrValue(\n                                e,\n                                \"id\",\n                                r\n                            )[0].setAttribute(\"alternative\", r);\n                        }\n                    }),\n                    (e.retrieveSummary = function (t) {\n                        const e = y(t);\n                        return n.markup(e);\n                    }),\n                    (e.computeSummary_ = y);\n            },\n            597: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SummarySpeechGenerator = void 0);\n                const n = r(6278),\n                    o = r(9543);\n                class i extends n.AbstractSpeechGenerator {\n                    getSpeech(t, e) {\n                        return (\n                            o.connectAllMactions(e, this.getRebuilt().xml),\n                            this.generateSpeech(t, e)\n                        );\n                    }\n                }\n                e.SummarySpeechGenerator = i;\n            },\n            4598: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.TreeSpeechGenerator = void 0);\n                const n = r(2298),\n                    o = r(1204),\n                    i = r(6278),\n                    s = r(9543);\n                class a extends i.AbstractSpeechGenerator {\n                    getSpeech(t, e) {\n                        const r = this.generateSpeech(t, e),\n                            i = this.getRebuilt().nodeDict;\n                        for (const r in i) {\n                            const a = i[r],\n                                l = o.getBySemanticId(e, r),\n                                c = o.getBySemanticId(t, r);\n                            l &&\n                                c &&\n                                (this.modality &&\n                                this.modality !== n.Attribute.SPEECH\n                                    ? s.addModality(c, a, this.modality)\n                                    : s.addSpeech(c, a, this.getRebuilt().xml),\n                                this.modality === n.Attribute.SPEECH &&\n                                    s.addPrefix(c, a));\n                        }\n                        return r;\n                    }\n                }\n                e.TreeSpeechGenerator = a;\n            },\n            313: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.INTERVALS =\n                        e.makeLetter =\n                        e.numberRules =\n                        e.alphabetRules =\n                        e.getFont =\n                        e.makeInterval =\n                        e.generate =\n                        e.makeDomains_ =\n                        e.Domains_ =\n                        e.Base =\n                        e.Embellish =\n                        e.Font =\n                            void 0);\n                const n = r(5897),\n                    o = r(7491),\n                    i = r(4356),\n                    s = r(2536),\n                    a = r(2780);\n                var l, c, u;\n                function p() {\n                    const t = i.LOCALE.ALPHABETS,\n                        r = (t, e) => {\n                            const r = {};\n                            return (\n                                Object.keys(t).forEach((t) => (r[t] = !0)),\n                                Object.keys(e).forEach((t) => (r[t] = !0)),\n                                Object.keys(r)\n                            );\n                        };\n                    (e.Domains_.small = r(t.smallPrefix, t.letterTrans)),\n                        (e.Domains_.capital = r(t.capPrefix, t.letterTrans)),\n                        (e.Domains_.digit = r(t.digitPrefix, t.digitTrans));\n                }\n                function h(t) {\n                    const e = t.toString(16).toUpperCase();\n                    return e.length > 3 ? e : (\"000\" + e).slice(-4);\n                }\n                function f([t, e], r) {\n                    const n = parseInt(t, 16),\n                        o = parseInt(e, 16),\n                        i = [];\n                    for (let t = n; t <= o; t++) {\n                        let e = h(t);\n                        !1 !== r[e] && ((e = r[e] || e), i.push(e));\n                    }\n                    return i;\n                }\n                function d(t) {\n                    const e =\n                        \"normal\" === t || \"fullwidth\" === t\n                            ? \"\"\n                            : i.LOCALE.MESSAGES.font[t] ||\n                              i.LOCALE.MESSAGES.embellish[t] ||\n                              \"\";\n                    return (0, s.localeFontCombiner)(e);\n                }\n                function m(t, r, n, o, s, a) {\n                    const l = d(o);\n                    for (\n                        let o, c, u, p = 0;\n                        (o = t[p]), (c = r[p]), (u = n[p]);\n                        p++\n                    ) {\n                        const t = a\n                                ? i.LOCALE.ALPHABETS.capPrefix\n                                : i.LOCALE.ALPHABETS.smallPrefix,\n                            r = a ? e.Domains_.capital : e.Domains_.small;\n                        g(\n                            l.combiner,\n                            o,\n                            c,\n                            u,\n                            l.font,\n                            t,\n                            s,\n                            i.LOCALE.ALPHABETS.letterTrans,\n                            r\n                        );\n                    }\n                }\n                function y(t, r, n, o, s) {\n                    const a = d(n);\n                    for (let n, l, c = 0; (n = t[c]), (l = r[c]); c++) {\n                        const t = i.LOCALE.ALPHABETS.digitPrefix,\n                            r = c + s;\n                        g(\n                            a.combiner,\n                            n,\n                            l,\n                            r,\n                            a.font,\n                            t,\n                            o,\n                            i.LOCALE.ALPHABETS.digitTrans,\n                            e.Domains_.digit\n                        );\n                    }\n                }\n                function g(t, e, r, n, o, i, s, l, c) {\n                    for (let u, p = 0; (u = c[p]); p++) {\n                        const c = u in l ? l[u] : l.default,\n                            p = u in i ? i[u] : i.default;\n                        a.defineRule(\n                            e.toString(),\n                            u,\n                            \"default\",\n                            s,\n                            r,\n                            t(c(n), o, p)\n                        );\n                    }\n                }\n                !(function (t) {\n                    (t.BOLD = \"bold\"),\n                        (t.BOLDFRAKTUR = \"bold-fraktur\"),\n                        (t.BOLDITALIC = \"bold-italic\"),\n                        (t.BOLDSCRIPT = \"bold-script\"),\n                        (t.DOUBLESTRUCK = \"double-struck\"),\n                        (t.FULLWIDTH = \"fullwidth\"),\n                        (t.FRAKTUR = \"fraktur\"),\n                        (t.ITALIC = \"italic\"),\n                        (t.MONOSPACE = \"monospace\"),\n                        (t.NORMAL = \"normal\"),\n                        (t.SCRIPT = \"script\"),\n                        (t.SANSSERIF = \"sans-serif\"),\n                        (t.SANSSERIFITALIC = \"sans-serif-italic\"),\n                        (t.SANSSERIFBOLD = \"sans-serif-bold\"),\n                        (t.SANSSERIFBOLDITALIC = \"sans-serif-bold-italic\");\n                })((l = e.Font || (e.Font = {}))),\n                    (function (t) {\n                        (t.SUPER = \"super\"),\n                            (t.SUB = \"sub\"),\n                            (t.CIRCLED = \"circled\"),\n                            (t.PARENTHESIZED = \"parenthesized\"),\n                            (t.PERIOD = \"period\"),\n                            (t.NEGATIVECIRCLED = \"negative-circled\"),\n                            (t.DOUBLECIRCLED = \"double-circled\"),\n                            (t.CIRCLEDSANSSERIF = \"circled-sans-serif\"),\n                            (t.NEGATIVECIRCLEDSANSSERIF =\n                                \"negative-circled-sans-serif\"),\n                            (t.COMMA = \"comma\"),\n                            (t.SQUARED = \"squared\"),\n                            (t.NEGATIVESQUARED = \"negative-squared\");\n                    })((c = e.Embellish || (e.Embellish = {}))),\n                    (function (t) {\n                        (t.LATINCAP = \"latinCap\"),\n                            (t.LATINSMALL = \"latinSmall\"),\n                            (t.GREEKCAP = \"greekCap\"),\n                            (t.GREEKSMALL = \"greekSmall\"),\n                            (t.DIGIT = \"digit\");\n                    })((u = e.Base || (e.Base = {}))),\n                    (e.Domains_ = {\n                        small: [\"default\"],\n                        capital: [\"default\"],\n                        digit: [\"default\"],\n                    }),\n                    (e.makeDomains_ = p),\n                    (e.generate = function (t) {\n                        const r = n.default.getInstance().locale;\n                        (n.default.getInstance().locale = t),\n                            o.setLocale(),\n                            a.addSymbolRules({ locale: t }),\n                            p();\n                        const s = e.INTERVALS;\n                        for (let t, e = 0; (t = s[e]); e++) {\n                            const e = f(t.interval, t.subst),\n                                r = e.map(function (t) {\n                                    return String.fromCodePoint(\n                                        parseInt(t, 16)\n                                    );\n                                });\n                            if (\"offset\" in t)\n                                y(e, r, t.font, t.category, t.offset || 0);\n                            else {\n                                m(\n                                    e,\n                                    r,\n                                    i.LOCALE.ALPHABETS[t.base],\n                                    t.font,\n                                    t.category,\n                                    !!t.capital\n                                );\n                            }\n                        }\n                        (n.default.getInstance().locale = r), o.setLocale();\n                    }),\n                    (e.makeInterval = f),\n                    (e.getFont = d),\n                    (e.alphabetRules = m),\n                    (e.numberRules = y),\n                    (e.makeLetter = g),\n                    (e.INTERVALS = [\n                        {\n                            interval: [\"1D400\", \"1D419\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.BOLD,\n                        },\n                        {\n                            interval: [\"1D41A\", \"1D433\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.BOLD,\n                        },\n                        {\n                            interval: [\"1D56C\", \"1D585\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.BOLDFRAKTUR,\n                        },\n                        {\n                            interval: [\"1D586\", \"1D59F\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.BOLDFRAKTUR,\n                        },\n                        {\n                            interval: [\"1D468\", \"1D481\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.BOLDITALIC,\n                        },\n                        {\n                            interval: [\"1D482\", \"1D49B\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.BOLDITALIC,\n                        },\n                        {\n                            interval: [\"1D4D0\", \"1D4E9\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.BOLDSCRIPT,\n                        },\n                        {\n                            interval: [\"1D4EA\", \"1D503\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.BOLDSCRIPT,\n                        },\n                        {\n                            interval: [\"1D538\", \"1D551\"],\n                            base: u.LATINCAP,\n                            subst: {\n                                \"1D53A\": \"2102\",\n                                \"1D53F\": \"210D\",\n                                \"1D545\": \"2115\",\n                                \"1D547\": \"2119\",\n                                \"1D548\": \"211A\",\n                                \"1D549\": \"211D\",\n                                \"1D551\": \"2124\",\n                            },\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.DOUBLESTRUCK,\n                        },\n                        {\n                            interval: [\"1D552\", \"1D56B\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.DOUBLESTRUCK,\n                        },\n                        {\n                            interval: [\"1D504\", \"1D51D\"],\n                            base: u.LATINCAP,\n                            subst: {\n                                \"1D506\": \"212D\",\n                                \"1D50B\": \"210C\",\n                                \"1D50C\": \"2111\",\n                                \"1D515\": \"211C\",\n                                \"1D51D\": \"2128\",\n                            },\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.FRAKTUR,\n                        },\n                        {\n                            interval: [\"1D51E\", \"1D537\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.FRAKTUR,\n                        },\n                        {\n                            interval: [\"FF21\", \"FF3A\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.FULLWIDTH,\n                        },\n                        {\n                            interval: [\"FF41\", \"FF5A\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.FULLWIDTH,\n                        },\n                        {\n                            interval: [\"1D434\", \"1D44D\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.ITALIC,\n                        },\n                        {\n                            interval: [\"1D44E\", \"1D467\"],\n                            base: u.LATINSMALL,\n                            subst: { \"1D455\": \"210E\" },\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.ITALIC,\n                        },\n                        {\n                            interval: [\"1D670\", \"1D689\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.MONOSPACE,\n                        },\n                        {\n                            interval: [\"1D68A\", \"1D6A3\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.MONOSPACE,\n                        },\n                        {\n                            interval: [\"0041\", \"005A\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.NORMAL,\n                        },\n                        {\n                            interval: [\"0061\", \"007A\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.NORMAL,\n                        },\n                        {\n                            interval: [\"1D49C\", \"1D4B5\"],\n                            base: u.LATINCAP,\n                            subst: {\n                                \"1D49D\": \"212C\",\n                                \"1D4A0\": \"2130\",\n                                \"1D4A1\": \"2131\",\n                                \"1D4A3\": \"210B\",\n                                \"1D4A4\": \"2110\",\n                                \"1D4A7\": \"2112\",\n                                \"1D4A8\": \"2133\",\n                                \"1D4AD\": \"211B\",\n                            },\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.SCRIPT,\n                        },\n                        {\n                            interval: [\"1D4B6\", \"1D4CF\"],\n                            base: u.LATINSMALL,\n                            subst: {\n                                \"1D4BA\": \"212F\",\n                                \"1D4BC\": \"210A\",\n                                \"1D4C4\": \"2134\",\n                            },\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.SCRIPT,\n                        },\n                        {\n                            interval: [\"1D5A0\", \"1D5B9\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.SANSSERIF,\n                        },\n                        {\n                            interval: [\"1D5BA\", \"1D5D3\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.SANSSERIF,\n                        },\n                        {\n                            interval: [\"1D608\", \"1D621\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.SANSSERIFITALIC,\n                        },\n                        {\n                            interval: [\"1D622\", \"1D63B\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.SANSSERIFITALIC,\n                        },\n                        {\n                            interval: [\"1D5D4\", \"1D5ED\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.SANSSERIFBOLD,\n                        },\n                        {\n                            interval: [\"1D5EE\", \"1D607\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.SANSSERIFBOLD,\n                        },\n                        {\n                            interval: [\"1D63C\", \"1D655\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.SANSSERIFBOLDITALIC,\n                        },\n                        {\n                            interval: [\"1D656\", \"1D66F\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.SANSSERIFBOLDITALIC,\n                        },\n                        {\n                            interval: [\"0391\", \"03A9\"],\n                            base: u.GREEKCAP,\n                            subst: { \"03A2\": \"03F4\" },\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.NORMAL,\n                        },\n                        {\n                            interval: [\"03B0\", \"03D0\"],\n                            base: u.GREEKSMALL,\n                            subst: {\n                                \"03B0\": \"2207\",\n                                \"03CA\": \"2202\",\n                                \"03CB\": \"03F5\",\n                                \"03CC\": \"03D1\",\n                                \"03CD\": \"03F0\",\n                                \"03CE\": \"03D5\",\n                                \"03CF\": \"03F1\",\n                                \"03D0\": \"03D6\",\n                            },\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.NORMAL,\n                        },\n                        {\n                            interval: [\"1D6A8\", \"1D6C0\"],\n                            base: u.GREEKCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.BOLD,\n                        },\n                        {\n                            interval: [\"1D6C1\", \"1D6E1\"],\n                            base: u.GREEKSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.BOLD,\n                        },\n                        {\n                            interval: [\"1D6E2\", \"1D6FA\"],\n                            base: u.GREEKCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.ITALIC,\n                        },\n                        {\n                            interval: [\"1D6FB\", \"1D71B\"],\n                            base: u.GREEKSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.ITALIC,\n                        },\n                        {\n                            interval: [\"1D71C\", \"1D734\"],\n                            base: u.GREEKCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.BOLDITALIC,\n                        },\n                        {\n                            interval: [\"1D735\", \"1D755\"],\n                            base: u.GREEKSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.BOLDITALIC,\n                        },\n                        {\n                            interval: [\"1D756\", \"1D76E\"],\n                            base: u.GREEKCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.SANSSERIFBOLD,\n                        },\n                        {\n                            interval: [\"1D76F\", \"1D78F\"],\n                            base: u.GREEKSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.SANSSERIFBOLD,\n                        },\n                        {\n                            interval: [\"1D790\", \"1D7A8\"],\n                            base: u.GREEKCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"Lu\",\n                            font: l.SANSSERIFBOLDITALIC,\n                        },\n                        {\n                            interval: [\"1D7A9\", \"1D7C9\"],\n                            base: u.GREEKSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"Ll\",\n                            font: l.SANSSERIFBOLDITALIC,\n                        },\n                        {\n                            interval: [\"0030\", \"0039\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 0,\n                            category: \"Nd\",\n                            font: l.NORMAL,\n                        },\n                        {\n                            interval: [\"2070\", \"2079\"],\n                            base: u.DIGIT,\n                            subst: { 2071: \"00B9\", 2072: \"00B2\", 2073: \"00B3\" },\n                            offset: 0,\n                            category: \"No\",\n                            font: c.SUPER,\n                        },\n                        {\n                            interval: [\"2080\", \"2089\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 0,\n                            category: \"No\",\n                            font: c.SUB,\n                        },\n                        {\n                            interval: [\"245F\", \"2473\"],\n                            base: u.DIGIT,\n                            subst: { \"245F\": \"24EA\" },\n                            offset: 0,\n                            category: \"No\",\n                            font: c.CIRCLED,\n                        },\n                        {\n                            interval: [\"3251\", \"325F\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 21,\n                            category: \"No\",\n                            font: c.CIRCLED,\n                        },\n                        {\n                            interval: [\"32B1\", \"32BF\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 36,\n                            category: \"No\",\n                            font: c.CIRCLED,\n                        },\n                        {\n                            interval: [\"2474\", \"2487\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 1,\n                            category: \"No\",\n                            font: c.PARENTHESIZED,\n                        },\n                        {\n                            interval: [\"2487\", \"249B\"],\n                            base: u.DIGIT,\n                            subst: { 2487: \"1F100\" },\n                            offset: 0,\n                            category: \"No\",\n                            font: c.PERIOD,\n                        },\n                        {\n                            interval: [\"2775\", \"277F\"],\n                            base: u.DIGIT,\n                            subst: { 2775: \"24FF\" },\n                            offset: 0,\n                            category: \"No\",\n                            font: c.NEGATIVECIRCLED,\n                        },\n                        {\n                            interval: [\"24EB\", \"24F4\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 11,\n                            category: \"No\",\n                            font: c.NEGATIVECIRCLED,\n                        },\n                        {\n                            interval: [\"24F5\", \"24FE\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 1,\n                            category: \"No\",\n                            font: c.DOUBLECIRCLED,\n                        },\n                        {\n                            interval: [\"277F\", \"2789\"],\n                            base: u.DIGIT,\n                            subst: { \"277F\": \"1F10B\" },\n                            offset: 0,\n                            category: \"No\",\n                            font: c.CIRCLEDSANSSERIF,\n                        },\n                        {\n                            interval: [\"2789\", \"2793\"],\n                            base: u.DIGIT,\n                            subst: { 2789: \"1F10C\" },\n                            offset: 0,\n                            category: \"No\",\n                            font: c.NEGATIVECIRCLEDSANSSERIF,\n                        },\n                        {\n                            interval: [\"FF10\", \"FF19\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 0,\n                            category: \"Nd\",\n                            font: l.FULLWIDTH,\n                        },\n                        {\n                            interval: [\"1D7CE\", \"1D7D7\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 0,\n                            category: \"Nd\",\n                            font: l.BOLD,\n                        },\n                        {\n                            interval: [\"1D7D8\", \"1D7E1\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 0,\n                            category: \"Nd\",\n                            font: l.DOUBLESTRUCK,\n                        },\n                        {\n                            interval: [\"1D7E2\", \"1D7EB\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 0,\n                            category: \"Nd\",\n                            font: l.SANSSERIF,\n                        },\n                        {\n                            interval: [\"1D7EC\", \"1D7F5\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 0,\n                            category: \"Nd\",\n                            font: l.SANSSERIFBOLD,\n                        },\n                        {\n                            interval: [\"1D7F6\", \"1D7FF\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 0,\n                            category: \"Nd\",\n                            font: l.MONOSPACE,\n                        },\n                        {\n                            interval: [\"1F101\", \"1F10A\"],\n                            base: u.DIGIT,\n                            subst: {},\n                            offset: 0,\n                            category: \"No\",\n                            font: c.COMMA,\n                        },\n                        {\n                            interval: [\"24B6\", \"24CF\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"So\",\n                            font: c.CIRCLED,\n                        },\n                        {\n                            interval: [\"24D0\", \"24E9\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"So\",\n                            font: c.CIRCLED,\n                        },\n                        {\n                            interval: [\"1F110\", \"1F129\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"So\",\n                            font: c.PARENTHESIZED,\n                        },\n                        {\n                            interval: [\"249C\", \"24B5\"],\n                            base: u.LATINSMALL,\n                            subst: {},\n                            capital: !1,\n                            category: \"So\",\n                            font: c.PARENTHESIZED,\n                        },\n                        {\n                            interval: [\"1F130\", \"1F149\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"So\",\n                            font: c.SQUARED,\n                        },\n                        {\n                            interval: [\"1F170\", \"1F189\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"So\",\n                            font: c.NEGATIVESQUARED,\n                        },\n                        {\n                            interval: [\"1F150\", \"1F169\"],\n                            base: u.LATINCAP,\n                            subst: {},\n                            capital: !0,\n                            category: \"So\",\n                            font: c.NEGATIVECIRCLED,\n                        },\n                    ]);\n            },\n            8504: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Parser =\n                        e.Comparator =\n                        e.ClearspeakPreferences =\n                            void 0);\n                const n = r(5897),\n                    o = r(4440),\n                    i = r(1676),\n                    s = r(1676),\n                    a = r(2780),\n                    l = r(2362);\n                class c extends i.DynamicCstr {\n                    constructor(t, e) {\n                        super(t), (this.preference = e);\n                    }\n                    static comparator() {\n                        return new p(\n                            n.default.getInstance().dynamicCstr,\n                            s.DynamicProperties.createProp(\n                                [i.DynamicCstr.DEFAULT_VALUES[s.Axis.LOCALE]],\n                                [i.DynamicCstr.DEFAULT_VALUES[s.Axis.MODALITY]],\n                                [i.DynamicCstr.DEFAULT_VALUES[s.Axis.DOMAIN]],\n                                [i.DynamicCstr.DEFAULT_VALUES[s.Axis.STYLE]]\n                            )\n                        );\n                    }\n                    static fromPreference(t) {\n                        const e = t.split(\":\"),\n                            r = {},\n                            n = u.getProperties(),\n                            o = Object.keys(n);\n                        for (let t, i = 0; (t = e[i]); i++) {\n                            const e = t.split(\"_\");\n                            if (-1 === o.indexOf(e[0])) continue;\n                            const i = e[1];\n                            i &&\n                                i !== c.AUTO &&\n                                -1 !== n[e[0]].indexOf(i) &&\n                                (r[e[0]] = e[1]);\n                        }\n                        return r;\n                    }\n                    static toPreference(t) {\n                        const e = Object.keys(t),\n                            r = [];\n                        for (let n = 0; n < e.length; n++)\n                            r.push(e[n] + \"_\" + t[e[n]]);\n                        return r.length\n                            ? r.join(\":\")\n                            : i.DynamicCstr.DEFAULT_VALUE;\n                    }\n                    static getLocalePreferences(t) {\n                        const e =\n                            t ||\n                            a.enumerate(\n                                l.SpeechRuleEngine.getInstance().enumerate()\n                            );\n                        return c.getLocalePreferences_(e);\n                    }\n                    static smartPreferences(t, e) {\n                        const r = c.getLocalePreferences()[e];\n                        if (!r) return [];\n                        const n = t.explorers.speech,\n                            i = c.relevantPreferences(\n                                n.walker.getFocus().getSemanticPrimary()\n                            ),\n                            s = o.DOMAIN_TO_STYLES.clearspeak;\n                        return [\n                            {\n                                type: \"radio\",\n                                content: \"No Preferences\",\n                                id: \"clearspeak-default\",\n                                variable: \"speechRules\",\n                            },\n                            {\n                                type: \"radio\",\n                                content: \"Current Preferences\",\n                                id: \"clearspeak-\" + s,\n                                variable: \"speechRules\",\n                            },\n                            { type: \"rule\" },\n                            { type: \"label\", content: \"Preferences for \" + i },\n                            { type: \"rule\" },\n                        ].concat(\n                            r[i].map(function (t) {\n                                const e = t.split(\"_\");\n                                return {\n                                    type: \"radio\",\n                                    content: e[1],\n                                    id:\n                                        \"clearspeak-\" +\n                                        c.addPreference(s, e[0], e[1]),\n                                    variable: \"speechRules\",\n                                };\n                            })\n                        );\n                    }\n                    static relevantPreferences(t) {\n                        const e = d[t.type];\n                        return (e && (e[t.role] || e[\"\"])) || \"ImpliedTimes\";\n                    }\n                    static findPreference(t, e) {\n                        if (\"default\" === t) return c.AUTO;\n                        return c.fromPreference(t)[e] || c.AUTO;\n                    }\n                    static addPreference(t, e, r) {\n                        if (\"default\" === t) return e + \"_\" + r;\n                        const n = c.fromPreference(t);\n                        return (n[e] = r), c.toPreference(n);\n                    }\n                    static getLocalePreferences_(t) {\n                        const e = {};\n                        for (const r in t) {\n                            if (!t[r].speech || !t[r].speech.clearspeak)\n                                continue;\n                            const n = Object.keys(t[r].speech.clearspeak),\n                                o = (e[r] = {});\n                            for (const t in u.getProperties()) {\n                                const e = u.getProperties()[t],\n                                    r = [t + \"_Auto\"];\n                                if (e)\n                                    for (const o of e)\n                                        -1 !== n.indexOf(t + \"_\" + o) &&\n                                            r.push(t + \"_\" + o);\n                                o[t] = r;\n                            }\n                        }\n                        return e;\n                    }\n                    equal(t) {\n                        if (!super.equal(t)) return !1;\n                        const e = Object.keys(this.preference),\n                            r = t.preference;\n                        if (e.length !== Object.keys(r).length) return !1;\n                        for (let t, n = 0; (t = e[n]); n++)\n                            if (this.preference[t] !== r[t]) return !1;\n                        return !0;\n                    }\n                }\n                (e.ClearspeakPreferences = c), (c.AUTO = \"Auto\");\n                const u = new s.DynamicProperties({\n                    AbsoluteValue: [\n                        \"Auto\",\n                        \"AbsEnd\",\n                        \"Cardinality\",\n                        \"Determinant\",\n                    ],\n                    Bar: [\"Auto\", \"Conjugate\"],\n                    Caps: [\"Auto\", \"SayCaps\"],\n                    CombinationPermutation: [\"Auto\", \"ChoosePermute\"],\n                    Currency: [\"Auto\", \"Position\", \"Prefix\"],\n                    Ellipses: [\"Auto\", \"AndSoOn\"],\n                    Enclosed: [\"Auto\", \"EndEnclose\"],\n                    Exponent: [\n                        \"Auto\",\n                        \"AfterPower\",\n                        \"Ordinal\",\n                        \"OrdinalPower\",\n                        \"Exponent\",\n                    ],\n                    Fraction: [\n                        \"Auto\",\n                        \"EndFrac\",\n                        \"FracOver\",\n                        \"General\",\n                        \"GeneralEndFrac\",\n                        \"Ordinal\",\n                        \"Over\",\n                        \"OverEndFrac\",\n                        \"Per\",\n                    ],\n                    Functions: [\"Auto\", \"None\", \"Reciprocal\"],\n                    ImpliedTimes: [\"Auto\", \"MoreImpliedTimes\", \"None\"],\n                    Log: [\"Auto\", \"LnAsNaturalLog\"],\n                    Matrix: [\n                        \"Auto\",\n                        \"Combinatoric\",\n                        \"EndMatrix\",\n                        \"EndVector\",\n                        \"SilentColNum\",\n                        \"SpeakColNum\",\n                        \"Vector\",\n                    ],\n                    MultiLineLabel: [\n                        \"Auto\",\n                        \"Case\",\n                        \"Constraint\",\n                        \"Equation\",\n                        \"Line\",\n                        \"None\",\n                        \"Row\",\n                        \"Step\",\n                    ],\n                    MultiLineOverview: [\"Auto\", \"None\"],\n                    MultiLinePausesBetweenColumns: [\"Auto\", \"Long\", \"Short\"],\n                    MultsymbolDot: [\"Auto\", \"Dot\"],\n                    MultsymbolX: [\"Auto\", \"By\", \"Cross\"],\n                    Paren: [\n                        \"Auto\",\n                        \"CoordPoint\",\n                        \"Interval\",\n                        \"Silent\",\n                        \"Speak\",\n                        \"SpeakNestingLevel\",\n                    ],\n                    Prime: [\"Auto\", \"Angle\", \"Length\"],\n                    Roots: [\n                        \"Auto\",\n                        \"PosNegSqRoot\",\n                        \"PosNegSqRootEnd\",\n                        \"RootEnd\",\n                    ],\n                    SetMemberSymbol: [\n                        \"Auto\",\n                        \"Belongs\",\n                        \"Element\",\n                        \"Member\",\n                        \"In\",\n                    ],\n                    Sets: [\"Auto\", \"SilentBracket\", \"woAll\"],\n                    TriangleSymbol: [\"Auto\", \"Delta\"],\n                    Trig: [\"Auto\", \"ArcTrig\", \"TrigInverse\", \"Reciprocal\"],\n                    VerticalLine: [\"Auto\", \"Divides\", \"Given\", \"SuchThat\"],\n                });\n                class p extends s.DefaultComparator {\n                    constructor(t, e) {\n                        super(t, e),\n                            (this.preference =\n                                t instanceof c ? t.preference : {});\n                    }\n                    match(t) {\n                        if (!(t instanceof c)) return super.match(t);\n                        if (\"default\" === t.getComponents()[s.Axis.STYLE])\n                            return !0;\n                        const e = Object.keys(t.preference);\n                        for (let r, n = 0; (r = e[n]); n++)\n                            if (this.preference[r] !== t.preference[r])\n                                return !1;\n                        return !0;\n                    }\n                    compare(t, e) {\n                        const r = super.compare(t, e);\n                        if (0 !== r) return r;\n                        const n = t instanceof c,\n                            o = e instanceof c;\n                        if (!n && o) return 1;\n                        if (n && !o) return -1;\n                        if (!n && !o) return 0;\n                        const i = Object.keys(t.preference).length,\n                            s = Object.keys(e.preference).length;\n                        return i > s ? -1 : i < s ? 1 : 0;\n                    }\n                }\n                e.Comparator = p;\n                class h extends s.DynamicCstrParser {\n                    constructor() {\n                        super([\n                            s.Axis.LOCALE,\n                            s.Axis.MODALITY,\n                            s.Axis.DOMAIN,\n                            s.Axis.STYLE,\n                        ]);\n                    }\n                    parse(t) {\n                        const e = super.parse(t);\n                        let r = e.getValue(s.Axis.STYLE);\n                        const n = e.getValue(s.Axis.LOCALE),\n                            o = e.getValue(s.Axis.MODALITY);\n                        let a = {};\n                        return (\n                            r !== i.DynamicCstr.DEFAULT_VALUE &&\n                                ((a = this.fromPreference(r)),\n                                (r = this.toPreference(a))),\n                            new c(\n                                {\n                                    locale: n,\n                                    modality: o,\n                                    domain: \"clearspeak\",\n                                    style: r,\n                                },\n                                a\n                            )\n                        );\n                    }\n                    fromPreference(t) {\n                        return c.fromPreference(t);\n                    }\n                    toPreference(t) {\n                        return c.toPreference(t);\n                    }\n                }\n                e.Parser = h;\n                const f = [\n                        [\"AbsoluteValue\", \"fenced\", \"neutral\", \"metric\"],\n                        [\"Bar\", \"overscore\", \"overaccent\"],\n                        [\"Caps\", \"identifier\", \"latinletter\"],\n                        [\"CombinationPermutation\", \"appl\", \"unknown\"],\n                        [\"Ellipses\", \"punctuation\", \"ellipsis\"],\n                        [\"Exponent\", \"superscript\", \"\"],\n                        [\"Fraction\", \"fraction\", \"\"],\n                        [\"Functions\", \"appl\", \"simple function\"],\n                        [\"ImpliedTimes\", \"operator\", \"implicit\"],\n                        [\"Log\", \"appl\", \"prefix function\"],\n                        [\"Matrix\", \"matrix\", \"\"],\n                        [\"Matrix\", \"vector\", \"\"],\n                        [\"MultiLineLabel\", \"multiline\", \"label\"],\n                        [\"MultiLineOverview\", \"multiline\", \"table\"],\n                        [\"MultiLinePausesBetweenColumns\", \"multiline\", \"table\"],\n                        [\"MultiLineLabel\", \"table\", \"label\"],\n                        [\"MultiLineOverview\", \"table\", \"table\"],\n                        [\"MultiLinePausesBetweenColumns\", \"table\", \"table\"],\n                        [\"MultiLineLabel\", \"cases\", \"label\"],\n                        [\"MultiLineOverview\", \"cases\", \"table\"],\n                        [\"MultiLinePausesBetweenColumns\", \"cases\", \"table\"],\n                        [\"MultsymbolDot\", \"operator\", \"multiplication\"],\n                        [\"MultsymbolX\", \"operator\", \"multiplication\"],\n                        [\"Paren\", \"fenced\", \"leftright\"],\n                        [\"Prime\", \"superscript\", \"prime\"],\n                        [\"Roots\", \"root\", \"\"],\n                        [\"Roots\", \"sqrt\", \"\"],\n                        [\"SetMemberSymbol\", \"relation\", \"element\"],\n                        [\"Sets\", \"fenced\", \"set extended\"],\n                        [\"TriangleSymbol\", \"identifier\", \"greekletter\"],\n                        [\"Trig\", \"appl\", \"prefix function\"],\n                        [\"VerticalLine\", \"punctuated\", \"vbar\"],\n                    ],\n                    d = (function () {\n                        const t = {};\n                        for (let e, r = 0; (e = f[r]); r++) {\n                            const r = e[0];\n                            let n = t[e[1]];\n                            n || ((n = {}), (t[e[1]] = n)), (n[e[2]] = r);\n                        }\n                        return t;\n                    })();\n                (n.default.getInstance().comparators.clearspeak = c.comparator),\n                    (n.default.getInstance().parsers.clearspeak = new h());\n            },\n            5425: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.ClearspeakRules = void 0);\n                const n = r(1676),\n                    o = r(365),\n                    i = r(9912),\n                    s = r(1378),\n                    a = r(8437),\n                    l = r(7283);\n                e.ClearspeakRules = function () {\n                    l.addStore(\n                        n.DynamicCstr.BASE_LOCALE + \".speech.clearspeak\",\n                        \"\",\n                        {\n                            CTFpauseSeparator: o.pauseSeparator,\n                            CTFnodeCounter: i.nodeCounter,\n                            CTFcontentIterator: o.contentIterator,\n                            CSFvulgarFraction: a.vulgarFraction,\n                            CQFvulgarFractionSmall: i.isSmallVulgarFraction,\n                            CQFcellsSimple: i.allCellsSimple,\n                            CSFordinalExponent: i.ordinalExponent,\n                            CSFwordOrdinal: i.wordOrdinal,\n                            CQFmatchingFences: i.matchingFences,\n                            CSFnestingDepth: i.nestingDepth,\n                            CQFfencedArguments: i.fencedArguments,\n                            CQFsimpleArguments: i.simpleArguments,\n                            CQFspaceoutNumber: s.spaceoutNumber,\n                        }\n                    );\n                };\n            },\n            9912: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.wordOrdinal =\n                        e.layoutFactor_ =\n                        e.fencedFactor_ =\n                        e.simpleFactor_ =\n                        e.simpleArguments =\n                        e.fencedArguments =\n                        e.insertNesting =\n                        e.matchingFences =\n                        e.nestingDepth =\n                        e.NESTING_DEPTH =\n                        e.ordinalExponent =\n                        e.allTextLastContent_ =\n                        e.isUnitExpression =\n                        e.isSmallVulgarFraction =\n                        e.allCellsSimple =\n                        e.allIndices_ =\n                        e.isInteger_ =\n                        e.simpleCell_ =\n                        e.simpleNode =\n                        e.hasPreference =\n                        e.isSimpleFraction_ =\n                        e.isSimpleNumber_ =\n                        e.isNumber_ =\n                        e.isLetter_ =\n                        e.isSimple_ =\n                        e.isSimpleLetters_ =\n                        e.isSimpleDegree_ =\n                        e.isSimpleNegative_ =\n                        e.isSimpleFunction_ =\n                        e.isSimpleExpression =\n                        e.nodeCounter =\n                            void 0);\n                const n = r(5740),\n                    o = r(5897),\n                    i = r(5274),\n                    s = r(4356),\n                    a = r(4977),\n                    l = r(2105),\n                    c = r(365),\n                    u = r(7630),\n                    p = r(9265),\n                    h = r(3588);\n                function f(t) {\n                    return S(t) || g(t) || y(t) || m(t) || d(t);\n                }\n                function d(t) {\n                    return (\n                        \"appl\" === t.type &&\n                        (\"prefix function\" === t.childNodes[0].role ||\n                            \"simple function\" === t.childNodes[0].role) &&\n                        (b(t.childNodes[1]) ||\n                            (\"fenced\" === t.childNodes[1].type &&\n                                b(t.childNodes[1].childNodes[0])))\n                    );\n                }\n                function m(t) {\n                    return (\n                        \"prefixop\" === t.type &&\n                        \"negative\" === t.role &&\n                        b(t.childNodes[0]) &&\n                        \"prefixop\" !== t.childNodes[0].type &&\n                        \"appl\" !== t.childNodes[0].type &&\n                        \"punctuated\" !== t.childNodes[0].type\n                    );\n                }\n                function y(t) {\n                    return (\n                        \"punctuated\" === t.type &&\n                        \"endpunct\" === t.role &&\n                        2 === t.childNodes.length &&\n                        \"degree\" === t.childNodes[1].role &&\n                        (v(t.childNodes[0]) ||\n                            _(t.childNodes[0]) ||\n                            (\"prefixop\" === t.childNodes[0].type &&\n                                \"negative\" === t.childNodes[0].role &&\n                                (v(t.childNodes[0].childNodes[0]) ||\n                                    _(t.childNodes[0].childNodes[0]))))\n                    );\n                }\n                function g(t) {\n                    return (\n                        v(t) ||\n                        (\"infixop\" === t.type &&\n                            \"implicit\" === t.role &&\n                            ((2 === t.childNodes.length &&\n                                (v(t.childNodes[0]) || S(t.childNodes[0])) &&\n                                v(t.childNodes[1])) ||\n                                (3 === t.childNodes.length &&\n                                    S(t.childNodes[0]) &&\n                                    v(t.childNodes[1]) &&\n                                    v(t.childNodes[2]))))\n                    );\n                }\n                function b(t) {\n                    return t.hasAnnotation(\"clearspeak\", \"simple\");\n                }\n                function v(t) {\n                    return (\n                        \"identifier\" === t.type &&\n                        (\"latinletter\" === t.role ||\n                            \"greekletter\" === t.role ||\n                            \"otherletter\" === t.role ||\n                            \"simple function\" === t.role)\n                    );\n                }\n                function _(t) {\n                    return (\n                        \"number\" === t.type &&\n                        (\"integer\" === t.role || \"float\" === t.role)\n                    );\n                }\n                function S(t) {\n                    return _(t) || M(t);\n                }\n                function M(t) {\n                    if (O(\"Fraction_Over\") || O(\"Fraction_FracOver\")) return !1;\n                    if (\"fraction\" !== t.type || \"vulgar\" !== t.role) return !1;\n                    if (O(\"Fraction_Ordinal\")) return !0;\n                    const e = parseInt(t.childNodes[0].textContent, 10),\n                        r = parseInt(t.childNodes[1].textContent, 10);\n                    return e > 0 && e < 20 && r > 0 && r < 11;\n                }\n                function O(t) {\n                    return o.default.getInstance().style === t;\n                }\n                function x(t) {\n                    if (!t.hasAttribute(\"annotation\")) return !1;\n                    const e = t.getAttribute(\"annotation\");\n                    return !!/clearspeak:simple$|clearspeak:simple;/.exec(e);\n                }\n                function E(t) {\n                    if (x(t)) return !0;\n                    if (\"subscript\" !== t.tagName) return !1;\n                    const e = t.childNodes[0].childNodes,\n                        r = e[1];\n                    return (\n                        \"identifier\" === e[0].tagName &&\n                        (A(r) ||\n                            (\"infixop\" === r.tagName &&\n                                r.hasAttribute(\"role\") &&\n                                \"implicit\" === r.getAttribute(\"role\") &&\n                                C(r)))\n                    );\n                }\n                function A(t) {\n                    return (\n                        \"number\" === t.tagName &&\n                        t.hasAttribute(\"role\") &&\n                        \"integer\" === t.getAttribute(\"role\")\n                    );\n                }\n                function C(t) {\n                    return i\n                        .evalXPath(\"children/*\", t)\n                        .every((t) => A(t) || \"identifier\" === t.tagName);\n                }\n                function T(t) {\n                    return (\n                        \"text\" === t.type ||\n                        (\"punctuated\" === t.type &&\n                            \"text\" === t.role &&\n                            _(t.childNodes[0]) &&\n                            N(t.childNodes.slice(1))) ||\n                        (\"identifier\" === t.type && \"unit\" === t.role) ||\n                        (\"infixop\" === t.type &&\n                            (\"implicit\" === t.role || \"unit\" === t.role))\n                    );\n                }\n                function N(t) {\n                    for (let e = 0; e < t.length - 1; e++)\n                        if (\"text\" !== t[e].type || \"\" !== t[e].textContent)\n                            return !1;\n                    return \"text\" === t[t.length - 1].type;\n                }\n                function w(t, e) {\n                    if (!e || !t) return t;\n                    const r = t.match(/^(open|close) /);\n                    return r\n                        ? r[0] + e + \" \" + t.substring(r[0].length)\n                        : e + \" \" + t;\n                }\n                function L(t) {\n                    return (\n                        !!t &&\n                        (\"number\" === t.tagName ||\n                            \"identifier\" === t.tagName ||\n                            \"function\" === t.tagName ||\n                            \"appl\" === t.tagName ||\n                            \"fraction\" === t.tagName)\n                    );\n                }\n                function I(t) {\n                    return (\n                        t &&\n                        (\"fenced\" === t.tagName ||\n                            (t.hasAttribute(\"role\") &&\n                                \"leftright\" === t.getAttribute(\"role\")) ||\n                            P(t))\n                    );\n                }\n                function P(t) {\n                    return (\n                        !!t &&\n                        (\"matrix\" === t.tagName || \"vector\" === t.tagName)\n                    );\n                }\n                (e.nodeCounter = function (t, e) {\n                    const r = e.split(\"-\"),\n                        n = c.nodeCounter(t, r[0] || \"\"),\n                        o = r[1] || \"\",\n                        i = r[2] || \"\";\n                    let s = !0;\n                    return function () {\n                        const t = n();\n                        return s ? ((s = !1), i + t + o) : t + o;\n                    };\n                }),\n                    (e.isSimpleExpression = f),\n                    (e.isSimpleFunction_ = d),\n                    (e.isSimpleNegative_ = m),\n                    (e.isSimpleDegree_ = y),\n                    (e.isSimpleLetters_ = g),\n                    (e.isSimple_ = b),\n                    (e.isLetter_ = v),\n                    (e.isNumber_ = _),\n                    (e.isSimpleNumber_ = S),\n                    (e.isSimpleFraction_ = M),\n                    (e.hasPreference = O),\n                    (0, u.register)(\n                        new p.SemanticAnnotator(\n                            \"clearspeak\",\n                            \"simple\",\n                            function (t) {\n                                return f(t) ? \"simple\" : \"\";\n                            }\n                        )\n                    ),\n                    (e.simpleNode = x),\n                    (e.simpleCell_ = E),\n                    (e.isInteger_ = A),\n                    (e.allIndices_ = C),\n                    (e.allCellsSimple = function (t) {\n                        const e =\n                            \"matrix\" === t.tagName\n                                ? \"children/row/children/cell/children/*\"\n                                : \"children/line/children/*\";\n                        return i.evalXPath(e, t).every(E) ? [t] : [];\n                    }),\n                    (e.isSmallVulgarFraction = function (t) {\n                        return (0, a.vulgarFractionSmall)(t, 20, 11) ? [t] : [];\n                    }),\n                    (e.isUnitExpression = T),\n                    (e.allTextLastContent_ = N),\n                    (0, u.register)(\n                        new p.SemanticAnnotator(\"clearspeak\", \"unit\", function (\n                            t\n                        ) {\n                            return T(t) ? \"unit\" : \"\";\n                        })\n                    ),\n                    (e.ordinalExponent = function (t) {\n                        const e = parseInt(t.textContent, 10);\n                        return isNaN(e)\n                            ? t.textContent\n                            : e > 10\n                              ? s.LOCALE.NUMBERS.numericOrdinal(e)\n                              : s.LOCALE.NUMBERS.wordOrdinal(e);\n                    }),\n                    (e.NESTING_DEPTH = null),\n                    (e.nestingDepth = function (t) {\n                        let r = 0;\n                        const n = t.textContent,\n                            o = \"open\" === t.getAttribute(\"role\") ? 0 : 1;\n                        let i = t.parentNode;\n                        for (; i; )\n                            \"fenced\" === i.tagName &&\n                                i.childNodes[0].childNodes[o].textContent ===\n                                    n &&\n                                r++,\n                                (i = i.parentNode);\n                        return (\n                            (e.NESTING_DEPTH =\n                                r > 1 ? s.LOCALE.NUMBERS.wordOrdinal(r) : \"\"),\n                            e.NESTING_DEPTH\n                        );\n                    }),\n                    (e.matchingFences = function (t) {\n                        const e = t.previousSibling;\n                        let r, n;\n                        return (\n                            e\n                                ? ((r = e), (n = t))\n                                : ((r = t), (n = t.nextSibling)),\n                            n &&\n                            (0, h.isMatchingFence)(r.textContent, n.textContent)\n                                ? [t]\n                                : []\n                        );\n                    }),\n                    (e.insertNesting = w),\n                    l.Grammar.getInstance().setCorrection(\"insertNesting\", w),\n                    (e.fencedArguments = function (t) {\n                        const e = n.toArray(t.parentNode.childNodes),\n                            r = i.evalXPath(\"../../children/*\", t),\n                            o = e.indexOf(t);\n                        return I(r[o]) || I(r[o + 1]) ? [t] : [];\n                    }),\n                    (e.simpleArguments = function (t) {\n                        const e = n.toArray(t.parentNode.childNodes),\n                            r = i.evalXPath(\"../../children/*\", t),\n                            o = e.indexOf(t);\n                        return L(r[o]) &&\n                            r[o + 1] &&\n                            (L(r[o + 1]) ||\n                                \"root\" === r[o + 1].tagName ||\n                                \"sqrt\" === r[o + 1].tagName ||\n                                (\"superscript\" === r[o + 1].tagName &&\n                                    r[o + 1].childNodes[0].childNodes[0] &&\n                                    (\"number\" ===\n                                        r[o + 1].childNodes[0].childNodes[0]\n                                            .tagName ||\n                                        \"identifier\" ===\n                                            r[o + 1].childNodes[0].childNodes[0]\n                                                .tagName) &&\n                                    (\"2\" ===\n                                        r[o + 1].childNodes[0].childNodes[1]\n                                            .textContent ||\n                                        \"3\" ===\n                                            r[o + 1].childNodes[0].childNodes[1]\n                                                .textContent)))\n                            ? [t]\n                            : [];\n                    }),\n                    (e.simpleFactor_ = L),\n                    (e.fencedFactor_ = I),\n                    (e.layoutFactor_ = P),\n                    (e.wordOrdinal = function (t) {\n                        return s.LOCALE.NUMBERS.wordOrdinal(\n                            parseInt(t.textContent, 10)\n                        );\n                    });\n            },\n            6141: function (t, e, r) {\n                var n =\n                    (this && this.__awaiter) ||\n                    function (t, e, r, n) {\n                        return new (r || (r = Promise))(function (o, i) {\n                            function s(t) {\n                                try {\n                                    l(n.next(t));\n                                } catch (t) {\n                                    i(t);\n                                }\n                            }\n                            function a(t) {\n                                try {\n                                    l(n.throw(t));\n                                } catch (t) {\n                                    i(t);\n                                }\n                            }\n                            function l(t) {\n                                var e;\n                                t.done\n                                    ? o(t.value)\n                                    : ((e = t.value),\n                                      e instanceof r\n                                          ? e\n                                          : new r(function (t) {\n                                                t(e);\n                                            })).then(s, a);\n                            }\n                            l((n = n.apply(t, e || [])).next());\n                        });\n                    };\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.loadAjax =\n                        e.loadFileSync =\n                        e.loadFile =\n                        e.parseMaps =\n                        e.retrieveFiles =\n                        e.standardLoader =\n                        e.loadLocale =\n                        e.store =\n                            void 0);\n                const o = r(2139),\n                    i = r(5897),\n                    s = r(4440),\n                    a = r(7248),\n                    l = r(2315),\n                    c = r(1676),\n                    u = r(2780),\n                    p = r(2362),\n                    h = r(7491),\n                    f = r(313);\n                e.store = u;\n                const d = {\n                    functions: u.addFunctionRules,\n                    symbols: u.addSymbolRules,\n                    units: u.addUnitRules,\n                    si: u.setSiPrefixes,\n                };\n                let m = !1;\n                function y(t = i.default.getInstance().locale) {\n                    i.EnginePromise.loaded[t] ||\n                        ((i.EnginePromise.loaded[t] = [!1, !1]),\n                        (function (t) {\n                            if (\n                                i.default.getInstance().isIE &&\n                                i.default.getInstance().mode === s.Mode.HTTP\n                            )\n                                return void S(t);\n                            b(t);\n                        })(t));\n                }\n                function g() {\n                    switch (i.default.getInstance().mode) {\n                        case s.Mode.ASYNC:\n                            return M;\n                        case s.Mode.HTTP:\n                            return x;\n                        case s.Mode.SYNC:\n                        default:\n                            return O;\n                    }\n                }\n                function b(t) {\n                    const e = i.default.getInstance().customLoader\n                            ? i.default.getInstance().customLoader\n                            : g(),\n                        r = new Promise((r) => {\n                            e(t).then(\n                                (e) => {\n                                    v(e),\n                                        (i.EnginePromise.loaded[t] = [!0, !0]),\n                                        r(t);\n                                },\n                                (e) => {\n                                    (i.EnginePromise.loaded[t] = [!0, !1]),\n                                        console.error(\n                                            `Unable to load locale: ${t}`\n                                        ),\n                                        (i.default.getInstance().locale =\n                                            i.default.getInstance().defaultLocale),\n                                        r(t);\n                                }\n                            );\n                        });\n                    i.EnginePromise.promises[t] = r;\n                }\n                function v(t) {\n                    _(JSON.parse(t));\n                }\n                function _(t, e) {\n                    let r = !0;\n                    for (let n, o = 0; (n = Object.keys(t)[o]); o++) {\n                        const o = n.split(\"/\");\n                        (e && e !== o[0]) ||\n                            (\"rules\" === o[1]\n                                ? p.SpeechRuleEngine.getInstance().addStore(\n                                      t[n]\n                                  )\n                                : \"messages\" === o[1]\n                                  ? (0, h.completeLocale)(t[n])\n                                  : (r && (f.generate(o[0]), (r = !1)),\n                                    t[n].forEach(d[o[1]])));\n                    }\n                }\n                function S(t, e) {\n                    let r = e || 1;\n                    o.mapsForIE\n                        ? _(o.mapsForIE, t)\n                        : r <= 5 &&\n                          setTimeout((() => S(t, r++)).bind(this), 300);\n                }\n                function M(t) {\n                    const e = a.localePath(t);\n                    return new Promise((t, r) => {\n                        l.default.fs.readFile(e, \"utf8\", (e, n) => {\n                            if (e) return r(e);\n                            t(n);\n                        });\n                    });\n                }\n                function O(t) {\n                    const e = a.localePath(t);\n                    return new Promise((t, r) => {\n                        let n = \"{}\";\n                        try {\n                            n = l.default.fs.readFileSync(e, \"utf8\");\n                        } catch (t) {\n                            return r(t);\n                        }\n                        t(n);\n                    });\n                }\n                function x(t) {\n                    const e = a.localePath(t),\n                        r = new XMLHttpRequest();\n                    return new Promise((t, n) => {\n                        (r.onreadystatechange = function () {\n                            if (4 === r.readyState) {\n                                const e = r.status;\n                                0 === e || (e >= 200 && e < 400)\n                                    ? t(r.responseText)\n                                    : n(e);\n                            }\n                        }),\n                            r.open(\"GET\", e, !0),\n                            r.send();\n                    });\n                }\n                (e.loadLocale = function (t = i.default.getInstance().locale) {\n                    return n(this, void 0, void 0, function* () {\n                        return (\n                            m || (y(c.DynamicCstr.BASE_LOCALE), (m = !0)),\n                            i.EnginePromise.promises[\n                                c.DynamicCstr.BASE_LOCALE\n                            ].then(() =>\n                                n(this, void 0, void 0, function* () {\n                                    const e =\n                                        i.default.getInstance().defaultLocale;\n                                    return e\n                                        ? (y(e),\n                                          i.EnginePromise.promises[e].then(() =>\n                                              n(\n                                                  this,\n                                                  void 0,\n                                                  void 0,\n                                                  function* () {\n                                                      return (\n                                                          y(t),\n                                                          i.EnginePromise\n                                                              .promises[t]\n                                                      );\n                                                  }\n                                              )\n                                          ))\n                                        : (y(t), i.EnginePromise.promises[t]);\n                                })\n                            )\n                        );\n                    });\n                }),\n                    (e.standardLoader = g),\n                    (e.retrieveFiles = b),\n                    (e.parseMaps = v),\n                    (e.loadFile = M),\n                    (e.loadFileSync = O),\n                    (e.loadAjax = x);\n            },\n            7088: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.leftSubscriptBrief =\n                        e.leftSuperscriptBrief =\n                        e.leftSubscriptVerbose =\n                        e.leftSuperscriptVerbose =\n                        e.baselineBrief =\n                        e.baselineVerbose =\n                            void 0);\n                const n = r(1378);\n                (e.baselineVerbose = function (t) {\n                    return n.baselineVerbose(t).replace(/-$/, \"\");\n                }),\n                    (e.baselineBrief = function (t) {\n                        return n.baselineBrief(t).replace(/-$/, \"\");\n                    }),\n                    (e.leftSuperscriptVerbose = function (t) {\n                        return n\n                            .superscriptVerbose(t)\n                            .replace(/^exposant/, \"exposant gauche\");\n                    }),\n                    (e.leftSubscriptVerbose = function (t) {\n                        return n\n                            .subscriptVerbose(t)\n                            .replace(/^indice/, \"indice gauche\");\n                    }),\n                    (e.leftSuperscriptBrief = function (t) {\n                        return n\n                            .superscriptBrief(t)\n                            .replace(/^sup/, \"sup gauche\");\n                    }),\n                    (e.leftSubscriptBrief = function (t) {\n                        return n\n                            .subscriptBrief(t)\n                            .replace(/^sub/, \"sub gauche\");\n                    });\n            },\n            9577: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.MathspeakRules = void 0);\n                const n = r(1676),\n                    o = r(365),\n                    i = r(7088),\n                    s = r(1378),\n                    a = r(8437),\n                    l = r(7283),\n                    c = r(7598);\n                e.MathspeakRules = function () {\n                    l.addStore(\n                        n.DynamicCstr.BASE_LOCALE + \".speech.mathspeak\",\n                        \"\",\n                        {\n                            CQFspaceoutNumber: s.spaceoutNumber,\n                            CQFspaceoutIdentifier: s.spaceoutIdentifier,\n                            CSFspaceoutText: s.spaceoutText,\n                            CSFopenFracVerbose: s.openingFractionVerbose,\n                            CSFcloseFracVerbose: s.closingFractionVerbose,\n                            CSFoverFracVerbose: s.overFractionVerbose,\n                            CSFopenFracBrief: s.openingFractionBrief,\n                            CSFcloseFracBrief: s.closingFractionBrief,\n                            CSFopenFracSbrief: s.openingFractionSbrief,\n                            CSFcloseFracSbrief: s.closingFractionSbrief,\n                            CSFoverFracSbrief: s.overFractionSbrief,\n                            CSFvulgarFraction: a.vulgarFraction,\n                            CQFvulgarFractionSmall: s.isSmallVulgarFraction,\n                            CSFopenRadicalVerbose: s.openingRadicalVerbose,\n                            CSFcloseRadicalVerbose: s.closingRadicalVerbose,\n                            CSFindexRadicalVerbose: s.indexRadicalVerbose,\n                            CSFopenRadicalBrief: s.openingRadicalBrief,\n                            CSFcloseRadicalBrief: s.closingRadicalBrief,\n                            CSFindexRadicalBrief: s.indexRadicalBrief,\n                            CSFopenRadicalSbrief: s.openingRadicalSbrief,\n                            CSFindexRadicalSbrief: s.indexRadicalSbrief,\n                            CQFisSmallRoot: s.smallRoot,\n                            CSFsuperscriptVerbose: s.superscriptVerbose,\n                            CSFsuperscriptBrief: s.superscriptBrief,\n                            CSFsubscriptVerbose: s.subscriptVerbose,\n                            CSFsubscriptBrief: s.subscriptBrief,\n                            CSFbaselineVerbose: s.baselineVerbose,\n                            CSFbaselineBrief: s.baselineBrief,\n                            CSFleftsuperscriptVerbose: s.superscriptVerbose,\n                            CSFleftsubscriptVerbose: s.subscriptVerbose,\n                            CSFrightsuperscriptVerbose: s.superscriptVerbose,\n                            CSFrightsubscriptVerbose: s.subscriptVerbose,\n                            CSFleftsuperscriptBrief: s.superscriptBrief,\n                            CSFleftsubscriptBrief: s.subscriptBrief,\n                            CSFrightsuperscriptBrief: s.superscriptBrief,\n                            CSFrightsubscriptBrief: s.subscriptBrief,\n                            CSFunderscript: s.nestedUnderscript,\n                            CSFoverscript: s.nestedOverscript,\n                            CSFendscripts: s.endscripts,\n                            CTFordinalCounter: a.ordinalCounter,\n                            CTFwordCounter: a.wordCounter,\n                            CTFcontentIterator: o.contentIterator,\n                            CQFdetIsSimple: s.determinantIsSimple,\n                            CSFRemoveParens: s.removeParens,\n                            CQFresetNesting: s.resetNestingDepth,\n                            CGFbaselineConstraint: s.generateBaselineConstraint,\n                            CGFtensorRules: s.generateTensorRules,\n                        }\n                    ),\n                        l.addStore(\n                            \"es.speech.mathspeak\",\n                            n.DynamicCstr.BASE_LOCALE + \".speech.mathspeak\",\n                            {\n                                CTFunitMultipliers: c.unitMultipliers,\n                                CQFoneLeft: c.oneLeft,\n                            }\n                        ),\n                        l.addStore(\n                            \"fr.speech.mathspeak\",\n                            n.DynamicCstr.BASE_LOCALE + \".speech.mathspeak\",\n                            {\n                                CSFbaselineVerbose: i.baselineVerbose,\n                                CSFbaselineBrief: i.baselineBrief,\n                                CSFleftsuperscriptVerbose:\n                                    i.leftSuperscriptVerbose,\n                                CSFleftsubscriptVerbose: i.leftSubscriptVerbose,\n                                CSFleftsuperscriptBrief: i.leftSuperscriptBrief,\n                                CSFleftsubscriptBrief: i.leftSubscriptBrief,\n                            }\n                        );\n                };\n            },\n            1378: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.smallRoot =\n                        e.generateTensorRules =\n                        e.removeParens =\n                        e.generateBaselineConstraint =\n                        e.determinantIsSimple =\n                        e.nestedOverscript =\n                        e.endscripts =\n                        e.overscoreNestingDepth =\n                        e.nestedUnderscript =\n                        e.underscoreNestingDepth =\n                        e.indexRadicalSbrief =\n                        e.openingRadicalSbrief =\n                        e.indexRadicalBrief =\n                        e.closingRadicalBrief =\n                        e.openingRadicalBrief =\n                        e.indexRadicalVerbose =\n                        e.closingRadicalVerbose =\n                        e.openingRadicalVerbose =\n                        e.getRootIndex =\n                        e.nestedRadical =\n                        e.radicalNestingDepth =\n                        e.baselineBrief =\n                        e.baselineVerbose =\n                        e.superscriptBrief =\n                        e.superscriptVerbose =\n                        e.subscriptBrief =\n                        e.subscriptVerbose =\n                        e.nestedSubSuper =\n                        e.isSmallVulgarFraction =\n                        e.overFractionSbrief =\n                        e.closingFractionSbrief =\n                        e.openingFractionSbrief =\n                        e.closingFractionBrief =\n                        e.openingFractionBrief =\n                        e.overFractionVerbose =\n                        e.closingFractionVerbose =\n                        e.openingFractionVerbose =\n                        e.nestedFraction =\n                        e.fractionNestingDepth =\n                        e.computeNestingDepth_ =\n                        e.containsAttr =\n                        e.getNestingDepth =\n                        e.resetNestingDepth =\n                        e.nestingBarriers =\n                        e.spaceoutIdentifier =\n                        e.spaceoutNumber =\n                        e.spaceoutNodes =\n                        e.spaceoutText =\n                            void 0);\n                const n = r(707),\n                    o = r(5740),\n                    i = r(5274),\n                    s = r(4356),\n                    a = r(3308);\n                let l = {};\n                function c(t, e) {\n                    const r = Array.from(t.textContent),\n                        n = [],\n                        o = a.default.getInstance(),\n                        i = t.ownerDocument;\n                    for (let t, s = 0; (t = r[s]); s++) {\n                        const r = o.getNodeFactory().makeLeafNode(t, \"unknown\"),\n                            s = o.identifierNode(r, \"unknown\", \"\");\n                        e(s), n.push(s.xml(i));\n                    }\n                    return n;\n                }\n                function u(t, r, i, s, a, c) {\n                    (s = s || e.nestingBarriers),\n                        (a = a || {}),\n                        (c =\n                            c ||\n                            function (t) {\n                                return !1;\n                            });\n                    const u = o.serializeXml(r);\n                    if ((l[t] || (l[t] = {}), l[t][u])) return l[t][u];\n                    if (c(r) || i.indexOf(r.tagName) < 0) return 0;\n                    const p = h(r, i, n.setdifference(s, i), a, c, 0);\n                    return (l[t][u] = p), p;\n                }\n                function p(t, e) {\n                    if (!t.attributes) return !1;\n                    const r = o.toArray(t.attributes);\n                    for (let t, n = 0; (t = r[n]); n++)\n                        if (e[t.nodeName] === t.nodeValue) return !0;\n                    return !1;\n                }\n                function h(t, e, r, n, i, s) {\n                    if (i(t) || r.indexOf(t.tagName) > -1 || p(t, n)) return s;\n                    if (\n                        (e.indexOf(t.tagName) > -1 && s++,\n                        !t.childNodes || 0 === t.childNodes.length)\n                    )\n                        return s;\n                    const a = o.toArray(t.childNodes);\n                    return Math.max.apply(\n                        null,\n                        a.map(function (t) {\n                            return h(t, e, r, n, i, s);\n                        })\n                    );\n                }\n                function f(t) {\n                    return u(\n                        \"fraction\",\n                        t,\n                        [\"fraction\"],\n                        e.nestingBarriers,\n                        {},\n                        s.LOCALE.FUNCTIONS.fracNestDepth\n                    );\n                }\n                function d(t, e, r) {\n                    const n = f(t),\n                        o = Array(n).fill(e);\n                    return (\n                        r && o.push(r),\n                        o.join(s.LOCALE.MESSAGES.regexp.JOINER_FRAC)\n                    );\n                }\n                function m(t, e, r) {\n                    for (; t.parentNode; ) {\n                        const n = t.parentNode,\n                            o = n.parentNode;\n                        if (!o) break;\n                        const i = t.getAttribute && t.getAttribute(\"role\");\n                        ((\"subscript\" === o.tagName && t === n.childNodes[1]) ||\n                            (\"tensor\" === o.tagName &&\n                                i &&\n                                (\"leftsub\" === i || \"rightsub\" === i))) &&\n                            (e =\n                                r.sub +\n                                s.LOCALE.MESSAGES.regexp.JOINER_SUBSUPER +\n                                e),\n                            ((\"superscript\" === o.tagName &&\n                                t === n.childNodes[1]) ||\n                                (\"tensor\" === o.tagName &&\n                                    i &&\n                                    (\"leftsuper\" === i ||\n                                        \"rightsuper\" === i))) &&\n                                (e =\n                                    r.sup +\n                                    s.LOCALE.MESSAGES.regexp.JOINER_SUBSUPER +\n                                    e),\n                            (t = o);\n                    }\n                    return e.trim();\n                }\n                function y(t) {\n                    return u(\n                        \"radical\",\n                        t,\n                        [\"sqrt\", \"root\"],\n                        e.nestingBarriers,\n                        {}\n                    );\n                }\n                function g(t, e, r) {\n                    const n = y(t),\n                        o = b(t);\n                    return (\n                        (r = o ? s.LOCALE.FUNCTIONS.combineRootIndex(r, o) : r),\n                        1 === n\n                            ? r\n                            : s.LOCALE.FUNCTIONS.combineNestedRadical(\n                                  e,\n                                  s.LOCALE.FUNCTIONS.radicalNestDepth(n - 1),\n                                  r\n                              )\n                    );\n                }\n                function b(t) {\n                    const e =\n                        \"sqrt\" === t.tagName\n                            ? \"2\"\n                            : i\n                                  .evalXPath(\"children/*[1]\", t)[0]\n                                  .textContent.trim();\n                    return s.LOCALE.MESSAGES.MSroots[e] || \"\";\n                }\n                function v(t) {\n                    return u(\n                        \"underscore\",\n                        t,\n                        [\"underscore\"],\n                        e.nestingBarriers,\n                        {},\n                        function (t) {\n                            return (\n                                t.tagName &&\n                                \"underscore\" === t.tagName &&\n                                \"underaccent\" ===\n                                    t.childNodes[0].childNodes[1].getAttribute(\n                                        \"role\"\n                                    )\n                            );\n                        }\n                    );\n                }\n                function _(t) {\n                    return u(\n                        \"overscore\",\n                        t,\n                        [\"overscore\"],\n                        e.nestingBarriers,\n                        {},\n                        function (t) {\n                            return (\n                                t.tagName &&\n                                \"overscore\" === t.tagName &&\n                                \"overaccent\" ===\n                                    t.childNodes[0].childNodes[1].getAttribute(\n                                        \"role\"\n                                    )\n                            );\n                        }\n                    );\n                }\n                (e.spaceoutText = function (t) {\n                    return Array.from(t.textContent).join(\" \");\n                }),\n                    (e.spaceoutNodes = c),\n                    (e.spaceoutNumber = function (t) {\n                        return c(t, function (t) {\n                            t.textContent.match(/\\W/) || (t.type = \"number\");\n                        });\n                    }),\n                    (e.spaceoutIdentifier = function (t) {\n                        return c(t, function (t) {\n                            (t.font = \"unknown\"), (t.type = \"identifier\");\n                        });\n                    }),\n                    (e.nestingBarriers = [\n                        \"cases\",\n                        \"cell\",\n                        \"integral\",\n                        \"line\",\n                        \"matrix\",\n                        \"multiline\",\n                        \"overscore\",\n                        \"root\",\n                        \"row\",\n                        \"sqrt\",\n                        \"subscript\",\n                        \"superscript\",\n                        \"table\",\n                        \"underscore\",\n                        \"vector\",\n                    ]),\n                    (e.resetNestingDepth = function (t) {\n                        return (l = {}), [t];\n                    }),\n                    (e.getNestingDepth = u),\n                    (e.containsAttr = p),\n                    (e.computeNestingDepth_ = h),\n                    (e.fractionNestingDepth = f),\n                    (e.nestedFraction = d),\n                    (e.openingFractionVerbose = function (t) {\n                        return d(\n                            t,\n                            s.LOCALE.MESSAGES.MS.START,\n                            s.LOCALE.MESSAGES.MS.FRAC_V\n                        );\n                    }),\n                    (e.closingFractionVerbose = function (t) {\n                        return d(\n                            t,\n                            s.LOCALE.MESSAGES.MS.END,\n                            s.LOCALE.MESSAGES.MS.FRAC_V\n                        );\n                    }),\n                    (e.overFractionVerbose = function (t) {\n                        return d(t, s.LOCALE.MESSAGES.MS.FRAC_OVER);\n                    }),\n                    (e.openingFractionBrief = function (t) {\n                        return d(\n                            t,\n                            s.LOCALE.MESSAGES.MS.START,\n                            s.LOCALE.MESSAGES.MS.FRAC_B\n                        );\n                    }),\n                    (e.closingFractionBrief = function (t) {\n                        return d(\n                            t,\n                            s.LOCALE.MESSAGES.MS.END,\n                            s.LOCALE.MESSAGES.MS.FRAC_B\n                        );\n                    }),\n                    (e.openingFractionSbrief = function (t) {\n                        const e = f(t);\n                        return 1 === e\n                            ? s.LOCALE.MESSAGES.MS.FRAC_S\n                            : s.LOCALE.FUNCTIONS.combineNestedFraction(\n                                  s.LOCALE.MESSAGES.MS.NEST_FRAC,\n                                  s.LOCALE.FUNCTIONS.radicalNestDepth(e - 1),\n                                  s.LOCALE.MESSAGES.MS.FRAC_S\n                              );\n                    }),\n                    (e.closingFractionSbrief = function (t) {\n                        const e = f(t);\n                        return 1 === e\n                            ? s.LOCALE.MESSAGES.MS.ENDFRAC\n                            : s.LOCALE.FUNCTIONS.combineNestedFraction(\n                                  s.LOCALE.MESSAGES.MS.NEST_FRAC,\n                                  s.LOCALE.FUNCTIONS.radicalNestDepth(e - 1),\n                                  s.LOCALE.MESSAGES.MS.ENDFRAC\n                              );\n                    }),\n                    (e.overFractionSbrief = function (t) {\n                        const e = f(t);\n                        return 1 === e\n                            ? s.LOCALE.MESSAGES.MS.FRAC_OVER\n                            : s.LOCALE.FUNCTIONS.combineNestedFraction(\n                                  s.LOCALE.MESSAGES.MS.NEST_FRAC,\n                                  s.LOCALE.FUNCTIONS.radicalNestDepth(e - 1),\n                                  s.LOCALE.MESSAGES.MS.FRAC_OVER\n                              );\n                    }),\n                    (e.isSmallVulgarFraction = function (t) {\n                        return s.LOCALE.FUNCTIONS.fracNestDepth(t) ? [t] : [];\n                    }),\n                    (e.nestedSubSuper = m),\n                    (e.subscriptVerbose = function (t) {\n                        return m(t, s.LOCALE.MESSAGES.MS.SUBSCRIPT, {\n                            sup: s.LOCALE.MESSAGES.MS.SUPER,\n                            sub: s.LOCALE.MESSAGES.MS.SUB,\n                        });\n                    }),\n                    (e.subscriptBrief = function (t) {\n                        return m(t, s.LOCALE.MESSAGES.MS.SUB, {\n                            sup: s.LOCALE.MESSAGES.MS.SUP,\n                            sub: s.LOCALE.MESSAGES.MS.SUB,\n                        });\n                    }),\n                    (e.superscriptVerbose = function (t) {\n                        return m(t, s.LOCALE.MESSAGES.MS.SUPERSCRIPT, {\n                            sup: s.LOCALE.MESSAGES.MS.SUPER,\n                            sub: s.LOCALE.MESSAGES.MS.SUB,\n                        });\n                    }),\n                    (e.superscriptBrief = function (t) {\n                        return m(t, s.LOCALE.MESSAGES.MS.SUP, {\n                            sup: s.LOCALE.MESSAGES.MS.SUP,\n                            sub: s.LOCALE.MESSAGES.MS.SUB,\n                        });\n                    }),\n                    (e.baselineVerbose = function (t) {\n                        const e = m(t, \"\", {\n                            sup: s.LOCALE.MESSAGES.MS.SUPER,\n                            sub: s.LOCALE.MESSAGES.MS.SUB,\n                        });\n                        return e\n                            ? e\n                                  .replace(\n                                      new RegExp(\n                                          s.LOCALE.MESSAGES.MS.SUB + \"$\"\n                                      ),\n                                      s.LOCALE.MESSAGES.MS.SUBSCRIPT\n                                  )\n                                  .replace(\n                                      new RegExp(\n                                          s.LOCALE.MESSAGES.MS.SUPER + \"$\"\n                                      ),\n                                      s.LOCALE.MESSAGES.MS.SUPERSCRIPT\n                                  )\n                            : s.LOCALE.MESSAGES.MS.BASELINE;\n                    }),\n                    (e.baselineBrief = function (t) {\n                        return (\n                            m(t, \"\", {\n                                sup: s.LOCALE.MESSAGES.MS.SUP,\n                                sub: s.LOCALE.MESSAGES.MS.SUB,\n                            }) || s.LOCALE.MESSAGES.MS.BASE\n                        );\n                    }),\n                    (e.radicalNestingDepth = y),\n                    (e.nestedRadical = g),\n                    (e.getRootIndex = b),\n                    (e.openingRadicalVerbose = function (t) {\n                        return g(\n                            t,\n                            s.LOCALE.MESSAGES.MS.NESTED,\n                            s.LOCALE.MESSAGES.MS.STARTROOT\n                        );\n                    }),\n                    (e.closingRadicalVerbose = function (t) {\n                        return g(\n                            t,\n                            s.LOCALE.MESSAGES.MS.NESTED,\n                            s.LOCALE.MESSAGES.MS.ENDROOT\n                        );\n                    }),\n                    (e.indexRadicalVerbose = function (t) {\n                        return g(\n                            t,\n                            s.LOCALE.MESSAGES.MS.NESTED,\n                            s.LOCALE.MESSAGES.MS.ROOTINDEX\n                        );\n                    }),\n                    (e.openingRadicalBrief = function (t) {\n                        return g(\n                            t,\n                            s.LOCALE.MESSAGES.MS.NEST_ROOT,\n                            s.LOCALE.MESSAGES.MS.STARTROOT\n                        );\n                    }),\n                    (e.closingRadicalBrief = function (t) {\n                        return g(\n                            t,\n                            s.LOCALE.MESSAGES.MS.NEST_ROOT,\n                            s.LOCALE.MESSAGES.MS.ENDROOT\n                        );\n                    }),\n                    (e.indexRadicalBrief = function (t) {\n                        return g(\n                            t,\n                            s.LOCALE.MESSAGES.MS.NEST_ROOT,\n                            s.LOCALE.MESSAGES.MS.ROOTINDEX\n                        );\n                    }),\n                    (e.openingRadicalSbrief = function (t) {\n                        return g(\n                            t,\n                            s.LOCALE.MESSAGES.MS.NEST_ROOT,\n                            s.LOCALE.MESSAGES.MS.ROOT\n                        );\n                    }),\n                    (e.indexRadicalSbrief = function (t) {\n                        return g(\n                            t,\n                            s.LOCALE.MESSAGES.MS.NEST_ROOT,\n                            s.LOCALE.MESSAGES.MS.INDEX\n                        );\n                    }),\n                    (e.underscoreNestingDepth = v),\n                    (e.nestedUnderscript = function (t) {\n                        const e = v(t);\n                        return (\n                            Array(e).join(s.LOCALE.MESSAGES.MS.UNDER) +\n                            s.LOCALE.MESSAGES.MS.UNDERSCRIPT\n                        );\n                    }),\n                    (e.overscoreNestingDepth = _),\n                    (e.endscripts = function (t) {\n                        return s.LOCALE.MESSAGES.MS.ENDSCRIPTS;\n                    }),\n                    (e.nestedOverscript = function (t) {\n                        const e = _(t);\n                        return (\n                            Array(e).join(s.LOCALE.MESSAGES.MS.OVER) +\n                            s.LOCALE.MESSAGES.MS.OVERSCRIPT\n                        );\n                    }),\n                    (e.determinantIsSimple = function (t) {\n                        if (\n                            \"matrix\" !== t.tagName ||\n                            \"determinant\" !== t.getAttribute(\"role\")\n                        )\n                            return [];\n                        const e = i.evalXPath(\n                            \"children/row/children/cell/children/*\",\n                            t\n                        );\n                        for (let t, r = 0; (t = e[r]); r++)\n                            if (\"number\" !== t.tagName) {\n                                if (\"identifier\" === t.tagName) {\n                                    const e = t.getAttribute(\"role\");\n                                    if (\n                                        \"latinletter\" === e ||\n                                        \"greekletter\" === e ||\n                                        \"otherletter\" === e\n                                    )\n                                        continue;\n                                }\n                                return [];\n                            }\n                        return [t];\n                    }),\n                    (e.generateBaselineConstraint = function () {\n                        const t = (t) => t.map((t) => \"ancestor::\" + t),\n                            e = (t) => \"not(\" + t + \")\",\n                            r = e(\n                                t([\"subscript\", \"superscript\", \"tensor\"]).join(\n                                    \" or \"\n                                )\n                            ),\n                            n = t([\"relseq\", \"multrel\"]),\n                            o = t([\n                                \"fraction\",\n                                \"punctuation\",\n                                \"fenced\",\n                                \"sqrt\",\n                                \"root\",\n                            ]);\n                        let i = [];\n                        for (let t, e = 0; (t = o[e]); e++)\n                            i = i.concat(\n                                n.map(function (e) {\n                                    return t + \"/\" + e;\n                                })\n                            );\n                        return [\n                            [\n                                \"ancestor::*/following-sibling::*\",\n                                r,\n                                e(i.join(\" | \")),\n                            ].join(\" and \"),\n                        ];\n                    }),\n                    (e.removeParens = function (t) {\n                        if (\n                            !t.childNodes.length ||\n                            !t.childNodes[0].childNodes.length ||\n                            !t.childNodes[0].childNodes[0].childNodes.length\n                        )\n                            return \"\";\n                        const e =\n                            t.childNodes[0].childNodes[0].childNodes[0]\n                                .textContent;\n                        return e.match(/^\\(.+\\)$/) ? e.slice(1, -1) : e;\n                    });\n                const S = new Map([\n                        [3, \"CSFleftsuperscript\"],\n                        [4, \"CSFleftsubscript\"],\n                        [2, \"CSFbaseline\"],\n                        [1, \"CSFrightsubscript\"],\n                        [0, \"CSFrightsuperscript\"],\n                    ]),\n                    M = new Map([\n                        [4, 2],\n                        [3, 3],\n                        [2, 1],\n                        [1, 4],\n                        [0, 5],\n                    ]);\n                function O(t) {\n                    const e = [];\n                    let r = \"\",\n                        n = \"\",\n                        o = parseInt(t, 2);\n                    for (let t = 0; t < 5; t++) {\n                        const i = \"children/*[\" + M.get(t) + \"]\";\n                        if (1 & o) {\n                            const e = S.get(t % 5);\n                            (r = \"[t] \" + e + \"Verbose; [n] \" + i + \";\" + r),\n                                (n = \"[t] \" + e + \"Brief; [n] \" + i + \";\" + n);\n                        } else e.unshift(\"name(\" + i + ')=\"empty\"');\n                        o >>= 1;\n                    }\n                    return [e, r, n];\n                }\n                (e.generateTensorRules = function (t, e = !0) {\n                    const r = [\n                        \"11111\",\n                        \"11110\",\n                        \"11101\",\n                        \"11100\",\n                        \"10111\",\n                        \"10110\",\n                        \"10101\",\n                        \"10100\",\n                        \"01111\",\n                        \"01110\",\n                        \"01101\",\n                        \"01100\",\n                    ];\n                    for (let n, o = 0; (n = r[o]); o++) {\n                        let r = \"tensor\" + n,\n                            [o, i, s] = O(n);\n                        t.defineRule(r, \"default\", i, \"self::tensor\", ...o),\n                            e &&\n                                (t.defineRule(\n                                    r,\n                                    \"brief\",\n                                    s,\n                                    \"self::tensor\",\n                                    ...o\n                                ),\n                                t.defineRule(\n                                    r,\n                                    \"sbrief\",\n                                    s,\n                                    \"self::tensor\",\n                                    ...o\n                                ));\n                        const a = S.get(2);\n                        (i += \"; [t]\" + a + \"Verbose\"),\n                            (s += \"; [t]\" + a + \"Brief\"),\n                            (r += \"-baseline\");\n                        const l =\n                            \"((.//*[not(*)])[last()]/@id)!=(((.//ancestor::fraction|ancestor::root|ancestor::sqrt|ancestor::cell|ancestor::line|ancestor::stree)[1]//*[not(*)])[last()]/@id)\";\n                        t.defineRule(r, \"default\", i, \"self::tensor\", l, ...o),\n                            e &&\n                                (t.defineRule(\n                                    r,\n                                    \"brief\",\n                                    s,\n                                    \"self::tensor\",\n                                    l,\n                                    ...o\n                                ),\n                                t.defineRule(\n                                    r,\n                                    \"sbrief\",\n                                    s,\n                                    \"self::tensor\",\n                                    l,\n                                    ...o\n                                ));\n                    }\n                }),\n                    (e.smallRoot = function (t) {\n                        let e = Object.keys(s.LOCALE.MESSAGES.MSroots).length;\n                        if (!e) return [];\n                        if (\n                            (e++,\n                            !t.childNodes ||\n                                0 === t.childNodes.length ||\n                                !t.childNodes[0].childNodes)\n                        )\n                            return [];\n                        const r = t.childNodes[0].childNodes[0].textContent;\n                        if (!/^\\d+$/.test(r)) return [];\n                        const n = parseInt(r, 10);\n                        return n > 1 && n <= e ? [t] : [];\n                    });\n            },\n            6922: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.implicitIterator =\n                        e.relationIterator =\n                        e.propagateNumber =\n                        e.checkParent_ =\n                        e.NUMBER_INHIBITORS_ =\n                        e.NUMBER_PROPAGATORS_ =\n                        e.enlargeFence =\n                        e.indexRadical =\n                        e.closingRadical =\n                        e.openingRadical =\n                        e.radicalNestingDepth =\n                        e.nestedRadical =\n                        e.overBevelledFraction =\n                        e.overFraction =\n                        e.closingFraction =\n                        e.openingFraction =\n                            void 0);\n                const n = r(7052),\n                    o = r(5740),\n                    i = r(5274),\n                    s = r(2105),\n                    a = r(5897),\n                    l = r(7630),\n                    c = r(9265),\n                    u = r(4356),\n                    p = r(1378);\n                function h(t, e) {\n                    const r = f(t);\n                    return 1 === r\n                        ? e\n                        : new Array(r).join(u.LOCALE.MESSAGES.MS.NESTED) + e;\n                }\n                function f(t, e) {\n                    const r = e || 0;\n                    return t.parentNode\n                        ? f(\n                              t.parentNode,\n                              \"root\" === t.tagName || \"sqrt\" === t.tagName\n                                  ? r + 1\n                                  : r\n                          )\n                        : r;\n                }\n                function d(t) {\n                    const e = \"\\u2820\";\n                    if (1 === t.length) return e + t;\n                    const r = t.split(\"\");\n                    return r.every(function (t) {\n                        return \"\\u2833\" === t;\n                    })\n                        ? e + r.join(e)\n                        : t.slice(0, -1) + e + t.slice(-1);\n                }\n                function m(t, r) {\n                    const n = t.parent;\n                    if (!n) return !1;\n                    const o = n.type;\n                    return (\n                        -1 !== e.NUMBER_PROPAGATORS_.indexOf(o) ||\n                        (\"prefixop\" === o &&\n                            \"negative\" === n.role &&\n                            !r.script) ||\n                        (\"prefixop\" === o && \"geometry\" === n.role) ||\n                        !(\n                            \"punctuated\" !== o ||\n                            (r.enclosed && \"text\" !== n.role)\n                        )\n                    );\n                }\n                function y(t, r) {\n                    return t.childNodes.length\n                        ? (-1 !== e.NUMBER_INHIBITORS_.indexOf(t.type) &&\n                              (r.script = !0),\n                          \"fenced\" === t.type\n                              ? ((r.number = !1), (r.enclosed = !0), [\"\", r])\n                              : (m(t, r) &&\n                                    ((r.number = !0), (r.enclosed = !1)),\n                                [\"\", r]))\n                        : (m(t, r) &&\n                              ((r.number = !0),\n                              (r.script = !1),\n                              (r.enclosed = !1)),\n                          [\n                              r.number ? \"number\" : \"\",\n                              {\n                                  number: !1,\n                                  enclosed: r.enclosed,\n                                  script: r.script,\n                              },\n                          ]);\n                }\n                (e.openingFraction = function (t) {\n                    const e = p.fractionNestingDepth(t);\n                    return (\n                        new Array(e).join(\n                            u.LOCALE.MESSAGES.MS.FRACTION_REPEAT\n                        ) + u.LOCALE.MESSAGES.MS.FRACTION_START\n                    );\n                }),\n                    (e.closingFraction = function (t) {\n                        const e = p.fractionNestingDepth(t);\n                        return (\n                            new Array(e).join(\n                                u.LOCALE.MESSAGES.MS.FRACTION_REPEAT\n                            ) + u.LOCALE.MESSAGES.MS.FRACTION_END\n                        );\n                    }),\n                    (e.overFraction = function (t) {\n                        const e = p.fractionNestingDepth(t);\n                        return (\n                            new Array(e).join(\n                                u.LOCALE.MESSAGES.MS.FRACTION_REPEAT\n                            ) + u.LOCALE.MESSAGES.MS.FRACTION_OVER\n                        );\n                    }),\n                    (e.overBevelledFraction = function (t) {\n                        const e = p.fractionNestingDepth(t);\n                        return (\n                            new Array(e).join(\n                                u.LOCALE.MESSAGES.MS.FRACTION_REPEAT\n                            ) +\n                            \"\\u2838\" +\n                            u.LOCALE.MESSAGES.MS.FRACTION_OVER\n                        );\n                    }),\n                    (e.nestedRadical = h),\n                    (e.radicalNestingDepth = f),\n                    (e.openingRadical = function (t) {\n                        return h(t, u.LOCALE.MESSAGES.MS.STARTROOT);\n                    }),\n                    (e.closingRadical = function (t) {\n                        return h(t, u.LOCALE.MESSAGES.MS.ENDROOT);\n                    }),\n                    (e.indexRadical = function (t) {\n                        return h(t, u.LOCALE.MESSAGES.MS.ROOTINDEX);\n                    }),\n                    (e.enlargeFence = d),\n                    s.Grammar.getInstance().setCorrection(\"enlargeFence\", d),\n                    (e.NUMBER_PROPAGATORS_ = [\n                        \"multirel\",\n                        \"relseq\",\n                        \"appl\",\n                        \"row\",\n                        \"line\",\n                    ]),\n                    (e.NUMBER_INHIBITORS_ = [\n                        \"subscript\",\n                        \"superscript\",\n                        \"overscore\",\n                        \"underscore\",\n                    ]),\n                    (e.checkParent_ = m),\n                    (e.propagateNumber = y),\n                    (0, l.register)(\n                        new c.SemanticVisitor(\"nemeth\", \"number\", y, {\n                            number: !0,\n                        })\n                    ),\n                    (e.relationIterator = function (t, e) {\n                        const r = t.slice(0);\n                        let s,\n                            l = !0;\n                        return (\n                            (s =\n                                t.length > 0\n                                    ? i.evalXPath(\"../../content/*\", t[0])\n                                    : []),\n                            function () {\n                                const t = s.shift(),\n                                    i = r.shift(),\n                                    c = r[0],\n                                    h = e\n                                        ? [\n                                              n.AuditoryDescription.create(\n                                                  { text: e },\n                                                  { translate: !0 }\n                                              ),\n                                          ]\n                                        : [];\n                                if (!t) return h;\n                                const f = i\n                                        ? p.nestedSubSuper(i, \"\", {\n                                              sup: u.LOCALE.MESSAGES.MS.SUPER,\n                                              sub: u.LOCALE.MESSAGES.MS.SUB,\n                                          })\n                                        : \"\",\n                                    d =\n                                        (i && \"EMPTY\" !== o.tagName(i)) ||\n                                        (l &&\n                                            t.parentNode.parentNode &&\n                                            t.parentNode.parentNode\n                                                .previousSibling)\n                                            ? [\n                                                  n.AuditoryDescription.create(\n                                                      { text: \"\\u2800\" + f },\n                                                      {}\n                                                  ),\n                                              ]\n                                            : [],\n                                    m =\n                                        (c && \"EMPTY\" !== o.tagName(c)) ||\n                                        (!s.length &&\n                                            t.parentNode.parentNode &&\n                                            t.parentNode.parentNode.nextSibling)\n                                            ? [\n                                                  n.AuditoryDescription.create(\n                                                      { text: \"\\u2800\" },\n                                                      {}\n                                                  ),\n                                              ]\n                                            : [],\n                                    y = a.default.evaluateNode(t);\n                                return (l = !1), h.concat(d, y, m);\n                            }\n                        );\n                    }),\n                    (e.implicitIterator = function (t, e) {\n                        const r = t.slice(0);\n                        let s;\n                        return (\n                            (s =\n                                t.length > 0\n                                    ? i.evalXPath(\"../../content/*\", t[0])\n                                    : []),\n                            function () {\n                                const t = r.shift(),\n                                    i = r[0],\n                                    a = s.shift(),\n                                    l = e\n                                        ? [\n                                              n.AuditoryDescription.create(\n                                                  { text: e },\n                                                  { translate: !0 }\n                                              ),\n                                          ]\n                                        : [];\n                                if (!a) return l;\n                                const c = t && \"NUMBER\" === o.tagName(t),\n                                    u = i && \"NUMBER\" === o.tagName(i);\n                                return l.concat(\n                                    c && u && \"space\" === a.getAttribute(\"role\")\n                                        ? [\n                                              n.AuditoryDescription.create(\n                                                  { text: \"\\u2800\" },\n                                                  {}\n                                              ),\n                                          ]\n                                        : []\n                                );\n                            }\n                        );\n                    });\n            },\n            8437: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.ordinalPosition =\n                        e.vulgarFraction =\n                        e.wordCounter =\n                        e.ordinalCounter =\n                            void 0);\n                const n = r(9536),\n                    o = r(5740),\n                    i = r(4356),\n                    s = r(4977);\n                (e.ordinalCounter = function (t, e) {\n                    let r = 0;\n                    return function () {\n                        return i.LOCALE.NUMBERS.numericOrdinal(++r) + \" \" + e;\n                    };\n                }),\n                    (e.wordCounter = function (t, e) {\n                        let r = 0;\n                        return function () {\n                            return (\n                                i.LOCALE.NUMBERS.numberToOrdinal(++r, !1) +\n                                \" \" +\n                                e\n                            );\n                        };\n                    }),\n                    (e.vulgarFraction = function (t) {\n                        const e = (0, s.convertVulgarFraction)(\n                            t,\n                            i.LOCALE.MESSAGES.MS.FRAC_OVER\n                        );\n                        return e.convertible && e.enumerator && e.denominator\n                            ? [\n                                  new n.Span(\n                                      i.LOCALE.NUMBERS.numberToWords(\n                                          e.enumerator\n                                      ),\n                                      {\n                                          extid: t.childNodes[0].childNodes[0].getAttribute(\n                                              \"extid\"\n                                          ),\n                                          separator: \"\",\n                                      }\n                                  ),\n                                  new n.Span(i.LOCALE.NUMBERS.vulgarSep, {\n                                      separator: \"\",\n                                  }),\n                                  new n.Span(\n                                      i.LOCALE.NUMBERS.numberToOrdinal(\n                                          e.denominator,\n                                          1 !== e.enumerator\n                                      ),\n                                      {\n                                          extid: t.childNodes[0].childNodes[1].getAttribute(\n                                              \"extid\"\n                                          ),\n                                      }\n                                  ),\n                              ]\n                            : [\n                                  new n.Span(e.content || \"\", {\n                                      extid: t.getAttribute(\"extid\"),\n                                  }),\n                              ];\n                    }),\n                    (e.ordinalPosition = function (t) {\n                        const e = o.toArray(t.parentNode.childNodes);\n                        return i.LOCALE.NUMBERS.numericOrdinal(\n                            e.indexOf(t) + 1\n                        ).toString();\n                    });\n            },\n            9284: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.BrailleRules = e.OtherRules = e.PrefixRules = void 0);\n                const n = r(1676),\n                    o = r(365),\n                    i = r(1378),\n                    s = r(6922),\n                    a = r(8437),\n                    l = r(7283);\n                (e.PrefixRules = function () {\n                    l.addStore(\"en.prefix.default\", \"\", {\n                        CSFordinalPosition: a.ordinalPosition,\n                    });\n                }),\n                    (e.OtherRules = function () {\n                        l.addStore(\"en.speech.chromevox\", \"\", {\n                            CTFnodeCounter: o.nodeCounter,\n                            CTFcontentIterator: o.contentIterator,\n                        }),\n                            l.addStore(\n                                \"en.speech.emacspeak\",\n                                \"en.speech.chromevox\",\n                                {\n                                    CQFvulgarFractionSmall:\n                                        i.isSmallVulgarFraction,\n                                    CSFvulgarFraction: a.vulgarFraction,\n                                }\n                            );\n                    }),\n                    (e.BrailleRules = function () {\n                        l.addStore(\n                            \"nemeth.braille.default\",\n                            n.DynamicCstr.BASE_LOCALE + \".speech.mathspeak\",\n                            {\n                                CSFopenFraction: s.openingFraction,\n                                CSFcloseFraction: s.closingFraction,\n                                CSFoverFraction: s.overFraction,\n                                CSFoverBevFraction: s.overBevelledFraction,\n                                CSFopenRadical: s.openingRadical,\n                                CSFcloseRadical: s.closingRadical,\n                                CSFindexRadical: s.indexRadical,\n                                CSFsubscript: i.subscriptVerbose,\n                                CSFsuperscript: i.superscriptVerbose,\n                                CSFbaseline: i.baselineVerbose,\n                                CGFtensorRules: (t) =>\n                                    i.generateTensorRules(t, !1),\n                                CTFrelationIterator: s.relationIterator,\n                                CTFimplicitIterator: s.implicitIterator,\n                            }\n                        );\n                    });\n            },\n            7599: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.init = e.INIT_ = void 0);\n                const n = r(5425),\n                    o = r(9577),\n                    i = r(9284);\n                (e.INIT_ = !1),\n                    (e.init = function () {\n                        e.INIT_ ||\n                            ((0, o.MathspeakRules)(),\n                            (0, n.ClearspeakRules)(),\n                            (0, i.PrefixRules)(),\n                            (0, i.OtherRules)(),\n                            (0, i.BrailleRules)(),\n                            (e.INIT_ = !0));\n                    });\n            },\n            7283: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.getStore = e.addStore = e.funcStore = void 0);\n                const n = r(1676);\n                (e.funcStore = new Map()),\n                    (e.addStore = function (t, r, n) {\n                        const o = {};\n                        if (r) {\n                            const t = e.funcStore.get(r) || {};\n                            Object.assign(o, t);\n                        }\n                        e.funcStore.set(t, Object.assign(o, n));\n                    }),\n                    (e.getStore = function (t, r, o) {\n                        return (\n                            e.funcStore.get([t, r, o].join(\".\")) ||\n                            e.funcStore.get(\n                                [\n                                    n.DynamicCstr.DEFAULT_VALUES[n.Axis.LOCALE],\n                                    r,\n                                    o,\n                                ].join(\".\")\n                            ) ||\n                            e.funcStore.get(\n                                [n.DynamicCstr.BASE_LOCALE, r, o].join(\".\")\n                            ) ||\n                            {}\n                        );\n                    });\n            },\n            7598: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.oneLeft =\n                        e.leftMostUnit =\n                        e.rightMostUnit =\n                        e.unitMultipliers =\n                            void 0);\n                const n = r(7052),\n                    o = r(5274),\n                    i = r(4356);\n                e.unitMultipliers = function (t, e) {\n                    const r = t;\n                    let o = 0;\n                    return function () {\n                        const t = n.AuditoryDescription.create(\n                            {\n                                text:\n                                    a(r[o]) && l(r[o + 1])\n                                        ? i.LOCALE.MESSAGES.unitTimes\n                                        : \"\",\n                            },\n                            {}\n                        );\n                        return o++, [t];\n                    };\n                };\n                const s = [\n                    \"superscript\",\n                    \"subscript\",\n                    \"overscore\",\n                    \"underscore\",\n                ];\n                function a(t) {\n                    for (; t; ) {\n                        if (\"unit\" === t.getAttribute(\"role\")) return !0;\n                        const e = t.tagName,\n                            r = o.evalXPath(\"children/*\", t);\n                        t = -1 !== s.indexOf(e) ? r[0] : r[r.length - 1];\n                    }\n                    return !1;\n                }\n                function l(t) {\n                    for (; t; ) {\n                        if (\"unit\" === t.getAttribute(\"role\")) return !0;\n                        t = o.evalXPath(\"children/*\", t)[0];\n                    }\n                    return !1;\n                }\n                (e.rightMostUnit = a),\n                    (e.leftMostUnit = l),\n                    (e.oneLeft = function (t) {\n                        for (; t; ) {\n                            if (\"number\" === t.tagName && \"1\" === t.textContent)\n                                return [t];\n                            if (\n                                \"infixop\" !== t.tagName ||\n                                (\"multiplication\" !== t.getAttribute(\"role\") &&\n                                    \"implicit\" !== t.getAttribute(\"role\"))\n                            )\n                                return [];\n                            t = o.evalXPath(\"children/*\", t)[0];\n                        }\n                        return [];\n                    });\n            },\n            3284: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.AbstractWalker = void 0);\n                const n = r(7052),\n                    o = r(8290),\n                    i = r(5740),\n                    s = r(4440),\n                    a = r(6828),\n                    l = r(8496),\n                    c = r(2298),\n                    u = r(4356),\n                    p = r(2105),\n                    h = r(5656),\n                    f = r(9552),\n                    d = r(9543),\n                    m = r(8504),\n                    y = r(7730),\n                    g = r(1214),\n                    b = r(179),\n                    v = r(1204),\n                    _ = r(5274);\n                class S {\n                    constructor(t, e, r, n) {\n                        (this.node = t),\n                            (this.generator = e),\n                            (this.highlighter = r),\n                            (this.modifier = !1),\n                            (this.keyMapping = new Map([\n                                [l.KeyCode.UP, this.up.bind(this)],\n                                [l.KeyCode.DOWN, this.down.bind(this)],\n                                [l.KeyCode.RIGHT, this.right.bind(this)],\n                                [l.KeyCode.LEFT, this.left.bind(this)],\n                                [l.KeyCode.TAB, this.repeat.bind(this)],\n                                [l.KeyCode.DASH, this.expand.bind(this)],\n                                [l.KeyCode.SPACE, this.depth.bind(this)],\n                                [l.KeyCode.HOME, this.home.bind(this)],\n                                [l.KeyCode.X, this.summary.bind(this)],\n                                [l.KeyCode.Z, this.detail.bind(this)],\n                                [l.KeyCode.V, this.virtualize.bind(this)],\n                                [l.KeyCode.P, this.previous.bind(this)],\n                                [l.KeyCode.U, this.undo.bind(this)],\n                                [l.KeyCode.LESS, this.previousRules.bind(this)],\n                                [l.KeyCode.GREATER, this.nextRules.bind(this)],\n                            ])),\n                            (this.cursors = []),\n                            (this.xml_ = null),\n                            (this.rebuilt_ = null),\n                            (this.focus_ = null),\n                            (this.active_ = !1),\n                            this.node.id\n                                ? (this.id = this.node.id)\n                                : this.node.hasAttribute(S.SRE_ID_ATTR)\n                                  ? (this.id = this.node.getAttribute(\n                                        S.SRE_ID_ATTR\n                                    ))\n                                  : (this.node.setAttribute(\n                                        S.SRE_ID_ATTR,\n                                        S.ID_COUNTER.toString()\n                                    ),\n                                    (this.id = S.ID_COUNTER++)),\n                            (this.rootNode = v.getSemanticRoot(t)),\n                            (this.rootId = this.rootNode.getAttribute(\n                                c.Attribute.ID\n                            )),\n                            (this.xmlString_ = n),\n                            (this.moved = b.WalkerMoves.ENTER);\n                    }\n                    getXml() {\n                        return (\n                            this.xml_ ||\n                                (this.xml_ = i.parseInput(this.xmlString_)),\n                            this.xml_\n                        );\n                    }\n                    getRebuilt() {\n                        return (\n                            this.rebuilt_ || this.rebuildStree(), this.rebuilt_\n                        );\n                    }\n                    isActive() {\n                        return this.active_;\n                    }\n                    activate() {\n                        this.isActive() ||\n                            (this.generator.start(), this.toggleActive_());\n                    }\n                    deactivate() {\n                        this.isActive() &&\n                            (b.WalkerState.setState(this.id, this.primaryId()),\n                            this.generator.end(),\n                            this.toggleActive_());\n                    }\n                    getFocus(t = !1) {\n                        return (\n                            this.focus_ ||\n                                (this.focus_ = this.singletonFocus(\n                                    this.rootId\n                                )),\n                            t && this.updateFocus(),\n                            this.focus_\n                        );\n                    }\n                    setFocus(t) {\n                        this.focus_ = t;\n                    }\n                    getDepth() {\n                        return this.levels.depth() - 1;\n                    }\n                    isSpeech() {\n                        return this.generator.modality === c.Attribute.SPEECH;\n                    }\n                    focusDomNodes() {\n                        return this.getFocus().getDomNodes();\n                    }\n                    focusSemanticNodes() {\n                        return this.getFocus().getSemanticNodes();\n                    }\n                    speech() {\n                        const t = this.focusDomNodes();\n                        if (!t.length) return \"\";\n                        const e = this.specialMove();\n                        if (null !== e) return e;\n                        switch (this.moved) {\n                            case b.WalkerMoves.DEPTH:\n                                return this.depth_();\n                            case b.WalkerMoves.SUMMARY:\n                                return this.summary_();\n                            case b.WalkerMoves.DETAIL:\n                                return this.detail_();\n                            default: {\n                                const e = [],\n                                    r = this.focusSemanticNodes();\n                                for (let n = 0, o = t.length; n < o; n++) {\n                                    const o = t[n],\n                                        i = r[n];\n                                    e.push(\n                                        o\n                                            ? this.generator.getSpeech(\n                                                  o,\n                                                  this.getXml()\n                                              )\n                                            : d.recomputeMarkup(i)\n                                    );\n                                }\n                                return this.mergePrefix_(e);\n                            }\n                        }\n                    }\n                    move(t) {\n                        const e = this.keyMapping.get(t);\n                        if (!e) return null;\n                        const r = e();\n                        return (\n                            !(!r || r === this.getFocus()) &&\n                            (this.setFocus(r),\n                            this.moved === b.WalkerMoves.HOME &&\n                                (this.levels = this.initLevels()),\n                            !0)\n                        );\n                    }\n                    up() {\n                        return (this.moved = b.WalkerMoves.UP), this.getFocus();\n                    }\n                    down() {\n                        return (\n                            (this.moved = b.WalkerMoves.DOWN), this.getFocus()\n                        );\n                    }\n                    left() {\n                        return (\n                            (this.moved = b.WalkerMoves.LEFT), this.getFocus()\n                        );\n                    }\n                    right() {\n                        return (\n                            (this.moved = b.WalkerMoves.RIGHT), this.getFocus()\n                        );\n                    }\n                    repeat() {\n                        return (\n                            (this.moved = b.WalkerMoves.REPEAT),\n                            this.getFocus().clone()\n                        );\n                    }\n                    depth() {\n                        return (\n                            (this.moved = this.isSpeech()\n                                ? b.WalkerMoves.DEPTH\n                                : b.WalkerMoves.REPEAT),\n                            this.getFocus().clone()\n                        );\n                    }\n                    home() {\n                        this.moved = b.WalkerMoves.HOME;\n                        return this.singletonFocus(this.rootId);\n                    }\n                    getBySemanticId(t) {\n                        return v.getBySemanticId(this.node, t);\n                    }\n                    primaryId() {\n                        return this.getFocus()\n                            .getSemanticPrimary()\n                            .id.toString();\n                    }\n                    expand() {\n                        const t = this.getFocus().getDomPrimary(),\n                            e = this.actionable_(t);\n                        return e\n                            ? ((this.moved = b.WalkerMoves.EXPAND),\n                              e.dispatchEvent(new Event(\"click\")),\n                              this.getFocus().clone())\n                            : this.getFocus();\n                    }\n                    expandable(t) {\n                        return (\n                            !!this.actionable_(t) && 0 === t.childNodes.length\n                        );\n                    }\n                    collapsible(t) {\n                        return !!this.actionable_(t) && t.childNodes.length > 0;\n                    }\n                    restoreState() {\n                        if (!this.highlighter) return;\n                        const t = b.WalkerState.getState(this.id);\n                        if (!t) return;\n                        let e = this.getRebuilt().nodeDict[t];\n                        const r = [];\n                        for (; e; ) r.push(e.id), (e = e.parent);\n                        for (r.pop(); r.length > 0; ) {\n                            this.down();\n                            const t = r.pop(),\n                                e = this.findFocusOnLevel(t);\n                            if (!e) break;\n                            this.setFocus(e);\n                        }\n                        this.moved = b.WalkerMoves.ENTER;\n                    }\n                    updateFocus() {\n                        this.setFocus(\n                            y.Focus.factory(\n                                this.getFocus()\n                                    .getSemanticPrimary()\n                                    .id.toString(),\n                                this.getFocus()\n                                    .getSemanticNodes()\n                                    .map((t) => t.id.toString()),\n                                this.getRebuilt(),\n                                this.node\n                            )\n                        );\n                    }\n                    rebuildStree() {\n                        (this.rebuilt_ = new g.RebuildStree(this.getXml())),\n                            (this.rootId =\n                                this.rebuilt_.stree.root.id.toString()),\n                            this.generator.setRebuilt(this.rebuilt_),\n                            (this.skeleton = h.SemanticSkeleton.fromTree(\n                                this.rebuilt_.stree\n                            )),\n                            this.skeleton.populate(),\n                            (this.focus_ = this.singletonFocus(this.rootId)),\n                            (this.levels = this.initLevels()),\n                            d.connectMactions(\n                                this.node,\n                                this.getXml(),\n                                this.rebuilt_.xml\n                            );\n                    }\n                    previousLevel() {\n                        const t = this.getFocus().getDomPrimary();\n                        return t\n                            ? v.getAttribute(t, c.Attribute.PARENT)\n                            : this.getFocus()\n                                  .getSemanticPrimary()\n                                  .parent.id.toString();\n                    }\n                    nextLevel() {\n                        const t = this.getFocus().getDomPrimary();\n                        let e, r;\n                        if (t) {\n                            (e = v.splitAttribute(\n                                v.getAttribute(t, c.Attribute.CHILDREN)\n                            )),\n                                (r = v.splitAttribute(\n                                    v.getAttribute(t, c.Attribute.CONTENT)\n                                ));\n                            const n = v.getAttribute(t, c.Attribute.TYPE),\n                                o = v.getAttribute(t, c.Attribute.ROLE);\n                            return this.combineContentChildren(n, o, r, e);\n                        }\n                        const n = (t) => t.id.toString(),\n                            o = this.getRebuilt().nodeDict[this.primaryId()];\n                        return (\n                            (e = o.childNodes.map(n)),\n                            (r = o.contentNodes.map(n)),\n                            0 === e.length\n                                ? []\n                                : this.combineContentChildren(\n                                      o.type,\n                                      o.role,\n                                      r,\n                                      e\n                                  )\n                        );\n                    }\n                    singletonFocus(t) {\n                        this.getRebuilt();\n                        const e = this.retrieveVisuals(t);\n                        return this.focusFromId(t, e);\n                    }\n                    retrieveVisuals(t) {\n                        if (!this.skeleton) return [t];\n                        const e = parseInt(t, 10),\n                            r = this.skeleton.subtreeNodes(e);\n                        if (!r.length) return [t];\n                        r.unshift(e);\n                        const n = {},\n                            o = [];\n                        _.updateEvaluator(this.getXml());\n                        for (const t of r)\n                            n[t] ||\n                                (o.push(t.toString()),\n                                (n[t] = !0),\n                                this.subtreeIds(t, n));\n                        return o;\n                    }\n                    subtreeIds(t, e) {\n                        const r = _.evalXPath(\n                            `//*[@data-semantic-id=\"${t}\"]`,\n                            this.getXml()\n                        );\n                        _.evalXPath(\"*//@data-semantic-id\", r[0]).forEach(\n                            (t) => (e[parseInt(t.textContent, 10)] = !0)\n                        );\n                    }\n                    focusFromId(t, e) {\n                        return y.Focus.factory(\n                            t,\n                            e,\n                            this.getRebuilt(),\n                            this.node\n                        );\n                    }\n                    summary() {\n                        return (\n                            (this.moved = this.isSpeech()\n                                ? b.WalkerMoves.SUMMARY\n                                : b.WalkerMoves.REPEAT),\n                            this.getFocus().clone()\n                        );\n                    }\n                    detail() {\n                        return (\n                            (this.moved = this.isSpeech()\n                                ? b.WalkerMoves.DETAIL\n                                : b.WalkerMoves.REPEAT),\n                            this.getFocus().clone()\n                        );\n                    }\n                    specialMove() {\n                        return null;\n                    }\n                    virtualize(t) {\n                        return (\n                            this.cursors.push({\n                                focus: this.getFocus(),\n                                levels: this.levels,\n                                undo: t || !this.cursors.length,\n                            }),\n                            (this.levels = this.levels.clone()),\n                            this.getFocus().clone()\n                        );\n                    }\n                    previous() {\n                        const t = this.cursors.pop();\n                        return t\n                            ? ((this.levels = t.levels), t.focus)\n                            : this.getFocus();\n                    }\n                    undo() {\n                        let t;\n                        do {\n                            t = this.cursors.pop();\n                        } while (t && !t.undo);\n                        return t\n                            ? ((this.levels = t.levels), t.focus)\n                            : this.getFocus();\n                    }\n                    update(t) {\n                        this.generator.setOptions(t),\n                            (0, a.setup)(t).then(() =>\n                                f\n                                    .generator(\"Tree\")\n                                    .getSpeech(this.node, this.getXml())\n                            );\n                    }\n                    nextRules() {\n                        const t = this.generator.getOptions();\n                        return \"speech\" !== t.modality\n                            ? this.getFocus()\n                            : ((s.DOMAIN_TO_STYLES[t.domain] = t.style),\n                              (t.domain =\n                                  \"mathspeak\" === t.domain\n                                      ? \"clearspeak\"\n                                      : \"mathspeak\"),\n                              (t.style = s.DOMAIN_TO_STYLES[t.domain]),\n                              this.update(t),\n                              (this.moved = b.WalkerMoves.REPEAT),\n                              this.getFocus().clone());\n                    }\n                    nextStyle(t, e) {\n                        if (\"mathspeak\" === t) {\n                            const t = [\"default\", \"brief\", \"sbrief\"],\n                                r = t.indexOf(e);\n                            return -1 === r\n                                ? e\n                                : r >= t.length - 1\n                                  ? t[0]\n                                  : t[r + 1];\n                        }\n                        if (\"clearspeak\" === t) {\n                            const t =\n                                m.ClearspeakPreferences.getLocalePreferences()\n                                    .en;\n                            if (!t) return \"default\";\n                            const r =\n                                    m.ClearspeakPreferences.relevantPreferences(\n                                        this.getFocus().getSemanticPrimary()\n                                    ),\n                                n = m.ClearspeakPreferences.findPreference(\n                                    e,\n                                    r\n                                ),\n                                o = t[r].map(function (t) {\n                                    return t.split(\"_\")[1];\n                                }),\n                                i = o.indexOf(n);\n                            if (-1 === i) return e;\n                            const s = i >= o.length - 1 ? o[0] : o[i + 1];\n                            return m.ClearspeakPreferences.addPreference(\n                                e,\n                                r,\n                                s\n                            );\n                        }\n                        return e;\n                    }\n                    previousRules() {\n                        const t = this.generator.getOptions();\n                        return \"speech\" !== t.modality\n                            ? this.getFocus()\n                            : ((t.style = this.nextStyle(t.domain, t.style)),\n                              this.update(t),\n                              (this.moved = b.WalkerMoves.REPEAT),\n                              this.getFocus().clone());\n                    }\n                    refocus() {\n                        let t,\n                            e = this.getFocus();\n                        for (; !e.getNodes().length; ) {\n                            t = this.levels.peek();\n                            const r = this.up();\n                            if (!r) break;\n                            this.setFocus(r), (e = this.getFocus(!0));\n                        }\n                        this.levels.push(t), this.setFocus(e);\n                    }\n                    toggleActive_() {\n                        this.active_ = !this.active_;\n                    }\n                    mergePrefix_(t, e = []) {\n                        const r = this.isSpeech() ? this.prefix_() : \"\";\n                        r && t.unshift(r);\n                        const n = this.isSpeech() ? this.postfix_() : \"\";\n                        return n && t.push(n), o.finalize(o.merge(e.concat(t)));\n                    }\n                    prefix_() {\n                        const t = this.getFocus().getDomNodes(),\n                            e = this.getFocus().getSemanticNodes();\n                        return t[0]\n                            ? v.getAttribute(t[0], c.Attribute.PREFIX)\n                            : d.retrievePrefix(e[0]);\n                    }\n                    postfix_() {\n                        const t = this.getFocus().getDomNodes();\n                        return t[0]\n                            ? v.getAttribute(t[0], c.Attribute.POSTFIX)\n                            : \"\";\n                    }\n                    depth_() {\n                        const t = p.Grammar.getInstance().getParameter(\"depth\");\n                        p.Grammar.getInstance().setParameter(\"depth\", !0);\n                        const e = this.getFocus().getDomPrimary(),\n                            r = this.expandable(e)\n                                ? u.LOCALE.MESSAGES.navigate.EXPANDABLE\n                                : this.collapsible(e)\n                                  ? u.LOCALE.MESSAGES.navigate.COLLAPSIBLE\n                                  : \"\",\n                            i =\n                                u.LOCALE.MESSAGES.navigate.LEVEL +\n                                \" \" +\n                                this.getDepth(),\n                            s = this.getFocus().getSemanticNodes(),\n                            a = d.retrievePrefix(s[0]),\n                            l = [\n                                new n.AuditoryDescription({\n                                    text: i,\n                                    personality: {},\n                                }),\n                                new n.AuditoryDescription({\n                                    text: a,\n                                    personality: {},\n                                }),\n                                new n.AuditoryDescription({\n                                    text: r,\n                                    personality: {},\n                                }),\n                            ];\n                        return (\n                            p.Grammar.getInstance().setParameter(\"depth\", t),\n                            o.finalize(o.markup(l))\n                        );\n                    }\n                    actionable_(t) {\n                        const e = null == t ? void 0 : t.parentNode;\n                        return e && this.highlighter.isMactionNode(e)\n                            ? e\n                            : null;\n                    }\n                    summary_() {\n                        const t = this.getFocus()\n                                .getSemanticPrimary()\n                                .id.toString(),\n                            e =\n                                this.getRebuilt().xml.getAttribute(\"id\") === t\n                                    ? this.getRebuilt().xml\n                                    : i.querySelectorAllByAttrValue(\n                                          this.getRebuilt().xml,\n                                          \"id\",\n                                          t\n                                      )[0],\n                            r = d.retrieveSummary(e);\n                        return this.mergePrefix_([r]);\n                    }\n                    detail_() {\n                        const t = this.getFocus()\n                                .getSemanticPrimary()\n                                .id.toString(),\n                            e =\n                                this.getRebuilt().xml.getAttribute(\"id\") === t\n                                    ? this.getRebuilt().xml\n                                    : i.querySelectorAllByAttrValue(\n                                          this.getRebuilt().xml,\n                                          \"id\",\n                                          t\n                                      )[0],\n                            r = e.getAttribute(\"alternative\");\n                        e.removeAttribute(\"alternative\");\n                        const n = d.computeMarkup(e),\n                            o = this.mergePrefix_([n]);\n                        return e.setAttribute(\"alternative\", r), o;\n                    }\n                }\n                (e.AbstractWalker = S),\n                    (S.ID_COUNTER = 0),\n                    (S.SRE_ID_ATTR = \"sre-explorer-id\");\n            },\n            162: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.DummyWalker = void 0);\n                const n = r(3284);\n                class o extends n.AbstractWalker {\n                    up() {\n                        return null;\n                    }\n                    down() {\n                        return null;\n                    }\n                    left() {\n                        return null;\n                    }\n                    right() {\n                        return null;\n                    }\n                    repeat() {\n                        return null;\n                    }\n                    depth() {\n                        return null;\n                    }\n                    home() {\n                        return null;\n                    }\n                    getDepth() {\n                        return 0;\n                    }\n                    initLevels() {\n                        return null;\n                    }\n                    combineContentChildren(t, e, r, n) {\n                        return [];\n                    }\n                    findFocusOnLevel(t) {\n                        return null;\n                    }\n                }\n                e.DummyWalker = o;\n            },\n            7730: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Focus = void 0);\n                const n = r(1204);\n                class o {\n                    constructor(t, e) {\n                        (this.nodes = t),\n                            (this.primary = e),\n                            (this.domNodes = []),\n                            (this.domPrimary_ = null),\n                            (this.allNodes = []);\n                    }\n                    static factory(t, e, r, i) {\n                        const s = (t) => n.getBySemanticId(i, t),\n                            a = r.nodeDict,\n                            l = s(t),\n                            c = e.map(s),\n                            u = e.map(function (t) {\n                                return a[t];\n                            }),\n                            p = new o(u, a[t]);\n                        return (\n                            (p.domNodes = c),\n                            (p.domPrimary_ = l),\n                            (p.allNodes = o.generateAllVisibleNodes_(\n                                e,\n                                c,\n                                a,\n                                i\n                            )),\n                            p\n                        );\n                    }\n                    static generateAllVisibleNodes_(t, e, r, i) {\n                        const s = (t) => n.getBySemanticId(i, t);\n                        let a = [];\n                        for (let n = 0, l = t.length; n < l; n++) {\n                            if (e[n]) {\n                                a.push(e[n]);\n                                continue;\n                            }\n                            const l = r[t[n]];\n                            if (!l) continue;\n                            const c = l.childNodes.map(function (t) {\n                                    return t.id.toString();\n                                }),\n                                u = c.map(s);\n                            a = a.concat(\n                                o.generateAllVisibleNodes_(c, u, r, i)\n                            );\n                        }\n                        return a;\n                    }\n                    getSemanticPrimary() {\n                        return this.primary;\n                    }\n                    getSemanticNodes() {\n                        return this.nodes;\n                    }\n                    getNodes() {\n                        return this.allNodes;\n                    }\n                    getDomNodes() {\n                        return this.domNodes;\n                    }\n                    getDomPrimary() {\n                        return this.domPrimary_;\n                    }\n                    toString() {\n                        return (\n                            \"Primary:\" +\n                            this.domPrimary_ +\n                            \" Nodes:\" +\n                            this.domNodes\n                        );\n                    }\n                    clone() {\n                        const t = new o(this.nodes, this.primary);\n                        return (\n                            (t.domNodes = this.domNodes),\n                            (t.domPrimary_ = this.domPrimary_),\n                            (t.allNodes = this.allNodes),\n                            t\n                        );\n                    }\n                }\n                e.Focus = o;\n            },\n            9797: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.Levels = void 0);\n                class r {\n                    constructor() {\n                        this.level_ = [];\n                    }\n                    push(t) {\n                        this.level_.push(t);\n                    }\n                    pop() {\n                        return this.level_.pop();\n                    }\n                    peek() {\n                        return this.level_[this.level_.length - 1] || null;\n                    }\n                    indexOf(t) {\n                        const e = this.peek();\n                        return e ? e.indexOf(t) : null;\n                    }\n                    find(t) {\n                        const e = this.peek();\n                        if (!e) return null;\n                        for (let r = 0, n = e.length; r < n; r++)\n                            if (t(e[r])) return e[r];\n                        return null;\n                    }\n                    get(t) {\n                        const e = this.peek();\n                        return !e || t < 0 || t >= e.length ? null : e[t];\n                    }\n                    depth() {\n                        return this.level_.length;\n                    }\n                    clone() {\n                        const t = new r();\n                        return (t.level_ = this.level_.slice(0)), t;\n                    }\n                    toString() {\n                        let t = \"\";\n                        for (let e, r = 0; (e = this.level_[r]); r++)\n                            t +=\n                                \"\\n\" +\n                                e.map(function (t) {\n                                    return t.toString();\n                                });\n                        return t;\n                    }\n                }\n                e.Levels = r;\n            },\n            1214: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.RebuildStree = void 0);\n                const n = r(5740),\n                    o = r(2298),\n                    i = r(3588),\n                    s = r(6537),\n                    a = r(3308),\n                    l = r(5656),\n                    c = r(7075),\n                    u = r(4795),\n                    p = r(1204);\n                class h {\n                    constructor(t) {\n                        (this.mathml = t),\n                            (this.factory = new s.SemanticNodeFactory()),\n                            (this.nodeDict = {}),\n                            (this.mmlRoot = p.getSemanticRoot(t)),\n                            (this.streeRoot = this.assembleTree(this.mmlRoot)),\n                            (this.stree = c.SemanticTree.fromNode(\n                                this.streeRoot,\n                                this.mathml\n                            )),\n                            (this.xml = this.stree.xml()),\n                            a.default\n                                .getInstance()\n                                .setNodeFactory(this.factory);\n                    }\n                    static addAttributes(t, e, r) {\n                        r &&\n                            1 === e.childNodes.length &&\n                            e.childNodes[0].nodeType !== n.NodeType.TEXT_NODE &&\n                            u.addAttributes(t, e.childNodes[0]),\n                            u.addAttributes(t, e);\n                    }\n                    static textContent(t, e, r) {\n                        if (!r && e.textContent)\n                            return void (t.textContent = e.textContent);\n                        const n = p.splitAttribute(\n                            p.getAttribute(e, o.Attribute.OPERATOR)\n                        );\n                        n.length > 1 && (t.textContent = n[1]);\n                    }\n                    static isPunctuated(t) {\n                        return (\n                            !l.SemanticSkeleton.simpleCollapseStructure(t) &&\n                            t[1] &&\n                            l.SemanticSkeleton.contentCollapseStructure(t[1])\n                        );\n                    }\n                    getTree() {\n                        return this.stree;\n                    }\n                    assembleTree(t) {\n                        const e = this.makeNode(t),\n                            r = p.splitAttribute(\n                                p.getAttribute(t, o.Attribute.CHILDREN)\n                            ),\n                            n = p.splitAttribute(\n                                p.getAttribute(t, o.Attribute.CONTENT)\n                            );\n                        if (\n                            (h.addAttributes(e, t, !(r.length || n.length)),\n                            0 === n.length && 0 === r.length)\n                        )\n                            return h.textContent(e, t), e;\n                        if (n.length > 0) {\n                            const t = p.getBySemanticId(this.mathml, n[0]);\n                            t && h.textContent(e, t, !0);\n                        }\n                        (e.contentNodes = n.map((t) => this.setParent(t, e))),\n                            (e.childNodes = r.map((t) => this.setParent(t, e)));\n                        const i = p.getAttribute(t, o.Attribute.COLLAPSED);\n                        return i ? this.postProcess(e, i) : e;\n                    }\n                    makeNode(t) {\n                        const e = p.getAttribute(t, o.Attribute.TYPE),\n                            r = p.getAttribute(t, o.Attribute.ROLE),\n                            n = p.getAttribute(t, o.Attribute.FONT),\n                            i = p.getAttribute(t, o.Attribute.ANNOTATION) || \"\",\n                            s = p.getAttribute(t, o.Attribute.ID),\n                            a = p.getAttribute(t, o.Attribute.EMBELLISHED),\n                            l = p.getAttribute(t, o.Attribute.FENCEPOINTER),\n                            c = this.createNode(parseInt(s, 10));\n                        return (\n                            (c.type = e),\n                            (c.role = r),\n                            (c.font = n || \"unknown\"),\n                            c.parseAnnotation(i),\n                            l && (c.fencePointer = l),\n                            a && (c.embellished = a),\n                            c\n                        );\n                    }\n                    makePunctuation(t) {\n                        const e = this.createNode(t);\n                        return (\n                            e.updateContent((0, i.invisibleComma)()),\n                            (e.role = \"dummy\"),\n                            e\n                        );\n                    }\n                    makePunctuated(t, e, r) {\n                        const n = this.createNode(e[0]);\n                        (n.type = \"punctuated\"),\n                            (n.embellished = t.embellished),\n                            (n.fencePointer = t.fencePointer),\n                            (n.role = r);\n                        const o = e.splice(1, 1)[0].slice(1);\n                        (n.contentNodes = o.map(\n                            this.makePunctuation.bind(this)\n                        )),\n                            this.collapsedChildren_(e);\n                    }\n                    makeEmpty(t, e, r) {\n                        const n = this.createNode(e);\n                        (n.type = \"empty\"),\n                            (n.embellished = t.embellished),\n                            (n.fencePointer = t.fencePointer),\n                            (n.role = r);\n                    }\n                    makeIndex(t, e, r) {\n                        if (h.isPunctuated(e))\n                            return (\n                                this.makePunctuated(t, e, r), void (e = e[0])\n                            );\n                        l.SemanticSkeleton.simpleCollapseStructure(e) &&\n                            !this.nodeDict[e.toString()] &&\n                            this.makeEmpty(t, e, r);\n                    }\n                    postProcess(t, e) {\n                        const r = l.SemanticSkeleton.fromString(e).array;\n                        if (\"subsup\" === t.type) {\n                            const e = this.createNode(r[1][0]);\n                            return (\n                                (e.type = \"subscript\"),\n                                (e.role = \"subsup\"),\n                                (t.type = \"superscript\"),\n                                (e.embellished = t.embellished),\n                                (e.fencePointer = t.fencePointer),\n                                this.makeIndex(t, r[1][2], \"rightsub\"),\n                                this.makeIndex(t, r[2], \"rightsuper\"),\n                                this.collapsedChildren_(r),\n                                t\n                            );\n                        }\n                        if (\"subscript\" === t.type)\n                            return (\n                                this.makeIndex(t, r[2], \"rightsub\"),\n                                this.collapsedChildren_(r),\n                                t\n                            );\n                        if (\"superscript\" === t.type)\n                            return (\n                                this.makeIndex(t, r[2], \"rightsuper\"),\n                                this.collapsedChildren_(r),\n                                t\n                            );\n                        if (\"tensor\" === t.type)\n                            return (\n                                this.makeIndex(t, r[2], \"leftsub\"),\n                                this.makeIndex(t, r[3], \"leftsuper\"),\n                                this.makeIndex(t, r[4], \"rightsub\"),\n                                this.makeIndex(t, r[5], \"rightsuper\"),\n                                this.collapsedChildren_(r),\n                                t\n                            );\n                        if (\"punctuated\" === t.type) {\n                            if (h.isPunctuated(r)) {\n                                const e = r.splice(1, 1)[0].slice(1);\n                                t.contentNodes = e.map(\n                                    this.makePunctuation.bind(this)\n                                );\n                            }\n                            return t;\n                        }\n                        if (\"underover\" === t.type) {\n                            const e = this.createNode(r[1][0]);\n                            return (\n                                \"overaccent\" === t.childNodes[1].role\n                                    ? ((e.type = \"overscore\"),\n                                      (t.type = \"underscore\"))\n                                    : ((e.type = \"underscore\"),\n                                      (t.type = \"overscore\")),\n                                (e.role = \"underover\"),\n                                (e.embellished = t.embellished),\n                                (e.fencePointer = t.fencePointer),\n                                this.collapsedChildren_(r),\n                                t\n                            );\n                        }\n                        return t;\n                    }\n                    createNode(t) {\n                        const e = this.factory.makeNode(t);\n                        return (this.nodeDict[t.toString()] = e), e;\n                    }\n                    collapsedChildren_(t) {\n                        const e = (t) => {\n                            const r = this.nodeDict[t[0]];\n                            r.childNodes = [];\n                            for (let n = 1, o = t.length; n < o; n++) {\n                                const o = t[n];\n                                r.childNodes.push(\n                                    l.SemanticSkeleton.simpleCollapseStructure(\n                                        o\n                                    )\n                                        ? this.nodeDict[o]\n                                        : e(o)\n                                );\n                            }\n                            return r;\n                        };\n                        e(t);\n                    }\n                    setParent(t, e) {\n                        const r = p.getBySemanticId(this.mathml, t),\n                            n = this.assembleTree(r);\n                        return (n.parent = e), n;\n                    }\n                }\n                e.RebuildStree = h;\n            },\n            6295: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SemanticWalker = void 0);\n                const n = r(3284),\n                    o = r(9797);\n                class i extends n.AbstractWalker {\n                    constructor(t, e, r, n) {\n                        super(t, e, r, n),\n                            (this.node = t),\n                            (this.generator = e),\n                            (this.highlighter = r),\n                            (this.levels = null),\n                            this.restoreState();\n                    }\n                    initLevels() {\n                        const t = new o.Levels();\n                        return t.push([this.getFocus()]), t;\n                    }\n                    up() {\n                        super.up();\n                        const t = this.previousLevel();\n                        if (!t) return null;\n                        this.levels.pop();\n                        return this.levels.find(function (e) {\n                            return e.getSemanticNodes().some(function (e) {\n                                return e.id.toString() === t;\n                            });\n                        });\n                    }\n                    down() {\n                        super.down();\n                        const t = this.nextLevel();\n                        return 0 === t.length\n                            ? null\n                            : (this.levels.push(t), t[0]);\n                    }\n                    combineContentChildren(t, e, r, n) {\n                        switch (t) {\n                            case \"relseq\":\n                            case \"infixop\":\n                            case \"multirel\":\n                                return this.makePairList(n, r);\n                            case \"prefixop\":\n                                return [this.focusFromId(n[0], r.concat(n))];\n                            case \"postfixop\":\n                                return [this.focusFromId(n[0], n.concat(r))];\n                            case \"matrix\":\n                            case \"vector\":\n                            case \"fenced\":\n                                return [\n                                    this.focusFromId(n[0], [r[0], n[0], r[1]]),\n                                ];\n                            case \"cases\":\n                                return [this.focusFromId(n[0], [r[0], n[0]])];\n                            case \"punctuated\":\n                                return \"text\" === e\n                                    ? n.map(this.singletonFocus.bind(this))\n                                    : n.length === r.length\n                                      ? r.map(this.singletonFocus.bind(this))\n                                      : this.combinePunctuations(n, r, [], []);\n                            case \"appl\":\n                                return [\n                                    this.focusFromId(n[0], [n[0], r[0]]),\n                                    this.singletonFocus(n[1]),\n                                ];\n                            case \"root\":\n                                return [\n                                    this.singletonFocus(n[1]),\n                                    this.singletonFocus(n[0]),\n                                ];\n                            default:\n                                return n.map(this.singletonFocus.bind(this));\n                        }\n                    }\n                    combinePunctuations(t, e, r, n) {\n                        if (0 === t.length) return n;\n                        const o = t.shift(),\n                            i = e.shift();\n                        return o === i\n                            ? (r.push(i), this.combinePunctuations(t, e, r, n))\n                            : (e.unshift(i),\n                              r.push(o),\n                              t.length === e.length\n                                  ? (n.push(this.focusFromId(o, r.concat(e))),\n                                    n)\n                                  : (n.push(this.focusFromId(o, r)),\n                                    this.combinePunctuations(t, e, [], n)));\n                    }\n                    makePairList(t, e) {\n                        if (0 === t.length) return [];\n                        if (1 === t.length) return [this.singletonFocus(t[0])];\n                        const r = [this.singletonFocus(t.shift())];\n                        for (let n = 0, o = t.length; n < o; n++)\n                            r.push(this.focusFromId(t[n], [e[n], t[n]]));\n                        return r;\n                    }\n                    left() {\n                        super.left();\n                        const t = this.levels.indexOf(this.getFocus());\n                        if (null === t) return null;\n                        const e = this.levels.get(t - 1);\n                        return e || null;\n                    }\n                    right() {\n                        super.right();\n                        const t = this.levels.indexOf(this.getFocus());\n                        if (null === t) return null;\n                        const e = this.levels.get(t + 1);\n                        return e || null;\n                    }\n                    findFocusOnLevel(t) {\n                        return this.levels.find(\n                            (e) => e.getSemanticPrimary().id === t\n                        );\n                    }\n                }\n                e.SemanticWalker = i;\n            },\n            9806: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.SyntaxWalker = void 0);\n                const n = r(707),\n                    o = r(3284),\n                    i = r(9797);\n                class s extends o.AbstractWalker {\n                    constructor(t, e, r, n) {\n                        super(t, e, r, n),\n                            (this.node = t),\n                            (this.generator = e),\n                            (this.highlighter = r),\n                            (this.levels = null),\n                            this.restoreState();\n                    }\n                    initLevels() {\n                        const t = new i.Levels();\n                        return t.push([this.primaryId()]), t;\n                    }\n                    up() {\n                        super.up();\n                        const t = this.previousLevel();\n                        return t\n                            ? (this.levels.pop(), this.singletonFocus(t))\n                            : null;\n                    }\n                    down() {\n                        super.down();\n                        const t = this.nextLevel();\n                        if (0 === t.length) return null;\n                        const e = this.singletonFocus(t[0]);\n                        return e && this.levels.push(t), e;\n                    }\n                    combineContentChildren(t, e, r, o) {\n                        switch (t) {\n                            case \"relseq\":\n                            case \"infixop\":\n                            case \"multirel\":\n                                return (0, n.interleaveLists)(o, r);\n                            case \"prefixop\":\n                                return r.concat(o);\n                            case \"postfixop\":\n                                return o.concat(r);\n                            case \"matrix\":\n                            case \"vector\":\n                            case \"fenced\":\n                                return o.unshift(r[0]), o.push(r[1]), o;\n                            case \"cases\":\n                                return o.unshift(r[0]), o;\n                            case \"punctuated\":\n                                return \"text\" === e\n                                    ? (0, n.interleaveLists)(o, r)\n                                    : o;\n                            case \"appl\":\n                                return [o[0], r[0], o[1]];\n                            case \"root\":\n                                return [o[1], o[0]];\n                            default:\n                                return o;\n                        }\n                    }\n                    left() {\n                        super.left();\n                        const t = this.levels.indexOf(this.primaryId());\n                        if (null === t) return null;\n                        const e = this.levels.get(t - 1);\n                        return e ? this.singletonFocus(e) : null;\n                    }\n                    right() {\n                        super.right();\n                        const t = this.levels.indexOf(this.primaryId());\n                        if (null === t) return null;\n                        const e = this.levels.get(t + 1);\n                        return e ? this.singletonFocus(e) : null;\n                    }\n                    findFocusOnLevel(t) {\n                        return this.singletonFocus(t.toString());\n                    }\n                    focusDomNodes() {\n                        return [this.getFocus().getDomPrimary()];\n                    }\n                    focusSemanticNodes() {\n                        return [this.getFocus().getSemanticPrimary()];\n                    }\n                }\n                e.SyntaxWalker = s;\n            },\n            1799: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.TableWalker = void 0);\n                const n = r(5740),\n                    o = r(8496),\n                    i = r(9806),\n                    s = r(179);\n                class a extends i.SyntaxWalker {\n                    constructor(t, e, r, n) {\n                        super(t, e, r, n),\n                            (this.node = t),\n                            (this.generator = e),\n                            (this.highlighter = r),\n                            (this.firstJump = null),\n                            (this.key_ = null),\n                            (this.row_ = 0),\n                            (this.currentTable_ = null),\n                            this.keyMapping.set(\n                                o.KeyCode.ZERO,\n                                this.jumpCell.bind(this)\n                            ),\n                            this.keyMapping.set(\n                                o.KeyCode.ONE,\n                                this.jumpCell.bind(this)\n                            ),\n                            this.keyMapping.set(\n                                o.KeyCode.TWO,\n                                this.jumpCell.bind(this)\n                            ),\n                            this.keyMapping.set(\n                                o.KeyCode.THREE,\n                                this.jumpCell.bind(this)\n                            ),\n                            this.keyMapping.set(\n                                o.KeyCode.FOUR,\n                                this.jumpCell.bind(this)\n                            ),\n                            this.keyMapping.set(\n                                o.KeyCode.FIVE,\n                                this.jumpCell.bind(this)\n                            ),\n                            this.keyMapping.set(\n                                o.KeyCode.SIX,\n                                this.jumpCell.bind(this)\n                            ),\n                            this.keyMapping.set(\n                                o.KeyCode.SEVEN,\n                                this.jumpCell.bind(this)\n                            ),\n                            this.keyMapping.set(\n                                o.KeyCode.EIGHT,\n                                this.jumpCell.bind(this)\n                            ),\n                            this.keyMapping.set(\n                                o.KeyCode.NINE,\n                                this.jumpCell.bind(this)\n                            );\n                    }\n                    move(t) {\n                        this.key_ = t;\n                        const e = super.move(t);\n                        return (this.modifier = !1), e;\n                    }\n                    up() {\n                        return (\n                            (this.moved = s.WalkerMoves.UP),\n                            this.eligibleCell_()\n                                ? this.verticalMove_(!1)\n                                : super.up()\n                        );\n                    }\n                    down() {\n                        return (\n                            (this.moved = s.WalkerMoves.DOWN),\n                            this.eligibleCell_()\n                                ? this.verticalMove_(!0)\n                                : super.down()\n                        );\n                    }\n                    jumpCell() {\n                        if (!this.isInTable_() || null === this.key_)\n                            return this.getFocus();\n                        if (this.moved === s.WalkerMoves.ROW) {\n                            this.moved = s.WalkerMoves.CELL;\n                            const t = this.key_ - o.KeyCode.ZERO;\n                            return this.isLegalJump_(this.row_, t)\n                                ? this.jumpCell_(this.row_, t)\n                                : this.getFocus();\n                        }\n                        const t = this.key_ - o.KeyCode.ZERO;\n                        return t > this.currentTable_.childNodes.length\n                            ? this.getFocus()\n                            : ((this.row_ = t),\n                              (this.moved = s.WalkerMoves.ROW),\n                              this.getFocus().clone());\n                    }\n                    undo() {\n                        const t = super.undo();\n                        return (\n                            t === this.firstJump && (this.firstJump = null), t\n                        );\n                    }\n                    eligibleCell_() {\n                        const t = this.getFocus().getSemanticPrimary();\n                        return (\n                            this.modifier &&\n                            \"cell\" === t.type &&\n                            -1 !== a.ELIGIBLE_CELL_ROLES.indexOf(t.role)\n                        );\n                    }\n                    verticalMove_(t) {\n                        const e = this.previousLevel();\n                        if (!e) return null;\n                        const r = this.getFocus(),\n                            n = this.levels.indexOf(this.primaryId()),\n                            o = this.levels.pop(),\n                            i = this.levels.indexOf(e),\n                            s = this.levels.get(t ? i + 1 : i - 1);\n                        if (!s) return this.levels.push(o), null;\n                        this.setFocus(this.singletonFocus(s));\n                        const a = this.nextLevel();\n                        return a[n]\n                            ? (this.levels.push(a), this.singletonFocus(a[n]))\n                            : (this.setFocus(r), this.levels.push(o), null);\n                    }\n                    jumpCell_(t, e) {\n                        this.firstJump\n                            ? this.virtualize(!1)\n                            : ((this.firstJump = this.getFocus()),\n                              this.virtualize(!0));\n                        const r = this.currentTable_.id.toString();\n                        let n;\n                        do {\n                            n = this.levels.pop();\n                        } while (-1 === n.indexOf(r));\n                        this.levels.push(n),\n                            this.setFocus(this.singletonFocus(r)),\n                            this.levels.push(this.nextLevel());\n                        const o = this.currentTable_.childNodes[t - 1];\n                        return (\n                            this.setFocus(this.singletonFocus(o.id.toString())),\n                            this.levels.push(this.nextLevel()),\n                            this.singletonFocus(\n                                o.childNodes[e - 1].id.toString()\n                            )\n                        );\n                    }\n                    isLegalJump_(t, e) {\n                        const r = n.querySelectorAllByAttrValue(\n                            this.getRebuilt().xml,\n                            \"id\",\n                            this.currentTable_.id.toString()\n                        )[0];\n                        if (!r || r.hasAttribute(\"alternative\")) return !1;\n                        const o = this.currentTable_.childNodes[t - 1];\n                        if (!o) return !1;\n                        const i = n.querySelectorAllByAttrValue(\n                            r,\n                            \"id\",\n                            o.id.toString()\n                        )[0];\n                        return (\n                            !(!i || i.hasAttribute(\"alternative\")) &&\n                            !(!o || !o.childNodes[e - 1])\n                        );\n                    }\n                    isInTable_() {\n                        let t = this.getFocus().getSemanticPrimary();\n                        for (; t; ) {\n                            if (-1 !== a.ELIGIBLE_TABLE_TYPES.indexOf(t.type))\n                                return (this.currentTable_ = t), !0;\n                            t = t.parent;\n                        }\n                        return !1;\n                    }\n                }\n                (e.TableWalker = a),\n                    (a.ELIGIBLE_CELL_ROLES = [\n                        \"determinant\",\n                        \"rowvector\",\n                        \"binomial\",\n                        \"squarematrix\",\n                        \"multiline\",\n                        \"matrix\",\n                        \"vector\",\n                        \"cases\",\n                        \"table\",\n                    ]),\n                    (a.ELIGIBLE_TABLE_TYPES = [\n                        \"multiline\",\n                        \"matrix\",\n                        \"vector\",\n                        \"cases\",\n                        \"table\",\n                    ]);\n            },\n            179: function (t, e) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.WalkerState = e.WalkerMoves = void 0),\n                    (function (t) {\n                        (t.UP = \"up\"),\n                            (t.DOWN = \"down\"),\n                            (t.LEFT = \"left\"),\n                            (t.RIGHT = \"right\"),\n                            (t.REPEAT = \"repeat\"),\n                            (t.DEPTH = \"depth\"),\n                            (t.ENTER = \"enter\"),\n                            (t.EXPAND = \"expand\"),\n                            (t.HOME = \"home\"),\n                            (t.SUMMARY = \"summary\"),\n                            (t.DETAIL = \"detail\"),\n                            (t.ROW = \"row\"),\n                            (t.CELL = \"cell\");\n                    })(e.WalkerMoves || (e.WalkerMoves = {}));\n                class r {\n                    static resetState(t) {\n                        delete r.STATE[t];\n                    }\n                    static setState(t, e) {\n                        r.STATE[t] = e;\n                    }\n                    static getState(t) {\n                        return r.STATE[t];\n                    }\n                }\n                (e.WalkerState = r), (r.STATE = {});\n            },\n            3362: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.walkerMapping_ = e.walker = void 0);\n                const n = r(162),\n                    o = r(6295),\n                    i = r(9806),\n                    s = r(1799);\n                (e.walker = function (t, r, n, o, i) {\n                    return (\n                        e.walkerMapping_[t.toLowerCase()] ||\n                        e.walkerMapping_.dummy\n                    )(r, n, o, i);\n                }),\n                    (e.walkerMapping_ = {\n                        dummy: (t, e, r, o) => new n.DummyWalker(t, e, r, o),\n                        semantic: (t, e, r, n) =>\n                            new o.SemanticWalker(t, e, r, n),\n                        syntax: (t, e, r, n) => new i.SyntaxWalker(t, e, r, n),\n                        table: (t, e, r, n) => new s.TableWalker(t, e, r, n),\n                    });\n            },\n            1204: function (t, e, r) {\n                Object.defineProperty(e, \"__esModule\", { value: !0 }),\n                    (e.getBySemanticId =\n                        e.getSemanticRoot =\n                        e.getAttribute =\n                        e.splitAttribute =\n                            void 0);\n                const n = r(5740),\n                    o = r(2298);\n                (e.splitAttribute = function (t) {\n                    return t ? t.split(/,/) : [];\n                }),\n                    (e.getAttribute = function (t, e) {\n                        return t.getAttribute(e);\n                    }),\n                    (e.getSemanticRoot = function (t) {\n                        if (\n                            t.hasAttribute(o.Attribute.TYPE) &&\n                            !t.hasAttribute(o.Attribute.PARENT)\n                        )\n                            return t;\n                        const e = n.querySelectorAllByAttr(t, o.Attribute.TYPE);\n                        for (let t, r = 0; (t = e[r]); r++)\n                            if (!t.hasAttribute(o.Attribute.PARENT)) return t;\n                        return t;\n                    }),\n                    (e.getBySemanticId = function (t, e) {\n                        return t.getAttribute(o.Attribute.ID) === e\n                            ? t\n                            : n.querySelectorAllByAttrValue(\n                                  t,\n                                  o.Attribute.ID,\n                                  e\n                              )[0];\n                    });\n            },\n        },\n        __webpack_module_cache__ = {};\n    function __webpack_require__(t) {\n        var e = __webpack_module_cache__[t];\n        if (void 0 !== e) return e.exports;\n        var r = (__webpack_module_cache__[t] = { exports: {} });\n        return (\n            __webpack_modules__[t].call(\n                r.exports,\n                r,\n                r.exports,\n                __webpack_require__\n            ),\n            r.exports\n        );\n    }\n    __webpack_require__.g = (function () {\n        if (\"object\" == typeof globalThis) return globalThis;\n        try {\n            return this || new Function(\"return this\")();\n        } catch (t) {\n            if (\"object\" == typeof window) return window;\n        }\n    })();\n    var __webpack_exports__ = {};\n    !(function () {\n        var t = __webpack_require__(9515),\n            e = __webpack_require__(3282),\n            r = __webpack_require__(235),\n            n = __webpack_require__(265),\n            o = __webpack_require__(2388);\n        function i(t, e) {\n            (null == e || e > t.length) && (e = t.length);\n            for (var r = 0, n = new Array(e); r < e; r++) n[r] = t[r];\n            return n;\n        }\n        MathJax.loader &&\n            MathJax.loader.checkVersion(\"startup\", e.VERSION, \"startup\"),\n            (0, t.combineWithMathJax)({\n                _: { components: { loader: r, package: n, startup: o } },\n            });\n        var s,\n            a = {\n                \"a11y/semantic-enrich\": [\"input/mml\", \"a11y/sre\"],\n                \"a11y/complexity\": [\"a11y/semantic-enrich\"],\n                \"a11y/explorer\": [\"a11y/semantic-enrich\", \"ui/menu\"],\n                \"[mml]/mml3\": [\"input/mml\"],\n                \"[tex]/all-packages\": [\"input/tex-base\"],\n                \"[tex]/action\": [\"input/tex-base\", \"[tex]/newcommand\"],\n                \"[tex]/autoload\": [\"input/tex-base\", \"[tex]/require\"],\n                \"[tex]/ams\": [\"input/tex-base\"],\n                \"[tex]/amscd\": [\"input/tex-base\"],\n                \"[tex]/bbox\": [\n                    \"input/tex-base\",\n                    \"[tex]/ams\",\n                    \"[tex]/newcommand\",\n                ],\n                \"[tex]/boldsymbol\": [\"input/tex-base\"],\n                \"[tex]/braket\": [\"input/tex-base\"],\n                \"[tex]/bussproofs\": [\"input/tex-base\"],\n                \"[tex]/cancel\": [\"input/tex-base\", \"[tex]/enclose\"],\n                \"[tex]/centernot\": [\"input/tex-base\"],\n                \"[tex]/color\": [\"input/tex-base\"],\n                \"[tex]/colorv2\": [\"input/tex-base\"],\n                \"[tex]/colortbl\": [\"input/tex-base\", \"[tex]/color\"],\n                \"[tex]/configmacros\": [\"input/tex-base\", \"[tex]/newcommand\"],\n                \"[tex]/enclose\": [\"input/tex-base\"],\n                \"[tex]/extpfeil\": [\n                    \"input/tex-base\",\n                    \"[tex]/newcommand\",\n                    \"[tex]/ams\",\n                ],\n                \"[tex]/html\": [\"input/tex-base\"],\n                \"[tex]/mathtools\": [\n                    \"input/tex-base\",\n                    \"[tex]/newcommand\",\n                    \"[tex]/ams\",\n                ],\n                \"[tex]/mhchem\": [\"input/tex-base\", \"[tex]/ams\"],\n                \"[tex]/newcommand\": [\"input/tex-base\"],\n                \"[tex]/noerrors\": [\"input/tex-base\"],\n                \"[tex]/noundefined\": [\"input/tex-base\"],\n                \"[tex]/physics\": [\"input/tex-base\"],\n                \"[tex]/require\": [\"input/tex-base\"],\n                \"[tex]/setoptions\": [\"input/tex-base\"],\n                \"[tex]/tagformat\": [\"input/tex-base\"],\n                \"[tex]/textcomp\": [\"input/tex-base\", \"[tex]/textmacros\"],\n                \"[tex]/textmacros\": [\"input/tex-base\"],\n                \"[tex]/unicode\": [\"input/tex-base\"],\n                \"[tex]/verb\": [\"input/tex-base\"],\n                \"[tex]/cases\": [\"[tex]/empheq\"],\n                \"[tex]/empheq\": [\"input/tex-base\", \"[tex]/ams\"],\n            },\n            l = Array.from(Object.keys(a)).filter(function (t) {\n                return (\n                    \"[tex]\" === t.substr(0, 5) &&\n                    \"[tex]/autoload\" !== t &&\n                    \"[tex]/colorv2\" !== t &&\n                    \"[tex]/all-packages\" !== t\n                );\n            }),\n            c = {\n                startup: [\"loader\"],\n                \"input/tex\": [\n                    \"input/tex-base\",\n                    \"[tex]/ams\",\n                    \"[tex]/newcommand\",\n                    \"[tex]/noundefined\",\n                    \"[tex]/require\",\n                    \"[tex]/autoload\",\n                    \"[tex]/configmacros\",\n                ],\n                \"input/tex-full\": [\n                    \"input/tex-base\",\n                    \"[tex]/all-packages\",\n                ].concat(\n                    ((s = l),\n                    (function (t) {\n                        if (Array.isArray(t)) return i(t);\n                    })(s) ||\n                        (function (t) {\n                            if (\n                                (\"undefined\" != typeof Symbol &&\n                                    null != t[Symbol.iterator]) ||\n                                null != t[\"@@iterator\"]\n                            )\n                                return Array.from(t);\n                        })(s) ||\n                        (function (t, e) {\n                            if (t) {\n                                if (\"string\" == typeof t) return i(t, e);\n                                var r = Object.prototype.toString\n                                    .call(t)\n                                    .slice(8, -1);\n                                return (\n                                    \"Object\" === r &&\n                                        t.constructor &&\n                                        (r = t.constructor.name),\n                                    \"Map\" === r || \"Set\" === r\n                                        ? Array.from(t)\n                                        : \"Arguments\" === r ||\n                                            /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(\n                                                r\n                                            )\n                                          ? i(t, e)\n                                          : void 0\n                                );\n                            }\n                        })(s) ||\n                        (function () {\n                            throw new TypeError(\n                                \"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"\n                            );\n                        })())\n                ),\n                \"[tex]/all-packages\": l,\n            };\n        (0, t.combineDefaults)(MathJax.config.loader, \"dependencies\", a),\n            (0, t.combineDefaults)(MathJax.config.loader, \"paths\", {\n                tex: \"[mathjax]/input/tex/extensions\",\n                mml: \"[mathjax]/input/mml/extensions\",\n                sre: \"[mathjax]/sre/mathmaps\",\n            }),\n            (0, t.combineDefaults)(MathJax.config.loader, \"provides\", c),\n            (0, t.combineDefaults)(MathJax.config.loader, \"source\", {\n                \"[tex]/amsCd\": \"[tex]/amscd\",\n                \"[tex]/colorV2\": \"[tex]/colorv2\",\n                \"[tex]/configMacros\": \"[tex]/configmacros\",\n                \"[tex]/tagFormat\": \"[tex]/tagformat\",\n            }),\n            r.Loader.preLoad(\n                \"loader\",\n                \"startup\",\n                \"core\",\n                \"input/tex\",\n                \"input/mml\",\n                \"output/chtml\",\n                \"output/chtml/fonts/tex.js\",\n                \"ui/menu\",\n                \"a11y/assistive-mml\"\n            );\n        var u = __webpack_require__(444),\n            p = __webpack_require__(6191),\n            h = __webpack_require__(5009),\n            f = __webpack_require__(3494),\n            d = __webpack_require__(3670),\n            m = __webpack_require__(805),\n            y = __webpack_require__(9206),\n            g = __webpack_require__(5722),\n            b = __webpack_require__(4474),\n            v = __webpack_require__(9e3),\n            _ = __webpack_require__(91),\n            S = __webpack_require__(6336),\n            M = __webpack_require__(1759),\n            O = __webpack_require__(3909),\n            x = __webpack_require__(9007),\n            E = __webpack_require__(3948),\n            A = __webpack_require__(9145),\n            C = __webpack_require__(142),\n            T = __webpack_require__(7590),\n            N = __webpack_require__(3233),\n            w = __webpack_require__(1334),\n            L = __webpack_require__(6661),\n            I = __webpack_require__(1581),\n            P = __webpack_require__(5410),\n            R = __webpack_require__(6850),\n            k = __webpack_require__(3985),\n            j = __webpack_require__(450),\n            B = __webpack_require__(6405),\n            D = __webpack_require__(3050),\n            F = __webpack_require__(2756),\n            H = __webpack_require__(7238),\n            U = __webpack_require__(5741),\n            X = __webpack_require__(6145),\n            V = __webpack_require__(9878),\n            q = __webpack_require__(7265),\n            W = __webpack_require__(6030),\n            G = __webpack_require__(7131),\n            z = __webpack_require__(1314),\n            J = __webpack_require__(4461),\n            K = __webpack_require__(1349),\n            $ = __webpack_require__(4359),\n            Y = __webpack_require__(4770),\n            Z = __webpack_require__(5022),\n            Q = __webpack_require__(5184),\n            tt = __webpack_require__(9102),\n            et = __webpack_require__(6325),\n            rt = __webpack_require__(4082),\n            nt = __webpack_require__(9259),\n            ot = __webpack_require__(2975),\n            it = __webpack_require__(4574),\n            st = __webpack_require__(4596),\n            at = __webpack_require__(7860),\n            lt = __webpack_require__(8823),\n            ct = __webpack_require__(8912),\n            ut = __webpack_require__(3811),\n            pt = __webpack_require__(6272),\n            ht = __webpack_require__(3683),\n            ft = __webpack_require__(5138),\n            dt = __webpack_require__(3726),\n            mt = __webpack_require__(3363),\n            yt = __webpack_require__(3335),\n            gt = __webpack_require__(5713),\n            bt = __webpack_require__(9923),\n            vt = __webpack_require__(6469),\n            _t = __webpack_require__(6751),\n            St = __webpack_require__(5368),\n            Mt = __webpack_require__(7525),\n            Ot = __webpack_require__(103),\n            xt = __webpack_require__(7233),\n            Et = __webpack_require__(8666),\n            At = __webpack_require__(4542),\n            Ct = __webpack_require__(4139),\n            Tt = __webpack_require__(8054),\n            Nt = __webpack_require__(6010),\n            wt = __webpack_require__(7875),\n            Lt = __webpack_require__(505);\n        MathJax.loader &&\n            MathJax.loader.checkVersion(\"core\", e.VERSION, \"core\"),\n            (0, t.combineWithMathJax)({\n                _: {\n                    adaptors: { HTMLAdaptor: u, browserAdaptor: p },\n                    components: { global: t },\n                    core: {\n                        DOMAdaptor: h,\n                        FindMath: f,\n                        Handler: d,\n                        HandlerList: m,\n                        InputJax: y,\n                        MathDocument: g,\n                        MathItem: b,\n                        MathList: v,\n                        MmlTree: {\n                            Attributes: _,\n                            MML: S,\n                            MathMLVisitor: M,\n                            MmlFactory: O,\n                            MmlNode: x,\n                            MmlNodes: {\n                                TeXAtom: E,\n                                maction: A,\n                                maligngroup: C,\n                                malignmark: T,\n                                math: N,\n                                mathchoice: w,\n                                menclose: L,\n                                merror: I,\n                                mfenced: P,\n                                mfrac: R,\n                                mglyph: k,\n                                mi: j,\n                                mmultiscripts: B,\n                                mn: D,\n                                mo: F,\n                                mpadded: H,\n                                mphantom: U,\n                                mroot: X,\n                                mrow: V,\n                                ms: q,\n                                mspace: W,\n                                msqrt: G,\n                                mstyle: z,\n                                msubsup: J,\n                                mtable: K,\n                                mtd: $,\n                                mtext: Y,\n                                mtr: Z,\n                                munderover: Q,\n                                semantics: tt,\n                            },\n                            MmlVisitor: et,\n                            OperatorDictionary: rt,\n                            SerializedMmlVisitor: nt,\n                        },\n                        OutputJax: ot,\n                        Tree: {\n                            Factory: it,\n                            Node: st,\n                            NodeFactory: at,\n                            Visitor: lt,\n                            Wrapper: ct,\n                            WrapperFactory: ut,\n                        },\n                    },\n                    handlers: {\n                        html_ts: pt,\n                        html: {\n                            HTMLDocument: ht,\n                            HTMLDomStrings: ft,\n                            HTMLHandler: dt,\n                            HTMLMathItem: mt,\n                            HTMLMathList: yt,\n                        },\n                    },\n                    mathjax: gt,\n                    util: {\n                        AsyncLoad: bt,\n                        BBox: vt,\n                        BitField: _t,\n                        Entities: St,\n                        FunctionList: Mt,\n                        LinkedList: Ot,\n                        Options: xt,\n                        PrioritizedList: Et,\n                        Retries: At,\n                        StyleList: Ct,\n                        Styles: Tt,\n                        lengths: Nt,\n                        numeric: wt,\n                        string: Lt,\n                    },\n                },\n            }),\n            MathJax.startup &&\n                (MathJax.startup.registerConstructor(\n                    \"HTMLHandler\",\n                    dt.HTMLHandler\n                ),\n                MathJax.startup.registerConstructor(\n                    \"browserAdaptor\",\n                    p.browserAdaptor\n                ),\n                MathJax.startup.useHandler(\"HTMLHandler\"),\n                MathJax.startup.useAdaptor(\"browserAdaptor\")),\n            MathJax.loader &&\n                (MathJax._.mathjax.mathjax.asyncLoad = function (t) {\n                    return MathJax.loader.load(t);\n                });\n        var It = __webpack_require__(8462),\n            Pt = __webpack_require__(9899),\n            Rt = __webpack_require__(4676),\n            kt = __webpack_require__(7073),\n            jt = __webpack_require__(2947),\n            Bt = __webpack_require__(8929),\n            Dt = __webpack_require__(1256),\n            Ft = __webpack_require__(5450),\n            Ht = __webpack_require__(8562),\n            Ut = __webpack_require__(1130),\n            Xt = __webpack_require__(9497),\n            Vt = __webpack_require__(8292),\n            qt = __webpack_require__(5453),\n            Wt = __webpack_require__(8803),\n            Gt = __webpack_require__(9140),\n            zt = __webpack_require__(6521),\n            Jt = __webpack_require__(8317),\n            Kt = __webpack_require__(3971),\n            $t = __webpack_require__(8417),\n            Yt = __webpack_require__(8021),\n            Zt = __webpack_require__(2790),\n            Qt = __webpack_require__(4387),\n            te = __webpack_require__(1275),\n            ee = __webpack_require__(2942),\n            re = __webpack_require__(1181),\n            ne = __webpack_require__(7693),\n            oe = __webpack_require__(8458),\n            ie = __webpack_require__(1496),\n            se = __webpack_require__(6793),\n            ae = __webpack_require__(1110),\n            le = __webpack_require__(5579),\n            ce = __webpack_require__(4898),\n            ue = __webpack_require__(7741);\n        MathJax.loader &&\n            MathJax.loader.checkVersion(\"input/tex\", e.VERSION, \"input\"),\n            (0, t.combineWithMathJax)({\n                _: {\n                    input: {\n                        tex_ts: It,\n                        tex: {\n                            Configuration: Pt,\n                            FilterUtil: Rt,\n                            FindTeX: kt,\n                            MapHandler: jt,\n                            NodeFactory: Bt,\n                            NodeUtil: Dt,\n                            ParseMethods: Ft,\n                            ParseOptions: Ht,\n                            ParseUtil: Ut,\n                            Stack: Xt,\n                            StackItem: Vt,\n                            StackItemFactory: qt,\n                            Symbol: Wt,\n                            SymbolMap: Gt,\n                            Tags: zt,\n                            TexConstants: Jt,\n                            TexError: Kt,\n                            TexParser: $t,\n                            ams: {\n                                AmsConfiguration: Yt,\n                                AmsItems: Zt,\n                                AmsMethods: Qt,\n                            },\n                            autoload: { AutoloadConfiguration: te },\n                            base: {\n                                BaseConfiguration: ee,\n                                BaseItems: re,\n                                BaseMethods: ne,\n                            },\n                            configmacros: { ConfigMacrosConfiguration: oe },\n                            newcommand: {\n                                NewcommandConfiguration: ie,\n                                NewcommandItems: se,\n                                NewcommandMethods: ae,\n                                NewcommandUtil: le,\n                            },\n                            noundefined: { NoUndefinedConfiguration: ce },\n                            require: { RequireConfiguration: ue },\n                        },\n                    },\n                },\n            }),\n            r.Loader.preLoad(\n                \"input/tex-base\",\n                \"[tex]/ams\",\n                \"[tex]/newcommand\",\n                \"[tex]/noundefined\",\n                \"[tex]/require\",\n                \"[tex]/autoload\",\n                \"[tex]/configmacros\"\n            ),\n            (function () {\n                var t =\n                        arguments.length > 0 && void 0 !== arguments[0]\n                            ? arguments[0]\n                            : [],\n                    e =\n                        !(arguments.length > 1 && void 0 !== arguments[1]) ||\n                        arguments[1];\n                if (MathJax.startup) {\n                    e &&\n                        (MathJax.startup.registerConstructor(\n                            \"tex\",\n                            MathJax._.input.tex_ts.TeX\n                        ),\n                        MathJax.startup.useInput(\"tex\")),\n                        MathJax.config.tex || (MathJax.config.tex = {});\n                    var r = MathJax.config.tex.packages;\n                    (MathJax.config.tex.packages = t),\n                        r &&\n                            (0, xt.insert)(MathJax.config.tex, { packages: r });\n                }\n            })([\n                \"base\",\n                \"ams\",\n                \"newcommand\",\n                \"noundefined\",\n                \"require\",\n                \"autoload\",\n                \"configmacros\",\n            ]);\n        var pe = __webpack_require__(2892),\n            he = __webpack_require__(625),\n            fe = __webpack_require__(2769);\n        MathJax.loader &&\n            MathJax.loader.checkVersion(\"input/mml\", e.VERSION, \"input\"),\n            (0, t.combineWithMathJax)({\n                _: {\n                    input: {\n                        mathml_ts: pe,\n                        mathml: { FindMathML: he, MathMLCompile: fe },\n                    },\n                },\n            }),\n            MathJax.startup &&\n                (MathJax.startup.registerConstructor(\"mml\", pe.MathML),\n                MathJax.startup.useInput(\"mml\")),\n            MathJax.loader &&\n                MathJax.loader.pathFilters.add(function (t) {\n                    return (\n                        (t.name = t.name.replace(\n                            /\\/util\\/entities\\/.*?\\.js/,\n                            \"/input/mml/entities.js\"\n                        )),\n                        !0\n                    );\n                });\n        var de = __webpack_require__(50),\n            me = __webpack_require__(8042),\n            ye = __webpack_require__(8270),\n            ge = __webpack_require__(6797),\n            be = __webpack_require__(5355),\n            ve = __webpack_require__(9261),\n            _e = __webpack_require__(9086),\n            Se = __webpack_require__(95),\n            Me = __webpack_require__(1148),\n            Oe = __webpack_require__(8102),\n            xe = __webpack_require__(804),\n            Ee = __webpack_require__(8147),\n            Ae = __webpack_require__(2275),\n            Ce = __webpack_require__(9063),\n            Te = __webpack_require__(6911),\n            Ne = __webpack_require__(1653),\n            we = __webpack_require__(6781),\n            Le = __webpack_require__(6460),\n            Ie = __webpack_require__(6287),\n            Pe = __webpack_require__(5964),\n            Re = __webpack_require__(8776),\n            ke = __webpack_require__(4798),\n            je = __webpack_require__(4597),\n            Be = __webpack_require__(2970),\n            De = __webpack_require__(5610),\n            Fe = __webpack_require__(4300),\n            He = __webpack_require__(8002),\n            Ue = __webpack_require__(7056),\n            Xe = __webpack_require__(1259),\n            Ve = __webpack_require__(3571),\n            qe = __webpack_require__(6590),\n            We = __webpack_require__(8650),\n            Ge = __webpack_require__(421),\n            ze = __webpack_require__(5884),\n            Je = __webpack_require__(5552),\n            Ke = __webpack_require__(3055),\n            $e = __webpack_require__(7519),\n            Ye = __webpack_require__(4420),\n            Ze = __webpack_require__(9800),\n            Qe = __webpack_require__(1160),\n            tr = __webpack_require__(1956),\n            er = __webpack_require__(7490),\n            rr = __webpack_require__(7313),\n            nr = __webpack_require__(7555),\n            or = __webpack_require__(2688),\n            ir = __webpack_require__(5636),\n            sr = __webpack_require__(5723),\n            ar = __webpack_require__(8009),\n            lr = __webpack_require__(5023),\n            cr = __webpack_require__(7096),\n            ur = __webpack_require__(6898),\n            pr = __webpack_require__(6991),\n            hr = __webpack_require__(8411),\n            fr = __webpack_require__(4126),\n            dr = __webpack_require__(258),\n            mr = __webpack_require__(4093),\n            yr = __webpack_require__(905),\n            gr = __webpack_require__(6237),\n            br = __webpack_require__(5164),\n            vr = __webpack_require__(6319),\n            _r = __webpack_require__(5766),\n            Sr = __webpack_require__(1971),\n            Mr = __webpack_require__(167),\n            Or = __webpack_require__(5806);\n        MathJax.loader &&\n            MathJax.loader.checkVersion(\"output/chtml\", e.VERSION, \"output\"),\n            (0, t.combineWithMathJax)({\n                _: {\n                    output: {\n                        chtml_ts: de,\n                        chtml: {\n                            FontData: me,\n                            Notation: ye,\n                            Usage: ge,\n                            Wrapper: be,\n                            WrapperFactory: ve,\n                            Wrappers_ts: _e,\n                            Wrappers: {\n                                TeXAtom: Se,\n                                TextNode: Me,\n                                maction: Oe,\n                                math: xe,\n                                menclose: Ee,\n                                mfenced: Ae,\n                                mfrac: Ce,\n                                mglyph: Te,\n                                mi: Ne,\n                                mmultiscripts: we,\n                                mn: Le,\n                                mo: Ie,\n                                mpadded: Pe,\n                                mroot: Re,\n                                mrow: ke,\n                                ms: je,\n                                mspace: Be,\n                                msqrt: De,\n                                msubsup: Fe,\n                                mtable: He,\n                                mtd: Ue,\n                                mtext: Xe,\n                                mtr: Ve,\n                                munderover: qe,\n                                scriptbase: We,\n                                semantics: Ge,\n                            },\n                        },\n                        common: {\n                            FontData: ze,\n                            Notation: Je,\n                            OutputJax: Ke,\n                            Wrapper: $e,\n                            WrapperFactory: Ye,\n                            Wrappers: {\n                                TeXAtom: Ze,\n                                TextNode: Qe,\n                                maction: tr,\n                                math: er,\n                                menclose: rr,\n                                mfenced: nr,\n                                mfrac: or,\n                                mglyph: ir,\n                                mi: sr,\n                                mmultiscripts: ar,\n                                mn: lr,\n                                mo: cr,\n                                mpadded: ur,\n                                mroot: pr,\n                                mrow: hr,\n                                ms: fr,\n                                mspace: dr,\n                                msqrt: mr,\n                                msubsup: yr,\n                                mtable: gr,\n                                mtd: br,\n                                mtext: vr,\n                                mtr: _r,\n                                munderover: Sr,\n                                scriptbase: Mr,\n                                semantics: Or,\n                            },\n                        },\n                    },\n                },\n            }),\n            MathJax.loader &&\n                (0, t.combineDefaults)(MathJax.config.loader, \"output/chtml\", {\n                    checkReady: function () {\n                        return MathJax.loader.load(\"output/chtml/fonts/tex\");\n                    },\n                }),\n            MathJax.startup &&\n                (MathJax.startup.registerConstructor(\"chtml\", de.CHTML),\n                MathJax.startup.useOutput(\"chtml\"));\n        var xr = __webpack_require__(2760),\n            Er = __webpack_require__(4005),\n            Ar = __webpack_require__(1015),\n            Cr = __webpack_require__(6555),\n            Tr = __webpack_require__(2183),\n            Nr = __webpack_require__(3490),\n            wr = __webpack_require__(9056),\n            Lr = __webpack_require__(3019),\n            Ir = __webpack_require__(2713),\n            Pr = __webpack_require__(7517),\n            Rr = __webpack_require__(4182),\n            kr = __webpack_require__(2679),\n            jr = __webpack_require__(5469),\n            Br = __webpack_require__(775),\n            Dr = __webpack_require__(9551),\n            Fr = __webpack_require__(6530),\n            Hr = __webpack_require__(4409),\n            Ur = __webpack_require__(5292),\n            Xr = __webpack_require__(3980),\n            Vr = __webpack_require__(1103),\n            qr = __webpack_require__(9124),\n            Wr = __webpack_require__(6001),\n            Gr = __webpack_require__(3696),\n            zr = __webpack_require__(9587),\n            Jr = __webpack_require__(8348),\n            Kr = __webpack_require__(1376),\n            $r = __webpack_require__(1439),\n            Yr = __webpack_require__(331),\n            Zr = __webpack_require__(4886),\n            Qr = __webpack_require__(4471),\n            tn = __webpack_require__(5181),\n            en = __webpack_require__(3526),\n            rn = __webpack_require__(5649),\n            nn = __webpack_require__(7153),\n            on = __webpack_require__(5745),\n            sn = __webpack_require__(1411),\n            an = __webpack_require__(6384),\n            ln = __webpack_require__(6041),\n            cn = __webpack_require__(8199),\n            un = __webpack_require__(9848),\n            pn = __webpack_require__(7906),\n            hn = __webpack_require__(2644),\n            fn = __webpack_require__(4926);\n        if (\n            (MathJax.loader &&\n                MathJax.loader.checkVersion(\n                    \"output/chtml/fonts/tex\",\n                    e.VERSION,\n                    \"chtml-font\"\n                ),\n            (0, t.combineWithMathJax)({\n                _: {\n                    output: {\n                        chtml: {\n                            fonts: {\n                                tex_ts: xr,\n                                tex: {\n                                    \"bold-italic\": Er,\n                                    bold: Ar,\n                                    \"fraktur-bold\": Cr,\n                                    fraktur: Tr,\n                                    italic: Nr,\n                                    largeop: wr,\n                                    monospace: Lr,\n                                    normal: Ir,\n                                    \"sans-serif-bold-italic\": Pr,\n                                    \"sans-serif-bold\": Rr,\n                                    \"sans-serif-italic\": kr,\n                                    \"sans-serif\": jr,\n                                    smallop: Br,\n                                    \"tex-calligraphic-bold\": Dr,\n                                    \"tex-size3\": Fr,\n                                    \"tex-size4\": Hr,\n                                    \"tex-variant\": Ur,\n                                },\n                            },\n                        },\n                        common: {\n                            fonts: {\n                                tex: {\n                                    \"bold-italic\": Xr,\n                                    bold: Vr,\n                                    delimiters: qr,\n                                    \"double-struck\": Wr,\n                                    \"fraktur-bold\": Gr,\n                                    fraktur: zr,\n                                    italic: Jr,\n                                    largeop: Kr,\n                                    monospace: $r,\n                                    normal: Yr,\n                                    \"sans-serif-bold-italic\": Zr,\n                                    \"sans-serif-bold\": Qr,\n                                    \"sans-serif-italic\": tn,\n                                    \"sans-serif\": en,\n                                    \"script-bold\": rn,\n                                    script: nn,\n                                    smallop: on,\n                                    \"tex-calligraphic-bold\": sn,\n                                    \"tex-calligraphic\": an,\n                                    \"tex-mathit\": ln,\n                                    \"tex-oldstyle-bold\": cn,\n                                    \"tex-oldstyle\": un,\n                                    \"tex-size3\": pn,\n                                    \"tex-size4\": hn,\n                                    \"tex-variant\": fn,\n                                },\n                            },\n                        },\n                    },\n                },\n            }),\n            MathJax.startup)\n        ) {\n            (0, t.combineDefaults)(MathJax.config, \"chtml\", {\n                fontURL: n.Package.resolvePath(\n                    \"output/chtml/fonts/woff-v2\",\n                    !1\n                ),\n            });\n            var dn = (0, xt.selectOptionsFromKeys)(\n                MathJax.config.chtml || {},\n                xr.TeXFont.OPTIONS\n            );\n            (0, t.combineDefaults)(MathJax.config, \"chtml\", {\n                font: new xr.TeXFont(dn),\n            });\n        }\n        var mn = __webpack_require__(5865),\n            yn = __webpack_require__(8310),\n            gn = __webpack_require__(4001),\n            bn = __webpack_require__(473),\n            vn = __webpack_require__(4414);\n        MathJax.loader &&\n            MathJax.loader.checkVersion(\"ui/menu\", e.VERSION, \"ui\"),\n            (0, t.combineWithMathJax)({\n                _: {\n                    ui: {\n                        menu: {\n                            MJContextMenu: mn,\n                            Menu: yn,\n                            MenuHandler: gn,\n                            MmlVisitor: bn,\n                            SelectableInfo: vn,\n                        },\n                    },\n                },\n            }),\n            MathJax.startup &&\n                \"undefined\" != typeof window &&\n                MathJax.startup.extendHandler(function (t) {\n                    return (0, gn.MenuHandler)(t);\n                }, 20);\n        var _n = __webpack_require__(351);\n        function Sn(t, e) {\n            (null == e || e > t.length) && (e = t.length);\n            for (var r = 0, n = new Array(e); r < e; r++) n[r] = t[r];\n            return n;\n        }\n        MathJax.loader &&\n            MathJax.loader.checkVersion(\n                \"a11y/assistive-mml\",\n                e.VERSION,\n                \"a11y\"\n            ),\n            (0, t.combineWithMathJax)({ _: { a11y: { \"assistive-mml\": _n } } }),\n            MathJax.startup &&\n                MathJax.startup.extendHandler(function (t) {\n                    return (0, _n.AssistiveMmlHandler)(t);\n                }),\n            r.Loader.preLoad(\"loader\"),\n            r.Loader.load\n                .apply(\n                    r.Loader,\n                    (function (t) {\n                        return (\n                            (function (t) {\n                                if (Array.isArray(t)) return Sn(t);\n                            })(t) ||\n                            (function (t) {\n                                if (\n                                    (\"undefined\" != typeof Symbol &&\n                                        null != t[Symbol.iterator]) ||\n                                    null != t[\"@@iterator\"]\n                                )\n                                    return Array.from(t);\n                            })(t) ||\n                            (function (t, e) {\n                                if (!t) return;\n                                if (\"string\" == typeof t) return Sn(t, e);\n                                var r = Object.prototype.toString\n                                    .call(t)\n                                    .slice(8, -1);\n                                \"Object\" === r &&\n                                    t.constructor &&\n                                    (r = t.constructor.name);\n                                if (\"Map\" === r || \"Set\" === r)\n                                    return Array.from(t);\n                                if (\n                                    \"Arguments\" === r ||\n                                    /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(\n                                        r\n                                    )\n                                )\n                                    return Sn(t, e);\n                            })(t) ||\n                            (function () {\n                                throw new TypeError(\n                                    \"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"\n                                );\n                            })()\n                        );\n                    })(r.CONFIG.load)\n                )\n                .then(function () {\n                    return r.CONFIG.ready();\n                })\n                .catch(function (t) {\n                    return r.CONFIG.failed(t);\n                });\n    })();\n})();\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/js/mathjax/tex-svg-full.js",
    "content": "!function(t){var e={};function Q(r){if(e[r])return e[r].exports;var T=e[r]={i:r,l:!1,exports:{}};return t[r].call(T.exports,T,T.exports,Q),T.l=!0,T.exports}Q.m=t,Q.c=e,Q.d=function(t,e,r){Q.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},Q.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},Q.t=function(t,e){if(1&e&&(t=Q(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(Q.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var T in t)Q.d(r,T,function(e){return t[e]}.bind(null,T));return r},Q.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return Q.d(e,\"a\",e),e},Q.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},Q.p=\"\",Q(Q.s=313)}([function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.XMLNode=e.TextNode=e.AbstractMmlEmptyNode=e.AbstractMmlBaseNode=e.AbstractMmlLayoutNode=e.AbstractMmlTokenNode=e.AbstractMmlNode=e.indentAttributes=e.TEXCLASSNAMES=e.TEXCLASS=void 0;var a=Q(24),s=Q(58);e.TEXCLASS={ORD:0,OP:1,BIN:2,REL:3,OPEN:4,CLOSE:5,PUNCT:6,INNER:7,VCENTER:8,NONE:-1},e.TEXCLASSNAMES=[\"ORD\",\"OP\",\"BIN\",\"REL\",\"OPEN\",\"CLOSE\",\"PUNCT\",\"INNER\",\"VCENTER\"];var l=[\"\",\"thinmathspace\",\"mediummathspace\",\"thickmathspace\"],c=[[0,-1,2,3,0,0,0,1],[-1,-1,0,3,0,0,0,1],[2,2,0,0,2,0,0,2],[3,3,0,0,3,0,0,3],[0,0,0,0,0,0,0,0],[0,-1,2,3,0,0,0,1],[1,1,0,1,1,1,1,1],[1,-1,2,3,1,0,1,1]];e.indentAttributes=[\"indentalign\",\"indentalignfirst\",\"indentshift\",\"indentshiftfirst\"];var u=function(t){function Q(e,Q,r){void 0===Q&&(Q={}),void 0===r&&(r=[]);var T=t.call(this,e)||this;return T.texClass=null,T.prevClass=null,T.prevLevel=null,T.arity<0&&(T.childNodes=[e.create(\"inferredMrow\")],T.childNodes[0].parent=T),T.setChildren(r),T.attributes=new a.Attributes(e.getNodeClass(T.kind).defaults,e.getNodeClass(\"math\").defaults),T.attributes.setList(Q),T}return T(Q,t),Object.defineProperty(Q.prototype,\"isToken\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"isEmbellished\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"isSpacelike\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"linebreakContainer\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"hasNewLine\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"arity\",{get:function(){return 1/0},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"isInferred\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"Parent\",{get:function(){for(var t=this.parent;t&&t.notParent;)t=t.Parent;return t},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"notParent\",{get:function(){return!1},enumerable:!1,configurable:!0}),Q.prototype.setChildren=function(e){return this.arity<0?this.childNodes[0].setChildren(e):t.prototype.setChildren.call(this,e)},Q.prototype.appendChild=function(e){return this.arity<0?(this.childNodes[0].appendChild(e),e):t.prototype.appendChild.call(this,e)},Q.prototype.replaceChild=function(e,Q){return this.arity<0?(this.childNodes[0].replaceChild(e,Q),e):t.prototype.replaceChild.call(this,e,Q)},Q.prototype.core=function(){return this},Q.prototype.coreMO=function(){return this},Q.prototype.coreIndex=function(){return 0},Q.prototype.childPosition=function(){for(var t,e,Q=this,r=Q.parent;r&&r.notParent;)Q=r,r=r.parent;if(r){var T=0;try{for(var n=o(r.childNodes),i=n.next();!i.done;i=n.next()){if(i.value===Q)return T;T++}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}}return null},Q.prototype.setTeXclass=function(t){return this.getPrevClass(t),null!=this.texClass?this:t},Q.prototype.updateTeXclass=function(t){t&&(this.prevClass=t.prevClass,this.prevLevel=t.prevLevel,t.prevClass=t.prevLevel=null,this.texClass=t.texClass)},Q.prototype.getPrevClass=function(t){t&&(this.prevClass=t.texClass,this.prevLevel=t.attributes.get(\"scriptlevel\"))},Q.prototype.texSpacing=function(){var t=null!=this.prevClass?this.prevClass:e.TEXCLASS.NONE,Q=this.texClass||e.TEXCLASS.ORD;if(t===e.TEXCLASS.NONE||Q===e.TEXCLASS.NONE)return\"\";t===e.TEXCLASS.VCENTER&&(t=e.TEXCLASS.ORD),Q===e.TEXCLASS.VCENTER&&(Q=e.TEXCLASS.ORD);var r=c[t][Q];return(this.prevLevel>0||this.attributes.get(\"scriptlevel\")>0)&&r>=0?\"\":l[Math.abs(r)]},Q.prototype.hasSpacingAttributes=function(){return this.isEmbellished&&this.coreMO().hasSpacingAttributes()},Q.prototype.setInheritedAttributes=function(t,e,r,T){var n,a;void 0===t&&(t={}),void 0===e&&(e=!1),void 0===r&&(r=0),void 0===T&&(T=!1);var s=this.attributes.getAllDefaults();try{for(var l=o(Object.keys(t)),c=l.next();!c.done;c=l.next()){var u=c.value;if(s.hasOwnProperty(u)||Q.alwaysInherit.hasOwnProperty(u)){var p=i(t[u],2),h=p[0],f=p[1];((Q.noInherit[h]||{})[this.kind]||{})[u]||this.attributes.setInherited(u,f)}}}catch(t){n={error:t}}finally{try{c&&!c.done&&(a=l.return)&&a.call(l)}finally{if(n)throw n.error}}void 0===this.attributes.getExplicit(\"displaystyle\")&&this.attributes.setInherited(\"displaystyle\",e),void 0===this.attributes.getExplicit(\"scriptlevel\")&&this.attributes.setInherited(\"scriptlevel\",r),T&&this.setProperty(\"texprimestyle\",T);var d=this.arity;if(d>=0&&d!==1/0&&(1===d&&0===this.childNodes.length||1!==d&&this.childNodes.length!==d))if(d<this.childNodes.length)this.childNodes=this.childNodes.slice(0,d);else for(;this.childNodes.length<d;)this.appendChild(this.factory.create(\"mrow\"));this.setChildInheritedAttributes(t,e,r,T)},Q.prototype.setChildInheritedAttributes=function(t,e,Q,r){var T,n;try{for(var i=o(this.childNodes),a=i.next();!a.done;a=i.next()){a.value.setInheritedAttributes(t,e,Q,r)}}catch(t){T={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(T)throw T.error}}},Q.prototype.addInheritedAttributes=function(t,e){var Q,r,T=n({},t);try{for(var i=o(Object.keys(e)),a=i.next();!a.done;a=i.next()){var s=a.value;\"displaystyle\"!==s&&\"scriptlevel\"!==s&&\"style\"!==s&&(T[s]=[this.kind,e[s]])}}catch(t){Q={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(Q)throw Q.error}}return T},Q.prototype.inheritAttributesFrom=function(t){var e=t.attributes,Q=e.get(\"displaystyle\"),r=e.get(\"scriptlevel\"),T=e.isSet(\"mathsize\")?{mathsize:[\"math\",e.get(\"mathsize\")]}:{},n=t.getProperty(\"texprimestyle\")||!1;this.setInheritedAttributes(T,Q,r,n)},Q.prototype.verifyTree=function(t){if(void 0===t&&(t=null),null!==t){this.verifyAttributes(t);var e=this.arity;t.checkArity&&e>=0&&e!==1/0&&(1===e&&0===this.childNodes.length||1!==e&&this.childNodes.length!==e)&&this.mError('Wrong number of children for \"'+this.kind+'\" node',t,!0),this.verifyChildren(t)}},Q.prototype.verifyAttributes=function(t){var e,Q;if(t.checkAttributes){var r=this.attributes,T=[];try{for(var n=o(r.getExplicitNames()),i=n.next();!i.done;i=n.next()){var a=i.value;\"data-\"===a.substr(0,5)||void 0!==r.getDefault(a)||a.match(/^(?:class|style|id|(?:xlink:)?href)$/)||T.push(a)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}T.length&&this.mError(\"Unknown attributes for \"+this.kind+\" node: \"+T.join(\", \"),t)}},Q.prototype.verifyChildren=function(t){var e,Q;try{for(var r=o(this.childNodes),T=r.next();!T.done;T=r.next()){T.value.verifyTree(t)}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}},Q.prototype.mError=function(t,e,Q){if(void 0===Q&&(Q=!1),this.parent&&this.parent.isKind(\"merror\"))return null;var r=this.factory.create(\"merror\");if(e.fullErrors||Q){var T=this.factory.create(\"mtext\"),n=this.factory.create(\"text\");n.setText(e.fullErrors?t:this.kind),T.appendChild(n),r.appendChild(T),this.parent.replaceChild(r,this)}else this.parent.replaceChild(r,this),r.appendChild(this);return r},Q.defaults={mathbackground:a.INHERIT,mathcolor:a.INHERIT,mathsize:a.INHERIT,dir:a.INHERIT},Q.noInherit={mstyle:{mpadded:{width:!0,height:!0,depth:!0,lspace:!0,voffset:!0},mtable:{width:!0,height:!0,depth:!0,align:!0}},maligngroup:{mrow:{groupalign:!0},mtable:{groupalign:!0}}},Q.alwaysInherit={scriptminsize:!0,scriptsizemultiplier:!0},Q.verifyDefaults={checkArity:!0,checkAttributes:!1,fullErrors:!1,fixMmultiscripts:!0,fixMtables:!0},Q}(s.AbstractNode);e.AbstractMmlNode=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"isToken\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.getText=function(){var t,e,Q=\"\";try{for(var r=o(this.childNodes),T=r.next();!T.done;T=r.next()){var n=T.value;n instanceof L&&(Q+=n.getText())}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return Q},e.prototype.setChildInheritedAttributes=function(t,e,Q,r){var T,n;try{for(var i=o(this.childNodes),a=i.next();!a.done;a=i.next()){var s=a.value;s instanceof u&&s.setInheritedAttributes(t,e,Q,r)}}catch(t){T={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(T)throw T.error}}},e.prototype.walkTree=function(t,e){var Q,r;t(this,e);try{for(var T=o(this.childNodes),n=T.next();!n.done;n=T.next()){var i=n.value;i instanceof u&&i.walkTree(t,e)}}catch(t){Q={error:t}}finally{try{n&&!n.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}return e},e.defaults=n(n({},u.defaults),{mathvariant:\"normal\",mathsize:a.INHERIT}),e}(u);e.AbstractMmlTokenNode=p;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"isSpacelike\",{get:function(){return this.childNodes[0].isSpacelike},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isEmbellished\",{get:function(){return this.childNodes[0].isEmbellished},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return-1},enumerable:!1,configurable:!0}),e.prototype.core=function(){return this.childNodes[0]},e.prototype.coreMO=function(){return this.childNodes[0].coreMO()},e.prototype.setTeXclass=function(t){return t=this.childNodes[0].setTeXclass(t),this.updateTeXclass(this.childNodes[0]),t},e.defaults=u.defaults,e}(u);e.AbstractMmlLayoutNode=h;var f=function(t){function Q(){return null!==t&&t.apply(this,arguments)||this}return T(Q,t),Object.defineProperty(Q.prototype,\"isEmbellished\",{get:function(){return this.childNodes[0].isEmbellished},enumerable:!1,configurable:!0}),Q.prototype.core=function(){return this.childNodes[0]},Q.prototype.coreMO=function(){return this.childNodes[0].coreMO()},Q.prototype.setTeXclass=function(t){var Q,r;this.getPrevClass(t),this.texClass=e.TEXCLASS.ORD;var T=this.childNodes[0];T?this.isEmbellished||T.isKind(\"mi\")?(t=T.setTeXclass(t),this.updateTeXclass(this.core())):(T.setTeXclass(null),t=this):t=this;try{for(var n=o(this.childNodes.slice(1)),i=n.next();!i.done;i=n.next()){var a=i.value;a&&a.setTeXclass(null)}}catch(t){Q={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(Q)throw Q.error}}return t},Q.defaults=u.defaults,Q}(u);e.AbstractMmlBaseNode=f;var d=function(t){function Q(){return null!==t&&t.apply(this,arguments)||this}return T(Q,t),Object.defineProperty(Q.prototype,\"isToken\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"isEmbellished\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"isSpacelike\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"linebreakContainer\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"hasNewLine\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"arity\",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"isInferred\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"notParent\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"Parent\",{get:function(){return this.parent},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"texClass\",{get:function(){return e.TEXCLASS.NONE},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"prevClass\",{get:function(){return e.TEXCLASS.NONE},enumerable:!1,configurable:!0}),Object.defineProperty(Q.prototype,\"prevLevel\",{get:function(){return 0},enumerable:!1,configurable:!0}),Q.prototype.hasSpacingAttributes=function(){return!1},Object.defineProperty(Q.prototype,\"attributes\",{get:function(){return null},enumerable:!1,configurable:!0}),Q.prototype.core=function(){return this},Q.prototype.coreMO=function(){return this},Q.prototype.coreIndex=function(){return 0},Q.prototype.childPosition=function(){return 0},Q.prototype.setTeXclass=function(t){return t},Q.prototype.texSpacing=function(){return\"\"},Q.prototype.setInheritedAttributes=function(t,e,Q,r){},Q.prototype.inheritAttributesFrom=function(t){},Q.prototype.verifyTree=function(t){},Q.prototype.mError=function(t,e,Q){void 0===Q&&(Q=!1)},Q}(s.AbstractEmptyNode);e.AbstractMmlEmptyNode=d;var L=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.text=\"\",e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"text\"},enumerable:!1,configurable:!0}),e.prototype.getText=function(){return this.text},e.prototype.setText=function(t){return this.text=t,this},e.prototype.toString=function(){return this.text},e}(d);e.TextNode=L;var H=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.xml=null,e.adaptor=null,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"XML\"},enumerable:!1,configurable:!0}),e.prototype.getXML=function(){return this.xml},e.prototype.setXML=function(t,e){return void 0===e&&(e=null),this.xml=t,this.adaptor=e,this},e.prototype.getSerializedXML=function(){return this.adaptor.outerHTML(this.xml)},e.prototype.toString=function(){return\"XML data\"},e}(d);e.XMLNode=H},function(t,e,Q){\"use strict\";(function(t){var Q=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};function r(t){return\"object\"==typeof t&&null!==t}function T(t,e){var n,o;try{for(var i=Q(Object.keys(e)),a=i.next();!a.done;a=i.next()){var s=a.value;\"__esModule\"!==s&&(!r(t[s])||!r(e[s])||e[s]instanceof Promise?null!==e[s]&&void 0!==e[s]&&(t[s]=e[s]):T(t[s],e[s]))}}catch(t){n={error:t}}finally{try{a&&!a.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}return t}Object.defineProperty(e,\"__esModule\",{value:!0}),e.MathJax=e.combineWithMathJax=e.combineDefaults=e.combineConfig=e.isObject=void 0,e.isObject=r,e.combineConfig=T,e.combineDefaults=function t(e,T,n){var o,i;e[T]||(e[T]={}),e=e[T];try{for(var a=Q(Object.keys(n)),s=a.next();!s.done;s=a.next()){var l=s.value;r(e[l])&&r(n[l])?t(e,l,n[l]):null==e[l]&&null!=n[l]&&(e[l]=n[l])}}catch(t){o={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}return e},e.combineWithMathJax=function(t){return T(e.MathJax,t)},void 0===t.MathJax&&(t.MathJax={}),t.MathJax.version||(t.MathJax={version:\"3.1.2\",_:{},config:t.MathJax}),e.MathJax=t.MathJax}).call(this,Q(271))},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ParserConfiguration=e.ConfigurationHandler=e.Configuration=void 0;var n,o=Q(7),i=Q(33),a=Q(30),s=Q(21),l=Q(20),c=function(){function t(t,e,Q,r,T,n,o,i,a,s,l,c){void 0===e&&(e={}),void 0===Q&&(Q={}),void 0===r&&(r={}),void 0===T&&(T={}),void 0===n&&(n={}),void 0===o&&(o={}),void 0===i&&(i=[]),void 0===a&&(a=[]),void 0===s&&(s=null),void 0===l&&(l=null),this.name=t,this.handler=e,this.fallback=Q,this.items=r,this.tags=T,this.options=n,this.nodes=o,this.preprocessors=i,this.postprocessors=a,this.initMethod=s,this.configMethod=l,this.priority=c,this.handler=Object.assign({character:[],delimiter:[],macro:[],environment:[]},e)}return t.makeProcessor=function(t,e){return Array.isArray(t)?t:[t,e]},t._create=function(e,Q){var r=this;void 0===Q&&(Q={});var T=Q.priority||s.PrioritizedList.DEFAULTPRIORITY,n=Q.init?this.makeProcessor(Q.init,T):null,o=Q.config?this.makeProcessor(Q.config,T):null,i=(Q.preprocessors||[]).map((function(t){return r.makeProcessor(t,T)})),a=(Q.postprocessors||[]).map((function(t){return r.makeProcessor(t,T)}));return new t(e,Q.handler||{},Q.fallback||{},Q.items||{},Q.tags||{},Q.options||{},Q.nodes||{},i,a,n,o,T)},t.create=function(e,Q){void 0===Q&&(Q={});var r=t._create(e,Q);return n.set(e,r),r},t.local=function(e){return void 0===e&&(e={}),t._create(\"\",e)},Object.defineProperty(t.prototype,\"init\",{get:function(){return this.initMethod?this.initMethod[0]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"config\",{get:function(){return this.configMethod?this.configMethod[0]:null},enumerable:!1,configurable:!0}),t}();e.Configuration=c,function(t){var e=new Map;t.set=function(t,Q){e.set(t,Q)},t.get=function(t){return e.get(t)},t.keys=function(){return e.keys()}}(n=e.ConfigurationHandler||(e.ConfigurationHandler={}));var u=function(){function t(t){var e,Q,T,n;this.initMethod=new a.FunctionList,this.configMethod=new a.FunctionList,this.configurations=new s.PrioritizedList,this.handlers=new i.SubHandlers,this.items={},this.tags={},this.options={},this.nodes={};try{for(var o=r(t.slice().reverse()),l=o.next();!l.done;l=o.next()){var c=l.value;this.addPackage(c)}}catch(t){e={error:t}}finally{try{l&&!l.done&&(Q=o.return)&&Q.call(o)}finally{if(e)throw e.error}}try{for(var u=r(this.configurations),p=u.next();!p.done;p=u.next()){var h=p.value,f=h.item,d=h.priority;this.append(f,d)}}catch(t){T={error:t}}finally{try{p&&!p.done&&(n=u.return)&&n.call(u)}finally{if(T)throw T.error}}}return t.prototype.init=function(){this.initMethod.execute(this)},t.prototype.config=function(t){var e,Q;this.configMethod.execute(this,t);try{for(var T=r(this.configurations),n=T.next();!n.done;n=T.next()){var o=n.value;this.addFilters(t,o.item)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}},t.prototype.addPackage=function(t){var e=\"string\"==typeof t?t:t[0],Q=n.get(e);Q&&this.configurations.add(Q,\"string\"==typeof t?Q.priority:t[1])},t.prototype.add=function(t,e,Q){var T,n;void 0===Q&&(Q={}),this.append(t),this.configurations.add(t,t.priority),this.init();var i=e.parseOptions;i.nodeFactory.setCreators(t.nodes);try{for(var a=r(Object.keys(t.items)),s=a.next();!s.done;s=a.next()){var c=s.value;i.itemFactory.setNodeClass(c,t.items[c])}}catch(t){T={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(T)throw T.error}}l.TagsFactory.addTags(t.tags),o.defaultOptions(i.options,t.options),o.userOptions(i.options,Q),this.addFilters(e,t),t.config&&t.config(this,e)},t.prototype.append=function(t,e){e=e||t.priority,t.initMethod&&this.initMethod.add(t.initMethod[0],t.initMethod[1]),t.configMethod&&this.configMethod.add(t.configMethod[0],t.configMethod[1]),this.handlers.add(t.handler,t.fallback,e),Object.assign(this.items,t.items),Object.assign(this.tags,t.tags),o.defaultOptions(this.options,t.options),Object.assign(this.nodes,t.nodes)},t.prototype.addFilters=function(t,e){var Q,n,o,i;try{for(var a=r(e.preprocessors),s=a.next();!s.done;s=a.next()){var l=T(s.value,2),c=l[0],u=l[1];t.preFilters.add(c,u)}}catch(t){Q={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(Q)throw Q.error}}try{for(var p=r(e.postprocessors),h=p.next();!h.done;h=p.next()){var f=T(h.value,2),d=f[0];u=f[1];t.postFilters.add(d,u)}}catch(t){o={error:t}}finally{try{h&&!h.done&&(i=p.return)&&i.call(p)}finally{if(o)throw o.error}}},t}();e.ParserConfiguration=u},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.EnvironmentMap=e.CommandMap=e.MacroMap=e.DelimiterMap=e.CharacterMap=e.AbstractParseMap=e.RegExpMap=e.AbstractSymbolMap=void 0;var a=Q(26),s=Q(33),l=function(){function t(t,e){this._name=t,this._parser=e,s.MapHandler.register(this)}return Object.defineProperty(t.prototype,\"name\",{get:function(){return this._name},enumerable:!1,configurable:!0}),t.prototype.parserFor=function(t){return this.contains(t)?this.parser:null},t.prototype.parse=function(t){var e=n(t,2),Q=e[0],r=e[1],T=this.parserFor(r),o=this.lookup(r);return T&&o?T(Q,o)||!0:null},Object.defineProperty(t.prototype,\"parser\",{get:function(){return this._parser},set:function(t){this._parser=t},enumerable:!1,configurable:!0}),t}();e.AbstractSymbolMap=l;var c=function(t){function e(e,Q,r){var T=t.call(this,e,Q)||this;return T._regExp=r,T}return T(e,t),e.prototype.contains=function(t){return this._regExp.test(t)},e.prototype.lookup=function(t){return this.contains(t)?t:null},e}(l);e.RegExpMap=c;var u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.map=new Map,e}return T(e,t),e.prototype.lookup=function(t){return this.map.get(t)},e.prototype.contains=function(t){return this.map.has(t)},e.prototype.add=function(t,e){this.map.set(t,e)},e.prototype.remove=function(t){this.map.delete(t)},e}(l);e.AbstractParseMap=u;var p=function(t){function e(e,Q,r){var T,i,s=t.call(this,e,Q)||this;try{for(var l=o(Object.keys(r)),c=l.next();!c.done;c=l.next()){var u=c.value,p=r[u],h=n(\"string\"==typeof p?[p,null]:p,2),f=h[0],d=h[1],L=new a.Symbol(u,f,d);s.add(u,L)}}catch(t){T={error:t}}finally{try{c&&!c.done&&(i=l.return)&&i.call(l)}finally{if(T)throw T.error}}return s}return T(e,t),e}(u);e.CharacterMap=p;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.parse=function(e){var Q=n(e,2),r=Q[0],T=Q[1];return t.prototype.parse.call(this,[r,\"\\\\\"+T])},e}(p);e.DelimiterMap=h;var f=function(t){function e(e,Q,r){var T,i,s=t.call(this,e,null)||this;try{for(var l=o(Object.keys(Q)),c=l.next();!c.done;c=l.next()){var u=c.value,p=Q[u],h=n(\"string\"==typeof p?[p]:p),f=h[0],d=h.slice(1),L=new a.Macro(u,r[f],d);s.add(u,L)}}catch(t){T={error:t}}finally{try{c&&!c.done&&(i=l.return)&&i.call(l)}finally{if(T)throw T.error}}return s}return T(e,t),e.prototype.parserFor=function(t){var e=this.lookup(t);return e?e.func:null},e.prototype.parse=function(t){var e=n(t,2),Q=e[0],r=e[1],T=this.lookup(r),o=this.parserFor(r);return T&&o?o.apply(void 0,i([Q,T.symbol],T.args))||!0:null},e}(u);e.MacroMap=f;var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.parse=function(t){var e=n(t,2),Q=e[0],r=e[1],T=this.lookup(r),o=this.parserFor(r);if(!T||!o)return null;if(!o)return null;var a=Q.currentCS;Q.currentCS=\"\\\\\"+r;var s=o.apply(void 0,i([Q,\"\\\\\"+T.symbol],T.args));return Q.currentCS=a,s||!0},e}(f);e.CommandMap=d;var L=function(t){function e(e,Q,r,T){var n=t.call(this,e,r,T)||this;return n.parser=Q,n}return T(e,t),e.prototype.parse=function(t){var e=n(t,2),Q=e[0],r=e[1],T=this.lookup(r),o=this.parserFor(r);return T&&o?(this.parser(Q,T.symbol,o,T.args),!0):null},e}(f);e.EnvironmentMap=L},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGWrapper=void 0;var i=Q(168),a=Q(50),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.element=null,e}return T(e,t),e.prototype.toSVG=function(t){this.addChildren(this.standardSVGnode(t))},e.prototype.addChildren=function(t){var e,Q,r=0;try{for(var T=n(this.childNodes),o=T.next();!o.done;o=T.next()){var i=o.value;i.toSVG(t),i.element&&i.place(r+i.bbox.L*i.bbox.rscale,0),r+=(i.bbox.L+i.bbox.w+i.bbox.R)*i.bbox.rscale}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}},e.prototype.standardSVGnode=function(t){var e=this.createSVGnode(t);return this.handleStyles(),this.handleScale(),this.handleColor(),this.handleAttributes(),e},e.prototype.createSVGnode=function(t){var e=this.node.attributes.get(\"href\");if(e){t=this.adaptor.append(t,this.svg(\"a\",{href:e}));var Q=this.getBBox(),r=Q.h,T=Q.d,n=Q.w;this.adaptor.append(t,this.svg(\"rect\",{\"data-hitbox\":!0,fill:\"none\",stroke:\"none\",\"pointer-events\":\"all\",width:this.fixed(n),height:this.fixed(r+T),y:this.fixed(-T)}))}return this.element=this.adaptor.append(t,this.svg(\"g\",{\"data-mml-node\":this.node.kind})),this.element},e.prototype.handleStyles=function(){if(this.styles){var t=this.styles.cssText;t&&this.adaptor.setAttribute(this.element,\"style\",t)}},e.prototype.handleScale=function(){if(1!==this.bbox.rscale){var t=\"scale(\"+this.fixed(this.bbox.rscale/1e3,3)+\")\";this.adaptor.setAttribute(this.element,\"transform\",t)}},e.prototype.handleColor=function(){var t=this.adaptor,e=this.node.attributes,Q=e.getExplicit(\"mathcolor\"),r=e.getExplicit(\"color\"),T=e.getExplicit(\"mathbackground\"),n=e.getExplicit(\"background\");if((Q||r)&&(t.setAttribute(this.element,\"fill\",Q||r),t.setAttribute(this.element,\"stroke\",Q||r)),T||n){var o=this.getBBox(),i=o.h,a=o.d,s=o.w,l=this.svg(\"rect\",{fill:T||n,x:0,y:this.fixed(-a),width:this.fixed(s),height:this.fixed(i+a),\"data-bgcolor\":!0}),c=t.firstChild(this.element);c?t.insert(l,c):t.append(this.element,l)}},e.prototype.handleAttributes=function(){var t,Q,r,T,o=this.node.attributes,i=o.getAllDefaults(),a=e.skipAttributes;try{for(var s=n(o.getExplicitNames()),l=s.next();!l.done;l=s.next()){var c=l.value;!1!==a[c]&&(c in i||a[c]||this.adaptor.hasAttribute(this.element,c))||this.adaptor.setAttribute(this.element,c,o.getExplicit(c))}}catch(e){t={error:e}}finally{try{l&&!l.done&&(Q=s.return)&&Q.call(s)}finally{if(t)throw t.error}}if(o.get(\"class\")){var u=o.get(\"class\").trim().split(/ +/);try{for(var p=n(u),h=p.next();!h.done;h=p.next()){var f=h.value;this.adaptor.addClass(this.element,f)}}catch(t){r={error:t}}finally{try{h&&!h.done&&(T=p.return)&&T.call(p)}finally{if(r)throw r.error}}}},e.prototype.place=function(t,e,Q){if(void 0===Q&&(Q=null),t||e){Q||(Q=this.element);var r=this.adaptor.getAttribute(Q,\"transform\")||\"\";r=\"translate(\"+this.fixed(t)+\", \"+this.fixed(e)+\")\"+(r?\" \"+r:\"\"),this.adaptor.setAttribute(Q,\"transform\",r)}},e.prototype.placeChar=function(t,e,Q,r,T){var i,a;void 0===T&&(T=null),null===T&&(T=this.variant);var s=t.toString(16).toUpperCase(),l=o(this.getVariantChar(T,t),4),c=l[2],u=l[3];if(\"p\"in u){var p=u.p?\"M\"+u.p+\"Z\":\"\";this.place(e,Q,this.adaptor.append(r,this.charNode(T,s,p)))}else if(\"c\"in u){var h=this.adaptor.append(r,this.svg(\"g\",{\"data-c\":s}));this.place(e,Q,h),e=0;try{for(var f=n(this.unicodeChars(u.c,T)),d=f.next();!d.done;d=f.next()){var L=d.value;e+=this.placeChar(L,e,Q,h,T)}}catch(t){i={error:t}}finally{try{d&&!d.done&&(a=f.return)&&a.call(f)}finally{if(i)throw i.error}}}else if(u.unknown){var H=String.fromCodePoint(t),m=this.adaptor.append(r,this.jax.unknownText(H,T));return this.place(e,Q,m),this.jax.measureTextNodeWithCache(m,H,T).w}return c},e.prototype.charNode=function(t,e,Q){return\"none\"!==this.jax.options.fontCache?this.useNode(t,e,Q):this.pathNode(e,Q)},e.prototype.pathNode=function(t,e){return this.svg(\"path\",{\"data-c\":t,d:e})},e.prototype.useNode=function(t,e,Q){var r=this.svg(\"use\"),T=\"#\"+this.jax.fontCache.cachePath(t,e,Q);return this.adaptor.setAttribute(r,\"href\",T,a.XLINKNS),r},e.prototype.drawBBox=function(){var t=this.getBBox(),e=t.w,Q=t.h,r=t.d,T=this.svg(\"g\",{style:{opacity:.25}},[this.svg(\"rect\",{fill:\"red\",height:this.fixed(Q),width:this.fixed(e)}),this.svg(\"rect\",{fill:\"green\",height:this.fixed(r),width:this.fixed(e),y:this.fixed(-r)})]),n=this.element||this.parent.element;this.adaptor.append(n,T)},e.prototype.html=function(t,e,Q){return void 0===e&&(e={}),void 0===Q&&(Q=[]),this.jax.html(t,e,Q)},e.prototype.svg=function(t,e,Q){return void 0===e&&(e={}),void 0===Q&&(Q=[]),this.jax.svg(t,e,Q)},e.prototype.text=function(t){return this.jax.text(t)},e.prototype.fixed=function(t,e){return void 0===e&&(e=1),this.jax.fixed(1e3*t,e)},e.kind=\"unknown\",e}(i.CommonWrapper);e.SVGWrapper=s},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(e,Q){for(var r=[],T=2;T<arguments.length;T++)r[T-2]=arguments[T];this.id=e,this.message=t.processString(Q,r)}return t.processString=function(e,Q){for(var r=e.split(t.pattern),T=1,n=r.length;T<n;T+=2){var o=r[T].charAt(0);if(o>=\"0\"&&o<=\"9\")r[T]=Q[parseInt(r[T],10)-1],\"number\"==typeof r[T]&&(r[T]=r[T].toString());else if(\"{\"===o){if((o=r[T].substr(1))>=\"0\"&&o<=\"9\")r[T]=Q[parseInt(r[T].substr(1,r[T].length-2),10)-1],\"number\"==typeof r[T]&&(r[T]=r[T].toString());else r[T].match(/^\\{([a-z]+):%(\\d+)\\|(.*)\\}$/)&&(r[T]=\"%\"+r[T])}null==r[T]&&(r[T]=\"???\")}return r.join(\"\")},t.pattern=/%(\\d+|\\{\\d+\\}|\\{[a-z]+:\\%\\d+(?:\\|(?:%\\{\\d+\\}|%.|[^\\}])*)+\\}|.)/g,t}();e.default=r},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__createBinding||(Object.create?function(t,e,Q,r){void 0===r&&(r=Q),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[Q]}})}:function(t,e,Q,r){void 0===r&&(r=Q),t[r]=e[Q]}),o=this&&this.__exportStar||function(t,e){for(var Q in t)\"default\"===Q||e.hasOwnProperty(Q)||n(e,t,Q)},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AddPaths=e.SVGFontData=void 0;var a=Q(28);o(Q(28),e);var s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.charOptions=function(e,Q){return t.charOptions.call(this,e,Q)},e}(a.FontData);e.SVGFontData=s,e.AddPaths=function(t,e,Q){var r,T,n,o;try{for(var a=i(Object.keys(e)),l=a.next();!l.done;l=a.next()){var c=l.value,u=parseInt(c);s.charOptions(t,u).p=e[u]}}catch(t){r={error:t}}finally{try{l&&!l.done&&(T=a.return)&&T.call(a)}finally{if(r)throw r.error}}try{for(var p=i(Object.keys(Q)),h=p.next();!h.done;h=p.next()){c=h.value,u=parseInt(c);s.charOptions(t,u).c=Q[u]}}catch(t){n={error:t}}finally{try{h&&!h.done&&(o=p.return)&&o.call(p)}finally{if(n)throw n.error}}return t}},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(T(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.separateOptions=e.selectOptionsFromKeys=e.selectOptions=e.userOptions=e.defaultOptions=e.insert=e.copy=e.keys=e.makeArray=e.expandable=e.Expandable=e.REMOVE=e.APPEND=void 0;var o={}.constructor;function i(t){return\"object\"==typeof t&&null!==t&&(t.constructor===o||t.constructor===a)}e.APPEND=\"[+]\",e.REMOVE=\"[-]\";var a=function(){};function s(t){return Object.assign(Object.create(a.prototype),t)}function l(t){return t?Object.keys(t).concat(Object.getOwnPropertySymbols(t)):[]}function c(t){var e,Q,T={};try{for(var n=r(l(t)),o=n.next();!o.done;o=n.next()){var p=o.value,h=Object.getOwnPropertyDescriptor(t,p),f=h.value;Array.isArray(f)?h.value=u([],f,!1):i(f)&&(h.value=c(f)),h.enumerable&&(T[p]=h)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}return Object.defineProperties(t.constructor===a?s({}):{},T)}function u(t,Q,T){var o,s;void 0===T&&(T=!0);var p=function(r){if(T&&void 0===t[r]&&t.constructor!==a)throw\"symbol\"==typeof r&&(r=r.toString()),new Error('Invalid option \"'+r+'\" (no default value).');var o=Q[r],s=t[r];if(!i(o)||null===s||\"object\"!=typeof s&&\"function\"!=typeof s)Array.isArray(o)?(t[r]=[],u(t[r],o,!1)):i(o)?t[r]=c(o):t[r]=o;else{var p=l(o);Array.isArray(s)&&(1===p.length&&(p[0]===e.APPEND||p[0]===e.REMOVE)&&Array.isArray(o[p[0]])||2===p.length&&p.sort().join(\",\")===e.APPEND+\",\"+e.REMOVE&&Array.isArray(o[e.APPEND])&&Array.isArray(o[e.REMOVE]))?(o[e.REMOVE]&&(s=t[r]=s.filter((function(t){return o[e.REMOVE].indexOf(t)<0}))),o[e.APPEND]&&(t[r]=n(s,o[e.APPEND]))):u(s,o,T)}};try{for(var h=r(l(Q)),f=h.next();!f.done;f=h.next()){p(f.value)}}catch(t){o={error:t}}finally{try{f&&!f.done&&(s=h.return)&&s.call(h)}finally{if(o)throw o.error}}return t}function p(t){for(var e,Q,T=[],n=1;n<arguments.length;n++)T[n-1]=arguments[n];var o={};try{for(var i=r(T),a=i.next();!a.done;a=i.next()){var s=a.value;t.hasOwnProperty(s)&&(o[s]=t[s])}}catch(t){e={error:t}}finally{try{a&&!a.done&&(Q=i.return)&&Q.call(i)}finally{if(e)throw e.error}}return o}e.Expandable=a,e.expandable=s,e.makeArray=function(t){return Array.isArray(t)?t:[t]},e.keys=l,e.copy=c,e.insert=u,e.defaultOptions=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q];return e.forEach((function(e){return u(t,e,!1)})),t},e.userOptions=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q];return e.forEach((function(e){return u(t,e,!0)})),t},e.selectOptions=p,e.selectOptionsFromKeys=function(t,e){return p.apply(void 0,n([t],Object.keys(e)))},e.separateOptions=function(t){for(var e,Q,T,n,o=[],i=1;i<arguments.length;i++)o[i-1]=arguments[i];var a=[];try{for(var s=r(o),l=s.next();!l.done;l=s.next()){var c=l.value,u={},p={};try{for(var h=(T=void 0,r(Object.keys(t||{}))),f=h.next();!f.done;f=h.next()){var d=f.value;(void 0===c[d]?p:u)[d]=t[d]}}catch(t){T={error:t}}finally{try{f&&!f.done&&(n=h.return)&&n.call(h)}finally{if(T)throw T.error}}a.push(u),t=p}}catch(t){e={error:t}}finally{try{l&&!l.done&&(Q=s.return)&&Q.call(s)}finally{if(e)throw e.error}}return a.unshift(t),a}},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(T(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o,i=Q(0),a=Q(31);!function(t){var e=new Map([[\"autoOP\",!0],[\"fnOP\",!0],[\"movesupsub\",!0],[\"subsupOK\",!0],[\"texprimestyle\",!0],[\"useHeight\",!0],[\"variantForm\",!0],[\"withDelims\",!0],[\"open\",!0],[\"close\",!0]]);function Q(t,Q){var T,n;try{for(var o=r(Object.keys(Q)),i=o.next();!i.done;i=o.next()){var a=i.value,s=Q[a];\"texClass\"===a?(t.texClass=s,t.setProperty(a,s)):\"movablelimits\"===a?(t.setProperty(\"movablelimits\",s),(t.isKind(\"mo\")||t.isKind(\"mstyle\"))&&t.attributes.set(\"movablelimits\",s)):\"inferred\"===a||(e.has(a)?t.setProperty(a,s):t.attributes.set(a,s))}}catch(t){T={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(T)throw T.error}}}function T(t,e,Q){t.childNodes[e]=Q,Q&&(Q.parent=t)}function o(t,e){return t.isKind(e)}t.createEntity=function(t){return String.fromCodePoint(parseInt(t,16))},t.getChildren=function(t){return t.childNodes},t.getText=function(t){return t.getText()},t.appendChildren=function(t,e){var Q,T;try{for(var n=r(e),o=n.next();!o.done;o=n.next()){var i=o.value;t.appendChild(i)}}catch(t){Q={error:t}}finally{try{o&&!o.done&&(T=n.return)&&T.call(n)}finally{if(Q)throw Q.error}}},t.setAttribute=function(t,e,Q){t.attributes.set(e,Q)},t.setProperty=function(t,e,Q){t.setProperty(e,Q)},t.setProperties=Q,t.getProperty=function(t,e){return t.getProperty(e)},t.getAttribute=function(t,e){return t.attributes.get(e)},t.removeProperties=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q];t.removeProperty.apply(t,n(e))},t.getChildAt=function(t,e){return t.childNodes[e]},t.setChild=T,t.copyChildren=function(t,e){for(var Q=t.childNodes,r=0;r<Q.length;r++)T(e,r,Q[r])},t.copyAttributes=function(t,e){e.attributes=t.attributes,Q(e,t.getAllProperties())},t.isType=o,t.isEmbellished=function(t){return t.isEmbellished},t.getTexClass=function(t){return t.texClass},t.getCoreMO=function(t){return t.coreMO()},t.isNode=function(t){return t instanceof i.AbstractMmlNode||t instanceof i.AbstractMmlEmptyNode},t.isInferred=function(t){return t.isInferred},t.getForm=function(t){var e,Q;if(!o(t,\"mo\"))return null;var T=t,n=T.getForms();try{for(var i=r(n),s=i.next();!s.done;s=i.next()){var l=s.value,c=a.MmlMo.OPTABLE[l][T.getText()];if(c)return c}}catch(t){e={error:t}}finally{try{s&&!s.done&&(Q=i.return)&&Q.call(i)}finally{if(e)throw e.error}}return null}}(o||(o={})),e.default=o},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},T=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var n,o=Q(0),i=Q(8),a=Q(12),s=Q(5),l=Q(19);Q(272),function(t){var e={em:function(t){return t},ex:function(t){return.43*t},pt:function(t){return t/10},pc:function(t){return 1.2*t},px:function(t){return 7.2*t/72},in:function(t){return 7.2*t},cm:function(t){return 7.2*t/2.54},mm:function(t){return 7.2*t/25.4},mu:function(t){return t/18}},Q=\"([-+]?([.,]\\\\d+|\\\\d+([.,]\\\\d*)?))\",n=\"(pt|em|ex|mu|px|mm|cm|in|pc)\",c=RegExp(\"^\\\\s*\"+Q+\"\\\\s*\"+n+\"\\\\s*$\"),u=RegExp(\"^\\\\s*\"+Q+\"\\\\s*\"+n+\" ?\");function p(t,Q){void 0===Q&&(Q=!1);var T=t.match(Q?u:c);return T?function(t){var Q=r(t,3),T=Q[0],n=Q[1],o=Q[2];if(\"mu\"!==n)return[T,n,o];return[h(e[n](parseFloat(T||\"1\"))).slice(0,-2),\"em\",o]}([T[1].replace(/,/,\".\"),T[4],T[0].length]):[null,null,0]}function h(t){return Math.abs(t)<6e-4?\"0em\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"em\"}function f(t,e,Q){\"{\"!==e&&\"}\"!==e||(e=\"\\\\\"+e);var r=\"{\\\\bigg\"+Q+\" \"+e+\"}\",T=\"{\\\\big\"+Q+\" \"+e+\"}\";return new a.default(\"\\\\mathchoice\"+r+T+T+T,{},t).mml()}function d(t,e,Q){e=e.replace(/^\\s+/,l.entities.nbsp).replace(/\\s+$/,l.entities.nbsp);var r=t.create(\"text\",e);return t.create(\"node\",\"mtext\",[],Q,r)}function L(t,e,Q){if(Q.match(/^[a-z]/i)&&e.match(/(^|[^\\\\])(\\\\\\\\)*\\\\[a-z]+$/i)&&(e+=\" \"),e.length+Q.length>t.configuration.options.maxBuffer)throw new s.default(\"MaxBufferSize\",\"MathJax internal buffer size exceeded; is there a recursive macro call?\");return e+Q}function H(t,e){for(;e>0;)t=t.trim().slice(1,-1),e--;return t.trim()}function m(t,e){for(var Q=t.length,r=0,T=\"\",n=0,o=0,i=!0,a=!1;n<Q;){var l=t[n++];switch(l){case\" \":break;case\"{\":i?o++:(a=!1,o>r&&(o=r)),r++;break;case\"}\":r&&r--,(i||a)&&(o--,a=!0),i=!1;break;default:if(!r&&-1!==e.indexOf(l))return[a?\"true\":H(T,o),l,t.slice(n)];i=!1,a=!1}T+=l}if(r)throw new s.default(\"ExtraOpenMissingClose\",\"Extra open brace or missing close brace\");return[a?\"true\":H(T,o),\"\",t.slice(n)]}t.matchDimen=p,t.dimen2em=function(t){var Q=r(p(t),2),T=Q[0],n=Q[1],o=parseFloat(T||\"1\"),i=e[n];return i?i(o):0},t.Em=h,t.fenced=function(t,e,Q,r,T){void 0===T&&(T=\"\");var n,s=t.nodeFactory,l=s.create(\"node\",\"mrow\",[],{open:e,close:r,texClass:o.TEXCLASS.INNER});if(T)n=new a.default(\"\\\\\"+T+\"l\"+e,t.parser.stack.env,t).mml();else{var c=s.create(\"text\",e);n=s.create(\"node\",\"mo\",[],{fence:!0,stretchy:!0,symmetric:!0,texClass:o.TEXCLASS.OPEN},c)}if(i.default.appendChildren(l,[n]),i.default.isType(Q,\"mrow\")&&i.default.isInferred(Q)?i.default.appendChildren(l,i.default.getChildren(Q)):i.default.appendChildren(l,[Q]),T)n=new a.default(\"\\\\\"+T+\"r\"+r,t.parser.stack.env,t).mml();else{var u=s.create(\"text\",r);n=s.create(\"node\",\"mo\",[],{fence:!0,stretchy:!0,symmetric:!0,texClass:o.TEXCLASS.CLOSE},u)}return i.default.appendChildren(l,[n]),l},t.fixedFence=function(t,e,Q,r){var T=t.nodeFactory.create(\"node\",\"mrow\",[],{open:e,close:r,texClass:o.TEXCLASS.ORD});return e&&i.default.appendChildren(T,[f(t,e,\"l\")]),i.default.isType(Q,\"mrow\")?i.default.appendChildren(T,i.default.getChildren(Q)):i.default.appendChildren(T,[Q]),r&&i.default.appendChildren(T,[f(t,r,\"r\")]),T},t.mathPalette=f,t.fixInitialMO=function(t,e){for(var Q=0,r=e.length;Q<r;Q++){var T=e[Q];if(T&&!i.default.isType(T,\"mspace\")&&(!i.default.isType(T,\"TeXAtom\")||i.default.getChildren(T)[0]&&i.default.getChildren(i.default.getChildren(T)[0]).length)){if(i.default.isEmbellished(T)||i.default.isType(T,\"TeXAtom\")&&i.default.getTexClass(T)===o.TEXCLASS.REL){var n=t.nodeFactory.create(\"node\",\"mi\");e.unshift(n)}break}}},t.internalMath=function(t,e,Q,r){if(t.configuration.options.internalMath)return t.configuration.options.internalMath(t,e,Q,r);var T,n,o=r||t.stack.env.font,i=o?{mathvariant:o}:{},l=[],c=0,u=0,p=\"\",h=0;if(e.match(/\\\\?[${}\\\\]|\\\\\\(|\\\\(eq)?ref\\s*\\{/)){for(;c<e.length;)if(\"$\"===(T=e.charAt(c++)))\"$\"===p&&0===h?(n=t.create(\"node\",\"TeXAtom\",[new a.default(e.slice(u,c-1),{},t.configuration).mml()]),l.push(n),p=\"\",u=c):\"\"===p&&(u<c-1&&l.push(d(t,e.slice(u,c-1),i)),p=\"$\",u=c);else if(\"{\"===T&&\"\"!==p)h++;else if(\"}\"===T)if(\"}\"===p&&0===h){var f=new a.default(e.slice(u,c),{},t.configuration).mml();n=t.create(\"node\",\"TeXAtom\",[f],i),l.push(n),p=\"\",u=c}else\"\"!==p&&h&&h--;else if(\"\\\\\"===T)if(\"\"===p&&e.substr(c).match(/^(eq)?ref\\s*\\{/)){var L=RegExp[\"$&\"].length;u<c-1&&l.push(d(t,e.slice(u,c-1),i)),p=\"}\",u=c-1,c+=L}else\"(\"===(T=e.charAt(c++))&&\"\"===p?(u<c-2&&l.push(d(t,e.slice(u,c-2),i)),p=\")\",u=c):\")\"===T&&\")\"===p&&0===h?(n=t.create(\"node\",\"TeXAtom\",[new a.default(e.slice(u,c-2),{},t.configuration).mml()]),l.push(n),p=\"\",u=c):T.match(/[${}\\\\]/)&&\"\"===p&&(c--,e=e.substr(0,c-1)+e.substr(c));if(\"\"!==p)throw new s.default(\"MathNotTerminated\",\"Math not terminated in text box\")}return u<e.length&&l.push(d(t,e.slice(u),i)),null!=Q?l=[t.create(\"node\",\"mstyle\",l,{displaystyle:!1,scriptlevel:Q})]:l.length>1&&(l=[t.create(\"node\",\"mrow\",l)]),l},t.internalText=d,t.trimSpaces=function(t){if(\"string\"!=typeof t)return t;var e=t.trim();return e.match(/\\\\$/)&&t.match(/ $/)&&(e+=\" \"),e},t.setArrayAlign=function(e,Q){return\"t\"===(Q=t.trimSpaces(Q||\"\"))?e.arraydef.align=\"baseline 1\":\"b\"===Q?e.arraydef.align=\"baseline -1\":\"c\"===Q?e.arraydef.align=\"center\":Q&&(e.arraydef.align=Q),e},t.substituteArgs=function(t,e,Q){for(var r=\"\",T=\"\",n=0;n<Q.length;){var o=Q.charAt(n++);if(\"\\\\\"===o)r+=o+Q.charAt(n++);else if(\"#\"===o)if(\"#\"===(o=Q.charAt(n++)))r+=o;else{if(!o.match(/[1-9]/)||parseInt(o,10)>e.length)throw new s.default(\"IllegalMacroParam\",\"Illegal macro parameter reference\");T=L(t,L(t,T,r),e[parseInt(o,10)-1]),r=\"\"}else r+=o}return L(t,T,r)},t.addArgs=L,t.checkEqnEnv=function(t){if(t.stack.global.eqnenv)throw new s.default(\"ErroneousNestingEq\",\"Erroneous nesting of equation structures\");t.stack.global.eqnenv=!0},t.MmlFilterAttribute=function(t,e,Q){return Q},t.getFontDef=function(t){var e=t.stack.env.font;return e?{mathvariant:e}:{}},t.keyvalOptions=function(t,e,Q){var n,o;void 0===e&&(e=null),void 0===Q&&(Q=!1);var i=function(t){var e,Q,T,n,o,i={},a=t;for(;a;)n=(e=r(m(a,[\"=\",\",\"]),3))[0],T=e[1],a=e[2],\"=\"===T?(o=(Q=r(m(a,[\",\"]),3))[0],T=Q[1],a=Q[2],o=\"false\"===o||\"true\"===o?JSON.parse(o):o,i[n]=o):n&&(i[n]=!0);return i}(t);if(e)try{for(var a=T(Object.keys(i)),l=a.next();!l.done;l=a.next()){var c=l.value;if(!e.hasOwnProperty(c)){if(Q)throw new s.default(\"InvalidOption\",\"Invalid optional argument: %1\",c);delete i[c]}}}catch(t){n={error:t}}finally{try{l&&!l.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}return i}}(n||(n={})),e.default=n},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HtmlAttrs=e.HtmlClasses=void 0;function r(t){return\"CtxtMenu_\"+t}function T(t){return r(t)}function n(t){return r(t)}e.HtmlClasses={ATTACHED:T(\"Attached\"),CONTEXTMENU:T(\"ContextMenu\"),MENU:T(\"Menu\"),MENUARROW:T(\"MenuArrow\"),MENUACTIVE:T(\"MenuActive\"),MENUCHECK:T(\"MenuCheck\"),MENUCLOSE:T(\"MenuClose\"),MENUCOMBOBOX:T(\"MenuComboBox\"),MENUDISABLED:T(\"MenuDisabled\"),MENUFRAME:T(\"MenuFrame\"),MENUITEM:T(\"MenuItem\"),MENULABEL:T(\"MenuLabel\"),MENURADIOCHECK:T(\"MenuRadioCheck\"),MENUINPUTBOX:T(\"MenuInputBox\"),MENURULE:T(\"MenuRule\"),MENUSLIDER:T(\"MenuSlider\"),MOUSEPOST:T(\"MousePost\"),RTL:T(\"RTL\"),INFO:T(\"Info\"),INFOCLOSE:T(\"InfoClose\"),INFOCONTENT:T(\"InfoContent\"),INFOSIGNATURE:T(\"InfoSignature\"),INFOTITLE:T(\"InfoTitle\"),SLIDERVALUE:T(\"SliderValue\"),SLIDERBAR:T(\"SliderBar\"),SELECTION:T(\"Selection\"),SELECTIONBOX:T(\"SelectionBox\"),SELECTIONMENU:T(\"SelectionMenu\"),SELECTIONDIVIDER:T(\"SelectionDivider\"),SELECTIONITEM:T(\"SelectionItem\")},e.HtmlAttrs={COUNTER:n(\"Counter\"),KEYDOWNFUNC:n(\"keydownFunc\"),CONTEXTMENUFUNC:n(\"contextmenuFunc\"),OLDTAB:n(\"Oldtabindex\"),TOUCHFUNC:n(\"TouchFunc\")}},function(t,e,Q){\"use strict\";(function(t){var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CONFIG=e.MathJax=e.Loader=void 0;var T,n=Q(1),o=Q(29),i=Q(29);Object.defineProperty(e,\"Package\",{enumerable:!0,get:function(){return i.Package}}),Object.defineProperty(e,\"PackageError\",{enumerable:!0,get:function(){return i.PackageError}}),function(Q){Q.ready=function(){for(var t,e,Q=[],T=0;T<arguments.length;T++)Q[T]=arguments[T];0===Q.length&&(Q=Array.from(o.Package.packages.keys()));var n=[];try{for(var i=r(Q),a=i.next();!a.done;a=i.next()){var s=a.value,l=o.Package.packages.get(s)||new o.Package(s,!0);n.push(l.promise)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}return Promise.all(n)},Q.load=function(){for(var t,Q,T=[],n=0;n<arguments.length;n++)T[n]=arguments[n];if(0===T.length)return Promise.resolve();var i=[];try{for(var a=r(T),s=a.next();!s.done;s=a.next()){var l=s.value,c=o.Package.packages.get(l);c||(c=new o.Package(l)).provides(e.CONFIG.provides[l]),c.checkNoLoad(),i.push(c.promise)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(Q=a.return)&&Q.call(a)}finally{if(t)throw t.error}}return o.Package.loadAll(),Promise.all(i)},Q.preLoad=function(){for(var t,Q,T=[],n=0;n<arguments.length;n++)T[n]=arguments[n];try{for(var i=r(T),a=i.next();!a.done;a=i.next()){var s=a.value,l=o.Package.packages.get(s);l||(l=new o.Package(s,!0)).provides(e.CONFIG.provides[s]),l.loaded()}}catch(e){t={error:e}}finally{try{a&&!a.done&&(Q=i.return)&&Q.call(i)}finally{if(t)throw t.error}}},Q.defaultReady=function(){void 0!==e.MathJax.startup&&e.MathJax.config.startup.ready()},Q.getRoot=function(){var e=t+\"/../../es5\";if(\"undefined\"!=typeof document){var Q=document.currentScript||document.getElementById(\"MathJax-script\");Q&&(e=Q.src.replace(/\\/[^\\/]*$/,\"\"))}return e}}(T=e.Loader||(e.Loader={})),e.MathJax=n.MathJax,void 0===e.MathJax.loader&&(n.combineDefaults(e.MathJax.config,\"loader\",{paths:{mathjax:T.getRoot()},source:{},dependencies:{},provides:{},load:[],ready:T.defaultReady.bind(T),failed:function(t){return console.log(\"MathJax(\"+(t.package||\"?\")+\"): \"+t.message)},require:null}),n.combineWithMathJax({loader:T})),e.CONFIG=e.MathJax.config.loader}).call(this,\"/\")},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(T(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o=Q(9),i=Q(85),a=Q(5),s=Q(0),l=function(){function t(t,e,Q){var T,n;this._string=t,this.configuration=Q,this.macroCount=0,this.i=0,this.currentCS=\"\";var o,a=e.hasOwnProperty(\"isInner\"),s=e.isInner;if(delete e.isInner,e){o={};try{for(var l=r(Object.keys(e)),c=l.next();!c.done;c=l.next()){var u=c.value;o[u]=e[u]}}catch(t){T={error:t}}finally{try{c&&!c.done&&(n=l.return)&&n.call(l)}finally{if(T)throw T.error}}}this.configuration.pushParser(this),this.stack=new i.default(this.itemFactory,o,!a||s),this.Parse(),this.Push(this.itemFactory.create(\"stop\"))}return Object.defineProperty(t.prototype,\"options\",{get:function(){return this.configuration.options},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"itemFactory\",{get:function(){return this.configuration.itemFactory},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"tags\",{get:function(){return this.configuration.tags},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"string\",{get:function(){return this._string},set:function(t){this._string=t},enumerable:!1,configurable:!0}),t.prototype.parse=function(t,e){return this.configuration.handlers.get(t).parse(e)},t.prototype.lookup=function(t,e){return this.configuration.handlers.get(t).lookup(e)},t.prototype.contains=function(t,e){return this.configuration.handlers.get(t).contains(e)},t.prototype.toString=function(){var t,e,Q=\"\";try{for(var T=r(Array.from(this.configuration.handlers.keys())),n=T.next();!n.done;n=T.next()){var o=n.value;Q+=o+\": \"+this.configuration.handlers.get(o)+\"\\n\"}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}return Q},t.prototype.Parse=function(){for(var t;this.i<this.string.length;)t=this.getCodePoint(),this.i+=t.length,this.parse(\"character\",[this,t])},t.prototype.Push=function(t){t instanceof s.AbstractMmlNode&&t.isInferred?this.PushAll(t.childNodes):this.stack.Push(t)},t.prototype.PushAll=function(t){var e,Q;try{for(var T=r(t),n=T.next();!n.done;n=T.next()){var o=n.value;this.stack.Push(o)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}},t.prototype.mml=function(){if(!this.stack.Top().isKind(\"mml\"))return null;var t=this.stack.Top().First;return this.configuration.popParser(),t},t.prototype.convertDelimiter=function(t){var e=this.lookup(\"delimiter\",t);return e?e.char:null},t.prototype.getCodePoint=function(){var t=this.string.codePointAt(this.i);return void 0===t?\"\":String.fromCodePoint(t)},t.prototype.nextIsSpace=function(){return!!this.string.charAt(this.i).match(/\\s/)},t.prototype.GetNext=function(){for(;this.nextIsSpace();)this.i++;return this.getCodePoint()},t.prototype.GetCS=function(){var t=this.string.slice(this.i).match(/^(([a-z]+) ?|[\\uD800-\\uDBFF].|.)/i);return t?(this.i+=t[0].length,t[2]||t[1]):(this.i++,\" \")},t.prototype.GetArgument=function(t,e){switch(this.GetNext()){case\"\":if(!e)throw new a.default(\"MissingArgFor\",\"Missing argument for %1\",this.currentCS);return null;case\"}\":if(!e)throw new a.default(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\");return null;case\"\\\\\":return this.i++,\"\\\\\"+this.GetCS();case\"{\":for(var Q=++this.i,r=1;this.i<this.string.length;)switch(this.string.charAt(this.i++)){case\"\\\\\":this.i++;break;case\"{\":r++;break;case\"}\":if(0==--r)return this.string.slice(Q,this.i-1)}throw new a.default(\"MissingCloseBrace\",\"Missing close brace\")}var T=this.getCodePoint();return this.i+=T.length,T},t.prototype.GetBrackets=function(t,e){if(\"[\"!==this.GetNext())return e;for(var Q=++this.i,r=0;this.i<this.string.length;)switch(this.string.charAt(this.i++)){case\"{\":r++;break;case\"\\\\\":this.i++;break;case\"}\":if(r--<=0)throw new a.default(\"ExtraCloseLooking\",\"Extra close brace while looking for %1\",\"']'\");break;case\"]\":if(0===r)return this.string.slice(Q,this.i-1)}throw new a.default(\"MissingCloseBracket\",\"Could not find closing ']' for argument to %1\",this.currentCS)},t.prototype.GetDelimiter=function(t,e){var Q=this.GetNext();if(this.i+=Q.length,this.i<=this.string.length&&(\"\\\\\"===Q?Q+=this.GetCS():\"{\"===Q&&e&&(this.i--,Q=this.GetArgument(t)),this.contains(\"delimiter\",Q)))return this.convertDelimiter(Q);throw new a.default(\"MissingOrUnrecognizedDelim\",\"Missing or unrecognized delimiter for %1\",this.currentCS)},t.prototype.GetDimen=function(t){if(\"{\"===this.GetNext()){var e=this.GetArgument(t),Q=T(o.default.matchDimen(e),2),r=Q[0],n=Q[1];if(r)return r+n}else{e=this.string.slice(this.i);var i=T(o.default.matchDimen(e,!0),3),s=(r=i[0],n=i[1],i[2]);if(r)return this.i+=s,r+n}throw new a.default(\"MissingDimOrUnits\",\"Missing dimension or its units for %1\",this.currentCS)},t.prototype.GetUpTo=function(t,e){for(;this.nextIsSpace();)this.i++;for(var Q=this.i,r=0;this.i<this.string.length;){var T=this.i,n=this.GetNext();switch(this.i+=n.length,n){case\"\\\\\":n+=this.GetCS();break;case\"{\":r++;break;case\"}\":if(0===r)throw new a.default(\"ExtraCloseLooking\",\"Extra close brace while looking for %1\",e);r--}if(0===r&&n===e)return this.string.slice(Q,T)}throw new a.default(\"TokenNotFoundForCommand\",\"Could not find %1 for %2\",e,this.currentCS)},t.prototype.ParseArg=function(e){return new t(this.GetArgument(e),this.stack.env,this.configuration).mml()},t.prototype.ParseUpTo=function(e,Q){return new t(this.GetUpTo(e,Q),this.stack.env,this.configuration).mml()},t.prototype.GetDelimiterArg=function(t){var e=o.default.trimSpaces(this.GetArgument(t));if(\"\"===e)return null;if(this.contains(\"delimiter\",e))return e;throw new a.default(\"MissingOrUnrecognizedDelim\",\"Missing or unrecognized delimiter for %1\",this.currentCS)},t.prototype.GetStar=function(){var t=\"*\"===this.GetNext();return t&&this.i++,t},t.prototype.create=function(t){for(var e,Q=[],r=1;r<arguments.length;r++)Q[r-1]=arguments[r];return(e=this.configuration.nodeFactory).create.apply(e,n([t],Q))},t}();e.default=l},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TexConstant=void 0,function(t){t.Variant={NORMAL:\"normal\",BOLD:\"bold\",ITALIC:\"italic\",BOLDITALIC:\"bold-italic\",DOUBLESTRUCK:\"double-struck\",FRAKTUR:\"fraktur\",BOLDFRAKTUR:\"bold-fraktur\",SCRIPT:\"script\",BOLDSCRIPT:\"bold-script\",SANSSERIF:\"sans-serif\",BOLDSANSSERIF:\"bold-sans-serif\",SANSSERIFITALIC:\"sans-serif-italic\",SANSSERIFBOLDITALIC:\"sans-serif-bold-italic\",MONOSPACE:\"monospace\",INITIAL:\"inital\",TAILED:\"tailed\",LOOPED:\"looped\",STRETCHED:\"stretched\",CALLIGRAPHIC:\"-tex-calligraphic\",OLDSTYLE:\"-tex-oldstyle\"},t.Form={PREFIX:\"prefix\",INFIX:\"infix\",POSTFIX:\"postfix\"},t.LineBreak={AUTO:\"auto\",NEWLINE:\"newline\",NOBREAK:\"nobreak\",GOODBREAK:\"goodbreak\",BADBREAK:\"badbreak\"},t.LineBreakStyle={BEFORE:\"before\",AFTER:\"after\",DUPLICATE:\"duplicate\",INFIXLINBREAKSTYLE:\"infixlinebreakstyle\"},t.IndentAlign={LEFT:\"left\",CENTER:\"center\",RIGHT:\"right\",AUTO:\"auto\",ID:\"id\",INDENTALIGN:\"indentalign\"},t.IndentShift={INDENTSHIFT:\"indentshift\"},t.LineThickness={THIN:\"thin\",MEDIUM:\"medium\",THICK:\"thick\"},t.Notation={LONGDIV:\"longdiv\",ACTUARIAL:\"actuarial\",PHASORANGLE:\"phasorangle\",RADICAL:\"radical\",BOX:\"box\",ROUNDEDBOX:\"roundedbox\",CIRCLE:\"circle\",LEFT:\"left\",RIGHT:\"right\",TOP:\"top\",BOTTOM:\"bottom\",UPDIAGONALSTRIKE:\"updiagonalstrike\",DOWNDIAGONALSTRIKE:\"downdiagonalstrike\",VERTICALSTRIKE:\"verticalstrike\",HORIZONTALSTRIKE:\"horizontalstrike\",NORTHEASTARROW:\"northeastarrow\",MADRUWB:\"madruwb\",UPDIAGONALARROW:\"updiagonalarrow\"},t.Align={TOP:\"top\",BOTTOM:\"bottom\",CENTER:\"center\",BASELINE:\"baseline\",AXIS:\"axis\",LEFT:\"left\",RIGHT:\"right\"},t.Lines={NONE:\"none\",SOLID:\"solid\",DASHED:\"dashed\"},t.Side={LEFT:\"left\",RIGHT:\"right\",LEFTOVERLAP:\"leftoverlap\",RIGHTOVERLAP:\"rightoverlap\"},t.Width={AUTO:\"auto\",FIT:\"fit\"},t.Actiontype={TOGGLE:\"toggle\",STATUSLINE:\"statusline\",TOOLTIP:\"tooltip\",INPUT:\"input\"},t.Length={VERYVERYTHINMATHSPACE:\"veryverythinmathspace\",VERYTHINMATHSPACE:\"verythinmathspace\",THINMATHSPACE:\"thinmathspace\",MEDIUMMATHSPACE:\"mediummathspace\",THICKMATHSPACE:\"thickmathspace\",VERYTHICKMATHSPACE:\"verythickmathspace\",VERYVERYTHICKMATHSPACE:\"veryverythickmathspace\",NEGATIVEVERYVERYTHINMATHSPACE:\"negativeveryverythinmathspace\",NEGATIVEVERYTHINMATHSPACE:\"negativeverythinmathspace\",NEGATIVETHINMATHSPACE:\"negativethinmathspace\",NEGATIVEMEDIUMMATHSPACE:\"negativemediummathspace\",NEGATIVETHICKMATHSPACE:\"negativethickmathspace\",NEGATIVEVERYTHICKMATHSPACE:\"negativeverythickmathspace\",NEGATIVEVERYVERYTHICKMATHSPACE:\"negativeveryverythickmathspace\"},t.Overflow={LINBREAK:\"linebreak\",SCROLL:\"scroll\",ELIDE:\"elide\",TRUNCATE:\"truncate\",SCALE:\"scale\"},t.Unit={EM:\"em\",EX:\"ex\",PX:\"px\",IN:\"in\",CM:\"cm\",MM:\"mm\",PT:\"pt\",PC:\"pc\"}}(e.TexConstant||(e.TexConstant={}))},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.newState=e.STATE=e.AbstractMathItem=e.protoItem=void 0,e.protoItem=function(t,e,Q,r,T,n,o){return void 0===o&&(o=null),{open:t,math:e,close:Q,n:r,start:{n:T},end:{n:n},display:o}};var r=function(){function t(t,Q,r,T,n){void 0===r&&(r=!0),void 0===T&&(T={i:0,n:0,delim:\"\"}),void 0===n&&(n={i:0,n:0,delim:\"\"}),this.root=null,this.typesetRoot=null,this.metrics={},this.inputData={},this.outputData={},this._state=e.STATE.UNPROCESSED,this.math=t,this.inputJax=Q,this.display=r,this.start=T,this.end=n,this.root=null,this.typesetRoot=null,this.metrics={},this.inputData={},this.outputData={}}return Object.defineProperty(t.prototype,\"isEscaped\",{get:function(){return null===this.display},enumerable:!1,configurable:!0}),t.prototype.render=function(t){t.renderActions.renderMath(this,t)},t.prototype.rerender=function(t,Q){void 0===Q&&(Q=e.STATE.RERENDER),this.state()>=Q&&this.state(Q-1),t.renderActions.renderMath(this,t,Q)},t.prototype.convert=function(t,Q){void 0===Q&&(Q=e.STATE.LAST),t.renderActions.renderConvert(this,t,Q)},t.prototype.compile=function(t){this.state()<e.STATE.COMPILED&&(this.root=this.inputJax.compile(this,t),this.state(e.STATE.COMPILED))},t.prototype.typeset=function(t){this.state()<e.STATE.TYPESET&&(this.typesetRoot=t.outputJax[this.isEscaped?\"escaped\":\"typeset\"](this,t),this.state(e.STATE.TYPESET))},t.prototype.updateDocument=function(t){},t.prototype.removeFromDocument=function(t){void 0===t&&(t=!1)},t.prototype.setMetrics=function(t,e,Q,r,T){this.metrics={em:t,ex:e,containerWidth:Q,lineWidth:r,scale:T}},t.prototype.state=function(t,Q){return void 0===t&&(t=null),void 0===Q&&(Q=!1),null!=t&&(t<e.STATE.INSERTED&&this._state>=e.STATE.INSERTED&&this.removeFromDocument(Q),t<e.STATE.TYPESET&&this._state>=e.STATE.TYPESET&&(this.outputData={}),t<e.STATE.COMPILED&&this._state>=e.STATE.COMPILED&&(this.inputData={}),this._state=t),this._state},t.prototype.reset=function(t){void 0===t&&(t=!1),this.state(e.STATE.UNPROCESSED,t)},t}();e.AbstractMathItem=r,e.STATE={UNPROCESSED:0,FINDMATH:10,COMPILED:20,CONVERT:100,METRICS:110,RERENDER:125,TYPESET:150,INSERTED:200,LAST:1e4},e.newState=function(t,Q){if(t in e.STATE)throw Error(\"State \"+t+\" already exists\");e.STATE[t]=Q}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.split=e.isPercent=e.unicodeChars=e.quotePattern=e.sortLength=void 0,e.sortLength=function(t,e){return t.length!==e.length?e.length-t.length:t===e?0:t<e?-1:1},e.quotePattern=function(t){return t.replace(/([\\^$(){}+*?\\-|\\[\\]\\:\\\\])/g,\"\\\\$1\")},e.unicodeChars=function(t){return Array.from(t).map((function(t){return t.codePointAt(0)}))},e.isPercent=function(t){return!!t.match(/%\\s*$/)},e.split=function(t){return t.trim().split(/\\s+/)}},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0});var T=Q(27),n=Q(8),o=Q(5),i=Q(12),a=Q(13),s=Q(9),l=Q(0),c=Q(20),u=Q(19);Q(272),Q(282),Q(283);var p={},h={fontfamily:1,fontsize:1,fontweight:1,fontstyle:1,color:1,background:1,id:1,class:1,href:1,style:1};function f(t,e){var Q=t.stack.env,r=Q.inRoot;Q.inRoot=!0;var T=new i.default(e,Q,t.configuration),n=T.mml(),o=T.stack.global;if(o.leftRoot||o.upRoot){var a={};o.leftRoot&&(a.width=o.leftRoot),o.upRoot&&(a.voffset=o.upRoot,a.height=o.upRoot),n=t.create(\"node\",\"mpadded\",[n],a)}return Q.inRoot=r,n}p.Open=function(t,e){t.Push(t.itemFactory.create(\"open\"))},p.Close=function(t,e){t.Push(t.itemFactory.create(\"close\"))},p.Tilde=function(t,e){t.Push(t.create(\"token\",\"mtext\",{},u.entities.nbsp))},p.Space=function(t,e){},p.Superscript=function(t,e){var Q,T,i;t.GetNext().match(/\\d/)&&(t.string=t.string.substr(0,t.i+1)+\" \"+t.string.substr(t.i+1));var a=t.stack.Top();a.isKind(\"prime\")?(i=(Q=r(a.Peek(2),2))[0],T=Q[1],t.stack.Pop()):(i=t.stack.Prev())||(i=t.create(\"token\",\"mi\",{},\"\"));var s=n.default.getProperty(i,\"movesupsub\"),l=n.default.isType(i,\"msubsup\")?i.sup:i.over;if(n.default.isType(i,\"msubsup\")&&!n.default.isType(i,\"msup\")&&n.default.getChildAt(i,i.sup)||n.default.isType(i,\"munderover\")&&!n.default.isType(i,\"mover\")&&n.default.getChildAt(i,i.over)&&!n.default.getProperty(i,\"subsupOK\"))throw new o.default(\"DoubleExponent\",\"Double exponent: use braces to clarify\");n.default.isType(i,\"msubsup\")&&!n.default.isType(i,\"msup\")||(s?((!n.default.isType(i,\"munderover\")||n.default.isType(i,\"mover\")||n.default.getChildAt(i,i.over))&&(i=t.create(\"node\",\"munderover\",[i],{movesupsub:!0})),l=i.over):l=(i=t.create(\"node\",\"msubsup\",[i])).sup),t.Push(t.itemFactory.create(\"subsup\",i).setProperties({position:l,primes:T,movesupsub:s}))},p.Subscript=function(t,e){var Q,T,i;t.GetNext().match(/\\d/)&&(t.string=t.string.substr(0,t.i+1)+\" \"+t.string.substr(t.i+1));var a=t.stack.Top();a.isKind(\"prime\")?(i=(Q=r(a.Peek(2),2))[0],T=Q[1],t.stack.Pop()):(i=t.stack.Prev())||(i=t.create(\"token\",\"mi\",{},\"\"));var s=n.default.getProperty(i,\"movesupsub\"),l=n.default.isType(i,\"msubsup\")?i.sub:i.under;if(n.default.isType(i,\"msubsup\")&&!n.default.isType(i,\"msup\")&&n.default.getChildAt(i,i.sub)||n.default.isType(i,\"munderover\")&&!n.default.isType(i,\"mover\")&&n.default.getChildAt(i,i.under)&&!n.default.getProperty(i,\"subsupOK\"))throw new o.default(\"DoubleSubscripts\",\"Double subscripts: use braces to clarify\");n.default.isType(i,\"msubsup\")&&!n.default.isType(i,\"msup\")||(s?((!n.default.isType(i,\"munderover\")||n.default.isType(i,\"mover\")||n.default.getChildAt(i,i.under))&&(i=t.create(\"node\",\"munderover\",[i],{movesupsub:!0})),l=i.under):l=(i=t.create(\"node\",\"msubsup\",[i])).sub),t.Push(t.itemFactory.create(\"subsup\",i).setProperties({position:l,primes:T,movesupsub:s}))},p.Prime=function(t,e){var Q=t.stack.Prev();if(Q||(Q=t.create(\"node\",\"mi\")),n.default.isType(Q,\"msubsup\")&&!n.default.isType(Q,\"msup\")&&n.default.getChildAt(Q,Q.sup))throw new o.default(\"DoubleExponentPrime\",\"Prime causes double exponent: use braces to clarify\");var r=\"\";t.i--;do{r+=u.entities.prime,t.i++,e=t.GetNext()}while(\"'\"===e||e===u.entities.rquote);r=[\"\",\"\\u2032\",\"\\u2033\",\"\\u2034\",\"\\u2057\"][r.length]||r;var T=t.create(\"token\",\"mo\",{},r);t.Push(t.itemFactory.create(\"prime\",Q,T))},p.Comment=function(t,e){for(;t.i<t.string.length&&\"\\n\"!==t.string.charAt(t.i);)t.i++},p.Hash=function(t,e){throw new o.default(\"CantUseHash1\",\"You can't use 'macro parameter character #' in math mode\")},p.SetFont=function(t,e,Q){t.stack.env.font=Q},p.SetStyle=function(t,e,Q,r,T){t.stack.env.style=Q,t.stack.env.level=T,t.Push(t.itemFactory.create(\"style\").setProperty(\"styles\",{displaystyle:r,scriptlevel:T}))},p.SetSize=function(t,e,Q){t.stack.env.size=Q,t.Push(t.itemFactory.create(\"style\").setProperty(\"styles\",{mathsize:Q+\"em\"}))},p.Spacer=function(t,e,Q){var r=t.create(\"node\",\"mspace\",[],{width:Q}),T=t.create(\"node\",\"mstyle\",[r],{scriptlevel:0});t.Push(T)},p.LeftRight=function(t,e){var Q=e.substr(1);t.Push(t.itemFactory.create(Q).setProperty(\"delim\",t.GetDelimiter(e)))},p.Middle=function(t,e){var Q=t.GetDelimiter(e),r=t.create(\"node\",\"TeXAtom\",[],{texClass:l.TEXCLASS.CLOSE});if(t.Push(r),!t.stack.Top().isKind(\"left\"))throw new o.default(\"MisplacedMiddle\",\"%1 must be within \\\\left and \\\\right\",t.currentCS);r=t.create(\"token\",\"mo\",{stretchy:!0},Q),t.Push(r),r=t.create(\"node\",\"TeXAtom\",[],{texClass:l.TEXCLASS.OPEN}),t.Push(r)},p.NamedFn=function(t,e,Q){Q||(Q=e.substr(1));var r=t.create(\"token\",\"mi\",{texClass:l.TEXCLASS.OP},Q);t.Push(t.itemFactory.create(\"fn\",r))},p.NamedOp=function(t,e,Q){Q||(Q=e.substr(1)),Q=Q.replace(/&thinsp;/,\"\\u2006\");var r=t.create(\"token\",\"mo\",{movablelimits:!0,movesupsub:!0,form:a.TexConstant.Form.PREFIX,texClass:l.TEXCLASS.OP},Q);t.Push(r)},p.Limits=function(t,e,Q){var r=t.stack.Prev(!0);if(!r||n.default.getTexClass(n.default.getCoreMO(r))!==l.TEXCLASS.OP&&null==n.default.getProperty(r,\"movesupsub\"))throw new o.default(\"MisplacedLimits\",\"%1 is allowed only on operators\",t.currentCS);var T,i=t.stack.Top();n.default.isType(r,\"munderover\")&&!Q?(T=t.create(\"node\",\"msubsup\"),n.default.copyChildren(r,T),r=i.Last=T):n.default.isType(r,\"msubsup\")&&Q&&(T=t.create(\"node\",\"munderover\"),n.default.copyChildren(r,T),r=i.Last=T),n.default.setProperty(r,\"movesupsub\",!!Q),n.default.setProperties(n.default.getCoreMO(r),{movablelimits:!1}),(n.default.getAttribute(r,\"movablelimits\")||n.default.getProperty(r,\"movablelimits\"))&&n.default.setProperties(r,{movablelimits:!1})},p.Over=function(t,e,Q,r){var T=t.itemFactory.create(\"over\").setProperty(\"name\",t.currentCS);Q||r?(T.setProperty(\"open\",Q),T.setProperty(\"close\",r)):e.match(/withdelims$/)&&(T.setProperty(\"open\",t.GetDelimiter(e)),T.setProperty(\"close\",t.GetDelimiter(e))),e.match(/^\\\\above/)?T.setProperty(\"thickness\",t.GetDimen(e)):(e.match(/^\\\\atop/)||Q||r)&&T.setProperty(\"thickness\",0),t.Push(T)},p.Frac=function(t,e){var Q=t.ParseArg(e),r=t.ParseArg(e),T=t.create(\"node\",\"mfrac\",[Q,r]);t.Push(T)},p.Sqrt=function(t,e){var Q=t.GetBrackets(e),r=t.GetArgument(e);\"\\\\frac\"===r&&(r+=\"{\"+t.GetArgument(r)+\"}{\"+t.GetArgument(r)+\"}\");var T=new i.default(r,t.stack.env,t.configuration).mml();T=Q?t.create(\"node\",\"mroot\",[T,f(t,Q)]):t.create(\"node\",\"msqrt\",[T]),t.Push(T)},p.Root=function(t,e){var Q=t.GetUpTo(e,\"\\\\of\"),r=t.ParseArg(e),T=t.create(\"node\",\"mroot\",[r,f(t,Q)]);t.Push(T)},p.MoveRoot=function(t,e,Q){if(!t.stack.env.inRoot)throw new o.default(\"MisplacedMoveRoot\",\"%1 can appear only within a root\",t.currentCS);if(t.stack.global[Q])throw new o.default(\"MultipleMoveRoot\",\"Multiple use of %1\",t.currentCS);var r=t.GetArgument(e);if(!r.match(/-?[0-9]+/))throw new o.default(\"IntegerArg\",\"The argument to %1 must be an integer\",t.currentCS);\"-\"!==(r=parseInt(r,10)/15+\"em\").substr(0,1)&&(r=\"+\"+r),t.stack.global[Q]=r},p.Accent=function(t,e,Q,r){var T=t.ParseArg(e),o=s.default.getFontDef(t);o.accent=!0;var i=n.default.createEntity(Q),a=t.create(\"token\",\"mo\",o,i);n.default.setAttribute(a,\"stretchy\",!!r);var l=n.default.isEmbellished(T)?n.default.getCoreMO(T):T;n.default.isType(l,\"mo\")&&n.default.setProperties(l,{movablelimits:!1});var c=t.create(\"node\",\"munderover\");n.default.setChild(c,0,T),n.default.setChild(c,1,null),n.default.setChild(c,2,a);var u=t.create(\"node\",\"TeXAtom\",[c]);t.Push(u)},p.UnderOver=function(t,e,Q,r,T){var o,i=t.ParseArg(e),a=n.default.getForm(i);(a&&a[3]&&a[3].movablelimits||n.default.getProperty(i,\"movablelimits\"))&&n.default.setProperties(i,{movablelimits:!1}),n.default.isType(i,\"munderover\")&&n.default.isEmbellished(i)&&(n.default.setProperties(n.default.getCoreMO(i),{lspace:0,rspace:0}),o=t.create(\"node\",\"mo\",[],{rspace:0}),i=t.create(\"node\",\"mrow\",[o,i]));var s=t.create(\"node\",\"munderover\",[i]),c=n.default.createEntity(Q);o=t.create(\"token\",\"mo\",{stretchy:!0,accent:!T},c),n.default.setChild(s,\"o\"===e.charAt(1)?s.over:s.under,o);var u=s;r&&(u=t.create(\"node\",\"TeXAtom\",[s],{texClass:l.TEXCLASS.OP,movesupsub:!0})),n.default.setProperty(u,\"subsupOK\",!0),t.Push(u)},p.Overset=function(t,e){var Q=t.ParseArg(e),r=t.ParseArg(e);(n.default.getAttribute(r,\"movablelimits\")||n.default.getProperty(r,\"movablelimits\"))&&n.default.setProperties(r,{movablelimits:!1});var T=t.create(\"node\",\"mover\",[r,Q]);t.Push(T)},p.Underset=function(t,e){var Q=t.ParseArg(e),r=t.ParseArg(e);(n.default.isType(r,\"mo\")||n.default.getProperty(r,\"movablelimits\"))&&n.default.setProperties(r,{movablelimits:!1});var T=t.create(\"node\",\"munder\",[r,Q]);t.Push(T)},p.TeXAtom=function(t,e,Q){var r,T,n,o={texClass:Q};if(Q===l.TEXCLASS.OP){o.movesupsub=o.movablelimits=!0;var s=t.GetArgument(e),c=s.match(/^\\s*\\\\rm\\s+([a-zA-Z0-9 ]+)$/);c?(o.mathvariant=a.TexConstant.Variant.NORMAL,T=t.create(\"token\",\"mi\",o,c[1])):(n=new i.default(s,t.stack.env,t.configuration).mml(),T=t.create(\"node\",\"TeXAtom\",[n],o)),r=t.itemFactory.create(\"fn\",T)}else n=t.ParseArg(e),r=t.create(\"node\",\"TeXAtom\",[n],o);t.Push(r)},p.MmlToken=function(t,e){var Q,r=t.GetArgument(e),T=t.GetBrackets(e,\"\").replace(/^\\s+/,\"\"),i=t.GetArgument(e),a={};try{Q=t.create(\"node\",r)}catch(t){Q=null}if(!Q||!Q.isToken)throw new o.default(\"NotMathMLToken\",\"%1 is not a token element\",r);for(;\"\"!==T;){var l=T.match(/^([a-z]+)\\s*=\\s*('[^']*'|\"[^\"]*\"|[^ ,]*)\\s*,?\\s*/i);if(!l)throw new o.default(\"InvalidMathMLAttr\",\"Invalid MathML attribute: %1\",T);if(!Q.attributes.hasDefault(l[1])&&!h[l[1]])throw new o.default(\"UnknownAttrForElement\",\"%1 is not a recognized attribute for %2\",l[1],r);var c=s.default.MmlFilterAttribute(t,l[1],l[2].replace(/^(['\"])(.*)\\1$/,\"$2\"));c&&(\"true\"===c.toLowerCase()?c=!0:\"false\"===c.toLowerCase()&&(c=!1),a[l[1]]=c),T=T.substr(l[0].length)}var u=t.create(\"text\",i);Q.appendChild(u),n.default.setProperties(Q,a),t.Push(Q)},p.Strut=function(t,e){var Q=t.create(\"node\",\"mrow\"),r=t.create(\"node\",\"mpadded\",[Q],{height:\"8.6pt\",depth:\"3pt\",width:0});t.Push(r)},p.Phantom=function(t,e,Q,r){var T=t.create(\"node\",\"mphantom\",[t.ParseArg(e)]);(Q||r)&&(T=t.create(\"node\",\"mpadded\",[T]),r&&(n.default.setAttribute(T,\"height\",0),n.default.setAttribute(T,\"depth\",0)),Q&&n.default.setAttribute(T,\"width\",0));var o=t.create(\"node\",\"TeXAtom\",[T]);t.Push(o)},p.Smash=function(t,e){var Q=s.default.trimSpaces(t.GetBrackets(e,\"\")),r=t.create(\"node\",\"mpadded\",[t.ParseArg(e)]);switch(Q){case\"b\":n.default.setAttribute(r,\"depth\",0);break;case\"t\":n.default.setAttribute(r,\"height\",0);break;default:n.default.setAttribute(r,\"height\",0),n.default.setAttribute(r,\"depth\",0)}var T=t.create(\"node\",\"TeXAtom\",[r]);t.Push(T)},p.Lap=function(t,e){var Q=t.create(\"node\",\"mpadded\",[t.ParseArg(e)],{width:0});\"\\\\llap\"===e&&n.default.setAttribute(Q,\"lspace\",\"-1width\");var r=t.create(\"node\",\"TeXAtom\",[Q]);t.Push(r)},p.RaiseLower=function(t,e){var Q=t.GetDimen(e),r=t.itemFactory.create(\"position\").setProperties({name:t.currentCS,move:\"vertical\"});\"-\"===Q.charAt(0)&&(Q=Q.slice(1),e=\"raise\"===e.substr(1)?\"\\\\lower\":\"\\\\raise\"),\"\\\\lower\"===e?(r.setProperty(\"dh\",\"-\"+Q),r.setProperty(\"dd\",\"+\"+Q)):(r.setProperty(\"dh\",\"+\"+Q),r.setProperty(\"dd\",\"-\"+Q)),t.Push(r)},p.MoveLeftRight=function(t,e){var Q=t.GetDimen(e),r=\"-\"===Q.charAt(0)?Q.slice(1):\"-\"+Q;if(\"\\\\moveleft\"===e){var T=Q;Q=r,r=T}t.Push(t.itemFactory.create(\"position\").setProperties({name:t.currentCS,move:\"horizontal\",left:t.create(\"node\",\"mspace\",[],{width:Q}),right:t.create(\"node\",\"mspace\",[],{width:r})}))},p.Hskip=function(t,e){var Q=t.create(\"node\",\"mspace\",[],{width:t.GetDimen(e)});t.Push(Q)},p.Rule=function(t,e,Q){var r={width:t.GetDimen(e),height:t.GetDimen(e),depth:t.GetDimen(e)};\"blank\"!==Q&&(r.mathbackground=t.stack.env.color||\"black\");var T=t.create(\"node\",\"mspace\",[],r);t.Push(T)},p.rule=function(t,e){var Q=t.GetBrackets(e),r=t.GetDimen(e),T=t.GetDimen(e),o=t.create(\"node\",\"mspace\",[],{width:r,height:T,mathbackground:t.stack.env.color||\"black\"});Q&&(o=t.create(\"node\",\"mpadded\",[o],{voffset:Q}),Q.match(/^\\-/)?(n.default.setAttribute(o,\"height\",Q),n.default.setAttribute(o,\"depth\",\"+\"+Q.substr(1))):n.default.setAttribute(o,\"height\",\"+\"+Q)),t.Push(o)},p.MakeBig=function(t,e,Q,r){var T=String(r*=1.411764705882353).replace(/(\\.\\d\\d\\d).+/,\"$1\")+\"em\",n=t.GetDelimiter(e,!0),o=t.create(\"token\",\"mo\",{minsize:T,maxsize:T,fence:!0,stretchy:!0,symmetric:!0},n),i=t.create(\"node\",\"TeXAtom\",[o],{texClass:Q});t.Push(i)},p.BuildRel=function(t,e){var Q=t.ParseUpTo(e,\"\\\\over\"),r=t.ParseArg(e),T=t.create(\"node\",\"munderover\");n.default.setChild(T,0,r),n.default.setChild(T,1,null),n.default.setChild(T,2,Q);var o=t.create(\"node\",\"TeXAtom\",[T],{texClass:l.TEXCLASS.REL});t.Push(o)},p.HBox=function(t,e,Q,r){t.PushAll(s.default.internalMath(t,t.GetArgument(e),Q,r))},p.FBox=function(t,e){var Q=s.default.internalMath(t,t.GetArgument(e)),r=t.create(\"node\",\"menclose\",Q,{notation:\"box\"});t.Push(r)},p.Not=function(t,e){t.Push(t.itemFactory.create(\"not\"))},p.Dots=function(t,e){var Q=n.default.createEntity(\"2026\"),r=n.default.createEntity(\"22EF\"),T=t.create(\"token\",\"mo\",{stretchy:!1},Q),o=t.create(\"token\",\"mo\",{stretchy:!1},r);t.Push(t.itemFactory.create(\"dots\").setProperties({ldots:T,cdots:o}))},p.Matrix=function(t,e,Q,r,T,n,i,a,s,l){var c=t.GetNext();if(\"\"===c)throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);\"{\"===c?t.i++:(t.string=c+\"}\"+t.string.slice(t.i+1),t.i=0);var u=t.itemFactory.create(\"array\").setProperty(\"requireClose\",!0);u.arraydef={rowspacing:i||\"4pt\",columnspacing:n||\"1em\"},s&&u.setProperty(\"isCases\",!0),l&&(u.setProperty(\"isNumbered\",!0),u.arraydef.side=l),(Q||r)&&(u.setProperty(\"open\",Q),u.setProperty(\"close\",r)),\"D\"===a&&(u.arraydef.displaystyle=!0),null!=T&&(u.arraydef.columnalign=T),t.Push(u)},p.Entry=function(t,e){if(t.Push(t.itemFactory.create(\"cell\").setProperties({isEntry:!0,name:e})),t.stack.Top().getProperty(\"isCases\")){for(var Q=t.string,r=0,T=-1,n=t.i,i=Q.length;n<i;){var a=Q.charAt(n);if(\"{\"===a)r++,n++;else if(\"}\"===a)0===r?i=0:(0===--r&&T<0&&(T=n-t.i),n++);else{if(\"&\"===a&&0===r)throw new o.default(\"ExtraAlignTab\",\"Extra alignment tab in \\\\cases text\");\"\\\\\"===a?Q.substr(n).match(/^((\\\\cr)[^a-zA-Z]|\\\\\\\\)/)?i=0:n+=2:n++}}var l=Q.substr(t.i,n-t.i);if(!l.match(/^\\s*\\\\text[^a-zA-Z]/)||T!==l.replace(/\\s+$/,\"\").length-1){var c=s.default.internalMath(t,l,0);t.PushAll(c),t.i=n}}},p.Cr=function(t,e){t.Push(t.itemFactory.create(\"cell\").setProperties({isCR:!0,name:e}))},p.CrLaTeX=function(t,e,Q){var n;if(void 0===Q&&(Q=!1),!Q&&\"[\"===t.string.charAt(t.i)){var i=t.GetBrackets(e,\"\"),l=r(s.default.matchDimen(i),2),c=l[0],u=l[1];if(i&&!c)throw new o.default(\"BracketMustBeDimension\",\"Bracket argument to %1 must be a dimension\",t.currentCS);n=c+u}t.Push(t.itemFactory.create(\"cell\").setProperties({isCR:!0,name:e,linebreak:!0}));var p,h=t.stack.Top();if(h instanceof T.ArrayItem){if(n&&h.arraydef.rowspacing){var f=h.arraydef.rowspacing.split(/ /);if(!h.getProperty(\"rowspacing\")){var d=s.default.dimen2em(f[0]);h.setProperty(\"rowspacing\",d)}for(var L=h.getProperty(\"rowspacing\");f.length<h.table.length;)f.push(s.default.Em(L));f[h.table.length-1]=s.default.Em(Math.max(0,L+s.default.dimen2em(n))),h.arraydef.rowspacing=f.join(\" \")}}else n&&(p=t.create(\"node\",\"mspace\",[],{depth:n}),t.Push(p)),p=t.create(\"node\",\"mspace\",[],{linebreak:a.TexConstant.LineBreak.NEWLINE}),t.Push(p)},p.HLine=function(t,e,Q){null==Q&&(Q=\"solid\");var r=t.stack.Top();if(!(r instanceof T.ArrayItem)||r.Size())throw new o.default(\"Misplaced\",\"Misplaced %1\",t.currentCS);if(r.table.length){for(var n=r.arraydef.rowlines?r.arraydef.rowlines.split(/ /):[];n.length<r.table.length;)n.push(\"none\");n[r.table.length-1]=Q,r.arraydef.rowlines=n.join(\" \")}else r.frame.push(\"top\")},p.HFill=function(t,e){var Q=t.stack.Top();if(!(Q instanceof T.ArrayItem))throw new o.default(\"UnsupportedHFill\",\"Unsupported use of %1\",t.currentCS);Q.hfill.push(Q.Size())},p.BeginEnd=function(t,e){var Q=t.GetArgument(e);if(Q.match(/\\\\/i))throw new o.default(\"InvalidEnv\",\"Invalid environment name '%1'\",Q);var r=t.configuration.handlers.get(\"environment\").lookup(Q);if(r&&\"\\\\end\"===e){if(!r.args[0]){var T=t.itemFactory.create(\"end\").setProperty(\"name\",Q);return void t.Push(T)}t.stack.env.closing=Q}if(++t.macroCount>t.configuration.options.maxMacros)throw new o.default(\"MaxMacroSub2\",\"MathJax maximum substitution count exceeded; is there a recursive latex environment?\");t.parse(\"environment\",[t,Q])},p.Array=function(t,e,Q,r,T,n,o,i,a){T||(T=t.GetArgument(\"\\\\begin{\"+e.getName()+\"}\"));var s=(\"c\"+T).replace(/[^clr|:]/g,\"\").replace(/[^|:]([|:])+/g,\"$1\");T=(T=T.replace(/[^clr]/g,\"\").split(\"\").join(\" \")).replace(/l/g,\"left\").replace(/r/g,\"right\").replace(/c/g,\"center\");var l=t.itemFactory.create(\"array\");return l.arraydef={columnalign:T,columnspacing:n||\"1em\",rowspacing:o||\"4pt\"},s.match(/[|:]/)&&(s.charAt(0).match(/[|:]/)&&(l.frame.push(\"left\"),l.dashed=\":\"===s.charAt(0)),s.charAt(s.length-1).match(/[|:]/)&&l.frame.push(\"right\"),s=s.substr(1,s.length-2),l.arraydef.columnlines=s.split(\"\").join(\" \").replace(/[^|: ]/g,\"none\").replace(/\\|/g,\"solid\").replace(/:/g,\"dashed\")),Q&&l.setProperty(\"open\",t.convertDelimiter(Q)),r&&l.setProperty(\"close\",t.convertDelimiter(r)),\"D\"===i?l.arraydef.displaystyle=!0:i&&(l.arraydef.displaystyle=!1),\"S\"===i&&(l.arraydef.scriptlevel=1),a&&(l.arraydef.useHeight=!1),t.Push(e),l},p.AlignedArray=function(t,e){var Q=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),r=p.Array(t,e);return s.default.setArrayAlign(r,Q)},p.Equation=function(t,e,Q){return t.Push(e),s.default.checkEqnEnv(t),t.itemFactory.create(\"equation\",Q).setProperty(\"name\",e.getName())},p.EqnArray=function(t,e,Q,r,T,n){t.Push(e),r&&s.default.checkEqnEnv(t),T=(T=T.replace(/[^clr]/g,\"\").split(\"\").join(\" \")).replace(/l/g,\"left\").replace(/r/g,\"right\").replace(/c/g,\"center\");var o=t.itemFactory.create(\"eqnarray\",e.getName(),Q,r,t.stack.global);return o.arraydef={displaystyle:!0,columnalign:T,columnspacing:n||\"1em\",rowspacing:\"3pt\",side:t.options.tagSide,minlabelspacing:t.options.tagIndent},o},p.HandleNoTag=function(t,e){t.tags.notag()},p.HandleLabel=function(t,e){var Q=t.GetArgument(e);if(\"\"!==Q&&!t.tags.refUpdate){if(t.tags.label)throw new o.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);if(t.tags.label=Q,(t.tags.allLabels[Q]||t.tags.labels[Q])&&!t.options.ignoreDuplicateLabels)throw new o.default(\"MultipleLabel\",\"Label '%1' multiply defined\",Q);t.tags.labels[Q]=new c.Label}},p.HandleRef=function(t,e,Q){var r=t.GetArgument(e),T=t.tags.allLabels[r]||t.tags.labels[r];T||(t.tags.refUpdate||(t.tags.redo=!0),T=new c.Label);var n=T.tag;Q&&(n=t.tags.formatTag(n));var o=t.create(\"node\",\"mrow\",s.default.internalMath(t,n),{href:t.tags.formatUrl(T.id,t.options.baseURL),class:\"MathJax_ref\"});t.Push(o)},p.Macro=function(t,e,Q,r,T){if(r){var n=[];if(null!=T){var i=t.GetBrackets(e);n.push(null==i?T:i)}for(var a=n.length;a<r;a++)n.push(t.GetArgument(e));Q=s.default.substituteArgs(t,n,Q)}if(t.string=s.default.addArgs(t,Q,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new o.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is there a recursive macro call?\")},p.MathChoice=function(t,e){var Q=t.ParseArg(e),r=t.ParseArg(e),T=t.ParseArg(e),n=t.ParseArg(e);t.Push(t.create(\"node\",\"MathChoice\",[Q,r,T,n]))},e.default=p},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MenuUtil=void 0,function(t){t.close=function(t){var e=t.menu;e.baseMenu?e.baseMenu.unpost():e.unpost()},t.getActiveElement=function(t){var e=t.menu;return(e.baseMenu?e.baseMenu:e).store.active},t.error=function(t,e){console.error(\"ContextMenu Error: \"+e)},t.counter=function(){return e++};var e=0}(e.MenuUtil||(e.MenuUtil={}))},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BBox=e.BBoxStyleAdjust=void 0;var r=Q(32);e.BBoxStyleAdjust=[[\"borderTopWidth\",\"h\"],[\"borderRightWidth\",\"w\"],[\"borderBottomWidth\",\"d\"],[\"borderLeftWidth\",\"w\",0],[\"paddingTop\",\"h\"],[\"paddingRight\",\"w\"],[\"paddingBottom\",\"d\"],[\"paddingLeft\",\"w\",0]];var T=function(){function t(t){void 0===t&&(t={w:0,h:-r.BIGDIMEN,d:-r.BIGDIMEN}),this.w=t.w||0,this.h=\"h\"in t?t.h:-r.BIGDIMEN,this.d=\"d\"in t?t.d:-r.BIGDIMEN,this.L=this.R=this.ic=this.sk=0,this.scale=this.rscale=1,this.pwidth=\"\"}return t.zero=function(){return new t({h:0,d:0,w:0})},t.empty=function(){return new t},t.prototype.empty=function(){return this.w=0,this.h=this.d=-r.BIGDIMEN,this},t.prototype.clean=function(){this.w===-r.BIGDIMEN&&(this.w=0),this.h===-r.BIGDIMEN&&(this.h=0),this.d===-r.BIGDIMEN&&(this.d=0)},t.prototype.rescale=function(t){this.w*=t,this.h*=t,this.d*=t},t.prototype.combine=function(t,e,Q){void 0===e&&(e=0),void 0===Q&&(Q=0);var r=t.rscale,T=e+r*(t.w+t.L+t.R),n=Q+r*t.h,o=r*t.d-Q;T>this.w&&(this.w=T),n>this.h&&(this.h=n),o>this.d&&(this.d=o)},t.prototype.append=function(t){var e=t.rscale;this.w+=e*(t.w+t.L+t.R),e*t.h>this.h&&(this.h=e*t.h),e*t.d>this.d&&(this.d=e*t.d)},t.prototype.updateFrom=function(t){this.h=t.h,this.d=t.d,this.w=t.w,t.pwidth&&(this.pwidth=t.pwidth)},t.fullWidth=\"100%\",t}();e.BBox=T},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.numeric=e.translate=e.remove=e.add=e.entities=e.options=void 0;var r=Q(40),T=Q(126);e.options={loadMissingEntities:!0},e.entities={ApplyFunction:\"\\u2061\",Backslash:\"\\u2216\",Because:\"\\u2235\",Breve:\"\\u02d8\",Cap:\"\\u22d2\",CenterDot:\"\\xb7\",CircleDot:\"\\u2299\",CircleMinus:\"\\u2296\",CirclePlus:\"\\u2295\",CircleTimes:\"\\u2297\",Congruent:\"\\u2261\",ContourIntegral:\"\\u222e\",Coproduct:\"\\u2210\",Cross:\"\\u2a2f\",Cup:\"\\u22d3\",CupCap:\"\\u224d\",Dagger:\"\\u2021\",Del:\"\\u2207\",Delta:\"\\u0394\",Diamond:\"\\u22c4\",DifferentialD:\"\\u2146\",DotEqual:\"\\u2250\",DoubleDot:\"\\xa8\",DoubleRightTee:\"\\u22a8\",DoubleVerticalBar:\"\\u2225\",DownArrow:\"\\u2193\",DownLeftVector:\"\\u21bd\",DownRightVector:\"\\u21c1\",DownTee:\"\\u22a4\",Downarrow:\"\\u21d3\",Element:\"\\u2208\",EqualTilde:\"\\u2242\",Equilibrium:\"\\u21cc\",Exists:\"\\u2203\",ExponentialE:\"\\u2147\",FilledVerySmallSquare:\"\\u25aa\",ForAll:\"\\u2200\",Gamma:\"\\u0393\",Gg:\"\\u22d9\",GreaterEqual:\"\\u2265\",GreaterEqualLess:\"\\u22db\",GreaterFullEqual:\"\\u2267\",GreaterLess:\"\\u2277\",GreaterSlantEqual:\"\\u2a7e\",GreaterTilde:\"\\u2273\",Hacek:\"\\u02c7\",Hat:\"^\",HumpDownHump:\"\\u224e\",HumpEqual:\"\\u224f\",Im:\"\\u2111\",ImaginaryI:\"\\u2148\",Integral:\"\\u222b\",Intersection:\"\\u22c2\",InvisibleComma:\"\\u2063\",InvisibleTimes:\"\\u2062\",Lambda:\"\\u039b\",Larr:\"\\u219e\",LeftAngleBracket:\"\\u27e8\",LeftArrow:\"\\u2190\",LeftArrowRightArrow:\"\\u21c6\",LeftCeiling:\"\\u2308\",LeftDownVector:\"\\u21c3\",LeftFloor:\"\\u230a\",LeftRightArrow:\"\\u2194\",LeftTee:\"\\u22a3\",LeftTriangle:\"\\u22b2\",LeftTriangleEqual:\"\\u22b4\",LeftUpVector:\"\\u21bf\",LeftVector:\"\\u21bc\",Leftarrow:\"\\u21d0\",Leftrightarrow:\"\\u21d4\",LessEqualGreater:\"\\u22da\",LessFullEqual:\"\\u2266\",LessGreater:\"\\u2276\",LessSlantEqual:\"\\u2a7d\",LessTilde:\"\\u2272\",Ll:\"\\u22d8\",Lleftarrow:\"\\u21da\",LongLeftArrow:\"\\u27f5\",LongLeftRightArrow:\"\\u27f7\",LongRightArrow:\"\\u27f6\",Longleftarrow:\"\\u27f8\",Longleftrightarrow:\"\\u27fa\",Longrightarrow:\"\\u27f9\",Lsh:\"\\u21b0\",MinusPlus:\"\\u2213\",NestedGreaterGreater:\"\\u226b\",NestedLessLess:\"\\u226a\",NotDoubleVerticalBar:\"\\u2226\",NotElement:\"\\u2209\",NotEqual:\"\\u2260\",NotExists:\"\\u2204\",NotGreater:\"\\u226f\",NotGreaterEqual:\"\\u2271\",NotLeftTriangle:\"\\u22ea\",NotLeftTriangleEqual:\"\\u22ec\",NotLess:\"\\u226e\",NotLessEqual:\"\\u2270\",NotPrecedes:\"\\u2280\",NotPrecedesSlantEqual:\"\\u22e0\",NotRightTriangle:\"\\u22eb\",NotRightTriangleEqual:\"\\u22ed\",NotSubsetEqual:\"\\u2288\",NotSucceeds:\"\\u2281\",NotSucceedsSlantEqual:\"\\u22e1\",NotSupersetEqual:\"\\u2289\",NotTilde:\"\\u2241\",NotVerticalBar:\"\\u2224\",Omega:\"\\u03a9\",OverBar:\"\\u203e\",OverBrace:\"\\u23de\",PartialD:\"\\u2202\",Phi:\"\\u03a6\",Pi:\"\\u03a0\",PlusMinus:\"\\xb1\",Precedes:\"\\u227a\",PrecedesEqual:\"\\u2aaf\",PrecedesSlantEqual:\"\\u227c\",PrecedesTilde:\"\\u227e\",Product:\"\\u220f\",Proportional:\"\\u221d\",Psi:\"\\u03a8\",Rarr:\"\\u21a0\",Re:\"\\u211c\",ReverseEquilibrium:\"\\u21cb\",RightAngleBracket:\"\\u27e9\",RightArrow:\"\\u2192\",RightArrowLeftArrow:\"\\u21c4\",RightCeiling:\"\\u2309\",RightDownVector:\"\\u21c2\",RightFloor:\"\\u230b\",RightTee:\"\\u22a2\",RightTeeArrow:\"\\u21a6\",RightTriangle:\"\\u22b3\",RightTriangleEqual:\"\\u22b5\",RightUpVector:\"\\u21be\",RightVector:\"\\u21c0\",Rightarrow:\"\\u21d2\",Rrightarrow:\"\\u21db\",Rsh:\"\\u21b1\",Sigma:\"\\u03a3\",SmallCircle:\"\\u2218\",Sqrt:\"\\u221a\",Square:\"\\u25a1\",SquareIntersection:\"\\u2293\",SquareSubset:\"\\u228f\",SquareSubsetEqual:\"\\u2291\",SquareSuperset:\"\\u2290\",SquareSupersetEqual:\"\\u2292\",SquareUnion:\"\\u2294\",Star:\"\\u22c6\",Subset:\"\\u22d0\",SubsetEqual:\"\\u2286\",Succeeds:\"\\u227b\",SucceedsEqual:\"\\u2ab0\",SucceedsSlantEqual:\"\\u227d\",SucceedsTilde:\"\\u227f\",SuchThat:\"\\u220b\",Sum:\"\\u2211\",Superset:\"\\u2283\",SupersetEqual:\"\\u2287\",Supset:\"\\u22d1\",Therefore:\"\\u2234\",Theta:\"\\u0398\",Tilde:\"\\u223c\",TildeEqual:\"\\u2243\",TildeFullEqual:\"\\u2245\",TildeTilde:\"\\u2248\",UnderBar:\"_\",UnderBrace:\"\\u23df\",Union:\"\\u22c3\",UnionPlus:\"\\u228e\",UpArrow:\"\\u2191\",UpDownArrow:\"\\u2195\",UpTee:\"\\u22a5\",Uparrow:\"\\u21d1\",Updownarrow:\"\\u21d5\",Upsilon:\"\\u03a5\",Vdash:\"\\u22a9\",Vee:\"\\u22c1\",VerticalBar:\"\\u2223\",VerticalTilde:\"\\u2240\",Vvdash:\"\\u22aa\",Wedge:\"\\u22c0\",Xi:\"\\u039e\",amp:\"&\",acute:\"\\xb4\",aleph:\"\\u2135\",alpha:\"\\u03b1\",amalg:\"\\u2a3f\",and:\"\\u2227\",ang:\"\\u2220\",angmsd:\"\\u2221\",angsph:\"\\u2222\",ape:\"\\u224a\",backprime:\"\\u2035\",backsim:\"\\u223d\",backsimeq:\"\\u22cd\",beta:\"\\u03b2\",beth:\"\\u2136\",between:\"\\u226c\",bigcirc:\"\\u25ef\",bigodot:\"\\u2a00\",bigoplus:\"\\u2a01\",bigotimes:\"\\u2a02\",bigsqcup:\"\\u2a06\",bigstar:\"\\u2605\",bigtriangledown:\"\\u25bd\",bigtriangleup:\"\\u25b3\",biguplus:\"\\u2a04\",blacklozenge:\"\\u29eb\",blacktriangle:\"\\u25b4\",blacktriangledown:\"\\u25be\",blacktriangleleft:\"\\u25c2\",bowtie:\"\\u22c8\",boxdl:\"\\u2510\",boxdr:\"\\u250c\",boxminus:\"\\u229f\",boxplus:\"\\u229e\",boxtimes:\"\\u22a0\",boxul:\"\\u2518\",boxur:\"\\u2514\",bsol:\"\\\\\",bull:\"\\u2022\",cap:\"\\u2229\",check:\"\\u2713\",chi:\"\\u03c7\",circ:\"\\u02c6\",circeq:\"\\u2257\",circlearrowleft:\"\\u21ba\",circlearrowright:\"\\u21bb\",circledR:\"\\xae\",circledS:\"\\u24c8\",circledast:\"\\u229b\",circledcirc:\"\\u229a\",circleddash:\"\\u229d\",clubs:\"\\u2663\",colon:\":\",comp:\"\\u2201\",ctdot:\"\\u22ef\",cuepr:\"\\u22de\",cuesc:\"\\u22df\",cularr:\"\\u21b6\",cup:\"\\u222a\",curarr:\"\\u21b7\",curlyvee:\"\\u22ce\",curlywedge:\"\\u22cf\",dagger:\"\\u2020\",daleth:\"\\u2138\",ddarr:\"\\u21ca\",deg:\"\\xb0\",delta:\"\\u03b4\",digamma:\"\\u03dd\",div:\"\\xf7\",divideontimes:\"\\u22c7\",dot:\"\\u02d9\",doteqdot:\"\\u2251\",dotplus:\"\\u2214\",dotsquare:\"\\u22a1\",dtdot:\"\\u22f1\",ecir:\"\\u2256\",efDot:\"\\u2252\",egs:\"\\u2a96\",ell:\"\\u2113\",els:\"\\u2a95\",empty:\"\\u2205\",epsi:\"\\u03b5\",epsiv:\"\\u03f5\",erDot:\"\\u2253\",eta:\"\\u03b7\",eth:\"\\xf0\",flat:\"\\u266d\",fork:\"\\u22d4\",frown:\"\\u2322\",gEl:\"\\u2a8c\",gamma:\"\\u03b3\",gap:\"\\u2a86\",gimel:\"\\u2137\",gnE:\"\\u2269\",gnap:\"\\u2a8a\",gne:\"\\u2a88\",gnsim:\"\\u22e7\",gt:\">\",gtdot:\"\\u22d7\",harrw:\"\\u21ad\",hbar:\"\\u210f\",hellip:\"\\u2026\",hookleftarrow:\"\\u21a9\",hookrightarrow:\"\\u21aa\",imath:\"\\u0131\",infin:\"\\u221e\",intcal:\"\\u22ba\",iota:\"\\u03b9\",jmath:\"\\u0237\",kappa:\"\\u03ba\",kappav:\"\\u03f0\",lEg:\"\\u2a8b\",lambda:\"\\u03bb\",lap:\"\\u2a85\",larrlp:\"\\u21ab\",larrtl:\"\\u21a2\",lbrace:\"{\",lbrack:\"[\",le:\"\\u2264\",leftleftarrows:\"\\u21c7\",leftthreetimes:\"\\u22cb\",lessdot:\"\\u22d6\",lmoust:\"\\u23b0\",lnE:\"\\u2268\",lnap:\"\\u2a89\",lne:\"\\u2a87\",lnsim:\"\\u22e6\",longmapsto:\"\\u27fc\",looparrowright:\"\\u21ac\",lowast:\"\\u2217\",loz:\"\\u25ca\",lt:\"<\",ltimes:\"\\u22c9\",ltri:\"\\u25c3\",macr:\"\\xaf\",malt:\"\\u2720\",mho:\"\\u2127\",mu:\"\\u03bc\",multimap:\"\\u22b8\",nLeftarrow:\"\\u21cd\",nLeftrightarrow:\"\\u21ce\",nRightarrow:\"\\u21cf\",nVDash:\"\\u22af\",nVdash:\"\\u22ae\",natur:\"\\u266e\",nearr:\"\\u2197\",nharr:\"\\u21ae\",nlarr:\"\\u219a\",not:\"\\xac\",nrarr:\"\\u219b\",nu:\"\\u03bd\",nvDash:\"\\u22ad\",nvdash:\"\\u22ac\",nwarr:\"\\u2196\",omega:\"\\u03c9\",omicron:\"\\u03bf\",or:\"\\u2228\",osol:\"\\u2298\",period:\".\",phi:\"\\u03c6\",phiv:\"\\u03d5\",pi:\"\\u03c0\",piv:\"\\u03d6\",prap:\"\\u2ab7\",precnapprox:\"\\u2ab9\",precneqq:\"\\u2ab5\",precnsim:\"\\u22e8\",prime:\"\\u2032\",psi:\"\\u03c8\",quot:'\"',rarrtl:\"\\u21a3\",rbrace:\"}\",rbrack:\"]\",rho:\"\\u03c1\",rhov:\"\\u03f1\",rightrightarrows:\"\\u21c9\",rightthreetimes:\"\\u22cc\",ring:\"\\u02da\",rmoust:\"\\u23b1\",rtimes:\"\\u22ca\",rtri:\"\\u25b9\",scap:\"\\u2ab8\",scnE:\"\\u2ab6\",scnap:\"\\u2aba\",scnsim:\"\\u22e9\",sdot:\"\\u22c5\",searr:\"\\u2198\",sect:\"\\xa7\",sharp:\"\\u266f\",sigma:\"\\u03c3\",sigmav:\"\\u03c2\",simne:\"\\u2246\",smile:\"\\u2323\",spades:\"\\u2660\",sub:\"\\u2282\",subE:\"\\u2ac5\",subnE:\"\\u2acb\",subne:\"\\u228a\",supE:\"\\u2ac6\",supnE:\"\\u2acc\",supne:\"\\u228b\",swarr:\"\\u2199\",tau:\"\\u03c4\",theta:\"\\u03b8\",thetav:\"\\u03d1\",tilde:\"\\u02dc\",times:\"\\xd7\",triangle:\"\\u25b5\",triangleq:\"\\u225c\",upsi:\"\\u03c5\",upuparrows:\"\\u21c8\",veebar:\"\\u22bb\",vellip:\"\\u22ee\",weierp:\"\\u2118\",xi:\"\\u03be\",yen:\"\\xa5\",zeta:\"\\u03b6\",zigrarr:\"\\u21dd\"};var n={};function o(t,Q){if(\"#\"===Q.charAt(0))return i(Q.slice(1));if(e.entities[Q])return e.entities[Q];if(e.options.loadMissingEntities){var o=Q.match(/^[a-zA-Z](fr|scr|opf)$/)?RegExp.$1:Q.charAt(0).toLowerCase();n[o]||(n[o]=!0,r.retryAfter(T.asyncLoad(\"./util/entities/\"+o+\".js\")))}return t}function i(t){var e=\"x\"===t.charAt(0)?parseInt(t.slice(1),16):parseInt(t);return String.fromCodePoint(e)}e.add=function(t,Q){Object.assign(e.entities,t),n[Q]=!0},e.remove=function(t){delete e.entities[t]},e.translate=function(t){return t.replace(/&([a-z][a-z0-9]*|#(?:[0-9]+|x[0-9a-f]+));/gi,o)},e.numeric=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TagsFactory=e.AllTags=e.NoTags=e.AbstractTags=e.TagInfo=e.Label=void 0;var o=Q(12),i=function(t,e){void 0===t&&(t=\"???\"),void 0===e&&(e=\"\"),this.tag=t,this.id=e};e.Label=i;var a=function(t,e,Q,r,T,n,o,i){void 0===t&&(t=\"\"),void 0===e&&(e=!1),void 0===Q&&(Q=!1),void 0===r&&(r=null),void 0===T&&(T=\"\"),void 0===n&&(n=\"\"),void 0===o&&(o=!1),void 0===i&&(i=\"\"),this.env=t,this.taggable=e,this.defaultTags=Q,this.tag=r,this.tagId=T,this.tagFormat=n,this.noTag=o,this.labelId=i};e.TagInfo=a;var s=function(){function t(){this.counter=0,this.allCounter=0,this.configuration=null,this.ids={},this.allIds={},this.labels={},this.allLabels={},this.redo=!1,this.refUpdate=!1,this.currentTag=new a,this.history=[],this.stack=[],this.enTag=function(t,e){var Q=this.configuration.nodeFactory,r=Q.create(\"node\",\"mtd\",[t]),T=Q.create(\"node\",\"mlabeledtr\",[e,r]);return Q.create(\"node\",\"mtable\",[T],{side:this.configuration.options.tagSide,minlabelspacing:this.configuration.options.tagIndent,displaystyle:!0})}}return t.prototype.start=function(t,e,Q){this.currentTag&&this.stack.push(this.currentTag),this.currentTag=new a(t,e,Q)},Object.defineProperty(t.prototype,\"env\",{get:function(){return this.currentTag.env},enumerable:!1,configurable:!0}),t.prototype.end=function(){this.history.push(this.currentTag),this.currentTag=this.stack.pop()},t.prototype.tag=function(t,e){this.currentTag.tag=t,this.currentTag.tagFormat=e?t:this.formatTag(t),this.currentTag.noTag=!1},t.prototype.notag=function(){this.tag(\"\",!0),this.currentTag.noTag=!0},Object.defineProperty(t.prototype,\"noTag\",{get:function(){return this.currentTag.noTag},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"label\",{get:function(){return this.currentTag.labelId},set:function(t){this.currentTag.labelId=t},enumerable:!1,configurable:!0}),t.prototype.formatUrl=function(t,e){return e+\"#\"+encodeURIComponent(t)},t.prototype.formatTag=function(t){return\"(\"+t+\")\"},t.prototype.formatId=function(t){return\"mjx-eqn-\"+t.replace(/\\s/g,\"_\")},t.prototype.formatNumber=function(t){return t.toString()},t.prototype.autoTag=function(){null==this.currentTag.tag&&(this.counter++,this.tag(this.formatNumber(this.counter),!1))},t.prototype.clearTag=function(){this.label=\"\",this.tag(null,!0),this.currentTag.tagId=\"\"},t.prototype.getTag=function(t){if(void 0===t&&(t=!1),t)return this.autoTag(),this.makeTag();var e=this.currentTag;return e.taggable&&!e.noTag&&(e.defaultTags&&this.autoTag(),e.tag)?this.makeTag():null},t.prototype.resetTag=function(){this.history=[],this.redo=!1,this.refUpdate=!1,this.clearTag()},t.prototype.reset=function(t){void 0===t&&(t=0),this.resetTag(),this.counter=this.allCounter=t,this.allLabels={},this.allIds={}},t.prototype.startEquation=function(t){this.labels={},this.ids={},this.counter=this.allCounter,this.redo=!1;var e=t.inputData.recompile;e&&(this.refUpdate=!0,this.counter=e.counter)},t.prototype.finishEquation=function(t){this.redo&&(t.inputData.recompile={state:t.state(),counter:this.allCounter}),this.refUpdate||(this.allCounter=this.counter),Object.assign(this.allIds,this.ids),Object.assign(this.allLabels,this.labels)},t.prototype.finalize=function(t,e){if(!e.display||this.currentTag.env||null==this.currentTag.tag)return t;var Q=this.makeTag();return this.enTag(t,Q)},t.prototype.makeId=function(){this.currentTag.tagId=this.formatId(this.configuration.options.useLabelIds&&this.label||this.currentTag.tag)},t.prototype.makeTag=function(){this.makeId(),this.label&&(this.labels[this.label]=new i(this.currentTag.tag,this.currentTag.tagId));var t=new o.default(\"\\\\text{\"+this.currentTag.tagFormat+\"}\",{},this.configuration).mml();return this.configuration.nodeFactory.create(\"node\",\"mtd\",[t],{id:this.currentTag.tagId})},t}();e.AbstractTags=s;var l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.autoTag=function(){},e.prototype.getTag=function(){return this.currentTag.tag?t.prototype.getTag.call(this):null},e}(s);e.NoTags=l;var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.finalize=function(t,e){if(!e.display||this.history.find((function(t){return t.taggable})))return t;var Q=this.getTag(!0);return this.enTag(t,Q)},e}(s);e.AllTags=c,function(t){var e=new Map([[\"none\",l],[\"all\",c]]),Q=\"none\";t.OPTIONS={tags:Q,tagSide:\"right\",tagIndent:\"0.8em\",multlineWidth:\"85%\",useLabelIds:!0,ignoreDuplicateLabels:!1},t.add=function(t,Q){e.set(t,Q)},t.addTags=function(e){var Q,r;try{for(var T=n(Object.keys(e)),o=T.next();!o.done;o=T.next()){var i=o.value;t.add(i,e[i])}}catch(t){Q={error:t}}finally{try{o&&!o.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}},t.create=function(t){var r=e.get(t)||e.get(Q);if(!r)throw Error(\"Unknown tags class\");return new r},t.setDefault=function(t){Q=t},t.getDefault=function(){return t.create(Q)}}(e.TagsFactory||(e.TagsFactory={}))},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PrioritizedList=void 0;var r=function(){function t(){this.items=[],this.items=[]}return t.prototype[Symbol.iterator]=function(){var t=0,e=this.items;return{next:function(){return{value:e[t++],done:t>e.length}}}},t.prototype.add=function(e,Q){void 0===Q&&(Q=t.DEFAULTPRIORITY);var r=this.items.length;do{r--}while(r>=0&&Q<this.items[r].priority);return this.items.splice(r+1,0,{item:e,priority:Q}),e},t.prototype.remove=function(t){var e=this.items.length;do{e--}while(e>=0&&this.items[e].item!==t);e>=0&&this.items.splice(e,1)},t.prototype.toArray=function(){return Array.from(this)},t.DEFAULTPRIORITY=5,t}();e.PrioritizedList=r},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.BaseItem=e.MmlStack=void 0;var a=Q(5),s=function(){function t(t){this._nodes=t}return Object.defineProperty(t.prototype,\"nodes\",{get:function(){return this._nodes},enumerable:!1,configurable:!0}),t.prototype.Push=function(){for(var t,e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];(t=this._nodes).push.apply(t,o(e))},t.prototype.Pop=function(){return this._nodes.pop()},Object.defineProperty(t.prototype,\"First\",{get:function(){return this._nodes[this.Size()-1]},set:function(t){this._nodes[this.Size()-1]=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"Last\",{get:function(){return this._nodes[0]},set:function(t){this._nodes[0]=t},enumerable:!1,configurable:!0}),t.prototype.Peek=function(t){return null==t&&(t=1),this._nodes.slice(this.Size()-t)},t.prototype.Size=function(){return this._nodes.length},t.prototype.Clear=function(){this._nodes=[]},t.prototype.toMml=function(t,e){return void 0===t&&(t=!0),1!==this._nodes.length||e?this.create(\"node\",t?\"inferredMrow\":\"mrow\",this._nodes,{}):this.First},t.prototype.create=function(t){for(var e,Q=[],r=1;r<arguments.length;r++)Q[r-1]=arguments[r];return(e=this.factory.configuration.nodeFactory).create.apply(e,o([t],Q))},t}();e.MmlStack=s;var l=function(t){function e(e){for(var Q=[],r=1;r<arguments.length;r++)Q[r-1]=arguments[r];var T=t.call(this,Q)||this;return T.factory=e,T.global={},T._properties={},T.isOpen&&(T._env={}),T}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"base\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"env\",{get:function(){return this._env},set:function(t){this._env=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"copyEnv\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.getProperty=function(t){return this._properties[t]},e.prototype.setProperty=function(t,e){return this._properties[t]=e,this},Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isFinal\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.isKind=function(t){return t===this.kind},e.prototype.checkItem=function(t){if(t.isKind(\"over\")&&this.isOpen&&(t.setProperty(\"num\",this.toMml(!1)),this.Clear()),t.isKind(\"cell\")&&this.isOpen){if(t.getProperty(\"linebreak\"))return e.fail;throw new a.default(\"Misplaced\",\"Misplaced %1\",t.getName())}if(t.isClose&&this.getErrors(t.kind)){var Q=n(this.getErrors(t.kind),2),r=Q[0],T=Q[1];throw new a.default(r,T,t.getName())}return t.isFinal?(this.Push(t.First),e.fail):e.success},e.prototype.clearEnv=function(){var t,e;try{for(var Q=i(Object.keys(this.env)),r=Q.next();!r.done;r=Q.next()){var T=r.value;delete this.env[T]}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}},e.prototype.setProperties=function(t){return Object.assign(this._properties,t),this},e.prototype.getName=function(){return this.getProperty(\"name\")},e.prototype.toString=function(){return this.kind+\"[\"+this.nodes.join(\"; \")+\"]\"},e.prototype.getErrors=function(t){return(this.constructor.errors||{})[t]||e.errors[t]},e.fail=[null,!1],e.success=[null,!0],e.errors={end:[\"MissingBeginExtraEnd\",\"Missing \\\\begin{%1} or extra \\\\end{%1}\"],close:[\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"],right:[\"MissingLeftExtraRight\",\"Missing \\\\left or extra \\\\right\"]},e}(s);e.BaseItem=l},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},T=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(r(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var n,o=Q(8),i=Q(13),a=Q(9);!function(t){t.variable=function(t,e){var Q=a.default.getFontDef(t),r=t.create(\"token\",\"mi\",Q,e);t.Push(r)},t.digit=function(t,e){var Q,r=t.configuration.options.digits,T=t.string.slice(t.i-1).match(r),n=a.default.getFontDef(t);T?(Q=t.create(\"token\",\"mn\",n,T[0].replace(/[{}]/g,\"\")),t.i+=T[0].length-1):Q=t.create(\"token\",\"mo\",n,e),t.Push(Q)},t.controlSequence=function(t,e){var Q=t.GetCS();t.parse(\"macro\",[t,Q])},t.mathchar0mi=function(t,e){var Q=e.attributes||{mathvariant:i.TexConstant.Variant.ITALIC},r=t.create(\"token\",\"mi\",Q,e.char);t.Push(r)},t.mathchar0mo=function(t,e){var Q=e.attributes||{};Q.stretchy=!1;var r=t.create(\"token\",\"mo\",Q,e.char);o.default.setProperty(r,\"fixStretchy\",!0),t.configuration.addNode(\"fixStretchy\",r),t.Push(r)},t.mathchar7=function(t,e){var Q=e.attributes||{mathvariant:i.TexConstant.Variant.NORMAL};t.stack.env.font&&(Q.mathvariant=t.stack.env.font);var r=t.create(\"token\",\"mi\",Q,e.char);t.Push(r)},t.delimiter=function(t,e){var Q=e.attributes||{};Q=Object.assign({fence:!1,stretchy:!1},Q);var r=t.create(\"token\",\"mo\",Q,e.char);t.Push(r)},t.environment=function(t,e,Q,r){var n=r[0],o=t.itemFactory.create(\"begin\").setProperties({name:e,end:n});o=Q.apply(void 0,T([t,o],r.slice(1))),t.Push(o)}}(n||(n={})),e.default=n},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.Attributes=e.INHERIT=void 0,e.INHERIT=\"_inherit_\";var T=function(){function t(t,e){this.global=e,this.defaults=Object.create(e),this.inherited=Object.create(this.defaults),this.attributes=Object.create(this.inherited),Object.assign(this.defaults,t)}return t.prototype.set=function(t,e){this.attributes[t]=e},t.prototype.setList=function(t){Object.assign(this.attributes,t)},t.prototype.get=function(t){var Q=this.attributes[t];return Q===e.INHERIT&&(Q=this.global[t]),Q},t.prototype.getExplicit=function(t){if(this.attributes.hasOwnProperty(t))return this.attributes[t]},t.prototype.getList=function(){for(var t,e,Q=[],T=0;T<arguments.length;T++)Q[T]=arguments[T];var n={};try{for(var o=r(Q),i=o.next();!i.done;i=o.next()){var a=i.value;n[a]=this.get(a)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return n},t.prototype.setInherited=function(t,e){this.inherited[t]=e},t.prototype.getInherited=function(t){return this.inherited[t]},t.prototype.getDefault=function(t){return this.defaults[t]},t.prototype.isSet=function(t){return this.attributes.hasOwnProperty(t)||this.inherited.hasOwnProperty(t)},t.prototype.hasDefault=function(t){return t in this.defaults},t.prototype.getExplicitNames=function(){return Object.keys(this.attributes)},t.prototype.getInheritedNames=function(){return Object.keys(this.inherited)},t.prototype.getDefaultNames=function(){return Object.keys(this.defaults)},t.prototype.getGlobalNames=function(){return Object.keys(this.global)},t.prototype.getAllAttributes=function(){return this.attributes},t.prototype.getAllInherited=function(){return this.inherited},t.prototype.getAllDefaults=function(){return this.defaults},t.prototype.getAllGlobals=function(){return this.global},t}();e.Attributes=T},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.mathjax=void 0;var r=Q(118),T=Q(40);e.mathjax={version:\"3.1.2\",handlers:new r.HandlerList,document:function(t,Q){return e.mathjax.handlers.document(t,Q)},handleRetriesFor:T.handleRetriesFor,retryAfter:T.retryAfter,asyncLoad:null}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Macro=e.Symbol=void 0;var r=function(){function t(t,e,Q){this._symbol=t,this._char=e,this._attributes=Q}return Object.defineProperty(t.prototype,\"symbol\",{get:function(){return this._symbol},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"char\",{get:function(){return this._char},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"attributes\",{get:function(){return this._attributes},enumerable:!1,configurable:!0}),t}();e.Symbol=r;var T=function(){function t(t,e,Q){void 0===Q&&(Q=[]),this._symbol=t,this._func=e,this._args=Q}return Object.defineProperty(t.prototype,\"symbol\",{get:function(){return this._symbol},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"func\",{get:function(){return this._func},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"args\",{get:function(){return this._args},enumerable:!1,configurable:!0}),t}();e.Macro=T},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.EquationItem=e.EqnArrayItem=e.ArrayItem=e.DotsItem=e.NotItem=e.FnItem=e.MmlItem=e.CellItem=e.PositionItem=e.StyleItem=e.EndItem=e.BeginItem=e.RightItem=e.LeftItem=e.OverItem=e.SubsupItem=e.PrimeItem=e.CloseItem=e.OpenItem=e.StopItem=e.StartItem=void 0;var i=Q(33),a=Q(19),s=Q(0),l=Q(5),c=Q(9),u=Q(8),p=Q(22),h=function(t){function e(e,Q){var r=t.call(this,e)||this;return r.global=Q,r}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"start\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"stop\")){var Q=this.toMml();return this.global.isInner||(Q=this.factory.configuration.tags.finalize(Q,this.env)),[[this.factory.create(\"mml\",Q)],!0]}return t.prototype.checkItem.call(this,e)},e}(p.BaseItem);e.StartItem=h;var f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"stop\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(p.BaseItem);e.StopItem=f;var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"open\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"close\")){var Q=this.toMml(),r=this.create(\"node\",\"TeXAtom\",[Q]);return[[this.factory.create(\"mml\",r)],!0]}return t.prototype.checkItem.call(this,e)},e.errors=Object.assign(Object.create(p.BaseItem.errors),{stop:[\"ExtraOpenMissingClose\",\"Extra open brace or missing close brace\"]}),e}(p.BaseItem);e.OpenItem=d;var L=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"close\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(p.BaseItem);e.CloseItem=L;var H=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"prime\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){var e=n(this.Peek(2),2),Q=e[0],r=e[1];return!u.default.isType(Q,\"msubsup\")||u.default.isType(Q,\"msup\")?[[this.create(\"node\",\"msup\",[Q,r]),t],!0]:(u.default.setChild(Q,Q.sup,r),[[Q,t],!0])},e}(p.BaseItem);e.PrimeItem=H;var m=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"subsup\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"open\")||e.isKind(\"left\"))return p.BaseItem.success;var Q=this.First,r=this.getProperty(\"position\");if(e.isKind(\"mml\")){if(this.getProperty(\"primes\"))if(2!==r)u.default.setChild(Q,2,this.getProperty(\"primes\"));else{u.default.setProperty(this.getProperty(\"primes\"),\"variantForm\",!0);var T=this.create(\"node\",\"mrow\",[this.getProperty(\"primes\"),e.First]);e.First=T}return u.default.setChild(Q,r,e.First),null!=this.getProperty(\"movesupsub\")&&u.default.setProperty(Q,\"movesupsub\",this.getProperty(\"movesupsub\")),[[this.factory.create(\"mml\",Q)],!0]}if(t.prototype.checkItem.call(this,e)[1]){var n=this.getErrors([\"\",\"sub\",\"sup\"][r]);throw new(l.default.bind.apply(l.default,o([void 0,n[0],n[1]],n.splice(2))))}return null},e.errors=Object.assign(Object.create(p.BaseItem.errors),{stop:[\"MissingScript\",\"Missing superscript or subscript argument\"],sup:[\"MissingOpenForSup\",\"Missing open brace for superscript\"],sub:[\"MissingOpenForSub\",\"Missing open brace for subscript\"]}),e}(p.BaseItem);e.SubsupItem=m;var y=function(t){function e(e){var Q=t.call(this,e)||this;return Q.setProperty(\"name\",\"\\\\over\"),Q}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"over\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"over\"))throw new l.default(\"AmbiguousUseOf\",\"Ambiguous use of %1\",e.getName());if(e.isClose){var Q=this.create(\"node\",\"mfrac\",[this.getProperty(\"num\"),this.toMml(!1)]);return null!=this.getProperty(\"thickness\")&&u.default.setAttribute(Q,\"linethickness\",this.getProperty(\"thickness\")),(this.getProperty(\"open\")||this.getProperty(\"close\"))&&(u.default.setProperty(Q,\"withDelims\",!0),Q=c.default.fixedFence(this.factory.configuration,this.getProperty(\"open\"),Q,this.getProperty(\"close\"))),[[this.factory.create(\"mml\",Q),e],!0]}return t.prototype.checkItem.call(this,e)},e.prototype.toString=function(){return\"over[\"+this.getProperty(\"num\")+\" / \"+this.nodes.join(\"; \")+\"]\"},e}(p.BaseItem);e.OverItem=y;var v=function(t){function e(e){var Q=t.call(this,e)||this;return Q.setProperty(\"delim\",\"(\"),Q}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"left\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){return e.isKind(\"right\")?[[this.factory.create(\"mml\",c.default.fenced(this.factory.configuration,this.getProperty(\"delim\"),this.toMml(),e.getProperty(\"delim\")))],!0]:t.prototype.checkItem.call(this,e)},e.errors=Object.assign(Object.create(p.BaseItem.errors),{stop:[\"ExtraLeftMissingRight\",\"Extra \\\\left or missing \\\\right\"]}),e}(p.BaseItem);e.LeftItem=v;var g=function(t){function e(e){var Q=t.call(this,e)||this;return Q.setProperty(\"delim\",\")\"),Q}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"right\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(p.BaseItem);e.RightItem=g;var b=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"begin\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){if(e.getName()!==this.getName())throw new l.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),e.getName());return this.getProperty(\"end\")?p.BaseItem.fail:[[this.factory.create(\"mml\",this.toMml())],!0]}if(e.isKind(\"stop\"))throw new l.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(p.BaseItem);e.BeginItem=b;var M=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"end\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(p.BaseItem);e.EndItem=M;var V=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"style\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(!e.isClose)return t.prototype.checkItem.call(this,e);var Q=this.create(\"node\",\"mstyle\",this.nodes,this.getProperty(\"styles\"));return[[this.factory.create(\"mml\",Q),e],!0]},e}(p.BaseItem);e.StyleItem=V;var x=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"position\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isClose)throw new l.default(\"MissingBoxFor\",\"Missing box for %1\",this.getName());if(e.isFinal){var Q=e.toMml();switch(this.getProperty(\"move\")){case\"vertical\":return Q=this.create(\"node\",\"mpadded\",[Q],{height:this.getProperty(\"dh\"),depth:this.getProperty(\"dd\"),voffset:this.getProperty(\"dh\")}),[[this.factory.create(\"mml\",Q)],!0];case\"horizontal\":return[[this.factory.create(\"mml\",this.getProperty(\"left\")),e,this.factory.create(\"mml\",this.getProperty(\"right\"))],!0]}}return t.prototype.checkItem.call(this,e)},e}(p.BaseItem);e.PositionItem=x;var O=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"cell\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isClose\",{get:function(){return!0},enumerable:!1,configurable:!0}),e}(p.BaseItem);e.CellItem=O;var _=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"isFinal\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mml\"},enumerable:!1,configurable:!0}),e}(p.BaseItem);e.MmlItem=_;var S=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"fn\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){var Q=this.First;if(Q){if(e.isOpen)return p.BaseItem.success;if(!e.isKind(\"fn\")){var r=e.First;if(!e.isKind(\"mml\")||!r)return[[Q,e],!0];if(u.default.isType(r,\"mstyle\")&&r.childNodes.length&&u.default.isType(r.childNodes[0].childNodes[0],\"mspace\")||u.default.isType(r,\"mspace\"))return[[Q,e],!0];u.default.isEmbellished(r)&&(r=u.default.getCoreMO(r));var T=u.default.getForm(r);if(null!=T&&[0,0,1,1,0,1,1,0,0,0][T[2]])return[[Q,e],!0]}var n=this.create(\"token\",\"mo\",{texClass:s.TEXCLASS.NONE},a.entities.ApplyFunction);return[[Q,n,e],!0]}return t.prototype.checkItem.apply(this,arguments)},e}(p.BaseItem);e.FnItem=S;var E=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.remap=i.MapHandler.getMap(\"not_remap\"),e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"not\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){var e,Q,r;if(t.isKind(\"open\")||t.isKind(\"left\"))return p.BaseItem.success;if(t.isKind(\"mml\")&&(u.default.isType(t.First,\"mo\")||u.default.isType(t.First,\"mi\")||u.default.isType(t.First,\"mtext\"))&&(e=t.First,1===(Q=u.default.getText(e)).length&&!u.default.getProperty(e,\"movesupsub\")&&1===u.default.getChildren(e).length))return this.remap.contains(Q)?(r=this.create(\"text\",this.remap.lookup(Q).char),u.default.setChild(e,0,r)):(r=this.create(\"text\",\"\\u0338\"),u.default.appendChildren(e,[r])),[[t],!0];r=this.create(\"text\",\"\\u29f8\");var T=this.create(\"node\",\"mtext\",[],{},r),n=this.create(\"node\",\"mpadded\",[T],{width:0});return[[e=this.create(\"node\",\"TeXAtom\",[n],{texClass:s.TEXCLASS.REL}),t],!0]},e}(p.BaseItem);e.NotItem=E;var C=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"dots\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){if(t.isKind(\"open\")||t.isKind(\"left\"))return p.BaseItem.success;var e=this.getProperty(\"ldots\"),Q=t.First;if(t.isKind(\"mml\")&&u.default.isEmbellished(Q)){var r=u.default.getTexClass(u.default.getCoreMO(Q));r!==s.TEXCLASS.BIN&&r!==s.TEXCLASS.REL||(e=this.getProperty(\"cdots\"))}return[[e,t],!0]},e}(p.BaseItem);e.DotsItem=C;var w=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.table=[],e.row=[],e.frame=[],e.hfill=[],e.arraydef={},e.dashed=!1,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"array\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"copyEnv\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isClose&&!e.isKind(\"over\")){if(e.getProperty(\"isEntry\"))return this.EndEntry(),this.clearEnv(),p.BaseItem.fail;if(e.getProperty(\"isCR\"))return this.EndEntry(),this.EndRow(),this.clearEnv(),p.BaseItem.fail;this.EndTable(),this.clearEnv();var Q=this.arraydef.scriptlevel;delete this.arraydef.scriptlevel;var r=this.create(\"node\",\"mtable\",this.table,this.arraydef);4===this.frame.length?u.default.setAttribute(r,\"frame\",this.dashed?\"dashed\":\"solid\"):this.frame.length&&(this.arraydef.rowlines&&(this.arraydef.rowlines=this.arraydef.rowlines.replace(/none( none)+$/,\"none\")),r=this.create(\"node\",\"menclose\",[r],{notation:this.frame.join(\" \"),isFrame:!0}),\"none\"===(this.arraydef.columnlines||\"none\")&&\"none\"===(this.arraydef.rowlines||\"none\")||u.default.setAttribute(r,\"padding\",0)),Q&&(r=this.create(\"node\",\"mstyle\",[r],{scriptlevel:Q})),(this.getProperty(\"open\")||this.getProperty(\"close\"))&&(r=c.default.fenced(this.factory.configuration,this.getProperty(\"open\"),r,this.getProperty(\"close\")));var T=this.factory.create(\"mml\",r);if(this.getProperty(\"requireClose\")){if(e.isKind(\"close\"))return[[T],!0];throw new l.default(\"MissingCloseBrace\",\"Missing close brace\")}return[[T,e],!0]}return t.prototype.checkItem.call(this,e)},e.prototype.EndEntry=function(){var t=this.create(\"node\",\"mtd\",this.nodes);this.hfill.length&&(0===this.hfill[0]&&u.default.setAttribute(t,\"columnalign\",\"right\"),this.hfill[this.hfill.length-1]===this.Size()&&u.default.setAttribute(t,\"columnalign\",u.default.getAttribute(t,\"columnalign\")?\"center\":\"left\")),this.row.push(t),this.Clear(),this.hfill=[]},e.prototype.EndRow=function(){var t;this.getProperty(\"isNumbered\")&&3===this.row.length?(this.row.unshift(this.row.pop()),t=this.create(\"node\",\"mlabeledtr\",this.row)):t=this.create(\"node\",\"mtr\",this.row),this.table.push(t),this.row=[]},e.prototype.EndTable=function(){(this.Size()||this.row.length)&&(this.EndEntry(),this.EndRow()),this.checkLines()},e.prototype.checkLines=function(){if(this.arraydef.rowlines){var t=this.arraydef.rowlines.split(/ /);t.length===this.table.length?(this.frame.push(\"bottom\"),t.pop(),this.arraydef.rowlines=t.join(\" \")):t.length<this.table.length-1&&(this.arraydef.rowlines+=\" none\")}if(this.getProperty(\"rowspacing\")){for(var e=this.arraydef.rowspacing.split(/ /);e.length<this.table.length;)e.push(this.getProperty(\"rowspacing\")+\"em\");this.arraydef.rowspacing=e.join(\" \")}},e}(p.BaseItem);e.ArrayItem=w;var A=function(t){function e(e){for(var Q=[],r=1;r<arguments.length;r++)Q[r-1]=arguments[r];var T=t.call(this,e)||this;return T.factory.configuration.tags.start(Q[0],Q[2],Q[1]),T}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"eqnarray\"},enumerable:!1,configurable:!0}),e.prototype.EndEntry=function(){this.row.length&&c.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.create(\"node\",\"mtd\",this.nodes);this.row.push(t),this.Clear()},e.prototype.EndRow=function(){var t=\"mtr\",e=this.factory.configuration.tags.getTag();e&&(this.row=[e].concat(this.row),t=\"mlabeledtr\"),this.factory.configuration.tags.clearTag();var Q=this.create(\"node\",t,this.row);this.table.push(Q),this.row=[]},e.prototype.EndTable=function(){t.prototype.EndTable.call(this),this.factory.configuration.tags.end()},e}(w);e.EqnArrayItem=A;var P=function(t){function e(e){for(var Q=[],r=1;r<arguments.length;r++)Q[r-1]=arguments[r];var T=t.call(this,e)||this;return T.factory.configuration.tags.start(\"equation\",!0,Q[0]),T}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"equation\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){var Q=this.toMml(),r=this.factory.configuration.tags.getTag();return this.factory.configuration.tags.end(),[[r?this.factory.configuration.tags.enTag(Q,r):Q,e],!0]}if(e.isKind(\"stop\"))throw new l.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(p.BaseItem);e.EquationItem=P},function(t,e,Q){\"use strict\";var r=this&&this.__assign||function(){return(r=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(T(arguments[e]));return t},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FontData=e.NOSTRETCH=e.H=e.V=void 0,e.V=1,e.H=2,e.NOSTRETCH={dir:0};var i=function(){function t(){var t,e;this.variant={},this.delimiters={},this.cssFontMap={},this.remapChars={};var Q=this.constructor;this.params=r({},Q.defaultParams),this.sizeVariants=n(Q.defaultSizeVariants),this.cssFontMap=r({},Q.defaultCssFonts),this.cssFamilyPrefix=Q.defaultCssFamilyPrefix,this.createVariants(Q.defaultVariants),this.defineDelimiters(Q.defaultDelimiters);try{for(var T=o(Object.keys(Q.defaultChars)),i=T.next();!i.done;i=T.next()){var a=i.value;this.defineChars(a,Q.defaultChars[a])}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}this.defineRemap(\"accent\",Q.defaultAccentMap),this.defineRemap(\"mo\",Q.defaultMoMap),this.defineRemap(\"mn\",Q.defaultMnMap)}return t.charOptions=function(t,e){var Q=t[e];return 3===Q.length&&(Q[3]={}),Q[3]},t.prototype.createVariant=function(t,e,Q){void 0===e&&(e=null),void 0===Q&&(Q=null);var r={linked:[],chars:e?Object.create(this.variant[e].chars):{}};Q&&this.variant[Q]&&(Object.assign(r.chars,this.variant[Q].chars),this.variant[Q].linked.push(r.chars),r.chars=Object.create(r.chars)),this.remapSmpChars(r.chars,t),this.variant[t]=r},t.prototype.remapSmpChars=function(t,e){var Q,r,n,i,a=this.constructor;if(a.VariantSmp[e]){var s=a.SmpRemap,l=[null,null,a.SmpRemapGreekU,a.SmpRemapGreekL];try{for(var c=o(a.SmpRanges),u=c.next();!u.done;u=c.next()){var p=T(u.value,3),h=p[0],f=p[1],d=p[2],L=a.VariantSmp[e][h];if(L){for(var H=f;H<=d;H++)if(930!==H){var m=L+H-f;t[H]=this.smpChar(s[m]||m)}if(l[h])try{for(var y=(n=void 0,o(Object.keys(l[h]).map((function(t){return parseInt(t)})))),v=y.next();!v.done;v=y.next()){t[H=v.value]=this.smpChar(L+l[h][H])}}catch(t){n={error:t}}finally{try{v&&!v.done&&(i=y.return)&&i.call(y)}finally{if(n)throw n.error}}}}}catch(t){Q={error:t}}finally{try{u&&!u.done&&(r=c.return)&&r.call(c)}finally{if(Q)throw Q.error}}}\"bold\"===e&&(t[988]=this.smpChar(120778),t[989]=this.smpChar(120779))},t.prototype.smpChar=function(t){return[,,,{smp:t}]},t.prototype.createVariants=function(t){var e,Q;try{for(var r=o(t),T=r.next();!T.done;T=r.next()){var n=T.value;this.createVariant(n[0],n[1],n[2])}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}},t.prototype.defineChars=function(t,e){var Q,r,T=this.variant[t];Object.assign(T.chars,e);try{for(var n=o(T.linked),i=n.next();!i.done;i=n.next()){var a=i.value;Object.assign(a,e)}}catch(t){Q={error:t}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(Q)throw Q.error}}},t.prototype.defineDelimiters=function(t){Object.assign(this.delimiters,t)},t.prototype.defineRemap=function(t,e){this.remapChars.hasOwnProperty(t)||(this.remapChars[t]={}),Object.assign(this.remapChars[t],e)},t.prototype.getDelimiter=function(t){return this.delimiters[t]},t.prototype.getSizeVariant=function(t,e){return this.delimiters[t].variants&&(e=this.delimiters[t].variants[e]),this.sizeVariants[e]},t.prototype.getChar=function(t,e){return this.variant[t].chars[e]},t.prototype.getVariant=function(t){return this.variant[t]},t.prototype.getCssFont=function(t){return this.cssFontMap[t]||[\"serif\",!1,!1]},t.prototype.getFamily=function(t){return this.cssFamilyPrefix?this.cssFamilyPrefix+\", \"+t:t},t.prototype.getRemappedChar=function(t,e){return(this.remapChars[t]||{})[e]},t.OPTIONS={},t.defaultVariants=[[\"normal\"],[\"bold\",\"normal\"],[\"italic\",\"normal\"],[\"bold-italic\",\"italic\",\"bold\"],[\"double-struck\",\"bold\"],[\"fraktur\",\"normal\"],[\"bold-fraktur\",\"bold\",\"fraktur\"],[\"script\",\"italic\"],[\"bold-script\",\"bold-italic\",\"script\"],[\"sans-serif\",\"normal\"],[\"bold-sans-serif\",\"bold\",\"sans-serif\"],[\"sans-serif-italic\",\"italic\",\"sans-serif\"],[\"sans-serif-bold-italic\",\"bold-italic\",\"bold-sans-serif\"],[\"monospace\",\"normal\"]],t.defaultCssFonts={normal:[\"serif\",!1,!1],bold:[\"serif\",!1,!0],italic:[\"serif\",!0,!1],\"bold-italic\":[\"serif\",!0,!0],\"double-struck\":[\"serif\",!1,!0],fraktur:[\"serif\",!1,!1],\"bold-fraktur\":[\"serif\",!1,!0],script:[\"cursive\",!1,!1],\"bold-script\":[\"cursive\",!1,!0],\"sans-serif\":[\"sans-serif\",!1,!1],\"bold-sans-serif\":[\"sans-serif\",!1,!0],\"sans-serif-italic\":[\"sans-serif\",!0,!1],\"sans-serif-bold-italic\":[\"sans-serif\",!0,!0],monospace:[\"monospace\",!1,!1]},t.defaultCssFamilyPrefix=\"\",t.VariantSmp={bold:[119808,119834,120488,120514,120782],italic:[119860,119886,120546,120572],\"bold-italic\":[119912,119938,120604,120630],script:[119964,119990],\"bold-script\":[120016,120042],fraktur:[120068,120094],\"double-struck\":[120120,120146,,,120792],\"bold-fraktur\":[120172,120198],\"sans-serif\":[120224,120250,,,120802],\"bold-sans-serif\":[120276,120302,120662,120688,120812],\"sans-serif-italic\":[120328,120354],\"sans-serif-bold-italic\":[120380,120406,120720,120746],monospace:[120432,120458,,,120822]},t.SmpRanges=[[0,65,90],[1,97,122],[2,913,937],[3,945,969],[4,48,57]],t.SmpRemap={119893:8462,119965:8492,119968:8496,119969:8497,119971:8459,119972:8464,119975:8466,119976:8499,119981:8475,119994:8495,119996:8458,120004:8500,120070:8493,120075:8460,120076:8465,120085:8476,120093:8488,120122:8450,120127:8461,120133:8469,120135:8473,120136:8474,120137:8477,120145:8484},t.SmpRemapGreekU={8711:25,1012:17},t.SmpRemapGreekL={977:27,981:29,982:31,1008:28,1009:30,1013:26,8706:25},t.defaultAccentMap={768:\"\\u02cb\",769:\"\\u02ca\",770:\"\\u02c6\",771:\"\\u02dc\",772:\"\\u02c9\",774:\"\\u02d8\",775:\"\\u02d9\",776:\"\\xa8\",778:\"\\u02da\",780:\"\\u02c7\",8594:\"\\u20d7\",8242:\"'\",8243:\"''\",8244:\"'''\",8245:\"`\",8246:\"``\",8247:\"```\",8279:\"''''\",8400:\"\\u21bc\",8401:\"\\u21c0\",8406:\"\\u2190\",8417:\"\\u2194\",8432:\"*\",8411:\"...\",8412:\"....\",8428:\"\\u21c1\",8429:\"\\u21bd\",8430:\"\\u2190\",8431:\"\\u2192\"},t.defaultMoMap={45:\"\\u2212\"},t.defaultMnMap={45:\"\\u2212\"},t.defaultParams={x_height:.442,quad:1,num1:.676,num2:.394,num3:.444,denom1:.686,denom2:.345,sup1:.413,sup2:.363,sup3:.289,sub1:.15,sub2:.247,sup_drop:.386,sub_drop:.05,delim1:2.39,delim2:1,axis_height:.25,rule_thickness:.06,big_op_spacing1:.111,big_op_spacing2:.167,big_op_spacing3:.2,big_op_spacing4:.6,big_op_spacing5:.1,surd_height:.075,scriptspace:.05,nulldelimiterspace:.12,delimiterfactor:901,delimitershortfall:.3,min_rule_thickness:1.25},t.defaultDelimiters={},t.defaultChars={},t.defaultSizeVariants=[],t}();e.FontData=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.Package=e.PackageError=void 0;var a=Q(11),s=function(t){function e(e,Q){var r=t.call(this,e)||this;return r.package=Q,r}return T(e,t),e}(Error);e.PackageError=s;var l=function(){function t(e,Q){void 0===Q&&(Q=!1),this.isLoaded=!1,this.isLoading=!1,this.hasFailed=!1,this.dependents=[],this.dependencies=[],this.dependencyCount=0,this.provided=[],this.name=e,this.noLoad=Q,t.packages.set(e,this),this.promise=this.makePromise(this.makeDependencies())}return Object.defineProperty(t.prototype,\"canLoad\",{get:function(){return 0===this.dependencyCount&&!this.noLoad&&!this.isLoading&&!this.hasFailed},enumerable:!1,configurable:!0}),t.resolvePath=function(t,e){void 0===e&&(e=!0);var Q,r=a.CONFIG.source[t]||t;for(r.match(/^(?:[a-z]+:\\/)?\\/|[a-z]:\\\\|\\[/i)||(r=\"[mathjax]/\"+r.replace(/^\\.\\//,\"\")),e&&!r.match(/\\.[^\\/]+$/)&&(r+=\".js\");(Q=r.match(/^\\[([^\\]]*)\\]/))&&a.CONFIG.paths.hasOwnProperty(Q[1]);)r=a.CONFIG.paths[Q[1]]+r.substr(Q[0].length);return r},t.loadAll=function(){var t,e;try{for(var Q=n(this.packages.values()),r=Q.next();!r.done;r=Q.next()){var T=r.value;T.canLoad&&T.load()}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}},t.prototype.makeDependencies=function(){var e,Q,r=[],T=t.packages,o=this.noLoad,s=this.name,l=[];a.CONFIG.dependencies.hasOwnProperty(s)?l.push.apply(l,i(a.CONFIG.dependencies[s])):\"core\"!==s&&l.push(\"core\");try{for(var c=n(l),u=c.next();!u.done;u=c.next()){var p=u.value,h=T.get(p)||new t(p,o);this.dependencies.indexOf(h)<0&&(h.addDependent(this,o),this.dependencies.push(h),h.isLoaded||(this.dependencyCount++,r.push(h.promise)))}}catch(t){e={error:t}}finally{try{u&&!u.done&&(Q=c.return)&&Q.call(c)}finally{if(e)throw e.error}}return r},t.prototype.makePromise=function(t){var e=this,Q=new Promise((function(t,Q){e.resolve=t,e.reject=Q})),r=a.CONFIG[this.name]||{};return r.ready&&(Q=Q.then((function(t){return r.ready(e.name)}))),t.length&&(t.push(Q),Q=Promise.all(t).then((function(t){return t.join(\", \")}))),r.failed&&Q.catch((function(t){return r.failed(new s(t,e.name))})),Q},t.prototype.load=function(){if(!this.isLoaded&&!this.isLoading&&!this.noLoad){this.isLoading=!0;var e=t.resolvePath(this.name);a.CONFIG.require?this.loadCustom(e):this.loadScript(e)}},t.prototype.loadCustom=function(t){var e=this;try{var Q=a.CONFIG.require(t);Q instanceof Promise?Q.then((function(){return e.checkLoad()})).catch((function(Q){return e.failed(\"Can't load \\\"\"+t+'\"\\n'+Q.message.trim())})):this.checkLoad()}catch(t){this.failed(t.message)}},t.prototype.loadScript=function(t){var e=this,Q=document.createElement(\"script\");Q.src=t,Q.charset=\"UTF-8\",Q.onload=function(t){return e.checkLoad()},Q.onerror=function(Q){return e.failed(\"Can't load \\\"\"+t+'\"')},document.head.appendChild(Q)},t.prototype.loaded=function(){var t,e,Q,r;this.isLoaded=!0,this.isLoading=!1;try{for(var T=n(this.dependents),o=T.next();!o.done;o=T.next()){o.value.requirementSatisfied()}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}try{for(var i=n(this.provided),a=i.next();!a.done;a=i.next()){a.value.loaded()}}catch(t){Q={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(Q)throw Q.error}}this.resolve(this.name)},t.prototype.failed=function(t){this.hasFailed=!0,this.isLoading=!1,this.reject(new s(t,this.name))},t.prototype.checkLoad=function(){var t=this;((a.CONFIG[this.name]||{}).checkReady||function(){return Promise.resolve()})().then((function(){return t.loaded()})).catch((function(e){return t.failed(e)}))},t.prototype.requirementSatisfied=function(){this.dependencyCount&&(this.dependencyCount--,this.canLoad&&this.load())},t.prototype.provides=function(e){var Q,r;void 0===e&&(e=[]);try{for(var T=n(e),o=T.next();!o.done;o=T.next()){var i=o.value,s=t.packages.get(i);s||(a.CONFIG.dependencies[i]||(a.CONFIG.dependencies[i]=[]),a.CONFIG.dependencies[i].push(i),(s=new t(i,!0)).isLoading=!0),this.provided.push(s)}}catch(t){Q={error:t}}finally{try{o&&!o.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}},t.prototype.addDependent=function(t,e){this.dependents.push(t),e||this.checkNoLoad()},t.prototype.checkNoLoad=function(){var t,e;if(this.noLoad){this.noLoad=!1;try{for(var Q=n(this.dependencies),r=Q.next();!r.done;r=Q.next()){r.value.checkNoLoad()}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}}},t.packages=new Map,t}();e.Package=l},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FunctionList=void 0;var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.execute=function(){for(var t,e,Q=[],r=0;r<arguments.length;r++)Q[r]=arguments[r];try{for(var T=n(this),o=T.next();!o.done;o=T.next()){var a=o.value,s=a.item.apply(a,i(Q));if(!1===s)return!1}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}return!0},e.prototype.asyncExecute=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var Q=-1,r=this.items;return new Promise((function(e,T){!function n(){for(var o;++Q<r.length;){var a=(o=r[Q]).item.apply(o,i(t));if(a instanceof Promise)return void a.then(n).catch((function(t){return T(t)}));if(!1===a)return void e(!1)}e(!0)}()}))},e}(Q(21).PrioritizedList);e.FunctionList=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMo=void 0;var a=Q(0),s=Q(112),l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._texClass=null,e.lspace=5/18,e.rspace=5/18,e}return T(e,t),Object.defineProperty(e.prototype,\"texClass\",{get:function(){if(null===this._texClass){var t=this.getText(),e=o(this.handleExplicitForm(this.getForms()),3),Q=e[0],r=e[1],T=e[2],n=this.constructor.OPTABLE,i=n[Q][t]||n[r][t]||n[T][t];return i?i[2]:a.TEXCLASS.REL}return this._texClass},set:function(t){this._texClass=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mo\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isEmbellished\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"hasNewLine\",{get:function(){return\"newline\"===this.attributes.get(\"linebreak\")},enumerable:!1,configurable:!0}),e.prototype.coreParent=function(){for(var t=this,e=this,Q=this.factory.getNodeClass(\"math\");e&&e.isEmbellished&&e.coreMO()===this&&!(e instanceof Q);)t=e,e=e.Parent;return t},e.prototype.coreText=function(t){if(!t)return\"\";if(t.isEmbellished)return t.coreMO().getText();for(;((t.isKind(\"mrow\")||t.isKind(\"TeXAtom\")||t.isKind(\"mstyle\")||t.isKind(\"mphantom\"))&&1===t.childNodes.length||t.isKind(\"munderover\"))&&t.childNodes[0];)t=t.childNodes[0];return t.isToken?t.getText():\"\"},e.prototype.hasSpacingAttributes=function(){return this.attributes.isSet(\"lspace\")||this.attributes.isSet(\"rspace\")},Object.defineProperty(e.prototype,\"isAccent\",{get:function(){var t=!1,e=this.coreParent().parent;if(e){var Q=e.isKind(\"mover\")?e.childNodes[e.over].coreMO()?\"accent\":\"\":e.isKind(\"munder\")?e.childNodes[e.under].coreMO()?\"accentunder\":\"\":e.isKind(\"munderover\")?this===e.childNodes[e.over].coreMO()?\"accent\":this===e.childNodes[e.under].coreMO()?\"accentunder\":\"\":\"\";if(Q)t=void 0!==e.attributes.getExplicit(Q)?t:this.attributes.get(\"accent\")}return t},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){var e=this.attributes.getList(\"form\",\"fence\"),Q=e.form,r=e.fence;return void 0===this.getProperty(\"texClass\")&&(this.attributes.isSet(\"lspace\")||this.attributes.isSet(\"rspace\"))?null:(r&&this.texClass===a.TEXCLASS.REL&&(\"prefix\"===Q&&(this.texClass=a.TEXCLASS.OPEN),\"postfix\"===Q&&(this.texClass=a.TEXCLASS.CLOSE)),\"\\u2061\"===this.getText()?(t&&(t.texClass=a.TEXCLASS.OP,t.setProperty(\"fnOP\",!0)),this.texClass=this.prevClass=a.TEXCLASS.NONE,t):this.adjustTeXclass(t))},e.prototype.adjustTeXclass=function(t){var e=this.texClass,Q=this.prevClass;if(e===a.TEXCLASS.NONE)return t;if(t?(!t.getProperty(\"autoOP\")||e!==a.TEXCLASS.BIN&&e!==a.TEXCLASS.REL||(Q=t.texClass=a.TEXCLASS.ORD),Q=this.prevClass=t.texClass||a.TEXCLASS.ORD,this.prevLevel=this.attributes.getInherited(\"scriptlevel\")):Q=this.prevClass=a.TEXCLASS.NONE,e!==a.TEXCLASS.BIN||Q!==a.TEXCLASS.NONE&&Q!==a.TEXCLASS.BIN&&Q!==a.TEXCLASS.OP&&Q!==a.TEXCLASS.REL&&Q!==a.TEXCLASS.OPEN&&Q!==a.TEXCLASS.PUNCT)if(Q!==a.TEXCLASS.BIN||e!==a.TEXCLASS.REL&&e!==a.TEXCLASS.CLOSE&&e!==a.TEXCLASS.PUNCT){if(e===a.TEXCLASS.BIN){for(var r=this,T=this.parent;T&&T.parent&&T.isEmbellished&&(1===T.childNodes.length||!T.isKind(\"mrow\")&&T.core()===r);)r=T,T=T.parent;T.childNodes[T.childNodes.length-1]===r&&(this.texClass=a.TEXCLASS.ORD)}}else t.texClass=this.prevClass=a.TEXCLASS.ORD;else this.texClass=a.TEXCLASS.ORD;return this},e.prototype.setInheritedAttributes=function(e,Q,r,T){var n,a;void 0===e&&(e={}),void 0===Q&&(Q=!1),void 0===r&&(r=0),void 0===T&&(T=!1),t.prototype.setInheritedAttributes.call(this,e,Q,r,T);var s=this.getText(),l=o(this.handleExplicitForm(this.getForms()),3),c=l[0],u=l[1],p=l[2];this.attributes.setInherited(\"form\",c);var h=this.constructor.OPTABLE,f=h[c][s]||h[u][s]||h[p][s];if(f){void 0===this.getProperty(\"texClass\")&&(this.texClass=f[2]);try{for(var d=i(Object.keys(f[3]||{})),L=d.next();!L.done;L=d.next()){var H=L.value;this.attributes.setInherited(H,f[3][H])}}catch(t){n={error:t}}finally{try{L&&!L.done&&(a=d.return)&&a.call(d)}finally{if(n)throw n.error}}this.lspace=(f[0]+1)/18,this.rspace=(f[1]+1)/18}else{var m=this.getRange(s);if(m){void 0===this.getProperty(\"texClass\")&&(this.texClass=m[2]);var y=this.constructor.MMLSPACING[m[2]];this.lspace=(y[0]+1)/18,this.rspace=(y[1]+1)/18}}},e.prototype.getForms=function(){for(var t=this,e=this.parent,Q=this.Parent;Q&&Q.isEmbellished;)t=e,e=Q.parent,Q=Q.Parent;if(e&&e.isKind(\"mrow\")&&1!==e.nonSpaceLength()){if(e.firstNonSpace()===t)return[\"prefix\",\"infix\",\"postfix\"];if(e.lastNonSpace()===t)return[\"postfix\",\"infix\",\"prefix\"]}return[\"infix\",\"prefix\",\"postfix\"]},e.prototype.handleExplicitForm=function(t){if(this.attributes.isSet(\"form\")){var e=this.attributes.get(\"form\");t=[e].concat(t.filter((function(t){return t!==e})))}return t},e.prototype.getRange=function(t){var e,Q;if(!t.match(/^[\\uD800-\\uDBFF]?.$/))return null;var r=t.codePointAt(0),T=this.constructor.RANGES;try{for(var n=i(T),o=n.next();!o.done;o=n.next()){var a=o.value;if(a[0]<=r&&r<=a[1])return a;if(r<a[0])return null}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}return null},e.defaults=n(n({},a.AbstractMmlTokenNode.defaults),{form:\"infix\",fence:!1,separator:!1,lspace:\"thickmathspace\",rspace:\"thickmathspace\",stretchy:!1,symmetric:!1,maxsize:\"infinity\",minsize:\"0em\",largeop:!1,movablelimits:!1,accent:!1,linebreak:\"auto\",lineleading:\"1ex\",linebreakstyle:\"before\",indentalign:\"auto\",indentshift:\"0\",indenttarget:\"\",indentalignfirst:\"indentalign\",indentshiftfirst:\"indentshift\",indentalignlast:\"indentalign\",indentshiftlast:\"indentshift\"}),e.RANGES=s.RANGES,e.MMLSPACING=s.MMLSPACING,e.OPTABLE=s.OPTABLE,e}(a.AbstractMmlTokenNode);e.MmlMo=l},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.px=e.emRounded=e.em=e.percent=e.length2em=e.MATHSPACE=e.RELUNITS=e.UNITS=e.BIGDIMEN=void 0,e.BIGDIMEN=1e6,e.UNITS={px:1,in:96,cm:96/2.54,mm:96/25.4},e.RELUNITS={em:1,ex:.431,pt:.1,pc:1.2,mu:1/18},e.MATHSPACE={veryverythinmathspace:1/18,verythinmathspace:2/18,thinmathspace:3/18,mediummathspace:4/18,thickmathspace:5/18,verythickmathspace:6/18,veryverythickmathspace:7/18,negativeveryverythinmathspace:-1/18,negativeverythinmathspace:-2/18,negativethinmathspace:-3/18,negativemediummathspace:-4/18,negativethickmathspace:-5/18,negativeverythickmathspace:-6/18,negativeveryverythickmathspace:-7/18,thin:.04,medium:.06,thick:.1,normal:1,big:2,small:1/Math.sqrt(2),infinity:e.BIGDIMEN},e.length2em=function(t,Q,r,T){if(void 0===Q&&(Q=0),void 0===r&&(r=1),void 0===T&&(T=16),\"string\"!=typeof t&&(t=String(t)),\"\"===t||null==t)return Q;if(e.MATHSPACE[t])return e.MATHSPACE[t];var n=t.match(/^\\s*([-+]?(?:\\.\\d+|\\d+(?:\\.\\d*)?))?(pt|em|ex|mu|px|pc|in|mm|cm|%)?/);if(!n)return Q;var o=parseFloat(n[1]||\"1\"),i=n[2];return e.UNITS.hasOwnProperty(i)?o*e.UNITS[i]/T/r:e.RELUNITS.hasOwnProperty(i)?o*e.RELUNITS[i]:\"%\"===i?o/100*Q:o*Q},e.percent=function(t){return(100*t).toFixed(1).replace(/\\.?0+$/,\"\")+\"%\"},e.em=function(t){return Math.abs(t)<.001?\"0\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"em\"},e.emRounded=function(t,e){return void 0===e&&(e=16),t=(Math.round(t*e)+.05)/e,Math.abs(t)<.001?\"0em\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"em\"},e.px=function(t,Q,r){return void 0===Q&&(Q=-e.BIGDIMEN),void 0===r&&(r=16),t*=r,Q&&t<Q&&(t=Q),Math.abs(t)<.1?\"0\":t.toFixed(1).replace(/\\.0$/,\"\")+\"px\"}},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SubHandlers=e.SubHandler=e.MapHandler=void 0;var n,o=Q(21),i=Q(30);!function(t){var e=new Map;t.register=function(t){e.set(t.name,t)},t.getMap=function(t){return e.get(t)}}(n=e.MapHandler||(e.MapHandler={}));var a=function(){function t(){this._configuration=new o.PrioritizedList,this._fallback=new i.FunctionList}return t.prototype.add=function(t,e,Q){var T,i;void 0===Q&&(Q=o.PrioritizedList.DEFAULTPRIORITY);try{for(var a=r(t.slice().reverse()),s=a.next();!s.done;s=a.next()){var l=s.value,c=n.getMap(l);if(!c)return void this.warn(\"Configuration \"+l+\" not found! Omitted.\");this._configuration.add(c,Q)}}catch(t){T={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(T)throw T.error}}e&&this._fallback.add(e,Q)},t.prototype.parse=function(t){var e,Q;try{for(var n=r(this._configuration),o=n.next();!o.done;o=n.next()){var i=o.value.item.parse(t);if(i)return i}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}var a=T(t,2),s=a[0],l=a[1];this._fallback.toArray()[0].item(s,l)},t.prototype.lookup=function(t){var e=this.applicable(t);return e?e.lookup(t):null},t.prototype.contains=function(t){return!!this.applicable(t)},t.prototype.toString=function(){var t,e,Q=[];try{for(var T=r(this._configuration),n=T.next();!n.done;n=T.next()){var o=n.value.item;Q.push(o.name)}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}return Q.join(\", \")},t.prototype.applicable=function(t){var e,Q;try{for(var T=r(this._configuration),n=T.next();!n.done;n=T.next()){var o=n.value.item;if(o.contains(t))return o}}catch(t){e={error:t}}finally{try{n&&!n.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}return null},t.prototype.retrieve=function(t){var e,Q;try{for(var T=r(this._configuration),n=T.next();!n.done;n=T.next()){var o=n.value.item;if(o.name===t)return o}}catch(t){e={error:t}}finally{try{n&&!n.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}return null},t.prototype.warn=function(t){console.log(\"TexParser Warning: \"+t)},t}();e.SubHandler=a;var s=function(){function t(){this.map=new Map}return t.prototype.add=function(t,e,Q){var T,n;void 0===Q&&(Q=o.PrioritizedList.DEFAULTPRIORITY);try{for(var i=r(Object.keys(t)),s=i.next();!s.done;s=i.next()){var l=s.value,c=this.get(l);c||(c=new a,this.set(l,c)),c.add(t[l],e[l],Q)}}catch(t){T={error:t}}finally{try{s&&!s.done&&(n=i.return)&&n.call(i)}finally{if(T)throw T.error}}},t.prototype.set=function(t,e){this.map.set(t,e)},t.prototype.get=function(t){return this.map.get(t)},t.prototype.retrieve=function(t){var e,Q;try{for(var T=r(this.map.values()),n=T.next();!n.done;n=T.next()){var o=n.value.retrieve(t);if(o)return o}}catch(t){e={error:t}}finally{try{n&&!n.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}return null},t.prototype.keys=function(){return this.map.keys()},t}();e.SubHandlers=s},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NEW_OPS=e.AmsMethods=void 0;var r=Q(9),T=Q(8),n=Q(13),o=Q(12),i=Q(5),a=Q(26),s=Q(16),l=Q(0);e.AmsMethods={},e.AmsMethods.AmsEqnArray=function(t,e,Q,T,n,o,i){var a=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\"),l=s.default.EqnArray(t,e,Q,T,n,o,i);return r.default.setArrayAlign(l,a)},e.AmsMethods.AlignAt=function(t,Q,T,n){var o,a,s=Q.getName(),l=\"\",c=[];if(n||(a=t.GetBrackets(\"\\\\begin{\"+s+\"}\")),(o=t.GetArgument(\"\\\\begin{\"+s+\"}\")).match(/[^0-9]/))throw new i.default(\"PositiveIntegerArg\",\"Argument to %1 must me a positive integer\",\"\\\\begin{\"+s+\"}\");for(var u=parseInt(o,10);u>0;)l+=\"rl\",c.push(\"0em 0em\"),u--;var p=c.join(\" \");if(n)return e.AmsMethods.EqnArray(t,Q,T,n,l,p);var h=e.AmsMethods.EqnArray(t,Q,T,n,l,p);return r.default.setArrayAlign(h,a)},e.AmsMethods.Multline=function(t,e,Q){t.Push(e),r.default.checkEqnEnv(t);var T=t.itemFactory.create(\"multline\",Q,t.stack);return T.arraydef={displaystyle:!0,rowspacing:\".5em\",columnwidth:\"100%\",width:t.options.multlineWidth,side:t.options.tagSide,minlabelspacing:t.options.tagIndent},T},e.NEW_OPS=\"ams-declare-ops\",e.AmsMethods.HandleDeclareOp=function(t,Q){var T=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",n=r.default.trimSpaces(t.GetArgument(Q));\"\\\\\"===n.charAt(0)&&(n=n.substr(1));var o=t.GetArgument(Q);o.match(/\\\\text/)||(o=o.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\")),t.configuration.handlers.retrieve(e.NEW_OPS).add(n,new a.Macro(n,e.AmsMethods.Macro,[\"\\\\mathop{\\\\rm \"+o+\"}\"+T]))},e.AmsMethods.HandleOperatorName=function(t,e){var Q=t.GetStar()?\"\":\"\\\\nolimits\\\\SkipLimits\",T=r.default.trimSpaces(t.GetArgument(e));T.match(/\\\\text/)||(T=T.replace(/\\*/g,\"\\\\text{*}\").replace(/-/g,\"\\\\text{-}\")),t.string=\"\\\\mathop{\\\\rm \"+T+\"}\"+Q+\" \"+t.string.slice(t.i),t.i=0},e.AmsMethods.SkipLimits=function(t,e){var Q=t.GetNext(),r=t.i;\"\\\\\"===Q&&++t.i&&\"limits\"!==t.GetCS()&&(t.i=r)},e.AmsMethods.MultiIntegral=function(t,e,Q){var r=t.GetNext();if(\"\\\\\"===r){var T=t.i;r=t.GetArgument(e),t.i=T,\"\\\\limits\"===r&&(Q=\"\\\\idotsint\"===e?\"\\\\!\\\\!\\\\mathop{\\\\,\\\\,\"+Q+\"}\":\"\\\\!\\\\!\\\\!\\\\mathop{\\\\,\\\\,\\\\,\"+Q+\"}\")}t.string=Q+\" \"+t.string.slice(t.i),t.i=0},e.AmsMethods.xArrow=function(t,e,Q,n,i){var a={width:\"+\"+r.default.Em((n+i)/18),lspace:r.default.Em(n/18)},s=t.GetBrackets(e),c=t.ParseArg(e),u=t.create(\"token\",\"mo\",{stretchy:!0,texClass:l.TEXCLASS.REL},String.fromCodePoint(Q)),p=t.create(\"node\",\"munderover\",[u]),h=t.create(\"node\",\"mpadded\",[c],a);if(T.default.setAttribute(h,\"voffset\",\".15em\"),T.default.setChild(p,p.over,h),s){var f=new o.default(s,t.stack.env,t.configuration).mml();h=t.create(\"node\",\"mpadded\",[f],a),T.default.setAttribute(h,\"voffset\",\"-.24em\"),T.default.setChild(p,p.under,h)}T.default.setProperty(p,\"subsupOK\",!0),t.Push(p)},e.AmsMethods.HandleShove=function(t,e,Q){var r=t.stack.Top();if(\"multline\"!==r.kind)throw new i.default(\"CommandOnlyAllowedInEnv\",\"%1 only allowed in %2 environment\",t.currentCS,\"multline\");if(r.Size())throw new i.default(\"CommandAtTheBeginingOfLine\",\"%1 must come at the beginning of the line\",t.currentCS);r.setProperty(\"shove\",Q)},e.AmsMethods.CFrac=function(t,e){var Q=r.default.trimSpaces(t.GetBrackets(e,\"\")),a=t.GetArgument(e),s=t.GetArgument(e),l={l:n.TexConstant.Align.LEFT,r:n.TexConstant.Align.RIGHT,\"\":\"\"},c=new o.default(\"\\\\strut\\\\textstyle{\"+a+\"}\",t.stack.env,t.configuration).mml(),u=new o.default(\"\\\\strut\\\\textstyle{\"+s+\"}\",t.stack.env,t.configuration).mml(),p=t.create(\"node\",\"mfrac\",[c,u]);if(null==(Q=l[Q]))throw new i.default(\"IllegalAlign\",\"Illegal alignment specified in %1\",t.currentCS);Q&&T.default.setProperties(p,{numalign:Q,denomalign:Q}),t.Push(p)},e.AmsMethods.Genfrac=function(t,e,Q,n,o,a){null==Q&&(Q=t.GetDelimiterArg(e)),null==n&&(n=t.GetDelimiterArg(e)),null==o&&(o=t.GetArgument(e)),null==a&&(a=r.default.trimSpaces(t.GetArgument(e)));var s=t.ParseArg(e),l=t.ParseArg(e),c=t.create(\"node\",\"mfrac\",[s,l]);if(\"\"!==o&&T.default.setAttribute(c,\"linethickness\",o),(Q||n)&&(T.default.setProperty(c,\"withDelims\",!0),c=r.default.fixedFence(t.configuration,Q,c,n)),\"\"!==a){var u=parseInt(a,10),p=[\"D\",\"T\",\"S\",\"SS\"][u];if(null==p)throw new i.default(\"BadMathStyleFor\",\"Bad math style for %1\",t.currentCS);c=t.create(\"node\",\"mstyle\",[c]),\"D\"===p?T.default.setProperties(c,{displaystyle:!0,scriptlevel:0}):T.default.setProperties(c,{displaystyle:!1,scriptlevel:u-1})}t.Push(c)},e.AmsMethods.HandleTag=function(t,e){if(!t.tags.currentTag.taggable&&t.tags.env)throw new i.default(\"CommandNotAllowedInEnv\",\"%1 not allowed in %2 environment\",t.currentCS,t.tags.env);if(t.tags.currentTag.tag)throw new i.default(\"MultipleCommand\",\"Multiple %1\",t.currentCS);var Q=t.GetStar(),T=r.default.trimSpaces(t.GetArgument(e));t.tags.tag(T,Q)},e.AmsMethods.HandleNoTag=s.default.HandleNoTag,e.AmsMethods.HandleRef=s.default.HandleRef,e.AmsMethods.Macro=s.default.Macro,e.AmsMethods.Accent=s.default.Accent,e.AmsMethods.Tilde=s.default.Tilde,e.AmsMethods.Array=s.default.Array,e.AmsMethods.Spacer=s.default.Spacer,e.AmsMethods.NamedOp=s.default.NamedOp,e.AmsMethods.EqnArray=s.default.EqnArray},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TeXFont=void 0;var o=Q(6),i=Q(292),a=Q(220),s=Q(222),l=Q(293),c=Q(225),u=Q(227),p=Q(229),h=Q(231),f=Q(233),d=Q(235),L=Q(237),H=Q(239),m=Q(241),y=Q(243),v=Q(294),g=Q(295),b=Q(247),M=Q(249),V=Q(251),x=Q(253),O=Q(255),_=Q(257),S=Q(259),E=Q(261),C=Q(263),w=Q(265),A=function(t){function e(){var e,Q,r=t.call(this)||this,T=r.constructor;try{for(var o=n(Object.keys(T.variantCacheIds)),i=o.next();!i.done;i=o.next()){var a=i.value;r.variant[a].cacheID=\"TEX-\"+T.variantCacheIds[a]}}catch(t){e={error:t}}finally{try{i&&!i.done&&(Q=o.return)&&Q.call(o)}finally{if(e)throw e.error}}return r}return T(e,t),e.defaultDelimiters=w.delimiters,e.defaultChars={normal:d.normal,bold:s.bold,italic:p.italic,\"bold-italic\":a.boldItalic,\"double-struck\":l.doubleStruck,fraktur:u.fraktur,\"bold-fraktur\":c.frakturBold,script:g.script,\"bold-script\":v.scriptBold,\"sans-serif\":y.sansSerif,\"bold-sans-serif\":H.sansSerifBold,\"sans-serif-italic\":m.sansSerifItalic,\"sans-serif-bold-italic\":L.sansSerifBoldItalic,monospace:f.monospace,\"-smallop\":b.smallop,\"-largeop\":h.largeop,\"-size3\":S.texSize3,\"-size4\":E.texSize4,\"-tex-calligraphic\":V.texCalligraphic,\"-tex-bold-calligraphic\":M.texCalligraphicBold,\"-tex-mathit\":x.texMathit,\"-tex-oldstyle\":_.texOldstyle,\"-tex-bold-oldstyle\":O.texOldstyleBold,\"-tex-variant\":C.texVariant},e.variantCacheIds={normal:\"N\",bold:\"B\",italic:\"I\",\"bold-italic\":\"BI\",\"double-struck\":\"D\",fraktur:\"F\",\"bold-fraktur\":\"BF\",script:\"S\",\"bold-script\":\"BS\",\"sans-serif\":\"SS\",\"bold-sans-serif\":\"BSS\",\"sans-serif-italic\":\"SSI\",\"sans-serif-bold-italic\":\"SSBI\",monospace:\"M\",\"-smallop\":\"SO\",\"-largeop\":\"LO\",\"-size3\":\"S3\",\"-size4\":\"S4\",\"-tex-calligraphic\":\"C\",\"-tex-bold-calligraphic\":\"BC\",\"-tex-mathit\":\"MI\",\"-tex-oldstyle\":\"OS\",\"-tex-bold-oldstyle\":\"BOS\",\"-tex-variant\":\"V\"},e}(i.CommonTeXFontMixin(o.SVGFontData));e.TeXFont=A},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractItem=void 0;var o=Q(275),i=Q(17),a=Q(10),s=function(t){function e(e,Q,r,T){var n=t.call(this,e,Q)||this;return n._content=r,n.disabled=!1,n.callbacks=[],n._id=T||r,n}return T(e,t),Object.defineProperty(e.prototype,\"content\",{get:function(){return this._content},set:function(t){this._content=t,this.generateHtml(),this.menu&&this.menu.generateHtml()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"id\",{get:function(){return this._id},enumerable:!1,configurable:!0}),e.prototype.press=function(){this.disabled||(this.executeAction(),this.executeCallbacks_())},e.prototype.executeAction=function(){},e.prototype.registerCallback=function(t){-1===this.callbacks.indexOf(t)&&this.callbacks.push(t)},e.prototype.unregisterCallback=function(t){var e=this.callbacks.indexOf(t);-1!==e&&this.callbacks.splice(e,1)},e.prototype.mousedown=function(t){this.press(),this.stop(t)},e.prototype.mouseover=function(t){this.focus(),this.stop(t)},e.prototype.mouseout=function(t){this.deactivate(),this.stop(t)},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this);var e=this.html;e.setAttribute(\"aria-disabled\",\"false\"),e.textContent=this.content},e.prototype.activate=function(){this.disabled||this.html.classList.add(a.HtmlClasses.MENUACTIVE)},e.prototype.deactivate=function(){this.html.classList.remove(a.HtmlClasses.MENUACTIVE)},e.prototype.focus=function(){this.menu.focused=this,t.prototype.focus.call(this),this.activate()},e.prototype.unfocus=function(){this.deactivate(),t.prototype.unfocus.call(this)},e.prototype.escape=function(t){i.MenuUtil.close(this)},e.prototype.up=function(t){this.menu.up(t)},e.prototype.down=function(t){this.menu.down(t)},e.prototype.left=function(t){this.menu.left(t)},e.prototype.right=function(t){this.menu.right(t)},e.prototype.space=function(t){this.press()},e.prototype.disable=function(){this.disabled=!0;var t=this.html;t.classList.add(a.HtmlClasses.MENUDISABLED),t.setAttribute(\"aria-disabled\",\"true\")},e.prototype.enable=function(){this.disabled=!1;var t=this.html;t.classList.remove(a.HtmlClasses.MENUDISABLED),t.removeAttribute(\"aria-disabled\")},e.prototype.executeCallbacks_=function(){var t,e;try{for(var Q=n(this.callbacks),r=Q.next();!r.done;r=Q.next()){var T=r.value;try{T(this)}catch(t){i.MenuUtil.error(t,\"Callback for menu entry \"+this.id+\" failed.\")}}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}},e}(o.AbstractEntry);e.AbstractItem=s},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(T(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractFactory=void 0;var o=function(){function t(t){var e,Q;void 0===t&&(t=null),this.defaultKind=\"unknown\",this.nodeMap=new Map,this.node={},null===t&&(t=this.constructor.defaultNodes);try{for(var T=r(Object.keys(t)),n=T.next();!n.done;n=T.next()){var o=n.value;this.setNodeClass(o,t[o])}}catch(t){e={error:t}}finally{try{n&&!n.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}}return t.prototype.create=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q];return(this.node[t]||this.node[this.defaultKind]).apply(void 0,n(e))},t.prototype.setNodeClass=function(t,e){this.nodeMap.set(t,e);var Q=this,r=this.nodeMap.get(t);this.node[t]=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return new(r.bind.apply(r,n([void 0,Q],t)))}},t.prototype.getNodeClass=function(t){return this.nodeMap.get(t)},t.prototype.deleteNodeClass=function(t){this.nodeMap.delete(t),delete this.node[t]},t.prototype.nodeIsKind=function(t,e){return t instanceof this.getNodeClass(e)},t.prototype.getKinds=function(){return Array.from(this.nodeMap.keys())},t.defaultNodes={},t}();e.AbstractFactory=o},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMi=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mi\"},enumerable:!1,configurable:!0}),e.prototype.setInheritedAttributes=function(Q,r,T,n){void 0===Q&&(Q={}),void 0===r&&(r=!1),void 0===T&&(T=0),void 0===n&&(n=!1),t.prototype.setInheritedAttributes.call(this,Q,r,T,n),this.getText().match(e.singleCharacter)&&!Q.mathvariant&&this.attributes.setInherited(\"mathvariant\",\"italic\")},e.prototype.setTeXclass=function(t){this.getPrevClass(t);var Q=this.getText();return Q.length>1&&Q.match(e.operatorName)&&this.texClass===o.TEXCLASS.ORD&&(this.texClass=o.TEXCLASS.OP,this.setProperty(\"autoOP\",!0)),this},e.defaults=n({},o.AbstractMmlTokenNode.defaults),e.operatorName=/^[a-z][a-z0-9]*$/i,e.singleCharacter=/^[\\uD800-\\uDBFF]?.$/,e}(o.AbstractMmlTokenNode);e.MmlMi=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMsup=e.MmlMsub=e.MmlMsubsup=void 0;var o=Q(0),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"msubsup\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 3},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"base\",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"sub\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"sup\",{get:function(){return 2},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(t,e,Q,r){var T=this.childNodes;T[0].setInheritedAttributes(t,e,Q,r),T[1].setInheritedAttributes(t,!1,Q+1,r||1===this.sub),T[2]&&T[2].setInheritedAttributes(t,!1,Q+1,r||2===this.sub)},e.defaults=n(n({},o.AbstractMmlBaseNode.defaults),{subscriptshift:\"\",superscriptshift:\"\"}),e}(o.AbstractMmlBaseNode);e.MmlMsubsup=i;var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"msub\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 2},enumerable:!1,configurable:!0}),e.defaults=n({},i.defaults),e}(i);e.MmlMsub=a;var s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"msup\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"sup\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"sub\",{get:function(){return 2},enumerable:!1,configurable:!0}),e.defaults=n({},i.defaults),e}(i);e.MmlMsup=s},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.retryAfter=e.handleRetriesFor=void 0,e.handleRetriesFor=function(t){return new Promise((function e(Q,r){try{Q(t())}catch(t){t.retry&&t.retry instanceof Promise?t.retry.then((function(){return e(Q,r)})).catch((function(t){return r(t)})):t.restart&&t.restart.isCallback?MathJax.Callback.After((function(){return e(Q,r)}),t.restart):r(t)}}))},e.retryAfter=function(t){var e=new Error(\"MathJax retry\");throw e.retry=t,e}},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},T=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(r(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.NodeFactory=void 0;var n=Q(8),o=function(){function t(){this.mmlFactory=null,this.factory={node:t.createNode,token:t.createToken,text:t.createText,error:t.createError}}return t.createNode=function(t,e,Q,r,T){void 0===Q&&(Q=[]),void 0===r&&(r={});var o=t.mmlFactory.create(e),i=o.arity;if(i===1/0||-1===i)1===Q.length&&Q[0].isInferred?o.setChildren(n.default.getChildren(Q[0])):o.setChildren(Q);else{for(var a=[],s=0,l=void 0;l=Q[s];s++)if(l.isInferred){var c=t.mmlFactory.create(\"mrow\",{},n.default.getChildren(l));n.default.copyAttributes(l,c),a.push(c)}else a.push(l);o.setChildren(a)}return T&&o.appendChild(T),n.default.setProperties(o,r),o},t.createToken=function(t,e,Q,r){void 0===Q&&(Q={}),void 0===r&&(r=\"\");var T=t.create(\"text\",r);return t.create(\"node\",e,[],Q,T)},t.createText=function(t,e){return null==e?null:t.mmlFactory.create(\"text\").setText(e)},t.createError=function(t,e){var Q=t.create(\"text\",e),r=t.create(\"node\",\"mtext\",[],{},Q);return t.create(\"node\",\"merror\",[r],{\"data-mjx-error\":e})},t.prototype.setMmlFactory=function(t){this.mmlFactory=t},t.prototype.set=function(t,e){this.factory[t]=e},t.prototype.setCreators=function(t){for(var e in t)this.set(e,t[e])},t.prototype.create=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q];var r=this.factory[t]||this.factory.node,n=r.apply(void 0,T([this,e[0]],e.slice(1)));return\"node\"===t&&this.configuration.addNode(e[0],n),n},t.prototype.get=function(t){return this.factory[t]},t}();e.NodeFactory=o},function(t,e,Q){\"use strict\";var r,T,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BaseConfiguration=e.BaseTags=e.Other=void 0;var o=Q(2),i=Q(33),a=Q(5),s=Q(8),l=Q(3),c=Q(27),u=Q(20);function p(t,e){var Q=t.stack.env.font?{mathvariant:t.stack.env.font}:{},r=i.MapHandler.getMap(\"remap\").lookup(e),T=t.create(\"token\",\"mo\",Q,r?r.char:e);s.default.setProperty(T,\"fixStretchy\",!0),t.configuration.addNode(\"fixStretchy\",T),t.Push(T)}Q(281),new l.CharacterMap(\"remap\",null,{\"-\":\"\\u2212\",\"*\":\"\\u2217\",\"`\":\"\\u2018\"}),e.Other=p;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(u.AbstractTags);e.BaseTags=h,e.BaseConfiguration=o.Configuration.create(\"base\",{handler:{character:[\"command\",\"special\",\"letter\",\"digit\"],delimiter:[\"delimiter\"],macro:[\"delimiter\",\"macros\",\"mathchar0mi\",\"mathchar0mo\",\"mathchar7\"],environment:[\"environment\"]},fallback:{character:p,macro:function(t,e){throw new a.default(\"UndefinedControlSequence\",\"Undefined control sequence %1\",\"\\\\\"+e)},environment:function(t,e){throw new a.default(\"UnknownEnv\",\"Unknown environment '%1'\",e)}},items:(T={},T[c.StartItem.prototype.kind]=c.StartItem,T[c.StopItem.prototype.kind]=c.StopItem,T[c.OpenItem.prototype.kind]=c.OpenItem,T[c.CloseItem.prototype.kind]=c.CloseItem,T[c.PrimeItem.prototype.kind]=c.PrimeItem,T[c.SubsupItem.prototype.kind]=c.SubsupItem,T[c.OverItem.prototype.kind]=c.OverItem,T[c.LeftItem.prototype.kind]=c.LeftItem,T[c.RightItem.prototype.kind]=c.RightItem,T[c.BeginItem.prototype.kind]=c.BeginItem,T[c.EndItem.prototype.kind]=c.EndItem,T[c.StyleItem.prototype.kind]=c.StyleItem,T[c.PositionItem.prototype.kind]=c.PositionItem,T[c.CellItem.prototype.kind]=c.CellItem,T[c.MmlItem.prototype.kind]=c.MmlItem,T[c.FnItem.prototype.kind]=c.FnItem,T[c.NotItem.prototype.kind]=c.NotItem,T[c.DotsItem.prototype.kind]=c.DotsItem,T[c.ArrayItem.prototype.kind]=c.ArrayItem,T[c.EqnArrayItem.prototype.kind]=c.EqnArrayItem,T[c.EquationItem.prototype.kind]=c.EquationItem,T),options:{maxMacros:1e3,baseURL:\"undefined\"==typeof document||0===document.getElementsByTagName(\"base\").length?\"\":String(document.location).replace(/#.*$/,\"\")},tags:{base:h}})},function(t,e,Q){\"use strict\";var r,T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.clearDocument=e.saveDocument=e.makeBsprAttributes=e.removeProperty=e.getProperty=e.setProperty=e.balanceRules=void 0;var o=Q(8),i=Q(9),a=null,s=null,l=function(t){return s.root=t,a.outputJax.getBBox(s,a).w},c=function(t){for(var e=0;t&&!o.default.isType(t,\"mtable\");){if(o.default.isType(t,\"text\"))return null;o.default.isType(t,\"mrow\")?(t=t.childNodes[0],e=0):(t=t.parent.childNodes[e],e++)}return t},u=function(t,e){return t.childNodes[\"up\"===e?1:0].childNodes[0].childNodes[0].childNodes[0].childNodes[0]},p=function(t,e){return t.childNodes[e].childNodes[0].childNodes[0]},h=function(t){return p(t,0)},f=function(t){return p(t,t.childNodes.length-1)},d=function(t,e){return t.childNodes[\"up\"===e?0:1].childNodes[0].childNodes[0].childNodes[0]},L=function(t){for(;t&&!o.default.isType(t,\"mtd\");)t=t.parent;return t},H=function(t){return t.parent.childNodes[t.parent.childNodes.indexOf(t)+1]},m=function(t){for(;t&&null==e.getProperty(t,\"inference\");)t=t.parent;return t},y=function(t,e,Q){void 0===Q&&(Q=!1);var r=0;if(t===e)return r;if(t!==e.parent){var T=t.childNodes,n=Q?T.length-1:0;o.default.isType(T[n],\"mspace\")&&(r+=l(T[n])),t=e.parent}if(t===e)return r;var i=t.childNodes,a=Q?i.length-1:0;return i[a]!==e&&(r+=l(i[a])),r},v=function(t,Q){void 0===Q&&(Q=!1);var r=c(t),T=d(r,e.getProperty(r,\"inferenceRule\"));return y(t,r,Q)+(l(r)-l(T))/2},g=function(t,Q,r,T){if(void 0===T&&(T=!1),e.getProperty(Q,\"inferenceRule\")||e.getProperty(Q,\"labelledRule\")){var n=t.nodeFactory.create(\"node\",\"mrow\");Q.parent.replaceChild(n,Q),n.setChildren([Q]),b(Q,n),Q=n}var a=T?Q.childNodes.length-1:0,s=Q.childNodes[a];o.default.isType(s,\"mspace\")?o.default.setAttribute(s,\"width\",i.default.Em(i.default.dimen2em(o.default.getAttribute(s,\"width\"))+r)):(s=t.nodeFactory.create(\"node\",\"mspace\",[],{width:i.default.Em(r)}),T?Q.appendChild(s):(s.parent=Q,Q.childNodes.unshift(s)))},b=function(t,Q){[\"inference\",\"proof\",\"maxAdjust\",\"labelledRule\"].forEach((function(r){var T=e.getProperty(t,r);null!=T&&(e.setProperty(Q,r,T),e.removeProperty(t,r))}))},M=function(t,Q,r,T,n){var o=t.nodeFactory.create(\"node\",\"mspace\",[],{width:i.default.Em(n)});if(\"left\"===T){var a=Q.childNodes[r].childNodes[0];o.parent=a,a.childNodes.unshift(o)}else Q.childNodes[r].appendChild(o);e.setProperty(Q.parent,\"sequentAdjust_\"+T,n)},V=function(t,Q){for(var r=Q.pop();Q.length;){var n=Q.pop(),o=T(x(r,n),2),i=o[0],a=o[1];e.getProperty(r.parent,\"axiom\")&&(M(t,i<0?r:n,0,\"left\",Math.abs(i)),M(t,a<0?r:n,2,\"right\",Math.abs(a))),r=n}},x=function(t,e){var Q=l(t.childNodes[2]),r=l(e.childNodes[2]);return[l(t.childNodes[0])-l(e.childNodes[0]),Q-r]};e.balanceRules=function(t){var Q,r;s=new t.document.options.MathItem(\"\",null,t.math.display);var T=t.data;!function(t){var Q=t.nodeLists.sequent;if(Q)for(var r=Q.length-1,T=void 0;T=Q[r];r--)if(e.getProperty(T,\"sequentProcessed\"))e.removeProperty(T,\"sequentProcessed\");else{var n=[],o=m(T);if(1===e.getProperty(o,\"inference\")){for(n.push(T);1===e.getProperty(o,\"inference\");){o=c(o);var i=h(u(o,e.getProperty(o,\"inferenceRule\"))),a=e.getProperty(i,\"inferenceRule\")?d(i,e.getProperty(i,\"inferenceRule\")):i;e.getProperty(a,\"sequent\")&&(T=a.childNodes[0],n.push(T),e.setProperty(T,\"sequentProcessed\",!0)),o=i}V(t,n)}}}(T);var o=T.nodeLists.inference||[];try{for(var i=n(o),a=i.next();!a.done;a=i.next()){var l=a.value,p=e.getProperty(l,\"proof\"),b=c(l),M=u(b,e.getProperty(b,\"inferenceRule\")),x=h(M);if(e.getProperty(x,\"inference\")){var O=v(x);if(O){g(T,x,-O);var _=y(l,b,!1);g(T,l,O-_)}}var S=f(M);if(null!=e.getProperty(S,\"inference\")){var E=v(S,!0);g(T,S,-E,!0);var C=y(l,b,!0),w=e.getProperty(l,\"maxAdjust\");null!=w&&(E=Math.max(E,w));var A=void 0;if(!p&&(A=L(l))){var P=H(A);if(P){var N=T.nodeFactory.create(\"node\",\"mspace\",[],{width:E-C+\"em\"});P.appendChild(N),l.removeProperty(\"maxAdjust\")}else{var k=m(A);k&&(E=e.getProperty(k,\"maxAdjust\")?Math.max(e.getProperty(k,\"maxAdjust\"),E):E,e.setProperty(k,\"maxAdjust\",E))}}else g(T,e.getProperty(l,\"proof\")?l:l.parent,E-C,!0)}}}catch(t){Q={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(Q)throw Q.error}}};var O=((r={}).bspr_maxAdjust=!0,r);e.setProperty=function(t,e,Q){o.default.setProperty(t,\"bspr_\"+e,Q)},e.getProperty=function(t,e){return o.default.getProperty(t,\"bspr_\"+e)},e.removeProperty=function(t,e){t.removeProperty(\"bspr_\"+e)},e.makeBsprAttributes=function(t){t.data.root.walkTree((function(t,e){var Q=[];t.getPropertyNames().forEach((function(e){!O[e]&&e.match(RegExp(\"^bspr_\"))&&Q.push(e+\":\"+t.getProperty(e))})),Q.length&&o.default.setAttribute(t,\"semantics\",Q.join(\";\"))}))},e.saveDocument=function(t){if(!(\"getBBox\"in(a=t.document).outputJax))throw Error(\"The bussproofs extension requires an output jax with a getBBox() method\")},e.clearDocument=function(t){a=null}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r,T=Q(9),n=Q(5),o=Q(26);!function(t){function e(t,e){return t.string.substr(t.i,e.length)!==e||e.match(/\\\\[a-z]+$/i)&&t.string.charAt(t.i+e.length).match(/[a-z]/i)?0:(t.i+=e.length,1)}t.disassembleSymbol=function(t,e){var Q=[t,e.char];if(e.attributes)for(var r in e.attributes)Q.push(r),Q.push(e.attributes[r]);return Q},t.assembleSymbol=function(t){for(var e=t[0],Q=t[1],r={},T=2;T<t.length;T+=2)r[t[T]]=t[T+1];return new o.Symbol(e,Q,r)},t.GetCSname=function(t,e){if(\"\\\\\"!==t.GetNext())throw new n.default(\"MissingCS\",\"%1 must be followed by a control sequence\",e);return T.default.trimSpaces(t.GetArgument(e)).substr(1)},t.GetTemplate=function(t,e,Q){for(var r=t.GetNext(),T=[],o=0,i=t.i;t.i<t.string.length;){if(\"#\"===(r=t.GetNext())){if(i!==t.i&&(T[o]=t.string.substr(i,t.i-i)),!(r=t.string.charAt(++t.i)).match(/^[1-9]$/))throw new n.default(\"CantUseHash2\",\"Illegal use of # in template for %1\",Q);if(parseInt(r)!==++o)throw new n.default(\"SequentialParam\",\"Parameters for %1 must be numbered sequentially\",Q);i=t.i+1}else if(\"{\"===r)return i!==t.i&&(T[o]=t.string.substr(i,t.i-i)),T.length>0?[o.toString()].concat(T):o;t.i++}throw new n.default(\"MissingReplacementString\",\"Missing replacement string for definition of %1\",e)},t.GetParameter=function(t,Q,r){if(null==r)return t.GetArgument(Q);for(var T=t.i,o=0,i=0;t.i<t.string.length;){var a=t.string.charAt(t.i);if(\"{\"===a)t.i===T&&(i=1),t.GetArgument(Q),o=t.i-T;else{if(e(t,r))return i&&(T++,o-=2),t.string.substr(T,o);if(\"\\\\\"===a){t.i++,o++,i=0;var s=t.string.substr(t.i).match(/[a-z]+|./i);s&&(t.i+=s[0].length,o=t.i-T)}else t.i++,o++,i=0}}throw new n.default(\"RunawayArgument\",\"Runaway argument for %1?\",Q)},t.MatchParam=e,t.addDelimiter=function(e,Q,r,T){e.configuration.handlers.retrieve(t.NEW_DELIMITER).add(Q,new o.Symbol(Q,r,T))},t.addMacro=function(e,Q,r,T,n){void 0===n&&(n=\"\"),e.configuration.handlers.retrieve(t.NEW_COMMAND).add(Q,new o.Macro(n||Q,r,T))},t.addEnvironment=function(e,Q,r,T){e.configuration.handlers.retrieve(t.NEW_ENVIRONMENT).add(Q,new o.Macro(Q,r,T))},t.NEW_DELIMITER=\"new-Delimiter\",t.NEW_COMMAND=\"new-Command\",t.NEW_ENVIRONMENT=\"new-Environment\"}(r||(r={})),e.default=r},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonArrow=e.CommonDiagonalArrow=e.CommonDiagonalStrike=e.CommonBorder2=e.CommonBorder=e.arrowBBox=e.diagonalArrowDef=e.arrowDef=e.arrowBBoxW=e.arrowBBoxHD=e.arrowHead=e.fullBorder=e.fullPadding=e.fullBBox=e.sideNames=e.sideIndex=e.SOLID=e.PADDING=e.THICKNESS=e.ARROWY=e.ARROWDX=e.ARROWX=void 0,e.ARROWX=4,e.ARROWDX=1,e.ARROWY=2,e.THICKNESS=.067,e.PADDING=.2,e.SOLID=e.THICKNESS+\"em solid\",e.sideIndex={top:0,right:1,bottom:2,left:3},e.sideNames=Object.keys(e.sideIndex),e.fullBBox=function(t){return new Array(4).fill(t.thickness+t.padding)},e.fullPadding=function(t){return new Array(4).fill(t.padding)},e.fullBorder=function(t){return new Array(4).fill(t.thickness)},e.arrowHead=function(t){return Math.max(t.padding,t.thickness*(t.arrowhead.x+t.arrowhead.dx+1))},e.arrowBBoxHD=function(t,e){if(t.childNodes[0]){var Q=t.childNodes[0].getBBox(),r=Q.h,T=Q.d;e[0]=e[2]=Math.max(0,t.thickness*t.arrowhead.y-(r+T)/2)}return e},e.arrowBBoxW=function(t,e){if(t.childNodes[0]){var Q=t.childNodes[0].getBBox().w;e[1]=e[3]=Math.max(0,t.thickness*t.arrowhead.y-Q/2)}return e},e.arrowDef={up:[-Math.PI/2,!1,!0,\"verticalstrike\"],down:[Math.PI/2,!1,!0,\"verticakstrike\"],right:[0,!1,!1,\"horizontalstrike\"],left:[Math.PI,!1,!1,\"horizontalstrike\"],updown:[Math.PI/2,!0,!0,\"verticalstrike uparrow downarrow\"],leftright:[0,!0,!1,\"horizontalstrike leftarrow rightarrow\"]},e.diagonalArrowDef={updiagonal:[-1,0,!1,\"updiagonalstrike northeastarrow\"],northeast:[-1,0,!1,\"updiagonalstrike updiagonalarrow\"],southeast:[1,0,!1,\"downdiagonalstrike\"],northwest:[1,Math.PI,!1,\"downdiagonalstrike\"],southwest:[-1,Math.PI,!1,\"updiagonalstrike\"],northeastsouthwest:[-1,0,!0,\"updiagonalstrike northeastarrow updiagonalarrow southwestarrow\"],northwestsoutheast:[1,0,!0,\"downdiagonalstrike northwestarrow southeastarrow\"]},e.arrowBBox={up:function(t){return e.arrowBBoxW(t,[e.arrowHead(t),0,t.padding,0])},down:function(t){return e.arrowBBoxW(t,[t.padding,0,e.arrowHead(t),0])},right:function(t){return e.arrowBBoxHD(t,[0,e.arrowHead(t),0,t.padding])},left:function(t){return e.arrowBBoxHD(t,[0,t.padding,0,e.arrowHead(t)])},updown:function(t){return e.arrowBBoxW(t,[e.arrowHead(t),0,e.arrowHead(t),0])},leftright:function(t){return e.arrowBBoxHD(t,[0,e.arrowHead(t),0,e.arrowHead(t)])}},e.CommonBorder=function(t){return function(Q){var r=e.sideIndex[Q];return[Q,{renderer:t,bbox:function(t){var e=[0,0,0,0];return e[r]=t.thickness+t.padding,e},border:function(t){var e=[0,0,0,0];return e[r]=t.thickness,e}}]}},e.CommonBorder2=function(t){return function(Q,r,T){var n=e.sideIndex[r],o=e.sideIndex[T];return[Q,{renderer:t,bbox:function(t){var e=t.thickness+t.padding,Q=[0,0,0,0];return Q[n]=Q[o]=e,Q},border:function(t){var e=[0,0,0,0];return e[n]=e[o]=t.thickness,e},remove:r+\" \"+T}]}},e.CommonDiagonalStrike=function(t){return function(Q){var r=\"mjx-\"+Q.charAt(0)+\"strike\";return[Q+\"diagonalstrike\",{renderer:t(r),bbox:e.fullBBox}]}},e.CommonDiagonalArrow=function(t){return function(Q){var T=r(e.diagonalArrowDef[Q],4),n=T[0],o=T[1],i=T[2];return[Q+\"arrow\",{renderer:function(e,Q){var r=e.arrowData(),T=r.a,a=r.W,s=e.arrow(a,n*(T-o),i);t(e,s)},bbox:function(t){var e=t.arrowData(),Q=e.a,T=e.x,n=e.y,o=r([t.arrowhead.x,t.arrowhead.y,t.arrowhead.dx],3),i=o[0],a=o[1],s=o[2],l=r(t.getArgMod(i+s,a),2),c=l[0],u=l[1],p=n+(c>Q?t.thickness*u*Math.sin(c-Q):0),h=T+(c>Math.PI/2-Q?t.thickness*u*Math.sin(c+Q-Math.PI/2):0);return[p,h,p,h]},remove:T[3]}]}},e.CommonArrow=function(t){return function(Q){var T=r(e.arrowDef[Q],4),n=T[0],o=T[1],i=T[2],a=T[3];return[Q+\"arrow\",{renderer:function(e,Q){var r=e.getBBox(),T=r.w,a=r.h,s=r.d,l=i?a+s:T,c=e.arrow(l,n,o);t(e,c)},bbox:e.arrowBBox[Q],remove:a}]}}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsubsupMixin=e.CommonMsupMixin=e.CommonMsubMixin=void 0,e.CommonMsubMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"script\",{get:function(){return this.childNodes[this.node.sub]},enumerable:!1,configurable:!0}),e.prototype.getOffset=function(t,e){return[0,-this.getV(t,e)]},e}(t)},e.CommonMsupMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"script\",{get:function(){return this.childNodes[this.node.sup]},enumerable:!1,configurable:!0}),e.prototype.getOffset=function(t,e){return[(this.baseCore.bbox.ic?.05*this.baseCore.bbox.ic+.05:0)*this.coreScale(),this.getU(t,e)]},e}(t)},e.CommonMsubsupMixin=function(t){return function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.UVQ=null,e}return T(e,t),Object.defineProperty(e.prototype,\"subChild\",{get:function(){return this.childNodes[this.node.sub]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"supChild\",{get:function(){return this.childNodes[this.node.sup]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var Q=this.baseChild.getBBox(),r=this.subChild.getBBox(),T=this.supChild.getBBox();t.empty(),t.append(Q);var o=t.w,i=n(this.getUVQ(Q,r,T),2),a=i[0],s=i[1],l=this.baseCore.bbox.ic?this.coreIC()*this.coreScale():0;t.combine(r,o,s),t.combine(T,o+l,a),t.w+=this.font.params.scriptspace,t.clean(),this.setChildPWidths(e)},e.prototype.getUVQ=function(t,e,Q){if(this.UVQ)return this.UVQ;var r=this.font.params,T=3*r.rule_thickness,o=this.length2em(this.node.attributes.get(\"subscriptshift\"),r.sub2),i=this.isCharBase()?0:t.d*t.rscale+r.sub_drop*e.rscale,a=n([this.getU(t,Q),Math.max(i,o)],2),s=a[0],l=a[1],c=s-Q.d*Q.rscale-(e.h*e.rscale-l);if(c<T){l+=T-c;var u=.8*r.x_height-(s-Q.d*Q.rscale);u>0&&(s+=u,l-=u)}return s=Math.max(this.length2em(this.node.attributes.get(\"superscriptshift\"),s),s),l=Math.max(this.length2em(this.node.attributes.get(\"subscriptshift\"),l),l),c=s-Q.d*Q.rscale-(e.h*e.rscale-l),this.UVQ=[s,-l,c],this.UVQ},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMunderoverMixin=e.CommonMoverMixin=e.CommonMunderMixin=void 0,e.CommonMunderMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this;return r.stretchChildren(),r}return T(e,t),Object.defineProperty(e.prototype,\"script\",{get:function(){return this.childNodes[this.node.under]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(e,Q){if(void 0===Q&&(Q=!1),this.hasMovableLimits())t.prototype.computeBBox.call(this,e,Q);else{e.empty();var r=this.baseChild.getBBox(),T=this.script.getBBox(),o=this.getUnderKV(r,T)[1],i=this.getDelta(!0),a=n(this.getDeltaW([r,T],[0,-i]),2),s=a[0],l=a[1];e.combine(r,s,0),e.combine(T,l,o),e.d+=this.font.params.big_op_spacing5,e.ic=-this.baseCore.bbox.ic,e.clean(),this.setChildPWidths(Q)}},e}(t)},e.CommonMoverMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this;return r.stretchChildren(),r}return T(e,t),Object.defineProperty(e.prototype,\"script\",{get:function(){return this.childNodes[this.node.over]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(e){if(this.hasMovableLimits())t.prototype.computeBBox.call(this,e);else{e.empty();var Q=this.baseChild.getBBox(),r=this.script.getBBox(),T=this.getOverKU(Q,r)[1],o=this.getDelta(),i=n(this.getDeltaW([Q,r],[0,o]),2),a=i[0],s=i[1];e.combine(Q,a,0),e.combine(r,s,T),e.h+=this.font.params.big_op_spacing5,e.ic=-this.baseCore.bbox.ic,e.clean()}},e}(t)},e.CommonMunderoverMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this;return r.stretchChildren(),r}return T(e,t),Object.defineProperty(e.prototype,\"underChild\",{get:function(){return this.childNodes[this.node.under]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"overChild\",{get:function(){return this.childNodes[this.node.over]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"subChild\",{get:function(){return this.underChild},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"supChild\",{get:function(){return this.overChild},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(e){if(this.hasMovableLimits())t.prototype.computeBBox.call(this,e);else{e.empty();var Q=this.overChild.getBBox(),r=this.baseChild.getBBox(),T=this.underChild.getBBox(),o=this.getOverKU(r,Q)[1],i=this.getUnderKV(r,T)[1],a=this.getDelta(),s=n(this.getDeltaW([r,T,Q],[0,-a,a]),3),l=s[0],c=s[1],u=s[2];e.combine(r,l,0),e.combine(Q,u,o),e.combine(T,c,i);var p=this.font.params.big_op_spacing5;e.h+=p,e.d+=p,e.ic=-this.baseCore.bbox.ic,e.clean()}},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmsubsup=e.SVGmsup=e.SVGmsub=void 0;var o=Q(207),i=Q(46),a=Q(46),s=Q(46),l=Q(39),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.kind=l.MmlMsub.prototype.kind,e.useIC=!1,e}(i.CommonMsubMixin(o.SVGscriptbase));e.SVGmsub=c;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.kind=l.MmlMsup.prototype.kind,e.useIC=!0,e}(a.CommonMsupMixin(o.SVGscriptbase));e.SVGmsup=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),Q=n([this.baseChild,this.supChild,this.subChild],3),r=Q[0],T=Q[1],o=Q[2],i=r.getBBox(),a=n(this.getUVQ(i,o.getBBox(),T.getBBox()),2),s=a[0],l=a[1],c=this.baseCore.bbox.ic?this.coreIC()*this.coreScale():0;r.toSVG(e),T.toSVG(e),o.toSVG(e),o.place(i.w*i.rscale,l),T.place(i.w*i.rscale+c,s)},e.kind=l.MmlMsubsup.prototype.kind,e.useIC=!1,e}(s.CommonMsubsupMixin(o.SVGscriptbase));e.SVGmsubsup=p},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.HTMLHandler=void 0;var n=Q(108),o=Q(122),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.documentClass=o.HTMLDocument,e}return T(e,t),e.prototype.handlesDocument=function(t){var e=this.adaptor;if(\"string\"==typeof t)try{t=e.parse(t,\"text/html\")}catch(t){}return t instanceof e.window.Document||t instanceof e.window.HTMLElement||t instanceof e.window.DocumentFragment},e.prototype.create=function(e,Q){var r=this.adaptor;if(\"string\"==typeof e)e=r.parse(e,\"text/html\");else if(e instanceof r.window.HTMLElement||e instanceof r.window.DocumentFragment){var T=e;e=r.parse(\"\",\"text/html\"),r.append(r.body(e),T)}return t.prototype.create.call(this,e,Q)},e}(n.AbstractHandler);e.HTMLHandler=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVG=e.XLINKNS=e.SVGNS=void 0;var i=Q(167),a=Q(191),s=Q(35),l=Q(266),c=Q(15),u=Q(32);e.SVGNS=\"http://www.w3.org/2000/svg\",e.XLINKNS=\"http://www.w3.org/1999/xlink\";var p=function(t){function Q(e){void 0===e&&(e=null);var Q=t.call(this,e,a.SVGWrapperFactory,s.TeXFont)||this;return Q.minwidth=0,Q.shift=0,Q.container=null,Q.svgStyles=null,Q.fontCache=new l.FontCache(Q),Q}return T(Q,t),Q.prototype.initialize=function(){\"global\"===this.options.fontCache&&this.fontCache.clearCache()},Q.prototype.clearFontCache=function(){this.fontCache.clearCache()},Q.prototype.setScale=function(t){1!==this.options.scale&&this.adaptor.setStyle(t,\"fontSize\",u.percent(this.options.scale))},Q.prototype.escaped=function(t,e){return this.setDocument(e),this.html(\"span\",{},[this.text(t.math)])},Q.prototype.styleSheet=function(e){if(this.svgStyles)return null;var r=this.svgStyles=t.prototype.styleSheet.call(this,e);return this.adaptor.setAttribute(r,\"id\",Q.STYLESHEETID),r},Q.prototype.pageElements=function(t){return\"global\"!==this.options.fontCache||this.findCache(t)?null:this.svg(\"svg\",{id:Q.FONTCACHEID,style:{display:\"none\"}},[this.fontCache.getCache()])},Q.prototype.findCache=function(t){for(var e=this.adaptor,r=e.tags(e.body(t.document),\"svg\"),T=r.length-1;T>=0;T--)if(this.adaptor.getAttribute(r[T],\"id\")===Q.FONTCACHEID)return!0;return!1},Q.prototype.processMath=function(t,e){var Q=this.container;this.container=e;var r=this.factory.wrap(t),T=o(this.createRoot(r),2),n=T[0],i=T[1];this.typesetSVG(r,n,i),this.container=Q},Q.prototype.createRoot=function(t){var Q=t.getBBox(),r=Q.w,T=Q.h,n=Q.d,o=Q.pwidth,i=Math.max(r,.001),a=this.svg(\"g\",{stroke:\"currentColor\",fill:\"currentColor\",\"stroke-width\":0,transform:\"matrix(1 0 0 -1 0 0)\"}),s=this.adaptor,l=s.append(this.container,this.svg(\"svg\",{xmlns:e.SVGNS,width:this.ex(i),height:this.ex(T+n),role:\"img\",focusable:!1,style:{\"vertical-align\":this.ex(-n)},viewBox:[0,this.fixed(1e3*-T,1),this.fixed(1e3*i,1),this.fixed(1e3*(T+n),1)].join(\" \")},[a]));if(.001===i&&(s.setAttribute(l,\"preserveAspectRatio\",\"xMidYMid slice\"),r<0&&s.setStyle(this.container,\"margin-right\",this.ex(r))),o){s.setStyle(l,\"min-width\",this.ex(i)),s.setAttribute(l,\"width\",o),s.removeAttribute(l,\"viewBox\");var c=t.metrics.ex/(1e3*this.font.params.x_height);s.setAttribute(a,\"transform\",\"matrix(1 0 0 -1 0 0) scale(\"+this.fixed(c,6)+\") translate(0, \"+this.fixed(1e3*-T,1)+\")\")}return\"none\"!==this.options.fontCache&&s.setAttribute(l,\"xmlns:xlink\",e.XLINKNS),[l,a]},Q.prototype.typesetSVG=function(t,e,Q){var r=this.adaptor;if(this.minwidth=this.shift=0,\"local\"===this.options.fontCache&&(this.fontCache.clearCache(),this.fontCache.useLocalID(this.options.localID),r.insert(this.fontCache.getCache(),Q)),t.toSVG(Q),this.fontCache.clearLocalID(),this.minwidth)r.setStyle(e,\"minWidth\",this.ex(this.minwidth)),r.setStyle(this.container,\"minWidth\",this.ex(this.minwidth));else if(this.shift){var T=r.getAttribute(this.container,\"justify\")||\"center\";this.setIndent(e,T,this.shift)}},Q.prototype.setIndent=function(t,e,Q){\"center\"!==e&&\"left\"!==e||this.adaptor.setStyle(t,\"margin-left\",this.ex(Q)),\"center\"!==e&&\"right\"!==e||this.adaptor.setStyle(t,\"margin-right\",this.ex(-Q))},Q.prototype.ex=function(t){return t/=this.font.params.x_height,Math.abs(t)<.001?\"0\":t.toFixed(3).replace(/\\.?0+$/,\"\")+\"ex\"},Q.prototype.svg=function(t,Q,r){return void 0===Q&&(Q={}),void 0===r&&(r=[]),this.html(t,Q,r,e.SVGNS)},Q.prototype.unknownText=function(t,e){var Q=this.math.metrics,r=this.font.params.x_height/Q.ex*Q.em*1e3,T=this.svg(\"text\",{\"data-variant\":e,transform:\"matrix(1 0 0 -1 0 0)\",\"font-size\":this.fixed(r,1)+\"px\"},[this.text(t)]),n=this.adaptor;if(\"-explicitFont\"!==e){var i=c.unicodeChars(t);if(1!==i.length||i[0]<119808||i[0]>120831){var a=o(this.font.getCssFont(e),3),s=a[0],l=a[1],u=a[2];n.setAttribute(T,\"font-family\",s),l&&n.setAttribute(T,\"font-style\",\"italic\"),u&&n.setAttribute(T,\"font-weight\",\"bold\")}}return T},Q.prototype.measureTextNode=function(t){var e=this.adaptor;t=e.clone(t),e.removeAttribute(t,\"transform\");var Q=this.fixed(1e3*this.font.params.x_height,1),r=this.svg(\"svg\",{position:\"absolute\",visibility:\"hidden\",width:\"1ex\",height:\"1ex\",viewBox:[0,0,Q,Q].join(\" \")},[t]);e.append(e.body(e.document),r);var T=e.nodeSize(t,1e3,!0)[0];return e.remove(r),{w:T,h:.75,d:.2}},Q.NAME=\"SVG\",Q.OPTIONS=n(n({},i.CommonOutputJax.OPTIONS),{internalSpeechTitles:!0,titleID:0,fontCache:\"local\",localID:null}),Q.commonStyles={'mjx-container[jax=\"SVG\"]':{direction:\"ltr\"},'mjx-container[jax=\"SVG\"] > svg':{overflow:\"visible\"},'mjx-container[jax=\"SVG\"] > svg a':{fill:\"blue\",stroke:\"blue\"}},Q.FONTCACHEID=\"MJX-SVG-global-cache\",Q.STYLESHEETID=\"MJX-SVG-styles\",Q}(i.CommonOutputJax);e.SVG=p},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.KEY=void 0,function(t){t[t.RETURN=13]=\"RETURN\",t[t.ESCAPE=27]=\"ESCAPE\",t[t.SPACE=32]=\"SPACE\",t[t.LEFT=37]=\"LEFT\",t[t.UP=38]=\"UP\",t[t.RIGHT=39]=\"RIGHT\",t[t.DOWN=40]=\"DOWN\"}(e.KEY||(e.KEY={}))},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractVariableItem=void 0;var n=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this);var e=this.html;this.span||this.generateSpan(),e.appendChild(this.span),this.update()},e.prototype.register=function(){this.variable.register(this)},e.prototype.unregister=function(){this.variable.unregister(this)},e.prototype.update=function(){this.updateAria(),this.span&&this.updateSpan()},e}(Q(36).AbstractItem);e.AbstractVariableItem=n},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractMathDocument=e.RenderList=void 0;var a=Q(7),s=Q(54),l=Q(55),c=Q(56),u=Q(14),p=Q(57),h=Q(117),f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.create=function(t){var e,Q,r=new this;try{for(var T=n(Object.keys(t)),i=T.next();!i.done;i=T.next()){var a=i.value,s=o(this.action(a,t[a]),2),l=s[0],c=s[1];c&&r.add(l,c)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}return r},e.action=function(t,e){var Q,r,T,n,i,a,s=!0,l=e[0];if(1===e.length||\"boolean\"==typeof e[1])2===e.length&&(s=e[1]),i=(Q=o(this.methodActions(t),2))[0],a=Q[1];else if(\"string\"==typeof e[1])if(\"string\"==typeof e[2]){4===e.length&&(s=e[3]);var c=o(e.slice(1),2),u=c[0],p=c[1];i=(r=o(this.methodActions(u,p),2))[0],a=r[1]}else 3===e.length&&(s=e[2]),i=(T=o(this.methodActions(e[1]),2))[0],a=T[1];else 4===e.length&&(s=e[3]),i=(n=o(e.slice(1),2))[0],a=n[1];return[{id:t,renderDoc:i,renderMath:a,convert:s},l]},e.methodActions=function(t,e){return void 0===e&&(e=t),[function(e){return t&&e[t](),!1},function(t,Q){return e&&t[e](Q),!1}]},e.prototype.renderDoc=function(t,e){var Q,r;void 0===e&&(e=u.STATE.UNPROCESSED);try{for(var T=n(this.items),o=T.next();!o.done;o=T.next()){var i=o.value;if(i.priority>=e&&i.item.renderDoc(t))return}}catch(t){Q={error:t}}finally{try{o&&!o.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}},e.prototype.renderMath=function(t,e,Q){var r,T;void 0===Q&&(Q=u.STATE.UNPROCESSED);try{for(var o=n(this.items),i=o.next();!i.done;i=o.next()){var a=i.value;if(a.priority>=Q&&a.item.renderMath(t,e))return}}catch(t){r={error:t}}finally{try{i&&!i.done&&(T=o.return)&&T.call(o)}finally{if(r)throw r.error}}},e.prototype.renderConvert=function(t,e,Q){var r,T;void 0===Q&&(Q=u.STATE.LAST);try{for(var o=n(this.items),i=o.next();!i.done;i=o.next()){var a=i.value;if(a.priority>Q)return;if(a.item.convert&&a.item.renderMath(t,e))return}}catch(t){r={error:t}}finally{try{i&&!i.done&&(T=o.return)&&T.call(o)}finally{if(r)throw r.error}}},e.prototype.findID=function(t){var e,Q;try{for(var r=n(this.items),T=r.next();!T.done;T=r.next()){var o=T.value;if(o.item.id===t)return o.item}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}return null},e}(Q(21).PrioritizedList);e.RenderList=f;var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.compile=function(t){return null},e}(s.AbstractInputJax),L=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.typeset=function(t,e){return void 0===e&&(e=null),null},e.prototype.escaped=function(t,e){return null},e}(l.AbstractOutputJax),H=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e}(c.AbstractMathList),m=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e}(u.AbstractMathItem),y=function(){function t(e,Q,r){var T=this,n=this.constructor;this.document=e,this.options=a.userOptions(a.defaultOptions({},n.OPTIONS),r),this.math=new(this.options.MathList||H),this.renderActions=f.create(this.options.renderActions),this.processed=new t.ProcessBits,this.outputJax=this.options.OutputJax||new L;var o=this.options.InputJax||[new d];Array.isArray(o)||(o=[o]),this.inputJax=o,this.adaptor=Q,this.outputJax.setAdaptor(Q),this.inputJax.map((function(t){return t.setAdaptor(Q)})),this.mmlFactory=this.options.MmlFactory||new p.MmlFactory,this.inputJax.map((function(t){return t.setMmlFactory(T.mmlFactory)})),this.outputJax.initialize(),this.inputJax.map((function(t){return t.initialize()}))}return Object.defineProperty(t.prototype,\"kind\",{get:function(){return this.constructor.KIND},enumerable:!1,configurable:!0}),t.prototype.addRenderAction=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q];var r=o(f.action(t,e),2),T=r[0],n=r[1];this.renderActions.add(T,n)},t.prototype.removeRenderAction=function(t){var e=this.renderActions.findID(t);e&&this.renderActions.remove(e)},t.prototype.render=function(){return this.renderActions.renderDoc(this),this},t.prototype.rerender=function(t){return void 0===t&&(t=u.STATE.RERENDER),this.state(t-1),this.render(),this},t.prototype.convert=function(t,e){void 0===e&&(e={});var Q=a.userOptions({format:this.inputJax[0].name,display:!0,end:u.STATE.LAST,em:16,ex:8,containerWidth:null,lineWidth:1e6,scale:1,family:\"\"},e),r=Q.format,T=Q.display,n=Q.end,o=Q.ex,i=Q.em,s=Q.containerWidth,l=Q.lineWidth,c=Q.scale,p=Q.family;null===s&&(s=80*o);var h=this.inputJax.reduce((function(t,e){return e.name===r?e:t}),null),f=new this.options.MathItem(t,h,T);return f.start.node=this.adaptor.body(this.document),f.setMetrics(i,o,s,l,c),this.outputJax.options.mtextInheritFont&&(f.outputData.mtextFamily=p),this.outputJax.options.merrorInheritFont&&(f.outputData.merrorFamily=p),f.convert(this,n),f.typesetRoot||f.root},t.prototype.findMath=function(t){return void 0===t&&(t=null),this.processed.set(\"findMath\"),this},t.prototype.compile=function(){var t,e,Q,r;if(!this.processed.isSet(\"compile\")){var T=[];try{for(var o=n(this.math),i=o.next();!i.done;i=o.next()){var a=i.value;this.compileMath(a),void 0!==a.inputData.recompile&&T.push(a)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}try{for(var s=n(T),l=s.next();!l.done;l=s.next()){var c=(a=l.value).inputData.recompile;a.state(c.state),a.inputData.recompile=c,this.compileMath(a)}}catch(t){Q={error:t}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(Q)throw Q.error}}this.processed.set(\"compile\")}return this},t.prototype.compileMath=function(t){try{t.compile(this)}catch(e){if(e.retry||e.restart)throw e;this.options.compileError(this,t,e),t.inputData.error=e}},t.prototype.compileError=function(t,e){t.root=this.mmlFactory.create(\"math\",null,[this.mmlFactory.create(\"merror\",{\"data-mjx-error\":e.message,title:e.message},[this.mmlFactory.create(\"mtext\",null,[this.mmlFactory.create(\"text\").setText(\"Math input error\")])])]),t.display&&t.root.attributes.set(\"display\",\"block\"),t.inputData.error=e.message},t.prototype.typeset=function(){var t,e;if(!this.processed.isSet(\"typeset\")){try{for(var Q=n(this.math),r=Q.next();!r.done;r=Q.next()){var T=r.value;try{T.typeset(this)}catch(t){if(t.retry||t.restart)throw t;this.options.typesetError(this,T,t),T.outputData.error=t}}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}this.processed.set(\"typeset\")}return this},t.prototype.typesetError=function(t,e){t.typesetRoot=this.adaptor.node(\"mjx-container\",{class:\"MathJax mjx-output-error\",jax:this.outputJax.name},[this.adaptor.node(\"span\",{\"data-mjx-error\":e.message,title:e.message,style:{color:\"red\",\"background-color\":\"yellow\",\"line-height\":\"normal\"}},[this.adaptor.text(\"Math output error\")])]),t.display&&this.adaptor.setAttributes(t.typesetRoot,{style:{display:\"block\",margin:\"1em 0\",\"text-align\":\"center\"}}),t.outputData.error=e.message},t.prototype.getMetrics=function(){return this.processed.isSet(\"getMetrics\")||(this.outputJax.getMetrics(this),this.processed.set(\"getMetrics\")),this},t.prototype.updateDocument=function(){var t,e;if(!this.processed.isSet(\"updateDocument\")){try{for(var Q=n(this.math.reversed()),r=Q.next();!r.done;r=Q.next()){r.value.updateDocument(this)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}this.processed.set(\"updateDocument\")}return this},t.prototype.removeFromDocument=function(t){return void 0===t&&(t=!1),this},t.prototype.state=function(t,e){var Q,r;void 0===e&&(e=!1);try{for(var T=n(this.math),o=T.next();!o.done;o=T.next()){o.value.state(t,e)}}catch(t){Q={error:t}}finally{try{o&&!o.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}return t<u.STATE.INSERTED&&this.processed.clear(\"updateDocument\"),t<u.STATE.TYPESET&&(this.processed.clear(\"typeset\"),this.processed.clear(\"getMetrics\")),t<u.STATE.COMPILED&&this.processed.clear(\"compile\"),this},t.prototype.reset=function(){return this.processed.reset(),this},t.prototype.clear=function(){return this.reset(),this.math.clear(),this},t.prototype.concat=function(t){return this.math.merge(t),this},t.prototype.clearMathItemsWithin=function(t){var e;(e=this.math).remove.apply(e,i(this.getMathItemsWithin(t)))},t.prototype.getMathItemsWithin=function(t){var e,Q,r,T;Array.isArray(t)||(t=[t]);var o=this.adaptor,i=[],a=o.getElements(t,this.document);try{t:for(var s=n(this.math),l=s.next();!l.done;l=s.next()){var c=l.value;try{for(var u=(r=void 0,n(a)),p=u.next();!p.done;p=u.next()){var h=p.value;if(c.start.node&&o.contains(h,c.start.node)){i.push(c);continue t}}}catch(t){r={error:t}}finally{try{p&&!p.done&&(T=u.return)&&T.call(u)}finally{if(r)throw r.error}}}}catch(t){e={error:t}}finally{try{l&&!l.done&&(Q=s.return)&&Q.call(s)}finally{if(e)throw e.error}}return i},t.KIND=\"MathDocument\",t.OPTIONS={OutputJax:null,InputJax:null,MmlFactory:null,MathList:H,MathItem:m,compileError:function(t,e,Q){t.compileError(e,Q)},typesetError:function(t,e,Q){t.typesetError(e,Q)},renderActions:a.expandable({find:[u.STATE.FINDMATH,\"findMath\",\"\",!1],compile:[u.STATE.COMPILED],metrics:[u.STATE.METRICS,\"getMetrics\",\"\",!1],typeset:[u.STATE.TYPESET],update:[u.STATE.INSERTED,\"updateDocument\",!1]})},t.ProcessBits=h.BitFieldClass(\"findMath\",\"compile\",\"getMetrics\",\"typeset\",\"updateDocument\"),t}();e.AbstractMathDocument=y},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractInputJax=void 0;var r=Q(7),T=Q(30),n=function(){function t(t){void 0===t&&(t={}),this.adaptor=null,this.mmlFactory=null;var e=this.constructor;this.options=r.userOptions(r.defaultOptions({},e.OPTIONS),t),this.preFilters=new T.FunctionList,this.postFilters=new T.FunctionList}return Object.defineProperty(t.prototype,\"name\",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),t.prototype.setAdaptor=function(t){this.adaptor=t},t.prototype.setMmlFactory=function(t){this.mmlFactory=t},t.prototype.initialize=function(){},Object.defineProperty(t.prototype,\"processStrings\",{get:function(){return!0},enumerable:!1,configurable:!0}),t.prototype.findMath=function(t,e){return[]},t.prototype.executeFilters=function(t,e,Q,r){var T={math:e,document:Q,data:r};return t.execute(T),T.data},t.NAME=\"generic\",t.OPTIONS={},t}();e.AbstractInputJax=n},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractOutputJax=void 0;var r=Q(7),T=Q(30),n=function(){function t(t){void 0===t&&(t={}),this.adaptor=null;var e=this.constructor;this.options=r.userOptions(r.defaultOptions({},e.OPTIONS),t),this.postFilters=new T.FunctionList}return Object.defineProperty(t.prototype,\"name\",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),t.prototype.setAdaptor=function(t){this.adaptor=t},t.prototype.initialize=function(){},t.prototype.getMetrics=function(t){},t.prototype.styleSheet=function(t){return null},t.prototype.pageElements=function(t){return null},t.prototype.executeFilters=function(t,e,Q,r){var T={math:e,document:Q,data:r};return t.execute(T),T.data},t.NAME=\"generic\",t.OPTIONS={},t}();e.AbstractOutputJax=n},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractMathList=void 0;var n=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.isBefore=function(t,e){return t.start.i<e.start.i||t.start.i===e.start.i&&t.start.n<e.start.n},e}(Q(109).LinkedList);e.AbstractMathList=n},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlFactory=void 0;var n=Q(110),o=Q(111),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"MML\",{get:function(){return this.node},enumerable:!1,configurable:!0}),e.defaultNodes=o.MML,e}(n.AbstractNodeFactory);e.MmlFactory=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractEmptyNode=e.AbstractNode=void 0;var o=function(){function t(t,e,Q){var r,T;void 0===e&&(e={}),void 0===Q&&(Q=[]),this.parent=null,this.properties={},this._factory=null,this.childNodes=[],this._factory=t;try{for(var o=n(Object.keys(e)),i=o.next();!i.done;i=o.next()){var a=i.value;this.setProperty(a,e[a])}}catch(t){r={error:t}}finally{try{i&&!i.done&&(T=o.return)&&T.call(o)}finally{if(r)throw r.error}}Q.length&&this.setChildren(Q)}return Object.defineProperty(t.prototype,\"factory\",{get:function(){return this._factory},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"kind\",{get:function(){return\"unknown\"},enumerable:!1,configurable:!0}),t.prototype.setProperty=function(t,e){this.properties[t]=e},t.prototype.getProperty=function(t){return this.properties[t]},t.prototype.getPropertyNames=function(){return Object.keys(this.properties)},t.prototype.getAllProperties=function(){return this.properties},t.prototype.removeProperty=function(){for(var t,e,Q=[],r=0;r<arguments.length;r++)Q[r]=arguments[r];try{for(var T=n(Q),o=T.next();!o.done;o=T.next()){var i=o.value;delete this.properties[i]}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}},t.prototype.isKind=function(t){return this.factory.nodeIsKind(this,t)},t.prototype.setChildren=function(t){var e,Q;this.childNodes=[];try{for(var r=n(t),T=r.next();!T.done;T=r.next()){var o=T.value;this.appendChild(o)}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}},t.prototype.appendChild=function(t){return this.childNodes.push(t),t.parent=this,t},t.prototype.replaceChild=function(t,e){var Q=this.childIndex(e);return null!==Q&&(this.childNodes[Q]=t,t.parent=this),t},t.prototype.childIndex=function(t){var e=this.childNodes.indexOf(t);return-1===e?null:e},t.prototype.findNodes=function(t){var e=[];return this.walkTree((function(Q){Q.isKind(t)&&e.push(Q)})),e},t.prototype.walkTree=function(t,e){var Q,r;t(this,e);try{for(var T=n(this.childNodes),o=T.next();!o.done;o=T.next()){var i=o.value;i&&i.walkTree(t,e)}}catch(t){Q={error:t}}finally{try{o&&!o.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}return e},t.prototype.toString=function(){return this.kind+\"(\"+this.childNodes.join(\",\")+\")\"},t}();e.AbstractNode=o;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.setChildren=function(t){},e.prototype.appendChild=function(t){return t},e.prototype.replaceChild=function(t,e){return e},e.prototype.childIndex=function(t){return null},e.prototype.walkTree=function(t,e){return t(this,e),e},e.prototype.toString=function(){return this.kind},e}(o);e.AbstractEmptyNode=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMath=void 0;var o=Q(0),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"math\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(e,Q,r,T){\"display\"===this.attributes.get(\"mode\")&&this.attributes.setInherited(\"display\",\"block\"),e=this.addInheritedAttributes(e,this.attributes.getAllAttributes()),Q=!!this.attributes.get(\"displaystyle\")||!this.attributes.get(\"displaystyle\")&&\"block\"===this.attributes.get(\"display\"),this.attributes.setInherited(\"displaystyle\",Q),r=this.attributes.get(\"scriptlevel\")||this.constructor.defaults.scriptlevel,t.prototype.setChildInheritedAttributes.call(this,e,Q,r,T)},e.defaults=n(n({},o.AbstractMmlLayoutNode.defaults),{mathvariant:\"normal\",mathsize:\"normal\",mathcolor:\"\",mathbackground:\"transparent\",dir:\"ltr\",scriptlevel:0,displaystyle:!1,display:\"inline\",maxwidth:\"\",overflow:\"linebreak\",altimg:\"\",\"altimg-width\":\"\",\"altimg-height\":\"\",\"altimg-valign\":\"\",alttext:\"\",cdgroup:\"\",scriptsizemultiplier:1/Math.sqrt(2),scriptminsize:\"8px\",infixlinebreakstyle:\"before\",lineleading:\"1ex\",linebreakmultchar:\"\\u2062\",indentshift:\"auto\",indentalign:\"auto\",indenttarget:\"\",indentalignfirst:\"indentalign\",indentshiftfirst:\"indentshift\",indentalignlast:\"indentalign\",indentshiftlast:\"indentshift\"}),e}(o.AbstractMmlLayoutNode);e.MmlMath=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMn=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mn\"},enumerable:!1,configurable:!0}),e.defaults=n({},o.AbstractMmlTokenNode.defaults),e}(o.AbstractMmlTokenNode);e.MmlMn=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtext=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mtext\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isSpacelike\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.defaults=n({},o.AbstractMmlTokenNode.defaults),e}(o.AbstractMmlTokenNode);e.MmlMtext=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMspace=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mspace\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isSpacelike\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"hasNewline\",{get:function(){var t=this.attributes;return null==t.getExplicit(\"width\")&&null==t.getExplicit(\"height\")&&null==t.getExplicit(\"depth\")&&\"newline\"===t.get(\"linebreak\")},enumerable:!1,configurable:!0}),e.defaults=n(n({},o.AbstractMmlTokenNode.defaults),{width:\"0em\",height:\"0ex\",depth:\"0ex\",linebreak:\"auto\"}),e}(o.AbstractMmlTokenNode);e.MmlMspace=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMs=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"ms\"},enumerable:!1,configurable:!0}),e.defaults=n(n({},o.AbstractMmlTokenNode.defaults),{lquote:'\"',rquote:'\"'}),e}(o.AbstractMmlTokenNode);e.MmlMs=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlInferredMrow=e.MmlMrow=void 0;var i=Q(0),a=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._core=null,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mrow\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isSpacelike\",{get:function(){var t,e;try{for(var Q=o(this.childNodes),r=Q.next();!r.done;r=Q.next()){if(!r.value.isSpacelike)return!1}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isEmbellished\",{get:function(){var t,e,Q=!1,r=0;try{for(var T=o(this.childNodes),n=T.next();!n.done;n=T.next()){var i=n.value;if(i)if(i.isEmbellished){if(Q)return!1;Q=!0,this._core=r}else if(!i.isSpacelike)return!1;r++}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}return Q},enumerable:!1,configurable:!0}),e.prototype.core=function(){return this.isEmbellished&&null!=this._core?this.childNodes[this._core]:this},e.prototype.coreMO=function(){return this.isEmbellished&&null!=this._core?this.childNodes[this._core].coreMO():this},e.prototype.nonSpaceLength=function(){var t,e,Q=0;try{for(var r=o(this.childNodes),T=r.next();!T.done;T=r.next()){var n=T.value;n&&!n.isSpacelike&&Q++}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return Q},e.prototype.firstNonSpace=function(){var t,e;try{for(var Q=o(this.childNodes),r=Q.next();!r.done;r=Q.next()){var T=r.value;if(T&&!T.isSpacelike)return T}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}return null},e.prototype.lastNonSpace=function(){for(var t=this.childNodes.length;--t>=0;){var e=this.childNodes[t];if(e&&!e.isSpacelike)return e}return null},e.prototype.setTeXclass=function(t){var e,Q,r,T;if(null==this.getProperty(\"open\")&&null==this.getProperty(\"close\")||t&&null==t.getProperty(\"fnOP\")){try{for(var n=o(this.childNodes),a=n.next();!a.done;a=n.next()){t=a.value.setTeXclass(t)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(T=n.return)&&T.call(n)}finally{if(r)throw r.error}}this.childNodes[0]&&this.updateTeXclass(this.childNodes[0])}else{this.getPrevClass(t),t=null;try{for(var s=o(this.childNodes),l=s.next();!l.done;l=s.next()){t=l.value.setTeXclass(t)}}catch(t){e={error:t}}finally{try{l&&!l.done&&(Q=s.return)&&Q.call(s)}finally{if(e)throw e.error}}null==this.texClass&&(this.texClass=i.TEXCLASS.INNER)}return t},e.defaults=n({},i.AbstractMmlNode.defaults),e}(i.AbstractMmlNode);e.MmlMrow=a;var s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"inferredMrow\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isInferred\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"notParent\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.toString=function(){return\"[\"+this.childNodes.join(\",\")+\"]\"},e.defaults=a.defaults,e}(a);e.MmlInferredMrow=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMfrac=void 0;var i=Q(0),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mfrac\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){var e,Q;this.getPrevClass(t);try{for(var r=o(this.childNodes),T=r.next();!T.done;T=r.next()){T.value.setTeXclass(null)}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}return this},e.prototype.setChildInheritedAttributes=function(t,e,Q,r){(!e||Q>0)&&Q++,this.childNodes[0].setInheritedAttributes(t,!1,Q,r),this.childNodes[1].setInheritedAttributes(t,!1,Q,!0)},e.defaults=n(n({},i.AbstractMmlBaseNode.defaults),{linethickness:\"medium\",numalign:\"center\",denomalign:\"center\",bevelled:!1}),e}(i.AbstractMmlBaseNode);e.MmlMfrac=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMsqrt=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"msqrt\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return-1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){return this.getPrevClass(t),this.childNodes[0].setTeXclass(null),this},e.prototype.setChildInheritedAttributes=function(t,e,Q,r){this.childNodes[0].setInheritedAttributes(t,e,Q,!0)},e.defaults=n({},o.AbstractMmlNode.defaults),e}(o.AbstractMmlNode);e.MmlMsqrt=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMroot=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mroot\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 2},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(t,e,Q,r){this.childNodes[0].setInheritedAttributes(t,e,Q,!0),this.childNodes[1].setInheritedAttributes(t,!1,Q+2,r)},e.defaults=n({},o.AbstractMmlNode.defaults),e}(o.AbstractMmlNode);e.MmlMroot=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMerror=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"merror\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return-1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.defaults=n({},o.AbstractMmlNode.defaults),e}(o.AbstractMmlNode);e.MmlMerror=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMpadded=void 0;var o=Q(0),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mpadded\"},enumerable:!1,configurable:!0}),e.defaults=n(n({},o.AbstractMmlLayoutNode.defaults),{width:\"\",height:\"\",depth:\"\",lspace:0,voffset:0}),e}(o.AbstractMmlLayoutNode);e.MmlMpadded=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMphantom=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mphantom\"},enumerable:!1,configurable:!0}),e.defaults=n({},o.AbstractMmlLayoutNode.defaults),e}(o.AbstractMmlLayoutNode);e.MmlMphantom=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMfenced=void 0;var i=Q(0),a=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=i.TEXCLASS.INNER,e.separators=[],e.open=null,e.close=null,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mfenced\"},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){this.getPrevClass(t),this.open&&(t=this.open.setTeXclass(t)),this.childNodes[0]&&(t=this.childNodes[0].setTeXclass(t));for(var e=1,Q=this.childNodes.length;e<Q;e++)this.separators[e-1]&&(t=this.separators[e-1].setTeXclass(t)),this.childNodes[e]&&(t=this.childNodes[e].setTeXclass(t));return this.close&&(t=this.close.setTeXclass(t)),this.updateTeXclass(this.open),t},e.prototype.setChildInheritedAttributes=function(e,Q,r,T){var n,i;this.addFakeNodes();try{for(var a=o([this.open,this.close].concat(this.separators)),s=a.next();!s.done;s=a.next()){var l=s.value;l&&l.setInheritedAttributes(e,Q,r,T)}}catch(t){n={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}t.prototype.setChildInheritedAttributes.call(this,e,Q,r,T)},e.prototype.addFakeNodes=function(){var t,e,Q=this.attributes.getList(\"open\",\"close\",\"separators\"),r=Q.open,T=Q.close,n=Q.separators;if(r=r.replace(/[ \\t\\n\\r]/g,\"\"),T=T.replace(/[ \\t\\n\\r]/g,\"\"),n=n.replace(/[ \\t\\n\\r]/g,\"\"),r&&(this.open=this.fakeNode(r,{fence:!0,form:\"prefix\"},i.TEXCLASS.OPEN)),n){for(;n.length<this.childNodes.length-1;)n+=n.charAt(n.length-1);var a=0;try{for(var s=o(this.childNodes.slice(1)),l=s.next();!l.done;l=s.next()){l.value&&this.separators.push(this.fakeNode(n.charAt(a++)))}}catch(e){t={error:e}}finally{try{l&&!l.done&&(e=s.return)&&e.call(s)}finally{if(t)throw t.error}}}T&&(this.close=this.fakeNode(T,{fence:!0,form:\"postfix\"},i.TEXCLASS.CLOSE))},e.prototype.fakeNode=function(t,e,Q){void 0===e&&(e={}),void 0===Q&&(Q=null);var r=this.factory.create(\"text\").setText(t),T=this.factory.create(\"mo\",e,[r]);return T.texClass=Q,T.parent=this,T},e.defaults=n(n({},i.AbstractMmlNode.defaults),{open:\"(\",close:\")\",separators:\",\"}),e}(i.AbstractMmlNode);e.MmlMfenced=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMenclose=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"menclose\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return-1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"linebreakContininer\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){return t=this.childNodes[0].setTeXclass(t),this.updateTeXclass(this.childNodes[0]),t},e.defaults=n(n({},o.AbstractMmlNode.defaults),{notation:\"longdiv\"}),e}(o.AbstractMmlNode);e.MmlMenclose=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMaction=void 0;var o=Q(0),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"maction\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"selected\",{get:function(){var t=this.attributes.get(\"selection\"),e=Math.max(1,Math.min(this.childNodes.length,t))-1;return this.childNodes[e]||this.factory.create(\"mrow\")},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isEmbellished\",{get:function(){return this.selected.isEmbellished},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isSpacelike\",{get:function(){return this.selected.isSpacelike},enumerable:!1,configurable:!0}),e.prototype.core=function(){return this.selected.core()},e.prototype.coreMO=function(){return this.selected.coreMO()},e.prototype.verifyAttributes=function(e){(t.prototype.verifyAttributes.call(this,e),\"toggle\"!==this.attributes.get(\"actiontype\")&&void 0!==this.attributes.getExplicit(\"selection\"))&&delete this.attributes.getAllAttributes().selection},e.prototype.setTeXclass=function(t){\"tooltip\"===this.attributes.get(\"actiontype\")&&this.childNodes[1]&&this.childNodes[1].setTeXclass(null);var e=this.selected;return t=e.setTeXclass(t),this.updateTeXclass(e),t},e.prototype.nextToggleSelection=function(){var t=Math.max(1,this.attributes.get(\"selection\")+1);t>this.childNodes.length&&(t=1),this.attributes.set(\"selection\",t)},e.defaults=n(n({},o.AbstractMmlNode.defaults),{actiontype:\"toggle\",selection:1}),e}(o.AbstractMmlNode);e.MmlMaction=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMover=e.MmlMunder=e.MmlMunderover=void 0;var o=Q(0),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"munderover\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 3},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"base\",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"under\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"over\",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(t,e,Q,r){var T=this.childNodes;T[0].setInheritedAttributes(t,e,Q,r||!!T[this.over]);var n=!(e||!T[0].coreMO().attributes.get(\"movablelimits\")),o=this.constructor.ACCENTS;T[1].setInheritedAttributes(t,!1,this.getScriptlevel(o[1],n,Q),r||1===this.under),this.setInheritedAccent(1,o[1],e,Q,r,n),T[2]&&(T[2].setInheritedAttributes(t,!1,this.getScriptlevel(o[2],n,Q),r||2===this.under),this.setInheritedAccent(2,o[2],e,Q,r,n))},e.prototype.getScriptlevel=function(t,e,Q){return!e&&this.attributes.get(t)||Q++,Q},e.prototype.setInheritedAccent=function(t,e,Q,r,T,n){var o=this.childNodes[t];if(null==this.attributes.getExplicit(e)&&o.isEmbellished){var i=o.coreMO().attributes.get(\"accent\");this.attributes.setInherited(e,i),i!==this.attributes.getDefault(e)&&o.setInheritedAttributes({},Q,this.getScriptlevel(e,n,r),T)}},e.defaults=n(n({},o.AbstractMmlBaseNode.defaults),{accent:!1,accentunder:!1,align:\"center\"}),e.ACCENTS=[\"\",\"accentunder\",\"accent\"],e}(o.AbstractMmlBaseNode);e.MmlMunderover=i;var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"munder\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 2},enumerable:!1,configurable:!0}),e.defaults=n({},i.defaults),e}(i);e.MmlMunder=a;var s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mover\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"over\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"under\",{get:function(){return 2},enumerable:!1,configurable:!0}),e.defaults=n({},i.defaults),e.ACCENTS=[\"\",\"accent\",\"accentunder\"],e}(i);e.MmlMover=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlNone=e.MmlMprescripts=e.MmlMmultiscripts=void 0;var o=Q(0),i=Q(39),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mmultiscripts\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 1},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(t,e,Q,r){this.childNodes[0].setInheritedAttributes(t,e,Q,r);for(var T=!1,n=1,o=0;n<this.childNodes.length;n++){var i=this.childNodes[n];if(i.isKind(\"mprescripts\")){if(!T&&(T=!0,n%2==0)){var a=this.factory.create(\"mrow\");this.childNodes.splice(n,0,a),a.parent=this,n++}}else{var s=r||o%2==0;i.setInheritedAttributes(t,!1,Q+1,s),o++}}this.childNodes.length%2==(T?1:0)&&(this.appendChild(this.factory.create(\"mrow\")),this.childNodes[this.childNodes.length-1].setInheritedAttributes(t,!1,Q+1,r))},e.prototype.verifyChildren=function(e){for(var Q=!1,r=e.fixMmultiscripts,T=0;T<this.childNodes.length;T++){var n=this.childNodes[T];n.isKind(\"mprescripts\")&&(Q?n.mError(n.kind+\" can only appear once in \"+this.kind,e,!0):(Q=!0,T%2!=0||r||this.mError(\"There must be an equal number of prescripts of each type\",e)))}this.childNodes.length%2!=(Q?1:0)||r||this.mError(\"There must be an equal number of scripts of each type\",e),t.prototype.verifyChildren.call(this,e)},e.defaults=n({},i.MmlMsubsup.defaults),e}(i.MmlMsubsup);e.MmlMmultiscripts=a;var s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mprescripts\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 0},enumerable:!1,configurable:!0}),e.prototype.verifyTree=function(e){t.prototype.verifyTree.call(this,e),this.parent&&!this.parent.isKind(\"mmultiscripts\")&&this.mError(this.kind+\" must be a child of mmultiscripts\",e,!0)},e.defaults=n({},o.AbstractMmlNode.defaults),e}(o.AbstractMmlNode);e.MmlMprescripts=s;var l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"none\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 0},enumerable:!1,configurable:!0}),e.prototype.verifyTree=function(e){t.prototype.verifyTree.call(this,e),this.parent&&!this.parent.isKind(\"mmultiscripts\")&&this.mError(this.kind+\" must be a child of mmultiscripts\",e,!0)},e.defaults=n({},o.AbstractMmlNode.defaults),e}(o.AbstractMmlNode);e.MmlNone=l},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtable=void 0;var i=Q(0),a=Q(15),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.properties={useHeight:1},e.texClass=i.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mtable\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setInheritedAttributes=function(e,Q,r,T){var n,a;try{for(var s=o(i.indentAttributes),l=s.next();!l.done;l=s.next()){var c=l.value;e[c]&&this.attributes.setInherited(c,e[c][1]),void 0!==this.attributes.getExplicit(c)&&delete this.attributes.getAllAttributes()[c]}}catch(t){n={error:t}}finally{try{l&&!l.done&&(a=s.return)&&a.call(s)}finally{if(n)throw n.error}}t.prototype.setInheritedAttributes.call(this,e,Q,r,T)},e.prototype.setChildInheritedAttributes=function(t,e,Q,r){var T,n,i,s;try{for(var l=o(this.childNodes),c=l.next();!c.done;c=l.next()){(f=c.value).isKind(\"mtr\")||this.replaceChild(this.factory.create(\"mtr\"),f).appendChild(f)}}catch(t){T={error:t}}finally{try{c&&!c.done&&(n=l.return)&&n.call(l)}finally{if(T)throw T.error}}e=!(!this.attributes.getExplicit(\"displaystyle\")&&!this.attributes.getDefault(\"displaystyle\")),t=this.addInheritedAttributes(t,{columnalign:this.attributes.get(\"columnalign\"),rowalign:\"center\"});var u=a.split(this.attributes.get(\"rowalign\"));try{for(var p=o(this.childNodes),h=p.next();!h.done;h=p.next()){var f=h.value;t.rowalign[1]=u.shift()||t.rowalign[1],f.setInheritedAttributes(t,e,Q,r)}}catch(t){i={error:t}}finally{try{h&&!h.done&&(s=p.return)&&s.call(p)}finally{if(i)throw i.error}}},e.prototype.verifyChildren=function(e){var Q,r;if(!e.fixMtables)try{for(var T=o(this.childNodes),n=T.next();!n.done;n=T.next()){n.value.isKind(\"mtr\")||this.mError(\"Children of \"+this.kind+\" must be mtr or mlabeledtr\",e)}}catch(t){Q={error:t}}finally{try{n&&!n.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}t.prototype.verifyChildren.call(this,e)},e.prototype.setTeXclass=function(t){var e,Q;this.getPrevClass(t);try{for(var r=o(this.childNodes),T=r.next();!T.done;T=r.next()){T.value.setTeXclass(null)}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}return this},e.defaults=n(n({},i.AbstractMmlNode.defaults),{align:\"axis\",rowalign:\"baseline\",columnalign:\"center\",groupalign:\"{left}\",alignmentscope:!0,columnwidth:\"auto\",width:\"auto\",rowspacing:\"1ex\",columnspacing:\".8em\",rowlines:\"none\",columnlines:\"none\",frame:\"none\",framespacing:\"0.4em 0.5ex\",equalrows:!1,equalcolumns:!1,displaystyle:!1,side:\"right\",minlabelspacing:\"0.8em\"}),e}(i.AbstractMmlNode);e.MmlMtable=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMlabeledtr=e.MmlMtr=void 0;var i=Q(0),a=Q(24),s=Q(15),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mtr\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(t,e,Q,r){var T,n,i,a;try{for(var l=o(this.childNodes),c=l.next();!c.done;c=l.next()){(f=c.value).isKind(\"mtd\")||this.replaceChild(this.factory.create(\"mtd\"),f).appendChild(f)}}catch(t){T={error:t}}finally{try{c&&!c.done&&(n=l.return)&&n.call(l)}finally{if(T)throw T.error}}var u=s.split(this.attributes.get(\"columnalign\"));1===this.arity&&u.unshift(this.parent.attributes.get(\"side\")),t=this.addInheritedAttributes(t,{rowalign:this.attributes.get(\"rowalign\"),columnalign:\"center\"});try{for(var p=o(this.childNodes),h=p.next();!h.done;h=p.next()){var f=h.value;t.columnalign[1]=u.shift()||t.columnalign[1],f.setInheritedAttributes(t,e,Q,r)}}catch(t){i={error:t}}finally{try{h&&!h.done&&(a=p.return)&&a.call(p)}finally{if(i)throw i.error}}},e.prototype.verifyChildren=function(e){var Q,r;if(!this.parent||this.parent.isKind(\"mtable\")){if(!e.fixMtables)try{for(var T=o(this.childNodes),n=T.next();!n.done;n=T.next()){var i=n.value;if(!i.isKind(\"mtd\"))this.replaceChild(this.factory.create(\"mtr\"),i).mError(\"Children of \"+this.kind+\" must be mtd\",e,!0)}}catch(t){Q={error:t}}finally{try{n&&!n.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}t.prototype.verifyChildren.call(this,e)}else this.mError(this.kind+\" can only be a child of an mtable\",e,!0)},e.prototype.setTeXclass=function(t){var e,Q;this.getPrevClass(t);try{for(var r=o(this.childNodes),T=r.next();!T.done;T=r.next()){T.value.setTeXclass(null)}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}return this},e.defaults=n(n({},i.AbstractMmlNode.defaults),{rowalign:a.INHERIT,columnalign:a.INHERIT,groupalign:a.INHERIT}),e}(i.AbstractMmlNode);e.MmlMtr=l;var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mlabeledtr\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 1},enumerable:!1,configurable:!0}),e}(l);e.MmlMlabeledtr=c},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMtd=void 0;var o=Q(0),i=Q(24),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mtd\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return-1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"linebreakContainer\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.verifyChildren=function(e){!this.parent||this.parent.isKind(\"mtr\")?t.prototype.verifyChildren.call(this,e):this.mError(this.kind+\" can only be a child of an mtr or mlabeledtr\",e,!0)},e.prototype.setTeXclass=function(t){return this.getPrevClass(t),this.childNodes[0].setTeXclass(null),this},e.defaults=n(n({},o.AbstractMmlBaseNode.defaults),{rowspan:1,columnspan:1,rowalign:i.INHERIT,columnalign:i.INHERIT,groupalign:i.INHERIT}),e}(o.AbstractMmlBaseNode);e.MmlMtd=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMglyph=void 0;var o=Q(0),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mglyph\"},enumerable:!1,configurable:!0}),e.defaults=n(n({},o.AbstractMmlTokenNode.defaults),{alt:\"\",src:\"\",width:\"auto\",height:\"auto\",valign:\"0em\"}),e}(o.AbstractMmlTokenNode);e.MmlMglyph=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlAnnotation=e.MmlAnnotationXML=e.MmlSemantics=void 0;var o=Q(0),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"semantics\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"notParent\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.defaults=n(n({},o.AbstractMmlBaseNode.defaults),{definitionUrl:null,encoding:null}),e}(o.AbstractMmlBaseNode);e.MmlSemantics=i;var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"annotation-xml\"},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(){},e.defaults=n(n({},o.AbstractMmlNode.defaults),{definitionUrl:null,encoding:null,cd:\"mathmlkeys\",name:\"\",src:null}),e}(o.AbstractMmlNode);e.MmlAnnotationXML=a;var s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.properties={isChars:!0},e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"annotation\"},enumerable:!1,configurable:!0}),e.defaults=n({},a.defaults),e}(a);e.MmlAnnotation=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TeXAtom=void 0;var o=Q(0),i=Q(31),a=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texClass=o.TEXCLASS.ORD,e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"TeXAtom\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return-1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"notParent\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){return this.childNodes[0].setTeXclass(null),this.adjustTeXclass(t)},e.prototype.adjustTeXclass=function(t){return t},e.defaults=n({},o.AbstractMmlBaseNode.defaults),e}(o.AbstractMmlBaseNode);e.TeXAtom=a,a.prototype.adjustTeXclass=i.MmlMo.prototype.adjustTeXclass},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlVisitor=void 0;var n=Q(57),o=function(t){function e(e){void 0===e&&(e=null);return e||(e=new n.MmlFactory),t.call(this,e)||this}return T(e,t),e.prototype.visitTextNode=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q]},e.prototype.visitXMLNode=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q]},e}(Q(119).AbstractVisitor);e.MmlVisitor=o},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SerializedMmlVisitor=e.toEntity=e.DATAMJX=void 0;var i=Q(82),a=Q(0),s=Q(38);e.DATAMJX=\"data-mjx-\",e.toEntity=function(t){return\"&#x\"+t.codePointAt(0).toString(16).toUpperCase()+\";\"};var l=function(t){function Q(){return null!==t&&t.apply(this,arguments)||this}return T(Q,t),Q.prototype.visitTree=function(t){return this.visitNode(t,\"\")},Q.prototype.visitTextNode=function(t,e){return this.quoteHTML(t.getText())},Q.prototype.visitXMLNode=function(t,e){return e+t.getSerializedXML()},Q.prototype.visitInferredMrowNode=function(t,e){var Q,r,T=[];try{for(var o=n(t.childNodes),i=o.next();!i.done;i=o.next()){var a=i.value;T.push(this.visitNode(a,e))}}catch(t){Q={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(Q)throw Q.error}}return T.join(\"\\n\")},Q.prototype.visitTeXAtomNode=function(t,e){var Q=this.childNodeMml(t,e+\"  \",\"\\n\");return e+\"<mrow\"+this.getAttributes(t)+\">\"+(Q.match(/\\S/)?\"\\n\"+Q+e:\"\")+\"</mrow>\"},Q.prototype.visitAnnotationNode=function(t,e){return e+\"<annotation\"+this.getAttributes(t)+\">\"+this.childNodeMml(t,\"\",\"\")+\"</annotation>\"},Q.prototype.visitDefault=function(t,e){var Q=t.kind,r=o(t.isToken||0===t.childNodes.length?[\"\",\"\"]:[\"\\n\",e],2),T=r[0],n=r[1],i=this.childNodeMml(t,e+\"  \",T);return e+\"<\"+Q+this.getAttributes(t)+\">\"+(i.match(/\\S/)?T+i+n:\"\")+\"</\"+Q+\">\"},Q.prototype.childNodeMml=function(t,e,Q){var r,T,o=\"\";try{for(var i=n(t.childNodes),a=i.next();!a.done;a=i.next()){var s=a.value;o+=this.visitNode(s,e)+Q}}catch(t){r={error:t}}finally{try{a&&!a.done&&(T=i.return)&&T.call(i)}finally{if(r)throw r.error}}return o},Q.prototype.getAttributes=function(t){var e,Q,r=[],T=this.constructor.defaultAttributes[t.kind]||{},o=Object.assign({},T,this.getDataAttributes(t),t.attributes.getAllAttributes()),i=this.constructor.variants;o.hasOwnProperty(\"mathvariant\")&&i.hasOwnProperty(o.mathvariant)&&(o.mathvariant=i[o.mathvariant]);try{for(var a=n(Object.keys(o)),s=a.next();!s.done;s=a.next()){var l=s.value,c=String(o[l]);void 0!==c&&r.push(l+'=\"'+this.quoteHTML(c)+'\"')}}catch(t){e={error:t}}finally{try{s&&!s.done&&(Q=a.return)&&Q.call(a)}finally{if(e)throw e.error}}return r.length?\" \"+r.join(\" \"):\"\"},Q.prototype.getDataAttributes=function(t){var e={},Q=t.attributes.getExplicit(\"mathvariant\"),r=this.constructor.variants;Q&&r.hasOwnProperty(Q)&&this.setDataAttribute(e,\"variant\",Q),t.getProperty(\"variantForm\")&&this.setDataAttribute(e,\"alternate\",\"1\");var T=t.getProperty(\"texClass\");if(void 0!==T){var n=!0;if(T===a.TEXCLASS.OP&&t.isKind(\"mi\")){var o=t.getText();n=!(o.length>1&&o.match(s.MmlMi.operatorName))}n&&this.setDataAttribute(e,\"texclass\",T<0?\"NONE\":a.TEXCLASSNAMES[T])}return e},Q.prototype.setDataAttribute=function(t,Q,r){t[e.DATAMJX+Q]=r},Q.prototype.quoteHTML=function(t){return t.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\\\"/g,\"&quot;\").replace(/[\\uD800-\\uDBFF]./g,e.toEntity).replace(/[\\u0080-\\uD7FF\\uE000-\\uFFFF]/g,e.toEntity)},Q.variants={\"-tex-calligraphic\":\"script\",\"-tex-calligraphic-bold\":\"bold-script\",\"-tex-oldstyle\":\"normal\",\"-tex-oldstyle-bold\":\"bold\",\"-tex-mathit\":\"italic\"},Q.defaultAttributes={math:{xmlns:\"http://www.w3.org/1998/Math/MathML\"}},Q}(i.MmlVisitor);e.SerializedMmlVisitor=l},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(T(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.Styles=void 0;var o=[\"top\",\"right\",\"bottom\",\"left\"],i=[\"width\",\"style\",\"color\"];function a(t){for(var e=t.split(/((?:'[^']*'|\"[^\"]*\"|,[\\s\\n]|[^\\s\\n])*)/g),Q=[];e.length>1;)e.shift(),Q.push(e.shift());return Q}function s(t){var e,Q,T=a(this.styles[t]);0===T.length&&T.push(\"\"),1===T.length&&T.push(T[0]),2===T.length&&T.push(T[0]),3===T.length&&T.push(T[1]);try{for(var n=r(y.connect[t].children),o=n.next();!o.done;o=n.next()){var i=o.value;this.setStyle(this.childName(t,i),T.shift())}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}}function l(t){var e,Q,T=y.connect[t].children,n=[];try{for(var o=r(T),i=o.next();!i.done;i=o.next()){var a=i.value,s=this.styles[t+\"-\"+a];if(!s)return void delete this.styles[t];n.push(s)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(Q=o.return)&&Q.call(o)}finally{if(e)throw e.error}}n[3]===n[1]&&(n.pop(),n[2]===n[0]&&(n.pop(),n[1]===n[0]&&n.pop())),this.styles[t]=n.join(\" \")}function c(t){var e,Q;try{for(var T=r(y.connect[t].children),n=T.next();!n.done;n=T.next()){var o=n.value;this.setStyle(this.childName(t,o),this.styles[t])}}catch(t){e={error:t}}finally{try{n&&!n.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}}function u(t){var e,Q,T=n(y.connect[t].children),o=this.styles[this.childName(t,T.shift())];try{for(var i=r(T),a=i.next();!a.done;a=i.next()){var s=a.value;if(this.styles[this.childName(t,s)]!==o)return void delete this.styles[t]}}catch(t){e={error:t}}finally{try{a&&!a.done&&(Q=i.return)&&Q.call(i)}finally{if(e)throw e.error}}this.styles[t]=o}var p=/^(?:[\\d.]+(?:[a-z]+)|thin|medium|thick|inherit|initial|unset)$/,h=/^(?:none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset|inherit|initial|unset)$/;function f(t){var e,Q,T,n,o={width:\"\",style:\"\",color:\"\"};try{for(var i=r(a(this.styles[t])),s=i.next();!s.done;s=i.next()){var l=s.value;l.match(p)&&\"\"===o.width?o.width=l:l.match(h)&&\"\"===o.style?o.style=l:o.color=l}}catch(t){e={error:t}}finally{try{s&&!s.done&&(Q=i.return)&&Q.call(i)}finally{if(e)throw e.error}}try{for(var c=r(y.connect[t].children),u=c.next();!u.done;u=c.next()){var f=u.value;this.setStyle(this.childName(t,f),o[f])}}catch(t){T={error:t}}finally{try{u&&!u.done&&(n=c.return)&&n.call(c)}finally{if(T)throw T.error}}}function d(t){var e,Q,T=[];try{for(var n=r(y.connect[t].children),o=n.next();!o.done;o=n.next()){var i=o.value,a=this.styles[this.childName(t,i)];a&&T.push(a)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}T.length?this.styles[t]=T.join(\" \"):delete this.styles[t]}var L={style:/^(?:normal|italic|oblique|inherit|initial|unset)$/,variant:new RegExp(\"^(?:\"+[\"normal|none\",\"inherit|initial|unset\",\"common-ligatures|no-common-ligatures\",\"discretionary-ligatures|no-discretionary-ligatures\",\"historical-ligatures|no-historical-ligatures\",\"contextual|no-contextual\",\"(?:stylistic|character-variant|swash|ornaments|annotation)\\\\([^)]*\\\\)\",\"small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps\",\"lining-nums|oldstyle-nums|proportional-nums|tabular-nums\",\"diagonal-fractions|stacked-fractions\",\"ordinal|slashed-zero\",\"jis78|jis83|jis90|jis04|simplified|traditional\",\"full-width|proportional-width\",\"ruby\"].join(\"|\")+\")$\"),weight:/^(?:normal|bold|bolder|lighter|[1-9]00|inherit|initial|unset)$/,stretch:new RegExp(\"^(?:\"+[\"normal\",\"(?:(?:ultra|extra|semi)-)?condensed\",\"(?:(?:semi|extra|ulta)-)?expanded\",\"inherit|initial|unset\"].join(\"|\")+\")$\"),size:new RegExp(\"^(?:\"+[\"xx-small|x-small|small|medium|large|x-large|xx-large|larger|smaller\",\"[d.]+%|[d.]+[a-z]+\",\"inherit|initial|unset\"].join(\"|\")+\")(?:/(?:normal|[d.+](?:%|[a-z]+)?))?$\")};function H(t){var e,Q,n,o,i=a(this.styles[t]),s={style:\"\",variant:[],weight:\"\",stretch:\"\",size:\"\",family:\"\",\"line-height\":\"\"};try{for(var l=r(i),c=l.next();!c.done;c=l.next()){var u=c.value;s.family=u;try{for(var p=(n=void 0,r(Object.keys(L))),h=p.next();!h.done;h=p.next()){var f=h.value;if((Array.isArray(s[f])||\"\"===s[f])&&u.match(L[f]))if(\"size\"===f){var d=T(u.split(/\\//),2),H=d[0],m=d[1];s[f]=H,m&&(s[\"line-height\"]=m)}else\"\"===s.size&&(Array.isArray(s[f])?s[f].push(u):s[f]=u)}}catch(t){n={error:t}}finally{try{h&&!h.done&&(o=p.return)&&o.call(p)}finally{if(n)throw n.error}}}}catch(t){e={error:t}}finally{try{c&&!c.done&&(Q=l.return)&&Q.call(l)}finally{if(e)throw e.error}}!function(t,e){var Q,T;try{for(var n=r(y.connect[t].children),o=n.next();!o.done;o=n.next()){var i=o.value,a=this.childName(t,i);if(Array.isArray(e[i])){var s=e[i];s.length&&(this.styles[a]=s.join(\" \"))}else\"\"!==e[i]&&(this.styles[a]=e[i])}}catch(t){Q={error:t}}finally{try{o&&!o.done&&(T=n.return)&&T.call(n)}finally{if(Q)throw Q.error}}}(t,s),delete this.styles[t]}function m(t){}var y=function(){function t(t){void 0===t&&(t=\"\"),this.parse(t)}return Object.defineProperty(t.prototype,\"cssText\",{get:function(){var t,e,Q=[];try{for(var T=r(Object.keys(this.styles)),n=T.next();!n.done;n=T.next()){var o=n.value,i=this.parentName(o);this.styles[i]||Q.push(o+\": \"+this.styles[o])}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}return Q.join(\"; \")},enumerable:!1,configurable:!0}),t.prototype.set=function(e,Q){for(e=this.normalizeName(e),this.setStyle(e,Q),t.connect[e]&&!t.connect[e].combine&&(this.combineChildren(e),delete this.styles[e]);e.match(/-/)&&(e=this.parentName(e),t.connect[e]);)t.connect[e].combine.call(this,e)},t.prototype.get=function(t){return t=this.normalizeName(t),this.styles.hasOwnProperty(t)?this.styles[t]:\"\"},t.prototype.setStyle=function(e,Q){this.styles[e]=Q,t.connect[e]&&t.connect[e].children&&t.connect[e].split.call(this,e),\"\"===Q&&delete this.styles[e]},t.prototype.combineChildren=function(e){var Q,T,n=this.parentName(e);try{for(var o=r(t.connect[e].children),i=o.next();!i.done;i=o.next()){var a=i.value,s=this.childName(n,a);t.connect[s].combine.call(this,s)}}catch(t){Q={error:t}}finally{try{i&&!i.done&&(T=o.return)&&T.call(o)}finally{if(Q)throw Q.error}}},t.prototype.parentName=function(t){var e=t.replace(/-[^-]*$/,\"\");return t===e?\"\":e},t.prototype.childName=function(e,Q){return Q.match(/-/)?Q:(t.connect[e]&&!t.connect[e].combine&&(Q+=e.replace(/.*-/,\"-\"),e=this.parentName(e)),e+\"-\"+Q)},t.prototype.normalizeName=function(t){return t.replace(/[A-Z]/g,(function(t){return\"-\"+t.toLowerCase()}))},t.prototype.parse=function(t){void 0===t&&(t=\"\");var e=this.constructor.pattern;this.styles={};for(var Q=t.replace(e.comment,\"\").split(e.style);Q.length>1;){var r=T(Q.splice(0,3),3),n=r[0],o=r[1],i=r[2];if(n.match(/[^\\s\\n]/))return;this.set(o,i)}},t.pattern={style:/([-a-z]+)[\\s\\n]*:[\\s\\n]*((?:'[^']*'|\"[^\"]*\"|\\n|.)*?)[\\s\\n]*(?:;|$)/g,comment:/\\/\\*[^]*?\\*\\//g},t.connect={padding:{children:o,split:s,combine:l},border:{children:o,split:c,combine:u},\"border-top\":{children:i,split:f,combine:d},\"border-right\":{children:i,split:f,combine:d},\"border-bottom\":{children:i,split:f,combine:d},\"border-left\":{children:i,split:f,combine:d},\"border-width\":{children:o,split:s,combine:null},\"border-style\":{children:o,split:s,combine:null},\"border-color\":{children:o,split:s,combine:null},font:{children:[\"style\",\"variant\",\"weight\",\"stretch\",\"line-height\",\"size\",\"family\"],split:H,combine:m}},t}();e.Styles=y},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(T(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var o=Q(8),i=function(){function t(t,e,Q){this._factory=t,this._env=e,this.global={},this.stack=[],this.global={isInner:Q},this.stack=[this._factory.create(\"start\",this.global)],e&&(this.stack[0].env=e),this.env=this.stack[0].env}return Object.defineProperty(t.prototype,\"env\",{get:function(){return this._env},set:function(t){this._env=t},enumerable:!1,configurable:!0}),t.prototype.Push=function(){for(var t,e,Q=[],i=0;i<arguments.length;i++)Q[i]=arguments[i];try{for(var a=r(Q),s=a.next();!s.done;s=a.next()){var l=s.value;if(l){var c=o.default.isNode(l)?this._factory.create(\"mml\",l):l;c.global=this.global;var u=T(this.stack.length?this.Top().checkItem(c):[null,!0],2),p=u[0],h=u[1];h&&(p?(this.Pop(),this.Push.apply(this,n(p))):(this.stack.push(c),c.env?(c.copyEnv&&Object.assign(c.env,this.env),this.env=c.env):c.env=this.env))}}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}},t.prototype.Pop=function(){var t=this.stack.pop();return t.isOpen||delete t.env,this.env=this.stack.length?this.Top().env:{},t},t.prototype.Top=function(t){return void 0===t&&(t=1),this.stack.length<t?null:this.stack[this.stack.length-t]},t.prototype.Prev=function(t){var e=this.Top();return t?e.First:e.Pop()},t.prototype.toString=function(){return\"stack[\\n  \"+this.stack.join(\"\\n  \")+\"\\n]\"},t}();e.default=i},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},T=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(r(arguments[e]));return t},n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var o=Q(131),i=Q(41),a=Q(7),s=function(){function t(t,e){void 0===e&&(e=[]),this.options={},this.packageData=new Map,this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.handlers=t.handlers,this.nodeFactory=new i.NodeFactory,this.nodeFactory.configuration=this,this.nodeFactory.setCreators(t.nodes),this.itemFactory=new o.default(t.items),this.itemFactory.configuration=this,a.defaultOptions.apply(void 0,T([this.options],e)),a.defaultOptions(this.options,t.options)}return t.prototype.pushParser=function(t){this.parsers.unshift(t)},t.prototype.popParser=function(){this.parsers.shift()},Object.defineProperty(t.prototype,\"parser\",{get:function(){return this.parsers[0]},enumerable:!1,configurable:!0}),t.prototype.clear=function(){this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.tags.resetTag()},t.prototype.addNode=function(t,e){var Q=this.nodeLists[t];Q||(Q=this.nodeLists[t]=[]),Q.push(e)},t.prototype.getList=function(t){var e,Q,r=this.nodeLists[t]||[],T=[];try{for(var o=n(r),i=o.next();!i.done;i=o.next()){var a=i.value;this.inTree(a)&&T.push(a)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(Q=o.return)&&Q.call(o)}finally{if(e)throw e.error}}return this.nodeLists[t]=T,T},t.prototype.inTree=function(t){for(;t&&t!==this.root;)t=t.parent;return!!t},t}();e.default=s},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EncloseConfiguration=e.EncloseMethods=e.ENCLOSE_OPTIONS=void 0;var r=Q(2),T=Q(3),n=Q(9);e.ENCLOSE_OPTIONS={\"data-arrowhead\":1,color:1,mathcolor:1,background:1,mathbackground:1,\"data-padding\":1,\"data-thickness\":1},e.EncloseMethods={},e.EncloseMethods.Enclose=function(t,Q){var r=t.GetArgument(Q).replace(/,/g,\" \"),T=t.GetBrackets(Q,\"\"),o=t.ParseArg(Q),i=n.default.keyvalOptions(T,e.ENCLOSE_OPTIONS);i.notation=r,t.Push(t.create(\"node\",\"menclose\",[o],i))},new T.CommandMap(\"enclose\",{enclose:\"Enclose\"},e.EncloseMethods),e.EncloseConfiguration=r.Configuration.create(\"enclose\",{handler:{macro:[\"enclose\"]}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(5),T=Q(3),n=Q(16),o=Q(9),i=Q(44),a={NewCommand:function(t,e){var Q=o.default.trimSpaces(t.GetArgument(e)),T=t.GetBrackets(e),n=t.GetBrackets(e),s=t.GetArgument(e);if(\"\\\\\"===Q.charAt(0)&&(Q=Q.substr(1)),!Q.match(/^(.|[a-z]+)$/i))throw new r.default(\"IllegalControlSequenceName\",\"Illegal control sequence name for %1\",e);if(T&&!(T=o.default.trimSpaces(T)).match(/^[0-9]+$/))throw new r.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",e);i.default.addMacro(t,Q,a.Macro,[s,T,n])},NewEnvironment:function(t,e){var Q=o.default.trimSpaces(t.GetArgument(e)),T=t.GetBrackets(e),n=t.GetBrackets(e),s=t.GetArgument(e),l=t.GetArgument(e);if(T&&!(T=o.default.trimSpaces(T)).match(/^[0-9]+$/))throw new r.default(\"IllegalParamNumber\",\"Illegal number of parameters specified in %1\",e);i.default.addEnvironment(t,Q,a.BeginEnv,[!0,s,l,T,n])},MacroDef:function(t,e){var Q=i.default.GetCSname(t,e),r=i.default.GetTemplate(t,e,\"\\\\\"+Q),T=t.GetArgument(e);r instanceof Array?i.default.addMacro(t,Q,a.MacroWithTemplate,[T].concat(r)):i.default.addMacro(t,Q,a.Macro,[T,r])},Let:function(t,e){var Q=i.default.GetCSname(t,e),r=t.GetNext();\"=\"===r&&(t.i++,r=t.GetNext());var n=t.configuration.handlers;if(\"\\\\\"!==r){t.i++;var o=n.get(\"delimiter\").lookup(r);o?i.default.addDelimiter(t,\"\\\\\"+Q,o.char,o.attributes):i.default.addMacro(t,Q,a.Macro,[r])}else{e=i.default.GetCSname(t,e);var s=n.get(\"delimiter\").lookup(\"\\\\\"+e);if(s)return void i.default.addDelimiter(t,\"\\\\\"+Q,s.char,s.attributes);var l=n.get(\"macro\").applicable(e);if(!l)return;if(l instanceof T.MacroMap){var c=l.lookup(e);return void i.default.addMacro(t,Q,c.func,c.args,c.symbol)}s=l.lookup(e);var u=i.default.disassembleSymbol(Q,s);i.default.addMacro(t,Q,(function(t,e){for(var Q=[],r=2;r<arguments.length;r++)Q[r-2]=arguments[r];var T=i.default.assembleSymbol(Q);return l.parser(t,T)}),u)}},MacroWithTemplate:function(t,e,Q,T){for(var n=[],a=4;a<arguments.length;a++)n[a-4]=arguments[a];var s=parseInt(T,10);if(s){var l=[];if(t.GetNext(),n[0]&&!i.default.MatchParam(t,n[0]))throw new r.default(\"MismatchUseDef\",\"Use of %1 doesn't match its definition\",e);for(var c=0;c<s;c++)l.push(i.default.GetParameter(t,e,n[c+1]));Q=o.default.substituteArgs(t,l,Q)}if(t.string=o.default.addArgs(t,Q,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new r.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is here a recursive macro call?\")},BeginEnv:function(t,e,Q,r,T,n){if(e.getProperty(\"end\")&&t.stack.env.closing===e.getName()){delete t.stack.env.closing;var i=t.string.slice(t.i);return t.string=r,t.i=0,t.Parse(),t.string=i,t.i=0,t.itemFactory.create(\"end\").setProperty(\"name\",e.getName())}if(T){var a=[];if(null!=n){var s=t.GetBrackets(\"\\\\begin{\"+e.getName()+\"}\");a.push(null==s?n:s)}for(var l=a.length;l<T;l++)a.push(t.GetArgument(\"\\\\begin{\"+e.getName()+\"}\"));Q=o.default.substituteArgs(t,a,Q),r=o.default.substituteArgs(t,[],r)}return t.string=o.default.addArgs(t,Q,t.string.slice(t.i)),t.i=0,t.itemFactory.create(\"beginEnv\").setProperty(\"name\",e.getName())}};a.Macro=n.default.Macro,e.default=a},function(t,e,Q){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.NewcommandConfiguration=void 0;var T=Q(2),n=Q(153),o=Q(44);Q(288);var i=Q(23),a=Q(3);e.NewcommandConfiguration=T.Configuration.create(\"newcommand\",{handler:{macro:[\"Newcommand-macros\"]},items:(r={},r[n.BeginEnvItem.prototype.kind]=n.BeginEnvItem,r),options:{maxMacros:1e3},init:function(t){new a.DelimiterMap(o.default.NEW_DELIMITER,i.default.delimiter,{}),new a.CommandMap(o.default.NEW_COMMAND,{},{}),new a.EnvironmentMap(o.default.NEW_ENVIRONMENT,i.default.environment,{},{}),t.append(T.Configuration.local({handler:{character:[],delimiter:[o.default.NEW_DELIMITER],macro:[o.default.NEW_DELIMITER,o.default.NEW_COMMAND],environment:[o.default.NEW_ENVIRONMENT]},priority:-1}))}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextMacrosMethods=void 0;var r=Q(12),T=Q(40),n=Q(16);e.TextMacrosMethods={Comment:function(t,e){for(;t.i<t.string.length&&\"\\n\"!==t.string.charAt(t.i);)t.i++;t.i++},Math:function(t,e){t.saveText();for(var Q,T,n=t.i,o=0;T=t.GetNext();)switch(Q=t.i++,T){case\"\\\\\":\")\"===t.GetCS()&&(T=\"\\\\(\");case\"$\":if(0===o&&e===T){var i=t.texParser.configuration,a=new r.default(t.string.substr(n,Q-n),t.stack.env,i).mml();return void t.PushMath(a)}break;case\"{\":o++;break;case\"}\":0===o&&t.Error(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"),o--}t.Error(\"MathNotTerminated\",\"Math-mode is not properly terminated\")},MathModeOnly:function(t,e){t.Error(\"MathModeOnly\",\"'%1' allowed only in math mode\",e)},Misplaced:function(t,e){t.Error(\"Misplaced\",\"'%1' can not be used here\",e)},OpenBrace:function(t,e){var Q=t.stack.env;t.envStack.push(Q),t.stack.env=Object.assign({},Q)},CloseBrace:function(t,e){t.envStack.length?(t.saveText(),t.stack.env=t.envStack.pop()):t.Error(\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\")},OpenQuote:function(t,e){t.string.charAt(t.i)===e?(t.text+=\"\\u201c\",t.i++):t.text+=\"\\u2018\"},CloseQuote:function(t,e){t.string.charAt(t.i)===e?(t.text+=\"\\u201d\",t.i++):t.text+=\"\\u2019\"},Tilde:function(t,e){t.text+=\"\\xa0\"},Space:function(t,e){for(t.text+=\" \";t.GetNext().match(/\\s/);)t.i++},SelfQuote:function(t,e){t.text+=e.substr(1)},Insert:function(t,e,Q){t.text+=Q},Accent:function(t,e,Q){var r=t.ParseArg(name),T=t.create(\"token\",\"mo\",{},Q);t.addAttributes(T),t.Push(t.create(\"node\",\"mover\",[r,T]))},Emph:function(t,e){var Q=\"-tex-mathit\"===t.stack.env.mathvariant?\"normal\":\"-tex-mathit\";t.Push(t.ParseTextArg(e,{mathvariant:Q}))},SetFont:function(t,e,Q){t.saveText(),t.stack.env.mathvariant=Q},SetSize:function(t,e,Q){t.saveText(),t.stack.env.mathsize=Q},CheckAutoload:function(t,e){var Q=t.configuration.packageData.get(\"autoload\"),r=t.texParser;e=e.slice(1);var n=r.lookup(\"macro\",e);if(!n||Q&&n._func===Q.Autoload){if(r.parse(\"macro\",[r,e]),!n)return;T.retryAfter(Promise.resolve())}r.parse(\"macro\",[t,e])},Macro:n.default.Macro,Spacer:n.default.Spacer,Hskip:n.default.Hskip,rule:n.default.rule,Rule:n.default.Rule,HandleRef:n.default.HandleRef}},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(T(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.RequireConfiguration=e.options=e.RequireMethods=e.RequireLoad=void 0;var o=Q(2),i=Q(3),a=Q(5),s=Q(1),l=Q(29),c=Q(11),u=Q(25),p=Q(7),h=s.MathJax.config;function f(t,e){var Q,T=t.parseOptions.options.require,n=t.parseOptions.packageData.get(\"require\").required,i=e.substr(T.prefix.length);if(n.indexOf(i)<0){n.push(i),function(t,e){var Q,T;void 0===e&&(e=[]);var n=t.parseOptions.options.require.prefix;try{for(var o=r(e),i=o.next();!i.done;i=o.next()){var a=i.value;a.substr(0,n.length)===n&&f(t,a)}}catch(t){Q={error:t}}finally{try{i&&!i.done&&(T=o.return)&&T.call(o)}finally{if(Q)throw Q.error}}}(t,c.CONFIG.dependencies[e]);var a=o.ConfigurationHandler.get(i);if(a){var s=h[e]||{};a.options&&1===Object.keys(a.options).length&&a.options[i]&&((Q={})[i]=s,s=Q),t.configuration.add(a,t,s);var l=t.parseOptions.packageData.get(\"require\").configured;a.preprocessors.length&&!l.has(i)&&(l.set(i,!0),u.mathjax.retryAfter(Promise.resolve()))}}}function d(t,e){var Q=t.options.require,r=Q.allow,T=(\"[\"===e.substr(0,1)?\"\":Q.prefix)+e;if(!(r.hasOwnProperty(T)?r[T]:r.hasOwnProperty(e)?r[e]:Q.defaultAllow))throw new a.default(\"BadRequire\",'Extension \"%1\" is now allowed to be loaded',T);l.Package.packages.has(T)?f(t.configuration.packageData.get(\"require\").jax,T):u.mathjax.retryAfter(c.Loader.load(T))}e.RequireLoad=d,e.RequireMethods={Require:function(t,e){var Q=t.GetArgument(e);if(Q.match(/[^_a-zA-Z0-9]/)||\"\"===Q)throw new a.default(\"BadPackageName\",\"Argument for %1 is not a valid package name\",e);d(t,Q)}},e.options={require:{allow:p.expandable({base:!1,\"all-packages\":!1}),defaultAllow:!0,prefix:\"tex\"}},new i.CommandMap(\"require\",{require:\"Require\"},e.RequireMethods),e.RequireConfiguration=o.Configuration.create(\"require\",{handler:{macro:[\"require\"]},config:function(t,e){e.parseOptions.packageData.set(\"require\",{jax:e,required:n(e.options.packages),configured:new Map});var Q=e.parseOptions.options.require,r=Q.prefix;if(r.match(/[^_a-zA-Z0-9]/))throw Error(\"Illegal characters used in \\\\require prefix\");c.CONFIG.paths[r]||(c.CONFIG.paths[r]=\"[mathjax]/input/tex/extensions\"),Q.prefix=\"[\"+r+\"]/\"},options:e.options})},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMactionMixin=e.TooltipData=void 0;var i=Q(15);e.TooltipData={dx:\".2em\",dy:\".1em\",postDelay:600,clearDelay:100,hoverTimer:new Map,clearTimer:new Map,stopTimers:function(t,e){e.clearTimer.has(t)&&(clearTimeout(e.clearTimer.get(t)),e.clearTimer.delete(t)),e.hoverTimer.has(t)&&(clearTimeout(e.hoverTimer.get(t)),e.hoverTimer.delete(t))}},e.CommonMactionMixin=function(t){return function(t){function Q(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this,T=r.constructor.actions,i=r.node.attributes.get(\"actiontype\"),a=n(T.get(i)||[function(t,e){},{}],2),s=a[0],l=a[1];return r.action=s,r.data=l,r.getParameters(),r}return T(Q,t),Object.defineProperty(Q.prototype,\"selected\",{get:function(){var t=this.node.attributes.get(\"selection\"),e=Math.max(1,Math.min(this.childNodes.length,t))-1;return this.childNodes[e]||this.wrap(this.node.selected)},enumerable:!1,configurable:!0}),Q.prototype.getParameters=function(){var t=this.node.attributes.get(\"data-offsets\"),Q=n(i.split(t||\"\"),2),r=Q[0],T=Q[1];this.dx=this.length2em(r||e.TooltipData.dx),this.dy=this.length2em(T||e.TooltipData.dy)},Q.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.updateFrom(this.selected.getBBox()),this.selected.setChildPWidths(e)},Q}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonInferredMrowMixin=e.CommonMrowMixin=void 0;var a=Q(18);e.CommonMrowMixin=function(t){return function(t){function e(){for(var e,Q,r=[],T=0;T<arguments.length;T++)r[T]=arguments[T];var n=t.apply(this,o(r))||this;n.stretchChildren();try{for(var s=i(n.childNodes),l=s.next();!l.done;l=s.next()){var c=l.value;if(c.bbox.pwidth){n.bbox.pwidth=a.BBox.fullWidth;break}}}catch(t){e={error:t}}finally{try{l&&!l.done&&(Q=s.return)&&Q.call(s)}finally{if(e)throw e.error}}return n}return T(e,t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.stretchChildren=function(){var t,e,Q,r,T,n,o=[];try{for(var a=i(this.childNodes),s=a.next();!s.done;s=a.next()){(b=s.value).canStretch(1)&&o.push(b)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}var l=o.length,c=this.childNodes.length;if(l&&c>1){var u=0,p=0,h=l>1&&l===c;try{for(var f=i(this.childNodes),d=f.next();!d.done;d=f.next()){var L=0===(b=d.value).stretch.dir;if(h||L){var H=b.getBBox(L),m=H.h,y=H.d;m>u&&(u=m),y>p&&(p=y)}}}catch(t){Q={error:t}}finally{try{d&&!d.done&&(r=f.return)&&r.call(f)}finally{if(Q)throw Q.error}}try{for(var v=i(o),g=v.next();!g.done;g=v.next()){var b;(b=g.value).coreMO().getStretchedVariant([u,p])}}catch(t){T={error:t}}finally{try{g&&!g.done&&(n=v.return)&&n.call(v)}finally{if(T)throw T.error}}}},e}(t)},e.CommonInferredMrowMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.getScale=function(){this.bbox.scale=this.parent.bbox.scale,this.bbox.rscale=1},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMlabeledtrMixin=e.CommonMtrMixin=void 0,e.CommonMtrMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"numCells\",{get:function(){return this.childNodes.length},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"labeled\",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tableCells\",{get:function(){return this.childNodes},enumerable:!1,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t]},e.prototype.getChildBBoxes=function(){return this.childNodes.map((function(t){return t.getBBox()}))},e.prototype.stretchChildren=function(t){var e,Q,r,T,o,i;void 0===t&&(t=null);var a=[],s=this.labeled?this.childNodes.slice(1):this.childNodes;try{for(var l=n(s),c=l.next();!c.done;c=l.next()){(V=c.value.childNodes[0]).canStretch(1)&&a.push(V)}}catch(t){e={error:t}}finally{try{c&&!c.done&&(Q=l.return)&&Q.call(l)}finally{if(e)throw e.error}}var u=a.length,p=this.childNodes.length;if(u&&p>1){if(null===t){var h=0,f=0,d=u>1&&u===p;try{for(var L=n(s),H=L.next();!H.done;H=L.next()){var m=0===(V=H.value.childNodes[0]).stretch.dir;if(d||m){var y=V.getBBox(m),v=y.h,g=y.d;v>h&&(h=v),g>f&&(f=g)}}}catch(t){r={error:t}}finally{try{H&&!H.done&&(T=L.return)&&T.call(L)}finally{if(r)throw r.error}}t=[h,f]}try{for(var b=n(a),M=b.next();!M.done;M=b.next()){var V;(V=M.value).coreMO().getStretchedVariant(t)}}catch(t){o={error:t}}finally{try{M&&!M.done&&(i=b.return)&&i.call(b)}finally{if(o)throw o.error}}}},e}(t)},e.CommonMlabeledtrMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"numCells\",{get:function(){return Math.max(0,this.childNodes.length-1)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"labeled\",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tableCells\",{get:function(){return this.childNodes.slice(1)},enumerable:!1,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t+1]},e.prototype.getChildBBoxes=function(){return this.childNodes.slice(1).map((function(t){return t.getBBox()}))},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmsqrt=void 0;var n=Q(4),o=Q(185),i=Q(66),a=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.dx=0,e}return T(e,t),e.prototype.toSVG=function(t){var e=this.childNodes[this.surd],Q=this.childNodes[this.base],r=this.root?this.childNodes[this.root]:null,T=this.getBBox(),n=e.getBBox(),o=Q.getBBox(),i=this.getPQ(n)[1],a=this.font.params.rule_thickness*this.bbox.scale,s=o.h+i+a,l=this.standardSVGnode(t),c=this.adaptor.append(l,this.svg(\"g\"));this.addRoot(l,r,n,s),e.toSVG(l),e.place(this.dx,T.h-n.h-a),Q.toSVG(c),Q.place(this.dx+n.w,0),this.adaptor.append(l,this.svg(\"rect\",{width:this.fixed(o.w),height:this.fixed(a),x:this.fixed(this.dx+n.w),y:this.fixed(T.h-2*a)}))},e.prototype.addRoot=function(t,e,Q,r){},e.kind=i.MmlMsqrt.prototype.kind,e}(o.CommonMsqrtMixin(n.SVGWrapper));e.SVGmsqrt=a},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.browserAdaptor=void 0;var r=Q(105);e.browserAdaptor=function(){return new r.HTMLAdaptor(window)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TeX=void 0;var i=Q(54),a=Q(7),s=Q(129),l=Q(130),c=Q(8),u=Q(12),p=Q(5),h=Q(86),f=Q(20),d=Q(2);Q(42);var L=function(t){function e(Q){void 0===Q&&(Q={});var r=this,T=o(a.separateOptions(Q,e.OPTIONS,s.FindTeX.OPTIONS),3),n=T[0],i=T[1],c=T[2];(r=t.call(this,i)||this).findTeX=r.options.FindTeX||new s.FindTeX(c);var u=r.options.packages,p=r.configuration=e.configure(u),d=r._parseOptions=new h.default(p,[r.options,f.TagsFactory.OPTIONS]);return a.userOptions(d.options,n),p.config(r),e.tags(d,p),r.postFilters.add(l.default.cleanSubSup,-6),r.postFilters.add(l.default.setInherited,-5),r.postFilters.add(l.default.moveLimits,-4),r.postFilters.add(l.default.cleanStretchy,-3),r.postFilters.add(l.default.cleanAttributes,-2),r.postFilters.add(l.default.combineRelations,-1),r}return T(e,t),e.configure=function(t){var e=new d.ParserConfiguration(t);return e.init(),e},e.tags=function(t,e){f.TagsFactory.addTags(e.tags),f.TagsFactory.setDefault(t.options.tags),t.tags=f.TagsFactory.getDefault(),t.tags.configuration=t},e.prototype.setMmlFactory=function(e){t.prototype.setMmlFactory.call(this,e),this._parseOptions.nodeFactory.setMmlFactory(e)},Object.defineProperty(e.prototype,\"parseOptions\",{get:function(){return this._parseOptions},enumerable:!1,configurable:!0}),e.prototype.compile=function(t,e){this.parseOptions.clear(),this.executeFilters(this.preFilters,t,e,this.parseOptions);var Q,r=t.display;this.latex=t.math,this.parseOptions.tags.startEquation(t);try{Q=new u.default(this.latex,{display:r,isInner:!1},this.parseOptions).mml()}catch(t){if(!(t instanceof p.default))throw t;this.parseOptions.error=!0,Q=this.options.formatError(this,t)}return Q=this.parseOptions.nodeFactory.create(\"node\",\"math\",[Q]),r&&c.default.setAttribute(Q,\"display\",\"block\"),this.parseOptions.tags.finishEquation(t),this.parseOptions.root=Q,this.executeFilters(this.postFilters,t,e,this.parseOptions),this.mathNode=this.parseOptions.root,this.mathNode},e.prototype.findMath=function(t){return this.findTeX.findMath(t)},e.prototype.formatError=function(t){var e=t.message.replace(/\\n.*/,\"\");return this.parseOptions.nodeFactory.create(\"error\",e,t.id,this.latex)},e.NAME=\"TeX\",e.OPTIONS=n(n({},i.AbstractInputJax.OPTIONS),{FindTeX:null,packages:[\"base\"],digits:/^(?:[0-9]+(?:\\{,\\}[0-9]{3})*(?:\\.[0-9]*)?|\\.[0-9]+)/,maxBuffer:5120,formatError:function(t,e){return t.formatError(e)}}),e}(i.AbstractInputJax);e.TeX=L},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AllPackages=void 0,Q(42),Q(132),Q(133),Q(135),Q(137),Q(138),Q(139),Q(142),Q(145),Q(146),Q(150),Q(151),Q(87),Q(152),Q(154),Q(156),Q(89),Q(157),Q(158),Q(159),Q(162),Q(163),Q(165),Q(166),\"undefined\"!=typeof MathJax&&MathJax.loader&&MathJax.loader.preLoad(\"[tex]/action\",\"[tex]/ams\",\"[tex]/amscd\",\"[tex]/bbox\",\"[tex]/boldsymbol\",\"[tex]/braket\",\"[tex]/bussproofs\",\"[tex]/cancel\",\"[tex]/color\",\"[tex]/colorv2\",\"[tex]/enclose\",\"[tex]/extpfeil\",\"[tex]/html\",\"[tex]/mhchem\",\"[tex]/newcommand\",\"[tex]/noerrors\",\"[tex]/noundefined\",\"[tex]/physics\",\"[tex]/unicode\",\"[tex]/verb\",\"[tex]/configmacros\",\"[tex]/tagformat\",\"[tex]/textmacros\"),e.AllPackages=[\"base\",\"action\",\"ams\",\"amscd\",\"bbox\",\"boldsymbol\",\"braket\",\"bussproofs\",\"cancel\",\"color\",\"enclose\",\"extpfeil\",\"html\",\"mhchem\",\"newcommand\",\"noerrors\",\"noundefined\",\"unicode\",\"verb\",\"configmacros\",\"tagformat\",\"textmacros\"]},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MenuHandler=e.MenuMathDocumentMixin=e.MenuMathItemMixin=void 0;var s=Q(25),l=Q(14),c=Q(7),u=Q(268);function p(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.addMenu=function(t,e){void 0===e&&(e=!1),this.state()>=l.STATE.CONTEXT_MENU||(this.isEscaped||!t.options.enableMenu&&!e||t.menu.addMenu(this),this.state(l.STATE.CONTEXT_MENU))},e.prototype.checkLoading=function(t){t.checkLoading()},e}(t)}function h(t){var e;return(e=function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,i(e))||this;r.menu=new r.options.MenuClass(r,r.options.menuOptions);var T=r.constructor.ProcessBits;return T.has(\"context-menu\")||T.allocate(\"context-menu\"),r.options.MathItem=p(r.options.MathItem),r}return T(e,t),e.prototype.addMenu=function(){var t,e;if(!this.processed.isSet(\"context-menu\")){try{for(var Q=a(this.math),r=Q.next();!r.done;r=Q.next()){r.value.addMenu(this)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}this.processed.set(\"context-menu\")}return this},e.prototype.checkLoading=function(){this.menu.isLoading&&s.mathjax.retryAfter(this.menu.loadingPromise.catch((function(t){return console.log(t)})));var t=this.menu.settings;return t.collapsible&&(this.options.enableComplexity=!0,this.menu.checkComponent(\"a11y/complexity\")),t.explorer&&(this.options.enableEnrichment=!0,this.options.enableExplorer=!0,this.menu.checkComponent(\"a11y/explorer\")),this},e.prototype.state=function(e,Q){return void 0===Q&&(Q=!1),t.prototype.state.call(this,e,Q),e<l.STATE.CONTEXT_MENU&&this.processed.clear(\"context-menu\"),this},e.prototype.updateDocument=function(){return t.prototype.updateDocument.call(this),this.menu.menu.store.sort(),this},e}(t)).OPTIONS=n(n({},t.OPTIONS),{MenuClass:u.Menu,menuOptions:u.Menu.OPTIONS,enableMenu:!0,a11y:t.OPTIONS.a11y||c.expandable({}),renderActions:c.expandable(n(n({},t.OPTIONS.renderActions),{addMenu:[l.STATE.CONTEXT_MENU],checkLoading:[l.STATE.UNPROCESSED+1]}))}),e}l.newState(\"CONTEXT_MENU\",170),e.MenuMathItemMixin=p,e.MenuMathDocumentMixin=h,e.MenuHandler=function(t){return t.documentClass=h(t.documentClass),t}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AssistiveMmlHandler=e.AssistiveMmlMathDocumentMixin=e.AssistiveMmlMathItemMixin=e.LimitedMmlVisitor=void 0;var s=Q(14),l=Q(83),c=Q(7),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.getAttributes=function(e){return t.prototype.getAttributes.call(this,e).replace(/ ?id=\".*?\"/,\"\")},e}(l.SerializedMmlVisitor);function p(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.assistiveMml=function(t,e){if(void 0===e&&(e=!1),!(this.state()>=s.STATE.ASSISTIVEMML)){if(!this.isEscaped&&(t.options.enableAssistiveMml||e)){var Q=t.adaptor,r=t.toMML(this.root).replace(/\\n */g,\"\").replace(/<!--.*?-->/g,\"\"),T=Q.firstChild(Q.body(Q.parse(r,\"text/html\"))),n=Q.node(\"mjx-assistive-mml\",{role:\"presentation\",unselectable:\"on\",display:this.display?\"block\":\"inline\"},[T]);Q.setAttribute(this.typesetRoot,\"role\",\"presentation\"),Q.setAttribute(Q.firstChild(this.typesetRoot),\"aria-hidden\",\"true\"),Q.setStyle(this.typesetRoot,\"position\",\"relative\"),Q.append(this.typesetRoot,n)}this.state(s.STATE.ASSISTIVEMML)}},e}(t)}function h(t){var e;return(e=function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,i(e))||this,T=r.constructor,n=T.ProcessBits;return n.has(\"assistive-mml\")||n.allocate(\"assistive-mml\"),r.visitor=new u(r.mmlFactory),r.options.MathItem=p(r.options.MathItem),\"addStyles\"in r&&r.addStyles(T.assistiveStyles),r}return T(e,t),e.prototype.toMML=function(t){return this.visitor.visitTree(t)},e.prototype.assistiveMml=function(){var t,e;if(!this.processed.isSet(\"assistive-mml\")){try{for(var Q=a(this.math),r=Q.next();!r.done;r=Q.next()){r.value.assistiveMml(this)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}this.processed.set(\"assistive-mml\")}return this},e.prototype.state=function(e,Q){return void 0===Q&&(Q=!1),t.prototype.state.call(this,e,Q),e<s.STATE.ASSISTIVEMML&&this.processed.clear(\"assistive-mml\"),this},e}(t)).OPTIONS=n(n({},t.OPTIONS),{enableAssistiveMml:!0,renderActions:c.expandable(n(n({},t.OPTIONS.renderActions),{assistiveMml:[s.STATE.ASSISTIVEMML]}))}),e.assistiveStyles={\"mjx-assistive-mml\":{position:\"absolute !important\",top:\"0px\",left:\"0px\",clip:\"rect(1px, 1px, 1px, 1px)\",padding:\"1px 0px 0px 0px !important\",border:\"0px !important\",display:\"block !important\",width:\"auto !important\",overflow:\"hidden !important\",\"-webkit-touch-callout\":\"none\",\"-webkit-user-select\":\"none\",\"-khtml-user-select\":\"none\",\"-moz-user-select\":\"none\",\"-ms-user-select\":\"none\",\"user-select\":\"none\"},'mjx-assistive-mml[display=\"block\"]':{width:\"100% !important\"}},e}e.LimitedMmlVisitor=u,s.newState(\"ASSISTIVEMML\",153),e.AssistiveMmlMathItemMixin=p,e.AssistiveMmlMathDocumentMixin=h,e.AssistiveMmlHandler=function(t){return t.documentClass=h(t.documentClass),t}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractMenu=void 0;var o=Q(102),i=Q(36),a=Q(10),s=Q(103),l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.className=a.HtmlClasses.CONTEXTMENU,e.role=\"menu\",e._items=[],e._baseMenu=null,e}return T(e,t),Object.defineProperty(e.prototype,\"baseMenu\",{get:function(){return this._baseMenu},set:function(t){this._baseMenu=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"items\",{get:function(){return this._items},set:function(t){this._items=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"pool\",{get:function(){return this.variablePool},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"focused\",{get:function(){return this._focused},set:function(t){if(this._focused!==t){this._focused||this.unfocus();var e=this._focused;this._focused=t,e&&e.unfocus()}},enumerable:!1,configurable:!0}),e.prototype.up=function(t){var e=this.items.filter((function(t){return t instanceof i.AbstractItem&&!t.isHidden()}));if(0!==e.length)if(this.focused){var Q=e.indexOf(this.focused);-1!==Q&&e[Q=Q?--Q:e.length-1].focus()}else e[e.length-1].focus()},e.prototype.down=function(t){var e=this.items.filter((function(t){return t instanceof i.AbstractItem&&!t.isHidden()}));if(0!==e.length)if(this.focused){var Q=e.indexOf(this.focused);-1!==Q&&e[Q=++Q===e.length?0:Q].focus()}else e[0].focus()},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.generateMenu()},e.prototype.generateMenu=function(){var t,e,Q=this.html;Q.classList.add(a.HtmlClasses.MENU);try{for(var r=n(this.items),T=r.next();!T.done;T=r.next()){var o=T.value;if(o.isHidden()){var i=o.html;i.parentNode&&i.parentNode.removeChild(i)}else Q.appendChild(o.html)}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.post=function(e,Q){this.variablePool.update(),t.prototype.post.call(this,e,Q)},e.prototype.unpostSubmenus=function(){var t,e,Q=this.items.filter((function(t){return t instanceof s.Submenu}));try{for(var r=n(Q),T=r.next();!T.done;T=r.next()){var o=T.value;o.submenu.unpost(),o!==this.focused&&o.unfocus()}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.unpost=function(){t.prototype.unpost.call(this),this.unpostSubmenus(),this.focused=null},e.prototype.find=function(t){var e,Q;try{for(var r=n(this.items),T=r.next();!T.done;T=r.next()){var o=T.value;if(\"rule\"!==o.type){if(o.id===t)return o;if(\"submenu\"===o.type){var i=o.submenu.find(t);if(i)return i}}}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}return null},e}(o.AbstractPostable);e.AbstractMenu=l},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractPostable=void 0;var n=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.posted=!1,e}return T(e,t),e.prototype.isPosted=function(){return this.posted},e.prototype.post=function(t,e){this.posted||(void 0!==t&&void 0!==e&&this.html.setAttribute(\"style\",\"left: \"+t+\"px; top: \"+e+\"px;\"),this.display(),this.posted=!0)},e.prototype.unpost=function(){if(this.posted){var t=this.html;t.parentNode&&t.parentNode.removeChild(t),this.posted=!1}},e}(Q(274).MenuElement);e.AbstractPostable=n},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Submenu=void 0;var n=Q(36),o=Q(10),i=function(t){function e(e,Q,r){var T=t.call(this,e,\"submenu\",Q,r)||this;return T._submenu=null,T}return T(e,t),e.fromJson=function(t,e,Q){var r=e.content,T=e.menu,n=new this(Q,r,e.id),o=t.get(\"subMenu\")(t,T,n);return n.submenu=o,n},Object.defineProperty(e.prototype,\"submenu\",{get:function(){return this._submenu},set:function(t){this._submenu=t},enumerable:!1,configurable:!0}),e.prototype.mouseover=function(t){this.focus(),this.stop(t)},e.prototype.mouseout=function(t){this.stop(t)},e.prototype.unfocus=function(){if(this.submenu.isPosted()){if(this.menu.focused!==this)return t.prototype.unfocus.call(this),void this.menu.unpostSubmenus();this.html.setAttribute(\"tabindex\",\"-1\"),this.html.blur()}else t.prototype.unfocus.call(this)},e.prototype.focus=function(){t.prototype.focus.call(this),this.submenu.isPosted()||this.disabled||this.submenu.post()},e.prototype.executeAction=function(){this.submenu.isPosted()?this.submenu.unpost():this.submenu.post()},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this);var e=this.html;this.span=document.createElement(\"span\"),this.span.textContent=\"\\u25ba\",this.span.classList.add(o.HtmlClasses.MENUARROW),e.appendChild(this.span),e.setAttribute(\"aria-haspopup\",\"true\")},e.prototype.left=function(e){this.submenu.isPosted()?this.submenu.unpost():t.prototype.left.call(this,e)},e.prototype.right=function(t){this.submenu.isPosted()?this.submenu.down(t):this.submenu.post()},e.prototype.toJson=function(){return{type:\"\"}},e}(n.AbstractItem);e.Submenu=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Info=void 0;var n=Q(300),o=Q(10),i=function(t){function e(e,Q,r){var T=t.call(this)||this;return T.title=e,T.signature=r,T.className=o.HtmlClasses.INFO,T.role=\"dialog\",T.contentDiv=T.generateContent(),T.close=T.generateClose(),T.content=Q||function(){return\"\"},T}return T(e,t),e.prototype.attachMenu=function(t){this.menu=t},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this);var e=this.html;e.appendChild(this.generateTitle()),e.appendChild(this.contentDiv),e.appendChild(this.generateSignature()),e.appendChild(this.close.html),e.setAttribute(\"tabindex\",\"0\")},e.prototype.post=function(){t.prototype.post.call(this);var e=document.documentElement,Q=this.html,r=window.innerHeight||e.clientHeight||e.scrollHeight||0,T=Math.floor(-Q.offsetWidth/2),n=Math.floor((r-Q.offsetHeight)/3);Q.setAttribute(\"style\",\"margin-left: \"+T+\"px; top: \"+n+\"px;\"),window.event instanceof MouseEvent&&Q.classList.add(o.HtmlClasses.MOUSEPOST),Q.focus()},e.prototype.display=function(){this.menu.registerWidget(this),this.contentDiv.innerHTML=this.content();var t=this.menu.html;t.parentNode&&t.parentNode.removeChild(t),this.menu.frame.appendChild(this.html)},e.prototype.click=function(t){},e.prototype.keydown=function(e){this.bubbleKey(),t.prototype.keydown.call(this,e)},e.prototype.escape=function(t){this.unpost()},e.prototype.unpost=function(){t.prototype.unpost.call(this),this.html.classList.remove(o.HtmlClasses.MOUSEPOST),this.menu.unregisterWidget(this)},e.prototype.generateClose=function(){var t=new n.CloseButton(this),e=t.html;return e.classList.add(o.HtmlClasses.INFOCLOSE),e.setAttribute(\"aria-label\",\"Close Dialog Box\"),t},e.prototype.generateTitle=function(){var t=document.createElement(\"span\");return t.innerHTML=this.title,t.classList.add(o.HtmlClasses.INFOTITLE),t},e.prototype.generateContent=function(){var t=document.createElement(\"div\");return t.classList.add(o.HtmlClasses.INFOCONTENT),t.setAttribute(\"tabindex\",\"0\"),t},e.prototype.generateSignature=function(){var t=document.createElement(\"span\");return t.innerHTML=this.signature,t.classList.add(o.HtmlClasses.INFOSIGNATURE),t},e.prototype.toJson=function(){return{type:\"\"}},e}(Q(102).AbstractPostable);e.Info=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.HTMLAdaptor=void 0;var o=function(t){function e(e){var Q=t.call(this,e.document)||this;return Q.window=e,Q.parser=new e.DOMParser,Q}return T(e,t),e.prototype.parse=function(t,e){return void 0===e&&(e=\"text/html\"),this.parser.parseFromString(t,e)},e.prototype.create=function(t,e){return e?this.document.createElementNS(e,t):this.document.createElement(t)},e.prototype.text=function(t){return this.document.createTextNode(t)},e.prototype.head=function(t){return t.head},e.prototype.body=function(t){return t.body},e.prototype.root=function(t){return t.documentElement},e.prototype.doctype=function(t){return\"<!DOCTYPE \"+t.doctype.name+\">\"},e.prototype.tags=function(t,e,Q){void 0===Q&&(Q=null);var r=Q?t.getElementsByTagNameNS(Q,e):t.getElementsByTagName(e);return Array.from(r)},e.prototype.getElements=function(t,e){var Q,r,T=[];try{for(var o=n(t),i=o.next();!i.done;i=o.next()){var a=i.value;\"string\"==typeof a?T=T.concat(Array.from(this.document.querySelectorAll(a))):Array.isArray(a)||a instanceof this.window.NodeList||a instanceof this.window.HTMLCollection?T=T.concat(Array.from(a)):T.push(a)}}catch(t){Q={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(Q)throw Q.error}}return T},e.prototype.contains=function(t,e){return t.contains(e)},e.prototype.parent=function(t){return t.parentNode},e.prototype.append=function(t,e){return t.appendChild(e)},e.prototype.insert=function(t,e){return this.parent(e).insertBefore(t,e)},e.prototype.remove=function(t){return this.parent(t).removeChild(t)},e.prototype.replace=function(t,e){return this.parent(e).replaceChild(t,e)},e.prototype.clone=function(t){return t.cloneNode(!0)},e.prototype.split=function(t,e){return t.splitText(e)},e.prototype.next=function(t){return t.nextSibling},e.prototype.previous=function(t){return t.previousSibling},e.prototype.firstChild=function(t){return t.firstChild},e.prototype.lastChild=function(t){return t.lastChild},e.prototype.childNodes=function(t){return Array.from(t.childNodes)},e.prototype.childNode=function(t,e){return t.childNodes[e]},e.prototype.kind=function(t){return t.nodeName.toLowerCase()},e.prototype.value=function(t){return t.nodeValue||\"\"},e.prototype.textContent=function(t){return t.textContent},e.prototype.innerHTML=function(t){return t.innerHTML},e.prototype.outerHTML=function(t){return t.outerHTML},e.prototype.setAttribute=function(t,e,Q,r){return void 0===r&&(r=null),r?(e=r.replace(/.*\\//,\"\")+\":\"+e.replace(/^.*:/,\"\"),t.setAttributeNS(r,e,Q)):t.setAttribute(e,Q)},e.prototype.getAttribute=function(t,e){return t.getAttribute(e)},e.prototype.removeAttribute=function(t,e){return t.removeAttribute(e)},e.prototype.hasAttribute=function(t,e){return t.hasAttribute(e)},e.prototype.allAttributes=function(t){return Array.from(t.attributes).map((function(t){return{name:t.name,value:t.value}}))},e.prototype.addClass=function(t,e){t.classList?t.classList.add(e):t.className=(t.className+\" \"+e).trim()},e.prototype.removeClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.split(/ /).filter((function(t){return t!==e})).join(\" \")},e.prototype.hasClass=function(t,e){return t.classList?t.classList.contains(e):t.className.split(/ /).indexOf(e)>=0},e.prototype.setStyle=function(t,e,Q){t.style[e]=Q},e.prototype.getStyle=function(t,e){return t.style[e]},e.prototype.allStyles=function(t){return t.style.cssText},e.prototype.fontSize=function(t){var e=this.window.getComputedStyle(t);return parseFloat(e.fontSize)},e.prototype.fontFamily=function(t){return this.window.getComputedStyle(t).fontFamily||\"\"},e.prototype.nodeSize=function(t,e,Q){if(void 0===e&&(e=1),void 0===Q&&(Q=!1),Q&&t.getBBox){var r=t.getBBox();return[r.width/e,r.height/e]}return[t.offsetWidth/e,t.offsetHeight/e]},e.prototype.nodeBBox=function(t){var e=t.getBoundingClientRect();return{left:e.left,right:e.right,top:e.top,bottom:e.bottom}},e}(Q(106).AbstractDOMAdaptor);e.HTMLAdaptor=o},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractDOMAdaptor=void 0;var T=function(){function t(t){void 0===t&&(t=null),this.document=t}return t.prototype.node=function(t,e,Q,T){var n,o;void 0===e&&(e={}),void 0===Q&&(Q=[]);var i=this.create(t,T);this.setAttributes(i,e);try{for(var a=r(Q),s=a.next();!s.done;s=a.next()){var l=s.value;this.append(i,l)}}catch(t){n={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}return i},t.prototype.setAttributes=function(t,e){var Q,T,n,o,i,a;if(e.style&&\"string\"!=typeof e.style)try{for(var s=r(Object.keys(e.style)),l=s.next();!l.done;l=s.next()){var c=l.value;this.setStyle(t,c.replace(/-([a-z])/g,(function(t,e){return e.toUpperCase()})),e.style[c])}}catch(t){Q={error:t}}finally{try{l&&!l.done&&(T=s.return)&&T.call(s)}finally{if(Q)throw Q.error}}if(e.properties)try{for(var u=r(Object.keys(e.properties)),p=u.next();!p.done;p=u.next()){t[c=p.value]=e.properties[c]}}catch(t){n={error:t}}finally{try{p&&!p.done&&(o=u.return)&&o.call(u)}finally{if(n)throw n.error}}try{for(var h=r(Object.keys(e)),f=h.next();!f.done;f=h.next()){\"style\"===(c=f.value)&&\"string\"!=typeof e.style||\"properties\"===c||this.setAttribute(t,c,e[c])}}catch(t){i={error:t}}finally{try{f&&!f.done&&(a=h.return)&&a.call(h)}finally{if(i)throw i.error}}},t.prototype.replace=function(t,e){return this.insert(t,e),this.remove(e),e},t.prototype.childNode=function(t,e){return this.childNodes(t)[e]},t.prototype.allClasses=function(t){var e=this.getAttribute(t,\"class\");return e?e.replace(/  +/g,\" \").replace(/^ /,\"\").replace(/ $/,\"\").split(/ /):[]},t}();e.AbstractDOMAdaptor=T},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractFindMath=void 0;var r=Q(7),T=function(){function t(t){var e=this.constructor;this.options=r.userOptions(r.defaultOptions({},e.OPTIONS),t)}return t.OPTIONS={},t}();e.AbstractFindMath=T},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractHandler=void 0;var n=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e}(Q(53).AbstractMathDocument),o=function(){function t(t,e){void 0===e&&(e=5),this.documentClass=n,this.adaptor=t,this.priority=e}return Object.defineProperty(t.prototype,\"name\",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),t.prototype.handlesDocument=function(t){return!1},t.prototype.create=function(t,e){return new this.documentClass(t,this.adaptor,e)},t.NAME=\"generic\",t}();e.AbstractHandler=o},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},T=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(r(arguments[e]));return t},n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.LinkedList=e.ListItem=e.END=void 0,e.END=Symbol();var o=function(t){void 0===t&&(t=null),this.next=null,this.prev=null,this.data=t};e.ListItem=o;var i=function(){function t(){for(var t=[],Q=0;Q<arguments.length;Q++)t[Q]=arguments[Q];this.list=new o(e.END),this.list.next=this.list.prev=this.list,this.push.apply(this,T(t))}return t.prototype.toArray=function(){return Array.from(this)},t.prototype.isBefore=function(t,e){return t<e},t.prototype.push=function(){for(var t,e,Q=[],r=0;r<arguments.length;r++)Q[r]=arguments[r];try{for(var T=n(Q),i=T.next();!i.done;i=T.next()){var a=i.value,s=new o(a);s.next=this.list,s.prev=this.list.prev,this.list.prev=s,s.prev.next=s}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}return this},t.prototype.pop=function(){var t=this.list.prev;return t.data===e.END?null:(this.list.prev=t.prev,t.prev.next=this.list,t.next=t.prev=null,t.data)},t.prototype.unshift=function(){for(var t,e,Q=[],r=0;r<arguments.length;r++)Q[r]=arguments[r];try{for(var T=n(Q.slice(0).reverse()),i=T.next();!i.done;i=T.next()){var a=i.value,s=new o(a);s.next=this.list.next,s.prev=this.list,this.list.next=s,s.next.prev=s}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}return this},t.prototype.shift=function(){var t=this.list.next;return t.data===e.END?null:(this.list.next=t.next,t.next.prev=this.list,t.next=t.prev=null,t.data)},t.prototype.remove=function(){for(var t,Q,r=[],T=0;T<arguments.length;T++)r[T]=arguments[T];var o=new Map;try{for(var i=n(r),a=i.next();!a.done;a=i.next()){var s=a.value;o.set(s,!0)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(Q=i.return)&&Q.call(i)}finally{if(t)throw t.error}}for(var l=this.list.next;l.data!==e.END;){var c=l.next;o.has(l.data)&&(l.prev.next=l.next,l.next.prev=l.prev,l.next=l.prev=null),l=c}},t.prototype.clear=function(){return this.list.next.prev=this.list.prev.next=null,this.list.next=this.list.prev=this.list,this},t.prototype[Symbol.iterator]=function(){var t=this.list;return{next:function(){return(t=t.next).data===e.END?{value:null,done:!0}:{value:t.data,done:!1}}}},t.prototype.reversed=function(){var t,Q=this.list;return(t={})[Symbol.iterator]=function(){return this},t.next=function(){return(Q=Q.prev).data===e.END?{value:null,done:!0}:{value:Q.data,done:!1}},t.toArray=function(){return Array.from(this)},t},t.prototype.insert=function(t,Q){void 0===Q&&(Q=null),null===Q&&(Q=this.isBefore.bind(this));for(var r=new o(t),T=this.list.next;T.data!==e.END&&Q(T.data,r.data);)T=T.next;return r.prev=T.prev,r.next=T,T.prev.next=T.prev=r,this},t.prototype.sort=function(e){var Q,r;void 0===e&&(e=null),null===e&&(e=this.isBefore.bind(this));var T=[];try{for(var o=n(this),i=o.next();!i.done;i=o.next()){var a=i.value;T.push(new t(a))}}catch(t){Q={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(Q)throw Q.error}}for(this.list.next=this.list.prev=this.list;T.length>1;){var s=T.shift(),l=T.shift();s.merge(l,e),T.push(s)}return T.length&&(this.list=T[0].list),this},t.prototype.merge=function(t,Q){var T,n,o,i,a;void 0===Q&&(Q=null),null===Q&&(Q=this.isBefore.bind(this));for(var s=this.list.next,l=t.list.next;s.data!==e.END&&l.data!==e.END;)Q(l.data,s.data)?(T=r([s,l],2),l.prev.next=T[0],s.prev.next=T[1],n=r([s.prev,l.prev],2),l.prev=n[0],s.prev=n[1],o=r([t.list,this.list],2),this.list.prev.next=o[0],t.list.prev.next=o[1],i=r([t.list.prev,this.list.prev],2),this.list.prev=i[0],t.list.prev=i[1],s=(a=r([l.next,s],2))[0],l=a[1]):s=s.next;return l.data!==e.END&&(this.list.prev.next=t.list.next,t.list.next.prev=this.list.prev,t.list.prev.next=this.list,this.list.prev=t.list.prev,t.list.next=t.list.prev=t.list),this},t}();e.LinkedList=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractNodeFactory=void 0;var n=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.create=function(t,e,Q){return void 0===e&&(e={}),void 0===Q&&(Q=[]),this.node[t](e,Q)},e}(Q(37).AbstractFactory);e.AbstractNodeFactory=n},function(t,e,Q){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.MML=void 0;var T=Q(0),n=Q(59),o=Q(38),i=Q(60),a=Q(31),s=Q(61),l=Q(62),c=Q(63),u=Q(64),p=Q(65),h=Q(66),f=Q(67),d=Q(113),L=Q(68),H=Q(69),m=Q(70),y=Q(71),v=Q(72),g=Q(73),b=Q(39),M=Q(74),V=Q(75),x=Q(76),O=Q(77),_=Q(78),S=Q(114),E=Q(115),C=Q(79),w=Q(80),A=Q(81),P=Q(116);e.MML=((r={})[n.MmlMath.prototype.kind]=n.MmlMath,r[o.MmlMi.prototype.kind]=o.MmlMi,r[i.MmlMn.prototype.kind]=i.MmlMn,r[a.MmlMo.prototype.kind]=a.MmlMo,r[s.MmlMtext.prototype.kind]=s.MmlMtext,r[l.MmlMspace.prototype.kind]=l.MmlMspace,r[c.MmlMs.prototype.kind]=c.MmlMs,r[u.MmlMrow.prototype.kind]=u.MmlMrow,r[u.MmlInferredMrow.prototype.kind]=u.MmlInferredMrow,r[p.MmlMfrac.prototype.kind]=p.MmlMfrac,r[h.MmlMsqrt.prototype.kind]=h.MmlMsqrt,r[f.MmlMroot.prototype.kind]=f.MmlMroot,r[d.MmlMstyle.prototype.kind]=d.MmlMstyle,r[L.MmlMerror.prototype.kind]=L.MmlMerror,r[H.MmlMpadded.prototype.kind]=H.MmlMpadded,r[m.MmlMphantom.prototype.kind]=m.MmlMphantom,r[y.MmlMfenced.prototype.kind]=y.MmlMfenced,r[v.MmlMenclose.prototype.kind]=v.MmlMenclose,r[g.MmlMaction.prototype.kind]=g.MmlMaction,r[b.MmlMsub.prototype.kind]=b.MmlMsub,r[b.MmlMsup.prototype.kind]=b.MmlMsup,r[b.MmlMsubsup.prototype.kind]=b.MmlMsubsup,r[M.MmlMunder.prototype.kind]=M.MmlMunder,r[M.MmlMover.prototype.kind]=M.MmlMover,r[M.MmlMunderover.prototype.kind]=M.MmlMunderover,r[V.MmlMmultiscripts.prototype.kind]=V.MmlMmultiscripts,r[V.MmlMprescripts.prototype.kind]=V.MmlMprescripts,r[V.MmlNone.prototype.kind]=V.MmlNone,r[x.MmlMtable.prototype.kind]=x.MmlMtable,r[O.MmlMlabeledtr.prototype.kind]=O.MmlMlabeledtr,r[O.MmlMtr.prototype.kind]=O.MmlMtr,r[_.MmlMtd.prototype.kind]=_.MmlMtd,r[S.MmlMaligngroup.prototype.kind]=S.MmlMaligngroup,r[E.MmlMalignmark.prototype.kind]=E.MmlMalignmark,r[C.MmlMglyph.prototype.kind]=C.MmlMglyph,r[w.MmlSemantics.prototype.kind]=w.MmlSemantics,r[w.MmlAnnotation.prototype.kind]=w.MmlAnnotation,r[w.MmlAnnotationXML.prototype.kind]=w.MmlAnnotationXML,r[A.TeXAtom.prototype.kind]=A.TeXAtom,r[P.MathChoice.prototype.kind]=P.MathChoice,r[T.TextNode.prototype.kind]=T.TextNode,r[T.XMLNode.prototype.kind]=T.XMLNode,r)},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OPTABLE=e.MMLSPACING=e.RANGES=e.MO=e.OPDEF=void 0;var r=Q(0);function T(t,e,Q,T){return void 0===Q&&(Q=r.TEXCLASS.BIN),void 0===T&&(T=null),[t,e,Q,T]}e.OPDEF=T,e.MO={ORD:T(0,0,r.TEXCLASS.ORD),ORD11:T(1,1,r.TEXCLASS.ORD),ORD21:T(2,1,r.TEXCLASS.ORD),ORD02:T(0,2,r.TEXCLASS.ORD),ORD55:T(5,5,r.TEXCLASS.ORD),OP:T(1,2,r.TEXCLASS.OP,{largeop:!0,movablelimits:!0,symmetric:!0}),OPFIXED:T(1,2,r.TEXCLASS.OP,{largeop:!0,movablelimits:!0}),INTEGRAL:T(0,1,r.TEXCLASS.OP,{largeop:!0,symmetric:!0}),INTEGRAL2:T(1,2,r.TEXCLASS.OP,{largeop:!0,symmetric:!0}),BIN3:T(3,3,r.TEXCLASS.BIN),BIN4:T(4,4,r.TEXCLASS.BIN),BIN01:T(0,1,r.TEXCLASS.BIN),BIN5:T(5,5,r.TEXCLASS.BIN),TALLBIN:T(4,4,r.TEXCLASS.BIN,{stretchy:!0}),BINOP:T(4,4,r.TEXCLASS.BIN,{largeop:!0,movablelimits:!0}),REL:T(5,5,r.TEXCLASS.REL),REL1:T(1,1,r.TEXCLASS.REL,{stretchy:!0}),REL4:T(4,4,r.TEXCLASS.REL),RELSTRETCH:T(5,5,r.TEXCLASS.REL,{stretchy:!0}),RELACCENT:T(5,5,r.TEXCLASS.REL,{accent:!0}),WIDEREL:T(5,5,r.TEXCLASS.REL,{accent:!0,stretchy:!0}),OPEN:T(0,0,r.TEXCLASS.OPEN,{fence:!0,stretchy:!0,symmetric:!0}),CLOSE:T(0,0,r.TEXCLASS.CLOSE,{fence:!0,stretchy:!0,symmetric:!0}),INNER:T(0,0,r.TEXCLASS.INNER),PUNCT:T(0,3,r.TEXCLASS.PUNCT),ACCENT:T(0,0,r.TEXCLASS.ORD,{accent:!0}),WIDEACCENT:T(0,0,r.TEXCLASS.ORD,{accent:!0,stretchy:!0})},e.RANGES=[[32,127,r.TEXCLASS.REL,\"BasicLatin\"],[160,255,r.TEXCLASS.ORD,\"Latin1Supplement\"],[256,383,r.TEXCLASS.ORD,\"LatinExtendedA\"],[384,591,r.TEXCLASS.ORD,\"LatinExtendedB\"],[688,767,r.TEXCLASS.ORD,\"SpacingModLetters\"],[768,879,r.TEXCLASS.ORD,\"CombDiacritMarks\"],[880,1023,r.TEXCLASS.ORD,\"GreekAndCoptic\"],[7680,7935,r.TEXCLASS.ORD,\"LatinExtendedAdditional\"],[8192,8303,r.TEXCLASS.PUNCT,\"GeneralPunctuation\"],[8304,8351,r.TEXCLASS.ORD,\"SuperAndSubscripts\"],[8352,8399,r.TEXCLASS.ORD,\"Currency\"],[8400,8447,r.TEXCLASS.ORD,\"CombDiactForSymbols\"],[8448,8527,r.TEXCLASS.ORD,\"LetterlikeSymbols\"],[8528,8591,r.TEXCLASS.ORD,\"NumberForms\"],[8592,8703,r.TEXCLASS.REL,\"Arrows\"],[8704,8959,r.TEXCLASS.BIN,\"MathOperators\"],[8960,9215,r.TEXCLASS.ORD,\"MiscTechnical\"],[9312,9471,r.TEXCLASS.ORD,\"EnclosedAlphaNums\"],[9472,9631,r.TEXCLASS.ORD,\"BoxDrawing\"],[9632,9727,r.TEXCLASS.ORD,\"GeometricShapes\"],[9984,10175,r.TEXCLASS.ORD,\"Dingbats\"],[10176,10223,r.TEXCLASS.ORD,\"MiscMathSymbolsA\"],[10224,10239,r.TEXCLASS.REL,\"SupplementalArrowsA\"],[10496,10623,r.TEXCLASS.REL,\"SupplementalArrowsB\"],[10624,10751,r.TEXCLASS.ORD,\"MiscMathSymbolsB\"],[10752,11007,r.TEXCLASS.BIN,\"SuppMathOperators\"],[11008,11263,r.TEXCLASS.ORD,\"MiscSymbolsAndArrows\"],[119808,120831,r.TEXCLASS.ORD,\"MathAlphabets\"]],e.MMLSPACING=[[0,0],[1,2],[3,3],[4,4],[0,0],[0,0],[0,3]],e.OPTABLE={prefix:{\"(\":e.MO.OPEN,\"+\":e.MO.BIN01,\"-\":e.MO.BIN01,\"[\":e.MO.OPEN,\"{\":e.MO.OPEN,\"|\":e.MO.OPEN,\"||\":[0,0,r.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],\"|||\":[0,0,r.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],\"\\xac\":e.MO.ORD21,\"\\xb1\":e.MO.BIN01,\"\\u2016\":[0,0,r.TEXCLASS.ORD,{fence:!0,stretchy:!0}],\"\\u2018\":[0,0,r.TEXCLASS.OPEN,{fence:!0}],\"\\u201c\":[0,0,r.TEXCLASS.OPEN,{fence:!0}],\"\\u2145\":e.MO.ORD21,\"\\u2146\":T(2,0,r.TEXCLASS.ORD),\"\\u2200\":e.MO.ORD21,\"\\u2202\":e.MO.ORD21,\"\\u2203\":e.MO.ORD21,\"\\u2204\":e.MO.ORD21,\"\\u2207\":e.MO.ORD21,\"\\u220f\":e.MO.OP,\"\\u2210\":e.MO.OP,\"\\u2211\":e.MO.OP,\"\\u2212\":e.MO.BIN01,\"\\u2213\":e.MO.BIN01,\"\\u221a\":[1,1,r.TEXCLASS.ORD,{stretchy:!0}],\"\\u221b\":e.MO.ORD11,\"\\u221c\":e.MO.ORD11,\"\\u2220\":e.MO.ORD,\"\\u2221\":e.MO.ORD,\"\\u2222\":e.MO.ORD,\"\\u222b\":e.MO.INTEGRAL,\"\\u222c\":e.MO.INTEGRAL,\"\\u222d\":e.MO.INTEGRAL,\"\\u222e\":e.MO.INTEGRAL,\"\\u222f\":e.MO.INTEGRAL,\"\\u2230\":e.MO.INTEGRAL,\"\\u2231\":e.MO.INTEGRAL,\"\\u2232\":e.MO.INTEGRAL,\"\\u2233\":e.MO.INTEGRAL,\"\\u22c0\":e.MO.OP,\"\\u22c1\":e.MO.OP,\"\\u22c2\":e.MO.OP,\"\\u22c3\":e.MO.OP,\"\\u2308\":e.MO.OPEN,\"\\u230a\":e.MO.OPEN,\"\\u2772\":e.MO.OPEN,\"\\u27e6\":e.MO.OPEN,\"\\u27e8\":e.MO.OPEN,\"\\u27ea\":e.MO.OPEN,\"\\u27ec\":e.MO.OPEN,\"\\u27ee\":e.MO.OPEN,\"\\u2980\":[0,0,r.TEXCLASS.ORD,{fence:!0,stretchy:!0}],\"\\u2983\":e.MO.OPEN,\"\\u2985\":e.MO.OPEN,\"\\u2987\":e.MO.OPEN,\"\\u2989\":e.MO.OPEN,\"\\u298b\":e.MO.OPEN,\"\\u298d\":e.MO.OPEN,\"\\u298f\":e.MO.OPEN,\"\\u2991\":e.MO.OPEN,\"\\u2993\":e.MO.OPEN,\"\\u2995\":e.MO.OPEN,\"\\u2997\":e.MO.OPEN,\"\\u29fc\":e.MO.OPEN,\"\\u2a00\":e.MO.OP,\"\\u2a01\":e.MO.OP,\"\\u2a02\":e.MO.OP,\"\\u2a03\":e.MO.OP,\"\\u2a04\":e.MO.OP,\"\\u2a05\":e.MO.OP,\"\\u2a06\":e.MO.OP,\"\\u2a07\":e.MO.OP,\"\\u2a08\":e.MO.OP,\"\\u2a09\":e.MO.OP,\"\\u2a0a\":e.MO.OP,\"\\u2a0b\":e.MO.INTEGRAL2,\"\\u2a0c\":e.MO.INTEGRAL,\"\\u2a0d\":e.MO.INTEGRAL2,\"\\u2a0e\":e.MO.INTEGRAL2,\"\\u2a0f\":e.MO.INTEGRAL2,\"\\u2a10\":e.MO.OP,\"\\u2a11\":e.MO.OP,\"\\u2a12\":e.MO.OP,\"\\u2a13\":e.MO.OP,\"\\u2a14\":e.MO.OP,\"\\u2a15\":e.MO.INTEGRAL2,\"\\u2a16\":e.MO.INTEGRAL2,\"\\u2a17\":e.MO.INTEGRAL2,\"\\u2a18\":e.MO.INTEGRAL2,\"\\u2a19\":e.MO.INTEGRAL2,\"\\u2a1a\":e.MO.INTEGRAL2,\"\\u2a1b\":e.MO.INTEGRAL2,\"\\u2a1c\":e.MO.INTEGRAL2,\"\\u2afc\":e.MO.OP,\"\\u2aff\":e.MO.OP},postfix:{\"!!\":T(1,0),\"!\":[1,0,r.TEXCLASS.CLOSE,null],\"&\":e.MO.ORD,\")\":e.MO.CLOSE,\"++\":T(0,0),\"--\":T(0,0),\"..\":T(0,0),\"...\":e.MO.ORD,\"'\":e.MO.ACCENT,\"]\":e.MO.CLOSE,\"^\":e.MO.WIDEACCENT,_:e.MO.WIDEACCENT,\"`\":e.MO.ACCENT,\"|\":e.MO.CLOSE,\"}\":e.MO.CLOSE,\"~\":e.MO.WIDEACCENT,\"||\":[0,0,r.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],\"|||\":[0,0,r.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],\"\\xa8\":e.MO.ACCENT,\"\\xaf\":e.MO.WIDEACCENT,\"\\xb0\":e.MO.ORD,\"\\xb4\":e.MO.ACCENT,\"\\xb8\":e.MO.ACCENT,\"\\u02c6\":e.MO.WIDEACCENT,\"\\u02c7\":e.MO.WIDEACCENT,\"\\u02c9\":e.MO.WIDEACCENT,\"\\u02ca\":e.MO.ACCENT,\"\\u02cb\":e.MO.ACCENT,\"\\u02cd\":e.MO.WIDEACCENT,\"\\u02d8\":e.MO.ACCENT,\"\\u02d9\":e.MO.ACCENT,\"\\u02da\":e.MO.ACCENT,\"\\u02dc\":e.MO.WIDEACCENT,\"\\u02dd\":e.MO.ACCENT,\"\\u02f7\":e.MO.WIDEACCENT,\"\\u0302\":e.MO.WIDEACCENT,\"\\u0311\":e.MO.ACCENT,\"\\u03f6\":e.MO.REL,\"\\u2016\":[0,0,r.TEXCLASS.ORD,{fence:!0,stretchy:!0}],\"\\u2019\":[0,0,r.TEXCLASS.CLOSE,{fence:!0}],\"\\u201d\":[0,0,r.TEXCLASS.CLOSE,{fence:!0}],\"\\u2032\":e.MO.ORD02,\"\\u203e\":e.MO.WIDEACCENT,\"\\u20db\":e.MO.ACCENT,\"\\u20dc\":e.MO.ACCENT,\"\\u2309\":e.MO.CLOSE,\"\\u230b\":e.MO.CLOSE,\"\\u23b4\":e.MO.WIDEACCENT,\"\\u23b5\":e.MO.WIDEACCENT,\"\\u23dc\":e.MO.WIDEACCENT,\"\\u23dd\":e.MO.WIDEACCENT,\"\\u23de\":e.MO.WIDEACCENT,\"\\u23df\":e.MO.WIDEACCENT,\"\\u23e0\":e.MO.WIDEACCENT,\"\\u23e1\":e.MO.WIDEACCENT,\"\\u25a0\":e.MO.BIN3,\"\\u25a1\":e.MO.BIN3,\"\\u25aa\":e.MO.BIN3,\"\\u25ab\":e.MO.BIN3,\"\\u25ad\":e.MO.BIN3,\"\\u25ae\":e.MO.BIN3,\"\\u25af\":e.MO.BIN3,\"\\u25b0\":e.MO.BIN3,\"\\u25b1\":e.MO.BIN3,\"\\u25b2\":e.MO.BIN4,\"\\u25b4\":e.MO.BIN4,\"\\u25b6\":e.MO.BIN4,\"\\u25b7\":e.MO.BIN4,\"\\u25b8\":e.MO.BIN4,\"\\u25bc\":e.MO.BIN4,\"\\u25be\":e.MO.BIN4,\"\\u25c0\":e.MO.BIN4,\"\\u25c1\":e.MO.BIN4,\"\\u25c2\":e.MO.BIN4,\"\\u25c4\":e.MO.BIN4,\"\\u25c5\":e.MO.BIN4,\"\\u25c6\":e.MO.BIN4,\"\\u25c7\":e.MO.BIN4,\"\\u25c8\":e.MO.BIN4,\"\\u25c9\":e.MO.BIN4,\"\\u25cc\":e.MO.BIN4,\"\\u25cd\":e.MO.BIN4,\"\\u25ce\":e.MO.BIN4,\"\\u25cf\":e.MO.BIN4,\"\\u25d6\":e.MO.BIN4,\"\\u25d7\":e.MO.BIN4,\"\\u25e6\":e.MO.BIN4,\"\\u266d\":e.MO.ORD02,\"\\u266e\":e.MO.ORD02,\"\\u266f\":e.MO.ORD02,\"\\u2773\":e.MO.CLOSE,\"\\u27e7\":e.MO.CLOSE,\"\\u27e9\":e.MO.CLOSE,\"\\u27eb\":e.MO.CLOSE,\"\\u27ed\":e.MO.CLOSE,\"\\u27ef\":e.MO.CLOSE,\"\\u2980\":[0,0,r.TEXCLASS.ORD,{fence:!0,stretchy:!0}],\"\\u2984\":e.MO.CLOSE,\"\\u2986\":e.MO.CLOSE,\"\\u2988\":e.MO.CLOSE,\"\\u298a\":e.MO.CLOSE,\"\\u298c\":e.MO.CLOSE,\"\\u298e\":e.MO.CLOSE,\"\\u2990\":e.MO.CLOSE,\"\\u2992\":e.MO.CLOSE,\"\\u2994\":e.MO.CLOSE,\"\\u2996\":e.MO.CLOSE,\"\\u2998\":e.MO.CLOSE,\"\\u29fd\":e.MO.CLOSE},infix:{\"!=\":e.MO.BIN4,\"#\":e.MO.ORD,$:e.MO.ORD,\"%\":[3,3,r.TEXCLASS.ORD,null],\"&&\":e.MO.BIN4,\"\":e.MO.ORD,\"*\":e.MO.BIN3,\"**\":T(1,1),\"*=\":e.MO.BIN4,\"+\":e.MO.BIN4,\"+=\":e.MO.BIN4,\",\":[0,3,r.TEXCLASS.PUNCT,{linebreakstyle:\"after\",separator:!0}],\"-\":e.MO.BIN4,\"-=\":e.MO.BIN4,\"->\":e.MO.BIN5,\".\":[0,3,r.TEXCLASS.PUNCT,{separator:!0}],\"/\":e.MO.ORD11,\"//\":T(1,1),\"/=\":e.MO.BIN4,\":\":[1,2,r.TEXCLASS.REL,null],\":=\":e.MO.BIN4,\";\":[0,3,r.TEXCLASS.PUNCT,{linebreakstyle:\"after\",separator:!0}],\"<\":e.MO.REL,\"<=\":e.MO.BIN5,\"<>\":T(1,1),\"=\":e.MO.REL,\"==\":e.MO.BIN4,\">\":e.MO.REL,\">=\":e.MO.BIN5,\"?\":[1,1,r.TEXCLASS.CLOSE,null],\"@\":e.MO.ORD11,\"\\\\\":e.MO.ORD,\"^\":e.MO.ORD11,_:e.MO.ORD11,\"|\":[2,2,r.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],\"||\":[2,2,r.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],\"|||\":[2,2,r.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],\"\\xb1\":e.MO.BIN4,\"\\xb7\":e.MO.BIN4,\"\\xd7\":e.MO.BIN4,\"\\xf7\":e.MO.BIN4,\"\\u02b9\":e.MO.ORD,\"\\u0300\":e.MO.ACCENT,\"\\u0301\":e.MO.ACCENT,\"\\u0303\":e.MO.WIDEACCENT,\"\\u0304\":e.MO.ACCENT,\"\\u0306\":e.MO.ACCENT,\"\\u0307\":e.MO.ACCENT,\"\\u0308\":e.MO.ACCENT,\"\\u030c\":e.MO.ACCENT,\"\\u0332\":e.MO.WIDEACCENT,\"\\u0338\":e.MO.REL4,\"\\u2015\":[0,0,r.TEXCLASS.ORD,{stretchy:!0}],\"\\u2017\":[0,0,r.TEXCLASS.ORD,{stretchy:!0}],\"\\u2020\":e.MO.BIN3,\"\\u2021\":e.MO.BIN3,\"\\u2022\":e.MO.BIN4,\"\\u2026\":e.MO.INNER,\"\\u2044\":e.MO.TALLBIN,\"\\u2061\":e.MO.ORD,\"\\u2062\":e.MO.ORD,\"\\u2063\":[0,0,r.TEXCLASS.ORD,{linebreakstyle:\"after\",separator:!0}],\"\\u2064\":e.MO.ORD,\"\\u20d7\":e.MO.ACCENT,\"\\u2111\":e.MO.ORD,\"\\u2113\":e.MO.ORD,\"\\u2118\":e.MO.ORD,\"\\u211c\":e.MO.ORD,\"\\u2190\":e.MO.WIDEREL,\"\\u2191\":e.MO.RELSTRETCH,\"\\u2192\":e.MO.WIDEREL,\"\\u2193\":e.MO.RELSTRETCH,\"\\u2194\":e.MO.WIDEREL,\"\\u2195\":e.MO.RELSTRETCH,\"\\u2196\":e.MO.RELSTRETCH,\"\\u2197\":e.MO.RELSTRETCH,\"\\u2198\":e.MO.RELSTRETCH,\"\\u2199\":e.MO.RELSTRETCH,\"\\u219a\":e.MO.RELACCENT,\"\\u219b\":e.MO.RELACCENT,\"\\u219c\":e.MO.WIDEREL,\"\\u219d\":e.MO.WIDEREL,\"\\u219e\":e.MO.WIDEREL,\"\\u219f\":e.MO.WIDEREL,\"\\u21a0\":e.MO.WIDEREL,\"\\u21a1\":e.MO.RELSTRETCH,\"\\u21a2\":e.MO.WIDEREL,\"\\u21a3\":e.MO.WIDEREL,\"\\u21a4\":e.MO.WIDEREL,\"\\u21a5\":e.MO.RELSTRETCH,\"\\u21a6\":e.MO.WIDEREL,\"\\u21a7\":e.MO.RELSTRETCH,\"\\u21a8\":e.MO.RELSTRETCH,\"\\u21a9\":e.MO.WIDEREL,\"\\u21aa\":e.MO.WIDEREL,\"\\u21ab\":e.MO.WIDEREL,\"\\u21ac\":e.MO.WIDEREL,\"\\u21ad\":e.MO.WIDEREL,\"\\u21ae\":e.MO.RELACCENT,\"\\u21af\":e.MO.RELSTRETCH,\"\\u21b0\":e.MO.RELSTRETCH,\"\\u21b1\":e.MO.RELSTRETCH,\"\\u21b2\":e.MO.RELSTRETCH,\"\\u21b3\":e.MO.RELSTRETCH,\"\\u21b4\":e.MO.RELSTRETCH,\"\\u21b5\":e.MO.RELSTRETCH,\"\\u21b6\":e.MO.RELACCENT,\"\\u21b7\":e.MO.RELACCENT,\"\\u21b8\":e.MO.REL,\"\\u21b9\":e.MO.WIDEREL,\"\\u21ba\":e.MO.REL,\"\\u21bb\":e.MO.REL,\"\\u21bc\":e.MO.WIDEREL,\"\\u21bd\":e.MO.WIDEREL,\"\\u21be\":e.MO.RELSTRETCH,\"\\u21bf\":e.MO.RELSTRETCH,\"\\u21c0\":e.MO.WIDEREL,\"\\u21c1\":e.MO.WIDEREL,\"\\u21c2\":e.MO.RELSTRETCH,\"\\u21c3\":e.MO.RELSTRETCH,\"\\u21c4\":e.MO.WIDEREL,\"\\u21c5\":e.MO.RELSTRETCH,\"\\u21c6\":e.MO.WIDEREL,\"\\u21c7\":e.MO.WIDEREL,\"\\u21c8\":e.MO.RELSTRETCH,\"\\u21c9\":e.MO.WIDEREL,\"\\u21ca\":e.MO.RELSTRETCH,\"\\u21cb\":e.MO.WIDEREL,\"\\u21cc\":e.MO.WIDEREL,\"\\u21cd\":e.MO.RELACCENT,\"\\u21ce\":e.MO.RELACCENT,\"\\u21cf\":e.MO.RELACCENT,\"\\u21d0\":e.MO.WIDEREL,\"\\u21d1\":e.MO.RELSTRETCH,\"\\u21d2\":e.MO.WIDEREL,\"\\u21d3\":e.MO.RELSTRETCH,\"\\u21d4\":e.MO.WIDEREL,\"\\u21d5\":e.MO.RELSTRETCH,\"\\u21d6\":e.MO.RELSTRETCH,\"\\u21d7\":e.MO.RELSTRETCH,\"\\u21d8\":e.MO.RELSTRETCH,\"\\u21d9\":e.MO.RELSTRETCH,\"\\u21da\":e.MO.WIDEREL,\"\\u21db\":e.MO.WIDEREL,\"\\u21dc\":e.MO.WIDEREL,\"\\u21dd\":e.MO.WIDEREL,\"\\u21de\":e.MO.REL,\"\\u21df\":e.MO.REL,\"\\u21e0\":e.MO.WIDEREL,\"\\u21e1\":e.MO.RELSTRETCH,\"\\u21e2\":e.MO.WIDEREL,\"\\u21e3\":e.MO.RELSTRETCH,\"\\u21e4\":e.MO.WIDEREL,\"\\u21e5\":e.MO.WIDEREL,\"\\u21e6\":e.MO.WIDEREL,\"\\u21e7\":e.MO.RELSTRETCH,\"\\u21e8\":e.MO.WIDEREL,\"\\u21e9\":e.MO.RELSTRETCH,\"\\u21ea\":e.MO.RELSTRETCH,\"\\u21eb\":e.MO.RELSTRETCH,\"\\u21ec\":e.MO.RELSTRETCH,\"\\u21ed\":e.MO.RELSTRETCH,\"\\u21ee\":e.MO.RELSTRETCH,\"\\u21ef\":e.MO.RELSTRETCH,\"\\u21f0\":e.MO.WIDEREL,\"\\u21f1\":e.MO.REL,\"\\u21f2\":e.MO.REL,\"\\u21f3\":e.MO.RELSTRETCH,\"\\u21f4\":e.MO.RELACCENT,\"\\u21f5\":e.MO.RELSTRETCH,\"\\u21f6\":e.MO.WIDEREL,\"\\u21f7\":e.MO.RELACCENT,\"\\u21f8\":e.MO.RELACCENT,\"\\u21f9\":e.MO.RELACCENT,\"\\u21fa\":e.MO.RELACCENT,\"\\u21fb\":e.MO.RELACCENT,\"\\u21fc\":e.MO.RELACCENT,\"\\u21fd\":e.MO.WIDEREL,\"\\u21fe\":e.MO.WIDEREL,\"\\u21ff\":e.MO.WIDEREL,\"\\u2201\":T(1,2,r.TEXCLASS.ORD),\"\\u2205\":e.MO.ORD,\"\\u2206\":e.MO.BIN3,\"\\u2208\":e.MO.REL,\"\\u2209\":e.MO.REL,\"\\u220a\":e.MO.REL,\"\\u220b\":e.MO.REL,\"\\u220c\":e.MO.REL,\"\\u220d\":e.MO.REL,\"\\u220e\":e.MO.BIN3,\"\\u2212\":e.MO.BIN4,\"\\u2213\":e.MO.BIN4,\"\\u2214\":e.MO.BIN4,\"\\u2215\":e.MO.TALLBIN,\"\\u2216\":e.MO.BIN4,\"\\u2217\":e.MO.BIN4,\"\\u2218\":e.MO.BIN4,\"\\u2219\":e.MO.BIN4,\"\\u221d\":e.MO.REL,\"\\u221e\":e.MO.ORD,\"\\u221f\":e.MO.REL,\"\\u2223\":e.MO.REL,\"\\u2224\":e.MO.REL,\"\\u2225\":e.MO.REL,\"\\u2226\":e.MO.REL,\"\\u2227\":e.MO.BIN4,\"\\u2228\":e.MO.BIN4,\"\\u2229\":e.MO.BIN4,\"\\u222a\":e.MO.BIN4,\"\\u2234\":e.MO.REL,\"\\u2235\":e.MO.REL,\"\\u2236\":e.MO.REL,\"\\u2237\":e.MO.REL,\"\\u2238\":e.MO.BIN4,\"\\u2239\":e.MO.REL,\"\\u223a\":e.MO.BIN4,\"\\u223b\":e.MO.REL,\"\\u223c\":e.MO.REL,\"\\u223d\":e.MO.REL,\"\\u223d\\u0331\":e.MO.BIN3,\"\\u223e\":e.MO.REL,\"\\u223f\":e.MO.BIN3,\"\\u2240\":e.MO.BIN4,\"\\u2241\":e.MO.REL,\"\\u2242\":e.MO.REL,\"\\u2242\\u0338\":e.MO.REL,\"\\u2243\":e.MO.REL,\"\\u2244\":e.MO.REL,\"\\u2245\":e.MO.REL,\"\\u2246\":e.MO.REL,\"\\u2247\":e.MO.REL,\"\\u2248\":e.MO.REL,\"\\u2249\":e.MO.REL,\"\\u224a\":e.MO.REL,\"\\u224b\":e.MO.REL,\"\\u224c\":e.MO.REL,\"\\u224d\":e.MO.REL,\"\\u224e\":e.MO.REL,\"\\u224e\\u0338\":e.MO.REL,\"\\u224f\":e.MO.REL,\"\\u224f\\u0338\":e.MO.REL,\"\\u2250\":e.MO.REL,\"\\u2251\":e.MO.REL,\"\\u2252\":e.MO.REL,\"\\u2253\":e.MO.REL,\"\\u2254\":e.MO.REL,\"\\u2255\":e.MO.REL,\"\\u2256\":e.MO.REL,\"\\u2257\":e.MO.REL,\"\\u2258\":e.MO.REL,\"\\u2259\":e.MO.REL,\"\\u225a\":e.MO.REL,\"\\u225c\":e.MO.REL,\"\\u225d\":e.MO.REL,\"\\u225e\":e.MO.REL,\"\\u225f\":e.MO.REL,\"\\u2260\":e.MO.REL,\"\\u2261\":e.MO.REL,\"\\u2262\":e.MO.REL,\"\\u2263\":e.MO.REL,\"\\u2264\":e.MO.REL,\"\\u2265\":e.MO.REL,\"\\u2266\":e.MO.REL,\"\\u2266\\u0338\":e.MO.REL,\"\\u2267\":e.MO.REL,\"\\u2268\":e.MO.REL,\"\\u2269\":e.MO.REL,\"\\u226a\":e.MO.REL,\"\\u226a\\u0338\":e.MO.REL,\"\\u226b\":e.MO.REL,\"\\u226b\\u0338\":e.MO.REL,\"\\u226c\":e.MO.REL,\"\\u226d\":e.MO.REL,\"\\u226e\":e.MO.REL,\"\\u226f\":e.MO.REL,\"\\u2270\":e.MO.REL,\"\\u2271\":e.MO.REL,\"\\u2272\":e.MO.REL,\"\\u2273\":e.MO.REL,\"\\u2274\":e.MO.REL,\"\\u2275\":e.MO.REL,\"\\u2276\":e.MO.REL,\"\\u2277\":e.MO.REL,\"\\u2278\":e.MO.REL,\"\\u2279\":e.MO.REL,\"\\u227a\":e.MO.REL,\"\\u227b\":e.MO.REL,\"\\u227c\":e.MO.REL,\"\\u227d\":e.MO.REL,\"\\u227e\":e.MO.REL,\"\\u227f\":e.MO.REL,\"\\u227f\\u0338\":e.MO.REL,\"\\u2280\":e.MO.REL,\"\\u2281\":e.MO.REL,\"\\u2282\":e.MO.REL,\"\\u2282\\u20d2\":e.MO.REL,\"\\u2283\":e.MO.REL,\"\\u2283\\u20d2\":e.MO.REL,\"\\u2284\":e.MO.REL,\"\\u2285\":e.MO.REL,\"\\u2286\":e.MO.REL,\"\\u2287\":e.MO.REL,\"\\u2288\":e.MO.REL,\"\\u2289\":e.MO.REL,\"\\u228a\":e.MO.REL,\"\\u228b\":e.MO.REL,\"\\u228c\":e.MO.BIN4,\"\\u228d\":e.MO.BIN4,\"\\u228e\":e.MO.BIN4,\"\\u228f\":e.MO.REL,\"\\u228f\\u0338\":e.MO.REL,\"\\u2290\":e.MO.REL,\"\\u2290\\u0338\":e.MO.REL,\"\\u2291\":e.MO.REL,\"\\u2292\":e.MO.REL,\"\\u2293\":e.MO.BIN4,\"\\u2294\":e.MO.BIN4,\"\\u2295\":e.MO.BIN4,\"\\u2296\":e.MO.BIN4,\"\\u2297\":e.MO.BIN4,\"\\u2298\":e.MO.BIN4,\"\\u2299\":e.MO.BIN4,\"\\u229a\":e.MO.BIN4,\"\\u229b\":e.MO.BIN4,\"\\u229c\":e.MO.BIN4,\"\\u229d\":e.MO.BIN4,\"\\u229e\":e.MO.BIN4,\"\\u229f\":e.MO.BIN4,\"\\u22a0\":e.MO.BIN4,\"\\u22a1\":e.MO.BIN4,\"\\u22a2\":e.MO.REL,\"\\u22a3\":e.MO.REL,\"\\u22a4\":e.MO.ORD55,\"\\u22a5\":e.MO.REL,\"\\u22a6\":e.MO.REL,\"\\u22a7\":e.MO.REL,\"\\u22a8\":e.MO.REL,\"\\u22a9\":e.MO.REL,\"\\u22aa\":e.MO.REL,\"\\u22ab\":e.MO.REL,\"\\u22ac\":e.MO.REL,\"\\u22ad\":e.MO.REL,\"\\u22ae\":e.MO.REL,\"\\u22af\":e.MO.REL,\"\\u22b0\":e.MO.REL,\"\\u22b1\":e.MO.REL,\"\\u22b2\":e.MO.REL,\"\\u22b3\":e.MO.REL,\"\\u22b4\":e.MO.REL,\"\\u22b5\":e.MO.REL,\"\\u22b6\":e.MO.REL,\"\\u22b7\":e.MO.REL,\"\\u22b8\":e.MO.REL,\"\\u22b9\":e.MO.REL,\"\\u22ba\":e.MO.BIN4,\"\\u22bb\":e.MO.BIN4,\"\\u22bc\":e.MO.BIN4,\"\\u22bd\":e.MO.BIN4,\"\\u22be\":e.MO.BIN3,\"\\u22bf\":e.MO.BIN3,\"\\u22c4\":e.MO.BIN4,\"\\u22c5\":e.MO.BIN4,\"\\u22c6\":e.MO.BIN4,\"\\u22c7\":e.MO.BIN4,\"\\u22c8\":e.MO.REL,\"\\u22c9\":e.MO.BIN4,\"\\u22ca\":e.MO.BIN4,\"\\u22cb\":e.MO.BIN4,\"\\u22cc\":e.MO.BIN4,\"\\u22cd\":e.MO.REL,\"\\u22ce\":e.MO.BIN4,\"\\u22cf\":e.MO.BIN4,\"\\u22d0\":e.MO.REL,\"\\u22d1\":e.MO.REL,\"\\u22d2\":e.MO.BIN4,\"\\u22d3\":e.MO.BIN4,\"\\u22d4\":e.MO.REL,\"\\u22d5\":e.MO.REL,\"\\u22d6\":e.MO.REL,\"\\u22d7\":e.MO.REL,\"\\u22d8\":e.MO.REL,\"\\u22d9\":e.MO.REL,\"\\u22da\":e.MO.REL,\"\\u22db\":e.MO.REL,\"\\u22dc\":e.MO.REL,\"\\u22dd\":e.MO.REL,\"\\u22de\":e.MO.REL,\"\\u22df\":e.MO.REL,\"\\u22e0\":e.MO.REL,\"\\u22e1\":e.MO.REL,\"\\u22e2\":e.MO.REL,\"\\u22e3\":e.MO.REL,\"\\u22e4\":e.MO.REL,\"\\u22e5\":e.MO.REL,\"\\u22e6\":e.MO.REL,\"\\u22e7\":e.MO.REL,\"\\u22e8\":e.MO.REL,\"\\u22e9\":e.MO.REL,\"\\u22ea\":e.MO.REL,\"\\u22eb\":e.MO.REL,\"\\u22ec\":e.MO.REL,\"\\u22ed\":e.MO.REL,\"\\u22ee\":e.MO.ORD55,\"\\u22ef\":e.MO.INNER,\"\\u22f0\":e.MO.REL,\"\\u22f1\":[5,5,r.TEXCLASS.INNER,null],\"\\u22f2\":e.MO.REL,\"\\u22f3\":e.MO.REL,\"\\u22f4\":e.MO.REL,\"\\u22f5\":e.MO.REL,\"\\u22f6\":e.MO.REL,\"\\u22f7\":e.MO.REL,\"\\u22f8\":e.MO.REL,\"\\u22f9\":e.MO.REL,\"\\u22fa\":e.MO.REL,\"\\u22fb\":e.MO.REL,\"\\u22fc\":e.MO.REL,\"\\u22fd\":e.MO.REL,\"\\u22fe\":e.MO.REL,\"\\u22ff\":e.MO.REL,\"\\u2305\":e.MO.BIN3,\"\\u2306\":e.MO.BIN3,\"\\u2322\":e.MO.REL4,\"\\u2323\":e.MO.REL4,\"\\u2329\":e.MO.OPEN,\"\\u232a\":e.MO.CLOSE,\"\\u23aa\":e.MO.ORD,\"\\u23af\":[0,0,r.TEXCLASS.ORD,{stretchy:!0}],\"\\u23b0\":e.MO.OPEN,\"\\u23b1\":e.MO.CLOSE,\"\\u2500\":e.MO.ORD,\"\\u25b3\":e.MO.BIN4,\"\\u25b5\":e.MO.BIN4,\"\\u25b9\":e.MO.BIN4,\"\\u25bd\":e.MO.BIN4,\"\\u25bf\":e.MO.BIN4,\"\\u25c3\":e.MO.BIN4,\"\\u25ef\":e.MO.BIN3,\"\\u2660\":e.MO.ORD,\"\\u2661\":e.MO.ORD,\"\\u2662\":e.MO.ORD,\"\\u2663\":e.MO.ORD,\"\\u2758\":e.MO.REL,\"\\u27f0\":e.MO.RELSTRETCH,\"\\u27f1\":e.MO.RELSTRETCH,\"\\u27f5\":e.MO.WIDEREL,\"\\u27f6\":e.MO.WIDEREL,\"\\u27f7\":e.MO.WIDEREL,\"\\u27f8\":e.MO.WIDEREL,\"\\u27f9\":e.MO.WIDEREL,\"\\u27fa\":e.MO.WIDEREL,\"\\u27fb\":e.MO.WIDEREL,\"\\u27fc\":e.MO.WIDEREL,\"\\u27fd\":e.MO.WIDEREL,\"\\u27fe\":e.MO.WIDEREL,\"\\u27ff\":e.MO.WIDEREL,\"\\u2900\":e.MO.RELACCENT,\"\\u2901\":e.MO.RELACCENT,\"\\u2902\":e.MO.RELACCENT,\"\\u2903\":e.MO.RELACCENT,\"\\u2904\":e.MO.RELACCENT,\"\\u2905\":e.MO.RELACCENT,\"\\u2906\":e.MO.RELACCENT,\"\\u2907\":e.MO.RELACCENT,\"\\u2908\":e.MO.REL,\"\\u2909\":e.MO.REL,\"\\u290a\":e.MO.RELSTRETCH,\"\\u290b\":e.MO.RELSTRETCH,\"\\u290c\":e.MO.WIDEREL,\"\\u290d\":e.MO.WIDEREL,\"\\u290e\":e.MO.WIDEREL,\"\\u290f\":e.MO.WIDEREL,\"\\u2910\":e.MO.WIDEREL,\"\\u2911\":e.MO.RELACCENT,\"\\u2912\":e.MO.RELSTRETCH,\"\\u2913\":e.MO.RELSTRETCH,\"\\u2914\":e.MO.RELACCENT,\"\\u2915\":e.MO.RELACCENT,\"\\u2916\":e.MO.RELACCENT,\"\\u2917\":e.MO.RELACCENT,\"\\u2918\":e.MO.RELACCENT,\"\\u2919\":e.MO.RELACCENT,\"\\u291a\":e.MO.RELACCENT,\"\\u291b\":e.MO.RELACCENT,\"\\u291c\":e.MO.RELACCENT,\"\\u291d\":e.MO.RELACCENT,\"\\u291e\":e.MO.RELACCENT,\"\\u291f\":e.MO.RELACCENT,\"\\u2920\":e.MO.RELACCENT,\"\\u2921\":e.MO.RELSTRETCH,\"\\u2922\":e.MO.RELSTRETCH,\"\\u2923\":e.MO.REL,\"\\u2924\":e.MO.REL,\"\\u2925\":e.MO.REL,\"\\u2926\":e.MO.REL,\"\\u2927\":e.MO.REL,\"\\u2928\":e.MO.REL,\"\\u2929\":e.MO.REL,\"\\u292a\":e.MO.REL,\"\\u292b\":e.MO.REL,\"\\u292c\":e.MO.REL,\"\\u292d\":e.MO.REL,\"\\u292e\":e.MO.REL,\"\\u292f\":e.MO.REL,\"\\u2930\":e.MO.REL,\"\\u2931\":e.MO.REL,\"\\u2932\":e.MO.REL,\"\\u2933\":e.MO.RELACCENT,\"\\u2934\":e.MO.REL,\"\\u2935\":e.MO.REL,\"\\u2936\":e.MO.REL,\"\\u2937\":e.MO.REL,\"\\u2938\":e.MO.REL,\"\\u2939\":e.MO.REL,\"\\u293a\":e.MO.RELACCENT,\"\\u293b\":e.MO.RELACCENT,\"\\u293c\":e.MO.RELACCENT,\"\\u293d\":e.MO.RELACCENT,\"\\u293e\":e.MO.REL,\"\\u293f\":e.MO.REL,\"\\u2940\":e.MO.REL,\"\\u2941\":e.MO.REL,\"\\u2942\":e.MO.RELACCENT,\"\\u2943\":e.MO.RELACCENT,\"\\u2944\":e.MO.RELACCENT,\"\\u2945\":e.MO.RELACCENT,\"\\u2946\":e.MO.RELACCENT,\"\\u2947\":e.MO.RELACCENT,\"\\u2948\":e.MO.RELACCENT,\"\\u2949\":e.MO.REL,\"\\u294a\":e.MO.RELACCENT,\"\\u294b\":e.MO.RELACCENT,\"\\u294c\":e.MO.REL,\"\\u294d\":e.MO.REL,\"\\u294e\":e.MO.WIDEREL,\"\\u294f\":e.MO.RELSTRETCH,\"\\u2950\":e.MO.WIDEREL,\"\\u2951\":e.MO.RELSTRETCH,\"\\u2952\":e.MO.WIDEREL,\"\\u2953\":e.MO.WIDEREL,\"\\u2954\":e.MO.RELSTRETCH,\"\\u2955\":e.MO.RELSTRETCH,\"\\u2956\":e.MO.RELSTRETCH,\"\\u2957\":e.MO.RELSTRETCH,\"\\u2958\":e.MO.RELSTRETCH,\"\\u2959\":e.MO.RELSTRETCH,\"\\u295a\":e.MO.WIDEREL,\"\\u295b\":e.MO.WIDEREL,\"\\u295c\":e.MO.RELSTRETCH,\"\\u295d\":e.MO.RELSTRETCH,\"\\u295e\":e.MO.WIDEREL,\"\\u295f\":e.MO.WIDEREL,\"\\u2960\":e.MO.RELSTRETCH,\"\\u2961\":e.MO.RELSTRETCH,\"\\u2962\":e.MO.RELACCENT,\"\\u2963\":e.MO.REL,\"\\u2964\":e.MO.RELACCENT,\"\\u2965\":e.MO.REL,\"\\u2966\":e.MO.RELACCENT,\"\\u2967\":e.MO.RELACCENT,\"\\u2968\":e.MO.RELACCENT,\"\\u2969\":e.MO.RELACCENT,\"\\u296a\":e.MO.RELACCENT,\"\\u296b\":e.MO.RELACCENT,\"\\u296c\":e.MO.RELACCENT,\"\\u296d\":e.MO.RELACCENT,\"\\u296e\":e.MO.RELSTRETCH,\"\\u296f\":e.MO.RELSTRETCH,\"\\u2970\":e.MO.RELACCENT,\"\\u2971\":e.MO.RELACCENT,\"\\u2972\":e.MO.RELACCENT,\"\\u2973\":e.MO.RELACCENT,\"\\u2974\":e.MO.RELACCENT,\"\\u2975\":e.MO.RELACCENT,\"\\u2976\":e.MO.RELACCENT,\"\\u2977\":e.MO.RELACCENT,\"\\u2978\":e.MO.RELACCENT,\"\\u2979\":e.MO.RELACCENT,\"\\u297a\":e.MO.RELACCENT,\"\\u297b\":e.MO.RELACCENT,\"\\u297c\":e.MO.RELACCENT,\"\\u297d\":e.MO.RELACCENT,\"\\u297e\":e.MO.REL,\"\\u297f\":e.MO.REL,\"\\u2981\":e.MO.BIN3,\"\\u2982\":e.MO.BIN3,\"\\u2999\":e.MO.BIN3,\"\\u299a\":e.MO.BIN3,\"\\u299b\":e.MO.BIN3,\"\\u299c\":e.MO.BIN3,\"\\u299d\":e.MO.BIN3,\"\\u299e\":e.MO.BIN3,\"\\u299f\":e.MO.BIN3,\"\\u29a0\":e.MO.BIN3,\"\\u29a1\":e.MO.BIN3,\"\\u29a2\":e.MO.BIN3,\"\\u29a3\":e.MO.BIN3,\"\\u29a4\":e.MO.BIN3,\"\\u29a5\":e.MO.BIN3,\"\\u29a6\":e.MO.BIN3,\"\\u29a7\":e.MO.BIN3,\"\\u29a8\":e.MO.BIN3,\"\\u29a9\":e.MO.BIN3,\"\\u29aa\":e.MO.BIN3,\"\\u29ab\":e.MO.BIN3,\"\\u29ac\":e.MO.BIN3,\"\\u29ad\":e.MO.BIN3,\"\\u29ae\":e.MO.BIN3,\"\\u29af\":e.MO.BIN3,\"\\u29b0\":e.MO.BIN3,\"\\u29b1\":e.MO.BIN3,\"\\u29b2\":e.MO.BIN3,\"\\u29b3\":e.MO.BIN3,\"\\u29b4\":e.MO.BIN3,\"\\u29b5\":e.MO.BIN3,\"\\u29b6\":e.MO.BIN4,\"\\u29b7\":e.MO.BIN4,\"\\u29b8\":e.MO.BIN4,\"\\u29b9\":e.MO.BIN4,\"\\u29ba\":e.MO.BIN4,\"\\u29bb\":e.MO.BIN4,\"\\u29bc\":e.MO.BIN4,\"\\u29bd\":e.MO.BIN4,\"\\u29be\":e.MO.BIN4,\"\\u29bf\":e.MO.BIN4,\"\\u29c0\":e.MO.REL,\"\\u29c1\":e.MO.REL,\"\\u29c2\":e.MO.BIN3,\"\\u29c3\":e.MO.BIN3,\"\\u29c4\":e.MO.BIN4,\"\\u29c5\":e.MO.BIN4,\"\\u29c6\":e.MO.BIN4,\"\\u29c7\":e.MO.BIN4,\"\\u29c8\":e.MO.BIN4,\"\\u29c9\":e.MO.BIN3,\"\\u29ca\":e.MO.BIN3,\"\\u29cb\":e.MO.BIN3,\"\\u29cc\":e.MO.BIN3,\"\\u29cd\":e.MO.BIN3,\"\\u29ce\":e.MO.REL,\"\\u29cf\":e.MO.REL,\"\\u29cf\\u0338\":e.MO.REL,\"\\u29d0\":e.MO.REL,\"\\u29d0\\u0338\":e.MO.REL,\"\\u29d1\":e.MO.REL,\"\\u29d2\":e.MO.REL,\"\\u29d3\":e.MO.REL,\"\\u29d4\":e.MO.REL,\"\\u29d5\":e.MO.REL,\"\\u29d6\":e.MO.BIN4,\"\\u29d7\":e.MO.BIN4,\"\\u29d8\":e.MO.BIN3,\"\\u29d9\":e.MO.BIN3,\"\\u29db\":e.MO.BIN3,\"\\u29dc\":e.MO.BIN3,\"\\u29dd\":e.MO.BIN3,\"\\u29de\":e.MO.REL,\"\\u29df\":e.MO.BIN3,\"\\u29e0\":e.MO.BIN3,\"\\u29e1\":e.MO.REL,\"\\u29e2\":e.MO.BIN4,\"\\u29e3\":e.MO.REL,\"\\u29e4\":e.MO.REL,\"\\u29e5\":e.MO.REL,\"\\u29e6\":e.MO.REL,\"\\u29e7\":e.MO.BIN3,\"\\u29e8\":e.MO.BIN3,\"\\u29e9\":e.MO.BIN3,\"\\u29ea\":e.MO.BIN3,\"\\u29eb\":e.MO.BIN3,\"\\u29ec\":e.MO.BIN3,\"\\u29ed\":e.MO.BIN3,\"\\u29ee\":e.MO.BIN3,\"\\u29ef\":e.MO.BIN3,\"\\u29f0\":e.MO.BIN3,\"\\u29f1\":e.MO.BIN3,\"\\u29f2\":e.MO.BIN3,\"\\u29f3\":e.MO.BIN3,\"\\u29f4\":e.MO.REL,\"\\u29f5\":e.MO.BIN4,\"\\u29f6\":e.MO.BIN4,\"\\u29f7\":e.MO.BIN4,\"\\u29f8\":e.MO.BIN3,\"\\u29f9\":e.MO.BIN3,\"\\u29fa\":e.MO.BIN3,\"\\u29fb\":e.MO.BIN3,\"\\u29fe\":e.MO.BIN4,\"\\u29ff\":e.MO.BIN4,\"\\u2a1d\":e.MO.BIN3,\"\\u2a1e\":e.MO.BIN3,\"\\u2a1f\":e.MO.BIN3,\"\\u2a20\":e.MO.BIN3,\"\\u2a21\":e.MO.BIN3,\"\\u2a22\":e.MO.BIN4,\"\\u2a23\":e.MO.BIN4,\"\\u2a24\":e.MO.BIN4,\"\\u2a25\":e.MO.BIN4,\"\\u2a26\":e.MO.BIN4,\"\\u2a27\":e.MO.BIN4,\"\\u2a28\":e.MO.BIN4,\"\\u2a29\":e.MO.BIN4,\"\\u2a2a\":e.MO.BIN4,\"\\u2a2b\":e.MO.BIN4,\"\\u2a2c\":e.MO.BIN4,\"\\u2a2d\":e.MO.BIN4,\"\\u2a2e\":e.MO.BIN4,\"\\u2a2f\":e.MO.BIN4,\"\\u2a30\":e.MO.BIN4,\"\\u2a31\":e.MO.BIN4,\"\\u2a32\":e.MO.BIN4,\"\\u2a33\":e.MO.BIN4,\"\\u2a34\":e.MO.BIN4,\"\\u2a35\":e.MO.BIN4,\"\\u2a36\":e.MO.BIN4,\"\\u2a37\":e.MO.BIN4,\"\\u2a38\":e.MO.BIN4,\"\\u2a39\":e.MO.BIN4,\"\\u2a3a\":e.MO.BIN4,\"\\u2a3b\":e.MO.BIN4,\"\\u2a3c\":e.MO.BIN4,\"\\u2a3d\":e.MO.BIN4,\"\\u2a3e\":e.MO.BIN4,\"\\u2a3f\":e.MO.BIN4,\"\\u2a40\":e.MO.BIN4,\"\\u2a41\":e.MO.BIN4,\"\\u2a42\":e.MO.BIN4,\"\\u2a43\":e.MO.BIN4,\"\\u2a44\":e.MO.BIN4,\"\\u2a45\":e.MO.BIN4,\"\\u2a46\":e.MO.BIN4,\"\\u2a47\":e.MO.BIN4,\"\\u2a48\":e.MO.BIN4,\"\\u2a49\":e.MO.BIN4,\"\\u2a4a\":e.MO.BIN4,\"\\u2a4b\":e.MO.BIN4,\"\\u2a4c\":e.MO.BIN4,\"\\u2a4d\":e.MO.BIN4,\"\\u2a4e\":e.MO.BIN4,\"\\u2a4f\":e.MO.BIN4,\"\\u2a50\":e.MO.BIN4,\"\\u2a51\":e.MO.BIN4,\"\\u2a52\":e.MO.BIN4,\"\\u2a53\":e.MO.BIN4,\"\\u2a54\":e.MO.BIN4,\"\\u2a55\":e.MO.BIN4,\"\\u2a56\":e.MO.BIN4,\"\\u2a57\":e.MO.BIN4,\"\\u2a58\":e.MO.BIN4,\"\\u2a59\":e.MO.REL,\"\\u2a5a\":e.MO.BIN4,\"\\u2a5b\":e.MO.BIN4,\"\\u2a5c\":e.MO.BIN4,\"\\u2a5d\":e.MO.BIN4,\"\\u2a5e\":e.MO.BIN4,\"\\u2a5f\":e.MO.BIN4,\"\\u2a60\":e.MO.BIN4,\"\\u2a61\":e.MO.BIN4,\"\\u2a62\":e.MO.BIN4,\"\\u2a63\":e.MO.BIN4,\"\\u2a64\":e.MO.BIN4,\"\\u2a65\":e.MO.BIN4,\"\\u2a66\":e.MO.REL,\"\\u2a67\":e.MO.REL,\"\\u2a68\":e.MO.REL,\"\\u2a69\":e.MO.REL,\"\\u2a6a\":e.MO.REL,\"\\u2a6b\":e.MO.REL,\"\\u2a6c\":e.MO.REL,\"\\u2a6d\":e.MO.REL,\"\\u2a6e\":e.MO.REL,\"\\u2a6f\":e.MO.REL,\"\\u2a70\":e.MO.REL,\"\\u2a71\":e.MO.BIN4,\"\\u2a72\":e.MO.BIN4,\"\\u2a73\":e.MO.REL,\"\\u2a74\":e.MO.REL,\"\\u2a75\":e.MO.REL,\"\\u2a76\":e.MO.REL,\"\\u2a77\":e.MO.REL,\"\\u2a78\":e.MO.REL,\"\\u2a79\":e.MO.REL,\"\\u2a7a\":e.MO.REL,\"\\u2a7b\":e.MO.REL,\"\\u2a7c\":e.MO.REL,\"\\u2a7d\":e.MO.REL,\"\\u2a7d\\u0338\":e.MO.REL,\"\\u2a7e\":e.MO.REL,\"\\u2a7e\\u0338\":e.MO.REL,\"\\u2a7f\":e.MO.REL,\"\\u2a80\":e.MO.REL,\"\\u2a81\":e.MO.REL,\"\\u2a82\":e.MO.REL,\"\\u2a83\":e.MO.REL,\"\\u2a84\":e.MO.REL,\"\\u2a85\":e.MO.REL,\"\\u2a86\":e.MO.REL,\"\\u2a87\":e.MO.REL,\"\\u2a88\":e.MO.REL,\"\\u2a89\":e.MO.REL,\"\\u2a8a\":e.MO.REL,\"\\u2a8b\":e.MO.REL,\"\\u2a8c\":e.MO.REL,\"\\u2a8d\":e.MO.REL,\"\\u2a8e\":e.MO.REL,\"\\u2a8f\":e.MO.REL,\"\\u2a90\":e.MO.REL,\"\\u2a91\":e.MO.REL,\"\\u2a92\":e.MO.REL,\"\\u2a93\":e.MO.REL,\"\\u2a94\":e.MO.REL,\"\\u2a95\":e.MO.REL,\"\\u2a96\":e.MO.REL,\"\\u2a97\":e.MO.REL,\"\\u2a98\":e.MO.REL,\"\\u2a99\":e.MO.REL,\"\\u2a9a\":e.MO.REL,\"\\u2a9b\":e.MO.REL,\"\\u2a9c\":e.MO.REL,\"\\u2a9d\":e.MO.REL,\"\\u2a9e\":e.MO.REL,\"\\u2a9f\":e.MO.REL,\"\\u2aa0\":e.MO.REL,\"\\u2aa1\":e.MO.REL,\"\\u2aa1\\u0338\":e.MO.REL,\"\\u2aa2\":e.MO.REL,\"\\u2aa2\\u0338\":e.MO.REL,\"\\u2aa3\":e.MO.REL,\"\\u2aa4\":e.MO.REL,\"\\u2aa5\":e.MO.REL,\"\\u2aa6\":e.MO.REL,\"\\u2aa7\":e.MO.REL,\"\\u2aa8\":e.MO.REL,\"\\u2aa9\":e.MO.REL,\"\\u2aaa\":e.MO.REL,\"\\u2aab\":e.MO.REL,\"\\u2aac\":e.MO.REL,\"\\u2aad\":e.MO.REL,\"\\u2aae\":e.MO.REL,\"\\u2aaf\":e.MO.REL,\"\\u2aaf\\u0338\":e.MO.REL,\"\\u2ab0\":e.MO.REL,\"\\u2ab0\\u0338\":e.MO.REL,\"\\u2ab1\":e.MO.REL,\"\\u2ab2\":e.MO.REL,\"\\u2ab3\":e.MO.REL,\"\\u2ab4\":e.MO.REL,\"\\u2ab5\":e.MO.REL,\"\\u2ab6\":e.MO.REL,\"\\u2ab7\":e.MO.REL,\"\\u2ab8\":e.MO.REL,\"\\u2ab9\":e.MO.REL,\"\\u2aba\":e.MO.REL,\"\\u2abb\":e.MO.REL,\"\\u2abc\":e.MO.REL,\"\\u2abd\":e.MO.REL,\"\\u2abe\":e.MO.REL,\"\\u2abf\":e.MO.REL,\"\\u2ac0\":e.MO.REL,\"\\u2ac1\":e.MO.REL,\"\\u2ac2\":e.MO.REL,\"\\u2ac3\":e.MO.REL,\"\\u2ac4\":e.MO.REL,\"\\u2ac5\":e.MO.REL,\"\\u2ac6\":e.MO.REL,\"\\u2ac7\":e.MO.REL,\"\\u2ac8\":e.MO.REL,\"\\u2ac9\":e.MO.REL,\"\\u2aca\":e.MO.REL,\"\\u2acb\":e.MO.REL,\"\\u2acc\":e.MO.REL,\"\\u2acd\":e.MO.REL,\"\\u2ace\":e.MO.REL,\"\\u2acf\":e.MO.REL,\"\\u2ad0\":e.MO.REL,\"\\u2ad1\":e.MO.REL,\"\\u2ad2\":e.MO.REL,\"\\u2ad3\":e.MO.REL,\"\\u2ad4\":e.MO.REL,\"\\u2ad5\":e.MO.REL,\"\\u2ad6\":e.MO.REL,\"\\u2ad7\":e.MO.REL,\"\\u2ad8\":e.MO.REL,\"\\u2ad9\":e.MO.REL,\"\\u2ada\":e.MO.REL,\"\\u2adb\":e.MO.REL,\"\\u2adc\":e.MO.REL,\"\\u2add\":e.MO.REL,\"\\u2ade\":e.MO.REL,\"\\u2adf\":e.MO.REL,\"\\u2ae0\":e.MO.REL,\"\\u2ae1\":e.MO.REL,\"\\u2ae2\":e.MO.REL,\"\\u2ae3\":e.MO.REL,\"\\u2ae4\":e.MO.REL,\"\\u2ae5\":e.MO.REL,\"\\u2ae6\":e.MO.REL,\"\\u2ae7\":e.MO.REL,\"\\u2ae8\":e.MO.REL,\"\\u2ae9\":e.MO.REL,\"\\u2aea\":e.MO.REL,\"\\u2aeb\":e.MO.REL,\"\\u2aec\":e.MO.REL,\"\\u2aed\":e.MO.REL,\"\\u2aee\":e.MO.REL,\"\\u2aef\":e.MO.REL,\"\\u2af0\":e.MO.REL,\"\\u2af1\":e.MO.REL,\"\\u2af2\":e.MO.REL,\"\\u2af3\":e.MO.REL,\"\\u2af4\":e.MO.BIN4,\"\\u2af5\":e.MO.BIN4,\"\\u2af6\":e.MO.BIN4,\"\\u2af7\":e.MO.REL,\"\\u2af8\":e.MO.REL,\"\\u2af9\":e.MO.REL,\"\\u2afa\":e.MO.REL,\"\\u2afb\":e.MO.BIN4,\"\\u2afd\":e.MO.BIN4,\"\\u2afe\":e.MO.BIN3,\"\\u2b45\":e.MO.RELSTRETCH,\"\\u2b46\":e.MO.RELSTRETCH,\"\\u3008\":e.MO.OPEN,\"\\u3009\":e.MO.CLOSE,\"\\ufe37\":e.MO.WIDEACCENT,\"\\ufe38\":e.MO.WIDEACCENT}},e.OPTABLE.infix[\"^\"]=e.MO.WIDEREL,e.OPTABLE.infix._=e.MO.WIDEREL,e.OPTABLE.prefix[\"\\u2223\"]=e.MO.OPEN,e.OPTABLE.prefix[\"\\u2225\"]=e.MO.OPEN,e.OPTABLE.postfix[\"\\u2223\"]=e.MO.CLOSE,e.OPTABLE.postfix[\"\\u2225\"]=e.MO.CLOSE},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMstyle=void 0;var o=Q(0),i=Q(24),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"mstyle\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"notParent\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(t,e,Q,r){var T=this.attributes.getExplicit(\"scriptlevel\");null!=T&&((T=T.toString()).match(/^\\s*[-+]/)?Q+=parseInt(T):Q=parseInt(T));var n=this.attributes.getExplicit(\"displaystyle\");null!=n&&(e=!0===n),t=this.addInheritedAttributes(t,this.attributes.getAllAttributes()),this.childNodes[0].setInheritedAttributes(t,e,Q,r)},e.defaults=n(n({},o.AbstractMmlLayoutNode.defaults),{scriptlevel:i.INHERIT,displaystyle:i.INHERIT,scriptsizemultiplier:1/Math.sqrt(2),scriptminsize:\"8px\",mathbackground:i.INHERIT,mathcolor:i.INHERIT,dir:i.INHERIT,infixlinebreakstyle:\"before\"}),e}(o.AbstractMmlLayoutNode);e.MmlMstyle=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMaligngroup=void 0;var o=Q(0),i=Q(24),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"maligngroup\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isSpacelike\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(e,Q,r,T){e=this.addInheritedAttributes(e,this.attributes.getAllAttributes()),t.prototype.setChildInheritedAttributes.call(this,e,Q,r,T)},e.defaults=n(n({},o.AbstractMmlLayoutNode.defaults),{groupalign:i.INHERIT}),e}(o.AbstractMmlLayoutNode);e.MmlMaligngroup=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlMalignmark=void 0;var o=Q(0),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"malignmark\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isSpacelike\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.defaults=n(n({},o.AbstractMmlNode.defaults),{edge:\"left\"}),e}(o.AbstractMmlNode);e.MmlMalignmark=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MathChoice=void 0;var o=Q(0),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"MathChoice\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"arity\",{get:function(){return 4},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"notParent\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setInheritedAttributes=function(t,e,Q,r){var T=e?0:Math.max(0,Math.min(Q,2))+1,n=this.childNodes[T]||this.factory.create(\"mrow\");this.parent.replaceChild(n,this),n.setInheritedAttributes(t,e,Q,r)},e.defaults=n({},o.AbstractMmlBaseNode.defaults),e}(o.AbstractMmlBaseNode);e.MathChoice=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.BitFieldClass=e.BitField=void 0;var a=function(){function t(){this.bits=0}return t.allocate=function(){for(var e,Q,r=[],T=0;T<arguments.length;T++)r[T]=arguments[T];try{for(var o=n(r),i=o.next();!i.done;i=o.next()){var a=i.value;if(this.has(a))throw new Error(\"Bit already allocated for \"+a);if(this.next===t.MAXBIT)throw new Error(\"Maximum number of bits already allocated\");this.names.set(a,this.next),this.next<<=1}}catch(t){e={error:t}}finally{try{i&&!i.done&&(Q=o.return)&&Q.call(o)}finally{if(e)throw e.error}}},t.has=function(t){return this.names.has(t)},t.prototype.set=function(t){this.bits|=this.getBit(t)},t.prototype.clear=function(t){this.bits&=~this.getBit(t)},t.prototype.isSet=function(t){return!!(this.bits&this.getBit(t))},t.prototype.reset=function(){this.bits=0},t.prototype.getBit=function(t){var e=this.constructor.names.get(t);if(!e)throw new Error(\"Unknown bit-field name: \"+t);return e},t.MAXBIT=1<<31,t.next=1,t.names=new Map,t}();e.BitField=a,e.BitFieldClass=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var Q=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e}(a);return Q.allocate.apply(Q,i(t)),Q}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.HandlerList=void 0;var o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.register=function(t){return this.add(t,t.priority)},e.prototype.unregister=function(t){this.remove(t)},e.prototype.handlesDocument=function(t){var e,Q;try{for(var r=n(this),T=r.next();!T.done;T=r.next()){var o=T.value.item;if(o.handlesDocument(t))return o}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}throw new Error(\"Can't find handler for document\")},e.prototype.document=function(t,e){return void 0===e&&(e=null),this.handlesDocument(t).create(t,e)},e}(Q(21).PrioritizedList);e.HandlerList=o},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(T(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractVisitor=void 0;var o=Q(58),i=function(){function t(e){var Q,T;this.nodeHandlers=new Map;try{for(var n=r(e.getKinds()),o=n.next();!o.done;o=n.next()){var i=o.value,a=this[t.methodName(i)];a&&this.nodeHandlers.set(i,a)}}catch(t){Q={error:t}}finally{try{o&&!o.done&&(T=n.return)&&T.call(n)}finally{if(Q)throw Q.error}}}return t.methodName=function(t){return\"visit\"+(t.charAt(0).toUpperCase()+t.substr(1)).replace(/[^a-z0-9_]/gi,\"_\")+\"Node\"},t.prototype.visitTree=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q];return this.visitNode.apply(this,n([t],e))},t.prototype.visitNode=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q];var r=this.nodeHandlers.get(t.kind)||this.visitDefault;return r.call.apply(r,n([this,t],e))},t.prototype.visitDefault=function(t){for(var e,Q,T=[],i=1;i<arguments.length;i++)T[i-1]=arguments[i];if(t instanceof o.AbstractNode)try{for(var a=r(t.childNodes),s=a.next();!s.done;s=a.next()){var l=s.value;this.visitNode.apply(this,n([l],T))}}catch(t){e={error:t}}finally{try{s&&!s.done&&(Q=a.return)&&Q.call(a)}finally{if(e)throw e.error}}},t.prototype.setNodeHandler=function(t,e){this.nodeHandlers.set(t,e)},t.prototype.removeNodeHandler=function(t){this.nodeHandlers.delete(t)},t}();e.AbstractVisitor=i},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractWrapper=void 0;var r=function(){function t(t,e){this.factory=t,this.node=e}return Object.defineProperty(t.prototype,\"kind\",{get:function(){return this.node.kind},enumerable:!1,configurable:!0}),t.prototype.wrap=function(t){return this.factory.wrap(t)},t}();e.AbstractWrapper=r},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractWrapperFactory=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.wrap=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q];return this.create.apply(this,o([t.kind,t],e))},e}(Q(37).AbstractFactory);e.AbstractWrapperFactory=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.HTMLDocument=void 0;var a=Q(53),s=Q(7),l=Q(123),c=Q(124),u=Q(125),p=Q(14),h=function(t){function e(e,Q,r){var T=this,n=o(s.separateOptions(r,u.HTMLDomStrings.OPTIONS),2),i=n[0],a=n[1];return(T=t.call(this,e,Q,i)||this).domStrings=T.options.DomStrings||new u.HTMLDomStrings(a),T.domStrings.adaptor=Q,T.styles=[],T}return T(e,t),e.prototype.findPosition=function(t,e,Q,r){var T,n,a=this.adaptor;try{for(var s=i(r[t]),l=s.next();!l.done;l=s.next()){var c=l.value,u=o(c,2),p=u[0],h=u[1];if(e<=h&&\"#text\"===a.kind(p))return{node:p,n:Math.max(e,0),delim:Q};e-=h}}catch(t){T={error:t}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(T)throw T.error}}return{node:null,n:0,delim:Q}},e.prototype.mathItem=function(t,e,Q){var r=t.math,T=this.findPosition(t.n,t.start.n,t.open,Q),n=this.findPosition(t.n,t.end.n,t.close,Q);return new this.options.MathItem(r,e,t.display,T,n)},e.prototype.findMath=function(t){var e,Q,r,T,n,a,l,c,u;if(!this.processed.isSet(\"findMath\")){this.adaptor.document=this.document,t=s.userOptions({elements:this.options.elements||[this.adaptor.body(this.document)]},t);try{for(var p=i(this.adaptor.getElements(t.elements,this.document)),h=p.next();!h.done;h=p.next()){var f=h.value,d=o([null,null],2),L=d[0],H=d[1];try{for(var m=(r=void 0,i(this.inputJax)),y=m.next();!y.done;y=m.next()){var v=y.value,g=new this.options.MathList;if(v.processStrings){null===L&&(L=(n=o(this.domStrings.find(f),2))[0],H=n[1]);try{for(var b=(a=void 0,i(v.findMath(L))),M=b.next();!M.done;M=b.next()){var V=M.value;g.push(this.mathItem(V,v,H))}}catch(t){a={error:t}}finally{try{M&&!M.done&&(l=b.return)&&l.call(b)}finally{if(a)throw a.error}}}else try{for(var x=(c=void 0,i(v.findMath(f))),O=x.next();!O.done;O=x.next()){V=O.value;var _=new this.options.MathItem(V.math,v,V.display,V.start,V.end);g.push(_)}}catch(t){c={error:t}}finally{try{O&&!O.done&&(u=x.return)&&u.call(x)}finally{if(c)throw c.error}}this.math.merge(g)}}catch(t){r={error:t}}finally{try{y&&!y.done&&(T=m.return)&&T.call(m)}finally{if(r)throw r.error}}}}catch(t){e={error:t}}finally{try{h&&!h.done&&(Q=p.return)&&Q.call(p)}finally{if(e)throw e.error}}this.processed.set(\"findMath\")}return this},e.prototype.updateDocument=function(){return this.processed.isSet(\"updateDocument\")||(this.addPageElements(),this.addStyleSheet(),t.prototype.updateDocument.call(this),this.processed.set(\"updateDocument\")),this},e.prototype.addPageElements=function(){var t=this.adaptor.body(this.document),e=this.documentPageElements();e&&this.adaptor.append(t,e)},e.prototype.addStyleSheet=function(){var t=this.documentStyleSheet();if(t){var e=this.adaptor.head(this.document),Q=this.findSheet(e,this.adaptor.getAttribute(t,\"id\"));Q?this.adaptor.replace(t,Q):this.adaptor.append(e,t)}},e.prototype.findSheet=function(t,e){var Q,r;if(e)try{for(var T=i(this.adaptor.tags(t,\"style\")),n=T.next();!n.done;n=T.next()){var o=n.value;if(this.adaptor.getAttribute(o,\"id\")===e)return o}}catch(t){Q={error:t}}finally{try{n&&!n.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}return null},e.prototype.removeFromDocument=function(t){var e,Q;if(void 0===t&&(t=!1),this.processed.isSet(\"updateDocument\"))try{for(var r=i(this.math),T=r.next();!T.done;T=r.next()){var n=T.value;n.state()>=p.STATE.INSERTED&&n.state(p.STATE.TYPESET,t)}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}return this.processed.clear(\"updateDocument\"),this},e.prototype.documentStyleSheet=function(){return this.outputJax.styleSheet(this)},e.prototype.documentPageElements=function(){return this.outputJax.pageElements(this)},e.prototype.addStyles=function(t){this.styles.push(t)},e.prototype.getStyles=function(){return this.styles},e.KIND=\"HTML\",e.OPTIONS=n(n({},a.AbstractMathDocument.OPTIONS),{renderActions:s.expandable(n(n({},a.AbstractMathDocument.OPTIONS.renderActions),{styles:[p.STATE.INSERTED+1,\"\",\"updateStyleSheet\",!1]})),MathList:c.HTMLMathList,MathItem:l.HTMLMathItem,DomStrings:null}),e}(a.AbstractMathDocument);e.HTMLDocument=h},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.HTMLMathItem=void 0;var n=Q(14),o=function(t){function e(e,Q,r,T,n){return void 0===r&&(r=!0),void 0===T&&(T={node:null,n:0,delim:\"\"}),void 0===n&&(n={node:null,n:0,delim:\"\"}),t.call(this,e,Q,r,T,n)||this}return T(e,t),Object.defineProperty(e.prototype,\"adaptor\",{get:function(){return this.inputJax.adaptor},enumerable:!1,configurable:!0}),e.prototype.updateDocument=function(t){if(this.state()<n.STATE.INSERTED){if(this.inputJax.processStrings){var e=this.start.node;if(e===this.end.node)this.end.n&&this.end.n<this.adaptor.value(this.end.node).length&&this.adaptor.split(this.end.node,this.end.n),this.start.n&&(e=this.adaptor.split(this.start.node,this.start.n)),this.adaptor.replace(this.typesetRoot,e);else{for(this.start.n&&(e=this.adaptor.split(e,this.start.n));e!==this.end.node;){var Q=this.adaptor.next(e);this.adaptor.remove(e),e=Q}this.adaptor.insert(this.typesetRoot,e),this.end.n<this.adaptor.value(e).length&&this.adaptor.split(e,this.end.n),this.adaptor.remove(e)}}else this.adaptor.replace(this.typesetRoot,this.start.node);this.start.node=this.end.node=this.typesetRoot,this.start.n=this.end.n=0,this.state(n.STATE.INSERTED)}},e.prototype.updateStyleSheet=function(t){t.addStyleSheet()},e.prototype.removeFromDocument=function(t){if(void 0===t&&(t=!1),this.state()>=n.STATE.TYPESET){var e=this.adaptor,Q=this.start.node,r=e.text(\"\");if(t){var T=this.start.delim+this.math+this.end.delim;if(this.inputJax.processStrings)r=e.text(T);else{var o=e.parse(T,\"text/html\");r=e.firstChild(e.body(o))}}e.parent(Q)&&e.replace(r,Q),this.start.node=this.end.node=r,this.start.n=this.end.n=0}},e}(n.AbstractMathItem);e.HTMLMathItem=o},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.HTMLMathList=void 0;var n=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e}(Q(56).AbstractMathList);e.HTMLMathList=n},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.HTMLDomStrings=void 0;var T=Q(7),n=function(){function t(t){void 0===t&&(t=null);var e=this.constructor;this.options=T.userOptions(T.defaultOptions({},e.OPTIONS),t),this.init(),this.getPatterns()}return t.prototype.init=function(){this.strings=[],this.string=\"\",this.snodes=[],this.nodes=[],this.stack=[]},t.prototype.getPatterns=function(){var t=T.makeArray(this.options.skipHtmlTags),e=T.makeArray(this.options.ignoreHtmlClass),Q=T.makeArray(this.options.processHtmlClass);this.skipHtmlTags=new RegExp(\"^(?:\"+t.join(\"|\")+\")$\",\"i\"),this.ignoreHtmlClass=new RegExp(\"(?:^| )(?:\"+e.join(\"|\")+\")(?: |$)\"),this.processHtmlClass=new RegExp(\"(?:^| )(?:\"+Q+\")(?: |$)\")},t.prototype.pushString=function(){this.string.match(/\\S/)&&(this.strings.push(this.string),this.nodes.push(this.snodes)),this.string=\"\",this.snodes=[]},t.prototype.extendString=function(t,e){this.snodes.push([t,e.length]),this.string+=e},t.prototype.handleText=function(t,e){return e||this.extendString(t,this.adaptor.value(t)),this.adaptor.next(t)},t.prototype.handleTag=function(t,e){if(!e){var Q=this.options.includeHtmlTags[this.adaptor.kind(t)];this.extendString(t,Q)}return this.adaptor.next(t)},t.prototype.handleContainer=function(t,e){this.pushString();var Q=this.adaptor.getAttribute(t,\"class\")||\"\",r=this.adaptor.kind(t)||\"\",T=this.processHtmlClass.exec(Q),n=t;return!this.adaptor.firstChild(t)||this.adaptor.getAttribute(t,\"data-MJX\")||!T&&this.skipHtmlTags.exec(r)?n=this.adaptor.next(t):(this.adaptor.next(t)&&this.stack.push([this.adaptor.next(t),e]),n=this.adaptor.firstChild(t),e=(e||this.ignoreHtmlClass.exec(Q))&&!T),[n,e]},t.prototype.find=function(t){var e,Q;this.init();for(var T=this.adaptor.next(t),n=!1,o=this.options.includeHtmlTags;t&&t!==T;)\"#text\"===this.adaptor.kind(t)?t=this.handleText(t,n):void 0!==o[this.adaptor.kind(t)]?t=this.handleTag(t,n):(t=(e=r(this.handleContainer(t,n),2))[0],n=e[1]),!t&&this.stack.length&&(this.pushString(),t=(Q=r(this.stack.pop(),2))[0],n=Q[1]);this.pushString();var i=[this.strings,this.nodes];return this.init(),i},t.OPTIONS={skipHtmlTags:[\"script\",\"noscript\",\"style\",\"textarea\",\"pre\",\"code\",\"annotation\",\"annotation-xml\"],includeHtmlTags:{br:\"\\n\",wbr:\"\",\"#comment\":\"\"},ignoreHtmlClass:\"mathjax_ignore\",processHtmlClass:\"mathjax_process\"},t}();e.HTMLDomStrings=n},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.asyncLoad=void 0;var r=Q(25);e.asyncLoad=function(t){return r.mathjax.asyncLoad?new Promise((function(e,Q){var T=r.mathjax.asyncLoad(t);T instanceof Promise?T.then((function(t){return e(t)})).catch((function(t){return Q(t)})):e(T)})):Promise.reject(\"Can't load '\"+t+\"': No asyncLoad method specified\")}},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CssStyles=void 0;var T=function(){function t(t){void 0===t&&(t=null),this.styles={},this.addStyles(t)}return Object.defineProperty(t.prototype,\"cssText\",{get:function(){return this.getStyleString()},enumerable:!1,configurable:!0}),t.prototype.addStyles=function(t){var e,Q;if(t)try{for(var T=r(Object.keys(t)),n=T.next();!n.done;n=T.next()){var o=n.value;this.styles[o]||(this.styles[o]={}),Object.assign(this.styles[o],t[o])}}catch(t){e={error:t}}finally{try{n&&!n.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}},t.prototype.removeStyles=function(){for(var t,e,Q=[],T=0;T<arguments.length;T++)Q[T]=arguments[T];try{for(var n=r(Q),o=n.next();!o.done;o=n.next()){var i=o.value;delete this.styles[i]}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},t.prototype.clear=function(){this.styles={}},t.prototype.getStyleString=function(){var t,e,Q=Object.keys(this.styles),T=new Array(Q.length),n=0;try{for(var o=r(Q),i=o.next();!i.done;i=o.next()){var a=i.value;T[n++]=a+\" {\\n\"+this.getStyleDefString(this.styles[a])+\"\\n}\"}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return T.join(\"\\n\\n\")},t.prototype.getStyleDefString=function(t){var e,Q,T=Object.keys(t),n=new Array(T.length),o=0;try{for(var i=r(T),a=i.next();!a.done;a=i.next()){var s=a.value;n[o++]=\"  \"+s+\": \"+t[s]+\";\"}}catch(t){e={error:t}}finally{try{a&&!a.done&&(Q=i.return)&&Q.call(i)}finally{if(e)throw e.error}}return n.join(\"\\n\")},t}();e.CssStyles=T},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.max=e.sum=void 0,e.sum=function(t){return t.reduce((function(t,e){return t+e}),0)},e.max=function(t){return t.reduce((function(t,e){return Math.max(t,e)}),0)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindTeX=void 0;var o=Q(107),i=Q(15),a=Q(14),s=function(t){function e(e){var Q=t.call(this,e)||this;return Q.getPatterns(),Q}return T(e,t),e.prototype.getPatterns=function(){var t=this,e=this.options,Q=[],r=[],T=[];this.end={},this.env=this.sub=0;var n=1;e.inlineMath.forEach((function(e){return t.addPattern(Q,e,!1)})),e.displayMath.forEach((function(e){return t.addPattern(Q,e,!0)})),Q.length&&r.push(Q.sort(i.sortLength).join(\"|\")),e.processEnvironments&&(r.push(\"\\\\\\\\begin\\\\s*\\\\{([^}]*)\\\\}\"),this.env=n,n++),e.processEscapes&&T.push(\"\\\\\\\\([\\\\\\\\$])\"),e.processRefs&&T.push(\"(\\\\\\\\(?:eq)?ref\\\\s*\\\\{[^}]*\\\\})\"),T.length&&(r.push(\"(\"+T.join(\"|\")+\")\"),this.sub=n),this.start=new RegExp(r.join(\"|\"),\"g\"),this.hasPatterns=r.length>0},e.prototype.addPattern=function(t,e,Q){var r=n(e,2),T=r[0],o=r[1];t.push(i.quotePattern(T)),this.end[T]=[o,Q,this.endPattern(o)]},e.prototype.endPattern=function(t,e){return new RegExp((e||i.quotePattern(t))+\"|\\\\\\\\(?:[a-zA-Z]|.)|[{}]\",\"g\")},e.prototype.findEnd=function(t,e,Q,r){for(var T,o=n(r,3),i=o[0],s=o[1],l=o[2],c=l.lastIndex=Q.index+Q[0].length,u=0;T=l.exec(t);){if((T[1]||T[0])===i&&0===u)return a.protoItem(Q[0],t.substr(c,T.index-c),T[0],e,Q.index,T.index+T[0].length,s);\"{\"===T[0]?u++:\"}\"===T[0]&&u&&u--}return null},e.prototype.findMathInString=function(t,e,Q){var r,T;for(this.start.lastIndex=0;r=this.start.exec(Q);){if(void 0!==r[this.env]&&this.env){var n=\"\\\\\\\\end\\\\s*(\\\\{\"+i.quotePattern(r[this.env])+\"\\\\})\";(T=this.findEnd(Q,e,r,[\"{\"+r[this.env]+\"}\",!0,this.endPattern(null,n)]))&&(T.math=T.open+T.math+T.close,T.open=T.close=\"\")}else if(void 0!==r[this.sub]&&this.sub){var o=r[this.sub];n=r.index+r[this.sub].length;T=2===o.length?a.protoItem(\"\",o.substr(1),\"\",e,r.index,n):a.protoItem(\"\",o,\"\",e,r.index,n,!1)}else T=this.findEnd(Q,e,r,this.end[r[0]]);T&&(t.push(T),this.start.lastIndex=T.end.n)}},e.prototype.findMath=function(t){var e=[];if(this.hasPatterns)for(var Q=0,r=t.length;Q<r;Q++)this.findMathInString(e,Q,t[Q]);return e},e.OPTIONS={inlineMath:[[\"\\\\(\",\"\\\\)\"]],displayMath:[[\"$$\",\"$$\"],[\"\\\\[\",\"\\\\]\"]],processEscapes:!0,processEnvironments:!0,processRefs:!0},e}(o.AbstractFindMath);e.FindTeX=s},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0});var T,n=Q(0),o=Q(8);!function(t){t.cleanStretchy=function(t){var e,Q,T=t.data;try{for(var n=r(T.getList(\"fixStretchy\")),i=n.next();!i.done;i=n.next()){var a=i.value;if(o.default.getProperty(a,\"fixStretchy\")){var s=o.default.getForm(a);s&&s[3]&&s[3].stretchy&&o.default.setAttribute(a,\"stretchy\",!1);var l=a.parent;if(!(o.default.getTexClass(a)||s&&s[2])){var c=T.nodeFactory.create(\"node\",\"TeXAtom\",[a]);l.replaceChild(c,a),c.inheritAttributesFrom(a)}o.default.removeProperties(a,\"fixStretchy\")}}}catch(t){e={error:t}}finally{try{i&&!i.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}},t.cleanAttributes=function(t){t.data.root.walkTree((function(t,e){var Q,T,n=t.attributes;if(n)try{for(var o=r(n.getExplicitNames()),i=o.next();!i.done;i=o.next()){var a=i.value;n.attributes[a]===t.attributes.getInherited(a)&&delete n.attributes[a]}}catch(t){Q={error:t}}finally{try{i&&!i.done&&(T=o.return)&&T.call(o)}finally{if(Q)throw Q.error}}}),{})},t.combineRelations=function(t){var T,i;try{for(var a=r(t.data.getList(\"mo\")),s=a.next();!s.done;s=a.next()){var l=s.value;if(!l.getProperty(\"relationsCombined\")&&l.parent&&(!l.parent||o.default.isType(l.parent,\"mrow\"))&&o.default.getTexClass(l)===n.TEXCLASS.REL){for(var c=l.parent,u=void 0,p=c.childNodes,h=p.indexOf(l)+1,f=o.default.getProperty(l,\"variantForm\");h<p.length&&(u=p[h])&&o.default.isType(u,\"mo\")&&o.default.getTexClass(u)===n.TEXCLASS.REL;){if(f!==o.default.getProperty(u,\"variantForm\")||!Q(l,u)){null==l.attributes.getExplicit(\"rspace\")&&o.default.setAttribute(l,\"rspace\",\"0pt\"),null==u.attributes.getExplicit(\"lspace\")&&o.default.setAttribute(u,\"lspace\",\"0pt\");break}o.default.appendChildren(l,o.default.getChildren(u)),e([\"stretchy\",\"rspace\"],l,u),o.default.setProperties(l,u.getAllProperties()),p.splice(h,1),u.parent=null,u.setProperty(\"relationsCombined\",!0)}l.attributes.setInherited(\"form\",l.getForms()[0])}}}catch(t){T={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(T)throw T.error}}};var e=function(t,e,Q){var r=e.attributes,T=Q.attributes;t.forEach((function(t){var e=T.getExplicit(t);null!=e&&r.set(t,e)}))},Q=function(t,e){var Q,T,n=function(t,e){return t.getExplicitNames().filter((function(Q){return Q!==e&&(\"stretchy\"!==Q||t.getExplicit(\"stretchy\"))}))},o=t.attributes,i=e.attributes,a=n(o,\"lspace\"),s=n(i,\"rspace\");if(a.length!==s.length)return!1;try{for(var l=r(a),c=l.next();!c.done;c=l.next()){var u=c.value;if(o.getExplicit(u)!==i.getExplicit(u))return!1}}catch(t){Q={error:t}}finally{try{c&&!c.done&&(T=l.return)&&T.call(l)}finally{if(Q)throw Q.error}}return!0},T=function(t,e,Q){var T,n;try{for(var i=r(t.getList(\"m\"+e+Q)),a=i.next();!a.done;a=i.next()){var s=a.value,l=s.childNodes;if(!l[s[e]]||!l[s[Q]]){var c=s.parent,u=l[s[e]]?t.nodeFactory.create(\"node\",\"m\"+e,[l[s.base],l[s[e]]]):t.nodeFactory.create(\"node\",\"m\"+Q,[l[s.base],l[s[Q]]]);o.default.copyAttributes(s,u),c?c.replaceChild(u,s):t.root=u}}}catch(t){T={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(T)throw T.error}}};t.cleanSubSup=function(t){var e=t.data;e.error||(T(e,\"sub\",\"sup\"),T(e,\"under\",\"over\"))};var i=function(t,e,Q){var T,n;try{for(var i=r(t.getList(e)),a=i.next();!a.done;a=i.next()){var s=a.value;if(!s.attributes.get(\"displaystyle\")){var l=s.childNodes[s.base],c=l.coreMO();if(l.getProperty(\"movablelimits\")&&!c.attributes.getExplicit(\"movablelimits\")){var u=t.nodeFactory.create(\"node\",Q,s.childNodes);o.default.copyAttributes(s,u),s.parent?s.parent.replaceChild(u,s):t.root=u}}}}catch(t){T={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(T)throw T.error}}};t.moveLimits=function(t){var e=t.data;i(e,\"munderover\",\"msubsup\"),i(e,\"munder\",\"msub\"),i(e,\"mover\",\"msup\")},t.setInherited=function(t){t.data.root.setInheritedAttributes({},t.math.display,0,!1)}}(T||(T={})),e.default=T},function(t,e,Q){\"use strict\";var r,T,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0});var o=Q(22),i=Q(37),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(o.BaseItem),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.defaultKind=\"dummy\",e.configuration=null,e}return n(e,t),e.DefaultStackItems=((T={})[a.prototype.kind]=a,T),e}(i.AbstractFactory);e.default=s},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ActionConfiguration=e.ActionMethods=void 0;var r=Q(2),T=Q(12),n=Q(3),o=Q(16);e.ActionMethods={},e.ActionMethods.Macro=o.default.Macro,e.ActionMethods.Toggle=function(t,e){for(var Q,r=[];\"\\\\endtoggle\"!==(Q=t.GetArgument(e));)r.push(new T.default(Q,t.stack.env,t.configuration).mml());t.Push(t.create(\"node\",\"maction\",r,{actiontype:\"toggle\"}))},e.ActionMethods.Mathtip=function(t,e){var Q=t.ParseArg(e),r=t.ParseArg(e);t.Push(t.create(\"node\",\"maction\",[Q,r],{actiontype:\"tooltip\"}))},new n.CommandMap(\"action-macros\",{toggle:\"Toggle\",mathtip:\"Mathtip\",texttip:[\"Macro\",\"\\\\mathtip{#1}{\\\\text{#2}}\",2]},e.ActionMethods),e.ActionConfiguration=r.Configuration.create(\"action\",{handler:{macro:[\"action-macros\"]}})},function(t,e,Q){\"use strict\";var r,T,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AmsConfiguration=e.AmsTags=void 0;var o=Q(2),i=Q(134),a=Q(20),s=Q(34);Q(284);var l=Q(3),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(a.AbstractTags);e.AmsTags=c;e.AmsConfiguration=o.Configuration.create(\"ams\",{handler:{delimiter:[\"AMSsymbols-delimiter\",\"AMSmath-delimiter\"],macro:[\"AMSsymbols-mathchar0mi\",\"AMSsymbols-mathchar0m0\",\"AMSsymbols-delimiter\",\"AMSsymbols-macros\",\"AMSmath-mathchar0mo\",\"AMSmath-macros\",\"AMSmath-delimiter\"],environment:[\"AMSmath-environment\"]},items:(T={},T[i.MultlineItem.prototype.kind]=i.MultlineItem,T),tags:{ams:c},init:function(t){new l.CommandMap(s.NEW_OPS,{},{}),t.append(o.Configuration.local({handler:{macro:[s.NEW_OPS]},priority:-1}))}})},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.MultlineItem=void 0;var n=Q(27),o=Q(9),i=Q(8),a=Q(5),s=Q(13),l=function(t){function e(e){for(var Q=[],r=1;r<arguments.length;r++)Q[r-1]=arguments[r];var T=t.call(this,e)||this;return T.factory.configuration.tags.start(\"multline\",!0,Q[0]),T}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"multline\"},enumerable:!1,configurable:!0}),e.prototype.EndEntry=function(){this.table.length&&o.default.fixInitialMO(this.factory.configuration,this.nodes);var t=this.getProperty(\"shove\"),e=this.create(\"node\",\"mtd\",this.nodes,t?{columnalign:t}:{});this.setProperty(\"shove\",null),this.row.push(e),this.Clear()},e.prototype.EndRow=function(){if(1!==this.row.length)throw new a.default(\"MultlineRowsOneCol\",\"The rows within the %1 environment must have exactly one column\",\"multline\");var t=this.create(\"node\",\"mtr\",this.row);this.table.push(t),this.row=[]},e.prototype.EndTable=function(){if(t.prototype.EndTable.call(this),this.table.length){var e=this.table.length-1,Q=-1;i.default.getAttribute(i.default.getChildren(this.table[0])[0],\"columnalign\")||i.default.setAttribute(i.default.getChildren(this.table[0])[0],\"columnalign\",s.TexConstant.Align.LEFT),i.default.getAttribute(i.default.getChildren(this.table[e])[0],\"columnalign\")||i.default.setAttribute(i.default.getChildren(this.table[e])[0],\"columnalign\",s.TexConstant.Align.RIGHT);var r=this.factory.configuration.tags.getTag();if(r){Q=this.arraydef.side===s.TexConstant.Align.LEFT?0:this.table.length-1;var T=this.table[Q],n=this.create(\"node\",\"mlabeledtr\",[r].concat(i.default.getChildren(T)));i.default.copyAttributes(T,n),this.table[Q]=n}}this.factory.configuration.tags.end()},e}(n.ArrayItem);e.MultlineItem=l},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AmsCdConfiguration=void 0;var r=Q(2);Q(285),e.AmsCdConfiguration=r.Configuration.create(\"amscd\",{handler:{character:[\"amscd_special\"],macro:[\"amscd_macros\"],environment:[\"amscd_environment\"]},options:{amscd:{colspace:\"5pt\",rowspace:\"5pt\",harrowsize:\"2.75em\",varrowsize:\"1.75em\",hideHorizontalLabels:!1}}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(12),T=Q(42),n=Q(0),o=Q(8),i={CD:function(t,e){t.Push(e);var Q=t.itemFactory.create(\"array\"),r=t.configuration.options.amscd;return Q.setProperties({minw:t.stack.env.CD_minw||r.harrowsize,minh:t.stack.env.CD_minh||r.varrowsize}),Q.arraydef={columnalign:\"center\",columnspacing:r.colspace,rowspacing:r.rowspace,displaystyle:!0},Q},arrow:function(t,e){var Q=t.string.charAt(t.i);if(!Q.match(/[><VA.|=]/))return T.Other(t,e);t.i++;var a=t.stack.Top();a.isKind(\"array\")&&!a.Size()||(i.cell(t,e),a=t.stack.Top());for(var s,l=a,c=l.table.length%2==1,u=(l.row.length+(c?0:1))%2;u;)i.cell(t,e),u--;var p={minsize:l.getProperty(\"minw\"),stretchy:!0},h={minsize:l.getProperty(\"minh\"),stretchy:!0,symmetric:!0,lspace:0,rspace:0};if(\".\"===Q);else if(\"|\"===Q)s=t.create(\"token\",\"mo\",h,\"\\u2225\");else if(\"=\"===Q)s=t.create(\"token\",\"mo\",p,\"=\");else{var f={\">\":\"\\u2192\",\"<\":\"\\u2190\",V:\"\\u2193\",A:\"\\u2191\"}[Q],d=t.GetUpTo(e+Q,Q),L=t.GetUpTo(e+Q,Q);if(\">\"===Q||\"<\"===Q){if(s=t.create(\"token\",\"mo\",p,f),d||(d=\"\\\\kern \"+l.getProperty(\"minw\")),d||L){var H={width:\".67em\",lspace:\".33em\"};if(s=t.create(\"node\",\"munderover\",[s]),d){var m=new r.default(d,t.stack.env,t.configuration).mml(),y=t.create(\"node\",\"mpadded\",[m],H);o.default.setAttribute(y,\"voffset\",\".1em\"),o.default.setChild(s,s.over,y)}if(L){var v=new r.default(L,t.stack.env,t.configuration).mml();o.default.setChild(s,s.under,t.create(\"node\",\"mpadded\",[v],H))}t.configuration.options.amscd.hideHorizontalLabels&&(s=t.create(\"node\",\"mpadded\",s,{depth:0,height:\".67em\"}))}}else{var g=t.create(\"token\",\"mo\",h,f);s=g,(d||L)&&(s=t.create(\"node\",\"mrow\"),d&&o.default.appendChildren(s,[new r.default(\"\\\\scriptstyle\\\\llap{\"+d+\"}\",t.stack.env,t.configuration).mml()]),g.texClass=n.TEXCLASS.ORD,o.default.appendChildren(s,[g]),L&&o.default.appendChildren(s,[new r.default(\"\\\\scriptstyle\\\\rlap{\"+L+\"}\",t.stack.env,t.configuration).mml()]))}}s&&t.Push(s),i.cell(t,e)},cell:function(t,e){var Q=t.stack.Top();(Q.table||[]).length%2==0&&0===(Q.row||[]).length&&t.Push(t.create(\"node\",\"mpadded\",[],{height:\"8.5pt\",depth:\"2pt\"})),t.Push(t.itemFactory.create(\"cell\").setProperties({isEntry:!0,name:e}))},minCDarrowwidth:function(t,e){t.stack.env.CD_minw=t.GetDimen(e)},minCDarrowheight:function(t,e){t.stack.env.CD_minh=t.GetDimen(e)}};e.default=i},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BboxConfiguration=e.BboxMethods=void 0;var r=Q(2),T=Q(3),n=Q(5);e.BboxMethods={},e.BboxMethods.BBox=function(t,e){for(var Q,r,T,a=t.GetBrackets(e,\"\"),s=t.ParseArg(e),l=a.split(/,/),c=0,u=l.length;c<u;c++){var p=l[c].trim(),h=p.match(/^(\\.\\d+|\\d+(\\.\\d*)?)(pt|em|ex|mu|px|in|cm|mm)$/);if(h){if(Q)throw new n.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Padding\",e);var f=i(h[1]+h[3]);f&&(Q={height:\"+\"+f,depth:\"+\"+f,lspace:f,width:\"+\"+2*parseInt(h[1],10)+h[3]})}else if(p.match(/^([a-z0-9]+|\\#[0-9a-f]{6}|\\#[0-9a-f]{3})$/i)){if(r)throw new n.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Background\",e);r=p}else if(p.match(/^[-a-z]+:/i)){if(T)throw new n.default(\"MultipleBBoxProperty\",\"%1 specified twice in %2\",\"Style\",e);T=o(p)}else if(\"\"!==p)throw new n.default(\"InvalidBBoxProperty\",'\"%1\" doesn\\'t look like a color, a padding dimension, or a style',p)}Q&&(s=t.create(\"node\",\"mpadded\",[s],Q)),(r||T)&&(Q={},r&&Object.assign(Q,{mathbackground:r}),T&&Object.assign(Q,{style:T}),s=t.create(\"node\",\"mstyle\",[s],Q)),t.Push(s)};var o=function(t){return t},i=function(t){return t};new T.CommandMap(\"bbox\",{bbox:\"BBox\"},e.BboxMethods),e.BboxConfiguration=r.Configuration.create(\"bbox\",{handler:{macro:[\"bbox\"]}})},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.BoldsymbolConfiguration=e.rewriteBoldTokens=e.createBoldToken=e.BoldsymbolMethods=void 0;var T=Q(2),n=Q(8),o=Q(13),i=Q(3),a=Q(41),s={};function l(t,e,Q,r){var T=a.NodeFactory.createToken(t,e,Q,r);return\"mtext\"!==e&&t.configuration.parser.stack.env.boldsymbol&&(n.default.setProperty(T,\"fixBold\",!0),t.configuration.addNode(\"fixBold\",T)),T}function c(t){var e,Q;try{for(var T=r(t.data.getList(\"fixBold\")),i=T.next();!i.done;i=T.next()){var a=i.value;if(n.default.getProperty(a,\"fixBold\")){var l=n.default.getAttribute(a,\"mathvariant\");null==l?n.default.setAttribute(a,\"mathvariant\",o.TexConstant.Variant.BOLD):n.default.setAttribute(a,\"mathvariant\",s[l]||l),n.default.removeProperties(a,\"fixBold\")}}}catch(t){e={error:t}}finally{try{i&&!i.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}}s[o.TexConstant.Variant.NORMAL]=o.TexConstant.Variant.BOLD,s[o.TexConstant.Variant.ITALIC]=o.TexConstant.Variant.BOLDITALIC,s[o.TexConstant.Variant.FRAKTUR]=o.TexConstant.Variant.BOLDFRAKTUR,s[o.TexConstant.Variant.SCRIPT]=o.TexConstant.Variant.BOLDSCRIPT,s[o.TexConstant.Variant.SANSSERIF]=o.TexConstant.Variant.BOLDSANSSERIF,s[\"-tex-calligraphic\"]=\"-tex-bold-calligraphic\",s[\"-tex-oldstyle\"]=\"-tex-bold-oldstyle\",e.BoldsymbolMethods={},e.BoldsymbolMethods.Boldsymbol=function(t,e){var Q=t.stack.env.boldsymbol;t.stack.env.boldsymbol=!0;var r=t.ParseArg(e);t.stack.env.boldsymbol=Q,t.Push(r)},new i.CommandMap(\"boldsymbol\",{boldsymbol:\"Boldsymbol\"},e.BoldsymbolMethods),e.createBoldToken=l,e.rewriteBoldTokens=c,e.BoldsymbolConfiguration=T.Configuration.create(\"boldsymbol\",{handler:{macro:[\"boldsymbol\"]},nodes:{token:l},postprocessors:[c]})},function(t,e,Q){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.BraketConfiguration=void 0;var T=Q(2),n=Q(140);Q(286),e.BraketConfiguration=T.Configuration.create(\"braket\",{handler:{character:[\"Braket-characters\"],macro:[\"Braket-macros\"]},items:(r={},r[n.BraketItem.prototype.kind]=n.BraketItem,r)})},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BraketItem=void 0;var n=Q(22),o=Q(0),i=Q(9),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"braket\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){return e.isKind(\"close\")?[[this.factory.create(\"mml\",this.toMml())],!0]:e.isKind(\"mml\")?(this.Push(e.toMml()),this.getProperty(\"single\")?[[this.toMml()],!0]:n.BaseItem.fail):t.prototype.checkItem.call(this,e)},e.prototype.toMml=function(){var e=t.prototype.toMml.call(this),Q=this.getProperty(\"open\"),r=this.getProperty(\"close\");if(this.getProperty(\"stretchy\"))return i.default.fenced(this.factory.configuration,Q,e,r);var T={fence:!0,stretchy:!1,symmetric:!0,texClass:o.TEXCLASS.OPEN},n=this.create(\"token\",\"mo\",T,Q);T.texClass=o.TEXCLASS.CLOSE;var a=this.create(\"token\",\"mo\",T,r);return this.create(\"node\",\"mrow\",[n,e,a],{open:Q,close:r,texClass:o.TEXCLASS.INNER})},e}(n.BaseItem);e.BraketItem=a},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(16),T=Q(0),n=Q(5),o={};o.Macro=r.default.Macro,o.Braket=function(t,e,Q,r,T,o){var i=t.GetNext();if(\"\"===i)throw new n.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);var a=!0;\"{\"===i&&(t.i++,a=!1),t.Push(t.itemFactory.create(\"braket\").setProperties({barmax:o,barcount:0,open:Q,close:r,stretchy:T,single:a}))},o.Bar=function(t,e){var Q=\"|\"===e?\"|\":\"\\u2225\",r=t.stack.Top();if(\"braket\"!==r.kind||r.getProperty(\"barcount\")>=r.getProperty(\"barmax\")){var n=t.create(\"token\",\"mo\",{texClass:T.TEXCLASS.ORD,stretchy:!1},Q);t.Push(n)}else{if(\"|\"===Q&&\"|\"===t.GetNext()&&(t.i++,Q=\"\\u2225\"),r.getProperty(\"stretchy\")){var o=t.create(\"node\",\"TeXAtom\",[],{texClass:T.TEXCLASS.CLOSE});t.Push(o),r.setProperty(\"barcount\",r.getProperty(\"barcount\")+1),o=t.create(\"token\",\"mo\",{stretchy:!0,braketbar:!0},Q),t.Push(o),o=t.create(\"node\",\"TeXAtom\",[],{texClass:T.TEXCLASS.OPEN}),t.Push(o)}else{var i=t.create(\"token\",\"mo\",{stretchy:!1,braketbar:!0},Q);t.Push(i)}}},e.default=o},function(t,e,Q){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.BussproofsConfiguration=void 0;var T=Q(2),n=Q(143),o=Q(43);Q(287),e.BussproofsConfiguration=T.Configuration.create(\"bussproofs\",{handler:{macro:[\"Bussproofs-macros\"],environment:[\"Bussproofs-environments\"]},items:(r={},r[n.ProofTreeItem.prototype.kind]=n.ProofTreeItem,r),preprocessors:[[o.saveDocument,1]],postprocessors:[[o.clearDocument,3],[o.makeBsprAttributes,2],[o.balanceRules,1]]})},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.ProofTreeItem=void 0;var n=Q(5),o=Q(22),i=Q(85),a=Q(43),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.leftLabel=null,e.rigthLabel=null,e.innerStack=new i.default(e.factory,{},!0),e}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"proofTree\"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){if(t.isKind(\"end\")&&\"prooftree\"===t.getName()){var e=this.toMml();return a.setProperty(e,\"proof\",!0),[[this.factory.create(\"mml\",e),t],!0]}if(t.isKind(\"stop\"))throw new n.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return this.innerStack.Push(t),o.BaseItem.fail},e.prototype.toMml=function(){var e=t.prototype.toMml.call(this),Q=this.innerStack.Top();if(Q.isKind(\"start\")&&!Q.Size())return e;this.innerStack.Push(this.factory.create(\"stop\"));var r=this.innerStack.Top().toMml();return this.create(\"node\",\"mrow\",[r,e],{})},e}(o.BaseItem);e.ProofTreeItem=s},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},T=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(r(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0});var n=Q(5),o=Q(12),i=Q(9),a=Q(43),s={Prooftree:function(t,e){return t.Push(e),t.itemFactory.create(\"proofTree\").setProperties({name:e.getName(),line:\"solid\",currentLine:\"solid\",rootAtTop:!1})},Axiom:function(t,e){var Q=t.stack.Top();if(\"proofTree\"!==Q.kind)throw new n.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var r=l(t,t.GetArgument(e));a.setProperty(r,\"axiom\",!0),Q.Push(r)}},l=function(t,e){var Q=i.default.internalMath(t,i.default.trimSpaces(e),0);if(!Q[0].childNodes[0].childNodes.length)return t.create(\"node\",\"mrow\",[]);var r=t.create(\"node\",\"mspace\",[],{width:\".5ex\"}),n=t.create(\"node\",\"mspace\",[],{width:\".5ex\"});return t.create(\"node\",\"mrow\",T([r],Q,[n]))};function c(t,e,Q,r,T,n,o){var i,s,l,c,u=t.create(\"node\",\"mtr\",[t.create(\"node\",\"mtd\",[e],{})],{}),p=t.create(\"node\",\"mtr\",[t.create(\"node\",\"mtd\",Q,{})],{}),h=t.create(\"node\",\"mtable\",o?[p,u]:[u,p],{align:\"top 2\",rowlines:n,framespacing:\"0 0\"});if(a.setProperty(h,\"inferenceRule\",o?\"up\":\"down\"),r&&(i=t.create(\"node\",\"mpadded\",[r],{height:\"+.5em\",width:\"+.5em\",voffset:\"-.15em\"}),a.setProperty(i,\"prooflabel\",\"left\")),T&&(s=t.create(\"node\",\"mpadded\",[T],{height:\"+.5em\",width:\"+.5em\",voffset:\"-.15em\"}),a.setProperty(s,\"prooflabel\",\"right\")),r&&T)l=[i,h,s],c=\"both\";else if(r)l=[i,h],c=\"left\";else{if(!T)return h;l=[h,s],c=\"right\"}return h=t.create(\"node\",\"mrow\",l),a.setProperty(h,\"labelledRule\",c),h}function u(t,e){if(\"$\"!==t.GetNext())throw new n.default(\"IllegalUseOfCommand\",\"Use of %1 does not match it's definition.\",e);t.i++;var Q=t.GetUpTo(e,\"$\");if(-1===Q.indexOf(\"\\\\fCenter\"))throw new n.default(\"IllegalUseOfCommand\",\"Missing \\\\fCenter in %1.\",e);var T=r(Q.split(\"\\\\fCenter\"),2),i=T[0],s=T[1],l=new o.default(i,t.stack.env,t.configuration).mml(),c=new o.default(s,t.stack.env,t.configuration).mml(),u=new o.default(\"\\\\fCenter\",t.stack.env,t.configuration).mml(),p=t.create(\"node\",\"mtd\",[l],{}),h=t.create(\"node\",\"mtd\",[u],{}),f=t.create(\"node\",\"mtd\",[c],{}),d=t.create(\"node\",\"mtr\",[p,h,f],{}),L=t.create(\"node\",\"mtable\",[d],{columnspacing:\".5ex\",columnalign:\"center 2\"});return a.setProperty(L,\"sequent\",!0),t.configuration.addNode(\"sequent\",d),L}s.Inference=function(t,e,Q){var r=t.stack.Top();if(\"proofTree\"!==r.kind)throw new n.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");if(r.Size()<Q)throw new n.default(\"BadProofTree\",\"Proof tree badly specified.\");var T=r.getProperty(\"rootAtTop\"),o=1!==Q||r.Peek()[0].childNodes.length?Q:0,i=[];do{i.length&&i.unshift(t.create(\"node\",\"mtd\",[],{})),i.unshift(t.create(\"node\",\"mtd\",[r.Pop()],{rowalign:T?\"top\":\"bottom\"})),Q--}while(Q>0);var s=t.create(\"node\",\"mtr\",i,{}),u=t.create(\"node\",\"mtable\",[s],{framespacing:\"0 0\"}),p=l(t,t.GetArgument(e)),h=r.getProperty(\"currentLine\");h!==r.getProperty(\"line\")&&r.setProperty(\"currentLine\",r.getProperty(\"line\"));var f=c(t,u,[p],r.getProperty(\"left\"),r.getProperty(\"right\"),h,T);r.setProperty(\"left\",null),r.setProperty(\"right\",null),a.setProperty(f,\"inference\",o),t.configuration.addNode(\"inference\",f),r.Push(f)},s.Label=function(t,e,Q){var r=t.stack.Top();if(\"proofTree\"!==r.kind)throw new n.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var T=i.default.internalMath(t,t.GetArgument(e),0),o=T.length>1?t.create(\"node\",\"mrow\",T,{}):T[0];r.setProperty(Q,o)},s.SetLine=function(t,e,Q,r){var T=t.stack.Top();if(\"proofTree\"!==T.kind)throw new n.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");T.setProperty(\"currentLine\",Q),r&&T.setProperty(\"line\",Q)},s.RootAtTop=function(t,e,Q){var r=t.stack.Top();if(\"proofTree\"!==r.kind)throw new n.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");r.setProperty(\"rootAtTop\",Q)},s.AxiomF=function(t,e){var Q=t.stack.Top();if(\"proofTree\"!==Q.kind)throw new n.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");var r=u(t,e);a.setProperty(r,\"axiom\",!0),Q.Push(r)},s.FCenter=function(t,e){},s.InferenceF=function(t,e,Q){var r=t.stack.Top();if(\"proofTree\"!==r.kind)throw new n.default(\"IllegalProofCommand\",\"Proof commands only allowed in prooftree environment.\");if(r.Size()<Q)throw new n.default(\"BadProofTree\",\"Proof tree badly specified.\");var T=r.getProperty(\"rootAtTop\"),o=1!==Q||r.Peek()[0].childNodes.length?Q:0,i=[];do{i.length&&i.unshift(t.create(\"node\",\"mtd\",[],{})),i.unshift(t.create(\"node\",\"mtd\",[r.Pop()],{rowalign:T?\"top\":\"bottom\"})),Q--}while(Q>0);var s=t.create(\"node\",\"mtr\",i,{}),l=t.create(\"node\",\"mtable\",[s],{framespacing:\"0 0\"}),p=u(t,e),h=r.getProperty(\"currentLine\");h!==r.getProperty(\"line\")&&r.setProperty(\"currentLine\",r.getProperty(\"line\"));var f=c(t,l,[p],r.getProperty(\"left\"),r.getProperty(\"right\"),h,T);r.setProperty(\"left\",null),r.setProperty(\"right\",null),a.setProperty(f,\"inference\",o),t.configuration.addNode(\"inference\",f),r.Push(f)},e.default=s},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CancelConfiguration=e.CancelMethods=void 0;var r=Q(2),T=Q(13),n=Q(3),o=Q(9),i=Q(87);e.CancelMethods={},e.CancelMethods.Cancel=function(t,e,Q){var r=t.GetBrackets(e,\"\"),T=t.ParseArg(e),n=o.default.keyvalOptions(r,i.ENCLOSE_OPTIONS);n.notation=Q,t.Push(t.create(\"node\",\"menclose\",[T],n))},e.CancelMethods.CancelTo=function(t,e){var Q=t.GetBrackets(e,\"\"),r=t.ParseArg(e),n=t.ParseArg(e),a=o.default.keyvalOptions(Q,i.ENCLOSE_OPTIONS);a.notation=[T.TexConstant.Notation.UPDIAGONALSTRIKE,T.TexConstant.Notation.UPDIAGONALARROW,T.TexConstant.Notation.NORTHEASTARROW].join(\" \"),r=t.create(\"node\",\"mpadded\",[r],{depth:\"-.1em\",height:\"+.1em\",voffset:\".1em\"}),t.Push(t.create(\"node\",\"msup\",[t.create(\"node\",\"menclose\",[n],a),r]))},new n.CommandMap(\"cancel\",{cancel:[\"Cancel\",T.TexConstant.Notation.UPDIAGONALSTRIKE],bcancel:[\"Cancel\",T.TexConstant.Notation.DOWNDIAGONALSTRIKE],xcancel:[\"Cancel\",T.TexConstant.Notation.UPDIAGONALSTRIKE+\" \"+T.TexConstant.Notation.DOWNDIAGONALSTRIKE],cancelto:\"CancelTo\"},e.CancelMethods),e.CancelConfiguration=r.Configuration.create(\"cancel\",{handler:{macro:[\"cancel\"]}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorConfiguration=void 0;var r=Q(3),T=Q(2),n=Q(147),o=Q(148);new r.CommandMap(\"color\",{color:\"Color\",textcolor:\"TextColor\",definecolor:\"DefineColor\",colorbox:\"ColorBox\",fcolorbox:\"FColorBox\"},n.ColorMethods);e.ColorConfiguration=T.Configuration.create(\"color\",{handler:{macro:[\"color\"]},options:{color:{padding:\"5px\",borderWidth:\"2px\"}},config:function(t,e){e.parseOptions.packageData.set(\"color\",{model:new o.ColorModel})}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorMethods=void 0;var r=Q(8),T=Q(9);function n(t){var e=\"+\"+t,Q=t.replace(/^.*?([a-z]*)$/,\"$1\");return{width:\"+\"+2*parseFloat(e)+Q,height:e,depth:e,lspace:t}}e.ColorMethods={},e.ColorMethods.Color=function(t,e){var Q=t.GetBrackets(e,\"\"),r=t.GetArgument(e),T=t.configuration.packageData.get(\"color\").model.getColor(Q,r),n=t.itemFactory.create(\"style\").setProperties({styles:{mathcolor:T}});t.stack.env.color=T,t.Push(n)},e.ColorMethods.TextColor=function(t,e){var Q=t.GetBrackets(e,\"\"),r=t.GetArgument(e),T=t.configuration.packageData.get(\"color\").model.getColor(Q,r),n=t.stack.env.color;t.stack.env.color=T;var o=t.ParseArg(e);n?t.stack.env.color=n:delete t.stack.env.color;var i=t.create(\"node\",\"mstyle\",[o],{mathcolor:T});t.Push(i)},e.ColorMethods.DefineColor=function(t,e){var Q=t.GetArgument(e),r=t.GetArgument(e),T=t.GetArgument(e);t.configuration.packageData.get(\"color\").model.defineColor(r,Q,T)},e.ColorMethods.ColorBox=function(t,e){var Q=t.GetArgument(e),o=T.default.internalMath(t,t.GetArgument(e)),i=t.configuration.packageData.get(\"color\").model,a=t.create(\"node\",\"mpadded\",o,{mathbackground:i.getColor(\"named\",Q)});r.default.setProperties(a,n(t.options.color.padding)),t.Push(a)},e.ColorMethods.FColorBox=function(t,e){var Q=t.GetArgument(e),o=t.GetArgument(e),i=T.default.internalMath(t,t.GetArgument(e)),a=t.options.color,s=t.configuration.packageData.get(\"color\").model,l=t.create(\"node\",\"mpadded\",i,{mathbackground:s.getColor(\"named\",o),style:\"border: \"+a.borderWidth+\" solid \"+s.getColor(\"named\",Q)});r.default.setProperties(l,n(a.padding)),t.Push(l)}},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorModel=void 0;var T=Q(5),n=Q(149),o=new Map,i=function(){function t(){this.userColors=new Map}return t.prototype.normalizeColor=function(t,e){if(!t||\"named\"===t)return e;if(o.has(t))return o.get(t)(e);throw new T.default(\"UndefinedColorModel\",\"Color model '%1' not defined\",t)},t.prototype.getColor=function(t,e){return t&&\"named\"!==t?this.normalizeColor(t,e):this.getColorByName(e)},t.prototype.getColorByName=function(t){return this.userColors.has(t)?this.userColors.get(t):n.COLORS.has(t)?n.COLORS.get(t):t},t.prototype.defineColor=function(t,e,Q){var r=this.normalizeColor(t,Q);this.userColors.set(e,r)},t}();e.ColorModel=i,o.set(\"rgb\",(function(t){var e,Q,n=t.trim().split(/\\s*,\\s*/),o=\"#\";if(3!==n.length)throw new T.default(\"ModelArg1\",\"Color values for the %1 model require 3 numbers\",\"rgb\");try{for(var i=r(n),a=i.next();!a.done;a=i.next()){var s=a.value;if(!s.match(/^(\\d+(\\.\\d*)?|\\.\\d+)$/))throw new T.default(\"InvalidDecimalNumber\",\"Invalid decimal number\");var l=parseFloat(s);if(l<0||l>1)throw new T.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"rgb\",\"0\",\"1\");var c=Math.floor(255*l).toString(16);c.length<2&&(c=\"0\"+c),o+=c}}catch(t){e={error:t}}finally{try{a&&!a.done&&(Q=i.return)&&Q.call(i)}finally{if(e)throw e.error}}return o})),o.set(\"RGB\",(function(t){var e,Q,n=t.trim().split(/\\s*,\\s*/),o=\"#\";if(3!==n.length)throw new T.default(\"ModelArg1\",\"Color values for the %1 model require 3 numbers\",\"RGB\");try{for(var i=r(n),a=i.next();!a.done;a=i.next()){var s=a.value;if(!s.match(/^\\d+$/))throw new T.default(\"InvalidNumber\",\"Invalid number\");var l=parseInt(s);if(l>255)throw new T.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"RGB\",\"0\",\"255\");var c=l.toString(16);c.length<2&&(c=\"0\"+c),o+=c}}catch(t){e={error:t}}finally{try{a&&!a.done&&(Q=i.return)&&Q.call(i)}finally{if(e)throw e.error}}return o})),o.set(\"gray\",(function(t){if(!t.match(/^\\s*(\\d+(\\.\\d*)?|\\.\\d+)\\s*$/))throw new T.default(\"InvalidDecimalNumber\",\"Invalid decimal number\");var e=parseFloat(t);if(e<0||e>1)throw new T.default(\"ModelArg2\",\"Color values for the %1 model must be between %2 and %3\",\"gray\",\"0\",\"1\");var Q=Math.floor(255*e).toString(16);return Q.length<2&&(Q=\"0\"+Q),\"#\"+Q+Q+Q}))},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.COLORS=void 0,e.COLORS=new Map([[\"Apricot\",\"#FBB982\"],[\"Aquamarine\",\"#00B5BE\"],[\"Bittersweet\",\"#C04F17\"],[\"Black\",\"#221E1F\"],[\"Blue\",\"#2D2F92\"],[\"BlueGreen\",\"#00B3B8\"],[\"BlueViolet\",\"#473992\"],[\"BrickRed\",\"#B6321C\"],[\"Brown\",\"#792500\"],[\"BurntOrange\",\"#F7921D\"],[\"CadetBlue\",\"#74729A\"],[\"CarnationPink\",\"#F282B4\"],[\"Cerulean\",\"#00A2E3\"],[\"CornflowerBlue\",\"#41B0E4\"],[\"Cyan\",\"#00AEEF\"],[\"Dandelion\",\"#FDBC42\"],[\"DarkOrchid\",\"#A4538A\"],[\"Emerald\",\"#00A99D\"],[\"ForestGreen\",\"#009B55\"],[\"Fuchsia\",\"#8C368C\"],[\"Goldenrod\",\"#FFDF42\"],[\"Gray\",\"#949698\"],[\"Green\",\"#00A64F\"],[\"GreenYellow\",\"#DFE674\"],[\"JungleGreen\",\"#00A99A\"],[\"Lavender\",\"#F49EC4\"],[\"LimeGreen\",\"#8DC73E\"],[\"Magenta\",\"#EC008C\"],[\"Mahogany\",\"#A9341F\"],[\"Maroon\",\"#AF3235\"],[\"Melon\",\"#F89E7B\"],[\"MidnightBlue\",\"#006795\"],[\"Mulberry\",\"#A93C93\"],[\"NavyBlue\",\"#006EB8\"],[\"OliveGreen\",\"#3C8031\"],[\"Orange\",\"#F58137\"],[\"OrangeRed\",\"#ED135A\"],[\"Orchid\",\"#AF72B0\"],[\"Peach\",\"#F7965A\"],[\"Periwinkle\",\"#7977B8\"],[\"PineGreen\",\"#008B72\"],[\"Plum\",\"#92268F\"],[\"ProcessBlue\",\"#00B0F0\"],[\"Purple\",\"#99479B\"],[\"RawSienna\",\"#974006\"],[\"Red\",\"#ED1B23\"],[\"RedOrange\",\"#F26035\"],[\"RedViolet\",\"#A1246B\"],[\"Rhodamine\",\"#EF559F\"],[\"RoyalBlue\",\"#0071BC\"],[\"RoyalPurple\",\"#613F99\"],[\"RubineRed\",\"#ED017D\"],[\"Salmon\",\"#F69289\"],[\"SeaGreen\",\"#3FBC9D\"],[\"Sepia\",\"#671800\"],[\"SkyBlue\",\"#46C5DD\"],[\"SpringGreen\",\"#C6DC67\"],[\"Tan\",\"#DA9D76\"],[\"TealBlue\",\"#00AEB3\"],[\"Thistle\",\"#D883B7\"],[\"Turquoise\",\"#00B4CE\"],[\"Violet\",\"#58429B\"],[\"VioletRed\",\"#EF58A0\"],[\"White\",\"#FFFFFF\"],[\"WildStrawberry\",\"#EE2967\"],[\"Yellow\",\"#FFF200\"],[\"YellowGreen\",\"#98CC70\"],[\"YellowOrange\",\"#FAA21A\"]])},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorConfiguration=e.ColorV2Methods=void 0;var r=Q(3),T=Q(2);e.ColorV2Methods={Color:function(t,e){var Q=t.GetArgument(e),r=t.stack.env.color;t.stack.env.color=Q;var T=t.ParseArg(e);r?t.stack.env.color=r:delete t.stack.env.color;var n=t.create(\"node\",\"mstyle\",[T],{mathcolor:Q});t.Push(n)}},new r.CommandMap(\"colorv2\",{color:\"Color\"},e.ColorV2Methods),e.ColorConfiguration=T.Configuration.create(\"colorv2\",{handler:{macro:[\"colorv2\"]}})},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.ConfigMacrosConfiguration=void 0;var T=Q(2),n=Q(7),o=Q(3),i=Q(26),a=Q(88);e.ConfigMacrosConfiguration=T.Configuration.create(\"configmacros\",{init:function(t){new o.CommandMap(\"configmacros-map\",{},{}),t.append(T.Configuration.local({handler:{macro:[\"configmacros-map\"]},priority:3}))},config:function(t,e){var Q,T,n=e.parseOptions.handlers.retrieve(\"configmacros-map\"),o=e.parseOptions.options.macros;try{for(var s=r(Object.keys(o)),l=s.next();!l.done;l=s.next()){var c=l.value,u=\"string\"==typeof o[c]?[o[c]]:o[c],p=Array.isArray(u[2])?new i.Macro(c,a.default.MacroWithTemplate,u.slice(0,2).concat(u[2])):new i.Macro(c,a.default.Macro,u);n.add(c,p)}}catch(t){Q={error:t}}finally{try{l&&!l.done&&(T=s.return)&&T.call(s)}finally{if(Q)throw Q.error}}},options:{macros:n.expandable({})}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ExtpfeilConfiguration=e.ExtpfeilMethods=void 0;var r=Q(2),T=Q(3),n=Q(34),o=Q(44),i=Q(89),a=Q(5);e.ExtpfeilMethods={},e.ExtpfeilMethods.xArrow=n.AmsMethods.xArrow,e.ExtpfeilMethods.NewExtArrow=function(t,Q){var r=t.GetArgument(Q),T=t.GetArgument(Q),n=t.GetArgument(Q);if(!r.match(/^\\\\([a-z]+|.)$/i))throw new a.default(\"NewextarrowArg1\",\"First argument to %1 must be a control sequence name\",Q);if(!T.match(/^(\\d+),(\\d+)$/))throw new a.default(\"NewextarrowArg2\",\"Second argument to %1 must be two integers separated by a comma\",Q);if(!n.match(/^(\\d+|0x[0-9A-F]+)$/i))throw new a.default(\"NewextarrowArg3\",\"Third argument to %1 must be a unicode character number\",Q);r=r.substr(1);var i=T.split(\",\");o.default.addMacro(t,r,e.ExtpfeilMethods.xArrow,[parseInt(n),parseInt(i[0]),parseInt(i[1])])},new T.CommandMap(\"extpfeil\",{xtwoheadrightarrow:[\"xArrow\",8608,12,16],xtwoheadleftarrow:[\"xArrow\",8606,17,13],xmapsto:[\"xArrow\",8614,6,7],xlongequal:[\"xArrow\",61,7,7],xtofrom:[\"xArrow\",8644,12,12],Newextarrow:\"NewExtArrow\"},e.ExtpfeilMethods);e.ExtpfeilConfiguration=r.Configuration.create(\"extpfeil\",{handler:{macro:[\"extpfeil\"]},init:function(t){i.NewcommandConfiguration.init(t)}})},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.BeginEnvItem=void 0;var n=Q(5),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"beginEnv\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind(\"end\")){if(e.getName()!==this.getName())throw new n.default(\"EnvBadEnd\",\"\\\\begin{%1} ended with \\\\end{%2}\",this.getName(),e.getName());return[[this.factory.create(\"mml\",this.toMml())],!0]}if(e.isKind(\"stop\"))throw new n.default(\"EnvMissingEnd\",\"Missing \\\\end{%1}\",this.getName());return t.prototype.checkItem.call(this,e)},e}(Q(22).BaseItem);e.BeginEnvItem=o},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HtmlConfiguration=void 0;var r=Q(2),T=Q(3),n=Q(155);new T.CommandMap(\"html_macros\",{href:\"Href\",class:\"Class\",style:\"Style\",cssId:\"Id\"},n.default),e.HtmlConfiguration=r.Configuration.create(\"html\",{handler:{macro:[\"html_macros\"]}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(8),T={Href:function(t,e){var Q=t.GetArgument(e),T=n(t,e);r.default.setAttribute(T,\"href\",Q),t.Push(T)},Class:function(t,e){var Q=t.GetArgument(e),T=n(t,e),o=r.default.getAttribute(T,\"class\");o&&(Q=o+\" \"+Q),r.default.setAttribute(T,\"class\",Q),t.Push(T)},Style:function(t,e){var Q=t.GetArgument(e),T=n(t,e),o=r.default.getAttribute(T,\"style\");o&&(\";\"!==Q.charAt(Q.length-1)&&(Q+=\";\"),Q=o+\" \"+Q),r.default.setAttribute(T,\"style\",Q),t.Push(T)},Id:function(t,e){var Q=t.GetArgument(e),T=n(t,e);r.default.setAttribute(T,\"id\",Q),t.Push(T)}},n=function(t,e){var Q=t.ParseArg(e);if(!r.default.isInferred(Q))return Q;var T=r.default.getChildren(Q);if(1===T.length)return T[0];var n=t.create(\"node\",\"mrow\");return r.default.copyChildren(Q,n),r.default.copyAttributes(Q,n),n};e.default=T},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MhchemConfiguration=void 0;var r=Q(2),T=Q(3),n=Q(5),o=Q(16),i=Q(34),a=Q(289),s={};s.Macro=o.default.Macro,s.xArrow=i.AmsMethods.xArrow,s.Machine=function(t,e,Q){try{var r=t.GetArgument(e),T=a.mhchemParser.go(r,Q),o=a.texify.go(T);t.string=o+t.string.substr(t.i),t.i=0}catch(t){throw new n.default(t[0],t[1],t.slice(2))}},new T.CommandMap(\"mhchem\",{ce:[\"Machine\",\"ce\"],pu:[\"Machine\",\"pu\"],longrightleftharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle{-}\\\\!\\\\!{\\\\rightharpoonup}}{\\\\smash{{\\\\leftharpoondown}\\\\!\\\\!{-}}}\"],longRightleftharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle{-}\\\\!\\\\!{\\\\rightharpoonup}}{\\\\smash{\\\\leftharpoondown}}\"],longLeftrightharpoons:[\"Macro\",\"\\\\stackrel{\\\\textstyle\\\\vphantom{{-}}{\\\\rightharpoonup}}{\\\\smash{{\\\\leftharpoondown}\\\\!\\\\!{-}}}\"],longleftrightarrows:[\"Macro\",\"\\\\stackrel{\\\\longrightarrow}{\\\\smash{\\\\longleftarrow}\\\\Rule{0px}{.25em}{0px}}\"],tripledash:[\"Macro\",\"\\\\vphantom{-}\\\\raise2mu{\\\\kern2mu\\\\tiny\\\\text{-}\\\\kern1mu\\\\text{-}\\\\kern1mu\\\\text{-}\\\\kern2mu}\"],xrightarrow:[\"xArrow\",8594,5,6],xleftarrow:[\"xArrow\",8592,7,3],xleftrightarrow:[\"xArrow\",8596,6,6],xrightleftharpoons:[\"xArrow\",8652,5,7],xRightleftharpoons:[\"xArrow\",8652,5,7],xLeftrightharpoons:[\"xArrow\",8652,5,7]},s),e.MhchemConfiguration=r.Configuration.create(\"mhchem\",{handler:{macro:[\"mhchem\"]}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NoErrorsConfiguration=void 0;var r=Q(2);e.NoErrorsConfiguration=r.Configuration.create(\"noerrors\",{nodes:{error:function(t,e,Q,r){var T=t.create(\"token\",\"mtext\",{},r.replace(/\\n/g,\" \"));return t.create(\"node\",\"merror\",[T],{\"data-mjx-error\":e,title:e})}}})},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.NoUndefinedConfiguration=void 0;var T=Q(2);e.NoUndefinedConfiguration=T.Configuration.create(\"noundefined\",{fallback:{macro:function(t,e){var Q,T,n=t.create(\"text\",\"\\\\\"+e),o=t.options.noundefined||{},i={};try{for(var a=r([\"color\",\"background\",\"size\"]),s=a.next();!s.done;s=a.next()){var l=s.value;o[l]&&(i[\"math\"+l]=o[l])}}catch(t){Q={error:t}}finally{try{s&&!s.done&&(T=a.return)&&T.call(a)}finally{if(Q)throw Q.error}}t.Push(t.create(\"node\",\"mtext\",[],i,n))}},options:{noundefined:{color:\"red\",background:\"\",size:\"\"}},priority:3})},function(t,e,Q){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.PhysicsConfiguration=void 0;var T=Q(2),n=Q(160);Q(290),e.PhysicsConfiguration=T.Configuration.create(\"physics\",{handler:{macro:[\"Physics-automatic-bracing-macros\",\"Physics-vector-macros\",\"Physics-vector-chars\",\"Physics-derivative-macros\",\"Physics-expressions-macros\",\"Physics-quick-quad-macros\",\"Physics-bra-ket-macros\",\"Physics-matrix-macros\"],character:[\"Physics-characters\"],environment:[\"Physics-aux-envs\"]},items:(r={},r[n.AutoOpen.prototype.kind]=n.AutoOpen,r)})},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutoOpen=void 0;var n=Q(22),o=Q(9),i=Q(12),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"kind\",{get:function(){return\"auto open\"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"isOpen\",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.toMml=function(){var e=this.factory.configuration.parser,Q=this.getProperty(\"right\");if(this.getProperty(\"smash\")){var r=t.prototype.toMml.call(this),T=e.create(\"node\",\"mpadded\",[r],{height:0,depth:0});this.Clear(),this.Push(e.create(\"node\",\"TeXAtom\",[T]))}Q&&this.Push(new i.default(Q,e.stack.env,e.configuration).mml());var n=t.prototype.toMml.call(this);return o.default.fenced(this.factory.configuration,this.getProperty(\"open\"),n,this.getProperty(\"close\"),this.getProperty(\"big\"))},e.prototype.checkItem=function(e){var Q=e.getProperty(\"autoclose\");return Q&&Q===this.getProperty(\"close\")?this.getProperty(\"ignore\")?(this.Clear(),[[],!0]):[[this.toMml()],!0]:t.prototype.checkItem.call(this,e)},e}(n.BaseItem);e.AutoOpen=a},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0});var T=Q(16),n=Q(12),o=Q(5),i=Q(0),a=Q(9),s=Q(8),l=Q(41),c={},u={\"(\":\")\",\"[\":\"]\",\"{\":\"}\",\"|\":\"|\"},p=/^(b|B)i(g{1,2})$/;c.Quantity=function(t,e,Q,r,T,l,c){void 0===Q&&(Q=\"(\"),void 0===r&&(r=\")\"),void 0===T&&(T=!1),void 0===l&&(l=\"\"),void 0===c&&(c=\"\");var h=!!T&&t.GetStar(),f=t.GetNext(),d=t.i,L=null;if(\"\\\\\"===f){if(t.i++,!(L=t.GetCS()).match(p)){var H=t.create(\"node\",\"mrow\");return t.Push(a.default.fenced(t.configuration,Q,H,r)),void(t.i=d)}f=t.GetNext()}var m=u[f];if(T&&\"{\"!==f)throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);if(!m){H=t.create(\"node\",\"mrow\");return t.Push(a.default.fenced(t.configuration,Q,H,r)),void(t.i=d)}if(l){var y=t.create(\"token\",\"mi\",{texClass:i.TEXCLASS.OP},l);c&&s.default.setAttribute(y,\"mathvariant\",c),t.Push(t.itemFactory.create(\"fn\",y))}if(\"{\"===f){var v=t.GetArgument(e);return f=T?Q:\"\\\\{\",m=T?r:\"\\\\}\",v=h?f+\" \"+v+\" \"+m:L?\"\\\\\"+L+\"l\"+f+\" \"+v+\" \\\\\"+L+\"r\"+m:\"\\\\left\"+f+\" \"+v+\" \\\\right\"+m,void t.Push(new n.default(v,t.stack.env,t.configuration).mml())}T&&(f=Q,m=r),t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:f,close:m,big:L}))},c.Eval=function(t,e){var Q=t.GetStar(),r=t.GetNext();if(\"{\"!==r){if(\"(\"===r||\"[\"===r)return t.i++,void t.Push(t.itemFactory.create(\"auto open\").setProperties({open:r,close:\"|\",smash:Q,right:\"\\\\vphantom{\\\\int}\"}));throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS)}var T=t.GetArgument(e),n=\"\\\\left. \"+(Q?\"\\\\smash{\"+T+\"}\":T)+\" \\\\vphantom{\\\\int}\\\\right|\";t.string=t.string.slice(0,t.i)+n+t.string.slice(t.i)},c.Commutator=function(t,e,Q,r){void 0===Q&&(Q=\"[\"),void 0===r&&(r=\"]\");var T=t.GetStar(),i=t.GetNext(),a=null;if(\"\\\\\"===i){if(t.i++,!(a=t.GetCS()).match(p))throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);i=t.GetNext()}if(\"{\"!==i)throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",t.currentCS);var s=t.GetArgument(e)+\",\"+t.GetArgument(e);s=T?Q+\" \"+s+\" \"+r:a?\"\\\\\"+a+\"l\"+Q+\" \"+s+\" \\\\\"+a+\"r\"+r:\"\\\\left\"+Q+\" \"+s+\" \\\\right\"+r,t.Push(new n.default(s,t.stack.env,t.configuration).mml())};var h=[65,90],f=[97,122],d=[913,937],L=[945,969],H=[48,57];function m(t,e){return t>=e[0]&&t<=e[1]}function y(t,e,Q,r){var T=t.configuration.parser,n=l.NodeFactory.createToken(t,e,Q,r),o=r.codePointAt(0);return 1===r.length&&!T.stack.env.font&&T.stack.env.vectorFont&&(m(o,h)||m(o,f)||m(o,d)||m(o,H)||m(o,L)&&T.stack.env.vectorStar||s.default.getAttribute(n,\"accent\"))&&s.default.setAttribute(n,\"mathvariant\",T.stack.env.vectorFont),n}c.VectorBold=function(t,e){var Q=t.GetStar(),r=t.GetArgument(e),T=t.configuration.nodeFactory.get(\"token\"),o=t.stack.env.font;delete t.stack.env.font,t.configuration.nodeFactory.set(\"token\",y),t.stack.env.vectorFont=Q?\"bold-italic\":\"bold\",t.stack.env.vectorStar=Q;var i=new n.default(r,t.stack.env,t.configuration).mml();o&&(t.stack.env.font=o),delete t.stack.env.vectorFont,delete t.stack.env.vectorStar,t.configuration.nodeFactory.set(\"token\",T),t.Push(i)},c.StarMacro=function(t,e,Q){for(var r=[],T=3;T<arguments.length;T++)r[T-3]=arguments[T];var n=t.GetStar(),i=[];if(Q)for(var s=i.length;s<Q;s++)i.push(t.GetArgument(e));var l=r.join(n?\"*\":\"\");if(l=a.default.substituteArgs(t,i,l),t.string=a.default.addArgs(t,l,t.string.slice(t.i)),t.i=0,++t.macroCount>t.configuration.options.maxMacros)throw new o.default(\"MaxMacroSub1\",\"MathJax maximum macro substitution count exceeded; is there a recursive macro call?\")};var v=function(t,e,Q,r,T){var o=new n.default(r,t.stack.env,t.configuration).mml();t.Push(t.itemFactory.create(e,o));var i=t.GetNext(),a=u[i];if(a){var s=-1!==T.indexOf(i);if(\"{\"===i){var l=(s?\"\\\\left\\\\{\":\"\")+\" \"+t.GetArgument(Q)+\" \"+(s?\"\\\\right\\\\}\":\"\");return t.string=l+t.string.slice(t.i),void(t.i=0)}s&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:i,close:a})))}};function g(t,e,Q){var T=r(t,3),n=T[0],o=T[1],i=T[2];return e&&Q?\"\\\\left\\\\langle{\"+n+\"}\\\\middle\\\\vert{\"+o+\"}\\\\middle\\\\vert{\"+i+\"}\\\\right\\\\rangle\":e?\"\\\\langle{\"+n+\"}\\\\vert{\"+o+\"}\\\\vert{\"+i+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+n+\"}\\\\right\\\\vert{\"+o+\"}\\\\left\\\\vert{\"+i+\"}\\\\right\\\\rangle\"}c.OperatorApplication=function(t,e,Q){for(var r=[],T=3;T<arguments.length;T++)r[T-3]=arguments[T];v(t,\"fn\",e,Q,r)},c.VectorOperator=function(t,e,Q){for(var r=[],T=3;T<arguments.length;T++)r[T-3]=arguments[T];v(t,\"mml\",e,Q,r)},c.Expression=function(t,e,Q,r){void 0===Q&&(Q=!0),void 0===r&&(r=\"\"),r=r||e.slice(1);var T=Q?t.GetBrackets(e):null,o=t.create(\"token\",\"mi\",{texClass:i.TEXCLASS.OP},r);if(T){var a=new n.default(T,t.stack.env,t.configuration).mml();o=t.create(\"node\",\"msup\",[o,a])}t.Push(t.itemFactory.create(\"fn\",o)),\"(\"===t.GetNext()&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\"})))},c.Qqtext=function(t,e,Q){var r=(t.GetStar()?\"\":\"\\\\quad\")+\"\\\\text{\"+(Q||t.GetArgument(e))+\"}\\\\quad \";t.string=t.string.slice(0,t.i)+r+t.string.slice(t.i)},c.Differential=function(t,e,Q){var r=t.GetBrackets(e),T=null!=r?\"^{\"+r+\"}\":\" \",o=\"(\"===t.GetNext(),a=\"{\"===t.GetNext(),s=Q+T;if(o||a)if(a){s+=t.GetArgument(e);l=new n.default(s,t.stack.env,t.configuration).mml();t.Push(t.create(\"node\",\"TeXAtom\",[l],{texClass:i.TEXCLASS.OP}))}else t.Push(new n.default(s,t.stack.env,t.configuration).mml()),t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\"}));else{s+=t.GetArgument(e,!0)||\"\";var l=new n.default(s,t.stack.env,t.configuration).mml();t.Push(l)}},c.Derivative=function(t,e,Q,r){var T=t.GetStar(),o=t.GetBrackets(e),i=1,a=[];for(a.push(t.GetArgument(e));\"{\"===t.GetNext()&&i<Q;)a.push(t.GetArgument(e)),i++;var s=!1,l=\" \",c=\" \";Q>2&&a.length>2?(l=\"^{\"+(a.length-1)+\"}\",s=!0):null!=o&&(Q>2&&a.length>1&&(s=!0),c=l=\"^{\"+o+\"}\");for(var u=T?\"\\\\flatfrac\":\"\\\\frac\",p=a.length>1?a[0]:\"\",h=a.length>1?a[1]:a[0],f=\"\",d=2,L=void 0;L=a[d];d++)f+=r+\" \"+L;var H=u+\"{\"+r+l+p+\"}{\"+r+\" \"+h+c+\" \"+f+\"}\";t.Push(new n.default(H,t.stack.env,t.configuration).mml()),\"(\"===t.GetNext()&&(t.i++,t.Push(t.itemFactory.create(\"auto open\").setProperties({open:\"(\",close:\")\",ignore:s})))},c.Bra=function(t,e){var Q=t.GetStar(),r=t.GetArgument(e),T=\"\",o=!1,i=!1;if(\"\\\\\"===t.GetNext()){var a=t.i;t.i++;var s=t.GetCS(),l=t.lookup(\"macro\",s);l&&\"ket\"===l.symbol?(o=!0,a=t.i,i=t.GetStar(),\"{\"===t.GetNext()?T=t.GetArgument(s,!0):(t.i=a,i=!1)):t.i=a}var c=\"\";c=o?Q||i?\"\\\\langle{\"+r+\"}\\\\vert{\"+T+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+r+\"}\\\\middle\\\\vert{\"+T+\"}\\\\right\\\\rangle\":Q||i?\"\\\\langle{\"+r+\"}\\\\vert\":\"\\\\left\\\\langle{\"+r+\"}\\\\right\\\\vert{\"+T+\"}\",t.Push(new n.default(c,t.stack.env,t.configuration).mml())},c.Ket=function(t,e){var Q=t.GetStar(),r=t.GetArgument(e),T=Q?\"\\\\vert{\"+r+\"}\\\\rangle\":\"\\\\left\\\\vert{\"+r+\"}\\\\right\\\\rangle\";t.Push(new n.default(T,t.stack.env,t.configuration).mml())},c.BraKet=function(t,e){var Q=t.GetStar(),r=t.GetArgument(e),T=null;\"{\"===t.GetNext()&&(T=t.GetArgument(e,!0));var o=\"\";o=null==T?Q?\"\\\\langle{\"+r+\"}\\\\vert{\"+r+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+r+\"}\\\\middle\\\\vert{\"+r+\"}\\\\right\\\\rangle\":Q?\"\\\\langle{\"+r+\"}\\\\vert{\"+T+\"}\\\\rangle\":\"\\\\left\\\\langle{\"+r+\"}\\\\middle\\\\vert{\"+T+\"}\\\\right\\\\rangle\",t.Push(new n.default(o,t.stack.env,t.configuration).mml())},c.KetBra=function(t,e){var Q=t.GetStar(),r=t.GetArgument(e),T=null;\"{\"===t.GetNext()&&(T=t.GetArgument(e,!0));var o=\"\";o=null==T?Q?\"\\\\vert{\"+r+\"}\\\\rangle\\\\!\\\\langle{\"+r+\"}\\\\vert\":\"\\\\left\\\\vert{\"+r+\"}\\\\middle\\\\rangle\\\\!\\\\middle\\\\langle{\"+r+\"}\\\\right\\\\vert\":Q?\"\\\\vert{\"+r+\"}\\\\rangle\\\\!\\\\langle{\"+T+\"}\\\\vert\":\"\\\\left\\\\vert{\"+r+\"}\\\\middle\\\\rangle\\\\!\\\\middle\\\\langle{\"+T+\"}\\\\right\\\\vert\",t.Push(new n.default(o,t.stack.env,t.configuration).mml())},c.Expectation=function(t,e){var Q=t.GetStar(),r=Q&&t.GetStar(),T=t.GetArgument(e),o=null;\"{\"===t.GetNext()&&(o=t.GetArgument(e,!0));var i=T&&o?g([o,T,o],Q,r):Q?\"\\\\langle {\"+T+\"} \\\\rangle\":\"\\\\left\\\\langle {\"+T+\"} \\\\right\\\\rangle\";t.Push(new n.default(i,t.stack.env,t.configuration).mml())},c.MatrixElement=function(t,e){var Q=t.GetStar(),r=Q&&t.GetStar(),T=g([t.GetArgument(e),t.GetArgument(e),t.GetArgument(e)],Q,r);t.Push(new n.default(T,t.stack.env,t.configuration).mml())},c.MatrixQuantity=function(t,e,Q){var r=t.GetStar(),T=Q?\"smallmatrix\":\"array\",o=\"\",i=\"\",a=\"\";switch(t.GetNext()){case\"{\":o=t.GetArgument(e);break;case\"(\":t.i++,i=r?\"\\\\lgroup\":\"(\",a=r?\"\\\\rgroup\":\")\",o=t.GetUpTo(e,\")\");break;case\"[\":t.i++,i=\"[\",a=\"]\",o=t.GetUpTo(e,\"]\");break;case\"|\":t.i++,i=\"|\",a=\"|\",o=t.GetUpTo(e,\"|\");break;default:i=\"(\",a=\")\"}var s=(i?\"\\\\left\":\"\")+i+\"\\\\begin{\"+T+\"}{} \"+o+\"\\\\end{\"+T+\"}\"+(i?\"\\\\right\":\"\")+a;t.Push(new n.default(s,t.stack.env,t.configuration).mml())},c.IdentityMatrix=function(t,e){var Q=t.GetArgument(e),r=parseInt(Q,10);if(isNaN(r))throw new o.default(\"InvalidNumber\",\"Invalid number\");if(r<=1)return t.string=\"1\"+t.string.slice(t.i),void(t.i=0);for(var T=Array(r).fill(\"0\"),n=[],i=0;i<r;i++){var a=T.slice();a[i]=\"1\",n.push(a.join(\" & \"))}t.string=n.join(\"\\\\\\\\ \")+t.string.slice(t.i),t.i=0},c.XMatrix=function(t,e){var Q=t.GetStar(),r=t.GetArgument(e),T=t.GetArgument(e),n=t.GetArgument(e),i=parseInt(T,10),a=parseInt(n,10);if(isNaN(i)||isNaN(a)||a.toString()!==n||i.toString()!==T)throw new o.default(\"InvalidNumber\",\"Invalid number\");if(i=i<1?1:i,a=a<1?1:a,!Q){var s=Array(a).fill(r).join(\" & \"),l=Array(i).fill(s).join(\"\\\\\\\\ \");return t.string=l+t.string.slice(t.i),void(t.i=0)}var c=\"\";if(1===i&&1===a)c=r;else if(1===i){s=[];for(var u=1;u<=a;u++)s.push(r+\"_{\"+u+\"}\");c=s.join(\" & \")}else if(1===a){for(s=[],u=1;u<=i;u++)s.push(r+\"_{\"+u+\"}\");c=s.join(\"\\\\\\\\ \")}else{var p=[];for(u=1;u<=i;u++){s=[];for(var h=1;h<=a;h++)s.push(r+\"_{{\"+u+\"}{\"+h+\"}}\");p.push(s.join(\" & \"))}c=p.join(\"\\\\\\\\ \")}t.string=c+t.string.slice(t.i),t.i=0},c.PauliMatrix=function(t,e){var Q=t.GetArgument(e),r=Q.slice(1);switch(Q[0]){case\"0\":r+=\" 1 & 0\\\\\\\\ 0 & 1\";break;case\"1\":case\"x\":r+=\" 0 & 1\\\\\\\\ 1 & 0\";break;case\"2\":case\"y\":r+=\" 0 & -i\\\\\\\\ i & 0\";break;case\"3\":case\"z\":r+=\" 1 & 0\\\\\\\\ 0 & -1\"}t.string=r+t.string.slice(t.i),t.i=0},c.DiagonalMatrix=function(t,e,Q){if(\"{\"===t.GetNext()){var r=t.i;t.GetArgument(e);var T=t.i;t.i=r+1;for(var n=[],o=\"\",i=t.i;i<T;){try{o=t.GetUpTo(e,\",\")}catch(e){t.i=T,n.push(t.string.slice(i,T-1));break}if(t.i>=T){n.push(t.string.slice(i,T));break}i=t.i,n.push(o)}t.string=function(t,e){for(var Q=t.length,r=[],T=0;T<Q;T++)r.push(Array(e?Q-T:T+1).join(\"&\")+\"\\\\mqty{\"+t[T]+\"}\");return r.join(\"\\\\\\\\ \")}(n,Q)+t.string.slice(T),t.i=0}},c.AutoClose=function(t,e,Q){var r=t.create(\"token\",\"mo\",{stretchy:!1},e),T=t.itemFactory.create(\"mml\",r).setProperties({autoclose:e});t.Push(T)},c.Macro=T.default.Macro,c.NamedFn=T.default.NamedFn,c.Array=T.default.Array,e.default=c},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.TagFormatConfiguration=e.tagformatConfig=void 0;var n=Q(2),o=Q(20),i=0;function a(t,e){var Q=e.parseOptions.options.tags;\"base\"!==Q&&t.tags.hasOwnProperty(Q)&&o.TagsFactory.add(Q,t.tags[Q]);var r=function(t){function Q(){return null!==t&&t.apply(this,arguments)||this}return T(Q,t),Q.prototype.formatNumber=function(t){return e.parseOptions.options.tagformat.number(t)},Q.prototype.formatTag=function(t){return e.parseOptions.options.tagformat.tag(t)},Q.prototype.formatId=function(t){return e.parseOptions.options.tagformat.id(t)},Q.prototype.formatUrl=function(t,Q){return e.parseOptions.options.tagformat.url(t,Q)},Q}(o.TagsFactory.create(e.parseOptions.options.tags).constructor),n=\"configTags-\"+ ++i;o.TagsFactory.add(n,r),e.parseOptions.options.tags=n}e.tagformatConfig=a,e.TagFormatConfiguration=n.Configuration.create(\"tagformat\",{config:[a,10],options:{tagformat:{number:function(t){return t.toString()},tag:function(t){return\"(\"+t+\")\"},id:function(t){return\"mjx-eqn-\"+t.replace(/\\s/g,\"_\")},url:function(t,e){return e+\"#\"+encodeURIComponent(t)}}}})},function(t,e,Q){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.textBase=void 0;var T=Q(2),n=Q(86),o=Q(20),i=Q(27),a=Q(164),s=Q(90);function l(t,e,Q,r){var T=t.configuration.packageData.get(\"textmacros\");return t instanceof a.TextParser||(T.texParser=t),[new a.TextParser(e,r?{mathvariant:r}:{},T.parseOptions,Q).mml()]}Q(291),e.textBase=T.Configuration.local({handler:{character:[\"command\",\"text-special\"],macro:[\"text-macros\"]},fallback:{character:function(t,e){t.text+=e},macro:function(t,e){var Q=t.texParser,r=Q.lookup(\"macro\",e);r&&r._func!==s.TextMacrosMethods.Macro&&t.Error(\"MathMacro\",\"%1 is only supported in math mode\",\"\\\\\"+e),Q.parse(\"macro\",[r?t:Q,e])}},items:(r={},r[i.StartItem.prototype.kind]=i.StartItem,r[i.StopItem.prototype.kind]=i.StopItem,r[i.MmlItem.prototype.kind]=i.MmlItem,r[i.StyleItem.prototype.kind]=i.StyleItem,r)}),T.Configuration.create(\"textmacros\",{config:function(t,Q){var r=new T.ParserConfiguration([]);r.append(e.textBase),r.init();var i=new n.default(r,[]);i.options=Q.parseOptions.options,r.config(Q),o.TagsFactory.addTags(r.tags),i.tags=o.TagsFactory.getDefault(),i.tags.configuration=i,i.packageData=Q.parseOptions.packageData,i.packageData.set(\"textmacros\",{parseOptions:i,jax:Q,texParser:null}),i.options.internalMath=l},preprocessors:[function(t){var e=t.data.packageData.get(\"textmacros\");e.parseOptions.nodeFactory.setMmlFactory(e.jax.mmlFactory)}]})},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextParser=void 0;var a=Q(12),s=Q(5),l=Q(9),c=Q(0),u=Q(8),p=Q(27),h=function(t){function e(e,Q,r,T){var n=t.call(this,e,Q,r)||this;return n.level=T,n}return T(e,t),Object.defineProperty(e.prototype,\"texParser\",{get:function(){return this.configuration.packageData.get(\"textmacros\").texParser},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"tags\",{get:function(){return this.texParser.tags},enumerable:!1,configurable:!0}),e.prototype.mml=function(){return null!=this.level?this.create(\"node\",\"mstyle\",this.nodes,{displaystyle:!1,scriptlevel:this.level}):1===this.nodes.length?this.nodes[0]:this.create(\"node\",\"inferredMrow\",this.nodes)},e.prototype.Parse=function(){this.text=\"\",this.nodes=[],this.envStack=[],t.prototype.Parse.call(this)},e.prototype.saveText=function(){if(this.text){var t=this.stack.env.mathvariant,e=l.default.internalText(this,this.text,t?{mathvariant:t}:{});this.text=\"\",this.Push(e)}},e.prototype.Push=function(e){if(this.text&&this.saveText(),e instanceof p.StopItem)return t.prototype.Push.call(this,e);e instanceof p.StyleItem?this.stack.env.mathcolor=this.stack.env.color:e instanceof c.AbstractMmlNode&&(this.addAttributes(e),this.nodes.push(e))},e.prototype.PushMath=function(t){var e,Q,r=this.stack.env;try{for(var T=n([\"mathsize\",\"mathcolor\"]),o=T.next();!o.done;o=T.next()){var i=o.value;r[i]&&!t.attributes.getExplicit(i)&&(t.isToken||t.isKind(\"mstyle\")||(t=this.create(\"node\",\"mstyle\",[t])),u.default.setAttribute(t,i,r[i]))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}t.isKind(\"inferredMrow\")&&(t=this.create(\"node\",\"mrow\",t.childNodes)),this.nodes.push(t)},e.prototype.addAttributes=function(t){var e,Q,r=this.stack.env;if(t.isToken)try{for(var T=n([\"mathsize\",\"mathcolor\",\"mathvariant\"]),o=T.next();!o.done;o=T.next()){var i=o.value;r[i]&&!t.attributes.getExplicit(i)&&u.default.setAttribute(t,i,r[i])}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}},e.prototype.ParseTextArg=function(t,Q){return new e(this.GetArgument(t),Q=Object.assign(Object.assign({},this.stack.env),Q),this.configuration).mml()},e.prototype.ParseArg=function(t){return new e(this.GetArgument(t),this.stack.env,this.configuration).mml()},e.prototype.Error=function(t,e){for(var Q=[],r=2;r<arguments.length;r++)Q[r-2]=arguments[r];throw new(s.default.bind.apply(s.default,i([void 0,t,e],Q)))},e}(a.default);e.TextParser=h},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UnicodeConfiguration=e.UnicodeMethods=void 0;var r=Q(2),T=Q(5),n=Q(3),o=Q(9),i=Q(8),a=Q(19);e.UnicodeMethods={};var s={};e.UnicodeMethods.Unicode=function(t,e){var Q=t.GetBrackets(e),r=null,n=null;Q&&(Q.replace(/ /g,\"\").match(/^(\\d+(\\.\\d*)?|\\.\\d+),(\\d+(\\.\\d*)?|\\.\\d+)$/)?(r=Q.replace(/ /g,\"\").split(/,/),n=t.GetBrackets(e)):n=Q);var l=o.default.trimSpaces(t.GetArgument(e)).replace(/^0x/,\"x\");if(!l.match(/^(x[0-9A-Fa-f]+|[0-9]+)$/))throw new T.default(\"BadUnicode\",\"Argument to \\\\unicode must be a number\");var c=parseInt(l.match(/^x/)?\"0\"+l:l);s[c]?n||(n=s[c][2]):s[c]=[800,200,n,c],r&&(s[c][0]=Math.floor(1e3*parseFloat(r[0])),s[c][1]=Math.floor(1e3*parseFloat(r[1])));var u=t.stack.env.font,p={};n?(s[c][2]=p.fontfamily=n.replace(/'/g,\"'\"),u&&(u.match(/bold/)&&(p.fontweight=\"bold\"),u.match(/italic|-mathit/)&&(p.fontstyle=\"italic\"))):u&&(p.mathvariant=u);var h=t.create(\"token\",\"mtext\",p,a.numeric(l));i.default.setProperty(h,\"unicode\",!0),t.Push(h)},new n.CommandMap(\"unicode\",{unicode:\"Unicode\"},e.UnicodeMethods),e.UnicodeConfiguration=r.Configuration.create(\"unicode\",{handler:{macro:[\"unicode\"]}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.VerbConfiguration=e.VerbMethods=void 0;var r=Q(2),T=Q(13),n=Q(3),o=Q(5);e.VerbMethods={},e.VerbMethods.Verb=function(t,e){var Q=t.GetNext(),r=++t.i;if(\"\"===Q)throw new o.default(\"MissingArgFor\",\"Missing argument for %1\",e);for(;t.i<t.string.length&&t.string.charAt(t.i)!==Q;)t.i++;if(t.i===t.string.length)throw new o.default(\"NoClosingDelim\",\"Can't find closing delimiter for %1\",t.currentCS);var n=t.string.slice(r,t.i).replace(/ /g,\"\\xa0\");t.i++,t.Push(t.create(\"token\",\"mtext\",{mathvariant:T.TexConstant.Variant.MONOSPACE},n))},new n.CommandMap(\"verb\",{verb:\"Verb\"},e.VerbMethods),e.VerbConfiguration=r.Configuration.create(\"verb\",{handler:{macro:[\"verb\"]}})},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonOutputJax=void 0;var a=Q(55),s=Q(14),l=Q(7),c=Q(32),u=Q(84),p=Q(127),h=function(t){function e(e,Q,r){void 0===e&&(e=null),void 0===Q&&(Q=null),void 0===r&&(r=null);var T=this,n=o(l.separateOptions(e,r.OPTIONS),2),i=n[0],a=n[1];return(T=t.call(this,i)||this).factory=T.options.wrapperFactory||new Q,T.factory.jax=T,T.cssStyles=T.options.cssStyles||new p.CssStyles,T.font=T.options.font||new r(a),T.unknownCache=new Map,T}return T(e,t),e.prototype.typeset=function(t,e){this.setDocument(e);var Q=this.createNode();return this.toDOM(t,Q,e),Q},e.prototype.createNode=function(){var t=this.constructor.NAME;return this.html(\"mjx-container\",{class:\"MathJax\",jax:t})},e.prototype.setScale=function(t){var e=this.math.metrics.scale*this.options.scale;1!==e&&this.adaptor.setStyle(t,\"fontSize\",c.percent(e))},e.prototype.toDOM=function(t,e,Q){void 0===Q&&(Q=null),this.setDocument(Q),this.math=t,this.pxPerEm=t.metrics.ex/this.font.params.x_height,t.root.setTeXclass(null),this.setScale(e),this.nodeMap=new Map,this.container=e,this.processMath(t.root,e),this.nodeMap=null,this.executeFilters(this.postFilters,t,Q,e)},e.prototype.getBBox=function(t,e){this.setDocument(e),this.math=t,t.root.setTeXclass(null),this.nodeMap=new Map;var Q=this.factory.wrap(t.root).getBBox();return this.nodeMap=null,Q},e.prototype.getMetrics=function(t){var e,Q;this.setDocument(t);var r=this.adaptor,T=this.getMetricMaps(t);try{for(var n=i(t.math),o=n.next();!o.done;o=n.next()){var a=o.value,l=r.parent(a.start.node);if(a.state()<s.STATE.METRICS&&l){var c=T[a.display?1:0].get(l),u=c.em,p=c.ex,h=c.containerWidth,f=c.lineWidth,d=c.scale,L=c.family;a.setMetrics(u,p,h,f,d),this.options.mtextInheritFont&&(a.outputData.mtextFamily=L),this.options.merrorInheritFont&&(a.outputData.merrorFamily=L),a.state(s.STATE.METRICS)}}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}},e.prototype.getMetricsFor=function(t,e){var Q=this.options.mtextInheritFont||this.options.merrorInheritFont,r=this.getTestElement(t,e),T=this.measureMetrics(r,Q);return this.adaptor.remove(r),T},e.prototype.getMetricMaps=function(t){var e,Q,r,T,n,o,a,l,c,u,p=this.adaptor,h=[new Map,new Map];try{for(var f=i(t.math),d=f.next();!d.done;d=f.next()){var L=d.value;if((x=p.parent(L.start.node))&&L.state()<s.STATE.METRICS){var H=h[L.display?1:0];H.has(x)||H.set(x,this.getTestElement(x,L.display))}}}catch(t){e={error:t}}finally{try{d&&!d.done&&(Q=f.return)&&Q.call(f)}finally{if(e)throw e.error}}var m=this.options.mtextInheritFont||this.options.merrorInheritFont,y=[new Map,new Map];try{for(var v=i(y.keys()),g=v.next();!g.done;g=v.next()){var b=g.value;try{for(var M=(n=void 0,i(h[b].keys())),V=M.next();!V.done;V=M.next()){var x=V.value;y[b].set(x,this.measureMetrics(h[b].get(x),m))}}catch(t){n={error:t}}finally{try{V&&!V.done&&(o=M.return)&&o.call(M)}finally{if(n)throw n.error}}}}catch(t){r={error:t}}finally{try{g&&!g.done&&(T=v.return)&&T.call(v)}finally{if(r)throw r.error}}try{for(var O=i(y.keys()),_=O.next();!_.done;_=O.next()){b=_.value;try{for(var S=(c=void 0,i(h[b].values())),E=S.next();!E.done;E=S.next()){x=E.value;p.remove(x)}}catch(t){c={error:t}}finally{try{E&&!E.done&&(u=S.return)&&u.call(S)}finally{if(c)throw c.error}}}}catch(t){a={error:t}}finally{try{_&&!_.done&&(l=O.return)&&l.call(O)}finally{if(a)throw a.error}}return y},e.prototype.getTestElement=function(t,e){var Q=this.adaptor;if(!this.testInline){this.testInline=this.html(\"mjx-test\",{style:{display:\"inline-block\",width:\"100%\",\"font-style\":\"normal\",\"font-weight\":\"normal\",\"font-size\":\"100%\",\"font-size-adjust\":\"none\",\"text-indent\":0,\"text-transform\":\"none\",\"letter-spacing\":\"normal\",\"word-spacing\":\"normal\",overflow:\"hidden\",height:\"1px\",\"margin-right\":\"-1px\"}},[this.html(\"mjx-left-box\",{style:{display:\"inline-block\",width:0,float:\"left\"}}),this.html(\"mjx-ex-box\",{style:{position:\"absolute\",overflow:\"hidden\",width:\"1px\",height:\"60ex\"}}),this.html(\"mjx-right-box\",{style:{display:\"inline-block\",width:0,float:\"right\"}})]),this.testDisplay=Q.clone(this.testInline),Q.setStyle(this.testDisplay,\"display\",\"table\"),Q.setStyle(this.testDisplay,\"margin-right\",\"\"),Q.setStyle(Q.firstChild(this.testDisplay),\"display\",\"none\");var r=Q.lastChild(this.testDisplay);Q.setStyle(r,\"display\",\"table-cell\"),Q.setStyle(r,\"width\",\"10000em\"),Q.setStyle(r,\"float\",\"\")}return Q.append(t,Q.clone(e?this.testDisplay:this.testInline))},e.prototype.measureMetrics=function(t,e){var Q=this.adaptor,r=e?Q.fontFamily(t):\"\",T=Q.fontSize(t),n=Q.nodeSize(Q.childNode(t,1))[1]/60||T*this.options.exFactor;return{em:T,ex:n,containerWidth:\"table\"===Q.getStyle(t,\"display\")?Q.nodeSize(Q.lastChild(t))[0]-1:Q.nodeBBox(Q.lastChild(t)).left-Q.nodeBBox(Q.firstChild(t)).left-2,lineWidth:1e6,scale:Math.max(this.options.minScale,this.options.matchFontHeight?n/this.font.params.x_height/T:1),family:r}},e.prototype.styleSheet=function(t){var e,Q,r,T;if(this.setDocument(t),this.cssStyles.clear(),this.cssStyles.addStyles(this.constructor.commonStyles),\"getStyles\"in t)try{for(var n=i(t.getStyles()),o=n.next();!o.done;o=n.next()){var a=o.value;this.cssStyles.addStyles(a)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}try{for(var s=i(this.factory.getKinds()),l=s.next();!l.done;l=s.next()){var c=l.value;this.addClassStyles(this.factory.getNodeClass(c))}}catch(t){r={error:t}}finally{try{l&&!l.done&&(T=s.return)&&T.call(s)}finally{if(r)throw r.error}}return this.cssStyles.addStyles(this.font.styles),this.html(\"style\",{id:\"MJX-styles\"},[this.text(\"\\n\"+this.cssStyles.cssText+\"\\n\")])},e.prototype.addClassStyles=function(t){this.cssStyles.addStyles(t.styles)},e.prototype.setDocument=function(t){t&&(this.document=t,this.adaptor.document=t.document)},e.prototype.html=function(t,e,Q,r){return void 0===e&&(e={}),void 0===Q&&(Q=[]),this.adaptor.node(t,e,Q,r)},e.prototype.text=function(t){return this.adaptor.text(t)},e.prototype.fixed=function(t,e){return void 0===e&&(e=3),Math.abs(t)<6e-4?\"0\":t.toFixed(e).replace(/\\.?0+$/,\"\")},e.prototype.measureText=function(t,e,Q){void 0===Q&&(Q=[\"\",!1,!1]);var r=this.unknownText(t,e);if(\"-explicitFont\"===e){var T=this.cssFontStyles(Q);this.adaptor.setAttributes(r,{style:T})}return this.measureTextNodeWithCache(r,t,e,Q)},e.prototype.measureTextNodeWithCache=function(t,e,Q,r){void 0===r&&(r=[\"\",!1,!1]),\"-explicitFont\"===Q&&(Q=[r[0],r[1]?\"T\":\"F\",r[2]?\"T\":\"F\",\"\"].join(\"-\")),this.unknownCache.has(Q)||this.unknownCache.set(Q,new Map);var T=this.unknownCache.get(Q),n=T.get(e);if(n)return n;var o=this.measureTextNode(t);return T.set(e,o),o},e.prototype.measureXMLnode=function(t){var e=this.adaptor,Q=this.html(\"mjx-xml-block\",{style:{display:\"inline-block\"}},[e.clone(t)]),r=this.html(\"mjx-baseline\",{style:{display:\"inline-block\",width:0,height:0}}),T=this.html(\"mjx-measure-xml\",{style:{position:\"absolute\",display:\"inline-block\",\"font-family\":\"initial\",\"line-height\":\"normal\"}},[r,Q]);e.append(e.parent(this.math.start.node),this.container),e.append(this.container,T);var n=this.math.metrics.em*this.math.metrics.scale,o=e.nodeBBox(Q),i=o.left,a=o.right,s=o.bottom,l=o.top,c=(a-i)/n,u=(e.nodeBBox(r).top-l)/n,p=(s-l)/n-u;return e.remove(this.container),e.remove(T),{w:c,h:u,d:p}},e.prototype.cssFontStyles=function(t,e){void 0===e&&(e={});var Q=o(t,3),r=Q[0],T=Q[1],n=Q[2];return e[\"font-family\"]=this.font.getFamily(r),T&&(e[\"font-style\"]=\"italic\"),n&&(e[\"font-weight\"]=\"bold\"),e},e.prototype.getFontData=function(t){return t||(t=new u.Styles),[this.font.getFamily(t.get(\"font-family\")),\"italic\"===t.get(\"font-style\"),\"bold\"===t.get(\"font-weight\")]},e.NAME=\"Common\",e.OPTIONS=n(n({},a.AbstractOutputJax.OPTIONS),{scale:1,minScale:.5,matchFontHeight:!0,mtextInheritFont:!1,merrorInheritFont:!1,mtextFont:\"\",merrorFont:\"serif\",mathmlSpacing:!1,skipAttributes:{},exFactor:.5,displayAlign:\"center\",displayIndent:\"0\",wrapperFactory:null,font:null,cssStyles:null}),e.commonStyles={},e}(a.AbstractOutputJax);e.CommonOutputJax=h},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonWrapper=void 0;var a=Q(120),s=Q(0),l=Q(15),c=Q(32),u=Q(84),p=Q(18),h=Q(28);function f(t,e){return t?e<.1111111111111111?0:.1111111111111111:e}var d=function(t){function e(e,Q,r){void 0===r&&(r=null);var T=t.call(this,e,Q)||this;return T.parent=null,T.removedStyles=null,T.styles=null,T.variant=\"\",T.bboxComputed=!1,T.stretch=h.NOSTRETCH,T.font=null,T.parent=r,T.font=e.jax.font,T.bbox=p.BBox.zero(),T.getStyles(),T.getVariant(),T.getScale(),T.getSpace(),T.childNodes=Q.childNodes.map((function(t){var e=T.wrap(t);return e.bbox.pwidth&&(Q.notParent||Q.isKind(\"math\"))&&(T.bbox.pwidth=p.BBox.fullWidth),e})),T}return T(e,t),Object.defineProperty(e.prototype,\"jax\",{get:function(){return this.factory.jax},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"adaptor\",{get:function(){return this.factory.jax.adaptor},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"metrics\",{get:function(){return this.factory.jax.math.metrics},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!this.node.notParent&&!this.node.isToken},enumerable:!1,configurable:!0}),e.prototype.wrap=function(t,e){void 0===e&&(e=null);var Q=this.factory.wrap(t,e||this);return e&&e.childNodes.push(Q),this.jax.nodeMap.set(t,Q),Q},e.prototype.getBBox=function(t){if(void 0===t&&(t=!0),this.bboxComputed)return this.bbox;var e=t?this.bbox:p.BBox.zero();return this.computeBBox(e),this.bboxComputed=t,e},e.prototype.computeBBox=function(t,e){var Q,r;void 0===e&&(e=!1),t.empty();try{for(var T=n(this.childNodes),o=T.next();!o.done;o=T.next()){var i=o.value;t.append(i.getBBox())}}catch(t){Q={error:t}}finally{try{o&&!o.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}t.clean(),this.fixesPWidth&&this.setChildPWidths(e)&&this.computeBBox(t,!0)},e.prototype.setChildPWidths=function(t,e,Q){var r,T;if(void 0===e&&(e=null),void 0===Q&&(Q=!0),t)return!1;Q&&(this.bbox.pwidth=\"\");var o=!1;try{for(var i=n(this.childNodes),a=i.next();!a.done;a=i.next()){var s=a.value,l=s.getBBox();l.pwidth&&s.setChildPWidths(t,null===e?l.w:e,Q)&&(o=!0)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(T=i.return)&&T.call(i)}finally{if(r)throw r.error}}return o},e.prototype.invalidateBBox=function(){this.bboxComputed&&(this.bboxComputed=!1,this.parent&&this.parent.invalidateBBox())},e.prototype.copySkewIC=function(t){var e=this.childNodes[0];e&&e.bbox.sk&&(t.sk=e.bbox.sk);var Q=this.childNodes[this.childNodes.length-1];Q&&Q.bbox.ic&&(t.ic=Q.bbox.ic,t.w+=t.ic)},e.prototype.getStyles=function(){var t=this.node.attributes.getExplicit(\"style\");if(t)for(var Q=this.styles=new u.Styles(t),r=0,T=e.removeStyles.length;r<T;r++){var n=e.removeStyles[r];Q.get(n)&&(this.removedStyles||(this.removedStyles={}),this.removedStyles[n]=Q.get(n),Q.set(n,\"\"))}},e.prototype.getVariant=function(){if(this.node.isToken){var t=this.node.attributes,Q=t.get(\"mathvariant\");if(!t.getExplicit(\"mathvariant\")){var r=t.getList(\"fontfamily\",\"fontweight\",\"fontstyle\");if(this.removedStyles){var T=this.removedStyles;T.fontFamily&&(r.family=T.fontFamily),T.fontWeight&&(r.weight=T.fontWeight),T.fontStyle&&(r.style=T.fontStyle)}r.fontfamily&&(r.family=r.fontfamily),r.fontweight&&(r.weight=r.fontweight),r.fontstyle&&(r.style=r.fontstyle),r.weight&&r.weight.match(/^\\d+$/)&&(r.weight=parseInt(r.weight)>600?\"bold\":\"normal\"),r.family?Q=this.explicitVariant(r.family,r.weight,r.style):(this.node.getProperty(\"variantForm\")&&(Q=\"-tex-variant\"),Q=(e.BOLDVARIANTS[r.weight]||{})[Q]||Q,Q=(e.ITALICVARIANTS[r.style]||{})[Q]||Q)}this.variant=Q}},e.prototype.explicitVariant=function(t,e,Q){var r=this.styles;return r||(r=this.styles=new u.Styles),r.set(\"fontFamily\",t),e&&r.set(\"fontWeight\",e),Q&&r.set(\"fontStyle\",Q),\"-explicitFont\"},e.prototype.getScale=function(){var t=1,e=this.parent,Q=e?e.bbox.scale:1,r=this.node.attributes,T=Math.min(r.get(\"scriptlevel\"),2),n=r.get(\"fontsize\"),o=this.node.isToken||this.node.isKind(\"mstyle\")?r.get(\"mathsize\"):r.getInherited(\"mathsize\");if(0!==T){t=Math.pow(r.get(\"scriptsizemultiplier\"),T);var i=this.length2em(r.get(\"scriptminsize\"),.8,1);t<i&&(t=i)}this.removedStyles&&this.removedStyles.fontSize&&!n&&(n=this.removedStyles.fontSize),n&&!r.getExplicit(\"mathsize\")&&(o=n),\"1\"!==o&&(t*=this.length2em(o,1,1)),this.bbox.scale=t,this.bbox.rscale=t/Q},e.prototype.getSpace=function(){var t=this.isTopEmbellished(),e=this.node.hasSpacingAttributes();this.jax.options.mathmlSpacing||e?t&&this.getMathMLSpacing():this.getTeXSpacing(t,e)},e.prototype.getMathMLSpacing=function(){var t=this.node.coreMO(),e=t.attributes,Q=e.get(\"scriptlevel\")>0;this.bbox.L=e.isSet(\"lspace\")?Math.max(0,this.length2em(e.get(\"lspace\"))):f(Q,t.lspace),this.bbox.R=e.isSet(\"rspace\")?Math.max(0,this.length2em(e.get(\"rspace\"))):f(Q,t.rspace)},e.prototype.getTeXSpacing=function(t,e){if(!e){var Q=this.node.texSpacing();Q&&(this.bbox.L=this.length2em(Q))}if(t||e){var r=this.node.coreMO().attributes;r.isSet(\"lspace\")&&(this.bbox.L=Math.max(0,this.length2em(r.get(\"lspace\")))),r.isSet(\"rspace\")&&(this.bbox.R=Math.max(0,this.length2em(r.get(\"rspace\"))))}},e.prototype.isTopEmbellished=function(){return this.node.isEmbellished&&!(this.node.Parent&&this.node.Parent.isEmbellished)},e.prototype.core=function(){return this.jax.nodeMap.get(this.node.core())},e.prototype.coreMO=function(){return this.jax.nodeMap.get(this.node.coreMO())},e.prototype.getText=function(){var t,e,Q=\"\";if(this.node.isToken)try{for(var r=n(this.node.childNodes),T=r.next();!T.done;T=r.next()){var o=T.value;o instanceof s.TextNode&&(Q+=o.getText())}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return Q},e.prototype.canStretch=function(t){if(this.stretch=h.NOSTRETCH,this.node.isEmbellished){var e=this.core();e&&e.node!==this.node&&e.canStretch(t)&&(this.stretch=e.stretch)}return 0!==this.stretch.dir},e.prototype.getAlignShift=function(){var t,e=(t=this.node.attributes).getList.apply(t,i(s.indentAttributes)),Q=e.indentalign,r=e.indentshift,T=e.indentalignfirst,n=e.indentshiftfirst;return\"indentalign\"!==T&&(Q=T),\"auto\"===Q&&(Q=this.jax.options.displayAlign),\"indentshift\"!==n&&(r=n),\"auto\"===r&&(r=this.jax.options.displayIndent,\"right\"!==Q||r.match(/^\\s*0[a-z]*\\s*$/)||(r=(\"-\"+r.trim()).replace(/^--/,\"\"))),[Q,this.length2em(r,this.metrics.containerWidth)]},e.prototype.getAlignX=function(t,e,Q){return\"right\"===Q?t-(e.w+e.R)*e.rscale:\"left\"===Q?e.L*e.rscale:(t-e.w*e.rscale)/2},e.prototype.getAlignY=function(t,e,Q,r,T){return\"top\"===T?t-Q:\"bottom\"===T?r-e:\"middle\"===T?(t-Q-(e-r))/2:0},e.prototype.getWrapWidth=function(t){return this.childNodes[t].getBBox().w},e.prototype.getChildAlign=function(t){return\"left\"},e.prototype.percent=function(t){return c.percent(t)},e.prototype.em=function(t){return c.em(t)},e.prototype.px=function(t,e){return void 0===e&&(e=-c.BIGDIMEN),c.px(t,e,this.metrics.em)},e.prototype.length2em=function(t,e,Q){return void 0===e&&(e=1),void 0===Q&&(Q=null),null===Q&&(Q=this.bbox.scale),c.length2em(t,e,Q,this.jax.pxPerEm)},e.prototype.unicodeChars=function(t,e){void 0===e&&(e=this.variant);var Q=l.unicodeChars(t),r=this.font.getVariant(e);if(r&&r.chars){var T=r.chars;Q=Q.map((function(t){return((T[t]||[])[3]||{}).smp||t}))}return Q},e.prototype.remapChars=function(t){return t},e.prototype.mmlText=function(t){return this.node.factory.create(\"text\").setText(t)},e.prototype.mmlNode=function(t,e,Q){return void 0===e&&(e={}),void 0===Q&&(Q=[]),this.node.factory.create(t,e,Q)},e.prototype.createMo=function(t){var e=this.node.factory,Q=e.create(\"text\").setText(t),r=e.create(\"mo\",{stretchy:!0},[Q]);r.inheritAttributesFrom(this.node);var T=this.wrap(r);return T.parent=this,T},e.prototype.getVariantChar=function(t,e){var Q=this.font.getChar(t,e)||[0,0,0,{unknown:!0}];return 3===Q.length&&(Q[3]={}),Q},e.kind=\"unknown\",e.styles={},e.removeStyles=[\"fontSize\",\"fontFamily\",\"fontWeight\",\"fontStyle\",\"fontVariant\",\"font\"],e.skipAttributes={fontfamily:!0,fontsize:!0,fontweight:!0,fontstyle:!0,color:!0,background:!0,class:!0,href:!0,style:!0,xmlns:!0},e.BOLDVARIANTS={bold:{normal:\"bold\",italic:\"bold-italic\",fraktur:\"bold-fraktur\",script:\"bold-script\",\"sans-serif\":\"bold-sans-serif\",\"sans-serif-italic\":\"sans-serif-bold-italic\"},normal:{bold:\"normal\",\"bold-italic\":\"italic\",\"bold-fraktur\":\"fraktur\",\"bold-script\":\"script\",\"bold-sans-serif\":\"sans-serif\",\"sans-serif-bold-italic\":\"sans-serif-italic\"}},e.ITALICVARIANTS={italic:{normal:\"italic\",bold:\"bold-italic\",\"sans-serif\":\"sans-serif-italic\",\"bold-sans-serif\":\"sans-serif-bold-italic\"},normal:{italic:\"normal\",\"bold-italic\":\"bold\",\"sans-serif-italic\":\"sans-serif\",\"sans-serif-bold-italic\":\"bold-sans-serif\"}},e}(a.AbstractWrapper);e.CommonWrapper=d},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonWrapperFactory=void 0;var n=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.jax=null,e}return T(e,t),Object.defineProperty(e.prototype,\"Wrappers\",{get:function(){return this.node},enumerable:!1,configurable:!0}),e.defaultNodes={},e}(Q(121).AbstractWrapperFactory);e.CommonWrapperFactory=n},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonTeXAtomMixin=void 0;var n=Q(0);e.CommonTeXAtomMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.computeBBox=function(e,Q){if(void 0===Q&&(Q=!1),t.prototype.computeBBox.call(this,e,Q),this.childNodes[0]&&this.childNodes[0].bbox.ic&&(e.ic=this.childNodes[0].bbox.ic),this.node.texClass===n.TEXCLASS.VCENTER){var r=e.h,T=(r+e.d)/2+this.font.params.axis_height-r;e.h+=T,e.d-=T}},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonTextNodeMixin=void 0,e.CommonTextNodeMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.computeBBox=function(t,e){var Q,r;void 0===e&&(e=!1);var T=this.parent.variant,i=this.node.getText();if(\"-explicitFont\"===T){var a=this.jax.getFontData(this.parent.styles),s=this.jax.measureText(i,T,a),l=s.w,c=s.h,u=s.d;t.h=c,t.d=u,t.w=l}else{var p=this.remappedText(i,T);t.empty();try{for(var h=n(p),f=h.next();!f.done;f=h.next()){var d=f.value,L=o(this.getVariantChar(T,d),4),H=(c=L[0],u=L[1],l=L[2],L[3]);if(H.unknown){var m=this.jax.measureText(String.fromCodePoint(d),T);l=m.w,c=m.h,u=m.d}t.w+=l,c>t.h&&(t.h=c),u>t.d&&(t.d=u),t.ic=H.ic||0,t.sk=H.sk||0}}catch(t){Q={error:t}}finally{try{f&&!f.done&&(r=h.return)&&r.call(h)}finally{if(Q)throw Q.error}}p.length>1&&(t.sk=0),t.clean()}},e.prototype.remappedText=function(t,e){var Q=this.parent.stretch.c;return Q?[Q]:this.parent.remapChars(this.unicodeChars(t,e))},e.prototype.getStyles=function(){},e.prototype.getVariant=function(){},e.prototype.getScale=function(){},e.prototype.getSpace=function(){},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMathMixin=void 0,e.CommonMathMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.getWrapWidth=function(t){return this.parent?this.getBBox().w:this.metrics.containerWidth/this.jax.pxPerEm},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMencloseMixin=void 0;var a=Q(45),s=Q(15);e.CommonMencloseMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this;return r.notations={},r.renderChild=null,r.msqrt=null,r.padding=a.PADDING,r.thickness=a.THICKNESS,r.arrowhead={x:a.ARROWX,y:a.ARROWY,dx:a.ARROWDX},r.getParameters(),r.getNotations(),r.removeRedundantNotations(),r.initializeNotations(),r}return T(e,t),e.prototype.getParameters=function(){var t=this.node.attributes,e=t.get(\"data-padding\");void 0!==e&&(this.padding=this.length2em(e,a.PADDING));var Q=t.get(\"data-thickness\");void 0!==Q&&(this.thickness=this.length2em(Q,a.THICKNESS));var r=t.get(\"data-arrowhead\");if(void 0!==r){var T=n(s.split(r),3),o=T[0],i=T[1],l=T[2];this.arrowhead={x:o?parseFloat(o):a.ARROWX,y:i?parseFloat(i):a.ARROWY,dx:l?parseFloat(l):a.ARROWDX}}},e.prototype.getNotations=function(){var t,e,Q=this.constructor.notations;try{for(var r=i(s.split(this.node.attributes.get(\"notation\"))),T=r.next();!T.done;T=r.next()){var n=T.value,o=Q.get(n);o&&(this.notations[n]=o,o.renderChild&&(this.renderChild=o.renderer))}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.removeRedundantNotations=function(){var t,e,Q,r;try{for(var T=i(Object.keys(this.notations)),n=T.next();!n.done;n=T.next()){var o=n.value;if(this.notations[o]){var a=this.notations[o].remove||\"\";try{for(var s=(Q=void 0,i(a.split(/ /))),l=s.next();!l.done;l=s.next()){var c=l.value;delete this.notations[c]}}catch(t){Q={error:t}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(Q)throw Q.error}}}}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}},e.prototype.initializeNotations=function(){var t,e;try{for(var Q=i(Object.keys(this.notations)),r=Q.next();!r.done;r=Q.next()){var T=r.value,n=this.notations[T].init;n&&n(this)}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=Q.return)&&e.call(Q)}finally{if(t)throw t.error}}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var Q=n(this.getBBoxExtenders(),4),r=Q[0],T=Q[1],o=Q[2],i=Q[3],a=this.childNodes[0].getBBox();t.combine(a,i,0),t.h+=r,t.d+=o,t.w+=T,this.setChildPWidths(e)},e.prototype.getBBoxExtenders=function(){var t,e,Q=[0,0,0,0];try{for(var r=i(Object.keys(this.notations)),T=r.next();!T.done;T=r.next()){var n=T.value;this.maximizeEntries(Q,this.notations[n].bbox(this))}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return Q},e.prototype.getPadding=function(){var t,e,Q=[0,0,0,0],r=[0,0,0,0];try{for(var T=i(Object.keys(this.notations)),n=T.next();!n.done;n=T.next()){var o=n.value;this.maximizeEntries(Q,this.notations[o].bbox(this));var a=this.notations[o].border;a&&this.maximizeEntries(r,a(this))}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}return[0,1,2,3].map((function(t){return Q[t]-r[t]}))},e.prototype.maximizeEntries=function(t,e){for(var Q=0;Q<t.length;Q++)t[Q]<e[Q]&&(t[Q]=e[Q])},e.prototype.getArgMod=function(t,e){return[Math.atan2(e,t),Math.sqrt(t*t+e*e)]},e.prototype.arrow=function(t,e,Q){return void 0===Q&&(Q=!1),null},e.prototype.arrowData=function(){var t=n([this.padding,this.thickness],2),e=t[0],Q=t[1]*(this.arrowhead.x+Math.max(1,this.arrowhead.dx)),r=this.childNodes[0].getBBox(),T=r.h,o=r.d,i=r.w,a=T+o,s=Math.sqrt(a*a+i*i),l=Math.max(e,Q*i/s),c=Math.max(e,Q*a/s),u=n(this.getArgMod(i+2*l,a+2*c),2);return{a:u[0],W:u[1],x:l,y:c}},e.prototype.createMsqrt=function(t){var e=this.node.factory.create(\"msqrt\");e.inheritAttributesFrom(this.node),e.childNodes[0]=t.node;var Q=this.wrap(e);return Q.parent=this,Q},e.prototype.sqrtTRBL=function(){var t=this.msqrt.getBBox(),e=this.msqrt.childNodes[0].getBBox();return[t.h-e.h,0,t.d-e.d,t.w-e.w]},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMfencedMixin=void 0,e.CommonMfencedMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this;return r.mrow=null,r.createMrow(),r.addMrowChildren(),r}return T(e,t),e.prototype.createMrow=function(){var t=this.node.factory.create(\"inferredMrow\");t.inheritAttributesFrom(this.node),this.mrow=this.wrap(t),this.mrow.parent=this},e.prototype.addMrowChildren=function(){var t,e,Q=this.node,r=this.mrow;this.addMo(Q.open),this.childNodes.length&&r.childNodes.push(this.childNodes[0]);var T=0;try{for(var n=i(this.childNodes.slice(1)),o=n.next();!o.done;o=n.next()){var a=o.value;this.addMo(Q.separators[T++]),r.childNodes.push(a)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}this.addMo(Q.close),r.stretchChildren()},e.prototype.addMo=function(t){if(t){var e=this.wrap(t);this.mrow.childNodes.push(e),e.parent=this.mrow}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.updateFrom(this.mrow.getBBox()),this.setChildPWidths(e)},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMfracMixin=void 0,e.CommonMfracMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this;if(r.bevel=null,r.pad=r.node.getProperty(\"withDelims\")?0:r.font.params.nulldelimiterspace,r.node.attributes.get(\"bevelled\")){var T=r.getBevelData(r.isDisplay()).H,n=r.bevel=r.createMo(\"/\");n.canStretch(1),n.getStretchedVariant([T],!0)}return r}return T(e,t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.empty();var Q=this.node.attributes.getList(\"linethickness\",\"bevelled\"),r=Q.linethickness,T=Q.bevelled,n=this.isDisplay(),o=null;if(T)this.getBevelledBBox(t,n);else{var i=this.length2em(String(r),.06);o=-2*this.pad,0===i?this.getAtopBBox(t,n):(this.getFractionBBox(t,n,i),o-=.2),o+=t.w}t.clean(),this.setChildPWidths(e,o)},e.prototype.getFractionBBox=function(t,e,Q){var r=this.childNodes[0].getBBox(),T=this.childNodes[1].getBBox(),n=this.font.params.axis_height,o=this.getTUV(e,Q),i=o.T,a=o.u,s=o.v;t.combine(r,0,n+i+Math.max(r.d*r.rscale,a)),t.combine(T,0,n-i-Math.max(T.h*T.rscale,s)),t.w+=2*this.pad+.2},e.prototype.getTUV=function(t,e){var Q=this.font.params,r=Q.axis_height,T=(t?3.5:1.5)*e;return{T:(t?3.5:1.5)*e,u:(t?Q.num1:Q.num2)-r-T,v:(t?Q.denom1:Q.denom2)+r-T}},e.prototype.getAtopBBox=function(t,e){var Q=this.getUVQ(e),r=Q.u,T=Q.v,n=Q.nbox,o=Q.dbox;t.combine(n,0,r),t.combine(o,0,-T),t.w+=2*this.pad},e.prototype.getUVQ=function(t){var e=this.childNodes[0].getBBox(),Q=this.childNodes[1].getBBox(),r=this.font.params,T=n(t?[r.num1,r.denom1]:[r.num3,r.denom2],2),o=T[0],i=T[1],a=(t?7:3)*r.rule_thickness,s=o-e.d*e.scale-(Q.h*Q.scale-i);return s<a&&(o+=(a-s)/2,i+=(a-s)/2,s=a),{u:o,v:i,q:s,nbox:e,dbox:Q}},e.prototype.getBevelledBBox=function(t,e){var Q=this.getBevelData(e),r=Q.u,T=Q.v,n=Q.delta,o=Q.nbox,i=Q.dbox,a=this.bevel.getBBox();t.combine(o,0,r),t.combine(a,t.w-n/2,0),t.combine(i,t.w-n/2,T)},e.prototype.getBevelData=function(t){var e=this.childNodes[0].getBBox(),Q=this.childNodes[1].getBBox(),r=t?.4:.15,T=Math.max(e.scale*(e.h+e.d),Q.scale*(Q.h+Q.d))+2*r,n=this.font.params.axis_height;return{H:T,delta:r,u:e.scale*(e.d-e.h)/2+n+r,v:Q.scale*(Q.d-Q.h)/2+n-r,nbox:e,dbox:Q}},e.prototype.canStretch=function(t){return!1},e.prototype.isDisplay=function(){var t=this.node.attributes.getList(\"displaystyle\",\"scriptlevel\"),e=t.displaystyle,Q=t.scriptlevel;return e&&0===Q},e.prototype.getWrapWidth=function(t){var e=this.node.attributes;return e.get(\"bevelled\")?this.childNodes[t].getBBox().w:this.getBBox().w-(this.length2em(e.get(\"linethickness\"))?.2:0)-2*this.pad},e.prototype.getChildAlign=function(t){var e=this.node.attributes;return e.get(\"bevelled\")?\"left\":e.get([\"numalign\",\"denomalign\"][t])},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMglyphMixin=void 0,e.CommonMglyphMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this;return r.getParameters(),r}return T(e,t),e.prototype.getParameters=function(){var t=this.node.attributes.getList(\"width\",\"height\",\"valign\"),e=t.width,Q=t.height,r=t.valign;this.width=\"auto\"===e?1:this.length2em(e),this.height=\"auto\"===Q?1:this.length2em(Q),this.valign=this.length2em(r||\"0\")},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.w=this.width,t.h=this.height+this.valign,t.d=-this.valign},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMiMixin=void 0,e.CommonMiMixin=function(t){return function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.noIC=!1,e}return T(e,t),e.prototype.computeBBox=function(e,Q){void 0===Q&&(Q=!1),t.prototype.computeBBox.call(this,e),this.copySkewIC(e),this.noIC&&(e.w-=e.ic)},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMmultiscriptsMixin=e.ScriptNames=e.NextScript=void 0;var i=Q(18);e.NextScript={base:\"subList\",subList:\"supList\",supList:\"subList\",psubList:\"psupList\",psupList:\"psubList\"},e.ScriptNames=[\"sup\",\"sup\",\"psup\",\"psub\"],e.CommonMmultiscriptsMixin=function(t){return function(t){function Q(){var e=null!==t&&t.apply(this,arguments)||this;return e.scriptData=null,e.firstPrescript=0,e}return T(Q,t),Q.prototype.combinePrePost=function(t,e){var Q=new i.BBox(t);return Q.combine(e,0,0),Q},Q.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var Q=this.font.params.scriptspace,r=this.getScriptData(),T=this.combinePrePost(r.sub,r.psub),o=this.combinePrePost(r.sup,r.psup),i=n(this.getUVQ(r.base,T,o),2),a=i[0],s=i[1];if(t.empty(),r.numPrescripts&&(t.combine(r.psup,Q,a),t.combine(r.psub,Q,s)),t.append(r.base),r.numScripts){var l=t.w;t.combine(r.sup,l,a),t.combine(r.sub,l,s),t.w+=Q}t.clean(),this.setChildPWidths(e)},Q.prototype.getScriptData=function(){if(this.scriptData)return this.scriptData;var t=this.scriptData={base:null,sub:i.BBox.empty(),sup:i.BBox.empty(),psub:i.BBox.empty(),psup:i.BBox.empty(),numPrescripts:0,numScripts:0},e=this.getScriptBBoxLists();return this.combineBBoxLists(t.sub,t.sup,e.subList,e.supList),this.combineBBoxLists(t.psub,t.psup,e.psubList,e.psupList),this.scriptData.base=e.base[0],this.scriptData.numPrescripts=e.psubList.length,this.scriptData.numScripts=e.subList.length,this.scriptData},Q.prototype.getScriptBBoxLists=function(){var t,Q,r={base:[],subList:[],supList:[],psubList:[],psupList:[]},T=\"base\";try{for(var n=o(this.childNodes),i=n.next();!i.done;i=n.next()){var a=i.value;a.node.isKind(\"mprescripts\")?T=\"psubList\":(r[T].push(a.getBBox()),T=e.NextScript[T])}}catch(e){t={error:e}}finally{try{i&&!i.done&&(Q=n.return)&&Q.call(n)}finally{if(t)throw t.error}}return this.firstPrescript=r.subList.length+r.supList.length+2,this.padLists(r.subList,r.supList),this.padLists(r.psubList,r.psupList),r},Q.prototype.padLists=function(t,e){t.length>e.length&&e.push(i.BBox.empty())},Q.prototype.combineBBoxLists=function(t,e,Q,r){for(var T=0;T<Q.length;T++){var o=n(this.getScaledWHD(Q[T]),3),i=o[0],a=o[1],s=o[2],l=n(this.getScaledWHD(r[T]),3),c=l[0],u=l[1],p=l[2],h=Math.max(i,c);t.w+=h,e.w+=h,a>t.h&&(t.h=a),s>t.d&&(t.d=s),u>e.h&&(e.h=u),p>e.d&&(e.d=p)}},Q.prototype.getScaledWHD=function(t){var e=t.w,Q=t.h,r=t.d,T=t.rscale;return[e*T,Q*T,r*T]},Q.prototype.getUVQ=function(e,Q,r){var T;if(!this.UVQ){var o=n([0,0,0],3),i=o[0],a=o[1],s=o[2];0===Q.h&&0===Q.d?i=this.getU(e,r):0===r.h&&0===r.d?i=-this.getV(e,Q):(i=(T=n(t.prototype.getUVQ.call(this,e,Q,r),3))[0],a=T[1],s=T[2]),this.UVQ=[i,a,s]}return this.UVQ},Q}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMnMixin=void 0,e.CommonMnMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.remapChars=function(t){if(t.length){var e=this.font.getRemappedChar(\"mn\",t[0]);if(e){var Q=this.unicodeChars(e,this.variant);1===Q.length?t[0]=Q[0]:t=Q.concat(t.slice(1))}}return t},e}(t)}},function(t,e,Q){\"use strict\";var r,T,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t},a=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMoMixin=e.DirectionVH=void 0;var s=Q(28);e.DirectionVH=((T={})[1]=\"v\",T[2]=\"h\",T),e.CommonMoMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,i(e))||this;return r.noIC=!1,r.size=null,r.isAccent=r.node.isAccent,r}return n(e,t),e.prototype.computeBBox=function(e,Q){void 0===Q&&(Q=!1);var r=0!==this.stretch.dir;if(r&&null===this.size&&this.getStretchedVariant([0]),!(r&&this.size<0)&&(t.prototype.computeBBox.call(this,e),this.copySkewIC(e),this.noIC&&(e.w-=e.ic),this.node.attributes.get(\"symmetric\")&&2!==this.stretch.dir)){var T=(e.h+e.d)/2+this.font.params.axis_height-e.h;e.h+=T,e.d-=T}},e.prototype.getVariant=function(){this.node.attributes.get(\"largeop\")?this.variant=this.node.attributes.get(\"displaystyle\")?\"-largeop\":\"-smallop\":t.prototype.getVariant.call(this)},e.prototype.canStretch=function(t){if(0!==this.stretch.dir)return this.stretch.dir===t;if(!this.node.attributes.get(\"stretchy\"))return!1;var e=this.getText();if(1!==Array.from(e).length)return!1;var Q=this.font.getDelimiter(e.codePointAt(0));return this.stretch=Q&&Q.dir===t?Q:s.NOSTRETCH,0!==this.stretch.dir},e.prototype.getStretchedVariant=function(t,e){var Q,r;if(void 0===e&&(e=!1),0!==this.stretch.dir){var T=this.getWH(t),n=this.getSize(\"minsize\",0),o=this.getSize(\"maxsize\",1/0);T=Math.max(n,Math.min(o,T));var i=n||e?T:Math.max(T*this.font.params.delimiterfactor/1e3,T-this.font.params.delimitershortfall),s=this.stretch,l=s.c||this.getText().codePointAt(0),c=0;if(s.sizes)try{for(var u=a(s.sizes),p=u.next();!p.done;p=u.next()){if(p.value>=i)return this.variant=this.font.getSizeVariant(l,c),void(this.size=c);c++}}catch(t){Q={error:t}}finally{try{p&&!p.done&&(r=u.return)&&r.call(u)}finally{if(Q)throw Q.error}}s.stretch?(this.size=-1,this.invalidateBBox(),this.getStretchBBox(t,T,s)):(this.variant=this.font.getSizeVariant(l,c-1),this.size=c-1)}},e.prototype.getSize=function(t,e){var Q=this.node.attributes;return Q.isSet(t)&&(e=this.length2em(Q.get(t),1,1)),e},e.prototype.getWH=function(t){if(0===t.length)return 0;if(1===t.length)return t[0];var e=o(t,2),Q=e[0],r=e[1],T=this.font.params.axis_height;return this.node.attributes.get(\"symmetric\")?2*Math.max(Q-T,r+T):Q+r},e.prototype.getStretchBBox=function(t,e,Q){var r;Q.hasOwnProperty(\"min\")&&Q.min>e&&(e=Q.min);var T=o(Q.HDW,3),n=T[0],i=T[1],a=T[2];1===this.stretch.dir?(n=(r=o(this.getBaseline(t,e,Q),2))[0],i=r[1]):a=e,this.bbox.h=n,this.bbox.d=i,this.bbox.w=a},e.prototype.getBaseline=function(t,e,Q){var r=2===t.length&&t[0]+t[1]===e,T=this.node.attributes.get(\"symmetric\"),n=o(r?t:[e,0],2),i=n[0],a=n[1],s=o([i+a,0],2),l=s[0],c=s[1];if(T){var u=this.font.params.axis_height;r&&(l=2*Math.max(i-u,a+u)),c=l/2-u}else if(r)c=a;else{var p=o(Q.HDW||[.75,.25],2),h=p[0],f=p[1];c=f*(l/(h+f))}return[l-c,c]},e.prototype.remapChars=function(t){if(1===t.length){var e=this.node.coreParent().parent,Q=this.isAccent&&!e.isKind(\"mrow\")?\"accent\":\"mo\",r=this.font.getRemappedChar(Q,t[0]);r&&(t=this.unicodeChars(r,this.variant))}return t},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMpaddedMixin=void 0,e.CommonMpaddedMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.getDimens=function(){var t=this.node.attributes.getList(\"width\",\"height\",\"depth\",\"lspace\",\"voffset\"),e=this.childNodes[0].getBBox(),Q=e.w,r=e.h,T=e.d,n=Q,o=r,i=T,a=0,s=0,l=0;\"\"!==t.width&&(Q=this.dimen(t.width,e,\"w\",0)),\"\"!==t.height&&(r=this.dimen(t.height,e,\"h\",0)),\"\"!==t.depth&&(T=this.dimen(t.depth,e,\"d\",0)),\"\"!==t.voffset&&(s=this.dimen(t.voffset,e)),\"\"!==t.lspace&&(a=this.dimen(t.lspace,e));var c=this.node.attributes.get(\"data-align\");return c&&(l=this.getAlignX(Q,e,c)),[o,i,n,r-o,T-i,Q-n,a,s,l]},e.prototype.dimen=function(t,e,Q,r){void 0===Q&&(Q=\"\"),void 0===r&&(r=null);var T=(t=String(t)).match(/width|height|depth/),n=T?e[T[0].charAt(0)]:Q?e[Q]:0,o=this.length2em(t,n)||0;return t.match(/^[-+]/)&&Q&&(o+=n),null!=r&&(o=Math.max(r,o)),o},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var Q=n(this.getDimens(),6),r=Q[0],T=Q[1],o=Q[2],i=Q[3],a=Q[4],s=Q[5];t.w=o+s,t.h=r+i,t.d=T+a,this.setChildPWidths(e,t.w)},e.prototype.getWrapWidth=function(t){return this.getBBox().w},e.prototype.getChildAlign=function(t){return this.node.attributes.get(\"data-align\")||\"left\"},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMrootMixin=void 0,e.CommonMrootMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"surd\",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"root\",{get:function(){return 1},enumerable:!1,configurable:!0}),e.prototype.combineRootBBox=function(t,e,Q){var r=this.childNodes[this.root].getBBox(),T=this.getRootDimens(e,Q)[1];t.combine(r,0,T)},e.prototype.getRootDimens=function(t,e){var Q=this.childNodes[this.surd],r=this.childNodes[this.root].getBBox(),T=(Q.size<0?.5:.6)*t.w,n=r.w,o=r.rscale,i=Math.max(n,T/o),a=Math.max(0,i-n);return[i*o-T,this.rootHeight(r,t,Q.size,e),a]},e.prototype.rootHeight=function(t,e,Q,r){var T=e.h+e.d;return(Q<0?1.9:.55*T)-(T-r)+Math.max(0,t.d*t.rscale)},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsMixin=void 0,e.CommonMsMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this,T=r.node.attributes,n=T.getList(\"lquote\",\"rquote\");return\"monospace\"!==r.variant&&(T.isSet(\"lquote\")||'\"'!==n.lquote||(n.lquote=\"\\u201c\"),T.isSet(\"rquote\")||'\"'!==n.rquote||(n.rquote=\"\\u201d\")),r.childNodes.unshift(r.createText(n.lquote)),r.childNodes.push(r.createText(n.rquote)),r}return T(e,t),e.prototype.createText=function(t){var e=this.wrap(this.mmlText(t));return e.parent=this,e},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMspaceMixin=void 0,e.CommonMspaceMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var Q=this.node.attributes;t.w=this.length2em(Q.get(\"width\"),0),t.h=this.length2em(Q.get(\"height\"),0),t.d=this.length2em(Q.get(\"depth\"),0)},e.prototype.handleVariant=function(){},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMsqrtMixin=void 0;var i=Q(18);e.CommonMsqrtMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this,T=r.createMo(\"\\u221a\");T.canStretch(1);var n=r.childNodes[r.base].getBBox(),i=n.h,a=n.d,s=r.font.params.rule_thickness,l=r.node.attributes.get(\"displaystyle\")?r.font.params.x_height:s;return r.surdH=i+a+2*s+l/4,T.getStretchedVariant([r.surdH-a,a],!0),r}return T(e,t),Object.defineProperty(e.prototype,\"base\",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"surd\",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"root\",{get:function(){return null},enumerable:!1,configurable:!0}),e.prototype.createMo=function(e){var Q=t.prototype.createMo.call(this,e);return this.childNodes.push(Q),Q},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var Q=this.childNodes[this.surd].getBBox(),r=new i.BBox(this.childNodes[this.base].getBBox()),T=this.getPQ(Q)[1],o=this.font.params.rule_thickness,a=r.h+T+o,s=n(this.getRootDimens(Q,a),1)[0];t.h=a+o,this.combineRootBBox(t,Q,a),t.combine(Q,s,a-Q.h),t.combine(r,s+Q.w,0),t.clean(),this.setChildPWidths(e)},e.prototype.combineRootBBox=function(t,e,Q){},e.prototype.getPQ=function(t){var e=this.font.params.rule_thickness,Q=this.node.attributes.get(\"displaystyle\")?this.font.params.x_height:e;return[Q,t.h+t.d>this.surdH?(t.h+t.d-(this.surdH-2*e-Q/2))/2:e+Q/4]},e.prototype.getRootDimens=function(t,e){return[0,0,0,0]},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtableMixin=void 0;var a=Q(18),s=Q(15),l=Q(128);e.CommonMtableMixin=function(t){return function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this;r.numCols=0,r.numRows=0,r.data=null,r.pwidthCells=[],r.pWidth=0,r.numCols=l.max(r.tableRows.map((function(t){return t.numCells}))),r.numRows=r.childNodes.length,r.hasLabels=r.childNodes.reduce((function(t,e){return t||e.node.isKind(\"mlabeledtr\")}),!1),r.findContainer(),r.isTop=!r.container||r.container.node.isKind(\"math\")&&!r.container.parent,r.isTop&&(r.jax.table=r),r.getPercentageWidth();var T=r.node.attributes;return r.frame=\"none\"!==T.get(\"frame\"),r.fLine=r.frame?.07:0,r.fSpace=r.frame?r.convertLengths(r.getAttributeArray(\"framespacing\")):[0,0],r.cSpace=r.convertLengths(r.getColumnAttributes(\"columnspacing\")),r.rSpace=r.convertLengths(r.getRowAttributes(\"rowspacing\")),r.cLines=r.getColumnAttributes(\"columnlines\").map((function(t){return\"none\"===t?0:.07})),r.rLines=r.getRowAttributes(\"rowlines\").map((function(t){return\"none\"===t?0:.07})),r.cWidths=r.getColumnWidths(),r.stretchRows(),r.stretchColumns(),r}return T(e,t),Object.defineProperty(e.prototype,\"tableRows\",{get:function(){return this.childNodes},enumerable:!1,configurable:!0}),e.prototype.findContainer=function(){for(var t=this,e=t.parent;e&&(e.node.notParent||e.node.isKind(\"mrow\"));)t=e,e=e.parent;this.container=e,this.containerI=t.node.childPosition()},e.prototype.getPercentageWidth=function(){if(this.hasLabels)this.bbox.pwidth=a.BBox.fullWidth;else{var t=this.node.attributes.get(\"width\");s.isPercent(t)&&(this.bbox.pwidth=t)}},e.prototype.stretchRows=function(){for(var t=this.node.attributes.get(\"equalrows\"),e=t?this.getEqualRowHeight():0,Q=t?this.getTableData():{H:[0],D:[0]},r=Q.H,T=Q.D,n=this.tableRows,o=0;o<this.numRows;o++){var i=t?[(e+r[o]-T[o])/2,(e-r[o]+T[o])/2]:null;n[o].stretchChildren(i)}},e.prototype.stretchColumns=function(){for(var t=0;t<this.numCols;t++){var e=\"number\"==typeof this.cWidths[t]?this.cWidths[t]:null;this.stretchColumn(t,e)}},e.prototype.stretchColumn=function(t,e){var Q,r,T,n,o,a,s=[];try{for(var l=i(this.tableRows),c=l.next();!c.done;c=l.next()){if(L=c.value.getChild(t))0===(g=L.childNodes[0]).stretch.dir&&g.canStretch(2)&&s.push(g)}}catch(t){Q={error:t}}finally{try{c&&!c.done&&(r=l.return)&&r.call(l)}finally{if(Q)throw Q.error}}var u=s.length,p=this.childNodes.length;if(u&&p>1){if(null===e){e=0;var h=u>1&&u===p;try{for(var f=i(this.tableRows),d=f.next();!d.done;d=f.next()){var L;if(L=d.value.getChild(t)){var H=0===(g=L.childNodes[0]).stretch.dir;if(h||H){var m=g.getBBox(H).w;m>e&&(e=m)}}}}catch(t){T={error:t}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(T)throw T.error}}}try{for(var y=i(s),v=y.next();!v.done;v=y.next()){var g;(g=v.value).coreMO().getStretchedVariant([e])}}catch(t){o={error:t}}finally{try{v&&!v.done&&(a=y.return)&&a.call(y)}finally{if(o)throw o.error}}}},e.prototype.getTableData=function(){if(this.data)return this.data;for(var t=new Array(this.numRows).fill(0),e=new Array(this.numRows).fill(0),Q=new Array(this.numCols).fill(0),r=new Array(this.numRows),T=new Array(this.numRows),n=[0],o=this.tableRows,i=0;i<o.length;i++){for(var a=o[i],s=0;s<a.numCells;s++){var l=a.getChild(s);this.updateHDW(l,s,i,t,e,Q),this.recordPWidthCell(l,s)}r[i]=t[i],T[i]=e[i],a.labeled&&this.updateHDW(a.childNodes[0],0,i,t,e,n)}var c=n[0];return this.data={H:t,D:e,W:Q,NH:r,ND:T,L:c},this.data},e.prototype.updateHDW=function(t,e,Q,r,T,n){void 0===n&&(n=null);var o=t.getBBox(),i=o.h,a=o.d,s=o.w;i<.75&&(i=.75),a<.25&&(a=.25),i>r[Q]&&(r[Q]=i),a>T[Q]&&(T[Q]=a),n&&s>n[e]&&(n[e]=s)},e.prototype.recordPWidthCell=function(t,e){t.childNodes[0]&&t.childNodes[0].getBBox().pwidth&&this.pwidthCells.push([t,e])},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var Q,r,T=this.getTableData(),o=T.H,i=T.D;if(this.node.attributes.get(\"equalrows\")){var a=this.getEqualRowHeight();Q=l.sum([].concat(this.rLines,this.rSpace))+a*this.numRows}else Q=l.sum(o.concat(i,this.rLines,this.rSpace));Q+=2*(this.fLine+this.fSpace[1]);var c=this.getComputedWidths();r=l.sum(c.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]);var u=this.node.attributes.get(\"width\");\"auto\"!==u&&(r=Math.max(this.length2em(u,0)+2*this.fLine,r));var p=n(this.getBBoxHD(Q),2),h=p[0],f=p[1];t.h=h,t.d=f,t.w=r;var d=n(this.getBBoxLR(),2),L=d[0],H=d[1];t.L=L,t.R=H,s.isPercent(u)||this.setColumnPWidths()},e.prototype.setChildPWidths=function(t,e,Q){var r=this.node.attributes.get(\"width\");if(!s.isPercent(r))return!1;this.hasLabels||(this.bbox.pwidth=\"\",this.container.bbox.pwidth=\"\");var T=this.bbox,n=T.w,o=T.L,i=T.R,a=Math.max(n,this.length2em(r,Math.max(e,o+n+i))),c=this.node.attributes.get(\"equalcolumns\")?Array(this.numCols).fill(this.percent(1/Math.max(1,this.numCols))):this.getColumnAttributes(\"columnwidth\",0);this.cWidths=this.getColumnWidthsFixed(c,a);var u=this.getComputedWidths();return this.pWidth=l.sum(u.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]),this.isTop&&(this.bbox.w=this.pWidth),this.setColumnPWidths(),this.pWidth!==n&&this.parent.invalidateBBox(),this.pWidth!==n},e.prototype.setColumnPWidths=function(){var t,e,Q=this.cWidths;try{for(var r=i(this.pwidthCells),T=r.next();!T.done;T=r.next()){var o=n(T.value,2),a=o[0],s=o[1];a.setChildPWidths(!1,Q[s])&&(a.invalidateBBox(),a.getBBox())}}catch(e){t={error:e}}finally{try{T&&!T.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.getBBoxHD=function(t){var e=n(this.getAlignmentRow(),2),Q=e[0],r=e[1];if(null===r){var T=this.font.params.axis_height,o=t/2;return{top:[0,t],center:[o,o],bottom:[t,0],baseline:[o,o],axis:[o+T,o-T]}[Q]||[o,o]}var i=this.getVerticalPosition(r,Q);return[i,t-i]},e.prototype.getBBoxLR=function(){if(this.hasLabels){var t=this.node.attributes.get(\"side\"),e=n(this.getPadAlignShift(t),2),Q=e[0];return\"center\"===e[1]?[Q,Q]:\"left\"===t?[Q,0]:[0,Q]}return[0,0]},e.prototype.getPadAlignShift=function(t){var e=this.getTableData().L+this.length2em(this.node.attributes.get(\"minlabelspacing\")),Q=n(null==this.styles?[\"\",\"\"]:[this.styles.get(\"padding-left\"),this.styles.get(\"padding-right\")],2),r=Q[0],T=Q[1];(r||T)&&(e=Math.max(e,this.length2em(r||\"0\"),this.length2em(T||\"0\")));var o=n(this.getAlignShift(),2),i=o[0],a=o[1];return i===t&&(a=\"left\"===t?Math.max(e,a)-e:Math.min(-e,a)+e),[e,i,a]},e.prototype.getAlignShift=function(){return this.isTop?t.prototype.getAlignShift.call(this):[this.container.getChildAlign(this.containerI),0]},e.prototype.getWidth=function(){return this.pWidth||this.getBBox().w},e.prototype.getEqualRowHeight=function(){var t=this.getTableData(),e=t.H,Q=t.D,r=Array.from(e.keys()).map((function(t){return e[t]+Q[t]}));return Math.max.apply(Math,r)},e.prototype.getComputedWidths=function(){var t=this,e=this.getTableData().W,Q=Array.from(e.keys()).map((function(Q){return\"number\"==typeof t.cWidths[Q]?t.cWidths[Q]:e[Q]}));return this.node.attributes.get(\"equalcolumns\")&&(Q=Array(Q.length).fill(l.max(Q))),Q},e.prototype.getColumnWidths=function(){var t=this.node.attributes.get(\"width\");if(this.node.attributes.get(\"equalcolumns\"))return this.getEqualColumns(t);var e=this.getColumnAttributes(\"columnwidth\",0);return\"auto\"===t?this.getColumnWidthsAuto(e):s.isPercent(t)?this.getColumnWidthsPercent(e):this.getColumnWidthsFixed(e,this.length2em(t))},e.prototype.getEqualColumns=function(t){var e,Q=Math.max(1,this.numCols);if(\"auto\"===t){var r=this.getTableData().W;e=l.max(r)}else if(s.isPercent(t))e=this.percent(1/Q);else{var T=l.sum([].concat(this.cLines,this.cSpace))+2*this.fSpace[0];e=Math.max(0,this.length2em(t)-T)/Q}return Array(this.numCols).fill(e)},e.prototype.getColumnWidthsAuto=function(t){var e=this;return t.map((function(t){return\"auto\"===t||\"fit\"===t?null:s.isPercent(t)?t:e.length2em(t)}))},e.prototype.getColumnWidthsPercent=function(t){var e=this,Q=t.indexOf(\"fit\")>=0,r=(Q?this.getTableData():{W:null}).W;return Array.from(t.keys()).map((function(T){var n=t[T];return\"fit\"===n?null:\"auto\"===n?Q?r[T]:null:s.isPercent(n)?n:e.length2em(n)}))},e.prototype.getColumnWidthsFixed=function(t,e){var Q=this,r=Array.from(t.keys()),T=r.filter((function(e){return\"fit\"===t[e]})),n=r.filter((function(e){return\"auto\"===t[e]})),o=T.length||n.length,i=(o?this.getTableData():{W:null}).W,a=e-l.sum([].concat(this.cLines,this.cSpace))-2*this.fSpace[0],s=a;r.forEach((function(r){var T=t[r];s-=\"fit\"===T||\"auto\"===T?i[r]:Q.length2em(T,e)}));var c=o&&s>0?s/o:0;return r.map((function(e){var r=t[e];return\"fit\"===r?i[e]+c:\"auto\"===r?i[e]+(0===T.length?c:0):Q.length2em(r,a)}))},e.prototype.getVerticalPosition=function(t,e){for(var Q=this.node.attributes.get(\"equalrows\"),r=this.getTableData(),T=r.H,o=r.D,i=Q?this.getEqualRowHeight():0,a=this.getRowHalfSpacing(),s=this.fLine,l=0;l<t;l++)s+=a[l]+(Q?i:T[l]+o[l])+a[l+1]+this.rLines[l];var c=n(Q?[(i+T[t]-o[t])/2,(i-T[t]+o[t])/2]:[T[t],o[t]],2),u=c[0],p=c[1];return s+={top:0,center:a[t]+(u+p)/2,bottom:a[t]+u+p+a[t+1],baseline:a[t]+u,axis:a[t]+u-.25}[e]||0},e.prototype.getEmHalfSpacing=function(t,e){var Q=this.em(t),r=this.addEm(e,2);return r.unshift(Q),r.push(Q),r},e.prototype.getRowHalfSpacing=function(){var t=this.rSpace.map((function(t){return t/2}));return t.unshift(this.fSpace[1]),t.push(this.fSpace[1]),t},e.prototype.getColumnHalfSpacing=function(){var t=this.cSpace.map((function(t){return t/2}));return t.unshift(this.fSpace[0]),t.push(this.fSpace[0]),t},e.prototype.getAlignmentRow=function(){var t=n(s.split(this.node.attributes.get(\"align\")),2),e=t[0],Q=t[1];if(null==Q)return[e,null];var r=parseInt(Q);return r<0&&(r+=this.numRows+1),[e,r<1||r>this.numRows?null:r-1]},e.prototype.getColumnAttributes=function(t,e){void 0===e&&(e=1);var Q=this.numCols-e,r=this.getAttributeArray(t);if(0===r.length)return null;for(;r.length<Q;)r.push(r[r.length-1]);return r.length>Q&&r.splice(Q),r},e.prototype.getRowAttributes=function(t,e){void 0===e&&(e=1);var Q=this.numRows-e,r=this.getAttributeArray(t);if(0===r.length)return null;for(;r.length<Q;)r.push(r[r.length-1]);return r.length>Q&&r.splice(Q),r},e.prototype.getAttributeArray=function(t){var e=this.node.attributes.get(t);return e?s.split(e):[this.node.attributes.getDefault(t)]},e.prototype.addEm=function(t,e){var Q=this;return void 0===e&&(e=1),t?t.map((function(t){return Q.em(t/e)})):null},e.prototype.convertLengths=function(t){var e=this;return t?t.map((function(t){return e.length2em(t)})):null},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtdMixin=void 0,e.CommonMtdMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),Object.defineProperty(e.prototype,\"fixesPWidth\",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.invalidateBBox=function(){this.bboxComputed=!1},e.prototype.getWrapWidth=function(t){var e=this.parent.parent,Q=this.parent,r=this.node.childPosition()-(Q.labeled?1:0);return\"number\"==typeof e.cWidths[r]?e.cWidths[r]:e.getTableData().W[r]},e.prototype.getChildAlign=function(t){return this.node.attributes.get(\"columnalign\")},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonMtextMixin=void 0,e.CommonMtextMixin=function(t){var e;return(e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.getVariant=function(){var e=this.jax.options,Q=this.jax.math.outputData,r=(!!Q.merrorFamily||!!e.merrorFont)&&this.node.Parent.isKind(\"merror\");if(Q.mtextFamily||e.mtextFont||r){var T=this.node.attributes.get(\"mathvariant\"),n=this.constructor.INHERITFONTS[T]||this.jax.font.getCssFont(T),o=n[0]||(r?Q.merrorFamily||e.merrorFont:Q.mtextFamily||e.mtextFont);this.variant=this.explicitVariant(o,n[2]?\"bold\":\"\",n[1]?\"italic\":\"\")}else t.prototype.getVariant.call(this)},e}(t)).INHERITFONTS={normal:[\"\",!1,!1],bold:[\"\",!1,!0],italic:[\"\",!0,!1],\"bold-italic\":[\"\",!0,!0]},e}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t},i=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonScriptbaseMixin=void 0;e.CommonScriptbaseMixin=function(t){var e;return(e=function(t){function e(){for(var e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];var r=t.apply(this,o(e))||this,T=r.baseCore=r.childNodes[0];if(!T)return r;for(;1===T.childNodes.length&&(T.node.isKind(\"mrow\")||T.node.isKind(\"TeXAtom\")||T.node.isKind(\"mstyle\")||T.node.isKind(\"mpadded\")||T.node.isKind(\"mphantom\")||T.node.isKind(\"semantics\"));)if(!(T=T.childNodes[0]))return r;return\"noIC\"in T?(r.baseCore=T,r.constructor.useIC||(T.noIC=!0),r):r}return T(e,t),Object.defineProperty(e.prototype,\"baseChild\",{get:function(){return this.childNodes[this.node.base]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"script\",{get:function(){return this.childNodes[1]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var Q=this.baseChild.getBBox(),r=this.script.getBBox(),T=n(this.getOffset(Q,r),2),o=T[0],i=T[1];t.append(Q),t.combine(r,t.w+o,i),t.w+=this.font.params.scriptspace,t.clean(),this.setChildPWidths(e)},e.prototype.coreIC=function(){var t=this.baseCore.getBBox();return t.ic?1.05*t.ic+.05:0},e.prototype.coreScale=function(){for(var t=this.baseChild.getBBox().rscale,e=this.baseChild;(e.node.isKind(\"mstyle\")||e.node.isKind(\"mrow\")||e.node.isKind(\"TeXAtom\"))&&1===e.childNodes.length;)t*=(e=e.childNodes[0]).getBBox().rscale;return t},e.prototype.isCharBase=function(){for(var t=this.baseChild;(t.node.isKind(\"mstyle\")||t.node.isKind(\"mrow\"))&&1===t.childNodes.length;)t=t.childNodes[0];return(t.node.isKind(\"mo\")||t.node.isKind(\"mi\")||t.node.isKind(\"mn\"))&&1===t.bbox.rscale&&1===Array.from(t.getText()).length&&!t.node.attributes.get(\"largeop\")},e.prototype.getOffset=function(t,e){return[0,0]},e.prototype.getV=function(t,e){var Q=this.font.params,r=this.length2em(this.node.attributes.get(\"subscriptshift\"),Q.sub1);return Math.max(this.isCharBase()?0:t.d*t.rscale+Q.sub_drop*e.rscale,r,e.h*e.rscale-.8*Q.x_height)},e.prototype.getU=function(t,e){var Q=this.font.params,r=this.node.attributes.getList(\"displaystyle\",\"superscriptshift\"),T=this.node.getProperty(\"texprimestyle\")?Q.sup3:r.displaystyle?Q.sup1:Q.sup2,n=this.length2em(r.superscriptshift,T);return Math.max(this.isCharBase()?0:t.h*t.rscale-Q.sup_drop*e.rscale,n,e.d*e.rscale+1/4*Q.x_height)},e.prototype.hasMovableLimits=function(){var t=this.node.attributes.get(\"displaystyle\"),e=this.baseChild.coreMO().node;return!t&&!!e.attributes.get(\"movablelimits\")},e.prototype.getOverKU=function(t,e){var Q=this.node.attributes.get(\"accent\"),r=this.font.params,T=e.d*e.rscale,n=(Q?r.rule_thickness:Math.max(r.big_op_spacing1,r.big_op_spacing3-Math.max(0,T)))-(this.baseChild.node.isKind(\"munderover\")?.1:0);return[n,t.h*t.rscale+n+T]},e.prototype.getUnderKV=function(t,e){var Q=this.node.attributes.get(\"accentunder\"),r=this.font.params,T=e.h*e.rscale,n=(Q?r.rule_thickness:Math.max(r.big_op_spacing2,r.big_op_spacing4-T))-(this.baseChild.node.isKind(\"munderover\")?.1:0);return[n,-(t.d*t.rscale+n+T)]},e.prototype.getDeltaW=function(t,e){var Q,r,T,n;void 0===e&&(e=[0,0,0]);var a=this.node.attributes.get(\"align\"),s=t.map((function(t){return t.w*t.rscale})),l=Math.max.apply(Math,o(s)),c=[],u=0;try{for(var p=i(s.keys()),h=p.next();!h.done;h=p.next()){c[L=h.value]=(\"center\"===a?(l-s[L])/2:\"right\"===a?l-s[L]:0)+e[L],c[L]<u&&(u=-c[L])}}catch(t){Q={error:t}}finally{try{h&&!h.done&&(r=p.return)&&r.call(p)}finally{if(Q)throw Q.error}}if(u)try{for(var f=i(c.keys()),d=f.next();!d.done;d=f.next()){var L;c[L=d.value]+=u}}catch(t){T={error:t}}finally{try{d&&!d.done&&(n=f.return)&&n.call(f)}finally{if(T)throw T.error}}return c},e.prototype.getDelta=function(t){void 0===t&&(t=!1);var e=this.node.attributes.get(\"accent\")&&!t?this.baseChild.coreMO().bbox.sk:0;return(1.5*this.baseCore.bbox.ic/2+e)*this.coreScale()},e.prototype.stretchChildren=function(){var t,e,Q,r,T,n,o=[];try{for(var a=i(this.childNodes),s=a.next();!s.done;s=a.next()){(g=s.value).canStretch(2)&&o.push(g)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}var l=o.length,c=this.childNodes.length;if(l&&c>1){var u=0,p=l>1&&l===c;try{for(var h=i(this.childNodes),f=h.next();!f.done;f=h.next()){var d=0===(g=f.value).stretch.dir;if(p||d){var L=g.getBBox(d),H=L.w,m=L.rscale;H*m>u&&(u=H*m)}}}catch(t){Q={error:t}}finally{try{f&&!f.done&&(r=h.return)&&r.call(h)}finally{if(Q)throw Q.error}}try{for(var y=i(o),v=y.next();!v.done;v=y.next()){var g;(g=v.value).coreMO().getStretchedVariant([u/g.bbox.rscale])}}catch(t){T={error:t}}finally{try{v&&!v.done&&(n=y.return)&&n.call(y)}finally{if(T)throw T.error}}}},e}(t)).useIC=!1,e}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonSemanticsMixin=void 0,e.CommonSemanticsMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.computeBBox=function(t,e){if(void 0===e&&(e=!1),this.childNodes.length){var Q=this.childNodes[0].getBBox(),r=Q.w,T=Q.h,n=Q.d;t.w=r,t.h=T,t.d=n}},e}(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGWrapperFactory=void 0;var n=Q(169),o=Q(192),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.jax=null,e}return T(e,t),e.defaultNodes=o.SVGWrappers,e}(n.CommonWrapperFactory);e.SVGWrapperFactory=i},function(t,e,Q){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGWrappers=void 0;var T=Q(4),n=Q(193),o=Q(194),i=Q(195),a=Q(196),s=Q(197),l=Q(198),c=Q(199),u=Q(200),p=Q(201),h=Q(202),f=Q(203),d=Q(204),L=Q(95),H=Q(205),m=Q(206),y=Q(48),v=Q(208),g=Q(209),b=Q(210),M=Q(211),V=Q(212),x=Q(213),O=Q(214),_=Q(216),S=Q(217),E=Q(218),C=Q(219);e.SVGWrappers=((r={})[n.SVGmath.kind]=n.SVGmath,r[o.SVGmrow.kind]=o.SVGmrow,r[o.SVGinferredMrow.kind]=o.SVGinferredMrow,r[i.SVGmi.kind]=i.SVGmi,r[a.SVGmo.kind]=a.SVGmo,r[s.SVGmn.kind]=s.SVGmn,r[l.SVGms.kind]=l.SVGms,r[c.SVGmtext.kind]=c.SVGmtext,r[u.SVGmerror.kind]=u.SVGmerror,r[p.SVGmspace.kind]=p.SVGmspace,r[h.SVGmpadded.kind]=h.SVGmpadded,r[f.SVGmphantom.kind]=f.SVGmphantom,r[d.SVGmfrac.kind]=d.SVGmfrac,r[L.SVGmsqrt.kind]=L.SVGmsqrt,r[H.SVGmroot.kind]=H.SVGmroot,r[m.SVGmfenced.kind]=m.SVGmfenced,r[y.SVGmsub.kind]=y.SVGmsub,r[y.SVGmsup.kind]=y.SVGmsup,r[y.SVGmsubsup.kind]=y.SVGmsubsup,r[v.SVGmunder.kind]=v.SVGmunder,r[v.SVGmover.kind]=v.SVGmover,r[v.SVGmunderover.kind]=v.SVGmunderover,r[g.SVGmmultiscripts.kind]=g.SVGmmultiscripts,r[b.SVGmtable.kind]=b.SVGmtable,r[M.SVGmtr.kind]=M.SVGmtr,r[M.SVGmlabeledtr.kind]=M.SVGmlabeledtr,r[V.SVGmtd.kind]=V.SVGmtd,r[x.SVGmaction.kind]=x.SVGmaction,r[O.SVGmenclose.kind]=O.SVGmenclose,r[_.SVGsemantics.kind]=_.SVGsemantics,r[_.SVGannotation.kind]=_.SVGannotation,r[_.SVGannotationXML.kind]=_.SVGannotationXML,r[_.SVGxml.kind]=_.SVGxml,r[S.SVGmglyph.kind]=S.SVGmglyph,r[E.SVGTeXAtom.kind]=E.SVGTeXAtom,r[C.SVGTextNode.kind]=C.SVGTextNode,r[T.SVGWrapper.kind]=T.SVGWrapper,r)},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmath=void 0;var i=Q(4),a=Q(172),s=Q(59),l=Q(18),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(e){t.prototype.toSVG.call(this,e);var Q=this.adaptor;\"block\"===this.node.attributes.get(\"display\")&&(Q.setAttribute(this.jax.container,\"display\",\"true\"),this.handleDisplay()),this.jax.document.options.internalSpeechTitles&&this.handleSpeech()},e.prototype.handleDisplay=function(){var t=n(this.getAlignShift(),2),e=t[0],Q=t[1];if(\"center\"!==e&&this.adaptor.setAttribute(this.jax.container,\"justify\",e),this.bbox.pwidth===l.BBox.fullWidth){if(this.adaptor.setAttribute(this.jax.container,\"width\",\"full\"),this.jax.table){var r=this.jax.table.getBBox(),T=r.L,o=r.w,i=r.R;\"right\"===e?i=Math.max(i||-Q,-Q):\"left\"===e?T=Math.max(T||Q,Q):\"center\"===e&&(o+=2*Math.abs(Q)),this.jax.minwidth=Math.max(0,T+o+i)}}else this.jax.shift=Q},e.prototype.handleSpeech=function(){var t,e,Q=this.adaptor,r=this.node.attributes,T=r.get(\"aria-label\")||r.get(\"data-semantic-speech\");if(T){var n=this.getTitleID(),i=this.svg(\"title\",{id:n},[this.text(T)]);Q.insert(i,Q.firstChild(this.element)),Q.setAttribute(this.element,\"aria-labeledby\",n),Q.removeAttribute(this.element,\"aria-label\");try{for(var a=o(this.childNodes[0].childNodes),s=a.next();!s.done;s=a.next()){var l=s.value;Q.setAttribute(l.element,\"aria-hidden\",\"true\")}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}}},e.prototype.getTitleID=function(){return\"mjx-svg-title-\"+String(this.jax.options.titleID++)},e.prototype.setChildPWidths=function(e,Q,r){return void 0===Q&&(Q=null),void 0===r&&(r=!0),t.prototype.setChildPWidths.call(this,e,this.parent?Q:this.metrics.containerWidth/this.jax.pxPerEm,!1)},e.kind=s.MmlMath.prototype.kind,e.styles={'mjx-container[jax=\"SVG\"][display=\"true\"]':{display:\"block\",\"text-align\":\"center\",margin:\"1em 0\"},'mjx-container[jax=\"SVG\"][display=\"true\"][width=\"full\"]':{display:\"flex\"},'mjx-container[jax=\"SVG\"][justify=\"left\"]':{\"text-align\":\"left\"},'mjx-container[jax=\"SVG\"][justify=\"right\"]':{\"text-align\":\"right\"}},e}(a.CommonMathMixin(i.SVGWrapper));e.SVGmath=c},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGinferredMrow=e.SVGmrow=void 0;var n=Q(4),o=Q(93),i=Q(93),a=Q(64),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.node.isInferred?this.element=t:this.standardSVGnode(t);this.addChildren(e)},e.kind=a.MmlMrow.prototype.kind,e}(o.CommonMrowMixin(n.SVGWrapper));e.SVGmrow=s;var l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.kind=a.MmlInferredMrow.prototype.kind,e}(i.CommonInferredMrowMixin(s));e.SVGinferredMrow=l},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmi=void 0;var n=Q(4),o=Q(177),i=Q(38),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.kind=i.MmlMi.prototype.kind,e}(o.CommonMiMixin(n.SVGWrapper));e.SVGmi=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmo=void 0;var o=Q(4),i=Q(180),a=Q(31),s=Q(18),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(e){var Q=this.node.attributes,r=Q.get(\"symmetric\")&&2!==this.stretch.dir,T=0!==this.stretch.dir;T&&null===this.size&&this.getStretchedVariant([]);var n=this.standardSVGnode(e);if(T&&this.size<0)this.stretchSVG();else{if(r||Q.get(\"largeop\")){var o=s.BBox.empty();t.prototype.computeBBox.call(this,o);var i=this.fixed((o.d-o.h)/2+this.font.params.axis_height);\"0\"!==i&&this.adaptor.setAttribute(n,\"transform\",\"translate(0 \"+i+\")\")}this.addChildren(n)}},e.prototype.stretchSVG=function(){var t=this.stretch.stretch,e=this.getBBox();1===this.stretch.dir?this.stretchVertical(t,e):this.stretchHorizontal(t,e)},e.prototype.stretchVertical=function(t,e){var Q=e.h,r=e.d,T=e.w,o=this.addTop(t[0],Q,T),i=this.addBot(t[2],r,T);if(4===t.length){var a=n(this.addMidV(t[3],T),2),s=a[0],l=a[1];this.addExtV(t[1],Q,0,o,s,T),this.addExtV(t[1],0,r,l,i,T)}else this.addExtV(t[1],Q,r,o,i,T)},e.prototype.stretchHorizontal=function(t,e){var Q=e.w,r=this.addLeft(t[0]),T=this.addRight(t[2],Q);if(4===t.length){var o=n(this.addMidH(t[3],Q),2),i=o[0],a=o[1],s=Q/2;this.addExtH(t[1],s,r,s-i),this.addExtH(t[1],s,a-s,T,s)}else this.addExtH(t[1],Q,r,T)},e.prototype.getChar=function(t){var e=this.font.getChar(\"-size4\",t)||[0,0,0,null];return[e[0],e[1],e[2],e[3]||{}]},e.prototype.addGlyph=function(t,e,Q,r){return void 0===r&&(r=null),this.placeChar(t,e,Q,r||this.element,\"-size4\")},e.prototype.addTop=function(t,e,Q){if(!t)return 0;var r=n(this.getChar(t),3),T=r[0],o=r[1],i=r[2];return this.addGlyph(t,(Q-i)/2,e-T),T+o},e.prototype.addExtV=function(t,e,Q,r,T,o){var i=this;if(t){r=Math.max(0,r-.1),T=Math.max(0,T-.1);var a=this.adaptor,s=n(this.getChar(t),3),l=s[0],c=s[1],u=s[2],p=e+Q-r-T,h=1.5*p/(l+c),f=(h*(l-c)-p)/2;if(!(p<=0)){var d=this.svg(\"svg\",{width:this.fixed(u),height:this.fixed(p),y:this.fixed(T-Q),x:this.fixed((o-u)/2),viewBox:[0,f,u,p].map((function(t){return i.fixed(t)})).join(\" \")});this.addGlyph(t,0,0,d);var L=a.lastChild(d);a.setAttribute(L,\"transform\",\"scale(1, \"+this.jax.fixed(h)+\")\"),a.append(this.element,d)}}},e.prototype.addBot=function(t,e,Q){if(!t)return 0;var r=n(this.getChar(t),3),T=r[0],o=r[1],i=r[2];return this.addGlyph(t,(Q-i)/2,o-e),T+o},e.prototype.addMidV=function(t,e){if(!t)return[0,0];var Q=n(this.getChar(t),3),r=Q[0],T=Q[1],o=Q[2],i=(T-r)/2+this.font.params.axis_height;return this.addGlyph(t,(e-o)/2,i),[r+i,T-i]},e.prototype.addLeft=function(t){return t?this.addGlyph(t,0,0):0},e.prototype.addExtH=function(t,e,Q,r,T){var o=this;if(void 0===T&&(T=0),t){r=Math.max(0,r-.1),Q=Math.max(0,Q-.1);var i=n(this.getChar(t),3),a=i[0],s=i[1],l=i[2],c=e-Q-r,u=a+s+.2,p=c/l*1.5,h=-(s+.1);if(!(c<=0)){var f=this.svg(\"svg\",{width:this.fixed(c),height:this.fixed(u),x:this.fixed(T+Q),y:this.fixed(h),viewBox:[(p*l-c)/2,h,c,u].map((function(t){return o.fixed(t)})).join(\" \")});this.addGlyph(t,0,0,f);var d=this.adaptor.lastChild(f);this.adaptor.setAttribute(d,\"transform\",\"scale(\"+this.jax.fixed(p)+\", 1)\"),this.adaptor.append(this.element,f)}}},e.prototype.addRight=function(t,e){if(!t)return 0;var Q=this.getChar(t)[2];return this.addGlyph(t,e-Q,0)},e.prototype.addMidH=function(t,e){if(!t)return[0,0];var Q=this.getChar(t)[2];return this.addGlyph(t,(e-Q)/2,0),[(e-Q)/2,(e+Q)/2]},e.kind=a.MmlMo.prototype.kind,e}(i.CommonMoMixin(o.SVGWrapper));e.SVGmo=l},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmn=void 0;var n=Q(4),o=Q(179),i=Q(60),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.kind=i.MmlMn.prototype.kind,e}(o.CommonMnMixin(n.SVGWrapper));e.SVGmn=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGms=void 0;var n=Q(4),o=Q(183),i=Q(63),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.kind=i.MmlMs.prototype.kind,e}(o.CommonMsMixin(n.SVGWrapper));e.SVGms=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmtext=void 0;var n=Q(4),o=Q(188),i=Q(61),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.kind=i.MmlMtext.prototype.kind,e}(o.CommonMtextMixin(n.SVGWrapper));e.SVGmtext=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmerror=void 0;var n=Q(4),o=Q(68),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),Q=this.getBBox(),r=Q.h,T=Q.d,n=Q.w;this.adaptor.append(this.element,this.svg(\"rect\",{\"data-background\":!0,width:this.fixed(n),height:this.fixed(r+T),y:this.fixed(-T)}));var o=this.node.attributes.get(\"title\");o&&this.adaptor.append(this.element,this.svg(\"title\",{},[this.adaptor.text(o)])),this.addChildren(e)},e.kind=o.MmlMerror.prototype.kind,e.styles={'g[data-mml-node=\"merror\"] > g':{fill:\"red\",stroke:\"red\"},'g[data-mml-node=\"merror\"] > rect[data-background]':{fill:\"yellow\",stroke:\"none\"}},e}(n.SVGWrapper);e.SVGmerror=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmspace=void 0;var n=Q(4),o=Q(184),i=Q(62),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.kind=i.MmlMspace.prototype.kind,e}(o.CommonMspaceMixin(n.SVGWrapper));e.SVGmspace=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmpadded=void 0;var o=Q(4),i=Q(181),a=Q(69),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),Q=n(this.getDimens(),9),r=Q[5],T=Q[6],o=Q[7],i=Q[8],a=this.node.attributes.get(\"data-align\")||\"left\",s=T+i-(r<0&&\"left\"!==a?\"center\"===a?r/2:r:0);(s||o)&&(e=this.adaptor.append(e,this.svg(\"g\")),this.place(s,o,e)),this.addChildren(e)},e.kind=a.MmlMpadded.prototype.kind,e}(i.CommonMpaddedMixin(o.SVGWrapper));e.SVGmpadded=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmphantom=void 0;var n=Q(4),o=Q(70),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){this.standardSVGnode(t)},e.kind=o.MmlMphantom.prototype.kind,e}(n.SVGWrapper);e.SVGmphantom=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmfrac=void 0;var o=Q(4),i=Q(175),a=Q(65),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){this.standardSVGnode(t);var e=this.node.attributes.getList(\"linethickness\",\"bevelled\"),Q=e.linethickness,r=e.bevelled,T=this.isDisplay();if(r)this.makeBevelled(T);else{var n=this.length2em(String(Q),.06);0===n?this.makeAtop(T):this.makeFraction(T,n)}},e.prototype.makeFraction=function(t,e){var Q=this.element,r=this.node.attributes.getList(\"numalign\",\"denomalign\"),T=r.numalign,o=r.denomalign,i=n(this.childNodes,2),a=i[0],s=i[1],l=a.getBBox(),c=s.getBBox(),u=this.font.params,p=u.axis_height,h=this.node.getProperty(\"withDelims\")?0:u.nulldelimiterspace,f=Math.max((l.L+l.w+l.R)*l.rscale,(c.L+c.w+c.R)*c.rscale),d=this.getAlignX(f,l,T)+.1+h,L=this.getAlignX(f,c,o)+.1+h,H=this.getTUV(t,e),m=H.T,y=H.u,v=H.v;a.toSVG(Q),a.place(d,p+m+Math.max(l.d*l.rscale,y)),s.toSVG(Q),s.place(L,p-m-Math.max(c.h*c.rscale,v)),this.adaptor.append(Q,this.svg(\"rect\",{width:this.fixed(f+.2),height:this.fixed(e),x:this.fixed(h),y:this.fixed(p-e/2)}))},e.prototype.makeAtop=function(t){var e=this.element,Q=this.node.attributes.getList(\"numalign\",\"denomalign\"),r=Q.numalign,T=Q.denomalign,o=n(this.childNodes,2),i=o[0],a=o[1],s=i.getBBox(),l=a.getBBox(),c=this.font.params,u=this.node.getProperty(\"withDelims\")?0:c.nulldelimiterspace,p=Math.max((s.L+s.w+s.R)*s.rscale,(l.L+l.w+l.R)*l.rscale),h=this.getAlignX(p,s,r)+u,f=this.getAlignX(p,l,T)+u,d=this.getUVQ(t),L=d.u,H=d.v;i.toSVG(e),i.place(h,L),a.toSVG(e),a.place(f,-H)},e.prototype.makeBevelled=function(t){var e=this.element,Q=n(this.childNodes,2),r=Q[0],T=Q[1],o=this.getBevelData(t),i=o.u,a=o.v,s=o.delta,l=o.nbox,c=o.dbox,u=(l.L+l.w+l.R)*l.rscale;r.toSVG(e),this.bevel.toSVG(e),T.toSVG(e),r.place(l.L*l.rscale,i),this.bevel.place(u-s/2,0),T.place(u+this.bevel.getBBox().w+c.L*c.rscale-s,a)},e.kind=a.MmlMfrac.prototype.kind,e}(i.CommonMfracMixin(o.SVGWrapper));e.SVGmfrac=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmroot=void 0;var o=Q(95),i=Q(182),a=Q(67),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.addRoot=function(t,e,Q,r){e.toSVG(t);var T=n(this.getRootDimens(Q,r),3),o=T[0],i=T[1],a=T[2],s=e.getBBox();e.place(a*s.rscale,i),this.dx=o},e.kind=a.MmlMroot.prototype.kind,e}(i.CommonMrootMixin(o.SVGmsqrt));e.SVGmroot=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmfenced=void 0;var o=Q(4),i=Q(174),a=Q(71),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t);this.setChildrenParent(this.mrow),this.mrow.toSVG(e),this.setChildrenParent(this)},e.prototype.setChildrenParent=function(t){var e,Q;try{for(var r=n(this.childNodes),T=r.next();!T.done;T=r.next()){T.value.parent=t}}catch(t){e={error:t}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(e)throw e.error}}},e.kind=a.MmlMfenced.prototype.kind,e}(i.CommonMfencedMixin(o.SVGWrapper));e.SVGmfenced=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGscriptbase=void 0;var o=Q(4),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),Q=this.baseChild.getBBox(),r=this.script.getBBox(),T=n(this.getOffset(Q,r),2),o=T[0],i=T[1];this.baseChild.toSVG(e),this.script.toSVG(e),this.script.place(Q.w*Q.rscale+o,i)},e.kind=\"scriptbase\",e.useIC=!1,e}(Q(189).CommonScriptbaseMixin(o.SVGWrapper));e.SVGscriptbase=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmunderover=e.SVGmover=e.SVGmunder=void 0;var o=Q(48),i=Q(47),a=Q(47),s=Q(47),l=Q(74),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(e){if(this.hasMovableLimits())t.prototype.toSVG.call(this,e);else{var Q=this.standardSVGnode(e),r=n([this.baseChild,this.script],2),T=r[0],o=r[1],i=n([T.getBBox(),o.getBBox()],2),a=i[0],s=i[1];T.toSVG(Q),o.toSVG(Q);var l=this.getDelta(!0),c=this.getUnderKV(a,s)[1],u=n(this.getDeltaW([a,s],[0,-l]),2),p=u[0],h=u[1];T.place(p,0),o.place(h,c)}},e.kind=l.MmlMunder.prototype.kind,e.useIC=!0,e}(i.CommonMunderMixin(o.SVGmsub));e.SVGmunder=c;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(e){if(this.hasMovableLimits())t.prototype.toSVG.call(this,e);else{var Q=this.standardSVGnode(e),r=n([this.baseChild,this.script],2),T=r[0],o=r[1],i=n([T.getBBox(),o.getBBox()],2),a=i[0],s=i[1];T.toSVG(Q),o.toSVG(Q);var l=this.getDelta(),c=this.getOverKU(a,s)[1],u=n(this.getDeltaW([a,s],[0,l]),2),p=u[0],h=u[1];T.place(p,0),o.place(h,c)}},e.kind=l.MmlMover.prototype.kind,e.useIC=!0,e}(a.CommonMoverMixin(o.SVGmsup));e.SVGmover=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(e){if(this.hasMovableLimits())t.prototype.toSVG.call(this,e);else{var Q=this.standardSVGnode(e),r=n([this.baseChild,this.overChild,this.underChild],3),T=r[0],o=r[1],i=r[2],a=n([T.getBBox(),o.getBBox(),i.getBBox()],3),s=a[0],l=a[1],c=a[2];T.toSVG(Q),i.toSVG(Q),o.toSVG(Q);var u=this.getDelta(),p=this.getOverKU(s,l)[1],h=this.getUnderKV(s,c)[1],f=n(this.getDeltaW([s,c,l],[0,-u,u]),3),d=f[0],L=f[1],H=f[2];T.place(d,0),i.place(L,h),o.place(H,p)}},e.kind=l.MmlMunderover.prototype.kind,e.useIC=!0,e}(s.CommonMunderoverMixin(o.SVGmsubsup));e.SVGmunderover=p},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmmultiscripts=void 0;var o=Q(48),i=Q(178),a=Q(75),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),Q=this.getScriptData(),r=this.combinePrePost(Q.sub,Q.psub),T=this.combinePrePost(Q.sup,Q.psup),o=n(this.getUVQ(Q.base,r,T),2),i=o[0],a=o[1],s=0;Q.numPrescripts&&(s=this.addScripts(.05,i,a,!0,this.firstPrescript,Q.numPrescripts));var l=this.baseChild;l.toSVG(e),l.place(s,0),s+=l.getBBox().w,Q.numScripts&&this.addScripts(s,i,a,!1,1,Q.numScripts)},e.prototype.addScripts=function(t,e,Q,r,T,o){var i=this.adaptor,a=i.append(this.element,this.svg(\"g\")),s=i.append(this.element,this.svg(\"g\"));this.place(t,e,a),this.place(t,Q,s);for(var l=T+2*o,c=0;T<l;){var u=n([this.childNodes[T++],this.childNodes[T++]],2),p=u[0],h=u[1],f=n([p.getBBox(),h.getBBox()],2),d=f[0],L=f[1],H=n([d.rscale,L.rscale],2),m=H[0],y=H[1],v=Math.max(d.w*m,L.w*y);p.toSVG(s),h.toSVG(a),p.place(c+(r?v-d.w*m:0),0),h.place(c+(r?v-L.w*y:0),0),c+=v}return t+c},e.kind=a.MmlMmultiscripts.prototype.kind,e}(i.CommonMmultiscriptsMixin(o.SVGmsubsup));e.SVGmmultiscripts=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmtable=void 0;var i=Q(4),a=Q(186),s=Q(76),l=function(t){function e(e,Q,r){void 0===r&&(r=null);var T=t.call(this,e,Q,r)||this,n={\"data-labels\":!0};return T.isTop&&(n.transform=\"matrix(1 0 0 -1 0 0)\"),T.labels=T.svg(\"g\",n),T}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t);this.placeRows(e),this.handleColumnLines(e),this.handleRowLines(e),this.handleFrame(e);var Q=this.handlePWidth(e);this.handleLabels(e,t,Q)},e.prototype.placeRows=function(t){for(var e,Q,r,T=this.node.attributes.get(\"equalrows\"),i=this.getTableData(),a=i.H,s=i.D,l=this.getEqualRowHeight(),c=this.getRowHalfSpacing(),u=o([this.fLine],this.rLines,[this.fLine]),p=this.getBBox().h-u[0],h=0;h<this.numRows;h++){var f=this.childNodes[h];e=n(this.getRowHD(T,l,a[h],s[h]),2),f.H=e[0],f.D=e[1],Q=n([c[h],c[h+1]],2),f.tSpace=Q[0],f.bSpace=Q[1],r=n([u[h],u[h+1]],2),f.tLine=r[0],f.bLine=r[1],f.toSVG(t),f.place(0,p-c[h]-f.H),p-=c[h]+f.H+f.D+c[h+1]+u[h+1]}},e.prototype.getRowHD=function(t,e,Q,r){return t?[(e+Q-r)/2,(e-Q+r)/2]:[Q,r]},e.prototype.handleColor=function(){t.prototype.handleColor.call(this);var e=this.adaptor.firstChild(this.element);e&&this.adaptor.setAttribute(e,\"width\",this.fixed(this.getWidth()))},e.prototype.handleColumnLines=function(t){if(\"none\"!==this.node.attributes.get(\"columnlines\")){var e=this.getColumnAttributes(\"columnlines\");if(e)for(var Q=this.getColumnHalfSpacing(),r=this.cLines,T=this.getComputedWidths(),n=this.fLine,o=0;o<e.length;o++)n+=Q[o]+T[o]+Q[o+1],\"none\"!==e[o]&&this.adaptor.append(t,this.makeVLine(n,e[o],r[o])),n+=r[o]}},e.prototype.handleRowLines=function(t){if(\"none\"!==this.node.attributes.get(\"rowlines\")){var e=this.getRowAttributes(\"rowlines\");if(e)for(var Q=this.node.attributes.get(\"equalrows\"),r=this.getTableData(),T=r.H,o=r.D,i=this.getEqualRowHeight(),a=this.getRowHalfSpacing(),s=this.rLines,l=this.getBBox().h-this.fLine,c=0;c<e.length;c++){var u=n(this.getRowHD(Q,i,T[c],o[c]),2),p=u[0],h=u[1];l-=a[c]+p+h+a[c+1],\"none\"!==e[c]&&this.adaptor.append(t,this.makeHLine(l,e[c],s[c])),l-=s[c]}}},e.prototype.handleFrame=function(t){if(this.frame){var e=this.getBBox(),Q=e.h,r=e.d,T=e.w,n=this.node.attributes.get(\"frame\");this.adaptor.append(t,this.makeFrame(T,Q,r,n))}},e.prototype.handlePWidth=function(t){if(!this.pWidth)return 0;var e=this.getBBox(),Q=e.w,r=e.L,T=e.R,n=r+this.pWidth+T,o=this.getAlignShift()[0],i=Math.max(this.isTop?n:0,this.container.getWrapWidth(this.containerI))-r-T,a=Q-(this.pWidth>i?i:this.pWidth),s=\"left\"===o?0:\"right\"===o?a:a/2;if(s){var l=this.svg(\"g\",{},this.adaptor.childNodes(t));this.place(s,0,l),this.adaptor.append(t,l)}return s},e.prototype.lineClass=function(t){return\"mjx-\"+t},e.prototype.makeFrame=function(t,e,Q,r){var T=this.fLine;return this.svg(\"rect\",this.setLineThickness(T,r,{\"data-frame\":!0,class:this.lineClass(r),width:this.fixed(t-T),height:this.fixed(e+Q-T),x:this.fixed(T/2),y:this.fixed(T/2-Q)}))},e.prototype.makeVLine=function(t,e,Q){var r=this.getBBox(),T=r.h,n=r.d,o=\"dotted\"===e?Q/2:0,i=this.fixed(t+Q/2);return this.svg(\"line\",this.setLineThickness(Q,e,{\"data-line\":\"v\",class:this.lineClass(e),x1:i,y1:this.fixed(o-n),x2:i,y2:this.fixed(T-o)}))},e.prototype.makeHLine=function(t,e,Q){var r=this.getBBox().w,T=\"dotted\"===e?Q/2:0,n=this.fixed(t-Q/2);return this.svg(\"line\",this.setLineThickness(Q,e,{\"data-line\":\"h\",class:this.lineClass(e),x1:this.fixed(T),y1:n,x2:this.fixed(r-T),y2:n}))},e.prototype.setLineThickness=function(t,e,Q){return.07!==t&&(Q[\"stroke-thickness\"]=this.fixed(t),\"solid\"!==e&&(Q[\"stroke-dasharray\"]=(\"dotted\"===e?\"0,\":\"\")+this.fixed(2*t))),Q},e.prototype.handleLabels=function(t,e,Q){if(this.hasLabels){var r=this.labels,T=this.node.attributes.get(\"side\");this.spaceLabels(),this.isTop?this.topTable(t,r,T):this.subTable(t,r,T,Q)}},e.prototype.spaceLabels=function(){for(var t=this.adaptor,e=this.getBBox().h,Q=this.getTableData().L,r=this.getRowHalfSpacing(),T=e-this.fLine,n=t.firstChild(this.labels),o=0;o<this.numRows;o++){var i=this.childNodes[o];if(i.node.isKind(\"mlabeledtr\")){var a=i.childNodes[0];T-=r[o]+i.H,i.placeCell(a,{x:0,y:T,w:Q,lSpace:0,rSpace:0,lLine:0,rLine:0}),T-=i.D+r[o+1]+this.rLines[o],n=t.next(n)}else T-=r[o]+i.H+i.D+r[o+1]+this.rLines[o]}},e.prototype.topTable=function(t,e,Q){var r=this.adaptor,T=this.getBBox(),o=T.h,i=T.d,a=T.w,s=T.L,l=T.R,c=s+(this.pWidth||a)+l,u=this.getTableData().L,p=n(this.getPadAlignShift(Q),3),h=p[1],f=p[2]+(\"right\"===h?-c:\"center\"===h?-c/2:0)+s,d=\"matrix(1 0 0 -1 0 0)\",L=\"scale(\"+this.jax.fixed(1e3*this.font.params.x_height/this.metrics.ex,2)+\")\",H=\"translate(0 \"+this.fixed(o)+\") \"+d+\" \"+L,m=this.svg(\"svg\",{\"data-table\":!0,preserveAspectRatio:\"left\"===h?\"xMinYMid\":\"right\"===h?\"xMaxYMid\":\"xMidYMid\",viewBox:[this.fixed(-f),this.fixed(-o),1,this.fixed(o+i)].join(\" \")},[this.svg(\"g\",{transform:d},r.childNodes(t))]);e=this.svg(\"svg\",{\"data-labels\":!0,preserveAspectRatio:\"left\"===Q?\"xMinYMid\":\"xMaxYMid\",viewBox:[\"left\"===Q?0:this.fixed(u),this.fixed(-o),1,this.fixed(o+i)].join(\" \")},[e]),r.append(t,this.svg(\"g\",{transform:H},[m,e])),this.place(-s,0,t)},e.prototype.subTable=function(t,e,Q,r){var T=this.adaptor,n=this.getBBox(),o=n.w,i=n.L,a=n.R,s=i+(this.pWidth||o)+a,l=this.getTableData().L,c=this.getAlignShift()[0],u=Math.max(s,this.container.getWrapWidth(this.containerI));this.place(\"left\"===Q?(\"left\"===c?0:\"right\"===c?s-u+r:(s-u)/2+r)-i:(\"left\"===c?u:\"right\"===c?s+r:(u+s)/2+r)-i-l,0,e),T.append(t,e)},e.kind=s.MmlMtable.prototype.kind,e.styles={'g[data-mml-node=\"mtable\"] > line[data-line]':{\"stroke-width\":\"70px\",fill:\"none\"},'g[data-mml-node=\"mtable\"] > rect[data-frame]':{\"stroke-width\":\"70px\",fill:\"none\"},'g[data-mml-node=\"mtable\"] > .mjx-dashed':{\"stroke-dasharray\":\"140\"},'g[data-mml-node=\"mtable\"] > .mjx-dotted':{\"stroke-linecap\":\"round\",\"stroke-dasharray\":\"0,140\"},'g[data-mml-node=\"mtable\"] > g > svg':{overflow:\"visible\"}},e}(a.CommonMtableMixin(i.SVGWrapper));e.SVGmtable=l},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(n(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmlabeledtr=e.SVGmtr=void 0;var i=Q(4),a=Q(94),s=Q(94),l=Q(77),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t);this.placeCells(e),this.placeColor()},e.prototype.placeCells=function(t){for(var e=this.parent.getColumnHalfSpacing(),Q=o([this.parent.fLine],this.parent.cLines,[this.parent.fLine]),r=this.parent.getComputedWidths(),T=Q[0],n=0;n<this.numCells;n++){var i=this.getChild(n);i.toSVG(t),T+=this.placeCell(i,{x:T,y:0,lSpace:e[n],rSpace:e[n+1],w:r[n],lLine:Q[n],rLine:Q[n+1]})}},e.prototype.placeCell=function(t,e){var Q=e.x,r=e.y,T=e.lSpace,o=e.w,i=e.rSpace,a=e.lLine,s=e.rLine,l=n(t.placeCell(Q+T,r,o,this.H,this.D),2),c=l[0],u=l[1],p=T+o+i,h=n([this.H+this.tSpace,this.D+this.bSpace],2),f=h[0],d=h[1];return t.placeColor(-(c+T+a/2),-(d+this.bLine/2+u),p+(a+s)/2,f+d+(this.tLine+this.bLine)/2),p+s},e.prototype.placeColor=function(){var t=this.adaptor,e=t.firstChild(this.element);if(e&&\"rect\"===t.kind(e)&&t.getAttribute(e,\"data-bgcolor\")){var Q=n([this.tLine/2,this.bLine/2],2),r=Q[0],T=Q[1],o=n([this.tSpace,this.bSpace],2),i=o[0],a=o[1],s=n([this.H,this.D],2),l=s[0],c=s[1];t.setAttribute(e,\"y\",this.fixed(-(c+a+T))),t.setAttribute(e,\"width\",this.fixed(this.parent.getWidth())),t.setAttribute(e,\"height\",this.fixed(r+i+l+c+a+T))}},e.kind=l.MmlMtr.prototype.kind,e}(a.CommonMtrMixin(i.SVGWrapper));e.SVGmtr=c;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(e){t.prototype.toSVG.call(this,e);var Q=this.childNodes[0];Q&&Q.toSVG(this.parent.labels)},e.kind=l.MmlMlabeledtr.prototype.kind,e}(s.CommonMlabeledtrMixin(c));e.SVGmlabeledtr=u},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmtd=void 0;var n=Q(4),o=Q(187),i=Q(78),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.placeCell=function(t,e,Q,r,T){var n=this.getBBox(),o=Math.max(n.h,.75),i=Math.max(n.d,.25),a=this.node.attributes.get(\"columnalign\"),s=this.node.attributes.get(\"rowalign\"),l=this.getAlignX(Q,n,a),c=this.getAlignY(r,T,o,i,s);return this.place(t+l,e+c),[l,c]},e.prototype.placeColor=function(t,e,Q,r){var T=this.adaptor,n=T.firstChild(this.element);n&&\"rect\"===T.kind(n)&&T.getAttribute(n,\"data-bgcolor\")&&(T.setAttribute(n,\"x\",this.fixed(t)),T.setAttribute(n,\"y\",this.fixed(e)),T.setAttribute(n,\"width\",this.fixed(Q)),T.setAttribute(n,\"height\",this.fixed(r)))},e.kind=i.MmlMtd.prototype.kind,e}(o.CommonMtdMixin(n.SVGWrapper));e.SVGmtd=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmaction=void 0;var n=Q(4),o=Q(92),i=Q(92),a=Q(73),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),Q=this.selected,r=Q.getBBox(),T=r.h,n=r.d,o=r.w;this.adaptor.append(this.element,this.svg(\"rect\",{width:this.fixed(o),height:this.fixed(T+n),y:this.fixed(-n),fill:\"none\",\"pointer-events\":\"all\"})),Q.toSVG(e),this.action(this,this.data)},e.prototype.setEventHandler=function(t,e){this.element.addEventListener(t,e)},e.kind=a.MmlMaction.prototype.kind,e.styles={'[jax=\"SVG\"] mjx-tool':{display:\"inline-block\",position:\"relative\",width:0,height:0},'[jax=\"SVG\"] mjx-tool > mjx-tip':{position:\"absolute\",top:0,left:0},\"mjx-tool > mjx-tip\":{display:\"inline-block\",padding:\".2em\",border:\"1px solid #888\",\"font-size\":\"70%\",\"background-color\":\"#F8F8F8\",color:\"black\",\"box-shadow\":\"2px 2px 5px #AAAAAA\"},'g[data-mml-node=\"maction\"][data-toggle]':{cursor:\"pointer\"},\"mjx-status\":{display:\"block\",position:\"fixed\",left:\"1em\",bottom:\"1em\",\"min-width\":\"25%\",padding:\".2em .4em\",border:\"1px solid #888\",\"font-size\":\"90%\",\"background-color\":\"#F8F8F8\",color:\"black\"}},e.actions=new Map([[\"toggle\",[function(t,e){t.adaptor.setAttribute(t.element,\"data-toggle\",t.node.attributes.get(\"selection\"));var Q=t.factory.jax.math,r=t.factory.jax.document,T=t.node;t.setEventHandler(\"click\",(function(t){Q.end.node||(Q.start.node=Q.end.node=Q.typesetRoot,Q.start.n=Q.end.n=0),T.nextToggleSelection(),Q.rerender(r),t.stopPropagation()}))},{}]],[\"tooltip\",[function(t,e){var Q=t.childNodes[1];if(Q){var r=t.adaptor.firstChild(t.element);if(Q.node.isKind(\"mtext\")){var T=Q.node.getText();t.adaptor.insert(t.svg(\"title\",{},[t.text(T)]),r)}else{var n=t.adaptor,o=t.jax.container,i=t.node.factory.create(\"math\",{},[t.childNodes[1].node]),a=t.html(\"mjx-tool\",{},[t.html(\"mjx-tip\")]),s=n.append(r,t.svg(\"foreignObject\",{style:{display:\"none\"}},[a]));t.jax.processMath(i,n.firstChild(a)),t.childNodes[1].node.parent=t.node,t.setEventHandler(\"mouseover\",(function(Q){e.stopTimers(t,e),e.hoverTimer.set(t,setTimeout((function(){n.setStyle(a,\"left\",\"0\"),n.setStyle(a,\"top\",\"0\"),n.append(o,a);var e=n.nodeBBox(a),Q=n.nodeBBox(t.element),r=(Q.right-e.left)/t.metrics.em+t.dx,T=(Q.bottom-e.bottom)/t.metrics.em+t.dy;n.setStyle(a,\"left\",t.px(r)),n.setStyle(a,\"top\",t.px(T))}),e.postDelay)),Q.stopPropagation()})),t.setEventHandler(\"mouseout\",(function(Q){e.stopTimers(t,e);var r=setTimeout((function(){return n.append(s,a)}),e.clearDelay);e.clearTimer.set(t,r),Q.stopPropagation()}))}}},i.TooltipData]],[\"statusline\",[function(t,e){var Q=t.childNodes[1];if(Q&&Q.node.isKind(\"mtext\")){var r=t.adaptor,T=Q.node.getText();r.setAttribute(t.element,\"data-statusline\",T),t.setEventHandler(\"mouseover\",(function(Q){if(null===e.status){var n=r.body(r.document);e.status=r.append(n,t.html(\"mjx-status\",{},[t.text(T)]))}Q.stopPropagation()})),t.setEventHandler(\"mouseout\",(function(t){e.status&&(r.remove(e.status),e.status=null),t.stopPropagation()}))}},{status:null}]]]),e}(o.CommonMactionMixin(n.SVGWrapper));e.SVGmaction=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmenclose=void 0;var i=Q(4),a=Q(173),s=Q(215),l=Q(72),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e,Q,r=this.standardSVGnode(t),T=this.getBBoxExtenders()[3],o={};T>0&&(o.transform=\"translate(\"+this.fixed(T)+\", 0)\");var i=this.adaptor.append(r,this.svg(\"g\",o));this.renderChild?this.renderChild(this,i):this.childNodes[0].toSVG(i);try{for(var a=n(Object.keys(this.notations)),s=a.next();!s.done;s=a.next()){var l=s.value,c=this.notations[l];!c.renderChild&&c.renderer(this,r)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(Q=a.return)&&Q.call(a)}finally{if(e)throw e.error}}},e.prototype.arrow=function(t,e,Q){void 0===Q&&(Q=!1);var r=this.getBBox(),T=r.w,n=(t-T)/2,i=(r.h-r.d)/2,a=this.thickness,s=a/2,l=o([a*this.arrowhead.x,a*this.arrowhead.y,a*this.arrowhead.dx],3),c=l[0],u=l[1],p=l[2],h=Q?this.fill(\"M\",T+n,i,\"l\",-(c+p),u,\"l\",p,s-u,\"L\",c-n,i+s,\"l\",p,u-s,\"l\",-(c+p),-u,\"l\",c+p,-u,\"l\",-p,u-s,\"L\",T+n-c,i-s,\"l\",-p,s-u,\"Z\"):this.fill(\"M\",T+n,i,\"l\",-(c+p),u,\"l\",p,s-u,\"L\",-n,i+s,\"l\",0,-a,\"L\",T+n-c,i-s,\"l\",-p,s-u,\"Z\");if(e){var f=this.jax.fixed(180*-e/Math.PI);this.adaptor.setAttribute(h,\"transform\",\"rotate(\"+[f,this.fixed(T/2),this.fixed(i)].join(\" \")+\")\")}return h},e.prototype.line=function(t){var e=o(t,4),Q=e[0],r=e[1],T=e[2],n=e[3];return this.svg(\"line\",{x1:this.fixed(Q),y1:this.fixed(r),x2:this.fixed(T),y2:this.fixed(n),\"stroke-width\":this.fixed(this.thickness)})},e.prototype.box=function(t,e,Q,r){void 0===r&&(r=0);var T=this.thickness,n={x:this.fixed(T/2),y:this.fixed(T/2-Q),width:this.fixed(t-T),height:this.fixed(e+Q-T),fill:\"none\",\"stroke-width\":this.fixed(T)};return r&&(n.rx=this.fixed(r)),this.svg(\"rect\",n)},e.prototype.ellipse=function(t,e,Q){var r=this.thickness;return this.svg(\"ellipse\",{rx:this.fixed((t-r)/2),ry:this.fixed((e+Q-r)/2),cx:this.fixed(t/2),cy:this.fixed((e-Q)/2),fill:\"none\",\"stroke-width\":this.fixed(r)})},e.prototype.path=function(t){for(var e=this,Q=[],r=1;r<arguments.length;r++)Q[r-1]=arguments[r];return this.svg(\"path\",{d:Q.map((function(t){return\"string\"==typeof t?t:e.fixed(t)})).join(\" \"),style:{\"stroke-width\":this.fixed(this.thickness)},\"stroke-linecap\":\"round\",\"stroke-linejoin\":t,fill:\"none\"})},e.prototype.fill=function(){for(var t=this,e=[],Q=0;Q<arguments.length;Q++)e[Q]=arguments[Q];return this.svg(\"path\",{d:e.map((function(e){return\"string\"==typeof e?e:t.fixed(e)})).join(\" \")})},e.kind=l.MmlMenclose.prototype.kind,e.notations=new Map([s.Border(\"top\"),s.Border(\"right\"),s.Border(\"bottom\"),s.Border(\"left\"),s.Border2(\"actuarial\",\"top\",\"right\"),s.Border2(\"madruwb\",\"bottom\",\"right\"),s.DiagonalStrike(\"up\"),s.DiagonalStrike(\"down\"),[\"horizontalstrike\",{renderer:s.RenderLine(\"horizontal\"),bbox:function(t){return[0,t.padding,0,t.padding]}}],[\"verticalstrike\",{renderer:s.RenderLine(\"vertical\"),bbox:function(t){return[t.padding,0,t.padding,0]}}],[\"box\",{renderer:function(t,e){var Q=t.getBBox(),r=Q.w,T=Q.h,n=Q.d;t.adaptor.append(t.element,t.box(r,T,n))},bbox:s.fullBBox,border:s.fullBorder,remove:\"left right top bottom\"}],[\"roundedbox\",{renderer:function(t,e){var Q=t.getBBox(),r=Q.w,T=Q.h,n=Q.d,o=t.thickness+t.padding;t.adaptor.append(t.element,t.box(r,T,n,o))},bbox:s.fullBBox}],[\"circle\",{renderer:function(t,e){var Q=t.getBBox(),r=Q.w,T=Q.h,n=Q.d;t.adaptor.append(t.element,t.ellipse(r,T,n))},bbox:s.fullBBox}],[\"phasorangle\",{renderer:function(t,e){var Q=t.getBBox(),r=Q.w,T=Q.h,n=Q.d,o=t.getArgMod(1.75*t.padding,T+n)[0],i=t.thickness/2,a=T+n,s=Math.cos(o);t.adaptor.append(t.element,t.path(\"mitre\",\"M\",r,i-n,\"L\",i+s*i,i-n,\"L\",s*a+i,a-n-i))},bbox:function(t){var e=t.padding/2,Q=t.thickness;return[2*e,e,e+Q,3*e+Q]},border:function(t){return[0,0,t.thickness,0]},remove:\"bottom\"}],s.Arrow(\"up\"),s.Arrow(\"down\"),s.Arrow(\"left\"),s.Arrow(\"right\"),s.Arrow(\"updown\"),s.Arrow(\"leftright\"),s.DiagonalArrow(\"updiagonal\"),s.DiagonalArrow(\"northeast\"),s.DiagonalArrow(\"southeast\"),s.DiagonalArrow(\"northwest\"),s.DiagonalArrow(\"southwest\"),s.DiagonalArrow(\"northeastsouthwest\"),s.DiagonalArrow(\"northwestsoutheast\"),[\"longdiv\",{renderer:function(t,e){var Q=t.getBBox(),r=Q.w,T=Q.h,n=Q.d,o=t.thickness/2,i=t.padding;t.adaptor.append(t.element,t.path(\"round\",\"M\",o,o-n,\"a\",i-o/2,(T+n)/2-4*o,0,\"0,1\",0,T+n-2*o,\"L\",r-o,T-o))},bbox:function(t){var e=t.padding,Q=t.thickness;return[e+Q,e,e,2*e+Q/2]}}],[\"radical\",{renderer:function(t,e){t.msqrt.toSVG(e);var Q=t.sqrtTRBL()[3];t.place(-Q,0,e)},init:function(t){t.msqrt=t.createMsqrt(t.childNodes[0])},bbox:function(t){return t.sqrtTRBL()},renderChild:!0}]]),e}(a.CommonMencloseMixin(i.SVGWrapper));e.SVGmenclose=c},function(t,e,Q){\"use strict\";var r=this&&this.__createBinding||(Object.create?function(t,e,Q,r){void 0===r&&(r=Q),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[Q]}})}:function(t,e,Q,r){void 0===r&&(r=Q),t[r]=e[Q]}),T=this&&this.__exportStar||function(t,e){for(var Q in t)\"default\"===Q||e.hasOwnProperty(Q)||r(e,t,Q)};Object.defineProperty(e,\"__esModule\",{value:!0}),e.Arrow=e.DiagonalArrow=e.DiagonalStrike=e.Border2=e.Border=e.RenderLine=e.lineData=e.computeLineData=void 0;var n=Q(45);T(Q(45),e),e.computeLineData={top:function(t,e,Q,r){return[0,t-r,Q,t-r]},right:function(t,e,Q,r){return[Q-r,-e,Q-r,t]},bottom:function(t,e,Q,r){return[0,r-e,Q,r-e]},left:function(t,e,Q,r){return[r,-e,r,t]},vertical:function(t,e,Q,r){return[Q/2-r,t,Q/2-r,-e]},horizontal:function(t,e,Q,r){return[0,(t-e)/2-r,Q,(t-e)/2-r]},up:function(t,e,Q,r){return[r,r-e,Q-r,t-r]},down:function(t,e,Q,r){return[r,t-r,Q-r,r-e]}},e.lineData=function(t,Q){var r=t.getBBox(),T=r.h,n=r.d,o=r.w,i=t.thickness/2;return e.computeLineData[Q](T,n,o,i)},e.RenderLine=function(t){return function(Q,r){Q.adaptor.append(Q.element,Q.line(e.lineData(Q,t)))}},e.Border=function(t){return n.CommonBorder((function(Q,r){Q.adaptor.append(Q.element,Q.line(e.lineData(Q,t)))}))(t)},e.Border2=function(t,Q,r){return n.CommonBorder2((function(t,T){t.adaptor.append(t.element,t.line(e.lineData(t,Q))),t.adaptor.append(t.element,t.line(e.lineData(t,r)))}))(t,Q,r)},e.DiagonalStrike=function(t){return n.CommonDiagonalStrike((function(Q){return function(Q,r){Q.adaptor.append(Q.element,Q.line(e.lineData(Q,t)))}}))(t)},e.DiagonalArrow=function(t){return n.CommonDiagonalArrow((function(t,e){t.adaptor.append(t.element,e)}))(t)},e.Arrow=function(t){return n.CommonArrow((function(t,e){t.adaptor.append(t.element,e)}))(t)}},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGxml=e.SVGannotationXML=e.SVGannotation=e.SVGsemantics=void 0;var n=Q(4),o=Q(190),i=Q(80),a=Q(0),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t);this.childNodes.length&&this.childNodes[0].toSVG(e)},e.kind=i.MmlSemantics.prototype.kind,e}(o.CommonSemanticsMixin(n.SVGWrapper));e.SVGsemantics=s;var l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(e){t.prototype.toSVG.call(this,e)},e.prototype.computeBBox=function(){return this.bbox},e.kind=i.MmlAnnotation.prototype.kind,e}(n.SVGWrapper);e.SVGannotation=l;var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.kind=i.MmlAnnotationXML.prototype.kind,e.styles={\"foreignObject[data-mjx-xml]\":{\"font-family\":\"initial\",\"line-height\":\"normal\",overflow:\"visible\"}},e}(n.SVGWrapper);e.SVGannotationXML=c;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.adaptor.clone(this.node.getXML()),Q=this.jax.math.metrics.em*this.jax.math.metrics.scale,r=this.fixed(1/Q),T=this.getBBox(),n=T.w,o=T.h,i=T.d;this.element=this.adaptor.append(t,this.svg(\"foreignObject\",{\"data-mjx-xml\":!0,y:this.jax.fixed(-o*Q)+\"px\",width:this.jax.fixed(n*Q)+\"px\",height:this.jax.fixed((o+i)*Q)+\"px\",transform:\"scale(\"+r+\") matrix(1 0 0 -1 0 0)\"},[e]))},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var Q=this.jax.measureXMLnode(this.node.getXML()),r=Q.w,T=Q.h,n=Q.d;t.w=r,t.h=T,t.d=n},e.prototype.getStyles=function(){},e.prototype.getScale=function(){},e.prototype.getVariant=function(){},e.kind=a.XMLNode.prototype.kind,e.autoStyle=!1,e}(n.SVGWrapper);e.SVGxml=u},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGmglyph=void 0;var n=Q(4),o=Q(176),i=Q(79),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e=this.standardSVGnode(t),Q=this.node.attributes.getList(\"src\",\"alt\"),r=Q.src,T=Q.alt,n=this.fixed(this.height),o={width:this.fixed(this.width),height:n,transform:\"translate(0 \"+this.fixed(this.height+(this.valign||0))+\") matrix(1 0 0 -1 0 0)\",preserveAspectRatio:\"none\",alt:T,title:T,href:r},i=this.svg(\"image\",o);this.adaptor.append(e,i)},e.kind=i.MmlMglyph.prototype.kind,e}(o.CommonMglyphMixin(n.SVGWrapper));e.SVGmglyph=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGTeXAtom=void 0;var n=Q(4),o=Q(170),i=Q(81),a=Q(0),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(e){if(t.prototype.toSVG.call(this,e),this.adaptor.setAttribute(this.element,\"data-mjx-texclass\",a.TEXCLASSNAMES[this.node.texClass]),this.node.texClass===a.TEXCLASS.VCENTER){var Q=this.childNodes[0].getBBox(),r=Q.h,T=(r+Q.d)/2+this.font.params.axis_height-r,n=\"translate(0 \"+this.fixed(T)+\")\";this.adaptor.setAttribute(this.element,\"transform\",n)}},e.kind=i.TeXAtom.prototype.kind,e}(o.CommonTeXAtomMixin(n.SVGWrapper));e.SVGTeXAtom=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SVGTextNode=void 0;var o=Q(0),i=Q(4),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.toSVG=function(t){var e,Q,r=this.node.getText(),T=this.parent.variant;if(\"-explicitFont\"===T)this.adaptor.append(t,this.jax.unknownText(r,T));else{var o=this.remappedText(r,T),i=0;try{for(var a=n(o),s=a.next();!s.done;s=a.next()){var l=s.value;i+=this.placeChar(l,i,0,t,T)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(Q=a.return)&&Q.call(a)}finally{if(e)throw e.error}}}this.element=this.adaptor.lastChild(t)},e.kind=o.TextNode.prototype.kind,e.styles={\".MathJax path\":{\"stroke-width\":3}},e}(Q(171).CommonTextNodeMixin(i.SVGWrapper));e.SVGTextNode=a},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.boldItalic=void 0;var r=Q(6),T=Q(221);e.boldItalic=r.AddPaths(T.boldItalic,{47:\"189 -210Q179 -210 170 -203T160 -179Q160 -171 162 -166Q164 -163 420 266T679 698Q686 711 704 711Q714 711 723 704T733 681Q733 672 730 667Q723 654 469 228T211 -201Q202 -210 189 -210\",305:\"24 296Q24 305 34 328T63 380T115 430T187 452Q205 452 223 448T262 435T295 406T308 360Q308 345 287 290T240 170T207 87Q202 67 202 57Q202 42 215 42Q235 42 257 64Q288 92 302 140Q307 156 310 159T330 162H336H347Q367 162 367 148Q367 140 357 117T329 65T276 14T201 -8Q158 -8 121 15T83 84Q83 104 133 229T184 358Q189 376 189 388Q189 402 177 402Q156 402 134 380Q103 352 89 304Q84 288 81 285T61 282H55H44Q24 282 24 296\",567:\"297 360T297 373T294 392T288 400T278 401H276Q237 398 200 363Q181 343 170 325T156 299T149 287T129 282H123H116Q102 282 97 284T92 298Q93 303 98 315T118 349T151 390T201 427T267 451H279Q357 451 388 422T420 354V339L370 138Q321 -60 317 -69Q287 -157 163 -194Q133 -201 99 -201Q39 -201 14 -178T-12 -125Q-12 -94 11 -69T68 -43Q93 -43 108 -57T123 -95Q123 -121 100 -151H104Q131 -151 155 -125T193 -60Q195 -54 244 141T294 345Q297 360 297 373\",8260:\"189 -210Q179 -210 170 -203T160 -179Q160 -171 162 -166Q164 -163 420 266T679 698Q686 711 704 711Q714 711 723 704T733 681Q733 672 730 667Q723 654 469 228T211 -201Q202 -210 189 -210\",8710:\"65 0Q59 6 59 9T61 16Q64 20 334 357T608 698Q616 706 629 710Q630 710 634 710T644 710T656 711Q686 711 694 703Q698 699 700 693Q706 674 805 345T904 14Q904 7 894 1L479 0H65ZM630 342L567 551L232 134L462 133H693Q693 137 630 342\",10744:\"189 -210Q179 -210 170 -203T160 -179Q160 -171 162 -166Q164 -163 420 266T679 698Q686 711 704 711Q714 711 723 704T733 681Q733 672 730 667Q723 654 469 228T211 -201Q202 -210 189 -210\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.boldItalic=void 0,e.boldItalic={47:[.711,.21,.894],305:[.452,.008,.394,{sk:.0319}],567:[.451,.201,.439,{sk:.0958}],8260:[.711,.21,.894],8710:[.711,0,.958,{sk:.192}],10744:[.711,.21,.894]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.bold=void 0;var r=Q(6),T=Q(223);e.bold=r.AddPaths(T.bold,{33:\"89 629Q89 663 116 684T171 705Q215 705 237 681T260 634Q260 619 233 434T204 244Q201 237 175 237Q150 237 146 244Q144 248 117 433T89 629ZM90 86Q90 125 116 148T177 171Q211 169 235 146T259 86Q259 48 235 25T175 1Q138 1 114 24T90 86\",34:\"38 572T38 608T61 669T121 694Q167 694 196 657T225 559Q225 520 214 482T186 418T151 370T119 339T99 329T82 340T70 360Q70 365 74 369T92 385T122 414Q142 441 154 471T170 518L172 535L166 532Q160 530 148 527T122 523Q85 523 62 547ZM305 572T305 608T328 669T388 694Q434 694 463 657T492 559Q492 520 481 482T453 418T418 370T386 339T366 329T349 340T337 360Q337 365 341 369T359 385T389 414Q409 441 421 471T436 518L439 535L433 532Q427 530 415 527T389 523Q352 523 329 547\",35:\"64 362Q64 380 87 393H363L366 404Q379 443 390 480T409 542T424 590T435 628T443 655T451 674T458 686T467 692T478 694Q490 694 499 686T509 662Q505 643 427 395Q427 393 523 393H620L623 404Q630 426 652 498T691 624T711 681Q718 694 735 694Q748 694 757 685T766 662Q762 643 684 395Q684 393 777 393H871Q872 392 875 390T881 386T887 381T891 374T893 363Q893 345 871 333L767 332H664L660 319Q660 318 638 245T614 171Q614 169 742 169H871L877 165Q883 161 885 159T890 151T893 138Q893 120 871 109L732 108H594L590 95Q587 84 546 -46Q508 -175 505 -178Q498 -193 478 -193Q462 -193 455 -183T448 -164Q448 -156 530 106Q530 108 434 108H337L333 95Q330 84 289 -46Q251 -175 248 -178Q240 -193 222 -193Q206 -193 199 -183T191 -164Q191 -154 273 106Q273 108 180 108L87 109Q64 117 64 139Q64 156 87 169H293L321 262Q326 277 331 294T340 321L343 330Q343 332 215 332L87 333Q64 343 64 362ZM600 330Q600 332 504 332H407L403 319Q403 318 381 245T357 171Q357 169 453 169H550L578 262Q583 277 588 294T597 321L600 330\",36:\"64 494Q64 541 80 579T120 638T171 674T219 693T253 698H256V750H318V699H323Q355 694 380 686T433 663T480 620T506 556Q510 539 510 520Q510 480 488 463T440 445L422 447Q407 451 398 459Q370 478 370 515Q370 542 384 559T412 580L427 584Q424 589 418 596T386 617T324 636H318V434Q411 419 460 355T510 217Q510 196 507 175T492 122T461 67T404 23T318 -4V-56H256V-5H254Q252 -3 240 -3Q194 4 160 23T108 64T80 112T67 156T64 190Q64 218 81 240T134 262Q171 262 187 240T204 193T190 150T153 125Q146 125 144 123Q142 123 149 113T174 89T218 66Q247 58 255 58Q256 58 256 173V287L239 291Q160 308 112 365T64 494ZM255 636Q246 635 236 632T206 620T173 591T160 543Q160 472 256 448V542Q256 636 255 636ZM320 59Q324 59 333 61T356 70T384 89T406 120T415 167Q415 200 395 225T356 260T318 274V59H320\",37:\"65 549Q65 609 84 652T132 714T187 742T236 750Q265 750 296 734T355 697T431 661T541 644Q662 644 736 730Q751 749 767 749T790 739T797 719Q797 710 768 672T504 329Q212 -47 211 -48Q203 -55 191 -55Q161 -55 161 -25Q161 -17 163 -12L642 609Q608 595 542 595Q515 595 488 599T441 608T405 619T381 628L373 632Q373 630 375 619T380 589T383 548Q383 455 343 401T235 347Q217 347 198 351T154 368T110 403T78 462T65 549ZM320 549Q320 633 295 665T235 698H234Q214 698 196 674Q182 650 182 549Q182 509 183 486T190 441T207 409T238 399Q269 399 294 431T320 549ZM745 -56Q727 -56 708 -52T664 -35T620 0T588 59T575 146T588 232T620 291T663 325T708 343T747 347Q810 347 851 294T893 146Q893 89 879 48T841 -15T794 -46T745 -56ZM830 146Q830 230 805 262T745 295H744Q724 295 706 271Q692 247 692 146Q692 106 693 83T700 38T717 6T748 -4Q779 -4 804 28T830 146\",38:\"255 -11Q209 -11 164 4T84 56T48 146Q48 159 50 171Q57 197 72 218T99 249T152 292Q204 333 204 334L194 356Q185 379 176 421T166 511Q166 538 168 551Q182 613 226 654T332 704Q334 704 343 704T358 705Q412 702 444 661T476 565V559Q476 489 334 371L330 368L335 357Q382 272 485 165L496 154L506 163Q543 200 597 273L671 382H601V444H610L732 441Q821 441 830 444H836V382H741L709 335Q702 324 687 302T665 270T646 244T625 216T605 191T581 162T553 132L537 116Q544 109 557 98T605 69T673 51Q711 51 739 70T767 115V118H829V114Q829 70 786 30T668 -11Q570 -11 474 37L451 49L441 43Q352 -11 255 -11ZM415 564Q415 596 400 625T356 654Q329 654 310 634T285 588Q283 580 283 554Q283 475 309 417L325 431Q415 512 415 564ZM192 182Q192 126 213 89T279 51Q348 51 400 83L389 91Q362 112 338 137T295 186T264 229T240 265T227 286Q226 285 222 280T217 272T211 263T205 251T200 238T196 222T193 204T192 182\",39:\"74 572T74 608T97 669T157 694Q203 694 232 657T261 559Q261 520 250 482T222 418T187 370T155 339T135 329Q128 329 117 340T106 359Q106 365 117 375T144 399T176 440T203 505Q204 511 205 518T208 530V535L202 532Q196 530 184 527T158 523Q121 523 98 547\",40:\"103 166T103 251T121 412T165 541T225 639T287 708T341 750H356H361Q382 750 382 736Q382 732 365 714T323 661T274 576T232 439T214 250Q214 -62 381 -229Q382 -231 382 -234Q382 -249 360 -249H356H341Q314 -231 287 -207T226 -138T165 -41T121 89\",41:\"231 251Q231 354 214 439T173 575T123 661T81 714T64 735Q64 744 73 749H75Q77 749 79 749T84 750T90 750H105Q132 732 159 708T220 639T281 542T325 413T343 251T325 89T281 -40T221 -138T159 -207T105 -249H90Q80 -249 76 -249T68 -245T64 -234Q64 -230 81 -212T123 -160T172 -75T214 61T231 251\",42:\"235 706Q235 724 251 737T287 750Q306 750 322 738T339 706Q339 685 318 580V579Q429 663 436 666Q441 668 449 668Q471 668 486 650T501 612Q501 582 478 572Q476 570 414 549L354 528L414 507Q420 505 430 502T445 497T458 492T470 488T479 483T487 478T493 471T497 463T500 454T501 443Q501 423 486 406T449 388H446Q435 388 370 437Q339 461 318 477V476Q339 371 339 350Q339 332 323 319T287 306T251 319T235 350Q235 371 256 476V477Q145 393 138 390Q133 388 125 388Q103 388 88 406T73 444Q73 474 96 484Q98 486 160 507L220 528L160 549Q154 551 144 554T129 559T116 564T104 568T95 573T87 578T81 585T77 593T74 602T73 613Q73 633 88 650T125 668H128Q139 668 204 619Q235 595 256 579V580Q235 685 235 706\",43:\"64 232T64 250T87 281H416V444Q416 608 418 612Q426 633 446 633T475 613Q477 608 477 444V281H807Q808 280 811 278T817 274T823 269T827 262T829 251Q829 230 807 221L642 220H477V57Q477 -107 475 -112Q468 -131 446 -131Q425 -131 418 -112Q416 -107 416 57V220H251L87 221Q64 232 64 250\",44:\"74 85Q74 120 97 145T159 171Q200 171 226 138Q258 101 258 37Q258 -5 246 -44T218 -109T183 -155T152 -184T135 -194Q129 -194 118 -183T106 -164Q106 -157 115 -149Q121 -145 130 -137T161 -100T195 -35Q197 -28 200 -17T204 3T205 11T199 9T183 3T159 0Q120 0 97 26T74 85\",45:\"13 166V278H318V166H13\",46:\"74 85Q74 121 99 146T156 171Q200 171 222 143T245 85Q245 56 224 29T160 1Q118 1 96 27T74 85\",47:\"451 730Q460 750 479 750Q492 750 501 740T510 718Q508 708 318 244L122 -232Q112 -250 95 -250Q82 -250 73 -241T64 -218Q66 -205 258 261T451 730\",58:\"74 359Q74 394 98 419T158 444Q200 444 222 417T245 358Q245 329 224 302T160 274Q116 274 95 301T74 359ZM74 85Q74 121 99 146T156 171Q200 171 222 143T245 85Q245 56 224 29T160 1Q118 1 96 27T74 85\",59:\"74 359Q74 394 98 419T158 444Q200 444 222 417T245 358Q245 329 224 302T160 274Q116 274 95 301T74 359ZM74 50T74 86T97 146T158 171Q204 171 226 132T248 38Q248 -23 223 -80T171 -165T135 -194Q129 -194 118 -183T106 -164Q106 -163 106 -160L107 -158Q108 -155 121 -142T150 -107T177 -58Q189 -32 194 3Q195 6 193 6Q172 0 158 0Q121 0 98 25\",60:\"797 -56Q797 -68 790 -76T767 -85H759L434 70Q108 226 105 229Q96 238 96 250Q96 263 105 272Q109 276 271 354T595 508T757 585Q763 587 766 587Q780 587 788 578T797 556Q797 544 788 535Q784 531 490 391L197 251Q213 242 359 173T644 37T788 -34Q797 -43 797 -56\",61:\"87 333Q64 343 64 362Q64 383 84 391Q89 393 448 393H807Q808 392 811 390T817 386T823 381T827 374T829 363Q829 345 807 333H87ZM87 109Q64 118 64 139Q64 159 86 168Q89 169 448 169H807L812 166Q816 163 818 162T823 157T827 149T829 139Q829 118 807 109H87\",62:\"127 -85Q110 -85 103 -75T96 -55Q96 -41 106 -34Q119 -24 308 65Q361 90 411 114L696 250L427 379Q106 533 103 537Q96 545 96 557Q96 568 104 577T128 587Q137 586 460 431T788 272Q797 263 797 250Q797 238 788 229Q785 226 459 70L135 -85H127\",63:\"65 570Q65 628 119 664T259 700Q326 700 372 688T440 654T469 613T478 569Q478 505 412 465Q287 391 287 294V283Q287 250 284 244T263 237H256H249Q232 237 229 242T225 272V287Q227 364 253 418Q274 463 311 504Q335 530 335 575Q335 622 323 635T259 648Q231 648 209 644T179 636T170 630L172 628Q174 627 177 625T183 620T190 611T197 601T202 587T204 570Q204 539 185 519T134 499Q105 499 85 517T65 570ZM171 86Q171 125 197 148T258 171Q292 169 316 146T340 86Q340 48 316 25T256 1Q218 1 195 24T171 86\",64:\"64 347Q64 511 171 605T434 699Q487 699 500 698Q624 684 703 621T811 464Q828 414 828 344Q828 232 788 179T691 125Q673 125 657 127T628 132T606 140T588 148T576 156T568 162L566 164Q565 164 549 154T504 135T444 125Q349 125 284 183T218 347Q218 455 284 512T448 569Q554 569 610 479H638Q670 479 674 471Q676 468 676 340V258Q676 213 679 199T694 178Q701 174 713 177Q767 187 767 340Q767 489 678 569T446 649Q299 649 213 566T126 346Q126 307 134 269T166 189T225 116T320 65T455 45H463Q606 51 721 91L746 99H782H801Q829 99 829 85Q829 78 825 75T804 65Q800 63 797 62Q625 -6 451 -6Q271 -6 168 91T64 347ZM547 468Q526 493 504 505T444 517T377 476T346 347Q346 306 354 271T386 206T448 177Q505 177 547 226V468\",91:\"128 -250V750H293V689H189V-189H293V-250H128\",92:\"64 718Q63 731 72 740T94 750Q106 750 113 743Q118 741 122 732L318 256Q508 -208 510 -218Q511 -231 502 -240T480 -250Q460 -250 451 -230Q451 -229 259 238T64 718\",93:\"25 689V750H190V-250H25V-189H129V689H25\",94:\"207 632L287 694Q289 693 368 632T448 570T431 545T413 520Q410 520 350 559L287 597L224 559Q164 520 161 520Q160 520 143 544T126 570T207 632\",95:\"0 -61V-10H574V-61H0\",96:\"114 634Q114 663 136 684T183 706Q191 706 196 705T208 700T219 693T232 681T245 666T262 645T282 620Q332 558 337 553Q338 552 318 527L299 503L223 543Q215 547 202 553T183 563T167 571T153 580T141 587T131 595T124 603T118 612T115 622T114 634\",123:\"504 -207T504 -225T500 -246T476 -250H469Q257 -250 227 -145L225 -135L224 0Q224 15 224 30T224 59T224 84T224 106T223 122T223 133V137Q222 138 221 144T213 162T195 185Q171 206 141 215Q123 222 107 223T84 225T74 229T70 250T73 270T83 276T106 276T141 285Q171 294 195 315Q201 321 206 328T214 341T219 352T222 360L223 363V367Q223 371 223 378T223 394T224 415T224 441T224 470T224 501L225 636Q249 739 426 749Q428 749 443 749T466 750H473Q495 750 499 747T504 725T501 704T480 699Q381 693 357 645Q352 634 351 617T350 497V412Q350 350 338 329Q325 303 298 284T251 258T227 251Q226 251 226 250L227 249Q231 248 238 246T265 236T299 217T329 184T349 137Q350 131 350 3T352 -130Q358 -160 392 -178T480 -199Q497 -200 500 -203\",124:\"160 -249Q138 -249 129 -225V250Q129 725 131 729Q139 750 159 750T190 725V-225Q181 -249 160 -249\",125:\"70 726Q71 744 74 747T99 750H106Q323 750 349 636L350 501Q350 486 350 470T350 441T350 416T350 394T351 378T351 367V363Q352 362 353 356T361 338T379 315Q403 294 433 285Q451 278 467 277T490 275T500 271T504 250T501 230T491 224T468 224T433 215Q403 206 379 185Q373 179 368 172T360 159T355 148T352 140L351 137V133Q351 129 351 122T351 106T350 85T350 59T350 31T350 0L349 -135L347 -145Q317 -250 106 -250H99Q79 -250 75 -247T70 -226Q70 -208 73 -204T95 -199Q193 -193 217 -145Q222 -134 223 -117T224 3Q224 20 224 48T223 86Q223 145 237 175T301 232Q335 249 347 249Q348 249 348 250L347 251Q343 252 336 254T309 264T275 284T245 316T225 363Q224 369 224 497T222 631Q216 660 182 678T95 699Q77 700 74 704T70 726\",126:\"343 202Q320 202 278 225T215 249Q181 249 146 214L134 202L115 219Q111 222 106 226T98 234L96 236Q158 306 165 313Q199 344 230 344Q239 344 244 343Q262 339 300 318T359 297Q393 297 428 332L440 344L459 327Q463 324 468 320T476 312L478 310Q416 240 409 233Q375 202 343 202\",168:\"96 615Q96 650 120 672T178 695Q214 693 234 669T255 615Q255 583 232 559T176 535Q147 535 122 556T96 615ZM319 615Q319 651 343 673T399 695Q426 695 452 675T478 615Q478 578 454 557T395 535Q364 537 342 559T319 615\",172:\"680 371Q683 369 688 366T695 361T698 356T701 346T701 332T702 308V216Q702 196 702 168T703 130Q703 90 697 76T671 61Q650 61 643 81Q641 86 641 198V310H364L87 311Q64 319 64 341Q64 362 84 369Q89 371 385 371H680\",175:\"80 540V607H494V540H80\",176:\"160 618Q160 653 193 677T279 702H284Q381 702 407 647Q414 634 414 618Q414 607 410 596T395 570T355 546T287 536T220 545T181 568T165 594T160 618ZM352 618Q352 645 341 652T301 659H292Q286 659 278 659T268 660Q247 660 236 653T224 638T222 619Q222 591 234 585T287 578Q315 578 326 580T345 590T352 618\",177:\"64 328T64 346T87 377H416V542L417 707Q431 728 443 728Q467 728 475 709Q477 704 477 540V377H807Q808 376 811 374T817 370T823 365T827 358T829 347Q829 326 807 317L642 316H477V25H807Q808 24 811 22T817 18T823 13T827 6T829 -5Q829 -26 807 -35H87Q64 -24 64 -6T87 25H416V316H251L87 317Q64 328 64 346\",180:\"391 706Q419 706 439 683T460 634Q460 608 441 593T366 550Q356 545 351 543L275 503L256 527Q236 552 237 553Q242 558 292 620Q299 629 309 641T324 659T336 673T346 685T354 693T363 699T371 703T380 705T391 706\",183:\"74 251Q74 286 99 311T156 336Q200 336 222 308T245 250Q245 221 224 194T160 166T96 193T74 251\",215:\"168 500Q168 515 178 522T195 530H198Q207 530 218 521T282 458Q312 428 331 409L447 294L563 409Q674 520 682 525Q687 529 695 529Q711 529 718 520T726 499V498Q726 489 720 481T666 427Q631 392 606 367L490 251L606 135Q717 23 721 17T726 2Q726 -9 719 -18T695 -28H692Q685 -28 674 -18T608 47Q581 74 563 92L447 207L331 91Q217 -22 208 -27Q206 -28 203 -28H197Q168 -28 168 2Q168 13 178 24T288 135L404 250L288 366Q177 479 173 485T168 500\",247:\"344 495Q344 535 372 566T447 597Q490 597 519 566T548 495Q548 452 518 423T446 393Q404 393 374 423T344 495ZM87 221Q64 230 64 251T84 279Q89 281 448 281H806Q807 280 810 278T816 274T822 269T826 262T828 251Q828 230 806 221H87ZM344 -36T344 6T373 78T446 108Q487 108 517 79T548 6Q548 -35 519 -65T446 -96Q406 -96 375 -66\",305:\"247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247\",567:\"28 -163Q58 -168 64 -168Q124 -168 135 -77Q137 -65 137 141T136 353Q132 371 120 377T72 385H52V408Q52 431 54 431L58 432Q62 432 70 432T87 433T108 434T133 436Q151 437 171 438T202 441T214 442H218V184Q217 -36 217 -59T211 -98Q195 -145 153 -175T58 -205Q9 -205 -23 -179T-55 -117Q-55 -94 -40 -79T-2 -64T36 -79T52 -118Q52 -143 28 -163\",697:\"240 563Q278 563 304 539T331 480V473Q331 462 316 431T217 236Q199 200 174 151T136 78T123 50Q113 33 105 33Q101 33 72 45T38 60Q35 63 35 65Q35 77 101 293T171 517Q182 542 202 552T240 563\",710:\"207 632L287 694Q289 693 368 632T448 570T431 545T413 520Q410 520 350 559L287 597L224 559Q164 520 161 520Q160 520 143 544T126 570T207 632\",711:\"131 603Q130 604 136 618T150 646T158 659L223 635L287 611L351 635L416 659Q417 660 424 647T437 619T443 603Q440 601 364 558T287 515T210 558T131 603\",713:\"80 540V607H494V540H80\",714:\"391 706Q419 706 439 683T460 634Q460 608 441 593T366 550Q356 545 351 543L275 503L256 527Q236 552 237 553Q242 558 292 620Q299 629 309 641T324 659T336 673T346 685T354 693T363 699T371 703T380 705T391 706\",715:\"114 634Q114 663 136 684T183 706Q191 706 196 705T208 700T219 693T232 681T245 666T262 645T282 620Q332 558 337 553Q338 552 318 527L299 503L223 543Q215 547 202 553T183 563T167 571T153 580T141 587T131 595T124 603T118 612T115 622T114 634\",728:\"287 500Q208 500 155 558T102 689V694H153V685Q153 681 154 674T164 648T186 615T226 590T287 578Q347 578 382 611T421 685V694H472V689Q472 623 422 562T287 500\",729:\"202 610Q202 647 227 671T283 695Q324 695 348 669T372 610T350 551T287 525Q248 525 225 551T202 610\",730:\"160 618Q160 653 193 677T279 702H284Q381 702 407 647Q414 634 414 618Q414 607 410 596T395 570T355 546T287 536T220 545T181 568T165 594T160 618ZM352 618Q352 645 341 652T301 659H292Q286 659 278 659T268 660Q247 660 236 653T224 638T222 619Q222 591 234 585T287 578Q315 578 326 580T345 590T352 618\",732:\"343 552Q320 552 278 575T215 599Q181 599 146 564L134 552L115 569Q111 572 106 576T98 584L96 586Q158 656 165 663Q199 694 230 694Q239 694 244 693Q262 689 300 668T359 647Q393 647 428 682L440 694L459 677Q463 674 468 670T476 662L478 660Q416 590 409 583Q375 552 343 552\",768:\"-461 634Q-461 663 -439 684T-392 706Q-384 706 -379 705T-367 700T-356 693T-343 681T-330 666T-313 645T-293 620Q-243 558 -238 553Q-237 552 -257 527L-276 503L-352 543Q-360 547 -373 553T-392 563T-408 571T-422 580T-434 587T-444 595T-451 603T-457 612T-460 622T-461 634\",769:\"-184 706Q-156 706 -136 683T-115 634Q-115 608 -134 593T-209 550Q-219 545 -224 543L-300 503L-319 527Q-339 552 -338 553Q-333 558 -283 620Q-276 629 -266 641T-251 659T-239 673T-229 685T-221 693T-212 699T-204 703T-195 705T-184 706\",770:\"-368 632L-288 694Q-286 693 -207 632T-127 570T-144 545T-162 520Q-165 520 -225 559L-288 597L-351 559Q-411 520 -414 520Q-415 520 -432 544T-449 570T-368 632\",771:\"-232 552Q-255 552 -297 575T-360 599Q-394 599 -429 564L-441 552L-460 569Q-464 572 -469 576T-476 584L-479 586Q-417 656 -410 663Q-376 694 -345 694Q-336 694 -331 693Q-313 689 -275 668T-216 647Q-182 647 -147 682L-135 694L-116 677Q-112 674 -107 670T-100 662L-97 660Q-159 590 -166 583Q-200 552 -232 552\",772:\"-495 540V607H-81V540H-495\",774:\"-288 500Q-367 500 -420 558T-473 689V694H-422V685Q-422 681 -421 674T-411 648T-389 615T-349 590T-288 578Q-228 578 -193 611T-154 685V694H-103V689Q-103 623 -153 562T-288 500\",775:\"-373 610Q-373 647 -348 671T-292 695Q-251 695 -227 669T-203 610T-225 551T-288 525Q-327 525 -350 551T-373 610\",776:\"-479 615Q-479 650 -456 672T-397 695Q-361 693 -341 669T-320 615Q-320 583 -343 559T-399 535Q-428 535 -453 556T-479 615ZM-256 615Q-256 651 -232 673T-176 695Q-149 695 -123 675T-97 615Q-97 578 -121 557T-180 535Q-211 537 -233 559T-256 615\",778:\"-415 618Q-415 653 -382 677T-296 702H-291Q-194 702 -168 647Q-161 634 -161 618Q-161 607 -165 596T-180 570T-220 546T-288 536T-355 545T-394 568T-410 594T-415 618ZM-223 618Q-223 645 -234 652T-274 659H-283Q-289 659 -297 659T-307 660Q-328 660 -339 653T-351 638T-353 619Q-353 591 -341 585T-288 578Q-260 578 -249 580T-230 590T-223 618\",779:\"-389 511L-442 543Q-442 544 -424 606T-404 674Q-390 705 -361 713Q-360 713 -356 713T-349 714Q-340 714 -330 712Q-273 690 -273 644Q-273 621 -290 604L-342 554L-389 511ZM-198 511L-251 543Q-251 544 -233 606T-213 674Q-199 705 -170 713Q-169 713 -165 713T-158 714Q-127 714 -105 693T-82 647Q-82 638 -84 631T-89 618T-99 604T-112 590T-130 574T-151 554L-198 511\",780:\"-444 603Q-445 604 -439 618T-425 646T-417 659L-352 635L-288 611L-224 635L-159 659Q-158 660 -151 647T-138 619T-132 603Q-135 601 -211 558T-288 515T-365 558T-444 603\",824:\"-705 -210Q-715 -210 -724 -203T-734 -179Q-734 -171 -732 -166Q-730 -163 -474 266T-215 698Q-208 711 -190 711Q-180 711 -171 704T-161 681Q-161 672 -164 667Q-171 654 -425 228T-683 -201Q-692 -210 -705 -210\",8194:\"\",8195:\"\",8196:\"\",8197:\"\",8198:\"\",8201:\"\",8202:\"\",8211:\"0 249V300H574V249H0\",8212:\"0 249V300H1149V249H0\",8213:\"0 249V300H1149V249H0\",8214:\"205 -225Q201 -234 199 -237T191 -244T175 -248T161 -246Q151 -240 146 -229Q145 -224 145 251Q145 725 146 730Q156 750 176 750Q193 748 205 727V-225ZM369 727L372 732Q375 737 377 740T385 747T398 750Q406 750 413 747Q423 740 428 730Q430 720 430 251Q430 -219 428 -229Q423 -240 413 -246Q408 -248 400 -248Q393 -248 388 -247T379 -242T375 -236T371 -230L369 -225V727\",8215:\"0 -61V-10H574V-61H0\",8216:\"58 461Q58 503 70 542T99 607T134 654T165 684T184 694T201 683T213 664Q213 658 202 648T175 624T143 583T116 518Q115 512 114 505T112 493L111 488Q132 500 161 500Q198 500 221 475T245 414T222 354T161 329Q112 329 85 369T58 461\",8217:\"74 572T74 608T97 669T157 694Q203 694 232 657T261 559Q261 520 250 482T222 418T187 370T155 339T135 329Q128 329 117 340T106 359Q106 365 117 375T144 399T176 440T203 505Q204 511 205 518T208 530V535L202 532Q196 530 184 527T158 523Q121 523 98 547\",8220:\"110 461Q110 502 121 541T150 606T185 653T217 684T235 694Q242 694 254 682T266 664Q266 659 254 648T226 623T193 578T167 511Q164 500 164 494T164 487Q188 500 212 500Q251 500 274 475T297 414Q297 378 274 354T212 329Q167 329 139 367T110 461ZM377 461Q377 502 388 541T417 606T452 653T484 684T502 694Q509 694 521 682T533 664Q533 659 521 648T493 623T460 578T434 511Q431 500 431 494T431 487Q455 500 479 500Q518 500 541 475T564 414Q564 378 541 354T479 329Q434 329 406 367T377 461\",8221:\"38 572T38 608T61 669T121 694Q167 694 196 657T225 559Q225 520 214 482T186 418T151 370T119 339T99 329T82 340T70 360Q70 365 74 369T92 385T122 414Q142 441 154 471T170 518L172 535L166 532Q160 530 148 527T122 523Q85 523 62 547ZM305 572T305 608T328 669T388 694Q434 694 463 657T492 559Q492 520 481 482T453 418T418 370T386 339T366 329T349 340T337 360Q337 365 341 369T359 385T389 414Q409 441 421 471T436 518L439 535L433 532Q427 530 415 527T389 523Q352 523 329 547\",8224:\"231 470Q232 471 232 473Q232 477 213 540T193 636Q192 642 192 651T204 677T239 700Q249 702 255 702Q300 702 315 660Q317 653 317 636Q317 603 298 539T279 472V470Q280 470 318 488T383 506Q408 506 423 493T442 467T446 444T443 421T424 396T383 382Q355 382 318 400T279 418Q278 416 285 392T303 334T316 284Q318 268 318 234Q318 149 311 45T296 -127T284 -203Q279 -211 255 -211Q237 -211 233 -210T226 -203Q222 -195 214 -129T199 41T192 234V245Q192 286 212 349Q233 413 231 418Q229 418 192 400T128 382Q102 382 86 396T67 421T64 444T67 466T86 492T128 506Q155 506 192 488T231 470\",8225:\"193 637Q193 663 206 679T231 698T255 702T279 699T304 679T317 637Q317 605 299 557T280 504Q280 503 281 503T320 521T382 539Q410 539 428 521T446 476Q446 454 432 434T383 414H377Q358 414 320 431T281 449L280 448Q280 444 298 396T317 316Q318 310 318 301T306 275T271 252Q261 250 255 250Q210 250 195 292Q193 299 193 316Q193 347 211 395T230 448Q230 449 229 449Q227 449 196 434Q151 414 133 414H127Q102 414 87 427T68 452T64 477Q64 503 81 521T127 539Q143 539 164 532T204 515T226 504Q230 502 230 504Q230 508 212 556T193 637ZM193 184Q193 210 206 226T231 245T255 249T279 246T304 226T317 184Q317 153 299 106T280 53Q280 51 282 51T322 68T383 86Q411 86 428 69T445 24T428 -21T382 -39Q358 -39 322 -22T282 -4Q280 -3 280 -3T280 -6Q281 -13 299 -59T317 -136Q318 -142 318 -151T306 -177T271 -200Q261 -202 255 -202Q210 -202 195 -160Q193 -153 193 -136Q193 -106 211 -60T230 -6Q230 -4 228 -4T188 -21T128 -39Q100 -39 83 -22T65 24Q65 53 82 69T127 86Q150 86 187 69T228 51Q230 50 230 50T230 53Q229 58 211 105T193 184\",8226:\"64 251Q64 303 80 344T121 409T175 448T230 469T275 474Q277 474 283 474T292 473Q385 473 447 415T510 251Q510 149 449 89T287 28T126 88T64 251\",8230:\"74 85Q74 121 99 146T156 171Q200 171 222 143T245 85Q245 56 224 29T160 1Q118 1 96 27T74 85ZM562 85Q562 121 587 146T644 171Q688 171 710 143T733 85Q733 56 712 29T648 1Q606 1 584 27T562 85ZM1050 85Q1050 121 1075 146T1132 171Q1176 171 1198 143T1221 85Q1221 56 1200 29T1136 1Q1094 1 1072 27T1050 85\",8242:\"240 563Q278 563 304 539T331 480V473Q331 462 316 431T217 236Q199 200 174 151T136 78T123 50Q113 33 105 33Q101 33 72 45T38 60Q35 63 35 65Q35 77 101 293T171 517Q182 542 202 552T240 563\",8254:\"80 540V607H494V540H80\",8260:\"451 730Q460 750 479 750Q492 750 501 740T510 718Q508 708 318 244L122 -232Q112 -250 95 -250Q82 -250 73 -241T64 -218Q66 -205 258 261T451 730\",8407:\"406 694Q406 704 413 713T433 723Q448 723 454 719T467 701Q483 665 522 648Q542 637 542 619Q542 605 536 599T514 586Q468 569 431 532Q411 513 399 513Q386 513 378 522T369 543Q369 557 381 568Q385 572 387 574L400 588H228L56 589Q33 598 33 618Q33 636 56 649H426Q406 676 406 694\",8463:\"477 56Q477 48 479 46T490 43Q522 45 544 75T577 140Q582 156 585 159T605 162H611H622Q642 162 642 148Q642 138 632 114T602 62T550 13T478 -8Q429 -8 394 17T358 83Q358 95 395 199T433 350Q433 400 394 400H388H383Q335 400 291 363Q256 332 236 298Q233 293 202 170T169 40Q160 18 141 5T99 -8Q70 -8 58 9T45 39Q45 51 116 336L167 540H80V607H184L188 622H184Q183 622 179 622T169 623T157 624T146 624T136 624T131 625Q119 628 119 642Q119 647 123 661T129 679Q133 684 142 685T220 690Q293 694 307 694Q324 694 328 679Q328 673 311 607H494V540H294Q286 507 278 473T264 420L260 403Q260 400 269 408Q327 451 393 451H401H410Q425 451 439 450T476 442T515 424T544 391T556 337Q556 286 517 179T477 56\",8467:\"245 -19Q228 -19 212 -16T184 -6T162 9T143 27T129 46T118 66T111 84T106 99T102 111L101 116L69 89L36 62Q31 60 24 62Q-1 88 -1 98Q-1 101 1 105Q1 106 73 170L95 189V197Q95 242 112 317T159 476T241 624T353 701Q357 702 367 702Q428 702 444 641Q446 630 446 606Q446 454 241 246L215 220L212 203Q203 150 203 114Q203 113 203 106T204 95T205 82T209 67T214 54T223 43T236 35T253 32Q277 32 305 44T352 70T389 98T407 112Q409 113 412 113Q420 113 432 95Q445 77 443 70Q440 64 416 44T342 3T245 -19ZM387 615Q387 651 366 651Q342 651 321 604T276 470L241 331Q246 331 280 373T350 486T387 615\",8472:\"399 159Q410 159 421 151T433 126Q433 104 410 85Q408 84 410 78Q411 72 414 66T428 51T455 43Q483 43 506 55T543 83T568 125T584 166T594 206Q595 211 596 214Q610 273 610 301Q610 365 542 365H538Q483 365 429 344T337 292T269 229T225 175T210 150L255 99Q261 92 274 78T292 58T305 41T316 22T321 3T324 -23Q324 -87 283 -148T174 -210H171Q161 -210 152 -209T128 -201T101 -180T81 -141T72 -78Q72 -72 72 -60T73 -45Q79 4 102 65L108 81Q84 117 84 167Q84 273 140 367T269 461Q285 461 285 447Q285 440 282 431Q278 418 276 415T264 410Q228 404 201 336T174 219Q174 218 176 202L184 214Q252 303 348 360T549 417Q614 417 658 391T719 317Q726 292 726 260Q726 148 646 70T451 -8Q407 -8 377 17T346 92Q346 159 396 159H399ZM178 -160Q200 -160 216 -132T232 -75Q232 -63 228 -56T203 -26Q196 -18 192 -14Q185 -5 176 5T161 20T156 27L153 28Q151 28 146 8T137 -42T132 -89Q132 -160 178 -160\",8501:\"590 427Q581 427 579 433T575 450T568 470V468L532 288L541 281Q620 220 634 165L637 154V124Q637 74 628 46Q623 32 612 16T592 0Q580 0 578 19T569 69T538 121Q532 126 385 240T236 355Q234 355 231 338T225 291T222 237Q222 222 223 213T225 201T228 195T231 190Q238 179 261 160T300 119T316 73Q316 41 291 23T231 1Q226 0 149 0H98Q73 0 69 3T64 24Q64 43 67 47T85 51H89Q119 51 134 55T152 64T154 76Q154 95 125 141T96 220Q96 243 104 270T123 319T145 360T164 391T172 404T150 421T102 468T68 529L65 541V570Q65 620 74 648Q79 664 91 679T111 694Q122 694 123 675T132 625T164 573Q168 569 319 452T471 335Q471 337 486 409T502 488Q502 489 491 493T467 511T448 546V573Q448 602 452 624T462 659T474 680T486 691T493 694Q499 694 502 691T507 682T513 673Q517 667 534 651T557 630Q558 629 590 616T631 587Q638 577 638 543Q637 489 622 458T590 427\",8592:\"1063 281Q1084 268 1084 251Q1084 231 1063 221L649 220H235Q340 133 364 17Q368 1 368 -2Q368 -16 343 -17Q340 -17 338 -17H332Q317 -17 314 -14T305 6Q298 34 285 62T247 126T179 189T78 233Q64 237 64 251Q64 261 74 265T108 277T154 297Q212 328 251 379T305 495Q309 511 313 514T333 518H338Q363 517 367 510Q368 507 368 503Q368 500 364 484Q345 401 287 331Q254 295 235 282L649 281H1063\",8593:\"33 396Q14 396 14 423Q14 445 18 449T41 459Q72 466 99 478T147 505T185 537T215 571T238 604T254 635T264 661T270 678L272 685Q276 694 288 694Q298 692 300 689T307 672Q331 592 392 535T535 459Q553 454 557 450T561 423Q561 396 542 396Q531 396 501 405T418 443T329 517L319 529L318 179V-171Q307 -193 288 -193Q265 -193 258 -171L257 179V529L247 517Q209 473 158 444T76 405T33 396\",8594:\"65 251Q65 270 87 281H500L914 282Q881 304 842 357T785 482Q781 500 781 501Q781 512 792 517Q794 518 812 518H817Q832 518 835 515T844 495Q864 412 923 351T1065 270Q1085 263 1085 251Q1085 240 1077 236T1044 225T995 204Q937 173 898 122T844 6Q840 -10 836 -13T816 -17H811Q786 -16 782 -9Q781 -6 781 -2Q781 1 785 17Q813 138 914 220H500L87 221Q65 228 65 251\",8595:\"14 77Q14 104 33 104Q44 104 74 96T156 57T247 -17L257 -29V321Q257 669 259 675Q268 694 289 694Q295 693 300 691T307 686T313 679T318 672V321L319 -29L329 -17Q366 26 417 55T499 94T542 104Q561 104 561 77Q561 56 557 51T535 41Q481 28 438 0T370 -58T330 -119T308 -167T302 -187Q297 -194 288 -194Q278 -194 273 -186T265 -165T251 -127T220 -77Q151 15 41 41Q22 46 18 50T14 77\",8596:\"305 495Q309 511 313 514T333 518H338Q363 517 367 510Q368 507 368 503Q368 500 364 484Q345 401 287 331Q254 295 235 282L404 281H744L914 282Q880 305 839 362T785 484Q781 500 781 503Q781 517 806 518Q809 518 811 518H817Q832 518 835 515T844 495Q864 412 923 351T1065 270Q1085 263 1085 251Q1085 240 1077 236T1044 225T995 204Q937 173 898 122T844 6Q840 -10 836 -13T816 -17H811Q786 -16 782 -9Q781 -6 781 -2Q781 1 785 17Q813 138 914 220H235Q340 133 364 17Q368 1 368 -2Q368 -16 343 -17Q340 -17 338 -17H332Q317 -17 314 -14T305 6Q298 34 285 62T247 126T179 189T78 233Q64 237 64 251Q64 261 74 265T108 277T154 297Q212 328 251 379T305 495\",8597:\"33 469Q14 469 14 496Q14 518 18 522T41 532Q121 551 182 608T268 745Q275 767 288 767Q299 767 303 755T320 713T355 650Q424 558 535 532Q553 527 557 523T561 496Q561 469 542 469Q531 469 501 478T418 516T329 590L319 602L318 426V74L319 -102L329 -90Q366 -47 417 -18T499 21T542 31Q561 31 561 4Q561 -17 557 -22T535 -32Q454 -51 393 -108T307 -245Q300 -267 288 -267Q279 -267 274 -259T266 -238T250 -200T220 -150Q151 -58 41 -32Q22 -27 18 -23T14 4Q14 31 33 31Q44 31 74 23T156 -16T247 -90L257 -102V602L247 590Q209 546 158 517T76 478T33 469\",8598:\"429 724Q438 724 452 711T466 690Q466 681 452 671Q361 602 242 599H218L756 135Q832 69 913 -1T1036 -108L1077 -143Q1084 -151 1084 -163Q1084 -180 1074 -187T1054 -194H1052Q1043 -194 939 -105Q866 -42 812 5Q180 549 178 549V546Q179 542 179 539Q183 520 183 483Q183 435 172 390T149 323T130 296Q121 292 115 295Q85 312 85 328Q85 331 95 350T115 406T125 486Q125 540 110 583T79 648T64 675Q64 681 68 687T81 693Q87 693 94 690Q162 657 232 657Q296 657 349 681T420 722Q422 724 429 724\",8599:\"1069 693Q1076 693 1080 687T1085 675Q1085 671 1076 656T1055 621T1034 565T1024 486Q1024 442 1034 406T1054 351T1064 328Q1064 321 1057 313T1042 300L1034 295Q1030 293 1027 293Q1023 293 1020 295T1014 301T1009 308T1005 316T1001 324Q980 368 971 419Q966 442 966 484V492Q966 528 972 553Q971 553 757 368T328 -3T107 -191Q103 -193 94 -193Q78 -193 71 -184T64 -164Q64 -153 72 -143Q79 -136 382 124L934 599H909Q837 599 760 634T683 690Q683 697 696 710T722 724Q726 724 742 714T779 691T838 668T920 657Q959 657 991 666T1043 684T1069 693\",8600:\"65 663Q65 680 74 687T93 694H96Q104 694 118 683T204 610Q280 545 338 495Q969 -49 971 -49L970 -46Q970 -42 970 -39Q966 -20 966 18Q966 65 977 110T1001 177T1019 204Q1028 208 1034 205Q1064 188 1064 172Q1064 169 1054 150T1034 94T1024 14Q1024 -28 1033 -64T1054 -120T1075 -155T1085 -175Q1085 -181 1081 -187T1068 -193Q1062 -193 1055 -190Q987 -157 919 -157Q817 -157 739 -215Q727 -224 720 -224Q712 -224 697 -210Q683 -199 683 -190T697 -171Q788 -102 907 -99H931L393 365Q317 431 236 501T114 608L72 643Q65 651 65 663\",8601:\"80 -193Q73 -193 69 -187T64 -175Q64 -172 79 -150T109 -84T125 14Q125 58 115 94T95 149T85 172Q85 179 92 187T108 200L115 205Q119 207 122 207Q126 207 129 205T135 199T140 192T144 184T148 176Q169 132 178 81Q183 58 183 17Q183 -7 182 -24T178 -48L177 -53Q178 -53 389 129T816 498T1043 692Q1049 694 1054 694Q1070 694 1077 684T1085 664Q1085 653 1077 643Q1070 636 767 376L215 -98L240 -99Q312 -99 389 -134T466 -190Q466 -197 452 -210T429 -224Q422 -224 411 -215Q330 -157 229 -157Q190 -157 158 -166T106 -184T80 -193\",8614:\"65 426Q74 448 95 448Q112 448 125 426V281H500L914 282Q881 304 842 357T785 482Q781 500 781 501Q781 512 792 517Q794 518 812 518H817Q832 518 835 515T844 495Q864 412 923 351T1065 270Q1085 263 1085 251Q1085 240 1077 236T1044 225T995 204Q937 173 898 122T844 6Q840 -10 836 -13T816 -17H811Q786 -16 782 -9Q781 -6 781 -2Q781 1 785 17Q813 138 914 220H500L135 221Q134 221 133 221T130 220H125V76Q115 54 95 54Q73 54 65 76V426\",8617:\"1029 475Q1029 505 1068 505Q1129 501 1173 463T1218 363Q1218 296 1170 259T1066 221H1063L649 220H235Q340 133 364 17Q368 1 368 -2Q368 -16 343 -17Q340 -17 338 -17H332Q317 -17 314 -14T305 6Q298 34 285 62T247 126T179 189T78 233Q64 237 64 251Q64 261 74 265T108 277T154 297Q212 328 251 379T305 495Q309 511 313 514T333 518H338Q363 517 367 510Q368 507 368 503Q368 500 364 484Q345 401 287 331Q254 295 235 282L649 281H1063Q1105 284 1131 305T1158 361Q1158 385 1146 401Q1122 441 1063 444Q1029 446 1029 475\",8618:\"225 221H218Q159 221 112 260T65 363Q65 431 116 468T221 505Q254 503 254 474Q254 456 245 450T216 443T188 438Q152 427 137 401Q125 385 125 362Q125 334 147 310Q171 288 221 281H632L1046 282Q1013 304 974 357T917 482Q913 500 913 501Q913 512 924 517Q926 518 944 518H949Q964 518 967 515T976 495Q996 412 1055 351T1197 270Q1217 263 1217 251Q1217 240 1209 236T1176 225T1127 204Q1069 173 1030 122T976 6Q972 -10 968 -13T948 -17H943Q918 -16 914 -9Q913 -6 913 -2Q913 1 917 17Q945 138 1046 220H632L225 221\",8636:\"1063 281Q1084 268 1084 251Q1084 231 1063 221L572 220Q79 220 77 221Q64 225 64 244Q64 250 64 254T67 261T71 265T78 268T85 272Q142 302 189 345T258 421T296 484T315 516Q319 518 337 518Q358 518 363 512Q370 504 367 496Q360 469 319 404T219 290L209 282L636 281H1063\",8637:\"1063 281Q1084 268 1084 251Q1084 231 1063 221L636 220H209L219 212Q278 162 319 97T367 5Q370 -3 363 -11Q358 -17 337 -17H332Q318 -17 314 -14T302 7Q278 55 246 95T185 160T130 202T88 228L70 237Q64 243 64 257Q64 274 75 279Q78 281 571 281H1063\",8640:\"65 251Q65 270 87 281H513L940 282L930 290Q871 338 830 403T782 496Q779 510 791 517Q794 518 812 518H817Q831 518 835 515T847 494Q871 445 903 404T966 338T1022 298T1064 272T1083 259Q1085 255 1085 245Q1085 225 1072 221Q1070 220 578 220L87 221Q65 228 65 251\",8641:\"84 279Q89 281 580 281Q1070 281 1074 279Q1085 275 1085 256Q1085 245 1083 241T1066 230Q919 153 847 7Q839 -11 835 -14T817 -17H812Q791 -17 786 -11Q779 -3 782 5Q789 31 830 96T930 212L940 220H513L87 221Q64 229 64 250Q64 272 84 279\",8652:\"65 451Q65 470 87 481H513L940 482L930 490Q871 538 830 603T782 696Q779 710 791 717Q794 718 812 718H817Q831 718 835 715T847 694Q871 645 903 604T966 538T1022 498T1064 472T1083 459Q1085 455 1085 445Q1085 425 1072 421Q1070 420 578 420L87 421Q65 428 65 451ZM1063 281Q1084 268 1084 251Q1084 231 1063 221L636 220H209L219 212Q278 162 319 97T367 5Q370 -3 363 -11Q358 -17 337 -17H332Q318 -17 314 -14T302 7Q278 55 246 95T185 160T130 202T88 228L70 237Q64 243 64 257Q64 274 75 279Q78 281 571 281H1063\",8656:\"1063 169L1068 166Q1072 163 1074 162T1079 157T1083 149T1085 139Q1085 118 1063 109L733 108H404L412 99Q455 50 488 -10Q498 -27 493 -37Q487 -46 465 -46H460Q446 -46 439 -39T426 -18T399 25T344 89Q239 194 99 229Q96 230 92 231T85 232T79 234T73 235T69 237T66 240T65 244T64 250Q64 267 90 271Q197 295 286 361T430 525Q439 542 442 544T460 547H465Q487 547 492 539Q496 531 496 530Q496 521 471 482T414 405L404 394L733 393H1063Q1064 392 1069 389T1076 384T1082 375T1085 362Q1085 344 1063 333L700 332H338L324 321Q283 290 230 264L205 250Q266 224 323 180L338 170L700 169H1063\",8657:\"672 343Q672 326 670 320T657 313Q644 313 602 335Q577 349 557 361T527 381T509 395T499 403T495 406T494 118Q494 -166 492 -174Q484 -193 465 -193H463Q456 -193 453 -192T444 -186T433 -170V465L423 477Q407 495 394 514T367 554T351 579Q349 576 339 560T313 520T279 477L269 465V-22V-102Q269 -132 269 -145T268 -169T266 -180T260 -185T253 -191Q248 -193 239 -193H237Q218 -193 210 -174Q208 -166 208 118Q208 406 207 406L199 399Q191 392 165 374T100 335Q58 313 45 313Q35 313 33 319T30 343V349Q30 359 30 362T35 369T45 374T66 383T100 401Q267 499 333 680Q339 694 351 694Q361 694 365 687T380 652T407 597Q442 536 489 489T573 420T638 383T670 365Q672 361 672 343\",8658:\"64 362Q64 380 87 393H416L745 394L735 405Q708 436 681 477T654 531Q654 547 679 547H684H689Q703 547 710 540T723 519T750 475T806 411Q914 303 1059 271Q1060 271 1063 270T1068 269T1072 268T1076 266T1079 264T1082 260T1083 256T1084 250Q1084 242 1080 238T1063 231T1035 225T992 211T934 185Q797 112 719 -24Q710 -40 706 -43T689 -46H684Q653 -46 653 -31Q653 -24 661 -10Q694 50 737 99L745 108H416L87 109Q64 117 64 139Q64 156 87 169H449L812 170L826 180Q842 193 860 204T892 223T918 237T937 246L944 250L919 264Q866 290 825 321L811 332H449L87 333Q64 343 64 362\",8659:\"30 157Q30 174 32 180T46 187Q59 187 104 163Q154 136 198 101L207 94Q208 94 208 382Q208 666 210 674Q219 694 241 694Q254 692 262 683Q266 679 267 674Q269 658 269 522V35L279 23Q295 5 308 -14T335 -54T351 -79Q353 -76 363 -60T389 -20T423 23L433 35V671Q439 682 444 686T452 692T463 693H465Q484 693 492 674Q494 666 494 382Q494 94 495 94L504 101Q547 135 593 160T652 187Q665 191 671 177Q672 175 672 157Q672 137 669 134T636 116Q606 101 578 83T528 47T486 9T452 -30T424 -68T403 -103T387 -134T377 -159T370 -176L367 -184Q360 -194 351 -194Q345 -194 342 -192T334 -182T327 -166T315 -137T295 -97Q260 -36 213 11T129 80T63 117T32 136Q30 139 30 157\",8660:\"336 497Q358 541 363 544Q367 547 379 547H384Q401 547 405 545Q418 538 414 525T389 474T346 408L335 393H814L803 408Q781 436 760 474T735 525T744 545Q748 547 765 547Q771 547 774 547T780 546T786 544T790 541T794 535T799 527T805 514T813 497Q841 446 877 406T950 340T1014 301T1068 276L1096 265Q1102 259 1102 251Q1102 240 1085 232Q981 195 902 121Q835 56 798 -25Q791 -40 787 -43T765 -46T744 -44Q735 -40 735 -30Q735 -15 760 28T806 98L814 108H335L343 98Q361 75 378 46T404 -1T414 -24Q418 -37 405 -44Q401 -46 384 -46T363 -43T351 -25Q314 56 247 121Q216 150 182 173T125 206T79 226T53 237Q47 243 47 251Q47 254 47 256T49 261T52 264T57 267T61 268T66 270T71 272Q246 335 336 497ZM985 251Q932 280 882 323L871 332H278Q264 321 253 311T237 297T214 282T164 251L176 244Q221 218 278 169H871Q928 218 973 244L985 251\",8661:\"49 441Q30 441 30 464V471V480Q30 498 44 502Q237 573 331 750Q337 767 351 767Q360 767 368 753T400 702T460 629Q504 584 552 554T632 511T666 497Q672 493 672 471Q672 454 670 449Q664 441 653 441Q639 443 591 465T508 513L495 522L494 386V114L495 -22L508 -13Q543 12 591 34T653 59Q672 59 672 36V29V20Q672 2 658 -2Q465 -71 367 -257Q360 -267 351 -267Q343 -267 336 -257T320 -231T292 -187T242 -129Q198 -84 150 -54T70 -11T36 3Q30 7 30 29Q30 46 32 51Q38 59 49 59Q63 57 111 35T194 -13L208 -22V522L194 513Q159 488 111 466T49 441ZM422 584Q411 594 400 606T383 626T366 648T351 667Q349 665 339 652T314 620T280 584L269 573V-73L280 -84Q305 -108 351 -166Q353 -164 363 -151T389 -119T422 -84L433 -73V573L422 584\",8704:\"1 664Q-2 685 23 693H27Q46 693 54 680T102 578L148 475H492L533 570Q541 586 548 603T560 630T569 650T576 667T582 678T588 686T594 691T600 693T609 694Q622 694 631 684T639 662Q637 653 492 325T341 -8Q333 -16 320 -16Q306 -16 298 -8Q294 -4 147 326L1 656V664ZM464 414H319Q175 414 175 413L319 88L464 414\",8707:\"81 347Q81 359 84 363T104 378H513V633H300L87 634Q64 642 64 664Q64 685 84 692Q89 694 321 694H552Q571 681 574 669V25Q567 7 552 1H87Q64 12 64 30T87 61H513V317H308Q103 317 99 319Q81 328 81 347\",8709:\"285 711Q307 711 326 708T357 701T370 698Q371 698 375 710T383 735T389 750Q395 767 415 767Q431 767 438 757T446 738T436 701T426 670Q426 668 433 664Q468 633 489 588Q511 542 519 488T528 344Q528 286 524 243T508 150T466 63T394 6Q345 -17 287 -17Q265 -17 246 -14T216 -7T203 -4Q191 -47 183 -60T159 -73Q146 -73 137 -63T128 -44Q128 -38 138 -7L148 24L141 30Q134 35 120 49Q94 77 78 113T56 194T48 268T46 344Q46 388 47 416T56 494T78 577T122 644T194 694Q239 711 285 711ZM351 639Q350 639 346 642T337 648T325 654T306 658T283 660Q254 660 221 638T181 567Q171 513 171 375Q171 164 182 129L351 639ZM402 356Q402 516 395 555Q395 557 395 559T394 563T394 566L393 568L223 57Q252 34 286 34H288Q318 34 346 53T387 109Q402 152 402 329V356\",8710:\"901 12Q901 7 892 0H479Q65 0 62 2Q56 6 56 11Q56 14 242 347T433 685Q438 694 450 696Q454 698 480 698H506L523 687Q526 683 711 354T899 17Q901 13 901 12ZM653 137L427 538L202 137L315 136H540L653 137\",8712:\"97 251Q97 393 194 484T417 586Q418 586 436 586T482 586T538 587H648Q649 586 652 584T658 580T664 575T668 568T670 557Q670 536 648 527L534 526Q515 526 491 526T457 526T435 526T417 525T404 523T390 521T374 517Q298 498 243 447T167 324Q159 295 159 283Q159 281 403 281H648Q649 280 652 278T658 274T664 269T668 262T670 251Q670 230 648 221L403 220Q159 220 159 218Q159 206 166 182T190 122T247 50T341 -6Q380 -20 405 -22T534 -25H648Q649 -26 654 -29T661 -34T667 -43T670 -56Q670 -74 648 -85L541 -86Q419 -86 396 -82Q276 -65 187 24T97 251\",8713:\"126 -210Q116 -210 107 -203T97 -179Q97 -171 99 -166Q99 -165 111 -145T150 -80T203 8Q97 104 97 251Q97 393 194 484T417 586Q418 586 436 586T482 586T538 587H549Q565 614 582 643T608 685L616 698Q623 711 641 711Q651 711 660 704T670 681Q670 672 667 667Q666 666 661 657T644 627T620 587H648Q649 586 652 584T658 580T664 575T668 568T670 557Q670 536 648 527L584 526L437 281H648Q649 280 652 278T658 274T664 269T668 262T670 251Q670 230 648 221L403 220H401L283 23Q311 5 341 -6Q380 -20 405 -22T534 -25H648Q649 -26 654 -29T661 -34T667 -43T670 -56Q670 -74 648 -85L541 -86Q419 -86 396 -82Q320 -71 252 -29Q152 -197 148 -201Q139 -210 126 -210ZM235 62L330 220Q159 219 159 218Q159 196 176 150T235 62ZM366 281L513 526Q503 526 487 526T465 526T448 525T433 525T422 525T412 524T403 523T394 521T385 519T374 517Q298 498 243 447T167 324Q159 295 159 283Q159 281 366 281\",8715:\"96 251Q96 268 119 281H363Q607 281 607 283Q607 295 600 319T576 379T519 451T425 507Q386 521 361 523T233 526L119 527Q96 535 96 557Q96 578 116 585Q121 587 229 587Q238 587 257 587T288 588Q366 588 435 568T568 488Q670 388 670 251Q670 155 621 78T499 -39T345 -85Q336 -86 225 -86L119 -85Q96 -77 96 -55Q96 -38 119 -25H233Q356 -24 371 -21Q373 -21 393 -16Q468 3 523 55T599 177Q607 206 607 218Q607 220 363 220L119 221Q96 229 96 251\",8722:\"119 221Q96 230 96 251T116 279Q121 281 448 281H775Q776 280 779 278T785 274T791 269T795 262T797 251Q797 230 775 221H119\",8723:\"64 155Q64 172 87 185H416V476H251L87 477Q64 485 64 507Q64 528 84 535Q89 537 448 537H807Q808 536 811 534T817 530T823 525T827 518T829 507Q829 486 807 477L642 476H477V185H807Q808 184 811 182T817 178T823 173T827 166T829 155Q829 134 807 125L642 124H477V-39Q477 -203 475 -208Q466 -227 446 -227Q427 -227 417 -205L416 -41V124H251L87 125Q64 133 64 155\",8725:\"451 730Q460 750 479 750Q492 750 501 740T510 718Q508 708 318 244L122 -232Q112 -250 95 -250Q82 -250 73 -241T64 -218Q66 -205 258 261T451 730\",8726:\"64 718Q63 731 72 740T94 750Q106 750 113 743Q118 741 122 732L318 256Q508 -208 510 -218Q511 -231 502 -240T480 -250Q460 -250 451 -230Q451 -229 259 238T64 718\",8727:\"236 431Q237 447 251 459T287 472T323 459T338 431Q338 423 328 363L317 300Q318 300 340 317T392 356T435 387Q442 390 450 390Q470 390 485 374T501 335Q501 326 500 320T494 309T486 300T473 293T458 287T438 280T414 272L353 250L414 228Q422 225 436 221T457 214T472 208T485 201T493 192T499 181T501 166Q501 141 484 126T450 111Q447 111 445 111T441 111T437 112T433 114T428 117T422 121T414 127T404 135T391 145T374 158L317 200L328 137Q338 77 338 69Q336 52 321 40T287 28T253 40T236 69Q236 77 246 137L257 200Q256 200 234 183T182 144T139 113Q132 110 124 110Q104 110 89 126T73 165Q73 174 74 180T80 191T88 200T101 207T116 213T136 220T160 228L221 250L160 272Q152 275 138 279T117 286T102 292T89 299T81 308T75 319T73 334Q73 359 90 374T124 389Q127 389 129 389T133 389T137 388T141 386T146 383T152 379T160 373T170 365T183 355T200 342L257 300L246 363Q236 423 236 431\",8728:\"64 251Q64 303 80 344T121 409T175 448T230 469T275 474Q277 474 283 474T292 473Q385 473 447 415T510 251Q510 149 449 89T287 28T126 88T64 251ZM448 251Q448 325 405 369T286 413Q215 413 171 371T126 251Q126 177 168 133T287 89Q361 89 404 132T448 251\",8729:\"64 251Q64 303 80 344T121 409T175 448T230 469T275 474Q277 474 283 474T292 473Q385 473 447 415T510 251Q510 149 449 89T287 28T126 88T64 251\",8730:\"107 178Q100 178 89 188T78 207Q78 216 84 220Q85 221 124 248T207 304T260 338Q269 340 275 335Q276 334 370 156L463 -20L698 393Q928 800 935 811Q944 820 954 820Q972 820 980 811T988 789Q988 781 858 553Q776 409 718 306Q452 -166 447 -171Q439 -179 422 -180Q405 -180 400 -175Q399 -174 346 -73T241 128T187 229L151 205Q111 178 107 178\",8733:\"65 222Q65 282 88 329T144 401T208 438T261 451H273Q312 451 320 450Q456 431 526 330L537 316Q638 451 778 451Q813 451 830 445V388Q821 391 799 391Q758 391 721 377T660 342T618 301T592 266L584 251Q648 152 697 114Q748 74 804 74H806Q823 74 829 77Q830 77 830 38V-1L820 -3Q801 -7 786 -7H771Q699 -7 632 25T527 114L516 128Q414 -8 276 -8Q192 -8 129 56T65 222ZM256 53Q296 53 332 67T392 102T434 143T461 178L469 193Q405 292 356 330Q308 369 251 369H243Q196 369 156 328T116 221Q116 191 124 161T158 99T225 55Q234 53 256 53\",8734:\"65 219Q65 318 132 385T302 452Q473 452 573 331L589 312L596 320Q710 452 857 452Q948 452 1016 386T1084 225Q1084 125 1017 59T848 -8Q679 -8 576 113L560 132L553 124Q439 -8 292 -8Q200 -8 133 58T65 219ZM1033 224Q1033 291 987 340T875 389Q748 389 648 261Q641 253 642 251Q717 163 748 137Q813 81 880 81Q941 81 987 120T1033 224ZM275 56Q315 56 353 70T418 104T466 144T497 178L507 192Q507 193 474 230T441 269Q355 362 267 362Q210 362 163 324T116 221Q116 150 162 103T275 56\",8736:\"71 0L68 2Q65 3 63 5T58 11T55 20Q55 21 56 23V25Q55 27 55 30Q55 31 56 33V35Q55 37 55 40Q55 42 57 48Q67 63 346 381Q421 467 518 578Q607 680 623 697T647 714Q656 714 661 708T666 694V692Q676 687 676 674Q676 668 673 663Q672 662 637 622T534 503T400 350L147 61L386 60H653Q666 50 666 40V38Q676 31 676 20Q676 8 661 0H71\",8739:\"160 -249Q138 -249 129 -225V250Q129 725 131 729Q139 750 159 750T190 725V-225Q181 -249 160 -249\",8741:\"205 -225Q201 -234 199 -237T191 -244T175 -248T161 -246Q151 -240 146 -229Q145 -224 145 251Q145 725 146 730Q156 750 176 750Q193 748 205 727V-225ZM369 727L372 732Q375 737 377 740T385 747T398 750Q406 750 413 747Q423 740 428 730Q430 720 430 251Q430 -219 428 -229Q423 -240 413 -246Q408 -248 400 -248Q393 -248 388 -247T379 -242T375 -236T371 -230L369 -225V727\",8743:\"95 -16Q78 -16 71 -6T64 14Q64 20 65 22L212 308Q359 593 361 595Q370 604 385 604Q398 602 405 595Q407 593 554 308L701 22Q702 20 702 15Q702 1 693 -8T671 -17Q661 -17 651 -9Q647 -5 515 251L383 506L251 251Q119 -5 116 -8Q108 -16 95 -16\",8744:\"64 572Q64 585 72 594T94 604T116 595Q119 592 251 336L383 81L515 336Q647 592 651 596Q661 604 671 604Q684 604 693 595T702 572Q702 567 701 565L554 279Q407 -6 405 -8Q404 -9 401 -11T397 -14Q392 -16 383 -16H380Q369 -16 361 -8Q359 -6 212 279L65 565Q65 566 65 568T64 572\",8745:\"94 -16Q73 -16 64 8V209Q64 239 64 287Q65 418 69 432Q70 434 70 435Q84 487 125 523T216 575T299 597T354 603H372Q444 603 501 590T591 558T648 515T681 471T696 435Q696 434 697 432Q701 417 702 309Q702 303 702 287Q702 239 702 209V8Q693 -16 672 -16Q650 -16 643 3Q641 8 641 201Q641 397 640 403Q631 472 558 507T383 542Q339 542 298 535T219 511T156 468T126 403Q125 397 125 201Q125 8 123 3Q116 -16 94 -16\",8746:\"672 603Q693 603 702 579V378Q702 348 702 300Q701 169 697 155Q696 153 696 152Q676 78 593 31T383 -16Q265 -16 179 28T70 152Q70 153 69 155Q65 170 64 278Q64 285 64 300Q64 348 64 378Q64 579 65 583Q74 604 94 604T123 584Q125 579 125 386Q125 190 126 184Q135 115 210 80T383 44Q426 44 467 51T546 75T609 119T640 184Q641 190 641 386Q641 579 643 584Q650 603 672 603\",8747:\"204 -71Q204 -108 181 -124T137 -141Q132 -141 132 -142Q142 -161 154 -161Q164 -161 186 -152Q200 -145 210 -135T228 -107T241 -77T249 -38T254 -2T258 38T262 74Q282 265 334 489Q334 490 337 503T341 523T347 544T355 569T365 594T379 620T397 643T420 666T447 685T481 700Q511 711 539 711T587 696T616 656T628 612T632 573Q632 536 610 519T562 501Q534 501 513 519T492 571Q492 608 515 624T559 641Q564 641 564 642Q554 661 542 661Q532 661 510 652Q496 645 486 635T468 607T455 577T447 538T442 502T438 462T434 426Q414 235 362 11Q352 -35 347 -54T328 -101T291 -152Q235 -208 162 -211Q147 -211 136 -208T109 -196T83 -165T67 -108Q64 -94 64 -73Q64 -37 86 -19T134 -1Q162 -1 183 -19T204 -71\",8764:\"64 155Q64 210 84 262T150 353T257 391Q300 391 341 371T417 321T484 264T557 215T637 194Q702 194 745 244T788 367Q796 391 808 391Q815 391 821 381T828 353V342Q828 252 776 181T637 109Q594 109 552 129T476 179T409 236T336 285T256 306Q193 306 149 258T105 132Q98 109 86 109Q76 109 70 122T64 155\",8768:\"64 561Q64 570 76 576T108 583Q174 583 214 535T254 407Q254 368 238 324T202 248T166 173T149 92Q149 43 169 2T217 -39Q231 -40 242 -46T254 -60Q254 -69 241 -75T210 -82Q145 -82 105 -34T64 93Q64 133 80 177T116 253T152 328T169 408Q169 461 148 500T105 540Q92 540 78 545T64 561\",8771:\"64 295Q64 378 117 440T257 502Q298 502 339 485T416 443T486 394T560 352T637 335Q693 335 740 373T788 478Q796 502 808 502Q815 502 821 492T828 465V455Q828 365 771 308T640 250Q603 250 562 265T501 294T439 336L370 382Q308 417 256 417Q205 417 164 388T110 317Q110 316 109 304T107 286T103 270T97 255T86 250Q76 250 70 263T64 295ZM64 6T64 27T87 56H93Q99 56 110 56T137 56T173 56T217 56T267 57T323 57T383 57T448 57H807Q808 56 811 54T815 52T819 49T823 45T826 40T828 34T829 27Q829 7 807 -3H87Q64 6 64 27\",8773:\"64 402Q64 457 84 509T150 600T257 638Q300 638 341 618T417 569T484 511T557 462T637 441Q702 441 745 491T788 614Q796 638 808 638Q815 638 821 628T828 600V589Q828 499 776 428T637 356Q594 356 552 376T476 425T409 483T336 532T256 553Q193 553 149 505T105 379Q98 356 86 356Q76 356 70 369T64 402ZM87 197Q64 207 64 226Q64 247 84 255Q89 257 448 257H807Q808 256 811 254T817 250T823 245T827 238T829 227Q829 209 807 197H87ZM87 -27Q64 -18 64 3Q64 23 86 32Q89 33 448 33H807L812 30Q816 27 818 26T823 21T827 13T829 3Q829 -18 807 -27H87\",8776:\"64 345Q64 423 119 473T250 524Q301 524 356 503T451 455T542 407T636 385Q700 385 743 417T786 481Q786 493 791 508T807 524Q817 524 823 512T829 479Q829 404 776 352T638 300Q590 300 537 321T443 369T352 417T256 439Q207 439 166 417T110 359Q109 357 107 341T100 312T85 300Q77 300 71 313T64 345ZM64 77Q64 155 119 205T250 256Q302 256 357 235T451 187T541 139T636 117Q699 117 742 148T786 213Q786 231 792 243T808 256T823 242T829 208Q829 134 776 83T640 32Q591 32 537 53T443 101T352 149T256 171Q206 171 165 148T110 91Q109 89 107 73T100 44T85 32Q77 32 71 45T64 77\",8781:\"798 533Q812 533 820 524T829 502T819 480T769 440Q655 355 537 330Q492 322 447 322Q401 322 356 330Q289 344 219 381T118 443T73 481Q64 490 64 503Q64 517 72 525T94 533Q99 533 102 532Q107 531 138 507T209 456T314 405T446 382Q604 382 765 515Q788 533 798 533ZM95 -32Q81 -32 73 -23T64 -1Q64 10 74 21T124 61Q213 127 293 153T421 179L422 180Q424 180 426 180T432 180T441 180T452 179Q612 179 769 61Q811 29 820 19T829 -1Q829 -14 821 -23T798 -32Q788 -32 765 -14Q608 118 446 118Q287 118 128 -14Q105 -32 95 -32\",8784:\"87 333Q64 343 64 362Q64 383 84 391Q89 393 448 393H807Q808 392 811 390T817 386T823 381T827 374T829 363Q829 345 807 333H87ZM87 109Q64 118 64 139Q64 159 86 168Q89 169 448 169H807L812 166Q816 163 818 162T823 157T827 149T829 139Q829 118 807 109H87ZM362 635Q362 671 387 696T444 721Q488 721 510 693T533 635Q533 606 512 579T448 551Q406 551 384 577T362 635\",8800:\"189 -210Q179 -210 170 -203T160 -179Q160 -171 162 -166Q165 -163 327 109H87Q64 118 64 139Q64 159 86 168Q89 169 363 169L461 333H87Q64 343 64 362Q64 383 84 391Q89 393 448 393H496Q533 455 583 539T656 660T679 698Q686 711 704 711Q714 711 723 704T733 681Q733 672 730 667Q729 664 709 631T645 523T567 393H807Q808 392 811 390T817 386T823 381T827 374T829 363Q829 345 807 333H532L433 169H807L812 166Q816 163 818 162T823 157T827 149T829 139Q829 118 807 109H398Q217 -195 211 -201Q202 -210 189 -210\",8801:\"87 445Q64 454 64 475Q64 497 84 503Q89 505 448 505H807Q808 504 812 502T818 497T823 492T827 484T829 474Q829 456 807 445H87ZM87 221Q64 230 64 251T84 279Q89 281 448 281H807Q808 280 811 278T817 274T823 269T827 262T829 251Q829 230 807 221H87ZM64 6T64 27T87 56H93Q99 56 110 56T137 56T173 56T217 56T267 57T323 57T383 57T448 57H807Q808 56 811 54T815 52T819 49T823 45T826 40T828 34T829 27Q829 7 807 -3H87Q64 6 64 27\",8804:\"797 55Q797 45 790 35T767 25H759L434 180Q108 336 105 339Q96 348 96 360Q96 378 114 388Q126 394 439 544T757 695Q763 697 766 697Q780 697 788 688T797 666Q797 654 788 645Q784 641 507 509T197 361L466 232Q785 80 790 74Q797 66 797 55ZM119 -199Q96 -191 96 -169Q96 -160 102 -152T119 -140H124Q130 -140 140 -140T164 -140T197 -140T237 -140T283 -139T334 -139T389 -139T448 -139H775Q797 -153 797 -169Q797 -187 775 -199H119\",8805:\"127 25Q110 25 103 34T96 54Q96 66 105 75Q109 80 439 238L696 361Q113 637 105 645Q96 654 96 667Q96 679 104 688T128 697Q137 696 460 541T788 382Q797 373 797 360Q797 348 788 339Q785 336 459 180L135 25H127ZM119 -199Q96 -191 96 -169Q96 -160 102 -152T119 -140H124Q130 -140 140 -140T164 -140T197 -140T237 -140T283 -139T334 -139T389 -139T448 -139H775Q797 -153 797 -169Q797 -187 775 -199H119\",8810:\"734 -74T734 -86T727 -107T704 -116H702Q694 -116 584 -55Q473 7 380 58Q87 219 73 229Q64 238 64 250Q64 263 73 272Q87 282 380 443Q695 616 699 617H700Q718 617 726 607T734 588Q734 568 717 560Q705 554 435 404L157 250L439 94Q721 -61 726 -66Q734 -74 734 -86ZM1085 -74T1085 -86T1078 -107T1055 -116H1053Q1045 -116 935 -55Q824 7 731 58Q438 219 424 229Q415 238 415 250Q415 263 424 272Q438 282 731 443Q1046 616 1050 617H1051Q1069 617 1077 607T1085 588Q1085 568 1068 560Q1056 554 786 404L508 250L790 94Q1072 -61 1077 -66Q1085 -74 1085 -86\",8811:\"64 588Q64 600 72 609T94 618H95Q103 618 209 559Q322 496 419 443Q712 282 725 272Q734 263 734 250Q734 238 725 229Q714 220 415 55T110 -113Q103 -116 95 -116Q78 -116 71 -106T64 -86Q64 -74 72 -66Q77 -61 359 94L641 250L363 404Q277 452 173 509Q95 552 82 560T66 576V577Q64 585 64 588ZM415 588Q415 600 423 609T445 618H446Q454 618 560 559Q673 496 770 443Q1063 282 1076 272Q1085 263 1085 250Q1085 238 1076 229Q1065 220 766 55T461 -113Q454 -116 446 -116Q429 -116 422 -106T415 -86Q415 -74 423 -66Q428 -61 710 94L992 250L714 404Q628 452 524 509Q446 552 433 560T417 576V577Q415 585 415 588\",8826:\"797 -57Q797 -65 790 -75T766 -86Q748 -86 741 -74T733 -43T719 8T681 72Q647 112 588 141T475 185T343 207T230 216T136 219Q96 219 96 250Q96 280 132 280H136Q193 281 239 283T347 292T457 310T556 342T643 391T703 460T735 553Q741 585 763 585Q781 585 789 575T797 556Q797 540 792 513T758 434T682 345Q605 285 481 254L462 249Q483 246 526 233T633 185T733 104Q767 63 782 15T797 -57\",8827:\"96 556Q96 568 104 577T126 586Q152 586 158 553Q164 503 188 462T247 394T331 345T429 313T539 294T649 284T758 280H760Q797 280 797 250Q797 219 760 219H758Q627 217 529 204T347 160T216 77T158 -54Q152 -86 126 -86Q110 -86 103 -76T96 -57Q96 -41 101 -14T135 65T211 154Q288 214 412 245L431 250Q410 252 367 265T259 314T160 395Q127 435 112 483T96 556\",8834:\"96 251Q96 389 191 482T417 586Q418 586 428 586T456 586T496 586T546 587T601 587H775Q776 586 779 584T785 580T791 575T795 568T797 557Q797 536 775 527L597 526Q411 525 395 522Q390 521 370 516Q285 494 222 424T158 251Q158 131 246 53Q313 -9 408 -23Q417 -24 597 -25H775Q776 -26 781 -29T788 -34T794 -43T797 -56Q797 -74 775 -85H493Q407 -85 376 -79Q257 -55 177 35T96 251\",8835:\"96 -55Q96 -38 119 -25H296Q482 -24 498 -21Q503 -20 523 -15Q609 7 672 77T735 251T665 431T485 524Q476 525 296 526L119 527Q96 535 96 557Q96 578 116 585Q121 587 300 587Q451 586 476 585T522 579Q632 556 714 468T796 251Q796 112 695 13Q612 -65 497 -82Q473 -86 289 -86L119 -85Q96 -77 96 -55\",8838:\"96 361Q96 499 191 592T417 696Q418 696 428 696T456 696T496 696T546 697T601 697H775Q776 696 779 694T785 690T791 685T795 678T797 667Q797 646 775 637L597 636Q411 635 395 632Q390 631 370 626Q285 604 222 534T158 361Q158 241 246 163Q313 101 408 87Q417 86 597 85H775Q776 84 781 81T788 76T794 67T797 54Q797 36 775 25H493Q407 25 376 31Q257 55 177 145T96 361ZM149 -199Q127 -191 127 -169T149 -140H154Q160 -140 169 -140T192 -140T224 -140T262 -140T306 -139T354 -139T407 -139T463 -139H775Q776 -140 779 -142T785 -146T791 -151T795 -158T797 -169Q797 -190 775 -199H149\",8839:\"96 55Q96 72 119 85H296Q482 86 498 89Q503 90 523 95Q609 117 672 187T735 361T665 541T485 634Q476 635 296 636L119 637Q96 645 96 667Q96 688 116 695Q121 697 300 697Q451 696 476 695T522 689Q632 666 714 578T796 361Q796 222 695 123Q612 45 497 28Q473 24 289 24L119 25Q96 33 96 55ZM119 -199Q96 -190 96 -169T116 -141Q121 -139 433 -139H745Q766 -152 766 -170Q766 -190 745 -199H119\",8846:\"672 603Q693 603 702 579V378Q702 348 702 300Q701 169 697 155Q696 153 696 152Q676 78 593 31T383 -16Q265 -16 179 28T70 152Q70 153 69 155Q65 170 64 278Q64 285 64 300Q64 348 64 378Q64 579 65 583Q74 604 94 604T123 584Q125 579 125 386Q125 190 126 184Q135 115 210 80T383 44Q426 44 467 51T546 75T609 119T640 184Q641 190 641 386Q641 579 643 584Q650 603 672 603ZM353 412Q353 420 353 435T352 456Q352 483 358 495T385 507Q403 506 409 494T415 457Q415 451 415 436T414 411V341H558Q579 329 579 311Q579 289 558 281L486 280H414V136Q400 114 384 114Q363 114 354 136L353 208V280H281L209 281Q187 289 187 310Q187 328 209 341H353V412\",8849:\"127 25Q111 29 104 49V362L105 675Q114 693 127 696H132Q138 696 149 696T174 696T208 696T249 696T297 697T350 697T407 697T468 697H806Q828 683 828 666Q828 646 806 637L485 636H165V85H805Q806 84 809 82T813 80T817 77T821 73T824 68T826 62T827 55Q827 34 806 25H127ZM96 -190T96 -169T119 -140H125Q131 -140 141 -140T167 -140T201 -140T242 -140T290 -139T344 -139T402 -139T463 -139H805Q806 -140 809 -142T813 -144T817 -147T821 -151T824 -156T826 -162T827 -169Q827 -190 806 -199H119Q96 -190 96 -169\",8850:\"66 55Q66 74 89 85H728V636H408L88 637Q66 645 66 667T88 696H94Q99 696 110 696T135 696T169 696T210 696T258 697T311 697T368 697T429 697H767Q786 684 789 672V49Q782 31 767 25H88Q66 32 66 55ZM88 -199Q66 -191 66 -169Q66 -148 87 -140Q91 -139 433 -139H775Q776 -140 779 -142T783 -144T787 -147T791 -151T794 -156T796 -162T797 -169Q797 -189 775 -199H88\",8851:\"131 25Q121 1 100 1Q81 1 71 23L70 301Q70 579 72 583Q77 598 90 602Q95 604 385 604H674Q693 591 696 579V25Q686 1 665 1Q646 1 636 23L635 283V543H131V25\",8852:\"696 25Q689 7 674 1H93Q77 7 71 23L70 301Q70 579 72 583Q80 604 100 604T131 579V61H635V579Q644 603 666 603Q687 603 696 579V25\",8853:\"64 250Q64 350 98 426T189 546T307 610T434 632Q485 632 496 631Q572 621 635 592Q669 575 699 550T760 484T809 384T828 250Q828 77 725 -27T446 -132Q272 -132 168 -27T64 250ZM416 282V570H414Q341 564 285 535T202 475T156 397T134 332T128 287Q127 283 127 282H416ZM765 288Q760 344 743 389T700 462T647 512T589 543T538 560T499 568L483 570H478V282H766L765 288ZM416 -69V220H127Q130 195 131 189T138 155T150 115T168 76T196 35T234 0T286 -35Q337 -61 410 -69H416ZM483 -69Q554 -60 607 -33T687 21T733 93T756 156T764 209Q766 217 766 220H478V-69H483\",8854:\"64 250Q64 350 98 426T189 546T307 610T434 632Q485 632 496 631Q572 621 635 592Q669 575 699 550T760 484T809 384T828 250Q828 77 725 -27T446 -132Q272 -132 168 -27T64 250ZM765 288Q753 424 666 497T446 571T227 498T128 288L127 282H766L765 288ZM446 -70Q578 -70 666 4T765 213L766 220H127Q130 195 131 189T138 155T150 115T168 76T196 35T234 0T286 -35Q353 -70 446 -70\",8855:\"64 250Q64 350 98 426T189 546T307 610T434 632Q485 632 496 631Q572 621 635 592Q669 575 699 550T760 484T809 384T828 250Q828 77 725 -27T446 -132Q272 -132 168 -27T64 250ZM647 512Q567 571 447 571Q340 571 262 523Q237 507 237 505L342 399L447 295L657 505L647 512ZM298 356L192 461Q180 445 161 411Q126 341 126 251Q126 128 192 40L403 250L298 356ZM701 41Q704 41 719 63T750 138T767 250Q767 310 750 362T719 437T701 460L491 250L701 41ZM238 -5Q238 -8 261 -22T336 -53T447 -70Q567 -70 647 -11L657 -4L447 206L342 101Q238 -1 238 -5\",8856:\"64 250Q64 350 98 426T189 546T307 610T434 632Q485 632 496 631Q572 621 635 592Q669 575 699 550T760 484T809 384T828 250Q828 77 725 -27T446 -132Q272 -132 168 -27T64 250ZM657 505Q656 506 650 510T638 518T623 527T604 537T581 547T553 556T522 563T486 569T446 571Q305 571 216 487T126 251Q126 128 192 40L657 505ZM447 -70Q591 -70 679 16T767 250Q767 308 751 360T719 436T701 460L469 228Q238 -1 238 -5Q238 -8 261 -22T336 -53T447 -70\",8857:\"64 250Q64 350 98 426T189 546T307 610T434 632Q485 632 496 631Q572 621 635 592Q669 575 699 550T760 484T809 384T828 250Q828 77 725 -27T446 -132Q272 -132 168 -27T64 250ZM767 252Q767 395 681 483T446 571Q303 571 215 486T126 249Q126 107 212 19T446 -70Q596 -70 681 18T767 252ZM335 251Q335 297 368 329T441 361Q498 361 527 327T557 250Q557 202 525 171T446 140Q397 140 366 173T335 251\",8866:\"65 672Q76 693 91 693Q115 693 123 674Q125 669 125 523V378H615Q618 376 622 373T628 369T632 366T635 362T636 356T637 347Q637 328 619 319Q615 317 370 317H125V171Q125 25 123 20Q114 1 94 1Q73 1 65 23V672\",8867:\"64 327T64 347T89 378H577V525L578 672Q592 693 604 693Q629 693 638 669V25Q628 1 607 1Q588 1 578 23L577 170V317H88Q64 327 64 347\",8868:\"64 664Q64 675 71 683T87 693H93Q99 693 110 693T137 693T173 693T217 694T267 694T323 694T383 694T448 694H807Q808 693 811 691T817 687T823 682T827 675T829 664Q829 643 807 634L642 633H477V25Q467 1 446 1Q427 1 417 23L416 328V633H251L87 634Q64 643 64 664\",8869:\"65 31Q65 38 66 41T71 50T87 61H416V366L417 672Q431 693 443 693Q468 693 477 669V61H807Q808 60 811 58T817 54T823 49T827 42T829 31Q829 10 807 1H87Q65 10 65 31\",8872:\"160 -249Q138 -249 129 -225V250Q129 725 131 729Q139 750 159 750T190 725V392Q219 393 537 393H896Q897 392 900 390T906 386T912 381T916 374T918 363Q918 345 896 333H190V169H896L900 166Q905 163 907 162T912 157T916 149T918 139Q918 118 896 109H190V-225Q181 -249 160 -249\",8900:\"280 522Q281 523 285 523H289Q301 523 366 457Q404 420 431 393Q533 291 546 277T560 250Q560 239 548 226T431 108Q313 -10 304 -16Q297 -21 287 -21Q278 -21 275 -19Q270 -17 146 107T18 238Q15 242 15 251Q15 258 18 263Q20 268 145 392T274 519L280 522ZM388 350L288 449L188 350L89 250L288 52L487 250L388 350\",8901:\"74 251Q74 286 99 311T156 336Q200 336 222 308T245 250Q245 221 224 194T160 166T96 193T74 251\",8902:\"270 491Q274 502 287 502Q298 502 304 491Q304 486 323 396T342 303L438 314Q520 324 534 324Q540 324 545 320T550 307Q550 298 539 290T456 243Q377 198 377 197L416 111Q456 26 456 22Q457 21 457 18Q457 11 451 6T438 0H437Q432 0 415 16Q387 42 358 68L287 133L216 68Q193 47 167 23Q142 0 136 0Q129 0 123 5T117 18Q117 21 118 22Q118 26 158 111L197 197Q197 198 156 221T72 269T26 298Q24 304 24 307Q24 315 29 319T40 324Q53 324 136 314L232 303Q232 306 251 396T270 491\",8904:\"906 251Q906 456 905 456Q550 252 549 251Q549 250 726 148T905 45T906 251ZM967 -14Q958 -38 939 -38H937Q928 -38 923 -35Q919 -34 748 64T500 209L71 -38Q69 -39 63 -39Q42 -39 33 -16V518Q45 540 63 540H65Q72 540 174 481Q247 439 302 407L500 292Q578 339 750 438T929 539H933Q958 539 967 515V-14ZM449 251L94 456Q93 456 93 251Q93 45 94 45L106 52Q119 59 139 71T186 98T242 131T301 165T357 197T404 225T437 244L449 251\",8942:\"74 55Q74 91 99 116T156 141Q200 141 222 113T245 55Q245 26 224 -1T160 -29Q118 -29 96 -3T74 55ZM74 465Q74 501 99 526T156 551Q200 551 222 523T245 465Q245 436 224 409T160 381Q118 381 96 407T74 465ZM74 865Q74 901 99 926T156 951Q200 951 222 923T245 865Q245 836 224 809T160 781Q118 781 96 807T74 865\",8943:\"74 251Q74 286 99 311T156 336Q200 336 222 308T245 250Q245 221 224 194T160 166T96 193T74 251ZM562 251Q562 286 587 311T644 336Q688 336 710 308T733 250Q733 221 712 194T648 166T584 193T562 251ZM1050 251Q1050 286 1075 311T1132 336Q1176 336 1198 308T1221 250Q1221 221 1200 194T1136 166T1072 193T1050 251\",8945:\"129 785Q129 821 154 846T211 871Q255 871 277 843T300 785Q300 756 279 729T215 701Q173 701 151 727T129 785ZM576 485Q576 521 601 546T658 571Q702 571 724 543T747 485Q747 456 726 429T662 401Q620 401 598 427T576 485ZM1023 185Q1023 221 1048 246T1105 271Q1149 271 1171 243T1194 185Q1194 156 1173 129T1109 101Q1067 101 1045 127T1023 185\",8968:\"194 728Q199 743 216 749H220Q223 749 229 749T245 749T265 750T289 750T316 750T345 750H471Q472 749 477 746T484 741T490 732T493 719Q493 701 471 690L362 689H254V-224Q244 -248 223 -248T194 -226V728\",8969:\"317 -224Q307 -248 286 -248Q267 -248 257 -226L256 231V689H148L40 690Q17 698 17 720Q17 741 37 748Q42 750 169 750H295Q314 737 317 725V-224\",8970:\"194 728Q204 749 220 749Q245 749 254 725V-188H471Q472 -189 477 -192T484 -197T490 -206T493 -219Q493 -237 471 -248H216Q200 -242 194 -226V728\",8971:\"17 -219Q17 -201 40 -188H256V270L257 728Q271 749 283 749Q308 749 317 725V-224Q310 -242 295 -248H40L38 -247Q35 -246 34 -245T30 -243T25 -239T21 -234T18 -227T17 -219\",8994:\"95 108Q85 108 75 114T65 139Q65 159 129 227Q316 405 573 405Q654 405 729 387T854 344T950 286T1015 232T1053 191Q1078 160 1083 152Q1084 148 1084 139Q1084 121 1074 115T1054 108Q1040 108 1029 122T990 167T922 223Q819 291 680 309Q641 315 575 315Q508 315 469 309Q303 288 197 201Q168 179 148 155T118 119T95 108\",8995:\"1054 392Q1067 392 1076 384T1085 362Q1085 351 1079 342T1050 310Q983 243 901 200Q753 126 575 126Q494 126 420 141T298 176T205 225T140 272T100 310Q64 346 64 362Q64 370 67 374Q75 393 93 393Q107 393 124 375Q272 214 575 214Q877 214 1025 375Q1039 392 1054 392\",9001:\"127 243V259L223 491Q251 557 286 642Q318 719 324 732T340 748H341Q347 750 351 750Q365 750 373 740T382 723Q382 713 286 482L190 251Q190 249 286 20T382 -219Q382 -232 373 -240T352 -249Q332 -249 323 -229Q320 -220 223 10L127 243\",9002:\"64 720Q64 732 72 741T94 750Q106 750 113 743Q118 741 122 732L319 259V243L122 -231Q112 -249 95 -249Q83 -249 74 -240T64 -218Q64 -210 160 20L256 251L160 482Q64 715 64 720\",9651:\"91 1Q69 10 69 31Q69 39 81 59T168 197Q327 447 485 697Q493 711 510 711Q523 711 532 702Q536 697 743 371T951 41Q953 35 953 31Q953 12 931 1H91ZM690 340Q651 401 604 476T534 586L512 621Q511 622 507 616Q498 604 332 342L154 62L333 61H689L867 62L690 340\",9653:\"91 1Q69 10 69 31Q69 39 81 59T168 197Q327 447 485 697Q493 711 510 711Q523 711 532 702Q536 697 743 371T951 41Q953 35 953 31Q953 12 931 1H91ZM690 340Q651 401 604 476T534 586L512 621Q511 622 507 616Q498 604 332 342L154 62L333 61H689L867 62L690 340\",9657:\"33 518Q45 540 63 540H65Q72 540 174 481Q247 439 302 407Q529 276 533 272Q542 263 542 250Q542 238 533 229Q528 224 304 95T71 -38Q69 -39 63 -39Q42 -39 33 -16V518ZM449 251L94 456Q93 456 93 251Q93 45 94 45L106 52Q119 59 139 71T186 98T242 131T301 165T357 197T404 225T437 244L449 251\",9661:\"68 470Q68 481 75 489T91 499H93Q296 500 512 500H931Q932 499 937 496T945 490T950 482T953 469Q953 465 951 459Q950 455 743 129T532 -202Q524 -210 511 -210Q497 -210 489 -202Q486 -199 281 124T71 456Q68 462 68 470ZM154 439Q155 437 332 158T510 -122Q510 -123 533 -87T600 18T688 157Q866 437 866 438Q867 439 805 439T511 439H154\",9663:\"68 470Q68 481 75 489T91 499H93Q296 500 512 500H931Q932 499 937 496T945 490T950 482T953 469Q953 465 951 459Q950 455 743 129T532 -202Q524 -210 511 -210Q497 -210 489 -202Q486 -199 281 124T71 456Q68 462 68 470ZM154 439Q155 437 332 158T510 -122Q510 -123 533 -87T600 18T688 157Q866 437 866 438Q867 439 805 439T511 439H154\",9667:\"542 -14Q533 -38 514 -38H512Q503 -38 498 -35Q494 -34 270 95T42 229Q33 238 33 251Q33 259 35 264Q36 265 38 268T42 272Q48 278 271 407T504 539H508Q533 539 542 515V-14ZM481 251Q481 456 480 456Q125 252 124 251Q124 250 301 148T480 45T481 251\",9711:\"65 42T65 250T204 584T574 711Q795 711 935 594Q955 577 974 555T1022 490T1067 385T1084 250Q1084 42 945 -84T574 -211T204 -85ZM1024 250Q1024 431 903 540T578 650Q482 650 404 627T274 565T189 474T140 366T125 250Q125 123 186 31T347 -106T573 -150Q772 -150 898 -45T1024 250\",9824:\"675 -18Q536 -18 527 62V70H477V55Q479 14 487 -21T502 -75T509 -101Q509 -120 491 -127Q487 -129 447 -129Q446 -129 439 -129T427 -130Q384 -130 384 -101Q384 -95 391 -76T406 -21T416 55V70H366Q364 52 360 40T342 14T300 -8T230 -17H218Q110 -17 75 117Q64 163 64 209Q64 290 116 357T261 495Q363 574 414 690Q425 719 445 719Q467 719 478 693Q507 627 547 578T623 503T702 438T777 357Q829 285 829 202V197Q826 128 808 81T762 15T714 -11T675 -18\",9825:\"65 491Q65 602 121 656T246 710Q375 710 440 624L447 615Q519 711 638 711Q723 711 775 652T828 491Q828 390 770 313T581 129Q539 95 514 63T483 14T469 -13T446 -24Q434 -24 427 -17T416 0T400 32T371 74Q352 97 310 131T229 199T151 276T89 374T65 491ZM249 649Q188 649 157 603T125 489Q125 409 181 338T352 176Q408 131 437 87L446 73L456 87Q479 121 507 147T579 207T659 278Q768 387 768 489Q768 506 766 524T756 566T731 611T687 642Q668 649 638 649Q609 649 593 644Q547 633 516 604T478 534Q473 505 447 505H445Q420 505 416 534Q407 577 372 608T285 648Q277 649 249 649\",9826:\"409 686Q410 688 412 691T415 696T418 701T421 706T424 709T427 713T431 715T435 717T440 718T446 719Q455 719 460 717T472 704T488 679T516 633T563 567Q624 485 687 422T787 330T826 296T828 282Q828 270 825 265T801 245Q696 161 612 59T477 -133Q465 -154 447 -154Q439 -154 434 -152T425 -146T414 -130T399 -104T372 -62T330 -3Q270 78 207 142T107 234T70 265Q64 274 64 282Q64 296 90 317Q284 472 409 686ZM749 282Q745 286 721 307T681 343T635 388T581 446T525 516T465 601Q462 606 457 613T450 624L447 627V628Q446 628 436 611T402 561T348 489T266 396T155 292L145 282Q147 280 185 245T257 177T343 79T442 -57Q446 -64 447 -64V-63Q450 -59 475 -22T530 56T619 160T749 282\",9827:\"240 527Q240 611 301 665T446 719T590 665T652 527Q652 431 571 373Q578 363 584 352T593 335T597 329L604 335Q611 341 617 345T637 356T667 366Q672 366 680 367T694 368Q767 368 814 310T861 177Q861 109 819 57T713 -12Q690 -17 656 -17Q535 -13 527 62V70H477V55Q479 14 487 -21T502 -75T509 -101Q509 -120 491 -127Q487 -129 447 -129Q446 -129 439 -129T427 -130Q384 -130 384 -101Q384 -95 391 -76T406 -21T416 55V70H366V62Q356 -12 237 -17Q130 -17 71 60Q32 111 32 178Q32 251 78 309T198 368Q217 368 233 364T260 354T279 343T291 333T296 329L300 336Q304 343 310 354T322 373Q240 432 240 527\",9837:\"230 480Q293 480 337 440T381 330V322Q381 240 323 161Q258 71 123 -11L114 -16L97 -17Q70 -17 66 -7Q64 -3 64 366V641Q64 717 65 731T75 748Q78 750 95 750Q117 750 122 742T127 694Q127 685 127 653T126 595V454Q183 480 230 480ZM242 333Q242 405 212 405H207Q147 405 130 370L127 364L126 219Q126 77 128 77Q133 82 140 90T167 127T202 183T229 253T242 333\",9838:\"345 -223Q333 -223 330 -214T327 -178V-116Q327 -23 326 -23L203 -82Q90 -134 77 -140Q65 -142 59 -130Q57 -126 57 295V595Q57 643 57 667T58 704T60 719T63 724Q93 741 101 741Q113 741 116 732T119 680V597Q119 467 120 467Q121 468 180 495T301 552T369 584Q381 586 387 574Q389 570 389 187V-88Q389 -132 389 -154T388 -188T386 -202T383 -206Q353 -223 345 -223ZM327 271Q327 421 326 421L120 323L119 173V23Q120 23 223 72L327 121V271\",9839:\"140 628Q151 628 154 620T158 591V549V484L166 488Q175 492 192 500T223 516L288 548V622V674Q288 681 288 685T289 693T289 699T291 703T295 707T298 709T304 712T311 716Q326 724 332 724Q343 724 346 715T350 685V644V579Q358 583 364 583Q376 583 380 574Q382 570 382 514V481Q382 459 380 454T363 441L350 435V135Q358 139 364 139Q376 139 380 130Q382 126 382 70V37Q382 15 380 10T363 -3L350 -9V-76Q350 -102 348 -106T328 -119Q312 -128 306 -128Q288 -128 288 -99V-77V-40L280 -44Q271 -48 254 -56T223 -72L158 -104V-150V-180Q158 -198 155 -202T135 -216Q119 -224 114 -224Q96 -224 96 -192V-172V-135Q86 -140 81 -140Q70 -140 66 -129Q64 -126 64 -70V-54Q64 -18 66 -12T83 3L96 9V309Q86 304 81 304Q70 304 66 315Q64 318 64 374V407Q64 429 66 434T83 447L96 453V602Q99 609 100 610T118 619Q134 628 140 628ZM288 254Q288 404 287 404L158 340V40L166 44Q175 48 192 56T223 72L288 104V254\",10072:\"160 -249Q138 -249 129 -225V250Q129 725 131 729Q139 750 159 750T190 725V-225Q181 -249 160 -249\",10216:\"127 243V259L223 491Q251 557 286 642Q318 719 324 732T340 748H341Q347 750 351 750Q365 750 373 740T382 723Q382 713 286 482L190 251Q190 249 286 20T382 -219Q382 -232 373 -240T352 -249Q332 -249 323 -229Q320 -220 223 10L127 243\",10217:\"64 720Q64 732 72 741T94 750Q106 750 113 743Q118 741 122 732L319 259V243L122 -231Q112 -249 95 -249Q83 -249 74 -240T64 -218Q64 -210 160 20L256 251L160 482Q64 715 64 720\",10229:\"1063 221L649 220H235Q340 133 364 17Q368 1 368 -2Q368 -16 343 -17Q340 -17 338 -17H332Q317 -17 314 -14T305 6Q298 34 285 62T247 126T179 189T78 233Q64 237 64 251Q64 261 74 265T108 277T154 297Q212 328 251 379T305 495Q309 511 313 514T333 518H338Q363 517 367 510Q368 507 368 503Q368 500 364 484Q345 401 287 331Q254 295 235 282L649 281H1063L1065 280Q1079 281 1392 281H1719Q1720 280 1723 278T1729 274T1735 269T1739 262T1741 251Q1741 230 1719 221H1063\",10230:\"119 221Q96 230 96 251T116 279Q121 281 448 281H1188L1602 282Q1569 304 1530 357T1473 482Q1469 500 1469 501Q1469 512 1480 517Q1482 518 1500 518H1505Q1520 518 1523 515T1532 495Q1552 412 1611 351T1753 270Q1773 263 1773 251Q1773 240 1765 236T1732 225T1683 204Q1625 173 1586 122T1532 6Q1528 -10 1524 -13T1504 -17H1499Q1474 -16 1470 -9Q1469 -6 1469 -2Q1469 1 1473 17Q1501 138 1602 220H1188L775 221H119\",10231:\"1063 221L649 220H235Q340 133 364 17Q368 1 368 -2Q368 -16 343 -17Q340 -17 338 -17H332Q317 -17 314 -14T305 6Q298 34 285 62T247 126T179 189T78 233Q64 237 64 251Q64 261 74 265T108 277T154 297Q212 328 251 379T305 495Q309 511 313 514T333 518H338Q363 517 367 510Q368 507 368 503Q368 500 364 484Q345 401 287 331Q254 295 235 282L649 281H1476L1890 282Q1857 304 1818 357T1761 482Q1757 500 1757 501Q1757 512 1768 517Q1770 518 1788 518H1793Q1808 518 1811 515T1820 495Q1840 412 1899 351T2041 270Q2061 263 2061 251Q2061 240 2053 236T2020 225T1971 204Q1913 173 1874 122T1820 6Q1816 -10 1812 -13T1792 -17H1787Q1762 -16 1758 -9Q1757 -6 1757 -2Q1757 1 1761 17Q1789 138 1890 220H1476L1063 221\",10232:\"1063 333L700 332H338L324 321Q283 290 230 264L205 250Q266 224 323 180L338 170L700 169H1063L1064 168Q1080 169 1423 169H1782L1786 166Q1791 163 1793 162T1798 157T1802 149T1804 139Q1804 118 1782 109H1063L733 108H404L412 99Q455 50 488 -10Q498 -27 493 -37Q487 -46 465 -46H460Q446 -46 439 -39T426 -18T399 25T344 89Q239 194 99 229Q96 230 92 231T85 232T79 234T73 235T69 237T66 240T65 244T64 250Q64 267 90 271Q197 295 286 361T430 525Q439 542 442 544T460 547H465Q487 547 492 539Q496 531 496 530Q496 521 471 482T414 405L404 394L733 393H1063Q1064 392 1065 392Q1081 393 1423 393H1782Q1783 392 1786 390T1792 386T1798 381T1802 374T1804 363Q1804 345 1782 333H1063\",10233:\"87 109Q64 118 64 139Q64 159 86 168Q89 169 448 169H1169L1532 170L1546 180Q1562 193 1580 204T1612 223T1638 237T1657 246L1664 250L1639 264Q1586 290 1545 321L1531 332H1169L807 333H87Q64 343 64 362Q64 383 84 391Q89 393 448 393H1136L1465 394L1455 405Q1428 436 1401 477T1374 531Q1374 547 1399 547H1404H1409Q1423 547 1430 540T1443 519T1470 475T1526 411Q1634 303 1779 271Q1780 271 1783 270T1788 269T1792 268T1796 266T1799 264T1802 260T1803 256T1804 250Q1804 242 1800 238T1783 231T1755 225T1712 211T1654 185Q1517 112 1439 -24Q1430 -40 1426 -43T1409 -46H1404Q1373 -46 1373 -31Q1373 -24 1381 -10Q1414 50 1457 99L1465 108H1136L807 109H87\",10234:\"1063 333L700 332H338L324 321Q283 290 230 264L205 250Q266 224 323 180L338 170L700 169H1425L1788 170L1802 180Q1818 193 1836 204T1868 223T1894 237T1913 246L1920 250L1895 264Q1842 290 1801 321L1787 332H1425L1063 333ZM733 393H1392L1721 394L1711 405Q1684 436 1657 477T1630 531Q1630 547 1655 547H1660H1665Q1679 547 1686 540T1699 519T1726 475T1782 411Q1890 303 2035 271Q2036 271 2039 270T2044 269T2048 268T2052 266T2055 264T2058 260T2059 256T2060 250Q2060 242 2056 238T2039 231T2011 225T1968 211T1910 185Q1773 112 1695 -24Q1686 -40 1682 -43T1665 -46H1660Q1629 -46 1629 -31Q1629 -24 1637 -10Q1670 50 1713 99L1721 108H1392L1063 109L733 108H404L412 99Q455 50 488 -10Q498 -27 493 -37Q487 -46 465 -46H460Q446 -46 439 -39T426 -18T399 25T344 89Q239 194 99 229Q96 230 92 231T85 232T79 234T73 235T69 237T66 240T65 244T64 250Q64 267 90 271Q197 295 286 361T430 525Q439 542 442 544T460 547H465Q487 547 492 539Q496 531 496 530Q496 521 471 482T414 405L404 394L733 393\",10236:\"65 426Q74 448 95 448Q112 448 125 426V281H130L132 280H134Q162 281 448 281H1188L1602 282Q1569 304 1530 357T1473 482Q1469 500 1469 501Q1469 512 1480 517Q1482 518 1500 518H1505Q1520 518 1523 515T1532 495Q1552 412 1611 351T1753 270Q1773 263 1773 251Q1773 240 1765 236T1732 225T1683 204Q1625 173 1586 122T1532 6Q1528 -10 1524 -13T1504 -17H1499Q1474 -16 1470 -9Q1469 -6 1469 -2Q1469 1 1473 17Q1501 138 1602 220H1188L775 221H135Q133 220 130 220H125V76Q115 54 95 54Q73 54 65 76V426\",10744:\"189 -210Q179 -210 170 -203T160 -179Q160 -171 162 -166Q164 -163 420 266T679 698Q686 711 704 711Q714 711 723 704T733 681Q733 672 730 667Q723 654 469 228T211 -201Q202 -210 189 -210\",10799:\"168 500Q168 515 178 522T195 530H198Q207 530 218 521T282 458Q312 428 331 409L447 294L563 409Q674 520 682 525Q687 529 695 529Q711 529 718 520T726 499V498Q726 489 720 481T666 427Q631 392 606 367L490 251L606 135Q717 23 721 17T726 2Q726 -9 719 -18T695 -28H692Q685 -28 674 -18T608 47Q581 74 563 92L447 207L331 91Q217 -22 208 -27Q206 -28 203 -28H197Q168 -28 168 2Q168 13 178 24T288 135L404 250L288 366Q177 479 173 485T168 500\",10815:\"39 655Q39 675 43 680T69 686Q110 684 225 684Q267 684 303 684T360 685T385 686Q401 686 405 680T409 651Q409 632 403 628T367 624H348H301V62H598V624H551H532Q502 624 496 628T490 651Q490 673 494 679T514 686Q518 686 558 685T675 684T792 685T836 686Q852 686 856 680T860 651Q860 632 854 628T818 624H799H752V62H799H809Q846 62 853 59T860 36V31V21Q860 6 850 2Q846 0 450 0H156Q75 0 60 1T40 11V18Q39 26 39 31Q39 54 44 58T82 63Q84 63 90 63T100 62H147V624H100H90Q53 624 46 627T39 650V655\",10927:\"796 54Q796 40 788 32T767 24Q741 24 735 57Q729 107 705 148T646 216T563 264T465 297T356 316T245 326T136 330H134Q96 330 96 360Q96 391 134 391H136Q193 392 239 394T347 403T457 421T556 453T643 502T703 571T735 664Q741 696 763 696Q781 696 789 686T797 667Q797 651 792 624T758 545T682 456Q605 396 481 365L462 360Q483 357 526 344T633 296T733 215Q767 173 781 128T796 54ZM119 -199Q96 -190 96 -169T116 -141Q121 -139 448 -139H775Q776 -140 779 -142T785 -146T791 -151T795 -158T797 -169Q797 -190 775 -199H119\",10928:\"127 24Q115 24 106 32T97 55Q97 95 124 156T211 265Q288 325 412 356L431 361Q410 363 367 376T259 425T160 506Q127 546 112 594T96 667Q96 679 104 688T126 697Q152 697 158 664Q164 614 188 573T247 505T331 456T429 424T539 405T649 395T758 391Q797 391 797 360Q797 330 761 330H758Q701 329 655 327T547 318T437 300T337 268T251 219T190 150T158 57Q151 24 127 24ZM119 -199Q96 -190 96 -169T116 -141Q121 -139 448 -139H775Q776 -140 779 -142T785 -146T791 -151T795 -158T797 -169Q797 -190 775 -199H119\",12296:\"127 243V259L223 491Q251 557 286 642Q318 719 324 732T340 748H341Q347 750 351 750Q365 750 373 740T382 723Q382 713 286 482L190 251Q190 249 286 20T382 -219Q382 -232 373 -240T352 -249Q332 -249 323 -229Q320 -220 223 10L127 243\",12297:\"64 720Q64 732 72 741T94 750Q106 750 113 743Q118 741 122 732L319 259V243L122 -231Q112 -249 95 -249Q83 -249 74 -240T64 -218Q64 -210 160 20L256 251L160 482Q64 715 64 720\"},{8243:\"\\u2032\\u2032\",8244:\"\\u2032\\u2032\\u2032\",8279:\"\\u2032\\u2032\\u2032\\u2032\",8602:\"\\u2190\\u0338\",8603:\"\\u2192\\u0338\",8622:\"\\u2194\\u0338\",8653:\"\\u21d0\\u0338\",8654:\"\\u21d4\\u0338\",8655:\"\\u21d2\\u0338\",8708:\"\\u2203\\u0338\",8716:\"\\u220b\\u0338\",8740:\"\\u2223\\u0338\",8742:\"\\u2225\\u0338\",8769:\"\\u223c\\u0338\",8772:\"\\u2243\\u0338\",8775:\"\\u2245\\u0338\",8777:\"\\u2248\\u0338\",8802:\"\\u2261\\u0338\",8813:\"\\u224d\\u0338\",8814:\"<\\u0338\",8815:\">\\u0338\",8816:\"\\u2264\\u0338\",8817:\"\\u2265\\u0338\",8832:\"\\u227a\\u0338\",8833:\"\\u227b\\u0338\",8836:\"\\u2282\\u0338\",8837:\"\\u2283\\u0338\",8840:\"\\u2286\\u0338\",8841:\"\\u2287\\u0338\",8876:\"\\u22a2\\u0338\",8877:\"\\u22a8\\u0338\",8930:\"\\u2291\\u0338\",8931:\"\\u2292\\u0338\"})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.bold=void 0,e.bold={33:[.705,0,.35],34:[.694,-.329,.603],35:[.694,.193,.958],36:[.75,.056,.575],37:[.75,.056,.958],38:[.705,.011,.894],39:[.694,-.329,.319],40:[.75,.249,.447],41:[.75,.249,.447],42:[.75,-.306,.575],43:[.633,.131,.894],44:[.171,.194,.319],45:[.278,-.166,.383],46:[.171,0,.319],47:[.75,.25,.575],58:[.444,0,.319],59:[.444,.194,.319],60:[.587,.085,.894],61:[.393,-.109,.894],62:[.587,.085,.894],63:[.7,0,.543],64:[.699,.006,.894],91:[.75,.25,.319],92:[.75,.25,.575],93:[.75,.25,.319],94:[.694,-.52,.575],95:[-.01,.061,.575],96:[.706,-.503,.575],123:[.75,.25,.575],124:[.75,.249,.319],125:[.75,.25,.575],126:[.344,-.202,.575],168:[.695,-.535,.575],172:[.371,-.061,.767],175:[.607,-.54,.575],176:[.702,-.536,.575],177:[.728,.035,.894],180:[.706,-.503,.575],183:[.336,-.166,.319],215:[.53,.028,.894],247:[.597,.096,.894],305:[.442,0,.278,{sk:.0278}],567:[.442,.205,.306,{sk:.0833}],697:[.563,-.033,.344],710:[.694,-.52,.575],711:[.66,-.515,.575],713:[.607,-.54,.575],714:[.706,-.503,.575],715:[.706,-.503,.575],728:[.694,-.5,.575],729:[.695,-.525,.575],730:[.702,-.536,.575],732:[.694,-.552,.575],768:[.706,-.503,0],769:[.706,-.503,0],770:[.694,-.52,0],771:[.694,-.552,0],772:[.607,-.54,0],774:[.694,-.5,0],775:[.695,-.525,0],776:[.695,-.535,0],778:[.702,-.536,0],779:[.714,-.511,0],780:[.66,-.515,0],824:[.711,.21,0],8194:[0,0,.5],8195:[0,0,.999],8196:[0,0,.333],8197:[0,0,.25],8198:[0,0,.167],8201:[0,0,.167],8202:[0,0,.083],8211:[.3,-.249,.575],8212:[.3,-.249,1.15],8213:[.3,-.249,1.15],8214:[.75,.248,.575],8215:[-.01,.061,.575],8216:[.694,-.329,.319],8217:[.694,-.329,.319],8220:[.694,-.329,.603],8221:[.694,-.329,.603],8224:[.702,.211,.511],8225:[.702,.202,.511],8226:[.474,-.028,.575],8230:[.171,0,1.295],8242:[.563,-.033,.344],8243:[.563,0,.688],8244:[.563,0,1.032],8254:[.607,-.54,.575],8260:[.75,.25,.575],8279:[.563,0,1.376],8407:[.723,-.513,.575],8463:[.694,.008,.668,{sk:-.0319}],8467:[.702,.019,.474,{sk:.128}],8472:[.461,.21,.74],8501:[.694,0,.703],8592:[.518,.017,1.15],8593:[.694,.193,.575],8594:[.518,.017,1.15],8595:[.694,.194,.575],8596:[.518,.017,1.15],8597:[.767,.267,.575],8598:[.724,.194,1.15],8599:[.724,.193,1.15],8600:[.694,.224,1.15],8601:[.694,.224,1.15],8602:[.711,.21,1.15],8603:[.711,.21,1.15],8614:[.518,.017,1.15],8617:[.518,.017,1.282],8618:[.518,.017,1.282],8622:[.711,.21,1.15],8636:[.518,-.22,1.15],8637:[.281,.017,1.15],8640:[.518,-.22,1.15],8641:[.281,.017,1.15],8652:[.718,.017,1.15],8653:[.711,.21,1.15],8654:[.711,.21,1.15],8655:[.711,.21,1.15],8656:[.547,.046,1.15],8657:[.694,.193,.703],8658:[.547,.046,1.15],8659:[.694,.194,.703],8660:[.547,.046,1.15],8661:[.767,.267,.703],8704:[.694,.016,.639],8707:[.694,0,.639],8708:[.711,.21,.639],8709:[.767,.073,.575],8710:[.698,0,.958],8712:[.587,.086,.767],8713:[.711,.21,.767],8715:[.587,.086,.767],8716:[.711,.21,.767],8722:[.281,-.221,.894],8723:[.537,.227,.894],8725:[.75,.25,.575],8726:[.75,.25,.575],8727:[.472,-.028,.575],8728:[.474,-.028,.575],8729:[.474,-.028,.575],8730:[.82,.18,.958,{ic:.03}],8733:[.451,.008,.894],8734:[.452,.008,1.15],8736:[.714,0,.722],8739:[.75,.249,.319],8740:[.75,.249,.319],8741:[.75,.248,.575],8742:[.75,.248,.575],8743:[.604,.017,.767],8744:[.604,.016,.767],8745:[.603,.016,.767],8746:[.604,.016,.767],8747:[.711,.211,.569,{ic:.063}],8764:[.391,-.109,.894],8768:[.583,.082,.319],8769:[.711,.21,.894],8771:[.502,0,.894],8772:[.711,.21,.894],8773:[.638,.027,.894],8775:[.711,.21,.894],8776:[.524,-.032,.894],8777:[.711,.21,.894],8781:[.533,.032,.894],8784:[.721,-.109,.894],8800:[.711,.21,.894],8801:[.505,0,.894],8802:[.711,.21,.894],8804:[.697,.199,.894],8805:[.697,.199,.894],8810:[.617,.116,1.15],8811:[.618,.116,1.15],8813:[.711,.21,.894],8814:[.711,.21,.894],8815:[.711,.21,.894],8816:[.711,.21,.894],8817:[.711,.21,.894],8826:[.585,.086,.894],8827:[.586,.086,.894],8832:[.711,.21,.894],8833:[.711,.21,.894],8834:[.587,.085,.894],8835:[.587,.086,.894],8836:[.711,.21,.894],8837:[.711,.21,.894],8838:[.697,.199,.894],8839:[.697,.199,.894],8840:[.711,.21,.894],8841:[.711,.21,.894],8846:[.604,.016,.767],8849:[.697,.199,.894],8850:[.697,.199,.894],8851:[.604,0,.767],8852:[.604,0,.767],8853:[.632,.132,.894],8854:[.632,.132,.894],8855:[.632,.132,.894],8856:[.632,.132,.894],8857:[.632,.132,.894],8866:[.693,0,.703],8867:[.693,0,.703],8868:[.694,0,.894],8869:[.693,0,.894],8872:[.75,.249,.974],8876:[.711,.21,.703],8877:[.75,.249,.974],8900:[.523,.021,.575],8901:[.336,-.166,.319],8902:[.502,0,.575],8904:[.54,.039,1],8930:[.711,.21,.894],8931:[.711,.21,.894],8942:[.951,.029,.319],8943:[.336,-.166,1.295],8945:[.871,-.101,1.323],8968:[.75,.248,.511],8969:[.75,.248,.511],8970:[.749,.248,.511],8971:[.749,.248,.511],8994:[.405,-.108,1.15],8995:[.392,-.126,1.15],9001:[.75,.249,.447],9002:[.75,.249,.447],9651:[.711,0,1.022],9653:[.711,0,1.022],9657:[.54,.039,.575],9661:[.5,.21,1.022],9663:[.5,.21,1.022],9667:[.539,.038,.575],9711:[.711,.211,1.15],9824:[.719,.129,.894],9825:[.711,.024,.894],9826:[.719,.154,.894],9827:[.719,.129,.894],9837:[.75,.017,.447],9838:[.741,.223,.447],9839:[.724,.224,.447],10072:[.75,.249,.319],10216:[.75,.249,.447],10217:[.75,.249,.447],10229:[.518,.017,1.805],10230:[.518,.017,1.833],10231:[.518,.017,2.126],10232:[.547,.046,1.868],10233:[.547,.046,1.87],10234:[.547,.046,2.126],10236:[.518,.017,1.833],10744:[.711,.21,.894],10799:[.53,.028,.894],10815:[.686,0,.9],10927:[.696,.199,.894],10928:[.697,.199,.894],12296:[.75,.249,.447],12297:[.75,.249,.447]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.doubleStruck=void 0,e.doubleStruck={}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.frakturBold=void 0;var r=Q(6),T=Q(226);e.frakturBold=r.AddPaths(T.frakturBold,{33:\"121 621Q121 657 132 673T177 689Q223 689 223 644V635Q223 604 222 595Q221 590 210 490T187 292T175 190V186L166 185L156 184Q156 185 139 393T121 621ZM107 47Q107 70 127 87T174 104Q201 104 221 89T241 48Q241 24 222 6T174 -12Q147 -12 127 6T107 47\",34:\"53 695Q74 695 90 679V622L65 433L52 432H39L27 516Q10 626 10 655Q10 680 26 688Q33 693 39 693Q49 695 53 695ZM151 668Q151 691 191 691Q217 691 224 685T231 661V652Q230 634 219 531L207 433L195 432Q183 432 183 433L168 541Q151 664 151 668\",38:\"290 -14Q186 -14 115 41T44 185Q44 222 54 249T88 300T131 336T189 371Q216 387 216 388Q185 459 185 510Q185 563 206 601T263 659T334 687T405 696Q476 696 503 668T531 603Q531 565 513 536T450 476Q423 459 370 432L334 413L354 384Q474 212 560 139L563 137Q611 185 611 250Q611 295 577 329Q549 356 496 357Q439 357 433 354Q432 354 432 379V403L437 402Q443 402 479 401T557 400Q653 400 735 403T831 407H836Q833 352 833 351L821 352Q809 352 792 352T756 352T720 353T696 354Q680 354 680 353L681 346Q682 339 683 327T685 306Q685 283 681 260T669 218T653 182T635 152T619 129T606 114L602 109Q604 107 618 99T659 81T707 71Q742 71 767 99T804 155L815 183Q815 184 821 183T833 180T839 177Q837 169 834 156T816 110T782 52T727 5T648 -16Q569 -16 499 35H498Q496 35 466 23T387 -1T290 -14ZM418 592Q418 617 398 639T352 661T302 642T278 574Q278 545 288 514T306 465T319 444Q342 456 353 463T382 488T409 529T418 584V592ZM159 239Q159 158 222 98T364 38Q386 38 447 57L469 63L434 98Q349 185 286 275Q258 316 238 345Q233 353 232 353Q159 316 159 239\",39:\"80 645T80 662T93 687T123 695Q158 695 158 659Q158 649 157 643L123 437Q123 436 114 436H104Q104 442 92 538Q80 645 80 662\",40:\"347 719Q325 708 311 698T272 656T233 580T207 455T195 267Q195 30 247 -79Q261 -110 291 -136Q320 -163 347 -172V-179Q347 -186 344 -186Q338 -186 328 -184T287 -165T230 -123Q134 -25 134 271Q134 417 158 514T226 662T335 734L346 737Q347 737 347 728V719\",41:\"264 262Q264 366 253 446T226 572T186 649T145 692T105 714V725Q105 735 107 735Q108 734 121 731T154 719T196 692T242 641T284 560T314 437T326 268Q326 112 299 7Q279 -78 239 -124T116 -185L105 -187V-179L106 -171L109 -169Q130 -161 138 -158T165 -146T190 -127T210 -101T229 -64T243 -12T255 58T261 148T264 262\",42:\"40 516L62 529Q85 542 110 556T140 574L126 582Q112 591 104 595T80 607T40 629Q53 642 57 645L65 652L78 642Q106 620 132 603L152 589V595Q152 630 149 681V692H179V689Q178 681 174 638T171 593Q173 593 240 639L258 652Q260 652 267 643L276 633L260 625Q190 587 175 576Q173 575 180 570Q183 569 186 567Q213 549 256 527L277 515L256 495Q246 501 228 515T194 539T170 554V543Q170 486 178 449H148V456Q152 492 152 550L151 562Q150 562 102 528L53 495Q40 514 40 516\",43:\"422 584L471 598Q472 598 472 440V282H837Q833 273 829 263L821 244L647 243H472V-63L448 -73L423 -82Q422 -82 422 81V243H239Q56 243 56 244Q60 253 65 263L73 282H422V584\",44:\"118 61Q118 80 135 93T169 107Q190 107 221 65T253 -23Q253 -39 251 -49T237 -80T198 -133Q148 -191 144 -191Q142 -191 137 -182T132 -172Q143 -161 160 -131T183 -83Q185 -77 185 -62Q185 -54 184 -48T182 -38T177 -28T171 -19T162 -8T150 6Q130 28 124 38T118 61\",45:\"54 236L73 275H453Q833 275 833 274Q830 265 825 255L818 236H54\",46:\"103 23T103 44T120 83T170 102Q200 102 218 84T237 44Q237 20 216 3T168 -15Q138 -15 121 4\",47:\"272 270Q503 721 506 721L509 720Q512 720 518 719T529 717L550 713L91 -181L66 -182Q41 -182 41 -181L272 270\",48:\"238 -12Q162 -12 102 42T42 185Q42 303 130 393Q163 425 208 452T284 490L313 501Q323 499 339 495T395 472T464 426Q533 357 533 273Q533 201 483 133T364 27T238 -12ZM428 208Q428 255 402 297T342 365T280 404T241 419Q214 419 178 374T142 259Q142 206 168 164T225 99Q259 74 310 74Q326 74 337 75T366 82T396 103T417 141Q428 171 428 208\",49:\"95 481Q102 481 217 485T383 489Q384 489 384 485Q367 397 367 165Q367 58 369 54Q374 46 380 44T410 42H466H546V40Q547 38 547 19L548 0H54V23Q54 29 54 34T54 44L55 47Q79 47 134 46T202 45Q226 45 234 52Q240 57 241 64T245 105Q254 236 254 320V347Q254 369 252 382T240 409T211 431L97 450L96 465Q95 480 95 481\",50:\"307 335Q307 374 283 397T224 421Q187 421 112 387Q105 384 100 382T95 381Q90 387 86 394L77 407L86 413Q219 491 298 491Q370 491 399 460T428 388Q428 373 424 358T409 326T391 297T363 264T335 235T301 202T269 171L199 104Q194 99 205 97Q209 96 214 96Q527 105 544 105Q553 107 563 102Q563 100 557 79T545 34T537 2H377Q338 2 247 2T130 4H44V26L104 77Q185 145 212 172T267 235Q307 291 307 335\",51:\"102 402L108 408Q115 413 122 418T141 431T165 447T194 461T227 474T263 483T302 487H307Q413 487 452 420Q465 400 465 371Q465 334 445 303T396 253T347 225T317 213Q314 213 314 211Q316 209 316 205Q317 201 320 201Q337 201 359 198T411 184T465 156T506 109T523 39Q523 -62 436 -127T229 -193Q179 -193 130 -178T56 -150T31 -133Q31 -132 41 -122L52 -112L63 -117Q128 -148 201 -148Q282 -148 331 -104T381 20Q381 71 363 100T304 145Q243 166 149 166H137V204H146Q179 204 211 210T275 229T326 268T346 329Q346 372 314 401Q292 423 245 423Q188 423 125 383L102 402\",52:\"346 -196Q344 -196 335 -187L336 -148Q337 -127 337 -55V0H13V29L187 253Q362 477 362 479L368 480Q375 481 387 483T411 487T434 491T452 494L459 495Q460 495 470 482V453Q470 389 466 230T461 62Q461 61 513 61T565 60L555 29L546 -1H461V-15Q461 -48 463 -100T465 -154L457 -157Q449 -160 434 -165T405 -175Q347 -196 346 -196ZM339 265V341Q339 362 335 362Q327 362 219 217T110 65V61H337V117Q338 133 338 187T339 265\",53:\"232 192Q176 192 122 152L95 162V481H306Q516 481 516 479Q514 477 501 433L486 389L319 388H152V386V382Q152 379 152 374T151 365Q147 329 146 260V218H149Q211 242 284 242Q353 242 402 224T474 176T508 117T518 55Q518 -62 432 -126T220 -190Q184 -190 151 -185T96 -172T57 -157T31 -145T20 -139T19 -138Q19 -136 27 -125L35 -112L51 -120Q114 -152 174 -152Q257 -152 314 -100T371 46Q371 107 340 149T232 192\",54:\"48 251Q48 330 76 403T150 529T253 623T370 683T485 704Q494 704 520 701T547 695Q547 692 542 659T536 625Q531 624 524 624L512 623L502 628Q489 635 468 640Q452 645 423 645Q403 645 379 640T320 617T255 568T201 481T171 348Q170 341 170 330V325L183 333Q275 385 357 385H361Q464 385 514 312Q546 267 546 217Q546 127 457 58T262 -12Q225 -12 189 3T120 49T68 132T48 251ZM448 165Q448 228 406 274T289 320Q264 320 236 312T190 295T173 284Q173 266 176 241T189 178T214 112T259 61T326 39Q372 39 410 75T448 165\",55:\"57 376L87 479H591V455L584 446Q544 399 491 328T349 117T185 -169L171 -196H159Q152 -197 102 -197Q58 -197 58 -196T56 -185L54 -175L299 158L443 359Q446 367 444 370H254L71 365L57 376\",56:\"88 533Q88 573 120 610T194 668T268 701T307 714Q324 714 352 711T422 695T486 659Q518 625 518 585Q518 536 479 489T384 406L371 398L385 390Q387 389 400 382T420 370T442 356T466 339T489 319T510 295T526 269T538 238T542 204Q542 125 463 60T256 -5Q145 -5 92 52Q45 97 45 165Q45 204 64 237T109 290T163 324T209 345T228 353L214 364Q199 375 179 392T138 431T103 480T88 533ZM405 557Q405 568 402 581T387 612T350 644T286 663Q283 663 280 663T274 664H272Q256 664 228 636T199 572Q199 547 238 507Q268 475 320 437L334 427Q345 433 358 443T388 483T405 549V557ZM304 42Q366 42 398 76T431 155Q431 178 420 200T396 238T359 270T321 296T283 318L263 328Q262 328 230 312Q190 290 175 266T160 198Q160 132 202 87T304 42\",57:\"549 220Q549 23 429 -82T105 -195H84V-189Q84 -179 85 -174V-164H93Q184 -156 238 -132T334 -56Q361 -23 376 16T394 78L397 100L363 88Q329 75 291 61T244 45Q237 44 218 44Q154 44 94 97Q29 152 29 240Q29 350 108 404Q145 429 257 480Q270 487 279 487Q403 487 470 421Q549 347 549 220ZM408 217Q408 276 390 320T346 385T297 415T259 424Q218 424 185 393T151 286Q151 216 213 154Q252 115 321 115Q368 115 388 134T408 217\",58:\"57 398Q57 419 72 438T117 457Q154 457 174 439T194 398Q194 379 176 361T119 343Q85 343 71 362T57 398ZM62 19T62 43T77 85T115 104Q153 104 175 86T197 42Q197 14 171 1T119 -12Q96 -12 79 3\",59:\"56 399Q56 424 73 440T104 456Q114 458 120 458Q149 458 170 440T192 399Q192 380 174 362T120 344Q85 344 71 362T56 399ZM78 53Q78 67 84 76T90 86Q90 88 98 92T116 98Q117 98 121 98T128 99Q152 97 181 58T211 -24Q211 -77 128 -165Q124 -170 121 -173T116 -178T113 -181T110 -185T106 -190L97 -184L88 -177L95 -168Q143 -104 143 -65Q143 -51 137 -40T113 -7T81 35Q78 41 78 53\",61:\"559 342L549 304H22L27 319Q29 328 30 333T33 343H296Q559 343 559 342ZM559 206L549 168H22L27 183Q29 192 30 197T33 207H296Q559 207 559 206\",63:\"121 590Q121 575 128 562T144 542T152 533T115 512L78 491Q55 499 47 516Q40 530 40 553Q40 601 77 632Q155 697 257 697H268Q316 697 355 679Q422 646 422 576Q422 518 388 476Q383 468 376 461T358 444T340 428T316 410T290 390L230 344Q180 307 180 275Q180 261 187 248T202 227L209 219Q209 215 176 193L142 170Q114 177 100 194T84 226V239Q84 259 93 276T113 302T150 331T192 362Q203 370 219 382T247 403T267 422Q312 471 312 546Q312 593 282 623T207 653Q170 653 146 636T121 590ZM95 23T95 49T117 94T173 113Q204 113 223 96T242 54Q242 27 221 7T167 -14Q136 -14 116 4\",91:\"226 711T225 711T86 699V-93H89Q94 -93 157 -96T223 -100H226V-119H223Q134 -119 42 -130H36V740H42Q61 738 156 736H226V723Q226 711 225 711\",93:\"69 732Q116 733 146 734T184 736T197 737T206 738H208V-132Q190 -129 160 -127T99 -125T66 -124H14V-103H19Q20 -103 84 -98T152 -92H158V699H151Q148 700 85 703T18 708H14V732H69\",94:\"1 463T1 464T148 599T296 734Q584 486 584 485L561 472Q538 459 537 461Q296 672 293 672L161 563Q133 539 97 509T44 466L28 452Q27 452 14 457\",8216:\"187 456Q187 437 169 424T138 411Q114 411 84 454T53 538Q53 565 75 597Q109 648 155 697L166 708L181 694L173 681Q124 610 124 577Q124 549 155 511T187 456\",8217:\"125 524Q125 545 92 588T58 651Q58 661 61 667Q65 674 80 683T107 692Q131 692 162 645T193 564Q193 540 176 509T144 460T87 394L78 400L68 406L79 421Q125 489 125 524\",8260:\"272 270Q503 721 506 721L509 720Q512 720 518 719T529 717L550 713L91 -181L66 -182Q41 -182 41 -181L272 270\",58113:\"388 427Q320 485 242 524T128 563H116Q95 563 87 561L77 559Q72 563 69 566T65 570T65 572L75 576Q106 592 154 611T212 630Q230 630 262 622T358 581T492 498L508 486Q512 463 512 396Q512 246 469 112L465 102Q453 94 341 25Q252 -27 247 -27Q243 -27 174 24T97 84Q90 100 90 214Q90 285 98 345Q100 360 102 363T118 377Q175 422 262 465Q264 463 270 460L277 456Q277 455 267 447T244 428T228 414Q206 382 206 269Q206 187 214 164T259 110Q286 89 342 58Q391 131 391 313Q391 355 388 412V427\",58114:\"39 362L37 366L38 368L82 405H133V474Q135 563 143 589T198 658Q210 669 224 676T247 687L255 690H253Q241 690 253 692Q254 692 256 692T260 693Q263 693 262 691L261 690Q300 690 361 662L373 656L388 666Q404 675 405 675L406 674Q406 672 406 670T406 664L408 655L301 555Q300 555 287 564T254 584T221 597Q190 597 176 583T161 550Q161 525 184 495T232 440T261 405H387V399Q377 389 364 379L340 359H258V315Q258 52 228 -18L172 -120L121 -211H109Q102 -212 96 -212L109 -174Q131 -108 135 -80T139 53V76V157V362H39\",58115:\"41 352Q40 354 39 355T37 358L36 360H37Q48 370 61 380L84 400H108Q131 400 131 402Q121 424 104 501L100 519Q109 560 134 602T196 664Q230 681 271 681Q291 681 316 669T358 644L373 631Q373 630 304 553Q299 548 294 547Q292 547 290 546H287Q286 546 274 562T243 593T205 609Q180 609 165 596T150 562Q150 526 191 488L217 462Q248 431 253 405V400H381L384 394L349 352H251V332Q249 271 231 17L227 -37L120 -217L109 -218Q103 -219 97 -219Q97 -218 101 -206T110 -177T118 -151Q126 -129 128 -120T136 -46T141 127Q141 250 136 340V352H41\",58116:\"107 370Q127 384 172 409T255 454T294 473L306 468Q356 446 425 431L435 429L524 468Q528 465 531 461Q499 395 499 271V263Q499 146 509 71T519 -8Q519 -28 512 -45Q510 -50 435 -123T355 -197Q296 -212 257 -212Q209 -212 164 -196T98 -167T67 -143L133 -44H144Q167 -88 216 -111T320 -134Q371 -134 390 -118T410 -69Q410 -52 404 -12T392 60T385 92L193 -29L158 5Q124 39 110 51L96 63V71Q94 79 94 121Q94 130 94 148T93 174Q93 230 96 275T103 344T107 370ZM221 397Q200 334 200 254Q200 170 210 140Q216 126 234 109T268 81L283 71L383 119V127Q384 132 384 241L385 347L368 349Q325 357 290 369T240 389T221 397\",58117:\"103 453Q103 631 95 661Q95 663 102 667T110 672L114 664Q117 655 123 641T131 621L140 597L154 606Q208 641 275 673L297 684Q300 683 302 682T307 679T310 678L314 676Q283 658 256 625Q238 601 231 579T223 515L224 512L282 548Q339 583 341 583T365 548T386 509Q326 443 318 443L316 446Q314 448 311 452T304 460T294 470T283 480T272 488T260 494T248 497Q231 497 223 474Q220 468 218 440T215 407V401H345L309 360H218V314Q218 181 221 139V129L253 108Q306 73 310 73Q315 73 343 83L373 92L374 87Q375 82 375 79T375 74T360 65T308 36T229 -13L208 -27L192 -13Q149 24 90 61Q89 61 89 62L90 68Q91 73 93 87T97 125T100 191T103 291V360H33V366L34 371L85 405H94L103 404V453\",58120:\"602 575Q505 508 505 489Q505 488 505 482T506 463T507 432Q507 314 456 237L449 226L434 216Q420 208 325 143L316 137Q453 82 488 82Q527 82 585 127L596 136Q597 136 599 126L602 115Q578 85 511 27T428 -31Q400 -31 308 10T170 51Q143 51 123 43T92 24T54 -15L34 6L41 14Q65 41 170 129L188 144L204 145Q254 147 293 164T350 208Q378 249 378 344Q378 422 362 478T320 563T268 605T213 618Q177 618 156 600T134 561Q134 539 162 508T217 446T245 394Q245 368 213 337T85 250L62 262Q73 269 86 279T116 308T133 338T108 378T57 439T32 499Q32 556 117 617T291 679Q350 679 393 658Q415 647 433 631T462 600T480 572T490 550T494 541T499 544T516 556T547 578T603 613T689 662L720 679L730 670Q742 659 756 649T785 629T810 615T836 601T855 590Q855 587 860 536T870 419T875 312Q875 114 800 -25Q794 -35 781 -47Q584 -220 398 -220Q322 -220 278 -190Q253 -173 239 -155L244 -150Q248 -145 255 -138T271 -120T290 -100T310 -80T328 -63T341 -51T349 -46Q350 -46 351 -46T354 -47Q357 -47 357 -52Q359 -68 364 -83T383 -118T424 -151T491 -166Q559 -166 613 -129Q629 -118 641 -108T674 -68T710 1T735 107T746 260Q746 433 727 507Q727 512 685 535T615 570L602 575\",58121:\"351 571Q317 571 247 563T171 555Q153 555 133 563T107 584Q94 605 98 609Q101 615 138 658T190 717H207Q204 710 204 699Q204 673 231 666Q235 665 264 665Q296 665 345 667T426 669Q474 669 501 660T545 626Q553 612 553 594Q553 531 498 474T379 384Q371 379 371 378Q371 376 390 376H411H434Q520 376 602 318Q621 303 627 288T633 234Q633 59 540 -34Q465 -109 348 -130Q308 -137 235 -137Q159 -136 143 -129Q132 -125 132 -118V-53Q118 -24 90 -24Q69 -24 37 -39L27 -44L25 -42Q23 -39 21 -35T17 -30Q17 -28 40 -14T103 19T177 44Q183 45 205 45Q219 45 227 44T245 37T259 20T264 -12Q264 -33 262 -48T259 -80Q259 -93 260 -95Q271 -110 305 -110Q343 -110 383 -86T443 -33Q491 34 491 154Q491 223 467 249Q428 288 334 288H322Q288 288 237 276L222 273L206 286L262 367Q279 369 303 377T358 403T410 452T431 524Q431 531 431 533T427 545T416 558T392 566T351 571\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.frakturBold=void 0,e.frakturBold={33:[.689,.012,.349],34:[.695,-.432,.254],38:[.696,.016,.871],39:[.695,-.436,.25],40:[.737,.186,.459],41:[.735,.187,.459],42:[.692,-.449,.328],43:[.598,.082,.893],44:[.107,.191,.328],45:[.275,-.236,.893],46:[.102,.015,.328],47:[.721,.182,.593],48:[.501,.012,.593],49:[.489,0,.593],50:[.491,0,.593],51:[.487,.193,.593],52:[.495,.196,.593],53:[.481,.19,.593],54:[.704,.012,.593],55:[.479,.197,.593],56:[.714,.005,.593],57:[.487,.195,.593],58:[.457,.012,.255],59:[.458,.19,.255],61:[.343,-.168,.582],63:[.697,.014,.428],91:[.74,.13,.257],93:[.738,.132,.257],94:[.734,-.452,.59],8216:[.708,-.411,.254],8217:[.692,-.394,.254],8260:[.721,.182,.593],58113:[.63,.027,.587],58114:[.693,.212,.394,{ic:.014}],58115:[.681,.219,.387],58116:[.473,.212,.593],58117:[.684,.027,.393],58120:[.679,.22,.981],58121:[.717,.137,.727]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.fraktur=void 0;var r=Q(6),T=Q(228);e.fraktur=r.AddPaths(T.fraktur,{33:\"102 582T102 620T112 673T152 689Q190 689 190 638Q190 605 167 373L148 187L133 184Q102 582 102 620ZM91 24T91 48T107 88T148 104Q171 104 187 87T204 48Q204 22 188 5T149 -12Q124 -12 108 6\",34:\"33 436Q8 603 8 648Q8 663 9 671T19 687T43 695Q63 695 74 681Q76 678 76 650V623L66 532Q57 443 55 436V432H33V436ZM128 666Q128 691 162 691T196 668Q196 634 186 531Q176 441 176 432H166Q155 432 155 434L142 545Q135 603 130 647Q128 664 128 666\",38:\"181 520Q181 604 231 650T328 697L330 698Q333 698 335 698Q336 698 340 698T346 697Q390 697 418 670T446 604Q446 554 414 511Q384 467 300 417L283 406Q281 405 296 374T347 286T425 182Q466 135 469 135Q470 135 473 140T480 152T486 165Q509 210 509 263Q509 282 507 292Q498 317 488 332T465 352T443 359T418 361Q388 361 357 358L346 356L347 374Q347 394 348 396V399H355Q366 396 535 396Q663 396 689 398L703 399Q703 398 702 375T700 351L688 353Q655 356 601 357Q553 357 553 355Q562 332 562 294Q562 280 561 267T555 241T548 218T539 195T529 175T518 156T508 141T497 126L489 115L496 107Q549 54 596 54Q623 54 644 67T677 101T697 140T708 174L710 187Q710 188 710 188L711 190Q714 190 723 187T733 183Q733 179 732 172T726 145T714 107T694 66T665 27T623 0T569 -11Q500 -11 443 41L434 49L425 42Q348 -9 275 -9Q251 -9 233 -6Q187 -1 152 18T98 60T67 111T52 159T49 195Q49 231 60 261T96 315T141 354T197 390L208 397Q181 459 181 520ZM374 577Q374 607 356 629T311 651Q289 651 271 636Q242 614 242 559Q242 533 249 502T262 453T270 435T279 440T298 453T314 464Q374 503 374 577ZM127 217Q127 145 173 89T291 32Q318 32 347 42T393 63T409 75Q384 100 325 184T227 351Q223 366 220 366Q215 366 178 338Q127 298 127 217\",39:\"69 666Q69 680 79 687T104 695Q112 695 117 694T128 684T134 659L104 438Q104 436 96 436T88 438Q88 447 79 540T69 655V666\",40:\"293 737V719Q291 718 285 714T276 708T268 702T258 695T250 686T241 674Q164 570 164 282Q164 -37 230 -119Q273 -171 292 -171Q293 -171 293 -179V-186H289Q270 -180 259 -175Q175 -132 145 -23T114 275Q114 491 157 598T293 737\",41:\"223 259Q223 386 212 474T178 609T136 677T89 714V735Q121 726 139 713Q276 622 276 273Q276 98 246 -23Q225 -106 189 -139T89 -187V-170L101 -165Q148 -146 172 -110T210 13T223 259\",42:\"118 573Q118 575 76 602L34 629L50 647L55 652L66 642Q76 633 91 620T117 598L128 590Q128 663 125 687V692H151V689V687Q151 685 151 683T150 678T150 672Q145 628 144 605V592L219 652L232 634Q232 632 220 624Q195 610 155 582L146 575L158 567Q178 552 197 540T225 523T233 516Q233 515 226 506T217 495L152 549L143 555V530Q144 509 145 492T148 466T149 454Q149 449 142 449H125V462Q128 522 128 549V562L115 552Q88 531 59 506L45 495Q44 495 39 505T34 516L118 573\",43:\"357 584L399 598V282H709L702 263L696 243H399V-64L379 -73L358 -82Q357 -82 357 81V243H47L51 253Q52 256 54 263T58 272L62 282H357V584\",44:\"99 62Q99 82 114 94T144 107Q159 107 178 77T205 26Q213 5 213 -23Q213 -49 207 -65T181 -113Q128 -189 122 -191Q121 -191 116 -184T111 -174Q111 -173 122 -155T145 -111T156 -62Q156 -44 152 -34T127 4L104 37Q99 49 99 62\",45:\"46 236L62 274Q62 275 384 275H706L699 255L693 236H46\",46:\"87 43Q87 69 104 85T142 102Q164 102 182 86T200 44Q200 20 183 3T141 -15Q118 -15 103 2T87 43\",47:\"230 270Q426 721 428 721Q437 719 447 717L466 713L448 672Q78 -180 77 -181Q77 -182 55 -182L34 -181L230 270\",48:\"212 -13Q184 -13 156 -2T101 32T59 97T42 195Q42 311 132 396Q170 433 211 462T262 492Q272 492 301 477T366 434T429 360T456 258Q456 161 378 74T212 -13ZM381 209Q381 257 365 295T328 355T282 390T243 408T223 413Q220 413 204 403T167 376T137 341Q119 305 119 250Q119 168 159 114T263 59Q308 59 344 93T381 209\",49:\"123 459Q145 459 170 460T217 462T256 464T284 466L295 467Q296 467 296 467T297 468Q299 468 302 466T307 462L309 459Q307 454 304 424T299 341T297 235Q297 139 298 101T302 55T313 44Q316 43 367 43L460 46Q460 35 459 22V-1H450Q402 2 281 6Q222 6 171 4T91 1T56 -1L47 -2V43H121H170Q195 43 201 45T209 56Q212 69 212 214Q212 333 209 365T194 409Q183 417 161 423T121 430L104 432Q103 432 103 446V459H123\",50:\"104 384Q115 394 133 409T199 449T281 474Q321 474 351 447T385 378Q385 328 333 255T228 127T176 72Q176 67 183 65Q184 65 203 65T260 67T331 69L475 73L484 67Q484 64 472 33L460 1H60V17L107 61Q210 159 249 208Q309 283 309 331Q309 363 285 389T228 415Q212 415 184 403T134 379L114 367L104 384\",51:\"305 328Q305 372 279 396T214 421H211Q172 421 128 384L107 398L116 405Q151 437 191 455T251 473H260Q314 473 341 455T382 394Q384 386 384 367T382 338Q362 263 271 217L256 210L257 206L259 202Q260 202 272 201T296 198T324 192T355 179T384 157T410 123T427 75Q429 64 429 41Q429 -59 353 -120T183 -182L88 -164Q81 -162 69 -157T48 -147T39 -141Q39 -139 46 -127L53 -114L69 -122Q129 -149 171 -149Q218 -149 253 -131T305 -83T330 -26T338 29Q338 41 336 55T328 89T308 127T273 153Q228 171 162 171Q158 171 152 171T142 170H127V204H134Q232 214 275 257Q305 292 305 328\",52:\"299 -179Q306 -156 306 -48V0H11V7Q10 10 10 18Q10 23 154 236L298 449Q298 450 339 463L379 476Q385 473 384 470V466Q384 463 384 457T384 444T383 427T383 408Q381 328 381 248Q381 46 384 40H387Q422 40 460 44Q465 44 470 44T478 44L481 45Q481 43 478 24T473 1Q473 -1 464 -1Q462 -1 451 -1T430 0H387V-76L389 -156V-161L311 -191Q299 -181 299 -179ZM299 364H287L277 352Q234 297 186 224T112 104T79 43Q79 42 192 42H306V115Q306 300 299 359V364\",53:\"334 25Q334 99 296 134T207 169Q154 169 107 123L98 114L89 120L80 125V458H420Q420 456 409 418L397 379Q397 378 264 378H131Q130 377 128 376T125 374T124 371T122 368T122 363T121 356T121 345V279V190L130 186L140 190Q196 214 260 214Q311 214 348 197T404 153T431 99T440 42T433 -16T406 -76T356 -130T276 -169T163 -184H156Q110 -184 57 -163L47 -159L53 -147L58 -134Q61 -134 74 -139T110 -148T156 -153Q206 -153 243 -135T299 -87T326 -30T334 25\",54:\"45 240Q45 328 73 406T143 536T235 626T327 681T399 699Q400 699 404 699T411 700Q424 700 441 696T459 689Q459 671 451 637Q451 633 447 632L444 629L434 633Q413 640 384 640H377Q299 640 222 565Q182 531 156 463T129 315V306H136L149 315Q229 376 316 376H318Q393 376 432 326T471 213Q471 129 402 58T237 -13T93 59T45 240ZM391 172Q391 231 354 272T258 314Q230 314 200 302T154 279T133 262L134 249Q154 32 266 32Q315 32 353 64T391 172\",55:\"395 377L391 382H225Q59 382 59 383L74 423Q89 464 89 465Q90 468 94 468Q146 460 350 458H498V442L473 406Q241 75 125 -156L113 -181H40L37 -168L57 -140Q115 -58 199 70T339 287T395 377\",56:\"220 -10Q168 -10 131 6T75 50T48 103T40 157Q40 223 77 266Q103 295 156 328T225 375Q247 393 247 394L206 361Q205 361 193 368T164 391T131 426T102 474T90 531Q90 580 114 615Q146 660 238 698L254 705L262 704Q288 704 332 693T402 656Q434 620 434 568Q434 518 401 475T321 402L305 391L336 368Q339 366 353 356T372 343T389 330T406 316T420 301T434 283T445 265T454 244T458 222T461 195Q461 106 389 48T220 -10ZM350 545Q350 578 337 601T304 634T266 649T234 653L224 654L204 639Q196 634 191 629T182 621T176 614T173 609T170 603T168 597Q165 585 165 567Q165 497 261 424L273 415Q350 467 350 545ZM261 405L263 407Q262 407 261 405ZM258 403Q257 403 255 401L254 399L256 400Q258 402 258 403ZM252 398Q251 398 249 396L248 394L250 395Q252 397 252 398ZM245 36Q276 36 300 45T338 69T360 102T371 136T374 168Q374 211 341 255Q324 275 305 289T235 332Q231 330 215 321T193 307T173 292T153 271T138 247T127 216T123 177Q123 146 132 117T170 62T245 36\",57:\"353 93T352 93T320 79T251 49T201 34Q127 37 87 79Q28 138 28 234Q28 273 37 304T60 355T101 396T152 429T218 462L234 469H243Q348 461 395 417Q466 348 466 201Q466 72 397 -29T211 -163Q155 -179 91 -182H72V-154H80Q144 -154 202 -131T297 -60Q318 -31 333 7T352 68L357 92Q353 93 352 93ZM369 208Q369 240 362 272T339 339T290 394T214 415Q171 415 144 372T116 266Q116 193 154 144T238 95H249Q369 95 369 208\",58:\"50 377T50 400T64 440T99 457Q128 457 146 440T165 399Q165 375 146 359T102 342T64 359ZM53 19T53 43T66 86T103 105Q129 105 148 87T168 41Q168 17 147 3T102 -12Q80 -12 67 3\",59:\"47 399Q47 424 62 441T101 458T143 442T162 400T144 359T101 343Q78 343 63 360T47 399ZM76 86Q76 88 80 91T91 96T106 99Q119 99 131 86Q179 35 179 -25Q179 -64 146 -115T89 -189Q86 -187 83 -185T79 -182T76 -180T75 -177T77 -173T80 -168Q121 -108 121 -64Q121 -44 94 -5T66 52Q66 66 71 75T76 86\",61:\"725 366Q724 365 721 349T716 331V329H385Q54 329 54 331Q55 332 59 349T63 368H394Q725 368 725 366ZM725 169Q724 168 721 152T716 134V132H385Q54 132 54 134Q55 135 59 152T63 171H394Q725 171 725 169\",63:\"46 557Q46 613 103 653T227 693Q287 693 322 659T357 564Q357 517 326 469T259 390T191 326T160 272Q160 240 187 221Q193 217 193 216Q182 209 170 200L147 184Q127 192 113 209T98 250Q98 290 193 376Q287 454 287 542Q287 581 262 616T188 652Q143 652 126 631T108 588Q108 559 140 527L79 490Q46 515 46 557ZM108 47Q108 68 123 85T160 103Q179 103 198 90T217 46Q215 24 201 7T164 -11Q142 -11 125 6T108 47\",91:\"262 -119Q224 -120 191 -123T141 -128T118 -130Q117 -130 117 305V740H122Q141 737 219 736H278V723Q278 711 277 711L159 699V-93H162Q167 -93 220 -96T276 -100Q278 -100 278 -109V-119H262\",93:\"64 733Q89 733 110 734T143 737T158 738H160V-131H154Q101 -125 40 -124H-4V-103H1Q3 -102 57 -98T113 -92H118V700L64 703Q7 707 3 708H-4V732H21Q34 733 64 733\",94:\"0 464L250 734L262 722Q274 712 384 598L495 486Q483 478 467 467L456 459L248 672L154 580L23 452Q17 454 10 458T0 464\",8216:\"117 410Q97 410 71 455T45 539Q45 588 129 694L140 708Q142 708 153 694L147 682Q106 609 106 582V577V571Q106 548 132 511T158 455Q158 434 143 422T117 410\",8217:\"105 529Q105 546 77 588T49 651Q49 658 51 666Q53 672 67 682T92 692Q111 692 137 644T163 563Q163 534 143 497T99 428T74 395Q72 395 65 400T58 407Q105 476 105 523V529\",8260:\"230 270Q426 721 428 721Q437 719 447 717L466 713L448 672Q78 -180 77 -181Q77 -182 55 -182L34 -181L230 270\",58112:\"427 436Q427 434 427 425T429 398T430 362Q430 222 396 109L393 99L305 33Q218 -32 216 -32Q208 -29 142 22L91 68L78 81L77 94Q75 130 75 173Q75 245 87 347L135 385Q178 418 184 424L177 428Q174 429 170 431Q116 454 96 473T75 534Q79 608 154 683Q164 677 164 673Q164 670 157 662T144 637T137 598Q137 552 182 518T280 470T380 447T427 436ZM342 371L275 394L208 417Q203 417 192 399T168 334T156 229Q153 187 153 157Q153 141 156 135Q158 125 208 88T280 51Q306 51 326 120T346 297Q346 339 344 354T342 371\",58113:\"39 551L35 569L52 577Q72 586 98 595T140 610T158 616Q174 612 200 604T293 560T412 477Q414 475 417 472Q428 462 430 450T432 376Q432 223 401 124Q395 106 393 103T382 92Q351 68 281 20T206 -29Q201 -31 137 26L100 60L78 83L77 112Q76 132 76 170Q76 259 86 342L88 360L101 371Q116 386 163 422T215 459Q216 459 224 455T233 450L229 446Q225 442 218 434T203 419Q179 394 175 389T168 372Q156 334 156 262Q156 167 164 137Q168 125 196 102T252 62L278 45Q279 45 285 52T302 78T322 126T339 205T346 316Q346 367 344 389L343 406L326 423Q228 520 113 559L100 564L70 557L39 551\",58114:\"123 386L120 431Q116 476 116 511V520Q116 593 174 649Q207 680 236 680Q258 680 284 664T312 648Q318 648 327 656Q328 657 330 659Q337 664 337 661Q337 660 338 657Q338 652 339 648L268 566L260 574Q234 600 206 600Q182 600 164 585T145 541Q145 492 211 386L267 385H324L299 354H214V312Q214 86 193 -58L192 -69L116 -215H108Q92 -215 92 -212Q93 -211 100 -189T116 -135T128 -80Q134 -41 134 22Q134 54 130 185T125 349V354H29L59 385H91Q123 385 123 386\",58115:\"91 530Q91 564 116 600T164 656T194 678Q195 678 200 678T209 679Q268 679 316 639L293 593Q267 547 263 546H262Q260 546 256 553Q222 613 180 613Q160 613 146 599T132 564T170 474T210 388H318L296 356H206V322Q204 284 204 255Q202 221 202 161V99Q202 28 194 -22T160 -124Q148 -146 116 -199L101 -224L91 -220Q85 -218 84 -217T83 -215L101 -161Q116 -114 119 -73T122 108Q119 334 117 352V356H72L28 357L66 388H92Q118 388 118 389L109 433Q91 514 91 530\",58116:\"254 -150Q293 -150 328 -126T363 -54Q363 -38 352 29T339 98L250 34Q160 -30 159 -30L77 64V71Q74 95 74 174Q74 212 75 243T79 294T83 328T87 352T90 366L117 384Q206 446 238 464L250 471Q277 455 306 443T350 427L365 423Q367 423 405 443T443 465L449 455Q431 414 426 362T418 201Q418 135 420 121Q438 -4 438 -19Q438 -26 438 -31T434 -42T429 -51T420 -63T408 -77T391 -95T370 -119T346 -147T325 -170T309 -187T291 -200T274 -207T252 -213T225 -214Q175 -214 132 -196T70 -160L52 -143Q52 -138 90 -48Q90 -47 95 -47H101Q108 -81 146 -115T254 -150ZM341 136Q341 157 344 242T347 348V355L334 356Q299 359 262 367T203 383T179 391Q177 391 173 377T163 323T158 227Q158 164 161 128V121L174 106Q203 75 223 59L341 127V136\",58117:\"92 446Q92 603 82 664Q94 670 95 670L96 666Q98 661 101 651T108 633Q121 598 121 597L141 612Q247 686 250 686Q251 686 266 679Q261 674 243 659T213 632T190 597T173 546Q172 541 171 530T170 511T170 502Q171 502 222 542L273 582Q308 522 315 504L279 449L269 462Q231 506 215 506Q202 506 190 490Q164 458 164 395V390H279L266 373L254 355H167V306Q169 252 169 217Q170 195 170 147V117L200 92Q234 64 237 64Q243 64 277 81L311 99V75Q310 75 242 27L174 -20L156 -3Q88 60 81 60L79 62Q80 60 82 62Q87 67 87 290V355H57L26 356L73 390H92V446\",58118:\"117 531Q117 533 137 544T178 566L198 577Q200 577 204 575T208 572V570Q208 568 208 566T207 560Q197 496 197 397V392H321L295 353H199V260Q199 157 200 145V122L269 68Q271 67 274 67Q282 67 310 83T342 100Q343 100 345 92T346 83L211 -21L172 12Q117 59 117 63Q117 65 117 87T119 150T120 238V353H75L29 354L65 391H118V460Q117 498 117 531\",58119:\"337 91V78L324 71Q288 53 256 29T206 -8T180 -22Q174 -22 158 -9Q82 46 60 46H59L63 51Q67 56 73 68T85 96Q101 158 101 254Q101 300 95 330T83 370T66 394L53 388Q48 385 41 382T24 374Q22 376 20 378T16 381T13 383T10 385V386L119 475Q150 439 160 430L171 422V409Q173 377 173 300Q173 228 166 183T152 122T145 102Q207 81 242 58L337 104V111Q340 146 340 227Q340 320 339 351T338 408V423L422 469Q425 465 429 462L426 438Q413 354 413 251Q413 152 423 119Q426 110 435 96T452 82Q454 82 509 103Q514 98 514 89Q514 87 507 81T472 51T409 -7L395 -20Q393 -18 390 -17Q386 -14 382 -6Q380 -2 379 1Q369 24 361 40T348 62T341 73T338 84L337 91\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.fraktur=void 0,e.fraktur={33:[.689,.012,.296],34:[.695,-.432,.215],38:[.698,.011,.738],39:[.695,-.436,.212],40:[.737,.186,.389],41:[.735,.187,.389],42:[.692,-.449,.278],43:[.598,.082,.756],44:[.107,.191,.278],45:[.275,-.236,.756],46:[.102,.015,.278],47:[.721,.182,.502],48:[.492,.013,.502],49:[.468,0,.502],50:[.474,0,.502],51:[.473,.182,.502],52:[.476,.191,.502],53:[.458,.184,.502],54:[.7,.013,.502],55:[.468,.181,.502],56:[.705,.01,.502],57:[.469,.182,.502],58:[.457,.012,.216],59:[.458,.189,.216],61:[.368,-.132,.756],63:[.693,.011,.362],91:[.74,.13,.278],93:[.738,.131,.278],94:[.734,-.452,.5],8216:[.708,-.41,.215],8217:[.692,-.395,.215],8260:[.721,.182,.502],58112:[.683,.032,.497],58113:[.616,.03,.498],58114:[.68,.215,.333],58115:[.679,.224,.329],58116:[.471,.214,.503],58117:[.686,.02,.333],58118:[.577,.021,.334,{ic:.013}],58119:[.475,.022,.501,{ic:.013}]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.italic=void 0;var r=Q(6),T=Q(230);e.italic=r.AddPaths(T.italic,{33:\"330 716Q351 716 365 703T380 670V659L304 433Q230 207 227 204Q225 198 205 198Q184 198 184 207T220 439T260 669Q270 694 297 708Q300 709 304 710T311 713T316 714Q324 716 330 716ZM107 51Q110 83 133 102T179 121Q207 121 219 105T231 72Q231 45 209 23T156 0Q138 0 123 11T107 51\",34:\"214 620Q214 647 236 670T289 694Q312 694 326 677T341 633V624Q341 588 327 550T294 482T253 428T216 392T196 379Q191 379 184 388T176 401Q176 404 195 421T243 472T287 547Q299 576 299 582L295 580Q291 578 282 576T264 573Q241 573 228 585T214 620ZM411 620Q411 647 433 670T486 694Q509 694 523 677T538 633V624Q538 588 524 550T491 482T450 428T413 392T393 379Q388 379 381 388T373 401Q373 404 392 421T440 472T484 547Q496 576 496 582L492 580Q488 578 479 576T461 573Q438 573 425 585T411 620\",35:\"281 327H228Q186 327 175 330T164 347Q164 359 176 365Q179 367 292 367H404L563 688Q569 694 578 694T593 686T597 670Q597 667 531 535L448 367H614L773 688Q779 694 787 694Q796 694 802 688T808 674V672L807 670Q807 667 732 517L658 368L736 367H814Q828 357 828 347Q828 336 812 327H637L599 250Q561 174 561 173H662H724Q760 173 769 170T779 153T770 136T729 132Q721 132 696 132T651 133H540L380 -188Q374 -194 366 -194Q357 -194 351 -188T345 -174L346 -172V-170Q346 -167 412 -35L495 133H330L170 -188Q164 -194 156 -194Q147 -194 141 -188T135 -174L136 -172V-170Q136 -167 211 -17L285 133H207L130 134Q115 140 115 153Q115 164 131 173H306L344 250Q382 326 382 327H281ZM592 327H427L389 250Q351 174 351 173H516L554 250Q592 326 592 327\",37:\"301 348Q257 348 231 383T205 480Q205 553 244 629T346 736Q370 750 394 750Q416 750 429 742T458 714Q512 644 606 644Q722 644 802 732Q817 750 827 750Q835 750 841 744T847 730Q847 725 827 700T689 540Q586 421 512 335Q180 -50 176 -52Q172 -56 165 -56Q157 -56 151 -50T145 -35Q145 -29 162 -9T330 186Q392 258 430 302Q711 627 711 628L701 624Q652 607 604 607Q551 607 494 634L479 642V624Q479 544 439 467Q414 416 377 382T301 348ZM270 443Q270 385 303 385H306H308Q326 385 348 407Q384 441 409 504T434 627Q434 713 390 713Q358 713 328 663Q307 631 289 556T270 451V443ZM608 -56Q573 -56 543 -23T513 76Q513 129 536 190T604 296L627 318Q670 347 704 347Q747 347 767 310T788 222Q788 126 732 35T608 -56ZM742 222Q742 310 699 310Q677 310 655 285T620 227Q608 197 593 138T578 42V36Q578 -18 613 -18Q657 -18 699 64T742 222\",38:\"209 444Q209 546 278 631T424 716Q473 716 501 683T530 601Q530 554 511 535T467 515Q446 515 437 527T427 553Q427 578 446 594T481 610H483V617Q480 641 464 660T419 679Q367 679 328 603Q316 578 305 538T288 470L282 443L295 449Q308 455 330 462T371 469Q397 469 413 450T430 404Q430 363 400 329T331 295Q291 295 256 322Q255 322 246 293T227 223T217 158Q217 117 232 88T273 43T327 22T387 15Q457 15 512 37T599 93T652 169T680 248T688 317T678 380T659 423T647 437Q643 435 637 431T613 416T581 392T554 364T538 332Q540 310 541 310Q554 335 587 335Q601 335 613 327T626 300Q626 290 622 279T603 255T563 242Q532 245 512 263T491 320Q494 351 511 377T547 418T600 456T652 494Q676 512 697 539T728 582T738 601Q738 602 736 602Q732 602 726 604T714 616T707 638Q707 661 724 677T764 694Q799 694 802 660Q802 625 767 562T688 467L694 458Q700 449 702 444T711 428T720 408T727 385T733 358T735 327Q735 281 724 235T685 141T617 59T515 1T375 -22Q270 -22 199 34T127 181Q127 216 147 270T207 374L216 386Q209 421 209 444ZM386 412Q386 432 366 432Q345 432 325 418T294 390T284 375Q284 371 289 362T306 343T335 332Q355 332 367 350T383 384T386 412\",39:\"250 620Q250 647 272 670T325 694Q348 694 362 677T377 633V624Q377 566 343 506T275 412T231 379Q226 379 220 388T213 401T232 421T279 472T323 547Q335 573 335 582L331 580Q327 578 318 576T300 573Q277 573 264 585T250 620\",40:\"241 -250Q203 -212 174 -140T144 39Q144 158 180 288T296 544T481 746L487 750H499Q517 750 517 740Q517 736 495 716Q399 630 331 491T236 228T208 3Q208 -73 224 -130T255 -214T271 -244Q271 -250 252 -250H241\",41:\"326 497Q326 546 320 588T304 655T285 699T269 728T262 740Q262 746 267 749L272 750Q276 750 281 750H293Q331 712 360 640T390 461Q390 332 339 171T188 -116Q161 -150 121 -188T47 -250H35Q17 -250 17 -240Q17 -236 39 -216Q135 -130 203 9T298 272T326 497\",42:\"560 658Q569 658 576 649T584 631Q584 625 583 620T577 611T569 603T556 595T540 587T519 578T494 566L428 536Q427 535 433 531T479 502Q525 475 532 469T539 450Q538 435 525 424T497 412Q489 412 482 418T442 456Q400 497 400 494L387 420Q376 353 373 343T352 323Q345 320 336 320H331Q322 320 316 327T309 343Q309 347 334 420L359 496Q358 496 297 456T234 414Q228 411 221 411Q212 411 204 417T195 439Q198 458 209 465T283 502L353 534L300 566Q255 593 247 599T239 616Q239 631 252 644T282 658Q290 658 295 654T335 615L378 573L391 647Q393 657 395 671T398 691T400 706T404 720T408 730T414 739T423 744T434 749Q435 749 439 749T445 750Q467 748 469 728Q469 723 457 685T432 610L420 573L481 613Q548 658 560 658\",43:\"139 237T139 250T151 266T198 270H293H431L465 407Q469 424 476 452Q494 528 500 542T519 557Q526 557 532 552T538 538Q538 536 507 409T472 272Q472 270 604 270Q737 270 741 268Q753 261 753 250Q753 237 742 233T696 229Q687 229 655 229T599 230H462L461 226Q461 224 427 91T392 -47Q387 -57 374 -57Q367 -57 361 -51T355 -37Q355 -31 388 99L421 230H288Q267 230 238 230T199 229Q163 229 151 233\",44:\"106 46Q106 68 121 90T167 120Q168 120 173 120T180 121Q232 121 232 59V54Q232 18 219 -20T186 -88T145 -143T109 -181T88 -194Q84 -194 77 -185T69 -171Q69 -168 70 -166T76 -161T85 -154T101 -139T124 -114Q146 -88 162 -58T183 -12T188 7Q187 7 183 5T172 2T156 0Q129 0 118 14T106 46\",45:\"205 180H131Q102 180 93 181T84 190Q90 238 103 251H334Q341 244 341 241Q341 236 336 214T327 186Q325 181 312 181T205 180\",46:\"107 50Q107 76 129 98T181 121Q203 121 217 108T231 72Q231 47 210 24T156 0Q135 0 121 13T107 50\",47:\"166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183Q157 -157 378 274T602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 691 406 241T170 -212Q166 -215 159 -215\",48:\"414 665Q562 665 562 490Q562 426 534 318Q451 -21 251 -21Q222 -21 202 -15Q155 2 134 40T110 144Q110 201 127 286T187 470T287 614Q348 665 414 665ZM187 98Q187 59 208 37T260 15Q320 15 365 83Q394 128 440 312T487 547Q487 580 471 600T433 627Q428 628 408 628Q381 628 353 609T311 569Q279 526 239 364T190 143Q187 120 187 98\",49:\"248 491Q228 491 228 502Q228 516 236 532Q237 536 246 537T275 541T314 552Q350 567 382 595T430 644L446 664Q450 666 454 666Q468 666 468 658Q468 647 395 359Q321 63 321 59Q321 52 334 50T388 46H422Q428 37 428 35Q428 19 421 5Q416 0 405 0Q400 0 361 1T263 2Q215 2 185 2T142 1T127 0Q110 0 110 11Q110 13 113 25T118 40Q120 46 146 46Q196 46 212 49T235 61Q238 66 295 295L353 526L340 519Q328 512 302 503T248 491\",50:\"159 404Q159 433 176 476T222 562T297 635T395 666Q466 666 508 617T551 497Q551 473 545 446Q534 388 482 333Q441 292 355 240T264 184Q216 151 179 101L171 91Q171 90 177 90Q206 90 269 77T366 64Q385 64 390 65Q418 73 441 98T475 156Q479 168 481 170T495 173H518Q524 167 524 166T521 152Q502 86 459 32T353 -22Q315 -22 259 15T172 53Q156 53 143 36T126 1L121 -16Q119 -22 98 -22H82Q76 -16 76 -13T80 5T98 50T132 111T189 178T274 242Q327 273 364 305T420 370T447 427T460 483Q466 514 466 538Q466 586 443 607T389 629Q338 629 293 584T226 487T204 399Q204 390 204 386T209 378T222 373Q258 376 282 422T307 493Q307 506 302 517T297 531Q297 537 308 546T327 551Q329 550 333 543T340 523T344 497Q344 450 306 393T216 336Q186 336 173 355T159 396V404\",51:\"296 531Q296 536 307 544T322 553Q330 553 338 534T346 501Q346 468 319 440T258 412Q232 412 216 430T200 478Q200 552 281 618Q345 666 416 666Q489 666 525 625T562 530Q562 473 525 419T430 335L416 329Q479 288 479 206Q479 142 440 89T344 7T229 -22Q173 -22 135 12T96 106Q96 192 157 192Q192 192 197 157Q197 134 184 117T142 96Q153 47 180 29Q201 15 232 15Q249 15 275 22Q307 34 331 57Q363 90 379 153T396 246Q396 261 393 272T384 290T371 301T355 308T341 311T326 312H316H307Q287 312 282 313T276 320Q276 323 279 337T283 352Q284 356 290 357T325 358Q364 359 368 360Q386 365 400 372T433 397T464 448T485 527Q487 535 487 556Q487 629 414 629Q350 629 298 580T245 476Q245 450 263 450H264Q280 450 294 463T308 496Q308 508 302 518T296 531\",52:\"448 34Q453 34 463 22T473 5Q473 -2 457 -7Q417 -22 383 -23H366L350 -91Q348 -98 345 -111T340 -130T335 -146T330 -161T325 -172T318 -182T310 -188T299 -193T286 -194Q256 -194 253 -165Q253 -159 271 -83T292 -5Q231 29 169 29Q114 29 91 14Q72 -2 65 1Q46 20 46 28Q46 35 55 43T77 60T96 74Q306 257 396 623Q410 666 444 666Q459 666 468 657T478 634Q478 627 470 595T440 504T387 381T303 239T187 99L164 75H178Q217 75 260 59L304 43Q304 48 325 127Q342 195 346 207T358 228Q372 242 391 242Q403 242 413 235T423 214Q423 205 402 116T378 25Q378 23 387 23Q405 23 418 25T439 31T448 34\",53:\"196 304Q189 309 189 314Q189 317 231 487T275 660Q278 666 283 666Q287 666 302 658T346 643T413 635Q447 635 481 642T537 658T559 666Q561 666 564 663T567 658Q565 637 557 629Q528 600 474 573T359 545Q342 545 327 546T304 550T294 552L291 540Q288 529 283 507T273 465L251 379Q307 420 364 420Q415 420 456 382T497 261Q497 165 429 82T262 -20Q256 -20 247 -21T233 -22Q176 -22 141 15T106 112Q106 208 173 208Q192 208 203 197T214 169Q214 143 195 125T156 107H153V100Q155 73 174 47T239 21Q245 21 259 23Q355 46 392 200Q393 205 394 207Q412 276 412 312Q412 352 396 367T358 383Q288 383 233 314Q226 306 224 305T209 304H196\",54:\"377 434Q425 434 457 404T499 341T509 278Q509 243 496 194T456 105T383 27Q322 -22 256 -22Q142 -22 122 114Q120 130 120 159Q120 221 135 292T195 452T310 599Q390 665 465 665Q565 665 565 583V574Q565 543 546 524Q528 506 504 506Q491 506 478 514T465 543Q465 585 515 602Q505 626 466 626Q419 626 372 587Q334 557 305 503T266 409L255 370Q287 410 339 429Q361 434 377 434ZM424 333Q424 359 411 378T365 397Q318 397 282 356T230 257T205 157T197 94Q197 67 211 45T260 22Q313 22 341 57T386 151Q424 283 424 333\",55:\"466 519Q448 519 435 528T416 550T400 571T376 581Q324 581 271 540T186 437Q185 435 183 432T181 428T179 426T177 424T174 423T171 422T165 422H159Q141 422 141 423Q136 423 136 431Q136 433 190 548T247 665Q249 666 266 666H282Q288 660 288 657Q288 655 284 646T276 628L273 620Q337 666 390 666Q413 666 425 652T438 620T444 584T457 559Q460 557 470 557Q497 557 524 582T571 635T594 665Q595 666 612 666H628Q634 660 634 657Q634 653 618 629T572 556T510 441T437 269T367 43Q356 -22 304 -22Q291 -22 278 -14T263 14Q263 36 281 95T354 269T486 507Q497 524 495 524Q482 519 466 519\",56:\"209 449Q209 545 278 605T416 666Q482 666 517 631T553 546Q553 513 539 482T504 430T463 394T426 370L410 360L430 343Q471 309 483 278T495 211Q495 141 441 75Q363 -21 253 -21Q182 -21 141 18T99 117Q99 161 119 201T170 268T222 308T259 331L272 338L259 349Q212 389 209 449ZM492 542Q492 586 469 605T415 625Q360 625 320 587T279 505Q279 495 281 487T286 474T295 460T306 449T321 436T337 422Q379 386 380 386Q389 386 420 412T472 471Q492 513 492 542ZM163 118Q163 76 189 49T258 21Q316 21 368 64T420 170Q420 193 412 208T395 233T350 271L302 312Q298 312 284 303T249 276T209 235T177 181T163 118\",57:\"297 211Q258 211 230 228T189 273T169 323T163 367Q163 411 183 472T254 585Q327 656 401 665Q403 665 412 665T427 666Q458 664 481 652T518 622T539 580T550 535T553 491Q553 448 544 395T515 277T454 148T358 37Q282 -22 213 -22Q166 -22 137 -1T107 55V64Q107 88 114 104T134 127T154 136T169 138Q185 138 196 128T207 101Q207 82 196 68T172 48L161 43Q161 40 167 36T187 26T219 21Q286 21 344 99Q364 126 382 169T408 241T417 275L412 269Q406 263 395 253T370 234T337 218T297 211ZM476 552Q476 626 417 626Q368 626 330 584Q312 563 300 533T270 433Q248 341 248 312Q248 286 262 267T310 248Q353 248 387 287T440 380T467 480T476 552\",58:\"184 358Q184 385 206 408T258 431Q279 431 293 418T308 383Q308 354 284 332T233 310Q212 310 198 324T184 358ZM107 50Q107 76 129 98T181 121Q203 121 217 108T231 72Q231 47 210 24T156 0Q135 0 121 13T107 50\",59:\"184 358Q184 385 206 408T258 431Q279 431 293 418T308 383Q308 354 284 332T233 310Q212 310 198 324T184 358ZM107 47Q107 77 130 99T180 121Q226 121 226 61Q226 25 214 -14T182 -84T144 -140T109 -180T88 -194T77 -185T70 -172Q70 -169 84 -155T121 -112T161 -48Q180 -10 180 3Q180 4 174 2Q172 2 166 1T156 0Q135 0 121 13T107 47\",61:\"776 357T776 347T761 327H470Q180 327 176 329Q164 334 164 347Q164 359 176 365Q179 367 470 367H761Q776 357 776 347ZM116 143T116 153T131 173H422Q713 173 717 171Q728 166 728 153T717 135Q713 133 422 133H131Q116 143 116 153\",63:\"235 431Q217 431 206 442T195 468Q195 490 215 537T280 638T380 707Q403 716 423 716Q425 716 429 716T436 715Q485 715 518 681T551 590Q551 543 530 503T482 439Q471 428 400 375T318 310Q300 287 300 259Q300 236 315 236Q333 236 352 251T384 300Q386 306 407 306H423Q429 300 429 297Q429 272 393 235T308 198Q287 198 269 215T251 270Q251 330 293 374L374 436Q377 438 401 456T432 480T457 503T481 531T494 561T501 598Q501 614 499 626Q482 678 430 678H426Q392 678 362 660T311 615T280 571T264 540L259 528Q259 527 266 526T283 516T294 492Q294 466 276 449T235 431ZM209 51Q212 83 235 102T281 121Q309 121 321 105T333 72Q333 45 311 23T258 0Q240 0 225 11T209 51\",64:\"198 250Q198 155 248 91T394 26Q514 26 640 80L650 84H675H683Q709 84 709 76Q709 73 708 71Q706 64 660 45T534 8T383 -11T260 24T181 115Q152 168 152 248Q152 410 268 552Q303 590 324 608Q439 705 551 705Q611 705 658 683T733 623T775 543T789 454Q789 380 766 304T720 192Q677 125 617 125Q591 125 573 137T548 160T541 176Q541 178 540 178L534 173Q527 168 515 160T488 144T454 131T417 125Q361 125 320 166T279 284Q279 393 356 481T523 569Q570 569 603 537Q623 515 632 490L637 480L657 479Q684 479 684 470Q684 465 650 333L617 199V185Q616 162 628 162Q677 162 712 278Q743 381 743 442Q743 555 687 611T553 668Q467 668 385 608T250 450T198 250ZM598 445Q598 453 594 470T569 510T518 532Q463 532 410 448T356 271Q356 220 374 191T423 162Q482 162 552 255L575 348Q598 440 598 445\",91:\"205 -221Q205 -239 194 -250H137H106Q73 -250 73 -242Q73 -232 194 255T321 747L324 750H381H417Q435 750 440 748T446 739Q446 730 443 723T437 712L434 710H350L349 706Q349 704 235 249T120 -208Q120 -210 159 -210Q166 -210 175 -210T187 -209Q205 -209 205 -221\",93:\"227 721Q227 739 238 750H295H326Q359 750 359 742Q359 732 238 245T111 -247L108 -250H51H15Q-3 -250 -8 -248T-14 -239Q-14 -230 -11 -223T-5 -212L-2 -210H82L83 -206Q83 -204 197 251T312 708Q312 710 273 710Q266 710 257 710T245 709Q227 709 227 721\",94:\"528 555Q528 549 514 538T496 527Q491 527 470 554Q458 569 449 580L414 625L353 578Q339 567 323 555T298 536L290 529Q286 527 285 527Q279 527 273 533T264 546L260 553Q260 559 263 562Q265 564 342 628T421 693T425 694Q430 694 433 691Q528 563 528 555\",95:\"98 -62Q91 -58 91 -51Q91 -31 100 -26Q102 -25 324 -25H442H500Q536 -25 545 -27T554 -36Q554 -50 548 -56Q546 -60 538 -61Q520 -62 319 -62H98\",126:\"266 208Q262 208 255 215T247 228Q247 233 250 236T274 259Q335 318 369 318Q394 318 420 292T464 265Q485 265 516 291T550 318Q554 318 562 311T571 297Q570 293 551 273T502 231T451 209H447Q421 209 396 235T355 261Q334 261 301 235T266 208\",305:\"75 287Q75 292 82 313T103 362T142 413T196 441H214Q248 441 270 419T293 357Q292 338 289 330T245 208Q193 72 193 46Q193 26 209 26Q228 26 247 43Q273 71 292 136Q295 148 297 150T311 153H317Q327 153 330 153T337 150T340 143Q340 133 330 105T292 41T228 -8Q220 -10 204 -10Q160 -10 141 15T122 71Q122 98 171 227T221 384Q221 396 218 400T203 405Q175 403 156 374T128 312T116 279Q115 278 97 278H81Q75 284 75 287\",567:\"75 284T75 287T81 305T101 343T133 389T180 426T240 442Q273 440 300 420T327 350V332L278 134Q267 92 253 37T233 -45T225 -73Q208 -123 162 -163T54 -204Q8 -204 -15 -181Q-32 -164 -32 -140Q-32 -112 -14 -96T27 -79Q48 -79 57 -91T67 -114Q67 -146 39 -166L44 -167H59H60Q112 -167 145 -74Q148 -65 198 134T251 347Q252 353 252 370Q252 382 251 388T245 399T230 405Q204 405 175 378Q157 360 145 337T126 298T117 280T98 278H81Q75 284 75 287\",768:\"-222 651Q-222 668 -206 682T-174 697Q-155 697 -145 680Q-140 671 -107 599T-74 526Q-74 522 -88 511T-107 500Q-109 500 -113 502T-167 568T-219 637Q-222 643 -222 651\",769:\"-148 500Q-154 500 -163 511T-173 528Q-173 529 -172 530V532Q-170 534 -97 610T-21 688Q-8 697 4 697Q19 697 29 688T39 663T30 638Q26 631 -50 573L-135 507Q-144 500 -148 500\",770:\"17 555Q17 549 3 538T-15 527Q-20 527 -41 554Q-53 569 -62 580L-97 625L-158 578Q-172 567 -188 555T-212 536L-221 529Q-225 527 -226 527Q-232 527 -238 533T-248 546L-251 553Q-251 559 -248 562Q-246 564 -169 628T-90 693T-86 694Q-81 694 -78 691Q17 563 17 555\",771:\"-245 558Q-249 558 -256 565T-264 578Q-264 583 -261 586T-237 609Q-176 668 -142 668Q-117 668 -91 642T-47 615Q-26 615 5 641T39 668Q43 668 51 661T60 647Q59 643 40 623T-9 581T-60 559H-64Q-90 559 -115 585T-156 611Q-177 611 -210 585T-245 558\",772:\"-275 544Q-282 548 -282 554Q-282 561 -279 573T-271 588Q-269 589 -111 589H-27H12Q38 589 46 587T54 578Q54 574 51 563T47 550Q45 546 32 545Q15 544 -118 544H-275\",774:\"-237 641Q-237 694 -218 694H-213Q-195 694 -195 684Q-195 683 -195 679T-197 667T-198 650Q-198 611 -176 589T-117 566Q-74 566 -34 597T23 678Q27 689 30 691T43 694Q62 694 62 684Q62 671 49 645T14 589T-46 537T-123 515Q-175 515 -206 550T-237 641\",775:\"-165 599Q-162 631 -139 650T-93 669Q-65 669 -53 653T-41 620Q-41 593 -63 571T-116 548Q-134 548 -149 559T-165 599\",776:\"-251 601Q-251 626 -230 647T-180 669Q-139 669 -133 625Q-133 595 -155 575T-203 554Q-223 554 -237 567T-251 601ZM-72 599Q-72 632 -48 650T-2 669Q18 669 31 657T45 623Q45 592 22 573T-25 554Q-68 554 -72 599\",778:\"-199 610Q-199 654 -161 685T-79 716Q-39 716 -16 693Q3 674 3 647Q3 607 -34 575T-118 542Q-199 542 -199 610ZM-41 631T-41 655T-83 679H-89Q-129 679 -142 656Q-146 650 -151 632T-156 604Q-156 578 -113 578H-108Q-94 578 -86 579T-69 586T-52 605Q-41 631 -41 655\",779:\"-217 503Q-221 503 -234 510T-248 523Q-248 528 -205 602Q-200 610 -192 623T-180 644T-170 661T-159 676T-151 686T-142 694T-134 696Q-132 697 -121 697Q-88 694 -88 664Q-88 652 -97 640T-152 574Q-214 504 -217 503ZM-64 503Q-68 503 -81 510T-95 523Q-95 528 -52 602Q-47 610 -39 623T-27 644T-17 661T-6 676T2 686T11 694T19 696Q21 697 32 697Q65 694 65 664Q65 652 56 640T1 574Q-61 504 -64 503\",780:\"11 637Q16 637 22 624T29 607Q29 606 27 602Q26 600 -47 552T-125 502H-127Q-133 502 -184 553Q-236 602 -236 608Q-236 612 -224 625T-206 638L-202 637L-196 632Q-190 628 -179 620T-158 603L-116 570Q-109 572 -52 604T11 637\",989:\"477 261Q477 257 473 256T455 253T417 251T348 250H235L155 -77L146 -82Q137 -85 109 -85Q55 -85 55 -77L139 261Q224 596 226 598Q229 603 239 603Q240 603 254 603T290 603T341 604T405 605T477 605Q656 603 687 602T719 596Q719 589 692 588T513 585H319L282 427L242 272Q242 270 351 270Q388 270 410 270T444 269T460 267T469 265T477 261\",8211:\"98 248Q91 252 91 259Q91 279 100 284Q102 285 324 285H442H500Q536 285 545 283T554 274Q554 260 548 254Q546 250 538 249Q520 248 319 248H98\",8212:\"124 248Q117 252 117 259Q117 279 126 284Q128 285 579 285T1033 284Q1037 280 1037 278Q1038 276 1038 274Q1038 253 1029 250Q1026 248 575 248H124\",8213:\"124 248Q117 252 117 259Q117 279 126 284Q128 285 579 285T1033 284Q1037 280 1037 278Q1038 276 1038 274Q1038 253 1029 250Q1026 248 575 248H124\",8215:\"98 -62Q91 -58 91 -51Q91 -31 100 -26Q102 -25 324 -25H442H500Q536 -25 545 -27T554 -36Q554 -50 548 -56Q546 -60 538 -61Q520 -62 319 -62H98\",8216:\"249 379Q228 379 213 396T197 448Q197 533 271 627L278 635Q286 643 295 652T314 671T332 687T344 694Q349 694 355 685T362 671Q362 668 345 654T301 608T256 537Q238 493 240 491Q241 491 245 493T258 498T275 500Q296 500 311 488T326 454Q326 426 304 403T249 379\",8217:\"250 620Q250 647 272 670T325 694Q348 694 362 677T377 633V624Q377 566 343 506T275 412T231 379Q226 379 220 388T213 401T232 421T279 472T323 547Q335 573 335 582L331 580Q327 578 318 576T300 573Q277 573 264 585T250 620\",8220:\"295 379Q274 379 259 396T243 448Q243 533 317 627Q326 638 354 666T391 694Q395 694 402 686T409 673Q409 668 392 654T348 608T302 537Q284 493 286 491Q287 491 291 493T304 498T321 500Q342 500 357 488T372 454Q372 426 350 403T295 379ZM492 379Q471 379 456 396T440 448Q440 533 514 627Q523 638 551 666T588 694Q592 694 599 685T606 672T589 654T544 608T499 537Q481 493 483 491Q484 491 488 493T501 498T518 500Q539 500 554 488T569 454Q569 426 547 403T492 379\",8221:\"214 620Q214 647 236 670T289 694Q312 694 326 677T341 633V624Q341 588 327 550T294 482T253 428T216 392T196 379Q191 379 184 388T176 401Q176 404 195 421T243 472T287 547Q299 576 299 582L295 580Q291 578 282 576T264 573Q241 573 228 585T214 620ZM411 620Q411 647 433 670T486 694Q509 694 523 677T538 633V624Q538 588 524 550T491 482T450 428T413 392T393 379Q388 379 381 388T373 401Q373 404 392 421T440 472T484 547Q496 576 496 582L492 580Q488 578 479 576T461 573Q438 573 425 585T411 620\",8260:\"166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183Q157 -157 378 274T602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 691 406 241T170 -212Q166 -215 159 -215\",8463:\"150 475Q147 475 118 466T82 457Q73 457 64 467T54 487Q54 490 55 492Q63 506 64 506Q67 512 118 526Q162 541 169 546Q173 559 175 575Q181 596 181 604Q181 613 166 617Q164 617 153 618T135 619Q119 619 114 621T109 630Q109 636 114 656T122 681Q125 685 202 688Q272 695 286 695Q304 695 304 684Q304 682 291 628L278 577L386 612Q466 635 476 635T492 627T499 607Q499 593 489 586Q485 583 373 546L262 512Q262 511 248 455T233 397T236 397T244 404Q295 441 357 441Q405 441 445 417T485 333Q485 284 449 178T412 58T426 44Q447 44 466 68Q485 87 500 130L509 152H531H543Q562 152 562 144Q562 128 546 93T494 23T415 -13Q385 -13 359 3T322 44Q318 52 318 77Q318 99 352 196T386 337Q386 386 346 386Q318 386 286 370Q267 361 245 338T211 292Q207 287 193 235T162 113T138 21Q128 7 122 4Q105 -12 83 -12Q66 -12 54 -2T42 26Q42 45 98 257L151 475H150\",8710:\"574 715L582 716Q589 716 595 716Q612 716 616 714Q621 712 621 709Q622 707 705 359T788 8Q786 5 785 3L781 0H416Q52 0 50 2T48 6Q48 9 305 358T567 711Q572 712 574 715ZM599 346L538 602L442 474Q347 345 252 217T157 87T409 86T661 88L654 120Q646 151 629 220T599 346\",10744:\"166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183Q157 -157 378 274T602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 691 406 241T170 -212Q166 -215 159 -215\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.italic=void 0,e.italic={33:[.716,0,.307,{ic:.073}],34:[.694,-.379,.514,{ic:.024}],35:[.694,.194,.818,{ic:.01}],37:[.75,.056,.818,{ic:.029}],38:[.716,.022,.767,{ic:.035}],39:[.694,-.379,.307,{ic:.07}],40:[.75,.25,.409,{ic:.108}],41:[.75,.25,.409],42:[.75,-.32,.511,{ic:.073}],43:[.557,.057,.767],44:[.121,.194,.307],45:[.251,-.18,.358],46:[.121,0,.307],47:[.716,.215,.778],48:[.665,.021,.511,{ic:.051}],49:[.666,0,.511],50:[.666,.022,.511,{ic:.04}],51:[.666,.022,.511,{ic:.051}],52:[.666,.194,.511],53:[.666,.022,.511,{ic:.056}],54:[.665,.022,.511,{ic:.054}],55:[.666,.022,.511,{ic:.123}],56:[.666,.021,.511,{ic:.042}],57:[.666,.022,.511,{ic:.042}],58:[.431,0,.307],59:[.431,.194,.307],61:[.367,-.133,.767],63:[.716,0,.511,{ic:.04}],64:[.705,.011,.767,{ic:.022}],91:[.75,.25,.307,{ic:.139}],93:[.75,.25,.307,{ic:.052}],94:[.694,-.527,.511,{ic:.017}],95:[-.025,.062,.511,{ic:.043}],126:[.318,-.208,.511,{ic:.06}],305:[.441,.01,.307,{ic:.033}],567:[.442,.204,.332],768:[.697,-.5,0],769:[.697,-.5,0,{ic:.039}],770:[.694,-.527,0,{ic:.017}],771:[.668,-.558,0,{ic:.06}],772:[.589,-.544,0,{ic:.054}],774:[.694,-.515,0,{ic:.062}],775:[.669,-.548,0],776:[.669,-.554,0,{ic:.045}],778:[.716,-.542,0],779:[.697,-.503,0,{ic:.065}],780:[.638,-.502,0,{ic:.029}],989:[.605,.085,.778],8211:[.285,-.248,.511,{ic:.043}],8212:[.285,-.248,1.022,{ic:.016}],8213:[.285,-.248,1.022,{ic:.016}],8215:[-.025,.062,.511,{ic:.043}],8216:[.694,-.379,.307,{ic:.055}],8217:[.694,-.379,.307,{ic:.07}],8220:[.694,-.379,.514,{ic:.092}],8221:[.694,-.379,.514,{ic:.024}],8260:[.716,.215,.778],8463:[.695,.013,.54,{ic:.022}],8710:[.716,0,.833,{sk:.167}],10744:[.716,.215,.778]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.largeop=void 0;var r=Q(6),T=Q(232);e.largeop=r.AddPaths(T.largeop,{40:\"180 96T180 250T205 541T266 770T353 944T444 1069T527 1150H555Q561 1144 561 1141Q561 1137 545 1120T504 1072T447 995T386 878T330 721T288 513T272 251Q272 133 280 56Q293 -87 326 -209T399 -405T475 -531T536 -609T561 -640Q561 -643 555 -649H527Q483 -612 443 -568T353 -443T266 -270T205 -41\",41:\"35 1138Q35 1150 51 1150H56H69Q113 1113 153 1069T243 944T330 771T391 541T416 250T391 -40T330 -270T243 -443T152 -568T69 -649H56Q43 -649 39 -647T35 -637Q65 -607 110 -548Q283 -316 316 56Q324 133 324 251Q324 368 316 445Q278 877 48 1123Q36 1137 35 1138\",47:\"78 -649Q56 -646 56 -625Q56 -614 382 261T712 1140Q716 1150 732 1150Q754 1147 754 1126Q754 1116 428 240T98 -639Q94 -649 78 -649\",91:\"224 -649V1150H455V1099H275V-598H455V-649H224\",92:\"754 -625Q754 -649 731 -649Q715 -649 712 -639Q709 -635 383 242T55 1124Q54 1135 61 1142T80 1150Q92 1150 98 1140Q101 1137 427 262T754 -625\",93:\"16 1099V1150H247V-649H16V-598H196V1099H16\",123:\"547 -643L541 -649H528Q515 -649 503 -645Q324 -582 293 -466Q289 -449 289 -428T287 -200L286 42L284 53Q274 98 248 135T196 190T146 222L121 235Q119 239 119 250Q119 262 121 266T133 273Q262 336 284 449L286 460L287 701Q287 737 287 794Q288 949 292 963Q293 966 293 967Q325 1080 508 1148Q516 1150 527 1150H541L547 1144V1130Q547 1117 546 1115T536 1109Q480 1086 437 1046T381 950L379 940L378 699Q378 657 378 594Q377 452 374 438Q373 437 373 436Q350 348 243 282Q192 257 186 254L176 251L188 245Q211 236 234 223T287 189T340 135T373 65Q373 64 374 63Q377 49 378 -93Q378 -156 378 -198L379 -438L381 -449Q393 -504 436 -544T536 -608Q544 -611 545 -613T547 -629V-643\",125:\"119 1130Q119 1144 121 1147T135 1150H139Q151 1150 182 1138T252 1105T326 1046T373 964Q378 942 378 702Q378 469 379 462Q386 394 439 339Q482 296 535 272Q544 268 545 266T547 251Q547 241 547 238T542 231T531 227T510 217T477 194Q390 129 379 39Q378 32 378 -201Q378 -441 373 -463Q342 -580 165 -644Q152 -649 139 -649Q125 -649 122 -646T119 -629Q119 -622 119 -619T121 -614T124 -610T132 -607T143 -602Q195 -579 235 -539T285 -447Q286 -435 287 -199T289 51Q294 74 300 91T329 138T390 197Q412 213 436 226T475 244L489 250L472 258Q455 265 430 279T377 313T327 366T293 434Q289 451 289 472T287 699Q286 941 285 948Q279 978 262 1005T227 1048T184 1080T151 1100T129 1109L127 1110Q119 1113 119 1130\",710:\"1004 603Q1004 600 999 583T991 565L960 574Q929 582 866 599T745 631L500 698Q497 698 254 631Q197 616 134 599T39 574L8 565Q5 565 0 582T-5 603L26 614Q58 624 124 646T248 687L499 772Q999 604 1004 603\",732:\"296 691Q258 691 216 683T140 663T79 639T34 619T16 611Q13 619 8 628L0 644L36 662Q206 749 321 749Q410 749 517 710T703 670Q741 670 783 678T859 698T920 722T965 742T983 750Q986 742 991 733L999 717L963 699Q787 611 664 611Q594 611 484 651T296 691\",770:\"4 603Q4 600 -1 583T-9 565L-40 574Q-71 582 -134 599T-255 631L-500 698Q-503 698 -746 631Q-803 616 -866 599T-961 574L-992 565Q-995 565 -1000 582T-1005 603L-974 614Q-942 624 -876 646T-752 687L-501 772Q-1 604 4 603\",771:\"-704 691Q-742 691 -784 683T-860 663T-921 639T-966 619T-984 611Q-987 619 -992 628L-1000 644L-964 662Q-794 749 -679 749Q-590 749 -483 710T-297 670Q-259 670 -217 678T-141 698T-80 722T-35 742T-17 750Q-14 742 -9 733L-1 717L-37 699Q-213 611 -336 611Q-405 611 -515 651T-704 691\",8214:\"257 0V602H300V0H257ZM478 0V602H521V0H478\",8260:\"78 -649Q56 -646 56 -625Q56 -614 382 261T712 1140Q716 1150 732 1150Q754 1147 754 1126Q754 1116 428 240T98 -639Q94 -649 78 -649\",8593:\"112 421L120 424Q127 427 136 430T161 441T191 458T224 481T260 510T295 546T328 591L333 600L340 589Q380 527 431 489T555 421V377L543 381Q445 418 368 492L355 504V0H312V504L299 492Q222 418 124 381L112 377V421\",8595:\"312 96V600H355V96L368 108Q445 182 543 219L555 223V179L546 176Q538 173 529 169T505 158T475 141T442 119T407 90T372 53T339 9L334 0L327 11Q287 73 236 111T112 179V223L124 219Q222 182 299 108L312 96\",8657:\"142 329Q300 419 389 599Q389 598 399 579T420 541T452 494T497 438T558 383T636 329T708 294L721 289V246Q718 246 694 256T623 293T532 356L522 364L521 182V0H478V405L466 417Q436 450 389 516Q388 515 378 500T352 463T312 417L300 405V0H257V364L247 356Q202 320 155 293T82 256L57 246V289L70 294Q101 305 142 329\",8659:\"257 236V600H300V195L312 183Q342 150 389 84Q390 85 400 100T426 137T466 183L478 195V600H521V418L522 236L532 244Q576 280 623 307T696 344L721 354V311L708 306Q677 295 636 271Q478 181 389 1Q389 2 379 21T358 59T326 106T281 162T220 217T142 271T70 306L57 311V354Q60 354 83 345T154 308T247 244L257 236\",8719:\"220 812Q220 813 218 819T214 829T208 840T199 853T185 866T166 878T140 887T107 893T66 896H56V950H1221V896H1211Q1080 896 1058 812V-311Q1076 -396 1211 -396H1221V-450H725V-396H735Q864 -396 888 -314Q889 -312 889 -311V896H388V292L389 -311Q405 -396 542 -396H552V-450H56V-396H66Q195 -396 219 -314Q220 -312 220 -311V812\",8720:\"220 812Q220 813 218 819T214 829T208 840T199 853T185 866T166 878T140 887T107 893T66 896H56V950H552V896H542Q411 896 389 812L388 208V-396H889V812Q889 813 887 819T883 829T877 840T868 853T854 866T835 878T809 887T776 893T735 896H725V950H1221V896H1211Q1080 896 1058 812V-311Q1076 -396 1211 -396H1221V-450H56V-396H66Q195 -396 219 -314Q220 -312 220 -311V812\",8721:\"60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948\",8730:\"1001 1150Q1017 1150 1020 1132Q1020 1127 741 244L460 -643Q453 -650 436 -650H424Q423 -647 423 -645T421 -640T419 -631T415 -617T408 -594T399 -560T385 -512T367 -448T343 -364T312 -259L203 119L138 41L111 67L212 188L264 248L472 -474L983 1140Q988 1150 1001 1150\",8739:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612\",8741:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612ZM368 612Q373 627 388 627Q404 627 409 612Q410 610 410 306T409 0Q406 -15 389 -15Q371 -15 368 0V10Q368 19 368 35T368 73T368 122T367 179T367 241T367 306T367 370T367 433T367 489T368 538T368 576T368 602V612\",8747:\"114 -798Q132 -824 165 -824H167Q195 -824 223 -764T275 -600T320 -391T362 -164Q365 -143 367 -133Q439 292 523 655T645 1127Q651 1145 655 1157T672 1201T699 1257T733 1306T777 1346T828 1360Q884 1360 912 1325T944 1245Q944 1220 932 1205T909 1186T887 1183Q866 1183 849 1198T832 1239Q832 1287 885 1296L882 1300Q879 1303 874 1307T866 1313Q851 1323 833 1323Q819 1323 807 1311T775 1255T736 1139T689 936T633 628Q574 293 510 -5T410 -437T355 -629Q278 -862 165 -862Q125 -862 92 -831T55 -746Q55 -711 74 -698T112 -685Q133 -685 150 -700T167 -741Q167 -789 114 -798\",8748:\"114 -798Q132 -824 165 -824H167Q195 -824 223 -764T275 -600T320 -391T362 -164Q365 -143 367 -133Q439 292 523 655T645 1127Q651 1145 655 1157T672 1201T699 1257T733 1306T777 1346T828 1360Q884 1360 912 1325T944 1245Q944 1220 932 1205T909 1186T887 1183Q866 1183 849 1198T832 1239Q832 1287 885 1296L882 1300Q879 1303 874 1307T866 1313Q851 1323 833 1323Q819 1323 807 1311T775 1255T736 1139T689 936T633 628Q574 293 510 -5T410 -437T355 -629Q278 -862 165 -862Q125 -862 92 -831T55 -746Q55 -711 74 -698T112 -685Q133 -685 150 -700T167 -741Q167 -789 114 -798ZM642 -798Q660 -824 693 -824H695Q723 -824 751 -764T803 -600T848 -391T890 -164Q893 -143 895 -133Q967 292 1051 655T1173 1127Q1179 1145 1183 1157T1200 1201T1227 1257T1261 1306T1305 1346T1356 1360Q1412 1360 1440 1325T1472 1245Q1472 1220 1460 1205T1437 1186T1415 1183Q1394 1183 1377 1198T1360 1239Q1360 1287 1413 1296L1410 1300Q1407 1303 1402 1307T1394 1313Q1379 1323 1361 1323Q1347 1323 1335 1311T1303 1255T1264 1139T1217 936T1161 628Q1102 293 1038 -5T938 -437T883 -629Q806 -862 693 -862Q653 -862 620 -831T583 -746Q583 -711 602 -698T640 -685Q661 -685 678 -700T695 -741Q695 -789 642 -798\",8749:\"114 -798Q132 -824 165 -824H167Q195 -824 223 -764T275 -600T320 -391T362 -164Q365 -143 367 -133Q439 292 523 655T645 1127Q651 1145 655 1157T672 1201T699 1257T733 1306T777 1346T828 1360Q884 1360 912 1325T944 1245Q944 1220 932 1205T909 1186T887 1183Q866 1183 849 1198T832 1239Q832 1287 885 1296L882 1300Q879 1303 874 1307T866 1313Q851 1323 833 1323Q819 1323 807 1311T775 1255T736 1139T689 936T633 628Q574 293 510 -5T410 -437T355 -629Q278 -862 165 -862Q125 -862 92 -831T55 -746Q55 -711 74 -698T112 -685Q133 -685 150 -700T167 -741Q167 -789 114 -798ZM642 -798Q660 -824 693 -824H695Q723 -824 751 -764T803 -600T848 -391T890 -164Q893 -143 895 -133Q967 292 1051 655T1173 1127Q1179 1145 1183 1157T1200 1201T1227 1257T1261 1306T1305 1346T1356 1360Q1412 1360 1440 1325T1472 1245Q1472 1220 1460 1205T1437 1186T1415 1183Q1394 1183 1377 1198T1360 1239Q1360 1287 1413 1296L1410 1300Q1407 1303 1402 1307T1394 1313Q1379 1323 1361 1323Q1347 1323 1335 1311T1303 1255T1264 1139T1217 936T1161 628Q1102 293 1038 -5T938 -437T883 -629Q806 -862 693 -862Q653 -862 620 -831T583 -746Q583 -711 602 -698T640 -685Q661 -685 678 -700T695 -741Q695 -789 642 -798ZM1150 -798Q1168 -824 1201 -824H1203Q1231 -824 1259 -764T1311 -600T1356 -391T1398 -164Q1401 -143 1403 -133Q1475 292 1559 655T1681 1127Q1687 1145 1691 1157T1708 1201T1735 1257T1769 1306T1813 1346T1864 1360Q1920 1360 1948 1325T1980 1245Q1980 1220 1968 1205T1945 1186T1923 1183Q1902 1183 1885 1198T1868 1239Q1868 1287 1921 1296L1918 1300Q1915 1303 1910 1307T1902 1313Q1887 1323 1869 1323Q1855 1323 1843 1311T1811 1255T1772 1139T1725 936T1669 628Q1610 293 1546 -5T1446 -437T1391 -629Q1314 -862 1201 -862Q1161 -862 1128 -831T1091 -746Q1091 -711 1110 -698T1148 -685Q1169 -685 1186 -700T1203 -741Q1203 -789 1150 -798\",8750:\"114 -798Q132 -824 165 -824H167Q195 -824 223 -764T275 -600T320 -391T362 -164Q365 -143 367 -133Q382 -52 390 2Q314 40 276 99Q230 167 230 249Q230 363 305 436T484 519H494L503 563Q587 939 632 1087T727 1298Q774 1360 828 1360Q884 1360 912 1325T944 1245Q944 1220 932 1205T909 1186T887 1183Q866 1183 849 1198T832 1239Q832 1287 885 1296L882 1300Q879 1303 874 1307T866 1313Q851 1323 833 1323Q766 1323 688 929Q662 811 610 496Q770 416 770 249Q770 147 701 68T516 -21H506L497 -65Q407 -464 357 -623T237 -837Q203 -862 165 -862Q125 -862 92 -831T55 -746Q55 -711 74 -698T112 -685Q133 -685 150 -700T167 -741Q167 -789 114 -798ZM480 478Q460 478 435 470T380 444T327 401T287 335T271 249Q271 124 375 56L397 43L431 223L485 478H480ZM519 20Q545 20 578 33T647 72T706 144T730 249Q730 383 603 455Q603 454 597 421T582 343T569 276Q516 22 515 20H519\",8896:\"1055 -401Q1055 -419 1042 -434T1007 -450Q977 -450 963 -423Q959 -417 757 167L555 750L353 167Q151 -417 147 -423Q134 -450 104 -450Q84 -450 70 -436T55 -401Q55 -394 56 -390Q59 -381 284 270T512 925Q525 950 555 950Q583 950 597 926Q599 923 825 270T1054 -391Q1055 -394 1055 -401\",8897:\"55 900Q55 919 69 934T103 950Q134 950 147 924Q152 913 353 333L555 -250L757 333Q958 913 963 924Q978 950 1007 950Q1028 950 1041 935T1055 901Q1055 894 1054 891Q1052 884 826 231T597 -426Q583 -450 556 -450Q527 -450 512 -424Q510 -421 285 229T56 890Q55 893 55 900\",8898:\"57 516Q68 602 104 675T190 797T301 882T423 933T542 949Q594 949 606 948Q780 928 901 815T1048 545Q1053 516 1053 475T1055 49Q1055 -406 1054 -410Q1051 -427 1037 -438T1006 -450T976 -439T958 -411Q957 -407 957 37Q957 484 956 494Q945 643 831 747T554 852Q481 852 411 826Q301 786 232 696T154 494Q153 484 153 37Q153 -407 152 -411Q148 -428 135 -439T104 -450T73 -439T56 -410Q55 -406 55 49Q56 505 57 516\",8899:\"56 911Q58 926 71 938T103 950Q120 950 134 939T152 911Q153 907 153 463Q153 16 154 6Q165 -143 279 -247T556 -352Q716 -352 830 -248T956 6Q957 16 957 463Q957 907 958 911Q962 928 975 939T1006 950T1037 939T1054 911Q1055 906 1055 451Q1054 -5 1053 -16Q1029 -207 889 -328T555 -449Q363 -449 226 -331T62 -45Q57 -16 57 25T55 451Q55 906 56 911\",8968:\"224 -649V1150H511V1099H275V-649H224\",8969:\"16 1099V1150H303V-649H252V1099H16\",8970:\"224 -649V1150H275V-598H511V-649H224\",8971:\"252 -598V1150H303V-649H16V-598H252\",9001:\"112 244V258L473 1130Q482 1150 498 1150Q511 1150 517 1142T523 1125V1118L344 685Q304 587 257 473T187 305L165 251L344 -184L523 -616V-623Q524 -634 517 -641T499 -649Q484 -649 473 -629L112 244\",9002:\"112 -649Q103 -649 95 -642T87 -623V-616L266 -184L445 251Q445 252 356 466T178 898T86 1123Q85 1134 93 1142T110 1150Q126 1150 133 1137Q134 1136 317 695L498 258V244L317 -194Q134 -635 133 -636Q126 -649 112 -649\",9168:\"312 0V602H355V0H312\",10072:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612\",10216:\"112 244V258L473 1130Q482 1150 498 1150Q511 1150 517 1142T523 1125V1118L344 685Q304 587 257 473T187 305L165 251L344 -184L523 -616V-623Q524 -634 517 -641T499 -649Q484 -649 473 -629L112 244\",10217:\"112 -649Q103 -649 95 -642T87 -623V-616L266 -184L445 251Q445 252 356 466T178 898T86 1123Q85 1134 93 1142T110 1150Q126 1150 133 1137Q134 1136 317 695L498 258V244L317 -194Q134 -635 133 -636Q126 -649 112 -649\",10752:\"668 944Q697 949 744 949Q803 949 814 948Q916 937 1006 902T1154 826T1262 730T1336 638T1380 563Q1454 415 1454 250Q1454 113 1402 -14T1258 -238T1036 -391T755 -449Q608 -449 477 -392T255 -240T110 -16T56 250Q56 387 105 510T239 723T434 871T668 944ZM755 -352Q922 -352 1061 -269T1278 -48T1356 250Q1356 479 1202 652T809 850Q798 851 747 851Q634 851 527 806T337 682T204 491T154 251Q154 128 201 17T329 -176T521 -304T755 -352ZM665 250Q665 290 692 315T758 341Q792 339 818 315T845 250Q845 211 819 186T755 160Q716 160 691 186T665 250\",10753:\"668 944Q697 949 744 949Q803 949 814 948Q916 937 1006 902T1154 826T1262 730T1336 638T1380 563Q1454 415 1454 250Q1454 113 1402 -14T1258 -238T1036 -391T755 -449Q608 -449 477 -392T255 -240T110 -16T56 250Q56 387 105 510T239 723T434 871T668 944ZM706 299V850H704Q519 832 386 725T198 476Q181 433 169 379T156 300Q156 299 431 299H706ZM1116 732Q1054 778 982 807T871 842T810 849L804 850V299H1079Q1354 299 1354 300Q1354 311 1352 329T1336 402T1299 506T1228 620T1116 732ZM706 -350V201H431Q156 201 156 200Q156 189 158 171T174 98T211 -6T282 -120T395 -232Q428 -257 464 -277T527 -308T587 -328T636 -339T678 -346T706 -350ZM1354 200Q1354 201 1079 201H804V-350Q808 -349 838 -345T887 -338T940 -323T1010 -295Q1038 -282 1067 -265T1144 -208T1229 -121T1301 0T1349 158Q1354 188 1354 200\",10754:\"668 944Q697 949 744 949Q803 949 814 948Q916 937 1006 902T1154 826T1262 730T1336 638T1380 563Q1454 415 1454 250Q1454 113 1402 -14T1258 -238T1036 -391T755 -449Q608 -449 477 -392T255 -240T110 -16T56 250Q56 387 105 510T239 723T434 871T668 944ZM1143 709Q1138 714 1129 722T1086 752T1017 791T925 826T809 850Q798 851 747 851H728Q659 851 571 823T408 741Q367 713 367 709L755 320L1143 709ZM297 639Q296 639 282 622T247 570T205 491T169 382T154 250T168 118T204 9T247 -70T282 -122L297 -139L685 250L297 639ZM1213 -139Q1214 -139 1228 -122T1263 -70T1305 9T1341 118T1356 250T1342 382T1306 491T1263 570T1228 622L1213 639L825 250L1213 -139ZM367 -209Q373 -215 384 -224T434 -258T514 -302T622 -336T755 -352T887 -338T996 -302T1075 -259T1126 -224L1143 -209L755 180Q754 180 561 -14T367 -209\",10756:\"56 911Q58 926 71 938T103 950Q120 950 134 939T152 911Q153 907 153 463Q153 16 154 6Q165 -143 279 -247T556 -352Q716 -352 830 -248T956 6Q957 16 957 463Q957 907 958 911Q962 928 975 939T1006 950T1037 939T1054 911Q1055 906 1055 451Q1054 -5 1053 -16Q1029 -207 889 -328T555 -449Q363 -449 226 -331T62 -45Q57 -16 57 25T55 451Q55 906 56 911ZM507 554Q511 570 523 581T554 593Q571 593 585 582T603 554Q604 551 604 443V338H709Q817 338 820 337Q835 334 847 321T859 290Q859 254 819 241Q816 240 709 240H604V134Q604 48 604 34T598 11Q583 -15 555 -15Q526 -15 512 11Q507 20 507 34T506 134V240H401H344Q292 240 278 246Q251 259 251 290Q251 309 264 321T290 337Q293 338 401 338H506V443Q506 551 507 554\",10758:\"56 911Q60 927 72 938T103 950Q120 950 134 939T152 911Q153 907 153 277V-352H957V277Q957 907 958 911Q962 928 975 939T1006 950T1036 939T1054 911V891Q1054 871 1054 836T1054 754T1054 647T1055 525T1055 390T1055 250T1055 111T1055 -24T1055 -147T1054 -253T1054 -335T1054 -391V-411Q1047 -442 1016 -449Q1011 -450 552 -450L94 -449Q63 -439 56 -411V-391Q56 -371 56 -336T56 -254T56 -147T55 -25T55 110T55 250T55 389T55 524T55 647T56 753T56 835T56 891V911\",12296:\"112 244V258L473 1130Q482 1150 498 1150Q511 1150 517 1142T523 1125V1118L344 685Q304 587 257 473T187 305L165 251L344 -184L523 -616V-623Q524 -634 517 -641T499 -649Q484 -649 473 -629L112 244\",12297:\"112 -649Q103 -649 95 -642T87 -623V-616L266 -184L445 251Q445 252 356 466T178 898T86 1123Q85 1134 93 1142T110 1150Q126 1150 133 1137Q134 1136 317 695L498 258V244L317 -194Q134 -635 133 -636Q126 -649 112 -649\"},{10764:\"\\u222c\\u222c\"})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.largeop=void 0,e.largeop={40:[1.15,.649,.597],41:[1.15,.649,.597],47:[1.15,.649,.811],91:[1.15,.649,.472],92:[1.15,.649,.811],93:[1.15,.649,.472],123:[1.15,.649,.667],125:[1.15,.649,.667],710:[.772,-.565,1],732:[.75,-.611,1],770:[.772,-.565,0],771:[.75,-.611,0],8214:[.602,0,.778],8260:[1.15,.649,.811],8593:[.6,0,.667],8595:[.6,0,.667],8657:[.599,0,.778],8659:[.6,0,.778],8719:[.95,.45,1.278],8720:[.95,.45,1.278],8721:[.95,.45,1.444],8730:[1.15,.65,1,{ic:.02}],8739:[.627,.015,.333],8741:[.627,.015,.556],8747:[1.36,.862,.556,{ic:.388}],8748:[1.36,.862,1.084,{ic:.388}],8749:[1.36,.862,1.592,{ic:.388}],8750:[1.36,.862,.556,{ic:.388}],8896:[.95,.45,1.111],8897:[.95,.45,1.111],8898:[.949,.45,1.111],8899:[.95,.449,1.111],8968:[1.15,.649,.528],8969:[1.15,.649,.528],8970:[1.15,.649,.528],8971:[1.15,.649,.528],9001:[1.15,.649,.611],9002:[1.15,.649,.611],9168:[.602,0,.667],10072:[.627,.015,.333],10216:[1.15,.649,.611],10217:[1.15,.649,.611],10752:[.949,.449,1.511],10753:[.949,.449,1.511],10754:[.949,.449,1.511],10756:[.95,.449,1.111],10758:[.95,.45,1.111],10764:[1.36,.862,2.168,{ic:.388}],12296:[1.15,.649,.611],12297:[1.15,.649,.611]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.monospace=void 0;var r=Q(6),T=Q(234);e.monospace=r.AddPaths(T.monospace,{32:\"\",33:\"206 565Q206 590 222 606T265 622Q287 621 303 606T319 565T314 392L308 216Q299 194 273 194H262Q247 194 241 195T228 200T217 216L211 392Q206 539 206 565ZM206 56Q206 83 223 99T265 115Q288 113 304 99T320 58Q320 33 303 17T262 0Q237 0 222 17T206 56\",34:\"122 575Q122 593 137 608T173 623Q196 623 210 608T225 575Q225 562 218 464Q212 373 211 361T201 341Q193 333 173 333Q154 333 146 341Q138 348 137 360T129 464Q122 561 122 575ZM299 575Q299 593 314 608T350 623Q373 623 387 608T402 575Q402 562 395 464Q389 373 388 361T378 341Q370 333 350 333Q331 333 323 341Q315 348 314 360T306 464Q299 561 299 575\",35:\"93 163Q74 163 65 164T46 173T36 198Q36 210 40 215T61 233H131V236Q132 239 140 307T149 377Q149 379 105 379L61 380Q36 392 36 414Q36 450 86 450Q91 450 99 450T112 449H159Q163 480 167 517Q168 524 170 545T174 573T180 591T191 607T210 611Q223 611 232 604T243 588L245 580Q245 565 238 511T230 451Q230 449 282 449H333Q337 480 341 517Q342 524 343 537T345 556T348 573T352 589T359 600T370 608T384 611Q395 611 406 602T419 580Q419 565 412 511T404 451Q404 449 431 449H442Q477 449 485 429Q489 421 489 414Q489 392 463 380L428 379H394V376Q393 373 385 305T376 235Q376 233 419 233H463L468 230Q472 227 473 227T477 223T482 218T486 213T488 206T489 198Q489 162 436 162Q430 162 422 162T412 163H366V161Q364 159 357 92Q356 85 355 73T353 54T350 37T346 22T339 11T328 3T314 0Q303 0 292 9T279 31Q279 37 287 96T295 162Q295 163 244 163H192V161Q190 159 183 92Q182 85 181 73T179 54T176 37T172 22T165 11T154 3T140 0Q129 0 118 9T105 31Q105 37 113 96T121 162Q121 163 93 163ZM323 377Q323 379 272 379H220V376Q219 373 211 305T202 235Q202 233 253 233H305V236Q306 239 314 307T323 377\",36:\"415 397Q392 397 377 411T362 448Q362 464 376 485Q369 498 362 506T346 520T332 528T315 533T300 538V445L301 353L311 350Q382 334 424 284T466 174Q466 115 425 65T303 -2L300 -3V-30Q300 -64 291 -74Q283 -82 262 -82H255Q234 -82 225 -60L224 -32V-4L213 -2Q152 6 106 51T59 170V180Q59 197 74 213Q89 227 110 227T146 213T162 174Q162 156 147 137Q153 123 161 112T176 95T191 85T205 79T216 76T224 74V283L213 285Q147 298 103 343T58 449Q58 516 108 560T224 614V643V654Q224 666 226 673T237 687T264 694Q289 693 294 683T300 642V615H303Q355 607 390 587T440 540T460 493T466 453Q466 425 451 411T415 397ZM137 452Q137 425 158 404T198 376T223 369Q224 369 224 453T223 537Q198 532 168 509T137 452ZM301 75Q307 75 325 83T365 116T387 171Q387 238 300 267V171Q300 75 301 75\",37:\"35 560Q35 607 54 645T110 693Q111 693 116 693T125 694Q165 692 187 651T210 560Q210 506 186 467T123 428Q84 428 60 466T35 560ZM139 560Q139 574 136 587T130 608T124 615Q122 617 120 614Q106 595 106 561Q106 516 121 506Q123 504 125 507Q139 526 139 560ZM123 -83Q107 -83 98 -73T88 -48Q88 -43 89 -41Q90 -37 229 316T370 675Q381 694 400 694Q416 694 426 684T436 659Q436 654 435 652Q434 647 295 294T153 -65Q144 -83 123 -83ZM314 50Q314 104 338 143T400 183Q439 183 464 144T489 50T465 -43T402 -82Q358 -82 336 -41T314 50ZM417 50Q417 71 413 85T405 102L401 106Q386 95 386 50Q386 29 390 15T398 -2L402 -6Q417 5 417 50\",38:\"96 462Q96 546 132 584T211 622Q255 622 284 583T314 474Q314 395 224 305L208 288Q213 275 226 251L265 185L269 179Q273 184 299 246L332 333L342 363Q342 364 341 365Q334 365 334 393Q334 406 334 410T340 420T356 431H412H440Q467 431 478 424T490 393Q490 376 484 367T470 357T448 355H441H415L399 312Q349 176 322 127L315 115L323 106Q360 65 393 65Q405 65 410 80T416 109Q416 140 452 140Q487 140 487 105Q487 56 460 23T391 -11L286 41L273 53L262 42Q212 -11 151 -11Q97 -11 63 33T28 143Q28 161 30 176T38 205T47 227T60 247T72 261T84 274T94 283L122 311L119 323Q96 392 96 462ZM243 474Q243 533 218 545L215 546Q212 546 210 546Q182 546 169 501Q167 492 167 466Q167 419 179 368L188 377Q234 425 242 461Q243 465 243 474ZM217 129Q185 174 154 235Q121 214 115 176Q113 168 113 143Q113 83 139 67Q141 66 152 66Q191 66 228 112L217 129\",39:\"205 554Q205 577 221 594T263 611Q302 611 325 577T349 490Q349 409 298 347Q285 330 258 309T214 287Q203 289 189 302T175 327Q175 341 185 349T213 369T245 402Q269 437 273 483V497Q264 496 263 496Q240 496 223 513T205 554\",40:\"437 -53Q437 -82 399 -82H394Q377 -82 342 -55Q259 7 213 102T166 306Q166 412 211 507T342 667Q377 694 393 694H399Q437 694 437 665Q437 654 426 643T397 620T356 584T311 525Q301 511 290 488T264 412T250 306Q250 191 300 105T422 -27Q437 -37 437 -53\",41:\"87 664Q87 694 126 694Q138 694 147 690T183 667Q266 605 312 510T358 306Q358 193 307 93T161 -70Q142 -82 126 -82Q105 -82 96 -73T87 -53Q87 -47 88 -44Q92 -36 116 -19T173 34T230 119Q273 206 273 306Q273 408 231 494T109 635Q87 649 87 664\",42:\"222 487Q224 501 235 510T262 520Q279 520 289 510T302 487Q302 458 301 429Q301 421 301 413T301 398T300 386T300 377V374Q300 373 301 373Q304 373 353 403T416 434Q432 434 444 423T456 393Q456 389 456 386T454 379T451 373T448 368T442 363T436 358T427 353T417 348T405 342T391 334Q345 309 339 305L388 279Q400 273 412 266T432 255T441 250Q456 238 456 218Q456 200 445 189T417 177Q403 177 354 207T301 238Q300 238 300 237V234Q300 231 300 226T300 214T301 199T301 182Q302 153 302 124Q300 109 289 100T262 90T235 100T222 124Q222 153 223 182Q223 190 223 198T223 213T224 225T224 234V237Q224 238 223 238Q220 238 171 208T108 177Q92 177 80 188T68 218Q68 237 79 246T134 277Q180 303 185 306L136 332Q124 338 112 345T92 356T83 361Q68 373 68 393Q68 411 79 422T107 434Q121 434 170 404T223 373Q224 373 224 374V377Q224 380 224 385T224 397T223 412T223 429Q222 458 222 487\",43:\"147 271Q138 271 122 271T98 270Q68 270 53 277T38 306T53 335T98 342Q105 342 121 342T147 341H227V423L228 505Q241 531 262 531Q268 531 273 530T282 525T287 519T293 511L297 505V341H377H430Q457 341 467 338T483 321Q487 313 487 306Q487 295 480 286T463 273Q457 271 377 271H297V107Q281 81 262 81Q250 81 242 87T230 100L228 107L227 189V271H147\",44:\"193 37T193 70T213 121T260 140Q302 140 327 108T353 36Q353 -7 336 -43T294 -98T249 -128T215 -139Q204 -139 189 -125Q177 -111 174 -101Q172 -84 183 -77T217 -61T253 -33Q261 -24 272 1L265 0Q234 0 214 18\",45:\"57 306Q57 333 86 341H438Q468 332 468 306T438 271H86Q57 280 57 306\",46:\"193 70Q193 105 214 122T258 140Q291 140 311 120T332 70Q332 44 314 23T262 1Q234 1 214 18T193 70\",47:\"94 -83Q78 -83 68 -73T58 -48Q58 -44 60 -36Q62 -31 227 314T399 673Q410 694 431 694Q445 694 455 684T466 659Q466 656 464 648Q463 643 298 298T125 -62Q114 -83 94 -83\",58:\"193 361Q193 396 214 413T258 431Q291 431 311 411T332 361Q332 335 314 314T262 292Q234 292 214 309T193 361ZM193 70Q193 105 214 122T258 140Q291 140 311 120T332 70Q332 44 314 23T262 1Q234 1 214 18T193 70\",59:\"193 361Q193 396 214 413T258 431Q291 431 311 411T332 361Q332 335 314 314T262 292Q234 292 214 309T193 361ZM193 70Q193 105 214 122T259 140Q301 140 319 108T337 33Q337 -38 291 -88T214 -139Q203 -139 189 -126T175 -97Q175 -85 182 -78T200 -66T225 -50T249 -17Q256 -3 256 0Q252 1 248 1Q242 2 235 5T218 15T200 36T193 70\",60:\"468 90Q468 76 458 66T433 55Q426 55 419 58Q413 61 243 168T68 280Q57 291 57 306T68 332Q72 335 241 442T416 553Q424 557 432 557Q447 557 457 547T468 522T456 496Q454 494 305 399L158 306L305 213Q341 190 390 159Q443 125 452 119T464 106V105Q468 97 468 90\",61:\"38 382Q38 409 67 417H457Q487 408 487 382Q487 358 461 348H64Q51 352 45 360T38 376V382ZM67 195Q38 204 38 230Q38 255 62 264Q66 265 264 265H461L464 264Q467 262 469 261T475 256T481 249T485 240T487 230Q487 204 457 195H67\",62:\"57 522Q57 539 67 548T90 557Q98 557 105 554Q111 551 281 444T456 332Q468 320 468 306T456 280Q452 276 282 169T105 58Q98 55 91 55Q79 55 68 63T57 90Q57 105 68 116Q70 118 219 213L366 306L219 399Q75 491 71 494Q57 507 57 522\",63:\"62 493Q62 540 107 578T253 617Q366 617 414 578T462 490Q462 459 445 434T411 400L394 390Q315 347 296 287Q294 278 293 247V217Q285 201 278 198T246 194T216 197T201 215V245V253Q201 379 351 456Q366 464 375 477Q377 482 377 490Q377 517 339 528T251 540Q182 540 159 517Q166 503 166 490Q166 468 151 453T114 438Q96 438 79 451T62 493ZM190 58Q190 85 208 100T249 115Q272 113 288 99T304 58Q304 33 287 17T246 0T206 16T190 58\",64:\"44 306Q44 445 125 531T302 617Q332 617 358 607T411 574T456 502T479 387Q481 361 481 321Q481 203 421 143Q381 103 332 103Q266 103 225 165T183 307Q183 390 227 449T332 508Q358 508 378 498Q350 541 304 541Q229 541 172 473T115 305Q115 208 171 140T306 71H310Q358 71 397 105Q409 115 436 115Q458 115 462 113Q481 106 481 86Q481 73 468 61Q401 -6 305 -6Q262 -6 217 14T133 71T69 170T44 306ZM410 306Q410 361 386 396T333 431Q300 431 277 394T254 305Q254 256 276 218T332 180Q364 180 387 217T410 306\",91:\"237 -82Q221 -78 214 -58V305Q214 669 216 673Q220 687 231 690T278 694H350H461Q462 693 467 690T474 685T478 679T482 670T483 656Q483 632 471 625T428 617Q422 617 406 617T379 618H298V-7H379H420Q459 -7 471 -13T483 -45Q483 -55 483 -59T477 -70T461 -82H237\",92:\"58 659Q58 673 68 683T93 694Q114 694 125 673Q132 659 297 314T464 -36Q466 -44 466 -48Q466 -66 454 -74T431 -83Q410 -83 399 -62Q391 -47 226 298T60 648Q58 656 58 659\",93:\"41 656Q41 681 53 688T99 695Q107 695 133 695T177 694H288Q307 681 310 669V-58Q303 -76 288 -82H64Q41 -73 41 -45Q41 -21 53 -14T96 -6Q102 -6 118 -6T145 -7H226V618H145H100Q67 618 54 625T41 656\",94:\"138 460Q121 460 109 479T96 512Q96 527 106 534Q109 536 178 571T253 609Q256 611 264 611Q272 610 343 574Q357 567 369 561T389 550T402 543T411 538T416 535T420 532T422 529T425 525Q428 518 428 512Q428 498 416 479T386 460H384Q377 460 316 496L262 526L208 496Q147 460 138 460\",95:\"57 -60Q57 -33 86 -25H438Q468 -34 468 -60T438 -95H86Q57 -86 57 -60\",96:\"176 479Q176 563 227 622T310 681Q324 680 337 667T350 641Q350 627 340 619T312 599T280 566Q256 531 252 485V471Q261 472 262 472Q285 472 302 455T320 414Q320 389 303 373T261 357Q223 357 200 391T176 479\",123:\"430 -7H436Q449 -7 456 -8T469 -19T475 -45Q475 -69 466 -76T434 -83H419Q386 -82 363 -80T308 -69T253 -41T223 7L221 17L220 118V220L218 224Q215 229 214 230T210 235T204 241T195 246T184 252T170 257T151 262T127 265Q118 267 100 267T69 270T52 283Q50 288 50 306V314Q50 335 67 341Q68 342 102 343T172 355T217 386L220 392V493L221 595Q225 611 230 621T251 650T304 679T395 693L406 694Q418 694 426 694Q458 694 466 685Q475 676 475 656T466 627Q458 618 430 618Q319 618 305 587L304 486Q304 476 304 458T305 431Q305 385 295 358T251 311L243 306Q243 305 254 298T281 274T302 231Q304 223 304 125L305 25Q309 16 316 10T352 -1T430 -7\",124:\"228 668Q241 694 262 694Q268 694 273 693T282 688T287 682T293 674L297 668V-57Q282 -82 262 -82Q239 -82 228 -57V668\",125:\"49 655Q49 674 56 682T73 692T106 694Q141 693 167 690T224 677T275 647T303 595L305 392Q313 367 347 356T417 344T457 341Q475 335 475 306Q475 292 473 285T464 273T451 269T430 267Q352 262 327 246Q311 236 305 220L303 17L301 7Q294 -16 277 -33T242 -60T196 -74T150 -80T106 -83Q78 -83 72 -82T58 -74Q49 -65 49 -44Q49 -24 58 -16Q66 -7 94 -7Q143 -7 171 -1T207 10T220 25V125Q220 223 222 231Q228 257 243 274T270 299L281 306Q234 329 222 381Q220 387 220 486V587Q212 597 207 601T173 612T94 618Q66 618 58 627Q49 635 49 655\",126:\"125 467Q113 467 100 480T87 509Q88 520 111 543Q172 602 209 609Q219 611 224 611Q246 611 263 596T290 566T304 551Q319 551 367 594Q383 610 396 610H400Q411 610 424 597T437 568Q436 557 413 534Q348 469 305 466Q278 466 260 481T234 511T220 526Q205 526 157 483Q141 467 129 467H125\",127:\"104 565Q104 590 120 600T155 611Q175 611 180 610Q217 599 217 565Q217 545 202 532T166 519H159H155Q120 519 107 547Q104 553 104 565ZM307 565Q307 580 317 593T346 610Q348 610 350 610T354 611Q355 612 367 612Q395 611 408 597T421 565T409 534T365 519H358Q336 519 322 532T307 565\",160:\"\",305:\"411 76Q441 76 451 69T462 38Q462 29 462 26T460 18T453 9T440 1H94Q72 8 72 33V38Q72 46 72 49T74 58T81 68T94 76H233V355H167L102 356Q80 363 80 393Q80 418 91 425T138 432Q145 432 165 432T200 431H295Q297 429 303 425T310 420T314 415T317 404T317 389T318 363Q318 354 318 314T317 241V76H378H411\",567:\"75 -91T100 -91T138 -107T152 -144V-150L160 -151H193H203Q241 -151 267 -121Q284 -97 288 -73T292 23V151V355H218L145 356Q123 365 123 387V393Q123 422 145 430H148Q151 430 156 430T169 430T185 430T205 431T227 431T251 431H354Q356 430 360 427T365 424T369 420T372 416T373 410T375 402T376 391T377 376T377 356Q377 345 377 286T376 176Q376 -67 371 -88Q362 -123 342 -151T299 -194Q254 -228 180 -228Q84 -226 56 -177Q49 -162 48 -148Q48 -122 61 -107\",697:\"211 572Q211 593 226 608T262 623Q281 623 297 610T313 573Q313 561 307 465Q301 370 299 357T284 336Q279 334 262 334Q240 334 231 343Q226 350 225 362T217 465Q211 549 211 572\",768:\"-409 569Q-409 586 -399 596T-377 610Q-376 610 -372 610T-365 611Q-355 610 -284 588T-210 563Q-195 556 -195 537Q-195 533 -197 522T-208 498T-229 485Q-238 485 -312 508T-388 533Q-400 538 -405 552Q-409 559 -409 569\",769:\"-297 485Q-315 485 -323 505T-331 537Q-331 556 -316 563Q-307 569 -170 610Q-169 610 -165 610T-157 611Q-141 609 -131 600T-119 584T-117 569Q-117 555 -124 545T-138 533Q-140 531 -214 508T-297 485\",770:\"-387 460Q-404 460 -416 479T-429 512Q-429 527 -419 534Q-416 536 -347 571T-272 609Q-269 611 -261 611Q-254 610 -182 574Q-168 567 -156 561T-136 550T-123 543T-114 538T-109 535T-105 532T-103 529T-100 525Q-97 518 -97 512Q-97 498 -109 479T-139 460H-141Q-148 460 -209 496L-263 526L-317 496Q-378 460 -387 460\",771:\"-400 467Q-412 467 -425 480T-438 509Q-437 520 -414 543Q-353 602 -316 609Q-306 611 -301 611Q-279 611 -262 596T-235 566T-221 551Q-206 551 -158 594Q-142 610 -129 610H-125Q-114 610 -101 597T-88 568Q-89 557 -112 534Q-177 469 -220 466Q-247 466 -265 481T-291 511T-305 526Q-320 526 -368 483Q-384 467 -396 467H-400\",772:\"-429 500Q-440 504 -445 511T-450 522T-452 536Q-452 552 -451 556Q-445 571 -434 574T-379 578Q-369 578 -330 578T-261 577H-96Q-94 575 -90 573T-85 569T-81 564T-77 558T-75 550T-74 538Q-74 522 -78 515T-96 500H-429\",774:\"-446 579Q-446 611 -412 611H-407Q-383 609 -378 599T-358 587Q-340 583 -263 583H-235Q-159 583 -152 593Q-145 611 -120 611H-117H-115Q-79 611 -79 577Q-80 552 -95 536T-140 514T-191 506T-251 504H-263H-274Q-311 504 -334 505T-386 513T-431 536T-446 579\",776:\"-421 565Q-421 590 -405 600T-370 611Q-350 611 -345 610Q-308 599 -308 565Q-308 545 -323 532T-359 519H-366H-370Q-405 519 -418 547Q-421 553 -421 565ZM-218 565Q-218 580 -208 593T-179 610Q-177 610 -175 610T-171 611Q-170 612 -158 612Q-130 611 -117 597T-104 565T-116 534T-160 519H-167Q-189 519 -203 532T-218 565\",778:\"-344 558Q-344 583 -321 601T-262 619Q-225 619 -204 600T-182 560Q-182 536 -205 518T-264 499Q-301 499 -322 519T-344 558ZM-223 559Q-223 570 -234 579T-261 588T-289 580T-303 559Q-303 549 -293 540T-263 530T-234 539T-223 559\",780:\"-427 525Q-427 542 -417 559T-392 577Q-385 577 -323 553L-263 530L-203 553Q-143 576 -136 576Q-118 576 -109 559T-99 525Q-99 508 -107 502T-161 481Q-177 475 -186 472Q-256 449 -263 449Q-272 449 -339 472T-412 498Q-420 501 -423 508T-427 520V525\",913:\"191 76Q212 75 220 68T229 38Q229 10 208 1H129H80Q48 1 38 7T28 38Q28 51 29 57T40 69T70 76Q89 76 89 78Q90 79 117 205T173 461T205 599Q212 623 250 623H262H273Q312 623 319 599Q322 591 350 461T406 205T435 78Q435 76 454 76H458Q484 76 493 59Q496 53 496 38Q496 11 478 3Q474 1 395 1H317Q295 8 295 38Q295 65 311 73Q316 75 333 76L348 77V78Q348 80 341 112L334 143H190L183 112Q176 80 176 78Q175 76 178 76Q180 76 191 76ZM318 221Q313 238 288 366T263 519Q263 526 262 527Q261 527 261 520Q261 493 236 365T206 221Q206 219 262 219T318 221\",914:\"39 1Q17 10 17 32V38V46Q17 65 34 73Q40 76 61 76H84V535H61H54Q27 535 19 553Q17 557 17 573Q17 583 17 587T23 599T39 610Q40 611 179 611Q320 610 332 607Q332 607 339 605Q394 591 427 547T461 454Q461 413 436 378T369 325L358 320Q405 311 443 270T482 169Q482 112 445 64T345 3L334 1H39ZM309 533Q302 535 234 535H168V356H230Q284 357 296 358T323 368Q346 380 361 402T377 452Q377 482 358 505T309 533ZM398 176Q396 218 371 246T315 279Q310 280 237 280H168V76H239Q316 77 327 81Q329 82 334 84Q398 107 398 176\",915:\"466 611Q468 609 473 606T479 602T483 598T486 593T487 586T488 576T488 562V526V488Q488 452 470 444Q466 442 446 442Q421 442 413 450Q406 457 405 463T404 501V535H185V76H222H239Q260 76 270 69T281 38Q281 12 270 6T209 0H155H104Q48 0 37 5T25 38Q25 59 35 69Q44 76 76 76H101V535H76H64Q36 535 27 552Q25 557 25 573T27 594Q33 606 43 608T106 611H258H466\",916:\"232 622H237Q242 622 249 622T264 623H293Q295 622 300 619T308 613T314 608T319 601Q322 597 405 316T489 19Q489 9 473 1Q471 0 262 0T51 1Q35 9 35 19Q35 34 118 315T205 601Q214 616 232 622ZM267 501Q266 504 265 510T263 521T261 526V523Q261 508 211 332Q142 91 138 82H386Q385 84 345 224Q281 439 267 501\",917:\"374 271Q374 241 367 232T332 223Q307 223 299 231Q290 240 290 263V279H173V76H418V118V144Q418 167 426 176T460 186Q491 186 500 166Q502 161 502 93V52Q502 25 499 17T480 1H41Q19 9 19 32V38Q19 63 36 73Q42 76 65 76H89V535H65H55Q44 535 38 537T25 548T19 573Q19 602 41 610H47Q53 610 63 610T88 610T121 610T160 611T204 611T251 611H458Q460 609 465 606T471 602T475 598T478 593T479 586T480 576T480 562V526V488Q480 452 462 444Q458 442 438 442Q413 442 405 450Q398 457 397 463T396 501V535H173V355H290V371Q290 394 299 403T332 412Q363 412 372 392Q374 387 374 317V271\",918:\"71 1Q60 5 55 11T49 23T48 39V46Q48 56 58 73T131 183Q171 242 197 282L366 535H144V501Q144 470 143 464T135 450Q127 442 102 442H94Q71 442 62 461Q60 466 60 527L61 589Q70 607 83 610H88Q93 610 102 610T124 610T154 610T188 611T227 611T270 611H454Q456 609 461 606T467 601T471 597T474 591T475 584T476 572V565Q476 555 466 538T393 428Q353 369 327 329L158 76H397V120V146Q397 169 405 179T439 189Q470 189 479 169Q481 164 481 95V48Q481 24 478 16T459 1H71\",919:\"16 571Q16 597 27 604T74 611H125H208Q223 602 226 596T230 573Q230 559 227 551T217 540T204 536T186 535H165V356H359V535H338H333Q306 535 297 552Q295 556 295 573Q295 586 295 590T301 600T317 611H486Q501 602 504 596T508 573Q508 559 505 551T495 540T482 536T464 535H443V76H464H470Q482 76 489 75T502 64T508 38Q508 10 486 1H317Q306 5 301 11T296 21T295 38V44Q295 66 311 73Q318 76 338 76H359V280H165V76H186H192Q204 76 211 75T224 64T230 38Q230 10 208 1H39Q28 5 23 11T18 21T17 38V44Q17 66 33 73Q40 76 60 76H81V535H60Q45 535 38 536T24 545T16 571\",920:\"102 588Q140 621 240 621Q323 621 335 620Q393 613 422 588Q450 560 459 493T468 306Q468 185 460 118T422 23Q382 -10 289 -10H262H235Q142 -10 102 23Q74 50 65 118T56 306Q56 427 64 494T102 588ZM262 66Q285 66 300 67T329 74T351 86T366 108T376 138T381 181T383 235T384 306Q384 452 371 492T304 544Q296 545 251 545Q230 545 215 543T188 534T169 520T155 497T147 466T143 423T141 371T140 306Q140 247 141 215T146 151T158 107T179 82T212 69T262 66ZM179 356Q187 378 219 378H223Q240 377 249 372T260 360L261 355Q261 353 262 353T263 355Q263 362 272 369Q280 377 304 377H310Q325 377 331 374T346 356V256Q338 241 331 238T309 234H304Q280 234 272 242Q263 249 263 256Q263 258 262 258T261 256Q261 249 252 242Q244 234 220 234H216Q186 234 179 256V356\",921:\"400 76Q431 76 441 69T452 38Q452 29 452 26T450 18T443 9T430 1H95Q84 6 79 12T73 23T72 38Q72 65 90 73Q96 76 157 76H220V535H157H124Q93 535 83 542T72 573Q72 603 93 610Q97 611 264 611H430Q432 609 436 607T444 602T449 594Q452 588 452 573Q452 546 434 538Q428 535 367 535H304V76H367H400\",922:\"18 549T18 573T29 604T70 611H118H193Q207 603 210 596T214 573Q214 549 198 538Q191 535 172 535H152V421Q152 344 152 326T153 309L242 422L329 534Q327 535 322 536T314 538T308 542T303 548T300 558T298 573Q298 600 316 608Q322 611 392 611H463Q477 602 481 595T485 573Q485 535 446 535H441H420L281 357L436 77L454 76Q473 75 478 73Q495 62 495 38Q495 10 473 1H345Q334 5 329 11T324 21T323 38Q323 51 324 56T332 68T355 77L233 296L152 192V76H172Q191 76 198 73Q214 63 214 38Q214 9 193 1H41Q18 8 18 38Q18 61 35 73Q42 76 61 76H81V535H61Q42 535 35 538Q18 549 18 573\",923:\"30 38Q30 57 38 66T70 76Q88 76 88 78Q89 79 117 207T173 466T205 602Q213 617 231 622H236Q241 622 249 622T264 623H294Q315 609 319 602Q321 598 350 468T407 208T435 78Q436 76 454 76Q470 76 478 73Q495 62 495 38Q495 10 473 1H313Q290 10 290 38Q290 56 297 65T310 74T331 76Q350 76 350 78Q349 80 328 176T285 383T263 520Q263 526 262 527Q261 527 261 521Q261 497 240 388T198 181T174 78Q174 76 193 76Q220 75 227 65Q234 56 234 38Q234 28 234 24T228 13T212 1H52Q30 9 30 32V38\",924:\"50 535Q37 536 31 537T18 547T12 573Q12 598 22 604T62 611H91H121Q147 611 158 607T178 587Q183 579 222 446T261 293Q261 289 262 288Q263 288 263 292Q263 311 298 434T346 588Q353 603 365 607T402 611H435H450Q488 611 500 605T512 573Q512 556 506 547T493 537T474 535H459V76H474Q487 75 493 74T505 64T512 38Q512 11 494 3Q490 1 424 1H386Q355 1 345 7T335 38Q335 55 341 64T354 74T373 76H388V302Q388 512 387 519Q382 482 346 359T304 228Q292 204 262 204T220 228Q215 237 179 359T137 519Q136 512 136 302V76H151Q164 75 170 74T182 64T189 38Q189 11 171 3Q167 1 101 1H63Q32 1 22 7T12 38Q12 55 18 64T31 74T50 76H65V535H50\",925:\"20 571Q20 598 30 604T73 611H105H136Q152 611 160 611T177 607T189 601T198 587T206 568T217 537T231 497Q354 142 365 95L368 84V535H347H342Q314 535 306 552Q304 556 304 573Q304 586 304 590T310 600T326 611H482Q497 602 500 596T504 573Q504 559 501 551T491 540T478 536T460 535H439V25Q432 7 424 4T389 0H374Q334 0 322 31L293 115Q171 468 159 517L156 528V76H177H183Q195 76 202 75T215 64T221 38Q221 10 199 1H43Q32 5 27 11T22 21T21 38V44Q21 66 37 73Q44 76 64 76H85V535H64Q49 535 42 536T28 545T20 571\",926:\"37 555V569Q37 605 60 610H66Q71 610 81 610T105 610T137 610T175 611T217 611T264 611H465Q467 609 471 606T477 602T481 599T484 594T485 588T487 580T487 570T487 554Q487 526 486 520T478 506Q470 498 445 498T412 506Q403 515 403 531V539H121V531Q121 498 86 498H79H71Q48 498 39 517Q37 522 37 555ZM109 318V346Q109 366 113 374T132 389H170Q193 379 193 359V354H331V359Q331 379 354 389H392Q407 381 411 373T415 342V318V290Q415 270 411 262T392 247H354Q331 257 331 277V282H193V277Q193 257 170 247H132Q117 255 113 263T109 294V318ZM56 1Q41 7 37 15T33 42V58V80Q33 101 41 110T77 119Q87 118 91 118T103 114T114 103T117 83V72H407V83Q407 101 416 110T449 119T482 110Q489 103 490 97T491 59V41Q491 24 487 16T469 1H56\",927:\"102 588Q140 621 240 621Q323 621 335 620Q393 613 422 588Q450 560 459 493T468 306Q468 185 460 118T422 23Q382 -10 289 -10H262H235Q142 -10 102 23Q74 50 65 118T56 306Q56 427 64 494T102 588ZM363 513Q357 523 347 530T324 540T302 544T280 546H268Q192 546 167 521Q150 501 145 452T140 300Q140 235 142 197T151 130T172 89T207 71T262 65Q317 65 341 81T374 144T384 300Q384 474 363 513\",928:\"60 535Q45 535 38 536T24 545T16 571Q16 603 36 609Q41 611 264 611H486Q501 602 504 596T508 573Q508 559 505 551T495 540T482 536T464 535H443V76H464H470Q482 76 489 75T502 64T508 38Q508 10 486 1H317Q306 5 301 11T296 21T295 38V44Q295 66 311 73Q318 76 338 76H359V535H165V76H186H192Q204 76 211 75T224 64T230 38Q230 10 208 1H39Q28 5 23 11T18 21T17 38V44Q17 66 33 73Q40 76 60 76H81V535H60\",929:\"41 1Q19 9 19 32V38Q19 63 36 73Q42 76 65 76H89V535H65H55Q38 535 29 543T19 576Q19 603 41 610H49Q57 610 70 610T100 610T136 611T175 611Q190 611 216 611T255 612Q321 612 363 598T441 537Q480 486 480 427V421Q480 354 447 311T378 251Q339 230 275 230H239H173V76H197Q220 76 227 73Q244 62 244 38Q244 10 222 1H41ZM396 421Q396 461 369 491T300 533Q294 534 233 535H173V306H233Q294 307 300 308Q345 319 370 352T396 421\",931:\"40 575Q40 576 40 579T41 583T41 588T43 593T46 597T50 602T55 606T63 610H68Q74 610 84 610T108 610T139 610T176 611T219 611T264 611H462Q464 609 469 606T475 602T479 598T482 593T483 586T484 576T484 562V526V488Q484 452 466 444Q462 442 442 442Q417 442 409 450Q402 457 401 463T400 501V535H153Q153 533 218 430Q233 405 250 378T276 336T286 319Q290 311 290 307Q290 296 239 211Q229 194 223 184L161 78H400V112Q400 142 401 149T409 163Q418 172 442 172Q473 172 482 152Q484 147 484 86V49Q484 25 481 17T462 1H63Q41 10 41 31Q41 39 43 44Q43 45 81 109T157 238L195 303Q195 307 119 430T41 557T40 575\",932:\"129 38Q129 51 129 55T135 65T151 76H220V535H110V501Q110 470 109 464T101 450Q93 442 68 442H60Q37 442 28 461Q26 466 26 527L27 589Q36 607 49 610H55Q61 610 72 610T97 610T131 610T170 611T215 611T264 611H476Q478 609 483 606T489 602T493 598T496 593T497 586T498 576T498 562V526V488Q498 452 480 444Q476 442 456 442Q431 442 423 450Q416 457 415 463T414 501V535H304V76H374Q389 67 392 61T396 38Q396 10 374 1H151Q140 5 135 11T130 21T129 38\",933:\"38 494Q38 549 74 585T152 621Q168 621 179 619T209 606T241 566T262 492Q262 494 265 507T270 526T276 547T285 569T298 589T315 606T337 617T365 622Q416 622 451 584T486 494Q486 470 469 461Q464 459 445 459H437Q416 459 406 476Q404 479 403 502T393 541T365 558Q350 558 340 548T323 519T312 475T307 419T305 354T304 282Q304 254 304 239V76H358Q372 67 376 60T380 38Q380 10 358 1H167Q145 9 145 32V38Q145 54 148 60T167 76H220V239Q220 256 220 289T220 338T219 383T217 426T214 463T209 497T201 522T189 543T174 555Q168 558 159 558Q139 558 131 541T121 502T118 476Q108 459 84 459H79H71Q38 459 38 494\",934:\"139 573V578Q139 603 161 610H166Q172 610 182 610T204 610T232 611T264 611H364Q379 602 382 595T385 573Q385 544 364 536L334 535H304V441H306Q313 440 325 438T367 426T421 403T464 364T483 306Q483 251 430 216T317 172Q315 172 313 172T308 170H306H304V76H364Q379 67 382 60T385 38Q385 28 385 24T379 12T364 1H161Q139 8 139 33V38Q139 46 139 49T141 58T148 68T161 76H220V170H218Q211 171 199 173T157 185T103 208T60 248T41 306Q41 361 94 396T208 439Q210 439 212 439T216 440L218 441H220V535H190L161 536Q139 543 139 573ZM124 306Q124 286 147 271T194 252L218 247Q220 247 220 306V364H218Q212 364 192 359T148 340T124 306ZM400 305Q400 325 377 340T330 360L306 364Q304 364 304 306Q304 247 306 247Q312 247 332 252T376 271T400 305\",935:\"39 571Q39 597 49 604T93 611H141H218Q233 602 236 595T239 573Q239 538 210 535Q202 535 202 534T215 507T243 454L257 428L307 535H298Q266 538 266 573Q266 584 267 588T273 598T289 611H366H401Q442 611 454 605T466 573Q466 546 448 538Q442 535 421 535H398L299 327Q299 323 362 201L426 77L449 76Q467 76 475 75T489 65T495 38Q495 11 477 3Q473 1 395 1H317Q295 8 295 38Q295 73 325 76L334 77Q333 78 314 117T276 196L257 235L239 196Q221 157 204 118T186 77Q190 76 196 76Q211 74 218 67T227 55T228 38Q228 28 227 24T221 13T206 1H50Q28 9 28 32V38Q28 63 45 73Q51 76 73 76H96L214 324Q215 327 162 431L108 535H85H79Q67 535 60 536T46 546T39 571\",936:\"37 439Q38 451 40 457T52 469T77 475H79Q96 475 107 473T132 456T152 411Q152 409 153 396T154 372V365Q154 291 198 261Q215 251 219 251Q220 251 220 393V535H193L167 536Q145 545 145 567V573Q145 602 167 610Q168 611 264 611H358Q372 602 376 595T380 573Q380 545 358 536L331 535H304V393Q304 251 305 251Q307 251 310 252T323 259T339 272T355 295T367 331Q368 337 370 372Q370 382 371 395T372 411Q376 434 384 448T404 467T425 474T447 475Q461 474 467 473T480 463T487 437Q487 419 481 412Q476 403 459 398Q457 390 453 344T431 263Q415 228 383 205T332 177T306 172H304V76H358Q372 67 376 60T380 38Q380 10 358 1H167Q145 9 145 32V38Q145 54 148 60T167 76H220V172H218Q211 172 192 177T141 205T93 263Q74 298 71 343T67 391L66 398Q47 403 42 411T37 433V439\",937:\"40 404Q40 498 106 560T258 622Q357 622 420 558T484 406Q484 359 469 311T428 205T392 117Q382 84 382 78Q382 76 402 76H421V87Q421 110 431 116T457 123Q474 123 483 114Q490 107 491 100T492 61V42Q492 11 474 3Q470 1 397 1H324Q302 9 302 32V39Q302 104 351 225T400 405Q400 462 361 504T262 546Q200 546 162 504T124 405Q124 346 171 230T223 42V36Q223 11 205 3Q201 1 128 1H55Q39 7 33 23L32 60V80Q32 94 34 102T44 116T68 123Q103 123 103 87V76H123Q142 76 142 78Q142 100 117 156T66 282T40 404\",8215:\"57 -60Q57 -33 86 -25H438Q468 -34 468 -60T438 -95H86Q57 -86 57 -60\",8242:\"211 572Q211 593 226 608T262 623Q281 623 297 610T313 573Q313 561 307 465Q301 370 299 357T284 336Q279 334 262 334Q240 334 231 343Q226 350 225 362T217 465Q211 549 211 572\",8260:\"94 -83Q78 -83 68 -73T58 -48Q58 -44 60 -36Q62 -31 227 314T399 673Q410 694 431 694Q445 694 455 684T466 659Q466 656 464 648Q463 643 298 298T125 -62Q114 -83 94 -83\",8710:\"232 622H237Q242 622 249 622T264 623H293Q295 622 300 619T308 613T314 608T319 601Q322 597 405 316T489 19Q489 9 473 1Q471 0 262 0T51 1Q35 9 35 19Q35 34 118 315T205 601Q214 616 232 622ZM267 501Q266 504 265 510T263 521T261 526V523Q261 508 211 332Q142 91 138 82H386Q385 84 345 224Q281 439 267 501\"},{8243:\"\\u2032\\u2032\",8244:\"\\u2032\\u2032\\u2032\",8279:\"\\u2032\\u2032\\u2032\\u2032\"})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.monospace=void 0,e.monospace={32:[0,0,.525],33:[.622,0,.525],34:[.623,-.333,.525],35:[.611,0,.525],36:[.694,.082,.525],37:[.694,.083,.525],38:[.622,.011,.525],39:[.611,-.287,.525],40:[.694,.082,.525],41:[.694,.082,.525],42:[.52,-.09,.525],43:[.531,-.081,.525],44:[.14,.139,.525],45:[.341,-.271,.525],46:[.14,0,.525],47:[.694,.083,.525],58:[.431,0,.525],59:[.431,.139,.525],60:[.557,-.055,.525],61:[.417,-.195,.525],62:[.557,-.055,.525],63:[.617,0,.525],64:[.617,.006,.525],91:[.694,.082,.525],92:[.694,.083,.525],93:[.694,.082,.525],94:[.611,-.46,.525],95:[-.025,.095,.525],96:[.681,-.357,.525],123:[.694,.083,.525],124:[.694,.082,.525],125:[.694,.083,.525],126:[.611,-.466,.525],127:[.612,-.519,.525],160:[0,0,.525],305:[.431,0,.525],567:[.431,.228,.525],697:[.623,-.334,.525],768:[.611,-.485,0],769:[.611,-.485,0],770:[.611,-.46,0],771:[.611,-.466,0],772:[.577,-.5,0],774:[.611,-.504,0],776:[.612,-.519,0],778:[.619,-.499,0],780:[.577,-.449,0],913:[.623,0,.525],914:[.611,0,.525],915:[.611,0,.525],916:[.623,0,.525],917:[.611,0,.525],918:[.611,0,.525],919:[.611,0,.525],920:[.621,.01,.525],921:[.611,0,.525],922:[.611,0,.525],923:[.623,0,.525],924:[.611,0,.525],925:[.611,0,.525],926:[.611,0,.525],927:[.621,.01,.525],928:[.611,0,.525],929:[.611,0,.525],931:[.611,0,.525],932:[.611,0,.525],933:[.622,0,.525],934:[.611,0,.525],935:[.611,0,.525],936:[.611,0,.525],937:[.622,0,.525],8215:[-.025,.095,.525],8242:[.623,-.334,.525],8243:[.623,0,1.05],8244:[.623,0,1.575],8260:[.694,.083,.525],8279:[.623,0,2.1],8710:[.623,0,.525]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.normal=void 0;var r=Q(6),T=Q(236);e.normal=r.AddPaths(T.normal,{32:\"\",33:\"78 661Q78 682 96 699T138 716T180 700T199 661Q199 654 179 432T158 206Q156 198 139 198Q121 198 119 206Q118 209 98 431T78 661ZM79 61Q79 89 97 105T141 121Q164 119 181 104T198 61Q198 31 181 16T139 1Q114 1 97 16T79 61\",34:\"34 634Q34 659 50 676T93 694Q121 694 144 668T168 579Q168 525 146 476T101 403T73 379Q69 379 60 388T50 401Q50 404 62 417T88 448T116 500T131 572Q131 584 130 584T125 581T112 576T94 573Q69 573 52 590T34 634ZM238 634Q238 659 254 676T297 694Q325 694 348 668T372 579Q372 525 350 476T305 403T277 379Q273 379 264 388T254 401Q254 404 266 417T292 448T320 500T335 572Q335 584 334 584T329 581T316 576T298 573Q273 573 256 590T238 634\",35:\"56 347Q56 360 70 367H313L355 524Q394 676 401 686Q406 694 416 694Q434 694 436 676Q436 672 396 522Q355 374 355 369L354 367H543L585 524Q626 679 630 685Q636 694 646 694Q653 694 659 689T665 678Q665 668 626 522Q585 374 585 369L584 367H762Q777 359 777 347Q777 334 767 331T722 327H667H572L552 251L531 174Q531 173 647 173H720Q756 173 766 170T777 153T762 133H519L477 -24Q436 -179 432 -185Q426 -194 416 -194Q409 -194 403 -189T397 -177Q397 -167 436 -21Q477 125 477 131L478 133H289L247 -24Q206 -179 202 -185Q196 -194 186 -194Q179 -194 173 -189T167 -177Q167 -167 206 -21Q247 125 247 131L248 133H70Q56 140 56 153Q56 168 72 173H260L280 249L301 326Q301 327 186 327H72Q56 332 56 347ZM531 326Q531 327 437 327H342L322 251L301 174Q301 173 395 173H490L510 249L531 326\",36:\"162 187Q162 164 146 149T109 133H103V130Q108 115 115 105Q122 92 131 82T150 64T170 52T190 44T206 40T220 37L227 36V313Q190 320 162 335Q116 358 86 404T55 508Q55 567 85 614T165 685Q186 696 225 704H227V750H273V704L286 703Q369 690 413 631Q441 588 444 531Q444 514 443 509Q439 490 425 479T391 468Q368 468 353 483T337 522Q337 546 353 560T390 575L394 576V578Q386 599 372 614T342 637T314 649T288 656L273 658V408L288 405Q329 394 355 376Q396 348 420 300T444 199Q444 130 408 76T313 1Q286 -9 276 -9H273V-56H227V-10H221Q202 -6 193 -4T155 11T108 41T74 94T55 176V182Q55 227 95 238Q103 240 108 240Q129 240 145 226T162 187ZM225 657Q219 657 204 651T169 632T135 594T121 538Q121 512 131 491T156 457T187 435T213 423T227 420V539Q227 657 225 657ZM378 169Q378 230 339 265T274 301Q273 301 273 169V37Q324 50 351 87T378 169\",37:\"465 605Q428 605 394 614T340 632T319 641Q332 608 332 548Q332 458 293 403T202 347Q145 347 101 402T56 548Q56 637 101 693T202 750Q241 750 272 719Q359 642 464 642Q580 642 650 732Q662 748 668 749Q670 750 673 750Q682 750 688 743T693 726Q178 -47 170 -52Q166 -56 160 -56Q147 -56 142 -45Q137 -36 142 -27Q143 -24 363 304Q469 462 525 546T581 630Q528 605 465 605ZM207 385Q235 385 263 427T292 548Q292 617 267 664T200 712Q193 712 186 709T167 698T147 668T134 615Q132 595 132 548V527Q132 436 165 403Q183 385 203 385H207ZM500 146Q500 234 544 290T647 347Q699 347 737 292T776 146T737 0T646 -56Q590 -56 545 0T500 146ZM651 -18Q679 -18 707 24T736 146Q736 215 711 262T644 309Q637 309 630 306T611 295T591 265T578 212Q577 200 577 146V124Q577 -18 647 -18H651\",38:\"156 540Q156 620 201 668T302 716Q354 716 377 671T401 578Q401 505 287 386L274 373Q309 285 416 148L429 132L437 142Q474 191 543 309L562 341V349Q562 368 541 376T498 385H493V431H502L626 428Q709 428 721 431H727V385H712Q688 384 669 379T639 369T618 354T603 337T591 316T578 295Q537 223 506 176T464 117T454 104Q454 102 471 85T497 62Q543 24 585 24Q618 24 648 48T682 113V121H722V112Q721 94 714 75T692 32T646 -7T574 -22Q491 -19 414 42L402 51L391 42Q312 -22 224 -22Q144 -22 93 25T42 135Q42 153 46 169T55 197T74 225T96 249T125 278T156 308L195 347L190 360Q185 372 182 382T174 411T165 448T159 491T156 540ZM361 576Q361 613 348 646T305 679Q272 679 252 649T232 572Q232 497 255 426L259 411L267 420Q361 519 361 576ZM140 164Q140 103 167 64T240 24Q271 24 304 36T356 61T374 77Q295 156 235 262L220 292L210 310L193 293Q177 277 169 268T151 229T140 164\",39:\"78 634Q78 659 95 676T138 694Q166 694 189 668T212 579Q212 525 190 476T146 403T118 379Q114 379 105 388T95 401Q95 404 107 417T133 448T161 500T176 572Q176 584 175 584T170 581T157 576T139 573Q114 573 96 590T78 634\",40:\"94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250\",41:\"60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749\",42:\"215 721Q216 732 225 741T248 750Q263 750 273 742T284 721L270 571L327 613Q383 654 388 657T399 660Q412 660 423 650T435 624T424 600T376 575Q363 569 355 566L289 534L355 504L424 470Q435 462 435 447Q435 431 424 420T399 409Q393 409 388 412T327 456L270 498L277 423L284 348Q280 320 250 320T215 348L229 498L172 456Q116 415 111 412T100 409Q87 409 76 420T64 447Q64 461 75 470L144 504L210 534L144 566Q136 570 122 576Q83 593 74 600T64 624Q64 639 75 649T100 660Q106 660 111 657T172 613L229 571Q229 578 222 643T215 721\",43:\"56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250\",44:\"78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17\",45:\"11 179V252H277V179H11\",46:\"78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60\",47:\"423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750\",48:\"96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597\",49:\"213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578\",50:\"109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429\",51:\"127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463\",52:\"462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293\",53:\"164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157\",54:\"42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397\",55:\"55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458\",56:\"70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21\",57:\"352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248\",58:\"78 370Q78 394 95 412T138 430Q162 430 180 414T199 371Q199 346 182 328T139 310T96 327T78 370ZM78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60\",59:\"78 370Q78 394 95 412T138 430Q162 430 180 414T199 371Q199 346 182 328T139 310T96 327T78 370ZM78 60Q78 85 94 103T137 121Q202 121 202 8Q202 -44 183 -94T144 -169T118 -194Q115 -194 106 -186T95 -174Q94 -171 107 -155T137 -107T160 -38Q161 -32 162 -22T165 -4T165 4Q165 5 161 4T142 0Q110 0 94 18T78 60\",60:\"694 -11T694 -19T688 -33T678 -40Q671 -40 524 29T234 166L90 235Q83 240 83 250Q83 261 91 266Q664 540 678 540Q681 540 687 534T694 519T687 505Q686 504 417 376L151 250L417 124Q686 -4 687 -5Q694 -11 694 -19\",61:\"56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153\",62:\"84 520Q84 528 88 533T96 539L99 540Q106 540 253 471T544 334L687 265Q694 260 694 250T687 235Q685 233 395 96L107 -40H101Q83 -38 83 -20Q83 -19 83 -17Q82 -10 98 -1Q117 9 248 71Q326 108 378 132L626 250L378 368Q90 504 86 509Q84 513 84 520\",63:\"226 668Q190 668 162 656T124 632L114 621Q116 621 119 620T130 616T145 607T157 591T162 567Q162 544 147 529T109 514T71 528T55 566Q55 625 100 661T199 704Q201 704 210 704T224 705H228Q281 705 320 692T378 656T407 612T416 567Q416 503 361 462Q267 395 247 303Q242 279 242 241V224Q242 205 239 202T222 198T205 201T202 218V249Q204 320 220 371T255 445T292 491T315 537Q317 546 317 574V587Q317 604 315 615T304 640T277 661T226 668ZM162 61Q162 89 180 105T224 121Q247 119 264 104T281 61Q281 31 264 16T222 1Q197 1 180 16T162 61\",64:\"56 347Q56 429 86 498T164 612T270 680T386 705Q522 705 622 603T722 349Q722 126 608 126Q541 126 513 176Q512 177 512 179T510 182L509 183Q508 183 503 177T487 163T464 146T429 132T385 126Q311 126 251 186T190 347Q190 448 251 508T385 568Q426 568 460 548T509 511T531 479H555Q580 479 582 478Q586 477 587 468Q588 454 588 338V260Q588 200 593 182T619 163Q641 163 655 178T674 223T680 273T682 325V330Q682 426 647 500Q611 569 544 618T388 668Q271 668 184 577T96 347Q96 216 180 121T396 26Q421 26 446 28T493 34T535 43T573 52T605 63T629 72T647 80T657 84H716Q722 78 722 74Q722 65 675 45T547 7T392 -11Q255 -11 156 90T56 347ZM274 347Q274 266 308 214T390 162Q420 162 449 182T498 235L504 245V449L498 459Q453 532 387 532Q347 532 311 483T274 347\",65:\"255 0Q240 3 140 3Q48 3 39 0H32V46H47Q119 49 139 88Q140 91 192 245T295 553T348 708Q351 716 366 716H376Q396 715 400 709Q402 707 508 390L617 67Q624 54 636 51T687 46H717V0H708Q699 3 581 3Q458 3 437 0H427V46H440Q510 46 510 64Q510 66 486 138L462 209H229L209 150Q189 91 189 85Q189 72 209 59T259 46H264V0H255ZM447 255L345 557L244 256Q244 255 345 255H447\",66:\"131 622Q124 629 120 631T104 634T61 637H28V683H229H267H346Q423 683 459 678T531 651Q574 627 599 590T624 512Q624 461 583 419T476 360L466 357Q539 348 595 302T651 187Q651 119 600 67T469 3Q456 1 242 0H28V46H61Q103 47 112 49T131 61V622ZM511 513Q511 560 485 594T416 636Q415 636 403 636T371 636T333 637Q266 637 251 636T232 628Q229 624 229 499V374H312L396 375L406 377Q410 378 417 380T442 393T474 417T499 456T511 513ZM537 188Q537 239 509 282T430 336L329 337H229V200V116Q229 57 234 52Q240 47 334 47H383Q425 47 443 53Q486 67 511 104T537 188\",67:\"56 342Q56 428 89 500T174 615T283 681T391 705Q394 705 400 705T408 704Q499 704 569 636L582 624L612 663Q639 700 643 704Q644 704 647 704T653 705H657Q660 705 666 699V419L660 413H626Q620 419 619 430Q610 512 571 572T476 651Q457 658 426 658Q322 658 252 588Q173 509 173 342Q173 221 211 151Q232 111 263 84T328 45T384 29T428 24Q517 24 571 93T626 244Q626 251 632 257H660L666 251V236Q661 133 590 56T403 -21Q262 -21 159 83T56 342\",68:\"130 622Q123 629 119 631T103 634T60 637H27V683H228Q399 682 419 682T461 676Q504 667 546 641T626 573T685 470T708 336Q708 210 634 116T442 3Q429 1 228 0H27V46H60Q102 47 111 49T130 61V622ZM593 338Q593 439 571 501T493 602Q439 637 355 637H322H294Q238 637 234 628Q231 624 231 344Q231 62 232 59Q233 49 248 48T339 46H350Q456 46 515 95Q561 133 577 191T593 338\",69:\"128 619Q121 626 117 628T101 631T58 634H25V680H597V676Q599 670 611 560T625 444V440H585V444Q584 447 582 465Q578 500 570 526T553 571T528 601T498 619T457 629T411 633T353 634Q266 634 251 633T233 622Q233 622 233 621Q232 619 232 497V376H286Q359 378 377 385Q413 401 416 469Q416 471 416 473V493H456V213H416V233Q415 268 408 288T383 317T349 328T297 330Q290 330 286 330H232V196V114Q232 57 237 52Q243 47 289 47H340H391Q428 47 452 50T505 62T552 92T584 146Q594 172 599 200T607 247T612 270V273H652V270Q651 267 632 137T610 3V0H25V46H58Q100 47 109 49T128 61V619\",70:\"128 619Q121 626 117 628T101 631T58 634H25V680H582V676Q584 670 596 560T610 444V440H570V444Q563 493 561 501Q555 538 543 563T516 601T477 622T431 631T374 633H334H286Q252 633 244 631T233 621Q232 619 232 490V363H284Q287 363 303 363T327 364T349 367T372 373T389 385Q407 403 410 459V480H450V200H410V221Q407 276 389 296Q381 303 371 307T348 313T327 316T303 317T284 317H232V189L233 61Q240 54 245 52T270 48T333 46H360V0H348Q324 3 182 3Q51 3 36 0H25V46H58Q100 47 109 49T128 61V619\",71:\"56 342Q56 428 89 500T174 615T283 681T391 705Q394 705 400 705T408 704Q499 704 569 636L582 624L612 663Q639 700 643 704Q644 704 647 704T653 705H657Q660 705 666 699V419L660 413H626Q620 419 619 430Q610 512 571 572T476 651Q457 658 426 658Q401 658 376 654T316 633T254 592T205 519T177 411Q173 369 173 335Q173 259 192 201T238 111T302 58T370 31T431 24Q478 24 513 45T559 100Q562 110 562 160V212Q561 213 557 216T551 220T542 223T526 225T502 226T463 227H437V273H449L609 270Q715 270 727 273H735V227H721Q674 227 668 215Q666 211 666 108V6Q660 0 657 0Q653 0 639 10Q617 25 600 42L587 54Q571 27 524 3T406 -22Q317 -22 238 22T108 151T56 342\",72:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H302Q262 636 251 634T233 622L232 500V378H517V622Q510 629 506 631T490 634T447 637H414V683H425Q446 680 569 680Q704 680 713 683H724V637H691Q651 636 640 634T622 622V61Q628 51 639 49T691 46H724V0H713Q692 3 569 3Q434 3 425 0H414V46H447Q489 47 498 49T517 61V332H232V197L233 61Q239 51 250 49T302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622\",73:\"328 0Q307 3 180 3T32 0H21V46H43Q92 46 106 49T126 60Q128 63 128 342Q128 620 126 623Q122 628 118 630T96 635T43 637H21V683H32Q53 680 180 680T328 683H339V637H317Q268 637 254 634T234 623Q232 620 232 342Q232 63 234 60Q238 55 242 53T264 48T317 46H339V0H328\",74:\"89 177Q115 177 133 160T152 112Q152 88 137 72T102 52Q99 51 101 49Q106 43 129 29Q159 15 190 15Q232 15 256 48T286 126Q286 127 286 142T286 183T286 238T287 306T287 378Q287 403 287 429T287 479T287 524T286 563T286 593T286 614V621Q281 630 263 633T182 637H154V683H166Q187 680 332 680Q439 680 457 683H465V637H449Q422 637 401 634Q393 631 389 623Q388 621 388 376T387 123Q377 61 322 20T194 -22Q188 -22 177 -21T160 -20Q96 -9 61 29T25 110Q25 144 44 160T89 177\",75:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H313Q235 637 233 620Q232 618 232 462L233 307L379 449Q425 494 479 546Q518 584 524 591T531 607V608Q531 630 503 636Q501 636 498 636T493 637H489V683H499Q517 680 630 680Q704 680 716 683H722V637H708Q633 633 589 597Q584 592 495 506T406 419T515 254T631 80Q644 60 662 54T715 46H736V0H728Q719 3 615 3Q493 3 472 0H461V46H469Q515 46 515 72Q515 78 512 84L336 351Q332 348 278 296L232 251V156Q232 62 235 58Q243 47 302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622\",76:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q48 680 182 680Q324 680 348 683H360V637H333Q273 637 258 635T233 622L232 342V129Q232 57 237 52Q243 47 313 47Q384 47 410 53Q470 70 498 110T536 221Q536 226 537 238T540 261T542 272T562 273H582V268Q580 265 568 137T554 5V0H25V46H58Q100 47 109 49T128 61V622\",77:\"132 622Q125 629 121 631T105 634T62 637H29V683H135Q221 683 232 682T249 675Q250 674 354 398L458 124L562 398Q666 674 668 675Q671 681 683 682T781 683H887V637H854Q814 636 803 634T785 622V61Q791 51 802 49T854 46H887V0H876Q855 3 736 3Q605 3 596 0H585V46H618Q660 47 669 49T688 61V347Q688 424 688 461T688 546T688 613L687 632Q454 14 450 7Q446 1 430 1T410 7Q409 9 292 316L176 624V606Q175 588 175 543T175 463T175 356L176 86Q187 50 261 46H278V0H269Q254 3 154 3Q52 3 37 0H29V46H46Q78 48 98 56T122 69T132 86V622\",78:\"42 46Q74 48 94 56T118 69T128 86V634H124Q114 637 52 637H25V683H232L235 680Q237 679 322 554T493 303L578 178V598Q572 608 568 613T544 627T492 637H475V683H483Q498 680 600 680Q706 680 715 683H724V637H707Q634 633 622 598L621 302V6L614 0H600Q585 0 582 3T481 150T282 443T171 605V345L172 86Q183 50 257 46H274V0H265Q250 3 150 3Q48 3 33 0H25V46H42\",79:\"56 340Q56 423 86 494T164 610T270 680T388 705Q521 705 621 601T722 341Q722 260 693 191T617 75T510 4T388 -22T267 3T160 74T85 189T56 340ZM467 647Q426 665 388 665Q360 665 331 654T269 620T213 549T179 439Q174 411 174 354Q174 144 277 61Q327 20 385 20H389H391Q474 20 537 99Q603 188 603 354Q603 411 598 439Q577 592 467 647\",80:\"130 622Q123 629 119 631T103 634T60 637H27V683H214Q237 683 276 683T331 684Q419 684 471 671T567 616Q624 563 624 489Q624 421 573 372T451 307Q429 302 328 301H234V181Q234 62 237 58Q245 47 304 46H337V0H326Q305 3 182 3Q47 3 38 0H27V46H60Q102 47 111 49T130 61V622ZM507 488Q507 514 506 528T500 564T483 597T450 620T397 635Q385 637 307 637H286Q237 637 234 628Q231 624 231 483V342H302H339Q390 342 423 349T481 382Q507 411 507 488\",81:\"56 341Q56 499 157 602T388 705Q521 705 621 601T722 341Q722 275 703 218T660 127T603 63T555 25T525 9Q524 8 524 8H523Q524 5 526 -1T537 -21T555 -47T581 -67T615 -76Q653 -76 678 -56T706 -3Q707 10 716 10Q721 10 728 5L727 -13Q727 -88 697 -140T606 -193Q563 -193 538 -166T498 -83Q483 -23 483 -8L471 -11Q459 -14 435 -18T388 -22Q254 -22 155 81T56 341ZM607 339Q607 429 586 496T531 598T461 649T390 665T318 649T248 598T192 496T170 339Q170 143 277 57Q301 39 305 39L304 42Q304 44 304 46Q301 53 301 68Q301 101 325 128T391 155Q454 155 495 70L501 58Q549 91 578 164Q607 234 607 339ZM385 18Q404 18 425 23T459 33T472 40Q471 47 468 57T449 88T412 115Q398 117 386 117Q367 117 353 102T338 67Q338 48 351 33T385 18\",82:\"130 622Q123 629 119 631T103 634T60 637H27V683H202H236H300Q376 683 417 677T500 648Q595 600 609 517Q610 512 610 501Q610 468 594 439T556 392T511 361T472 343L456 338Q459 335 467 332Q497 316 516 298T545 254T559 211T568 155T578 94Q588 46 602 31T640 16H645Q660 16 674 32T692 87Q692 98 696 101T712 105T728 103T732 90Q732 59 716 27T672 -16Q656 -22 630 -22Q481 -16 458 90Q456 101 456 163T449 246Q430 304 373 320L363 322L297 323H231V192L232 61Q238 51 249 49T301 46H334V0H323Q302 3 181 3Q59 3 38 0H27V46H60Q102 47 111 49T130 61V622ZM491 499V509Q491 527 490 539T481 570T462 601T424 623T362 636Q360 636 340 636T304 637H283Q238 637 234 628Q231 624 231 492V360H289Q390 360 434 378T489 456Q491 467 491 499\",83:\"55 507Q55 590 112 647T243 704H257Q342 704 405 641L426 672Q431 679 436 687T446 700L449 704Q450 704 453 704T459 705H463Q466 705 472 699V462L466 456H448Q437 456 435 459T430 479Q413 605 329 646Q292 662 254 662Q201 662 168 626T135 542Q135 508 152 480T200 435Q210 431 286 412T370 389Q427 367 463 314T500 191Q500 110 448 45T301 -21Q245 -21 201 -4T140 27L122 41Q118 36 107 21T87 -7T78 -21Q76 -22 68 -22H64Q61 -22 55 -16V101Q55 220 56 222Q58 227 76 227H89Q95 221 95 214Q95 182 105 151T139 90T205 42T305 24Q352 24 386 62T420 155Q420 198 398 233T340 281Q284 295 266 300Q261 301 239 306T206 314T174 325T141 343T112 367T85 402Q55 451 55 507\",84:\"36 443Q37 448 46 558T55 671V677H666V671Q667 666 676 556T685 443V437H645V443Q645 445 642 478T631 544T610 593Q593 614 555 625Q534 630 478 630H451H443Q417 630 414 618Q413 616 413 339V63Q420 53 439 50T528 46H558V0H545L361 3Q186 1 177 0H164V46H194Q264 46 283 49T309 63V339V550Q309 620 304 625T271 630H244H224Q154 630 119 601Q101 585 93 554T81 486T76 443V437H36V443\",85:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H302Q262 636 251 634T233 622L232 418V291Q232 189 240 145T280 67Q325 24 389 24Q454 24 506 64T571 183Q575 206 575 410V598Q569 608 565 613T541 627T489 637H472V683H481Q496 680 598 680T715 683H724V637H707Q634 633 622 598L621 399Q620 194 617 180Q617 179 615 171Q595 83 531 31T389 -22Q304 -22 226 33T130 192Q129 201 128 412V622\",86:\"114 620Q113 621 110 624T107 627T103 630T98 632T91 634T80 635T67 636T48 637H19V683H28Q46 680 152 680Q273 680 294 683H305V637H284Q223 634 223 620Q223 618 313 372T404 126L490 358Q575 588 575 597Q575 616 554 626T508 637H503V683H512Q527 680 627 680Q718 680 724 683H730V637H723Q648 637 627 596Q627 595 515 291T401 -14Q396 -22 382 -22H374H367Q353 -22 348 -14Q346 -12 231 303Q114 617 114 620\",87:\"792 683Q810 680 914 680Q991 680 1003 683H1009V637H996Q931 633 915 598Q912 591 863 438T766 135T716 -17Q711 -22 694 -22Q676 -22 673 -15Q671 -13 593 231L514 477L435 234Q416 174 391 92T358 -6T341 -22H331Q314 -21 310 -15Q309 -14 208 302T104 622Q98 632 87 633Q73 637 35 637H18V683H27Q69 681 154 681Q164 681 181 681T216 681T249 682T276 683H287H298V637H285Q213 637 213 620Q213 616 289 381L364 144L427 339Q490 535 492 546Q487 560 482 578T475 602T468 618T461 628T449 633T433 636T408 637H380V683H388Q397 680 508 680Q629 680 650 683H660V637H647Q576 637 576 619L727 146Q869 580 869 600Q869 605 863 612T839 627T794 637H783V683H792\",88:\"270 0Q252 3 141 3Q46 3 31 0H23V46H40Q129 50 161 88Q165 94 244 216T324 339Q324 341 235 480T143 622Q133 631 119 634T57 637H37V683H46Q64 680 172 680Q297 680 318 683H329V637H324Q307 637 286 632T263 621Q263 618 322 525T384 431Q385 431 437 511T489 593Q490 595 490 599Q490 611 477 622T436 637H428V683H437Q455 680 566 680Q661 680 676 683H684V637H667Q585 634 551 599Q548 596 478 491Q412 388 412 387Q412 385 514 225T620 62Q628 53 642 50T695 46H726V0H717Q699 3 591 3Q466 3 445 0H434V46H440Q454 46 476 51T499 64Q499 67 463 124T390 238L353 295L350 292Q348 290 343 283T331 265T312 236T286 195Q219 88 218 84Q218 70 234 59T272 46H280V0H270\",89:\"518 0Q497 3 374 3Q253 3 232 0H221V46H254Q313 47 321 58Q324 62 324 167V273L221 446Q117 620 114 623Q106 631 91 634T31 637H11V683H20Q29 680 148 680Q273 680 294 683H305V637H287Q239 636 236 621Q236 619 321 475L407 332L483 460Q502 492 527 534Q563 594 563 604Q563 632 517 637H508V683H517H525Q533 683 545 683T571 682T600 681T626 681Q695 681 731 683H738V637H723Q640 633 613 588Q612 587 517 427L425 273V169V95Q425 66 428 59T444 49Q459 46 506 46H528V0H518\",90:\"69 443Q69 452 74 554T80 683H549Q555 677 555 664Q555 649 554 648Q552 645 366 348T179 50T192 49T263 49H275H302Q333 49 353 50T401 59T447 78T482 115T507 173Q513 200 520 273V282H560V274Q560 272 552 143T543 8V0H302L61 1L58 3Q55 8 55 21V35Q59 43 153 193T340 489T432 637H343Q259 637 214 625T141 573Q109 523 109 445Q109 443 89 443H69\",91:\"118 -250V750H255V710H158V-210H255V-250H118\",92:\"56 731Q56 740 62 745T75 750Q85 750 92 740Q96 733 270 255T444 -231Q444 -239 438 -244T424 -250Q414 -250 407 -240Q404 -236 230 242T56 731\",93:\"22 710V750H159V-250H22V-210H119V710H22\",94:\"112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560\",95:\"0 -62V-25H499V-62H0\",96:\"106 655Q106 671 119 685T150 699Q166 699 177 688Q190 671 222 629T275 561T295 533T282 519L267 505L196 563Q119 626 113 634Q106 643 106 655\",97:\"137 305T115 305T78 320T63 359Q63 394 97 421T218 448Q291 448 336 416T396 340Q401 326 401 309T402 194V124Q402 76 407 58T428 40Q443 40 448 56T453 109V145H493V106Q492 66 490 59Q481 29 455 12T400 -6T353 12T329 54V58L327 55Q325 52 322 49T314 40T302 29T287 17T269 6T247 -2T221 -8T190 -11Q130 -11 82 20T34 107Q34 128 41 147T68 188T116 225T194 253T304 268H318V290Q318 324 312 340Q290 411 215 411Q197 411 181 410T156 406T148 403Q170 388 170 359Q170 334 154 320ZM126 106Q126 75 150 51T209 26Q247 26 276 49T315 109Q317 116 318 175Q318 233 317 233Q309 233 296 232T251 223T193 203T147 166T126 106\",98:\"307 -11Q234 -11 168 55L158 37Q156 34 153 28T147 17T143 10L138 1L118 0H98V298Q98 599 97 603Q94 622 83 628T38 637H20V660Q20 683 22 683L32 684Q42 685 61 686T98 688Q115 689 135 690T165 693T176 694H179V543Q179 391 180 391L183 394Q186 397 192 401T207 411T228 421T254 431T286 439T323 442Q401 442 461 379T522 216Q522 115 458 52T307 -11ZM182 98Q182 97 187 90T196 79T206 67T218 55T233 44T250 35T271 29T295 26Q330 26 363 46T412 113Q424 148 424 212Q424 287 412 323Q385 405 300 405Q270 405 239 390T188 347L182 339V98\",99:\"370 305T349 305T313 320T297 358Q297 381 312 396Q317 401 317 402T307 404Q281 408 258 408Q209 408 178 376Q131 329 131 219Q131 137 162 90Q203 29 272 29Q313 29 338 55T374 117Q376 125 379 127T395 129H409Q415 123 415 120Q415 116 411 104T395 71T366 33T318 2T249 -11Q163 -11 99 53T34 214Q34 318 99 383T250 448T370 421T404 357Q404 334 387 320\",100:\"376 495Q376 511 376 535T377 568Q377 613 367 624T316 637H298V660Q298 683 300 683L310 684Q320 685 339 686T376 688Q393 689 413 690T443 693T454 694H457V390Q457 84 458 81Q461 61 472 55T517 46H535V0Q533 0 459 -5T380 -11H373V44L365 37Q307 -11 235 -11Q158 -11 96 50T34 215Q34 315 97 378T244 442Q319 442 376 393V495ZM373 342Q328 405 260 405Q211 405 173 369Q146 341 139 305T131 211Q131 155 138 120T173 59Q203 26 251 26Q322 26 373 103V342\",101:\"28 218Q28 273 48 318T98 391T163 433T229 448Q282 448 320 430T378 380T406 316T415 245Q415 238 408 231H126V216Q126 68 226 36Q246 30 270 30Q312 30 342 62Q359 79 369 104L379 128Q382 131 395 131H398Q415 131 415 121Q415 117 412 108Q393 53 349 21T250 -11Q155 -11 92 58T28 218ZM333 275Q322 403 238 411H236Q228 411 220 410T195 402T166 381T143 340T127 274V267H333V275\",102:\"273 0Q255 3 146 3Q43 3 34 0H26V46H42Q70 46 91 49Q99 52 103 60Q104 62 104 224V385H33V431H104V497L105 564L107 574Q126 639 171 668T266 704Q267 704 275 704T289 705Q330 702 351 679T372 627Q372 604 358 590T321 576T284 590T270 627Q270 647 288 667H284Q280 668 273 668Q245 668 223 647T189 592Q183 572 182 497V431H293V385H185V225Q185 63 186 61T189 57T194 54T199 51T206 49T213 48T222 47T231 47T241 46T251 46H282V0H273\",103:\"329 409Q373 453 429 453Q459 453 472 434T485 396Q485 382 476 371T449 360Q416 360 412 390Q410 404 415 411Q415 412 416 414V415Q388 412 363 393Q355 388 355 386Q355 385 359 381T368 369T379 351T388 325T392 292Q392 230 343 187T222 143Q172 143 123 171Q112 153 112 133Q112 98 138 81Q147 75 155 75T227 73Q311 72 335 67Q396 58 431 26Q470 -13 470 -72Q470 -139 392 -175Q332 -206 250 -206Q167 -206 107 -175Q29 -140 29 -75Q29 -39 50 -15T92 18L103 24Q67 55 67 108Q67 155 96 193Q52 237 52 292Q52 355 102 398T223 442Q274 442 318 416L329 409ZM299 343Q294 371 273 387T221 404Q192 404 171 388T145 343Q142 326 142 292Q142 248 149 227T179 192Q196 182 222 182Q244 182 260 189T283 207T294 227T299 242Q302 258 302 292T299 343ZM403 -75Q403 -50 389 -34T348 -11T299 -2T245 0H218Q151 0 138 -6Q118 -15 107 -34T95 -74Q95 -84 101 -97T122 -127T170 -155T250 -167Q319 -167 361 -139T403 -75\",104:\"41 46H55Q94 46 102 60V68Q102 77 102 91T102 124T102 167T103 217T103 272T103 329Q103 366 103 407T103 482T102 542T102 586T102 603Q99 622 88 628T43 637H25V660Q25 683 27 683L37 684Q47 685 66 686T103 688Q120 689 140 690T170 693T181 694H184V367Q244 442 328 442Q451 442 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41\",105:\"69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247\",106:\"98 609Q98 637 116 653T160 669Q183 667 200 652T217 609Q217 579 200 564T158 549Q133 549 116 564T98 609ZM28 -163Q58 -168 64 -168Q124 -168 135 -77Q137 -65 137 141T136 353Q132 371 120 377T72 385H52V408Q52 431 54 431L58 432Q62 432 70 432T87 433T108 434T133 436Q151 437 171 438T202 441T214 442H218V184Q217 -36 217 -59T211 -98Q195 -145 153 -175T58 -205Q9 -205 -23 -179T-55 -117Q-55 -94 -40 -79T-2 -64T36 -79T52 -118Q52 -143 28 -163\",107:\"36 46H50Q89 46 97 60V68Q97 77 97 91T97 124T98 167T98 217T98 272T98 329Q98 366 98 407T98 482T98 542T97 586T97 603Q94 622 83 628T38 637H20V660Q20 683 22 683L32 684Q42 685 61 686T98 688Q115 689 135 690T165 693T176 694H179V463L180 233L240 287Q300 341 304 347Q310 356 310 364Q310 383 289 385H284V431H293Q308 428 412 428Q475 428 484 431H489V385H476Q407 380 360 341Q286 278 286 274Q286 273 349 181T420 79Q434 60 451 53T500 46H511V0H505Q496 3 418 3Q322 3 307 0H299V46H306Q330 48 330 65Q330 72 326 79Q323 84 276 153T228 222L176 176V120V84Q176 65 178 59T189 49Q210 46 238 46H254V0H246Q231 3 137 3T28 0H20V46H36\",108:\"42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42\",109:\"41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41\",110:\"41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q450 438 463 329Q464 322 464 190V104Q464 66 466 59T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41\",111:\"28 214Q28 309 93 378T250 448Q340 448 405 380T471 215Q471 120 407 55T250 -10Q153 -10 91 57T28 214ZM250 30Q372 30 372 193V225V250Q372 272 371 288T364 326T348 362T317 390T268 410Q263 411 252 411Q222 411 195 399Q152 377 139 338T126 246V226Q126 130 145 91Q177 30 250 30\",112:\"36 -148H50Q89 -148 97 -134V-126Q97 -119 97 -107T97 -77T98 -38T98 6T98 55T98 106Q98 140 98 177T98 243T98 296T97 335T97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 61 434T98 436Q115 437 135 438T165 441T176 442H179V416L180 390L188 397Q247 441 326 441Q407 441 464 377T522 216Q522 115 457 52T310 -11Q242 -11 190 33L182 40V-45V-101Q182 -128 184 -134T195 -145Q216 -148 244 -148H260V-194H252L228 -193Q205 -192 178 -192T140 -191Q37 -191 28 -194H20V-148H36ZM424 218Q424 292 390 347T305 402Q234 402 182 337V98Q222 26 294 26Q345 26 384 80T424 218\",113:\"33 218Q33 308 95 374T236 441H246Q330 441 381 372L387 364Q388 364 404 403L420 442H457V156Q457 -132 458 -134Q462 -142 470 -145Q491 -148 519 -148H535V-194H527L504 -193Q480 -192 453 -192T415 -191Q312 -191 303 -194H295V-148H311Q339 -148 360 -145Q369 -141 371 -135T373 -106V-41V49Q313 -11 236 -11Q154 -11 94 53T33 218ZM376 300Q346 389 278 401Q275 401 269 401T261 402Q211 400 171 350T131 214Q131 137 165 82T253 27Q296 27 328 54T376 118V300\",114:\"36 46H50Q89 46 97 60V68Q97 77 97 91T98 122T98 161T98 203Q98 234 98 269T98 328L97 351Q94 370 83 376T38 385H20V408Q20 431 22 431L32 432Q42 433 60 434T96 436Q112 437 131 438T160 441T171 442H174V373Q213 441 271 441H277Q322 441 343 419T364 373Q364 352 351 337T313 322Q288 322 276 338T263 372Q263 381 265 388T270 400T273 405Q271 407 250 401Q234 393 226 386Q179 341 179 207V154Q179 141 179 127T179 101T180 81T180 66V61Q181 59 183 57T188 54T193 51T200 49T207 48T216 47T225 47T235 46T245 46H276V0H267Q249 3 140 3Q37 3 28 0H20V46H36\",115:\"295 316Q295 356 268 385T190 414Q154 414 128 401Q98 382 98 349Q97 344 98 336T114 312T157 287Q175 282 201 278T245 269T277 256Q294 248 310 236T342 195T359 133Q359 71 321 31T198 -10H190Q138 -10 94 26L86 19L77 10Q71 4 65 -1L54 -11H46H42Q39 -11 33 -5V74V132Q33 153 35 157T45 162H54Q66 162 70 158T75 146T82 119T101 77Q136 26 198 26Q295 26 295 104Q295 133 277 151Q257 175 194 187T111 210Q75 227 54 256T33 318Q33 357 50 384T93 424T143 442T187 447H198Q238 447 268 432L283 424L292 431Q302 440 314 448H322H326Q329 448 335 442V310L329 304H301Q295 310 295 316\",116:\"27 422Q80 426 109 478T141 600V615H181V431H316V385H181V241Q182 116 182 100T189 68Q203 29 238 29Q282 29 292 100Q293 108 293 146V181H333V146V134Q333 57 291 17Q264 -10 221 -10Q187 -10 162 2T124 33T105 68T98 100Q97 107 97 248V385H18V422H27\",117:\"383 58Q327 -10 256 -10H249Q124 -10 105 89Q104 96 103 226Q102 335 102 348T96 369Q86 385 36 385H25V408Q25 431 27 431L38 432Q48 433 67 434T105 436Q122 437 142 438T172 441T184 442H187V261Q188 77 190 64Q193 49 204 40Q224 26 264 26Q290 26 311 35T343 58T363 90T375 120T379 144Q379 145 379 161T380 201T380 248V315Q380 361 370 372T320 385H302V431Q304 431 378 436T457 442H464V264Q464 84 465 81Q468 61 479 55T524 46H542V0Q540 0 467 -5T390 -11H383V58\",118:\"338 431Q344 429 422 429Q479 429 503 431H508V385H497Q439 381 423 345Q421 341 356 172T288 -2Q283 -11 263 -11Q244 -11 239 -2Q99 359 98 364Q93 378 82 381T43 385H19V431H25L33 430Q41 430 53 430T79 430T104 429T122 428Q217 428 232 431H240V385H226Q187 384 184 370Q184 366 235 234L286 102L377 341V349Q377 363 367 372T349 383T335 385H331V431H338\",119:\"90 368Q84 378 76 380T40 385H18V431H24L43 430Q62 430 84 429T116 428Q206 428 221 431H229V385H215Q177 383 177 368Q177 367 221 239L265 113L339 328L333 345Q323 374 316 379Q308 384 278 385H258V431H264Q270 428 348 428Q439 428 454 431H461V385H452Q404 385 404 369Q404 366 418 324T449 234T481 143L496 100L537 219Q579 341 579 347Q579 363 564 373T530 385H522V431H529Q541 428 624 428Q692 428 698 431H703V385H697Q696 385 691 385T682 384Q635 377 619 334L559 161Q546 124 528 71Q508 12 503 1T487 -11H479Q460 -11 456 -4Q455 -3 407 133L361 267Q359 263 266 -4Q261 -11 243 -11H238Q225 -11 220 -3L90 368\",120:\"201 0Q189 3 102 3Q26 3 17 0H11V46H25Q48 47 67 52T96 61T121 78T139 96T160 122T180 150L226 210L168 288Q159 301 149 315T133 336T122 351T113 363T107 370T100 376T94 379T88 381T80 383Q74 383 44 385H16V431H23Q59 429 126 429Q219 429 229 431H237V385Q201 381 201 369Q201 367 211 353T239 315T268 274L272 270L297 304Q329 345 329 358Q329 364 327 369T322 376T317 380T310 384L307 385H302V431H309Q324 428 408 428Q487 428 493 431H499V385H492Q443 385 411 368Q394 360 377 341T312 257L296 236L358 151Q424 61 429 57T446 50Q464 46 499 46H516V0H510H502Q494 1 482 1T457 2T432 2T414 3Q403 3 377 3T327 1L304 0H295V46H298Q309 46 320 51T331 63Q331 65 291 120L250 175Q249 174 219 133T185 88Q181 83 181 74Q181 63 188 55T206 46Q208 46 208 23V0H201\",121:\"69 -66Q91 -66 104 -80T118 -116Q118 -134 109 -145T91 -160Q84 -163 97 -166Q104 -168 111 -168Q131 -168 148 -159T175 -138T197 -106T213 -75T225 -43L242 0L170 183Q150 233 125 297Q101 358 96 368T80 381Q79 382 78 382Q66 385 34 385H19V431H26L46 430Q65 430 88 429T122 428Q129 428 142 428T171 429T200 430T224 430L233 431H241V385H232Q183 385 185 366L286 112Q286 113 332 227L376 341V350Q376 365 366 373T348 383T334 385H331V431H337H344Q351 431 361 431T382 430T405 429T422 429Q477 429 503 431H508V385H497Q441 380 422 345Q420 343 378 235T289 9T227 -131Q180 -204 113 -204Q69 -204 44 -177T19 -116Q19 -89 35 -78T69 -66\",122:\"42 263Q44 270 48 345T53 423V431H393Q399 425 399 415Q399 403 398 402L381 378Q364 355 331 309T265 220L134 41L182 40H206Q254 40 283 46T331 77Q352 105 359 185L361 201Q361 202 381 202H401V196Q401 195 393 103T384 6V0H209L34 1L31 3Q28 8 28 17Q28 30 29 31T160 210T294 394H236Q169 393 152 388Q127 382 113 367Q89 344 82 264V255H42V263\",123:\"434 -231Q434 -244 428 -250H410Q281 -250 230 -184Q225 -177 222 -172T217 -161T213 -148T211 -133T210 -111T209 -84T209 -47T209 0Q209 21 209 53Q208 142 204 153Q203 154 203 155Q189 191 153 211T82 231Q71 231 68 234T65 250T68 266T82 269Q116 269 152 289T203 345Q208 356 208 377T209 529V579Q209 634 215 656T244 698Q270 724 324 740Q361 748 377 749Q379 749 390 749T408 750H428Q434 744 434 732Q434 719 431 716Q429 713 415 713Q362 710 332 689T296 647Q291 634 291 499V417Q291 370 288 353T271 314Q240 271 184 255L170 250L184 245Q202 239 220 230T262 196T290 137Q291 131 291 1Q291 -134 296 -147Q306 -174 339 -192T415 -213Q429 -213 431 -216Q434 -219 434 -231\",124:\"139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139\",125:\"65 731Q65 745 68 747T88 750Q171 750 216 725T279 670Q288 649 289 635T291 501Q292 362 293 357Q306 312 345 291T417 269Q428 269 431 266T434 250T431 234T417 231Q380 231 345 210T298 157Q293 143 292 121T291 -28V-79Q291 -134 285 -156T256 -198Q202 -250 89 -250Q71 -250 68 -247T65 -230Q65 -224 65 -223T66 -218T69 -214T77 -213Q91 -213 108 -210T146 -200T183 -177T207 -139Q208 -134 209 3L210 139Q223 196 280 230Q315 247 330 250Q305 257 280 270Q225 304 212 352L210 362L209 498Q208 635 207 640Q195 680 154 696T77 713Q68 713 67 716T65 731\",126:\"179 251Q164 251 151 245T131 234T111 215L97 227L83 238Q83 239 95 253T121 283T142 304Q165 318 187 318T253 300T320 282Q335 282 348 288T368 299T388 318L402 306L416 295Q375 236 344 222Q330 215 313 215Q292 215 248 233T179 251\",160:\"\",163:\"699 578Q699 473 635 473Q597 473 595 508Q595 559 654 569V576Q654 619 637 648T581 677Q545 677 513 647T463 561Q460 554 437 464T414 371Q414 370 458 370H502Q508 364 508 362Q505 334 495 324H402L382 241Q377 224 373 206T366 180T361 163T358 151T354 142T350 133T344 120Q340 112 338 107T336 101L354 90Q398 63 422 54T476 44Q515 44 539 73T574 133Q578 144 580 146T598 148Q622 148 622 139Q622 138 620 130Q602 74 555 32T447 -11Q395 -11 317 38L294 51Q271 28 233 9T155 -10Q117 -10 103 5T88 39Q88 73 126 106T224 139Q236 139 247 138T266 134L273 132Q275 132 302 239L323 324H259Q253 330 253 332Q253 350 265 370H300L334 371L355 453Q356 457 360 477T366 501T372 522T379 545T387 565T397 587T409 606T425 627Q453 664 497 689T583 714Q640 714 669 676T699 578ZM245 76Q211 85 195 85Q173 85 158 71T142 42Q142 26 160 26H163Q211 30 245 76\",165:\"515 0Q494 3 374 3Q256 3 235 0H224V46H257Q316 47 324 58Q327 62 327 137V213H133Q121 213 113 213T97 213T86 213T78 213T73 214T70 215T69 216T68 218T67 220Q64 225 66 231T73 240Q76 242 202 242H327V273L247 407H115Q81 407 75 408T67 414Q64 419 66 425T73 434Q76 436 153 436Q228 436 228 437Q227 440 173 530T115 623Q101 637 31 637H11V683H20Q66 681 153 681Q169 681 202 681T262 682L288 683H298V637H280Q230 636 230 621Q230 619 250 584Q255 576 264 561T286 526T305 494L340 437L403 436H467L513 514Q564 596 564 605Q564 608 560 616Q550 634 517 637H508V683H516Q531 680 633 680Q722 680 731 683H738V637H723Q644 632 617 595Q614 591 568 515T521 437T597 436T676 434Q681 432 683 426T682 414T671 409T589 407H503L422 273V242H547Q673 242 676 240Q681 238 683 232T682 220Q682 219 682 218T681 217T679 216T677 215T672 214T664 213T652 213T637 213T616 213H422V139V87Q422 64 425 58T441 49Q456 46 503 46H525V0H515ZM449 406Q449 407 403 407Q358 407 358 406L370 387Q381 368 392 350L404 331Q447 404 449 406\",168:\"95 612Q95 633 112 651T153 669T193 652T210 612Q210 588 194 571T152 554L127 560Q95 577 95 612ZM289 611Q289 634 304 649T335 668Q336 668 340 668T346 669Q369 669 386 652T404 612T387 572T346 554Q323 554 306 570T289 611\",172:\"56 323T56 336T70 356H596Q603 353 611 343V102Q598 89 591 89Q587 89 584 90T579 94T575 98T572 102L571 209V316H70Q56 323 56 336\",174:\"915 266Q915 140 852 38T689 -120T474 -175Q312 -175 188 -71T38 190Q32 220 32 266V287Q32 345 57 416T129 545Q192 624 282 666T464 709Q513 709 522 708Q599 698 665 666T776 590T853 493T900 387T915 287V266ZM875 285Q875 339 853 399T789 517T676 616T519 668Q510 669 465 669Q380 669 299 630T155 514T77 336Q72 312 72 285V266V256Q72 123 163 11Q290 -135 474 -135Q614 -135 727 -46Q875 81 875 266V285ZM276 457Q275 458 274 460T272 463T270 465T267 467T264 469T258 471T252 472T243 473T232 474T218 474H204V514H335Q477 514 499 510Q560 502 610 467T661 375Q661 362 658 350T648 327T635 308T618 292T601 280T583 269T568 262T554 256L547 253Q548 252 556 247T570 237T586 223T602 202T614 174Q616 169 626 123T638 72Q652 23 683 23Q715 23 720 68Q721 78 724 81T740 84T756 82T760 70Q760 47 747 25T715 -7Q700 -14 673 -14Q672 -14 662 -14T643 -12T619 -7T593 2T568 16T547 37T534 67Q531 80 531 97Q531 103 531 116T532 136Q532 218 472 236Q466 238 413 239H360V148L361 58Q366 47 375 44T418 40H432V0H424Q409 3 318 3T212 0H204V40H218Q242 40 253 42T268 47T276 58V457ZM376 473Q365 471 363 464T360 430V366V276H416Q421 276 434 276T453 276T469 277T486 279T501 282T517 287T529 294T542 305Q561 324 561 375Q561 424 545 444T482 472Q478 473 427 474Q415 474 403 474T384 474L376 473\",175:\"69 544V590H430V544H69\",176:\"147 628Q147 669 179 692T244 715Q298 715 325 689T352 629Q352 592 323 567T249 542Q202 542 175 567T147 628ZM313 628Q313 660 300 669T259 678H253Q248 678 242 678T234 679Q217 679 207 674T192 659T188 644T187 629Q187 600 198 590Q210 579 250 579H265Q279 579 288 581T305 595T313 628\",177:\"56 320T56 333T70 353H369V502Q369 651 371 655Q376 666 388 666Q402 666 405 654T409 596V500V353H707Q722 345 722 333Q722 320 707 313H409V40H707Q722 32 722 20T707 0H70Q56 7 56 20T70 40H369V313H70Q56 320 56 333\",180:\"349 699Q367 699 380 686T393 656Q393 651 392 647T387 637T380 627T367 616T351 602T330 585T303 563L232 505L217 519Q203 533 204 533Q204 534 229 567T282 636T313 678L316 681Q318 684 321 686T328 692T337 697T349 699\",183:\"78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250\",215:\"630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29\",240:\"75 566V604Q75 624 79 629T102 635Q124 635 127 629T131 588L133 550L191 588L249 628L231 635Q176 654 124 657Q116 657 106 658L95 659Q94 661 94 687T95 715Q99 717 113 717Q195 717 282 679L309 668L331 681Q351 697 391 721Q428 748 435 748Q437 749 446 749Q470 749 473 746Q478 744 478 681V621Q466 615 456 615Q435 615 424 624L422 661V699L382 675L344 648Q353 639 366 630Q480 538 504 413Q509 393 509 333V313Q509 284 507 257T495 184T466 102T413 33T329 -16Q311 -21 275 -21Q226 -21 195 -10Q150 7 110 50T53 141Q42 179 42 227Q42 332 101 403T245 474Q282 474 314 461T359 436T380 415Q386 405 389 408Q389 426 378 475Q368 505 355 529T329 567T306 590T288 603L282 606L120 501Q116 500 102 500Q84 500 75 506V566ZM388 225Q388 376 309 410Q299 416 273 419Q216 419 191 390Q174 371 168 342T162 218Q162 112 184 79Q212 39 273 39Q312 39 342 62T380 121Q388 159 388 225\",247:\"318 466Q318 500 339 518T386 537Q418 537 438 517T458 466Q458 438 440 417T388 396Q355 396 337 417T318 466ZM56 237T56 250T70 270H706Q721 262 721 250T706 230H70Q56 237 56 250ZM318 34Q318 68 339 86T386 105Q418 105 438 85T458 34Q458 6 440 -15T388 -36Q355 -36 337 -15T318 34\",305:\"247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247\",567:\"28 -163Q58 -168 64 -168Q124 -168 135 -77Q137 -65 137 141T136 353Q132 371 120 377T72 385H52V408Q52 431 54 431L58 432Q62 432 70 432T87 433T108 434T133 436Q151 437 171 438T202 441T214 442H218V184Q217 -36 217 -59T211 -98Q195 -145 153 -175T58 -205Q9 -205 -23 -179T-55 -117Q-55 -94 -40 -79T-2 -64T36 -79T52 -118Q52 -143 28 -163\",697:\"79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43\",710:\"112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560\",711:\"114 611L127 630L136 644Q138 644 193 612Q248 581 250 581L306 612Q361 644 363 644L385 611L318 562L249 513L114 611\",713:\"69 544V590H430V544H69\",714:\"349 699Q367 699 380 686T393 656Q393 651 392 647T387 637T380 627T367 616T351 602T330 585T303 563L232 505L217 519Q203 533 204 533Q204 534 229 567T282 636T313 678L316 681Q318 684 321 686T328 692T337 697T349 699\",715:\"106 655Q106 671 119 685T150 699Q166 699 177 688Q190 671 222 629T275 561T295 533T282 519L267 505L196 563Q119 626 113 634Q106 643 106 655\",728:\"250 515Q179 515 138 565T92 683V694H129V689Q129 688 129 683T130 675Q137 631 169 599T248 567Q304 567 337 608T370 689V694H407V683Q403 617 361 566T250 515\",729:\"190 609Q190 637 208 653T252 669Q275 667 292 652T309 609Q309 579 292 564T250 549Q225 549 208 564T190 609\",730:\"147 628Q147 669 179 692T244 715Q298 715 325 689T352 629Q352 592 323 567T249 542Q202 542 175 567T147 628ZM313 628Q313 660 300 669T259 678H253Q248 678 242 678T234 679Q217 679 207 674T192 659T188 644T187 629Q187 600 198 590Q210 579 250 579H265Q279 579 288 581T305 595T313 628\",732:\"179 601Q164 601 151 595T131 584T111 565L97 577L83 588Q83 589 95 603T121 633T142 654Q165 668 187 668T253 650T320 632Q335 632 348 638T368 649T388 668L402 656L416 645Q375 586 344 572Q330 565 313 565Q292 565 248 583T179 601\",768:\"-394 655Q-394 671 -381 685T-350 699Q-334 699 -323 688Q-310 671 -278 629T-225 561T-205 533T-218 519L-233 505L-304 563Q-381 626 -387 634Q-394 643 -394 655\",769:\"-151 699Q-133 699 -120 686T-107 656Q-107 651 -108 647T-113 637T-120 627T-133 616T-149 602T-170 585T-197 563L-268 505L-283 519Q-297 533 -296 533Q-296 534 -271 567T-218 636T-187 678L-184 681Q-182 684 -179 686T-172 692T-163 697T-151 699\",770:\"-388 560L-251 694L-243 686Q-113 562 -113 560L-139 531Q-141 532 -197 581L-250 627L-305 580Q-318 569 -331 557T-352 538L-360 532Q-362 530 -375 546L-388 560\",771:\"-321 601Q-336 601 -349 595T-369 584T-389 565L-403 577L-417 588Q-417 589 -405 603T-379 633T-358 654Q-335 668 -313 668T-247 650T-180 632Q-165 632 -152 638T-132 649T-112 668L-98 656L-84 645Q-125 586 -156 572Q-170 565 -187 565Q-208 565 -252 583T-321 601\",772:\"-431 544V590H-70V544H-431\",774:\"-250 515Q-321 515 -362 565T-408 683V694H-371V689Q-371 688 -371 683T-370 675Q-363 631 -331 599T-252 567Q-196 567 -163 608T-130 689V694H-93V683Q-97 617 -139 566T-250 515\",775:\"-310 609Q-310 637 -292 653T-248 669Q-225 667 -208 652T-191 609Q-191 579 -208 564T-250 549Q-275 549 -292 564T-310 609\",776:\"-405 612Q-405 633 -388 651T-347 669T-307 652T-290 612Q-290 588 -306 571T-348 554L-373 560Q-405 577 -405 612ZM-211 611Q-211 634 -196 649T-165 668Q-164 668 -160 668T-154 669Q-131 669 -114 652T-96 612T-113 572T-154 554Q-177 554 -194 570T-211 611\",778:\"-353 628Q-353 669 -321 692T-256 715Q-202 715 -175 689T-148 629Q-148 592 -177 567T-251 542Q-298 542 -325 567T-353 628ZM-187 628Q-187 660 -200 669T-241 678H-247Q-252 678 -258 678T-266 679Q-283 679 -293 674T-308 659T-312 644T-313 629Q-313 600 -302 590Q-290 579 -250 579H-235Q-221 579 -212 581T-195 595T-187 628\",779:\"-292 701Q-278 701 -262 690T-246 658Q-246 649 -250 641Q-252 637 -297 574T-344 510L-378 528Q-378 530 -355 598T-327 676Q-316 701 -292 701ZM-126 701Q-112 701 -96 690T-80 658Q-80 649 -84 641Q-86 637 -131 574T-178 510L-212 528Q-212 530 -189 598T-161 676Q-150 701 -126 701\",780:\"-386 611L-373 630L-364 644Q-362 644 -307 612Q-252 581 -250 581L-194 612Q-139 644 -137 644L-115 611L-182 562L-251 513L-386 611\",824:\"-612 -215T-619 -215T-631 -212T-637 -204T-639 -197Q-639 -190 -634 -183Q-621 -157 -400 274T-176 707Q-173 716 -160 716Q-153 716 -148 712T-142 703T-140 696Q-140 691 -372 241T-608 -212Q-612 -215 -619 -215\",913:\"255 0Q240 3 140 3Q48 3 39 0H32V46H47Q119 49 139 88Q140 91 192 245T295 553T348 708Q351 716 366 716H376Q396 715 400 709Q402 707 508 390L617 67Q624 54 636 51T687 46H717V0H708Q699 3 581 3Q458 3 437 0H427V46H440Q510 46 510 64Q510 66 486 138L462 209H229L209 150Q189 91 189 85Q189 72 209 59T259 46H264V0H255ZM447 255L345 557L244 256Q244 255 345 255H447\",914:\"131 622Q124 629 120 631T104 634T61 637H28V683H229H267H346Q423 683 459 678T531 651Q574 627 599 590T624 512Q624 461 583 419T476 360L466 357Q539 348 595 302T651 187Q651 119 600 67T469 3Q456 1 242 0H28V46H61Q103 47 112 49T131 61V622ZM511 513Q511 560 485 594T416 636Q415 636 403 636T371 636T333 637Q266 637 251 636T232 628Q229 624 229 499V374H312L396 375L406 377Q410 378 417 380T442 393T474 417T499 456T511 513ZM537 188Q537 239 509 282T430 336L329 337H229V200V116Q229 57 234 52Q240 47 334 47H383Q425 47 443 53Q486 67 511 104T537 188\",915:\"128 619Q121 626 117 628T101 631T58 634H25V680H554V676Q556 670 568 560T582 444V440H542V444Q542 445 538 478T523 545T492 598Q454 634 349 634H334Q264 634 249 633T233 621Q232 618 232 339L233 61Q240 54 245 52T270 48T333 46H360V0H348Q324 3 182 3Q51 3 36 0H25V46H58Q100 47 109 49T128 61V619\",916:\"51 0Q46 4 46 7Q46 9 215 357T388 709Q391 716 416 716Q439 716 444 709Q447 705 616 357T786 7Q786 4 781 0H51ZM507 344L384 596L137 92L383 91H630Q630 93 507 344\",917:\"128 619Q121 626 117 628T101 631T58 634H25V680H597V676Q599 670 611 560T625 444V440H585V444Q584 447 582 465Q578 500 570 526T553 571T528 601T498 619T457 629T411 633T353 634Q266 634 251 633T233 622Q233 622 233 621Q232 619 232 497V376H286Q359 378 377 385Q413 401 416 469Q416 471 416 473V493H456V213H416V233Q415 268 408 288T383 317T349 328T297 330Q290 330 286 330H232V196V114Q232 57 237 52Q243 47 289 47H340H391Q428 47 452 50T505 62T552 92T584 146Q594 172 599 200T607 247T612 270V273H652V270Q651 267 632 137T610 3V0H25V46H58Q100 47 109 49T128 61V619\",918:\"69 443Q69 452 74 554T80 683H549Q555 677 555 664Q555 649 554 648Q552 645 366 348T179 50T192 49T263 49H275H302Q333 49 353 50T401 59T447 78T482 115T507 173Q513 200 520 273V282H560V274Q560 272 552 143T543 8V0H302L61 1L58 3Q55 8 55 21V35Q59 43 153 193T340 489T432 637H343Q259 637 214 625T141 573Q109 523 109 445Q109 443 89 443H69\",919:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H302Q262 636 251 634T233 622L232 500V378H517V622Q510 629 506 631T490 634T447 637H414V683H425Q446 680 569 680Q704 680 713 683H724V637H691Q651 636 640 634T622 622V61Q628 51 639 49T691 46H724V0H713Q692 3 569 3Q434 3 425 0H414V46H447Q489 47 498 49T517 61V332H232V197L233 61Q239 51 250 49T302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622\",920:\"56 340Q56 423 86 494T164 610T270 680T388 705Q521 705 621 601T722 341Q722 260 693 191T617 75T510 4T388 -22T267 3T160 74T85 189T56 340ZM610 339Q610 428 590 495T535 598T463 651T384 668Q332 668 289 638T221 566Q168 485 168 339Q168 274 176 235Q189 158 228 105T324 28Q356 16 388 16Q415 16 442 24T501 54T555 111T594 205T610 339ZM223 263V422H263V388H514V422H554V263H514V297H263V263H223\",921:\"328 0Q307 3 180 3T32 0H21V46H43Q92 46 106 49T126 60Q128 63 128 342Q128 620 126 623Q122 628 118 630T96 635T43 637H21V683H32Q53 680 180 680T328 683H339V637H317Q268 637 254 634T234 623Q232 620 232 342Q232 63 234 60Q238 55 242 53T264 48T317 46H339V0H328\",922:\"128 622Q121 629 117 631T101 634T58 637H25V683H36Q57 680 180 680Q315 680 324 683H335V637H313Q235 637 233 620Q232 618 232 462L233 307L379 449Q425 494 479 546Q518 584 524 591T531 607V608Q531 630 503 636Q501 636 498 636T493 637H489V683H499Q517 680 630 680Q704 680 716 683H722V637H708Q633 633 589 597Q584 592 495 506T406 419T515 254T631 80Q644 60 662 54T715 46H736V0H728Q719 3 615 3Q493 3 472 0H461V46H469Q515 46 515 72Q515 78 512 84L336 351Q332 348 278 296L232 251V156Q232 62 235 58Q243 47 302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V622\",923:\"320 708Q326 716 340 716H348H355Q367 716 372 708Q374 706 423 547T523 226T575 62Q581 52 591 50T634 46H661V0H653Q644 3 532 3Q411 3 390 0H379V46H392Q464 46 464 65Q463 70 390 305T316 539L246 316Q177 95 177 84Q177 72 198 59T248 46H253V0H245Q230 3 130 3Q47 3 38 0H32V46H45Q112 51 127 91Q128 92 224 399T320 708\",924:\"132 622Q125 629 121 631T105 634T62 637H29V683H135Q221 683 232 682T249 675Q250 674 354 398L458 124L562 398Q666 674 668 675Q671 681 683 682T781 683H887V637H854Q814 636 803 634T785 622V61Q791 51 802 49T854 46H887V0H876Q855 3 736 3Q605 3 596 0H585V46H618Q660 47 669 49T688 61V347Q688 424 688 461T688 546T688 613L687 632Q454 14 450 7Q446 1 430 1T410 7Q409 9 292 316L176 624V606Q175 588 175 543T175 463T175 356L176 86Q187 50 261 46H278V0H269Q254 3 154 3Q52 3 37 0H29V46H46Q78 48 98 56T122 69T132 86V622\",925:\"42 46Q74 48 94 56T118 69T128 86V634H124Q114 637 52 637H25V683H232L235 680Q237 679 322 554T493 303L578 178V598Q572 608 568 613T544 627T492 637H475V683H483Q498 680 600 680Q706 680 715 683H724V637H707Q634 633 622 598L621 302V6L614 0H600Q585 0 582 3T481 150T282 443T171 605V345L172 86Q183 50 257 46H274V0H265Q250 3 150 3Q48 3 33 0H25V46H42\",926:\"47 509L55 676Q55 677 333 677T611 676L619 509Q619 508 599 508T579 510Q579 529 575 557T564 589Q550 594 333 594T102 589Q95 586 91 558T87 510Q87 508 67 508T47 509ZM139 260V445H179V394H487V445H527V260H487V311H179V260H139ZM50 0L42 180H62Q82 180 82 178Q82 133 89 105Q92 93 95 90T108 86Q137 83 333 83Q530 83 558 86Q568 87 571 90T577 105Q584 133 584 178Q584 180 604 180H624L616 0H50\",927:\"56 340Q56 423 86 494T164 610T270 680T388 705Q521 705 621 601T722 341Q722 260 693 191T617 75T510 4T388 -22T267 3T160 74T85 189T56 340ZM467 647Q426 665 388 665Q360 665 331 654T269 620T213 549T179 439Q174 411 174 354Q174 144 277 61Q327 20 385 20H389H391Q474 20 537 99Q603 188 603 354Q603 411 598 439Q577 592 467 647\",928:\"128 619Q121 626 117 628T101 631T58 634H25V680H724V634H691Q651 633 640 631T622 619V61Q628 51 639 49T691 46H724V0H713Q692 3 569 3Q434 3 425 0H414V46H447Q489 47 498 49T517 61V634H232V348L233 61Q239 51 250 49T302 46H335V0H324Q303 3 180 3Q45 3 36 0H25V46H58Q100 47 109 49T128 61V619\",929:\"130 622Q123 629 119 631T103 634T60 637H27V683H214Q237 683 276 683T331 684Q419 684 471 671T567 616Q624 563 624 489Q624 421 573 372T451 307Q429 302 328 301H234V181Q234 62 237 58Q245 47 304 46H337V0H326Q305 3 182 3Q47 3 38 0H27V46H60Q102 47 111 49T130 61V622ZM507 488Q507 514 506 528T500 564T483 597T450 620T397 635Q385 637 307 637H286Q237 637 234 628Q231 624 231 483V342H302H339Q390 342 423 349T481 382Q507 411 507 488\",931:\"666 247Q664 244 652 126T638 4V0H351Q131 0 95 0T57 5V6Q54 12 57 17L73 36Q89 54 121 90T182 159L305 299L56 644L55 658Q55 677 60 681Q63 683 351 683H638V679Q640 674 652 564T666 447V443H626V447Q618 505 604 543T559 605Q529 626 478 631T333 637H294H189L293 494Q314 465 345 422Q400 346 400 340Q400 338 399 337L154 57Q407 57 428 58Q476 60 508 68T551 83T575 103Q595 125 608 162T624 225L626 251H666V247\",932:\"36 443Q37 448 46 558T55 671V677H666V671Q667 666 676 556T685 443V437H645V443Q645 445 642 478T631 544T610 593Q593 614 555 625Q534 630 478 630H451H443Q417 630 414 618Q413 616 413 339V63Q420 53 439 50T528 46H558V0H545L361 3Q186 1 177 0H164V46H194Q264 46 283 49T309 63V339V550Q309 620 304 625T271 630H244H224Q154 630 119 601Q101 585 93 554T81 486T76 443V437H36V443\",933:\"55 551Q55 604 91 654T194 705Q240 705 277 681T334 624T367 556T385 498L389 474L392 488Q394 501 400 521T414 566T438 615T473 659T521 692T584 705Q620 705 648 689T691 647T714 597T722 551Q722 540 719 538T699 536Q680 536 677 541Q677 542 677 544T676 548Q676 576 650 596T588 616H582Q538 616 505 582Q466 543 454 477T441 318Q441 301 441 269T442 222V61Q448 55 452 53T478 48T542 46H569V0H557Q533 3 389 3T221 0H209V46H236Q256 46 270 46T295 47T311 48T322 51T328 54T332 57T337 61V209Q337 383 333 415Q313 616 189 616Q154 616 128 597T101 548Q101 540 97 538T78 536Q63 536 59 538T55 551\",934:\"312 622Q310 623 307 625T303 629T297 631T286 634T270 635T246 636T211 637H184V683H196Q220 680 361 680T526 683H538V637H511Q468 637 447 635T422 631T411 622V533L425 531Q525 519 595 466T665 342Q665 301 642 267T583 209T506 172T425 152L411 150V61Q417 55 421 53T447 48T511 46H538V0H526Q502 3 361 3T196 0H184V46H211Q231 46 245 46T270 47T286 48T297 51T303 54T307 57T312 61V150H310Q309 151 289 153T232 166T160 195Q149 201 136 210T103 238T69 284T56 342Q56 414 128 467T294 530Q309 532 310 533H312V622ZM170 342Q170 207 307 188H312V495H309Q301 495 282 491T231 469T186 423Q170 389 170 342ZM415 188Q487 199 519 236T551 342Q551 384 539 414T507 459T470 481T434 491T415 495H410V188H415\",935:\"270 0Q252 3 141 3Q46 3 31 0H23V46H40Q129 50 161 88Q165 94 244 216T324 339Q324 341 235 480T143 622Q133 631 119 634T57 637H37V683H46Q64 680 172 680Q297 680 318 683H329V637H324Q307 637 286 632T263 621Q263 618 322 525T384 431Q385 431 437 511T489 593Q490 595 490 599Q490 611 477 622T436 637H428V683H437Q455 680 566 680Q661 680 676 683H684V637H667Q585 634 551 599Q548 596 478 491Q412 388 412 387Q412 385 514 225T620 62Q628 53 642 50T695 46H726V0H717Q699 3 591 3Q466 3 445 0H434V46H440Q454 46 476 51T499 64Q499 67 463 124T390 238L353 295L350 292Q348 290 343 283T331 265T312 236T286 195Q219 88 218 84Q218 70 234 59T272 46H280V0H270\",936:\"340 622Q338 623 335 625T331 629T325 631T314 634T298 635T274 636T239 637H212V683H224Q248 680 389 680T554 683H566V637H539Q479 637 464 635T439 622L438 407Q438 192 439 192Q443 193 449 195T474 207T507 232T536 276T557 344Q560 365 562 417T573 493Q587 536 620 544Q627 546 671 546H715L722 540V515Q714 509 708 509Q680 505 671 476T658 392T644 307Q599 177 451 153L438 151V106L439 61Q446 54 451 52T476 48T539 46H566V0H554Q530 3 389 3T224 0H212V46H239Q259 46 273 46T298 47T314 48T325 51T331 54T335 57T340 61V151Q126 178 117 406Q115 503 69 509Q55 509 55 526Q55 541 59 543T86 546H107H120Q150 546 161 543T184 528Q198 514 204 493Q212 472 213 420T226 316T272 230Q287 216 303 207T330 194L339 192Q340 192 340 407V622\",937:\"55 454Q55 503 75 546T127 617T197 665T272 695T337 704H352Q396 704 404 703Q527 687 596 615T666 454Q666 392 635 330T559 200T499 83V80H543Q589 81 600 83T617 93Q622 102 629 135T636 172L637 177H677V175L660 89Q645 3 644 2V0H552H488Q461 0 456 3T451 20Q451 89 499 235T548 455Q548 512 530 555T483 622T424 656T361 668Q332 668 303 658T243 626T193 560T174 456Q174 380 222 233T270 20Q270 7 263 0H77V2Q76 3 61 89L44 175V177H84L85 172Q85 171 88 155T96 119T104 93Q109 86 120 84T178 80H222V83Q206 132 162 199T87 329T55 454\",8192:\"\",8193:\"\",8194:\"\",8195:\"\",8196:\"\",8197:\"\",8198:\"\",8201:\"\",8202:\"\",8203:\"\",8204:\"\",8211:\"0 248V285H499V248H0\",8212:\"0 248V285H999V248H0\",8213:\"0 248V285H999V248H0\",8214:\"133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739\",8215:\"0 -62V-25H499V-62H0\",8216:\"64 494Q64 548 86 597T131 670T160 694Q163 694 172 685T182 672Q182 669 170 656T144 625T116 573T101 501Q101 489 102 489T107 491T120 497T138 500Q163 500 180 483T198 440T181 397T139 379Q110 379 87 405T64 494\",8217:\"78 634Q78 659 95 676T138 694Q166 694 189 668T212 579Q212 525 190 476T146 403T118 379Q114 379 105 388T95 401Q95 404 107 417T133 448T161 500T176 572Q176 584 175 584T170 581T157 576T139 573Q114 573 96 590T78 634\",8220:\"128 494Q128 528 137 560T158 616T185 658T209 685T223 694T236 685T245 670Q244 668 231 654T204 622T178 571T164 501Q164 489 165 489T170 491T183 497T201 500Q226 500 244 483T262 440T245 397T202 379Q173 379 151 405T128 494ZM332 494Q332 528 341 560T362 616T389 658T413 685T427 694T439 685T449 672Q449 669 437 656T411 625T383 573T368 501Q368 489 369 489T374 491T387 497T405 500Q430 500 448 483T466 440T449 397T406 379Q377 379 355 405T332 494\",8221:\"34 634Q34 659 50 676T93 694Q121 694 144 668T168 579Q168 525 146 476T101 403T73 379Q69 379 60 388T50 401Q50 404 62 417T88 448T116 500T131 572Q131 584 130 584T125 581T112 576T94 573Q69 573 52 590T34 634ZM238 634Q238 659 254 676T297 694Q325 694 348 668T372 579Q372 525 350 476T305 403T277 379Q273 379 264 388T254 401Q254 404 266 417T292 448T320 500T335 572Q335 584 334 584T329 581T316 576T298 573Q273 573 256 590T238 634\",8224:\"182 675Q195 705 222 705Q234 705 243 700T253 691T263 675L262 655Q262 620 252 549T240 454V449Q250 451 288 461T346 472T377 461T389 431Q389 417 379 404T346 390Q327 390 288 401T243 412H240V405Q245 367 250 339T258 301T261 274T263 225Q263 124 255 -41T239 -213Q236 -216 222 -216H217Q206 -216 204 -212T200 -186Q199 -175 199 -168Q181 38 181 225Q181 265 182 280T191 327T204 405V412H201Q196 412 157 401T98 390Q76 390 66 403T55 431T65 458T98 472Q116 472 155 462T205 449Q204 452 204 460T201 490T193 547Q182 619 182 655V675\",8225:\"181 658Q181 705 222 705T263 658Q263 633 252 572T240 497Q240 496 241 496Q243 496 285 507T345 519Q365 519 376 508T388 478Q388 466 384 458T375 447T361 438H344Q318 438 282 448T241 459Q240 458 240 456Q240 449 251 384T263 297Q263 278 255 267T238 253T222 250T206 252T190 266T181 297Q181 323 192 383T204 458Q204 459 203 459Q198 459 162 449T101 438H84Q74 443 70 446T61 457T56 478Q56 497 67 508T99 519Q117 519 159 508T203 496Q204 496 204 499Q204 507 193 572T181 658ZM181 202Q181 249 222 249T263 202Q263 185 259 161T249 103T240 48V41H243Q248 41 287 52T346 63T377 52T389 22Q389 8 379 -5T346 -19Q327 -19 288 -8T243 3H240V-4Q243 -24 249 -58T259 -117T263 -158Q263 -177 255 -188T238 -202T222 -205T206 -203T190 -189T181 -158Q181 -141 185 -117T195 -59T204 -4V3H201Q196 3 157 -8T98 -19Q76 -19 66 -6T55 22T65 49T98 63Q117 63 156 52T201 41H204V48Q201 68 195 102T185 161T181 202\",8226:\"55 251Q55 328 112 386T249 444T386 388T444 249Q444 171 388 113T250 55Q170 55 113 112T55 251\",8230:\"78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60ZM525 60Q525 84 542 102T585 120Q609 120 627 104T646 61Q646 36 629 18T586 0T543 17T525 60ZM972 60Q972 84 989 102T1032 120Q1056 120 1074 104T1093 61Q1093 36 1076 18T1033 0T990 17T972 60\",8242:\"79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43\",8245:\"12 501Q12 527 31 542T63 558Q73 560 77 560Q114 560 128 528Q133 518 188 293T244 61Q244 56 223 50T195 43Q192 43 190 45T102 263T14 486Q12 496 12 501\",8254:\"69 544V590H430V544H69\",8260:\"423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750\",8288:\"\",8289:\"\",8290:\"\",8291:\"\",8292:\"\",8407:\"377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694\",8450:\"684 131Q684 125 672 109T633 71T573 29T489 -5T386 -19Q330 -19 276 -3T174 46T91 134T44 261Q39 283 39 341T44 421Q66 538 143 611T341 699Q344 699 364 700T395 701Q449 698 503 677T585 655Q603 655 611 662T620 678T625 694T639 702Q650 702 657 690V481L653 474Q640 467 628 472Q624 476 618 496T595 541Q562 587 507 625T390 663H381Q337 663 299 625Q212 547 212 336Q212 249 233 179Q274 30 405 30Q533 30 641 130Q658 147 666 147Q671 147 677 143T684 131ZM250 625Q264 643 261 643Q238 635 214 620T161 579T110 510T79 414Q74 384 74 341T79 268Q89 213 113 169T164 101T217 61T260 39L277 34Q270 41 264 48Q199 111 181 254Q178 281 178 344T181 434Q200 559 250 625ZM621 565V625Q617 623 613 623Q603 619 590 619H575L588 605Q608 583 610 579L621 565\",8459:\"331 505Q331 519 382 574T472 629H480Q512 629 529 614T547 576Q547 555 534 532T520 504Q520 493 549 493Q590 493 623 506T668 533L681 546Q731 600 772 641T832 700T852 717Q857 717 860 711T865 697L866 690Q866 688 813 617T708 475T656 403Q682 403 714 404H771L780 416Q1004 707 1167 707Q1209 707 1225 689T1241 646Q1241 604 1209 547T1118 447Q1081 422 1034 405T952 382T888 374T857 370H852L826 334Q733 204 708 144Q691 104 691 76Q691 29 748 29Q768 31 791 48T831 83T862 122T881 146Q883 148 900 148H917Q921 143 921 140T914 127Q810 -8 723 -8Q611 -4 611 100Q611 142 631 191T676 275T721 337T742 367Q716 367 685 366H628L620 355Q618 352 558 268Q486 168 461 141Q405 79 339 34T215 -28Q188 -36 153 -36Q86 -36 58 -11T29 46Q29 82 55 120T123 158Q144 158 154 146T164 119Q164 102 143 89T100 75Q92 75 86 76T77 80T72 82Q67 82 67 60Q67 28 99 14T170 0Q214 0 272 47T419 224L505 340L518 357Q513 357 504 356T467 347T415 330T360 300T308 253Q296 238 295 237H278H274Q256 237 256 243Q256 248 263 256Q291 294 330 321T407 362T476 382T530 393T552 398Q556 402 573 423T600 454Q602 457 604 460T608 465L610 467Q565 455 532 455Q465 455 449 483Q447 487 447 498Q447 513 463 538T479 579Q479 593 463 593Q436 593 385 519Q374 504 371 502T360 499H353H349Q331 499 331 505ZM1195 634Q1195 643 1195 648T1185 662T1157 671Q1130 671 1092 644T1019 579T952 502T901 436L882 409L891 410Q900 411 913 412T934 415Q1081 439 1144 520Q1195 590 1195 634\",8460:\"11 -16L1 0Q7 6 25 27T57 62T91 88T128 101Q159 99 195 66L203 59L211 67Q239 95 239 133Q239 158 210 213T152 330T123 430Q123 477 173 536T269 630T320 666Q376 610 440 606H443Q457 606 466 611T519 647L542 664Q543 664 543 654V643L522 622Q434 537 403 537Q388 537 366 543T329 555T293 570T270 580L261 585L253 574Q206 517 206 475Q206 452 218 416T242 356L255 331Q256 331 270 345T324 391T421 459L437 468H453Q545 463 608 421L618 415L623 392Q644 307 644 233Q644 97 612 9Q604 -10 601 -15T581 -35Q505 -104 467 -124Q446 -133 431 -133Q414 -132 399 -126T376 -115T368 -107Q368 -106 392 -75L415 -43Q432 -67 444 -73T472 -79H474Q479 -79 484 -78T501 -69T521 -50T538 -13T551 46Q558 97 558 180Q558 232 557 245Q553 277 547 300T528 349T488 389T424 404Q344 404 276 295Q272 288 273 285Q300 216 300 168Q300 161 300 156T298 145T297 137T293 129T289 123T283 116T277 107Q212 23 178 -13L166 -26L149 -9Q108 32 81 32Q63 32 21 -7L11 -16\",8461:\"14 666Q14 675 26 683H344L351 679Q361 665 351 655Q344 648 317 648Q287 645 282 641Q270 637 269 623T266 497V370H511V497Q511 519 510 553Q509 615 507 626T496 641H495Q489 645 459 648Q420 648 420 665Q420 672 426 679L433 683H751Q762 676 762 666Q762 648 724 648Q684 645 677 632Q675 626 675 341Q675 57 677 52Q684 38 724 35Q762 35 762 16Q762 6 751 -1H433L426 3Q420 10 420 17Q420 35 459 35Q501 38 506 52Q511 64 511 190V323H266V190Q266 60 271 52Q276 38 317 35Q342 35 351 28Q360 17 351 3L344 -1H26Q14 5 14 16Q14 35 53 35Q94 38 99 52Q104 60 104 341T99 632Q93 645 53 648Q14 648 14 666ZM233 341V553Q233 635 239 648H131Q134 641 135 638T137 603T139 517T139 341Q139 131 138 89T132 37Q131 36 131 35H239Q233 47 233 129V341ZM639 341V489Q639 548 639 576T640 620T642 639T646 648H537L542 639Q546 625 546 341Q546 130 545 88T538 37Q537 36 537 35H646Q643 41 643 42T641 55T639 84T639 140V341\",8462:\"137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683\",8463:\"150 475Q147 475 118 466T82 457Q73 457 64 467T54 487Q54 490 55 492Q63 506 64 506Q67 512 118 526Q162 541 169 546Q173 559 175 575Q181 596 181 604Q181 613 166 617Q164 617 153 618T135 619Q119 619 114 621T109 630Q109 636 114 656T122 681Q125 685 202 688Q272 695 286 695Q304 695 304 684Q304 682 291 628L278 577L386 612Q466 635 476 635T492 627T499 607Q499 593 489 586Q485 583 373 546L262 512Q262 511 248 455T233 397T236 397T244 404Q295 441 357 441Q405 441 445 417T485 333Q485 284 449 178T412 58T426 44Q447 44 466 68Q485 87 500 130L509 152H531H543Q562 152 562 144Q562 128 546 93T494 23T415 -13Q385 -13 359 3T322 44Q318 52 318 77Q318 99 352 196T386 337Q386 386 346 386Q318 386 286 370Q267 361 245 338T211 292Q207 287 193 235T162 113T138 21Q128 7 122 4Q105 -12 83 -12Q66 -12 54 -2T42 26Q42 45 98 257L151 475H150\",8464:\"829 148Q845 148 845 143T841 130T823 109T788 83T730 54T644 22Q637 20 634 19T627 16T622 13T618 10T612 3T604 -6Q510 -112 396 -203T201 -312Q190 -314 171 -314H166Q156 -314 147 -312T123 -304T101 -283T92 -245Q92 -203 117 -160T175 -93Q214 -65 280 -41T390 -6T509 22L532 27L547 47Q673 219 673 225L665 228Q657 231 648 235T627 249T606 270T591 300T584 341Q584 389 614 447T686 544Q735 588 799 615T959 667T1108 713Q1118 717 1119 717Q1125 717 1129 705T1133 689Q1133 686 1115 673Q1051 627 1001 579T918 481T867 403T828 328T805 277Q802 271 801 267T798 261T798 259Q849 270 900 317Q956 371 956 421Q956 438 953 457T950 480Q950 481 950 482L951 484Q953 487 966 492T985 498Q989 498 994 473Q1000 441 1000 423Q1000 362 934 302T790 223L775 220L767 207Q757 191 731 158T685 98T662 63Q662 61 690 70T755 99T811 142L816 148H829ZM646 332Q646 308 659 291T685 268L698 263L735 320Q828 465 865 511Q923 582 1003 643L1005 645Q1004 645 924 620Q775 572 716 492Q646 401 646 332ZM184 -278Q233 -278 311 -212T444 -80L498 -15H496Q468 -20 424 -30T293 -70T174 -133Q167 -140 158 -153T138 -190T127 -232Q127 -278 184 -278\",8465:\"190 601Q161 601 137 587T97 553T71 512T55 477T48 463Q44 465 39 468L30 473L35 488Q73 594 106 636T199 685Q200 686 211 686Q250 686 326 652T417 617Q435 617 455 626T497 652T522 670Q532 660 532 654Q469 591 390 550L378 543L343 556Q223 601 190 601ZM378 208Q378 249 369 318T360 424Q360 430 360 439T361 451L362 462Q416 526 482 571L495 580L503 577L511 575L499 562Q442 502 442 465Q442 436 452 368T462 246Q462 169 442 128T385 56Q292 -26 195 -26Q150 -26 104 14L96 21L43 -16Q43 -15 43 -14T41 -10T38 0L48 13Q76 50 123 97L150 125Q154 131 159 131Q166 131 171 116T182 81T193 53Q199 43 216 33T261 22Q307 22 344 68Q378 113 378 208\",8466:\"572 704Q607 704 607 693Q607 681 590 664H588Q586 664 584 664T578 663Q504 658 434 592T363 457Q363 426 386 401Q417 371 481 361Q490 360 527 360H562Q565 363 595 404T666 494T755 596T854 682T945 717Q986 717 1010 696T1035 637Q1035 593 996 531T873 414Q809 378 753 360T674 338T651 333Q650 333 633 308T588 245T544 185Q498 126 426 78L413 68H414Q498 47 575 47Q626 47 676 74T755 139L762 148H779H783Q802 148 802 142Q802 137 795 129Q760 81 691 33T544 -16Q470 -16 366 20L341 29L331 24Q239 -17 155 -17H141Q90 -17 61 -12T23 1T14 22Q14 44 39 65T103 95Q126 101 180 101Q224 101 258 98T309 90T330 86Q332 86 353 103T389 135Q401 146 412 158T431 179T450 203T466 225T485 252T505 280L535 322H509Q391 322 340 362T289 452Q289 495 321 547T396 630Q438 665 486 684T572 704ZM978 635Q978 644 977 650T973 661T968 668T961 673T954 676T946 678T938 680Q929 680 925 677Q893 659 795 531T682 377Q683 377 711 385T755 401T801 421T856 453T906 495Q927 516 952 557T978 635ZM274 50Q274 51 258 54T216 61T166 65Q160 65 151 65T140 64Q115 58 102 48T88 31Q88 20 159 20Q191 20 219 27T261 42L274 50\",8467:\"345 104T349 104T361 95T369 80T352 59Q268 -20 206 -20Q170 -20 146 3T113 53T99 104L94 129Q94 130 79 116T48 86T28 70Q22 70 15 79T7 94Q7 98 12 103T58 147L91 179V185Q91 186 91 191T92 200Q92 282 128 400T223 612T336 705Q397 705 397 636V627Q397 453 194 233Q185 223 180 218T174 211T171 208T165 201L163 186Q159 142 159 123Q159 17 208 17Q228 17 253 30T293 56T335 94Q345 104 349 104ZM360 634Q360 655 354 661T336 668Q328 668 322 666T302 645T272 592Q252 547 229 467T192 330L179 273Q179 272 186 280T204 300T221 322Q327 453 355 590Q360 612 360 634\",8469:\"20 664Q20 666 31 683H142Q256 683 258 681Q259 680 279 653T342 572T422 468L582 259V425Q582 451 582 490T583 541Q583 611 573 628T522 648Q500 648 493 654Q484 665 493 679L500 683H691Q702 676 702 666Q702 657 698 652Q688 648 680 648Q633 648 627 612Q624 601 624 294V-8Q616 -20 607 -20Q601 -20 596 -15Q593 -13 371 270L156 548L153 319Q153 284 153 234T152 167Q152 103 156 78T172 44T213 34Q236 34 242 28Q253 17 242 3L236 -1H36Q24 6 24 16Q24 34 56 34Q58 35 69 36T86 40T100 50T109 72Q111 83 111 345V603L96 619Q72 643 44 648Q20 648 20 664ZM413 419L240 648H120L136 628Q137 626 361 341T587 54L589 68Q589 78 589 121V192L413 419\",8472:\"300 74Q300 133 338 133Q350 133 356 126T363 109Q363 88 340 76Q340 71 342 62T358 39T393 26Q435 26 474 67T532 182T551 290Q551 325 535 349T484 373Q430 373 378 348T291 289T228 218T187 157T174 130Q254 30 265 10Q276 -15 276 -41Q276 -101 235 -158T142 -216Q112 -216 90 -195T67 -118Q67 -40 104 64L110 81Q81 118 81 174Q81 268 134 360T247 453Q252 453 255 451T258 447L259 445Q259 432 253 420Q251 416 242 416Q209 411 176 341T142 203Q142 193 143 184T146 170T149 165L158 180Q215 280 303 345T485 410Q548 410 586 368T625 255Q625 157 553 74T389 -10H383Q349 -10 325 14Q302 37 300 74ZM105 -123Q105 -134 106 -141T110 -158T122 -173T145 -178Q155 -178 160 -176Q184 -163 199 -132T214 -73Q214 -69 214 -66T213 -59T212 -53T209 -47T205 -41T199 -33T193 -25T184 -14T174 -1L165 10Q156 22 148 32L139 43Q138 43 130 15T113 -54T105 -123\",8473:\"16 666Q16 675 28 683H195Q334 683 370 682T437 672Q511 657 554 611T597 495Q597 343 404 309Q402 308 401 308Q381 303 319 303H261V181Q261 157 262 120Q262 60 267 50T304 36Q310 35 313 35Q352 35 352 17Q352 10 346 3L339 -1H28Q16 5 16 16Q16 35 53 35Q68 36 75 37T87 42T95 52Q98 61 98 341T95 630Q91 640 83 643T53 648Q16 648 16 666ZM235 35Q228 46 227 84Q226 129 226 337V621L230 635L237 648H128Q128 647 133 632Q136 620 136 341Q136 64 133 50L128 35H235ZM301 341H313Q339 341 354 344T389 362T417 410T426 498Q426 586 401 616T322 647Q301 647 293 643Q271 637 264 621Q261 617 261 479V341H301ZM429 350Q431 350 443 353T476 367T515 391T548 432T562 490Q562 550 524 592Q507 607 484 619Q481 621 448 635L433 639L439 621Q462 578 462 506Q462 448 454 413T437 366T428 350H429\",8474:\"480 -10Q480 -13 486 -24T507 -50T541 -80T588 -104T648 -114Q666 -114 688 -110T714 -106Q724 -106 728 -114T729 -130Q723 -145 663 -163T548 -181Q503 -181 463 -169T395 -139T343 -97T307 -56T284 -19L280 -3L262 1Q188 24 131 81Q57 155 37 275Q34 292 34 342T37 410Q58 528 131 601Q179 652 248 676T388 701Q485 701 562 661Q698 595 731 448Q742 410 742 341T731 235Q707 141 646 81Q616 50 575 27T493 -5L480 -10ZM568 342Q568 613 437 659L395 666Q329 666 286 626Q232 570 213 439Q210 408 210 342T213 246Q231 113 286 57Q309 37 342 23Q357 19 389 19Q420 19 437 23Q469 38 491 57Q568 134 568 342ZM174 341V354Q174 393 175 419T183 484T205 561T246 635L249 639Q246 639 224 627T193 608Q189 606 183 601T169 589T155 577Q69 491 69 344Q69 133 231 52Q247 42 247 46Q247 46 246 48Q231 69 222 85T200 141T177 239Q174 269 174 341ZM708 341Q708 410 689 467T640 556T588 606T546 630Q532 638 531 638Q530 638 531 635Q563 590 577 543Q602 472 602 341V316Q602 264 599 230T580 144T531 48Q529 44 532 45T546 52Q575 68 596 84T642 128T683 200T706 299Q708 327 708 341ZM391 -17H333Q329 -15 326 -15Q324 -15 324 -17Q324 -21 362 -68Q424 -130 506 -143Q518 -144 544 -144Q569 -144 577 -143L589 -141L575 -139Q544 -127 509 -101T453 -37L442 -19L391 -17\",8475:\"224 266Q185 266 156 286T127 354Q127 419 176 487T282 594Q346 642 433 679T615 717Q732 717 802 680L815 673Q824 680 840 690T860 700Q864 700 867 693T872 680L873 673Q873 668 858 659L845 651L853 642Q887 605 887 561Q887 500 840 439Q790 379 681 336Q693 312 693 292Q692 276 689 263T672 229T653 198T620 152L575 87Q557 57 557 33Q557 24 560 17T566 8L569 5Q546 5 508 25T470 76Q470 83 473 92T545 198T616 310Q616 317 615 318T612 319Q603 319 575 315H560L545 291Q492 201 429 135T277 23Q202 -17 142 -17H130Q50 -17 16 17Q-2 35 -2 57Q-2 95 24 126T88 158Q106 158 116 147T127 121Q127 110 122 102Q116 93 99 84T63 75Q58 75 53 76T47 77T45 75T44 67Q45 52 57 42T88 27T120 21T144 19Q174 19 208 36T267 76T324 134T369 189T406 239Q462 319 504 374T616 503T755 631L770 644Q767 647 753 654T697 670T602 680Q493 680 399 631T247 516Q218 485 193 440T168 359Q168 328 188 316T234 303Q255 303 273 315T304 340T343 389T390 448Q428 490 441 510T456 548Q456 557 458 559Q459 560 476 567T496 575Q505 575 505 558Q505 511 434 412Q429 406 427 403Q397 360 378 343Q342 308 300 287T224 266ZM819 564Q819 595 800 619L784 606Q729 557 692 512T605 387L591 365L610 364Q622 364 631 363T641 361Q643 361 651 363Q725 388 772 449T819 564ZM794 141Q794 123 725 63T612 3Q609 3 612 5Q612 5 615 7Q639 19 678 57T742 131L755 148H772H780Q794 148 794 141ZM588 -3Q590 0 593 0H594L593 -1Q592 -1 590 -2L588 -3\",8476:\"27 496Q31 569 102 627T234 685Q236 685 241 685T251 686Q287 686 318 672T367 638T399 598T418 564L423 550Q424 554 434 567T463 601T505 639T561 671T626 685Q672 685 688 659T710 572Q713 533 721 523T766 513Q781 513 787 514T794 516Q796 512 798 509T801 504T802 501T787 493Q702 461 624 401L607 389Q655 383 688 358L697 352V342Q699 330 699 297Q704 209 710 173T734 103Q751 69 765 69Q769 69 806 83L824 90V74Q823 73 759 24T693 -26Q692 -26 660 32L628 90L629 111Q631 159 631 177Q631 278 614 300Q584 340 523 340Q500 340 467 333T431 325Q429 325 429 322Q428 321 426 308T420 275T410 230T392 178T366 125L358 112L342 99Q306 70 269 38T213 -10T193 -26Q192 -26 163 0T116 26Q82 26 50 -8L42 -16L35 -8L27 0L35 10Q43 21 58 38T104 80T158 106Q179 106 218 65L235 48Q238 48 255 60T295 99T329 158Q352 231 352 359Q352 555 242 614Q210 628 187 628Q140 628 116 600T91 548Q91 522 138 464T185 382V376Q185 345 158 313T103 263L76 246Q74 244 64 253L54 260L65 267Q91 285 100 302Q111 318 111 337Q111 355 69 410T27 496ZM562 628Q504 628 443 507L435 491L436 479Q437 471 437 446Q437 396 432 351L529 389L602 426Q673 462 673 463H672Q644 470 637 483T622 553Q608 628 562 628\",8477:\"17 665Q17 672 28 683H221Q415 681 439 677Q461 673 481 667T516 654T544 639T566 623T584 607T597 592T607 578T614 565T618 554L621 548Q626 530 626 497Q626 447 613 419Q578 348 473 326L455 321Q462 310 473 292T517 226T578 141T637 72T686 35Q705 30 705 16Q705 7 693 -1H510Q503 6 404 159L306 310H268V183Q270 67 271 59Q274 42 291 38Q295 37 319 35Q344 35 353 28Q362 17 353 3L346 -1H28Q16 5 16 16Q16 35 55 35Q96 38 101 52Q106 60 106 341T101 632Q95 645 55 648Q17 648 17 665ZM241 35Q238 42 237 45T235 78T233 163T233 337V621L237 635L244 648H133Q136 641 137 638T139 603T141 517T141 341Q141 131 140 89T134 37Q133 36 133 35H241ZM457 496Q457 540 449 570T425 615T400 634T377 643Q374 643 339 648Q300 648 281 635Q271 628 270 610T268 481V346H284Q327 346 375 352Q421 364 439 392T457 496ZM492 537T492 496T488 427T478 389T469 371T464 361Q464 360 465 360Q469 360 497 370Q593 400 593 495Q593 592 477 630L457 637L461 626Q474 611 488 561Q492 537 492 496ZM464 243Q411 317 410 317Q404 317 401 315Q384 315 370 312H346L526 35H619L606 50Q553 109 464 243\",8484:\"39 -1Q29 9 29 12Q29 23 60 77T219 337L410 648H364Q261 648 210 628Q168 612 142 588T109 545T97 509T88 490Q85 489 80 489Q72 489 61 503L70 588Q72 607 75 628T79 662T81 675Q84 677 88 681Q90 683 341 683H592Q604 673 604 666Q604 662 412 348L221 37Q221 35 301 35Q406 35 446 48Q504 68 543 111T597 212Q602 239 617 239Q624 239 629 234T635 223Q635 215 621 113T604 8L597 1Q595 -1 317 -1H39ZM148 637L166 648H112V632Q111 629 110 622T108 612Q108 608 110 608T116 612T129 623T148 637ZM552 646Q552 648 504 648Q452 648 450 643Q448 639 266 343T77 37Q77 35 128 35H179L366 339L552 646ZM572 35Q581 89 581 97L561 77Q542 59 526 48L508 37L539 35H572\",8486:\"55 454Q55 503 75 546T127 617T197 665T272 695T337 704H352Q396 704 404 703Q527 687 596 615T666 454Q666 392 635 330T559 200T499 83V80H543Q589 81 600 83T617 93Q622 102 629 135T636 172L637 177H677V175L660 89Q645 3 644 2V0H552H488Q461 0 456 3T451 20Q451 89 499 235T548 455Q548 512 530 555T483 622T424 656T361 668Q332 668 303 658T243 626T193 560T174 456Q174 380 222 233T270 20Q270 7 263 0H77V2Q76 3 61 89L44 175V177H84L85 172Q85 171 88 155T96 119T104 93Q109 86 120 84T178 80H222V83Q206 132 162 199T87 329T55 454\",8487:\"126 584Q119 584 110 539T97 493Q95 490 73 490Q44 490 44 501Q44 515 62 590Q75 672 82 679Q84 684 177 684Q193 684 214 684T241 685Q265 685 271 682T277 664V648Q271 572 229 434T186 231Q186 173 203 132T247 70T302 42T360 33Q391 33 419 42T474 72T517 133T533 231Q533 297 491 437T442 648Q442 675 446 679Q448 684 542 684Q635 684 637 681Q640 678 657 594T675 501Q675 490 646 490Q624 490 622 493Q620 493 609 538T593 584Q591 585 585 585T569 586T551 588H513Q514 586 518 573T538 531T582 453Q647 340 660 277Q663 259 663 232Q663 194 657 177Q652 151 629 112T560 39Q495 -5 424 -19Q403 -22 360 -22Q318 -22 297 -19Q239 -8 193 18T120 74T80 131T62 177Q56 194 56 229Q56 281 74 328T137 453Q160 491 174 518T193 555T201 575T206 588H168Q160 587 150 587T134 586T126 584\",8488:\"148 590Q95 592 91 627V633L160 729H176Q169 713 169 705Q169 670 244 670Q269 670 305 672T357 675Q405 675 432 661T468 609Q469 605 469 596Q469 572 460 540Q433 463 301 372Q325 378 359 378Q431 378 472 350T519 297Q532 249 532 198Q532 115 500 40T442 -57Q335 -139 202 -139Q165 -139 125 -131L112 -129V-100Q112 -49 106 -33T75 -17Q55 -17 31 -35L22 -42L11 -26L22 -18Q94 36 151 36H160Q171 36 178 33T188 27T194 13T196 -5T197 -32Q198 -79 206 -90Q217 -107 251 -107Q336 -107 389 -33T442 155Q442 240 407 274Q362 319 285 319Q236 319 192 298Q188 298 181 309L224 372Q227 373 234 374T246 376T257 379T271 384T285 391T302 402T321 417Q384 471 384 540Q384 562 366 581T306 600Q292 600 233 595T148 590\",8492:\"256 262Q161 262 161 351Q161 408 203 471T289 570Q380 645 475 676T617 707L627 708Q637 708 644 708Q759 708 831 675L844 669L857 677Q892 700 896 700Q902 700 907 685Q907 683 907 681T908 678T909 676T909 673Q909 671 909 670T906 667T903 664T897 660T889 655L878 647L889 636Q928 598 928 548Q928 529 923 510T907 474T886 442T861 412T837 388T815 368T800 355Q847 323 847 270V263Q847 205 806 145Q766 82 695 37T564 -8Q527 -8 506 10T484 58Q484 85 501 117T543 172Q607 226 685 228Q695 228 698 226Q703 220 692 206Q684 194 682 193T665 191Q625 189 595 172T550 133T529 93T522 66Q522 29 576 29Q642 29 705 109Q785 211 785 270Q785 287 779 300T769 316T755 327L740 319Q682 290 634 290Q611 290 592 294H588L565 261Q559 252 544 231T522 201T504 178T481 151T455 123Q394 63 314 18T159 -28Q103 -28 67 -6T31 54Q31 88 57 123T123 158Q144 158 154 146T164 119Q164 102 142 89T100 75Q94 75 87 77T76 80L72 81Q69 78 69 65Q69 35 102 22T175 9Q184 9 198 11Q248 23 300 70T403 187T508 331T636 489T789 629L801 639Q796 642 786 647T732 661T633 670Q592 670 558 665Q481 651 409 613T286 520Q274 507 258 485T222 424T202 354Q202 299 269 299Q282 299 295 301T318 307T339 317T358 329T376 345T391 362T406 380T420 398T433 417T445 435Q496 512 496 547Q496 559 497 560T516 569Q526 574 530 574Q538 574 538 540Q538 414 427 325Q342 262 256 262ZM689 382Q708 382 753 375L765 387Q860 482 860 555Q860 594 839 610L822 592Q794 563 752 511T680 420T651 380Q655 381 660 381Q664 382 689 382ZM697 344Q692 345 681 345H675Q671 345 665 345T655 344T650 344L648 342Q646 339 645 338Q643 333 639 327H653Q670 329 676 330Q706 342 706 343Q702 344 697 344\",8493:\"299 585Q333 609 384 634T470 672L505 685Q506 685 513 662T531 613T548 580Q553 576 563 576Q575 576 605 585Q607 585 607 575V564Q537 532 496 527Q475 542 456 567T427 610T415 627Q410 627 398 618T382 603Q373 588 373 558T386 475T400 399Q400 337 366 303Q343 281 309 266T254 247T226 242L214 257Q214 258 223 260T251 272T287 299Q304 316 304 360Q304 396 289 451T274 532Q274 553 277 561V564H269Q205 558 172 501T139 358Q139 207 226 127T443 46Q448 46 457 46T470 47L485 48L601 106Q602 106 602 93V80Q551 48 517 25T474 -4T460 -13T443 -19Q409 -24 367 -24Q360 -24 351 -24T335 -23T326 -22Q190 -2 125 87T59 319V328Q62 412 96 487L101 500L118 512Q189 563 245 591L266 601L299 585\",8496:\"280 398L279 400Q278 402 277 405T275 413T272 426T271 443Q271 494 302 544T379 629T472 685T553 707H565H573Q630 707 664 689Q718 661 718 604Q718 548 662 492T553 436Q525 436 508 451T490 492Q490 534 531 579T619 630Q632 630 632 623Q632 619 624 606Q614 593 602 592T578 580Q566 568 549 541T532 497Q532 474 565 474Q577 474 587 476Q600 481 611 489Q630 503 651 535T672 596Q672 660 553 660H548Q494 660 450 616Q421 587 384 531T343 439Q341 420 344 415H345Q346 415 352 415T369 417T391 418Q421 418 440 412T466 398T473 382Q473 367 452 353T398 339Q370 339 348 345T315 359L304 366Q297 365 284 360T234 321T163 234Q120 160 120 117Q120 83 149 57T252 30Q311 30 357 60Q386 79 414 114T452 179Q454 186 454 200Q454 230 415 242Q401 246 373 246Q353 246 347 244Q328 236 313 219T288 184T274 149T265 121T261 109Q260 107 247 102T230 97Q223 97 223 105Q223 148 271 216T386 284Q446 284 483 260T520 195Q520 121 427 57T239 -8Q192 -8 152 2T79 46T46 133Q46 212 107 285T269 394L280 398ZM427 376Q427 377 402 380Q386 380 386 379L425 375L427 376\",8497:\"258 428Q258 489 322 562T482 685T661 735Q726 735 824 693T977 651Q990 651 990 644Q990 639 971 612T948 581Q947 580 938 580Q878 580 784 621T617 663Q544 663 480 635T379 568T320 492T299 431Q299 387 362 387Q404 387 438 402T493 438T527 486T546 531T551 563Q551 569 550 575T549 584T549 590Q551 593 563 602T579 611Q584 611 592 605T608 584T616 548Q616 513 595 477T554 423Q518 392 464 372T349 351Q258 351 258 428ZM324 187T305 187T286 196Q286 202 301 217Q327 242 383 262T484 290L527 297L567 356Q624 441 643 467T688 521Q715 550 752 581T795 613T804 603T808 587T778 547T702 444T626 300H637Q663 302 685 306L697 308L703 317Q745 376 792 400Q806 406 818 406Q849 406 849 375Q847 355 831 338T797 312T763 296L747 290Q744 289 735 266T724 241Q722 240 702 232T664 217T645 210Q638 210 638 218Q638 224 653 246T669 270Q669 271 668 271Q663 270 624 264L607 263Q570 199 529 152Q513 133 484 106T409 45T305 -13T193 -36Q109 -36 74 -10T39 50Q39 86 64 121T128 158Q171 158 171 121Q171 97 141 83Q125 75 107 75Q93 75 80 83Q76 71 76 62Q76 29 117 15T207 0Q324 0 494 248L501 258H495Q368 239 330 195Q324 187 305 187ZM775 335Q806 358 806 368Q805 369 804 369Q800 369 791 360Q774 336 775 335\",8498:\"457 681Q471 695 477 695Q485 695 497 681V12L484 -1H68Q55 14 55 19T68 39H457V328H215L211 335Q198 346 211 359L217 368H457V681\",8499:\"112 -7Q86 -7 58 6T30 48T54 103T113 130Q129 130 141 121T153 94Q153 71 132 59T90 47H80Q95 30 133 30Q180 30 228 63T311 137T402 249T500 361Q566 425 703 529T910 693Q942 721 945 721T958 716T970 709Q974 704 964 691Q961 688 905 622T847 554L595 181Q553 121 527 77T496 19L492 5Q497 5 531 46Q579 98 685 224T850 409L972 524Q994 543 1004 556Q1012 567 1097 643T1186 720Q1194 720 1206 715T1215 703Q1215 701 1191 671T1133 599T1080 530Q1036 461 983 357T862 152Q802 64 799 17Q799 7 800 5T811 2Q836 2 882 37T969 126Q972 130 974 134T978 138T983 139T996 140H1012Q1018 134 1018 132Q1018 122 981 83T889 4T795 -35Q761 -35 745 -12T728 48Q728 122 781 190Q833 269 890 370L927 434L914 422Q848 360 752 245Q643 117 582 51T498 -33T461 -50Q424 -48 424 -4Q424 84 481 172L714 495Q591 406 523 333Q507 316 430 226T313 95Q263 48 221 24T162 -4T120 -7H112\",8501:\"55 613Q55 643 61 663T74 688T85 694Q94 694 94 681Q98 632 134 588L412 285Q416 311 430 397T447 509V519L438 526Q407 554 398 571T388 617T394 664T407 688T418 694Q425 694 427 684Q429 675 454 635T488 586Q490 584 496 579T513 563T537 540Q555 516 555 487Q555 460 549 441T537 416T528 409Q519 409 517 415T513 435T503 463Q492 481 490 481Q454 264 454 246Q454 237 479 212T529 152T555 79Q555 32 538 9Q531 1 524 1Q516 1 516 13Q512 62 476 106Q468 115 337 258T195 412L193 406Q191 401 189 394T183 377T176 352T171 322T167 284T165 240Q165 224 166 220Q171 199 211 152T252 70Q252 45 235 29T203 8T175 1Q170 0 115 0H79Q60 0 58 3T55 20Q55 31 58 34Q60 37 76 37Q112 39 126 46T140 70Q140 96 112 148T83 236Q83 281 102 334T140 419T159 452Q55 556 55 613\",8502:\"56 706V726Q56 763 76 763Q83 763 87 759T98 741Q108 726 116 721L127 717L340 715Q547 712 564 709Q575 705 587 692Q599 680 605 663L609 650V137H676Q687 124 687 115Q687 110 678 100T622 43L558 -21H-9Q-22 -6 -22 -1T-13 14T42 72L107 137H569V339Q569 541 567 546Q558 555 554 557L545 563H329Q118 566 101 569Q90 573 78 586Q54 610 54 661Q54 670 56 706\",8503:\"56 750Q68 764 76 764Q88 764 97 743T125 717Q131 715 240 715T358 713Q421 691 421 640Q421 608 399 588T358 566Q353 566 352 565T351 557L356 526Q356 488 379 346T402 97Q400 21 385 -12Q366 -43 351 -43Q335 -43 329 -10Q316 40 316 64Q316 67 315 67Q313 67 269 26L222 -21H-9Q-22 -7 -22 -1Q-22 4 -14 14T42 73L107 137H311V564H211H164Q115 564 93 573T60 615Q56 630 56 690V750\",8504:\"62 757Q69 764 75 764Q87 764 97 741Q102 731 105 728T117 721L129 715H349Q569 715 580 710Q618 701 635 670Q640 661 640 639Q640 609 622 590Q617 583 604 575T580 566H573V553Q575 547 576 531T582 469T600 353Q624 205 624 104Q624 46 617 17T591 -32Q581 -43 573 -43Q550 -43 540 44Q535 73 533 319V564H322Q117 566 100 570Q90 573 77 586Q54 609 54 663Q54 689 55 706Q55 738 56 745T62 757\",8513:\"239 665Q194 665 154 653T90 629T66 617Q59 617 53 623T46 637Q46 652 66 659Q129 695 197 701Q218 705 248 705Q293 705 335 693Q371 684 435 644Q543 562 573 417Q577 393 577 341Q577 290 573 266Q531 83 384 10Q346 -9 315 -16T234 -23H206Q202 -23 183 -23T152 -21T120 -18T88 -10T63 3T44 24L37 35V297L50 310H235Q248 297 248 290Q248 285 235 270H77V103Q77 88 77 80T77 63T78 50T80 43T82 38T85 35T89 32T95 30Q126 20 206 17Q289 17 330 30Q407 55 460 120T533 275Q538 305 538 342Q538 486 452 575T239 665\",8592:\"944 261T944 250T929 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270H929Q944 261 944 250\",8593:\"27 414Q17 414 17 433Q17 437 17 439T17 444T19 447T20 450T22 452T26 453T30 454T36 456Q80 467 120 494T180 549Q227 607 238 678Q240 694 251 694Q259 694 261 684Q261 677 265 659T284 608T320 549Q340 525 363 507T405 479T440 463T467 455T479 451Q483 447 483 433Q483 413 472 413Q467 413 458 416Q342 448 277 545L270 555V-179Q262 -193 252 -193H250H248Q236 -193 230 -179V555L223 545Q192 499 146 467T70 424T27 414\",8594:\"56 237T56 250T70 270H835Q719 357 692 493Q692 494 692 496T691 499Q691 511 708 511H711Q720 511 723 510T729 506T732 497T735 481T743 456Q765 389 816 336T935 261Q944 258 944 250Q944 244 939 241T915 231T877 212Q836 186 806 152T761 85T740 35T732 4Q730 -6 727 -8T711 -11Q691 -11 691 0Q691 7 696 25Q728 151 835 230H70Q56 237 56 250\",8595:\"473 86Q483 86 483 67Q483 63 483 61T483 56T481 53T480 50T478 48T474 47T470 46T464 44Q428 35 391 14T316 -55T264 -168Q264 -170 263 -173T262 -180T261 -184Q259 -194 251 -194Q242 -194 238 -176T221 -121T180 -49Q169 -34 155 -21T125 2T95 20T67 33T44 42T27 47L21 49Q17 53 17 67Q17 87 28 87Q33 87 42 84Q158 52 223 -45L230 -55V312Q230 391 230 482T229 591Q229 662 231 676T243 693Q244 694 251 694Q264 692 270 679V-55L277 -45Q307 1 353 33T430 76T473 86\",8596:\"263 479Q267 501 271 506T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270H835Q729 349 696 475Q691 493 691 500Q691 511 711 511Q720 511 723 510T729 506T732 497T735 481T743 456Q765 389 816 336T935 261Q944 258 944 250Q944 244 939 241T915 231T877 212Q836 186 806 152T761 85T740 35T732 4Q730 -6 727 -8T711 -11Q691 -11 691 0Q691 7 696 25Q728 151 835 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q144 292 194 349T263 479\",8597:\"27 492Q17 492 17 511Q17 515 17 517T17 522T19 525T20 528T22 530T26 531T30 532T36 534Q80 545 120 572T180 627Q210 664 223 701T238 755T250 772T261 762Q261 757 264 741T282 691T319 628Q352 589 390 566T454 536L479 529Q483 525 483 511Q483 491 472 491Q467 491 458 494Q342 526 277 623L270 633V-133L277 -123Q307 -77 353 -45T430 -2T473 8Q483 8 483 -11Q483 -15 483 -17T483 -22T481 -25T480 -28T478 -30T474 -31T470 -32T464 -34Q407 -49 364 -84T300 -157T270 -223T261 -262Q259 -272 250 -272Q242 -272 239 -255T223 -201T180 -127Q169 -112 155 -99T125 -76T95 -58T67 -45T44 -36T27 -31L21 -29Q17 -25 17 -11Q17 9 28 9Q33 9 42 6Q158 -26 223 -123L230 -133V633L223 623Q192 577 146 545T70 502T27 492\",8598:\"204 662Q257 662 301 676T369 705T394 720Q398 720 407 711T417 697Q417 688 389 671T310 639T212 623Q176 623 153 628Q151 628 221 557T546 232Q942 -164 943 -168Q944 -170 944 -174Q944 -182 938 -188T924 -195Q922 -195 916 -193Q912 -191 517 204Q440 281 326 394T166 553L121 598Q126 589 126 541Q126 438 70 349Q59 332 52 332Q48 332 39 341T29 355Q29 358 38 372T57 407T77 464T86 545Q86 583 78 614T63 663T55 683Q55 693 65 693Q73 693 82 688Q136 662 204 662\",8599:\"582 697Q582 701 591 710T605 720Q607 720 630 706T697 677T795 662Q830 662 863 670T914 686T934 694Q942 694 944 685Q944 680 936 663T921 615T913 545Q913 490 927 446T956 379T970 355Q970 351 961 342T947 332Q940 332 929 349Q874 436 874 541Q874 590 878 598L832 553Q787 508 673 395T482 204Q87 -191 83 -193Q77 -195 75 -195Q67 -195 61 -189T55 -174Q55 -170 56 -168Q58 -164 453 232Q707 487 777 557T847 628Q824 623 787 623Q689 623 599 679Q582 690 582 697\",8600:\"55 675Q55 683 60 689T75 695Q77 695 83 693Q87 691 482 296Q532 246 605 174T717 62T799 -20T859 -80T878 -97Q874 -93 874 -41Q874 64 929 151Q940 168 947 168Q951 168 960 159T970 145Q970 143 956 121T928 54T913 -45Q913 -83 920 -114T936 -163T944 -185Q942 -194 934 -194Q932 -194 914 -186T864 -170T795 -162Q743 -162 698 -176T630 -205T605 -220Q601 -220 592 -211T582 -197Q582 -187 611 -170T691 -138T787 -123Q824 -123 847 -128Q848 -128 778 -57T453 268Q58 664 56 668Q55 670 55 675\",8601:\"126 -41Q126 -92 121 -97Q121 -98 139 -80T200 -20T281 61T394 173T517 296Q909 690 916 693Q922 695 924 695Q932 695 938 689T944 674Q944 670 943 668Q942 664 546 268Q292 13 222 -57T153 -128Q176 -123 212 -123Q310 -123 400 -179Q417 -190 417 -197Q417 -201 408 -210T394 -220Q392 -220 369 -206T302 -177T204 -162Q131 -162 67 -194Q63 -195 59 -192T55 -183Q55 -180 62 -163T78 -115T86 -45Q86 10 72 54T44 120T29 145Q29 149 38 158T52 168Q59 168 70 151Q126 62 126 -41\",8602:\"942 250Q942 244 928 230H511L457 148Q440 124 420 93Q404 68 400 64T389 60Q381 60 375 66T368 81Q368 88 415 159L462 230H175L188 214Q210 188 235 145T264 85Q264 75 260 74T231 72L206 74L191 103Q169 142 164 150Q130 195 64 239Q56 244 56 250T64 261Q115 294 142 323T191 397L206 428H231Q255 428 259 426T264 414Q260 397 235 355T188 288L175 272L331 270Q488 270 491 272Q491 275 542 352T597 432Q602 437 609 437Q617 437 622 432T628 417T582 341L537 272L735 270H931Q942 257 942 250\",8603:\"54 250Q54 258 66 270H277L488 272L542 350Q596 431 602 435Q604 437 609 437Q617 437 622 432T628 417T582 341L537 272L608 270H751L822 272L808 288Q786 313 761 355T733 414Q733 424 737 426T766 428H793L806 397Q829 354 864 314Q896 284 928 263Q942 257 942 250T928 237Q887 208 864 185Q829 147 806 103L793 74L766 72Q742 72 738 73T733 85Q735 102 756 137T797 198L817 225L822 230H511L457 148Q440 124 420 93Q404 68 400 64T389 60Q381 60 375 66T368 81Q368 88 415 159L462 230H264L66 232Q54 239 54 250\",8606:\"56 250Q103 277 142 322T199 417H221Q244 417 244 416Q244 414 237 397T208 344T158 278L151 270H276L285 277Q322 306 349 345T388 417H434Q434 413 424 392T393 338T349 279L340 270H634Q933 270 937 266L938 265Q944 259 944 250T938 235L937 234Q933 230 634 230H340L349 221Q372 196 393 163T424 108T434 83H388Q377 116 350 155T285 223L276 230H151L158 222Q186 191 207 156T236 104T244 84Q244 83 221 83H199Q181 133 142 178T56 250\",8608:\"943 250Q895 221 856 177T801 83H778Q755 83 755 84Q755 86 762 103T791 156T841 222L848 230H723L714 223Q677 194 650 155T611 83H565Q565 87 575 108T606 162T650 221L659 230H365Q66 230 62 234L61 235Q55 241 55 250T61 265L62 266Q66 270 365 270H659L650 279Q627 304 606 337T575 392T565 417H611Q622 384 649 345T714 277L723 270H848L841 278Q813 309 792 344T763 396T755 416Q755 417 778 417H801Q817 367 856 323T943 250\",8610:\"56 250Q103 277 142 322T199 417H221Q244 417 244 416Q244 414 237 397T208 344T158 278L151 270H873L882 277Q919 306 946 345T985 417H1031Q1031 413 1021 392T990 338T946 279L937 270V230L946 221Q969 196 990 163T1021 108T1031 83H985Q974 116 947 155T882 223L873 230H151L158 222Q186 191 207 156T236 104T244 84Q244 83 221 83H199Q181 133 142 178T56 250\",8611:\"1054 250Q1006 221 967 177T912 83H889Q866 83 866 84Q866 86 873 103T902 156T952 222L959 230H237L228 223Q191 194 164 155T125 83H79Q79 87 89 108T120 162T164 221L173 230V270L164 279Q141 304 120 337T89 392T79 417H125Q136 384 163 345T228 277L237 270H959L952 278Q924 309 903 344T874 396T866 416Q866 417 889 417H912Q928 367 967 323T1054 250\",8614:\"95 155V109Q95 83 92 73T75 63Q61 63 58 74T54 130Q54 140 54 180T55 250Q55 421 57 425Q61 437 75 437Q88 437 91 428T95 393V345V270H835Q719 357 692 493Q692 494 692 496T691 499Q691 511 708 511H711Q720 511 723 510T729 506T732 497T735 481T743 456Q765 389 816 336T935 261Q944 258 944 250Q944 244 939 241T915 231T877 212Q836 186 806 152T761 85T740 35T732 4Q730 -6 727 -8T711 -11Q691 -11 691 0Q691 7 696 25Q728 151 835 230H95V155\",8617:\"903 424T903 444T929 464Q976 464 1023 434T1070 347Q1070 316 1055 292T1016 256T971 237T929 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270H926Q929 270 941 271T960 275T978 280T998 290T1015 307Q1030 325 1030 347Q1030 355 1027 364T1014 387T983 411T929 424H928Q903 424 903 444\",8618:\"55 347Q55 380 72 404T113 441T159 458T197 464Q222 464 222 444Q222 429 204 426T157 417T110 387Q95 369 95 347Q95 339 98 330T111 307T142 283T196 270H961Q845 357 818 493Q818 494 818 496T817 499Q817 511 834 511H837Q846 511 849 510T855 506T858 497T861 481T869 456Q891 389 942 336T1061 261Q1070 258 1070 250Q1070 244 1065 241T1041 231T1003 212Q962 186 932 152T887 85T866 35T858 4Q856 -6 853 -8T837 -11Q817 -11 817 0Q817 7 822 25Q854 151 961 230H196Q149 230 102 260T55 347\",8619:\"56 250Q103 277 142 322T199 417H221Q244 417 244 416Q244 414 237 397T208 344T158 278L151 270H622V305Q622 356 624 388T635 460T661 521T709 559T785 575Q813 575 833 573T880 561T923 534T952 483T964 405Q964 374 959 350T942 307T918 276T884 255T847 242T804 235T760 231T713 230H662V-27Q654 -41 644 -41H642H640Q628 -41 622 -27V230H151L158 222Q186 191 207 156T236 104T244 84Q244 83 221 83H199Q181 133 142 178T56 250ZM924 403Q924 474 894 505T794 536Q758 536 734 526T696 500T675 453T665 395T662 319V270H699Q826 270 875 295T924 403\",8620:\"35 405Q35 454 48 489T86 542T137 567T195 575Q229 575 251 571T301 554T345 510T370 429Q377 384 377 305V270H848L841 278Q813 309 792 344T763 396T755 416Q755 417 778 417H801Q817 367 856 323T943 250Q896 221 857 177T801 83H778Q755 83 755 84Q755 86 762 103T791 156T841 222L848 230H377V-27Q369 -41 359 -41H357Q342 -41 337 -25V230H286Q247 231 225 232T169 238T115 255T75 284T45 333T35 405ZM75 406Q75 322 123 296T300 270H337V319Q335 432 317 477T240 534Q232 535 197 535Q140 535 108 507T75 406\",8621:\"57 250Q159 311 200 417H246L242 407Q215 340 159 278L152 270H276L315 310Q354 349 358 351Q366 356 376 351Q378 350 455 273L530 196L606 273Q683 350 686 351Q694 354 703 351Q705 350 782 273L858 196L933 273Q1010 350 1012 351Q1022 356 1030 351Q1034 349 1073 310L1112 270H1236L1229 278Q1173 340 1146 407L1142 417H1188Q1233 306 1331 250Q1231 192 1188 83H1142L1146 93Q1173 160 1229 222L1236 230H1168Q1155 230 1139 230T1119 229Q1112 229 1108 229T1099 231T1092 233T1085 238T1078 245T1068 256T1056 269L1021 304L984 267Q948 230 910 191T867 149Q857 144 848 150Q844 151 770 227T694 304T618 228T540 150Q531 144 521 149Q517 152 479 191T404 267L367 304L332 269Q328 264 320 256T310 246T303 239T296 234T289 231T280 229T269 229Q265 229 249 229T220 230H152L159 222Q215 160 242 93L246 83H223L200 84L195 96Q152 190 57 250\",8622:\"491 272Q491 275 542 352T597 432Q602 437 609 437Q617 437 622 432T628 417T582 341L537 272L608 270H751L822 272L808 288Q786 313 761 355T733 414Q733 424 737 426T766 428H793L806 397Q829 354 864 314Q896 284 928 263Q942 257 942 250T928 237Q887 208 864 185Q829 147 806 103L793 74L766 72Q742 72 738 73T733 85Q735 102 756 137T797 198L817 225L822 230H511L457 148Q440 124 420 93Q404 68 400 64T389 60Q381 60 375 66T368 81Q368 88 415 159L462 230H175L188 214Q210 188 235 145T264 85Q264 75 260 74T231 72L206 74L191 103Q169 142 164 150Q130 195 64 239Q56 244 56 250T64 261Q115 294 142 323T191 397L206 428H231Q255 428 259 426T264 414Q260 397 235 355T188 288L175 272L331 270Q488 270 491 272\",8624:\"56 555Q74 567 79 570T107 592T141 625T170 667T198 722H221Q244 722 244 721Q244 718 236 699T207 647T161 587L151 576L291 575H292H293H294H296H297H298H299H300H301H302H304H305H306H307H308H309H310H311H312H314H315H316H317H318H319H320H321H322H323H324H325H327H328H329H330H331H332H333H334H335H336H337H338H339H340H341H342H343H345Q435 574 438 570L439 569L440 568Q444 564 444 287Q444 15 442 12Q436 0 424 0T406 12Q404 15 404 275V535H151L162 523Q187 495 207 462T236 410T244 389H198L193 402Q171 457 131 497T56 555\",8625:\"301 722Q339 618 443 555L437 551Q431 547 422 541T401 526T377 504T352 477T327 443T306 402L301 389H255Q255 392 263 410T291 461T337 523L348 535H95V275Q95 15 93 12Q87 0 75 0T57 12Q55 15 55 287Q55 564 59 568L60 569Q64 573 76 573T208 575L348 576L338 587Q314 613 294 646T264 698T255 721Q255 722 278 722H301\",8630:\"361 210Q373 210 373 182V177Q373 155 370 151T348 139Q303 118 267 84T216 28T201 1Q197 -1 196 -1Q189 -1 184 8Q166 39 143 64T99 104T61 129T32 144T19 150Q17 152 17 179Q17 203 21 208Q28 210 39 206Q106 178 157 135L175 119V126Q179 130 179 155Q182 173 193 201Q228 305 312 374T510 459Q532 461 551 461H567Q678 461 784 386Q835 344 861 301Q902 245 926 173T950 32Q950 15 944 8Q930 -6 917 8Q910 12 910 43Q901 208 801 314T561 421Q453 421 359 359Q300 319 263 258T217 126L216 125Q216 124 216 123T217 122Q219 122 229 131T260 156T301 181Q314 189 336 199T361 210\",8631:\"972 209Q980 209 981 204T982 179Q982 155 979 151T957 139Q915 121 878 86T815 8Q808 -1 803 -1Q801 -1 797 1Q797 6 783 28T732 84T650 139L628 150Q626 152 626 177Q626 201 630 206Q636 210 637 210Q650 210 697 181Q727 166 764 137L784 119L782 132Q767 239 689 318T499 417Q474 421 442 421Q343 421 261 369T130 219Q86 121 86 28Q86 15 79 8Q73 1 66 1T53 8Q46 15 46 30Q46 102 77 192T186 361Q274 443 386 459Q396 460 426 460Q515 460 588 431T703 361T773 271T812 187T822 132Q822 123 825 123Q936 209 972 209\",8634:\"369 543T369 563T397 583Q408 583 440 579L454 577L464 581Q492 592 516 609T552 638T565 650Q604 638 607 637Q606 636 598 628T585 614T570 601T548 584T523 568L510 560L516 558Q522 555 527 553T541 546T559 536T580 523T603 506T626 485Q722 384 722 250Q722 106 622 12T387 -83Q253 -83 155 12T56 250Q56 357 110 433T235 545Q244 550 252 550Q270 550 270 531Q270 522 261 515T238 501T202 477T159 433Q95 352 95 250Q95 131 178 45T388 -42Q511 -42 596 43T682 250Q682 340 636 408T522 511Q495 526 488 526Q488 525 488 525T487 522T485 515L490 506Q505 481 516 451T531 404T535 384L532 385Q529 386 524 387T513 390L491 397L488 408Q472 483 413 542L399 543Q369 543 369 563\",8635:\"170 637L213 650Q270 597 313 581L323 577L337 579Q369 583 380 583Q408 583 408 563T380 543H378L364 542Q305 483 289 408L286 397L264 390Q259 389 254 388T245 385L242 384Q242 387 246 403T261 450T287 506L292 515Q291 519 291 521T290 524T289 526Q284 526 265 517T216 486T160 434T114 354T95 249Q95 132 178 45T388 -42Q513 -42 597 44T682 250Q682 337 638 404T532 506Q529 508 525 510T519 514T515 516T511 519T509 522T508 526T507 531Q507 550 525 550Q533 550 542 545Q569 532 596 511T653 454T702 366T721 250Q721 151 672 74T547 -43T388 -83Q254 -83 155 12T56 250Q56 385 151 485Q164 498 179 509T205 528T228 542T247 551T260 558L267 560L254 568Q215 590 170 637\",8636:\"62 230Q56 236 55 244Q55 252 57 255T69 265Q114 292 151 326T208 391T243 448T265 491T273 509Q276 511 288 511Q304 511 306 505Q309 501 303 484Q293 456 279 430T251 383T223 344T196 313T173 291T156 276L148 270H929Q944 261 944 250T929 230H62\",8637:\"55 256Q56 264 62 270H929Q944 261 944 250T929 230H148Q149 229 165 215T196 185T231 145T270 87T303 16Q309 -1 306 -5Q304 -11 288 -11Q279 -11 276 -10T269 -4T264 10T253 36T231 75Q172 173 69 235Q59 242 57 245T55 256\",8638:\"188 258V694H208L215 682Q246 628 293 594T375 551V528Q375 505 374 505Q369 505 351 510T299 534T237 578L228 587V205Q228 -178 226 -182Q221 -194 208 -194T190 -182Q188 -178 188 258\",8639:\"41 551Q76 559 123 592T201 682L208 694H228V258Q228 -178 226 -182Q221 -194 208 -194T190 -182Q188 -178 188 205V587L179 578Q151 552 117 534T65 511T42 505Q41 505 41 528V551\",8640:\"691 500Q691 511 711 511Q720 511 723 510T730 504T735 490T746 464T768 425Q796 378 835 339T897 285T933 263Q941 258 942 256T944 245T937 230H70Q56 237 56 250T70 270H852Q802 308 762 364T707 455T691 500\",8641:\"56 237T56 250T70 270H937Q944 263 944 256Q944 251 944 250T943 246T940 242T933 238Q794 153 734 7Q729 -7 726 -9T711 -11Q695 -11 693 -5Q690 -1 696 16Q721 84 763 139T852 230H70Q56 237 56 250\",8642:\"190 682Q195 694 208 694T226 683Q228 679 228 296V-87L237 -78Q265 -52 299 -34T351 -11T374 -5Q375 -5 375 -28V-51Q340 -60 293 -92T215 -182L208 -194H188V242Q188 678 190 682\",8643:\"188 295V573Q188 657 189 672T200 692Q206 694 208 694Q221 694 226 683Q228 679 228 242V-194H208L201 -182Q170 -128 123 -94T41 -51V-28Q41 -5 42 -5Q47 -5 65 -10T117 -34T179 -78L188 -87V295\",8644:\"943 500Q895 471 856 427T801 333H778Q755 333 755 334Q755 336 762 353T791 406T841 472L848 480H459Q70 480 67 482Q55 488 55 500T67 518Q70 520 459 520H848L841 528Q813 559 792 594T763 646T755 666Q755 667 778 667H801Q817 617 856 573T943 500ZM56 167Q102 194 141 238T198 333H221Q244 333 244 332Q221 265 161 198L151 187H539Q928 187 930 186Q944 182 944 167Q944 155 934 149Q930 147 541 147H151L160 137Q185 110 205 77T235 24T244 1Q244 0 221 0H199Q158 106 56 167\",8646:\"56 500Q103 527 142 572T199 667H221Q244 667 244 666Q244 664 237 647T208 594T158 528L151 520H539Q928 520 932 518Q944 513 944 500T932 482Q928 480 539 480H151L158 472Q186 441 207 406T236 354T244 334Q244 333 221 333H199Q181 383 142 428T56 500ZM943 167Q835 101 801 0H778Q755 0 755 1T758 9T765 25T771 39Q800 94 839 137L848 147H458Q68 147 66 149Q55 154 55 167Q55 182 69 186Q71 187 460 187H848L838 198Q811 228 791 261T762 314L755 332Q755 333 778 333H801Q841 227 943 167\",8647:\"930 437Q944 426 944 416T934 399Q930 397 540 397H150L159 387Q185 360 205 328T234 277T243 252Q243 237 217 191T159 113L150 103H540Q930 103 934 101Q944 94 944 84Q944 71 930 64L540 63H151Q180 34 203 -2T236 -61L244 -83H198Q178 -31 142 11T66 77L55 83L65 89Q157 145 197 246Q199 250 190 269Q150 359 65 411L55 417L66 423Q106 447 142 489T198 583H244Q202 488 151 437H930\",8648:\"83 551Q190 590 250 694Q251 689 263 671T307 621T380 567Q409 551 416 551Q422 551 447 563T511 608T577 684L582 694Q642 591 749 551V528Q749 505 748 505Q745 505 724 515T669 546T612 590L602 599V-181Q595 -193 585 -193H582H581Q568 -193 565 -183L563 -179L562 209V598L552 589Q517 556 473 531T414 506H412Q411 506 393 514T361 530T324 553T280 589L270 598V-179Q255 -192 250 -193H247Q237 -193 230 -181V599L220 590Q197 567 164 546T110 515T84 505Q83 505 83 528V551\",8649:\"55 416Q55 427 70 437H848Q819 466 796 502T764 561L755 583H801Q821 531 857 489T933 423L944 417L934 411Q843 355 802 254Q800 250 809 231Q849 141 934 89L944 83L933 77Q893 53 857 11T801 -83H755Q797 12 848 63H459L70 64Q55 70 55 84Q55 94 65 101Q69 103 459 103H849L840 113Q806 148 779 196T756 254Q756 255 760 264T770 286T786 315T809 351T840 387L849 397H459Q69 397 65 399Q55 406 55 416\",8650:\"230 681Q240 694 251 694Q260 693 270 680V-98L280 -89Q297 -73 314 -60T348 -38T374 -24T397 -13T412 -6H414Q428 -6 473 -32T552 -89L562 -98V291L563 680Q570 693 582 693Q593 694 602 681V-99L612 -90Q635 -68 668 -47T723 -15T748 -5Q749 -5 749 -28V-51Q642 -91 582 -194L577 -184Q551 -141 512 -108T447 -63T416 -51T385 -63T321 -108T255 -184L250 -194Q189 -89 83 -51V-28Q83 -5 84 -5Q88 -5 109 -15T164 -46T220 -90L230 -99V681\",8651:\"195 504L198 514H221Q244 514 244 512Q244 508 239 490T215 437T171 376L162 367H545Q928 367 932 365Q944 360 944 347T932 329Q928 327 492 327H55V347L67 354Q113 379 146 420T195 504ZM67 171Q70 173 507 173H944V153L932 146Q839 95 804 -4L801 -14H778Q755 -14 755 -12Q768 59 828 124L837 133H454Q71 133 67 135Q55 140 55 153Q55 165 67 171\",8652:\"691 660Q691 671 711 671Q720 671 723 670T730 664T735 650T746 624T768 585Q797 538 836 499T897 445T933 423Q941 418 942 416T944 405T937 390H70Q56 397 56 410T70 430H852Q802 468 762 524T707 615T691 660ZM55 256Q56 264 62 270H929Q944 261 944 250T929 230H148Q149 229 165 215T196 185T231 145T270 87T303 16Q309 -1 306 -5Q304 -11 288 -11Q279 -11 276 -10T269 -4T264 10T253 36T231 75Q172 173 69 235Q59 242 57 245T55 256\",8653:\"397 525Q410 525 414 524T418 516Q418 506 394 467T331 381L319 367H473L624 369L657 445Q674 487 684 507T699 531T709 534Q717 534 722 528T728 516Q728 510 695 434Q689 418 683 402T672 377T668 367H928Q942 355 942 347Q942 341 928 327H791Q651 327 651 325Q649 324 620 251T586 174Q586 172 757 172H928Q942 158 942 152Q942 143 928 132H568L537 54Q510 -9 503 -22T486 -35Q479 -35 473 -29T466 -17T495 61L526 132H319L331 118Q364 81 391 37T418 -17Q418 -23 415 -24T401 -26Q398 -26 397 -26L384 -24L377 -13Q344 49 301 97T218 170T143 210T84 233T55 245Q54 253 59 256T86 267Q281 327 377 512L384 525H397ZM606 325Q606 327 439 327H275Q258 312 179 265L148 249Q228 206 262 181L275 172H544L575 247L606 325\",8654:\"395 -24T395 -19T417 57T440 132H255L266 116Q308 64 340 -6Q342 -17 337 -21Q335 -26 320 -26T302 -19Q302 -15 294 4T265 54T217 117T145 182T49 236Q30 243 33 254Q40 261 49 263Q98 283 142 315T214 379T263 442T293 493T302 519Q305 525 320 525T337 521Q342 516 340 505Q308 435 266 383L255 370L384 367H515Q561 522 569 530Q574 534 580 534Q587 534 594 528T602 516Q602 512 580 441T557 367H651L742 370L731 383Q689 435 657 505Q655 516 660 521Q662 525 677 525T695 519Q695 515 703 496T732 446T780 383T853 317T949 263Q967 258 964 245Q959 240 949 236Q897 215 852 182T779 116T731 52T703 3T695 -19Q692 -26 677 -26T660 -21Q655 -17 657 -6Q670 21 682 42T702 77T717 99T728 114T735 122T739 126T740 130T613 132H482L460 54Q440 -9 433 -23T415 -37Q408 -37 402 -31ZM502 325Q502 327 360 327H217L195 310Q173 291 120 256L111 250Q114 248 143 229T195 190L217 172H335L453 174L502 325ZM886 250Q885 251 865 263T831 286T802 310L780 327H544L535 299Q531 283 511 223L495 174L637 172H780L802 190Q843 225 877 243L886 250\",8655:\"346 174Q348 176 378 249T411 325Q411 327 239 327H68Q55 342 55 347Q55 354 68 367H428L459 445Q487 509 494 521T510 534Q517 534 524 527T531 516Q531 515 502 438L471 367H677L666 381Q631 421 605 463T578 516Q578 522 582 523T599 525H615L619 512Q659 437 714 383T812 309T896 272T942 254Q943 246 938 243T911 232Q718 172 619 -13L615 -24L599 -26Q578 -26 578 -17Q578 -11 587 6T617 53T666 118L677 132H373L339 54Q323 12 313 -8T298 -32T288 -35Q280 -35 275 -29T269 -17Q269 -14 298 57T328 132H68Q55 145 55 152Q55 156 56 158T62 165T68 172H206Q346 172 346 174ZM848 249Q763 297 735 318L722 327H455L422 252L391 174Q391 172 557 172H722L735 181Q773 210 819 234L848 249\",8656:\"944 153Q944 140 929 133H318L328 123Q379 69 414 0Q419 -13 419 -17Q419 -24 399 -24Q388 -24 385 -23T377 -12Q332 77 253 144T72 237Q62 240 59 242T56 250T59 257T70 262T89 268T119 278T160 296Q303 366 377 512Q382 522 385 523T401 525Q419 524 419 515Q419 510 414 500Q379 431 328 377L318 367H929Q944 359 944 347Q944 336 930 328L602 327H274L264 319Q225 289 147 250Q148 249 165 241T210 217T264 181L274 173H930Q931 172 933 171T936 169T938 167T941 164T942 162T943 158T944 153\",8657:\"228 -179Q227 -180 226 -182T223 -186T221 -189T218 -192T214 -193T208 -194Q196 -194 189 -181L188 125V430L176 419Q122 369 59 338Q46 330 40 330Q38 330 31 337V350Q31 362 33 365T46 374Q60 381 77 390T128 426T190 484T247 567T292 677Q295 688 298 692Q302 694 305 694Q313 694 318 677Q334 619 363 568T420 485T481 427T532 391T564 374Q575 368 577 365T579 350V337Q572 330 570 330Q564 330 551 338Q487 370 435 419L423 430L422 125V-181Q409 -194 401 -194Q397 -194 394 -193T388 -189T385 -184T382 -180V-177V475L373 487Q331 541 305 602Q304 601 300 591T290 571T278 548T260 519T238 488L229 476L228 148V-179\",8658:\"580 514Q580 525 596 525Q601 525 604 525T609 525T613 524T615 523T617 520T619 517T622 512Q659 438 720 381T831 300T927 263Q944 258 944 250T935 239T898 228T840 204Q696 134 622 -12Q618 -21 615 -22T600 -24Q580 -24 580 -17Q580 -13 585 0Q620 69 671 123L681 133H70Q56 140 56 153Q56 168 72 173H725L735 181Q774 211 852 250Q851 251 834 259T789 283T735 319L725 327H72Q56 332 56 347Q56 360 70 367H681L671 377Q638 412 609 458T580 514\",8659:\"401 694Q412 694 422 681V375L423 70L435 81Q487 130 551 162Q564 170 570 170Q572 170 579 163V150Q579 138 577 135T564 126Q541 114 518 99T453 48T374 -46T318 -177Q313 -194 305 -194T293 -178T272 -119T225 -31Q158 70 46 126Q35 132 33 135T31 150V163Q38 170 40 170Q46 170 59 162Q122 131 176 81L188 70V375L189 681Q199 694 208 694Q219 694 228 680V352L229 25L238 12Q279 -42 305 -102Q344 -23 373 13L382 25V678Q387 692 401 694\",8660:\"308 524Q318 526 323 526Q340 526 340 514Q340 507 336 499Q326 476 314 454T292 417T274 391T260 374L255 368Q255 367 500 367Q744 367 744 368L739 374Q734 379 726 390T707 416T685 453T663 499Q658 511 658 515Q658 525 680 525Q687 524 690 523T695 519T701 507Q766 359 902 287Q921 276 939 269T961 259T966 250Q966 246 965 244T960 240T949 236T930 228T902 213Q763 137 701 -7Q697 -16 695 -19T690 -23T680 -25Q658 -25 658 -15Q658 -11 663 1Q673 24 685 46T707 83T725 109T739 126L744 132Q744 133 500 133Q255 133 255 132L260 126Q265 121 273 110T292 84T314 47T336 1Q341 -11 341 -15Q341 -25 319 -25Q312 -24 309 -23T304 -19T298 -7Q233 141 97 213Q83 221 70 227T51 235T41 239T35 243T34 250T35 256T40 261T51 265T70 273T97 287Q235 363 299 509Q305 522 308 524ZM792 319L783 327H216Q183 294 120 256L110 250L120 244Q173 212 207 181L216 173H783L792 181Q826 212 879 244L889 250L879 256Q826 288 792 319\",8661:\"290 755Q298 772 305 772T318 757T343 706T393 633Q431 588 473 558T545 515T579 497V484Q579 464 570 464Q564 464 550 470Q485 497 423 550L422 400V100L423 -50Q485 3 550 30Q565 36 570 36Q579 36 579 16V3Q575 -1 549 -12T480 -53T393 -132Q361 -172 342 -208T318 -258T305 -272T293 -258T268 -208T217 -132Q170 -80 128 -51T61 -12T31 3V16Q31 36 40 36Q46 36 61 30Q86 19 109 6T146 -18T173 -38T188 -50V550Q186 549 173 539T147 519T110 495T61 470Q46 464 40 464Q31 464 31 484V497Q34 500 63 513T135 557T217 633Q267 692 290 755ZM374 598Q363 610 351 625T332 651T316 676T305 695L294 676Q282 657 267 636T236 598L228 589V-89L236 -98Q247 -110 259 -125T278 -151T294 -176T305 -195L316 -176Q328 -157 343 -136T374 -98L382 -89V589L374 598\",8666:\"944 54Q942 44 929 36H372Q372 34 377 26T395 -4T422 -58Q442 -109 442 -110T408 -111H374L370 -100Q282 124 87 243L76 250L87 257Q284 377 370 600L374 611H408Q442 611 442 610Q423 550 381 480Q380 478 379 475T376 471T374 468T372 465V464H929Q942 456 944 446Q944 442 943 439T941 434T938 430T935 428T931 426T928 424H344L336 414Q277 336 200 277L191 270H560Q929 270 933 268Q944 262 944 250Q944 237 933 232Q929 230 560 230H191L200 223Q279 162 336 86L344 76H928Q929 76 931 75T934 73T938 70T941 66T943 61T944 54\",8667:\"56 250Q56 260 68 270H808L799 277Q720 338 663 414L655 424H363Q71 424 68 426Q55 432 55 444T68 462Q71 464 349 464H627Q627 466 622 474T604 504T577 558Q557 609 557 610T591 611H626L629 600Q717 376 912 257L923 250L912 243Q715 123 629 -100L626 -111H591Q557 -111 557 -110Q576 -50 618 20Q619 22 620 25T623 29T625 32T626 35L627 36H349Q71 36 68 38Q55 44 55 56T68 74Q71 76 363 76H655L663 86Q722 164 799 223L808 230H438L68 231Q56 236 56 250\",8669:\"76 230Q68 230 62 237T56 250Q56 257 63 264T91 291Q102 300 108 306L159 351Q168 356 177 351L218 316L303 239L353 195Q376 214 403 239L488 316L529 351Q538 356 546 351Q548 350 594 310L638 270H848L841 278Q813 309 792 344T763 396T755 416Q755 417 778 417H801Q817 367 856 323T943 250Q895 221 856 177T801 83H778Q755 83 755 84Q755 86 762 103T791 156T841 222L848 230H737Q625 230 622 232Q620 233 599 251T558 288L537 306Q537 305 451 228T362 149Q353 146 345 149Q341 150 255 227T169 306Q167 306 129 270Q123 265 115 257T102 245T93 237T84 232T76 230\",8672:\"292 419Q292 400 261 347T211 275H306H364Q400 275 411 271T422 250T411 230T366 225H306H211Q214 222 232 197T271 136T292 82Q292 71 285 68T262 64H250H241Q221 64 216 67T205 83Q186 127 153 167T78 230Q64 238 64 250Q64 258 69 263T82 272T106 288T139 318Q162 342 177 365T198 402T209 425T223 436Q224 437 252 437H258Q292 437 292 419ZM501 237T501 250T515 270H819Q834 262 834 250T819 230H515Q501 237 501 250ZM918 237T918 250T932 270H1236Q1251 262 1251 250T1236 230H932Q918 237 918 250\",8674:\"84 237T84 250T98 270H402Q417 262 417 250T402 230H98Q84 237 84 250ZM501 237T501 250T515 270H819Q834 262 834 250T819 230H515Q501 237 501 250ZM1022 417Q1022 437 1055 437H1067Q1090 437 1097 434T1109 417Q1128 373 1161 333T1236 270Q1251 261 1251 250Q1251 241 1244 236T1216 217T1175 182Q1149 155 1133 128T1109 85T1097 66Q1093 64 1065 64H1053Q1031 64 1025 72T1027 100Q1036 124 1049 147T1073 185T1091 210T1101 223L1103 225H1008H950Q914 225 903 229T892 250T903 270T948 275H1008H1103L1101 277Q1100 280 1091 291T1067 325T1039 374Q1022 408 1022 417\",8704:\"0 673Q0 684 7 689T20 694Q32 694 38 680T82 567L126 451H430L473 566Q483 593 494 622T512 668T519 685Q524 694 538 694Q556 692 556 674Q556 670 426 329T293 -15Q288 -22 278 -22T263 -15Q260 -11 131 328T0 673ZM414 410Q414 411 278 411T142 410L278 55L414 410\",8705:\"404 269Q412 269 418 267T428 261T435 253T441 245L444 240V172Q444 103 443 96Q440 81 431 65T403 27T344 -7T250 -21T156 -8T97 27T69 65T58 96Q56 103 56 413Q56 722 58 729Q74 822 215 845Q221 846 229 846H243Q282 846 290 845Q422 826 443 729Q444 722 444 653V586L442 583Q441 580 440 578T436 573T430 567T423 562T415 558T404 556Q377 556 367 583Q364 590 364 654V719Q363 721 360 726T355 733Q326 766 250 766H249Q235 766 219 765T174 752T137 719V107Q145 83 178 71T251 58H254Q340 58 364 107V172Q364 176 364 187T363 204Q363 269 404 269\",8706:\"202 508Q179 508 169 520T158 547Q158 557 164 577T185 624T230 675T301 710L333 715H345Q378 715 384 714Q447 703 489 661T549 568T566 457Q566 362 519 240T402 53Q321 -22 223 -22Q123 -22 73 56Q42 102 42 148V159Q42 276 129 370T322 465Q383 465 414 434T455 367L458 378Q478 461 478 515Q478 603 437 639T344 676Q266 676 223 612Q264 606 264 572Q264 547 246 528T202 508ZM430 306Q430 372 401 400T333 428Q270 428 222 382Q197 354 183 323T150 221Q132 149 132 116Q132 21 232 21Q244 21 250 22Q327 35 374 112Q389 137 409 196T430 306\",8707:\"56 661T56 674T70 694H487Q497 686 500 679V15Q497 10 487 1L279 0H70Q56 7 56 20T70 40H460V327H84Q70 334 70 347T84 367H460V654H70Q56 661 56 674\",8709:\"331 696Q335 708 339 722T345 744T350 759T357 769T367 772Q374 772 381 767T388 754Q388 746 377 712L366 673L378 661Q460 575 460 344Q460 281 456 234T432 126T373 27Q319 -22 250 -22Q214 -22 180 -7Q168 -3 168 -4L159 -33Q148 -71 142 -75Q138 -78 132 -78Q124 -78 118 -72T111 -60Q111 -52 122 -18L133 21L125 29Q39 111 39 344Q39 596 137 675Q187 716 251 716Q265 716 278 714T296 710T315 703T331 696ZM276 676Q264 679 246 679Q196 679 159 631Q134 597 128 536T121 356Q121 234 127 174T151 80L234 366Q253 430 275 506T308 618L318 654Q318 656 294 669L276 676ZM181 42Q207 16 250 16Q291 16 324 47Q354 78 366 136T378 356Q378 470 372 528T349 616L348 613Q348 611 264 326L181 42\",8710:\"51 0Q46 4 46 7Q46 9 215 357T388 709Q391 716 416 716Q439 716 444 709Q447 705 616 357T786 7Q786 4 781 0H51ZM507 344L384 596L137 92L383 91H630Q630 93 507 344\",8711:\"46 676Q46 679 51 683H781Q786 679 786 676Q786 674 617 326T444 -26Q439 -33 416 -33T388 -26Q385 -22 216 326T46 676ZM697 596Q697 597 445 597T193 596Q195 591 319 336T445 80L697 596\",8712:\"84 250Q84 372 166 450T360 539Q361 539 377 539T419 540T469 540H568Q583 532 583 520Q583 511 570 501L466 500Q355 499 329 494Q280 482 242 458T183 409T147 354T129 306T124 272V270H568Q583 262 583 250T568 230H124V228Q124 207 134 177T167 112T231 48T328 7Q355 1 466 0H570Q583 -10 583 -20Q583 -32 568 -40H471Q464 -40 446 -40T417 -41Q262 -41 172 45Q84 127 84 250\",8713:\"196 25Q84 109 84 250Q84 372 166 450T360 539Q361 539 375 539T413 540T460 540L547 707Q550 716 563 716Q570 716 575 712T581 703T583 696T505 540H568Q583 532 583 520Q583 511 570 501L484 500L366 270H568Q583 262 583 250T568 230H346L247 38Q284 16 328 7Q355 1 466 0H570Q583 -10 583 -20Q583 -32 568 -40H471Q464 -40 447 -40T419 -41Q304 -41 228 3Q117 -211 115 -212Q111 -215 104 -215T92 -212T86 -204T84 -197Q84 -190 89 -183L196 25ZM214 61L301 230H124V228Q124 196 147 147T214 61ZM321 270L440 500Q353 499 329 494Q280 482 242 458T183 409T147 354T129 306T124 272V270H321\",8715:\"83 520Q83 532 98 540H195Q202 540 220 540T249 541Q404 541 494 455Q582 374 582 250Q582 165 539 99T434 0T304 -39Q297 -40 195 -40H98Q83 -32 83 -20Q83 -10 96 0H200Q311 1 337 6Q369 14 401 28Q422 39 445 55Q484 85 508 127T537 191T542 228V230H98Q84 237 84 250T98 270H542V272Q542 280 539 295T527 336T497 391T445 445Q422 461 401 472Q386 479 374 483T347 491T325 495T298 498T273 499T239 500T200 500L96 501Q83 511 83 520\",8717:\"154 -1Q122 -1 112 3T102 26Q102 63 158 63H178Q192 64 206 65T228 66T240 68Q301 85 324 146L329 157H244Q158 157 153 161Q149 162 145 169T140 183Q140 201 158 215L167 221H256L344 223L349 237Q352 262 352 287Q352 308 351 315Q341 352 315 368T256 385Q231 385 206 376T166 356T149 346Q143 346 138 364T132 388Q132 396 147 406Q198 440 252 440Q291 440 318 435Q421 404 451 301Q456 288 456 248V234Q456 151 391 86Q330 25 240 3Q212 -1 154 -1\",8719:\"158 656Q147 684 131 694Q110 707 69 710H55V750H888V710H874Q840 708 820 698T795 678T786 656V-155Q798 -206 874 -210H888V-250H570V-210H584Q618 -208 638 -197T663 -178T673 -155V710H270V277L271 -155Q283 -206 359 -210H373V-250H55V-210H69Q103 -208 123 -197T148 -178T158 -155V656\",8720:\"158 656Q147 684 131 694Q110 707 69 710H55V750H373V710H359Q325 708 305 698T280 678T271 656L270 223V-210H673V656Q666 672 663 679T639 697T584 710H570V750H888V710H874Q840 708 820 698T795 678T786 656V-155Q798 -206 874 -210H888V-250H55V-210H69Q103 -208 123 -197T148 -178T158 -155V656\",8721:\"61 748Q64 750 489 750H913L954 640Q965 609 976 579T993 533T999 516H979L959 517Q936 579 886 621T777 682Q724 700 655 705T436 710H319Q183 710 183 709Q186 706 348 484T511 259Q517 250 513 244L490 216Q466 188 420 134T330 27L149 -187Q149 -188 362 -188Q388 -188 436 -188T506 -189Q679 -189 778 -162T936 -43Q946 -27 959 6H999L913 -249L489 -250Q65 -250 62 -248Q56 -246 56 -239Q56 -234 118 -161Q186 -81 245 -11L428 206Q428 207 242 462L57 717L56 728Q56 744 61 748\",8722:\"84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250\",8723:\"56 467T56 480T70 500H707Q722 492 722 480T707 460H409V187H707Q722 179 722 167Q722 154 707 147H409V0V-93Q409 -144 406 -155T389 -166Q376 -166 372 -155T368 -105Q368 -96 368 -62T369 -2V147H70Q56 154 56 167T70 187H369V460H70Q56 467 56 480\",8724:\"339 717Q339 739 354 752T388 766Q410 766 424 751T439 716T424 681T390 666Q369 666 354 681T339 717ZM57 237T57 250T71 270H369V425L370 581Q380 594 389 594Q402 594 409 579V270H707Q722 262 722 250T707 230H409V-79Q401 -93 391 -93H389H387Q375 -93 369 -79V230H71Q57 237 57 250\",8725:\"423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750\",8726:\"56 731Q56 740 62 745T75 750Q85 750 92 740Q96 733 270 255T444 -231Q444 -239 438 -244T424 -250Q414 -250 407 -240Q404 -236 230 242T56 731\",8727:\"229 286Q216 420 216 436Q216 454 240 464Q241 464 245 464T251 465Q263 464 273 456T283 436Q283 419 277 356T270 286L328 328Q384 369 389 372T399 375Q412 375 423 365T435 338Q435 325 425 315Q420 312 357 282T289 250L355 219L425 184Q434 175 434 161Q434 146 425 136T401 125Q393 125 383 131T328 171L270 213Q283 79 283 63Q283 53 276 44T250 35Q231 35 224 44T216 63Q216 80 222 143T229 213L171 171Q115 130 110 127Q106 124 100 124Q87 124 76 134T64 161Q64 166 64 169T67 175T72 181T81 188T94 195T113 204T138 215T170 230T210 250L74 315Q65 324 65 338Q65 353 74 363T98 374Q106 374 116 368T171 328L229 286\",8728:\"55 251Q55 328 112 386T249 444T386 388T444 249Q444 171 388 113T250 55Q170 55 113 112T55 251ZM245 403Q188 403 142 361T96 250Q96 183 141 140T250 96Q284 96 313 109T354 135T375 160Q403 197 403 250Q403 313 360 358T245 403\",8729:\"55 251Q55 328 112 386T249 444T386 388T444 249Q444 171 388 113T250 55Q170 55 113 112T55 251\",8730:\"95 178Q89 178 81 186T72 200T103 230T169 280T207 309Q209 311 212 311H213Q219 311 227 294T281 177Q300 134 312 108L397 -77Q398 -77 501 136T707 565T814 786Q820 800 834 800Q841 800 846 794T853 782V776L620 293L385 -193Q381 -200 366 -200Q357 -200 354 -197Q352 -195 256 15L160 225L144 214Q129 202 113 190T95 178\",8733:\"56 124T56 216T107 375T238 442Q260 442 280 438T319 425T352 407T382 385T406 361T427 336T442 315T455 297T462 285L469 297Q555 442 679 442Q687 442 722 437V398H718Q710 400 694 400Q657 400 623 383T567 343T527 294T503 253T495 235Q495 231 520 192T554 143Q625 44 696 44Q717 44 719 46H722V-5Q695 -11 678 -11Q552 -11 457 141Q455 145 454 146L447 134Q362 -11 235 -11Q157 -11 107 56ZM93 213Q93 143 126 87T220 31Q258 31 292 48T349 88T389 137T413 178T421 196Q421 200 396 239T362 288Q322 345 288 366T213 387Q163 387 128 337T93 213\",8734:\"55 217Q55 305 111 373T254 442Q342 442 419 381Q457 350 493 303L507 284L514 294Q618 442 747 442Q833 442 888 374T944 214Q944 128 889 59T743 -11Q657 -11 580 50Q542 81 506 128L492 147L485 137Q381 -11 252 -11Q166 -11 111 57T55 217ZM907 217Q907 285 869 341T761 397Q740 397 720 392T682 378T648 359T619 335T594 310T574 285T559 263T548 246L543 238L574 198Q605 158 622 138T664 94T714 61T765 51Q827 51 867 100T907 217ZM92 214Q92 145 131 89T239 33Q357 33 456 193L425 233Q364 312 334 337Q285 380 233 380Q171 380 132 331T92 214\",8736:\"71 0L68 2Q65 3 63 5T58 11T55 20Q55 22 57 28Q67 43 346 361Q397 420 474 508Q595 648 616 671T647 694T661 688T666 674Q666 668 663 663Q662 662 627 622T524 503T390 350L120 41L386 40H653Q666 30 666 20Q666 8 651 0H71\",8737:\"71 0L68 2Q65 3 63 5T58 11T55 20Q55 22 57 28Q64 38 348 373T638 712Q644 714 646 714Q653 714 659 709T666 694V693Q666 687 633 647Q619 631 576 580Q528 524 495 485Q336 296 329 289Q328 288 348 264T395 182T433 54L434 40H651Q666 32 666 20T651 0H436Q431 -20 416 -20Q400 -20 396 -4V0H71ZM394 40Q394 51 389 76T366 149T319 234L302 256L119 41L256 40H394\",8738:\"666 -32Q666 -51 646 -51Q639 -51 365 85L75 228Q55 238 55 250Q55 257 59 262T68 268L72 270L611 536Q642 551 647 551T659 547T666 532Q666 521 657 515L525 449Q525 448 535 424T556 352T566 250T556 148T536 77T525 51L657 -15Q666 -21 666 -32ZM526 250Q526 297 517 342T499 409T488 431Q487 431 304 341T121 250T304 159T488 69Q526 143 526 250\",8739:\"139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139\",8740:\"118 737Q131 750 138 750L151 746L158 739V579L160 421L213 470Q269 519 276 519Q284 519 290 513T296 499V498Q296 493 291 488T244 445Q225 428 213 417L158 368V-239Q143 -252 136 -252L124 -248L120 -241L118 44V328L62 279Q4 231 0 230Q-8 230 -14 236T-20 250Q-20 257 -11 265T62 332L118 384V737\",8741:\"133 736Q138 750 153 750Q164 750 170 739Q172 735 172 250T170 -239Q164 -250 152 -250Q144 -250 138 -244L137 -243Q133 -241 133 -179T132 250Q132 731 133 736ZM329 739Q334 750 346 750Q353 750 361 744L362 743Q366 741 366 679T367 250T367 -178T362 -243L361 -244Q355 -250 347 -250Q335 -250 329 -239Q327 -235 327 250T329 739\",8742:\"131 737Q134 739 138 743T144 748T151 750T171 737V199L327 357V737Q340 750 347 750Q351 750 353 749T360 743T367 737V397L429 457Q493 518 498 519Q506 519 512 512T518 500Q518 489 442 417L367 339V-237Q352 -250 346 -250L333 -243L327 -237V301L171 143V-237Q156 -250 151 -250T131 -237V101L69 41Q24 -3 15 -12T0 -21Q-8 -21 -14 -14T-20 -2Q-20 5 -7 19T56 81L131 159V737\",8743:\"318 591Q325 598 333 598Q344 598 348 591Q349 590 414 445T545 151T611 -4Q609 -22 591 -22Q588 -22 586 -21T581 -20T577 -17T575 -13T572 -9T570 -4L333 528L96 -4Q87 -20 80 -21Q78 -22 75 -22Q57 -22 55 -4Q55 2 120 150T251 444T318 591\",8744:\"55 580Q56 587 61 592T75 598Q86 598 96 580L333 48L570 580Q579 596 586 597Q588 598 591 598Q609 598 611 580Q611 574 546 426T415 132T348 -15Q343 -22 333 -22T318 -15Q317 -14 252 131T121 425T55 580\",8745:\"88 -21T75 -21T55 -7V200Q55 231 55 280Q56 414 60 428Q61 430 61 431Q77 500 152 549T332 598Q443 598 522 544T610 405Q611 399 611 194V-7Q604 -22 591 -22Q582 -22 572 -9L570 405Q563 433 556 449T529 485Q498 519 445 538T334 558Q251 558 179 518T96 401Q95 396 95 193V-7Q88 -21 75 -21\",8746:\"591 598H592Q604 598 611 583V376Q611 345 611 296Q610 162 606 148Q605 146 605 145Q586 68 507 23T333 -22Q268 -22 209 -1T106 66T56 173Q55 180 55 384L56 585Q66 598 75 598Q85 598 95 585V378L96 172L98 162Q112 95 181 57T332 18Q415 18 487 58T570 175Q571 180 571 383V583Q579 598 591 598\",8747:\"151 -112Q151 -150 106 -161Q106 -165 114 -172T134 -179Q155 -179 170 -146Q181 -120 188 -64T206 101T232 310Q256 472 277 567Q308 716 392 716Q434 716 453 681T472 613Q472 590 458 577T424 564Q404 564 390 578T376 612Q376 650 421 661Q421 663 418 667T407 675T393 679Q387 679 380 675Q360 665 350 619T326 438Q302 190 253 -57Q235 -147 201 -186Q174 -213 138 -216Q93 -216 74 -181T55 -113Q55 -91 69 -78T103 -64Q123 -64 137 -78T151 -112\",8748:\"113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q220 -247 232 -218T251 -133T262 -15T276 155T297 367Q300 390 305 438T314 512T325 580T340 647T361 703T390 751T428 784T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q475 768 460 756T434 716T418 652T407 559T398 444T387 300T369 133Q349 -38 337 -102T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244ZM460 -244Q460 -246 466 -251T486 -263T514 -269Q532 -269 546 -260Q567 -247 579 -218T598 -133T609 -15T623 155T644 367Q647 390 652 438T661 512T672 580T687 647T708 703T737 751T775 784T826 804Q828 804 835 804T848 805Q899 802 928 769T957 695Q957 669 941 657T908 645Q889 645 874 658T859 694Q859 705 863 714T873 729T885 737T895 742L899 743Q899 745 892 751T872 762T845 768Q822 768 807 756T781 716T765 652T754 559T745 444T734 300T716 133Q696 -38 684 -102T650 -207Q603 -306 516 -306Q466 -306 434 -272T402 -196Q402 -170 418 -158T451 -146Q470 -146 485 -159T500 -195Q500 -206 496 -215T486 -230T474 -238T464 -242L460 -244\",8749:\"113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q220 -247 232 -218T251 -133T262 -15T276 155T297 367Q300 390 305 438T314 512T325 580T340 647T361 703T390 751T428 784T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q475 768 460 756T434 716T418 652T407 559T398 444T387 300T369 133Q349 -38 337 -102T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244ZM460 -244Q460 -246 466 -251T486 -263T514 -269Q532 -269 546 -260Q567 -247 579 -218T598 -133T609 -15T623 155T644 367Q647 390 652 438T661 512T672 580T687 647T708 703T737 751T775 784T826 804Q828 804 835 804T848 805Q899 802 928 769T957 695Q957 669 941 657T908 645Q889 645 874 658T859 694Q859 705 863 714T873 729T885 737T895 742L899 743Q899 745 892 751T872 762T845 768Q822 768 807 756T781 716T765 652T754 559T745 444T734 300T716 133Q696 -38 684 -102T650 -207Q603 -306 516 -306Q466 -306 434 -272T402 -196Q402 -170 418 -158T451 -146Q470 -146 485 -159T500 -195Q500 -206 496 -215T486 -230T474 -238T464 -242L460 -244ZM807 -244Q807 -246 813 -251T833 -263T861 -269Q880 -269 893 -260Q914 -247 926 -218T945 -133T956 -15T970 155T991 367Q994 390 999 438T1008 512T1019 580T1034 647T1055 703T1084 751T1122 784T1173 804Q1175 804 1182 804T1195 805Q1246 802 1275 769T1304 695Q1304 669 1288 657T1255 645Q1236 645 1221 658T1206 694Q1206 705 1210 714T1220 729T1232 737T1242 742L1246 743Q1246 745 1239 751T1219 762T1192 768Q1169 768 1154 756T1128 716T1112 652T1101 559T1092 444T1081 300T1063 133Q1043 -38 1031 -102T997 -207Q950 -306 863 -306Q813 -306 781 -272T749 -196Q749 -170 765 -158T798 -146Q817 -146 832 -159T847 -195Q847 -206 843 -215T833 -230T821 -238T811 -242L807 -244\",8750:\"269 74L256 80Q244 85 227 97T191 128T161 179T148 250Q148 332 199 379T302 433L306 434L307 444Q309 456 313 495T321 553T331 607T345 664T365 712T393 756T431 785T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q471 768 454 752T427 693T414 626T406 536Q405 530 405 527L397 425L404 422Q410 419 421 413T445 399T470 376T494 345T511 303T518 250Q518 205 502 169T460 112T410 80T364 66L360 65L359 55Q357 38 353 4T346 -43T340 -81T333 -118T326 -148T316 -179T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q231 -241 242 -183T266 33L269 74ZM272 122Q272 156 300 391Q300 392 299 392Q287 392 263 379T213 331T187 249Q187 211 205 180T239 137T272 116V122ZM366 107Q378 107 402 119T453 167T479 249Q479 340 394 383V377Q394 375 394 374T393 371T393 366T392 357T391 342T389 321T386 291T382 251T377 199T369 133Q366 112 366 107\",8756:\"273 411Q273 437 291 454T334 471Q358 471 375 454T393 411T376 368T333 351Q307 351 290 368T273 411ZM84 38Q110 38 126 21T143 -22Q143 -46 127 -64T83 -82Q57 -82 41 -65T24 -22Q24 4 41 21T84 38ZM524 -22Q524 4 541 21T584 38Q608 38 625 21T643 -22Q643 -45 627 -63T583 -82Q557 -82 541 -65T524 -22\",8757:\"23 411Q23 437 41 454T84 471Q108 471 125 454T143 411T126 368T83 351Q57 351 40 368T23 411ZM523 411Q523 437 541 454T584 471Q608 471 625 454T643 411T626 368T583 351Q557 351 540 368T523 411ZM274 -22Q274 4 291 21T334 38Q356 38 374 22T392 -22T375 -65T333 -82Q307 -82 291 -65T274 -22\",8764:\"55 166Q55 241 101 304T222 367Q260 367 296 349T362 304T421 252T484 208T554 189Q616 189 655 236T694 338Q694 350 698 358T708 367Q722 367 722 334Q722 260 677 197T562 134H554Q517 134 481 152T414 196T355 248T292 293T223 311Q179 311 145 286Q109 257 96 218T80 156T69 133Q55 133 55 166\",8765:\"222 133Q147 133 102 197T56 335Q56 362 66 365Q71 369 77 364Q83 356 84 335T90 298Q102 254 137 222T223 189Q258 189 292 206T355 250T413 301T477 346T550 367Q628 367 673 309T722 171Q722 133 708 133Q703 133 699 141T694 162Q694 220 655 265T555 311Q519 311 485 293T421 248T363 196T298 152T222 133\",8768:\"55 569Q55 583 83 583Q122 583 151 565T194 519T215 464T222 411Q222 360 194 304T139 193T111 89Q111 38 134 -7T195 -55Q222 -57 222 -69Q222 -83 189 -83Q130 -83 93 -33T55 90Q55 130 72 174T110 252T148 328T166 411Q166 462 144 507T83 555Q55 556 55 569\",8769:\"220 366Q258 366 297 347T361 308T391 288Q394 288 464 370Q494 407 510 425T535 454T546 465T552 467H553Q560 467 566 461T573 448Q573 439 499 350Q424 266 424 261Q424 259 442 247T492 222T554 209Q607 209 646 243Q671 268 680 295T690 341T702 366Q719 366 719 314Q716 265 695 226Q682 199 664 179Q614 132 555 132Q517 132 477 151T412 190T383 210T347 172T278 89T233 37Q228 32 220 32Q210 32 206 38T201 48Q201 57 266 137Q272 144 275 148Q351 231 351 237Q351 239 333 251T283 276T221 289Q159 289 123 248T86 166Q86 156 82 145T73 132Q55 132 55 172Q55 220 79 272Q95 301 111 319Q161 366 220 366\",8770:\"55 439T55 443T56 449T62 456T68 463H706Q720 449 720 443T706 423H68Q55 439 55 443ZM56 72Q56 112 73 152T130 225T224 257Q259 257 294 240T360 199T419 149T484 107T553 90Q603 90 643 125T691 223Q693 257 704 257Q717 257 717 221Q717 147 671 91T554 34Q517 34 481 51T414 93T355 142T291 184T222 201Q172 201 131 167T84 67Q81 34 71 34Q56 37 56 72\",8771:\"55 283Q55 356 103 409T217 463Q262 463 297 447T395 382Q431 355 446 344T493 320T554 307H558Q613 307 652 344T694 433Q694 464 708 464T722 432Q722 356 673 304T564 251H554Q510 251 465 275T387 329T310 382T223 407H219Q164 407 122 367Q91 333 85 295T76 253T69 250Q55 250 55 283ZM56 56Q56 71 72 76H706Q722 70 722 56Q722 44 707 36H70Q56 43 56 56\",8773:\"55 388Q55 463 101 526T222 589Q260 589 296 571T362 526T421 474T484 430T554 411Q616 411 655 458T694 560Q694 572 698 580T708 589Q722 589 722 556Q722 482 677 419T562 356H554Q517 356 481 374T414 418T355 471T292 515T223 533Q179 533 145 508Q109 479 96 440T80 378T69 355Q55 355 55 388ZM56 236Q56 249 70 256H707Q722 248 722 236Q722 225 708 217L390 216H72Q56 221 56 236ZM56 42Q56 57 72 62H708Q722 52 722 42Q722 30 707 22H70Q56 29 56 42\",8775:\"55 417Q55 479 101 528T222 578Q259 578 294 564T393 507Q413 493 434 480T469 460T484 454L537 549Q587 639 595 647Q600 652 607 652Q615 652 621 647T628 634Q628 625 575 536Q524 446 524 443Q527 440 555 440Q603 440 644 469T691 547Q694 578 706 578T718 556Q718 555 718 551T717 545Q717 488 684 445T595 387Q582 384 558 384Q530 384 508 389L493 394L404 238L557 236H708Q720 224 720 217T706 196H379L291 43L499 41H708Q720 29 720 21T706 1H268L226 -71Q186 -143 179 -148Q173 -155 165 -155T152 -150T146 -137Q146 -133 184 -64L222 1H144L66 3L59 7Q54 14 54 20Q54 29 66 41H246L333 194Q333 196 202 196H68Q55 211 55 218T66 236H213L357 238L457 409L437 421Q432 423 393 450T307 500T222 523Q171 523 129 491T84 414Q82 383 70 383Q55 383 55 417\",8776:\"55 319Q55 360 72 393T114 444T163 472T205 482Q207 482 213 482T223 483Q262 483 296 468T393 413L443 381Q502 346 553 346Q609 346 649 375T694 454Q694 465 698 474T708 483Q722 483 722 452Q722 386 675 338T555 289Q514 289 468 310T388 357T308 404T224 426Q164 426 125 393T83 318Q81 289 69 289Q55 289 55 319ZM55 85Q55 126 72 159T114 210T163 238T205 248Q207 248 213 248T223 249Q262 249 296 234T393 179L443 147Q502 112 553 112Q609 112 649 141T694 220Q694 249 708 249T722 217Q722 153 675 104T555 55Q514 55 468 76T388 123T308 170T224 192Q164 192 125 159T83 84Q80 55 69 55Q55 55 55 85\",8778:\"220 523Q163 523 124 486T84 412Q81 383 69 383Q56 383 56 413Q56 441 67 470Q78 508 111 537T187 575Q203 579 219 579Q248 579 271 572Q304 565 393 508Q498 439 551 439Q620 439 662 486Q688 512 693 557Q693 565 697 572T707 579Q719 579 719 548Q719 483 673 434T550 384Q512 384 467 405T386 453T305 501T220 523ZM222 288Q164 288 124 251T84 177Q81 148 69 148Q56 148 56 178Q56 206 67 235Q78 274 111 302T187 339Q198 343 220 343Q244 343 259 341T308 322T393 272Q496 203 553 203Q612 203 651 241T691 312Q693 343 705 343Q719 343 719 313Q719 245 673 199Q626 148 552 148Q513 148 467 170T385 218T304 266T222 288ZM51 -19Q51 -6 62 -1H387Q713 -1 715 -3Q725 -10 725 -20Q725 -27 718 -34Q714 -38 672 -38T387 -39H62Q51 -25 51 -19\",8781:\"55 464Q55 471 60 477T74 484Q80 484 108 464T172 420T268 376T389 356Q436 356 483 368T566 399T630 436T675 467T695 482Q701 484 703 484Q711 484 716 478T722 464Q722 454 707 442Q550 316 389 316Q338 316 286 329T195 362T124 402T76 437T57 456Q55 462 55 464ZM57 45Q66 58 109 88T230 151T381 183Q438 183 494 168T587 135T658 94T703 61T720 45Q722 39 722 36Q722 28 717 22T703 16Q697 16 669 36T606 80T510 124T389 144Q341 144 294 132T211 101T147 64T102 33T82 18Q76 16 74 16Q66 16 61 22T55 36Q55 39 57 45\",8782:\"245 367Q251 415 288 453T392 492Q445 492 485 456T532 367H707Q722 359 722 347Q722 334 711 331T665 327H608H509Q500 332 498 336Q496 338 493 363T472 411Q443 451 389 451H387Q335 451 305 411Q290 392 287 374T282 344T268 327H72Q56 332 56 347Q56 360 70 367H245ZM56 153Q56 168 72 173H268Q277 168 279 164Q281 162 284 137T305 89Q334 49 389 49H391Q442 49 472 89Q487 108 490 126T495 156T509 173H608H666Q701 173 711 170T722 153T707 133H532Q526 81 486 45T389 8Q331 8 291 45T245 133H70Q56 140 56 153\",8783:\"245 367Q251 415 288 453T392 492Q445 492 485 456T532 367H707Q722 359 722 347Q722 334 711 331T665 327H608H509Q500 332 498 336Q496 338 493 363T472 411Q443 451 389 451H387Q335 451 305 411Q290 392 287 374T282 344T268 327H72Q56 332 56 347Q56 360 70 367H245ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153\",8784:\"56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153ZM329 610Q329 634 346 652T389 670Q413 670 431 654T450 611Q450 586 433 568T390 550T347 567T329 610\",8785:\"421 474T389 474T339 493T321 541Q321 566 337 587T391 609Q456 602 456 541Q456 512 439 493ZM56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153ZM421 -108T389 -108T339 -89T321 -41Q321 -16 337 5T391 27Q456 20 456 -41Q456 -70 439 -89\",8786:\"15 541Q15 569 33 585T75 601T117 585T135 541Q135 514 118 498T75 481T32 498T15 541ZM56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153ZM642 -41Q642 -17 658 0T702 18Q726 18 744 3T762 -41Q762 -67 745 -84T702 -101Q676 -101 659 -85T642 -41\",8787:\"642 541Q642 569 660 585T702 601T744 585T762 541Q762 515 745 498T702 481Q676 481 659 497T642 541ZM56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153ZM14 -41Q14 -15 31 1T74 18Q101 18 118 0T135 -41Q135 -64 118 -83T75 -102Q51 -102 33 -85T14 -41\",8790:\"56 347Q56 360 70 367H707Q722 359 722 347Q722 334 711 331T658 327H586H465L472 318Q496 288 496 250T472 182L465 173H586H663Q700 173 711 170T722 153T707 133H70Q56 140 56 153Q56 168 72 173H312L305 182Q281 212 281 250T305 318L312 327H72Q56 332 56 347ZM473 250Q473 265 472 273T460 297T428 327H349Q328 313 318 298T306 273T304 250Q304 235 305 227T317 203T349 173H428Q449 187 459 202T471 227T473 250\",8791:\"279 612Q279 656 310 688T388 721Q433 721 465 689T498 612Q498 573 470 538T389 503Q336 503 308 538T279 612ZM458 614Q458 637 452 651T433 672T411 679T383 680T352 675T333 664T324 647T321 629T320 611Q320 593 321 584T332 562T359 545Q366 543 389 543H391Q406 543 414 544T435 552T452 573T458 614ZM56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153\",8796:\"192 482H190Q187 483 185 484T181 488T177 493T175 501Q175 506 178 512Q184 523 278 687T375 853Q379 857 383 857Q385 857 387 858T390 859Q397 859 403 853Q405 851 499 687T600 512Q603 506 603 501Q603 488 587 482H192ZM548 523L389 798Q388 798 309 661T230 523T389 522T548 523ZM56 347Q56 360 70 367H708Q723 359 723 347Q723 336 709 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H709Q723 163 723 153Q723 140 708 133H70Q56 140 56 153\",8800:\"166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183L306 133H70Q56 140 56 153Q56 168 72 173H327L406 327H72Q56 332 56 347Q56 360 70 367H426Q597 702 602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 692 471 367H707Q722 359 722 347Q722 336 708 328L451 327L371 173H708Q722 163 722 153Q722 140 707 133H351Q175 -210 170 -212Q166 -215 159 -215\",8801:\"56 444Q56 457 70 464H707Q722 456 722 444Q722 430 706 424H72Q56 429 56 444ZM56 237T56 250T70 270H707Q722 262 722 250T707 230H70Q56 237 56 250ZM56 56Q56 71 72 76H706Q722 70 722 56Q722 44 707 36H70Q56 43 56 56\",8804:\"674 636Q682 636 688 630T694 615T687 601Q686 600 417 472L151 346L399 228Q687 92 691 87Q694 81 694 76Q694 58 676 56H670L382 192Q92 329 90 331Q83 336 83 348Q84 359 96 365Q104 369 382 500T665 634Q669 636 674 636ZM84 -118Q84 -108 99 -98H678Q694 -104 694 -118Q694 -130 679 -138H98Q84 -131 84 -118\",8805:\"83 616Q83 624 89 630T99 636Q107 636 253 568T543 431T687 361Q694 356 694 346T687 331Q685 329 395 192L107 56H101Q83 58 83 76Q83 77 83 79Q82 86 98 95Q117 105 248 167Q326 204 378 228L626 346L360 472Q291 505 200 548Q112 589 98 597T83 616ZM84 -118Q84 -108 99 -98H678Q694 -104 694 -118Q694 -130 679 -138H98Q84 -131 84 -118\",8806:\"674 753Q682 753 688 747T694 732T687 718Q686 717 417 589L151 463L399 345Q687 209 691 204Q694 198 694 193Q694 175 676 173H670L382 309Q92 446 90 448Q83 453 83 465Q84 476 96 482Q104 486 382 617T665 751Q669 753 674 753ZM84 39Q84 49 99 59H678Q694 53 694 39Q694 26 679 19H98Q84 26 84 39ZM83 -157Q83 -153 84 -150T86 -145T89 -141T92 -139T96 -137T99 -135H678Q694 -146 694 -155Q694 -168 679 -175H98Q84 -168 83 -157\",8807:\"83 733Q83 741 89 747T99 753Q107 753 253 685T543 548T687 478Q694 473 694 463T687 448Q685 446 395 309L107 173H101Q83 175 83 193Q83 194 83 196Q82 203 98 212Q117 222 248 284Q326 321 378 345L626 463L360 589Q291 622 200 665Q112 706 98 714T83 733ZM84 39Q84 49 99 59H678Q694 53 694 39Q694 26 679 19H98Q84 26 84 39ZM83 -157Q83 -153 84 -150T86 -145T89 -141T92 -139T96 -137T99 -135H678Q694 -146 694 -155Q694 -168 679 -175H98Q84 -168 83 -157\",8808:\"86 472Q93 477 381 614T673 752Q680 752 686 746T693 732T689 721Q686 715 418 590L151 461L418 332Q684 207 689 201Q693 195 693 190Q693 183 687 177T675 170Q668 170 380 307T86 450Q82 454 82 461Q82 467 86 472ZM82 33Q82 37 83 40T89 47T95 54H473L520 105Q569 156 571 156Q573 157 578 157Q586 157 592 151T598 136Q598 130 562 92L526 56L604 54H682Q693 43 693 35Q693 31 692 28T686 21T680 14H489L342 -139L513 -142H682Q693 -148 693 -160Q693 -167 680 -182H304L258 -230Q248 -240 237 -251T221 -268T211 -278T203 -284T197 -286Q189 -286 184 -280T178 -264Q178 -257 213 -219L249 -182H171L93 -179L86 -175Q82 -170 82 -163Q82 -155 95 -142H289L360 -64L433 14H262L93 16Q82 23 82 33\",8809:\"89 745Q95 752 100 752Q106 752 394 615T689 472Q693 468 693 461T689 450Q684 445 396 308T100 170Q95 170 89 176T82 190Q82 195 86 201Q91 208 358 332L624 461L358 590Q90 715 86 721Q82 725 82 731Q82 739 89 745ZM82 33Q82 37 83 40T89 47T95 54H473L520 105Q569 156 571 156Q573 157 578 157Q586 157 592 151T598 136Q598 130 562 92L526 56L604 54H682Q693 43 693 35Q693 31 692 28T686 21T680 14H489L342 -139L513 -142H682Q693 -148 693 -160Q693 -167 680 -182H304L258 -230Q248 -240 237 -251T221 -268T211 -278T203 -284T197 -286Q189 -286 184 -280T178 -264Q178 -257 213 -219L249 -182H171L93 -179L86 -175Q82 -170 82 -163Q82 -155 95 -142H289L360 -64L433 14H262L93 16Q82 23 82 33\",8810:\"639 -48Q639 -54 634 -60T619 -67H618Q612 -67 536 -26Q430 33 329 88Q61 235 59 239Q56 243 56 250T59 261Q62 266 336 415T615 567L619 568Q622 567 625 567Q639 562 639 548Q639 540 633 534Q632 532 374 391L117 250L374 109Q632 -32 633 -34Q639 -40 639 -48ZM944 -48Q944 -54 939 -60T924 -67H923Q917 -67 841 -26Q735 33 634 88Q366 235 364 239Q361 243 361 250T364 261Q367 266 641 415T920 567L924 568Q927 567 930 567Q944 562 944 548Q944 540 938 534Q937 532 679 391L422 250L679 109Q937 -32 938 -34Q944 -40 944 -48\",8811:\"55 539T55 547T60 561T74 567Q81 567 207 498Q297 449 365 412Q633 265 636 261Q639 255 639 250Q639 241 626 232Q614 224 365 88Q83 -65 79 -66Q76 -67 73 -67Q65 -67 60 -61T55 -47Q55 -39 61 -33Q62 -33 95 -15T193 39T320 109L321 110H322L323 111H324L325 112L326 113H327L329 114H330L331 115H332L333 116L334 117H335L336 118H337L338 119H339L340 120L341 121H342L343 122H344L345 123H346L347 124L348 125H349L351 126H352L353 127H354L355 128L356 129H357L358 130H359L360 131H361L362 132L363 133H364L365 134H366L367 135H368L369 136H370L371 137L372 138H373L374 139H375L376 140L378 141L576 251Q63 530 62 533Q55 539 55 547ZM360 539T360 547T365 561T379 567Q386 567 512 498Q602 449 670 412Q938 265 941 261Q944 255 944 250Q944 241 931 232Q919 224 670 88Q388 -65 384 -66Q381 -67 378 -67Q370 -67 365 -61T360 -47Q360 -39 366 -33Q367 -33 400 -15T498 39T625 109L626 110H627L628 111H629L630 112L631 113H632L634 114H635L636 115H637L638 116L639 117H640L641 118H642L643 119H644L645 120L646 121H647L648 122H649L650 123H651L652 124L653 125H654L656 126H657L658 127H659L660 128L661 129H662L663 130H664L665 131H666L667 132L668 133H669L670 134H671L672 135H673L674 136H675L676 137L677 138H678L679 139H680L681 140L683 141L881 251Q368 530 367 533Q360 539 360 547\",8812:\"104 730Q104 749 123 749Q130 749 138 745Q186 717 237 671L250 659L261 670Q297 703 332 726T375 750T389 744T395 730Q395 721 390 717T364 699T322 668Q290 641 283 632Q280 628 281 627T293 612Q425 454 425 250Q425 144 388 51T293 -112Q282 -125 281 -126T283 -132Q306 -162 379 -209Q395 -219 395 -230Q395 -238 389 -244T375 -250T335 -228T262 -171L250 -159L238 -170Q202 -203 167 -226T124 -250T110 -244T104 -230Q104 -219 121 -209Q199 -156 216 -132Q219 -128 218 -127T206 -112Q74 46 74 250T206 612Q217 625 218 626T216 632Q199 656 121 709Q104 719 104 730ZM249 -94Q364 61 364 250Q364 430 265 574Q253 590 249 594L242 583Q134 439 134 250Q134 114 192 -1Q212 -44 242 -83L249 -94\",8814:\"693 -14T693 -20T687 -33T675 -41Q667 -41 506 37L344 112Q342 112 262 -46Q184 -196 176 -205Q172 -209 168 -209T162 -208Q155 -208 151 -203T146 -190Q146 -178 171 -137Q193 -91 251 21L306 132L198 183Q142 208 118 220T88 238T82 249Q82 253 86 261Q92 267 278 357L464 443L529 572Q561 637 577 667T597 703T607 708Q615 708 622 702T629 688Q629 680 575 579L524 474Q524 473 545 482T598 508Q666 541 673 541T686 535T693 521Q693 512 679 504T589 459L493 414L360 150Q366 148 378 142T431 116T529 70Q686 -8 689 -10Q693 -14 693 -20ZM380 277L433 383Q432 385 292 319T151 250T237 209T324 170L380 277\",8815:\"82 514T82 520T89 533T100 541Q106 541 271 463Q434 386 435 386L515 543Q593 699 600 706Q604 708 607 708Q615 708 622 702T629 688T549 526Q509 445 491 407T473 368Q522 343 580 317Q636 291 660 278T688 261T693 250V249Q693 241 681 234T580 184Q533 161 502 146Q317 59 315 59Q312 56 246 -74Q197 -170 186 -189T168 -209Q164 -209 162 -208Q155 -208 151 -203T146 -190Q146 -187 200 -79L253 28L218 11Q182 -6 144 -23T100 -41Q95 -41 89 -35T82 -21Q82 -12 96 -4T186 41L284 88L349 217Q377 273 395 311T413 350Q413 351 253 428Q101 498 86 510Q82 514 82 520ZM624 250Q461 330 455 330Q454 331 453 329T448 321T441 308T430 287T416 259T398 223L342 114L624 250\",8816:\"82 -124Q82 -120 83 -117T89 -110T95 -103H220L284 50Q346 204 344 206L218 268Q153 297 123 313T87 333T82 344T86 355Q104 369 291 455Q491 552 491 553L542 673Q581 767 590 784T609 801Q616 801 622 795T629 781Q629 773 586 677Q546 581 546 577L609 606Q669 635 673 635Q680 635 686 629T693 615Q693 610 692 608T670 593T604 561L524 521L400 226L542 157Q617 123 649 107T687 85T694 72Q694 66 690 60T679 54Q664 54 526 121Q513 127 495 136T464 150T438 162T416 173T399 180T388 185L384 186Q383 186 322 41L262 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L464 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 174 -213T202 -143H146L93 -141Q82 -134 82 -124ZM418 370L466 495Q464 495 308 420T151 344T204 317T311 267T364 244Q364 247 418 370\",8817:\"97 54Q82 54 82 72Q82 79 86 84Q95 91 222 153L351 215L398 324L442 433L258 519Q95 597 87 604Q82 608 82 615T88 628T102 635Q107 635 424 484L458 468L524 630Q593 789 597 795Q601 801 609 801Q616 801 622 795T629 781L562 615L493 450L589 406Q665 371 679 362T694 344Q694 339 693 337T677 326T631 302T538 257Q504 241 465 223T406 195T386 186Q384 185 322 39L262 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L464 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 174 -213T202 -143H146L93 -141Q82 -134 82 -124Q82 -120 83 -117T89 -110T95 -103H220L273 26Q326 156 326 157L218 106Q109 54 97 54ZM553 379Q480 412 480 415Q479 415 460 372T423 285T406 241Q408 240 516 291T624 344L553 379\",8818:\"674 732Q682 732 688 726T694 711T687 697Q686 696 417 568L151 442L399 324Q687 188 691 183Q694 177 694 172Q694 154 676 152H670L382 288Q92 425 90 427Q83 432 83 444Q84 455 96 461Q104 465 382 596T665 730Q669 732 674 732ZM56 -194Q56 -107 106 -51T222 6Q260 6 296 -12T362 -56T420 -108T483 -153T554 -171Q616 -171 654 -128T694 -29Q696 6 708 6Q722 6 722 -26Q722 -102 676 -164T557 -227Q518 -227 481 -209T415 -165T358 -113T294 -69T223 -51Q163 -51 125 -93T83 -196Q81 -228 69 -228Q56 -228 56 -202V-194\",8819:\"90 697Q83 704 83 712T88 726T99 732Q107 732 253 664T543 527T687 457Q694 452 694 442T687 427Q685 425 395 288L107 152H101Q83 154 83 172Q83 173 83 175Q82 182 98 191Q117 201 248 263Q326 300 378 324L626 442L360 568Q91 696 90 697ZM56 -194Q56 -107 106 -51T222 6Q260 6 296 -12T362 -56T420 -108T483 -153T554 -171Q616 -171 654 -128T694 -29Q696 6 708 6Q722 6 722 -26Q722 -102 676 -164T557 -227Q518 -227 481 -209T415 -165T358 -113T294 -69T223 -51Q163 -51 125 -93T83 -196Q81 -228 69 -228Q56 -228 56 -202V-194\",8822:\"734 181Q734 173 728 167T714 161Q711 161 386 280T54 404Q44 408 44 421Q44 432 52 437Q66 443 388 562T714 681Q721 681 727 675T734 661Q734 651 722 645Q711 639 462 546Q441 539 420 531L122 421L420 311L723 198Q734 192 734 181ZM44 247Q44 255 50 261T63 267Q66 267 391 148T723 24Q734 18 734 7T723 -10Q716 -14 391 -133T63 -253Q56 -253 50 -247T44 -233Q44 -223 55 -217Q67 -210 317 -118Q337 -110 357 -103L655 7L357 117L54 230Q44 236 44 247\",8823:\"83 661Q83 668 88 674T104 681Q111 679 396 560Q686 437 687 436Q694 431 694 421T687 406Q686 405 543 344T253 222T101 161Q83 163 83 180Q83 194 95 199Q96 199 130 213T232 257T361 311L621 421L357 532Q307 553 233 584Q121 631 102 640T83 661ZM673 267Q694 267 694 248Q694 237 687 232Q684 229 420 118L156 7L416 -103L683 -215Q694 -222 694 -233Q694 -251 676 -253Q670 -253 524 -192T235 -70T90 -8Q83 -1 83 7Q83 19 94 24Q97 25 378 144T667 266Q669 267 673 267\",8826:\"84 249Q84 262 91 266T117 270Q120 270 126 270T137 269Q388 273 512 333T653 512Q657 539 676 539Q685 538 689 532T694 520V515Q689 469 672 431T626 366T569 320T500 286T435 265T373 249Q379 248 404 242T440 233T477 221T533 199Q681 124 694 -17Q694 -41 674 -41Q658 -41 653 -17Q646 41 613 84T533 154T418 197T284 220T137 229H114Q104 229 98 230T88 235T84 249\",8827:\"84 517Q84 539 102 539Q115 539 119 529T125 503T137 459T171 404Q277 275 640 269H661Q694 269 694 249T661 229H640Q526 227 439 214T283 173T173 98T124 -17Q118 -41 103 -41Q83 -41 83 -17Q88 29 105 67T151 132T208 178T277 212T342 233T404 249Q401 250 380 254T345 263T302 276T245 299Q125 358 92 468Q84 502 84 517\",8828:\"112 270Q83 270 83 290Q83 301 94 307Q98 310 118 310Q516 310 620 464Q635 486 642 510T651 548T657 571T675 580Q693 577 693 559V552Q684 472 628 410T465 314Q436 303 372 290Q373 290 388 287T425 278T465 266Q674 199 693 28L694 17Q688 5 683 3Q677 0 673 0Q656 0 653 24Q623 270 118 270H112ZM110 116Q83 116 83 136T110 156H113Q134 156 160 155T231 146T318 128T407 95T489 44T550 -30T583 -131Q583 -153 563 -153Q556 -153 553 -152T547 -145T542 -127Q531 -54 478 0Q425 53 333 83T123 116H110\",8829:\"668 310Q694 310 694 290Q694 285 691 279Q684 271 664 270Q550 268 464 257T301 220T179 146T124 27Q119 0 103 0T83 16Q83 21 83 31T92 68T113 121T157 177T229 231Q295 268 405 290Q404 290 389 293T352 302T312 314Q138 371 96 500Q83 541 83 562Q83 568 89 574T103 580Q115 580 120 570T126 542T138 497T173 442Q289 310 659 310H668ZM194 -131Q201 -60 241 -6T343 82T477 133T628 155Q632 155 644 155T661 156Q685 155 690 147Q694 143 694 136Q694 132 693 129T689 124T685 120T681 117L656 116Q596 114 543 106T436 79T342 35T272 -33T235 -127Q231 -154 212 -154Q203 -153 199 -147T194 -136V-131\",8830:\"84 442Q84 455 91 459T117 463Q120 463 126 463T137 462Q388 466 512 526T653 705Q657 732 676 732Q685 731 689 725T694 714V708Q689 662 672 624T626 559T569 513T500 479T435 458T373 442Q379 441 404 435T440 426T477 414T533 392Q592 362 630 319T681 241T694 174Q694 153 674 153Q662 153 657 163T652 188T640 231T606 287Q500 416 137 422H114Q104 422 98 423T88 428T84 442ZM56 -194Q56 -107 106 -51T222 6Q260 6 296 -12T362 -56T420 -108T483 -153T554 -171Q616 -171 654 -128T694 -29Q696 6 708 6Q722 6 722 -26Q722 -102 676 -164T557 -227Q518 -227 481 -209T415 -165T358 -113T294 -69T223 -51Q163 -51 125 -93T83 -196Q81 -228 69 -228Q56 -228 56 -202V-194\",8831:\"84 710Q84 732 102 732Q115 732 119 722T125 696T137 652T171 597Q277 468 640 462H661Q694 462 694 442T661 422H640Q578 421 526 417T415 403T309 376T222 333T156 268T124 179Q122 162 118 158T103 153Q100 153 98 153T95 154T93 155T90 158T85 163Q83 167 83 176Q88 222 105 260T151 325T208 371T277 405T342 426T404 442Q401 443 380 447T345 456T302 469T245 492Q125 551 92 661Q84 695 84 710ZM56 -194Q56 -107 106 -51T222 6Q260 6 296 -12T362 -56T420 -108T483 -153T554 -171Q616 -171 654 -128T694 -29Q696 6 708 6Q722 6 722 -26Q722 -102 676 -164T557 -227Q518 -227 481 -209T415 -165T358 -113T294 -69T223 -51Q163 -51 125 -93T83 -196Q81 -228 69 -228Q56 -228 56 -202V-194\",8832:\"386 292Q388 292 439 393T543 598T598 703Q599 703 603 704T609 705Q616 705 622 699T629 685T533 494Q440 308 440 305Q451 310 462 312Q547 342 592 388T651 505Q654 525 658 532T673 539Q680 539 686 533T693 519Q693 495 678 450Q638 341 500 283Q433 259 418 259Q416 259 411 251T406 241T415 239Q482 224 544 190Q674 121 691 -10Q693 -28 691 -32Q684 -43 672 -43Q664 -43 658 -37Q656 -33 650 -6T634 47T589 109T500 168Q473 179 436 190T388 201H386L284 -1Q261 -45 232 -101T191 -181T178 -206Q176 -206 172 -207T166 -208Q160 -208 153 -202T146 -188Q146 -185 246 12Q344 206 344 210Q344 213 305 217T213 225T124 228H95Q82 241 82 248Q82 253 95 268H124Q172 268 236 273T343 283T386 292\",8833:\"103 -43Q96 -43 89 -39T82 -26L84 -10Q105 141 275 212Q342 236 355 236Q360 236 364 245L369 256H360Q284 280 275 283Q115 351 86 490Q82 507 82 517Q82 526 88 532T103 538Q110 538 115 534Q119 531 122 517T128 486T143 444T174 397T231 351T320 310Q371 292 389 292L491 496Q595 701 598 703Q599 703 603 704T609 705Q616 705 622 699T629 685Q629 684 531 485Q431 296 431 288Q431 278 520 273T651 268H680Q693 253 693 248Q693 241 680 228H651Q591 228 491 218T386 201L284 -1Q261 -45 232 -101T191 -181T178 -206Q176 -206 172 -207T166 -208Q160 -208 153 -202T146 -188Q146 -182 302 125L335 190L324 185Q313 185 289 172Q241 153 208 128T159 78T135 31T124 -11T118 -37Q112 -43 103 -43\",8834:\"84 250Q84 372 166 450T360 539Q361 539 370 539T395 539T430 540T475 540T524 540H679Q694 532 694 520Q694 511 681 501L522 500H470H441Q366 500 338 496T266 472Q244 461 224 446T179 404T139 337T124 250V245Q124 157 185 89Q244 25 328 7Q348 2 366 2T522 0H681Q694 -10 694 -20Q694 -32 679 -40H526Q510 -40 480 -40T434 -41Q350 -41 289 -25T172 45Q84 127 84 250\",8835:\"83 520Q83 532 98 540H251Q267 540 297 540T343 541Q427 541 488 525T605 455Q693 374 693 250Q693 165 650 99T545 0T415 -39Q407 -40 251 -40H98Q83 -32 83 -20Q83 -10 96 0H255H308H337Q412 0 439 4T512 28Q533 39 553 54T599 96T639 163T654 250Q654 341 592 411Q557 449 512 472Q468 491 439 495T335 500H306H255L96 501Q83 511 83 520\",8838:\"84 346Q84 468 166 546T360 635Q361 635 370 635T395 635T430 636T475 636T524 636H679Q694 628 694 616Q694 607 681 597L522 596H470H441Q366 596 338 592T266 568Q244 557 224 542T179 500T139 433T124 346V341Q124 253 185 185Q244 121 328 103Q348 98 366 98T522 96H681Q694 86 694 76Q694 64 679 56H526Q510 56 480 56T434 55Q350 55 289 71T172 141Q84 223 84 346ZM104 -131T104 -118T118 -98H679Q694 -106 694 -118T679 -138H118Q104 -131 104 -118\",8839:\"83 616Q83 628 98 636H251Q267 636 297 636T343 637Q427 637 488 621T605 551Q693 470 693 346Q693 261 650 195T545 96T415 57Q407 56 251 56H98Q83 64 83 76Q83 86 96 96H255H308H337Q412 96 439 100T512 124Q533 135 553 150T599 192T639 259T654 346Q654 437 592 507Q557 545 512 568Q468 587 439 591T335 596H306H255L96 597Q83 607 83 616ZM84 -131T84 -118T98 -98H659Q674 -106 674 -118T659 -138H98Q84 -131 84 -118\",8840:\"146 -283Q146 -282 174 -213T202 -143H115Q102 -127 102 -123T115 -103H220L291 68L278 73Q203 101 153 157T86 288Q83 309 83 344Q83 380 86 399Q107 480 160 539Q222 601 298 621Q328 630 345 631T435 635L526 637L560 715Q587 778 593 789T609 801Q616 801 622 795T629 781Q629 780 625 771T614 742T600 706L571 637Q571 635 626 635H680Q693 620 693 613T689 601L682 597L618 595H553L449 346Q425 288 399 223T359 127T346 95H356Q365 95 381 95T417 94T463 93T515 93H682Q693 82 693 74T680 53H511Q420 55 335 55L329 57L262 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L464 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283ZM509 590Q509 595 438 595Q354 595 318 586Q246 567 195 516T126 395Q123 378 123 344T126 293Q141 229 184 181T291 110L306 104L406 346L509 590\",8841:\"82 606T82 613T95 635H251H348Q408 635 435 632T502 615L515 608L520 617Q520 619 558 708Q584 774 591 787T609 801Q616 801 622 795T629 781Q629 775 562 615L551 590L569 577Q646 527 678 437Q691 398 691 344T678 250Q653 182 597 132T469 64Q427 53 366 53H326L295 -25L262 -103H660Q673 -118 673 -124Q673 -129 669 -136L662 -141L453 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 174 -213T202 -143H95Q82 -128 82 -123T95 -103H220L251 -25L284 53H189L93 55L86 59Q82 64 82 71T95 93H302L400 333Q498 569 498 573L444 590Q431 593 260 595L93 597L86 601Q82 606 82 613ZM652 344V354Q652 451 575 521Q571 526 557 538T537 551Q534 551 533 548Q533 543 438 319L344 95L371 93H386Q487 93 557 150T649 293Q652 309 652 344\",8842:\"693 72Q693 68 692 66T686 59T680 52H524Q398 52 367 53T309 63Q236 82 180 132T98 250Q84 288 84 343Q84 397 98 437Q126 515 193 568T346 632Q347 632 373 633T440 634T520 635H680Q693 620 693 615Q693 608 680 595H526Q364 595 353 592Q279 582 221 539T138 430Q124 392 124 343Q124 296 138 257Q163 192 221 149T353 95Q364 92 526 92H680Q693 79 693 72ZM102 -132T102 -125T115 -103H382L420 -68Q429 -60 438 -52T452 -39T463 -28T472 -20T478 -14T483 -10T487 -7T490 -6T493 -5T496 -5Q502 -5 508 -12T515 -28Q515 -34 513 -37Q512 -38 507 -42T492 -55T475 -70L440 -101L562 -103H682Q693 -114 693 -122T680 -143H395L355 -179Q289 -241 280 -241Q273 -241 267 -235T260 -221T265 -208T300 -174L335 -143H224L113 -141L106 -137Q102 -132 102 -125\",8843:\"82 615Q82 620 95 635H251Q378 635 409 634T469 623Q540 605 596 555T678 437Q691 397 691 343T678 250Q649 172 581 119T426 55Q415 52 251 52H95Q93 55 89 59T84 65T82 72Q82 79 95 92H249Q411 92 422 95Q496 105 554 148T638 257Q651 296 651 343Q651 391 638 430Q613 495 555 538T422 592Q411 595 249 595H95Q82 608 82 615ZM82 -132T82 -125T95 -103H380L420 -57Q452 -21 460 -14T474 -6Q482 -6 488 -12T495 -25T451 -81L433 -101L549 -103H662Q673 -114 673 -122T660 -143H395L355 -190Q311 -239 309 -239Q305 -241 302 -241Q294 -241 287 -235T280 -221T324 -163L342 -143H218L93 -141L86 -137Q82 -132 82 -125\",8846:\"591 598H592Q604 598 611 583V376Q611 345 611 296Q610 162 606 148Q605 146 605 145Q586 68 507 23T333 -22Q268 -22 209 -1T106 66T56 173Q55 180 55 384L56 585Q66 598 75 598Q85 598 95 585V378L96 172L98 162Q112 95 181 57T332 18Q415 18 487 58T570 175Q571 180 571 383V583Q579 598 591 598ZM313 406Q313 417 313 435T312 459Q312 483 316 493T333 503T349 494T353 461V406V325H515Q516 325 519 323T527 316T531 305T527 294T520 287T515 285H353V204V152Q353 127 350 117T333 107T316 117T312 152Q312 158 312 175T313 204V285H151Q150 285 147 287T139 294T135 305T139 316T146 323T151 325H313V406\",8847:\"83 523Q87 535 99 539H679Q694 531 694 519Q694 506 679 499H123V-1H678Q694 -7 694 -21Q694 -34 679 -41H98Q93 -38 84 -28L83 247V523\",8848:\"64 506T64 519T78 539H699Q706 536 714 526V-28Q706 -38 699 -41H78Q64 -34 64 -21Q64 -6 80 -1H674V499H78Q64 506 64 519\",8849:\"94 620Q98 632 110 636H699Q714 628 714 616T699 596H134V96H698Q714 90 714 76Q714 64 699 56H109Q104 59 95 69L94 344V620ZM84 -118Q84 -103 100 -98H698Q714 -104 714 -118Q714 -130 699 -138H98Q84 -131 84 -118\",8850:\"64 603T64 616T78 636H668Q675 633 683 623V69Q675 59 668 56H78Q64 63 64 76Q64 91 80 96H643V596H78Q64 603 64 616ZM64 -118Q64 -108 79 -98H678Q694 -104 694 -118Q694 -130 679 -138H78Q64 -131 64 -118\",8851:\"83 0Q79 0 76 1T71 3T67 6T65 9T63 13T61 16V301L62 585Q70 595 76 598H592Q602 590 605 583V15Q598 2 587 0Q583 0 580 1T575 3T571 6T569 9T567 13T565 16V558H101V15Q94 2 83 0\",8852:\"77 0Q65 4 61 16V301L62 585Q72 598 81 598Q94 598 101 583V40H565V583Q573 598 585 598Q598 598 605 583V15Q602 10 592 1L335 0H77\",8853:\"56 250Q56 394 156 488T384 583Q530 583 626 485T722 250Q722 110 625 14T390 -83Q249 -83 153 14T56 250ZM364 542Q308 539 251 509T148 418T96 278V270H369V542H364ZM681 278Q675 338 650 386T592 462T522 509T458 535T412 542H409V270H681V278ZM96 222Q104 150 139 95T219 12T302 -29T366 -42H369V230H96V222ZM681 222V230H409V-42H412Q429 -42 456 -36T521 -10T590 37T649 113T681 222\",8854:\"56 250Q56 394 156 488T384 583Q530 583 626 485T722 250Q722 110 625 14T390 -83Q249 -83 153 14T56 250ZM681 278Q669 385 591 463T381 542Q283 542 196 471T96 278V270H681V278ZM275 -42T388 -42T585 32T681 222V230H96V222Q108 107 191 33\",8855:\"56 250Q56 394 156 488T384 583Q530 583 626 485T722 250Q722 110 625 14T390 -83Q249 -83 153 14T56 250ZM582 471Q531 510 496 523Q446 542 381 542Q324 542 272 519T196 471L389 278L485 375L582 471ZM167 442Q95 362 95 250Q95 137 167 58L359 250L167 442ZM610 58Q682 138 682 250Q682 363 610 442L418 250L610 58ZM196 29Q209 16 230 2T295 -27T388 -42Q409 -42 429 -40T465 -33T496 -23T522 -11T544 1T561 13T574 22T582 29L388 222L196 29\",8856:\"56 250Q56 394 156 488T384 583Q530 583 626 485T722 250Q722 110 625 14T390 -83Q249 -83 153 14T56 250ZM582 471Q581 472 571 480T556 491T539 502T517 514T491 525T460 534T424 539T381 542Q272 542 184 460T95 251Q95 198 113 150T149 80L167 58L582 471ZM388 -42Q513 -42 597 44T682 250Q682 363 610 442L196 29Q209 16 229 2T295 -27T388 -42\",8857:\"56 250Q56 394 156 488T384 583Q530 583 626 485T722 250Q722 110 625 14T390 -83Q249 -83 153 14T56 250ZM682 250Q682 322 649 387T546 497T381 542Q272 542 184 459T95 250Q95 132 178 45T389 -42Q515 -42 598 45T682 250ZM311 250Q311 285 332 304T375 328Q376 328 382 328T392 329Q424 326 445 305T466 250Q466 217 445 195T389 172Q354 172 333 195T311 250\",8858:\"57 250Q57 327 87 392T166 497T270 560T382 582H394Q512 582 610 500Q721 401 721 250Q721 112 626 15T389 -82Q251 -82 154 13T57 250ZM682 129T682 250T596 457T390 543Q269 543 183 457T96 250Q96 132 180 45T389 -43Q511 -43 596 43ZM250 250Q250 316 295 352T384 388Q451 388 489 347T528 250Q528 192 487 152T389 112Q331 112 291 152T250 250ZM488 250Q488 290 460 319T389 349Q348 349 319 320T290 250Q290 208 320 180T389 151Q431 151 459 181T488 250\",8859:\"57 250Q57 327 87 392T166 497T270 560T382 582H394Q512 582 610 500Q721 401 721 250Q721 112 626 15T389 -82Q251 -82 154 13T57 250ZM682 129T682 250T596 457T390 543Q269 543 183 457T96 250Q96 132 180 45T389 -43Q511 -43 596 43ZM204 339Q204 357 215 366T238 375Q247 375 283 348Q300 336 311 328L368 286Q369 286 366 323T359 398T355 437Q357 456 379 465Q380 465 384 465T391 466Q403 465 412 457T423 437Q423 436 420 398T413 323T410 286L467 328Q476 334 486 341T501 353T513 361T523 368T529 372T535 374T541 375Q554 375 564 365T575 339Q575 325 566 318T519 292Q504 285 496 281L430 250L496 219Q552 192 559 188T572 175Q575 168 575 161Q575 148 566 137T541 126H538Q530 126 499 149Q480 163 467 172L410 214Q409 214 412 177T419 102T423 63Q423 59 421 54T411 43T389 36T368 42T357 54T355 63Q355 64 358 102T365 177T368 214L311 172Q302 165 293 159T279 148T268 140T260 134T254 131T250 128T246 127T242 126T238 126Q223 126 214 135T204 161T213 183T282 219L348 250L282 281Q226 308 219 312T206 325Q204 330 204 339\",8861:\"57 250Q57 327 87 392T166 497T270 560T382 582H394Q512 582 610 500Q721 401 721 250Q721 112 626 15T389 -82Q251 -82 154 13T57 250ZM682 129T682 250T596 457T390 543Q269 543 183 457T96 250Q96 132 180 45T389 -43Q511 -43 596 43ZM223 250Q223 263 233 267T280 271Q289 271 325 271T389 270H490Q535 270 545 267T555 250Q555 241 549 235Q544 231 527 231T389 230Q239 230 235 232Q223 236 223 250\",8862:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM369 365V649H95V365H369ZM682 365V649H409V365H682ZM369 40V325H95V40H369ZM682 40V325H409V40H682\",8863:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM682 365V649H95V365H682ZM682 40V325H95V40H682\",8864:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H707Q714 686 722 676V13Q714 3 707 0H71ZM123 649Q147 625 214 555T335 430T389 374L654 649H123ZM95 70Q99 74 229 209T360 345L95 619V70ZM682 70V619L418 346Q417 344 549 207L682 70ZM654 41L400 304L388 315L123 41L256 40H522L654 41\",8865:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM682 40V649H95V40H682ZM330 345Q330 371 347 388T390 405Q412 405 430 389T448 345Q448 317 430 301T389 285T348 301T330 345\",8866:\"55 678Q55 679 56 681T58 684T61 688T65 691T70 693T77 694Q88 692 95 679V367H540Q555 359 555 347Q555 334 540 327H95V15Q88 2 77 0Q73 0 70 1T65 3T61 6T59 9T57 13T55 16V678\",8867:\"515 678Q515 679 516 681T518 684T521 688T525 691T530 693T537 694Q548 692 555 679V15Q548 2 537 0Q533 0 530 1T525 3T521 6T519 9T517 13T515 16V327H71Q70 327 67 329T59 336T55 347T59 358T66 365T71 367H515V678\",8868:\"55 642T55 648T59 659T66 666T71 668H708Q723 660 723 648T708 628H409V15Q402 2 391 0Q387 0 384 1T379 3T375 6T373 9T371 13T369 16V628H71Q70 628 67 630T59 637\",8869:\"369 652Q369 653 370 655T372 658T375 662T379 665T384 667T391 668Q402 666 409 653V40H708Q723 32 723 20T708 0H71Q70 0 67 2T59 9T55 20T59 31T66 38T71 40H369V652\",8872:\"139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V367H796Q811 359 811 347Q811 336 797 328L479 327H161L159 328V172L161 173H797Q798 172 800 171T803 169T805 167T808 164T809 162T810 158T811 153Q811 140 796 133H159V-235Q151 -249 141 -249H139\",8873:\"55 678Q55 679 56 681T58 684T61 688T65 691T70 693T77 694Q88 692 95 679V15Q88 2 77 0Q73 0 70 1T65 3T61 6T59 9T57 13T55 16V678ZM249 678Q249 679 250 681T252 684T255 688T259 691T264 693T271 694Q282 692 289 679V367H651Q666 359 666 347Q666 334 651 327H289V15Q282 2 271 0Q267 0 264 1T259 3T255 6T253 9T251 13T249 16V678\",8874:\"55 678Q55 679 56 681T58 684T61 688T65 691T70 693T77 694Q88 692 95 679V15Q88 2 77 0Q73 0 70 1T65 3T61 6T59 9T57 13T55 16V678ZM237 678Q237 679 238 681T240 684T243 688T247 691T252 693T259 694Q270 692 277 679V15Q270 2 259 0Q255 0 252 1T247 3T243 6T241 9T239 13T237 16V678ZM419 678Q419 679 420 681T422 684T425 688T429 691T434 693T441 694Q452 692 459 679V367H818Q833 359 833 347Q833 334 818 327H459V15Q452 2 441 0Q437 0 434 1T429 3T425 6T423 9T421 13T419 16V678\",8876:\"56 681Q70 695 76 695T96 681V368H243L381 530Q521 692 525 692Q537 700 547 688Q554 682 554 674Q554 671 553 669T548 661T539 649T522 631T499 604T465 565T421 512Q296 373 296 368H416H476Q525 368 539 365T554 348Q554 334 543 328H261L96 141V12Q81 -1 75 -1Q65 -1 58 10L56 50V92L18 48Q7 37 -1 28T-13 14T-19 6T-23 1T-27 0T-33 -1Q-42 -1 -48 4T-55 19Q-55 24 -47 34T12 103L56 155V681ZM205 326Q205 328 152 328H96V263Q96 203 98 203Q99 203 123 231T174 290T205 326\",8877:\"56 681Q70 695 76 695T96 681V466H327L425 579Q522 692 527 692Q529 693 534 693Q542 693 547 688T553 674Q553 668 549 663Q549 662 538 650T504 611T463 563L381 468L461 466H543Q554 453 554 446T541 426H345L209 272L376 270H543Q554 257 554 251T541 230H174L96 141V12Q81 -1 75 -1Q65 -1 58 10L56 50V92L18 48Q7 37 -1 28T-13 14T-19 6T-23 1T-27 0T-33 -1Q-42 -1 -48 4T-55 19Q-55 24 -47 34T12 103L56 155V681ZM267 399L292 426H96V270H158L201 321Q256 382 267 399ZM118 228L119 229Q119 230 109 230H96V201L107 212Q118 227 118 228\",8878:\"56 681Q70 695 77 695T96 683V428L98 175L252 323V681Q264 695 272 695Q278 695 292 681V526Q292 368 296 368Q298 368 447 510Q638 695 642 695H645Q651 695 658 688T665 673Q665 666 661 661Q659 660 639 641T578 582T505 512L356 370L505 368H654Q665 357 665 349Q665 343 652 328H314L303 317L292 308V12Q289 10 285 6T279 1T272 -1Q265 -1 252 12V139Q252 266 249 266L96 119V12Q80 -1 76 -1T70 0T63 6T56 12V79L29 55Q-26 -1 -35 -1Q-42 -1 -48 5T-55 19Q-55 25 -51 30T-15 66Q5 86 18 99L56 135V681\",8879:\"56 681Q70 695 77 695T96 683V428L98 175L252 323V681Q264 695 272 695Q278 695 292 681V466H401L503 563L621 679Q637 695 645 695Q652 695 658 688T665 673Q665 670 663 666Q663 665 651 652T611 612T561 563L458 468L556 466H654Q665 455 665 447T652 426H416L294 308L292 288V270H652Q665 255 665 250T652 230H292V12Q289 10 285 6T279 1T272 -1Q265 -1 252 12V139Q252 266 249 266L96 119V12Q80 -1 76 -1T70 0T63 6T56 12V79L29 55Q-26 -1 -35 -1Q-42 -1 -48 5T-55 19Q-55 25 -51 30T-15 66Q5 86 18 99L56 135V681ZM358 426H292V361L325 392L358 426\",8882:\"694 -26Q686 -40 676 -41H670L382 95Q92 232 90 234Q83 239 83 249Q83 262 96 267Q101 270 379 401T665 537Q671 539 674 539Q686 539 694 524V-26ZM654 11T654 249T653 487T402 369T151 249L275 190Q399 131 524 72T652 11Q654 11 654 249\",8883:\"83 523Q83 524 85 527T92 535T103 539Q107 539 389 406T680 268Q694 260 694 249Q694 239 687 234Q685 232 395 95L107 -41H101Q90 -40 83 -26V523ZM376 368Q323 393 254 425T155 472L125 487Q123 487 123 249T125 11Q127 12 252 71T502 190L626 249L376 368\",8884:\"694 71Q686 58 676 56H670L382 192Q92 329 90 331Q83 336 83 346Q83 359 96 364Q101 367 379 498T665 634Q671 636 674 636Q686 636 694 621V71ZM654 108T654 346T653 584T402 466T151 346L275 287Q399 228 524 169T652 108Q654 108 654 346ZM83 -120Q83 -116 84 -113T86 -108T89 -104T92 -102T96 -100T99 -98H678Q679 -98 681 -99T684 -101T688 -104T691 -108T693 -113T694 -120Q692 -130 679 -138H98Q84 -130 83 -120\",8885:\"83 620Q83 621 85 624T92 632T103 636Q107 636 389 503T680 365Q694 357 694 346Q694 336 687 331Q685 329 395 192L107 56H101Q90 58 83 71V620ZM376 465Q323 490 254 522T155 570L125 584Q123 584 123 346T125 108Q127 109 252 168T502 287L626 346L376 465ZM83 -120Q83 -116 84 -113T86 -108T89 -104T92 -102T96 -100T99 -98H678Q679 -98 681 -99T684 -101T688 -104T691 -108T693 -113T694 -120Q692 -130 679 -138H98Q84 -130 83 -120\",8888:\"1055 250Q1055 190 1012 141T896 92Q858 92 828 106T781 140T755 180T741 214L738 228V230H405Q71 230 68 232Q55 238 55 250T68 268Q71 270 405 270H738V272L740 280Q742 287 745 297T754 321T771 348T796 374T832 396T881 408H891Q969 408 1012 360T1055 250ZM896 132Q948 132 981 166T1014 250Q1014 301 985 330T920 367Q914 368 891 368Q853 368 816 338T778 250Q778 198 812 165T896 132\",8890:\"318 -182Q302 -212 280 -212H278H275Q249 -212 239 -182L238 84V351H162L87 352Q57 362 57 391T84 429Q89 431 280 431H470L474 429Q477 427 479 426T484 423T490 417T495 410T499 402T500 391Q500 365 470 352L394 351H318V-182\",8891:\"56 697Q56 706 62 711T75 716Q86 716 90 709Q91 708 104 680T147 592T199 483L305 261L411 483Q443 548 481 629Q512 694 518 705T535 716Q543 716 549 710T555 700Q555 693 501 577T388 340T325 210Q316 194 305 194Q292 194 285 210Q282 219 224 339T111 574T56 697ZM55 14T55 20T59 31T66 38T71 40H540Q555 32 555 20T540 0H71Q70 0 67 2T59 9\",8892:\"55 698Q56 708 70 716H540Q554 708 555 698Q555 694 554 691T552 686T549 682T546 680T542 678T539 676H71Q70 676 68 677T65 679T61 682T58 686T56 691T55 698ZM555 18Q554 12 549 6T536 0H535Q525 0 515 17T459 132Q430 194 410 235L305 455L199 233Q176 185 147 125T105 36T90 7Q85 0 75 0Q63 0 58 11Q55 15 55 21Q58 31 170 266T285 507Q295 522 305 522T320 515Q322 513 439 268L555 24V18\",8896:\"119 -249T97 -249T65 -235T55 -207Q55 -201 56 -198Q58 -190 218 268T380 729Q392 750 416 750Q438 750 451 732Q453 728 534 498T695 36L775 -194Q777 -204 777 -208Q777 -222 767 -235T735 -249Q713 -249 700 -231Q696 -225 557 177L416 579L276 177Q136 -226 132 -231Q119 -249 97 -249\",8897:\"55 708Q55 729 68 739T96 750Q119 750 132 731Q136 726 276 323L416 -79L557 323Q696 725 700 731Q713 749 735 749Q756 749 766 736T777 708Q777 700 696 466T533 1T451 -232Q436 -249 416 -249Q402 -249 391 -241Q384 -236 380 -226Q368 -198 219 230Q55 697 55 708\",8898:\"139 -217Q127 -241 114 -246Q106 -249 97 -249Q67 -249 57 -220Q55 -214 55 102Q55 152 55 221T54 312Q54 422 60 464T91 554Q120 612 165 654T257 714T337 741T392 749Q393 750 402 750Q414 750 422 749Q557 749 660 659T776 430Q777 422 777 102Q777 -214 775 -220Q765 -249 735 -249Q716 -249 708 -241T694 -217L692 428L690 441Q674 540 597 603T416 666H409Q388 666 364 662T294 638T212 581Q156 523 142 441L140 428L139 105V-217\",8899:\"96 750Q103 750 109 748T120 744T127 737T133 730T137 723T139 718V395L140 73L142 60Q159 -43 237 -104T416 -166Q521 -166 597 -103T690 60L692 73L694 718Q708 749 735 749Q765 749 775 720Q777 714 777 398Q777 78 776 71Q766 -51 680 -140Q571 -249 416 -249H411Q261 -249 152 -140Q66 -51 56 71Q55 78 55 398Q55 714 57 720Q60 734 70 740Q80 750 96 750\",8900:\"242 486Q245 488 250 488Q256 488 258 486Q262 484 373 373T486 258T488 250T486 242T373 127T258 14Q256 12 250 12Q245 12 242 14Q237 16 127 126T14 242Q12 245 12 250T14 258Q16 263 126 373T242 486ZM439 250L250 439L61 250L250 61L439 250\",8901:\"78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250\",8902:\"210 282Q210 284 225 381T241 480Q241 484 245 484Q249 486 251 486Q258 486 260 477T272 406Q275 390 276 380Q290 286 290 282L388 299Q484 314 487 314H488Q497 314 497 302Q497 297 434 266Q416 257 404 251L315 206L361 118Q372 98 383 75T401 40L407 28Q407 16 395 16Q394 16 392 16L390 17L250 159L110 17L108 16Q106 16 105 16Q93 16 93 28L99 40Q105 52 116 75T139 118L185 206L96 251Q6 296 4 300Q3 301 3 302Q3 314 12 314H13Q16 314 112 299L210 282\",8903:\"366 543Q374 545 382 545Q405 545 419 538Q429 534 443 521T462 496Q466 478 466 467Q466 438 444 412Q422 390 388 390Q352 390 331 412Q311 434 311 467Q311 499 331 518Q345 533 366 543ZM146 472Q146 479 153 485T166 492Q171 492 187 476T279 385L386 278L495 385Q600 492 608 492Q615 492 621 486T628 472Q628 467 614 452T531 367L435 270H706Q720 256 720 250Q720 241 706 230H435L531 132Q600 63 614 48T628 27Q628 20 622 14T608 7Q600 7 495 114L386 221L279 114Q204 39 188 23T166 7Q159 7 153 13T146 27Q146 32 160 47T244 132L339 230H68Q55 243 55 250Q55 255 68 270H339L244 367Q175 436 161 451T146 472ZM466 34Q466 4 447 -20T388 -44Q353 -44 331 -22Q311 1 311 34Q311 66 331 85Q347 101 366 110Q374 112 382 112Q405 112 419 105Q429 100 443 87T462 63Q466 45 466 34\",8904:\"833 50T833 250T832 450T659 351T487 250T658 150T832 50Q833 50 833 250ZM873 10Q866 -5 854 -5Q851 -5 845 -3L449 226L260 115Q51 -5 43 -5Q39 -5 35 -1T28 7L26 11V489Q33 505 43 505Q51 505 260 385L449 274L845 503Q851 505 853 505Q866 505 873 490V10ZM412 250L67 450Q66 450 66 250T67 50Q69 51 240 150T412 250\",8905:\"146 479Q159 492 166 492Q171 492 189 475T279 386L386 279L495 386Q598 492 608 492Q615 492 621 486T628 472Q628 464 522 357L415 250L522 144Q628 37 628 28Q628 21 622 15T608 8Q599 8 495 115L386 221L279 115Q204 40 188 24T166 8Q162 8 160 9T153 15T146 21V479ZM186 77L359 250L186 424V77\",8906:\"146 472Q146 479 152 485T166 492Q171 492 189 475T279 386L386 279L495 386Q598 492 608 492Q615 492 628 479V21Q615 8 608 8Q599 8 495 115L386 221L279 115Q204 40 188 24T166 8Q159 8 153 14T146 28Q146 37 253 144L359 250L253 357Q146 464 146 472ZM588 77V424L499 337L415 250L588 77\",8907:\"55 674Q55 682 62 688T76 694H77Q83 694 100 677T208 561Q320 440 410 342Q462 286 541 201Q677 55 699 30T722 -2Q722 -9 716 -15T701 -22T688 -17Q687 -15 542 141T394 301L388 306L240 146Q119 15 101 -3T75 -22T61 -16T55 -2Q55 4 67 19T158 117Q190 151 209 172L361 336L209 500Q62 657 57 667Q55 671 55 674\",8908:\"84 -22T76 -22T62 -16T55 -2Q55 4 78 30T249 215Q321 293 367 342Q672 672 683 682Q695 694 702 694Q710 694 716 688T722 674Q722 668 710 653T619 555Q587 521 568 500L416 336L568 172Q715 15 720 5Q722 1 722 -2Q722 -9 716 -15T702 -22H700Q693 -22 671 1T537 146L389 306Q387 304 340 253T237 143T135 33L89 -17Q84 -22 76 -22\",8909:\"56 433Q56 464 71 464Q74 464 77 461Q82 454 82 438T91 397T123 347Q166 307 222 307Q264 307 308 331T386 385T465 438T556 463Q631 463 676 408T722 283Q722 250 708 250Q704 250 699 257Q695 265 693 286T682 330Q670 350 655 367Q612 407 556 407Q514 407 470 383T393 329T314 276T222 251Q148 251 102 306T56 433ZM57 56Q57 71 73 76H706Q722 70 722 56Q722 44 707 36H71Q57 43 57 56\",8910:\"83 558Q83 566 89 572T104 578Q108 578 116 577T146 570T190 555T239 526T286 480Q308 453 325 420T351 358T367 304T376 265T380 251T381 253Q381 262 395 312Q428 434 492 499T642 576Q654 578 655 578Q664 578 670 572T676 558Q676 543 657 540T599 524T525 476Q406 362 400 29V8Q400 -21 380 -21Q369 -21 362 -11Q360 -7 360 12Q360 115 348 200T308 360T231 480T111 537Q83 540 83 558\",8911:\"104 -22Q95 -22 89 -16T83 -2Q83 11 98 16T135 23T192 46T256 103Q360 233 360 549Q360 554 360 557T361 563T362 567T364 569T367 572T371 576Q377 578 380 578Q401 578 401 547Q401 543 401 537T400 527Q409 53 648 19Q676 16 676 -2Q676 -10 670 -16T655 -22Q654 -22 642 -20Q556 -9 492 56T395 244Q381 294 381 303Q381 305 380 305T374 275T352 201T310 110T234 27T117 -20Q105 -22 104 -22\",8912:\"84 250Q84 372 166 450T360 539Q361 539 370 539T395 539T430 540T475 540T524 540H679Q694 532 694 520Q694 511 681 501L522 500H470H441Q366 500 338 496T266 472Q244 461 224 446T179 404T139 337T124 250V245Q124 157 185 89Q244 25 328 7Q348 2 366 2T522 0H681Q694 -10 694 -20Q694 -32 679 -40H526Q510 -40 480 -40T434 -41Q350 -41 289 -25T172 45Q84 127 84 250ZM694 134Q694 123 679 114H425H384Q350 114 326 121T277 154Q238 193 238 251Q238 322 295 361Q318 378 339 382T412 387Q423 387 459 387T520 386H679Q694 377 694 366Q694 354 679 346H519Q493 346 458 346T411 347Q360 347 341 342T303 315Q278 287 278 250Q278 210 301 187T351 156Q358 154 519 154H679Q694 146 694 134\",8913:\"83 520Q83 532 98 540H251Q267 540 297 540T343 541Q427 541 488 525T605 455Q693 374 693 250Q693 165 650 99T545 0T415 -39Q407 -40 251 -40H98Q83 -32 83 -20Q83 -10 96 0H255H308H337Q412 0 439 4T512 28Q533 39 553 54T599 96T639 163T654 250Q654 341 592 411Q557 449 512 472Q468 491 439 495T335 500H306H255L96 501Q83 511 83 520ZM83 366Q83 376 96 386H244Q280 386 317 386T378 386L402 387Q456 387 498 348T540 250Q540 203 512 168T446 120Q427 114 353 114H99Q84 120 84 134Q84 147 98 154H258Q284 154 319 154T366 153Q416 153 436 158T474 185Q500 214 500 250Q500 290 477 313T426 344Q419 346 258 346H98Q83 354 83 366\",8914:\"88 -21T75 -21T55 -7V200Q55 231 55 280Q56 414 60 428Q61 430 61 431Q77 500 152 549T332 598Q443 598 522 544T610 405Q611 399 611 194V-7Q604 -22 591 -22Q582 -22 572 -9L570 405Q563 433 556 449T529 485Q498 519 445 538T334 558Q251 558 179 518T96 401Q95 396 95 193V-7Q88 -21 75 -21ZM229 -21H227Q215 -21 209 -7V166Q209 304 209 327T215 363Q226 398 259 421T333 444Q380 444 414 416T455 347Q457 339 457 166V-7Q449 -21 439 -21H437H435Q423 -21 417 -7V164Q417 303 417 325T411 358Q387 403 333 403T255 358Q250 347 250 325T249 164V-7Q241 -21 231 -21H229\",8915:\"591 598H592Q604 598 611 583V376Q611 345 611 296Q610 162 606 148Q605 146 605 145Q586 68 507 23T333 -22Q268 -22 209 -1T106 66T56 173Q55 180 55 384L56 585Q66 598 75 598Q85 598 95 585V378L96 172L98 162Q112 95 181 57T332 18Q415 18 487 58T570 175Q571 180 571 383V583Q579 598 591 598ZM437 598Q450 598 457 583V410Q457 237 455 229Q448 189 414 161T333 132Q291 132 255 157T211 230Q209 237 209 412L210 585Q220 598 229 598Q242 598 249 583V412Q249 273 249 251T255 218Q279 173 333 173T411 218Q416 229 416 251T417 412V583Q425 598 437 598\",8916:\"76 -22Q64 -22 56 -7V176L57 360L59 370Q66 401 83 426T123 468T171 495T221 513T265 522T298 527L311 528H314V625L315 723Q325 736 334 736Q346 736 354 721V528H356L368 527Q380 526 399 523T441 515T490 498T537 472T578 433T606 379Q611 359 611 171V-7Q604 -21 591 -21T571 -7V170Q571 313 571 337T565 375Q555 408 526 432T461 467T402 482T365 487H354V-7Q347 -21 334 -21T314 -7V487H303Q251 484 207 467Q121 438 99 367L97 357L96 174V-9Q86 -22 76 -22\",8918:\"86 261Q92 267 381 404T673 541Q680 541 686 535T693 521T689 510Q684 504 418 379L151 250L418 121Q686 -4 689 -10Q693 -14 693 -21T687 -34T675 -41Q668 -41 380 96T86 239Q82 244 82 250Q82 257 86 261ZM610 250Q610 224 592 198T531 172Q498 172 475 195Q453 214 453 250Q453 308 513 328Q515 330 535 330Q569 328 589 304T610 250\",8919:\"82 521Q82 529 89 535T100 541Q107 541 395 404T689 261Q693 257 693 250T689 239Q684 234 396 97T100 -41Q95 -41 89 -35T82 -21Q82 -12 96 -4Q118 9 358 121L624 250L358 379Q91 503 86 510Q82 514 82 521ZM165 250Q165 282 188 306T239 330Q262 330 275 323Q303 312 318 283Q322 272 322 250Q322 213 300 195Q277 172 246 172Q224 172 213 177Q165 200 165 250\",8920:\"639 -48Q639 -54 634 -60T619 -67H618Q612 -67 536 -26Q430 33 329 88Q61 235 59 239Q56 243 56 250T59 261Q62 266 336 415T615 567L619 568Q622 567 625 567Q639 562 639 548Q639 540 633 534Q632 532 374 391L117 250L374 109Q632 -32 633 -34Q639 -40 639 -48ZM958 -48Q958 -54 953 -60T938 -67H937Q931 -67 855 -26Q749 33 648 88Q380 235 378 239Q375 243 375 250T378 261Q381 266 655 415T934 567L938 568Q941 567 944 567Q958 562 958 548Q958 540 952 534Q951 532 693 391L436 250L693 109Q951 -32 952 -34Q958 -40 958 -48ZM1277 -48Q1277 -54 1272 -60T1257 -67H1256Q1250 -67 1174 -26Q1068 33 967 88Q699 235 697 239Q694 243 694 250T697 261Q700 266 974 415T1253 567L1257 568Q1260 567 1263 567Q1277 562 1277 548Q1277 540 1271 534Q1270 532 1012 391L755 250L1012 109Q1270 -32 1271 -34Q1277 -40 1277 -48\",8921:\"75 -67Q65 -67 60 -61T55 -48Q55 -40 61 -34Q62 -32 329 109L595 250L329 391Q62 532 61 534Q55 540 55 548Q55 562 69 567H77Q81 567 222 493T506 342T653 264Q667 250 653 236Q649 234 504 157T220 7T77 -67H75ZM364 547Q364 563 381 567L384 568Q387 568 518 499T795 353T955 269Q967 261 967 250T955 231Q925 216 780 139T513 -3T383 -67Q373 -67 369 -60T364 -47Q364 -40 370 -34Q373 -31 639 109L904 250L639 391Q373 531 370 534Q364 540 364 547ZM674 538T674 548T681 562T693 567Q699 567 816 505Q915 453 993 412Q1050 382 1132 339Q1241 282 1259 271T1277 250Q1277 241 1263 232Q1246 221 985 84Q698 -67 692 -67Q674 -67 674 -47Q674 -38 680 -33Q683 -30 947 109L1213 250L947 391Q683 530 680 533Q674 538 674 548\",8922:\"674 445Q674 438 669 432T655 425T369 531T90 640Q83 645 83 655Q83 668 95 673Q644 886 654 886Q662 886 668 880T674 866Q674 856 663 850Q649 843 411 751L160 655L407 560Q474 534 561 501Q646 469 660 462T674 445ZM84 250Q84 260 99 270H658Q674 264 674 250Q674 238 659 230H98Q84 237 84 250ZM83 55Q83 68 94 73Q98 76 104 76Q108 75 383 -30T664 -138Q674 -144 674 -155Q674 -165 667 -170Q664 -173 385 -279T104 -386Q85 -386 83 -368Q83 -354 92 -349Q93 -349 347 -251L597 -155L346 -59Q296 -40 223 -12Q118 28 101 36T83 55\",8923:\"111 425T102 425T88 431T83 445V446Q83 455 96 461Q111 469 203 504Q287 536 350 560L597 655L346 751Q94 848 92 850Q83 856 83 866Q83 873 88 879T104 886Q109 885 386 779T667 670Q674 665 674 655T667 640Q665 638 388 532ZM84 250Q84 260 99 270H658Q674 264 674 250Q674 238 659 230H98Q84 237 84 250ZM653 76Q656 76 660 75T669 68T674 56Q674 46 665 40Q663 38 411 -59L160 -155L410 -251Q664 -349 665 -349Q674 -354 674 -368Q672 -386 654 -386Q650 -386 371 -279T90 -170Q83 -165 83 -155Q83 -144 93 -138Q645 76 653 76\",8926:\"113 424Q83 424 83 444Q83 453 96 464H121Q181 466 234 474T341 501T435 545T505 613T542 707Q545 734 564 734Q583 731 583 714Q583 658 560 613T500 538T414 486T321 453T229 434T156 426T113 424ZM112 270Q83 270 83 290Q83 301 94 307Q98 310 118 310Q624 310 653 556Q657 580 675 580Q693 577 693 559V552Q684 472 628 410T465 314Q436 303 372 290Q373 290 388 287T425 278T465 266Q674 199 693 28L694 17L692 14Q691 11 689 8T683 3T673 0Q657 0 653 24Q623 270 118 270H112\",8927:\"195 713Q195 725 201 729T214 734Q227 734 231 722T238 691T255 641T299 580Q405 474 656 464H681Q694 451 694 443Q694 424 670 424H664Q535 424 415 465T235 595Q195 657 195 713ZM668 310Q694 310 694 290Q694 285 691 279Q684 271 664 270Q550 268 464 257T301 220T179 146T124 27Q119 0 103 0T83 16Q83 21 83 31T92 68T113 121T157 177T229 231Q295 268 405 290Q404 290 389 293T352 302T312 314Q138 371 96 500Q83 541 83 562Q83 568 89 574T103 580Q115 580 120 570T126 542T138 497T173 442Q289 310 659 310H668\",8928:\"82 344Q82 349 95 364H124Q266 364 398 390L429 397L509 595Q519 619 536 659Q581 766 590 783T609 801Q616 801 622 795T629 781Q629 776 553 595Q533 548 516 506T489 439T480 415Q482 415 505 426T538 444Q632 498 651 601Q654 621 658 628T673 635Q680 635 686 629T693 615Q693 591 678 546Q636 433 484 375L458 364L451 348Q443 332 443 329T455 324Q480 316 503 307T560 277T619 233T664 170T691 86Q693 68 691 64Q684 53 672 53Q664 53 658 59Q657 60 650 97T617 174T538 244Q515 257 476 273T428 289Q425 289 412 256Q381 179 344 90L262 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L464 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 174 -213T202 -143H95Q82 -128 82 -123T95 -103H220L302 97Q384 288 384 299Q384 302 341 308T235 319T124 324H95Q82 337 82 344ZM399 338Q403 338 406 346L409 353L375 344Q375 343 384 341T399 338\",8929:\"146 -283Q146 -282 174 -213T202 -143H95Q82 -127 82 -123T95 -103H220L300 93Q343 196 374 270Q385 294 386 299L373 295Q331 287 289 268Q241 249 208 224T159 174T135 127T124 85T118 59Q112 53 103 53Q91 53 84 64Q82 68 84 86Q96 185 174 248T375 337L400 344Q399 344 381 348T351 355T316 364T276 379T235 398T193 424T155 456T122 497T98 546Q82 587 82 615Q82 622 88 628T102 635Q112 635 116 628T124 601Q128 579 134 562T159 515T207 463T290 418T415 384L422 381L506 586Q571 744 584 772T609 801Q616 801 622 795T629 781T544 577Q525 529 504 478T473 402T462 375Q480 373 500 373Q579 364 651 364H680Q682 361 686 357T691 351T693 344Q693 337 680 324H651Q553 324 451 310L433 308L349 104L262 -101L473 -103H682Q694 -115 694 -123Q694 -133 682 -141L464 -143H246L213 -219Q182 -292 178 -299Q172 -303 166 -303T153 -297T146 -283\",8934:\"86 450Q93 455 380 592T673 730Q680 730 686 724T693 710Q693 702 688 699Q686 693 417 568L151 439L417 310Q685 185 688 179Q693 176 693 168Q693 161 687 155T675 148Q668 148 380 285T86 428Q74 438 86 450ZM55 -205Q55 -175 64 -142T92 -76T145 -22T222 -1Q288 -1 362 -66Q369 -72 372 -75T378 -79T382 -81T384 -79Q389 -74 439 21Q483 100 490 111T504 122Q510 122 518 118T526 103Q526 101 510 69T467 -12T419 -99L413 -112L433 -128Q498 -180 553 -180Q605 -180 646 -139Q672 -112 681 -77T693 -21T706 -1Q719 -1 719 -33Q719 -39 717 -57Q708 -141 655 -190Q625 -224 586 -232Q568 -237 551 -237Q487 -237 413 -172L391 -155Q391 -157 335 -255Q297 -325 286 -342T268 -359Q260 -359 254 -353T248 -339T304 -230L359 -126Q359 -124 337 -107T302 -81Q262 -57 221 -57Q170 -57 130 -93T84 -201Q82 -236 70 -236Q55 -236 55 -205\",8935:\"88 723Q95 730 99 730Q106 730 394 593T688 450Q693 447 693 439T688 428Q683 423 395 286T99 148Q94 148 88 155T82 168Q82 175 86 179Q89 184 357 310L624 439L357 568Q88 694 86 699Q81 703 81 711T88 723ZM55 -205Q55 -175 64 -142T92 -76T145 -22T222 -1Q288 -1 362 -66Q369 -72 372 -75T378 -79T382 -81T384 -79Q389 -74 439 21Q483 100 490 111T504 122Q510 122 518 118T526 103Q526 101 510 69T467 -12T419 -99L413 -112L433 -128Q498 -180 553 -180Q605 -180 646 -139Q672 -112 681 -77T693 -21T706 -1Q719 -1 719 -33Q719 -39 717 -57Q708 -141 655 -190Q625 -224 586 -232Q568 -237 551 -237Q487 -237 413 -172L391 -155Q391 -157 335 -255Q297 -325 286 -342T268 -359Q260 -359 254 -353T248 -339T304 -230L359 -126Q359 -124 337 -107T302 -81Q262 -57 221 -57Q170 -57 130 -93T84 -201Q82 -236 70 -236Q55 -236 55 -205\",8936:\"95 419Q81 433 81 439T95 459H124Q318 459 455 501Q515 521 556 550T615 607T641 659T652 702T659 725Q667 730 673 730Q680 730 686 724T693 710Q693 682 677 641Q668 616 654 594T622 554T586 522T545 497T504 477T464 462T428 452T397 444T375 439Q379 437 410 430T476 411T551 379T625 321T677 237Q693 196 693 168Q693 161 687 155T673 148Q662 148 658 154T651 181Q638 253 591 300T455 377Q318 419 124 419H95ZM55 -205Q55 -175 64 -142T92 -76T145 -22T222 -1Q288 -1 362 -66Q369 -72 372 -75T378 -79T382 -81T384 -79Q389 -74 439 21Q483 100 490 111T504 122Q510 122 518 118T526 103Q526 101 510 69T467 -12T419 -99L413 -112L433 -128Q498 -180 553 -180Q605 -180 646 -139Q672 -112 681 -77T693 -21T706 -1Q719 -1 719 -33Q719 -39 717 -57Q708 -141 655 -190Q625 -224 586 -232Q568 -237 551 -237Q487 -237 413 -172L391 -155Q391 -157 335 -255Q297 -325 286 -342T268 -359Q260 -359 254 -353T248 -339T304 -230L359 -126Q359 -124 337 -107T302 -81Q262 -57 221 -57Q170 -57 130 -93T84 -201Q82 -236 70 -236Q55 -236 55 -205\",8937:\"679 459Q693 445 693 439Q693 430 679 419H651Q455 419 319 377Q231 347 184 300T124 181Q120 161 116 155T102 148Q95 148 89 154T82 168Q82 192 97 237Q111 275 137 306T188 355T249 391T307 414T361 429T399 439Q397 440 364 447T298 467T224 499T149 557T97 641Q82 686 82 710Q82 717 88 723T102 730L115 725Q118 722 124 697Q137 625 184 578T319 501Q456 459 651 459H679ZM55 -205Q55 -175 64 -142T92 -76T145 -22T222 -1Q288 -1 362 -66Q369 -72 372 -75T378 -79T382 -81T384 -79Q389 -74 439 21Q483 100 490 111T504 122Q510 122 518 118T526 103Q526 101 510 69T467 -12T419 -99L413 -112L433 -128Q498 -180 553 -180Q605 -180 646 -139Q672 -112 681 -77T693 -21T706 -1Q719 -1 719 -33Q719 -39 717 -57Q708 -141 655 -190Q625 -224 586 -232Q568 -237 551 -237Q487 -237 413 -172L391 -155Q391 -157 335 -255Q297 -325 286 -342T268 -359Q260 -359 254 -353T248 -339T304 -230L359 -126Q359 -124 337 -107T302 -81Q262 -57 221 -57Q170 -57 130 -93T84 -201Q82 -236 70 -236Q55 -236 55 -205\",8938:\"693 -30Q686 -41 673 -41Q661 -41 506 34L346 110L280 -44Q228 -162 216 -185T193 -208Q177 -208 173 -192Q173 -186 242 -30T311 128Q271 145 184 186T86 236Q82 240 82 246Q82 251 86 259Q96 267 271 350L449 434L506 565Q537 635 551 664T571 700T582 706Q587 706 593 701T600 690Q600 679 553 572Q504 463 504 461L586 501Q672 539 673 539Q679 539 693 525V-30ZM653 10V488L566 445L480 405L422 276Q415 260 405 236T388 199T376 171T368 151T366 145Q368 143 510 77T653 10ZM422 374Q422 376 420 376T285 313T151 248Q315 168 326 163Q415 356 422 374\",8939:\"82 525Q96 539 102 539Q103 539 122 530T186 501T266 463L426 388Q428 388 495 541Q564 694 569 699Q573 706 581 706Q587 706 593 702T600 691Q600 676 533 528Q515 486 506 465T485 418T470 381T466 370Q466 369 575 316Q676 269 689 259Q693 253 693 248Q693 242 689 236Q688 235 506 145Q328 63 324 59Q324 50 266 -70Q224 -169 214 -188T193 -208Q177 -208 173 -192Q173 -183 222 -77Q244 -29 257 2T269 34L186 -6Q108 -43 99 -43Q93 -43 82 -30V525ZM271 416Q129 485 126 485H125Q122 485 122 250Q122 10 124 10L211 50L295 92L411 350Q411 351 271 416ZM624 248L449 332L440 319Q434 297 393 214Q353 121 353 119Q355 119 489 182T624 248\",8940:\"82 -123Q82 -114 93 -103H166L238 -101L293 50Q349 200 349 204L220 266Q166 291 140 304T100 325T84 336T82 344Q82 353 94 360Q112 372 282 453L473 541L482 568Q487 578 529 693Q559 785 569 795Q573 802 581 802Q587 802 593 797T599 786Q599 775 564 675L526 570Q526 568 561 584T633 617T673 635Q679 635 693 621V66Q686 54 679 54Q665 54 526 119Q491 137 458 153T405 177T386 184Q385 182 334 42T282 -101T482 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L473 -143H266L238 -219Q217 -278 210 -290T193 -303Q178 -303 173 -287Q173 -279 198 -214L222 -145Q222 -143 158 -143L93 -141L86 -136Q82 -131 82 -123ZM653 106V584L506 513L453 370Q442 339 428 300T407 243T400 224Q403 222 527 164T653 106ZM453 486Q453 488 451 488T300 417T151 344L224 308Q247 298 285 279T331 257L364 241L453 486\",8941:\"82 621Q96 635 102 635T249 568L420 486L449 473L469 533Q563 789 569 797Q573 801 581 801Q598 801 600 786Q602 781 544 617L484 455Q531 435 584 408Q677 364 689 355Q693 351 693 344Q693 339 692 337T676 325T631 302T538 257Q504 241 465 223T406 195T386 186Q384 184 333 44T282 -101Q282 -103 482 -103H680Q682 -105 684 -108T688 -113T691 -118T693 -124Q693 -134 682 -141L473 -143H266L238 -219Q217 -278 210 -290T193 -303Q178 -303 173 -287Q173 -279 198 -214L222 -145Q222 -143 158 -143L93 -141L86 -136Q82 -131 82 -123Q82 -114 93 -103H166L238 -101L333 159Q326 159 220 106Q110 54 97 54Q89 54 82 66V621ZM298 501Q155 567 142 575L122 584V344Q122 106 124 106Q125 106 180 132T291 185T351 213Q355 217 393 326L433 435Q433 436 298 501ZM549 381Q472 417 471 417L406 241Q408 240 516 291T624 344L549 381\",8942:\"78 30Q78 54 95 72T138 90Q162 90 180 74T199 31Q199 6 182 -12T139 -30T96 -13T78 30ZM78 440Q78 464 95 482T138 500Q162 500 180 484T199 441Q199 416 182 398T139 380T96 397T78 440ZM78 840Q78 864 95 882T138 900Q162 900 180 884T199 841Q199 816 182 798T139 780T96 797T78 840\",8943:\"78 250Q78 274 95 292T138 310Q162 310 180 294T199 251Q199 226 182 208T139 190T96 207T78 250ZM525 250Q525 274 542 292T585 310Q609 310 627 294T646 251Q646 226 629 208T586 190T543 207T525 250ZM972 250Q972 274 989 292T1032 310Q1056 310 1074 294T1093 251Q1093 226 1076 208T1033 190T990 207T972 250\",8945:\"133 760Q133 784 150 802T193 820Q217 820 235 804T254 761Q254 736 237 718T194 700T151 717T133 760ZM580 460Q580 484 597 502T640 520Q664 520 682 504T701 461Q701 436 684 418T641 400T598 417T580 460ZM1027 160Q1027 184 1044 202T1087 220Q1111 220 1129 204T1148 161Q1148 136 1131 118T1088 100T1045 117T1027 160\",8965:\"55 698Q56 708 70 716H540Q554 708 555 698Q555 694 554 691T552 686T549 682T546 680T542 678T539 676H71Q70 676 68 677T65 679T61 682T58 686T56 691T55 698ZM555 18Q554 12 549 6T536 0H535Q525 0 515 17T459 132Q430 194 410 235L305 455L199 233Q176 185 147 125T105 36T90 7Q85 0 75 0Q63 0 58 11Q55 15 55 21Q58 31 170 266T285 507Q295 522 305 522T320 515Q322 513 439 268L555 24V18\",8966:\"55 795Q56 806 70 813H540Q554 806 555 795Q555 791 554 788T552 783T549 779T546 777T542 775T539 773H71Q70 773 68 774T65 776T61 779T58 783T56 788T55 795ZM55 601Q56 612 70 619H540Q554 612 555 601Q555 597 554 594T552 589T549 585T546 583T542 581T539 579H71Q70 579 68 580T65 582T61 585T58 589T56 594T55 601ZM75 -97Q67 -97 61 -91T55 -81Q55 -71 169 166T285 410Q295 425 305 425Q311 425 316 422T323 414L325 410Q327 404 441 167T555 -81Q555 -85 549 -91T535 -97T520 -90Q519 -89 506 -61T463 27T411 136L305 358L199 136Q167 71 129 -10Q98 -75 92 -86T75 -97\",8968:\"174 734Q178 746 190 750H298H369Q400 750 411 747T422 730T411 713T372 709Q365 709 345 709T310 710H214V-235Q206 -248 196 -250Q192 -250 189 -249T184 -247T180 -244T178 -241T176 -237T174 -234V734\",8969:\"21 717T21 730T32 746T75 750H147H256Q266 742 269 735V-235Q262 -248 251 -250Q247 -250 244 -249T239 -247T235 -244T233 -241T231 -237T229 -234V710H133Q119 710 99 710T71 709Q43 709 32 713\",8970:\"174 734Q174 735 175 737T177 740T180 744T184 747T189 749T196 750Q206 748 214 735V-210H310H373Q401 -210 411 -213T422 -230T411 -247T369 -251Q362 -251 338 -251T298 -250H190Q178 -246 174 -234V734\",8971:\"229 734Q229 735 230 737T232 740T235 744T239 747T244 749T251 750Q262 748 269 735V-235Q266 -240 256 -249L147 -250H77Q43 -250 32 -247T21 -230T32 -213T72 -209Q79 -209 99 -209T133 -210H229V734\",8988:\"76 306Q62 306 59 319T55 386V500V596Q55 664 57 676T68 692Q71 694 250 694Q428 694 432 692Q444 685 444 674Q444 665 432 656Q428 654 261 654H95V487Q95 355 95 336T90 312Q84 306 76 306\",8989:\"424 306Q418 306 413 310T406 318L404 321V654H238Q71 654 68 656Q55 662 55 674T68 692Q71 694 250 694H379Q432 694 438 688Q443 683 443 662T444 500T444 338T438 312Q432 306 424 306\",8990:\"55 172V287Q55 341 58 353T76 366Q88 366 95 351V18H261Q428 18 432 16Q444 9 444 -2Q444 -11 432 -20Q428 -22 250 -22H120Q67 -22 61 -16Q56 -11 56 10T55 172\",8991:\"404 351Q410 366 424 366Q437 366 440 353T444 288V172V72Q444 8 443 -4T432 -20Q428 -22 250 -22Q71 -22 68 -20Q55 -14 55 -2T68 16Q71 18 238 18H404V351\",8994:\"55 141Q55 149 72 174T125 234T209 303T329 360T478 388H526Q649 383 765 319Q814 291 858 250T923 179T944 141Q944 133 938 128T924 122Q914 124 912 125T902 139Q766 328 500 328Q415 328 342 308T225 258T150 199T102 148T84 124Q81 122 75 122Q55 127 55 141\",8995:\"923 378Q944 378 944 358Q944 345 912 311T859 259Q710 134 500 134Q288 134 140 259Q55 336 55 358Q55 366 61 372T75 378Q78 378 84 376Q86 376 101 356T147 310T221 257T339 212T500 193Q628 193 734 236Q841 282 903 363Q914 378 923 378\",9001:\"333 -232Q332 -239 327 -244T313 -250Q303 -250 296 -240Q293 -233 202 6T110 250T201 494T296 740Q299 745 306 749L309 750Q312 750 313 750Q331 750 333 732Q333 727 243 489Q152 252 152 250T243 11Q333 -227 333 -232\",9002:\"55 732Q56 739 61 744T75 750Q85 750 92 740Q95 733 186 494T278 250T187 6T92 -240Q85 -250 75 -250Q67 -250 62 -245T55 -232Q55 -227 145 11Q236 248 236 250T145 489Q55 727 55 732\",9136:\"357 741V726Q357 720 349 715Q261 655 242 539Q240 526 240 454T239 315T239 247Q240 235 240 124V40Q240 -17 233 -53T201 -130Q155 -206 78 -244H69H64Q58 -244 57 -243T56 -234Q56 -232 56 -231V-225Q56 -218 63 -215Q153 -153 170 -39Q172 -25 173 119V219Q173 245 174 249Q173 258 173 376V460Q173 515 178 545T201 611Q244 695 327 741L334 744H354L357 741\",9137:\"78 744Q153 706 196 640T239 492V376Q239 341 239 314T238 271T238 253Q239 251 239 223V119V49Q239 -39 254 -85Q263 -111 275 -134T301 -172T326 -197T346 -213T356 -221T357 -232V-241L354 -244H334Q264 -209 222 -146T174 -12Q173 -6 173 95Q173 134 173 191T174 250Q173 258 173 382V451Q173 542 159 585Q145 626 120 658T75 706T56 723V731Q56 741 57 742T66 744H78\",9168:\"312 0V602H355V0H312\",9416:\"451 -175Q328 -175 226 -115T66 47T8 267Q8 303 15 342T39 431T94 531T186 622Q239 663 307 686T424 709H440Q604 709 716 622Q757 592 788 555T838 482T869 414T886 350T892 301T894 267Q894 147 835 45T674 -116T451 -175ZM854 268Q854 375 802 467T657 614T450 670Q283 670 166 552T49 267Q49 99 167 -18T453 -136Q617 -136 735 -18T854 268ZM273 378Q273 430 309 474T409 527Q411 527 417 527T428 528Q498 528 549 484L567 505Q583 528 590 528H594Q600 528 606 522V350L600 344H586Q577 344 574 344T569 347T566 357Q542 491 432 491Q389 491 365 465T340 407Q340 391 344 378T358 356T377 340T400 328T421 321T443 316T459 313Q499 305 517 300T559 279T601 238Q629 195 629 148Q629 80 583 33T471 -14Q392 -14 330 30Q312 6 293 -13Q292 -14 285 -14Q279 -14 273 -8V77V138Q273 160 275 165T286 170H294H307Q313 164 313 158Q313 108 350 67T471 26Q512 26 537 54T562 119Q562 137 558 151T544 176T527 193T504 205T483 212T459 218T441 222Q391 232 368 241T318 273Q273 316 273 378\",9484:\"76 306Q62 306 59 319T55 386V500V596Q55 664 57 676T68 692Q71 694 250 694Q428 694 432 692Q444 685 444 674Q444 665 432 656Q428 654 261 654H95V487Q95 355 95 336T90 312Q84 306 76 306\",9488:\"424 306Q418 306 413 310T406 318L404 321V654H238Q71 654 68 656Q55 662 55 674T68 692Q71 694 250 694H379Q432 694 438 688Q443 683 443 662T444 500T444 338T438 312Q432 306 424 306\",9492:\"55 172V287Q55 341 58 353T76 366Q88 366 95 351V18H261Q428 18 432 16Q444 9 444 -2Q444 -11 432 -20Q428 -22 250 -22H120Q67 -22 61 -16Q56 -11 56 10T55 172\",9496:\"404 351Q410 366 424 366Q437 366 440 353T444 288V172V72Q444 8 443 -4T432 -20Q428 -22 250 -22Q71 -22 68 -20Q55 -14 55 -2T68 16Q71 18 238 18H404V351\",9585:\"19 -195Q13 -195 7 -188T0 -176Q0 -169 18 -151L822 683Q835 694 840 694T852 688T860 674Q860 667 810 614T460 252Q57 -167 44 -179Q27 -195 19 -195\",9586:\"0 675Q0 681 6 687T19 694Q27 694 44 678L460 247Q759 -62 809 -115T860 -175Q860 -183 852 -189T840 -195Q835 -195 822 -184L18 649Q0 667 0 675\",9632:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71\",9633:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM682 40V649H95V40H682\",9642:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71\",9650:\"99 -20Q84 -11 84 0Q84 5 148 145T278 424L342 563Q347 575 360 575Q368 575 375 570Q376 569 441 430T571 148T637 0Q637 -11 622 -20H99\",9651:\"75 0L72 2Q69 3 67 5T62 11T59 20Q59 24 62 30Q65 37 245 370T428 707Q428 708 430 710T436 714T444 716Q451 716 455 712Q459 710 644 368L828 27V20Q828 7 814 0H75ZM610 347L444 653Q443 653 278 347T113 40H775Q775 42 610 347\",9652:\"99 -20Q84 -11 84 0Q84 5 148 145T278 424L342 563Q347 575 360 575Q368 575 375 570Q376 569 441 430T571 148T637 0Q637 -11 622 -20H99\",9653:\"75 0L72 2Q69 3 67 5T62 11T59 20Q59 24 62 30Q65 37 245 370T428 707Q428 708 430 710T436 714T444 716Q451 716 455 712Q459 710 644 368L828 27V20Q828 7 814 0H75ZM610 347L444 653Q443 653 278 347T113 40H775Q775 42 610 347\",9654:\"83 523Q83 524 85 527T92 535T103 539Q107 539 389 406T680 268Q694 260 694 249Q694 239 687 234Q685 232 395 95L107 -41H101Q90 -40 83 -26V523\",9656:\"83 523Q83 524 85 527T92 535T103 539Q107 539 389 406T680 268Q694 260 694 249Q694 239 687 234Q685 232 395 95L107 -41H101Q90 -40 83 -26V523\",9657:\"26 489Q33 505 43 505Q51 505 260 385Q464 266 471 259Q473 257 473 250Q473 242 469 239Q459 231 260 115Q51 -5 43 -5Q39 -5 35 -1T28 7L26 11V489ZM412 250L67 450Q66 450 66 250T67 50Q69 51 240 150T412 250\",9660:\"84 556Q84 567 99 576H622Q637 567 637 556Q637 551 572 409T441 127T375 -14Q368 -19 360 -19H358Q349 -19 342 -7T296 92Q249 193 211 275Q84 550 84 556\",9661:\"59 480Q59 485 61 489T66 495T72 498L75 500H814Q828 493 828 480V474L644 132Q458 -210 455 -212Q451 -215 444 -215T433 -212Q429 -210 342 -49T164 282T64 466Q59 478 59 480ZM775 460H113Q113 459 278 153T444 -153T610 153T775 460\",9662:\"84 556Q84 567 99 576H622Q637 567 637 556Q637 551 572 409T441 127T375 -14Q368 -19 360 -19H358Q349 -19 342 -7T296 92Q249 193 211 275Q84 550 84 556\",9663:\"59 480Q59 485 61 489T66 495T72 498L75 500H814Q828 493 828 480V474L644 132Q458 -210 455 -212Q451 -215 444 -215T433 -212Q429 -210 342 -49T164 282T64 466Q59 478 59 480ZM775 460H113Q113 459 278 153T444 -153T610 153T775 460\",9664:\"694 -26Q686 -40 676 -41H670L382 95Q92 232 90 234Q83 239 83 249Q83 262 96 267Q101 270 379 401T665 537Q671 539 674 539Q686 539 694 524V-26\",9666:\"694 -26Q686 -40 676 -41H670L382 95Q92 232 90 234Q83 239 83 249Q83 262 96 267Q101 270 379 401T665 537Q671 539 674 539Q686 539 694 524V-26\",9667:\"473 10Q466 -5 454 -5Q451 -5 445 -3Q444 -3 343 56T140 173T35 234Q26 239 26 250T35 266Q40 269 240 384T445 503Q451 505 453 505Q466 505 473 490V10ZM433 50T433 250T432 450T259 351T87 250T258 150T432 50Q433 50 433 250\",9674:\"318 709Q325 716 332 716Q340 716 344 713T474 511Q611 298 611 292Q611 285 526 152Q494 103 474 72Q347 -128 344 -130Q340 -132 333 -132T322 -130Q319 -128 257 -31T131 169T60 278Q56 285 56 292Q56 298 60 305Q73 326 194 516T318 709ZM567 290T567 291T451 475T333 658L100 293Q100 288 215 108L333 -74Q334 -74 450 108\",9711:\"56 250Q56 353 95 442T196 589T335 681T491 715Q573 715 635 693Q694 673 747 635T846 543T917 412T944 250Q944 58 815 -78T500 -215Q457 -215 429 -210Q274 -183 165 -56T56 250ZM500 -176Q664 -176 784 -54T904 250Q904 418 799 536T543 674Q534 675 493 675Q425 675 357 647T229 567T133 432T96 250Q96 160 129 80T217 -56T346 -144T500 -176\",9723:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM682 40V649H95V40H682\",9724:\"71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71\",9733:\"367 395Q374 416 398 492T442 627T463 688Q463 692 467 692Q471 694 472 694Q478 694 484 680T523 562Q553 469 576 400L577 395H731H819Q872 395 883 394T895 384Q895 380 891 376T832 333Q794 305 767 285Q643 195 643 194L690 47Q737 -96 737 -103Q737 -111 727 -111Q721 -111 594 -18L472 71L350 -18Q223 -111 217 -111Q207 -111 207 -103Q207 -96 254 47L301 194Q301 195 241 239T118 328T51 378Q49 382 49 384Q49 392 58 393T110 395H213H367\",9824:\"181 -21Q134 -21 96 27T55 193Q55 224 58 247T82 317T143 410Q172 443 234 498Q282 543 314 598T360 687T380 725Q386 727 389 727Q395 727 398 725T406 716T413 702T423 677T439 641Q481 556 544 498Q633 420 678 353T723 204Q723 142 711 94T669 12T590 -21Q520 -21 490 8T459 66V70H409V62Q409 22 416 -17T430 -82T437 -112Q437 -131 407 -131Q403 -131 397 -131T389 -130T382 -130T372 -131Q341 -131 341 -111Q341 -107 348 -82T362 -18T369 62V70H319V66Q319 57 314 44T297 16T257 -10T191 -21H181\",9825:\"55 490Q55 557 71 604T114 674T167 706T222 716Q279 716 322 684T389 605Q391 610 395 617T414 643T447 677T494 704T555 716Q642 716 682 652T723 490Q723 455 718 426T684 342T602 227Q573 196 537 161T485 110T449 63T412 -8Q408 -22 404 -27T389 -33Q382 -33 379 -31T372 -23T366 -8T355 18T335 54Q319 81 298 104T239 163T176 227Q102 310 79 371T55 490ZM198 674Q143 664 119 613T95 491Q95 415 137 346Q174 282 265 194T384 48L389 39Q391 42 397 54T406 71T415 86T427 104T442 122T464 146T491 172Q571 249 613 303Q683 396 683 487Q683 581 649 631Q613 676 556 676Q495 676 457 634T410 538Q407 514 390 514Q386 514 380 517Q372 520 369 536T355 581T319 635Q277 675 223 675H217H208L204 674Q200 674 198 674\",9826:\"370 714Q370 717 375 722T388 727Q398 727 403 721T417 697Q420 692 421 689Q536 465 709 304Q723 291 723 282T709 260Q529 93 406 -153Q402 -162 390 -162H389Q379 -162 376 -158T357 -125Q247 89 89 241L64 265Q55 272 55 282Q55 287 57 290T64 300T77 312T98 331T127 361Q197 435 258 523T344 663L370 714ZM655 299Q568 384 508 470T389 662L376 638Q362 613 341 577T289 497T215 399T123 299L105 282L123 265Q210 180 270 94T389 -98L402 -74Q416 -49 437 -13T489 67T563 165T655 265L673 282L655 299\",9827:\"213 532Q213 615 265 670T389 726Q461 726 513 671T565 532Q565 511 562 492T553 458T541 432T526 409T512 393T498 379L490 371L511 326Q512 326 516 330T528 341T546 353T572 363T606 368Q664 368 707 315T750 174Q750 87 699 33T579 -22Q567 -22 553 -20T517 -10T479 16T459 63V70H409V62Q409 22 416 -17T430 -82T437 -112Q437 -131 407 -131Q403 -131 397 -131T389 -130T382 -130T372 -131Q341 -131 341 -111Q341 -107 348 -82T362 -18T369 62V70H319V63Q315 25 281 2T197 -22Q132 -22 80 32T28 174Q28 255 69 311T175 368Q192 368 207 364T232 353T250 341T262 331T267 326L288 371L280 378Q272 385 267 391T253 407T238 430T226 457T217 492T213 532\",9837:\"200 467Q254 467 293 428T332 321Q332 147 104 -11L88 -22H75Q62 -22 56 -16L55 362V647Q55 743 60 748Q63 750 76 750H83Q87 750 95 744V434L104 440Q144 467 200 467ZM237 322Q237 360 225 388T183 417Q158 417 134 407T101 378Q96 370 96 349T95 197V34Q152 91 194 167T237 322\",9838:\"65 721Q78 734 94 734Q100 734 104 727V444L116 449Q129 454 157 465T208 486Q313 527 314 527Q318 527 324 521V-210Q306 -223 294 -223Q289 -223 284 -216V-13L270 -18Q257 -24 231 -34T180 -54Q77 -96 74 -96T65 -90V721ZM104 13Q282 84 283 85Q284 85 284 252Q284 418 283 418L230 396L140 360L104 346V13\",9839:\"101 -223Q94 -223 93 -217T91 -188V-151Q91 -88 90 -88Q87 -88 80 -92T68 -96Q62 -96 56 -90L55 -50V-22Q55 -8 58 -4T78 5L91 10V177Q91 343 90 343Q87 343 80 339T68 335Q62 335 56 341L55 381V409Q55 423 58 427T78 436L91 441V543V616Q91 643 93 648T106 656Q119 662 126 659Q130 657 130 645T131 554V456L257 503V607L258 710L260 712Q261 715 272 719T286 723Q293 723 295 715T297 671V617Q297 519 298 519Q301 519 307 522T319 526Q327 526 333 521V437L330 435Q328 432 312 427L297 421V254Q297 88 298 88Q301 88 307 91T319 95Q327 95 333 90V6L330 4Q328 1 312 -4L297 -10V-78V-122Q297 -145 295 -149T282 -156Q274 -160 268 -160Q257 -160 257 -130V-89V-25L131 -72V-210Q123 -215 116 -218T104 -222L101 -223ZM257 72V406L131 359V25L257 72\",10003:\"84 231Q84 244 114 264T170 285Q176 285 183 274T224 205Q267 129 268 129Q271 141 279 163T318 250T389 378T502 523T662 673Q702 706 732 706H734Q749 706 749 695Q749 682 730 666T660 607T559 505Q387 299 328 29Q324 0 295 -17T245 -34H241Q234 -34 225 -21T185 46Q166 79 154 101Q84 223 84 231\",10016:\"195 702T195 706T201 716H632Q638 710 638 706T636 700T621 690Q436 581 427 374V357H430Q554 357 645 421Q682 447 711 483T755 542T770 567Q775 572 786 563V131Q777 125 774 125T762 139Q709 228 642 274T482 333Q452 337 430 337H427V320Q430 279 437 247T462 170T521 82T621 4Q630 -2 633 -4T637 -7T638 -12Q638 -16 632 -22H201Q195 -16 195 -12T197 -6T212 4Q397 113 406 320V337H403Q279 337 188 273Q151 247 122 211T78 152T63 127Q58 122 48 131V563Q54 569 59 569Q62 569 71 555Q124 466 191 420T351 361Q381 357 403 357H406V374Q403 415 396 447T371 525T312 613T212 690Q199 697 197 699\",10072:\"139 -249H137Q125 -249 119 -235V251L120 737Q130 750 139 750Q152 750 159 735V-235Q151 -249 141 -249H139\",10216:\"333 -232Q332 -239 327 -244T313 -250Q303 -250 296 -240Q293 -233 202 6T110 250T201 494T296 740Q299 745 306 749L309 750Q312 750 313 750Q331 750 333 732Q333 727 243 489Q152 252 152 250T243 11Q333 -227 333 -232\",10217:\"55 732Q56 739 61 744T75 750Q85 750 92 740Q95 733 186 494T278 250T187 6T92 -240Q85 -250 75 -250Q67 -250 62 -245T55 -232Q55 -227 145 11Q236 248 236 250T145 489Q55 727 55 732\",10222:\"357 741V726Q357 720 349 715Q261 655 242 539Q240 526 240 394V331Q240 259 239 250Q240 242 240 119V49Q240 -42 254 -85Q263 -111 275 -134T301 -172T326 -197T346 -213T356 -221T357 -232V-241L354 -244H334Q264 -209 222 -146T174 -12Q173 -6 173 95Q173 134 173 191T174 250Q173 260 173 376V460Q173 515 178 545T201 611Q244 695 327 741L334 744H354L357 741\",10223:\"78 744Q153 706 196 640T239 492V376Q239 339 239 311T238 269T238 252Q240 236 240 124V40Q240 -18 233 -53T202 -130Q156 -206 79 -244H70H65Q58 -244 57 -242T56 -231T57 -220T64 -215Q153 -154 170 -39Q173 -18 174 119V247Q173 249 173 382V451Q173 542 159 585Q145 626 120 658T75 706T56 723V731Q56 741 57 742T66 744H78\",10229:\"165 270H1510Q1525 262 1525 250T1510 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270\",10230:\"84 237T84 250T98 270H1444Q1328 357 1301 493Q1301 494 1301 496T1300 499Q1300 511 1317 511H1320Q1329 511 1332 510T1338 506T1341 497T1344 481T1352 456Q1374 389 1425 336T1544 261Q1553 258 1553 250Q1553 244 1548 241T1524 231T1486 212Q1445 186 1415 152T1370 85T1349 35T1341 4Q1339 -6 1336 -8T1320 -11Q1300 -11 1300 0Q1300 7 1305 25Q1337 151 1444 230H98Q84 237 84 250\",10231:\"165 270H1694Q1578 357 1551 493Q1551 494 1551 496T1550 499Q1550 511 1567 511H1570Q1579 511 1582 510T1588 506T1591 497T1594 481T1602 456Q1624 389 1675 336T1794 261Q1803 258 1803 250Q1803 244 1798 241T1774 231T1736 212Q1695 186 1665 152T1620 85T1599 35T1591 4Q1589 -6 1586 -8T1570 -11Q1550 -11 1550 0Q1550 7 1555 25Q1587 151 1694 230H165Q167 228 182 216T211 189T244 152T277 96T303 25Q308 7 308 0Q308 -11 288 -11Q281 -11 278 -11T272 -7T267 2T263 21Q245 94 195 151T73 236Q58 242 55 247Q55 254 59 257T73 264Q121 283 158 314T215 375T247 434T264 480L267 497Q269 503 270 505T275 509T288 511Q308 511 308 500Q308 493 303 475Q293 438 278 406T246 352T215 315T185 287T165 270\",10232:\"274 173H1539Q1540 172 1542 171T1545 169T1547 167T1550 164T1551 162T1552 158T1553 153Q1553 140 1538 133H318L328 123Q379 69 414 0Q419 -13 419 -17Q419 -24 399 -24Q388 -24 385 -23T377 -12Q332 77 253 144T72 237Q62 240 59 242T56 250T59 257T70 262T89 268T119 278T160 296Q303 366 377 512Q382 522 385 523T401 525Q419 524 419 515Q419 510 414 500Q379 431 328 377L318 367H1538Q1553 359 1553 347Q1553 336 1539 328L1221 327H903L900 328L602 327H274L264 319Q225 289 147 250Q148 249 165 241T210 217T264 181L274 173\",10233:\"1218 514Q1218 525 1234 525Q1239 525 1242 525T1247 525T1251 524T1253 523T1255 520T1257 517T1260 512Q1297 438 1358 381T1469 300T1565 263Q1582 258 1582 250T1573 239T1536 228T1478 204Q1334 134 1260 -12Q1256 -21 1253 -22T1238 -24Q1218 -24 1218 -17Q1218 -13 1223 0Q1258 69 1309 123L1319 133H70Q56 140 56 153Q56 168 72 173H1363L1373 181Q1412 211 1490 250Q1489 251 1472 259T1427 283T1373 319L1363 327H710L707 328L390 327H72Q56 332 56 347Q56 360 70 367H1319L1309 377Q1276 412 1247 458T1218 514\",10234:\"1438 514Q1438 525 1454 525Q1459 525 1462 525T1467 525T1471 524T1473 523T1475 520T1477 517T1480 512Q1517 438 1578 381T1689 300T1785 263Q1802 258 1802 250T1793 239T1756 228T1698 204Q1554 134 1480 -12Q1476 -21 1473 -22T1458 -24Q1438 -24 1438 -17Q1438 -13 1443 0Q1478 69 1529 123L1539 133H318L328 123Q379 69 414 0Q419 -13 419 -17Q419 -24 399 -24Q388 -24 385 -23T377 -12Q332 77 253 144T72 237Q62 240 59 242T56 250T59 257T70 262T89 268T119 278T160 296Q303 366 377 512Q382 522 385 523T401 525Q419 524 419 515Q419 510 414 500Q379 431 328 377L318 367H1539L1529 377Q1496 412 1467 458T1438 514ZM274 173H1583L1593 181Q1632 211 1710 250Q1709 251 1692 259T1647 283T1593 319L1583 327H930L927 328L602 327H274L264 319Q225 289 147 250Q148 249 165 241T210 217T264 181L274 173\",10236:\"95 155V109Q95 83 92 73T75 63Q61 63 58 74T54 130Q54 140 54 180T55 250Q55 421 57 425Q61 437 75 437Q88 437 91 428T95 393V345V270H1444Q1328 357 1301 493Q1301 494 1301 496T1300 499Q1300 511 1317 511H1320Q1329 511 1332 510T1338 506T1341 497T1344 481T1352 456Q1374 389 1425 336T1544 261Q1553 258 1553 250Q1553 244 1548 241T1524 231T1486 212Q1445 186 1415 152T1370 85T1349 35T1341 4Q1339 -6 1336 -8T1320 -11Q1300 -11 1300 0Q1300 7 1305 25Q1337 151 1444 230H95V155\",10731:\"318 709Q325 716 332 716Q340 716 344 713T474 511Q611 298 611 292Q611 285 526 152Q494 103 474 72Q347 -128 344 -130Q340 -132 333 -132T322 -130Q319 -128 257 -31T131 169T60 278Q56 285 56 292Q56 298 60 305Q73 326 194 516T318 709\",10744:\"166 -215T159 -215T147 -212T141 -204T139 -197Q139 -190 144 -183Q157 -157 378 274T602 707Q605 716 618 716Q625 716 630 712T636 703T638 696Q638 691 406 241T170 -212Q166 -215 159 -215\",10752:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM555 -165Q672 -165 767 -108T916 44T970 250Q970 418 861 532T600 664Q591 665 548 665Q446 665 353 614T200 466T140 250V243Q140 88 248 -30Q262 -46 280 -62T338 -105T434 -148T555 -165ZM478 250Q478 288 503 307T551 326Q586 326 609 305T632 250Q632 217 610 196T555 174T500 196T478 250\",10753:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM513 478Q513 664 512 664Q504 664 481 660T406 637T313 588Q281 564 255 537T211 483T181 431T161 382T150 342T144 310T141 292H513V478ZM798 588Q758 616 711 634T639 658T602 663L597 664V292H969Q969 293 967 309T960 341T949 381T930 430T900 482T856 537T798 588ZM513 -164V208H141Q142 205 144 189T149 160T158 125T173 83T196 39T229 -9Q249 -34 273 -55T318 -92T363 -119T405 -138T444 -150T475 -158T499 -162T513 -164ZM775 -103Q801 -87 823 -68T863 -30T894 10T919 49T937 88T950 123T959 154T964 180T968 198L969 208H597V-164Q599 -163 616 -161T647 -155T683 -145T728 -128T775 -103\",10754:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM600 664Q591 665 548 665Q414 665 306 583L292 573L423 441L555 310L687 441L818 573L804 583Q714 650 600 664ZM364 118L495 250L364 382L232 513L223 500Q140 391 140 250Q140 107 223 0L232 -13L364 118ZM970 250Q970 389 887 501L878 512Q878 513 861 496T812 447T746 381L615 250L746 118L878 -13L887 0Q970 109 970 250ZM687 59L555 190L423 59L292 -73L306 -83Q416 -166 555 -166T804 -83L818 -73L687 59\",10756:\"96 750Q103 750 109 748T120 744T127 737T133 730T137 723T139 718V395L140 73L142 60Q159 -43 237 -104T416 -166Q521 -166 597 -103T690 60L692 73L694 718Q708 749 735 749Q765 749 775 720Q777 714 777 398Q777 78 776 71Q766 -51 680 -140Q571 -249 416 -249H411Q261 -249 152 -140Q66 -51 56 71Q55 78 55 398Q55 714 57 720Q60 734 70 740Q80 750 96 750ZM223 276Q223 282 224 287T227 296T232 302T238 308T243 313T250 316L254 319H374V376V406Q374 438 382 454T418 470Q443 467 450 453T458 410V376V319H579Q580 319 583 317T589 313T594 308T600 302T604 295T608 287T609 276Q609 253 587 241Q577 235 513 235H458V178Q458 176 458 166T459 148Q459 84 415 84Q401 84 390 93T375 117Q374 120 374 178V235H319Q317 235 307 235T290 234Q223 234 223 276\",10758:\"777 -217Q766 -244 745 -249H88Q64 -242 57 -220Q55 -214 55 250T57 720Q60 734 70 740Q80 750 96 750Q127 750 137 720Q139 714 139 274V-166H693V274Q693 714 695 720Q705 749 735 749Q766 749 775 719Q777 713 777 248V-217\",10799:\"630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29\",10815:\"28 660Q28 676 31 679T46 683H50Q87 681 182 681Q217 681 247 681T294 682T315 682Q321 682 323 682T328 679T331 673T332 660Q332 643 328 640T304 637Q239 637 231 626Q229 620 229 334V46H520V334Q520 620 518 626Q510 637 445 637Q426 637 422 640T417 660Q417 675 420 678T432 682H435Q437 682 467 682T569 681T671 681T703 682Q714 682 717 679T721 660Q721 643 717 640T693 637Q628 637 620 626Q619 623 619 342Q619 60 620 57Q628 46 693 46Q714 46 717 43T721 23Q721 5 715 1Q713 0 374 0Q36 0 34 1Q28 5 28 23Q28 40 31 43T56 46Q121 46 129 57Q131 63 131 342Q131 620 129 626Q121 637 56 637Q35 637 32 640T28 660\",10846:\"55 795Q56 806 70 813H540Q554 806 555 795Q555 791 554 788T552 783T549 779T546 777T542 775T539 773H71Q70 773 68 774T65 776T61 779T58 783T56 788T55 795ZM55 601Q56 612 70 619H540Q554 612 555 601Q555 597 554 594T552 589T549 585T546 583T542 581T539 579H71Q70 579 68 580T65 582T61 585T58 589T56 594T55 601ZM75 -97Q67 -97 61 -91T55 -81Q55 -71 169 166T285 410Q295 425 305 425Q311 425 316 422T323 414L325 410Q327 404 441 167T555 -81Q555 -85 549 -91T535 -97T520 -90Q519 -89 506 -61T463 27T411 136L305 358L199 136Q167 71 129 -10Q98 -75 92 -86T75 -97\",10877:\"674 636Q682 636 688 630T694 615T687 601Q686 600 417 472L151 346L399 228Q687 92 691 87Q694 81 694 76Q694 58 676 56H670L382 192Q92 329 90 331Q83 336 83 348Q84 359 96 365Q104 369 382 500T665 634Q669 636 674 636ZM94 170Q102 172 104 172Q110 171 254 103T535 -30T678 -98Q694 -106 694 -118Q694 -136 676 -138H670L382 -2Q92 135 90 137Q83 142 83 154Q84 164 94 170\",10878:\"83 616Q83 624 89 630T99 636Q107 636 253 568T543 431T687 361Q694 356 694 346T687 331Q685 329 395 192L107 56H101Q83 58 83 76Q83 77 83 79Q82 86 98 95Q117 105 248 167Q326 204 378 228L626 346L360 472Q291 505 200 548Q112 589 98 597T83 616ZM674 172Q692 172 694 154Q694 142 687 137Q685 135 395 -2L107 -138H101Q83 -136 83 -118Q83 -106 96 -100Q100 -98 380 35T665 170T674 172\",10885:\"667 761Q669 762 673 762Q682 762 688 756T694 741Q694 731 687 727Q684 724 420 613L156 502L416 392Q476 367 544 338T647 295T682 280Q694 274 694 262Q694 244 676 242Q670 242 524 303T235 425T90 487Q83 493 83 501Q83 514 94 519Q97 520 378 639T667 761ZM55 -23Q55 43 103 90T223 138Q265 138 316 114Q342 100 393 68L443 36Q502 0 554 0Q609 0 650 32T694 109Q694 138 708 138Q710 138 713 136T719 127T722 108Q722 37 673 -9T557 -56Q514 -56 468 -35T387 13T308 60T223 82Q167 82 127 50T83 -27Q81 -56 69 -56Q55 -56 55 -23ZM55 -257Q55 -191 103 -144T223 -96Q265 -96 316 -120Q342 -134 393 -166L443 -198Q502 -234 554 -234Q609 -234 650 -202T694 -125Q694 -96 708 -96Q710 -96 713 -98T719 -107T722 -126Q722 -197 673 -243T557 -290Q514 -290 468 -269T387 -221T308 -174T223 -152Q167 -152 127 -184T83 -261Q80 -290 69 -290Q55 -290 55 -257\",10886:\"90 727Q83 734 83 743Q83 751 89 756T104 762Q111 760 396 641Q686 518 687 517Q694 512 694 502T687 487Q686 486 543 425T253 303T101 242Q83 244 83 262Q83 274 95 280Q96 280 130 294T232 338T361 392L621 502L357 613Q93 724 90 727ZM55 -23Q55 43 103 90T223 138Q265 138 316 114Q342 100 393 68L443 36Q502 0 554 0Q609 0 650 32T694 109Q694 138 708 138Q710 138 713 136T719 127T722 108Q722 37 673 -9T557 -56Q514 -56 468 -35T387 13T308 60T223 82Q167 82 127 50T83 -27Q81 -56 69 -56Q55 -56 55 -23ZM55 -257Q55 -191 103 -144T223 -96Q265 -96 316 -120Q342 -134 393 -166L443 -198Q502 -234 554 -234Q609 -234 650 -202T694 -125Q694 -96 708 -96Q710 -96 713 -98T719 -107T722 -126Q722 -197 673 -243T557 -290Q514 -290 468 -269T387 -221T308 -174T223 -152Q167 -152 127 -184T83 -261Q80 -290 69 -290Q55 -290 55 -257\",10887:\"380 497Q445 528 522 564T636 618T673 635Q680 635 686 628T693 615T689 603Q686 599 418 472L151 343L418 215Q686 88 689 83Q693 79 693 72T687 59T675 52Q669 52 381 189T86 332Q82 337 82 344Q82 350 86 355Q91 359 380 497ZM82 -130T82 -124T95 -103H380L431 -54Q476 -6 486 -6Q491 -6 498 -12T505 -27Q505 -28 505 -29T504 -32Q503 -33 498 -38T485 -53T469 -70L438 -103H680Q682 -106 686 -110T691 -116T693 -123Q693 -130 680 -143H398L346 -192Q300 -241 291 -241Q271 -241 271 -221Q271 -209 306 -179L340 -143H95Q82 -130 82 -124\",10888:\"82 614Q82 620 86 625T94 632T100 635Q106 635 394 498T689 355Q693 349 693 343Q693 338 689 332Q683 327 395 190T100 52Q95 52 89 58T82 72Q82 80 95 88Q114 99 358 215L624 343L358 472Q89 599 86 603Q82 607 82 614ZM82 -130T82 -124T95 -103H380L431 -54Q476 -6 486 -6Q491 -6 498 -12T505 -27Q505 -28 505 -29T504 -32Q503 -33 498 -38T485 -53T469 -70L438 -103H680Q682 -106 686 -110T691 -116T693 -123Q693 -130 680 -143H398L346 -192Q300 -241 291 -241Q271 -241 271 -221Q271 -209 306 -179L340 -143H95Q82 -130 82 -124\",10889:\"86 512Q93 518 381 639T673 761Q680 761 686 755T693 741Q693 733 688 730Q685 723 419 612L155 501L419 390Q685 277 688 272Q693 269 693 261Q693 254 687 248T675 241Q669 241 381 362T86 490Q74 500 86 512ZM70 -59Q57 -59 57 -24Q57 40 104 87Q116 102 146 118Q186 136 231 136Q232 136 242 135T258 133T276 128T302 118T334 101T377 74Q386 69 396 63T411 53T417 50Q435 87 453 134Q491 223 495 227Q498 230 505 230Q513 230 519 225T526 212Q526 203 491 118T453 30Q453 22 489 10T553 -3Q589 -3 622 14Q653 28 669 50T688 90T694 122T706 136Q718 136 718 114Q718 113 718 109T717 103Q717 31 668 -14T554 -60Q529 -60 499 -50T451 -32T433 -24Q431 -24 404 -90T375 -157Q375 -159 402 -178T473 -218T553 -239Q599 -239 641 -211T691 -130Q694 -99 706 -99T718 -122Q718 -123 718 -127T717 -133Q717 -204 668 -249T559 -295Q512 -295 470 -275T355 -206L322 -290Q313 -310 304 -332T289 -367T282 -382Q277 -387 270 -387Q262 -387 255 -382T248 -368Q248 -361 322 -186Q311 -177 280 -166T222 -155Q189 -155 153 -173Q122 -186 106 -208T87 -248T82 -280T71 -294Q57 -294 57 -259Q57 -195 104 -148Q122 -126 155 -113T220 -99Q245 -99 276 -109T324 -127T342 -135Q397 -2 397 1Q386 10 367 23T302 58T222 80Q175 80 132 52T84 -28Q82 -59 70 -59\",10890:\"86 730Q81 734 81 740Q81 747 88 754T99 761Q103 761 392 640T688 512Q693 509 693 501T688 490Q682 484 394 363T99 241Q94 241 88 248T82 261Q82 268 86 272Q89 277 355 390L619 501L355 612Q89 723 86 730ZM70 -59Q57 -59 57 -24Q57 40 104 87Q116 102 146 118Q186 136 231 136Q232 136 242 135T258 133T276 128T302 118T334 101T377 74Q386 69 396 63T411 53T417 50Q435 87 453 134Q491 223 495 227Q498 230 505 230Q513 230 519 225T526 212Q526 203 491 118T453 30Q453 22 489 10T553 -3Q589 -3 622 14Q653 28 669 50T688 90T694 122T706 136Q718 136 718 114Q718 113 718 109T717 103Q717 31 668 -14T554 -60Q529 -60 499 -50T451 -32T433 -24Q431 -24 404 -90T375 -157Q375 -159 402 -178T473 -218T553 -239Q599 -239 641 -211T691 -130Q694 -99 706 -99T718 -122Q718 -123 718 -127T717 -133Q717 -204 668 -249T559 -295Q512 -295 470 -275T355 -206L322 -290Q313 -310 304 -332T289 -367T282 -382Q277 -387 270 -387Q262 -387 255 -382T248 -368Q248 -361 322 -186Q311 -177 280 -166T222 -155Q189 -155 153 -173Q122 -186 106 -208T87 -248T82 -280T71 -294Q57 -294 57 -259Q57 -195 104 -148Q122 -126 155 -113T220 -99Q245 -99 276 -109T324 -127T342 -135Q397 -2 397 1Q386 10 367 23T302 58T222 80Q175 80 132 52T84 -28Q82 -59 70 -59\",10891:\"674 1003Q681 1003 687 999T694 983Q694 973 683 967Q669 959 420 868L162 772L422 676Q683 579 685 577Q694 571 694 560Q694 550 687 546T673 541Q669 542 384 647T93 755Q83 760 83 772Q83 783 91 788Q98 791 383 897T674 1003ZM84 354T84 367T98 387H679Q694 379 694 367Q694 354 679 347H98Q84 354 84 367ZM84 160T84 173T98 193H679Q694 185 694 173Q694 160 679 153H98Q84 160 84 173ZM94 -3Q102 -1 104 -1Q107 -2 392 -107T684 -215Q694 -219 694 -232Q694 -241 687 -247Q686 -248 395 -357Q106 -463 101 -463Q83 -461 83 -443Q83 -431 94 -426Q97 -423 357 -328L615 -232L355 -136Q94 -39 92 -37Q83 -31 83 -21Q83 -9 94 -3\",10892:\"104 541Q98 541 91 545T83 560Q83 571 92 577Q94 579 355 676L615 772L357 868Q108 959 94 967Q83 973 83 983Q83 989 87 996T104 1003Q109 1002 396 896T687 787Q694 781 694 772Q694 759 684 755Q678 752 393 647T104 541ZM84 367Q84 380 98 387H679Q694 379 694 367Q694 356 680 348L390 347H100Q84 352 84 367ZM84 173Q84 188 100 193H680Q694 183 694 173Q694 160 679 153H98Q84 160 84 173ZM674 -1Q682 -1 688 -6T694 -20Q694 -31 685 -37Q683 -39 422 -136L162 -232L420 -328Q680 -423 683 -426Q694 -431 694 -443Q694 -461 676 -463Q671 -463 382 -357Q91 -248 90 -247Q83 -242 83 -232Q83 -220 93 -215Q667 -1 674 -1\",10901:\"674 636Q682 636 688 631T694 616Q694 605 687 601Q685 599 395 462L107 326H101Q83 328 83 345Q83 358 96 365Q102 367 382 500T665 634Q671 636 674 636ZM674 442Q692 442 694 424Q694 412 687 407Q686 406 417 278L151 152L399 34Q687 -102 691 -107Q694 -113 694 -118Q694 -136 676 -138H670L382 -2Q92 135 90 137Q83 142 83 154Q84 165 96 171Q104 175 382 306T665 440Q669 442 674 442\",10902:\"83 616Q83 624 89 630T99 636Q107 636 253 568T543 431T687 361Q694 354 694 346Q694 328 676 326H670L382 462Q317 493 226 535Q119 585 101 595T83 616ZM94 440Q102 442 104 442Q110 441 254 373T535 240T678 172Q679 172 680 171Q694 164 694 153T687 137Q685 135 395 -2L107 -138H101Q83 -136 83 -118Q83 -106 93 -101L128 -84Q163 -68 230 -36T361 26L626 152L360 278Q91 406 90 407Q83 412 83 424Q84 434 94 440\",10927:\"84 346Q84 359 91 363T117 367Q120 367 126 367T137 366Q388 370 512 430T653 609Q657 636 676 636Q685 635 689 629T694 618V612Q689 566 672 528T626 463T569 417T500 383T435 362T373 346Q379 345 404 339T440 330T477 318T533 296Q592 266 630 223T681 145T694 78Q694 57 674 57Q662 57 657 67T652 92T640 135T606 191Q500 320 137 326H114Q104 326 98 327T88 332T84 346ZM84 -131T84 -118T98 -98H679Q694 -106 694 -118T679 -138H98Q84 -131 84 -118\",10928:\"84 614Q84 636 102 636Q115 636 119 626T125 600T137 556T171 501Q277 372 640 366H661Q694 366 694 346T661 326H640Q578 325 526 321T415 307T309 280T222 237T156 172T124 83Q122 66 118 62T103 57Q100 57 98 57T95 58T93 59T90 62T85 67Q83 71 83 80Q88 126 105 164T151 229T208 275T277 309T342 330T404 346Q401 347 380 351T345 360T302 373T245 396Q125 455 92 565Q84 599 84 614ZM84 -131T84 -118T98 -98H679Q694 -106 694 -118T679 -138H98Q84 -131 84 -118\",10933:\"653 734Q653 738 660 745T673 752T686 745T693 723Q672 555 466 485Q390 463 378 463Q373 463 373 461Q373 458 378 458Q390 458 466 436Q562 404 620 350Q682 283 693 198Q693 183 686 176Q681 170 674 170T660 176T653 187Q653 192 652 200T646 228T631 265T602 307T555 350Q435 431 151 441H95Q82 454 82 460T95 481H151Q165 482 197 483T238 485Q427 500 528 554T649 707Q653 729 653 734ZM82 33Q82 37 83 40T89 47T95 54H473L520 105Q569 156 571 156Q573 157 578 157Q586 157 592 151T598 136Q598 130 562 92L526 56L604 54H682Q693 43 693 35Q693 31 692 28T686 21T680 14H489L342 -139L513 -142H682Q693 -148 693 -160Q693 -167 680 -182H304L258 -230Q248 -240 237 -251T221 -268T211 -278T203 -284T197 -286Q189 -286 184 -280T178 -264Q178 -257 213 -219L249 -182H171L93 -179L86 -175Q82 -170 82 -163Q82 -155 95 -142H289L360 -64L433 14H262L93 16Q82 23 82 33\",10934:\"693 466T693 460T680 441H624Q608 439 577 438T538 436Q349 421 248 367T126 214Q122 192 122 187Q122 183 116 177T102 170Q95 170 89 176Q82 183 82 198Q93 283 155 350Q213 404 309 436Q385 458 398 458Q402 458 402 461Q402 463 398 463Q385 463 309 485Q103 555 82 723Q82 738 89 745T102 752T115 745T122 734Q122 721 126 701T155 640T220 572Q340 490 624 481H680Q693 466 693 460ZM82 33Q82 37 83 40T89 47T95 54H473L520 105Q569 156 571 156Q573 157 578 157Q586 157 592 151T598 136Q598 130 562 92L526 56L604 54H682Q693 43 693 35Q693 31 692 28T686 21T680 14H489L342 -139L513 -142H682Q693 -148 693 -160Q693 -167 680 -182H304L258 -230Q248 -240 237 -251T221 -268T211 -278T203 -284T197 -286Q189 -286 184 -280T178 -264Q178 -257 213 -219L249 -182H171L93 -179L86 -175Q82 -170 82 -163Q82 -155 95 -142H289L360 -64L433 14H262L93 16Q82 23 82 33\",10935:\"82 494T82 501T95 521H171Q405 527 511 569Q630 618 651 732Q652 734 653 740T655 748T658 754T663 759T672 761L686 754Q693 747 693 734Q684 668 648 623Q627 591 573 557T442 507L417 501Q428 496 442 494Q520 478 573 444T648 378Q684 333 693 267Q693 254 686 247Q673 234 659 245Q657 247 651 269Q630 383 511 432Q406 474 171 481H95Q82 494 82 501ZM70 -59Q57 -59 57 -26Q57 30 90 73T177 132Q191 136 226 136Q228 136 239 136T253 135T267 132T287 125T311 113T346 95T391 67Q462 20 502 5Q519 1 553 1Q586 1 602 5Q641 18 664 45T691 107Q694 136 704 136Q717 136 717 115V105Q717 39 671 -9T554 -58Q518 -58 481 -43T382 14Q302 63 273 74Q255 78 222 78Q188 78 173 74Q90 46 84 -28Q82 -59 70 -59ZM71 -294Q57 -294 57 -262Q57 -205 90 -162T177 -104Q191 -99 226 -99Q266 -103 277 -106Q310 -119 391 -168Q455 -212 502 -231Q519 -235 553 -235Q586 -235 602 -231Q640 -218 661 -195T686 -151T693 -115T704 -99Q717 -99 717 -121V-131Q717 -198 671 -246T556 -294Q519 -294 482 -279T382 -222Q307 -175 273 -162Q255 -157 222 -157Q188 -157 173 -162Q133 -175 110 -201T84 -264Q82 -294 71 -294\",10936:\"693 501Q693 493 679 481H604Q369 474 264 432Q143 382 124 269Q116 246 115 245Q101 234 88 247Q82 254 82 267Q89 329 126 378Q147 410 201 444T333 494L357 501Q354 502 340 505T318 510T295 516T269 525T243 535T215 548T188 565Q142 599 126 623Q89 672 82 734Q82 761 102 761L115 756Q116 755 124 732Q143 619 264 569Q371 527 604 521H679Q693 507 693 501ZM70 -59Q57 -59 57 -26Q57 30 90 73T177 132Q191 136 226 136Q228 136 239 136T253 135T267 132T287 125T311 113T346 95T391 67Q462 20 502 5Q519 1 553 1Q586 1 602 5Q641 18 664 45T691 107Q694 136 704 136Q717 136 717 115V105Q717 39 671 -9T554 -58Q518 -58 481 -43T382 14Q302 63 273 74Q255 78 222 78Q188 78 173 74Q90 46 84 -28Q82 -59 70 -59ZM71 -294Q57 -294 57 -262Q57 -205 90 -162T177 -104Q191 -99 226 -99Q266 -103 277 -106Q310 -119 391 -168Q455 -212 502 -231Q519 -235 553 -235Q586 -235 602 -231Q640 -218 661 -195T686 -151T693 -115T704 -99Q717 -99 717 -121V-131Q717 -198 671 -246T556 -294Q519 -294 482 -279T382 -222Q307 -175 273 -162Q255 -157 222 -157Q188 -157 173 -162Q133 -175 110 -201T84 -264Q82 -294 71 -294\",10937:\"82 494T82 501T95 521H171Q256 523 317 528T441 548T543 584T613 644T651 732Q652 734 653 740T655 748T658 754T663 759T672 761L686 754Q693 747 693 734Q686 686 664 647T615 586T548 545T482 518T417 501Q419 500 451 493T517 471T590 434T657 367T693 267Q693 241 673 241Q664 241 659 245Q656 249 650 273T635 323T593 380T511 432Q406 474 171 481H95Q82 494 82 501ZM57 -26Q57 39 101 87T219 136Q254 136 277 130Q320 114 382 72Q419 50 424 45Q426 45 459 110Q496 178 497 179Q500 180 504 180Q509 180 517 175T526 161Q526 158 495 90L462 25Q462 21 502 5Q519 1 553 1Q586 1 602 5Q641 18 664 45T691 107Q694 136 706 136T718 115Q718 114 718 111T717 105Q717 39 671 -9T554 -58L459 -33Q450 -29 444 -27T437 -26L371 -155L391 -168Q485 -235 538 -235H553Q586 -235 602 -230Q683 -204 691 -128Q694 -99 706 -99T718 -120Q718 -121 718 -124T717 -130Q717 -199 670 -246T557 -294T393 -228Q353 -205 351 -201Q348 -201 315 -266Q294 -310 285 -323T268 -337Q259 -337 254 -331T248 -317Q248 -305 282 -246L313 -181Q313 -177 273 -161Q255 -157 222 -157Q188 -157 173 -161Q134 -174 113 -198T88 -242T82 -278T71 -294Q57 -294 57 -261Q57 -204 91 -161T179 -104Q195 -99 228 -99Q274 -102 315 -124Q337 -132 337 -130L404 -1L384 12Q319 58 273 74Q255 79 222 79Q188 79 173 74Q133 61 112 37T88 -7T82 -43T70 -59Q57 -59 57 -26\",10938:\"693 501Q693 493 679 481H604Q548 479 509 477T418 469T331 454T257 429T194 392T150 340T124 270Q117 247 115 245Q101 236 88 247Q82 254 82 267Q89 330 126 379Q147 411 202 444T333 494L357 501Q239 531 188 565Q142 599 126 623Q89 672 82 734Q82 761 102 761L115 756Q116 755 124 732Q133 678 166 640T241 579T349 544T470 527T604 521H679Q693 507 693 501ZM57 -26Q57 39 101 87T219 136Q254 136 277 130Q320 114 382 72Q419 50 424 45Q426 45 459 110Q496 178 497 179Q500 180 504 180Q509 180 517 175T526 161Q526 158 495 90L462 25Q462 21 502 5Q519 1 553 1Q586 1 602 5Q641 18 664 45T691 107Q694 136 706 136T718 115Q718 114 718 111T717 105Q717 39 671 -9T554 -58L459 -33Q450 -29 444 -27T437 -26L371 -155L391 -168Q485 -235 538 -235H553Q586 -235 602 -230Q683 -204 691 -128Q694 -99 706 -99T718 -120Q718 -121 718 -124T717 -130Q717 -199 670 -246T557 -294T393 -228Q353 -205 351 -201Q348 -201 315 -266Q294 -310 285 -323T268 -337Q259 -337 254 -331T248 -317Q248 -305 282 -246L313 -181Q313 -177 273 -161Q255 -157 222 -157Q188 -157 173 -161Q134 -174 113 -198T88 -242T82 -278T71 -294Q57 -294 57 -261Q57 -204 91 -161T179 -104Q195 -99 228 -99Q274 -102 315 -124Q337 -132 337 -130L404 -1L384 12Q319 58 273 74Q255 79 222 79Q188 79 173 74Q133 61 112 37T88 -7T82 -43T70 -59Q57 -59 57 -26\",10949:\"84 463Q84 585 166 663T360 752Q361 752 370 752T395 752T430 752T475 753T524 753H679Q694 746 694 733Q694 724 681 714L522 713H470H441Q366 713 338 709T266 685Q244 674 224 659T179 617T139 550T124 463V458Q124 370 185 302Q244 238 328 220Q348 215 366 215T522 213H681Q694 203 694 193Q694 180 679 173H526Q510 173 480 173T434 172Q350 172 289 188T172 258Q84 340 84 463ZM84 -14T84 -1T98 19H679Q694 11 694 -1Q694 -14 679 -21H98Q84 -14 84 -1ZM84 -208T84 -195T98 -175H679Q694 -183 694 -195Q694 -208 679 -215H98Q84 -208 84 -195\",10950:\"83 733Q83 746 98 753H251Q267 753 297 753T343 754Q427 754 488 738T605 668Q693 587 693 463Q693 378 650 312T545 213T415 174Q407 173 251 173H98Q83 180 83 193Q83 203 96 213H255H308H337Q412 213 439 217T512 241Q533 252 553 267T599 309T639 376T654 463Q654 554 592 624Q557 662 512 685Q468 704 439 708T335 713H306H255L96 714Q83 724 83 733ZM84 -14T84 -1T98 19H679Q694 11 694 -1Q694 -14 679 -21H98Q84 -14 84 -1ZM84 -208T84 -195T98 -175H679Q694 -183 694 -195Q694 -208 679 -215H98Q84 -208 84 -195\",10955:\"693 221Q693 214 680 201H524Q398 201 367 202T309 212Q236 230 180 280T98 398Q84 438 84 492T98 585Q126 663 193 716T346 781Q347 781 373 781T440 782T520 783H680Q682 780 686 776T691 770T693 763T680 743H526Q364 743 353 741Q279 730 221 687T138 578Q124 540 124 492T138 405Q163 340 221 297T353 243Q364 241 526 241H680Q682 238 686 234T691 228T693 221ZM82 -48T82 -41T95 -19H462L513 41L569 105Q574 110 582 110T596 104T602 90Q602 87 600 83Q600 77 555 30L515 -17L600 -19H682Q693 -30 693 -38T680 -59H480L415 -137L349 -213L515 -215H682Q693 -226 693 -233T680 -255H313L260 -317Q224 -360 212 -372T192 -385Q184 -385 179 -377T173 -362Q174 -361 218 -306L260 -255H178L93 -253L86 -248Q82 -243 82 -235Q82 -226 93 -215H195L295 -213L362 -137L426 -59H260L93 -57L86 -53Q82 -48 82 -41\",10956:\"82 759T82 763T83 769T89 776T95 783H251Q378 783 409 782T469 772Q540 753 596 703T678 585Q691 546 691 492T678 398Q649 320 581 267T426 203Q415 201 251 201H95Q82 214 82 221Q82 225 83 227T89 234T95 241H249Q411 241 422 243Q496 253 554 296T638 405Q651 444 651 492Q651 539 638 578Q613 643 555 686T422 741Q411 743 249 743H95Q82 759 82 763ZM82 -48T82 -41T95 -19H462L513 41L569 105Q574 110 582 110T596 104T602 90Q602 87 600 83Q600 77 555 30L515 -17L600 -19H682Q693 -30 693 -38T680 -59H480L415 -137L349 -213L515 -215H682Q693 -226 693 -233T680 -255H313L260 -317Q224 -360 212 -372T192 -385Q184 -385 179 -377T173 -362Q174 -361 218 -306L260 -255H178L93 -253L86 -248Q82 -243 82 -235Q82 -226 93 -215H195L295 -213L362 -137L426 -59H260L93 -57L86 -53Q82 -48 82 -41\",12296:\"333 -232Q332 -239 327 -244T313 -250Q303 -250 296 -240Q293 -233 202 6T110 250T201 494T296 740Q299 745 306 749L309 750Q312 750 313 750Q331 750 333 732Q333 727 243 489Q152 252 152 250T243 11Q333 -227 333 -232\",12297:\"55 732Q56 739 61 744T75 750Q85 750 92 740Q95 733 186 494T278 250T187 6T92 -240Q85 -250 75 -250Q67 -250 62 -245T55 -232Q55 -227 145 11Q236 248 236 250T145 489Q55 727 55 732\",57350:\"91 417Q104 430 111 430T131 417V301L171 341Q201 373 207 378T220 384Q227 384 233 377T240 366Q240 357 187 299L131 244V-10Q116 -23 111 -23T91 -10V201L49 157Q20 127 14 121T0 115Q-8 115 -14 121T-20 132Q-20 139 17 178Q29 191 36 199L91 257V417\",57351:\"56 417Q68 431 76 431L89 426L96 419V317L98 215L193 273L291 330V375L293 419Q301 431 311 431Q331 431 331 388L333 355L356 370Q381 384 388 384Q394 384 400 377T407 363Q407 354 367 328L331 308V-10Q316 -23 310 -23Q300 -23 293 -12L291 135V284L98 168L96 77V-12Q84 -24 76 -24L62 -19L58 -12L56 66V144L31 128Q5 114 -2 114Q-8 114 -14 121T-20 136Q-20 142 -14 147T20 170L56 190V417\",57352:\"477 261Q477 257 473 256T455 253T417 251T348 250H235L155 -77L146 -82Q137 -85 109 -85Q55 -85 55 -77L139 261Q224 596 226 598Q229 603 239 603Q240 603 254 603T290 603T341 604T405 605T477 605Q656 603 687 602T719 596Q719 589 692 588T513 585H319L282 427L242 272Q242 270 351 270Q388 270 410 270T444 269T460 267T469 265T477 261\",57353:\"228 325Q170 322 156 316T127 309Q108 309 104 314Q99 319 99 322T108 341Q125 376 171 400T268 425H271Q302 425 319 396Q328 377 328 358Q328 332 324 314Q311 270 286 221Q274 194 274 192H275Q339 234 484 325T639 421Q669 434 691 434T723 425T734 406Q734 394 719 381Q715 376 644 330L575 287L566 267Q543 233 526 176Q520 160 515 143T508 115T506 105Q506 103 533 103Q585 103 607 110T641 118Q670 118 670 107Q670 100 661 85Q643 50 598 27T504 3Q465 3 450 36Q441 51 441 73Q441 84 444 96Q452 146 484 205L497 236L324 125Q143 12 135 10Q103 -6 77 -6Q61 -6 49 2T37 21Q37 36 49 46T124 96L195 141L204 156Q219 179 243 248T264 323Q264 325 228 325\",57356:\"86 472Q93 477 381 614T673 752Q680 752 686 746T693 732T689 721Q686 715 418 590L151 461L418 332Q684 207 689 201Q693 195 693 190Q693 183 687 177T675 170Q668 170 380 307T86 450Q82 454 82 461Q82 467 86 472ZM369 101V126Q369 156 382 156H384Q385 157 386 157Q409 157 409 115V98V54H680Q693 39 693 34T680 14H409V-142H680Q693 -155 693 -162Q693 -167 680 -182H409V-273Q396 -284 388 -284Q382 -284 369 -275V-182H95Q82 -167 82 -162Q82 -155 95 -142H369V14H95Q93 17 89 21T84 27T82 34T83 40T89 47T95 54H369V101\",57357:\"89 745Q95 752 100 752Q106 752 394 615T689 472Q693 468 693 461T689 450Q684 445 396 308T100 170Q95 170 89 176T82 190Q82 195 86 201Q91 208 358 332L624 461L358 590Q90 715 86 721Q82 725 82 731Q82 739 89 745ZM369 101V126Q369 156 382 156H384Q385 157 386 157Q409 157 409 115V98V54H680Q693 39 693 34T680 14H409V-142H680Q693 -155 693 -162Q693 -167 680 -182H409V-273Q396 -284 388 -284Q382 -284 369 -275V-182H95Q82 -167 82 -162Q82 -155 95 -142H369V14H95Q93 17 89 21T84 27T82 34T83 40T89 47T95 54H369V101\",57358:\"97 172Q82 172 82 190Q82 197 86 201Q94 209 173 246T327 319T402 357Q405 360 434 448T462 539L278 628Q96 713 86 721Q82 725 82 732T88 745T102 752Q103 752 125 742T198 709T293 666Q342 642 385 622T453 590T478 579Q479 579 506 659T562 824T598 915Q602 919 609 919T622 913T629 901Q629 898 571 728Q546 656 531 608T518 559Q555 539 602 519Q664 488 679 479T694 461Q694 457 689 450Q680 443 616 413T494 356T435 326L389 190L342 57L513 55H682Q694 43 694 34Q694 28 689 21L682 17L506 15H329L322 -8Q320 -13 310 -41T295 -85L275 -141H680Q682 -143 684 -146T688 -151T691 -156T693 -162Q693 -172 682 -179L473 -181H262L220 -303Q192 -388 185 -404T166 -421Q160 -421 153 -415T146 -403Q146 -400 179 -302T220 -185Q220 -181 158 -181L93 -179L86 -174Q82 -169 82 -161Q82 -152 93 -141H164L233 -139L260 -63L286 15H189L93 17L86 21Q82 26 82 34Q82 44 93 55H198L300 57L342 179Q350 204 361 238T378 286T382 301L246 237Q111 172 97 172ZM624 461Q621 464 560 492Q512 518 503 518Q500 518 500 517Q499 513 488 479T465 413T453 379L624 461\",57359:\"97 54Q82 54 82 72Q82 79 86 84Q95 91 222 153L351 215L398 324L442 433L258 519Q95 597 87 604Q82 608 82 615T88 628T102 635Q107 635 424 484L458 468L524 630Q593 789 597 795Q601 801 609 801Q616 801 622 795T629 781L562 615L493 450L589 406Q665 371 679 362T694 344Q694 339 693 337T677 326T631 302T538 257Q504 241 465 223T406 195T386 186Q383 185 344 92T306 -3L486 81Q662 168 673 168Q680 168 686 162T693 148T689 137Q688 136 482 35L280 -59L233 -176Q184 -291 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -279 185 -186T224 -90Q225 -88 223 -88Q219 -88 193 -101Q109 -143 98 -143Q82 -138 82 -122Q82 -116 85 -113T108 -98T171 -67L249 -30L289 61Q297 81 307 107T321 144T326 157L218 106Q109 54 97 54ZM553 379Q480 412 480 415Q479 415 460 372T423 285T406 241Q408 240 516 291T624 344L553 379\",57360:\"102 168Q103 168 151 146T247 102T295 81Q299 85 322 144T344 206L218 268Q153 297 123 313T87 333T82 344T86 355Q104 369 291 455Q491 552 491 553L542 673Q581 767 590 784T609 801Q616 801 622 795T629 781Q629 773 586 677Q546 581 546 577L609 606Q669 635 673 635Q680 635 686 629T693 615Q693 610 692 608T670 593T604 561L524 521L400 226L542 157Q617 123 649 107T687 85T694 72Q694 66 690 60T679 54Q665 54 526 119Q394 186 386 186Q385 186 342 88L331 61L509 -23Q680 -105 688 -111Q693 -115 693 -122T688 -135T675 -141H673Q664 -141 491 -59Q320 21 316 21H315L249 -136Q183 -293 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 154 -261T181 -197T213 -119L280 41Q280 46 186 86Q157 101 121 119Q92 133 87 136T82 148Q82 155 88 161T102 168ZM418 370L466 495Q464 495 308 420T151 344T204 317T311 267T364 244Q364 247 418 370\",57361:\"82 34Q82 44 93 55H198L300 57L342 179Q351 207 362 238T378 286T384 303T238 377Q109 435 86 450Q82 454 82 460T86 472Q90 476 302 579L511 679Q512 679 553 795Q569 842 577 866T592 903T600 917T608 919Q615 919 622 912T629 901Q629 899 595 799Q589 777 581 753T569 717T564 703L618 728Q666 752 673 752T686 746T693 732Q693 723 683 717T615 683L546 650L491 488Q464 410 450 368T438 326Q493 297 562 266Q660 219 677 209T694 190Q694 183 690 177T678 171Q664 171 546 228L424 286Q422 286 382 172L342 57L513 55H682Q694 43 694 34Q694 28 689 21L682 17L506 15H329L322 -8Q320 -13 310 -41T295 -85L275 -141H680Q682 -143 684 -146T688 -151T691 -156T693 -162Q693 -172 682 -179L473 -181H262L220 -303Q192 -388 185 -404T166 -421Q160 -421 153 -415T146 -403Q146 -400 179 -302T220 -185Q220 -181 158 -181L93 -179L86 -174Q82 -169 82 -161Q82 -152 93 -141H164L233 -139L260 -63L286 15H189L93 17L86 21Q82 26 82 34ZM495 623Q495 626 493 626T321 544T151 461L398 343Q399 343 405 360T423 415T446 483Q457 513 469 551T488 606T495 623\",57366:\"82 -6Q82 1 95 14H262L295 94Q331 171 331 174Q324 175 312 178T267 194T206 227T146 283T98 368Q84 406 84 461T98 554Q126 632 194 685T349 750Q360 752 480 752H591L604 783Q620 819 624 821Q631 828 640 828Q653 825 658 810Q658 808 646 781L635 754Q635 752 658 752Q680 752 686 746Q693 739 693 732Q693 728 692 726T686 719T680 712H615L506 466Q479 407 451 344T408 248T393 214Q393 210 535 210H680Q693 194 693 190T680 170H373L340 92L304 14H680Q693 1 693 -6Q693 -11 680 -26H286L253 -103L218 -179L451 -181H682Q694 -193 694 -201Q694 -212 682 -219L440 -221H200L178 -270Q160 -309 154 -319T139 -330Q122 -330 118 -312L155 -223Q155 -221 126 -221H95Q82 -206 82 -201T95 -181H175L206 -108Q237 -35 242 -30Q242 -26 169 -26H95Q82 -11 82 -6ZM571 710Q571 712 469 712Q443 712 416 712T371 711T351 710Q279 700 221 656T138 548Q124 508 124 461T138 374Q186 245 351 212L460 459Q571 709 571 710\",57367:\"82 -14T82 -7T95 15H431L529 170H435Q341 170 333 175Q149 218 98 368Q84 406 84 461Q84 515 98 555Q126 633 193 686T346 750Q347 750 373 750T440 751T520 752H680Q693 739 693 732Q693 727 680 712H526Q364 712 353 710Q268 700 207 646T126 512Q123 496 123 461T126 410Q141 350 180 304T280 232Q312 217 344 214T464 210H555L589 261Q613 301 620 311T635 321Q644 321 650 315T657 301Q657 296 651 286T630 252T604 212Q604 210 642 210H680Q693 197 693 190Q693 186 692 184T686 177T680 170H578L526 92L478 17L580 15H682Q693 4 693 -4T680 -25H451L353 -179L518 -181H682Q694 -193 694 -201Q694 -211 682 -219L504 -221H326L293 -272Q257 -332 246 -332Q238 -332 232 -326T225 -313Q225 -310 226 -308Q226 -305 251 -265T278 -223Q278 -221 186 -221H95Q93 -218 89 -214T84 -208T82 -201T95 -181H306L404 -25H249L93 -23L86 -19Q82 -14 82 -7\",57368:\"82 732Q82 739 95 752H251H348Q420 752 460 744T551 708Q566 697 566 701Q618 815 624 821Q631 828 640 828Q653 825 658 810L600 677Q600 671 615 656T653 605T689 517Q692 496 692 461T689 406Q668 325 615 266Q572 221 513 196T391 170H373L340 92L304 14H680Q693 1 693 -6Q693 -11 680 -26H286L253 -103L218 -179L451 -181H682Q694 -193 694 -201Q694 -212 682 -219L440 -221H200L178 -270Q160 -309 154 -319T139 -330Q122 -330 118 -312L155 -223Q155 -221 126 -221H95Q82 -206 82 -201T95 -181H175L206 -108Q237 -35 242 -30Q242 -26 169 -26H95Q82 -11 82 -6Q82 1 95 14H262L295 92L331 170H95Q93 172 91 175T87 180T84 185T82 191Q82 199 93 210H220L349 212L549 659Q507 692 462 702T338 712H249H95Q82 727 82 732ZM652 473Q652 513 636 552T603 611T582 632Q581 632 487 422T393 210Q424 210 460 220T535 253T605 316T649 410Q652 427 652 461V473\",57369:\"82 732Q82 739 95 752H251Q415 752 426 750Q539 736 615 657Q667 599 689 517Q692 496 692 461T689 406Q668 325 615 266Q522 170 382 170H355L326 95Q319 80 311 59T298 28T293 17Q293 15 486 15H680Q693 0 693 -6T680 -25H275L213 -179L449 -181H682Q693 -192 693 -199T680 -221H198L178 -270Q153 -333 139 -333Q132 -333 126 -327T119 -314T135 -266T153 -223Q153 -221 124 -221H95Q82 -207 82 -201T95 -181H171L233 -25H162L93 -23L86 -19Q82 -14 82 -7T95 15H251L313 170H202L93 172L86 177Q82 182 82 190Q82 199 93 210H211L329 212L349 261Q366 301 372 311T386 321Q392 321 399 315T407 302Q407 295 390 254T373 210Q374 209 377 209Q412 209 444 217Q512 231 564 273T638 377Q651 414 651 461Q651 509 638 548Q613 613 555 656T422 710Q411 712 249 712H95Q82 727 82 732\",57370:\"693 -115T693 -122T680 -144H315L269 -199Q221 -255 213 -255H212Q203 -255 197 -248T193 -231Q195 -225 229 -184L262 -144H186L113 -142L106 -137Q102 -130 102 -125Q102 -119 115 -104H298L426 52H386Q342 54 309 63Q236 79 180 129T98 249Q84 289 84 343Q84 398 98 436Q126 514 193 567T346 632Q347 632 373 632T440 633T520 634H680Q682 631 686 627T691 621T693 614T680 594H526Q364 594 353 592Q268 581 207 528T126 394Q123 378 123 343T126 292Q141 231 181 185T280 114Q329 92 415 92H462L506 147Q554 203 562 203H563Q572 203 578 196T582 178Q579 173 546 132L513 94L598 92H682Q693 81 693 73T680 52H480L349 -102L515 -104H682Q693 -115 693 -122\",57371:\"82 610T82 614T83 620T89 627T95 634H251Q378 634 409 633T469 623Q540 604 596 554T678 436Q691 397 691 343T678 249Q653 181 597 131T469 63Q427 52 362 52H315L213 -102L438 -104H662Q673 -115 673 -123Q673 -129 660 -144H186L151 -197Q114 -250 109 -253Q106 -254 104 -254Q100 -254 98 -253Q91 -253 87 -248T82 -235Q82 -230 109 -186L138 -144H115Q82 -144 82 -125Q82 -119 95 -104H166L266 49Q266 52 182 52H95Q82 65 82 72Q82 76 83 78T89 85T95 92H295L329 143Q365 195 369 198Q372 203 380 203Q385 203 391 197T398 185Q398 184 398 184L399 182Q399 175 369 129L344 94Q344 92 376 92Q402 92 422 94Q496 104 554 147T638 256Q651 295 651 343Q651 390 638 429Q613 494 555 537T422 592Q411 594 249 594H95Q82 610 82 614\",119808:\"296 0Q278 3 164 3Q58 3 49 0H40V62H92Q144 62 144 64Q388 682 397 689Q403 698 434 698Q463 698 471 689Q475 686 538 530T663 218L724 64Q724 62 776 62H828V0H817Q796 3 658 3Q509 3 485 0H472V62H517Q561 62 561 63L517 175H262L240 120Q218 65 217 64Q217 62 261 62H306V0H296ZM390 237L492 238L440 365Q390 491 388 491Q287 239 287 237H390\",119809:\"720 510Q720 476 704 448T665 404T619 377T580 362L564 359L583 356Q602 353 632 342T690 312Q712 292 725 276Q752 235 752 189V183Q752 160 741 125Q698 18 547 2Q543 1 288 0H39V62H147V624H39V686H264H409Q502 686 542 681T624 655Q720 607 720 510ZM563 513Q563 553 548 578T518 611T486 622Q479 624 385 624H293V382H375Q458 383 467 385Q563 405 563 513ZM590 192Q590 307 505 329Q504 330 503 330L398 331H293V62H391H400H444Q496 62 528 75T580 131Q590 155 590 192\",119810:\"64 343Q64 502 174 599T468 697Q502 697 533 691T586 674T623 655T647 639T657 632L694 663Q703 670 711 677T723 687T730 692T735 695T740 696T746 697Q759 697 762 692T766 668V627V489V449Q766 428 762 424T742 419H732H720Q699 419 697 436Q690 498 657 545Q611 618 532 632Q522 634 496 634Q356 634 286 553Q232 488 232 343T286 133Q355 52 497 52Q597 52 650 112T704 237Q704 248 709 251T729 254H735Q750 254 755 253T763 248T766 234Q766 136 680 63T469 -11Q285 -11 175 86T64 343\",119811:\"39 624V686H270H310H408Q500 686 545 680T638 649Q768 584 805 438Q817 388 817 338Q817 171 702 75Q628 17 515 2Q504 1 270 0H39V62H147V624H39ZM655 337Q655 370 655 390T650 442T639 494T616 540T580 580T526 607T451 623Q443 624 368 624H298V62H377H387H407Q445 62 472 65T540 83T606 129Q629 156 640 195T653 262T655 337\",119812:\"723 286Q721 284 700 145T677 3V0H39V62H147V618H39V680H660V676Q662 670 675 552T691 428V424H629V428Q629 429 627 448T618 494T601 541Q574 593 527 605T382 618H374H304V384H336Q338 384 347 384T361 384T376 386T392 390T407 397T421 407T432 423Q442 444 443 482V501H505V205H443V224Q442 258 435 278T411 307T380 318T336 322H304V62H375H394Q429 62 449 62T497 66T541 76T577 95T609 126T632 170T651 232Q661 287 661 289H723V286\",119813:\"425 0L228 3Q63 3 51 0H39V62H147V618H39V680H644V676Q647 670 659 552T675 428V424H613Q613 433 605 477Q599 511 589 535T562 574T530 599T488 612T441 617T387 618H368H304V371H333Q389 373 411 390T437 468V488H499V192H437V212Q436 244 430 263T408 292T378 305T333 309H304V62H439V0H425\",119814:\"465 -10Q281 -10 173 88T64 343Q64 413 85 471T143 568T217 631T298 670Q371 697 449 697Q452 697 459 697T470 696Q502 696 531 690T582 675T618 658T644 641T656 632L732 695Q734 697 745 697Q758 697 761 692T765 668V627V489V449Q765 428 761 424T741 419H731H724Q705 419 702 422T695 444Q683 520 631 577T495 635Q364 635 295 563Q261 528 247 477T232 343Q232 296 236 260T256 185T296 120T366 76T472 52Q481 51 498 51Q544 51 573 67T607 108Q608 111 608 164V214H464V276H479Q506 273 680 273Q816 273 834 276H845V214H765V113V51Q765 16 763 8T750 0Q742 2 709 16T658 40L648 46Q592 -10 465 -10\",119815:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H51Q75 683 226 683Q376 683 400 686H412V624H304V388H595V624H487V686H499Q523 683 673 683Q824 683 848 686H860V624H752V62H860V0H848Q824 3 674 3Q523 3 499 0H487V62H595V326H304V62H412V0H400\",119816:\"397 0Q370 3 218 3Q65 3 38 0H25V62H139V624H25V686H38Q65 683 218 683Q370 683 397 686H410V624H296V62H410V0H397\",119817:\"174 114Q174 96 169 82T159 63T144 47L155 45Q183 40 203 40Q271 40 290 104Q294 118 294 150T295 380V624H154V686H169Q196 683 365 683Q499 683 517 686H527V624H446V379Q446 183 446 153T441 108Q413 32 315 2Q266 -11 208 -11Q160 -11 118 -2T42 37T8 114V122Q8 150 30 174T91 198T152 174T174 122V114\",119818:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H51Q75 683 226 683Q376 683 400 686H412V624H304V338L472 483L634 624H565V686H576Q597 683 728 683Q814 683 829 686H836V624H730L614 524Q507 432 497 422Q496 422 498 418T514 395T553 342T627 241L759 63L805 62H852V0H842Q830 3 701 3Q550 3 526 0H513V62H549Q584 62 584 63Q583 65 486 196T388 328L304 256V62H412V0H400\",119819:\"643 285Q641 280 629 148T612 4V0H39V62H147V624H39V686H51Q75 683 228 683Q415 685 425 686H439V624H304V62H352H378Q492 62 539 138Q551 156 558 178T569 214T576 255T581 289H643V285\",119820:\"314 0Q296 3 181 3T48 0H39V62H147V624H39V686H305Q316 679 323 667Q330 653 434 414L546 157L658 414Q766 662 773 674Q778 681 788 686H1052V624H944V62H1052V0H1040Q1016 3 874 3T708 0H696V62H804V341L803 618L786 580Q770 543 735 462T671 315Q540 13 536 9Q528 1 507 1Q485 1 477 9Q472 14 408 162T281 457T217 603Q215 603 215 334V62H323V0H314\",119821:\"314 0Q296 3 181 3T48 0H39V62H147V624H39V686H171H265Q288 686 297 686T309 684T315 679Q317 676 500 455T684 233V624H576V686H585Q603 683 718 683T851 686H860V624H752V319Q752 15 750 11Q747 4 742 2T718 0H712Q708 0 706 0T700 0T696 1T693 2T690 4T687 7T684 11T679 16T674 23Q671 27 437 311L215 579V62H323V0H314\",119822:\"64 339Q64 431 96 502T182 614T295 675T420 696Q469 696 481 695Q620 680 709 589T798 339Q798 173 697 82T432 -10Q262 -10 163 85T64 339ZM625 454Q618 502 600 538T562 593T515 624T469 639T431 642Q331 642 276 563Q232 493 232 353Q232 315 234 285T244 216T267 148T308 94T372 56Q405 46 432 46Q517 46 567 106T627 267Q631 299 631 353Q631 418 625 454\",119823:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H253Q435 686 470 685T536 678Q585 668 621 648T675 605T705 557T718 514T721 483T718 451T704 409T673 362T616 322T530 293Q500 288 399 287H304V62H412V0H400ZM553 475Q553 554 537 582T459 622Q451 623 373 624H298V343H372Q457 344 480 350Q527 362 540 390T553 475\",119824:\"64 339Q64 431 96 502T182 614T295 675T420 696Q469 696 481 695Q620 680 709 589T798 339Q798 255 768 184Q720 77 611 26L600 21Q635 -26 682 -26H696Q769 -26 769 0Q769 7 774 12T787 18Q805 18 805 -7V-13Q803 -64 785 -106T737 -171Q720 -183 697 -191Q687 -193 668 -193Q636 -193 613 -182T575 -144T552 -94T532 -27Q531 -23 530 -16T528 -6T526 -3L512 -5Q499 -7 477 -8T431 -10Q393 -10 382 -9Q238 8 151 97T64 339ZM326 80Q326 113 356 138T430 163Q492 163 542 100L553 86Q554 85 561 91T578 108Q637 179 637 330Q637 430 619 498T548 604Q500 641 425 641Q408 641 390 637T347 623T299 590T259 535Q226 469 226 338Q226 244 246 180T318 79L325 74Q326 74 326 80ZM506 58Q480 112 433 112Q412 112 395 104T378 77Q378 44 431 44Q480 44 506 58\",119825:\"394 0Q370 3 222 3Q75 3 51 0H39V62H147V624H39V686H234Q256 686 299 686T362 687Q479 687 554 669T681 593Q716 550 716 497Q716 390 568 338Q569 337 572 336T577 332Q605 317 623 300T650 258T662 218T668 172Q678 98 689 76Q707 40 748 40Q770 40 780 54T795 88T801 111Q805 117 827 117H831Q846 117 852 113T858 92Q857 78 852 63T834 30T797 1T739 -11Q630 -11 580 12T511 87Q506 104 506 168Q506 170 506 178T507 194Q507 289 438 313Q424 318 356 318H298V62H406V0H394ZM366 369Q459 370 490 381Q548 402 548 476V498V517Q548 578 513 600Q479 624 392 624H358H298V369H366\",119826:\"64 493Q64 582 120 636T264 696H272Q280 697 285 697Q380 697 454 645L480 669Q484 672 488 676T495 683T500 688T504 691T508 693T511 695T514 696T517 697T522 697Q536 697 539 691T542 652V577Q542 557 542 532T543 500Q543 472 540 465T524 458H511H505Q489 458 485 461T479 478Q472 529 449 564T393 614T336 634T287 639Q228 639 203 610T177 544Q177 517 195 493T247 457Q253 454 343 436T475 391Q574 326 574 207V200Q574 163 559 120Q517 12 389 -9Q380 -10 346 -10Q308 -10 275 -5T221 7T184 22T160 35T151 40L126 17Q122 14 118 10T111 3T106 -2T102 -5T98 -7T95 -9T92 -10T89 -11T84 -11Q70 -11 67 -4T64 35V108Q64 128 64 153T63 185Q63 203 63 211T69 223T77 227T94 228H100Q118 228 122 225T126 205Q130 125 193 88T345 51Q408 51 434 82T460 157Q460 196 439 221T388 257Q384 259 305 276T221 295Q155 313 110 366T64 493\",119827:\"41 425Q41 426 51 545T62 669V675H737V669Q738 665 748 546T758 425V419H696V425Q687 517 669 555T595 607Q578 612 522 613H478V62H631V0H615Q585 3 399 3Q214 3 184 0H168V62H321V613H277H263Q164 613 134 561Q113 527 103 425V419H41V425\",119828:\"570 686Q588 683 703 683T836 686H845V624H737V420Q737 390 737 345T738 284Q738 205 729 164T689 83Q614 -11 465 -11Q321 -11 240 51T148 207Q147 214 147 421V624H39V686H51Q75 683 226 683Q376 683 400 686H412V624H304V405V370V268Q304 181 311 146T346 87Q387 52 466 52Q642 52 667 195Q668 204 669 415V624H561V686H570\",119829:\"592 686H604Q615 685 631 685T666 684T700 684T724 683Q829 683 835 686H843V624H744L611 315Q584 254 546 165Q492 40 482 19T461 -6L460 -7H409Q398 -4 391 9Q385 20 257 315L124 624H25V686H36Q57 683 190 683Q340 683 364 686H377V624H289L384 403L480 185L492 212Q504 240 529 298T575 405L670 624H582V686H592\",119830:\"915 686L1052 683Q1142 683 1157 686H1164V624H1073L957 320Q930 249 900 170T855 52T839 10Q834 0 826 -5Q821 -7 799 -7H792Q777 -7 772 -5T759 10Q759 11 748 39T716 122T676 228L594 442L512 228Q486 159 455 78Q433 19 428 9T416 -5Q411 -7 389 -7H379Q356 -7 349 10Q349 12 334 51T288 170T231 320L116 624H24V686H35Q44 683 183 683Q331 683 355 686H368V624H323Q278 624 278 623L437 207L499 369L561 531L526 624H434V686H445Q454 683 593 683Q741 683 765 686H778V624H733Q688 624 688 623L847 207Q848 207 927 415T1006 624H905V686H915\",119831:\"327 0Q306 3 174 3Q52 3 43 0H33V62H98L162 63L360 333L157 624H48V686H59Q80 683 217 683Q368 683 395 686H408V624H335L393 540L452 458L573 623Q573 624 528 624H483V686H494Q515 683 646 683Q769 683 778 686H787V624H658L575 511Q493 398 493 397L508 376Q522 356 553 312T611 229L727 62H835V0H824Q803 3 667 3Q516 3 489 0H476V62H513L549 63L401 274L247 63Q247 62 292 62H338V0H327\",119832:\"605 0Q581 3 434 3Q286 3 262 0H250V62H358V275L126 624H19V686H30Q54 683 189 683Q361 685 370 686H383V624H308L319 608Q330 591 353 556T396 491L484 359L660 623Q660 624 623 624H585V686H595Q613 683 728 683Q832 683 841 686H849V624H742L509 274V62H618V0H605\",119833:\"80 430L92 686H358Q624 686 628 684Q638 679 638 656Q638 640 637 639Q637 638 445 353Q401 288 351 214T277 103L253 67L256 66Q258 66 265 66T279 66T298 66H343Q380 66 406 68T464 81T518 110T557 164T579 250Q583 278 583 298Q583 299 614 299H645V291Q643 281 636 150T627 8V0H353Q79 0 75 2Q64 7 64 31Q64 48 66 52L259 340L451 623Q451 624 384 624Q294 623 259 612Q155 581 143 446Q142 440 142 432V430H80\",119834:\"64 349Q64 399 107 426T255 453Q346 453 402 423T473 341Q478 327 478 310T479 196V77Q493 63 529 62Q549 62 553 57T558 31Q558 9 552 5T514 0H497H481Q375 0 367 56L356 46Q300 -6 210 -6Q130 -6 81 30T32 121Q32 188 111 226T332 272H350V292Q350 313 348 327T337 361T306 391T248 402T194 399H189Q204 376 204 354Q204 327 187 306T134 284Q97 284 81 305T64 349ZM164 121Q164 89 186 67T238 45Q274 45 307 63T346 108L350 117V226H347Q248 218 206 189T164 121\",119835:\"32 686L123 690Q214 694 215 694H221V409Q289 450 378 450Q479 450 539 387T600 221Q600 122 535 58T358 -6H355Q272 -6 203 53L160 1L129 0H98V301Q98 362 98 435T99 525Q99 591 97 604T83 620Q69 624 42 624H29V686H32ZM227 105L232 99Q237 93 242 87T258 73T280 59T306 49T339 45Q380 45 411 66T451 131Q457 160 457 230Q457 264 456 284T448 329T430 367T396 389T343 398Q282 398 235 355L227 348V105\",119836:\"447 131H458Q478 131 478 117Q478 112 471 95T439 51T377 9Q330 -6 286 -6Q196 -6 135 35Q39 96 39 222Q39 324 101 384Q169 453 286 453Q359 453 411 431T464 353Q464 319 445 302T395 284Q360 284 343 305T325 353Q325 380 338 396H333Q317 398 295 398H292Q280 398 271 397T245 390T218 373T197 338T183 283Q182 275 182 231Q182 199 184 180T193 132T220 85T270 57Q289 50 317 50H326Q385 50 414 115Q419 127 423 129T447 131\",119837:\"351 686L442 690Q533 694 534 694H540V389Q540 327 540 253T539 163Q539 97 541 83T555 66Q569 62 596 62H609V31Q609 0 608 0Q588 0 510 -3T412 -6Q411 -6 411 16V38L401 31Q337 -6 265 -6Q159 -6 99 58T38 224Q38 265 51 303T92 375T165 429T272 449Q359 449 417 412V507V555Q417 597 415 607T402 620Q388 624 361 624H348V686H351ZM411 350Q362 399 291 399Q278 399 256 392T218 371Q195 351 189 320T182 238V221Q182 179 183 159T191 115T212 74Q241 46 288 46Q358 46 404 100L411 109V350\",119838:\"32 225Q32 332 102 392T272 452H283Q382 452 436 401Q494 343 494 243Q494 226 486 222T440 217Q431 217 394 217T327 218H175V209Q175 177 179 154T196 107T236 69T306 50Q312 49 323 49Q376 49 410 85Q421 99 427 111T434 127T442 133T463 135H468Q494 135 494 117Q494 110 489 97T468 66T431 32T373 5T292 -6Q181 -6 107 55T32 225ZM383 276Q377 346 348 374T280 402Q253 402 230 390T195 357Q179 331 176 279V266H383V276\",119839:\"308 0Q290 3 172 3Q58 3 49 0H40V62H109V382H42V444H109V503L110 562L112 572Q127 625 178 658T316 699Q318 699 330 699T348 700Q381 698 404 687T436 658T449 629T452 606Q452 576 432 557T383 537Q355 537 335 555T314 605Q314 635 328 649H325Q311 649 293 644T253 618T227 560Q226 555 226 498V444H340V382H232V62H318V0H308\",119840:\"50 300Q50 368 105 409T255 450Q328 450 376 426L388 420Q435 455 489 455Q517 455 533 441T554 414T558 389Q558 367 544 353T508 339Q484 339 471 354T458 387Q458 397 462 400Q464 401 461 400Q459 400 454 399Q429 392 427 390Q454 353 459 328Q461 315 461 300Q461 240 419 202Q364 149 248 149Q185 149 136 172Q129 158 129 148Q129 105 170 93Q176 91 263 91Q273 91 298 91T334 91T366 89T400 85T432 77T466 64Q544 22 544 -69Q544 -114 506 -145Q438 -201 287 -201Q149 -201 90 -161T30 -70Q30 -58 33 -47T42 -27T54 -13T69 -1T82 6T94 12T101 15Q66 57 66 106Q66 151 90 187L97 197L89 204Q50 243 50 300ZM485 403H492Q491 404 488 404L485 403V403ZM255 200Q279 200 295 206T319 219T331 242T335 268T336 300Q336 337 333 352T317 380Q298 399 255 399Q228 399 211 392T187 371T178 345T176 312V300V289Q176 235 194 219Q215 200 255 200ZM287 -150Q357 -150 400 -128T443 -71Q443 -65 442 -61T436 -50T420 -37T389 -27T339 -21L308 -20Q276 -20 253 -20Q190 -20 180 -20T156 -26Q130 -38 130 -69Q130 -105 173 -127T287 -150\",119841:\"40 686L131 690Q222 694 223 694H229V533L230 372L238 381Q248 394 264 407T317 435T398 450Q428 450 448 447T491 434T529 402T551 346Q553 335 554 198V62H623V0H614Q596 3 489 3Q374 3 365 0H356V62H425V194V275Q425 348 416 373T371 399Q326 399 288 370T238 290Q236 281 235 171V62H304V0H295Q277 3 171 3Q64 3 46 0H37V62H106V332Q106 387 106 453T107 534Q107 593 105 605T91 620Q77 624 50 624H37V686H40\",119842:\"72 610Q72 649 98 672T159 695Q193 693 217 670T241 610Q241 572 217 549T157 525Q120 525 96 548T72 610ZM46 442L136 446L226 450H232V62H294V0H286Q271 3 171 3Q67 3 49 0H40V62H109V209Q109 358 108 362Q103 380 55 380H43V442H46\",119843:\"104 610Q104 649 130 672T191 695Q225 693 249 670T273 610Q273 572 249 549T189 525Q152 525 128 548T104 610ZM78 442L173 446L268 450H274V196Q274 -5 274 -37T269 -83Q256 -132 201 -166T71 -200Q10 -200 -30 -173T-71 -102Q-71 -70 -51 -51T-1 -31Q27 -31 48 -49T69 -100Q69 -121 53 -147H56Q66 -149 77 -149H80Q90 -149 100 -146T127 -125T149 -73Q151 -55 151 149V362Q150 364 148 366T145 370T142 373T138 375T133 377T124 378T113 379T97 380H75V442H78\",119844:\"32 686L123 690Q214 694 215 694H221V255L377 382H346V444H355Q370 441 476 441Q544 441 556 444H562V382H476L347 277L515 62H587V0H579Q564 3 476 3Q370 3 352 0H343V62H358L373 63L260 206L237 189L216 172V62H285V0H277Q259 3 157 3Q46 3 37 0H29V62H98V332Q98 387 98 453T99 534Q99 593 97 605T83 620Q69 624 42 624H29V686H32\",119845:\"43 686L134 690Q225 694 226 694H232V62H301V0H292Q274 3 170 3Q67 3 49 0H40V62H109V332Q109 387 109 453T110 534Q110 593 108 605T94 620Q80 624 53 624H40V686H43\",119846:\"40 442Q217 450 218 450H224V365Q226 367 235 378T254 397T278 416T314 435T362 448Q376 450 400 450H406Q503 450 534 393Q545 376 545 370Q545 368 555 379Q611 450 716 450Q774 450 809 434Q850 414 861 379T873 276V213V198V62H942V0H933Q915 3 809 3Q702 3 684 0H675V62H744V194V275Q744 348 735 373T690 399Q645 399 607 370T557 290Q555 281 554 171V62H623V0H614Q596 3 489 3Q374 3 365 0H356V62H425V194V275Q425 348 416 373T371 399Q326 399 288 370T238 290Q236 281 235 171V62H304V0H295Q277 3 171 3Q64 3 46 0H37V62H106V210V303Q106 353 104 363T91 376Q77 380 50 380H37V442H40\",119847:\"40 442Q217 450 218 450H224V407L225 365Q233 378 245 391T289 422T362 448Q374 450 398 450Q428 450 448 447T491 434T529 402T551 346Q553 335 554 198V62H623V0H614Q596 3 489 3Q374 3 365 0H356V62H425V194V275Q425 348 416 373T371 399Q326 399 288 370T238 290Q236 281 235 171V62H304V0H295Q277 3 171 3Q64 3 46 0H37V62H106V210V303Q106 353 104 363T91 376Q77 380 50 380H37V442H40\",119848:\"287 -5Q228 -5 182 10T109 48T63 102T39 161T32 219Q32 272 50 314T94 382T154 423T214 446T265 452H279Q319 452 326 451Q428 439 485 376T542 221Q542 156 514 108T442 33Q384 -5 287 -5ZM399 230V250Q399 280 398 298T391 338T372 372T338 392T282 401Q241 401 212 380Q190 363 183 334T175 230Q175 202 175 189T177 153T183 118T195 91T215 68T245 56T287 50Q348 50 374 84Q388 101 393 132T399 230\",119849:\"32 442L123 446Q214 450 215 450H221V409Q222 409 229 413T251 423T284 436T328 446T382 450Q480 450 540 388T600 223Q600 128 539 61T361 -6H354Q292 -6 236 28L227 34V-132H296V-194H287Q269 -191 163 -191Q56 -191 38 -194H29V-132H98V113V284Q98 330 97 348T93 370T83 376Q69 380 42 380H29V442H32ZM457 224Q457 303 427 349T350 395Q282 395 235 352L227 345V104L233 97Q274 45 337 45Q383 45 420 86T457 224\",119850:\"38 220Q38 273 54 314T95 380T152 421T211 443T264 449Q368 449 429 386L438 377L484 450H540V-132H609V-194H600Q582 -191 475 -191Q360 -191 351 -194H342V-132H411V42Q409 41 399 34T383 25T367 16T347 7T324 1T296 -4T264 -6Q162 -6 100 56T38 220ZM287 46Q368 46 417 127V301L412 312Q398 347 369 371T302 395Q282 395 263 388T225 362T194 308T182 221Q182 126 214 86T287 46\",119851:\"405 293T374 293T324 312T305 361Q305 378 312 394Q315 397 315 399Q305 399 294 394T266 375T238 329T222 249Q221 241 221 149V62H308V0H298Q280 3 161 3Q47 3 38 0H29V62H98V210V303Q98 353 96 363T83 376Q69 380 42 380H29V442H32L118 446Q204 450 205 450H210V414L211 378Q247 449 315 449H321Q384 449 413 422T442 360Q442 332 424 313\",119852:\"38 315Q38 339 45 360T70 404T127 440T223 453Q273 453 320 436L338 445L357 453H366Q380 453 383 447T386 403V387V355Q386 331 383 326T365 321H355H349Q333 321 329 324T324 341Q317 406 224 406H216Q123 406 123 353Q123 334 143 321T188 304T244 294T285 286Q305 281 325 273T373 237T412 172Q414 162 414 142Q414 -6 230 -6Q154 -6 117 22L68 -6H58Q44 -6 41 0T38 42V73Q38 85 38 101T37 122Q37 144 42 148T68 153H75Q87 153 91 151T97 147T103 132Q131 46 220 46H230Q257 46 265 47Q330 58 330 108Q330 127 316 142Q300 156 284 162Q271 168 212 178T122 202Q38 243 38 315\",119853:\"272 49Q320 49 320 136V145V177H382V143Q382 106 380 99Q374 62 349 36T285 -2L272 -5H247Q173 -5 134 27Q109 46 102 74T94 160Q94 171 94 199T95 245V382H21V433H25Q58 433 90 456Q121 479 140 523T162 621V635H224V444H363V382H224V239V207V149Q224 98 228 81T249 55Q261 49 272 49\",119854:\"40 442L134 446Q228 450 229 450H235V273V165Q235 90 238 74T254 52Q268 46 304 46H319Q352 46 380 67T419 121L420 123Q424 135 425 199Q425 201 425 207Q425 233 425 249V316Q425 354 423 363T410 376Q396 380 369 380H356V442L554 450V267Q554 84 556 79Q561 62 610 62H623V31Q623 0 622 0Q603 0 527 -3T432 -6Q431 -6 431 25V56L420 45Q373 6 332 -1Q313 -6 281 -6Q208 -6 165 14T109 87L107 98L106 230Q106 358 104 366Q96 380 50 380H37V442H40\",119855:\"401 444Q413 441 495 441Q568 441 574 444H580V382H510L409 156Q348 18 339 6Q331 -4 320 -4Q318 -4 313 -4T303 -3H288Q273 -3 264 12T221 102Q206 135 197 156L96 382H26V444H34Q49 441 145 441Q252 441 270 444H279V382H231L284 264Q335 149 338 149Q338 150 389 264T442 381Q442 382 418 382H394V444H401\",119856:\"624 444Q636 441 722 441Q797 441 800 444H805V382H741L593 11Q592 10 590 8T586 4T584 2T581 0T579 -2T575 -3T571 -3T567 -4T561 -4T553 -4H542Q525 -4 518 6T490 70Q474 110 463 137L415 257L367 137Q357 111 341 72Q320 17 313 7T289 -4H277Q259 -4 253 -2T238 11L90 382H25V444H32Q47 441 140 441Q243 441 261 444H270V382H222L310 164L382 342L366 382H303V444H310Q322 441 407 441Q508 441 523 444H531V382H506Q481 382 481 380Q482 376 529 259T577 142L674 382H617V444H624\",119857:\"227 0Q212 3 121 3Q40 3 28 0H21V62H117L245 213L109 382H26V444H34Q49 441 143 441Q247 441 265 444H274V382H246L281 339Q315 297 316 297Q320 297 354 341L389 382H352V444H360Q375 441 466 441Q547 441 559 444H566V382H471L355 246L504 63L545 62H586V0H578Q563 3 469 3Q365 3 347 0H338V62H366Q366 63 326 112T285 163L198 63L217 62H235V0H227\",119858:\"84 -102Q84 -110 87 -119T102 -138T133 -149Q148 -148 162 -143T186 -131T206 -114T222 -95T234 -76T243 -59T249 -45T252 -37L269 0L96 382H26V444H34Q49 441 146 441Q252 441 270 444H279V382H255Q232 382 232 380L337 151L442 382H394V444H401Q413 441 495 441Q568 441 574 444H580V382H510L406 152Q298 -84 297 -87Q269 -139 225 -169T131 -200Q85 -200 54 -172T23 -100Q23 -64 44 -50T87 -35Q111 -35 130 -50T152 -92V-100H84V-102\",119859:\"48 262Q48 264 54 349T60 436V444H252Q289 444 336 444T394 445Q441 445 450 441T459 418Q459 406 458 404Q456 399 327 229T194 55H237Q260 56 268 56T297 58T325 65T348 77T370 98T384 128T395 170Q400 197 400 216Q400 217 431 217H462V211Q461 208 453 108T444 6V0H245Q46 0 43 2Q32 7 32 28V33Q32 41 40 52T84 112Q129 170 164 217L298 393H256Q189 392 165 380Q124 360 115 303Q110 280 110 256Q110 254 79 254H48V262\",119860:\"208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260\",119861:\"231 637Q204 637 199 638T194 649Q194 676 205 682Q206 683 335 683Q594 683 608 681Q671 671 713 636T756 544Q756 480 698 429T565 360L555 357Q619 348 660 311T702 219Q702 146 630 78T453 1Q446 0 242 0Q42 0 39 2Q35 5 35 10Q35 17 37 24Q42 43 47 45Q51 46 62 46H68Q95 46 128 49Q142 52 147 61Q150 65 219 339T288 628Q288 635 231 637ZM649 544Q649 574 634 600T585 634Q578 636 493 637Q473 637 451 637T416 636H403Q388 635 384 626Q382 622 352 506Q352 503 351 500L320 374H401Q482 374 494 376Q554 386 601 434T649 544ZM595 229Q595 273 572 302T512 336Q506 337 429 337Q311 337 310 336Q310 334 293 263T258 122L240 52Q240 48 252 48T333 46Q422 46 429 47Q491 54 543 105T595 229\",119862:\"50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252\",119863:\"287 628Q287 635 230 637Q207 637 200 638T193 647Q193 655 197 667T204 682Q206 683 403 683Q570 682 590 682T630 676Q702 659 752 597T803 431Q803 275 696 151T444 3L430 1L236 0H125H72Q48 0 41 2T33 11Q33 13 36 25Q40 41 44 43T67 46Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628ZM703 469Q703 507 692 537T666 584T629 613T590 629T555 636Q553 636 541 636T512 636T479 637H436Q392 637 386 627Q384 623 313 339T242 52Q242 48 253 48T330 47Q335 47 349 47T373 46Q499 46 581 128Q617 164 640 212T683 339T703 469\",119864:\"492 213Q472 213 472 226Q472 230 477 250T482 285Q482 316 461 323T364 330H312Q311 328 277 192T243 52Q243 48 254 48T334 46Q428 46 458 48T518 61Q567 77 599 117T670 248Q680 270 683 272Q690 274 698 274Q718 274 718 261Q613 7 608 2Q605 0 322 0H133Q31 0 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 659Q197 676 203 680H757Q764 676 764 669Q764 664 751 557T737 447Q735 440 717 440H705Q698 445 698 453L701 476Q704 500 704 528Q704 558 697 578T678 609T643 625T596 632T532 634H485Q397 633 392 631Q388 629 386 622Q385 619 355 499T324 377Q347 376 372 376H398Q464 376 489 391T534 472Q538 488 540 490T557 493Q562 493 565 493T570 492T572 491T574 487T577 483L544 351Q511 218 508 216Q505 213 492 213\",119865:\"48 1Q31 1 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 659Q197 676 203 680H742Q749 676 749 669Q749 664 736 557T722 447Q720 440 702 440H690Q683 445 683 453Q683 454 686 477T689 530Q689 560 682 579T663 610T626 626T575 633T503 634H480Q398 633 393 631Q388 629 386 623Q385 622 352 492L320 363H375Q378 363 398 363T426 364T448 367T472 374T489 386Q502 398 511 419T524 457T529 475Q532 480 548 480H560Q567 475 567 470Q567 467 536 339T502 207Q500 200 482 200H470Q463 206 463 212Q463 215 468 234T473 274Q473 303 453 310T364 317H309L277 190Q245 66 245 60Q245 46 334 46H359Q365 40 365 39T363 19Q359 6 353 0H336Q295 2 185 2Q120 2 86 2T48 1\",119866:\"50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q492 659 471 656T418 643T357 615T294 567T236 496T189 394T158 260Q156 242 156 221Q156 173 170 136T206 79T256 45T308 28T353 24Q407 24 452 47T514 106Q517 114 529 161T541 214Q541 222 528 224T468 227H431Q425 233 425 235T427 254Q431 267 437 273H454Q494 271 594 271Q634 271 659 271T695 272T707 272Q721 272 721 263Q721 261 719 249Q714 230 709 228Q706 227 694 227Q674 227 653 224Q646 221 643 215T629 164Q620 131 614 108Q589 6 586 3Q584 1 581 1Q571 1 553 21T530 52Q530 53 528 52T522 47Q448 -22 322 -22Q201 -22 126 55T50 252\",119867:\"228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 219 683Q260 681 355 681Q389 681 418 681T463 682T483 682Q499 682 499 672Q499 670 497 658Q492 641 487 638H485Q483 638 480 638T473 638T464 637T455 637Q416 636 405 634T387 623Q384 619 355 500Q348 474 340 442T328 395L324 380Q324 378 469 378H614L615 381Q615 384 646 504Q674 619 674 627T617 637Q594 637 587 639T580 648Q580 650 582 660Q586 677 588 679T604 682Q609 682 646 681T740 680Q802 680 835 681T871 682Q888 682 888 672Q888 645 876 638H874Q872 638 869 638T862 638T853 637T844 637Q805 636 794 634T776 623Q773 618 704 340T634 58Q634 51 638 51Q646 48 692 46H723Q729 38 729 37T726 19Q722 6 716 0H701Q664 2 567 2Q533 2 504 2T458 2T437 1Q420 1 420 10Q420 15 423 24Q428 43 433 45Q437 46 448 46H454Q481 46 514 49Q520 50 522 50T528 55T534 64T540 82T547 110T558 153Q565 181 569 198Q602 330 602 331T457 332H312L279 197Q245 63 245 58Q245 51 253 49T303 46H334Q340 38 340 37T337 19Q333 6 327 0H312Q275 2 178 2Q144 2 115 2T69 2T48 1Q31 1 31 10Q31 12 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637\",119868:\"43 1Q26 1 26 10Q26 12 29 24Q34 43 39 45Q42 46 54 46H60Q120 46 136 53Q137 53 138 54Q143 56 149 77T198 273Q210 318 216 344Q286 624 286 626Q284 630 284 631Q274 637 213 637H193Q184 643 189 662Q193 677 195 680T209 683H213Q285 681 359 681Q481 681 487 683H497Q504 676 504 672T501 655T494 639Q491 637 471 637Q440 637 407 634Q393 631 388 623Q381 609 337 432Q326 385 315 341Q245 65 245 59Q245 52 255 50T307 46H339Q345 38 345 37T342 19Q338 6 332 0H316Q279 2 179 2Q143 2 113 2T65 2T43 1\",119869:\"447 625Q447 637 354 637H329Q323 642 323 645T325 664Q329 677 335 683H352Q393 681 498 681Q541 681 568 681T605 682T619 682Q633 682 633 672Q633 670 630 658Q626 642 623 640T604 637Q552 637 545 623Q541 610 483 376Q420 128 419 127Q397 64 333 21T195 -22Q137 -22 97 8T57 88Q57 130 80 152T132 174Q177 174 182 130Q182 98 164 80T123 56Q115 54 115 53T122 44Q148 15 197 15Q235 15 271 47T324 130Q328 142 387 380T447 625\",119870:\"285 628Q285 635 228 637Q205 637 198 638T191 647Q191 649 193 661Q199 681 203 682Q205 683 214 683H219Q260 681 355 681Q389 681 418 681T463 682T483 682Q500 682 500 674Q500 669 497 660Q496 658 496 654T495 648T493 644T490 641T486 639T479 638T470 637T456 637Q416 636 405 634T387 623L306 305Q307 305 490 449T678 597Q692 611 692 620Q692 635 667 637Q651 637 651 648Q651 650 654 662T659 677Q662 682 676 682Q680 682 711 681T791 680Q814 680 839 681T869 682Q889 682 889 672Q889 650 881 642Q878 637 862 637Q787 632 726 586Q710 576 656 534T556 455L509 418L518 396Q527 374 546 329T581 244Q656 67 661 61Q663 59 666 57Q680 47 717 46H738Q744 38 744 37T741 19Q737 6 731 0H720Q680 3 625 3Q503 3 488 0H478Q472 6 472 9T474 27Q478 40 480 43T491 46H494Q544 46 544 71Q544 75 517 141T485 216L427 354L359 301L291 248L268 155Q245 63 245 58Q245 51 253 49T303 46H334Q340 37 340 35Q340 19 333 5Q328 0 317 0Q314 0 280 1T180 2Q118 2 85 2T49 1Q31 1 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628\",119871:\"228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 217 683Q271 680 344 680Q485 680 506 683H518Q524 677 524 674T522 656Q517 641 513 637H475Q406 636 394 628Q387 624 380 600T313 336Q297 271 279 198T252 88L243 52Q243 48 252 48T311 46H328Q360 46 379 47T428 54T478 72T522 106T564 161Q580 191 594 228T611 270Q616 273 628 273H641Q647 264 647 262T627 203T583 83T557 9Q555 4 553 3T537 0T494 -1Q483 -1 418 -1T294 0H116Q32 0 32 10Q32 17 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637\",119872:\"289 629Q289 635 232 637Q208 637 201 638T194 648Q194 649 196 659Q197 662 198 666T199 671T201 676T203 679T207 681T212 683T220 683T232 684Q238 684 262 684T307 683Q386 683 398 683T414 678Q415 674 451 396L487 117L510 154Q534 190 574 254T662 394Q837 673 839 675Q840 676 842 678T846 681L852 683H948Q965 683 988 683T1017 684Q1051 684 1051 673Q1051 668 1048 656T1045 643Q1041 637 1008 637Q968 636 957 634T939 623Q936 618 867 340T797 59Q797 55 798 54T805 50T822 48T855 46H886Q892 37 892 35Q892 19 885 5Q880 0 869 0Q864 0 828 1T736 2Q675 2 644 2T609 1Q592 1 592 11Q592 13 594 25Q598 41 602 43T625 46Q652 46 685 49Q699 52 704 61Q706 65 742 207T813 490T848 631L654 322Q458 10 453 5Q451 4 449 3Q444 0 433 0Q418 0 415 7Q413 11 374 317L335 624L267 354Q200 88 200 79Q206 46 272 46H282Q288 41 289 37T286 19Q282 3 278 1Q274 0 267 0Q265 0 255 0T221 1T157 2Q127 2 95 1T58 0Q43 0 39 2T35 11Q35 13 38 25T43 40Q45 46 65 46Q135 46 154 86Q158 92 223 354T289 629\",119873:\"234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637\",119874:\"740 435Q740 320 676 213T511 42T304 -22Q207 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435ZM637 476Q637 565 591 615T476 665Q396 665 322 605Q242 542 200 428T157 216Q157 126 200 73T314 19Q404 19 485 98T608 313Q637 408 637 476\",119875:\"287 628Q287 635 230 637Q206 637 199 638T192 648Q192 649 194 659Q200 679 203 681T397 683Q587 682 600 680Q664 669 707 631T751 530Q751 453 685 389Q616 321 507 303Q500 302 402 301H307L277 182Q247 66 247 59Q247 55 248 54T255 50T272 48T305 46H336Q342 37 342 35Q342 19 335 5Q330 0 319 0Q316 0 282 1T182 2Q120 2 87 2T51 1Q33 1 33 11Q33 13 36 25Q40 41 44 43T67 46Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628ZM645 554Q645 567 643 575T634 597T609 619T560 635Q553 636 480 637Q463 637 445 637T416 636T404 636Q391 635 386 627Q384 621 367 550T332 412T314 344Q314 342 395 342H407H430Q542 342 590 392Q617 419 631 471T645 554\",119876:\"399 -80Q399 -47 400 -30T402 -11V-7L387 -11Q341 -22 303 -22Q208 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435Q740 255 592 107Q529 47 461 16L444 8V3Q444 2 449 -24T470 -66T516 -82Q551 -82 583 -60T625 -3Q631 11 638 11Q647 11 649 2Q649 -6 639 -34T611 -100T557 -165T481 -194Q399 -194 399 -87V-80ZM636 468Q636 523 621 564T580 625T530 655T477 665Q429 665 379 640Q277 591 215 464T153 216Q153 110 207 59Q231 38 236 38V46Q236 86 269 120T347 155Q372 155 390 144T417 114T429 82T435 55L448 64Q512 108 557 185T619 334T636 468ZM314 18Q362 18 404 39L403 49Q399 104 366 115Q354 117 347 117Q344 117 341 117T337 118Q317 118 296 98T274 52Q274 18 314 18\",119877:\"230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554\",119878:\"308 24Q367 24 416 76T466 197Q466 260 414 284Q308 311 278 321T236 341Q176 383 176 462Q176 523 208 573T273 648Q302 673 343 688T407 704H418H425Q521 704 564 640Q565 640 577 653T603 682T623 704Q624 704 627 704T632 705Q645 705 645 698T617 577T585 459T569 456Q549 456 549 465Q549 471 550 475Q550 478 551 494T553 520Q553 554 544 579T526 616T501 641Q465 662 419 662Q362 662 313 616T263 510Q263 480 278 458T319 427Q323 425 389 408T456 390Q490 379 522 342T554 242Q554 216 546 186Q541 164 528 137T492 78T426 18T332 -20Q320 -22 298 -22Q199 -22 144 33L134 44L106 13Q83 -14 78 -18T65 -22Q52 -22 52 -14Q52 -11 110 221Q112 227 130 227H143Q149 221 149 216Q149 214 148 207T144 186T142 153Q144 114 160 87T203 47T255 29T308 24\",119879:\"40 437Q21 437 21 445Q21 450 37 501T71 602L88 651Q93 669 101 677H569H659Q691 677 697 676T704 667Q704 661 687 553T668 444Q668 437 649 437Q640 437 637 437T631 442L629 445Q629 451 635 490T641 551Q641 586 628 604T573 629Q568 630 515 631Q469 631 457 630T439 622Q438 621 368 343T298 60Q298 48 386 46Q418 46 427 45T436 36Q436 31 433 22Q429 4 424 1L422 0Q419 0 415 0Q410 0 363 1T228 2Q99 2 64 0H49Q43 6 43 9T45 27Q49 40 55 46H83H94Q174 46 189 55Q190 56 191 56Q196 59 201 76T241 233Q258 301 269 344Q339 619 339 625Q339 630 310 630H279Q212 630 191 624Q146 614 121 583T67 467Q60 445 57 441T43 437H40\",119880:\"107 637Q73 637 71 641Q70 643 70 649Q70 673 81 682Q83 683 98 683Q139 681 234 681Q268 681 297 681T342 682T362 682Q378 682 378 672Q378 670 376 658Q371 641 366 638H364Q362 638 359 638T352 638T343 637T334 637Q295 636 284 634T266 623Q265 621 238 518T184 302T154 169Q152 155 152 140Q152 86 183 55T269 24Q336 24 403 69T501 205L552 406Q599 598 599 606Q599 633 535 637Q511 637 511 648Q511 650 513 660Q517 676 519 679T529 683Q532 683 561 682T645 680Q696 680 723 681T752 682Q767 682 767 672Q767 650 759 642Q756 637 737 637Q666 633 648 597Q646 592 598 404Q557 235 548 205Q515 105 433 42T263 -22Q171 -22 116 34T60 167V183Q60 201 115 421Q164 622 164 628Q164 635 107 637\",119881:\"52 648Q52 670 65 683H76Q118 680 181 680Q299 680 320 683H330Q336 677 336 674T334 656Q329 641 325 637H304Q282 635 274 635Q245 630 242 620Q242 618 271 369T301 118L374 235Q447 352 520 471T595 594Q599 601 599 609Q599 633 555 637Q537 637 537 648Q537 649 539 661Q542 675 545 679T558 683Q560 683 570 683T604 682T668 681Q737 681 755 683H762Q769 676 769 672Q769 655 760 640Q757 637 743 637Q730 636 719 635T698 630T682 623T670 615T660 608T652 599T645 592L452 282Q272 -9 266 -16Q263 -18 259 -21L241 -22H234Q216 -22 216 -15Q213 -9 177 305Q139 623 138 626Q133 637 76 637H59Q52 642 52 648\",119882:\"436 683Q450 683 486 682T553 680Q604 680 638 681T677 682Q695 682 695 674Q695 670 692 659Q687 641 683 639T661 637Q636 636 621 632T600 624T597 615Q597 603 613 377T629 138L631 141Q633 144 637 151T649 170T666 200T690 241T720 295T759 362Q863 546 877 572T892 604Q892 619 873 628T831 637Q817 637 817 647Q817 650 819 660Q823 676 825 679T839 682Q842 682 856 682T895 682T949 681Q1015 681 1034 683Q1048 683 1048 672Q1048 666 1045 655T1038 640T1028 637Q1006 637 988 631T958 617T939 600T927 584L923 578L754 282Q586 -14 585 -15Q579 -22 561 -22Q546 -22 542 -17Q539 -14 523 229T506 480L494 462Q472 425 366 239Q222 -13 220 -15T215 -19Q210 -22 197 -22Q178 -22 176 -15Q176 -12 154 304T131 622Q129 631 121 633T82 637H58Q51 644 51 648Q52 671 64 683H76Q118 680 176 680Q301 680 313 683H323Q329 677 329 674T327 656Q322 641 318 637H297Q236 634 232 620Q262 160 266 136L501 550L499 587Q496 629 489 632Q483 636 447 637Q428 637 422 639T416 648Q416 650 418 660Q419 664 420 669T421 676T424 680T428 682T436 683\",119883:\"42 0H40Q26 0 26 11Q26 15 29 27Q33 41 36 43T55 46Q141 49 190 98Q200 108 306 224T411 342Q302 620 297 625Q288 636 234 637H206Q200 643 200 645T202 664Q206 677 212 683H226Q260 681 347 681Q380 681 408 681T453 682T473 682Q490 682 490 671Q490 670 488 658Q484 643 481 640T465 637Q434 634 411 620L488 426L541 485Q646 598 646 610Q646 628 622 635Q617 635 609 637Q594 637 594 648Q594 650 596 664Q600 677 606 683H618Q619 683 643 683T697 681T738 680Q828 680 837 683H845Q852 676 852 672Q850 647 840 637H824Q790 636 763 628T722 611T698 593L687 584Q687 585 592 480L505 384Q505 383 536 304T601 142T638 56Q648 47 699 46Q734 46 734 37Q734 35 732 23Q728 7 725 4T711 1Q708 1 678 1T589 2Q528 2 496 2T461 1Q444 1 444 10Q444 11 446 25Q448 35 450 39T455 44T464 46T480 47T506 54Q523 62 523 64Q522 64 476 181L429 299Q241 95 236 84Q232 76 232 72Q232 53 261 47Q262 47 267 47T273 46Q276 46 277 46T280 45T283 42T284 35Q284 26 282 19Q279 6 276 4T261 1Q258 1 243 1T201 2T142 2Q64 2 42 0\",119884:\"66 637Q54 637 49 637T39 638T32 641T30 647T33 664T42 682Q44 683 56 683Q104 680 165 680Q288 680 306 683H316Q322 677 322 674T320 656Q316 643 310 637H298Q242 637 242 624Q242 619 292 477T343 333L346 336Q350 340 358 349T379 373T411 410T454 461Q546 568 561 587T577 618Q577 634 545 637Q528 637 528 647Q528 649 530 661Q533 676 535 679T549 683Q551 683 578 682T657 680Q684 680 713 681T746 682Q763 682 763 673Q763 669 760 657T755 643Q753 637 734 637Q662 632 617 587Q608 578 477 424L348 273L322 169Q295 62 295 57Q295 46 363 46Q379 46 384 45T390 35Q390 33 388 23Q384 6 382 4T366 1Q361 1 324 1T232 2Q170 2 138 2T102 1Q84 1 84 9Q84 14 87 24Q88 27 89 30T90 35T91 39T93 42T96 44T101 45T107 45T116 46T129 46Q168 47 180 50T198 63Q201 68 227 171L252 274L129 623Q128 624 127 625T125 627T122 629T118 631T113 633T105 634T96 635T83 636T66 637\",119885:\"58 8Q58 23 64 35Q64 36 329 334T596 635L586 637Q575 637 512 637H500H476Q442 637 420 635T365 624T311 598T266 548T228 469Q227 466 226 463T224 458T223 453T222 450L221 448Q218 443 202 443Q185 443 182 453L214 561Q228 606 241 651Q249 679 253 681Q256 683 487 683H718Q723 678 723 675Q723 673 717 649Q189 54 188 52L185 49H274Q369 50 377 51Q452 60 500 100T579 247Q587 272 590 277T603 282H607Q628 282 628 271Q547 5 541 2Q538 0 300 0H124Q58 0 58 8\",119886:\"33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328\",119887:\"73 647Q73 657 77 670T89 683Q90 683 161 688T234 694Q246 694 246 685T212 542Q204 508 195 472T180 418L176 399Q176 396 182 402Q231 442 283 442Q345 442 383 396T422 280Q422 169 343 79T173 -11Q123 -11 82 27T40 150V159Q40 180 48 217T97 414Q147 611 147 623T109 637Q104 637 101 637H96Q86 637 83 637T76 640T73 647ZM336 325V331Q336 405 275 405Q258 405 240 397T207 376T181 352T163 330L157 322L136 236Q114 150 114 114Q114 66 138 42Q154 26 178 26Q211 26 245 58Q270 81 285 114T318 219Q336 291 336 325\",119888:\"34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159\",119889:\"366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326\",119890:\"39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353\",119891:\"118 -162Q120 -162 124 -164T135 -167T147 -168Q160 -168 171 -155T187 -126Q197 -99 221 27T267 267T289 382V385H242Q195 385 192 387Q188 390 188 397L195 425Q197 430 203 430T250 431Q298 431 298 432Q298 434 307 482T319 540Q356 705 465 705Q502 703 526 683T550 630Q550 594 529 578T487 561Q443 561 443 603Q443 622 454 636T478 657L487 662Q471 668 457 668Q445 668 434 658T419 630Q412 601 403 552T387 469T380 433Q380 431 435 431Q480 431 487 430T498 424Q499 420 496 407T491 391Q489 386 482 386T428 385H372L349 263Q301 15 282 -47Q255 -132 212 -173Q175 -205 139 -205Q107 -205 81 -186T55 -132Q55 -95 76 -78T118 -61Q162 -61 162 -103Q162 -122 151 -136T127 -157L118 -162\",119892:\"311 43Q296 30 267 15T206 0Q143 0 105 45T66 160Q66 265 143 353T314 442Q361 442 401 394L404 398Q406 401 409 404T418 412T431 419T447 422Q461 422 470 413T480 394Q480 379 423 152T363 -80Q345 -134 286 -169T151 -205Q10 -205 10 -137Q10 -111 28 -91T74 -71Q89 -71 102 -80T116 -111Q116 -121 114 -130T107 -144T99 -154T92 -162L90 -164H91Q101 -167 151 -167Q189 -167 211 -155Q234 -144 254 -122T282 -75Q288 -56 298 -13Q311 35 311 43ZM384 328L380 339Q377 350 375 354T369 368T359 382T346 393T328 402T306 405Q262 405 221 352Q191 313 171 233T151 117Q151 38 213 38Q269 38 323 108L331 118L384 328\",119894:\"184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287\",119895:\"297 596Q297 627 318 644T361 661Q378 661 389 651T403 623Q403 595 384 576T340 557Q322 557 310 567T297 596ZM288 376Q288 405 262 405Q240 405 220 393T185 362T161 325T144 293L137 279Q135 278 121 278H107Q101 284 101 286T105 299Q126 348 164 391T252 441Q253 441 260 441T272 442Q296 441 316 432Q341 418 354 401T367 348V332L318 133Q267 -67 264 -75Q246 -125 194 -164T75 -204Q25 -204 7 -183T-12 -137Q-12 -110 7 -91T53 -71Q70 -71 82 -81T95 -112Q95 -148 63 -167Q69 -168 77 -168Q111 -168 139 -140T182 -74L193 -32Q204 11 219 72T251 197T278 308T289 365Q289 372 288 376\",119896:\"121 647Q121 657 125 670T137 683Q138 683 209 688T282 694Q294 694 294 686Q294 679 244 477Q194 279 194 272Q213 282 223 291Q247 309 292 354T362 415Q402 442 438 442Q468 442 485 423T503 369Q503 344 496 327T477 302T456 291T438 288Q418 288 406 299T394 328Q394 353 410 369T442 390L458 393Q446 405 434 405H430Q398 402 367 380T294 316T228 255Q230 254 243 252T267 246T293 238T320 224T342 206T359 180T365 147Q365 130 360 106T354 66Q354 26 381 26Q429 26 459 145Q461 153 479 153H483Q499 153 499 144Q499 139 496 130Q455 -11 378 -11Q333 -11 305 15T277 90Q277 108 280 121T283 145Q283 167 269 183T234 206T200 217T182 220H180Q168 178 159 139T145 81T136 44T129 20T122 7T111 -2Q98 -11 83 -11Q66 -11 57 -1T48 16Q48 26 85 176T158 471L195 616Q196 629 188 632T149 637H144Q134 637 131 637T124 640T121 647\",119897:\"117 59Q117 26 142 26Q179 26 205 131Q211 151 215 152Q217 153 225 153H229Q238 153 241 153T246 151T248 144Q247 138 245 128T234 90T214 43T183 6T137 -11Q101 -11 70 11T38 85Q38 97 39 102L104 360Q167 615 167 623Q167 626 166 628T162 632T157 634T149 635T141 636T132 637T122 637Q112 637 109 637T101 638T95 641T94 647Q94 649 96 661Q101 680 107 682T179 688Q194 689 213 690T243 693T254 694Q266 694 266 686Q266 675 193 386T118 83Q118 81 118 75T117 65V59\",119898:\"21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287\",119899:\"21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287\",119900:\"201 -11Q126 -11 80 38T34 156Q34 221 64 279T146 380Q222 441 301 441Q333 441 341 440Q354 437 367 433T402 417T438 387T464 338T476 268Q476 161 390 75T201 -11ZM121 120Q121 70 147 48T206 26Q250 26 289 58T351 142Q360 163 374 216T388 308Q388 352 370 375Q346 405 306 405Q243 405 195 347Q158 303 140 230T121 120\",119901:\"23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102\",119902:\"33 157Q33 258 109 349T280 441Q340 441 372 389Q373 390 377 395T388 406T404 418Q438 442 450 442Q454 442 457 439T460 434Q460 425 391 149Q320 -135 320 -139Q320 -147 365 -148H390Q396 -156 396 -157T393 -175Q389 -188 383 -194H370Q339 -192 262 -192Q234 -192 211 -192T174 -192T157 -193Q143 -193 143 -185Q143 -182 145 -170Q149 -154 152 -151T172 -148Q220 -148 230 -141Q238 -136 258 -53T279 32Q279 33 272 29Q224 -10 172 -10Q117 -10 75 30T33 157ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326\",119903:\"21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287\",119904:\"131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289\",119905:\"26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26\",119906:\"21 287Q21 295 30 318T55 370T99 420T158 442Q204 442 227 417T250 358Q250 340 216 246T182 105Q182 62 196 45T238 27T291 44T328 78L339 95Q341 99 377 247Q407 367 413 387T427 416Q444 431 463 431Q480 431 488 421T496 402L420 84Q419 79 419 68Q419 43 426 35T447 26Q469 29 482 57T512 145Q514 153 532 153Q551 153 551 144Q550 139 549 130T540 98T523 55T498 17T462 -8Q454 -10 438 -10Q372 -10 347 46Q345 45 336 36T318 21T296 6T267 -6T233 -11Q189 -11 155 7Q103 38 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287\",119907:\"173 380Q173 405 154 405Q130 405 104 376T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Q21 294 29 316T53 368T97 419T160 441Q202 441 225 417T249 361Q249 344 246 335Q246 329 231 291T200 202T182 113Q182 86 187 69Q200 26 250 26Q287 26 319 60T369 139T398 222T409 277Q409 300 401 317T383 343T365 361T357 383Q357 405 376 424T417 443Q436 443 451 425T467 367Q467 340 455 284T418 159T347 40T241 -11Q177 -11 139 22Q102 54 102 117Q102 148 110 181T151 298Q173 362 173 380\",119908:\"580 385Q580 406 599 424T641 443Q659 443 674 425T690 368Q690 339 671 253Q656 197 644 161T609 80T554 12T482 -11Q438 -11 404 5T355 48Q354 47 352 44Q311 -11 252 -11Q226 -11 202 -5T155 14T118 53T104 116Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 293 29 315T52 366T96 418T161 441Q204 441 227 416T250 358Q250 340 217 250T184 111Q184 65 205 46T258 26Q301 26 334 87L339 96V119Q339 122 339 128T340 136T341 143T342 152T345 165T348 182T354 206T362 238T373 281Q402 395 406 404Q419 431 449 431Q468 431 475 421T483 402Q483 389 454 274T422 142Q420 131 420 107V100Q420 85 423 71T442 42T487 26Q558 26 600 148Q609 171 620 213T632 273Q632 306 619 325T593 357T580 385\",119909:\"52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289\",119910:\"21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287\",119911:\"347 338Q337 338 294 349T231 360Q211 360 197 356T174 346T162 335T155 324L153 320Q150 317 138 317Q117 317 117 325Q117 330 120 339Q133 378 163 406T229 440Q241 442 246 442Q271 442 291 425T329 392T367 375Q389 375 411 408T434 441Q435 442 449 442H462Q468 436 468 434Q468 430 463 420T449 399T432 377T418 358L411 349Q368 298 275 214T160 106L148 94L163 93Q185 93 227 82T290 71Q328 71 360 90T402 140Q406 149 409 151T424 153Q443 153 443 143Q443 138 442 134Q425 72 376 31T278 -11Q252 -11 232 6T193 40T155 57Q111 57 76 -3Q70 -11 59 -11H54H41Q35 -5 35 -2Q35 13 93 84Q132 129 225 214T340 322Q352 338 347 338\",119912:\"65 0Q45 0 45 18Q48 52 61 60Q65 62 81 62Q155 62 165 74Q166 74 265 228T465 539T569 699Q576 707 583 709T611 711T637 710T649 700Q650 697 695 380L741 63L784 62H827Q839 50 839 45L835 29Q831 9 827 5T806 0Q803 0 790 0T743 1T657 2Q585 2 547 1T504 0Q481 0 481 17Q484 54 497 60Q501 62 541 62Q580 62 580 63Q580 68 573 121T564 179V181H308L271 124Q236 69 236 67T283 62H287Q316 62 316 46Q316 26 307 8Q302 3 295 0L262 1Q242 2 168 2Q119 2 93 1T65 0ZM537 372Q533 402 528 435T521 486T518 504V505Q517 505 433 375L348 244L451 243Q555 243 555 244L537 372\",119913:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 449 686H477H586Q684 686 733 677T817 634Q853 598 853 547Q853 499 826 460T761 401T695 371T654 360H653L662 358Q670 357 683 354T712 344T744 327T774 303T795 269T804 224Q804 148 732 79T533 1Q524 0 288 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624ZM703 550Q703 571 695 586T675 609T656 619T643 623L545 624H447L417 504Q386 384 386 383T470 382Q554 383 565 385Q632 397 667 447T703 550ZM651 240Q651 265 645 282T626 309T608 322T592 329Q587 330 479 331H373L340 198Q307 65 306 64Q306 62 406 62L507 63L519 65Q565 76 596 107T639 171T651 240\",119914:\"380 -17Q335 -17 293 -10T207 16T130 65T76 144T55 256Q55 306 70 361T122 476T211 582T345 663T525 702H545Q673 702 731 634L777 668Q783 672 789 677T800 685T808 691T814 695T818 698T822 700T825 702T828 703T830 703T833 703Q855 703 855 690Q855 686 823 558T789 426Q786 421 782 420T756 419Q734 420 729 421T724 432Q724 434 725 447T726 472Q726 552 678 604Q640 640 586 640H574Q533 640 494 632T409 604T324 541T260 437Q243 397 227 333T210 219Q210 152 237 117Q255 90 299 68T420 46H429Q506 46 580 100T678 234Q683 249 687 251T712 254H723Q743 254 743 240Q743 232 736 213T710 162T663 100T586 40T477 -5Q433 -17 380 -17\",119915:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 437 686Q659 686 668 685Q727 680 772 662T842 621T883 568T905 517T913 475Q914 466 914 434Q914 373 892 307T828 179T712 69T548 7Q517 2 494 2T279 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624ZM768 475Q768 515 753 544T718 588T666 611T613 622T563 624H538H532H452L382 344Q311 64 311 63T363 62H405Q490 62 545 76T656 142Q696 185 724 265T760 399T768 475\",119916:\"257 618H231Q198 618 198 636Q202 672 214 678L219 680H811Q817 677 820 673T824 666L825 664Q825 659 814 549T799 433Q793 424 771 424Q752 424 746 427T740 441Q740 445 742 466T744 505Q744 561 722 585T646 616Q639 617 545 618H456Q456 617 427 502T398 385Q398 384 435 384Q461 385 471 385T499 391T526 405T545 433T562 478Q566 494 571 497T595 501H604Q622 501 626 486Q626 482 593 349T557 213Q552 205 530 205Q499 205 499 219Q499 222 503 242T508 281Q508 308 491 314T429 322Q425 322 423 322H382L317 64Q317 62 390 62Q460 62 493 64T569 80T640 124Q665 149 686 187T719 253T733 283Q739 289 760 289Q791 289 791 274Q791 267 763 201T706 71L678 8Q676 4 667 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L163 66Q163 67 231 341T301 616Q301 618 257 618\",119917:\"257 618H231Q198 618 198 636Q202 672 214 678L219 680H795Q801 677 804 673T808 666L809 664Q809 659 798 549T783 433Q777 424 755 424Q736 424 730 427T724 444Q724 448 725 468T727 507V524Q727 541 724 554T713 577T698 594T676 605T653 612T625 616T597 617T566 618T538 618H456L455 614Q455 611 424 491L394 371H429Q454 372 463 372T491 378T517 392T536 419T552 464Q556 481 561 484T586 488Q603 488 607 486Q616 482 616 473Q616 467 584 337T549 201Q542 192 521 192Q503 192 497 195T490 209Q490 212 492 224Q499 251 499 269Q499 288 489 296T465 306T417 308L379 309L348 188Q341 161 334 129T322 80L318 65L317 62H375H409Q430 62 438 59T447 45Q444 8 431 2L426 0L377 1Q347 2 231 2Q152 2 111 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L163 66Q163 67 231 341T301 616Q301 618 257 618\",119918:\"379 -16Q233 -16 145 52T56 255Q56 310 73 368T127 483T216 586T347 663T518 702H540Q562 702 582 700T616 696T644 689T667 681T686 670T702 659T717 647T731 635L776 668Q782 672 788 677T799 685T807 691T813 695T817 698T821 700T824 702T827 703T829 703T832 703Q854 703 854 690Q854 686 822 558T788 426Q785 421 781 420T755 419Q734 420 729 422T723 432Q723 434 724 446T725 469Q725 531 702 571T642 628Q616 640 575 640Q468 640 390 593T272 464Q247 415 229 340T210 214Q210 166 228 132T277 79T343 54T419 46Q445 46 465 50T500 59T526 76T544 96T557 123T566 150T574 182T581 214H519Q511 214 498 214T479 213Q443 213 443 230Q443 250 452 268Q457 273 464 276L514 275Q546 274 657 274Q735 274 768 275T803 276Q826 276 826 258Q823 224 810 216Q806 214 771 214H736Q736 211 710 109T683 5Q678 0 671 0Q666 0 637 14T597 36Q593 38 590 40T585 44T582 44T576 40Q511 -16 379 -16\",119919:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 239 686Q290 684 403 684Q475 684 512 685T553 686Q576 686 576 668Q572 632 560 626Q555 624 506 624H457L399 389Q399 388 547 388H695L753 623Q753 624 709 624H686Q665 624 660 626T650 639Q653 678 668 684Q672 686 681 686Q685 686 726 685T847 684Q902 684 937 684T986 685T1004 686Q1027 686 1027 668Q1023 632 1011 626Q1006 624 957 624H908L839 344Q768 64 768 63T812 62H839Q871 62 871 44Q867 6 854 2L850 0L808 1Q782 2 675 2Q600 2 560 1T516 0Q499 0 494 15Q498 54 511 60Q515 62 564 62H613L614 66L679 324Q679 326 531 326H383L382 322L317 64Q317 62 361 62H388Q420 62 420 44Q416 6 403 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624\",119920:\"247 624Q242 624 233 624T220 623Q186 623 186 640Q186 647 190 664T202 684Q206 686 226 686Q277 684 393 684Q435 684 471 684T528 685T553 686Q573 686 573 670Q573 650 564 632Q556 624 537 624H501H449L380 344Q309 64 309 63T356 62Q361 62 370 62T384 63Q417 63 417 46Q417 26 408 8Q403 3 396 0L352 1Q325 2 216 2T82 1L45 0Q30 7 30 16Q33 51 46 60Q51 62 102 62H154L294 623Q294 624 247 624\",119921:\"205 131Q205 105 192 84T165 54L152 45Q152 44 160 42T182 37T213 35H216Q255 35 289 65Q314 90 329 129Q331 136 392 378T453 623Q453 624 393 624H332Q318 631 318 640Q318 647 322 664T334 684Q338 686 359 686Q413 684 533 684Q566 684 605 685T652 686Q677 686 685 683T694 669Q694 664 691 652Q686 631 681 628T647 624H602L542 380Q531 336 518 285T500 212T487 161T475 122T463 97T448 74T429 55Q351 -17 213 -17Q142 -17 99 7T43 70Q42 75 42 93Q42 143 73 168T139 194Q168 194 186 177T205 131\",119922:\"536 0Q522 6 522 18Q522 35 533 57Q539 62 557 62Q595 62 601 65L472 330L365 255L342 160Q318 65 317 64Q317 62 361 62H388Q420 62 420 44Q416 6 403 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 239 686Q290 684 403 684Q475 684 512 685T553 686Q576 686 576 668Q572 632 560 626Q555 624 506 624H457L422 481Q386 339 386 337L785 621Q779 624 749 624Q726 624 726 641Q726 645 730 659Q734 675 736 679T747 686L786 685Q812 684 888 684Q908 684 934 685T968 686Q1003 686 1003 669Q1003 646 991 629Q985 624 967 624Q918 624 888 617Q884 617 874 613L865 609Q864 608 732 515T599 420Q599 418 686 242T775 65Q784 62 829 62Q847 62 850 61T860 54Q862 52 862 43Q862 10 845 1Q844 1 842 1T836 0T797 1T694 2Q599 2 573 1L536 0\",119923:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 239 686Q290 684 409 684Q454 684 492 684T552 685T579 686Q603 686 603 668Q599 632 587 626Q583 624 520 624H457L388 344Q317 64 317 63T353 62H390Q418 62 440 64T493 78T548 110T598 169T643 261Q651 282 655 285T680 289Q696 289 700 288T709 279Q711 274 711 269Q710 265 663 138T613 8Q611 4 602 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624\",119924:\"258 624H231Q214 624 208 626T199 639Q203 678 216 684Q220 686 347 686H473Q474 685 478 682T484 677Q487 673 535 413L584 153L608 187Q631 221 672 281T761 410Q935 663 943 671Q949 678 962 686H1082H1166Q1201 686 1210 683T1219 668Q1215 632 1203 626Q1199 624 1149 624H1100L1031 344Q960 64 960 63T1004 62H1031Q1063 62 1063 44Q1060 7 1046 2Q1042 0 1034 0Q1030 0 990 1T875 2Q804 2 767 1T725 0H723Q707 0 703 15Q707 54 720 60Q724 62 773 62H822Q961 618 961 619L754 318Q546 15 543 12Q531 0 510 0Q500 0 495 0T484 5T477 19Q477 20 421 315L367 604L299 335Q234 72 234 68Q234 62 302 62Q334 62 334 46Q332 8 317 2Q313 0 306 0Q301 0 267 1T181 2Q125 2 96 1T63 0Q48 0 43 15Q43 19 47 35Q52 55 57 58T94 62Q147 64 164 69L233 345Q302 619 302 622Q302 624 258 624\",119925:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 344 686H434Q464 686 477 680Q480 677 607 454Q738 227 739 227Q742 227 789 418T836 618Q836 620 835 620L821 622Q811 622 779 624Q755 624 749 625T740 632Q737 635 737 644Q737 656 742 669T754 685Q755 685 757 685T763 686Q768 686 803 685T890 684Q925 684 951 684T990 685T1006 686Q1014 686 1016 684Q1027 679 1027 668Q1023 632 1011 626Q1007 624 978 624Q912 622 907 617Q907 616 831 314T753 8Q749 0 723 0H712Q699 0 692 7Q692 8 671 44T607 155T526 296L361 580L296 323Q234 74 234 68T302 62H307Q334 62 334 44Q330 6 317 2L313 0L280 1Q260 2 181 2Q125 2 96 1T63 0Q48 0 43 15Q43 19 47 35Q52 55 57 58T94 62Q147 64 164 69L233 345Q302 619 302 622Q302 624 258 624\",119926:\"53 245Q53 297 70 356T125 478T216 590T349 671T523 703Q656 703 735 637T815 445Q815 378 791 307Q727 104 527 17Q437 -17 344 -17Q289 -17 242 -5T150 35T79 116T53 245ZM664 489Q664 575 618 611T511 648Q463 648 416 627T334 570Q297 531 270 472T230 355T213 261T208 206Q208 177 215 151T237 98T284 56T358 40Q440 40 510 98T618 270Q664 400 664 489\",119927:\"162 62L302 623Q302 624 258 624H234Q214 624 209 626T200 638Q200 677 217 684Q220 686 439 686Q667 685 684 682Q686 681 693 680Q713 677 733 671T782 649T829 602T847 528Q847 450 784 382T604 293Q571 288 469 287H373L346 176Q340 151 333 122T321 78L317 64Q317 62 361 62H387Q420 62 420 44Q417 10 404 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q43 0 43 17Q43 21 47 33Q52 54 57 58T89 62H113H162ZM692 558Q692 611 617 622Q610 623 529 624H452L381 343H458H492Q604 343 641 389Q662 414 677 471T692 558\",119928:\"53 245Q53 297 70 356T125 478T216 590T349 671T523 703Q656 703 735 637T815 445Q815 410 808 370T781 277T729 178T643 87T519 14L525 4Q540 -19 553 -25T592 -32Q632 -32 654 -24T680 -7T689 10T704 18Q713 18 717 12T722 0Q722 -8 711 -36T681 -101T624 -166T541 -194Q513 -194 494 -183T465 -157T450 -118T444 -79T443 -41V-7L433 -9Q391 -17 344 -17Q301 -17 263 -10T185 15T118 62T71 138T53 245ZM666 482Q666 529 652 563T614 615T565 640T512 648Q412 648 335 573Q268 506 235 389T201 202Q201 164 210 136T230 95T259 66L262 76Q269 109 302 135T382 162Q401 162 415 159T449 140T484 92L491 78L496 82Q502 86 505 88T515 97T528 107T541 120T555 137T570 156T585 179T599 205T612 235Q629 278 647 351T666 482ZM439 56Q439 58 439 62T435 75T426 92T410 106T383 112Q353 112 332 96T311 63Q311 38 355 38H366Q391 39 415 45T439 56\",119929:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 422 686H446H525Q634 686 698 674T806 620Q843 583 843 535Q843 505 833 478T805 432T768 396T728 370T690 352T662 342L651 338L654 336Q658 334 667 327T688 310Q719 278 719 237Q719 222 710 165T701 94Q701 35 748 35Q775 35 793 57T819 101Q822 112 826 114T843 117H849Q881 117 881 99Q881 78 852 39T781 -11Q765 -17 728 -17Q537 -13 537 94Q537 110 552 169T567 243Q567 292 529 309Q517 316 508 316T441 318H375L374 314Q374 312 343 189T311 64Q311 62 355 62H382Q414 62 414 44Q410 6 397 2L393 0L351 1Q325 2 221 2Q147 2 108 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624ZM687 555Q687 617 589 623Q581 624 513 624H451L420 498Q413 468 405 436T392 388L388 371Q388 369 458 369Q464 369 485 369T515 369T541 372T570 377T596 386T624 400Q649 417 664 457T683 522T687 555\",119930:\"354 45Q429 45 467 91T506 184Q506 225 477 250Q461 262 384 279T294 300Q238 318 210 362T182 452Q182 493 202 540T257 623Q338 702 449 702Q491 702 501 701Q571 690 610 654Q614 649 617 650Q618 650 650 675T683 702Q685 703 692 703Q714 703 714 690Q714 686 687 578T658 466Q653 458 629 458Q606 458 602 463Q600 465 599 466Q599 467 599 469T598 473Q598 475 599 487T600 511Q600 584 557 614T454 645Q386 645 347 606T308 520Q308 506 311 496T323 477T338 464T360 454T384 446T413 439T441 433Q523 416 549 401Q581 384 602 352Q631 309 631 254Q631 214 615 170T567 83T478 12T347 -16Q322 -16 300 -14T261 -8T230 0T205 10T187 20T172 30L162 37L130 11Q124 7 119 3T110 -4T104 -9T100 -13T96 -15T93 -16T91 -17T88 -17H82Q76 -17 73 -16T69 -14T66 -10T63 -5L90 107Q97 133 106 170Q116 211 120 219T136 228H148Q167 228 173 227T179 218Q179 216 176 200T173 168Q173 102 227 74T354 45\",119931:\"498 62Q511 58 511 43Q511 10 494 1L490 0Q487 0 482 0T424 1T271 2Q201 2 157 2T94 1T72 0H70Q46 0 46 17Q49 54 62 60L66 62H137Q208 62 209 63L218 98Q227 134 244 203T278 339L347 613H300Q262 612 246 611T198 599T146 564Q128 545 114 512T91 454T79 425Q73 419 52 419Q22 419 22 434Q22 440 41 498T80 611L100 666Q105 673 111 675H434Q758 675 762 673Q772 668 772 657Q772 655 756 549T738 434Q735 419 711 419H707Q690 419 686 421Q677 425 677 434Q676 436 678 449T683 485T686 529Q686 553 679 569T662 594T631 607T593 612T544 613H502L433 340Q418 279 400 207T374 100L365 65L364 62H498\",119932:\"856 686Q877 686 877 668Q877 663 873 649T867 631Q861 624 828 624Q762 622 757 617Q757 613 705 409T651 200Q620 112 540 48T328 -16Q251 -16 196 2T113 51T75 112T63 176Q63 202 70 232T117 422Q129 469 141 520T160 598L167 623Q167 624 123 624H96Q79 624 73 626T64 639Q68 678 81 684Q85 686 104 686Q155 684 268 684Q340 684 377 685T418 686Q441 686 441 668Q437 632 425 626Q421 624 371 624H322L270 415Q224 232 217 198T209 141Q209 45 336 45Q372 45 406 52T475 77T540 128T585 211L590 229Q594 247 601 274T617 336T636 409T654 482T670 547T681 595T686 618Q686 620 685 620H683Q681 621 678 621T671 622Q660 622 630 624Q616 624 610 624T598 626T589 630T587 640Q587 647 590 659Q594 677 598 681T613 686Q618 686 653 685T740 684Q775 684 801 684T840 685T856 686\",119933:\"401 686Q415 680 415 668Q415 651 404 629Q398 624 356 624Q318 624 318 623Q318 620 337 508T377 284L397 174L472 285Q548 396 623 507T699 620Q698 621 652 624Q634 624 627 627T619 641Q619 648 622 658Q627 677 631 681T650 686Q654 686 686 685T766 684Q794 684 823 684T858 685Q874 685 878 683T886 671Q886 667 882 651Q877 632 873 628T850 624Q800 624 779 617Q774 617 770 613Q767 610 560 304T350 -5Q346 -9 332 -16H306H291Q270 -16 267 -2Q267 -1 260 37T238 161T210 313L156 624H116H94Q62 624 62 642Q66 678 78 684Q82 686 99 686Q144 684 246 684Q330 684 368 685L401 686\",119934:\"111 624Q109 624 102 624T91 623Q61 623 61 640Q61 660 70 678Q78 686 98 686Q140 684 239 684Q277 684 309 684T360 685T383 686H385Q407 686 407 668Q404 634 391 626Q387 624 348 624Q307 624 307 622Q307 618 332 409Q359 198 359 195L570 532L564 576L558 622V624H522H504Q472 624 472 641Q475 678 488 684L493 686L529 685Q551 684 645 684Q716 684 753 685T795 686Q818 686 818 669Q815 632 802 626Q798 624 759 624Q718 624 718 622Q718 615 743 410Q770 199 770 196Q770 195 806 253T903 406Q1035 618 1035 619Q1025 624 968 624Q943 624 943 641Q943 648 946 659Q950 675 952 679T963 686L998 685Q1020 684 1093 684Q1113 684 1139 685T1173 686Q1207 686 1207 669Q1207 664 1204 652Q1199 631 1194 628T1164 624Q1113 622 1101 615Q1098 612 905 305Q715 -1 709 -7Q699 -17 673 -17Q645 -17 639 -8L581 441Q581 444 442 221Q331 44 314 18T288 -14Q279 -17 263 -17H254Q229 -17 227 -5Q225 2 186 311L147 620V624H111\",119935:\"931 686Q953 686 953 670Q953 650 944 632Q936 624 924 624H914Q823 624 803 611Q800 609 696 503T591 396Q591 394 667 229L743 62H787H814Q846 62 846 44Q843 7 829 2Q825 0 817 0Q813 0 775 1T664 2Q590 2 551 1T508 0H507Q484 0 484 18Q484 19 488 37Q492 56 497 58T534 62L566 63Q567 64 520 169T471 274Q469 274 369 172T268 67L315 62Q320 62 328 62L335 61Q347 58 347 44Q344 10 331 2L326 0L287 1Q263 2 177 2Q95 2 78 1L53 0Q38 6 38 17Q38 40 50 57Q56 62 78 62Q169 62 188 75Q194 77 435 324L444 334L439 347Q437 351 373 492L313 624H268H246Q220 624 212 632Q210 636 210 642Q210 655 215 669T227 684Q230 686 247 686Q295 684 398 684Q438 684 472 684T527 685T551 686Q567 686 572 671Q572 667 568 651Q563 631 558 628T523 624T492 623H488L526 540Q563 457 564 457Q564 456 574 466T604 496T645 537L724 619Q716 622 677 624H673Q645 624 645 640Q645 660 654 678Q659 683 666 686L704 685Q728 684 813 684Q847 684 873 684T913 685T931 686\",119936:\"97 624H73Q40 624 40 640Q40 660 49 678Q57 686 77 686Q122 684 228 684Q269 684 304 684T360 685T385 686Q406 686 406 668Q406 662 403 653Q398 631 393 628T361 624H353Q321 624 321 623T376 491T432 360L448 377Q465 394 493 424T553 490L673 620Q662 624 630 624Q606 624 606 640Q608 678 623 684Q627 686 634 686Q638 686 671 685T755 684Q777 684 805 685T841 686Q861 686 868 683T876 669Q876 664 873 652Q868 631 863 628T829 624Q764 622 747 611Q727 590 590 441L437 275L411 170Q385 65 384 64Q384 62 429 62H453Q473 62 478 60T487 48Q488 44 484 29Q479 6 473 3Q468 0 454 0Q450 0 436 0T386 1T294 2Q220 2 181 1T138 0Q121 0 116 15Q120 54 133 60Q137 62 187 62H236L289 275L142 624H97\",119937:\"223 430Q192 430 192 448Q192 450 225 561T261 677Q265 683 270 684Q273 686 534 686Q796 686 797 685Q805 682 805 673Q805 668 804 661T800 648T798 641Q796 637 531 352L266 67L329 66H364Q412 66 446 70T523 96T596 157Q617 186 630 220T649 273T663 297Q667 299 684 299H688Q715 299 715 281Q715 278 673 145T628 8Q626 4 617 0H348Q289 0 221 0T139 -1Q112 -1 99 -1T78 1T69 5T68 12Q68 16 71 31T77 49L84 57Q91 65 104 79T133 110T170 151T213 196L610 624H540Q533 624 514 624T488 624T467 623T443 620T422 616T398 609T373 600Q292 560 255 449Q251 436 246 433T223 430\",119938:\"222 -8Q140 -8 89 34T38 158Q38 191 48 227Q72 329 151 390T327 452Q361 452 385 443T421 425T433 416H434L441 421Q448 426 460 430T486 435Q509 435 523 422T538 386Q538 380 522 315T488 179T467 93Q466 87 466 72Q466 42 483 42Q505 42 521 75Q531 94 541 134Q546 155 550 158T571 162H576H587Q607 162 607 148Q606 142 604 132T590 94T566 47T528 9T474 -8Q396 -8 358 40Q295 -8 222 -8ZM404 351Q383 401 324 401Q300 401 270 385T221 330Q206 296 186 220Q166 136 166 106Q166 72 184 58T228 43Q256 43 284 57T328 84T343 103Q343 106 374 228L404 351\",119939:\"220 -8Q142 -8 94 35T45 155V167Q45 187 52 218T104 426L153 622H149Q148 622 144 622T134 623T122 624T111 624T101 624T96 625Q84 628 84 642Q84 647 88 661T94 679Q98 684 109 685T185 690Q258 694 272 694Q289 694 293 679Q293 676 263 553L232 429L244 434Q256 440 281 446T331 452Q417 452 465 407T513 285Q513 235 494 184T439 90T346 20T220 -8ZM385 337Q385 400 318 400Q269 400 226 360Q214 349 211 341T191 268Q162 149 162 113Q162 44 226 44Q269 44 299 76T339 135T362 215Q364 222 365 226Q385 303 385 337\",119940:\"362 325Q362 344 371 361T390 386L399 394Q390 401 355 401Q276 401 231 338Q207 301 189 230T170 122Q170 43 264 43Q392 43 457 105Q472 120 480 117Q486 114 497 102T509 83Q509 79 502 70T477 47T432 21T360 1T259 -8Q194 -8 148 9T80 54T49 109T40 167Q40 280 129 365T352 451Q390 451 396 450Q448 442 473 416T499 358T477 302T421 274H417Q393 274 378 288T362 325\",119941:\"222 -8Q140 -8 89 34T38 158Q38 220 68 285T151 391Q230 452 329 452Q382 452 416 428L422 424Q423 424 447 523L472 622H468Q467 622 463 622T453 623T441 624T430 624T420 624T415 625Q403 628 403 642Q403 647 407 661T413 679Q417 684 428 685T504 690Q577 694 591 694Q608 694 612 679L467 91Q466 87 466 72Q466 43 483 43Q518 43 541 134Q546 155 550 158T571 162H576H587Q607 162 607 148Q606 142 604 132T590 94T566 47T528 9T474 -8Q396 -8 358 40Q295 -8 222 -8ZM404 351Q383 401 324 401Q300 401 270 385T221 330Q206 296 186 220Q166 136 166 106Q166 72 184 58T228 43Q256 43 284 57T328 84T343 103Q343 106 374 228L404 351\",119942:\"260 -8Q196 -8 151 9T83 54T52 111T42 169Q42 188 44 210Q50 240 58 266Q127 434 335 451L338 452Q342 452 345 452Q347 452 353 452T363 451Q426 451 464 424T502 352Q502 289 442 250Q381 211 222 211H184Q184 210 181 196T175 162T171 126Q171 43 264 43Q391 43 457 105Q472 120 480 117Q486 114 497 102T509 83Q509 79 502 70T477 47T432 21T360 1T260 -8ZM237 262Q427 266 427 349Q427 368 409 384T354 401Q316 401 287 388T242 354T216 314T202 278L197 263Q197 262 237 262\",119943:\"584 444Q597 439 597 426Q597 409 586 387Q580 382 505 382H434V380Q432 378 421 314T395 162T368 30Q324 -164 203 -199Q194 -201 175 -201Q123 -201 94 -177T64 -117T88 -58T145 -33Q169 -33 184 -47T200 -84Q200 -122 166 -150L174 -151H185Q202 -148 217 -112Q222 -94 240 9Q246 40 262 132T293 303T307 382H247H210Q190 382 182 385T173 400Q177 436 189 442Q193 444 256 444H318L319 446Q337 565 355 602Q373 640 404 664T458 694T503 701Q569 701 596 676T624 617Q624 581 599 557T544 533Q520 533 504 547T488 585Q488 596 491 606T499 624T508 637T516 646L520 650Q515 650 509 651Q459 651 459 561V554L458 518L452 484Q446 448 445 447V444H584\",119944:\"227 0Q142 0 93 43T43 166Q43 207 58 252T104 341T188 414T310 451L313 452Q316 452 319 452Q321 452 326 452T335 451Q367 451 390 443T425 425L436 416L443 421Q450 426 462 430T488 435Q511 435 525 422T540 386Q540 378 483 151T424 -82Q401 -139 335 -170T167 -202Q72 -202 36 -183T0 -125Q0 -90 24 -67T81 -43Q103 -43 119 -56T136 -99Q133 -124 114 -149L123 -150H183Q222 -150 254 -127T299 -74Q300 -71 306 -47T318 -1T324 23Q323 23 310 18T274 6T227 0ZM407 353Q406 354 404 358T400 365T395 371T388 379T381 385T371 391T360 396T346 400T329 401Q300 401 277 389T240 355T219 317T205 280Q171 148 171 109Q171 77 190 64T235 51T296 67Q322 82 337 98L345 106L407 353\",119945:\"477 56Q477 48 479 46T490 43Q522 45 544 75T577 140Q582 156 585 159T605 162H611H622Q642 162 642 148Q642 138 632 114T602 62T550 13T478 -8Q429 -8 394 17T358 83Q358 95 395 199T433 350Q433 400 394 400H388H383Q335 400 291 363Q256 332 236 298Q233 293 202 170T169 40Q160 18 141 5T99 -8Q70 -8 58 9T45 39Q45 51 116 336L188 622H184Q183 622 179 622T169 623T157 624T146 624T136 624T131 625Q119 628 119 642Q119 647 123 661T129 679Q133 684 144 685T220 690Q293 694 307 694Q324 694 328 679Q328 672 294 540Q286 507 278 473T264 420L260 403Q260 400 269 408Q327 451 393 451H401H410Q425 451 439 450T476 442T515 424T544 391T556 337Q556 286 517 179T477 56\",119946:\"205 615Q205 646 229 670T283 694Q310 694 324 679T339 641Q339 610 315 586T258 562Q235 562 220 577T205 615ZM24 296Q24 305 34 328T63 380T115 430T187 452Q205 452 223 448T262 435T295 406T308 360Q308 345 287 290T240 170T207 87Q202 67 202 57Q202 42 215 42Q235 42 257 64Q288 92 302 140Q307 156 310 159T330 162H336H347Q367 162 367 148Q367 140 357 117T329 65T276 14T201 -8Q158 -8 121 15T83 84Q83 104 133 229T184 358Q189 376 189 388Q189 402 177 402Q156 402 134 380Q103 352 89 304Q84 288 81 285T61 282H55H44Q24 282 24 296\",119947:\"321 616Q321 648 346 671T400 694Q425 694 440 680T456 640Q456 609 431 586T376 562Q353 562 337 577T321 616ZM297 360T297 373T294 392T288 400T278 401H276Q241 399 210 372T158 303Q151 287 148 285T129 282H123H116Q102 282 97 284T92 298Q96 331 153 391T279 451Q357 451 388 422T420 354V339L371 142Q363 111 353 71T339 13T329 -30T318 -64T308 -88T296 -109T283 -125T264 -142Q190 -202 88 -202Q44 -202 16 -181T-12 -125Q-12 -93 11 -68T68 -43Q92 -43 108 -58T124 -93Q124 -121 106 -144Q101 -150 103 -150Q120 -150 147 -128T191 -64Q194 -57 242 136T294 345Q297 360 297 373\",119948:\"99 -8Q71 -8 58 9T45 39Q45 51 116 336L188 622H184Q183 622 179 622T169 623T157 624T146 624T136 624T131 625Q119 628 119 642Q119 647 123 661T129 679Q133 684 144 685T220 690Q293 694 307 694Q324 694 328 679Q328 674 280 482Q231 290 231 287Q231 285 234 286Q259 302 294 334T356 390T420 433T493 452Q528 452 546 427T564 364Q564 308 538 282T480 256Q456 256 441 269T425 308Q425 339 444 359T483 384L502 389Q502 395 496 398Q493 400 483 400Q465 400 449 395T409 374T373 347T323 305T268 257Q274 256 282 256Q312 251 329 247T371 232T411 202Q431 181 431 146Q431 132 427 110T422 73Q422 44 440 44H442Q462 44 478 64T502 102T514 141Q518 157 522 159T547 162H558Q578 162 578 148Q578 118 537 56T440 -7H432Q374 -7 337 21T299 94Q299 103 301 116T304 139Q304 164 281 181T235 202L212 206H211Q176 47 160 24Q137 -8 99 -8\",119949:\"157 -8Q138 -8 118 -4T77 11T41 42T27 91V106L156 622H152Q151 622 147 622T137 623T125 624T114 624T104 624T99 625Q87 628 87 642Q87 647 91 661T97 679Q101 684 112 685T188 690Q261 694 275 694Q292 694 296 679L151 91Q150 85 150 71Q150 42 167 42Q186 42 205 75Q216 96 225 134Q230 155 234 158T255 162H260H271Q291 162 291 148Q290 145 289 140T283 118T271 87T254 54T229 23T197 1T157 -8\",119950:\"24 296Q25 302 27 312T41 350T65 397T104 435T159 452Q203 452 234 435Q268 419 285 384L295 392Q305 401 317 410T349 429T389 445Q411 451 446 451Q560 451 592 383Q593 380 594 379L595 375L604 384Q675 452 762 452Q893 452 916 367Q918 356 918 334Q918 285 881 183T841 66Q838 43 849 43Q876 43 901 69T940 138Q945 156 949 159T969 162H975H986Q1006 162 1006 148Q1006 138 996 115T966 63T914 13T841 -8Q794 -8 758 16T721 82Q721 96 758 199T796 351Q796 401 753 401Q702 401 662 369T599 298Q597 294 567 172T533 40Q525 22 506 7T462 -8Q435 -8 422 8T409 39Q409 48 425 114T458 248T476 320Q478 330 478 348T474 377T462 393T449 399T433 400H428Q380 400 336 363Q301 332 281 298Q278 293 247 170T214 40Q206 22 187 7T143 -8T104 7T90 39Q90 47 108 124T146 274L164 347Q166 355 166 372Q166 401 149 401Q129 401 115 379T89 306Q84 288 80 285T55 282H44Q24 282 24 296\",119951:\"24 296Q25 302 27 312T41 350T65 397T104 435T159 452Q203 452 234 435Q268 419 285 384L293 391Q363 452 454 452Q575 446 597 367Q599 356 599 334Q599 285 562 183T522 66Q519 43 530 43Q557 43 582 69T621 138Q626 156 630 159T650 162H656H667Q687 162 687 148Q687 138 677 115T647 63T595 13T522 -8Q475 -8 439 16T402 82Q402 96 439 199T477 351Q477 401 434 401Q421 401 409 398Q341 388 285 305L278 295L247 170Q216 46 214 40Q206 22 187 7T143 -8T104 7T90 39Q90 47 108 124T146 274L164 347Q166 355 166 372Q166 401 149 401Q129 401 115 379T89 306Q84 288 80 285T55 282H44Q24 282 24 296\",119952:\"254 -8Q191 -8 146 9T80 54T49 111T39 169Q39 206 53 247T96 329T176 402T292 446Q317 451 336 451L344 452Q353 452 359 452Q457 452 516 408T576 279Q576 169 488 81T254 -8ZM349 400Q321 400 287 385T231 338Q206 301 188 228T170 126Q170 99 178 83Q198 44 260 44Q367 44 409 157Q419 185 432 238T445 317Q445 336 443 348Q435 372 416 384T384 398T349 400\",119953:\"24 296Q25 302 27 312T41 350T65 397T103 435T157 452Q235 452 273 404Q336 452 409 452Q434 452 458 448T507 432T550 402T581 354T593 285Q593 221 564 159T480 53Q401 -8 302 -8Q290 -8 279 -7T259 -3T242 3T228 9T218 14T212 18L209 20Q208 19 190 -55T171 -131T198 -132H213Q240 -132 240 -150Q237 -187 223 -192Q219 -194 212 -194Q208 -194 176 -193T95 -192Q48 -192 24 -193T-3 -194Q-11 -194 -16 -190T-22 -182T-23 -176Q-20 -142 -7 -134Q-3 -132 20 -132H44L164 354Q165 357 165 372Q165 401 148 401Q113 401 90 310Q85 289 82 286T60 282H55H44Q24 282 24 296ZM465 339Q465 373 447 387T403 401Q375 401 347 387T303 360T288 341Q288 338 257 216L227 93Q248 43 306 43Q332 43 361 59T410 115Q425 147 445 224Q465 309 465 339\",119954:\"38 159Q38 209 58 260T113 355T205 425T327 452Q338 452 348 451T366 449T382 444T394 440T405 434T414 429T422 423T429 418Q440 429 481 440T533 452Q540 452 545 447T550 437Q550 432 481 152Q410 -130 410 -131T437 -132H452Q479 -132 479 -150Q476 -187 462 -192Q458 -194 451 -194Q447 -194 414 -193T330 -192Q277 -192 249 -193T217 -194Q202 -194 197 -179Q197 -175 201 -159Q206 -139 211 -136T243 -132H283L319 15L307 10Q295 4 270 -2T220 -8Q134 -8 86 37T38 159ZM402 353Q402 358 395 368T369 390T324 401Q301 401 282 394T249 369T226 338T208 297T196 258T186 218Q166 141 166 107Q166 44 229 44Q265 44 294 61T337 95Q341 100 371 222T402 353\",119955:\"24 296Q24 298 28 313T42 352T67 398T104 436T154 452Q198 452 230 437T273 404L282 411Q334 452 393 452Q441 452 470 423T500 350Q500 301 473 279T418 256Q395 256 379 270T363 308Q363 366 424 386Q424 388 420 391T405 398T385 401Q363 401 343 390Q321 380 289 341L252 192Q214 42 212 39Q190 -8 142 -8Q117 -8 103 7T89 39Q89 52 127 202T165 369Q165 402 148 402Q139 402 128 393T110 369Q100 348 90 310Q85 289 82 286T60 282H55H44Q24 282 24 296\",119956:\"140 290Q140 311 148 336T176 388T235 433T326 451H336Q355 451 373 449T418 439T460 412T476 363Q476 333 456 311T406 289Q384 289 371 302T357 335Q357 351 364 364T379 384L386 391Q386 392 381 394T362 398T330 400Q299 400 278 393T247 373T235 352T232 335Q232 322 242 312Q258 299 315 290T403 260Q457 224 457 167Q457 152 453 134T435 90T397 43T330 7T229 -8Q133 -8 95 22T57 91Q57 127 81 152T139 177Q161 177 177 164T194 121Q189 80 153 56Q179 43 236 43Q275 43 303 52T343 75T361 101T366 124Q366 148 338 161T272 180T232 186Q187 198 164 227T140 290\",119957:\"82 382H55Q21 382 21 399Q21 422 33 439Q39 444 93 444H144L162 517Q163 522 167 541T174 567T181 589T192 611T206 627T226 639T253 643Q276 643 291 630T306 594Q306 586 288 514Q284 499 280 481T273 454L271 445Q271 444 317 444Q322 444 331 444T345 445Q377 445 377 428Q377 408 368 390Q360 382 341 382H306H255Q182 86 182 75Q182 43 201 43H204Q242 46 279 81Q298 101 309 119T323 145T330 157T350 162H356H363Q377 162 382 160T387 146Q385 136 372 114T337 64T275 14T192 -7Q131 -7 95 19T59 90V105L128 381Q128 382 82 382\",119958:\"189 389Q189 397 187 399T176 401Q150 399 126 372T89 304Q84 288 81 285T61 282H55H44Q24 282 24 296Q24 307 35 331T65 383T117 431T187 452Q237 452 272 427T308 362Q308 347 273 254T238 111Q238 43 291 43Q319 43 344 58T380 86T391 103T426 247T464 396Q472 414 491 429T535 444T574 429T588 397Q588 390 570 315T534 168L516 97Q514 89 514 72Q514 42 531 42Q544 42 556 56Q574 76 589 134Q594 155 598 158T619 162H624H635Q655 162 655 148Q654 142 652 132T638 94T614 47T575 9T520 -8Q509 -8 498 -7T478 -3T461 2T446 8T434 16T424 23T416 29T410 35T406 39L405 41L397 34Q347 -7 288 -7H281Q148 -7 122 78Q116 95 116 125V136Q116 174 152 273T189 389\",119959:\"380 367Q380 397 406 425T465 453Q493 453 516 430T540 357Q540 314 524 250T467 115T373 13Q338 -8 292 -8Q218 -8 167 23T116 129Q116 178 152 275T189 388Q189 396 187 398T176 401Q148 398 125 372T89 304Q84 288 81 285T61 282H55H44Q24 282 24 296Q24 306 34 330T64 382T116 431T189 452Q231 452 269 429T308 362Q308 346 273 255T238 114Q238 43 306 43Q336 43 363 65T407 118T437 182T456 239T462 268Q462 290 417 315Q380 335 380 367\",119960:\"636 367Q636 400 664 426T719 453Q748 453 772 431T796 357Q796 321 782 256T727 112T633 6Q604 -8 567 -8Q466 -8 415 43Q414 42 410 38T403 31T396 25T388 18T378 11T367 5T355 0T340 -4T324 -7T306 -8Q249 -8 209 5T151 40T125 84T117 129Q117 176 153 274T190 388Q190 408 158 396Q112 376 90 306Q85 288 81 285T61 282H55H44Q24 282 24 296Q24 305 34 328T63 380T114 430T187 452Q240 452 274 427T309 362Q309 346 275 255T240 117Q240 43 317 43Q325 43 333 45T347 50T359 57T369 66T377 75T383 83T388 90L390 95Q390 99 389 110T387 129Q387 139 391 167Q393 177 419 282T448 396Q456 414 475 429T519 444Q546 444 559 428T572 397Q572 384 542 265T511 114Q511 43 579 43Q608 43 633 66T673 122T699 188T714 244L718 267Q718 291 673 315Q636 335 636 367\",119961:\"74 282H63Q43 282 43 296Q43 298 45 307T56 332T76 365T110 401T159 433Q200 451 233 451H236Q273 451 282 450Q358 437 382 400L392 410Q434 452 483 452Q538 452 568 421T599 346Q599 303 573 280T517 256Q494 256 478 270T462 308Q462 343 488 367Q501 377 520 385Q520 386 516 389T502 396T480 400T462 398Q429 383 415 341Q354 116 354 80T405 44Q449 44 485 74T535 142Q539 156 542 159T562 162H568H579Q599 162 599 148Q599 135 586 111T550 60T485 12T397 -8Q313 -8 266 35L258 44Q215 -7 161 -7H156Q99 -7 71 25T43 95Q43 143 70 165T125 188Q148 188 164 174T180 136Q180 101 154 77Q141 67 122 59Q124 54 136 49T161 43Q183 43 200 61T226 103Q287 328 287 364T236 400Q200 400 164 377T107 302Q103 288 100 285T80 282H74\",119962:\"206 -150Q240 -150 268 -134T314 -95T344 -48T362 -7T367 14Q339 -7 280 -7Q230 -7 195 5T144 39T122 79T115 122Q115 175 152 274T189 388Q189 396 187 398T176 401Q148 398 125 372T89 304Q84 288 81 285T61 282H55H44Q24 282 24 296Q24 306 34 329T64 381T116 431T188 452Q239 452 273 427T308 361Q308 347 273 253T237 109Q237 43 291 43T388 98Q388 99 425 246T463 396Q471 414 490 429T534 444T573 430T587 399Q587 386 537 186T483 -25Q461 -84 410 -126T296 -188Q248 -202 204 -202Q127 -202 96 -175T64 -114Q64 -82 86 -57T144 -31Q169 -31 184 -45T199 -83Q199 -89 198 -94T196 -104T193 -113T189 -120T184 -128T179 -134T173 -141T168 -147Q189 -150 206 -150\",119963:\"66 -8H60Q34 -8 34 5Q34 9 42 22T70 59T115 110Q162 156 255 229T381 332L389 339H381Q348 332 298 329T212 325T172 321Q168 318 151 318H146Q116 318 116 332Q116 334 118 342Q128 374 154 402Q205 452 265 452Q304 452 352 422T426 392Q441 392 462 421T485 451T508 452H518Q539 452 539 438Q539 431 516 401T458 334Q412 289 312 210Q229 146 191 111L183 103H195Q203 103 213 104T240 107T268 110Q301 114 337 116T391 119T428 123T455 134T469 157Q473 166 495 166Q521 166 525 161Q532 156 528 141Q510 81 456 37T337 -7Q297 -7 251 22T177 52Q154 52 134 38T100 8L88 -7Q86 -8 66 -8\",119964:\"76 60Q83 29 135 29Q190 29 264 81Q280 93 280 95T277 99T265 106T248 118Q189 166 189 237Q189 307 245 388Q267 421 299 436Q336 455 386 455Q488 455 550 403L559 395L571 405Q727 544 944 679L957 687L966 701Q968 704 970 707T973 712T975 714T978 716T982 717T989 717H995Q1004 717 1007 717T1013 714T1016 708Q1016 705 829 403L636 92L630 83Q659 93 685 110T728 143L745 158Q758 158 752 138L748 127L740 119Q676 58 605 42L593 22Q590 17 587 12T583 6T579 2T573 0T564 0H530H484Q480 3 480 8Q480 15 489 26T498 39T497 40Q477 40 423 49T327 74L316 78L302 68Q200 -8 121 -8Q85 -8 60 7T35 53T60 113T123 144Q144 144 153 132T162 106Q162 89 143 75T99 61Q90 61 76 65V60ZM904 614L905 615Q901 615 840 573T700 469T581 369L587 359Q600 340 608 315T618 273T622 238T624 216L764 414Q904 612 904 614ZM525 363Q493 405 379 418H375Q342 418 309 378Q251 300 251 234Q251 174 306 137Q318 128 322 131Q323 132 329 139Q351 161 362 180Q430 273 509 348L525 363ZM579 205Q579 245 571 278T556 323T546 337L521 311Q461 248 422 196T362 121L353 111Q427 85 499 79Q517 77 520 77L525 76L549 111Q551 114 556 121T563 131T568 138T573 147T575 157T577 169T578 185T579 205\",119966:\"367 89Q367 84 353 77T334 70Q325 70 312 83T298 120Q298 169 364 233T496 298Q538 298 563 275T588 220V213Q588 132 501 53T306 -26Q251 -26 211 6T170 114Q171 148 181 184T205 248T232 298T255 334T265 349T246 350Q127 350 77 390T26 480Q26 533 71 581T178 656T295 683Q312 683 312 676Q312 674 311 672L302 660Q294 648 292 647L286 646Q280 646 276 646Q197 641 145 583T93 476Q93 387 265 387Q271 387 277 387T287 388T292 388T313 414T373 483T451 562Q618 712 732 727Q733 727 740 727T753 728Q790 727 804 708T819 665Q819 643 810 617T773 553T699 481T572 414T385 361Q381 361 367 341Q247 172 247 86Q247 11 325 11Q404 11 465 95Q518 165 528 208Q529 212 529 220Q529 237 518 249T480 261Q431 261 387 209T343 126Q343 111 355 101T367 89ZM777 658Q777 691 738 691Q704 691 658 662T570 590T491 504T432 432T410 400H411Q416 400 440 405T505 423T589 455T675 506T743 576Q777 627 777 658\",119967:\"251 272Q199 272 168 298T136 374Q136 432 175 496T267 603Q321 645 395 676T552 708Q610 708 655 694T724 659T763 618T784 584L790 569Q792 569 800 572T819 576T840 578Q855 578 855 571Q855 566 846 554T829 541Q824 541 817 539T804 533T799 529Q802 517 802 483Q802 376 742 256T585 53T392 -31Q353 -31 300 -7L289 -2L277 -6Q242 -17 192 -17Q141 -17 113 -13T77 -3T68 14Q68 20 73 28T93 45T131 58Q152 62 197 62Q241 62 272 48L282 44Q308 65 334 93Q380 145 467 266T622 454Q644 476 664 493T694 517T720 534T740 547Q699 671 540 671Q461 671 385 625T276 534Q265 520 251 499T219 438T202 368Q202 309 267 309Q325 309 396 383T491 545Q492 548 493 552Q494 558 496 559T511 564Q513 565 514 565Q523 568 527 568Q534 568 534 560Q534 554 529 537Q507 442 420 357T251 272ZM332 20Q332 19 341 15T368 6T400 2Q425 2 457 13T531 49T614 125T690 248Q750 376 750 476V490L738 479Q698 436 646 366T554 239T455 121T332 20ZM226 20Q226 25 186 25Q181 25 174 24H166Q161 24 158 23H152Q170 21 197 21Q205 21 213 21T223 20H226\",119970:\"206 318L249 320Q249 327 259 352T282 399Q312 447 366 510T465 610Q588 717 661 717Q695 717 716 701T738 653T704 577Q663 522 610 474T512 397T424 346T359 315T333 306Q331 304 327 290T323 267Q323 229 368 229Q402 229 439 254T505 312T571 382T638 435Q642 437 644 437Q658 437 658 409Q655 403 647 399T624 379T595 326Q583 296 564 267T523 179Q504 126 483 91T423 27Q335 -37 231 -37Q191 -37 157 -30T95 -2T67 53Q67 89 94 123T159 158Q180 158 190 146T200 119Q200 102 178 89T136 75Q128 75 120 78T110 81Q105 81 105 62Q105 38 129 24T180 5T238 1H244Q282 1 319 32Q349 55 371 85T436 190L465 239Q413 192 354 192Q300 192 274 217T245 276Q245 284 242 284Q220 280 187 280Q106 280 59 315T12 409Q12 457 43 508T118 597T210 659T295 683Q308 683 308 675Q308 670 299 658T282 646Q266 646 240 633Q182 606 118 511Q76 448 76 400Q76 368 105 343T206 318ZM677 660Q677 680 646 680Q616 680 565 629Q537 601 514 571Q493 544 455 492T389 398T360 355Q366 357 386 367Q463 406 534 473T641 591T677 660\",119973:\"829 148Q845 148 845 143T841 130T823 109T788 83T730 54T644 22Q637 20 634 19T627 16T622 13T618 10T612 3T604 -6Q510 -112 396 -203T201 -312Q190 -314 171 -314H166Q156 -314 147 -312T123 -304T101 -283T92 -245Q92 -203 117 -160T175 -93Q214 -65 280 -41T390 -6T509 22L532 27L547 47Q673 219 673 225L665 228Q657 231 648 235T627 249T606 270T591 300T584 341Q584 389 614 447T686 544Q735 588 799 615T959 667T1108 713Q1118 717 1119 717Q1125 717 1129 705T1133 689Q1133 686 1115 673Q1051 627 1001 579T918 481T867 403T828 328T805 277Q802 271 801 267T798 261T798 259Q849 270 900 317Q956 371 956 421Q956 438 953 457T950 480Q950 481 950 482L951 484Q953 487 966 492T985 498Q989 498 994 473Q1000 441 1000 423Q1000 362 934 302T790 223L775 220L767 207Q757 191 731 158T685 98T662 63Q662 61 690 70T755 99T811 142L816 148H829ZM646 332Q646 308 659 291T685 268L698 263L735 320Q828 465 865 511Q923 582 1003 643L1005 645Q1004 645 924 620Q775 572 716 492Q646 401 646 332ZM184 -278Q233 -278 311 -212T444 -80L498 -15H496Q468 -20 424 -30T293 -70T174 -133Q167 -140 158 -153T138 -190T127 -232Q127 -278 184 -278\",119974:\"521 506Q521 493 549 493Q608 493 660 527Q667 531 690 555L736 604Q750 619 777 646T825 694T848 716T852 717Q857 717 860 711T865 697L866 690Q866 687 812 615Q654 404 654 401Q655 401 656 401T659 402T665 403T680 404Q718 404 734 374Q735 370 743 376Q745 377 752 382Q806 416 852 466T933 563T982 623Q1028 666 1075 686T1155 706Q1165 706 1173 705T1186 703T1194 699T1199 695T1201 692T1202 688V687L1204 677Q1204 667 1191 670Q1189 670 1183 670T1174 671Q1137 671 1086 643T1001 564Q970 517 899 449T749 339L739 333L736 322Q730 295 703 253T652 165T628 77Q628 21 681 21Q692 21 698 23Q751 46 817 134L827 148H844Q861 148 864 146Q869 140 859 127Q818 75 761 29T665 -17Q649 -17 633 -12T598 4T569 40T558 100Q558 128 563 152T585 205T609 245T643 294Q647 300 645 300Q633 297 615 297Q607 297 600 298T589 300T584 301Q581 301 569 284T536 236T488 171T418 97T331 28Q233 -37 155 -37Q104 -37 68 -17T29 44Q29 82 55 120T123 158Q144 158 154 146T164 119Q164 102 143 89T100 75Q92 75 86 76T77 80T72 82Q68 82 68 59Q68 37 85 23T123 5T167 0Q203 0 238 21T311 85T382 174T468 288T563 410Q576 426 588 440T607 462T615 472L605 468Q568 456 533 456H527Q490 456 463 483Q451 496 451 508T468 545T486 581Q486 593 465 593Q448 593 425 568T384 518T364 493Q364 492 347 492Q326 492 326 499T351 537T414 599T477 630Q509 630 528 615T547 576Q547 556 534 533T521 506ZM675 357Q675 368 665 368Q656 368 644 363Q631 355 616 333H628Q640 334 672 341Q675 354 675 357\",119977:\"764 513Q764 482 772 423T780 330Q780 304 778 285T775 256T773 245Q778 252 826 328T932 484T1042 617Q1077 652 1114 678T1173 715T1200 726Q1208 726 1208 717Q1208 711 1206 695L1203 679L1199 675Q1197 675 1187 670T1161 657T1133 639Q1050 583 959 456Q906 381 858 307T779 179T725 83T691 18T679 -6Q677 -8 660 -8H656Q639 -8 639 -1Q639 4 646 17Q685 93 685 173V196Q685 233 681 288T676 380Q676 438 687 487L664 454Q505 230 454 170Q366 64 290 14T163 -36H152Q87 -36 58 -11T29 46Q29 82 55 120T123 158Q144 158 154 146T164 119Q164 102 143 89T100 75Q92 75 86 76T77 80T72 82Q67 82 67 59Q67 37 89 19T167 1Q187 1 197 3Q221 9 246 22T292 52T336 91T375 132T411 174T440 212T463 245T478 266Q779 695 784 698Q786 700 802 700H818Q824 694 824 692T809 668T779 604T764 513\",119978:\"259 -8Q230 -7 205 0T153 24T112 74T96 153Q96 254 174 379T374 599T607 707H621Q732 707 778 661Q805 634 805 598Q805 558 775 517T696 452L684 447V441Q684 378 626 273T484 97Q379 7 288 -7Q279 -8 259 -8ZM760 594Q760 670 608 670Q562 670 493 622T347 472Q174 240 174 131Q174 76 205 53T279 29Q294 29 306 32Q405 60 507 205Q592 325 616 401Q625 426 625 435Q625 436 621 436T603 440T569 449Q524 466 515 475Q513 477 513 481T525 496T541 508L548 504Q555 501 565 497T587 488T609 480T625 476Q627 476 626 481Q626 486 623 494T613 513T589 533T548 541Q495 541 413 454T286 281Q265 241 254 201T240 141T235 120Q234 118 217 111T197 104Q195 104 192 107T189 112Q190 125 193 147T220 231T280 348Q335 428 407 493T539 576Q548 578 563 578Q594 578 617 568T653 546T672 518T681 494T683 482Q683 481 684 481Q690 481 707 495T742 538T760 594\",119979:\"571 345Q571 384 612 418T687 452Q698 452 698 445Q698 436 679 417Q677 415 670 415Q650 412 633 389T615 350Q615 340 621 331T634 319T643 315L663 342Q751 462 817 536Q873 595 896 614L907 625Q843 680 701 680Q594 680 499 632T344 516Q317 486 296 449T267 384Q262 366 262 354Q262 332 276 316T326 299H327Q374 299 426 338Q481 376 537 456T597 598Q597 616 599 617Q601 619 614 624T630 630Q639 630 639 604V587V581Q639 519 597 456Q544 377 462 320T318 262Q278 262 250 282T222 350Q222 418 285 504Q360 597 480 656T702 716Q773 716 825 707T898 688T951 660Q962 670 985 685T1012 700Q1018 700 1022 690T1026 673Q1026 670 1019 664Q988 633 988 631Q988 630 999 618T1020 580T1031 522Q1031 471 1003 419T928 330Q854 275 765 264Q757 262 733 262H714L701 245Q615 121 473 42T218 -37Q159 -37 125 -15T90 46Q90 82 116 120T185 158Q203 158 213 147T224 121Q224 110 219 102Q198 75 159 75Q154 75 149 76T143 77T140 77Q137 72 137 53Q138 37 149 26T177 9T205 2T228 0Q313 0 419 74T602 257L620 281L614 285Q607 289 601 294T587 306T576 323T571 345ZM950 529Q950 576 943 576Q940 576 840 439T741 299H751Q804 300 845 334T924 438Q949 490 950 529\",119980:\"330 387Q330 331 402 331Q463 331 514 371T589 459T613 542Q613 559 608 570T598 588T593 596Q593 601 617 610Q632 617 636 616Q675 585 675 527Q675 464 629 409T516 324T387 294Q271 294 271 394V402Q271 438 292 478Q344 582 457 649T672 717Q765 717 825 675T885 548Q885 433 771 298T498 76Q493 73 491 72T486 69T484 67T485 66Q539 41 607 41Q655 41 703 71T780 139L787 148H804Q806 148 809 148Q826 149 826 140Q826 128 786 91T687 19T589 -16H576Q503 -16 414 20L396 27Q279 -17 192 -17Q130 -17 92 2T54 53Q54 92 107 123T222 155Q303 155 401 106L431 91L441 97Q476 118 527 157Q622 236 711 361T801 573Q801 591 795 607T775 641T732 668T660 679Q592 679 528 644T422 560T355 464T330 387ZM201 20Q232 20 267 27T322 40T342 49Q342 52 315 60T243 77T160 86Q150 88 144 88Q130 88 122 79T112 62L111 53Q111 20 201 20\",119982:\"346 463Q346 419 406 386T576 352H588L613 384L681 476Q767 594 842 651T973 708Q1016 708 1016 661Q1016 621 987 562T894 449Q802 375 696 338L682 334L665 312Q638 279 605 233T547 158T482 97Q418 46 332 5T158 -36Q87 -36 58 -11T29 48Q29 82 55 120T123 158Q144 158 154 146T164 119Q164 102 143 89T100 75Q92 75 86 76T77 80T72 82Q67 82 67 59Q67 28 98 14T166 0Q232 0 320 55T491 226Q530 279 551 305L558 314Q558 315 543 315Q417 321 353 365T289 460Q289 566 488 632Q578 662 660 665H679Q685 660 685 657T676 642Q670 633 666 629L664 628Q663 628 661 628T655 628Q606 628 546 615T426 568T350 486Q346 475 346 463ZM976 653Q976 671 959 671Q938 671 919 661T883 629T858 593T835 554Q832 548 830 545Q802 495 775 455T734 400T721 382L736 388Q876 449 946 568Q948 572 949 573Q976 622 976 653\",119983:\"354 350Q264 350 264 426Q264 442 265 448Q279 514 347 582T503 692T662 735Q719 735 774 714T882 672T983 651Q996 651 996 644Q996 639 977 612T954 581Q953 580 938 580Q909 582 884 587L869 591L870 587Q870 583 849 557T796 491T748 422Q729 391 692 313T620 188Q555 105 454 34T253 -37Q214 -37 181 -30T120 -2T92 53Q92 89 119 123T184 158Q205 158 215 146T225 119Q225 102 203 89T161 75Q153 75 145 78T135 81Q130 81 130 62Q130 39 153 24T204 5T267 0Q311 0 358 29T454 117T539 226T629 358T710 476Q726 496 744 516T778 551T807 577T828 595L836 601L785 623Q743 642 713 651T668 661T626 663Q564 663 509 644T418 596T356 535T317 475T305 431Q305 416 312 408Q323 388 369 388Q429 388 465 411T530 480Q557 526 557 565Q557 573 556 579T555 587T555 590Q555 591 568 600T584 611Q588 612 600 603Q622 581 622 549Q622 516 600 475T536 405Q454 350 354 350\",119984:\"55 377Q55 443 122 523T290 660T478 717Q533 717 575 689T618 594Q618 565 611 538T585 477T552 422T506 355T458 288L357 146Q307 68 307 31Q307 20 318 20Q326 20 331 21Q367 27 411 57T490 128L767 500L861 617H908H939Q953 617 956 616T960 609Q960 605 928 566T816 423T648 198Q587 113 571 86Q540 34 540 21Q540 20 545 20Q580 25 623 55T696 124Q702 132 704 133T722 134H739Q744 130 744 127T735 113Q713 80 655 38T548 -14Q527 -17 524 -17Q475 -17 473 47V63L462 55Q364 -17 302 -17Q235 -17 235 69Q235 88 239 105T248 135T268 171T292 205T328 251T369 304Q376 313 395 338T423 374T450 408T476 445T499 479T519 514T534 546T545 579T548 608Q548 647 522 663T460 680Q355 680 243 591T99 406Q97 399 97 383V377Q97 339 153 339Q169 339 175 340Q215 350 241 373T298 444Q333 496 349 535T367 588T374 603Q402 616 408 616Q416 616 416 608Q416 563 393 492T320 378Q233 302 140 302H132Q75 302 57 353Q55 361 55 377\",119985:\"540 717Q542 717 545 717Q562 717 562 710Q562 708 557 702T541 678T517 632T485 544T448 407Q447 405 443 388T438 366T433 345T427 321T420 299T411 274T400 250T387 223T372 197Q363 181 364 181L388 203Q476 284 527 354T620 490T718 612Q754 647 790 673T835 700Q839 700 842 691T848 672L850 662Q850 657 842 653Q803 630 768 600T699 527T653 467T610 405Q554 322 518 282T368 138Q307 84 273 51T231 9T218 -5L207 -17H175Q169 -11 169 -9Q169 -4 183 10Q227 56 258 120T302 234T330 350T356 445Q357 450 360 458L362 464Q317 434 276 434Q221 437 221 479Q221 498 240 521T259 552Q259 565 235 565Q209 565 174 546T105 482Q103 480 102 478T99 474T97 472T95 470T93 468T90 467T86 467T81 467H75Q56 467 56 475Q56 482 82 511T156 570T253 601Q289 601 311 590T334 557Q334 543 312 517T289 478Q289 471 297 471Q327 471 378 514Q384 519 390 531T412 571T451 632Q482 675 524 717H540\",119986:\"232 504Q232 492 263 492Q304 492 356 515L367 520L379 537Q443 632 515 705L527 717H543H552Q564 717 564 709Q564 705 562 703T554 694T540 677T518 643T488 589T448 504T398 385Q368 309 353 281L349 270L523 472L669 634Q726 695 737 706T757 717H765Q786 717 786 710Q786 704 776 691T738 627T675 497Q630 394 609 354T541 244Q456 120 449 111L447 107L448 108Q630 240 700 327Q734 368 788 463Q821 520 841 550T898 619T980 683Q1010 700 1018 700Q1020 700 1023 697T1026 692Q1026 688 1024 671T1020 652Q1018 650 1007 645T988 635Q940 609 902 565T842 477T781 374T699 272Q653 226 535 133Q423 47 373 -2L358 -17H342Q320 -17 320 -11Q320 -7 328 5T354 46T390 112Q416 161 439 217T488 326T564 453L589 490Q587 490 523 414T352 217T166 14Q138 -16 137 -16Q136 -17 120 -17Q106 -17 103 -16T99 -9Q99 -5 100 -3T106 3T116 14T132 35T154 72T184 129T222 212T270 327Q310 426 337 471L326 467Q278 455 243 455Q209 455 188 462T161 478T155 496Q155 508 176 533T198 576Q198 579 198 581T192 588T178 593Q151 593 100 519Q89 504 86 502T75 499H68Q46 499 46 506Q46 510 63 534T112 587T170 627Q178 629 195 629Q235 629 252 613T270 577Q270 556 251 532T232 504\",119987:\"351 351Q308 351 290 373T272 426Q272 487 329 566T478 688Q538 717 584 717Q635 717 681 696T745 620Q752 598 752 564T745 498L741 485Q742 486 769 516T825 573T889 634T962 689T1027 716Q1035 717 1060 717Q1083 716 1096 714T1120 705T1131 686Q1131 668 1109 647T1055 626Q1035 626 1026 638T1016 663Q1016 667 1020 679H1015Q971 671 886 589T728 413L688 360Q688 359 725 359H750Q762 359 766 357T770 348Q769 345 761 335T750 322Q748 321 704 321H660Q651 311 632 282T589 199T565 107Q565 25 653 20Q684 20 720 44T779 95T826 152T850 183L856 184Q861 184 865 184Q888 184 888 173Q883 163 845 117Q770 37 723 10T638 -17Q584 -14 554 17T523 101Q523 147 534 167L532 166Q530 164 526 160T518 153Q378 15 256 -15Q250 -16 226 -16Q161 -16 132 7T103 59Q103 93 129 125T194 158Q232 158 232 121Q233 118 233 113T221 96T188 77Q182 75 168 75T150 78V70Q150 43 178 32T241 20Q340 20 527 286L552 321H524Q489 321 489 330Q489 333 497 344T509 358Q511 359 545 359H579Q580 362 597 389T631 445T661 514T675 586Q675 637 645 658T572 680Q506 680 444 632T348 527T314 434Q314 388 361 388H364H366Q380 388 389 390T416 408T457 454Q487 497 505 536T526 594L529 613Q531 615 545 622T560 630Q568 630 573 613T578 577Q578 518 532 455Q504 413 453 382T351 351\",119988:\"155 280Q116 280 87 300T57 368Q57 409 87 466T192 589Q269 653 345 684T472 716Q572 716 613 675Q644 644 644 599Q644 585 643 574T637 550T629 529T616 505T600 481T578 450T554 416Q494 330 493 328L480 306Q466 278 466 256Q466 227 492 227H496Q514 227 534 234Q541 237 544 241T571 279L762 559Q777 579 792 595Q818 620 856 646T919 686T946 700Q951 700 955 692T959 677Q959 673 947 665T911 639T866 595Q816 538 749 408T640 225Q574 138 464 61T248 -17Q190 -17 144 1T98 62Q98 81 109 102T131 135Q156 156 183 158Q226 158 226 121Q226 111 224 107Q215 93 196 84T162 74Q154 74 147 77H144V70Q146 41 185 31T263 20Q363 20 493 175L507 192H504Q500 191 498 191Q484 189 476 189Q430 189 405 219T379 287Q379 294 379 299T382 311T385 322T391 335T398 347T408 363T420 379T434 399T450 422Q455 429 469 449T488 475T504 499T520 523T533 543T544 565T552 583T557 603T559 620Q559 680 467 680Q402 680 333 646T213 563T131 462T98 373Q98 343 119 330T169 317Q187 317 212 333Q242 354 291 423T352 555Q354 562 355 588Q355 612 356 612Q357 614 371 622T387 630Q391 630 397 623T409 597T415 556Q415 507 380 448T294 344Q216 280 155 280\",119989:\"221 428Q221 487 280 555T425 670T583 717H587Q641 717 665 695T689 646Q689 625 674 600T658 564Q658 550 671 541T695 530T710 528L718 539Q779 613 821 646Q894 707 964 707H970Q1010 707 1025 675Q1032 661 1032 645Q1032 626 1022 607Q1008 579 980 560T897 522Q867 512 836 505T788 496L771 493Q768 493 760 477T736 429T702 370Q700 367 698 363Q696 360 696 359H805Q809 355 809 350Q809 340 791 322Q789 321 728 321H668Q562 179 433 88L419 78L434 73Q505 54 554 54Q609 54 654 82T720 140H752Q758 134 758 132Q758 128 747 113Q711 67 657 32T552 -14Q540 -16 517 -16T480 -15T439 -3T375 27L354 38L338 30Q257 -8 191 -8H184Q154 -8 133 -5T103 1T88 10T83 19T83 29Q83 35 86 44T100 65T127 88T173 105T241 112Q286 112 342 99L360 95L372 105Q434 157 523 270L560 320Q560 321 533 321L507 322Q502 325 502 330Q502 339 521 358Q523 359 556 359H588L669 474L682 491Q676 492 665 494T647 498T632 503T614 510T596 521Q556 547 556 570Q556 585 579 618T603 663Q603 679 568 679Q510 679 452 650T354 581T288 500T262 431Q262 407 280 397T321 387Q331 387 341 390T360 398T376 409T390 423T400 435T409 447L414 454Q457 514 460 562Q460 575 461 576Q461 577 475 586T492 595Q496 595 503 588T514 572Q520 559 520 539Q520 473 452 412T308 351Q269 351 245 370T221 428ZM989 642Q989 667 953 671Q905 671 871 644Q853 632 832 604T799 554T787 531H788Q801 531 842 539T916 561Q989 592 989 642ZM198 29Q230 29 257 36T295 52L306 59Q306 63 259 73Q251 74 209 74Q177 74 158 66T134 48L130 40Q130 29 198 29\",120068:\"22 505Q22 563 94 624T271 685H280Q416 685 443 560Q447 535 447 504Q444 414 405 330L399 319L229 155Q233 154 241 153T253 150T265 145T281 135T301 119T328 93L357 64L402 92Q438 116 473 137L500 154V339Q500 528 495 593V601L559 649Q621 696 624 696L638 686L629 677Q599 650 593 638Q582 614 581 504Q580 490 580 443Q580 314 584 238Q584 235 584 224T584 210T585 199T586 187T588 176T591 164T595 152T601 137T609 121Q630 77 640 77Q661 77 703 101Q704 95 706 90L707 86V84L636 29Q618 15 601 2T574 -19T564 -25L500 121Q499 121 399 48L299 -26Q298 -26 291 -15T272 11T245 42T209 69T165 80Q120 80 58 43L48 37L40 42L32 48L122 117Q196 173 241 211Q319 280 343 327T368 447Q368 535 317 582Q264 633 199 633Q155 633 122 605T86 542Q86 518 133 467T181 387Q181 348 140 309Q113 281 73 260L64 255L50 265L59 273Q112 307 112 345Q112 363 90 387T45 441T22 505\",120069:\"48 506Q48 568 120 629T268 691Q362 691 425 594L431 585L441 594Q478 628 528 657T629 686Q665 686 687 670Q703 658 718 584T753 506Q756 505 763 505Q778 505 804 512L815 516L820 496Q820 494 808 490T774 476T732 454Q720 445 708 437L675 415L640 394L625 383Q626 382 635 382Q652 382 670 379T712 364T754 336T784 289T797 220Q797 172 776 122Q769 106 766 102T745 84Q654 11 619 -8T538 -27Q483 -27 387 10T249 47Q218 47 186 34T133 8T112 -5T104 7T97 21L196 82Q259 120 284 140Q333 181 351 214Q368 251 368 353Q368 588 228 620Q222 621 205 621Q160 621 139 596Q117 569 117 548Q117 526 162 470T208 387Q208 352 179 320T104 264Q88 256 86 256Q83 256 70 266L82 274Q134 309 134 343Q134 352 130 359Q118 377 100 401T72 439T56 470T48 506ZM453 528Q457 496 457 419L458 357L488 367Q554 390 622 425Q673 449 673 453L671 454Q669 456 665 460T657 473T648 498T639 541Q629 597 616 613Q599 633 567 633Q534 633 493 599Q471 577 457 540L453 528ZM713 176Q713 252 661 295T528 339Q512 339 494 336T466 330T455 325Q454 325 452 311T444 270T425 217L420 207L304 118L319 116Q381 111 475 74T602 37Q655 37 684 79T713 176\",120071:\"346 611Q300 611 261 604T194 584T144 555T107 519T82 481T65 443T55 410T50 383T48 367L37 372L27 378V393Q33 524 115 603Q160 648 230 666T365 685Q423 685 434 684Q745 653 745 405Q745 281 694 151L687 133L657 103Q524 -27 470 -27Q456 -27 331 18T157 64Q122 64 84 28Q67 9 57 -6L50 -16L43 -8L35 0Q35 3 46 22T83 74T141 133H154Q208 136 253 161T299 230Q299 259 277 290T232 348T209 392Q209 434 254 479T358 556L368 561L382 550Q382 549 381 548T377 545T371 541Q353 527 326 496T298 444Q298 430 343 365T389 277Q389 240 353 202T267 136L252 127Q304 118 400 83T513 47Q548 47 582 79T635 145Q671 208 671 323Q671 390 651 441T599 524T523 576T436 603T346 611\",120072:\"301 564Q240 564 203 507T165 361Q165 280 190 218T260 119T358 64T474 46Q491 46 499 47L511 48L628 106V80L499 -5Q498 -6 497 -7T494 -10T490 -12T485 -15T478 -17T468 -19T456 -21T439 -22T418 -23T392 -24Q252 -20 169 67T86 315Q86 409 124 491Q128 500 139 508Q211 560 272 591L293 601L325 585L338 594Q374 617 422 639T502 674L532 685Q533 685 540 663T557 614T574 581Q580 575 591 575Q600 575 616 580T634 585V564L623 559Q572 535 532 529L522 527Q491 547 442 627Q442 628 440 627T435 624T428 620Q410 610 405 597T399 559V553Q399 534 409 487Q419 431 427 369L476 400Q526 431 526 432Q531 426 537 420Q565 382 602 359Q611 353 610 352Q609 351 575 332T537 312Q536 312 505 335T463 358Q451 358 439 352T425 337Q394 243 263 223L251 221L243 229L235 236L245 239Q274 247 303 266Q320 277 325 290T330 336Q330 394 315 451T300 531Q300 549 303 561Q303 564 301 564\",120073:\"198 617Q177 617 159 609T128 587T106 557T91 524T82 494T76 472L75 463Q74 463 67 468T59 474Q59 488 63 510T80 564T114 622T170 667T253 686Q272 686 295 680Q330 672 384 645T468 598Q498 580 524 580Q549 580 595 626L612 643V616L599 599Q522 500 482 500Q466 500 435 514L420 521Q388 516 349 486T309 415Q309 396 323 366T352 315T367 294Q367 293 375 301T398 322T429 352L490 410Q537 355 542 332Q542 330 531 315T510 286L499 273Q479 313 449 313Q437 313 419 303T390 282L378 271L394 250Q444 183 470 129Q484 96 484 71Q484 -19 402 -86T223 -153H220Q175 -153 137 -120Q103 -89 103 -8Q103 12 106 40T109 96Q109 132 103 146T72 161Q46 161 16 143L14 154L11 165Q88 219 143 219Q163 219 177 197T192 127Q192 102 186 65T179 4Q179 -60 210 -88T272 -117Q319 -117 362 -75T405 33Q405 72 363 139T278 271T235 368Q235 385 243 404T264 439T292 472T324 500T353 522T374 538L382 543Q382 544 351 562T274 598T198 617\",120074:\"373 560Q373 543 378 509T388 448T394 421Q396 421 416 433T474 474T548 537L538 543Q481 570 452 628L487 659Q521 690 522 690L526 684Q529 677 535 667T551 646T575 625T607 608Q617 606 621 606Q644 606 660 622L664 600L497 455Q495 453 527 453H546Q628 453 665 407L666 406Q710 357 710 297Q710 196 631 109L621 98L577 69Q471 -7 452 -15Q413 -26 370 -26Q239 -26 155 59Q66 148 66 319Q66 442 113 505L191 552Q269 600 270 600H271Q273 600 280 596T293 589T299 586Q300 586 357 623Q413 659 415 659L426 649Q373 604 373 560ZM219 228Q305 262 305 329V343Q305 384 294 434T282 519Q282 562 287 567Q287 569 286 569Q222 556 191 520Q144 464 144 362Q144 213 228 128T420 42Q514 42 568 103T622 255V260Q622 320 578 357Q526 400 453 400Q434 400 410 396L399 394L400 378V372Q400 330 388 301T348 254T305 232T252 217Q245 215 242 214L234 213L226 220L219 228\",120077:\"194 601Q175 601 155 590T121 564T95 533T76 506L69 495Q55 503 55 507Q55 509 60 521Q87 586 132 636T222 686Q251 686 289 660T363 607T422 580Q442 580 466 588T506 604L522 612V591L487 574Q371 517 359 517H357Q332 522 280 561T194 601ZM383 39Q383 96 356 203T329 361Q329 364 329 370T330 378L331 388L339 399Q362 429 394 462T446 513T469 531Q470 531 477 527T484 521L474 509Q411 434 411 379Q411 341 434 223T458 82Q458 1 390 -69T239 -139Q191 -139 162 -123T123 -83T108 -30T101 23T88 64T52 80Q27 80 -4 64L-10 80Q-5 85 13 98T63 128T118 144Q149 144 163 129T179 93T182 38T187 -19Q199 -96 278 -96Q294 -96 309 -91T343 -73T372 -31T383 39\",120078:\"154 37Q219 41 219 142Q219 203 190 302T160 434Q160 445 172 472T209 534T269 602T354 657T460 680H472Q576 680 618 617V599Q618 578 615 555T608 517T602 501Q596 495 587 495Q586 495 586 499Q586 500 586 505T585 513Q567 628 415 628Q384 628 356 621T302 596T260 546T244 466Q244 416 258 377L261 367L276 382Q294 401 317 422T386 471T468 500Q500 500 518 477T544 422T554 386Q555 382 560 376T576 364T601 357Q612 357 623 361Q623 360 621 351T617 340L541 305L465 272Q469 271 476 270T488 266T502 260L512 255L519 242Q533 211 546 157T564 93Q584 53 617 53Q649 53 682 74V54L675 46Q646 17 612 -5T554 -27Q546 -27 538 -23T517 -9T494 28T478 91Q465 172 448 200T378 228Q337 228 289 207L288 196Q288 160 284 138Q283 125 262 98Q185 1 112 -24L102 -27L91 -25Q47 -13 17 31Q17 33 49 69L80 106Q111 37 154 37ZM421 434Q411 436 405 436Q370 436 336 407T275 337L267 325L271 313Q288 257 288 234Q289 234 395 276T502 319Q501 320 499 323T493 330T485 345T475 371Q473 378 468 388T449 416T421 434\",120079:\"251 231Q251 254 206 341T160 468Q160 529 238 605Q313 677 425 685L432 686Q440 686 445 686Q520 686 545 657T571 576Q571 548 568 517T564 480Q564 466 572 460T608 452H623V431L619 430Q618 430 611 428T591 423T566 417L516 404Q497 415 491 419T480 433T475 461Q475 470 477 498T480 546Q480 561 480 569T474 592T459 615T429 631T379 638Q322 638 283 606T239 526Q237 480 280 394Q319 310 320 268V250Q308 235 244 169L203 128H210Q215 128 256 112T357 80T466 64Q526 64 564 88T625 186L629 196Q643 187 644 186Q618 70 604 41Q577 -15 513 -24Q496 -26 476 -26Q418 -26 344 -3T211 45T133 69Q115 69 97 50T65 7T49 -20L45 -16Q41 -11 37 -6T33 0Q33 8 66 69T111 134Q251 156 251 231\",120080:\"687 578Q690 586 719 612T794 665T877 692Q909 692 926 670T953 614T973 570Q983 561 1000 560Q1023 560 1048 569V553L1034 546Q1003 528 972 504T933 466Q905 403 905 264Q905 205 909 172T920 126T940 91Q951 74 959 74T997 87L1027 100V79L956 27Q940 15 922 2T894 -19L885 -26Q883 -26 854 27L825 80V192Q826 314 830 341Q831 345 833 356Q840 398 844 404Q871 444 920 489L917 491Q914 493 911 495T903 501T898 508Q893 516 877 562T852 616Q840 628 818 628Q751 628 702 541L697 532L700 515Q708 467 708 419Q706 348 690 276T662 169T643 126L634 116Q626 105 611 87T581 51L522 -22L514 -15Q470 21 452 21Q431 21 394 -16L384 5L386 9L426 60Q449 87 460 95T486 104Q487 104 491 104T497 103Q514 99 541 81L559 69Q595 96 606 169T618 350Q618 486 598 543T517 601Q484 601 458 570T432 523Q432 516 434 492T436 443Q436 250 369 133L363 122L280 50Q207 -16 192 -27L182 -18Q136 26 106 26Q83 26 62 9T37 -16L27 0L33 10Q41 22 54 39T94 81T143 106Q178 106 225 62L235 53Q283 82 307 117Q352 190 352 359Q352 408 345 451T320 534T267 597T183 621Q159 621 147 617T120 598Q97 574 96 556Q96 528 143 469T191 377T161 311T102 262T70 245Q69 245 59 252T49 260L56 264Q63 268 73 275T94 291T111 312T118 338Q118 355 95 384T50 446T27 506Q31 567 101 626T255 686Q297 686 330 671T382 632T409 595T421 572V571L430 580Q454 610 496 634T588 659H590Q655 659 683 585L687 578\",120081:\"112 334Q112 356 70 410T27 497Q27 553 94 619T229 685Q230 685 236 685T246 686Q303 686 349 654Q373 636 392 607T419 558L426 538L454 576Q474 604 486 618T520 651T569 678T633 686Q668 684 687 673T713 651T730 609Q730 608 732 600T736 588T741 578T747 568T754 561T765 555T779 553Q789 553 817 562Q819 557 819 555V547L790 526Q743 492 730 479T712 447Q697 369 697 281Q697 166 726 108Q741 76 755 68Q759 66 767 66Q789 66 825 93V82Q825 71 822 70Q821 69 763 27T701 -18L692 -25L668 15Q662 25 650 45T635 70L627 85V107Q627 122 626 162T624 285Q624 381 632 398Q638 409 651 425T675 454T696 477T707 489H696Q683 490 679 492T669 507T653 551Q642 588 627 608T584 628Q572 628 560 625T538 616T519 602T502 586T486 568T473 549T463 532T454 517T448 504L445 497Q437 480 437 474Q437 472 439 461T444 421T446 348Q446 205 405 124Q396 105 392 100T368 78Q312 32 278 9T235 -18T214 -22Q191 -22 170 -10T139 12T129 25T160 66T192 105Q193 102 194 98T200 83T213 64T233 49T261 42Q303 42 339 90Q373 134 373 268Q373 397 339 493T235 618Q215 628 191 628Q155 628 126 604T97 548Q97 524 120 493T168 431T192 381Q192 346 164 318T86 260L70 250L54 266L63 272Q112 300 112 334\",120082:\"428 596Q412 596 386 595T350 593Q289 593 270 625Q267 632 267 640Q267 656 280 672T312 705T336 729H343Q351 729 351 728Q342 710 342 703Q342 683 382 676T493 662T604 643Q648 627 677 599T720 535T739 466T744 392Q744 317 732 260T696 166T659 116T621 83Q617 80 615 78Q485 -27 377 -27Q320 -25 272 -9T187 21T122 36H116Q65 36 29 -13L27 -15L12 0Q12 1 32 26T76 78T109 109Q145 123 166 150T187 207Q187 244 134 318T80 412Q80 454 112 498T176 566T213 590Q216 590 224 585L234 580L225 573Q216 566 207 557T188 536T172 511T165 484Q165 448 213 368T261 259Q261 241 252 219T228 179T200 146T176 122L167 112Q170 111 174 111Q188 110 233 91T339 55T453 37Q508 37 556 68T626 152Q655 219 655 328Q655 543 532 582Q484 596 428 596\",120083:\"112 339Q112 354 91 380T49 438T28 497Q28 565 95 628T242 692Q261 692 277 689T307 682T331 670T351 655T367 637T379 619T388 600T395 582T401 565T405 550Q409 554 422 570T453 603T500 641Q573 692 637 692Q656 692 670 686T692 672T705 647T713 618T718 584Q720 568 721 562T728 546T742 534T768 530Q776 531 782 532T791 535T796 536Q799 536 804 521Q801 519 789 513T764 499T738 480Q697 447 680 414Q677 407 677 396Q677 370 713 312T750 210Q750 125 686 57T560 -11Q540 -11 475 13L410 37V31Q410 -9 412 -50T417 -118T420 -150Q419 -150 373 -184T326 -218L305 -208Q305 -207 307 -196T314 -165T322 -116T328 -46T331 43V63L318 66Q270 80 250 80Q233 80 213 70Q183 57 138 -3L128 -16L118 5L125 20Q193 154 282 154Q309 154 331 146V287Q331 444 327 469Q321 522 301 560Q284 590 251 611T184 633Q146 633 119 607T92 550Q92 539 94 534Q100 516 143 460T186 386Q186 366 170 336T119 281Q102 264 70 250L49 260L56 266Q64 271 72 278T90 296T106 317T112 339ZM602 345Q602 357 608 371T622 397T642 421T661 441T678 456L686 462Q663 473 652 486T639 512T634 553Q631 594 624 608T593 631Q587 632 567 632Q539 632 497 600T416 497L410 484V122L467 103Q481 99 502 92T533 82T557 75T578 69T594 66T610 64Q647 64 672 87T697 144Q697 180 650 250T602 345\",120084:\"428 596Q412 596 386 595T350 593Q313 593 291 605T268 638Q268 644 269 648T274 658T284 669T301 689T326 718L336 729H343Q351 729 351 728Q342 710 342 703Q342 683 382 676T493 662T604 643Q744 592 744 398Q744 299 708 213T646 104L603 68L614 55Q670 -5 710 -5Q726 -5 744 1T772 14L781 20Q782 20 782 7V-6L771 -13Q673 -69 665 -69L647 -63Q552 -30 514 8H512Q509 8 500 3T471 -9T428 -23Q405 -27 377 -27Q305 -24 228 6T124 36Q69 36 27 -16Q23 -13 19 -8L11 0L27 20Q93 102 109 109Q145 123 166 150T187 207Q187 244 134 318T80 412Q80 454 112 498T176 566T213 590Q216 590 224 585L234 580L225 573Q216 566 207 557T188 536T172 511T165 484Q165 448 213 368T261 259Q261 241 252 219T228 179T200 146T176 122L167 112Q170 111 174 111Q188 110 233 91T339 55T453 37Q508 37 556 68T626 152Q655 219 655 328Q655 543 532 582Q484 596 428 596\",120086:\"750 276Q750 141 645 57T378 -27Q224 -27 146 67Q66 163 66 307Q66 361 80 412T127 515T217 609T356 676L388 684L420 692L442 681Q545 625 586 608T654 591Q688 591 710 609T737 646L742 665Q742 665 756 654L752 642Q736 594 706 566T621 515L607 510Q580 513 528 542T421 599T335 627Q272 627 214 569Q139 500 139 373Q139 308 159 247T217 136T316 56T455 26Q520 26 566 43T634 90T666 148T676 207Q676 264 649 297T580 338Q574 339 552 339Q516 339 442 325T327 310H324Q303 310 290 312T259 328T232 369Q230 375 230 390Q230 426 259 461Q286 488 338 507Q351 498 351 495L346 492Q342 490 339 488T330 482T320 473T312 462T305 447T303 428Q303 368 366 368Q393 368 487 388T613 409Q656 409 696 385T748 306Q750 294 750 276\",120087:\"289 686Q338 686 439 668T565 649Q606 649 641 672Q656 683 664 690T674 700L675 701Q676 698 676 692V681L641 636Q608 591 602 588Q577 575 528 575Q490 575 438 583L426 585L416 578Q335 520 335 465Q335 437 393 366T452 259Q452 226 406 171Q387 146 351 115L341 106L358 97Q438 58 475 58Q525 58 598 124L608 133Q617 119 617 118Q617 114 606 103Q513 0 448 -27L438 -25Q401 -19 337 14T234 48Q186 48 122 -3L112 -11L106 -3L101 5L110 15Q160 63 209 105L224 117H310Q384 163 384 210Q384 238 329 303T263 398Q262 400 262 404Q262 427 290 476T368 580Q383 596 381 596Q315 622 228 622Q159 622 118 593T76 516Q76 482 96 461T139 431L107 399L75 367Q34 403 34 472Q34 525 64 572T148 652Q207 686 289 686\",120088:\"160 247Q160 291 110 382T59 505Q59 542 106 597T207 690L218 697L229 682Q229 680 216 669T187 644T158 604T144 552Q144 526 165 482T207 387T228 291Q228 277 228 267T224 247T219 232T210 217T199 202T184 184T166 163L118 107Q124 105 132 105T160 98T220 77Q298 47 317 47Q354 47 409 105Q444 142 451 161T458 244V277Q458 339 455 457T447 596L575 686L591 676L583 668Q550 632 541 587T532 449V372V298Q532 198 550 147Q572 79 605 79Q617 79 631 84T656 95L665 100V79L595 27Q578 15 560 2T532 -19L523 -26Q522 -26 490 42L458 111L397 50Q389 42 374 27T355 8T340 -5T325 -16T311 -22T294 -26T274 -27Q232 -25 152 6T35 37Q28 36 19 30T4 18T-8 4T-16 -5Q-25 10 -25 11T-20 18Q-5 34 15 57L54 101Q70 103 86 116Q94 121 113 140T137 166Q160 201 160 247\",120089:\"54 266Q118 307 118 339Q118 360 74 413T27 493Q26 530 59 578T133 651Q187 686 256 686Q299 686 332 673T382 640T409 600T424 567T429 553Q431 553 463 586T542 653T624 686Q663 686 715 652T798 617Q812 617 825 622V606L815 599Q785 576 762 546Q724 495 724 432Q724 397 737 317T750 217Q750 148 711 96Q697 75 639 34T578 -10Q563 -21 555 -23T522 -26Q458 -26 363 29Q253 89 211 89Q192 89 173 83T139 67T114 49T96 34L90 27L80 43L95 59Q121 87 148 110T191 143T213 154Q261 154 300 195Q328 222 340 267T352 406Q352 562 255 611Q222 627 187 627H182Q143 627 115 598Q96 579 96 559Q96 528 144 470T192 381Q192 348 156 314T80 256L70 250L54 266ZM727 548Q701 550 650 583T567 617Q560 617 554 615Q532 610 501 580T445 501L437 485V465Q432 326 378 223L294 150Q321 143 421 87T560 31Q608 31 634 64Q660 102 660 198Q660 226 655 292T650 387Q650 418 658 452L660 462L735 548H727ZM264 150Q265 151 263 151H261Q261 150 264 150ZM280 150H276V149Q280 149 280 150\",120090:\"32 501Q35 564 103 625T264 686Q326 686 365 652Q402 618 420 564L441 585Q486 630 539 670L559 686L572 672Q637 606 665 559L682 576Q787 686 845 686Q877 686 929 656T992 623Q999 621 1016 621Q1041 621 1054 628L1051 617L1047 606Q1042 602 1037 597Q983 557 969 522T954 434Q954 394 961 336T968 221Q968 201 966 184T963 155T956 131T948 113T936 96T923 82T906 66T887 50L816 -2Q815 -3 810 -6T801 -11T791 -16T777 -20T759 -23T735 -25Q691 -25 619 4T505 37H496L463 21Q420 0 389 -20L378 -27H362Q316 -27 275 -9T202 28T150 46H146Q114 46 59 -5L48 -16L41 -6Q40 -4 38 -2T34 2L33 4Q33 8 77 54Q111 87 142 112L154 122H166Q239 127 288 182Q346 244 346 406Q346 489 326 537T259 610Q227 628 195 628Q155 628 128 606T101 549Q101 517 146 465T192 382Q192 348 156 310T85 254L75 250L64 258L55 266Q56 267 74 276T105 301T118 339Q118 362 75 413T32 501ZM952 547Q927 555 877 586T796 617Q744 617 682 525L676 516L677 498Q678 486 678 425Q678 301 652 206Q649 195 613 151T577 102Q577 100 582 100Q618 100 720 51Q761 32 790 32H794Q843 32 869 83Q884 110 884 189Q884 233 879 294T873 400Q874 433 879 451T889 478T915 507T952 547ZM241 105Q249 98 263 88T317 60T393 42Q478 42 547 109Q607 171 607 358Q607 371 607 380T604 417T595 467T577 517T546 566T500 601L479 580Q449 550 433 526L426 516V503Q426 311 357 200L352 191L296 149Q241 107 241 105\",120091:\"96 511L78 527L149 603Q207 666 227 686L237 685Q278 680 306 667T351 631T376 588T395 533L400 516L406 527Q439 600 523 653Q538 664 587 688Q589 688 596 672T613 635T629 606Q643 588 665 588Q677 588 693 596L709 603V585L607 526Q583 536 554 564T512 614Q461 571 435 507T405 381V367H581L563 347Q561 344 558 341T553 335T549 330T546 326L545 325H541Q537 325 488 329T411 334H405V325Q405 198 454 123Q497 54 568 54Q594 54 619 64T660 84L676 95V74L565 -16L553 -20Q528 -27 512 -27Q492 -27 475 -21T444 -5T418 19T398 47T382 77T371 105T363 128T358 145L357 151Q354 151 339 136T294 91T232 37Q152 -22 113 -22Q90 -22 69 -9T38 17T28 32Q28 33 58 68L86 101Q94 81 115 64T165 47Q206 47 249 84Q302 128 325 222Q334 263 336 312V334H312Q198 334 163 324H161Q162 326 182 348L198 367H336V398Q333 508 308 550Q295 570 274 585T227 601Q204 601 181 589T145 565T115 533T96 511\",120092:\"123 345Q123 358 75 415T27 496Q27 533 63 578T121 639Q181 685 256 685Q305 685 332 676T384 635Q419 588 425 542Q468 585 526 628T618 686Q632 667 658 645T704 609T724 594Q740 512 740 385V375V361Q740 128 682 -3Q656 -64 554 -141T361 -218Q319 -218 287 -203T243 -173T230 -150Q230 -148 267 -109L304 -69Q311 -115 341 -142T411 -170Q474 -170 534 -119T624 11Q660 111 660 312Q660 447 633 528L612 549Q578 583 552 596L543 601L528 592Q501 574 483 558Q454 528 436 494L431 484V473Q431 330 376 230Q366 213 359 206T306 159L250 112Q278 105 327 82T399 58Q421 58 440 69T471 92T484 104H485L493 90L480 73Q453 39 429 13Q393 -22 372 -22Q342 -22 260 15T153 53Q97 53 48 -16L38 5Q46 22 74 54T128 108L143 122H155Q226 127 275 168Q352 236 352 399Q352 501 309 564T197 628Q156 628 129 607T102 553Q102 517 147 463T192 383Q192 323 75 250L59 266Q123 314 123 345\",120094:\"86 363Q86 365 128 391T212 444L255 470Q256 470 263 465T283 453T308 442Q338 431 346 431Q350 431 358 436L414 465L421 459L418 434Q404 339 404 262Q404 147 408 119L425 97Q443 74 444 74L467 86L491 97Q492 97 497 83L436 28Q377 -26 374 -26L331 46L329 91L155 -35Q152 -35 114 10T68 65L67 86Q66 100 66 156Q66 177 66 198T68 236T71 268T74 296T77 320T80 338T83 351T86 360V363ZM314 365Q285 367 255 374T206 386L187 392Q181 392 172 376T154 311T145 197Q145 124 151 118Q156 110 187 78L208 56H214Q221 57 253 76L308 109L329 123V136Q328 143 328 257V365H314\",120095:\"177 427Q177 364 181 364Q184 364 192 370T223 395T271 433Q317 469 323 469Q325 469 338 462T377 440T432 413L440 409L441 396Q441 394 441 372T442 334Q442 203 425 108L423 97L400 83Q347 49 296 21T222 -19T196 -31Q192 -29 149 12T87 71L89 89Q100 155 100 319Q100 500 94 627Q94 632 94 638T94 648T94 656T93 662V664Q93 668 97 669T106 670H110Q114 653 118 633L127 596Q127 595 132 597Q136 599 195 642L255 685L272 673Q269 670 256 659T233 637T211 609T190 565T179 508Q177 494 177 427ZM295 377L274 385Q273 385 264 381T242 370T223 361Q213 355 188 340L178 333V123L198 103Q259 42 285 42Q299 42 314 55T339 85Q363 132 363 232Q363 310 358 343V349L345 355Q330 363 295 377\",120096:\"72 208Q72 323 84 361Q84 363 167 414Q248 466 250 466Q255 465 260 465Q283 460 307 450T344 430L357 422L306 343L301 342L296 340Q267 362 247 372T216 384T177 390Q154 349 154 238Q154 220 156 158V145L168 132Q179 121 208 93T244 59Q245 58 246 58Q255 58 302 83T350 108L352 104Q355 100 356 96L358 92Q358 91 274 32T187 -29L177 -20Q160 -6 120 36T77 84Q77 87 75 118T72 208\",120097:\"13 542Q13 544 77 576T147 609Q154 609 185 598T283 551T414 464L427 454V440Q427 436 427 412T428 372Q428 315 426 270T418 197T409 152T400 121T394 103L304 35Q285 21 261 2T225 -25L214 -33Q149 7 97 59L76 80L75 91V171Q75 221 76 254T79 299T80 313Q80 315 78 321Q78 323 78 326L77 330Q79 336 132 384T211 447L219 445Q221 445 224 444L228 443Q229 443 228 441T221 432T206 415L191 395Q175 378 162 339Q152 306 152 250Q152 217 159 140V134L171 121Q194 99 235 74T284 48Q296 48 310 75T337 156T349 267Q349 346 336 400L315 420Q246 489 176 525Q127 545 94 545H73L27 527L13 542\",120098:\"353 103Q353 97 358 87L337 71Q293 38 247 6Q191 -30 189 -30Q188 -30 173 -16T130 26T76 85L74 99Q70 139 70 190Q70 228 73 271T79 338T84 365L94 372Q105 378 126 392T166 417L246 467Q283 417 349 369L364 358L355 349Q249 249 169 180L151 166L152 152V139L165 126Q186 105 215 84T260 62Q267 62 309 82L353 103ZM267 323Q246 337 230 350T204 371T189 385T179 394T174 397Q149 381 149 219V211Q151 211 171 223T220 258T268 299L282 313L267 323\",120099:\"128 387Q128 391 112 456T92 546V555L101 568Q133 617 183 670L193 681L204 673Q238 648 262 648Q276 648 292 656L302 661L308 653Q308 652 278 618L249 585H234Q194 587 159 595Q158 595 156 596H153L150 597Q151 593 152 581T154 564T157 547T164 524T176 494Q199 436 203 400V392H207L323 386Q323 384 309 368L296 351H203V176Q201 -9 198 -32Q194 -61 166 -114Q158 -129 153 -138Q114 -214 110 -221Q105 -221 98 -220L87 -219V-216Q88 -215 106 -150T124 -82Q128 -73 129 155V351H30L64 386H96Q128 386 128 387\",120100:\"27 -144L17 -131L82 -75L146 -20L126 6Q99 37 92 48L78 65L77 79Q75 103 75 158Q75 217 78 268T86 343T91 368Q92 370 109 382T157 413T222 452Q240 465 249 469L251 470Q296 443 350 428L365 424L437 465L442 459Q442 456 441 453T437 444T432 424T427 385T423 317T421 215V133L423 119Q423 111 455 -17Q455 -21 380 -108T290 -201Q290 -202 284 -204T269 -207T252 -209Q172 -209 75 -135L62 -126Q60 -126 44 -135L27 -144ZM349 351Q267 359 178 389Q177 387 173 376T166 358T161 337T157 303T155 259Q155 195 159 135L160 124L170 112Q180 101 204 77T230 53Q231 53 286 88L340 123V141Q340 235 348 329Q348 334 348 339T348 348L349 351ZM364 -59Q364 -37 358 -1T347 64T341 93Q336 93 252 28T149 -57Q226 -134 293 -134Q325 -134 344 -118T364 -69V-59\",120101:\"88 427Q88 486 87 545T84 634T81 667Q81 673 82 673T89 676H94L117 600L200 661Q208 667 218 674T233 684L238 688L254 678Q222 646 216 637Q164 572 164 483V442V371Q187 390 244 431T312 478Q344 446 411 423L428 417L429 396Q434 297 434 218Q430 8 406 -34Q346 -111 262 -195L251 -205L249 -203Q248 -203 244 -199T236 -193Q226 -183 227 -182Q228 -182 244 -169T278 -140T301 -121Q330 -89 340 -22Q355 60 355 171Q355 200 353 244T348 321T344 354Q333 363 307 376T260 390Q241 390 179 350L164 341V121Q180 96 201 66L213 50Q210 46 172 11T131 -24Q130 -24 123 -11T102 25T77 65V78Q80 104 84 227T88 427\",120102:\"72 617Q72 618 102 645T133 673H134Q134 668 175 627L187 615L130 555L116 568Q72 615 72 617ZM27 369Q21 376 14 382L26 392Q83 440 119 474Q158 435 169 427L179 420L176 395Q166 302 166 227Q166 171 174 139Q178 119 186 103T202 81L208 75Q255 100 261 100Q262 100 264 92T267 83Q267 80 208 30T145 -20Q143 -20 118 17L91 55Q98 117 98 193Q98 339 88 369Q71 390 68 390Q63 390 39 376L27 369\",120103:\"101 644L132 672L145 657Q155 642 169 628L182 614L169 600Q148 579 140 570L125 555L112 568Q109 570 91 592T72 615Q72 617 101 644ZM19 -208Q-9 -185 -9 -183Q57 -134 80 -106Q103 -81 110 -19T118 179Q118 294 113 329T86 383Q78 389 76 389Q73 389 57 379L39 367Q26 380 26 381L33 387Q40 393 53 405T79 428L130 474Q147 457 186 428L195 422L196 376Q196 130 192 58T174 -35Q172 -39 104 -114T19 -208\",120104:\"93 348Q93 379 90 503T87 658V670Q87 671 94 671L100 672L112 636Q124 603 124 600L144 616Q196 659 234 682L246 689Q252 686 256 685T268 680L254 667Q225 641 211 626T184 579T168 505V497L178 504Q203 523 237 544L300 584L310 573Q359 522 359 481Q359 476 359 472T358 464T355 456T351 448T346 440T340 433T332 424T323 414T312 402T299 389L255 343L300 342H346L320 309H177V128L193 113Q214 92 244 68L254 60L303 84Q351 108 352 108L362 96Q355 85 277 30T194 -25L170 -4Q146 18 120 41T89 68Q94 85 94 168Q94 184 94 218T93 268V309H58L24 310L51 342H93V348ZM172 342Q217 342 252 374T287 445Q287 472 255 504Q242 517 241 517Q202 498 187 468T168 365V342H172\",120105:\"221 76L267 99Q268 98 269 96T271 88T270 82L262 76Q255 69 241 57T214 34L148 -20L98 56L99 89Q107 247 107 373Q107 494 101 621Q101 653 99 659V665L106 668L113 672L118 655Q122 642 131 617L138 597Q140 597 157 611L240 670L264 685Q265 685 270 680T276 674T269 667T247 647T219 617Q197 587 186 551T173 493T171 438Q171 376 175 282T179 147V117Q184 109 201 93T221 76\",120106:\"20 367L8 379Q9 380 63 425T118 471Q130 460 143 446L168 421V398L169 376L295 475Q362 433 415 418V399Q415 380 416 380T437 394T484 428T529 462L544 474L556 467Q590 449 614 438T646 424L653 421L665 417L664 412Q664 411 664 407T664 397T663 384Q660 342 660 335Q658 303 658 245Q658 186 660 152L661 126L669 115Q680 96 697 79L707 83Q716 87 723 90T735 96T741 100T746 102L747 103V102L750 95Q753 88 753 87L631 -18Q630 -17 622 -3T589 43L576 60L579 72Q592 146 592 218Q592 265 584 321Q581 345 578 350T560 363Q535 376 496 386L481 390Q475 387 425 358L415 351V238V157Q415 142 415 135T417 120T421 110T430 98T441 81L465 47Q462 44 458 41T443 28T420 8L380 -26L333 47L336 62Q339 77 342 109T345 184Q345 223 341 285T333 348Q322 364 258 382L240 388L169 347L168 240Q168 118 171 110L174 106Q178 101 183 93T195 78L217 48Q217 47 196 30T154 -5T133 -21L130 -16Q127 -10 122 0T111 19Q89 56 89 60Q95 76 95 153Q95 239 88 337V365L62 391L20 367\",120107:\"31 368Q20 379 20 380T72 427L121 470L129 463Q137 455 155 441T176 425V367L320 475L329 469Q351 454 385 437T434 417L432 402Q429 362 429 231V128L439 111Q442 107 445 102T449 95T453 90T456 86T459 84T463 82T467 82Q468 82 489 93T511 105T514 95V88L395 -18L340 65L341 77Q347 111 348 178Q348 343 343 353V358L332 363Q298 377 264 382Q260 382 254 382L249 383Q247 383 211 362L176 341V229V147Q176 134 176 127T177 115T179 106T183 99T189 91T197 81Q201 76 206 69T214 57L217 53Q217 52 175 15T132 -22Q132 -20 114 5T88 41Q84 45 84 50Q94 116 94 203Q94 227 93 263T92 324L90 364L67 388L50 378Q32 368 31 368\",120108:\"67 121Q70 265 84 359V364L97 371Q137 394 177 421T238 464T260 480L278 468Q295 457 327 442T394 418L406 414Q412 388 412 300Q412 263 410 228T405 170T399 130T393 103T391 92L381 86Q274 19 165 -28L161 -24Q157 -21 151 -15T136 -2T118 14T101 30T86 46T74 60L67 68V121ZM335 278Q335 286 335 303T334 335L333 349V356H326Q288 360 208 388L183 397Q178 393 172 383T154 333T142 239Q142 192 151 134Q152 124 155 120T175 99Q197 77 219 64T251 47T267 44T281 52T302 80T320 124Q335 182 335 278\",120109:\"23 25Q15 33 12 38L35 59Q82 102 87 105V351L68 378Q42 414 42 422Q42 437 67 472T114 530L125 541Q126 541 132 537T138 532Q121 507 121 488Q121 453 160 413L167 405L166 390L165 372Q169 372 233 421T305 478Q307 479 315 472Q395 421 423 415Q424 415 424 415T425 414L426 410Q426 407 426 401T426 388Q430 335 430 272Q430 139 408 80Q407 78 340 22L273 -33Q200 23 165 23Q164 23 164 -32Q165 -89 168 -155V-170L93 -212L78 -203Q85 -48 87 16V47H79Q53 44 23 25ZM319 41Q346 94 349 212Q349 278 343 343V351L330 357Q318 363 270 381L255 387L245 383Q212 370 178 345L166 336V287Q165 260 165 166V94H175Q219 90 299 51L319 41ZM132 57L129 60Q130 58 132 57ZM158 29Q159 29 155 34T145 45T138 50Q155 29 158 29\",120110:\"399 19Q399 -123 407 -174V-179L332 -219L322 -210L312 -202L314 -185Q320 -83 323 54V95L311 85Q255 40 162 -19Q146 -29 145 -27Q140 -22 103 20L63 65V73Q61 83 61 115Q61 122 61 135T60 154Q60 263 79 353L83 368L94 375Q123 391 147 405T186 429T212 446T229 458T238 466T243 470T247 471L260 464Q274 457 295 448T330 434L341 432L410 479L412 478Q414 476 416 475T419 473L417 461Q399 358 399 19ZM316 367Q287 370 252 377T196 391L176 397H175Q173 397 166 382T149 314T139 187V158Q139 138 141 132T155 114Q158 111 160 109Q210 58 211 58L218 62Q226 67 240 75T266 91L319 124V196Q319 334 325 361V367H316\",120111:\"357 398Q364 398 375 403L386 408Q386 404 387 400V393L369 377Q361 370 350 360T336 347T327 340T316 336T303 335Q270 335 234 371L224 379Q220 375 214 370T198 355L182 340V243Q182 164 183 152T189 129Q195 117 211 100T239 72T254 60T298 81Q342 101 343 101Q344 100 345 92T346 82L200 -21Q174 -5 117 55L97 75L99 92Q106 147 106 196Q106 216 104 282T97 355Q95 359 95 361Q95 364 77 378L65 387L48 380Q30 372 29 372Q28 371 23 375T17 380Q17 384 50 415T107 467L115 474L128 461Q171 421 182 414V382L235 425Q247 435 261 446T283 462L290 468L295 460Q335 398 357 398\",120112:\"272 33Q284 33 290 70T296 138Q296 181 290 198T262 230Q257 232 246 232Q231 232 218 227T156 194L108 167L101 176Q90 192 75 219L69 230V284Q69 346 70 357V377L146 427Q181 450 202 464T223 477L225 476Q227 475 229 474Q231 472 242 466T270 450T296 431Q309 418 326 418Q342 418 361 429T392 450T403 459Q406 445 406 442Q406 440 384 421T338 382L316 363Q315 362 310 362Q292 362 251 371T173 396Q156 403 155 403Q143 386 143 342Q143 305 150 278T168 244Q171 242 181 242L190 243L315 300Q330 295 357 274Q358 273 362 270T366 266T369 261T372 253T373 239T374 217T374 185Q374 157 372 133T368 98T363 71T358 50L336 40Q288 20 255 2T211 -22T198 -29L190 -22Q181 -14 168 -3T138 19T104 38T70 46Q50 46 32 37T3 20T-9 11L-18 23L-1 41Q46 89 62 99T112 110Q141 110 157 103T225 62Q268 33 272 33\",120113:\"228 640L242 627L227 613Q213 599 211 593T203 553Q197 500 196 435V389H301L272 353H195V274Q195 178 196 159L197 123Q249 71 273 68H280L312 83Q344 99 345 99Q348 99 348 78Q348 76 314 52T246 4L212 -20Q211 -20 164 19T112 62Q112 122 113 196Q113 228 113 262T114 318T114 341V353H27L62 389H116L117 431V558L228 640\",120114:\"171 315Q171 252 165 199T153 124L147 103Q147 102 196 80L244 57L335 107V116Q339 161 339 268Q339 315 338 351T337 412V424L420 468Q424 465 427 461L424 435Q412 331 412 226Q412 170 415 145T434 96Q442 84 452 83Q461 83 492 96L506 102Q507 102 510 96T513 88L493 71Q445 32 401 -9Q392 -18 388 -17L384 -16Q358 39 355 44Q336 77 333 77Q261 45 203 -9Q186 -23 181 -23Q177 -23 162 -11T121 18T69 44L57 48L61 54Q65 60 71 73T82 102Q100 156 100 262Q100 305 93 335T80 373T62 396L23 376Q18 377 9 386L119 474Q149 437 171 421V339V315\",120115:\"55 418Q55 443 100 503Q121 530 123 530Q125 528 127 528T131 528T134 528T135 524T131 516Q123 499 123 486Q123 457 159 416L169 405L170 388L171 372Q171 371 244 424L317 477L334 466Q394 428 432 416L433 402Q433 400 433 377T434 336V305Q434 195 420 131Q413 94 406 87Q403 84 298 29L192 -28L172 -8Q139 25 106 52L92 64V70Q95 97 95 198Q95 293 94 318L92 355L84 367Q55 406 55 418ZM174 306Q174 297 173 255T171 184Q171 153 175 136T198 100Q207 94 224 80T255 57T282 49Q304 49 328 80Q359 129 359 243Q359 284 352 345Q351 358 348 360Q333 373 304 384T265 396L251 390Q215 372 186 351L175 344V337Q175 319 174 306\",120116:\"45 425Q45 439 82 485T126 532Q127 532 128 532T131 531T137 529L132 519Q121 499 121 483Q121 473 131 454T156 419L167 408L169 376L185 388Q237 425 291 473L301 466Q337 443 394 416L419 405L418 387V369Q419 369 487 418T560 471L581 459Q597 450 621 437T664 415T684 406Q688 406 688 323Q688 254 679 193T662 103T648 71Q647 70 554 20L464 -28L443 -15Q416 1 386 17T343 40T331 49Q331 52 333 73T337 133T339 216Q339 309 334 339Q333 341 316 353T277 377T246 389Q235 389 201 369T166 346Q166 345 164 247Q164 232 164 210T163 179Q163 139 170 116T205 57L212 48L136 -27Q115 16 87 44L78 53L80 67Q88 124 88 211Q88 282 87 315T83 356T74 371Q45 410 45 425ZM591 352Q580 359 565 365T540 374T517 381T504 385L418 342L417 318V220Q417 212 417 194T417 170T418 152T420 134T424 120T431 106T440 95T454 83Q508 44 544 44Q566 44 583 77Q603 120 605 235Q605 289 600 322Q598 343 597 345T591 352\",120117:\"14 377Q63 428 117 472Q130 462 144 449L193 408V392V376L247 420Q300 464 301 464L310 451Q331 417 363 390L333 365Q303 340 301 340Q293 343 277 364T250 386Q241 386 215 361L195 341Q194 333 193 327T191 318T190 304T188 269Q188 220 192 148Q193 122 195 118T210 101Q255 60 271 60Q276 60 278 61L318 82Q327 86 336 91T351 98L356 101Q359 82 356 79Q354 77 283 27T210 -24L192 -7Q160 23 137 40L126 49L116 40Q66 -13 66 -54Q66 -117 167 -140L179 -142V-147L180 -152L123 -188L112 -185Q58 -170 31 -145Q10 -122 10 -96Q10 -80 22 -53Q44 -10 95 49Q97 51 100 54T104 59T107 64T109 71T111 81T112 97T113 119T114 149T114 188Q114 284 108 347V354L96 365Q76 385 67 385Q62 385 45 377L27 368L14 377\",120118:\"74 58Q89 124 89 241Q89 265 89 278T89 305T88 324T87 336T84 346T81 352T77 359T71 368Q57 388 52 398L45 409Q62 454 98 507L113 528Q128 528 128 524Q128 523 125 518T120 503T117 483V471Q123 456 130 445Q135 438 140 432T148 422T153 415T157 409T160 405T162 402T163 399T163 395V384V365Q165 365 237 419L311 473Q383 430 420 416Q426 414 426 411V404Q426 398 426 388T427 367Q431 233 431 201Q431 -3 391 -52Q387 -58 305 -138T221 -218L218 -217Q216 -216 211 -214T202 -210L184 -202L199 -194Q259 -162 288 -127T334 -19T350 184Q350 257 342 328L340 356Q282 390 262 390Q248 390 178 346L163 336V111L216 45L131 -26L124 -15Q114 3 85 44L74 58\",120119:\"47 335L36 347L52 362Q112 421 167 461L181 471L192 465Q236 444 260 417T284 369Q284 355 276 343T233 291Q195 246 195 245T205 242T241 228T300 198L302 187Q314 138 314 74Q314 -24 291 -95Q290 -100 222 -157L154 -214H145Q102 -214 53 -189T-7 -117Q41 -21 183 122L207 147Q205 149 186 157T140 172T100 180H97V192L140 231Q192 280 199 293Q205 303 205 315Q205 339 185 363T137 388Q119 388 63 347L47 335ZM179 -153Q212 -153 226 -113T240 14Q240 67 233 98T223 132T211 143L222 130Q216 125 206 116T170 82T124 33T88 -20T72 -70Q72 -99 105 -126T179 -153\",120120:\"130 -1H63Q34 -1 26 2T17 17Q17 24 22 29T35 35Q49 35 64 44T88 66Q101 93 210 383Q331 693 335 697T346 701T357 697Q358 696 493 399Q621 104 633 83Q656 35 686 35Q693 35 698 30T703 17Q703 5 693 2T643 -1H541Q388 -1 386 1Q378 6 378 16Q378 24 383 29T397 35Q412 35 434 45T456 65Q456 93 428 170L419 197H197L195 179Q184 134 184 97Q184 82 186 71T190 55T198 45T205 39T214 36L219 35Q241 31 241 17Q241 5 233 2T196 -1H130ZM493 68Q493 51 481 35H619Q604 56 515 256Q486 321 468 361L348 637Q347 637 330 592T313 543Q313 538 358 436T448 219T493 68ZM404 235Q404 239 355 355T295 488L275 430Q241 348 208 232H306Q404 232 404 235ZM155 48Q151 55 148 88V117L135 86Q118 47 117 46L110 37L135 35H159Q157 41 155 48\",120121:\"11 665Q11 672 22 683H213Q407 681 431 677Q582 649 582 515Q582 488 573 468Q554 413 484 372L474 366H475Q620 317 620 178Q620 115 568 69T420 6Q393 1 207 -1H22Q11 10 11 18Q11 35 51 35Q79 37 88 39T102 52Q107 70 107 341T102 630Q97 640 88 643T51 648H46Q11 648 11 665ZM142 341Q142 129 141 88T134 37Q133 36 133 35H240L233 48L229 61V623L233 635L240 648H133L138 639Q142 621 142 341ZM284 370Q365 378 391 411T417 508Q417 551 406 581T378 624T347 643T320 648Q298 648 278 635Q267 628 266 611T264 492V370H284ZM546 515Q546 551 531 577T494 617T454 635T422 641L411 643L420 630Q439 604 445 579T452 510V504Q452 481 451 467T441 430T415 383Q420 383 439 391T483 413T527 455T546 515ZM585 185Q585 221 570 249T534 294T490 320T453 334T436 337L435 336L440 330Q445 325 452 315T467 288T479 246T484 188Q484 145 474 110T454 62T442 48Q442 47 444 47Q450 47 470 54T517 75T564 119T585 185ZM449 184Q449 316 358 332Q355 332 335 333T302 335H264V199Q266 68 270 57Q275 50 289 43Q300 37 324 37Q449 37 449 184\",120123:\"16 666Q16 675 28 683H193Q329 683 364 682T430 672Q534 650 600 585T686 423Q688 406 688 352Q688 274 673 226Q641 130 565 72T381 1Q368 -1 195 -1H28Q16 5 16 16Q16 35 53 35Q68 36 75 37T87 42T95 52Q98 61 98 341T95 630Q91 640 83 643T53 648Q16 648 16 666ZM237 646Q237 648 184 648H128Q128 647 133 632Q136 620 136 341Q136 64 133 50L128 35H237L230 48L226 61V343Q228 620 231 633Q232 636 237 646ZM264 61Q278 40 310 35Q363 35 401 55T461 112T496 193T513 295Q515 333 515 349Q515 411 504 459Q481 598 373 641Q351 648 321 648Q304 648 292 643T277 635T264 621V61ZM461 628Q462 627 471 616T489 594T509 559T529 509T544 441T550 352Q550 165 479 75L468 59Q474 61 484 65T522 87T573 128T618 195T650 290Q654 322 654 354Q654 418 638 464T581 552Q559 576 529 595T480 621L461 628\",120124:\"12 666Q12 675 24 683H582Q590 680 593 672V588Q593 514 591 502T575 490Q567 490 563 495T555 517Q552 556 517 590Q486 623 445 634T340 648H282Q266 636 264 620T260 492V370H277Q329 375 358 391T404 439Q420 480 420 506Q420 529 436 529Q445 529 451 521Q455 517 455 361Q455 333 455 298T456 253Q456 217 453 207T437 197Q420 196 420 217Q420 240 406 270Q377 328 284 335H260V201Q261 174 261 134Q262 73 264 61T278 38Q281 36 282 35H331Q400 35 449 50Q571 93 602 179Q605 203 622 203Q629 203 634 197T640 183Q638 181 624 95T604 3L600 -1H24Q12 5 12 16Q12 35 51 35Q92 38 97 52Q102 60 102 341T97 632Q91 645 51 648Q12 648 12 666ZM137 341Q137 131 136 89T130 37Q129 36 129 35H235Q233 41 231 48L226 61V623L231 635L235 648H129Q132 641 133 638T135 603T137 517T137 341ZM557 603V648H504Q504 646 515 639Q527 634 542 619L557 603ZM420 317V397L406 383Q394 370 380 363L366 355Q373 350 382 346Q400 333 409 328L420 317ZM582 61L586 88Q585 88 582 83Q557 61 526 46L511 37L542 35H577Q577 36 578 39T580 49T582 61\",120125:\"584 499Q569 490 566 490Q558 490 552 497T546 515Q546 535 533 559Q526 574 506 593T469 621Q415 648 326 648Q293 648 287 647T275 641Q264 630 263 617Q262 609 260 492V370L275 372Q323 376 350 392T393 441Q409 473 409 506Q409 529 427 529Q437 529 442 519Q444 511 444 362Q444 212 442 206Q436 197 426 197Q409 197 409 217Q409 265 375 299Q346 328 280 335H260V206Q260 70 262 63Q265 46 276 41T326 35Q362 35 366 28Q377 17 366 3L360 -1H24Q12 5 12 16Q12 35 51 35Q92 38 97 52Q102 60 102 341T97 632Q91 645 51 648Q12 648 12 666Q12 675 24 683H573Q576 678 584 670V499ZM137 341Q137 131 136 89T130 37Q129 36 129 35H182Q233 35 233 39Q226 54 225 92T224 346L226 623L231 635L235 648H129Q132 641 133 638T135 603T137 517T137 341ZM549 603V648H495L506 641Q531 621 533 619L549 603ZM409 317V395L400 386Q390 376 375 366L357 355L373 346Q394 331 397 328L409 317\",120126:\"737 285Q749 277 749 268Q749 260 744 255T730 250Q695 250 677 217Q666 195 666 119Q666 52 664 50Q656 36 555 3Q483 -16 415 -19Q364 -19 348 -17Q226 -3 146 70T44 261Q39 283 39 341T44 421Q66 538 143 611T341 699Q344 699 364 700T395 701Q449 698 503 677T585 655Q603 655 611 662T620 678T625 694T639 702Q650 702 657 690V481L653 474Q640 467 628 472Q624 476 618 496T595 541Q562 587 507 625T390 663H381Q337 663 299 625Q213 547 213 337Q213 75 341 23Q357 19 397 19Q440 19 462 22T492 30T513 45V119Q513 184 506 203Q491 237 435 250Q421 250 415 257Q404 267 415 281L421 285H737ZM250 43Q250 45 243 55T225 87T203 139T185 224T177 343V361Q184 533 250 625Q264 643 261 643Q238 635 214 620T161 579T110 510T79 414Q74 384 74 341T79 268Q106 117 230 52L250 43ZM621 565V625Q617 623 613 623Q603 619 590 619H575L588 605Q608 583 610 579L621 565ZM655 250H517L524 241Q548 213 548 149V114V39Q549 39 562 44T592 55T615 63L630 70V134Q632 190 634 204T648 237Q655 245 655 250\",120128:\"20 666Q20 676 31 683H358Q369 676 369 666Q369 648 331 648Q288 645 282 632Q278 626 278 341Q278 57 282 50Q286 42 295 40T331 35Q369 35 369 16Q369 6 358 -1H31Q20 4 20 16Q20 35 58 35Q84 37 93 39T107 50Q113 60 113 341Q113 623 107 632Q101 645 58 648Q20 648 20 666ZM249 35Q246 40 246 41T244 54T242 83T242 139V341Q242 632 244 639L249 648H140Q146 634 147 596T149 341Q149 124 148 86T140 35H249\",120129:\"79 103Q108 103 129 83T151 38Q151 9 130 -15Q116 -34 130 -37Q133 -39 157 -39Q208 -39 219 -8L226 3V305Q226 612 224 621Q220 636 211 641T166 647Q137 647 128 654Q119 665 128 679L135 683H466Q478 677 478 666Q478 647 439 647Q399 644 393 632Q388 620 388 347Q386 69 384 59Q364 -6 316 -39T184 -77H172Q102 -77 56 -48T6 30Q6 62 26 82T79 103ZM353 354Q353 556 354 596T361 645Q362 646 362 647H253Q257 639 258 628T261 547T262 312V-4L255 -17Q248 -29 250 -29Q253 -29 258 -28T277 -20T302 -5T327 22T348 65Q350 74 353 354ZM115 36Q115 47 105 57T79 67Q73 67 67 66T52 56T44 34Q44 9 62 -8Q66 -11 71 -15T81 -22T86 -24L90 -13Q100 3 102 5Q115 22 115 36\",120130:\"22 666Q22 676 33 683H351L358 679Q368 665 358 655Q351 648 324 648Q288 645 280 637Q275 631 274 605T273 477L275 343L382 446Q473 530 492 553T512 599Q512 617 502 631T475 648Q455 651 455 666Q455 677 465 680T510 683H593H720Q732 676 732 666Q732 659 727 654T713 648Q670 648 589 581Q567 562 490 489T413 415Q413 413 554 245T711 61Q737 35 751 35Q758 35 763 29T768 15Q768 6 758 -1H624Q491 -1 486 3Q480 10 480 17Q480 25 487 30T506 35Q518 36 520 38T520 48L400 195L302 310L286 297L273 283V170Q275 65 277 57Q280 41 300 38Q302 37 324 35Q349 35 358 28Q367 17 358 3L351 -1H33Q22 4 22 16Q22 35 60 35Q101 38 106 52Q111 60 111 341T106 632Q100 645 60 648Q22 648 22 666ZM240 341V553Q240 635 246 648H138Q141 641 142 638T144 603T146 517T146 341Q146 131 145 89T139 37Q138 36 138 35H246Q240 47 240 129V341ZM595 632L615 648H535L542 637Q542 636 544 625T549 610V595L562 606Q565 608 577 618T595 632ZM524 226L386 388Q386 389 378 382T358 361Q330 338 330 333Q330 332 330 332L331 330L533 90Q558 55 558 41V35H684L671 50Q667 54 524 226\",120131:\"12 666Q12 675 24 683H333L340 679Q350 665 340 655Q333 648 309 648Q287 646 279 643T266 630Q264 623 264 346Q264 68 266 57Q274 40 284 35H340Q413 37 460 55Q514 78 553 117T602 197Q605 221 622 221Q629 221 634 215T640 201Q638 194 625 105T611 12Q611 6 600 -1H24Q12 5 12 16Q12 35 51 35Q92 38 97 52Q102 60 102 341T97 632Q91 645 51 648Q12 648 12 666ZM137 341Q137 131 136 89T130 37Q129 36 129 35H237Q235 41 233 48L229 61L226 339Q226 621 229 628Q230 630 231 636T233 643V648H129Q132 641 133 638T135 603T137 517T137 341ZM580 48Q580 59 583 74T586 97Q586 98 585 97T579 92T571 86Q549 64 513 43L500 35H577L580 48\",120132:\"18 666Q18 677 27 680T73 683H146Q261 683 266 679L465 215Q469 215 566 443Q663 676 668 681Q673 683 790 683H908L915 679Q924 664 915 655Q912 648 897 648Q851 639 835 606L833 346Q833 86 835 79Q838 69 849 58T873 41Q877 40 887 38T901 35Q926 35 926 16Q926 6 915 -1H604L597 3Q588 19 597 28Q600 35 615 35Q660 42 673 68L679 79V339Q679 409 679 443T679 520T679 580T677 597Q646 521 584 375T473 117T424 3Q416 -1 410 -1T401 1Q399 3 273 301L148 599L146 343Q146 86 148 79Q152 69 163 58T186 41Q190 40 200 38T215 35Q226 35 235 28Q244 17 235 3L228 -1H28Q17 4 17 17Q17 35 39 35Q84 42 97 68L104 79V639L88 641Q72 644 53 648Q34 648 26 651T18 666ZM457 166Q451 169 449 171T435 198T404 268T344 412L244 648H157L166 637Q169 633 293 346L413 66Q424 88 435 117L457 166ZM817 646Q817 648 766 648H715V72L708 57Q701 45 697 41L695 37Q695 35 757 35H819L813 46Q802 61 800 76Q797 105 797 346L799 612L804 626Q812 638 815 641L817 646ZM124 42Q119 42 119 38Q119 35 128 35Q132 35 132 36Q125 42 124 42\",120134:\"131 601Q180 652 249 676T387 701Q485 701 562 661Q628 629 671 575T731 448Q742 410 742 341T731 234Q707 140 646 81Q549 -19 389 -19Q228 -19 131 81Q57 155 37 274Q34 292 34 341Q34 392 37 410Q58 528 131 601ZM568 341Q568 613 437 659Q406 664 395 665Q329 665 286 625Q232 571 213 439Q210 408 210 341Q210 275 213 245Q232 111 286 57Q309 37 342 23Q357 19 389 19Q420 19 437 23Q469 38 491 57Q568 132 568 341ZM174 341Q174 403 177 441T197 535T249 639Q246 639 224 627T193 608Q189 606 183 601T169 589T155 577Q69 488 69 344Q69 133 231 52Q244 45 246 45Q248 45 246 48Q231 69 222 85T200 141T177 239Q174 269 174 341ZM708 341Q708 415 684 475T635 563T582 610Q578 612 565 619T546 630Q533 637 531 637Q530 637 530 636V635L531 634Q562 591 577 543Q602 471 602 341V316Q602 264 599 230T580 144T531 48L530 47V46Q530 45 531 45Q533 45 547 52T583 75T622 105Q708 195 708 341\",120138:\"54 238Q72 238 72 212Q72 174 106 121Q113 110 132 90T166 59Q221 23 264 23Q315 23 348 41Q368 50 384 79Q393 102 393 129Q393 181 356 219T221 299Q120 343 74 390T28 501Q28 561 55 610Q98 682 212 699Q214 699 231 700T261 701Q309 698 340 687T408 675Q431 678 445 690T465 702Q474 702 481 690V497L477 490Q464 481 450 490Q446 500 446 501Q446 546 386 606T260 666Q215 666 182 639T148 565Q148 528 186 496T319 428Q352 414 370 405T418 379T468 338T506 284Q528 239 528 191Q528 102 456 46T266 -10Q211 -10 176 2T110 15Q86 9 73 -1T53 -12Q44 -12 37 -1V112V182Q37 214 40 226T54 238ZM446 619Q446 648 444 648Q439 646 435 644Q425 644 415 639H404L417 624Q435 606 439 601L446 592V619ZM124 619L128 635Q126 635 108 617Q64 576 64 502Q64 489 65 479T76 449T102 414T150 376T228 335Q335 291 381 245T427 128Q427 94 419 75L415 61Q421 61 448 88Q490 127 490 190Q490 233 475 264Q456 299 430 321Q402 349 369 367T287 404T204 441Q138 481 119 526Q113 544 113 565Q113 596 124 619ZM75 43Q76 43 90 46T110 50H119L106 64L74 101Q72 101 72 72T75 43\",120139:\"33 672Q36 680 44 683H624Q632 680 635 672V490L631 483Q621 479 617 479Q611 479 606 485T600 499Q600 525 584 552Q577 567 558 588T524 617Q479 642 426 646L415 648V355Q415 62 422 52Q425 42 434 40T473 35Q500 35 509 28Q518 17 509 3L502 -1H166L160 3Q149 17 160 28Q167 35 195 35Q224 37 234 39T249 52Q253 66 253 355V648L242 646Q192 642 144 617Q129 609 110 588T84 552Q69 527 69 499Q69 490 64 484T50 478Q39 478 33 490V672ZM113 639L126 648H69V597L84 612Q93 623 113 639ZM389 35Q382 46 381 86Q380 134 380 350V648H289V350Q289 199 288 131T286 53T280 35H389ZM600 597V648H542L555 639Q575 623 584 612L600 597\",120140:\"16 666Q16 677 28 683H341L348 679Q359 665 348 654Q342 648 315 648Q270 644 266 632Q262 627 262 598T261 399Q261 372 261 325T260 260Q260 149 274 99T339 30Q355 25 393 25Q430 25 457 33T494 49T519 72Q562 115 575 205Q576 219 576 379Q576 538 575 550Q568 597 550 622T506 648Q498 648 493 654T487 667T499 683H697Q709 675 709 667T704 654T690 648Q653 648 633 597Q624 573 622 546T619 377Q617 193 613 174Q596 95 544 41Q477 -19 355 -19H344Q275 -16 226 5T153 57T120 110T106 154Q101 172 99 399Q99 618 95 632Q88 644 53 648Q16 648 16 666ZM228 639L233 648H128Q128 647 133 632Q135 621 135 412Q135 197 137 185Q148 115 181 79Q209 51 235 41Q242 36 258 31T277 25Q276 27 268 38T254 59T241 92T228 145Q226 161 226 399Q226 632 228 639ZM604 621Q606 626 619 648H577L586 634Q587 632 591 625T595 614L597 608L604 621\",120141:\"316 683Q327 676 327 666Q327 648 302 648Q272 642 258 628Q249 621 249 608Q252 589 263 556T289 485T322 406T357 325T388 256T411 205L420 185Q423 185 473 317Q547 497 547 590Q547 621 541 632T516 648Q501 648 498 654Q488 664 498 679L504 683H607H660Q695 683 707 680T719 667Q719 660 714 654T700 648Q678 648 658 628L642 614L513 301Q484 231 449 148T397 25T380 -15Q373 -20 368 -20Q361 -20 358 -15Q354 -13 287 135T149 438T67 610Q45 648 18 648Q11 648 6 653T0 666Q0 677 9 680T59 683H164H316ZM216 614Q216 620 216 622T216 628T216 633T217 635T218 638T219 640T221 644T224 648H84L96 632Q118 592 236 330L367 43L387 88L404 132L380 185Q250 468 222 568Q216 590 216 614ZM576 645Q584 628 584 597L587 568L598 597Q609 624 618 637L624 648H600Q576 648 576 645\",120142:\"785 664Q785 670 795 683H982Q994 675 994 665Q994 650 975 648Q953 643 939 619Q931 593 823 292T710 -15Q706 -19 699 -19T688 -15Q682 -6 639 107T555 328T513 437Q513 438 500 409T462 325T413 212Q315 -14 310 -17Q308 -19 302 -19T288 -15L57 619Q45 643 24 648Q5 650 5 665Q5 677 17 683H146H200Q256 683 270 681T285 666Q285 659 280 654T268 648Q253 648 239 634Q230 630 230 619Q230 598 264 481L362 192Q363 193 428 341T493 492Q493 496 473 546T446 608Q426 648 399 648Q392 648 387 653T382 667Q382 678 393 683H679Q690 670 690 665Q690 662 685 655T673 648Q653 648 633 632L622 625V610Q626 576 657 479T719 300T751 218Q754 218 779 294Q847 492 847 581Q847 648 802 648Q796 648 791 652T785 664ZM194 623Q194 630 199 648H82L90 632Q99 616 199 332L302 50Q303 50 322 94T342 141Q342 142 305 245T231 467T194 623ZM585 620Q585 634 593 648H530Q466 648 466 645Q479 632 595 323L699 54Q701 56 718 103T735 154L702 245Q585 562 585 620ZM884 572L890 587Q896 602 903 620T915 645Q915 648 893 648H868L875 634Q883 598 883 576Q883 572 884 572\",120143:\"22 666Q22 677 31 680T80 683H184H335Q346 675 346 667Q346 660 341 655Q335 648 315 648Q280 644 273 637Q273 630 300 583T356 492T386 448Q430 504 450 535T474 577T478 601Q478 620 469 634T444 648Q428 648 428 666Q428 678 436 680T488 683H559H630Q673 683 681 681T690 666Q690 648 673 648Q652 648 619 637Q571 615 517 550Q490 517 450 464T410 408Q415 399 501 273T617 106Q648 61 661 48T688 35Q705 35 705 16Q705 5 695 -1H539Q384 -1 379 3Q373 10 373 17Q373 27 380 31T408 35Q459 40 459 49Q459 59 418 129T335 259Q334 260 332 260Q328 260 273 197Q210 127 208 117Q199 104 199 82Q199 57 213 46T239 35Q247 35 252 29T257 15Q257 10 256 7T253 3T248 0L246 -1H28Q16 7 16 15T21 29T35 35Q61 35 117 88Q289 279 304 297Q307 303 255 377Q117 586 79 626Q60 648 39 648Q32 648 27 653T22 666ZM237 639V648H173Q113 647 113 646Q113 642 137 612Q186 546 302 373T453 139Q497 63 497 43Q497 39 495 35H559Q622 35 622 37Q622 38 583 94T486 233T373 399T277 552T237 639ZM553 637L566 648H504L508 637Q510 630 515 615V603L528 615Q529 616 539 625T553 637ZM170 46Q169 49 167 58T164 70V83L137 59L113 35H175Q175 38 170 46\",120144:\"16 659T16 667T28 683H295Q306 676 306 666Q306 648 284 648Q258 648 255 641Q255 634 265 615T339 479Q418 339 421 339L455 394Q489 448 523 502L557 557Q560 566 560 582Q560 637 504 648Q489 648 486 655Q475 664 486 679L493 683H693Q704 675 704 667Q704 650 684 648Q672 645 653 623Q633 604 614 576T517 426L439 301V183Q442 62 444 59Q449 35 504 35Q521 35 528 30Q538 16 528 3L521 -1H195L188 3Q178 16 188 30Q195 35 213 35Q266 35 273 59Q274 61 277 163V261L75 621Q64 638 58 643T37 648Q28 648 22 653ZM219 637V648H101Q110 634 215 446L313 270V166Q310 59 306 48L301 35H415L410 48Q404 65 404 175V290L317 443Q230 601 226 612Q219 625 219 637ZM608 630L624 648H575Q584 632 588 623L595 610L608 630\",120172:\"821 97Q822 97 824 88T827 77L793 53Q676 -25 670 -28Q669 -29 656 -27L583 123Q583 124 467 46L352 -31L341 -20Q305 18 264 47T192 77Q161 77 60 32L49 40Q37 47 38 49Q39 49 93 83T212 160T297 219Q411 312 411 452Q411 519 360 571T233 624Q180 624 157 601T133 548Q133 524 160 496T214 441T241 393Q241 356 199 321T100 256L86 249L77 256Q68 263 67 263L84 274Q101 286 118 304T135 339T109 384T56 446T29 504Q29 566 118 624Q207 686 309 686Q349 686 360 685Q405 678 439 661T491 625T520 583T534 543T537 511Q537 436 491 344L478 318L455 299Q420 272 308 179L284 160L294 158Q348 154 426 89L437 79Q513 110 579 153V175Q579 183 579 227T580 330T581 446T582 542L583 582L664 630Q681 640 703 653T734 673L744 679Q750 678 756 676L767 674L716 623V585Q716 568 712 463T708 289V250Q708 237 709 218T710 195L711 180L739 130Q768 79 771 79Q775 79 796 88T821 97\",120173:\"160 345Q160 357 144 376T109 413T73 458T57 509Q57 544 95 584Q142 631 205 657T331 684Q382 684 427 658T500 585L505 577L521 588Q537 599 562 614T616 646T679 673T738 684Q790 684 807 666T840 587Q850 552 863 532T888 508Q894 505 906 505Q917 505 930 507T953 512T963 514L964 504Q965 495 965 494T914 467T808 413T745 384H751Q782 380 802 377T854 362T904 334T937 287T951 217Q951 178 937 143T908 91Q903 86 820 34L734 -21L718 -24Q679 -31 639 -31Q561 -31 451 4T271 40Q190 40 119 -2L99 -13L91 1L84 15L86 16Q88 18 132 42T233 100T315 152Q377 199 386 233Q388 240 393 297T399 363Q399 487 353 551Q337 573 306 597T238 622Q201 622 179 602T157 557T214 476T272 396Q272 371 229 334T143 272T96 246Q95 246 85 252T74 259T95 273T138 306T160 345ZM529 443Q529 409 528 385T526 353L525 346Q526 346 649 390T773 435Q749 451 742 464T727 518Q727 519 725 532T721 548T717 562T712 577T706 589T698 601T688 608T675 614T658 616Q626 616 576 582T525 528Q525 527 526 518T528 489T529 443ZM772 57Q774 57 778 58T792 64T808 77T821 103T827 144Q827 222 784 266T660 322Q652 323 611 323H596Q577 323 535 316L523 314Q520 291 505 255L500 241L356 138L366 137Q443 131 518 110T650 72T748 54Q763 54 772 57\",120174:\"460 -32Q373 -32 305 -11T193 45T122 124T83 214T72 303Q72 395 114 476L119 486L313 592L338 568L359 580Q418 615 479 638T568 668T606 675Q607 675 608 676H610Q612 676 615 661T630 621T660 578Q673 568 694 568Q717 568 721 570H726Q724 565 722 559L717 549L706 545Q608 513 583 513Q568 517 559 522T533 546T493 603L490 609Q452 599 452 558Q452 537 469 481T486 393Q486 353 474 331T422 285T296 231L272 223L262 230L253 237Q279 246 314 274T351 338Q351 376 334 442T316 532Q316 546 319 552Q319 554 316 554Q304 554 288 547T250 523T214 466T199 371Q199 218 299 133T541 47Q571 47 585 51T652 81L712 108Q716 104 716 81L706 74Q695 68 673 54T633 29L550 -22L540 -24Q492 -32 460 -32\",120175:\"380 596Q307 596 250 582T158 546T100 493T67 433T56 373V361Q55 361 43 366L31 372V384Q31 455 69 523T173 627Q213 650 284 666T444 683H452Q629 683 735 629Q896 548 896 369Q896 263 839 163Q835 155 818 140Q746 82 662 27T563 -29Q525 -29 386 16T183 62Q147 62 127 52T63 1L48 -14L40 -4L31 5Q83 73 172 149L186 161H199Q291 161 329 181Q357 199 357 231Q357 258 301 316T245 396Q245 423 282 458T349 512T403 543L413 548L425 545L438 541Q373 491 373 462Q373 446 399 415T453 349T480 288Q480 251 433 212Q394 180 348 156L334 148L353 145Q408 134 513 105T654 76Q711 76 745 132T780 277Q780 434 676 517Q637 549 562 572T380 596\",120176:\"527 55Q574 55 619 69T691 97L717 111V85L562 -18Q520 -29 443 -29Q379 -29 325 -15T235 21T180 61T146 98Q74 186 74 307Q74 395 109 472Q113 482 123 489T190 533Q251 568 295 591L308 598L350 580L361 586Q403 612 464 636T564 673T609 686Q610 686 610 685Q612 683 616 670T627 636T646 601Q666 572 686 572H692Q713 572 726 576H728L725 565L723 554L692 544Q660 535 629 526T595 516Q585 514 574 519Q563 527 543 552T507 597T490 617Q467 604 456 579V564Q456 535 473 471T492 393L494 381L613 460L622 446Q630 433 650 411T696 371L703 365L614 312H596L580 322Q568 329 553 340T528 355T510 360Q496 358 491 354T484 345T471 326T435 297Q408 278 370 261T307 235T277 227Q273 227 266 234L256 240L267 245Q280 251 294 258T330 288T353 336Q353 373 335 444T316 530V537Q316 549 322 567Q270 554 233 499T196 370Q196 253 287 157Q392 55 527 55\",120177:\"424 522Q265 596 208 596Q193 596 180 593T150 579T116 542T89 474Q86 465 86 463L59 481L63 494Q87 578 137 627Q191 684 285 684Q334 684 406 658T538 607T621 581Q644 581 706 629L721 640Q722 640 725 630L727 620Q701 592 654 548T582 486L569 487Q533 490 485 504L468 508Q449 503 429 495T387 466T365 422Q365 373 439 299L453 310Q473 325 528 370L588 418Q614 398 642 368T668 331Q667 331 628 296L590 262L582 274Q557 311 526 311Q511 311 487 297T462 278Q462 277 492 244T551 166T581 88Q581 54 570 25T536 -27T505 -56T478 -76Q376 -146 274 -146H270Q199 -146 162 -118T124 -15Q124 12 128 30T132 96V107Q132 144 117 157Q102 169 85 169Q74 169 59 165T32 156T20 151Q20 152 19 158T17 167Q17 168 17 168T17 169T19 170T22 172T27 175T35 179Q131 230 195 230Q231 230 259 202Q270 190 270 171Q269 150 253 87T236 -16Q236 -67 261 -87T322 -107Q380 -107 428 -68Q467 -35 467 30Q467 60 447 91T383 171T316 251Q290 286 278 308T263 339T261 359Q261 384 284 418Q322 469 424 522\",120178:\"742 611Q784 611 812 631V611Q807 607 783 591T718 544T629 476L606 458Q608 458 628 457T667 453T713 443T762 423T804 388T836 335Q844 313 844 289Q844 231 814 182T746 103Q720 82 655 48T546 -18L520 -21Q456 -29 432 -29Q313 -29 223 33Q204 45 183 65T135 119T91 207T74 320Q74 428 109 480Q116 491 127 497T215 546L308 595L343 583L355 591Q387 613 433 636T488 660H489L491 659Q493 658 495 657T500 655L509 650L500 645Q479 635 460 612T441 552Q441 535 447 498T459 433T466 405L625 513L643 526Q620 530 585 546T535 586Q535 587 532 592T527 602T525 610Q525 613 577 649L630 687Q632 687 638 675T653 649T686 623T742 611ZM349 313Q349 328 327 413T305 510V516Q305 531 308 542T314 559T317 566T315 567Q297 567 270 548Q233 524 212 490T191 392Q191 337 206 288T244 207T284 156T316 128Q410 51 535 51Q632 51 675 102T718 217Q718 269 690 314T599 375Q574 381 535 381Q501 381 477 377L466 376Q469 364 469 349Q469 314 457 295T408 258Q366 236 308 219L288 213L279 220L270 227Q284 232 294 236T309 243T320 252T326 260T331 270T336 281Q349 310 349 313\",120179:\"288 139Q288 172 255 224T189 335T156 442Q156 495 242 579Q289 625 361 668Q364 671 368 673T376 678T380 681L384 683L392 676Q401 670 414 661T443 642T477 626T509 619Q543 619 618 668Q625 672 628 674T631 675Q632 673 633 663T633 651L564 595Q556 589 545 580T528 566T516 556T505 548T497 543T488 539T481 537T472 535T463 534T451 534H442Q385 534 304 581L291 589Q290 588 285 583T277 575T269 566T262 555T257 543T255 529V522Q255 507 260 487T276 446T293 409T311 376L321 359Q321 358 322 358T324 359T327 361T333 366Q386 409 481 460L503 472L543 471Q586 471 599 470Q692 459 714 430Q725 416 738 360T752 245Q752 184 742 127T725 51T703 -8Q700 -13 619 -64T518 -123Q508 -126 493 -126Q438 -126 398 -86L427 -52Q456 -17 457 -17Q460 -17 465 -16H473Q474 -21 481 -32T504 -56T539 -69Q572 -69 599 -34Q625 4 625 158Q625 264 609 311T532 378Q508 386 484 386Q455 386 419 372T360 345T337 330L346 313Q375 263 386 227Q389 215 389 202Q389 192 388 184T384 168T376 152T365 138T350 121T331 103T307 81T278 54L194 -24Q130 30 99 30Q85 30 64 20T31 1T16 -10Q15 -11 13 -7Q12 -6 11 -3Q8 4 6 8L32 35Q88 88 117 107T169 126Q177 126 182 125Q218 118 252 84L263 73Q288 113 288 139\",120180:\"500 615Q523 615 550 628T595 655T614 668L623 654L607 642Q512 569 440 534L427 527L413 529Q384 535 340 547T265 565T209 572Q173 572 145 556T101 522T60 465Q58 460 54 460T41 468L32 477L37 487Q96 599 139 640Q187 681 247 681Q275 681 283 680Q313 674 398 645T500 615ZM418 170Q418 186 410 260T401 382Q403 418 403 424L405 433L415 444Q482 515 571 571L582 578Q591 573 607 568L597 560Q522 504 522 450Q522 427 533 357T545 241V228Q545 190 536 159T508 106T478 73T446 48Q343 -25 238 -25Q179 -25 118 15L107 22L79 5Q51 -12 51 -12L38 2L55 18Q106 67 175 122L192 136Q202 130 206 123Q223 91 252 61Q263 50 266 48T278 39T297 32T320 30Q357 30 389 68Q415 102 418 170\",120181:\"65 510Q68 517 74 528T101 569T144 620T202 661T274 680Q308 680 389 628T503 576Q530 576 596 600Q615 607 616 607Q616 602 615 596V585Q605 581 576 568T531 548T485 531T418 509L400 503L358 522Q347 527 327 537T299 550T277 560T257 568T239 573T220 577T201 578H196Q181 578 169 575T135 554T88 502L83 496Q82 496 74 502T65 510ZM424 4Q424 50 395 151T365 313V320Q365 352 369 361T405 403Q431 432 465 462T521 508T547 525L549 524Q551 524 554 523T560 521L571 517L552 498Q515 461 499 430Q485 399 485 366Q485 326 512 231T539 84Q539 -14 460 -77T273 -141Q248 -141 234 -140T198 -131T160 -106T134 -59Q128 -40 124 -16T117 22T108 49T91 69T59 75T15 65L1 59Q-8 76 -7 77Q4 85 22 97T88 129T170 149Q218 149 234 125Q242 112 242 43V21Q242 -17 248 -41T274 -85T322 -105H325H330Q363 -105 396 -75Q424 -47 424 4\",120182:\"234 109Q234 144 194 245T153 404Q153 445 180 490Q232 572 325 626T517 681H524Q612 681 661 658Q683 647 699 632T717 604Q717 600 708 545L699 490L690 489Q681 488 679 488Q675 488 669 504T640 546T577 592Q520 620 446 620Q415 620 386 614T327 594T280 553T262 487Q262 468 265 447T271 413T279 384T285 362L295 371Q320 396 352 421T439 474T538 502Q577 502 596 484T627 428Q642 386 651 373T677 360H682Q698 360 727 369L724 357Q724 354 724 351T722 346V344Q559 289 539 283Q582 272 589 271L615 265L637 189Q662 109 663 108Q668 97 682 84Q698 68 722 68H730H738Q762 68 799 91L803 80L806 70Q795 59 770 40T703 -3T631 -26Q598 -26 578 -8Q548 24 536 92Q524 154 509 183T477 218T428 224Q409 224 385 220T346 212L331 207Q330 205 330 201T331 189T332 178Q332 158 325 116L305 96Q269 60 240 38Q171 -21 123 -21Q72 -21 33 18L20 32L62 74Q96 107 102 112T116 118Q120 118 122 113T131 95T150 69Q171 48 190 48Q198 48 206 51T224 69T234 109ZM519 367Q497 432 450 432Q379 432 313 333L300 314L304 299Q306 294 309 280T315 260L321 235L542 313Q530 325 519 367\",120183:\"277 226Q277 248 253 286T203 369T178 449Q178 490 212 533T284 607Q380 683 532 683Q610 683 639 660T668 583Q668 568 666 546T663 509Q663 478 683 460Q691 452 719 452L738 450Q732 437 729 437Q728 437 652 416T573 394Q554 394 541 409T527 444Q527 449 532 487T538 542Q536 584 501 606T418 628Q389 628 364 620T317 587T295 523Q295 478 333 401T372 276Q372 269 371 267Q371 264 318 206L264 149Q284 141 317 130T433 101T577 82Q619 82 652 95T701 127T728 164T742 196L744 209Q744 210 749 208T759 203T764 199T760 185T751 154T744 129Q714 42 680 13Q628 -28 566 -28Q490 -28 403 -5T249 42T153 66T106 53T70 15T47 -16Q46 -17 30 -5L39 13Q85 100 138 148L147 156L161 157Q218 165 246 179T277 226\",120184:\"134 338Q134 357 81 417T27 504Q27 516 34 530Q55 568 110 615Q190 683 305 683H314Q445 683 495 580L501 569L512 577Q608 646 681 646Q759 646 801 585L808 576L816 583Q860 619 921 650T1041 682Q1063 682 1077 675T1096 660T1112 631T1132 596Q1160 555 1188 555Q1204 555 1228 564Q1230 565 1231 562Q1231 560 1232 554V547L1215 538Q1179 521 1114 475Q1112 474 1106 470T1099 464T1093 459T1088 452T1085 441T1082 425T1081 404T1079 376T1079 339Q1079 282 1084 236T1098 160T1117 112T1138 85T1159 77Q1166 77 1180 81T1207 90L1219 94Q1220 94 1221 86T1222 76L1045 -32Q1044 -32 1004 15L964 64V167Q965 334 970 372V378L994 402Q1032 440 1057 460Q1061 463 1066 467Q1070 469 1070 470T1068 471T1060 474T1050 481Q1040 488 1021 531T996 583Q979 609 947 609Q922 609 887 592T820 537L821 524Q825 484 825 448Q825 268 768 155L759 137L589 -28L579 -20Q533 17 507 17Q475 17 449 -7L436 -18L424 2L441 20Q446 25 456 36T471 52T484 65T497 79T509 90T522 99T534 106T548 112T561 115T576 117Q602 117 639 86Q648 81 648 81Q650 82 657 94T668 112Q711 202 711 373Q711 484 677 533T600 583Q592 583 583 581T569 577T554 568T542 560T528 549T516 539L519 523Q527 485 527 461Q527 444 522 407Q506 266 447 150L437 130L217 -25L208 -15Q165 28 126 28Q89 28 62 1Q47 -14 43 -14Q42 -14 36 -8L28 0L44 17Q96 73 120 92T166 117Q182 123 204 123Q239 123 284 78L295 67Q307 72 337 102Q400 178 400 346Q400 508 325 571Q270 618 208 618Q180 618 168 614T140 594Q124 578 124 564Q124 540 182 480T240 396Q240 359 197 321Q154 285 94 252L80 245L76 248L67 257L61 262L71 268Q82 275 94 284T120 309T134 338\",120185:\"522 492Q521 492 517 502T512 513Q542 444 542 333Q542 226 503 137L498 125L396 53Q308 -8 292 -17T260 -27Q226 -27 191 -9T136 29L145 39Q162 56 192 89L230 129L235 128H241Q276 57 332 57Q358 57 391 80Q403 89 409 100T422 143T428 227Q428 329 406 408T347 530T272 594T196 615Q152 615 135 596T118 558Q118 535 146 502T203 438T232 385Q232 357 195 322T122 265T83 243Q82 242 72 249T61 258L66 262Q72 265 82 273T103 292Q125 314 125 333Q125 351 101 376T51 432T26 492Q26 549 108 614T290 679Q326 679 335 678Q353 675 370 670T400 658T425 642T445 625T463 606T477 588T487 571T495 556T500 543L504 535L523 553Q553 581 569 595T619 632T686 667T757 678Q778 678 793 675T819 664T833 651T844 633T852 617Q884 548 910 548H916Q938 548 962 556L967 542Q967 540 947 531Q909 509 883 492T847 467T838 458Q825 419 825 328Q825 234 833 191T858 121Q875 94 892 77Q898 71 907 71Q912 71 928 76T957 87T971 91L972 88Q972 84 972 81L973 73L957 63Q891 21 806 -23L794 -30L783 -14Q766 13 728 60L713 79V372L724 384Q743 406 765 427T800 460L813 471Q809 472 806 472Q783 479 766 503T741 551T715 594T672 614Q644 614 622 595Q597 576 572 550T534 508L522 492\",120186:\"254 595Q269 583 269 581L262 577Q256 573 247 566T228 549T212 527T205 502Q205 480 266 386T328 277Q328 234 239 150L221 134L231 133Q264 131 376 99T516 62Q567 50 604 50Q614 50 626 52Q643 57 662 71T703 115T739 198T753 323Q753 454 692 517Q652 555 584 565T382 577Q365 577 357 577H308L300 591L292 606Q292 608 342 665L392 724L403 725Q406 725 411 726H416L417 725L412 715Q408 705 408 698Q408 684 423 679Q431 677 516 672T663 655Q757 634 806 593T873 463Q881 421 881 380Q881 340 874 306Q859 223 809 147Q801 134 789 124Q595 -30 456 -30Q395 -30 289 3T147 36Q134 36 121 33T98 26T76 15T59 4T44 -8T32 -17L22 -7L12 4L56 59L100 114L116 118Q217 142 217 199Q217 230 185 276T120 365T87 430Q87 435 109 464T172 534T254 595\",120187:\"247 398Q247 372 206 334T126 272T83 247Q82 247 72 253T61 261Q60 261 61 262T66 265Q127 306 127 343Q127 364 63 430Q42 451 38 458T33 480V490V497Q33 526 63 567Q112 632 170 660T282 688Q341 688 384 667Q454 633 482 566Q483 565 484 566T496 574Q562 623 630 653Q699 681 751 681Q778 681 797 673Q818 662 830 609Q835 580 843 564Q863 524 895 524H901Q917 524 932 528Q936 522 938 518T942 513T942 511Q873 480 836 454Q789 423 789 395Q789 362 834 298T880 200Q880 170 867 145T820 81Q733 -20 647 -20Q581 -20 499 21V9Q499 -16 502 -53T509 -116L512 -141L370 -223L357 -216Q344 -209 344 -208L348 -196Q370 -113 370 33V52L355 58Q307 76 284 76Q258 76 228 60T183 29T141 -11Q137 -7 133 -2L126 7L134 18Q181 89 210 121T278 170Q304 179 328 179Q336 179 358 177L370 175Q368 268 367 359Q367 416 363 434Q362 438 362 441Q348 527 302 574T203 621Q169 621 148 599T127 557Q127 535 187 476T247 398ZM673 315Q673 357 786 442Q786 443 776 444T750 449T727 462Q719 471 716 484V496Q715 507 715 515Q715 571 698 588Q680 611 643 611Q592 611 547 571Q534 558 511 522L499 505V139L543 123Q702 64 744 64Q770 64 781 79T793 112Q793 143 733 217T673 315\",120188:\"254 595Q269 583 269 581L262 577Q256 573 247 566T228 549T212 527T205 502Q205 480 266 386T328 277Q328 234 239 150L221 134L231 133Q264 131 376 99T516 62Q567 50 604 50Q614 50 626 52Q643 57 662 71T703 115T739 198T753 323Q753 454 692 517Q652 555 584 565T382 577Q365 577 357 577H308L300 591L292 606Q292 608 342 665L392 724L403 725Q406 725 411 726H416L417 725L412 715Q408 705 408 698Q408 684 423 679Q431 677 516 672T663 655Q757 634 806 593T873 463Q881 421 881 380Q881 340 874 306Q864 250 838 196T791 126Q748 93 733 82L715 69Q714 68 723 60T748 40T774 23Q806 2 832 2Q849 2 870 6T904 14L917 17Q917 12 918 6V-3L882 -22Q806 -60 778 -73L755 -83Q640 -36 596 -7L586 0L576 -4Q513 -30 457 -30Q394 -30 289 2T149 35Q119 35 93 22T52 -4T36 -17T24 -7T12 4L56 59L100 114L116 118Q217 142 217 199Q217 230 185 276T120 365T87 430Q87 435 109 464T172 534T254 595\",120189:\"31 498Q34 541 76 586T176 659T279 688H290Q377 688 429 653T506 569L511 558L526 572Q620 663 707 682Q722 685 737 685Q781 685 804 665T830 619T838 565T854 525Q866 511 897 511Q917 511 925 513L937 515Q938 515 941 509T944 501T925 493T870 470T803 438Q735 406 735 401Q735 400 741 399T767 390T814 374L828 367L829 307Q829 233 833 202T852 144Q873 109 896 90Q906 82 928 82T976 95V92Q976 88 978 72L807 -28Q768 39 733 87L718 108V149Q718 230 714 257T693 298Q654 333 580 333Q524 333 520 329Q520 300 489 224T443 133Q441 131 333 53T223 -27Q221 -26 204 -11T169 16T136 28Q110 28 66 -8L56 -16Q52 -13 40 -1L48 7Q165 124 211 124Q232 124 287 77L298 67Q309 73 337 97Q397 150 397 347Q397 419 379 474T330 560T269 604T207 619Q177 619 152 601T126 563Q126 540 185 479T244 387Q240 336 160 289Q144 278 98 255L80 246L62 261L79 272Q96 283 113 301T130 337Q130 353 115 373T81 410T47 451T31 498ZM524 358Q537 358 657 405T777 457Q777 459 768 459Q749 462 738 474T723 499T714 539Q706 585 697 599Q681 618 657 618Q632 618 597 595T532 515L525 502L524 441Q524 375 523 369Q523 358 524 358\",120190:\"457 -31Q356 -31 272 6T135 120T82 304Q82 372 106 430T170 527T241 588T305 626Q341 643 386 657T460 678T495 685T554 660T674 609T778 584Q800 584 818 591T848 610T866 633T878 651T883 659L893 649L901 639Q879 574 803 532T666 490Q661 490 657 490T650 491T641 492T633 495T622 500T610 505T595 513T577 522T554 533T527 547Q436 594 415 602Q393 608 374 608Q303 608 253 545T202 386Q202 229 307 135T568 41Q674 41 748 85T822 198Q822 244 779 283T639 322Q595 322 499 303T383 283Q358 283 335 290T291 318T270 374Q270 418 313 460T424 510H431L435 505L440 500Q425 496 403 475T380 427Q380 382 431 373Q437 372 475 372Q543 372 626 388T742 404Q831 404 868 362T905 260Q905 182 831 108Q692 -31 457 -31\",120191:\"666 641Q737 641 794 686L802 662Q790 648 734 596L677 541L664 538Q630 528 583 528Q540 528 482 537L461 541Q402 512 402 456Q402 427 439 387T512 311T549 253Q549 220 455 139L440 126Q541 75 586 75Q600 75 619 80T654 94T685 110T709 124T719 130Q722 125 725 119L730 108Q700 72 568 -18Q551 -30 542 -30Q495 -30 404 6T270 42H263Q213 42 142 -11L131 -19L129 -8Q126 1 126 4Q218 84 301 126L316 134H406L413 142Q436 165 436 189Q436 202 421 221T364 281Q336 307 318 328T296 356T283 381L290 394Q338 478 410 540Q419 549 417 549Q415 550 369 558T268 575T195 584Q153 584 127 567T100 523Q100 499 116 479T151 447T170 433Q170 429 171 428Q171 427 131 394T88 359Q82 363 73 370T47 403T31 457Q31 513 79 565T197 648T332 679Q369 679 490 660T666 641\",120192:\"273 244Q273 281 244 331T186 428T155 502Q155 524 165 536Q239 634 333 688Q338 684 345 680L356 672L344 664Q310 642 295 624T280 582Q280 550 303 505T348 407T371 300Q371 270 362 248L247 123L358 92Q452 64 484 64Q507 64 523 72Q553 87 573 109Q583 121 586 146T593 283Q594 303 594 344Q594 401 591 461T584 558L581 595Q598 600 623 611T672 634T719 659T754 678L768 686Q770 686 784 673L782 670Q781 668 777 664T768 655Q747 635 738 616T721 535T714 359Q714 205 723 176Q727 164 744 133T771 89Q780 75 804 75Q814 75 853 87L867 92L871 73L671 -39L654 -10Q636 20 619 50T600 83Q600 84 589 75T539 34Q478 -16 475 -19Q469 -22 449 -28T414 -34Q410 -34 394 -32Q356 -28 282 -2L237 15Q169 38 126 38Q106 38 85 27T51 4T37 -8T27 -1T18 8Q18 10 70 63T124 116Q154 123 176 131T223 154T260 191T273 244\",120193:\"133 343Q133 360 79 416T25 496Q25 523 58 563T118 624Q197 685 293 685Q331 685 339 684Q453 665 489 558L493 546Q521 570 553 596T640 653T725 684Q753 684 783 672T844 641T889 618Q895 616 912 616Q924 616 936 617T956 620T965 622T966 612V604L952 595Q924 576 895 549Q864 517 856 496T847 448V434Q847 395 848 388L859 323Q874 241 874 212Q874 142 830 96Q796 62 724 14Q661 -29 603 -29Q555 -29 421 28T242 86Q182 86 110 31Q105 28 102 26T99 25Q88 36 88 42Q95 54 222 142Q252 163 262 165Q319 183 344 218Q378 266 378 377Q378 444 362 494T319 571T266 610T212 623Q181 623 156 603T131 562Q131 539 154 512T206 458T243 416Q246 409 246 399Q246 387 242 377T225 351T178 311T94 259L79 251Q72 256 68 261T62 268L61 270L70 277Q131 318 133 343ZM822 526Q778 531 719 564T628 597Q611 597 579 574Q543 543 513 506L505 495L506 473Q506 469 506 461T507 449Q507 348 467 271L462 261L404 218L348 174Q349 173 356 173Q384 169 450 144L546 105Q665 56 708 56Q737 56 746 72T756 118Q756 129 755 135L741 219Q725 314 725 334V344Q725 416 736 431Q748 450 815 510L832 526H822\",120194:\"133 317T133 338T80 413T26 496Q26 532 83 591Q100 608 111 616T151 644T219 672T304 682Q381 682 434 646T506 564L510 557Q513 557 534 573L677 665L707 683L790 561L803 572Q933 682 1001 682Q1037 682 1098 650T1193 616Q1208 616 1222 619L1235 622Q1239 622 1239 616Q1239 611 1240 609Q1240 608 1206 577T1138 503T1104 430Q1104 409 1123 330T1142 208Q1142 183 1136 147Q1127 118 1117 106Q1114 103 1031 48T935 -14Q930 -18 908 -22T862 -27Q826 -27 759 -6T647 26Q597 38 578 38Q573 38 561 33T533 20T505 4T480 -10L469 -16L452 -26L439 -28Q423 -30 411 -30Q358 -30 279 7T169 45Q125 45 58 -5L47 -14L41 -4L35 8Q35 11 56 29T113 75T181 125L200 139H217Q279 143 320 180T377 270T394 393Q394 453 378 498T334 568T277 605T213 617Q177 617 155 607Q140 600 130 587T119 560Q119 545 137 522T177 479T217 434T236 393Q236 324 98 251L89 246L76 253L63 261Q91 275 112 296ZM1088 526Q1066 526 1004 556T909 586Q863 586 816 539L802 526L804 514Q814 461 814 411Q814 319 781 238Q772 214 760 198T730 165T702 136L715 133Q759 122 848 90T973 57Q1003 57 1017 80Q1022 93 1022 116Q1022 152 1003 241T983 377V391Q983 405 985 409T1002 429Q1019 450 1045 475T1090 514L1107 528Q1104 527 1102 527T1096 527T1088 526ZM699 358Q699 391 696 419T688 467T675 503T660 530T642 550T626 563T608 574T593 582Q581 575 559 554T524 512Q523 510 523 477Q523 315 444 218L435 207L368 169Q301 132 301 131Q307 128 315 125L377 99Q476 57 515 57Q534 57 608 94L627 102L636 111Q699 187 699 358\",120195:\"273 679Q354 674 408 633T477 525L484 533Q496 548 524 574T571 615Q594 633 625 649T675 673T699 681Q724 632 747 607Q754 601 756 599T765 594T777 591T794 590Q818 590 834 594V585L835 577L704 513L693 518Q657 534 631 560T597 599Q596 601 581 584Q495 490 489 379V366H562L681 369Q682 369 679 366T668 355T651 341L620 314H485V295Q490 190 543 125T686 60Q720 60 789 88L801 93V89Q798 83 798 66Q781 59 685 -10L665 -25L634 -30Q596 -35 594 -35Q570 -35 536 -23T477 19Q461 37 445 67T418 118L409 138Q401 131 388 120T340 79T273 28T206 -12T151 -31Q129 -31 90 -12T32 22L113 101Q114 101 120 96T136 84T160 69T189 56T221 51Q256 51 305 90Q376 149 376 301V315H293Q276 315 251 315T210 314T190 313L168 312Q168 313 200 340L231 368L238 367Q275 367 311 366H378V387Q376 470 355 512T291 572Q274 579 252 579Q223 579 197 568T156 544T131 519T117 508Q112 512 108 518L99 527L117 545Q177 604 255 665L273 679\",120196:\"34 496Q34 518 53 549T107 610T195 661T310 682Q357 682 398 663T460 611Q467 600 475 583T489 554T495 542Q495 544 531 570T617 629T700 676L724 688Q742 670 756 657T784 635T806 621T830 606T856 592Q878 416 878 340Q878 154 805 -3L798 -20L779 -40Q706 -113 613 -163T421 -214Q359 -214 317 -196T256 -160L306 -63L313 -64L320 -66L326 -79Q337 -104 349 -120T392 -151T470 -166Q576 -166 644 -101Q750 7 750 292Q750 426 721 495T617 565H611Q563 565 513 509L506 501L508 493Q508 490 509 475T510 445Q510 319 458 236L451 225L436 216Q406 198 365 169T318 134L332 127Q336 126 397 103T489 80H493Q527 80 593 129L604 137L607 127Q610 119 610 116Q610 114 592 95T543 46T484 -4Q450 -27 446 -27Q441 -27 402 -18Q365 -9 290 20T188 50Q135 50 64 -7L52 -17L43 -7L34 2L51 19Q118 87 177 132L192 143H215Q259 145 289 155T335 184T355 214T366 245Q382 306 382 388Q382 426 381 436Q368 520 318 570T214 621Q184 621 165 608T142 583T137 562Q137 541 163 508L201 469Q245 425 251 408Q253 403 253 398Q253 383 240 366T212 335T161 295Q128 271 99 253L89 247L77 256L65 266L76 273Q125 301 134 329Q136 334 136 342Q136 357 124 372T88 410T49 455Q34 479 34 496\",120197:\"278 601Q242 601 212 591T167 570T121 533Q114 528 111 525L93 550Q223 661 244 667Q299 677 356 677Q415 677 456 666T515 634T541 596T549 555Q549 513 529 478T480 421T424 388T377 372Q365 370 365 367Q365 365 389 365T450 358T523 337T588 282T623 183Q624 177 624 161Q624 20 524 -60Q415 -148 285 -148Q242 -148 213 -139Q181 -131 159 -109Q136 -87 127 -56T114 6T104 49Q94 69 57 69Q38 69 13 58L1 53Q1 55 0 59T-3 68T-4 76Q78 130 138 142Q150 144 162 144Q213 144 227 120T242 31Q242 -30 263 -66T345 -102Q397 -102 444 -52T491 107Q491 172 471 211T428 265Q392 288 306 288Q269 288 233 284L218 282Q208 289 208 291L229 324L251 359Q250 360 248 360Q239 360 248 371L256 381H273Q344 385 378 409T413 495Q413 537 384 569T278 601\",120198:\"80 129V151Q80 241 99 363Q99 367 111 372T172 401T285 465L297 472Q340 455 405 443L423 440L455 453Q486 467 489 467L497 461L494 451Q480 390 480 292V283Q480 207 483 155L484 143L535 80L558 90L582 99Q586 95 586 83Q586 81 513 25L443 -29Q410 16 386 40L371 55V61Q371 63 371 67T370 74V80L278 25Q186 -29 184 -31Q182 -32 160 -12T112 35T80 75V129ZM359 366Q334 366 300 371T243 382L221 388Q218 388 212 375T200 323T194 228Q194 191 197 152L198 139L217 120Q245 92 269 74L279 66L304 78Q338 95 349 100L369 110V152Q368 164 368 210T367 275Q367 358 366 361V366H359\",120199:\"99 398Q99 610 86 662Q86 665 95 669T106 674L108 669Q109 664 112 654T119 635Q122 626 125 616T130 601L131 596Q214 649 273 678Q295 690 298 690Q299 690 304 688T313 682L317 679Q275 653 240 612Q210 569 210 469V459Q210 450 210 432T211 406L212 378L285 425Q301 435 321 447T350 466L360 472Q360 473 361 473T368 471T401 456T465 429L501 414V408Q504 386 504 309Q504 255 500 203T491 125T485 97Q485 95 445 74T343 23T237 -24L214 -32Q197 -22 165 3T109 49T87 73Q99 169 99 398ZM386 251Q386 320 380 347V350L305 374L282 382L214 348L213 274Q213 184 214 165V131L230 119Q288 76 349 54Q386 137 386 251\",120200:\"227 393Q215 393 210 351T205 269Q205 161 213 153Q220 145 244 125T290 88L312 72L365 92Q414 113 418 113V93L365 60Q255 -9 221 -26L211 -18Q158 21 91 88L90 107Q87 167 87 225Q87 267 90 302T96 351T100 366L295 473L311 470Q340 464 368 454T410 437T424 429L347 334L342 333H337L325 342Q299 363 271 378T228 393H227\",120201:\"88 117Q88 177 91 231T97 310T102 341Q102 343 118 357T168 397T239 447L257 459L268 454L278 449Q242 416 238 412L219 394Q219 391 216 378T211 349T206 307T203 249Q203 211 206 166L208 148Q224 132 261 108T333 70Q341 66 342 67T350 79Q393 157 393 302Q393 368 388 406V411L371 424Q199 558 101 558Q69 558 28 545L18 542L8 549L-1 557L24 569Q61 587 147 621L177 632Q179 631 194 627T216 621T240 613T269 602T302 589T340 571T382 549T431 522T484 488Q504 475 504 472Q511 449 511 365Q511 248 474 129L468 108L451 96Q427 77 347 28T254 -28Q235 -20 174 21T89 86L88 117\",120202:\"309 69Q391 98 416 108Q418 106 422 100T425 92Q419 86 326 30T229 -27Q228 -27 207 -13T154 27T97 76L85 87L84 106Q81 152 81 194Q81 295 93 359L95 369L286 471L313 449Q376 397 414 372L428 362Q428 360 375 318L188 181V170Q188 156 189 153V148L203 138Q228 119 266 94T309 69ZM209 389Q208 388 204 366T194 307T187 244Q187 225 188 225T201 233L245 261Q283 284 291 291Q324 313 324 316L296 334Q280 343 259 357T224 380L210 390Q209 390 209 389\",120203:\"128 400Q127 401 121 422T108 478T99 540V555L111 569Q135 597 165 626T214 671T235 687L249 678Q263 668 282 659T315 650Q335 650 362 666L372 654L286 569H271Q205 576 173 586V583Q173 558 208 492T252 401Q253 399 310 399T367 398L332 355H254V311Q251 160 235 16Q230 -28 226 -36Q225 -38 221 -45Q171 -140 121 -211L113 -222H104Q94 -222 94 -220Q94 -215 105 -187L121 -145Q139 -80 139 35V93Q139 222 135 314L134 354Q134 355 84 355H35L84 399H106Q128 399 128 400\",120204:\"92 71Q92 74 91 88T88 128T86 183Q86 230 91 275T102 342T109 366Q115 372 207 422T305 472Q407 426 431 426Q435 426 476 445L519 465L525 463L532 461Q497 392 497 268Q496 255 496 233Q496 179 516 92T539 -10L541 -22L526 -38Q441 -126 355 -194L339 -206L327 -207Q324 -207 319 -207T310 -208Q242 -208 171 -179T73 -131L56 -141Q40 -150 38 -150Q17 -140 17 -137Q17 -136 18 -136T98 -79L176 -23Q174 -21 134 24T92 71ZM226 393Q224 393 221 372T214 312T210 235Q210 182 214 144L215 132L230 118Q281 70 301 66Q304 66 331 80T373 105L384 112L383 165Q383 224 387 309Q387 314 387 319T387 329T388 336T388 341V343Q388 344 381 344T339 354T249 384Q246 385 243 386T236 389T231 391T228 392L226 393ZM414 -80Q414 -64 411 -43T403 -1T394 37T386 66T382 79Q381 79 286 15T189 -52Q312 -125 365 -125Q397 -125 405 -115T414 -80\",120205:\"95 661Q95 662 103 667T113 672L126 634L137 596L147 602Q235 656 275 677L292 687L303 680Q305 679 307 677T312 674L313 672L310 670Q307 669 301 667T289 660T274 649T259 634Q250 622 244 611T233 585T226 560T222 528T221 497T220 456T219 413V377L232 384Q244 391 271 409T339 455L362 471L383 461Q425 440 491 415L504 410V406Q507 399 507 269Q507 76 486 -21Q485 -30 483 -33T461 -57Q382 -139 299 -207L281 -197L263 -186L266 -185Q268 -184 280 -177T312 -155Q344 -130 353 -116Q394 -59 394 117Q394 162 391 216T386 301T382 335Q382 338 365 346T323 364T281 376L250 362Q220 347 219 347Q213 336 213 232Q213 177 217 144L218 128L224 119Q244 92 263 71L272 60Q206 21 157 -24Q156 -24 151 -16T132 11T98 52L89 62L91 103Q104 289 104 436Q104 471 103 506T101 568T99 616T96 649L95 661\",120206:\"73 613L164 686L184 666Q200 650 214 637T235 620T242 614T203 577T162 540Q158 540 122 570T73 613ZM92 58Q92 63 94 83T98 142T101 234Q101 318 97 358V366L59 387L40 379L21 371Q20 371 12 376T3 382L38 406Q78 431 125 466L138 477Q149 468 186 444L219 422V389Q215 324 215 247Q215 136 222 123Q226 113 238 98T258 83Q263 83 292 94L322 104Q322 103 324 97T327 89Q327 88 317 82T272 52T190 -7Q166 -25 164 -25L112 35Q92 55 92 58\",120207:\"74 611L155 682Q172 666 186 655T208 636L235 614Q227 606 191 574L154 540L135 556Q101 582 84 601L74 611ZM10 377L144 477Q145 476 184 453T229 428L233 425V416Q238 346 238 252Q238 93 215 -16L213 -30L185 -57Q29 -203 19 -203Q17 -203 -19 -189L-9 -183Q52 -146 78 -116T114 -37Q120 31 120 192V237Q120 327 113 351T72 380L53 372Q34 362 32 364L10 377\",120208:\"106 72Q110 105 111 193T114 294V308H74L34 309L83 346H115V430Q114 591 106 652Q105 662 107 665T114 668T123 672Q125 672 139 635L152 597L154 598Q156 600 160 602T167 607Q193 625 226 644T279 672T302 682L312 676L321 670L312 665Q281 649 263 626T241 587T233 547Q232 541 231 530T230 510T230 501Q231 501 265 522T334 564T369 583L380 570Q428 509 428 481Q428 475 427 470T423 459T416 448T404 434T389 418T369 397T344 371L321 347L365 346H409L372 308H227V294Q227 272 230 208T234 138Q234 136 256 119T302 84L324 68L372 88Q421 108 422 108T432 90L421 83Q373 53 270 -5L234 -25L204 -1Q172 25 124 60L106 72ZM336 434Q336 452 327 472T308 503T297 514Q296 514 290 510T275 499T264 490Q230 458 230 358V346H247Q268 346 276 350T302 372Q328 398 335 423Q335 424 335 428T336 434\",120209:\"111 275Q111 406 108 518T104 650V657Q105 657 109 660T117 665T122 666L133 629L144 594L161 606Q218 642 272 670L294 681Q295 681 300 677T306 672L302 669Q298 666 292 662T278 651T263 637T251 621Q232 587 227 530T222 343Q222 226 230 125L231 112L244 98L258 83Q271 87 285 92L312 102V84Q297 72 231 24T163 -23L100 55Q110 141 111 275\",120210:\"115 203Q115 257 114 291T112 338T111 355Q111 357 93 370L75 384L54 375Q32 366 31 365Q27 365 16 378Q25 383 89 430L152 476Q175 453 228 420Q229 420 229 418T229 410T227 394L225 369Q279 400 315 425T363 461T376 471Q480 424 514 416V412Q514 411 514 404T513 392L511 376L520 382Q529 387 548 399T584 422Q599 432 618 444T648 463L657 469H658Q661 469 681 461T735 440T796 420Q803 418 803 416Q801 414 798 390T791 325T788 247Q788 220 790 172T794 123Q799 115 814 97T835 78H838Q841 78 867 89L895 101Q896 101 896 100T897 92T900 78L873 62Q810 23 761 -12L736 -30Q735 -30 729 -22T707 7T671 48L661 59Q674 93 674 207V219Q674 341 670 344Q655 353 591 372L576 376L544 364Q511 351 510 351Q507 349 507 224V132L535 95Q541 87 548 78T560 63L563 58Q563 57 504 15T444 -28L385 53L387 67Q396 114 396 206Q396 289 393 334Q393 346 390 348Q369 358 306 373Q301 373 265 361L228 349V335Q227 322 227 284Q227 206 231 157Q231 151 231 144T232 133V129Q232 125 259 90Q286 56 286 53Q287 53 284 51T273 43T258 31L173 -31L166 -20Q160 -11 145 7T119 38T108 59Q108 62 110 81T113 133T115 203\",120211:\"608 88Q572 65 535 37T477 -8T455 -25Q432 7 389 53L375 68L378 82Q386 160 386 195V221Q386 284 385 307L384 344Q352 359 306 373L286 379L213 353V273Q214 229 214 161V129L275 62L163 -28L150 -14Q136 0 121 16T91 44Q86 48 86 50Q95 83 96 148Q96 224 89 340L88 366L79 374Q69 384 67 385L64 388L55 383Q52 382 44 378T33 373L21 367L13 374Q5 379 5 381Q5 384 69 428L133 473Q135 473 147 464T179 443T215 424L214 400V376Q271 404 342 457L363 472Q363 473 364 473Q366 473 375 469T418 449T502 414L512 411V407Q502 330 502 217V197V132L523 109Q527 104 533 97T543 87T547 83L550 80L578 92Q603 103 604 103Q606 103 608 88\",120212:\"107 102Q107 178 112 242T123 334T129 362Q129 363 140 368T199 400T315 469L336 482L346 476Q409 439 498 414L514 410L515 389Q515 208 502 141Q494 101 491 94Q490 89 478 81Q430 51 375 23T288 -20T254 -34Q250 -34 200 -1T119 56L108 65L107 76V102ZM389 355Q367 358 346 363T309 372T282 381T264 388L257 390H256Q254 390 249 381T238 348T227 293Q226 280 226 237Q226 183 231 146L232 131L244 122Q285 91 323 74T374 57H377L380 68Q405 154 405 267Q405 315 401 349V354L389 355\",120213:\"66 435Q66 445 117 501T173 557Q174 557 183 555T193 551Q174 526 174 509Q174 496 190 472T233 428V386L377 482L399 471Q450 445 509 425Q519 421 519 420L518 419Q518 418 518 416T517 410Q517 405 518 381T519 335Q519 222 501 137Q492 84 489 84L473 75Q457 66 423 44T354 -6L338 -19L329 -13Q320 -8 313 -4T297 4T284 10T270 14T258 17T245 20T233 22V12L241 -161L214 -172Q187 -184 160 -195T131 -207Q127 -207 112 -202L113 -188Q113 -182 115 -77T118 31Q118 32 109 32Q63 27 23 0L10 -9Q5 -4 -1 8Q1 13 52 57T114 101H115L117 123Q117 141 117 230V359L110 367Q85 394 71 421Q66 433 66 435ZM384 83Q386 83 389 110T396 180T400 254Q400 294 395 339L394 349L379 355Q308 383 294 383Q290 383 263 372L234 360L233 245V130Q270 125 305 113T361 92T384 83\",120214:\"362 -196Q375 -92 375 47V78L282 24Q189 -29 188 -30Q187 -30 139 21T90 75Q87 84 87 158Q88 206 94 259T107 342L113 372L308 478L322 473Q374 452 421 444L433 442L503 485Q515 479 515 477Q485 378 485 56Q485 -100 494 -164V-171L381 -211L371 -207L362 -202V-196ZM280 72Q301 77 323 86T358 101T372 110Q372 268 377 346L378 358H374Q368 360 358 360T323 365T257 380L234 386Q231 386 229 379Q215 353 211 310T207 180Q207 152 208 150Q210 142 235 114T280 72\",120215:\"23 367Q21 370 18 374T14 380L13 382L151 472L236 411L238 381L290 426Q298 432 307 439T322 452T333 461T342 467L344 469Q382 410 404 399Q410 397 416 397Q423 397 432 399T446 403L451 405Q453 405 453 399V393Q430 374 404 356T364 328T350 318L349 317Q321 320 276 356Q257 371 256 371Q253 374 249 366T242 351Q232 321 232 236Q232 214 232 205T232 182T233 162T235 148T238 137T242 129T249 120T257 114T268 105T281 95Q313 70 314 70L358 85Q377 92 389 96T402 100V90L403 80L229 -26L221 -18Q195 6 166 29T121 63T105 76T106 82T110 97T114 121T117 158T119 208Q119 269 114 329L113 341L103 350Q90 362 67 380L45 374L23 367\",120216:\"189 331Q190 304 196 282T207 252T214 244Q239 244 348 292L371 302L382 297Q398 290 415 279T433 265Q442 238 442 166Q442 103 423 45Q416 42 380 29T310 3T244 -26L227 -34Q139 40 73 40Q61 40 48 37T24 30T6 22T-8 14L-13 11Q-14 11 -18 18T-23 26T38 75T102 125Q107 128 146 131H153Q192 131 296 56Q318 40 318 43Q323 48 323 114Q323 157 321 177L319 194Q308 208 291 216T261 225Q239 225 160 185L123 167Q85 205 79 227Q78 230 78 304V377L171 428Q264 479 265 478Q268 478 287 465T334 440T384 427Q423 427 475 463L478 453Q481 446 481 442Q481 439 410 391L339 342H331Q309 345 277 361T222 391T198 406T195 399T191 372T189 331\",120217:\"328 69Q401 102 403 102Q404 102 405 94T406 84Q406 83 318 28L230 -27Q223 -21 206 -5T171 25T132 54L124 60V71Q129 154 129 297V359H43L44 363Q44 365 44 367L45 369L48 372Q51 374 57 378T68 387L90 405H129V553L285 648Q304 641 306 640L260 598V592Q259 589 255 505T249 413V405H353V402Q353 399 328 379L303 360H245V319Q245 150 253 125Q257 115 276 101T311 78T328 69\",120218:\"444 -31Q444 -29 384 66Q382 66 364 58T309 30T231 -17Q214 -29 212 -29L197 -20Q172 -4 140 11T88 34L68 42Q68 43 73 49T85 67T100 98T113 149T118 221Q118 272 105 332L100 356L58 383L23 365L9 379L76 425Q141 472 144 472Q144 471 183 443L221 414V404Q224 365 224 275V253Q224 159 196 113Q191 104 193 104Q203 104 285 72L308 62L374 89L375 106Q375 266 373 340Q373 364 371 396V424L430 445L491 467Q493 467 499 463T505 457Q505 456 503 442Q488 335 488 187V158L529 81L534 80Q541 80 568 90L598 101Q605 94 602 87L524 27Q445 -32 444 -31\",120219:\"95 67Q104 80 104 193Q104 261 100 321L98 355L91 363Q56 402 56 421Q56 441 82 472T132 524T159 546Q174 542 175 542Q159 520 159 501Q159 481 205 432L221 415L220 401Q219 394 219 387L288 429Q309 441 325 451T347 465T358 472T365 476L504 415V409Q504 408 505 374T507 318Q507 155 474 91L469 80L343 26Q314 14 281 0T232 -20L216 -27L202 -15Q192 -5 152 28Q141 35 126 45T103 60T95 67ZM386 349Q302 389 287 389Q271 383 253 375L220 361V136Q226 120 256 100T312 68T342 56Q355 56 360 68Q389 134 389 258Q389 310 386 341V349\",120220:\"90 58T90 59T92 64T97 78T102 105T107 150T109 218Q109 290 103 350V356L83 377Q55 407 55 425Q55 445 138 528Q158 549 162 549L164 548Q165 548 167 548T170 547L175 546L172 540Q168 533 165 523T161 502Q161 479 216 430L229 419V382Q232 382 366 471Q407 445 500 408L511 404V387L512 370L595 420Q678 469 679 469L693 462Q756 431 795 417L815 409L814 380Q812 187 782 96Q774 71 766 62T744 48T684 25T577 -23L557 -32L546 -26Q536 -19 519 -10T481 10T436 31T393 47Q384 50 380 50Q380 52 381 58T384 77T387 104Q391 174 391 256V292L390 333L377 340Q350 357 304 373L294 376L227 355V348Q224 322 224 243Q228 117 232 112L235 108Q238 103 245 95T257 80L281 50Q281 49 227 10T172 -29L159 -13Q133 19 116 36T94 56ZM652 64Q658 64 667 84T685 162T697 303V336L686 341Q653 356 619 367L591 376Q590 376 553 361T514 344T512 324T510 275T508 221Q508 167 510 152T521 126Q537 112 590 88T652 64\",120221:\"8 -90Q8 -68 13 -63Q13 -56 53 -8T120 63L128 71L129 85Q133 120 134 182Q134 308 131 331T106 365Q100 367 97 369L75 381L35 365L20 377Q20 378 47 397T110 440T161 471L253 413V396Q253 378 254 378L309 422Q364 466 365 466Q365 467 366 466T370 461T376 454Q403 419 426 396L441 380L438 377Q438 376 433 372T420 359T404 344L372 314Q351 320 338 327T310 344T277 364Q261 364 252 316Q251 306 251 235Q251 136 255 129Q257 127 258 124T268 113T298 92Q334 68 335 68Q340 70 349 73T377 84T408 95T421 99Q422 99 422 90L423 82L334 26Q246 -28 243 -28L200 8Q156 43 148 43Q144 43 130 36T99 9T83 -36Q83 -67 121 -89T198 -118L237 -124V-129L238 -133L193 -160Q183 -166 171 -173T152 -184L146 -188Q140 -187 131 -185T98 -173T56 -154T23 -127T8 -90\",120222:\"280 53Q272 47 246 27T199 -10T176 -27L167 -18Q137 17 107 44L90 60L93 71Q108 130 109 290V331Q109 339 109 344T108 353T107 359T105 364T102 369T97 374T91 381Q60 412 60 432Q60 448 86 479T138 534L164 557Q168 553 180 553Q163 532 163 511Q165 491 186 468Q206 443 231 423V404L232 385L371 477L389 468Q439 441 498 418L512 412V386Q512 360 507 190T500 14Q488 -26 445 -67Q401 -111 355 -148T282 -203T249 -221Q247 -220 230 -210T213 -199T229 -191T269 -172T306 -151Q361 -120 379 14Q391 92 391 182Q391 218 386 305Q384 339 380 341Q363 353 330 366T288 379Q282 379 258 368L230 356V181V141Q230 127 232 120T236 108T251 89T275 59L280 53\",120223:\"153 371Q141 371 126 365T100 354T78 340L65 331L57 338L50 346L62 356Q133 419 222 471Q274 453 306 422T338 366Q338 356 329 346T283 301L243 264L262 257Q298 246 361 214Q378 154 378 73Q378 33 371 -9T356 -74T345 -104Q340 -106 267 -160L191 -214H177Q60 -214 13 -150Q-7 -122 -7 -115Q-7 -112 19 -77T106 25T241 149Q241 152 227 158T181 173T109 185V190L108 194L158 229Q212 267 223 278T234 306Q234 329 208 350T153 371ZM258 1Q258 42 257 68T254 105T252 118Q235 105 210 85T144 22T102 -45Q102 -79 146 -106T234 -133H238Q248 -128 254 -80Q258 -58 258 1\",120224:\"183 181Q183 179 152 91T118 0H28L154 346L280 693Q281 694 333 694H385L511 349Q636 4 638 2Q638 0 584 0H530L464 183H184L183 181ZM324 606Q319 578 292 492T238 332T210 256Q210 254 324 254T438 255L429 281L419 308Q409 336 395 378T365 465T339 551T324 611V606\",120225:\"425 363Q438 363 465 353T526 324T585 270T610 192Q610 132 561 78T426 7Q404 2 387 2T240 0H90V694H227Q373 693 396 689Q484 673 533 623T583 517Q583 494 574 473T551 437T520 409T487 388T456 374T433 366L425 363ZM490 516Q490 527 485 539T467 568T423 599T347 621Q340 622 262 623H188V399H261H286Q432 399 478 475Q490 496 490 516ZM514 190Q514 245 462 280T343 322Q336 323 259 323H188V71H274Q365 72 388 77Q445 88 479 121T514 190\",120226:\"59 347Q59 440 100 521T218 654T392 705Q473 705 550 680Q577 670 577 667Q576 666 572 642T564 595T559 571Q515 601 479 613T392 626Q300 626 232 549T164 347Q164 231 229 150T397 68Q453 68 489 80T568 120L581 129L582 110Q584 91 585 71T587 46Q580 40 566 31T502 5T396 -11Q296 -11 218 41T99 174T59 347\",120227:\"88 0V694H237H258H316Q383 694 425 686T511 648Q578 604 622 525T666 343Q666 190 564 86Q494 18 400 3Q387 1 237 0H88ZM565 341Q565 409 546 463T495 550T429 600T359 621Q348 623 267 623H189V71H267Q272 71 286 71T310 70Q461 70 527 184Q565 251 565 341\",120228:\"86 0V691H541V611H366L190 612V397H513V321H190V85H372L554 86V0H86\",120229:\"86 0V691H526V611H358L190 612V384H485V308H190V0H86\",120230:\"59 346Q59 499 157 601T384 704Q436 704 466 700T541 679Q551 674 560 670T575 664T583 660T588 658T590 656Q590 652 582 605T573 557L564 564Q489 626 392 626Q301 626 233 549T164 347T233 145T392 68Q441 68 506 84V223H388V299H599V38L588 33Q494 -11 393 -11Q296 -11 219 40T100 172T59 346\",120231:\"86 0V694H190V399H517V694H621V0H517V323H190V0H86\",120232:\"87 0V694H191V0H87\",120233:\"181 53Q200 53 215 56T241 66T259 79T272 95T280 109T285 122L287 129V694H388V415V229Q388 135 385 112T369 63Q364 51 355 39T328 12T280 -12T212 -22Q172 -22 130 -12T66 8T43 20L46 42Q50 65 54 88L58 110Q58 111 65 104Q107 53 181 53\",120234:\"88 0V694H188V519L189 343L525 694H638L375 419L651 0H541L309 351L188 225V0H88\",120235:\"87 0V694H191V79L297 80H451L499 81V0H87\",120236:\"92 0V694H228L233 680Q236 675 284 547T382 275T436 106Q446 149 497 292T594 558L640 680L645 694H782V0H689V305L688 606Q688 577 500 78L479 23H392L364 96Q364 97 342 156T296 280T246 418T203 544T186 609V588Q185 568 185 517T185 427T185 305V0H92\",120237:\"88 0V694H235L252 659Q261 639 364 428T526 84V694H619V0H472L455 35Q453 39 330 294T185 601L181 611V0H88\",120238:\"55 345Q55 504 149 609T361 715Q386 715 406 713Q521 696 600 592T680 344Q680 193 590 86T368 -22Q239 -22 147 84T55 345ZM276 59T368 59T518 146T576 360Q576 473 525 545T401 634Q371 637 362 637Q284 637 222 562T159 360T217 147\",120239:\"88 0V694H230Q347 693 370 692T410 686Q487 667 535 611T583 485Q583 409 527 348T379 276Q369 274 279 274H192V0H88ZM486 485Q486 523 471 551T432 593T391 612T357 621Q350 622 268 623H189V347H268Q350 348 357 349Q370 351 383 354T416 368T450 391T475 429T486 485\",120240:\"55 345Q55 504 149 609T361 715Q386 715 406 713Q521 696 600 592T680 344Q680 284 665 231T629 143T587 85T551 48L536 35L648 -120L652 -125H531L452 -8L440 -12Q407 -22 369 -22Q239 -22 147 85T55 345ZM579 345Q579 473 517 555T369 637Q279 637 218 554T156 345Q156 223 215 141T368 58Q376 58 382 58T392 58T397 59T401 60T403 61H404Q404 63 360 128T315 194H421L453 150Q485 105 486 105Q490 108 496 113T517 138T545 182T567 247T579 334V345\",120241:\"88 0V694H227H259H302Q365 694 399 689T474 663Q528 637 558 595T589 504Q589 482 584 462T569 426T547 396T522 372T495 353T470 338T449 328T434 322L429 320L440 300Q452 280 477 238T523 160L617 1L565 0Q513 0 512 1Q512 2 424 156L337 309H189V0H88ZM492 504Q492 600 367 620Q354 622 271 623H189V385H271Q363 386 388 392Q432 402 462 430T492 504\",120242:\"55 514Q55 589 115 652T283 716Q315 716 345 711T396 699T432 685T457 672T467 667Q467 666 459 618T449 568Q383 634 282 634Q214 634 182 600T150 525Q150 507 155 492T172 465T194 446T222 432T247 423T272 416T289 412Q353 396 378 384Q432 358 466 307T500 194Q500 110 438 44T272 -22Q215 -22 159 -5T73 28T44 50Q45 51 49 75T57 122T62 146L65 143Q68 140 74 136T88 125T107 111T131 98T160 85T194 74T232 66T274 63H286Q327 63 366 96T406 182Q406 245 352 280Q329 296 265 310T173 339Q124 363 90 409T55 514\",120243:\"36 608V688H644V608H518L392 609V0H288V609L162 608H36\",120244:\"87 450V694H191V449Q192 203 193 194Q200 148 220 117T266 72T311 54T347 49Q404 49 446 84T501 178Q505 195 505 218T507 449V694H600V450Q600 414 600 356Q599 198 595 181Q594 178 594 177Q575 89 505 34T345 -22Q258 -22 184 34T89 196Q88 205 87 450\",120245:\"14 692Q14 694 68 694H122L146 633Q325 165 339 90Q340 87 341 87Q341 124 530 619L558 694H605Q652 694 652 692Q650 690 523 354T390 10L387 0H279L276 10Q271 18 144 354T14 692\",120246:\"115 694Q115 693 156 550T233 266T270 90L271 85Q272 86 272 92Q272 153 405 616L427 694H524L553 590Q672 174 681 95L682 84L684 95Q689 138 728 287T803 563T841 692Q841 694 885 694T929 693Q929 691 829 346L730 0H679L628 1L606 75Q478 524 470 600L469 611L467 600Q458 518 338 101L310 0H213L114 346Q14 691 14 693Q14 694 64 694H115\",120247:\"14 0Q16 5 144 184T275 367L153 528Q121 571 88 615T42 674T28 694H150L228 584Q315 463 316 461L326 448L497 694H610L609 692Q606 689 492 528Q440 454 409 410T378 366Q378 365 515 182L652 0H531L326 292Q326 293 299 254T226 146L128 0H14\",120248:\"4 693L64 694H125L174 621Q335 378 340 364L341 362Q361 398 395 450L558 694H663L383 277V0H282V278L143 485Q112 531 75 586T21 668L4 693\",120249:\"69 617V694H555V643L373 362Q190 81 190 79H234Q244 79 272 79T344 80T419 81H560V0H55V53L237 334Q420 615 420 617Q413 618 387 618Q380 618 334 618T245 617H69\",120250:\"236 387Q209 387 184 382T141 370T111 355T91 342T83 337L82 355Q80 373 79 393T77 417Q77 419 81 421Q86 423 91 426Q155 460 227 460H238Q319 460 368 400Q393 371 400 341T408 252Q408 240 408 207T407 152V0H317V39L306 32Q244 -10 159 -10H152Q109 -10 77 22Q38 61 38 126Q38 142 39 146Q55 199 130 223T295 252H314V277Q314 305 313 310Q308 342 287 364T236 387ZM303 186Q124 180 124 126Q124 105 144 86T208 66Q284 66 309 124Q314 137 314 166V186H303\",120251:\"303 -11Q280 -11 259 -6T222 6T194 21T176 33T168 38V0H75V694H165V550L166 405Q247 455 336 455Q397 455 439 389T482 226Q482 115 428 52T303 -11ZM390 221Q390 283 361 331T265 379Q214 379 177 342L168 334V118Q203 66 258 66Q316 66 353 106T390 221\",120252:\"34 223Q34 327 99 393T245 460Q290 460 301 459Q328 455 354 445T395 427T410 415L396 338L386 344Q377 349 362 357T335 370Q305 381 258 381H252Q182 381 146 315Q126 275 126 224Q126 158 159 113T255 68Q329 68 394 106L408 114L410 93Q411 72 412 52L414 32Q407 27 394 20T338 2T252 -10Q156 -10 95 58T34 223\",120253:\"33 224Q33 321 81 388T197 455Q277 455 342 414L351 408V694H441V0H348V44L338 37Q278 -10 198 -10Q177 -10 168 -8Q99 11 62 90Q33 148 33 224ZM348 337Q307 378 263 378Q260 378 256 378T251 379Q239 379 223 374T182 355T142 305T126 220Q126 90 225 67Q231 66 250 66H255Q306 66 342 115L348 124V337\",120254:\"28 226Q28 329 91 395T235 461Q258 461 279 456T325 436T368 397T399 332T415 238V219H113V215Q113 163 151 114T248 65Q273 65 298 70T341 82T373 96T396 108L403 113Q403 106 406 76T409 38Q409 34 408 33T393 24Q325 -10 252 -10Q155 -10 92 59T28 226ZM340 289L338 297Q335 305 333 310T327 326T317 343T304 358T286 372T263 381T233 385Q212 385 193 376T162 353T140 325T127 301T123 289H340\",120255:\"262 705H267Q300 705 347 694V612L336 616Q303 628 274 628H266Q224 628 199 605Q187 590 184 579T181 541V507V444H287V371H184V0H94V371H27V444H94V492Q94 544 95 550Q102 617 151 661T262 705\",120256:\"55 286Q55 357 105 406T224 455Q280 455 323 421L322 423L318 427Q318 428 339 434T396 448T465 455H471L478 416L485 377Q484 377 474 379T445 383T401 385Q397 385 391 385T381 384L362 383L357 387Q358 386 364 375T375 354T384 325T389 287Q389 217 340 168T221 119Q178 119 138 142Q133 145 131 143Q125 131 125 117Q125 82 155 72L227 71Q230 71 251 71T280 71T310 69T343 65T373 57T403 46T428 30T449 7Q471 -26 471 -62V-71Q471 -136 384 -178Q326 -206 250 -206Q159 -206 102 -172T30 -92Q28 -84 28 -68T31 -37T40 -12T52 7T64 21T75 31T82 38Q60 68 60 106Q60 145 80 180L86 189L80 199Q55 240 55 286ZM304 233T304 287T279 362T220 383Q189 383 165 361T140 287Q140 243 161 217T220 191Q253 191 278 212ZM250 -134Q298 -134 331 -122T375 -96T387 -69Q387 -21 306 -7Q288 -5 216 -5Q161 -5 153 -7Q146 -9 139 -13T122 -31T113 -66Q113 -75 113 -80T127 -97T166 -121Q203 -134 250 -134\",120257:\"163 395Q223 455 307 455Q417 455 438 354Q442 331 443 164V0H350V157Q349 315 348 320Q334 378 259 378H253Q224 378 204 358Q180 334 173 301T165 209Q165 198 165 172T166 129V0H73V694H163V395\",120258:\"67 576V680H171V576H67ZM74 0V444H164V0H74\",120259:\"88 576V680H192V576H88ZM31 -126Q40 -126 48 -125T62 -122T73 -117T82 -111T89 -105T94 -99T98 -92L102 -86V444H192V180Q191 -45 191 -70T184 -113Q171 -152 140 -178T63 -205Q34 -205 4 -197T-43 -181T-59 -171T-51 -133T-41 -96L-38 -99Q-34 -102 -28 -106T-13 -115T7 -123T31 -126\",120260:\"76 0V694H163V257L340 444H449L286 272L292 263Q296 259 378 138T463 12L471 0H372L309 92Q294 114 277 139T250 179T237 198L228 211L160 139V0H76\",120261:\"74 0V694H164V0H74\",120262:\"160 392Q223 455 304 455Q359 455 386 436T430 383L437 391Q495 455 584 455Q694 455 715 354Q719 331 720 164V0H627V157Q626 315 625 320Q611 378 536 378H530Q501 378 481 358Q457 334 450 301T442 209Q442 198 442 172T443 129V0H350V157Q349 315 348 320Q334 378 259 378H253Q224 378 204 358Q180 334 173 301T165 209Q165 198 165 172T166 129V0H73V450H160V392\",120263:\"160 392Q214 446 283 454Q285 454 292 454T303 455H306Q417 455 438 354Q442 331 443 164V0H350V157Q349 315 348 320Q334 378 259 378H253Q224 378 204 358Q180 334 173 301T165 209Q165 198 165 172T166 129V0H73V450H160V392\",120264:\"28 222Q28 323 95 391T244 460Q275 460 281 459Q364 445 417 377T471 219Q471 124 408 57T250 -10Q158 -10 93 57T28 222ZM377 230Q377 277 364 310T328 358T287 379T248 385Q233 385 219 382T186 369T155 342T132 297T122 230Q122 146 159 108T250 69H253Q263 69 274 70T305 81T339 106T365 154T377 230\",120265:\"166 404Q194 424 241 439T337 455H341Q410 455 451 370Q483 307 483 222Q483 128 433 59T306 -10Q282 -10 260 -5T222 7T194 21T176 33T168 38V-194H75V444H165V424L166 404ZM390 222Q390 287 354 331T266 376T177 340L168 332V118Q200 66 257 66Q313 66 351 112T390 222\",120266:\"33 220Q33 325 87 389T206 454Q286 454 341 406L351 398V455H441V-194H348V41L338 35Q276 -8 198 -11Q171 -11 154 -5Q102 12 68 74T33 220ZM126 220Q126 160 161 113T251 65Q305 65 351 123V298L350 301Q349 304 347 308T342 319T336 331T327 343T315 355T300 365T283 373Q273 375 256 375Q208 375 167 332T126 220\",120267:\"171 389Q237 455 320 455H327V373H317Q262 369 220 336T167 248Q165 239 164 119V0H74V450H159V377L171 389\",120268:\"33 326Q33 376 60 408T117 450T175 460H190Q245 460 272 454T345 429Q345 428 338 388L331 349Q278 386 188 386H183Q119 386 119 336Q119 307 142 295T210 276T278 256Q360 213 360 130Q360 108 354 88T332 43T281 5T195 -10Q152 -10 111 1T49 22T28 35Q29 36 32 56T39 95T43 115T51 110T72 99T102 85T143 73T193 68Q274 68 274 123Q274 152 248 167Q234 178 187 186T115 207Q66 229 46 273Q33 298 33 326\",120269:\"333 27Q333 24 314 16T257 -1T184 -10H172Q146 -10 128 14T105 58T99 91Q95 113 95 251V371H18V444H98V571H182V444H316V371H182V253Q183 128 189 104Q199 68 234 68Q277 72 314 98Q315 93 323 61T333 27\",120270:\"353 39Q352 38 344 34T331 27T315 19T295 11T270 3T241 -3T207 -8T168 -10H162Q148 -10 137 -8T111 2T87 30T74 81Q73 89 73 268V444H166V268L167 92Q171 79 174 74T192 64T238 59Q317 59 344 116Q349 128 349 148T350 291V444H443V0H353V39\",120271:\"178 0Q15 441 14 442Q14 444 60 444Q107 444 107 442Q108 441 136 364T196 194T232 67Q233 98 280 234T356 442Q356 444 401 444T446 442L282 0H178\",120272:\"14 444H105L108 434Q192 160 200 74V65L201 75Q206 144 282 399L296 444H381L399 381Q480 112 480 69L481 70Q481 113 562 386L580 444H668L534 1L483 0H432L429 10Q343 294 338 367L337 377Q336 375 336 370Q336 340 313 250T269 88T245 11L242 0H195L148 1L14 444\",120273:\"187 229L6 444H107L227 294L344 444H393L442 443Q439 437 299 268L267 229L460 0H359L294 88Q280 107 262 131T236 166L227 177L100 0H0Q1 1 47 58T140 171T187 229\",120274:\"113 -204Q83 -204 63 -200L43 -197Q43 -196 40 -157T36 -117L48 -121Q79 -133 114 -133Q124 -133 130 -132T145 -121T163 -94Q169 -82 184 -42T200 1L188 29Q176 57 152 115T107 223T62 330T26 416L14 443Q14 444 61 444H109L122 411Q230 155 236 75L237 65V74Q245 161 348 424L356 444H401Q446 444 446 443L396 313Q345 183 293 49T236 -93Q191 -204 123 -204H113\",120275:\"42 370V444H400V395L156 76L279 77H402V0H28V51L273 371L157 370H42\",120276:\"110 0H86Q42 0 42 27Q42 37 148 350T258 667Q269 687 291 692Q295 694 366 694H399Q432 694 448 689T474 667Q477 663 583 350T690 27Q690 0 642 0H617H592Q582 0 575 1T561 2T549 6T541 11T533 18T527 26T522 37T517 49T512 64T506 81L490 130H225Q225 128 208 79T189 27Q185 19 180 14T170 7T156 3T143 1T127 0T110 0ZM439 279Q359 524 359 547L357 555L355 543Q347 503 270 263L259 231H357Q455 231 455 232L439 279\",120277:\"119 1Q98 5 92 28V667Q98 686 118 693Q121 694 272 694H289H346Q439 694 500 681T600 625Q640 580 640 513Q640 451 601 414T504 364L518 361Q568 351 602 329T649 280T666 235T671 197Q671 172 665 147T642 91T586 37T488 5Q456 1 282 1H119ZM489 509Q489 532 479 548T450 573T421 585T394 591Q387 592 315 593H247V404H298H325Q432 404 466 444Q489 470 489 509ZM517 194Q517 235 502 261T458 299T407 313T353 317H329H322H247V101H319H357Q387 101 407 103T452 111T492 133T514 171Q516 176 517 194\",120278:\"423 -11Q339 -11 275 9T171 62T106 143T71 240T61 347Q61 450 93 527Q157 664 313 694Q357 704 416 704Q479 704 517 699T608 676Q634 667 635 660Q635 653 624 592L612 528L609 524Q604 521 601 521Q595 521 583 531T555 555T505 578T428 589H424Q298 589 250 494Q224 438 224 347Q224 292 233 251T265 175T329 122T432 104Q488 104 524 115T604 158Q607 160 610 162T615 165T619 168L621 170Q625 172 630 170T637 163Q638 160 642 109T647 54Q646 49 625 37T568 11T499 -7Q463 -11 423 -11\",120279:\"119 1Q98 5 92 28V667Q98 686 118 693H124Q131 693 142 693T168 694T200 694T237 694H296Q416 694 450 692T525 677Q732 617 732 342Q732 169 644 81Q593 32 528 16T372 0Q356 0 324 0T276 1H119ZM573 349Q573 387 571 413T559 473T532 527T482 567T403 591Q395 592 320 593H250V101H321Q418 102 456 114Q553 144 569 263Q573 303 573 349\",120280:\"277 122Q280 122 380 123T544 125Q552 125 557 125T565 124T569 124Q595 115 595 75V62V47Q595 9 569 2Q564 0 341 0L119 1Q99 7 92 28V664Q98 683 118 690Q121 691 335 691T554 689Q580 682 580 644V632V618Q580 582 554 573Q553 573 551 573T542 572T527 572Q464 572 364 573T260 575H253V412H385H459Q524 412 536 404T549 357Q549 341 549 334T542 318T523 305Q518 303 385 303H253V122H277\",120281:\"512 572Q451 572 356 573T258 575H253V400H370H431Q494 400 506 392T518 345Q518 307 507 299T437 291H370H253V161Q253 141 253 113T254 75Q254 23 245 12T195 0H170L119 1Q99 7 92 28V664Q98 683 118 690Q121 691 327 691T538 689Q564 682 564 644V632V618Q564 582 538 573Q537 573 535 573T526 572T512 572\",120282:\"61 347Q61 405 70 454T105 550T171 631T276 685T426 705Q483 705 537 693T620 668T650 646Q650 645 649 637T645 612T639 578L627 514L624 510Q620 507 615 507T597 520T566 548T512 577T430 590Q223 590 223 347T431 104Q478 104 506 112Q508 112 508 164V215H471L434 216L428 222L427 268Q427 315 429 318Q432 323 444 323T544 324H652Q655 320 659 317V45L656 43Q654 39 624 27T536 2T424 -11Q366 -11 317 -2T219 33T137 97T82 200T61 347\",120283:\"92 667Q101 694 143 694H172H198Q244 694 251 669Q253 663 253 539V415H540V539Q540 558 540 585T539 621Q539 673 550 683T611 694H621H646Q671 694 683 690T700 669Q702 663 702 347T700 25Q696 9 684 5T646 0H621H606Q560 0 550 11T539 76Q539 85 539 116T540 169V306H253V169Q253 147 253 116T254 75Q254 23 245 12T194 0H170L119 1Q99 7 92 28V667\",120284:\"85 667Q94 694 136 694H165H191Q237 694 244 669Q246 663 246 347T244 25Q235 0 192 0H163L112 1Q92 7 85 28V667\",120285:\"236 -22Q190 -22 144 -11T72 12T46 29Q63 147 69 153Q80 164 92 146Q124 91 191 91Q222 91 242 102T267 134Q268 139 268 402Q268 663 270 669Q275 687 294 692Q298 694 347 694H367Q393 694 406 690T425 669Q427 663 427 399Q427 132 426 125Q421 87 404 58T366 15T318 -9T273 -20T236 -22\",120286:\"92 667Q101 694 139 694H163H186Q225 694 234 671Q236 663 236 529L237 392L533 682Q550 694 590 694H623H681Q695 680 695 672Q695 670 693 664Q688 657 561 533L431 405L698 33Q701 28 701 23Q701 7 683 0H626H604Q571 0 564 2T545 13Q544 14 530 33T489 90T437 162L332 307Q331 307 284 260L236 214V122V65Q236 32 231 19T210 2Q205 0 161 0L119 1Q99 7 92 28V667\",120287:\"92 667Q98 684 109 689T142 694H172H198Q244 694 251 669Q253 663 253 389V116L278 117Q410 119 490 119H495Q511 119 517 115T534 93V63V48Q534 9 508 2Q503 0 310 0L119 1Q99 7 92 28V667\",120288:\"92 667Q98 684 109 689T146 695Q152 695 167 695T192 694Q200 694 214 694T234 695Q291 695 305 664Q313 651 400 419T487 165Q487 162 488 162T489 165Q489 187 574 413T671 664Q679 680 695 688Q708 694 785 694H828Q855 694 867 689T884 669Q886 663 886 347T884 25Q876 0 832 0H817H802Q758 0 750 25Q748 31 748 293V555L746 544Q737 509 692 386T606 160T564 52Q548 22 502 22H487H472Q423 22 410 52Q407 59 367 160T283 385T231 546L230 548Q229 548 229 293Q229 31 227 25Q222 9 211 5T176 0H158L119 1Q99 7 92 28V667\",120289:\"92 667Q98 684 109 689T146 694H185Q273 694 279 692Q301 689 315 669Q322 660 419 453L554 163L562 143Q564 143 564 401Q564 663 566 669Q574 694 618 694H633H648Q692 694 700 669Q702 663 702 347T700 25Q696 10 683 5T642 0H596H551Q520 0 505 4T478 25Q471 34 374 241L239 532Q231 550 231 552L229 479Q229 440 229 293Q229 31 227 25Q222 9 211 5T176 0H158L119 1Q99 7 92 28V667\",120290:\"362 715Q364 715 376 715T394 716H400Q542 716 626 643T727 426Q731 395 731 342Q731 271 722 225Q674 -22 396 -22Q320 -22 259 -3T148 68T77 201Q62 257 62 342Q62 447 86 522T173 649Q245 707 362 715ZM568 433Q551 623 396 623Q383 623 370 622T333 612T292 591T257 550T233 485Q223 442 223 350Q223 276 232 227T267 137Q309 74 397 74Q433 74 461 85T507 113T537 156T556 205T566 260T569 310T570 357Q570 409 568 433\",120291:\"641 470Q641 426 630 391T603 334T561 295T513 271T459 259T408 254T361 253H350H337H253V142Q253 125 253 100T254 67Q254 32 249 19T227 2Q222 0 170 0L119 1Q99 7 92 28V667Q98 686 118 693Q121 694 271 694Q428 693 462 688Q641 656 641 470ZM487 467Q487 495 485 510T474 546T442 578T382 592Q375 593 310 593H250V347H309H339Q364 347 380 348T418 354T451 368T474 395T486 438Q487 444 487 467\",120292:\"450 -20Q444 -20 429 -21T396 -22Q320 -22 259 -3T148 68T77 201Q62 257 62 342Q62 447 86 522T173 649Q245 707 362 715Q364 715 376 715T394 716Q732 716 732 340Q732 268 719 210T686 120T647 68T615 39T601 29T638 -22T676 -73Q679 -78 679 -83Q679 -98 661 -106H593Q526 -106 521 -104Q514 -103 507 -97T496 -84T477 -55L454 -19L450 -20ZM554 509Q516 622 391 622Q294 622 250 535Q220 475 220 345Q220 299 222 266T234 198T258 140T299 99T363 74Q378 71 393 71H395L381 92Q367 114 353 136T338 161Q336 165 336 170Q336 186 352 193L361 194Q370 194 384 194T412 194H452Q457 194 460 194T466 194T471 192T476 191T480 188T483 185T487 180T492 174T497 167T504 158L526 129Q532 127 552 175Q573 231 573 348Q573 455 554 509\",120293:\"654 24Q654 9 644 5T612 0H577L521 1Q509 5 503 13Q498 20 421 160L343 304H250V168Q250 147 250 118T251 78Q251 24 242 12T192 0H168L119 1Q99 7 92 28V667Q98 686 118 693H124Q131 693 141 693T165 694T195 694T229 694T280 694T332 695Q389 695 428 691T510 675T582 637T627 569Q641 532 641 493Q641 377 537 331L497 317L493 316L571 177Q653 28 654 24ZM487 472T487 492T485 525T476 553T450 577T404 591Q398 592 322 593H250V391H321Q327 391 353 391T385 392T412 395T438 401T457 412T474 430T483 456\",120294:\"61 503Q61 547 72 583T110 650T186 698T305 716Q405 716 496 671Q513 664 514 657Q514 656 513 648T509 623T503 589L491 525L488 521Q484 518 479 518H475L461 532Q430 565 395 581T305 598Q201 598 201 523Q201 480 240 462T345 431T443 394Q549 324 549 204Q549 160 538 123T502 51T427 -2T308 -22Q180 -22 69 41Q50 52 49 57Q49 58 50 66T54 91T60 125L72 189L75 193Q80 196 84 196Q87 196 104 182T145 149T212 117T304 102Q408 102 408 188Q408 215 396 234T362 263T319 278T267 290T219 302Q149 324 105 380T61 503\",120295:\"67 687Q70 688 366 688Q661 688 666 686Q692 680 692 641V629V615Q692 579 666 570H660Q655 569 648 569Q645 569 624 569T581 570Q505 570 475 572H447V302Q447 31 445 25Q436 0 393 0H364L313 1Q293 7 286 28L285 300V572H257Q227 570 151 570Q130 570 109 570T84 569Q77 569 72 570H66Q48 577 44 588T40 631L41 661Q47 680 67 687\",120296:\"92 667Q101 694 143 694H172H200Q242 694 251 671Q253 663 253 430Q254 189 255 185Q262 134 288 107T384 79Q498 79 516 168Q520 191 521 431Q521 663 523 671Q532 694 572 694H596H618Q639 694 648 692T665 679Q671 672 671 653Q672 632 672 555V432Q671 200 670 190Q652 79 581 29T383 -22Q137 -22 98 166Q92 195 92 303V667\",120297:\"27 667Q27 683 39 688T75 694H101Q155 694 159 692Q182 687 194 665Q202 652 283 419T374 142Q376 165 473 445Q552 664 553 666Q568 694 618 694H639H658Q681 694 693 689T705 667Q705 660 592 347Q481 32 477 28Q466 7 441 1H292Q266 7 255 28Q251 32 140 347Q27 660 27 667\",120298:\"994 694Q1012 683 1014 668Q1014 661 977 519T896 217T845 26Q831 0 783 0H747H711Q685 0 672 5T649 26Q644 36 583 272T517 548Q516 552 516 551Q503 479 437 227Q389 37 383 26Q367 0 323 0H288H254Q207 0 193 26Q191 32 108 346T24 665Q24 685 44 693Q47 694 98 694H115Q152 694 168 668Q174 657 235 417T297 144Q297 134 300 153Q307 204 362 421T427 668Q441 694 488 694H523Q586 694 597 688Q612 683 620 661T651 549Q664 496 673 462Q744 194 750 146V140Q767 223 800 354T857 576T883 668Q897 694 938 694H958H994\",120299:\"52 1Q37 11 37 23Q37 26 39 32Q39 34 158 202L275 369Q275 370 221 441T112 586T55 663Q53 669 53 672Q53 687 68 693H72Q77 693 84 693T99 694T118 694T139 694H176Q203 694 212 692T230 682Q231 681 239 669T265 634T296 591L358 504L418 591Q481 682 486 686Q491 691 499 692Q505 694 569 694H632Q650 685 650 672Q650 667 646 660Q643 654 592 582T491 440T441 369T566 201T693 29Q694 27 694 23Q694 11 677 0H607L537 1Q523 6 519 10T437 131Q422 153 411 170T390 200T375 222T365 237T359 245L357 247L348 232Q339 218 319 188T283 131Q222 37 211 22T186 1H52\",120300:\"635 694H668Q688 694 698 690T708 670Q708 664 704 658L446 278L445 152V27Q442 20 440 17T433 9T419 1L368 0H339Q316 0 305 5T288 26Q286 31 286 154V278L157 468Q135 500 101 550Q43 635 34 650T24 671Q24 686 39 693Q42 694 105 694H122H132Q163 694 180 689T214 666Q225 654 336 485Q373 425 373 420L374 418Q375 419 375 421Q378 432 418 493T496 609T536 667Q543 676 551 681T572 689T591 693T615 694T635 694\",120301:\"411 584Q243 581 131 581Q122 581 116 581T106 582T102 582Q84 589 80 600T76 640L77 667Q83 686 103 693Q106 694 343 694Q579 694 584 692Q592 691 599 684T609 668Q610 665 610 646Q610 614 608 608Q605 603 434 361L261 116Q340 117 402 118T490 119T533 120T560 120H572Q605 120 614 95Q616 89 616 60V46Q616 9 590 2Q585 0 339 0Q92 0 87 2Q79 3 72 10T62 26Q61 29 61 49Q61 84 63 90Q65 94 152 217T325 461T411 584\",120302:\"255 394Q218 394 186 383T138 358T109 333T94 321H91Q88 321 86 322T83 325T80 331T79 339T78 349T77 362T75 377Q72 410 72 420Q72 423 72 425T73 429T74 431T77 433T80 435T85 437Q166 475 262 475Q360 475 413 440Q462 406 471 341Q472 332 472 181Q472 155 472 119T473 73Q473 20 462 10T398 0H380Q349 0 337 8T324 48V65Q298 30 257 10T172 -11Q109 -11 70 37T31 145Q31 276 307 289H321V309Q321 337 318 352T300 381T255 394ZM176 146Q176 116 190 97T231 77Q251 77 266 85Q322 110 322 185Q322 189 322 192T322 198L321 201V234L308 232Q176 220 176 146\",120303:\"54 667Q63 694 102 694H127H151Q190 694 199 671Q201 663 201 544L202 422L211 428Q270 468 355 468Q523 468 523 231Q523 -10 321 -10Q286 -10 261 -2T204 33Q197 11 187 6T142 0H126L81 1Q61 7 54 28V667ZM372 230Q372 317 355 349T280 382Q251 382 204 356V107Q235 76 274 76Q301 76 320 84T349 105T364 139T371 180T372 230\",120304:\"188 233Q188 199 190 177T200 131T225 95T271 83H281Q356 83 421 130Q433 138 434 139Q446 141 448 131Q449 128 453 84T457 36Q455 30 432 20T364 -1T273 -11Q37 -11 37 232Q37 456 244 474Q246 474 257 474T276 475Q349 475 400 455Q443 436 448 431L451 425Q451 419 443 377Q442 372 441 366T439 356T438 348T436 340T435 334T433 330T431 327T429 325T426 324Q420 324 406 336Q376 362 350 372T281 382Q254 382 236 373T208 352T194 317T189 278T188 233\",120305:\"225 -11Q192 -11 164 -3T104 29T55 102T37 227Q37 321 63 376Q111 469 223 469Q292 469 349 433L359 426V546Q359 564 359 589T358 623Q358 675 369 684T433 694H451Q497 694 505 669Q507 663 507 347T505 25Q500 9 487 5T450 0H432H413Q356 0 356 36V40Q298 -11 225 -11ZM356 359Q326 382 286 382Q239 382 215 358Q189 330 189 256V229V203V195Q189 102 231 86Q251 76 274 76Q318 76 356 114V359\",120306:\"30 231Q30 301 51 351T107 426T181 463T262 474H268Q293 474 312 472T366 459T422 427T462 363T480 260Q480 230 466 222T405 213Q395 213 364 213T311 214H173V211Q173 183 183 148T216 96Q244 76 287 76Q319 76 350 85T399 104T433 125T451 136Q463 138 465 128Q466 125 469 84T473 39Q471 29 423 13T330 -9Q321 -10 286 -10Q213 -10 161 11T81 68T42 144T30 231ZM353 292Q350 324 342 344T320 373T294 384T264 387Q191 387 175 286V282H353V292\",120307:\"67 458H78V502V509Q78 538 79 556T90 604T117 651T169 685T253 704Q254 704 258 704T265 705T275 705T287 704Q364 704 381 687V638V607Q381 591 378 585T366 579Q362 581 351 591T323 610T282 618Q238 618 226 587Q224 581 223 519V458H253Q288 458 298 453Q315 441 315 415Q315 399 312 390T299 377T282 372T259 371H255H226V201Q226 31 224 25Q215 0 174 0H150L106 1Q86 7 79 28L78 199V371H69Q29 371 29 412Q29 425 30 431T40 447T67 458\",120308:\"63 108Q63 142 83 176L76 184Q35 227 35 300Q35 469 243 469Q330 469 385 437L397 443Q451 469 508 469Q515 468 517 466T522 456T528 425Q534 392 534 386Q532 379 523 377Q520 377 509 381T477 390T431 398L425 399Q453 362 453 297Q453 268 445 242T417 189T351 146T242 130Q169 130 119 153Q117 141 117 136Q117 95 155 83Q161 81 252 81Q354 80 362 79Q437 71 475 48T526 -24Q532 -42 532 -65Q532 -116 489 -156T341 -204Q323 -206 274 -206H256Q39 -206 18 -84Q17 -79 17 -68Q17 15 82 42L76 53Q63 79 63 108ZM310 300Q310 359 298 377T238 396Q217 396 204 390T186 368T179 339T178 300Q178 245 189 224T244 203T299 224T310 300ZM414 -66Q414 -55 411 -47T401 -32T387 -21T368 -14T346 -10T322 -7T297 -6T271 -6T246 -6H193Q163 -6 154 -10T140 -30Q135 -45 135 -62Q135 -134 274 -134Q414 -134 414 -66\",120309:\"53 667Q62 694 101 694H126H148Q191 694 198 669Q200 663 200 526V390Q263 469 361 469Q390 469 412 465T456 449T491 413T507 351Q508 342 508 185Q508 31 506 25Q498 0 450 0H432H413Q368 0 359 23Q357 31 357 186Q356 345 355 350Q349 369 336 376Q324 381 301 381H298Q269 381 242 362Q217 342 210 316T202 239Q202 229 202 202T203 157V82Q203 24 195 12T146 0H125L80 1Q60 7 53 28V667\",120310:\"72 574Q55 583 51 591T46 619V636L47 670L48 673Q50 676 52 678T56 684T63 690T73 694H81Q89 694 102 694T129 695H181Q193 687 196 685T203 676T207 661T208 634Q208 603 204 593T181 574H72ZM54 431Q63 458 102 458H127H149Q192 458 199 433Q201 427 201 229T199 25Q190 0 149 0H125L81 1Q61 7 54 28V431\",120311:\"70 634V648Q70 686 96 693Q100 695 151 695H176Q201 695 213 691T230 670Q232 665 232 634V620Q232 582 206 575Q202 573 151 573H126Q101 573 89 577T72 598Q70 603 70 634ZM-41 -84Q-1 -105 28 -105Q67 -105 78 -85Q83 -77 83 -48T84 180Q84 427 86 433Q93 458 136 458H158H180Q201 458 209 456T225 443Q230 436 231 418Q232 397 232 313V183V124V40Q232 -55 228 -87T203 -147Q166 -205 78 -205Q31 -205 -20 -189T-71 -159Q-71 -156 -62 -124T-52 -89Q-49 -84 -41 -84\",120312:\"496 23Q496 9 487 5T457 0H427H398Q367 0 354 11Q352 12 288 99L226 183L191 150V90V54Q191 30 186 18T165 2Q160 0 124 0L90 1Q70 7 63 28V667Q72 694 108 694H128H146Q183 694 192 671Q194 663 194 496L195 325L254 383Q266 394 281 409T301 429T316 441T329 450T341 455T357 458T376 458H409H436Q461 458 470 454T480 437Q480 430 477 427T445 395Q417 368 396 347L319 271Q319 270 358 217T442 103T494 32Q496 30 496 23\",120313:\"54 667Q63 694 102 694H127H149Q192 694 199 669Q201 663 201 347T199 25Q190 0 149 0H125L81 1Q61 7 54 28V667\",120314:\"197 386Q256 468 366 468Q404 468 430 461T471 438T491 413T503 385Q563 469 666 469Q731 469 769 446T814 350Q815 343 815 185Q815 31 813 25Q808 9 796 5T758 0H737L692 1Q672 7 665 28L664 186V206V290Q664 349 655 365T610 381Q581 381 560 370T529 341T515 311T510 291Q509 286 509 157V82Q509 24 501 12T452 0H431L386 1Q366 7 359 28L358 186V206V290Q358 349 349 365T304 381Q275 381 254 370T223 341T209 311T204 291Q203 286 203 157V82Q203 24 195 12T146 0H125L80 1Q60 7 53 28V437Q58 453 80 464H122H142Q167 464 178 460T195 439Q197 434 197 409V386\",120315:\"197 386Q264 468 350 468Q375 468 390 467T429 460T466 443T492 408T507 351Q508 342 508 185Q508 31 506 25Q498 0 450 0H432H413Q368 0 359 23Q357 31 357 186Q356 345 355 350Q349 369 336 376Q324 381 301 381H298Q269 381 242 362Q217 342 210 316T202 239Q202 229 202 202T203 157V82Q203 24 195 12T146 0H125L80 1Q60 7 53 28V437Q58 453 80 464H122H142Q167 464 178 460T195 439Q197 434 197 409V386\",120316:\"274 -11Q32 -11 32 225Q32 346 85 406T249 474H266H271Q302 474 325 471T385 458T451 419T498 346Q518 300 518 225Q518 -11 274 -11ZM367 233Q367 322 350 354T270 387Q240 387 222 377T195 344T184 298T182 233Q182 151 198 117T275 83H282Q318 83 339 104Q355 119 361 146T367 233\",120317:\"125 458H139Q174 458 185 452T202 420L211 426Q245 448 288 458T354 469Q356 469 361 469T369 468Q443 468 481 412Q523 355 523 223Q523 164 509 120T473 51T423 12T371 -7T323 -11Q260 -11 204 33V-65Q204 -80 204 -102T205 -131Q205 -162 200 -175T178 -192Q173 -194 126 -194L81 -193Q61 -187 54 -166V431Q58 447 81 458H125ZM372 230Q372 376 282 376Q247 376 204 352V107L208 103Q213 99 218 95T232 87T251 79T274 76Q323 76 349 116Q372 153 372 230\",120318:\"226 -11Q37 -11 37 236Q37 294 51 338T86 407T135 445T186 464T233 469H235Q300 469 349 422L359 413V425Q359 452 376 464Q384 469 433 469H455Q498 469 505 444Q507 438 507 137Q507 -163 505 -169Q500 -185 487 -189T450 -194H432H413Q367 -194 358 -171Q356 -163 356 -63V40L348 33Q296 -11 231 -11H226ZM281 375Q188 375 188 228Q188 77 275 77Q322 77 359 120V328Q338 357 324 366T281 375\",120319:\"54 437Q58 453 81 464H122H147Q186 464 194 439Q196 434 196 405V377L203 387Q245 456 324 468Q325 468 331 468T340 469Q347 469 356 462V360Q350 355 346 354T339 353T326 353T300 347Q260 337 234 311T202 252Q201 247 201 138Q201 122 201 98T202 66Q202 33 197 20T175 2Q170 0 125 0L81 1Q61 7 54 28V437\",120320:\"37 328Q37 392 75 433T203 474Q254 474 265 473Q319 465 370 442Q378 439 380 432Q380 426 372 384Q364 336 359 333Q358 331 355 331Q348 331 337 341Q282 388 216 388H208Q190 388 180 387T161 377T151 351Q151 333 164 323T224 306L267 297Q314 285 355 246T396 144Q396 17 282 -5Q260 -10 218 -10Q170 -10 124 2T55 26T30 44Q30 48 39 99T49 153Q52 159 60 159Q66 159 70 153Q100 120 133 101T218 82Q231 82 238 83T258 87T277 101T283 126Q283 149 260 160T200 176T153 186Q109 201 73 236T37 328\",120321:\"225 267Q225 202 226 169T232 115T244 88T265 82Q295 84 318 100T345 116Q352 116 354 110T364 77Q373 46 373 43Q373 28 312 9T190 -10Q160 -10 139 1T107 29T89 77T82 136T80 210V258V371H66H59Q39 371 27 386Q20 394 20 417Q21 432 23 437Q35 458 60 458H65H83V510L84 562Q93 589 131 589H154H174Q216 589 223 564Q225 558 225 508V458H274Q330 458 338 453Q355 441 355 415Q355 388 338 376Q330 371 274 371H225V267\",120322:\"53 431Q62 459 100 459Q105 459 114 459T127 458H152Q192 458 201 435Q203 427 203 262Q204 86 208 77Q209 74 216 71Q227 66 258 66H264Q334 66 354 140L356 150L357 290Q357 427 359 435Q365 449 377 453T412 458H432H450Q498 458 506 433Q508 427 508 229T506 25Q498 0 451 0H434H418Q386 0 374 7T360 43V58L352 49Q298 -11 199 -11Q135 -9 101 11T56 80Q52 100 52 273L53 431\",120323:\"26 429T26 435T32 448T44 456Q48 458 85 458H99Q145 458 161 431Q162 429 207 285L251 145L294 284Q333 410 341 430Q351 451 374 456Q379 458 420 458H430Q450 458 457 456T471 443Q473 437 473 435Q473 426 443 325T381 126L350 28Q339 7 316 2Q312 0 250 0Q187 0 183 2Q160 7 149 28L136 68Q124 109 106 166T70 283T39 385\",120324:\"699 458Q717 447 719 432Q719 426 666 230T610 27Q602 10 588 5T548 0H512H482Q431 0 420 17T384 135Q356 241 352 298V308L351 295Q348 251 322 145T290 28Q279 0 233 0H212H191Q146 0 133 27Q130 33 77 229T24 430Q24 449 44 457Q47 458 79 458Q122 458 126 456Q154 450 163 419L233 153Q241 187 272 304T307 431Q318 458 368 458Q394 458 398 456Q421 451 430 431Q434 423 509 147L547 286Q582 416 588 429Q600 454 624 457Q632 458 647 458H663H699\",120325:\"92 0Q87 0 77 0T62 -1Q24 -1 24 22Q24 29 33 41T106 136Q185 237 184 238Q184 239 147 284T73 376T33 427Q31 430 31 436Q31 451 45 457Q48 458 96 458H122Q152 458 163 450T208 394L247 345L282 394Q288 403 297 416T309 434T319 444T328 452T338 455T352 458T372 458H393H440Q457 449 457 435Q457 428 450 419T379 328Q308 239 308 237L389 137Q409 112 436 79Q475 31 475 23Q475 -1 436 -1Q432 -1 422 -1T407 0Q360 0 352 3Q343 6 336 16T291 83L247 151L245 148Q243 145 239 139T229 124T218 106T204 84Q167 24 160 15T141 1L92 0\",120326:\"454 458Q473 446 473 430Q473 426 394 184L311 -68Q291 -119 245 -162T123 -205Q51 -205 46 -190Q44 -187 40 -142T36 -92Q36 -90 36 -88L37 -87Q41 -80 46 -80Q48 -80 73 -92T126 -105Q146 -105 161 -98T185 -76T197 -53T206 -28L215 0L122 212Q29 427 29 435Q29 448 46 457Q49 458 91 458Q93 458 106 458T125 457T140 454T157 446T170 431Q183 410 224 305T266 158Q266 152 266 151Q267 151 268 163Q271 206 302 310T342 432Q354 458 398 458H418H454\",120327:\"268 376Q250 376 180 375T92 374Q69 374 63 380Q46 390 46 419Q46 428 49 437Q57 451 73 457Q76 458 242 458T413 456Q420 455 427 448Q439 438 439 413Q439 392 433 385Q432 383 318 236T204 88Q235 88 306 89T395 90H399Q408 90 414 89T427 84T438 70T442 45Q442 9 416 2Q411 0 236 0H136Q73 0 62 1T41 12Q31 23 31 47Q31 68 36 77Q37 78 51 97T96 155T153 228L268 376\",120328:\"28 0L429 694H533L585 350Q596 275 610 182T632 46L638 3V0H530L528 18Q527 25 515 103T503 183H223L135 29L118 1L73 0H28ZM492 254Q492 256 473 398T454 589V610Q433 552 290 301L264 255L378 254H492\",120329:\"501 363Q557 355 605 316T653 222Q653 148 586 85T403 2Q394 1 240 0Q90 0 90 1L100 46Q109 90 128 177T164 348L238 694H375Q518 693 546 688Q614 674 655 635T696 544Q696 490 648 441T516 368L501 363ZM601 530Q601 568 566 590T479 621Q472 622 394 623H320L297 513Q292 489 286 459T276 415L273 401V399H339H372Q504 399 571 466Q601 498 601 530ZM257 322Q256 320 230 197T203 73Q203 71 289 71Q379 72 387 73Q459 84 507 122T556 210Q556 255 519 283T428 320Q415 322 336 323Q257 323 257 322\",120330:\"124 266Q124 372 179 473T333 639T544 705Q592 705 635 697T698 679L718 670Q719 669 701 621T681 572L676 576Q670 580 661 586T641 598T614 611T583 620Q558 625 526 625Q406 625 318 516T230 276Q230 238 236 212Q251 148 294 108T412 68Q469 68 508 80T598 123Q608 129 608 128Q606 109 603 87L598 45L573 33Q521 7 486 -1T394 -10Q358 -10 346 -8Q260 5 202 62Q124 145 124 266\",120331:\"162 348L236 694H385Q535 693 543 692Q600 682 641 654T705 586T737 506T747 425Q747 296 672 187Q625 114 548 62T384 1Q376 0 262 0Q88 0 88 1L98 46Q107 90 126 177T162 348ZM622 533Q575 624 443 624Q434 624 419 624T399 623H321L263 348Q249 283 234 213T212 107L204 72Q204 71 289 71Q374 72 386 74Q501 94 573 193T646 422Q646 487 622 533\",120332:\"86 2Q88 4 160 346T233 689Q233 691 461 691Q688 691 688 689Q685 686 671 611H495L320 612L319 609Q319 607 297 501L274 397H436Q597 397 597 396L596 391Q595 386 593 376T589 358L581 322L420 321Q258 321 258 320Q209 89 208 87Q208 85 390 85Q417 85 460 85T518 86L572 85Q556 8 554 2V0H86V2\",120333:\"86 2Q88 4 160 346T233 689Q233 691 453 691T673 689Q670 686 656 611H488L320 612Q314 579 302 523T281 427T272 385Q272 384 419 384H567L551 308H255L223 156Q216 124 207 82T194 20L190 2Q190 0 138 0H86V2\",120334:\"125 267Q125 375 182 476T337 641T544 705Q598 705 644 693T710 669T730 655L712 609L693 560L692 557L681 567Q618 626 526 626Q447 626 378 573T269 440T229 277Q229 185 276 127T406 68Q422 68 451 71T502 78T524 84L526 93Q528 102 532 119T539 153L553 222Q553 223 495 223Q436 223 436 224Q436 230 444 262L452 299H662V296Q661 290 635 166T607 40Q606 37 576 25T492 1T391 -11Q272 -11 199 66T125 267\",120335:\"517 2Q518 3 551 161T585 322Q586 323 557 323T422 323H259L190 0H138Q86 0 86 1L96 46Q105 90 124 177T160 348L234 694H337V691Q336 690 306 545T275 399H602L603 403Q603 407 634 551L665 694H768V691Q768 690 695 348T621 2V0H517V2\",120336:\"161 348L235 694H338V691Q338 690 265 348T191 2V0H139Q87 0 87 1L96 46Q106 90 125 177T161 348\",120337:\"377 424L435 694H535V691Q534 685 476 412T416 135Q401 74 350 26T210 -22Q165 -22 124 -11T65 9T46 21L54 41Q62 61 70 83T81 109Q82 111 85 106Q86 105 87 103Q93 94 103 84T135 64T185 53Q238 53 272 76T317 142Q317 145 325 182T348 289T377 424\",120338:\"236 223Q235 222 213 113T188 2V0H138Q88 0 88 1L98 46Q107 90 126 177T162 348L236 694H285Q335 694 335 693L330 671Q326 649 316 603T298 518Q289 477 280 433T266 366L261 343L672 694H729L784 693L465 420L651 0H596L541 1L384 350Q383 351 310 288T236 223\",120339:\"161 348L235 694H338V691Q338 690 273 385T208 79Q278 80 362 80H516Q502 11 499 2V0H293Q87 0 87 1L96 46Q106 90 125 177T161 348\",120340:\"375 691Q456 215 459 124V106Q488 177 762 641L793 694H929V691Q929 690 856 348T782 2V0H689V2Q691 4 753 304Q817 604 818 606Q819 611 817 608Q817 607 815 603Q798 559 540 117L484 22H440L397 23L393 42Q393 47 373 169T334 422T315 594V609L250 306Q186 3 185 2Q185 0 138 0Q92 0 92 1L102 46Q111 90 130 177T166 348L240 694H375V691\",120341:\"311 609Q310 608 246 306T181 2V0H134Q88 0 88 1L98 46Q107 90 126 177T162 348L236 694H382L383 691Q383 688 418 561T493 286T541 97L544 84L545 89Q545 90 553 128T578 246T610 394L674 694H766V691Q766 690 693 348T619 2V0H472L469 13Q468 17 393 293T312 605L311 609\",120342:\"118 254Q118 366 174 473T324 648T517 716Q627 716 695 638T763 435Q763 321 706 215T555 43T362 -22Q256 -22 187 56T118 254ZM380 58Q452 58 518 116T622 263T661 442Q661 496 646 535T608 594T567 622T534 634Q516 636 496 636Q400 636 313 528T225 264Q225 172 267 115T380 58\",120343:\"162 348L236 694H378Q522 693 530 692Q604 680 647 635T690 524Q690 474 665 430T612 359Q550 299 465 280Q443 275 343 274H250V271Q250 269 235 201T206 68T192 2V0H140Q88 0 88 1L98 46Q107 90 126 177T162 348ZM594 513Q594 560 562 588T477 622Q470 623 394 623H321L293 487L263 349V347H342H347H375Q530 347 578 449Q594 483 594 513\",120344:\"118 254Q118 366 174 473T324 648T517 716Q627 716 695 638T763 435Q763 305 693 194T543 36Q547 29 586 -47T625 -125H504L450 -8Q406 -22 363 -22Q256 -22 187 56T118 254ZM661 437Q661 532 616 584T506 636Q428 636 361 578T257 433T220 258Q220 167 264 113T380 58Q390 58 397 58T408 59T413 60T417 61Q417 63 387 127T356 193Q356 194 409 194H462L485 150L508 105Q509 103 532 125T567 161Q661 278 661 437\",120345:\"162 348L236 694H375H414H445Q507 694 538 690T606 668Q698 623 698 534V528Q698 447 608 377Q582 358 555 345T512 326L497 321L617 0H565L513 1L402 309H255L189 0H138Q88 0 88 1L98 46Q107 90 126 177T162 348ZM603 525Q603 603 499 620Q486 622 403 623H321L297 506Q292 482 285 449T274 402L271 387V385H346Q350 385 363 385T386 384Q548 384 592 479Q603 503 603 525\",120346:\"161 478Q161 568 242 642T435 716Q527 716 599 673L609 667Q595 633 589 615L571 568Q570 568 564 575T546 592T518 611T475 628T417 635Q351 635 305 596T259 507Q259 465 290 444T372 411T432 396Q473 385 509 343T545 236Q545 140 464 59T270 -22Q155 -22 54 48L92 146Q93 146 101 138T124 117T161 92T216 72T288 63Q360 63 403 109T447 204Q447 220 444 233T435 256T421 273T404 285T385 295T366 301T347 306T331 310T315 314T292 321T265 331T235 346T207 367T183 395T168 431T161 478\",120347:\"165 608L182 687Q182 688 486 688H790L789 685L781 645L773 609H521L457 306Q393 3 392 2Q392 0 340 0H288V2Q289 5 353 304T417 605V609L291 608H165\",120348:\"340 -22Q251 -22 191 33T131 177V187Q131 192 131 195T132 205T133 215T136 231T141 253T147 285T156 328T168 384T184 457L235 694H338V691Q338 690 288 451T236 210Q234 194 234 177Q234 138 247 111T280 72T319 54T357 49Q408 49 449 74T510 128Q516 136 521 143T530 158T538 175T545 194T553 220T560 250T569 289T579 336T591 395T606 464L655 694H747V691Q651 243 645 213Q623 149 587 102Q482 -22 340 -22\",120349:\"220 348L161 694H216Q270 694 270 693L283 613Q334 313 346 215Q359 102 359 96Q359 87 358 84Q388 162 684 657L706 694H753Q799 694 799 693L387 0H333Q279 0 279 1L272 45Q264 89 249 177T220 348\",120350:\"596 540Q596 562 597 585T599 609Q599 588 436 255Q402 185 362 104L310 0H213V3Q213 6 188 347T161 694H263L265 664Q290 327 293 184Q293 112 289 85Q290 85 290 87Q290 95 301 123T332 194T373 282T419 380T463 469T498 541T517 579L574 694H671V689L674 646Q678 603 682 538T691 401T699 263T703 160Q703 102 700 87Q719 154 930 576L989 694H1076Q1076 693 903 347L730 0H628V4L626 26Q624 48 622 85T616 168T609 267T603 369T598 464T596 540\",120351:\"14 0Q17 3 184 184T352 367L265 529Q244 567 222 609T188 672L176 692Q176 694 236 694H297L338 612Q387 515 400 489L421 448L645 694H758L708 640Q481 393 456 368Q455 366 500 281T596 104T652 0H531L388 293L128 0H14\",120352:\"151 692Q151 694 212 694H272L418 362L696 683L705 694H758L809 693Q809 692 630 490T444 280Q442 275 413 139L383 1L333 0Q282 0 282 2Q283 3 312 141L341 278L246 484L151 692\",120353:\"67 54Q551 615 551 617Q543 618 517 618Q510 618 463 618T376 617Q200 617 200 618T209 657L216 694H459Q702 694 702 692Q702 689 697 667L692 643L207 80H392Q493 81 577 81Q577 70 560 2V0H55V2L67 54\",120354:\"313 386Q286 386 260 381T217 369T186 355T164 342T155 337Q154 338 159 377T165 418Q251 461 320 461Q322 461 328 461T337 460Q397 460 435 424T473 329Q473 325 473 318T472 308Q432 110 407 2V0H317V2L325 38Q295 21 269 10Q215 -10 156 -10H149Q76 -10 62 69Q61 75 61 90Q61 127 73 150T116 194Q146 215 207 231T348 252H368L373 277Q378 302 378 318Q378 367 339 384Q332 386 313 386ZM150 116Q150 93 171 79T223 65Q259 65 293 85T341 135Q343 140 348 160T353 184Q353 186 342 186Q298 186 231 174T153 134Q150 127 150 116\",120355:\"302 -11Q266 -11 235 1T190 26L176 38Q170 8 168 2V0H121Q75 0 75 1L84 46Q94 90 113 177T149 348L223 694H267Q312 694 312 693T282 551T251 407Q251 406 256 408T271 415Q347 454 430 454H438Q501 454 528 374Q539 339 539 299Q539 179 466 84T302 -11ZM443 275Q443 317 421 348T346 379Q318 379 296 369Q269 359 238 332L193 118L198 109Q220 65 269 65Q350 65 396 130T443 275\",120356:\"75 164Q75 226 100 282T165 377T252 437T342 460H347Q447 460 499 417L483 378Q468 339 468 338Q466 338 455 347T424 366T385 378Q355 382 334 382Q262 382 215 318T168 177Q168 120 196 95T259 69H269Q345 69 420 108Q432 114 432 113T427 72L422 32L402 22Q382 12 344 2T259 -11Q214 -11 180 2T126 36T95 81T79 126T75 164\",120357:\"73 156Q73 224 102 293T184 408T294 455Q375 455 432 413Q438 407 438 410T469 553L499 694H588V691Q588 690 515 348T441 2V0H348V2Q357 29 357 43L352 41Q332 24 288 7T196 -10H190Q178 -10 166 -7T134 8T98 46T75 113Q73 129 73 156ZM419 335Q419 339 412 348T386 368T342 379Q284 379 243 343T184 261T167 168Q167 122 191 94T263 66Q321 66 367 116L374 124L397 229Q419 333 419 335\",120358:\"248 -11Q170 -11 121 41T71 173Q71 265 133 349T285 454Q305 460 318 460H328Q368 460 399 448Q472 414 472 309Q472 274 464 234L462 219H159Q156 198 156 185Q156 137 179 107T237 68Q246 66 268 66Q345 66 427 113V109Q426 108 422 73T417 37Q417 34 409 29Q329 -11 248 -11ZM401 299Q399 337 376 361T316 385Q291 385 266 371Q220 350 184 289H401V299\",120359:\"381 443Q381 440 374 407T366 371H315Q263 371 263 369Q262 368 224 186Q215 145 205 97T189 25L184 2V0H94V2L99 25Q104 48 114 96T134 186Q172 368 173 369Q173 371 139 371H106V373L114 410L121 444H155L188 445L191 455L212 551Q232 612 288 658T415 705Q438 705 464 701T494 694Q478 614 477 614L467 618Q457 621 440 624T406 629H400Q333 629 306 579Q301 568 289 507L275 444H328Q381 444 381 443\",120360:\"113 252Q113 334 177 394T311 454Q332 454 350 451T379 442T398 432T410 424L413 421Q412 423 411 424L409 426Q409 429 434 436T496 449T560 455H568V451Q568 447 567 429T566 394L565 377L553 379Q522 385 479 385Q463 385 456 384L443 383L436 392Q454 357 454 324Q454 243 390 182T249 120Q233 120 219 122T195 128T178 136T167 142L163 145Q149 131 149 105Q149 78 171 72L242 71Q246 71 269 71T303 71T336 68T372 62T403 51T432 32Q461 8 461 -40Q461 -112 383 -159T211 -206Q123 -206 68 -172T12 -86Q12 -55 31 -23T82 32Q90 38 89 39Q89 40 87 44T82 59T80 82Q80 134 126 189Q113 228 113 252ZM369 319Q369 354 350 368T304 383Q274 383 252 369T218 333T202 291T197 255Q197 221 217 206T263 191Q317 191 343 233T369 319ZM373 -59Q373 -41 362 -30T330 -13T291 -7T247 -5H216Q167 -5 158 -6T139 -12Q123 -20 110 -38T97 -76Q97 -102 133 -118T221 -134Q242 -134 267 -130T316 -118T357 -94T373 -59\",120361:\"416 321Q416 379 336 379Q276 379 237 302Q226 276 209 202T180 66T166 2V0H119Q73 0 73 1L82 46Q92 90 111 177T147 348L221 694H265Q310 694 310 693T279 544L247 395Q325 455 403 455Q513 455 513 358Q513 334 508 309Q507 304 476 156T443 2V0H350V2L357 34Q364 65 373 110T392 200T409 281T416 321\",120362:\"189 578Q190 579 199 627T211 678V680H315V678Q313 675 304 627T293 578V576H189V578ZM168 442T168 443T213 444T258 443T212 225T164 2V0H74V2Q75 7 121 224\",120363:\"211 577L233 680H284Q336 680 336 679L315 576H263Q211 576 211 577ZM19 -204Q-12 -204 -40 -196T-82 -179T-96 -170Q-96 -168 -78 -132L-61 -95L-54 -103Q-32 -126 3 -126Q26 -126 50 -116Q76 -101 83 -85Q84 -79 140 180T196 443Q196 444 241 444T286 443Q286 441 232 186T175 -75Q163 -120 122 -162T19 -204\",120364:\"150 348L224 694H310V691Q218 259 218 258L232 270Q245 281 274 306T327 351L435 444H489L542 443Q542 442 443 357L344 272L471 1L422 0H372L366 14Q359 27 347 54T323 105L273 210Q271 210 231 174L190 139L160 0H118Q76 0 76 1L86 46Q95 90 114 177T150 348\",120365:\"148 348L222 694H311V691Q311 690 238 348T164 2V0H119Q74 0 74 1L84 46Q93 90 112 177T148 348\",120366:\"416 321Q416 379 336 379Q276 379 237 302Q226 276 209 202T180 66T166 2V0H119Q73 0 73 2L121 226L169 449Q169 450 213 450H256L249 421Q248 417 247 412T246 404T245 398T244 394T244 392Q250 398 261 407T307 433T379 454H392H400Q451 454 472 439Q482 434 489 427T500 412T506 399T510 388L511 384Q511 384 517 388Q563 431 620 446Q648 455 680 455Q790 455 790 358Q790 334 785 309Q784 304 753 156T720 2V0H627V2L634 34Q641 65 650 110T669 200T686 281T693 321Q693 379 613 379Q553 379 514 302Q503 276 486 202T457 66T443 2V0H350V2L357 34Q364 65 373 110T392 200T409 281T416 321\",120367:\"416 321Q416 379 336 379Q276 379 237 302Q226 276 209 202T180 66T166 2V0H119Q73 0 73 2L121 226L169 449Q169 450 213 450H256L249 421Q248 417 247 412T246 404T245 398T244 394T244 392Q250 398 261 407T307 433T379 454H392Q416 454 433 452T470 440T502 411T513 358Q513 334 508 309Q507 304 476 156T443 2V0H350V2L357 34Q364 65 373 110T392 200T409 281T416 321\",120368:\"69 169Q69 238 107 306T211 417T348 461Q419 461 471 412T523 271Q523 161 438 75T247 -11Q170 -11 120 39T69 169ZM432 279Q432 338 401 361T333 385Q280 385 240 352T182 273T164 178Q164 119 195 94T265 68Q306 68 344 94Q380 115 406 169T432 279\",120369:\"259 443Q251 405 251 404L260 409Q269 414 286 421T324 436T375 449T434 455Q482 455 510 417T538 303Q538 169 463 79T302 -11Q226 -11 176 39V36Q175 35 151 -80L127 -193Q127 -194 80 -194H34V-191L102 127L169 443Q169 444 214 444T259 443ZM269 65Q332 65 386 124T441 262Q441 304 422 334T370 373Q356 375 339 375Q293 375 238 331L193 118Q200 103 206 94T229 75T269 65\",120370:\"72 149Q72 272 146 363T304 455Q340 455 371 442T409 423T436 398Q438 411 442 427L448 455H538L400 -193Q400 -194 354 -194Q307 -194 307 -193L356 37V41Q355 41 350 38T332 27T302 13Q247 -10 191 -10H179Q138 -10 105 32T72 149ZM414 298Q402 376 341 376Q277 376 223 317T169 182Q169 121 198 93T265 65Q319 65 365 111L377 123L414 298\",120371:\"240 377L244 380Q248 384 255 390T272 404T296 419T325 434T361 446T401 454Q403 454 408 454T416 455H424L421 442Q419 435 413 405T406 373Q351 373 294 336T216 237Q213 231 201 173T178 60T164 2V0H119Q74 0 74 2L122 226L170 449Q170 450 213 450H255L247 414Q246 409 245 403T243 393T241 385T240 379T240 377\",120372:\"99 299Q99 318 106 341T133 393T195 441T298 461Q336 461 370 453T420 437L436 429Q436 428 421 389T405 350Q356 386 273 386H265Q248 386 237 384T211 371T191 337Q189 329 189 326Q189 320 190 315T194 306T200 299T209 293T218 289T228 285T239 283T251 281T263 278L270 276Q278 275 283 274T298 270T316 264T333 255T351 243T367 228T380 209T388 186T391 157Q391 96 341 43T193 -11Q171 -11 150 -8T114 -1T84 9T61 19T45 28T35 33Q35 36 67 116L76 109Q132 67 211 67Q258 67 279 88T301 135Q301 159 280 170T224 187T180 197Q141 212 120 239T99 299\",120373:\"245 68Q267 68 289 75T322 90L334 98Q338 94 338 28V24L324 19Q268 -4 218 -8Q198 -11 177 -11Q118 -11 118 75Q118 98 123 127Q125 137 149 251T174 369Q174 371 135 371H97V373L105 410L112 444H152L192 445L200 478Q208 512 213 541L219 571H261Q303 571 303 570T290 506L276 444H343Q410 444 410 443Q410 440 403 407T395 371H328Q261 371 261 369Q211 152 211 118Q211 68 245 68\",120374:\"166 -10H160Q146 -10 137 -8T115 0T97 22T90 63Q90 79 130 268L167 443Q167 444 214 444Q260 444 260 443L224 273Q187 97 187 86Q187 70 202 65T250 59Q303 59 336 83T379 139Q380 143 412 292T444 443Q444 444 491 444Q537 444 537 443T491 225T443 2V0H353V2L361 38L352 34Q344 29 326 22T286 7T232 -5T166 -10\",120375:\"177 6L108 442V444H201V442Q202 441 213 371T235 213T246 90V65Q259 117 429 406L450 444H495Q540 444 540 443Q539 442 411 221L282 1L230 0H178L177 6\",120376:\"148 5Q147 8 128 222T109 440L108 444H199V442Q200 441 204 385T214 253T219 140Q219 108 215 76Q215 72 214 67V65L215 66Q219 95 278 221L390 444H475V437Q497 203 497 121Q497 90 494 70Q494 67 494 67L496 73Q520 143 654 405L674 444H718Q762 444 762 443L534 1L483 0H432V5Q429 28 422 126T413 283Q413 343 416 370L417 378Q416 377 416 376Q401 303 248 12L242 0H148V5\",120377:\"317 229Q453 9 460 0H409L359 1L312 88Q266 176 265 176Q265 177 254 165T223 132T182 88L100 0H1L15 14Q29 28 61 59T118 115L236 229L226 244Q108 433 100 444H201L290 294L438 444H537L528 435Q526 432 512 418T468 376T418 327L317 229\",120378:\"11 -117L20 -120Q28 -124 46 -128T84 -132H100Q124 -122 149 -85Q200 -6 200 1Q200 17 155 204T109 442Q109 444 156 444H203Q203 443 208 419T221 357T235 277T248 190T254 114Q254 81 250 67V65Q251 65 251 67Q256 94 297 177Q339 259 422 397L450 444H540Q540 443 386 186T219 -90Q179 -153 145 -179T73 -205Q52 -205 34 -202Q29 -202 21 -201T7 -198L1 -197Q1 -196 6 -157T11 -117\",120379:\"129 408L136 444H315Q494 444 494 443Q494 441 489 419L484 396L164 76L291 77Q418 77 418 76T411 41T402 2V0H215Q28 0 28 2L34 27L38 50L360 371L240 370Q121 370 121 371Q124 388 129 408\",120432:\"191 76Q212 75 220 68T229 38Q229 10 208 1H129H80Q48 1 38 7T28 38Q28 51 29 57T40 69T70 76Q89 76 89 78Q90 79 117 205T173 461T205 599Q212 623 250 623H262H273Q312 623 319 599Q322 591 350 461T406 205T435 78Q435 76 454 76H458Q484 76 493 59Q496 53 496 38Q496 11 478 3Q474 1 395 1H317Q295 8 295 38Q295 65 311 73Q316 75 333 76L348 77V78Q348 80 341 112L334 143H190L183 112Q176 80 176 78Q175 76 178 76Q180 76 191 76ZM318 221Q313 238 288 366T263 519Q263 526 262 527Q261 527 261 520Q261 493 236 365T206 221Q206 219 262 219T318 221\",120433:\"39 1Q17 10 17 32V38V46Q17 65 34 73Q40 76 61 76H84V535H61H54Q27 535 19 553Q17 557 17 573Q17 583 17 587T23 599T39 610Q40 611 179 611Q320 610 332 607Q332 607 339 605Q394 591 427 547T461 454Q461 413 436 378T369 325L358 320Q405 311 443 270T482 169Q482 112 445 64T345 3L334 1H39ZM309 533Q302 535 234 535H168V356H230Q284 357 296 358T323 368Q346 380 361 402T377 452Q377 482 358 505T309 533ZM398 176Q396 218 371 246T315 279Q310 280 237 280H168V76H239Q316 77 327 81Q329 82 334 84Q398 107 398 176\",120434:\"40 305Q40 437 110 529T281 622Q315 622 343 611T387 589T404 578Q409 585 415 596T425 611T435 618T452 622Q472 622 478 609T485 566Q485 559 485 540T484 508V460Q484 413 478 403T442 393Q417 393 409 402Q400 409 400 420Q400 428 395 445T380 487T347 528T295 546Q235 546 180 483T124 306Q124 245 141 197T186 121T241 80T296 66Q346 66 373 103T400 178Q400 209 435 209H442H450Q484 209 484 172Q480 96 421 43T281 -11Q177 -11 109 84T40 305\",120435:\"38 1Q16 8 16 38Q16 62 32 73Q39 76 58 76H78V535H58Q40 535 32 538Q16 548 16 573Q16 587 17 591Q23 604 34 607T83 611H166H176Q188 611 209 611T239 612Q299 612 337 597T415 530Q485 438 485 300Q485 180 431 100T301 3L291 1H38ZM400 301Q400 363 385 410T346 482T303 519T267 534Q261 535 210 535H162V76H214L267 77Q323 89 361 148T400 301\",120436:\"374 271Q374 241 367 232T332 223Q307 223 299 231Q290 240 290 263V279H173V76H418V118V144Q418 167 426 176T460 186Q491 186 500 166Q502 161 502 93V52Q502 25 499 17T480 1H41Q19 9 19 32V38Q19 63 36 73Q42 76 65 76H89V535H65H55Q44 535 38 537T25 548T19 573Q19 602 41 610H47Q53 610 63 610T88 610T121 610T160 611T204 611T251 611H458Q460 609 465 606T471 602T475 598T478 593T479 586T480 576T480 562V526V488Q480 452 462 444Q458 442 438 442Q413 442 405 450Q398 457 397 463T396 501V535H173V355H290V371Q290 394 299 403T332 412Q363 412 372 392Q374 387 374 317V271\",120437:\"384 260Q384 230 377 221T342 212Q317 212 309 220Q300 229 300 252V268H179V76H249Q264 67 267 61T271 38Q271 10 249 1H44Q22 9 22 32V38Q22 63 39 73Q45 76 69 76H95V535H69H59Q42 535 32 542T22 573Q22 602 44 610H50Q56 610 66 610T91 610T125 610T164 611T208 611T257 611H468Q470 609 475 606T481 602T485 598T488 593T489 586T490 576T490 562V526V488Q490 452 472 444Q468 442 448 442Q423 442 415 450Q408 457 407 463T406 501V535H179V344H300V360Q300 383 309 392T342 401Q373 401 382 381Q384 376 384 306V260\",120438:\"38 306Q38 447 105 534T261 622Q280 622 298 618T329 608T350 596T366 585L371 581Q373 581 377 591T390 612T417 622Q437 622 443 609T450 566Q450 559 450 540T449 508V460Q449 413 443 403T407 393Q392 393 386 394T373 402T364 426Q360 472 335 509T271 546Q214 546 168 477T121 308Q121 210 164 138T271 65Q293 65 310 78T337 109T352 147T360 180T362 195Q362 196 333 196L304 197Q282 204 282 227V234Q282 247 282 251T288 261T304 272H474Q488 263 492 256T496 234Q496 211 479 199Q475 197 461 196H449V21Q441 6 434 3T412 -1H407H402Q385 -1 379 3T364 28Q350 14 322 2T260 -11Q173 -11 106 76T38 306\",120439:\"16 571Q16 597 27 604T74 611H125H208Q223 602 226 596T230 573Q230 559 227 551T217 540T204 536T186 535H165V356H359V535H338H333Q306 535 297 552Q295 556 295 573Q295 586 295 590T301 600T317 611H486Q501 602 504 596T508 573Q508 559 505 551T495 540T482 536T464 535H443V76H464H470Q482 76 489 75T502 64T508 38Q508 10 486 1H317Q306 5 301 11T296 21T295 38V44Q295 66 311 73Q318 76 338 76H359V280H165V76H186H192Q204 76 211 75T224 64T230 38Q230 10 208 1H39Q28 5 23 11T18 21T17 38V44Q17 66 33 73Q40 76 60 76H81V535H60Q45 535 38 536T24 545T16 571\",120440:\"400 76Q431 76 441 69T452 38Q452 29 452 26T450 18T443 9T430 1H95Q84 6 79 12T73 23T72 38Q72 65 90 73Q96 76 157 76H220V535H157H124Q93 535 83 542T72 573Q72 603 93 610Q97 611 264 611H430Q432 609 436 607T444 602T449 594Q452 588 452 573Q452 546 434 538Q428 535 367 535H304V76H367H400\",120441:\"202 543T202 573T224 610H228Q231 610 237 610T251 610T269 610T291 611T315 611T342 611H457Q471 602 475 595T479 573Q479 549 462 538Q454 535 432 535H408V328Q408 159 408 133T402 93Q386 48 340 19T229 -11Q158 -11 108 16T57 100Q57 129 73 141T108 154Q128 154 143 140T159 102Q159 93 155 79Q188 65 228 65H230Q290 65 318 106Q323 115 323 139T324 329V535H274L224 536Q202 543 202 573\",120442:\"18 549T18 573T29 604T70 611H118H193Q207 603 210 596T214 573Q214 549 198 538Q191 535 172 535H152V421Q152 344 152 326T153 309L242 422L329 534Q327 535 322 536T314 538T308 542T303 548T300 558T298 573Q298 600 316 608Q322 611 392 611H463Q477 602 481 595T485 573Q485 535 446 535H441H420L281 357L436 77L454 76Q473 75 478 73Q495 62 495 38Q495 10 473 1H345Q334 5 329 11T324 21T323 38Q323 51 324 56T332 68T355 77L233 296L152 192V76H172Q191 76 198 73Q214 63 214 38Q214 9 193 1H41Q18 8 18 38Q18 61 35 73Q42 76 61 76H81V535H61Q42 535 35 538Q18 549 18 573\",120443:\"27 594Q34 605 43 608T84 611H154H213Q258 611 269 605T281 573Q281 546 263 538Q257 535 222 535H185V76H404V118V145Q404 168 411 177T446 186H453Q478 186 486 167Q488 161 488 93V50Q488 24 485 17T466 1L258 0H147H99Q47 0 36 6T25 38Q25 59 35 69Q44 76 76 76H101V535H76H64Q36 535 27 552Q25 557 25 573T27 594\",120444:\"50 535Q37 536 31 537T18 547T12 573Q12 598 22 604T62 611H91H121Q147 611 158 607T178 587Q183 579 222 446T261 293Q261 289 262 288Q263 288 263 292Q263 311 298 434T346 588Q353 603 365 607T402 611H435H450Q488 611 500 605T512 573Q512 556 506 547T493 537T474 535H459V76H474Q487 75 493 74T505 64T512 38Q512 11 494 3Q490 1 424 1H386Q355 1 345 7T335 38Q335 55 341 64T354 74T373 76H388V302Q388 512 387 519Q382 482 346 359T304 228Q292 204 262 204T220 228Q215 237 179 359T137 519Q136 512 136 302V76H151Q164 75 170 74T182 64T189 38Q189 11 171 3Q167 1 101 1H63Q32 1 22 7T12 38Q12 55 18 64T31 74T50 76H65V535H50\",120445:\"20 571Q20 598 30 604T73 611H105H136Q152 611 160 611T177 607T189 601T198 587T206 568T217 537T231 497Q354 142 365 95L368 84V535H347H342Q314 535 306 552Q304 556 304 573Q304 586 304 590T310 600T326 611H482Q497 602 500 596T504 573Q504 559 501 551T491 540T478 536T460 535H439V25Q432 7 424 4T389 0H374Q334 0 322 31L293 115Q171 468 159 517L156 528V76H177H183Q195 76 202 75T215 64T221 38Q221 10 199 1H43Q32 5 27 11T22 21T21 38V44Q21 66 37 73Q44 76 64 76H85V535H64Q49 535 42 536T28 545T20 571\",120446:\"102 588Q140 621 240 621Q323 621 335 620Q393 613 422 588Q450 560 459 493T468 306Q468 185 460 118T422 23Q382 -10 289 -10H262H235Q142 -10 102 23Q74 50 65 118T56 306Q56 427 64 494T102 588ZM363 513Q357 523 347 530T324 540T302 544T280 546H268Q192 546 167 521Q150 501 145 452T140 300Q140 235 142 197T151 130T172 89T207 71T262 65Q317 65 341 81T374 144T384 300Q384 474 363 513\",120447:\"41 1Q19 9 19 32V38Q19 63 36 73Q42 76 65 76H89V535H65H55Q38 535 29 543T19 576Q19 603 41 610H49Q57 610 70 610T100 610T136 611T175 611Q190 611 216 611T255 612Q321 612 363 598T441 537Q480 486 480 427V421Q480 354 447 311T378 251Q339 230 275 230H239H173V76H197Q220 76 227 73Q244 62 244 38Q244 10 222 1H41ZM396 421Q396 461 369 491T300 533Q294 534 233 535H173V306H233Q294 307 300 308Q345 319 370 352T396 421\",120448:\"56 306Q56 380 58 426T68 510T87 568T120 600T170 617T240 621Q323 621 335 620Q393 613 422 588Q450 560 459 493T468 306Q468 124 447 66Q433 23 394 6L424 -53Q454 -112 454 -118Q454 -128 441 -138H377Q367 -135 363 -129T333 -69L304 -11H254Q205 -10 180 -8T128 6T91 36T70 92T58 178T56 306ZM227 151Q227 171 262 171H276H281Q292 171 296 171T305 170T313 165T317 158T323 145T332 127L353 88Q356 88 361 95T372 131T382 202Q384 228 384 306Q384 452 371 492T304 544Q296 545 251 545Q230 545 215 543T188 534T169 520T155 497T147 466T143 423T141 371T140 306Q140 248 141 217T146 154T157 109T178 83T212 68T262 65H266L264 70Q261 75 256 85T247 105Q227 145 227 151\",120449:\"16 571Q16 598 27 605T76 612Q84 612 108 612T148 611Q268 611 294 605Q346 592 389 550T432 440Q432 394 410 359Q393 329 366 310L358 303Q387 273 399 239Q405 219 405 178T408 106T421 68Q426 65 428 65Q433 65 435 74T438 96T441 112Q450 130 480 130H485Q519 130 522 100Q522 79 516 56T488 11T434 -11Q421 -11 408 -8T377 5T344 37T324 93Q322 101 322 154L321 209Q304 257 257 267Q252 268 207 268H165V76H186H192Q204 76 211 75T224 64T230 38Q230 10 208 1H39Q28 5 23 11T18 21T17 38V44Q17 66 33 73Q40 76 60 76H81V535H60Q45 535 38 536T24 545T16 571ZM348 440Q348 478 321 502T260 532Q252 534 208 535H165V344H208Q212 344 223 344T239 345T252 346T266 348T278 351T293 358Q348 387 348 440\",120450:\"52 454Q52 524 107 572T229 621Q266 621 274 620Q326 610 360 588L371 581Q377 594 379 598T386 610T397 619T412 622Q433 622 439 610T446 570Q446 563 446 545T445 515V479Q445 441 444 432T436 417Q428 408 403 408T370 417Q361 424 361 434Q361 439 360 448T351 476T331 509T295 535T238 546Q194 546 163 522T132 458Q132 435 148 412Q155 401 166 393T192 380T218 371T247 364T270 359Q341 342 349 339Q389 325 418 296T461 229Q472 201 472 164Q469 92 417 41T287 -11Q240 -11 200 -1T143 19L126 29Q117 6 109 -2Q100 -11 84 -11Q64 -11 58 1T51 42Q51 49 51 66T52 95V135Q52 173 53 180T61 194Q70 203 95 203Q119 203 127 194Q136 186 136 168Q143 66 284 66H290Q325 66 350 85Q391 115 391 165Q391 204 369 228T322 260Q320 260 255 275T185 293Q123 309 88 355T52 454\",120451:\"129 38Q129 51 129 55T135 65T151 76H220V535H110V501Q110 470 109 464T101 450Q93 442 68 442H60Q37 442 28 461Q26 466 26 527L27 589Q36 607 49 610H55Q61 610 72 610T97 610T131 610T170 611T215 611T264 611H476Q478 609 483 606T489 602T493 598T496 593T497 586T498 576T498 562V526V488Q498 452 480 444Q476 442 456 442Q431 442 423 450Q416 457 415 463T414 501V535H304V76H374Q389 67 392 61T396 38Q396 10 374 1H151Q140 5 135 11T130 21T129 38\",120452:\"-3 573Q-3 597 8 604T50 612Q57 612 77 612T111 611H200Q214 602 218 595T222 573Q222 549 205 538Q198 535 175 535H151V359Q151 333 151 291Q152 177 156 162Q157 160 157 159Q165 123 193 95T262 66Q303 66 330 94T367 159Q371 175 371 191T373 359V535H349H339Q328 535 322 537T309 548T303 573T306 595T325 611H506Q520 602 524 595T528 573Q528 549 511 538Q504 535 481 535H457V364Q457 189 456 182Q448 101 394 45T262 -11Q189 -11 132 43T68 182Q67 189 67 364V535H43H33Q22 535 16 537T3 548T-3 573\",120453:\"19 578Q19 585 20 590T23 598T29 604T38 608T48 610T62 611T78 612T97 611T119 611H195Q210 602 213 596T217 573Q217 561 216 555T206 542T179 535H164Q166 529 188 435T235 231T261 94L262 84V88Q263 91 263 94Q265 121 289 231T336 438L360 535H345Q308 535 308 566V573Q308 586 308 590T314 600T330 611H484Q499 602 502 595T505 573Q505 560 504 554T493 541T465 535H447L384 278Q321 19 319 14Q309 -7 278 -7H262H246Q215 -7 205 14Q203 19 140 278L78 535H59Q45 535 38 536T25 547T19 573V578\",120454:\"459 611Q491 611 501 605T512 573Q512 538 482 535H474L439 276Q406 26 402 11Q398 2 389 -3Q387 -3 386 -4L380 -7H359H349Q324 -7 313 13Q307 29 285 139T263 275Q263 283 262 283Q261 282 261 274Q261 248 239 137T211 13Q200 -7 175 -7H165H144Q136 -3 127 3Q121 10 117 36T85 276L50 535H42Q26 536 19 545T12 564V573Q12 603 33 610Q37 611 101 611H134Q165 611 175 604T186 573Q186 563 186 559T182 547T169 538T143 535H122V531Q124 517 133 446T155 266T172 96V84L173 102Q176 157 192 243T215 346Q227 367 259 367H262H265Q297 367 309 346Q316 329 332 243T351 102L352 84V96Q356 161 368 266T390 444T402 531V535H381Q366 535 359 536T345 547T338 573Q338 600 356 608Q362 611 425 611H459\",120455:\"39 571Q39 597 49 604T93 611H141H218Q233 602 236 595T239 573Q239 538 210 535Q202 535 202 534T215 507T243 454L257 428L307 535H298Q266 538 266 573Q266 584 267 588T273 598T289 611H366H401Q442 611 454 605T466 573Q466 546 448 538Q442 535 421 535H398L299 327Q299 323 362 201L426 77L449 76Q467 76 475 75T489 65T495 38Q495 11 477 3Q473 1 395 1H317Q295 8 295 38Q295 73 325 76L334 77Q333 78 314 117T276 196L257 235L239 196Q221 157 204 118T186 77Q190 76 196 76Q211 74 218 67T227 55T228 38Q228 28 227 24T221 13T206 1H50Q28 9 28 32V38Q28 63 45 73Q51 76 73 76H96L214 324Q215 327 162 431L108 535H85H79Q67 535 60 536T46 546T39 571\",120456:\"20 573Q20 597 30 604T72 611H121H198Q212 602 216 595T220 573Q220 568 219 563T217 555T214 549T211 544T207 541T203 538T198 537T194 536T190 536L188 535Q179 535 179 534L188 516Q196 497 208 470T232 415T252 363T261 332Q261 329 262 329T263 332Q263 354 333 508L345 534Q345 535 336 535Q305 538 305 567V573Q305 589 308 595T327 611H483Q505 598 505 573Q505 549 488 538Q481 535 460 535H438L304 245V76H325H331Q343 76 350 75T363 64T369 38Q369 10 347 1H178Q167 5 162 11T157 21T156 38V44Q156 66 172 73Q180 76 199 76H220V245L86 535H64Q44 535 36 538Q20 548 20 573\",120457:\"71 1Q60 5 55 11T49 23T48 39V46Q48 56 58 73T131 183Q171 242 197 282L366 535H144V501Q144 470 143 464T135 450Q127 442 102 442H94Q71 442 62 461Q60 466 60 527L61 589Q70 607 83 610H88Q93 610 102 610T124 610T154 610T188 611T227 611T270 611H454Q456 609 461 606T467 601T471 597T474 591T475 584T476 572V565Q476 555 466 538T393 428Q353 369 327 329L158 76H397V120V146Q397 169 405 179T439 189Q470 189 479 169Q481 164 481 95V48Q481 24 478 16T459 1H71\",120458:\"126 306Q105 306 90 321T74 359Q74 439 211 439Q268 439 276 438Q343 426 383 390T430 306Q431 301 431 190V81Q446 79 465 78T492 76T509 72T521 60T524 38Q524 11 506 3Q502 1 466 1Q426 1 406 5T379 14T355 36L345 30Q284 -6 205 -6Q135 -6 92 39T48 141Q48 182 79 212T158 256T252 278T342 285H347V290Q347 315 325 335T267 362Q258 363 224 363Q189 363 185 362H179L178 358Q178 353 178 352T176 345T174 337T170 330T165 322T158 316T150 311T139 308T126 306ZM132 140Q132 115 157 93T224 70Q269 70 302 87T344 133Q346 139 347 175V211H339Q256 209 194 190T132 140\",120459:\"4 573Q4 596 15 603T52 611H90H124Q146 611 155 608T171 591Q173 586 173 491V396L182 402Q217 424 256 431Q280 437 309 437Q376 437 434 379T492 217Q492 162 473 118T422 47T358 8T293 -6Q229 -6 174 38Q171 13 163 7T135 1H131H122Q99 1 90 23L89 279V535H58L27 536Q4 543 4 573ZM409 215Q409 269 377 315T283 361Q255 361 224 344T177 297L173 290V167Q189 124 213 97T278 70Q330 70 369 111T409 215\",120460:\"291 -6Q196 -6 131 60T66 216Q66 296 119 361Q154 403 200 421T273 439Q275 440 293 440H313Q400 440 433 409Q454 388 454 359Q454 335 439 321T402 306Q380 306 365 321T350 357V362L340 363Q339 363 326 363T303 364Q280 364 266 362Q217 352 184 313T151 215Q151 153 199 112T313 70Q341 70 357 85T381 118T394 140Q402 146 424 146Q443 146 447 144Q466 137 466 117Q466 106 457 88T429 47T374 10T291 -6\",120461:\"266 573Q266 596 277 603T314 611H352H385Q411 611 419 607T435 586V76H498Q512 67 516 60T520 38Q520 9 498 1H436Q429 1 417 1T398 0Q375 0 363 7T351 34V43L342 36Q288 -6 223 -6Q143 -6 87 58T31 216Q31 307 88 372T230 437Q292 437 342 405L351 399V535H320L289 536Q266 543 266 573ZM351 290Q347 302 337 316T302 346T244 361Q193 361 154 319T115 215Q115 152 152 111T235 70Q314 70 351 170V290\",120462:\"48 217Q48 295 100 361T248 439L258 440Q268 440 274 440Q329 438 369 416T428 359T456 292T464 228Q464 215 461 208T454 198T442 190L288 189H135L138 179Q153 132 199 102T303 71Q336 71 353 86T380 120T398 143Q404 146 422 146Q453 146 462 126Q464 120 464 116Q464 84 416 39T285 -6Q187 -6 118 59T48 217ZM377 264Q371 291 365 306T341 338T294 362Q288 363 264 363Q225 363 190 336T139 264H377\",120463:\"43 395Q44 405 44 408T47 416T53 423T66 431H176V461Q176 500 182 518Q201 570 252 593T353 617Q399 614 418 593T437 548Q437 528 424 514T387 499Q365 499 353 511T338 537V541H328Q275 536 261 494Q260 490 260 460V431H327Q334 431 346 431T364 432Q392 432 404 425T416 393T405 362T365 355H327H260V76H319Q375 76 388 71T401 38Q401 27 400 23T395 12T379 1H58Q47 6 42 12T36 23T35 38Q35 65 53 73Q59 76 117 76H176V355H121H93Q64 355 54 362T43 395\",120464:\"60 274Q60 337 107 386T233 436Q278 436 316 417L329 410L338 416Q384 442 427 442T489 423T509 381T494 345T460 332Q449 332 440 338Q432 341 427 348T419 360T415 365Q414 364 410 364L383 355Q406 320 406 274Q406 211 358 162T233 112Q189 112 155 128L146 133Q142 125 142 115Q142 99 150 85T175 71Q182 72 187 70Q188 70 195 70T218 70T254 69Q259 69 275 69T297 69T318 68T340 66T361 62T384 57T405 49T428 38Q495 -1 495 -76Q495 -143 427 -186T262 -229Q161 -229 94 -185T29 -73Q30 -60 33 -48T39 -26T47 -8T57 8T67 20T77 30T86 38L91 43Q91 44 86 53T75 80T70 117Q70 142 89 183L83 194Q60 232 60 274ZM321 274Q321 312 296 337T230 362Q197 362 171 338T145 274Q145 235 170 211T233 187Q273 187 297 212T321 274ZM422 -78Q422 -54 408 -38T366 -15T315 -6T255 -4H200Q198 -4 193 -4T183 -3Q148 -3 125 -26T102 -78Q102 -110 151 -132T261 -154Q321 -154 371 -132T422 -78\",120465:\"4 573Q4 596 15 603T52 611H90H124Q146 611 155 608T171 591Q173 586 173 489Q173 394 175 394L186 402Q197 410 219 420T269 434Q278 436 306 436Q343 436 371 423Q411 402 423 365T436 265Q436 257 436 239T435 211V198V76H498Q512 67 516 60T520 38Q520 9 498 1H308Q286 10 286 32V38V46Q286 65 303 73Q309 76 329 76H351V188Q351 204 351 230T352 266Q352 321 341 341T288 361Q253 361 222 341T176 274L174 264L173 170V76H236Q250 67 254 60T258 38Q258 9 236 1H27Q4 8 4 38Q4 53 8 60T27 76H89V535H58L27 536Q4 543 4 573\",120466:\"202 538T202 559T218 596T260 612Q283 612 300 597T317 560Q317 538 300 523T260 507Q235 507 219 522ZM411 76Q441 76 451 69T462 38Q462 29 462 26T460 18T453 9T440 1H94Q72 8 72 33V38Q72 46 72 49T74 58T81 68T94 76H233V355H167L102 356Q80 363 80 393Q80 418 91 425T138 432Q145 432 165 432T200 431H295Q297 429 303 425T310 420T314 415T317 404T317 389T318 363Q318 354 318 314T317 241V76H378H411\",120467:\"261 559Q261 580 277 596T319 612Q342 612 359 597T376 560T360 523T320 507Q296 507 279 523T261 559ZM75 -91T100 -91T138 -107T152 -144V-150L160 -151H193H203Q241 -151 267 -121Q284 -97 288 -73T292 23V151V355H218L145 356Q123 365 123 387V393Q123 422 145 430H148Q151 430 156 430T169 430T185 430T205 431T227 431T251 431H354Q356 430 360 427T365 424T369 420T372 416T373 410T375 402T376 391T377 376T377 356Q377 345 377 286T376 176Q376 -67 371 -88Q362 -123 342 -151T299 -194Q254 -228 180 -228Q84 -226 56 -177Q49 -162 48 -148Q48 -122 61 -107\",120468:\"13 42Q13 63 23 69T69 76H102V535H69H54Q34 535 24 542T13 573Q13 588 15 593Q22 605 29 608T56 611H95Q113 611 122 611T140 610T152 609T159 607T163 603T167 597T173 589V413L174 237L295 355H275Q260 355 253 356T239 367T232 393Q232 419 243 425T304 431H359H464Q479 422 482 415T485 393Q485 364 464 356L431 355H398L293 254L427 76H486Q501 67 504 60T507 38Q507 28 507 24T501 12T486 1H314Q292 8 292 38Q292 62 308 73Q312 75 326 76L338 77L290 140Q279 154 267 171T248 196L242 204L207 171L173 139V76H206H221Q241 76 251 69T262 38Q262 11 244 3Q240 1 138 1Q123 1 100 1T70 0Q32 0 23 7T13 42\",120469:\"51 573Q51 602 73 610H76Q79 610 84 610T97 610T113 610T133 611T155 611T179 611H282Q301 598 304 586V76H452Q466 67 470 60T474 38Q474 10 452 1H73Q51 9 51 32V38Q51 54 54 60T73 76H220V535H146L73 536Q51 545 51 567V573\",120470:\"133 76Q156 74 164 67T172 38Q172 9 151 1H11Q-12 8 -12 38Q-12 61 5 73Q10 75 28 76H45V355H28Q10 356 5 358Q-12 370 -12 393Q-12 419 11 431H52H70Q91 431 100 427T116 405Q163 436 200 436Q255 436 281 390L285 394Q289 398 292 400T301 407T314 415T329 423T346 429T366 434T389 436H392Q425 436 448 411Q469 390 474 360T480 268V232V203V76H497Q520 74 528 67T536 38Q536 9 515 1H396Q374 9 374 32V38Q374 73 402 76H409V191V242Q409 317 404 339T375 361Q343 361 323 332T299 264Q298 258 298 165V76H315Q338 74 346 67T354 38Q354 9 333 1H214Q192 9 192 32V38Q192 73 220 76H227V191V242Q227 317 222 339T193 361Q161 361 141 332T117 264Q116 258 116 165V76H133\",120471:\"89 431Q94 431 105 431T122 432Q173 432 173 399Q173 394 175 394Q176 394 190 404T233 425T298 436Q343 436 371 423Q411 402 423 365T436 265Q436 257 436 239T435 211V198V76H498Q512 67 516 60T520 38Q520 9 498 1H308Q286 9 286 32V38V45Q286 65 303 73Q309 76 329 76H351V188Q351 204 351 230T352 266Q352 321 341 341T288 361Q253 361 222 341T176 274L174 264L173 170V76H236Q250 67 254 60T258 38Q258 9 236 1H27Q4 8 4 38Q4 53 8 60T27 76H89V355H58L27 356Q4 363 4 393Q4 408 8 415T27 431H89\",120472:\"52 216Q52 318 118 379T261 440Q343 440 407 378T472 216Q472 121 410 58T262 -6Q176 -6 114 58T52 216ZM388 225Q388 281 351 322T261 364Q213 364 175 325T136 225Q136 158 174 114T262 70T350 114T388 225\",120473:\"89 431Q93 431 104 431T121 432Q173 432 173 401V396L182 402Q237 437 305 437Q376 437 434 378T492 217Q492 146 459 93T382 17T291 -6Q261 -6 232 5T188 26L174 37Q173 37 173 -54V-146H236Q250 -155 254 -162T258 -184Q258 -213 236 -221H27Q4 -214 4 -184Q4 -169 8 -162T27 -146H89V355H58L27 356Q4 363 4 393Q4 408 8 415T27 431H89ZM409 215Q409 269 377 315T283 361Q255 361 224 344T177 297L173 290V167Q189 124 213 97T278 70Q330 70 369 111T409 215\",120474:\"34 215Q34 309 91 368T222 436Q224 436 231 436T242 437Q309 437 372 390V401Q372 419 381 428T414 437Q426 437 432 436T444 430T456 412V-146H489H504Q524 -146 534 -153T545 -184Q545 -211 527 -219Q523 -221 414 -221Q398 -221 374 -221T342 -222Q304 -222 294 -216T283 -184Q283 -157 301 -149Q307 -146 339 -146H372V-51Q372 43 371 43L364 38Q357 33 345 26T318 12T280 -1T236 -6Q155 -6 95 55T34 215ZM117 215Q117 152 157 111T250 70Q289 70 318 92T363 146Q372 163 372 192V215L371 263Q339 360 254 360Q206 360 162 321T117 215\",120475:\"327 76Q359 76 369 70T380 38Q380 10 359 1H47Q24 8 24 38Q24 54 28 61T47 76H145V355H96L47 356Q24 363 24 393Q24 409 28 416T47 431H207Q223 419 226 414T229 393V387V369Q297 437 394 437Q436 437 461 417T487 368Q487 347 473 332T438 317Q428 317 420 320T407 327T398 337T393 347T390 356L388 361Q348 356 324 345Q228 299 228 170Q228 161 228 151T229 138V76H293H327\",120476:\"72 317Q72 361 108 396T229 439Q231 439 245 439T268 440Q303 439 324 435T353 427T363 423L372 432Q380 440 397 440Q430 440 430 395Q430 390 430 380T429 366V335Q429 311 422 302T387 293Q364 293 355 300T346 316T343 336T325 353Q306 364 257 364Q209 364 178 351T147 317Q147 284 231 272Q327 256 357 247Q458 210 458 129V121Q458 74 413 34T271 -6Q246 -6 224 -3T189 5T165 14T150 22T144 26Q142 23 139 18T135 11T132 6T128 1T124 -2T119 -4T113 -5T104 -6Q84 -6 78 6T71 43Q71 48 71 60T72 79Q72 132 73 141T81 157Q90 166 115 166Q135 166 142 162T157 140Q168 108 191 90T260 70Q297 70 323 76T361 91T379 110T384 129Q384 157 346 171T247 195T165 212Q119 228 96 256T72 317\",120477:\"25 395Q26 405 26 408T29 416T35 423T48 431H145V481L146 532Q154 547 161 550T184 554H189Q218 554 227 534Q229 529 229 480V431H405Q406 430 411 427T418 422T422 416T426 407T427 393Q427 387 427 382T424 374T421 368T417 363T413 360T408 358L405 356L317 355H229V249Q229 237 229 214T228 179Q228 126 241 98T295 70Q354 70 365 149Q366 167 375 174Q383 182 407 182H415Q438 182 446 166Q448 161 448 148Q448 84 398 39T282 -6Q226 -6 189 29T146 128Q145 134 145 247V355H96H72Q45 355 35 362T25 395\",120478:\"4 393Q4 416 15 423T52 431H90Q141 431 151 429T168 417Q171 412 173 409V254L174 100Q182 70 244 70Q320 70 344 119Q349 130 350 144T351 248V355H320L289 356Q266 363 266 393Q266 408 270 415T289 431H351H386Q409 431 418 428T433 411Q435 406 435 241V76H498Q512 67 516 60T520 38Q520 9 498 1H436H394Q372 1 364 5T351 26L342 21Q293 -5 227 -5Q118 -5 96 67Q91 82 90 101T89 227V355H58L27 356Q4 363 4 393\",120479:\"24 392Q24 417 36 424T79 432Q85 432 103 432T132 431H215Q229 422 233 415T237 393Q237 355 198 355H193H172L262 77L352 355H331H323Q288 355 288 393Q288 409 291 415T310 431H478Q491 423 495 416T500 393Q500 364 478 356L452 355H426L374 190Q320 24 318 20Q307 -4 273 -4H262H251Q217 -4 206 20Q204 24 150 190L98 355H72L47 356Q24 363 24 392\",120480:\"54 355Q16 355 16 388V393Q16 423 37 430Q41 431 125 431H162Q206 431 218 425T230 393Q230 366 212 358Q206 355 174 355Q141 355 141 354L150 296Q181 110 181 89V84Q182 85 183 96Q185 118 199 173T218 237Q223 247 245 259H264H268Q294 259 309 240Q315 229 329 174T343 92Q343 84 344 84V86Q344 88 344 91T345 97Q347 125 356 187T374 301T383 354Q383 355 350 355H333Q314 355 304 362T294 393Q294 420 312 428Q318 431 401 431H440Q485 431 496 425T508 393Q508 382 508 377T498 363T470 355L455 354Q455 353 441 271T413 104T396 16Q384 -4 355 -4H351Q315 -4 305 9T280 79Q278 90 276 96Q265 149 265 169Q265 176 264 169Q263 166 263 162Q261 130 248 79T230 18Q220 -4 183 -4H175L151 -3Q134 5 127 17L112 102Q97 188 83 270T69 354Q62 355 54 355\",120481:\"35 393Q35 417 46 424T89 432Q95 432 112 432T141 431H223Q238 422 241 415T244 393Q244 389 244 383T237 367T216 355Q209 355 209 354L234 319Q259 286 260 286L308 354Q308 355 301 355Q285 356 278 365T270 384L271 393Q271 420 289 428Q295 431 376 431H459Q460 430 465 427T472 422T476 416T480 407T481 393Q481 368 470 362T434 355H425H392L344 290Q295 225 295 223Q294 223 309 203T350 149L405 77L439 76H453Q474 76 484 69T495 38Q495 10 473 1H303Q281 9 281 32V38Q281 49 282 54T290 67T313 76Q324 76 324 77L259 173L197 77Q202 76 209 76Q225 75 233 68T241 55T242 38Q242 28 242 24T236 12T221 1H51Q29 9 29 32V38Q29 48 29 51T31 59T38 67T51 76H117L171 149Q224 222 224 223L124 355H90H78Q54 355 45 361T35 393\",120482:\"26 393Q26 417 37 424T80 431H134H217Q232 422 235 416T239 393Q239 379 236 371T226 360T214 356T197 355L179 354V353L188 330Q197 306 209 272T235 201T259 133T271 89V84L274 95Q279 122 298 185T335 300T352 354Q352 355 331 355Q312 355 304 358Q288 368 288 393Q288 408 291 415T310 431H478Q479 430 484 427T491 422T495 416T499 407T500 393Q500 376 493 367T479 357T458 355H452Q426 355 425 353Q420 337 351 124T280 -94Q240 -195 168 -220Q147 -228 125 -228Q89 -228 66 -201T42 -139Q42 -116 56 -102T93 -87Q117 -87 130 -102T144 -135V-138H126Q121 -148 121 -150T130 -152Q182 -147 207 -87Q211 -78 223 -40T236 1Q230 10 102 355H75L49 356Q26 363 26 393\",120483:\"56 1Q40 7 37 14T34 41Q34 59 36 64Q39 67 43 73Q65 95 191 213T341 355H133V334Q133 306 124 297Q116 289 91 289H83Q60 289 51 308Q49 313 49 361L50 409Q59 427 72 430H78Q83 430 92 430T115 430T144 430T179 431T219 431T262 431H450Q452 430 455 428T459 424T463 422T466 419T468 416T469 413T470 409T471 404T472 398T472 391Q472 374 469 368L462 358Q453 349 315 218Q210 122 164 76H391V103Q391 136 400 146Q409 155 433 155Q464 155 473 135Q475 130 475 78V46Q475 24 472 16T453 1H56\",120488:\"296 0Q278 3 164 3Q58 3 49 0H40V62H92Q144 62 144 64Q388 682 397 689Q403 698 434 698Q463 698 471 689Q475 686 538 530T663 218L724 64Q724 62 776 62H828V0H817Q796 3 658 3Q509 3 485 0H472V62H517Q561 62 561 63L517 175H262L240 120Q218 65 217 64Q217 62 261 62H306V0H296ZM390 237L492 238L440 365Q390 491 388 491Q287 239 287 237H390\",120489:\"720 510Q720 476 704 448T665 404T619 377T580 362L564 359L583 356Q602 353 632 342T690 312Q712 292 725 276Q752 235 752 189V183Q752 160 741 125Q698 18 547 2Q543 1 288 0H39V62H147V624H39V686H264H409Q502 686 542 681T624 655Q720 607 720 510ZM563 513Q563 553 548 578T518 611T486 622Q479 624 385 624H293V382H375Q458 383 467 385Q563 405 563 513ZM590 192Q590 307 505 329Q504 330 503 330L398 331H293V62H391H400H444Q496 62 528 75T580 131Q590 155 590 192\",120490:\"425 0L228 3Q63 3 51 0H39V62H147V618H39V680H612V676Q614 670 627 552T643 428V424H581V428Q580 430 576 461T562 524T532 576Q512 596 481 605T426 616T357 618H304V62H439V0H425\",120491:\"901 12Q901 7 892 0H479Q65 0 62 2Q56 6 56 11Q56 14 242 347T433 685Q438 694 450 696Q454 698 480 698H506L523 687Q526 683 711 354T899 17Q901 13 901 12ZM653 137L427 538L202 137L315 136H540L653 137\",120492:\"723 286Q721 284 700 145T677 3V0H39V62H147V618H39V680H660V676Q662 670 675 552T691 428V424H629V428Q629 429 627 448T618 494T601 541Q574 593 527 605T382 618H374H304V384H336Q338 384 347 384T361 384T376 386T392 390T407 397T421 407T432 423Q442 444 443 482V501H505V205H443V224Q442 258 435 278T411 307T380 318T336 322H304V62H375H394Q429 62 449 62T497 66T541 76T577 95T609 126T632 170T651 232Q661 287 661 289H723V286\",120493:\"80 430L92 686H358Q624 686 628 684Q638 679 638 656Q638 640 637 639Q637 638 445 353Q401 288 351 214T277 103L253 67L256 66Q258 66 265 66T279 66T298 66H343Q380 66 406 68T464 81T518 110T557 164T579 250Q583 278 583 298Q583 299 614 299H645V291Q643 281 636 150T627 8V0H353Q79 0 75 2Q64 7 64 31Q64 48 66 52L259 340L451 623Q451 624 384 624Q294 623 259 612Q155 581 143 446Q142 440 142 432V430H80\",120494:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H51Q75 683 226 683Q376 683 400 686H412V624H304V388H595V624H487V686H499Q523 683 673 683Q824 683 848 686H860V624H752V62H860V0H848Q824 3 674 3Q523 3 499 0H487V62H595V326H304V62H412V0H400\",120495:\"629 -10T446 -10T164 89T64 340Q64 380 71 420T102 510T163 596T266 662T418 696H438Q488 696 499 695Q582 686 644 655T741 584T796 495T823 409T829 338Q829 188 729 89ZM439 645Q416 645 390 638T333 615T275 564T236 480Q221 423 221 341Q221 272 230 228Q247 144 301 94T447 43T592 93T663 228Q672 272 672 341Q672 645 439 645ZM286 242V446H348V412H545V446H607V242H545V276H348V242H286\",120496:\"397 0Q370 3 218 3Q65 3 38 0H25V62H139V624H25V686H38Q65 683 218 683Q370 683 397 686H410V624H296V62H410V0H397\",120497:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H51Q75 683 226 683Q376 683 400 686H412V624H304V338L472 483L634 624H565V686H576Q597 683 728 683Q814 683 829 686H836V624H730L614 524Q507 432 497 422Q496 422 498 418T514 395T553 342T627 241L759 63L805 62H852V0H842Q830 3 701 3Q550 3 526 0H513V62H549Q584 62 584 63Q583 65 486 196T388 328L304 256V62H412V0H400\",120498:\"285 0Q267 3 154 3Q56 3 47 0H40V62H131Q131 63 167 160T244 369T321 578T359 678Q366 698 393 698H404H413Q437 698 446 678Q448 672 560 369T674 62H765V0H754Q733 3 604 3Q453 3 429 0H416V62H461L507 63L355 470Q353 468 279 265L203 63L249 62H294V0H285\",120499:\"314 0Q296 3 181 3T48 0H39V62H147V624H39V686H305Q316 679 323 667Q330 653 434 414L546 157L658 414Q766 662 773 674Q778 681 788 686H1052V624H944V62H1052V0H1040Q1016 3 874 3T708 0H696V62H804V341L803 618L786 580Q770 543 735 462T671 315Q540 13 536 9Q528 1 507 1Q485 1 477 9Q472 14 408 162T281 457T217 603Q215 603 215 334V62H323V0H314\",120500:\"314 0Q296 3 181 3T48 0H39V62H147V624H39V686H171H265Q288 686 297 686T309 684T315 679Q317 676 500 455T684 233V624H576V686H585Q603 683 718 683T851 686H860V624H752V319Q752 15 750 11Q747 4 742 2T718 0H712Q708 0 706 0T700 0T696 1T693 2T690 4T687 7T684 11T679 16T674 23Q671 27 437 311L215 579V62H323V0H314\",120501:\"54 465L63 674Q63 675 383 675T703 674L712 465Q712 464 681 464H650V467Q650 490 646 516T632 545Q612 550 383 550H283Q169 550 149 548T124 531Q123 530 123 529Q116 506 116 467V464H85Q54 464 54 465ZM160 256V447H222V414H544V447H606V256H544V289H222V256H160ZM57 0L48 222H110V219Q110 147 125 133Q127 130 130 129T160 127T235 126T383 126Q482 126 530 126T604 127T635 129T641 133Q656 146 656 219V222H718L709 0H57\",120502:\"64 339Q64 431 96 502T182 614T295 675T420 696Q469 696 481 695Q620 680 709 589T798 339Q798 173 697 82T432 -10Q262 -10 163 85T64 339ZM625 454Q618 502 600 538T562 593T515 624T469 639T431 642Q331 642 276 563Q232 493 232 353Q232 315 234 285T244 216T267 148T308 94T372 56Q405 46 432 46Q517 46 567 106T627 267Q631 299 631 353Q631 418 625 454\",120503:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V618H39V680H860V618H752V62H860V0H848Q824 3 674 3Q523 3 499 0H487V62H595V618H304V62H412V0H400\",120504:\"400 0Q376 3 226 3Q75 3 51 0H39V62H147V624H39V686H253Q435 686 470 685T536 678Q585 668 621 648T675 605T705 557T718 514T721 483T718 451T704 409T673 362T616 322T530 293Q500 288 399 287H304V62H412V0H400ZM553 475Q553 554 537 582T459 622Q451 623 373 624H298V343H372Q457 344 480 350Q527 362 540 390T553 475\",120506:\"766 271Q764 266 750 137T735 4V0H407Q74 0 71 4L70 5Q64 9 64 18Q64 24 82 41T213 158L359 288Q360 288 320 336T214 460Q67 633 66 635Q64 638 64 655Q64 679 75 684Q78 686 407 686H735V682Q738 676 751 558T766 434V430H735Q704 430 704 431Q704 434 703 444T696 477T681 520T654 563T613 598Q578 615 527 619T371 624H281L396 489Q506 358 513 351Q517 342 512 334Q503 325 371 208Q338 179 303 147T249 99L231 83L243 81Q258 81 364 81Q382 81 418 81T470 82T513 83T554 88T587 96T619 109T645 129Q689 173 702 260L704 274Q704 275 735 275H766V271\",120507:\"41 425Q41 426 51 545T62 669V675H737V669Q738 665 748 546T758 425V419H696V425Q687 517 669 555T595 607Q578 612 522 613H478V62H631V0H615Q585 3 399 3Q214 3 184 0H168V62H321V613H277H263Q164 613 134 561Q113 527 103 425V419H41V425\",120508:\"64 556Q69 619 114 658T224 697Q271 697 310 677T375 622T417 554T444 484L447 477V479Q456 516 473 551T516 620T582 676T670 697Q735 697 780 656T829 556Q829 539 818 532H772Q761 539 761 548Q761 571 681 571Q664 571 653 570T623 562T587 537T555 490Q536 448 531 410T525 300V210V62H660V0H646L447 3Q257 1 247 0H233V62H368V210V301Q368 373 363 410T338 490Q324 518 307 536T270 561T240 569T212 571Q132 571 132 548Q132 539 121 532H75Q64 538 64 556\",120509:\"609 0Q582 3 415 3T221 0H207V62H342V168L328 169Q193 180 117 241Q64 286 64 343T117 445Q193 506 328 517L342 518V624H207V686H221Q248 683 415 683T609 686H623V624H488V518L502 517Q637 506 713 445Q766 400 766 343T713 241Q637 180 502 169L488 168V62H623V0H609ZM342 219T342 343T340 467Q328 467 304 459Q277 451 261 439T237 409T228 378T226 343Q226 314 229 296T250 259T301 228Q331 219 341 219Q342 219 342 343ZM604 343Q604 365 602 379T591 413T560 446T503 464L489 467Q488 467 488 343T489 219Q499 219 529 228Q554 236 570 248T593 277T602 308T604 343\",120510:\"327 0Q306 3 174 3Q52 3 43 0H33V62H98L162 63L360 333L157 624H48V686H59Q80 683 217 683Q368 683 395 686H408V624H335L393 540L452 458L573 623Q573 624 528 624H483V686H494Q515 683 646 683Q769 683 778 686H787V624H658L575 511Q493 398 493 397L508 376Q522 356 553 312T611 229L727 62H835V0H824Q803 3 667 3Q516 3 489 0H476V62H513L549 63L401 274L247 63Q247 62 292 62H338V0H327\",120511:\"64 515Q64 532 71 536T104 540H139Q200 540 207 538Q225 533 236 521T253 489T260 454T264 414Q264 340 287 296T347 237Q369 226 373 226Q374 226 374 425V624H239V686H253Q280 683 447 683T641 686H655V624H520V226L522 227Q525 228 531 229T552 240T580 261T606 298T624 354Q627 368 628 394T631 440T637 482T654 518T686 538Q693 540 754 540H794Q817 540 823 536T829 515Q829 500 824 495T811 489T796 483T782 461T775 408Q767 212 568 175Q526 168 521 168Q520 168 520 115V62H655V0H641Q614 3 447 3T253 0H239V62H374V168L364 169Q290 178 243 203Q126 261 118 409Q117 443 111 461T98 484T83 489T70 495T64 515\",120512:\"598 645T415 645T232 458Q232 385 275 239T318 26Q318 8 311 4T272 -1Q265 -1 240 -1T196 0H88V3Q86 5 70 108Q52 211 51 212V215H113V212Q123 149 132 133Q136 124 149 122T202 118Q241 118 241 119Q241 132 132 277Q64 378 64 457Q64 564 158 630T403 696Q487 696 543 685T661 638Q722 599 744 549T766 458Q766 434 761 410T749 368T729 327T709 293T684 258T663 229Q632 187 614 160T592 126L589 119Q589 118 628 118Q667 119 680 121T698 133Q702 140 706 160T714 196L717 212V215H779V212Q778 211 760 108Q744 5 742 3V0H634H562Q528 0 520 4T512 26Q512 92 555 238T598 458Q598 645 415 645\",120513:\"56 673Q56 679 65 686H892Q901 679 901 673Q901 668 714 331T521 -15Q518 -18 506 -24H452Q440 -19 436 -15Q431 -8 337 162T150 501L57 669Q57 670 56 672V673ZM528 136L758 553H297Q298 551 414 341L528 136\",120546:\"208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260\",120547:\"231 637Q204 637 199 638T194 649Q194 676 205 682Q206 683 335 683Q594 683 608 681Q671 671 713 636T756 544Q756 480 698 429T565 360L555 357Q619 348 660 311T702 219Q702 146 630 78T453 1Q446 0 242 0Q42 0 39 2Q35 5 35 10Q35 17 37 24Q42 43 47 45Q51 46 62 46H68Q95 46 128 49Q142 52 147 61Q150 65 219 339T288 628Q288 635 231 637ZM649 544Q649 574 634 600T585 634Q578 636 493 637Q473 637 451 637T416 636H403Q388 635 384 626Q382 622 352 506Q352 503 351 500L320 374H401Q482 374 494 376Q554 386 601 434T649 544ZM595 229Q595 273 572 302T512 336Q506 337 429 337Q311 337 310 336Q310 334 293 263T258 122L240 52Q240 48 252 48T333 46Q422 46 429 47Q491 54 543 105T595 229\",120548:\"49 1Q31 1 31 10Q31 12 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 661Q197 674 203 680H714Q721 676 721 669Q721 664 708 557T694 447Q692 440 674 440H662Q655 445 655 454Q655 455 658 480T661 534Q661 572 652 592Q638 619 603 626T501 634H471Q398 633 393 630Q389 628 386 622Q385 619 315 341T245 60Q245 46 333 46H345Q366 46 366 35Q366 33 363 21T358 6Q356 1 339 1Q334 1 292 1T187 2Q122 2 88 2T49 1\",120549:\"574 715L582 716Q589 716 595 716Q612 716 616 714Q621 712 621 709Q622 707 705 359T788 8Q786 5 785 3L781 0H416Q52 0 50 2T48 6Q48 9 305 358T567 711Q572 712 574 715ZM599 346L538 602L442 474Q347 345 252 217T157 87T409 86T661 88L654 120Q646 151 629 220T599 346\",120550:\"492 213Q472 213 472 226Q472 230 477 250T482 285Q482 316 461 323T364 330H312Q311 328 277 192T243 52Q243 48 254 48T334 46Q428 46 458 48T518 61Q567 77 599 117T670 248Q680 270 683 272Q690 274 698 274Q718 274 718 261Q613 7 608 2Q605 0 322 0H133Q31 0 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 659Q197 676 203 680H757Q764 676 764 669Q764 664 751 557T737 447Q735 440 717 440H705Q698 445 698 453L701 476Q704 500 704 528Q704 558 697 578T678 609T643 625T596 632T532 634H485Q397 633 392 631Q388 629 386 622Q385 619 355 499T324 377Q347 376 372 376H398Q464 376 489 391T534 472Q538 488 540 490T557 493Q562 493 565 493T570 492T572 491T574 487T577 483L544 351Q511 218 508 216Q505 213 492 213\",120551:\"58 8Q58 23 64 35Q64 36 329 334T596 635L586 637Q575 637 512 637H500H476Q442 637 420 635T365 624T311 598T266 548T228 469Q227 466 226 463T224 458T223 453T222 450L221 448Q218 443 202 443Q185 443 182 453L214 561Q228 606 241 651Q249 679 253 681Q256 683 487 683H718Q723 678 723 675Q723 673 717 649Q189 54 188 52L185 49H274Q369 50 377 51Q452 60 500 100T579 247Q587 272 590 277T603 282H607Q628 282 628 271Q547 5 541 2Q538 0 300 0H124Q58 0 58 8\",120552:\"228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 219 683Q260 681 355 681Q389 681 418 681T463 682T483 682Q499 682 499 672Q499 670 497 658Q492 641 487 638H485Q483 638 480 638T473 638T464 637T455 637Q416 636 405 634T387 623Q384 619 355 500Q348 474 340 442T328 395L324 380Q324 378 469 378H614L615 381Q615 384 646 504Q674 619 674 627T617 637Q594 637 587 639T580 648Q580 650 582 660Q586 677 588 679T604 682Q609 682 646 681T740 680Q802 680 835 681T871 682Q888 682 888 672Q888 645 876 638H874Q872 638 869 638T862 638T853 637T844 637Q805 636 794 634T776 623Q773 618 704 340T634 58Q634 51 638 51Q646 48 692 46H723Q729 38 729 37T726 19Q722 6 716 0H701Q664 2 567 2Q533 2 504 2T458 2T437 1Q420 1 420 10Q420 15 423 24Q428 43 433 45Q437 46 448 46H454Q481 46 514 49Q520 50 522 50T528 55T534 64T540 82T547 110T558 153Q565 181 569 198Q602 330 602 331T457 332H312L279 197Q245 63 245 58Q245 51 253 49T303 46H334Q340 38 340 37T337 19Q333 6 327 0H312Q275 2 178 2Q144 2 115 2T69 2T48 1Q31 1 31 10Q31 12 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637\",120553:\"740 435Q740 320 676 213T511 42T304 -22Q207 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435ZM640 466Q640 523 625 565T583 628T532 658T479 668Q370 668 273 559T151 255Q150 245 150 213Q150 156 165 116T207 55T259 26T313 17Q385 17 451 63T561 184Q590 234 615 312T640 466ZM510 276Q510 278 512 288L515 298Q515 299 384 299H253L250 285Q246 271 244 268T231 265H227Q216 265 214 266T207 274Q207 278 223 345T244 416Q247 419 260 419H263Q280 419 280 408Q280 406 278 396L275 386Q275 385 406 385H537L540 399Q544 413 546 416T559 419H563Q574 419 576 418T583 410Q583 403 566 339Q549 271 544 267Q542 265 538 265H530H527Q510 265 510 276\",120554:\"43 1Q26 1 26 10Q26 12 29 24Q34 43 39 45Q42 46 54 46H60Q120 46 136 53Q137 53 138 54Q143 56 149 77T198 273Q210 318 216 344Q286 624 286 626Q284 630 284 631Q274 637 213 637H193Q184 643 189 662Q193 677 195 680T209 683H213Q285 681 359 681Q481 681 487 683H497Q504 676 504 672T501 655T494 639Q491 637 471 637Q440 637 407 634Q393 631 388 623Q381 609 337 432Q326 385 315 341Q245 65 245 59Q245 52 255 50T307 46H339Q345 38 345 37T342 19Q338 6 332 0H316Q279 2 179 2Q143 2 113 2T65 2T43 1\",120555:\"285 628Q285 635 228 637Q205 637 198 638T191 647Q191 649 193 661Q199 681 203 682Q205 683 214 683H219Q260 681 355 681Q389 681 418 681T463 682T483 682Q500 682 500 674Q500 669 497 660Q496 658 496 654T495 648T493 644T490 641T486 639T479 638T470 637T456 637Q416 636 405 634T387 623L306 305Q307 305 490 449T678 597Q692 611 692 620Q692 635 667 637Q651 637 651 648Q651 650 654 662T659 677Q662 682 676 682Q680 682 711 681T791 680Q814 680 839 681T869 682Q889 682 889 672Q889 650 881 642Q878 637 862 637Q787 632 726 586Q710 576 656 534T556 455L509 418L518 396Q527 374 546 329T581 244Q656 67 661 61Q663 59 666 57Q680 47 717 46H738Q744 38 744 37T741 19Q737 6 731 0H720Q680 3 625 3Q503 3 488 0H478Q472 6 472 9T474 27Q478 40 480 43T491 46H494Q544 46 544 71Q544 75 517 141T485 216L427 354L359 301L291 248L268 155Q245 63 245 58Q245 51 253 49T303 46H334Q340 37 340 35Q340 19 333 5Q328 0 317 0Q314 0 280 1T180 2Q118 2 85 2T49 1Q31 1 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628\",120556:\"135 2Q114 2 90 2T60 1Q35 1 35 11Q35 28 42 40Q45 46 55 46Q119 46 151 94Q153 97 325 402T498 709Q505 716 526 716Q543 716 549 710Q550 709 560 548T580 224T591 57Q594 52 595 52Q603 47 638 46H663Q670 39 670 35Q669 12 657 0H644Q613 2 530 2Q497 2 469 2T424 2T405 1Q388 1 388 10Q388 15 391 24Q392 27 393 32T395 38T397 41T401 44T406 45T415 46Q473 46 487 64L472 306Q468 365 465 426T459 518L457 550Q456 550 328 322T198 88Q196 80 196 77Q196 49 243 46Q261 46 261 35Q261 34 259 22Q256 7 254 4T240 0Q237 0 211 1T135 2\",120557:\"289 629Q289 635 232 637Q208 637 201 638T194 648Q194 649 196 659Q197 662 198 666T199 671T201 676T203 679T207 681T212 683T220 683T232 684Q238 684 262 684T307 683Q386 683 398 683T414 678Q415 674 451 396L487 117L510 154Q534 190 574 254T662 394Q837 673 839 675Q840 676 842 678T846 681L852 683H948Q965 683 988 683T1017 684Q1051 684 1051 673Q1051 668 1048 656T1045 643Q1041 637 1008 637Q968 636 957 634T939 623Q936 618 867 340T797 59Q797 55 798 54T805 50T822 48T855 46H886Q892 37 892 35Q892 19 885 5Q880 0 869 0Q864 0 828 1T736 2Q675 2 644 2T609 1Q592 1 592 11Q592 13 594 25Q598 41 602 43T625 46Q652 46 685 49Q699 52 704 61Q706 65 742 207T813 490T848 631L654 322Q458 10 453 5Q451 4 449 3Q444 0 433 0Q418 0 415 7Q413 11 374 317L335 624L267 354Q200 88 200 79Q206 46 272 46H282Q288 41 289 37T286 19Q282 3 278 1Q274 0 267 0Q265 0 255 0T221 1T157 2Q127 2 95 1T58 0Q43 0 39 2T35 11Q35 13 38 25T43 40Q45 46 65 46Q135 46 154 86Q158 92 223 354T289 629\",120558:\"234 637Q231 637 226 637Q201 637 196 638T191 649Q191 676 202 682Q204 683 299 683Q376 683 387 683T401 677Q612 181 616 168L670 381Q723 592 723 606Q723 633 659 637Q635 637 635 648Q635 650 637 660Q641 676 643 679T653 683Q656 683 684 682T767 680Q817 680 843 681T873 682Q888 682 888 672Q888 650 880 642Q878 637 858 637Q787 633 769 597L620 7Q618 0 599 0Q585 0 582 2Q579 5 453 305L326 604L261 344Q196 88 196 79Q201 46 268 46H278Q284 41 284 38T282 19Q278 6 272 0H259Q228 2 151 2Q123 2 100 2T63 2T46 1Q31 1 31 10Q31 14 34 26T39 40Q41 46 62 46Q130 49 150 85Q154 91 221 362L289 634Q287 635 234 637\",120559:\"222 668Q222 670 229 677H654Q677 677 705 677T740 678Q764 678 770 676T777 667Q777 662 764 594Q761 579 757 559T751 528L749 519Q747 512 729 512H717Q710 519 710 525Q712 532 715 559T719 591Q718 595 711 595Q682 598 486 598Q252 598 246 592Q239 587 228 552L216 517Q214 512 197 512H185Q178 517 178 522Q178 524 198 591T222 668ZM227 262Q218 262 215 262T209 266L207 270L227 356Q247 435 250 439Q253 443 260 443H267H280Q287 438 287 433Q287 430 285 420T280 402L278 393Q278 392 431 392H585L590 415Q595 436 598 439T612 443H628Q635 438 635 433Q635 431 615 351T594 268Q592 262 575 262H572Q556 262 556 272Q556 280 560 293L565 313H258L252 292Q248 271 245 267T230 262H227ZM60 0Q53 4 53 11Q53 14 68 89T84 169Q88 176 98 176H104H116Q123 169 123 163Q122 160 117 127T112 88Q112 80 243 80H351H454Q554 80 574 81T597 88V89Q603 100 610 121T622 157T630 174Q633 176 646 176H658Q665 171 665 166Q665 164 643 89T618 7Q616 2 607 1T548 0H335H60\",120560:\"740 435Q740 320 676 213T511 42T304 -22Q207 -22 138 35T51 201Q50 209 50 244Q50 346 98 438T227 601Q351 704 476 704Q514 704 524 703Q621 689 680 617T740 435ZM637 476Q637 565 591 615T476 665Q396 665 322 605Q242 542 200 428T157 216Q157 126 200 73T314 19Q404 19 485 98T608 313Q637 408 637 476\",120561:\"48 1Q31 1 31 10Q31 12 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 661Q197 674 203 680H541Q621 680 709 680T812 681Q841 681 855 681T877 679T886 676T887 670Q887 663 885 656Q880 637 875 635Q871 634 860 634H854Q827 634 794 631Q780 628 775 619Q773 614 704 338T634 58Q634 51 638 51Q646 48 692 46H723Q729 38 729 37T726 19Q722 6 716 0H701Q664 2 567 2Q533 2 504 2T458 2T437 1Q420 1 420 10Q420 15 423 24Q428 43 433 45Q437 46 448 46H454Q481 46 514 49Q528 52 533 61Q536 67 572 209T642 491T678 632Q678 634 533 634H388Q387 631 316 347T245 59Q245 55 246 54T253 50T270 48T303 46H334Q340 38 340 37T337 19Q333 6 327 0H312Q275 2 178 2Q144 2 115 2T69 2T48 1\",120562:\"287 628Q287 635 230 637Q206 637 199 638T192 648Q192 649 194 659Q200 679 203 681T397 683Q587 682 600 680Q664 669 707 631T751 530Q751 453 685 389Q616 321 507 303Q500 302 402 301H307L277 182Q247 66 247 59Q247 55 248 54T255 50T272 48T305 46H336Q342 37 342 35Q342 19 335 5Q330 0 319 0Q316 0 282 1T182 2Q120 2 87 2T51 1Q33 1 33 11Q33 13 36 25Q40 41 44 43T67 46Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628ZM645 554Q645 567 643 575T634 597T609 619T560 635Q553 636 480 637Q463 637 445 637T416 636T404 636Q391 635 386 627Q384 621 367 550T332 412T314 344Q314 342 395 342H407H430Q542 342 590 392Q617 419 631 471T645 554\",120564:\"65 0Q58 4 58 11Q58 16 114 67Q173 119 222 164L377 304Q378 305 340 386T261 552T218 644Q217 648 219 660Q224 678 228 681Q231 683 515 683H799Q804 678 806 674Q806 667 793 559T778 448Q774 443 759 443Q747 443 743 445T739 456Q739 458 741 477T743 516Q743 552 734 574T710 609T663 627T596 635T502 637Q480 637 469 637H339Q344 627 411 486T478 341V339Q477 337 477 336L457 318Q437 300 398 265T322 196L168 57Q167 56 188 56T258 56H359Q426 56 463 58T537 69T596 97T639 146T680 225Q686 243 689 246T702 250H705Q726 250 726 239Q726 238 683 123T639 5Q637 1 610 1Q577 0 348 0H65\",120565:\"40 437Q21 437 21 445Q21 450 37 501T71 602L88 651Q93 669 101 677H569H659Q691 677 697 676T704 667Q704 661 687 553T668 444Q668 437 649 437Q640 437 637 437T631 442L629 445Q629 451 635 490T641 551Q641 586 628 604T573 629Q568 630 515 631Q469 631 457 630T439 622Q438 621 368 343T298 60Q298 48 386 46Q418 46 427 45T436 36Q436 31 433 22Q429 4 424 1L422 0Q419 0 415 0Q410 0 363 1T228 2Q99 2 64 0H49Q43 6 43 9T45 27Q49 40 55 46H83H94Q174 46 189 55Q190 56 191 56Q196 59 201 76T241 233Q258 301 269 344Q339 619 339 625Q339 630 310 630H279Q212 630 191 624Q146 614 121 583T67 467Q60 445 57 441T43 437H40\",120566:\"45 535Q34 535 31 536T28 544Q28 554 39 578T70 631T126 683T206 705Q230 705 251 698T295 671T330 612T344 514Q344 477 342 473V472Q343 472 347 480T361 509T380 547Q471 704 596 704Q615 704 625 702Q659 692 679 663T700 595Q700 565 696 552T687 537T670 535Q656 535 653 536T649 543Q649 544 649 550T650 562Q650 589 629 605T575 621Q502 621 448 547T365 361Q290 70 290 60Q290 46 379 46H404Q410 40 410 39T408 19Q404 6 398 0H381Q340 2 225 2Q184 2 149 2T94 2T69 1Q61 1 58 1T53 4T51 10Q51 11 53 23Q54 25 55 30T56 36T58 40T60 43T62 44T67 46T73 46T82 46H89Q144 46 163 49T190 62L198 93Q206 124 217 169T241 262T262 350T274 404Q281 445 281 486V494Q281 621 185 621Q147 621 116 601T74 550Q71 539 66 537T45 535\",120567:\"356 624Q356 637 267 637H243Q237 642 237 645T239 664Q243 677 249 683H264Q342 681 429 681Q565 681 571 683H583Q589 677 589 674T587 656Q582 641 578 637H540Q516 637 504 637T479 633T463 630T454 623T448 613T443 597T438 576Q436 566 434 556T430 539L428 533Q442 533 472 526T543 502T613 451T642 373Q642 301 567 241T386 158L336 150Q332 150 331 146Q310 66 310 60Q310 46 399 46H424Q430 40 430 39T428 19Q424 6 418 0H401Q360 2 247 2Q207 2 173 2T119 2T95 1Q87 1 84 1T79 4T77 10Q77 11 79 23Q80 25 81 30T82 36T84 40T86 43T88 44T93 46T99 46T108 46H115Q170 46 189 49T216 62Q220 74 228 107L239 150L223 152Q139 164 82 205T24 311Q24 396 125 462Q207 517 335 533L346 578Q356 619 356 624ZM130 291Q130 203 241 188H249Q249 190 287 342L325 495H324Q313 495 291 491T229 466T168 414Q130 357 130 291ZM536 393Q536 440 507 463T418 496L341 187L351 189Q443 201 487 255Q536 314 536 393\",120568:\"42 0H40Q26 0 26 11Q26 15 29 27Q33 41 36 43T55 46Q141 49 190 98Q200 108 306 224T411 342Q302 620 297 625Q288 636 234 637H206Q200 643 200 645T202 664Q206 677 212 683H226Q260 681 347 681Q380 681 408 681T453 682T473 682Q490 682 490 671Q490 670 488 658Q484 643 481 640T465 637Q434 634 411 620L488 426L541 485Q646 598 646 610Q646 628 622 635Q617 635 609 637Q594 637 594 648Q594 650 596 664Q600 677 606 683H618Q619 683 643 683T697 681T738 680Q828 680 837 683H845Q852 676 852 672Q850 647 840 637H824Q790 636 763 628T722 611T698 593L687 584Q687 585 592 480L505 384Q505 383 536 304T601 142T638 56Q648 47 699 46Q734 46 734 37Q734 35 732 23Q728 7 725 4T711 1Q708 1 678 1T589 2Q528 2 496 2T461 1Q444 1 444 10Q444 11 446 25Q448 35 450 39T455 44T464 46T480 47T506 54Q523 62 523 64Q522 64 476 181L429 299Q241 95 236 84Q232 76 232 72Q232 53 261 47Q262 47 267 47T273 46Q276 46 277 46T280 45T283 42T284 35Q284 26 282 19Q279 6 276 4T261 1Q258 1 243 1T201 2T142 2Q64 2 42 0\",120569:\"216 151Q48 174 48 329Q48 361 56 403T65 458Q65 482 58 494T43 507T28 510T21 520Q21 528 23 534T29 544L32 546H72H94Q110 546 119 544T139 536T154 514T159 476V465Q159 445 149 399T138 314Q142 229 197 201Q223 187 226 190L233 218Q240 246 253 300T280 407Q333 619 333 625Q333 637 244 637H220Q214 642 214 645T216 664Q220 677 226 683H241Q321 681 405 681Q543 681 549 683H560Q566 677 566 674T564 656Q559 641 555 637H517Q448 636 436 628Q429 623 423 600T373 404L320 192Q370 201 419 248Q451 281 469 317T500 400T518 457Q529 486 542 505T569 532T594 543T621 546H644H669Q692 546 692 536Q691 509 676 509Q623 509 593 399Q587 377 579 355T552 301T509 244T446 195T359 159Q324 151 314 151Q311 151 310 150T298 106T287 60Q287 46 376 46H401Q407 40 407 39T405 19Q401 6 395 0H378Q337 2 224 2Q184 2 150 2T96 2T72 1Q64 1 61 1T56 4T54 10Q54 11 56 23Q57 25 58 30T59 36T61 40T63 43T65 44T70 46T76 46T85 46H92Q147 46 166 49T193 62L204 106Q216 149 216 151\",120570:\"125 84Q127 78 194 76H243V78Q243 122 208 215T165 350Q164 359 162 389Q162 522 272 610Q328 656 396 680T525 704Q628 704 698 661Q734 637 755 601T781 544T786 504Q786 439 747 374T635 226T537 109Q518 81 518 77Q537 76 557 76Q608 76 620 78T640 92Q646 100 656 119T673 155T683 172Q690 173 698 173Q718 173 718 162Q718 161 681 82T642 2Q639 0 550 0H461Q455 5 455 9T458 28Q472 78 510 149T584 276T648 402T677 525Q677 594 636 631T530 668Q476 668 423 641T335 568Q284 499 271 400Q270 388 270 348Q270 298 277 228T285 115Q285 82 280 49T271 6Q269 1 258 1T175 0H87Q83 3 80 7V18Q80 22 82 98Q84 156 85 163T91 172Q94 173 104 173T119 172Q124 169 124 126Q125 104 125 84\",120572:\"34 156Q34 270 120 356T309 442Q379 442 421 402T478 304Q484 275 485 237V208Q534 282 560 374Q564 388 566 390T582 393Q603 393 603 385Q603 376 594 346T558 261T497 161L486 147L487 123Q489 67 495 47T514 26Q528 28 540 37T557 60Q559 67 562 68T577 70Q597 70 597 62Q597 56 591 43Q579 19 556 5T512 -10H505Q438 -10 414 62L411 69L400 61Q390 53 370 41T325 18T267 -2T203 -11Q124 -11 79 39T34 156ZM208 26Q257 26 306 47T379 90L403 112Q401 255 396 290Q382 405 304 405Q235 405 183 332Q156 292 139 224T121 120Q121 71 146 49T208 26\",120573:\"29 -194Q23 -188 23 -186Q23 -183 102 134T186 465Q208 533 243 584T309 658Q365 705 429 705H431Q493 705 533 667T573 570Q573 465 469 396L482 383Q533 332 533 252Q533 139 448 65T257 -10Q227 -10 203 -2T165 17T143 40T131 59T126 65L62 -188Q60 -194 42 -194H29ZM353 431Q392 431 427 419L432 422Q436 426 439 429T449 439T461 453T472 471T484 495T493 524T501 560Q503 569 503 593Q503 611 502 616Q487 667 426 667Q384 667 347 643T286 582T247 514T224 455Q219 439 186 308T152 168Q151 163 151 147Q151 99 173 68Q204 26 260 26Q302 26 349 51T425 137Q441 171 449 214T457 279Q457 337 422 372Q380 358 347 358H337Q258 358 258 389Q258 396 261 403Q275 431 353 431\",120574:\"31 249Q11 249 11 258Q11 275 26 304T66 365T129 418T206 441Q233 441 239 440Q287 429 318 386T371 255Q385 195 385 170Q385 166 386 166L398 193Q418 244 443 300T486 391T508 430Q510 431 524 431H537Q543 425 543 422Q543 418 522 378T463 251T391 71Q385 55 378 6T357 -100Q341 -165 330 -190T303 -216Q286 -216 286 -188Q286 -138 340 32L346 51L347 69Q348 79 348 100Q348 257 291 317Q251 355 196 355Q148 355 108 329T51 260Q49 251 47 251Q45 249 31 249\",120575:\"195 609Q195 656 227 686T302 717Q319 716 351 709T407 697T433 690Q451 682 451 662Q451 644 438 628T403 612Q382 612 348 641T288 671T249 657T235 628Q235 584 334 463Q401 379 401 292Q401 169 340 80T205 -10H198Q127 -10 83 36T36 153Q36 286 151 382Q191 413 252 434Q252 435 245 449T230 481T214 521T201 566T195 609ZM112 130Q112 83 136 55T204 27Q233 27 256 51T291 111T309 178T316 232Q316 267 309 298T295 344T269 400L259 396Q215 381 183 342T137 256T118 179T112 130\",120576:\"190 -22Q124 -22 76 11T27 107Q27 174 97 232L107 239L99 248Q76 273 76 304Q76 364 144 408T290 452H302Q360 452 405 421Q428 405 428 392Q428 381 417 369T391 356Q382 356 371 365T338 383T283 392Q217 392 167 368T116 308Q116 289 133 272Q142 263 145 262T157 264Q188 278 238 278H243Q308 278 308 247Q308 206 223 206Q177 206 142 219L132 212Q68 169 68 112Q68 39 201 39Q253 39 286 49T328 72T345 94T362 105Q376 103 376 88Q376 79 365 62T334 26T275 -8T190 -22\",120577:\"296 643Q298 704 324 704Q342 704 342 687Q342 682 339 664T336 633Q336 623 337 618T338 611Q339 612 341 612Q343 614 354 616T374 618L384 619H394Q471 619 471 586Q467 548 386 546H372Q338 546 320 564L311 558Q235 506 175 398T114 190Q114 171 116 155T125 127T137 104T153 86T171 72T192 61T213 53T235 46T256 39L322 16Q389 -10 389 -80Q389 -119 364 -154T300 -202Q292 -204 274 -204Q247 -204 225 -196Q210 -192 193 -182T172 -167Q167 -159 173 -148Q180 -139 191 -139Q195 -139 221 -153T283 -168Q298 -166 310 -152T322 -117Q322 -91 302 -75T250 -51T183 -29T116 4T65 62T44 160Q44 287 121 410T293 590L302 595Q296 613 296 643\",120578:\"21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q156 442 175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336V326Q503 302 439 53Q381 -182 377 -189Q364 -216 332 -216Q319 -216 310 -208T299 -186Q299 -177 358 57L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287\",120579:\"35 200Q35 302 74 415T180 610T319 704Q320 704 327 704T339 705Q393 701 423 656Q462 596 462 495Q462 380 417 261T302 66T168 -10H161Q125 -10 99 10T60 63T41 130T35 200ZM383 566Q383 668 330 668Q294 668 260 623T204 521T170 421T157 371Q206 370 254 370L351 371Q352 372 359 404T375 484T383 566ZM113 132Q113 26 166 26Q181 26 198 36T239 74T287 161T335 307L340 324H145Q145 321 136 286T120 208T113 132\",120580:\"139 -10Q111 -10 92 0T64 25T52 52T48 74Q48 89 55 109T85 199T135 375L137 384Q139 394 140 397T145 409T151 422T160 431T173 439T190 442Q202 442 213 435T225 410Q225 404 214 358T181 238T137 107Q126 74 126 54Q126 43 126 39T130 31T142 27H147Q206 27 255 78Q272 98 281 114T290 138T295 149T313 153Q321 153 324 153T329 152T332 149T332 143Q332 106 276 48T145 -10H139\",120581:\"83 -11Q70 -11 62 -4T51 8T49 17Q49 30 96 217T147 414Q160 442 193 442Q205 441 213 435T223 422T225 412Q225 401 208 337L192 270Q193 269 208 277T235 292Q252 304 306 349T396 412T467 431Q489 431 500 420T512 391Q512 366 494 347T449 327Q430 327 418 338T405 368Q405 370 407 380L397 375Q368 360 315 315L253 266L240 257H245Q262 257 300 251T366 230Q422 203 422 150Q422 140 417 114T411 67Q411 26 437 26Q484 26 513 137Q516 149 519 151T535 153Q554 153 554 144Q554 121 527 64T457 -7Q447 -10 431 -10Q386 -10 360 17T333 90Q333 108 336 122T339 146Q339 170 320 186T271 209T222 218T185 221H180L155 122Q129 22 126 16Q113 -11 83 -11\",120582:\"166 673Q166 685 183 694H202Q292 691 316 644Q322 629 373 486T474 207T524 67Q531 47 537 34T546 15T551 6T555 2T556 -2T550 -11H482Q457 3 450 18T399 152L354 277L340 262Q327 246 293 207T236 141Q211 112 174 69Q123 9 111 -1T83 -12Q47 -12 47 20Q47 37 61 52T199 187Q229 216 266 252T321 306L338 322Q338 323 288 462T234 612Q214 657 183 657Q166 657 166 673\",120583:\"58 -216Q44 -216 34 -208T23 -186Q23 -176 96 116T173 414Q186 442 219 442Q231 441 239 435T249 423T251 413Q251 401 220 279T187 142Q185 131 185 107V99Q185 26 252 26Q261 26 270 27T287 31T302 38T315 45T327 55T338 65T348 77T356 88T365 100L372 110L408 253Q444 395 448 404Q461 431 491 431Q504 431 512 424T523 412T525 402L449 84Q448 79 448 68Q448 43 455 35T476 26Q485 27 496 35Q517 55 537 131Q543 151 547 152Q549 153 557 153H561Q580 153 580 144Q580 138 575 117T555 63T523 13Q510 0 491 -8Q483 -10 467 -10Q446 -10 429 -4T402 11T385 29T376 44T374 51L368 45Q362 39 350 30T324 12T288 -4T246 -11Q199 -11 153 12L129 -85Q108 -167 104 -180T92 -202Q76 -216 58 -216\",120584:\"74 431Q75 431 146 436T219 442Q231 442 231 434Q231 428 185 241L137 51H140L150 55Q161 59 177 67T214 86T261 119T312 165Q410 264 445 394Q458 442 496 442Q509 442 519 434T530 411Q530 390 516 352T469 262T388 162T267 70T106 5Q81 -2 71 -2Q66 -2 59 -1T51 1Q45 5 45 11Q45 13 88 188L132 364Q133 377 125 380T86 385H65Q59 391 59 393T61 412Q65 431 74 431\",120585:\"268 632Q268 704 296 704Q314 704 314 687Q314 682 311 664T308 635T309 620V616H315Q342 619 360 619Q443 619 443 586Q439 548 358 546H344Q326 546 317 549T290 566Q257 550 226 505T195 405Q195 381 201 364T211 342T218 337Q266 347 298 347Q375 347 375 314Q374 297 359 288T327 277T280 275Q234 275 208 283L195 286Q149 260 119 214T88 130Q88 116 90 108Q101 79 129 63T229 20Q238 17 243 15Q337 -21 354 -33Q383 -53 383 -94Q383 -137 351 -171T273 -205Q240 -205 202 -190T158 -167Q156 -163 156 -159Q156 -151 161 -146T176 -140Q182 -140 189 -143Q232 -168 274 -168Q286 -168 292 -165Q313 -151 313 -129Q313 -112 301 -104T232 -75Q214 -68 204 -64Q198 -62 171 -52T136 -38T107 -24T78 -8T56 12T36 37T26 66T21 103Q21 149 55 206T145 301L154 307L148 313Q141 319 136 323T124 338T111 358T103 382T99 413Q99 471 143 524T259 602L271 607Q268 618 268 632\",120586:\"201 -11Q126 -11 80 38T34 156Q34 221 64 279T146 380Q222 441 301 441Q333 441 341 440Q354 437 367 433T402 417T438 387T464 338T476 268Q476 161 390 75T201 -11ZM121 120Q121 70 147 48T206 26Q250 26 289 58T351 142Q360 163 374 216T388 308Q388 352 370 375Q346 405 306 405Q243 405 195 347Q158 303 140 230T121 120\",120587:\"132 -11Q98 -11 98 22V33L111 61Q186 219 220 334L228 358H196Q158 358 142 355T103 336Q92 329 81 318T62 297T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 389 431Q549 431 553 430Q573 423 573 402Q573 371 541 360Q535 358 472 358H408L405 341Q393 269 393 222Q393 170 402 129T421 65T431 37Q431 20 417 5T381 -10Q370 -10 363 -7T347 17T331 77Q330 86 330 121Q330 170 339 226T357 318T367 358H269L268 354Q268 351 249 275T206 114T175 17Q164 -11 132 -11\",120588:\"58 -216Q25 -216 23 -186Q23 -176 73 26T127 234Q143 289 182 341Q252 427 341 441Q343 441 349 441T359 442Q432 442 471 394T510 276Q510 219 486 165T425 74T345 13T266 -10H255H248Q197 -10 165 35L160 41L133 -71Q108 -168 104 -181T92 -202Q76 -216 58 -216ZM424 322Q424 359 407 382T357 405Q322 405 287 376T231 300Q217 269 193 170L176 102Q193 26 260 26Q298 26 334 62Q367 92 389 158T418 266T424 322\",120589:\"31 207Q31 306 115 374T302 442Q341 442 373 430T405 400Q405 392 399 383T379 374Q373 375 348 390T296 405Q222 405 160 357T98 249Q98 232 103 218T112 195T132 175T154 159T186 141T219 122Q234 114 255 102T286 85T299 78L302 74Q306 71 308 69T315 61T322 51T328 40T332 25T334 8Q334 -31 305 -69T224 -107Q194 -107 163 -92Q156 -88 156 -80Q156 -73 162 -67T178 -61Q186 -61 190 -63Q209 -71 224 -71Q244 -71 253 -59T263 -30Q263 -25 263 -21T260 -12T255 -4T248 3T239 9T227 17T213 25T195 34T174 46Q170 48 150 58T122 74T97 90T70 112T51 137T36 169T31 207\",120590:\"184 -11Q116 -11 74 34T31 147Q31 247 104 333T274 430Q275 431 414 431H552Q553 430 555 429T559 427T562 425T565 422T567 420T569 416T570 412T571 407T572 401Q572 357 507 357Q500 357 490 357T476 358H416L421 348Q439 310 439 263Q439 153 359 71T184 -11ZM361 278Q361 358 276 358Q152 358 115 184Q114 180 114 178Q106 141 106 117Q106 67 131 47T188 26Q242 26 287 73Q316 103 334 153T356 233T361 278\",120591:\"39 284Q18 284 18 294Q18 301 45 338T99 398Q134 425 164 429Q170 431 332 431Q492 431 497 429Q517 424 517 402Q517 388 508 376T485 360Q479 358 389 358T299 356Q298 355 283 274T251 109T233 20Q228 5 215 -4T186 -13Q153 -13 153 20V30L203 192Q214 228 227 272T248 336L254 357Q254 358 208 358Q206 358 197 358T183 359Q105 359 61 295Q56 287 53 286T39 284\",120592:\"413 384Q413 406 432 424T473 443Q492 443 507 425T523 367Q523 334 508 270T468 153Q424 63 373 27T282 -10H268Q220 -10 186 2T135 36T111 78T104 121Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 299 34 333T82 404T161 441Q200 441 225 419T250 355Q248 336 247 334Q247 331 232 291T201 199T185 118Q185 68 211 47T275 26Q317 26 355 57T416 132T452 216T465 277Q465 301 457 318T439 343T421 361T413 384\",120593:\"92 210Q92 176 106 149T142 108T185 85T220 72L235 70L237 71L250 112Q268 170 283 211T322 299T370 375T429 423T502 442Q547 442 582 410T618 302Q618 224 575 152T457 35T299 -10Q273 -10 273 -12L266 -48Q260 -83 252 -125T241 -179Q236 -203 215 -212Q204 -218 190 -218Q159 -215 159 -185Q159 -175 214 -2L209 0Q204 2 195 5T173 14T147 28T120 46T94 71T71 103T56 142T50 190Q50 238 76 311T149 431H162Q183 431 183 423Q183 417 175 409Q134 361 114 300T92 210ZM574 278Q574 320 550 344T486 369Q437 369 394 329T323 218Q309 184 295 109L286 64Q304 62 306 62Q423 62 498 131T574 278\",120594:\"576 -125Q576 -147 547 -175T487 -204H476Q394 -204 363 -157Q334 -114 293 26L284 59Q283 58 248 19T170 -66T92 -151T53 -191Q49 -194 43 -194Q36 -194 31 -189T25 -177T38 -154T151 -30L272 102L265 131Q189 405 135 405Q104 405 87 358Q86 351 68 351Q48 351 48 361Q48 369 56 386T89 423T148 442Q224 442 258 400Q276 375 297 320T330 222L341 180Q344 180 455 303T573 429Q579 431 582 431Q600 431 600 414Q600 407 587 392T477 270Q356 138 353 134L362 102Q392 -10 428 -89T490 -168Q504 -168 517 -156T536 -126Q539 -116 543 -115T557 -114T571 -115Q576 -118 576 -125\",120595:\"161 441Q202 441 226 417T250 358Q250 338 218 252T187 127Q190 85 214 61Q235 43 257 37Q275 29 288 29H289L371 360Q455 691 456 692Q459 694 472 694Q492 694 492 687Q492 678 411 356Q329 28 329 27T335 26Q421 26 498 114T576 278Q576 302 568 319T550 343T532 361T524 384Q524 405 541 424T583 443Q602 443 618 425T634 366Q634 337 623 288T605 220Q573 125 492 57T329 -11H319L296 -104Q272 -198 272 -199Q270 -205 252 -205H239Q233 -199 233 -197Q233 -192 256 -102T279 -9Q272 -8 265 -8Q106 14 106 139Q106 174 139 264T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 299 34 333T82 404T161 441\",120596:\"495 384Q495 406 514 424T555 443Q574 443 589 425T604 364Q604 334 592 278T555 155T483 38T377 -11Q297 -11 267 66Q266 68 260 61Q201 -11 125 -11Q15 -11 15 139Q15 230 56 325T123 434Q135 441 147 436Q160 429 160 418Q160 406 140 379T94 306T62 208Q61 202 61 187Q61 124 85 100T143 76Q201 76 245 129L253 137V156Q258 297 317 297Q348 297 348 261Q348 243 338 213T318 158L308 135Q309 133 310 129T318 115T334 97T358 83T393 76Q456 76 501 148T546 274Q546 305 533 325T508 357T495 384\",120597:\"202 508Q179 508 169 520T158 547Q158 557 164 577T185 624T230 675T301 710L333 715H345Q378 715 384 714Q447 703 489 661T549 568T566 457Q566 362 519 240T402 53Q321 -22 223 -22Q123 -22 73 56Q42 102 42 148V159Q42 276 129 370T322 465Q383 465 414 434T455 367L458 378Q478 461 478 515Q478 603 437 639T344 676Q266 676 223 612Q264 606 264 572Q264 547 246 528T202 508ZM430 306Q430 372 401 400T333 428Q270 428 222 382Q197 354 183 323T150 221Q132 149 132 116Q132 21 232 21Q244 21 250 22Q327 35 374 112Q389 137 409 196T430 306\",120598:\"227 -11Q149 -11 95 41T40 174Q40 262 87 322Q121 367 173 396T287 430Q289 431 329 431H367Q382 426 382 411Q382 385 341 385H325H312Q191 385 154 277L150 265H327Q340 256 340 246Q340 228 320 219H138V217Q128 187 128 143Q128 77 160 52T231 26Q258 26 284 36T326 57T343 68Q350 68 354 58T358 39Q358 36 357 35Q354 31 337 21T289 0T227 -11\",120599:\"537 500Q537 474 533 439T524 383L521 362Q558 355 561 351Q563 349 563 345Q563 321 552 318Q542 318 521 323L510 326Q496 261 459 187T362 51T241 -11Q100 -11 100 105Q100 139 127 242T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Q21 291 27 313T47 368T79 418Q103 442 134 442Q169 442 201 419T233 344Q232 330 206 228T180 98Q180 26 247 26Q292 26 332 90T404 260L427 349Q422 349 398 359T339 392T289 440Q265 476 265 520Q265 590 312 647T417 705Q463 705 491 670T528 592T537 500ZM464 564Q464 668 413 668Q373 668 339 622T304 522Q304 494 317 470T349 431T388 406T421 391T435 387H436L443 415Q450 443 457 485T464 564\",120600:\"228 325Q170 322 156 316T127 309Q108 309 104 314Q99 319 99 322T108 341Q125 376 171 400T268 425H271Q302 425 319 396Q328 377 328 358Q328 332 324 314Q311 270 286 221Q274 194 274 192H275Q339 234 484 325T639 421Q669 434 691 434T723 425T734 406Q734 394 719 381Q715 376 644 330L575 287L566 267Q543 233 526 176Q520 160 515 143T508 115T506 105Q506 103 533 103Q585 103 607 110T641 118Q670 118 670 107Q670 100 661 85Q643 50 598 27T504 3Q465 3 450 36Q441 51 441 73Q441 84 444 96Q452 146 484 205L497 236L324 125Q143 12 135 10Q103 -6 77 -6Q61 -6 49 2T37 21Q37 36 49 46T124 96L195 141L204 156Q219 179 243 248T264 323Q264 325 228 325\",120601:\"409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282\",120602:\"205 -174Q136 -174 102 -153T67 -76Q67 -25 91 85T127 234Q143 289 182 341Q252 427 341 441Q343 441 349 441T359 442Q432 442 471 394T510 276Q510 169 431 80T253 -10Q226 -10 204 -2T169 19T146 44T132 64L128 73Q128 72 124 53T116 5T112 -44Q112 -68 117 -78T150 -95T236 -102Q327 -102 356 -111T386 -154Q386 -166 384 -178Q381 -190 378 -192T361 -194H348Q342 -188 342 -179Q342 -169 315 -169Q294 -169 264 -171T205 -174ZM424 322Q424 359 407 382T357 405Q322 405 287 376T231 300Q221 276 204 217Q188 152 188 116Q188 68 210 47T259 26Q297 26 334 62Q367 92 389 158T418 266T424 322\",120603:\"206 -10Q158 -10 136 24T114 110Q114 233 199 349L205 358H184Q144 358 121 347Q108 340 95 330T75 312T61 295T53 285Q51 284 38 284Q19 284 19 294Q19 300 38 329T93 391T164 429Q171 431 532 431Q799 431 803 430Q823 423 823 402Q823 377 801 364Q790 358 766 358Q748 358 748 357Q748 355 749 348T752 327T754 297Q754 258 738 207T693 107T618 24T520 -10Q488 -10 466 2T432 36T416 77T411 120Q411 128 410 128T404 122Q373 71 323 31T206 -10ZM714 296Q714 316 707 358H251Q250 357 244 348T230 328T212 301T193 267T176 229T164 187T159 144Q159 62 222 62Q290 62 349 127T432 285Q433 286 434 288T435 291T437 293T440 294T444 294T452 294H466Q472 288 472 286Q472 285 464 244T456 170Q456 62 534 62Q604 62 659 139T714 296\",120604:\"65 0Q45 0 45 18Q48 52 61 60Q65 62 81 62Q155 62 165 74Q166 74 265 228T465 539T569 699Q576 707 583 709T611 711T637 710T649 700Q650 697 695 380L741 63L784 62H827Q839 50 839 45L835 29Q831 9 827 5T806 0Q803 0 790 0T743 1T657 2Q585 2 547 1T504 0Q481 0 481 17Q484 54 497 60Q501 62 541 62Q580 62 580 63Q580 68 573 121T564 179V181H308L271 124Q236 69 236 67T283 62H287Q316 62 316 46Q316 26 307 8Q302 3 295 0L262 1Q242 2 168 2Q119 2 93 1T65 0ZM537 372Q533 402 528 435T521 486T518 504V505Q517 505 433 375L348 244L451 243Q555 243 555 244L537 372\",120605:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 449 686H477H586Q684 686 733 677T817 634Q853 598 853 547Q853 499 826 460T761 401T695 371T654 360H653L662 358Q670 357 683 354T712 344T744 327T774 303T795 269T804 224Q804 148 732 79T533 1Q524 0 288 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624ZM703 550Q703 571 695 586T675 609T656 619T643 623L545 624H447L417 504Q386 384 386 383T470 382Q554 383 565 385Q632 397 667 447T703 550ZM651 240Q651 265 645 282T626 309T608 322T592 329Q587 330 479 331H373L340 198Q307 65 306 64Q306 62 406 62L507 63L519 65Q565 76 596 107T639 171T651 240\",120606:\"257 618H231Q198 618 198 636Q202 672 214 678L219 680H763Q769 677 772 673T776 666L777 664Q777 659 766 549T751 433Q745 424 723 424Q704 424 699 427T693 441Q693 444 695 467T697 513Q697 543 689 563T670 594T636 610T592 617T534 618H516H456L455 614Q455 613 387 339T317 64Q317 62 375 62H411Q430 62 438 59T447 44Q444 7 430 2Q426 0 416 0Q409 0 359 1T231 2Q152 2 111 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L163 66Q163 67 231 341T301 616Q301 618 257 618\",120607:\"65 0Q59 6 59 9T61 16Q64 20 334 357T608 698Q616 706 629 710Q630 710 634 710T644 710T656 711Q686 711 694 703Q698 699 700 693Q706 674 805 345T904 14Q904 7 894 1L479 0H65ZM630 342L567 551L232 134L462 133H693Q693 137 630 342\",120608:\"257 618H231Q198 618 198 636Q202 672 214 678L219 680H811Q817 677 820 673T824 666L825 664Q825 659 814 549T799 433Q793 424 771 424Q752 424 746 427T740 441Q740 445 742 466T744 505Q744 561 722 585T646 616Q639 617 545 618H456Q456 617 427 502T398 385Q398 384 435 384Q461 385 471 385T499 391T526 405T545 433T562 478Q566 494 571 497T595 501H604Q622 501 626 486Q626 482 593 349T557 213Q552 205 530 205Q499 205 499 219Q499 222 503 242T508 281Q508 308 491 314T429 322Q425 322 423 322H382L317 64Q317 62 390 62Q460 62 493 64T569 80T640 124Q665 149 686 187T719 253T733 283Q739 289 760 289Q791 289 791 274Q791 267 763 201T706 71L678 8Q676 4 667 0H58Q47 5 43 15Q47 54 60 60Q64 62 113 62H162L163 66Q163 67 231 341T301 616Q301 618 257 618\",120609:\"223 430Q192 430 192 448Q192 450 225 561T261 677Q265 683 270 684Q273 686 534 686Q796 686 797 685Q805 682 805 673Q805 668 804 661T800 648T798 641Q796 637 531 352L266 67L329 66H364Q412 66 446 70T523 96T596 157Q617 186 630 220T649 273T663 297Q667 299 684 299H688Q715 299 715 281Q715 278 673 145T628 8Q626 4 617 0H348Q289 0 221 0T139 -1Q112 -1 99 -1T78 1T69 5T68 12Q68 16 71 31T77 49L84 57Q91 65 104 79T133 110T170 151T213 196L610 624H540Q533 624 514 624T488 624T467 623T443 620T422 616T398 609T373 600Q292 560 255 449Q251 436 246 433T223 430\",120610:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 239 686Q290 684 403 684Q475 684 512 685T553 686Q576 686 576 668Q572 632 560 626Q555 624 506 624H457L399 389Q399 388 547 388H695L753 623Q753 624 709 624H686Q665 624 660 626T650 639Q653 678 668 684Q672 686 681 686Q685 686 726 685T847 684Q902 684 937 684T986 685T1004 686Q1027 686 1027 668Q1023 632 1011 626Q1006 624 957 624H908L839 344Q768 64 768 63T812 62H839Q871 62 871 44Q867 6 854 2L850 0L808 1Q782 2 675 2Q600 2 560 1T516 0Q499 0 494 15Q498 54 511 60Q515 62 564 62H613L614 66L679 324Q679 326 531 326H383L382 322L317 64Q317 62 361 62H388Q420 62 420 44Q416 6 403 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624\",120611:\"358 -17Q218 -17 136 49T54 243Q54 298 70 356T123 474T211 582T338 663T504 702H527Q578 702 590 701Q709 688 776 622T844 441Q844 379 825 315T765 192T668 86T532 11T358 -17ZM700 474Q700 525 685 561T642 616T587 643T528 652Q390 652 301 534Q252 472 225 373T198 210Q198 160 214 125T256 71T311 44T372 36Q484 36 571 119Q639 189 669 299T700 474ZM366 428Q366 425 364 419T362 411H466L570 412L573 422Q576 437 581 441T604 445Q620 445 623 444Q636 440 636 429Q636 423 616 340T593 253Q586 243 572 243H566Q545 243 539 249Q536 251 535 253T534 258T534 263T535 270T537 277H329L326 266Q323 251 318 247T295 243Q279 243 276 244Q263 248 263 259Q263 265 283 346Q288 366 295 394Q304 431 308 438T326 445H334H338Q366 445 366 428\",120612:\"247 624Q242 624 233 624T220 623Q186 623 186 640Q186 647 190 664T202 684Q206 686 226 686Q277 684 393 684Q435 684 471 684T528 685T553 686Q573 686 573 670Q573 650 564 632Q556 624 537 624H501H449L380 344Q309 64 309 63T356 62Q361 62 370 62T384 63Q417 63 417 46Q417 26 408 8Q403 3 396 0L352 1Q325 2 216 2T82 1L45 0Q30 7 30 16Q33 51 46 60Q51 62 102 62H154L294 623Q294 624 247 624\",120613:\"536 0Q522 6 522 18Q522 35 533 57Q539 62 557 62Q595 62 601 65L472 330L365 255L342 160Q318 65 317 64Q317 62 361 62H388Q420 62 420 44Q416 6 403 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L302 623Q302 624 258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 239 686Q290 684 403 684Q475 684 512 685T553 686Q576 686 576 668Q572 632 560 626Q555 624 506 624H457L422 481Q386 339 386 337L785 621Q779 624 749 624Q726 624 726 641Q726 645 730 659Q734 675 736 679T747 686L786 685Q812 684 888 684Q908 684 934 685T968 686Q1003 686 1003 669Q1003 646 991 629Q985 624 967 624Q918 624 888 617Q884 617 874 613L865 609Q864 608 732 515T599 420Q599 418 686 242T775 65Q784 62 829 62Q847 62 850 61T860 54Q862 52 862 43Q862 10 845 1Q844 1 842 1T836 0T797 1T694 2Q599 2 573 1L536 0\",120614:\"439 0Q425 6 425 18Q425 35 436 57Q442 62 485 62Q525 62 525 64L478 483Q478 484 465 463T422 394T350 277Q222 69 222 68Q223 67 224 67Q229 64 271 62Q290 62 297 59T305 45Q305 38 302 28Q297 9 293 5T274 0Q270 0 238 1T159 2Q133 2 105 2T72 1Q56 1 52 3T44 15Q44 19 48 35Q53 55 58 58T89 62Q142 64 151 73Q154 76 345 387T538 699Q550 711 570 711H580H592Q613 711 618 695Q619 692 654 379T690 63Q690 62 726 62H746Q776 62 776 44Q773 7 759 2Q755 0 747 0Q743 0 707 1T600 2Q502 2 476 1L439 0\",120615:\"258 624H231Q214 624 208 626T199 639Q203 678 216 684Q220 686 347 686H473Q474 685 478 682T484 677Q487 673 535 413L584 153L608 187Q631 221 672 281T761 410Q935 663 943 671Q949 678 962 686H1082H1166Q1201 686 1210 683T1219 668Q1215 632 1203 626Q1199 624 1149 624H1100L1031 344Q960 64 960 63T1004 62H1031Q1063 62 1063 44Q1060 7 1046 2Q1042 0 1034 0Q1030 0 990 1T875 2Q804 2 767 1T725 0H723Q707 0 703 15Q707 54 720 60Q724 62 773 62H822Q961 618 961 619L754 318Q546 15 543 12Q531 0 510 0Q500 0 495 0T484 5T477 19Q477 20 421 315L367 604L299 335Q234 72 234 68Q234 62 302 62Q334 62 334 46Q332 8 317 2Q313 0 306 0Q301 0 267 1T181 2Q125 2 96 1T63 0Q48 0 43 15Q43 19 47 35Q52 55 57 58T94 62Q147 64 164 69L233 345Q302 619 302 622Q302 624 258 624\",120616:\"258 624H235Q214 624 209 626T199 639Q203 678 216 684Q220 686 344 686H434Q464 686 477 680Q480 677 607 454Q738 227 739 227Q742 227 789 418T836 618Q836 620 835 620L821 622Q811 622 779 624Q755 624 749 625T740 632Q737 635 737 644Q737 656 742 669T754 685Q755 685 757 685T763 686Q768 686 803 685T890 684Q925 684 951 684T990 685T1006 686Q1014 686 1016 684Q1027 679 1027 668Q1023 632 1011 626Q1007 624 978 624Q912 622 907 617Q907 616 831 314T753 8Q749 0 723 0H712Q699 0 692 7Q692 8 671 44T607 155T526 296L361 580L296 323Q234 74 234 68T302 62H307Q334 62 334 44Q330 6 317 2L313 0L280 1Q260 2 181 2Q125 2 96 1T63 0Q48 0 43 15Q43 19 47 35Q52 55 57 58T94 62Q147 64 164 69L233 345Q302 619 302 622Q302 624 258 624\",120617:\"206 466Q175 466 175 484Q175 487 201 574T230 666Q235 673 241 675H547Q853 675 857 673Q867 668 867 657Q867 655 850 569T832 478Q827 466 808 466H802H795Q773 466 771 481Q771 486 775 508T779 541V549H774Q755 552 505 552Q281 551 267 548Q262 548 255 533T242 496T233 472Q228 466 206 466ZM259 255H252Q231 255 228 270Q228 275 248 355T270 439Q277 448 288 448H298Q321 448 326 440Q331 434 326 414Q326 413 486 413H647L650 424Q654 441 658 444T678 448H683H693Q702 448 705 446T714 432L694 348Q674 267 669 261Q664 255 652 255H643Q622 255 617 261Q613 265 613 272T613 283T616 289Q616 290 456 290H295L294 285Q293 280 292 275T288 265T281 257Q278 255 259 255ZM150 131Q150 124 281 123Q346 123 390 123Q640 123 664 126Q668 127 675 127Q686 131 704 198Q708 213 713 216T733 220H738Q755 220 759 218Q768 213 768 203Q768 198 741 105T710 8Q708 4 699 0H388Q77 0 73 2Q62 7 62 18Q62 27 81 115Q99 206 102 212Q106 220 120 220H129Q140 220 145 220T155 215T160 202Q160 196 159 192Q150 145 150 131\",120618:\"53 245Q53 297 70 356T125 478T216 590T349 671T523 703Q656 703 735 637T815 445Q815 378 791 307Q727 104 527 17Q437 -17 344 -17Q289 -17 242 -5T150 35T79 116T53 245ZM664 489Q664 575 618 611T511 648Q463 648 416 627T334 570Q297 531 270 472T230 355T213 261T208 206Q208 177 215 151T237 98T284 56T358 40Q440 40 510 98T618 270Q664 400 664 489\",120619:\"257 618H231Q198 618 198 636Q202 672 214 678L219 680H1011Q1022 675 1026 665Q1022 626 1009 620Q1005 618 956 618H907L906 614Q906 613 838 339T768 64Q768 62 812 62H839Q871 62 871 44Q867 6 854 2L850 0L808 1Q782 2 675 2Q600 2 560 1T516 0Q499 0 494 15Q498 54 511 60Q515 62 564 62H613L614 66Q614 67 682 341T752 616Q752 618 604 618H456L455 614Q455 613 387 339T317 64Q317 62 361 62H388Q420 62 420 44Q416 6 403 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q48 0 43 15Q47 54 60 60Q64 62 113 62H162L163 66Q163 67 231 341T301 616Q301 618 257 618\",120620:\"162 62L302 623Q302 624 258 624H234Q214 624 209 626T200 638Q200 677 217 684Q220 686 439 686Q667 685 684 682Q686 681 693 680Q713 677 733 671T782 649T829 602T847 528Q847 450 784 382T604 293Q571 288 469 287H373L346 176Q340 151 333 122T321 78L317 64Q317 62 361 62H387Q420 62 420 44Q417 10 404 2L399 0L357 1Q331 2 224 2Q149 2 109 1T65 0Q43 0 43 17Q43 21 47 33Q52 54 57 58T89 62H113H162ZM692 558Q692 611 617 622Q610 623 529 624H452L381 343H458H492Q604 343 641 389Q662 414 677 471T692 558\",120622:\"847 430Q828 430 823 434T817 450Q817 454 817 466T818 487Q818 526 809 551T784 591T737 613T675 622T590 624H528H430L513 487Q594 351 596 345Q596 335 590 330Q583 323 418 204L250 81L363 80Q533 80 591 89T694 142Q739 185 765 252Q772 268 776 271T799 274Q816 274 820 272Q832 266 830 254Q829 250 784 130T736 7Q732 3 725 0H405Q84 0 80 2Q69 7 69 18Q69 26 75 32Q76 32 98 48T168 100T255 164L432 293Q429 300 329 465T225 637Q223 675 245 686H888Q900 680 902 671Q902 667 890 556T876 441Q871 430 847 430\",120623:\"498 62Q511 58 511 43Q511 10 494 1L490 0Q487 0 482 0T424 1T271 2Q201 2 157 2T94 1T72 0H70Q46 0 46 17Q49 54 62 60L66 62H137Q208 62 209 63L218 98Q227 134 244 203T278 339L347 613H300Q262 612 246 611T198 599T146 564Q128 545 114 512T91 454T79 425Q73 419 52 419Q22 419 22 434Q22 440 41 498T80 611L100 666Q105 673 111 675H434Q758 675 762 673Q772 668 772 657Q772 655 756 549T738 434Q735 419 711 419H707Q690 419 686 421Q677 425 677 434Q676 436 678 449T683 485T686 529Q686 553 679 569T662 594T631 607T593 612T544 613H502L433 340Q418 279 400 207T374 100L365 65L364 62H498\",120624:\"32 544Q32 586 91 644T229 703Q277 703 311 683T363 628T389 560T397 491V478L404 491Q455 589 526 646T677 703Q730 703 766 671T802 584Q802 551 793 541T766 531H757L736 532L732 535L729 539V549Q731 569 715 575T658 581H650Q545 581 477 443Q453 392 443 351Q441 345 424 273T389 133T371 64Q371 62 428 62H461Q483 62 492 59T501 44Q498 10 485 2L480 0L431 1Q401 2 278 2T127 1L85 0Q71 5 71 17Q71 24 74 33Q77 46 78 49T84 57T95 61T118 62H154H216Q232 126 249 193T273 287T287 345T296 388T299 416T300 452Q294 581 198 581Q154 581 132 575T106 562T99 546T86 533Q82 531 60 531L39 532Q32 537 32 544\",120625:\"323 624H293Q267 624 261 626T251 639Q255 678 268 684Q272 686 293 686Q348 684 475 684Q557 684 600 685T647 686H648Q671 686 671 668Q667 632 655 626Q650 624 588 624H525L500 520Q500 519 520 518T579 507T656 480Q737 440 737 372Q737 294 648 237Q562 180 426 169L412 168L399 118Q386 66 386 65L385 62H443H479Q498 62 506 59T515 44Q511 8 499 2L494 0L447 1Q417 2 298 2Q212 2 167 1T118 0Q100 0 95 15Q99 54 112 60Q116 62 179 62H241Q242 64 254 114T266 167Q266 168 262 168Q256 168 237 170T180 181T110 205T54 249T29 316Q29 391 112 446T327 516Q345 518 349 518Q351 518 353 518L355 519Q356 520 368 570T381 623Q381 624 323 624ZM342 466Q341 467 339 467Q320 467 283 455T225 420Q181 361 181 296Q181 273 193 257T222 233T254 222T277 219L280 220Q281 220 311 342T342 466ZM583 389Q583 409 576 423T557 444T533 456T509 463T492 467H486L455 343Q444 300 437 271T428 231T426 219Q430 219 445 222T483 232T521 250Q551 269 567 310T583 389\",120626:\"931 686Q953 686 953 670Q953 650 944 632Q936 624 924 624H914Q823 624 803 611Q800 609 696 503T591 396Q591 394 667 229L743 62H787H814Q846 62 846 44Q843 7 829 2Q825 0 817 0Q813 0 775 1T664 2Q590 2 551 1T508 0H507Q484 0 484 18Q484 19 488 37Q492 56 497 58T534 62L566 63Q567 64 520 169T471 274Q469 274 369 172T268 67L315 62Q320 62 328 62L335 61Q347 58 347 44Q344 10 331 2L326 0L287 1Q263 2 177 2Q95 2 78 1L53 0Q38 6 38 17Q38 40 50 57Q56 62 78 62Q169 62 188 75Q194 77 435 324L444 334L439 347Q437 351 373 492L313 624H268H246Q220 624 212 632Q210 636 210 642Q210 655 215 669T227 684Q230 686 247 686Q295 684 398 684Q438 684 472 684T527 685T551 686Q567 686 572 671Q572 667 568 651Q563 631 558 628T523 624T492 623H488L526 540Q563 457 564 457Q564 456 574 466T604 496T645 537L724 619Q716 622 677 624H673Q645 624 645 640Q645 660 654 678Q659 683 666 686L704 685Q728 684 813 684Q847 684 873 684T913 685T931 686\",120627:\"205 471Q205 445 196 403T186 333Q186 303 194 281T218 248T240 233T262 224L361 623Q361 624 303 624Q296 624 284 624T266 623Q232 623 232 641Q232 648 235 657Q240 678 244 682T268 686H273Q329 684 457 684Q502 684 540 684T599 685T626 686H628Q651 686 651 668Q649 633 631 624H505L407 227Q410 228 416 229T439 239T472 259T507 294T539 345Q549 365 563 416T597 498T649 538Q657 540 717 540Q725 540 737 540T755 541Q790 541 790 524Q790 512 784 497Q780 491 767 490T742 477Q736 471 731 463T722 449T715 433T710 419T705 403T701 389Q686 340 658 302T599 240T530 201T463 179T404 169L391 168L379 116Q365 67 365 63Q365 62 422 62H455Q477 62 486 59T495 44Q492 10 479 2L474 0L427 1Q397 2 278 2T131 1L90 0Q76 5 76 17Q76 24 79 33Q82 46 83 49T89 57T100 61T123 62H159H221Q247 162 247 168H244Q241 169 239 169Q202 176 178 182T123 207T74 252Q46 291 46 351Q46 375 52 404T59 454Q59 489 40 489Q32 489 27 494T22 507Q22 535 37 538Q40 540 99 540H128Q168 540 186 528T205 471\",120628:\"162 119Q181 115 235 115L273 116Q273 133 231 222T180 345Q173 368 173 391V406V414Q173 477 214 540Q255 600 315 635Q353 661 423 682T585 703Q656 703 711 690T799 656T851 608T879 555T886 503Q886 449 860 401Q840 359 810 322T725 230T643 146Q619 117 619 116T650 115Q707 115 722 120Q730 123 750 165T775 210Q779 212 796 212Q828 212 828 196Q828 191 807 144T764 52L743 7Q740 4 740 4T733 2T717 0T686 0H632H573Q535 0 526 3T517 17Q517 44 544 103T617 243T671 341Q729 454 729 535Q729 599 686 625T583 652Q549 652 517 645T450 616T388 561T344 470T327 340Q327 304 331 237T336 135Q336 93 330 50T313 2Q308 0 208 0H142Q107 0 100 4T93 25Q93 28 93 41T95 77T96 118L100 199Q105 208 109 210T131 212Q147 212 151 210T161 199V160Q161 131 162 125V119\",120630:\"39 166Q39 213 59 261T117 353T219 424T362 452Q420 452 466 433T536 384T573 325T586 269V265Q593 272 609 308T636 381Q640 397 644 399T669 402H680Q700 402 700 388Q700 379 691 351T659 276T604 188L593 173L595 153Q600 79 612 43H618Q634 45 642 51T653 64T658 71Q661 73 684 73Q712 73 712 59Q712 39 685 16T603 -7Q588 -7 575 -5T551 2T532 12T516 24T503 37T494 49T487 60T481 69L469 61Q362 -8 251 -8Q159 -8 99 36T39 166ZM260 43Q310 43 361 63T438 101T465 124Q458 240 453 277Q435 401 354 401Q291 401 245 355Q230 337 217 313Q201 279 186 216T170 126Q170 72 208 54Q230 43 260 43\",120631:\"59 -194H49Q31 -194 28 -182Q28 -178 107 139T192 473Q212 533 248 580T324 652T395 689T450 701H461Q514 701 551 688T605 652T630 607T637 561Q637 546 634 526T611 465T556 393Q572 382 590 347T608 262Q608 146 522 69T299 -8Q279 -8 261 -6T228 2T204 13T183 26T169 37T157 48L150 56L120 -64Q113 -90 104 -128Q93 -175 89 -184T73 -194H59ZM531 592Q531 651 463 651Q399 651 341 600T253 466Q250 458 217 327T182 185Q180 176 180 159Q180 108 212 76T301 44Q330 44 354 51T393 65T423 91T444 118T459 151T468 179T475 206Q490 264 491 296Q491 313 489 326T484 345L482 350Q481 350 477 348T464 344T444 340T413 335T372 333T334 334T301 340T274 355T265 380Q265 444 397 444Q425 444 445 441T476 436L485 433Q489 433 499 458Q509 482 520 527T531 592ZM424 390Q424 393 389 393Q383 393 374 393T362 392Q348 392 333 388Q345 384 379 384Q424 384 424 390\",120632:\"5 269Q5 285 19 312T57 368T124 421T215 451H241Q274 451 303 439T353 406T389 361T416 311T432 266T442 232L444 220L446 216L450 226Q473 278 513 357T561 441Q566 444 584 444H594Q617 444 617 430Q617 426 596 389T536 273T462 110L452 84L451 70Q447 12 427 -76T388 -192Q375 -211 355 -211Q339 -211 332 -198T325 -171Q325 -114 386 64L393 84V98Q393 181 371 241Q360 280 319 303T210 327Q158 327 126 317T84 296T68 272T59 258Q55 256 36 256Q23 256 18 256T9 260T5 269\",120633:\"216 610Q216 640 229 664T262 700T299 719T327 725Q330 725 406 709T487 690Q513 681 513 651Q513 627 494 607T450 587Q417 587 378 631Q346 663 314 663Q286 663 272 639Q271 637 271 634Q271 609 344 536L397 484Q438 448 458 410T478 313Q478 234 443 147T338 18Q298 -8 249 -8Q214 -8 180 0T113 26T60 81T39 168Q39 200 50 237T87 316T160 391T272 442L260 465Q216 553 216 610ZM348 235Q348 274 336 313T310 372L298 392Q295 391 290 390T269 380T241 359T212 323T185 267Q157 168 157 130Q157 83 186 63T255 43Q280 43 300 67Q317 89 332 138T348 235\",120634:\"224 -17Q126 -17 81 22T36 112Q36 178 84 226L93 236L88 246Q79 264 79 289Q79 341 124 388Q201 461 333 461Q402 461 455 425Q480 409 481 390Q481 365 464 350T428 334Q415 334 387 352T313 370Q141 370 141 293Q141 275 146 270Q147 270 148 270T155 272Q202 291 263 291H270Q349 291 349 244Q349 195 281 183Q274 182 239 182Q201 182 184 185T137 200Q123 188 112 168T100 129T112 98T148 81T189 75T237 74H243H251Q288 74 310 75T359 86T398 112Q405 124 417 124Q426 124 432 117T439 100Q439 88 427 70T390 32T322 -3T224 -17ZM286 238Q286 240 253 240Q245 240 234 239T216 237T209 235Q209 232 250 232Q286 232 286 238\",120635:\"361 711Q373 711 381 703T389 683Q389 681 388 676T383 656T376 618V612H379Q385 618 429 618Q521 618 521 572Q521 551 506 534Q483 510 415 507Q385 507 371 511T336 536L326 528Q254 472 204 381T154 209Q154 190 157 177Q159 165 162 154T170 135T182 119T195 106T212 95T229 86T249 78T269 72T290 66T311 60Q385 37 388 36Q437 14 454 -36Q456 -46 456 -64Q456 -83 455 -90Q445 -132 413 -167T333 -202Q300 -202 257 -191T206 -169Q203 -164 203 -158Q203 -148 210 -140T231 -130Q239 -130 263 -139T326 -151H329Q337 -151 342 -150T352 -143T357 -123Q356 -117 355 -113T350 -104T344 -96T335 -90T324 -85T310 -80T294 -74T275 -68T254 -62Q253 -62 231 -56T205 -48T179 -39T150 -26T125 -10T100 11T80 37T62 70T53 109T48 157Q48 281 123 396T317 586V612Q319 638 320 649T325 678T338 703T361 711ZM454 564Q445 567 424 567Q407 567 398 565T387 563Q387 558 411 558Q434 558 450 562L454 564\",120636:\"24 296Q25 302 27 312T41 350T65 397T103 435T157 452Q202 452 233 435Q267 419 284 384L294 392Q304 401 316 410T348 429T388 445Q410 451 445 451H453Q468 451 482 450T519 443T558 425T587 391T600 337V327Q600 311 538 64Q484 -158 478 -168Q457 -211 409 -211Q386 -211 372 -197T357 -161Q357 -158 415 80Q476 330 477 348Q477 366 473 377T461 393T448 399T432 400H427Q379 400 335 363Q300 332 280 298Q277 293 246 170T213 40Q205 22 186 7T142 -8T103 7T89 39Q89 49 106 117T142 260T164 351Q166 363 166 372Q166 402 148 402Q126 402 110 369Q100 350 90 310Q85 289 82 286T60 282H55H44Q24 282 24 296\",120637:\"213 -8Q130 -8 85 50T40 200V207Q40 303 83 428Q122 535 189 608Q279 702 381 702Q410 702 437 693T492 661T537 593T554 486Q554 428 539 362T495 230T425 111T330 25T213 -8ZM433 562Q433 600 419 625T377 651Q363 651 348 644T311 619T268 557T229 453Q225 441 217 411T208 378H401Q433 500 433 562ZM161 140Q161 43 217 43Q249 43 280 74Q310 103 332 150T378 287Q385 313 385 315Q385 316 289 316H192Q191 308 183 275T169 205T161 140\",120638:\"161 -8Q111 -8 75 16T38 85Q38 95 48 121T80 214T123 368L124 374Q126 381 127 386T132 399T139 414T149 428T162 440T180 448T203 452Q226 452 241 439T257 404Q257 386 230 290T171 111Q157 73 157 57Q157 43 166 43Q209 43 258 69T322 144Q326 157 330 159T348 162H355H366Q386 162 386 148Q386 143 383 132T367 100T335 61Q301 27 253 10T161 -8\",120639:\"258 405Q258 394 251 364T237 308T230 281T238 284T270 306T330 349Q365 377 389 394T450 427T519 444Q545 444 559 430T574 391Q574 360 551 336T491 312Q469 312 454 326T439 364Q439 372 438 372Q433 372 395 344T320 289T283 260H285Q287 260 290 260T297 259Q495 248 495 146Q495 132 491 110T486 74Q486 43 505 43Q520 43 531 53Q559 72 578 141Q582 157 586 159T611 162H622Q642 162 642 148T627 100T578 29T504 -7H495Q435 -7 399 22T363 96Q363 111 366 122T369 142Q369 155 364 165T347 182T326 193T298 200T269 204T238 207T212 210L211 206L190 123L169 40Q161 22 142 7T98 -8T59 7T45 39Q45 48 67 139T112 317L134 404Q142 424 161 438T204 452Q226 452 242 440T258 405\",120640:\"95 -13Q70 -13 55 4T40 41Q40 65 61 88Q65 92 210 207T357 322L235 602Q217 640 185 643Q182 643 178 644T173 645Q161 651 161 666Q161 677 167 684T181 692Q189 694 212 694Q335 694 358 660Q362 653 500 340T647 18Q652 10 652 6Q652 -8 622 -8H589H538L526 -5Q506 1 500 8Q494 16 444 128Q442 133 440 138L387 259L265 134Q156 20 137 4T95 -13\",120641:\"294 -8Q265 -8 244 -5T213 1T201 4Q200 4 192 -32T172 -111T155 -168Q134 -211 86 -211Q62 -211 48 -196T34 -158Q37 -144 103 123T174 404Q182 424 201 438T244 452Q271 452 284 436T298 404Q298 392 267 269T235 114Q235 43 305 43Q342 43 375 68T418 110Q420 112 455 253T492 397Q514 444 562 444Q587 444 601 429T615 397Q615 387 599 320T563 178T542 93Q540 81 540 72Q540 42 558 42Q580 42 596 75Q606 94 616 134Q621 155 624 158T646 162H651H662Q682 162 682 148Q681 142 679 132T665 94T641 47T602 9T548 -8Q523 -8 502 -3T468 11T446 27T432 40L429 46Q367 -8 294 -8\",120642:\"88 382Q70 382 65 385T59 402T64 427T78 443Q79 444 157 448T247 452Q256 452 261 448T266 440L267 437Q267 432 223 252L177 71L192 77Q293 117 371 199T480 388Q489 424 511 438T556 452Q579 452 593 438T608 402Q608 378 593 340T540 251T446 152T299 62T96 -1Q91 -2 78 -2Q38 -2 38 15Q38 22 82 198L127 379Q124 382 88 382\",120643:\"287 648Q291 671 293 680T305 700T329 711Q339 711 347 705T356 687Q356 680 351 653T345 619Q345 615 346 615Q358 618 398 618Q490 618 490 572Q490 553 476 536T434 512Q411 508 378 508H366Q332 508 306 534L298 525Q271 496 254 456T237 375Q237 336 244 336Q272 346 319 346H325Q354 346 372 344T406 331T422 300Q422 252 350 238Q332 236 303 236Q286 236 269 238T240 242T218 247T202 252L196 254Q191 254 174 237T141 191T124 139Q124 108 151 92T267 46Q285 40 295 37Q308 33 332 25T366 13T392 3T415 -8T432 -20T445 -36T451 -55T454 -80Q454 -118 427 -153T358 -199Q349 -201 327 -201Q313 -201 298 -200T271 -196T246 -191T226 -185T210 -180T200 -176L196 -174Q187 -170 187 -158T196 -138T216 -130Q217 -130 254 -140T329 -151Q349 -151 349 -135Q349 -127 340 -122T293 -104Q260 -93 238 -85Q130 -48 115 -41Q71 -19 47 15T23 88Q23 126 48 179T130 277L144 288L136 297Q99 336 99 390Q99 456 148 514T285 602V619Q285 624 286 635T287 648ZM355 563Q362 560 376 558Q424 558 423 564Q405 567 390 567Q369 567 355 563ZM279 292Q297 287 315 287Q355 287 355 293Q355 296 321 296Q316 296 308 296L301 295Q295 295 289 294L279 292\",120644:\"254 -8Q191 -8 146 9T80 54T49 111T39 169Q39 206 53 247T96 329T176 402T292 446Q317 451 336 451L344 452Q353 452 359 452Q457 452 516 408T576 279Q576 169 488 81T254 -8ZM349 400Q321 400 287 385T231 338Q206 301 188 228T170 126Q170 99 178 83Q198 44 260 44Q367 44 409 157Q419 185 432 238T445 317Q445 336 443 348Q435 372 416 384T384 398T349 400\",120645:\"55 289H43Q23 289 23 303Q23 308 33 322Q116 434 199 443Q200 444 418 444Q591 444 617 444T652 439Q674 426 674 400Q674 378 661 360T625 335Q621 334 549 333H479L477 321Q476 312 476 279Q476 219 491 174T521 104T536 65Q536 38 511 15T457 -8Q403 -8 386 94Q384 110 384 139Q384 181 391 229T406 304L413 331Q413 333 365 333H316L315 329Q315 328 312 314T301 272T288 220Q274 167 258 103Q244 49 240 38T228 18Q225 16 224 14Q200 -8 172 -8Q146 -8 132 7T118 44Q118 54 121 61Q122 65 142 102T190 195T235 293Q250 329 250 333Q177 333 166 332Q115 328 88 301L77 290L55 289\",120646:\"307 -8Q277 -8 251 0T215 14L205 20Q203 18 193 -25T171 -114T155 -168Q134 -211 87 -211Q64 -211 49 -198T34 -162Q34 -158 137 254Q153 299 179 334T232 390T277 419T311 434Q357 451 403 451Q435 451 455 449T506 435T560 400Q603 357 603 285Q603 172 520 82T307 -8ZM474 343Q474 364 458 382T409 400H406Q339 400 299 341Q281 313 264 257Q261 248 242 170T222 89Q222 84 230 74T260 54T308 43Q334 43 365 57T417 110Q437 145 456 228Q474 298 474 332V343\",120647:\"33 209Q33 277 80 334T195 421T330 451H344Q410 451 439 429Q457 417 457 402Q457 386 445 375T420 363Q415 363 406 368T383 383T354 398Q347 400 330 400Q256 400 196 361T135 265V257Q135 242 147 225T174 199L358 107Q400 77 400 28T362 -63T271 -105Q254 -105 229 -99T195 -86Q188 -82 188 -71Q188 -56 197 -50T216 -44Q225 -44 237 -48T270 -53H282Q293 -44 293 -31Q293 -19 283 -10Q278 -4 200 33T115 76Q77 98 55 133T33 209\",120648:\"35 151Q35 190 51 236T99 327T184 404T306 443Q307 443 316 443T342 443T378 444T425 444T476 444Q606 444 626 444T655 439Q677 426 677 400Q677 358 639 340Q625 333 563 333Q510 333 510 331Q518 319 518 272Q518 155 437 74T226 -8Q123 -8 79 41T35 151ZM396 278Q396 314 375 323T305 332Q249 332 222 310T180 243Q171 219 162 178T153 116V110Q153 43 234 43Q347 43 382 199Q383 203 383 204Q396 255 396 278\",120649:\"55 289H43Q23 289 23 303Q23 308 33 322Q116 434 199 443Q200 444 386 444Q571 444 577 442Q588 441 599 432T610 402Q610 359 572 340Q561 335 547 334T452 333H353V331Q352 330 342 261T320 119T306 40Q300 18 281 3Q257 -13 233 -13Q210 -13 196 0T181 35Q181 44 182 48Q183 53 229 187T279 331Q279 333 228 333H209Q163 333 136 328T88 301L77 290L55 289\",120650:\"189 388Q189 396 187 398T176 401Q144 399 122 369T89 304Q84 288 81 285T61 282H55H44Q24 282 24 296Q24 306 34 330T64 382T116 431T188 452Q232 452 270 430T308 361Q308 345 275 258T241 123Q241 44 336 44H344Q380 44 415 73T474 140T511 214T526 267Q526 280 513 292Q505 301 486 311T456 333T444 367Q444 400 471 426T529 453Q555 453 579 431T604 358Q604 327 592 271T557 172Q550 157 541 142T510 97T464 47T404 9T328 -8Q264 -8 219 5T154 41T125 85T117 131Q117 182 153 277T189 388\",120651:\"238 4Q230 5 218 8T174 26T118 58T73 112T53 190Q53 219 60 246Q77 313 103 362T143 426T163 443Q165 444 186 444Q217 444 217 432Q217 425 188 392Q157 351 137 291T116 206Q116 127 263 109L276 107L288 139Q347 304 414 378T566 452Q621 449 662 412T703 286Q698 167 598 82T357 -8H332V-11Q332 -12 327 -46T317 -116T310 -157Q306 -180 286 -198T234 -216Q211 -216 197 -203T183 -168Q183 -160 184 -155Q184 -152 198 -112T225 -34T238 4ZM637 260Q637 303 607 322T541 341Q502 341 466 319T405 264Q368 218 356 159Q348 111 348 104Q348 103 361 103Q502 103 569 152T637 260\",120652:\"58 -194Q32 -194 32 -164Q32 -153 46 -139L175 -13Q296 104 296 106Q271 232 226 308Q165 401 141 401Q128 401 117 390T100 365Q94 350 91 349T69 346H45Q35 348 35 359Q35 380 62 411T133 450Q143 452 165 452Q286 452 329 402Q347 379 366 333T394 254T404 215Q404 213 405 213Q405 212 420 227T463 268T520 324Q637 437 640 438Q647 444 661 444Q667 444 676 438T685 419Q685 405 670 389T549 271L420 145Q433 85 444 53Q466 -25 509 -88T575 -151Q590 -151 600 -140T617 -114T626 -98Q629 -96 650 -96H655Q681 -96 681 -108Q681 -114 679 -119Q670 -148 646 -169T591 -199Q581 -201 550 -201Q422 -201 381 -143Q345 -88 316 20L311 39L230 -40Q144 -126 114 -153Q85 -182 77 -188T58 -194\",120653:\"244 141Q244 117 254 98T277 70T305 55T329 48T342 47L344 48L424 366Q501 678 505 686Q508 691 512 692T533 694T555 693T562 688T565 683Q565 678 486 362T406 45Q406 43 415 43Q467 49 514 78T590 143T636 213T653 266Q653 282 641 293T613 311T585 332T572 367Q572 397 598 425T657 453Q684 453 708 430T732 358Q732 330 723 287T706 225Q671 124 578 58T401 -8H393L370 -101Q346 -196 345 -197Q340 -202 316 -202H306Q286 -202 286 -188Q286 -187 296 -144T318 -57T331 -8Q331 -6 328 -6Q290 -6 233 11T148 62Q119 97 119 146Q119 181 154 275T190 388Q190 401 181 401Q154 401 129 375T90 306Q85 288 81 285T61 282H55H44Q24 282 24 296Q24 306 34 329T64 381T116 431T189 452Q237 452 273 428T309 362Q309 343 277 260T244 141\",120654:\"532 367Q532 399 559 426T618 453Q645 453 668 430T691 357Q691 319 677 261T649 171Q640 149 626 125T586 68T521 14T438 -7Q401 -7 372 7T333 30T311 57Q246 -8 165 -8Q119 -8 82 19T30 102Q24 126 24 163V178Q24 210 37 255Q61 346 118 424Q141 451 161 451Q174 451 184 443T194 419Q194 402 179 387Q91 273 91 206Q91 159 122 138T189 117T281 145V173Q283 223 294 253Q304 276 323 289T364 303Q386 303 400 287T415 250Q415 219 385 157L378 144Q378 142 388 136T419 124T462 117Q522 117 566 165T610 255Q610 288 561 320Q532 337 532 367\",120655:\"230 475Q202 475 189 492T175 526T186 570T221 631T288 687T389 710Q430 710 438 709Q495 701 537 679T601 629T637 568T653 509T657 459Q657 409 640 341Q617 248 581 180T507 75T424 16T348 -11T282 -17Q171 -17 113 37Q60 88 60 159Q60 192 71 231Q96 336 184 402Q264 462 366 462Q407 462 439 448T497 389L502 380Q503 381 508 403T519 463T525 531Q523 580 499 610T447 648T387 657Q324 657 283 616Q271 604 276 604Q279 604 286 600T302 583T311 555Q311 523 287 499T230 475ZM196 110Q196 41 287 41Q351 41 398 88Q422 111 437 151Q473 243 473 298Q473 386 409 409Q408 409 383 411Q316 411 278 373Q265 360 259 351T241 311T217 226Q196 143 196 110\",120656:\"415 89Q423 89 429 74T436 46Q436 43 434 39Q432 36 420 29T380 11T322 -5Q311 -7 281 -7Q216 -7 168 10T94 54T56 110T44 167V181Q44 262 94 329Q104 343 119 357T162 391T234 425T327 443Q328 443 348 443T383 444Q434 444 442 438Q450 430 450 416Q446 392 424 383L376 382Q306 381 278 369Q230 349 208 294Q199 274 199 268Q199 267 291 267Q305 267 325 267T353 268Q383 268 394 263T406 241Q406 214 380 206Q375 205 279 205T183 203Q174 176 174 140Q174 87 208 65T292 43Q295 43 300 43T307 44Q337 49 372 69T415 89\",120657:\"114 132Q114 153 140 253T166 372Q166 402 148 402Q126 402 110 369Q100 350 90 310Q85 289 82 286T60 282H55H44Q24 282 24 296Q25 302 27 312T41 350T65 397T104 435T158 452Q184 452 211 445T263 414T288 354V339L265 245Q237 134 237 118V107V102Q237 87 239 77T257 56T300 43Q395 43 455 254Q479 346 479 347L460 354Q294 408 294 528Q294 606 350 653T464 701Q536 701 579 659Q634 601 634 491Q634 468 630 438T623 388L620 370Q624 370 631 369T647 364T656 352Q656 347 653 335Q647 317 642 316Q640 315 637 315Q635 315 619 317Q606 319 605 316Q605 315 603 308Q587 248 550 177T457 57Q379 -8 293 -8Q192 -8 153 23T114 116V132ZM519 566Q519 600 507 625T464 651Q425 651 391 617T356 529Q356 501 370 478T404 441T443 417T477 404L491 400Q493 400 499 428T512 497T519 566\",120658:\"228 325Q170 322 156 316T127 309Q108 309 104 314Q99 319 99 322T108 341Q125 376 171 400T268 425H271Q302 425 319 396Q328 377 328 358Q328 332 324 314Q311 270 286 221Q274 194 274 192H275Q339 234 484 325T639 421Q669 434 691 434T723 425T734 406Q734 394 719 381Q715 376 644 330L575 287L566 267Q543 233 526 176Q520 160 515 143T508 115T506 105Q506 103 533 103Q585 103 607 110T641 118Q670 118 670 107Q670 100 661 85Q643 50 598 27T504 3Q465 3 450 36Q441 51 441 73Q441 84 444 96Q452 146 484 205L497 236L324 125Q143 12 135 10Q103 -6 77 -6Q61 -6 49 2T37 21Q37 36 49 46T124 96L195 141L204 156Q219 179 243 248T264 323Q264 325 228 325\",120659:\"274 -7Q232 -4 195 7T125 38T71 94T51 176V190Q51 213 60 242T95 307T156 373T255 425T393 451L397 452L427 568Q434 597 443 636Q452 677 456 685T472 694H486H495Q517 694 517 680L514 665Q510 650 503 621T489 564L460 451H469Q527 447 574 430T657 370T693 266Q693 163 599 82T350 -7H346L322 -100Q301 -190 295 -197Q291 -202 283 -202H269H258Q238 -202 238 -188Q238 -186 260 -96L283 -7H274ZM449 400Q448 400 404 225T359 47T366 45Q464 55 516 119Q542 149 558 199T575 295Q575 387 462 398L449 400ZM384 398Q384 399 381 399Q350 399 298 378T214 308Q168 236 168 149Q168 68 259 49Q282 44 294 44H295L384 398\",120660:\"371 -168Q357 -168 323 -171T245 -175Q143 -175 109 -150T75 -66Q75 -5 100 108T137 254Q153 299 179 334T232 390T277 419T311 434Q357 451 403 451Q435 451 455 449T506 435T560 400Q603 357 603 282Q603 213 569 148T465 38T304 -8Q273 -8 247 -2T204 14T176 31T159 46T152 53Q152 52 148 27T144 -16Q144 -36 150 -44T189 -58T293 -64Q405 -65 432 -75Q466 -88 466 -127Q466 -140 459 -172Q455 -188 451 -191T426 -194H420Q405 -194 400 -191T395 -176Q396 -170 394 -169T378 -168Q373 -168 371 -168ZM236 116Q236 77 258 60T311 43Q369 43 407 94Q429 123 451 206T474 331Q474 400 409 400H406Q339 400 299 341Q276 305 256 227T236 116\",120661:\"55 289H43Q23 289 23 303Q23 308 33 322Q116 434 199 443Q200 444 562 444Q922 444 928 442Q961 434 961 400Q961 376 944 355T886 333H870Q872 322 872 295V279Q872 230 842 165T751 46T618 -8Q581 -8 554 6T513 45T494 84T484 119Q484 121 478 114Q477 113 476 111Q384 -7 268 -7H265Q251 -7 237 -4T199 11T162 54T147 132Q147 149 149 166T155 198T165 229T176 256T189 281T200 301T211 319T220 333H199Q120 333 88 301L77 290L55 289ZM639 103Q674 103 712 122T780 188T811 295Q811 318 808 330V333H289Q274 318 244 263T214 169Q214 133 236 118T288 103Q351 103 412 153T494 278Q497 290 502 292T529 295Q546 295 551 293T556 283Q556 281 553 260T550 218Q550 153 576 128T639 103\",120662:\"110 0H86Q42 0 42 27Q42 37 148 350T258 667Q269 687 291 692Q295 694 366 694H399Q432 694 448 689T474 667Q477 663 583 350T690 27Q690 0 642 0H617H592Q582 0 575 1T561 2T549 6T541 11T533 18T527 26T522 37T517 49T512 64T506 81L490 130H225Q225 128 208 79T189 27Q185 19 180 14T170 7T156 3T143 1T127 0T110 0ZM439 279Q359 524 359 547L357 555L355 543Q347 503 270 263L259 231H357Q455 231 455 232L439 279\",120663:\"119 1Q98 5 92 28V667Q98 686 118 693Q121 694 272 694H289H346Q439 694 500 681T600 625Q640 580 640 513Q640 451 601 414T504 364L518 361Q568 351 602 329T649 280T666 235T671 197Q671 172 665 147T642 91T586 37T488 5Q456 1 282 1H119ZM489 509Q489 532 479 548T450 573T421 585T394 591Q387 592 315 593H247V404H298H325Q432 404 466 444Q489 470 489 509ZM517 194Q517 235 502 261T458 299T407 313T353 317H329H322H247V101H319H357Q387 101 407 103T452 111T492 133T514 171Q516 176 517 194\",120664:\"92 664Q98 683 118 690Q121 691 312 691T508 689Q534 682 534 644V632V618Q534 582 508 573L502 572Q496 572 489 572Q486 572 463 572T416 573Q333 573 291 575H253V303Q253 31 251 25Q242 0 199 0H170L119 1Q99 7 92 28V664\",120665:\"381 692Q386 694 458 694Q516 694 527 693T549 687Q564 680 575 663Q576 658 715 349T856 27Q856 6 838 1H826Q815 1 795 1T747 1T686 1T616 0T539 0T458 0T378 0T300 0T230 0T169 1T122 1T90 1H78Q60 6 60 27Q62 38 201 349T341 663Q356 687 381 692ZM627 148Q626 149 581 250T492 453L447 554Q447 553 446 552Q444 546 326 278L268 148Q268 147 448 147Q627 147 627 148\",120666:\"277 122Q280 122 380 123T544 125Q552 125 557 125T565 124T569 124Q595 115 595 75V62V47Q595 9 569 2Q564 0 341 0L119 1Q99 7 92 28V664Q98 683 118 690Q121 691 335 691T554 689Q580 682 580 644V632V618Q580 582 554 573Q553 573 551 573T542 572T527 572Q464 572 364 573T260 575H253V412H385H459Q524 412 536 404T549 357Q549 341 549 334T542 318T523 305Q518 303 385 303H253V122H277\",120667:\"411 584Q243 581 131 581Q122 581 116 581T106 582T102 582Q84 589 80 600T76 640L77 667Q83 686 103 693Q106 694 343 694Q579 694 584 692Q592 691 599 684T609 668Q610 665 610 646Q610 614 608 608Q605 603 434 361L261 116Q340 117 402 118T490 119T533 120T560 120H572Q605 120 614 95Q616 89 616 60V46Q616 9 590 2Q585 0 339 0Q92 0 87 2Q79 3 72 10T62 26Q61 29 61 49Q61 84 63 90Q65 94 152 217T325 461T411 584\",120668:\"92 667Q101 694 143 694H172H198Q244 694 251 669Q253 663 253 539V415H540V539Q540 558 540 585T539 621Q539 673 550 683T611 694H621H646Q671 694 683 690T700 669Q702 663 702 347T700 25Q696 9 684 5T646 0H621H606Q560 0 550 11T539 76Q539 85 539 116T540 169V306H253V169Q253 147 253 116T254 75Q254 23 245 12T194 0H170L119 1Q99 7 92 28V667\",120669:\"62 340Q62 716 425 716Q511 716 576 696T681 642T747 559T783 458T793 341Q793 264 777 203T721 89T608 7T428 -22Q62 -22 62 340ZM638 333Q638 365 637 387T632 441T621 495T600 542T567 583T518 611T451 628Q443 629 427 629Q402 629 378 624T327 608T276 571T240 511Q217 453 217 345Q217 254 231 204T279 120Q333 69 428 69Q522 69 576 120Q638 183 638 333ZM279 349V373Q279 413 305 420Q309 422 427 422H487Q550 422 563 414T576 369V349Q576 345 576 337T577 324Q577 284 550 277Q545 275 428 275H369Q306 275 293 283T279 329V349\",120670:\"85 667Q94 694 136 694H165H191Q237 694 244 669Q246 663 246 347T244 25Q235 0 192 0H163L112 1Q92 7 85 28V667\",120671:\"92 667Q101 694 139 694H163H186Q225 694 234 671Q236 663 236 529L237 392L533 682Q550 694 590 694H623H681Q695 680 695 672Q695 670 693 664Q688 657 561 533L431 405L698 33Q701 28 701 23Q701 7 683 0H626H604Q571 0 564 2T545 13Q544 14 530 33T489 90T437 162L332 307Q331 307 284 260L236 214V122V65Q236 32 231 19T210 2Q205 0 161 0L119 1Q99 7 92 28V667\",120672:\"106 0H83Q41 0 41 28Q41 39 133 349T229 667Q242 694 296 694H335H375Q403 694 418 689T442 667Q445 660 537 350T630 28Q630 11 619 6T584 0H555H526Q478 0 465 27Q462 32 431 136T366 372T325 555V546Q320 503 287 376T222 141T186 27Q184 22 177 15T165 6Q154 0 106 0\",120673:\"92 667Q98 684 109 689T146 695Q152 695 167 695T192 694Q200 694 214 694T234 695Q291 695 305 664Q313 651 400 419T487 165Q487 162 488 162T489 165Q489 187 574 413T671 664Q679 680 695 688Q708 694 785 694H828Q855 694 867 689T884 669Q886 663 886 347T884 25Q876 0 832 0H817H802Q758 0 750 25Q748 31 748 293V555L746 544Q737 509 692 386T606 160T564 52Q548 22 502 22H487H472Q423 22 410 52Q407 59 367 160T283 385T231 546L230 548Q229 548 229 293Q229 31 227 25Q222 9 211 5T176 0H158L119 1Q99 7 92 28V667\",120674:\"92 667Q98 684 109 689T146 694H185Q273 694 279 692Q301 689 315 669Q322 660 419 453L554 163L562 143Q564 143 564 401Q564 663 566 669Q574 694 618 694H633H648Q692 694 700 669Q702 663 702 347T700 25Q696 10 683 5T642 0H596H551Q520 0 505 4T478 25Q471 34 374 241L239 532Q231 550 231 552L229 479Q229 440 229 293Q229 31 227 25Q222 9 211 5T176 0H158L119 1Q99 7 92 28V667\",120675:\"627 553Q609 553 512 554T366 555Q316 555 220 554T105 553Q96 553 90 553T82 554T78 554Q61 560 57 571T52 605V623L53 661Q59 680 79 687Q82 688 366 688Q649 688 654 686Q680 679 680 639V621V603Q680 563 654 554Q653 554 651 554T642 554T627 553ZM149 423Q152 424 366 424Q579 424 584 422Q610 415 610 376V358V340Q610 300 584 293Q579 291 366 291H232Q162 291 150 293T129 306Q122 315 122 360L123 397Q129 416 149 423ZM108 135Q143 135 226 134T363 133Q407 133 507 134T632 135H645Q675 135 684 110Q686 104 686 68V49Q686 9 660 2Q655 0 364 0L74 1Q57 7 49 21L47 28L46 65V83Q46 126 72 133Q80 135 108 135\",120676:\"362 715Q364 715 376 715T394 716H400Q542 716 626 643T727 426Q731 395 731 342Q731 271 722 225Q674 -22 396 -22Q320 -22 259 -3T148 68T77 201Q62 257 62 342Q62 447 86 522T173 649Q245 707 362 715ZM568 433Q551 623 396 623Q383 623 370 622T333 612T292 591T257 550T233 485Q223 442 223 350Q223 276 232 227T267 137Q309 74 397 74Q433 74 461 85T507 113T537 156T556 205T566 260T569 310T570 357Q570 409 568 433\",120677:\"92 664Q98 683 118 690Q121 691 396 691T676 689Q695 684 700 666Q702 660 702 345Q702 31 700 25Q696 9 684 5T646 0H621H596Q571 0 559 4T542 25Q540 31 540 307V582H253V307Q253 31 251 25Q242 0 199 0H170L119 1Q99 7 92 28V664\",120678:\"641 470Q641 426 630 391T603 334T561 295T513 271T459 259T408 254T361 253H350H337H253V142Q253 125 253 100T254 67Q254 32 249 19T227 2Q222 0 170 0L119 1Q99 7 92 28V667Q98 686 118 693Q121 694 271 694Q428 693 462 688Q641 656 641 470ZM487 467Q487 495 485 510T474 546T442 578T382 592Q375 593 310 593H250V347H309H339Q364 347 380 348T418 354T451 368T474 395T486 438Q487 444 487 467\",120680:\"322 124Q326 124 457 125T672 127H689Q721 127 730 102Q732 96 732 64V48Q732 9 706 2Q701 0 394 0L89 1Q76 5 69 13T62 29V36Q62 37 62 38Q62 47 70 58T126 126Q161 167 185 196Q302 335 302 336L187 463Q74 584 68 594Q61 603 61 639L62 667Q68 686 88 693Q91 694 396 694T706 692Q732 686 732 647V635V621Q732 585 706 576Q705 576 702 576T691 576T670 575L302 578Q302 577 394 475T490 371Q498 362 498 347Q498 336 488 323T408 226L322 124\",120681:\"67 687Q70 688 366 688Q661 688 666 686Q692 680 692 641V629V615Q692 579 666 570H660Q655 569 648 569Q645 569 624 569T581 570Q505 570 475 572H447V302Q447 31 445 25Q436 0 393 0H364L313 1Q293 7 286 28L285 300V572H257Q227 570 151 570Q130 570 109 570T84 569Q77 569 72 570H66Q48 577 44 588T40 631L41 661Q47 680 67 687\",120682:\"62 560Q62 607 94 644T169 698T253 715Q273 715 286 713T322 704T363 677T398 625Q413 597 423 556L428 540Q429 541 436 566T454 620T494 677T561 713Q570 715 593 715Q682 715 737 668T793 560Q793 549 793 545T786 533T767 520H670Q646 532 644 551T632 579Q618 594 591 594Q539 594 524 530T509 321V216Q509 31 507 25Q498 0 455 0H426L375 1Q355 7 348 28L347 232Q346 344 346 441Q346 442 343 468T335 521T312 571T266 594Q252 594 247 593Q228 586 220 576T212 557T209 539T191 523L185 520H88Q75 527 69 534T63 545T62 560\",120683:\"62 292T62 347T80 445T124 511T183 552T243 574T292 584L315 587H319V627L320 667Q329 694 370 694H397H422Q466 694 473 669Q475 663 475 625V587H478Q479 587 500 584T548 575T608 553T668 513T713 446T732 347Q732 253 674 187Q655 167 628 152T576 128T530 116T493 109L478 107H475V69V50Q475 9 449 2Q444 0 395 0L347 1Q327 7 320 28L319 67V107H315L292 110Q269 114 243 119T184 142T124 182T80 249ZM319 197T319 347T318 497Q316 497 307 494T284 485T262 471Q220 438 220 347Q220 285 239 249Q248 234 261 223T286 208T308 200L317 197Q319 197 319 347ZM572 347V357Q572 387 569 407T548 452T496 491Q495 491 494 491T487 493T475 497V197Q518 210 541 232T571 303Q572 312 572 347\",120684:\"52 1Q37 11 37 23Q37 26 39 32Q39 34 158 202L275 369Q275 370 221 441T112 586T55 663Q53 669 53 672Q53 687 68 693H72Q77 693 84 693T99 694T118 694T139 694H176Q203 694 212 692T230 682Q231 681 239 669T265 634T296 591L358 504L418 591Q481 682 486 686Q491 691 499 692Q505 694 569 694H632Q650 685 650 672Q650 667 646 660Q643 654 592 582T491 440T441 369T566 201T693 29Q694 27 694 23Q694 11 677 0H607L537 1Q523 6 519 10T437 131Q422 153 411 170T390 200T375 222T365 237T359 245L357 247L348 232Q339 218 319 188T283 131Q222 37 211 22T186 1H52\",120685:\"61 585Q62 594 62 597T64 606T73 616T89 626H138Q196 626 208 620Q243 602 253 546T261 431T271 309T325 219Q342 205 349 205Q350 205 350 436L351 667Q360 694 401 694H428H454Q495 694 504 671Q506 663 506 436L507 205Q542 222 561 251T586 318T593 392T595 472T602 546Q614 614 661 625Q665 626 708 626H730Q766 626 780 618T794 582Q794 548 768 540Q755 538 754 501T750 410T736 298T680 191T560 120Q550 116 512 109H506V70V50Q506 9 480 2Q475 0 426 0L378 1Q358 7 351 28L350 68V109L335 111Q298 117 267 129T214 156T175 191T146 229T127 272T115 314T109 357T106 395T105 429Q104 537 87 540Q66 548 63 565Q61 570 61 585\",120686:\"241 122Q225 154 191 199T131 278T83 363T61 464Q61 497 68 527T94 591T145 650T228 693T349 715Q354 715 370 715T396 716Q539 716 622 668Q658 647 682 617T715 556T728 505T732 465Q732 415 711 365T663 280T602 200T552 122H632Q649 122 669 122T693 123H697Q736 123 742 98Q744 92 744 62V47Q744 9 718 2Q713 0 591 0L471 1Q454 7 446 21Q444 27 444 45Q444 96 463 154T506 257T549 360T569 469Q569 504 563 530T538 580T485 616T396 629Q313 629 268 594T223 468Q223 419 243 361T286 258T330 152T350 41Q350 14 335 7T276 -1Q267 -1 241 -1T197 0L77 1Q57 7 50 28L49 59V74Q49 114 75 121Q81 123 100 123Q104 123 124 123T161 122H241\",120782:\"266 654H280H282Q500 654 524 418Q529 370 529 320Q529 125 456 52Q397 -10 287 -10Q110 -10 63 154Q45 212 45 316Q45 504 113 585Q140 618 185 636T266 654ZM374 548Q347 604 286 604Q247 604 218 575Q197 552 193 511T188 311Q188 159 196 116Q202 87 225 64T287 41Q339 41 367 87Q379 107 382 152T386 329Q386 518 374 548\",120783:\"481 0L294 3Q136 3 109 0H96V62H227V304Q227 546 225 546Q169 529 97 529H80V591H97Q231 591 308 647L319 655H333Q355 655 359 644Q361 640 361 351V62H494V0H481\",120784:\"175 580Q175 578 185 572T205 551T215 510Q215 467 191 449T137 430Q107 430 83 448T58 511Q58 558 91 592T168 640T259 654Q328 654 383 637Q451 610 484 563T517 459Q517 401 482 360T368 262Q340 243 265 184L210 140H274Q416 140 429 145Q439 148 447 186T455 237H517V233Q516 230 501 119Q489 9 486 4V0H57V25Q57 51 58 54Q60 57 109 106T215 214T288 291Q364 377 364 458Q364 515 328 553T231 592Q214 592 201 589T181 584T175 580\",120785:\"80 503Q80 565 133 610T274 655Q366 655 421 623T491 538Q493 528 493 510Q493 446 453 407T361 348L376 344Q452 324 489 281T526 184Q526 152 514 121T474 58T392 8T265 -11Q175 -11 111 34T48 152Q50 187 72 209T132 232Q171 232 193 208T216 147Q216 136 214 126T207 108T197 94T187 84T178 77T170 72L168 71Q168 70 179 65T215 54T266 48H270Q331 48 350 105Q358 128 358 185Q358 239 348 268T309 313Q292 321 242 322Q205 322 198 324T191 341V348Q191 366 196 369T232 375Q239 375 247 376T260 377T268 378Q284 383 297 393T326 436T341 517Q341 536 339 547T331 573T308 593T266 600Q248 600 241 599Q214 593 183 576Q234 556 234 503Q234 462 210 444T157 426Q126 426 103 446T80 503\",120786:\"531 0Q510 3 381 3Q238 3 214 0H201V62H313V155H32V217L205 434Q342 606 362 630T387 655L391 656Q395 656 401 656T414 656H427Q447 656 451 645Q453 641 453 429V217H542V155H453V62H542V0H531ZM324 217V494L103 218L213 217H324\",120787:\"100 565V605Q100 637 102 646T113 655Q116 655 139 647T202 631T286 623Q332 623 372 631T434 647T459 655Q466 655 469 651T472 643T472 629Q472 613 463 601Q370 487 219 487Q195 487 183 488T169 490T168 433V376Q169 376 174 379T188 387T211 397T244 405T288 409Q390 409 453 352T517 201Q517 106 445 48T253 -11Q169 -11 113 37T57 154Q57 187 79 208T131 229T183 209T206 154Q206 99 155 83Q152 82 157 78Q196 47 253 47Q347 47 358 135Q358 137 358 138Q360 158 360 209Q360 277 355 301T337 338Q315 358 282 358Q202 358 160 303Q153 294 149 292T130 290Q107 290 102 301Q100 304 100 474V565\",120788:\"48 318Q48 395 68 456T120 553T193 613T273 646T350 655Q425 655 461 616T497 524Q497 485 475 468T428 451Q399 451 378 470T357 521Q357 565 403 588Q375 601 351 601Q313 601 282 584Q242 565 222 526Q199 473 199 367Q201 369 210 380T227 396T246 410T275 422T312 426Q438 426 494 332Q526 285 526 208V199Q526 112 465 53Q428 17 388 3T285 -11Q236 -11 195 7T135 43T104 80Q48 165 48 318ZM375 231V244V268Q375 295 373 310T364 342T341 366T299 374H297Q231 374 208 287Q200 257 200 196Q201 120 209 100Q231 47 288 47Q351 47 368 90Q375 112 375 231\",120789:\"256 -11Q231 -11 208 5T185 65Q185 105 193 146T212 220T241 289T275 349T312 402T346 445T377 479T397 502L400 504H301Q156 503 150 497Q142 491 134 456T126 407H64V411Q65 414 82 544T99 675T130 676H161V673Q161 669 162 666T167 661T173 657T181 654T190 652T200 651T210 650T220 649T229 648Q237 648 254 647T276 646Q277 646 426 644H558V620V607Q558 596 551 586T509 537Q489 515 476 500Q390 401 384 393Q349 339 337 259T324 113T322 38Q307 -11 256 -11\",120790:\"80 474Q80 561 139 607T278 654Q357 654 411 632Q490 593 494 509Q494 424 416 376L407 371L418 364Q432 356 447 345T481 312T513 260T526 192Q526 100 461 45T285 -11Q184 -11 116 32T48 164Q48 181 50 196T58 225T69 249T84 270T100 286T117 300T134 311T149 321T162 329L152 336Q120 360 100 397T80 474ZM347 404Q404 446 404 503Q404 579 317 599Q309 600 276 600Q178 600 170 538Q170 532 171 527T173 518T178 509T184 501T194 492T205 484T219 476T235 467T254 456T275 445L347 404ZM289 47Q323 47 351 54T402 82T425 137Q425 147 421 161Q411 183 391 197T303 249Q224 293 223 293Q220 291 215 288T197 273T175 248T157 213T149 167Q149 109 188 78T289 47\",120791:\"178 59Q206 48 238 48Q311 48 345 102Q370 138 375 259V278Q374 278 369 271T350 252T322 232Q297 220 258 220Q172 220 110 275T48 438V446Q54 561 146 618Q199 654 278 654Q321 654 329 653Q526 621 526 330Q526 252 507 190T457 92T388 31T312 -2T240 -11Q165 -11 121 25T77 120Q77 159 99 176T147 193T194 177T217 122Q217 113 216 106T211 92T205 82T198 73T191 67T184 62T178 59ZM374 446V465Q374 523 364 552T315 598Q309 600 293 601Q227 601 210 562Q199 539 199 433Q199 343 204 319T235 279Q250 272 274 271H282Q293 271 303 274T327 288T353 323T371 385Q374 403 374 446\",120802:\"117 621Q174 678 247 678Q305 678 351 647Q396 617 424 557Q460 472 460 328Q460 271 455 224Q448 154 427 104T376 27T314 -10T249 -22Q201 -22 160 1T91 67Q39 154 39 316Q39 541 117 621ZM250 55Q274 55 293 66T324 93T344 136T357 185T364 240T366 291T367 340Q367 373 367 393T363 449T352 507T332 553T299 589T250 601Q217 601 194 584T159 542T141 479T133 411T132 340V331Q132 299 133 277T137 219T147 157T167 107T201 68T250 55\",120803:\"94 612Q172 616 211 632T284 678H307V73H430V0H88V73H213V317Q213 560 212 560Q210 558 197 554T155 546T96 540L83 539V612H94\",120804:\"222 599Q190 599 166 585T128 550T108 509T97 474T93 459L67 492L42 526L47 539Q72 608 120 642T225 677Q304 677 355 644Q449 579 449 454Q449 373 361 290Q351 280 315 250T199 144Q156 103 137 85L293 86H449V0H50V79L216 242Q284 302 317 349T351 456Q351 517 315 558T222 599\",120805:\"333 521Q333 554 313 579T243 604Q154 604 99 514L78 546Q56 577 56 579Q56 580 62 589T82 611T114 637T162 662T222 677Q224 677 231 677T242 678H245Q318 678 374 634T430 520Q430 483 417 452T382 398T351 369T329 354L328 353Q369 333 373 330Q408 306 432 268T457 184Q457 103 397 41T242 -22Q131 -22 51 58L42 68L49 105L55 142L58 138Q62 134 66 130T77 120T91 108T108 96T129 83T152 72T179 63T209 57T242 54Q285 54 319 86T353 184Q353 231 331 267T260 315L213 316H166V354Q166 392 167 392Q233 395 257 405Q290 418 311 450T333 521\",120806:\"271 654L272 656H380V235H471V159H380V0H286V159H28V235L149 443Q269 652 271 654ZM292 235V607Q292 604 290 591T286 571T280 548T269 517T252 476T226 422T189 354T140 267Q136 260 132 253T126 240L123 236Q123 235 207 235H292\",120807:\"257 350Q236 350 218 342T189 323T171 301T160 281L157 273Q157 272 116 272H75V656H416V577H162V486Q162 396 163 396T174 403T207 418T258 426Q339 426 394 360T449 203Q449 113 386 46T226 -21H223Q188 -21 156 -11T102 13T64 42T41 66T33 77Q34 78 44 95T64 128L73 144Q93 112 117 93Q165 54 223 54Q270 54 306 86T345 197Q345 350 257 350\",120808:\"42 318Q42 396 61 460T109 564T173 629T237 666T289 677H301H317Q359 677 408 658V621Q408 585 407 585H406Q359 605 308 605Q246 605 203 556T146 421Q143 403 144 403Q145 402 152 409Q216 469 299 469Q333 469 357 457T407 405Q457 330 457 226Q457 126 402 57Q340 -22 251 -22Q216 -22 183 -7T116 43T63 149T42 318ZM260 393Q216 393 188 365T150 306T141 243Q141 153 172 104Q192 68 230 56Q238 54 251 54Q311 54 342 116Q360 152 360 226Q360 297 344 332Q320 382 277 392Q275 392 270 392T260 393\",120809:\"42 570V656H457V577L447 564Q345 439 295 289T244 0V-11H145V12Q160 330 356 550Q360 556 365 561T374 571L208 570H42\",120810:\"55 500Q55 568 109 623T250 678Q327 678 385 627T444 501Q444 445 410 410T336 357L329 353H330Q378 335 417 293T456 184Q456 93 393 36T249 -22T106 35T43 184Q43 251 82 293T169 353Q171 354 166 356Q165 356 163 357Q113 378 84 416T55 500ZM358 496Q358 557 325 581T250 605Q206 605 174 580T141 496Q141 446 171 420T250 393Q298 393 328 419T358 496ZM245 316Q205 316 172 285T139 185V179Q139 79 222 57Q231 55 250 55H254Q295 55 327 84Q360 120 360 188Q360 254 326 285Q295 316 245 316\",120811:\"44 476Q57 561 116 619T245 677H255Q308 677 349 647Q392 619 424 545T457 334Q457 178 382 78T205 -22Q168 -22 135 -10T86 14L72 25Q73 25 91 58L110 91Q127 78 136 72T163 60T203 54Q238 54 265 71T308 110T335 164T350 214T357 253V257L347 248Q284 187 200 187Q165 187 140 201T87 258Q42 332 42 430Q42 458 44 476ZM269 604Q265 605 254 605Q222 605 199 591T164 554T148 517T141 487Q140 478 140 430T141 373Q146 335 164 307T207 269Q223 263 247 263Q299 266 328 308T358 417Q358 435 356 456T346 511T318 570T269 604\",120812:\"274 -22Q227 -22 190 -9T128 24T87 76T62 135T49 204T44 271T43 336V343V362Q43 407 45 440T56 524T86 613T141 677Q197 715 264 715Q314 715 353 702T418 669T460 616T487 555T500 483T505 413T506 343Q506 310 506 293T503 241T498 185T486 133T467 83T437 42T397 8T343 -13T274 -22ZM355 355V401Q355 448 354 476T349 537T336 587T311 617T272 629Q270 629 266 629T261 628Q219 618 207 568T194 419V355Q194 203 200 156T231 85Q250 66 275 66Q299 66 318 85Q342 109 348 156T355 355\",120813:\"118 560H116Q107 560 100 561T85 572T76 600Q76 612 77 618T83 632T99 644Q102 645 135 646T207 660T275 700Q292 716 310 716Q353 716 360 691Q362 685 362 386V87H446Q464 76 468 69T473 44Q473 12 446 1H118Q105 7 100 13T94 25T93 44V62Q100 79 119 87H210V329Q210 571 208 571Q182 560 118 560\",120814:\"339 477Q339 505 332 531T301 579T242 601Q165 601 136 503Q133 493 130 490T121 486Q116 486 94 514Q86 523 82 528Q46 572 46 577Q46 591 77 632T147 691Q192 716 257 716Q305 716 351 700Q416 674 455 615T494 481Q494 421 463 376T356 266Q326 240 287 205T224 146T199 122H331Q359 122 392 122T431 123H445Q485 123 492 98Q494 92 494 62V47Q494 9 468 2Q463 0 272 0L83 1Q63 7 56 28L55 57V89Q59 97 215 261Q255 303 275 327T317 394T339 477\",120815:\"61 624Q62 630 83 650T153 693T262 716Q328 716 373 698T438 650T465 593T473 536Q473 438 375 376L387 371Q450 350 476 305T503 208Q503 164 492 126T456 53T380 -2T261 -22Q224 -22 189 -15T130 2T86 24T57 43T46 53Q46 56 53 99T62 145Q65 152 71 152Q76 152 90 143T123 121T175 99T248 87Q302 87 321 113T341 202Q341 264 329 292T279 329L232 331L190 332L184 338V411Q190 417 192 417Q193 418 205 419T232 421T252 424Q280 430 299 461T318 539V551Q318 599 283 609Q276 611 257 611Q225 611 199 601T159 577T136 554T120 543T102 560T76 597T62 618T61 624\",120816:\"278 693H282Q285 693 291 693T305 694T322 694T342 694H377Q402 694 411 691T430 677Q434 670 434 646T435 456V249H461H472Q509 249 516 224Q518 219 518 194Q518 178 518 171T511 155T492 142Q488 140 461 140H435V86V53Q435 9 409 2Q405 0 366 0H351Q306 0 298 25Q296 31 296 86V140H179H123Q99 140 80 129T50 106T37 95Q31 95 31 163V208Q31 246 33 251Q251 673 262 684Q268 691 278 693ZM302 249V416L301 576Q301 536 165 276L151 250L226 249H302\",120817:\"109 282Q87 290 83 310V666Q83 667 84 670T87 676T91 682T98 688T108 693Q112 694 269 694T431 692Q457 686 457 648V637V624Q457 588 431 581Q426 579 326 579H227V510Q227 442 229 442Q243 450 288 450Q377 450 435 399T494 222Q494 -22 241 -22Q202 -22 167 -11T109 16T69 49T45 79T37 94T69 151Q91 185 97 185Q105 185 112 170Q127 135 160 111T240 87Q266 87 284 94T311 111T325 142T331 179T332 226Q332 307 324 335T281 363Q228 363 197 306Q189 289 172 282H109\",120818:\"414 589Q410 589 389 600T334 612Q275 612 243 575Q209 538 202 433V422L209 431Q243 487 317 487Q392 487 440 442Q478 402 490 357T503 236Q503 113 454 54Q421 13 381 -4T279 -22Q263 -22 250 -21T214 -15T173 1T133 30T96 77T68 146T50 242Q46 278 46 336Q46 406 52 447Q84 698 312 715L315 716Q318 716 321 716Q323 716 328 716T337 715Q398 715 425 688V596Q419 591 414 589ZM282 87Q324 89 336 117T348 231Q348 310 343 343T324 388T277 399Q249 399 231 373T208 317T202 253Q202 201 207 168T224 117T249 93T282 87\",120819:\"135 38Q135 190 198 335T353 572H215Q185 572 151 572T110 571H96Q55 571 48 596Q46 602 46 633V648Q46 686 72 693Q76 695 124 695Q134 695 183 695T274 694Q472 694 477 692Q503 686 503 648V637Q503 612 502 605T491 588Q300 349 292 46V36Q292 -4 266 -9Q262 -11 214 -11H192Q160 -11 148 -3T135 38\",120820:\"61 518Q61 574 79 614T128 676T192 706T263 715H270Q298 715 318 714T373 701T430 671T470 612T488 517Q488 459 458 423T390 376Q388 375 393 373Q395 372 398 371Q503 330 503 204Q503 -22 275 -22Q209 -22 163 -3T92 49T57 120T46 204Q46 230 50 252T61 289T77 318T96 339T116 353T134 363T148 369T158 373T160 376Q118 389 90 424T61 518ZM344 538Q344 563 340 578T326 600T307 609T279 612Q232 612 218 594T204 518Q204 459 216 439T275 418Q328 418 338 450Q344 464 344 515V538ZM248 88T274 88T315 94T338 117T346 149T349 197Q349 269 342 290Q338 309 320 320T274 331Q246 331 229 320T207 290Q200 269 200 197Q201 163 202 149T210 118T232 94\",120821:\"347 272Q346 272 342 266T330 250T309 230T276 214T230 207Q185 207 150 223Q116 240 90 276T54 357Q46 393 46 468Q46 469 46 484T47 502T48 520T51 540T55 559T61 579T69 599T81 620T96 640T115 661Q174 716 276 716Q299 716 317 714T369 698T426 658T471 580T499 456Q503 402 503 342Q503 115 392 29Q322 -22 231 -22Q163 -22 115 7L82 31Q76 38 81 46Q116 112 127 123Q130 126 134 126T148 116T179 97T226 87Q287 87 318 132Q323 139 326 146T332 165T337 182T340 204T342 225T345 249T347 272ZM201 547T201 454T211 329T262 294Q276 294 285 296T310 312T335 355Q347 391 347 447Q347 520 340 550T317 595Q300 612 277 612Q226 612 214 580\",120822:\"42 305Q42 450 111 535T257 621Q335 621 390 562Q482 468 482 306Q482 174 418 82T262 -10T106 82T42 305ZM257 545Q209 545 168 481T126 320Q126 220 162 147Q204 65 262 65Q318 65 358 139T398 320V328Q395 411 364 470T284 543Q270 545 257 545\",120823:\"99 461Q99 470 99 474T104 487T120 498T151 502Q213 517 251 596Q264 622 283 622Q308 622 319 597V76H373H401Q428 76 439 69T450 38Q450 11 428 1H127Q104 10 104 38Q104 62 115 69T153 76H181H235V269Q235 461 234 461Q184 426 137 424H133Q124 424 119 425T109 431T99 447V461\",120824:\"52 462Q52 528 110 575T247 622H250Q343 622 407 565T472 421Q472 371 446 324T390 248T308 178Q307 177 275 151T214 101L185 77Q185 76 286 76H388V87Q388 105 397 114T430 123T463 114Q470 107 471 100T472 61V42Q472 24 468 16T450 1H75Q53 10 53 32V38V48Q53 57 63 67T127 122Q153 144 169 157L289 256Q388 345 388 419Q388 473 346 509T231 545H224Q176 545 146 499L144 494Q155 476 155 459Q154 459 155 455T154 444T148 430T136 417T114 408Q113 408 110 408T104 407Q80 407 66 422T52 462\",120825:\"260 546Q233 546 211 541T180 531T171 524L174 514Q177 505 177 497Q177 476 162 461T125 446Q106 446 90 459T73 504Q76 540 98 565T150 601T203 616T239 621Q241 622 265 622Q322 620 362 602T420 558T444 513T451 478Q451 386 369 329L375 326Q381 323 386 320T401 311T419 298T436 283T452 263T466 240T475 212T479 180Q479 99 416 44T259 -11T105 28T44 130Q44 154 59 168T95 183Q117 183 132 169T148 131Q148 119 139 101Q175 65 260 65Q316 65 355 97T395 179Q395 211 375 240Q336 292 253 292H234H215Q194 292 185 299T175 330Q175 350 184 359Q192 368 238 370T309 384Q336 398 351 423T367 474Q367 496 350 513Q321 546 260 546\",120826:\"235 1Q213 10 213 32V38V46Q213 65 230 73Q236 76 274 76H314V168H183L52 169Q37 175 33 182T29 205V218L30 244Q53 283 155 443T264 613Q276 623 298 623H323H363Q378 616 385 601V244H429H450Q474 244 484 237T495 206Q495 179 477 171Q471 168 429 168H385V76H425H442Q466 76 476 69T487 38Q487 10 465 1H235ZM314 244V554L117 245L215 244H314\",120827:\"387 189Q387 244 354 278T273 313Q230 313 205 301T163 271T138 249H120Q102 249 97 251Q85 258 83 266T80 311Q80 320 80 359T81 430Q81 587 82 591Q88 605 103 610H108Q112 610 120 610T138 610T163 610T192 611T225 611T260 611H415Q416 610 421 607T428 602T432 596T436 587T437 573Q437 567 437 562T434 554T431 548T427 543T423 540T418 538L415 536L289 535H164V363L170 366Q175 368 184 372T207 380T238 386T276 389Q357 389 414 331T472 187Q472 116 412 53T245 -10Q218 -10 209 -9Q126 5 89 48T52 137Q52 164 68 177T104 191Q130 191 143 175T156 141Q156 132 154 125T149 113T146 107Q146 104 155 95T188 76T245 65Q298 65 342 98T387 189\",120828:\"357 536Q357 546 318 546Q258 546 205 497T133 357V353L144 361Q210 402 285 402Q362 402 414 350Q479 285 479 193Q479 111 418 50T263 -11Q234 -11 207 -3T149 26T97 81T60 171T45 301Q45 444 129 533T319 622Q388 622 421 589T454 510Q454 491 442 475T402 458Q373 458 362 475T350 510Q350 520 354 528L357 536ZM319 326T269 326T179 298T136 223Q136 202 143 174T176 112T237 68Q246 66 265 66Q319 66 360 107Q395 146 395 197Q395 250 356 289Q319 326 269 326\",120829:\"204 -10Q162 -10 162 40Q162 146 198 261T310 477Q311 478 321 491T342 517T358 535H128V524Q128 506 119 497Q111 489 86 489H78Q55 489 46 508Q44 513 44 557V580Q44 605 52 616T88 627H93Q114 627 125 611H458Q474 598 477 593T480 573Q480 559 478 553T469 543T446 521T408 477Q252 290 246 49Q246 43 246 37T246 27T245 22Q243 11 233 1T204 -10\",120830:\"58 460Q58 523 117 572T254 621Q290 621 298 620Q376 607 421 560T466 460Q466 441 460 424T443 393T421 370T397 352T374 340T357 332L350 330L356 328Q363 325 371 321T392 310T415 295T439 274T459 249T473 217T479 179Q479 102 418 46T262 -10T106 46T45 179Q45 202 52 222T70 257T96 284T123 305T148 319T167 328L174 330L170 332Q166 333 159 336T145 343Q104 362 81 393T58 460ZM382 458Q382 491 349 518T263 546Q215 546 179 521T142 458Q142 421 178 395T262 368Q315 368 348 396T382 458ZM396 178Q396 223 358 257T263 292Q206 292 167 258T128 178Q128 137 163 102T262 66Q324 66 360 101T396 178\",120831:\"392 259Q333 210 236 210H233Q163 210 109 262Q46 325 46 411T99 550Q164 622 264 622Q293 622 319 615T376 587T428 532T464 440T479 304Q479 167 400 78T217 -11Q140 -11 105 22T70 101Q70 124 84 138T122 153Q150 153 162 137T174 101Q174 91 168 76Q179 65 216 65Q267 65 300 93Q322 109 339 130T366 173T380 210T388 242T392 259ZM388 389Q388 438 357 492T268 546T185 520Q129 479 129 415Q129 384 138 363Q145 349 156 334T195 302T255 285Q305 285 345 313T388 389\"},{8243:\"\\u2032\\u2032\",8244:\"\\u2032\\u2032\\u2032\",8246:\"\\u2035\\u2035\",8247:\"\\u2035\\u2035\\u2035\",8279:\"\\u2032\\u2032\\u2032\\u2032\",8708:\"\\u2203\\u0338\",8716:\"\\u220b\\u0338\",8772:\"\\u2243\\u0338\",8777:\"\\u2248\\u0338\",8802:\"\\u2261\\u0338\",8813:\"\\u224d\\u0338\",8820:\"\\u2272\\u0338\",8821:\"\\u2273\\u0338\",8824:\"\\u2276\\u0338\",8825:\"\\u2277\\u0338\",8836:\"\\u2282\\u0338\",8837:\"\\u2283\\u0338\",8930:\"\\u2291\\u0338\",8931:\"\\u2292\\u0338\",10764:\"\\u222c\\u222c\"})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.normal=void 0,e.normal={32:[0,0,.25],33:[.716,0,.278],34:[.694,-.379,.5],35:[.694,.194,.833],36:[.75,.056,.5],37:[.75,.056,.833],38:[.716,.022,.778],39:[.694,-.379,.278],40:[.75,.25,.389],41:[.75,.25,.389],42:[.75,-.32,.5],43:[.583,.082,.778],44:[.121,.194,.278],45:[.252,-.179,.333],46:[.12,0,.278],47:[.75,.25,.5],48:[.666,.022,.5],49:[.666,0,.5],50:[.666,0,.5],51:[.665,.022,.5],52:[.677,0,.5],53:[.666,.022,.5],54:[.666,.022,.5],55:[.676,.022,.5],56:[.666,.022,.5],57:[.666,.022,.5],58:[.43,0,.278],59:[.43,.194,.278],60:[.54,.04,.778],61:[.583,.082,.778],62:[.54,.04,.778],63:[.705,0,.472],64:[.705,.011,.778],65:[.716,0,.75],66:[.683,0,.708],67:[.705,.021,.722],68:[.683,0,.764],69:[.68,0,.681],70:[.68,0,.653],71:[.705,.022,.785],72:[.683,0,.75],73:[.683,0,.361],74:[.683,.022,.514],75:[.683,0,.778],76:[.683,0,.625],77:[.683,0,.917],78:[.683,0,.75],79:[.705,.022,.778],80:[.683,0,.681],81:[.705,.193,.778],82:[.683,.022,.736],83:[.705,.022,.556],84:[.677,0,.722],85:[.683,.022,.75],86:[.683,.022,.75],87:[.683,.022,1.028],88:[.683,0,.75],89:[.683,0,.75],90:[.683,0,.611],91:[.75,.25,.278],92:[.75,.25,.5],93:[.75,.25,.278],94:[.694,-.531,.5],95:[-.025,.062,.5],96:[.699,-.505,.5],97:[.448,.011,.5],98:[.694,.011,.556],99:[.448,.011,.444],100:[.694,.011,.556],101:[.448,.011,.444],102:[.705,0,.306,{ic:.066}],103:[.453,.206,.5],104:[.694,0,.556],105:[.669,0,.278],106:[.669,.205,.306],107:[.694,0,.528],108:[.694,0,.278],109:[.442,0,.833],110:[.442,0,.556],111:[.448,.01,.5],112:[.442,.194,.556],113:[.442,.194,.528],114:[.442,0,.392],115:[.448,.011,.394],116:[.615,.01,.389],117:[.442,.011,.556],118:[.431,.011,.528],119:[.431,.011,.722],120:[.431,0,.528],121:[.431,.204,.528],122:[.431,0,.444],123:[.75,.25,.5],124:[.75,.249,.278],125:[.75,.25,.5],126:[.318,-.215,.5],160:[0,0,.25],163:[.714,.011,.769],165:[.683,0,.75],168:[.669,-.554,.5],172:[.356,-.089,.667],174:[.709,.175,.947],175:[.59,-.544,.5],176:[.715,-.542,.5],177:[.666,0,.778],180:[.699,-.505,.5],183:[.31,-.19,.278],215:[.491,-.009,.778],240:[.749,.021,.556],247:[.537,.036,.778],305:[.442,0,.278,{sk:.0278}],567:[.442,.205,.306,{sk:.0833}],697:[.56,-.043,.275],710:[.694,-.531,.5],711:[.644,-.513,.5],713:[.59,-.544,.5],714:[.699,-.505,.5],715:[.699,-.505,.5],728:[.694,-.515,.5],729:[.669,-.549,.5],730:[.715,-.542,.5],732:[.668,-.565,.5],768:[.699,-.505,0],769:[.699,-.505,0],770:[.694,-.531,0],771:[.668,-.565,0],772:[.59,-.544,0],774:[.694,-.515,0],775:[.669,-.549,0],776:[.669,-.554,0],778:[.715,-.542,0],779:[.701,-.51,0],780:[.644,-.513,0],824:[.716,.215,0],913:[.716,0,.75],914:[.683,0,.708],915:[.68,0,.625],916:[.716,0,.833],917:[.68,0,.681],918:[.683,0,.611],919:[.683,0,.75],920:[.705,.022,.778],921:[.683,0,.361],922:[.683,0,.778],923:[.716,0,.694],924:[.683,0,.917],925:[.683,0,.75],926:[.677,0,.667],927:[.705,.022,.778],928:[.68,0,.75],929:[.683,0,.681],931:[.683,0,.722],932:[.677,0,.722],933:[.705,0,.778],934:[.683,0,.722],935:[.683,0,.75],936:[.683,0,.778],937:[.704,0,.722],8192:[0,0,.5],8193:[0,0,1],8194:[0,0,.5],8195:[0,0,1],8196:[0,0,.333],8197:[0,0,.25],8198:[0,0,.167],8201:[0,0,.167],8202:[0,0,.1],8203:[0,0,0],8204:[0,0,0],8211:[.285,-.248,.5],8212:[.285,-.248,1],8213:[.285,-.248,1],8214:[.75,.25,.5],8215:[-.025,.062,.5],8216:[.694,-.379,.278],8217:[.694,-.379,.278],8220:[.694,-.379,.5],8221:[.694,-.379,.5],8224:[.705,.216,.444],8225:[.705,.205,.444],8226:[.444,-.055,.5],8230:[.12,0,1.172],8242:[.56,-.043,.275],8243:[.56,0,.55],8244:[.56,0,.825],8245:[.56,-.043,.275],8246:[.56,0,.55],8247:[.56,0,.825],8254:[.59,-.544,.5],8260:[.75,.25,.5],8279:[.56,0,1.1],8288:[0,0,0],8289:[0,0,0],8290:[0,0,0],8291:[0,0,0],8292:[0,0,0],8407:[.714,-.516,.5],8450:[.702,.019,.722],8459:[.717,.036,.969,{ic:.272,sk:.333}],8460:[.666,.133,.72],8461:[.683,0,.778],8462:[.694,.011,.576,{sk:-.0278}],8463:[.695,.013,.54,{ic:.022}],8464:[.717,.314,1.052,{ic:.081,sk:.417}],8465:[.686,.026,.554],8466:[.717,.017,.874,{ic:.161,sk:.306}],8467:[.705,.02,.417,{sk:.111}],8469:[.683,.02,.722],8472:[.453,.216,.636,{sk:.111}],8473:[.683,0,.611],8474:[.701,.181,.778],8475:[.717,.017,.85,{ic:.037,sk:.194}],8476:[.686,.026,.828],8477:[.683,0,.722],8484:[.683,0,.667],8486:[.704,0,.722],8487:[.684,.022,.722],8488:[.729,.139,.602],8492:[.708,.028,.908,{ic:.02,sk:.194}],8493:[.685,.024,.613],8496:[.707,.008,.562,{ic:.156,sk:.139}],8497:[.735,.036,.895,{ic:.095,sk:.222}],8498:[.695,0,.556],8499:[.721,.05,1.08,{ic:.136,sk:.444}],8501:[.694,0,.611],8502:[.763,.021,.667,{ic:.02}],8503:[.764,.043,.444],8504:[.764,.043,.667],8513:[.705,.023,.639],8592:[.511,.011,1],8593:[.694,.193,.5],8594:[.511,.011,1],8595:[.694,.194,.5],8596:[.511,.011,1],8597:[.772,.272,.5],8598:[.72,.195,1],8599:[.72,.195,1],8600:[.695,.22,1],8601:[.695,.22,1],8602:[.437,-.06,1],8603:[.437,-.06,1],8606:[.417,-.083,1],8608:[.417,-.083,1],8610:[.417,-.083,1.111],8611:[.417,-.083,1.111],8614:[.511,.011,1],8617:[.511,.011,1.126],8618:[.511,.011,1.126],8619:[.575,.041,1],8620:[.575,.041,1],8621:[.417,-.083,1.389],8622:[.437,-.06,1],8624:[.722,0,.5],8625:[.722,0,.5],8630:[.461,0,1],8631:[.46,0,1],8634:[.65,.083,.778],8635:[.65,.083,.778],8636:[.511,-.23,1],8637:[.27,.011,1],8638:[.694,.194,.417],8639:[.694,.194,.417],8640:[.511,-.23,1],8641:[.27,.011,1],8642:[.694,.194,.417],8643:[.694,.194,.417],8644:[.667,0,1],8646:[.667,0,1],8647:[.583,.083,1],8648:[.694,.193,.833],8649:[.583,.083,1],8650:[.694,.194,.833],8651:[.514,.014,1],8652:[.671,.011,1],8653:[.534,.035,1],8654:[.534,.037,1],8655:[.534,.035,1],8656:[.525,.024,1],8657:[.694,.194,.611],8658:[.525,.024,1],8659:[.694,.194,.611],8660:[.526,.025,1],8661:[.772,.272,.611],8666:[.611,.111,1],8667:[.611,.111,1],8669:[.417,-.083,1],8672:[.437,-.064,1.334],8674:[.437,-.064,1.334],8704:[.694,.022,.556],8705:[.846,.021,.5],8706:[.715,.022,.531,{ic:.035,sk:.0833}],8707:[.694,0,.556],8708:[.716,.215,.556],8709:[.772,.078,.5],8710:[.716,0,.833],8711:[.683,.033,.833],8712:[.54,.04,.667],8713:[.716,.215,.667],8715:[.54,.04,.667],8716:[.716,.215,.667],8717:[.44,0,.429,{ic:.027}],8719:[.75,.25,.944],8720:[.75,.25,.944],8721:[.75,.25,1.056],8722:[.583,.082,.778],8723:[.5,.166,.778],8724:[.766,.093,.778],8725:[.75,.25,.5],8726:[.75,.25,.5],8727:[.465,-.035,.5],8728:[.444,-.055,.5],8729:[.444,-.055,.5],8730:[.8,.2,.833,{ic:.02}],8733:[.442,.011,.778],8734:[.442,.011,1],8736:[.694,0,.722],8737:[.714,.02,.722],8738:[.551,.051,.722],8739:[.75,.249,.278],8740:[.75,.252,.278,{ic:.019}],8741:[.75,.25,.5],8742:[.75,.25,.5,{ic:.018}],8743:[.598,.022,.667],8744:[.598,.022,.667],8745:[.598,.022,.667],8746:[.598,.022,.667],8747:[.716,.216,.417,{ic:.055}],8748:[.805,.306,.819,{ic:.138}],8749:[.805,.306,1.166,{ic:.138}],8750:[.805,.306,.472,{ic:.138}],8756:[.471,.082,.667],8757:[.471,.082,.667],8764:[.367,-.133,.778],8765:[.367,-.133,.778],8768:[.583,.083,.278],8769:[.467,-.032,.778],8770:[.463,-.034,.778],8771:[.464,-.036,.778],8772:[.716,.215,.778],8773:[.589,-.022,.778],8775:[.652,.155,.778],8776:[.483,-.055,.778],8777:[.716,.215,.778],8778:[.579,.039,.778],8781:[.484,-.016,.778],8782:[.492,-.008,.778],8783:[.492,-.133,.778],8784:[.67,-.133,.778],8785:[.609,.108,.778],8786:[.601,.101,.778],8787:[.601,.102,.778],8790:[.367,-.133,.778],8791:[.721,-.133,.778],8796:[.859,-.133,.778],8800:[.716,.215,.778],8801:[.464,-.036,.778],8802:[.716,.215,.778],8804:[.636,.138,.778],8805:[.636,.138,.778],8806:[.753,.175,.778],8807:[.753,.175,.778],8808:[.752,.286,.778],8809:[.752,.286,.778],8810:[.568,.067,1],8811:[.567,.067,1],8812:[.75,.25,.5],8813:[.716,.215,.778],8814:[.708,.209,.778],8815:[.708,.209,.778],8816:[.801,.303,.778],8817:[.801,.303,.778],8818:[.732,.228,.778],8819:[.732,.228,.778],8820:[.732,.228,.778],8821:[.732,.228,.778],8822:[.681,.253,.778],8823:[.681,.253,.778],8824:[.716,.253,.778],8825:[.716,.253,.778],8826:[.539,.041,.778],8827:[.539,.041,.778],8828:[.58,.153,.778],8829:[.58,.154,.778],8830:[.732,.228,.778],8831:[.732,.228,.778],8832:[.705,.208,.778],8833:[.705,.208,.778],8834:[.54,.04,.778],8835:[.54,.04,.778],8836:[.716,.215,.778],8837:[.716,.215,.778],8838:[.636,.138,.778],8839:[.636,.138,.778],8840:[.801,.303,.778],8841:[.801,.303,.778],8842:[.635,.241,.778],8843:[.635,.241,.778],8846:[.598,.022,.667],8847:[.539,.041,.778],8848:[.539,.041,.778],8849:[.636,.138,.778],8850:[.636,.138,.778],8851:[.598,0,.667],8852:[.598,0,.667],8853:[.583,.083,.778],8854:[.583,.083,.778],8855:[.583,.083,.778],8856:[.583,.083,.778],8857:[.583,.083,.778],8858:[.582,.082,.778],8859:[.582,.082,.778],8861:[.582,.082,.778],8862:[.689,0,.778],8863:[.689,0,.778],8864:[.689,0,.778],8865:[.689,0,.778],8866:[.694,0,.611],8867:[.694,0,.611],8868:[.668,0,.778],8869:[.668,0,.778],8872:[.75,.249,.867],8873:[.694,0,.722],8874:[.694,0,.889],8876:[.695,0,.611],8877:[.695,0,.611],8878:[.695,0,.722],8879:[.695,0,.722],8882:[.539,.041,.778],8883:[.539,.041,.778],8884:[.636,.138,.778],8885:[.636,.138,.778],8888:[.408,-.092,1.111],8890:[.431,.212,.556],8891:[.716,0,.611],8892:[.716,0,.611],8896:[.75,.249,.833],8897:[.75,.249,.833],8898:[.75,.249,.833],8899:[.75,.249,.833],8900:[.488,-.012,.5],8901:[.31,-.19,.278],8902:[.486,-.016,.5],8903:[.545,.044,.778],8904:[.505,.005,.9],8905:[.492,-.008,.778],8906:[.492,-.008,.778],8907:[.694,.022,.778],8908:[.694,.022,.778],8909:[.464,-.036,.778],8910:[.578,.021,.76],8911:[.578,.022,.76],8912:[.54,.04,.778],8913:[.54,.04,.778],8914:[.598,.022,.667],8915:[.598,.022,.667],8916:[.736,.022,.667],8918:[.541,.041,.778],8919:[.541,.041,.778],8920:[.568,.067,1.333],8921:[.568,.067,1.333],8922:[.886,.386,.778],8923:[.886,.386,.778],8926:[.734,0,.778],8927:[.734,0,.778],8928:[.801,.303,.778],8929:[.801,.303,.778],8930:[.716,.215,.778],8931:[.716,.215,.778],8934:[.73,.359,.778],8935:[.73,.359,.778],8936:[.73,.359,.778],8937:[.73,.359,.778],8938:[.706,.208,.778],8939:[.706,.208,.778],8940:[.802,.303,.778],8941:[.801,.303,.778],8942:[1.3,.03,.278],8943:[.31,-.19,1.172],8945:[1.52,-.1,1.282],8965:[.716,0,.611],8966:[.813,.097,.611],8968:[.75,.25,.444],8969:[.75,.25,.444],8970:[.75,.25,.444],8971:[.75,.25,.444],8988:[.694,-.306,.5],8989:[.694,-.306,.5],8990:[.366,.022,.5],8991:[.366,.022,.5],8994:[.388,-.122,1],8995:[.378,-.134,1],9001:[.75,.25,.389],9002:[.75,.25,.389],9136:[.744,.244,.412],9137:[.744,.244,.412],9168:[.602,0,.667],9416:[.709,.175,.902],9484:[.694,-.306,.5],9488:[.694,-.306,.5],9492:[.366,.022,.5],9496:[.366,.022,.5],9585:[.694,.195,.889],9586:[.694,.195,.889],9632:[.689,0,.778],9633:[.689,0,.778],9642:[.689,0,.778],9650:[.575,.02,.722],9651:[.716,0,.889],9652:[.575,.02,.722],9653:[.716,0,.889],9654:[.539,.041,.778],9656:[.539,.041,.778],9657:[.505,.005,.5],9660:[.576,.019,.722],9661:[.5,.215,.889],9662:[.576,.019,.722],9663:[.5,.215,.889],9664:[.539,.041,.778],9666:[.539,.041,.778],9667:[.505,.005,.5],9674:[.716,.132,.667],9711:[.715,.215,1],9723:[.689,0,.778],9724:[.689,0,.778],9733:[.694,.111,.944],9824:[.727,.13,.778],9825:[.716,.033,.778],9826:[.727,.162,.778],9827:[.726,.13,.778],9837:[.75,.022,.389],9838:[.734,.223,.389],9839:[.723,.223,.389],10003:[.706,.034,.833],10016:[.716,.022,.833],10072:[.75,.249,.278],10216:[.75,.25,.389],10217:[.75,.25,.389],10222:[.744,.244,.412],10223:[.744,.244,.412],10229:[.511,.011,1.609],10230:[.511,.011,1.638],10231:[.511,.011,1.859],10232:[.525,.024,1.609],10233:[.525,.024,1.638],10234:[.525,.024,1.858],10236:[.511,.011,1.638],10731:[.716,.132,.667],10744:[.716,.215,.778],10752:[.75,.25,1.111],10753:[.75,.25,1.111],10754:[.75,.25,1.111],10756:[.75,.249,.833],10758:[.75,.249,.833],10764:[.805,.306,1.638,{ic:.138}],10799:[.491,-.009,.778],10815:[.683,0,.75],10846:[.813,.097,.611],10877:[.636,.138,.778],10878:[.636,.138,.778],10885:[.762,.29,.778],10886:[.762,.29,.778],10887:[.635,.241,.778],10888:[.635,.241,.778],10889:[.761,.387,.778],10890:[.761,.387,.778],10891:[1.003,.463,.778],10892:[1.003,.463,.778],10901:[.636,.138,.778],10902:[.636,.138,.778],10927:[.636,.138,.778],10928:[.636,.138,.778],10933:[.752,.286,.778],10934:[.752,.286,.778],10935:[.761,.294,.778],10936:[.761,.294,.778],10937:[.761,.337,.778],10938:[.761,.337,.778],10949:[.753,.215,.778],10950:[.753,.215,.778],10955:[.783,.385,.778],10956:[.783,.385,.778],12296:[.75,.25,.389],12297:[.75,.25,.389],57350:[.43,.023,.222,{ic:.018}],57351:[.431,.024,.389,{ic:.018}],57352:[.605,.085,.778],57353:[.434,.006,.667,{ic:.067}],57356:[.752,.284,.778],57357:[.752,.284,.778],57358:[.919,.421,.778],57359:[.801,.303,.778],57360:[.801,.303,.778],57361:[.919,.421,.778],57366:[.828,.33,.778],57367:[.752,.332,.778],57368:[.828,.33,.778],57369:[.752,.333,.778],57370:[.634,.255,.778],57371:[.634,.254,.778],119808:[.698,0,.869],119809:[.686,0,.818],119810:[.697,.011,.831],119811:[.686,0,.882],119812:[.68,0,.756],119813:[.68,0,.724],119814:[.697,.01,.904],119815:[.686,0,.9],119816:[.686,0,.436],119817:[.686,.011,.594],119818:[.686,0,.901],119819:[.686,0,.692],119820:[.686,0,1.092],119821:[.686,0,.9],119822:[.696,.01,.864],119823:[.686,0,.786],119824:[.696,.193,.864],119825:[.686,.011,.862],119826:[.697,.011,.639],119827:[.675,0,.8],119828:[.686,.011,.885],119829:[.686,.007,.869],119830:[.686,.007,1.189],119831:[.686,0,.869],119832:[.686,0,.869],119833:[.686,0,.703],119834:[.453,.006,.559],119835:[.694,.006,.639],119836:[.453,.006,.511],119837:[.694,.006,.639],119838:[.452,.006,.527],119839:[.7,0,.351,{ic:.101}],119840:[.455,.201,.575],119841:[.694,0,.639],119842:[.695,0,.319],119843:[.695,.2,.351],119844:[.694,0,.607],119845:[.694,0,.319],119846:[.45,0,.958],119847:[.45,0,.639],119848:[.452,.005,.575],119849:[.45,.194,.639],119850:[.45,.194,.607],119851:[.45,0,.474],119852:[.453,.006,.454],119853:[.635,.005,.447],119854:[.45,.006,.639],119855:[.444,0,.607],119856:[.444,0,.831],119857:[.444,0,.607],119858:[.444,.2,.607],119859:[.444,0,.511],119860:[.716,0,.75,{sk:.139}],119861:[.683,0,.759,{sk:.0833}],119862:[.705,.022,.715,{ic:.045,sk:.0833}],119863:[.683,0,.828,{sk:.0556}],119864:[.68,0,.738,{ic:.026,sk:.0833}],119865:[.68,0,.643,{ic:.106,sk:.0833}],119866:[.705,.022,.786,{sk:.0833}],119867:[.683,0,.831,{ic:.057,sk:.0556}],119868:[.683,0,.44,{ic:.064,sk:.111}],119869:[.683,.022,.555,{ic:.078,sk:.167}],119870:[.683,0,.849,{ic:.04,sk:.0556}],119871:[.683,0,.681,{sk:.0278}],119872:[.683,0,.97,{ic:.081,sk:.0833}],119873:[.683,0,.803,{ic:.085,sk:.0833}],119874:[.704,.022,.763,{sk:.0833}],119875:[.683,0,.642,{ic:.109,sk:.0833}],119876:[.704,.194,.791,{sk:.0833}],119877:[.683,.021,.759,{sk:.0833}],119878:[.705,.022,.613,{ic:.032,sk:.0833}],119879:[.677,0,.584,{ic:.12,sk:.0833}],119880:[.683,.022,.683,{ic:.084,sk:.0278}],119881:[.683,.022,.583,{ic:.186}],119882:[.683,.022,.944,{ic:.104}],119883:[.683,0,.828,{ic:.024,sk:.0833}],119884:[.683,0,.581,{ic:.182}],119885:[.683,0,.683,{ic:.04,sk:.0833}],119886:[.441,.01,.529],119887:[.694,.011,.429],119888:[.442,.011,.433,{sk:.0556}],119889:[.694,.01,.52,{sk:.167}],119890:[.442,.011,.466,{sk:.0556}],119891:[.705,.205,.49,{ic:.06,sk:.167}],119892:[.442,.205,.477,{sk:.0278}],119894:[.661,.011,.345],119895:[.661,.204,.412],119896:[.694,.011,.521],119897:[.694,.011,.298,{sk:.0833}],119898:[.442,.011,.878],119899:[.442,.011,.6],119900:[.441,.011,.485,{sk:.0556}],119901:[.442,.194,.503,{sk:.0833}],119902:[.442,.194,.446,{ic:.014,sk:.0833}],119903:[.442,.011,.451,{sk:.0556}],119904:[.442,.01,.469,{sk:.0556}],119905:[.626,.011,.361,{sk:.0833}],119906:[.442,.011,.572,{sk:.0278}],119907:[.443,.011,.485,{sk:.0278}],119908:[.443,.011,.716,{sk:.0833}],119909:[.442,.011,.572,{sk:.0278}],119910:[.442,.205,.49,{sk:.0556}],119911:[.442,.011,.465,{sk:.0556}],119912:[.711,0,.869,{sk:.16}],119913:[.686,0,.866,{sk:.0958}],119914:[.703,.017,.817,{ic:.038,sk:.0958}],119915:[.686,0,.938,{sk:.0639}],119916:[.68,0,.81,{ic:.015,sk:.0958}],119917:[.68,0,.689,{ic:.12,sk:.0958}],119918:[.703,.016,.887,{sk:.0958}],119919:[.686,0,.982,{ic:.045,sk:.0639}],119920:[.686,0,.511,{ic:.062,sk:.128}],119921:[.686,.017,.631,{ic:.063,sk:.192}],119922:[.686,0,.971,{ic:.032,sk:.0639}],119923:[.686,0,.756,{sk:.0319}],119924:[.686,0,1.142,{ic:.077,sk:.0958}],119925:[.686,0,.95,{ic:.077,sk:.0958}],119926:[.703,.017,.837,{sk:.0958}],119927:[.686,0,.723,{ic:.124,sk:.0958}],119928:[.703,.194,.869,{sk:.0958}],119929:[.686,.017,.872,{sk:.0958}],119930:[.703,.017,.693,{ic:.021,sk:.0958}],119931:[.675,0,.637,{ic:.135,sk:.0958}],119932:[.686,.016,.8,{ic:.077,sk:.0319}],119933:[.686,.016,.678,{ic:.208}],119934:[.686,.017,1.093,{ic:.114}],119935:[.686,0,.947,{sk:.0958}],119936:[.686,0,.675,{ic:.201}],119937:[.686,0,.773,{ic:.032,sk:.0958}],119938:[.452,.008,.633],119939:[.694,.008,.521],119940:[.451,.008,.513,{sk:.0639}],119941:[.694,.008,.61,{sk:.192}],119942:[.452,.008,.554,{sk:.0639}],119943:[.701,.201,.568,{ic:.056,sk:.192}],119944:[.452,.202,.545,{sk:.0319}],119945:[.694,.008,.668,{sk:-.0319}],119946:[.694,.008,.405],119947:[.694,.202,.471],119948:[.694,.008,.604],119949:[.694,.008,.348,{sk:.0958}],119950:[.452,.008,1.032],119951:[.452,.008,.713],119952:[.452,.008,.585,{sk:.0639}],119953:[.452,.194,.601,{sk:.0958}],119954:[.452,.194,.542,{sk:.0958}],119955:[.452,.008,.529,{sk:.0639}],119956:[.451,.008,.531,{sk:.0639}],119957:[.643,.007,.415,{sk:.0958}],119958:[.452,.008,.681,{sk:.0319}],119959:[.453,.008,.567,{sk:.0319}],119960:[.453,.008,.831,{sk:.0958}],119961:[.452,.008,.659,{sk:.0319}],119962:[.452,.202,.59,{sk:.0639}],119963:[.452,.008,.555,{sk:.0639}],119964:[.717,.008,.803,{ic:.213,sk:.389}],119966:[.728,.026,.666,{ic:.153,sk:.278}],119967:[.708,.031,.774,{ic:.081,sk:.111}],119970:[.717,.037,.61,{ic:.128,sk:.25}],119973:[.717,.314,1.052,{ic:.081,sk:.417}],119974:[.717,.037,.914,{ic:.29,sk:.361}],119977:[.726,.036,.902,{ic:.306,sk:.389}],119978:[.707,.008,.738,{ic:.067,sk:.167}],119979:[.716,.037,1.013,{ic:.018,sk:.222}],119980:[.717,.017,.883,{sk:.278}],119982:[.708,.036,.868,{ic:.148,sk:.333}],119983:[.735,.037,.747,{ic:.249,sk:.222}],119984:[.717,.017,.8,{ic:.16,sk:.25}],119985:[.717,.017,.622,{ic:.228,sk:.222}],119986:[.717,.017,.805,{ic:.221,sk:.25}],119987:[.717,.017,.944,{ic:.187,sk:.278}],119988:[.716,.017,.71,{ic:.249,sk:.194}],119989:[.717,.016,.821,{ic:.211,sk:.306}],120068:[.696,.026,.718],120069:[.691,.027,.884],120071:[.685,.027,.832],120072:[.685,.024,.663],120073:[.686,.153,.611],120074:[.69,.026,.785],120077:[.686,.139,.552],120078:[.68,.027,.668,{ic:.014}],120079:[.686,.026,.666],120080:[.692,.027,1.05],120081:[.686,.025,.832],120082:[.729,.027,.827],120083:[.692,.218,.828],120084:[.729,.069,.827],120086:[.692,.027,.829],120087:[.701,.027,.669],120088:[.697,.027,.646,{ic:.019}],120089:[.686,.026,.831],120090:[.686,.027,1.046],120091:[.688,.027,.719],120092:[.686,.218,.833],120094:[.47,.035,.5],120095:[.685,.031,.513],120096:[.466,.029,.389],120097:[.609,.033,.499],120098:[.467,.03,.401],120099:[.681,.221,.326],120100:[.47,.209,.504],120101:[.688,.205,.521],120102:[.673,.02,.279],120103:[.672,.208,.281],120104:[.689,.025,.389],120105:[.685,.02,.28],120106:[.475,.026,.767],120107:[.475,.022,.527],120108:[.48,.028,.489],120109:[.541,.212,.5],120110:[.479,.219,.489],120111:[.474,.021,.389],120112:[.478,.029,.443],120113:[.64,.02,.333,{ic:.015}],120114:[.474,.023,.517],120115:[.53,.028,.512],120116:[.532,.028,.774],120117:[.472,.188,.389],120118:[.528,.218,.499],120119:[.471,.214,.391],120120:[.701,0,.722],120121:[.683,0,.667],120123:[.683,0,.722],120124:[.683,0,.667],120125:[.683,0,.611],120126:[.702,.019,.778],120128:[.683,0,.389],120129:[.683,.077,.5],120130:[.683,0,.778],120131:[.683,0,.667],120132:[.683,0,.944],120134:[.701,.019,.778],120138:[.702,.012,.556],120139:[.683,0,.667],120140:[.683,.019,.722],120141:[.683,.02,.722],120142:[.683,.019,1],120143:[.683,0,.722],120144:[.683,0,.722],120172:[.686,.031,.847],120173:[.684,.031,1.044],120174:[.676,.032,.723],120175:[.683,.029,.982],120176:[.686,.029,.783],120177:[.684,.146,.722],120178:[.687,.029,.927],120179:[.683,.126,.851],120180:[.681,.025,.655],120181:[.68,.141,.652],120182:[.681,.026,.789,{ic:.017}],120183:[.683,.028,.786],120184:[.683,.032,1.239],120185:[.679,.03,.983],120186:[.726,.03,.976],120187:[.688,.223,.977],120188:[.726,.083,.976],120189:[.688,.028,.978],120190:[.685,.031,.978],120191:[.686,.03,.79,{ic:.012}],120192:[.688,.039,.851,{ic:.02}],120193:[.685,.029,.982],120194:[.683,.03,1.235],120195:[.681,.035,.849],120196:[.688,.214,.984],120197:[.677,.148,.711],120198:[.472,.032,.603],120199:[.69,.032,.59],120200:[.473,.026,.464],120201:[.632,.028,.589],120202:[.471,.027,.472],120203:[.687,.222,.388],120204:[.472,.208,.595],120205:[.687,.207,.615],120206:[.686,.025,.331],120207:[.682,.203,.332],120208:[.682,.025,.464],120209:[.681,.024,.337],120210:[.476,.031,.921],120211:[.473,.028,.654],120212:[.482,.034,.609],120213:[.557,.207,.604],120214:[.485,.211,.596],120215:[.472,.026,.46],120216:[.479,.034,.523],120217:[.648,.027,.393,{ic:.014}],120218:[.472,.032,.589,{ic:.014}],120219:[.546,.027,.604],120220:[.549,.032,.918],120221:[.471,.188,.459],120222:[.557,.221,.589],120223:[.471,.214,.461],120224:[.694,0,.667],120225:[.694,0,.667],120226:[.705,.011,.639],120227:[.694,0,.722],120228:[.691,0,.597],120229:[.691,0,.569],120230:[.704,.011,.667],120231:[.694,0,.708],120232:[.694,0,.278],120233:[.694,.022,.472],120234:[.694,0,.694],120235:[.694,0,.542],120236:[.694,0,.875],120237:[.694,0,.708],120238:[.715,.022,.736],120239:[.694,0,.639],120240:[.715,.125,.736],120241:[.694,0,.646],120242:[.716,.022,.556],120243:[.688,0,.681],120244:[.694,.022,.688],120245:[.694,0,.667],120246:[.694,0,.944],120247:[.694,0,.667],120248:[.694,0,.667],120249:[.694,0,.611],120250:[.46,.01,.481],120251:[.694,.011,.517],120252:[.46,.01,.444],120253:[.694,.01,.517],120254:[.461,.01,.444],120255:[.705,0,.306,{ic:.041}],120256:[.455,.206,.5],120257:[.694,0,.517],120258:[.68,0,.239],120259:[.68,.205,.267],120260:[.694,0,.489],120261:[.694,0,.239],120262:[.455,0,.794],120263:[.455,0,.517],120264:[.46,.01,.5],120265:[.455,.194,.517],120266:[.455,.194,.517],120267:[.455,0,.342],120268:[.46,.01,.383],120269:[.571,.01,.361],120270:[.444,.01,.517],120271:[.444,0,.461],120272:[.444,0,.683],120273:[.444,0,.461],120274:[.444,.204,.461],120275:[.444,0,.435],120276:[.694,0,.733],120277:[.694,0,.733],120278:[.704,.011,.703],120279:[.694,0,.794],120280:[.691,0,.642],120281:[.691,0,.611],120282:[.705,.011,.733],120283:[.694,0,.794],120284:[.694,0,.331],120285:[.694,.022,.519],120286:[.694,0,.764],120287:[.694,0,.581],120288:[.694,0,.978],120289:[.694,0,.794],120290:[.716,.022,.794],120291:[.694,0,.703],120292:[.716,.106,.794],120293:[.694,0,.703],120294:[.716,.022,.611],120295:[.688,0,.733],120296:[.694,.022,.764],120297:[.694,0,.733],120298:[.694,0,1.039],120299:[.694,0,.733],120300:[.694,0,.733],120301:[.694,0,.672],120302:[.475,.011,.525],120303:[.694,.01,.561],120304:[.475,.011,.489],120305:[.694,.011,.561],120306:[.474,.01,.511],120307:[.705,0,.336,{ic:.045}],120308:[.469,.206,.55],120309:[.694,0,.561],120310:[.695,0,.256],120311:[.695,.205,.286],120312:[.694,0,.531],120313:[.694,0,.256],120314:[.469,0,.867],120315:[.468,0,.561],120316:[.474,.011,.55],120317:[.469,.194,.561],120318:[.469,.194,.561],120319:[.469,0,.372],120320:[.474,.01,.422],120321:[.589,.01,.404],120322:[.458,.011,.561],120323:[.458,0,.5],120324:[.458,0,.744],120325:[.458,0,.5],120326:[.458,.205,.5],120327:[.458,0,.476],120328:[.694,0,.667],120329:[.694,0,.667,{ic:.029}],120330:[.705,.01,.639,{ic:.08}],120331:[.694,0,.722,{ic:.025}],120332:[.691,0,.597,{ic:.091}],120333:[.691,0,.569,{ic:.104}],120334:[.705,.011,.667,{ic:.063}],120335:[.694,0,.708,{ic:.06}],120336:[.694,0,.278,{ic:.06}],120337:[.694,.022,.472,{ic:.063}],120338:[.694,0,.694,{ic:.091}],120339:[.694,0,.542],120340:[.694,0,.875,{ic:.054}],120341:[.694,0,.708,{ic:.058}],120342:[.716,.022,.736,{ic:.027}],120343:[.694,0,.639,{ic:.051}],120344:[.716,.125,.736,{ic:.027}],120345:[.694,0,.646,{ic:.052}],120346:[.716,.022,.556,{ic:.053}],120347:[.688,0,.681,{ic:.109}],120348:[.694,.022,.688,{ic:.059}],120349:[.694,0,.667,{ic:.132}],120350:[.694,0,.944,{ic:.132}],120351:[.694,0,.667,{ic:.091}],120352:[.694,0,.667,{ic:.143}],120353:[.694,0,.611,{ic:.091}],120354:[.461,.01,.481],120355:[.694,.011,.517,{ic:.022}],120356:[.46,.011,.444,{ic:.055}],120357:[.694,.01,.517,{ic:.071}],120358:[.46,.011,.444,{ic:.028}],120359:[.705,0,.306,{ic:.188}],120360:[.455,.206,.5,{ic:.068}],120361:[.694,0,.517],120362:[.68,0,.239,{ic:.076}],120363:[.68,.204,.267,{ic:.069}],120364:[.694,0,.489,{ic:.054}],120365:[.694,0,.239,{ic:.072}],120366:[.455,0,.794],120367:[.454,0,.517],120368:[.461,.011,.5,{ic:.023}],120369:[.455,.194,.517,{ic:.021}],120370:[.455,.194,.517,{ic:.021}],120371:[.455,0,.342,{ic:.082}],120372:[.461,.011,.383,{ic:.053}],120373:[.571,.011,.361,{ic:.049}],120374:[.444,.01,.517,{ic:.02}],120375:[.444,0,.461,{ic:.079}],120376:[.444,0,.683,{ic:.079}],120377:[.444,0,.461,{ic:.076}],120378:[.444,.205,.461,{ic:.079}],120379:[.444,0,.435,{ic:.059}],120432:[.623,0,.525],120433:[.611,0,.525],120434:[.622,.011,.525],120435:[.611,0,.525],120436:[.611,0,.525],120437:[.611,0,.525],120438:[.622,.011,.525],120439:[.611,0,.525],120440:[.611,0,.525],120441:[.611,.011,.525],120442:[.611,0,.525],120443:[.611,0,.525],120444:[.611,0,.525],120445:[.611,0,.525],120446:[.621,.01,.525],120447:[.611,0,.525],120448:[.621,.138,.525],120449:[.611,.011,.525],120450:[.622,.011,.525],120451:[.611,0,.525],120452:[.611,.011,.525],120453:[.611,.007,.525],120454:[.611,.007,.525],120455:[.611,0,.525],120456:[.611,0,.525],120457:[.611,0,.525],120458:[.439,.006,.525],120459:[.611,.006,.525],120460:[.44,.006,.525],120461:[.611,.006,.525],120462:[.44,.006,.525],120463:[.617,0,.525],120464:[.442,.229,.525],120465:[.611,0,.525],120466:[.612,0,.525],120467:[.612,.228,.525],120468:[.611,0,.525],120469:[.611,0,.525],120470:[.436,0,.525,{ic:.011}],120471:[.436,0,.525],120472:[.44,.006,.525],120473:[.437,.221,.525],120474:[.437,.221,.525,{ic:.02}],120475:[.437,0,.525],120476:[.44,.006,.525],120477:[.554,.006,.525],120478:[.431,.005,.525],120479:[.431,0,.525],120480:[.431,0,.525],120481:[.431,0,.525],120482:[.431,.228,.525],120483:[.431,0,.525],120488:[.698,0,.869],120489:[.686,0,.818],120490:[.68,0,.692],120491:[.698,0,.958],120492:[.68,0,.756],120493:[.686,0,.703],120494:[.686,0,.9],120495:[.696,.01,.894],120496:[.686,0,.436],120497:[.686,0,.901],120498:[.698,0,.806],120499:[.686,0,1.092],120500:[.686,0,.9],120501:[.675,0,.767],120502:[.696,.01,.864],120503:[.68,0,.9],120504:[.686,0,.786],120506:[.686,0,.831],120507:[.675,0,.8],120508:[.697,0,.894],120509:[.686,0,.831],120510:[.686,0,.869],120511:[.686,0,.894],120512:[.696,0,.831],120513:[.686,.024,.958],120546:[.716,0,.75,{sk:.139}],120547:[.683,0,.759,{sk:.0833}],120548:[.68,0,.615,{ic:.106,sk:.0833}],120549:[.716,0,.833,{sk:.167}],120550:[.68,0,.738,{ic:.026,sk:.0833}],120551:[.683,0,.683,{ic:.04,sk:.0833}],120552:[.683,0,.831,{ic:.057,sk:.0556}],120553:[.704,.022,.763,{sk:.0833}],120554:[.683,0,.44,{ic:.064,sk:.111}],120555:[.683,0,.849,{ic:.04,sk:.0556}],120556:[.716,0,.694,{sk:.167}],120557:[.683,0,.97,{ic:.081,sk:.0833}],120558:[.683,0,.803,{ic:.085,sk:.0833}],120559:[.677,0,.742,{ic:.035,sk:.0833}],120560:[.704,.022,.763,{sk:.0833}],120561:[.68,0,.831,{ic:.056,sk:.0556}],120562:[.683,0,.642,{ic:.109,sk:.0833}],120564:[.683,0,.78,{ic:.026,sk:.0833}],120565:[.677,0,.584,{ic:.12,sk:.0833}],120566:[.705,0,.583,{ic:.117,sk:.0556}],120567:[.683,0,.667,{sk:.0833}],120568:[.683,0,.828,{ic:.024,sk:.0833}],120569:[.683,0,.612,{ic:.08,sk:.0556}],120570:[.704,0,.772,{ic:.014,sk:.0833}],120572:[.442,.011,.64,{sk:.0278}],120573:[.705,.194,.566,{sk:.0833}],120574:[.441,.216,.518,{ic:.025}],120575:[.717,.01,.444,{sk:.0556}],120576:[.452,.022,.466,{sk:.0833}],120577:[.704,.204,.438,{ic:.033,sk:.0833}],120578:[.442,.216,.497,{sk:.0556}],120579:[.705,.01,.469,{sk:.0833}],120580:[.442,.01,.354,{sk:.0556}],120581:[.442,.011,.576],120582:[.694,.012,.583],120583:[.442,.216,.603,{sk:.0278}],120584:[.442,0,.494,{ic:.036,sk:.0278}],120585:[.704,.205,.438,{sk:.111}],120586:[.441,.011,.485,{sk:.0556}],120587:[.431,.011,.57],120588:[.442,.216,.517,{sk:.0833}],120589:[.442,.107,.363,{ic:.042,sk:.0833}],120590:[.431,.011,.571],120591:[.431,.013,.437,{ic:.08,sk:.0278}],120592:[.443,.01,.54,{sk:.0278}],120593:[.442,.218,.654,{sk:.0833}],120594:[.442,.204,.626,{sk:.0556}],120595:[.694,.205,.651,{sk:.111}],120596:[.443,.011,.622],120597:[.715,.022,.531,{ic:.035,sk:.0833}],120598:[.431,.011,.406,{sk:.0556}],120599:[.705,.011,.591,{sk:.0833}],120600:[.434,.006,.667,{ic:.067}],120601:[.694,.205,.596,{sk:.0833}],120602:[.442,.194,.517,{sk:.0833}],120603:[.431,.01,.828],120604:[.711,0,.869,{sk:.16}],120605:[.686,0,.866,{sk:.0958}],120606:[.68,0,.657,{ic:.12,sk:.0958}],120607:[.711,0,.958,{sk:.192}],120608:[.68,0,.81,{ic:.015,sk:.0958}],120609:[.686,0,.773,{ic:.032,sk:.0958}],120610:[.686,0,.982,{ic:.045,sk:.0639}],120611:[.702,.017,.867,{sk:.0958}],120612:[.686,0,.511,{ic:.062,sk:.128}],120613:[.686,0,.971,{ic:.032,sk:.0639}],120614:[.711,0,.806,{sk:.192}],120615:[.686,0,1.142,{ic:.077,sk:.0958}],120616:[.686,0,.95,{ic:.077,sk:.0958}],120617:[.675,0,.841,{ic:.026,sk:.0958}],120618:[.703,.017,.837,{sk:.0958}],120619:[.68,0,.982,{ic:.044,sk:.0639}],120620:[.686,0,.723,{ic:.124,sk:.0958}],120622:[.686,0,.885,{ic:.017,sk:.0958}],120623:[.675,0,.637,{ic:.135,sk:.0958}],120624:[.703,0,.671,{ic:.131,sk:.0639}],120625:[.686,0,.767,{sk:.0958}],120626:[.686,0,.947,{sk:.0958}],120627:[.686,0,.714,{ic:.076,sk:.0639}],120628:[.703,0,.879,{sk:.0958}],120630:[.452,.008,.761,{sk:.0319}],120631:[.701,.194,.66,{sk:.0958}],120632:[.451,.211,.59,{ic:.027}],120633:[.725,.008,.522,{sk:.0639}],120634:[.461,.017,.529,{sk:.0958}],120635:[.711,.202,.508,{ic:.013,sk:.0958}],120636:[.452,.211,.6,{sk:.0639}],120637:[.702,.008,.562,{sk:.0958}],120638:[.452,.008,.412,{sk:.0639}],120639:[.452,.008,.668],120640:[.694,.013,.671],120641:[.452,.211,.708,{sk:.0319}],120642:[.452,0,.577,{ic:.031,sk:.0319}],120643:[.711,.201,.508,{sk:.128}],120644:[.452,.008,.585,{sk:.0639}],120645:[.444,.008,.682],120646:[.451,.211,.612,{sk:.0958}],120647:[.451,.105,.424,{ic:.033,sk:.0958}],120648:[.444,.008,.686],120649:[.444,.013,.521,{ic:.089,sk:.0319}],120650:[.453,.008,.631,{sk:.0319}],120651:[.452,.216,.747,{sk:.0958}],120652:[.452,.201,.718,{sk:.0639}],120653:[.694,.202,.758,{sk:.128}],120654:[.453,.008,.718],120655:[.71,.017,.628,{ic:.029,sk:.0958}],120656:[.444,.007,.483,{sk:.0639}],120657:[.701,.008,.692,{sk:.0958}],120658:[.434,.006,.667,{ic:.067}],120659:[.694,.202,.712,{sk:.0958}],120660:[.451,.194,.612,{sk:.0958}],120661:[.444,.008,.975],120662:[.694,0,.733],120663:[.694,0,.733],120664:[.691,0,.581],120665:[.694,0,.917],120666:[.691,0,.642],120667:[.694,0,.672],120668:[.694,0,.794],120669:[.716,.022,.856],120670:[.694,0,.331],120671:[.694,0,.764],120672:[.694,0,.672],120673:[.694,0,.978],120674:[.694,0,.794],120675:[.688,0,.733],120676:[.716,.022,.794],120677:[.691,0,.794],120678:[.694,0,.703],120680:[.694,0,.794],120681:[.688,0,.733],120682:[.715,0,.856],120683:[.694,0,.794],120684:[.694,0,.733],120685:[.694,0,.856],120686:[.716,0,.794],120782:[.654,.01,.575],120783:[.655,0,.575],120784:[.654,0,.575],120785:[.655,.011,.575],120786:[.656,0,.575],120787:[.655,.011,.575],120788:[.655,.011,.575],120789:[.676,.011,.575],120790:[.654,.011,.575],120791:[.654,.011,.575],120802:[.678,.022,.5],120803:[.678,0,.5],120804:[.677,0,.5],120805:[.678,.022,.5],120806:[.656,0,.5],120807:[.656,.021,.5],120808:[.677,.022,.5],120809:[.656,.011,.5],120810:[.678,.022,.5],120811:[.677,.022,.5],120812:[.715,.022,.55],120813:[.716,0,.55],120814:[.716,0,.55],120815:[.716,.022,.55],120816:[.694,0,.55],120817:[.694,.022,.55],120818:[.716,.022,.55],120819:[.695,.011,.55],120820:[.715,.022,.55],120821:[.716,.022,.55],120822:[.621,.01,.525],120823:[.622,0,.525],120824:[.622,0,.525],120825:[.622,.011,.525],120826:[.624,0,.525],120827:[.611,.01,.525],120828:[.622,.011,.525],120829:[.627,.01,.525],120830:[.621,.01,.525],120831:[.622,.011,.525]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerifBoldItalic=void 0;var r=Q(6),T=Q(238);e.sansSerifBoldItalic=r.AddPaths(T.sansSerifBoldItalic,{305:\"54 431Q63 458 102 458H127H149Q192 458 199 433Q201 427 201 229T199 25Q190 0 149 0H125L81 1Q61 7 54 28V431\",567:\"-38 -84Q-36 -84 -14 -95T33 -106H38Q70 -103 78 -86Q83 -78 83 -49T84 180Q84 427 86 433Q93 458 136 458H158H180Q201 458 209 456T225 443Q230 436 231 418Q232 397 232 313V183V124V40Q232 -55 228 -87T203 -147Q166 -205 78 -205Q31 -205 -20 -189T-71 -159Q-71 -156 -59 -123Q-50 -96 -47 -91T-38 -84\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerifBoldItalic=void 0,e.sansSerifBoldItalic={305:[.458,0,.256],567:[.458,.205,.286]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerifBold=void 0;var r=Q(6),T=Q(240);e.sansSerifBold=r.AddPaths(T.sansSerifBold,{33:\"111 669Q111 680 111 682T113 689T121 693T137 694H184H249Q255 686 256 681Q244 220 239 213Q236 208 229 208T183 207T137 207T127 213T118 431T111 669ZM110 71V95Q110 137 136 144Q140 146 183 146H200Q246 146 254 121Q256 115 256 73V51Q256 9 230 2Q225 0 181 0L138 1Q121 7 113 21L111 28L110 71\",34:\"38 687Q42 693 45 693Q46 694 111 694H176Q179 690 183 687V556L144 501Q139 494 134 486T126 474T120 465T114 457T110 451T106 447T102 445T98 443T94 443T89 442H73H62Q37 442 37 453Q37 458 55 501T74 546Q74 548 59 548L44 549L38 555V687ZM275 687Q279 693 282 693Q283 694 348 694H413Q416 690 420 687V556L381 501Q376 494 371 486T363 474T357 465T351 457T347 451T343 447T339 445T335 443T331 443T326 442H310H299Q274 442 274 453Q274 458 292 501T311 546Q311 548 296 548L281 549L275 555V687\",35:\"61 365Q61 370 62 375T65 383T69 390T74 395T80 399T85 403T90 406L94 407H344L381 536Q418 668 426 680Q431 687 445 692Q451 694 457 694Q477 694 488 682T500 651Q500 645 466 528T431 409Q431 407 504 407H577L609 521Q651 668 656 675Q669 693 691 693Q710 693 721 680T733 651Q733 645 699 528T664 409Q664 407 743 407H823L827 405Q831 403 834 402T841 397T848 389T853 379T855 365Q855 337 823 324L731 323H639L619 253Q599 181 598 180V177H823L827 175Q831 173 834 172T841 167T848 159T853 149T855 135Q855 107 823 94L698 93H573L540 -21Q498 -168 493 -175Q480 -193 458 -193Q439 -193 428 -180T416 -151Q416 -144 450 -27T485 91Q485 93 412 93H340L307 -21Q265 -168 260 -175Q247 -193 225 -193Q206 -193 195 -180T183 -151Q183 -144 217 -27T252 91Q252 93 173 93L94 94Q61 105 61 135Q61 140 62 145T65 153T69 160T74 165T80 169T85 173T90 176L94 177H185L277 178L297 248L318 320V323H206L94 324Q61 335 61 365ZM551 320V323H479Q406 323 405 322Q404 319 385 249T365 178T438 177L510 178L530 248L551 320\",36:\"231 712L232 716Q232 719 232 722T234 729T239 736T246 743T256 748T271 750Q318 750 318 711V703Q393 692 451 656Q469 645 470 640Q470 635 461 587L453 537Q445 529 442 529Q438 529 424 540T384 565T330 585Q328 585 325 585T320 586L318 587V434Q322 433 333 429T350 424T365 418T382 409T399 397T419 380Q488 313 488 213Q488 24 334 -5L318 -8V-17Q318 -56 279 -56H272Q253 -56 243 -46T232 -30T231 -18V-8H224Q170 2 127 20T68 50T49 67Q49 71 58 122T68 176Q71 182 79 182Q83 182 98 169T145 138T216 110Q228 108 229 108H231V288Q167 299 114 356T61 496Q61 537 70 570T94 624T126 661T162 684T195 696T219 701L228 702H231V712ZM231 521Q231 583 230 583Q226 582 220 579T204 561T193 521Q193 491 212 472Q226 458 230 458Q231 458 231 521ZM318 112Q356 131 356 187Q356 237 318 263V112\",37:\"61 549Q61 733 218 749Q220 749 228 749T241 750Q286 750 321 735T369 708T389 683Q422 634 422 548V538Q422 519 420 501T408 453T381 401T328 364T243 347Q61 347 61 549ZM292 549Q292 663 242 663Q221 663 211 648T198 615T196 566V548Q196 471 206 454Q218 434 242 434Q292 434 292 549ZM243 -55Q223 -55 212 -42T201 -13Q201 -2 207 7Q209 11 480 371T758 738Q770 750 788 750Q805 750 817 738T830 709Q830 694 820 681L544 315Q273 -43 269 -47Q258 -55 243 -55ZM606 146Q606 330 763 346Q764 346 773 346T786 347Q831 347 866 332T914 305T934 280Q966 233 966 146V135Q966 115 964 97T952 49T925 -2T872 -40T788 -56Q606 -56 606 146ZM742 146V132Q742 107 743 93T748 62T762 39T787 31Q819 31 832 79Q837 97 837 146Q837 260 787 260Q767 260 757 246T744 214T742 169V146\",38:\"757 117Q762 117 769 110V3Q759 -7 718 -14T641 -22T571 -15T518 1T477 19T453 31L437 23Q350 -19 257 -22Q158 -22 103 30T47 155Q47 188 57 216T87 263T119 292T151 313L182 333L187 336L181 349Q150 431 150 506Q150 605 211 660T347 716Q417 716 471 668T526 543Q526 517 518 495T471 432T360 343L342 330Q342 327 358 306T402 250T458 189L467 181Q518 225 556 289T607 395L620 437Q622 443 630 443Q631 443 679 430Q718 420 725 418T733 409Q733 402 722 365T670 255T573 123Q562 111 563 111Q589 94 644 94Q678 94 703 100T740 111T757 117ZM397 544Q397 573 384 601T346 629Q320 629 299 607T277 538Q277 484 295 429Q301 413 301 412Q302 409 309 415Q397 476 397 544ZM227 258Q197 228 197 177Q197 150 207 126T234 95Q242 93 251 93Q288 93 337 107L349 110L328 131Q266 196 234 248L227 258\",39:\"81 687Q85 693 88 693Q89 694 154 694H219Q222 690 226 687V556L187 501Q182 494 177 486T169 474T163 465T157 457T153 451T149 447T145 445T141 443T137 443T132 442H116H105Q80 442 80 453Q80 458 98 501T117 546Q117 548 102 548L87 549L81 555V687\",40:\"79 250Q79 352 100 441T152 585T213 678T266 733L287 749Q288 750 324 750H359Q366 741 366 738Q366 734 356 721T329 682T296 623T262 531T238 407Q230 346 230 250Q230 142 244 55T278 -82T318 -165T352 -215T366 -238Q366 -242 359 -249H286L277 -242Q79 -74 79 250\",41:\"61 737Q61 750 85 750H106H141L150 742Q348 574 348 250T150 -242L141 -249L106 -250H87Q61 -250 61 -238Q61 -233 74 -216Q157 -113 183 51Q197 130 197 250T183 449Q174 505 158 554T126 634T95 687T71 722T61 737\",42:\"241 579Q241 582 228 639T215 702Q215 722 233 736T271 750Q296 750 315 736T334 702V697Q334 693 328 664T314 607L308 579L352 620Q389 654 397 660T417 668Q447 668 464 647T482 602Q482 591 479 583T472 569T459 559T443 552T421 546T397 538L342 521L397 504Q405 501 420 497T442 490T458 483T472 473T479 460T482 440Q482 416 465 395T417 374Q406 375 398 381T352 422L308 463L314 435Q321 407 327 378T334 345Q336 333 327 319T296 295Q288 293 275 293Q241 293 227 311T215 345Q215 349 221 378T234 435L241 463L197 422Q160 388 152 382T132 374Q102 374 85 395T67 440Q67 451 70 459T77 473T90 483T106 490T128 496T152 504L207 521L152 538Q144 541 129 545T107 552T91 559T77 569T70 582T67 602Q67 626 84 647T132 668Q143 667 151 661T197 620L241 579\",43:\"61 250Q61 276 94 292H386V436V535Q386 577 388 589T401 607Q411 617 427 617Q458 617 468 587Q470 581 470 436V292H762L766 290Q770 288 773 287T780 282T787 274T792 264T794 250Q794 222 762 209L616 208H470V64Q470 -81 468 -87Q458 -116 428 -116T388 -87Q386 -81 386 64V208H240L94 209Q61 220 61 250\",44:\"81 139Q85 145 88 145Q89 146 154 146H219Q222 142 226 139V8L187 -47Q182 -54 177 -62T169 -74T163 -83T157 -91T153 -97T149 -101T145 -103T141 -105T137 -105T132 -106H116H105Q80 -106 80 -95Q80 -90 98 -47T117 -2Q117 0 102 0L87 1L81 7V139\",45:\"12 230Q12 257 26 265T80 274Q88 274 114 274T158 273T201 273T235 274Q276 274 290 266T305 230T291 194T235 185Q226 185 201 185T159 186Q143 186 119 186T85 185Q43 185 28 193T12 230\",46:\"219 146Q222 142 226 139V7L222 4L219 1L154 0Q102 0 94 0T82 6Q80 9 80 74L81 139Q85 145 88 145Q89 146 154 146H219\",47:\"103 -249Q81 -249 71 -235T61 -207Q61 -201 62 -198Q64 -192 235 265T409 727Q418 750 445 750Q464 750 476 737T488 707Q488 701 313 234Q143 -225 137 -232Q126 -249 103 -249\",58:\"226 319L219 313H87L81 319L80 384Q80 437 80 445T86 456Q89 458 154 458H219Q222 454 226 451V319ZM219 146Q222 142 226 139V7L222 4L219 1L154 0Q102 0 94 0T82 6Q80 9 80 74L81 139Q85 145 88 145Q89 146 154 146H219\",59:\"226 319L219 313H87L81 319L80 384Q80 437 80 445T86 456Q89 458 154 458H219Q222 454 226 451V319ZM81 139Q85 145 88 145Q89 146 154 146H219Q222 142 226 139V8L187 -47Q182 -54 177 -62T169 -74T163 -83T157 -91T153 -97T149 -101T145 -103T141 -105T137 -105T132 -106H116H105Q80 -106 80 -95Q80 -90 98 -47T117 -2Q117 0 102 0L87 1L81 7V139\",61:\"94 324Q61 335 61 366Q61 396 91 405Q96 407 429 407H762Q763 406 767 404T774 400T781 395T787 387T792 378T794 365Q794 338 762 324H94ZM94 94Q61 105 61 135Q61 149 69 160T92 175Q97 177 430 177H762L766 175Q770 173 773 172T780 167T787 159T792 149T794 135Q794 107 762 94H94\",63:\"61 644Q61 652 87 666T157 693T244 705Q344 705 400 671T457 551Q457 516 446 490T422 451T387 421T356 391Q330 361 318 332T305 292T303 252Q303 218 300 213T290 208T244 207H220Q194 207 188 213Q187 214 186 215V255Q187 282 188 296T198 345T229 417T288 496Q306 515 306 559Q306 596 296 607T253 618Q214 618 185 607T143 583T120 558T103 547Q99 547 95 551Q93 553 77 597T61 644ZM171 71V95Q171 137 197 144Q201 146 244 146H261Q307 146 315 121Q317 115 317 73V51Q317 9 291 2Q286 0 242 0L199 1Q182 7 174 21L172 28L171 71\",64:\"61 264T61 347T82 494T136 596T217 660T311 694T410 704Q460 704 471 703Q534 694 577 666Q633 623 651 552T670 370V342Q670 249 633 195Q583 116 454 116Q238 116 238 347Q238 443 276 499Q328 578 456 578Q488 578 494 577L504 575Q475 617 430 617H421Q196 617 196 347Q196 215 253 143Q310 76 427 76Q499 76 561 102L575 107H664Q671 97 671 94V89L663 81Q566 -11 422 -11Q365 -11 316 -2T219 33T137 97T82 200ZM469 490Q459 492 453 492Q429 492 405 472Q374 439 374 347Q374 233 423 210Q436 202 454 202L486 210Q536 228 536 347Q536 461 486 484Q476 490 469 490\",91:\"318 -206Q318 -235 305 -243T255 -251Q248 -251 229 -251T198 -250H143Q112 -250 99 -246T81 -225Q79 -219 79 250T81 725Q85 741 98 745T143 750H198Q210 750 229 750T255 751Q291 751 304 743T318 707Q318 680 301 668Q293 663 255 663H224V-163H255Q293 -163 301 -168Q318 -180 318 -206\",93:\"24 706Q24 734 39 742T90 751Q97 751 114 751T143 750H198Q230 750 243 746T261 725Q263 719 263 250T261 -225Q257 -241 244 -245T198 -250H143Q131 -250 112 -250T86 -251Q50 -251 37 -243T24 -207Q24 -180 41 -168Q49 -163 87 -163H118V663H87H71Q24 663 24 706\",94:\"108 550Q108 554 135 589T190 658T219 692Q221 694 275 694Q328 694 330 693Q331 692 381 629T438 557Q441 553 441 549T434 538L399 537Q363 537 362 538Q361 538 318 575L275 611Q274 611 231 575Q188 538 187 538Q186 537 150 537L115 538Q108 545 108 550\",95:\"0 -66Q0 -32 26 -25Q30 -23 274 -23Q469 -23 497 -23T532 -28Q549 -40 549 -67Q549 -93 532 -105Q525 -109 498 -109T275 -110Q31 -110 26 -108Q0 -101 0 -66\",126:\"92 215Q92 259 122 301T204 344Q238 344 264 329T310 300T343 285Q356 285 361 295T369 322T377 344H450Q457 334 457 330Q457 281 427 240T344 198Q312 198 285 213T239 242T206 257Q188 257 182 230T172 199L137 198H120Q102 198 97 200T92 215\",305:\"54 431Q63 458 102 458H127H149Q192 458 199 433Q201 427 201 229T199 25Q190 0 149 0H125L81 1Q61 7 54 28V431\",567:\"-38 -84Q-36 -84 -14 -95T33 -106H38Q70 -103 78 -86Q83 -78 83 -49T84 180Q84 427 86 433Q93 458 136 458H158H180Q201 458 209 456T225 443Q230 436 231 418Q232 397 232 313V183V124V40Q232 -55 228 -87T203 -147Q166 -205 78 -205Q31 -205 -20 -189T-71 -159Q-71 -156 -59 -123Q-50 -96 -47 -91T-38 -84\",768:\"-458 682Q-458 690 -452 692T-426 694H-381H-314L-312 691Q-311 691 -305 682T-287 655T-263 622L-218 555V549Q-218 544 -224 538L-259 537Q-295 537 -296 538Q-298 539 -376 606T-456 676Q-458 680 -458 682\",769:\"-290 537H-310Q-334 537 -334 549Q-334 553 -311 588T-264 656L-241 690Q-240 690 -239 691T-236 693Q-235 694 -167 694H-100Q-93 684 -93 681T-94 677Q-95 675 -173 607T-255 538Q-256 537 -290 537\",770:\"-442 550Q-442 554 -415 589T-360 658T-331 692Q-329 694 -275 694Q-222 694 -220 693Q-219 692 -169 629T-112 557Q-109 552 -109 549Q-109 545 -116 538L-151 537Q-187 537 -188 538Q-189 538 -232 575L-275 611Q-276 611 -319 575Q-362 538 -363 538Q-364 537 -400 537L-435 538Q-442 545 -442 550\",771:\"-458 565Q-458 609 -428 651T-346 694Q-312 694 -286 679T-240 650T-207 635Q-194 635 -189 645T-181 672T-173 694H-100Q-93 684 -93 680Q-93 631 -123 590T-206 548Q-238 548 -265 563T-311 592T-344 607Q-362 607 -368 580T-378 549L-413 548H-430Q-448 548 -453 550T-458 565\",772:\"-84 660Q-81 656 -77 653V567L-81 564L-84 561L-274 560H-383Q-469 560 -471 565L-472 566Q-474 569 -474 611L-473 653Q-469 659 -466 659Q-465 660 -274 660H-84\",774:\"-123 694Q-80 694 -80 657Q-80 626 -99 601T-161 563Q-199 552 -275 552Q-352 552 -389 563Q-470 586 -470 655Q-470 667 -468 673Q-457 694 -435 694H-431Q-408 694 -396 685Q-387 676 -387 671Q-384 661 -275 661Q-167 661 -164 671Q-164 674 -163 677T-151 687T-123 694\",775:\"-329 596Q-346 602 -351 611T-356 638V646Q-356 653 -356 654T-356 661T-355 668T-353 673T-351 679T-347 684T-341 689T-332 693T-274 695H-221Q-202 683 -198 676T-194 645Q-194 632 -195 625T-202 610T-221 596H-329\",776:\"-331 695Q-312 683 -308 676T-304 645Q-304 632 -304 626T-311 610T-331 596L-380 595H-408Q-448 595 -457 617Q-459 621 -459 645T-457 673Q-448 696 -409 696Q-405 696 -396 696T-380 695H-331ZM-247 644Q-247 658 -246 665T-239 680T-221 694Q-217 695 -169 695H-143Q-102 695 -93 672Q-91 664 -91 645V635Q-91 613 -106 602Q-113 597 -121 596T-171 595L-219 596Q-232 600 -238 608T-246 622T-247 644\",778:\"-365 616Q-365 658 -331 676T-256 694Q-253 694 -247 694T-236 693Q-166 693 -139 666Q-119 644 -119 616T-139 565Q-166 538 -237 538H-242Q-365 538 -365 616ZM-181 616Q-181 641 -195 647T-242 654Q-258 654 -266 654T-284 650T-298 638T-303 616Q-303 592 -289 585T-242 577Q-209 577 -195 584T-181 616\",779:\"-426 686Q-424 694 -394 694H-350H-283Q-277 686 -277 682Q-277 673 -317 608T-361 538L-396 537H-420Q-432 537 -436 539T-440 548Q-440 560 -434 616Q-432 633 -430 650T-427 677L-426 686ZM-243 686Q-241 694 -211 694H-167H-100Q-94 686 -94 682Q-94 673 -134 608T-178 538L-213 537H-237Q-249 537 -253 539T-257 548Q-257 560 -251 616Q-249 633 -247 650T-244 677L-243 686\",780:\"-442 645Q-442 657 -418 657H-398Q-393 657 -388 657T-379 657T-371 656T-365 656H-363L-319 620L-276 583Q-275 583 -232 619Q-189 656 -188 656Q-187 657 -151 657H-116Q-109 649 -109 645Q-109 642 -112 637Q-118 629 -168 566T-220 501Q-222 500 -275 500Q-329 500 -331 501Q-442 634 -442 645\",8211:\"0 284Q0 318 26 325Q30 327 274 327Q469 327 497 327T532 322Q549 310 549 283Q549 257 532 245Q525 241 498 241T275 240Q31 240 26 242Q0 249 0 284\",8212:\"0 284Q0 318 26 325Q30 327 549 327T1073 325Q1099 318 1099 284Q1099 249 1073 242Q1068 240 549 240Q31 240 26 242Q0 249 0 284\",8213:\"0 284Q0 318 26 325Q30 327 549 327T1073 325Q1099 318 1099 284Q1099 249 1073 242Q1068 240 549 240Q31 240 26 242Q0 249 0 284\",8215:\"0 -66Q0 -32 26 -25Q30 -23 274 -23Q469 -23 497 -23T532 -28Q549 -40 549 -67Q549 -93 532 -105Q525 -109 498 -109T275 -110Q31 -110 26 -108Q0 -101 0 -66\",8216:\"87 443L81 449V581L119 636Q125 644 131 653T141 667T148 677T154 685T158 689T163 692T167 693T173 694H190H201Q226 694 226 683Q226 678 208 635T189 590Q189 588 204 588H219Q222 584 226 581V449L219 443H87\",8217:\"81 687Q85 693 88 693Q89 694 154 694H219Q222 690 226 687V556L187 501Q182 494 177 486T169 474T163 465T157 457T153 451T149 447T145 445T141 443T137 443T132 442H116H105Q80 442 80 453Q80 458 98 501T117 546Q117 548 102 548L87 549L81 555V687\",8220:\"144 443L138 449V581L176 636Q182 644 188 653T198 667T205 677T211 685T215 689T220 692T224 693T230 694H247H258Q283 694 283 683Q283 678 265 635T246 590Q246 588 261 588H276Q279 584 283 581V449L276 443H144ZM381 443L375 449V581L413 636Q419 644 425 653T435 667T442 677T448 685T452 689T457 692T461 693T467 694H484H495Q520 694 520 683Q520 678 502 635T483 590Q483 588 498 588H513Q516 584 520 581V449L513 443H381\",8221:\"38 687Q42 693 45 693Q46 694 111 694H176Q179 690 183 687V556L144 501Q139 494 134 486T126 474T120 465T114 457T110 451T106 447T102 445T98 443T94 443T89 442H73H62Q37 442 37 453Q37 458 55 501T74 546Q74 548 59 548L44 549L38 555V687ZM275 687Q279 693 282 693Q283 694 348 694H413Q416 690 420 687V556L381 501Q376 494 371 486T363 474T357 465T351 457T347 451T343 447T339 445T335 443T331 443T326 442H310H299Q274 442 274 453Q274 458 292 501T311 546Q311 548 296 548L281 549L275 555V687\",8260:\"103 -249Q81 -249 71 -235T61 -207Q61 -201 62 -198Q64 -192 235 265T409 727Q418 750 445 750Q464 750 476 737T488 707Q488 701 313 234Q143 -225 137 -232Q126 -249 103 -249\",8710:\"381 692Q386 694 458 694Q516 694 527 693T549 687Q564 680 575 663Q576 658 715 349T856 27Q856 6 838 1H826Q815 1 795 1T747 1T686 1T616 0T539 0T458 0T378 0T300 0T230 0T169 1T122 1T90 1H78Q60 6 60 27Q62 38 201 349T341 663Q356 687 381 692ZM627 148Q626 149 581 250T492 453L447 554Q447 553 446 552Q444 546 326 278L268 148Q268 147 448 147Q627 147 627 148\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerifBold=void 0,e.sansSerifBold={33:[.694,0,.367],34:[.694,-.442,.558],35:[.694,.193,.917],36:[.75,.056,.55],37:[.75,.056,1.029],38:[.716,.022,.831],39:[.694,-.442,.306],40:[.75,.249,.428],41:[.75,.25,.428],42:[.75,-.293,.55],43:[.617,.116,.856],44:[.146,.106,.306],45:[.273,-.186,.367],46:[.146,0,.306],47:[.75,.249,.55],58:[.458,0,.306],59:[.458,.106,.306],61:[.407,-.094,.856],63:[.705,0,.519],64:[.704,.011,.733],91:[.75,.25,.343],93:[.75,.25,.343],94:[.694,-.537,.55],95:[-.023,.11,.55],126:[.344,-.198,.55],305:[.458,0,.256],567:[.458,.205,.286],768:[.694,-.537,0],769:[.694,-.537,0],770:[.694,-.537,0],771:[.694,-.548,0],772:[.66,-.56,0],774:[.694,-.552,0],775:[.695,-.596,0],776:[.695,-.595,0],778:[.694,-.538,0],779:[.694,-.537,0],780:[.657,-.5,0],8211:[.327,-.24,.55],8212:[.327,-.24,1.1],8213:[.327,-.24,1.1],8215:[-.023,.11,.55],8216:[.694,-.443,.306],8217:[.694,-.442,.306],8220:[.694,-.443,.558],8221:[.694,-.442,.558],8260:[.75,.249,.55],8710:[.694,0,.917]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerifItalic=void 0;var r=Q(6),T=Q(242);e.sansSerifItalic=r.AddPaths(T.sansSerifItalic,{33:\"160 187L257 694H306Q355 694 355 693L238 186H199Q160 186 160 187ZM110 2Q111 3 120 49T131 96Q131 98 180 98T229 96L219 50Q209 3 208 2V0H110V2\",34:\"171 647L180 694H229Q278 694 278 693L276 686Q275 680 273 668T268 644L258 597L182 471H157Q133 471 133 472L189 595Q189 596 174 596H160V598Q160 601 171 647ZM365 647L374 694H423Q472 694 472 693L470 686Q469 680 467 668T462 644L452 597L376 471H351Q327 471 327 472L383 595Q383 596 368 596H354V598Q354 601 365 647\",35:\"793 170Q809 162 809 149Q809 145 807 141T802 135T796 132L793 130H547L472 -27Q397 -184 394 -187Q389 -194 379 -194Q367 -194 362 -183Q359 -179 359 -173Q360 -168 431 -20L503 129Q503 130 410 130H317L242 -27Q167 -184 164 -187Q159 -194 149 -194Q137 -194 132 -183Q129 -179 129 -173Q130 -168 201 -19L273 130H187L100 131Q87 141 87 150Q87 162 102 170H294L331 248Q339 265 349 286T365 318L370 328Q370 330 258 330Q145 330 142 332Q129 338 129 351Q129 362 140 368Q146 370 267 370L391 371L467 527Q542 684 544 686Q544 688 549 691T560 694H562Q565 693 567 692T571 690T575 686T578 681T579 672Q577 665 507 520T436 373L435 370H528L621 371L692 518Q767 675 769 677Q775 694 789 694Q798 694 804 688T809 672Q806 664 737 519L665 371L751 370Q835 370 841 368Q851 362 851 350Q851 337 841 334T799 330H765H741H645L606 250L568 170H793ZM600 328Q600 330 508 330H415Q412 326 338 171Q338 170 431 170H524L561 248Q569 265 579 286T595 318L600 328\",36:\"228 70Q233 92 246 155T270 266T280 316Q271 318 265 320T237 333T200 360T172 403T159 468Q159 537 205 600T325 691Q352 701 360 701Q361 701 361 701T362 703T364 711T368 727L372 750H409Q445 750 445 749L436 705Q436 703 450 702T494 691T554 657L565 649Q562 642 548 604L534 568Q511 591 484 605T440 621L424 623L419 624L372 405Q399 400 424 384Q490 338 490 247V240Q490 156 430 85Q374 13 294 -5L284 -7L280 -30Q279 -35 278 -41T275 -52L274 -55Q274 -56 237 -56Q201 -56 201 -54Q202 -53 205 -34T211 -11Q211 -9 206 -9Q154 -2 115 19Q80 35 56 59L88 141L99 131Q109 121 119 113T141 99T160 89T180 82T197 77T214 73T228 70ZM303 426Q304 427 313 471T332 564T345 620L335 616Q287 596 263 549Q252 525 252 499Q252 470 267 451T298 426Q303 424 303 426ZM302 75Q305 75 315 80T340 98T367 125T390 164T399 214Q399 247 384 268T349 297Q338 247 326 186L302 75\",37:\"268 347Q224 347 195 386T165 488Q165 517 173 552Q191 637 246 693T349 749Q389 749 414 725T448 673T456 614Q456 506 396 427T268 347ZM372 604Q372 674 339 674Q311 674 290 633T261 549T253 482V474Q253 438 272 426Q277 424 286 424Q319 424 345 485T372 604ZM189 -56Q179 -56 173 -49T167 -37Q167 -30 347 198Q425 296 475 360Q780 745 785 747Q790 750 796 750Q814 748 814 730Q814 725 811 719L204 -49Q198 -56 189 -56ZM523 87Q523 184 583 265T713 347Q758 347 786 308T815 207Q815 110 757 28T629 -55Q576 -55 550 -12T523 87ZM729 200Q729 271 696 271Q675 271 658 247T631 189T616 125T611 76Q611 21 644 21H647Q672 21 700 77T729 200\",38:\"219 -22Q158 -22 117 13T71 111Q71 131 74 150T84 185T98 215T118 241T137 262T159 281T179 295T199 308L214 318L258 348L256 362Q254 373 254 413V435Q254 483 271 537T325 641T411 708Q427 715 441 715Q446 716 455 716Q504 716 534 681T565 590Q565 522 519 468T377 347L358 334Q359 333 363 320T374 290T387 262Q404 227 428 187T460 139Q521 183 574 251T651 362T674 409L710 398Q746 388 747 388Q747 381 720 333T635 213T517 94L510 87Q542 57 598 57Q649 57 708 72Q716 75 718 75L709 34L701 -7Q636 -22 578 -22Q531 -22 498 -8T428 34L408 25Q314 -22 219 -22ZM480 579Q480 640 436 640Q410 640 385 615T351 554Q340 513 340 457Q340 413 343 410Q343 406 360 419Q431 471 455 505T480 579ZM245 57Q279 59 311 67T359 81T375 89T358 113T318 178T281 260L274 277L245 257Q167 205 167 135Q167 110 174 93T194 69T217 60T237 57H245\",39:\"228 647L237 694H286Q335 694 335 693L334 686Q332 680 330 668T325 644L315 597L239 471H214Q190 471 190 472L246 595Q246 596 231 596H217V598Q217 601 228 647\",40:\"195 37Q195 -7 200 -47T213 -113T231 -166T250 -204T268 -232T280 -250H204L194 -238Q104 -124 104 55Q104 238 181 432T405 740L417 750H454Q491 750 491 749L468 729Q446 709 411 667T337 565T262 405T208 188Q195 110 195 37\",41:\"300 463Q300 634 222 740L214 750H290L299 740Q300 738 309 726T323 707T337 682T353 651T367 613T379 566T387 510T390 444Q390 314 344 156T203 -125Q179 -155 145 -191Q111 -224 89 -241L78 -250H2Q4 -248 27 -227T65 -189T107 -140T155 -71T200 16T244 129T278 266Q300 372 300 463\",42:\"193 608Q193 628 210 644T246 660Q250 660 252 660T257 658T264 654T272 648T284 638T302 623Q340 590 340 593Q341 594 345 623T354 682T360 715Q365 729 378 739T407 750Q424 750 433 740T443 720Q443 712 427 652L410 591L462 623Q505 650 514 655T534 660Q549 660 558 650T568 625Q568 617 567 611T560 599T551 590T536 580T519 571T496 561T470 548L429 528L474 500Q482 495 492 489T506 481T516 475T523 469T527 464T529 458T530 450Q530 430 514 414T479 397H475Q468 397 460 402T423 433Q414 440 404 448T388 461L383 465L365 344Q348 306 314 306Q302 306 292 313T281 338Q281 347 297 404L313 464L260 433Q201 397 195 397H189Q173 397 165 407T156 432Q156 438 157 443T161 452T166 460T175 468T185 475T198 482T212 489T230 497T250 506L295 528L250 556Q203 582 202 585Q193 591 193 608\",43:\"108 244T108 250T112 261T119 268T124 270H426V272Q428 274 457 419Q489 565 492 573Q497 583 508 583Q516 583 522 577T528 565Q528 553 498 417Q491 384 483 346T471 288L467 270H760Q775 262 775 250T760 230H458Q456 221 426 77T394 -71Q389 -83 375 -83Q367 -83 362 -78T356 -64Q356 -58 387 84Q394 118 401 155T413 210L417 229Q417 230 271 230H124Q123 230 120 232T112 239\",44:\"90 2Q91 3 100 49T111 96Q111 98 160 98T209 96L199 50Q189 3 188 2Q188 0 149 -63L112 -125H63L120 0H105Q90 0 90 2\",45:\"66 257V259H332V257L324 220L317 186H184Q51 186 51 187T58 220T66 257\",46:\"90 2Q91 3 100 49T111 96Q111 98 160 98T209 96L199 50Q189 3 188 2V0H90V2\",47:\"564 744L568 747Q573 750 579 750Q588 750 594 744T599 729Q597 721 321 241T41 -243Q37 -250 27 -250Q6 -250 6 -230Q6 -228 8 -222Q9 -219 285 261T564 744\",48:\"245 -22Q209 -22 181 -11T135 20T107 65T92 116T88 171Q88 235 114 354T194 557Q226 606 269 635T340 671T392 678H395Q422 678 446 670T495 643T534 582T549 481Q549 430 534 350T499 213Q459 89 379 25Q315 -22 247 -22H245ZM430 582Q408 601 378 601Q313 601 269 534Q234 475 205 341Q181 232 181 174Q181 104 209 76Q231 54 260 54T318 73T368 125Q410 194 447 375Q460 445 460 487Q460 555 430 582\",49:\"234 613Q277 613 331 628T428 678H439Q451 678 451 676Q450 671 387 373T323 74T384 73H445L430 0H259L88 1L104 73H229L332 560Q278 541 198 539Q198 540 198 541T199 546T200 554T202 564T205 576L213 612H219Q221 612 226 612T234 613\",50:\"190 460Q189 460 181 475T164 507T155 527Q155 535 182 571Q259 678 380 678Q462 678 506 630T551 513V507Q551 418 487 349Q469 329 441 305T391 265T344 232T316 212Q158 87 158 86T188 85Q194 85 234 85T311 86Q467 86 467 85Q451 9 449 2V0H50Q54 18 58 40L67 79L133 133Q246 226 269 243Q369 318 410 373T452 492Q452 535 433 560T393 592T350 599Q311 599 279 578T231 532T203 484T190 460\",51:\"446 542Q446 576 424 590T372 605Q330 605 288 583T216 524Q209 515 208 516Q207 517 192 549L178 580L187 589Q224 627 276 652T386 678Q456 678 500 642T544 550Q544 515 530 482T495 427T453 387T418 362L403 353L413 348Q440 335 462 313Q500 271 500 217Q500 135 423 57T236 -22T63 59L56 68L85 141Q106 112 125 98Q177 54 254 54Q315 54 355 105T396 218Q396 242 393 254Q380 301 335 313Q327 315 280 316Q233 316 233 318L249 392Q298 392 322 399Q373 408 409 453T446 542\",52:\"78 235L411 656H465Q519 656 519 655T475 447T430 237V235H521V233L505 160Q505 159 459 159H414L380 0H286L320 159H62L63 164Q64 169 66 179T70 198L78 235ZM342 235L421 607Q420 607 419 604Q409 535 197 267Q173 236 173 235H342\",53:\"330 350Q263 350 214 272H133V275Q134 276 174 467L214 655Q214 656 385 656H555V653Q555 652 554 647T550 631T546 613L539 577H284L265 486Q261 464 256 441T248 406L246 395L250 398Q255 401 264 406T286 415T315 423T350 427Q412 427 455 381T498 256Q498 150 415 64T222 -22Q186 -22 155 -12T105 12T74 41T55 65T50 77L51 79Q61 89 78 112L104 145L107 138Q110 130 114 123T125 106T142 88T165 72T196 60T236 55Q282 55 316 79T366 140T389 208T396 267Q396 310 378 330T337 350H330\",54:\"437 605Q397 605 361 585T301 536T261 477T236 426T228 401L236 408Q244 414 260 424T296 445T345 462T402 469H404Q422 469 434 467T465 446T498 394Q515 351 515 307Q515 254 497 193T439 85Q352 -22 246 -22Q220 -22 196 -14T148 15T109 78T94 179Q94 272 123 373Q163 505 257 591T450 678Q474 678 498 674T535 664T548 656L540 621L532 586L520 590Q509 594 485 599T437 605ZM339 392Q281 392 233 334T185 163V158Q185 87 230 61Q244 54 262 54Q325 54 371 122Q395 158 407 217T419 298Q419 337 401 364T339 392\",55:\"173 614L181 656H389Q596 656 596 655L595 650Q594 645 592 635T588 616L580 578L554 551Q313 307 245 4L242 -11H192Q143 -11 143 -10Q144 0 148 17T169 89T212 198T285 327T393 470Q423 504 472 550Q479 555 485 561T496 571L329 570Q163 570 163 571L164 577Q166 583 168 593T173 614\",56:\"159 470Q159 547 229 612T394 678Q467 678 510 636T554 533Q554 512 549 493T535 458T515 429T492 405T467 386T443 372T423 362T409 356L404 354Q404 353 405 353Q411 353 432 341T476 295T500 218Q500 134 424 56T246 -22Q175 -22 126 22T77 143Q77 204 110 251T188 327L202 334Q216 340 229 346T243 353T235 358T214 372T189 393T168 426T159 470ZM467 527Q467 605 375 605Q317 605 281 566T244 472Q244 429 271 411T334 392Q392 392 429 430T467 527ZM405 228Q405 262 384 289T315 316Q257 316 216 266T174 144Q174 95 199 75T262 54Q329 54 367 109T405 228\",57:\"220 594Q303 677 389 677Q545 677 545 479Q545 413 526 327Q493 175 398 77T202 -22Q124 -22 77 25L130 91L137 83Q169 54 218 54Q255 54 290 76T347 129Q364 151 380 182T403 232T411 256Q410 255 390 241T353 217T303 197T236 187Q195 187 173 209Q155 226 140 263T124 352Q124 392 135 435Q154 527 220 594ZM455 497Q455 605 383 605Q340 605 305 577T246 492Q220 411 220 360Q220 278 279 264Q280 264 287 264T299 263Q347 263 387 302Q455 375 455 497\",58:\"174 396L184 444H233Q282 444 282 443Q277 421 272 394L262 346H213Q164 346 164 347Q169 369 174 396ZM90 2Q91 3 100 49T111 96Q111 98 160 98T209 96L199 50Q189 3 188 2V0H90V2\",59:\"174 396L184 444H233Q282 444 282 443Q277 421 272 394L262 346H213Q164 346 164 347Q169 369 174 396ZM90 2Q91 3 100 49T111 96Q111 98 160 98T209 96L199 50Q189 3 188 2Q188 0 149 -63L112 -125H63L120 0H105Q90 0 90 2\",61:\"142 368Q145 370 463 370Q780 370 784 368Q796 364 796 350T784 332Q780 330 463 330Q145 330 142 332Q129 338 129 351Q129 362 142 368ZM88 137T88 150T102 170H738Q739 170 742 168T750 161T754 150T750 139T743 132T738 130H102Q88 137 88 150\",63:\"194 652Q194 654 218 666T284 691T362 704Q444 704 490 678T536 583Q536 541 516 500T459 433Q415 400 387 371T343 313T321 266T307 216L301 186H262Q223 186 223 187Q224 199 228 218T250 288T294 377Q317 413 344 440T391 481T414 499Q442 527 442 574Q442 584 441 590T433 607T409 623T362 629Q335 629 310 624T267 610T235 595T214 582T205 576L200 614Q194 651 194 652ZM173 2Q174 3 183 49T194 96Q194 98 243 98T292 96L282 50Q272 3 271 2V0H173V2\",64:\"120 267Q120 377 179 478T336 642T538 705Q610 705 658 662T707 513Q707 425 681 331Q658 241 590 179T447 117Q386 117 343 163T300 288Q300 397 374 486T544 576Q575 576 608 562Q590 628 517 628Q406 628 309 522T212 278Q212 179 267 122T404 65T550 91H631Q513 -10 390 -10Q265 -10 193 70T120 267ZM600 397Q600 441 581 471T530 501Q476 501 433 436T390 298Q390 254 409 224T462 193Q512 193 556 257T600 397\",91:\"148 252L253 750H339Q425 750 425 749L424 744Q423 739 421 729T417 711L409 675L367 674H325L235 252Q145 -167 145 -172Q145 -174 187 -174H229V-176Q213 -240 213 -250H127Q41 -250 41 -248Q41 -245 148 252\",93:\"353 749Q353 746 303 512T200 27T141 -250H-31Q-31 -240 -15 -176V-174H70L250 674H208L165 675L181 750H267Q353 750 353 749\",94:\"190 527L360 694H434L484 611Q533 528 533 527H457L390 632L385 639L266 527H190\",95:\"59 -75L66 -38H316Q565 -38 565 -39T558 -75T549 -112Q549 -114 299 -114Q50 -114 50 -113L52 -108Q53 -103 55 -93T59 -75\",126:\"330 327Q356 326 388 298T446 269Q470 269 484 327H522Q560 327 560 325L557 316Q554 306 549 292T535 263T512 232T480 208Q453 193 429 193T370 222T315 251Q285 251 275 193H199V197Q214 257 251 292T330 327\",305:\"168 442T168 443T213 444T258 443T212 225T164 2V0H74V2Q75 7 121 224\",567:\"-54 -96L-48 -104Q-41 -111 -27 -118T7 -126Q60 -126 82 -87Q85 -81 140 181L196 443Q196 444 241 444T286 443Q286 441 232 186T175 -75Q163 -120 122 -162T19 -204Q-13 -204 -41 -196T-83 -180T-96 -170Q-55 -96 -54 -96\",768:\"-262 681L-270 694H-177L-132 612Q-89 530 -87 528Q-87 527 -125 527H-163L-208 598Q-254 670 -262 681\",769:\"-96 625L-29 694H63Q42 673 -31 605L-114 527H-190L-176 541Q-160 559 -96 625\",770:\"-310 527L-140 694H-66L-16 611Q33 528 33 527H-43L-110 632L-115 639L-234 527H-310\",771:\"-170 677Q-144 676 -112 648T-54 619Q-30 619 -16 677H22Q60 677 60 675L57 666Q54 656 49 642T35 613T12 582T-20 558Q-47 543 -71 543T-130 572T-185 601Q-215 601 -225 543H-301V547Q-286 607 -249 642T-170 677\",772:\"-314 553L-297 631H-116Q64 631 64 630Q60 612 56 591L47 553L-133 552Q-314 552 -314 553\",774:\"-142 508Q-205 508 -244 548T-284 652Q-284 666 -281 683L-280 694H-204Q-205 689 -205 677Q-205 650 -196 631T-173 604T-147 593T-125 590Q-85 590 -50 618T-5 686L-2 694H73V690Q53 610 -10 559T-142 508\",775:\"-180 578Q-179 579 -170 627T-158 678V680H-54V678Q-56 675 -65 627T-76 578V576H-180V578\",776:\"-273 584Q-272 585 -262 632L-252 678V680H-154V678L-164 632Q-174 585 -175 584Q-175 582 -224 582T-273 584ZM-78 586Q-78 587 -69 632T-58 678V680H40L39 677Q39 676 38 670T34 651T29 628L19 583L-30 582H-79L-78 586\",778:\"-227 597Q-227 639 -186 666T-102 693H-97Q-29 693 -8 649Q-2 637 -2 623Q-2 582 -43 555T-132 527Q-171 527 -199 546T-227 597ZM-59 619Q-59 635 -68 643T-104 652Q-142 652 -156 636T-171 602Q-171 569 -123 569Q-119 569 -111 570T-99 571Q-59 582 -59 619\",779:\"-236 619L-195 694H-149Q-103 694 -103 693L-211 527H-287L-282 536Q-281 539 -236 619ZM-70 619L-29 694H17Q63 694 63 693L-45 527H-121L-116 536Q-115 539 -70 619\",780:\"-283 654H-207L-140 549L-135 542L-16 654H60L-109 487H-147L-184 488L-234 570Q-283 653 -283 654\",913:\"28 0L429 694H533L585 350Q596 275 610 182T632 46L638 3V0H530L528 18Q527 25 515 103T503 183H223L135 29L118 1L73 0H28ZM492 254Q492 256 473 398T454 589V610Q433 552 290 301L264 255L378 254H492\",914:\"501 363Q557 355 605 316T653 222Q653 148 586 85T403 2Q394 1 240 0Q90 0 90 1L100 46Q109 90 128 177T164 348L238 694H375Q518 693 546 688Q614 674 655 635T696 544Q696 490 648 441T516 368L501 363ZM601 530Q601 568 566 590T479 621Q472 622 394 623H320L297 513Q292 489 286 459T276 415L273 401V399H339H372Q504 399 571 466Q601 498 601 530ZM257 322Q256 320 230 197T203 73Q203 71 289 71Q379 72 387 73Q459 84 507 122T556 210Q556 255 519 283T428 320Q415 322 336 323Q257 323 257 322\",915:\"87 2Q88 4 160 346T234 689Q234 691 440 691T646 689Q643 686 629 611H475L321 612Q193 4 191 2V0H87V2\",916:\"273 343L510 694H617Q790 2 790 0H416L42 1L273 343ZM539 576Q536 597 536 600Q536 602 535 605Q534 607 534 607Q527 580 222 130L201 98H651L648 110Q645 123 639 149T627 198Q554 489 539 576\",917:\"86 2Q88 4 160 346T233 689Q233 691 461 691Q688 691 688 689Q685 686 671 611H495L320 612L319 609Q319 607 297 501L274 397H436Q597 397 597 396L596 391Q595 386 593 376T589 358L581 322L420 321Q258 321 258 320Q209 89 208 87Q208 85 390 85Q417 85 460 85T518 86L572 85Q556 8 554 2V0H86V2\",918:\"67 54Q551 615 551 617Q543 618 517 618Q510 618 463 618T376 617Q200 617 200 618T209 657L216 694H459Q702 694 702 692Q702 689 697 667L692 643L207 80H392Q493 81 577 81Q577 70 560 2V0H55V2L67 54\",919:\"517 2Q518 3 551 161T585 322Q586 323 557 323T422 323H259L190 0H138Q86 0 86 1L96 46Q105 90 124 177T160 348L234 694H337V691Q336 690 306 545T275 399H602L603 403Q603 407 634 551L665 694H768V691Q768 690 695 348T621 2V0H517V2\",920:\"119 260Q119 348 157 433T254 579T387 677T533 715Q701 715 772 574Q804 511 804 431Q804 315 744 209T586 41T384 -22Q262 -22 191 59T119 260ZM706 426Q706 524 655 582T525 640Q454 640 395 600T293 502Q256 447 237 383T218 266Q218 168 269 112T401 55Q518 55 612 166T706 426ZM283 349L293 397H473Q652 397 652 396Q647 374 642 347L632 299H452Q273 299 273 300Q278 322 283 349\",921:\"161 348L235 694H338V691Q338 690 265 348T191 2V0H139Q87 0 87 1L96 46Q106 90 125 177T161 348\",922:\"236 223Q235 222 213 113T188 2V0H138Q88 0 88 1L98 46Q107 90 126 177T162 348L236 694H285Q335 694 335 693L330 671Q326 649 316 603T298 518Q289 477 280 433T266 366L261 343L672 694H729L784 693L465 420L651 0H596L541 1L384 350Q383 351 310 288T236 223\",923:\"28 0L401 694H504V690Q505 686 543 345T582 1Q582 0 528 0H473V3Q472 6 460 113T435 359T422 558Q422 593 424 603L425 610L424 608Q414 572 343 431Q287 316 143 49L117 1L73 0H28\",924:\"375 691Q456 215 459 124V106Q488 177 762 641L793 694H929V691Q929 690 856 348T782 2V0H689V2Q691 4 753 304Q817 604 818 606Q819 611 817 608Q817 607 815 603Q798 559 540 117L484 22H440L397 23L393 42Q393 47 373 169T334 422T315 594V609L250 306Q186 3 185 2Q185 0 138 0Q92 0 92 1L102 46Q111 90 130 177T166 348L240 694H375V691\",925:\"311 609Q310 608 246 306T181 2V0H134Q88 0 88 1L98 46Q107 90 126 177T162 348L236 694H382L383 691Q383 688 418 561T493 286T541 97L544 84L545 89Q545 90 553 128T578 246T610 394L674 694H766V691Q766 690 693 348T619 2V0H472L469 13Q468 17 393 293T312 605L311 609\",926:\"193 687Q193 688 479 688H765V686Q764 685 755 642L747 600H461L175 601Q175 602 184 645L193 687ZM196 400Q196 401 418 401T640 400L622 315Q622 314 400 314T178 315L196 400ZM42 2Q43 3 51 44T60 87H64Q68 87 75 87T93 87T119 87T151 88T190 88T237 88T291 88T352 88H643Q638 66 634 44T627 13T624 2V0H42V2\",927:\"118 254Q118 366 174 473T324 648T517 716Q627 716 695 638T763 435Q763 321 706 215T555 43T362 -22Q256 -22 187 56T118 254ZM380 58Q452 58 518 116T622 263T661 442Q661 496 646 535T608 594T567 622T534 634Q516 636 496 636Q400 636 313 528T225 264Q225 172 267 115T380 58\",928:\"86 2Q88 4 160 346T233 689Q233 691 501 691Q768 691 768 689Q766 688 694 346T621 2V0H517V2Q518 3 582 304T646 609L648 615H321L190 0H86V2\",929:\"162 348L236 694H378Q522 693 530 692Q604 680 647 635T690 524Q690 474 665 430T612 359Q550 299 465 280Q443 275 343 274H250V271Q250 269 235 201T206 68T192 2V0H140Q88 0 88 1L98 46Q107 90 126 177T162 348ZM594 513Q594 560 562 588T477 622Q470 623 394 623H321L293 487L263 349V347H342H347H375Q530 347 578 449Q594 483 594 513\",931:\"194 655L202 694H508Q813 694 813 693Q809 675 805 653L797 614H559L321 615Q327 606 405 478L485 347Q449 311 348 203T247 86Q247 84 294 84Q303 84 359 84T465 85H684Q684 84 675 42L666 0H360L55 1L195 154Q346 319 347 320L359 333L273 473Q187 614 186 614L187 620Q188 625 190 635T194 655\",932:\"165 608L182 687Q182 688 486 688H790L789 685L781 645L773 609H521L457 306Q393 3 392 2Q392 0 340 0H288V2Q289 5 353 304T417 605V609L291 608H165\",933:\"357 637Q320 637 297 612T266 555H173Q178 576 188 598Q214 651 265 683T373 716Q497 716 497 542V509L504 526Q579 715 711 715Q773 715 808 677T843 589Q843 576 840 555H747L748 557Q748 559 748 563T749 574V580Q749 604 731 622Q715 638 693 638Q591 638 543 465Q531 425 506 309T462 98T441 2V0H337V2Q425 401 436 486Q438 504 438 526Q438 637 364 637H357\",934:\"124 308Q124 399 208 481T433 587Q437 587 437 589Q438 590 449 643L459 694H508Q557 694 557 693Q557 691 546 641T535 587Q543 587 562 583T614 565T674 531T722 472T743 387Q743 288 656 209T449 110L433 106Q411 3 410 2Q410 0 361 0H312L313 3Q313 5 324 56L335 107H331L321 108Q311 110 297 114T266 124T228 141T190 168Q124 225 124 308ZM227 315Q227 282 239 257T270 218T306 197T338 186L350 184H351L386 346Q420 507 420 509H419Q411 509 393 505T342 485T284 444Q227 387 227 315ZM642 381Q642 413 629 437T599 475T563 496T533 507T519 510Q518 510 484 348T450 184Q544 201 593 258T642 381\",935:\"14 0Q17 3 184 184T352 367L265 529Q244 567 222 609T188 672L176 692Q176 694 236 694H297L338 612Q387 515 400 489L421 448L645 694H758L708 640Q481 393 456 368Q455 366 500 281T596 104T652 0H531L388 293L128 0H14\",936:\"325 556Q325 524 310 447T294 330Q294 289 304 260Q314 234 333 216T364 192T380 187L488 694H585V691Q584 689 531 438L478 188H479Q485 188 503 195T555 231T613 305Q637 352 654 435Q662 470 669 496T681 538T690 562T698 578T704 587Q719 609 733 615T772 621H802H854V619L838 546Q838 545 832 545Q775 539 749 418Q716 274 638 196Q616 173 590 156T543 131T503 117T473 110T460 106Q460 105 450 54T438 2V0H340V2Q341 3 351 54T362 106Q363 107 358 108T344 111T322 117T295 128T267 145T239 171T216 207T200 256T194 319Q194 356 203 408T213 483Q213 517 203 530T182 544T171 546Q184 609 187 619V621H239Q286 621 294 620T309 612Q325 596 325 556\",937:\"148 407Q148 475 182 534T269 633T386 694T511 716Q622 716 695 658T769 507Q769 461 747 409T699 321T628 225T562 136Q533 90 533 86Q542 85 557 85Q564 85 583 85T614 86Q695 86 695 85Q679 9 677 2V0H425Q426 3 433 30T447 72T480 131T549 241L554 248Q558 254 563 261T576 281T592 306T609 335T625 366T640 400T653 434T661 466T664 498Q664 562 618 601T497 640Q416 640 351 596T262 482Q250 441 250 392T276 237T302 70V56Q302 28 296 2V0H44V2L62 85Q62 86 143 86L225 85V88Q224 89 224 89T224 91T224 95T223 101T222 110T220 123T216 140T209 163T200 191T188 227Q148 344 148 407\",8211:\"59 275L66 312H316Q565 312 565 311T558 275T549 238Q549 236 299 236Q50 236 50 237L52 242Q53 247 55 257T59 275\",8212:\"59 275L66 312H566Q1065 312 1065 311T1058 275T1049 238Q1049 236 549 236Q50 236 50 237L52 242Q53 247 55 257T59 275\",8213:\"59 275L66 312H566Q1065 312 1065 311T1058 275T1049 238Q1049 236 549 236Q50 236 50 237L52 242Q53 247 55 257T59 275\",8215:\"59 -75L66 -38H316Q565 -38 565 -39T558 -75T549 -112Q549 -114 299 -114Q50 -114 50 -113L52 -108Q53 -103 55 -93T59 -75\",8216:\"309 567L299 520Q289 474 288 473Q288 471 239 471T190 473L192 480Q193 486 196 499T201 522L211 569L287 694H312L335 693L332 685Q328 677 321 661T307 630L279 570L294 569Q309 569 309 567\",8217:\"228 647L237 694H286Q335 694 335 693L334 686Q332 680 330 668T325 644L315 597L239 471H214Q190 471 190 472L246 595Q246 596 231 596H217V598Q217 601 228 647\",8220:\"393 567L383 520Q373 474 372 473Q372 471 323 471T274 473L276 480Q277 486 280 499T285 522L295 569L371 694H396L419 693L416 685Q412 677 405 661T391 630L363 570L378 569Q393 569 393 567ZM587 567L577 520Q567 474 566 473Q566 471 517 471T468 473L470 480Q471 486 474 499T479 522L489 569L565 694H590L613 693L610 685Q606 677 599 661T585 630L557 570L572 569Q587 569 587 567\",8221:\"171 647L180 694H229Q278 694 278 693L276 686Q275 680 273 668T268 644L258 597L182 471H157Q133 471 133 472L189 595Q189 596 174 596H160V598Q160 601 171 647ZM365 647L374 694H423Q472 694 472 693L470 686Q469 680 467 668T462 644L452 597L376 471H351Q327 471 327 472L383 595Q383 596 368 596H354V598Q354 601 365 647\",8260:\"564 744L568 747Q573 750 579 750Q588 750 594 744T599 729Q597 721 321 241T41 -243Q37 -250 27 -250Q6 -250 6 -230Q6 -228 8 -222Q9 -219 285 261T564 744\",8710:\"273 343L510 694H617Q790 2 790 0H416L42 1L273 343ZM539 576Q536 597 536 600Q536 602 535 605Q534 607 534 607Q527 580 222 130L201 98H651L648 110Q645 123 639 149T627 198Q554 489 539 576\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerifItalic=void 0,e.sansSerifItalic={33:[.694,0,.319,{ic:.036}],34:[.694,-.471,.5],35:[.694,.194,.833,{ic:.018}],36:[.75,.056,.5,{ic:.065}],37:[.75,.056,.833],38:[.716,.022,.758],39:[.694,-.471,.278,{ic:.057}],40:[.75,.25,.389,{ic:.102}],41:[.75,.25,.389],42:[.75,-.306,.5,{ic:.068}],43:[.583,.083,.778],44:[.098,.125,.278],45:[.259,-.186,.333],46:[.098,0,.278],47:[.75,.25,.5,{ic:.1}],48:[.678,.022,.5,{ic:.049}],49:[.678,0,.5],50:[.678,0,.5,{ic:.051}],51:[.678,.022,.5,{ic:.044}],52:[.656,0,.5,{ic:.021}],53:[.656,.022,.5,{ic:.055}],54:[.678,.022,.5,{ic:.048}],55:[.656,.011,.5,{ic:.096}],56:[.678,.022,.5,{ic:.054}],57:[.677,.022,.5,{ic:.045}],58:[.444,0,.278],59:[.444,.125,.278],61:[.37,-.13,.778,{ic:.018}],63:[.704,0,.472,{ic:.064}],64:[.705,.01,.667,{ic:.04}],91:[.75,.25,.289,{ic:.136}],93:[.75,.25,.289,{ic:.064}],94:[.694,-.527,.5,{ic:.033}],95:[-.038,.114,.5,{ic:.065}],126:[.327,-.193,.5,{ic:.06}],305:[.444,0,.239,{ic:.019}],567:[.444,.204,.267,{ic:.019}],768:[.694,-.527,0],769:[.694,-.527,0,{ic:.063}],770:[.694,-.527,0,{ic:.033}],771:[.677,-.543,0,{ic:.06}],772:[.631,-.552,0,{ic:.064}],774:[.694,-.508,0,{ic:.073}],775:[.68,-.576,0],776:[.68,-.582,0,{ic:.04}],778:[.693,-.527,0],779:[.694,-.527,0,{ic:.063}],780:[.654,-.487,0,{ic:.06}],913:[.694,0,.667],914:[.694,0,.667,{ic:.029}],915:[.691,0,.542,{ic:.104}],916:[.694,0,.833],917:[.691,0,.597,{ic:.091}],918:[.694,0,.611,{ic:.091}],919:[.694,0,.708,{ic:.06}],920:[.715,.022,.778,{ic:.026}],921:[.694,0,.278,{ic:.06}],922:[.694,0,.694,{ic:.091}],923:[.694,0,.611],924:[.694,0,.875,{ic:.054}],925:[.694,0,.708,{ic:.058}],926:[.688,0,.667,{ic:.098}],927:[.716,.022,.736,{ic:.027}],928:[.691,0,.708,{ic:.06}],929:[.694,0,.639,{ic:.051}],931:[.694,0,.722,{ic:.091}],932:[.688,0,.681,{ic:.109}],933:[.716,0,.778,{ic:.065}],934:[.694,0,.722,{ic:.021}],935:[.694,0,.667,{ic:.091}],936:[.694,0,.778,{ic:.076}],937:[.716,0,.722,{ic:.047}],8211:[.312,-.236,.5,{ic:.065}],8212:[.312,-.236,1,{ic:.065}],8213:[.312,-.236,1,{ic:.065}],8215:[-.038,.114,.5,{ic:.065}],8216:[.694,-.471,.278,{ic:.058}],8217:[.694,-.471,.278,{ic:.057}],8220:[.694,-.471,.5,{ic:.114}],8221:[.694,-.471,.5],8260:[.75,.25,.5,{ic:.1}],8710:[.694,0,.833]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerif=void 0;var r=Q(6),T=Q(244);e.sansSerif=r.AddPaths(T.sansSerif,{33:\"120 187Q120 225 115 440T110 693Q110 694 159 694T208 693Q208 655 203 440T198 187Q198 186 159 186T120 187ZM110 0V98H208V0H110\",34:\"33 596V694H131V597L82 471H32L47 532Q62 593 63 594Q63 596 48 596H33ZM227 596V694H325V597L276 471H226L241 532Q256 593 257 594Q257 596 242 596H227\",35:\"56 350Q56 363 70 370H192Q314 370 314 371L356 526Q396 676 401 685Q406 694 416 694Q423 694 429 689T436 677Q436 673 396 523T355 371Q355 370 449 370Q544 370 544 371L586 526Q628 682 630 685Q636 694 646 694Q653 694 659 689T665 678Q665 670 645 593T605 444L585 371Q585 370 673 370H762Q777 362 777 350Q777 337 767 334T723 330H668H573L567 305Q560 282 545 226L530 171L646 170H721Q756 170 766 167T777 150Q777 138 762 130H640Q518 130 518 129L476 -26Q434 -182 432 -185Q426 -194 416 -194Q409 -194 403 -189T397 -178Q397 -170 417 -93T457 56L477 129Q477 130 383 130Q288 130 288 129L246 -26Q204 -182 202 -185Q196 -194 186 -194Q179 -194 173 -189T167 -178Q167 -170 187 -94T227 56L247 129Q247 130 159 130H70Q56 137 56 150Q56 165 72 170H259L265 195Q273 222 287 275L302 330H186L70 331Q63 334 58 339Q56 343 56 350ZM489 170L532 330H343L337 305Q330 282 315 226L300 171L394 170H489\",36:\"55 509Q55 585 103 638T213 701V750H286V703H289Q312 703 354 689Q372 682 399 666T427 646L413 569Q413 568 403 575Q352 615 291 624H286V405Q357 389 400 331T444 199Q444 128 402 69T286 -7V-56H213V-9Q167 -3 125 14T63 44T44 60Q44 61 52 101L59 140L69 132Q78 125 87 119T107 107T124 97T141 90T157 84T173 80T187 76T201 73T213 70V317L202 319Q141 335 98 386T55 509ZM213 424V620L203 615Q143 587 143 522Q143 455 213 424ZM356 187Q356 208 350 227T334 258T315 280T298 293T287 297Q286 297 286 186V75Q356 110 356 187\",37:\"56 549Q56 639 98 694T195 750Q248 750 290 694T332 548Q332 455 290 401T195 347Q141 347 99 403T56 549ZM248 549Q248 602 234 638T195 674Q145 674 145 549Q145 423 195 423Q219 423 233 459T248 549ZM197 -56Q187 -56 182 -49T176 -35Q176 -33 178 -27Q179 -25 399 356T623 741Q626 750 639 750Q648 750 654 744T659 729Q657 721 435 336T207 -52Q203 -56 197 -56ZM500 146Q500 235 542 291T639 347Q692 347 734 293T776 146Q776 53 733 -1T639 -56Q587 -56 544 -2T500 146ZM692 146Q692 199 678 235T639 271Q589 271 589 146Q589 20 639 20Q663 20 677 56T692 146\",38:\"156 502Q156 600 198 658T302 716Q367 716 405 665T444 549Q444 531 442 523Q426 446 304 348L287 334Q305 297 340 249T402 170T430 139T443 149T472 181T509 231T549 303T583 394Q584 398 586 404Q587 408 587 409Q588 409 626 399T665 388Q663 381 660 369T644 322T614 253T567 176T502 98L491 87Q534 57 584 57Q653 57 700 75Q702 75 702 34T700 -7Q652 -22 586 -22H580Q505 -22 434 26L421 34Q419 33 405 25T374 11T336 -4T285 -17T226 -22Q143 -22 93 31T42 152Q42 184 51 211T81 260T111 291T144 317L184 348L178 365Q156 430 156 502ZM359 552Q359 588 345 614T302 640Q292 640 282 636T260 622T241 590T233 535Q236 474 253 417L257 407L271 419Q312 454 330 479Q359 514 359 552ZM345 102Q262 190 216 277Q215 277 204 267T180 247T165 236Q135 208 135 159Q135 123 152 97T198 61Q207 58 227 58Q286 58 357 89L345 102\",39:\"90 596V694H188V597L139 471H89L104 532Q119 593 120 594Q120 596 105 596H90\",40:\"74 250Q74 564 240 733L257 750H333L323 739Q167 573 167 250T323 -239L333 -250H257L240 -233Q74 -63 74 250\",41:\"221 -73T221 250T65 739L55 750H131L148 733Q314 567 314 250T148 -233L131 -250H55L65 -239Q221 -73 221 250\",42:\"208 717Q211 731 222 740T250 750Q265 750 277 741T291 717Q291 706 290 675T286 617L285 591L329 622Q369 651 376 655T393 659Q411 659 423 647T436 616Q436 609 434 603T429 594T419 585T407 577T389 567T368 556L316 528L368 500Q421 472 429 464Q436 455 436 440Q436 422 423 409T393 396Q390 396 388 396T384 397T380 398T375 401T367 406T358 413T346 422T329 434L285 465Q284 465 285 438T289 381T291 347Q291 327 278 317T250 306Q234 306 222 315T208 339Q208 350 209 381T212 439L214 465L170 434Q130 405 123 401T106 397Q88 397 76 409T63 440Q63 447 65 453T70 462T80 471T92 479T110 489T131 500L183 528L131 556Q78 584 70 592Q63 601 63 616Q63 634 76 647T106 660Q109 660 111 660T115 659T119 658T124 655T132 650T141 643T153 634T170 622L214 591L212 617Q211 643 210 674T208 717\",43:\"56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250\",44:\"90 0V98H188V1L139 -125H89L104 -64Q119 -3 120 -2Q120 0 105 0H90\",45:\"11 186V259H277V186H11\",46:\"90 0V98H188V0H90\",47:\"423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750\",58:\"90 346V444H188V346H90ZM90 0V98H188V0H90\",59:\"90 346V444H188V346H90ZM90 0V98H188V1L139 -125H89L104 -64Q119 -3 120 -2Q120 0 105 0H90\",61:\"56 350Q56 363 70 370H707Q722 362 722 350Q722 339 708 331L390 330H72Q56 335 56 350ZM56 150Q56 165 72 170H708Q722 160 722 150Q722 138 707 130H70Q56 137 56 150\",63:\"55 652Q63 658 77 666T132 689T214 704T265 703Q303 698 332 684T376 653T401 615T413 578T416 546Q416 475 360 426Q325 396 303 365T273 303T263 256T261 216V186H183V225Q184 281 194 322Q206 368 232 409T276 469T306 495Q323 517 323 550Q323 596 297 612T223 629Q187 629 157 618Q122 607 91 583L83 576L55 652ZM173 0V98H271V0H173\",64:\"422 576Q440 576 456 573T480 566L488 563Q488 565 484 571T472 588T452 607T424 622T387 629Q294 629 220 550T146 347Q146 233 210 155T365 66Q376 65 400 65Q465 68 517 86L532 91H612L598 76Q511 -11 388 -11Q250 -11 153 93T56 347Q56 454 107 538T231 663T378 704Q446 704 492 680T564 608T599 506T611 376Q611 320 607 299Q595 227 546 173T422 118Q343 118 288 185T232 347Q232 444 287 510T422 576ZM520 347Q520 429 487 465T421 501Q385 501 354 461T323 347Q323 270 355 232T422 193Q454 193 487 229T520 347\",91:\"94 -250V750H266V674H181V-174H266V-250H94\",93:\"22 674V750H194V-250H22V-174H107V674H22\",94:\"146 612L212 694H287L353 612Q417 532 420 529Q421 528 418 527Q414 527 383 527H345L250 639Q244 633 199 580L154 527H116Q79 528 79 529Q82 532 146 612\",95:\"0 -114V-38H499V-114H0\",126:\"83 204Q86 254 113 290T186 327Q211 327 251 299T312 270Q337 270 340 315V327H416V316Q413 258 382 226T315 193Q289 193 249 221T187 250Q162 250 159 205V193H83V204\",305:\"74 0V444H164V0H74\",567:\"-35 -95Q-4 -126 34 -126Q58 -126 76 -116T100 -88Q102 -82 102 181V444H192V180Q191 -45 191 -70T184 -113Q171 -152 140 -178T63 -205Q34 -205 4 -197T-43 -181T-59 -171L-47 -133L-35 -95\",768:\"-415 692L-417 694H-324L-262 612Q-249 594 -233 572T-208 539L-200 528L-237 527H-275L-344 608Q-359 625 -378 647T-406 680T-415 692\",769:\"-239 612L-177 694H-84L-86 692Q-86 691 -95 681T-123 648T-157 608L-226 527H-264L-301 528L-293 539Q-285 550 -269 572T-239 612\",770:\"-354 612L-288 694H-213L-147 612Q-83 532 -80 529Q-79 528 -82 527Q-86 527 -117 527H-155L-250 639Q-256 633 -301 580L-346 527H-384Q-421 528 -421 529Q-418 532 -354 612\",771:\"-417 554Q-414 604 -387 640T-314 677Q-289 677 -249 649T-188 620Q-163 620 -160 665V677H-84V666Q-87 608 -118 576T-185 543Q-211 543 -251 571T-313 600Q-338 600 -341 555V543H-417V554\",772:\"-431 552V631H-70V552H-431\",774:\"-250 508Q-331 508 -379 567T-427 689V694H-351V685Q-348 649 -321 620T-250 591Q-206 591 -180 619T-150 685V694H-74V689Q-74 624 -122 566T-250 508\",775:\"-302 576V680H-198V576H-302\",776:\"-397 582V680H-299V582H-397ZM-202 582V680H-104V582H-202\",778:\"-319 611Q-319 649 -285 671T-211 694Q-164 694 -132 671T-99 611Q-99 572 -133 550T-209 527T-285 549T-319 611ZM-155 610Q-155 635 -171 643T-215 651Q-263 651 -263 610Q-263 570 -211 570H-209H-207Q-155 570 -155 610\",779:\"-250 693Q-317 544 -323 527H-399L-343 694H-296Q-250 694 -250 693ZM-84 693Q-151 544 -157 527H-233L-177 694H-130Q-84 694 -84 693\",780:\"-421 652Q-422 653 -419 654Q-415 654 -384 654H-346L-301 601Q-287 585 -275 571T-258 551T-250 542L-155 654H-117Q-80 653 -80 652Q-83 649 -147 569L-213 487H-288L-354 569Q-418 649 -421 652\",913:\"183 181Q183 179 152 91T118 0H28L154 346L280 693Q281 694 333 694H385L511 349Q636 4 638 2Q638 0 584 0H530L464 183H184L183 181ZM324 606Q319 578 292 492T238 332T210 256Q210 254 324 254T438 255L429 281L419 308Q409 336 395 378T365 465T339 551T324 611V606\",914:\"425 363Q438 363 465 353T526 324T585 270T610 192Q610 132 561 78T426 7Q404 2 387 2T240 0H90V694H227Q373 693 396 689Q484 673 533 623T583 517Q583 494 574 473T551 437T520 409T487 388T456 374T433 366L425 363ZM490 516Q490 527 485 539T467 568T423 599T347 621Q340 622 262 623H188V399H261H286Q432 399 478 475Q490 496 490 516ZM514 190Q514 245 462 280T343 322Q336 323 259 323H188V71H274Q365 72 388 77Q445 88 479 121T514 190\",915:\"87 0V691H499V611H345L191 612V0H87\",916:\"203 348L362 694H470L629 348Q789 2 790 1Q790 0 416 0T42 1Q43 2 203 348ZM630 98Q630 100 584 198T481 422T407 603L405 610L403 600Q388 544 191 122L180 99L405 98H630\",917:\"86 0V691H541V611H366L190 612V397H513V321H190V85H372L554 86V0H86\",918:\"69 617V694H555V643L373 362Q190 81 190 79H234Q244 79 272 79T344 80T419 81H560V0H55V53L237 334Q420 615 420 617Q413 618 387 618Q380 618 334 618T245 617H69\",919:\"86 0V694H190V399H517V694H621V0H517V323H190V0H86\",920:\"56 344Q56 430 86 502T164 619T271 690T388 716Q448 716 506 691T613 619T692 501T722 344Q722 188 624 84T389 -21Q252 -21 154 83T56 344ZM624 345Q624 423 597 488T513 596T380 639Q343 639 305 621T232 568T175 475T153 344Q153 216 222 136T388 56Q487 56 555 138T624 345ZM209 299V397H568V299H209\",921:\"87 0V694H191V0H87\",922:\"88 0V694H188V519L189 343L525 694H638L375 419L651 0H541L309 351L188 225V0H88\",923:\"294 606Q294 574 252 430T163 144T117 0H72Q28 0 28 1T141 348L254 694H357L469 348Q582 2 582 1T527 0L473 1L469 11Q469 13 427 141T343 411T296 599L294 610V606\",924:\"92 0V694H228L233 680Q236 675 284 547T382 275T436 106Q446 149 497 292T594 558L640 680L645 694H782V0H689V305L688 606Q688 577 500 78L479 23H392L364 96Q364 97 342 156T296 280T246 418T203 544T186 609V588Q185 568 185 517T185 427T185 305V0H92\",925:\"88 0V694H235L252 659Q261 639 364 428T526 84V694H619V0H472L455 35Q453 39 330 294T185 601L181 611V0H88\",926:\"47 600V688H619V600H47ZM111 314V401H555V314H111ZM42 0V88H624V0H42\",927:\"55 345Q55 504 149 609T361 715Q386 715 406 713Q521 696 600 592T680 344Q680 193 590 86T368 -22Q239 -22 147 84T55 345ZM276 59T368 59T518 146T576 360Q576 473 525 545T401 634Q371 637 362 637Q284 637 222 562T159 360T217 147\",928:\"86 0V691H621V0H517V615H190V0H86\",929:\"88 0V694H230Q347 693 370 692T410 686Q487 667 535 611T583 485Q583 409 527 348T379 276Q369 274 279 274H192V0H88ZM486 485Q486 523 471 551T432 593T391 612T357 621Q350 622 268 623H189V347H268Q350 348 357 349Q370 351 383 354T416 368T450 391T475 429T486 485\",931:\"55 0Q56 3 171 167T288 332Q288 334 172 474L55 615V694H666V614H428L190 615L412 347L322 218Q236 97 228 84L447 85H666V0H55\",932:\"36 608V688H644V608H518L392 609V0H288V609L162 608H36\",933:\"55 565Q59 625 105 670T219 716H222Q310 716 353 627Q376 583 386 524L389 510L393 532Q397 555 407 584T433 644T482 695T557 716Q621 716 669 673T722 565V555H629V563Q627 592 607 615T557 638Q530 638 511 629T479 598T459 553T447 488T442 411T441 319V202V0H337V202Q337 453 331 497Q313 634 226 638Q185 638 167 612T148 563V555H55V565\",934:\"666 347Q666 326 661 302T638 247T594 190T520 140T413 107H410V0H312V54Q312 107 311 107Q286 107 229 128T125 192Q55 260 55 347Q55 396 77 438T131 507T200 552T265 579T311 587Q312 587 312 641V694H410V587H413Q476 576 524 552T598 502T640 444T661 390T666 347ZM310 510Q305 510 291 507T252 492T208 464T172 416T157 347T171 279T204 233T247 205T286 190T310 184H312V347Q312 510 310 510ZM564 347Q564 385 549 416T514 463T470 491T433 505T414 509L410 510V184Q413 184 426 187T464 200T510 227T548 275T564 347\",935:\"14 0Q16 5 144 184T275 367L153 528Q121 571 88 615T42 674T28 694H150L228 584Q315 463 316 461L326 448L497 694H610L609 692Q606 689 492 528Q440 454 409 410T378 366Q378 365 515 182L652 0H531L326 292Q326 293 299 254T226 146L128 0H14\",936:\"340 187V694H438V187Q481 206 495 219Q518 239 533 267T553 332T560 386T562 435Q562 576 593 608Q608 621 637 621H670H722V545H719Q718 545 715 545T710 544Q679 536 666 487Q664 474 662 429T654 344T633 259T580 175T486 119Q450 109 438 108V0H340V108L326 110Q122 149 117 415Q116 460 111 487Q98 536 67 544Q65 544 62 544T58 545H55V621H107Q160 621 163 620Q191 613 202 573Q213 536 213 473T220 351T256 249Q262 239 270 230T285 216T301 205T316 197T329 192T340 187\",937:\"55 462Q55 561 141 638T359 716Q492 716 579 640T666 462Q666 407 642 347T579 222T529 126Q515 91 515 86Q517 85 528 85Q530 85 552 85T596 86H677V0H425V14Q429 79 465 168L492 228Q494 232 504 254T516 283T527 310T539 340T548 368T556 399T560 428T562 460Q562 531 510 585T361 639Q263 639 211 585T159 460Q159 422 170 378T192 309T229 228L256 168Q292 79 296 14V0H44V86H125Q146 86 168 86T193 85L206 86Q206 103 183 148T131 241T79 352T55 462\",8211:\"0 236V312H499V236H0\",8212:\"0 236V312H999V236H0\",8213:\"0 236V312H999V236H0\",8215:\"0 -114V-38H499V-114H0\",8216:\"90 568L140 694H189L174 633Q159 572 158 571Q158 569 173 569H188V471H90V568\",8217:\"90 596V694H188V597L139 471H89L104 532Q119 593 120 594Q120 596 105 596H90\",8220:\"174 568L224 694H273L258 633Q243 572 242 571Q242 569 257 569H272V471H174V568ZM368 568L418 694H467L452 633Q437 572 436 571Q436 569 451 569H466V471H368V568\",8221:\"33 596V694H131V597L82 471H32L47 532Q62 593 63 594Q63 596 48 596H33ZM227 596V694H325V597L276 471H226L241 532Q256 593 257 594Q257 596 242 596H227\",8260:\"423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750\",8710:\"203 348L362 694H470L629 348Q789 2 790 1Q790 0 416 0T42 1Q43 2 203 348ZM630 98Q630 100 584 198T481 422T407 603L405 610L403 600Q388 544 191 122L180 99L405 98H630\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sansSerif=void 0,e.sansSerif={33:[.694,0,.319],34:[.694,-.471,.5],35:[.694,.194,.833],36:[.75,.056,.5],37:[.75,.056,.833],38:[.716,.022,.758],39:[.694,-.471,.278],40:[.75,.25,.389],41:[.75,.25,.389],42:[.75,-.306,.5],43:[.583,.082,.778],44:[.098,.125,.278],45:[.259,-.186,.333],46:[.098,0,.278],47:[.75,.25,.5],58:[.444,0,.278],59:[.444,.125,.278],61:[.37,-.13,.778],63:[.704,0,.472],64:[.704,.011,.667],91:[.75,.25,.289],93:[.75,.25,.289],94:[.694,-.527,.5],95:[-.038,.114,.5],126:[.327,-.193,.5],305:[.444,0,.239],567:[.444,.205,.267],768:[.694,-.527,0],769:[.694,-.527,0],770:[.694,-.527,0],771:[.677,-.543,0],772:[.631,-.552,0],774:[.694,-.508,0],775:[.68,-.576,0],776:[.68,-.582,0],778:[.694,-.527,0],779:[.694,-.527,0],780:[.654,-.487,0],913:[.694,0,.667],914:[.694,0,.667],915:[.691,0,.542],916:[.694,0,.833],917:[.691,0,.597],918:[.694,0,.611],919:[.694,0,.708],920:[.716,.021,.778],921:[.694,0,.278],922:[.694,0,.694],923:[.694,0,.611],924:[.694,0,.875],925:[.694,0,.708],926:[.688,0,.667],927:[.715,.022,.736],928:[.691,0,.708],929:[.694,0,.639],931:[.694,0,.722],932:[.688,0,.681],933:[.716,0,.778],934:[.694,0,.722],935:[.694,0,.667],936:[.694,0,.778],937:[.716,0,.722],8211:[.312,-.236,.5],8212:[.312,-.236,1],8213:[.312,-.236,1],8215:[-.038,.114,.5],8216:[.694,-.471,.278],8217:[.694,-.471,.278],8220:[.694,-.471,.5],8221:[.694,-.471,.5],8260:[.75,.25,.5],8710:[.694,0,.833]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.scriptBold=void 0,e.scriptBold={}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.script=void 0,e.script={}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.smallop=void 0;var r=Q(6),T=Q(248);e.smallop=r.AddPaths(T.smallop,{40:\"152 251Q152 646 388 850H416Q422 844 422 841Q422 837 403 816T357 753T302 649T255 482T236 250Q236 124 255 19T301 -147T356 -251T403 -315T422 -340Q422 -343 416 -349H388Q359 -325 332 -296T271 -213T212 -97T170 56T152 251\",41:\"305 251Q305 -145 69 -349H56Q43 -349 39 -347T35 -338Q37 -333 60 -307T108 -239T160 -136T204 27T221 250T204 473T160 636T108 740T60 807T35 839Q35 850 50 850H56H69Q197 743 256 566Q305 425 305 251\",47:\"481 838Q489 850 500 850Q508 850 515 844T522 827Q521 824 311 248T96 -337Q90 -349 77 -349Q68 -349 62 -343T55 -326Q56 -323 266 253T481 838\",91:\"202 -349V850H394V810H242V-309H394V-349H202\",92:\"522 -326Q522 -337 515 -343T500 -349Q487 -349 481 -337Q477 -328 267 248T55 827Q54 835 60 842T76 850Q89 850 96 838Q100 829 310 253T522 -326\",93:\"22 810V850H214V-349H22V-309H174V810H22\",123:\"477 -343L471 -349H458Q432 -349 367 -325T273 -263Q258 -245 250 -212L249 -51Q249 -27 249 12Q248 118 244 128Q243 129 243 130Q220 189 121 228Q109 232 107 235T105 250Q105 256 105 257T105 261T107 265T111 268T118 272T128 276T142 283T162 291Q224 324 243 371Q243 372 244 373Q248 384 249 469Q249 475 249 489Q249 528 249 552L250 714Q253 728 256 736T271 761T299 789T347 816T422 843Q440 849 441 849H443Q445 849 447 849T452 850T457 850H471L477 844V830Q477 820 476 817T470 811T459 807T437 801T404 785Q353 760 338 724Q333 710 333 550Q333 526 333 492T334 447Q334 393 327 368T295 318Q257 280 181 255L169 251L184 245Q318 198 332 112Q333 106 333 -49Q333 -209 338 -223Q351 -255 391 -277T469 -309Q477 -311 477 -329V-343\",125:\"110 849L115 850Q120 850 125 850Q151 850 215 826T309 764Q324 747 332 714L333 552Q333 528 333 489Q334 383 338 373Q339 372 339 371Q353 336 391 310T469 271Q477 268 477 251Q477 241 476 237T472 232T456 225T428 214Q357 179 339 130Q339 129 338 128Q334 117 333 32Q333 26 333 12Q333 -27 333 -51L332 -212Q328 -228 323 -240T302 -271T255 -307T175 -338Q139 -349 125 -349T108 -346T105 -329Q105 -314 107 -312T130 -304Q233 -271 248 -209Q249 -203 249 -49V57Q249 106 253 125T273 167Q307 213 398 245L413 251L401 255Q265 300 250 389Q249 395 249 550Q249 710 244 724Q224 774 112 811Q105 813 105 830Q105 845 110 849\",710:\"279 669Q273 669 142 610T9 551L0 569Q-8 585 -8 587Q-8 588 -7 588L12 598Q30 608 66 628T136 666L277 744L564 587L555 569Q549 556 547 554T544 552Q539 555 410 612T279 669\",732:\"374 597Q337 597 269 627T160 658Q101 658 34 606L24 597L12 611Q1 624 1 626Q1 627 27 648T55 671Q120 722 182 722Q219 722 286 692T395 661Q454 661 521 713L531 722L543 708Q554 695 554 693Q554 692 528 671T500 648Q434 597 374 597\",770:\"-277 669Q-283 669 -414 610T-547 551L-556 569Q-564 585 -564 587Q-564 588 -563 588L-544 598Q-526 608 -490 628T-420 666L-279 744L8 587L-1 569Q-7 556 -9 554T-12 552Q-17 555 -146 612T-277 669\",771:\"-182 597Q-219 597 -287 627T-396 658Q-455 658 -522 606L-532 597L-544 611Q-555 624 -555 626Q-555 627 -529 648T-501 671Q-436 722 -374 722Q-337 722 -270 692T-161 661Q-102 661 -35 713L-25 722L-13 708Q-2 695 -2 693Q-2 692 -28 671T-56 648Q-122 597 -182 597\",8214:\"257 0V602H300V0H257ZM478 0V602H521V0H478\",8260:\"481 838Q489 850 500 850Q508 850 515 844T522 827Q521 824 311 248T96 -337Q90 -349 77 -349Q68 -349 62 -343T55 -326Q56 -323 266 253T481 838\",8593:\"112 421L120 424Q127 427 136 430T161 441T191 458T224 481T260 510T295 546T328 591L333 600L340 589Q380 527 431 489T555 421V377L543 381Q445 418 368 492L355 504V0H312V504L299 492Q222 418 124 381L112 377V421\",8595:\"312 96V600H355V96L368 108Q445 182 543 219L555 223V179L546 176Q538 173 529 169T505 158T475 141T442 119T407 90T372 53T339 9L334 0L327 11Q287 73 236 111T112 179V223L124 219Q222 182 299 108L312 96\",8657:\"142 329Q300 419 389 599Q389 598 399 579T420 541T452 494T497 438T558 383T636 329T708 294L721 289V246Q718 246 694 256T623 293T532 356L522 364L521 182V0H478V405L466 417Q436 450 389 516Q388 515 378 500T352 463T312 417L300 405V0H257V364L247 356Q202 320 155 293T82 256L57 246V289L70 294Q101 305 142 329\",8659:\"257 236V600H300V195L312 183Q342 150 389 84Q390 85 400 100T426 137T466 183L478 195V600H521V418L522 236L532 244Q576 280 623 307T696 344L721 354V311L708 306Q677 295 636 271Q478 181 389 1Q389 2 379 21T358 59T326 106T281 162T220 217T142 271T70 306L57 311V354Q60 354 83 345T154 308T247 244L257 236\",8719:\"158 656Q147 684 131 694Q110 707 69 710H55V750H888V710H874Q840 708 820 698T795 678T786 656V-155Q798 -206 874 -210H888V-250H570V-210H584Q618 -208 638 -197T663 -178T673 -155V710H270V277L271 -155Q283 -206 359 -210H373V-250H55V-210H69Q103 -208 123 -197T148 -178T158 -155V656\",8720:\"158 656Q147 684 131 694Q110 707 69 710H55V750H373V710H359Q325 708 305 698T280 678T271 656L270 223V-210H673V656Q666 672 663 679T639 697T584 710H570V750H888V710H874Q840 708 820 698T795 678T786 656V-155Q798 -206 874 -210H888V-250H55V-210H69Q103 -208 123 -197T148 -178T158 -155V656\",8721:\"61 748Q64 750 489 750H913L954 640Q965 609 976 579T993 533T999 516H979L959 517Q936 579 886 621T777 682Q724 700 655 705T436 710H319Q183 710 183 709Q186 706 348 484T511 259Q517 250 513 244L490 216Q466 188 420 134T330 27L149 -187Q149 -188 362 -188Q388 -188 436 -188T506 -189Q679 -189 778 -162T936 -43Q946 -27 959 6H999L913 -249L489 -250Q65 -250 62 -248Q56 -246 56 -239Q56 -234 118 -161Q186 -81 245 -11L428 206Q428 207 242 462L57 717L56 728Q56 744 61 748\",8730:\"263 249Q264 249 315 130T417 -108T470 -228L725 302Q981 837 982 839Q989 850 1001 850Q1008 850 1013 844T1020 832V826L741 243Q645 43 540 -176Q479 -303 469 -324T453 -348Q449 -350 436 -350L424 -349L315 -96Q206 156 205 156L171 130Q138 104 137 104L111 130L263 249\",8739:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612\",8741:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612ZM368 612Q373 627 388 627Q404 627 409 612Q410 610 410 306T409 0Q406 -15 389 -15Q371 -15 368 0V10Q368 19 368 35T368 73T368 122T367 179T367 241T367 306T367 370T367 433T367 489T368 538T368 576T368 602V612\",8747:\"113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q220 -247 232 -218T251 -133T262 -15T276 155T297 367Q300 390 305 438T314 512T325 580T340 647T361 703T390 751T428 784T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q475 768 460 756T434 716T418 652T407 559T398 444T387 300T369 133Q349 -38 337 -102T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244\",8748:\"113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q220 -247 232 -218T251 -133T262 -15T276 155T297 367Q300 390 305 438T314 512T325 580T340 647T361 703T390 751T428 784T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q475 768 460 756T434 716T418 652T407 559T398 444T387 300T369 133Q349 -38 337 -102T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244ZM460 -244Q460 -246 466 -251T486 -263T514 -269Q532 -269 546 -260Q567 -247 579 -218T598 -133T609 -15T623 155T644 367Q647 390 652 438T661 512T672 580T687 647T708 703T737 751T775 784T826 804Q828 804 835 804T848 805Q899 802 928 769T957 695Q957 669 941 657T908 645Q889 645 874 658T859 694Q859 705 863 714T873 729T885 737T895 742L899 743Q899 745 892 751T872 762T845 768Q822 768 807 756T781 716T765 652T754 559T745 444T734 300T716 133Q696 -38 684 -102T650 -207Q603 -306 516 -306Q466 -306 434 -272T402 -196Q402 -170 418 -158T451 -146Q470 -146 485 -159T500 -195Q500 -206 496 -215T486 -230T474 -238T464 -242L460 -244\",8749:\"113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q220 -247 232 -218T251 -133T262 -15T276 155T297 367Q300 390 305 438T314 512T325 580T340 647T361 703T390 751T428 784T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q475 768 460 756T434 716T418 652T407 559T398 444T387 300T369 133Q349 -38 337 -102T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244ZM460 -244Q460 -246 466 -251T486 -263T514 -269Q532 -269 546 -260Q567 -247 579 -218T598 -133T609 -15T623 155T644 367Q647 390 652 438T661 512T672 580T687 647T708 703T737 751T775 784T826 804Q828 804 835 804T848 805Q899 802 928 769T957 695Q957 669 941 657T908 645Q889 645 874 658T859 694Q859 705 863 714T873 729T885 737T895 742L899 743Q899 745 892 751T872 762T845 768Q822 768 807 756T781 716T765 652T754 559T745 444T734 300T716 133Q696 -38 684 -102T650 -207Q603 -306 516 -306Q466 -306 434 -272T402 -196Q402 -170 418 -158T451 -146Q470 -146 485 -159T500 -195Q500 -206 496 -215T486 -230T474 -238T464 -242L460 -244ZM807 -244Q807 -246 813 -251T833 -263T861 -269Q880 -269 893 -260Q914 -247 926 -218T945 -133T956 -15T970 155T991 367Q994 390 999 438T1008 512T1019 580T1034 647T1055 703T1084 751T1122 784T1173 804Q1175 804 1182 804T1195 805Q1246 802 1275 769T1304 695Q1304 669 1288 657T1255 645Q1236 645 1221 658T1206 694Q1206 705 1210 714T1220 729T1232 737T1242 742L1246 743Q1246 745 1239 751T1219 762T1192 768Q1169 768 1154 756T1128 716T1112 652T1101 559T1092 444T1081 300T1063 133Q1043 -38 1031 -102T997 -207Q950 -306 863 -306Q813 -306 781 -272T749 -196Q749 -170 765 -158T798 -146Q817 -146 832 -159T847 -195Q847 -206 843 -215T833 -230T821 -238T811 -242L807 -244\",8750:\"269 74L256 80Q244 85 227 97T191 128T161 179T148 250Q148 332 199 379T302 433L306 434L307 444Q309 456 313 495T321 553T331 607T345 664T365 712T393 756T431 785T479 804Q481 804 488 804T501 805Q552 802 581 769T610 695Q610 669 594 657T561 645Q542 645 527 658T512 694Q512 705 516 714T526 729T538 737T548 742L552 743Q552 745 545 751T525 762T498 768Q471 768 454 752T427 693T414 626T406 536Q405 530 405 527L397 425L404 422Q410 419 421 413T445 399T470 376T494 345T511 303T518 250Q518 205 502 169T460 112T410 80T364 66L360 65L359 55Q357 38 353 4T346 -43T340 -81T333 -118T326 -148T316 -179T303 -207Q256 -306 169 -306Q119 -306 87 -272T55 -196Q55 -170 71 -158T104 -146Q123 -146 138 -159T153 -195Q153 -206 149 -215T139 -230T127 -238T117 -242L113 -244Q113 -246 119 -251T139 -263T167 -269Q186 -269 199 -260Q231 -241 242 -183T266 33L269 74ZM272 122Q272 156 300 391Q300 392 299 392Q287 392 263 379T213 331T187 249Q187 211 205 180T239 137T272 116V122ZM366 107Q378 107 402 119T453 167T479 249Q479 340 394 383V377Q394 375 394 374T393 371T393 366T392 357T391 342T389 321T386 291T382 251T377 199T369 133Q366 112 366 107\",8896:\"119 -249T97 -249T65 -235T55 -207Q55 -201 56 -198Q58 -190 218 268T380 729Q392 750 416 750Q438 750 451 732Q453 728 534 498T695 36L775 -194Q777 -204 777 -208Q777 -222 767 -235T735 -249Q713 -249 700 -231Q696 -225 557 177L416 579L276 177Q136 -226 132 -231Q119 -249 97 -249\",8897:\"55 708Q55 729 68 739T96 750Q119 750 132 731Q136 726 276 323L416 -79L557 323Q696 725 700 731Q713 749 735 749Q756 749 766 736T777 708Q777 700 696 466T533 1T451 -232Q436 -249 416 -249Q402 -249 391 -241Q384 -236 380 -226Q368 -198 219 230Q55 697 55 708\",8898:\"139 -217Q127 -241 114 -246Q106 -249 97 -249Q67 -249 57 -220Q55 -214 55 102Q55 152 55 221T54 312Q54 422 60 464T91 554Q120 612 165 654T257 714T337 741T392 749Q393 750 402 750Q414 750 422 749Q557 749 660 659T776 430Q777 422 777 102Q777 -214 775 -220Q765 -249 735 -249Q716 -249 708 -241T694 -217L692 428L690 441Q674 540 597 603T416 666H409Q388 666 364 662T294 638T212 581Q156 523 142 441L140 428L139 105V-217\",8899:\"96 750Q103 750 109 748T120 744T127 737T133 730T137 723T139 718V395L140 73L142 60Q159 -43 237 -104T416 -166Q521 -166 597 -103T690 60L692 73L694 718Q708 749 735 749Q765 749 775 720Q777 714 777 398Q777 78 776 71Q766 -51 680 -140Q571 -249 416 -249H411Q261 -249 152 -140Q66 -51 56 71Q55 78 55 398Q55 714 57 720Q60 734 70 740Q80 750 96 750\",8968:\"202 -349V850H449V810H242V-349H202\",8969:\"22 810V850H269V-349H229V810H22\",8970:\"202 -349V850H242V-309H449V-349H202\",8971:\"229 -309V850H269V-349H22V-309H229\",9001:\"373 850Q392 850 394 832Q394 825 267 538L139 250L267 -38Q394 -325 394 -332Q392 -350 375 -350Q361 -350 356 -338Q354 -331 289 -186T161 103T97 250T160 397T289 685T356 838Q362 850 373 850\",9002:\"77 832Q77 837 82 843T98 850Q110 849 115 838Q117 831 182 686T310 397T374 250T311 103T182 -185T115 -338Q110 -350 96 -350Q79 -350 77 -332Q77 -325 204 -38L332 250L204 538Q77 825 77 832\",9168:\"312 0V602H355V0H312\",10072:\"146 612Q151 627 166 627Q182 627 187 612Q188 610 188 306T187 0Q184 -15 166 -15Q149 -15 146 0V10Q146 19 146 35T146 73T146 122T145 179T145 241T145 306T145 370T145 433T145 489T146 538T146 576T146 602V612\",10216:\"373 850Q392 850 394 832Q394 825 267 538L139 250L267 -38Q394 -325 394 -332Q392 -350 375 -350Q361 -350 356 -338Q354 -331 289 -186T161 103T97 250T160 397T289 685T356 838Q362 850 373 850\",10217:\"77 832Q77 837 82 843T98 850Q110 849 115 838Q117 831 182 686T310 397T374 250T311 103T182 -185T115 -338Q110 -350 96 -350Q79 -350 77 -332Q77 -325 204 -38L332 250L204 538Q77 825 77 832\",10752:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM555 -165Q672 -165 767 -108T916 44T970 250Q970 418 861 532T600 664Q591 665 548 665Q446 665 353 614T200 466T140 250V243Q140 88 248 -30Q262 -46 280 -62T338 -105T434 -148T555 -165ZM478 250Q478 288 503 307T551 326Q586 326 609 305T632 250Q632 217 610 196T555 174T500 196T478 250\",10753:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM513 478Q513 664 512 664Q504 664 481 660T406 637T313 588Q281 564 255 537T211 483T181 431T161 382T150 342T144 310T141 292H513V478ZM798 588Q758 616 711 634T639 658T602 663L597 664V292H969Q969 293 967 309T960 341T949 381T930 430T900 482T856 537T798 588ZM513 -164V208H141Q142 205 144 189T149 160T158 125T173 83T196 39T229 -9Q249 -34 273 -55T318 -92T363 -119T405 -138T444 -150T475 -158T499 -162T513 -164ZM775 -103Q801 -87 823 -68T863 -30T894 10T919 49T937 88T950 123T959 154T964 180T968 198L969 208H597V-164Q599 -163 616 -161T647 -155T683 -145T728 -128T775 -103\",10754:\"555 -250Q420 -250 306 -185T124 -4T56 250Q56 453 193 595T526 749Q528 750 539 750Q554 750 562 749Q688 749 800 687T983 508T1054 250Q1054 112 987 -3T806 -184T555 -250ZM600 664Q591 665 548 665Q414 665 306 583L292 573L423 441L555 310L687 441L818 573L804 583Q714 650 600 664ZM364 118L495 250L364 382L232 513L223 500Q140 391 140 250Q140 107 223 0L232 -13L364 118ZM970 250Q970 389 887 501L878 512Q878 513 861 496T812 447T746 381L615 250L746 118L878 -13L887 0Q970 109 970 250ZM687 59L555 190L423 59L292 -73L306 -83Q416 -166 555 -166T804 -83L818 -73L687 59\",10756:\"96 750Q103 750 109 748T120 744T127 737T133 730T137 723T139 718V395L140 73L142 60Q159 -43 237 -104T416 -166Q521 -166 597 -103T690 60L692 73L694 718Q708 749 735 749Q765 749 775 720Q777 714 777 398Q777 78 776 71Q766 -51 680 -140Q571 -249 416 -249H411Q261 -249 152 -140Q66 -51 56 71Q55 78 55 398Q55 714 57 720Q60 734 70 740Q80 750 96 750ZM223 276Q223 282 224 287T227 296T232 302T238 308T243 313T250 316L254 319H374V376V406Q374 438 382 454T418 470Q443 467 450 453T458 410V376V319H579Q580 319 583 317T589 313T594 308T600 302T604 295T608 287T609 276Q609 253 587 241Q577 235 513 235H458V178Q458 176 458 166T459 148Q459 84 415 84Q401 84 390 93T375 117Q374 120 374 178V235H319Q317 235 307 235T290 234Q223 234 223 276\",10758:\"777 -217Q766 -244 745 -249H88Q64 -242 57 -220Q55 -214 55 250T57 720Q60 734 70 740Q80 750 96 750Q127 750 137 720Q139 714 139 274V-166H693V274Q693 714 695 720Q705 749 735 749Q766 749 775 719Q777 713 777 248V-217\",12296:\"373 850Q392 850 394 832Q394 825 267 538L139 250L267 -38Q394 -325 394 -332Q392 -350 375 -350Q361 -350 356 -338Q354 -331 289 -186T161 103T97 250T160 397T289 685T356 838Q362 850 373 850\",12297:\"77 832Q77 837 82 843T98 850Q110 849 115 838Q117 831 182 686T310 397T374 250T311 103T182 -185T115 -338Q110 -350 96 -350Q79 -350 77 -332Q77 -325 204 -38L332 250L204 538Q77 825 77 832\"},{10764:\"\\u222c\\u222c\"})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.smallop=void 0,e.smallop={40:[.85,.349,.458],41:[.85,.349,.458],47:[.85,.349,.578],91:[.85,.349,.417],92:[.85,.349,.578],93:[.85,.349,.417],123:[.85,.349,.583],125:[.85,.349,.583],710:[.744,-.551,.556],732:[.722,-.597,.556],770:[.744,-.551,0],771:[.722,-.597,0],8214:[.602,0,.778],8260:[.85,.349,.578],8593:[.6,0,.667],8595:[.6,0,.667],8657:[.599,0,.778],8659:[.6,0,.778],8719:[.75,.25,.944],8720:[.75,.25,.944],8721:[.75,.25,1.056],8730:[.85,.35,1,{ic:.02}],8739:[.627,.015,.333],8741:[.627,.015,.556],8747:[.805,.306,.472,{ic:.138}],8748:[.805,.306,.819,{ic:.138}],8749:[.805,.306,1.166,{ic:.138}],8750:[.805,.306,.472,{ic:.138}],8896:[.75,.249,.833],8897:[.75,.249,.833],8898:[.75,.249,.833],8899:[.75,.249,.833],8968:[.85,.349,.472],8969:[.85,.349,.472],8970:[.85,.349,.472],8971:[.85,.349,.472],9001:[.85,.35,.472],9002:[.85,.35,.472],9168:[.602,0,.667],10072:[.627,.015,.333],10216:[.85,.35,.472],10217:[.85,.35,.472],10752:[.75,.25,1.111],10753:[.75,.25,1.111],10754:[.75,.25,1.111],10756:[.75,.249,.833],10758:[.75,.249,.833],10764:[.805,.306,1.638,{ic:.138}],12296:[.85,.35,.472],12297:[.85,.35,.472]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texCalligraphicBold=void 0;var r=Q(6),T=Q(250);e.texCalligraphicBold=r.AddPaths(T.texCalligraphicBold,{65:\"761 751Q784 751 784 728V711Q784 570 795 417T820 191Q844 76 865 76Q868 76 902 93T962 112H973Q989 104 989 94Q989 92 987 86Q978 47 846 -11Q812 -25 779 -26Q722 -26 708 9Q688 47 669 161H524L379 162L359 136Q286 43 234 -3T142 -49T71 -19T39 55Q39 92 60 131T103 174Q113 174 117 167T124 149T136 128T166 110Q183 105 190 105Q230 105 341 246Q401 322 453 397T531 514T582 601T611 651H640V663Q640 692 676 718T745 750Q747 750 752 750T761 751ZM658 266Q653 312 649 377T644 489T641 541V556L557 415Q500 325 448 253Q467 261 524 261H568H658V266\",66:\"441 83Q571 83 571 195Q571 246 538 279T466 322T386 333Q378 333 357 330T329 327Q307 327 307 345Q307 354 313 365T347 396T419 430Q546 472 581 498Q594 508 594 535Q594 574 567 589T508 604Q469 604 442 583Q390 546 342 457T265 256Q237 148 186 60Q167 29 144 13Q105 -15 68 -17H65Q40 -17 40 1Q40 7 53 29T87 100T124 210Q162 373 190 575Q188 575 174 567T138 550T98 542Q75 542 75 560Q75 588 123 618Q135 625 203 659T281 696Q299 703 316 703Q339 703 339 685Q339 656 328 583L333 588Q338 592 346 599T367 615T394 634T428 654T467 674T511 690T559 701T611 705Q651 704 681 689Q739 659 739 598Q739 507 595 427L584 421Q585 420 595 416T610 410T626 402T644 392T660 380T677 365T691 347T703 325T710 299T715 268Q717 193 665 130Q622 73 531 28T348 -17Q275 -17 225 10Q206 19 200 24T193 36Q193 57 231 86T311 119H322Q386 83 441 83\",67:\"243 -20Q135 -20 78 48T20 218Q20 280 39 344T98 470T193 580T324 661T488 702H490Q491 702 493 702T498 703T507 703T518 702H526Q599 702 599 631Q599 597 577 550T541 486Q523 463 490 447T431 430Q423 430 419 433Q409 437 409 450Q410 456 432 499T454 567Q454 586 446 594T415 603Q316 603 254 532Q216 487 190 421T164 284Q164 228 181 186T226 122T282 90T340 80Q377 80 405 96T449 131T492 167T553 187H555Q580 187 580 168Q580 153 551 123T476 60T367 4T243 -20\",68:\"107 0Q92 5 92 18Q92 33 113 53T160 86Q170 91 182 94T197 100L206 120Q248 226 273 337T304 501T309 585Q278 585 234 577T179 557Q172 550 166 532T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q281 686 447 686H480H517Q692 686 784 631Q885 571 885 450Q885 339 805 239T586 75T286 1Q276 0 187 0H107ZM741 391Q741 424 731 452T694 510T613 558T481 584Q476 584 468 584T457 585L449 586V579Q441 501 425 424T391 292T357 193T330 125T319 100H324Q511 100 628 175Q688 215 714 275T741 391\",69:\"495 516Q485 516 478 520T470 532Q470 537 476 550T482 570Q482 589 465 596T401 603Q344 603 319 582Q295 558 295 519Q295 493 312 474T355 445T407 432T455 427Q477 427 477 409Q477 395 453 371T389 333Q380 330 345 327T279 312T223 272Q181 223 181 176Q181 131 225 107T324 83Q366 83 395 98T448 136T487 167Q517 185 547 187H551Q574 187 574 170Q574 151 535 113T421 36T271 -15Q260 -16 226 -16Q181 -16 152 -9Q104 4 71 33T37 111Q37 140 50 176T106 263T216 356Q215 357 207 362T190 374T172 392T156 419T150 456Q150 521 208 580T341 670T474 702Q475 703 499 703Q528 703 547 701T586 693T615 673T627 637Q627 584 581 550T495 516\",70:\"812 567Q804 567 795 570T786 579Q786 586 647 586H559L558 582Q558 575 539 510T506 407L498 384H775Q788 378 790 368Q790 328 746 298T665 268Q646 268 642 284H457L447 261Q396 150 360 94Q329 46 270 8T149 -30Q123 -30 100 -24T63 -10T37 9T22 26T17 36Q17 59 56 88T135 119Q145 119 149 117T165 104Q187 78 227 72Q232 72 234 76Q245 93 273 145T350 323T424 570L428 586H276Q265 575 239 563T190 551Q180 551 174 556T167 569Q167 580 179 597T213 634T278 668T371 685Q374 686 624 686Q863 685 888 682Q917 678 927 663Q930 658 930 650Q930 624 888 596T812 567\",71:\"50 279Q50 361 88 438T190 570T335 661T503 702H514Q524 703 532 703Q671 703 671 626Q671 580 614 514T495 447Q472 447 472 465Q472 477 499 511T527 562Q527 582 507 592T433 602Q351 602 302 569Q252 535 223 469T194 344Q194 266 237 217T352 168Q401 168 442 205T505 316Q515 345 551 368T622 393H625Q649 393 649 376Q649 371 635 318T612 237Q580 129 540 62T442 -49Q353 -114 264 -114Q259 -114 252 -114L246 -113Q190 -113 142 -107T81 -96Q71 -90 71 -81Q71 -57 110 -30T187 2Q196 2 236 -4T338 -14Q371 -14 377 -9Q410 24 446 113L451 127Q353 68 253 68Q157 68 104 129T50 279\",72:\"42 447Q20 447 20 465Q20 481 47 515T119 589T239 657T392 686Q443 686 463 664T484 616Q484 570 473 506T452 401L441 360Q441 359 550 359H660L663 370Q684 435 716 522T758 624Q771 646 806 666T870 686Q894 686 894 668Q894 667 867 597T804 416T752 218Q737 135 737 93Q737 77 746 65T778 53Q799 53 803 54T814 63Q831 86 864 103T924 120Q946 120 946 100Q945 85 931 63T888 16T806 -27T684 -48H681Q625 -48 603 -10Q593 4 593 29Q593 71 603 131T624 230L634 269Q632 269 624 266Q610 261 600 261T507 259H411L399 222Q344 62 322 21Q301 -7 268 -24T209 -41H207Q187 -41 185 -25Q185 -17 192 2T220 71T261 184Q284 256 284 258Q284 259 227 259H170Q169 259 166 261T162 264T158 266T156 271T155 277Q155 296 184 320T250 356Q259 358 286 359Q312 359 312 360Q314 372 318 385Q332 450 339 526Q339 530 339 535T340 543Q340 586 296 586Q255 586 227 576T188 553T165 523T146 497Q127 476 97 462T42 447\",73:\"56 499Q32 499 32 516Q32 540 64 580T165 649Q241 682 365 685Q366 685 376 685T405 685T445 686T496 686T553 686H732Q746 677 746 668Q746 646 711 620T642 587L572 586H503Q479 546 458 479T424 352T383 224T318 111L309 101L412 100H514L523 109Q567 150 618 153Q644 153 644 135Q644 132 642 124Q629 86 581 52T476 6Q454 2 433 2T216 0Q-11 0 -15 2Q-27 6 -27 18Q-27 37 2 61T59 93Q77 100 142 100H198Q255 177 299 369Q337 513 382 574L391 586H348Q261 586 176 576Q163 543 124 521T56 499\",74:\"286 390Q263 390 263 407Q263 432 293 481T367 566Q511 687 724 687Q738 687 761 687T793 686H923Q937 677 937 668Q937 648 905 623T842 589Q829 587 817 586T802 585T795 583T788 578Q709 506 632 189Q622 153 615 134T588 81T537 17Q482 -39 404 -76T247 -114Q192 -114 158 -100Q53 -61 53 32Q53 59 58 73T79 102Q126 147 177 147Q200 147 200 128Q200 123 198 112T196 96Q196 47 238 17T345 -13Q362 -13 377 -9T404 0T426 16T444 34T459 55T470 76T478 97T483 116T488 132L490 141Q511 222 520 257T554 364T608 486T675 576L685 586H634H612Q532 586 484 564Q453 549 436 526T409 478T395 447Q378 424 345 407T286 390\",75:\"98 542Q75 542 75 560Q75 588 123 618Q132 624 199 657T275 694Q291 703 315 703Q327 703 332 699T338 690T339 670Q339 596 323 505T283 337T237 194T198 90L181 53Q170 31 136 8T68 -17H65Q40 -17 40 0L76 92Q112 185 150 322T194 564V578L168 565Q125 542 98 542ZM834 142Q834 125 819 100T774 48T692 3T576 -16H560Q540 -16 508 6Q469 33 422 108T342 267T309 398Q309 411 310 417T320 442T347 482Q401 542 517 615T710 702Q712 702 721 702T735 703Q772 703 791 690Q819 674 819 646T792 597T733 574H722Q704 584 704 599Q706 607 700 610T672 617L660 613Q609 595 524 538T423 450V440Q423 376 488 247T604 83Q621 70 640 70Q677 70 701 82Q713 87 718 101T737 132T783 160Q792 163 807 163Q834 163 834 142\",76:\"63 -17Q41 -17 41 0Q41 22 85 54Q101 68 113 92T133 141T154 219T182 315Q230 462 306 553Q345 599 391 632T478 678T543 697T582 703Q584 703 589 703T598 702Q643 702 666 676T689 613Q689 588 683 575Q674 551 632 524T552 496Q530 496 530 512Q530 517 531 525T533 538Q533 559 522 577T480 596H476Q462 596 451 588T415 544Q350 447 310 281Q284 181 261 136L255 124H285Q342 123 441 107T583 90L596 89Q603 116 647 144T729 173Q751 173 751 157Q751 118 685 60T523 -15Q514 -16 479 -16Q421 -16 320 0T171 18H155L142 10Q98 -17 63 -17\",77:\"38 20Q38 59 60 99T104 139Q106 139 126 125T176 106H181Q200 106 221 139T286 281Q322 370 342 451T368 581T376 634Q384 657 420 680T487 703Q502 703 507 696T522 649Q538 589 554 537Q579 453 609 372T660 248T686 202Q687 201 739 244T830 322L1166 642Q1225 700 1230 701Q1230 701 1237 703Q1258 703 1258 667L1253 637Q1248 607 1241 558T1227 451T1214 326T1209 202Q1209 77 1232 77Q1237 77 1269 94T1326 112H1329Q1353 112 1353 94Q1353 81 1334 60Q1311 37 1248 7T1150 -24H1141H1135Q1085 -24 1074 26Q1064 75 1064 134Q1064 239 1086 426Q1087 430 1087 434L1061 410Q871 227 783 149L694 76Q653 44 647 40T631 34Q620 34 616 37T594 63Q546 125 514 198Q467 307 423 449L418 466L412 444Q376 310 306 153Q278 88 251 45T201 -18T163 -43T131 -49Q102 -48 70 -31T38 20\",78:\"47 139Q81 105 122 105Q137 105 147 117Q159 134 182 199T234 381T274 610Q275 634 284 647Q297 666 327 684T389 703Q403 703 408 695T428 645Q480 490 567 298Q628 163 673 103Q674 102 674 102T675 106Q732 331 803 551Q842 674 875 725Q908 775 966 807T1081 840H1084Q1105 840 1105 803Q1105 768 1088 733T1051 689Q1045 686 1032 686Q986 683 948 663T901 624Q881 579 837 430T760 154L726 28Q725 28 725 28T723 25Q716 0 682 -24T611 -48Q600 -48 595 -45T576 -23Q522 44 480 124Q417 243 332 463L328 473L325 457Q291 293 227 124Q159 -49 72 -49Q38 -49 5 -28Q-24 -8 -24 21Q-24 58 -3 98T41 139H47\",79:\"433 703Q456 703 456 685Q456 672 441 655T407 627Q402 623 378 611T328 579T276 524Q207 434 207 324Q207 222 270 153T441 84Q566 84 651 177T737 400V405Q737 496 693 549T576 603Q542 603 510 560Q490 537 472 502T442 454Q397 412 346 409Q320 409 320 427Q320 430 322 436Q331 465 360 507T433 594T542 671T677 703Q776 703 829 636T882 468Q882 369 831 277T702 122T528 21T343 -17Q214 -17 139 61T63 257Q63 336 94 409T173 534T272 625T367 684T432 703H433\",80:\"170 -67Q147 -67 147 -49Q147 -42 162 -8T204 99T253 254Q274 332 288 415T305 542L308 585Q277 585 234 577T179 557Q172 550 166 532T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q279 686 448 686H495H537Q622 686 678 677T784 637Q846 598 846 533Q846 452 776 375T597 252T378 206H366L358 181Q341 130 316 68T282 -7Q262 -33 230 -50T170 -67ZM701 468Q701 512 661 540T570 577T461 586H448V582Q446 576 443 545T428 447T395 301L389 280Q390 280 398 284T419 295T441 303Q443 304 484 306T572 321T651 359Q701 402 701 468\",81:\"874 453Q874 372 836 298T750 177T638 89T543 33T486 8L483 7Q485 5 523 -7T622 -32T726 -46Q741 -46 746 -45T755 -41T762 -27Q770 -1 806 23T878 50H890Q905 42 905 33Q905 -8 838 -68T670 -145Q662 -146 628 -146Q538 -146 389 -100T164 -50Q132 -50 132 -32T162 11T227 47Q231 48 286 51T394 62T518 100T641 180Q730 271 730 387Q730 478 673 540T520 602Q410 602 337 525T264 355Q264 284 310 244T420 203Q476 203 568 222Q594 222 594 204Q594 184 565 161T508 128Q433 103 316 103Q227 103 174 157T120 290Q120 382 182 471T343 620T548 697Q578 703 601 703Q604 703 611 703T623 702Q663 702 687 696Q760 679 817 618T874 453\",82:\"159 0Q159 5 172 34T205 114T245 229T284 386T309 575V585H304Q303 585 295 585T282 584Q233 579 207 570T175 553T165 531T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q279 686 448 686H505H582Q683 686 745 672T834 611Q842 594 842 565Q842 523 824 484T780 419T722 370T669 336T632 318L619 312L626 302Q640 279 667 227T696 172Q717 133 735 112T762 88T784 84Q824 84 872 118T957 153Q981 153 981 136Q981 114 937 78T820 13T684 -17Q646 -17 616 8T569 66T526 151T477 234Q461 256 446 265Q437 272 421 274Q400 274 400 291Q400 311 430 336T495 371Q496 371 543 374T627 392T681 436Q699 467 699 503Q699 550 644 568T471 586H449V582Q449 581 447 559T438 499T422 413T393 298T348 165Q313 73 296 45Q282 24 249 4T185 -17Q159 -17 159 0\",83:\"204 476Q204 525 248 577T372 666T539 703T674 683T721 612Q721 588 714 569Q704 547 669 524T601 499Q573 499 573 516Q573 521 575 527T577 543Q577 563 568 574T548 588L539 590Q490 603 444 603Q418 603 394 597T364 583Q348 567 348 533Q348 493 382 466T459 425T555 387T633 330Q662 292 662 249Q662 153 544 69T257 -16Q218 -16 208 -15Q118 1 64 46Q25 76 25 126Q25 185 82 235T203 290H207Q229 290 231 274Q231 243 180 213Q173 209 172 206T170 189T171 170T183 150T216 121Q273 83 356 83Q412 83 459 100Q493 111 507 141Q518 165 518 185Q518 208 506 228T478 262T437 288T398 306T360 320Q316 335 285 352T239 384T215 416T205 443T204 467V476\",84:\"61 462H59Q38 462 38 479Q38 528 109 594T289 683L304 685L837 687L846 693Q889 720 923 720Q947 720 947 702Q945 671 892 631T776 583Q774 583 772 583T769 582T766 582L764 581H758Q753 581 744 581T722 580T693 580T662 580H563L514 385Q507 355 493 299T475 225T460 172T443 119T426 76T402 24Q386 -11 355 -33T304 -61T266 -69Q242 -69 242 -50Q243 -45 253 -25T278 32T307 115L364 340Q405 511 413 538T436 580H207Q202 572 200 568T197 561T195 552T190 537Q176 511 135 487T61 462\",85:\"124 586Q107 586 74 569T15 552H13Q-10 552 -10 570Q-10 605 70 645T222 686Q283 686 283 631Q283 590 246 504T172 326T135 181Q135 130 157 107T205 83Q221 83 259 106Q347 165 453 301T604 548Q607 557 612 569T619 587T624 600T628 612T632 621T637 628T641 634T647 640T654 645T662 652Q706 686 748 686Q771 686 771 669Q771 656 754 614T700 467T630 229Q615 168 610 105Q610 88 617 78L641 90Q681 111 706 112Q733 112 733 95Q733 82 714 60Q694 40 633 10Q567 -23 532 -24Q507 -24 495 -17Q466 -4 466 32Q466 96 500 225Q277 -17 102 -17Q56 -17 23 17T-10 118Q-10 164 13 234T64 363T115 481T139 567Q139 586 124 586\",86:\"25 608Q25 628 60 657T148 686Q184 683 213 671T273 625T327 538T363 394T380 184L381 134L399 148Q503 226 574 302T667 415T689 467Q688 474 684 482T672 502T645 521T600 532Q576 532 576 567Q576 604 597 644T641 685H649Q701 685 737 648T774 545Q774 457 703 333T461 66Q397 13 332 -32T255 -77Q237 -77 237 -30V-23Q241 20 241 109Q241 483 115 569Q91 586 50 589Q25 589 25 608\",87:\"25 607Q25 629 62 657T142 686Q205 686 248 647T312 541T339 411T347 275Q347 249 345 203V189Q375 219 449 316T587 516Q629 584 629 587Q629 589 626 597T622 607Q622 629 658 656T732 686H744Q755 680 757 678Q757 677 769 649T799 577T835 475T874 339T904 183Q908 157 910 151L925 169Q997 252 1059 343T1121 474Q1120 498 1103 513T1059 532Q1036 532 1036 568Q1036 600 1053 636T1090 683L1097 686H1109Q1147 684 1176 652T1206 551Q1206 460 1131 320T897 7Q859 -33 840 -52T816 -74T804 -77Q788 -77 784 -32Q783 -28 783 -26Q774 108 744 239T691 436T665 501Q664 501 649 475T602 400T528 289T420 146T280 -15Q243 -56 231 -66T210 -77Q191 -77 191 -40Q191 -38 195 -4T204 91T209 217Q209 290 202 351T177 469T126 557T45 589Q25 589 25 607\",88:\"762 562Q762 579 737 584T711 604Q711 630 753 658T834 686Q864 686 885 669T906 627Q906 580 834 522T614 379L584 362V357Q585 354 589 315T597 233T603 183Q610 132 627 116T671 100Q678 100 704 113T754 126T778 107Q776 79 733 45T626 2Q615 1 578 1Q542 1 535 3Q521 7 510 15T491 31T477 54T467 78T460 108T456 137T452 170T449 201Q447 220 445 240T442 270L441 281Q435 281 357 233Q240 165 206 135Q200 128 200 124Q200 113 208 108T226 101T244 96T252 82Q252 61 214 31T129 1H120Q97 1 77 16T56 60Q56 105 133 168T414 345Q428 352 431 354T433 359Q422 493 414 522Q407 551 395 566T373 583T350 586H341L332 580Q290 560 265 560Q243 560 243 577Q243 585 248 596T269 624T306 653T365 676T447 686H456Q472 686 484 683T514 671T543 637T562 576Q565 557 570 501L577 437Q577 436 613 457T694 506T756 551Q762 558 762 562\",89:\"73 555Q49 555 49 573Q49 602 110 644T239 686Q319 686 376 624Q416 584 444 511T483 361T499 240T503 173Q503 165 504 165Q506 165 524 184T556 218Q631 297 674 377T718 485Q718 505 699 526Q673 552 628 552Q619 552 613 562T607 590Q607 617 621 645T658 685Q661 686 671 686Q718 686 757 652T797 545Q797 476 749 369T602 146Q500 29 371 -67T176 -164Q112 -164 74 -120T36 -29Q36 5 55 36T95 67Q104 67 108 59T115 39T128 12T154 -12Q183 -30 216 -30Q239 -30 305 7L361 44L367 49V54Q367 95 364 143T351 273T312 429T243 546Q206 581 156 588L146 581Q108 555 73 555\",90:\"622 574Q522 579 420 579H396Q373 579 364 574T351 550Q339 516 297 490T218 462Q195 462 195 479Q195 487 197 492Q218 565 313 625T509 685Q564 685 650 683T755 680Q787 680 807 683T831 686Q853 686 853 669Q853 657 826 626Q742 532 641 437L619 415L622 414Q626 414 631 414T642 414Q697 411 697 388Q697 367 670 345T607 323Q605 323 592 325T546 329H522L490 302Q457 274 400 226T289 136L260 113L318 112Q345 111 452 109T587 106H627Q650 143 656 170Q666 197 710 225T788 253Q811 253 811 237Q811 211 781 160T710 77Q619 0 515 0Q507 0 497 0T484 1Q434 1 319 3T177 6Q123 6 95 2Q83 2 71 0H68Q46 0 46 17Q46 28 58 44Q68 56 100 80T210 165T383 307L408 329H361L314 330Q297 338 297 350Q297 368 320 388T368 413Q375 415 441 415H506L647 555L664 574H622\",305:\"24 296Q24 305 34 328T63 380T115 430T187 452Q205 452 223 448T262 435T295 406T308 360Q308 345 287 290T240 170T207 87Q202 67 202 57Q202 42 215 42Q235 42 257 64Q288 92 302 140Q307 156 310 159T330 162H336H347Q367 162 367 148Q367 140 357 117T329 65T276 14T201 -8Q158 -8 121 15T83 84Q83 104 133 229T184 358Q189 376 189 388Q189 402 177 402Q156 402 134 380Q103 352 89 304Q84 288 81 285T61 282H55H44Q24 282 24 296\",567:\"297 360T297 373T294 392T288 400T278 401H276Q237 398 200 363Q181 343 170 325T156 299T149 287T129 282H123H116Q102 282 97 284T92 298Q93 303 98 315T118 349T151 390T201 427T267 451H279Q357 451 388 422T420 354V339L370 138Q321 -60 317 -69Q287 -157 163 -194Q133 -201 99 -201Q39 -201 14 -178T-12 -125Q-12 -94 11 -69T68 -43Q93 -43 108 -57T123 -95Q123 -121 100 -151H104Q131 -151 155 -125T193 -60Q195 -54 244 141T294 345Q297 360 297 373\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texCalligraphicBold=void 0,e.texCalligraphicBold={65:[.751,.049,.921,{ic:.068,sk:.224}],66:[.705,.017,.748,{sk:.16}],67:[.703,.02,.613,{sk:.16}],68:[.686,0,.892,{sk:.0958}],69:[.703,.016,.607,{ic:.02,sk:.128}],70:[.686,.03,.814,{ic:.116,sk:.128}],71:[.703,.113,.682,{sk:.128}],72:[.686,.048,.987,{sk:.128}],73:[.686,0,.642,{ic:.104,sk:.0319}],74:[.686,.114,.779,{ic:.158,sk:.192}],75:[.703,.017,.871,{sk:.0639}],76:[.703,.017,.788,{sk:.16}],77:[.703,.049,1.378,{sk:.16}],78:[.84,.049,.937,{ic:.168,sk:.0958}],79:[.703,.017,.906,{sk:.128}],80:[.686,.067,.81,{ic:.036,sk:.0958}],81:[.703,.146,.939,{sk:.128}],82:[.686,.017,.99,{sk:.0958}],83:[.703,.016,.696,{ic:.025,sk:.16}],84:[.72,.069,.644,{ic:.303,sk:.0319}],85:[.686,.024,.715,{ic:.056,sk:.0958}],86:[.686,.077,.737,{ic:.037,sk:.0319}],87:[.686,.077,1.169,{ic:.037,sk:.0958}],88:[.686,0,.817,{ic:.089,sk:.16}],89:[.686,.164,.759,{ic:.038,sk:.0958}],90:[.686,0,.818,{ic:.035,sk:.16}],305:[.452,.008,.394,{sk:.0319}],567:[.451,.201,.439,{sk:.0958}]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texCalligraphic=void 0;var r=Q(6),T=Q(252);e.texCalligraphic=r.AddPaths(T.texCalligraphic,{65:\"576 668Q576 688 606 708T660 728Q676 728 675 712V571Q675 409 688 252Q696 122 720 57Q722 53 723 50T728 46T732 43T737 41T743 39L754 45Q788 61 803 61Q819 61 819 47Q818 43 814 35Q799 15 755 -7T675 -30Q659 -30 648 -25T630 -8T621 11T614 34Q603 77 599 106T594 146T591 160V163H460L329 164L316 145Q241 35 196 -7T119 -50T59 -24T30 43Q30 75 46 100T74 125Q81 125 83 120T88 104T96 84Q118 57 151 57Q189 57 277 182Q432 400 542 625L559 659H567Q574 659 575 660T576 668ZM584 249Q579 333 577 386T575 473T574 520V581L563 560Q497 426 412 290L372 228L370 224H371L383 228L393 232H586L584 249\",66:\"304 342Q292 342 292 353Q292 372 323 391Q331 396 417 428T533 487Q563 512 563 555V562Q563 575 557 589T530 618T475 636Q429 636 396 613T330 539Q263 446 210 238Q196 183 173 120Q135 31 121 16Q108 1 85 -10T47 -22T32 -10Q32 -5 44 18T77 93T112 206Q135 296 154 395T182 550T191 615Q191 616 190 616Q188 616 179 611T157 601T131 594Q113 594 113 605Q113 623 144 644Q154 650 205 676T267 703Q277 705 279 705Q295 705 295 693Q295 686 288 635T278 575Q278 572 287 582Q336 635 402 669T540 704Q603 704 633 673T664 599Q664 559 638 523T580 462Q553 440 504 413L491 407L504 402Q566 381 596 338T627 244Q627 172 575 110T444 13T284 -22Q208 -22 158 28Q144 42 146 50Q150 67 178 85T230 103Q236 103 246 95T267 75T302 56T357 47Q436 47 486 93Q526 136 526 198V210Q526 228 518 249T491 292T436 330T350 345Q335 345 321 344T304 342\",67:\"201 -25Q167 -25 136 -14T75 23T29 94T12 202Q12 290 50 394T161 574Q227 642 303 673T433 704Q435 705 457 705Q533 701 533 640Q533 606 507 548T464 474Q431 444 396 444Q381 444 381 453Q381 459 388 473T407 513T428 563Q433 580 433 594Q433 636 381 636Q314 636 260 594T175 489T128 363T112 247Q112 157 153 101T273 44Q347 44 398 121Q413 144 437 157T481 171Q496 171 496 160Q496 150 476 123Q426 56 350 16T201 -25\",68:\"37 475Q19 475 19 487Q19 536 103 604T327 682H356Q386 683 408 683H419Q475 683 506 681T582 668T667 633Q766 571 766 450Q766 365 723 287T611 152T455 57T279 6Q248 1 160 0Q148 0 131 0T108 -1Q72 -1 72 11Q72 24 90 40T133 64L144 68L152 88Q247 328 272 587Q275 613 272 613Q272 613 269 613Q225 610 195 602T149 579T129 556T119 532Q118 530 116 525T113 518Q102 502 80 490T37 475ZM665 407Q665 596 412 613Q403 614 383 614Q370 614 370 612Q370 598 363 542T323 357T242 103L228 69H265Q391 73 481 119Q536 148 575 188T633 268T658 338T665 392V407\",69:\"144 470Q144 556 240 630T451 705Q564 705 564 637Q564 611 540 573Q529 559 505 547T464 534Q448 534 448 545Q448 552 455 562Q463 577 463 591Q463 600 462 604T456 616T436 627T400 635Q396 635 390 635T380 636Q291 636 258 568Q245 544 245 516Q245 463 290 438T391 410Q415 410 415 398Q415 392 407 380T376 356T326 341Q288 340 260 327Q218 311 187 276T143 208T130 151Q130 113 156 88T211 55T268 47Q349 47 403 125Q415 144 439 157T483 171Q499 171 499 160Q499 148 475 120T413 59T315 3T197 -22Q124 -22 77 14T30 105Q30 126 39 154T66 216T122 288T209 354L223 362Q144 400 144 470\",70:\"199 579Q181 579 181 590Q181 598 188 611T212 639T260 666T335 682Q336 682 349 682T383 682T431 682T493 683T561 683Q776 682 784 681Q826 673 829 647Q829 620 797 600T744 580Q728 580 728 595Q729 607 713 610Q698 613 598 614H500L499 610Q499 598 467 486T428 367Q428 365 551 365H674Q683 360 684 355Q687 346 677 329Q666 312 642 299T598 285Q586 285 582 296H402L394 277Q386 258 373 229T346 167T315 102T286 51Q265 22 225 -5T133 -32Q108 -32 87 -25T54 -7T33 15T21 35T18 47Q18 60 44 80T98 103Q108 103 111 101T119 88Q130 66 150 54T179 39T195 37Q199 37 203 43Q217 67 245 125T318 300T391 532Q393 543 398 564T406 598T409 613T339 614H269Q229 579 199 579\",71:\"216 68Q155 68 115 100T59 177T44 273Q44 299 50 333T73 421T133 533T239 632Q346 704 466 704Q508 704 515 703Q555 696 577 681T599 635Q599 605 570 560T523 496Q490 466 455 466Q440 466 440 475T469 526T499 589Q499 605 489 617Q460 636 403 636Q343 636 295 611T220 548T174 464T150 382T144 318Q144 241 180 189T287 137Q325 137 359 160Q428 205 466 322Q472 342 501 359T551 376Q557 376 560 373T564 368L565 365Q560 341 551 302T512 173T451 31Q359 -119 204 -119Q163 -118 127 -109T74 -91T53 -77Q52 -75 52 -71Q52 -54 79 -35T132 -14H140L151 -19Q210 -49 281 -49H289Q312 -49 329 -31Q351 -7 372 36T405 109T416 142L408 136Q401 131 392 125T369 111T338 96T303 82T261 72T216 68\",72:\"18 487Q18 496 29 517T67 566T127 621T216 665T330 683Q359 683 376 669T397 643T400 622Q400 584 382 488T348 343Q348 342 467 342H587L594 366Q615 440 648 534T690 641Q701 656 723 669T764 683Q783 683 783 672L750 578Q716 485 677 346T625 101Q624 92 623 82T622 65T621 56Q621 20 658 20Q666 20 701 25Q709 52 736 69T785 87Q803 87 803 75T791 44T754 3T685 -33T588 -48Q568 -48 562 -46Q522 -31 522 13V23Q531 129 562 250L569 281L565 280Q561 278 556 277T549 274L438 273H328L321 249Q307 202 275 107T232 0Q219 -16 196 -28T155 -41Q149 -41 145 -39T140 -34T139 -29Q139 -24 148 -3T181 86T233 247Q240 270 240 272Q240 273 194 273H169Q139 273 139 285Q139 295 153 308T187 332Q206 341 236 342L260 343L264 359Q278 414 289 482T300 578Q300 613 260 613H254Q198 613 169 592Q148 578 127 544T104 508Q72 478 37 475Q18 475 18 487\",73:\"174 0H31Q-13 0 -21 2T-30 12Q-30 23 -17 36Q9 60 42 68L155 70Q187 102 214 179T257 333T302 491T366 610L369 614H305Q221 611 188 607T145 596T128 569Q119 543 94 529T47 512Q28 512 28 524Q28 527 32 539Q56 614 159 654Q218 678 312 682Q314 682 339 682T404 682T481 683H632Q642 678 642 671Q642 657 621 641T577 617Q570 615 507 614H444Q427 592 406 542Q382 478 355 366T310 209Q280 123 238 78L230 69H330Q442 70 442 74Q443 74 443 77T447 87T460 105Q490 134 527 137Q545 137 545 125Q545 120 542 112Q531 78 491 49T399 7Q379 2 360 2T174 0\",74:\"148 78Q148 16 189 -17T286 -50Q319 -50 348 -33T396 10T426 59T444 101L471 204Q498 306 521 372Q575 532 649 605L659 614H591Q517 613 494 607Q433 591 400 550T360 477Q353 454 325 437T275 419Q256 419 260 435Q280 523 376 597T583 681Q603 683 713 683H830Q839 674 839 671Q839 654 810 634T754 614Q735 614 721 601Q688 571 654 495T600 351T561 209T541 132Q507 29 412 -45T213 -119Q141 -119 94 -77T47 33Q47 55 50 69T58 90T71 103Q105 131 135 131Q152 131 152 120Q152 119 151 114T149 99T148 78\",75:\"194 618Q193 618 182 613T156 601T131 594Q113 594 113 605Q113 623 144 644Q154 650 205 676T267 703Q277 705 279 705Q295 705 295 691Q295 569 250 397Q225 306 197 217T151 81T128 25Q120 8 94 -7T47 -22Q32 -22 32 -10L64 76Q95 163 133 295T185 530Q198 611 194 618ZM331 429Q331 383 364 290T449 117T542 36Q574 36 607 51T652 103Q660 124 677 133T709 143Q727 143 727 128Q727 119 723 111Q704 56 639 17T497 -22H493Q463 -22 425 16Q401 40 382 71Q335 138 296 243T256 399Q256 434 288 473Q342 540 471 622T670 705Q691 704 703 696Q732 678 732 644Q732 613 714 600T677 586Q671 586 667 587T660 592T657 604V619Q657 647 629 647Q623 647 620 646Q576 635 495 583T365 482Q331 448 331 429\",76:\"62 -22T47 -22T32 -11Q32 -1 56 24T83 55Q113 96 138 172T180 320T234 473T323 609Q364 649 419 677T531 705Q559 705 578 696T604 671T615 645T618 623V611Q618 582 615 571T598 548Q581 531 558 520T518 509Q503 509 503 520Q503 523 505 536T507 560Q507 590 494 610T452 630Q423 630 410 617Q367 578 333 492T271 301T233 170Q211 123 204 112L198 103L224 102Q281 102 369 79T509 52H523Q535 64 544 87T579 128Q616 152 641 152Q656 152 656 142Q656 101 588 40T433 -22Q381 -22 289 1T156 28L141 29L131 20Q111 0 87 -11\",77:\"28 9Q28 37 43 63T73 90Q77 90 83 84T103 70T141 57H146Q162 57 178 79T222 167Q266 279 295 371T334 513T349 598T358 651T371 677Q397 705 432 705Q442 705 445 699T452 666Q453 661 453 659Q475 538 509 405T568 207L574 192Q581 178 587 164T594 150Q596 150 635 189T693 248Q765 324 863 438T1024 626T1089 701Q1093 705 1100 705Q1111 705 1111 682Q1111 675 1108 660T1099 611T1086 540Q1041 277 1041 144Q1041 98 1044 75T1050 48T1059 42Q1064 41 1075 46Q1102 61 1121 61Q1137 61 1137 50Q1137 28 1087 0T1000 -29Q983 -29 972 -23T955 -9T945 16T942 45T941 83V96Q941 158 952 256T974 422L985 489Q984 489 939 436T821 300T698 164Q665 128 620 85T568 37Q564 34 558 34Q550 34 546 37T535 54Q512 91 496 127T450 259T389 498L384 518Q349 367 294 223T198 15Q155 -50 117 -50Q87 -50 61 -35T30 -6Q28 2 28 9\",78:\"343 705Q358 705 358 698Q360 696 370 658T411 524T484 319Q536 174 590 82L595 73L615 152Q646 274 683 407Q729 571 752 637T799 727Q852 780 937 788Q939 788 947 788T958 789H962Q979 789 979 765Q979 722 951 692Q942 683 924 683Q888 681 859 672T818 654T803 639Q784 608 708 322T631 15Q631 14 630 15Q630 17 629 15Q628 14 628 12Q621 -4 601 -17T560 -31Q550 -31 546 -28T530 -7Q484 67 458 123T398 272Q352 392 314 514L306 535V534Q306 533 296 488T272 379T234 239T185 100T127 -7T61 -50Q34 -50 4 -34T-27 8Q-27 33 -12 61T18 90Q21 90 36 77T87 57H92Q109 57 123 78T162 173Q206 299 232 417T265 599T276 667Q284 681 304 693T343 705\",79:\"308 428Q289 428 289 438Q289 457 318 508T378 593Q417 638 475 671T599 705Q688 705 732 643T777 483Q777 380 733 285T620 123T464 18T293 -22Q188 -22 123 51T58 245Q58 327 87 403T159 533T249 626T333 685T388 705Q404 705 404 693Q404 674 363 649Q333 632 304 606T239 537T181 429T158 290Q158 179 214 114T364 48Q489 48 583 165T677 438Q677 473 670 505T648 568T601 617T528 636Q518 636 513 635Q486 629 460 600T419 544T392 490Q383 470 372 459Q341 430 308 428\",80:\"37 475Q19 475 19 487Q19 536 103 604T327 682Q329 682 344 682T380 682T421 683H463Q625 683 695 615Q718 591 726 564Q733 547 733 525Q733 412 607 312T321 205H312Q293 205 293 217Q293 224 302 236T333 260T385 274Q558 287 614 407Q633 445 633 477Q633 515 612 543T556 585T481 607T399 614H370L368 603Q352 463 312 312T242 82T202 -13Q190 -33 164 -45T121 -57Q108 -57 108 -45Q108 -40 120 -10T151 73T192 190T233 349T266 539Q267 546 269 565T272 598T274 613H270Q209 613 163 588Q131 572 113 518Q102 502 80 490T37 475\",81:\"114 286Q114 358 151 433T249 569T392 667T558 705Q653 705 713 641T774 460Q774 389 750 322T687 206T600 114T504 46T412 4L399 -2Q542 -62 636 -62Q660 -62 670 -54T686 -27T700 0Q734 34 770 34Q787 34 787 23Q787 -18 720 -74T563 -131Q485 -131 350 -83T145 -34Q127 -34 127 -22Q127 -12 144 5T190 31L200 34L237 35Q386 38 467 79Q550 120 612 210T675 416Q675 510 625 573T484 636Q410 636 346 587T248 469T214 333Q214 306 221 281T243 229T288 188T360 172Q403 172 441 188T490 205Q510 205 510 192Q505 162 432 132T287 102Q206 102 160 155T114 286\",82:\"37 475Q19 475 19 487Q19 503 35 530T83 589T180 647T327 682H374Q387 682 417 682T464 683Q519 683 559 679T642 663T708 625T731 557Q731 481 668 411T504 300Q506 296 512 286T528 257T553 202Q594 105 611 82Q635 47 665 47Q708 47 742 93Q758 113 786 128Q804 136 819 137Q837 137 837 125Q837 115 818 92T767 43T687 -2T589 -22Q549 -22 517 22T467 120T422 221T362 273Q346 273 346 287Q348 301 373 320T436 342Q437 342 446 343T462 345T481 348T504 353T527 362T553 375T577 393Q598 412 614 443T630 511Q630 545 613 566T541 600T393 614Q370 614 370 613L366 584Q349 446 311 307T243 96L213 25Q205 8 179 -7T132 -22Q125 -22 120 -18T117 -8Q117 -5 130 26T163 113T205 239T246 408T274 606V614Q273 614 259 613T231 609T198 602T163 588Q131 572 113 518Q102 502 80 490T37 475\",83:\"554 512Q536 512 536 522Q536 525 539 539T542 564Q542 588 528 604Q515 616 482 625T410 635Q374 635 349 624T312 594T295 561T290 532Q290 505 303 482T342 442T378 419T409 404Q435 391 451 383T494 357T535 323T562 282T574 231Q574 133 464 56T220 -22Q138 -22 78 21T18 123Q18 184 61 227T156 274Q178 274 178 263Q178 260 177 258Q172 247 164 239T151 227T136 218L127 213L124 202Q118 186 118 163Q120 124 165 86T292 48Q374 48 423 86T473 186V193Q473 267 347 327Q268 364 239 389Q191 431 191 486Q191 547 242 600T356 679T470 705Q472 705 478 705T489 704Q551 704 596 682T642 610Q642 566 621 545Q592 516 554 512\",84:\"49 475Q34 475 34 490Q34 552 106 611T261 681Q272 683 507 683H742Q790 717 816 717Q833 717 833 708Q833 682 795 653T714 615Q691 610 588 609Q490 609 490 607L483 580Q476 554 462 496T435 392Q410 289 395 231T363 116T335 34T309 -15T279 -47T242 -64Q231 -68 218 -68Q203 -68 203 -57Q203 -52 211 -38Q224 -7 234 20T251 66T268 123T283 179T304 261T328 360Q342 415 360 488Q380 567 384 582T397 605Q400 607 401 609H302H244Q200 609 188 607T167 596Q145 572 145 541Q145 520 109 498T49 475\",85:\"8 592Q8 616 70 649T193 683Q246 683 246 631Q246 587 205 492T124 297T83 143Q83 101 100 75T154 48Q202 48 287 135T450 342T560 553Q589 635 593 640Q603 656 626 668T669 683H670Q687 683 687 672T670 616T617 463T547 220Q525 137 521 68Q521 54 522 50T533 42L543 47Q573 61 588 61Q604 61 604 47Q599 16 506 -22Q486 -28 468 -28T436 -18T421 18Q421 92 468 258Q468 259 467 257T459 248Q426 206 391 167T303 81T194 6T83 -22Q66 -22 58 -20Q25 -11 4 19T-17 99Q-17 146 8 220T64 358T120 488T146 586Q146 604 141 608T123 613H120Q99 613 72 597T25 580Q8 580 8 592\",86:\"25 633Q25 647 47 665T100 683Q291 683 291 306Q291 264 288 213T282 132L279 102Q281 102 308 126T378 191T464 279T545 381T596 479Q600 490 600 502Q600 527 581 550T523 577Q505 577 505 601Q505 622 516 647T542 681Q546 683 558 683Q605 679 631 645T658 559Q658 423 487 215Q409 126 308 37T190 -52Q177 -52 177 -28Q177 -26 183 15T196 127T203 270Q203 356 192 421T165 523T126 583T83 613T41 620Q25 620 25 633\",87:\"25 633Q25 647 46 665T103 683Q168 683 207 632Q228 608 243 568Q269 485 269 374Q269 324 265 271T256 184L251 150L252 152Q254 153 257 157T264 167T274 180T286 197Q359 293 424 398T519 558T549 616Q549 618 547 624T545 638Q550 654 572 668T615 683Q626 683 632 672T657 595Q726 370 741 128L742 110Q752 122 767 142T823 217T894 321T950 424T976 511Q976 544 958 560T918 577Q906 577 906 602Q906 629 918 651T942 681Q948 683 954 683Q983 683 1008 658T1034 569T999 421T915 257T813 109T724 -3T681 -49Q666 -59 660 -45Q659 -41 657 35T639 233T591 477Q573 551 570 551Q569 551 554 523T507 439T433 315T323 155T182 -25Q160 -52 151 -53Q137 -53 137 -30Q137 -29 148 25T170 168T181 338Q181 424 168 483T131 571T87 609T40 620Q25 620 25 633\",88:\"324 614Q291 576 250 573Q231 573 231 584Q231 589 232 592Q235 601 244 614T271 643T324 671T400 683H403Q462 683 481 610Q485 594 490 545T498 454L501 413Q504 413 551 442T648 509T705 561Q707 565 707 578Q707 610 682 614Q667 614 667 626Q667 641 695 662T755 683Q765 683 775 680T796 662T807 623Q807 596 792 572T713 499T530 376L505 361V356Q508 346 511 278T524 148T557 75Q569 69 580 69Q585 69 593 77Q624 108 660 110Q667 110 670 110T676 106T678 94Q668 59 624 30T510 0Q487 0 471 9T445 32T430 71T422 117T417 173Q416 183 416 188Q413 214 411 244T407 286T405 299Q403 299 344 263T223 182T154 122Q152 118 152 105Q152 69 180 69Q183 69 187 66T191 60L192 58V56Q192 41 163 21T105 0Q94 0 84 3T63 21T52 60Q52 77 56 90T85 131T155 191Q197 223 259 263T362 327T402 352L391 489Q391 492 390 505T387 526T384 547T379 568T372 586T361 602T348 611Q346 612 341 613T333 614H324\",89:\"65 599Q65 618 107 650T204 683Q267 683 312 643T380 533T414 385T424 217Q424 186 423 160T422 123Q426 123 468 170T567 304T650 469Q661 503 661 519Q661 546 639 570Q615 591 583 591Q569 591 569 616Q569 640 582 661T613 683Q624 683 638 679T671 664T702 625T714 558Q714 472 639 329T426 45Q361 -21 282 -82T154 -143Q97 -143 64 -104T31 -20Q31 4 44 25T70 46Q78 46 81 39T87 16T97 -9Q127 -51 182 -51Q184 -51 187 -50H190Q233 -41 314 25Q330 36 330 40Q336 79 336 178Q336 508 223 594Q199 614 158 619L148 620L139 611Q111 586 83 586Q65 586 65 599\",90:\"694 220Q708 220 708 210Q708 195 695 167T658 105T593 42T502 3Q492 1 458 1Q400 1 293 11T150 22Q116 22 92 11T51 0Q37 0 37 10Q37 21 63 44T179 146T367 319L391 343H343L296 344Q285 350 285 358Q285 365 289 372T300 383T313 392T324 398L329 400H450L561 518Q597 558 607 571L621 587H596Q553 589 484 599T383 609Q342 609 326 596T301 555Q294 533 263 514T208 492Q189 492 189 503Q189 510 197 528T215 559Q249 607 318 645T466 683Q504 683 573 673T669 662L690 661Q734 682 748 683Q767 683 767 673Q767 666 746 640Q655 531 555 428L529 400Q529 399 543 399Q604 397 604 366Q604 350 587 337T551 322Q541 322 539 323Q529 328 529 334Q529 339 487 342L470 343L446 320Q272 153 200 96L235 95Q297 95 392 86T533 74H554Q586 116 597 159Q604 179 635 199T694 220\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texCalligraphic=void 0,e.texCalligraphic={65:[.728,.05,.798,{ic:.021,sk:.194}],66:[.705,.022,.657,{sk:.139}],67:[.705,.025,.527,{sk:.139}],68:[.683,0,.771,{sk:.0833}],69:[.705,.022,.528,{ic:.036,sk:.111}],70:[.683,.032,.719,{ic:.11,sk:.111}],71:[.704,.119,.595,{sk:.111}],72:[.683,.048,.845,{sk:.111}],73:[.683,0,.545,{ic:.097,sk:.0278}],74:[.683,.119,.678,{ic:.161,sk:.167}],75:[.705,.022,.762,{sk:.0556}],76:[.705,.022,.69,{sk:.139}],77:[.705,.05,1.201,{sk:.139}],78:[.789,.05,.82,{ic:.159,sk:.0833}],79:[.705,.022,.796,{sk:.111}],80:[.683,.057,.696,{ic:.037,sk:.0833}],81:[.705,.131,.817,{sk:.111}],82:[.682,.022,.848,{sk:.0833}],83:[.705,.022,.606,{ic:.036,sk:.139}],84:[.717,.068,.545,{ic:.288,sk:.0278}],85:[.683,.028,.626,{ic:.061,sk:.0833}],86:[.683,.052,.613,{ic:.045,sk:.0278}],87:[.683,.053,.988,{ic:.046,sk:.0833}],88:[.683,0,.713,{ic:.094,sk:.139}],89:[.683,.143,.668,{ic:.046,sk:.0833}],90:[.683,0,.725,{ic:.042,sk:.139}]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texMathit=void 0;var r=Q(6),T=Q(254);e.texMathit=r.AddPaths(T.texMathit,{65:\"85 46Q112 48 132 56T161 73T176 92T185 104Q185 106 353 407T524 709Q527 716 551 716Q568 716 572 712Q573 711 574 710Q576 708 594 384Q613 54 617 52H618Q626 46 672 46H689Q696 41 696 36Q696 13 683 0H670Q639 2 557 2Q526 2 500 2T459 2T441 1Q425 1 425 10Q425 12 427 24Q428 27 429 31T430 36T432 40T434 43T437 45T443 46T450 46Q514 46 514 69Q514 74 511 136L506 209H292L260 152Q222 84 222 74Q222 48 264 46Q280 46 280 35Q280 33 278 21Q275 7 272 4T259 0Q256 0 232 1T159 2Q135 2 109 1T78 0Q58 0 58 10Q58 14 61 26T66 40Q68 46 85 46ZM504 260Q503 263 496 407T486 553L466 520Q446 486 402 406L318 256Q318 255 411 255H504V260\",66:\"57 11Q57 38 69 45L74 46Q78 46 85 46T99 46Q134 47 145 50T162 62Q164 66 233 344T303 626Q303 627 302 629V631Q296 637 241 637H223Q217 642 217 645T219 664Q223 677 229 683H411L593 682L605 680Q616 678 628 675T660 662T694 639T720 601T732 547Q732 519 726 503Q710 452 662 414T556 360L545 357L556 355Q604 346 641 312T678 221Q678 155 622 92T482 8Q459 2 439 2T256 0H154H105Q74 0 66 2T57 11ZM629 549Q628 550 629 557T627 576T619 600T601 622T570 636Q564 637 490 637Q472 637 454 637T424 636T411 636Q399 635 395 622T364 500Q333 377 332 376Q332 374 408 374L485 375L495 377Q547 390 588 437T629 549ZM504 336Q500 337 410 337Q323 337 322 336Q322 334 305 263T270 122T252 51Q252 47 337 46Q346 46 361 46T384 45Q425 45 455 55T515 95Q574 156 574 235Q574 276 555 304T504 336\",67:\"395 -21Q279 -21 215 56T150 244Q150 402 265 543Q339 630 421 667T562 704Q596 704 604 703Q627 698 647 689T679 669T699 649T711 633T716 627L753 665Q790 704 792 704Q793 705 798 705Q812 705 812 698Q812 694 780 561Q744 422 744 421Q742 416 739 415T721 413H705Q699 419 699 426Q701 432 701 444Q705 464 705 493Q705 524 700 551T681 604T643 644T583 659Q480 659 387 570Q321 502 287 397T252 213Q252 123 297 74Q347 24 421 24Q500 24 564 89T653 240Q656 253 659 255T677 257Q700 257 700 248Q700 242 694 222Q681 183 656 143T593 65T504 3T395 -21\",68:\"56 11Q56 38 68 45L72 46Q77 46 84 46T98 46Q133 47 144 50T161 62Q163 66 232 344T302 626Q302 627 302 629L301 631Q295 637 240 637H222Q216 642 216 645T218 664Q222 677 228 683H403Q582 683 589 682Q672 674 723 608T775 440Q775 312 709 209T562 54Q502 14 432 2Q423 1 243 0H148H102Q72 0 64 2T56 11ZM254 51Q254 46 348 46Q395 46 422 50T484 71Q585 121 633 255Q679 396 679 477Q679 522 665 554T629 603T587 626T548 636Q547 636 536 636T510 636T480 637Q420 637 411 636T398 627Q396 623 325 339T254 51\",69:\"248 634Q216 634 214 638Q213 641 213 646Q213 674 224 678Q226 680 481 680H736Q743 676 743 669Q743 665 729 557T713 447Q711 440 690 440H675Q667 445 667 454Q667 455 671 481T675 536Q675 583 658 604T592 632Q574 634 475 634Q439 634 424 633T405 631T399 625Q397 622 367 501T336 377Q336 376 367 376H388Q451 376 477 389Q493 399 503 419T520 462T528 489Q531 493 549 493Q557 493 561 492T566 491T569 488T572 483L539 351Q507 221 503 216Q503 216 500 213H484Q468 213 465 216Q461 219 461 225Q461 228 466 250T472 290Q472 317 452 323T368 330H324Q323 326 289 191T255 51T331 46H360Q413 46 444 49T511 67T570 113Q589 137 608 175T638 242T652 272Q656 274 670 274Q693 274 693 262L648 148Q590 4 588 2Q585 0 323 0H61Q54 4 54 11Q54 27 61 41Q65 46 95 46Q131 47 142 50T159 62L194 200Q229 337 264 477T299 623Q299 630 292 631T248 634\",70:\"299 623Q299 630 292 631T247 634H219Q213 640 213 642T215 661Q218 673 225 680H724Q731 676 731 669Q731 665 717 557T701 447Q699 440 678 440H663Q656 444 656 452Q656 457 659 485T663 538Q663 586 644 607T566 633Q564 633 535 633T486 634H458Q404 634 399 625Q396 620 364 492L332 363H380Q446 365 464 373Q496 389 514 458Q518 477 523 479Q527 480 541 480H556Q563 475 563 470Q563 467 532 339T498 207Q496 200 475 200H460Q453 207 453 212Q454 213 456 225T461 254T464 278Q464 304 445 310T369 317H321L289 190Q257 66 257 59Q257 54 261 52T283 48T337 46Q348 46 352 46T360 45T366 42T368 37Q368 32 365 23Q360 4 355 2Q352 1 342 1Q336 1 297 1T199 2Q138 2 106 2T71 1H68Q54 1 54 11Q54 38 66 45L70 46Q75 46 82 46T96 46Q131 47 142 50T159 62L194 200Q229 337 264 477T299 623\",71:\"632 -1Q629 -1 622 5T604 25T583 53Q508 -22 394 -22Q287 -22 219 52T150 244Q150 402 265 543Q339 630 421 667T562 704Q596 704 604 703Q627 698 647 689T679 669T699 649T711 633T716 627L753 665Q790 704 792 704Q793 705 798 705Q812 705 812 698Q812 694 780 561Q744 422 744 421Q742 416 739 415T721 413H705Q699 419 699 426Q701 432 701 444Q705 464 705 493Q705 524 700 551T681 604T643 644T583 659Q480 659 387 570Q319 501 286 394T252 208Q252 156 269 118T314 61T369 33T425 24Q470 24 509 46T566 104Q571 116 583 162T595 214Q595 222 583 223Q561 227 517 227H495Q488 230 488 238Q488 254 495 268Q500 273 511 273Q515 273 532 273T581 272T649 271Q731 271 752 273H761Q767 267 767 264T765 246Q761 233 755 227H742Q698 227 693 213L639 4Q636 -1 632 -1\",72:\"61 0Q54 7 54 11Q54 27 61 41Q65 46 95 46Q131 47 142 50T159 62Q161 66 230 344T300 626Q300 627 300 629L299 631Q293 637 238 637H220Q214 642 214 645T216 664Q220 677 226 683H239Q307 681 372 681Q480 681 486 683H496Q502 677 502 674T500 656Q496 643 490 637H472Q418 637 406 630Q400 627 396 612T367 500Q360 474 352 442T340 395L336 380Q336 378 466 378H596Q657 622 657 626Q657 627 656 629V631Q650 637 595 637H577Q571 642 571 645T573 664Q577 677 583 683H596Q664 681 729 681Q837 681 843 683H853Q860 676 860 672Q858 647 848 637H819Q783 636 772 634T756 623Q753 618 684 340T614 57Q614 50 621 49T666 46Q697 46 699 40Q701 37 698 21Q693 3 689 1Q686 0 677 0Q673 0 657 0T611 1T546 2Q453 2 428 0H418Q411 7 411 11Q411 27 418 41Q422 46 452 46Q488 47 499 50T516 62Q517 64 550 196T584 331Q584 332 454 332H324L291 197Q257 64 257 56Q257 50 265 49T309 46Q340 46 342 40Q344 37 341 21Q336 3 332 1Q329 0 320 0Q316 0 300 0T254 1T189 2Q96 2 71 0H61\",73:\"235 637Q217 637 213 638T209 649Q209 673 220 682Q222 683 237 683Q278 681 369 681Q404 681 441 682T483 683Q499 683 503 681T508 672Q508 670 505 658T500 643Q498 637 464 637Q425 635 415 633T398 621Q396 618 327 340T257 58T260 52T278 48T322 46Q349 46 349 36Q349 31 346 22Q342 4 337 1Q336 1 334 1T329 0Q325 0 307 0T258 1T190 2Q95 2 67 0H56Q49 7 49 11Q51 38 62 46H91Q129 47 141 50T159 62Q161 66 230 344T300 625Q300 637 235 637\",74:\"361 637Q333 637 331 641Q330 644 330 649Q330 673 341 682Q343 683 360 683Q405 681 500 681Q551 681 577 681T607 682Q622 682 622 673Q622 665 616 647Q614 640 610 639T587 637Q547 636 541 624Q538 618 477 374T413 124Q391 64 333 22T207 -21T109 12T78 86Q78 130 101 150T149 170Q193 170 196 129Q196 100 178 80T137 58L132 57Q134 52 138 46T160 28T205 16Q242 16 273 48T319 122Q322 129 383 371T444 627Q444 637 361 637\",75:\"668 621Q668 635 645 637Q629 637 629 648Q629 650 632 662T637 677Q640 682 653 682Q657 682 688 681T764 680Q786 680 810 681T839 682Q859 682 859 672Q859 655 852 643Q849 637 839 637Q804 637 768 621T717 595T697 578Q696 578 600 497L505 417L508 408Q543 311 574 227T618 106T632 69Q645 47 688 46H707Q713 38 713 37T710 19Q706 6 700 0H688Q659 2 587 2Q557 2 532 2T492 2T474 1Q458 1 458 10Q458 13 460 23Q464 39 466 42T480 46Q526 46 526 72Q526 75 476 213L427 350Q426 350 396 325T334 272T302 242Q302 241 299 230T290 194T279 150Q257 61 257 55Q257 50 265 49T309 46H337Q343 40 343 38T341 19Q337 6 331 0H316Q280 2 190 2Q158 2 131 2T89 2T70 1Q54 1 54 11Q54 38 66 45L70 46Q75 46 82 46T96 46Q131 47 142 50T159 62Q161 66 230 344T300 626Q300 627 300 629L299 631Q293 637 238 637H220Q214 642 214 645T216 664Q220 677 226 683H239Q307 681 372 681Q386 681 414 681T464 682L487 683H496Q502 677 502 674T500 656Q495 641 491 637H462Q426 636 415 634T399 623Q396 618 358 467L320 314Q321 314 484 452Q510 474 552 509Q625 570 646 590T668 621\",76:\"61 0Q54 4 54 11Q54 27 61 41Q65 46 95 46Q131 47 142 50T159 62Q161 66 230 344T300 626Q300 627 300 629L299 631Q293 637 238 637H220Q214 642 214 645T216 664Q220 677 226 683H240Q275 681 371 681Q407 681 438 681T487 682T509 682Q527 682 527 674Q527 670 524 659Q523 657 523 654T522 649T520 645T519 642T517 640T515 639T512 638T507 637T502 637T494 637H478Q433 636 417 633T396 617Q395 614 325 334T255 51Q255 47 319 47Q387 47 410 52Q459 65 494 98T543 163T570 229T589 273H622Q628 264 628 262Q628 259 584 133T539 5Q537 1 511 1Q482 0 296 0H61\",77:\"72 1Q58 1 58 11Q58 33 66 41Q68 46 87 46Q150 50 168 84Q172 91 238 356T304 626Q304 627 304 629L303 631Q297 637 242 637H224Q218 642 218 645T220 664Q224 677 230 683H326H394Q417 683 422 682T429 676L480 127L502 163Q523 199 560 262T642 400Q801 668 805 676L817 683H1003Q1010 678 1010 672Q1010 650 997 637H979Q915 637 906 623Q903 618 834 340T764 57Q764 50 771 49T817 46H845Q851 38 851 37T848 19Q845 7 838 0H824Q789 2 701 2Q670 2 644 2T603 2T584 1Q569 1 569 11Q569 13 571 25Q576 42 581 45L586 46Q590 46 597 46T611 46Q646 47 657 50T674 62L813 616L634 313Q453 7 452 7Q446 0 428 0Q409 0 407 6Q405 10 379 304T351 604L285 348Q220 83 220 82Q220 65 233 57T279 46H295Q301 38 301 37T298 19Q295 7 288 0H275Q244 2 171 2Q145 2 123 2T88 2T72 1\",78:\"633 637Q624 637 621 639T617 650Q617 670 630 683H641Q682 680 736 680Q836 680 845 683H853Q860 676 860 672Q858 647 848 637H832Q764 633 750 598Q746 590 673 300Q656 230 638 156T610 44L600 7Q598 0 576 0H559Q553 6 448 297L342 588Q341 588 279 336T216 81Q216 49 274 46Q293 46 295 40Q297 37 294 21Q293 19 292 16T291 11T290 7T289 4T287 2T284 1T280 1T275 0T263 0T229 1T167 2Q91 2 70 0H61Q54 7 54 11T57 27Q61 41 64 43T83 46Q146 50 164 84Q167 90 235 362L303 634Q300 635 253 637H220Q214 643 214 645T216 664Q220 677 226 683H314Q386 683 397 683T410 677Q412 675 501 428L591 179Q591 178 592 180T595 189T600 209T610 246T624 303T645 385Q698 595 698 606Q698 618 683 627T633 637\",79:\"149 237Q149 326 186 413T282 563T412 665T552 704Q619 704 667 678T741 611T777 528T788 444Q788 328 728 219T572 44T377 -22Q275 -22 212 50T149 237ZM688 487Q688 570 650 617T548 665Q467 665 398 592T291 413T253 203Q253 119 290 70T387 20Q440 20 489 52T573 135T635 249T675 373T688 487\",80:\"62 0Q55 7 55 11Q55 27 62 41Q66 46 96 46Q132 47 143 50T160 62Q162 66 231 344T301 626Q301 627 300 629V631Q294 637 239 637H221Q215 642 215 645T217 664Q221 677 227 683H404H431H502Q578 683 615 675T684 636Q729 595 729 531Q729 462 671 396T524 308Q499 302 404 301H318L288 182Q258 63 258 55T310 46Q341 46 343 40Q345 37 342 21Q337 3 333 1Q330 0 321 0Q317 0 301 0T255 1T190 2Q97 2 72 0H62ZM626 555V562Q626 620 552 635Q546 636 481 637Q466 637 450 637T423 636T412 636Q401 635 398 627Q396 622 361 484Q353 452 344 416T330 362L325 344Q325 342 390 342H427Q523 342 567 386Q596 415 611 473T626 555\",81:\"460 -107Q460 -72 464 -42T468 -7L457 -10Q446 -14 424 -18T379 -22Q276 -22 213 50T149 237Q149 326 186 413T282 563T412 665T552 704Q664 704 726 631T788 442Q788 305 703 180Q627 64 517 13L506 8Q506 7 508 -12T513 -38T522 -59T538 -79T565 -85Q604 -85 634 -59T672 0Q676 11 684 11Q693 11 695 2Q695 -1 690 -20T673 -69T644 -126T599 -174T538 -194Q464 -194 460 -110Q460 -108 460 -107ZM689 481Q689 578 646 621T551 665Q468 665 391 586Q321 512 285 399T249 202Q249 106 295 58Q310 41 314 41Q315 41 315 46Q315 83 344 118T420 154Q450 154 473 135Q493 114 500 69L502 58L512 65Q571 110 613 192T672 348T689 481ZM472 49Q472 118 415 118Q393 118 373 98T353 51Q353 18 386 18H387Q424 18 472 40V49\",82:\"62 0Q55 7 55 11Q55 27 62 41Q66 46 96 46Q132 47 143 50T160 62Q162 66 231 344T301 626Q301 627 300 629V631Q294 637 239 637H221Q215 642 215 645T217 664Q221 677 227 683H386Q554 682 569 679Q571 678 580 676Q643 662 680 623T717 533Q717 473 667 420T528 337L538 330Q563 314 578 286T594 228Q594 212 588 147T581 65Q581 36 589 26T616 16H618Q637 16 652 37Q668 57 677 94Q679 105 701 105T723 95Q723 89 717 72T698 33T662 -5T610 -22Q555 -22 513 3T471 88Q471 107 486 168T502 244Q502 303 452 320Q445 322 382 323H320L288 192Q255 63 255 55T307 46Q338 46 340 40Q342 37 339 21Q335 3 330 1Q326 0 320 0Q317 0 306 0T265 1T190 2Q99 2 73 0H62ZM612 558Q612 566 612 568T610 581T603 597T590 611T567 625T532 635Q526 636 470 637Q458 637 445 637T422 636T412 636Q402 635 397 627L390 598Q383 570 373 532T354 455T337 389T330 361Q356 360 384 360H415Q483 360 527 382Q557 399 574 424T604 498Q612 533 612 558\",83:\"198 460Q198 551 269 628T432 705Q516 705 557 644L583 673Q589 679 593 684T600 693T605 698T609 702T611 704T614 705T618 705H620Q633 705 633 698T605 577T573 459L570 456H554Q546 456 543 456T536 457T532 460T531 466Q531 469 533 489T536 532Q536 573 525 600T496 640T462 657T427 662Q369 662 325 612T281 503Q281 475 290 458T318 430T356 415T407 401T463 383Q506 360 522 323T538 258V244Q538 141 465 60T300 -22Q198 -22 152 41L143 31Q137 25 126 12T106 -10T95 -21L92 -22Q88 -22 86 -22Q81 -22 78 -20T74 -16V-14Q74 -11 132 221Q134 227 155 227H171Q177 221 177 215Q177 212 175 205T171 182T169 147Q171 99 195 70T246 33T306 25Q358 25 400 70T453 169Q455 180 455 203V210Q455 263 414 285Q409 288 347 305Q271 328 254 339Q239 350 224 371Q198 409 198 460\",84:\"178 437Q173 442 171 446Q171 451 238 654Q243 670 250 677H681H762Q792 677 799 676T806 667Q806 661 788 553T768 444Q768 437 746 437Q727 437 723 445Q723 450 729 492T736 562Q736 589 728 602T693 624Q675 630 622 630H595Q575 630 571 629T564 623Q562 621 492 342T422 59Q422 48 502 46H542Q548 38 548 37T545 19Q541 6 535 0H517Q475 2 357 2Q315 2 279 2T223 2T198 1Q179 1 179 9Q179 14 182 24Q187 42 190 44Q194 46 206 46H232Q289 47 301 49T326 65L395 344Q465 619 465 626Q465 629 462 629Q456 631 411 631Q364 631 336 625T288 597T255 549T224 467Q215 442 210 437H178\",85:\"636 637Q627 637 624 639T620 650Q620 670 633 683H644Q702 681 753 681Q760 681 772 681T796 681T820 682T838 683H845H853Q860 676 860 672Q858 647 848 637H832Q764 633 750 598Q745 588 698 400T648 204Q627 140 584 86Q484 -22 378 -22Q300 -22 247 31T194 167Q194 176 194 182T196 198T200 218T207 248T217 288T231 346T250 422Q300 618 300 626Q300 627 300 629L299 631Q293 637 238 637H220Q214 642 214 645T216 664Q220 677 226 683H239Q307 681 372 681Q480 681 486 683H496Q502 677 502 674T500 656Q496 643 490 637H472Q418 637 406 630Q400 627 394 603T344 410Q299 232 292 198T284 135Q284 102 294 78T322 44T355 29T387 24Q455 24 515 74T604 211Q605 215 653 404T701 607Q701 618 686 627T636 637\",86:\"667 637Q657 637 654 639T650 650Q650 670 663 683H675Q704 681 772 681Q793 681 818 682T847 683Q868 683 868 672Q868 670 865 658T860 643Q857 637 848 637Q785 637 749 587L394 -15Q387 -22 366 -22Q346 -22 342 -16Q341 -13 313 303Q285 622 285 623Q283 631 273 634T229 637Q205 637 205 648Q205 654 208 666T217 682Q219 683 230 683Q276 680 329 680Q444 680 456 683H466Q472 677 472 674T470 656Q466 643 460 637H448Q384 637 384 615Q385 612 406 371T427 126Q427 125 495 240T632 473T704 596Q707 604 707 609Q707 633 667 637\",87:\"234 637H226Q205 637 205 648Q205 673 216 682Q218 683 231 683Q265 681 340 681Q371 681 404 682T443 683Q458 683 462 681T467 672Q467 670 464 658T459 643Q457 637 434 637Q407 636 394 632T378 623T376 613Q376 589 385 377T394 149L511 361Q542 419 596 519L613 551L612 585Q610 621 610 624Q608 637 559 637H555Q537 637 537 647Q537 654 540 664Q544 677 550 683H561Q600 680 656 680Q771 680 783 683H792Q798 677 798 675T796 658Q792 643 790 640T778 637H774Q721 637 708 620L717 385Q726 150 727 149Q727 148 752 193T812 303T882 433T942 546T969 596Q970 600 970 606Q970 610 969 613T966 620T961 625T955 628T949 631T941 633T934 634T927 636T920 637Q903 637 903 648Q903 650 905 664Q909 677 915 683H928Q960 681 1031 681Q1050 681 1073 681T1101 682Q1124 682 1124 672Q1124 655 1117 643Q1114 637 1104 637Q1085 637 1069 632T1043 618T1026 603T1014 588L1009 580L687 -16Q681 -22 660 -22Q643 -22 637 -16Q635 -14 627 223Q617 441 617 464L602 441Q578 397 487 228Q456 171 423 110T372 17T355 -15Q348 -22 328 -22Q312 -22 308 -20T303 -9Q303 -5 291 310T277 627Q273 636 234 637\",88:\"684 0Q670 0 634 1T569 2Q512 2 482 2T449 1Q433 1 433 10Q433 11 435 25Q437 34 438 37T442 43T448 45T459 46T476 49Q506 58 506 64Q506 65 467 179T426 295L382 244Q339 194 295 142T249 86Q245 79 245 72Q245 48 279 46Q293 46 293 32Q293 13 280 0H268Q206 2 151 2Q70 2 64 0Q50 0 50 11Q50 15 53 27Q57 41 60 43T78 46Q154 49 205 100Q207 103 312 225L411 341L407 353Q404 360 381 428T336 560T310 627Q301 636 255 637H229Q223 643 223 645T225 664Q229 677 235 683H246Q288 680 346 680Q462 680 477 683H487Q493 677 493 674T491 656Q488 644 485 641T471 637Q461 635 454 635Q419 626 421 619Q421 617 453 524T486 430T554 509T624 593Q631 604 631 611Q631 622 621 629T598 637Q583 637 583 648Q583 650 585 660Q589 676 591 679T602 683Q606 683 637 682T715 680Q742 680 771 681T804 682Q825 682 825 672Q825 650 817 642Q814 637 797 637Q739 634 700 608Q684 597 659 569T505 389L501 384L557 222Q612 61 616 57Q625 47 671 46Q691 46 697 45T704 36Q704 35 702 23Q701 19 700 14T699 7T696 3T692 1T684 0\",89:\"232 637Q198 637 198 647Q198 651 201 664T210 682Q212 683 223 683Q269 680 325 680Q443 680 455 683H465Q472 676 472 672Q472 656 465 642Q460 637 441 637Q395 634 395 623Q395 621 438 478T482 334T583 460T688 591Q688 593 694 601T700 617Q700 637 668 637H666Q655 637 655 648Q655 654 658 664Q660 672 660 673T663 678T668 682T677 683Q680 683 704 682T776 680Q801 680 828 681T858 682Q875 682 875 673Q875 669 872 657T867 643Q865 637 848 637Q788 634 749 597Q733 581 608 424L487 273L461 170Q454 145 448 118T438 76T434 60Q434 54 436 52T452 48T496 46H514Q520 41 520 38T518 19Q514 6 508 0H495Q427 2 364 2Q350 2 323 2T272 0H250H241Q234 7 234 11Q234 27 241 41Q245 46 275 46Q312 47 323 50T340 64Q340 65 344 79T355 120T368 171L393 274L341 448Q288 622 286 626Q278 636 232 637\",90:\"203 452Q203 455 236 565T270 677Q270 681 274 681Q276 683 488 683H699Q704 678 704 675Q704 663 697 649Q697 647 449 348L201 50L266 49H301Q442 49 495 116Q525 155 556 251Q563 274 565 278T579 282H585Q609 285 609 271Q609 270 570 142T528 8T518 1T466 0H303Q253 0 197 0T131 -1Q112 -1 102 -1T87 1T81 3T80 8Q80 30 89 39Q90 41 204 178T446 470T575 626L584 637H512H504H475Q446 637 426 635T378 624T330 597T289 546T254 467Q247 446 243 444Q239 442 226 442Q203 442 203 452\",97:\"418 53Q418 26 438 26Q466 26 494 131Q500 151 504 152Q507 153 516 153H521Q531 153 534 153T540 150T543 144Q543 141 540 126T529 88T509 43T477 5T434 -11Q404 -11 383 3T354 30T347 48H346Q345 47 342 45T337 40Q282 -11 228 -11Q172 -11 137 34T101 146Q101 260 177 351T333 442Q343 442 352 441T369 437T382 431T393 425T402 417T409 410T414 402T419 396Q423 406 436 414T461 422Q475 422 484 413T494 395Q494 384 459 244T420 88Q418 80 418 58V53ZM397 323Q397 344 382 374T333 405Q302 405 271 372Q249 349 235 316T203 215Q184 135 184 108V100V94Q184 54 207 35Q218 26 235 26Q279 26 330 91Q343 109 346 118T372 217Q397 317 397 323\",98:\"158 683Q163 683 223 688T300 694Q312 694 312 685T279 544Q243 405 243 403L256 412Q268 422 292 432T338 442Q395 442 431 398T467 284Q467 175 393 82T229 -11Q175 -11 142 32T108 142Q108 176 115 207T166 412Q177 458 190 510T209 588T216 616Q216 629 209 632T170 637H149Q143 643 143 645T145 664Q150 683 158 683ZM178 109Q178 27 234 27Q247 27 254 29Q295 44 323 94Q343 129 363 208T384 332Q384 354 382 361Q369 405 332 405Q282 405 228 326L222 317L205 250Q178 142 178 109\",99:\"257 -10Q183 -10 143 37T103 155Q103 257 173 341T337 440Q341 441 348 441H358Q421 441 445 415T469 356Q469 320 450 305T410 289Q392 289 381 299T370 325Q370 362 404 378L414 383Q392 402 365 405Q322 405 285 375T227 294Q217 271 202 213T187 119Q187 27 263 27Q299 27 330 40Q361 51 386 71T424 106T440 121Q444 121 455 110T466 96Q466 92 458 81T432 54T390 24T331 0T257 -10\",100:\"418 54Q418 26 438 26Q466 26 494 131Q500 151 504 152Q507 153 516 153H521H526Q543 153 543 144Q543 143 541 129Q531 91 521 65T487 14T434 -11T383 3T354 30T347 48H346Q345 47 342 45T337 40Q282 -11 228 -11Q172 -11 137 34T101 146Q101 255 174 348T337 441Q354 441 368 437T390 427T404 414T413 404T417 400L471 616Q471 629 464 632T425 637H404Q398 643 398 645T400 664Q405 683 413 683Q418 683 478 688T555 694Q567 694 567 686Q567 676 495 389L419 86Q418 80 418 61V54ZM397 323Q397 329 394 340T385 367T365 394T333 405Q302 405 271 372Q249 349 235 316T203 215Q184 135 184 108V100Q184 71 191 56Q204 26 235 26Q267 26 300 57T344 112Q347 117 372 217T397 323\",101:\"107 166Q107 230 131 283T193 369T270 420T345 441Q346 441 352 441T361 442H364Q409 442 439 418T470 355Q470 270 366 239Q308 223 218 223H205Q189 164 189 125Q189 83 206 55T261 27Q309 27 353 50T426 109Q436 121 440 121T453 111T466 97Q469 92 455 77Q424 41 372 16T258 -10Q184 -10 146 41T107 166ZM416 333T416 354T401 390T360 405Q322 405 292 384T246 336T223 288T215 261Q215 260 240 260Q262 261 276 262T314 266T353 275T384 291T408 317\",102:\"351 608Q351 642 389 661Q368 668 365 668Q358 668 352 664Q349 663 347 661T342 654T337 647T333 637T330 627T327 614T324 601T321 587T318 571L291 432Q291 431 343 431H394Q400 426 400 423T398 404Q394 390 389 386L335 385H282L255 246Q212 20 189 -51Q136 -199 58 -204Q22 -204 0 -185T-23 -134Q-23 -100 -3 -85T37 -69Q54 -69 65 -80T76 -108Q76 -115 75 -119Q70 -134 61 -144T46 -158L39 -161Q39 -162 42 -163T50 -166T61 -168Q77 -168 91 -145Q98 -128 105 -95L125 -1Q145 90 146 98Q149 109 163 180T189 317T202 384T158 385H114Q108 390 108 393T110 412Q113 424 120 431H165Q211 431 211 433Q213 435 219 473T237 561T266 639Q282 667 310 686T367 705Q402 705 426 686T450 635Q450 600 430 585T390 569Q373 569 362 580T351 608\",103:\"103 163Q106 263 173 347T320 441Q322 441 329 441T341 442Q387 439 419 398Q420 399 420 400Q421 402 425 406T440 416T464 422Q476 421 485 413T494 396Q494 386 465 268T407 38T377 -77Q365 -123 310 -164T179 -205Q46 -205 46 -139Q46 -114 64 -97T106 -79Q127 -79 136 -91T146 -115Q146 -127 141 -138T130 -155T124 -162T125 -163Q133 -166 170 -168Q200 -168 217 -162Q242 -153 264 -130T297 -78Q298 -74 305 -46T320 10T327 38Q326 38 317 31T291 15T256 2Q249 1 231 1Q182 1 143 38T103 163ZM398 324Q398 330 395 346T375 383T332 405Q330 405 326 405T320 404Q291 396 263 365Q230 324 208 239T185 115Q185 38 238 38Q258 38 279 50T312 77T336 106L348 122Q349 125 373 223T398 324\",104:\"398 44Q398 26 414 26Q431 26 451 43Q477 71 496 136Q499 148 501 150T515 153H521Q531 153 534 153T541 150T544 143Q544 133 534 105T496 41T432 -8Q424 -10 408 -10Q370 -10 348 12T326 72Q326 93 342 135Q397 288 397 349Q397 367 396 372Q386 405 357 405Q283 405 228 310Q217 290 212 274T180 152Q153 42 148 26T135 3Q121 -11 102 -11Q89 -11 80 -3T69 19L216 616Q216 629 209 632T170 637H149Q143 643 143 645T145 664Q150 683 158 683Q163 683 223 688T300 694Q312 694 312 685Q312 674 277 539Q241 395 241 393Q242 394 249 399T259 407T271 415T285 424T300 431T318 437T338 440T362 442Q423 442 449 410T475 338Q475 290 437 178T398 44\",105:\"234 599Q234 620 251 638T292 656Q306 656 319 647T332 617Q332 594 313 577T273 560Q260 560 247 569T234 599ZM75 287Q75 292 82 313T103 362T142 413T196 441H214Q248 441 270 419T293 357Q292 338 289 330T245 208Q193 72 193 46Q193 26 209 26Q228 26 247 43Q273 71 292 136Q295 148 297 150T311 153H317Q327 153 330 153T337 150T340 143Q340 133 330 105T292 41T228 -8Q220 -10 204 -10Q160 -10 141 15T122 71Q122 98 171 227T221 384Q221 396 218 400T203 405Q175 403 156 374T128 312T116 279Q115 278 97 278H81Q75 284 75 287\",106:\"266 600Q266 622 283 639T322 656Q340 656 352 645T364 616Q364 596 347 578T305 560Q291 560 279 569T266 600ZM75 287Q75 293 86 316T117 369T168 420T236 442Q282 442 304 415T327 358V332L278 134Q269 98 260 60T246 3T236 -36T227 -66T220 -85T213 -101T204 -114Q181 -150 139 -177T46 -204Q8 -204 -12 -186T-32 -140Q-32 -112 -14 -96T27 -79Q48 -79 57 -91T67 -114Q67 -146 38 -166Q42 -168 49 -168Q75 -168 98 -147T130 -108T146 -71Q150 -59 199 138T250 346Q253 359 253 373Q253 405 230 405Q206 405 184 386T149 345T126 301L117 280Q115 278 98 278H81Q75 284 75 287\",107:\"158 683Q163 683 223 688T300 694Q312 694 312 686Q312 679 262 478L211 273Q212 272 219 276T248 299T296 349Q317 371 328 382T360 410T399 434T439 442Q462 442 480 427T498 373Q498 329 479 313T437 296Q420 296 409 305T398 331Q398 357 413 372T445 391Q454 392 448 399Q445 405 431 405Q408 405 377 385Q351 368 314 327T250 261Q243 257 243 254Q249 254 279 243T328 220Q366 192 366 146Q366 131 361 109T355 62V54Q355 26 376 26Q379 26 387 28Q420 36 443 130Q449 151 454 152Q457 153 465 153H470Q484 153 488 152T492 144Q492 141 489 126T476 88T454 42T420 5T372 -11Q331 -11 306 17T280 88Q280 100 283 119T287 146Q287 172 265 190T221 215T198 220Q197 220 173 121Q152 37 148 24T135 3Q121 -11 102 -11Q89 -11 80 -3T69 19L216 616Q216 629 209 632T170 637H149Q143 643 143 645T145 664Q150 683 158 683\",108:\"162 61Q162 26 183 26Q211 26 239 131Q245 151 249 152Q252 153 261 153H266H271Q288 153 288 144Q288 143 286 129Q276 91 266 65T232 14T179 -11Q144 -11 116 12T87 81Q87 96 88 102L216 616Q216 629 209 632T170 637H149Q143 643 143 645T145 664Q150 683 158 683Q163 683 223 688T300 694Q312 694 312 686Q312 676 240 389L164 86Q162 74 162 61\",109:\"81 278Q75 284 75 289Q77 299 89 338Q101 373 114 396T142 428T166 439T186 442H189Q225 440 251 417Q266 401 271 384L275 374L286 386Q342 442 414 442Q428 442 440 440T461 435T479 427T493 418T503 407T511 397T516 387T520 378T523 370L524 366Q546 395 583 418T667 442Q729 442 755 411T782 338Q782 290 743 178T704 45Q704 26 720 26Q773 26 802 136Q805 148 807 150T822 153H828Q838 153 841 153T848 150T851 143Q851 137 843 115T821 63T778 12T715 -10Q671 -10 652 16T632 71Q632 88 668 191T704 349Q704 367 703 372Q693 405 664 405Q637 405 613 393T571 360T547 329T534 309Q523 290 518 274T487 151Q455 24 452 16Q438 -11 408 -11T376 18Q376 26 411 167T447 314Q449 325 449 346Q449 372 444 384Q431 405 408 405Q334 405 276 305Q266 289 262 273T231 151Q199 24 196 16Q182 -11 152 -11T120 18Q120 26 159 182T200 347Q202 361 202 372Q202 405 181 405Q168 405 159 391Q145 374 132 328T117 280T98 278H81\",110:\"449 44Q449 26 465 26Q482 26 502 43Q528 71 547 136Q550 148 552 150T566 153H572Q582 153 585 153T592 150T595 143Q595 133 585 105T547 41T483 -8Q475 -10 459 -10Q421 -10 399 12T377 72Q377 93 393 135Q448 288 448 349Q448 367 447 372Q437 405 408 405Q381 405 357 393T315 360T291 329T278 309Q267 290 262 274T231 151Q199 24 196 16Q182 -11 152 -11T120 18Q120 23 159 181Q199 343 199 346Q202 360 202 372Q202 406 183 406Q163 406 148 374Q142 360 135 338T124 299T117 280T98 278H81Q75 284 75 287Q76 293 78 303T90 341T110 388T141 425T184 442Q195 442 204 441T221 436T235 429T247 421T256 412T262 403T267 394T271 387T273 381L274 378V374L287 387Q342 442 414 442Q474 442 500 410T526 338Q526 290 488 178T449 44\",111:\"103 155Q103 266 185 354T366 442Q435 442 476 394T517 275Q517 169 436 79T255 -11Q194 -11 149 32T103 155ZM187 119Q187 67 209 47T260 26Q290 26 321 47Q354 68 380 113T426 260Q432 291 432 315Q432 361 408 385Q388 405 358 405Q319 405 283 374T227 294Q217 271 202 213T187 119\",112:\"81 278Q75 284 75 287Q93 379 131 417Q154 442 189 442Q222 440 243 423T272 382L280 390Q335 442 389 442Q446 442 482 398T518 284Q518 212 480 137T375 19Q321 -10 291 -10H282H278Q237 -10 204 28L202 32L181 -51Q160 -135 160 -139Q160 -147 205 -148H230Q236 -155 236 -157T233 -175Q230 -187 227 -190T214 -194Q211 -194 202 -194T169 -193T108 -192Q40 -192 21 -194H13Q6 -187 6 -183T9 -167Q13 -153 16 -151T39 -148Q73 -147 78 -136Q82 -128 139 104Q199 337 199 347Q202 362 202 372Q202 406 182 406Q169 406 159 391Q145 374 132 328T117 280T98 278H81ZM221 111Q234 26 286 26Q307 26 336 47T385 116Q398 147 416 217T435 332Q435 354 433 361Q420 405 383 405Q333 405 279 326L273 317L221 111\",113:\"228 -11Q172 -11 137 33T101 147Q101 205 125 266T201 377T318 441Q322 442 333 442Q388 442 420 394L429 403Q439 413 455 423T481 437T494 442Q498 442 501 439T504 434Q504 425 435 149Q364 -135 364 -139Q364 -147 409 -148H434Q440 -155 440 -157T437 -175Q433 -191 429 -193Q425 -194 418 -194Q416 -194 406 -194T372 -193T309 -192Q259 -192 233 -192T204 -193Q190 -193 190 -184Q190 -181 192 -169Q196 -153 199 -151T219 -148Q266 -148 277 -141Q283 -137 305 -51L325 29L316 22Q270 -11 228 -11ZM397 323Q397 329 394 340T385 367T365 394T333 405Q302 405 271 372Q249 349 235 316T203 215Q184 135 184 108V100Q184 71 191 56Q204 26 235 26Q267 26 300 57T344 112Q347 117 372 217T397 323\",114:\"81 278Q75 284 75 289Q77 301 89 339Q122 442 183 442Q219 442 241 425T271 384L283 396Q327 442 384 442Q424 442 454 421T484 362Q484 327 464 312T424 296Q407 296 396 305T385 331Q385 352 394 365T414 384T424 390Q409 405 378 405Q322 405 276 315L268 300L234 161Q200 25 196 16Q182 -11 152 -11T120 18Q120 23 159 181Q199 343 199 346Q202 360 202 372Q202 405 182 405Q164 405 150 377T128 316T117 280Q115 278 98 278H81\",115:\"153 285Q153 349 197 395T311 442Q355 442 386 420T418 356Q418 321 401 308T365 294Q336 294 331 326Q331 336 334 345T343 359T353 368T362 374L366 376Q365 379 362 383T344 396T308 404Q265 404 246 377T226 325T244 289T287 275T339 258T383 212Q395 188 395 163Q395 132 379 95T333 32Q279 -11 207 -11Q154 -11 115 13T76 86Q76 108 83 123T102 145T121 153T135 156Q154 156 164 145T175 117Q175 82 142 66L132 62Q131 62 131 61Q131 57 139 49T166 34T210 26Q250 26 277 44T312 83T321 123Q321 153 301 166T248 185T204 198Q176 211 162 241Q153 258 153 285\",116:\"94 385Q87 392 87 395Q87 399 90 411T95 425Q97 430 103 430T149 431H196L215 511Q218 521 222 539T228 565T234 585T242 603T251 615T264 623T281 626Q311 626 315 597Q315 591 296 513T275 433Q275 431 320 431H366Q373 424 373 420Q373 398 360 385H263L189 86Q188 80 188 61V54Q188 29 201 27Q213 23 229 30Q253 37 276 66T316 138Q321 149 324 151T342 153H347Q364 153 364 146T360 130Q331 63 290 26T202 -11Q158 -11 135 18T111 81Q111 93 129 168T166 314L184 383Q184 385 139 385H94\",117:\"75 287Q75 299 89 333T135 404T205 441Q246 441 269 420T293 357Q292 338 259 245T225 95Q225 26 274 26Q301 26 324 43T358 77T369 99Q369 102 406 249T446 404Q460 431 490 431T522 402Q522 394 485 245T446 89Q443 74 443 56Q443 28 461 26Q487 26 507 86Q524 130 524 146Q524 147 530 153H547Q570 153 570 144Q570 138 561 109T544 62Q530 29 512 12Q492 -11 454 -11Q429 -9 410 2T385 23T376 41L363 28Q350 16 325 3T269 -10Q204 -10 176 25T148 108Q148 161 184 262T221 383Q221 405 206 405Q178 405 158 375T128 313T116 279Q115 278 97 278H81Q75 284 75 287\",118:\"387 386Q387 407 406 425T445 443Q466 443 479 423T492 371Q492 330 473 253Q411 18 307 -8Q298 -10 279 -10Q208 -10 179 26T149 114Q149 162 185 261T221 384Q221 405 206 405Q177 405 157 375T128 313T116 279Q115 278 97 278H81Q75 284 75 287T79 304T93 342T119 388T158 425T210 441H218Q243 441 268 421T293 357Q292 337 259 245T226 102Q226 26 285 26Q328 26 360 72T422 237Q429 265 429 290Q428 324 408 349T387 386\",119:\"591 386Q591 407 610 425T649 443Q670 443 683 423T696 371Q696 327 672 232T621 85Q575 -11 493 -11Q469 -11 449 -6T418 8T398 24T386 38L382 43Q347 -10 293 -10H286Q221 -10 186 21T150 115Q150 164 185 262T221 384Q221 405 206 405Q177 405 157 375T128 313T116 279Q115 278 97 278H81Q75 284 75 287T79 304T93 342T119 388T158 425T210 441H218Q243 441 268 421T293 357Q292 336 260 246T227 108Q227 26 292 26H295Q332 26 361 93L366 103V119Q366 122 367 133T369 150Q372 167 401 282T433 404Q446 431 477 431Q507 431 509 402Q509 396 500 358T474 254T446 140Q444 126 444 104V92Q444 66 459 46T502 26H505Q527 28 545 43T577 88T602 149T623 226Q633 265 633 290Q632 324 612 349T591 386\",120:\"275 356Q275 383 262 394T233 405Q196 405 166 371T121 289Q119 280 116 279T98 278H81Q77 282 76 283T75 288T78 300Q88 332 109 363T153 411Q195 442 235 442Q306 442 333 386Q373 442 427 442Q461 442 487 421T513 364T494 312T453 296Q436 296 425 305T414 331Q414 352 424 366T446 386L456 390Q448 404 421 404H418Q382 404 358 341Q355 332 328 227T298 105Q295 90 295 75Q295 26 339 26Q365 26 388 43T424 82T444 123T451 146L457 153H474Q490 153 493 152T496 144Q496 133 486 110T456 58T404 10T333 -11Q276 -11 237 45Q197 -11 146 -11Q108 -11 83 10T58 67Q58 99 76 117T119 135Q136 135 147 124T158 96Q158 89 157 85Q149 57 125 45L115 41Q125 26 151 26Q171 26 187 45T214 93Q217 102 244 210T273 330Q275 339 275 356\",121:\"75 287Q75 299 89 333T135 404T205 441Q246 441 269 420T293 357Q292 338 259 245T225 95Q225 26 274 26Q325 26 367 93L405 245Q442 393 446 404Q460 431 490 431T522 402Q522 400 416 -24Q389 -102 327 -153T196 -205Q152 -205 122 -181T91 -119Q91 -84 110 -67T152 -49Q170 -49 180 -60T191 -87Q191 -108 174 -128Q167 -134 157 -138T146 -144Q155 -153 159 -156T173 -163T199 -167Q229 -167 255 -149T297 -105T325 -52T342 -6T347 15Q315 -10 269 -10Q204 -10 176 25T148 108Q148 161 184 262T221 383Q221 405 206 405Q178 405 158 375T128 313T116 279Q115 278 97 278H81Q75 284 75 287\",122:\"160 317Q158 317 155 317Q136 317 136 324Q136 351 171 396T260 442Q292 442 321 410T365 375H369Q384 375 404 408L425 441Q427 442 444 442H460Q466 436 466 434Q466 419 426 367Q387 314 294 222T178 105L170 95L181 94Q198 93 236 81T295 68Q328 68 356 89T395 141Q398 150 401 151T419 153Q441 153 441 144Q441 110 394 50T282 -11Q251 -11 221 23T171 57Q157 57 143 47T121 26T104 3T95 -10Q93 -11 76 -11H60Q54 -5 54 -2Q54 3 61 14Q103 88 233 215Q349 329 349 338L302 351Q269 362 247 362Q227 362 212 356T192 342T183 327T178 320Q175 317 160 317\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texMathit=void 0,e.texMathit={65:[.716,0,.743],66:[.683,0,.704],67:[.705,.021,.716],68:[.683,0,.755],69:[.68,0,.678],70:[.68,0,.653],71:[.705,.022,.774],72:[.683,0,.743],73:[.683,0,.386],74:[.683,.021,.525],75:[.683,0,.769],76:[.683,0,.627],77:[.683,0,.897],78:[.683,0,.743],79:[.704,.022,.767],80:[.683,0,.678],81:[.704,.194,.767],82:[.683,.022,.729],83:[.705,.022,.562],84:[.677,0,.716],85:[.683,.022,.743],86:[.683,.022,.743],87:[.683,.022,.999],88:[.683,0,.743],89:[.683,0,.743],90:[.683,0,.613],97:[.442,.011,.511],98:[.694,.011,.46],99:[.441,.01,.46],100:[.694,.011,.511],101:[.442,.01,.46],102:[.705,.204,.307],103:[.442,.205,.46],104:[.694,.011,.511],105:[.656,.01,.307],106:[.656,.204,.307],107:[.694,.011,.46],108:[.694,.011,.256],109:[.442,.011,.818],110:[.442,.011,.562],111:[.442,.011,.511],112:[.442,.194,.511],113:[.442,.194,.46],114:[.442,.011,.422],115:[.442,.011,.409],116:[.626,.011,.332],117:[.441,.011,.537],118:[.443,.01,.46],119:[.443,.011,.664],120:[.442,.011,.464],121:[.441,.205,.486],122:[.442,.011,.409]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texOldstyleBold=void 0;var r=Q(6),T=Q(256);e.texOldstyleBold=r.AddPaths(T.texOldstyleBold,{48:\"259 460H279Q352 460 403 444T491 378Q528 320 528 219Q528 100 475 45Q417 -17 287 -17Q152 -17 99 44T46 219Q46 246 47 265T57 318T82 376T131 422T210 454Q234 460 259 460ZM389 229V271Q389 351 371 380T280 409Q232 409 208 385Q194 371 190 345T185 229V210Q185 108 194 83Q208 35 287 35Q317 35 336 42Q372 55 380 85T389 204V229\",49:\"119 417Q191 417 240 428T310 450T338 461Q353 461 357 452T361 400Q361 389 361 342T360 254V62H420H456Q483 62 488 58T494 35V29Q494 13 491 7T473 0Q468 0 424 1T295 2T167 1T117 0Q114 0 111 0T107 1Q96 8 96 27V35Q96 54 102 58T140 62H170H229V213Q229 363 228 363Q220 360 196 358T150 356L130 355H93Q84 360 82 365T80 386Q80 404 81 407T95 417H119\",50:\"214 399Q202 399 191 398T175 395T170 392L171 390Q172 389 174 386T178 379T181 369T182 355Q182 328 165 312T123 296Q99 296 82 312T64 356Q64 397 105 428T253 460Q301 460 337 456T411 441T476 403T514 338Q516 328 516 310V304Q516 257 470 227Q456 217 427 205T376 184L354 176Q350 174 325 162T277 139L254 128Q414 129 428 130H439Q450 148 453 166T460 188T486 193H493Q515 193 517 178Q517 171 502 94T484 11Q481 3 472 2T410 0H269Q65 0 62 2Q55 5 53 10T51 32Q51 54 56 58Q60 62 173 131Q296 207 318 224Q368 264 368 308Q368 342 342 363T283 392T214 399\",51:\"80 309Q80 367 131 414T276 461Q388 461 441 417T494 313Q494 265 463 223T373 155L361 151L376 147Q436 132 480 92T525 -15T487 -127T393 -192T274 -211Q179 -211 114 -167T48 -53Q48 -18 69 5T128 29Q168 29 188 5T208 -50Q208 -59 207 -67T203 -81T197 -92T190 -101T183 -109T177 -114T170 -118L167 -121Q160 -125 164 -127Q167 -129 176 -133Q215 -152 268 -152H273Q337 -152 356 -92Q364 -69 364 -14Q364 45 352 74T303 120Q287 125 240 125H230Q201 125 196 127T191 146V152Q192 170 196 173T233 178Q234 178 241 178T252 179T262 181T274 183T285 188T297 195T308 205T319 218T328 235T337 257Q345 280 345 320V330Q345 345 343 355T335 379T312 399T270 407Q226 407 177 377Q226 356 226 310Q226 270 204 253T153 235Q123 235 102 253T80 309\",52:\"180 0Q155 0 124 0T84 -1Q48 -1 40 3T32 27V37Q32 59 34 63T204 265T377 465Q380 468 383 468H387Q391 468 398 468T411 469Q432 469 438 468T449 459Q451 455 451 258V62H489H498Q531 62 536 58T542 31Q542 9 537 5T504 0H489H451V-132H489H498Q530 -132 536 -136T542 -163Q542 -181 538 -187T522 -194Q518 -194 483 -193T378 -192Q281 -192 256 -193L217 -194Q203 -189 203 -169V-163V-158Q203 -140 209 -136T246 -132H265H314V0H180ZM325 62V320L105 63L215 62H325\",53:\"131 29Q159 26 175 12T194 -13T197 -35V-41Q197 -58 195 -66Q191 -76 185 -84T173 -97T161 -105T152 -109L148 -110Q148 -112 158 -121T195 -141T252 -152Q274 -152 280 -151Q335 -137 349 -104T363 9Q363 85 356 114T322 157Q305 166 286 166Q251 166 223 154T182 131T162 109Q154 98 150 96T130 93Q107 93 102 104Q100 107 100 279V371V424Q100 461 110 461Q114 461 123 458T149 450T183 441Q234 429 286 429Q313 429 340 432T387 440T422 449T447 457T458 461Q472 461 472 435Q472 420 470 418Q464 405 438 379T352 325T226 297Q189 297 171 301H168V182Q169 182 174 185T190 194T213 205T248 213T292 217Q391 217 454 159T517 5Q517 -92 444 -151T255 -211Q167 -211 112 -160T57 -44Q57 -12 76 8T131 29\",54:\"48 316Q48 398 70 462T124 562T198 621T274 652T339 660Q377 660 384 659Q497 632 497 532Q497 507 482 487T431 466Q397 466 381 486T365 530Q365 569 405 593Q382 603 381 603Q361 607 350 607Q316 607 279 589T221 533Q199 489 196 385L195 370Q196 371 203 379T217 395T237 410T263 424Q283 431 313 431Q409 431 468 368Q526 310 526 208Q526 131 492 81T405 5Q359 -17 289 -17Q256 -17 227 -11T163 17T105 73T65 170T48 316ZM293 380Q244 380 220 331T196 212Q196 104 216 80Q240 41 292 41Q295 41 301 41T309 42Q338 46 355 62Q372 81 375 108T379 230Q378 314 372 333Q358 375 299 380H293\",55:\"95 210H88Q66 210 64 225Q64 229 82 345T102 465Q106 476 125 476H131Q162 476 162 458Q162 451 213 448Q221 448 238 447T260 446Q261 446 410 444Q436 444 468 444T509 445Q544 445 551 440T558 413V404Q558 395 547 380T478 301L392 202Q354 150 339 81T321 -104V-132Q321 -187 286 -203Q273 -211 255 -211Q236 -211 217 -199T190 -160Q189 -153 189 -130Q194 17 282 156Q309 200 370 270Q404 307 400 307H293Q151 306 146 303Q140 300 132 259T120 215Q115 210 95 210\",56:\"48 164Q48 199 59 228T92 277T128 307T163 329Q159 332 155 336Q135 346 110 382Q80 427 80 477Q80 564 147 620Q202 660 264 660Q266 660 275 660T290 661Q384 661 439 619T494 506Q494 486 489 468T477 437T459 413T440 395T421 380T406 370L410 368Q414 365 421 361T437 351T456 335T476 316T495 291T511 262T522 228T526 189Q526 93 460 38T282 -17Q242 -17 205 -9T130 19T71 75T48 164ZM406 506Q406 545 379 576T283 607Q218 606 193 585T168 536Q168 522 172 513T195 490T224 471T275 443L346 403Q406 446 406 506ZM291 42Q365 42 395 70T425 134V141Q425 170 401 190T319 242Q308 248 302 251Q286 260 266 271T235 288L225 294Q222 292 217 289T198 274T175 249T157 212T148 163Q148 116 179 79T291 42\",57:\"175 -140Q198 -152 236 -152Q294 -152 332 -116Q356 -91 366 -54T379 62V78L376 74Q372 70 366 64T352 50T333 35T308 23Q289 17 262 17Q168 17 108 77T48 235Q48 273 59 317Q81 381 141 421T276 461Q279 461 285 461T295 460Q326 460 354 454T415 426T471 371T510 277T526 136Q526 42 501 -28T432 -136T341 -192T240 -210Q199 -210 169 -201T121 -178T94 -146T80 -112T77 -82Q77 -51 95 -33T143 -15Q170 -15 189 -33T209 -81Q209 -116 175 -140ZM377 244V274Q377 300 376 316T368 352T348 384T312 405Q307 406 283 406Q257 406 238 396T213 376T205 361Q196 341 196 259V233V181Q196 122 211 96T278 69H298Q330 82 345 104Q367 134 376 190Q377 200 377 244\",65:\"761 751Q784 751 784 728V711Q784 570 795 417T820 191Q844 76 865 76Q868 76 902 93T962 112H973Q989 104 989 94Q989 92 987 86Q978 47 846 -11Q812 -25 779 -26Q722 -26 708 9Q688 47 669 161H524L379 162L359 136Q286 43 234 -3T142 -49T71 -19T39 55Q39 92 60 131T103 174Q113 174 117 167T124 149T136 128T166 110Q183 105 190 105Q230 105 341 246Q401 322 453 397T531 514T582 601T611 651H640V663Q640 692 676 718T745 750Q747 750 752 750T761 751ZM658 266Q653 312 649 377T644 489T641 541V556L557 415Q500 325 448 253Q467 261 524 261H568H658V266\",66:\"441 83Q571 83 571 195Q571 246 538 279T466 322T386 333Q378 333 357 330T329 327Q307 327 307 345Q307 354 313 365T347 396T419 430Q546 472 581 498Q594 508 594 535Q594 574 567 589T508 604Q469 604 442 583Q390 546 342 457T265 256Q237 148 186 60Q167 29 144 13Q105 -15 68 -17H65Q40 -17 40 1Q40 7 53 29T87 100T124 210Q162 373 190 575Q188 575 174 567T138 550T98 542Q75 542 75 560Q75 588 123 618Q135 625 203 659T281 696Q299 703 316 703Q339 703 339 685Q339 656 328 583L333 588Q338 592 346 599T367 615T394 634T428 654T467 674T511 690T559 701T611 705Q651 704 681 689Q739 659 739 598Q739 507 595 427L584 421Q585 420 595 416T610 410T626 402T644 392T660 380T677 365T691 347T703 325T710 299T715 268Q717 193 665 130Q622 73 531 28T348 -17Q275 -17 225 10Q206 19 200 24T193 36Q193 57 231 86T311 119H322Q386 83 441 83\",67:\"243 -20Q135 -20 78 48T20 218Q20 280 39 344T98 470T193 580T324 661T488 702H490Q491 702 493 702T498 703T507 703T518 702H526Q599 702 599 631Q599 597 577 550T541 486Q523 463 490 447T431 430Q423 430 419 433Q409 437 409 450Q410 456 432 499T454 567Q454 586 446 594T415 603Q316 603 254 532Q216 487 190 421T164 284Q164 228 181 186T226 122T282 90T340 80Q377 80 405 96T449 131T492 167T553 187H555Q580 187 580 168Q580 153 551 123T476 60T367 4T243 -20\",68:\"107 0Q92 5 92 18Q92 33 113 53T160 86Q170 91 182 94T197 100L206 120Q248 226 273 337T304 501T309 585Q278 585 234 577T179 557Q172 550 166 532T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q281 686 447 686H480H517Q692 686 784 631Q885 571 885 450Q885 339 805 239T586 75T286 1Q276 0 187 0H107ZM741 391Q741 424 731 452T694 510T613 558T481 584Q476 584 468 584T457 585L449 586V579Q441 501 425 424T391 292T357 193T330 125T319 100H324Q511 100 628 175Q688 215 714 275T741 391\",69:\"495 516Q485 516 478 520T470 532Q470 537 476 550T482 570Q482 589 465 596T401 603Q344 603 319 582Q295 558 295 519Q295 493 312 474T355 445T407 432T455 427Q477 427 477 409Q477 395 453 371T389 333Q380 330 345 327T279 312T223 272Q181 223 181 176Q181 131 225 107T324 83Q366 83 395 98T448 136T487 167Q517 185 547 187H551Q574 187 574 170Q574 151 535 113T421 36T271 -15Q260 -16 226 -16Q181 -16 152 -9Q104 4 71 33T37 111Q37 140 50 176T106 263T216 356Q215 357 207 362T190 374T172 392T156 419T150 456Q150 521 208 580T341 670T474 702Q475 703 499 703Q528 703 547 701T586 693T615 673T627 637Q627 584 581 550T495 516\",70:\"812 567Q804 567 795 570T786 579Q786 586 647 586H559L558 582Q558 575 539 510T506 407L498 384H775Q788 378 790 368Q790 328 746 298T665 268Q646 268 642 284H457L447 261Q396 150 360 94Q329 46 270 8T149 -30Q123 -30 100 -24T63 -10T37 9T22 26T17 36Q17 59 56 88T135 119Q145 119 149 117T165 104Q187 78 227 72Q232 72 234 76Q245 93 273 145T350 323T424 570L428 586H276Q265 575 239 563T190 551Q180 551 174 556T167 569Q167 580 179 597T213 634T278 668T371 685Q374 686 624 686Q863 685 888 682Q917 678 927 663Q930 658 930 650Q930 624 888 596T812 567\",71:\"50 279Q50 361 88 438T190 570T335 661T503 702H514Q524 703 532 703Q671 703 671 626Q671 580 614 514T495 447Q472 447 472 465Q472 477 499 511T527 562Q527 582 507 592T433 602Q351 602 302 569Q252 535 223 469T194 344Q194 266 237 217T352 168Q401 168 442 205T505 316Q515 345 551 368T622 393H625Q649 393 649 376Q649 371 635 318T612 237Q580 129 540 62T442 -49Q353 -114 264 -114Q259 -114 252 -114L246 -113Q190 -113 142 -107T81 -96Q71 -90 71 -81Q71 -57 110 -30T187 2Q196 2 236 -4T338 -14Q371 -14 377 -9Q410 24 446 113L451 127Q353 68 253 68Q157 68 104 129T50 279\",72:\"42 447Q20 447 20 465Q20 481 47 515T119 589T239 657T392 686Q443 686 463 664T484 616Q484 570 473 506T452 401L441 360Q441 359 550 359H660L663 370Q684 435 716 522T758 624Q771 646 806 666T870 686Q894 686 894 668Q894 667 867 597T804 416T752 218Q737 135 737 93Q737 77 746 65T778 53Q799 53 803 54T814 63Q831 86 864 103T924 120Q946 120 946 100Q945 85 931 63T888 16T806 -27T684 -48H681Q625 -48 603 -10Q593 4 593 29Q593 71 603 131T624 230L634 269Q632 269 624 266Q610 261 600 261T507 259H411L399 222Q344 62 322 21Q301 -7 268 -24T209 -41H207Q187 -41 185 -25Q185 -17 192 2T220 71T261 184Q284 256 284 258Q284 259 227 259H170Q169 259 166 261T162 264T158 266T156 271T155 277Q155 296 184 320T250 356Q259 358 286 359Q312 359 312 360Q314 372 318 385Q332 450 339 526Q339 530 339 535T340 543Q340 586 296 586Q255 586 227 576T188 553T165 523T146 497Q127 476 97 462T42 447\",73:\"56 499Q32 499 32 516Q32 540 64 580T165 649Q241 682 365 685Q366 685 376 685T405 685T445 686T496 686T553 686H732Q746 677 746 668Q746 646 711 620T642 587L572 586H503Q479 546 458 479T424 352T383 224T318 111L309 101L412 100H514L523 109Q567 150 618 153Q644 153 644 135Q644 132 642 124Q629 86 581 52T476 6Q454 2 433 2T216 0Q-11 0 -15 2Q-27 6 -27 18Q-27 37 2 61T59 93Q77 100 142 100H198Q255 177 299 369Q337 513 382 574L391 586H348Q261 586 176 576Q163 543 124 521T56 499\",74:\"286 390Q263 390 263 407Q263 432 293 481T367 566Q511 687 724 687Q738 687 761 687T793 686H923Q937 677 937 668Q937 648 905 623T842 589Q829 587 817 586T802 585T795 583T788 578Q709 506 632 189Q622 153 615 134T588 81T537 17Q482 -39 404 -76T247 -114Q192 -114 158 -100Q53 -61 53 32Q53 59 58 73T79 102Q126 147 177 147Q200 147 200 128Q200 123 198 112T196 96Q196 47 238 17T345 -13Q362 -13 377 -9T404 0T426 16T444 34T459 55T470 76T478 97T483 116T488 132L490 141Q511 222 520 257T554 364T608 486T675 576L685 586H634H612Q532 586 484 564Q453 549 436 526T409 478T395 447Q378 424 345 407T286 390\",75:\"98 542Q75 542 75 560Q75 588 123 618Q132 624 199 657T275 694Q291 703 315 703Q327 703 332 699T338 690T339 670Q339 596 323 505T283 337T237 194T198 90L181 53Q170 31 136 8T68 -17H65Q40 -17 40 0L76 92Q112 185 150 322T194 564V578L168 565Q125 542 98 542ZM834 142Q834 125 819 100T774 48T692 3T576 -16H560Q540 -16 508 6Q469 33 422 108T342 267T309 398Q309 411 310 417T320 442T347 482Q401 542 517 615T710 702Q712 702 721 702T735 703Q772 703 791 690Q819 674 819 646T792 597T733 574H722Q704 584 704 599Q706 607 700 610T672 617L660 613Q609 595 524 538T423 450V440Q423 376 488 247T604 83Q621 70 640 70Q677 70 701 82Q713 87 718 101T737 132T783 160Q792 163 807 163Q834 163 834 142\",76:\"63 -17Q41 -17 41 0Q41 22 85 54Q101 68 113 92T133 141T154 219T182 315Q230 462 306 553Q345 599 391 632T478 678T543 697T582 703Q584 703 589 703T598 702Q643 702 666 676T689 613Q689 588 683 575Q674 551 632 524T552 496Q530 496 530 512Q530 517 531 525T533 538Q533 559 522 577T480 596H476Q462 596 451 588T415 544Q350 447 310 281Q284 181 261 136L255 124H285Q342 123 441 107T583 90L596 89Q603 116 647 144T729 173Q751 173 751 157Q751 118 685 60T523 -15Q514 -16 479 -16Q421 -16 320 0T171 18H155L142 10Q98 -17 63 -17\",77:\"38 20Q38 59 60 99T104 139Q106 139 126 125T176 106H181Q200 106 221 139T286 281Q322 370 342 451T368 581T376 634Q384 657 420 680T487 703Q502 703 507 696T522 649Q538 589 554 537Q579 453 609 372T660 248T686 202Q687 201 739 244T830 322L1166 642Q1225 700 1230 701Q1230 701 1237 703Q1258 703 1258 667L1253 637Q1248 607 1241 558T1227 451T1214 326T1209 202Q1209 77 1232 77Q1237 77 1269 94T1326 112H1329Q1353 112 1353 94Q1353 81 1334 60Q1311 37 1248 7T1150 -24H1141H1135Q1085 -24 1074 26Q1064 75 1064 134Q1064 239 1086 426Q1087 430 1087 434L1061 410Q871 227 783 149L694 76Q653 44 647 40T631 34Q620 34 616 37T594 63Q546 125 514 198Q467 307 423 449L418 466L412 444Q376 310 306 153Q278 88 251 45T201 -18T163 -43T131 -49Q102 -48 70 -31T38 20\",78:\"47 139Q81 105 122 105Q137 105 147 117Q159 134 182 199T234 381T274 610Q275 634 284 647Q297 666 327 684T389 703Q403 703 408 695T428 645Q480 490 567 298Q628 163 673 103Q674 102 674 102T675 106Q732 331 803 551Q842 674 875 725Q908 775 966 807T1081 840H1084Q1105 840 1105 803Q1105 768 1088 733T1051 689Q1045 686 1032 686Q986 683 948 663T901 624Q881 579 837 430T760 154L726 28Q725 28 725 28T723 25Q716 0 682 -24T611 -48Q600 -48 595 -45T576 -23Q522 44 480 124Q417 243 332 463L328 473L325 457Q291 293 227 124Q159 -49 72 -49Q38 -49 5 -28Q-24 -8 -24 21Q-24 58 -3 98T41 139H47\",79:\"433 703Q456 703 456 685Q456 672 441 655T407 627Q402 623 378 611T328 579T276 524Q207 434 207 324Q207 222 270 153T441 84Q566 84 651 177T737 400V405Q737 496 693 549T576 603Q542 603 510 560Q490 537 472 502T442 454Q397 412 346 409Q320 409 320 427Q320 430 322 436Q331 465 360 507T433 594T542 671T677 703Q776 703 829 636T882 468Q882 369 831 277T702 122T528 21T343 -17Q214 -17 139 61T63 257Q63 336 94 409T173 534T272 625T367 684T432 703H433\",80:\"170 -67Q147 -67 147 -49Q147 -42 162 -8T204 99T253 254Q274 332 288 415T305 542L308 585Q277 585 234 577T179 557Q172 550 166 532T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q279 686 448 686H495H537Q622 686 678 677T784 637Q846 598 846 533Q846 452 776 375T597 252T378 206H366L358 181Q341 130 316 68T282 -7Q262 -33 230 -50T170 -67ZM701 468Q701 512 661 540T570 577T461 586H448V582Q446 576 443 545T428 447T395 301L389 280Q390 280 398 284T419 295T441 303Q443 304 484 306T572 321T651 359Q701 402 701 468\",81:\"874 453Q874 372 836 298T750 177T638 89T543 33T486 8L483 7Q485 5 523 -7T622 -32T726 -46Q741 -46 746 -45T755 -41T762 -27Q770 -1 806 23T878 50H890Q905 42 905 33Q905 -8 838 -68T670 -145Q662 -146 628 -146Q538 -146 389 -100T164 -50Q132 -50 132 -32T162 11T227 47Q231 48 286 51T394 62T518 100T641 180Q730 271 730 387Q730 478 673 540T520 602Q410 602 337 525T264 355Q264 284 310 244T420 203Q476 203 568 222Q594 222 594 204Q594 184 565 161T508 128Q433 103 316 103Q227 103 174 157T120 290Q120 382 182 471T343 620T548 697Q578 703 601 703Q604 703 611 703T623 702Q663 702 687 696Q760 679 817 618T874 453\",82:\"159 0Q159 5 172 34T205 114T245 229T284 386T309 575V585H304Q303 585 295 585T282 584Q233 579 207 570T175 553T165 531T156 509Q140 484 105 466T44 447Q20 447 20 465Q20 482 34 510T76 565Q122 608 173 632Q279 686 448 686H505H582Q683 686 745 672T834 611Q842 594 842 565Q842 523 824 484T780 419T722 370T669 336T632 318L619 312L626 302Q640 279 667 227T696 172Q717 133 735 112T762 88T784 84Q824 84 872 118T957 153Q981 153 981 136Q981 114 937 78T820 13T684 -17Q646 -17 616 8T569 66T526 151T477 234Q461 256 446 265Q437 272 421 274Q400 274 400 291Q400 311 430 336T495 371Q496 371 543 374T627 392T681 436Q699 467 699 503Q699 550 644 568T471 586H449V582Q449 581 447 559T438 499T422 413T393 298T348 165Q313 73 296 45Q282 24 249 4T185 -17Q159 -17 159 0\",83:\"204 476Q204 525 248 577T372 666T539 703T674 683T721 612Q721 588 714 569Q704 547 669 524T601 499Q573 499 573 516Q573 521 575 527T577 543Q577 563 568 574T548 588L539 590Q490 603 444 603Q418 603 394 597T364 583Q348 567 348 533Q348 493 382 466T459 425T555 387T633 330Q662 292 662 249Q662 153 544 69T257 -16Q218 -16 208 -15Q118 1 64 46Q25 76 25 126Q25 185 82 235T203 290H207Q229 290 231 274Q231 243 180 213Q173 209 172 206T170 189T171 170T183 150T216 121Q273 83 356 83Q412 83 459 100Q493 111 507 141Q518 165 518 185Q518 208 506 228T478 262T437 288T398 306T360 320Q316 335 285 352T239 384T215 416T205 443T204 467V476\",84:\"61 462H59Q38 462 38 479Q38 528 109 594T289 683L304 685L837 687L846 693Q889 720 923 720Q947 720 947 702Q945 671 892 631T776 583Q774 583 772 583T769 582T766 582L764 581H758Q753 581 744 581T722 580T693 580T662 580H563L514 385Q507 355 493 299T475 225T460 172T443 119T426 76T402 24Q386 -11 355 -33T304 -61T266 -69Q242 -69 242 -50Q243 -45 253 -25T278 32T307 115L364 340Q405 511 413 538T436 580H207Q202 572 200 568T197 561T195 552T190 537Q176 511 135 487T61 462\",85:\"124 586Q107 586 74 569T15 552H13Q-10 552 -10 570Q-10 605 70 645T222 686Q283 686 283 631Q283 590 246 504T172 326T135 181Q135 130 157 107T205 83Q221 83 259 106Q347 165 453 301T604 548Q607 557 612 569T619 587T624 600T628 612T632 621T637 628T641 634T647 640T654 645T662 652Q706 686 748 686Q771 686 771 669Q771 656 754 614T700 467T630 229Q615 168 610 105Q610 88 617 78L641 90Q681 111 706 112Q733 112 733 95Q733 82 714 60Q694 40 633 10Q567 -23 532 -24Q507 -24 495 -17Q466 -4 466 32Q466 96 500 225Q277 -17 102 -17Q56 -17 23 17T-10 118Q-10 164 13 234T64 363T115 481T139 567Q139 586 124 586\",86:\"25 608Q25 628 60 657T148 686Q184 683 213 671T273 625T327 538T363 394T380 184L381 134L399 148Q503 226 574 302T667 415T689 467Q688 474 684 482T672 502T645 521T600 532Q576 532 576 567Q576 604 597 644T641 685H649Q701 685 737 648T774 545Q774 457 703 333T461 66Q397 13 332 -32T255 -77Q237 -77 237 -30V-23Q241 20 241 109Q241 483 115 569Q91 586 50 589Q25 589 25 608\",87:\"25 607Q25 629 62 657T142 686Q205 686 248 647T312 541T339 411T347 275Q347 249 345 203V189Q375 219 449 316T587 516Q629 584 629 587Q629 589 626 597T622 607Q622 629 658 656T732 686H744Q755 680 757 678Q757 677 769 649T799 577T835 475T874 339T904 183Q908 157 910 151L925 169Q997 252 1059 343T1121 474Q1120 498 1103 513T1059 532Q1036 532 1036 568Q1036 600 1053 636T1090 683L1097 686H1109Q1147 684 1176 652T1206 551Q1206 460 1131 320T897 7Q859 -33 840 -52T816 -74T804 -77Q788 -77 784 -32Q783 -28 783 -26Q774 108 744 239T691 436T665 501Q664 501 649 475T602 400T528 289T420 146T280 -15Q243 -56 231 -66T210 -77Q191 -77 191 -40Q191 -38 195 -4T204 91T209 217Q209 290 202 351T177 469T126 557T45 589Q25 589 25 607\",88:\"762 562Q762 579 737 584T711 604Q711 630 753 658T834 686Q864 686 885 669T906 627Q906 580 834 522T614 379L584 362V357Q585 354 589 315T597 233T603 183Q610 132 627 116T671 100Q678 100 704 113T754 126T778 107Q776 79 733 45T626 2Q615 1 578 1Q542 1 535 3Q521 7 510 15T491 31T477 54T467 78T460 108T456 137T452 170T449 201Q447 220 445 240T442 270L441 281Q435 281 357 233Q240 165 206 135Q200 128 200 124Q200 113 208 108T226 101T244 96T252 82Q252 61 214 31T129 1H120Q97 1 77 16T56 60Q56 105 133 168T414 345Q428 352 431 354T433 359Q422 493 414 522Q407 551 395 566T373 583T350 586H341L332 580Q290 560 265 560Q243 560 243 577Q243 585 248 596T269 624T306 653T365 676T447 686H456Q472 686 484 683T514 671T543 637T562 576Q565 557 570 501L577 437Q577 436 613 457T694 506T756 551Q762 558 762 562\",89:\"73 555Q49 555 49 573Q49 602 110 644T239 686Q319 686 376 624Q416 584 444 511T483 361T499 240T503 173Q503 165 504 165Q506 165 524 184T556 218Q631 297 674 377T718 485Q718 505 699 526Q673 552 628 552Q619 552 613 562T607 590Q607 617 621 645T658 685Q661 686 671 686Q718 686 757 652T797 545Q797 476 749 369T602 146Q500 29 371 -67T176 -164Q112 -164 74 -120T36 -29Q36 5 55 36T95 67Q104 67 108 59T115 39T128 12T154 -12Q183 -30 216 -30Q239 -30 305 7L361 44L367 49V54Q367 95 364 143T351 273T312 429T243 546Q206 581 156 588L146 581Q108 555 73 555\",90:\"622 574Q522 579 420 579H396Q373 579 364 574T351 550Q339 516 297 490T218 462Q195 462 195 479Q195 487 197 492Q218 565 313 625T509 685Q564 685 650 683T755 680Q787 680 807 683T831 686Q853 686 853 669Q853 657 826 626Q742 532 641 437L619 415L622 414Q626 414 631 414T642 414Q697 411 697 388Q697 367 670 345T607 323Q605 323 592 325T546 329H522L490 302Q457 274 400 226T289 136L260 113L318 112Q345 111 452 109T587 106H627Q650 143 656 170Q666 197 710 225T788 253Q811 253 811 237Q811 211 781 160T710 77Q619 0 515 0Q507 0 497 0T484 1Q434 1 319 3T177 6Q123 6 95 2Q83 2 71 0H68Q46 0 46 17Q46 28 58 44Q68 56 100 80T210 165T383 307L408 329H361L314 330Q297 338 297 350Q297 368 320 388T368 413Q375 415 441 415H506L647 555L664 574H622\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texOldstyleBold=void 0,e.texOldstyleBold={48:[.46,.017,.575],49:[.461,0,.575],50:[.46,0,.575],51:[.461,.211,.575],52:[.469,.194,.575],53:[.461,.211,.575],54:[.66,.017,.575],55:[.476,.211,.575],56:[.661,.017,.575],57:[.461,.21,.575],65:[.751,.049,.921,{ic:.068,sk:.224}],66:[.705,.017,.748,{sk:.16}],67:[.703,.02,.613,{sk:.16}],68:[.686,0,.892,{sk:.0958}],69:[.703,.016,.607,{ic:.02,sk:.128}],70:[.686,.03,.814,{ic:.116,sk:.128}],71:[.703,.113,.682,{sk:.128}],72:[.686,.048,.987,{sk:.128}],73:[.686,0,.642,{ic:.104,sk:.0319}],74:[.686,.114,.779,{ic:.158,sk:.192}],75:[.703,.017,.871,{sk:.0639}],76:[.703,.017,.788,{sk:.16}],77:[.703,.049,1.378,{sk:.16}],78:[.84,.049,.937,{ic:.168,sk:.0958}],79:[.703,.017,.906,{sk:.128}],80:[.686,.067,.81,{ic:.036,sk:.0958}],81:[.703,.146,.939,{sk:.128}],82:[.686,.017,.99,{sk:.0958}],83:[.703,.016,.696,{ic:.025,sk:.16}],84:[.72,.069,.644,{ic:.303,sk:.0319}],85:[.686,.024,.715,{ic:.056,sk:.0958}],86:[.686,.077,.737,{ic:.037,sk:.0319}],87:[.686,.077,1.169,{ic:.037,sk:.0958}],88:[.686,0,.817,{ic:.089,sk:.16}],89:[.686,.164,.759,{ic:.038,sk:.0958}],90:[.686,0,.818,{ic:.035,sk:.16}]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texOldstyle=void 0;var r=Q(6),T=Q(258);e.texOldstyle=r.AddPaths(T.texOldstyle,{48:\"39 213Q39 274 53 319T89 389T139 429T192 448T242 452Q347 452 400 400Q460 335 460 213Q460 -22 250 -22Q39 -22 39 213ZM364 242Q364 279 363 301T355 348T338 385T306 406T254 415Q250 415 245 415T238 416Q217 416 190 404T150 368Q136 339 136 221Q136 114 146 78T200 23Q219 16 250 16Q280 16 299 23Q341 41 352 77T364 221V242\",49:\"116 410Q176 412 215 423T269 443T288 453H291Q293 453 301 447V254Q301 62 303 60Q307 52 322 49T394 46Q418 46 422 43T426 23Q426 8 424 4T411 0Q407 0 369 1T258 2T148 1T106 0Q96 0 94 4T91 23Q91 40 95 43T123 46Q180 46 195 49T215 61Q216 63 216 220V376Q192 367 119 364H93L86 371V403L92 410H116\",50:\"55 334Q55 386 105 419T236 453Q333 453 390 413T448 307Q448 278 437 256T406 218T365 193T318 172T277 151L248 134Q219 118 191 102T163 84T267 83L382 85H391Q399 99 406 126Q410 143 413 145T429 148Q440 148 442 147T449 139Q449 137 435 73T420 7Q420 6 414 0H233Q94 0 71 0T46 5Q46 5 46 6Q44 8 44 24Q44 39 46 41Q47 44 98 78T212 155T294 212Q347 257 347 304Q347 354 306 380T203 407Q150 407 120 377Q118 375 123 373Q146 362 146 332Q146 315 133 302T101 288Q85 288 70 298T55 334\",51:\"69 312Q69 377 122 414T233 452Q333 452 381 409T430 313Q430 268 402 223T311 149L301 144Q307 143 317 140T355 123T402 92T439 44T456 -25Q456 -101 396 -158T241 -216Q154 -216 98 -173T42 -68Q42 -58 44 -50T50 -35T57 -25T66 -17T75 -13T82 -10L87 -8Q92 -7 102 -7Q132 -7 147 -25T162 -66Q162 -112 118 -125L113 -126Q113 -129 127 -140T173 -162T239 -173Q268 -173 292 -158Q345 -124 345 -24Q345 33 329 67Q298 125 229 125H210H172Q166 131 166 142Q166 159 172 161Q178 161 208 164T244 169Q251 169 263 176T291 199T316 245T327 314Q327 413 238 413Q182 413 130 369Q177 350 181 312Q181 289 166 273T125 257Q102 257 86 272T69 312\",52:\"163 0Q139 0 109 0T71 -1Q43 -1 36 2T28 15V27V46L190 270Q325 457 330 462Q333 464 352 464H371L377 458V46H464L471 40V6L464 0H377V-65V-108Q377 -131 379 -137T391 -144Q409 -148 446 -148H464Q468 -151 471 -155V-187L464 -194H453Q395 -192 325 -192Q222 -192 210 -194H199L193 -188V-154L199 -148H228Q241 -148 250 -148T265 -146T275 -145T281 -143T284 -141T286 -138T289 -134V0H163ZM295 46V350L75 46H295\",53:\"159 -44Q159 -66 145 -80T109 -96H102L107 -105Q148 -173 228 -173Q255 -173 280 -162Q351 -128 351 -6V8Q351 67 344 98T316 151Q288 176 255 176Q175 176 136 109Q129 100 114 100Q97 100 95 106Q93 110 93 277V403Q93 451 98 451Q100 452 103 452Q105 452 124 445T177 431T251 423Q294 423 328 430T380 445T401 453Q410 453 410 435V422Q332 331 203 331Q152 331 140 339Q139 339 139 254V168Q194 214 256 214Q332 214 390 154T448 0Q448 -95 381 -155T229 -216Q153 -216 104 -166T50 -49Q50 -15 66 -1T105 13Q128 13 143 -3T159 -44\",54:\"42 313Q42 401 68 472T133 583T215 644T296 665H304Q317 665 329 664T360 657T393 640T418 608T432 557Q432 533 422 519T401 502T380 498Q358 498 343 512T328 550Q328 591 367 601L372 602Q372 604 365 609T341 620T307 626Q260 626 226 600T174 537Q147 483 143 376V356Q192 434 266 434Q317 434 357 409Q406 375 435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM251 396Q211 396 178 354T145 217Q145 159 152 122T166 73T187 47Q216 21 252 21Q294 21 321 47Q342 68 349 99T356 203V232Q356 264 354 285T345 331T322 373T280 395Q274 396 251 396\",55:\"75 246Q64 246 62 247T55 255Q55 259 72 357T90 458L94 462H99Q104 463 109 463H121Q128 460 128 452Q128 445 134 441T165 435T233 432T356 431H478L485 425V392L414 298Q408 290 385 260T358 223T337 191T317 154T302 116T289 68T282 14T275 -55T274 -137Q274 -173 272 -177Q262 -216 223 -216Q170 -216 170 -157V-148Q172 -78 189 -12T237 109T288 196T338 266Q345 275 348 279Q395 340 395 342Q396 343 376 343T274 343Q122 342 117 339T103 294T90 248Q88 246 75 246\",56:\"69 496Q69 570 124 618T247 666Q321 666 375 624T429 515Q429 468 405 433T320 361L346 344Q385 320 403 301T439 250Q456 212 456 181V172V160Q456 141 449 119T426 71T386 26T326 -8T246 -21Q160 -21 102 30T43 155Q43 265 167 332L176 337L161 347Q105 384 87 423Q69 458 69 496ZM371 513Q371 567 334 596T249 626Q198 626 163 598T127 532Q127 521 129 511T138 492T150 476T167 460T185 447T207 433T228 420L284 384L294 391Q346 424 363 469Q371 486 371 513ZM190 21T250 21T351 56T393 140Q393 180 362 213Q354 221 317 246T246 292L212 313Q210 313 200 307T173 287T142 256T117 212T106 157Q106 100 148 61\",57:\"171 -101Q171 -118 163 -130T146 -146T134 -151Q132 -151 132 -152Q132 -154 140 -159T167 -168T206 -173Q274 -173 317 -108Q356 -50 356 79V86L350 77Q308 9 231 9Q150 9 92 81Q42 141 42 228Q42 289 64 333Q93 390 142 421T235 452Q237 452 244 452T255 453Q289 453 321 439T386 391T437 290T457 128Q457 -29 381 -122T206 -216Q148 -216 108 -187T67 -104Q67 -75 84 -62T119 -49Q141 -49 156 -63T171 -101ZM242 46Q293 46 324 94T355 223Q355 323 337 356Q316 401 275 410Q267 412 248 412Q206 412 179 386Q155 360 149 328T143 224Q143 120 163 88Q192 46 242 46\",65:\"576 668Q576 688 606 708T660 728Q676 728 675 712V571Q675 409 688 252Q696 122 720 57Q722 53 723 50T728 46T732 43T737 41T743 39L754 45Q788 61 803 61Q819 61 819 47Q818 43 814 35Q799 15 755 -7T675 -30Q659 -30 648 -25T630 -8T621 11T614 34Q603 77 599 106T594 146T591 160V163H460L329 164L316 145Q241 35 196 -7T119 -50T59 -24T30 43Q30 75 46 100T74 125Q81 125 83 120T88 104T96 84Q118 57 151 57Q189 57 277 182Q432 400 542 625L559 659H567Q574 659 575 660T576 668ZM584 249Q579 333 577 386T575 473T574 520V581L563 560Q497 426 412 290L372 228L370 224H371L383 228L393 232H586L584 249\",66:\"304 342Q292 342 292 353Q292 372 323 391Q331 396 417 428T533 487Q563 512 563 555V562Q563 575 557 589T530 618T475 636Q429 636 396 613T330 539Q263 446 210 238Q196 183 173 120Q135 31 121 16Q108 1 85 -10T47 -22T32 -10Q32 -5 44 18T77 93T112 206Q135 296 154 395T182 550T191 615Q191 616 190 616Q188 616 179 611T157 601T131 594Q113 594 113 605Q113 623 144 644Q154 650 205 676T267 703Q277 705 279 705Q295 705 295 693Q295 686 288 635T278 575Q278 572 287 582Q336 635 402 669T540 704Q603 704 633 673T664 599Q664 559 638 523T580 462Q553 440 504 413L491 407L504 402Q566 381 596 338T627 244Q627 172 575 110T444 13T284 -22Q208 -22 158 28Q144 42 146 50Q150 67 178 85T230 103Q236 103 246 95T267 75T302 56T357 47Q436 47 486 93Q526 136 526 198V210Q526 228 518 249T491 292T436 330T350 345Q335 345 321 344T304 342\",67:\"201 -25Q167 -25 136 -14T75 23T29 94T12 202Q12 290 50 394T161 574Q227 642 303 673T433 704Q435 705 457 705Q533 701 533 640Q533 606 507 548T464 474Q431 444 396 444Q381 444 381 453Q381 459 388 473T407 513T428 563Q433 580 433 594Q433 636 381 636Q314 636 260 594T175 489T128 363T112 247Q112 157 153 101T273 44Q347 44 398 121Q413 144 437 157T481 171Q496 171 496 160Q496 150 476 123Q426 56 350 16T201 -25\",68:\"37 475Q19 475 19 487Q19 536 103 604T327 682H356Q386 683 408 683H419Q475 683 506 681T582 668T667 633Q766 571 766 450Q766 365 723 287T611 152T455 57T279 6Q248 1 160 0Q148 0 131 0T108 -1Q72 -1 72 11Q72 24 90 40T133 64L144 68L152 88Q247 328 272 587Q275 613 272 613Q272 613 269 613Q225 610 195 602T149 579T129 556T119 532Q118 530 116 525T113 518Q102 502 80 490T37 475ZM665 407Q665 596 412 613Q403 614 383 614Q370 614 370 612Q370 598 363 542T323 357T242 103L228 69H265Q391 73 481 119Q536 148 575 188T633 268T658 338T665 392V407\",69:\"144 470Q144 556 240 630T451 705Q564 705 564 637Q564 611 540 573Q529 559 505 547T464 534Q448 534 448 545Q448 552 455 562Q463 577 463 591Q463 600 462 604T456 616T436 627T400 635Q396 635 390 635T380 636Q291 636 258 568Q245 544 245 516Q245 463 290 438T391 410Q415 410 415 398Q415 392 407 380T376 356T326 341Q288 340 260 327Q218 311 187 276T143 208T130 151Q130 113 156 88T211 55T268 47Q349 47 403 125Q415 144 439 157T483 171Q499 171 499 160Q499 148 475 120T413 59T315 3T197 -22Q124 -22 77 14T30 105Q30 126 39 154T66 216T122 288T209 354L223 362Q144 400 144 470\",70:\"199 579Q181 579 181 590Q181 598 188 611T212 639T260 666T335 682Q336 682 349 682T383 682T431 682T493 683T561 683Q776 682 784 681Q826 673 829 647Q829 620 797 600T744 580Q728 580 728 595Q729 607 713 610Q698 613 598 614H500L499 610Q499 598 467 486T428 367Q428 365 551 365H674Q683 360 684 355Q687 346 677 329Q666 312 642 299T598 285Q586 285 582 296H402L394 277Q386 258 373 229T346 167T315 102T286 51Q265 22 225 -5T133 -32Q108 -32 87 -25T54 -7T33 15T21 35T18 47Q18 60 44 80T98 103Q108 103 111 101T119 88Q130 66 150 54T179 39T195 37Q199 37 203 43Q217 67 245 125T318 300T391 532Q393 543 398 564T406 598T409 613T339 614H269Q229 579 199 579\",71:\"216 68Q155 68 115 100T59 177T44 273Q44 299 50 333T73 421T133 533T239 632Q346 704 466 704Q508 704 515 703Q555 696 577 681T599 635Q599 605 570 560T523 496Q490 466 455 466Q440 466 440 475T469 526T499 589Q499 605 489 617Q460 636 403 636Q343 636 295 611T220 548T174 464T150 382T144 318Q144 241 180 189T287 137Q325 137 359 160Q428 205 466 322Q472 342 501 359T551 376Q557 376 560 373T564 368L565 365Q560 341 551 302T512 173T451 31Q359 -119 204 -119Q163 -118 127 -109T74 -91T53 -77Q52 -75 52 -71Q52 -54 79 -35T132 -14H140L151 -19Q210 -49 281 -49H289Q312 -49 329 -31Q351 -7 372 36T405 109T416 142L408 136Q401 131 392 125T369 111T338 96T303 82T261 72T216 68\",72:\"18 487Q18 496 29 517T67 566T127 621T216 665T330 683Q359 683 376 669T397 643T400 622Q400 584 382 488T348 343Q348 342 467 342H587L594 366Q615 440 648 534T690 641Q701 656 723 669T764 683Q783 683 783 672L750 578Q716 485 677 346T625 101Q624 92 623 82T622 65T621 56Q621 20 658 20Q666 20 701 25Q709 52 736 69T785 87Q803 87 803 75T791 44T754 3T685 -33T588 -48Q568 -48 562 -46Q522 -31 522 13V23Q531 129 562 250L569 281L565 280Q561 278 556 277T549 274L438 273H328L321 249Q307 202 275 107T232 0Q219 -16 196 -28T155 -41Q149 -41 145 -39T140 -34T139 -29Q139 -24 148 -3T181 86T233 247Q240 270 240 272Q240 273 194 273H169Q139 273 139 285Q139 295 153 308T187 332Q206 341 236 342L260 343L264 359Q278 414 289 482T300 578Q300 613 260 613H254Q198 613 169 592Q148 578 127 544T104 508Q72 478 37 475Q18 475 18 487\",73:\"174 0H31Q-13 0 -21 2T-30 12Q-30 23 -17 36Q9 60 42 68L155 70Q187 102 214 179T257 333T302 491T366 610L369 614H305Q221 611 188 607T145 596T128 569Q119 543 94 529T47 512Q28 512 28 524Q28 527 32 539Q56 614 159 654Q218 678 312 682Q314 682 339 682T404 682T481 683H632Q642 678 642 671Q642 657 621 641T577 617Q570 615 507 614H444Q427 592 406 542Q382 478 355 366T310 209Q280 123 238 78L230 69H330Q442 70 442 74Q443 74 443 77T447 87T460 105Q490 134 527 137Q545 137 545 125Q545 120 542 112Q531 78 491 49T399 7Q379 2 360 2T174 0\",74:\"148 78Q148 16 189 -17T286 -50Q319 -50 348 -33T396 10T426 59T444 101L471 204Q498 306 521 372Q575 532 649 605L659 614H591Q517 613 494 607Q433 591 400 550T360 477Q353 454 325 437T275 419Q256 419 260 435Q280 523 376 597T583 681Q603 683 713 683H830Q839 674 839 671Q839 654 810 634T754 614Q735 614 721 601Q688 571 654 495T600 351T561 209T541 132Q507 29 412 -45T213 -119Q141 -119 94 -77T47 33Q47 55 50 69T58 90T71 103Q105 131 135 131Q152 131 152 120Q152 119 151 114T149 99T148 78\",75:\"194 618Q193 618 182 613T156 601T131 594Q113 594 113 605Q113 623 144 644Q154 650 205 676T267 703Q277 705 279 705Q295 705 295 691Q295 569 250 397Q225 306 197 217T151 81T128 25Q120 8 94 -7T47 -22Q32 -22 32 -10L64 76Q95 163 133 295T185 530Q198 611 194 618ZM331 429Q331 383 364 290T449 117T542 36Q574 36 607 51T652 103Q660 124 677 133T709 143Q727 143 727 128Q727 119 723 111Q704 56 639 17T497 -22H493Q463 -22 425 16Q401 40 382 71Q335 138 296 243T256 399Q256 434 288 473Q342 540 471 622T670 705Q691 704 703 696Q732 678 732 644Q732 613 714 600T677 586Q671 586 667 587T660 592T657 604V619Q657 647 629 647Q623 647 620 646Q576 635 495 583T365 482Q331 448 331 429\",76:\"62 -22T47 -22T32 -11Q32 -1 56 24T83 55Q113 96 138 172T180 320T234 473T323 609Q364 649 419 677T531 705Q559 705 578 696T604 671T615 645T618 623V611Q618 582 615 571T598 548Q581 531 558 520T518 509Q503 509 503 520Q503 523 505 536T507 560Q507 590 494 610T452 630Q423 630 410 617Q367 578 333 492T271 301T233 170Q211 123 204 112L198 103L224 102Q281 102 369 79T509 52H523Q535 64 544 87T579 128Q616 152 641 152Q656 152 656 142Q656 101 588 40T433 -22Q381 -22 289 1T156 28L141 29L131 20Q111 0 87 -11\",77:\"28 9Q28 37 43 63T73 90Q77 90 83 84T103 70T141 57H146Q162 57 178 79T222 167Q266 279 295 371T334 513T349 598T358 651T371 677Q397 705 432 705Q442 705 445 699T452 666Q453 661 453 659Q475 538 509 405T568 207L574 192Q581 178 587 164T594 150Q596 150 635 189T693 248Q765 324 863 438T1024 626T1089 701Q1093 705 1100 705Q1111 705 1111 682Q1111 675 1108 660T1099 611T1086 540Q1041 277 1041 144Q1041 98 1044 75T1050 48T1059 42Q1064 41 1075 46Q1102 61 1121 61Q1137 61 1137 50Q1137 28 1087 0T1000 -29Q983 -29 972 -23T955 -9T945 16T942 45T941 83V96Q941 158 952 256T974 422L985 489Q984 489 939 436T821 300T698 164Q665 128 620 85T568 37Q564 34 558 34Q550 34 546 37T535 54Q512 91 496 127T450 259T389 498L384 518Q349 367 294 223T198 15Q155 -50 117 -50Q87 -50 61 -35T30 -6Q28 2 28 9\",78:\"343 705Q358 705 358 698Q360 696 370 658T411 524T484 319Q536 174 590 82L595 73L615 152Q646 274 683 407Q729 571 752 637T799 727Q852 780 937 788Q939 788 947 788T958 789H962Q979 789 979 765Q979 722 951 692Q942 683 924 683Q888 681 859 672T818 654T803 639Q784 608 708 322T631 15Q631 14 630 15Q630 17 629 15Q628 14 628 12Q621 -4 601 -17T560 -31Q550 -31 546 -28T530 -7Q484 67 458 123T398 272Q352 392 314 514L306 535V534Q306 533 296 488T272 379T234 239T185 100T127 -7T61 -50Q34 -50 4 -34T-27 8Q-27 33 -12 61T18 90Q21 90 36 77T87 57H92Q109 57 123 78T162 173Q206 299 232 417T265 599T276 667Q284 681 304 693T343 705\",79:\"308 428Q289 428 289 438Q289 457 318 508T378 593Q417 638 475 671T599 705Q688 705 732 643T777 483Q777 380 733 285T620 123T464 18T293 -22Q188 -22 123 51T58 245Q58 327 87 403T159 533T249 626T333 685T388 705Q404 705 404 693Q404 674 363 649Q333 632 304 606T239 537T181 429T158 290Q158 179 214 114T364 48Q489 48 583 165T677 438Q677 473 670 505T648 568T601 617T528 636Q518 636 513 635Q486 629 460 600T419 544T392 490Q383 470 372 459Q341 430 308 428\",80:\"37 475Q19 475 19 487Q19 536 103 604T327 682Q329 682 344 682T380 682T421 683H463Q625 683 695 615Q718 591 726 564Q733 547 733 525Q733 412 607 312T321 205H312Q293 205 293 217Q293 224 302 236T333 260T385 274Q558 287 614 407Q633 445 633 477Q633 515 612 543T556 585T481 607T399 614H370L368 603Q352 463 312 312T242 82T202 -13Q190 -33 164 -45T121 -57Q108 -57 108 -45Q108 -40 120 -10T151 73T192 190T233 349T266 539Q267 546 269 565T272 598T274 613H270Q209 613 163 588Q131 572 113 518Q102 502 80 490T37 475\",81:\"114 286Q114 358 151 433T249 569T392 667T558 705Q653 705 713 641T774 460Q774 389 750 322T687 206T600 114T504 46T412 4L399 -2Q542 -62 636 -62Q660 -62 670 -54T686 -27T700 0Q734 34 770 34Q787 34 787 23Q787 -18 720 -74T563 -131Q485 -131 350 -83T145 -34Q127 -34 127 -22Q127 -12 144 5T190 31L200 34L237 35Q386 38 467 79Q550 120 612 210T675 416Q675 510 625 573T484 636Q410 636 346 587T248 469T214 333Q214 306 221 281T243 229T288 188T360 172Q403 172 441 188T490 205Q510 205 510 192Q505 162 432 132T287 102Q206 102 160 155T114 286\",82:\"37 475Q19 475 19 487Q19 503 35 530T83 589T180 647T327 682H374Q387 682 417 682T464 683Q519 683 559 679T642 663T708 625T731 557Q731 481 668 411T504 300Q506 296 512 286T528 257T553 202Q594 105 611 82Q635 47 665 47Q708 47 742 93Q758 113 786 128Q804 136 819 137Q837 137 837 125Q837 115 818 92T767 43T687 -2T589 -22Q549 -22 517 22T467 120T422 221T362 273Q346 273 346 287Q348 301 373 320T436 342Q437 342 446 343T462 345T481 348T504 353T527 362T553 375T577 393Q598 412 614 443T630 511Q630 545 613 566T541 600T393 614Q370 614 370 613L366 584Q349 446 311 307T243 96L213 25Q205 8 179 -7T132 -22Q125 -22 120 -18T117 -8Q117 -5 130 26T163 113T205 239T246 408T274 606V614Q273 614 259 613T231 609T198 602T163 588Q131 572 113 518Q102 502 80 490T37 475\",83:\"554 512Q536 512 536 522Q536 525 539 539T542 564Q542 588 528 604Q515 616 482 625T410 635Q374 635 349 624T312 594T295 561T290 532Q290 505 303 482T342 442T378 419T409 404Q435 391 451 383T494 357T535 323T562 282T574 231Q574 133 464 56T220 -22Q138 -22 78 21T18 123Q18 184 61 227T156 274Q178 274 178 263Q178 260 177 258Q172 247 164 239T151 227T136 218L127 213L124 202Q118 186 118 163Q120 124 165 86T292 48Q374 48 423 86T473 186V193Q473 267 347 327Q268 364 239 389Q191 431 191 486Q191 547 242 600T356 679T470 705Q472 705 478 705T489 704Q551 704 596 682T642 610Q642 566 621 545Q592 516 554 512\",84:\"49 475Q34 475 34 490Q34 552 106 611T261 681Q272 683 507 683H742Q790 717 816 717Q833 717 833 708Q833 682 795 653T714 615Q691 610 588 609Q490 609 490 607L483 580Q476 554 462 496T435 392Q410 289 395 231T363 116T335 34T309 -15T279 -47T242 -64Q231 -68 218 -68Q203 -68 203 -57Q203 -52 211 -38Q224 -7 234 20T251 66T268 123T283 179T304 261T328 360Q342 415 360 488Q380 567 384 582T397 605Q400 607 401 609H302H244Q200 609 188 607T167 596Q145 572 145 541Q145 520 109 498T49 475\",85:\"8 592Q8 616 70 649T193 683Q246 683 246 631Q246 587 205 492T124 297T83 143Q83 101 100 75T154 48Q202 48 287 135T450 342T560 553Q589 635 593 640Q603 656 626 668T669 683H670Q687 683 687 672T670 616T617 463T547 220Q525 137 521 68Q521 54 522 50T533 42L543 47Q573 61 588 61Q604 61 604 47Q599 16 506 -22Q486 -28 468 -28T436 -18T421 18Q421 92 468 258Q468 259 467 257T459 248Q426 206 391 167T303 81T194 6T83 -22Q66 -22 58 -20Q25 -11 4 19T-17 99Q-17 146 8 220T64 358T120 488T146 586Q146 604 141 608T123 613H120Q99 613 72 597T25 580Q8 580 8 592\",86:\"25 633Q25 647 47 665T100 683Q291 683 291 306Q291 264 288 213T282 132L279 102Q281 102 308 126T378 191T464 279T545 381T596 479Q600 490 600 502Q600 527 581 550T523 577Q505 577 505 601Q505 622 516 647T542 681Q546 683 558 683Q605 679 631 645T658 559Q658 423 487 215Q409 126 308 37T190 -52Q177 -52 177 -28Q177 -26 183 15T196 127T203 270Q203 356 192 421T165 523T126 583T83 613T41 620Q25 620 25 633\",87:\"25 633Q25 647 46 665T103 683Q168 683 207 632Q228 608 243 568Q269 485 269 374Q269 324 265 271T256 184L251 150L252 152Q254 153 257 157T264 167T274 180T286 197Q359 293 424 398T519 558T549 616Q549 618 547 624T545 638Q550 654 572 668T615 683Q626 683 632 672T657 595Q726 370 741 128L742 110Q752 122 767 142T823 217T894 321T950 424T976 511Q976 544 958 560T918 577Q906 577 906 602Q906 629 918 651T942 681Q948 683 954 683Q983 683 1008 658T1034 569T999 421T915 257T813 109T724 -3T681 -49Q666 -59 660 -45Q659 -41 657 35T639 233T591 477Q573 551 570 551Q569 551 554 523T507 439T433 315T323 155T182 -25Q160 -52 151 -53Q137 -53 137 -30Q137 -29 148 25T170 168T181 338Q181 424 168 483T131 571T87 609T40 620Q25 620 25 633\",88:\"324 614Q291 576 250 573Q231 573 231 584Q231 589 232 592Q235 601 244 614T271 643T324 671T400 683H403Q462 683 481 610Q485 594 490 545T498 454L501 413Q504 413 551 442T648 509T705 561Q707 565 707 578Q707 610 682 614Q667 614 667 626Q667 641 695 662T755 683Q765 683 775 680T796 662T807 623Q807 596 792 572T713 499T530 376L505 361V356Q508 346 511 278T524 148T557 75Q569 69 580 69Q585 69 593 77Q624 108 660 110Q667 110 670 110T676 106T678 94Q668 59 624 30T510 0Q487 0 471 9T445 32T430 71T422 117T417 173Q416 183 416 188Q413 214 411 244T407 286T405 299Q403 299 344 263T223 182T154 122Q152 118 152 105Q152 69 180 69Q183 69 187 66T191 60L192 58V56Q192 41 163 21T105 0Q94 0 84 3T63 21T52 60Q52 77 56 90T85 131T155 191Q197 223 259 263T362 327T402 352L391 489Q391 492 390 505T387 526T384 547T379 568T372 586T361 602T348 611Q346 612 341 613T333 614H324\",89:\"65 599Q65 618 107 650T204 683Q267 683 312 643T380 533T414 385T424 217Q424 186 423 160T422 123Q426 123 468 170T567 304T650 469Q661 503 661 519Q661 546 639 570Q615 591 583 591Q569 591 569 616Q569 640 582 661T613 683Q624 683 638 679T671 664T702 625T714 558Q714 472 639 329T426 45Q361 -21 282 -82T154 -143Q97 -143 64 -104T31 -20Q31 4 44 25T70 46Q78 46 81 39T87 16T97 -9Q127 -51 182 -51Q184 -51 187 -50H190Q233 -41 314 25Q330 36 330 40Q336 79 336 178Q336 508 223 594Q199 614 158 619L148 620L139 611Q111 586 83 586Q65 586 65 599\",90:\"694 220Q708 220 708 210Q708 195 695 167T658 105T593 42T502 3Q492 1 458 1Q400 1 293 11T150 22Q116 22 92 11T51 0Q37 0 37 10Q37 21 63 44T179 146T367 319L391 343H343L296 344Q285 350 285 358Q285 365 289 372T300 383T313 392T324 398L329 400H450L561 518Q597 558 607 571L621 587H596Q553 589 484 599T383 609Q342 609 326 596T301 555Q294 533 263 514T208 492Q189 492 189 503Q189 510 197 528T215 559Q249 607 318 645T466 683Q504 683 573 673T669 662L690 661Q734 682 748 683Q767 683 767 673Q767 666 746 640Q655 531 555 428L529 400Q529 399 543 399Q604 397 604 366Q604 350 587 337T551 322Q541 322 539 323Q529 328 529 334Q529 339 487 342L470 343L446 320Q272 153 200 96L235 95Q297 95 392 86T533 74H554Q586 116 597 159Q604 179 635 199T694 220\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texOldstyle=void 0,e.texOldstyle={48:[.452,.022,.5],49:[.453,0,.5],50:[.453,0,.5],51:[.452,.216,.5],52:[.464,.194,.5],53:[.453,.216,.5],54:[.665,.022,.5],55:[.463,.216,.5],56:[.666,.021,.5],57:[.453,.216,.5],65:[.728,.05,.798,{ic:.021,sk:.194}],66:[.705,.022,.657,{sk:.139}],67:[.705,.025,.527,{sk:.139}],68:[.683,0,.771,{sk:.0833}],69:[.705,.022,.528,{ic:.036,sk:.111}],70:[.683,.032,.719,{ic:.11,sk:.111}],71:[.704,.119,.595,{sk:.111}],72:[.683,.048,.845,{sk:.111}],73:[.683,0,.545,{ic:.097,sk:.0278}],74:[.683,.119,.678,{ic:.161,sk:.167}],75:[.705,.022,.762,{sk:.0556}],76:[.705,.022,.69,{sk:.139}],77:[.705,.05,1.201,{sk:.139}],78:[.789,.05,.82,{ic:.159,sk:.0833}],79:[.705,.022,.796,{sk:.111}],80:[.683,.057,.696,{ic:.037,sk:.0833}],81:[.705,.131,.817,{sk:.111}],82:[.682,.022,.848,{sk:.0833}],83:[.705,.022,.606,{ic:.036,sk:.139}],84:[.717,.068,.545,{ic:.288,sk:.0278}],85:[.683,.028,.626,{ic:.061,sk:.0833}],86:[.683,.052,.613,{ic:.045,sk:.0278}],87:[.683,.053,.988,{ic:.046,sk:.0833}],88:[.683,0,.713,{ic:.094,sk:.139}],89:[.683,.143,.668,{ic:.046,sk:.0833}],90:[.683,0,.725,{ic:.042,sk:.139}]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texSize3=void 0;var r=Q(6),T=Q(260);e.texSize3=r.AddPaths(T.texSize3,{40:\"701 -940Q701 -943 695 -949H664Q662 -947 636 -922T591 -879T537 -818T475 -737T412 -636T350 -511T295 -362T250 -186T221 17T209 251Q209 962 573 1361Q596 1386 616 1405T649 1437T664 1450H695Q701 1444 701 1441Q701 1436 681 1415T629 1356T557 1261T476 1118T400 927T340 675T308 359Q306 321 306 250Q306 -139 400 -430T690 -924Q701 -936 701 -940\",41:\"34 1438Q34 1446 37 1448T50 1450H56H71Q73 1448 99 1423T144 1380T198 1319T260 1238T323 1137T385 1013T440 864T485 688T514 485T526 251Q526 134 519 53Q472 -519 162 -860Q139 -885 119 -904T86 -936T71 -949H56Q43 -949 39 -947T34 -937Q88 -883 140 -813Q428 -430 428 251Q428 453 402 628T338 922T245 1146T145 1309T46 1425Q44 1427 42 1429T39 1433T36 1436L34 1438\",47:\"81 -949Q71 -949 63 -941T55 -921Q55 -917 56 -915Q59 -906 498 264T939 1438Q945 1450 960 1450Q972 1450 980 1441T988 1421Q982 1403 839 1020L398 -155Q107 -934 103 -938Q96 -949 81 -949\",91:\"247 -949V1450H516V1388H309V-887H516V-949H247\",92:\"988 -922Q988 -933 980 -941T962 -949Q947 -949 940 -938Q936 -934 645 -155L204 1020Q56 1416 56 1424Q56 1433 62 1441T84 1450Q97 1448 103 1439Q107 1435 398 656L839 -519Q988 -918 988 -922\",93:\"11 1388V1450H280V-949H11V-887H218V1388H11\",123:\"618 -943L612 -949H582L568 -943Q472 -903 411 -841T332 -703Q327 -682 327 -653T325 -350Q324 -28 323 -18Q317 24 301 61T264 124T221 171T179 205T147 225T132 234Q130 238 130 250Q130 255 130 258T131 264T132 267T134 269T139 272T144 275Q207 308 256 367Q310 436 323 519Q324 529 325 851Q326 1124 326 1154T332 1205Q369 1358 566 1443L582 1450H612L618 1444V1429Q618 1413 616 1411L608 1406Q599 1402 585 1393T552 1372T515 1343T479 1305T449 1257T429 1200Q425 1180 425 1152T423 851Q422 579 422 549T416 498Q407 459 388 424T346 364T297 318T250 284T214 264T197 254L188 251L205 242Q290 200 345 138T416 3Q421 -18 421 -48T423 -349Q423 -397 423 -472Q424 -677 428 -694Q429 -697 429 -699Q434 -722 443 -743T465 -782T491 -816T519 -845T548 -868T574 -886T595 -899T610 -908L616 -910Q618 -912 618 -928V-943\",125:\"131 1414T131 1429T133 1447T148 1450H153H167L182 1444Q276 1404 336 1343T415 1207Q421 1184 421 1154T423 851L424 531L426 517Q434 462 460 415T518 339T571 296T608 274Q615 270 616 267T618 251Q618 241 618 238T615 232T608 227Q542 194 491 132T426 -15L424 -29L423 -350Q422 -622 422 -652T415 -706Q397 -780 337 -841T182 -943L167 -949H153Q137 -949 134 -946T131 -928Q131 -914 132 -911T144 -904Q146 -903 148 -902Q299 -820 323 -680Q324 -663 325 -349T327 -19Q355 145 541 241L561 250L541 260Q356 355 327 520Q326 537 325 850T323 1181Q315 1227 293 1267T244 1332T193 1374T151 1401T132 1413Q131 1414 131 1429\",710:\"1439 564Q1434 564 1080 631T722 698Q719 698 362 631Q7 564 4 564L0 583Q-4 602 -4 603L720 772L1083 688Q1446 603 1447 603Q1447 602 1443 583L1439 564\",732:\"1 643Q1 646 76 671T271 722T476 749Q555 749 626 736T742 706T856 676T999 662Q1088 662 1192 684T1363 727T1432 749Q1432 745 1437 731T1442 716Q1442 714 1381 693T1212 645T1012 611Q1000 610 955 610Q851 610 701 653T444 697Q355 697 251 676T80 632T11 610Q11 614 6 628T1 643\",770:\"-5 564Q-9 564 -363 631T-722 698Q-725 698 -1082 631Q-1437 564 -1440 564L-1444 583Q-1448 602 -1448 603L-724 772L-361 688Q2 603 3 603Q3 602 -1 583L-5 564\",771:\"-1443 643Q-1443 646 -1368 671T-1173 722T-968 749Q-889 749 -818 736T-702 706T-588 676T-445 662Q-356 662 -252 684T-81 727T-12 749Q-12 745 -7 731T-2 716Q-2 714 -63 693T-232 645T-432 611Q-444 610 -489 610Q-593 610 -743 653T-1000 697Q-1089 697 -1193 676T-1364 632T-1433 610Q-1433 614 -1438 628T-1443 643\",8260:\"81 -949Q71 -949 63 -941T55 -921Q55 -917 56 -915Q59 -906 498 264T939 1438Q945 1450 960 1450Q972 1450 980 1441T988 1421Q982 1403 839 1020L398 -155Q107 -934 103 -938Q96 -949 81 -949\",8730:\"424 -948Q422 -947 313 -434T202 80L170 31Q165 24 157 10Q137 -21 137 -21Q131 -16 124 -8L111 5L264 248L473 -720Q473 -717 727 359T983 1440Q989 1450 1001 1450Q1007 1450 1013 1445T1020 1433Q1020 1425 742 244T460 -941Q458 -950 439 -950H436Q424 -950 424 -948\",8968:\"246 -949V1450H571V1388H308V-949H246\",8969:\"11 1388V1450H336V-949H274V1388H11\",8970:\"246 -949V1450H308V-887H571V-949H246\",8971:\"274 -887V1450H336V-949H11V-887H274\",9001:\"126 242V259L361 845Q595 1431 597 1435Q610 1450 624 1450Q634 1450 644 1443T654 1419V1411L422 831Q190 253 190 250T422 -331L654 -910V-919Q654 -936 644 -943T624 -950Q612 -950 597 -935Q595 -931 361 -345L126 242\",9002:\"94 1424Q94 1426 97 1432T107 1444T124 1450Q141 1450 152 1435Q154 1431 388 845L623 259V242L388 -345Q153 -933 152 -934Q142 -949 127 -949H125Q95 -949 95 -919V-910L327 -331Q559 247 559 250T327 831Q94 1411 94 1424\",10216:\"126 242V259L361 845Q595 1431 597 1435Q610 1450 624 1450Q634 1450 644 1443T654 1419V1411L422 831Q190 253 190 250T422 -331L654 -910V-919Q654 -936 644 -943T624 -950Q612 -950 597 -935Q595 -931 361 -345L126 242\",10217:\"94 1424Q94 1426 97 1432T107 1444T124 1450Q141 1450 152 1435Q154 1431 388 845L623 259V242L388 -345Q153 -933 152 -934Q142 -949 127 -949H125Q95 -949 95 -919V-910L327 -331Q559 247 559 250T327 831Q94 1411 94 1424\",12296:\"126 242V259L361 845Q595 1431 597 1435Q610 1450 624 1450Q634 1450 644 1443T654 1419V1411L422 831Q190 253 190 250T422 -331L654 -910V-919Q654 -936 644 -943T624 -950Q612 -950 597 -935Q595 -931 361 -345L126 242\",12297:\"94 1424Q94 1426 97 1432T107 1444T124 1450Q141 1450 152 1435Q154 1431 388 845L623 259V242L388 -345Q153 -933 152 -934Q142 -949 127 -949H125Q95 -949 95 -919V-910L327 -331Q559 247 559 250T327 831Q94 1411 94 1424\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texSize3=void 0,e.texSize3={40:[1.45,.949,.736],41:[1.45,.949,.736],47:[1.45,.949,1.044],91:[1.45,.949,.528],92:[1.45,.949,1.044],93:[1.45,.949,.528],123:[1.45,.949,.75],125:[1.45,.949,.75],710:[.772,-.564,1.444],732:[.749,-.61,1.444],770:[.772,-.564,0],771:[.749,-.61,0],8260:[1.45,.949,1.044],8730:[1.45,.95,1,{ic:.02}],8968:[1.45,.949,.583],8969:[1.45,.949,.583],8970:[1.45,.949,.583],8971:[1.45,.949,.583],9001:[1.45,.95,.75],9002:[1.45,.949,.75],10216:[1.45,.95,.75],10217:[1.45,.949,.75],12296:[1.45,.95,.75],12297:[1.45,.949,.75]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texSize4=void 0;var r=Q(6),T=Q(262);e.texSize4=r.AddPaths(T.texSize4,{40:\"758 -1237T758 -1240T752 -1249H736Q718 -1249 717 -1248Q711 -1245 672 -1199Q237 -706 237 251T672 1700Q697 1730 716 1749Q718 1750 735 1750H752Q758 1744 758 1741Q758 1737 740 1713T689 1644T619 1537T540 1380T463 1176Q348 802 348 251Q348 -242 441 -599T744 -1218Q758 -1237 758 -1240\",41:\"33 1741Q33 1750 51 1750H60H65Q73 1750 81 1743T119 1700Q554 1207 554 251Q554 -707 119 -1199Q76 -1250 66 -1250Q65 -1250 62 -1250T56 -1249Q55 -1249 53 -1249T49 -1250Q33 -1250 33 -1239Q33 -1236 50 -1214T98 -1150T163 -1052T238 -910T311 -727Q443 -335 443 251Q443 402 436 532T405 831T339 1142T224 1438T50 1716Q33 1737 33 1741\",47:\"1166 1738Q1176 1750 1189 1750T1211 1742T1221 1721Q1221 1720 1221 1718T1220 1715Q1219 1708 666 238T111 -1237Q102 -1249 86 -1249Q74 -1249 65 -1240T56 -1220Q56 -1219 56 -1217T57 -1214Q58 -1207 611 263T1166 1738\",91:\"269 -1249V1750H577V1677H342V-1176H577V-1249H269\",92:\"56 1720Q56 1732 64 1741T85 1750Q104 1750 111 1738Q113 1734 666 264T1220 -1214Q1220 -1215 1220 -1217T1221 -1220Q1221 -1231 1212 -1240T1191 -1249Q1175 -1249 1166 -1237Q1164 -1233 611 237T57 1715Q57 1716 56 1718V1720\",93:\"5 1677V1750H313V-1249H5V-1176H240V1677H5\",123:\"661 -1243L655 -1249H622L604 -1240Q503 -1190 434 -1107T348 -909Q346 -897 346 -499L345 -98L343 -82Q335 3 287 87T157 223Q146 232 145 236Q144 240 144 250Q144 265 145 268T157 278Q242 333 288 417T343 583L345 600L346 1001Q346 1398 348 1410Q379 1622 600 1739L622 1750H655L661 1744V1727V1721Q661 1712 661 1710T657 1705T648 1700T630 1690T602 1668Q589 1659 574 1643T531 1593T484 1508T459 1398Q458 1389 458 1001Q458 614 457 605Q441 435 301 316Q254 277 202 251L250 222Q260 216 301 185Q443 66 457 -104Q458 -113 458 -501Q458 -888 459 -897Q463 -944 478 -988T509 -1060T548 -1114T580 -1149T602 -1167Q620 -1183 634 -1192T653 -1202T659 -1207T661 -1220V-1226V-1243\",125:\"144 1727Q144 1743 146 1746T162 1750H167H183L203 1740Q274 1705 325 1658T403 1562T440 1478T456 1410Q458 1398 458 1001Q459 661 459 624T465 558Q470 526 480 496T502 441T529 395T559 356T588 325T615 301T637 284T654 273L660 269V266Q660 263 660 259T661 250V239Q661 236 661 234T660 232T656 229T649 224Q577 179 528 105T465 -57Q460 -86 460 -123T458 -499V-661Q458 -857 457 -893T447 -955Q425 -1048 359 -1120T203 -1239L183 -1249H168Q150 -1249 147 -1246T144 -1226Q144 -1213 145 -1210T153 -1202Q169 -1193 186 -1181T232 -1140T282 -1081T322 -1000T345 -897Q346 -888 346 -501Q346 -113 347 -104Q359 58 503 184Q554 226 603 250Q504 299 430 393T347 605Q346 614 346 1002Q346 1389 345 1398Q338 1493 288 1573T153 1703Q146 1707 145 1710T144 1727\",710:\"5 561Q-4 561 -9 582T-14 618Q-14 623 -13 625Q-11 628 461 736T943 845Q945 845 1417 738T1896 628Q1902 628 1902 618Q1902 607 1897 584T1883 561Q1881 561 1412 654L945 750L476 654Q6 561 5 561\",732:\"1212 583Q1124 583 1048 603T923 647T799 691T635 711Q524 711 375 679T120 615L16 583Q14 584 12 587T9 592Q-2 650 2 659Q2 669 38 687Q54 696 146 723T309 767Q527 823 666 823Q759 823 837 803T964 759T1088 715T1252 695Q1363 695 1512 727T1764 791T1871 823Q1872 822 1874 819T1878 814Q1885 783 1885 753Q1885 748 1884 747Q1884 738 1849 719Q1836 712 1740 682T1484 617T1212 583\",770:\"-1884 561Q-1893 561 -1898 582T-1903 618Q-1903 623 -1902 625Q-1900 628 -1428 736T-946 845Q-944 845 -472 738T7 628Q13 628 13 618Q13 607 8 584T-6 561Q-8 561 -477 654L-944 750L-1413 654Q-1883 561 -1884 561\",771:\"-677 583Q-765 583 -841 603T-966 647T-1090 691T-1254 711Q-1365 711 -1514 679T-1768 615L-1873 583Q-1875 584 -1877 587T-1880 592Q-1891 650 -1887 659Q-1887 669 -1851 687Q-1835 696 -1743 723T-1580 767Q-1362 823 -1223 823Q-1130 823 -1052 803T-925 759T-801 715T-637 695Q-526 695 -377 727T-125 791T-18 823Q-17 822 -15 819T-11 814Q-4 782 -4 753Q-4 748 -5 747Q-5 738 -40 719Q-53 712 -149 682T-405 617T-677 583\",8260:\"1166 1738Q1176 1750 1189 1750T1211 1742T1221 1721Q1221 1720 1221 1718T1220 1715Q1219 1708 666 238T111 -1237Q102 -1249 86 -1249Q74 -1249 65 -1240T56 -1220Q56 -1219 56 -1217T57 -1214Q58 -1207 611 263T1166 1738\",8730:\"983 1739Q988 1750 1001 1750Q1008 1750 1013 1745T1020 1733Q1020 1726 742 244T460 -1241Q458 -1250 439 -1250H436Q424 -1250 424 -1248L410 -1166Q395 -1083 367 -920T312 -601L201 44L137 -83L111 -57L187 96L264 247Q265 246 369 -357Q470 -958 473 -963L727 384Q979 1729 983 1739\",8968:\"269 -1249V1750H633V1677H342V-1249H269\",8969:\"5 1677V1750H369V-1249H296V1677H5\",8970:\"269 -1249V1750H342V-1176H633V-1249H269\",8971:\"296 -1176V1750H369V-1249H5V-1176H296\",9001:\"140 242V260L386 994Q633 1729 635 1732Q643 1745 657 1749Q658 1749 662 1749T668 1750Q682 1749 692 1740T702 1714V1705L214 251L703 -1204L702 -1213Q702 -1230 692 -1239T667 -1248H664Q647 -1248 635 -1231Q633 -1228 386 -493L140 242\",9002:\"103 1714Q103 1732 114 1741T137 1750Q157 1750 170 1732Q172 1729 419 994L665 260V242L419 -493Q172 -1228 170 -1231Q158 -1248 141 -1248H138Q123 -1248 113 -1239T103 -1213V-1204L591 251L103 1705V1714\",9115:\"837 1154Q843 1148 843 1145Q843 1141 818 1106T753 1002T667 841T574 604T494 299Q417 -84 417 -609Q417 -641 416 -647T411 -654Q409 -655 366 -655Q299 -655 297 -654Q292 -652 292 -643T291 -583Q293 -400 304 -242T347 110T432 470T574 813T785 1136Q787 1139 790 1142T794 1147T796 1150T799 1152T802 1153T807 1154T813 1154H819H837\",9116:\"413 -9Q412 -9 407 -9T388 -10T354 -10Q300 -10 297 -9Q294 -8 293 -5Q291 5 291 127V300Q291 602 292 605L296 609Q298 610 366 610Q382 610 392 610T407 610T412 609Q416 609 416 592T417 473V127Q417 -9 413 -9\",9117:\"843 -635Q843 -638 837 -644H820Q801 -644 800 -643Q792 -635 785 -626Q684 -503 605 -363T473 -75T385 216T330 518T302 809T291 1093Q291 1144 291 1153T296 1164Q298 1165 366 1165Q409 1165 411 1164Q415 1163 416 1157T417 1119Q417 529 517 109T833 -617Q843 -631 843 -635\",9118:\"31 1143Q31 1154 49 1154H59Q72 1154 75 1152T89 1136Q190 1013 269 873T401 585T489 294T544 -8T572 -299T583 -583Q583 -634 583 -643T577 -654Q575 -655 508 -655Q465 -655 463 -654Q459 -653 458 -647T457 -609Q457 -58 371 340T100 1037Q87 1059 61 1098T31 1143\",9119:\"579 -9Q578 -9 573 -9T554 -10T520 -10Q466 -10 463 -9Q460 -8 459 -5Q457 5 457 127V300Q457 602 458 605L462 609Q464 610 532 610Q548 610 558 610T573 610T578 609Q582 609 582 592T583 473V127Q583 -9 579 -9\",9120:\"56 -644H50Q31 -644 31 -635Q31 -632 37 -622Q69 -579 100 -527Q286 -228 371 170T457 1119Q457 1161 462 1164Q464 1165 520 1165Q575 1165 577 1164Q582 1162 582 1153T583 1093Q581 910 570 752T527 400T442 40T300 -303T89 -626Q78 -640 75 -642T61 -644H56\",9121:\"319 -645V1154H666V1070H403V-645H319\",9122:\"319 0V602H403V0H319\",9123:\"319 -644V1155H403V-560H666V-644H319\",9124:\"0 1070V1154H347V-645H263V1070H0\",9125:\"263 0V602H347V0H263\",9126:\"263 -560V1155H347V-644H0V-560H263\",9127:\"712 899L718 893V876V865Q718 854 704 846Q627 793 577 710T510 525Q510 524 509 521Q505 493 504 349Q504 345 504 334Q504 277 504 240Q504 -2 503 -4Q502 -8 494 -9T444 -10Q392 -10 390 -9Q387 -8 386 -5Q384 5 384 230Q384 262 384 312T383 382Q383 481 392 535T434 656Q510 806 664 892L677 899H712\",9128:\"389 1159Q391 1160 455 1160Q496 1160 498 1159Q501 1158 502 1155Q504 1145 504 924Q504 691 503 682Q494 549 425 439T243 259L229 250L243 241Q349 175 421 66T503 -182Q504 -191 504 -424Q504 -600 504 -629T499 -659H498Q496 -660 444 -660T390 -659Q387 -658 386 -655Q384 -645 384 -425V-282Q384 -176 377 -116T342 10Q325 54 301 92T255 155T214 196T183 222T171 232Q170 233 170 250T171 268Q171 269 191 284T240 331T300 407T354 524T383 679Q384 691 384 925Q384 1152 385 1155L389 1159\",9129:\"718 -893L712 -899H677L666 -893Q542 -825 468 -714T385 -476Q384 -466 384 -282Q384 3 385 5L389 9Q392 10 444 10Q486 10 494 9T503 4Q504 2 504 -239V-310V-366Q504 -470 508 -513T530 -609Q546 -657 569 -698T617 -767T661 -812T699 -843T717 -856T718 -876V-893\",9130:\"384 150V266Q384 304 389 309Q391 310 455 310Q496 310 498 309Q502 308 503 298Q504 283 504 150Q504 32 504 12T499 -9H498Q496 -10 444 -10T390 -9Q386 -8 385 2Q384 17 384 150\",9131:\"170 875Q170 892 172 895T189 899H194H211L222 893Q345 826 420 715T503 476Q504 467 504 230Q504 51 504 21T499 -9H498Q496 -10 444 -10Q402 -10 394 -9T385 -4Q384 -2 384 240V311V366Q384 469 380 513T358 609Q342 657 319 698T271 767T227 812T189 843T171 856T170 875\",9132:\"389 1159Q391 1160 455 1160Q496 1160 498 1159Q501 1158 502 1155Q504 1145 504 925V782Q504 676 511 616T546 490Q563 446 587 408T633 345T674 304T705 278T717 268Q718 267 718 250T717 232Q717 231 697 216T648 169T588 93T534 -24T505 -179Q504 -191 504 -425Q504 -600 504 -629T499 -659H498Q496 -660 444 -660T390 -659Q387 -658 386 -655Q384 -645 384 -424Q384 -191 385 -182Q394 -49 463 61T645 241L659 250L645 259Q539 325 467 434T385 682Q384 692 384 873Q384 1153 385 1155L389 1159\",9133:\"384 -239V-57Q384 4 389 9Q391 10 455 10Q496 10 498 9Q501 8 502 5Q504 -5 504 -230Q504 -261 504 -311T505 -381Q505 -486 492 -551T435 -691Q357 -820 222 -893L211 -899H195Q176 -899 173 -896T170 -874Q170 -858 171 -855T184 -846Q262 -793 312 -709T378 -525Q378 -524 379 -522Q383 -493 384 -351Q384 -345 384 -334Q384 -276 384 -239\",9143:\"742 -871Q740 -873 737 -876T733 -880T730 -882T724 -884T714 -885H702L222 569L180 484Q138 399 137 399Q131 404 124 412L111 425L265 736L702 -586V168L703 922Q713 935 722 935Q734 935 742 920V-871\",10216:\"140 242V260L386 994Q633 1729 635 1732Q643 1745 657 1749Q658 1749 662 1749T668 1750Q682 1749 692 1740T702 1714V1705L214 251L703 -1204L702 -1213Q702 -1230 692 -1239T667 -1248H664Q647 -1248 635 -1231Q633 -1228 386 -493L140 242\",10217:\"103 1714Q103 1732 114 1741T137 1750Q157 1750 170 1732Q172 1729 419 994L665 260V242L419 -493Q172 -1228 170 -1231Q158 -1248 141 -1248H138Q123 -1248 113 -1239T103 -1213V-1204L591 251L103 1705V1714\",12296:\"140 242V260L386 994Q633 1729 635 1732Q643 1745 657 1749Q658 1749 662 1749T668 1750Q682 1749 692 1740T702 1714V1705L214 251L703 -1204L702 -1213Q702 -1230 692 -1239T667 -1248H664Q647 -1248 635 -1231Q633 -1228 386 -493L140 242\",12297:\"103 1714Q103 1732 114 1741T137 1750Q157 1750 170 1732Q172 1729 419 994L665 260V242L419 -493Q172 -1228 170 -1231Q158 -1248 141 -1248H138Q123 -1248 113 -1239T103 -1213V-1204L591 251L103 1705V1714\",57344:\"722 -14H720Q708 -14 702 0V306L703 612Q713 625 722 625Q734 625 742 610V0Q734 -14 724 -14H722\",57345:\"702 589Q706 601 718 605H1061Q1076 597 1076 585Q1076 572 1061 565H742V0Q734 -14 724 -14H722H720Q708 -14 702 0V589\",57680:\"-18 -213L-24 -207V-172L-16 -158Q75 2 260 84Q334 113 415 119Q418 119 427 119T440 120Q454 120 457 117T460 98V60V25Q460 7 457 4T441 0Q308 0 193 -55T25 -205Q21 -211 18 -212T-1 -213H-18\",57681:\"-10 60Q-10 104 -10 111T-5 118Q-1 120 10 120Q96 120 190 84Q375 2 466 -158L474 -172V-207L468 -213H451H447Q437 -213 434 -213T428 -209T423 -202T414 -187T396 -163Q331 -82 224 -41T9 0Q-4 0 -7 3T-10 25V60\",57682:\"-24 327L-18 333H-1Q11 333 15 333T22 329T27 322T35 308T54 284Q115 203 225 162T441 120Q454 120 457 117T460 95V60V28Q460 8 457 4T442 0Q355 0 260 36Q75 118 -16 278L-24 292V327\",57683:\"-10 60V95Q-10 113 -7 116T9 120Q151 120 250 171T396 284Q404 293 412 305T424 324T431 331Q433 333 451 333H468L474 327V292L466 278Q375 118 190 36Q95 0 8 0Q-5 0 -7 3T-10 24V60\",57684:\"-10 0V120H410V0H-10\"},{57685:\"\\ue153\\ue152\",57686:\"\\ue151\\ue150\"})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texSize4=void 0,e.texSize4={40:[1.75,1.249,.792],41:[1.75,1.249,.792],47:[1.75,1.249,1.278],91:[1.75,1.249,.583],92:[1.75,1.249,1.278],93:[1.75,1.249,.583],123:[1.75,1.249,.806],125:[1.75,1.249,.806],710:[.845,-.561,1.889,{ic:.013}],732:[.823,-.583,1.889],770:[.845,-.561,0,{ic:.013}],771:[.823,-.583,0],8260:[1.75,1.249,1.278],8730:[1.75,1.25,1,{ic:.02}],8968:[1.75,1.249,.639],8969:[1.75,1.249,.639],8970:[1.75,1.249,.639],8971:[1.75,1.249,.639],9001:[1.75,1.248,.806],9002:[1.75,1.248,.806],9115:[1.154,.655,.875],9116:[.61,.01,.875],9117:[1.165,.644,.875],9118:[1.154,.655,.875],9119:[.61,.01,.875],9120:[1.165,.644,.875],9121:[1.154,.645,.667],9122:[.602,0,.667],9123:[1.155,.644,.667],9124:[1.154,.645,.667],9125:[.602,0,.667],9126:[1.155,.644,.667],9127:[.899,.01,.889],9128:[1.16,.66,.889],9129:[.01,.899,.889],9130:[.29,.015,.889],9131:[.899,.01,.889],9132:[1.16,.66,.889],9133:[.01,.899,.889],9143:[.935,.885,1.056],10216:[1.75,1.248,.806],10217:[1.75,1.248,.806],12296:[1.75,1.248,.806],12297:[1.75,1.248,.806],57344:[.625,.014,1.056],57345:[.605,.014,1.056,{ic:.02}],57680:[.12,.213,.45,{ic:.01}],57681:[.12,.213,.45,{ic:.024}],57682:[.333,0,.45,{ic:.01}],57683:[.333,0,.45,{ic:.024}],57684:[.32,.2,.4,{ic:.01}],57685:[.333,0,.9,{ic:.01}],57686:[.12,.213,.9,{ic:.01}]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texVariant=void 0;var r=Q(6),T=Q(264);e.texVariant=r.AddPaths(T.texVariant,{710:\"1 561Q-3 563 -6 577T-12 604L-14 618Q-14 625 -7 628T23 635Q31 636 36 637Q63 641 621 745Q1148 845 1165 845Q1167 845 1752 739L2338 630Q2346 630 2346 618Q2340 565 2332 561Q2329 561 1749 654Q1617 675 1466 699T1241 736T1167 748Q1165 748 1093 737T867 700T583 654Q3 561 1 561\",732:\"804 788Q717 788 606 772T397 732T213 685T75 645T18 628Q11 628 11 632Q8 637 4 668T2 704Q2 713 36 732Q55 739 242 795Q622 898 826 898Q893 898 947 895Q1009 887 1056 872T1187 819Q1286 776 1356 758T1527 739Q1614 739 1725 755T1934 795T2118 842T2256 882T2313 899Q2320 899 2320 895Q2323 890 2327 860T2329 824Q2329 818 2296 795Q2273 787 2089 732Q1810 657 1598 632Q1562 629 1492 629Q1389 629 1320 644T1144 708Q1048 751 977 769T804 788\",770:\"-2332 561Q-2336 563 -2340 577T-2346 604L-2347 618Q-2347 625 -2340 628T-2310 635Q-2302 636 -2297 637Q-2270 641 -1712 745Q-1185 845 -1168 845Q-1166 845 -581 739L5 630Q13 630 13 618Q7 565 -1 561Q-4 561 -584 654Q-716 675 -867 699T-1092 736T-1166 748Q-1168 748 -1240 737T-1466 700T-1750 654Q-2330 561 -2332 561\",771:\"-1529 788Q-1616 788 -1727 772T-1936 732T-2120 685T-2258 645T-2315 628Q-2322 628 -2322 632Q-2325 637 -2329 668T-2331 704Q-2331 713 -2297 732Q-2278 739 -2091 795Q-1711 898 -1507 898Q-1440 898 -1386 895Q-1324 887 -1277 872T-1146 819Q-1047 776 -977 758T-806 739Q-719 739 -608 755T-399 795T-215 842T-77 882T-20 899Q-13 899 -13 895Q-10 890 -6 860T-4 824Q-4 818 -37 795Q-60 787 -244 732Q-523 657 -735 632Q-771 629 -841 629Q-944 629 -1013 644T-1189 708Q-1285 751 -1356 769T-1529 788\",1008:\"228 325Q170 322 156 316T127 309Q108 309 104 314Q99 319 99 322T108 341Q125 376 171 400T268 425H271Q302 425 319 396Q328 377 328 358Q328 332 324 314Q311 270 286 221Q274 194 274 192H275Q339 234 484 325T639 421Q669 434 691 434T723 425T734 406Q734 394 719 381Q715 376 644 330L575 287L566 267Q543 233 526 176Q520 160 515 143T508 115T506 105Q506 103 533 103Q585 103 607 110T641 118Q670 118 670 107Q670 100 661 85Q643 50 598 27T504 3Q465 3 450 36Q441 51 441 73Q441 84 444 96Q452 146 484 205L497 236L324 125Q143 12 135 10Q103 -6 77 -6Q61 -6 49 2T37 21Q37 36 49 46T124 96L195 141L204 156Q219 179 243 248T264 323Q264 325 228 325\",8463:\"182 599Q182 611 174 615T133 619Q118 619 114 621T109 630Q109 636 114 656T122 681Q125 685 202 688Q272 695 286 695Q304 695 304 684Q304 682 295 644T282 597Q282 592 360 592H399Q430 592 445 587T460 563Q460 552 451 541L442 535H266L251 468Q247 453 243 436T236 409T233 399Q233 395 244 404Q295 441 357 441Q405 441 445 417T485 333Q485 284 449 178T412 58T426 44Q447 44 466 68Q485 87 500 130L509 152H531H543Q562 152 562 144Q562 128 546 93T494 23T415 -13Q385 -13 359 3T322 44Q318 52 318 77Q318 99 352 196T386 337Q386 386 346 386Q318 386 286 370Q267 361 245 338T211 292Q207 287 193 235T162 113T138 21Q128 7 122 4Q105 -12 83 -12Q66 -12 54 -2T42 26L166 530Q166 534 161 534T129 535Q127 535 122 535T112 534Q74 534 74 562Q74 570 77 576T84 585T96 589T109 591T124 592T138 592L182 595V599\",8592:\"292 419Q292 400 261 347T211 275H306Q319 275 338 275T364 276Q399 276 410 271T422 250T411 230T366 225H306H211Q214 222 232 197T271 136T292 82Q292 71 285 68T262 64H250H241Q221 64 216 67T205 83Q186 127 153 167T78 230Q64 238 64 250Q64 258 69 263T82 272T106 288T139 318Q162 342 177 365T198 402T209 425T223 436Q224 437 252 437H258Q292 437 292 419\",8594:\"188 417Q188 437 221 437H233Q256 437 263 434T275 417Q294 373 327 333T402 270Q417 261 417 250Q417 241 410 236T382 217T341 182Q315 155 299 128T275 85T263 66Q259 64 231 64H219Q197 64 191 72T193 100Q202 124 215 147T239 185T257 210T267 223L269 225H174H116Q80 225 69 229T58 250T70 271T114 276Q121 276 140 276T174 275H269L267 277Q266 280 257 291T233 325T205 374Q188 408 188 417\",8652:\"755 512Q755 514 778 514H801L804 503Q805 501 812 486T824 462T839 437T862 408T892 381T932 354L944 347V327H507Q70 327 67 329Q55 335 55 347T67 365Q70 367 454 367H837L828 376Q803 403 785 437T761 489T755 512ZM55 153V173H492Q928 173 932 171Q944 166 944 153T932 135Q928 133 545 133H162L171 124Q198 95 216 61T239 8L244 -12Q244 -14 221 -14H198L195 -4Q160 95 67 146L55 153\",8708:\"55 676Q55 688 66 694H199L333 696L351 772Q364 827 370 843T386 860Q393 860 399 854T406 841Q406 836 391 765L375 696Q375 694 431 694H484Q491 688 497 681V12L493 5L486 1L353 -1H219L202 -79Q184 -153 180 -159Q175 -166 165 -166Q146 -166 146 -148Q146 -141 161 -76T177 -4Q177 -1 122 -1H68Q55 12 55 20T66 39H126L186 41L219 181Q226 215 234 251T246 305T251 325Q251 328 166 328H79Q68 345 68 347Q68 352 75 359L82 368H262L291 505Q298 539 306 575T319 630T324 650V654H68Q55 669 55 676ZM457 368V654H411Q366 654 366 652Q365 651 361 634T349 580T333 514Q303 373 302 372V368H457ZM457 39V328H375Q293 328 293 325Q292 322 260 183T228 41T344 39H457\",8709:\"624 470Q624 468 639 446T668 382T683 291Q683 181 612 99T437 -1Q425 -2 387 -2T337 -1Q245 18 193 70L179 81L131 39Q96 8 89 3T75 -3Q55 -3 55 17Q55 24 61 30T111 73Q154 113 151 113Q151 114 140 130T115 177T95 241Q94 253 94 291T95 341Q112 431 173 495Q265 587 385 587Q410 587 437 581Q522 571 582 513L595 501L642 541Q689 586 695 586Q696 586 697 586T699 587Q706 587 713 583T720 568Q720 560 711 551T664 510Q651 499 642 490T628 475T624 470ZM564 477Q517 522 448 539Q428 546 375 546Q290 546 229 492T144 370Q133 332 133 279Q136 228 151 195Q157 179 168 160T184 141Q186 141 375 307T564 477ZM642 290Q642 318 637 343T625 386T611 416T598 436T593 444Q590 444 402 277T213 108Q213 104 231 89T293 55T392 37Q495 37 568 111T642 290\",8722:\"84 237T84 250T98 270H402Q417 262 417 250T402 230H98Q84 237 84 250\",8726:\"91 404T91 410T97 423T111 430Q117 430 395 224Q676 13 678 10Q685 3 685 -3T678 -16T664 -23Q658 -23 380 184T98 397Q91 404 91 410\",8733:\"56 250Q56 346 122 409T276 472Q349 472 407 430T486 326L489 316Q490 317 493 326T501 345T514 367T531 393Q557 425 602 448T698 472Q722 472 722 452Q722 437 702 435T642 421T571 377Q520 323 520 250Q520 179 568 126T693 68Q722 66 722 48Q722 28 698 28Q636 28 576 67T493 174L490 184Q489 181 483 167T475 150T468 136T458 120T447 107T432 90T412 73Q350 28 277 28Q188 28 122 91T56 250ZM199 68T278 68T408 122T459 250Q459 322 414 370T308 430Q302 431 273 431Q204 431 150 380T96 250Q96 176 147 122\",8739:\"91 417Q104 430 111 430T131 417V-10Q116 -23 111 -23T91 -10V417\",8740:\"91 417Q104 430 111 430T131 417V301L171 341Q201 373 207 378T220 384Q227 384 233 377T240 366Q240 357 187 299L131 244V-10Q116 -23 111 -23T91 -10V201L49 157Q20 127 14 121T0 115Q-8 115 -14 121T-20 132Q-20 139 17 178Q29 191 36 199L91 257V417\",8741:\"55 417Q69 431 76 431T95 419V-12Q84 -23 76 -23Q72 -23 69 -22T62 -16T55 -10V417ZM293 419Q300 431 310 431L324 424L331 417V-10Q316 -23 309 -23L297 -19L293 -12V419\",8742:\"56 417Q68 431 76 431L89 426L96 419V317L98 215L193 273L291 330V375L293 419Q301 431 311 431Q331 431 331 388L333 355L356 370Q381 384 388 384Q394 384 400 377T407 363Q407 354 367 328L331 308V-10Q316 -23 310 -23Q300 -23 293 -12L291 135V284L98 168L96 77V-12Q84 -24 76 -24L62 -19L58 -12L56 66V144L31 128Q5 114 -2 114Q-8 114 -14 121T-20 136Q-20 142 -14 147T20 170L56 190V417\",8764:\"73 132Q55 132 55 172Q55 220 79 272Q95 301 111 319Q148 353 195 363Q199 364 212 364Q262 364 294 350T408 272Q472 222 522 212Q537 208 555 208Q606 208 646 243Q671 268 680 296T691 342T702 365Q713 365 716 354T719 314Q714 236 664 179L660 176Q657 173 654 170T644 163T631 154T615 146T596 139T574 134T549 132Q510 132 465 156T386 211T307 265T223 290Q162 290 124 249T86 165Q86 155 82 144T73 132\",8776:\"55 326Q55 394 101 437T226 481Q268 479 313 460T392 419T469 379T555 361Q622 361 662 401Q686 423 688 450Q693 479 702 479H705Q719 479 719 442Q719 367 670 327T554 286Q512 286 466 304T386 345T307 385T220 404Q184 404 157 394T120 374L111 363Q86 339 86 317Q86 288 71 288Q55 288 55 326ZM55 90Q55 164 105 205T226 246Q269 243 314 224T392 183T470 144T558 126Q622 126 662 166Q686 187 688 214Q693 244 704 244Q716 244 719 210Q719 165 702 132T658 82T605 58T552 50T498 58T447 77T384 110Q322 146 302 152Q263 168 220 168Q179 168 144 152Q128 147 107 125T86 81Q86 52 71 52Q55 52 55 90\",8808:\"86 472Q93 477 381 614T673 752Q680 752 686 746T693 732T689 721Q686 715 418 590L151 461L418 332Q684 207 689 201Q693 195 693 190Q693 183 687 177T675 170Q668 170 380 307T86 450Q82 454 82 461Q82 467 86 472ZM369 101V126Q369 156 382 156H384Q385 157 386 157Q409 157 409 115V98V54H680Q693 39 693 34T680 14H409V-142H680Q693 -155 693 -162Q693 -167 680 -182H409V-273Q396 -284 388 -284Q382 -284 369 -275V-182H95Q82 -167 82 -162Q82 -155 95 -142H369V14H95Q93 17 89 21T84 27T82 34T83 40T89 47T95 54H369V101\",8809:\"89 745Q95 752 100 752Q106 752 394 615T689 472Q693 468 693 461T689 450Q684 445 396 308T100 170Q95 170 89 176T82 190Q82 195 86 201Q91 208 358 332L624 461L358 590Q90 715 86 721Q82 725 82 731Q82 739 89 745ZM369 101V126Q369 156 382 156H384Q385 157 386 157Q409 157 409 115V98V54H680Q693 39 693 34T680 14H409V-142H680Q693 -155 693 -162Q693 -167 680 -182H409V-273Q396 -284 388 -284Q382 -284 369 -275V-182H95Q82 -167 82 -162Q82 -155 95 -142H369V14H95Q93 17 89 21T84 27T82 34T83 40T89 47T95 54H369V101\",8816:\"82 34Q82 44 93 55H198L300 57L342 179Q351 207 362 238T378 286T384 303T238 377Q109 435 86 450Q82 454 82 460T86 472Q90 476 302 579L511 679Q512 679 553 795Q569 842 577 866T592 903T600 917T608 919Q615 919 622 912T629 901Q629 899 595 799Q589 777 581 753T569 717T564 703L618 728Q666 752 673 752T686 746T693 732Q693 723 683 717T615 683L546 650L491 488Q464 410 450 368T438 326Q493 297 562 266Q660 219 677 209T694 190Q694 183 690 177T678 171Q664 171 546 228L424 286Q422 286 382 172L342 57L513 55H682Q694 43 694 34Q694 28 689 21L682 17L506 15H329L322 -8Q320 -13 310 -41T295 -85L275 -141H680Q682 -143 684 -146T688 -151T691 -156T693 -162Q693 -172 682 -179L473 -181H262L220 -303Q192 -388 185 -404T166 -421Q160 -421 153 -415T146 -403Q146 -400 179 -302T220 -185Q220 -181 158 -181L93 -179L86 -174Q82 -169 82 -161Q82 -152 93 -141H164L233 -139L260 -63L286 15H189L93 17L86 21Q82 26 82 34ZM495 623Q495 626 493 626T321 544T151 461L398 343Q399 343 405 360T423 415T446 483Q457 513 469 551T488 606T495 623\",8817:\"97 172Q82 172 82 190Q82 197 86 201Q94 209 173 246T327 319T402 357Q405 360 434 448T462 539L278 628Q96 713 86 721Q82 725 82 732T88 745T102 752Q103 752 125 742T198 709T293 666Q342 642 385 622T453 590T478 579Q479 579 506 659T562 824T598 915Q602 919 609 919T622 913T629 901Q629 898 571 728Q546 656 531 608T518 559Q555 539 602 519Q664 488 679 479T694 461Q694 457 689 450Q680 443 616 413T494 356T435 326L389 190L342 57L513 55H682Q694 43 694 34Q694 28 689 21L682 17L506 15H329L322 -8Q320 -13 310 -41T295 -85L275 -141H680Q682 -143 684 -146T688 -151T691 -156T693 -162Q693 -172 682 -179L473 -181H262L220 -303Q192 -388 185 -404T166 -421Q160 -421 153 -415T146 -403Q146 -400 179 -302T220 -185Q220 -181 158 -181L93 -179L86 -174Q82 -169 82 -161Q82 -152 93 -141H164L233 -139L260 -63L286 15H189L93 17L86 21Q82 26 82 34Q82 44 93 55H198L300 57L342 179Q350 204 361 238T378 286T382 301L246 237Q111 172 97 172ZM624 461Q621 464 560 492Q512 518 503 518Q500 518 500 517Q499 513 488 479T465 413T453 379L624 461\",8840:\"82 -6Q82 1 95 14H262L295 94Q331 171 331 174Q324 175 312 178T267 194T206 227T146 283T98 368Q84 406 84 461T98 554Q126 632 194 685T349 750Q360 752 480 752H591L604 783Q620 819 624 821Q631 828 640 828Q653 825 658 810Q658 808 646 781L635 754Q635 752 658 752Q680 752 686 746Q693 739 693 732Q693 728 692 726T686 719T680 712H615L506 466Q479 407 451 344T408 248T393 214Q393 210 535 210H680Q693 194 693 190T680 170H373L340 92L304 14H680Q693 1 693 -6Q693 -11 680 -26H286L253 -103L218 -179L451 -181H682Q694 -193 694 -201Q694 -212 682 -219L440 -221H200L178 -270Q160 -309 154 -319T139 -330Q122 -330 118 -312L155 -223Q155 -221 126 -221H95Q82 -206 82 -201T95 -181H175L206 -108Q237 -35 242 -30Q242 -26 169 -26H95Q82 -11 82 -6ZM571 710Q571 712 469 712Q443 712 416 712T371 711T351 710Q279 700 221 656T138 548Q124 508 124 461T138 374Q186 245 351 212L460 459Q571 709 571 710\",8841:\"82 732Q82 739 95 752H251H348Q420 752 460 744T551 708Q566 697 566 701Q618 815 624 821Q631 828 640 828Q653 825 658 810L600 677Q600 671 615 656T653 605T689 517Q692 496 692 461T689 406Q668 325 615 266Q572 221 513 196T391 170H373L340 92L304 14H680Q693 1 693 -6Q693 -11 680 -26H286L253 -103L218 -179L451 -181H682Q694 -193 694 -201Q694 -212 682 -219L440 -221H200L178 -270Q160 -309 154 -319T139 -330Q122 -330 118 -312L155 -223Q155 -221 126 -221H95Q82 -206 82 -201T95 -181H175L206 -108Q237 -35 242 -30Q242 -26 169 -26H95Q82 -11 82 -6Q82 1 95 14H262L295 92L331 170H95Q93 172 91 175T87 180T84 185T82 191Q82 199 93 210H220L349 212L549 659Q507 692 462 702T338 712H249H95Q82 727 82 732ZM652 473Q652 513 636 552T603 611T582 632Q581 632 487 422T393 210Q424 210 460 220T535 253T605 316T649 410Q652 427 652 461V473\",8842:\"693 -115T693 -122T680 -144H315L269 -199Q221 -255 213 -255H212Q203 -255 197 -248T193 -231Q195 -225 229 -184L262 -144H186L113 -142L106 -137Q102 -130 102 -125Q102 -119 115 -104H298L426 52H386Q342 54 309 63Q236 79 180 129T98 249Q84 289 84 343Q84 398 98 436Q126 514 193 567T346 632Q347 632 373 632T440 633T520 634H680Q682 631 686 627T691 621T693 614T680 594H526Q364 594 353 592Q268 581 207 528T126 394Q123 378 123 343T126 292Q141 231 181 185T280 114Q329 92 415 92H462L506 147Q554 203 562 203H563Q572 203 578 196T582 178Q579 173 546 132L513 94L598 92H682Q693 81 693 73T680 52H480L349 -102L515 -104H682Q693 -115 693 -122\",8843:\"82 610T82 614T83 620T89 627T95 634H251Q378 634 409 633T469 623Q540 604 596 554T678 436Q691 397 691 343T678 249Q653 181 597 131T469 63Q427 52 362 52H315L213 -102L438 -104H662Q673 -115 673 -123Q673 -129 660 -144H186L151 -197Q114 -250 109 -253Q106 -254 104 -254Q100 -254 98 -253Q91 -253 87 -248T82 -235Q82 -230 109 -186L138 -144H115Q82 -144 82 -125Q82 -119 95 -104H166L266 49Q266 52 182 52H95Q82 65 82 72Q82 76 83 78T89 85T95 92H295L329 143Q365 195 369 198Q372 203 380 203Q385 203 391 197T398 185Q398 184 398 184L399 182Q399 175 369 129L344 94Q344 92 376 92Q402 92 422 94Q496 104 554 147T638 256Q651 295 651 343Q651 390 638 429Q613 494 555 537T422 592Q411 594 249 594H95Q82 610 82 614\",8872:\"55 678Q55 679 56 681T58 684T61 688T65 691T70 693T77 694Q88 692 95 679V464H540Q554 456 555 446Q555 442 554 439T552 434T549 430T546 428T542 426T539 424H95V270H539Q540 270 542 269T545 267T549 264T552 260T554 255T555 248Q554 238 540 230H95V15Q88 2 77 0Q73 0 70 1T65 3T61 6T59 9T57 13T55 16V678\",8901:\"71 0Q59 4 55 16V96L56 176Q59 180 66 187L70 189H209Q219 181 222 174V15Q219 10 209 1L140 0H71\",8994:\"77 122Q68 122 63 126T57 135T55 142Q55 151 68 176T111 235T177 302T271 356T388 378Q451 378 508 355T602 300T668 233T709 174T722 142Q722 124 704 122Q692 122 685 134T658 179T606 243Q511 338 390 338Q354 338 320 329Q251 312 193 263T97 141Q87 123 77 122\",8995:\"389 143Q324 143 266 164T171 215T107 277T67 330T55 358T60 371T77 378Q85 377 92 367T116 331T158 280Q256 182 389 182Q475 182 552 227T675 351Q688 378 704 378Q722 376 722 358Q722 352 710 330T670 276T605 215T511 164T389 143\",9651:\"99 -20Q84 -11 84 0Q84 5 148 145T278 424L342 563Q347 575 360 575Q368 575 375 570Q376 569 441 430T571 148T637 0Q637 -11 622 -20H99ZM476 260L360 509L248 266Q137 24 135 22Q135 20 360 20Q586 20 586 21L476 260\",9661:\"84 556Q84 567 99 576H622Q637 567 637 556Q637 551 572 409T441 127T375 -14Q368 -19 360 -19H358Q349 -19 342 -7T296 92Q249 193 211 275Q84 550 84 556ZM586 534Q586 536 361 536Q135 536 135 535L358 52L361 47L473 290Q584 532 586 534\",10887:\"102 168Q103 168 151 146T247 102T295 81Q299 85 322 144T344 206L218 268Q153 297 123 313T87 333T82 344T86 355Q104 369 291 455Q491 552 491 553L542 673Q581 767 590 784T609 801Q616 801 622 795T629 781Q629 773 586 677Q546 581 546 577L609 606Q669 635 673 635Q680 635 686 629T693 615Q693 610 692 608T670 593T604 561L524 521L400 226L542 157Q617 123 649 107T687 85T694 72Q694 66 690 60T679 54Q665 54 526 119Q394 186 386 186Q385 186 342 88L331 61L509 -23Q680 -105 688 -111Q693 -115 693 -122T688 -135T675 -141H673Q664 -141 491 -59Q320 21 316 21H315L249 -136Q183 -293 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -282 154 -261T181 -197T213 -119L280 41Q280 46 186 86Q157 101 121 119Q92 133 87 136T82 148Q82 155 88 161T102 168ZM418 370L466 495Q464 495 308 420T151 344T204 317T311 267T364 244Q364 247 418 370\",10888:\"97 54Q82 54 82 72Q82 79 86 84Q95 91 222 153L351 215L398 324L442 433L258 519Q95 597 87 604Q82 608 82 615T88 628T102 635Q107 635 424 484L458 468L524 630Q593 789 597 795Q601 801 609 801Q616 801 622 795T629 781L562 615L493 450L589 406Q665 371 679 362T694 344Q694 339 693 337T677 326T631 302T538 257Q504 241 465 223T406 195T386 186Q383 185 344 92T306 -3L486 81Q662 168 673 168Q680 168 686 162T693 148T689 137Q688 136 482 35L280 -59L233 -176Q184 -291 178 -299Q172 -303 166 -303T153 -297T146 -283Q146 -279 185 -186T224 -90Q225 -88 223 -88Q219 -88 193 -101Q109 -143 98 -143Q82 -138 82 -122Q82 -116 85 -113T108 -98T171 -67L249 -30L289 61Q297 81 307 107T321 144T326 157L218 106Q109 54 97 54ZM553 379Q480 412 480 415Q479 415 460 372T423 285T406 241Q408 240 516 291T624 344L553 379\",10955:\"82 -14T82 -7T95 15H431L529 170H435Q341 170 333 175Q149 218 98 368Q84 406 84 461Q84 515 98 555Q126 633 193 686T346 750Q347 750 373 750T440 751T520 752H680Q693 739 693 732Q693 727 680 712H526Q364 712 353 710Q268 700 207 646T126 512Q123 496 123 461T126 410Q141 350 180 304T280 232Q312 217 344 214T464 210H555L589 261Q613 301 620 311T635 321Q644 321 650 315T657 301Q657 296 651 286T630 252T604 212Q604 210 642 210H680Q693 197 693 190Q693 186 692 184T686 177T680 170H578L526 92L478 17L580 15H682Q693 4 693 -4T680 -25H451L353 -179L518 -181H682Q694 -193 694 -201Q694 -211 682 -219L504 -221H326L293 -272Q257 -332 246 -332Q238 -332 232 -326T225 -313Q225 -310 226 -308Q226 -305 251 -265T278 -223Q278 -221 186 -221H95Q93 -218 89 -214T84 -208T82 -201T95 -181H306L404 -25H249L93 -23L86 -19Q82 -14 82 -7\",10956:\"82 732Q82 739 95 752H251Q415 752 426 750Q539 736 615 657Q667 599 689 517Q692 496 692 461T689 406Q668 325 615 266Q522 170 382 170H355L326 95Q319 80 311 59T298 28T293 17Q293 15 486 15H680Q693 0 693 -6T680 -25H275L213 -179L449 -181H682Q693 -192 693 -199T680 -221H198L178 -270Q153 -333 139 -333Q132 -333 126 -327T119 -314T135 -266T153 -223Q153 -221 124 -221H95Q82 -207 82 -201T95 -181H171L233 -25H162L93 -23L86 -19Q82 -14 82 -7T95 15H251L313 170H202L93 172L86 177Q82 182 82 190Q82 199 93 210H211L329 212L349 261Q366 301 372 311T386 321Q392 321 399 315T407 302Q407 295 390 254T373 210Q374 209 377 209Q412 209 444 217Q512 231 564 273T638 377Q651 414 651 461Q651 509 638 548Q613 613 555 656T422 710Q411 712 249 712H95Q82 727 82 732\"},{})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.texVariant=void 0,e.texVariant={710:[.845,-.561,2.333,{ic:.013}],732:[.899,-.628,2.333],770:[.845,-.561,0,{ic:.013}],771:[.899,-.628,0],1008:[.434,.006,.667,{ic:.067}],8463:[.695,.013,.54,{ic:.022}],8592:[.437,-.064,.5],8594:[.437,-.064,.5],8652:[.514,.014,1],8708:[.86,.166,.556],8709:[.587,0,.778],8722:[.27,-.23,.5],8726:[.43,.023,.778],8733:[.472,-.028,.778],8739:[.43,.023,.222],8740:[.43,.023,.222,{ic:.018}],8741:[.431,.023,.389],8742:[.431,.024,.389,{ic:.018}],8764:[.365,-.132,.778],8776:[.481,-.05,.778],8808:[.752,.284,.778],8809:[.752,.284,.778],8816:[.919,.421,.778],8817:[.919,.421,.778],8840:[.828,.33,.778],8841:[.828,.33,.778],8842:[.634,.255,.778],8843:[.634,.254,.778],8872:[.694,0,.611],8901:[.189,0,.278],8994:[.378,-.122,.778],8995:[.378,-.143,.778],9651:[.575,.02,.722],9661:[.576,.019,.722],10887:[.801,.303,.778],10888:[.801,.303,.778],10955:[.752,.332,.778],10956:[.752,.333,.778]}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.delimiters=e.VSIZES=e.HDW3=e.HDW2=e.HDW1=void 0;var r=Q(28);e.HDW1=[.75,.25,.875],e.HDW2=[.85,.349,.667],e.HDW3=[.583,.082,.5],e.VSIZES=[1,1.2,1.8,2.4,3];var T={c:47,dir:r.V,sizes:e.VSIZES},n={c:175,dir:r.H,sizes:[.59],stretch:[0,175],HDW:[.59,-.544,.5]},o={c:710,dir:r.H,sizes:[.517,.817,1.335,1.777,1.909]},i={c:732,dir:r.H,sizes:[.583,.805,1.33,1.773,1.887]},a={c:8211,dir:r.H,sizes:[.5],stretch:[0,8211],HDW:[.285,-.248,.5]},s={c:8592,dir:r.H,sizes:[1],stretch:[8592,8722],HDW:e.HDW3},l={c:8594,dir:r.H,sizes:[1],stretch:[0,8722,8594],HDW:e.HDW3},c={c:8596,dir:r.H,sizes:[1],stretch:[8592,8722,8594],HDW:e.HDW3},u={c:8612,dir:r.H,stretch:[8592,8722,8739],HDW:e.HDW3,min:1.278},p={c:8614,dir:r.H,sizes:[1],stretch:[8739,8722,8594],HDW:e.HDW3},h={c:8656,dir:r.H,sizes:[1],stretch:[8656,61],HDW:e.HDW3},f={c:8658,dir:r.H,sizes:[1],stretch:[0,61,8658],HDW:e.HDW3},d={c:8660,dir:r.H,sizes:[1],stretch:[8656,61,8658],HDW:e.HDW3},L={c:8722,dir:r.H,sizes:[.778],stretch:[0,8722],HDW:e.HDW3},H={c:8739,dir:r.V,sizes:[1],stretch:[0,8739],HDW:[.627,.015,.333]},m={c:9180,dir:r.H,sizes:[.778,1],schar:[8994,8994],stretch:[57680,57684,57681],HDW:[.32,.2,.5]},y={c:9181,dir:r.H,sizes:[.778,1],schar:[8995,8995],stretch:[57682,57684,57683],HDW:[.32,.2,.5]},v={c:9182,dir:r.H,stretch:[57680,57684,57681,57685],HDW:[.32,.2,.5],min:1.8},g={c:9183,dir:r.H,stretch:[57682,57684,57683,57686],HDW:[.32,.2,.5],min:1.8},b={c:10216,dir:r.V,sizes:e.VSIZES},M={c:10217,dir:r.V,sizes:e.VSIZES},V={c:10502,dir:r.H,stretch:[8656,61,8739],HDW:e.HDW3,min:1.278},x={c:10503,dir:r.H,stretch:[8872,61,8658],HDW:e.HDW3,min:1.278};e.delimiters={40:{dir:r.V,sizes:e.VSIZES,stretch:[9115,9116,9117],HDW:[.85,.349,.875]},41:{dir:r.V,sizes:e.VSIZES,stretch:[9118,9119,9120],HDW:[.85,.349,.875]},45:L,47:T,61:{dir:r.H,sizes:[.767],stretch:[0,61],HDW:e.HDW3},91:{dir:r.V,sizes:e.VSIZES,stretch:[9121,9122,9123],HDW:e.HDW2},92:{dir:r.V,sizes:e.VSIZES},93:{dir:r.V,sizes:e.VSIZES,stretch:[9124,9125,9126],HDW:e.HDW2},94:o,95:a,123:{dir:r.V,sizes:e.VSIZES,stretch:[9127,9130,9129,9128],HDW:[.85,.349,.889]},124:{dir:r.V,sizes:[1],stretch:[0,8739],HDW:[.75,.25,.333]},125:{dir:r.V,sizes:e.VSIZES,stretch:[9131,9130,9133,9132],HDW:[.85,.349,.889]},126:i,175:n,710:o,713:n,732:i,770:o,771:i,818:a,8211:a,8212:a,8213:a,8214:{dir:r.V,sizes:[.602,1],schar:[0,8741],stretch:[0,8741],HDW:[.602,0,.556]},8215:a,8254:n,8407:l,8592:s,8593:{dir:r.V,sizes:[.888],stretch:[8593,9168],HDW:[.6,0,.667]},8594:l,8595:{dir:r.V,sizes:[.888],stretch:[0,9168,8595],HDW:[.6,0,.667]},8596:c,8597:{dir:r.V,sizes:[1.044],stretch:[8593,9168,8595],HDW:e.HDW1},8606:{dir:r.H,sizes:[1],stretch:[8606,8722],HDW:e.HDW3},8608:{dir:r.H,sizes:[1],stretch:[0,8722,8608],HDW:e.HDW3},8612:u,8613:{dir:r.V,stretch:[8593,9168,8869],HDW:e.HDW1,min:1.555},8614:p,8615:{dir:r.V,stretch:[8868,9168,8595],HDW:e.HDW1,min:1.555},8624:{dir:r.V,sizes:[.722],stretch:[8624,9168],HDW:e.HDW1},8625:{dir:r.V,sizes:[.722],stretch:[8625,9168],HDW:e.HDW1},8636:{dir:r.H,sizes:[1],stretch:[8636,8722],HDW:e.HDW3},8637:{dir:r.H,sizes:[1],stretch:[8637,8722],HDW:e.HDW3},8638:{dir:r.V,sizes:[.888],stretch:[8638,9168],HDW:e.HDW1},8639:{dir:r.V,sizes:[.888],stretch:[8639,9168],HDW:e.HDW1},8640:{dir:r.H,sizes:[1],stretch:[0,8722,8640],HDW:e.HDW3},8641:{dir:r.H,sizes:[1],stretch:[0,8722,8641],HDW:e.HDW3},8642:{dir:r.V,sizes:[.888],stretch:[0,9168,8642],HDW:e.HDW1},8643:{dir:r.V,sizes:[.888],stretch:[0,9168,8643],HDW:e.HDW1},8656:h,8657:{dir:r.V,sizes:[.888],stretch:[8657,8214],HDW:[.599,0,.778]},8658:f,8659:{dir:r.V,sizes:[.888],stretch:[0,8214,8659],HDW:[.6,0,.778]},8660:d,8661:{dir:r.V,sizes:[1.044],stretch:[8657,8214,8659],HDW:[.75,.25,.778]},8666:{dir:r.H,sizes:[1],stretch:[8666,8801],HDW:[.464,-.036,.5]},8667:{dir:r.H,sizes:[1],stretch:[0,8801,8667],HDW:[.464,-.036,.5]},8722:L,8725:T,8730:{dir:r.V,sizes:e.VSIZES,stretch:[57345,57344,9143],HDW:[.85,.35,1.056]},8739:H,8741:{dir:r.V,sizes:[1],stretch:[0,8741],HDW:[.627,.015,.556]},8968:{dir:r.V,sizes:e.VSIZES,stretch:[9121,9122],HDW:e.HDW2},8969:{dir:r.V,sizes:e.VSIZES,stretch:[9124,9125],HDW:e.HDW2},8970:{dir:r.V,sizes:e.VSIZES,stretch:[0,9122,9123],HDW:e.HDW2},8971:{dir:r.V,sizes:e.VSIZES,stretch:[0,9125,9126],HDW:e.HDW2},8978:m,8994:m,8995:y,9001:b,9002:M,9130:{dir:r.V,sizes:[.32],stretch:[9130,9130,9130],HDW:[.29,.015,.889]},9135:a,9136:{dir:r.V,sizes:[.989],stretch:[9127,9130,9133],HDW:[.75,.25,.889]},9137:{dir:r.V,sizes:[.989],stretch:[9131,9130,9129],HDW:[.75,.25,.889]},9140:{dir:r.H,stretch:[9484,8722,9488],HDW:e.HDW3,min:1},9141:{dir:r.H,stretch:[9492,8722,9496],HDW:e.HDW3,min:1},9168:{dir:r.V,sizes:[.602,1],schar:[0,8739],stretch:[0,8739],HDW:[.602,0,.333]},9180:m,9181:y,9182:v,9183:g,9184:{dir:r.H,stretch:[714,713,715],HDW:[.59,-.544,.5],min:1},9185:{dir:r.H,stretch:[715,713,714],HDW:[.59,-.544,.5],min:1},9472:a,10072:H,10216:b,10217:M,10222:{dir:r.V,sizes:[.989],stretch:[9127,9130,9129],HDW:[.75,.25,.889]},10223:{dir:r.V,sizes:[.989],stretch:[9131,9130,9133],HDW:[.75,.25,.889]},10229:s,10230:l,10231:c,10232:h,10233:f,10234:d,10235:u,10236:p,10237:V,10238:x,10502:V,10503:x,10574:{dir:r.H,stretch:[8636,8722,8640],HDW:e.HDW3,min:2},10575:{dir:r.V,stretch:[8638,9168,8642],HDW:e.HDW1,min:1.776},10576:{dir:r.H,stretch:[8637,8722,8641],HDW:e.HDW3,min:2},10577:{dir:r.V,stretch:[8639,9168,8643],HDW:e.HDW1,min:.5},10586:{dir:r.H,stretch:[8636,8722,8739],HDW:e.HDW3,min:1.278},10587:{dir:r.H,stretch:[8739,8722,8640],HDW:e.HDW3,min:1.278},10588:{dir:r.V,stretch:[8638,9168,8869],HDW:e.HDW1,min:1.556},10589:{dir:r.V,stretch:[8868,9168,8642],HDW:e.HDW1,min:1.556},10590:{dir:r.H,stretch:[8637,8722,8739],HDW:e.HDW3,min:1.278},10591:{dir:r.H,stretch:[8739,8722,8641],HDW:e.HDW3,min:1.278},10592:{dir:r.V,stretch:[8639,9168,8869],HDW:e.HDW1,min:1.776},10593:{dir:r.V,stretch:[8868,9168,8643],HDW:e.HDW1,min:1.776},12296:b,12297:M,65079:v,65080:g}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FontCache=void 0;var r=function(){function t(t){this.cache=new Map,this.defs=null,this.localID=\"\",this.nextID=0,this.jax=t}return t.prototype.cachePath=function(t,e,Q){var r=\"MJX-\"+this.localID+(this.jax.font.getVariant(t).cacheID||\"\")+\"-\"+e;return this.cache.has(r)||(this.cache.set(r,Q),this.jax.adaptor.append(this.defs,this.jax.svg(\"path\",{id:r,d:Q}))),r},t.prototype.clearLocalID=function(){this.localID=\"\"},t.prototype.useLocalID=function(t){void 0===t&&(t=null),this.localID=(null==t?++this.nextID:t)+(\"\"===t?\"\":\"-\")},t.prototype.clearCache=function(){this.cache=new Map,this.defs=this.jax.svg(\"defs\")},t.prototype.getCache=function(){return this.defs},t}();e.FontCache=r},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MJContextMenu=void 0;var i=Q(273),a=Q(103),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.mathItem=null,e.annotation=\"\",e.annotationTypes={},e}return T(e,t),e.prototype.post=function(e,Q){if(this.mathItem){if(void 0!==Q){var r=this.mathItem.inputJax.name,T=this.findID(\"Show\",\"Original\");T.content=\"MathML\"===r?\"Original MathML\":r+\" Commands\",this.findID(\"Copy\",\"Original\").content=T.content;var n=this.findID(\"Settings\",\"semantics\");\"MathML\"===r?n.disable():n.enable(),this.getAnnotationMenu(),this.dynamicSubmenus()}t.prototype.post.call(this,e,Q)}},e.prototype.unpost=function(){t.prototype.unpost.call(this),this.mathItem=null},e.prototype.findID=function(){for(var t,e,Q=[],r=0;r<arguments.length;r++)Q[r]=arguments[r];var T=this,o=null;try{for(var i=n(Q),s=i.next();!s.done;s=i.next()){var l=s.value;T?(o=T.find(l),T=o instanceof a.Submenu?o.submenu:null):o=null}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}return o},e.prototype.getAnnotationMenu=function(){var t=this,e=this.getAnnotations(this.getSemanticNode());this.createAnnotationMenu(\"Show\",e,(function(){return t.showAnnotation.post()})),this.createAnnotationMenu(\"Copy\",e,(function(){return t.copyAnnotation()}))},e.prototype.getSemanticNode=function(){for(var t=this.mathItem.root;t&&!t.isKind(\"semantics\");){if(t.isToken||1!==t.childNodes.length)return null;t=t.childNodes[0]}return t},e.prototype.getAnnotations=function(t){var e,Q,r=[];if(!t)return r;try{for(var T=n(t.childNodes),o=T.next();!o.done;o=T.next()){var i=o.value;if(i.isKind(\"annotation\")){var a=this.annotationMatch(i);if(a){var s=i.childNodes.reduce((function(t,e){return t+e.toString()}),\"\");r.push([a,s])}}}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}return r},e.prototype.annotationMatch=function(t){var e,Q,r=t.attributes.get(\"encoding\");try{for(var T=n(Object.keys(this.annotationTypes)),o=T.next();!o.done;o=T.next()){var i=o.value;if(this.annotationTypes[i].indexOf(r)>=0)return i}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=T.return)&&Q.call(T)}finally{if(e)throw e.error}}return null},e.prototype.createAnnotationMenu=function(t,e,Q){var r=this,T=this.findID(t,\"Annotation\");T.submenu=this.factory.get(\"subMenu\")(this.factory,{items:e.map((function(t){var e=o(t,2),T=e[0],n=e[1];return{type:\"command\",id:T,content:T,action:function(){r.annotation=n,Q()}}})),id:\"annotations\"},T),e.length?T.enable():T.disable()},e.prototype.dynamicSubmenus=function(){var t,Q;try{for(var r=n(e.DynamicSubmenus),T=r.next();!T.done;T=r.next()){var i=o(T.value,2),a=i[0],s=i[1],l=this.find(a);if(l){var c=s(this,l);l.submenu=c,c.items.length?l.enable():l.disable()}}}catch(e){t={error:e}}finally{try{T&&!T.done&&(Q=r.return)&&Q.call(r)}finally{if(t)throw t.error}}},e.DynamicSubmenus=new Map,e}(i.ContextMenu);e.MJContextMenu=s},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.Menu=void 0;var T=Q(25),n=Q(14),o=Q(1),i=Q(7),a=Q(267),s=Q(269),l=Q(270),c=Q(104),u=Q(301),p=Q(276),h=Q(312),f=o.MathJax,d=\"undefined\"!=typeof window&&window.navigator&&\"Mac\"===window.navigator.platform.substr(0,3),L=function(){function t(t,e){var Q=this;void 0===e&&(e={}),this.settings=null,this.defaultSettings=null,this.menu=null,this.MmlVisitor=new s.MmlVisitor,this.jax={CHTML:null,SVG:null},this.rerenderStart=n.STATE.LAST,this.about=new c.Info('<b style=\"font-size:120%;\">MathJax</b> v'+T.mathjax.version,(function(){var t=[];return t.push(\"Input Jax: \"+Q.document.inputJax.map((function(t){return t.name})).join(\", \")),t.push(\"Output Jax: \"+Q.document.outputJax.name),t.push(\"Document Type: \"+Q.document.kind),t.join(\"<br/>\")}),'<a href=\"https://www.mathjax.org\">www.mathjax.org</a>'),this.help=new c.Info(\"<b>MathJax Help</b>\",(function(){return[\"<p><b>MathJax</b> is a JavaScript library that allows page\",\" authors to include mathematics within their web pages.\",\" As a reader, you don't need to do anything to make that happen.</p>\",\"<p><b>Browsers</b>: MathJax works with all modern browsers including\",\" Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.</p>\",\"<p><b>Math Menu</b>: MathJax adds a contextual menu to equations.\",\" Right-click or CTRL-click on any mathematics to access the menu.</p>\",'<div style=\"margin-left: 1em;\">',\"<p><b>Show Math As:</b> These options allow you to view the formula's\",\" source markup (as MathML or in its original format).</p>\",\"<p><b>Copy to Clipboard:</b> These options copy the formula's source markup,\",\" as MathML or in its original format, to the clipboard\",\" (in browsers that support that).</p>\",\"<p><b>Math Settings:</b> These give you control over features of MathJax,\",\" such the size of the mathematics, and the mechanism used\",\" to display equations.</p>\",\"<p><b>Accessibility</b>: MathJax can work with screen\",\" readers to make mathematics accessible to the visually impaired.\",\" Turn on the explorer to enable generation of speech strings\",\" and the ability to investigate expressions interactively.</p>\",\"<p><b>Language</b>: This menu lets you select the language used by MathJax\",\" for its menus and warning messages. (Not yet implemented in version 3.)</p>\",\"</div>\",\"<p><b>Math Zoom</b>: If you are having difficulty reading an\",\" equation, MathJax can enlarge it to help you see it better, or\",\" you can scall all the math on the page to make it larger.\",\" Turn these features on in the <b>Math Settings</b> menu.</p>\",\"<p><b>Preferences</b>: MathJax uses your browser's localStorage database\",\" to save the preferences set via this menu locally in your browser.  These\",\" are not used to track you, and are not transferred or used remotely by\",\" MathJax in any way.</p>\"].join(\"\\n\")}),'<a href=\"https://www.mathjax.org\">www.mathjax.org</a>'),this.mathmlCode=new l.SelectableInfo(\"MathJax MathML Expression\",(function(){if(!Q.menu.mathItem)return\"\";var t=Q.toMML(Q.menu.mathItem);return\"<pre>\"+Q.formatSource(t)+\"</pre>\"}),\"\"),this.originalText=new l.SelectableInfo(\"MathJax Original Source\",(function(){if(!Q.menu.mathItem)return\"\";var t=Q.menu.mathItem.math;return'<pre style=\"font-size:125%; margin:0\">'+Q.formatSource(t)+\"</pre>\"}),\"\"),this.annotationText=new l.SelectableInfo(\"MathJax Annotation Text\",(function(){if(!Q.menu.mathItem)return\"\";var t=Q.menu.annotation;return'<pre style=\"font-size:125%; margin:0\">'+Q.formatSource(t)+\"</pre>\"}),\"\"),this.zoomBox=new c.Info(\"MathJax Zoomed Expression\",(function(){if(!Q.menu.mathItem)return\"\";var t=Q.menu.mathItem.typesetRoot.cloneNode(!0);return t.style.margin=\"0\",'<div style=\"font-size: '+1.25*parseFloat(Q.settings.zscale)+'%\">'+t.outerHTML+\"</div>\"}),\"\"),this.document=t,this.options=i.userOptions(i.defaultOptions({},this.constructor.OPTIONS),e),this.initSettings(),this.mergeUserSettings(),this.initMenu()}return Object.defineProperty(t.prototype,\"isLoading\",{get:function(){return t.loading>0},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"loadingPromise\",{get:function(){return this.isLoading?(t._loadingPromise||(t._loadingPromise=new Promise((function(e,Q){t._loadingOK=e,t._loadingFailed=Q}))),t._loadingPromise):Promise.resolve()},enumerable:!1,configurable:!0}),t.prototype.initSettings=function(){this.settings=this.options.settings,this.jax=this.options.jax;var t=this.document.outputJax;this.jax[t.name]=t,this.settings.renderer=t.name,f._.a11y&&f._.a11y.explorer&&Object.assign(this.settings,this.document.options.a11y),this.settings.scale=t.options.scale,this.defaultSettings=Object.assign({},this.settings)},t.prototype.initMenu=function(){var t=this,e=new u.Parser([[\"contextMenu\",a.MJContextMenu.fromJson.bind(a.MJContextMenu)]]);this.menu=e.parse({type:\"contextMenu\",id:\"MathJax_Menu\",pool:[this.variable(\"texHints\"),this.variable(\"semantics\"),this.variable(\"zoom\"),this.variable(\"zscale\"),this.variable(\"renderer\",(function(e){return t.setRenderer(e)})),this.variable(\"alt\"),this.variable(\"cmd\"),this.variable(\"ctrl\"),this.variable(\"shift\"),this.variable(\"scale\",(function(e){return t.setScale(e)})),this.variable(\"explorer\",(function(e){return t.setExplorer(e)})),this.a11yVar(\"highlight\"),this.a11yVar(\"backgroundColor\"),this.a11yVar(\"backgroundOpacity\"),this.a11yVar(\"foregroundColor\"),this.a11yVar(\"foregroundOpacity\"),this.a11yVar(\"speech\"),this.a11yVar(\"subtitles\"),this.a11yVar(\"braille\"),this.a11yVar(\"viewBraille\"),this.a11yVar(\"locale\"),this.a11yVar(\"speechRules\"),this.a11yVar(\"magnification\"),this.a11yVar(\"magnify\"),this.a11yVar(\"treeColoring\"),this.a11yVar(\"infoType\"),this.a11yVar(\"infoRole\"),this.a11yVar(\"infoPrefix\"),this.variable(\"autocollapse\"),this.variable(\"collapsible\",(function(e){return t.setCollapsible(e)})),this.variable(\"inTabOrder\",(function(e){return t.setTabOrder(e)})),this.variable(\"assistiveMml\",(function(e){return t.setAssistiveMml(e)}))],items:[this.submenu(\"Show\",\"Show Math As\",[this.command(\"MathMLcode\",\"MathML Code\",(function(){return t.mathmlCode.post()})),this.command(\"Original\",\"Original Form\",(function(){return t.originalText.post()})),this.submenu(\"Annotation\",\"Annotation\")]),this.submenu(\"Copy\",\"Copy to Clipboard\",[this.command(\"MathMLcode\",\"MathML Code\",(function(){return t.copyMathML()})),this.command(\"Original\",\"Original Form\",(function(){return t.copyOriginal()})),this.submenu(\"Annotation\",\"Annotation\")]),this.rule(),this.submenu(\"Settings\",\"Math Settings\",[this.submenu(\"Renderer\",\"Math Renderer\",this.radioGroup(\"renderer\",[[\"CHTML\"],[\"SVG\"]])),this.rule(),this.submenu(\"ZoomTrigger\",\"Zoom Trigger\",[this.command(\"ZoomNow\",\"Zoom Once Now\",(function(){return t.zoom(null,\"\",t.menu.mathItem)})),this.rule(),this.radioGroup(\"zoom\",[[\"Click\"],[\"DoubleClick\",\"Double-Click\"],[\"NoZoom\",\"No Zoom\"]]),this.rule(),this.label(\"TriggerRequires\",\"Trigger Requires:\"),this.checkbox(d?\"Option\":\"Alt\",d?\"Option\":\"Alt\",\"alt\"),this.checkbox(\"Command\",\"Command\",\"cmd\",{hidden:!d}),this.checkbox(\"Control\",\"Control\",\"ctrl\",{hiddne:d}),this.checkbox(\"Shift\",\"Shift\",\"shift\")]),this.submenu(\"ZoomFactor\",\"Zoom Factor\",this.radioGroup(\"zscale\",[[\"150%\"],[\"175%\"],[\"200%\"],[\"250%\"],[\"300%\"],[\"400%\"]])),this.rule(),this.command(\"Scale\",\"Scale All Math...\",(function(){return t.scaleAllMath()})),this.rule(),this.checkbox(\"texHints\",\"Add TeX hints to MathML\",\"texHints\"),this.checkbox(\"semantics\",\"Add original as annotation\",\"semantics\"),this.rule(),this.command(\"Reset\",\"Reset to defaults\",(function(){return t.resetDefaults()}))]),this.submenu(\"Accessibility\",\"Accessibility\",[this.checkbox(\"Activate\",\"Activate\",\"explorer\"),this.submenu(\"Speech\",\"Speech\",[this.checkbox(\"Speech\",\"Speech Output\",\"speech\"),this.checkbox(\"Subtitles\",\"Speech Subtities\",\"subtitles\"),this.checkbox(\"Braille\",\"Braille Output\",\"braille\"),this.checkbox(\"View Braille\",\"Braille Subtitles\",\"viewBraille\"),this.rule(),this.submenu(\"A11yLanguage\",\"Language\"),this.rule(),this.submenu(\"Mathspeak\",\"Mathspeak Rules\",this.radioGroup(\"speechRules\",[[\"mathspeak-default\",\"Verbose\"],[\"mathspeak-brief\",\"Brief\"],[\"mathspeak-sbrief\",\"Superbrief\"]])),this.submenu(\"Clearspeak\",\"Clearspeak Rules\",this.radioGroup(\"speechRules\",[[\"clearspeak-default\",\"Auto\"]])),this.submenu(\"ChromeVox\",\"ChromeVox Rules\",this.radioGroup(\"speechRules\",[[\"default-default\",\"Standard\"],[\"default-alternative\",\"Alternative\"]]))]),this.submenu(\"Highlight\",\"Highlight\",[this.submenu(\"Background\",\"Background\",this.radioGroup(\"backgroundColor\",[[\"Blue\"],[\"Red\"],[\"Green\"],[\"Yellow\"],[\"Cyan\"],[\"Magenta\"],[\"White\"],[\"Black\"]])),{type:\"slider\",variable:\"backgroundOpacity\",content:\" \"},this.submenu(\"Foreground\",\"Foreground\",this.radioGroup(\"foregroundColor\",[[\"Black\"],[\"White\"],[\"Magenta\"],[\"Cyan\"],[\"Yellow\"],[\"Green\"],[\"Red\"],[\"Blue\"]])),{type:\"slider\",variable:\"foregroundOpacity\",content:\" \"},this.rule(),this.radioGroup(\"highlight\",[[\"None\"],[\"Hover\"],[\"Flame\"]]),this.rule(),this.checkbox(\"TreeColoring\",\"Tree Coloring\",\"treeColoring\")]),this.submenu(\"Magnification\",\"Magnification\",[this.radioGroup(\"magnification\",[[\"None\"],[\"Keyboard\"],[\"Mouse\"]]),this.rule(),this.radioGroup(\"magnify\",[[\"200%\"],[\"300%\"],[\"400%\"],[\"500%\"]])]),this.submenu(\"Semantic Info\",\"Semantic Info\",[this.checkbox(\"Type\",\"Type\",\"infoType\"),this.checkbox(\"Role\",\"Role\",\"infoRole\"),this.checkbox(\"Prefix\",\"Prefix\",\"infoPrefix\")],!0),this.rule(),this.checkbox(\"Collapsible\",\"Collapsible Math\",\"collapsible\"),this.checkbox(\"AutoCollapse\",\"Auto Collapse\",\"autocollapse\",{disabled:!0}),this.rule(),this.checkbox(\"InTabOrder\",\"Include in Tab Order\",\"inTabOrder\"),this.checkbox(\"AssistiveMml\",\"Include Hidden MathML\",\"assistiveMml\")]),this.submenu(\"Language\",\"Language\"),this.rule(),this.command(\"About\",\"About MathJax\",(function(){return t.about.post()})),this.command(\"Help\",\"MathJax Help\",(function(){return t.help.post()}))]});var Q=this.menu;this.about.attachMenu(Q),this.help.attachMenu(Q),this.originalText.attachMenu(Q),this.annotationText.attachMenu(Q),this.mathmlCode.attachMenu(Q),this.zoomBox.attachMenu(Q),this.checkLoadableItems(),this.enableExplorerItems(this.settings.explorer),Q.showAnnotation=this.annotationText,Q.copyAnnotation=this.copyAnnotation.bind(this),Q.annotationTypes=this.options.annotationTypes,h.CssStyles.addInfoStyles(this.document.document),h.CssStyles.addMenuStyles(this.document.document)},t.prototype.checkLoadableItems=function(){var t,e;if(f&&f._&&f.loader&&f.startup)!this.settings.collapsible||f._.a11y&&f._.a11y.complexity||this.loadA11y(\"complexity\"),!this.settings.explorer||f._.a11y&&f._.a11y.explorer||this.loadA11y(\"explorer\"),!this.settings.assistiveMml||f._.a11y&&f._.a11y[\"assistive-mml\"]||this.loadA11y(\"assistive-mml\");else{var Q=this.menu;try{for(var T=r(Object.keys(this.jax)),n=T.next();!n.done;n=T.next()){var o=n.value;this.jax[o]||Q.findID(\"Settings\",\"Renderer\",o).disable()}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=T.return)&&e.call(T)}finally{if(t)throw t.error}}Q.findID(\"Accessibility\",\"Activate\").disable(),Q.findID(\"Accessibility\",\"AutoCollapse\").disable(),Q.findID(\"Accessibility\",\"Collapsible\").disable()}},t.prototype.enableExplorerItems=function(t){var e,Q,T=this.menu.findID(\"Accessibility\",\"Activate\").menu;try{for(var n=r(T.items.slice(1)),o=n.next();!o.done;o=n.next()){var i=o.value;if(i instanceof p.Rule)break;t?i.enable():i.disable()}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}},t.prototype.mergeUserSettings=function(){try{var e=localStorage.getItem(t.MENU_STORAGE);if(!e)return;Object.assign(this.settings,JSON.parse(e)),this.setA11y(this.settings)}catch(t){console.log(\"MathJax localStorage error: \"+t.message)}},t.prototype.saveUserSettings=function(){var e,Q,T={};try{for(var n=r(Object.keys(this.settings)),o=n.next();!o.done;o=n.next()){var i=o.value;this.settings[i]!==this.defaultSettings[i]&&(T[i]=this.settings[i])}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}try{Object.keys(T).length?localStorage.setItem(t.MENU_STORAGE,JSON.stringify(T)):localStorage.removeItem(t.MENU_STORAGE)}catch(t){console.log(\"MathJax localStorage error: \"+t.message)}},t.prototype.setA11y=function(t){f._.a11y&&f._.a11y.explorer&&f._.a11y.explorer_ts.setA11yOptions(this.document,t)},t.prototype.getA11y=function(t){if(f._.a11y&&f._.a11y.explorer)return this.document.options.a11y[t]},t.prototype.setScale=function(t){this.document.outputJax.options.scale=parseFloat(t),this.document.rerender()},t.prototype.setRenderer=function(t){var e=this;if(this.jax[t])this.setOutputJax(t);else{var Q=t.toLowerCase();this.loadComponent(\"output/\"+Q,(function(){var r=f.startup;Q in r.constructors&&(r.useOutput(Q,!0),r.output=r.getOutputJax(),e.jax[t]=r.output,e.setOutputJax(t))}))}},t.prototype.setOutputJax=function(t){this.jax[t].setAdaptor(this.document.adaptor),this.document.outputJax=this.jax[t],this.rerender()},t.prototype.setTabOrder=function(t){this.menu.store.inTaborder(t)},t.prototype.setAssistiveMml=function(t){this.document.options.enableAssistiveMml=t,!t||f._.a11y&&f._.a11y[\"assistive-mml\"]?this.rerender():this.loadA11y(\"assistive-mml\")},t.prototype.setExplorer=function(t){this.enableExplorerItems(t),this.document.options.enableExplorer=t,!t||f._.a11y&&f._.a11y.explorer?this.rerender(this.settings.collapsible?n.STATE.RERENDER:n.STATE.COMPILED):this.loadA11y(\"explorer\")},t.prototype.setCollapsible=function(t){this.document.options.enableComplexity=t,!t||f._.a11y&&f._.a11y.complexity?this.rerender(n.STATE.COMPILED):this.loadA11y(\"complexity\")},t.prototype.scaleAllMath=function(){var t=(100*parseFloat(this.settings.scale)).toFixed(1).replace(/.0$/,\"\"),e=prompt(\"Scale all mathematics (compared to surrounding text) by\",t+\"%\");if(e)if(e.match(/^\\s*\\d+(\\.\\d*)?\\s*%?\\s*$/)){var Q=parseFloat(e)/100;Q?this.setScale(String(Q)):alert(\"The scale should not be zero\")}else alert(\"The scale should be a percentage (e.g., 120%)\")},t.prototype.resetDefaults=function(){var e,Q;t.loading++;var T=this.menu.pool,o=this.defaultSettings;try{for(var i=r(Object.keys(this.settings)),a=i.next();!a.done;a=i.next()){var s=a.value,l=T.lookup(s);if(l){l.setValue(o[s]);var c=l.items[0];c&&c.executeCallbacks_()}else this.settings[s]=o[s]}}catch(t){e={error:t}}finally{try{a&&!a.done&&(Q=i.return)&&Q.call(i)}finally{if(e)throw e.error}}t.loading--,this.rerender(n.STATE.COMPILED)},t.prototype.checkComponent=function(e){var Q=t.loadingPromises.get(e);Q&&T.mathjax.retryAfter(Q)},t.prototype.loadComponent=function(e,Q){if(!t.loadingPromises.has(e)){var r=f.loader;if(r){t.loading++;var T=r.load(e).then((function(){t.loading--,t.loadingPromises.delete(e),Q(),0===t.loading&&t._loadingPromise&&(t._loadingPromise=null,t._loadingOK())})).catch((function(e){t._loadingPromise?(t._loadingPromise=null,t._loadingFailed(e)):console.log(e)}));t.loadingPromises.set(e,T)}}},t.prototype.loadA11y=function(e){var Q=this,r=!n.STATE.ENRICHED;this.loadComponent(\"a11y/\"+e,(function(){var o=f.startup;T.mathjax.handlers.unregister(o.handler),o.handler=o.getHandler(),T.mathjax.handlers.register(o.handler);var i=Q.document;Q.document=o.document=o.getDocument(),Q.document.menu=Q,Q.transferMathList(i),Q.document.processed=i.processed,t._loadingPromise||Q.rerender(\"complexity\"===e||r?n.STATE.COMPILED:n.STATE.TYPESET)}))},t.prototype.transferMathList=function(t){var e,Q,T=this.document.options.MathItem;try{for(var n=r(t.math),o=n.next();!o.done;o=n.next()){var i=o.value,a=new T;Object.assign(a,i),this.document.math.push(a)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}},t.prototype.formatSource=function(t){return t.trim().replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")},t.prototype.toMML=function(t){return this.MmlVisitor.visitTree(t.root,t,{texHints:this.settings.texHints,semantics:this.settings.semantics&&\"MathML\"!==t.inputJax.name})},t.prototype.zoom=function(t,e,Q){t&&!this.isZoomEvent(t,e)||(this.menu.mathItem=Q,t&&this.menu.post(t),this.zoomBox.post())},t.prototype.isZoomEvent=function(t,e){return this.settings.zoom===e&&(!this.settings.alt||t.altKey)&&(!this.settings.ctrl||t.ctrlKey)&&(!this.settings.cmd||t.metaKey)&&(!this.settings.shift||t.shiftKey)},t.prototype.rerender=function(e){void 0===e&&(e=n.STATE.TYPESET),this.rerenderStart=Math.min(e,this.rerenderStart),t.loading||(this.document.rerender(this.rerenderStart),this.rerenderStart=n.STATE.LAST)},t.prototype.copyMathML=function(){this.copyToClipboard(this.toMML(this.menu.mathItem))},t.prototype.copyOriginal=function(){this.copyToClipboard(this.menu.mathItem.math)},t.prototype.copyAnnotation=function(){this.copyToClipboard(this.menu.annotation)},t.prototype.copyToClipboard=function(t){var e=document.createElement(\"textarea\");e.value=t,e.setAttribute(\"readonly\",\"\"),e.style.cssText=\"height: 1px; width: 1px; padding: 1px; position: absolute; left: -10px\",document.body.appendChild(e),e.select();try{document.execCommand(\"copy\")}catch(t){alert(\"Can't copy to clipboard: \"+t.message)}document.body.removeChild(e)},t.prototype.addMenu=function(t){var e=this,Q=t.typesetRoot;Q.addEventListener(\"contextmenu\",(function(){return e.menu.mathItem=t}),!0),Q.addEventListener(\"keydown\",(function(){return e.menu.mathItem=t}),!0),Q.addEventListener(\"click\",(function(Q){return e.zoom(Q,\"Click\",t)}),!0),Q.addEventListener(\"dblclick\",(function(Q){return e.zoom(Q,\"DoubleClick\",t)}),!0),this.menu.store.insert(Q)},t.prototype.clear=function(){this.menu.store.clear()},t.prototype.variable=function(t,e){var Q=this;return{name:t,getter:function(){return Q.settings[t]},setter:function(r){Q.settings[t]=r,e&&e(r),Q.saveUserSettings()}}},t.prototype.a11yVar=function(t){var e=this;return{name:t,getter:function(){return e.getA11y(t)},setter:function(Q){e.settings[t]=Q;var r={};r[t]=Q,e.setA11y(r),e.saveUserSettings()}}},t.prototype.submenu=function(t,e,Q,T){var n,o;void 0===Q&&(Q=[]),void 0===T&&(T=!1);var i=[];try{for(var a=r(Q),s=a.next();!s.done;s=a.next()){var l=s.value;Array.isArray(l)?i=i.concat(l):i.push(l)}}catch(t){n={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}return{type:\"submenu\",id:t,content:e,menu:{items:i},disabled:0===i.length||T}},t.prototype.command=function(t,e,Q,r){return void 0===r&&(r={}),Object.assign({type:\"command\",id:t,content:e,action:Q},r)},t.prototype.checkbox=function(t,e,Q,r){return void 0===r&&(r={}),Object.assign({type:\"checkbox\",id:t,content:e,variable:Q},r)},t.prototype.radioGroup=function(t,e){var Q=this;return e.map((function(e){return Q.radio(e[0],e[1]||e[0],t)}))},t.prototype.radio=function(t,e,Q,r){return void 0===r&&(r={}),Object.assign({type:\"radio\",id:t,content:e,variable:Q},r)},t.prototype.label=function(t,e){return{type:\"label\",id:t,content:e}},t.prototype.rule=function(){return{type:\"rule\"}},t.MENU_STORAGE=\"MathJax-Menu-Settings\",t.OPTIONS={settings:{texHints:!0,semantics:!1,zoom:\"NoZoom\",zscale:\"200%\",renderer:\"CHTML\",alt:!1,cmd:!1,ctrl:!1,shift:!1,scale:1,autocollapse:!1,collapsible:!1,inTabOrder:!0,assistiveMml:!0,explorer:!1},jax:{CHTML:null,SVG:null},annotationTypes:i.expandable({TeX:[\"TeX\",\"LaTeX\",\"application/x-tex\"],StarMath:[\"StarMath 5.0\"],Maple:[\"Maple\"],ContentMathML:[\"MathML-Content\",\"application/mathml-content+xml\"],OpenMath:[\"OpenMath\"]})},t.loading=0,t.loadingPromises=new Map,t._loadingPromise=null,t._loadingOK=null,t._loadingFailed=null,t}();e.Menu=L},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.MmlVisitor=void 0;var n=Q(83),o=Q(7),i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.options={texHints:!0,semantics:!1},e.mathItem=null,e}return T(e,t),e.prototype.visitTree=function(t,e,Q){return void 0===e&&(e=null),void 0===Q&&(Q={}),this.mathItem=e,o.userOptions(this.options,Q),this.visitNode(t,\"\")},e.prototype.visitTeXAtomNode=function(e,Q){return this.options.texHints?t.prototype.visitTeXAtomNode.call(this,e,Q):e.childNodes[0]&&1===e.childNodes[0].childNodes.length?this.visitNode(e.childNodes[0],Q):Q+\"<mrow\"+this.getAttributes(e)+\">\\n\"+this.childNodeMml(e,Q+\"  \",\"\\n\")+Q+\"</mrow>\"},e.prototype.visitMathNode=function(e,Q){if(!this.options.semantics||\"TeX\"!==this.mathItem.inputJax.name)return t.prototype.visitDefault.call(this,e,Q);var r=e.childNodes.length&&e.childNodes[0].childNodes.length>1;return Q+\"<math\"+this.getAttributes(e)+\">\\n\"+Q+\"  <semantics>\\n\"+(r?Q+\"    <mrow>\\n\":\"\")+this.childNodeMml(e,Q+(r?\"      \":\"    \"),\"\\n\")+(r?Q+\"    </mrow>\\n\":\"\")+Q+'    <annotation encoding=\"application/x-tex\">'+this.mathItem.math+\"</annotation>\\n\"+Q+\"  </semantics>\\n\"+Q+\"</math>\"},e}(n.SerializedMmlVisitor);e.MmlVisitor=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SelectableInfo=void 0;var n=Q(104),o=Q(10),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.addEvents=function(t){var e=this;t.addEventListener(\"keypress\",(function(t){\"a\"===t.key&&(t.ctrlKey||t.metaKey)&&(e.selectAll(),e.stop(t))}))},e.prototype.selectAll=function(){document.getSelection().selectAllChildren(this.html.querySelector(\"pre\"))},e.prototype.copyToClipboard=function(){this.selectAll();try{document.execCommand(\"copy\")}catch(t){alert(\"Can't copy to clipboard: \"+t.message)}document.getSelection().removeAllRanges()},e.prototype.generateHtml=function(){var e=this;t.prototype.generateHtml.call(this);var Q=this.html.querySelector(\"span.\"+o.HtmlClasses.INFOSIGNATURE).appendChild(document.createElement(\"input\"));Q.type=\"button\",Q.value=\"Copy to Clipboard\",Q.addEventListener(\"click\",(function(t){return e.copyToClipboard()}))},e}(n.Info);e.SelectableInfo=i},function(t,e){var Q;Q=function(){return this}();try{Q=Q||new Function(\"return this\")()}catch(t){\"object\"==typeof window&&(Q=window)}t.exports=Q},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),Q(19).add({NJcy:\"\\u040a\",Nacute:\"\\u0143\",Ncaron:\"\\u0147\",Ncedil:\"\\u0145\",Ncy:\"\\u041d\",NegativeMediumSpace:\"\\u200b\",NegativeThickSpace:\"\\u200b\",NegativeThinSpace:\"\\u200b\",NegativeVeryThinSpace:\"\\u200b\",NewLine:\"\\n\",NoBreak:\"\\u2060\",NonBreakingSpace:\"\\xa0\",Not:\"\\u2aec\",NotCongruent:\"\\u2262\",NotCupCap:\"\\u226d\",NotEqualTilde:\"\\u2242\\u0338\",NotGreaterFullEqual:\"\\u2267\\u0338\",NotGreaterGreater:\"\\u226b\\u0338\",NotGreaterLess:\"\\u2279\",NotGreaterSlantEqual:\"\\u2a7e\\u0338\",NotGreaterTilde:\"\\u2275\",NotHumpDownHump:\"\\u224e\\u0338\",NotHumpEqual:\"\\u224f\\u0338\",NotLeftTriangleBar:\"\\u29cf\\u0338\",NotLessGreater:\"\\u2278\",NotLessLess:\"\\u226a\\u0338\",NotLessSlantEqual:\"\\u2a7d\\u0338\",NotLessTilde:\"\\u2274\",NotNestedGreaterGreater:\"\\u2aa2\\u0338\",NotNestedLessLess:\"\\u2aa1\\u0338\",NotPrecedesEqual:\"\\u2aaf\\u0338\",NotReverseElement:\"\\u220c\",NotRightTriangleBar:\"\\u29d0\\u0338\",NotSquareSubset:\"\\u228f\\u0338\",NotSquareSubsetEqual:\"\\u22e2\",NotSquareSuperset:\"\\u2290\\u0338\",NotSquareSupersetEqual:\"\\u22e3\",NotSubset:\"\\u2282\\u20d2\",NotSucceedsEqual:\"\\u2ab0\\u0338\",NotSucceedsTilde:\"\\u227f\\u0338\",NotSuperset:\"\\u2283\\u20d2\",NotTildeEqual:\"\\u2244\",NotTildeFullEqual:\"\\u2247\",NotTildeTilde:\"\\u2249\",Ntilde:\"\\xd1\",Nu:\"\\u039d\",nGg:\"\\u22d9\\u0338\",nGt:\"\\u226b\\u20d2\",nGtv:\"\\u226b\\u0338\",nLl:\"\\u22d8\\u0338\",nLt:\"\\u226a\\u20d2\",nLtv:\"\\u226a\\u0338\",nabla:\"\\u2207\",nacute:\"\\u0144\",nang:\"\\u2220\\u20d2\",nap:\"\\u2249\",napE:\"\\u2a70\\u0338\",napid:\"\\u224b\\u0338\",napos:\"\\u0149\",napprox:\"\\u2249\",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\",nearrow:\"\\u2197\",nedot:\"\\u2250\\u0338\",nequiv:\"\\u2262\",nesear:\"\\u2928\",nesim:\"\\u2242\\u0338\",nexist:\"\\u2204\",nexists:\"\\u2204\",ngE:\"\\u2267\\u0338\",nge:\"\\u2271\",ngeq:\"\\u2271\",ngeqq:\"\\u2267\\u0338\",ngeqslant:\"\\u2a7e\\u0338\",nges:\"\\u2a7e\\u0338\",ngsim:\"\\u2275\",ngt:\"\\u226f\",ngtr:\"\\u226f\",nhArr:\"\\u21ce\",nhpar:\"\\u2af2\",ni:\"\\u220b\",nis:\"\\u22fc\",nisd:\"\\u22fa\",niv:\"\\u220b\",njcy:\"\\u045a\",nlArr:\"\\u21cd\",nlE:\"\\u2266\\u0338\",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\",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\",nrarrc:\"\\u2933\\u0338\",nrarrw:\"\\u219d\\u0338\",nrightarrow:\"\\u219b\",nrtri:\"\\u22eb\",nrtrie:\"\\u22ed\",nsc:\"\\u2281\",nsccue:\"\\u22e1\",nsce:\"\\u2ab0\\u0338\",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\",num:\"#\",numero:\"\\u2116\",numsp:\"\\u2007\",nvHarr:\"\\u2904\",nvap:\"\\u224d\\u20d2\",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\",nwarrow:\"\\u2196\",nwnear:\"\\u2927\"},\"n\")},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.ContextMenu=void 0;var n=Q(101),o=Q(10),i=Q(298),a=Q(299),s=function(t){function e(e){var Q=t.call(this)||this;return Q.factory=e,Q.id=\"\",Q.moving=!1,Q._store=new i.MenuStore(Q),Q.widgets=[],Q.variablePool=new a.VariablePool,Q}return T(e,t),e.fromJson=function(t,e){var Q=e.pool,r=e.items,T=e.id,n=void 0===T?\"\":T,o=new this(t);o.id=n;var i=t.get(\"variable\");Q.forEach((function(e){return i(t,e,o.pool)}));var a=t.get(\"items\")(t,r,o);return o.items=a,o},e.prototype.generateHtml=function(){this.isPosted()&&this.unpost(),t.prototype.generateHtml.call(this),this._frame=document.createElement(\"div\"),this._frame.classList.add(o.HtmlClasses.MENUFRAME);var e=\"left: 0px; top: 0px; z-index: 200; width: 100%; height: 100%; border: 0px; padding: 0px; margin: 0px;\";this._frame.setAttribute(\"style\",\"position: absolute; \"+e);var Q=document.createElement(\"div\");Q.setAttribute(\"style\",\"position: fixed; \"+e),this._frame.appendChild(Q),Q.addEventListener(\"mousedown\",function(t){this.unpost(),this.unpostWidgets(),this.stop(t)}.bind(this))},e.prototype.display=function(){document.body.appendChild(this.frame),this.frame.appendChild(this.html),this.focus()},e.prototype.escape=function(t){this.unpost(),this.unpostWidgets()},e.prototype.unpost=function(){if(t.prototype.unpost.call(this),!(this.widgets.length>0)){this.frame.parentNode.removeChild(this.frame);var e=this.store;this.moving||e.insertTaborder(),e.active.focus()}},e.prototype.left=function(t){this.move_(this.store.previous())},e.prototype.right=function(t){this.move_(this.store.next())},Object.defineProperty(e.prototype,\"frame\",{get:function(){return this._frame},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"store\",{get:function(){return this._store},enumerable:!1,configurable:!0}),e.prototype.post=function(e,Q){if(void 0!==Q)return this.moving||this.store.removeTaborder(),void t.prototype.post.call(this,e,Q);var r,T,n,o=e;if(o instanceof Event?(r=o.target,this.stop(o)):r=o,o instanceof MouseEvent&&(T=o.pageX,n=o.pageY,T||n||!o.clientX||(T=o.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,n=o.clientY+document.body.scrollTop+document.documentElement.scrollTop)),!T&&!n&&r){var i=window.pageXOffset||document.documentElement.scrollLeft,a=window.pageYOffset||document.documentElement.scrollTop,s=r.getBoundingClientRect();T=(s.right+s.left)/2+i,n=(s.bottom+s.top)/2+a}this.store.active=r,this.anchor=this.store.active;var l=this.html;T+l.offsetWidth>document.body.offsetWidth-5&&(T=document.body.offsetWidth-l.offsetWidth-5),this.post(T,n)},e.prototype.registerWidget=function(t){this.widgets.push(t)},e.prototype.unregisterWidget=function(t){var e=this.widgets.indexOf(t);e>-1&&this.widgets.splice(e,1),0===this.widgets.length&&this.unpost()},e.prototype.unpostWidgets=function(){this.widgets.forEach((function(t){return t.unpost()}))},e.prototype.toJson=function(){return{type:\"\"}},e.prototype.move_=function(t){this.anchor&&t!==this.anchor&&(this.moving=!0,this.unpost(),this.post(t),this.moving=!1)},e}(n.AbstractMenu);e.ContextMenu=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.MenuElement=void 0;var n=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.addAttributes=function(t){for(var e in t)this.html.setAttribute(e,t[e])},Object.defineProperty(e.prototype,\"html\",{get:function(){return this._html||this.generateHtml(),this._html},set:function(t){this._html=t,this.addEvents(t)},enumerable:!1,configurable:!0}),e.prototype.generateHtml=function(){var t=document.createElement(\"div\");t.classList.add(this.className),t.setAttribute(\"role\",this.role),this.html=t},e.prototype.focus=function(){var t=this.html;t.setAttribute(\"tabindex\",\"0\"),t.focus()},e.prototype.unfocus=function(){var t=this.html;t.hasAttribute(\"tabindex\")&&t.setAttribute(\"tabindex\",\"-1\");try{t.blur()}catch(t){}t.blur()},e}(Q(296).AbstractNavigatable);e.MenuElement=n},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractEntry=void 0;var n=Q(274),o=Q(10),i=function(t){function e(e,Q){var r=t.call(this)||this;return r._menu=e,r._type=Q,r.className=o.HtmlClasses.MENUITEM,r.role=\"menuitem\",r.hidden=!1,r}return T(e,t),Object.defineProperty(e.prototype,\"menu\",{get:function(){return this._menu},set:function(t){this._menu=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"type\",{get:function(){return this._type},enumerable:!1,configurable:!0}),e.prototype.hide=function(){this.hidden=!0,this.menu.generateMenu()},e.prototype.show=function(){this.hidden=!1,this.menu.generateMenu()},e.prototype.isHidden=function(){return this.hidden},e}(n.MenuElement);e.AbstractEntry=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Rule=void 0;var n=Q(275),o=Q(10),i=function(t){function e(e){var Q=t.call(this,e,\"rule\")||this;return Q.className=o.HtmlClasses.MENUITEM,Q.role=\"separator\",Q}return T(e,t),e.fromJson=function(t,e,Q){return new this(Q)},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this);var e=this.html;e.classList.add(o.HtmlClasses.MENURULE),e.setAttribute(\"aria-orientation\",\"vertical\")},e.prototype.addEvents=function(t){},e.prototype.toJson=function(){return{type:\"rule\"}},e}(n.AbstractEntry);e.Rule=i},function(t,e,Q){\"use strict\";(function(t){var r=this&&this.__assign||function(){return(r=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},T=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CONFIG=e.MathJax=e.Startup=void 0;var n,o=Q(1),i=Q(21);!function(Q){var n,o,s=new i.PrioritizedList;function l(t){return n.visitTree(t,Q.document)}function c(){n=new e.MathJax._.core.MmlTree.SerializedMmlVisitor.SerializedMmlVisitor,o=e.MathJax._.mathjax.mathjax,Q.input=L(),Q.output=H(),Q.adaptor=m(),Q.handler&&o.handlers.unregister(Q.handler),Q.handler=y(),Q.handler&&(o.handlers.register(Q.handler),Q.document=v())}function u(){var t,e;Q.input&&Q.output&&p();var r=Q.output?Q.output.name.toLowerCase():\"\";try{for(var n=T(Q.input),o=n.next();!o.done;o=n.next()){var i=o.value,a=i.name.toLowerCase();f(a,i),d(a,i),Q.output&&h(a,r,i)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}}function p(){e.MathJax.typeset=function(t){void 0===t&&(t=null),Q.document.options.elements=t,Q.document.reset(),Q.document.render()},e.MathJax.typesetPromise=function(t){return void 0===t&&(t=null),Q.document.options.elements=t,Q.document.reset(),o.handleRetriesFor((function(){Q.document.render()}))},e.MathJax.typesetClear=function(t){void 0===t&&(t=null),t?Q.document.clearMathItemsWithin(t):Q.document.clear()}}function h(t,r,T){var n=t+\"2\"+r;e.MathJax[n]=function(t,e){return void 0===e&&(e={}),e.format=T.name,Q.document.convert(t,e)},e.MathJax[n+\"Promise\"]=function(t,e){return void 0===e&&(e={}),e.format=T.name,o.handleRetriesFor((function(){return Q.document.convert(t,e)}))},e.MathJax[r+\"Stylesheet\"]=function(){return Q.output.styleSheet(Q.document)},\"getMetricsFor\"in Q.output&&(e.MathJax.getMetricsFor=function(t,e){return Q.output.getMetricsFor(t,e)})}function f(t,r){var T=e.MathJax._.core.MathItem.STATE;e.MathJax[t+\"2mml\"]=function(t,e){return void 0===e&&(e={}),e.end=T.CONVERT,e.format=r.name,l(Q.document.convert(t,e))},e.MathJax[t+\"2mmlPromise\"]=function(t,e){return void 0===e&&(e={}),e.end=T.CONVERT,e.format=r.name,o.handleRetriesFor((function(){return l(Q.document.convert(t,e))}))}}function d(t,Q){\"tex\"===t&&(e.MathJax.texReset=function(t){return void 0===t&&(t=0),Q.parseOptions.tags.reset(t)})}function L(){var t,r,n=[];try{for(var o=T(e.CONFIG.input),i=o.next();!i.done;i=o.next()){var a=i.value,s=Q.constructors[a];if(!s)throw Error('Input Jax \"'+a+'\" is not defined (has it been loaded?)');n.push(new s(e.MathJax.config[a]))}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n}function H(){var t=e.CONFIG.output;if(!t)return null;var r=Q.constructors[t];if(!r)throw Error('Output Jax \"'+t+'\" is not defined (has it been loaded?)');return new r(e.MathJax.config[t])}function m(){var t=e.CONFIG.adaptor;if(!t||\"none\"===t)return null;var r=Q.constructors[t];if(!r)throw Error('DOMAdaptor \"'+t+'\" is not defined (has it been loaded?)');return r(e.MathJax.config[t])}function y(){var t,r,n=e.CONFIG.handler;if(!n||\"none\"===n||!Q.adaptor)return null;var o=Q.constructors[n];if(!o)throw Error('Handler \"'+n+'\" is not defined (has it been loaded?)');var i=new o(Q.adaptor,5);try{for(var a=T(s),l=a.next();!l.done;l=a.next()){i=l.value.item(i)}}catch(e){t={error:e}}finally{try{l&&!l.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return i}function v(t){return void 0===t&&(t=null),o.document(t||e.CONFIG.document,r(r({},e.MathJax.config.options),{InputJax:Q.input,OutputJax:Q.output}))}Q.constructors={},Q.input=[],Q.output=null,Q.handler=null,Q.adaptor=null,Q.elements=null,Q.document=null,Q.promise=new Promise((function(t,e){Q.promiseResolve=t,Q.promiseReject=e})),Q.pagePromise=new Promise((function(e,Q){var r=t.document;if(r&&r.readyState&&\"complete\"!==r.readyState&&\"interactive\"!==r.readyState){var T=function(){return e()};r.defaultView.addEventListener(\"load\",T,!0),r.defaultView.addEventListener(\"DOMContentLoaded\",T,!0)}else e()})),Q.toMML=l,Q.registerConstructor=function(t,e){Q.constructors[t]=e},Q.useHandler=function(t,Q){void 0===Q&&(Q=!1),e.CONFIG.handler&&!Q||(e.CONFIG.handler=t)},Q.useAdaptor=function(t,Q){void 0===Q&&(Q=!1),e.CONFIG.adaptor&&!Q||(e.CONFIG.adaptor=t)},Q.useInput=function(t,Q){void 0===Q&&(Q=!1),a&&!Q||e.CONFIG.input.push(t)},Q.useOutput=function(t,Q){void 0===Q&&(Q=!1),e.CONFIG.output&&!Q||(e.CONFIG.output=t)},Q.extendHandler=function(t,e){void 0===e&&(e=10),s.add(t,e)},Q.defaultReady=function(){c(),u(),Q.pagePromise.then((function(){return e.CONFIG.pageReady()})).then((function(){return Q.promiseResolve()})).catch((function(t){return Q.promiseReject(t)}))},Q.defaultPageReady=function(){return e.CONFIG.typeset&&e.MathJax.typesetPromise?e.MathJax.typesetPromise(e.CONFIG.elements):Promise.resolve()},Q.getComponents=c,Q.makeMethods=u,Q.makeTypesetMethods=p,Q.makeOutputMethods=h,Q.makeMmlMethods=f,Q.makeResetMethod=d,Q.getInputJax=L,Q.getOutputJax=H,Q.getAdaptor=m,Q.getHandler=y,Q.getDocument=v}(n=e.Startup||(e.Startup={})),e.MathJax=o.MathJax,void 0===e.MathJax._.startup&&(o.combineDefaults(e.MathJax.config,\"startup\",{input:[],output:\"\",handler:null,adaptor:null,document:\"undefined\"==typeof document?\"\":document,elements:null,typeset:!0,ready:n.defaultReady.bind(n),pageReady:n.defaultPageReady.bind(n)}),o.combineWithMathJax({startup:n,options:{}})),e.CONFIG=e.MathJax.config.startup;var a=0!==e.CONFIG.input.length}).call(this,Q(271))},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MathMLVisitor=void 0;var o=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.document=null,e}return T(e,t),e.prototype.visitTree=function(t,e){this.document=e;var Q=e.createElement(\"top\");return this.visitNode(t,Q),this.document=null,Q.firstChild},e.prototype.visitTextNode=function(t,e){e.appendChild(this.document.createTextNode(t.getText()))},e.prototype.visitXMLNode=function(t,e){e.appendChild(t.getXML().cloneNode(!0))},e.prototype.visitInferredMrowNode=function(t,e){var Q,r;try{for(var T=n(t.childNodes),o=T.next();!o.done;o=T.next()){var i=o.value;this.visitNode(i,e)}}catch(t){Q={error:t}}finally{try{o&&!o.done&&(r=T.return)&&r.call(T)}finally{if(Q)throw Q.error}}},e.prototype.visitDefault=function(t,e){var Q,r,T=this.document.createElement(t.kind);this.addAttributes(t,T);try{for(var o=n(t.childNodes),i=o.next();!i.done;i=o.next()){var a=i.value;this.visitNode(a,T)}}catch(t){Q={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(Q)throw Q.error}}e.appendChild(T)},e.prototype.addAttributes=function(t,e){var Q,r,T=t.attributes,o=T.getExplicitNames();try{for(var i=n(o),a=i.next();!a.done;a=i.next()){var s=a.value;e.setAttribute(s,T.getExplicit(s).toString())}}catch(t){Q={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(Q)throw Q.error}}},e}(Q(82).MmlVisitor);e.MathMLVisitor=o},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RegisterHTMLHandler=void 0;var r=Q(25),T=Q(49);e.RegisterHTMLHandler=function(t){var e=new T.HTMLHandler(t);return r.mathjax.handlers.register(e),e}},function(t,e,Q){\"use strict\";var r=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},T=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutoloadConfiguration=void 0;var n=Q(2),o=Q(3),i=Q(26),a=Q(91),s=Q(29),l=Q(7);function c(t,e,Q,n){var o,i,l,c;if(s.Package.packages.has(t.options.require.prefix+Q)){var h=t.options.autoload[Q],f=r(2===h.length&&Array.isArray(h[0])?h:[h,[]],2),d=f[0],L=f[1];try{for(var H=T(d),m=H.next();!m.done;m=H.next()){var y=m.value;u.remove(y)}}catch(t){o={error:t}}finally{try{m&&!m.done&&(i=H.return)&&i.call(H)}finally{if(o)throw o.error}}try{for(var v=T(L),g=v.next();!g.done;g=v.next()){var b=g.value;p.remove(b)}}catch(t){l={error:t}}finally{try{g&&!g.done&&(c=v.return)&&c.call(v)}finally{if(l)throw l.error}}t.string=(n?e:\"\\\\begin{\"+e.slice(1)+\"}\")+t.string.slice(t.i),t.i=0}a.RequireLoad(t,Q)}var u=new o.CommandMap(\"autoload-macros\",{},{}),p=new o.CommandMap(\"autoload-environments\",{},{});e.AutoloadConfiguration=n.Configuration.create(\"autoload\",{handler:{macro:[\"autoload-macros\"],environment:[\"autoload-environments\"]},options:{autoload:l.expandable({action:[\"toggle\",\"mathtip\",\"texttip\"],amscd:[[],[\"CD\"]],bbox:[\"bbox\"],boldsymbol:[\"boldsymbol\"],braket:[\"bra\",\"ket\",\"braket\",\"set\",\"Bra\",\"Ket\",\"Braket\",\"Set\",\"ketbra\",\"Ketbra\"],bussproofs:[[],[\"prooftree\"]],cancel:[\"cancel\",\"bcancel\",\"xcancel\",\"cancelto\"],color:[\"color\",\"definecolor\",\"textcolor\",\"colorbox\",\"fcolorbox\"],enclose:[\"enclose\"],extpfeil:[\"xtwoheadrightarrow\",\"xtwoheadleftarrow\",\"xmapsto\",\"xlongequal\",\"xtofrom\",\"Newextarrow\"],html:[\"href\",\"class\",\"style\",\"cssId\"],mhchem:[\"ce\",\"pu\"],newcommand:[\"newcommand\",\"renewcommand\",\"newenvironment\",\"renewenvironment\",\"def\",\"let\"],unicode:[\"unicode\"],verb:[\"verb\"]})},config:function(t,e){var Q,n,o,s,l,h,f=e.parseOptions,d=f.handlers.get(\"macro\"),L=f.handlers.get(\"environment\"),H=f.options.autoload;f.packageData.set(\"autoload\",{Autoload:c});try{for(var m=T(Object.keys(H)),y=m.next();!y.done;y=m.next()){var v=y.value,g=H[v],b=r(2===g.length&&Array.isArray(g[0])?g:[g,[]],2),M=b[0],V=b[1];try{for(var x=(o=void 0,T(M)),O=x.next();!O.done;O=x.next()){var _=O.value;d.lookup(_)&&\"color\"!==_||u.add(_,new i.Macro(_,c,[v,!0]))}}catch(t){o={error:t}}finally{try{O&&!O.done&&(s=x.return)&&s.call(x)}finally{if(o)throw o.error}}try{for(var S=(l=void 0,T(V)),E=S.next();!E.done;E=S.next()){var C=E.value;L.lookup(C)||p.add(C,new i.Macro(C,c,[v,!1]))}}catch(t){l={error:t}}finally{try{E&&!E.done&&(h=S.return)&&h.call(S)}finally{if(l)throw l.error}}}}catch(t){Q={error:t}}finally{try{y&&!y.done&&(n=m.return)&&n.call(m)}finally{if(Q)throw Q.error}}f.packageData.get(\"require\")||a.RequireConfiguration.config(t,e)},init:function(t){t.options.require||l.defaultOptions(t.options,a.RequireConfiguration.options)},priority:10})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(3),T=Q(13),n=Q(16),o=Q(23),i=Q(0);new r.RegExpMap(\"letter\",o.default.variable,/[a-z]/i),new r.RegExpMap(\"digit\",o.default.digit,/[0-9.,]/),new r.RegExpMap(\"command\",o.default.controlSequence,/^\\\\/),new r.MacroMap(\"special\",{\"{\":\"Open\",\"}\":\"Close\",\"~\":\"Tilde\",\"^\":\"Superscript\",_:\"Subscript\",\" \":\"Space\",\"\\t\":\"Space\",\"\\r\":\"Space\",\"\\n\":\"Space\",\"'\":\"Prime\",\"%\":\"Comment\",\"&\":\"Entry\",\"#\":\"Hash\",\"\\xa0\":\"Space\",\"\\u2019\":\"Prime\"},n.default),new r.CharacterMap(\"mathchar0mi\",o.default.mathchar0mi,{alpha:\"\\u03b1\",beta:\"\\u03b2\",gamma:\"\\u03b3\",delta:\"\\u03b4\",epsilon:\"\\u03f5\",zeta:\"\\u03b6\",eta:\"\\u03b7\",theta:\"\\u03b8\",iota:\"\\u03b9\",kappa:\"\\u03ba\",lambda:\"\\u03bb\",mu:\"\\u03bc\",nu:\"\\u03bd\",xi:\"\\u03be\",omicron:\"\\u03bf\",pi:\"\\u03c0\",rho:\"\\u03c1\",sigma:\"\\u03c3\",tau:\"\\u03c4\",upsilon:\"\\u03c5\",phi:\"\\u03d5\",chi:\"\\u03c7\",psi:\"\\u03c8\",omega:\"\\u03c9\",varepsilon:\"\\u03b5\",vartheta:\"\\u03d1\",varpi:\"\\u03d6\",varrho:\"\\u03f1\",varsigma:\"\\u03c2\",varphi:\"\\u03c6\",S:[\"\\xa7\",{mathvariant:T.TexConstant.Variant.NORMAL}],aleph:[\"\\u2135\",{mathvariant:T.TexConstant.Variant.NORMAL}],hbar:[\"\\u210f\",{variantForm:!0}],imath:\"\\u0131\",jmath:\"\\u0237\",ell:\"\\u2113\",wp:[\"\\u2118\",{mathvariant:T.TexConstant.Variant.NORMAL}],Re:[\"\\u211c\",{mathvariant:T.TexConstant.Variant.NORMAL}],Im:[\"\\u2111\",{mathvariant:T.TexConstant.Variant.NORMAL}],partial:[\"\\u2202\",{mathvariant:T.TexConstant.Variant.ITALIC}],infty:[\"\\u221e\",{mathvariant:T.TexConstant.Variant.NORMAL}],prime:[\"\\u2032\",{mathvariant:T.TexConstant.Variant.NORMAL,variantForm:!0}],emptyset:[\"\\u2205\",{mathvariant:T.TexConstant.Variant.NORMAL}],nabla:[\"\\u2207\",{mathvariant:T.TexConstant.Variant.NORMAL}],top:[\"\\u22a4\",{mathvariant:T.TexConstant.Variant.NORMAL}],bot:[\"\\u22a5\",{mathvariant:T.TexConstant.Variant.NORMAL}],angle:[\"\\u2220\",{mathvariant:T.TexConstant.Variant.NORMAL}],triangle:[\"\\u25b3\",{mathvariant:T.TexConstant.Variant.NORMAL}],backslash:[\"\\u2216\",{mathvariant:T.TexConstant.Variant.NORMAL,variantForm:!0}],forall:[\"\\u2200\",{mathvariant:T.TexConstant.Variant.NORMAL}],exists:[\"\\u2203\",{mathvariant:T.TexConstant.Variant.NORMAL}],neg:[\"\\xac\",{mathvariant:T.TexConstant.Variant.NORMAL}],lnot:[\"\\xac\",{mathvariant:T.TexConstant.Variant.NORMAL}],flat:[\"\\u266d\",{mathvariant:T.TexConstant.Variant.NORMAL}],natural:[\"\\u266e\",{mathvariant:T.TexConstant.Variant.NORMAL}],sharp:[\"\\u266f\",{mathvariant:T.TexConstant.Variant.NORMAL}],clubsuit:[\"\\u2663\",{mathvariant:T.TexConstant.Variant.NORMAL}],diamondsuit:[\"\\u2662\",{mathvariant:T.TexConstant.Variant.NORMAL}],heartsuit:[\"\\u2661\",{mathvariant:T.TexConstant.Variant.NORMAL}],spadesuit:[\"\\u2660\",{mathvariant:T.TexConstant.Variant.NORMAL}]}),new r.CharacterMap(\"mathchar0mo\",o.default.mathchar0mo,{surd:\"\\u221a\",coprod:[\"\\u2210\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],bigvee:[\"\\u22c1\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],bigwedge:[\"\\u22c0\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],biguplus:[\"\\u2a04\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],bigcap:[\"\\u22c2\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],bigcup:[\"\\u22c3\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],int:[\"\\u222b\",{texClass:i.TEXCLASS.OP}],intop:[\"\\u222b\",{texClass:i.TEXCLASS.OP,movesupsub:!0,movablelimits:!0}],iint:[\"\\u222c\",{texClass:i.TEXCLASS.OP}],iiint:[\"\\u222d\",{texClass:i.TEXCLASS.OP}],prod:[\"\\u220f\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],sum:[\"\\u2211\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],bigotimes:[\"\\u2a02\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],bigoplus:[\"\\u2a01\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],bigodot:[\"\\u2a00\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],oint:[\"\\u222e\",{texClass:i.TEXCLASS.OP}],bigsqcup:[\"\\u2a06\",{texClass:i.TEXCLASS.OP,movesupsub:!0}],smallint:[\"\\u222b\",{largeop:!1}],triangleleft:\"\\u25c3\",triangleright:\"\\u25b9\",bigtriangleup:\"\\u25b3\",bigtriangledown:\"\\u25bd\",wedge:\"\\u2227\",land:\"\\u2227\",vee:\"\\u2228\",lor:\"\\u2228\",cap:\"\\u2229\",cup:\"\\u222a\",ddagger:\"\\u2021\",dagger:\"\\u2020\",sqcap:\"\\u2293\",sqcup:\"\\u2294\",uplus:\"\\u228e\",amalg:\"\\u2a3f\",diamond:\"\\u22c4\",bullet:\"\\u2219\",wr:\"\\u2240\",div:\"\\xf7\",odot:[\"\\u2299\",{largeop:!1}],oslash:[\"\\u2298\",{largeop:!1}],otimes:[\"\\u2297\",{largeop:!1}],ominus:[\"\\u2296\",{largeop:!1}],oplus:[\"\\u2295\",{largeop:!1}],mp:\"\\u2213\",pm:\"\\xb1\",circ:\"\\u2218\",bigcirc:\"\\u25ef\",setminus:\"\\u2216\",cdot:\"\\u22c5\",ast:\"\\u2217\",times:\"\\xd7\",star:\"\\u22c6\",propto:\"\\u221d\",sqsubseteq:\"\\u2291\",sqsupseteq:\"\\u2292\",parallel:\"\\u2225\",mid:\"\\u2223\",dashv:\"\\u22a3\",vdash:\"\\u22a2\",leq:\"\\u2264\",le:\"\\u2264\",geq:\"\\u2265\",ge:\"\\u2265\",lt:\"<\",gt:\">\",succ:\"\\u227b\",prec:\"\\u227a\",approx:\"\\u2248\",succeq:\"\\u2ab0\",preceq:\"\\u2aaf\",supset:\"\\u2283\",subset:\"\\u2282\",supseteq:\"\\u2287\",subseteq:\"\\u2286\",in:\"\\u2208\",ni:\"\\u220b\",notin:\"\\u2209\",owns:\"\\u220b\",gg:\"\\u226b\",ll:\"\\u226a\",sim:\"\\u223c\",simeq:\"\\u2243\",perp:\"\\u22a5\",equiv:\"\\u2261\",asymp:\"\\u224d\",smile:\"\\u2323\",frown:\"\\u2322\",ne:\"\\u2260\",neq:\"\\u2260\",cong:\"\\u2245\",doteq:\"\\u2250\",bowtie:\"\\u22c8\",models:\"\\u22a8\",notChar:\"\\u29f8\",Leftrightarrow:\"\\u21d4\",Leftarrow:\"\\u21d0\",Rightarrow:\"\\u21d2\",leftrightarrow:\"\\u2194\",leftarrow:\"\\u2190\",gets:\"\\u2190\",rightarrow:\"\\u2192\",to:[\"\\u2192\",{accent:!1}],mapsto:\"\\u21a6\",leftharpoonup:\"\\u21bc\",leftharpoondown:\"\\u21bd\",rightharpoonup:\"\\u21c0\",rightharpoondown:\"\\u21c1\",nearrow:\"\\u2197\",searrow:\"\\u2198\",nwarrow:\"\\u2196\",swarrow:\"\\u2199\",rightleftharpoons:\"\\u21cc\",hookrightarrow:\"\\u21aa\",hookleftarrow:\"\\u21a9\",longleftarrow:\"\\u27f5\",Longleftarrow:\"\\u27f8\",longrightarrow:\"\\u27f6\",Longrightarrow:\"\\u27f9\",Longleftrightarrow:\"\\u27fa\",longleftrightarrow:\"\\u27f7\",longmapsto:\"\\u27fc\",ldots:\"\\u2026\",cdots:\"\\u22ef\",vdots:\"\\u22ee\",ddots:\"\\u22f1\",dotsc:\"\\u2026\",dotsb:\"\\u22ef\",dotsm:\"\\u22ef\",dotsi:\"\\u22ef\",dotso:\"\\u2026\",ldotp:[\".\",{texClass:i.TEXCLASS.PUNCT}],cdotp:[\"\\u22c5\",{texClass:i.TEXCLASS.PUNCT}],colon:[\":\",{texClass:i.TEXCLASS.PUNCT}]}),new r.CharacterMap(\"mathchar7\",o.default.mathchar7,{Gamma:\"\\u0393\",Delta:\"\\u0394\",Theta:\"\\u0398\",Lambda:\"\\u039b\",Xi:\"\\u039e\",Pi:\"\\u03a0\",Sigma:\"\\u03a3\",Upsilon:\"\\u03a5\",Phi:\"\\u03a6\",Psi:\"\\u03a8\",Omega:\"\\u03a9\",_:\"_\",\"#\":\"#\",$:\"$\",\"%\":\"%\",\"&\":\"&\",And:\"&\"}),new r.DelimiterMap(\"delimiter\",o.default.delimiter,{\"(\":\"(\",\")\":\")\",\"[\":\"[\",\"]\":\"]\",\"<\":\"\\u27e8\",\">\":\"\\u27e9\",\"\\\\lt\":\"\\u27e8\",\"\\\\gt\":\"\\u27e9\",\"/\":\"/\",\"|\":[\"|\",{texClass:i.TEXCLASS.ORD}],\".\":\"\",\"\\\\\\\\\":\"\\\\\",\"\\\\lmoustache\":\"\\u23b0\",\"\\\\rmoustache\":\"\\u23b1\",\"\\\\lgroup\":\"\\u27ee\",\"\\\\rgroup\":\"\\u27ef\",\"\\\\arrowvert\":\"\\u23d0\",\"\\\\Arrowvert\":\"\\u2016\",\"\\\\bracevert\":\"\\u23aa\",\"\\\\Vert\":[\"\\u2225\",{texClass:i.TEXCLASS.ORD}],\"\\\\|\":[\"\\u2225\",{texClass:i.TEXCLASS.ORD}],\"\\\\vert\":[\"|\",{texClass:i.TEXCLASS.ORD}],\"\\\\uparrow\":\"\\u2191\",\"\\\\downarrow\":\"\\u2193\",\"\\\\updownarrow\":\"\\u2195\",\"\\\\Uparrow\":\"\\u21d1\",\"\\\\Downarrow\":\"\\u21d3\",\"\\\\Updownarrow\":\"\\u21d5\",\"\\\\backslash\":\"\\\\\",\"\\\\rangle\":\"\\u27e9\",\"\\\\langle\":\"\\u27e8\",\"\\\\rbrace\":\"}\",\"\\\\lbrace\":\"{\",\"\\\\}\":\"}\",\"\\\\{\":\"{\",\"\\\\rceil\":\"\\u2309\",\"\\\\lceil\":\"\\u2308\",\"\\\\rfloor\":\"\\u230b\",\"\\\\lfloor\":\"\\u230a\",\"\\\\lbrack\":\"[\",\"\\\\rbrack\":\"]\"}),new r.CommandMap(\"macros\",{displaystyle:[\"SetStyle\",\"D\",!0,0],textstyle:[\"SetStyle\",\"T\",!1,0],scriptstyle:[\"SetStyle\",\"S\",!1,1],scriptscriptstyle:[\"SetStyle\",\"SS\",!1,2],rm:[\"SetFont\",T.TexConstant.Variant.NORMAL],mit:[\"SetFont\",T.TexConstant.Variant.ITALIC],oldstyle:[\"SetFont\",T.TexConstant.Variant.OLDSTYLE],cal:[\"SetFont\",T.TexConstant.Variant.CALLIGRAPHIC],it:[\"SetFont\",\"-tex-mathit\"],bf:[\"SetFont\",T.TexConstant.Variant.BOLD],bbFont:[\"SetFont\",T.TexConstant.Variant.DOUBLESTRUCK],scr:[\"SetFont\",T.TexConstant.Variant.SCRIPT],frak:[\"SetFont\",T.TexConstant.Variant.FRAKTUR],sf:[\"SetFont\",T.TexConstant.Variant.SANSSERIF],tt:[\"SetFont\",T.TexConstant.Variant.MONOSPACE],tiny:[\"SetSize\",.5],Tiny:[\"SetSize\",.6],scriptsize:[\"SetSize\",.7],small:[\"SetSize\",.85],normalsize:[\"SetSize\",1],large:[\"SetSize\",1.2],Large:[\"SetSize\",1.44],LARGE:[\"SetSize\",1.73],huge:[\"SetSize\",2.07],Huge:[\"SetSize\",2.49],arcsin:[\"NamedFn\"],arccos:[\"NamedFn\"],arctan:[\"NamedFn\"],arg:[\"NamedFn\"],cos:[\"NamedFn\"],cosh:[\"NamedFn\"],cot:[\"NamedFn\"],coth:[\"NamedFn\"],csc:[\"NamedFn\"],deg:[\"NamedFn\"],det:\"NamedOp\",dim:[\"NamedFn\"],exp:[\"NamedFn\"],gcd:\"NamedOp\",hom:[\"NamedFn\"],inf:\"NamedOp\",ker:[\"NamedFn\"],lg:[\"NamedFn\"],lim:\"NamedOp\",liminf:[\"NamedOp\",\"lim&thinsp;inf\"],limsup:[\"NamedOp\",\"lim&thinsp;sup\"],ln:[\"NamedFn\"],log:[\"NamedFn\"],max:\"NamedOp\",min:\"NamedOp\",Pr:\"NamedOp\",sec:[\"NamedFn\"],sin:[\"NamedFn\"],sinh:[\"NamedFn\"],sup:\"NamedOp\",tan:[\"NamedFn\"],tanh:[\"NamedFn\"],limits:[\"Limits\",1],nolimits:[\"Limits\",0],overline:[\"UnderOver\",\"00AF\",null,1],underline:[\"UnderOver\",\"005F\"],overbrace:[\"UnderOver\",\"23DE\",1],underbrace:[\"UnderOver\",\"23DF\",1],overparen:[\"UnderOver\",\"23DC\"],underparen:[\"UnderOver\",\"23DD\"],overrightarrow:[\"UnderOver\",\"2192\"],underrightarrow:[\"UnderOver\",\"2192\"],overleftarrow:[\"UnderOver\",\"2190\"],underleftarrow:[\"UnderOver\",\"2190\"],overleftrightarrow:[\"UnderOver\",\"2194\"],underleftrightarrow:[\"UnderOver\",\"2194\"],overset:\"Overset\",underset:\"Underset\",stackrel:[\"Macro\",\"\\\\mathrel{\\\\mathop{#2}\\\\limits^{#1}}\",2],over:\"Over\",overwithdelims:\"Over\",atop:\"Over\",atopwithdelims:\"Over\",above:\"Over\",abovewithdelims:\"Over\",brace:[\"Over\",\"{\",\"}\"],brack:[\"Over\",\"[\",\"]\"],choose:[\"Over\",\"(\",\")\"],frac:\"Frac\",sqrt:\"Sqrt\",root:\"Root\",uproot:[\"MoveRoot\",\"upRoot\"],leftroot:[\"MoveRoot\",\"leftRoot\"],left:\"LeftRight\",right:\"LeftRight\",middle:\"Middle\",llap:\"Lap\",rlap:\"Lap\",raise:\"RaiseLower\",lower:\"RaiseLower\",moveleft:\"MoveLeftRight\",moveright:\"MoveLeftRight\",\",\":[\"Spacer\",T.TexConstant.Length.THINMATHSPACE],\":\":[\"Spacer\",T.TexConstant.Length.MEDIUMMATHSPACE],\">\":[\"Spacer\",T.TexConstant.Length.MEDIUMMATHSPACE],\";\":[\"Spacer\",T.TexConstant.Length.THICKMATHSPACE],\"!\":[\"Spacer\",T.TexConstant.Length.NEGATIVETHINMATHSPACE],enspace:[\"Spacer\",\".5em\"],quad:[\"Spacer\",\"1em\"],qquad:[\"Spacer\",\"2em\"],thinspace:[\"Spacer\",T.TexConstant.Length.THINMATHSPACE],negthinspace:[\"Spacer\",T.TexConstant.Length.NEGATIVETHINMATHSPACE],hskip:\"Hskip\",hspace:\"Hskip\",kern:\"Hskip\",mskip:\"Hskip\",mspace:\"Hskip\",mkern:\"Hskip\",rule:\"rule\",Rule:[\"Rule\"],Space:[\"Rule\",\"blank\"],big:[\"MakeBig\",i.TEXCLASS.ORD,.85],Big:[\"MakeBig\",i.TEXCLASS.ORD,1.15],bigg:[\"MakeBig\",i.TEXCLASS.ORD,1.45],Bigg:[\"MakeBig\",i.TEXCLASS.ORD,1.75],bigl:[\"MakeBig\",i.TEXCLASS.OPEN,.85],Bigl:[\"MakeBig\",i.TEXCLASS.OPEN,1.15],biggl:[\"MakeBig\",i.TEXCLASS.OPEN,1.45],Biggl:[\"MakeBig\",i.TEXCLASS.OPEN,1.75],bigr:[\"MakeBig\",i.TEXCLASS.CLOSE,.85],Bigr:[\"MakeBig\",i.TEXCLASS.CLOSE,1.15],biggr:[\"MakeBig\",i.TEXCLASS.CLOSE,1.45],Biggr:[\"MakeBig\",i.TEXCLASS.CLOSE,1.75],bigm:[\"MakeBig\",i.TEXCLASS.REL,.85],Bigm:[\"MakeBig\",i.TEXCLASS.REL,1.15],biggm:[\"MakeBig\",i.TEXCLASS.REL,1.45],Biggm:[\"MakeBig\",i.TEXCLASS.REL,1.75],mathord:[\"TeXAtom\",i.TEXCLASS.ORD],mathop:[\"TeXAtom\",i.TEXCLASS.OP],mathopen:[\"TeXAtom\",i.TEXCLASS.OPEN],mathclose:[\"TeXAtom\",i.TEXCLASS.CLOSE],mathbin:[\"TeXAtom\",i.TEXCLASS.BIN],mathrel:[\"TeXAtom\",i.TEXCLASS.REL],mathpunct:[\"TeXAtom\",i.TEXCLASS.PUNCT],mathinner:[\"TeXAtom\",i.TEXCLASS.INNER],vcenter:[\"TeXAtom\",i.TEXCLASS.VCENTER],buildrel:\"BuildRel\",hbox:[\"HBox\",0],text:\"HBox\",mbox:[\"HBox\",0],fbox:\"FBox\",strut:\"Strut\",mathstrut:[\"Macro\",\"\\\\vphantom{(}\"],phantom:\"Phantom\",vphantom:[\"Phantom\",1,0],hphantom:[\"Phantom\",0,1],smash:\"Smash\",acute:[\"Accent\",\"00B4\"],grave:[\"Accent\",\"0060\"],ddot:[\"Accent\",\"00A8\"],tilde:[\"Accent\",\"007E\"],bar:[\"Accent\",\"00AF\"],breve:[\"Accent\",\"02D8\"],check:[\"Accent\",\"02C7\"],hat:[\"Accent\",\"005E\"],vec:[\"Accent\",\"2192\"],dot:[\"Accent\",\"02D9\"],widetilde:[\"Accent\",\"007E\",1],widehat:[\"Accent\",\"005E\",1],matrix:\"Matrix\",array:\"Matrix\",pmatrix:[\"Matrix\",\"(\",\")\"],cases:[\"Matrix\",\"{\",\"\",\"left left\",null,\".1em\",null,!0],eqalign:[\"Matrix\",null,null,\"right left\",T.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\"],displaylines:[\"Matrix\",null,null,\"center\",null,\".5em\",\"D\"],cr:\"Cr\",\"\\\\\":\"CrLaTeX\",newline:[\"CrLaTeX\",!0],hline:[\"HLine\",\"solid\"],hdashline:[\"HLine\",\"dashed\"],eqalignno:[\"Matrix\",null,null,\"right left\",T.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\",null,\"right\"],leqalignno:[\"Matrix\",null,null,\"right left\",T.TexConstant.Length.THICKMATHSPACE,\".5em\",\"D\",null,\"left\"],hfill:\"HFill\",hfil:\"HFill\",hfilll:\"HFill\",bmod:[\"Macro\",'\\\\mmlToken{mo}[lspace=\"thickmathspace\" rspace=\"thickmathspace\"]{mod}'],pmod:[\"Macro\",\"\\\\pod{\\\\mmlToken{mi}{mod}\\\\kern 6mu #1}\",1],mod:[\"Macro\",\"\\\\mathchoice{\\\\kern18mu}{\\\\kern12mu}{\\\\kern12mu}{\\\\kern12mu}\\\\mmlToken{mi}{mod}\\\\,\\\\,#1\",1],pod:[\"Macro\",\"\\\\mathchoice{\\\\kern18mu}{\\\\kern8mu}{\\\\kern8mu}{\\\\kern8mu}(#1)\",1],iff:[\"Macro\",\"\\\\;\\\\Longleftrightarrow\\\\;\"],skew:[\"Macro\",\"{{#2{#3\\\\mkern#1mu}\\\\mkern-#1mu}{}}\",3],mathcal:[\"Macro\",\"{\\\\cal #1}\",1],mathscr:[\"Macro\",\"{\\\\scr #1}\",1],mathrm:[\"Macro\",\"{\\\\rm #1}\",1],mathbf:[\"Macro\",\"{\\\\bf #1}\",1],mathbb:[\"Macro\",\"{\\\\bbFont #1}\",1],Bbb:[\"Macro\",\"{\\\\bbFont #1}\",1],mathit:[\"Macro\",\"{\\\\it #1}\",1],mathfrak:[\"Macro\",\"{\\\\frak #1}\",1],mathsf:[\"Macro\",\"{\\\\sf #1}\",1],mathtt:[\"Macro\",\"{\\\\tt #1}\",1],textrm:[\"HBox\",null,T.TexConstant.Variant.NORMAL],textit:[\"HBox\",null,T.TexConstant.Variant.ITALIC],textbf:[\"HBox\",null,T.TexConstant.Variant.BOLD],textsf:[\"HBox\",null,T.TexConstant.Variant.SANSSERIF],texttt:[\"HBox\",null,T.TexConstant.Variant.MONOSPACE],pmb:[\"Macro\",\"\\\\rlap{#1}\\\\kern1px{#1}\",1],TeX:[\"Macro\",\"T\\\\kern-.14em\\\\lower.5ex{E}\\\\kern-.115em X\"],LaTeX:[\"Macro\",\"L\\\\kern-.325em\\\\raise.21em{\\\\scriptstyle{A}}\\\\kern-.17em\\\\TeX\"],\" \":[\"Macro\",\"\\\\text{ }\"],not:\"Not\",dots:\"Dots\",space:\"Tilde\",\"\\xa0\":\"Tilde\",begin:\"BeginEnd\",end:\"BeginEnd\",label:\"HandleLabel\",ref:\"HandleRef\",nonumber:\"HandleNoTag\",mathchoice:\"MathChoice\",mmlToken:\"MmlToken\"},n.default),new r.EnvironmentMap(\"environment\",o.default.environment,{array:[\"AlignedArray\"],equation:[\"Equation\",null,!0],\"equation*\":[\"Equation\",null,!1],eqnarray:[\"EqnArray\",null,!0,!0,\"rcl\",\"0 \"+T.TexConstant.Length.THICKMATHSPACE,\".5em\"]},n.default),new r.CharacterMap(\"not_remap\",null,{\"\\u2190\":\"\\u219a\",\"\\u2192\":\"\\u219b\",\"\\u2194\":\"\\u21ae\",\"\\u21d0\":\"\\u21cd\",\"\\u21d2\":\"\\u21cf\",\"\\u21d4\":\"\\u21ce\",\"\\u2208\":\"\\u2209\",\"\\u220b\":\"\\u220c\",\"\\u2223\":\"\\u2224\",\"\\u2225\":\"\\u2226\",\"\\u223c\":\"\\u2241\",\"~\":\"\\u2241\",\"\\u2243\":\"\\u2244\",\"\\u2245\":\"\\u2247\",\"\\u2248\":\"\\u2249\",\"\\u224d\":\"\\u226d\",\"=\":\"\\u2260\",\"\\u2261\":\"\\u2262\",\"<\":\"\\u226e\",\">\":\"\\u226f\",\"\\u2264\":\"\\u2270\",\"\\u2265\":\"\\u2271\",\"\\u2272\":\"\\u2274\",\"\\u2273\":\"\\u2275\",\"\\u2276\":\"\\u2278\",\"\\u2277\":\"\\u2279\",\"\\u227a\":\"\\u2280\",\"\\u227b\":\"\\u2281\",\"\\u2282\":\"\\u2284\",\"\\u2283\":\"\\u2285\",\"\\u2286\":\"\\u2288\",\"\\u2287\":\"\\u2289\",\"\\u22a2\":\"\\u22ac\",\"\\u22a8\":\"\\u22ad\",\"\\u22a9\":\"\\u22ae\",\"\\u22ab\":\"\\u22af\",\"\\u227c\":\"\\u22e0\",\"\\u227d\":\"\\u22e1\",\"\\u2291\":\"\\u22e2\",\"\\u2292\":\"\\u22e3\",\"\\u22b2\":\"\\u22ea\",\"\\u22b3\":\"\\u22eb\",\"\\u22b4\":\"\\u22ec\",\"\\u22b5\":\"\\u22ed\",\"\\u2203\":\"\\u2204\"})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),Q(19).add({Pcy:\"\\u041f\",Poincareplane:\"\\u210c\",Pr:\"\\u2abb\",Prime:\"\\u2033\",Proportion:\"\\u2237\",par:\"\\u2225\",para:\"\\xb6\",parallel:\"\\u2225\",parsim:\"\\u2af3\",parsl:\"\\u2afd\",part:\"\\u2202\",pcy:\"\\u043f\",percnt:\"%\",permil:\"\\u2030\",perp:\"\\u22a5\",pertenk:\"\\u2031\",phmmat:\"\\u2133\",phone:\"\\u260e\",pitchfork:\"\\u22d4\",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\",pound:\"\\xa3\",pr:\"\\u227a\",prE:\"\\u2ab3\",prcue:\"\\u227c\",pre:\"\\u2aaf\",prec:\"\\u227a\",precapprox:\"\\u2ab7\",preccurlyeq:\"\\u227c\",preceq:\"\\u2aaf\",precsim:\"\\u227e\",primes:\"\\u2119\",prnE:\"\\u2ab5\",prnap:\"\\u2ab9\",prnsim:\"\\u22e8\",prod:\"\\u220f\",profalar:\"\\u232e\",profline:\"\\u2312\",profsurf:\"\\u2313\",prop:\"\\u221d\",propto:\"\\u221d\",prsim:\"\\u227e\",prurel:\"\\u22b0\",puncsp:\"\\u2008\"},\"p\")},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),Q(19).add({RBarr:\"\\u2910\",REG:\"\\xae\",Racute:\"\\u0154\",Rang:\"\\u27eb\",Rarrtl:\"\\u2916\",Rcaron:\"\\u0158\",Rcedil:\"\\u0156\",Rcy:\"\\u0420\",ReverseElement:\"\\u220b\",ReverseUpEquilibrium:\"\\u296f\",Rho:\"\\u03a1\",RightArrowBar:\"\\u21e5\",RightDoubleBracket:\"\\u27e7\",RightDownTeeVector:\"\\u295d\",RightDownVectorBar:\"\\u2955\",RightTeeVector:\"\\u295b\",RightTriangleBar:\"\\u29d0\",RightUpDownVector:\"\\u294f\",RightUpTeeVector:\"\\u295c\",RightUpVectorBar:\"\\u2954\",RightVectorBar:\"\\u2953\",RoundImplies:\"\\u2970\",RuleDelayed:\"\\u29f4\",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\",rarrw:\"\\u219d\",ratail:\"\\u291a\",ratio:\"\\u2236\",rationals:\"\\u211a\",rbarr:\"\\u290d\",rbbrk:\"\\u2773\",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\",rhard:\"\\u21c1\",rharu:\"\\u21c0\",rharul:\"\\u296c\",rightarrow:\"\\u2192\",rightarrowtail:\"\\u21a3\",rightharpoondown:\"\\u21c1\",rightharpoonup:\"\\u21c0\",rightleftarrows:\"\\u21c4\",rightleftharpoons:\"\\u21cc\",rightsquigarrow:\"\\u219d\",risingdotseq:\"\\u2253\",rlarr:\"\\u21c4\",rlhar:\"\\u21cc\",rlm:\"\\u200f\",rmoustache:\"\\u23b1\",rnmid:\"\\u2aee\",roang:\"\\u27ed\",roarr:\"\\u21fe\",robrk:\"\\u27e7\",ropar:\"\\u2986\",roplus:\"\\u2a2e\",rotimes:\"\\u2a35\",rpar:\")\",rpargt:\"\\u2994\",rppolint:\"\\u2a12\",rrarr:\"\\u21c9\",rsaquo:\"\\u203a\",rsh:\"\\u21b1\",rsqb:\"]\",rsquo:\"\\u2019\",rsquor:\"\\u2019\",rthree:\"\\u22cc\",rtrie:\"\\u22b5\",rtrif:\"\\u25b8\",rtriltri:\"\\u29ce\",ruluhar:\"\\u2968\",rx:\"\\u211e\"},\"r\")},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(34),T=Q(3),n=Q(13),o=Q(23),i=Q(9),a=Q(0),s=function(t){for(var e=[],Q=0,r=t.length;Q<r;Q++)e[Q]=i.default.Em(t[Q]);return e.join(\" \")};new T.CharacterMap(\"AMSmath-mathchar0mo\",o.default.mathchar0mo,{iiiint:[\"\\u2a0c\",{texClass:a.TEXCLASS.OP}]}),new T.CommandMap(\"AMSmath-macros\",{mathring:[\"Accent\",\"02DA\"],nobreakspace:\"Tilde\",negmedspace:[\"Spacer\",n.TexConstant.Length.NEGATIVEMEDIUMMATHSPACE],negthickspace:[\"Spacer\",n.TexConstant.Length.NEGATIVETHICKMATHSPACE],idotsint:[\"MultiIntegral\",\"\\\\int\\\\cdots\\\\int\"],dddot:[\"Accent\",\"20DB\"],ddddot:[\"Accent\",\"20DC\"],sideset:[\"Macro\",\"\\\\mathop{\\\\mathop{\\\\rlap{\\\\phantom{#3}}}\\\\nolimits#1\\\\!\\\\mathop{#3}\\\\nolimits#2}\",3],boxed:[\"Macro\",\"\\\\fbox{$\\\\displaystyle{#1}$}\",1],tag:\"HandleTag\",notag:\"HandleNoTag\",eqref:[\"HandleRef\",!0],substack:[\"Macro\",\"\\\\begin{subarray}{c}#1\\\\end{subarray}\",1],injlim:[\"NamedOp\",\"inj&thinsp;lim\"],projlim:[\"NamedOp\",\"proj&thinsp;lim\"],varliminf:[\"Macro\",\"\\\\mathop{\\\\underline{\\\\mmlToken{mi}{lim}}}\"],varlimsup:[\"Macro\",\"\\\\mathop{\\\\overline{\\\\mmlToken{mi}{lim}}}\"],varinjlim:[\"Macro\",\"\\\\mathop{\\\\underrightarrow{\\\\mmlToken{mi}{lim}}}\"],varprojlim:[\"Macro\",\"\\\\mathop{\\\\underleftarrow{\\\\mmlToken{mi}{lim}}}\"],DeclareMathOperator:\"HandleDeclareOp\",operatorname:\"HandleOperatorName\",SkipLimits:\"SkipLimits\",genfrac:\"Genfrac\",frac:[\"Genfrac\",\"\",\"\",\"\",\"\"],tfrac:[\"Genfrac\",\"\",\"\",\"\",\"1\"],dfrac:[\"Genfrac\",\"\",\"\",\"\",\"0\"],binom:[\"Genfrac\",\"(\",\")\",\"0\",\"\"],tbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"1\"],dbinom:[\"Genfrac\",\"(\",\")\",\"0\",\"0\"],cfrac:\"CFrac\",shoveleft:[\"HandleShove\",n.TexConstant.Align.LEFT],shoveright:[\"HandleShove\",n.TexConstant.Align.RIGHT],xrightarrow:[\"xArrow\",8594,5,6],xleftarrow:[\"xArrow\",8592,7,3]},r.AmsMethods),new T.EnvironmentMap(\"AMSmath-environment\",o.default.environment,{\"eqnarray*\":[\"EqnArray\",null,!1,!0,\"rcl\",\"0 \"+n.TexConstant.Length.THICKMATHSPACE,\".5em\"],align:[\"EqnArray\",null,!0,!0,\"rlrlrlrlrlrl\",s([0,2,0,2,0,2,0,2,0,2,0])],\"align*\":[\"EqnArray\",null,!1,!0,\"rlrlrlrlrlrl\",s([0,2,0,2,0,2,0,2,0,2,0])],multline:[\"Multline\",null,!0],\"multline*\":[\"Multline\",null,!1],split:[\"EqnArray\",null,!1,!1,\"rl\",s([0])],gather:[\"EqnArray\",null,!0,!0,\"c\"],\"gather*\":[\"EqnArray\",null,!1,!0,\"c\"],alignat:[\"AlignAt\",null,!0,!0],\"alignat*\":[\"AlignAt\",null,!1,!0],alignedat:[\"AlignAt\",null,!1,!1],aligned:[\"AmsEqnArray\",null,null,null,\"rlrlrlrlrlrl\",s([0,2,0,2,0,2,0,2,0,2,0]),\".5em\",\"D\"],gathered:[\"AmsEqnArray\",null,null,null,\"c\",null,\".5em\",\"D\"],subarray:[\"Array\",null,null,null,null,s([0]),\"0.1em\",\"S\",1],smallmatrix:[\"Array\",null,null,null,\"c\",s([1/3]),\".2em\",\"S\",1],matrix:[\"Array\",null,null,null,\"c\"],pmatrix:[\"Array\",null,\"(\",\")\",\"c\"],bmatrix:[\"Array\",null,\"[\",\"]\",\"c\"],Bmatrix:[\"Array\",null,\"\\\\{\",\"\\\\}\",\"c\"],vmatrix:[\"Array\",null,\"\\\\vert\",\"\\\\vert\",\"c\"],Vmatrix:[\"Array\",null,\"\\\\Vert\",\"\\\\Vert\",\"c\"],cases:[\"Array\",null,\"\\\\{\",\".\",\"ll\",null,\".2em\",\"T\"]},r.AmsMethods),new T.DelimiterMap(\"AMSmath-delimiter\",o.default.delimiter,{\"\\\\lvert\":[\"|\",{texClass:a.TEXCLASS.OPEN}],\"\\\\rvert\":[\"|\",{texClass:a.TEXCLASS.CLOSE}],\"\\\\lVert\":[\"\\u2016\",{texClass:a.TEXCLASS.OPEN}],\"\\\\rVert\":[\"\\u2016\",{texClass:a.TEXCLASS.CLOSE}]}),new T.CharacterMap(\"AMSsymbols-mathchar0mi\",o.default.mathchar0mi,{digamma:\"\\u03dd\",varkappa:\"\\u03f0\",varGamma:[\"\\u0393\",{mathvariant:n.TexConstant.Variant.ITALIC}],varDelta:[\"\\u0394\",{mathvariant:n.TexConstant.Variant.ITALIC}],varTheta:[\"\\u0398\",{mathvariant:n.TexConstant.Variant.ITALIC}],varLambda:[\"\\u039b\",{mathvariant:n.TexConstant.Variant.ITALIC}],varXi:[\"\\u039e\",{mathvariant:n.TexConstant.Variant.ITALIC}],varPi:[\"\\u03a0\",{mathvariant:n.TexConstant.Variant.ITALIC}],varSigma:[\"\\u03a3\",{mathvariant:n.TexConstant.Variant.ITALIC}],varUpsilon:[\"\\u03a5\",{mathvariant:n.TexConstant.Variant.ITALIC}],varPhi:[\"\\u03a6\",{mathvariant:n.TexConstant.Variant.ITALIC}],varPsi:[\"\\u03a8\",{mathvariant:n.TexConstant.Variant.ITALIC}],varOmega:[\"\\u03a9\",{mathvariant:n.TexConstant.Variant.ITALIC}],beth:\"\\u2136\",gimel:\"\\u2137\",daleth:\"\\u2138\",backprime:[\"\\u2035\",{variantForm:!0}],hslash:\"\\u210f\",varnothing:[\"\\u2205\",{variantForm:!0}],blacktriangle:\"\\u25b4\",triangledown:[\"\\u25bd\",{variantForm:!0}],blacktriangledown:\"\\u25be\",square:\"\\u25fb\",Box:\"\\u25fb\",blacksquare:\"\\u25fc\",lozenge:\"\\u25ca\",Diamond:\"\\u25ca\",blacklozenge:\"\\u29eb\",circledS:[\"\\u24c8\",{mathvariant:n.TexConstant.Variant.NORMAL}],bigstar:\"\\u2605\",sphericalangle:\"\\u2222\",measuredangle:\"\\u2221\",nexists:\"\\u2204\",complement:\"\\u2201\",mho:\"\\u2127\",eth:[\"\\xf0\",{mathvariant:n.TexConstant.Variant.NORMAL}],Finv:\"\\u2132\",diagup:\"\\u2571\",Game:\"\\u2141\",diagdown:\"\\u2572\",Bbbk:[\"k\",{mathvariant:n.TexConstant.Variant.DOUBLESTRUCK}],yen:\"\\xa5\",circledR:\"\\xae\",checkmark:\"\\u2713\",maltese:\"\\u2720\"}),new T.CharacterMap(\"AMSsymbols-mathchar0m0\",o.default.mathchar0mo,{dotplus:\"\\u2214\",ltimes:\"\\u22c9\",smallsetminus:[\"\\u2216\",{variantForm:!0}],rtimes:\"\\u22ca\",Cap:\"\\u22d2\",doublecap:\"\\u22d2\",leftthreetimes:\"\\u22cb\",Cup:\"\\u22d3\",doublecup:\"\\u22d3\",rightthreetimes:\"\\u22cc\",barwedge:\"\\u22bc\",curlywedge:\"\\u22cf\",veebar:\"\\u22bb\",curlyvee:\"\\u22ce\",doublebarwedge:\"\\u2a5e\",boxminus:\"\\u229f\",circleddash:\"\\u229d\",boxtimes:\"\\u22a0\",circledast:\"\\u229b\",boxdot:\"\\u22a1\",circledcirc:\"\\u229a\",boxplus:\"\\u229e\",centerdot:[\"\\u22c5\",{variantForm:!0}],divideontimes:\"\\u22c7\",intercal:\"\\u22ba\",leqq:\"\\u2266\",geqq:\"\\u2267\",leqslant:\"\\u2a7d\",geqslant:\"\\u2a7e\",eqslantless:\"\\u2a95\",eqslantgtr:\"\\u2a96\",lesssim:\"\\u2272\",gtrsim:\"\\u2273\",lessapprox:\"\\u2a85\",gtrapprox:\"\\u2a86\",approxeq:\"\\u224a\",lessdot:\"\\u22d6\",gtrdot:\"\\u22d7\",lll:\"\\u22d8\",llless:\"\\u22d8\",ggg:\"\\u22d9\",gggtr:\"\\u22d9\",lessgtr:\"\\u2276\",gtrless:\"\\u2277\",lesseqgtr:\"\\u22da\",gtreqless:\"\\u22db\",lesseqqgtr:\"\\u2a8b\",gtreqqless:\"\\u2a8c\",doteqdot:\"\\u2251\",Doteq:\"\\u2251\",eqcirc:\"\\u2256\",risingdotseq:\"\\u2253\",circeq:\"\\u2257\",fallingdotseq:\"\\u2252\",triangleq:\"\\u225c\",backsim:\"\\u223d\",thicksim:[\"\\u223c\",{variantForm:!0}],backsimeq:\"\\u22cd\",thickapprox:[\"\\u2248\",{variantForm:!0}],subseteqq:\"\\u2ac5\",supseteqq:\"\\u2ac6\",Subset:\"\\u22d0\",Supset:\"\\u22d1\",sqsubset:\"\\u228f\",sqsupset:\"\\u2290\",preccurlyeq:\"\\u227c\",succcurlyeq:\"\\u227d\",curlyeqprec:\"\\u22de\",curlyeqsucc:\"\\u22df\",precsim:\"\\u227e\",succsim:\"\\u227f\",precapprox:\"\\u2ab7\",succapprox:\"\\u2ab8\",vartriangleleft:\"\\u22b2\",lhd:\"\\u22b2\",vartriangleright:\"\\u22b3\",rhd:\"\\u22b3\",trianglelefteq:\"\\u22b4\",unlhd:\"\\u22b4\",trianglerighteq:\"\\u22b5\",unrhd:\"\\u22b5\",vDash:[\"\\u22a8\",{variantForm:!0}],Vdash:\"\\u22a9\",Vvdash:\"\\u22aa\",smallsmile:[\"\\u2323\",{variantForm:!0}],shortmid:[\"\\u2223\",{variantForm:!0}],smallfrown:[\"\\u2322\",{variantForm:!0}],shortparallel:[\"\\u2225\",{variantForm:!0}],bumpeq:\"\\u224f\",between:\"\\u226c\",Bumpeq:\"\\u224e\",pitchfork:\"\\u22d4\",varpropto:[\"\\u221d\",{variantForm:!0}],backepsilon:\"\\u220d\",blacktriangleleft:\"\\u25c2\",blacktriangleright:\"\\u25b8\",therefore:\"\\u2234\",because:\"\\u2235\",eqsim:\"\\u2242\",vartriangle:[\"\\u25b3\",{variantForm:!0}],Join:\"\\u22c8\",nless:\"\\u226e\",ngtr:\"\\u226f\",nleq:\"\\u2270\",ngeq:\"\\u2271\",nleqslant:[\"\\u2a87\",{variantForm:!0}],ngeqslant:[\"\\u2a88\",{variantForm:!0}],nleqq:[\"\\u2270\",{variantForm:!0}],ngeqq:[\"\\u2271\",{variantForm:!0}],lneq:\"\\u2a87\",gneq:\"\\u2a88\",lneqq:\"\\u2268\",gneqq:\"\\u2269\",lvertneqq:[\"\\u2268\",{variantForm:!0}],gvertneqq:[\"\\u2269\",{variantForm:!0}],lnsim:\"\\u22e6\",gnsim:\"\\u22e7\",lnapprox:\"\\u2a89\",gnapprox:\"\\u2a8a\",nprec:\"\\u2280\",nsucc:\"\\u2281\",npreceq:[\"\\u22e0\",{variantForm:!0}],nsucceq:[\"\\u22e1\",{variantForm:!0}],precneqq:\"\\u2ab5\",succneqq:\"\\u2ab6\",precnsim:\"\\u22e8\",succnsim:\"\\u22e9\",precnapprox:\"\\u2ab9\",succnapprox:\"\\u2aba\",nsim:\"\\u2241\",ncong:\"\\u2247\",nshortmid:[\"\\u2224\",{variantForm:!0}],nshortparallel:[\"\\u2226\",{variantForm:!0}],nmid:\"\\u2224\",nparallel:\"\\u2226\",nvdash:\"\\u22ac\",nvDash:\"\\u22ad\",nVdash:\"\\u22ae\",nVDash:\"\\u22af\",ntriangleleft:\"\\u22ea\",ntriangleright:\"\\u22eb\",ntrianglelefteq:\"\\u22ec\",ntrianglerighteq:\"\\u22ed\",nsubseteq:\"\\u2288\",nsupseteq:\"\\u2289\",nsubseteqq:[\"\\u2288\",{variantForm:!0}],nsupseteqq:[\"\\u2289\",{variantForm:!0}],subsetneq:\"\\u228a\",supsetneq:\"\\u228b\",varsubsetneq:[\"\\u228a\",{variantForm:!0}],varsupsetneq:[\"\\u228b\",{variantForm:!0}],subsetneqq:\"\\u2acb\",supsetneqq:\"\\u2acc\",varsubsetneqq:[\"\\u2acb\",{variantForm:!0}],varsupsetneqq:[\"\\u2acc\",{variantForm:!0}],leftleftarrows:\"\\u21c7\",rightrightarrows:\"\\u21c9\",leftrightarrows:\"\\u21c6\",rightleftarrows:\"\\u21c4\",Lleftarrow:\"\\u21da\",Rrightarrow:\"\\u21db\",twoheadleftarrow:\"\\u219e\",twoheadrightarrow:\"\\u21a0\",leftarrowtail:\"\\u21a2\",rightarrowtail:\"\\u21a3\",looparrowleft:\"\\u21ab\",looparrowright:\"\\u21ac\",leftrightharpoons:\"\\u21cb\",rightleftharpoons:[\"\\u21cc\",{variantForm:!0}],curvearrowleft:\"\\u21b6\",curvearrowright:\"\\u21b7\",circlearrowleft:\"\\u21ba\",circlearrowright:\"\\u21bb\",Lsh:\"\\u21b0\",Rsh:\"\\u21b1\",upuparrows:\"\\u21c8\",downdownarrows:\"\\u21ca\",upharpoonleft:\"\\u21bf\",upharpoonright:\"\\u21be\",downharpoonleft:\"\\u21c3\",restriction:\"\\u21be\",multimap:\"\\u22b8\",downharpoonright:\"\\u21c2\",leftrightsquigarrow:\"\\u21ad\",rightsquigarrow:\"\\u21dd\",leadsto:\"\\u21dd\",dashrightarrow:\"\\u21e2\",dashleftarrow:\"\\u21e0\",nleftarrow:\"\\u219a\",nrightarrow:\"\\u219b\",nLeftarrow:\"\\u21cd\",nRightarrow:\"\\u21cf\",nleftrightarrow:\"\\u21ae\",nLeftrightarrow:\"\\u21ce\"}),new T.DelimiterMap(\"AMSsymbols-delimiter\",o.default.delimiter,{\"\\\\ulcorner\":\"\\u231c\",\"\\\\urcorner\":\"\\u231d\",\"\\\\llcorner\":\"\\u231e\",\"\\\\lrcorner\":\"\\u231f\"}),new T.CommandMap(\"AMSsymbols-macros\",{implies:[\"Macro\",\"\\\\;\\\\Longrightarrow\\\\;\"],impliedby:[\"Macro\",\"\\\\;\\\\Longleftarrow\\\\;\"]},r.AmsMethods)},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(3),T=Q(23),n=Q(136);new r.EnvironmentMap(\"amscd_environment\",T.default.environment,{CD:\"CD\"},n.default),new r.CommandMap(\"amscd_macros\",{minCDarrowwidth:\"minCDarrowwidth\",minCDarrowheight:\"minCDarrowheight\"},n.default),new r.MacroMap(\"amscd_special\",{\"@\":\"arrow\"},n.default)},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(3),T=Q(141);new r.CommandMap(\"Braket-macros\",{bra:[\"Macro\",\"{\\\\langle {#1} \\\\vert}\",1],ket:[\"Macro\",\"{\\\\vert {#1} \\\\rangle}\",1],braket:[\"Braket\",\"\\u27e8\",\"\\u27e9\",!1,1/0],set:[\"Braket\",\"{\",\"}\",!1,1],Bra:[\"Macro\",\"{\\\\left\\\\langle {#1} \\\\right\\\\vert}\",1],Ket:[\"Macro\",\"{\\\\left\\\\vert {#1} \\\\right\\\\rangle}\",1],Braket:[\"Braket\",\"\\u27e8\",\"\\u27e9\",!0,1/0],Set:[\"Braket\",\"{\",\"}\",!0,1],ketbra:[\"Macro\",\"{\\\\vert {#1} \\\\rangle\\\\langle {#2} \\\\vert}\",2],Ketbra:[\"Macro\",\"{\\\\left\\\\vert {#1} \\\\right\\\\rangle\\\\left\\\\langle {#2} \\\\right\\\\vert}\",2],\"|\":\"Bar\"},T.default),new r.MacroMap(\"Braket-characters\",{\"|\":\"Bar\"},T.default)},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(144),T=Q(23),n=Q(3);new n.CommandMap(\"Bussproofs-macros\",{AxiomC:\"Axiom\",UnaryInfC:[\"Inference\",1],BinaryInfC:[\"Inference\",2],TrinaryInfC:[\"Inference\",3],QuaternaryInfC:[\"Inference\",4],QuinaryInfC:[\"Inference\",5],RightLabel:[\"Label\",\"right\"],LeftLabel:[\"Label\",\"left\"],AXC:\"Axiom\",UIC:[\"Inference\",1],BIC:[\"Inference\",2],TIC:[\"Inference\",3],RL:[\"Label\",\"right\"],LL:[\"Label\",\"left\"],noLine:[\"SetLine\",\"none\",!1],singleLine:[\"SetLine\",\"solid\",!1],solidLine:[\"SetLine\",\"solid\",!1],dashedLine:[\"SetLine\",\"dashed\",!1],alwaysNoLine:[\"SetLine\",\"none\",!0],alwaysSingleLine:[\"SetLine\",\"solid\",!0],alwaysSolidLine:[\"SetLine\",\"solid\",!0],alwaysDashedLine:[\"SetLine\",\"dashed\",!0],rootAtTop:[\"RootAtTop\",!0],alwaysRootAtTop:[\"RootAtTop\",!0],rootAtBottom:[\"RootAtTop\",!1],alwaysRootAtBottom:[\"RootAtTop\",!1],fCenter:\"FCenter\",Axiom:\"AxiomF\",UnaryInf:[\"InferenceF\",1],BinaryInf:[\"InferenceF\",2],TrinaryInf:[\"InferenceF\",3],QuaternaryInf:[\"InferenceF\",4],QuinaryInf:[\"InferenceF\",5]},r.default),new n.EnvironmentMap(\"Bussproofs-environments\",T.default.environment,{prooftree:[\"Prooftree\",null,!1]},r.default)},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(88);new(Q(3).CommandMap)(\"Newcommand-macros\",{newcommand:\"NewCommand\",renewcommand:\"NewCommand\",newenvironment:\"NewEnvironment\",renewenvironment:\"NewEnvironment\",def:\"MacroDef\",let:\"Let\"},r.default)},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r={go:function(t,e){if(!t)return[];void 0===e&&(e=\"ce\");var Q,T=\"0\",n={};n.parenthesisLevel=0,t=(t=(t=t.replace(/\\n/g,\" \")).replace(/[\\u2212\\u2013\\u2014\\u2010]/g,\"-\")).replace(/[\\u2026]/g,\"...\");for(var o=10,i=[];;){Q!==t?(o=10,Q=t):o--;var a=r.stateMachines[e],s=a.transitions[T]||a.transitions[\"*\"];t:for(var l=0;l<s.length;l++){var c=r.patterns.match_(s[l].pattern,t);if(c){for(var u=s[l].task,p=0;p<u.action_.length;p++){var h;if(a.actions[u.action_[p].type_])h=a.actions[u.action_[p].type_](n,c.match_,u.action_[p].option);else{if(!r.actions[u.action_[p].type_])throw[\"MhchemBugA\",\"mhchem bug A. Please report. (\"+u.action_[p].type_+\")\"];h=r.actions[u.action_[p].type_](n,c.match_,u.action_[p].option)}r.concatArray(i,h)}if(T=u.nextState||T,!(t.length>0))return i;if(u.revisit||(t=c.remainder),!u.toContinue)break t}}if(o<=0)throw[\"MhchemBugU\",\"mhchem bug U. Please report.\"]}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var Q=0;Q<e.length;Q++)t.push(e[Q]);else t.push(e)},patterns:{patterns:{empty:/^$/,else:/^./,else2:/^./,space:/^\\s/,\"space A\":/^\\s(?=[A-Z\\\\$])/,space$:/^\\s$/,\"a-z\":/^[a-z]/,x:/^x/,x$:/^x$/,i$:/^i$/,letters:/^(?:[a-zA-Z\\u03B1-\\u03C9\\u0391-\\u03A9?@]|(?:\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))))+/,\"\\\\greek\":/^\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))/,\"one lowercase latin letter $\":/^(?:([a-z])(?:$|[^a-zA-Z]))$/,\"$one lowercase latin letter$ $\":/^\\$(?:([a-z])(?:$|[^a-zA-Z]))\\$$/,\"one lowercase greek letter $\":/^(?:\\$?[\\u03B1-\\u03C9]\\$?|\\$?\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\\s*\\$?)(?:\\s+|\\{\\}|(?![a-zA-Z]))$/,digits:/^[0-9]+/,\"-9.,9\":/^[+\\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))/,\"-9.,9 no missing 0\":/^[+\\-]?[0-9]+(?:[.,][0-9]+)?/,\"(-)(9.,9)(e)(99)\":function(t){var e=t.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))?(\\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))\\))?(?:([eE]|\\s*(\\*|x|\\\\times|\\u00D7)\\s*10\\^)([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\}))?/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},\"(-)(9)^(-9)\":function(t){var e=t.match(/^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+)?)\\^([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\})/);return e&&e[0]?{match_:e.splice(1),remainder:t.substr(e[0].length)}:null},\"state of aggregation $\":function(t){var e=r.patterns.findObserveGroups(t,\"\",/^\\([a-z]{1,3}(?=[\\),])/,\")\",\"\");if(e&&e.remainder.match(/^($|[\\s,;\\)\\]\\}])/))return e;var Q=t.match(/^(?:\\((?:\\\\ca\\s?)?\\$[amothc]\\$\\))/);return Q?{match_:Q[0],remainder:t.substr(Q[0].length)}:null},\"_{(state of aggregation)}$\":/^_\\{(\\([a-z]{1,3}\\))\\}/,\"{[(\":/^(?:\\\\\\{|\\[|\\()/,\")]}\":/^(?:\\)|\\]|\\\\\\})/,\", \":/^[,;]\\s*/,\",\":/^[,;]/,\".\":/^[.]/,\". \":/^([.\\u22C5\\u00B7\\u2022])\\s*/,\"...\":/^\\.\\.\\.(?=$|[^.])/,\"* \":/^([*])\\s*/,\"^{(...)}\":function(t){return r.patterns.findObserveGroups(t,\"^{\",\"\",\"\",\"}\")},\"^($...$)\":function(t){return r.patterns.findObserveGroups(t,\"^\",\"$\",\"$\",\"\")},\"^a\":/^\\^([0-9]+|[^\\\\_])/,\"^\\\\x{}{}\":function(t){return r.patterns.findObserveGroups(t,\"^\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"^\\\\x{}\":function(t){return r.patterns.findObserveGroups(t,\"^\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"^\\\\x\":/^\\^(\\\\[a-zA-Z]+)\\s*/,\"^(-1)\":/^\\^(-?\\d+)/,\"'\":/^'/,\"_{(...)}\":function(t){return r.patterns.findObserveGroups(t,\"_{\",\"\",\"\",\"}\")},\"_($...$)\":function(t){return r.patterns.findObserveGroups(t,\"_\",\"$\",\"$\",\"\")},_9:/^_([+\\-]?[0-9]+|[^\\\\])/,\"_\\\\x{}{}\":function(t){return r.patterns.findObserveGroups(t,\"_\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"_\\\\x{}\":function(t){return r.patterns.findObserveGroups(t,\"_\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"_\\\\x\":/^_(\\\\[a-zA-Z]+)\\s*/,\"^_\":/^(?:\\^(?=_)|\\_(?=\\^)|[\\^_]$)/,\"{}\":/^\\{\\}/,\"{...}\":function(t){return r.patterns.findObserveGroups(t,\"\",\"{\",\"}\",\"\")},\"{(...)}\":function(t){return r.patterns.findObserveGroups(t,\"{\",\"\",\"\",\"}\")},\"$...$\":function(t){return r.patterns.findObserveGroups(t,\"\",\"$\",\"$\",\"\")},\"${(...)}$\":function(t){return r.patterns.findObserveGroups(t,\"${\",\"\",\"\",\"}$\")},\"$(...)$\":function(t){return r.patterns.findObserveGroups(t,\"$\",\"\",\"\",\"$\")},\"=<>\":/^[=<>]/,\"#\":/^[#\\u2261]/,\"+\":/^\\+/,\"-$\":/^-(?=[\\s_},;\\]/]|$|\\([a-z]+\\))/,\"-9\":/^-(?=[0-9])/,\"- orbital overlap\":/^-(?=(?:[spd]|sp)(?:$|[\\s,;\\)\\]\\}]))/,\"-\":/^-/,\"pm-operator\":/^(?:\\\\pm|\\$\\\\pm\\$|\\+-|\\+\\/-)/,operator:/^(?:\\+|(?:[\\-=<>]|<<|>>|\\\\approx|\\$\\\\approx\\$)(?=\\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\\(v\\)|\\^|\\(\\^\\))(?=$|[\\s,;\\)\\]\\}])/,\"\\\\bond{(...)}\":function(t){return r.patterns.findObserveGroups(t,\"\\\\bond{\",\"\",\"\",\"}\")},\"->\":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\\u2192\\u27F6\\u21CC])/,CMT:/^[CMT](?=\\[)/,\"[(...)]\":function(t){return r.patterns.findObserveGroups(t,\"[\",\"\",\"\",\"]\")},\"1st-level escape\":/^(&|\\\\\\\\|\\\\hline)\\s*/,\"\\\\,\":/^(?:\\\\[,\\ ;:])/,\"\\\\x{}{}\":function(t){return r.patterns.findObserveGroups(t,\"\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\",\"\",\"{\",\"}\",\"\",!0)},\"\\\\x{}\":function(t){return r.patterns.findObserveGroups(t,\"\",/^\\\\[a-zA-Z]+\\{/,\"}\",\"\")},\"\\\\ca\":/^\\\\ca(?:\\s+|(?![a-zA-Z]))/,\"\\\\x\":/^(?:\\\\[a-zA-Z]+\\s*|\\\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\\/~|]/,\"\\\\frac{(...)}\":function(t){return r.patterns.findObserveGroups(t,\"\\\\frac{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\overset{(...)}\":function(t){return r.patterns.findObserveGroups(t,\"\\\\overset{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\underset{(...)}\":function(t){return r.patterns.findObserveGroups(t,\"\\\\underset{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\underbrace{(...)}\":function(t){return r.patterns.findObserveGroups(t,\"\\\\underbrace{\",\"\",\"\",\"}_\",\"{\",\"\",\"\",\"}\")},\"\\\\color{(...)}0\":function(t){return r.patterns.findObserveGroups(t,\"\\\\color{\",\"\",\"\",\"}\")},\"\\\\color{(...)}{(...)}1\":function(t){return r.patterns.findObserveGroups(t,\"\\\\color{\",\"\",\"\",\"}\",\"{\",\"\",\"\",\"}\")},\"\\\\color(...){(...)}2\":function(t){return r.patterns.findObserveGroups(t,\"\\\\color\",\"\\\\\",\"\",/^(?=\\{)/,\"{\",\"\",\"\",\"}\")},\"\\\\ce{(...)}\":function(t){return r.patterns.findObserveGroups(t,\"\\\\ce{\",\"\",\"\",\"}\")},oxidation$:/^(?:[+-][IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\"d-oxidation$\":/^(?:[+-]?\\s?[IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\"roman numeral\":/^[IVX]+/,\"1/2$\":/^[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+(?:\\$[a-z]\\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\\([+\\-]?[0-9]+\\/[0-9]+\\)|[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+|[+\\-]?[0-9]+[.,][0-9]+|[+\\-]?\\.[0-9]+|[+\\-]?[0-9]+)(?:[a-z](?=\\s*[A-Z]))?)|[+\\-]?[a-z](?=\\s*[A-Z])|\\+(?!\\s))/))return{match_:e[0],remainder:t.substr(e[0].length)};var Q=r.patterns.findObserveGroups(t,\"\",\"$\",\"$\",\"\");return Q&&(e=Q.match_.match(/^\\$(?:\\(?[+\\-]?(?:[0-9]*[a-z]?[+\\-])?[0-9]*[a-z](?:[+\\-][0-9]*[a-z]?)?\\)?|\\+|-)\\$$/))?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},\"(KV letters),\":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\\([a-z]+\\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\\ \\+\\-\\,\\.\\(\\)]+[a-z])+[0-9\\ \\+\\-\\,\\.\\(\\)]*|(?:[a-z][0-9\\ \\+\\-\\,\\.\\(\\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,\"/\":/^\\s*(\\/)\\s*/,\"//\":/^\\s*(\\/\\/)\\s*/,\"*\":/^\\s*[*.]\\s*/},findObserveGroups:function(t,e,Q,r,T,n,o,i,a,s){var l=function(t,e){if(\"string\"==typeof e)return 0!==t.indexOf(e)?null:e;var Q=t.match(e);return Q?Q[0]:null},c=l(t,e);if(null===c)return null;if(t=t.substr(c.length),null===(c=l(t,Q)))return null;var u=function(t,e,Q){for(var r=0;e<t.length;){var T=t.charAt(e),n=l(t.substr(e),Q);if(null!==n&&0===r)return{endMatchBegin:e,endMatchEnd:e+n.length};if(\"{\"===T)r++;else if(\"}\"===T){if(0===r)throw[\"ExtraCloseMissingOpen\",\"Extra close brace or missing open brace\"];r--}e++}return null}(t,c.length,r||T);if(null===u)return null;var p=t.substring(0,r?u.endMatchEnd:u.endMatchBegin);if(n||o){var h=this.findObserveGroups(t.substr(u.endMatchEnd),n,o,i,a);if(null===h)return null;var f=[p,h.match_];return{match_:s?f.join(\"\"):f,remainder:h.remainder}}return{match_:p,remainder:t.substr(u.endMatchEnd)}},match_:function(t,e){var Q=r.patterns.patterns[t];if(void 0===Q)throw[\"MhchemBugP\",\"mhchem bug P. Please report. (\"+t+\")\"];if(\"function\"==typeof Q)return r.patterns.patterns[t](e);var T=e.match(Q);return T?{match_:T[2]?[T[1],T[2]]:T[1]?T[1]:T[0],remainder:e.substr(T[0].length)}:null}},actions:{\"a=\":function(t,e){t.a=(t.a||\"\")+e},\"b=\":function(t,e){t.b=(t.b||\"\")+e},\"p=\":function(t,e){t.p=(t.p||\"\")+e},\"o=\":function(t,e){t.o=(t.o||\"\")+e},\"q=\":function(t,e){t.q=(t.q||\"\")+e},\"d=\":function(t,e){t.d=(t.d||\"\")+e},\"rm=\":function(t,e){t.rm=(t.rm||\"\")+e},\"text=\":function(t,e){t.text_=(t.text_||\"\")+e},insert:function(t,e,Q){return{type_:Q}},\"insert+p1\":function(t,e,Q){return{type_:Q,p1:e}},\"insert+p1+p2\":function(t,e,Q){return{type_:Q,p1:e[0],p2:e[1]}},copy:function(t,e){return e},rm:function(t,e){return{type_:\"rm\",p1:e||\"\"}},text:function(t,e){return r.go(e,\"text\")},\"{text}\":function(t,e){var Q=[\"{\"];return r.concatArray(Q,r.go(e,\"text\")),Q.push(\"}\"),Q},\"tex-math\":function(t,e){return r.go(e,\"tex-math\")},\"tex-math tight\":function(t,e){return r.go(e,\"tex-math tight\")},bond:function(t,e,Q){return{type_:\"bond\",kind_:Q||e}},\"color0-output\":function(t,e){return{type_:\"color0\",color:e[0]}},ce:function(t,e){return r.go(e)},\"1/2\":function(t,e){var Q=[];e.match(/^[+\\-]/)&&(Q.push(e.substr(0,1)),e=e.substr(1));var r=e.match(/^([0-9]+|\\$[a-z]\\$|[a-z])\\/([0-9]+)(\\$[a-z]\\$|[a-z])?$/);return r[1]=r[1].replace(/\\$/g,\"\"),Q.push({type_:\"frac\",p1:r[1],p2:r[2]}),r[3]&&(r[3]=r[3].replace(/\\$/g,\"\"),Q.push({type_:\"tex-math\",p1:r[3]})),Q},\"9,9\":function(t,e){return r.go(e,\"9,9\")}},createTransitions:function(t){var e,Q,r,T,n={};for(e in t)for(Q in t[e])for(r=Q.split(\"|\"),t[e][Q].stateArray=r,T=0;T<r.length;T++)n[r[T]]=[];for(e in t)for(Q in t[e])for(r=t[e][Q].stateArray||[],T=0;T<r.length;T++){var o=t[e][Q];if(o.action_){o.action_=[].concat(o.action_);for(var i=0;i<o.action_.length;i++)\"string\"==typeof o.action_[i]&&(o.action_[i]={type_:o.action_[i]})}else o.action_=[];for(var a=e.split(\"|\"),s=0;s<a.length;s++)if(\"*\"===r[T])for(var l in n)n[l].push({pattern:a[s],task:o});else n[r[T]].push({pattern:a[s],task:o})}return n},stateMachines:{}};r.stateMachines={ce:{transitions:r.createTransitions({empty:{\"*\":{action_:\"output\"}},else:{\"0|1|2\":{action_:\"beginsWithBond=false\",revisit:!0,toContinue:!0}},oxidation$:{0:{action_:\"oxidation-output\"}},CMT:{r:{action_:\"rdt=\",nextState:\"rt\"},rd:{action_:\"rqt=\",nextState:\"rdt\"}},arrowUpDown:{\"0|1|2|as\":{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"1\"}},uprightEntities:{\"0|1|2\":{action_:[\"o=\",\"output\"],nextState:\"1\"}},orbital:{\"0|1|2|3\":{action_:\"o=\",nextState:\"o\"}},\"->\":{\"0|1|2|3\":{action_:\"r=\",nextState:\"r\"},\"a|as\":{action_:[\"output\",\"r=\"],nextState:\"r\"},\"*\":{action_:[\"output\",\"r=\"],nextState:\"r\"}},\"+\":{o:{action_:\"d= kv\",nextState:\"d\"},\"d|D\":{action_:\"d=\",nextState:\"d\"},q:{action_:\"d=\",nextState:\"qd\"},\"qd|qD\":{action_:\"d=\",nextState:\"qd\"},dq:{action_:[\"output\",\"d=\"],nextState:\"d\"},3:{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"0\"}},amount:{\"0|2\":{action_:\"a=\",nextState:\"a\"}},\"pm-operator\":{\"0|1|2|a|as\":{action_:[\"sb=false\",\"output\",{type_:\"operator\",option:\"\\\\pm\"}],nextState:\"0\"}},operator:{\"0|1|2|a|as\":{action_:[\"sb=false\",\"output\",\"operator\"],nextState:\"0\"}},\"-$\":{\"o|q\":{action_:[\"charge or bond\",\"output\"],nextState:\"qd\"},d:{action_:\"d=\",nextState:\"d\"},D:{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"},q:{action_:\"d=\",nextState:\"qd\"},qd:{action_:\"d=\",nextState:\"qd\"},\"qD|dq\":{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"}},\"-9\":{\"3|o\":{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"3\"}},\"- orbital overlap\":{o:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"},d:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"}},\"-\":{\"0|1|2\":{action_:[{type_:\"output\",option:1},\"beginsWithBond=true\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"},3:{action_:{type_:\"bond\",option:\"-\"}},a:{action_:[\"output\",{type_:\"insert\",option:\"hyphen\"}],nextState:\"2\"},as:{action_:[{type_:\"output\",option:2},{type_:\"bond\",option:\"-\"}],nextState:\"3\"},b:{action_:\"b=\"},o:{action_:{type_:\"- after o/d\",option:!1},nextState:\"2\"},q:{action_:{type_:\"- after o/d\",option:!1},nextState:\"2\"},\"d|qd|dq\":{action_:{type_:\"- after o/d\",option:!0},nextState:\"2\"},\"D|qD|p\":{action_:[\"output\",{type_:\"bond\",option:\"-\"}],nextState:\"3\"}},amount2:{\"1|3\":{action_:\"a=\",nextState:\"a\"}},letters:{\"0|1|2|3|a|as|b|p|bp|o\":{action_:\"o=\",nextState:\"o\"},\"q|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"},\"d|D|qd|qD\":{action_:\"o after d\",nextState:\"o\"}},digits:{o:{action_:\"q=\",nextState:\"q\"},\"d|D\":{action_:\"q=\",nextState:\"dq\"},q:{action_:[\"output\",\"o=\"],nextState:\"o\"},a:{action_:\"o=\",nextState:\"o\"}},\"space A\":{\"b|p|bp\":{}},space:{a:{nextState:\"as\"},0:{action_:\"sb=false\"},\"1|2\":{action_:\"sb=true\"},\"r|rt|rd|rdt|rdq\":{action_:\"output\",nextState:\"0\"},\"*\":{action_:[\"output\",\"sb=true\"],nextState:\"1\"}},\"1st-level escape\":{\"1|2\":{action_:[\"output\",{type_:\"insert+p1\",option:\"1st-level escape\"}]},\"*\":{action_:[\"output\",{type_:\"insert+p1\",option:\"1st-level escape\"}],nextState:\"0\"}},\"[(...)]\":{\"r|rt\":{action_:\"rd=\",nextState:\"rd\"},\"rd|rdt\":{action_:\"rq=\",nextState:\"rdq\"}},\"...\":{\"o|d|D|dq|qd|qD\":{action_:[\"output\",{type_:\"bond\",option:\"...\"}],nextState:\"3\"},\"*\":{action_:[{type_:\"output\",option:1},{type_:\"insert\",option:\"ellipsis\"}],nextState:\"1\"}},\". |* \":{\"*\":{action_:[\"output\",{type_:\"insert\",option:\"addition compound\"}],nextState:\"1\"}},\"state of aggregation $\":{\"*\":{action_:[\"output\",\"state of aggregation\"],nextState:\"1\"}},\"{[(\":{\"a|as|o\":{action_:[\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"},\"0|1|2|3\":{action_:[\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"},\"*\":{action_:[\"output\",\"o=\",\"output\",\"parenthesisLevel++\"],nextState:\"2\"}},\")]}\":{\"0|1|2|3|b|p|bp|o\":{action_:[\"o=\",\"parenthesisLevel--\"],nextState:\"o\"},\"a|as|d|D|q|qd|qD|dq\":{action_:[\"output\",\"o=\",\"parenthesisLevel--\"],nextState:\"o\"}},\", \":{\"*\":{action_:[\"output\",\"comma\"],nextState:\"0\"}},\"^_\":{\"*\":{}},\"^{(...)}|^($...$)\":{\"0|1|2|as\":{action_:\"b=\",nextState:\"b\"},p:{action_:\"b=\",nextState:\"bp\"},\"3|o\":{action_:\"d= kv\",nextState:\"D\"},q:{action_:\"d=\",nextState:\"qD\"},\"d|D|qd|qD|dq\":{action_:[\"output\",\"d=\"],nextState:\"D\"}},\"^a|^\\\\x{}{}|^\\\\x{}|^\\\\x|'\":{\"0|1|2|as\":{action_:\"b=\",nextState:\"b\"},p:{action_:\"b=\",nextState:\"bp\"},\"3|o\":{action_:\"d= kv\",nextState:\"d\"},q:{action_:\"d=\",nextState:\"qd\"},\"d|qd|D|qD\":{action_:\"d=\"},dq:{action_:[\"output\",\"d=\"],nextState:\"d\"}},\"_{(state of aggregation)}$\":{\"d|D|q|qd|qD|dq\":{action_:[\"output\",\"q=\"],nextState:\"q\"}},\"_{(...)}|_($...$)|_9|_\\\\x{}{}|_\\\\x{}|_\\\\x\":{\"0|1|2|as\":{action_:\"p=\",nextState:\"p\"},b:{action_:\"p=\",nextState:\"bp\"},\"3|o\":{action_:\"q=\",nextState:\"q\"},\"d|D\":{action_:\"q=\",nextState:\"dq\"},\"q|qd|qD|dq\":{action_:[\"output\",\"q=\"],nextState:\"q\"}},\"=<>\":{\"0|1|2|3|a|as|o|q|d|D|qd|qD|dq\":{action_:[{type_:\"output\",option:2},\"bond\"],nextState:\"3\"}},\"#\":{\"0|1|2|3|a|as|o\":{action_:[{type_:\"output\",option:2},{type_:\"bond\",option:\"#\"}],nextState:\"3\"}},\"{}\":{\"*\":{action_:{type_:\"output\",option:1},nextState:\"1\"}},\"{...}\":{\"0|1|2|3|a|as|b|p|bp\":{action_:\"o=\",nextState:\"o\"},\"o|d|D|q|qd|qD|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"}},\"$...$\":{a:{action_:\"a=\"},\"0|1|2|3|as|b|p|bp|o\":{action_:\"o=\",nextState:\"o\"},\"as|o\":{action_:\"o=\"},\"q|d|D|qd|qD|dq\":{action_:[\"output\",\"o=\"],nextState:\"o\"}},\"\\\\bond{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"bond\"],nextState:\"3\"}},\"\\\\frac{(...)}\":{\"*\":{action_:[{type_:\"output\",option:1},\"frac-output\"],nextState:\"3\"}},\"\\\\overset{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"overset-output\"],nextState:\"3\"}},\"\\\\underset{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"underset-output\"],nextState:\"3\"}},\"\\\\underbrace{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"underbrace-output\"],nextState:\"3\"}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:[{type_:\"output\",option:2},\"color-output\"],nextState:\"3\"}},\"\\\\color{(...)}0\":{\"*\":{action_:[{type_:\"output\",option:2},\"color0-output\"]}},\"\\\\ce{(...)}\":{\"*\":{action_:[{type_:\"output\",option:2},\"ce\"],nextState:\"3\"}},\"\\\\,\":{\"*\":{action_:[{type_:\"output\",option:1},\"copy\"],nextState:\"1\"}},\"\\\\x{}{}|\\\\x{}|\\\\x\":{\"0|1|2|3|a|as|b|p|bp|o|c0\":{action_:[\"o=\",\"output\"],nextState:\"3\"},\"*\":{action_:[\"output\",\"o=\",\"output\"],nextState:\"3\"}},others:{\"*\":{action_:[{type_:\"output\",option:1},\"copy\"],nextState:\"3\"}},else2:{a:{action_:\"a to o\",nextState:\"o\",revisit:!0},as:{action_:[\"output\",\"sb=true\"],nextState:\"1\",revisit:!0},\"r|rt|rd|rdt|rdq\":{action_:[\"output\"],nextState:\"0\",revisit:!0},\"*\":{action_:[\"output\",\"copy\"],nextState:\"3\"}}}),actions:{\"o after d\":function(t,e){var Q;if((t.d||\"\").match(/^[0-9]+$/)){var T=t.d;t.d=void 0,Q=this.output(t),t.b=T}else Q=this.output(t);return r.actions[\"o=\"](t,e),Q},\"d= kv\":function(t,e){t.d=e,t.dType=\"kv\"},\"charge or bond\":function(t,e){if(t.beginsWithBond){var Q=[];return r.concatArray(Q,this.output(t)),r.concatArray(Q,r.actions.bond(t,e,\"-\")),Q}t.d=e},\"- after o/d\":function(t,e,Q){var T=r.patterns.match_(\"orbital\",t.o||\"\"),n=r.patterns.match_(\"one lowercase greek letter $\",t.o||\"\"),o=r.patterns.match_(\"one lowercase latin letter $\",t.o||\"\"),i=r.patterns.match_(\"$one lowercase latin letter$ $\",t.o||\"\"),a=\"-\"===e&&(T&&\"\"===T.remainder||n||o||i);!a||t.a||t.b||t.p||t.d||t.q||T||!o||(t.o=\"$\"+t.o+\"$\");var s=[];return a?(r.concatArray(s,this.output(t)),s.push({type_:\"hyphen\"})):(T=r.patterns.match_(\"digits\",t.d||\"\"),Q&&T&&\"\"===T.remainder?(r.concatArray(s,r.actions[\"d=\"](t,e)),r.concatArray(s,this.output(t))):(r.concatArray(s,this.output(t)),r.concatArray(s,r.actions.bond(t,e,\"-\")))),s},\"a to o\":function(t){t.o=t.a,t.a=void 0},\"sb=true\":function(t){t.sb=!0},\"sb=false\":function(t){t.sb=!1},\"beginsWithBond=true\":function(t){t.beginsWithBond=!0},\"beginsWithBond=false\":function(t){t.beginsWithBond=!1},\"parenthesisLevel++\":function(t){t.parenthesisLevel++},\"parenthesisLevel--\":function(t){t.parenthesisLevel--},\"state of aggregation\":function(t,e){return{type_:\"state of aggregation\",p1:r.go(e,\"o\")}},comma:function(t,e){var Q=e.replace(/\\s*$/,\"\");return Q!==e&&0===t.parenthesisLevel?{type_:\"comma enumeration L\",p1:Q}:{type_:\"comma enumeration M\",p1:Q}},output:function(t,e,Q){var T,n,o;t.r?(n=\"M\"===t.rdt?r.go(t.rd,\"tex-math\"):\"T\"===t.rdt?[{type_:\"text\",p1:t.rd||\"\"}]:r.go(t.rd),o=\"M\"===t.rqt?r.go(t.rq,\"tex-math\"):\"T\"===t.rqt?[{type_:\"text\",p1:t.rq||\"\"}]:r.go(t.rq),T={type_:\"arrow\",r:t.r,rd:n,rq:o}):(T=[],(t.a||t.b||t.p||t.o||t.q||t.d||Q)&&(t.sb&&T.push({type_:\"entitySkip\"}),t.o||t.q||t.d||t.b||t.p||2===Q?t.o||t.q||t.d||!t.b&&!t.p?t.o&&\"kv\"===t.dType&&r.patterns.match_(\"d-oxidation$\",t.d||\"\")?t.dType=\"oxidation\":t.o&&\"kv\"===t.dType&&!t.q&&(t.dType=void 0):(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):(t.o=t.a,t.a=void 0),T.push({type_:\"chemfive\",a:r.go(t.a,\"a\"),b:r.go(t.b,\"bd\"),p:r.go(t.p,\"pq\"),o:r.go(t.o,\"o\"),q:r.go(t.q,\"pq\"),d:r.go(t.d,\"oxidation\"===t.dType?\"oxidation\":\"bd\"),dType:t.dType})));for(var i in t)\"parenthesisLevel\"!==i&&\"beginsWithBond\"!==i&&delete t[i];return T},\"oxidation-output\":function(t,e){var Q=[\"{\"];return r.concatArray(Q,r.go(e,\"oxidation\")),Q.push(\"}\"),Q},\"frac-output\":function(t,e){return{type_:\"frac-ce\",p1:r.go(e[0]),p2:r.go(e[1])}},\"overset-output\":function(t,e){return{type_:\"overset\",p1:r.go(e[0]),p2:r.go(e[1])}},\"underset-output\":function(t,e){return{type_:\"underset\",p1:r.go(e[0]),p2:r.go(e[1])}},\"underbrace-output\":function(t,e){return{type_:\"underbrace\",p1:r.go(e[0]),p2:r.go(e[1])}},\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:r.go(e[1])}},\"r=\":function(t,e){t.r=e},\"rdt=\":function(t,e){t.rdt=e},\"rd=\":function(t,e){t.rd=e},\"rqt=\":function(t,e){t.rqt=e},\"rq=\":function(t,e){t.rq=e},operator:function(t,e,Q){return{type_:\"operator\",kind_:Q||e}}}},a:{transitions:r.createTransitions({empty:{\"*\":{}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"1\",revisit:!0}},\"$(...)$\":{\"*\":{action_:\"tex-math tight\",nextState:\"1\"}},\",\":{\"*\":{action_:{type_:\"insert\",option:\"commaDecimal\"}}},else2:{\"*\":{action_:\"copy\"}}}),actions:{}},o:{transitions:r.createTransitions({empty:{\"*\":{}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"1\",revisit:!0}},letters:{\"*\":{action_:\"rm\"}},\"\\\\ca\":{\"*\":{action_:{type_:\"insert\",option:\"circa\"}}},\"\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"{text}\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{}},text:{transitions:r.createTransitions({empty:{\"*\":{action_:\"output\"}},\"{...}\":{\"*\":{action_:\"text=\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"\\\\greek\":{\"*\":{action_:[\"output\",\"rm\"]}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:[\"output\",\"copy\"]}},else:{\"*\":{action_:\"text=\"}}}),actions:{output:function(t){if(t.text_){var e={type_:\"text\",p1:t.text_};for(var Q in t)delete t[Q];return e}}}},pq:{transitions:r.createTransitions({empty:{\"*\":{}},\"state of aggregation $\":{\"*\":{action_:\"state of aggregation\"}},i$:{0:{nextState:\"!f\",revisit:!0}},\"(KV letters),\":{0:{action_:\"rm\",nextState:\"0\"}},formula$:{0:{nextState:\"f\",revisit:!0}},\"1/2$\":{0:{action_:\"1/2\"}},else:{0:{nextState:\"!f\",revisit:!0}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"text\"}},\"a-z\":{f:{action_:\"tex-math\"}},letters:{\"*\":{action_:\"rm\"}},\"-9.,9\":{\"*\":{action_:\"9,9\"}},\",\":{\"*\":{action_:{type_:\"insert+p1\",option:\"comma enumeration S\"}}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:\"color-output\"}},\"\\\\color{(...)}0\":{\"*\":{action_:\"color0-output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:\"ce\"}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{\"state of aggregation\":function(t,e){return{type_:\"state of aggregation subscript\",p1:r.go(e,\"o\")}},\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:r.go(e[1],\"pq\")}}}},bd:{transitions:r.createTransitions({empty:{\"*\":{}},x$:{0:{nextState:\"!f\",revisit:!0}},formula$:{0:{nextState:\"f\",revisit:!0}},else:{0:{nextState:\"!f\",revisit:!0}},\"-9.,9 no missing 0\":{\"*\":{action_:\"9,9\"}},\".\":{\"*\":{action_:{type_:\"insert\",option:\"electron dot\"}}},\"a-z\":{f:{action_:\"tex-math\"}},x:{\"*\":{action_:{type_:\"insert\",option:\"KV x\"}}},letters:{\"*\":{action_:\"rm\"}},\"'\":{\"*\":{action_:{type_:\"insert\",option:\"prime\"}}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},\"{(...)}\":{\"*\":{action_:\"text\"}},\"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\":{\"*\":{action_:\"color-output\"}},\"\\\\color{(...)}0\":{\"*\":{action_:\"color0-output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:\"ce\"}},\"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"copy\"}},else2:{\"*\":{action_:\"copy\"}}}),actions:{\"color-output\":function(t,e){return{type_:\"color\",color1:e[0],color2:r.go(e[1],\"bd\")}}}},oxidation:{transitions:r.createTransitions({empty:{\"*\":{}},\"roman numeral\":{\"*\":{action_:\"roman-numeral\"}},\"${(...)}$|$(...)$\":{\"*\":{action_:\"tex-math\"}},else:{\"*\":{action_:\"copy\"}}}),actions:{\"roman-numeral\":function(t,e){return{type_:\"roman numeral\",p1:e||\"\"}}}},\"tex-math\":{transitions:r.createTransitions({empty:{\"*\":{action_:\"output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:[\"output\",\"ce\"]}},\"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"o=\"}},else:{\"*\":{action_:\"o=\"}}}),actions:{output:function(t){if(t.o){var e={type_:\"tex-math\",p1:t.o};for(var Q in t)delete t[Q];return e}}}},\"tex-math tight\":{transitions:r.createTransitions({empty:{\"*\":{action_:\"output\"}},\"\\\\ce{(...)}\":{\"*\":{action_:[\"output\",\"ce\"]}},\"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\":{\"*\":{action_:\"o=\"}},\"-|+\":{\"*\":{action_:\"tight operator\"}},else:{\"*\":{action_:\"o=\"}}}),actions:{\"tight operator\":function(t,e){t.o=(t.o||\"\")+\"{\"+e+\"}\"},output:function(t){if(t.o){var e={type_:\"tex-math\",p1:t.o};for(var Q in t)delete t[Q];return e}}}},\"9,9\":{transitions:r.createTransitions({empty:{\"*\":{}},\",\":{\"*\":{action_:\"comma\"}},else:{\"*\":{action_:\"copy\"}}}),actions:{comma:function(){return{type_:\"commaDecimal\"}}}},pu:{transitions:r.createTransitions({empty:{\"*\":{action_:\"output\"}},space$:{\"*\":{action_:[\"output\",\"space\"]}},\"{[(|)]}\":{\"0|a\":{action_:\"copy\"}},\"(-)(9)^(-9)\":{0:{action_:\"number^\",nextState:\"a\"}},\"(-)(9.,9)(e)(99)\":{0:{action_:\"enumber\",nextState:\"a\"}},space:{\"0|a\":{}},\"pm-operator\":{\"0|a\":{action_:{type_:\"operator\",option:\"\\\\pm\"},nextState:\"0\"}},operator:{\"0|a\":{action_:\"copy\",nextState:\"0\"}},\"//\":{d:{action_:\"o=\",nextState:\"/\"}},\"/\":{d:{action_:\"o=\",nextState:\"/\"}},\"{...}|else\":{\"0|d\":{action_:\"d=\",nextState:\"d\"},a:{action_:[\"space\",\"d=\"],nextState:\"d\"},\"/|q\":{action_:\"q=\",nextState:\"q\"}}}),actions:{enumber:function(t,e){var Q=[];return\"+-\"===e[0]||\"+/-\"===e[0]?Q.push(\"\\\\pm \"):e[0]&&Q.push(e[0]),e[1]&&(r.concatArray(Q,r.go(e[1],\"pu-9,9\")),e[2]&&(e[2].match(/[,.]/)?r.concatArray(Q,r.go(e[2],\"pu-9,9\")):Q.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),\"e\"===e[3]||\"*\"===e[3].substr(0,1)?Q.push({type_:\"cdot\"}):Q.push({type_:\"times\"}))),e[3]&&Q.push(\"10^{\"+e[5]+\"}\"),Q},\"number^\":function(t,e){var Q=[];return\"+-\"===e[0]||\"+/-\"===e[0]?Q.push(\"\\\\pm \"):e[0]&&Q.push(e[0]),r.concatArray(Q,r.go(e[1],\"pu-9,9\")),Q.push(\"^{\"+e[2]+\"}\"),Q},operator:function(t,e,Q){return{type_:\"operator\",kind_:Q||e}},space:function(){return{type_:\"pu-space-1\"}},output:function(t){var e,Q=r.patterns.match_(\"{(...)}\",t.d||\"\");Q&&\"\"===Q.remainder&&(t.d=Q.match_);var T=r.patterns.match_(\"{(...)}\",t.q||\"\");if(T&&\"\"===T.remainder&&(t.q=T.match_),t.d&&(t.d=t.d.replace(/\\u00B0C|\\^oC|\\^{o}C/g,\"{}^{\\\\circ}C\"),t.d=t.d.replace(/\\u00B0F|\\^oF|\\^{o}F/g,\"{}^{\\\\circ}F\")),t.q){t.q=t.q.replace(/\\u00B0C|\\^oC|\\^{o}C/g,\"{}^{\\\\circ}C\"),t.q=t.q.replace(/\\u00B0F|\\^oF|\\^{o}F/g,\"{}^{\\\\circ}F\");var n={d:r.go(t.d,\"pu\"),q:r.go(t.q,\"pu\")};\"//\"===t.o?e={type_:\"pu-frac\",p1:n.d,p2:n.q}:(e=n.d,n.d.length>1||n.q.length>1?e.push({type_:\" / \"}):e.push({type_:\"/\"}),r.concatArray(e,n.q))}else e=r.go(t.d,\"pu-2\");for(var o in t)delete t[o];return e}}},\"pu-2\":{transitions:r.createTransitions({empty:{\"*\":{action_:\"output\"}},\"*\":{\"*\":{action_:[\"output\",\"cdot\"],nextState:\"0\"}},\"\\\\x\":{\"*\":{action_:\"rm=\"}},space:{\"*\":{action_:[\"output\",\"space\"],nextState:\"0\"}},\"^{(...)}|^(-1)\":{1:{action_:\"^(-1)\"}},\"-9.,9\":{0:{action_:\"rm=\",nextState:\"0\"},1:{action_:\"^(-1)\",nextState:\"0\"}},\"{...}|else\":{\"*\":{action_:\"rm=\",nextState:\"1\"}}}),actions:{cdot:function(){return{type_:\"tight cdot\"}},\"^(-1)\":function(t,e){t.rm+=\"^{\"+e+\"}\"},space:function(){return{type_:\"pu-space-2\"}},output:function(t){var e=[];if(t.rm){var Q=r.patterns.match_(\"{(...)}\",t.rm||\"\");e=Q&&\"\"===Q.remainder?r.go(Q.match_,\"pu\"):{type_:\"rm\",p1:t.rm}}for(var T in t)delete t[T];return e}}},\"pu-9,9\":{transitions:r.createTransitions({empty:{0:{action_:\"output-0\"},o:{action_:\"output-o\"}},\",\":{0:{action_:[\"output-0\",\"comma\"],nextState:\"o\"}},\".\":{0:{action_:[\"output-0\",\"copy\"],nextState:\"o\"}},else:{\"*\":{action_:\"text=\"}}}),actions:{comma:function(){return{type_:\"commaDecimal\"}},\"output-0\":function(t){var e=[];if(t.text_=t.text_||\"\",t.text_.length>4){var Q=t.text_.length%3;0===Q&&(Q=3);for(var r=t.text_.length-3;r>0;r-=3)e.push(t.text_.substr(r,3)),e.push({type_:\"1000 separator\"});e.push(t.text_.substr(0,Q)),e.reverse()}else e.push(t.text_);for(var T in t)delete t[T];return e},\"output-o\":function(t){var e=[];if(t.text_=t.text_||\"\",t.text_.length>4){for(var Q=t.text_.length-3,r=0;r<Q;r+=3)e.push(t.text_.substr(r,3)),e.push({type_:\"1000 separator\"});e.push(t.text_.substr(r))}else e.push(t.text_);for(var T in t)delete t[T];return e}}}};var T={go:function(t,e){if(!t)return\"\";for(var Q=\"\",r=!1,n=0;n<t.length;n++){var o=t[n];\"string\"==typeof o?Q+=o:(Q+=T._go2(o),\"1st-level escape\"===o.type_&&(r=!0))}return e||r||!Q||(Q=\"{\"+Q+\"}\"),Q},_goInner:function(t){return t?T.go(t,!0):t},_go2:function(t){var e;switch(t.type_){case\"chemfive\":e=\"\";var Q={a:T._goInner(t.a),b:T._goInner(t.b),p:T._goInner(t.p),o:T._goInner(t.o),q:T._goInner(t.q),d:T._goInner(t.d)};Q.a&&(Q.a.match(/^[+\\-]/)&&(Q.a=\"{\"+Q.a+\"}\"),e+=Q.a+\"\\\\,\"),(Q.b||Q.p)&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\\\\hphantom{\"+(Q.b||\"\")+\"}}_{\\\\hphantom{\"+(Q.p||\"\")+\"}}\",e+=\"{\\\\vphantom{X}}\",e+=\"^{\\\\smash[t]{\\\\vphantom{2}}\\\\llap{\"+(Q.b||\"\")+\"}}\",e+=\"_{\\\\vphantom{2}\\\\llap{\\\\smash[t]{\"+(Q.p||\"\")+\"}}}\"),Q.o&&(Q.o.match(/^[+\\-]/)&&(Q.o=\"{\"+Q.o+\"}\"),e+=Q.o),\"kv\"===t.dType?((Q.d||Q.q)&&(e+=\"{\\\\vphantom{X}}\"),Q.d&&(e+=\"^{\"+Q.d+\"}\"),Q.q&&(e+=\"_{\\\\smash[t]{\"+Q.q+\"}}\")):\"oxidation\"===t.dType?(Q.d&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\"+Q.d+\"}\"),Q.q&&(e+=\"{\\\\vphantom{X}}\",e+=\"_{\\\\smash[t]{\"+Q.q+\"}}\")):(Q.q&&(e+=\"{\\\\vphantom{X}}\",e+=\"_{\\\\smash[t]{\"+Q.q+\"}}\"),Q.d&&(e+=\"{\\\\vphantom{X}}\",e+=\"^{\"+Q.d+\"}\"));break;case\"rm\":e=\"\\\\mathrm{\"+t.p1+\"}\";break;case\"text\":t.p1.match(/[\\^_]/)?(t.p1=t.p1.replace(\" \",\"~\").replace(\"-\",\"\\\\text{-}\"),e=\"\\\\mathrm{\"+t.p1+\"}\"):e=\"\\\\text{\"+t.p1+\"}\";break;case\"roman numeral\":e=\"\\\\mathrm{\"+t.p1+\"}\";break;case\"state of aggregation\":e=\"\\\\mskip2mu \"+T._goInner(t.p1);break;case\"state of aggregation subscript\":e=\"\\\\mskip1mu \"+T._goInner(t.p1);break;case\"bond\":if(!(e=T._getBond(t.kind_)))throw[\"MhchemErrorBond\",\"mhchem Error. Unknown bond type (\"+t.kind_+\")\"];break;case\"frac\":var r=\"\\\\frac{\"+t.p1+\"}{\"+t.p2+\"}\";e=\"\\\\mathchoice{\\\\textstyle\"+r+\"}{\"+r+\"}{\"+r+\"}{\"+r+\"}\";break;case\"pu-frac\":var n=\"\\\\frac{\"+T._goInner(t.p1)+\"}{\"+T._goInner(t.p2)+\"}\";e=\"\\\\mathchoice{\\\\textstyle\"+n+\"}{\"+n+\"}{\"+n+\"}{\"+n+\"}\";break;case\"tex-math\":e=t.p1+\" \";break;case\"frac-ce\":e=\"\\\\frac{\"+T._goInner(t.p1)+\"}{\"+T._goInner(t.p2)+\"}\";break;case\"overset\":e=\"\\\\overset{\"+T._goInner(t.p1)+\"}{\"+T._goInner(t.p2)+\"}\";break;case\"underset\":e=\"\\\\underset{\"+T._goInner(t.p1)+\"}{\"+T._goInner(t.p2)+\"}\";break;case\"underbrace\":e=\"\\\\underbrace{\"+T._goInner(t.p1)+\"}_{\"+T._goInner(t.p2)+\"}\";break;case\"color\":e=\"{\\\\color{\"+t.color1+\"}{\"+T._goInner(t.color2)+\"}}\";break;case\"color0\":e=\"\\\\color{\"+t.color+\"}\";break;case\"arrow\":var o={rd:T._goInner(t.rd),rq:T._goInner(t.rq)},i=T._getArrow(t.r);o.rd||o.rq?\"<=>\"===t.r||\"<=>>\"===t.r||\"<<=>\"===t.r||\"<--\\x3e\"===t.r?(i=\"\\\\long\"+i,o.rd&&(i=\"\\\\overset{\"+o.rd+\"}{\"+i+\"}\"),o.rq&&(i=\"\\\\underset{\\\\lower7mu{\"+o.rq+\"}}{\"+i+\"}\"),i=\" {}\\\\mathrel{\"+i+\"}{} \"):(o.rq&&(i+=\"[{\"+o.rq+\"}]\"),i=\" {}\\\\mathrel{\\\\x\"+(i+=\"{\"+o.rd+\"}\")+\"}{} \"):i=\" {}\\\\mathrel{\\\\long\"+i+\"}{} \",e=i;break;case\"operator\":e=T._getOperator(t.kind_);break;case\"1st-level escape\":e=t.p1+\" \";break;case\"space\":e=\" \";break;case\"entitySkip\":case\"pu-space-1\":e=\"~\";break;case\"pu-space-2\":e=\"\\\\mkern3mu \";break;case\"1000 separator\":e=\"\\\\mkern2mu \";break;case\"commaDecimal\":e=\"{,}\";break;case\"comma enumeration L\":e=\"{\"+t.p1+\"}\\\\mkern6mu \";break;case\"comma enumeration M\":e=\"{\"+t.p1+\"}\\\\mkern3mu \";break;case\"comma enumeration S\":e=\"{\"+t.p1+\"}\\\\mkern1mu \";break;case\"hyphen\":e=\"\\\\text{-}\";break;case\"addition compound\":e=\"\\\\,{\\\\cdot}\\\\,\";break;case\"electron dot\":e=\"\\\\mkern1mu \\\\bullet\\\\mkern1mu \";break;case\"KV x\":e=\"{\\\\times}\";break;case\"prime\":e=\"\\\\prime \";break;case\"cdot\":e=\"\\\\cdot \";break;case\"tight cdot\":e=\"\\\\mkern1mu{\\\\cdot}\\\\mkern1mu \";break;case\"times\":e=\"\\\\times \";break;case\"circa\":e=\"{\\\\sim}\";break;case\"^\":e=\"uparrow\";break;case\"v\":e=\"downarrow\";break;case\"ellipsis\":e=\"\\\\ldots \";break;case\"/\":e=\"/\";break;case\" / \":e=\"\\\\,/\\\\,\";break;default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}return e},_getArrow:function(t){switch(t){case\"->\":case\"\\u2192\":case\"\\u27f6\":return\"rightarrow\";case\"<-\":return\"leftarrow\";case\"<->\":return\"leftrightarrow\";case\"<--\\x3e\":return\"leftrightarrows\";case\"<=>\":case\"\\u21cc\":return\"rightleftharpoons\";case\"<=>>\":return\"Rightleftharpoons\";case\"<<=>\":return\"Leftrightharpoons\";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}},_getBond:function(t){switch(t){case\"-\":case\"1\":return\"{-}\";case\"=\":case\"2\":return\"{=}\";case\"#\":case\"3\":return\"{\\\\equiv}\";case\"~\":return\"{\\\\tripledash}\";case\"~-\":return\"{\\\\rlap{\\\\lower.1em{-}}\\\\raise.1em{\\\\tripledash}}\";case\"~=\":case\"~--\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{\\\\tripledash}}-}\";case\"-~-\":return\"{\\\\rlap{\\\\lower.2em{-}}\\\\rlap{\\\\raise.2em{-}}\\\\tripledash}\";case\"...\":return\"{{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";case\"....\":return\"{{\\\\cdot}{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";case\"->\":return\"{\\\\rightarrow}\";case\"<-\":return\"{\\\\leftarrow}\";case\"<\":return\"{<}\";case\">\":return\"{>}\";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}},_getOperator:function(t){switch(t){case\"+\":return\" {}+{} \";case\"-\":return\" {}-{} \";case\"=\":return\" {}={} \";case\"<\":return\" {}<{} \";case\">\":return\" {}>{} \";case\"<<\":return\" {}\\\\ll{} \";case\">>\":return\" {}\\\\gg{} \";case\"\\\\pm\":return\" {}\\\\pm{} \";case\"\\\\approx\":case\"$\\\\approx$\":return\" {}\\\\approx{} \";case\"v\":case\"(v)\":return\" \\\\downarrow{} \";case\"^\":case\"(^)\":return\" \\\\uparrow{} \";default:throw[\"MhchemBugT\",\"mhchem bug T. Please report.\"]}}};function n(t){}function o(t){}e.mhchemParser=r,e.texify=T,e.assertNever=n,e.assertString=o},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(3),T=Q(161),n=Q(13),o=Q(23),i=Q(0);new r.CommandMap(\"Physics-automatic-bracing-macros\",{quantity:\"Quantity\",qty:\"Quantity\",pqty:[\"Quantity\",\"(\",\")\",!0],bqty:[\"Quantity\",\"[\",\"]\",!0],vqty:[\"Quantity\",\"|\",\"|\",!0],Bqty:[\"Quantity\",\"{\",\"}\",!0],absolutevalue:[\"Quantity\",\"|\",\"|\",!0],abs:[\"Quantity\",\"|\",\"|\",!0],norm:[\"Quantity\",\"\\\\|\",\"\\\\|\",!0],evaluated:\"Eval\",eval:\"Eval\",order:[\"Quantity\",\"(\",\")\",!0,\"O\",n.TexConstant.Variant.CALLIGRAPHIC],commutator:\"Commutator\",comm:\"Commutator\",anticommutator:[\"Commutator\",\"\\\\{\",\"\\\\}\"],acomm:[\"Commutator\",\"\\\\{\",\"\\\\}\"],poissonbracket:[\"Commutator\",\"\\\\{\",\"\\\\}\"],pb:[\"Commutator\",\"\\\\{\",\"\\\\}\"]},T.default),new r.CharacterMap(\"Physics-vector-chars\",o.default.mathchar0mi,{dotproduct:[\"\\u22c5\",{mathvariant:n.TexConstant.Variant.BOLD}],vdot:[\"\\u22c5\",{mathvariant:n.TexConstant.Variant.BOLD}],crossproduct:\"\\xd7\",cross:\"\\xd7\",cp:\"\\xd7\",gradientnabla:[\"\\u2207\",{mathvariant:n.TexConstant.Variant.BOLD}],real:[\"\\u211c\",{mathvariant:n.TexConstant.Variant.NORMAL}],imaginary:[\"\\u2111\",{mathvariant:n.TexConstant.Variant.NORMAL}]}),new r.CommandMap(\"Physics-vector-macros\",{vectorbold:\"VectorBold\",vb:\"VectorBold\",vectorarrow:[\"StarMacro\",1,\"\\\\vec{\\\\vb\",\"{#1}}\"],va:[\"StarMacro\",1,\"\\\\vec{\\\\vb\",\"{#1}}\"],vectorunit:[\"StarMacro\",1,\"\\\\hat{\\\\vb\",\"{#1}}\"],vu:[\"StarMacro\",1,\"\\\\hat{\\\\vb\",\"{#1}}\"],gradient:[\"OperatorApplication\",\"\\\\gradientnabla\",\"(\",\"[\"],grad:[\"OperatorApplication\",\"\\\\gradientnabla\",\"(\",\"[\"],divergence:[\"VectorOperator\",\"\\\\gradientnabla\\\\vdot\",\"(\",\"[\"],div:[\"VectorOperator\",\"\\\\gradientnabla\\\\vdot\",\"(\",\"[\"],curl:[\"VectorOperator\",\"\\\\gradientnabla\\\\crossproduct\",\"(\",\"[\"],laplacian:[\"OperatorApplication\",\"\\\\nabla^2\",\"(\",\"[\"]},T.default),new r.CommandMap(\"Physics-expressions-macros\",{sin:\"Expression\",sinh:\"Expression\",arcsin:\"Expression\",asin:\"Expression\",cos:\"Expression\",cosh:\"Expression\",arccos:\"Expression\",acos:\"Expression\",tan:\"Expression\",tanh:\"Expression\",arctan:\"Expression\",atan:\"Expression\",csc:\"Expression\",csch:\"Expression\",arccsc:\"Expression\",acsc:\"Expression\",sec:\"Expression\",sech:\"Expression\",arcsec:\"Expression\",asec:\"Expression\",cot:\"Expression\",coth:\"Expression\",arccot:\"Expression\",acot:\"Expression\",exp:[\"Expression\",!1],log:\"Expression\",ln:\"Expression\",det:[\"Expression\",!1],Pr:[\"Expression\",!1],tr:[\"Expression\",!1],trace:[\"Expression\",!1,\"tr\"],Tr:[\"Expression\",!1],Trace:[\"Expression\",!1,\"Tr\"],rank:\"NamedFn\",erf:[\"Expression\",!1],Res:[\"OperatorApplication\",\"{\\\\rm Res}\",\"(\",\"[\",\"{\"],principalvalue:[\"OperatorApplication\",\"{\\\\cal P}\"],pv:[\"OperatorApplication\",\"{\\\\cal P}\"],PV:[\"OperatorApplication\",\"{\\\\rm P.V.}\"],Re:[\"OperatorApplication\",\"{\\\\rm Re}\",\"{\"],Im:[\"OperatorApplication\",\"{\\\\rm Im}\",\"{\"],sine:[\"NamedFn\",\"sin\"],hypsine:[\"NamedFn\",\"sinh\"],arcsine:[\"NamedFn\",\"arcsin\"],asine:[\"NamedFn\",\"asin\"],cosine:[\"NamedFn\",\"cos\"],hypcosine:[\"NamedFn\",\"cosh\"],arccosine:[\"NamedFn\",\"arccos\"],acosine:[\"NamedFn\",\"acos\"],tangent:[\"NamedFn\",\"tan\"],hyptangent:[\"NamedFn\",\"tanh\"],arctangent:[\"NamedFn\",\"arctan\"],atangent:[\"NamedFn\",\"atan\"],cosecant:[\"NamedFn\",\"csc\"],hypcosecant:[\"NamedFn\",\"csch\"],arccosecant:[\"NamedFn\",\"arccsc\"],acosecant:[\"NamedFn\",\"acsc\"],secant:[\"NamedFn\",\"sec\"],hypsecant:[\"NamedFn\",\"sech\"],arcsecant:[\"NamedFn\",\"arcsec\"],asecant:[\"NamedFn\",\"asec\"],cotangent:[\"NamedFn\",\"cot\"],hypcotangent:[\"NamedFn\",\"coth\"],arccotangent:[\"NamedFn\",\"arccot\"],acotangent:[\"NamedFn\",\"acot\"],exponential:[\"NamedFn\",\"exp\"],logarithm:[\"NamedFn\",\"log\"],naturallogarithm:[\"NamedFn\",\"ln\"],determinant:[\"NamedFn\",\"det\"],Probability:[\"NamedFn\",\"Pr\"]},T.default),new r.CommandMap(\"Physics-quick-quad-macros\",{qqtext:\"Qqtext\",qq:\"Qqtext\",qcomma:[\"Macro\",\"\\\\qqtext*{,}\"],qc:[\"Macro\",\"\\\\qqtext*{,}\"],qcc:[\"Qqtext\",\"c.c.\"],qif:[\"Qqtext\",\"if\"],qthen:[\"Qqtext\",\"then\"],qelse:[\"Qqtext\",\"else\"],qotherwise:[\"Qqtext\",\"otherwise\"],qunless:[\"Qqtext\",\"unless\"],qgiven:[\"Qqtext\",\"given\"],qusing:[\"Qqtext\",\"using\"],qassume:[\"Qqtext\",\"assume\"],\"qsince,\":[\"Qqtext\",\"since,\"],qlet:[\"Qqtext\",\"let\"],qfor:[\"Qqtext\",\"for\"],qall:[\"Qqtext\",\"all\"],qeven:[\"Qqtext\",\"even\"],qodd:[\"Qqtext\",\"odd\"],qinteger:[\"Qqtext\",\"integer\"],qand:[\"Qqtext\",\"and\"],qor:[\"Qqtext\",\"or\"],qas:[\"Qqtext\",\"as\"],qin:[\"Qqtext\",\"in\"]},T.default),new r.CommandMap(\"Physics-derivative-macros\",{flatfrac:[\"Macro\",\"\\\\left.#1\\\\middle/#2\\\\right.\",2],differential:[\"Differential\",\"{\\\\rm d}\"],dd:[\"Differential\",\"{\\\\rm d}\"],variation:[\"Differential\",\"\\\\delta\"],var:[\"Differential\",\"\\\\delta\"],derivative:[\"Derivative\",2,\"{\\\\rm d}\"],dv:[\"Derivative\",2,\"{\\\\rm d}\"],partialderivative:[\"Derivative\",3,\"\\\\partial\"],pderivative:[\"Derivative\",3,\"\\\\partial\"],pdv:[\"Derivative\",3,\"\\\\partial\"],functionalderivative:[\"Derivative\",2,\"\\\\delta\"],fderivative:[\"Derivative\",2,\"\\\\delta\"],fdv:[\"Derivative\",2,\"\\\\delta\"]},T.default),new r.CommandMap(\"Physics-bra-ket-macros\",{bra:\"Bra\",ket:\"Ket\",innerproduct:\"BraKet\",braket:\"BraKet\",outerproduct:\"KetBra\",dyad:\"KetBra\",ketbra:\"KetBra\",op:\"KetBra\",expectationvalue:\"Expectation\",expval:\"Expectation\",ev:\"Expectation\",matrixelement:\"MatrixElement\",matrixel:\"MatrixElement\",mel:\"MatrixElement\"},T.default),new r.CommandMap(\"Physics-matrix-macros\",{matrixquantity:\"MatrixQuantity\",mqty:\"MatrixQuantity\",pmqty:[\"Macro\",\"\\\\mqty(#1)\",1],Pmqty:[\"Macro\",\"\\\\mqty*(#1)\",1],bmqty:[\"Macro\",\"\\\\mqty[#1]\",1],vmqty:[\"Macro\",\"\\\\mqty|#1|\",1],smallmatrixquantity:[\"MatrixQuantity\",!0],smqty:[\"MatrixQuantity\",!0],spmqty:[\"Macro\",\"\\\\smqty(#1)\",1],sPmqty:[\"Macro\",\"\\\\smqty*(#1)\",1],sbmqty:[\"Macro\",\"\\\\smqty[#1]\",1],svmqty:[\"Macro\",\"\\\\smqty|#1|\",1],matrixdeterminant:[\"Macro\",\"\\\\vmqty{#1}\",1],mdet:[\"Macro\",\"\\\\vmqty{#1}\",1],smdet:[\"Macro\",\"\\\\svmqty{#1}\",1],identitymatrix:\"IdentityMatrix\",imat:\"IdentityMatrix\",xmatrix:\"XMatrix\",xmat:\"XMatrix\",zeromatrix:[\"Macro\",\"\\\\xmat{0}{#1}{#2}\",2],zmat:[\"Macro\",\"\\\\xmat{0}{#1}{#2}\",2],paulimatrix:\"PauliMatrix\",pmat:\"PauliMatrix\",diagonalmatrix:\"DiagonalMatrix\",dmat:\"DiagonalMatrix\",antidiagonalmatrix:[\"DiagonalMatrix\",!0],admat:[\"DiagonalMatrix\",!0]},T.default),new r.EnvironmentMap(\"Physics-aux-envs\",o.default.environment,{smallmatrix:[\"Array\",null,null,null,\"c\",\"0.333em\",\".2em\",\"S\",1]},T.default),new r.MacroMap(\"Physics-characters\",{\"|\":[\"AutoClose\",i.TEXCLASS.ORD],\")\":\"AutoClose\",\"]\":\"AutoClose\"},T.default)},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(3),T=Q(13),n=Q(90);new r.MacroMap(\"text-special\",{$:\"Math\",\"%\":\"Comment\",\"^\":\"MathModeOnly\",_:\"MathModeOnly\",\"&\":\"Misplaced\",\"#\":\"Misplaced\",\"~\":\"Tilde\",\" \":\"Space\",\"\\t\":\"Space\",\"\\r\":\"Space\",\"\\n\":\"Space\",\"\\xa0\":\"Tilde\",\"{\":\"OpenBrace\",\"}\":\"CloseBrace\",\"`\":\"OpenQuote\",\"'\":\"CloseQuote\"},n.TextMacrosMethods),new r.CommandMap(\"text-macros\",{\"(\":\"Math\",$:\"SelfQuote\",_:\"SelfQuote\",\"%\":\"SelfQuote\",\"{\":\"SelfQuote\",\"}\":\"SelfQuote\",\" \":\"SelfQuote\",\"&\":\"SelfQuote\",\"#\":\"SelfQuote\",\"\\\\\":\"SelfQuote\",\"'\":[\"Accent\",\"\\xb4\"],\"\\u2019\":[\"Accent\",\"\\xb4\"],\"`\":[\"Accent\",\"`\"],\"\\u2018\":[\"Accent\",\"`\"],\"^\":[\"Accent\",\"^\"],'\"':[\"Accent\",\"\\xa8\"],\"~\":[\"Accent\",\"~\"],\"=\":[\"Accent\",\"\\xaf\"],\".\":[\"Accent\",\"\\u02d9\"],u:[\"Accent\",\"\\u02d8\"],v:[\"Accent\",\"\\u02c7\"],emph:\"Emph\",rm:[\"SetFont\",T.TexConstant.Variant.NORMAL],mit:[\"SetFont\",T.TexConstant.Variant.ITALIC],oldstyle:[\"SetFont\",T.TexConstant.Variant.OLDSTYLE],cal:[\"SetFont\",T.TexConstant.Variant.CALLIGRAPHIC],it:[\"SetFont\",\"-tex-mathit\"],bf:[\"SetFont\",T.TexConstant.Variant.BOLD],bbFont:[\"SetFont\",T.TexConstant.Variant.DOUBLESTRUCK],scr:[\"SetFont\",T.TexConstant.Variant.SCRIPT],frak:[\"SetFont\",T.TexConstant.Variant.FRAKTUR],sf:[\"SetFont\",T.TexConstant.Variant.SANSSERIF],tt:[\"SetFont\",T.TexConstant.Variant.MONOSPACE],tiny:[\"SetSize\",.5],Tiny:[\"SetSize\",.6],scriptsize:[\"SetSize\",.7],small:[\"SetSize\",.85],normalsize:[\"SetSize\",1],large:[\"SetSize\",1.2],Large:[\"SetSize\",1.44],LARGE:[\"SetSize\",1.73],huge:[\"SetSize\",2.07],Huge:[\"SetSize\",2.49],mathcal:\"MathModeOnly\",mathscr:\"MathModeOnly\",mathrm:\"MathModeOnly\",mathbf:\"MathModeOnly\",mathbb:\"MathModeOnly\",mathit:\"MathModeOnly\",mathfrak:\"MathModeOnly\",mathsf:\"MathModeOnly\",mathtt:\"MathModeOnly\",Bbb:[\"Macro\",\"{\\\\bbFont #1}\",1],textrm:[\"Macro\",\"{\\\\rm #1}\",1],textit:[\"Macro\",\"{\\\\it #1}\",1],textbf:[\"Macro\",\"{\\\\bf #1}\",1],textsf:[\"Macro\",\"{\\\\sf #1}\",1],texttt:[\"Macro\",\"{\\\\tt #1}\",1],dagger:[\"Insert\",\"\\u2020\"],ddagger:[\"Insert\",\"\\u2021\"],S:[\"Insert\",\"\\xa7\"],\",\":[\"Spacer\",T.TexConstant.Length.THINMATHSPACE],\":\":[\"Spacer\",T.TexConstant.Length.MEDIUMMATHSPACE],\">\":[\"Spacer\",T.TexConstant.Length.MEDIUMMATHSPACE],\";\":[\"Spacer\",T.TexConstant.Length.THICKMATHSPACE],\"!\":[\"Spacer\",T.TexConstant.Length.NEGATIVETHINMATHSPACE],enspace:[\"Spacer\",\".5em\"],quad:[\"Spacer\",\"1em\"],qquad:[\"Spacer\",\"2em\"],thinspace:[\"Spacer\",T.TexConstant.Length.THINMATHSPACE],negthinspace:[\"Spacer\",T.TexConstant.Length.NEGATIVETHINMATHSPACE],hskip:\"Hskip\",hspace:\"Hskip\",kern:\"Hskip\",mskip:\"Hskip\",mspace:\"Hskip\",mkern:\"Hskip\",rule:\"rule\",Rule:[\"Rule\"],Space:[\"Rule\",\"blank\"],color:\"CheckAutoload\",textcolor:\"CheckAutoload\",colorbox:\"CheckAutoload\",fcolorbox:\"CheckAutoload\",href:\"CheckAutoload\",style:\"CheckAutoload\",class:\"CheckAutoload\",cssId:\"CheckAutoload\",unicode:\"CheckAutoload\",ref:[\"HandleRef\",!1],eqref:[\"HandleRef\",!0]},n.TextMacrosMethods)},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,Q=1,r=arguments.length;Q<r;Q++)for(var T in e=arguments[Q])Object.prototype.hasOwnProperty.call(e,T)&&(t[T]=e[T]);return t}).apply(this,arguments)},o=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},i=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommonTeXFontMixin=void 0,e.CommonTeXFontMixin=function(t){var e;return(e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return T(e,t),e.prototype.getDelimiterData=function(t){return this.getChar(\"-smallop\",t)||this.getChar(\"-size4\",t)},e}(t)).defaultVariants=i(t.defaultVariants,[[\"-smallop\",\"normal\"],[\"-largeop\",\"normal\"],[\"-size3\",\"normal\"],[\"-size4\",\"normal\"],[\"-tex-calligraphic\",\"italic\"],[\"-tex-bold-calligraphic\",\"bold-italic\"],[\"-tex-oldstyle\",\"normal\"],[\"-tex-bold-oldstyle\",\"bold\"],[\"-tex-mathit\",\"italic\"],[\"-tex-variant\",\"normal\"]]),e.defaultCssFonts=n(n({},t.defaultCssFonts),{\"-smallop\":[\"serif\",!1,!1],\"-largeop\":[\"serif\",!1,!1],\"-size3\":[\"serif\",!1,!1],\"-size4\":[\"serif\",!1,!1],\"-tex-calligraphic\":[\"cursive\",!0,!1],\"-tex-bold-calligraphic\":[\"cursive\",!0,!0],\"-tex-oldstyle\":[\"serif\",!1,!1],\"-tex-bold-oldstyle\":[\"serif\",!1,!0],\"-tex-mathit\":[\"serif\",!0,!1]}),e.defaultSizeVariants=[\"normal\",\"-smallop\",\"-largeop\",\"-size3\",\"-size4\"],e}},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(224);Object.defineProperty(e,\"doubleStruck\",{enumerable:!0,get:function(){return r.doubleStruck}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(245);Object.defineProperty(e,\"scriptBold\",{enumerable:!0,get:function(){return r.scriptBold}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=Q(246);Object.defineProperty(e,\"script\",{enumerable:!0,get:function(){return r.script}})},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractNavigatable=void 0;var r=Q(51),T=Q(297),n=function(){function t(){this.bubble=!1}return t.prototype.bubbleKey=function(){this.bubble=!0},t.prototype.keydown=function(t){switch(t.keyCode){case r.KEY.ESCAPE:this.escape(t);break;case r.KEY.RIGHT:this.right(t);break;case r.KEY.LEFT:this.left(t);break;case r.KEY.UP:this.up(t);break;case r.KEY.DOWN:this.down(t);break;case r.KEY.RETURN:case r.KEY.SPACE:this.space(t);break;default:return}this.bubble?this.bubble=!1:this.stop(t)},t.prototype.escape=function(t){},t.prototype.space=function(t){},t.prototype.left=function(t){},t.prototype.right=function(t){},t.prototype.up=function(t){},t.prototype.down=function(t){},t.prototype.stop=function(t){t&&(t.stopPropagation(),t.preventDefault(),t.cancelBubble=!0)},t.prototype.mousedown=function(t){return this.stop(t)},t.prototype.mouseup=function(t){return this.stop(t)},t.prototype.mouseover=function(t){return this.stop(t)},t.prototype.mouseout=function(t){return this.stop(t)},t.prototype.click=function(t){return this.stop(t)},t.prototype.addEvents=function(t){t.addEventListener(T.MOUSE.DOWN,this.mousedown.bind(this)),t.addEventListener(T.MOUSE.UP,this.mouseup.bind(this)),t.addEventListener(T.MOUSE.OVER,this.mouseover.bind(this)),t.addEventListener(T.MOUSE.OUT,this.mouseout.bind(this)),t.addEventListener(T.MOUSE.CLICK,this.click.bind(this)),t.addEventListener(\"keydown\",this.keydown.bind(this)),t.addEventListener(\"dragstart\",this.stop.bind(this)),t.addEventListener(T.MOUSE.SELECTSTART,this.stop.bind(this)),t.addEventListener(\"contextmenu\",this.stop.bind(this)),t.addEventListener(T.MOUSE.DBLCLICK,this.stop.bind(this))},t}();e.AbstractNavigatable=n},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MOUSE=void 0,e.MOUSE={CLICK:\"click\",DBLCLICK:\"dblclick\",DOWN:\"mousedown\",UP:\"mouseup\",OVER:\"mouseover\",OUT:\"mouseout\",MOVE:\"mousemove\",SELECTEND:\"selectend\",SELECTSTART:\"selectstart\"}},function(t,e,Q){\"use strict\";var r=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")};Object.defineProperty(e,\"__esModule\",{value:!0}),e.MenuStore=void 0;var T=Q(17),n=Q(10),o=Q(51),i=function(){function t(t){this.menu=t,this.store=[],this._active=null,this.counter=0,this.attachedClass=n.HtmlClasses.ATTACHED+\"_\"+T.MenuUtil.counter(),this.taborder=!0,this.attrMap={}}return Object.defineProperty(t.prototype,\"active\",{get:function(){return this._active},set:function(t){do{if(-1!==this.store.indexOf(t)){this._active=t;break}t=t.parentNode}while(t)},enumerable:!1,configurable:!0}),t.prototype.next=function(){var t=this.store.length;if(0===t)return this.active=null,null;var e=this.store.indexOf(this.active);return e=-1===e?0:e<t-1?e+1:0,this.active=this.store[e],this.active},t.prototype.previous=function(){var t=this.store.length;if(0===t)return this.active=null,null;var e=t-1,Q=this.store.indexOf(this.active);return Q=-1===Q||0===Q?e:Q-1,this.active=this.store[Q],this.active},t.prototype.clear=function(){this.remove(this.store)},t.prototype.insert=function(t){var e,Q,T=t instanceof HTMLElement?[t]:t;try{for(var n=r(T),o=n.next();!o.done;o=n.next()){var i=o.value;this.insertElement(i)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}this.sort()},t.prototype.remove=function(t){var e,Q,T=t instanceof HTMLElement?[t]:t;try{for(var n=r(T),o=n.next();!o.done;o=n.next()){var i=o.value;this.removeElement(i)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(Q=n.return)&&Q.call(n)}finally{if(e)throw e.error}}this.sort()},t.prototype.inTaborder=function(t){this.taborder&&!t&&this.removeTaborder(),!this.taborder&&t&&this.insertTaborder(),this.taborder=t},t.prototype.insertTaborder=function(){this.taborder&&this.insertTaborder_()},t.prototype.removeTaborder=function(){this.taborder&&this.removeTaborder_()},t.prototype.insertElement=function(t){t.classList.contains(this.attachedClass)||(t.classList.add(this.attachedClass),this.taborder&&this.addTabindex(t),this.addEvents(t))},t.prototype.removeElement=function(t){t.classList.contains(this.attachedClass)&&(t.classList.remove(this.attachedClass),this.taborder&&this.removeTabindex(t),this.removeEvents(t))},t.prototype.sort=function(){var t=document.getElementsByClassName(this.attachedClass);this.store=[].slice.call(t)},t.prototype.insertTaborder_=function(){this.store.forEach((function(t){return t.setAttribute(\"tabindex\",\"0\")}))},t.prototype.removeTaborder_=function(){this.store.forEach((function(t){return t.setAttribute(\"tabindex\",\"-1\")}))},t.prototype.addTabindex=function(t){t.hasAttribute(\"tabindex\")&&t.setAttribute(n.HtmlAttrs.OLDTAB,t.getAttribute(\"tabindex\")),t.setAttribute(\"tabindex\",\"0\")},t.prototype.removeTabindex=function(t){t.hasAttribute(n.HtmlAttrs.OLDTAB)?(t.setAttribute(\"tabindex\",t.getAttribute(n.HtmlAttrs.OLDTAB)),t.removeAttribute(n.HtmlAttrs.OLDTAB)):t.removeAttribute(\"tabindex\")},t.prototype.addEvents=function(t){t.hasAttribute(n.HtmlAttrs.COUNTER)||(this.addEvent(t,\"contextmenu\",this.menu.post.bind(this.menu)),this.addEvent(t,\"keydown\",this.keydown.bind(this)),t.setAttribute(n.HtmlAttrs.COUNTER,this.counter.toString()),this.counter++)},t.prototype.addEvent=function(t,e,Q){var r=n.HtmlAttrs[e.toUpperCase()+\"FUNC\"];this.attrMap[r+this.counter]=Q,t.addEventListener(e,Q)},t.prototype.removeEvents=function(t){if(t.hasAttribute(n.HtmlAttrs.COUNTER)){var e=t.getAttribute(n.HtmlAttrs.COUNTER);this.removeEvent(t,\"contextmenu\",e),this.removeEvent(t,\"keydown\",e),t.removeAttribute(n.HtmlAttrs.COUNTER)}},t.prototype.removeEvent=function(t,e,Q){var r=n.HtmlAttrs[e.toUpperCase()+\"FUNC\"],T=this.attrMap[r+Q];t.removeEventListener(e,T)},t.prototype.keydown=function(t){t.keyCode===o.KEY.SPACE&&(this.menu.post(t),t.preventDefault(),t.stopImmediatePropagation())},t}();e.MenuStore=i},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.VariablePool=void 0;var r=function(){function t(){this.pool={}}return t.prototype.insert=function(t){this.pool[t.name]=t},t.prototype.lookup=function(t){return this.pool[t]},t.prototype.remove=function(t){delete this.pool[t]},t.prototype.update=function(){for(var t in this.pool)this.pool[t].update()},t}();e.VariablePool=r},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.CloseButton=void 0;var n=Q(102),o=Q(10),i=function(t){function e(e){var Q=t.call(this)||this;return Q.element=e,Q.className=o.HtmlClasses.MENUCLOSE,Q.role=\"button\",Q}return T(e,t),e.prototype.generateHtml=function(){var t=document.createElement(\"span\");t.classList.add(this.className),t.setAttribute(\"role\",this.role),t.setAttribute(\"tabindex\",\"0\");var e=document.createElement(\"span\");e.textContent=\"\\xd7\",t.appendChild(e),this.html=t},e.prototype.display=function(){},e.prototype.unpost=function(){t.prototype.unpost.call(this),this.element.unpost()},e.prototype.keydown=function(e){this.bubbleKey(),t.prototype.keydown.call(this,e)},e.prototype.space=function(t){this.unpost(),this.stop(t)},e.prototype.mousedown=function(t){this.unpost(),this.stop(t)},e}(n.AbstractPostable);e.CloseButton=i},function(t,e,Q){\"use strict\";var r=this&&this.__rest||function(t,e){var Q={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(Q[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var T=0;for(r=Object.getOwnPropertySymbols(t);T<r.length;T++)e.indexOf(r[T])<0&&Object.prototype.propertyIsEnumerable.call(t,r[T])&&(Q[r[T]]=t[r[T]])}return Q},T=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o},n=this&&this.__values||function(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,Q=e&&t[e],r=0;if(Q)return Q.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")},o=this&&this.__spread||function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(T(arguments[e]));return t};Object.defineProperty(e,\"__esModule\",{value:!0}),e.Parser=void 0;var i=Q(302),a=Q(273),s=Q(303),l=Q(304),c=Q(305),u=Q(306),p=Q(307),h=Q(103),f=Q(276),d=Q(308),L=Q(309),H=Q(310),m=Q(311),y=function(){function t(t){var e=this;void 0===t&&(t=[]),this._initList=[[\"command\",i.Command.fromJson.bind(i.Command)],[\"checkbox\",l.Checkbox.fromJson.bind(l.Checkbox)],[\"combo\",c.Combo.fromJson.bind(c.Combo)],[\"slider\",d.Slider.fromJson.bind(d.Slider)],[\"label\",u.Label.fromJson.bind(u.Label)],[\"radio\",p.Radio.fromJson.bind(p.Radio)],[\"rule\",f.Rule.fromJson.bind(f.Rule)],[\"submenu\",h.Submenu.fromJson.bind(h.Submenu)],[\"contextMenu\",a.ContextMenu.fromJson.bind(a.ContextMenu)],[\"subMenu\",L.SubMenu.fromJson.bind(L.SubMenu)],[\"variable\",s.Variable.fromJson.bind(s.Variable)],[\"items\",this.items.bind(this)],[\"selectionMenu\",H.SelectionMenu.fromJson.bind(H.SelectionMenu)],[\"selectionBox\",H.SelectionBox.fromJson.bind(H.SelectionBox)]],this._factory=new m.ParserFactory(this._initList),t.forEach((function(t){var Q=T(t,2),r=Q[0],n=Q[1];return e.factory.add(r,n)}))}return Object.defineProperty(t.prototype,\"factory\",{get:function(){return this._factory},enumerable:!1,configurable:!0}),t.prototype.items=function(t,e,Q){var r,T,o=[];try{for(var i=n(e),a=i.next();!a.done;a=i.next()){var s=a.value,l=this.parse(s,Q);l&&(Q.items.push(l),s.disabled&&l.disable(),s.hidden&&o.push(l))}}catch(t){r={error:t}}finally{try{a&&!a.done&&(T=i.return)&&T.call(i)}finally{if(r)throw r.error}}return o.forEach((function(t){return t.hide()})),Q.items},t.prototype.parse=function(t){for(var e=[],Q=1;Q<arguments.length;Q++)e[Q-1]=arguments[Q];var T=t.type,n=r(t,[\"type\"]),i=this.factory.get(T);return i?i.apply(void 0,o([this.factory,n],e)):null},t}();e.Parser=y},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Command=void 0;var n=Q(36),o=Q(17),i=function(t){function e(e,Q,r,T){var n=t.call(this,e,\"command\",Q,T)||this;return n.command=r,n}return T(e,t),e.fromJson=function(t,e,Q){return new this(Q,e.content,e.action,e.id)},e.prototype.executeAction=function(){try{this.command(o.MenuUtil.getActiveElement(this))}catch(t){o.MenuUtil.error(t,\"Illegal command callback.\")}o.MenuUtil.close(this)},e.prototype.toJson=function(){return{type:\"\"}},e}(n.AbstractItem);e.Command=i},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Variable=void 0;var r=Q(17),T=function(){function t(t,e,Q){this._name=t,this.getter=e,this.setter=Q,this.items=[]}return t.fromJson=function(t,e,Q){var r=new this(e.name,e.getter,e.setter);Q.insert(r)},Object.defineProperty(t.prototype,\"name\",{get:function(){return this._name},enumerable:!1,configurable:!0}),t.prototype.getValue=function(t){try{return this.getter(t)}catch(t){return r.MenuUtil.error(t,\"Command of variable \"+this.name+\" failed.\"),null}},t.prototype.setValue=function(t,e){try{this.setter(t,e)}catch(t){r.MenuUtil.error(t,\"Command of variable \"+this.name+\" failed.\")}this.update()},t.prototype.register=function(t){-1===this.items.indexOf(t)&&this.items.push(t)},t.prototype.unregister=function(t){var e=this.items.indexOf(t);-1!==e&&this.items.splice(e,1)},t.prototype.update=function(){this.items.forEach((function(t){return t.update()}))},t.prototype.registerCallback=function(t){this.items.forEach((function(e){return e.registerCallback(t)}))},t.prototype.unregisterCallback=function(t){this.items.forEach((function(e){return e.unregisterCallback(t)}))},t.prototype.toJson=function(){return{type:\"variable\",name:this.name,getter:this.getter.toString(),setter:this.setter.toString()}},t}();e.Variable=T},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Checkbox=void 0;var n=Q(52),o=Q(17),i=Q(10),a=function(t){function e(e,Q,r,T){var n=t.call(this,e,\"checkbox\",Q,T)||this;return n.role=\"menuitemcheckbox\",n.variable=e.pool.lookup(r),n.register(),n}return T(e,t),e.fromJson=function(t,e,Q){return new this(Q,e.content,e.variable,e.id)},e.prototype.executeAction=function(){this.variable.setValue(!this.variable.getValue()),o.MenuUtil.close(this)},e.prototype.generateSpan=function(){this.span=document.createElement(\"span\"),this.span.textContent=\"\\u2713\",this.span.classList.add(i.HtmlClasses.MENUCHECK)},e.prototype.updateAria=function(){this.html.setAttribute(\"aria-checked\",this.variable.getValue()?\"true\":\"false\")},e.prototype.updateSpan=function(){this.span.style.display=this.variable.getValue()?\"\":\"none\"},e.prototype.toJson=function(){return{type:\"\"}},e}(n.AbstractVariableItem);e.Checkbox=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Combo=void 0;var n=Q(52),o=Q(17),i=Q(10),a=Q(51),s=function(t){function e(e,Q,r,T){var n=t.call(this,e,\"combobox\",Q,T)||this;return n.role=\"combobox\",n.inputEvent=!1,n.variable=e.pool.lookup(r),n.register(),n}return T(e,t),e.fromJson=function(t,e,Q){return new this(Q,e.content,e.variable,e.id)},e.prototype.executeAction=function(){this.variable.setValue(this.input.value,o.MenuUtil.getActiveElement(this))},e.prototype.space=function(e){t.prototype.space.call(this,e),o.MenuUtil.close(this)},e.prototype.focus=function(){t.prototype.focus.call(this),this.input.focus()},e.prototype.unfocus=function(){t.prototype.unfocus.call(this),this.updateSpan()},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.html.classList.add(i.HtmlClasses.MENUCOMBOBOX)},e.prototype.generateSpan=function(){this.span=document.createElement(\"span\"),this.span.classList.add(i.HtmlClasses.MENUINPUTBOX),this.input=document.createElement(\"input\"),this.input.addEventListener(\"keydown\",this.inputKey.bind(this)),this.input.setAttribute(\"size\",\"10em\"),this.input.setAttribute(\"type\",\"text\"),this.input.setAttribute(\"tabindex\",\"-1\"),this.span.appendChild(this.input)},e.prototype.inputKey=function(t){this.bubbleKey(),this.inputEvent=!0},e.prototype.keydown=function(e){if(this.inputEvent&&e.keyCode!==a.KEY.ESCAPE&&e.keyCode!==a.KEY.RETURN)return this.inputEvent=!1,void e.stopPropagation();t.prototype.keydown.call(this,e),e.stopPropagation()},e.prototype.updateAria=function(){},e.prototype.updateSpan=function(){var t;try{t=this.variable.getValue(o.MenuUtil.getActiveElement(this))}catch(e){t=\"\"}this.input.value=t},e.prototype.toJson=function(){return{type:\"\"}},e}(n.AbstractVariableItem);e.Combo=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Label=void 0;var n=Q(36),o=Q(10),i=function(t){function e(e,Q,r){return t.call(this,e,\"label\",Q,r)||this}return T(e,t),e.fromJson=function(t,e,Q){return new this(Q,e.content,e.id)},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.html.classList.add(o.HtmlClasses.MENULABEL)},e.prototype.toJson=function(){return{type:\"\"}},e}(n.AbstractItem);e.Label=i},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Radio=void 0;var n=Q(52),o=Q(17),i=Q(10),a=function(t){function e(e,Q,r,T){var n=t.call(this,e,\"radio\",Q,T)||this;return n.role=\"menuitemradio\",n.variable=e.pool.lookup(r),n.register(),n}return T(e,t),e.fromJson=function(t,e,Q){return new this(Q,e.content,e.variable,e.id)},e.prototype.executeAction=function(){this.variable.setValue(this.id),o.MenuUtil.close(this)},e.prototype.generateSpan=function(){this.span=document.createElement(\"span\"),this.span.textContent=\"\\u2713\",this.span.classList.add(i.HtmlClasses.MENURADIOCHECK)},e.prototype.updateAria=function(){this.html.setAttribute(\"aria-checked\",this.variable.getValue()===this.id?\"true\":\"false\")},e.prototype.updateSpan=function(){this.span.style.display=this.variable.getValue()===this.id?\"\":\"none\"},e.prototype.toJson=function(){return{type:\"\"}},e}(n.AbstractVariableItem);e.Radio=a},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.Slider=void 0;var n=Q(52),o=Q(17),i=Q(10),a=Q(51),s=function(t){function e(e,Q,r,T){var n=t.call(this,e,\"slider\",Q,T)||this;return n.role=\"slider\",n.labelId=\"ctx_slideLabel\"+o.MenuUtil.counter(),n.valueId=\"ctx_slideValue\"+o.MenuUtil.counter(),n.inputEvent=!1,n.variable=e.pool.lookup(r),n.register(),n}return T(e,t),e.fromJson=function(t,e,Q){return new this(Q,e.content,e.variable,e.id)},e.prototype.executeAction=function(){this.variable.setValue(this.input.value,o.MenuUtil.getActiveElement(this)),this.update()},e.prototype.space=function(e){t.prototype.space.call(this,e),o.MenuUtil.close(this)},e.prototype.focus=function(){t.prototype.focus.call(this),this.input.focus()},e.prototype.unfocus=function(){t.prototype.unfocus.call(this),this.updateSpan()},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.html.classList.add(i.HtmlClasses.MENUSLIDER),this.valueSpan=document.createElement(\"span\"),this.valueSpan.setAttribute(\"id\",this.valueId),this.valueSpan.classList.add(i.HtmlClasses.SLIDERVALUE),this.html.appendChild(this.valueSpan)},e.prototype.generateSpan=function(){this.span=document.createElement(\"span\"),this.labelSpan=document.createElement(\"span\"),this.labelSpan.setAttribute(\"id\",this.labelId),this.labelSpan.appendChild(this.html.childNodes[0]),this.html.appendChild(this.labelSpan),this.input=document.createElement(\"input\"),this.input.setAttribute(\"type\",\"range\"),this.input.setAttribute(\"min\",\"0\"),this.input.setAttribute(\"max\",\"100\"),this.input.setAttribute(\"aria-valuemin\",\"0\"),this.input.setAttribute(\"aria-valuemax\",\"100\"),this.input.setAttribute(\"aria-labelledby\",this.labelId),this.input.addEventListener(\"keydown\",this.inputKey.bind(this)),this.input.addEventListener(\"input\",this.executeAction.bind(this)),this.input.classList.add(i.HtmlClasses.SLIDERBAR),this.span.appendChild(this.input)},e.prototype.inputKey=function(t){this.inputEvent=!0},e.prototype.mousedown=function(t){t.stopPropagation()},e.prototype.mouseup=function(t){event.stopPropagation()},e.prototype.keydown=function(e){var Q=e.keyCode;return Q===a.KEY.UP||Q===a.KEY.DOWN?(e.preventDefault(),void t.prototype.keydown.call(this,e)):this.inputEvent&&Q!==a.KEY.ESCAPE&&Q!==a.KEY.RETURN?(this.inputEvent=!1,void e.stopPropagation()):(t.prototype.keydown.call(this,e),void e.stopPropagation())},e.prototype.updateAria=function(){var t=this.variable.getValue();t&&this.input&&(this.input.setAttribute(\"aria-valuenow\",t),this.input.setAttribute(\"aria-valuetext\",t+\"%\"))},e.prototype.updateSpan=function(){var t;try{t=this.variable.getValue(o.MenuUtil.getActiveElement(this)),this.valueSpan.innerHTML=t+\"%\"}catch(e){t=\"\"}this.input.value=t},e.prototype.toJson=function(){return{type:\"\"}},e}(n.AbstractVariableItem);e.Slider=s},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)});Object.defineProperty(e,\"__esModule\",{value:!0}),e.SubMenu=void 0;var n=function(t){function e(e){var Q=t.call(this)||this;return Q._anchor=e,Q.variablePool=Q.anchor.menu.pool,Q.setBaseMenu(),Q}return T(e,t),e.fromJson=function(t,e,Q){var r=e.items,T=new this(Q),n=t.get(\"items\")(t,r,T);return T.items=n,T},Object.defineProperty(e.prototype,\"anchor\",{get:function(){return this._anchor},enumerable:!1,configurable:!0}),e.prototype.post=function(){if(this.anchor.menu.isPosted()){for(var e=this.anchor.html,Q=this.html,r=this.baseMenu.frame,T=e.offsetWidth,n=T-2,o=0;e&&e!==r;)n+=e.offsetLeft,o+=e.offsetTop,e=e.parentNode;n+Q.offsetWidth>document.body.offsetWidth-5&&(n=Math.max(5,n-T-Q.offsetWidth+6)),t.prototype.post.call(this,n,o)}},e.prototype.display=function(){this.baseMenu.frame.appendChild(this.html)},e.prototype.setBaseMenu=function(){var t=this;do{t=t.anchor.menu}while(t instanceof e);this.baseMenu=t},e.prototype.left=function(t){this.focused=null,this.anchor.focus()},e.prototype.toJson=function(){return{type:\"\"}},e}(Q(101).AbstractMenu);e.SubMenu=n},function(t,e,Q){\"use strict\";var r,T=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var Q in e)e.hasOwnProperty(Q)&&(t[Q]=e[Q])})(t,e)},function(t,e){function Q(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(Q.prototype=e.prototype,new Q)}),n=this&&this.__read||function(t,e){var Q=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!Q)return t;var r,T,n=Q.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=n.next()).done;)o.push(r.value)}catch(t){T={error:t}}finally{try{r&&!r.done&&(Q=n.return)&&Q.call(n)}finally{if(T)throw T.error}}return o};Object.defineProperty(e,\"__esModule\",{value:!0}),e.SelectionBox=e.SelectionMenu=void 0;var o=Q(17),i=Q(10),a=Q(101),s=Q(104),l=function(t){function e(e){var Q=t.call(this)||this;return Q.anchor=e,Q.className=i.HtmlClasses.SELECTIONMENU,Q.variablePool=Q.anchor.menu.pool,Q.baseMenu=Q.anchor.menu,Q}return T(e,t),e.fromJson=function(t,e,Q){var r=e.title,T=e.values,n=e.variable,o=new this(Q),i=t.get(\"label\")(t,{content:r||\"\",id:r||\"id\"},o),a=t.get(\"rule\")(t,{},o),s=T.map((function(e){return t.get(\"radio\")(t,{content:e,variable:n,id:e},o)})),l=[i,a].concat(s);return o.items=l,o},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.items.forEach((function(t){return t.html.classList.add(i.HtmlClasses.SELECTIONITEM)}))},e.prototype.display=function(){},e.prototype.right=function(t){this.anchor.right(t)},e.prototype.left=function(t){this.anchor.left(t)},e}(a.AbstractMenu);e.SelectionMenu=l;var c=function(t){function e(e,Q,r,T){void 0===r&&(r=\"none\"),void 0===T&&(T=\"vertical\");var n=t.call(this,e,null,Q)||this;return n.style=r,n.grid=T,n._selections=[],n.prefix=\"ctxt-selection\",n._balanced=!0,n}return T(e,t),e.fromJson=function(t,e,Q){var r=e.title,T=e.signature,n=e.selections,o=new this(r,T,e.order,e.grid);o.attachMenu(Q);var i=n.map((function(e){return t.get(\"selectionMenu\")(t,e,o)}));return o.selections=i,o},e.prototype.attachMenu=function(t){this.menu=t},Object.defineProperty(e.prototype,\"selections\",{get:function(){return this._selections},set:function(t){var e=this;this._selections=[],t.forEach((function(t){return e.addSelection(t)}))},enumerable:!1,configurable:!0}),e.prototype.addSelection=function(t){t.anchor=this,this._selections.push(t)},e.prototype.rowDiv=function(t){var e=this,Q=document.createElement(\"div\");this.contentDiv.appendChild(Q);var r=t.map((function(t){return Q.appendChild(t.html),t.html.id||(t.html.id=e.prefix+o.MenuUtil.counter()),t.html.getBoundingClientRect()})),T=r.map((function(t){return t.width})),n=T.reduce((function(t,e){return t+e}),0),a=r.reduce((function(t,e){return Math.max(t,e.height)}),0);return Q.classList.add(i.HtmlClasses.SELECTIONDIVIDER),Q.setAttribute(\"style\",\"height: \"+a+\"px;\"),[Q,n,a,T]},e.prototype.display=function(){if(t.prototype.display.call(this),this.order(),this.selections.length){for(var e=[],Q=0,r=[],T=this.getChunkSize(this.selections.length),o=function(t){var o=i.selections.slice(t,t+T),a=n(i.rowDiv(o),4),s=a[0],l=a[1],c=a[2],u=a[3];e.push(s),Q=Math.max(Q,l),o.forEach((function(t){return t.html.style.height=c+\"px\"})),r=i.combineColumn(r,u)},i=this,a=0;a<this.selections.length;a+=T)o(a);this._balanced&&(this.balanceColumn(e,r),Q=r.reduce((function(t,e){return t+e}),20)),e.forEach((function(t){return t.style.width=Q+\"px\"}))}},e.prototype.getChunkSize=function(t){switch(this.grid){case\"square\":return Math.floor(Math.sqrt(t));case\"horizontal\":return Math.floor(t/e.chunkSize);case\"vertical\":default:return e.chunkSize}},e.prototype.balanceColumn=function(t,e){t.forEach((function(t){for(var Q=Array.from(t.children),r=0,T=void 0;T=Q[r];r++)T.style.width=e[r]+\"px\"}))},e.prototype.combineColumn=function(t,e){for(var Q=[],r=0;t[r]||e[r];){if(!t[r]){Q=Q.concat(e.slice(r));break}if(!e[r]){Q=Q.concat(t.slice(r));break}Q.push(Math.max(t[r],e[r])),r++}return Q},e.prototype.left=function(t){var e=this;this.move(t,(function(t){return(0===t?e.selections.length:t)-1}))},e.prototype.right=function(t){var e=this;this.move(t,(function(t){return t===e.selections.length-1?0:t+1}))},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.html.classList.add(i.HtmlClasses.SELECTION)},e.prototype.generateContent=function(){var e=t.prototype.generateContent.call(this);return e.classList.add(i.HtmlClasses.SELECTIONBOX),e.removeAttribute(\"tabindex\"),e},e.prototype.findSelection=function(t){var e=t.target,Q=null;if(e.id&&(Q=this.selections.find((function(t){return t.html.id===e.id}))),!Q){var r=e.parentElement.id;Q=this.selections.find((function(t){return t.html.id===r}))}return Q},e.prototype.move=function(t,e){var Q=this.findSelection(t);Q.focused&&Q.focused.unfocus();var r=e(this.selections.indexOf(Q));this.selections[r].focus()},e.prototype.order=function(){this.selections.sort(e.orderMethod.get(this.style))},e.prototype.toJson=function(){return{type:\"\"}},e.chunkSize=4,e.orderMethod=new Map([[\"alphabetical\",function(t,e){return t.items[0].content.localeCompare(e.items[0].content)}],[\"none\",function(t,e){return 1}],[\"decreasing\",function(t,e){var Q=t.items.length,r=e.items.length;return Q<r?1:r<Q?-1:0}],[\"increasing\",function(t,e){var Q=t.items.length,r=e.items.length;return Q<r?-1:r<Q?1:0}]]),e}(s.Info);e.SelectionBox=c},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ParserFactory=void 0;var r=function(){function t(t){this._parser=new Map(t)}return t.prototype.get=function(t){return this._parser.get(t)},t.prototype.add=function(t,e){this._parser.set(t,e)},t}();e.ParserFactory=r},function(t,e,Q){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CssStyles=void 0;var r=Q(10);!function(t){function e(t){return\".\"+(r.HtmlClasses[t]||t)}var Q={};Q[e(\"INFOCLOSE\")]=\"{  top:.2em; right:.2em;}\",Q[e(\"INFOCONTENT\")]=\"{  overflow:auto; text-align:left; font-size:80%;  padding:.4em .6em; border:1px inset; margin:1em 0px;  max-height:20em; max-width:30em; background-color:#EEEEEE;  white-space:normal;}\",Q[e(\"INFO\")+e(\"MOUSEPOST\")]=\"{outline:none;}\",Q[e(\"INFO\")]='{  position:fixed; left:50%; width:auto; text-align:center;  border:3px outset; padding:1em 2em; background-color:#DDDDDD;  color:black;  cursor:default; font-family:message-box; font-size:120%;  font-style:normal; text-indent:0; text-transform:none;  line-height:normal; letter-spacing:normal; word-spacing:normal;  word-wrap:normal; white-space:nowrap; float:none; z-index:201;  border-radius: 15px;                     /* Opera 10.5 and IE9 */  -webkit-border-radius:15px;               /* Safari and Chrome */  -moz-border-radius:15px;                  /* Firefox */  -khtml-border-radius:15px;                /* Konqueror */  box-shadow:0px 10px 20px #808080;         /* Opera 10.5 and IE9 */  -webkit-box-shadow:0px 10px 20px #808080; /* Safari 3 & Chrome */  -moz-box-shadow:0px 10px 20px #808080;    /* Forefox 3.5 */  -khtml-box-shadow:0px 10px 20px #808080;  /* Konqueror */  filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color=\"gray\", Positive=\"true\"); /* IE */}';var T={};T[e(\"MENU\")]=\"{  position:absolute;  background-color:white;  color:black;  width:auto; padding:5px 0px;  border:1px solid #CCCCCC; margin:0; cursor:default;  font: menu; text-align:left; text-indent:0; text-transform:none;  line-height:normal; letter-spacing:normal; word-spacing:normal;  word-wrap:normal; white-space:nowrap; float:none; z-index:201;  border-radius: 5px;                     /* Opera 10.5 and IE9 */  -webkit-border-radius: 5px;             /* Safari and Chrome */  -moz-border-radius: 5px;                /* Firefox */  -khtml-border-radius: 5px;              /* Konqueror */  box-shadow:0px 10px 20px #808080;         /* Opera 10.5 and IE9 */  -webkit-box-shadow:0px 10px 20px #808080; /* Safari 3 & Chrome */  -moz-box-shadow:0px 10px 20px #808080;    /* Forefox 3.5 */  -khtml-box-shadow:0px 10px 20px #808080;  /* Konqueror */}\",T[e(\"MENUITEM\")]=\"{  padding: 1px 2em;  background:transparent;}\",T[e(\"MENUARROW\")]=\"{  position:absolute; right:.5em; padding-top:.25em; color:#666666;  font-family: null; font-size: .75em}\",T[e(\"MENUACTIVE\")+\" \"+e(\"MENUARROW\")]=\"{color:white}\",T[e(\"MENUARROW\")+e(\"RTL\")]=\"{left:.5em; right:auto}\",T[e(\"MENUCHECK\")]=\"{  position:absolute; left:.7em;  font-family: null}\",T[e(\"MENUCHECK\")+e(\"RTL\")]=\"{ right:.7em; left:auto }\",T[e(\"MENURADIOCHECK\")]=\"{  position:absolute; left: .7em;}\",T[e(\"MENURADIOCHECK\")+e(\"RTL\")]=\"{  right: .7em; left:auto}\",T[e(\"MENUINPUTBOX\")]=\"{  padding-left: 1em; right:.5em; color:#666666;  font-family: null;}\",T[e(\"MENUINPUTBOX\")+e(\"RTL\")]=\"{  left: .1em;}\",T[e(\"MENUCOMBOBOX\")]=\"{  left:.1em; padding-bottom:.5em;}\",T[e(\"MENUSLIDER\")]=\"{  left: .1em;}\",T[e(\"SLIDERVALUE\")]=\"{  position:absolute; right:.1em; padding-top:.25em; color:#333333;  font-size: .75em}\",T[e(\"SLIDERBAR\")]=\"{  outline: none; background: #d3d3d3}\",T[e(\"MENULABEL\")]=\"{  padding: 1px 2em 3px 1.33em;  font-style:italic}\",T[e(\"MENURULE\")]=\"{  border-top: 1px solid #DDDDDD;  margin: 4px 3px;}\",T[e(\"MENUDISABLED\")]=\"{  color:GrayText}\",T[e(\"MENUACTIVE\")]=\"{  background-color: #606872;  color: white;}\",T[e(\"MENUDISABLED\")+\":focus\"]=\"{  background-color: #E8E8E8}\",T[e(\"MENULABEL\")+\":focus\"]=\"{  background-color: #E8E8E8}\",T[e(\"CONTEXTMENU\")+\":focus\"]=\"{  outline:none}\",T[e(\"CONTEXTMENU\")+\" \"+e(\"MENUITEM\")+\":focus\"]=\"{  outline:none}\",T[e(\"SELECTIONMENU\")]=\"{  position:relative; float:left;  border-bottom: none; -webkit-box-shadow:none; -webkit-border-radius:0px; }\",T[e(\"SELECTIONITEM\")]=\"{  padding-right: 1em;}\",T[e(\"SELECTION\")]=\"{  right: 40%; width:50%; }\",T[e(\"SELECTIONBOX\")]=\"{  padding: 0em; max-height:20em; max-width: none;  background-color:#FFFFFF;}\",T[e(\"SELECTIONDIVIDER\")]=\"{  clear: both; border-top: 2px solid #000000;}\",T[e(\"MENU\")+\" \"+e(\"MENUCLOSE\")]=\"{  top:-10px; left:-10px}\";var n={};n[e(\"MENUCLOSE\")]='{  position:absolute;  cursor:pointer;  display:inline-block;  border:2px solid #AAA;  border-radius:18px;  -webkit-border-radius: 18px;             /* Safari and Chrome */  -moz-border-radius: 18px;                /* Firefox */  -khtml-border-radius: 18px;              /* Konqueror */  font-family: \"Courier New\", Courier;  font-size:24px;  color:#F0F0F0}',n[e(\"MENUCLOSE\")+\" span\"]=\"{  display:block; background-color:#AAA; border:1.5px solid;  border-radius:18px;  -webkit-border-radius: 18px;             /* Safari and Chrome */  -moz-border-radius: 18px;                /* Firefox */  -khtml-border-radius: 18px;              /* Konqueror */  line-height:0;  padding:8px 0 6px     /* may need to be browser-specific */}\",n[e(\"MENUCLOSE\")+\":hover\"]=\"{  color:white!important;  border:2px solid #CCC!important}\",n[e(\"MENUCLOSE\")+\":hover span\"]=\"{  background-color:#CCC!important}\",n[e(\"MENUCLOSE\")+\":hover:focus\"]=\"{  outline:none}\";var o=!1,i=!1,a=!1;function s(t){a||(l(n,t),a=!0)}function l(t,e){var Q=e||document,r=Q.createElement(\"style\");r.type=\"text/css\";var T=\"\";for(var n in t)T+=n,T+=\" \",T+=t[n],T+=\"\\n\";r.innerHTML=T,Q.head.appendChild(r)}t.addMenuStyles=function(t){i||(l(T,t),i=!0,s(t))},t.addInfoStyles=function(t){o||(l(Q,t),o=!0,s(t))}}(e.CssStyles||(e.CssStyles={}))},function(t,e,Q){\"use strict\";Q.r(e);var r=Q(1),T=Q(11),n=Q(29),o=Q(277);Object(r.combineWithMathJax)({_:{components:{loader:T,package:n,startup:o}}}),T.Loader.preLoad(\"loader\",\"startup\",\"core\",\"input/tex-full\",\"output/svg\",\"output/svg/fonts/tex.js\",\"ui/menu\",\"a11y/assistive-mml\");var i=Q(105),a=Q(96),s=Q(106),l=Q(107),c=Q(108),u=Q(118),p=Q(54),h=Q(53),f=Q(14),d=Q(56),L=Q(24),H=Q(111),m=Q(278),y=Q(57),v=Q(0),g=Q(81),b=Q(73),M=Q(114),V=Q(115),x=Q(59),O=Q(116),_=Q(72),S=Q(68),E=Q(71),C=Q(65),w=Q(79),A=Q(38),P=Q(75),N=Q(60),k=Q(31),I=Q(69),R=Q(70),j=Q(67),B=Q(64),D=Q(63),Z=Q(62),F=Q(66),G=Q(113),q=Q(39),W=Q(76),X=Q(78),z=Q(61),U=Q(77),J=Q(74),K=Q(80),$=Q(82),Y=Q(112),tt=Q(83),et=Q(55),Qt=Q(37),rt=Q(58),Tt=Q(110),nt=Q(119),ot=Q(120),it=Q(121),at=Q(279),st=Q(122),lt=Q(125),ct=Q(49),ut=Q(123),pt=Q(124),ht=Q(25),ft=Q(126),dt=Q(18),Lt=Q(117),Ht=Q(19),mt=Q(30),yt=Q(109),vt=Q(7),gt=Q(21),bt=Q(40),Mt=Q(127),Vt=Q(84),xt=Q(32),Ot=Q(128),_t=Q(15);Object(r.combineWithMathJax)({_:{adaptors:{HTMLAdaptor:i,browserAdaptor:a},components:{global:r},core:{DOMAdaptor:s,FindMath:l,Handler:c,HandlerList:u,InputJax:p,MathDocument:h,MathItem:f,MathList:d,MmlTree:{Attributes:L,MML:H,MathMLVisitor:m,MmlFactory:y,MmlNode:v,MmlNodes:{TeXAtom:g,maction:b,maligngroup:M,malignmark:V,math:x,mathchoice:O,menclose:_,merror:S,mfenced:E,mfrac:C,mglyph:w,mi:A,mmultiscripts:P,mn:N,mo:k,mpadded:I,mphantom:R,mroot:j,mrow:B,ms:D,mspace:Z,msqrt:F,mstyle:G,msubsup:q,mtable:W,mtd:X,mtext:z,mtr:U,munderover:J,semantics:K},MmlVisitor:$,OperatorDictionary:Y,SerializedMmlVisitor:tt},OutputJax:et,Tree:{Factory:Qt,Node:rt,NodeFactory:Tt,Visitor:nt,Wrapper:ot,WrapperFactory:it}},handlers:{html_ts:at,html:{HTMLDocument:st,HTMLDomStrings:lt,HTMLHandler:ct,HTMLMathItem:ut,HTMLMathList:pt}},mathjax:ht,util:{AsyncLoad:ft,BBox:dt,BitField:Lt,Entities:Ht,FunctionList:mt,LinkedList:yt,Options:vt,PrioritizedList:gt,Retries:bt,StyleList:Mt,Styles:Vt,lengths:xt,numeric:Ot,string:_t}}}),MathJax.startup&&(MathJax.startup.registerConstructor(\"HTMLHandler\",ct.HTMLHandler),MathJax.startup.registerConstructor(\"browserAdaptor\",a.browserAdaptor),MathJax.startup.useHandler(\"HTMLHandler\"),MathJax.startup.useAdaptor(\"browserAdaptor\")),MathJax.loader&&(MathJax._.mathjax.mathjax.asyncLoad=function(t){return MathJax.loader.load(t)});var St,Et=Q(97),Ct=Q(98),wt=Q(2),At=Q(130),Pt=Q(129),Nt=Q(33),kt=Q(41),It=Q(8),Rt=Q(23),jt=Q(86),Bt=Q(9),Dt=Q(85),Zt=Q(22),Ft=Q(131),Gt=Q(26),qt=Q(3),Wt=Q(20),Xt=Q(13),zt=Q(5),Ut=Q(12),Jt=Q(132),Kt=Q(135),$t=Q(136),Yt=Q(133),te=Q(134),ee=Q(34),Qe=Q(280),re=Q(42),Te=Q(27),ne=Q(16),oe=Q(137),ie=Q(138),ae=Q(139),se=Q(140),le=Q(141),ce=Q(142),ue=Q(143),pe=Q(144),he=Q(43),fe=Q(145),de=Q(150),Le=Q(146),He=Q(149),me=Q(147),ye=Q(148),ve=Q(151),ge=Q(87),be=Q(152),Me=Q(154),Ve=Q(155),xe=Q(156),Oe=Q(89),_e=Q(153),Se=Q(88),Ee=Q(44),Ce=Q(157),we=Q(158),Ae=Q(159),Pe=Q(160),Ne=Q(161),ke=Q(91),Ie=Q(162),Re=Q(163),je=Q(90),Be=Q(164),De=Q(165),Ze=Q(166);function Fe(t,e,Q){var T,n,o,i=MathJax.config.tex;if(i&&i.packages){var a=i.packages,s=a.indexOf(t);s>=0&&(a[s]=e),Q&&i[t]&&(Object(r.combineConfig)(i,(T={},n=e,o=i[t],n in T?Object.defineProperty(T,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):T[n]=o,T)),delete i[t])}}function Ge(t,e){(null==e||e>t.length)&&(e=t.length);for(var Q=0,r=new Array(e);Q<e;Q++)r[Q]=t[Q];return r}Object(r.combineWithMathJax)({_:{input:{tex_ts:Et,tex:{AllPackages:Ct,Configuration:wt,FilterUtil:At,FindTeX:Pt,MapHandler:Nt,NodeFactory:kt,NodeUtil:It,ParseMethods:Rt,ParseOptions:jt,ParseUtil:Bt,Stack:Dt,StackItem:Zt,StackItemFactory:Ft,Symbol:Gt,SymbolMap:qt,Tags:Wt,TexConstants:Xt,TexError:zt,TexParser:Ut,action:{ActionConfiguration:Jt},amscd:{AmsCdConfiguration:Kt,AmsCdMethods:$t},ams:{AmsConfiguration:Yt,AmsItems:te,AmsMethods:ee},autoload:{AutoloadConfiguration:Qe},base:{BaseConfiguration:re,BaseItems:Te,BaseMethods:ne},bbox:{BboxConfiguration:oe},boldsymbol:{BoldsymbolConfiguration:ie},braket:{BraketConfiguration:ae,BraketItems:se,BraketMethods:le},bussproofs:{BussproofsConfiguration:ce,BussproofsItems:ue,BussproofsMethods:pe,BussproofsUtil:he},cancel:{CancelConfiguration:fe},colorv2:{ColorV2Configuration:de},color:{ColorConfiguration:Le,ColorConstants:He,ColorMethods:me,ColorUtil:ye},configmacros:{ConfigMacrosConfiguration:ve},enclose:{EncloseConfiguration:ge},extpfeil:{ExtpfeilConfiguration:be},html:{HtmlConfiguration:Me,HtmlMethods:Ve},mhchem:{MhchemConfiguration:xe},newcommand:{NewcommandConfiguration:Oe,NewcommandItems:_e,NewcommandMethods:Se,NewcommandUtil:Ee},noerrors:{NoErrorsConfiguration:Ce},noundefined:{NoUndefinedConfiguration:we},physics:{PhysicsConfiguration:Ae,PhysicsItems:Pe,PhysicsMethods:Ne},require:{RequireConfiguration:ke},tagformat:{TagFormatConfiguration:Ie},textmacros:{TextMacrosConfiguration:Re,TextMacrosMethods:je,TextParser:Be},unicode:{UnicodeConfiguration:De},verb:{VerbConfiguration:Ze}}}}}),T.Loader.preLoad(\"input/tex-base\",\"[tex]/all-packages\",\"[tex]/require\"),function(t){if(MathJax.startup){MathJax.startup.registerConstructor(\"tex\",Et.TeX),MathJax.startup.useInput(\"tex\"),MathJax.config.tex||(MathJax.config.tex={});var e=MathJax.config.tex.packages;MathJax.config.tex.packages=t,e&&Object(vt.insert)(MathJax.config.tex,{packages:e})}}([\"require\"].concat(function(t){if(Array.isArray(t))return Ge(t)}(St=Ct.AllPackages)||function(t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(St)||function(t,e){if(t){if(\"string\"==typeof t)return Ge(t,e);var Q=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===Q&&t.constructor&&(Q=t.constructor.name),\"Map\"===Q||\"Set\"===Q?Array.from(t):\"Arguments\"===Q||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Q)?Ge(t,e):void 0}}(St)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())),Fe(\"amsCd\",\"amscd\",!0),Fe(\"colorV2\",\"colorv2\",!1),Fe(\"configMacros\",\"configmacros\",!1),Fe(\"tagFormat\",\"tagformat\",!0);var qe=Q(28),We=Q(45),Xe=Q(167),ze=Q(168),Ue=Q(169),Je=Q(170),Ke=Q(171),$e=Q(92),Ye=Q(172),tQ=Q(173),eQ=Q(174),QQ=Q(175),rQ=Q(176),TQ=Q(177),nQ=Q(178),oQ=Q(179),iQ=Q(180),aQ=Q(181),sQ=Q(182),lQ=Q(93),cQ=Q(183),uQ=Q(184),pQ=Q(185),hQ=Q(46),fQ=Q(186),dQ=Q(187),LQ=Q(188),HQ=Q(94),mQ=Q(47),yQ=Q(189),vQ=Q(190),gQ=Q(50),bQ=Q(266),MQ=Q(6),VQ=Q(215),xQ=Q(4),OQ=Q(191),_Q=Q(192),SQ=Q(218),EQ=Q(219),CQ=Q(213),wQ=Q(193),AQ=Q(214),PQ=Q(200),NQ=Q(206),kQ=Q(204),IQ=Q(217),RQ=Q(195),jQ=Q(209),BQ=Q(197),DQ=Q(196),ZQ=Q(202),FQ=Q(203),GQ=Q(205),qQ=Q(194),WQ=Q(198),XQ=Q(201),zQ=Q(95),UQ=Q(48),JQ=Q(210),KQ=Q(212),$Q=Q(199),YQ=Q(211),tr=Q(208),er=Q(207),Qr=Q(216);Object(r.combineWithMathJax)({_:{output:{common:{FontData:qe,Notation:We,OutputJax:Xe,Wrapper:ze,WrapperFactory:Ue,Wrappers:{TeXAtom:Je,TextNode:Ke,maction:$e,math:Ye,menclose:tQ,mfenced:eQ,mfrac:QQ,mglyph:rQ,mi:TQ,mmultiscripts:nQ,mn:oQ,mo:iQ,mpadded:aQ,mroot:sQ,mrow:lQ,ms:cQ,mspace:uQ,msqrt:pQ,msubsup:hQ,mtable:fQ,mtd:dQ,mtext:LQ,mtr:HQ,munderover:mQ,scriptbase:yQ,semantics:vQ}},svg_ts:gQ,svg:{FontCache:bQ,FontData:MQ,Notation:VQ,Wrapper:xQ,WrapperFactory:OQ,Wrappers_ts:_Q,Wrappers:{TeXAtom:SQ,TextNode:EQ,maction:CQ,math:wQ,menclose:AQ,merror:PQ,mfenced:NQ,mfrac:kQ,mglyph:IQ,mi:RQ,mmultiscripts:jQ,mn:BQ,mo:DQ,mpadded:ZQ,mphantom:FQ,mroot:GQ,mrow:qQ,ms:WQ,mspace:XQ,msqrt:zQ,msubsup:UQ,mtable:JQ,mtd:KQ,mtext:$Q,mtr:YQ,munderover:tr,scriptbase:er,semantics:Qr}}}}}),MathJax.loader&&Object(r.combineDefaults)(MathJax.config.loader,\"output/svg\",{checkReady:function(){return MathJax.loader.load(\"output/svg/fonts/tex\")}}),MathJax.startup&&(MathJax.startup.registerConstructor(\"svg\",gQ.SVG),MathJax.startup.useOutput(\"svg\"));var rr=Q(221),Tr=Q(223),nr=Q(265),or=Q(224),ir=Q(226),ar=Q(228),sr=Q(230),lr=Q(232),cr=Q(234),ur=Q(236),pr=Q(238),hr=Q(240),fr=Q(242),dr=Q(244),Lr=Q(245),Hr=Q(246),mr=Q(248),yr=Q(250),vr=Q(252),gr=Q(254),br=Q(256),Mr=Q(258),Vr=Q(260),xr=Q(262),Or=Q(264),_r=Q(35),Sr=Q(220),Er=Q(222),Cr=Q(225),wr=Q(227),Ar=Q(229),Pr=Q(231),Nr=Q(233),kr=Q(235),Ir=Q(237),Rr=Q(239),jr=Q(241),Br=Q(243),Dr=Q(247),Zr=Q(249),Fr=Q(251),Gr=Q(253),qr=Q(255),Wr=Q(257),Xr=Q(259),zr=Q(261),Ur=Q(263);if(Object(r.combineWithMathJax)({_:{output:{common:{fonts:{tex:{\"bold-italic\":rr,bold:Tr,delimiters:nr,\"double-struck\":or,\"fraktur-bold\":ir,fraktur:ar,italic:sr,largeop:lr,monospace:cr,normal:ur,\"sans-serif-bold-italic\":pr,\"sans-serif-bold\":hr,\"sans-serif-italic\":fr,\"sans-serif\":dr,\"script-bold\":Lr,script:Hr,smallop:mr,\"tex-calligraphic-bold\":yr,\"tex-calligraphic\":vr,\"tex-mathit\":gr,\"tex-oldstyle-bold\":br,\"tex-oldstyle\":Mr,\"tex-size3\":Vr,\"tex-size4\":xr,\"tex-variant\":Or}}},svg:{fonts:{tex_ts:_r,tex:{\"bold-italic\":Sr,bold:Er,\"fraktur-bold\":Cr,fraktur:wr,italic:Ar,largeop:Pr,monospace:Nr,normal:kr,\"sans-serif-bold-italic\":Ir,\"sans-serif-bold\":Rr,\"sans-serif-italic\":jr,\"sans-serif\":Br,smallop:Dr,\"tex-calligraphic-bold\":Zr,\"tex-calligraphic\":Fr,\"tex-mathit\":Gr,\"tex-oldstyle-bold\":qr,\"tex-oldstyle\":Wr,\"tex-size3\":Xr,\"tex-size4\":zr,\"tex-variant\":Ur}}}}}}),MathJax.startup){var Jr=Object(vt.selectOptionsFromKeys)(MathJax.config.svg||{},_r.TeXFont.OPTIONS);Object(r.combineDefaults)(MathJax.config,\"svg\",{font:new _r.TeXFont(Jr)})}var Kr=Q(267),$r=Q(268),Yr=Q(99),tT=Q(269),eT=Q(270);Object(r.combineWithMathJax)({_:{ui:{menu:{MJContextMenu:Kr,Menu:$r,MenuHandler:Yr,MmlVisitor:tT,SelectableInfo:eT}}}}),MathJax.startup&&\"undefined\"!=typeof window&&MathJax.startup.extendHandler((function(t){return Object(Yr.MenuHandler)(t)}),20);var QT=Q(100);Object(r.combineWithMathJax)({_:{a11y:{\"assistive-mml\":QT}}}),MathJax.startup&&MathJax.startup.extendHandler((function(t){return Object(QT.AssistiveMmlHandler)(t)}));var rT={tex:\"[mathjax]/input/tex/extensions\",sre:\"[mathjax]/sre/\"+(\"undefined\"==typeof window?\"sre-node\":\"sre_browser\")},TT=[\"[tex]/action\",\"[tex]/ams\",\"[tex]/amscd\",\"[tex]/bbox\",\"[tex]/boldsymbol\",\"[tex]/braket\",\"[tex]/bussproofs\",\"[tex]/cancel\",\"[tex]/color\",\"[tex]/configmacros\",\"[tex]/enclose\",\"[tex]/extpfeil\",\"[tex]/html\",\"[tex]/mhchem\",\"[tex]/newcommand\",\"[tex]/noerrors\",\"[tex]/noundefined\",\"[tex]/physics\",\"[tex]/require\",\"[tex]/tagformat\",\"[tex]/textmacros\",\"[tex]/unicode\",\"[tex]/verb\"],nT={startup:[\"loader\"],\"input/tex\":[\"input/tex-base\",\"[tex]/ams\",\"[tex]/newcommand\",\"[tex]/noundefined\",\"[tex]/require\",\"[tex]/autoload\",\"[tex]/configmacros\"],\"input/tex-full\":[\"input/tex-base\",\"[tex]/all-packages\"].concat(TT),\"[tex]/all-packages\":TT};function oT(t,e){(null==e||e>t.length)&&(e=t.length);for(var Q=0,r=new Array(e);Q<e;Q++)r[Q]=t[Q];return r}Object(r.combineDefaults)(MathJax.config.loader,\"dependencies\",{\"a11y/semantic-enrich\":[\"input/mml\",\"[sre]\"],\"a11y/complexity\":[\"a11y/semantic-enrich\"],\"a11y/explorer\":[\"a11y/semantic-enrich\",\"ui/menu\"],\"[tex]/all-packages\":[\"input/tex-base\"],\"[tex]/action\":[\"input/tex-base\",\"[tex]/newcommand\"],\"[tex]/autoload\":[\"input/tex-base\",\"[tex]/require\"],\"[tex]/ams\":[\"input/tex-base\"],\"[tex]/amscd\":[\"input/tex-base\"],\"[tex]/bbox\":[\"input/tex-base\",\"[tex]/ams\",\"[tex]/newcommand\"],\"[tex]/boldsymbol\":[\"input/tex-base\"],\"[tex]/braket\":[\"input/tex-base\"],\"[tex]/bussproofs\":[\"input/tex-base\"],\"[tex]/cancel\":[\"input/tex-base\",\"[tex]/enclose\"],\"[tex]/color\":[\"input/tex-base\"],\"[tex]/colorv2\":[\"input/tex-base\"],\"[tex]/configmacros\":[\"input/tex-base\",\"[tex]/newcommand\"],\"[tex]/enclose\":[\"input/tex-base\"],\"[tex]/extpfeil\":[\"input/tex-base\",\"[tex]/newcommand\",\"[tex]/ams\"],\"[tex]/html\":[\"input/tex-base\"],\"[tex]/mhchem\":[\"input/tex-base\",\"[tex]/ams\"],\"[tex]/newcommand\":[\"input/tex-base\"],\"[tex]/noerrors\":[\"input/tex-base\"],\"[tex]/noundefined\":[\"input/tex-base\"],\"[tex]/physics\":[\"input/tex-base\"],\"[tex]/require\":[\"input/tex-base\"],\"[tex]/tagformat\":[\"input/tex-base\"],\"[tex]/textmacros\":[\"input/tex-base\"],\"[tex]/unicode\":[\"input/tex-base\"],\"[tex]/verb\":[\"input/tex-base\"]}),Object(r.combineDefaults)(MathJax.config.loader,\"paths\",rT),Object(r.combineDefaults)(MathJax.config.loader,\"provides\",nT),Object(r.combineDefaults)(MathJax.config.loader,\"source\",{\"[tex]/amsCd\":\"[tex]/amscd\",\"[tex]/colorV2\":\"[tex]/colorv2\",\"[tex]/configMacros\":\"[tex]/configmacros\",\"[tex]/tagFormat\":\"[tex]/tagformat\"}),T.Loader.preLoad(\"loader\"),T.Loader.load.apply(T.Loader,function(t){return function(t){if(Array.isArray(t))return oT(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(!t)return;if(\"string\"==typeof t)return oT(t,e);var Q=Object.prototype.toString.call(t).slice(8,-1);\"Object\"===Q&&t.constructor&&(Q=t.constructor.name);if(\"Map\"===Q||\"Set\"===Q)return Array.from(t);if(\"Arguments\"===Q||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Q))return oT(t,e)}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}(T.CONFIG.load)).then((function(){return T.CONFIG.ready()})).catch((function(t){return T.CONFIG.failed(t)}))}]);"
  },
  {
    "path": "api/static/libs/js/vditor/dist/method.d.ts",
    "content": "import * as adapterRender from \"./ts/markdown/adapterRender\";\ndeclare class Vditor {\n    /** 点击图片放大 */\n    static adapterRender: typeof adapterRender;\n    /** 点击图片放大 */\n    static previewImage: (oldImgElement: HTMLImageElement, lang?: keyof II18n, theme?: string) => void;\n    /** 为 element 中的代码块添加复制按钮 */\n    static codeRender: (element: HTMLElement, option?: IHljs) => void;\n    /** 对 graphviz 进行渲染 */\n    static graphvizRender: (element: HTMLElement, cdn?: string) => void;\n    /** 为 element 中的代码块进行高亮渲染 */\n    static highlightRender: (hljsOption?: IHljs, element?: HTMLElement | Document, cdn?: string) => void;\n    /** 对数学公式进行渲染 */\n    static mathRender: (element?: HTMLElement | Document, options?: {\n        cdn?: string;\n        math?: IMath;\n    }) => void;\n    /** 流程图/时序图/甘特图渲染 */\n    static mermaidRender: (element: HTMLElement | Document, cdn: string, theme: string) => void;\n    /** 化学物质结构渲染 */\n    static SMILESRender: (element: HTMLElement | Document, cdn: string, theme: string) => void;\n    /** 支持 markdown 的思维导图 */\n    static markmapRender: (element?: HTMLElement | Document, cdn?: string) => void;\n    /** flowchart.js 渲染 */\n    static flowchartRender: (element: HTMLElement, cdn?: string) => void;\n    /** 图表渲染 */\n    static chartRender: (element: HTMLElement | Document, cdn: string, theme: string) => void;\n    /** 五线谱渲染 */\n    static abcRender: (element?: HTMLElement | Document, cdn?: string) => void;\n    /** 脑图渲染 */\n    static mindmapRender: (element: HTMLElement | Document, cdn: string, theme: string) => void;\n    /** plantuml渲染 */\n    static plantumlRender: (element?: HTMLElement | Document, cdn?: string) => void;\n    /** 大纲渲染 */\n    static outlineRender: (contentElement: HTMLElement, targetElement: Element, vditor?: IVditor) => string;\n    /** 为[特定链接](https://github.com/Vanessa219/vditor/issues/7)分别渲染为视频、音频、嵌入的 iframe */\n    static mediaRender: (element: HTMLElement) => void;\n    /** 对选中的文字进行阅读 */\n    static speechRender: (element: HTMLElement, lang?: keyof II18n) => void;\n    /** 对图片进行懒加载 */\n    static lazyLoadImageRender: (element?: HTMLElement | Document) => boolean;\n    /** Markdown 文本转换为 HTML，该方法需使用[异步编程](https://ld246.com/article/1546828434083?r=Vaness) */\n    static md2html: (mdText: string, options?: IPreviewOptions) => Promise<string>;\n    /** 页面 Markdown 文章渲染 */\n    static preview: (previewElement: HTMLDivElement, markdown: string, options?: IPreviewOptions) => Promise<void>;\n    /** 设置代码主题 */\n    static setCodeTheme: (codeTheme: string, cdn?: string) => void;\n    /** 设置内容主题 */\n    static setContentTheme: (contentTheme: string, path: string) => void;\n}\nexport default Vditor;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/method.js",
    "content": "/*!\n * Vditor v3.11.0 - A markdown editor written in TypeScript.\n *\n * MIT License\n *\n * Copyright (c) 2018-present B3log 开源, b3log.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vditor\"] = factory();\n\telse\n\t\troot[\"Vditor\"] = factory();\n})(this, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 10:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   T: () => (/* binding */ addStyle)\n/* harmony export */ });\nvar addStyle = function (url, id) {\n    if (!document.getElementById(id)) {\n        var styleElement = document.createElement(\"link\");\n        styleElement.id = id;\n        styleElement.rel = \"stylesheet\";\n        styleElement.type = \"text/css\";\n        styleElement.href = url;\n        document.getElementsByTagName(\"head\")[0].appendChild(styleElement);\n    }\n};\n\n\n/***/ }),\n\n/***/ 13:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   l: () => (/* binding */ mediaRender)\n/* harmony export */ });\n/* harmony import */ var _util_function__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(138);\n\nvar videoRender = function (element, url) {\n    element.insertAdjacentHTML(\"afterend\", \"<video controls=\\\"controls\\\" src=\\\"\".concat(url, \"\\\"></video>\"));\n    element.remove();\n};\nvar audioRender = function (element, url) {\n    element.insertAdjacentHTML(\"afterend\", \"<audio controls=\\\"controls\\\" src=\\\"\".concat(url, \"\\\"></audio>\"));\n    element.remove();\n};\nvar iframeRender = function (element, url) {\n    var youtubeMatch = url.match(/\\/\\/(?:www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))([\\w|-]{11})(?:(?:[\\?&]t=)(\\S+))?/);\n    var youkuMatch = url.match(/\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/);\n    var qqMatch = url.match(/\\/\\/v\\.qq\\.com\\/x\\/cover\\/.*\\/([^\\/]+)\\.html\\??.*/);\n    var coubMatch = url.match(/(?:www\\.|\\/\\/)coub\\.com\\/view\\/(\\w+)/);\n    var facebookMatch = url.match(/(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/);\n    var dailymotionMatch = url.match(/.+dailymotion.com\\/(video|hub)\\/(\\w+)\\?/);\n    var bilibiliMatch = url.match(/(?:www\\.|\\/\\/)bilibili\\.com\\/video\\/(\\w+)/);\n    var tedMatch = url.match(/(?:www\\.|\\/\\/)ted\\.com\\/talks\\/(\\w+)/);\n    if (youtubeMatch && youtubeMatch[1].length === 11) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\" src=\\\"//www.youtube.com/embed/\".concat(youtubeMatch[1] +\n            (youtubeMatch[2] ? \"?start=\" + youtubeMatch[2] : \"\"), \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (youkuMatch && youkuMatch[1]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\" src=\\\"//player.youku.com/embed/\".concat(youkuMatch[1], \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (qqMatch && qqMatch[1]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\" src=\\\"https://v.qq.com/txp/iframe/player.html?vid=\".concat(qqMatch[1], \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (coubMatch && coubMatch[1]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\"\\n src=\\\"//coub.com/embed/\".concat(coubMatch[1], \"?muted=false&autostart=false&originalSize=true&startWithHD=true\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (facebookMatch && facebookMatch[0]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\"\\n src=\\\"https://www.facebook.com/plugins/video.php?href=\".concat(encodeURIComponent(facebookMatch[0]), \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (dailymotionMatch && dailymotionMatch[2]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\"\\n src=\\\"https://www.dailymotion.com/embed/video/\".concat(dailymotionMatch[2], \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (url.indexOf(\"bilibili.com\") > -1 && (url.indexOf(\"bvid=\") > -1 || (bilibiliMatch && bilibiliMatch[1]))) {\n        var params_1 = {\n            bvid: (0,_util_function__WEBPACK_IMPORTED_MODULE_0__/* .getSearch */ .TK)(\"bvid\", url) || (bilibiliMatch && bilibiliMatch[1]),\n            page: \"1\",\n            high_quality: \"1\",\n            as_wide: \"1\",\n            allowfullscreen: \"true\",\n            autoplay: \"0\"\n        };\n        new URL(url.startsWith(\"http\") ? url : \"https:\" + url).search.split(\"&\").forEach(function (item, index) {\n            if (!item) {\n                return;\n            }\n            if (index === 0) {\n                item = item.substr(1);\n            }\n            var keyValue = item.split(\"=\");\n            params_1[keyValue[0]] = keyValue[1];\n        });\n        var src_1 = \"https://player.bilibili.com/player.html?\";\n        var keys_1 = Object.keys(params_1);\n        keys_1.forEach(function (key, index) {\n            src_1 += \"\".concat(key, \"=\").concat(params_1[key]);\n            if (index < keys_1.length - 1) {\n                src_1 += \"&\";\n            }\n        });\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\" src=\\\"\".concat(src_1, \"\\\"></iframe>\"));\n        element.remove();\n    }\n    else if (tedMatch && tedMatch[1]) {\n        element.insertAdjacentHTML(\"afterend\", \"<iframe class=\\\"iframe__video\\\" src=\\\"//embed.ted.com/talks/\".concat(tedMatch[1], \"\\\"></iframe>\"));\n        element.remove();\n    }\n};\nvar mediaRender = function (element) {\n    if (!element) {\n        return;\n    }\n    element.querySelectorAll(\"a\").forEach(function (aElement) {\n        var url = aElement.getAttribute(\"href\");\n        if (!url) {\n            return;\n        }\n        if (url.match(/^.+.(mp4|m4v|ogg|ogv|webm)$/)) {\n            videoRender(aElement, url);\n        }\n        else if (url.match(/^.+.(mp3|wav|flac)$/)) {\n            audioRender(aElement, url);\n        }\n        else {\n            iframeRender(aElement, url);\n        }\n    });\n};\n\n\n/***/ }),\n\n/***/ 138:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Ee: () => (/* binding */ genUUID),\n/* harmony export */   TK: () => (/* binding */ getSearch),\n/* harmony export */   kY: () => (/* binding */ looseJsonParse)\n/* harmony export */ });\nvar genUUID = function () { return ([1e7].toString() + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) {\n    return (parseInt(c, 10) ^ (window.crypto.getRandomValues(new Uint32Array(1))[0] & (15 >> (parseInt(c, 10) / 4)))).toString(16);\n}); };\nvar getSearch = function (key, link) {\n    if (link === void 0) { link = window.location.search; }\n    var params = link.substring(link.indexOf(\"?\"));\n    var hashIndex = params.indexOf(\"#\");\n    // REF https://developer.mozilla.org/zh-CN/docs/Web/API/URLSearchParams\n    var urlSearchParams = new URLSearchParams(params.substring(0, hashIndex >= 0 ? hashIndex : undefined));\n    return urlSearchParams.get(key);\n};\nvar looseJsonParse = function (text) {\n    return Function(\"\\\"use strict\\\";return (\".concat(text, \")\"))();\n};\n\n\n/***/ }),\n\n/***/ 145:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   KJ: () => (/* binding */ hasClosestByClassName),\n/* harmony export */   _Y: () => (/* binding */ hasClosestByMatchTag)\n/* harmony export */ });\n/* unused harmony exports hasTopClosestByClassName, hasTopClosestByAttribute, hasTopClosestByTag, getTopList, hasClosestByAttribute, hasClosestBlock, getLastNode */\n\nvar hasTopClosestByClassName = function (element, className) {\n    var closest = hasClosestByClassName(element, className);\n    var parentClosest = false;\n    var findTop = false;\n    while (closest && !closest.classList.contains(\"vditor-reset\") && !findTop) {\n        parentClosest = hasClosestByClassName(closest.parentElement, className);\n        if (parentClosest) {\n            closest = parentClosest;\n        }\n        else {\n            findTop = true;\n        }\n    }\n    return closest || false;\n};\nvar hasTopClosestByAttribute = function (element, attr, value) {\n    var closest = hasClosestByAttribute(element, attr, value);\n    var parentClosest = false;\n    var findTop = false;\n    while (closest && !closest.classList.contains(\"vditor-reset\") && !findTop) {\n        parentClosest = hasClosestByAttribute(closest.parentElement, attr, value);\n        if (parentClosest) {\n            closest = parentClosest;\n        }\n        else {\n            findTop = true;\n        }\n    }\n    return closest || false;\n};\nvar hasTopClosestByTag = function (element, nodeName) {\n    var closest = hasClosestByTag(element, nodeName);\n    var parentClosest = false;\n    var findTop = false;\n    while (closest && !closest.classList.contains(\"vditor-reset\") && !findTop) {\n        parentClosest = hasClosestByTag(closest.parentElement, nodeName);\n        if (parentClosest) {\n            closest = parentClosest;\n        }\n        else {\n            findTop = true;\n        }\n    }\n    return closest || false;\n};\nvar getTopList = function (element) {\n    var topUlElement = hasTopClosestByTag(element, \"UL\");\n    var topOlElement = hasTopClosestByTag(element, \"OL\");\n    var topListElement = topUlElement;\n    if (topOlElement && (!topUlElement || (topUlElement && topOlElement.contains(topUlElement)))) {\n        topListElement = topOlElement;\n    }\n    return topListElement;\n};\nvar hasClosestByAttribute = function (element, attr, value) {\n    if (!element) {\n        return false;\n    }\n    if (element.nodeType === 3) {\n        element = element.parentElement;\n    }\n    var e = element;\n    var isClosest = false;\n    while (e && !isClosest && !e.classList.contains(\"vditor-reset\")) {\n        if (e.getAttribute(attr) === value) {\n            isClosest = true;\n        }\n        else {\n            e = e.parentElement;\n        }\n    }\n    return isClosest && e;\n};\nvar hasClosestBlock = function (element) {\n    if (!element) {\n        return false;\n    }\n    if (element.nodeType === 3) {\n        element = element.parentElement;\n    }\n    var e = element;\n    var isClosest = false;\n    var blockElement = hasClosestByAttribute(element, \"data-block\", \"0\");\n    if (blockElement) {\n        return blockElement;\n    }\n    while (e && !isClosest && !e.classList.contains(\"vditor-reset\")) {\n        if (e.tagName === \"H1\" ||\n            e.tagName === \"H2\" ||\n            e.tagName === \"H3\" ||\n            e.tagName === \"H4\" ||\n            e.tagName === \"H5\" ||\n            e.tagName === \"H6\" ||\n            e.tagName === \"P\" ||\n            e.tagName === \"BLOCKQUOTE\" ||\n            e.tagName === \"OL\" ||\n            e.tagName === \"UL\") {\n            isClosest = true;\n        }\n        else {\n            e = e.parentElement;\n        }\n    }\n    return isClosest && e;\n};\nvar hasClosestByMatchTag = function (element, nodeName) {\n    if (!element) {\n        return false;\n    }\n    if (element.nodeType === 3) {\n        element = element.parentElement;\n    }\n    var e = element;\n    var isClosest = false;\n    while (e && !isClosest && !e.classList.contains(\"vditor-reset\")) {\n        if (e.nodeName === nodeName) {\n            isClosest = true;\n        }\n        else {\n            e = e.parentElement;\n        }\n    }\n    return isClosest && e;\n};\nvar hasClosestByClassName = function (element, className) {\n    if (!element) {\n        return false;\n    }\n    if (element.nodeType === 3) {\n        element = element.parentElement;\n    }\n    var e = element;\n    var isClosest = false;\n    while (e && !isClosest && !e.classList.contains(\"vditor-reset\")) {\n        if (e.classList.contains(className)) {\n            isClosest = true;\n        }\n        else {\n            e = e.parentElement;\n        }\n    }\n    return isClosest && e;\n};\nvar getLastNode = function (node) {\n    while (node && node.lastChild) {\n        node = node.lastChild;\n    }\n    return node;\n};\n\n\n/***/ }),\n\n/***/ 292:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Y: () => (/* binding */ SMILESRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n/* harmony import */ var _util_function__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(138);\n\n\n\n\nvar SMILESRender = function (element, cdn, theme) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var SMILESElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.SMILESRenderAdapter.getElements(element);\n    if (SMILESElements.length > 0) {\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/smiles-drawer/smiles-drawer.min.js?v=2.1.7\"), \"vditorAbcjsScript\").then(function () {\n            var sd = new SmiDrawer({}, {});\n            SMILESElements.forEach(function (item) {\n                var code = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.SMILESRenderAdapter.getCode(item).trim();\n                if (item.getAttribute(\"data-processed\") === \"true\" || code.trim() === \"\") {\n                    return;\n                }\n                var id = \"smiles\" + (0,_util_function__WEBPACK_IMPORTED_MODULE_3__/* .genUUID */ .Ee)();\n                item.innerHTML = \"<svg id=\\\"\".concat(id, \"\\\"></svg>\");\n                sd.draw(code, '#' + id, theme === \"dark\" ? \"dark\" : undefined);\n                item.setAttribute(\"data-processed\", \"true\");\n            });\n        });\n    }\n};\n\n\n/***/ }),\n\n/***/ 316:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   K: () => (/* binding */ markmapRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar enabled = {};\nvar transform = function (transformer, content) {\n    var result = transformer.transform(content);\n    var keys = Object.keys(result.features).filter(function (key) { return !enabled[key]; });\n    keys.forEach(function (key) {\n        enabled[key] = true;\n    });\n    var _a = transformer.getAssets(keys), styles = _a.styles, scripts = _a.scripts;\n    var markmap = window.markmap;\n    if (styles)\n        markmap.loadCSS(styles);\n    if (scripts)\n        markmap.loadJS(scripts);\n    return result;\n};\nvar init = function (el, code) {\n    var _a = window.markmap, Transformer = _a.Transformer, Markmap = _a.Markmap, deriveOptions = _a.deriveOptions, globalCSS = _a.globalCSS;\n    var transformer = new Transformer();\n    el.innerHTML = '<svg style=\"width:100%\"></svg>';\n    var svg = el.firstChild;\n    var mm = Markmap.create(svg, null);\n    var _b = transform(transformer, code), root = _b.root, frontmatter = _b.frontmatter;\n    var markmapOptions = frontmatter === null || frontmatter === void 0 ? void 0 : frontmatter.markmap;\n    var frontmatterOptions = deriveOptions(markmapOptions);\n    mm.setData(root, frontmatterOptions);\n    mm.fit();\n};\nvar markmapRender = function (element, cdn) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var markmapElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.markmapRenderAdapter.getElements(element);\n    if (markmapElements.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/markmap/markmap.min.js\"), \"vditorMarkerScript\").then(function () {\n        markmapElements.forEach(function (item) {\n            var code = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.markmapRenderAdapter.getCode(item);\n            if (item.getAttribute(\"data-processed\") === \"true\" || code.trim() === \"\") {\n                return;\n            }\n            var render = document.createElement(\"div\");\n            render.className = \"language-markmap\";\n            item.parentNode.appendChild(render);\n            init(render, code);\n            if (item.parentNode.childNodes[0].nodeName == \"CODE\") {\n                item.parentNode.removeChild(item.parentNode.childNodes[0]);\n            }\n        });\n    });\n};\n\n\n/***/ }),\n\n/***/ 329:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   X: () => (/* binding */ setLute)\n/* harmony export */ });\nvar setLute = function (options) {\n    var lute = Lute.New();\n    lute.PutEmojis(options.emojis);\n    lute.SetEmojiSite(options.emojiSite);\n    lute.SetHeadingAnchor(options.headingAnchor);\n    lute.SetInlineMathAllowDigitAfterOpenMarker(options.inlineMathDigit);\n    lute.SetAutoSpace(options.autoSpace);\n    lute.SetToC(options.toc);\n    lute.SetFootnotes(options.footnotes);\n    lute.SetFixTermTypo(options.fixTermTypo);\n    lute.SetVditorCodeBlockPreview(options.codeBlockPreview);\n    lute.SetVditorMathBlockPreview(options.mathBlockPreview);\n    lute.SetSanitize(options.sanitize);\n    lute.SetChineseParagraphBeginningSpace(options.paragraphBeginningSpace);\n    lute.SetRenderListStyle(options.listStyle);\n    lute.SetLinkBase(options.linkBase);\n    lute.SetLinkPrefix(options.linkPrefix);\n    lute.SetMark(options.mark);\n    lute.SetGFMAutoLink(options.gfmAutoLink);\n    if (options.lazyLoadImage) {\n        lute.SetImageLazyLoading(options.lazyLoadImage);\n    }\n    return lute;\n};\n\n\n/***/ }),\n\n/***/ 444:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   U: () => (/* binding */ addScriptSync),\n/* harmony export */   Z: () => (/* binding */ addScript)\n/* harmony export */ });\nvar addScriptSync = function (path, id) {\n    if (document.getElementById(id)) {\n        return false;\n    }\n    var xhrObj = new XMLHttpRequest();\n    xhrObj.open(\"GET\", path, false);\n    xhrObj.setRequestHeader(\"Accept\", \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01\");\n    xhrObj.send(\"\");\n    var scriptElement = document.createElement(\"script\");\n    scriptElement.type = \"text/javascript\";\n    scriptElement.text = xhrObj.responseText;\n    scriptElement.id = id;\n    document.head.appendChild(scriptElement);\n};\nvar addScript = function (path, id) {\n    return new Promise(function (resolve, reject) {\n        if (document.getElementById(id)) {\n            // 脚本加载后再次调用直接返回\n            resolve(true);\n            return false;\n        }\n        var scriptElement = document.createElement(\"script\");\n        scriptElement.src = path;\n        scriptElement.async = true;\n        // 循环调用时 Chrome 不会重复请求 js\n        document.head.appendChild(scriptElement);\n        scriptElement.onerror = function (event) {\n            reject(event);\n        };\n        scriptElement.onload = function () {\n            if (document.getElementById(id)) {\n                // 循环调用需清除 DOM 中的 script 标签\n                scriptElement.remove();\n                resolve(true);\n                return false;\n            }\n            scriptElement.id = id;\n            resolve(true);\n        };\n    });\n};\n\n\n/***/ }),\n\n/***/ 449:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   $: () => (/* binding */ abcRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar abcRender = function (element, cdn) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var abcElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.abcRenderAdapter.getElements(element);\n    if (abcElements.length > 0) {\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/abcjs/abcjs_basic.min.js\"), \"vditorAbcjsScript\").then(function () {\n            abcElements.forEach(function (item) {\n                if (item.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                    item.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                    return;\n                }\n                if (item.getAttribute(\"data-processed\") === \"true\") {\n                    return;\n                }\n                ABCJS.renderAbc(item, _adapterRender__WEBPACK_IMPORTED_MODULE_1__.abcRenderAdapter.getCode(item).trim());\n                item.style.overflowX = \"auto\";\n                item.setAttribute(\"data-processed\", \"true\");\n            });\n        });\n    }\n};\n\n\n/***/ }),\n\n/***/ 516:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   m: () => (/* binding */ graphvizRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar graphvizRender = function (element, cdn) {\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var graphvizElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.graphvizRenderAdapter.getElements(element);\n    if (graphvizElements.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/graphviz/viz.js\"), \"vditorGraphVizScript\").then(function () {\n        graphvizElements.forEach(function (e) {\n            var code = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.graphvizRenderAdapter.getCode(e);\n            if (e.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                e.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                return;\n            }\n            if (e.getAttribute(\"data-processed\") === \"true\" || code.trim() === \"\") {\n                return;\n            }\n            try {\n                var blob = new Blob([\"importScripts('\".concat(document.getElementById(\"vditorGraphVizScript\").src.replace(\"viz.js\", \"full.render.js\"), \"');\")], { type: \"application/javascript\" });\n                var url = window.URL || window.webkitURL;\n                var blobUrl = url.createObjectURL(blob);\n                var worker = new Worker(blobUrl);\n                new Viz({ worker: worker })\n                    .renderSVGElement(code).then(function (result) {\n                    e.innerHTML = result.outerHTML;\n                }).catch(function (error) {\n                    e.innerHTML = \"graphviz render error: <br>\".concat(error);\n                    e.className = \"vditor-reset--error\";\n                });\n            }\n            catch (e) {\n                console.error(\"graphviz error\", e);\n            }\n            e.setAttribute(\"data-processed\", \"true\");\n        });\n    });\n};\n\n\n/***/ }),\n\n/***/ 600:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   h: () => (/* binding */ merge)\n/* harmony export */ });\nvar merge = function () {\n    var options = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        options[_i] = arguments[_i];\n    }\n    var target = {};\n    var merger = function (obj) {\n        for (var prop in obj) {\n            if (obj.hasOwnProperty(prop)) {\n                if (Object.prototype.toString.call(obj[prop]) === \"[object Object]\") {\n                    target[prop] = merge(target[prop], obj[prop]);\n                }\n                else {\n                    target[prop] = obj[prop];\n                }\n            }\n        }\n    };\n    for (var i = 0; i < options.length; i++) {\n        merger(options[i]);\n    }\n    return target;\n};\n\n\n/***/ }),\n\n/***/ 625:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   $: () => (/* binding */ highlightRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _util_addStyle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10);\n\n\n\nvar highlightRender = function (hljsOption, element, cdn) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var style = hljsOption.style;\n    if (!_constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CODE_THEME.includes(style)) {\n        style = \"github\";\n    }\n    var vditorHljsStyle = document.getElementById(\"vditorHljsStyle\");\n    var href = \"\".concat(cdn, \"/dist/js/highlight.js/styles/\").concat(style, \".min.css\");\n    if (vditorHljsStyle && vditorHljsStyle.getAttribute('href') !== href) {\n        vditorHljsStyle.remove();\n    }\n    (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_1__/* .addStyle */ .T)(\"\".concat(cdn, \"/dist/js/highlight.js/styles/\").concat(style, \".min.css\"), \"vditorHljsStyle\");\n    if (hljsOption.enable === false) {\n        return;\n    }\n    var codes = element.querySelectorAll(\"pre > code\");\n    if (codes.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/highlight.js/highlight.min.js?v=11.7.0\"), \"vditorHljsScript\").then(function () {\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/highlight.js/third-languages.js?v=1.0.1\"), \"vditorHljsThirdScript\").then(function () {\n            element.querySelectorAll(\"pre > code\").forEach(function (block) {\n                // ir & wysiwyg 区域不渲染\n                if (block.parentElement.classList.contains(\"vditor-ir__marker--pre\") ||\n                    block.parentElement.classList.contains(\"vditor-wysiwyg__pre\")) {\n                    return;\n                }\n                if (block.classList.contains(\"language-mermaid\") || block.classList.contains(\"language-flowchart\") ||\n                    block.classList.contains(\"language-echarts\") || block.classList.contains(\"language-mindmap\") ||\n                    block.classList.contains(\"language-plantuml\") || block.classList.contains(\"language-smiles\") ||\n                    block.classList.contains(\"language-abc\") || block.classList.contains(\"language-graphviz\") ||\n                    block.classList.contains(\"language-math\")) {\n                    return;\n                }\n                if (hljsOption.defaultLang !== \"\" && block.className.indexOf(\"language-\") === -1) {\n                    block.classList.add(\"language-\" + hljsOption.defaultLang);\n                }\n                var language = block.className.replace(\"language-\", \"\");\n                if (!window.hljs.getLanguage(language)) {\n                    language = \"plaintext\";\n                }\n                block.innerHTML = window.hljs.highlight(block.textContent, {\n                    language: language,\n                    ignoreIllegals: true\n                }).value;\n                block.classList.add(\"hljs\");\n                if (!hljsOption.lineNumber) {\n                    return;\n                }\n                block.classList.add(\"vditor-linenumber\");\n                var linenNumberTemp = block.querySelector(\".vditor-linenumber__temp\");\n                if (!linenNumberTemp) {\n                    linenNumberTemp = document.createElement(\"div\");\n                    linenNumberTemp.className = \"vditor-linenumber__temp\";\n                    block.insertAdjacentElement(\"beforeend\", linenNumberTemp);\n                }\n                var whiteSpace = getComputedStyle(block).whiteSpace;\n                var isSoftWrap = false;\n                if (whiteSpace === \"pre-wrap\" || whiteSpace === \"pre-line\") {\n                    isSoftWrap = true;\n                }\n                var lineNumberHTML = \"\";\n                var lineList = block.textContent.split(/\\r\\n|\\r|\\n/g);\n                lineList.pop();\n                lineList.map(function (line) {\n                    var lineHeight = \"\";\n                    if (isSoftWrap) {\n                        linenNumberTemp.textContent = line || \"\\n\";\n                        lineHeight = \" style=\\\"height:\".concat(linenNumberTemp.getBoundingClientRect().height, \"px\\\"\");\n                    }\n                    lineNumberHTML += \"<span\".concat(lineHeight, \"></span>\");\n                });\n                linenNumberTemp.style.display = \"none\";\n                lineNumberHTML = \"<span class=\\\"vditor-linenumber__rows\\\">\".concat(lineNumberHTML, \"</span>\");\n                block.insertAdjacentHTML(\"beforeend\", lineNumberHTML);\n            });\n        });\n    });\n};\n\n\n/***/ }),\n\n/***/ 649:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   o: () => (/* binding */ previewImage)\n/* harmony export */ });\nvar previewImage = function (oldImgElement, lang, theme) {\n    if (lang === void 0) { lang = \"zh_CN\"; }\n    if (theme === void 0) { theme = \"classic\"; }\n    var oldImgRect = oldImgElement.getBoundingClientRect();\n    var height = 36;\n    document.body.insertAdjacentHTML(\"beforeend\", \"<div class=\\\"vditor vditor-img\".concat(theme === \"dark\" ? \" vditor--dark\" : \"\", \"\\\">\\n    <div class=\\\"vditor-img__bar\\\">\\n      <span class=\\\"vditor-img__btn\\\" data-deg=\\\"0\\\">\\n        <svg><use xlink:href=\\\"#vditor-icon-redo\\\"></use></svg>\\n        \").concat(window.VditorI18n.spin, \"\\n      </span>\\n      <span class=\\\"vditor-img__btn\\\"  onclick=\\\"this.parentElement.parentElement.outerHTML = '';document.body.style.overflow = ''\\\">\\n        <svg><use xlink:href=\\\"#vditor-icon-close\\\"></use></svg>\\n        \").concat(window.VditorI18n.close, \"\\n      </span>\\n    </div>\\n    <div class=\\\"vditor-img__img\\\" onclick=\\\"this.parentElement.outerHTML = '';document.body.style.overflow = ''\\\">\\n      <img style=\\\"width: \").concat(oldImgElement.width, \"px;height:\").concat(oldImgElement.height, \"px;transform: translate3d(\").concat(oldImgRect.left, \"px, \").concat(oldImgRect.top - height, \"px, 0)\\\" src=\\\"\").concat(oldImgElement.getAttribute(\"src\"), \"\\\">\\n    </div>\\n</div>\"));\n    document.body.style.overflow = \"hidden\";\n    // 图片从原始位置移动到预览正中间的动画效果\n    var imgElement = document.querySelector(\".vditor-img img\");\n    var translate3d = \"translate3d(\".concat(Math.max(0, window.innerWidth - oldImgElement.naturalWidth) / 2, \"px, \").concat(Math.max(0, window.innerHeight - height - oldImgElement.naturalHeight) / 2, \"px, 0)\");\n    setTimeout(function () {\n        imgElement.setAttribute(\"style\", \"transition: transform .3s ease-in-out;transform: \".concat(translate3d));\n        setTimeout(function () {\n            imgElement.parentElement.scrollTo((imgElement.parentElement.scrollWidth - imgElement.parentElement.clientWidth) / 2, (imgElement.parentElement.scrollHeight - imgElement.parentElement.clientHeight) / 2);\n        }, 400);\n    });\n    // 旋转\n    var btnElement = document.querySelector(\".vditor-img__btn\");\n    btnElement.addEventListener(\"click\", function () {\n        var deg = parseInt(btnElement.getAttribute(\"data-deg\"), 10) + 90;\n        if ((deg / 90) % 2 === 1 && oldImgElement.naturalWidth > imgElement.parentElement.clientHeight) {\n            imgElement.style.transform = \"translate3d(\".concat(Math.max(0, window.innerWidth - oldImgElement.naturalWidth) / 2, \"px, \").concat(oldImgElement.naturalWidth / 2 - oldImgElement.naturalHeight / 2, \"px, 0) rotateZ(\").concat(deg, \"deg)\");\n        }\n        else {\n            imgElement.style.transform = \"\".concat(translate3d, \" rotateZ(\").concat(deg, \"deg)\");\n        }\n        btnElement.setAttribute(\"data-deg\", deg.toString());\n        setTimeout(function () {\n            imgElement.parentElement.scrollTo((imgElement.parentElement.scrollWidth - imgElement.parentElement.clientWidth) / 2, (imgElement.parentElement.scrollHeight - imgElement.parentElement.clientHeight) / 2);\n        }, 400);\n    });\n};\n\n\n/***/ }),\n\n/***/ 667:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   c: () => (/* binding */ hasClosestByHeadings)\n/* harmony export */ });\n/* unused harmony export hasClosestByTag */\n// NOTE: 减少 method.ts 打包，故从 hasClosest.ts 中拆分\nvar hasClosestByTag = function (element, nodeName) {\n    if (!element) {\n        return false;\n    }\n    if (element.nodeType === 3) {\n        element = element.parentElement;\n    }\n    var e = element;\n    var isClosest = false;\n    while (e && !isClosest && !e.classList.contains(\"vditor-reset\")) {\n        if (e.nodeName.indexOf(nodeName) === 0) {\n            isClosest = true;\n        }\n        else {\n            e = e.parentElement;\n        }\n    }\n    return isClosest && e;\n};\nvar hasClosestByHeadings = function (element) {\n    var headingElement = hasClosestByTag(element, \"H\");\n    if (headingElement && headingElement.tagName.length === 2 && headingElement.tagName !== \"HR\") {\n        return headingElement;\n    }\n    return false;\n};\n\n\n/***/ }),\n\n/***/ 691:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   N: () => (/* binding */ outlineRender)\n/* harmony export */ });\n/* harmony import */ var _util_hasClosestByHeadings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(667);\n/* harmony import */ var _mathRender__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(947);\n\n\nvar outlineRender = function (contentElement, targetElement, vditor) {\n    var wrapperElement = contentElement;\n    if (contentElement.children.length > 0) {\n        var firstElementChild = contentElement.children[0];\n        if (firstElementChild.classList.contains('vditor-reset')) {\n            contentElement = firstElementChild;\n        }\n    }\n    var tocHTML = \"\";\n    var ids = [];\n    Array.from(contentElement.children).forEach(function (item, index) {\n        if ((0,_util_hasClosestByHeadings__WEBPACK_IMPORTED_MODULE_1__/* .hasClosestByHeadings */ .c)(item)) {\n            if (vditor) {\n                var lastIndex = item.id.lastIndexOf(\"_\");\n                item.id = item.id.substring(0, lastIndex === -1 ? undefined : lastIndex) + \"_\" + index;\n            }\n            ids.push(item.id);\n            tocHTML += item.outerHTML.replace(\"<wbr>\", \"\");\n        }\n    });\n    if (tocHTML === \"\") {\n        targetElement.innerHTML = \"\";\n        return \"\";\n    }\n    var tempElement = document.createElement(\"div\");\n    if (vditor) {\n        vditor.lute.SetToC(true);\n        if (vditor.currentMode === \"wysiwyg\" && !vditor.preview.element.contains(contentElement)) {\n            tempElement.innerHTML = vditor.lute.SpinVditorDOM(\"<p>[ToC]</p>\" + tocHTML);\n        }\n        else if (vditor.currentMode === \"ir\" && !vditor.preview.element.contains(contentElement)) {\n            tempElement.innerHTML = vditor.lute.SpinVditorIRDOM(\"<p>[ToC]</p>\" + tocHTML);\n        }\n        else {\n            tempElement.innerHTML = vditor.lute.HTML2VditorDOM(\"<p>[ToC]</p>\" + tocHTML);\n        }\n        vditor.lute.SetToC(vditor.options.preview.markdown.toc);\n    }\n    else {\n        targetElement.classList.add(\"vditor-outline\");\n        var lute = Lute.New();\n        lute.SetToC(true);\n        tempElement.innerHTML = lute.HTML2VditorDOM(\"<p>[ToC]</p>\" + tocHTML);\n    }\n    var headingsElement = tempElement.firstElementChild.querySelectorAll(\"li > span[data-target-id]\");\n    headingsElement.forEach(function (item, index) {\n        if (item.nextElementSibling && item.nextElementSibling.tagName === \"UL\") {\n            var iconHTML = \"<svg class='vditor-outline__action'><use xlink:href='#vditor-icon-down'></use></svg>\";\n            if (!document.getElementById(\"vditorIconScript\")) {\n                iconHTML = '<svg class=\"vditor-outline__action\" viewBox=\"0 0 32 32\"><path d=\"M3.76 6.12l12.24 12.213 12.24-12.213 3.76 3.76-16 16-16-16 3.76-3.76z\"></path></svg>';\n            }\n            item.innerHTML = \"\".concat(iconHTML, \"<span>\").concat(item.innerHTML, \"</span>\");\n        }\n        else {\n            item.innerHTML = \"<svg></svg><span>\".concat(item.innerHTML, \"</span>\");\n        }\n        item.setAttribute(\"data-target-id\", ids[index]);\n    });\n    tocHTML = tempElement.firstElementChild.innerHTML;\n    if (headingsElement.length === 0) {\n        targetElement.innerHTML = \"\";\n        return tocHTML;\n    }\n    targetElement.innerHTML = tocHTML;\n    if (vditor) {\n        (0,_mathRender__WEBPACK_IMPORTED_MODULE_0__/* .mathRender */ .T)(targetElement, {\n            cdn: vditor.options.cdn,\n            math: vditor.options.preview.math,\n        });\n    }\n    targetElement.firstElementChild.addEventListener(\"click\", function (event) {\n        var target = event.target;\n        while (target && !target.isEqualNode(targetElement)) {\n            if (target.classList.contains(\"vditor-outline__action\")) {\n                if (target.classList.contains(\"vditor-outline__action--close\")) {\n                    target.classList.remove(\"vditor-outline__action--close\");\n                    target.parentElement.nextElementSibling.setAttribute(\"style\", \"display:block\");\n                }\n                else {\n                    target.classList.add(\"vditor-outline__action--close\");\n                    target.parentElement.nextElementSibling.setAttribute(\"style\", \"display:none\");\n                }\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n            }\n            else if (target.getAttribute(\"data-target-id\")) {\n                event.preventDefault();\n                event.stopPropagation();\n                var idElement = document.getElementById(target.getAttribute(\"data-target-id\"));\n                if (!idElement) {\n                    return;\n                }\n                if (vditor) {\n                    if (vditor.options.height === \"auto\") {\n                        var windowScrollY = idElement.offsetTop + vditor.element.offsetTop;\n                        if (!vditor.options.toolbarConfig.pin) {\n                            windowScrollY += vditor.toolbar.element.offsetHeight;\n                        }\n                        window.scrollTo(window.scrollX, windowScrollY);\n                    }\n                    else {\n                        if (vditor.element.offsetTop < window.scrollY) {\n                            window.scrollTo(window.scrollX, vditor.element.offsetTop);\n                        }\n                        if (vditor.preview.element.contains(contentElement)) {\n                            contentElement.parentElement.scrollTop = idElement.offsetTop;\n                        }\n                        else {\n                            contentElement.scrollTop = idElement.offsetTop;\n                        }\n                    }\n                }\n                else {\n                    // 判断contentElement是否可滚动\n                    var isContentScrollable = wrapperElement.scrollHeight > wrapperElement.clientHeight;\n                    if (isContentScrollable) {\n                        // 如果wrapperElement可滚动，使用其scrollTop属性\n                        wrapperElement.scrollTop = idElement.offsetTop;\n                    }\n                    else {\n                        // 如果wrapperElement不可滚动，使用window.scrollTo\n                        window.scrollTo(window.scrollX, idElement.offsetTop);\n                    }\n                }\n                break;\n            }\n            target = target.parentElement;\n        }\n    });\n    return tocHTML;\n};\n\n\n/***/ }),\n\n/***/ 756:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   o: () => (/* binding */ codeRender)\n/* harmony export */ });\n/* harmony import */ var _util_code160to32__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(930);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n\n\nvar codeRender = function (element, option) {\n    Array.from(element.querySelectorAll(\"pre > code\")).filter(function (e, index) {\n        if (e.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n            e.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n            return false;\n        }\n        if (e.classList.contains(\"language-mermaid\") || e.classList.contains(\"language-flowchart\") ||\n            e.classList.contains(\"language-echarts\") || e.classList.contains(\"language-mindmap\") ||\n            e.classList.contains(\"language-plantuml\") || e.classList.contains(\"language-markmap\") ||\n            e.classList.contains(\"language-abc\") || e.classList.contains(\"language-graphviz\") ||\n            e.classList.contains(\"language-math\") || e.classList.contains(\"language-smiles\")) {\n            return false;\n        }\n        if (e.style.maxHeight.indexOf(\"px\") > -1) {\n            return false;\n        }\n        // 避免预览区在渲染后由于代码块过多产生性能问题 https://github.com/b3log/vditor/issues/67\n        if (element.classList.contains(\"vditor-preview\") && index > 5) {\n            return false;\n        }\n        return true;\n    }).forEach(function (e) {\n        var _a, _b, _c;\n        var codeText = e.innerText;\n        if (e.classList.contains(\"highlight-chroma\")) {\n            var codeElement = e.cloneNode(true);\n            codeElement.querySelectorAll(\".highlight-ln\").forEach(function (item) {\n                item.remove();\n            });\n            codeText = codeElement.innerText;\n        }\n        else if (codeText.endsWith(\"\\n\")) {\n            codeText = codeText.substr(0, codeText.length - 1);\n        }\n        var iconHTML = '<svg><use xlink:href=\"#vditor-icon-copy\"></use></svg>';\n        if (!document.getElementById(\"vditorIconScript\")) {\n            iconHTML = '<svg viewBox=\"0 0 32 32\"><path d=\"M22.545-0h-17.455c-1.6 0-2.909 1.309-2.909 2.909v20.364h2.909v-20.364h17.455v-2.909zM26.909 5.818h-16c-1.6 0-2.909 1.309-2.909 2.909v20.364c0 1.6 1.309 2.909 2.909 2.909h16c1.6 0 2.909-1.309 2.909-2.909v-20.364c0-1.6-1.309-2.909-2.909-2.909zM26.909 29.091h-16v-20.364h16v20.364z\"></path></svg>';\n        }\n        var divElement = document.createElement(\"div\");\n        divElement.className = \"vditor-copy\";\n        divElement.innerHTML = \"<span aria-label=\\\"\".concat(((_a = window.VditorI18n) === null || _a === void 0 ? void 0 : _a.copy) || \"复制\", \"\\\"\\nonmouseover=\\\"this.setAttribute('aria-label', '\").concat(((_b = window.VditorI18n) === null || _b === void 0 ? void 0 : _b.copy) || \"复制\", \"')\\\"\\nclass=\\\"vditor-tooltipped vditor-tooltipped__w\\\"\\nonclick=\\\"event.stopPropagation();this.previousElementSibling.select();document.execCommand('copy');this.setAttribute('aria-label', '\").concat(((_c = window.VditorI18n) === null || _c === void 0 ? void 0 : _c.copied) || \"已复制\", \"');this.previousElementSibling.blur()\\\">\").concat(iconHTML, \"</span>\");\n        var textarea = document.createElement(\"textarea\");\n        textarea.value = (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_1__/* .code160to32 */ .p)(codeText);\n        divElement.insertAdjacentElement(\"afterbegin\", textarea);\n        if (option && option.renderMenu) {\n            option.renderMenu(e, divElement);\n        }\n        e.before(divElement);\n        e.style.maxHeight = (window.outerHeight - 40) + \"px\";\n        // https://github.com/Vanessa219/vditor/issues/1356\n        e.insertAdjacentHTML(\"afterend\", \"<span style=\\\"position: absolute\\\">\".concat(_constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.ZWSP, \"</span>\"));\n    });\n};\n\n\n/***/ }),\n\n/***/ 782:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   jl: () => (/* binding */ setSelectionFocus)\n/* harmony export */ });\n/* unused harmony exports getEditorRange, getCursorPosition, selectIsEditor, getSelectPosition, setSelectionByPosition, setRangeByWbr, insertHTML */\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n\n\n\nvar getEditorRange = function (vditor) {\n    var range;\n    var element = vditor[vditor.currentMode].element;\n    if (getSelection().rangeCount > 0) {\n        range = getSelection().getRangeAt(0);\n        if (element.isEqualNode(range.startContainer) || element.contains(range.startContainer)) {\n            return range;\n        }\n    }\n    if (vditor[vditor.currentMode].range) {\n        return vditor[vditor.currentMode].range;\n    }\n    element.focus();\n    range = element.ownerDocument.createRange();\n    range.setStart(element, 0);\n    range.collapse(true);\n    return range;\n};\nvar getCursorPosition = function (editor) {\n    var range = window.getSelection().getRangeAt(0);\n    if (!editor.contains(range.startContainer) && !hasClosestByClassName(range.startContainer, \"vditor-panel--none\")) {\n        return {\n            left: 0,\n            top: 0,\n        };\n    }\n    var parentRect = editor.parentElement.getBoundingClientRect();\n    var cursorRect;\n    if (range.getClientRects().length === 0) {\n        if (range.startContainer.nodeType === 3) {\n            // 空行时，会出现没有 br 的情况，需要根据父元素 <p> 获取位置信息\n            var parent_1 = range.startContainer.parentElement;\n            if (parent_1 && parent_1.getClientRects().length > 0) {\n                cursorRect = parent_1.getClientRects()[0];\n            }\n            else {\n                return {\n                    left: 0,\n                    top: 0,\n                };\n            }\n        }\n        else {\n            var children = range.startContainer.children;\n            if (children[range.startOffset] &&\n                children[range.startOffset].getClientRects().length > 0) {\n                // markdown 模式回车\n                cursorRect = children[range.startOffset].getClientRects()[0];\n            }\n            else if (range.startContainer.childNodes.length > 0) {\n                // in table or code block\n                var cloneRange = range.cloneRange();\n                range.selectNode(range.startContainer.childNodes[Math.max(0, range.startOffset - 1)]);\n                cursorRect = range.getClientRects()[0];\n                range.setEnd(cloneRange.endContainer, cloneRange.endOffset);\n                range.setStart(cloneRange.startContainer, cloneRange.startOffset);\n            }\n            else {\n                cursorRect = range.startContainer.getClientRects()[0];\n            }\n            if (!cursorRect) {\n                var parentElement = range.startContainer.childNodes[range.startOffset];\n                while (!parentElement.getClientRects ||\n                    (parentElement.getClientRects && parentElement.getClientRects().length === 0)) {\n                    parentElement = parentElement.parentElement;\n                }\n                cursorRect = parentElement.getClientRects()[0];\n            }\n        }\n    }\n    else {\n        cursorRect = range.getClientRects()[0];\n    }\n    return {\n        left: cursorRect.left - parentRect.left,\n        top: cursorRect.top - parentRect.top,\n    };\n};\nvar selectIsEditor = function (editor, range) {\n    if (!range) {\n        if (getSelection().rangeCount === 0) {\n            return false;\n        }\n        else {\n            range = getSelection().getRangeAt(0);\n        }\n    }\n    var container = range.commonAncestorContainer;\n    return editor.isEqualNode(container) || editor.contains(container);\n};\nvar setSelectionFocus = function (range) {\n    var selection = window.getSelection();\n    selection.removeAllRanges();\n    selection.addRange(range);\n};\nvar getSelectPosition = function (selectElement, editorElement, range) {\n    var position = {\n        end: 0,\n        start: 0,\n    };\n    if (!range) {\n        if (getSelection().rangeCount === 0) {\n            return position;\n        }\n        range = window.getSelection().getRangeAt(0);\n    }\n    if (selectIsEditor(editorElement, range)) {\n        var preSelectionRange = range.cloneRange();\n        if (selectElement.childNodes[0] && selectElement.childNodes[0].childNodes[0]) {\n            preSelectionRange.setStart(selectElement.childNodes[0].childNodes[0], 0);\n        }\n        else {\n            preSelectionRange.selectNodeContents(selectElement);\n        }\n        preSelectionRange.setEnd(range.startContainer, range.startOffset);\n        position.start = preSelectionRange.toString().length;\n        position.end = position.start + range.toString().length;\n    }\n    return position;\n};\nvar setSelectionByPosition = function (start, end, editor) {\n    var charIndex = 0;\n    var line = 0;\n    var pNode = editor.childNodes[line];\n    var foundStart = false;\n    var stop = false;\n    start = Math.max(0, start);\n    end = Math.max(0, end);\n    var range = editor.ownerDocument.createRange();\n    range.setStart(pNode || editor, 0);\n    range.collapse(true);\n    while (!stop && pNode) {\n        var nextCharIndex = charIndex + pNode.textContent.length;\n        if (!foundStart && start >= charIndex && start <= nextCharIndex) {\n            if (start === 0) {\n                range.setStart(pNode, 0);\n            }\n            else {\n                if (pNode.childNodes[0].nodeType === 3) {\n                    range.setStart(pNode.childNodes[0], start - charIndex);\n                }\n                else if (pNode.nextSibling) {\n                    range.setStartBefore(pNode.nextSibling);\n                }\n                else {\n                    range.setStartAfter(pNode);\n                }\n            }\n            foundStart = true;\n            if (start === end) {\n                stop = true;\n                break;\n            }\n        }\n        if (foundStart && end >= charIndex && end <= nextCharIndex) {\n            if (end === 0) {\n                range.setEnd(pNode, 0);\n            }\n            else {\n                if (pNode.childNodes[0].nodeType === 3) {\n                    range.setEnd(pNode.childNodes[0], end - charIndex);\n                }\n                else if (pNode.nextSibling) {\n                    range.setEndBefore(pNode.nextSibling);\n                }\n                else {\n                    range.setEndAfter(pNode);\n                }\n            }\n            stop = true;\n        }\n        charIndex = nextCharIndex;\n        pNode = editor.childNodes[++line];\n    }\n    if (!stop && editor.childNodes[line - 1]) {\n        range.setStartBefore(editor.childNodes[line - 1]);\n    }\n    setSelectionFocus(range);\n    return range;\n};\nvar setRangeByWbr = function (element, range) {\n    var wbrElement = element.querySelector(\"wbr\");\n    if (!wbrElement) {\n        return;\n    }\n    if (!wbrElement.previousElementSibling) {\n        if (wbrElement.previousSibling) {\n            // text<wbr>\n            range.setStart(wbrElement.previousSibling, wbrElement.previousSibling.textContent.length);\n        }\n        else if (wbrElement.nextSibling) {\n            if (wbrElement.nextSibling.nodeType === 3) {\n                // <wbr>text\n                range.setStart(wbrElement.nextSibling, 0);\n            }\n            else {\n                // <wbr><br> https://github.com/Vanessa219/vditor/issues/400\n                range.setStartBefore(wbrElement.nextSibling);\n            }\n        }\n        else {\n            // 内容为空\n            range.setStart(wbrElement.parentElement, 0);\n        }\n    }\n    else {\n        if (wbrElement.previousElementSibling.isSameNode(wbrElement.previousSibling)) {\n            if (wbrElement.previousElementSibling.lastChild) {\n                // <em>text</em><wbr>\n                range.setStartBefore(wbrElement);\n                range.collapse(true);\n                setSelectionFocus(range);\n                // fix Chrome set range bug: **c**\n                if (isChrome() && (wbrElement.previousElementSibling.tagName === \"EM\" ||\n                    wbrElement.previousElementSibling.tagName === \"STRONG\" ||\n                    wbrElement.previousElementSibling.tagName === \"S\")) {\n                    range.insertNode(document.createTextNode(Constants.ZWSP));\n                    range.collapse(false);\n                }\n                wbrElement.remove();\n                return;\n            }\n            else {\n                // <br><wbr>\n                range.setStartAfter(wbrElement.previousElementSibling);\n            }\n        }\n        else {\n            // <em>text</em>text<wbr>\n            range.setStart(wbrElement.previousSibling, wbrElement.previousSibling.textContent.length);\n        }\n    }\n    range.collapse(true);\n    wbrElement.remove();\n    setSelectionFocus(range);\n};\nvar insertHTML = function (html, vditor) {\n    // 使用 lute 方法会添加 p 元素，只有一个 p 元素的时候进行删除\n    var tempElement = document.createElement(\"div\");\n    tempElement.innerHTML = html;\n    var tempBlockElement = tempElement.querySelectorAll(\"p\");\n    if (tempBlockElement.length === 1 && !tempBlockElement[0].previousSibling && !tempBlockElement[0].nextSibling &&\n        vditor[vditor.currentMode].element.children.length > 0 && tempElement.firstElementChild.tagName === \"P\") {\n        html = tempBlockElement[0].innerHTML.trim();\n    }\n    var pasteElement = document.createElement(\"div\");\n    pasteElement.innerHTML = html;\n    var range = getEditorRange(vditor);\n    if (range.toString() !== \"\") {\n        vditor[vditor.currentMode].preventInput = true;\n        document.execCommand(\"delete\", false, \"\");\n    }\n    // 客户想让粘贴的内容在当前光标位置插入，而不是在光标后面插入，所以注释掉\n    // if (pasteElement.firstElementChild &&\n    //     pasteElement.firstElementChild.getAttribute(\"data-block\") === \"0\") {\n    //     // 粘贴内容为块元素时，应在下一段落中插入\n    //     pasteElement.lastElementChild.insertAdjacentHTML(\"beforeend\", \"<wbr>\");\n    //     const blockElement = hasClosestBlock(range.startContainer);\n    //     if (!blockElement) {\n    //         vditor[vditor.currentMode].element.insertAdjacentHTML(\"beforeend\", pasteElement.innerHTML);\n    //     } else {\n    //         blockElement.insertAdjacentHTML(\"afterend\", pasteElement.innerHTML);\n    //     }\n    //     setRangeByWbr(vditor[vditor.currentMode].element, range);\n    // } else {\n    var pasteTemplate = document.createElement(\"template\");\n    pasteTemplate.innerHTML = html;\n    range.insertNode(pasteTemplate.content.cloneNode(true));\n    range.collapse(false);\n    setSelectionFocus(range);\n    // }\n};\n\n\n/***/ }),\n\n/***/ 794:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SMILESRenderAdapter: () => (/* binding */ SMILESRenderAdapter),\n/* harmony export */   abcRenderAdapter: () => (/* binding */ abcRenderAdapter),\n/* harmony export */   chartRenderAdapter: () => (/* binding */ chartRenderAdapter),\n/* harmony export */   flowchartRenderAdapter: () => (/* binding */ flowchartRenderAdapter),\n/* harmony export */   graphvizRenderAdapter: () => (/* binding */ graphvizRenderAdapter),\n/* harmony export */   markmapRenderAdapter: () => (/* binding */ markmapRenderAdapter),\n/* harmony export */   mathRenderAdapter: () => (/* binding */ mathRenderAdapter),\n/* harmony export */   mermaidRenderAdapter: () => (/* binding */ mermaidRenderAdapter),\n/* harmony export */   mindmapRenderAdapter: () => (/* binding */ mindmapRenderAdapter),\n/* harmony export */   plantumlRenderAdapter: () => (/* binding */ plantumlRenderAdapter)\n/* harmony export */ });\nvar mathRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (element) { return element.querySelectorAll(\".language-math\"); },\n};\nvar SMILESRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (element) { return element.querySelectorAll(\".language-smiles\"); },\n};\nvar mermaidRenderAdapter = {\n    /** 不仅要返回code，并且需要将 code 设置为 el 的 innerHTML */\n    getCode: function (el) { return el.textContent; },\n    getElements: function (element) { return element.querySelectorAll(\".language-mermaid\"); },\n};\nvar markmapRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (element) { return element.querySelectorAll(\".language-markmap\"); },\n};\nvar mindmapRenderAdapter = {\n    getCode: function (el) { return el.getAttribute(\"data-code\"); },\n    getElements: function (el) { return el.querySelectorAll(\".language-mindmap\"); },\n};\nvar chartRenderAdapter = {\n    getCode: function (el) { return el.innerText; },\n    getElements: function (el) { return el.querySelectorAll(\".language-echarts\"); },\n};\nvar abcRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (el) { return el.querySelectorAll(\".language-abc\"); },\n};\nvar graphvizRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (el) { return el.querySelectorAll(\".language-graphviz\"); },\n};\nvar flowchartRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (el) { return el.querySelectorAll(\".language-flowchart\"); },\n};\nvar plantumlRenderAdapter = {\n    getCode: function (el) { return el.textContent; },\n    getElements: function (el) { return el.querySelectorAll(\".language-plantuml\"); },\n};\n\n\n/***/ }),\n\n/***/ 801:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   v: () => (/* binding */ chartRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n/* harmony import */ var _util_function__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(138);\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n\n\n\n\nvar chartRender = function (element, cdn, theme) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var echartsElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.chartRenderAdapter.getElements(element);\n    if (echartsElements.length > 0) {\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/echarts/echarts.min.js?v=5.5.1\"), \"vditorEchartsScript\").then(function () {\n            echartsElements.forEach(function (e) { return __awaiter(void 0, void 0, void 0, function () {\n                var text, option, error_1;\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (e.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                                e.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                                return [2 /*return*/];\n                            }\n                            text = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.chartRenderAdapter.getCode(e).trim();\n                            if (!text) {\n                                return [2 /*return*/];\n                            }\n                            _a.label = 1;\n                        case 1:\n                            _a.trys.push([1, 3, , 4]);\n                            if (e.getAttribute(\"data-processed\") === \"true\") {\n                                return [2 /*return*/];\n                            }\n                            return [4 /*yield*/, (0,_util_function__WEBPACK_IMPORTED_MODULE_3__/* .looseJsonParse */ .kY)(text)];\n                        case 2:\n                            option = _a.sent();\n                            echarts.init(e, theme === \"dark\" ? \"dark\" : undefined).setOption(option);\n                            e.setAttribute(\"data-processed\", \"true\");\n                            return [3 /*break*/, 4];\n                        case 3:\n                            error_1 = _a.sent();\n                            e.className = \"vditor-reset--error\";\n                            e.innerHTML = \"echarts render error: <br>\".concat(error_1);\n                            return [3 /*break*/, 4];\n                        case 4: return [2 /*return*/];\n                    }\n                });\n            }); });\n        });\n    }\n};\n\n\n/***/ }),\n\n/***/ 816:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   M: () => (/* binding */ plantumlRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar plantumlRender = function (element, cdn) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var plantumlElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.plantumlRenderAdapter.getElements(element);\n    if (plantumlElements.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/plantuml/plantuml-encoder.min.js\"), \"vditorPlantumlScript\").then(function () {\n        plantumlElements.forEach(function (e) {\n            if (e.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                e.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                return;\n            }\n            var text = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.plantumlRenderAdapter.getCode(e).trim();\n            if (!text) {\n                return;\n            }\n            try {\n                e.innerHTML = \"<object type=\\\"image/svg+xml\\\" data=\\\"https://www.plantuml.com/plantuml/svg/~1\".concat(plantumlEncoder.encode(text), \"\\\"/>\");\n            }\n            catch (error) {\n                e.className = \"vditor-reset--error\";\n                e.innerHTML = \"plantuml render error: <br>\".concat(error);\n            }\n        });\n    });\n};\n\n\n/***/ }),\n\n/***/ 842:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Y: () => (/* binding */ Constants)\n/* harmony export */ });\n/* unused harmony export VDITOR_VERSION */\nvar _VDITOR_VERSION = (/* unused pure expression or super */ null && (\"3.11.0\"));\n\nvar Constants = /** @class */ (function () {\n    function Constants() {\n    }\n    Constants.ZWSP = \"\\u200b\";\n    Constants.DROP_EDITOR = \"application/editor\";\n    Constants.MOBILE_WIDTH = 520;\n    Constants.CLASS_MENU_DISABLED = \"vditor-menu--disabled\";\n    Constants.EDIT_TOOLBARS = [\"emoji\", \"headings\", \"bold\", \"italic\", \"strike\", \"link\", \"list\",\n        \"ordered-list\", \"outdent\", \"indent\", \"check\", \"line\", \"quote\", \"code\", \"inline-code\", \"insert-after\",\n        \"insert-before\", \"upload\", \"record\", \"table\", 'echarts', 'math', 'mermaid', 'mermaid', 'mindmap', 'mermaid-sequence', 'mermaid-gantt'];\n    Constants.CODE_THEME = [\"a11y-dark\", \"agate\", \"an-old-hope\", \"androidstudio\",\n        \"arta\", \"atom-one-dark\", \"atom-one-dark-reasonable\", \"base16/3024\", \"base16/apathy\", \"base16/apprentice\", \"base16/ashes\", \"base16/atelier-cave\", \"base16/atelier-dune\",\n        \"base16/atelier-estuary\", \"base16/atelier-forest\", \"base16/atelier-heath\", \"base16/atelier-lakeside\", \"base16/atelier-plateau\", \"base16/atelier-savanna\", \"base16/atelier-seaside\", \"base16/atelier-sulphurpool\",\n        \"base16/atlas\", \"base16/bespin\", \"base16/black-metal\", \"base16/black-metal-bathory\", \"base16/black-metal-burzum\", \"base16/black-metal-dark-funeral\", \"base16/black-metal-gorgoroth\", \"base16/black-metal-immortal\", \"base16/black-metal-khold\", \"base16/black-metal-marduk\", \"base16/black-metal-mayhem\", \"base16/black-metal-nile\", \"base16/black-metal-venom\", \"base16/brewer\", \"base16/bright\", \"base16/brogrammer\",\n        \"base16/brush-trees-dark\", \"base16/chalk\", \"base16/circus\", \"base16/classic-dark\", \"base16/codeschool\", \"base16/colors\", \"base16/danqing\", \"base16/darcula\", \"base16/dark-violet\",\n        \"base16/darkmoss\", \"base16/darktooth\", \"base16/decaf\", \"base16/default-dark\", \"base16/dracula\", \"base16/edge-dark\", \"base16/eighties\", \"base16/embers\", \"base16/equilibrium-dark\",\n        \"base16/equilibrium-gray-dark\", \"base16/espresso\", \"base16/eva\", \"base16/eva-dim\", \"base16/flat\", \"base16/framer\", \"base16/gigavolt\", \"base16/google-dark\", \"base16/grayscale-dark\", \"base16/green-screen\", \"base16/gruvbox-dark-hard\", \"base16/gruvbox-dark-medium\",\n        \"base16/gruvbox-dark-pale\", \"base16/gruvbox-dark-soft\", \"base16/hardcore\", \"base16/harmonic16-dark\", \"base16/heetch-dark\", \"base16/helios\", \"base16/hopscotch\", \"base16/horizon-dark\", \"base16/humanoid-dark\", \"base16/ia-dark\", \"base16/icy-dark\", \"base16/ir-black\", \"base16/isotope\",\n        \"base16/kimber\", \"base16/london-tube\", \"base16/macintosh\", \"base16/marrakesh\", \"base16/materia\", \"base16/material\", \"base16/material-darker\", \"base16/material-palenight\", \"base16/material-vivid\",\n        \"base16/mellow-purple\", \"base16/mocha\", \"base16/monokai\", \"base16/nebula\", \"base16/nord\", \"base16/nova\", \"base16/ocean\", \"base16/oceanicnext\", \"base16/onedark\", \"base16/outrun-dark\",\n        \"base16/papercolor-dark\", \"base16/paraiso\", \"base16/pasque\", \"base16/phd\", \"base16/pico\", \"base16/pop\", \"base16/porple\", \"base16/qualia\", \"base16/railscasts\", \"base16/rebecca\",\n        \"base16/ros-pine\", \"base16/ros-pine-moon\", \"base16/sandcastle\", \"base16/seti-ui\", \"base16/silk-dark\", \"base16/snazzy\", \"base16/solar-flare\", \"base16/solarized-dark\", \"base16/spacemacs\", \"base16/summercamp\", \"base16/summerfruit-dark\",\n        \"base16/synth-midnight-terminal-dark\", \"base16/tango\", \"base16/tender\", \"base16/tomorrow-night\", \"base16/twilight\", \"base16/unikitty-dark\", \"base16/vulcan\",\n        \"base16/windows-10\", \"base16/windows-95\", \"base16/windows-high-contrast\", \"base16/windows-nt\", \"base16/woodland\", \"base16/xcode-dusk\", \"base16/zenburn\", \"codepen-embed\", \"dark\",\n        \"devibeans\", \"far\", \"felipec\", \"github-dark\", \"github-dark-dimmed\", \"gml\", \"gradient-dark\", \"hybrid\", \"ir-black\", \"isbl-editor-dark\", \"kimbie-dark\", \"lioshi\",\n        \"monokai\", \"monokai-sublime\", \"night-owl\", \"nnfx-dark\", \"nord\", \"obsidian\", \"panda-syntax-dark\", \"paraiso-dark\", \"pojoaque\", \"qtcreator-dark\", \"rainbow\", \"shades-of-purple\", \"srcery\", \"stackoverflow-dark\",\n        \"sunburst\", \"tomorrow-night-blue\", \"tomorrow-night-bright\", \"tokyo-night-dark\", \"vs2015\", \"xt256\",\n        \"ant-design\",\n        \"a11y-light\", \"arduino-light\", \"ascetic\", \"atom-one-light\", \"base16/atelier-cave-light\",\n        \"base16/atelier-dune-light\", \"base16/atelier-estuary-light\", \"base16/atelier-forest-light\", \"base16/atelier-heath-light\",\n        \"base16/atelier-lakeside-light\", \"base16/atelier-plateau-light\", \"base16/atelier-savanna-light\", \"base16/atelier-seaside-light\", \"base16/atelier-sulphurpool-light\", \"base16/brush-trees\",\n        \"base16/classic-light\", \"base16/cupcake\", \"base16/cupertino\", \"base16/default-light\", \"base16/dirtysea\", \"base16/edge-light\", \"base16/equilibrium-gray-light\", \"base16/equilibrium-light\",\n        \"base16/fruit-soda\", \"base16/github\", \"base16/google-light\", \"base16/grayscale-light\", \"base16/gruvbox-light-hard\", \"base16/gruvbox-light-medium\", \"base16/gruvbox-light-soft\",\n        \"base16/harmonic16-light\", \"base16/heetch-light\", \"base16/humanoid-light\", \"base16/horizon-light\", \"base16/ia-light\", \"base16/material-lighter\", \"base16/mexico-light\",\n        \"base16/one-light\", \"base16/papercolor-light\", \"base16/ros-pine-dawn\", \"base16/sagelight\", \"base16/shapeshifter\",\n        \"base16/silk-light\", \"base16/solar-flare-light\", \"base16/solarized-light\", \"base16/summerfruit-light\", \"base16/synth-midnight-terminal-light\", \"base16/tomorrow\",\n        \"base16/unikitty-light\", \"base16/windows-10-light\", \"base16/windows-95-light\", \"base16/windows-high-contrast-light\", \"brown-paper\", \"base16/windows-nt-light\",\n        \"color-brewer\", \"docco\", \"foundation\", \"github\", \"googlecode\", \"gradient-light\", \"grayscale\", \"idea\", \"intellij-light\", \"isbl-editor-light\", \"kimbie-light\",\n        \"lightfair\", \"magula\", \"mono-blue\", \"nnfx-light\", \"panda-syntax-light\", \"paraiso-light\", \"purebasic\", \"qtcreator-light\", \"routeros\", \"school-book\",\n        \"stackoverflow-light\", \"tokyo-night-light\", \"vs\", \"xcode\", \"default\"];\n    // public static readonly ALIAS_CODE_LANGUAGES: string[] = [\n    //     // 自定义\n    //     \"abc\", \"plantuml\", \"mermaid\", \"flowchart\", \"echarts\", \"mindmap\", \"graphviz\", \"math\", \"markmap\", \"smiles\",\n    //     // 别名\n    //     \"js\", \"ts\", \"html\", \"toml\", \"c#\", \"bat\"\n    // ];\n    Constants.ALIAS_CODE_LANGUAGES = [\n        // 自定义\n        \"mermaid\", \"echarts\", \"mindmap\", \"graphviz\", \"math\", \"markmap\",\n        // 别名\n        \"js\", \"ts\", \"html\", \"toml\", \"c#\", \"bat\"\n    ];\n    Constants.CDN = \"https://unpkg.com/vditor@\".concat(\"3.11.0\");\n    Constants.MARKDOWN_OPTIONS = {\n        autoSpace: false,\n        gfmAutoLink: true,\n        codeBlockPreview: true,\n        fixTermTypo: false,\n        footnotes: true,\n        linkBase: \"\",\n        linkPrefix: \"\",\n        listStyle: false,\n        mark: false,\n        mathBlockPreview: true,\n        paragraphBeginningSpace: false,\n        sanitize: true,\n        toc: false,\n    };\n    Constants.HLJS_OPTIONS = {\n        enable: true,\n        lineNumber: false,\n        defaultLang: \"\",\n        style: \"github\",\n    };\n    Constants.MATH_OPTIONS = {\n        engine: \"KaTeX\",\n        inlineDigit: false,\n        macros: {},\n    };\n    Constants.THEME_OPTIONS = {\n        current: \"light\",\n        list: {\n            \"ant-design\": \"Ant Design\",\n            \"dark\": \"Dark\",\n            \"light\": \"Light\",\n            \"wechat\": \"WeChat\",\n        },\n        path: \"\".concat(Constants.CDN, \"/dist/css/content-theme\"),\n    };\n    return Constants;\n}());\n\n\n\n/***/ }),\n\n/***/ 854:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   h: () => (/* binding */ setCodeTheme)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addStyle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10);\n\n\nvar setCodeTheme = function (codeTheme, cdn) {\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    if (!_constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CODE_THEME.includes(codeTheme)) {\n        codeTheme = \"github\";\n    }\n    var vditorHljsStyle = document.getElementById(\"vditorHljsStyle\");\n    var href = \"\".concat(cdn, \"/dist/js/highlight.js/styles/\").concat(codeTheme, \".min.css\");\n    if (!vditorHljsStyle) {\n        (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_1__/* .addStyle */ .T)(href, \"vditorHljsStyle\");\n    }\n    else if (vditorHljsStyle.getAttribute('href') !== href) {\n        vditorHljsStyle.remove();\n        (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_1__/* .addStyle */ .T)(href, \"vditorHljsStyle\");\n    }\n};\n\n\n/***/ }),\n\n/***/ 860:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   H: () => (/* binding */ setContentTheme)\n/* harmony export */ });\n/* harmony import */ var _util_addStyle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10);\n\nvar setContentTheme = function (contentTheme, path) {\n    if (!contentTheme || !path) {\n        return;\n    }\n    var vditorContentTheme = document.getElementById(\"vditorContentTheme\");\n    var cssPath = \"\".concat(path, \"/\").concat(contentTheme, \".css\");\n    if (!vditorContentTheme) {\n        (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_0__/* .addStyle */ .T)(cssPath, \"vditorContentTheme\");\n    }\n    else if (vditorContentTheme.getAttribute(\"href\") !== cssPath) {\n        vditorContentTheme.remove();\n        (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_0__/* .addStyle */ .T)(cssPath, \"vditorContentTheme\");\n    }\n};\n\n\n/***/ }),\n\n/***/ 883:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   l: () => (/* binding */ mindmapRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar mindmapRender = function (element, cdn, theme) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var mindmapElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.mindmapRenderAdapter.getElements(element);\n    if (mindmapElements.length > 0) {\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/echarts/echarts.min.js?v=5.5.1\"), \"vditorEchartsScript\").then(function () {\n            mindmapElements.forEach(function (e) {\n                if (e.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                    e.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                    return;\n                }\n                var text = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.mindmapRenderAdapter.getCode(e);\n                if (!text) {\n                    return;\n                }\n                try {\n                    if (e.getAttribute(\"data-processed\") === \"true\") {\n                        return;\n                    }\n                    echarts.init(e, theme === \"dark\" ? \"dark\" : undefined).setOption({\n                        series: [\n                            {\n                                data: [JSON.parse(decodeURIComponent(text))],\n                                initialTreeDepth: -1,\n                                itemStyle: {\n                                    borderWidth: 0,\n                                    color: \"#4285f4\",\n                                },\n                                label: {\n                                    backgroundColor: \"#f6f8fa\",\n                                    borderColor: \"#d1d5da\",\n                                    borderRadius: 5,\n                                    borderWidth: 0.5,\n                                    color: \"#586069\",\n                                    lineHeight: 20,\n                                    offset: [-5, 0],\n                                    padding: [0, 5],\n                                    position: \"insideRight\",\n                                },\n                                lineStyle: {\n                                    color: \"#d1d5da\",\n                                    width: 1,\n                                },\n                                roam: true,\n                                symbol: function (value, params) {\n                                    var _a;\n                                    if ((_a = params === null || params === void 0 ? void 0 : params.data) === null || _a === void 0 ? void 0 : _a.children) {\n                                        return \"circle\";\n                                    }\n                                    else {\n                                        return \"path://\";\n                                    }\n                                },\n                                type: \"tree\",\n                            },\n                        ],\n                        tooltip: {\n                            trigger: \"item\",\n                            triggerOn: \"mousemove\",\n                        },\n                    });\n                    e.setAttribute(\"data-processed\", \"true\");\n                }\n                catch (error) {\n                    e.className = \"vditor-reset--error\";\n                    e.innerHTML = \"mindmap render error: <br>\".concat(error);\n                }\n            });\n        });\n    }\n};\n\n\n/***/ }),\n\n/***/ 889:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   D: () => (/* binding */ flowchartRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\nvar flowchartRender = function (element, cdn) {\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var flowchartElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.flowchartRenderAdapter.getElements(element);\n    if (flowchartElements.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/flowchart.js/flowchart.min.js\"), \"vditorFlowchartScript\").then(function () {\n        flowchartElements.forEach(function (item) {\n            if (item.getAttribute(\"data-processed\") === \"true\") {\n                return;\n            }\n            var flowchartObj = flowchart.parse(_adapterRender__WEBPACK_IMPORTED_MODULE_1__.flowchartRenderAdapter.getCode(item));\n            item.innerHTML = \"\";\n            flowchartObj.drawSVG(item);\n            item.setAttribute(\"data-processed\", \"true\");\n        });\n    });\n};\n\n\n/***/ }),\n\n/***/ 930:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   p: () => (/* binding */ code160to32)\n/* harmony export */ });\nvar code160to32 = function (text) {\n    // 非打断空格转换为空格\n    return text.replace(/\\u00a0/g, \" \");\n};\n\n\n/***/ }),\n\n/***/ 947:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   T: () => (/* binding */ mathRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(444);\n/* harmony import */ var _util_addStyle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10);\n/* harmony import */ var _util_code160to32__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(930);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n\n\n\n\n\nvar mathRender = function (element, options) {\n    if (element === void 0) { element = document; }\n    var mathElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.mathRenderAdapter.getElements(element);\n    if (mathElements.length === 0) {\n        return;\n    }\n    var defaultOptions = {\n        cdn: _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN,\n        math: {\n            engine: \"KaTeX\",\n            inlineDigit: false,\n            macros: {},\n        },\n    };\n    if (options && options.math) {\n        options.math =\n            Object.assign({}, defaultOptions.math, options.math);\n    }\n    options = Object.assign({}, defaultOptions, options);\n    if (options.math.engine === \"KaTeX\") {\n        (0,_util_addStyle__WEBPACK_IMPORTED_MODULE_2__/* .addStyle */ .T)(\"\".concat(options.cdn, \"/dist/js/katex/katex.min.css?v=0.16.9\"), \"vditorKatexStyle\");\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_3__/* .addScript */ .Z)(\"\".concat(options.cdn, \"/dist/js/katex/katex.min.js?v=0.16.9\"), \"vditorKatexScript\").then(function () {\n            (0,_util_addScript__WEBPACK_IMPORTED_MODULE_3__/* .addScript */ .Z)(\"\".concat(options.cdn, \"/dist/js/katex/mhchem.min.js?v=0.16.9\"), \"vditorKatexChemScript\").then(function () {\n                mathElements.forEach(function (mathElement) {\n                    if (mathElement.parentElement.classList.contains(\"vditor-wysiwyg__pre\") ||\n                        mathElement.parentElement.classList.contains(\"vditor-ir__marker--pre\")) {\n                        return;\n                    }\n                    if (mathElement.getAttribute(\"data-math\")) {\n                        return;\n                    }\n                    var math = (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_4__/* .code160to32 */ .p)(_adapterRender__WEBPACK_IMPORTED_MODULE_1__.mathRenderAdapter.getCode(mathElement));\n                    mathElement.setAttribute(\"data-math\", math);\n                    try {\n                        mathElement.innerHTML = katex.renderToString(math, {\n                            displayMode: mathElement.tagName === \"DIV\",\n                            output: \"html\",\n                            macros: options.math.macros,\n                        });\n                    }\n                    catch (e) {\n                        mathElement.innerHTML = e.message;\n                        mathElement.className = \"language-math vditor-reset--error\";\n                    }\n                    mathElement.addEventListener(\"copy\", function (event) {\n                        event.stopPropagation();\n                        event.preventDefault();\n                        var vditorMathElement = event.currentTarget.closest(\".language-math\");\n                        event.clipboardData.setData(\"text/html\", vditorMathElement.innerHTML);\n                        event.clipboardData.setData(\"text/plain\", vditorMathElement.getAttribute(\"data-math\"));\n                    });\n                });\n            });\n        });\n    }\n    else if (options.math.engine === \"MathJax\") {\n        var chainAsync_1 = function (fns) {\n            if (fns.length === 0) {\n                return;\n            }\n            var curr = 0;\n            var last = fns[fns.length - 1];\n            var next = function () {\n                var fn = fns[curr++];\n                fn === last ? fn() : fn(next);\n            };\n            next();\n        };\n        if (!window.MathJax) {\n            window.MathJax = {\n                loader: {\n                    paths: { mathjax: \"\".concat(options.cdn, \"/dist/js/mathjax\") },\n                },\n                startup: {\n                    typeset: false,\n                },\n                tex: {\n                    macros: options.math.macros,\n                },\n            };\n            // https://github.com/Vanessa219/vditor/issues/1453\n            Object.assign(window.MathJax, options.math.mathJaxOptions);\n        }\n        // 循环加载会抛异常\n        (0,_util_addScript__WEBPACK_IMPORTED_MODULE_3__/* .addScriptSync */ .U)(\"\".concat(options.cdn, \"/dist/js/mathjax/tex-mml-chtml.js\"), \"protyleMathJaxScript\");\n        var renderMath_1 = function (mathElement, next) {\n            var math = (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_4__/* .code160to32 */ .p)(mathElement.textContent).trim();\n            var mathOptions = window.MathJax.getMetricsFor(mathElement);\n            mathOptions.display = mathElement.tagName === \"DIV\";\n            window.MathJax.tex2chtmlPromise(math, mathOptions).then(function (node) {\n                mathElement.innerHTML = \"\";\n                mathElement.setAttribute(\"data-math\", math);\n                mathElement.append(node);\n                window.MathJax.startup.document.clear();\n                window.MathJax.startup.document.updateDocument();\n                var errorTextElement = node.querySelector('[data-mml-node=\"merror\"]');\n                if (errorTextElement && errorTextElement.textContent.trim() !== \"\") {\n                    mathElement.innerHTML = errorTextElement.textContent.trim();\n                    mathElement.className = \"vditor-reset--error\";\n                }\n                if (next) {\n                    next();\n                }\n            });\n        };\n        window.MathJax.startup.promise.then(function () {\n            var chains = [];\n            var _loop_1 = function (i) {\n                var mathElement = mathElements[i];\n                if (!mathElement.parentElement.classList.contains(\"vditor-wysiwyg__pre\") &&\n                    !mathElement.parentElement.classList.contains(\"vditor-ir__marker--pre\") &&\n                    !mathElement.getAttribute(\"data-math\") && (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_4__/* .code160to32 */ .p)(mathElement.textContent).trim()) {\n                    chains.push(function (next) {\n                        if (i === mathElements.length - 1) {\n                            renderMath_1(mathElement);\n                        }\n                        else {\n                            renderMath_1(mathElement, next);\n                        }\n                    });\n                }\n            };\n            for (var i = 0; i < mathElements.length; i++) {\n                _loop_1(i);\n            }\n            chainAsync_1(chains);\n        });\n    }\n};\n\n\n/***/ }),\n\n/***/ 998:\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   e: () => (/* binding */ mermaidRender)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(842);\n/* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(444);\n/* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(794);\n/* harmony import */ var _util_function__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(138);\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n\n\n\n\nvar mermaidRender = function (element, cdn, theme) {\n    if (element === void 0) { element = document; }\n    if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants */ .Y.CDN; }\n    var mermaidElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.mermaidRenderAdapter.getElements(element);\n    if (mermaidElements.length === 0) {\n        return;\n    }\n    (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .Z)(\"\".concat(cdn, \"/dist/js/mermaid/mermaid.min.js?v=11.6.0\"), \"vditorMermaidScript\").then(function () {\n        var config = {\n            securityLevel: \"loose\",\n            altFontFamily: \"sans-serif\",\n            fontFamily: \"sans-serif\",\n            startOnLoad: false,\n            flowchart: {\n                htmlLabels: true,\n                useMaxWidth: !0\n            },\n            sequence: {\n                useMaxWidth: true,\n                diagramMarginX: 8,\n                diagramMarginY: 8,\n                boxMargin: 8,\n                showSequenceNumbers: true // Mermaid 时序图增加序号 https://github.com/siyuan-note/siyuan/pull/6992 https://mermaid.js.org/syntax/sequenceDiagram.html#sequencenumbers\n            },\n            gantt: {\n                leftPadding: 75,\n                rightPadding: 20\n            }\n        };\n        if (theme === \"dark\") {\n            config.theme = \"dark\";\n        }\n        mermaid.initialize(config);\n        mermaidElements.forEach(function (item) { return __awaiter(void 0, void 0, void 0, function () {\n            var code, id, mermaidData, e_1, errorElement;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        code = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.mermaidRenderAdapter.getCode(item);\n                        if (item.getAttribute(\"data-processed\") === \"true\" || code.trim() === \"\") {\n                            return [2 /*return*/];\n                        }\n                        id = \"mermaid\" + (0,_util_function__WEBPACK_IMPORTED_MODULE_3__/* .genUUID */ .Ee)();\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, mermaid.render(id, item.textContent)];\n                    case 2:\n                        mermaidData = _a.sent();\n                        item.innerHTML = mermaidData.svg;\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_1 = _a.sent();\n                        errorElement = document.querySelector(\"#\" + id);\n                        item.innerHTML = \"\".concat(errorElement.outerHTML, \"<br>\\n<div style=\\\"text-align: left\\\"><small>\").concat(e_1.message.replace(/\\n/, \"<br>\"), \"</small></div>\");\n                        errorElement.parentElement.remove();\n                        return [3 /*break*/, 4];\n                    case 4:\n                        item.setAttribute(\"data-processed\", \"true\");\n                        return [2 /*return*/];\n                }\n            });\n        }); });\n    });\n};\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": () => (/* binding */ method)\n});\n\n// EXTERNAL MODULE: ./src/ts/markdown/abcRender.ts\nvar abcRender = __webpack_require__(449);\n// EXTERNAL MODULE: ./src/ts/markdown/adapterRender.ts\nvar adapterRender = __webpack_require__(794);\n// EXTERNAL MODULE: ./src/ts/markdown/chartRender.ts\nvar chartRender = __webpack_require__(801);\n// EXTERNAL MODULE: ./src/ts/markdown/codeRender.ts\nvar codeRender = __webpack_require__(756);\n// EXTERNAL MODULE: ./src/ts/markdown/flowchartRender.ts\nvar flowchartRender = __webpack_require__(889);\n// EXTERNAL MODULE: ./src/ts/markdown/graphvizRender.ts\nvar graphvizRender = __webpack_require__(516);\n// EXTERNAL MODULE: ./src/ts/markdown/highlightRender.ts\nvar highlightRender = __webpack_require__(625);\n;// ./src/ts/markdown/lazyLoadImageRender.ts\nvar lazyLoadImageRender = function (element) {\n    if (element === void 0) { element = document; }\n    var loadImg = function (it) {\n        var testImage = document.createElement(\"img\");\n        testImage.src = it.getAttribute(\"data-src\");\n        testImage.addEventListener(\"load\", function () {\n            if (!it.getAttribute(\"style\") && !it.getAttribute(\"class\") &&\n                !it.getAttribute(\"width\") && !it.getAttribute(\"height\")) {\n                if (testImage.naturalHeight > testImage.naturalWidth &&\n                    testImage.naturalWidth / testImage.naturalHeight <\n                        document.querySelector(\".vditor-reset\").clientWidth / (window.innerHeight - 40) &&\n                    testImage.naturalHeight > (window.innerHeight - 40)) {\n                    it.style.height = (window.innerHeight - 40) + \"px\";\n                }\n            }\n            it.src = testImage.src;\n        });\n        it.removeAttribute(\"data-src\");\n    };\n    if (!(\"IntersectionObserver\" in window)) {\n        element.querySelectorAll(\"img\").forEach(function (imgElement) {\n            if (imgElement.getAttribute(\"data-src\")) {\n                loadImg(imgElement);\n            }\n        });\n        return false;\n    }\n    if (window.vditorImageIntersectionObserver) {\n        window.vditorImageIntersectionObserver.disconnect();\n        element.querySelectorAll(\"img\").forEach(function (imgElement) {\n            window.vditorImageIntersectionObserver.observe(imgElement);\n        });\n    }\n    else {\n        window.vditorImageIntersectionObserver = new IntersectionObserver(function (entries) {\n            entries.forEach(function (entrie) {\n                if ((typeof entrie.isIntersecting === \"undefined\"\n                    ? entrie.intersectionRatio !== 0\n                    : entrie.isIntersecting)\n                    && entrie.target.getAttribute(\"data-src\")) {\n                    loadImg(entrie.target);\n                }\n            });\n        });\n        element.querySelectorAll(\"img\").forEach(function (imgElement) {\n            window.vditorImageIntersectionObserver.observe(imgElement);\n        });\n    }\n};\n\n// EXTERNAL MODULE: ./src/ts/markdown/mathRender.ts\nvar mathRender = __webpack_require__(947);\n// EXTERNAL MODULE: ./src/ts/markdown/mediaRender.ts\nvar mediaRender = __webpack_require__(13);\n// EXTERNAL MODULE: ./src/ts/markdown/mermaidRender.ts\nvar mermaidRender = __webpack_require__(998);\n// EXTERNAL MODULE: ./src/ts/markdown/SMILESRender.ts\nvar SMILESRender = __webpack_require__(292);\n// EXTERNAL MODULE: ./src/ts/markdown/markmapRender.ts\nvar markmapRender = __webpack_require__(316);\n// EXTERNAL MODULE: ./src/ts/markdown/mindmapRender.ts\nvar mindmapRender = __webpack_require__(883);\n// EXTERNAL MODULE: ./src/ts/markdown/outlineRender.ts\nvar outlineRender = __webpack_require__(691);\n// EXTERNAL MODULE: ./src/ts/markdown/plantumlRender.ts\nvar plantumlRender = __webpack_require__(816);\n// EXTERNAL MODULE: ./src/ts/constants.ts\nvar constants = __webpack_require__(842);\n// EXTERNAL MODULE: ./src/ts/ui/setContentTheme.ts\nvar setContentTheme = __webpack_require__(860);\n// EXTERNAL MODULE: ./src/ts/util/addScript.ts\nvar addScript = __webpack_require__(444);\n// EXTERNAL MODULE: ./src/ts/util/hasClosest.ts\nvar hasClosest = __webpack_require__(145);\n// EXTERNAL MODULE: ./src/ts/util/merge.ts\nvar merge = __webpack_require__(600);\n;// ./src/ts/markdown/anchorRender.ts\nvar anchorRender = function (type) {\n    document.querySelectorAll(\".vditor-anchor\").forEach(function (anchor) {\n        if (type === 1) {\n            anchor.classList.add(\"vditor-anchor--left\");\n        }\n        anchor.onclick = function () {\n            var id = anchor.getAttribute(\"href\").substr(1);\n            var top = document.getElementById(\"vditorAnchor-\" + id).offsetTop;\n            document.querySelector(\"html\").scrollTop = top;\n        };\n    });\n    window.onhashchange = function () {\n        var element = document.getElementById(\"vditorAnchor-\" + decodeURIComponent(window.location.hash.substr(1)));\n        if (element) {\n            document.querySelector(\"html\").scrollTop = element.offsetTop;\n        }\n    };\n};\n\n// EXTERNAL MODULE: ./src/ts/markdown/setLute.ts\nvar setLute = __webpack_require__(329);\n// EXTERNAL MODULE: ./src/ts/util/selection.ts\nvar selection = __webpack_require__(782);\n;// ./src/ts/markdown/speechRender.ts\n\nvar speechRender = function (element, lang) {\n    if (lang === void 0) { lang = \"zh_CN\"; }\n    if (typeof speechSynthesis === \"undefined\" || typeof SpeechSynthesisUtterance === \"undefined\") {\n        return;\n    }\n    var getVoice = function () {\n        var voices = speechSynthesis.getVoices();\n        var currentVoice;\n        var defaultVoice;\n        voices.forEach(function (item) {\n            if (item.lang === lang.replace(\"_\", \"-\")) {\n                currentVoice = item;\n            }\n            if (item.default) {\n                defaultVoice = item;\n            }\n        });\n        if (!currentVoice) {\n            currentVoice = defaultVoice;\n        }\n        return currentVoice;\n    };\n    var playSVG = '<svg><use xlink:href=\"#vditor-icon-play\"></use></svg>';\n    var pauseSVG = '<svg><use xlink:href=\"#vditor-icon-pause\"></use></svg>';\n    if (!document.getElementById(\"vditorIconScript\")) {\n        playSVG = '<svg viewBox=\"0 0 32 32\"><path d=\"M3.436 0l25.128 16-25.128 16v-32z\"></path></svg>';\n        pauseSVG = '<svg viewBox=\"0 0 32 32\"><path d=\"M20.617 0h9.128v32h-9.128v-32zM2.255 32v-32h9.128v32h-9.128z\"></path></svg>';\n    }\n    var speechDom = document.querySelector(\".vditor-speech\");\n    if (!speechDom) {\n        speechDom = document.createElement(\"button\");\n        speechDom.className = \"vditor-speech\";\n        element.insertAdjacentElement(\"beforeend\", speechDom);\n        if (speechSynthesis.onvoiceschanged !== undefined) {\n            speechSynthesis.onvoiceschanged = getVoice;\n        }\n    }\n    var voice = getVoice();\n    var utterThis = new SpeechSynthesisUtterance();\n    utterThis.voice = voice;\n    utterThis.onend = utterThis.onerror = function () {\n        speechDom.style.display = \"none\";\n        speechSynthesis.cancel();\n        speechDom.classList.remove(\"vditor-speech--current\");\n        speechDom.innerHTML = playSVG;\n    };\n    element.addEventListener(window.ontouchstart !== undefined ? \"touchend\" : \"click\", function (event) {\n        var target = event.target;\n        if (target.classList.contains(\"vditor-speech\") || target.parentElement.classList.contains(\"vditor-speech\")) {\n            if (!speechDom.classList.contains(\"vditor-speech--current\")) {\n                utterThis.text = speechDom.getAttribute(\"data-text\");\n                speechSynthesis.speak(utterThis);\n                speechDom.classList.add(\"vditor-speech--current\");\n                speechDom.innerHTML = pauseSVG;\n            }\n            else {\n                if (speechSynthesis.speaking) {\n                    if (speechSynthesis.paused) {\n                        speechSynthesis.resume();\n                        speechDom.innerHTML = pauseSVG;\n                    }\n                    else {\n                        speechSynthesis.pause();\n                        speechDom.innerHTML = playSVG;\n                    }\n                }\n            }\n            (0,selection/* setSelectionFocus */.jl)(window.vditorSpeechRange);\n            element.focus();\n            return;\n        }\n        speechDom.style.display = \"none\";\n        speechSynthesis.cancel();\n        speechDom.classList.remove(\"vditor-speech--current\");\n        speechDom.innerHTML = playSVG;\n        if (getSelection().rangeCount === 0) {\n            return;\n        }\n        var range = getSelection().getRangeAt(0);\n        var text = range.toString().trim();\n        if (!text) {\n            return;\n        }\n        window.vditorSpeechRange = range.cloneRange();\n        var rect = range.getBoundingClientRect();\n        speechDom.innerHTML = playSVG;\n        speechDom.style.display = \"block\";\n        speechDom.style.top = (rect.top + rect.height + document.querySelector(\"html\").scrollTop - 20) + \"px\";\n        if (window.ontouchstart !== undefined) {\n            speechDom.style.left = (event.changedTouches[event.changedTouches.length - 1].pageX + 2) + \"px\";\n        }\n        else {\n            speechDom.style.left = (event.clientX + 2) + \"px\";\n        }\n        speechDom.setAttribute(\"data-text\", text);\n    });\n};\n\n;// ./src/ts/markdown/previewRender.ts\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar mergeOptions = function (options) {\n    var _a;\n    var defaultOption = {\n        anchor: 0,\n        cdn: constants/* Constants */.Y.CDN,\n        customEmoji: {},\n        emojiPath: \"\".concat(constants/* Constants */.Y.CDN, \"/dist/images/emoji\"),\n        hljs: constants/* Constants */.Y.HLJS_OPTIONS,\n        icon: \"ant\",\n        lang: \"zh_CN\",\n        markdown: constants/* Constants */.Y.MARKDOWN_OPTIONS,\n        math: constants/* Constants */.Y.MATH_OPTIONS,\n        mode: \"light\",\n        speech: {\n            enable: false,\n        },\n        render: {\n            media: {\n                enable: true,\n            }\n        },\n        loading: false,\n        theme: constants/* Constants */.Y.THEME_OPTIONS,\n    };\n    if (options.cdn) {\n        if (!((_a = options.theme) === null || _a === void 0 ? void 0 : _a.path)) {\n            defaultOption.theme.path = \"\".concat(options.cdn, \"/dist/css/content-theme\");\n        }\n        if (!options.emojiPath) {\n            defaultOption.emojiPath = \"\".concat(options.cdn, \"/dist/images/emoji\");\n        }\n    }\n    return (0,merge/* merge */.h)(defaultOption, options);\n};\nvar md2html = function (mdText, options) {\n    var mergedOptions = mergeOptions(options);\n    return (0,addScript/* addScript */.Z)(\"\".concat(mergedOptions.cdn, \"/dist/js/lute/lute.min.js\"), \"vditorLuteScript\").then(function () {\n        var lute = (0,setLute/* setLute */.X)({\n            autoSpace: mergedOptions.markdown.autoSpace,\n            gfmAutoLink: mergedOptions.markdown.gfmAutoLink,\n            codeBlockPreview: mergedOptions.markdown.codeBlockPreview,\n            emojiSite: mergedOptions.emojiPath,\n            emojis: mergedOptions.customEmoji,\n            fixTermTypo: mergedOptions.markdown.fixTermTypo,\n            footnotes: mergedOptions.markdown.footnotes,\n            headingAnchor: mergedOptions.anchor !== 0,\n            inlineMathDigit: mergedOptions.math.inlineDigit,\n            lazyLoadImage: mergedOptions.lazyLoadImage,\n            linkBase: mergedOptions.markdown.linkBase,\n            linkPrefix: mergedOptions.markdown.linkPrefix,\n            listStyle: mergedOptions.markdown.listStyle,\n            mark: mergedOptions.markdown.mark,\n            mathBlockPreview: mergedOptions.markdown.mathBlockPreview,\n            paragraphBeginningSpace: mergedOptions.markdown.paragraphBeginningSpace,\n            sanitize: mergedOptions.markdown.sanitize,\n            toc: mergedOptions.markdown.toc,\n        });\n        if (options === null || options === void 0 ? void 0 : options.renderers) {\n            lute.SetJSRenderers({\n                renderers: {\n                    Md2HTML: options.renderers,\n                },\n            });\n        }\n        lute.SetHeadingID(true);\n        return lute.Md2HTML(mdText);\n    });\n};\nvar previewRender = function (previewElement, markdown, options) { return __awaiter(void 0, void 0, void 0, function () {\n    var mergedOptions, html, children, i18nScriptPrefix, i18nScriptID_1;\n    return __generator(this, function (_a) {\n        switch (_a.label) {\n            case 0:\n                mergedOptions = mergeOptions(options);\n                return [4 /*yield*/, md2html(markdown, mergedOptions)];\n            case 1:\n                html = _a.sent();\n                if (mergedOptions.transform) {\n                    html = mergedOptions.transform(html);\n                }\n                children = previewElement.children;\n                // 如果children 还有子节点，则用子节点\n                if (children.length > 0) {\n                    previewElement = children[0];\n                }\n                previewElement.innerHTML = html;\n                previewElement.classList.add(\"vditor-reset\");\n                if (!!mergedOptions.i18n) return [3 /*break*/, 5];\n                if (!![\"en_US\", \"fr_FR\", \"pt_BR\", \"ja_JP\", \"ko_KR\", \"ru_RU\", \"sv_SE\", \"zh_CN\", \"zh_TW\"].includes(mergedOptions.lang)) return [3 /*break*/, 2];\n                throw new Error(\"options.lang error, see https://ld246.com/article/1549638745630#options\");\n            case 2:\n                i18nScriptPrefix = \"vditorI18nScript\";\n                i18nScriptID_1 = i18nScriptPrefix + mergedOptions.lang;\n                document.querySelectorAll(\"head script[id^=\\\"\".concat(i18nScriptPrefix, \"\\\"]\")).forEach(function (el) {\n                    if (el.id !== i18nScriptID_1) {\n                        document.head.removeChild(el);\n                    }\n                });\n                return [4 /*yield*/, (0,addScript/* addScript */.Z)(\"\".concat(mergedOptions.cdn, \"/dist/js/i18n/\").concat(mergedOptions.lang, \".js\"), i18nScriptID_1)];\n            case 3:\n                _a.sent();\n                _a.label = 4;\n            case 4: return [3 /*break*/, 6];\n            case 5:\n                window.VditorI18n = mergedOptions.i18n;\n                _a.label = 6;\n            case 6:\n                if (!mergedOptions.icon) return [3 /*break*/, 8];\n                return [4 /*yield*/, (0,addScript/* addScript */.Z)(\"\".concat(mergedOptions.cdn, \"/dist/js/icons/\").concat(mergedOptions.icon, \".js\"), \"vditorIconScript\")];\n            case 7:\n                _a.sent();\n                _a.label = 8;\n            case 8:\n                (0,setContentTheme/* setContentTheme */.H)(mergedOptions.theme.current, mergedOptions.theme.path);\n                if (mergedOptions.anchor === 1) {\n                    previewElement.classList.add(\"vditor-reset--anchor\");\n                }\n                (0,codeRender/* codeRender */.o)(previewElement, mergedOptions.hljs);\n                (0,highlightRender/* highlightRender */.$)(mergedOptions.hljs, previewElement, mergedOptions.cdn);\n                (0,mathRender/* mathRender */.T)(previewElement, {\n                    cdn: mergedOptions.cdn,\n                    math: mergedOptions.math,\n                });\n                (0,mermaidRender/* mermaidRender */.e)(previewElement, mergedOptions.cdn, mergedOptions.mode);\n                (0,SMILESRender/* SMILESRender */.Y)(previewElement, mergedOptions.cdn, mergedOptions.mode);\n                (0,markmapRender/* markmapRender */.K)(previewElement, mergedOptions.cdn);\n                (0,flowchartRender/* flowchartRender */.D)(previewElement, mergedOptions.cdn);\n                (0,graphvizRender/* graphvizRender */.m)(previewElement, mergedOptions.cdn);\n                (0,chartRender/* chartRender */.v)(previewElement, mergedOptions.cdn, mergedOptions.mode);\n                (0,mindmapRender/* mindmapRender */.l)(previewElement, mergedOptions.cdn, mergedOptions.mode);\n                (0,plantumlRender/* plantumlRender */.M)(previewElement, mergedOptions.cdn);\n                (0,abcRender/* abcRender */.$)(previewElement, mergedOptions.cdn);\n                if (mergedOptions.render.media.enable) {\n                    (0,mediaRender/* mediaRender */.l)(previewElement);\n                }\n                if (mergedOptions.speech.enable) {\n                    speechRender(previewElement);\n                }\n                if (mergedOptions.anchor !== 0) {\n                    anchorRender(mergedOptions.anchor);\n                }\n                if (mergedOptions.after) {\n                    mergedOptions.after();\n                }\n                if (mergedOptions.lazyLoadImage) {\n                    lazyLoadImageRender(previewElement);\n                }\n                previewElement.addEventListener(\"click\", function (event) {\n                    var spanElement = (0,hasClosest/* hasClosestByMatchTag */._Y)(event.target, \"SPAN\");\n                    if (spanElement && (0,hasClosest/* hasClosestByClassName */.KJ)(spanElement, \"vditor-toc\")) {\n                        var headingElement = previewElement.querySelector(\"#\" + spanElement.getAttribute(\"data-target-id\"));\n                        if (headingElement) {\n                            window.scrollTo(window.scrollX, headingElement.offsetTop);\n                        }\n                        return;\n                    }\n                });\n                return [2 /*return*/];\n        }\n    });\n}); };\n\n// EXTERNAL MODULE: ./src/ts/preview/image.ts\nvar preview_image = __webpack_require__(649);\n// EXTERNAL MODULE: ./src/ts/ui/setCodeTheme.ts\nvar setCodeTheme = __webpack_require__(854);\n;// ./src/method.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Vditor = /** @class */ (function () {\n    function Vditor() {\n    }\n    /** 点击图片放大 */\n    Vditor.adapterRender = adapterRender;\n    /** 点击图片放大 */\n    Vditor.previewImage = preview_image/* previewImage */.o;\n    /** 为 element 中的代码块添加复制按钮 */\n    Vditor.codeRender = codeRender/* codeRender */.o;\n    /** 对 graphviz 进行渲染 */\n    Vditor.graphvizRender = graphvizRender/* graphvizRender */.m;\n    /** 为 element 中的代码块进行高亮渲染 */\n    Vditor.highlightRender = highlightRender/* highlightRender */.$;\n    /** 对数学公式进行渲染 */\n    Vditor.mathRender = mathRender/* mathRender */.T;\n    /** 流程图/时序图/甘特图渲染 */\n    Vditor.mermaidRender = mermaidRender/* mermaidRender */.e;\n    /** 化学物质结构渲染 */\n    Vditor.SMILESRender = SMILESRender/* SMILESRender */.Y;\n    /** 支持 markdown 的思维导图 */\n    Vditor.markmapRender = markmapRender/* markmapRender */.K;\n    /** flowchart.js 渲染 */\n    Vditor.flowchartRender = flowchartRender/* flowchartRender */.D;\n    /** 图表渲染 */\n    Vditor.chartRender = chartRender/* chartRender */.v;\n    /** 五线谱渲染 */\n    Vditor.abcRender = abcRender/* abcRender */.$;\n    /** 脑图渲染 */\n    Vditor.mindmapRender = mindmapRender/* mindmapRender */.l;\n    /** plantuml渲染 */\n    Vditor.plantumlRender = plantumlRender/* plantumlRender */.M;\n    /** 大纲渲染 */\n    Vditor.outlineRender = outlineRender/* outlineRender */.N;\n    /** 为[特定链接](https://github.com/Vanessa219/vditor/issues/7)分别渲染为视频、音频、嵌入的 iframe */\n    Vditor.mediaRender = mediaRender/* mediaRender */.l;\n    /** 对选中的文字进行阅读 */\n    Vditor.speechRender = speechRender;\n    /** 对图片进行懒加载 */\n    Vditor.lazyLoadImageRender = lazyLoadImageRender;\n    /** Markdown 文本转换为 HTML，该方法需使用[异步编程](https://ld246.com/article/1546828434083?r=Vaness) */\n    Vditor.md2html = md2html;\n    /** 页面 Markdown 文章渲染 */\n    Vditor.preview = previewRender;\n    /** 设置代码主题 */\n    Vditor.setCodeTheme = setCodeTheme/* setCodeTheme */.h;\n    /** 设置内容主题 */\n    Vditor.setContentTheme = setContentTheme/* setContentTheme */.H;\n    return Vditor;\n}());\n/* harmony default export */ const method = (Vditor);\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/constants.d.ts",
    "content": "/// <reference types=\"./types\" />\ndeclare const _VDITOR_VERSION: string;\nexport { _VDITOR_VERSION as VDITOR_VERSION };\nexport declare abstract class Constants {\n    static readonly ZWSP: string;\n    static readonly DROP_EDITOR: string;\n    static readonly MOBILE_WIDTH: number;\n    static readonly CLASS_MENU_DISABLED: string;\n    static readonly EDIT_TOOLBARS: string[];\n    static readonly CODE_THEME: string[];\n    static readonly ALIAS_CODE_LANGUAGES: string[];\n    static readonly CDN: string;\n    static readonly MARKDOWN_OPTIONS: {\n        autoSpace: boolean;\n        gfmAutoLink: boolean;\n        codeBlockPreview: boolean;\n        fixTermTypo: boolean;\n        footnotes: boolean;\n        linkBase: string;\n        linkPrefix: string;\n        listStyle: boolean;\n        mark: boolean;\n        mathBlockPreview: boolean;\n        paragraphBeginningSpace: boolean;\n        sanitize: boolean;\n        toc: boolean;\n    };\n    static readonly HLJS_OPTIONS: {\n        enable: boolean;\n        lineNumber: boolean;\n        defaultLang: string;\n        style: string;\n    };\n    static readonly MATH_OPTIONS: IMath;\n    static readonly THEME_OPTIONS: {\n        current: string;\n        list: {\n            \"ant-design\": string;\n            dark: string;\n            light: string;\n            wechat: string;\n        };\n        path: string;\n    };\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/devtools/index.d.ts",
    "content": "/// <reference types=\"./types\" />\nexport declare class DevTools {\n    element: HTMLDivElement;\n    private ASTChart;\n    constructor();\n    renderEchart(vditor: IVditor): void;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/export/index.d.ts",
    "content": "export declare const download: (vditor: IVditor, content: string, filename: string) => void;\nexport declare const exportMarkdown: (vditor: IVditor) => void;\nexport declare const exportPDF: (vditor: IVditor) => void;\nexport declare const exportHTML: (vditor: IVditor) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/hint/index.d.ts",
    "content": "/// <reference types=\"./types\" />\nexport declare class Hint {\n    timeId: number;\n    element: HTMLDivElement;\n    recentLanguage: string;\n    private splitChar;\n    private lastIndex;\n    constructor(hintExtends: IHintExtend[]);\n    render(vditor: IVditor): void;\n    genHTML(data: IHintData[], key: string, vditor: IVditor): void;\n    fillEmoji: (element: HTMLElement, vditor: IVditor) => void;\n    select(event: KeyboardEvent, vditor: IVditor): boolean;\n    private getKey;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ir/expandMarker.d.ts",
    "content": "export declare const expandMarker: (range: Range, vditor: IVditor) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ir/highlightToolbarIR.d.ts",
    "content": "export declare const highlightToolbarIR: (vditor: IVditor) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ir/index.d.ts",
    "content": "/// <reference types=\"./types\" />\ndeclare class IR {\n    range: Range;\n    element: HTMLPreElement;\n    processTimeoutId: number;\n    hlToolbarTimeoutId: number;\n    composingLock: boolean;\n    preventInput: boolean;\n    constructor(vditor: IVditor);\n    private copy;\n    private bindEvent;\n}\nexport { IR };\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ir/input.d.ts",
    "content": "export declare const input: (vditor: IVditor, range: Range, ignoreSpace?: boolean, event?: InputEvent) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ir/process.d.ts",
    "content": "export declare const processHint: (vditor: IVditor) => void;\nexport declare const processAfterRender: (vditor: IVditor, options?: {\n    enableAddUndoStack: boolean;\n    enableHint: boolean;\n    enableInput: boolean;\n}) => void;\nexport declare const processHeading: (vditor: IVditor, value: string) => void;\nexport declare const processToolbar: (vditor: IVditor, actionBtn: Element, prefix: string, suffix: string, options?: any) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ir/processKeydown.d.ts",
    "content": "export declare const processKeydown: (vditor: IVditor, event: KeyboardEvent) => boolean;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/SMILESRender.d.ts",
    "content": "export declare const SMILESRender: (element: (HTMLElement | Document), cdn: string, theme: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/abcRender.d.ts",
    "content": "export declare const abcRender: (element?: (HTMLElement | Document), cdn?: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/adapterRender.d.ts",
    "content": "export declare const mathRenderAdapter: {\n    getCode: (el: Element) => string;\n    getElements: (element: HTMLElement | Document) => NodeListOf<Element>;\n};\nexport declare const SMILESRenderAdapter: {\n    getCode: (el: Element) => string;\n    getElements: (element: HTMLElement | Document) => NodeListOf<Element>;\n};\nexport declare const mermaidRenderAdapter: {\n    /** 不仅要返回code，并且需要将 code 设置为 el 的 innerHTML */\n    getCode: (el: Element) => string;\n    getElements: (element: HTMLElement | Document) => NodeListOf<Element>;\n};\nexport declare const markmapRenderAdapter: {\n    getCode: (el: Element) => string;\n    getElements: (element: HTMLElement | Document) => NodeListOf<Element>;\n};\nexport declare const mindmapRenderAdapter: {\n    getCode: (el: Element) => string;\n    getElements: (el: HTMLElement | Document) => NodeListOf<Element>;\n};\nexport declare const chartRenderAdapter: {\n    getCode: (el: HTMLElement) => string;\n    getElements: (el: HTMLElement | Document) => NodeListOf<Element>;\n};\nexport declare const abcRenderAdapter: {\n    getCode: (el: Element) => string;\n    getElements: (el: HTMLElement | Document) => NodeListOf<Element>;\n};\nexport declare const graphvizRenderAdapter: {\n    getCode: (el: Element) => string;\n    getElements: (el: HTMLElement | Document) => NodeListOf<Element>;\n};\nexport declare const flowchartRenderAdapter: {\n    getCode: (el: Element) => string;\n    getElements: (el: HTMLElement | Document) => NodeListOf<Element>;\n};\nexport declare const plantumlRenderAdapter: {\n    getCode: (el: Element) => string;\n    getElements: (el: HTMLElement | Document) => NodeListOf<Element>;\n};\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/anchorRender.d.ts",
    "content": "export declare const anchorRender: (type: number) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/chartRender.d.ts",
    "content": "export declare const chartRender: (element: (HTMLElement | Document), cdn: string, theme: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/codeRender.d.ts",
    "content": "export declare const codeRender: (element: HTMLElement, option?: IHljs) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/flowchartRender.d.ts",
    "content": "export declare const flowchartRender: (element: HTMLElement, cdn?: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/getHTML.d.ts",
    "content": "export declare const getHTML: (vditor: IVditor) => string;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/getMarkdown.d.ts",
    "content": "export declare const getMarkdown: (vditor: IVditor) => string;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/graphvizRender.d.ts",
    "content": "export declare const graphvizRender: (element: HTMLElement, cdn?: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/highlightRender.d.ts",
    "content": "export declare const highlightRender: (hljsOption?: IHljs, element?: HTMLElement | Document, cdn?: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/lazyLoadImageRender.d.ts",
    "content": "declare global {\n    interface Window {\n        vditorImageIntersectionObserver: IntersectionObserver;\n    }\n}\nexport declare const lazyLoadImageRender: (element?: (HTMLElement | Document)) => boolean;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/markmapRender.d.ts",
    "content": "export declare const markmapRender: (element?: (HTMLElement | Document), cdn?: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/mathRender.d.ts",
    "content": "declare global {\n    interface Window {\n        MathJax: any;\n    }\n}\nexport declare const mathRender: (element?: (HTMLElement | Document), options?: {\n    cdn?: string;\n    math?: IMath;\n}) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/mediaRender.d.ts",
    "content": "export declare const mediaRender: (element: HTMLElement) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/mermaidRender.d.ts",
    "content": "export declare const mermaidRender: (element: (HTMLElement | Document), cdn: string, theme: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/mindmapRender.d.ts",
    "content": "export declare const mindmapRender: (element: (HTMLElement | Document), cdn: string, theme: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/outlineRender.d.ts",
    "content": "export declare const outlineRender: (contentElement: HTMLElement, targetElement: Element, vditor?: IVditor) => string;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/plantumlRender.d.ts",
    "content": "export declare const plantumlRender: (element?: (HTMLElement | Document), cdn?: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/previewRender.d.ts",
    "content": "export declare const md2html: (mdText: string, options?: IPreviewOptions) => Promise<string>;\nexport declare const previewRender: (previewElement: HTMLDivElement, markdown: string, options?: IPreviewOptions) => Promise<void>;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/setLute.d.ts",
    "content": "export declare const setLute: (options: ILuteOptions) => Lute;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/markdown/speechRender.d.ts",
    "content": "declare global {\n    interface Window {\n        vditorSpeechRange: Range;\n    }\n}\nexport declare const speechRender: (element: HTMLElement, lang?: keyof II18n) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/outline/index.d.ts",
    "content": "/// <reference types=\"./types\" />\nexport declare class Outline {\n    element: HTMLElement;\n    constructor(outlineLabel: string);\n    render(vditor: IVditor): string;\n    toggle(vditor: IVditor, show?: boolean, focus?: boolean): void;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/preview/image.d.ts",
    "content": "export declare const previewImage: (oldImgElement: HTMLImageElement, lang?: keyof II18n, theme?: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/preview/index.d.ts",
    "content": "/// <reference types=\"./types\" />\nexport declare class Preview {\n    element: HTMLElement;\n    previewElement: HTMLElement;\n    private mdTimeoutId;\n    constructor(vditor: IVditor);\n    render(vditor: IVditor, value?: string): void;\n    private afterRender;\n    private copyToX;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/resize/index.d.ts",
    "content": "/// <reference types=\"./types\" />\nexport declare class Resize {\n    element: HTMLElement;\n    constructor(vditor: IVditor);\n    private bindEvent;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/sv/combineFootnote.d.ts",
    "content": "/**\n * 合并脚注\n * @param elements vditor.sv.element\n * @param afterCombine 每个脚注块合并完成后的回调, param: root为合并后的脚注块\n */\nexport declare const combineFootnote: (elements: HTMLElement, afterCombine?: (root: HTMLElement) => void) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/sv/index.d.ts",
    "content": "/// <reference types=\"./types\" />\ndeclare class Editor {\n    range: Range;\n    element: HTMLPreElement;\n    composingLock: boolean;\n    processTimeoutId: number;\n    hlToolbarTimeoutId: number;\n    preventInput: boolean;\n    constructor(vditor: IVditor);\n    private copy;\n    private bindEvent;\n}\nexport { Editor };\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/sv/inputEvent.d.ts",
    "content": "export declare const inputEvent: (vditor: IVditor, event?: InputEvent) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/sv/process.d.ts",
    "content": "export declare const processPaste: (vditor: IVditor, text: string) => void;\nexport declare const getSideByType: (spanNode: Node, type: string, isPrevious?: boolean) => false | Element;\nexport declare const processSpinVditorSVDOM: (html: string, vditor: IVditor) => string;\nexport declare const processPreviousMarkers: (spanElement: HTMLElement) => string;\nexport declare const processAfterRender: (vditor: IVditor, options?: {\n    enableAddUndoStack: boolean;\n    enableHint: boolean;\n    enableInput: boolean;\n}) => void;\nexport declare const processHeading: (vditor: IVditor, value: string) => void;\nexport declare const processToolbar: (vditor: IVditor, actionBtn: Element, prefix: string, suffix: string, options?: any) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/sv/processKeydown.d.ts",
    "content": "export declare const processKeydown: (vditor: IVditor, event: KeyboardEvent) => boolean;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/tip/index.d.ts",
    "content": "export declare class Tip {\n    element: HTMLElement;\n    constructor();\n    show(text: string, time?: number): void;\n    hide(): void;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Both.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Both extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Br.d.ts",
    "content": "export declare class Br {\n    element: HTMLElement;\n    constructor();\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/CodeTheme.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class CodeTheme extends MenuItem {\n    element: HTMLElement;\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/ContentTheme.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class ContentTheme extends MenuItem {\n    element: HTMLElement;\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Copy.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Copy extends MenuItem {\n    element: HTMLElement;\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Counter.d.ts",
    "content": "/// <reference types=\"./types\" />\nexport declare class Counter {\n    element: HTMLElement;\n    constructor(vditor: IVditor);\n    render(vditor: IVditor, mdText: string): void;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Custom.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Custom extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Devtools.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Devtools extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Divider.d.ts",
    "content": "export declare class Divider {\n    element: HTMLElement;\n    constructor(type: 'vertical' | 'horizontal');\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/EditMode.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare const setEditMode: (vditor: IVditor, type: string, event: Event | string, mode?: 'both' | 'editor') => void;\nexport declare class EditMode extends MenuItem {\n    element: HTMLElement;\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n    _bindEvent(vditor: IVditor, panelElement: HTMLElement, menuItem: IMenuItem): void;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Emoji.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Emoji extends MenuItem {\n    element: HTMLElement;\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n    private bindEvent;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Export.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Export extends MenuItem {\n    element: HTMLElement;\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Fullscreen.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Fullscreen extends MenuItem {\n    private originalParent;\n    private fullscreenWrapper;\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n    _bindEvent(vditor: IVditor, menuItem: IMenuItem): void;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Headings.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Headings extends MenuItem {\n    element: HTMLElement;\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n    _bindEvent(vditor: IVditor, panelElement: HTMLElement): void;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Help.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Help extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Indent.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Indent extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Info.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Info extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/InsertAfter.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class InsertAfter extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/InsertBefore.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class InsertBefore extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/InsertCode.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class InsertCode extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/MenuItem.d.ts",
    "content": "/// <reference types=\"./types\" />\nexport declare class MenuItem {\n    element: HTMLElement;\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Outdent.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Outdent extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Outline.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Outline extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Preview.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Preview extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n    _bindEvent(vditor: IVditor): void;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Record.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Record extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n    _bindEvent(vditor: IVditor): void;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Redo.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Redo extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Undo.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Undo extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/Upload.d.ts",
    "content": "/// <reference types=\"./types\" />\nimport { MenuItem } from \"./MenuItem\";\nexport declare class Upload extends MenuItem {\n    constructor(vditor: IVditor, menuItem: IMenuItem);\n    _bindEvent(vditor: IVditor, menuItem: IMenuItem): void;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/index.d.ts",
    "content": "/// <reference types=\"./types\" />\nexport declare class Toolbar {\n    elements: {\n        [key: string]: HTMLElement;\n    };\n    element: HTMLElement;\n    constructor(vditor: IVditor);\n    updateConfig(vditor: IVditor, options: IToolbarConfig): void;\n    private genItem;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/toolbar/setToolbar.d.ts",
    "content": "export declare const removeCurrentToolbar: (toolbar: {\n    [key: string]: HTMLElement;\n}, names: string[]) => void;\nexport declare const setCurrentToolbar: (toolbar: {\n    [key: string]: HTMLElement;\n}, names: string[]) => void;\nexport declare const enableToolbar: (toolbar: {\n    [key: string]: HTMLElement;\n}, names: string[]) => void;\nexport declare const disableToolbar: (toolbar: {\n    [key: string]: HTMLElement;\n}, names: string[]) => void;\nexport declare const hideToolbar: (toolbar: {\n    [key: string]: HTMLElement;\n}, names: string[]) => void;\nexport declare const showToolbar: (toolbar: {\n    [key: string]: HTMLElement;\n}, names: string[]) => void;\nexport declare const hidePanel: (vditor: IVditor, panels: string[], exceptElement?: HTMLElement) => void;\nexport declare const toggleSubMenu: (vditor: IVditor, panelElement: HTMLElement, actionBtn: Element, level: number) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ui/initUI.d.ts",
    "content": "export declare const initUI: (vditor: IVditor) => void;\nexport declare const setPadding: (vditor: IVditor) => void;\nexport declare const setTypewriterPosition: (vditor: IVditor) => void;\nexport declare function UIUnbindListener(): void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ui/setCodeTheme.d.ts",
    "content": "export declare const setCodeTheme: (codeTheme: string, cdn?: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ui/setContentTheme.d.ts",
    "content": "export declare const setContentTheme: (contentTheme: string, path: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ui/setPreviewMode.d.ts",
    "content": "export declare const setPreviewMode: (mode: \"both\" | \"editor\", vditor: IVditor) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/ui/setTheme.d.ts",
    "content": "export declare const setTheme: (vditor: IVditor) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/undo/index.d.ts",
    "content": "/// <reference types=\"./types\" />\ndeclare class Undo {\n    private stackSize;\n    private dmp;\n    private wysiwyg;\n    private ir;\n    private sv;\n    constructor();\n    clearStack(vditor: IVditor): void;\n    resetIcon(vditor: IVditor): void;\n    undo(vditor: IVditor): void;\n    redo(vditor: IVditor): void;\n    recordFirstPosition(vditor: IVditor, event: KeyboardEvent): void;\n    addToUndoStack(vditor: IVditor): void;\n    private renderDiff;\n    private resetStack;\n    private addCaret;\n}\nexport { Undo };\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/Options.d.ts",
    "content": "/// <reference types=\"./types\" />\nexport declare class Options {\n    options: IOptions;\n    private defaultOptions;\n    constructor(options: IOptions);\n    merge(): IOptions;\n    private mergeToolbar;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/RecordMedia.d.ts",
    "content": "export declare class RecordMedia {\n    SAMPLE_RATE: number;\n    DEFAULT_SAMPLE_RATE: number;\n    isRecording: boolean;\n    readyFlag: boolean;\n    leftChannel: Float32List[];\n    rightChannel: Float32List[];\n    recordingLength: number;\n    recorder: ScriptProcessorNode;\n    constructor(e: MediaStream);\n    cloneChannelData(leftChannelData: Float32List, rightChannelData: Float32List): void;\n    startRecordingNewWavFile(): void;\n    stopRecording(): void;\n    buildWavFileBlob(): Blob;\n    private downSampleBuffer;\n    private mergeBuffers;\n    private writeUTFBytes;\n}\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/addScript.d.ts",
    "content": "export declare const addScriptSync: (path: string, id: string) => boolean;\nexport declare const addScript: (path: string, id: string) => Promise<unknown>;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/addStyle.d.ts",
    "content": "export declare const addStyle: (url: string, id: string) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/code160to32.d.ts",
    "content": "export declare const code160to32: (text: string) => string;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/compatibility.d.ts",
    "content": "export declare const isSafari: () => boolean;\nexport declare const isFirefox: () => boolean;\nexport declare const accessLocalStorage: () => boolean;\nexport declare const getEventName: () => \"click\" | \"touchstart\";\nexport declare const isCtrl: (event: KeyboardEvent) => boolean;\nexport declare const updateHotkeyTip: (hotkey: string) => string;\nexport declare const isChrome: () => boolean;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/editorCommonEvent.d.ts",
    "content": "export declare const focusEvent: (vditor: IVditor, editorElement: HTMLElement) => void;\nexport declare const dblclickEvent: (vditor: IVditor, editorElement: HTMLElement) => void;\nexport declare const blurEvent: (vditor: IVditor, editorElement: HTMLElement) => void;\nexport declare const dropEvent: (vditor: IVditor, editorElement: HTMLElement) => void;\nexport declare const copyEvent: (vditor: IVditor, editorElement: HTMLElement, copy: (event: ClipboardEvent, vditor: IVditor) => void) => void;\nexport declare const cutEvent: (vditor: IVditor, editorElement: HTMLElement, copy: (event: ClipboardEvent, vditor: IVditor) => void) => void;\nexport declare const scrollCenter: (vditor: IVditor) => void;\nexport declare const hotkeyEvent: (vditor: IVditor, editorElement: HTMLElement) => void;\nexport declare const selectEvent: (vditor: IVditor, editorElement: HTMLElement) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/fixBrowserBehavior.d.ts",
    "content": "export declare const fixGSKeyBackspace: (event: KeyboardEvent, vditor: IVditor, startContainer: Node) => boolean;\nexport declare const fixCJKPosition: (range: Range, vditor: IVditor, event: KeyboardEvent) => void;\nexport declare const fixCursorDownInlineMath: (range: Range, key: string) => void;\nexport declare const insertEmptyBlock: (vditor: IVditor, position: InsertPosition) => void;\nexport declare const isFirstCell: (cellElement: HTMLElement) => false | HTMLTableElement;\nexport declare const isLastCell: (cellElement: HTMLElement) => false | HTMLTableElement;\nexport declare const insertAfterBlock: (vditor: IVditor, event: KeyboardEvent, range: Range, element: HTMLElement, blockElement: HTMLElement) => boolean;\nexport declare const insertBeforeBlock: (vditor: IVditor, event: KeyboardEvent, range: Range, element: HTMLElement, blockElement: HTMLElement) => boolean;\nexport declare const listToggle: (vditor: IVditor, range: Range, type: string, cancel?: boolean) => void;\nexport declare const listIndent: (vditor: IVditor, liElement: HTMLElement, range: Range) => void;\nexport declare const listOutdent: (vditor: IVditor, liElement: HTMLElement, range: Range, topListElement: HTMLElement) => void;\nexport declare const setTableAlign: (tableElement: HTMLTableElement, type: string) => void;\nexport declare const isHrMD: (text: string) => boolean;\nexport declare const isHeadingMD: (text: string) => boolean;\nexport declare const execAfterRender: (vditor: IVditor, options?: {\n    enableAddUndoStack: boolean;\n    enableHint: boolean;\n    enableInput: boolean;\n}) => void;\nexport declare const fixList: (range: Range, vditor: IVditor, pElement: HTMLElement | false, event: KeyboardEvent) => boolean;\nexport declare const fixTab: (vditor: IVditor, range: Range, event: KeyboardEvent) => boolean;\nexport declare const fixMarkdown: (event: KeyboardEvent, vditor: IVditor, pElement: HTMLElement | false, range: Range) => boolean;\nexport declare const insertRow: (vditor: IVditor, range: Range, cellElement: HTMLElement) => void;\nexport declare const insertRowAbove: (vditor: IVditor, range: Range, cellElement: HTMLElement) => void;\nexport declare const insertColumn: (vditor: IVditor, tableElement: HTMLTableElement, cellElement: HTMLElement, type?: InsertPosition) => void;\nexport declare const deleteRow: (vditor: IVditor, range: Range, cellElement: HTMLElement) => void;\nexport declare const deleteColumn: (vditor: IVditor, range: Range, tableElement: HTMLTableElement, cellElement: HTMLElement) => void;\nexport declare const fixTable: (vditor: IVditor, event: KeyboardEvent, range: Range) => boolean;\nexport declare const fixCodeBlock: (vditor: IVditor, event: KeyboardEvent, codeRenderElement: HTMLElement, range: Range) => boolean;\nexport declare const fixBlockquote: (vditor: IVditor, range: Range, event: KeyboardEvent, pElement: HTMLElement | false) => boolean;\nexport declare const fixTask: (vditor: IVditor, range: Range, event: KeyboardEvent) => boolean;\nexport declare const fixDelete: (vditor: IVditor, range: Range, event: KeyboardEvent, pElement: HTMLElement | false) => boolean;\nexport declare const fixHR: (range: Range) => void;\nexport declare const fixFirefoxArrowUpTable: (event: KeyboardEvent, blockElement: false | HTMLElement, range: Range) => boolean;\nexport declare const paste: (vditor: IVditor, event: (ClipboardEvent | DragEvent) & {\n    target: HTMLElement;\n}, callback: {\n    pasteCode(code: string): void;\n}) => Promise<void>;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/function.d.ts",
    "content": "export declare const genUUID: () => string;\nexport declare const getSearch: (key: string, link?: string) => string;\nexport declare const looseJsonParse: (text: string) => any;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/getSelectText.d.ts",
    "content": "export declare const getSelectText: (editor: HTMLElement, range?: Range) => string;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/hasClosest.d.ts",
    "content": "export declare const hasTopClosestByClassName: (element: Node, className: string) => false | HTMLElement;\nexport declare const hasTopClosestByAttribute: (element: Node, attr: string, value: string) => false | HTMLElement;\nexport declare const hasTopClosestByTag: (element: Node, nodeName: string) => false | HTMLElement;\nexport declare const getTopList: (element: Node) => false | HTMLElement;\nexport declare const hasClosestByAttribute: (element: Node, attr: string, value: string) => false | HTMLElement;\nexport declare const hasClosestBlock: (element: Node) => false | HTMLElement;\nexport declare const hasClosestByMatchTag: (element: Node, nodeName: string) => false | HTMLElement;\nexport declare const hasClosestByClassName: (element: Node, className: string) => false | HTMLElement;\nexport declare const getLastNode: (node: Node) => Node;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/hasClosestByHeadings.d.ts",
    "content": "export declare const hasClosestByTag: (element: Node, nodeName: string) => false | HTMLElement;\nexport declare const hasClosestByHeadings: (element: Node) => false | HTMLElement;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/highlightToolbar.d.ts",
    "content": "export declare const highlightToolbar: (vditor: IVditor) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/hotKey.d.ts",
    "content": "export declare const matchHotKey: (hotKey: string, event: KeyboardEvent) => boolean;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/log.d.ts",
    "content": "export declare const log: (method: string, content: string, type: string, print: boolean) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/merge.d.ts",
    "content": "export declare const merge: (...options: any[]) => any;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/processCode.d.ts",
    "content": "export declare const processPasteCode: (html: string, text: string, type?: string) => string | false;\nexport declare const processCodeRender: (previewPanel: HTMLElement, vditor: IVditor) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/selection.d.ts",
    "content": "export declare const getEditorRange: (vditor: IVditor) => Range;\nexport declare const getCursorPosition: (editor: HTMLElement) => {\n    left: number;\n    top: number;\n};\nexport declare const selectIsEditor: (editor: HTMLElement, range?: Range) => boolean;\nexport declare const setSelectionFocus: (range: Range) => void;\nexport declare const getSelectPosition: (selectElement: HTMLElement, editorElement: HTMLElement, range?: Range) => {\n    end: number;\n    start: number;\n};\nexport declare const setSelectionByPosition: (start: number, end: number, editor: HTMLElement) => Range;\nexport declare const setRangeByWbr: (element: HTMLElement, range: Range) => void;\nexport declare const insertHTML: (html: string, vditor: IVditor) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/util/toc.d.ts",
    "content": "export declare const renderToc: (vditor: IVditor) => void;\nexport declare const clickToc: (event: MouseEvent & {\n    target: HTMLElement;\n}, vditor: IVditor) => void;\nexport declare const keydownToc: (blockElement: HTMLElement, vditor: IVditor, event: KeyboardEvent, range: Range) => boolean;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/wysiwyg/afterRenderEvent.d.ts",
    "content": "export declare const afterRenderEvent: (vditor: IVditor, options?: {\n    enableAddUndoStack: boolean;\n    enableHint: boolean;\n    enableInput: boolean;\n}) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/wysiwyg/highlightToolbarWYSIWYG.d.ts",
    "content": "export declare const highlightToolbarWYSIWYG: (vditor: IVditor) => void;\nexport declare const genLinkRefPopover: (vditor: IVditor, linkRefElement: HTMLElement, range?: Range) => void;\nexport declare const genAPopover: (vditor: IVditor, aElement: HTMLElement, range: Range) => void;\nexport declare const genImagePopover: (event: Event, vditor: IVditor) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/wysiwyg/index.d.ts",
    "content": "/// <reference types=\"./types\" />\ndeclare class WYSIWYG {\n    range: Range;\n    element: HTMLPreElement;\n    popover: HTMLDivElement;\n    selectPopover: HTMLDivElement;\n    afterRenderTimeoutId: number;\n    hlToolbarTimeoutId: number;\n    preventInput: boolean;\n    composingLock: boolean;\n    commentIds: string[];\n    private scrollListener;\n    constructor(vditor: IVditor);\n    getComments(vditor: IVditor, getData?: boolean): ICommentsData[];\n    triggerRemoveComment(vditor: IVditor): void;\n    showComment(): void;\n    hideComment(): void;\n    unbindListener(): void;\n    private copy;\n    private bindEvent;\n}\nexport { WYSIWYG };\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/wysiwyg/inlineTag.d.ts",
    "content": "export declare const previoueIsEmptyA: (node: Node) => false | HTMLElement;\nexport declare const nextIsCode: (range: Range) => boolean;\nexport declare const getNextHTML: (node: Node) => string;\nexport declare const getPreviousHTML: (node: Node) => string;\nexport declare const getRenderElementNextNode: (blockCodeElement: HTMLElement) => ChildNode;\nexport declare const splitElement: (range: Range) => {\n    afterHTML: string;\n    beforeHTML: string;\n};\nexport declare const modifyPre: (vditor: IVditor, range: Range) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/wysiwyg/input.d.ts",
    "content": "export declare const input: (vditor: IVditor, range: Range, event?: InputEvent) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/wysiwyg/processKeydown.d.ts",
    "content": "export declare const processKeydown: (vditor: IVditor, event: KeyboardEvent) => boolean;\nexport declare const removeBlockElement: (vditor: IVditor, event: KeyboardEvent) => boolean;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/wysiwyg/renderDomByMd.d.ts",
    "content": "export declare const renderDomByMd: (vditor: IVditor, md: string, options?: {\n    enableAddUndoStack: boolean;\n    enableHint: boolean;\n    enableInput: boolean;\n}) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/wysiwyg/setHeading.d.ts",
    "content": "export declare const setHeading: (vditor: IVditor, tagName: string) => void;\nexport declare const removeHeading: (vditor: IVditor) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/wysiwyg/showCode.d.ts",
    "content": "export declare const showCode: (previewElement: HTMLElement, vditor: IVditor, first?: boolean) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/ts/wysiwyg/toolbarEvent.d.ts",
    "content": "export declare const toolbarEvent: (vditor: IVditor, actionBtn: Element, event: Event, options?: any) => void;\n"
  },
  {
    "path": "api/static/libs/js/vditor/dist/types/index.d.ts",
    "content": "declare module \"*.svg\";\n\ndeclare module \"*.png\";\n\ninterface Window {\n    VditorI18n: ITips;\n    hljs: {\n        listLanguages(): string[];\n        highlight(text: string, options: {\n            language?: string,\n            ignoreIllegals: boolean\n        }): {\n            value: string\n        };\n        getLanguage(text: string): {\n            name: string\n        };\n    };\n}\n\ninterface IObject {\n    [key: string]: string;\n}\n\ninterface ILuteNode {\n    TokensStr: () => string;\n    __internal_object__: {\n        Parent: {\n            Type: number,\n        },\n        HeadingLevel: string,\n    };\n}\n\ntype ILuteRenderCallback = (node: ILuteNode, entering: boolean) => [string, number];\n\n/** @link https://ld246.com/article/1588412297062 */\ninterface ILuteRender {\n    renderDocument?: ILuteRenderCallback;\n    renderParagraph?: ILuteRenderCallback;\n    renderText?: ILuteRenderCallback;\n    renderCodeBlock?: ILuteRenderCallback;\n    renderCodeBlockOpenMarker?: ILuteRenderCallback;\n    renderCodeBlockInfoMarker?: ILuteRenderCallback;\n    renderCodeBlockCode?: ILuteRenderCallback;\n    renderCodeBlockCloseMarker?: ILuteRenderCallback;\n    renderMathBlock?: ILuteRenderCallback;\n    renderMathBlockOpenMarker?: ILuteRenderCallback;\n    renderMathBlockContent?: ILuteRenderCallback;\n    renderMathBlockCloseMarker?: ILuteRenderCallback;\n    renderBlockquote?: ILuteRenderCallback;\n    renderBlockquoteMarker?: ILuteRenderCallback;\n    renderHeading?: ILuteRenderCallback;\n    renderHeadingC8hMarker?: ILuteRenderCallback;\n    renderList?: ILuteRenderCallback;\n    renderListItem?: ILuteRenderCallback;\n    renderTaskListItemMarker?: ILuteRenderCallback;\n    renderThematicBreak?: ILuteRenderCallback;\n    renderHTML?: ILuteRenderCallback;\n    renderTable?: ILuteRenderCallback;\n    renderTableHead?: ILuteRenderCallback;\n    renderTableRow?: ILuteRenderCallback;\n    renderTableCell?: ILuteRenderCallback;\n    renderFootnotesDef?: ILuteRenderCallback;\n    renderCodeSpan?: ILuteRenderCallback;\n    renderCodeSpanOpenMarker?: ILuteRenderCallback;\n    renderCodeSpanContent?: ILuteRenderCallback;\n    renderCodeSpanCloseMarker?: ILuteRenderCallback;\n    renderInlineMath?: ILuteRenderCallback;\n    renderInlineMathOpenMarker?: ILuteRenderCallback;\n    renderInlineMathContent?: ILuteRenderCallback;\n    renderInlineMathCloseMarker?: ILuteRenderCallback;\n    renderEmphasis?: ILuteRenderCallback;\n    renderEmAsteriskOpenMarker?: ILuteRenderCallback;\n    renderEmAsteriskCloseMarker?: ILuteRenderCallback;\n    renderEmUnderscoreOpenMarker?: ILuteRenderCallback;\n    renderEmUnderscoreCloseMarker?: ILuteRenderCallback;\n    renderStrong?: ILuteRenderCallback;\n    renderStrongA6kOpenMarker?: ILuteRenderCallback;\n    renderStrongA6kCloseMarker?: ILuteRenderCallback;\n    renderStrongU8eOpenMarker?: ILuteRenderCallback;\n    renderStrongU8eCloseMarker?: ILuteRenderCallback;\n    renderStrikethrough?: ILuteRenderCallback;\n    renderStrikethrough1OpenMarker?: ILuteRenderCallback;\n    renderStrikethrough1CloseMarker?: ILuteRenderCallback;\n    renderStrikethrough2OpenMarker?: ILuteRenderCallback;\n    renderStrikethrough2CloseMarker?: ILuteRenderCallback;\n    renderHardBreak?: ILuteRenderCallback;\n    renderSoftBreak?: ILuteRenderCallback;\n    renderInlineHTML?: ILuteRenderCallback;\n    renderLink?: ILuteRenderCallback;\n    renderOpenBracket?: ILuteRenderCallback;\n    renderCloseBracket?: ILuteRenderCallback;\n    renderOpenParen?: ILuteRenderCallback;\n    renderCloseParen?: ILuteRenderCallback;\n    renderLinkText?: ILuteRenderCallback;\n    renderLinkSpace?: ILuteRenderCallback;\n    renderLinkDest?: ILuteRenderCallback;\n    renderLinkTitle?: ILuteRenderCallback;\n    renderImage?: ILuteRenderCallback;\n    renderBang?: ILuteRenderCallback;\n    renderEmoji?: ILuteRenderCallback;\n    renderEmojiUnicode?: ILuteRenderCallback;\n    renderEmojiImg?: ILuteRenderCallback;\n    renderEmojiAlias?: ILuteRenderCallback;\n    renderToC?: ILuteRenderCallback;\n    renderFootnotesRef?: ILuteRenderCallback;\n    renderBackslash?: ILuteRenderCallback;\n    renderBackslashContent?: ILuteRenderCallback;\n}\n\ninterface ILuteOptions extends IMarkdownConfig {\n    emojis: IObject;\n    emojiSite: string;\n    headingAnchor: boolean;\n    inlineMathDigit: boolean;\n    lazyLoadImage?: string;\n}\n\ndeclare class Lute {\n    public static WalkStop: number;\n    public static WalkSkipChildren: number;\n    public static WalkContinue: number;\n    public static Version: string;\n    public static Caret: string;\n\n    public static New(): Lute;\n\n    public static EscapeHTMLStr(html: string): string;\n\n    public static GetHeadingID(node: ILuteNode): string;\n\n    public static NewNodeID(): string;\n\n    public static Sanitize(html: string): string;\n\n    private constructor();\n\n    public SetJSRenderers(options?: {\n        renderers: {\n            HTML2VditorDOM?: ILuteRender,\n            HTML2VditorIRDOM?: ILuteRender,\n            HTML2Md?: ILuteRender,\n            Md2HTML?: ILuteRender,\n            Md2VditorDOM?: ILuteRender,\n            Md2VditorIRDOM?: ILuteRender,\n            Md2VditorSVDOM?: ILuteRender,\n        },\n    }): void;\n\n    public SetChineseParagraphBeginningSpace(enable: boolean): void;\n\n    public SetHeadingID(enable: boolean): void;\n\n    public SetRenderListStyle(enable: boolean): void;\n\n    public SetLinkBase(url: string): void;\n\n    public SetVditorIR(enable: boolean): void;\n\n    public SetVditorSV(enable: boolean): void;\n\n    public SetVditorWYSIWYG(enable: boolean): void;\n\n    public SetLinkPrefix(url: string): void;\n\n    public SetMark(enable: boolean): void;\n\n    public SetGFMAutoLink(enable: boolean): void;\n\n    public SetSanitize(enable: boolean): void;\n\n    public SetHeadingAnchor(enable: boolean): void;\n\n    public SetImageLazyLoading(imagePath: string): void;\n\n    public SetInlineMathAllowDigitAfterOpenMarker(enable: boolean): void;\n\n    public SetToC(enable: boolean): void;\n\n    public SetFootnotes(enable: boolean): void;\n\n    public SetAutoSpace(enable: boolean): void;\n\n    public SetFixTermTypo(enable: boolean): void;\n\n    public SetEmojiSite(emojiSite: string): void;\n\n    public SetVditorCodeBlockPreview(enable: boolean): void;\n\n    public SetVditorMathBlockPreview(enable: boolean): void;\n\n    public PutEmojis(emojis: IObject): void;\n\n    public GetEmojis(): IObject;\n\n    public IsValidLinkDest(link: string): boolean;\n\n    // debugger md\n    public RenderEChartsJSON(text: string): string;\n\n    // md 转换为 html\n    public Md2HTML(markdown: string): string;\n\n    // 粘贴时将 html 转换为 md\n    public HTML2Md(html: string): string;\n\n    // wysiwyg 转换为 html\n    public VditorDOM2HTML(vhtml: string): string;\n\n    // wysiwyg 输入渲染\n    public SpinVditorDOM(html: string): string;\n\n    // 粘贴时将 html 转换为 wysiwyg\n    public HTML2VditorDOM(html: string): string;\n\n    // 将 wysiwyg 转换为 md\n    public VditorDOM2Md(html: string): string;\n\n    // 将 md 转换为 wysiwyg\n    public Md2VditorDOM(markdown: string): string;\n\n    // ir 输入渲染\n    public SpinVditorIRDOM(markdown: string): string;\n\n    // ir 获取 md\n    public VditorIRDOM2Md(html: string): string;\n\n    // md 转换为 ir\n    public Md2VditorIRDOM(text: string): string;\n\n    // 获取 HTML\n    public VditorIRDOM2HTML(html: string): string;\n\n    // 粘贴时将 html 转换为 sv\n    public HTML2VditorIRDOM(html: string): string;\n\n    // sv 输入渲染\n    public SpinVditorSVDOM(text: string): string;\n\n    // 粘贴是 md 转换为 sv\n    public Md2VditorSVDOM(text: string): string;\n\n    // 将markdown转化为JSON结构输出 https://github.com/88250/lute/issues/120\n    public RenderJSON(markdown: string): string;\n}\n\ndeclare const webkitAudioContext: {\n    prototype: AudioContext\n    new(contextOptions?: AudioContextOptions): AudioContext,\n};\n\ninterface ITips {\n    [index: string]: string;\n\n    alignCenter: string;\n    alignLeft: string;\n    alignRight: string;\n    alternateText: string;\n    bold: string;\n    both: string;\n    check: string;\n    close: string;\n    code: string;\n    \"code-theme\": string;\n    column: string;\n    comment: string;\n    confirm: string;\n    \"content-theme\": string;\n    copied: string;\n    copy: string;\n    \"delete-column\": string;\n    \"delete-row\": string;\n    devtools: string;\n    down: string;\n    downloadTip: string;\n    edit: string;\n    \"edit-mode\": string;\n    emoji: string;\n    export: string;\n    fileTypeError: string;\n    footnoteRef: string;\n    fullscreen: string;\n    generate: string;\n    headings: string;\n    help: string;\n    imageURL: string;\n    indent: string;\n    info: string;\n    \"inline-code\": string;\n    \"insert-after\": string;\n    \"insert-before\": string;\n    insertColumnLeft: string;\n    insertColumnRight: string;\n    insertRowAbove: string;\n    insertRowBelow: string;\n    instantRendering: string;\n    italic: string;\n    language: string;\n    line: string;\n    link: string;\n    linkRef: string;\n    list: string;\n    more: string;\n    nameEmpty: string;\n    \"ordered-list\": string;\n    outdent: string;\n    outline: string;\n    over: string;\n    performanceTip: string;\n    preview: string;\n    quote: string;\n    record: string;\n    \"record-tip\": string;\n    recording: string;\n    redo: string;\n    remove: string;\n    row: string;\n    spin: string;\n    splitView: string;\n    strike: string;\n    table: string;\n    textIsNotEmpty: string;\n    title: string;\n    tooltipText: string;\n    undo: string;\n    up: string;\n    update: string;\n    upload: string;\n    uploadError: string;\n    uploading: string;\n    wysiwyg: string;\n}\n\ninterface II18n {\n    en_US: ITips;\n    fr_FR: ITips;\n    ja_JP: ITips;\n    ko_KR: ITips;\n    ru_RU: ITips;\n    sv_SE: ITips;\n    zh_CN: ITips;\n    zh_TW: ITips;\n    pt_BR: ITips;\n}\n\ninterface IClasses {\n    preview?: string;\n}\n\ninterface IPreviewTheme {\n    current: string;\n    list?: IObject;\n    path?: string;\n}\n\n/** @link https://ld246.com/article/1549638745630#options-upload */\ninterface IUpload {\n    /** 上传 url */\n    url?: string;\n    /** 上传文件最大 Byte */\n    max?: number;\n    /** 剪切板中包含图片地址时，使用此 url 重新上传 */\n    linkToImgUrl?: string;\n\n    /** 剪切板中包含图片地址时，使用此方法进行自定义 */\n    renderLinkDest?(vditor: IVditor, node: ILuteNode, entering: boolean): [string, number];\n\n    /** CORS 上传验证，头为 X-Upload-Token */\n    token?: string;\n    /** 文件上传类型，同 [input accept](https://www.w3schools.com/tags/att_input_accept.asp) */\n    accept?: string;\n    /** 跨站点访问控制。默认值: false */\n    withCredentials?: boolean;\n    /** 请求头设置 */\n    headers?: IObject;\n    /** 额外请求参数 */\n    extraData?: { [key: string]: string | Blob };\n    /** 是否允许多文件上传。默认值：true */\n    multiple?: boolean;\n    /** 上传字段名。默认值：file[] */\n    fieldName?: string;\n\n    /** 每次上传前都会重新设置请求头 */\n    setHeaders?(): IObject;\n\n    /** 上传成功回调 */\n    success?(editor: HTMLPreElement, msg: string): void;\n\n    /** 上传失败回调 */\n    error?(msg: string): void;\n\n    /** 文件名安全处理。 默认值: name => name.replace(/\\W/g, '') */\n    filename?(name: string): string;\n\n    /** 校验，成功时返回 true 否则返回错误信息 */\n    validate?(files: File[]): string | boolean;\n\n    /** 自定义上传，当发生错误时返回错误信息 */\n    handler?(files: File[]): string | null | Promise<string> | Promise<null>;\n\n    /** 对服务端返回的数据进行转换，以满足内置的数据结构 */\n    format?(files: File[], responseText: string): string;\n\n    /** 对服务端返回的数据进行转换(对应linkToImgUrl)，以满足内置的数据结构 */\n    linkToImgFormat?(responseText: string): string;\n\n    /** 将上传的文件处理后再返回  */\n    file?(files: File[]): File[] | Promise<File[]>;\n\n    /** 取消正在上传的文件  */\n    cancel?(files: File[]): void;\n\n    /** 图片地址上传后的回调  */\n    linkToImgCallback?(responseText: string): void;\n}\n\n/** @link https://ld246.com/article/1549638745630#options-toolbar */\ninterface IMenuItem {\n    /** 唯一标示 */\n    name: string;\n    /** svg 图标 HTML */\n    icon?: string;\n    /** 元素的样式名称 */\n    className?: string;\n    /** 提示 */\n    tip?: string;\n    /** 快捷键，支持⌘/ctrl-key 或 ⌘/ctrl-⇧/shift-key 格式的配置，不支持 wysiwyg 模式 */\n    hotkey?: string;\n    /** 插入编辑器中的后缀 */\n    suffix?: string;\n    /** 插入编辑器中的前缀 */\n    prefix?: string;\n    /** 提示位置：ne, nw */\n    tipPosition?: string;\n    /** 子菜单 */\n    toolbar?: Array<string | IMenuItem>;\n    /** 菜单层级，最大为 3，内部使用 */\n    level?: number;\n\n    example?: string;\n\n    /** 自定义按钮点击时触发的事件 */\n    click?(event: Event, vditor: IVditor): void;\n}\n\n/** @link https://ld246.com/article/1549638745630#options-preview-hljs */\ninterface IHljs {\n    /** 代码块没有指定语言时，使用此值。默认值: \"\" */\n    defaultLang?: string;\n    /** 是否启用行号。默认值: false */\n    lineNumber?: boolean;\n    /** 代码风格，可选值参见 [Chroma](https://xyproto.github.io/splash/docs/longer/all.html)。 默认值: 'github' */\n    style?: string;\n    /** 是否启用代码高亮。默认值: true */\n    enable?: boolean;\n    /** 自定义指定语言: CODE_LANGUAGES */\n    langs?: string[];\n\n    /** 渲染右上角菜单按钮 */\n    renderMenu?(element: HTMLElement, menuElement: HTMLElement): void;\n}\n\n/** @link https://ld246.com/article/1549638745630#options-preview-math */\ninterface IMath {\n    /** 内联数学公式起始 $ 后是否允许数字。默认值: false */\n    inlineDigit?: boolean;\n    /** 使用 MathJax 渲染时传入的宏定义。默认值: {} */\n    macros?: object;\n    /** 数学公式渲染引擎。默认值: 'KaTeX' */\n    engine?: \"KaTeX\" | \"MathJax\";\n    /** 数学公式渲染引擎为 MathJax 时传入的参数 */\n    mathJaxOptions?: any;\n}\n\n/** @link https://ld246.com/article/1549638745630#options-preview-markdown */\ninterface IMarkdownConfig {\n    /** 自动空格。默认值: false */\n    autoSpace?: boolean;\n    /** 段落开头是否空两格。默认值: false */\n    paragraphBeginningSpace?: boolean;\n    /** 自动矫正术语。默认值: false */\n    fixTermTypo?: boolean;\n    /** 插入目录。默认值: false */\n    toc?: boolean;\n    /** 脚注。默认值: true */\n    footnotes?: boolean;\n    /** wysiwyg & ir 模式代码块是否渲染。默认值: true */\n    codeBlockPreview?: boolean;\n    /** wysiwyg & ir 模式数学公式块是否渲染。默认值: true */\n    mathBlockPreview?: boolean;\n    /** 是否启用过滤 XSS。默认值: true */\n    sanitize?: boolean;\n    /** 链接相对路径前缀。默认值：'' */\n    linkBase?: string;\n    /** 链接强制前缀。默认值：'' */\n    linkPrefix?: string;\n    /** 为列表添加标记，以便[自定义列表样式](https://github.com/Vanessa219/vditor/issues/390) 默认值：false */\n    listStyle?: boolean;\n    /** 支持 mark 标记 */\n    mark?: boolean;\n    /** 支持自动链接 */\n    gfmAutoLink?: boolean;\n}\n\n/** @link https://ld246.com/article/1549638745630#options-preview */\ninterface IPreview {\n    /** 预览 debounce 毫秒间隔。默认值: 1000 */\n    delay?: number;\n    /** 预览区域最大宽度。默认值: 768 */\n    maxWidth?: number;\n    /** 显示模式。默认值: 'both' */\n    mode?: \"both\" | \"editor\";\n    /** md 解析请求 */\n    url?: string;\n    /** @link https://ld246.com/article/1549638745630#options-preview-hljs */\n    hljs?: IHljs;\n    /** @link https://ld246.com/article/1549638745630#options-preview-math */\n    math?: IMath;\n    /** @link https://ld246.com/article/1549638745630#options-preview-markdown */\n    markdown?: IMarkdownConfig;\n    /** @link https://ld246.com/article/1549638745630#options-preview-theme */\n    theme?: IPreviewTheme;\n    /** @link https://ld246.com/article/1549638745630#options-preview-actions  */\n    actions?: Array<IPreviewAction | IPreviewActionCustom>;\n    render?: IPreviewRender;\n\n    /** 预览回调 */\n    parse?(element: HTMLElement): void;\n\n    /** 渲染之前回调 */\n    transform?(html: string): string;\n}\n\ninterface IPreviewRender {\n    media?: {\n        enable?: boolean;\n    };\n}\n\ntype IPreviewAction = \"desktop\" | \"tablet\" | \"mobile\" | \"mp-wechat\" | \"zhihu\";\n\ninterface IPreviewActionCustom {\n    /** 键名 */\n    key: string;\n    /** 按钮文本 */\n    text: string;\n    /** 按钮 className 值 */\n    className?: string;\n    /** 按钮提示信息 */\n    tooltip?: string;\n    /** 点击回调 */\n    click: (key: string) => void;\n}\n\ninterface IPreviewOptions {\n    mode: \"dark\" | \"light\";\n    customEmoji?: IObject;\n    lang?: (keyof II18n);\n    i18n?: ITips;\n    lazyLoadImage?: string;\n    emojiPath?: string;\n    hljs?: IHljs;\n    speech?: {\n        enable?: boolean,\n    };\n    anchor?: number; // 0: no render, 1: render left, 2: render right\n    math?: IMath;\n    cdn?: string;\n    markdown?: IMarkdownConfig;\n    renderers?: ILuteRender;\n    theme?: IPreviewTheme;\n    icon?: \"ant\" | \"material\" | undefined;\n    render?: IPreviewRender;\n    loading?: boolean;\n    transform?(html: string): string;\n\n    after?(): void;\n}\n\ninterface IHintData {\n    html: string;\n    value: string;\n}\n\ninterface IHintExtend {\n    key: string;\n\n    hint?(value: string): IHintData[] | Promise<IHintData[]>;\n}\n\n/** @link https://ld246.com/article/1549638745630#options-hint */\ninterface IHint {\n    /** 提示内容是否进行 md 解析 */\n    parse?: boolean;\n    /** 常用表情提示 HTML */\n    emojiTail?: string;\n    /** 提示 debounce 毫秒间隔。默认值: 200 */\n    delay?: number;\n    /** 默认表情，可从 [lute/emoji_map](https://github.com/88250/lute/blob/master/parse/emoji_map.go#L32) 中选取，也可自定义 */\n    emoji?: IObject;\n    /** 表情图片地址。默认值: 'https://unpkg.com/vditor@${VDITOR_VERSION}/dist/images/emoji' */\n    emojiPath?: string;\n    extend?: IHintExtend[];\n}\n\n/** @link https://ld246.com/article/1549638745630#options-toolbarConfig */\ninterface IToolbarConfig {\n    /** 是否隐藏工具栏。默认值: false */\n    hide?: boolean;\n    /** 是否固定工具栏。默认值: false */\n    pin?: boolean;\n}\n\n/** @link https://ld246.com/article/1549638745630#options-comment */\ninterface IComment {\n    /** 是否启用评论模式。默认值: false */\n    enable: boolean;\n\n    /** 添加评论回调 */\n    add?(id: string, text: string, commentsData: ICommentsData[]): void;\n\n    /** 删除评论回调 */\n    remove?(ids: string[]): void;\n\n    /** 滚动回调 */\n    scroll?(top: number): void;\n\n    /** 文档修改时，适配评论高度 */\n    adjustTop?(commentsData: ICommentsData[]): void;\n}\n\n/** @link https://ld246.com/article/1549638745630#options-outline */\ninterface IOutline {\n    /** 初始化是否展现大纲。默认值: false */\n    enable: boolean;\n    /** 大纲位置：'left', 'right'。默认值: 'left' */\n    position: \"left\" | \"right\";\n}\n\ninterface IResize {\n    position?: string;\n    enable?: boolean;\n\n    after?(height: number): void;\n}\n\ninterface IImage extends IUpload {\n    /** 是否预览图片。默认值: true */\n    isPreview?: boolean;\n    /** 图片预览处理 */\n    preview?: (bom: Element) => void;\n}\n\n/** @link https://ld246.com/article/1549638745630#options */\ninterface IOptions {\n    /** RTL */\n    rtl?: boolean;\n    /** 历史记录间隔 */\n    undoDelay?: number;\n    /** 内部调试时使用 */\n    _lutePath?: string;\n    /** 编辑器初始化值。默认值: '' */\n    value?: string;\n    /** 是否显示日志。默认值: false */\n    debugger?: boolean;\n    /** 是否启用打字机模式。默认值: false */\n    typewriterMode?: boolean;\n    /** 编辑器总高度。默认值: 'auto' */\n    height?: number | string;\n    /** 编辑器最小高度 */\n    minHeight?: number;\n    /** 编辑器总宽度，支持 %。默认值: 'auto' */\n    width?: number | string;\n    /** 输入区域为空时的提示。默认值: '' */\n    placeholder?: string;\n    /** 多语言。默认值: 'zh_CN' */\n    lang?: (keyof II18n);\n    /** 国际化, 自定义语言。优先级低于lang */\n    i18n?: ITips;\n    /** @link https://ld246.com/article/1549638745630#options-fullscreen */\n    fullscreen?: {\n        /** 全屏层级。默认值: 90 */\n        index: number;\n    };\n    /** @link https://ld246.com/article/1549638745630#options-toolbar */\n    toolbar?: Array<string | IMenuItem>;\n    /** @link https://ld246.com/article/1549638745630#options-resize */\n    resize?: IResize;\n    /** @link https://ld246.com/article/1549638745630#options-counter */\n    counter?: {\n        /** 是否启用计数器。默认值: false */\n        enable: boolean;\n        /** 允许输入的最大值 */\n        max?: number;\n        /** 统计类型。默认值: 'markdown' */\n        type?: \"markdown\" | \"text\";\n        /** 字数统计回调。 */\n        after?(length: number, counter: {\n            /** 是否启用计数器。默认值: false */\n            enable: boolean;\n            /** 允许输入的最大值 */\n            max?: number;\n            /** 统计类型。默认值: 'markdown' */\n            type?: \"markdown\" | \"text\"\n        }): void\n    };\n    /** @link https://ld246.com/article/1549638745630#options-cache */\n    cache?: {\n        /** 缓存 key，第一个参数为元素且启用缓存时必填 */\n        id?: string;\n        /** 是否使用 localStorage 进行缓存。默认值: true */\n        enable?: boolean;\n        /** 缓存后的回调 */\n        after?(markdown: string): void;\n    };\n    /** 编辑模式。默认值: 'wysiwyg'\n     *\n     * wysiwyg: 所见即所得\n     *\n     * ir: 即时渲染\n     *\n     * sv: 分屏预览\n     */\n    mode?: \"wysiwyg\" | \"sv\" | \"ir\";\n    /** @link https://ld246.com/article/1549638745630#options-preview */\n    preview?: IPreview;\n    /** @link https://ld246.com/article/1549638745630#options-link */\n    link?: {\n        /** 是否打开链接地址。默认值: true */\n        isOpen?: boolean;\n        /** 点击链接事件 */\n        click?: (bom: Element) => void;\n    },\n    /** @link https://ld246.com/article/1549638745630#options-image */\n    image?: IImage,\n    /** @link https://ld246.com/article/1549638745630#options-hint */\n    hint?: IHint;\n    /** @link https://ld246.com/article/1549638745630#options-toolbarConfig */\n    toolbarConfig?: IToolbarConfig;\n    /** 评论\n     * @link https://ld246.com/article/1549638745630#options-comment\n     */\n    comment?: IComment;\n    /** 主题。默认值: 'classic' */\n    theme?: \"classic\" | \"dark\";\n    /** 图标。默认值: 'ant' */\n    icon?: \"ant\" | \"material\";\n    /** @link https://ld246.com/article/1549638745630#options-upload */\n    upload?: IUpload;\n    video?: IUpload;\n    /** @link https://ld246.com/article/1549638745630#options-classes */\n    classes?: IClasses;\n    /** 配置自建 CDN 地址。默认值: 'https://unpkg.com/vditor@${VDITOR_VERSION}' */\n    cdn?: string;\n    /** tab 键操作字符串，支持 \\t 及任意字符串 */\n    tab?: string;\n    /** @link https://ld246.com/article/1549638745630#options-outline */\n    outline?: IOutline;\n    customRenders?: {\n        language: string,\n        render: (element: HTMLElement, vditor: IVditor) => void\n    }[],\n\n    /** 编辑器异步渲染完成后的回调方法 */\n    after?(): void;\n\n    /** 输入后触发 */\n    input?(value: string): void;\n\n    /** 聚焦后触发  */\n    focus?(value: string): void;\n\n    /** 失焦后触发 */\n    blur?(value: string): void;\n\n    /** 按下键盘触发 */\n    keydown?(event: KeyboardEvent): void;\n\n    /** `esc` 按下后触发 */\n    esc?(value: string): void;\n\n    /** `⌘/ctrl+enter` 按下后触发 */\n    ctrlEnter?(value: string): void;\n\n    /** 编辑器中选中文字后触发 */\n    select?(value: string): void;\n\n    /** 编辑器中未选中文字后触发 */\n    unSelect?(): void;\n}\n\ninterface IEChart {\n    setOption(option: any): void;\n\n    resize(): void;\n}\n\ninterface IVditor {\n    element: HTMLElement;\n    options: IOptions;\n    originalInnerHTML: string;\n    lute: Lute;\n    currentMode: \"sv\" | \"wysiwyg\" | \"ir\";\n    devtools?: {\n        element: HTMLDivElement,\n        renderEchart(vditor: IVditor): void,\n    };\n    outline: {\n        element: HTMLElement,\n        render(vditor: IVditor): string,\n        toggle(vditor: IVditor, show?: boolean, focus?: boolean): void,\n    };\n    toolbar?: {\n        elements?: { [key: string]: HTMLElement },\n        element?: HTMLElement,\n        updateConfig(vditor: IVditor, options: IToolbarConfig): void,\n    };\n    preview?: {\n        element: HTMLElement,\n        previewElement: HTMLElement,\n        render(vditor: IVditor, value?: string): void,\n    };\n    counter?: {\n        element: HTMLElement\n        render(vditor: IVditor, mdText?: string): void,\n    };\n    resize?: {\n        element: HTMLElement,\n    };\n    hint: {\n        timeId: number\n        element: HTMLDivElement\n        recentLanguage: string\n        fillEmoji(element: HTMLElement, vditor: IVditor): void\n        render(vditor: IVditor): void,\n        genHTML(data: IHintData[], key: string, vditor: IVditor): void\n        select(event: KeyboardEvent, vditor: IVditor): boolean,\n    };\n    tip: {\n        element: HTMLElement\n        show(text: string, time?: number): void\n        hide(): void,\n    };\n    upload?: {\n        element: HTMLElement\n        isUploading: boolean\n        range: Range,\n    };\n    image?: {\n        element: HTMLElement\n        isUploading: boolean\n        range: Range,\n    };\n    video?: {\n        element: HTMLElement\n        isUploading: boolean\n        range: Range,\n    };\n    undo?: {\n        clearStack(vditor: IVditor): void,\n        redo(vditor: IVditor): void\n        undo(vditor: IVditor): void\n        addToUndoStack(vditor: IVditor): void\n        recordFirstPosition(vditor: IVditor, event: KeyboardEvent): void,\n        resetIcon(vditor: IVditor): void,\n    };\n    wysiwyg?: {\n        range: Range,\n        element: HTMLPreElement,\n        selectPopover: HTMLDivElement,\n        popover: HTMLDivElement,\n        afterRenderTimeoutId: number,\n        hlToolbarTimeoutId: number,\n        preventInput: boolean,\n        composingLock: boolean,\n        commentIds: string[]\n        getComments(vditor: IVditor, getData?: boolean): ICommentsData[],\n        triggerRemoveComment(vditor: IVditor): void,\n        showComment(): void,\n        hideComment(): void,\n        unbindListener(): void,\n    };\n    ir?: {\n        range: Range,\n        element: HTMLPreElement,\n        composingLock: boolean,\n        preventInput: boolean,\n        processTimeoutId: number,\n        hlToolbarTimeoutId: number,\n    };\n    sv?: {\n        range: Range,\n        element: HTMLPreElement,\n        processTimeoutId: number,\n        hlToolbarTimeoutId: number,\n        composingLock: boolean,\n        preventInput: boolean,\n    };\n}\n\ninterface ICommentsData {\n    id: string;\n    top: number;\n}\n"
  },
  {
    "path": "api/tasks/channel_update_key.go",
    "content": "package tasks\n\nimport (\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/model\"\n\t\"github.com/53AI/53AIHub/service\"\n)\n\n// StartChannelUpdateKeyTask starts the channel key update task\n// Executes immediately once, and then every 24 hours\nfunc StartChannelUpdateKeyTask() {\n\tgo func() {\n\t\t// Execute immediately once\n\t\tupdateCozeCnKey()\n\n\t\t// Set to execute every 24 hours\n\t\tticker := time.NewTicker(24 * time.Hour)\n\t\tdefer ticker.Stop()\n\n\t\tfor range ticker.C {\n\t\t\tupdateCozeCnKey()\n\t\t}\n\t}()\n\tlogger.SysLog(\"Channel key update task started, executing immediately once, then every 24 hours\")\n}\n\n// updateCozeCnKey refreshes tokens for all authorized Coze providers\nfunc updateCozeCnKey() {\n\t// Get all authorized providers with provider_type = 1 (CozeCn)\n\tproviders, err := model.GetProvidersByTypeAndAuthStatus(model.ProviderTypeCozeCn, true)\n\tif err != nil {\n\t\tlogger.SysError(\"Failed to get authorized Coze providers: \" + err.Error())\n\t\treturn\n\t}\n\n\tif len(providers) == 0 {\n\t\tlogger.Debug(nil, \"No authorized Coze providers found\")\n\t\treturn\n\t}\n\n\tsuccessCount := 0\n\tfailCount := 0\n\n\t// Process each provider\n\tfor _, provider := range providers {\n\t\t// Skip coze-studio providers as they use fixed AccessToken\n\t\tif provider.ProviderType == model.ProviderTypeCozeStudio {\n\t\t\tlogger.SysLogf(\"Skipping coze-studio provider token refresh: %d name: %s\", provider.ProviderID, provider.Name)\n\t\t\tcontinue\n\t\t}\n\n\t\tlogger.SysLogf(\"Refreshing provider token: %d name: %s\", provider.ProviderID, provider.Name)\n\n\t\t// Create service instance\n\t\tser := service.CozeService{\n\t\t\tProvider: provider,\n\t\t}\n\n\t\t// Check and refresh token\n\t\terr := ser.HandlerAccessTokenByRefreshToken()\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"Failed to refresh provider token: %d error: %v\", provider.ProviderID, err)\n\t\t\tfailCount++\n\t\t\tcontinue\n\t\t}\n\t}\n\n\tlogger.SysLogf(\"Channel key update completed. Success: %d Failed: %d\", successCount, failCount)\n}\n"
  },
  {
    "path": "api/tasks/main.go",
    "content": "package tasks\n\nimport (\n\t\"time\"\n)\n\nfunc Start() {\n\tStartOrderExpirationTask(1 * time.Minute)\n\tStartChannelUpdateKeyTask()\n}"
  },
  {
    "path": "api/tasks/order_tasks.go",
    "content": "package tasks\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/53AI/53AIHub/common\"\n\t\"github.com/53AI/53AIHub/common/logger\"\n\t\"github.com/53AI/53AIHub/model\"\n)\n\nconst (\n\t// Cache key for expired orders\n\tExpiredOrderCacheKey = \"order:expired_queue\"\n)\n\n// StartOrderExpirationTask starts a periodic task to update expired orders\n// It runs at the specified interval and updates orders that have passed their expiration time\nfunc StartOrderExpirationTask(interval time.Duration) {\n\tgo func() {\n\t\tticker := time.NewTicker(interval)\n\t\tdefer ticker.Stop()\n\n\t\t// Run immediately on start\n\t\tprocessExpiredOrders()\n\n\t\tfor range ticker.C {\n\t\t\tprocessExpiredOrders()\n\t\t}\n\t}()\n\tlogger.SysLog(\"Order expiration task started with interval: \" + interval.String())\n}\n\n// processExpiredOrders processes all expired orders and updates their status\nfunc processExpiredOrders() {\n\tredisEnabled := common.IsRedisEnabled()\n\n\tif redisEnabled {\n\t\tprocessExpiredOrdersWithRedis()\n\t} else {\n\t\tprocessExpiredOrdersWithDB()\n\t}\n}\n\nfunc processExpiredOrdersWithRedis() {\n\tnow := time.Now().UnixMilli()\n\n\torderIDs, err := common.RedisZRangeByScore(ExpiredOrderCacheKey, 0, now)\n\tif err != nil {\n\t\tlogger.SysError(\"Failed to get expired orders from cache: \" + err.Error())\n\t\treturn\n\t}\n\n\tif len(orderIDs) == 0 {\n\t\treturn\n\t}\n\n\tcount := 0\n\tordersByEid := make(map[int64][]string)\n\n\tfor _, orderIDWithEid := range orderIDs {\n\t\tparts := strings.Split(orderIDWithEid, \":\")\n\t\tif len(parts) != 2 {\n\t\t\tlogger.SysError(\"Invalid order ID format in cache: \" + orderIDWithEid)\n\t\t\t_, err = common.RedisZRem(ExpiredOrderCacheKey, orderIDWithEid)\n\t\t\tif err != nil {\n\t\t\t\tlogger.SysError(\"Failed to remove invalid order from cache: \" + err.Error())\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\teid, orderID := parts[0], parts[1]\n\t\teidInt, err := ParseInt64(eid)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"Invalid enterprise ID in cache: %v, Value: %s\", err, eid)\n\t\t\t_, err = common.RedisZRem(ExpiredOrderCacheKey, orderIDWithEid)\n\t\t\tif err != nil {\n\t\t\t\tlogger.SysError(\"Failed to remove invalid order from cache: \" + err.Error())\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tordersByEid[eidInt] = append(ordersByEid[eidInt], orderID)\n\t}\n\n\tfor eid, orderIDs := range ordersByEid {\n\t\tfor _, orderID := range orderIDs {\n\t\t\torder, err := model.GetOrderByOrderId(eid, orderID)\n\t\t\tif err != nil {\n\t\t\t\tlogger.SysErrorf(\"Failed to get order information: %v, Enterprise ID: %d, Order ID: %s\", err, eid, orderID)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif order.Status == model.OrderStatusPending {\n\t\t\t\terr = model.UpdateOrderStatus(eid, orderID, model.OrderStatusExpired)\n\t\t\t\tif err != nil {\n\t\t\t\t\tlogger.SysErrorf(\"Failed to update order status: %v, Enterprise ID: %d, Order ID: %s\", err, eid, orderID)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tcount++\n\t\t\t}\n\n\t\t\tcombinedID := fmt.Sprintf(\"%d:%s\", eid, orderID)\n\t\t\t_, err = common.RedisZRem(ExpiredOrderCacheKey, combinedID)\n\t\t\tif err != nil {\n\t\t\t\tlogger.SysErrorf(\"Failed to remove order from cache: %v, Enterprise ID: %d, Order ID: %s\", err, eid, orderID)\n\t\t\t}\n\t\t}\n\t}\n\n\tif count > 0 {\n\t\tlogger.SysLogf(\"Updated %d expired orders using Redis\", count)\n\t}\n}\n\nfunc processExpiredOrdersWithDB() {\n\tnow := time.Now()\n\n\texpiredOrders, err := model.GetExpiredPendingOrders(now)\n\tif err != nil {\n\t\tlogger.SysError(\"Failed to get expired orders from database: \" + err.Error())\n\t\treturn\n\t}\n\n\tif len(expiredOrders) == 0 {\n\t\treturn\n\t}\n\n\tcount := 0\n\tfor _, order := range expiredOrders {\n\t\terr = model.UpdateOrderStatus(order.Eid, order.OrderId, model.OrderStatusExpired)\n\t\tif err != nil {\n\t\t\tlogger.SysErrorf(\"Failed to update order status: %v, Enterprise ID: %d, Order ID: %s\", err, order.Eid, order.OrderId)\n\t\t\tcontinue\n\t\t}\n\t\tcount++\n\t}\n\n\tif count > 0 {\n\t\tlogger.SysLogf(\"Updated %d expired orders using database query\", count)\n\t}\n}\n\nfunc AddOrderToExpirationQueue(eid int64, orderID string, expireTime int64) error {\n\tcombinedID := fmt.Sprintf(\"%d:%s\", eid, orderID)\n\n\t_, err := common.RedisZAdd(ExpiredOrderCacheKey, expireTime, combinedID)\n\tif err != nil {\n\t\tlogger.SysErrorf(\"Failed to add order to expiration queue: %v, Enterprise ID: %d, Order ID: %s\", err, eid, orderID)\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// ParseInt64 is a helper function to parse string to int64\nfunc ParseInt64(s string) (int64, error) {\n\tvar i int64\n\t_, err := fmt.Sscanf(s, \"%d\", &i)\n\treturn i, err\n}\n"
  },
  {
    "path": "docker/docker-compose.yml",
    "content": "version: '3.8'\n\nservices:\n  web:\n    image: 53ai/53ai-hub:0.2.4\n    env_file: .env\n    ports:\n      - \"3000:3000\"\n    environment:\n      - REDIS_HOST=redis\n      - MYSQL_HOST=mysql\n    depends_on:\n      redis:\n        condition: service_healthy\n      mysql:\n        condition: service_healthy\n    restart: unless-stopped\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:3000/health || exit 1\"]\n      interval: 30s\n      timeout: 10s\n      retries: 3\n      start_period: 40s\n\n  redis:\n    image: redis:6-alpine\n    command: redis-server --requirepass your_redis_password\n    volumes:\n      - redis_data:/data\n    restart: unless-stopped\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"--raw\", \"incr\", \"ping\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  mysql:\n    image: mysql:8.0\n    environment:\n      MYSQL_ROOT_PASSWORD: rootpassword\n      MYSQL_DATABASE: 53ai_hub\n      MYSQL_USER: agent\n      MYSQL_PASSWORD: agentpassword\n    ports:\n      - \"3306:3306\"\n    volumes:\n      - mysql_data:/var/lib/mysql\n    restart: unless-stopped\n    healthcheck:\n      test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\", \"-u\", \"root\", \"-p$$MYSQL_ROOT_PASSWORD\"]\n      interval: 10s\n      timeout: 5s\n      retries: 10\n      start_period: 30s\n    command: >\n      --default-authentication-plugin=mysql_native_password\n      --wait-timeout=28800\n      --interactive-timeout=28800\n\nvolumes:\n  redis_data:\n  mysql_data:"
  },
  {
    "path": "web/README.md",
    "content": "# 53AIHub 平台前端项目资源\n\n<p align=\"center\">53AIHub 平台以前后端分离的形式运行，此目录下均为前端源码，分别为站点前台`front`和管理后台`console`,可根据你的需要自由修改，分别构建。</p>\n\n<p align=\"center\">\n<img src=\"https://img.shields.io/github/package-json/dependency-version/alex8088/electron-vite-boilerplate/dev/vite\" alt=\"vite-version\" />\n<img src=\"https://img.shields.io/github/package-json/dependency-version/alex8088/electron-vite-boilerplate/dev/vue\" alt=\"vue-version\" />\n<img src=\"https://img.shields.io/github/package-json/dependency-version/alex8088/electron-vite-boilerplate/dev/typescript\" alt=\"typescript-version\" />\n</p>\n\n\n## 目录结构\n\n```\n├── front     # 站点前台源代码目录\n└── console   # 管理后台源代码目录\n```\n\n## 运行项目\n\n### 本地版\n先构建前端项目的前台和管理后台，再构建后端接口打包出可执行程序\n\n进入目录\n```bash\ncd web/front\n```\n安装依赖\n```bash\nnpm install\n```\n\n构建前台\n```bash\nnpm run build\n```\n退出目录进入console目录\n```bash\ncd ../console\n```\n安装依赖\n```bash\nnpm install\n```\n构建管理后台\n```bash\nnpm run build\n```\n这样前端就构建完了，可以去看api目录的后端构建了（以下以打包windows为例）\n```bash\ncd ../../api\n```\n构建打包\n```bash\nmake build-windows-cgo\n```\n在`api/bin`目录下已经生成了可执行exe，双击运行即可\n\n\nTODO: 后续重构为 Monorepo，基于 pnpm workspace + Turborepo 构建，通用组件、工具函数抽离， 方便维护\n"
  },
  {
    "path": "web/console/.editorconfig",
    "content": "# Editor configuration, see http://editorconfig.org\n\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n"
  },
  {
    "path": "web/console/.eslintignore",
    "content": "# 依赖目录\nnode_modules/\n\n# 构建产物\ndist/\nbuild/\nout/\n\n# 公共资源目录（第三方库）\npublic/\n\n# 自动生成的文件\n*.d.ts\nauto-imports.d.ts\ncomponents.d.ts\n\n# 压缩文件\n*.min.js\n*.min.css\n\n# 测试覆盖率报告\ncoverage/\n\n# 临时文件\n.tmp/\ntemp/\n\n# 日志文件\n*.log\n\n# 环境配置文件\n.env\n.env.local\n.env.*.local\n\n# IDE 配置\n.vscode/\n.idea/\n\n# 配置文件\n.gitignore\ndocker-compose*\nkubernetes/\n\n# Husky 配置\n.husky/\n\n# 特定文件\nsrc/utils/md5.ts\n"
  },
  {
    "path": "web/console/.eslintrc.cjs",
    "content": "/* eslint-env node */\nrequire('@rushstack/eslint-patch/modern-module-resolution')\n\nmodule.exports = {\n  root: true,\n  env: {\n    browser: true,\n    es2021: true,\n    node: true\n  },\n  extends: [\n    'eslint:recommended',\n    'airbnb-base',\n    'plugin:vue/vue3-recommended',\n    '@vue/eslint-config-typescript/recommended',\n    '@vue/eslint-config-prettier'\n  ],\n  parserOptions: {\n    ecmaVersion: 'latest',\n    sourceType: 'module'\n  },\n  rules: {\n    // Vue 相关规则\n    'vue/require-default-prop': 'off',\n    'vue/multi-word-component-names': 'off',\n    'vue/no-multiple-template-root': 'off',\n    'vue/no-dupe-keys': 'off',\n    'vue/no-v-html': 'off',\n    'vue/no-mutating-props': 'off',\n    'vue/max-attributes-per-line': 'off',\n    'vue/singleline-html-element-content-newline': 'off',\n    'vue/multiline-html-element-content-newline': 'off',\n    'vue/html-closing-bracket-newline': 'off',\n    'vue/html-self-closing': 'off',\n    'vue/html-indent': 'off',\n    'vue/first-attribute-linebreak': 'off',\n    'vue/component-tags-order': [\n      'error',\n      {\n        order: ['template', 'script', 'style']\n      }\n    ],\n\n    // TypeScript 相关规则\n    '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],\n    '@typescript-eslint/no-explicit-any': 'warn',\n    '@typescript-eslint/no-this-alias': 'off',\n\n    // Import 相关规则\n    'import/no-extraneous-dependencies': 'off',\n    'import/no-unresolved': 'off',\n    'import/extensions': 'off',\n    'import/prefer-default-export': 'off',\n    'import/no-absolute-path': 'off',\n\n    // 代码风格规则\n    camelcase: 'off',\n    'no-restricted-syntax': 'off',\n    'no-underscore-dangle': 'off',\n    'no-nested-ternary': 'off',\n    'no-plusplus': 'off',\n    'max-classes-per-file': 'off',\n    'class-methods-use-this': 'off',\n    'no-useless-escape': 'off',\n    'default-case': 'off',\n    'no-case-declarations': 'off',\n    'no-new': 'off',\n    'no-return-await': 'off',\n    'no-empty': 'off',\n    'no-param-reassign': 'off',\n    'prefer-destructuring': 'off',\n    'no-shadow': 'off',\n    '@typescript-eslint/no-shadow': 'off',\n\n    // 环境相关规则\n    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',\n    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',\n\n    // 格式化相关规则（交给 Prettier 处理）\n    'max-len': 'off',\n    'object-curly-newline': 'off',\n    'function-paren-newline': 'off',\n    'operator-linebreak': 'off',\n    'implicit-arrow-linebreak': 'off',\n    'function-call-argument-newline': 'off'\n  },\n  ignorePatterns: ['dist', 'node_modules', 'public', '*.min.js', 'coverage']\n}\n"
  },
  {
    "path": "web/console/.gitattributes",
    "content": "\"*.vue\"    eol=lf\n\"*.js\"     eol=lf\n\"*.ts\"     eol=lf\n\"*.jsx\"    eol=lf\n\"*.tsx\"    eol=lf\n\"*.cjs\"    eol=lf\n\"*.cts\"    eol=lf\n\"*.mjs\"    eol=lf\n\"*.mts\"    eol=lf\n\"*.json\"   eol=lf\n\"*.html\"   eol=lf\n\"*.css\"    eol=lf\n\"*.less\"   eol=lf\n\"*.scss\"   eol=lf\n\"*.sass\"   eol=lf\n\"*.styl\"   eol=lf\n\"*.md\"     eol=lf\n\n\n.env.example merge=ours\n.env.pre-prod merge=ours\n.env.production merge=ours\n.env.km-dev merge=ours\n.env.km-prod merge=ours\n.github  merge=ours\nscripts merge=ours\n\n\npublic\\UEditor\\ueditor.all.min.js merge=ours\npublic\\UEditor\\third-party\\webuploader\\webuploader.min.js merge=ours\n"
  },
  {
    "path": "web/console/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\npackage-lock.json\n\nnode_modules\n.DS_Store\n\ndist-ssr\ndist.zip\ncoverage\n*.local\n\ndist\ndist/\n*-dist\n*-dist/\n\n/cypress/videos/\n/cypress/screenshots/\n\n# Editor directories and files\n.vscode/*\n!.vscode/settings.json\n!.vscode/extensions.json\n.idea\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n\n# Environment variables files\n/service/.env\nreport/\n"
  },
  {
    "path": "web/console/.husky/commit-msg",
    "content": "#!/usr/bin/env sh\n. \"$(dirname -- \"$0\")/_/husky.sh\"\n\nnpx --no -- commitlint --edit $1\n"
  },
  {
    "path": "web/console/.husky/pre-commit",
    "content": "#!/usr/bin/env sh\n. \"$(dirname -- \"$0\")/_/husky.sh\"\n\nnpx lint-staged\n"
  },
  {
    "path": "web/console/.npmrc",
    "content": "strict-peer-dependencies=false\n"
  },
  {
    "path": "web/console/.prettierignore",
    "content": "# 依赖目录\nnode_modules/\n\n# 构建产物\ndist/\nbuild/\nout/\n\n# 公共资源目录（第三方库）\npublic/\n\n# 自动生成的文件\n*.d.ts\nauto-imports.d.ts\ncomponents.d.ts\n\n# 压缩文件\n*.min.js\n*.min.css\n\n# 测试覆盖率报告\ncoverage/\n\n# 临时文件\n.tmp/\ntemp/\n\n# 日志文件\n*.log\n\n# 环境配置文件\n.env\n.env.local\n.env.*.local\n\n# IDE 配置\n.vscode/\n.idea/\n\n# 版本控制\n.git/\n\n# 包管理器文件\npackage-lock.json\nyarn.lock\npnpm-lock.yaml\n\n# TypeScript 配置文件\ntsconfig.json\ntsconfig.*.json\n\n# 特定格式文件（保持原有格式）\nCHANGELOG.md\nLICENSE.md\n\n# Husky 配置\n.husky/\n\n# 其他不需要格式化的文件\n*.svg\n*.png\n*.jpg\n*.jpeg\n*.gif\n*.ico\n*.woff\n*.woff2\n*.ttf\n*.eot\n"
  },
  {
    "path": "web/console/.prettierrc.js",
    "content": "module.exports = {\n  // 基础配置\n  singleQuote: true,\n  semi: false,\n  printWidth: 100,\n  tabWidth: 2,\n  useTabs: false,\n  trailingComma: 'es5',\n  bracketSpacing: true,\n  bracketSameLine: false,\n  arrowParens: 'avoid',\n  endOfLine: 'lf',\n\n  // Vue 相关配置\n  vueIndentScriptAndStyle: false,\n  htmlWhitespaceSensitivity: 'css',\n  singleAttributePerLine: false,\n\n  // 针对不同文件类型的配置\n  overrides: [\n    {\n      files: '*.vue',\n      options: {\n        parser: 'vue',\n        printWidth: 120,\n        htmlWhitespaceSensitivity: 'css',\n        vueIndentScriptAndStyle: false,\n        singleAttributePerLine: false\n      }\n    },\n    {\n      files: ['*.js', '*.ts', '*.tsx'],\n      options: {\n        printWidth: 100,\n        semi: false,\n        singleQuote: true\n      }\n    },\n    {\n      files: ['*.json', '*.jsonc'],\n      options: {\n        printWidth: 80,\n        semi: false,\n        singleQuote: false,\n        trailingComma: 'none'\n      }\n    },\n    {\n      files: ['*.md', '*.markdown'],\n      options: {\n        printWidth: 80,\n        proseWrap: 'preserve',\n        singleQuote: false\n      }\n    },\n    {\n      files: ['*.css', '*.scss', '*.less'],\n      options: {\n        printWidth: 120,\n        singleQuote: true\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "web/console/LINT_SETUP.md",
    "content": "# Lint 配置说明\n\n本项目已配置了完整的代码检查和格式化工具链，包括 commitlint + husky + eslint + stylelint + lint-staged。\n\n## 📦 已安装的工具\n\n### 提交规范\n\n- `@commitlint/cli` - commitlint 命令行工具\n- `@commitlint/config-conventional` - 常规提交规范配置\n- `husky` - Git hooks 管理工具\n\n### 代码检查\n\n- `eslint` - JavaScript/TypeScript 代码检查\n- `eslint-config-airbnb-base` - Airbnb 代码规范（已定制化调整）\n- `stylelint` - CSS/SCSS/Vue 样式检查\n- `stylelint-config-standard` - 标准样式规范\n- `stylelint-config-recommended-vue` - Vue 样式推荐规范\n\n### 自动化工具\n\n- `lint-staged` - 只对 staged 文件进行检查的工具\n- `prettier` - 代码格式化工具\n\n## 📄 配置文件\n\n### commitlint.config.js\n\n定义了提交消息的规范，支持以下类型：\n\n- `feat`: 新增功能\n- `fix`: 修复缺陷\n- `docs`: 文档变更\n- `style`: 代码格式修改\n- `refactor`: 代码重构\n- `perf`: 性能优化\n- `test`: 测试相关\n- `build`: 构建相关\n- `ci`: CI 配置\n- `chore`: 杂项\n- `revert`: 回滚\n- `wip`: 开发中\n- `workflow`: 工作流程改进\n- `types`: 类型声明修改\n\n### .eslintrc.cjs\n\nESLint 配置，基于 Airbnb 规范并进行了项目定制化调整：\n\n- 支持 TypeScript 和 Vue 3\n- 放宽了部分严格规则以适应项目需求\n- 关闭了与 Prettier 冲突的规则\n\n### stylelint.config.js\n\n样式检查配置：\n\n- 支持 Vue 单文件组件\n- 兼容 Tailwind CSS\n- 排除第三方库文件\n- 支持 Vue 的深度选择器语法\n\n### lint-staged.config.js\n\n定义了对不同文件类型的处理：\n\n- JS/TS 文件：ESLint 检查 + Prettier 格式化\n- Vue 文件：ESLint + Stylelint 检查 + Prettier 格式化\n- CSS 文件：Stylelint 检查 + Prettier 格式化\n- JSON/MD 文件：Prettier 格式化\n\n### .husky/pre-commit\n\n提交前自动运行 `lint-staged`\n\n### .husky/commit-msg\n\n提交时检查提交消息格式\n\n## 🚀 使用方法\n\n### 自动执行（推荐）\n\nGit 提交时会自动执行：\n\n1. `pre-commit` hook 运行 `lint-staged` 检查和修复 staged 文件\n2. `commit-msg` hook 检查提交消息格式\n\n### 手动执行\n\n```bash\n# 检查所有 TypeScript/JavaScript 文件\nnpm run lint\n\n# 检查所有样式文件\nnpm run stylelint\n\n# 只检查 staged 文件\nnpm run lint-staged\n\n# 格式化所有文件\nnpm run format\n\n# 检查提交消息格式\nnpm run commitlint\n```\n\n### 提交消息示例\n\n```bash\n# ✅ 正确格式\ngit commit -m \"feat: 添加用户登录功能\"\ngit commit -m \"fix: 修复登录页面样式问题\"\ngit commit -m \"docs: 更新 README 文档\"\n\n# ❌ 错误格式\ngit commit -m \"add login feature\"\ngit commit -m \"fix bug\"\ngit commit -m \"update\"\n```\n\n## 📋 工作流程\n\n1. **开发阶段**：正常编写代码\n2. **提交前**：\n   - `git add` 暂存要提交的文件\n   - `git commit -m \"feat: 描述\"`\n   - 自动运行 `pre-commit` hook：\n     - 对 staged 文件执行 ESLint 检查和修复\n     - 对 staged 文件执行 Stylelint 检查和修复\n     - 对 staged 文件执行 Prettier 格式化\n   - 自动运行 `commit-msg` hook：\n     - 检查提交消息格式\n3. **如果检查通过**：提交成功\n4. **如果检查失败**：修复问题后重新提交\n\n## 🔧 自定义配置\n\n如需调整规则，可以修改对应的配置文件：\n\n- ESLint 规则：修改 `.eslintrc.cjs`\n- Stylelint 规则：修改 `stylelint.config.js`\n- 提交规范：修改 `commitlint.config.js`\n- Lint-staged 行为：修改 `lint-staged.config.js`\n\n## 🚫 绕过检查（不推荐）\n\n在紧急情况下可以绕过检查：\n\n```bash\n# 绕过所有 hooks\ngit commit --no-verify -m \"emergency fix\"\n```\n\n**注意：绕过检查可能导致代码质量问题，请谨慎使用。**\n\n## 🔍 常见问题排查\n\n### 1. 提交被拒绝\n\n如果提交被拒绝，请检查：\n\n- 提交消息是否符合规范\n- 代码是否通过 lint 检查\n- 是否有语法错误\n\n### 2. v-if 指令格式化问题\n\n如果 Vue 文件中的 `v-if` 指令被错误地换行到最左边：\n\n- 确保使用了项目根目录的 `.vscode/settings.json` 配置\n- 检查是否安装了推荐的 VSCode 扩展\n- 确保 `editor.defaultFormatter` 设置为 `esbenp.prettier-vscode`\n- 重启 VSCode 并重新加载项目\n\n### 3. VSCode 配置\n\n为确保格式化正常工作，请：\n\n- 安装推荐的扩展（会自动提示）\n- 确保 `settings.json` 中的格式化器设置正确\n- 禁用可能冲突的格式化扩展（如 Vetur）\n\n### 4. 格式化不生效\n\n如果自动格式化不生效，请：\n\n- 确保已安装 Prettier 扩展\n- 检查 VSCode 设置是否正确\n- 重启 VSCode\n\n### 5. Stylelint 报错\n\n如果 CSS 样式检查报错，请：\n\n- 检查 CSS 语法是否正确\n- 确认是否使用了不支持的语法\n- 查看是否与 Tailwind 冲突\n\n## 🛠️ VSCode 配置说明\n\n项目已配置了 `.vscode/settings.json` 和 `.vscode/extensions.json`：\n\n- `settings.json`: 确保 VSCode 使用正确的格式化器和设置\n- `extensions.json`: 推荐安装的扩展列表\n- 重要：请确保安装了推荐的扩展，特别是 `esbenp.prettier-vscode`\n\n## 📋 格式化配置\n\n### Prettier 配置 (.prettierrc.js)\n\n- Vue 文件使用 150 字符宽度，防止 `v-if` 等指令被强制换行\n- 支持 Tailwind CSS 类名\n- 保持一致的代码风格\n\n### ESLint 配置 (.eslintrc.cjs)\n\n- 基于 Airbnb 规范，适应项目需求\n- 支持 TypeScript 和 Vue 3\n- 与 Prettier 协同工作\n"
  },
  {
    "path": "web/console/README.md",
    "content": "# 管理后台前端项目\n\n基于 Vue3 和 TypeScript 的AI代理管理平台管理后台开发模板\n\n## 特性\n\n\\- 💡 优化的资源处理\n\n\\- 🚀 快速的热模块替换（HMR）\n\n\\- 🔌 便捷的调试体验\n\n\\- 📦 完善的构建流程\n\n## 开发环境配置\n\n### 推荐的 IDE 配置\n\n\\- [VSCode](https://code.visualstudio.com/) + [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) + [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin)\n\n## 项目设置\n\n### Node 版本要求\n\nv18.12.0\n\n### 安装依赖\n\n```bash\n$ npm install\n```\n\n### 开发模式\n\n```bash\n$ npm run dev\n```\n\n### 构建项目\n\n```bash\n$ npm run build\n```\n\n### 服务端后台代码更新\n复制`dist/`文件夹下的所有代码， 粘贴到`api/static/dist`文件夹中\n\n\n### 百度编辑器相关\n\n如有附件上传相关的操作，请在 `public\\UEditor\\third-party\\webuploader\\webuploader.min.js` 中修改`oss-api-key` 和 `oss-url.cn`\n\n\n## 技术文档\n\n- [项目配置](https://cn.vitejs.dev/config/)\n- [Vue3 文档](https://cn.vuejs.org/)\n- [TypeScript 文档](https://www.typescriptlang.org/zh/)\n- [Vite 指南](https://cn.vitejs.dev/guide/)\n\n## 代码规范\n\n本项目使用 ESLint 和 Prettier 来确保代码质量和一致性。请确保在提交代码前运行代码检查：\n\n```bash\n$ npm run lint\n```\n\n## 目录结构\n\n```\n├── src/src     # 源代码目录\n│   ├── api/              # api接口与错误code\n│   ├── assets/           # 样式跟icon\n│   ├── components/       # 组件\n│   ├── directive/        # 自定义指令\n│   ├── hooks/            # 通用hooks\n│   ├── views/            # 页面\n│   ├── router/           # 路由配置\n│   ├── types/            # 类型定义\n│   ├── constants/        # 常用变量\n│   ├── locales/          # 语言包\n│   ├── store/            # 状态管理\n│   ├── utils/            # 工具箱\n│   └── main.ts           # 入口文件\n├── src/renderer/public   # 公共资源\n├── dist/                 # 构建输出目录\n├── .eslintrc.js          # ESLint 配置\n├── .prettierrc           # Prettier 配置\n├── tsconfig.json         # TypeScript 配置\n└── vite.config.ts        # Vite 配置\n```\n"
  },
  {
    "path": "web/console/auto-imports.d.ts",
    "content": "/* eslint-disable */\n/* prettier-ignore */\n// @ts-nocheck\n// Generated by unplugin-auto-import\nexport {}\ndeclare global {\n\n}\n"
  },
  {
    "path": "web/console/commitlint.config.js",
    "content": "module.exports = {\n  extends: ['@commitlint/config-conventional'],\n  rules: {\n    // 类型枚举，git提交type必须是以下类型\n    'type-enum': [\n      2,\n      'always',\n      [\n        'feat', // 新增功能\n        'fix', // 修复缺陷\n        'docs', // 文档变更\n        'style', // 代码格式（不影响功能，例如空格、分号等格式修正）\n        'refactor', // 代码重构（不包括 bug 修复、功能新增）\n        'perf', // 性能优化\n        'test', // 添加疏漏测试或已有测试改动\n        'build', // 构建流程、外部依赖变更（如升级 npm 包、修改 webpack 配置等）\n        'ci', // 修改 CI 配置、脚本\n        'chore', // 对构建过程或辅助工具和库的更改（不影响源文件、测试用例）\n        'revert', // 回滚 commit\n        'wip', // 开发中\n        'workflow', // 工作流程改进\n        'types' // 类型声明或修改\n      ]\n    ],\n    // subject 大小写不做校验\n    'subject-case': [0],\n    // subject 不允许为空\n    'subject-empty': [2, 'never'],\n    // subject 以什么为结束标志，禁用\n    'subject-full-stop': [0, 'never'],\n    // type 必须小写\n    'type-case': [2, 'always', 'lower-case'],\n    // type 不能为空\n    'type-empty': [2, 'never']\n  }\n}\n"
  },
  {
    "path": "web/console/components.d.ts",
    "content": "/* eslint-disable */\n/* prettier-ignore */\n// @ts-nocheck\n// Generated by unplugin-vue-components\n// Read more: https://github.com/vuejs/core/pull/3399\nimport '@vue/runtime-core'\n\nexport {}\n\ndeclare module '@vue/runtime-core' {\n  export interface GlobalComponents {\n    AgentPicker: typeof import('./src/components/AgentPicker/index.vue')['default']\n    Certificate: typeof import('./src/components/Upload/certificate.vue')['default']\n    Component: typeof import('./src/components/Prompt/test/component.vue')['default']\n    CropperDialog: typeof import('./src/components/CropperDialog/index.vue')['default']\n    DateRange: typeof import('./src/components/Filter/date-range.vue')['default']\n    DeptMemberPicker: typeof import('./src/components/DeptMemberPicker/index.vue')['default']\n    DialogueRecord: typeof import('./src/components/DialogueRecord/index.vue')['default']\n    Drawer: typeof import('./src/components/DialogueRecord/drawer.vue')['default']\n    Editor: typeof import('./src/components/Markdown/editor.vue')['default']\n    ElAside: typeof import('element-plus/es')['ElAside']\n    ElAvatar: typeof import('element-plus/es')['ElAvatar']\n    ElButton: typeof import('element-plus/es')['ElButton']\n    ElCheckbox: typeof import('element-plus/es')['ElCheckbox']\n    ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']\n    ElCollapse: typeof import('element-plus/es')['ElCollapse']\n    ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']\n    ElColorPicker: typeof import('element-plus/es')['ElColorPicker']\n    ElContainer: typeof import('element-plus/es')['ElContainer']\n    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']\n    ElDialog: typeof import('element-plus/es')['ElDialog']\n    ElDivider: typeof import('element-plus/es')['ElDivider']\n    ElDrawer: typeof import('element-plus/es')['ElDrawer']\n    ElDropdown: typeof import('element-plus/es')['ElDropdown']\n    ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']\n    ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']\n    ElEmpty: typeof import('element-plus/es')['ElEmpty']\n    ElForm: typeof import('element-plus/es')['ElForm']\n    ElFormItem: typeof import('element-plus/es')['ElFormItem']\n    ElIcon: typeof import('element-plus/es')['ElIcon']\n    ElImage: typeof import('element-plus/es')['ElImage']\n    ElImageViewer: typeof import('element-plus/es')['ElImageViewer']\n    ElInput: typeof import('element-plus/es')['ElInput']\n    ElInputNumber: typeof import('element-plus/es')['ElInputNumber']\n    ElInputTag: typeof import('element-plus/es')['ElInputTag']\n    ElLink: typeof import('element-plus/es')['ElLink']\n    ElMain: typeof import('element-plus/es')['ElMain']\n    ElMenu: typeof import('element-plus/es')['ElMenu']\n    ElMenuItem: typeof import('element-plus/es')['ElMenuItem']\n    ElMenuItemGroup: typeof import('element-plus/es')['ElMenuItemGroup']\n    ElOption: typeof import('element-plus/es')['ElOption']\n    ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup']\n    ElPagination: typeof import('element-plus/es')['ElPagination']\n    ElPopover: typeof import('element-plus/es')['ElPopover']\n    ElProgress: typeof import('element-plus/es')['ElProgress']\n    ElRadio: typeof import('element-plus/es')['ElRadio']\n    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']\n    ElSelect: typeof import('element-plus/es')['ElSelect']\n    ElSkeleton: typeof import('element-plus/es')['ElSkeleton']\n    ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem']\n    ElSlider: typeof import('element-plus/es')['ElSlider']\n    ElStep: typeof import('element-plus/es')['ElStep']\n    ElSteps: typeof import('element-plus/es')['ElSteps']\n    ElSubMenu: typeof import('element-plus/es')['ElSubMenu']\n    ElSwitch: typeof import('element-plus/es')['ElSwitch']\n    ElTable: typeof import('element-plus/es')['ElTable']\n    ElTableColumn: typeof import('element-plus/es')['ElTableColumn']\n    ElTabPane: typeof import('element-plus/es')['ElTabPane']\n    ElTabs: typeof import('element-plus/es')['ElTabs']\n    ElTag: typeof import('element-plus/es')['ElTag']\n    ElTooltip: typeof import('element-plus/es')['ElTooltip']\n    ElTree: typeof import('element-plus/es')['ElTree']\n    ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']\n    ElUpload: typeof import('element-plus/es')['ElUpload']\n    Fullscreen: typeof import('./src/components/Fullscreen/index.vue')['default']\n    Generate: typeof import('./src/components/Prompt/generate.vue')['default']\n    GroupDialog: typeof import('./src/components/GroupDialog/index.vue')['default']\n    GroupSelect: typeof import('./src/components/GroupSelect/index.vue')['default']\n    GroupTabs: typeof import('./src/components/GroupTabs/index.vue')['default']\n    Header: typeof import('./src/components/Header/index.vue')['default']\n    Image: typeof import('./src/components/Upload/image.vue')['default']\n    Input: typeof import('./src/components/Prompt/input.vue')['default']\n    LanguageDropdown: typeof import('./src/components/LanguageDropdown/LanguageDropdown.vue')['default']\n    Layout: typeof import('./src/components/Layout/index.vue')['default']\n    OpenData: typeof import('./src/components/OpenData/index.vue')['default']\n    Optimize: typeof import('./src/components/Prompt/optimize.vue')['default']\n    Pagination: typeof import('./src/components/Pagination/index.vue')['default']\n    Role: typeof import('./src/components/Unit/role.vue')['default']\n    RouterLink: typeof import('vue-router')['RouterLink']\n    RouterView: typeof import('vue-router')['RouterView']\n    Scroller: typeof import('./src/components/Scroller/index.vue')['default']\n    Search: typeof import('./src/components/Search/index.vue')['default']\n    Select: typeof import('./src/components/Filter/select.vue')['default']\n    SelectPlus: typeof import('./src/components/SelectPlus/index.vue')['default']\n    ServiceDialog: typeof import('./src/components/ServiceDialog/index.vue')['default']\n    Simple: typeof import('./src/components/Pagination/simple.vue')['default']\n    Sortable: typeof import('./src/components/Sortable/index.vue')['default']\n    SvgIcon: typeof import('./src/components/SvgIcon/index.vue')['default']\n    TablePlus: typeof import('./src/components/TablePlus/index.vue')['default']\n    TipConfirm: typeof import('./src/components/TipConfirm/index.vue')['default']\n    UEditor: typeof import('./src/components/UEditor/index.vue')['default']\n    Upload: typeof import('./src/components/Upload/index.vue')['default']\n    User: typeof import('./src/components/Filter/user.vue')['default']\n    UserLoginDialog: typeof import('./src/components/UserLoginDialog/index.vue')['default']\n    VerificationCodeInput: typeof import('./src/components/VerificationCodeInput/index.vue')['default']\n  }\n  export interface ComponentCustomProperties {\n    vInfiniteScroll: typeof import('element-plus/es')['ElInfiniteScroll']\n    vLoading: typeof import('element-plus/es')['ElLoadingDirective']\n  }\n}\n"
  },
  {
    "path": "web/console/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-cmn-Hans\">\n\n<head>\n\t<meta charset=\"UTF-8\">\n\t<!-- <link rel=\"icon\" type=\"image/svg+xml\" href=\"/favicon.svg\"> -->\n\t<meta content=\"yes\" name=\"apple-mobile-web-app-capable\" />\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover\" />\n\t<meta name=\"wpk-bid\" content=\"dta_2_137895\" />\n\t<link rel=\"apple-touch-icon\" href=\"/favicon.ico\">\n\t<link rel=\"manifest\" href=\"/manifest.json\">\n\t<title>53AI Hub</title>\n\t<script>\t</script>\n</head>\n\n<!-- <body class=\"dark:bg-black\"> -->\n<body>\n\t<style>\n\t\tbody {\n\t\t\t--ball-color: #4b9e5f;\n\t\t\theight: 100%;\n\t\t\toverflow: hidden;\n\t\t}\n\t\tbody.is-mask {\n\t\t\twidth: 100vw;\n\t\t\theight: 100vh;\n\t\t\tbackground-color: rgba(0, 0, 0, 0.3);\n\t\t\t--ball-color: rgba(37, 99, 235, 1);\n\t\t}\n\t\t\t.loader-wrapper {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\t\t\t\talign-items: center;\n\t\t\t\twidth: 100vw;\n\t\t\t\theight: 100vh;\n\t\t\t}\n\t\t\t.balls {\n\t\t\t\twidth: 4em;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-flow: row nowrap;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: space-between;\n\t\t\t}\n\t\t\t.balls div {\n\t\t\t\twidth: 0.8em;\n\t\t\t\theight: 0.8em;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tbackground-color: var(--ball-color);\n\t\t\t}\n\t\t\t.balls div:nth-of-type(1) {\n\t\t\t\ttransform: translateX(-100%);\n\t\t\t\tanimation: left-swing 0.5s ease-in alternate infinite;\n\t\t\t}\n\t\t\t.balls div:nth-of-type(3) {\n\t\t\t\ttransform: translateX(-95%);\n\t\t\t\tanimation: right-swing 0.5s ease-out alternate infinite;\n\t\t\t}\n\n\t\t\t@keyframes left-swing {\n\n\t\t\t\t50%,\n\t\t\t\t100% {\n\t\t\t\t\ttransform: translateX(95%);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@keyframes right-swing {\n\t\t\t\t50% {\n\t\t\t\t\ttransform: translateX(-95%);\n\t\t\t\t}\n\n\t\t\t\t100% {\n\t\t\t\t\ttransform: translateX(100%);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* @media (prefers-color-scheme: dark) {\n\t\t\t\tbody {\n\t\t\t\t\tbackground: #121212;\n\t\t\t\t}\n\t\t\t} */\n\t</style>\n\t<div id=\"app\">\n\t\t<div class=\"loader-wrapper\">\n\t\t\t<div class=\"balls\">\n\t\t\t\t<div></div>\n\t\t\t\t<div></div>\n\t\t\t\t<div></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<script>\n\t\tfunction getSearchParam() {\n\t\t  const search = location.search.split('?')[1] || ''\n\t\t  const reg = /([^?&=]+)=([^?&=]+)/g\n\t\t  const params = {}\n\t\t  search.match(reg)?.forEach((item) => {\n\t\t    const [key, value] = item.split('=')\n\t\t    params[key] = value\n\t\t  })\n\t\t  return params\n\t\t}\n\t\tfunction joinSearchParam(params = {}) {\n\t\t  let search = ''\n\t\t  Object.keys(params).forEach((key) => {\n\t\t    search += `${key}=${params[key]}&`\n\t\t  })\n\t\t  if (search)\n    search = `?${search}`\n\t\t  return search\n\t\t}\n\t\tconst search_params = getSearchParam()\n\t\tif (search_params.api_host) window.api_host = `http://${search_params.api_host.replace(/^https?:\\/\\//, '').replace(/\\/$/, '')}`\n\t\tif (search_params.qyy_host) window.qyy_host = `http://${search_params.qyy_host.replace(/^https?:\\/\\//, '').replace(/\\/$/, '')}`\n\t\tconst provider_type = location.search.includes('provider_type') ? location.search.split('provider_type=')[1] : ''\n\t\tconst provider_id = location.search.includes('provider_id') ? location.search.split('provider_id=')[1] : ''\n\t\tconst is_authorized = location.search.includes('is_authorized') ? location.search.split('is_authorized=')[1] : ''\n\t\tif (search_params.provider_type) {\n\t\t\tif (window.opener) {\n\t\t\t\twindow.opener.postMessage({\n\t\t\t\t\tprovider_type: search_params.provider_type,\n\t\t\t\t\tprovider_id: search_params.provider_id,\n\t\t\t\t\tis_authorized: search_params.is_authorized,\n\t\t\t\t}, '*')\n\t\t\t} else {\n\t\t\t\twindow.postMessage({\n\t\t\t\t\tprovider_type: search_params.provider_type,\n\t\t\t\t\tprovider_id: search_params.provider_id,\n\t\t\t\t\tis_authorized: search_params.is_authorized,\n\t\t\t\t}, '*')\n\t\t\t}\n\t\t}\n\t\tif (search_params.access_token) {\n\t\t  localStorage.removeItem('access_token')\n\t\t  localStorage.removeItem('user_info')\n\t\t  localStorage.setItem('access_token', search_params.access_token)\n\t\t  localStorage.setItem('user_info', JSON.stringify({\n\t\t    access_token: search_params.access_token,\n\t\t    user_id: '',\n\t\t    eid: search_params.eid,\n\t\t  }))\n\t\t  delete search_params.access_token\n\t\t  delete search_params.eid\n\t\t\tif (search_params.from_origin) {\n\t\t\t\tsessionStorage.setItem('from_origin', decodeURIComponent(search_params.from_origin))\n\t\t\t\tdelete search_params.from_origin\n\t\t\t}\n\t\t  location.search = joinSearchParam(search_params)\n\t\t}\n\t</script>\n\t<script type=\"module\" src=\"/src/main.ts\"></script>\n\t<script>\n\tvar _hmt = _hmt || [];\n\t(function() {\n\t\tvar hm = document.createElement(\"script\");\n\t\thm.src = \"https://hm.baidu.com/hm.js?c0e32ea294a4fc371fe6ec64187e36e1\";\n\t\tvar s = document.getElementsByTagName(\"script\")[0];\n\t\ts.parentNode.insertBefore(hm, s);\n\t})();\n\t</script>\n</body>\n\n</html>\n"
  },
  {
    "path": "web/console/lint-staged.config.js",
    "content": "module.exports = {\n  // JavaScript 和 TypeScript 文件\n  '*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'],\n\n  // Vue 文件\n  '*.vue': ['eslint --fix', 'stylelint --fix', 'prettier --write'],\n\n  // CSS 和样式文件\n  '*.{css,scss,sass,less,styl}': ['stylelint --fix', 'prettier --write'],\n\n  // JSON 和配置文件\n  '*.{json,md,yml,yaml}': ['prettier --write']\n}\n"
  },
  {
    "path": "web/console/package.json",
    "content": "{\n  \"name\": \"53aihub-console\",\n  \"version\": \"0.2.2\",\n  \"description\": \"53aihub-console\",\n  \"author\": \"53aihub\",\n  \"homepage\": \"https://53ai.com/\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"dev:op-local\": \"cross-env VITE_PLATFORM=op-local vite\",\n    \"dev:km\": \"vite --mode km-dev\",\n    \"dev:km-prod\": \"vite --mode km-prod\",\n    \"build\": \"run-p build-only\",\n    \"build:op-local\": \"cross-env VITE_PLATFORM=op-local run-p build-only\",\n    \"build:km\": \"vite build --mode km-prod\",\n    \"build:check\": \"run-p type-check build-only\",\n    \"preview\": \"vite preview\",\n    \"build-only\": \"vite build\",\n    \"type-check\": \"vue-tsc --noEmit\",\n    \"lint\": \"eslint .\",\n    \"lint:fix\": \"eslint . --fix\",\n    \"lint:style\": \"stylelint \\\"**/*.{css,scss,less,vue}\\\"\",\n    \"lint:style:fix\": \"stylelint \\\"**/*.{css,scss,less,vue}\\\" --fix\",\n    \"bootstrap\": \"npm install && npm run prepare\",\n    \"common:cleanup\": \"rimraf node_modules && rimraf npm-lock.yaml\",\n    \"prepare\": \"husky\"\n  },\n  \"dependencies\": {\n    \"@codemirror/state\": \"^6.5.2\",\n    \"@codemirror/view\": \"^6.38.1\",\n    \"@vue/reactivity\": \"^3.4.24\",\n    \"@vueuse/core\": \"^9.13.0\",\n    \"axios\": \"^1.3.4\",\n    \"buffer\": \"^6.0.3\",\n    \"codemirror\": \"^6.0.2\",\n    \"cross-env\": \"^7.0.3\",\n    \"element-plus\": \"^2.9.5\",\n    \"hub-ui-x\": \"^0.0.20\",\n    \"pinia\": \"^2.3.1\",\n    \"sortablejs\": \"^1.15.0\",\n    \"vue\": \"~3.5.11\",\n    \"vue-codemirror\": \"^6.1.1\",\n    \"vue-cropper\": \"^1.0.9\",\n    \"vue-i18n\": \"^9.2.2\",\n    \"vue-router\": \"^4.2.5\"\n  },\n  \"devDependencies\": {\n    \"@commitlint/cli\": \"^17.4.4\",\n    \"@commitlint/config-conventional\": \"^17.4.4\",\n    \"@rushstack/eslint-patch\": \"^1.12.0\",\n    \"@types/node\": \"^18.14.6\",\n    \"@vitejs/plugin-vue\": \"^4.4.0\",\n    \"@vue/eslint-config-prettier\": \"^9.0.0\",\n    \"@vue/eslint-config-typescript\": \"^12.0.0\",\n    \"autoprefixer\": \"^10.4.13\",\n    \"eslint\": \"^8.35.0\",\n    \"eslint-config-airbnb-base\": \"^15.0.0\",\n    \"eslint-plugin-import\": \"^2.32.0\",\n    \"eslint-plugin-vue\": \"^9.20.1\",\n    \"husky\": \"^9.1.7\",\n    \"lint-staged\": \"^16.1.2\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"postcss\": \"^8.4.21\",\n    \"postcss-scss\": \"^4.0.9\",\n    \"prettier\": \"^3.6.2\",\n    \"rollup-plugin-visualizer\": \"^5.11.0\",\n    \"sass\": \"^1.62.1\",\n    \"stylelint\": \"^16.21.0\",\n    \"stylelint-config-html\": \"^1.1.0\",\n    \"stylelint-config-recommended-vue\": \"^1.6.1\",\n    \"stylelint-config-standard\": \"^38.0.0\",\n    \"tailwindcss\": \"^3.2.7\",\n    \"typescript\": \"~4.9.5\",\n    \"unplugin-auto-import\": \"^0.15.3\",\n    \"unplugin-icons\": \"^0.18.1\",\n    \"unplugin-vue-components\": \"^0.24.1\",\n    \"vite\": \"^4.4.11\",\n    \"vite-plugin-pwa\": \"^0.14.4\",\n    \"vite-plugin-svg-icons\": \"^2.0.1\",\n    \"vite-plugin-top-level-await\": \"^1.4.4\",\n    \"vite-plugin-wasm\": \"^3.3.0\",\n    \"vue-tsc\": \"^1.8.16\"\n  },\n  \"jscpd\": {\n    \"threshold\": 1,\n    \"reporters\": [\n      \"html\",\n      \"console\"\n    ],\n    \"ignore\": [\n      \".git\",\n      \"node_modules\",\n      \"public\",\n      \".husky\"\n    ],\n    \"absolute\": true\n  }\n}\n"
  },
  {
    "path": "web/console/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {}\n  }\n}\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/anchor/anchor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n        <title></title>\n        <style type=\"text/css\">\n            *{color: #838383;margin: 0;padding: 0}\n            html,body {font-size: 12px;overflow: hidden; }\n            .content{padding:5px 0 0 15px;}\n            input{width:210px;height:21px;line-height:21px;margin-left: 4px;}\n        </style>\n    </head>\n    <body>\n        <div class=\"content\">\n            <span><var id=\"lang_input_anchorName\"></var></span><input id=\"anchorName\"  value=\"\" />\n        </div>\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n        <script type=\"text/javascript\">\n            var anchorInput = $G('anchorName'),\n                node = editor.selection.getRange().getClosedNode();\n            if(node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))){\n                anchorInput.value = node;\n            }\n            anchorInput.onkeydown = function(evt){\n                evt = evt || window.event;\n                if(evt.keyCode == 13){\n                    editor.execCommand('anchor', anchorInput.value);\n                    dialog.close();\n                    domUtils.preventDefault(evt)\n                }\n            };\n            dialog.onok = function (){\n                editor.execCommand('anchor', anchorInput.value);\n                dialog.close();\n            };\n            $focus(anchorInput);\n        </script>\n    </body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/attachment/attachment.css",
    "content": "@charset \"utf-8\";\n/* dialog样式 */\n.wrapper {\n    zoom: 1;\n    width: 630px;\n    *width: 626px;\n    height: 380px;\n    margin: 0 auto;\n    padding: 10px;\n    position: relative;\n    font-family: sans-serif;\n}\n\n/*tab样式框大小*/\n.tabhead {\n    float:left;\n}\n.tabbody {\n    width: 100%;\n    height: 346px;\n    position: relative;\n    clear: both;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n\n.tabbody .panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n}\n\n/* 上传附件 */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n    clip: auto;\n}\n\n#upload .queueList {\n    margin: 0;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 172px;\n    padding-top: 150px;\n    text-align: center;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top:0;\n    *top: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 300px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 9px 0 0 9px;\n    *margin: 6px 0 0 6px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n#upload .filelist li p.imgWrap.notimage {\n    margin-top: 0;\n    width: 111px;\n    height: 111px;\n    border: 1px #eeeeee solid;\n}\n#upload .filelist li p.imgWrap.notimage i.file-preview {\n    margin-top: 15px;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display:none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background-image: url(./images/success.gif) \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n#upload .filelist li.filePickerBlock div.webuploader-pick  {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display:none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display:none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused{\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover{\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter:alpha(opacity=60);\n    -moz-opacity:0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n\n/* 图片管理样式 */\n#online {\n    width: 100%;\n    height: 336px;\n    padding: 10px 0 0 0;\n}\n#online #fileList{\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n}\n#online ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n#online li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 0 0 9px 9px;\n    *margin: 0 0 6px 6px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n#online li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width:0;\n    height:0;\n    margin: 0;\n    padding: 0;\n}\n#online li img {\n    cursor: pointer;\n}\n#online li div.file-wrapper {\n    cursor: pointer;\n    position: absolute;\n    display: block;\n    width: 111px;\n    height: 111px;\n    border: 1px solid #eee;\n    background: url(\"./images/bg.png\") repeat;\n}\n#online li div span.file-title{\n    display: block;\n    padding: 0 3px;\n    margin: 3px 0 0 0;\n    font-size: 12px;\n    height: 15px;\n    color: #555555;\n    text-align: center;\n    width: 107px;\n    white-space: nowrap;\n    word-break: break-all;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n#online li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n#online li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n#online li.selected .icon {\n    background-image: url(images/success.png);\n    background-image: url(images/success.gif) \\9;\n    background-position: 75px 75px;\n}\n#online li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}\n\n\n/* 在线文件的文件预览图标 */\ni.file-preview {\n    display: block;\n    margin: 10px auto;\n    width: 70px;\n    height: 70px;\n    background-image: url(\"./images/file-icons.png\");\n    background-image: url(\"./images/file-icons.gif\") \\9;\n    background-position: -140px center;\n    background-repeat: no-repeat;\n}\ni.file-preview.file-type-dir{\n    background-position: 0 center;\n}\ni.file-preview.file-type-file{\n    background-position: -140px center;\n}\ni.file-preview.file-type-filelist{\n    background-position: -210px center;\n}\ni.file-preview.file-type-zip,\ni.file-preview.file-type-rar,\ni.file-preview.file-type-7z,\ni.file-preview.file-type-tar,\ni.file-preview.file-type-gz,\ni.file-preview.file-type-bz2{\n    background-position: -280px center;\n}\ni.file-preview.file-type-xls,\ni.file-preview.file-type-xlsx{\n    background-position: -350px center;\n}\ni.file-preview.file-type-doc,\ni.file-preview.file-type-docx{\n    background-position: -420px center;\n}\ni.file-preview.file-type-ppt,\ni.file-preview.file-type-pptx{\n    background-position: -490px center;\n}\ni.file-preview.file-type-vsd{\n    background-position: -560px center;\n}\ni.file-preview.file-type-pdf{\n    background-position: -630px center;\n}\ni.file-preview.file-type-txt,\ni.file-preview.file-type-md,\ni.file-preview.file-type-json,\ni.file-preview.file-type-htm,\ni.file-preview.file-type-xml,\ni.file-preview.file-type-html,\ni.file-preview.file-type-js,\ni.file-preview.file-type-css,\ni.file-preview.file-type-php,\ni.file-preview.file-type-jsp,\ni.file-preview.file-type-asp{\n    background-position: -700px center;\n}\ni.file-preview.file-type-apk{\n    background-position: -770px center;\n}\ni.file-preview.file-type-exe{\n    background-position: -840px center;\n}\ni.file-preview.file-type-ipa{\n    background-position: -910px center;\n}\ni.file-preview.file-type-mp4,\ni.file-preview.file-type-swf,\ni.file-preview.file-type-mkv,\ni.file-preview.file-type-avi,\ni.file-preview.file-type-flv,\ni.file-preview.file-type-mov,\ni.file-preview.file-type-mpg,\ni.file-preview.file-type-mpeg,\ni.file-preview.file-type-ogv,\ni.file-preview.file-type-webm,\ni.file-preview.file-type-rm,\ni.file-preview.file-type-rmvb{\n    background-position: -980px center;\n}\ni.file-preview.file-type-ogg,\ni.file-preview.file-type-wav,\ni.file-preview.file-type-wmv,\ni.file-preview.file-type-mid,\ni.file-preview.file-type-mp3{\n    background-position: -1050px center;\n}\ni.file-preview.file-type-jpg,\ni.file-preview.file-type-jpeg,\ni.file-preview.file-type-gif,\ni.file-preview.file-type-bmp,\ni.file-preview.file-type-png,\ni.file-preview.file-type-psd{\n    background-position: -140px center;\n}\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/attachment/attachment.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.min.js\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css\">\n\n    <!-- attachment dialog -->\n    <link rel=\"stylesheet\" href=\"attachment.css\" type=\"text/css\" />\n</head>\n<body>\n\n    <div class=\"wrapper\">\n        <div id=\"tabhead\" class=\"tabhead\">\n            <span class=\"tab focus\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n            <span class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n        </div>\n        <div id=\"tabbody\" class=\"tabbody\">\n            <!-- 上传图片 -->\n            <div id=\"upload\" class=\"panel focus\">\n                <div id=\"queueList\" class=\"queueList\">\n                    <div class=\"statusBar element-invisible\">\n                        <div class=\"progress\">\n                            <span class=\"text\">0%</span>\n                            <span class=\"percentage\"></span>\n                        </div><div class=\"info\"></div>\n                        <div class=\"btns\">\n                            <div id=\"filePickerBtn\"></div>\n                            <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                        </div>\n                    </div>\n                    <div id=\"dndArea\" class=\"placeholder\">\n                        <div class=\"filePickerContainer\">\n                            <div id=\"filePickerReady\"></div>\n                        </div>\n                    </div>\n                    <ul class=\"filelist element-invisible\">\n                        <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                    </ul>\n                </div>\n            </div>\n\n            <!-- 在线图片 -->\n            <div id=\"online\" class=\"panel\">\n                <div id=\"fileList\"><var id=\"lang_imgLoading\"></var></div>\n            </div>\n\n        </div>\n    </div>\n    <script type=\"text/javascript\" src=\"attachment.js\"></script>\n\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/attachment/attachment.js",
    "content": "/**\n * User: Jinqn\n * Date: 14-04-08\n * Time: 下午16:34\n * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片\n */\n\n;(function () {\n  var uploadFile, onlineFile\n\n  window.onload = function () {\n    initTabs()\n    initButtons()\n  }\n\n  /* 初始化tab标签 */\n  function initTabs() {\n    var tabs = $G('tabhead').children\n    for (var i = 0; i < tabs.length; i++) {\n      domUtils.on(tabs[i], 'click', function (e) {\n        var target = e.target || e.srcElement\n        setTabFocus(target.getAttribute('data-content-id'))\n      })\n    }\n\n    setTabFocus('upload')\n  }\n\n  /* 初始化tabbody */\n  function setTabFocus(id) {\n    if (!id) return\n    var i,\n      bodyId,\n      tabs = $G('tabhead').children\n    for (i = 0; i < tabs.length; i++) {\n      bodyId = tabs[i].getAttribute('data-content-id')\n      if (bodyId == id) {\n        domUtils.addClass(tabs[i], 'focus')\n        domUtils.addClass($G(bodyId), 'focus')\n      } else {\n        domUtils.removeClasses(tabs[i], 'focus')\n        domUtils.removeClasses($G(bodyId), 'focus')\n      }\n    }\n    switch (id) {\n      case 'upload':\n        uploadFile = uploadFile || new UploadFile('queueList')\n        break\n      case 'online':\n        onlineFile = onlineFile || new OnlineFile('fileList')\n        break\n    }\n  }\n\n  /* 初始化onok事件 */\n  function initButtons() {\n    dialog.onok = function () {\n      var list = [],\n        id,\n        tabs = $G('tabhead').children\n      for (var i = 0; i < tabs.length; i++) {\n        if (domUtils.hasClass(tabs[i], 'focus')) {\n          id = tabs[i].getAttribute('data-content-id')\n          break\n        }\n      }\n\n      switch (id) {\n        case 'upload':\n          list = uploadFile.getInsertList()\n          var count = uploadFile.getQueueCount()\n          if (count) {\n            $('.info', '#queueList').html(\n              '<span style=\"color:red;\">' +\n                '还有2个未上传文件'.replace(/[\\d]/, count) +\n                '</span>'\n            )\n            return false\n          }\n          break\n        case 'online':\n          list = onlineFile.getInsertList()\n          break\n      }\n\n      editor.execCommand('insertfile', list)\n    }\n  }\n\n  /* 上传附件 */\n  function UploadFile(target) {\n    this.$wrap = target.constructor == String ? $('#' + target) : $(target)\n    this.init()\n  }\n  UploadFile.prototype = {\n    init: function () {\n      this.fileList = []\n      this.initContainer()\n      this.initUploader()\n    },\n    initContainer: function () {\n      this.$queue = this.$wrap.find('.filelist')\n    },\n    /* 初始化容器 */\n    initUploader: function () {\n      var _this = this,\n        $ = jQuery, // just in case. Make sure it's not an other libaray.\n        $wrap = _this.$wrap,\n        // 图片容器\n        $queue = $wrap.find('.filelist'),\n        // 状态栏，包括进度和控制按钮\n        $statusBar = $wrap.find('.statusBar'),\n        // 文件总体选择信息。\n        $info = $statusBar.find('.info'),\n        // 上传按钮\n        $upload = $wrap.find('.uploadBtn'),\n        // 上传按钮\n        $filePickerBtn = $wrap.find('.filePickerBtn'),\n        // 上传按钮\n        $filePickerBlock = $wrap.find('.filePickerBlock'),\n        // 没选择文件之前的内容。\n        $placeHolder = $wrap.find('.placeholder'),\n        // 总体进度条\n        $progress = $statusBar.find('.progress').hide(),\n        // 添加的文件数量\n        fileCount = 0,\n        // 添加的文件总大小\n        fileSize = 0,\n        // 优化retina, 在retina下这个值是2\n        ratio = window.devicePixelRatio || 1,\n        // 缩略图大小\n        thumbnailWidth = 113 * ratio,\n        thumbnailHeight = 113 * ratio,\n        // 可能有pedding, ready, uploading, confirm, done.\n        state = '',\n        // 所有文件的进度信息，key为file id\n        percentages = {},\n        supportTransition = (function () {\n          var s = document.createElement('p').style,\n            r =\n              'transition' in s ||\n              'WebkitTransition' in s ||\n              'MozTransition' in s ||\n              'msTransition' in s ||\n              'OTransition' in s\n          s = null\n          return r\n        })(),\n        // WebUploader实例\n        uploader,\n        actionUrl = editor.getActionUrl(editor.getOpt('fileActionName')),\n        fileMaxSize = editor.getOpt('fileMaxSize'),\n        acceptExtensions = (editor.getOpt('fileAllowFiles') || [])\n          .join('')\n          .replace(/\\./g, ',')\n          .replace(/^[,]/, '')\n\n      if (!WebUploader.Uploader.support()) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorNotSupport))\n          .hide()\n        return\n      } else if (!editor.getOpt('fileActionName')) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorLoadConfig))\n          .hide()\n        return\n      }\n\n      uploader = _this.uploader = WebUploader.create({\n        pick: {\n          id: '#filePickerReady',\n          label: lang.uploadSelectFile,\n        },\n        swf: '../../third-party/webuploader/Uploader.swf',\n        server: actionUrl,\n        fileVal: editor.getOpt('fileFieldName'),\n        duplicate: true,\n        fileSingleSizeLimit: fileMaxSize,\n        compress: false,\n      })\n      uploader.addButton({\n        id: '#filePickerBlock',\n      })\n      uploader.addButton({\n        id: '#filePickerBtn',\n        label: lang.uploadAddFile,\n      })\n\n      setState('pedding')\n\n      // 当有文件添加进来时执行，负责view的创建\n      function addFile(file) {\n        var $li = $(\n            '<li id=\"' +\n              file.id +\n              '\">' +\n              '<p class=\"title\">' +\n              file.name +\n              '</p>' +\n              '<p class=\"imgWrap\"></p>' +\n              '<p class=\"progress\"><span></span></p>' +\n              '</li>'\n          ),\n          $btns = $(\n            '<div class=\"file-panel\">' +\n              '<span class=\"cancel\">' +\n              lang.uploadDelete +\n              '</span>' +\n              '<span class=\"rotateRight\">' +\n              lang.uploadTurnRight +\n              '</span>' +\n              '<span class=\"rotateLeft\">' +\n              lang.uploadTurnLeft +\n              '</span></div>'\n          ).appendTo($li),\n          $prgress = $li.find('p.progress span'),\n          $wrap = $li.find('p.imgWrap'),\n          $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n          showError = function (code) {\n            switch (code) {\n              case 'exceed_size':\n                text = lang.errorExceedSize\n                break\n              case 'interrupt':\n                text = lang.errorInterrupt\n                break\n              case 'http':\n                text = lang.errorHttp\n                break\n              case 'not_allow_type':\n                text = lang.errorFileType\n                break\n              default:\n                text = lang.errorUploadRetry\n                break\n            }\n            $info.text(text).show()\n          }\n\n        if (file.getStatus() === 'invalid') {\n          showError(file.statusText)\n        } else {\n          $wrap.text(lang.uploadPreview)\n          if (\n            '|png|jpg|jpeg|bmp|gif|'.indexOf(\n              '|' + file.ext.toLowerCase() + '|'\n            ) == -1\n          ) {\n            $wrap\n              .empty()\n              .addClass('notimage')\n              .append(\n                '<i class=\"file-preview file-type-' +\n                  file.ext.toLowerCase() +\n                  '\"></i>' +\n                  '<span class=\"file-title\" title=\"' +\n                  file.name +\n                  '\">' +\n                  file.name +\n                  '</span>'\n              )\n          } else {\n            if (browser.ie && browser.version <= 7) {\n              $wrap.text(lang.uploadNoPreview)\n            } else {\n              uploader.makeThumb(\n                file,\n                function (error, src) {\n                  if (error || !src) {\n                    $wrap.text(lang.uploadNoPreview)\n                  } else {\n                    var $img = $('<img src=\"' + src + '\">')\n                    $wrap.empty().append($img)\n                    $img.on('error', function () {\n                      $wrap.text(lang.uploadNoPreview)\n                    })\n                  }\n                },\n                thumbnailWidth,\n                thumbnailHeight\n              )\n            }\n          }\n          percentages[file.id] = [file.size, 0]\n          file.rotation = 0\n\n          /* 检查文件格式 */\n          if (\n            !file.ext ||\n            acceptExtensions.indexOf(file.ext.toLowerCase()) == -1\n          ) {\n            showError('not_allow_type')\n            uploader.removeFile(file)\n          }\n        }\n\n        file.on('statuschange', function (cur, prev) {\n          if (prev === 'progress') {\n            $prgress.hide().width(0)\n          } else if (prev === 'queued') {\n            $li.off('mouseenter mouseleave')\n            $btns.remove()\n          }\n          // 成功\n          if (cur === 'error' || cur === 'invalid') {\n            showError(file.statusText)\n            percentages[file.id][1] = 1\n          } else if (cur === 'interrupt') {\n            showError('interrupt')\n          } else if (cur === 'queued') {\n            percentages[file.id][1] = 0\n          } else if (cur === 'progress') {\n            $info.hide()\n            $prgress.css('display', 'block')\n          } else if (cur === 'complete') {\n          }\n\n          $li.removeClass('state-' + prev).addClass('state-' + cur)\n        })\n\n        $li.on('mouseenter', function () {\n          $btns.stop().animate({ height: 30 })\n        })\n        $li.on('mouseleave', function () {\n          $btns.stop().animate({ height: 0 })\n        })\n\n        $btns.on('click', 'span', function () {\n          var index = $(this).index(),\n            deg\n\n          switch (index) {\n            case 0:\n              uploader.removeFile(file)\n              return\n            case 1:\n              file.rotation += 90\n              break\n            case 2:\n              file.rotation -= 90\n              break\n          }\n\n          if (supportTransition) {\n            deg = 'rotate(' + file.rotation + 'deg)'\n            $wrap.css({\n              '-webkit-transform': deg,\n              '-mos-transform': deg,\n              '-o-transform': deg,\n              transform: deg,\n            })\n          } else {\n            $wrap.css(\n              'filter',\n              'progid:DXImageTransform.Microsoft.BasicImage(rotation=' +\n                (~~(((file.rotation / 90) % 4) + 4) % 4) +\n                ')'\n            )\n          }\n        })\n\n        $li.insertBefore($filePickerBlock)\n      }\n\n      // 负责view的销毁\n      function removeFile(file) {\n        var $li = $('#' + file.id)\n        delete percentages[file.id]\n        updateTotalProgress()\n        $li.off().find('.file-panel').off().end().remove()\n      }\n\n      function updateTotalProgress() {\n        var loaded = 0,\n          total = 0,\n          spans = $progress.children(),\n          percent\n\n        $.each(percentages, function (k, v) {\n          total += v[0]\n          loaded += v[0] * v[1]\n        })\n\n        percent = total ? loaded / total : 0\n\n        spans.eq(0).text(Math.round(percent * 100) + '%')\n        spans.eq(1).css('width', Math.round(percent * 100) + '%')\n        updateStatus()\n      }\n\n      function setState(val, files) {\n        if (val != state) {\n          var stats = uploader.getStats()\n\n          $upload.removeClass('state-' + state)\n          $upload.addClass('state-' + val)\n\n          switch (val) {\n            /* 未选择文件 */\n            case 'pedding':\n              $queue.addClass('element-invisible')\n              $statusBar.addClass('element-invisible')\n              $placeHolder.removeClass('element-invisible')\n              $progress.hide()\n              $info.hide()\n              uploader.refresh()\n              break\n\n            /* 可以开始上传 */\n            case 'ready':\n              $placeHolder.addClass('element-invisible')\n              $queue.removeClass('element-invisible')\n              $statusBar.removeClass('element-invisible')\n              $progress.hide()\n              $info.show()\n              $upload.text(lang.uploadStart)\n              uploader.refresh()\n              break\n\n            /* 上传中 */\n            case 'uploading':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadPause)\n              break\n\n            /* 暂停上传 */\n            case 'paused':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadContinue)\n              break\n\n            case 'confirm':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadStart)\n\n              stats = uploader.getStats()\n              if (stats.successNum && !stats.uploadFailNum) {\n                setState('finish')\n                return\n              }\n              break\n\n            case 'finish':\n              $progress.hide()\n              $info.show()\n              if (stats.uploadFailNum) {\n                $upload.text(lang.uploadRetry)\n              } else {\n                $upload.text(lang.uploadStart)\n              }\n              break\n          }\n\n          state = val\n          updateStatus()\n        }\n\n        if (!_this.getQueueCount()) {\n          $upload.addClass('disabled')\n        } else {\n          $upload.removeClass('disabled')\n        }\n      }\n\n      function updateStatus() {\n        var text = '',\n          stats\n\n        if (state === 'ready') {\n          text = lang.updateStatusReady\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n        } else if (state === 'confirm') {\n          stats = uploader.getStats()\n          if (stats.uploadFailNum) {\n            text = lang.updateStatusConfirm\n              .replace('_', stats.successNum)\n              .replace('_', stats.successNum)\n          }\n        } else {\n          stats = uploader.getStats()\n          text = lang.updateStatusFinish\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n            .replace('_', stats.successNum)\n\n          if (stats.uploadFailNum) {\n            text += lang.updateStatusError.replace('_', stats.uploadFailNum)\n          }\n        }\n\n        $info.html(text)\n      }\n\n      uploader.on('fileQueued', function (file) {\n        if (\n          file.ext &&\n          acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 &&\n          file.size <= fileMaxSize\n        ) {\n          fileCount++\n          fileSize += file.size\n        }\n\n        if (fileCount === 1) {\n          $placeHolder.addClass('element-invisible')\n          $statusBar.show()\n        }\n\n        addFile(file)\n      })\n\n      uploader.on('fileDequeued', function (file) {\n        if (\n          file.ext &&\n          acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 &&\n          file.size <= fileMaxSize &&\n          fileCount > 0\n        ) {\n          fileCount--\n          fileSize -= file.size\n        }\n\n        removeFile(file)\n        updateTotalProgress()\n      })\n\n      uploader.on('filesQueued', function (file) {\n        if (\n          !uploader.isInProgress() &&\n          (state == 'pedding' ||\n            state == 'finish' ||\n            state == 'confirm' ||\n            state == 'ready')\n        ) {\n          setState('ready')\n        }\n        updateTotalProgress()\n      })\n\n      uploader.on('all', function (type, files) {\n        switch (type) {\n          case 'uploadFinished':\n            setState('confirm', files)\n            break\n          case 'startUpload':\n            /* 添加额外的GET参数 */\n            var params =\n                utils.serializeParam(editor.queryCommandValue('serverparam')) ||\n                '',\n              url = utils.formatUrl(\n                actionUrl +\n                  (actionUrl.indexOf('?') == -1 ? '?' : '&') +\n                  'encode=utf-8&' +\n                  params\n              )\n            uploader.option('server', url)\n            setState('uploading', files)\n            break\n          case 'stopUpload':\n            setState('paused', files)\n            break\n        }\n      })\n\n      uploader.on('uploadBeforeSend', function (file, data, header) {\n        //这里可以通过data对象添加POST参数\n        if (actionUrl.toLowerCase().indexOf('jsp') != -1) {\n          header['X_Requested_With'] = 'XMLHttpRequest'\n        }\n      })\n\n      uploader.on('uploadProgress', function (file, percentage) {\n        var $li = $('#' + file.id),\n          $percent = $li.find('.progress span')\n\n        $percent.css('width', percentage * 100 + '%')\n        percentages[file.id][1] = percentage\n        updateTotalProgress()\n      })\n\n      uploader.on('uploadSuccess', function (file, ret) {\n        var $file = $('#' + file.id)\n        try {\n          var responseText = ret._raw || ret,\n            json = utils.str2json(responseText)\n          if (json.state == 'SUCCESS') {\n            _this.fileList.push(json)\n            $file.append('<span class=\"success\"></span>')\n          } else {\n            $file.find('.error').text(json.state).show()\n          }\n        } catch (e) {\n          $file.find('.error').text(lang.errorServerUpload).show()\n        }\n      })\n\n      uploader.on('uploadError', function (file, code) {})\n      uploader.on('error', function (code, file) {\n        if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {\n          addFile(file)\n        }\n      })\n      uploader.on('uploadComplete', function (file, ret) {})\n\n      $upload.on('click', function () {\n        if ($(this).hasClass('disabled')) {\n          return false\n        }\n\n        if (state === 'ready') {\n          uploader.upload()\n        } else if (state === 'paused') {\n          uploader.upload()\n        } else if (state === 'uploading') {\n          uploader.stop()\n        }\n      })\n\n      $upload.addClass('state-' + state)\n      updateTotalProgress()\n    },\n    getQueueCount: function () {\n      var file,\n        i,\n        status,\n        readyFile = 0,\n        files = this.uploader.getFiles()\n      for (i = 0; (file = files[i++]); ) {\n        status = file.getStatus()\n        if (status == 'queued' || status == 'uploading' || status == 'progress')\n          readyFile++\n      }\n      return readyFile\n    },\n    getInsertList: function () {\n      var i,\n        link,\n        data,\n        list = [],\n        prefix = editor.getOpt('fileUrlPrefix')\n      for (i = 0; i < this.fileList.length; i++) {\n        data = this.fileList[i]\n        link = data.url\n        list.push({\n          title: data.original || link.substr(link.lastIndexOf('/') + 1),\n          url: prefix + link,\n        })\n      }\n      return list\n    },\n  }\n\n  /* 在线附件 */\n  function OnlineFile(target) {\n    this.container = utils.isString(target)\n      ? document.getElementById(target)\n      : target\n    this.init()\n  }\n  OnlineFile.prototype = {\n    init: function () {\n      this.initContainer()\n      this.initEvents()\n      this.initData()\n    },\n    /* 初始化容器 */\n    initContainer: function () {\n      this.container.innerHTML = ''\n      this.list = document.createElement('ul')\n      this.clearFloat = document.createElement('li')\n\n      domUtils.addClass(this.list, 'list')\n      domUtils.addClass(this.clearFloat, 'clearFloat')\n\n      this.list.appendChild(this.clearFloat)\n      this.container.appendChild(this.list)\n    },\n    /* 初始化滚动事件,滚动到地步自动拉取数据 */\n    initEvents: function () {\n      var _this = this\n\n      /* 滚动拉取图片 */\n      domUtils.on($G('fileList'), 'scroll', function (e) {\n        var panel = this\n        if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n          _this.getFileData()\n        }\n      })\n      /* 选中图片 */\n      domUtils.on(this.list, 'click', function (e) {\n        var target = e.target || e.srcElement,\n          li = target.parentNode\n\n        if (li.tagName.toLowerCase() == 'li') {\n          if (domUtils.hasClass(li, 'selected')) {\n            domUtils.removeClasses(li, 'selected')\n          } else {\n            domUtils.addClass(li, 'selected')\n          }\n        }\n      })\n    },\n    /* 初始化第一次的数据 */\n    initData: function () {\n      /* 拉取数据需要使用的值 */\n      this.state = 0\n      this.listSize = editor.getOpt('fileManagerListSize')\n      this.listIndex = 0\n      this.listEnd = false\n\n      /* 第一次拉取数据 */\n      this.getFileData()\n    },\n    /* 向后台拉取图片列表数据 */\n    getFileData: function () {\n      var _this = this\n\n      if (!_this.listEnd && !this.isLoadingData) {\n        this.isLoadingData = true\n        ajax.request(\n          editor.getActionUrl(editor.getOpt('fileManagerActionName')),\n          {\n            timeout: 100000,\n            data: utils.extend(\n              {\n                start: this.listIndex,\n                size: this.listSize,\n              },\n              editor.queryCommandValue('serverparam')\n            ),\n            method: 'get',\n            onsuccess: function (r) {\n              try {\n                var json = eval('(' + r.responseText + ')')\n                if (json.state == 'SUCCESS') {\n                  _this.pushData(json.list)\n                  _this.listIndex =\n                    parseInt(json.start) + parseInt(json.list.length)\n                  if (_this.listIndex >= json.total) {\n                    _this.listEnd = true\n                  }\n                  _this.isLoadingData = false\n                }\n              } catch (e) {\n                if (r.responseText.indexOf('ue_separate_ue') != -1) {\n                  var list = r.responseText.split(r.responseText)\n                  _this.pushData(list)\n                  _this.listIndex = parseInt(list.length)\n                  _this.listEnd = true\n                  _this.isLoadingData = false\n                }\n              }\n            },\n            onerror: function () {\n              _this.isLoadingData = false\n            },\n          }\n        )\n      }\n    },\n    /* 添加图片到列表界面上 */\n    pushData: function (list) {\n      var i,\n        item,\n        img,\n        filetype,\n        preview,\n        icon,\n        _this = this,\n        urlPrefix = editor.getOpt('fileManagerUrlPrefix')\n      for (i = 0; i < list.length; i++) {\n        if (list[i] && list[i].url) {\n          item = document.createElement('li')\n          icon = document.createElement('span')\n          filetype = list[i].url.substr(list[i].url.lastIndexOf('.') + 1)\n\n          if ('png|jpg|jpeg|gif|bmp'.indexOf(filetype) != -1) {\n            preview = document.createElement('img')\n            domUtils.on(\n              preview,\n              'load',\n              (function (image) {\n                return function () {\n                  _this.scale(\n                    image,\n                    image.parentNode.offsetWidth,\n                    image.parentNode.offsetHeight\n                  )\n                }\n              })(preview)\n            )\n            preview.width = 113\n            preview.setAttribute(\n              'src',\n              urlPrefix +\n                list[i].url +\n                (list[i].url.indexOf('?') == -1 ? '?noCache=' : '&noCache=') +\n                (+new Date()).toString(36)\n            )\n          } else {\n            var ic = document.createElement('i'),\n              textSpan = document.createElement('span')\n            textSpan.innerHTML = list[i].url.substr(\n              list[i].url.lastIndexOf('/') + 1\n            )\n            preview = document.createElement('div')\n            preview.appendChild(ic)\n            preview.appendChild(textSpan)\n            domUtils.addClass(preview, 'file-wrapper')\n            domUtils.addClass(textSpan, 'file-title')\n            domUtils.addClass(ic, 'file-type-' + filetype)\n            domUtils.addClass(ic, 'file-preview')\n          }\n          domUtils.addClass(icon, 'icon')\n          item.setAttribute('data-url', urlPrefix + list[i].url)\n          if (list[i].original) {\n            item.setAttribute('data-title', list[i].original)\n          }\n\n          item.appendChild(preview)\n          item.appendChild(icon)\n          this.list.insertBefore(item, this.clearFloat)\n        }\n      }\n    },\n    /* 改变图片大小 */\n    scale: function (img, w, h, type) {\n      var ow = img.width,\n        oh = img.height\n\n      if (type == 'justify') {\n        if (ow >= oh) {\n          img.width = w\n          img.height = (h * oh) / ow\n          img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'\n        } else {\n          img.width = (w * ow) / oh\n          img.height = h\n          img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'\n        }\n      } else {\n        if (ow >= oh) {\n          img.width = (w * ow) / oh\n          img.height = h\n          img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'\n        } else {\n          img.width = w\n          img.height = (h * oh) / ow\n          img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'\n        }\n      }\n    },\n    getInsertList: function () {\n      var i,\n        lis = this.list.children,\n        list = []\n      for (i = 0; i < lis.length; i++) {\n        if (domUtils.hasClass(lis[i], 'selected')) {\n          var url = lis[i].getAttribute('data-url')\n          var title =\n            lis[i].getAttribute('data-title') ||\n            url.substr(url.lastIndexOf('/') + 1)\n          list.push({\n            title: title,\n            url: url,\n          })\n        }\n      }\n      return list\n    },\n  }\n})()\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/background/background.css",
    "content": ".wrapper{ width: 424px;margin: 10px auto; zoom:1;position: relative}\n.tabbody{height:225px;}\n.tabbody .panel { position: absolute;width:100%; height:100%;background: #fff; display: none;}\n.tabbody .focus { display: block;}\n\nbody{font-size: 12px;color: #888;overflow: hidden;}\ninput,label{vertical-align:middle}\n.clear{clear: both;}\n.pl{padding-left: 18px;padding-left: 23px\\9;}\n\n#imageList {width: 420px;height: 215px;margin-top: 10px;overflow: hidden;overflow-y: auto;}\n#imageList div {float: left;width: 100px;height: 95px;margin: 5px 10px;}\n#imageList img {cursor: pointer;border: 2px solid white;}\n\n.bgarea{margin: 10px;padding: 5px;height: 84%;border: 1px solid #A8A297;}\n.content div{margin: 10px 0 10px 5px;}\n.content .iptradio{margin: 0px 5px 5px 0px;}\n.txt{width:280px;}\n\n.wrapcolor{height: 19px;}\ndiv.color{float: left;margin: 0;}\n#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;margin: 0;float: left;}\ndiv.alignment,#custom{margin-left: 23px;margin-left: 28px\\9;}\n#custom input{height: 15px;min-height: 15px;width:20px;}\n#repeatType{width:100px;}\n\n\n/* 图片管理样式 */\n#imgManager {\n    width: 100%;\n    height: 225px;\n}\n#imgManager #imageList{\n    width: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n}\n#imgManager ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n#imgManager li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 9px 0 0 19px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n#imgManager li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width:0;\n    height:0;\n    margin: 0;\n    padding: 0;\n}\n#imgManager li img {\n    cursor: pointer;\n}\n#imgManager li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n#imgManager li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n#imgManager li.selected .icon {\n    background-image: url(images/success.png);\n    background-position: 75px 75px;\n}\n#imgManager li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}"
  },
  {
    "path": "web/console/public/UEditor/dialogs/background/background.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"background.css\">\n</head>\n<body>\n    <div id=\"bg_container\" class=\"wrapper\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span class=\"focus\" data-content-id=\"normal\"><var id=\"lang_background_normal\"></var></span>\n            <span class=\"\" data-content-id=\"imgManager\"><var id=\"lang_background_local\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"normal\" class=\"panel focus\">\n                <fieldset class=\"bgarea\">\n                    <legend><var id=\"lang_background_set\"></var></legend>\n                    <div class=\"content\">\n                        <div>\n                            <label><input id=\"nocolorRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"none\" checked=\"checked\"><var id=\"lang_background_none\"></var></label>\n                            <label><input id=\"coloredRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"color\"><var id=\"lang_background_colored\"></var></label>\n                        </div>\n                        <div class=\"wrapcolor pl\">\n                            <div class=\"color\">\n                                <var id=\"lang_background_color\"></var>:\n                            </div>\n                            <div id=\"colorPicker\"></div>\n                            <div class=\"clear\"></div>\n                        </div>\n                        <div class=\"wrapcolor pl\">\n                            <label><var id=\"lang_background_netimg\"></var>:</label><input class=\"txt\" type=\"text\" id=\"url\">\n                        </div>\n                        <div id=\"alignment\" class=\"alignment\">\n                            <var id=\"lang_background_align\"></var>:<select id=\"repeatType\">\n                                <option value=\"center\"></option>\n                                <option value=\"repeat-x\"></option>\n                                <option value=\"repeat-y\"></option>\n                                <option value=\"repeat\"></option>\n                                <option value=\"self\"></option>\n                            </select>\n                        </div>\n                        <div id=\"custom\" >\n                            <var id=\"lang_background_position\"></var>:x:<input type=\"text\" size=\"1\" id=\"x\" maxlength=\"4\" value=\"0\">px&nbsp;&nbsp;y:<input type=\"text\" size=\"1\" id=\"y\" maxlength=\"4\" value=\"0\">px\n                        </div>\n                    </div>\n                </fieldset>\n\n            </div>\n            <div id=\"imgManager\" class=\"panel\">\n                <div id=\"imageList\" style=\"\"></div>\n            </div>\n        </div>\n    </div>\n    <script type=\"text/javascript\" src=\"background.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/background/background.js",
    "content": "(function () {\n\n    var onlineImage,\n        backupStyle = editor.queryCommandValue('background');\n\n    window.onload = function () {\n        initTabs();\n        initColorSelector();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs(){\n        var tabs = $G('tabHeads').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var target = e.target || e.srcElement;\n                for (var j = 0; j < tabs.length; j++) {\n                    if(tabs[j] == target){\n                        tabs[j].className = \"focus\";\n                        var contentId = tabs[j].getAttribute('data-content-id');\n                        $G(contentId).style.display = \"block\";\n                        if(contentId == 'imgManager') {\n                            initImagePanel();\n                        }\n                    }else {\n                        tabs[j].className = \"\";\n                        $G(tabs[j].getAttribute('data-content-id')).style.display = \"none\";\n                    }\n                }\n            });\n        }\n    }\n\n    /* 初始化颜色设置 */\n    function initColorSelector () {\n        var obj = editor.queryCommandValue('background');\n        if (obj) {\n            var color = obj['background-color'],\n                repeat = obj['background-repeat'] || 'repeat',\n                image = obj['background-image'] || '',\n                position = obj['background-position'] || 'center center',\n                pos = position.split(' '),\n                x = parseInt(pos[0]) || 0,\n                y = parseInt(pos[1]) || 0;\n\n            if(repeat == 'no-repeat' && (x || y)) repeat = 'self';\n\n            image = image.match(/url[\\s]*\\(([^\\)]*)\\)/);\n            image = image ? image[1]:'';\n            updateFormState('colored', color, image, repeat, x, y);\n        } else {\n            updateFormState();\n        }\n\n        var updateHandler = function () {\n            updateFormState();\n            updateBackground();\n        }\n        domUtils.on($G('nocolorRadio'), 'click', updateBackground);\n        domUtils.on($G('coloredRadio'), 'click', updateHandler);\n        domUtils.on($G('url'), 'keyup', function(){\n            if($G('url').value && $G('alignment').style.display == \"none\") {\n                utils.each($G('repeatType').children, function(item){\n                    item.selected = ('repeat' == item.getAttribute('value') ? 'selected':false);\n                });\n            }\n            updateHandler();\n        });\n        domUtils.on($G('repeatType'), 'change', updateHandler);\n        domUtils.on($G('x'), 'keyup', updateBackground);\n        domUtils.on($G('y'), 'keyup', updateBackground);\n\n        initColorPicker();\n    }\n\n    /* 初始化颜色选择器 */\n    function initColorPicker() {\n        var me = editor,\n            cp = $G(\"colorPicker\");\n\n        /* 生成颜色选择器ui对象 */\n        var popup = new UE.ui.Popup({\n            content: new UE.ui.ColorPicker({\n                noColorText: me.getLang(\"clearColor\"),\n                editor: me,\n                onpickcolor: function (t, color) {\n                    updateFormState('colored', color);\n                    updateBackground();\n                    UE.ui.Popup.postHide();\n                },\n                onpicknocolor: function (t, color) {\n                    updateFormState('colored', 'transparent');\n                    updateBackground();\n                    UE.ui.Popup.postHide();\n                }\n            }),\n            editor: me,\n            onhide: function () {\n            }\n        });\n\n        /* 设置颜色选择器 */\n        domUtils.on(cp, \"click\", function () {\n            popup.showAnchor(this);\n        });\n        domUtils.on(document, 'mousedown', function (evt) {\n            var el = evt.target || evt.srcElement;\n            UE.ui.Popup.postHide(el);\n        });\n        domUtils.on(window, 'scroll', function () {\n            UE.ui.Popup.postHide();\n        });\n    }\n\n    /* 初始化在线图片列表 */\n    function initImagePanel() {\n        onlineImage = onlineImage || new OnlineImage('imageList');\n    }\n\n    /* 更新背景色设置面板 */\n    function updateFormState (radio, color, url, align, x, y) {\n        var nocolorRadio = $G('nocolorRadio'),\n            coloredRadio = $G('coloredRadio');\n\n        if(radio) {\n            nocolorRadio.checked = (radio == 'colored' ? false:'checked');\n            coloredRadio.checked = (radio == 'colored' ? 'checked':false);\n        }\n        if(color) {\n            domUtils.setStyle($G(\"colorPicker\"), \"background-color\", color);\n        }\n\n        if(url && /^\\//.test(url)) {\n            var a = document.createElement('a');\n            a.href = url;\n            browser.ie && (a.href = a.href);\n            url = browser.ie ? a.href:(a.protocol + '//' + a.host + a.pathname + a.search + a.hash);\n        }\n\n        if(url || url === '') {\n            $G('url').value = url;\n        }\n        if(align) {\n            utils.each($G('repeatType').children, function(item){\n                item.selected = (align == item.getAttribute('value') ? 'selected':false);\n            });\n        }\n        if(x || y) {\n            $G('x').value = parseInt(x) || 0;\n            $G('y').value = parseInt(y) || 0;\n        }\n\n        $G('alignment').style.display = coloredRadio.checked && $G('url').value ? '':'none';\n        $G('custom').style.display = coloredRadio.checked && $G('url').value && $G('repeatType').value == 'self' ? '':'none';\n    }\n\n    /* 更新背景颜色 */\n    function updateBackground () {\n        if ($G('coloredRadio').checked) {\n            var color = domUtils.getStyle($G(\"colorPicker\"), \"background-color\"),\n                bgimg = $G(\"url\").value,\n                align = $G(\"repeatType\").value,\n                backgroundObj = {\n                    \"background-repeat\": \"no-repeat\",\n                    \"background-position\": \"center center\"\n                };\n\n            if (color) backgroundObj[\"background-color\"] = color;\n            if (bgimg) backgroundObj[\"background-image\"] = 'url(' + bgimg + ')';\n            if (align == 'self') {\n                backgroundObj[\"background-position\"] = $G(\"x\").value + \"px \" + $G(\"y\").value + \"px\";\n            } else if (align == 'repeat-x' || align == 'repeat-y' || align == 'repeat') {\n                backgroundObj[\"background-repeat\"] = align;\n            }\n\n            editor.execCommand('background', backgroundObj);\n        } else {\n            editor.execCommand('background', null);\n        }\n    }\n\n\n    /* 在线图片 */\n    function OnlineImage(target) {\n        this.container = utils.isString(target) ? document.getElementById(target) : target;\n        this.init();\n    }\n    OnlineImage.prototype = {\n        init: function () {\n            this.reset();\n            this.initEvents();\n        },\n        /* 初始化容器 */\n        initContainer: function () {\n            this.container.innerHTML = '';\n            this.list = document.createElement('ul');\n            this.clearFloat = document.createElement('li');\n\n            domUtils.addClass(this.list, 'list');\n            domUtils.addClass(this.clearFloat, 'clearFloat');\n\n            this.list.id = 'imageListUl';\n            this.list.appendChild(this.clearFloat);\n            this.container.appendChild(this.list);\n        },\n        /* 初始化滚动事件,滚动到地步自动拉取数据 */\n        initEvents: function () {\n            var _this = this;\n\n            /* 滚动拉取图片 */\n            domUtils.on($G('imageList'), 'scroll', function(e){\n                var panel = this;\n                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n                    _this.getImageData();\n                }\n            });\n            /* 选中图片 */\n            domUtils.on(this.container, 'click', function (e) {\n                var target = e.target || e.srcElement,\n                    li = target.parentNode,\n                    nodes = $G('imageListUl').childNodes;\n\n                if (li.tagName.toLowerCase() == 'li') {\n                    updateFormState('nocolor', null, '');\n                    for (var i = 0, node; node = nodes[i++];) {\n                        if (node == li && !domUtils.hasClass(node, 'selected')) {\n                            domUtils.addClass(node, 'selected');\n                            updateFormState('colored', null, li.firstChild.getAttribute(\"_src\"), 'repeat');\n                        } else {\n                            domUtils.removeClasses(node, 'selected');\n                        }\n                    }\n                    updateBackground();\n                }\n            });\n        },\n        /* 初始化第一次的数据 */\n        initData: function () {\n\n            /* 拉取数据需要使用的值 */\n            this.state = 0;\n            this.listSize = editor.getOpt('imageManagerListSize');\n            this.listIndex = 0;\n            this.listEnd = false;\n\n            /* 第一次拉取数据 */\n            this.getImageData();\n        },\n        /* 重置界面 */\n        reset: function() {\n            this.initContainer();\n            this.initData();\n        },\n        /* 向后台拉取图片列表数据 */\n        getImageData: function () {\n            var _this = this;\n\n            if(!_this.listEnd && !this.isLoadingData) {\n                this.isLoadingData = true;\n                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),\n                    isJsonp = utils.isCrossDomainUrl(url);\n                ajax.request(url, {\n                    'timeout': 100000,\n                    'dataType': isJsonp ? 'jsonp':'',\n                    'data': utils.extend({\n                            start: this.listIndex,\n                            size: this.listSize\n                        }, editor.queryCommandValue('serverparam')),\n                    'method': 'get',\n                    'onsuccess': function (r) {\n                        try {\n                            var json = isJsonp ? r:eval('(' + r.responseText + ')');\n                            if (json.state == 'SUCCESS') {\n                                _this.pushData(json.list);\n                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);\n                                if(_this.listIndex >= json.total) {\n                                    _this.listEnd = true;\n                                }\n                                _this.isLoadingData = false;\n                            }\n                        } catch (e) {\n                            if(r.responseText.indexOf('ue_separate_ue') != -1) {\n                                var list = r.responseText.split(r.responseText);\n                                _this.pushData(list);\n                                _this.listIndex = parseInt(list.length);\n                                _this.listEnd = true;\n                                _this.isLoadingData = false;\n                            }\n                        }\n                    },\n                    'onerror': function () {\n                        _this.isLoadingData = false;\n                    }\n                });\n            }\n        },\n        /* 添加图片到列表界面上 */\n        pushData: function (list) {\n            var i, item, img, icon, _this = this,\n                urlPrefix = editor.getOpt('imageManagerUrlPrefix');\n            for (i = 0; i < list.length; i++) {\n                if(list[i] && list[i].url) {\n                    item = document.createElement('li');\n                    img = document.createElement('img');\n                    icon = document.createElement('span');\n\n                    domUtils.on(img, 'load', (function(image){\n                        return function(){\n                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);\n                        }\n                    })(img));\n                    img.width = 113;\n                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );\n                    img.setAttribute('_src', urlPrefix + list[i].url);\n                    domUtils.addClass(icon, 'icon');\n\n                    item.appendChild(img);\n                    item.appendChild(icon);\n                    this.list.insertBefore(item, this.clearFloat);\n                }\n            }\n        },\n        /* 改变图片大小 */\n        scale: function (img, w, h, type) {\n            var ow = img.width,\n                oh = img.height;\n\n            if (type == 'justify') {\n                if (ow >= oh) {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            } else {\n                if (ow >= oh) {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            }\n        },\n        getInsertList: function () {\n            var i, lis = this.list.children, list = [], align = getAlign();\n            for (i = 0; i < lis.length; i++) {\n                if (domUtils.hasClass(lis[i], 'selected')) {\n                    var img = lis[i].firstChild,\n                        src = img.getAttribute('_src');\n                    list.push({\n                        src: src,\n                        _src: src,\n                        floatStyle: align\n                    });\n                }\n\n            }\n            return list;\n        }\n    };\n\n    dialog.onok = function () {\n        updateBackground();\n        editor.fireEvent('saveScene');\n    };\n    dialog.oncancel = function () {\n        editor.execCommand('background', backupStyle);\n    };\n\n})();"
  },
  {
    "path": "web/console/public/UEditor/dialogs/charts/chart.config.js",
    "content": "/*\n * 图表配置文件\n * */\n\n\n//不同类型的配置\nvar typeConfig = [\n    {\n        chart: {\n            type: 'line'\n        },\n        plotOptions: {\n            line: {\n                dataLabels: {\n                    enabled: false\n                },\n                enableMouseTracking: true\n            }\n        }\n    }, {\n        chart: {\n            type: 'line'\n        },\n        plotOptions: {\n            line: {\n                dataLabels: {\n                    enabled: true\n                },\n                enableMouseTracking: false\n            }\n        }\n    }, {\n        chart: {\n            type: 'area'\n        }\n    }, {\n        chart: {\n            type: 'bar'\n        }\n    }, {\n        chart: {\n            type: 'column'\n        }\n    }, {\n        chart: {\n            plotBackgroundColor: null,\n            plotBorderWidth: null,\n            plotShadow: false\n        },\n        plotOptions: {\n            pie: {\n                allowPointSelect: true,\n                cursor: 'pointer',\n                dataLabels: {\n                    enabled: true,\n                    color: '#000000',\n                    connectorColor: '#000000',\n                    formatter: function() {\n                        return '<b>'+ this.point.name +'</b>: '+ ( Math.round( this.point.percentage*100 ) / 100 ) +' %';\n                    }\n                }\n            }\n        }\n    }\n];\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/charts/charts.css",
    "content": "html, body {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n}\n\n.main {\n    width: 100%;\n    overflow: hidden;\n}\n\n.table-view {\n    height: 100%;\n    float: left;\n    margin: 20px;\n    width: 40%;\n}\n\n.table-view .table-container {\n    width: 100%;\n    margin-bottom: 50px;\n    overflow: scroll;\n}\n\n.table-view th {\n    padding: 5px 10px;\n    background-color: #F7F7F7;\n}\n\n.table-view td {\n    width: 50px;\n    text-align: center;\n    padding:0;\n}\n\n.table-container input {\n    width: 40px;\n    padding: 5px;\n    border: none;\n    outline: none;\n}\n\n.table-view caption {\n    font-size: 18px;\n    text-align: left;\n}\n\n.charts-view {\n    /*margin-left: 49%!important;*/\n    width: 50%;\n    margin-left: 49%;\n    height: 400px;\n}\n\n.charts-container {\n    border-left: 1px solid #c3c3c3;\n}\n\n.charts-format fieldset {\n    padding-left: 20px;\n    margin-bottom: 50px;\n}\n\n.charts-format legend {\n    padding-left: 10px;\n    padding-right: 10px;\n}\n\n.format-item-container {\n    padding: 20px;\n}\n\n.format-item-container label {\n    display: block;\n    margin: 10px 0;\n}\n\n.charts-format .data-item {\n    border: 1px solid black;\n    outline: none;\n    padding: 2px 3px;\n}\n\n/* 图表类型 */\n\n.charts-type {\n    margin-top: 50px;\n    height: 300px;\n}\n\n.scroll-view {\n    border: 1px solid #c3c3c3;\n    border-left: none;\n    border-right: none;\n    overflow: hidden;\n}\n\n.scroll-container {\n    margin: 20px;\n    width: 100%;\n    overflow: hidden;\n}\n\n.scroll-bed {\n    width: 10000px;\n    _margin-top: 20px;\n    -webkit-transition: margin-left .5s ease;\n    -moz-transition: margin-left .5s ease;\n    transition: margin-left .5s ease;\n}\n\n.view-box {\n    display: inline-block;\n    *display: inline;\n    *zoom: 1;\n    margin-right: 20px;\n    border: 2px solid white;\n    line-height: 0;\n    overflow: hidden;\n    cursor: pointer;\n}\n\n.view-box img {\n    border: 1px solid #cecece;\n}\n\n.view-box.selected {\n    border-color: #7274A7;\n}\n\n.button-container {\n    margin-bottom: 20px;\n    text-align: center;\n}\n\n.button-container a {\n    display: inline-block;\n    width: 100px;\n    height: 25px;\n    line-height: 25px;\n    border: 1px solid #c2ccd1;\n    margin-right: 30px;\n    text-decoration: none;\n    color: black;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n    border-radius: 2px;\n}\n\n.button-container a:HOVER {\n    background: #fcfcfc;\n}\n\n.button-container a:ACTIVE {\n    border-top-color: #c2ccd1;\n    box-shadow:inset 0 5px 4px -4px rgba(49, 49, 64, 0.1);\n}\n\n.edui-charts-not-data {\n    height: 100px;\n    line-height: 100px;\n    text-align: center;\n}"
  },
  {
    "path": "web/console/public/UEditor/dialogs/charts/charts.html",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <title>chart</title>\n        <meta chartset=\"utf-8\">\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"charts.css\">\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    </head>\n    <body>\n        <div class=\"main\">\n            <div class=\"table-view\">\n                <h3><var id=\"lang_data_source\"></var></h3>\n                <div id=\"tableContainer\" class=\"table-container\"></div>\n                <h3><var id=\"lang_chart_format\"></var></h3>\n                <form name=\"data-form\">\n                    <div class=\"charts-format\">\n                        <fieldset>\n                            <legend><var id=\"lang_data_align\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label>\n                                    <input type=\"radio\" class=\"format-ctrl not-pie-item\" name=\"charts-format\" value=\"1\" checked=\"checked\">\n                                    <var id=\"lang_chart_align_same\"></var>\n                                </label>\n                                <label>\n                                    <input type=\"radio\" class=\"format-ctrl not-pie-item\" name=\"charts-format\" value=\"-1\">\n                                    <var id=\"lang_chart_align_reverse\"></var>\n                                </label>\n                                <br>\n                            </div>\n                        </fieldset>\n                        <fieldset>\n                            <legend><var id=\"lang_chart_title\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label>\n                                    <var id=\"lang_chart_main_title\"></var><input type=\"text\" name=\"title\" class=\"data-item\">\n                                </label>\n                                <label>\n                                    <var id=\"lang_chart_sub_title\"></var><input type=\"text\" name=\"sub-title\" class=\"data-item not-pie-item\">\n                                </label>\n                                <label>\n                                    <var id=\"lang_chart_x_title\"></var><input type=\"text\" name=\"x-title\" class=\"data-item not-pie-item\">\n                                </label>\n                                <label>\n                                    <var id=\"lang_chart_y_title\"></var><input type=\"text\" name=\"y-title\" class=\"data-item not-pie-item\">\n                                </label>\n                            </div>\n                        </fieldset>\n                        <fieldset>\n                            <legend><var id=\"lang_chart_tip\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label>\n                                    <var id=\"lang_cahrt_tip_prefix\"></var>\n                                    <input type=\"text\" id=\"tipInput\" name=\"tip\" class=\"data-item\" disabled=\"disabled\">\n                                </label>\n                                <p><var id=\"lang_cahrt_tip_description\"></var></p>\n                            </div>\n                        </fieldset>\n                        <fieldset>\n                            <legend><var id=\"lang_chart_data_unit\"></var></legend>\n                            <div class=\"format-item-container\">\n                                <label><var id=\"lang_chart_data_unit_title\"></var><input type=\"text\" name=\"unit\" class=\"data-item\"></label>\n                                <p><var id=\"lang_chart_data_unit_description\"></var></p>\n                            </div>\n                        </fieldset>\n                    </div>\n                </form>\n            </div>\n            <div class=\"charts-view\">\n                <div id=\"chartsContainer\" class=\"charts-container\"></div>\n                <div id=\"chartsType\" class=\"charts-type\">\n                    <h3><var id=\"lang_chart_type\"></var></h3>\n                    <div class=\"scroll-view\">\n                        <div class=\"scroll-container\">\n                            <div id=\"scrollBed\" class=\"scroll-bed\"></div>\n                        </div>\n                        <div id=\"buttonContainer\" class=\"button-container\">\n                            <a href=\"#\" data-title=\"prev\"><var id=\"lang_prev_btn\"></var></a>\n                            <a href=\"#\" data-title=\"next\"><var id=\"lang_next_btn\"></var></a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <script src=\"../../third-party/jquery-1.10.2.min.js\"></script>\n        <script src=\"../../third-party/highcharts/highcharts.js\"></script>\n        <script src=\"chart.config.js\"></script>\n        <script src=\"charts.js\"></script>\n    </body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/charts/charts.js",
    "content": "/*\n * 图片转换对话框脚本\n **/\n\nvar tableData = [],\n    //编辑器页面table\n    editorTable = null,\n    chartsConfig = window.typeConfig,\n    resizeTimer = null,\n    //初始默认图表类型\n    currentChartType = 0;\n\nwindow.onload = function () {\n\n    editorTable = domUtils.findParentByTagName( editor.selection.getRange().startContainer, 'table', true);\n\n    //未找到表格， 显示错误页面\n    if ( !editorTable ) {\n        document.body.innerHTML = \"<div class='edui-charts-not-data'>未找到数据</div>\";\n        return;\n    }\n\n    //初始化图表类型选择\n    initChartsTypeView();\n    renderTable( editorTable );\n    initEvent();\n    initUserConfig( editorTable.getAttribute( \"data-chart\" ) );\n    $( \"#scrollBed .view-box:eq(\"+ currentChartType +\")\" ).trigger( \"click\" );\n    updateViewType( currentChartType );\n\n    dialog.addListener( \"resize\", function () {\n\n        if ( resizeTimer != null ) {\n            window.clearTimeout( resizeTimer );\n        }\n\n        resizeTimer = window.setTimeout( function () {\n\n            resizeTimer = null;\n\n            renderCharts();\n\n        }, 500 );\n\n    } );\n\n};\n\nfunction initChartsTypeView () {\n\n    var contents = [];\n\n    for ( var i = 0, len = chartsConfig.length; i<len; i++ ) {\n\n        contents.push( '<div class=\"view-box\" data-chart-type=\"'+ i +'\"><img width=\"300\" src=\"images/charts'+ i +'.png\"></div>' );\n\n    }\n\n    $( \"#scrollBed\" ).html( contents.join( \"\" ) );\n\n}\n\n//渲染table， 以便用户修改数据\nfunction renderTable ( table ) {\n\n    var tableHtml = [];\n\n    //构造数据\n    for ( var i = 0, row; row = table.rows[ i ]; i++ ) {\n\n        tableData[ i ] = [];\n        tableHtml[ i ] = [];\n\n        for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) {\n\n            var value = getCellValue( cell );\n\n            if ( i > 0 && j > 0 ) {\n                value = +value;\n            }\n\n            if ( i === 0 || j === 0 ) {\n                tableHtml[ i ].push( '<th>'+ value +'</th>' );\n            } else {\n                tableHtml[ i ].push( '<td><input type=\"text\" class=\"data-item\" value=\"'+ value +'\"></td>' );\n            }\n\n            tableData[ i ][ j ] = value;\n\n        }\n\n        tableHtml[ i ] = tableHtml[ i ].join( \"\" );\n\n    }\n\n    //draw 表格\n    $( \"#tableContainer\" ).html( '<table id=\"showTable\" border=\"1\"><tbody><tr>'+ tableHtml.join( \"</tr><tr>\" ) +'</tr></tbody></table>' );\n\n}\n\n/*\n * 根据表格已有的图表属性初始化当前图表属性\n */\nfunction initUserConfig ( config ) {\n\n    var parsedConfig = {};\n\n    if ( !config ) {\n        return;\n    }\n\n    config = config.split( \";\" );\n\n    $.each( config, function ( index, item ) {\n\n        item = item.split( \":\" );\n        parsedConfig[ item[ 0 ] ] = item[ 1 ];\n\n    } );\n\n    setUserConfig( parsedConfig );\n\n}\n\nfunction initEvent () {\n\n    var cacheValue = null,\n        //图表类型数\n        typeViewCount = chartsConfig.length- 1,\n        $chartsTypeViewBox = $( '#scrollBed .view-box' );\n\n    $( \".charts-format\" ).delegate( \".format-ctrl\", \"change\", function () {\n\n        renderCharts();\n\n    } )\n\n    $( \".table-view\" ).delegate( \".data-item\", \"focus\", function () {\n\n        cacheValue = this.value;\n\n    } ).delegate( \".data-item\", \"blur\", function () {\n\n        if ( this.value !== cacheValue ) {\n            renderCharts();\n        }\n\n        cacheValue = null;\n\n    } );\n\n    $( \"#buttonContainer\" ).delegate( \"a\", \"click\", function (e) {\n\n        e.preventDefault();\n\n        if ( this.getAttribute( \"data-title\" ) === 'prev' ) {\n\n            if ( currentChartType > 0 ) {\n                currentChartType--;\n                updateViewType( currentChartType );\n            }\n\n        } else {\n\n            if ( currentChartType < typeViewCount ) {\n                currentChartType++;\n                updateViewType( currentChartType );\n            }\n\n        }\n\n    } );\n\n    //图表类型变化\n    $( '#scrollBed' ).delegate( \".view-box\", \"click\", function (e) {\n\n        var index = $( this ).attr( \"data-chart-type\" );\n        $chartsTypeViewBox.removeClass( \"selected\" );\n        $( $chartsTypeViewBox[ index ] ).addClass( \"selected\" );\n\n        currentChartType = index | 0;\n\n        //饼图， 禁用部分配置\n        if ( currentChartType === chartsConfig.length - 1 ) {\n\n            disableNotPieConfig();\n\n        //启用完整配置\n        } else {\n\n            enableNotPieConfig();\n\n        }\n\n        renderCharts();\n\n    } );\n\n}\n\nfunction renderCharts () {\n\n    var data = collectData();\n\n    $('#chartsContainer').highcharts( $.extend( {}, chartsConfig[ currentChartType ], {\n\n        credits: {\n            enabled: false\n        },\n        exporting: {\n            enabled: false\n        },\n        title: {\n            text: data.title,\n            x: -20 //center\n        },\n        subtitle: {\n            text: data.subTitle,\n            x: -20\n        },\n        xAxis: {\n            title: {\n                text: data.xTitle\n            },\n            categories: data.categories\n        },\n        yAxis: {\n            title: {\n                text: data.yTitle\n            },\n            plotLines: [{\n                value: 0,\n                width: 1,\n                color: '#808080'\n            }]\n        },\n        tooltip: {\n            enabled: true,\n            valueSuffix: data.suffix\n        },\n        legend: {\n            layout: 'vertical',\n            align: 'right',\n            verticalAlign: 'middle',\n            borderWidth: 1\n        },\n        series: data.series\n\n    } ));\n\n}\n\nfunction updateViewType ( index ) {\n\n    $( \"#scrollBed\" ).css( 'marginLeft', -index*324+'px' );\n\n}\n\nfunction collectData () {\n\n    var form = document.forms[ 'data-form' ],\n        data = null;\n\n    if ( currentChartType !== chartsConfig.length - 1 ) {\n\n        data = getSeriesAndCategories();\n        $.extend( data, getUserConfig() );\n\n    //饼图数据格式\n    } else {\n        data = getSeriesForPieChart();\n        data.title = form[ 'title' ].value;\n        data.suffix = form[ 'unit' ].value;\n    }\n\n    return data;\n\n}\n\n/**\n * 获取用户配置信息\n */\nfunction getUserConfig () {\n\n    var form = document.forms[ 'data-form' ],\n        info = {\n            title: form[ 'title' ].value,\n            subTitle: form[ 'sub-title' ].value,\n            xTitle: form[ 'x-title' ].value,\n            yTitle: form[ 'y-title' ].value,\n            suffix: form[ 'unit' ].value,\n            //数据对齐方式\n            tableDataFormat: getTableDataFormat (),\n            //饼图提示文字\n            tip: $( \"#tipInput\" ).val()\n        };\n\n    return info;\n\n}\n\nfunction setUserConfig ( config ) {\n\n    var form = document.forms[ 'data-form' ];\n\n    config.title && ( form[ 'title' ].value = config.title );\n    config.subTitle && ( form[ 'sub-title' ].value = config.subTitle );\n    config.xTitle && ( form[ 'x-title' ].value = config.xTitle );\n    config.yTitle && ( form[ 'y-title' ].value = config.yTitle );\n    config.suffix && ( form[ 'unit' ].value = config.suffix );\n    config.dataFormat == \"-1\" && ( form[ 'charts-format' ][ 1 ].checked = true );\n    config.tip && ( form[ 'tip' ].value = config.tip );\n    currentChartType = config.chartType || 0;\n\n}\n\nfunction getSeriesAndCategories () {\n\n    var form = document.forms[ 'data-form' ],\n        series = [],\n        categories = [],\n        tmp = [],\n        tableData = getTableData();\n\n    //反转数据\n    if ( getTableDataFormat() === \"-1\" ) {\n\n        for ( var i = 0, len = tableData.length; i < len; i++ ) {\n\n            for ( var j = 0, jlen = tableData[ i ].length; j < jlen; j++ ) {\n\n                if ( !tmp[ j ] ) {\n                    tmp[ j ] = [];\n                }\n\n                tmp[ j ][ i ] = tableData[ i ][ j ];\n\n            }\n\n        }\n\n        tableData = tmp;\n\n    }\n\n    categories = tableData[0].slice( 1 );\n\n    for ( var i = 1, data; data = tableData[ i ]; i++ ) {\n\n        series.push( {\n            name: data[ 0 ],\n            data: data.slice( 1 )\n        } );\n\n    }\n\n    return {\n        series: series,\n        categories: categories\n    };\n\n}\n\n/*\n * 获取数据源数据对齐方式\n */\nfunction getTableDataFormat () {\n\n    var form = document.forms[ 'data-form' ],\n        items = form['charts-format'];\n\n    return items[ 0 ].checked ? items[ 0 ].value : items[ 1 ].value;\n\n}\n\n/*\n * 禁用非饼图类型的配置项\n */\nfunction disableNotPieConfig() {\n\n    updateConfigItem( 'disable' );\n\n}\n\n/*\n * 启用非饼图类型的配置项\n */\nfunction enableNotPieConfig() {\n\n    updateConfigItem( 'enable' );\n\n}\n\nfunction updateConfigItem ( value ) {\n\n    var table = $( \"#showTable\" )[ 0 ],\n        isDisable = value === 'disable' ? true : false;\n\n    //table中的input处理\n    for ( var i = 2 , row; row = table.rows[ i ]; i++ ) {\n\n        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {\n\n            $( \"input\", cell ).attr( \"disabled\", isDisable );\n\n        }\n\n    }\n\n    //其他项处理\n    $( \"input.not-pie-item\" ).attr( \"disabled\", isDisable );\n    $( \"#tipInput\" ).attr( \"disabled\", !isDisable )\n\n}\n\n/*\n * 获取饼图数据\n * 饼图的数据只取第一行的\n **/\nfunction getSeriesForPieChart () {\n\n    var series = {\n            type: 'pie',\n            name: $(\"#tipInput\").val(),\n            data: []\n        },\n        tableData = getTableData();\n\n\n    for ( var j = 1, jlen = tableData[ 0 ].length; j < jlen; j++ ) {\n\n        var title = tableData[ 0 ][ j ],\n            val = tableData[ 1 ][ j ];\n\n        series.data.push( [ title, val ] );\n\n    }\n\n    return {\n        series: [ series ]\n    };\n\n}\n\nfunction getTableData () {\n\n    var table = document.getElementById( \"showTable\" ),\n        xCount = table.rows[0].cells.length - 1,\n        values = getTableInputValue();\n\n    for ( var i = 0, value; value = values[ i ]; i++ ) {\n\n        tableData[ Math.floor( i / xCount ) + 1 ][ i % xCount + 1 ] = values[ i ];\n\n    }\n\n    return tableData;\n\n}\n\nfunction getTableInputValue () {\n\n    var table = document.getElementById( \"showTable\" ),\n        inputs = table.getElementsByTagName( \"input\" ),\n        values = [];\n\n    for ( var i = 0, input; input = inputs[ i ]; i++ ) {\n        values.push( input.value | 0 );\n    }\n\n    return values;\n\n}\n\nfunction getCellValue ( cell ) {\n\n    var value = utils.trim( ( cell.innerText || cell.textContent || '' ) );\n\n    return value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\\s+|\\s+$/g, '' );\n\n}\n\n\n//dialog确认事件\ndialog.onok = function () {\n\n    //收集信息\n    var form = document.forms[ 'data-form' ],\n        info = getUserConfig();\n\n    //添加图表类型\n    info.chartType = currentChartType;\n\n    //同步表格数据到编辑器\n    syncTableData();\n\n    //执行图表命令\n    editor.execCommand( 'charts', info );\n\n};\n\n/*\n * 同步图表编辑视图的表格数据到编辑器里的原始表格\n */\nfunction syncTableData () {\n\n    var tableData = getTableData();\n\n    for ( var i = 1, row; row = editorTable.rows[ i ]; i++ ) {\n\n        for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {\n\n            cell.innerHTML = tableData[ i ] [ j ];\n\n        }\n\n    }\n\n}"
  },
  {
    "path": "web/console/public/UEditor/dialogs/emotion/emotion.css",
    "content": ".jd img{\n    background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.pp img{\n    background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:25px;height:25px;display:block;\n}\n.ldw img{\n    background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.tsj img{\n    background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.cat img{\n    background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.bb img{\n    background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n.youa img{\n    background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;\n    cursor:pointer;width:35px;height:35px;display:block;\n}\n\n.smileytable td {height: 37px;}\n#tabPanel{margin-left:5px;overflow: hidden;}\n#tabContent {float:left;background:#FFFFFF;}\n#tabContent div{display: none;width:480px;overflow:hidden;}\n#tabIconReview.show{left:17px;display:block;}\n.menuFocus{background:#ACCD3C;}\n.menuDefault{background:#FFFFFF;}\n#tabIconReview{position:absolute;left:406px;left:398px \\9;top:41px;z-index:65533;width:90px;height:76px;}\nimg.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFFFFF;background-position:center;background-repeat:no-repeat;}\n\n.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width: 95%;}\n.tabbody table{width: 100%;}\n.tabbody td{border:1px solid #BAC498;}\n.tabbody td span{display: block;zoom:1;padding:0 4px;}"
  },
  {
    "path": "web/console/public/UEditor/dialogs/emotion/emotion.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" >\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"emotion.css\">\n</head>\n<body>\n<div id=\"tabPanel\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span><var id=\"lang_input_choice\"></var></span>\n        <span><var id=\"lang_input_Tuzki\"></var></span>\n        <span><var id=\"lang_input_lvdouwa\"></var></span>\n        <span><var id=\"lang_input_BOBO\"></var></span>\n        <span><var id=\"lang_input_babyCat\"></var></span>\n        <span><var id=\"lang_input_bubble\"></var></span>\n        <span><var id=\"lang_input_youa\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"tab0\"></div>\n        <div id=\"tab1\"></div>\n        <div id=\"tab2\"></div>\n        <div id=\"tab3\"></div>\n        <div id=\"tab4\"></div>\n        <div id=\"tab5\"></div>\n        <div id=\"tab6\"></div>\n    </div>\n</div>\n<div id=\"tabIconReview\">\n    <img id='faceReview' class='review' src=\"../../themes/default/images/spacer.gif\"/>\n</div>\n<script type=\"text/javascript\" src=\"emotion.js\"></script>\n<script type=\"text/javascript\">\n    var emotion = {\n        tabNum:7, //切换面板数量\n        SmilmgName:{ tab0:['j_00', 84], tab1:['t_00', 40], tab2:['w_00', 52], tab3:['B_00', 63], tab4:['C_00', 20], tab5:['i_f', 50], tab6:['y_00', 40] }, //图片前缀名\n        imageFolders:{ tab0:'jx2/', tab1:'tsj/', tab2:'ldw/', tab3:'bobo/', tab4:'babycat/', tab5:'face/', tab6:'youa/'}, //图片对应文件夹路径\n        imageCss:{tab0:'jd', tab1:'tsj', tab2:'ldw', tab3:'bb', tab4:'cat', tab5:'pp', tab6:'youa'}, //图片css类名\n        imageCssOffset:{tab0:35, tab1:35, tab2:35, tab3:35, tab4:35, tab5:25, tab6:35}, //图片偏移\n        SmileyInfor:{\n            tab0:['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],\n            tab1:['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么？', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],\n            tab2:['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢？', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],\n            tab3:['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],\n            tab4:['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],\n            tab5:['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],\n            tab6:['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']\n        }\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/emotion/emotion.js",
    "content": "window.onload = function () {\n    editor.setOpt({\n        emotionLocalization:false\n    });\n\n    emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : \"http://img.baidu.com/hi/\";\n    emotion.SmileyBox = createTabList( emotion.tabNum );\n    emotion.tabExist = createArr( emotion.tabNum );\n\n    initImgName();\n    initEvtHandler( \"tabHeads\" );\n};\n\nfunction initImgName() {\n    for ( var pro in emotion.SmilmgName ) {\n        var tempName = emotion.SmilmgName[pro],\n                tempBox = emotion.SmileyBox[pro],\n                tempStr = \"\";\n\n        if ( tempBox.length ) return;\n        for ( var i = 1; i <= tempName[1]; i++ ) {\n            tempStr = tempName[0];\n            if ( i < 10 ) tempStr = tempStr + '0';\n            tempStr = tempStr + i + '.gif';\n            tempBox.push( tempStr );\n        }\n    }\n}\n\nfunction initEvtHandler( conId ) {\n    var tabHeads = $G( conId );\n    for ( var i = 0, j = 0; i < tabHeads.childNodes.length; i++ ) {\n        var tabObj = tabHeads.childNodes[i];\n        if ( tabObj.nodeType == 1 ) {\n            domUtils.on( tabObj, \"click\", (function ( index ) {\n                return function () {\n                    switchTab( index );\n                };\n            })( j ) );\n            j++;\n        }\n    }\n    switchTab( 0 );\n    $G( \"tabIconReview\" ).style.display = 'none';\n}\n\nfunction InsertSmiley( url, evt ) {\n    var obj = {\n        src:editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + \"dialogs/emotion/\" + url : url\n    };\n    obj._src = obj.src;\n    editor.execCommand( 'insertimage', obj );\n    if ( !evt.ctrlKey ) {\n        dialog.popup.hide();\n    }\n}\n\nfunction switchTab( index ) {\n\n    autoHeight( index );\n    if ( emotion.tabExist[index] == 0 ) {\n        emotion.tabExist[index] = 1;\n        createTab( 'tab' + index );\n    }\n    //获取呈现元素句柄数组\n    var tabHeads = $G( \"tabHeads\" ).getElementsByTagName( \"span\" ),\n            tabBodys = $G( \"tabBodys\" ).getElementsByTagName( \"div\" ),\n            i = 0, L = tabHeads.length;\n    //隐藏所有呈现元素\n    for ( ; i < L; i++ ) {\n        tabHeads[i].className = \"\";\n        tabBodys[i].style.display = \"none\";\n    }\n    //显示对应呈现元素\n    tabHeads[index].className = \"focus\";\n    tabBodys[index].style.display = \"block\";\n}\n\nfunction autoHeight( index ) {\n    var iframe = dialog.getDom( \"iframe\" ),\n            parent = iframe.parentNode.parentNode;\n    switch ( index ) {\n        case 0:\n            iframe.style.height = \"380px\";\n            parent.style.height = \"392px\";\n            break;\n        case 1:\n            iframe.style.height = \"220px\";\n            parent.style.height = \"232px\";\n            break;\n        case 2:\n            iframe.style.height = \"260px\";\n            parent.style.height = \"272px\";\n            break;\n        case 3:\n            iframe.style.height = \"300px\";\n            parent.style.height = \"312px\";\n            break;\n        case 4:\n            iframe.style.height = \"140px\";\n            parent.style.height = \"152px\";\n            break;\n        case 5:\n            iframe.style.height = \"260px\";\n            parent.style.height = \"272px\";\n            break;\n        case 6:\n            iframe.style.height = \"230px\";\n            parent.style.height = \"242px\";\n            break;\n        default:\n\n    }\n}\n\n\nfunction createTab( tabName ) {\n    var faceVersion = \"?v=1.1\", //版本号\n            tab = $G( tabName ), //获取将要生成的Div句柄\n            imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径\n            positionLine = 11 / 2, //中间数\n            iWidth = iHeight = 35, //图片长宽\n            iColWidth = 3, //表格剩余空间的显示比例\n            tableCss = emotion.imageCss[tabName],\n            cssOffset = emotion.imageCssOffset[tabName],\n            textHTML = ['<table class=\"smileytable\">'],\n            i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage,\n            sUrl, realUrl, posflag, offset, infor;\n\n    for ( ; i < imgNum; ) {\n        textHTML.push( '<tr>' );\n        for ( var j = 0; j < imgColNum; j++, i++ ) {\n            faceImage = emotion.SmileyBox[tabName][i];\n            if ( faceImage ) {\n                sUrl = imagePath + faceImage + faceVersion;\n                realUrl = imagePath + faceImage;\n                posflag = j < positionLine ? 0 : 1;\n                offset = cssOffset * i * (-1) - 1;\n                infor = emotion.SmileyInfor[tabName][i];\n\n                textHTML.push( '<td  class=\"' + tableCss + '\"   border=\"1\" width=\"' + iColWidth + '%\" style=\"border-collapse:collapse;\" align=\"center\"  bgcolor=\"transparent\" onclick=\"InsertSmiley(\\'' + realUrl.replace( /'/g, \"\\\\'\" ) + '\\',event)\" onmouseover=\"over(this,\\'' + sUrl + '\\',\\'' + posflag + '\\')\" onmouseout=\"out(this)\">' );\n                textHTML.push( '<span>' );\n                textHTML.push( '<img  style=\"background-position:left ' + offset + 'px;\" title=\"' + infor + '\" src=\"' + emotion.SmileyPath + (editor.options.emotionLocalization ? '0.gif\" width=\"' : 'default/0.gif\" width=\"') + iWidth + '\" height=\"' + iHeight + '\"></img>' );\n                textHTML.push( '</span>' );\n            } else {\n                textHTML.push( '<td width=\"' + iColWidth + '%\"   bgcolor=\"#FFFFFF\">' );\n            }\n            textHTML.push( '</td>' );\n        }\n        textHTML.push( '</tr>' );\n    }\n    textHTML.push( '</table>' );\n    textHTML = textHTML.join( \"\" );\n    tab.innerHTML = textHTML;\n}\n\nfunction over( td, srcPath, posFlag ) {\n    td.style.backgroundColor = \"#ACCD3C\";\n    $G( 'faceReview' ).style.backgroundImage = \"url(\" + srcPath + \")\";\n    if ( posFlag == 1 ) $G( \"tabIconReview\" ).className = \"show\";\n    $G( \"tabIconReview\" ).style.display = 'block';\n}\n\nfunction out( td ) {\n    td.style.backgroundColor = \"transparent\";\n    var tabIconRevew = $G( \"tabIconReview\" );\n    tabIconRevew.className = \"\";\n    tabIconRevew.style.display = 'none';\n}\n\nfunction createTabList( tabNum ) {\n    var obj = {};\n    for ( var i = 0; i < tabNum; i++ ) {\n        obj[\"tab\" + i] = [];\n    }\n    return obj;\n}\n\nfunction createArr( tabNum ) {\n    var arr = [];\n    for ( var i = 0; i < tabNum; i++ ) {\n        arr[i] = 0;\n    }\n    return arr;\n}\n\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/gmap/gmap.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .content{width:530px; height: 350px;margin: 10px auto;}\n        .content table{width: 100%}\n        .content table td{vertical-align: middle;}\n        #address{width:220px;height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}\n    </style>\n    <script type=\"text/javascript\" src=\"http://maps.googleapis.com/maps/api/js?sensor=false\"></script>\n</head>\n<body>\n<div class=\"content\">\n    <table>\n        <tr>\n            <td><label for=\"address\"><var id=\"lang_input_address\"></var></label></td>\n            <td><input id=\"address\" type=\"text\" /></td>\n            <td><a id=\"doSearch\" href=\"javascript:void(0)\" class=\"button\"><var id=\"lang_input_search\"></var></a></td>\n        </tr>\n    </table>\n    <div id=\"container\" style=\"width: 100%; height: 340px;margin: 5px auto; border: 1px solid gray;\"></div>\n</div>\n<script type=\"text/javascript\">\n    domUtils.on(window,\"load\",function(){\n        var map = new google.maps.Map(document.getElementById('container'), {\n                zoom: 3,\n                streetViewControl: false,\n                scaleControl: true,\n                mapTypeId: google.maps.MapTypeId.ROADMAP\n            });\n            var imgcss;\n            var marker = new google.maps.Marker({\n                map: map,\n                draggable: true\n            });\n            function doSearch(){\n                var address = document.getElementById('address').value;\n                var geocoder = new google.maps.Geocoder();\n                geocoder.geocode( { 'address': address}, function (results, status) {\n                    if (status == google.maps.GeocoderStatus.OK) {\n                        var bounds = results[0].geometry.viewport;\n                        map.fitBounds(bounds);\n                        marker.setPosition(results[0].geometry.location);\n                        marker.setTitle(address);\n                    } else alert(lang.searchError);\n                });\n            }\n            $G('address').onkeydown = function (evt){\n                evt = evt || event;\n                if (evt.keyCode == 13) {\n                    doSearch();\n                }\n            };\n            $G(\"doSearch\").onclick = doSearch;\n            dialog.onok = function (){\n                var center = map.getCenter();\n                var point = marker.getPosition();\n                var url = \"http://maps.googleapis.com/maps/api/staticmap?center=\" + center.lat() + ',' + center.lng() + \"&zoom=\" + map.zoom + \"&size=520x340&maptype=\" + map.getMapTypeId() + \"&markers=\" + point.lat() + ',' + point.lng() + \"&sensor=false\";\n                editor.execCommand('inserthtml', '<img width=\"520\" height=\"340\" src=\"' + url + '\"' + (imgcss ? ' style=\"' + imgcss + '\"' :'') + '/>');\n            };\n\n            function getPars(str,par){\n                var reg = new RegExp(par+\"=((\\\\d+|[.,])*)\",\"g\");\n                return reg.exec(str)[1];\n            }\n            var img = editor.selection.getRange().getClosedNode();\n            if(img && img.src.indexOf(\"http://maps.googleapis.com/maps/api/staticmap\")!=-1){\n                var url = img.getAttribute(\"src\");\n                var centers = getPars(url,\"center\").split(\",\");\n                point = new google.maps.LatLng(Number(centers[0]),Number(centers[1]));\n                map.setCenter(point);\n                map.setZoom(Number(getPars(url,\"zoom\")));\n                centers = getPars(url,\"markers\").split(\",\");\n                marker.setPosition(new google.maps.LatLng(Number(centers[0]),Number(centers[1])));\n                imgcss = img.style.cssText;\n            }else{\n                setTimeout(function(){\n                    doSearch();\n                },30)\n            }\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/help/help.css",
    "content": ".wrapper{width: 370px;margin: 10px auto;zoom: 1;}\n.tabbody{height: 360px;}\n.tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;}\n.tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;}\n.tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;}\n.tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;}\n.tabbody table thead{font-weight: bold;line-height: 25px;}"
  },
  {
    "path": "web/console/public/UEditor/dialogs/help/help.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title>帮助</title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"help.css\">\n</head>\n<body>\n<div class=\"wrapper\" id=\"helptab\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" tabsrc=\"about\"><var id=\"lang_input_about\"></var></span>\n        <span tabsrc=\"shortcuts\"><var id=\"lang_input_shortcuts\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"about\" class=\"panel\">\n            <h1>UEditor</h1>\n            <p id=\"version\"></p>\n            <p><var id=\"lang_input_introduction\"></var></p>\n        </div>\n        <div id=\"shortcuts\" class=\"panel\">\n            <table>\n                <thead>\n                <tr>\n                    <td><var id=\"lang_Txt_shortcuts\"></var></td>\n                    <td><var id=\"lang_Txt_func\"></var></td>\n                </tr>\n                </thead>\n                <tbody>\n                <tr>\n                    <td>ctrl+b</td>\n                    <td><var id=\"lang_Txt_bold\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+c</td>\n                    <td><var id=\"lang_Txt_copy\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+x</td>\n                    <td><var id=\"lang_Txt_cut\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+v</td>\n                    <td><var id=\"lang_Txt_Paste\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+y</td>\n                    <td><var id=\"lang_Txt_undo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+z</td>\n                    <td><var id=\"lang_Txt_redo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+i</td>\n                    <td><var id=\"lang_Txt_italic\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+u</td>\n                    <td><var id=\"lang_Txt_underline\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+a</td>\n                    <td><var id=\"lang_Txt_selectAll\"></var></td>\n                </tr>\n                <tr>\n                    <td>shift+enter</td>\n                    <td><var id=\"lang_Txt_visualEnter\"></var></td>\n                </tr>\n                <tr>\n                    <td>alt+z</td>\n                    <td><var id=\"lang_Txt_fullscreen\"></var></td>\n                </tr>\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"help.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/help/help.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午1:06\n * To change this template use File | Settings | File Templates.\n */\n/**\n * tab点击处理事件\n * @param tabHeads\n * @param tabBodys\n * @param obj\n */\nfunction clickHandler( tabHeads,tabBodys,obj ) {\n    //head样式更改\n    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {\n        tabHeads[k].className = \"\";\n    }\n    obj.className = \"focus\";\n    //body显隐\n    var tabSrc = obj.getAttribute( \"tabSrc\" );\n    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {\n        var body = tabBodys[j],\n            id = body.getAttribute( \"id\" );\n        body.onclick = function(){\n            this.style.zoom = 1;\n        };\n        if ( id != tabSrc ) {\n            body.style.zIndex = 1;\n        } else {\n            body.style.zIndex = 200;\n        }\n    }\n\n}\n\n/**\n * TAB切换\n * @param tabParentId  tab的父节点ID或者对象本身\n */\nfunction switchTab( tabParentId ) {\n    var tabElements = $G( tabParentId ).children,\n        tabHeads = tabElements[0].children,\n        tabBodys = tabElements[1].children;\n\n    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {\n        var head = tabHeads[i];\n        if ( head.className === \"focus\" )clickHandler(tabHeads,tabBodys, head );\n        head.onclick = function () {\n            clickHandler(tabHeads,tabBodys,this);\n        }\n    }\n}\nswitchTab(\"helptab\");\n\ndocument.getElementById('version').innerHTML = parent.UE.version;"
  },
  {
    "path": "web/console/public/UEditor/dialogs/image/image.css",
    "content": "@charset \"utf-8\";\n/* dialog样式 */\n.wrapper {\n    zoom: 1;\n    width: 630px;\n    *width: 626px;\n    height: 380px;\n    margin: 0 auto;\n    padding: 10px;\n    position: relative;\n    font-family: sans-serif;\n}\n\n/*tab样式框大小*/\n.tabhead {\n    float:left;\n}\n.tabbody {\n    width: 100%;\n    height: 346px;\n    position: relative;\n    clear: both;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n\n.tabbody .panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n}\n\n/* 图片对齐方式 */\n.alignBar{\n    float:right;\n    margin-top: 5px;\n    position: relative;\n}\n\n.alignBar .algnLabel{\n    float:left;\n    height: 20px;\n    line-height: 20px;\n}\n\n.alignBar #alignIcon{\n    zoom:1;\n    _display: inline;\n    display: inline-block;\n    position: relative;\n}\n.alignBar #alignIcon span{\n    float: left;\n    cursor: pointer;\n    display: block;\n    width: 19px;\n    height: 17px;\n    margin-right: 3px;\n    margin-left: 3px;\n    background-image: url(./images/alignicon.jpg);\n}\n.alignBar #alignIcon .none-align{\n    background-position: 0 -18px;\n}\n.alignBar #alignIcon .left-align{\n    background-position: -20px -18px;\n}\n.alignBar #alignIcon .right-align{\n    background-position: -40px -18px;\n}\n.alignBar #alignIcon .center-align{\n    background-position: -60px -18px;\n}\n.alignBar #alignIcon .none-align.focus{\n    background-position: 0 0;\n}\n.alignBar #alignIcon .left-align.focus{\n    background-position: -20px 0;\n}\n.alignBar #alignIcon .right-align.focus{\n    background-position: -40px 0;\n}\n.alignBar #alignIcon .center-align.focus{\n    background-position: -60px 0;\n}\n\n\n\n\n/* 远程图片样式 */\n#remote {\n    z-index: 200;\n}\n\n#remote .top{\n    width: 100%;\n    margin-top: 25px;\n}\n#remote .left{\n    display: block;\n    float: left;\n    width: 300px;\n    height:10px;\n}\n#remote .right{\n    display: block;\n    float: right;\n    width: 300px;\n    height:10px;\n}\n#remote .row{\n    margin-left: 20px;\n    clear: both;\n    height: 40px;\n}\n\n#remote .row label{\n    text-align: center;\n    width: 50px;\n    zoom:1;\n    _display: inline;\n    display:inline-block;\n    vertical-align: middle;\n}\n#remote .row label.algnLabel{\n    float: left;\n\n}\n\n#remote input.text{\n    width: 150px;\n    padding: 3px 6px;\n    font-size: 14px;\n    line-height: 1.42857143;\n    color: #555;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n#remote input.text:focus {\n    border-color: #66afe9;\n    outline: 0;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n}\n#remote #url{\n    width: 500px;\n    margin-bottom: 2px;\n}\n#remote #width,\n#remote #height{\n    width: 20px;\n    margin-left: 2px;\n    margin-right: 2px;\n}\n#remote #border,\n#remote #vhSpace,\n#remote #title{\n    width: 180px;\n    margin-right: 5px;\n}\n#remote #lock{\n}\n#remote #lockicon{\n    zoom: 1;\n    _display:inline;\n    display: inline-block;\n    width: 20px;\n    height: 20px;\n    background: url(\"../../themes/default/images/lock.gif\") -13px -13px no-repeat;\n    vertical-align: middle;\n}\n#remote #preview{\n    clear: both;\n    width: 260px;\n    height: 240px;\n    z-index: 9999;\n    margin-top: 10px;\n    background-color: #eee;\n    overflow: hidden;\n}\n\n/* 上传图片 */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n    clip: auto;\n}\n\n#upload .queueList {\n    margin: 0;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 172px;\n    padding-top: 150px;\n    text-align: center;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top:0;\n    *top: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 300px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n    position: relative;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 9px 0 0 9px;\n    *margin: 6px 0 0 6px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display:none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background: url(./images/success.gif) no-repeat right bottom \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n#upload .filelist li.filePickerBlock div.webuploader-pick  {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display:none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display:none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused{\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover{\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter:alpha(opacity=60);\n    -moz-opacity:0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n\n/* 图片管理样式 */\n#online {\n    width: 100%;\n    height: 336px;\n    padding: 10px 0 0 0;\n}\n#online #imageList{\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n}\n#online ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n#online li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 0 0 9px 9px;\n    *margin: 0 0 6px 6px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n#online li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width:0;\n    height:0;\n    margin: 0;\n    padding: 0;\n}\n#online li img {\n    cursor: pointer;\n}\n#online li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n#online li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n#online li.selected .icon {\n    background-image: url(images/success.png);\n    background-image: url(images/success.gif)\\9;\n    background-position: 75px 75px;\n}\n#online li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}\n\n\n/* 图片搜索样式 */\n#search .searchBar {\n    width: 100%;\n    height: 30px;\n    margin: 10px 0 5px 0;\n    padding: 0;\n}\n\n#search input.text{\n    width: 150px;\n    padding: 3px 6px;\n    font-size: 14px;\n    line-height: 1.42857143;\n    color: #555;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n#search input.text:focus {\n    border-color: #66afe9;\n    outline: 0;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);\n}\n#search input.searchTxt {\n    margin-left:5px;\n    padding-left: 5px;\n    background: #FFF;\n    width: 300px;\n    *width: 260px;\n    height: 21px;\n    line-height: 21px;\n    float: left;\n    dislay: block;\n}\n\n#search .searchType {\n    width: 65px;\n    height: 28px;\n    padding:0;\n    line-height: 28px;\n    border: 1px solid #d7d7d7;\n    border-radius: 0;\n    vertical-align: top;\n    margin-left: 5px;\n    float: left;\n    dislay: block;\n}\n\n#search #searchBtn,\n#search #searchReset {\n    display: inline-block;\n    margin-bottom: 0;\n    margin-right: 5px;\n    padding: 4px 10px;\n    font-weight: 400;\n    text-align: center;\n    vertical-align: middle;\n    cursor: pointer;\n    background-image: none;\n    border: 1px solid transparent;\n    white-space: nowrap;\n    font-size: 14px;\n    border-radius: 4px;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    vertical-align: top;\n    float: right;\n}\n\n#search #searchBtn {\n    color: white;\n    border-color: #285e8e;\n    background-color: #3b97d7;\n}\n#search #searchReset {\n    color: #333;\n    border-color: #ccc;\n    background-color: #fff;\n}\n#search #searchBtn:hover {\n    background-color: #3276b1;\n}\n#search #searchReset:hover {\n    background-color: #eee;\n}\n\n#search .msg {\n    margin-left: 5px;\n}\n\n#search .searchList{\n    width: 100%;\n    height: 300px;\n    overflow: hidden;\n    clear: both;\n}\n#search .searchList ul{\n    margin:0;\n    padding:0;\n    list-style:none;\n    clear: both;\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    zoom: 1;\n    position: relative;\n}\n\n#search .searchList li {\n    list-style:none;\n    float: left;\n    display: block;\n    width: 115px;\n    margin: 5px 10px 5px 20px;\n    *margin: 5px 10px 5px 15px;\n    padding:0;\n    font-size: 12px;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, .3);\n    -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);\n    -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);\n    position: relative;\n    vertical-align: top;\n    text-align: center;\n    overflow: hidden;\n    cursor: pointer;\n    filter: alpha(Opacity=100);\n    -moz-opacity: 1;\n    opacity: 1;\n    border: 2px solid #eee;\n}\n\n#search .searchList li.selected {\n    filter: alpha(Opacity=40);\n    -moz-opacity: 0.4;\n    opacity: 0.4;\n    border: 2px solid #00a0e9;\n}\n\n#search .searchList li p {\n    background-color: #eee;\n    margin: 0;\n    padding: 0;\n    position: relative;\n    width:100%;\n    height:115px;\n    overflow: hidden;\n}\n\n#search .searchList li p img {\n    cursor: pointer;\n    border: 0;\n}\n\n#search .searchList li a {\n    color: #999;\n    border-top: 1px solid #F2F2F2;\n    background: #FAFAFA;\n    text-align: center;\n    display: block;\n    padding: 0 5px;\n    width: 105px;\n    height:32px;\n    line-height:32px;\n    white-space:nowrap;\n    text-overflow:ellipsis;\n    text-decoration: none;\n    overflow: hidden;\n    word-break: break-all;\n}\n\n#search .searchList a:hover {\n    text-decoration: underline;\n    color: #333;\n}\n#search .searchList .clearFloat{\n    clear: both;\n}"
  },
  {
    "path": "web/console/public/UEditor/dialogs/image/image.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n\n    <!-- jquery -->\n    <script\n      type=\"text/javascript\"\n      src=\"../../third-party/jquery-1.10.2.min.js\"\n    ></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.min.js\"></script>\n    <link\n      rel=\"stylesheet\"\n      type=\"text/css\"\n      href=\"../../third-party/webuploader/webuploader.css\"\n    />\n\n    <!-- image dialog -->\n    <link rel=\"stylesheet\" href=\"image.css\" type=\"text/css\" />\n  </head>\n  <body>\n    <div class=\"wrapper\">\n      <div id=\"tabhead\" class=\"tabhead\">\n        <span class=\"tab\" data-content-id=\"remote\"\n          ><var id=\"lang_tab_remote\"></var\n        ></span>\n        <span class=\"tab focus\" data-content-id=\"upload\"\n          ><var id=\"lang_tab_upload\"></var\n        ></span>\n        <!-- <span class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n            <span class=\"tab\" data-content-id=\"search\"><var id=\"lang_tab_search\"></var></span> -->\n      </div>\n      <div class=\"alignBar\">\n        <label class=\"algnLabel\"><var id=\"lang_input_align\"></var></label>\n        <span id=\"alignIcon\">\n          <span\n            id=\"noneAlign\"\n            class=\"none-align focus\"\n            data-align=\"none\"\n          ></span>\n          <span id=\"leftAlign\" class=\"left-align\" data-align=\"left\"></span>\n          <span id=\"rightAlign\" class=\"right-align\" data-align=\"right\"></span>\n          <span\n            id=\"centerAlign\"\n            class=\"center-align\"\n            data-align=\"center\"\n          ></span>\n        </span>\n        <input id=\"align\" name=\"align\" type=\"hidden\" value=\"none\" />\n      </div>\n      <div id=\"tabbody\" class=\"tabbody\">\n        <!-- 远程图片 -->\n        <div id=\"remote\" class=\"panel\">\n          <div class=\"top\">\n            <div class=\"row\">\n              <label for=\"url\"><var id=\"lang_input_url\"></var></label>\n              <span><input class=\"text\" id=\"url\" type=\"text\" /></span>\n            </div>\n          </div>\n          <div class=\"left\">\n            <div class=\"row\">\n              <label><var id=\"lang_input_size\"></var></label>\n              <span\n                ><var id=\"lang_input_width\">&nbsp;&nbsp;</var\n                ><input class=\"text\" type=\"text\" id=\"width\" />px\n              </span>\n              <span\n                ><var id=\"lang_input_height\">&nbsp;&nbsp;</var\n                ><input class=\"text\" type=\"text\" id=\"height\" />px\n              </span>\n              <span\n                ><input id=\"lock\" type=\"checkbox\" disabled=\"disabled\" /><span\n                  id=\"lockicon\"\n                ></span\n              ></span>\n            </div>\n            <div class=\"row\">\n              <label><var id=\"lang_input_border\"></var></label>\n              <span><input class=\"text\" type=\"text\" id=\"border\" />px </span>\n            </div>\n            <div class=\"row\">\n              <label><var id=\"lang_input_vhspace\"></var></label>\n              <span><input class=\"text\" type=\"text\" id=\"vhSpace\" />px </span>\n            </div>\n            <div class=\"row\">\n              <label><var id=\"lang_input_title\"></var></label>\n              <span><input class=\"text\" type=\"text\" id=\"title\" /></span>\n            </div>\n          </div>\n          <div class=\"right\"><div id=\"preview\"></div></div>\n        </div>\n\n        <!-- 上传图片 -->\n        <div id=\"upload\" class=\"panel focus\">\n          <div id=\"queueList\" class=\"queueList\">\n            <div class=\"statusBar element-invisible\">\n              <div class=\"progress\">\n                <span class=\"text\">0%</span>\n                <span class=\"percentage\"></span>\n              </div>\n              <div class=\"info\"></div>\n              <div class=\"btns\">\n                <div id=\"filePickerBtn\"></div>\n                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n              </div>\n            </div>\n            <div id=\"dndArea\" class=\"placeholder\">\n              <div class=\"filePickerContainer\">\n                <div id=\"filePickerReady\"></div>\n              </div>\n            </div>\n            <ul class=\"filelist element-invisible\">\n              <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n            </ul>\n          </div>\n        </div>\n\n        <!-- 在线图片 -->\n        <div id=\"online\" class=\"panel\">\n          <div id=\"imageList\"><var id=\"lang_imgLoading\"></var></div>\n        </div>\n\n        <!-- 搜索图片 -->\n        <div id=\"search\" class=\"panel\">\n          <div class=\"searchBar\">\n            <input id=\"searchTxt\" class=\"searchTxt text\" type=\"text\" />\n            <select id=\"searchType\" class=\"searchType\">\n              <option value=\"&s=4&z=0\"></option>\n              <option value=\"&s=1&z=19\"></option>\n              <option value=\"&s=2&z=0\"></option>\n              <option value=\"&s=3&z=0\"></option>\n            </select>\n            <input id=\"searchReset\" type=\"button\" />\n            <input id=\"searchBtn\" type=\"button\" />\n          </div>\n          <div id=\"searchList\" class=\"searchList\">\n            <ul id=\"searchListUl\"></ul>\n          </div>\n        </div>\n      </div>\n    </div>\n    <script type=\"text/javascript\" src=\"image.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/image/image.js",
    "content": "/**\n * User: Jinqn\n * Date: 14-04-08\n * Time: 下午16:34\n * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片\n */\n\n;(function () {\n  var remoteImage, uploadImage, onlineImage, searchImage\n\n  window.onload = function () {\n    initTabs()\n    initAlign()\n    initButtons()\n  }\n\n  /* 初始化tab标签 */\n  function initTabs() {\n    var tabs = $G('tabhead').children\n    for (var i = 0; i < tabs.length; i++) {\n      domUtils.on(tabs[i], 'click', function (e) {\n        var target = e.target || e.srcElement\n        setTabFocus(target.getAttribute('data-content-id'))\n      })\n    }\n\n    var img = editor.selection.getRange().getClosedNode()\n    if (img && img.tagName && img.tagName.toLowerCase() == 'img') {\n      setTabFocus('remote')\n    } else {\n      setTabFocus('upload')\n    }\n  }\n\n  /* 初始化tabbody */\n  function setTabFocus(id) {\n    if (!id) return\n    var i,\n      bodyId,\n      tabs = $G('tabhead').children\n    for (i = 0; i < tabs.length; i++) {\n      bodyId = tabs[i].getAttribute('data-content-id')\n      if (bodyId == id) {\n        domUtils.addClass(tabs[i], 'focus')\n        domUtils.addClass($G(bodyId), 'focus')\n      } else {\n        domUtils.removeClasses(tabs[i], 'focus')\n        domUtils.removeClasses($G(bodyId), 'focus')\n      }\n    }\n    switch (id) {\n      case 'remote':\n        remoteImage = remoteImage || new RemoteImage()\n        break\n      case 'upload':\n        setAlign(editor.getOpt('imageInsertAlign'))\n        uploadImage = uploadImage || new UploadImage('queueList')\n        break\n      case 'online':\n        setAlign(editor.getOpt('imageManagerInsertAlign'))\n        onlineImage = onlineImage || new OnlineImage('imageList')\n        onlineImage.reset()\n        break\n      case 'search':\n        setAlign(editor.getOpt('imageManagerInsertAlign'))\n        searchImage = searchImage || new SearchImage()\n        break\n    }\n  }\n\n  /* 初始化onok事件 */\n  function initButtons() {\n    dialog.onok = function () {\n      var remote = false,\n        list = [],\n        id,\n        tabs = $G('tabhead').children\n      for (var i = 0; i < tabs.length; i++) {\n        if (domUtils.hasClass(tabs[i], 'focus')) {\n          id = tabs[i].getAttribute('data-content-id')\n          break\n        }\n      }\n\n      switch (id) {\n        case 'remote':\n          list = remoteImage.getInsertList()\n          break\n        case 'upload':\n          list = uploadImage.getInsertList()\n          var count = uploadImage.getQueueCount()\n          if (count) {\n            $('.info', '#queueList').html(\n              '<span style=\"color:red;\">' +\n                '还有2个未上传文件'.replace(/[\\d]/, count) +\n                '</span>'\n            )\n            return false\n          }\n          break\n        case 'online':\n          list = onlineImage.getInsertList()\n          break\n        case 'search':\n          list = searchImage.getInsertList()\n          remote = true\n          break\n      }\n\n      if (list) {\n        editor.execCommand('insertimage', list)\n        remote && editor.fireEvent('catchRemoteImage')\n      }\n    }\n  }\n\n  /* 初始化对其方式的点击事件 */\n  function initAlign() {\n    /* 点击align图标 */\n    domUtils.on($G('alignIcon'), 'click', function (e) {\n      var target = e.target || e.srcElement\n      if (target.className && target.className.indexOf('-align') != -1) {\n        setAlign(target.getAttribute('data-align'))\n      }\n    })\n  }\n\n  /* 设置对齐方式 */\n  function setAlign(align) {\n    align = align || 'none'\n    var aligns = $G('alignIcon').children\n    for (i = 0; i < aligns.length; i++) {\n      if (aligns[i].getAttribute('data-align') == align) {\n        domUtils.addClass(aligns[i], 'focus')\n        $G('align').value = aligns[i].getAttribute('data-align')\n      } else {\n        domUtils.removeClasses(aligns[i], 'focus')\n      }\n    }\n  }\n  /* 获取对齐方式 */\n  function getAlign() {\n    var align = $G('align').value || 'none'\n    return align == 'none' ? '' : align\n  }\n\n  /* 在线图片 */\n  function RemoteImage(target) {\n    this.container = utils.isString(target)\n      ? document.getElementById(target)\n      : target\n    this.init()\n  }\n  RemoteImage.prototype = {\n    init: function () {\n      this.initContainer()\n      this.initEvents()\n    },\n    initContainer: function () {\n      this.dom = {\n        url: $G('url'),\n        width: $G('width'),\n        height: $G('height'),\n        border: $G('border'),\n        vhSpace: $G('vhSpace'),\n        title: $G('title'),\n        align: $G('align'),\n      }\n      var img = editor.selection.getRange().getClosedNode()\n      if (img) {\n        this.setImage(img)\n      }\n    },\n    initEvents: function () {\n      var _this = this,\n        locker = $G('lock')\n\n      /* 改变url */\n      domUtils.on($G('url'), 'keyup', updatePreview)\n      domUtils.on($G('border'), 'keyup', updatePreview)\n      domUtils.on($G('title'), 'keyup', updatePreview)\n\n      domUtils.on($G('width'), 'keyup', function () {\n        if (locker.checked) {\n          var proportion = locker.getAttribute('data-proportion')\n          $G('height').value = Math.round(this.value / proportion)\n        } else {\n          _this.updateLocker()\n        }\n        updatePreview()\n      })\n      domUtils.on($G('height'), 'keyup', function () {\n        if (locker.checked) {\n          var proportion = locker.getAttribute('data-proportion')\n          $G('width').value = Math.round(this.value * proportion)\n        } else {\n          _this.updateLocker()\n        }\n        updatePreview()\n      })\n      domUtils.on($G('lock'), 'change', function () {\n        var proportion =\n          parseInt($G('width').value) / parseInt($G('height').value)\n        locker.setAttribute('data-proportion', proportion)\n      })\n\n      function updatePreview() {\n        _this.setPreview()\n      }\n    },\n    updateLocker: function () {\n      var width = $G('width').value,\n        height = $G('height').value,\n        locker = $G('lock')\n      if (\n        width &&\n        height &&\n        width == parseInt(width) &&\n        height == parseInt(height)\n      ) {\n        locker.disabled = false\n        locker.title = ''\n      } else {\n        locker.checked = false\n        locker.disabled = 'disabled'\n        locker.title = lang.remoteLockError\n      }\n    },\n    setImage: function (img) {\n      /* 不是正常的图片 */\n      if (\n        !img.tagName ||\n        (img.tagName.toLowerCase() != 'img' && !img.getAttribute('src')) ||\n        !img.src\n      )\n        return\n\n      var wordImgFlag = img.getAttribute('word_img'),\n        src = wordImgFlag\n          ? wordImgFlag.replace('&amp;', '&')\n          : img.getAttribute('_src') ||\n            img.getAttribute('src', 2).replace('&amp;', '&'),\n        align = editor.queryCommandValue('imageFloat')\n\n      /* 防止onchange事件循环调用 */\n      if (src !== $G('url').value) $G('url').value = src\n      if (src) {\n        /* 设置表单内容 */\n        $G('width').value = img.width || ''\n        $G('height').value = img.height || ''\n        $G('border').value = img.getAttribute('border') || '0'\n        $G('vhSpace').value = img.getAttribute('vspace') || '0'\n        $G('title').value = img.title || img.alt || ''\n        setAlign(align)\n        this.setPreview()\n        this.updateLocker()\n      }\n    },\n    getData: function () {\n      var data = {}\n      for (var k in this.dom) {\n        data[k] = this.dom[k].value\n      }\n      return data\n    },\n    setPreview: function () {\n      var url = $G('url').value,\n        ow = $G('width').value,\n        oh = $G('height').value,\n        border = $G('border').value,\n        title = $G('title').value,\n        preview = $G('preview'),\n        width,\n        height\n\n      width =\n        !ow || !oh ? preview.offsetWidth : Math.min(ow, preview.offsetWidth)\n      width =\n        width + border * 2 > preview.offsetWidth\n          ? width\n          : preview.offsetWidth - border * 2\n      height = !ow || !oh ? '' : (width * oh) / ow\n\n      if (url) {\n        preview.innerHTML =\n          '<img src=\"' +\n          url +\n          '\" width=\"' +\n          width +\n          '\" height=\"' +\n          height +\n          '\" border=\"' +\n          border +\n          'px solid #000\" title=\"' +\n          title +\n          '\" />'\n      }\n    },\n    getInsertList: function () {\n      var data = this.getData()\n      if (data['url']) {\n        return [\n          {\n            src: data['url'],\n            _src: data['url'],\n            width: data['width'] || '',\n            height: data['height'] || '',\n            border: data['border'] || '',\n            floatStyle: data['align'] || '',\n            vspace: data['vhSpace'] || '',\n            alt: data['title'] || '',\n            style:\n              'width:' + data['width'] + 'px;height:' + data['height'] + 'px;',\n          },\n        ]\n      } else {\n        return []\n      }\n    },\n  }\n\n  /* 上传图片 */\n  function UploadImage(target) {\n    this.$wrap = target.constructor == String ? $('#' + target) : $(target)\n    this.init()\n  }\n  UploadImage.prototype = {\n    init: function () {\n      this.imageList = []\n      this.initContainer()\n      this.initUploader()\n    },\n    initContainer: function () {\n      this.$queue = this.$wrap.find('.filelist')\n    },\n    /* 初始化容器 */\n    initUploader: function () {\n      var _this = this,\n        $ = jQuery, // just in case. Make sure it's not an other libaray.\n        $wrap = _this.$wrap,\n        // 图片容器\n        $queue = $wrap.find('.filelist'),\n        // 状态栏，包括进度和控制按钮\n        $statusBar = $wrap.find('.statusBar'),\n        // 文件总体选择信息。\n        $info = $statusBar.find('.info'),\n        // 上传按钮\n        $upload = $wrap.find('.uploadBtn'),\n        // 上传按钮\n        $filePickerBtn = $wrap.find('.filePickerBtn'),\n        // 上传按钮\n        $filePickerBlock = $wrap.find('.filePickerBlock'),\n        // 没选择文件之前的内容。\n        $placeHolder = $wrap.find('.placeholder'),\n        // 总体进度条\n        $progress = $statusBar.find('.progress').hide(),\n        // 添加的文件数量\n        fileCount = 0,\n        // 添加的文件总大小\n        fileSize = 0,\n        // 优化retina, 在retina下这个值是2\n        ratio = window.devicePixelRatio || 1,\n        // 缩略图大小\n        thumbnailWidth = 113 * ratio,\n        thumbnailHeight = 113 * ratio,\n        // 可能有pedding, ready, uploading, confirm, done.\n        state = '',\n        // 所有文件的进度信息，key为file id\n        percentages = {},\n        supportTransition = (function () {\n          var s = document.createElement('p').style,\n            r =\n              'transition' in s ||\n              'WebkitTransition' in s ||\n              'MozTransition' in s ||\n              'msTransition' in s ||\n              'OTransition' in s\n          s = null\n          return r\n        })(),\n        // WebUploader实例\n        uploader,\n        actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n        acceptExtensions = (editor.getOpt('imageAllowFiles') || [])\n          .join('')\n          .replace(/\\./g, ',')\n          .replace(/^[,]/, ''),\n        imageMaxSize = editor.getOpt('imageMaxSize'),\n        imageCompressBorder = editor.getOpt('imageCompressBorder')\n\n      if (!WebUploader.Uploader.support()) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorNotSupport))\n          .hide()\n        return\n      } else if (!editor.getOpt('imageActionName')) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorLoadConfig))\n          .hide()\n        return\n      }\n\n      uploader = _this.uploader = WebUploader.create({\n        pick: {\n          id: '#filePickerReady',\n          label: lang.uploadSelectFile,\n        },\n        accept: {\n          title: 'Images',\n          extensions: acceptExtensions,\n          mimeTypes: 'image/*',\n        },\n        swf: '../../third-party/webuploader/Uploader.swf',\n        server: actionUrl,\n        fileVal: editor.getOpt('imageFieldName'),\n        duplicate: true,\n        fileSingleSizeLimit: imageMaxSize, // 默认 2 M\n        compress: editor.getOpt('imageCompressEnable')\n          ? {\n              width: imageCompressBorder,\n              height: imageCompressBorder,\n              // 图片质量，只有type为`image/jpeg`的时候才有效。\n              quality: 90,\n              // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n              allowMagnify: false,\n              // 是否允许裁剪。\n              crop: false,\n              // 是否保留头部meta信息。\n              preserveHeaders: true,\n            }\n          : false,\n      })\n      uploader.addButton({\n        id: '#filePickerBlock',\n      })\n      uploader.addButton({\n        id: '#filePickerBtn',\n        label: lang.uploadAddFile,\n      })\n\n      setState('pedding')\n\n      // 当有文件添加进来时执行，负责view的创建\n      function addFile(file) {\n        var $li = $(\n            '<li id=\"' +\n              file.id +\n              '\">' +\n              '<p class=\"title\">' +\n              file.name +\n              '</p>' +\n              '<p class=\"imgWrap\"></p>' +\n              '<p class=\"progress\"><span></span></p>' +\n              '</li>'\n          ),\n          $btns = $(\n            '<div class=\"file-panel\">' +\n              '<span class=\"cancel\">' +\n              lang.uploadDelete +\n              '</span>' +\n              '<span class=\"rotateRight\">' +\n              lang.uploadTurnRight +\n              '</span>' +\n              '<span class=\"rotateLeft\">' +\n              lang.uploadTurnLeft +\n              '</span></div>'\n          ).appendTo($li),\n          $prgress = $li.find('p.progress span'),\n          $wrap = $li.find('p.imgWrap'),\n          $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n          showError = function (code) {\n            switch (code) {\n              case 'exceed_size':\n                text = lang.errorExceedSize\n                break\n              case 'interrupt':\n                text = lang.errorInterrupt\n                break\n              case 'http':\n                text = lang.errorHttp\n                break\n              case 'not_allow_type':\n                text = lang.errorFileType\n                break\n              default:\n                text = lang.errorUploadRetry\n                break\n            }\n            $info.text(text).show()\n          }\n\n        if (file.getStatus() === 'invalid') {\n          showError(file.statusText)\n        } else {\n          $wrap.text(lang.uploadPreview)\n          if (browser.ie && browser.version <= 7) {\n            $wrap.text(lang.uploadNoPreview)\n          } else {\n            uploader.makeThumb(\n              file,\n              function (error, src) {\n                if (error || !src) {\n                  $wrap.text(lang.uploadNoPreview)\n                } else {\n                  var $img = $('<img src=\"' + src + '\">')\n                  $wrap.empty().append($img)\n                  $img.on('error', function () {\n                    $wrap.text(lang.uploadNoPreview)\n                  })\n                }\n              },\n              thumbnailWidth,\n              thumbnailHeight\n            )\n          }\n          percentages[file.id] = [file.size, 0]\n          file.rotation = 0\n\n          /* 检查文件格式 */\n          if (\n            !file.ext ||\n            acceptExtensions.indexOf(file.ext.toLowerCase()) == -1\n          ) {\n            showError('not_allow_type')\n            uploader.removeFile(file)\n          }\n        }\n\n        file.on('statuschange', function (cur, prev) {\n          if (prev === 'progress') {\n            $prgress.hide().width(0)\n          } else if (prev === 'queued') {\n            $li.off('mouseenter mouseleave')\n            $btns.remove()\n          }\n          // 成功\n          if (cur === 'error' || cur === 'invalid') {\n            showError(file.statusText)\n            percentages[file.id][1] = 1\n          } else if (cur === 'interrupt') {\n            showError('interrupt')\n          } else if (cur === 'queued') {\n            percentages[file.id][1] = 0\n          } else if (cur === 'progress') {\n            $info.hide()\n            $prgress.css('display', 'block')\n          } else if (cur === 'complete') {\n          }\n\n          $li.removeClass('state-' + prev).addClass('state-' + cur)\n        })\n\n        $li.on('mouseenter', function () {\n          $btns.stop().animate({ height: 30 })\n        })\n        $li.on('mouseleave', function () {\n          $btns.stop().animate({ height: 0 })\n        })\n\n        $btns.on('click', 'span', function () {\n          var index = $(this).index(),\n            deg\n\n          switch (index) {\n            case 0:\n              uploader.removeFile(file)\n              return\n            case 1:\n              file.rotation += 90\n              break\n            case 2:\n              file.rotation -= 90\n              break\n          }\n\n          if (supportTransition) {\n            deg = 'rotate(' + file.rotation + 'deg)'\n            $wrap.css({\n              '-webkit-transform': deg,\n              '-mos-transform': deg,\n              '-o-transform': deg,\n              transform: deg,\n            })\n          } else {\n            $wrap.css(\n              'filter',\n              'progid:DXImageTransform.Microsoft.BasicImage(rotation=' +\n                (~~(((file.rotation / 90) % 4) + 4) % 4) +\n                ')'\n            )\n          }\n        })\n\n        $li.insertBefore($filePickerBlock)\n      }\n\n      // 负责view的销毁\n      function removeFile(file) {\n        var $li = $('#' + file.id)\n        delete percentages[file.id]\n        updateTotalProgress()\n        $li.off().find('.file-panel').off().end().remove()\n      }\n\n      function updateTotalProgress() {\n        var loaded = 0,\n          total = 0,\n          spans = $progress.children(),\n          percent\n\n        $.each(percentages, function (k, v) {\n          total += v[0]\n          loaded += v[0] * v[1]\n        })\n\n        percent = total ? loaded / total : 0\n\n        spans.eq(0).text(Math.round(percent * 100) + '%')\n        spans.eq(1).css('width', Math.round(percent * 100) + '%')\n        updateStatus()\n      }\n\n      function setState(val, files) {\n        if (val != state) {\n          var stats = uploader.getStats()\n\n          $upload.removeClass('state-' + state)\n          $upload.addClass('state-' + val)\n\n          switch (val) {\n            /* 未选择文件 */\n            case 'pedding':\n              $queue.addClass('element-invisible')\n              $statusBar.addClass('element-invisible')\n              $placeHolder.removeClass('element-invisible')\n              $progress.hide()\n              $info.hide()\n              uploader.refresh()\n              break\n\n            /* 可以开始上传 */\n            case 'ready':\n              $placeHolder.addClass('element-invisible')\n              $queue.removeClass('element-invisible')\n              $statusBar.removeClass('element-invisible')\n              $progress.hide()\n              $info.show()\n              $upload.text(lang.uploadStart)\n              uploader.refresh()\n              break\n\n            /* 上传中 */\n            case 'uploading':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadPause)\n              break\n\n            /* 暂停上传 */\n            case 'paused':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadContinue)\n              break\n\n            case 'confirm':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadStart)\n\n              stats = uploader.getStats()\n              if (stats.successNum && !stats.uploadFailNum) {\n                setState('finish')\n                return\n              }\n              break\n\n            case 'finish':\n              $progress.hide()\n              $info.show()\n              if (stats.uploadFailNum) {\n                $upload.text(lang.uploadRetry)\n              } else {\n                $upload.text(lang.uploadStart)\n              }\n              break\n          }\n\n          state = val\n          updateStatus()\n        }\n\n        if (!_this.getQueueCount()) {\n          $upload.addClass('disabled')\n        } else {\n          $upload.removeClass('disabled')\n        }\n      }\n\n      function updateStatus() {\n        var text = '',\n          stats\n\n        if (state === 'ready') {\n          text = lang.updateStatusReady\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n        } else if (state === 'confirm') {\n          stats = uploader.getStats()\n          if (stats.uploadFailNum) {\n            text = lang.updateStatusConfirm\n              .replace('_', stats.successNum)\n              .replace('_', stats.successNum)\n          }\n        } else {\n          stats = uploader.getStats()\n          text = lang.updateStatusFinish\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n            .replace('_', stats.successNum)\n\n          if (stats.uploadFailNum) {\n            text += lang.updateStatusError.replace('_', stats.uploadFailNum)\n          }\n        }\n\n        $info.html(text)\n      }\n\n      uploader.on('fileQueued', function (file) {\n        fileCount++\n        fileSize += file.size\n\n        if (fileCount === 1) {\n          $placeHolder.addClass('element-invisible')\n          $statusBar.show()\n        }\n\n        addFile(file)\n      })\n\n      uploader.on('fileDequeued', function (file) {\n        if (\n          file.ext &&\n          acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 &&\n          file.size <= imageMaxSize &&\n          fileCount > 0\n        ) {\n          fileCount--\n          fileSize -= file.size\n        }\n\n        removeFile(file)\n        updateTotalProgress()\n      })\n\n      uploader.on('filesQueued', function (file) {\n        if (\n          !uploader.isInProgress() &&\n          (state == 'pedding' ||\n            state == 'finish' ||\n            state == 'confirm' ||\n            state == 'ready')\n        ) {\n          setState('ready')\n        }\n        updateTotalProgress()\n      })\n\n      uploader.on('all', function (type, files) {\n        switch (type) {\n          case 'uploadFinished':\n            setState('confirm', files)\n            break\n          case 'startUpload':\n            /* 添加额外的GET参数 */\n            var params =\n                utils.serializeParam(editor.queryCommandValue('serverparam')) ||\n                '',\n              url = utils.formatUrl(\n                actionUrl +\n                  (actionUrl.indexOf('?') == -1 ? '?' : '&') +\n                  'encode=utf-8&' +\n                  params\n              )\n            uploader.option('server', url)\n            setState('uploading', files)\n            break\n          case 'stopUpload':\n            setState('paused', files)\n            break\n        }\n      })\n\n      uploader.on('uploadBeforeSend', function (file, data, header) {\n        //这里可以通过data对象添加POST参数\n        if (actionUrl.toLowerCase().indexOf('jsp') != -1) {\n          header['X-Requested-With'] = 'XMLHttpRequest'\n        }\n      })\n\n      uploader.on('uploadProgress', function (file, percentage) {\n        var $li = $('#' + file.id),\n          $percent = $li.find('.progress span')\n\n        $percent.css('width', percentage * 100 + '%')\n        percentages[file.id][1] = percentage\n        updateTotalProgress()\n      })\n\n      uploader.on('uploadSuccess', function (file, ret) {\n        var $file = $('#' + file.id)\n        try {\n          var responseText = ret._raw || ret,\n            json = utils.str2json(responseText)\n          if (json.state == 'SUCCESS') {\n            _this.imageList.push(json)\n            $file.append('<span class=\"success\"></span>')\n          } else {\n            $file.find('.error').text(json.state).show()\n          }\n        } catch (e) {\n          $file.find('.error').text(lang.errorServerUpload).show()\n        }\n      })\n\n      uploader.on('uploadError', function (file, code) {})\n      uploader.on('error', function (code, file) {\n        if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {\n          addFile(file)\n        }\n      })\n      uploader.on('uploadComplete', function (file, ret) {})\n\n      $upload.on('click', function () {\n        if ($(this).hasClass('disabled')) {\n          return false\n        }\n\n        if (state === 'ready') {\n          uploader.upload()\n        } else if (state === 'paused') {\n          uploader.upload()\n        } else if (state === 'uploading') {\n          uploader.stop()\n        }\n      })\n\n      $upload.addClass('state-' + state)\n      updateTotalProgress()\n    },\n    getQueueCount: function () {\n      var file,\n        i,\n        status,\n        readyFile = 0,\n        files = this.uploader.getFiles()\n      for (i = 0; (file = files[i++]); ) {\n        status = file.getStatus()\n        if (status == 'queued' || status == 'uploading' || status == 'progress')\n          readyFile++\n      }\n      return readyFile\n    },\n    destroy: function () {\n      this.$wrap.remove()\n    },\n    getInsertList: function () {\n      var i,\n        data,\n        list = [],\n        align = getAlign(),\n        prefix = editor.getOpt('imageUrlPrefix')\n      for (i = 0; i < this.imageList.length; i++) {\n        data = this.imageList[i]\n        list.push({\n          src: prefix + data.url,\n          _src: prefix + data.url,\n          alt: data.original,\n          floatStyle: align,\n        })\n      }\n      return list\n    },\n  }\n\n  /* 在线图片 */\n  function OnlineImage(target) {\n    this.container = utils.isString(target)\n      ? document.getElementById(target)\n      : target\n    this.init()\n  }\n  OnlineImage.prototype = {\n    init: function () {\n      this.reset()\n      this.initEvents()\n    },\n    /* 初始化容器 */\n    initContainer: function () {\n      this.container.innerHTML = ''\n      this.list = document.createElement('ul')\n      this.clearFloat = document.createElement('li')\n\n      domUtils.addClass(this.list, 'list')\n      domUtils.addClass(this.clearFloat, 'clearFloat')\n\n      this.list.appendChild(this.clearFloat)\n      this.container.appendChild(this.list)\n    },\n    /* 初始化滚动事件,滚动到地步自动拉取数据 */\n    initEvents: function () {\n      var _this = this\n\n      /* 滚动拉取图片 */\n      domUtils.on($G('imageList'), 'scroll', function (e) {\n        var panel = this\n        if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n          _this.getImageData()\n        }\n      })\n      /* 选中图片 */\n      domUtils.on(this.container, 'click', function (e) {\n        var target = e.target || e.srcElement,\n          li = target.parentNode\n\n        if (li.tagName.toLowerCase() == 'li') {\n          if (domUtils.hasClass(li, 'selected')) {\n            domUtils.removeClasses(li, 'selected')\n          } else {\n            domUtils.addClass(li, 'selected')\n          }\n        }\n      })\n    },\n    /* 初始化第一次的数据 */\n    initData: function () {\n      /* 拉取数据需要使用的值 */\n      this.state = 0\n      this.listSize = editor.getOpt('imageManagerListSize')\n      this.listIndex = 0\n      this.listEnd = false\n\n      /* 第一次拉取数据 */\n      this.getImageData()\n    },\n    /* 重置界面 */\n    reset: function () {\n      this.initContainer()\n      this.initData()\n    },\n    /* 向后台拉取图片列表数据 */\n    getImageData: function () {\n      var _this = this\n\n      if (!_this.listEnd && !this.isLoadingData) {\n        this.isLoadingData = true\n        var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),\n          isJsonp = utils.isCrossDomainUrl(url)\n        ajax.request(url, {\n          timeout: 100000,\n          dataType: isJsonp ? 'jsonp' : '',\n          data: utils.extend(\n            {\n              start: this.listIndex,\n              size: this.listSize,\n            },\n            editor.queryCommandValue('serverparam')\n          ),\n          method: 'get',\n          onsuccess: function (r) {\n            try {\n              var json = isJsonp ? r : eval('(' + r.responseText + ')')\n              if (json.state == 'SUCCESS') {\n                _this.pushData(json.list)\n                _this.listIndex =\n                  parseInt(json.start) + parseInt(json.list.length)\n                if (_this.listIndex >= json.total) {\n                  _this.listEnd = true\n                }\n                _this.isLoadingData = false\n              }\n            } catch (e) {\n              if (r.responseText.indexOf('ue_separate_ue') != -1) {\n                var list = r.responseText.split(r.responseText)\n                _this.pushData(list)\n                _this.listIndex = parseInt(list.length)\n                _this.listEnd = true\n                _this.isLoadingData = false\n              }\n            }\n          },\n          onerror: function () {\n            _this.isLoadingData = false\n          },\n        })\n      }\n    },\n    /* 添加图片到列表界面上 */\n    pushData: function (list) {\n      var i,\n        item,\n        img,\n        icon,\n        _this = this,\n        urlPrefix = editor.getOpt('imageManagerUrlPrefix')\n      for (i = 0; i < list.length; i++) {\n        if (list[i] && list[i].url) {\n          item = document.createElement('li')\n          img = document.createElement('img')\n          icon = document.createElement('span')\n\n          domUtils.on(\n            img,\n            'load',\n            (function (image) {\n              return function () {\n                _this.scale(\n                  image,\n                  image.parentNode.offsetWidth,\n                  image.parentNode.offsetHeight\n                )\n              }\n            })(img)\n          )\n          img.width = 113\n          img.setAttribute(\n            'src',\n            urlPrefix +\n              list[i].url +\n              (list[i].url.indexOf('?') == -1 ? '?noCache=' : '&noCache=') +\n              (+new Date()).toString(36)\n          )\n          img.setAttribute('_src', urlPrefix + list[i].url)\n          domUtils.addClass(icon, 'icon')\n\n          item.appendChild(img)\n          item.appendChild(icon)\n          this.list.insertBefore(item, this.clearFloat)\n        }\n      }\n    },\n    /* 改变图片大小 */\n    scale: function (img, w, h, type) {\n      var ow = img.width,\n        oh = img.height\n\n      if (type == 'justify') {\n        if (ow >= oh) {\n          img.width = w\n          img.height = (h * oh) / ow\n          img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'\n        } else {\n          img.width = (w * ow) / oh\n          img.height = h\n          img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'\n        }\n      } else {\n        if (ow >= oh) {\n          img.width = (w * ow) / oh\n          img.height = h\n          img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'\n        } else {\n          img.width = w\n          img.height = (h * oh) / ow\n          img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'\n        }\n      }\n    },\n    getInsertList: function () {\n      var i,\n        lis = this.list.children,\n        list = [],\n        align = getAlign()\n      for (i = 0; i < lis.length; i++) {\n        if (domUtils.hasClass(lis[i], 'selected')) {\n          var img = lis[i].firstChild,\n            src = img.getAttribute('_src')\n          list.push({\n            src: src,\n            _src: src,\n            alt: src.substr(src.lastIndexOf('/') + 1),\n            floatStyle: align,\n          })\n        }\n      }\n      return list\n    },\n  }\n\n  /*搜索图片 */\n  function SearchImage() {\n    this.init()\n  }\n  SearchImage.prototype = {\n    init: function () {\n      this.initEvents()\n    },\n    initEvents: function () {\n      var _this = this\n\n      /* 点击搜索按钮 */\n      domUtils.on($G('searchBtn'), 'click', function () {\n        var key = $G('searchTxt').value\n        if (key && key != lang.searchRemind) {\n          _this.getImageData()\n        }\n      })\n      /* 点击清除妞 */\n      domUtils.on($G('searchReset'), 'click', function () {\n        $G('searchTxt').value = lang.searchRemind\n        $G('searchListUl').innerHTML = ''\n        $G('searchType').selectedIndex = 0\n      })\n      /* 搜索框聚焦 */\n      domUtils.on($G('searchTxt'), 'focus', function () {\n        var key = $G('searchTxt').value\n        if (key && key == lang.searchRemind) {\n          $G('searchTxt').value = ''\n        }\n      })\n      /* 搜索框回车键搜索 */\n      domUtils.on($G('searchTxt'), 'keydown', function (e) {\n        var keyCode = e.keyCode || e.which\n        if (keyCode == 13) {\n          $G('searchBtn').click()\n        }\n      })\n\n      /* 选中图片 */\n      domUtils.on($G('searchList'), 'click', function (e) {\n        var target = e.target || e.srcElement,\n          li = target.parentNode.parentNode\n\n        if (li.tagName.toLowerCase() == 'li') {\n          if (domUtils.hasClass(li, 'selected')) {\n            domUtils.removeClasses(li, 'selected')\n          } else {\n            domUtils.addClass(li, 'selected')\n          }\n        }\n      })\n    },\n    /* 改变图片大小 */\n    scale: function (img, w, h) {\n      var ow = img.width,\n        oh = img.height\n\n      if (ow >= oh) {\n        img.width = (w * ow) / oh\n        img.height = h\n        img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'\n      } else {\n        img.width = w\n        img.height = (h * oh) / ow\n        img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'\n      }\n    },\n    getImageData: function () {\n      var _this = this,\n        key = $G('searchTxt').value,\n        type = $G('searchType').value,\n        keepOriginName = editor.options.keepOriginName ? '1' : '0',\n        url =\n          'http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&st=-1&tn=baiduimagejson&istype=2&rn=32&fm=index&pv=&word=' +\n          key +\n          type +\n          '&ie=utf-8&oe=utf-8&keeporiginname=' +\n          keepOriginName +\n          '&' +\n          +new Date()\n\n      $G('searchListUl').innerHTML = lang.searchLoading\n      ajax.request(url, {\n        dataType: 'jsonp',\n        charset: 'GB18030',\n        onsuccess: function (json) {\n          var list = []\n          if (json && json.data) {\n            for (var i = 0; i < json.data.length; i++) {\n              if (json.data[i].objURL) {\n                list.push({\n                  title: json.data[i].fromPageTitleEnc,\n                  src: json.data[i].objURL,\n                  url: json.data[i].fromURL,\n                })\n              }\n            }\n          }\n          _this.setList(list)\n        },\n        onerror: function () {\n          $G('searchListUl').innerHTML = lang.searchRetry\n        },\n      })\n    },\n    /* 添加图片到列表界面上 */\n    setList: function (list) {\n      var i,\n        item,\n        p,\n        img,\n        link,\n        _this = this,\n        listUl = $G('searchListUl')\n\n      listUl.innerHTML = ''\n      if (list.length) {\n        for (i = 0; i < list.length; i++) {\n          item = document.createElement('li')\n          p = document.createElement('p')\n          img = document.createElement('img')\n          link = document.createElement('a')\n\n          img.onload = function () {\n            _this.scale(this, 113, 113)\n          }\n          img.width = 113\n          img.setAttribute('src', list[i].src)\n\n          link.href = list[i].url\n          link.target = '_blank'\n          link.title = list[i].title\n          link.innerHTML = list[i].title\n\n          p.appendChild(img)\n          item.appendChild(p)\n          item.appendChild(link)\n          listUl.appendChild(item)\n        }\n      } else {\n        listUl.innerHTML = lang.searchRetry\n      }\n    },\n    getInsertList: function () {\n      var child,\n        src,\n        align = getAlign(),\n        list = [],\n        items = $G('searchListUl').children\n      for (var i = 0; i < items.length; i++) {\n        child = items[i].firstChild && items[i].firstChild.firstChild\n        if (\n          child.tagName &&\n          child.tagName.toLowerCase() == 'img' &&\n          domUtils.hasClass(items[i], 'selected')\n        ) {\n          src = child.src\n          list.push({\n            src: src,\n            _src: src,\n            alt: src.substr(src.lastIndexOf('/') + 1),\n            floatStyle: align,\n          })\n        }\n      }\n      return list\n    },\n  }\n})()\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/insertframe/insertframe.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .warp {width: 320px;height: 153px;margin-left:5px;padding: 20px 0 0 15px;position: relative;}\n        #url {width: 290px; margin-bottom: 2px; margin-left: -6px; margin-left: -2px\\9;*margin-left:0;_margin-left:0; }\n        .format span{display: inline-block; width: 58px;text-align: center; zoom:1;}\n        table td{padding:5px 0;}\n        #align{width: 65px;height: 23px;line-height: 22px;}\n    </style>\n</head>\n<body>\n<div class=\"warp\">\n        <table width=\"300\" cellpadding=\"0\" cellspacing=\"0\">\n            <tr>\n                <td colspan=\"2\" class=\"format\">\n                    <span><var id=\"lang_input_address\"></var></span>\n                    <input style=\"width:200px\" id=\"url\" type=\"text\" value=\"\"/>\n                </td>\n            </tr>\n            <tr>\n                <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_width\"></var></span><input style=\"width:200px\" type=\"text\" id=\"width\"/> px</td>\n\n            </tr>\n            <tr>\n                <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_height\"></var></span><input style=\"width:200px\" type=\"text\" id=\"height\"/> px</td>\n            </tr>\n            <tr>\n                <td><span><var id=\"lang_input_isScroll\"></var></span><input type=\"checkbox\" id=\"scroll\"/> </td>\n                <td><span><var id=\"lang_input_frameborder\"></var></span><input type=\"checkbox\" id=\"frameborder\"/> </td>\n            </tr>\n\n            <tr>\n                <td colspan=\"2\"><span><var id=\"lang_input_alignMode\"></var></span>\n                    <select id=\"align\">\n                        <option value=\"\"></option>\n                        <option value=\"left\"></option>\n                        <option value=\"right\"></option>\n                    </select>\n                </td>\n            </tr>\n        </table>\n</div>\n<script type=\"text/javascript\">\n    var iframe = editor._iframe;\n    if(iframe){\n        $G(\"url\").value = iframe.getAttribute(\"src\")||\"\";\n        $G(\"width\").value = iframe.getAttribute(\"width\")||iframe.style.width.replace(\"px\",\"\")||\"\";\n        $G(\"height\").value = iframe.getAttribute(\"height\") || iframe.style.height.replace(\"px\",\"\") ||\"\";\n        $G(\"scroll\").checked = (iframe.getAttribute(\"scrolling\") == \"yes\") ? true : false;\n        $G(\"frameborder\").checked = (iframe.getAttribute(\"frameborder\") == \"1\") ? true : false;\n        $G(\"align\").value = iframe.align ? iframe.align : \"\";\n    }\n    function queding(){\n        var  url = $G(\"url\").value.replace(/^\\s*|\\s*$/ig,\"\"),\n                width = $G(\"width\").value,\n                height = $G(\"height\").value,\n                scroll = $G(\"scroll\"),\n                frameborder = $G(\"frameborder\"),\n                float = $G(\"align\").value,\n                newIframe = editor.document.createElement(\"iframe\"),\n                div;\n        if(!url){\n            alert(lang.enterAddress);\n            return false;\n        }\n        newIframe.setAttribute(\"src\",/http:\\/\\/|https:\\/\\//ig.test(url) ? url : \"http://\"+url);\n        /^[1-9]+[.]?\\d*$/g.test( width ) ? newIframe.setAttribute(\"width\",width) : \"\";\n        /^[1-9]+[.]?\\d*$/g.test( height ) ? newIframe.setAttribute(\"height\",height) : \"\";\n        scroll.checked ?  newIframe.setAttribute(\"scrolling\",\"yes\") : newIframe.setAttribute(\"scrolling\",\"no\");\n        frameborder.checked ?  newIframe.setAttribute(\"frameborder\",\"1\",0) : newIframe.setAttribute(\"frameborder\",\"0\",0);\n        float ? newIframe.setAttribute(\"align\",float) :  newIframe.setAttribute(\"align\",\"\");\n        if(iframe){\n            iframe.parentNode.insertBefore(newIframe,iframe);\n            domUtils.remove(iframe);\n        }else{\n            div = editor.document.createElement(\"div\");\n            div.appendChild(newIframe);\n            editor.execCommand(\"inserthtml\",div.innerHTML);\n        }\n        editor._iframe = null;\n        dialog.close();\n    }\n    dialog.onok = queding;\n    $G(\"url\").onkeydown = function(evt){\n        evt = evt || event;\n        if(evt.keyCode == 13){\n            queding();\n        }\n    };\n    $focus($G( \"url\" ));\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/internal.js",
    "content": "(function () {\n    var parent = window.parent;\n    //dialog对象\n    dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )];\n    //当前打开dialog的编辑器实例\n    editor = dialog.editor;\n\n    UE = parent.UE;\n\n    domUtils = UE.dom.domUtils;\n\n    utils = UE.utils;\n\n    browser = UE.browser;\n\n    ajax = UE.ajax;\n\n    $G = function ( id ) {\n        return document.getElementById( id )\n    };\n    //focus元素\n    $focus = function ( node ) {\n        setTimeout( function () {\n            if ( browser.ie ) {\n                var r = node.createTextRange();\n                r.collapse( false );\n                r.select();\n            } else {\n                node.focus()\n            }\n        }, 0 )\n    };\n    utils.loadFile(document,{\n        href:editor.options.themePath + editor.options.theme + \"/dialogbase.css?cache=\"+Math.random(),\n        tag:\"link\",\n        type:\"text/css\",\n        rel:\"stylesheet\"\n    });\n    lang = editor.getLang(dialog.className.split( \"-\" )[2]);\n    if(lang){\n        domUtils.on(window,'load',function () {\n\n            var langImgPath = editor.options.langPath + editor.options.lang + \"/images/\";\n            //针对静态资源\n            for ( var i in lang[\"static\"] ) {\n                var dom = $G( i );\n                if(!dom) continue;\n                var tagName = dom.tagName,\n                    content = lang[\"static\"][i];\n                if(content.src){\n                    //clone\n                    content = utils.extend({},content,false);\n                    content.src = langImgPath + content.src;\n                }\n                if(content.style){\n                    content = utils.extend({},content,false);\n                    content.style = content.style.replace(/url\\s*\\(/g,\"url(\" + langImgPath)\n                }\n                switch ( tagName.toLowerCase() ) {\n                    case \"var\":\n                        dom.parentNode.replaceChild( document.createTextNode( content ), dom );\n                        break;\n                    case \"select\":\n                        var ops = dom.options;\n                        for ( var j = 0, oj; oj = ops[j]; ) {\n                            oj.innerHTML = content.options[j++];\n                        }\n                        for ( var p in content ) {\n                            p != \"options\" && dom.setAttribute( p, content[p] );\n                        }\n                        break;\n                    default :\n                        domUtils.setAttributes( dom, content);\n                }\n            }\n        } );\n    }\n\n\n})();\n\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/link/link.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        *{margin:0;padding:0;color: #838383;}\n        table{font-size: 12px;margin: 10px;line-height: 30px}\n        .txt{width:300px;height:21px;line-height:21px;border:1px solid #d7d7d7;}\n    </style>\n</head>\n<body>\n    <table>\n        <tr>\n            <td><label for=\"text\"> <var id=\"lang_input_text\"></var></label></td>\n            <td><input class=\"txt\" id=\"text\" type=\"text\" disabled=\"true\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"href\"> <var id=\"lang_input_url\"></var></label></td>\n            <td><input class=\"txt\" id=\"href\" type=\"text\" /></td>\n        </tr>\n        <tr>\n            <td><label for=\"title\"> <var id=\"lang_input_title\"></var></label></td>\n            <td><input class=\"txt\" id=\"title\" type=\"text\"/></td>\n        </tr>\n        <tr>\n             <td colspan=\"2\">\n                 <label for=\"target\"><var id=\"lang_input_target\"></var></label>\n                 <input id=\"target\" type=\"checkbox\"/>\n             </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" id=\"msg\"></td>\n        </tr>\n    </table>\n<script type=\"text/javascript\">\n\n    editor.setOpt('allowLinkProtocols', ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:']);\n    var allowLinkProtocols = editor.getOpt('allowLinkProtocols');\n\n    var range = editor.selection.getRange(),\n        link = range.collapsed ? editor.queryCommandValue( \"link\" ) : editor.selection.getStart(),\n        url,\n        text = $G('text'),\n        rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(),'a',true),\n        orgText;\n\n    link = domUtils.findParentByTagName( link, \"a\", true );\n\n    if(link){\n        url = utils.html(link.getAttribute( '_href' ) || link.getAttribute( 'href', 2 ));\n\n        if(rangeLink === link && !link.getElementsByTagName('img').length){\n            text.removeAttribute('disabled');\n            orgText = text.value = link[browser.ie ? 'innerText':'textContent'];\n        }else{\n            text.setAttribute('disabled','true');\n            text.value = lang.validLink;\n        }\n\n    }else{\n        if(range.collapsed){\n            text.removeAttribute('disabled');\n            text.value = '';\n        }else{\n            text.setAttribute('disabled','true');\n            text.value = lang.validLink;\n        }\n\n    }\n    $G(\"title\").value = url ? link.title : \"\";\n    $G(\"href\").value = url ? url: '';\n    $G(\"target\").checked = url && link.target == \"_blank\" ? true :  false;\n    $focus($G(\"href\"));\n\n    function handleDialogOk(){\n        var href =$G('href').value.replace(/^\\s+|\\s+$/g, '');\n        if(href){\n            if(!hrefStartWith(href, allowLinkProtocols)) {\n                href  = \"http://\" + href;\n            }\n            var obj = {\n                'href' : href,\n                'target' : $G(\"target\").checked ? \"_blank\" : '_self',\n                'title' : $G(\"title\").value.replace(/^\\s+|\\s+$/g, ''),\n                '_href':href\n            };\n            //修改链接内容的情况太特殊了，所以先做到这里了\n            //todo:情况多的时候，做到command里\n            if(orgText && text.value != orgText){\n                link[browser.ie ? 'innerText' : 'textContent'] =  obj.textValue = text.value;\n                range.selectNode(link).select()\n            }\n            if(range.collapsed){\n                obj.textValue = text.value;\n            }\n            editor.execCommand('link',utils.clearEmptyAttrs(obj) );\n            dialog.close();\n        }\n    }\n    dialog.onok = handleDialogOk;\n    $G('href').onkeydown = $G('title').onkeydown = function(evt){\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            handleDialogOk();\n            return false;\n        }\n    };\n    $G('href').onblur = function(){\n        if(!hrefStartWith(this.value, allowLinkProtocols)){\n            $G(\"msg\").innerHTML = \"<span style='color: red'>\"+lang.httpPrompt+\"</span>\";\n        }else{\n            $G(\"msg\").innerHTML = \"\";\n        }\n    };\n\n    function hrefStartWith(href,arr){\n        href = href.replace(/^\\s+|\\s+$/g, '');\n        for(var i=0,ai;ai=arr[i++];){\n            if(href.indexOf(ai)==0){\n                return true;\n            }\n        }\n        return false;\n    }\n\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/map/map.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <script type=\"text/javascript\" src=\"http://api.map.baidu.com/api?v=1.1&services=true\"></script>\n    <style type=\"text/css\">\n        .content{width:530px; height: 350px;margin: 10px auto;}\n        .content table{width: 100%}\n        .content table td{vertical-align: middle;}\n        #city,#address{height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}\n        #city{width:60px}\n        #address{width:130px}\n        #is_dynamic_label span{vertical-align:middle;margin: 3px 0px 3px 3px;}\n        #is_dynamic_label input{vertical-align:middle;margin: 3px 3px 3px 50px;}\n    </style>\n</head>\n<body>\n<div class=\"content\">\n    <table>\n        <tr>\n            <td><var id=\"lang_city\"></var>:</td>\n            <td><input id=\"city\" type=\"text\" /></td>\n            <td><var id=\"lang_address\"></var>:</td>\n            <td><input id=\"address\" type=\"text\" value=\"\" /></td>\n            <td><a href=\"javascript:doSearch()\" class=\"button\"><var id=\"lang_search\"></var></a></td>\n            <td><label id=\"is_dynamic_label\" for=\"is_dynamic\"><input id=\"is_dynamic\" type=\"checkbox\" name=\"is_dynamic\" /><span><var id=\"lang_dynamicmap\"></var></span></label></td>\n        </tr>\n    </table>\n    <div style=\"width:100%;height:340px;margin:5px auto;border:1px solid gray\" id=\"container\"></div>\n\n</div>\n<script type=\"text/javascript\">\n    var map = new BMap.Map(\"container\"),marker,point,styleStr;\n    map.enableScrollWheelZoom();\n    map.enableContinuousZoom();\n    function doSearch(){\n        if (!document.getElementById('city').value) {\n            alert(lang.cityMsg);\n            return;\n        }\n        var search = new BMap.LocalSearch(document.getElementById('city').value, {\n            onSearchComplete: function (results){\n                if (results && results.getNumPois()) {\n                    var points = [];\n                    for (var i=0; i<results.getCurrentNumPois(); i++) {\n                        points.push(results.getPoi(i).point);\n                    }\n                    if (points.length > 1) {\n                        map.setViewport(points);\n                    } else {\n                        map.centerAndZoom(points[0], 13);\n                    }\n                    point = map.getCenter();\n                    marker.setPoint(point);\n                } else {\n                    alert(lang.errorMsg);\n                }\n            }\n        });\n        search.search(document.getElementById('address').value || document.getElementById('city').value);\n    }\n    //获得参数\n    function getPars(str,par){\n        var reg = new RegExp(par+\"=((\\\\d+|[.,])*)\",\"g\");\n        return reg.exec(str)[1];\n    }\n    function init(){\n        var mapNode = editor.selection.getRange().getClosedNode(),\n            isMapImg = mapNode && /api[.]map[.]baidu[.]com/ig.test(mapNode.getAttribute(\"src\")),\n            isMapIframe = mapNode && domUtils.hasClass(mapNode, 'ueditor_baidumap');\n        if(isMapImg || isMapIframe){\n            var url, centerPos, markerPos;\n            if(isMapIframe) {\n                url = decodeURIComponent(mapNode.getAttribute(\"src\"));\n                $G('is_dynamic').checked = true;\n                styleStr = mapNode.style.cssText;\n            } else {\n                url = mapNode.getAttribute(\"src\");\n                styleStr = mapNode.style.cssText;\n            }\n\n            centerPos = getPars(url,\"center\").split(\",\");\n            markerPos = getPars(url, \"markers\").split(\",\");\n            point = new BMap.Point(Number(centerPos[0]),Number(centerPos[1]));\n            marker = new BMap.Marker(new BMap.Point(Number(markerPos[0]), Number(markerPos[1])));\n            map.addControl(new BMap.NavigationControl());\n            map.centerAndZoom(point, Number(getPars(url,\"zoom\")));\n        }else{\n            point = new BMap.Point(116.404, 39.915);    // 创建点坐标\n            marker = new BMap.Marker(point);\n            map.addControl(new BMap.NavigationControl());\n            map.centerAndZoom(point, 10);                     // 初始化地图,设置中心点坐标和地图级别。\n        }\n        marker.enableDragging();\n        map.addOverlay(marker);\n    }\n    init();\n    document.getElementById('address').onkeydown = function (evt){\n        evt = evt || event;\n        if (evt.keyCode == 13) {\n            doSearch();\n        }\n    };\n    dialog.onok = function (){\n        var center = map.getCenter();\n        var zoom = map.zoomLevel;\n        var size = map.getSize();\n        var mapWidth = size.width;\n        var mapHeight = size.height;\n        var point = marker.getPoint();\n\n        if($G('is_dynamic').checked) {\n            var URL = editor.options.UEDITOR_HOME_URL,\n                url = [URL + (/\\/$/.test(URL) ? '':'/') + \"dialogs/map/show.html\" +\n                    '#center=' + center.lng + ',' + center.lat,\n                    '&zoom=' + zoom,\n                    '&width=' + mapWidth,\n                    '&height=' + mapHeight,\n                    '&markers=' + point.lng + ',' + point.lat,\n                    '&markerStyles=' + 'l,A'].join('');\n            editor.execCommand('inserthtml', '<iframe class=\"ueditor_baidumap\" src=\"' + url + '\"' + (styleStr ? ' style=\"' + styleStr + '\"' :'') + ' frameborder=\"0\" width=\"' + (mapWidth+4) + '\" height=\"' + (mapHeight+4) + '\"></iframe>');\n        } else {\n            var url = \"http://api.map.baidu.com/staticimage?center=\" + center.lng + ',' + center.lat +\n                    \"&zoom=\" + zoom + \"&width=\" + size.width + '&height=' + size.height + \"&markers=\" + point.lng + ',' + point.lat;\n            editor.execCommand('inserthtml', '<img width=\"'+ size.width +'\"height=\"'+ size.height +'\" src=\"' + url + '\"' + (styleStr ? ' style=\"' + styleStr + '\"' :'') + '/>');\n        }\n    };\n    document.getElementById(\"address\").focus();\n</script>\n\n\n</body>\n</html>\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/map/show.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n        \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <meta charset=\"utf-8\"/>\n    <meta name=\"keywords\" content=\"百度地图,百度地图API，百度地图自定义工具，百度地图所见即所得工具\"/>\n    <meta name=\"description\" content=\"百度地图API自定义地图，帮助用户在可视化操作下生成百度地图\"/>\n    <title>百度地图API自定义地图</title>\n    <!--引用百度地图API-->\n    <style type=\"text/css\">\n        html, body {\n            margin: 0;\n            padding: 0;\n            overflow: hidden;\n        }\n    </style>\n    <script type=\"text/javascript\" src=\"http://api.map.baidu.com/api?key=&v=1.1&services=true\"></script>\n</head>\n\n<body onload=\"initMap();\">\n<!--百度地图容器-->\n<div style=\"width:697px;height:550px;border:#ccc solid 1px;\" id=\"dituContent\"></div>\n</body>\n<script type=\"text/javascript\">\n    function getParam(name) {\n        return location.href.match(new RegExp('[?#&]' + name + '=([^?#&]+)', 'i')) ? RegExp.$1 : '';\n    }\n    var map, marker;\n    var centerParam = getParam('center');\n    var zoomParam = getParam('zoom');\n    var widthParam = getParam('width');\n    var heightParam = getParam('height');\n    var markersParam = getParam('markers');\n    var markerStylesParam = getParam('markerStyles');\n\n    //创建和初始化地图函数：\n    function initMap() {\n        // [FF]切换模式后报错\n        if (!window.BMap) {\n            return;\n        }\n        var dituContent = document.getElementById('dituContent');\n        dituContent.style.width = widthParam + 'px';\n        dituContent.style.height = heightParam + 'px';\n\n        createMap();//创建地图\n        setMapEvent();//设置地图事件\n        addMapControl();//向地图添加控件\n\n        // 创建标注\n        var markersArr = markersParam.split(',');\n        var point = new BMap.Point(markersArr[0], markersArr[1]);\n        marker = new BMap.Marker(point);\n        marker.enableDragging();\n        map.addOverlay(marker); // 将标注添加到地图中\n\n        if(parent.editor && parent.document.body.contentEditable==\"true\") { //在编辑状态下\n            setMapListener();//地图改变修改外层的iframe标签src属性\n        }\n    }\n\n    //创建地图函数：\n    function createMap() {\n        map = new BMap.Map(\"dituContent\");//在百度地图容器中创建一个地图\n        var centerArr = centerParam.split(',');\n        var point = new BMap.Point(parseFloat(centerArr[0]), parseFloat(centerArr[1]));//定义一个中心点坐标\n        map.centerAndZoom(point, parseInt(zoomParam));//设定地图的中心点和坐标并将地图显示在地图容器中\n    }\n\n    //地图事件设置函数：\n    function setMapEvent() {\n        map.enableDragging();//启用地图拖拽事件，默认启用(可不写)\n        map.enableScrollWheelZoom();//启用地图滚轮放大缩小\n        map.enableDoubleClickZoom();//启用鼠标双击放大，默认启用(可不写)\n        map.enableKeyboard();//启用键盘上下左右键移动地图\n    }\n\n    //地图控件添加函数：\n    function addMapControl() {\n        //向地图中添加缩放控件\n        var ctrl_nav = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE});\n        map.addControl(ctrl_nav);\n        //向地图中添加缩略图控件\n        var ctrl_ove = new BMap.OverviewMapControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1});\n        map.addControl(ctrl_ove);\n        //向地图中添加比例尺控件\n        var ctrl_sca = new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});\n        map.addControl(ctrl_sca);\n    }\n\n    function setMapListener() {\n        var editor = parent.editor, containerIframe,\n            iframes = parent.document.getElementsByTagName('iframe');\n        for (var key in iframes) {\n            if (iframes[key].contentWindow == window) {\n                containerIframe = iframes[key];\n                break;\n            }\n        }\n        if (containerIframe) {\n            map.addEventListener('moveend', mapListenerHandler);\n            map.addEventListener('zoomend', mapListenerHandler);\n            marker.addEventListener('dragend', mapListenerHandler);\n        }\n\n        function mapListenerHandler() {\n            var zoom = map.getZoom(),\n                center = map.getCenter(),\n                marker = window.marker.getPoint();\n            containerIframe.src = containerIframe.src.\n                replace(new RegExp('([?#&])center=([^?#&]+)', 'i'), '$1center=' + center.lng + ',' + center.lat).\n                replace(new RegExp('([?#&])markers=([^?#&]+)', 'i'), '$1markers=' + marker.lng + ',' + marker.lat).\n                replace(new RegExp('([?#&])zoom=([^?#&]+)', 'i'), '$1zoom=' + zoom);\n            editor.fireEvent('saveScene');\n        }\n    }\n</script>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/music/music.css",
    "content": ".wrapper{margin: 5px 10px;}\n\n.searchBar{height:30px;padding:7px 0 3px;text-align:center;}\n.searchBtn{font-size:13px;height:24px;}\n\n.resultBar{width:460px;margin:5px auto;border: 1px solid #CCC;border-radius: 5px;box-shadow: 2px 2px 5px #D3D6DA;overflow: hidden;}\n\n.listPanel{overflow: hidden;}\n.panelon{display:block;}\n.paneloff{display:none}\n\n.page{width:220px;margin:20px auto;overflow: hidden;}\n.pageon{float:right;width:24px;line-height:24px;height:24px;margin-right: 5px;background: none;border: none;color: #000;font-weight: bold;text-align:center}\n.pageoff{float:right;width:24px;line-height:24px;height:24px;cursor:pointer;background-color: #fff;\n   border: 1px solid #E7ECF0;color: #2D64B3;margin-right: 5px;text-decoration: none;text-align:center;}\n\n.m-box{width:460px;}\n.m-m{float: left;line-height: 20px;height: 20px;}\n.m-h{height:24px;line-height:24px;padding-left: 46px;background-color:#FAFAFA;border-bottom: 1px solid #DAD8D8;font-weight: bold;font-size: 12px;color: #333;}\n.m-l{float:left;width:40px; }\n.m-t{float:left;width:140px;}\n.m-s{float:left;width:110px;}\n.m-z{float:left;width:100px;}\n.m-try-t{float: left;width: 60px;;}\n\n.m-try{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/try_music.gif') no-repeat ;}\n.m-trying{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/stop_music.gif') no-repeat ;}\n\n.loading{width:95px;height:7px;font-size:7px;margin:60px auto;background:url(http://static.tieba.baidu.com/tb/editor/images/loading.gif) no-repeat}\n.empty{width:300px;height:40px;padding:2px;margin:50px auto;line-height:40px; color:#006699;text-align:center;}"
  },
  {
    "path": "web/console/public/UEditor/dialogs/music/music.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n    <title>插入音乐</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"music.css\">\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"searchBar\">\n        <input id=\"J_searchName\" type=\"text\"/>\n        <input type=\"button\" class=\"searchBtn\" id=\"J_searchBtn\">\n    </div>\n    <div class=\"resultBar\" id=\"J_resultBar\">\n        <div class=\"loading\" style=\"display:none\"></div>\n        <div class=\"empty\"><var id=\"lang_input_tips\"></var></div>\n    </div>\n    <div id=\"J_preview\"></div>\n</div>\n<script type=\"text/javascript\" src=\"music.js\"></script>\n<script type=\"text/javascript\">\n    var music = new Music;\n    dialog.onok = function () {\n        music.exec();\n    };\n    dialog.oncancel = function () {\n        $G('J_preview').innerHTML = \"\";\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/music/music.js",
    "content": "function Music() {\n    this.init();\n}\n(function () {\n    var pages = [],\n        panels = [],\n        selectedItem = null;\n    Music.prototype = {\n        total:70,\n        pageSize:10,\n        dataUrl:\"http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.common\",\n        playerUrl:\"http://box.baidu.com/widget/flash/bdspacesong.swf\",\n\n        init:function () {\n            var me = this;\n            domUtils.on($G(\"J_searchName\"), \"keyup\", function (event) {\n                var e = window.event || event;\n                if (e.keyCode == 13) {\n                    me.dosearch();\n                }\n            });\n            domUtils.on($G(\"J_searchBtn\"), \"click\", function () {\n                me.dosearch();\n            });\n        },\n        callback:function (data) {\n            var me = this;\n            me.data = data.song_list;\n            setTimeout(function () {\n                $G('J_resultBar').innerHTML = me._renderTemplate(data.song_list);\n            }, 300);\n        },\n        dosearch:function () {\n            var me = this;\n            selectedItem = null;\n            var key = $G('J_searchName').value;\n            if (utils.trim(key) == \"\")return false;\n            key = encodeURIComponent(key);\n            me._sent(key);\n        },\n        doselect:function (i) {\n            var me = this;\n            if (typeof i == 'object') {\n                selectedItem = i;\n            } else if (typeof i == 'number') {\n                selectedItem = me.data[i];\n            }\n        },\n        onpageclick:function (id) {\n            var me = this;\n            for (var i = 0; i < pages.length; i++) {\n                $G(pages[i]).className = 'pageoff';\n                $G(panels[i]).className = 'paneloff';\n            }\n            $G('page' + id).className = 'pageon';\n            $G('panel' + id).className = 'panelon';\n        },\n        listenTest:function (elem) {\n            var me = this,\n                view = $G('J_preview'),\n                is_play_action = (elem.className == 'm-try'),\n                old_trying = me._getTryingElem();\n\n            if (old_trying) {\n                old_trying.className = 'm-try';\n                view.innerHTML = '';\n            }\n            if (is_play_action) {\n                elem.className = 'm-trying';\n                view.innerHTML = me._buildMusicHtml(me._getUrl(true));\n            }\n        },\n        _sent:function (param) {\n            var me = this;\n            $G('J_resultBar').innerHTML = '<div class=\"loading\"></div>';\n\n            utils.loadFile(document, {\n                src:me.dataUrl + '&query=' + param + '&page_size=' + me.total + '&callback=music.callback&.r=' + Math.random(),\n                tag:\"script\",\n                type:\"text/javascript\",\n                defer:\"defer\"\n            });\n        },\n        _removeHtml:function (str) {\n            var reg = /<\\s*\\/?\\s*[^>]*\\s*>/gi;\n            return str.replace(reg, \"\");\n        },\n        _getUrl:function (isTryListen) {\n            var me = this;\n            var param = 'from=tiebasongwidget&url=&name=' + encodeURIComponent(me._removeHtml(selectedItem.title)) + '&artist='\n                + encodeURIComponent(me._removeHtml(selectedItem.author)) + '&extra='\n                + encodeURIComponent(me._removeHtml(selectedItem.album_title))\n                + '&autoPlay='+isTryListen+'' + '&loop=true';\n            return  me.playerUrl + \"?\" + param;\n        },\n        _getTryingElem:function () {\n            var s = $G('J_listPanel').getElementsByTagName('span');\n\n            for (var i = 0; i < s.length; i++) {\n                if (s[i].className == 'm-trying')\n                    return s[i];\n            }\n            return null;\n        },\n        _buildMusicHtml:function (playerUrl) {\n            var html = '<embed class=\"BDE_try_Music\" allowfullscreen=\"false\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"';\n            html += ' src=\"' + playerUrl + '\"';\n            html += ' width=\"1\" height=\"1\" style=\"position:absolute;left:-2000px;\"';\n            html += ' type=\"application/x-shockwave-flash\" wmode=\"transparent\" play=\"true\" loop=\"false\"';\n            html += ' menu=\"false\" allowscriptaccess=\"never\" scale=\"noborder\">';\n            return html;\n        },\n        _byteLength:function (str) {\n            return str.replace(/[^\\u0000-\\u007f]/g, \"\\u0061\\u0061\").length;\n        },\n        _getMaxText:function (s) {\n            var me = this;\n            s = me._removeHtml(s);\n            if (me._byteLength(s) > 12)\n                return s.substring(0, 5) + '...';\n            if (!s) s = \"&nbsp;\";\n            return s;\n        },\n        _rebuildData:function (data) {\n            var me = this,\n                newData = [],\n                d = me.pageSize,\n                itembox;\n            for (var i = 0; i < data.length; i++) {\n                if ((i + d) % d == 0) {\n                    itembox = [];\n                    newData.push(itembox)\n                }\n                itembox.push(data[i]);\n            }\n            return newData;\n        },\n        _renderTemplate:function (data) {\n            var me = this;\n            if (data.length == 0)return '<div class=\"empty\">' + lang.emptyTxt + '</div>';\n            data = me._rebuildData(data);\n            var s = [], p = [], t = [];\n            s.push('<div id=\"J_listPanel\" class=\"listPanel\">');\n            p.push('<div class=\"page\">');\n            for (var i = 0, tmpList; tmpList = data[i++];) {\n                panels.push('panel' + i);\n                pages.push('page' + i);\n                if (i == 1) {\n                    s.push('<div id=\"panel' + i + '\" class=\"panelon\">');\n                    if (data.length != 1) {\n                        t.push('<div id=\"page' + i + '\" onclick=\"music.onpageclick(' + i + ')\" class=\"pageon\">' + (i ) + '</div>');\n                    }\n                } else {\n                    s.push('<div id=\"panel' + i + '\" class=\"paneloff\">');\n                    t.push('<div id=\"page' + i + '\" onclick=\"music.onpageclick(' + i + ')\" class=\"pageoff\">' + (i ) + '</div>');\n                }\n                s.push('<div class=\"m-box\">');\n                s.push('<div class=\"m-h\"><span class=\"m-t\">' + lang.chapter + '</span><span class=\"m-s\">' + lang.singer\n                    + '</span><span class=\"m-z\">' + lang.special + '</span><span class=\"m-try-t\">' + lang.listenTest + '</span></div>');\n                for (var j = 0, tmpObj; tmpObj = tmpList[j++];) {\n                    s.push('<label for=\"radio-' + i + '-' + j + '\" class=\"m-m\">');\n                    s.push('<input type=\"radio\" id=\"radio-' + i + '-' + j + '\" name=\"musicId\" class=\"m-l\" onclick=\"music.doselect(' + (me.pageSize * (i-1) + (j-1)) + ')\"/>');\n                    s.push('<span class=\"m-t\">' + me._getMaxText(tmpObj.title) + '</span>');\n                    s.push('<span class=\"m-s\">' + me._getMaxText(tmpObj.author) + '</span>');\n                    s.push('<span class=\"m-z\">' + me._getMaxText(tmpObj.album_title) + '</span>');\n                    s.push('<span class=\"m-try\" onclick=\"music.doselect(' + (me.pageSize * (i-1) + (j-1)) + ');music.listenTest(this)\"></span>');\n                    s.push('</label>');\n                }\n                s.push('</div>');\n                s.push('</div>');\n            }\n            t.reverse();\n            p.push(t.join(''));\n            s.push('</div>');\n            p.push('</div>');\n            return s.join('') + p.join('');\n        },\n        exec:function () {\n            var me = this;\n            if (selectedItem == null)   return;\n            $G('J_preview').innerHTML = \"\";\n            editor.execCommand('music', {\n                url:me._getUrl(false),\n                width:400,\n                height:95\n            });\n        }\n    };\n})();\n\n\n\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/preview/preview.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n        <style>\n            html,body{\n                height:100%;\n                width:100%;\n                padding:0;\n                margin:0;\n            }\n            #preview{\n                width:100%;\n                height:100%;\n                padding:0;\n                margin:0;\n            }\n            #preview *{font-family:sans-serif;font-size:16px;}\n        </style>\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n        <script src=\"../../ueditor.parse.js\"></script>\n        <title></title>\n    </head>\n    <body class=\"view\">\n        <div id=\"preview\" style=\"margin:8px\">\n\n        </div>\n    </body>\n    <script>\n        document.getElementById('preview').innerHTML = editor.getContent();\n        uParse('#preview',{\n            rootPath : '../../',\n            chartContainerHeight:500\n        })\n        dialog.oncancel = function(){\n            document.getElementById('preview').innerHTML = '';\n        }\n    </script>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/scrawl/scrawl.css",
    "content": "/*common\n*/\nbody{margin: 0;}\ntable{width:100%;}\ntable td{padding:2px 4px;vertical-align: middle;}\na{text-decoration: none;}\nem{font-style: normal;}\n.border_style1{border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}\n/*module\n*/\n.main{margin: 8px;overflow: hidden;}\n\n.hot{float:left;height:335px;}\n.drawBoard{position: relative; cursor: crosshair;}\n.brushBorad{position: absolute;left:0;top:0;z-index: 998;}\n.picBoard{border: none;text-align: center;line-height: 300px;cursor: default;}\n.operateBar{margin-top:10px;font-size:12px;text-align: center;}\n.operateBar span{margin-left: 10px;}\n\n.drawToolbar{float:right;width:110px;height:300px;overflow: hidden;}\n.colorBar{margin-top:10px;font-size: 12px;text-align: center;}\n.colorBar a{display:block;width: 10px;height: 10px;border:1px solid #1006F1;border-radius: 3px; box-shadow:2px 2px 5px #d3d6da;opacity: 0.3}\n.sectionBar{margin-top:15px;font-size: 12px;text-align: center;}\n.sectionBar a{display:inline-block;width:10px;height:12px;color: #888;text-indent: -999px;opacity: 0.3}\n.size1{background: url('images/size.png') 1px center no-repeat ;}\n.size2{background: url('images/size.png') -10px center no-repeat;}\n.size3{background: url('images/size.png') -22px center no-repeat;}\n.size4{background: url('images/size.png') -35px center no-repeat;}\n\n.addImgH{position: relative;}\n.addImgH_form{position: absolute;left: 18px;top: -1px;width: 75px;height: 21px;opacity: 0;cursor: pointer;}\n.addImgH_form input{width: 100%;}\n/*scrawl遮罩层\n*/\n.maskLayerNull{display: none;}\n.maskLayer{position: absolute;top:0;left:0;width: 100%; height: 100%;opacity: 0.7;\n    background-color: #fff;text-align:center;font-weight:bold;line-height:300px;z-index: 1000;}\n/*btn state\n*/\n.previousStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undoH.png');cursor: pointer;}\n.previousStepH .text{color:#888;cursor:pointer;}\n.previousStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undo.png');cursor:default;}\n.previousStep .text{color:#ccc;cursor:default;}\n\n.nextStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redoH.png');cursor: pointer;}\n.nextStepH .text{color:#888;cursor:pointer;}\n.nextStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redo.png');cursor:default;}\n.nextStep .text{color:#ccc;cursor:default;}\n\n.clearBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/emptyH.png');cursor: pointer;}\n.clearBoardH .text{color:#888;cursor:pointer;}\n.clearBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/empty.png');cursor:default;}\n.clearBoard .text{color:#ccc;cursor:default;}\n\n.scaleBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scaleH.png');cursor: pointer;}\n.scaleBoardH .text{color:#888;cursor:pointer;}\n.scaleBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scale.png');cursor:default;}\n.scaleBoard .text{color:#ccc;cursor:default;}\n\n.removeImgH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimgH.png');cursor: pointer;}\n.removeImgH .text{color:#888;cursor:pointer;}\n.removeImg .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimg.png');cursor:default;}\n.removeImg .text{color:#ccc;cursor:default;}\n\n.addImgH .icon{vertical-align:top;display: inline-block;width:16px;height:16px;background-image: url('images/addimg.png')}\n.addImgH .text{color:#888;cursor:pointer;}\n/*icon\n*/\n.brushIcon{display: inline-block;width:16px;height:16px;background-image: url('images/brush.png')}\n.eraserIcon{display: inline-block;width:16px;height:16px;background-image: url('images/eraser.png')}\n\n\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/scrawl/scrawl.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"scrawl.css\">\n</head>\n<body>\n<div class=\"main\" id=\"J_wrap\">\n    <div class=\"hot\">\n        <div class=\"drawBoard border_style1\">\n            <canvas id=\"J_brushBoard\" class=\"brushBorad\" width=\"360\" height=\"300\"></canvas>\n            <div id=\"J_picBoard\" class=\"picBoard\" style=\"width: 360px;height: 300px\"></div>\n        </div>\n        <div id=\"J_operateBar\" class=\"operateBar\">\n            <span id=\"J_previousStep\" class=\"previousStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_previousStep\"></var></em>\n            </span>\n            <span id=\"J_nextStep\" class=\"nextStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_nextsStep\"></var></em>\n            </span>\n            <span id=\"J_clearBoard\" class=\"clearBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_clear\"></var></em>\n            </span>\n            <span id=\"J_sacleBoard\" class=\"scaleBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_ScalePic\"></var></em>\n            </span>\n        </div>\n    </div>\n    <div class=\"drawToolbar border_style1\">\n        <div id=\"J_colorBar\" class=\"colorBar\"></div>\n        <div id=\"J_brushBar\" class=\"sectionBar\">\n            <em class=\"brushIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div id=\"J_eraserBar\" class=\"sectionBar\">\n            <em class=\"eraserIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div class=\"sectionBar\">\n            <div id=\"J_addImg\" class=\"addImgH\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_addPic\"></var></em>\n                <form method=\"post\" id=\"fileForm\" enctype=\"multipart/form-data\" class=\"addImgH_form\" target=\"up\">\n                    <input type=\"file\" name=\"upfile\" id=\"J_imgTxt\"\n                           accept=\"image/gif,image/jpeg,image/png,image/jpg,image/bmp\"/>\n                </form>\n                <iframe name=\"up\" style=\"display: none\"></iframe>\n            </div>\n        </div>\n        <div class=\"sectionBar\">\n            <span id=\"J_removeImg\" class=\"removeImg\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_removePic\"></var></em>\n            </span>\n        </div>\n    </div>\n</div>\n<div id=\"J_maskLayer\" class=\"maskLayerNull\"></div>\n\n<script type=\"text/javascript\" src=\"scrawl.js\"></script>\n<script type=\"text/javascript\">\n    var settings = {\n        drawBrushSize:3, //画笔初始大小\n        drawBrushColor:\"#4bacc6\", //画笔初始颜色\n        colorList:['c00000', 'ff0000', 'ffc000', 'ffff00', '92d050', '00b050', '00b0f0', '0070c0', '002060', '7030a0', 'ffffff',\n            '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646'], //画笔选择颜色\n        saveNum:10  //撤销次数\n    };\n\n    var scrawlObj = new scrawl( settings );\n    scrawlObj.isCancelScrawl = false;\n\n    dialog.onok = function () {\n        exec( scrawlObj );\n        return false;\n    };\n    dialog.oncancel = function () {\n        scrawlObj.isCancelScrawl = true;\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/scrawl/scrawl.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-5-22\n * Time: 上午11:38\n * To change this template use File | Settings | File Templates.\n */\nvar scrawl = function (options) {\n    options && this.initOptions(options);\n};\n(function () {\n    var canvas = $G(\"J_brushBoard\"),\n        context = canvas.getContext('2d'),\n        drawStep = [], //undo redo存储\n        drawStepIndex = 0; //undo redo指针\n\n    scrawl.prototype = {\n        isScrawl:false, //是否涂鸦\n        brushWidth:-1, //画笔粗细\n        brushColor:\"\", //画笔颜色\n\n        initOptions:function (options) {\n            var me = this;\n            me.originalState(options);//初始页面状态\n            me._buildToolbarColor(options.colorList);//动态生成颜色选择集合\n\n            me._addBoardListener(options.saveNum);//添加画板处理\n            me._addOPerateListener(options.saveNum);//添加undo redo clearBoard处理\n            me._addColorBarListener();//添加颜色选择处理\n            me._addBrushBarListener();//添加画笔大小处理\n            me._addEraserBarListener();//添加橡皮大小处理\n            me._addAddImgListener();//添加增添背景图片处理\n            me._addRemoveImgListenter();//删除背景图片处理\n            me._addScalePicListenter();//添加缩放处理\n            me._addClearSelectionListenter();//添加清楚选中状态处理\n\n            me._originalColorSelect(options.drawBrushColor);//初始化颜色选中\n            me._originalBrushSelect(options.drawBrushSize);//初始化画笔选中\n            me._clearSelection();//清楚选中状态\n        },\n\n        originalState:function (options) {\n            var me = this;\n\n            me.brushWidth = options.drawBrushSize;//同步画笔粗细\n            me.brushColor = options.drawBrushColor;//同步画笔颜色\n\n            context.lineWidth = me.brushWidth;//初始画笔大小\n            context.strokeStyle = me.brushColor;//初始画笔颜色\n            context.fillStyle = \"transparent\";//初始画布背景颜色\n            context.lineCap = \"round\";//去除锯齿\n            context.fill();\n        },\n        _buildToolbarColor:function (colorList) {\n            var tmp = null, arr = [];\n            arr.push(\"<table id='J_colorList'>\");\n            for (var i = 0, color; color = colorList[i++];) {\n                if ((i - 1) % 5 == 0) {\n                    if (i != 1) {\n                        arr.push(\"</tr>\");\n                    }\n                    arr.push(\"<tr>\");\n                }\n                tmp = '#' + color;\n                arr.push(\"<td><a title='\" + tmp + \"' href='javascript:void(0)' style='background-color:\" + tmp + \"'></a></td>\");\n            }\n            arr.push(\"</tr></table>\");\n            $G(\"J_colorBar\").innerHTML = arr.join(\"\");\n        },\n\n        _addBoardListener:function (saveNum) {\n            var me = this,\n                margin = 0,\n                startX = -1,\n                startY = -1,\n                isMouseDown = false,\n                isMouseMove = false,\n                isMouseUp = false,\n                buttonPress = 0, button, flag = '';\n\n            margin = parseInt(domUtils.getComputedStyle($G(\"J_wrap\"), \"margin-left\"));\n            drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n            drawStepIndex += 1;\n\n            domUtils.on(canvas, [\"mousedown\", \"mousemove\", \"mouseup\", \"mouseout\"], function (e) {\n                button = browser.webkit ? e.which : buttonPress;\n                switch (e.type) {\n                    case 'mousedown':\n                        buttonPress = 1;\n                        flag = 1;\n                        isMouseDown = true;\n                        isMouseUp = false;\n                        isMouseMove = false;\n                        me.isScrawl = true;\n                        startX = e.clientX - margin;//10为外边距总和\n                        startY = e.clientY - margin;\n                        context.beginPath();\n                        break;\n                    case 'mousemove' :\n                        if (!flag && button == 0) {\n                            return;\n                        }\n                        if (!flag && button) {\n                            startX = e.clientX - margin;//10为外边距总和\n                            startY = e.clientY - margin;\n                            context.beginPath();\n                            flag = 1;\n                        }\n                        if (isMouseUp || !isMouseDown) {\n                            return;\n                        }\n                        var endX = e.clientX - margin,\n                            endY = e.clientY - margin;\n\n                        context.moveTo(startX, startY);\n                        context.lineTo(endX, endY);\n                        context.stroke();\n                        startX = endX;\n                        startY = endY;\n                        isMouseMove = true;\n                        break;\n                    case 'mouseup':\n                        buttonPress = 0;\n                        if (!isMouseDown)return;\n                        if (!isMouseMove) {\n                            context.arc(startX, startY, context.lineWidth, 0, Math.PI * 2, false);\n                            context.fillStyle = context.strokeStyle;\n                            context.fill();\n                        }\n                        context.closePath();\n                        me._saveOPerate(saveNum);\n                        isMouseDown = false;\n                        isMouseMove = false;\n                        isMouseUp = true;\n                        startX = -1;\n                        startY = -1;\n                        break;\n                    case 'mouseout':\n                        flag = '';\n                        buttonPress = 0;\n                        if (button == 1) return;\n                        context.closePath();\n                        break;\n                }\n            });\n        },\n        _addOPerateListener:function (saveNum) {\n            var me = this;\n            domUtils.on($G(\"J_previousStep\"), \"click\", function () {\n                if (drawStepIndex > 1) {\n                    drawStepIndex -= 1;\n                    context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                    context.putImageData(drawStep[drawStepIndex - 1], 0, 0);\n                    me.btn2Highlight(\"J_nextStep\");\n                    drawStepIndex == 1 && me.btn2disable(\"J_previousStep\");\n                }\n            });\n            domUtils.on($G(\"J_nextStep\"), \"click\", function () {\n                if (drawStepIndex > 0 && drawStepIndex < drawStep.length) {\n                    context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                    context.putImageData(drawStep[drawStepIndex], 0, 0);\n                    drawStepIndex += 1;\n                    me.btn2Highlight(\"J_previousStep\");\n                    drawStepIndex == drawStep.length && me.btn2disable(\"J_nextStep\");\n                }\n            });\n            domUtils.on($G(\"J_clearBoard\"), \"click\", function () {\n                context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                drawStep = [];\n                me._saveOPerate(saveNum);\n                drawStepIndex = 1;\n                me.isScrawl = false;\n                me.btn2disable(\"J_previousStep\");\n                me.btn2disable(\"J_nextStep\");\n                me.btn2disable(\"J_clearBoard\");\n            });\n        },\n        _addColorBarListener:function () {\n            var me = this;\n            domUtils.on($G(\"J_colorBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    color = target.title;\n                if (!!color) {\n                    me._addColorSelect(target);\n\n                    me.brushColor = color;\n                    context.globalCompositeOperation = \"source-over\";\n                    context.lineWidth = me.brushWidth;\n                    context.strokeStyle = color;\n                }\n            });\n        },\n        _addBrushBarListener:function () {\n            var me = this;\n            domUtils.on($G(\"J_brushBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    size = browser.ie ? target.innerText : target.text;\n                if (!!size) {\n                    me._addBESelect(target);\n\n                    context.globalCompositeOperation = \"source-over\";\n                    context.lineWidth = parseInt(size);\n                    context.strokeStyle = me.brushColor;\n                    me.brushWidth = context.lineWidth;\n                }\n            });\n        },\n        _addEraserBarListener:function () {\n            var me = this;\n            domUtils.on($G(\"J_eraserBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    size = browser.ie ? target.innerText : target.text;\n                if (!!size) {\n                    me._addBESelect(target);\n\n                    context.lineWidth = parseInt(size);\n                    context.globalCompositeOperation = \"destination-out\";\n                    context.strokeStyle = \"#FFF\";\n                }\n            });\n        },\n        _addAddImgListener:function () {\n            var file = $G(\"J_imgTxt\");\n            if (!window.FileReader) {\n                $G(\"J_addImg\").style.display = 'none';\n                $G(\"J_removeImg\").style.display = 'none';\n                $G(\"J_sacleBoard\").style.display = 'none';\n            }\n            domUtils.on(file, \"change\", function (e) {\n                var frm = file.parentNode;\n                addMaskLayer(lang.backgroundUploading);\n\n                var target = e.target || e.srcElement,\n                    reader = new FileReader();\n                reader.onload = function(evt){\n                    var target = evt.target || evt.srcElement;\n                    ue_callback(target.result, 'SUCCESS');\n                };\n                reader.readAsDataURL(target.files[0]);\n                frm.reset();\n            });\n        },\n        _addRemoveImgListenter:function () {\n            var me = this;\n            domUtils.on($G(\"J_removeImg\"), \"click\", function () {\n                $G(\"J_picBoard\").innerHTML = \"\";\n                me.btn2disable(\"J_removeImg\");\n                me.btn2disable(\"J_sacleBoard\");\n            });\n        },\n        _addScalePicListenter:function () {\n            domUtils.on($G(\"J_sacleBoard\"), \"click\", function () {\n                var picBoard = $G(\"J_picBoard\"),\n                    scaleCon = $G(\"J_scaleCon\"),\n                    img = picBoard.children[0];\n\n                if (img) {\n                    if (!scaleCon) {\n                        picBoard.style.cssText = \"position:relative;z-index:999;\"+picBoard.style.cssText;\n                        img.style.cssText = \"position: absolute;top:\" + (canvas.height - img.height) / 2 + \"px;left:\" + (canvas.width - img.width) / 2 + \"px;\";\n                        var scale = new ScaleBoy();\n                        picBoard.appendChild(scale.init());\n                        scale.startScale(img);\n                    } else {\n                        if (scaleCon.style.visibility == \"visible\") {\n                            scaleCon.style.visibility = \"hidden\";\n                            picBoard.style.position = \"\";\n                            picBoard.style.zIndex = \"\";\n                        } else {\n                            scaleCon.style.visibility = \"visible\";\n                            picBoard.style.cssText += \"position:relative;z-index:999\";\n                        }\n                    }\n                }\n            });\n        },\n        _addClearSelectionListenter:function () {\n            var doc = document;\n            domUtils.on(doc, 'mousemove', function (e) {\n                if (browser.ie && browser.version < 11)\n                    doc.selection.clear();\n                else\n                    window.getSelection().removeAllRanges();\n            });\n        },\n        _clearSelection:function () {\n            var list = [\"J_operateBar\", \"J_colorBar\", \"J_brushBar\", \"J_eraserBar\", \"J_picBoard\"];\n            for (var i = 0, group; group = list[i++];) {\n                domUtils.unSelectable($G(group));\n            }\n        },\n\n        _saveOPerate:function (saveNum) {\n            var me = this;\n            if (drawStep.length <= saveNum) {\n                if(drawStepIndex<drawStep.length){\n                    me.btn2disable(\"J_nextStep\");\n                    drawStep.splice(drawStepIndex);\n                }\n                drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n                drawStepIndex = drawStep.length;\n            } else {\n                drawStep.shift();\n                drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n                drawStepIndex = drawStep.length;\n            }\n            me.btn2Highlight(\"J_previousStep\");\n            me.btn2Highlight(\"J_clearBoard\");\n        },\n\n        _originalColorSelect:function (title) {\n            var colorList = $G(\"J_colorList\").getElementsByTagName(\"td\");\n            for (var j = 0, cell; cell = colorList[j++];) {\n                if (cell.children[0].title.toLowerCase() == title) {\n                    cell.children[0].style.opacity = 1;\n                }\n            }\n        },\n        _originalBrushSelect:function (text) {\n            var brushList = $G(\"J_brushBar\").children;\n            for (var i = 0, ele; ele = brushList[i++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    var size = browser.ie ? ele.innerText : ele.text;\n                    if (size.toLowerCase() == text) {\n                        ele.style.opacity = 1;\n                    }\n                }\n            }\n        },\n        _addColorSelect:function (target) {\n            var me = this,\n                colorList = $G(\"J_colorList\").getElementsByTagName(\"td\"),\n                eraserList = $G(\"J_eraserBar\").children,\n                brushList = $G(\"J_brushBar\").children;\n\n            for (var i = 0, cell; cell = colorList[i++];) {\n                cell.children[0].style.opacity = 0.3;\n            }\n            for (var k = 0, ele; ele = brushList[k++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    ele.style.opacity = 0.3;\n                    var size = browser.ie ? ele.innerText : ele.text;\n                    if (size.toLowerCase() == this.brushWidth) {\n                        ele.style.opacity = 1;\n                    }\n                }\n            }\n            for (var j = 0, node; node = eraserList[j++];) {\n                if (node.tagName.toLowerCase() == \"a\") {\n                    node.style.opacity = 0.3;\n                }\n            }\n\n            target.style.opacity = 1;\n            target.blur();\n        },\n        _addBESelect:function (target) {\n            var brushList = $G(\"J_brushBar\").children;\n            var eraserList = $G(\"J_eraserBar\").children;\n\n            for (var i = 0, ele; ele = brushList[i++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    ele.style.opacity = 0.3;\n                }\n            }\n            for (var j = 0, node; node = eraserList[j++];) {\n                if (node.tagName.toLowerCase() == \"a\") {\n                    node.style.opacity = 0.3;\n                }\n            }\n\n            target.style.opacity = 1;\n            target.blur();\n        },\n        getCanvasData:function () {\n            var picContainer = $G(\"J_picBoard\"),\n                img = picContainer.children[0];\n            if (img) {\n                var x, y;\n                if (img.style.position == \"absolute\") {\n                    x = parseInt(img.style.left);\n                    y = parseInt(img.style.top);\n                } else {\n                    x = (picContainer.offsetWidth - img.width) / 2;\n                    y = (picContainer.offsetHeight - img.height) / 2;\n                }\n                context.globalCompositeOperation = \"destination-over\";\n                context.drawImage(img, x, y, img.width, img.height);\n            } else {\n                context.globalCompositeOperation = \"destination-atop\";\n                context.fillStyle = \"#fff\";//重置画布背景白色\n                context.fillRect(0, 0, canvas.width, canvas.height);\n            }\n            try {\n                return canvas.toDataURL(\"image/png\").substring(22);\n            } catch (e) {\n                return \"\";\n            }\n        },\n        btn2Highlight:function (id) {\n            var cur = $G(id);\n            cur.className.indexOf(\"H\") == -1 && (cur.className += \"H\");\n        },\n        btn2disable:function (id) {\n            var cur = $G(id);\n            cur.className.indexOf(\"H\") != -1 && (cur.className = cur.className.replace(\"H\", \"\"));\n        },\n        getTarget:function (evt) {\n            return evt.target || evt.srcElement;\n        }\n    };\n})();\n\nvar ScaleBoy = function () {\n    this.dom = null;\n    this.scalingElement = null;\n};\n(function () {\n    function _appendStyle() {\n        var doc = document,\n            head = doc.getElementsByTagName('head')[0],\n            style = doc.createElement('style'),\n            cssText = '.scale{visibility:hidden;cursor:move;position:absolute;left:0;top:0;width:100px;height:50px;background-color:#fff;font-size:0;line-height:0;opacity:.4;filter:Alpha(opacity=40);}'\n                + '.scale span{position:absolute;left:0;top:0;width:6px;height:6px;background-color:#006DAE;}'\n                + '.scale .hand0, .scale .hand7{cursor:nw-resize;}'\n                + '.scale .hand1, .scale .hand6{left:50%;margin-left:-3px;cursor:n-resize;}'\n                + '.scale .hand2, .scale .hand4, .scale .hand7{left:100%;margin-left:-6px;}'\n                + '.scale .hand3, .scale .hand4{top:50%;margin-top:-3px;cursor:w-resize;}'\n                + '.scale .hand5, .scale .hand6, .scale .hand7{margin-top:-6px;top:100%;}'\n                + '.scale .hand2, .scale .hand5{cursor:ne-resize;}';\n        style.type = 'text/css';\n\n        try {\n            style.appendChild(doc.createTextNode(cssText));\n        } catch (e) {\n            style.styleSheet.cssText = cssText;\n        }\n        head.appendChild(style);\n    }\n\n    function _getDom() {\n        var doc = document,\n            hand,\n            arr = [],\n            scale = doc.createElement('div');\n\n        scale.id = 'J_scaleCon';\n        scale.className = 'scale';\n        for (var i = 0; i < 8; i++) {\n            arr.push(\"<span class='hand\" + i + \"'></span>\");\n        }\n        scale.innerHTML = arr.join(\"\");\n        return scale;\n    }\n\n    var rect = [\n        //[left, top, width, height]\n        [1, 1, -1, -1],\n        [0, 1, 0, -1],\n        [0, 1, 1, -1],\n        [1, 0, -1, 0],\n        [0, 0, 1, 0],\n        [1, 0, -1, 1],\n        [0, 0, 0, 1],\n        [0, 0, 1, 1]\n    ];\n    ScaleBoy.prototype = {\n        init:function () {\n            _appendStyle();\n            var me = this,\n                scale = me.dom = _getDom();\n\n            me.scaleMousemove.fp = me;\n            domUtils.on(scale, 'mousedown', function (e) {\n                var target = e.target || e.srcElement;\n                me.start = {x:e.clientX, y:e.clientY};\n                if (target.className.indexOf('hand') != -1) {\n                    me.dir = target.className.replace('hand', '');\n                }\n                domUtils.on(document.body, 'mousemove', me.scaleMousemove);\n                e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\n            });\n            domUtils.on(document.body, 'mouseup', function (e) {\n                if (me.start) {\n                    domUtils.un(document.body, 'mousemove', me.scaleMousemove);\n                    if (me.moved) {\n                        me.updateScaledElement({position:{x:scale.style.left, y:scale.style.top}, size:{w:scale.style.width, h:scale.style.height}});\n                    }\n                    delete me.start;\n                    delete me.moved;\n                    delete me.dir;\n                }\n            });\n            return scale;\n        },\n        startScale:function (objElement) {\n            var me = this, Idom = me.dom;\n\n            Idom.style.cssText = 'visibility:visible;top:' + objElement.style.top + ';left:' + objElement.style.left + ';width:' + objElement.offsetWidth + 'px;height:' + objElement.offsetHeight + 'px;';\n            me.scalingElement = objElement;\n        },\n        updateScaledElement:function (objStyle) {\n            var cur = this.scalingElement,\n                pos = objStyle.position,\n                size = objStyle.size;\n            if (pos) {\n                typeof pos.x != 'undefined' && (cur.style.left = pos.x);\n                typeof pos.y != 'undefined' && (cur.style.top = pos.y);\n            }\n            if (size) {\n                size.w && (cur.style.width = size.w);\n                size.h && (cur.style.height = size.h);\n            }\n        },\n        updateStyleByDir:function (dir, offset) {\n            var me = this,\n                dom = me.dom, tmp;\n\n            rect['def'] = [1, 1, 0, 0];\n            if (rect[dir][0] != 0) {\n                tmp = parseInt(dom.style.left) + offset.x;\n                dom.style.left = me._validScaledProp('left', tmp) + 'px';\n            }\n            if (rect[dir][1] != 0) {\n                tmp = parseInt(dom.style.top) + offset.y;\n                dom.style.top = me._validScaledProp('top', tmp) + 'px';\n            }\n            if (rect[dir][2] != 0) {\n                tmp = dom.clientWidth + rect[dir][2] * offset.x;\n                dom.style.width = me._validScaledProp('width', tmp) + 'px';\n            }\n            if (rect[dir][3] != 0) {\n                tmp = dom.clientHeight + rect[dir][3] * offset.y;\n                dom.style.height = me._validScaledProp('height', tmp) + 'px';\n            }\n            if (dir === 'def') {\n                me.updateScaledElement({position:{x:dom.style.left, y:dom.style.top}});\n            }\n        },\n        scaleMousemove:function (e) {\n            var me = arguments.callee.fp,\n                start = me.start,\n                dir = me.dir || 'def',\n                offset = {x:e.clientX - start.x, y:e.clientY - start.y};\n\n            me.updateStyleByDir(dir, offset);\n            arguments.callee.fp.start = {x:e.clientX, y:e.clientY};\n            arguments.callee.fp.moved = 1;\n        },\n        _validScaledProp:function (prop, value) {\n            var ele = this.dom,\n                wrap = $G(\"J_picBoard\");\n\n            value = isNaN(value) ? 0 : value;\n            switch (prop) {\n                case 'left':\n                    return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value;\n                case 'top':\n                    return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value;\n                case 'width':\n                    return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value;\n                case 'height':\n                    return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value;\n            }\n        }\n    };\n})();\n\n//后台回调\nfunction ue_callback(url, state) {\n    var doc = document,\n        picBorard = $G(\"J_picBoard\"),\n        img = doc.createElement(\"img\");\n\n    //图片缩放\n    function scale(img, max, oWidth, oHeight) {\n        var width = 0, height = 0, percent, ow = img.width || oWidth, oh = img.height || oHeight;\n        if (ow > max || oh > max) {\n            if (ow >= oh) {\n                if (width = ow - max) {\n                    percent = (width / ow).toFixed(2);\n                    img.height = oh - oh * percent;\n                    img.width = max;\n                }\n            } else {\n                if (height = oh - max) {\n                    percent = (height / oh).toFixed(2);\n                    img.width = ow - ow * percent;\n                    img.height = max;\n                }\n            }\n        }\n    }\n\n    //移除遮罩层\n    removeMaskLayer();\n    //状态响应\n    if (state == \"SUCCESS\") {\n        picBorard.innerHTML = \"\";\n        img.onload = function () {\n            scale(this, 300);\n            picBorard.appendChild(img);\n\n            var obj = new scrawl();\n            obj.btn2Highlight(\"J_removeImg\");\n            //trace 2457\n            obj.btn2Highlight(\"J_sacleBoard\");\n        };\n        img.src = url;\n    } else {\n        alert(state);\n    }\n}\n//去掉遮罩层\nfunction removeMaskLayer() {\n    var maskLayer = $G(\"J_maskLayer\");\n    maskLayer.className = \"maskLayerNull\";\n    maskLayer.innerHTML = \"\";\n    dialog.buttons[0].setDisabled(false);\n}\n//添加遮罩层\nfunction addMaskLayer(html) {\n    var maskLayer = $G(\"J_maskLayer\");\n    dialog.buttons[0].setDisabled(true);\n    maskLayer.className = \"maskLayer\";\n    maskLayer.innerHTML = html;\n}\n//执行确认按钮方法\nfunction exec(scrawlObj) {\n    if (scrawlObj.isScrawl) {\n        addMaskLayer(lang.scrawlUpLoading);\n        var base64 = scrawlObj.getCanvasData();\n        if (!!base64) {\n            var options = {\n                timeout:100000,\n                onsuccess:function (xhr) {\n                    if (!scrawlObj.isCancelScrawl) {\n                        var responseObj;\n                        responseObj = eval(\"(\" + xhr.responseText + \")\");\n                        if (responseObj.state == \"SUCCESS\") {\n                            var imgObj = {},\n                                url = editor.options.scrawlUrlPrefix + responseObj.url;\n                            imgObj.src = url;\n                            imgObj._src = url;\n                            imgObj.alt = responseObj.original || '';\n                            editor.execCommand(\"insertImage\", imgObj);\n                            dialog.close();\n                        } else {\n                            alert(responseObj.state);\n                        }\n\n                    }\n                },\n                onerror:function () {\n                    alert(lang.imageError);\n                    dialog.close();\n                }\n            };\n            options[editor.getOpt('scrawlFieldName')] = base64;\n\n            var actionUrl = editor.getActionUrl(editor.getOpt('scrawlActionName')),\n                params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + params);\n            ajax.request(url, options);\n        }\n    } else {\n        addMaskLayer(lang.noScarwl + \"&nbsp;&nbsp;&nbsp;<input type='button' value='\" + lang.continueBtn + \"'  onclick='removeMaskLayer()'/>\");\n    }\n}\n\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/searchreplace/searchreplace.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .warpper{ position:relative;width: 380px; height: 100%; margin: 10px auto;}\n        .tabbody{height: 160px;}\n        .tabbody table{width:100%;border-collapse: separate;border-spacing: 3px;}\n        .tabbody .panel{width:373px;height:100%;padding-left: 5px;position: absolute;background-color: #fff;}\n        .tabbody input.int{ width:190px;height:21px;border:1px solid #d7d7d7;line-height:21px;}\n        .tabbody input.btn{padding: 0 5px; text-align:center;line-height:24px; text-decoration: none;height:24px;background:url(\"../../themes/default/images/dialog-title-bg.png\") repeat-x;border:1px solid #ccc; }\n    </style>\n</head>\n<body>\n<div class=\"warpper\" id=\"searchtab\">\n    <div id=\"head\" class=\"tabhead\">\n        <span  tabsrc=\"find\" class=\"focus\"><var id=\"lang_tab_search\"></var></span>\n        <span  tabsrc=\"replace\" ><var id=\"lang_tab_replace\"></var></span>\n    </div>\n    <div class=\"tabbody\">\n        <div class=\"panel\" id=\"find\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search1\"></var>: </td>\n                    <td><input id=\"findtxt\" type=\"text\" class=\"int\" /></td>\n                </tr>\n                <!--<tr>-->\n\n                    <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_case_sensitive1\"></var></td>\n                    <td>\n                        <input id=\"matchCase\" type=\"checkbox\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextFindBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"preFindBtn\" type=\"button\" class=\"btn\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"search-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n        <div class=\"panel\" id=\"replace\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search2\"></var>: </td>\n                    <td><input id=\"findtxt1\" type=\"text\" class=\"int\"  /></td>\n                </tr>\n                <!--<tr>-->\n\n                    <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg1\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_replace\"></var>: </td>\n                    <td><input id=\"replacetxt\" type=\"text\" class=\"int\" /></td>\n                </tr>\n                <tr>\n                    <td><var id=\"lang_case_sensitive2\"></var></td>\n                    <td>\n                        <input id=\"matchCase1\" type=\"checkbox\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextReplaceBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"preReplaceBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"repalceBtn\" type=\"button\" class=\"btn\" />\n                        <input id=\"repalceAllBtn\" type=\"button\" class=\"btn\" />\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"replace-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"searchreplace.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/searchreplace/searchreplace.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午12:29\n * To change this template use File | Settings | File Templates.\n */\n\n//清空上次查选的痕迹\neditor.firstForSR = 0;\neditor.currentRangeForSR = null;\n//给tab注册切换事件\n/**\n * tab点击处理事件\n * @param tabHeads\n * @param tabBodys\n * @param obj\n */\nfunction clickHandler( tabHeads,tabBodys,obj ) {\n    //head样式更改\n    for ( var k = 0, len = tabHeads.length; k < len; k++ ) {\n        tabHeads[k].className = \"\";\n    }\n    obj.className = \"focus\";\n    //body显隐\n    var tabSrc = obj.getAttribute( \"tabSrc\" );\n    for ( var j = 0, length = tabBodys.length; j < length; j++ ) {\n        var body = tabBodys[j],\n            id = body.getAttribute( \"id\" );\n        if ( id != tabSrc ) {\n            body.style.zIndex = 1;\n        } else {\n            body.style.zIndex = 200;\n        }\n    }\n\n}\n\n/**\n * TAB切换\n * @param tabParentId  tab的父节点ID或者对象本身\n */\nfunction switchTab( tabParentId ) {\n    var tabElements = $G( tabParentId ).children,\n        tabHeads = tabElements[0].children,\n        tabBodys = tabElements[1].children;\n\n    for ( var i = 0, length = tabHeads.length; i < length; i++ ) {\n        var head = tabHeads[i];\n        if ( head.className === \"focus\" )clickHandler(tabHeads,tabBodys, head );\n        head.onclick = function () {\n            clickHandler(tabHeads,tabBodys,this);\n        }\n    }\n}\n$G('searchtab').onmousedown = function(){\n    $G('search-msg').innerHTML = '';\n    $G('replace-msg').innerHTML = ''\n}\n//是否区分大小写\nfunction getMatchCase(id) {\n    return $G(id).checked ? true : false;\n}\n//查找\n$G(\"nextFindBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:1,\n        casesensitive:getMatchCase(\"matchCase\")\n    };\n    if (!frCommond(obj)) {\n        var bk = editor.selection.getRange().createBookmark();\n        $G('search-msg').innerHTML = lang.getEnd;\n        editor.selection.getRange().moveToBookmark(bk).select();\n\n\n    }\n};\n$G(\"nextReplaceBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt1\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:1,\n        casesensitive:getMatchCase(\"matchCase1\")\n    };\n    frCommond(obj);\n};\n$G(\"preFindBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:-1,\n        casesensitive:getMatchCase(\"matchCase\")\n    };\n    if (!frCommond(obj)) {\n        $G('search-msg').innerHTML = lang.getStart;\n    }\n};\n$G(\"preReplaceBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt1\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:-1,\n        casesensitive:getMatchCase(\"matchCase1\")\n    };\n    frCommond(obj);\n};\n//替换\n$G(\"repalceBtn\").onclick = function () {\n    editor.trigger('clearLastSearchResult');\n    var findtxt = $G(\"findtxt1\").value.replace(/^\\s|\\s$/g, \"\"), obj,\n        replacetxt = $G(\"replacetxt\").value.replace(/^\\s|\\s$/g, \"\");\n    if (!findtxt) {\n        return false;\n    }\n    if (findtxt == replacetxt || (!getMatchCase(\"matchCase1\") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        dir:1,\n        casesensitive:getMatchCase(\"matchCase1\"),\n        replaceStr:replacetxt\n    };\n    frCommond(obj);\n};\n//全部替换\n$G(\"repalceAllBtn\").onclick = function () {\n    var findtxt = $G(\"findtxt1\").value.replace(/^\\s|\\s$/g, \"\"), obj,\n        replacetxt = $G(\"replacetxt\").value.replace(/^\\s|\\s$/g, \"\");\n    if (!findtxt) {\n        return false;\n    }\n    if (findtxt == replacetxt || (!getMatchCase(\"matchCase1\") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {\n        return false;\n    }\n    obj = {\n        searchStr:findtxt,\n        casesensitive:getMatchCase(\"matchCase1\"),\n        replaceStr:replacetxt,\n        all:true\n    };\n    var num = frCommond(obj);\n    if (num) {\n        $G('replace-msg').innerHTML = lang.countMsg.replace(\"{#count}\", num);\n    }\n};\n//执行\nvar frCommond = function (obj) {\n    return editor.execCommand(\"searchreplace\", obj);\n};\nswitchTab(\"searchtab\");\n\n\ndialog.onclose = function(){\n    editor.trigger('clearLastSearchResult')\n};"
  },
  {
    "path": "web/console/public/UEditor/dialogs/snapscreen/snapscreen.html",
    "content": "<!DOCTYPE HTML>\n<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n        <title></title>\n        <script type=\"text/javascript\" src=\"../internal.js\"></script>\n        <style type=\"text/css\">\n            *{color: #838383}\n            html,body {\n                font-size: 12px;\n                width:100%;\n                height:100%;\n                overflow: hidden;\n                margin:0px;\n                padding:0px;\n            }\n            h2 { font-size: 16px; margin: 20px auto;}\n            .content{\n                padding:5px 15px 0 15px;\n                height:100%;\n            }\n            dt,dd { margin-left: 0; padding-left: 0;}\n            dt a { display: block;\n                    height: 30px;\n                    line-height: 30px;\n                    width: 55px;\n                    background: #EFEFEF;\n                    border: 1px solid #CCC;\n                    padding: 0 10px;\n                    text-decoration: none;\n            }\n            dt a:hover{\n                background: #e0e0e0;\n                border-color: #999\n            }\n            dt a:active{\n                background: #ccc;\n                border-color: #999;\n                color: #666;\n            }\n            dd { line-height:20px;margin-top: 10px;}\n            span{ padding-right:4px;}\n            input{width:210px;height:21px;background: #FFF;border:1px solid #d7d7d7;padding: 0px; margin: 0px; }\n\n\n        </style>\n    </head>\n    <body>\n        <div class=\"content\">\n            <h2><var id=\"lang_showMsg\"></var></h2>\n            <dl>\n                <dt><a href=\"../../third-party/snapscreen/UEditorSnapscreen.exe\" target=\"_blank\" id=\"downlink\"><var id=\"lang_download\"></var></a></dt>\n                <dd><var id=\"lang_step1\"></var></dd>\n                <dd><var id=\"lang_step2\"></var></dd>\n            </dl>\n        </div>\n    </body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/spechars/spechars.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        html,body{overflow:hidden;}\n        #specharsTab{width: 97%;margin: 10px auto; zoom:1;position: relative}\n        .tabbody {height:447px;}\n        .tabbody span{ margin: 5px 3px;text-align: center;display:inline-block;width: 40px;height:16px;line-height: 16px;cursor: pointer; }\n    </style>\n</head>\n<body>\n    <div id=\"specharsTab\">\n        <div id=\"tabHeads\" class=\"tabhead\"></div><div id=\"tabBodys\" class=\"tabbody\"></div>\n    </div>\n<script type=\"text/javascript\" src=\"spechars.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/spechars/spechars.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午1:09\n * To change this template use File | Settings | File Templates.\n */\nvar charsContent = [\n    { name:\"tsfh\", title:lang.tsfh, content:toArray(\"、,。,·,ˉ,ˇ,¨,〃,々,—,～,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,＄,¤,￠,￡,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,￢,￤,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞\")},\n    { name:\"lmsz\", title:lang.lmsz, content:toArray(\"ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ\")},\n    { name:\"szfh\", title:lang.szfh, content:toArray(\"⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩\")},\n    { name:\"rwfh\", title:lang.rwfh, content:toArray(\"ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ\")},\n    { name:\"xlzm\", title:lang.xlzm, content:toArray(\"Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω\")},\n    { name:\"ewzm\", title:lang.ewzm, content:toArray(\"А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я\")},\n    { name:\"pyzm\", title:lang.pyzm, content:toArray(\"ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü\")},\n    { name:\"yyyb\", title:lang.yyyb, content:toArray(\"i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,\")},\n    { name:\"zyzf\", title:lang.zyzf, content:toArray(\"ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ\")}\n];\n(function createTab(content) {\n    for (var i = 0, ci; ci = content[i++];) {\n        var span = document.createElement(\"span\");\n        span.setAttribute(\"tabSrc\", ci.name);\n        span.innerHTML = ci.title;\n        if (i == 1)span.className = \"focus\";\n        domUtils.on(span, \"click\", function () {\n            var tmps = $G(\"tabHeads\").children;\n            for (var k = 0, sk; sk = tmps[k++];) {\n                sk.className = \"\";\n            }\n            tmps = $G(\"tabBodys\").children;\n            for (var k = 0, sk; sk = tmps[k++];) {\n                sk.style.display = \"none\";\n            }\n            this.className = \"focus\";\n            $G(this.getAttribute(\"tabSrc\")).style.display = \"\";\n        });\n        $G(\"tabHeads\").appendChild(span);\n        domUtils.insertAfter(span, document.createTextNode(\"\\n\"));\n        var div = document.createElement(\"div\");\n        div.id = ci.name;\n        div.style.display = (i == 1) ? \"\" : \"none\";\n        var cons = ci.content;\n        for (var j = 0, con; con = cons[j++];) {\n            var charSpan = document.createElement(\"span\");\n            charSpan.innerHTML = con;\n            domUtils.on(charSpan, \"click\", function () {\n                editor.execCommand(\"insertHTML\", this.innerHTML);\n                dialog.close();\n            });\n            div.appendChild(charSpan);\n        }\n        $G(\"tabBodys\").appendChild(div);\n    }\n})(charsContent);\nfunction toArray(str) {\n    return str.split(\",\");\n}\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/table/edittable.css",
    "content": "body{\n    overflow: hidden;\n    width: 540px;\n}\n.wrapper {\n    margin: 10px auto 0;\n    font-size: 12px;\n    overflow: hidden;\n    width: 520px;\n    height: 315px;\n}\n\n.clear {\n    clear: both;\n}\n\n.wrapper .left {\n    float: left;\n    margin-left: 10px;;\n}\n\n.wrapper .right {\n    float: right;\n    border-left: 2px dotted #EDEDED;\n    padding-left: 15px;\n}\n\n.section {\n    margin-bottom: 15px;\n    width: 240px;\n    overflow: hidden;\n}\n\n.section h3 {\n    font-weight: bold;\n    padding: 5px 0;\n    margin-bottom: 10px;\n    border-bottom: 1px solid #EDEDED;\n    font-size: 12px;\n}\n\n.section ul {\n    list-style: none;\n    overflow: hidden;\n    clear: both;\n\n}\n\n.section li {\n    float: left;\n    width: 120px;;\n}\n\n.section .tone {\n    width: 80px;;\n}\n\n.section .preview {\n    width: 220px;\n}\n\n.section .preview table {\n    text-align: center;\n    vertical-align: middle;\n    color: #666;\n}\n\n.section .preview caption {\n    font-weight: bold;\n}\n\n.section .preview td {\n    border-width: 1px;\n    border-style: solid;\n    height: 22px;\n}\n\n.section .preview th {\n    border-style: solid;\n    border-color: #DDD;\n    border-width: 2px 1px 1px 1px;\n    height: 22px;\n    background-color: #F7F7F7;\n}"
  },
  {
    "path": "web/console/public/UEditor/dialogs/table/edittable.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"edittable.css\">\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"left\">\n        <div class=\"section\">\n            <h3><var id=\"lang_tableStyle\"></var></h3>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_title\" name=\"style\"/><var id=\"lang_insertTitle\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_titleCol\" name=\"style\"/><var id=\"lang_insertTitleCol\"></var></label>\n                </li>\n            </ul>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_caption\" name=\"style\"/><var id=\"lang_insertCaption\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_sorttable\" name=\"style\"/><var id=\"lang_orderbycontent\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_tableSize\"></var></h3>\n            <ul>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizeContent\" name=\"size\"/><var id=\"lang_autoSizeContent\"></var></label>\n                </li>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizePage\" name=\"size\"/><var id=\"lang_autoSizePage\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_borderStyle\"></var></h3>\n            <ul>\n                <li>\n                    <span><var id=\"lang_color\"></var></span>\n                    <input type=\"text\" class=\"tone\" id=\"J_tone\" readonly='readonly' />\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n    </div>\n    <div class=\"right\">\n        <div class=\"section\">\n            <h3><var id=\"lang_example\"></var></h3>\n            <div class=\"preview\" id=\"J_preview\">\n            </div>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"edittable.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/table/edittable.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-12-19\n * Time: 下午4:55\n * To change this template use File | Settings | File Templates.\n */\n(function () {\n    var title = $G(\"J_title\"),\n        titleCol = $G(\"J_titleCol\"),\n        caption = $G(\"J_caption\"),\n        sorttable = $G(\"J_sorttable\"),\n        autoSizeContent = $G(\"J_autoSizeContent\"),\n        autoSizePage = $G(\"J_autoSizePage\"),\n        tone = $G(\"J_tone\"),\n        me,\n        preview = $G(\"J_preview\");\n\n    var editTable = function () {\n        me = this;\n        me.init();\n    };\n    editTable.prototype = {\n        init:function () {\n            var colorPiker = new UE.ui.ColorPicker({\n                    editor:editor\n                }),\n                colorPop = new UE.ui.Popup({\n                    editor:editor,\n                    content:colorPiker\n                });\n\n            title.checked = editor.queryCommandState(\"inserttitle\") == -1;\n            titleCol.checked = editor.queryCommandState(\"inserttitlecol\") == -1;\n            caption.checked = editor.queryCommandState(\"insertcaption\") == -1;\n            sorttable.checked = editor.queryCommandState(\"enablesort\") == 1;\n\n            var enablesortState = editor.queryCommandState(\"enablesort\"),\n                disablesortState = editor.queryCommandState(\"disablesort\");\n\n            sorttable.checked = !!(enablesortState < 0 && disablesortState >=0);\n            sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0);\n            sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:'';\n\n            me.createTable(title.checked, titleCol.checked, caption.checked);\n            me.setAutoSize();\n            me.setColor(me.getColor());\n\n            domUtils.on(title, \"click\", me.titleHanler);\n            domUtils.on(titleCol, \"click\", me.titleColHanler);\n            domUtils.on(caption, \"click\", me.captionHanler);\n            domUtils.on(sorttable, \"click\", me.sorttableHanler);\n            domUtils.on(autoSizeContent, \"click\", me.autoSizeContentHanler);\n            domUtils.on(autoSizePage, \"click\", me.autoSizePageHanler);\n\n            domUtils.on(tone, \"click\", function () {\n                colorPop.showAnchor(tone);\n            });\n            domUtils.on(document, 'mousedown', function () {\n                colorPop.hide();\n            });\n            colorPiker.addListener(\"pickcolor\", function () {\n                me.setColor(arguments[1]);\n                colorPop.hide();\n            });\n            colorPiker.addListener(\"picknocolor\", function () {\n                me.setColor(\"\");\n                colorPop.hide();\n            });\n        },\n\n        createTable:function (hasTitle, hasTitleCol, hasCaption) {\n            var arr = [],\n                sortSpan = '<span>^</span>';\n            arr.push(\"<table id='J_example'>\");\n            if (hasCaption) {\n                arr.push(\"<caption>\" + lang.captionName + \"</caption>\")\n            }\n            if (hasTitle) {\n                arr.push(\"<tr>\");\n                if(hasTitleCol) { arr.push(\"<th>\" + lang.titleName + \"</th>\"); }\n                for (var j = 0; j < 5; j++) {\n                    arr.push(\"<th>\" + lang.titleName + \"</th>\");\n                }\n                arr.push(\"</tr>\");\n            }\n            for (var i = 0; i < 6; i++) {\n                arr.push(\"<tr>\");\n                if(hasTitleCol) { arr.push(\"<th>\" + lang.titleName + \"</th>\") }\n                for (var k = 0; k < 5; k++) {\n                    arr.push(\"<td>\" + lang.cellsName + \"</td>\")\n                }\n                arr.push(\"</tr>\");\n            }\n            arr.push(\"</table>\");\n            preview.innerHTML = arr.join(\"\");\n            this.updateSortSpan();\n        },\n        titleHanler:function () {\n            var example = $G(\"J_example\"),\n                frg=document.createDocumentFragment(),\n                color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, \"td\")[0], \"border-color\"),\n                colCount = example.rows[0].children.length;\n\n            if (title.checked) {\n                example.insertRow(0);\n                for (var i = 0, node; i < colCount; i++) {\n                    node = document.createElement(\"th\");\n                    node.innerHTML = lang.titleName;\n                    frg.appendChild(node);\n                }\n                example.rows[0].appendChild(frg);\n\n            } else {\n                domUtils.remove(example.rows[0]);\n            }\n            me.setColor(color);\n            me.updateSortSpan();\n        },\n        titleColHanler:function () {\n            var example = $G(\"J_example\"),\n                color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, \"td\")[0], \"border-color\"),\n                colArr = example.rows,\n                colCount = colArr.length;\n\n            if (titleCol.checked) {\n                for (var i = 0, node; i < colCount; i++) {\n                    node = document.createElement(\"th\");\n                    node.innerHTML = lang.titleName;\n                    colArr[i].insertBefore(node, colArr[i].children[0]);\n                }\n            } else {\n                for (var i = 0; i < colCount; i++) {\n                    domUtils.remove(colArr[i].children[0]);\n                }\n            }\n            me.setColor(color);\n            me.updateSortSpan();\n        },\n        captionHanler:function () {\n            var example = $G(\"J_example\");\n            if (caption.checked) {\n                var row = document.createElement('caption');\n                row.innerHTML = lang.captionName;\n                example.insertBefore(row, example.firstChild);\n            } else {\n                domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]);\n            }\n        },\n        sorttableHanler:function(){\n            me.updateSortSpan();\n        },\n        autoSizeContentHanler:function () {\n            var example = $G(\"J_example\");\n            example.removeAttribute(\"width\");\n        },\n        autoSizePageHanler:function () {\n            var example = $G(\"J_example\");\n            var tds = example.getElementsByTagName(example, \"td\");\n            utils.each(tds, function (td) {\n                td.removeAttribute(\"width\");\n            });\n            example.setAttribute('width', '100%');\n        },\n        updateSortSpan: function(){\n            var example = $G(\"J_example\"),\n                row = example.rows[0];\n\n            var spans = domUtils.getElementsByTagName(example,\"span\");\n            utils.each(spans,function(span){\n                span.parentNode.removeChild(span);\n            });\n            if (sorttable.checked) {\n                utils.each(row.cells, function(cell, i){\n                    var span = document.createElement(\"span\");\n                    span.innerHTML = \"^\";\n                    cell.appendChild(span);\n                });\n            }\n        },\n        getColor:function () {\n            var start = editor.selection.getStart(), color,\n                cell = domUtils.findParentByTagName(start, [\"td\", \"th\", \"caption\"], true);\n            color = cell && domUtils.getComputedStyle(cell, \"border-color\");\n            if (!color)  color = \"#DDDDDD\";\n            return color;\n        },\n        setColor:function (color) {\n            var example = $G(\"J_example\"),\n                arr = domUtils.getElementsByTagName(example, \"td\").concat(\n                    domUtils.getElementsByTagName(example, \"th\"),\n                    domUtils.getElementsByTagName(example, \"caption\")\n                );\n\n            tone.value = color;\n            utils.each(arr, function (node) {\n                node.style.borderColor = color;\n            });\n\n        },\n        setAutoSize:function () {\n            var me = this;\n            autoSizePage.checked = true;\n            me.autoSizePageHanler();\n        }\n    };\n\n    new editTable;\n\n    dialog.onok = function () {\n        editor.__hasEnterExecCommand = true;\n\n        var checks = {\n            title:\"inserttitle deletetitle\",\n            titleCol:\"inserttitlecol deletetitlecol\",\n            caption:\"insertcaption deletecaption\",\n            sorttable:\"enablesort disablesort\"\n        };\n        editor.fireEvent('saveScene');\n        for(var i in checks){\n            var cmds = checks[i].split(\" \"),\n                input = $G(\"J_\" + i);\n            if(input[\"checked\"]){\n                editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]);\n            }else{\n                editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]);\n            }\n        }\n\n        editor.execCommand(\"edittable\", tone.value);\n        autoSizeContent.checked ?editor.execCommand('adaptbytext') : \"\";\n        autoSizePage.checked ? editor.execCommand(\"adaptbywindow\") : \"\";\n        editor.fireEvent('saveScene');\n\n        editor.__hasEnterExecCommand = false;\n    };\n})();"
  },
  {
    "path": "web/console/public/UEditor/dialogs/table/edittd.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .section {\n            text-align: center;\n            margin-top: 10px;\n        }\n        .section input {\n            margin-left: 5px;\n            width: 70px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <span><var id=\"lang_tdBkColor\"></var></span>\n    <input type=\"text\" id=\"J_tone\"/>\n</div>\n<script type=\"text/javascript\">\n    var tone = $G(\"J_tone\"),\n            colorPiker = new UE.ui.ColorPicker({\n                editor:editor\n            }),\n            colorPop = new UE.ui.Popup({\n                editor:editor,\n                content:colorPiker\n            });\n    domUtils.on(tone, \"click\", function () {\n        colorPop.showAnchor(tone);\n    });\n    domUtils.on(document, 'mousedown', function () {\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"pickcolor\", function () {\n        tone.value = arguments[1];\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"picknocolor\", function () {\n        tone.value=\"\";\n        colorPop.hide();\n    });\n    dialog.onok=function(){\n        editor.execCommand(\"edittd\",tone.value);\n    };\n\n    var start = editor.selection.getStart(),\n        cell = start && domUtils.findParentByTagName(start, [\"td\", \"th\"], true);\n    if(cell){\n        var color = domUtils.getComputedStyle(cell,'background-color');\n        if(/^#/.test(color)){\n            tone.value = color\n        }\n\n    }\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/table/edittip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title>表格删除提示</title>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .section {\n            width: 200px;\n            margin: 10px auto 0;\n            font-size: 14px;\n        }\n\n        .item {\n            text-align: center;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delRow\" name=\"cmd\" checked/><var id=\"lang_delRow\"></var></label>\n    </div>\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delCol\" name=\"cmd\"/><var id=\"lang_delCol\"></var></label>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    dialog.onok = function () {\n        $G(\"J_delRow\").checked ? editor.execCommand(\"deleterow\") : editor.execCommand(\"deletecol\");\n    };\n</script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/template/config.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-8-8\n * Time: 下午2:00\n * To change this template use File | Settings | File Templates.\n */\nvar templates = [\n    {\n        \"pre\":\"pre0.png\",\n        'title':lang.blank,\n        'preHtml':'<p class=\"ue_t\">&nbsp;欢迎使用UEditor！</p>',\n        \"html\":'<p class=\"ue_t\">欢迎使用UEditor！</p>'\n\n    },\n    {\n        \"pre\":\"pre1.png\",\n        'title':lang.blog,\n        'preHtml':'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">深入理解Range</span></h1><p style=\"text-align:center;\"><strong class=\" \">UEditor二次开发</strong></p><h3><span class=\" \" style=\"font-family:幼圆\">什么是Range</span></h3><p style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 </p><br /><h3><span class=\" \" style=\"font-family:幼圆\">Range能干什么</span></h3><p style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。</p>',\n        \"html\":'<h1 class=\"ue_t\" label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">[键入文档标题]</span></h1><p style=\"text-align:center;\"><strong class=\"ue_t\">[键入文档副标题]</strong></p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 1]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 2]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观，还是使用某种直接指定的格式。 </p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 3]</span></h3><p class=\"ue_t\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><p class=\"ue_t\"><br /></p>'\n\n    },\n    {\n        \"pre\":\"pre2.png\",\n        'title':lang.resume,\n        'preHtml':'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\" \">WEB前端开发简历</span></h1><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"100\" style=\"text-align:center;\"><p><span style=\"background-color:transparent;\">插</span><br /></p><p>入</p><p>照</p><p>片</p></td><td><p><span style=\"background-color:transparent;\"> 联系电话：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电话]</span><br /></p><p><span style=\"background-color:transparent;\"> 电子邮件：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电子邮件地址]</span><br /></p><p><span style=\"background-color:transparent;\"> 家庭住址：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的地址]</span><br /></p></td></tr></tbody></table><h3><span style=\"color:#E36C09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\" \">WEB前端研发工程师</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">﻿</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[起止时间]</span> <span class=\"ue_t\">[学校名称] </span> <span class=\"ue_t\">[所学专业]</span> <span class=\"ue_t\">[所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><p><br /></p>',\n        \"html\":'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\"ue_t\">[此处键入简历标题]</span></h1><p><span style=\"color:#e36c09;\"><br /></span></p><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"200\" style=\"text-align:center;\" class=\"ue_t\">【此处插入照片】</td><td><p><br /></p><p> 联系电话：<span class=\"ue_t\">[键入您的电话]</span></p><p><br /></p><p> 电子邮件：<span class=\"ue_t\">[键入您的电子邮件地址]</span></p><p><br /></p><p> 家庭住址：<span class=\"ue_t\">[键入您的地址]</span></p><p><br /></p></td></tr></tbody></table><h3><span style=\"color:#e36c09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\"ue_t\">[此处键入您的期望职位]</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">﻿</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称] </span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称]</span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol></ol><p><span style=\"color:#e36c09;font-size:20px;\">掌握技能</span></p><p style=\"text-indent:2em;\"> &nbsp;<span class=\"ue_t\">[这里可以键入您所掌握的技能]</span><br /></p>'\n\n    },\n    {\n        \"pre\":\"pre3.png\",\n        'title':lang.richText,\n        'preHtml':'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"150\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:150px;height:100px;float:left;\" />图文混排方法</p><p>图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文</p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"100\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:100px;height:100px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p>',\n        \"html\":'<p><br /></p><h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"300\" height=\"200\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:200px;float:left;\" />图文混排方法</p><p>1. 图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文本</p><p><br /></p><p>2. 图片居右，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居右对齐，然后即可在左边输入多行文本</p><p><br /></p><p>3. 图片居中环绕排版</p><p>方法：亲，这个真心没有办法。。。</p><p><br /></p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"300\" height=\"300\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:300px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p><br /></p>'\n    },\n    {\n        \"pre\":\"pre4.png\",\n        'title':lang.sciPapers,\n        'preHtml':'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><br /></p>',\n        'html':'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个列表瞅瞅：</span></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以多行</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">右边是图片</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">绝对没有问题的，不信你也可以试试看</span></p><p><br /></p>'\n    }\n];"
  },
  {
    "path": "web/console/public/UEditor/dialogs/template/template.css",
    "content": ".wrap{ padding: 5px;font-size: 14px;}\n.left{width:425px;float: left;}\n.right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;}\n.right .pre{height: 332px;overflow-y: auto;}\n.right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;}\n.right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;}\n.right .preitem img{display: block;margin: 0 auto;width:100px;}\n.clear{clear: both;}\n.top{height:26px;line-height: 26px;padding: 5px;}\n.bottom{height:320px;width:100%;margin: 0 auto;}\n.transparent{ background: url(\"images/bg.gif\") repeat;}\n.bottom table tr td{border:1px dashed #ccc;}\n#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;}\n.border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}\np{margin: 5px 0}\ntable{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;}\nli{clear:both}\nol{padding-left:40px; }"
  },
  {
    "path": "web/console/public/UEditor/dialogs/template/template.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"template.css\">\n</head>\n<body>\n    <div class=\"wrap\">\n        <div class=\"left\">\n            <div class=\"top\">\n                <label><var id=\"lang_template_clear\"></var>：<input id=\"issave\" type=\"checkbox\"></label>\n            </div>\n            <div class=\"bottom border_style1\" id=\"preview\"></div>\n        </div>\n        <fieldset  class=\"right border_style1\">\n            <legend><var id=\"lang_template_select\"></var></legend>\n            <div class=\"pre\" id=\"preitem\"></div>\n        </fieldset>\n        <div class=\"clear\"></div>\n    </div>\n    <script type=\"text/javascript\" src=\"config.js\"></script>\n    <script type=\"text/javascript\" src=\"template.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/template/template.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-8-8\n * Time: 下午2:09\n * To change this template use File | Settings | File Templates.\n */\n(function () {\n    var me = editor,\n            preview = $G( \"preview\" ),\n            preitem = $G( \"preitem\" ),\n            tmps = templates,\n            currentTmp;\n    var initPre = function () {\n        var str = \"\";\n        for ( var i = 0, tmp; tmp = tmps[i++]; ) {\n            str += '<div class=\"preitem\" onclick=\"pre(' + i + ')\"><img src=\"' + \"images/\" + tmp.pre + '\" ' + (tmp.title ? \"alt=\" + tmp.title + \" title=\" + tmp.title + \"\" : \"\") + '></div>';\n        }\n        preitem.innerHTML = str;\n    };\n    var pre = function ( n ) {\n        var tmp = tmps[n - 1];\n        currentTmp = tmp;\n        clearItem();\n        domUtils.setStyles( preitem.childNodes[n - 1], {\n            \"background-color\":\"lemonChiffon\",\n            \"border\":\"#ccc 1px solid\"\n        } );\n        preview.innerHTML = tmp.preHtml ? tmp.preHtml : \"\";\n    };\n    var clearItem = function () {\n        var items = preitem.children;\n        for ( var i = 0, item; item = items[i++]; ) {\n            domUtils.setStyles( item, {\n                \"background-color\":\"\",\n                \"border\":\"white 1px solid\"\n            } );\n        }\n    };\n    dialog.onok = function () {\n        if ( !$G( \"issave\" ).checked ){\n            me.execCommand( \"cleardoc\" );\n        }\n        var obj = {\n            html:currentTmp && currentTmp.html\n        };\n        me.execCommand( \"template\", obj );\n    };\n    initPre();\n    window.pre = pre;\n    pre(2)\n\n})();"
  },
  {
    "path": "web/console/public/UEditor/dialogs/video/video.css",
    "content": "@charset \"utf-8\";\n.wrapper{ width: 570px;_width:575px;margin: 10px auto; zoom:1;position: relative}\n.tabbody{height: 335px;}\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n.tabbody .panel.focus {\n    width: 100%;\n    height: 335px;\n    display: block;\n}\n\n.tabbody .panel table td{vertical-align: middle;}\n#videoUrl {\n    width: 490px;\n    height: 21px;\n    line-height: 21px;\n    margin: 8px 5px;\n    background: #FFF;\n    border: 1px solid #d7d7d7;\n}\n#videoSearchTxt{margin-left:15px;background: #FFF;width:200px;height:21px;line-height:21px;border: 1px solid #d7d7d7;}\n#searchList{width: 570px;overflow: auto;zoom:1;height: 270px;}\n#searchList div{float: left;width: 120px;height: 135px;margin: 5px 15px;}\n#searchList img{margin: 2px 8px;cursor: pointer;border: 2px solid #fff} /*不用缩略图*/\n#searchList p{margin-left: 10px;}\n#videoType{\n    width: 65px;\n    height: 23px;\n    line-height: 22px;\n    border: 1px solid #d7d7d7;\n}\n#videoSearchBtn,#videoSearchReset{\n    /*width: 80px;*/\n    height: 25px;\n    line-height: 25px;\n    background: #eee;\n    border: 1px solid #d7d7d7;\n    cursor: pointer;\n    padding: 0 5px;\n}\n\n\n\n#preview{position: relative;width: 420px;padding:0;overflow: hidden; margin-left: 10px; _margin-left:5px; height: 280px;background-color: #ddd;float: left}\n#preview .previewMsg {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color: #666;}\n#preview .previewMsg span{display:block;margin: 125px auto 0 auto;text-align:center;font-size:18px;color:#fff;}\n#preview .previewVideo {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;}\n.edui-video-wrapper fieldset{\n    border: 1px solid #ddd;\n    padding-left: 5px;\n    margin-bottom: 20px;\n    padding-bottom: 5px;\n    width: 115px;\n}\n\n#videoInfo {width: 120px;float: left;margin-left: 10px;_margin-left:7px;}\nfieldset{\n    border: 1px solid #ddd;\n    padding-left: 5px;\n    margin-bottom: 20px;\n    padding-bottom: 5px;\n    width: 115px;\n}\nfieldset legend{font-weight: bold;}\nfieldset p{line-height: 30px;}\nfieldset input.txt{\n    width: 65px;\n    height: 21px;\n    line-height: 21px;\n    margin: 8px 5px;\n    background: #FFF;\n    border: 1px solid #d7d7d7;\n}\nlabel.url{font-weight: bold;margin-left: 5px;color: #06c;}\n#videoFloat div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;}\n#videoFloat .focus{opacity: 1;filter: alpha(opacity = 100)}\nspan.view{display: inline-block;width: 30px;float: right;cursor: pointer;color: blue}\n\n\n\n\n/* upload video */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 335px;\n    display: block;\n    clip: auto;\n}\n#upload_alignment div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;}\n#upload_alignment .focus{opacity: 1;filter: alpha(opacity = 100)}\n#upload_left { width:427px; float:left; }\n#upload_left .controller { height: 30px; clear: both; }\n#uploadVideoInfo{margin-top:10px;float:right;padding-right:8px;}\n\n#upload .queueList {\n    margin: 0;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    margin-right:0;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 161px;\n    padding-top: 150px;\n    text-align: center;\n    width: 97%;\n    float: left;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top:0;\n    *margin-left: 0;\n    *left: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 285px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 15px 0 0 20px;\n    *margin: 15px 0 0 15px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n#upload .filelist li p.imgWrap.notimage {\n    margin-top: 0;\n    width: 111px;\n    height: 111px;\n    border: 1px #eeeeee solid;\n}\n#upload .filelist li p.imgWrap.notimage i.file-preview {\n    margin-top: 15px;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display:none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background-image: url(./images/success.gif) \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n#upload .filelist li.filePickerBlock div.webuploader-pick  {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0,0,0,0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display:none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display:none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused{\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover{\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter:alpha(opacity=60);\n    -moz-opacity:0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n/* 在线文件的文件预览图标 */\ni.file-preview {\n    display: block;\n    margin: 10px auto;\n    width: 70px;\n    height: 70px;\n    background-image: url(\"./images/file-icons.png\");\n    background-image: url(\"./images/file-icons.gif\") \\9;\n    background-position: -140px center;\n    background-repeat: no-repeat;\n}\ni.file-preview.file-type-dir{\n    background-position: 0 center;\n}\ni.file-preview.file-type-file{\n    background-position: -140px center;\n}\ni.file-preview.file-type-filelist{\n    background-position: -210px center;\n}\ni.file-preview.file-type-zip,\ni.file-preview.file-type-rar,\ni.file-preview.file-type-7z,\ni.file-preview.file-type-tar,\ni.file-preview.file-type-gz,\ni.file-preview.file-type-bz2{\n    background-position: -280px center;\n}\ni.file-preview.file-type-xls,\ni.file-preview.file-type-xlsx{\n    background-position: -350px center;\n}\ni.file-preview.file-type-doc,\ni.file-preview.file-type-docx{\n    background-position: -420px center;\n}\ni.file-preview.file-type-ppt,\ni.file-preview.file-type-pptx{\n    background-position: -490px center;\n}\ni.file-preview.file-type-vsd{\n    background-position: -560px center;\n}\ni.file-preview.file-type-pdf{\n    background-position: -630px center;\n}\ni.file-preview.file-type-txt,\ni.file-preview.file-type-md,\ni.file-preview.file-type-json,\ni.file-preview.file-type-htm,\ni.file-preview.file-type-xml,\ni.file-preview.file-type-html,\ni.file-preview.file-type-js,\ni.file-preview.file-type-css,\ni.file-preview.file-type-php,\ni.file-preview.file-type-jsp,\ni.file-preview.file-type-asp{\n    background-position: -700px center;\n}\ni.file-preview.file-type-apk{\n    background-position: -770px center;\n}\ni.file-preview.file-type-exe{\n    background-position: -840px center;\n}\ni.file-preview.file-type-ipa{\n    background-position: -910px center;\n}\ni.file-preview.file-type-mp4,\ni.file-preview.file-type-swf,\ni.file-preview.file-type-mkv,\ni.file-preview.file-type-avi,\ni.file-preview.file-type-flv,\ni.file-preview.file-type-mov,\ni.file-preview.file-type-mpg,\ni.file-preview.file-type-mpeg,\ni.file-preview.file-type-ogv,\ni.file-preview.file-type-webm,\ni.file-preview.file-type-rm,\ni.file-preview.file-type-rmvb{\n    background-position: -980px center;\n}\ni.file-preview.file-type-ogg,\ni.file-preview.file-type-wav,\ni.file-preview.file-type-wmv,\ni.file-preview.file-type-mid,\ni.file-preview.file-type-mp3{\n    background-position: -1050px center;\n}\ni.file-preview.file-type-jpg,\ni.file-preview.file-type-jpeg,\ni.file-preview.file-type-gif,\ni.file-preview.file-type-bmp,\ni.file-preview.file-type-png,\ni.file-preview.file-type-psd{\n    background-position: -140px center;\n}"
  },
  {
    "path": "web/console/public/UEditor/dialogs/video/video.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"video.css\" />\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"videoTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"video\" class=\"focus\" data-content-id=\"video\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" data-content-id=\"upload\"><var id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"video\" class=\"panel focus\">\n               <table><tr><td><label for=\"videoUrl\" class=\"url\"><var id=\"lang_video_url\"></var></label></td><td><input id=\"videoUrl\" type=\"text\"></td></tr></table>\n               <div id=\"preview\"></div>\n               <div id=\"videoInfo\">\n                   <fieldset>\n                       <legend><var id=\"lang_video_size\"></var></legend>\n                       <table>\n                           <tr><td><label for=\"videoWidth\"><var id=\"lang_videoW\"></var></label></td><td><input class=\"txt\" id=\"videoWidth\" type=\"text\"/></td></tr>\n                           <tr><td><label for=\"videoHeight\"><var id=\"lang_videoH\"></var></label></td><td><input class=\"txt\" id=\"videoHeight\" type=\"text\"/></td></tr>\n                       </table>\n                   </fieldset>\n                   <fieldset>\n                      <legend><var id=\"lang_alignment\"></var></legend>\n                      <div id=\"videoFloat\"></div>\n                  </fieldset>\n               </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div><div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadVideoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_size\"></var></legend>\n                        <table>\n                            <tr><td><label><var id=\"lang_upload_width\"></var></label></td><td><input class=\"txt\" id=\"upload_width\" type=\"text\"/></td></tr>\n                            <tr><td><label><var id=\"lang_upload_height\"></var></label></td><td><input class=\"txt\" id=\"upload_height\" type=\"text\"/></td></tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.min.js\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.min.js\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css\">\n\n<!-- video -->\n<script type=\"text/javascript\" src=\"video.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/video/video.js",
    "content": "/**\n * Created by JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-2-20\n * Time: 上午11:19\n * To change this template use File | Settings | File Templates.\n */\n\n;(function () {\n  var video = {},\n    uploadVideoList = [],\n    isModifyUploadVideo = false,\n    uploadFile\n\n  window.onload = function () {\n    $focus($G('videoUrl'))\n    initTabs()\n    initVideo()\n    initUpload()\n  }\n\n  /* 初始化tab标签 */\n  function initTabs() {\n    var tabs = $G('tabHeads').children\n    for (var i = 0; i < tabs.length; i++) {\n      domUtils.on(tabs[i], 'click', function (e) {\n        var j,\n          bodyId,\n          target = e.target || e.srcElement\n        for (j = 0; j < tabs.length; j++) {\n          bodyId = tabs[j].getAttribute('data-content-id')\n          if (tabs[j] == target) {\n            domUtils.addClass(tabs[j], 'focus')\n            domUtils.addClass($G(bodyId), 'focus')\n          } else {\n            domUtils.removeClasses(tabs[j], 'focus')\n            domUtils.removeClasses($G(bodyId), 'focus')\n          }\n        }\n      })\n    }\n  }\n\n  function initVideo() {\n    createAlignButton(['videoFloat', 'upload_alignment'])\n    addUrlChangeListener($G('videoUrl'))\n    addOkListener()\n\n    //编辑视频时初始化相关信息\n    ;(function () {\n      var img = editor.selection.getRange().getClosedNode(),\n        url\n      if (img && img.className) {\n        var hasFakedClass = img.className == 'edui-faked-video',\n          hasUploadClass = img.className.indexOf('edui-upload-video') != -1\n        if (hasFakedClass || hasUploadClass) {\n          $G('videoUrl').value = url = img.getAttribute('_url')\n          $G('videoWidth').value = img.width\n          $G('videoHeight').value = img.height\n          var align = domUtils.getComputedStyle(img, 'float'),\n            parentAlign = domUtils.getComputedStyle(\n              img.parentNode,\n              'text-align'\n            )\n          updateAlignButton(parentAlign === 'center' ? 'center' : align)\n        }\n        if (hasUploadClass) {\n          isModifyUploadVideo = true\n        }\n      }\n      createPreviewVideo(url)\n    })()\n  }\n\n  /**\n   * 监听确认和取消两个按钮事件，用户执行插入或者清空正在播放的视频实例操作\n   */\n  function addOkListener() {\n    dialog.onok = function () {\n      $G('preview').innerHTML = ''\n      var currentTab = findFocus('tabHeads', 'tabSrc')\n      switch (currentTab) {\n        case 'video':\n          return insertSingle()\n          break\n        case 'videoSearch':\n          return insertSearch('searchList')\n          break\n        case 'upload':\n          return insertUpload()\n          break\n      }\n    }\n    dialog.oncancel = function () {\n      $G('preview').innerHTML = ''\n    }\n  }\n\n  /**\n   * 依据传入的align值更新按钮信息\n   * @param align\n   */\n  function updateAlignButton(align) {\n    var aligns = $G('videoFloat').children\n    for (var i = 0, ci; (ci = aligns[i++]); ) {\n      if (ci.getAttribute('name') == align) {\n        if (ci.className != 'focus') {\n          ci.className = 'focus'\n        }\n      } else {\n        if (ci.className == 'focus') {\n          ci.className = ''\n        }\n      }\n    }\n  }\n\n  /**\n   * 将单个视频信息插入编辑器中\n   */\n  function insertSingle() {\n    var width = $G('videoWidth'),\n      height = $G('videoHeight'),\n      url = $G('videoUrl').value,\n      align = findFocus('videoFloat', 'name')\n    if (!url) return false\n    if (!checkNum([width, height])) return false\n    editor.execCommand(\n      'insertvideo',\n      {\n        url: convert_url(url),\n        width: width.value,\n        height: height.value,\n        align: align,\n      },\n      isModifyUploadVideo ? 'upload' : null\n    )\n  }\n\n  /**\n   * 将元素id下的所有代表视频的图片插入编辑器中\n   * @param id\n   */\n  function insertSearch(id) {\n    var imgs = domUtils.getElementsByTagName($G(id), 'img'),\n      videoObjs = []\n    for (var i = 0, img; (img = imgs[i++]); ) {\n      if (img.getAttribute('selected')) {\n        videoObjs.push({\n          url: img.getAttribute('ue_video_url'),\n          width: 420,\n          height: 280,\n          align: 'none',\n        })\n      }\n    }\n    editor.execCommand('insertvideo', videoObjs)\n  }\n\n  /**\n   * 找到id下具有focus类的节点并返回该节点下的某个属性\n   * @param id\n   * @param returnProperty\n   */\n  function findFocus(id, returnProperty) {\n    var tabs = $G(id).children,\n      property\n    for (var i = 0, ci; (ci = tabs[i++]); ) {\n      if (ci.className == 'focus') {\n        property = ci.getAttribute(returnProperty)\n        break\n      }\n    }\n    return property\n  }\n  function convert_url(url) {\n    if (!url) return ''\n    url = utils\n      .trim(url)\n      .replace(\n        /v\\.youku\\.com\\/v_show\\/id_([\\w\\-=]+)\\.html/i,\n        'player.youku.com/player.php/sid/$1/v.swf'\n      )\n      .replace(\n        /(www\\.)?youtube\\.com\\/watch\\?v=([\\w\\-]+)/i,\n        'www.youtube.com/v/$2'\n      )\n      .replace(/youtu.be\\/(\\w+)$/i, 'www.youtube.com/v/$1')\n      .replace(\n        /v\\.ku6\\.com\\/.+\\/([\\w\\.]+)\\.html.*$/i,\n        'player.ku6.com/refer/$1/v.swf'\n      )\n      .replace(\n        /www\\.56\\.com\\/u\\d+\\/v_([\\w\\-]+)\\.html/i,\n        'player.56.com/v_$1.swf'\n      )\n      .replace(\n        /www.56.com\\/w\\d+\\/play_album\\-aid\\-\\d+_vid\\-([^.]+)\\.html/i,\n        'player.56.com/v_$1.swf'\n      )\n      .replace(\n        /v\\.pps\\.tv\\/play_([\\w]+)\\.html.*$/i,\n        'player.pps.tv/player/sid/$1/v.swf'\n      )\n      .replace(\n        /www\\.letv\\.com\\/ptv\\/vplay\\/([\\d]+)\\.html.*$/i,\n        'i7.imgs.letv.com/player/swfPlayer.swf?id=$1&autoplay=0'\n      )\n      .replace(\n        /www\\.tudou\\.com\\/programs\\/view\\/([\\w\\-]+)\\/?/i,\n        'www.tudou.com/v/$1'\n      )\n      .replace(\n        /v\\.qq\\.com\\/cover\\/[\\w]+\\/[\\w]+\\/([\\w]+)\\.html/i,\n        'static.video.qq.com/TPout.swf?vid=$1'\n      )\n      .replace(\n        /v\\.qq\\.com\\/.+[\\?\\&]vid=([^&]+).*$/i,\n        'static.video.qq.com/TPout.swf?vid=$1'\n      )\n      .replace(\n        /my\\.tv\\.sohu\\.com\\/[\\w]+\\/[\\d]+\\/([\\d]+)\\.shtml.*$/i,\n        'share.vrs.sohu.com/my/v.swf&id=$1'\n      )\n\n    return url\n  }\n\n  /**\n   * 检测传入的所有input框中输入的长宽是否是正数\n   * @param nodes input框集合，\n   */\n  function checkNum(nodes) {\n    for (var i = 0, ci; (ci = nodes[i++]); ) {\n      var value = ci.value\n      if (!isNumber(value) && value) {\n        alert(lang.numError)\n        ci.value = ''\n        ci.focus()\n        return false\n      }\n    }\n    return true\n  }\n\n  /**\n   * 数字判断\n   * @param value\n   */\n  function isNumber(value) {\n    return /(0|^[1-9]\\d*$)/.test(value)\n  }\n\n  /**\n   * 创建图片浮动选择按钮\n   * @param ids\n   */\n  function createAlignButton(ids) {\n    for (var i = 0, ci; (ci = ids[i++]); ) {\n      var floatContainer = $G(ci),\n        nameMaps = {\n          none: lang['default'],\n          left: lang.floatLeft,\n          right: lang.floatRight,\n          center: lang.block,\n        }\n      for (var j in nameMaps) {\n        var div = document.createElement('div')\n        div.setAttribute('name', j)\n        if (j == 'none') div.className = 'focus'\n        div.style.cssText = 'background:url(images/' + j + '_focus.jpg);'\n        div.setAttribute('title', nameMaps[j])\n        floatContainer.appendChild(div)\n      }\n      switchSelect(ci)\n    }\n  }\n\n  /**\n   * 选择切换\n   * @param selectParentId\n   */\n  function switchSelect(selectParentId) {\n    var selects = $G(selectParentId).children\n    for (var i = 0, ci; (ci = selects[i++]); ) {\n      domUtils.on(ci, 'click', function () {\n        for (var j = 0, cj; (cj = selects[j++]); ) {\n          cj.className = ''\n          cj.removeAttribute && cj.removeAttribute('class')\n        }\n        this.className = 'focus'\n      })\n    }\n  }\n\n  /**\n   * 监听url改变事件\n   * @param url\n   */\n  function addUrlChangeListener(url) {\n    if (browser.ie) {\n      url.onpropertychange = function () {\n        createPreviewVideo(this.value)\n      }\n    } else {\n      url.addEventListener(\n        'input',\n        function () {\n          createPreviewVideo(this.value)\n        },\n        false\n      )\n    }\n  }\n\n  /**\n   * 根据url生成视频预览\n   * @param url\n   */\n  function createPreviewVideo(url) {\n    if (!url) return\n\n    var conUrl = convert_url(url)\n\n    $G('preview').innerHTML =\n      '<div class=\"previewMsg\"><span>' +\n      lang.urlError +\n      '</span></div>' +\n      '<embed class=\"previewVideo\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"' +\n      ' src=\"' +\n      conUrl +\n      '\"' +\n      ' width=\"' +\n      420 +\n      '\"' +\n      ' height=\"' +\n      280 +\n      '\"' +\n      ' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >' +\n      '</embed>'\n  }\n\n  /* 插入上传视频 */\n  function insertUpload() {\n    var videoObjs = [],\n      uploadDir = editor.getOpt('videoUrlPrefix'),\n      width = $G('upload_width').value || 420,\n      height = $G('upload_height').value || 280,\n      align = findFocus('upload_alignment', 'name') || 'none'\n    for (var key in uploadVideoList) {\n      var file = uploadVideoList[key]\n      videoObjs.push({\n        url: uploadDir + file.url,\n        width: width,\n        height: height,\n        align: align,\n      })\n    }\n\n    var count = uploadFile.getQueueCount()\n    if (count) {\n      $('.info', '#queueList').html(\n        '<span style=\"color:red;\">' +\n          '还有2个未上传文件'.replace(/[\\d]/, count) +\n          '</span>'\n      )\n      return false\n    } else {\n      editor.execCommand('insertvideo', videoObjs, 'upload')\n    }\n  }\n\n  /*初始化上传标签*/\n  function initUpload() {\n    uploadFile = new UploadFile('queueList')\n  }\n\n  /* 上传附件 */\n  function UploadFile(target) {\n    this.$wrap = target.constructor == String ? $('#' + target) : $(target)\n    this.init()\n  }\n  UploadFile.prototype = {\n    init: function () {\n      this.fileList = []\n      this.initContainer()\n      this.initUploader()\n    },\n    initContainer: function () {\n      this.$queue = this.$wrap.find('.filelist')\n    },\n    /* 初始化容器 */\n    initUploader: function () {\n      var _this = this,\n        $ = jQuery, // just in case. Make sure it's not an other libaray.\n        $wrap = _this.$wrap,\n        // 图片容器\n        $queue = $wrap.find('.filelist'),\n        // 状态栏，包括进度和控制按钮\n        $statusBar = $wrap.find('.statusBar'),\n        // 文件总体选择信息。\n        $info = $statusBar.find('.info'),\n        // 上传按钮\n        $upload = $wrap.find('.uploadBtn'),\n        // 上传按钮\n        $filePickerBtn = $wrap.find('.filePickerBtn'),\n        // 上传按钮\n        $filePickerBlock = $wrap.find('.filePickerBlock'),\n        // 没选择文件之前的内容。\n        $placeHolder = $wrap.find('.placeholder'),\n        // 总体进度条\n        $progress = $statusBar.find('.progress').hide(),\n        // 添加的文件数量\n        fileCount = 0,\n        // 添加的文件总大小\n        fileSize = 0,\n        // 优化retina, 在retina下这个值是2\n        ratio = window.devicePixelRatio || 1,\n        // 缩略图大小\n        thumbnailWidth = 113 * ratio,\n        thumbnailHeight = 113 * ratio,\n        // 可能有pedding, ready, uploading, confirm, done.\n        state = '',\n        // 所有文件的进度信息，key为file id\n        percentages = {},\n        supportTransition = (function () {\n          var s = document.createElement('p').style,\n            r =\n              'transition' in s ||\n              'WebkitTransition' in s ||\n              'MozTransition' in s ||\n              'msTransition' in s ||\n              'OTransition' in s\n          s = null\n          return r\n        })(),\n        // WebUploader实例\n        uploader,\n        actionUrl = editor.getActionUrl(editor.getOpt('videoActionName')),\n        fileMaxSize = editor.getOpt('videoMaxSize'),\n        acceptExtensions = (editor.getOpt('videoAllowFiles') || [])\n          .join('')\n          .replace(/\\./g, ',')\n          .replace(/^[,]/, '')\n\n      if (!WebUploader.Uploader.support()) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorNotSupport))\n          .hide()\n        return\n      } else if (!editor.getOpt('videoActionName')) {\n        $('#filePickerReady')\n          .after($('<div>').html(lang.errorLoadConfig))\n          .hide()\n        return\n      }\n\n      uploader = _this.uploader = WebUploader.create({\n        pick: {\n          id: '#filePickerReady',\n          label: lang.uploadSelectFile,\n        },\n        swf: '../../third-party/webuploader/Uploader.swf',\n        server: actionUrl,\n        fileVal: editor.getOpt('videoFieldName'),\n        duplicate: true,\n        fileSingleSizeLimit: fileMaxSize,\n        compress: false,\n      })\n      uploader.addButton({\n        id: '#filePickerBlock',\n      })\n      uploader.addButton({\n        id: '#filePickerBtn',\n        label: lang.uploadAddFile,\n      })\n\n      setState('pedding')\n\n      // 当有文件添加进来时执行，负责view的创建\n      function addFile(file) {\n        var $li = $(\n            '<li id=\"' +\n              file.id +\n              '\">' +\n              '<p class=\"title\">' +\n              file.name +\n              '</p>' +\n              '<p class=\"imgWrap\"></p>' +\n              '<p class=\"progress\"><span></span></p>' +\n              '</li>'\n          ),\n          $btns = $(\n            '<div class=\"file-panel\">' +\n              '<span class=\"cancel\">' +\n              lang.uploadDelete +\n              '</span>' +\n              '<span class=\"rotateRight\">' +\n              lang.uploadTurnRight +\n              '</span>' +\n              '<span class=\"rotateLeft\">' +\n              lang.uploadTurnLeft +\n              '</span></div>'\n          ).appendTo($li),\n          $prgress = $li.find('p.progress span'),\n          $wrap = $li.find('p.imgWrap'),\n          $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n          showError = function (code) {\n            switch (code) {\n              case 'exceed_size':\n                text = lang.errorExceedSize\n                break\n              case 'interrupt':\n                text = lang.errorInterrupt\n                break\n              case 'http':\n                text = lang.errorHttp\n                break\n              case 'not_allow_type':\n                text = lang.errorFileType\n                break\n              default:\n                text = lang.errorUploadRetry\n                break\n            }\n            $info.text(text).show()\n          }\n\n        if (file.getStatus() === 'invalid') {\n          showError(file.statusText)\n        } else {\n          $wrap.text(lang.uploadPreview)\n          if (\n            '|png|jpg|jpeg|bmp|gif|'.indexOf(\n              '|' + file.ext.toLowerCase() + '|'\n            ) == -1\n          ) {\n            $wrap\n              .empty()\n              .addClass('notimage')\n              .append(\n                '<i class=\"file-preview file-type-' +\n                  file.ext.toLowerCase() +\n                  '\"></i>' +\n                  '<span class=\"file-title\">' +\n                  file.name +\n                  '</span>'\n              )\n          } else {\n            if (browser.ie && browser.version <= 7) {\n              $wrap.text(lang.uploadNoPreview)\n            } else {\n              uploader.makeThumb(\n                file,\n                function (error, src) {\n                  if (\n                    error ||\n                    !src ||\n                    (/^data:/.test(src) && browser.ie && browser.version <= 7)\n                  ) {\n                    $wrap.text(lang.uploadNoPreview)\n                  } else {\n                    var $img = $('<img src=\"' + src + '\">')\n                    $wrap.empty().append($img)\n                    $img.on('error', function () {\n                      $wrap.text(lang.uploadNoPreview)\n                    })\n                  }\n                },\n                thumbnailWidth,\n                thumbnailHeight\n              )\n            }\n          }\n          percentages[file.id] = [file.size, 0]\n          file.rotation = 0\n\n          /* 检查文件格式 */\n          if (\n            !file.ext ||\n            acceptExtensions.indexOf(file.ext.toLowerCase()) == -1\n          ) {\n            showError('not_allow_type')\n            uploader.removeFile(file)\n          }\n        }\n\n        file.on('statuschange', function (cur, prev) {\n          if (prev === 'progress') {\n            $prgress.hide().width(0)\n          } else if (prev === 'queued') {\n            $li.off('mouseenter mouseleave')\n            $btns.remove()\n          }\n          // 成功\n          if (cur === 'error' || cur === 'invalid') {\n            showError(file.statusText)\n            percentages[file.id][1] = 1\n          } else if (cur === 'interrupt') {\n            showError('interrupt')\n          } else if (cur === 'queued') {\n            percentages[file.id][1] = 0\n          } else if (cur === 'progress') {\n            $info.hide()\n            $prgress.css('display', 'block')\n          } else if (cur === 'complete') {\n          }\n\n          $li.removeClass('state-' + prev).addClass('state-' + cur)\n        })\n\n        $li.on('mouseenter', function () {\n          $btns.stop().animate({ height: 30 })\n        })\n        $li.on('mouseleave', function () {\n          $btns.stop().animate({ height: 0 })\n        })\n\n        $btns.on('click', 'span', function () {\n          var index = $(this).index(),\n            deg\n\n          switch (index) {\n            case 0:\n              uploader.removeFile(file)\n              return\n            case 1:\n              file.rotation += 90\n              break\n            case 2:\n              file.rotation -= 90\n              break\n          }\n\n          if (supportTransition) {\n            deg = 'rotate(' + file.rotation + 'deg)'\n            $wrap.css({\n              '-webkit-transform': deg,\n              '-mos-transform': deg,\n              '-o-transform': deg,\n              transform: deg,\n            })\n          } else {\n            $wrap.css(\n              'filter',\n              'progid:DXImageTransform.Microsoft.BasicImage(rotation=' +\n                (~~(((file.rotation / 90) % 4) + 4) % 4) +\n                ')'\n            )\n          }\n        })\n\n        $li.insertBefore($filePickerBlock)\n      }\n\n      // 负责view的销毁\n      function removeFile(file) {\n        var $li = $('#' + file.id)\n        delete percentages[file.id]\n        updateTotalProgress()\n        $li.off().find('.file-panel').off().end().remove()\n      }\n\n      function updateTotalProgress() {\n        var loaded = 0,\n          total = 0,\n          spans = $progress.children(),\n          percent\n\n        $.each(percentages, function (k, v) {\n          total += v[0]\n          loaded += v[0] * v[1]\n        })\n\n        percent = total ? loaded / total : 0\n\n        spans.eq(0).text(Math.round(percent * 100) + '%')\n        spans.eq(1).css('width', Math.round(percent * 100) + '%')\n        updateStatus()\n      }\n\n      function setState(val, files) {\n        if (val != state) {\n          var stats = uploader.getStats()\n\n          $upload.removeClass('state-' + state)\n          $upload.addClass('state-' + val)\n\n          switch (val) {\n            /* 未选择文件 */\n            case 'pedding':\n              $queue.addClass('element-invisible')\n              $statusBar.addClass('element-invisible')\n              $placeHolder.removeClass('element-invisible')\n              $progress.hide()\n              $info.hide()\n              uploader.refresh()\n              break\n\n            /* 可以开始上传 */\n            case 'ready':\n              $placeHolder.addClass('element-invisible')\n              $queue.removeClass('element-invisible')\n              $statusBar.removeClass('element-invisible')\n              $progress.hide()\n              $info.show()\n              $upload.text(lang.uploadStart)\n              uploader.refresh()\n              break\n\n            /* 上传中 */\n            case 'uploading':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadPause)\n              break\n\n            /* 暂停上传 */\n            case 'paused':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadContinue)\n              break\n\n            case 'confirm':\n              $progress.show()\n              $info.hide()\n              $upload.text(lang.uploadStart)\n\n              stats = uploader.getStats()\n              if (stats.successNum && !stats.uploadFailNum) {\n                setState('finish')\n                return\n              }\n              break\n\n            case 'finish':\n              $progress.hide()\n              $info.show()\n              if (stats.uploadFailNum) {\n                $upload.text(lang.uploadRetry)\n              } else {\n                $upload.text(lang.uploadStart)\n              }\n              break\n          }\n\n          state = val\n          updateStatus()\n        }\n\n        if (!_this.getQueueCount()) {\n          $upload.addClass('disabled')\n        } else {\n          $upload.removeClass('disabled')\n        }\n      }\n\n      function updateStatus() {\n        var text = '',\n          stats\n\n        if (state === 'ready') {\n          text = lang.updateStatusReady\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n        } else if (state === 'confirm') {\n          stats = uploader.getStats()\n          if (stats.uploadFailNum) {\n            text = lang.updateStatusConfirm\n              .replace('_', stats.successNum)\n              .replace('_', stats.successNum)\n          }\n        } else {\n          stats = uploader.getStats()\n          text = lang.updateStatusFinish\n            .replace('_', fileCount)\n            .replace('_KB', WebUploader.formatSize(fileSize))\n            .replace('_', stats.successNum)\n\n          if (stats.uploadFailNum) {\n            text += lang.updateStatusError.replace('_', stats.uploadFailNum)\n          }\n        }\n        $info.html(text)\n      }\n\n      uploader.on('fileQueued', function (file) {\n        fileCount++\n        fileSize += file.size\n\n        if (fileCount === 1) {\n          $placeHolder.addClass('element-invisible')\n          $statusBar.show()\n        }\n\n        addFile(file)\n      })\n\n      uploader.on('fileDequeued', function (file) {\n        if (fileCount > 0) {\n          fileCount--\n          fileSize -= file.size\n        }\n\n        removeFile(file)\n        updateTotalProgress()\n      })\n\n      uploader.on('filesQueued', function (file) {\n        if (\n          !uploader.isInProgress() &&\n          (state == 'pedding' ||\n            state == 'finish' ||\n            state == 'confirm' ||\n            state == 'ready')\n        ) {\n          setState('ready')\n        }\n        updateTotalProgress()\n      })\n\n      uploader.on('all', function (type, files) {\n        switch (type) {\n          case 'uploadFinished':\n            setState('confirm', files)\n            break\n          case 'startUpload':\n            /* 添加额外的GET参数 */\n            var params =\n                utils.serializeParam(editor.queryCommandValue('serverparam')) ||\n                '',\n              url = utils.formatUrl(\n                actionUrl +\n                  (actionUrl.indexOf('?') == -1 ? '?' : '&') +\n                  'encode=utf-8&' +\n                  params\n              )\n            uploader.option('server', url)\n            setState('uploading', files)\n            break\n          case 'stopUpload':\n            setState('paused', files)\n            break\n        }\n      })\n\n      uploader.on('uploadBeforeSend', function (file, data, header) {\n        //这里可以通过data对象添加POST参数\n        if (actionUrl.toLowerCase().indexOf('jsp') != -1) {\n          header['X_Requested_With'] = 'XMLHttpRequest'\n        }\n      })\n\n      uploader.on('uploadProgress', function (file, percentage) {\n        var $li = $('#' + file.id),\n          $percent = $li.find('.progress span')\n\n        $percent.css('width', percentage * 100 + '%')\n        percentages[file.id][1] = percentage\n        updateTotalProgress()\n      })\n\n      uploader.on('uploadSuccess', function (file, ret) {\n        var $file = $('#' + file.id)\n        try {\n          var responseText = ret._raw || ret,\n            json = utils.str2json(responseText)\n          if (json.state == 'SUCCESS') {\n            uploadVideoList.push({\n              url: json.url,\n              type: json.type,\n              original: json.original,\n            })\n            $file.append('<span class=\"success\"></span>')\n          } else {\n            $file.find('.error').text(json.state).show()\n          }\n        } catch (e) {\n          $file.find('.error').text(lang.errorServerUpload).show()\n        }\n      })\n\n      uploader.on('uploadError', function (file, code) {})\n      uploader.on('error', function (code, file) {\n        if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {\n          addFile(file)\n        }\n      })\n      uploader.on('uploadComplete', function (file, ret) {})\n\n      $upload.on('click', function () {\n        if ($(this).hasClass('disabled')) {\n          return false\n        }\n\n        if (state === 'ready') {\n          uploader.upload()\n        } else if (state === 'paused') {\n          uploader.upload()\n        } else if (state === 'uploading') {\n          uploader.stop()\n        }\n      })\n\n      $upload.addClass('state-' + state)\n      updateTotalProgress()\n    },\n    getQueueCount: function () {\n      var file,\n        i,\n        status,\n        readyFile = 0,\n        files = this.uploader.getFiles()\n      for (i = 0; (file = files[i++]); ) {\n        status = file.getStatus()\n        if (status == 'queued' || status == 'uploading' || status == 'progress')\n          readyFile++\n      }\n      return readyFile\n    },\n    refresh: function () {\n      this.uploader.refresh()\n    },\n  }\n})()\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/webapp/webapp.html",
    "content": "<!DOCTYPE>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .wrapper{width: 540px; margin: 10px auto;}\n        #appShow {border: 1px solid #ddd;}\n        .errorMsg{font-size: 13px;margin: 10px;color: #dd0000}\n    </style>\n</head>\n<body>\n    <div class=\"wrapper\">\n        <div id=\"appShow\"></div>\n    </div>\n    <script type=\"text/javascript\">\n        //此处配置您在百度上申请到的appkey。\n        var apikey = editor.options.webAppKey;\n        if ( apikey && apikey.length == 24 ) {\n            var searchConfig = {\n                container:'appShow', //容器ID\n                tips:\"\", //该值用于自动清空\n                search:1, //是否显示搜索框\n                ps:12, //每页显示的条数\n                suggest:1, //是否开启搜索自动完成\n                limit:0, //搜索结果显示条数，0表示无限制\n                searchNow:0, //是否在初始化完成时立即搜索\n                apikey:apikey, //每人得\n                pager:1,\n                cid:7134562,\n                outputHTML:1\n            },baiduApp;\n\n            function clickCallback() {\n                baiduApp.addEventListener( 'getAppHTML', function ( e, data ) {\n                    var url = 'http://app.baidu.com/app/enter?appid='+data.data['app_id'] +'&tn=app_canvas&app_spce_id=1&apikey='+apikey+'&api_key=' + apikey;\n                    editor.execCommand( \"webapp\", {url:url,width:data.uniWidth,height:data.uniHeight+60,logo:data.data['app_logo'],title:data.data['app_name']});\n                    dialog.close();\n                } );\n            }\n\n            var script = document.createElement( \"script\" );\n            script.type = \"text/javascript\";\n            script.src = \"http://app.baidu.com/appweb/api/search?auto=yes&container=container&apikey=\" + apikey + \"&instanceName=baiduApp&callback=clickCallback&config=searchConfig\";\n            document.body.appendChild( script );\n        } else {\n            $G( \"appShow\" ).innerHTML = \"<p class='errorMsg'>\"+lang.tip1+\"<a title='\"+lang.anthorApi+\"' href='http://app.baidu.com/static/cms/getapikey.html' target='_blank'>\"+lang.applyFor+\"</a></p><p class='errorMsg'>\"+lang.tip2+\"</p>\" ;\n        }\n\n    </script>\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/wordimage/tangram.js",
    "content": "// Copyright (c) 2009, Baidu Inc. All rights reserved.\n// \n// Licensed under the BSD License\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//      http:// tangram.baidu.com/license.html\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n /**\n * @namespace T Tangram七巧板\n * @name T\n * @version 1.6.0\n*/\n\n/**\n * 声明baidu包\n * @author: allstar, erik, meizz, berg\n */\nvar T,\n    baidu = T = baidu || {version: \"1.5.0\"};\nbaidu.guid = \"$BAIDU$\";\nbaidu.$$ = window[baidu.guid] = window[baidu.guid] || {global:{}};\n\n/**\n * 使用flash资源封装的一些功能\n * @namespace baidu.flash\n */\nbaidu.flash = baidu.flash || {};\n\n/**\n * 操作dom的方法\n * @namespace baidu.dom \n */\nbaidu.dom = baidu.dom || {};\n\n\n/**\n * 从文档中获取指定的DOM元素\n * @name baidu.dom.g\n * @function\n * @grammar baidu.dom.g(id)\n * @param {string|HTMLElement} id 元素的id或DOM元素.\n * @shortcut g,T.G\n * @meta standard\n * @see baidu.dom.q\n *\n * @return {HTMLElement|null} 获取的元素，查找不到时返回null,如果参数不合法，直接返回参数.\n */\nbaidu.dom.g = function(id) {\n    if (!id) return null;\n    if ('string' == typeof id || id instanceof String) {\n        return document.getElementById(id);\n    } else if (id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) {\n        return id;\n    }\n    return null;\n};\nbaidu.g = baidu.G = baidu.dom.g;\n\n\n/**\n * 操作数组的方法\n * @namespace baidu.array\n */\n\nbaidu.array = baidu.array || {};\n\n\n/**\n * 遍历数组中所有元素\n * @name baidu.array.each\n * @function\n * @grammar baidu.array.each(source, iterator[, thisObject])\n * @param {Array} source 需要遍历的数组\n * @param {Function} iterator 对每个数组元素进行调用的函数，该函数有两个参数，第一个为数组元素，第二个为数组索引值，function (item, index)。\n * @param {Object} [thisObject] 函数调用时的this指针，如果没有此参数，默认是当前遍历的数组\n * @remark\n * each方法不支持对Object的遍历,对Object的遍历使用baidu.object.each 。\n * @shortcut each\n * @meta standard\n *             \n * @returns {Array} 遍历的数组\n */\n \nbaidu.each = baidu.array.forEach = baidu.array.each = function (source, iterator, thisObject) {\n    var returnValue, item, i, len = source.length;\n    \n    if ('function' == typeof iterator) {\n        for (i = 0; i < len; i++) {\n            item = source[i];\n            returnValue = iterator.call(thisObject || source, item, i);\n    \n            if (returnValue === false) {\n                break;\n            }\n        }\n    }\n    return source;\n};\n\n/**\n * 对语言层面的封装，包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。\n * @namespace baidu.lang\n */\nbaidu.lang = baidu.lang || {};\n\n\n/**\n * 判断目标参数是否为function或Function实例\n * @name baidu.lang.isFunction\n * @function\n * @grammar baidu.lang.isFunction(source)\n * @param {Any} source 目标参数\n * @version 1.2\n * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate\n * @meta standard\n * @returns {boolean} 类型判断结果\n */\nbaidu.lang.isFunction = function (source) {\n    return '[object Function]' == Object.prototype.toString.call(source);\n};\n\n/**\n * 判断目标参数是否string类型或String对象\n * @name baidu.lang.isString\n * @function\n * @grammar baidu.lang.isString(source)\n * @param {Any} source 目标参数\n * @shortcut isString\n * @meta standard\n * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate\n *             \n * @returns {boolean} 类型判断结果\n */\nbaidu.lang.isString = function (source) {\n    return '[object String]' == Object.prototype.toString.call(source);\n};\nbaidu.isString = baidu.lang.isString;\n\n\n/**\n * 判断浏览器类型和特性的属性\n * @namespace baidu.browser\n */\nbaidu.browser = baidu.browser || {};\n\n\n/**\n * 判断是否为opera浏览器\n * @property opera opera版本号\n * @grammar baidu.browser.opera\n * @meta standard\n * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.chrome\n * @returns {Number} opera版本号\n */\n\n/**\n * opera 从10开始不是用opera后面的字符串进行版本的判断\n * 在Browser identification最后添加Version + 数字进行版本标识\n * opera后面的数字保持在9.80不变\n */\nbaidu.browser.opera = /opera(\\/| )(\\d+(\\.\\d+)?)(.+?(version\\/(\\d+(\\.\\d+)?)))?/i.test(navigator.userAgent) ?  + ( RegExp[\"\\x246\"] || RegExp[\"\\x242\"] ) : undefined;\n\n\n/**\n * 在目标元素的指定位置插入HTML代码\n * @name baidu.dom.insertHTML\n * @function\n * @grammar baidu.dom.insertHTML(element, position, html)\n * @param {HTMLElement|string} element 目标元素或目标元素的id\n * @param {string} position 插入html的位置信息，取值为beforeBegin,afterBegin,beforeEnd,afterEnd\n * @param {string} html 要插入的html\n * @remark\n * \n * 对于position参数，大小写不敏感<br>\n * 参数的意思：beforeBegin&lt;span&gt;afterBegin   this is span! beforeEnd&lt;/span&gt; afterEnd <br />\n * 此外，如果使用本函数插入带有script标签的HTML字符串，script标签对应的脚本将不会被执行。\n * \n * @shortcut insertHTML\n * @meta standard\n *             \n * @returns {HTMLElement} 目标元素\n */\nbaidu.dom.insertHTML = function (element, position, html) {\n    element = baidu.dom.g(element);\n    var range,begin;\n    if (element.insertAdjacentHTML && !baidu.browser.opera) {\n        element.insertAdjacentHTML(position, html);\n    } else {\n        range = element.ownerDocument.createRange();\n        position = position.toUpperCase();\n        if (position == 'AFTERBEGIN' || position == 'BEFOREEND') {\n            range.selectNodeContents(element);\n            range.collapse(position == 'AFTERBEGIN');\n        } else {\n            begin = position == 'BEFOREBEGIN';\n            range[begin ? 'setStartBefore' : 'setEndAfter'](element);\n            range.collapse(begin);\n        }\n        range.insertNode(range.createContextualFragment(html));\n    }\n    return element;\n};\n\nbaidu.insertHTML = baidu.dom.insertHTML;\n\n/**\n * 操作flash对象的方法，包括创建flash对象、获取flash对象以及判断flash插件的版本号\n * @namespace baidu.swf\n */\nbaidu.swf = baidu.swf || {};\n\n\n/**\n * 浏览器支持的flash插件版本\n * @property version 浏览器支持的flash插件版本\n * @grammar baidu.swf.version\n * @return {String} 版本号\n * @meta standard\n */\nbaidu.swf.version = (function () {\n    var n = navigator;\n    if (n.plugins && n.mimeTypes.length) {\n        var plugin = n.plugins[\"Shockwave Flash\"];\n        if (plugin && plugin.description) {\n            return plugin.description\n                    .replace(/([a-zA-Z]|\\s)+/, \"\")\n                    .replace(/(\\s)+r/, \".\") + \".0\";\n        }\n    } else if (window.ActiveXObject && !window.opera) {\n        for (var i = 12; i >= 2; i--) {\n            try {\n                var c = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + i);\n                if (c) {\n                    var version = c.GetVariable(\"$version\");\n                    return version.replace(/WIN/g,'').replace(/,/g,'.');\n                }\n            } catch(e) {}\n        }\n    }\n})();\n\n/**\n * 操作字符串的方法\n * @namespace baidu.string\n */\nbaidu.string = baidu.string || {};\n\n\n/**\n * 对目标字符串进行html编码\n * @name baidu.string.encodeHTML\n * @function\n * @grammar baidu.string.encodeHTML(source)\n * @param {string} source 目标字符串\n * @remark\n * 编码字符有5个：&<>\"'\n * @shortcut encodeHTML\n * @meta standard\n * @see baidu.string.decodeHTML\n *             \n * @returns {string} html编码后的字符串\n */\nbaidu.string.encodeHTML = function (source) {\n    return String(source)\n                .replace(/&/g,'&amp;')\n                .replace(/</g,'&lt;')\n                .replace(/>/g,'&gt;')\n                .replace(/\"/g, \"&quot;\")\n                .replace(/'/g, \"&#39;\");\n};\n\nbaidu.encodeHTML = baidu.string.encodeHTML;\n\n/**\n * 创建flash对象的html字符串\n * @name baidu.swf.createHTML\n * @function\n * @grammar baidu.swf.createHTML(options)\n * \n * @param {Object} \toptions \t\t\t\t\t创建flash的选项参数\n * @param {string} \toptions.id \t\t\t\t\t要创建的flash的标识\n * @param {string} \toptions.url \t\t\t\tflash文件的url\n * @param {String} \toptions.errorMessage \t\t未安装flash player或flash player版本号过低时的提示\n * @param {string} \toptions.ver \t\t\t\t最低需要的flash player版本号\n * @param {string} \toptions.width \t\t\t\tflash的宽度\n * @param {string} \toptions.height \t\t\t\tflash的高度\n * @param {string} \toptions.align \t\t\t\tflash的对齐方式，允许值：middle/left/right/top/bottom\n * @param {string} \toptions.base \t\t\t\t设置用于解析swf文件中的所有相对路径语句的基本目录或URL\n * @param {string} \toptions.bgcolor \t\t\tswf文件的背景色\n * @param {string} \toptions.salign \t\t\t\t设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值：l/r/t/b/tl/tr/bl/br\n * @param {boolean} options.menu \t\t\t\t是否显示右键菜单，允许值：true/false\n * @param {boolean} options.loop \t\t\t\t播放到最后一帧时是否重新播放，允许值： true/false\n * @param {boolean} options.play \t\t\t\tflash是否在浏览器加载时就开始播放。允许值：true/false\n * @param {string} \toptions.quality \t\t\t设置flash播放的画质，允许值：low/medium/high/autolow/autohigh/best\n * @param {string} \toptions.scale \t\t\t\t设置flash内容如何缩放来适应设置的宽高。允许值：showall/noborder/exactfit\n * @param {string} \toptions.wmode \t\t\t\t设置flash的显示模式。允许值：window/opaque/transparent\n * @param {string} \toptions.allowscriptaccess \t设置flash与页面的通信权限。允许值：always/never/sameDomain\n * @param {string} \toptions.allownetworking \t设置swf文件中允许使用的网络API。允许值：all/internal/none\n * @param {boolean} options.allowfullscreen \t是否允许flash全屏。允许值：true/false\n * @param {boolean} options.seamlesstabbing \t允许设置执行无缝跳格，从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值：true/false\n * @param {boolean} options.devicefont \t\t\t设置静态文本对象是否以设备字体呈现。允许值：true/false\n * @param {boolean} options.swliveconnect \t\t第一次加载flash时浏览器是否应启动Java。允许值：true/false\n * @param {Object} \toptions.vars \t\t\t\t要传递给flash的参数，支持JSON或string类型。\n * \n * @see baidu.swf.create\n * @meta standard\n * @returns {string} flash对象的html字符串\n */\nbaidu.swf.createHTML = function (options) {\n    options = options || {};\n    var version = baidu.swf.version, \n        needVersion = options['ver'] || '6.0.0', \n        vUnit1, vUnit2, i, k, len, item, tmpOpt = {},\n        encodeHTML = baidu.string.encodeHTML;\n    for (k in options) {\n        tmpOpt[k] = options[k];\n    }\n    options = tmpOpt;\n    if (version) {\n        version = version.split('.');\n        needVersion = needVersion.split('.');\n        for (i = 0; i < 3; i++) {\n            vUnit1 = parseInt(version[i], 10);\n            vUnit2 = parseInt(needVersion[i], 10);\n            if (vUnit2 < vUnit1) {\n                break;\n            } else if (vUnit2 > vUnit1) {\n                return '';\n            }\n        }\n    } else {\n        return '';\n    }\n    \n    var vars = options['vars'],\n        objProperties = ['classid', 'codebase', 'id', 'width', 'height', 'align'];\n    options['align'] = options['align'] || 'middle';\n    options['classid'] = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';\n    options['codebase'] = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0';\n    options['movie'] = options['url'] || '';\n    delete options['vars'];\n    delete options['url'];\n    if ('string' == typeof vars) {\n        options['flashvars'] = vars;\n    } else {\n        var fvars = [];\n        for (k in vars) {\n            item = vars[k];\n            fvars.push(k + \"=\" + encodeURIComponent(item));\n        }\n        options['flashvars'] = fvars.join('&');\n    }\n    var str = ['<object '];\n    for (i = 0, len = objProperties.length; i < len; i++) {\n        item = objProperties[i];\n        str.push(' ', item, '=\"', encodeHTML(options[item]), '\"');\n    }\n    str.push('>');\n    var params = {\n        'wmode'             : 1,\n        'scale'             : 1,\n        'quality'           : 1,\n        'play'              : 1,\n        'loop'              : 1,\n        'menu'              : 1,\n        'salign'            : 1,\n        'bgcolor'           : 1,\n        'base'              : 1,\n        'allowscriptaccess' : 1,\n        'allownetworking'   : 1,\n        'allowfullscreen'   : 1,\n        'seamlesstabbing'   : 1,\n        'devicefont'        : 1,\n        'swliveconnect'     : 1,\n        'flashvars'         : 1,\n        'movie'             : 1\n    };\n    \n    for (k in options) {\n        item = options[k];\n        k = k.toLowerCase();\n        if (params[k] && (item || item === false || item === 0)) {\n            str.push('<param name=\"' + k + '\" value=\"' + encodeHTML(item) + '\" />');\n        }\n    }\n    options['src']  = options['movie'];\n    options['name'] = options['id'];\n    delete options['id'];\n    delete options['movie'];\n    delete options['classid'];\n    delete options['codebase'];\n    options['type'] = 'application/x-shockwave-flash';\n    options['pluginspage'] = 'http://www.macromedia.com/go/getflashplayer';\n    str.push('<embed');\n    var salign;\n    for (k in options) {\n        item = options[k];\n        if (item || item === false || item === 0) {\n            if ((new RegExp(\"^salign\\x24\", \"i\")).test(k)) {\n                salign = item;\n                continue;\n            }\n            \n            str.push(' ', k, '=\"', encodeHTML(item), '\"');\n        }\n    }\n    \n    if (salign) {\n        str.push(' salign=\"', encodeHTML(salign), '\"');\n    }\n    str.push('></embed></object>');\n    \n    return str.join('');\n};\n\n\n/**\n * 在页面中创建一个flash对象\n * @name baidu.swf.create\n * @function\n * @grammar baidu.swf.create(options[, container])\n * \n * @param {Object} \toptions \t\t\t\t\t创建flash的选项参数\n * @param {string} \toptions.id \t\t\t\t\t要创建的flash的标识\n * @param {string} \toptions.url \t\t\t\tflash文件的url\n * @param {String} \toptions.errorMessage \t\t未安装flash player或flash player版本号过低时的提示\n * @param {string} \toptions.ver \t\t\t\t最低需要的flash player版本号\n * @param {string} \toptions.width \t\t\t\tflash的宽度\n * @param {string} \toptions.height \t\t\t\tflash的高度\n * @param {string} \toptions.align \t\t\t\tflash的对齐方式，允许值：middle/left/right/top/bottom\n * @param {string} \toptions.base \t\t\t\t设置用于解析swf文件中的所有相对路径语句的基本目录或URL\n * @param {string} \toptions.bgcolor \t\t\tswf文件的背景色\n * @param {string} \toptions.salign \t\t\t\t设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值：l/r/t/b/tl/tr/bl/br\n * @param {boolean} options.menu \t\t\t\t是否显示右键菜单，允许值：true/false\n * @param {boolean} options.loop \t\t\t\t播放到最后一帧时是否重新播放，允许值： true/false\n * @param {boolean} options.play \t\t\t\tflash是否在浏览器加载时就开始播放。允许值：true/false\n * @param {string} \toptions.quality \t\t\t设置flash播放的画质，允许值：low/medium/high/autolow/autohigh/best\n * @param {string} \toptions.scale \t\t\t\t设置flash内容如何缩放来适应设置的宽高。允许值：showall/noborder/exactfit\n * @param {string} \toptions.wmode \t\t\t\t设置flash的显示模式。允许值：window/opaque/transparent\n * @param {string} \toptions.allowscriptaccess \t设置flash与页面的通信权限。允许值：always/never/sameDomain\n * @param {string} \toptions.allownetworking \t设置swf文件中允许使用的网络API。允许值：all/internal/none\n * @param {boolean} options.allowfullscreen \t是否允许flash全屏。允许值：true/false\n * @param {boolean} options.seamlesstabbing \t允许设置执行无缝跳格，从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值：true/false\n * @param {boolean} options.devicefont \t\t\t设置静态文本对象是否以设备字体呈现。允许值：true/false\n * @param {boolean} options.swliveconnect \t\t第一次加载flash时浏览器是否应启动Java。允许值：true/false\n * @param {Object} \toptions.vars \t\t\t\t要传递给flash的参数，支持JSON或string类型。\n * \n * @param {HTMLElement|string} [container] \t\tflash对象的父容器元素，不传递该参数时在当前代码位置创建flash对象。\n * @meta standard\n * @see baidu.swf.createHTML,baidu.swf.getMovie\n */\nbaidu.swf.create = function (options, target) {\n    options = options || {};\n    var html = baidu.swf.createHTML(options) \n               || options['errorMessage'] \n               || '';\n                \n    if (target && 'string' == typeof target) {\n        target = document.getElementById(target);\n    }\n    baidu.dom.insertHTML( target || document.body ,'beforeEnd',html );\n};\n/**\n * 判断是否为ie浏览器\n * @name baidu.browser.ie\n * @field\n * @grammar baidu.browser.ie\n * @returns {Number} IE版本号\n */\nbaidu.browser.ie = baidu.ie = /msie (\\d+\\.\\d+)/i.test(navigator.userAgent) ? (document.documentMode || + RegExp['\\x241']) : undefined;\n\n/**\n * 移除数组中的项\n * @name baidu.array.remove\n * @function\n * @grammar baidu.array.remove(source, match)\n * @param {Array} source 需要移除项的数组\n * @param {Any} match 要移除的项\n * @meta standard\n * @see baidu.array.removeAt\n *             \n * @returns {Array} 移除后的数组\n */\nbaidu.array.remove = function (source, match) {\n    var len = source.length;\n        \n    while (len--) {\n        if (len in source && source[len] === match) {\n            source.splice(len, 1);\n        }\n    }\n    return source;\n};\n\n/**\n * 判断目标参数是否Array对象\n * @name baidu.lang.isArray\n * @function\n * @grammar baidu.lang.isArray(source)\n * @param {Any} source 目标参数\n * @meta standard\n * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate\n *             \n * @returns {boolean} 类型判断结果\n */\nbaidu.lang.isArray = function (source) {\n    return '[object Array]' == Object.prototype.toString.call(source);\n};\n\n\n\n/**\n * 将一个变量转换成array\n * @name baidu.lang.toArray\n * @function\n * @grammar baidu.lang.toArray(source)\n * @param {mix} source 需要转换成array的变量\n * @version 1.3\n * @meta standard\n * @returns {array} 转换后的array\n */\nbaidu.lang.toArray = function (source) {\n    if (source === null || source === undefined)\n        return [];\n    if (baidu.lang.isArray(source))\n        return source;\n    if (typeof source.length !== 'number' || typeof source === 'string' || baidu.lang.isFunction(source)) {\n        return [source];\n    }\n    if (source.item) {\n        var l = source.length, array = new Array(l);\n        while (l--)\n            array[l] = source[l];\n        return array;\n    }\n\n    return [].slice.call(source);\n};\n\n/**\n * 获得flash对象的实例\n * @name baidu.swf.getMovie\n * @function\n * @grammar baidu.swf.getMovie(name)\n * @param {string} name flash对象的名称\n * @see baidu.swf.create\n * @meta standard\n * @returns {HTMLElement} flash对象的实例\n */\nbaidu.swf.getMovie = function (name) {\n\tvar movie = document[name], ret;\n    return baidu.browser.ie == 9 ?\n    \tmovie && movie.length ? \n    \t\t(ret = baidu.array.remove(baidu.lang.toArray(movie),function(item){\n    \t\t\treturn item.tagName.toLowerCase() != \"embed\";\n    \t\t})).length == 1 ? ret[0] : ret\n    \t\t: movie\n    \t: movie || window[name];\n};\n\n\nbaidu.flash._Base = (function(){\n   \n    var prefix = 'bd__flash__';\n\n    /**\n     * 创建一个随机的字符串\n     * @private\n     * @return {String}\n     */\n    function _createString(){\n        return  prefix + Math.floor(Math.random() * 2147483648).toString(36);\n    };\n   \n    /**\n     * 检查flash状态\n     * @private\n     * @param {Object} target flash对象\n     * @return {Boolean}\n     */\n    function _checkReady(target){\n        if(typeof target !== 'undefined' && typeof target.flashInit !== 'undefined' && target.flashInit()){\n            return true;\n        }else{\n            return false;\n        }\n    };\n\n    /**\n     * 调用之前进行压栈的函数\n     * @private\n     * @param {Array} callQueue 调用队列\n     * @param {Object} target flash对象\n     * @return {Null}\n     */\n    function _callFn(callQueue, target){\n        var result = null;\n        \n        callQueue = callQueue.reverse();\n        baidu.each(callQueue, function(item){\n            result = target.call(item.fnName, item.params);\n            item.callBack(result);\n        });\n    };\n\n    /**\n     * 为传入的匿名函数创建函数名\n     * @private\n     * @param {String|Function} fun 传入的匿名函数或者函数名\n     * @return {String}\n     */\n    function _createFunName(fun){\n        var name = '';\n\n        if(baidu.lang.isFunction(fun)){\n            name = _createString();\n            window[name] = function(){\n                fun.apply(window, arguments);\n            };\n\n            return name;\n        }else if(baidu.lang.isString){\n            return fun;\n        }\n    };\n\n    /**\n     * 绘制flash\n     * @private\n     * @param {Object} options 创建参数\n     * @return {Object} \n     */\n    function _render(options){\n        if(!options.id){\n            options.id = _createString();\n        }\n        \n        var container = options.container || '';\n        delete(options.container);\n        \n        baidu.swf.create(options, container);\n        \n        return baidu.swf.getMovie(options.id);\n    };\n\n    return function(options, callBack){\n        var me = this,\n            autoRender = (typeof options.autoRender !== 'undefined' ? options.autoRender : true),\n            createOptions = options.createOptions || {},\n            target = null,\n            isReady = false,\n            callQueue = [],\n            timeHandle = null,\n            callBack = callBack || [];\n\n        /**\n         * 将flash文件绘制到页面上\n         * @public\n         * @return {Null}\n         */\n        me.render = function(){\n            target = _render(createOptions);\n            \n            if(callBack.length > 0){\n                baidu.each(callBack, function(funName, index){\n                    callBack[index] = _createFunName(options[funName] || new Function());\n                });    \n            }\n            me.call('setJSFuncName', [callBack]);\n        };\n\n        /**\n         * 返回flash状态\n         * @return {Boolean}\n         */\n        me.isReady = function(){\n            return isReady;\n        };\n\n        /**\n         * 调用flash接口的统一入口\n         * @param {String} fnName 调用的函数名\n         * @param {Array} params 传入的参数组成的数组,若不许要参数，需传入空数组\n         * @param {Function} [callBack] 异步调用后将返回值作为参数的调用回调函数，如无返回值，可以不传入此参数\n         * @return {Null}\n        */\n        me.call = function(fnName, params, callBack){\n            if(!fnName) return null;\n            callBack = callBack || new Function();\n\n            var result = null;\n    \n            if(isReady){\n                result = target.call(fnName, params);\n                callBack(result);\n            }else{\n                callQueue.push({\n                    fnName: fnName,\n                    params: params,\n                    callBack: callBack\n                });\n    \n                (!timeHandle) && (timeHandle = setInterval(_check, 200));\n            }\n        };\n    \n        /**\n         * 为传入的匿名函数创建函数名\n         * @public\n         * @param {String|Function} fun 传入的匿名函数或者函数名\n         * @return {String}\n         */\n        me.createFunName = function(fun){\n            return _createFunName(fun);    \n        };\n\n        /**\n         * 检查flash是否ready， 并进行调用\n         * @private\n         * @return {Null}\n         */\n        function _check(){\n            if(_checkReady(target)){\n                clearInterval(timeHandle);\n                timeHandle = null;\n                _call();\n\n                isReady = true;\n            }               \n        };\n\n        /**\n         * 调用之前进行压栈的函数\n         * @private\n         * @return {Null}\n         */\n        function _call(){\n            _callFn(callQueue, target);\n            callQueue = [];\n        }\n\n        autoRender && me.render(); \n    };\n})();\n\n\n\n/**\n * 创建flash based imageUploader\n * @class\n * @grammar baidu.flash.imageUploader(options)\n * @param {Object} createOptions 创建flash时需要的参数，请参照baidu.swf.create文档\n * @config {Object} vars 创建imageUploader时所需要的参数\n * @config {Number} vars.gridWidth 每一个预览图片所占的宽度，应该为flash寛的整除\n * @config {Number} vars.gridHeight 每一个预览图片所占的高度，应该为flash高的整除\n * @config {Number} vars.picWidth 单张预览图片的宽度\n * @config {Number} vars.picHeight 单张预览图片的高度\n * @config {String} vars.uploadDataFieldName POST请求中图片数据的key,默认值'picdata'\n * @config {String} vars.picDescFieldName POST请求中图片描述的key,默认值'picDesc'\n * @config {Number} vars.maxSize 文件的最大体积,单位'MB'\n * @config {Number} vars.compressSize 上传前如果图片体积超过该值，会先压缩\n * @config {Number} vars.maxNum:32 最大上传多少个文件\n * @config {Number} vars.compressLength 能接受的最大边长，超过该值会等比压缩\n * @config {String} vars.url 上传的url地址\n * @config {Number} vars.mode mode == 0时，是使用滚动条，mode == 1时，拉伸flash, 默认值为0\n * @see baidu.swf.createHTML\n * @param {String} backgroundUrl 背景图片路径\n * @param {String} listBacgroundkUrl 布局控件背景\n * @param {String} buttonUrl 按钮图片不背景\n * @param {String|Function} selectFileCallback 选择文件的回调\n * @param {String|Function} exceedFileCallback文件超出限制的最大体积时的回调\n * @param {String|Function} deleteFileCallback 删除文件的回调\n * @param {String|Function} startUploadCallback 开始上传某个文件时的回调\n * @param {String|Function} uploadCompleteCallback 某个文件上传完成的回调\n * @param {String|Function} uploadErrorCallback 某个文件上传失败的回调\n * @param {String|Function} allCompleteCallback 全部上传完成时的回调\n * @param {String|Function} changeFlashHeight 改变Flash的高度，mode==1的时候才有用\n */ \nbaidu.flash.imageUploader = baidu.flash.imageUploader || function(options){\n   \n    var me = this,\n        options = options || {},\n        _flash = new baidu.flash._Base(options, [\n            'selectFileCallback', \n            'exceedFileCallback', \n            'deleteFileCallback', \n            'startUploadCallback',\n            'uploadCompleteCallback',\n            'uploadErrorCallback',\n            'allCompleteCallback',\n            'changeFlashHeight'\n        ]);\n    /**\n     * 开始或回复上传图片\n     * @public\n     * @return {Null}\n     */\n    me.upload = function(){\n        _flash.call('upload');\n    };\n\n    /**\n     * 暂停上传图片\n     * @public\n     * @return {Null}\n     */\n    me.pause = function(){\n        _flash.call('pause');\n    };\n    me.addCustomizedParams = function(index,obj){\n        _flash.call('addCustomizedParams',[index,obj]);\n    }\n};\n\n/**\n * 操作原生对象的方法\n * @namespace baidu.object\n */\nbaidu.object = baidu.object || {};\n\n\n/**\n * 将源对象的所有属性拷贝到目标对象中\n * @author erik\n * @name baidu.object.extend\n * @function\n * @grammar baidu.object.extend(target, source)\n * @param {Object} target 目标对象\n * @param {Object} source 源对象\n * @see baidu.array.merge\n * @remark\n * \n1.目标对象中，与源对象key相同的成员将会被覆盖。<br>\n2.源对象的prototype成员不会拷贝。\n\t\t\n * @shortcut extend\n * @meta standard\n *             \n * @returns {Object} 目标对象\n */\nbaidu.extend =\nbaidu.object.extend = function (target, source) {\n    for (var p in source) {\n        if (source.hasOwnProperty(p)) {\n            target[p] = source[p];\n        }\n    }\n    \n    return target;\n};\n\n\n\n\n\n/**\n * 创建flash based fileUploader\n * @class\n * @grammar baidu.flash.fileUploader(options)\n * @param {Object} options\n * @config {Object} createOptions 创建flash时需要的参数，请参照baidu.swf.create文档\n * @config {String} createOptions.width\n * @config {String} createOptions.height\n * @config {Number} maxNum 最大可选文件数\n * @config {Function|String} selectFile\n * @config {Function|String} exceedMaxSize\n * @config {Function|String} deleteFile\n * @config {Function|String} uploadStart\n * @config {Function|String} uploadComplete\n * @config {Function|String} uploadError\n * @config {Function|String} uploadProgress\n */\nbaidu.flash.fileUploader = baidu.flash.fileUploader || function(options){\n    var me = this,\n        options = options || {};\n    \n    options.createOptions = baidu.extend({\n        wmod: 'transparent'\n    },options.createOptions || {});\n    \n    var _flash = new baidu.flash._Base(options, [\n        'selectFile',\n        'exceedMaxSize',\n        'deleteFile',\n        'uploadStart',\n        'uploadComplete',\n        'uploadError', \n        'uploadProgress'\n    ]);\n\n    _flash.call('setMaxNum', options.maxNum ? [options.maxNum] : [1]);\n\n    /**\n     * 设置当鼠标移动到flash上时，是否变成手型\n     * @public\n     * @param {Boolean} isCursor\n     * @return {Null}\n     */\n    me.setHandCursor = function(isCursor){\n        _flash.call('setHandCursor', [isCursor || false]);\n    };\n\n    /**\n     * 设置鼠标相应函数名\n     * @param {String|Function} fun\n     */\n    me.setMSFunName = function(fun){\n        _flash.call('setMSFunName',[_flash.createFunName(fun)]);\n    }; \n\n    /**\n     * 执行上传操作\n     * @param {String} url 上传的url\n     * @param {String} fieldName 上传的表单字段名\n     * @param {Object} postData 键值对，上传的POST数据\n     * @param {Number|Array|null|-1} [index]上传的文件序列\n     *                            Int值上传该文件\n     *                            Array一次串行上传该序列文件\n     *                            -1/null上传所有文件\n     * @return {Null}\n     */\n    me.upload = function(url, fieldName, postData, index){\n\n        if(typeof url !== 'string' || typeof fieldName !== 'string') return null;\n        if(typeof index === 'undefined') index = -1;\n\n        _flash.call('upload', [url, fieldName, postData, index]);\n    };\n\n    /**\n     * 取消上传操作\n     * @public\n     * @param {Number|-1} index\n     */\n    me.cancel = function(index){\n        if(typeof index === 'undefined') index = -1;\n        _flash.call('cancel', [index]);\n    };\n\n    /**\n     * 删除文件\n     * @public\n     * @param {Number|Array} [index] 要删除的index，不传则全部删除\n     * @param {Function} callBack\n     * */\n    me.deleteFile = function(index, callBack){\n\n        var callBackAll = function(list){\n                callBack && callBack(list);\n            };\n\n        if(typeof index === 'undefined'){\n            _flash.call('deleteFilesAll', [], callBackAll);\n            return;\n        };\n        \n        if(typeof index === 'Number') index = [index];\n        index.sort(function(a,b){\n            return b-a;\n        });\n        baidu.each(index, function(item){\n            _flash.call('deleteFileBy', item, callBackAll);\n        });\n    };\n\n    /**\n     * 添加文件类型，支持macType\n     * @public\n     * @param {Object|Array[Object]} type {description:String, extention:String}\n     * @return {Null};\n     */\n    me.addFileType = function(type){\n        var type = type || [[]];\n        \n        if(type instanceof Array) type = [type];\n        else type = [[type]];\n        _flash.call('addFileTypes', type);\n    };\n    \n    /**\n     * 设置文件类型，支持macType\n     * @public\n     * @param {Object|Array[Object]} type {description:String, extention:String}\n     * @return {Null};\n     */\n    me.setFileType = function(type){\n        var type = type || [[]];\n        \n        if(type instanceof Array) type = [type];\n        else type = [[type]];\n        _flash.call('setFileTypes', type);\n    };\n\n    /**\n     * 设置可选文件的数量限制\n     * @public\n     * @param {Number} num\n     * @return {Null}\n     */\n    me.setMaxNum = function(num){\n        _flash.call('setMaxNum', [num]);\n    };\n\n    /**\n     * 设置可选文件大小限制，以兆M为单位\n     * @public\n     * @param {Number} num,0为无限制\n     * @return {Null}\n     */\n    me.setMaxSize = function(num){\n        _flash.call('setMaxSize', [num]);\n    };\n\n    /**\n     * @public\n     */\n    me.getFileAll = function(callBack){\n        _flash.call('getFileAll', [], callBack);\n    };\n\n    /**\n     * @public\n     * @param {Number} index\n     * @param {Function} [callBack]\n     */\n    me.getFileByIndex = function(index, callBack){\n        _flash.call('getFileByIndex', [], callBack);\n    };\n\n    /**\n     * @public\n     * @param {Number} index\n     * @param {function} [callBack]\n     */\n    me.getStatusByIndex = function(index, callBack){\n        _flash.call('getStatusByIndex', [], callBack);\n    };\n};\n\n/**\n * 使用动态script标签请求服务器资源，包括由服务器端的回调和浏览器端的回调\n * @namespace baidu.sio\n */\nbaidu.sio = baidu.sio || {};\n\n/**\n * \n * @param {HTMLElement} src script节点\n * @param {String} url script节点的地址\n * @param {String} [charset] 编码\n */\nbaidu.sio._createScriptTag = function(scr, url, charset){\n    scr.setAttribute('type', 'text/javascript');\n    charset && scr.setAttribute('charset', charset);\n    scr.setAttribute('src', url);\n    document.getElementsByTagName('head')[0].appendChild(scr);\n};\n\n/**\n * 删除script的属性，再删除script标签，以解决修复内存泄漏的问题\n * \n * @param {HTMLElement} src script节点\n */\nbaidu.sio._removeScriptTag = function(scr){\n    if (scr.clearAttributes) {\n        scr.clearAttributes();\n    } else {\n        for (var attr in scr) {\n            if (scr.hasOwnProperty(attr)) {\n                delete scr[attr];\n            }\n        }\n    }\n    if(scr && scr.parentNode){\n        scr.parentNode.removeChild(scr);\n    }\n    scr = null;\n};\n\n\n/**\n * 通过script标签加载数据，加载完成由浏览器端触发回调\n * @name baidu.sio.callByBrowser\n * @function\n * @grammar baidu.sio.callByBrowser(url, opt_callback, opt_options)\n * @param {string} url 加载数据的url\n * @param {Function|string} opt_callback 数据加载结束时调用的函数或函数名\n * @param {Object} opt_options 其他可选项\n * @config {String} [charset] script的字符集\n * @config {Integer} [timeOut] 超时时间，超过这个时间将不再响应本请求，并触发onfailure函数\n * @config {Function} [onfailure] timeOut设定后才生效，到达超时时间时触发本函数\n * @remark\n * 1、与callByServer不同，callback参数只支持Function类型，不支持string。\n * 2、如果请求了一个不存在的页面，callback函数在IE/opera下也会被调用，因此使用者需要在onsuccess函数中判断数据是否正确加载。\n * @meta standard\n * @see baidu.sio.callByServer\n */\nbaidu.sio.callByBrowser = function (url, opt_callback, opt_options) {\n    var scr = document.createElement(\"SCRIPT\"),\n        scriptLoaded = 0,\n        options = opt_options || {},\n        charset = options['charset'],\n        callback = opt_callback || function(){},\n        timeOut = options['timeOut'] || 0,\n        timer;\n    scr.onload = scr.onreadystatechange = function () {\n        if (scriptLoaded) {\n            return;\n        }\n        \n        var readyState = scr.readyState;\n        if ('undefined' == typeof readyState\n            || readyState == \"loaded\"\n            || readyState == \"complete\") {\n            scriptLoaded = 1;\n            try {\n                callback();\n                clearTimeout(timer);\n            } finally {\n                scr.onload = scr.onreadystatechange = null;\n                baidu.sio._removeScriptTag(scr);\n            }\n        }\n    };\n\n    if( timeOut ){\n        timer = setTimeout(function(){\n            scr.onload = scr.onreadystatechange = null;\n            baidu.sio._removeScriptTag(scr);\n            options.onfailure && options.onfailure();\n        }, timeOut);\n    }\n    \n    baidu.sio._createScriptTag(scr, url, charset);\n};\n\n/**\n * 通过script标签加载数据，加载完成由服务器端触发回调\n * @name baidu.sio.callByServer\n * @function\n * @grammar baidu.sio.callByServer(url, callback[, opt_options])\n * @param {string} url 加载数据的url.\n * @param {Function|string} callback 服务器端调用的函数或函数名。如果没有指定本参数，将在URL中寻找options['queryField']做为callback的方法名.\n * @param {Object} opt_options 加载数据时的选项.\n * @config {string} [charset] script的字符集\n * @config {string} [queryField] 服务器端callback请求字段名，默认为callback\n * @config {Integer} [timeOut] 超时时间(单位：ms)，超过这个时间将不再响应本请求，并触发onfailure函数\n * @config {Function} [onfailure] timeOut设定后才生效，到达超时时间时触发本函数\n * @remark\n * 如果url中已经包含key为“options['queryField']”的query项，将会被替换成callback中参数传递或自动生成的函数名。\n * @meta standard\n * @see baidu.sio.callByBrowser\n */\nbaidu.sio.callByServer = /**@function*/function(url, callback, opt_options) {\n    var scr = document.createElement('SCRIPT'),\n        prefix = 'bd__cbs__',\n        callbackName,\n        callbackImpl,\n        options = opt_options || {},\n        charset = options['charset'],\n        queryField = options['queryField'] || 'callback',\n        timeOut = options['timeOut'] || 0,\n        timer,\n        reg = new RegExp('(\\\\?|&)' + queryField + '=([^&]*)'),\n        matches;\n\n    if (baidu.lang.isFunction(callback)) {\n        callbackName = prefix + Math.floor(Math.random() * 2147483648).toString(36);\n        window[callbackName] = getCallBack(0);\n    } else if(baidu.lang.isString(callback)){\n        callbackName = callback;\n    } else {\n        if (matches = reg.exec(url)) {\n            callbackName = matches[2];\n        }\n    }\n\n    if( timeOut ){\n        timer = setTimeout(getCallBack(1), timeOut);\n    }\n    url = url.replace(reg, '\\x241' + queryField + '=' + callbackName);\n    \n    if (url.search(reg) < 0) {\n        url += (url.indexOf('?') < 0 ? '?' : '&') + queryField + '=' + callbackName;\n    }\n    baidu.sio._createScriptTag(scr, url, charset);\n\n    /*\n     * 返回一个函数，用于立即（挂在window上）或者超时（挂在setTimeout中）时执行\n     */\n    function getCallBack(onTimeOut){\n        /*global callbackName, callback, scr, options;*/\n        return function(){\n            try {\n                if( onTimeOut ){\n                    options.onfailure && options.onfailure();\n                }else{\n                    callback.apply(window, arguments);\n                    clearTimeout(timer);\n                }\n                window[callbackName] = null;\n                delete window[callbackName];\n            } catch (exception) {\n            } finally {\n                baidu.sio._removeScriptTag(scr);\n            }\n        }\n    }\n};\n\n/**\n * 通过请求一个图片的方式令服务器存储一条日志\n * @function\n * @grammar baidu.sio.log(url)\n * @param {string} url 要发送的地址.\n * @author: int08h,leeight\n */\nbaidu.sio.log = function(url) {\n  var img = new Image(),\n      key = 'tangram_sio_log_' + Math.floor(Math.random() *\n            2147483648).toString(36);\n  window[key] = img;\n\n  img.onload = img.onerror = img.onabort = function() {\n    img.onload = img.onerror = img.onabort = null;\n\n    window[key] = null;\n    img = null;\n  };\n  img.src = url;\n};\n\n\n\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json.js\n * author: erik\n * version: 1.1.0\n * date: 2009/12/02\n */\n\n\n/**\n * 操作json对象的方法\n * @namespace baidu.json\n */\nbaidu.json = baidu.json || {};\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/parse.js\n * author: erik, berg\n * version: 1.2\n * date: 2009/11/23\n */\n\n\n\n/**\n * 将字符串解析成json对象。注：不会自动祛除空格\n * @name baidu.json.parse\n * @function\n * @grammar baidu.json.parse(data)\n * @param {string} source 需要解析的字符串\n * @remark\n * 该方法的实现与ecma-262第五版中规定的JSON.parse不同，暂时只支持传入一个参数。后续会进行功能丰富。\n * @meta standard\n * @see baidu.json.stringify,baidu.json.decode\n *             \n * @returns {JSON} 解析结果json对象\n */\nbaidu.json.parse = function (data) {\n    //2010/12/09：更新至不使用原生parse，不检测用户输入是否正确\n    return (new Function(\"return (\" + data + \")\"))();\n};\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/decode.js\n * author: erik, cat\n * version: 1.3.4\n * date: 2010/12/23\n */\n\n\n\n/**\n * 将字符串解析成json对象，为过时接口，今后会被baidu.json.parse代替\n * @name baidu.json.decode\n * @function\n * @grammar baidu.json.decode(source)\n * @param {string} source 需要解析的字符串\n * @meta out\n * @see baidu.json.encode,baidu.json.parse\n *             \n * @returns {JSON} 解析结果json对象\n */\nbaidu.json.decode = baidu.json.parse;\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/stringify.js\n * author: erik\n * version: 1.1.0\n * date: 2010/01/11\n */\n\n\n\n/**\n * 将json对象序列化\n * @name baidu.json.stringify\n * @function\n * @grammar baidu.json.stringify(value)\n * @param {JSON} value 需要序列化的json对象\n * @remark\n * 该方法的实现与ecma-262第五版中规定的JSON.stringify不同，暂时只支持传入一个参数。后续会进行功能丰富。\n * @meta standard\n * @see baidu.json.parse,baidu.json.encode\n *             \n * @returns {string} 序列化后的字符串\n */\nbaidu.json.stringify = (function () {\n    /**\n     * 字符串处理时需要转义的字符表\n     * @private\n     */\n    var escapeMap = {\n        \"\\b\": '\\\\b',\n        \"\\t\": '\\\\t',\n        \"\\n\": '\\\\n',\n        \"\\f\": '\\\\f',\n        \"\\r\": '\\\\r',\n        '\"' : '\\\\\"',\n        \"\\\\\": '\\\\\\\\'\n    };\n    \n    /**\n     * 字符串序列化\n     * @private\n     */\n    function encodeString(source) {\n        if (/[\"\\\\\\x00-\\x1f]/.test(source)) {\n            source = source.replace(\n                /[\"\\\\\\x00-\\x1f]/g, \n                function (match) {\n                    var c = escapeMap[match];\n                    if (c) {\n                        return c;\n                    }\n                    c = match.charCodeAt();\n                    return \"\\\\u00\" \n                            + Math.floor(c / 16).toString(16) \n                            + (c % 16).toString(16);\n                });\n        }\n        return '\"' + source + '\"';\n    }\n    \n    /**\n     * 数组序列化\n     * @private\n     */\n    function encodeArray(source) {\n        var result = [\"[\"], \n            l = source.length,\n            preComma, i, item;\n            \n        for (i = 0; i < l; i++) {\n            item = source[i];\n            \n            switch (typeof item) {\n            case \"undefined\":\n            case \"function\":\n            case \"unknown\":\n                break;\n            default:\n                if(preComma) {\n                    result.push(',');\n                }\n                result.push(baidu.json.stringify(item));\n                preComma = 1;\n            }\n        }\n        result.push(\"]\");\n        return result.join(\"\");\n    }\n    \n    /**\n     * 处理日期序列化时的补零\n     * @private\n     */\n    function pad(source) {\n        return source < 10 ? '0' + source : source;\n    }\n    \n    /**\n     * 日期序列化\n     * @private\n     */\n    function encodeDate(source){\n        return '\"' + source.getFullYear() + \"-\" \n                + pad(source.getMonth() + 1) + \"-\" \n                + pad(source.getDate()) + \"T\" \n                + pad(source.getHours()) + \":\" \n                + pad(source.getMinutes()) + \":\" \n                + pad(source.getSeconds()) + '\"';\n    }\n    \n    return function (value) {\n        switch (typeof value) {\n        case 'undefined':\n            return 'undefined';\n            \n        case 'number':\n            return isFinite(value) ? String(value) : \"null\";\n            \n        case 'string':\n            return encodeString(value);\n            \n        case 'boolean':\n            return String(value);\n            \n        default:\n            if (value === null) {\n                return 'null';\n            } else if (value instanceof Array) {\n                return encodeArray(value);\n            } else if (value instanceof Date) {\n                return encodeDate(value);\n            } else {\n                var result = ['{'],\n                    encode = baidu.json.stringify,\n                    preComma,\n                    item;\n                    \n                for (var key in value) {\n                    if (Object.prototype.hasOwnProperty.call(value, key)) {\n                        item = value[key];\n                        switch (typeof item) {\n                        case 'undefined':\n                        case 'unknown':\n                        case 'function':\n                            break;\n                        default:\n                            if (preComma) {\n                                result.push(',');\n                            }\n                            preComma = 1;\n                            result.push(encode(key) + ':' + encode(item));\n                        }\n                    }\n                }\n                result.push('}');\n                return result.join('');\n            }\n        }\n    };\n})();\n/*\n * Tangram\n * Copyright 2009 Baidu Inc. All rights reserved.\n * \n * path: baidu/json/encode.js\n * author: erik, cat\n * version: 1.3.4\n * date: 2010/12/23\n */\n\n\n\n/**\n * 将json对象序列化，为过时接口，今后会被baidu.json.stringify代替\n * @name baidu.json.encode\n * @function\n * @grammar baidu.json.encode(value)\n * @param {JSON} value 需要序列化的json对象\n * @meta out\n * @see baidu.json.decode,baidu.json.stringify\n *             \n * @returns {string} 序列化后的字符串\n */\nbaidu.json.encode = baidu.json.stringify;\n"
  },
  {
    "path": "web/console/public/UEditor/dialogs/wordimage/wordimage.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n        \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js\"></script>\n    <style type=\"text/css\">\n        .wrapper{width: 600px;padding: 10px;height: 352px;overflow: hidden;position: relative;border-bottom: 1px solid #d7d7d7}\n        .localPath input{float: left;width: 350px;line-height: 20px;height: 20px;}\n        #clipboard{float:left;width: 70px;height: 30px; }\n        .description{ color: #0066cc; margin-top: 2px; width: 450px; height: 45px;float: left;line-height: 22px}\n        #upload{width: 100px;height: 30px;float: right; margin:10px 2px 0 0;cursor: pointer;}\n        #msg{ width: 140px; height: 30px; line-height:25px;float: left;color: red}\n    </style>\n</head>\n<body>\n    <div class=\"wrapper\">\n        <div class=\"localPath\">\n            <input id=\"localPath\" type=\"text\" readonly />\n            <div id=\"clipboard\"></div>\n            <div id=\"msg\"></div>\n        </div>\n        <div id=\"flashContainer\"></div>\n        <div>\n            <div id=\"upload\" style=\"display: none\" ><img id=\"uploadBtn\"></div>\n            <div class=\"description\">\n                <span style=\"color: red\"><var id=\"lang_resave\"></var>: </span><var id=\"lang_step\"></var>\n            </div>\n          </div>\n    </div>\n    <script type=\"text/javascript\" src=\"tangram.js\"></script>\n    <script type=\"text/javascript\" src=\"wordimage.js\"></script>\n    <script type=\"text/javascript\">\n        editor.setOpt({\n            wordImageFieldName:\"upfile\",\n            compressSide:0,\n            maxImageSideLength:900\n        });\n\n            //全局变量\n        var imageUrls = [],          //用于保存从服务器返回的图片信息数组\n            selectedImageCount = 0,  //当前已选择的但未上传的图片数量\n            optImageUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n            optImageFieldName = editor.getOpt('imageFieldName'),\n            optImageCompressBorder = editor.getOpt('imageCompressEnable') ? editor.getOpt('imageCompressBorder'):null,\n            maxSize = editor.getOpt('imageMaxSize') / 1024 / 1024,\n            extension = editor.getOpt('imageAllowFiles').join(';').replace(/\\./g, '*.');\n\n        /* 添加额外的GET参数 */\n        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n            urlWidthParams = optImageUrl + (optImageUrl.indexOf('?') == -1 ? '?':'&') + params;\n\n        utils.domReady(function(){\n            //创建Flash相关的参数集合\n            var flashOptions = {\n                container:\"flashContainer\",                                                    //flash容器id\n                url:urlWidthParams,                                           // 上传处理页面的url地址\n                ext:editor.queryCommandValue('serverParam') || {},                                 //可向服务器提交的自定义参数列表\n                fileType:'{\"description\":\"'+lang.fileType+'\", \"extension\":\"' + extension + '\"}',     //上传文件格式限制\n                flashUrl:'imageUploader.swf',                                                  //上传用的flash组件地址\n                width:600,          //flash的宽度\n                height:272,         //flash的高度\n                gridWidth:120,     // 每一个预览图片所占的宽度\n                gridHeight:120,    // 每一个预览图片所占的高度\n                picWidth:100,      // 单张预览图片的宽度\n                picHeight:100,     // 单张预览图片的高度\n                uploadDataFieldName: optImageFieldName,    // POST请求中图片数据的key\n                picDescFieldName:'pictitle',      // POST请求中图片描述的key\n                maxSize: maxSize,                         // 文件的最大体积,单位M\n                compressSize:1,                   // 上传前如果图片体积超过该值，会先压缩,单位M\n                maxNum:32,                         // 单次最大可上传多少个文件\n                compressSide: 0,                 //等比压缩的基准，0为按照最长边，1为按照宽度，2为按照高度\n                compressLength: optImageCompressBorder        //能接受的最大边长，超过该值Flash会自动等比压缩\n            };\n            //回调函数集合，支持传递函数名的字符串、函数句柄以及函数本身三种类型\n            var callbacks={\n                selectFileCallback: function(selectFiles){                // 选择文件的回调\n                    selectedImageCount += selectFiles.length;\n                    if(selectedImageCount) baidu.g(\"upload\").style.display = \"\";\n                    dialog.buttons[0].setDisabled(true); //初始化时置灰确定按钮\n                },\n                deleteFileCallback: function(delFiles){                 // 删除文件的回调\n                    selectedImageCount -= delFiles.length;\n                    if (!selectedImageCount) {\n                        baidu.g(\"upload\").style.display = \"none\";\n                        dialog.buttons[0].setDisabled(false);         //没有选择图片时重新点亮按钮\n                    }\n                },\n                uploadCompleteCallback: function(data){               // 单个文件上传完成的回调\n                    try{var info = eval(\"(\" + data.info + \")\");\n                    info && imageUrls.push(info);\n                    selectedImageCount--;\n                    }catch(e){}\n                },\n                uploadErrorCallback: function (data){         // 单个文件上传失败的回调,\n                    console && console.log(data);\n                },\n                allCompleteCallback: function(){              // 全部上传完成时的回调\n                    dialog.buttons[0].setDisabled(false);    //上传完毕后点亮按钮\n                }\n                //exceedFileCallback: 'exceedFileCallback',   // 文件超出限制的最大体积时的回调\n                //startUploadCallback: startUploadCallback    // 开始上传某个文件时的回调\n            };\n            wordImage.init(flashOptions,callbacks);\n        });\n\n    </script>\n\n</body>\n</html>"
  },
  {
    "path": "web/console/public/UEditor/dialogs/wordimage/wordimage.js",
    "content": "/**\n * Created by JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-1-30\n * Time: 下午12:50\n * To change this template use File | Settings | File Templates.\n */\n\n\n\nvar wordImage = {};\n//(function(){\nvar g = baidu.g,\n\tflashObj,flashContainer;\n\nwordImage.init = function(opt, callbacks) {\n\tshowLocalPath(\"localPath\");\n\t//createCopyButton(\"clipboard\",\"localPath\");\n\tcreateFlashUploader(opt, callbacks);\n\taddUploadListener();\n\taddOkListener();\n};\n\nfunction hideFlash(){\n    flashObj = null;\n    flashContainer.innerHTML = \"\";\n}\nfunction addOkListener() {\n\tdialog.onok = function() {\n\t\tif (!imageUrls.length) return;\n\t\tvar urlPrefix = editor.getOpt('imageUrlPrefix'),\n            images = domUtils.getElementsByTagName(editor.document,\"img\");\n        editor.fireEvent('saveScene');\n\t\tfor (var i = 0,img; img = images[i++];) {\n\t\t\tvar src = img.getAttribute(\"word_img\");\n\t\t\tif (!src) continue;\n\t\t\tfor (var j = 0,url; url = imageUrls[j++];) {\n\t\t\t\tif (src.indexOf(url.original.replace(\" \",\"\")) != -1) {\n\t\t\t\t\timg.src = urlPrefix + url.url;\n\t\t\t\t\timg.setAttribute(\"_src\", urlPrefix + url.url);  //同时修改\"_src\"属性\n\t\t\t\t\timg.setAttribute(\"title\",url.title);\n                    domUtils.removeAttributes(img, [\"word_img\",\"style\",\"width\",\"height\"]);\n\t\t\t\t\teditor.fireEvent(\"selectionchange\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n        editor.fireEvent('saveScene');\n        hideFlash();\n\t};\n    dialog.oncancel = function(){\n        hideFlash();\n    }\n}\n\n/**\n * 绑定开始上传事件\n */\nfunction addUploadListener() {\n\tg(\"upload\").onclick = function () {\n\t\tflashObj.upload();\n\t\tthis.style.display = \"none\";\n\t};\n}\n\nfunction showLocalPath(id) {\n    //单张编辑\n    var img = editor.selection.getRange().getClosedNode();\n    var images = editor.execCommand('wordimage');\n    if(images.length==1 || img && img.tagName == 'IMG'){\n        g(id).value = images[0];\n        return;\n    }\n\tvar path = images[0];\n    var leftSlashIndex  = path.lastIndexOf(\"/\")||0,  //不同版本的doc和浏览器都可能影响到这个符号，故直接判断两种\n        rightSlashIndex = path.lastIndexOf(\"\\\\\")||0,\n        separater = leftSlashIndex > rightSlashIndex ? \"/\":\"\\\\\" ;\n\n\tpath = path.substring(0, path.lastIndexOf(separater)+1);\n\tg(id).value = path;\n}\n\nfunction createFlashUploader(opt, callbacks) {\n    //由于lang.flashI18n是静态属性，不可以直接进行修改，否则会影响到后续内容\n    var i18n = utils.extend({},lang.flashI18n);\n    //处理图片资源地址的编码，补全等问题\n    for(var i in i18n){\n        if(!(i in {\"lang\":1,\"uploadingTF\":1,\"imageTF\":1,\"textEncoding\":1}) && i18n[i]){\n            i18n[i] = encodeURIComponent(editor.options.langPath + editor.options.lang + \"/images/\" + i18n[i]);\n        }\n    }\n    opt = utils.extend(opt,i18n,false);\n\tvar option = {\n\t\tcreateOptions:{\n\t\t\tid:'flash',\n\t\t\turl:opt.flashUrl,\n\t\t\twidth:opt.width,\n\t\t\theight:opt.height,\n\t\t\terrorMessage:lang.flashError,\n\t\t\twmode:browser.safari ? 'transparent' : 'window',\n\t\t\tver:'10.0.0',\n\t\t\tvars:opt,\n\t\t\tcontainer:opt.container\n\t\t}\n\t};\n\n\toption = extendProperty(callbacks, option);\n\tflashObj = new baidu.flash.imageUploader(option);\n    flashContainer = $G(opt.container);\n}\n\nfunction extendProperty(fromObj, toObj) {\n\tfor (var i in fromObj) {\n\t\tif (!toObj[i]) {\n\t\t\ttoObj[i] = fromObj[i];\n\t\t}\n\t}\n\treturn toObj;\n}\n\n//})();\n\nfunction getPasteData(id) {\n\tbaidu.g(\"msg\").innerHTML = lang.copySuccess + \"</br>\";\n\tsetTimeout(function() {\n\t\tbaidu.g(\"msg\").innerHTML = \"\";\n\t}, 5000);\n\treturn baidu.g(id).value;\n}\n\nfunction createCopyButton(id, dataFrom) {\n\tbaidu.swf.create({\n\t\t\tid:\"copyFlash\",\n\t\t\turl:\"fClipboard_ueditor.swf\",\n\t\t\twidth:\"58\",\n\t\t\theight:\"25\",\n\t\t\terrorMessage:\"\",\n\t\t\tbgColor:\"#CBCBCB\",\n\t\t\twmode:\"transparent\",\n\t\t\tver:\"10.0.0\",\n\t\t\tvars:{\n\t\t\t\ttid:dataFrom\n\t\t\t}\n\t\t}, id\n\t);\n\n\tvar clipboard = baidu.swf.getMovie(\"copyFlash\");\n\tvar clipinterval = setInterval(function() {\n\t\tif (clipboard && clipboard.flashInit) {\n\t\t\tclearInterval(clipinterval);\n\t\t\tclipboard.setHandCursor(true);\n\t\t\tclipboard.setContentFuncName(\"getPasteData\");\n\t\t\t//clipboard.setMEFuncName(\"mouseEventHandler\");\n\t\t}\n\t}, 500);\n}\ncreateCopyButton(\"clipboard\", \"localPath\");"
  },
  {
    "path": "web/console/public/UEditor/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-cmn-Hans\">\n\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover\" />\n\t<link rel=\"apple-touch-icon\" href=\"/favicon.ico\">\n\t<title>53AI Hub</title>\n</head>\n\n<body>\n\t<script id=\"ueditor-container\" name=\"content\" type=\"text/plain\"></script>\n\t<!-- <script type=\"text/javascript\" charset=\"utf-8\" src=\"http://agenthubdev.53ai.com/api/libs/js/UEditor/ueditor.config.js\"></script> -->\n\t<!-- <script type=\"text/javascript\" charset=\"utf-8\" src=\"http://agenthubdev.53ai.com/api/libs/js/UEditor/ueditor.all.min.js\"></script> -->\n\t<script type=\"text/javascript\">\n\t\tvar configScript = document.createElement('script')\n\t\tconfigScript.src = location.origin + '/console/UEditor/ueditor.config.js'\n\t\tconfigScript.id = 'ueditor-config'\n\t\tconfigScript.onload = () => {\n\t\t\tvar allScript = document.createElement('script')\n\t\t\tallScript.src = location.origin + '/console/UEditor/ueditor.all.min.js'\n\t\t\tallScript.id = 'ueditor-all'\n\t\t\tallScript.onload = () => {\n\t\t\t\twindow.UEDITOR_HOME_URL = location.origin + '/console/UEditor/'\n\t\t\t\twindow.ueInstance = UE.getEditor('ueditor-container', {\n\t\t\t\t\tautoHeightEnabled: false,\n\t\t\t\t\telementPathEnabled: false,\n\t\t\t\t\tfocus: true,\n\t\t\t\t\tinitialFrameWidth: '100%',\n\t\t\t\t\tinitialFrameHeight: '100%',\n\t\t\t\t\tmaximumWords: 1000000,\n\t\t\t\t\tallowDivTransToP: false\n\t\t\t\t});\n\t\t\t\twindow.ueInstance.ready(function () {\n\t\t\t\t\tif (window.parent) {\n\t\t\t\t\t\twindow.parent.postMessage({ action: 'ueditor-ready' }, '*')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tdocument.body.appendChild(allScript)\n\t\t}\n\t\tdocument.body.appendChild(configScript)\n\t\twindow.addEventListener('message', (e) => {\n\t\t\tconst data = e.data || {}\n\t\t\tconst action = data.action || ''\n\t\t\tconst value = data.value || ''\n\t\t\tif (action === 'getHtml') {\n\t\t\t\twindow.parent.postMessage({ action: 'getHtml', value: window.ueInstance.getContent() }, '*')\n\t\t\t}\n\t\t\tif (action === 'setValue') {\n\t\t\t\twindow.ueInstance.setContent(value)\n\t\t\t}\n\t\t})\n\t</script>\n\t<style>\n\t\thtml, body {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tbox-sizing: border-box;\n\t\t\toverflow: hidden;\n\t\t}\n\t\t#ueditor-container {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t\t#ueditor-container .edui-editor {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tbox-sizing: border-box;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t}\n\t\t#ueditor-container .edui-editor-iframeholder {\n\t\t\tflex: 1;\n\t\t\theight: 0 !important;\n\t\t\t/* overflow: auto !important; */\n\t\t}\n\t\t#ueditor-container .edui-editor-iframeholder iframe {\n\t\t\theight: 100% !important;\n\t\t}\n\t</style>\n</body>\n\n</html>\n"
  },
  {
    "path": "web/console/public/UEditor/lang/en/en.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-6-12\n * Time: 下午6:57\n * To change this template use File | Settings | File Templates.\n */\nUE.I18N['en'] = {\n    'labelMap':{\n        'anchor':'Anchor', 'undo':'Undo', 'redo':'Redo', 'bold':'Bold', 'indent':'Indent', 'snapscreen':'SnapScreen',\n        'italic':'Italic', 'underline':'Underline', 'strikethrough':'Strikethrough', 'subscript':'SubScript','fontborder':'text border',\n        'superscript':'SuperScript', 'formatmatch':'Format Match', 'source':'Source', 'blockquote':'BlockQuote',\n        'pasteplain':'PastePlain', 'selectall':'SelectAll', 'print':'Print', 'preview':'Preview',\n        'horizontal':'Horizontal', 'removeformat':'RemoveFormat', 'time':'Time', 'date':'Date',\n        'unlink':'Unlink', 'insertrow':'InsertRow', 'insertcol':'InsertCol', 'mergeright':'MergeRight', 'mergedown':'MergeDown',\n        'deleterow':'DeleteRow', 'deletecol':'DeleteCol', 'splittorows':'SplitToRows','insertcode':'insert code',\n        'splittocols':'SplitToCols', 'splittocells':'SplitToCells','deletecaption':'DeleteCaption','inserttitle':'InsertTitle',\n        'mergecells':'MergeCells', 'deletetable':'DeleteTable', 'cleardoc':'Clear', 'insertparagraphbeforetable':\"InsertParagraphBeforeTable\",\n        'fontfamily':'FontFamily', 'fontsize':'FontSize', 'paragraph':'Paragraph','simpleupload':'Single Image','insertimage':'Multi Image','edittable':'Edit Table', 'edittd':'Edit Td','link':'Link',\n        'emotion':'Emotion', 'spechars':'Spechars', 'searchreplace':'SearchReplace', 'map':'BaiduMap', 'gmap':'GoogleMap',\n        'insertvideo':'Video', 'help':'Help', 'justifyleft':'JustifyLeft', 'justifyright':'JustifyRight', 'justifycenter':'JustifyCenter',\n        'justifyjustify':'Justify', 'forecolor':'FontColor', 'backcolor':'BackColor', 'insertorderedlist':'OL',\n        'insertunorderedlist':'UL', 'fullscreen':'FullScreen', 'directionalityltr':'EnterFromLeft', 'directionalityrtl':'EnterFromRight',\n        'rowspacingtop':'RowSpacingTop', 'rowspacingbottom':'RowSpacingBottom', 'pagebreak':'PageBreak', 'insertframe':'Iframe', 'imagenone':'Default',\n        'imageleft':'ImageLeft', 'imageright':'ImageRight', 'attachment':'Attachment', 'imagecenter':'ImageCenter', 'wordimage':'WordImage',\n        'lineheight':'LineHeight','edittip':'EditTip','customstyle':'CustomStyle', 'scrawl':'Scrawl', 'autotypeset':'AutoTypeset',\n        'webapp':'WebAPP', 'touppercase':'UpperCase', 'tolowercase':'LowerCase','template':'Template','background':'Background','inserttable':'InsertTable',\n        'music':'Music', 'charts': 'charts','drafts': 'Load from Drafts'\n    },\n    'insertorderedlist':{\n        'num':'1,2,3...',\n        'num1':'1),2),3)...',\n        'num2':'(1),(2),(3)...',\n        'cn':'一,二,三....',\n        'cn1':'一),二),三)....',\n        'cn2':'(一),(二),(三)....',\n        'decimal':'1,2,3...',\n        'lower-alpha':'a,b,c...',\n        'lower-roman':'i,ii,iii...',\n        'upper-alpha':'A,B,C...',\n        'upper-roman':'I,II,III...'\n    },\n    'insertunorderedlist':{\n        'circle':'○ Circle',\n        'disc':'● Circle dot',\n        'square':'■ Rectangle ',\n        'dash' :'－ Dash',\n        'dot' : '。dot'\n    },\n    'paragraph':{'p':'Paragraph', 'h1':'Title 1', 'h2':'Title 2', 'h3':'Title 3', 'h4':'Title 4', 'h5':'Title 5', 'h6':'Title 6'},\n    'fontfamily':{\n        'songti':'Sim Sun',\n        'kaiti':'Sim Kai',\n        'heiti':'Sim Hei',\n        'lishu':'Sim Li',\n        'yahei': 'Microsoft YaHei',\n        'andaleMono':'Andale Mono',\n        'arial': 'Arial',\n        'arialBlack':'Arial Black',\n        'comicSansMs':'Comic Sans MS',\n        'impact':'Impact',\n        'timesNewRoman':'Times New Roman'\n    },\n    'customstyle':{\n        'tc':'Title center',\n        'tl':'Title left',\n        'im':'Important',\n        'hi':'Highlight'\n    },\n    'autoupload': {\n        'exceedSizeError': 'File Size Exceed',\n        'exceedTypeError': 'File Type Not Allow',\n        'jsonEncodeError': 'Server Return Format Error',\n        'loading':\"loading...\",\n        'loadError':\"load error\",\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n    },\n    'simpleupload':{\n        'exceedSizeError': 'File Size Exceed',\n        'exceedTypeError': 'File Type Not Allow',\n        'jsonEncodeError': 'Server Return Format Error',\n        'loading':\"loading...\",\n        'loadError':\"load error\",\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n    },\n    'elementPathTip':\"Path\",\n    'wordCountTip':\"Word Count\",\n    'wordCountMsg':'{#count} characters entered,{#leave} left. ',\n    'wordOverFlowMsg':'<span style=\"color:red;\">The number of characters has exceeded allowable maximum values, the server may refuse to save!</span>',\n    'ok':\"OK\",\n    'cancel':\"Cancel\",\n    'closeDialog':\"closeDialog\",\n    'tableDrag':\"You must import the file uiUtils.js before drag! \",\n    'autofloatMsg':\"The plugin AutoFloat depends on EditorUI!\",\n    'loadconfigError': 'Get server config error.',\n    'loadconfigFormatError': 'Server config format error.',\n    'loadconfigHttpError': 'Get server config http error.',\n    'snapScreen_plugin':{\n        'browserMsg':\"Only IE supported!\",\n        'callBackErrorMsg':\"The callback data is wrong,please check the config!\",\n        'uploadErrorMsg':\"Upload error,please check your server environment! \"\n    },\n    'insertcode':{\n        'as3':'ActionScript 3',\n        'bash':'Bash/Shell',\n        'cpp':'C/C++',\n        'css':'CSS',\n        'cf':'ColdFusion',\n        'c#':'C#',\n        'delphi':'Delphi',\n        'diff':'Diff',\n        'erlang':'Erlang',\n        'groovy':'Groovy',\n        'html':'HTML',\n        'java':'Java',\n        'jfx':'JavaFX',\n        'js':'JavaScript',\n        'pl':'Perl',\n        'php':'PHP',\n        'plain':'Plain Text',\n        'ps':'PowerShell',\n        'python':'Python',\n        'ruby':'Ruby',\n        'scala':'Scala',\n        'sql':'SQL',\n        'vb':'Visual Basic',\n        'xml':'XML'\n    },\n    'confirmClear':\"Do you confirm to clear the Document?\",\n    'contextMenu':{\n        'delete':\"Delete\",\n        'selectall':\"Select all\",\n        'deletecode':\"Delete Code\",\n        'cleardoc':\"Clear Document\",\n        'confirmclear':\"Do you confirm to clear the Document?\",\n        'unlink':\"Unlink\",\n        'paragraph':\"Paragraph\",\n        'edittable':\"Table property\",\n        'aligncell':'Align cell',\n        'aligntable':'Table alignment',\n        'tableleft':'Left float',\n        'tablecenter':'Center',\n        'tableright':'Right float',\n        'aligntd':'Cell alignment',\n        'edittd':\"Cell property\",\n        'setbordervisible':'set table edge visible',\n        'table':\"Table\",\n        'justifyleft':'Justify Left',\n        'justifyright':'Justify Right',\n        'justifycenter':'Justify Center',\n        'justifyjustify':'Default',\n        'deletetable':\"Delete table\",\n        'insertparagraphbefore':\"InsertedBeforeLine\",\n        'insertparagraphafter':'InsertedAfterLine',\n        'inserttable':'Insert table',\n        'insertcaption':'Insert caption',\n        'deletecaption':'Delete Caption',\n        'inserttitle':'Insert Title',\n        'deletetitle':'Delete Title',\n        'inserttitlecol':'Insert Title Col',\n        'deletetitlecol':'Delete Title Col',\n        'averageDiseRow':'AverageDise Row',\n        'averageDisCol':'AverageDis Col',\n        'deleterow':\"Delete row\",\n        'deletecol':\"Delete col\",\n        'insertrow':\"Insert row\",\n        'insertcol':\"Insert col\",\n        'insertrownext':'Insert Row Next',\n        'insertcolnext':'Insert Col Next',\n        'mergeright':\"Merge right\",\n        'mergeleft':\"Merge left\",\n        'mergedown':\"Merge down\",\n        'mergecells':\"Merge cells\",\n        'splittocells':\"Split to cells\",\n        'splittocols':\"Split to Cols\",\n        'splittorows':\"Split to Rows\",\n        'tablesort':'Table sorting',\n        'enablesort':'Sorting Enable',\n        'disablesort':'Sorting Disable',\n        'reversecurrent':'Reverse current',\n        'orderbyasc':'Order By ASCII',\n        'reversebyasc':'Reverse By ASCII',\n        'orderbynum':'Order By Num',\n        'reversebynum':'Reverse By Num',\n        'borderbk':'Border shading',\n        'setcolor':'interlaced color',\n        'unsetcolor':'Cancel interlacedcolor',\n        'setbackground':'Background interlaced',\n        'unsetbackground':'Cancel Bk interlaced',\n        'redandblue':'Blue and red',\n        'threecolorgradient':'Three-color gradient',\n        'copy':\"Copy(Ctrl + c)\",\n        'copymsg':\"Browser does not support. Please use 'Ctrl + c' instead!\",\n        'paste':\"Paste(Ctrl + v)\",\n        'pastemsg':\"Browser does not support. Please use 'Ctrl + v' instead!\"\n    },\n    'copymsg': \"Browser does not support. Please use 'Ctrl + c' instead!\",\n    'pastemsg': \"Browser does not support. Please use 'Ctrl + v' instead!\",\n    'anthorMsg':\"Link\",\n    'clearColor':'Clear',\n    'standardColor':'Standard color',\n    'themeColor':'Theme color',\n    'property':'Property',\n    'default':'Default',\n    'modify':'Modify',\n    'justifyleft':'Justify Left',\n    'justifyright':'Justify Right',\n    'justifycenter':'Justify Center',\n    'justify':'Default',\n    'clear':'Clear',\n    'anchorMsg':'Anchor',\n    'delete':'Delete',\n    'clickToUpload':\"Click to upload\",\n    'unset':'Language hasn\\'t been set!',\n    't_row':'row',\n    't_col':'col',\n    'pasteOpt':'Paste Option',\n    'pasteSourceFormat':\"Keep Source Formatting\",\n    'tagFormat':'Keep tag',\n    'pasteTextFormat':'Keep Text only',\n    'more':'More',\n    'autoTypeSet':{\n        'mergeLine':\"Merge empty line\",\n        'delLine':\"Del empty line\",\n        'removeFormat':\"Remove format\",\n        'indent':\"Indent\",\n        'alignment':\"Alignment\",\n        'imageFloat':\"Image float\",\n        'removeFontsize':\"Remove font size\",\n        'removeFontFamily':\"Remove fontFamily\",\n        'removeHtml':\"Remove redundant HTML code\",\n        'pasteFilter':\"Paste filter\",\n        'run':\"Done\",\n        'symbol':'Symbol Conversion',\n        'bdc2sb':'Full-width to Half-width',\n        'tobdc':'Half-width to Full-width'\n    },\n\n    'background':{\n        'static':{\n            'lang_background_normal':'Normal',\n            'lang_background_local':'Online',\n            'lang_background_set':'Background Set',\n            'lang_background_none':'No Background',\n            'lang_background_colored':'Colored Background',\n            'lang_background_color':'Color Set',\n            'lang_background_netimg':'Net-Image',\n            'lang_background_align':'Align Type',\n            'lang_background_position':'Position',\n            'repeatType':{'options':[\"Center\", \"Repeat-x\", \"Repeat-y\", \"Tile\",\"Custom\"]}\n        },\n        'noUploadImage':\"No pictures has been uploaded！\",\n        'toggleSelect':'Change the active state by click!\\n Image Size: '\n    },\n    //===============dialog i18N=======================\n    'insertimage':{\n        'static':{\n            'lang_tab_remote':\"Insert\",\n            'lang_tab_upload':\"Local\",\n            'lang_tab_online':\"Manager\",\n            'lang_tab_search':\"Search\",\n            'lang_input_url':\"Address:\",\n            'lang_input_size':\"Size:\",\n            'lang_input_width':\"Width\",\n            'lang_input_height':\"Height\",\n            'lang_input_border':\"Border:\",\n            'lang_input_vhspace':\"Margins:\",\n            'lang_input_title':\"Title:\",\n            'lang_input_align':'Image Float Style:',\n            'lang_imgLoading':\"Loading...\",\n            'lang_start_upload':\"Start Upload\",\n            'lock':{'title':\"Lock rate\"},\n            'searchType':{'title':\"ImageType\", 'options':[\"News\", \"Wallpaper\", \"emotions\", \"photo\"]},\n            'searchTxt':{'value':\"Enter the search keyword!\"},\n            'searchBtn':{'value':\"Search\"},\n            'searchReset':{'value':\"Clear\"},\n            'noneAlign':{'title':'None Float'},\n            'leftAlign':{'title':'Left Float'},\n            'rightAlign':{'title':'Right Float'},\n            'centerAlign':{'title':'Center In A Line'}\n        },\n        'uploadSelectFile':'Select File',\n        'uploadAddFile':'Add File',\n        'uploadStart':'Start Upload',\n        'uploadPause':'Pause Upload',\n        'uploadContinue':'Continue Upload',\n        'uploadRetry':'Retry Upload',\n        'uploadDelete':'Delete',\n        'uploadTurnLeft':'Turn Left',\n        'uploadTurnRight':'Turn Right',\n        'uploadPreview':'Doing Preview',\n        'uploadNoPreview':'Can Not Preview',\n        'updateStatusReady': 'Selected _ pictures, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ pictures (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize':'File Size Exceed',\n        'errorFileType':'File Type Not Allow',\n        'errorInterrupt':'File Upload Interrupted',\n        'errorUploadRetry':'Upload Error, Please Retry.',\n        'errorHttp':'Http Error',\n        'errorServerUpload':'Server Result Error.',\n        'remoteLockError':\"Cannot Lock the Proportion between width and height\",\n        'numError':\"Please enter the correct Num. e.g 123,400\",\n        'imageUrlError':\"The image format may be wrong!\",\n        'imageLoadError':\"Error,please check the network or URL！\",\n        'searchRemind':\"Enter the search keyword!\",\n        'searchLoading':\"Image is loading,please wait...\",\n        'searchRetry':\" Sorry,can't find the image,please try again!\"\n    },\n    'attachment':{\n        'static':{\n            'lang_tab_upload': 'Upload',\n            'lang_tab_online': 'Online',\n            'lang_start_upload':\"Start upload\",\n            'lang_drop_remind':\"You can drop files here, a single maximum of 300 files\"\n        },\n        'uploadSelectFile':'Select File',\n        'uploadAddFile':'Add File',\n        'uploadStart':'Start Upload',\n        'uploadPause':'Pause Upload',\n        'uploadContinue':'Continue Upload',\n        'uploadRetry':'Retry Upload',\n        'uploadDelete':'Delete',\n        'uploadTurnLeft':'Turn Left',\n        'uploadTurnRight':'Turn Right',\n        'uploadPreview':'Doing Preview',\n        'updateStatusReady': 'Selected _ files, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ files (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize':'File Size Exceed',\n        'errorFileType':'File Type Not Allow',\n        'errorInterrupt':'File Upload Interrupted',\n        'errorUploadRetry':'Upload Error, Please Retry.',\n        'errorHttp':'Http Error',\n        'errorServerUpload':'Server Result Error.'\n    },\n\n    'insertvideo':{\n        'static':{\n            'lang_tab_insertV':\"Video\",\n            'lang_tab_searchV':\"Search\",\n            'lang_tab_uploadV':\"Upload\",\n            'lang_video_url':\" URL \",\n            'lang_video_size':\"Video Size\",\n            'lang_videoW':\"Width\",\n            'lang_videoH':\"Height\",\n            'lang_alignment':\"Alignment\",\n            'videoSearchTxt':{'value':\"Enter the search keyword!\"},\n            'videoType':{'options':[\"All\", \"Hot\", \"Entertainment\", \"Funny\", \"Sports\", \"Science\", \"variety\"]},\n            'videoSearchBtn':{'value':\"Search in Baidu\"},\n            'videoSearchReset':{'value':\"Clear result\"},\n\n            'lang_input_fileStatus':' No file uploaded!',\n            'startUpload':{'style':\"background:url(upload.png) no-repeat;\"},\n\n            'lang_upload_size':\"Video Size\",\n            'lang_upload_width':\"Width\",\n            'lang_upload_height':\"Height\",\n            'lang_upload_alignment':\"Alignment\",\n            'lang_format_advice':\"Recommends mp4 format.\"\n        },\n        'numError':\"Please enter the correct Num. e.g 123,400\",\n        'floatLeft':\"Float left\",\n        'floatRight':\"Float right\",\n        'default':\"Default\",\n        'block':\"Display in block\",\n        'urlError':\"The video url format may be wrong!\",\n        'loading':\" &nbsp;The video is loading, please wait…\",\n        'clickToSelect':\"Click to select\",\n        'goToSource':'Visit source video ',\n        'noVideo':\" &nbsp; &nbsp;Sorry,can't find the video,please try again!\",\n\n        'browseFiles':'Open files',\n        'uploadSuccess':'Upload Successful!',\n        'delSuccessFile':'Remove from the success of the queue',\n        'delFailSaveFile':'Remove the save failed file',\n        'statusPrompt':' file(s) uploaded! ',\n        'flashVersionError':'The current Flash version is too low, please update FlashPlayer,then try again!',\n        'flashLoadingError':'The Flash failed loading! Please check the path or network state',\n        'fileUploadReady':'Wait for uploading...',\n        'delUploadQueue':'Remove from the uploading queue ',\n        'limitPrompt1':'Can not choose more than single',\n        'limitPrompt2':'file(s)！Please choose again！',\n        'delFailFile':'Remove failure file',\n        'fileSizeLimit':'File size exceeds the limit！',\n        'emptyFile':'Can not upload an empty file！',\n        'fileTypeError':'File type error！',\n        'unknownError':'Unknown error！',\n        'fileUploading':'Uploading,please wait...',\n        'cancelUpload':'Cancel upload',\n        'netError':'Network error',\n        'failUpload':'Upload failed',\n        'serverIOError':'Server IO error！',\n        'noAuthority':'No Permission！',\n        'fileNumLimit':'Upload limit to the number',\n        'failCheck':'Authentication fails, the upload is skipped!',\n        'fileCanceling':'Cancel, please wait...',\n        'stopUploading':'Upload has stopped...',\n\n        'uploadSelectFile':'Select File',\n        'uploadAddFile':'Add File',\n        'uploadStart':'Start Upload',\n        'uploadPause':'Pause Upload',\n        'uploadContinue':'Continue Upload',\n        'uploadRetry':'Retry Upload',\n        'uploadDelete':'Delete',\n        'uploadTurnLeft':'Turn Left',\n        'uploadTurnRight':'Turn Right',\n        'uploadPreview':'Doing Preview',\n        'updateStatusReady': 'Selected _ files, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ files (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize':'File Size Exceed',\n        'errorFileType':'File Type Not Allow',\n        'errorInterrupt':'File Upload Interrupted',\n        'errorUploadRetry':'Upload Error, Please Retry.',\n        'errorHttp':'Http Error',\n        'errorServerUpload':'Server Result Error.'\n    },\n    'webapp':{\n        'tip1':\"This function provided by Baidu APP,please apply for baidu APPKey webmaster first!\",\n        'tip2':\"And then open the file ueditor.config.js to set it! \",\n        'applyFor':\"APPLY FOR\",\n        'anthorApi':\"Baidu API\"\n    },\n    'template':{\n        'static':{\n            'lang_template_bkcolor':'Background Color',\n            'lang_template_clear' : 'Keep Content',\n            'lang_template_select':'Select Template'\n        },\n        'blank':\"Blank\",\n        'blog':\"Blog\",\n        'resume':\"Resume\",\n        'richText':\"Rich Text\",\n        'scrPapers':\"Scientific Papers\"\n    },\n    scrawl:{\n        'static':{\n            'lang_input_previousStep':\"Previous\",\n            'lang_input_nextsStep':\"Next\",\n            'lang_input_clear':'Clear',\n            'lang_input_addPic':'AddImage',\n            'lang_input_ScalePic':'ScaleImage',\n            'lang_input_removePic':'RemoveImage',\n            'J_imgTxt':{title:'Add background image'}\n        },\n        'noScarwl':\"No paint, a white paper...\",\n        'scrawlUpLoading':\"Image is uploading, please wait...\",\n        'continueBtn':\"Try again\",\n        'imageError':\"Image failed to load!\",\n        'backgroundUploading':'Image is uploading,please wait...'\n    },\n    'music':{\n        'static':{\n            'lang_input_tips':\"Input singer/song/album, search you interested in music!\",\n            'J_searchBtn':{value:'Search songs'}\n        },\n        'emptyTxt':'Not search to the relevant music results, please change a keyword try.',\n        'chapter':'Songs',\n        'singer':'Singer',\n        'special':'Album',\n        'listenTest':'Audition'\n    },\n    anchor:{\n        'static':{\n            'lang_input_anchorName':'Anchor Name:'\n        }\n    },\n    'charts':{\n        'static':{\n            'lang_data_source':'Data source:',\n            'lang_chart_format': 'Chart format:',\n            'lang_data_align': 'Align',\n            'lang_chart_align_same': 'Consistent with the X-axis Y-axis',\n            'lang_chart_align_reverse': 'X-axis Y-axis opposite',\n            'lang_chart_title': 'Title',\n            'lang_chart_main_title': 'main title:',\n            'lang_chart_sub_title': 'sub title:',\n            'lang_chart_x_title': 'X-axis title:',\n            'lang_chart_y_title': 'Y-axis title:',\n            'lang_chart_tip': 'Prompt',\n            'lang_cahrt_tip_prefix': 'prefix:',\n            'lang_cahrt_tip_description': '仅饼图有效， 当鼠标移动到饼图中相应的块上时，提示框内的文字的前缀',\n            'lang_chart_data_unit': 'Unit',\n            'lang_chart_data_unit_title': 'unit:',\n            'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位， 比如： 温度的单位 ℃',\n            'lang_chart_type': 'Chart type:',\n            'lang_prev_btn': 'Previous',\n            'lang_next_btn': 'Next'\n        }\n    },\n    emotion:{\n        'static':{\n            'lang_input_choice':'Choice',\n            'lang_input_Tuzki':'Tuzki',\n            'lang_input_lvdouwa':'LvDouWa',\n            'lang_input_BOBO':'BOBO',\n            'lang_input_babyCat':'BabyCat',\n            'lang_input_bubble':'Bubble',\n            'lang_input_youa':'YouA'\n        }\n    },\n    gmap:{\n        'static':{\n            'lang_input_address':'Address:',\n            'lang_input_search':'Search',\n            'address':{value:\"Beijing\"}\n        },\n        searchError:'Unable to locate the address!'\n    },\n    help:{\n        'static':{\n            'lang_input_about':'About',\n            'lang_input_shortcuts':'Shortcuts',\n            'lang_input_introduction':\"UEditor is developed by Baidu Co.ltd.  It is lightweight, customizable , focusing on user experience and etc. , UEditor is based on open source BSD license , allowing free use and redistribution.\",\n            'lang_Txt_shortcuts':'Shortcuts',\n            'lang_Txt_func':'Function',\n            'lang_Txt_bold':'Bold',\n            'lang_Txt_copy':'Copy',\n            'lang_Txt_cut':'Cut',\n            'lang_Txt_Paste':'Paste',\n            'lang_Txt_undo':'Undo',\n            'lang_Txt_redo':'Redo',\n            'lang_Txt_italic':'Italic',\n            'lang_Txt_underline':'Underline',\n            'lang_Txt_selectAll':'Select All',\n            'lang_Txt_visualEnter':'Submit',\n            'lang_Txt_fullscreen':'Fullscreen'\n        }\n    },\n    insertframe:{\n        'static':{\n            'lang_input_address':'Address：',\n            'lang_input_width':'Width：',\n            'lang_input_height':'height：',\n            'lang_input_isScroll':'Enable scrollbars：',\n            'lang_input_frameborder':'Show frame border：',\n            'lang_input_alignMode':'Alignment：',\n            'align':{title:\"Alignment\", options:[\"Default\", \"Left\", \"Right\", \"Center\"]}\n        },\n        'enterAddress':'Please enter an address!'\n    },\n    link:{\n        'static':{\n            'lang_input_text':'Text：',\n            'lang_input_url':'URL：',\n            'lang_input_title':'Title：',\n            'lang_input_target':'open in new window：'\n        },\n        'validLink':'Supports only effective when a link is selected',\n        'httpPrompt':'The hyperlink you enter should start with \"http|https|ftp://\"!'\n    },\n    map:{\n        'static':{\n            lang_city:\"City\",\n            lang_address:\"Address\",\n            city:{value:\"Beijing\"},\n            lang_search:\"Search\",\n            lang_dynamicmap:\"Dynamic map\"\n        },\n        cityMsg:\"Please enter the city name!\",\n        errorMsg:\"Can't find the place!\"\n    },\n    searchreplace:{\n        'static':{\n            lang_tab_search:\"Search\",\n            lang_tab_replace:\"Replace\",\n            lang_search1:\"Search\",\n            lang_search2:\"Search\",\n            lang_replace:\"Replace\",\n            lang_searchReg:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',\n            lang_searchReg1:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',\n            lang_case_sensitive1:\"Case sense\",\n            lang_case_sensitive2:\"Case sense\",\n            nextFindBtn:{value:\"Next\"},\n            preFindBtn:{value:\"Preview\"},\n            nextReplaceBtn:{value:\"Next\"},\n            preReplaceBtn:{value:\"Preview\"},\n            repalceBtn:{value:\"Replace\"},\n            repalceAllBtn:{value:\"Replace all\"}\n        },\n        getEnd:\"Has the search to the bottom!\",\n        getStart:\"Has the search to the top!\",\n        countMsg:\"Altogether replaced {#count} character(s)!\"\n    },\n    snapscreen:{\n        'static':{\n            lang_showMsg:\"You should install the UEditor screenshots program first!\",\n            lang_download:\"Download!\",\n            lang_step1:\"Step1:Download the program and then run it\",\n            lang_step2:\"Step2:After complete install,try to click the button again\"\n        }\n    },\n    spechars:{\n        'static':{},\n        tsfh:\"Special\",\n        lmsz:\"Roman\",\n        szfh:\"Numeral\",\n        rwfh:\"Japanese\",\n        xlzm:\"The Greek\",\n        ewzm:\"Russian\",\n        pyzm:\"Phonetic\",\n        yyyb:\"English\",\n        zyzf:\"Others\"\n    },\n    'edittable':{\n        'static':{\n            'lang_tableStyle':'Table style',\n            'lang_insertCaption':'Add table header row',\n            'lang_insertTitle':'Add table title row',\n            'lang_insertTitleCol':'Add table title col',\n            'lang_tableSize':'Automatically adjust table size',\n            'lang_autoSizeContent':'Adaptive by form text',\n            'lang_orderbycontent':\"Table of contents sortable\",\n            'lang_autoSizePage':'Page width adaptive',\n            'lang_example':'Example',\n            'lang_borderStyle':'Table Border',\n            'lang_color':'Color:'\n        },\n        captionName:'Caption',\n        titleName:'Title',\n        cellsName:'text',\n        errorMsg:'There are merged cells, can not sort.'\n    },\n    'edittip':{\n        'static':{\n            lang_delRow:'Delete entire row',\n            lang_delCol:'Delete entire col'\n        }\n    },\n    'edittd':{\n        'static':{\n            lang_tdBkColor:'Background Color:'\n        }\n    },\n    'formula':{\n        'static':{\n        }\n    },\n    wordimage:{\n        'static':{\n            lang_resave:\"The re-save step\",\n            uploadBtn:{src:\"upload.png\", alt:\"Upload\"},\n            clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},\n            lang_step:\" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process.\"\n        },\n        fileType:\"Image\",\n        flashError:\"Flash initialization failed!\",\n        netError:\"Network error! Please try again!\",\n        copySuccess:\"URL has been copied!\",\n\n        'flashI18n':{\n            lang:encodeURI( '{\"UploadingState\":\"totalNum: ${a},uploadComplete: ${b}\", \"BeforeUpload\":\"waitingNum: ${a}\", \"ExceedSize\":\"Size exceed${a}\", \"ErrorInPreview\":\"Preview failed\", \"DefaultDescription\":\"Description\", \"LoadingImage\":\"Loading...\"}' ),\n            uploadingTF:encodeURI( '{\"font\":\"Arial\", \"size\":12, \"color\":\"0x000\", \"bold\":\"true\", \"italic\":\"false\", \"underline\":\"false\"}' ),\n            imageTF:encodeURI( '{\"font\":\"Arial\", \"size\":11, \"color\":\"red\", \"bold\":\"false\", \"italic\":\"false\", \"underline\":\"false\"}' ),\n            textEncoding:\"utf-8\",\n            addImageSkinURL:\"addImage.png\",\n            allDeleteBtnUpSkinURL:\"allDeleteBtnUpSkin.png\",\n            allDeleteBtnHoverSkinURL:\"allDeleteBtnHoverSkin.png\",\n            rotateLeftBtnEnableSkinURL:\"rotateLeftEnable.png\",\n            rotateLeftBtnDisableSkinURL:\"rotateLeftDisable.png\",\n            rotateRightBtnEnableSkinURL:\"rotateRightEnable.png\",\n            rotateRightBtnDisableSkinURL:\"rotateRightDisable.png\",\n            deleteBtnEnableSkinURL:\"deleteEnable.png\",\n            deleteBtnDisableSkinURL:\"deleteDisable.png\",\n            backgroundURL:'',\n            listBackgroundURL:'',\n            buttonURL:'button.png'\n        }\n    },\n    'autosave': {\n        'success':'Local conservation success'\n    }\n};\n"
  },
  {
    "path": "web/console/public/UEditor/lang/zh-cn/zh-cn.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-6-12\n * Time: 下午5:02\n * To change this template use File | Settings | File Templates.\n */\nUE.I18N['zh-cn'] = {\n    'labelMap':{\n        'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图',\n        'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框',\n        'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用',\n        'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览',\n        'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期',\n        'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格',\n        'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行',\n        'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题',\n        'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':\"表格前插入行\",'insertcode':'代码语言',\n        'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接',\n        'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图', 'gmap':'Google地图',\n        'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐',\n        'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表',\n        'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入',\n        'rowspacingtop':'段前距', 'rowspacingbottom':'段后距',  'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认',\n        'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存',\n        'lineheight':'行间距','edittip' :'编辑提示','customstyle':'自定义标题', 'autotypeset':'自动排版',\n        'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦',\n        'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表'\n    },\n    'insertorderedlist':{\n        'num':'1,2,3...',\n        'num1':'1),2),3)...',\n        'num2':'(1),(2),(3)...',\n        'cn':'一,二,三....',\n        'cn1':'一),二),三)....',\n        'cn2':'(一),(二),(三)....',\n        'decimal':'1,2,3...',\n        'lower-alpha':'a,b,c...',\n        'lower-roman':'i,ii,iii...',\n        'upper-alpha':'A,B,C...',\n        'upper-roman':'I,II,III...'\n    },\n    'insertunorderedlist':{\n        'circle':'○ 大圆圈',\n        'disc':'● 小黑点',\n        'square':'■ 小方块 ',\n        'dash' :'— 破折号',\n        'dot':' 。 小圆圈'\n    },\n    'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'},\n    'fontfamily':{\n        'songti':'宋体',\n        'kaiti':'楷体',\n        'heiti':'黑体',\n        'lishu':'隶书',\n        'yahei':'微软雅黑',\n        'andaleMono':'andale mono',\n        'arial': 'arial',\n        'arialBlack':'arial black',\n        'comicSansMs':'comic sans ms',\n        'impact':'impact',\n        'timesNewRoman':'times new roman'\n    },\n    'customstyle':{\n        'tc':'标题居中',\n        'tl':'标题居左',\n        'im':'强调',\n        'hi':'明显强调'\n    },\n    'autoupload': {\n        'exceedSizeError': '文件大小超出限制',\n        'exceedTypeError': '文件格式不允许',\n        'jsonEncodeError': '服务器返回格式错误',\n        'loading':\"正在上传...\",\n        'loadError':\"上传错误\",\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！'\n    },\n    'simpleupload':{\n        'exceedSizeError': '文件大小超出限制',\n        'exceedTypeError': '文件格式不允许',\n        'jsonEncodeError': '服务器返回格式错误',\n        'loading':\"正在上传...\",\n        'loadError':\"上传错误\",\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！'\n    },\n    'elementPathTip':\"元素路径\",\n    'wordCountTip':\"字数统计\",\n    'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ',\n    'wordOverFlowMsg':'<span style=\"color:red;\">字数超出最大允许值，服务器可能拒绝保存！</span>',\n    'ok':\"确认\",\n    'cancel':\"取消\",\n    'closeDialog':\"关闭对话框\",\n    'tableDrag':\"表格拖动必须引入uiUtils.js文件！\",\n    'autofloatMsg':\"工具栏浮动依赖编辑器UI，您首先需要引入UI文件!\",\n    'loadconfigError': '获取后台配置项请求出错，上传功能将不能正常使用！',\n    'loadconfigFormatError': '后台配置项返回格式出错，上传功能将不能正常使用！',\n    'loadconfigHttpError': '请求后台配置项http错误，上传功能将不能正常使用！',\n    'snapScreen_plugin':{\n        'browserMsg':\"仅支持IE浏览器！\",\n        'callBackErrorMsg':\"服务器返回数据有误，请检查配置项之后重试。\",\n        'uploadErrorMsg':\"截图上传失败，请检查服务器端环境! \"\n    },\n    'insertcode':{\n        'as3':'ActionScript 3',\n        'bash':'Bash/Shell',\n        'cpp':'C/C++',\n        'css':'CSS',\n        'cf':'ColdFusion',\n        'c#':'C#',\n        'delphi':'Delphi',\n        'diff':'Diff',\n        'erlang':'Erlang',\n        'groovy':'Groovy',\n        'html':'HTML',\n        'java':'Java',\n        'jfx':'JavaFX',\n        'js':'JavaScript',\n        'pl':'Perl',\n        'php':'PHP',\n        'plain':'Plain Text',\n        'ps':'PowerShell',\n        'python':'Python',\n        'ruby':'Ruby',\n        'scala':'Scala',\n        'sql':'SQL',\n        'vb':'Visual Basic',\n        'xml':'XML'\n    },\n    'confirmClear':\"确定清空当前文档么？\",\n    'contextMenu':{\n        'delete':\"删除\",\n        'selectall':\"全选\",\n        'deletecode':\"删除代码\",\n        'cleardoc':\"清空文档\",\n        'confirmclear':\"确定清空当前文档么？\",\n        'unlink':\"删除超链接\",\n        'paragraph':\"段落格式\",\n        'edittable':\"表格属性\",\n        'aligntd':\"单元格对齐方式\",\n        'aligntable':'表格对齐方式',\n        'tableleft':'左浮动',\n        'tablecenter':'居中显示',\n        'tableright':'右浮动',\n        'edittd':\"单元格属性\",\n        'setbordervisible':'设置表格边线可见',\n        'justifyleft':'左对齐',\n        'justifyright':'右对齐',\n        'justifycenter':'居中对齐',\n        'justifyjustify':'两端对齐',\n        'table':\"表格\",\n        'inserttable':'插入表格',\n        'deletetable':\"删除表格\",\n        'insertparagraphbefore':\"前插入段落\",\n        'insertparagraphafter':'后插入段落',\n        'deleterow':\"删除当前行\",\n        'deletecol':\"删除当前列\",\n        'insertrow':\"前插入行\",\n        'insertcol':\"左插入列\",\n        'insertrownext':'后插入行',\n        'insertcolnext':'右插入列',\n        'insertcaption':'插入表格名称',\n        'deletecaption':'删除表格名称',\n        'inserttitle':'插入表格标题行',\n        'deletetitle':'删除表格标题行',\n        'inserttitlecol':'插入表格标题列',\n        'deletetitlecol':'删除表格标题列',\n        'averageDiseRow':'平均分布各行',\n        'averageDisCol':'平均分布各列',\n        'mergeright':\"向右合并\",\n        'mergeleft':\"向左合并\",\n        'mergedown':\"向下合并\",\n        'mergecells':\"合并单元格\",\n        'splittocells':\"完全拆分单元格\",\n        'splittocols':\"拆分成列\",\n        'splittorows':\"拆分成行\",\n        'tablesort':'表格排序',\n        'enablesort':'设置表格可排序',\n        'disablesort':'取消表格可排序',\n        'reversecurrent':'逆序当前',\n        'orderbyasc':'按ASCII字符升序',\n        'reversebyasc':'按ASCII字符降序',\n        'orderbynum':'按数值大小升序',\n        'reversebynum':'按数值大小降序',\n        'borderbk':'边框底纹',\n        'setcolor':'表格隔行变色',\n        'unsetcolor':'取消表格隔行变色',\n        'setbackground':'选区背景隔行',\n        'unsetbackground':'取消选区背景',\n        'redandblue':'红蓝相间',\n        'threecolorgradient':'三色渐变',\n        'copy':\"复制(Ctrl + c)\",\n        'copymsg': \"浏览器不支持,请使用 'Ctrl + c'\",\n        'paste':\"粘贴(Ctrl + v)\",\n         'pastemsg': \"浏览器不支持,请使用 'Ctrl + v'\"\n    },\n    'copymsg': \"浏览器不支持,请使用 'Ctrl + c'\",\n    'pastemsg': \"浏览器不支持,请使用 'Ctrl + v'\",\n    'anthorMsg':\"链接\",\n    'clearColor':'清空颜色',\n    'standardColor':'标准颜色',\n    'themeColor':'主题颜色',\n    'property':'属性',\n    'default':'默认',\n    'modify':'修改',\n    'justifyleft':'左对齐',\n    'justifyright':'右对齐',\n    'justifycenter':'居中',\n    'justify':'默认',\n    'clear':'清除',\n    'anchorMsg':'锚点',\n    'delete':'删除',\n    'clickToUpload':\"点击上传\",\n    'unset':'尚未设置语言文件',\n    't_row':'行',\n    't_col':'列',\n    'more':'更多',\n    'pasteOpt':'粘贴选项',\n    'pasteSourceFormat':\"保留源格式\",\n    'tagFormat':'只保留标签',\n    'pasteTextFormat':'只保留文本',\n    'autoTypeSet':{\n        'mergeLine':\"合并空行\",\n        'delLine':\"清除空行\",\n        'removeFormat':\"清除格式\",\n        'indent':\"首行缩进\",\n        'alignment':\"对齐方式\",\n        'imageFloat':\"图片浮动\",\n        'removeFontsize':\"清除字号\",\n        'removeFontFamily':\"清除字体\",\n        'removeHtml':\"清除冗余HTML代码\",\n        'pasteFilter':\"粘贴过滤\",\n        'run':\"执行\",\n        'symbol':'符号转换',\n        'bdc2sb':'全角转半角',\n        'tobdc':'半角转全角'\n    },\n\n    'background':{\n        'static':{\n            'lang_background_normal':'背景设置',\n            'lang_background_local':'在线图片',\n            'lang_background_set':'选项',\n            'lang_background_none':'无背景色',\n            'lang_background_colored':'有背景色',\n            'lang_background_color':'颜色设置',\n            'lang_background_netimg':'网络图片',\n            'lang_background_align':'对齐方式',\n            'lang_background_position':'精确定位',\n            'repeatType':{'options':[\"居中\", \"横向重复\", \"纵向重复\", \"平铺\",\"自定义\"]}\n\n        },\n        'noUploadImage':\"当前未上传过任何图片！\",\n        'toggleSelect':\"单击可切换选中状态\\n原图尺寸: \"\n    },\n    //===============dialog i18N=======================\n    'insertimage':{\n        'static':{\n            'lang_tab_remote':\"插入图片\", //节点\n            'lang_tab_upload':\"本地上传\",\n            'lang_tab_online':\"在线管理\",\n            'lang_tab_search':\"图片搜索\",\n            'lang_input_url':\"地 址：\",\n            'lang_input_size':\"大 小：\",\n            'lang_input_width':\"宽度\",\n            'lang_input_height':\"高度\",\n            'lang_input_border':\"边 框：\",\n            'lang_input_vhspace':\"边 距：\",\n            'lang_input_title':\"描 述：\",\n            'lang_input_align':'图片浮动方式：',\n            'lang_imgLoading':\"　图片加载中……\",\n            'lang_start_upload':\"开始上传\",\n            'lock':{'title':\"锁定宽高比例\"}, //属性\n            'searchType':{'title':\"图片类型\", 'options':[\"新闻\", \"壁纸\", \"表情\", \"头像\"]}, //select的option\n            'searchTxt':{'value':\"请输入搜索关键词\"},\n            'searchBtn':{'value':\"百度一下\"},\n            'searchReset':{'value':\"清空搜索\"},\n            'noneAlign':{'title':'无浮动'},\n            'leftAlign':{'title':'左浮动'},\n            'rightAlign':{'title':'右浮动'},\n            'centerAlign':{'title':'居中独占一行'}\n        },\n        'uploadSelectFile':'点击选择图片',\n        'uploadAddFile':'继续添加',\n        'uploadStart':'开始上传',\n        'uploadPause':'暂停上传',\n        'uploadContinue':'继续上传',\n        'uploadRetry':'重试上传',\n        'uploadDelete':'删除',\n        'uploadTurnLeft':'向左旋转',\n        'uploadTurnRight':'向右旋转',\n        'uploadPreview':'预览中',\n        'uploadNoPreview':'不能预览',\n        'updateStatusReady': '选中_张图片，共_KB。',\n        'updateStatusConfirm': '已成功上传_张照片，_张照片上传失败',\n        'updateStatusFinish': '共_张（_KB），_张上传成功',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize':'文件大小超出',\n        'errorFileType':'文件格式不允许',\n        'errorInterrupt':'文件传输中断',\n        'errorUploadRetry':'上传失败，请重试',\n        'errorHttp':'http请求错误',\n        'errorServerUpload':'服务器返回出错',\n        'remoteLockError':\"宽高不正确,不能所定比例\",\n        'numError':\"请输入正确的长度或者宽度值！例如：123，400\",\n        'imageUrlError':\"不允许的图片格式或者图片域！\",\n        'imageLoadError':\"图片加载失败！请检查链接地址或网络状态！\",\n        'searchRemind':\"请输入搜索关键词\",\n        'searchLoading':\"图片加载中，请稍后……\",\n        'searchRetry':\" :( ，抱歉，没有找到图片！请重试一次！\"\n    },\n    'attachment':{\n        'static':{\n            'lang_tab_upload': '上传附件',\n            'lang_tab_online': '在线附件',\n            'lang_start_upload':\"开始上传\",\n            'lang_drop_remind':\"可以将文件拖到这里，单次最多可选100个文件\"\n        },\n        'uploadSelectFile':'点击选择文件',\n        'uploadAddFile':'继续添加',\n        'uploadStart':'开始上传',\n        'uploadPause':'暂停上传',\n        'uploadContinue':'继续上传',\n        'uploadRetry':'重试上传',\n        'uploadDelete':'删除',\n        'uploadTurnLeft':'向左旋转',\n        'uploadTurnRight':'向右旋转',\n        'uploadPreview':'预览中',\n        'updateStatusReady': '选中_个文件，共_KB。',\n        'updateStatusConfirm': '已成功上传_个文件，_个文件上传失败',\n        'updateStatusFinish': '共_个（_KB），_个上传成功',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize':'文件大小超出',\n        'errorFileType':'文件格式不允许',\n        'errorInterrupt':'文件传输中断',\n        'errorUploadRetry':'上传失败，请重试',\n        'errorHttp':'http请求错误',\n        'errorServerUpload':'服务器返回出错'\n    },\n    'insertvideo':{\n        'static':{\n            'lang_tab_insertV':\"插入视频\",\n            'lang_tab_searchV':\"搜索视频\",\n            'lang_tab_uploadV':\"上传视频\",\n            'lang_video_url':\"视频网址\",\n            'lang_video_size':\"视频尺寸\",\n            'lang_videoW':\"宽度\",\n            'lang_videoH':\"高度\",\n            'lang_alignment':\"对齐方式\",\n            'videoSearchTxt':{'value':\"请输入搜索关键字！\"},\n            'videoType':{'options':[\"全部\", \"热门\", \"娱乐\", \"搞笑\", \"体育\", \"科技\", \"综艺\"]},\n            'videoSearchBtn':{'value':\"百度一下\"},\n            'videoSearchReset':{'value':\"清空结果\"},\n\n            'lang_input_fileStatus':' 当前未上传文件',\n            'startUpload':{'style':\"background:url(upload.png) no-repeat;\"},\n\n            'lang_upload_size':\"视频尺寸\",\n            'lang_upload_width':\"宽度\",\n            'lang_upload_height':\"高度\",\n            'lang_upload_alignment':\"对齐方式\",\n            'lang_format_advice':\"建议使用mp4格式.\"\n\n        },\n        'numError':\"请输入正确的数值，如123,400\",\n        'floatLeft':\"左浮动\",\n        'floatRight':\"右浮动\",\n        '\"default\"':\"默认\",\n        'block':\"独占一行\",\n        'urlError':\"输入的视频地址有误，请检查后再试！\",\n        'loading':\" &nbsp;视频加载中，请等待……\",\n        'clickToSelect':\"点击选中\",\n        'goToSource':'访问源视频',\n        'noVideo':\" &nbsp; &nbsp;抱歉，找不到对应的视频，请重试！\",\n\n        'browseFiles':'浏览文件',\n        'uploadSuccess':'上传成功!',\n        'delSuccessFile':'从成功队列中移除',\n        'delFailSaveFile':'移除保存失败文件',\n        'statusPrompt':' 个文件已上传！ ',\n        'flashVersionError':'当前Flash版本过低，请更新FlashPlayer后重试！',\n        'flashLoadingError':'Flash加载失败!请检查路径或网络状态',\n        'fileUploadReady':'等待上传……',\n        'delUploadQueue':'从上传队列中移除',\n        'limitPrompt1':'单次不能选择超过',\n        'limitPrompt2':'个文件！请重新选择！',\n        'delFailFile':'移除失败文件',\n        'fileSizeLimit':'文件大小超出限制！',\n        'emptyFile':'空文件无法上传！',\n        'fileTypeError':'文件类型不允许！',\n        'unknownError':'未知错误！',\n        'fileUploading':'上传中，请等待……',\n        'cancelUpload':'取消上传',\n        'netError':'网络错误',\n        'failUpload':'上传失败!',\n        'serverIOError':'服务器IO错误！',\n        'noAuthority':'无权限！',\n        'fileNumLimit':'上传个数限制',\n        'failCheck':'验证失败，本次上传被跳过！',\n        'fileCanceling':'取消中，请等待……',\n        'stopUploading':'上传已停止……',\n\n        'uploadSelectFile':'点击选择文件',\n        'uploadAddFile':'继续添加',\n        'uploadStart':'开始上传',\n        'uploadPause':'暂停上传',\n        'uploadContinue':'继续上传',\n        'uploadRetry':'重试上传',\n        'uploadDelete':'删除',\n        'uploadTurnLeft':'向左旋转',\n        'uploadTurnRight':'向右旋转',\n        'uploadPreview':'预览中',\n        'updateStatusReady': '选中_个文件，共_KB。',\n        'updateStatusConfirm': '成功上传_个，_个失败',\n        'updateStatusFinish': '共_个(_KB)，_个成功上传',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize':'文件大小超出',\n        'errorFileType':'文件格式不允许',\n        'errorInterrupt':'文件传输中断',\n        'errorUploadRetry':'上传失败，请重试',\n        'errorHttp':'http请求错误',\n        'errorServerUpload':'服务器返回出错'\n    },\n    'webapp':{\n        'tip1':\"本功能由百度APP提供，如看到此页面，请各位站长首先申请百度APPKey!\",\n        'tip2':\"申请完成之后请至ueditor.config.js中配置获得的appkey! \",\n        'applyFor':\"点此申请\",\n        'anthorApi':\"百度API\"\n    },\n    'template':{\n        'static':{\n            'lang_template_bkcolor':'背景颜色',\n            'lang_template_clear' : '保留原有内容',\n            'lang_template_select' : '选择模板'\n        },\n        'blank':\"空白文档\",\n        'blog':\"博客文章\",\n        'resume':\"个人简历\",\n        'richText':\"图文混排\",\n        'sciPapers':\"科技论文\"\n\n\n    },\n    'scrawl':{\n        'static':{\n            'lang_input_previousStep':\"上一步\",\n            'lang_input_nextsStep':\"下一步\",\n            'lang_input_clear':'清空',\n            'lang_input_addPic':'添加背景',\n            'lang_input_ScalePic':'缩放背景',\n            'lang_input_removePic':'删除背景',\n            'J_imgTxt':{title:'添加背景图片'}\n        },\n        'noScarwl':\"尚未作画，白纸一张~\",\n        'scrawlUpLoading':\"涂鸦上传中,别急哦~\",\n        'continueBtn':\"继续\",\n        'imageError':\"糟糕，图片读取失败了！\",\n        'backgroundUploading':'背景图片上传中,别急哦~'\n    },\n    'music':{\n        'static':{\n            'lang_input_tips':\"输入歌手/歌曲/专辑，搜索您感兴趣的音乐！\",\n            'J_searchBtn':{value:'搜索歌曲'}\n        },\n        'emptyTxt':'未搜索到相关音乐结果，请换一个关键词试试。',\n        'chapter':'歌曲',\n        'singer':'歌手',\n        'special':'专辑',\n        'listenTest':'试听'\n    },\n    'anchor':{\n        'static':{\n            'lang_input_anchorName':'锚点名字：'\n        }\n    },\n    'charts':{\n        'static':{\n            'lang_data_source':'数据源：',\n            'lang_chart_format': '图表格式：',\n            'lang_data_align': '数据对齐方式',\n            'lang_chart_align_same': '数据源与图表X轴Y轴一致',\n            'lang_chart_align_reverse': '数据源与图表X轴Y轴相反',\n            'lang_chart_title': '图表标题',\n            'lang_chart_main_title': '主标题：',\n            'lang_chart_sub_title': '子标题：',\n            'lang_chart_x_title': 'X轴标题：',\n            'lang_chart_y_title': 'Y轴标题：',\n            'lang_chart_tip': '提示文字',\n            'lang_cahrt_tip_prefix': '提示文字前缀：',\n            'lang_cahrt_tip_description': '仅饼图有效， 当鼠标移动到饼图中相应的块上时，提示框内的文字的前缀',\n            'lang_chart_data_unit': '数据单位',\n            'lang_chart_data_unit_title': '单位：',\n            'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位， 比如： 温度的单位 ℃',\n            'lang_chart_type': '图表类型：',\n            'lang_prev_btn': '上一个',\n            'lang_next_btn': '下一个'\n        }\n    },\n    'emotion':{\n        'static':{\n            'lang_input_choice':'精选',\n            'lang_input_Tuzki':'兔斯基',\n            'lang_input_BOBO':'BOBO',\n            'lang_input_lvdouwa':'绿豆蛙',\n            'lang_input_babyCat':'baby猫',\n            'lang_input_bubble':'泡泡',\n            'lang_input_youa':'有啊'\n        }\n    },\n    'gmap':{\n        'static':{\n            'lang_input_address':'地址',\n            'lang_input_search':'搜索',\n            'address':{value:\"北京\"}\n        },\n        searchError:'无法定位到该地址!'\n    },\n    'help':{\n        'static':{\n            'lang_input_about':'关于UEditor',\n            'lang_input_shortcuts':'快捷键',\n            'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器，具有轻量，可定制，注重用户体验等特点。开源基于BSD协议，允许自由使用和修改代码。',\n            'lang_Txt_shortcuts':'快捷键',\n            'lang_Txt_func':'功能',\n            'lang_Txt_bold':'给选中字设置为加粗',\n            'lang_Txt_copy':'复制选中内容',\n            'lang_Txt_cut':'剪切选中内容',\n            'lang_Txt_Paste':'粘贴',\n            'lang_Txt_undo':'重新执行上次操作',\n            'lang_Txt_redo':'撤销上一次操作',\n            'lang_Txt_italic':'给选中字设置为斜体',\n            'lang_Txt_underline':'给选中字加下划线',\n            'lang_Txt_selectAll':'全部选中',\n            'lang_Txt_visualEnter':'软回车',\n            'lang_Txt_fullscreen':'全屏'\n        }\n    },\n    'insertframe':{\n        'static':{\n            'lang_input_address':'地址：',\n            'lang_input_width':'宽度：',\n            'lang_input_height':'高度：',\n            'lang_input_isScroll':'允许滚动条：',\n            'lang_input_frameborder':'显示框架边框：',\n            'lang_input_alignMode':'对齐方式：',\n            'align':{title:\"对齐方式\", options:[\"默认\", \"左对齐\", \"右对齐\", \"居中\"]}\n        },\n        'enterAddress':'请输入地址!'\n    },\n    'link':{\n        'static':{\n            'lang_input_text':'文本内容：',\n            'lang_input_url':'链接地址：',\n            'lang_input_title':'标题：',\n            'lang_input_target':'是否在新窗口打开：'\n        },\n        'validLink':'只支持选中一个链接时生效',\n        'httpPrompt':'您输入的超链接中不包含http等协议名称，默认将为您添加http://前缀'\n    },\n    'map':{\n        'static':{\n            lang_city:\"城市\",\n            lang_address:\"地址\",\n            city:{value:\"北京\"},\n            lang_search:\"搜索\",\n            lang_dynamicmap:\"插入动态地图\"\n        },\n        cityMsg:\"请选择城市\",\n        errorMsg:\"抱歉，找不到该位置！\"\n    },\n    'searchreplace':{\n        'static':{\n            lang_tab_search:\"查找\",\n            lang_tab_replace:\"替换\",\n            lang_search1:\"查找\",\n            lang_search2:\"查找\",\n            lang_replace:\"替换\",\n            lang_searchReg:'支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”',\n            lang_searchReg1:'支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”',\n            lang_case_sensitive1:\"区分大小写\",\n            lang_case_sensitive2:\"区分大小写\",\n            nextFindBtn:{value:\"下一个\"},\n            preFindBtn:{value:\"上一个\"},\n            nextReplaceBtn:{value:\"下一个\"},\n            preReplaceBtn:{value:\"上一个\"},\n            repalceBtn:{value:\"替换\"},\n            repalceAllBtn:{value:\"全部替换\"}\n        },\n        getEnd:\"已经搜索到文章末尾！\",\n        getStart:\"已经搜索到文章头部\",\n        countMsg:\"总共替换了{#count}处！\"\n    },\n    'snapscreen':{\n        'static':{\n            lang_showMsg:\"截图功能需要首先安装UEditor截图插件！ \",\n            lang_download:\"点此下载\",\n            lang_step1:\"第一步，下载UEditor截图插件并运行安装。\",\n            lang_step2:\"第二步，插件安装完成后即可使用，如不生效，请重启浏览器后再试！\"\n        }\n    },\n    'spechars':{\n        'static':{},\n        tsfh:\"特殊字符\",\n        lmsz:\"罗马字符\",\n        szfh:\"数学字符\",\n        rwfh:\"日文字符\",\n        xlzm:\"希腊字母\",\n        ewzm:\"俄文字符\",\n        pyzm:\"拼音字母\",\n        yyyb:\"英语音标\",\n        zyzf:\"其他\"\n    },\n    'edittable':{\n        'static':{\n            'lang_tableStyle':'表格样式',\n            'lang_insertCaption':'添加表格名称行',\n            'lang_insertTitle':'添加表格标题行',\n            'lang_insertTitleCol':'添加表格标题列',\n            'lang_orderbycontent':\"使表格内容可排序\",\n            'lang_tableSize':'自动调整表格尺寸',\n            'lang_autoSizeContent':'按表格文字自适应',\n            'lang_autoSizePage':'按页面宽度自适应',\n            'lang_example':'示例',\n            'lang_borderStyle':'表格边框',\n            'lang_color':'颜色:'\n        },\n        captionName:'表格名称',\n        titleName:'标题',\n        cellsName:'内容',\n        errorMsg:'有合并单元格，不可排序'\n    },\n    'edittip':{\n        'static':{\n            lang_delRow:'删除整行',\n            lang_delCol:'删除整列'\n        }\n    },\n    'edittd':{\n        'static':{\n            lang_tdBkColor:'背景颜色:'\n        }\n    },\n    'formula':{\n        'static':{\n        }\n    },\n    'wordimage':{\n        'static':{\n            lang_resave:\"转存步骤\",\n            uploadBtn:{src:\"upload.png\",alt:\"上传\"},\n            clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},\n            lang_step:\"1、点击顶部复制按钮，将地址复制到剪贴板；2、点击添加照片按钮，在弹出的对话框中使用Ctrl+V粘贴地址；3、点击打开后选择图片上传流程。\"\n        },\n        'fileType':\"图片\",\n        'flashError':\"FLASH初始化失败，请检查FLASH插件是否正确安装！\",\n        'netError':\"网络连接错误，请重试！\",\n        'copySuccess':\"图片地址已经复制！\",\n        'flashI18n':{} //留空默认中文\n    },\n    'autosave': {\n        'saving':'保存中...',\n        'success':'本地保存成功'\n    }\n};\n"
  },
  {
    "path": "web/console/public/UEditor/themes/default/css/ueditor.css",
    "content": "/*基础UI构建\n*/\n/* common layer */\n.edui-default .edui-box {\n    border: none;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n}\n\n.edui-default a.edui-box {\n    display: block;\n    text-decoration: none;\n    color: black;\n}\n\n.edui-default a.edui-box:hover {\n    text-decoration: none;\n}\n\n.edui-default a.edui-box:active {\n    text-decoration: none;\n}\n\n.edui-default table.edui-box {\n    border-collapse: collapse;\n}\n\n.edui-default ul.edui-box {\n    list-style-type: none;\n}\n\ndiv.edui-box {\n    position: relative;\n    display: -moz-inline-box !important;\n    display: inline-block !important;\n    vertical-align: top;\n}\n\n.edui-default .edui-clearfix {\n    zoom: 1\n}\n\n.edui-default .edui-clearfix:after {\n    content: '\\20';\n    display: block;\n    clear: both;\n}\n\n * html div.edui-box {\n    display: inline !important;\n}\n\n*:first-child+html div.edui-box {\n    display: inline !important;\n}\n\n/* control layout */\n.edui-default .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body {\n    position: relative;\n}\n\n.edui-default .edui-popup {\n    position: absolute;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n}\n\n.edui-default .edui-popup .edui-shadow {\n    position: absolute;\n    z-index: -1;\n}\n\n.edui-default .edui-popup .edui-bordereraser {\n    position: absolute;\n    overflow: hidden;\n}\n\n.edui-default .edui-tablepicker .edui-canvas {\n    position: relative;\n}\n\n.edui-default .edui-tablepicker .edui-canvas .edui-overlay {\n    position: absolute;\n}\n\n.edui-default .edui-dialog-modalmask, .edui-dialog-dragmask {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.edui-default .edui-toolbar {\n    position: relative;\n}\n\n/*\n * default theme\n */\n.edui-default .edui-label {\n    cursor: default;\n}\n\n.edui-default span.edui-clickable {\n    color: blue;\n    cursor: pointer;\n    text-decoration: underline;\n}\n\n.edui-default span.edui-unclickable {\n    color: gray;\n    cursor: default;\n}\n/* 工具栏 */\n.edui-default .edui-toolbar {\n    cursor: default;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    padding: 1px;\n    overflow: hidden; /*全屏下单独一行不占位*/\n    zoom: 1;\n    width:auto;\n    height:auto;\n}\n\n.edui-default .edui-toolbar .edui-button,\n.edui-default .edui-toolbar .edui-splitbutton,\n.edui-default .edui-toolbar .edui-menubutton,\n.edui-default .edui-toolbar .edui-combox {\n    margin: 1px;\n}\n/*UI工具栏、编辑区域、底部*/\n.edui-default .edui-editor {\n    border: 1px solid #d4d4d4;\n    background-color: white;\n    position: relative;\n    overflow: visible;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n.edui-editor div{\n    width:auto;\n    height:auto;\n}\n.edui-default .edui-editor-toolbarbox {\n    position: relative;\n    zoom: 1;\n    -webkit-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);\n    -moz-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);\n    box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);\n    border-top-left-radius:2px;\n    border-top-right-radius:2px;\n}\n\n.edui-default .edui-editor-toolbarboxouter {\n    border-bottom: 1px solid #d4d4d4;\n    background-color: #fafafa;\n    background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);\n    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));\n    background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);\n    background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);\n    background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);\n    background-repeat: repeat-x;\n    /*border: 1px solid #d4d4d4;*/\n    -webkit-border-radius: 4px 4px 0 0;\n    -moz-border-radius: 4px 4px 0 0;\n    border-radius: 4px 4px 0 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);\n    *zoom: 1;\n    -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);\n    -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);\n    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);\n}\n\n.edui-default .edui-editor-toolbarboxinner {\n    padding: 2px;\n}\n\n.edui-default .edui-editor-iframeholder {\n    position: relative;\n    /*for fix ie6 toolbarmsg under iframe bug. relative -> static */\n    /*_position: static !important;*\n}\n\n.edui-default .edui-editor-iframeholder textarea {\n    font-family: consolas, \"Courier New\", \"lucida console\", monospace;\n    font-size: 12px;\n    line-height: 18px;\n}\n\n.edui-default .edui-editor-bottombar {\n    /*border-top: 1px solid #ccc;*/\n    /*height: 20px;*/\n    /*width: 40%;*/\n    /*float: left;*/\n    /*overflow: hidden;*/\n}\n\n.edui-default .edui-editor-bottomContainer {\n    overflow: hidden;\n}\n\n.edui-default .edui-editor-bottomContainer table {\n    width: 100%;\n    height: 0;\n    overflow: hidden;\n    border-spacing: 0;\n}\n\n.edui-default .edui-editor-bottomContainer td {\n    white-space: nowrap;\n    border-top: 1px solid #ccc;\n    line-height: 20px;\n    font-size: 12px;\n    font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif;\n}\n\n.edui-default .edui-editor-wordcount {\n    text-align: right;\n    margin-right: 5px;\n    color: #aaa;\n}\n.edui-default .edui-editor-scale {\n    width: 12px;\n}\n.edui-default .edui-editor-scale .edui-editor-icon {\n    float: right;\n    width: 100%;\n    height: 12px;\n    margin-top: 10px;\n    background: url(../images/scale.png) no-repeat;\n    cursor: se-resize;\n}\n.edui-default .edui-editor-breadcrumb {\n    margin: 2px 0 0 3px;\n}\n\n.edui-default .edui-editor-breadcrumb span {\n    cursor: pointer;\n    text-decoration: underline;\n    color: blue;\n}\n\n.edui-default .edui-toolbar .edui-for-fullscreen {\n    float: right;\n}\n\n.edui-default .edui-bubble .edui-popup-content {\n    border: 1px solid #DCAC6C;\n    background-color: #fff6d9;\n    padding: 5px;\n    font-size: 10pt;\n    font-family: \"宋体\";\n}\n\n.edui-default .edui-bubble .edui-shadow {\n    /*box-shadow: 1px 1px 3px #818181;*/\n    /*-webkit-box-shadow: 2px 2px 3px #818181;*/\n    /*-moz-box-shadow: 2px 2px 3px #818181;*/\n    /*filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '2', MakeShadow = 'true', ShadowOpacity = '0.5');*/\n}\n\n.edui-default .edui-editor-toolbarmsg {\n    background-color: #FFF6D9;\n    border-bottom: 1px solid #ccc;\n    position: absolute;\n    bottom: -25px;\n    left: 0;\n    z-index: 1009;\n    width: 99.9%;\n}\n\n.edui-default .edui-editor-toolbarmsg-upload {\n    font-size: 14px;\n    color: blue;\n    width: 100px;\n    height: 16px;\n    line-height: 16px;\n    cursor: pointer;\n    position: absolute;\n    top: 5px;\n    left: 350px;\n}\n\n.edui-default .edui-editor-toolbarmsg-label {\n    font-size: 12px;\n    line-height: 16px;\n    padding: 4px;\n}\n\n.edui-default .edui-editor-toolbarmsg-close {\n    float: right;\n    width: 20px;\n    height: 16px;\n    line-height: 16px;\n    cursor: pointer;\n    color: red;\n}\n/*可选中菜单按钮*/\n.edui-default .edui-list .edui-bordereraser {\n    display: none;\n}\n\n.edui-default .edui-listitem {\n    padding: 1px;\n    white-space: nowrap;\n}\n\n.edui-default .edui-list .edui-state-hover {\n    position: relative;\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n    padding: 0;\n}\n\n.edui-default .edui-for-fontfamily .edui-listitem-label {\n    min-width: 130px;\n    _width: 120px;\n    font-size: 12px;\n    height: 22px;\n    line-height: 22px;\n    padding-left: 5px;\n}\n.edui-default .edui-for-insertcode .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    font-size: 12px;\n    height: 22px;\n    line-height: 22px;\n    padding-left: 5px;\n}\n.edui-default .edui-for-underline .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    padding: 3px 5px;\n    font-size: 12px;\n}\n\n.edui-default .edui-for-fontsize .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    padding: 3px 5px;\n\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label {\n    min-width: 200px;\n    _width: 200px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-rowspacingtop .edui-listitem-label,\n.edui-default .edui-for-rowspacingbottom .edui-listitem-label {\n    min-width: 53px;\n    _width: 53px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-lineheight .edui-listitem-label {\n    min-width: 53px;\n    _width: 53px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-customstyle .edui-listitem-label {\n    min-width: 200px;\n    _width: 200px;\n    width: 200px !important;\n    padding: 2px 5px;\n}\n/* 可选中按钮弹出菜单*/\n.edui-default .edui-menu {\n    z-index: 3000;\n}\n\n.edui-default .edui-menu .edui-popup-content {\n    padding: 3px;\n}\n\n.edui-default .edui-menu-body {\n    _width: 150px;\n    min-width: 170px;\n    background: url(\"../images/sparator_v.png\") repeat-y 25px;\n}\n\n.edui-default .edui-menuitem-body {\n}\n\n.edui-default .edui-menuitem {\n    height: 20px;\n    cursor: default;\n    vertical-align: top;\n}\n\n.edui-default .edui-menuitem .edui-icon {\n    width: 20px !important;\n    height: 20px !important;\n    background: url(../images/icons.png) 0 -4000px;\n    background: url(../images/icons.gif) 0 -4000px\\9;\n}\n\n.edui-default .edui-menuitem .edui-label {\n    font-size: 12px;\n    line-height: 20px;\n    height: 20px;\n    padding-left: 10px;\n}\n\n.edui-default .edui-state-checked .edui-menuitem-body {\n    background: url(\"../images/icons-all.gif\") no-repeat 6px -205px;\n}\n\n.edui-default .edui-state-disabled .edui-menuitem-label {\n    color: gray;\n}\n\n\n/*不可选中菜单按钮 */\n.edui-default .edui-toolbar .edui-combox-body .edui-button-body {\n    width: 60px;\n    font-size: 12px;\n    height: 20px;\n    line-height: 20px;\n    padding-left: 5px;\n    white-space: nowrap;\n    margin: 0 3px 0 0;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-arrow {\n    background: url(../images/icons.png) -741px 0;\n    _background: url(../images/icons.gif) -741px 0;\n    height: 20px;\n    width: 9px;\n}\n\n.edui-default .edui-toolbar .edui-combox .edui-combox-body {\n    border: 1px solid #CCC;\n    background-color: white;\n    border-radius: 2px;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-splitborder {\n    display: none;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-arrow {\n    border-left: 1px solid #CCC;\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-combox-body {\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow {\n    border-left: 1px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-state-checked .edui-combox-body {\n    background-color: #FFE69F;\n    border: 1px solid #DCAC6C;\n}\n\n.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow {\n    border-left: 1px solid #DCAC6C;\n}\n\n.edui-toolbar .edui-state-disabled .edui-combox-body {\n    background-color: #F0F0EE;\n    opacity: 0.3;\n    filter: alpha(opacity = 30);\n}\n\n.edui-toolbar .edui-state-opened .edui-combox-body {\n    background-color: white;\n    border: 1px solid gray;\n}\n/*普通按钮样式及状态*/\n.edui-default .edui-toolbar .edui-button .edui-icon,\n.edui-default .edui-toolbar .edui-menubutton .edui-icon,\n.edui-default .edui-toolbar .edui-splitbutton .edui-icon {\n    height: 20px !important;\n    width: 20px !important;\n    background-image: url(../images/icons.png);\n    background-image: url(../images/icons.gif) \\9;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-button-wrap {\n    padding: 1px;\n    position: relative;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap {\n    background-color: #fff5d4;\n    padding: 0;\n    border: 1px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap {\n    background-color: #ffe69f;\n    padding: 0;\n    border: 1px solid #dcac6c;\n    border-radius: 2px;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap {\n    background-color: #ffffff;\n    padding: 0;\n    border: 1px solid gray;\n}\n.edui-default .edui-toolbar .edui-state-disabled .edui-label {\n    color: #ccc;\n}\n.edui-default .edui-toolbar .edui-state-disabled .edui-icon {\n    opacity: 0.3;\n    filter: alpha(opacity = 30);\n}\n\n/* toolbar icons */\n.edui-default .edui-for-undo .edui-icon {\n    background-position: -160px 0;\n}\n\n.edui-default  .edui-for-redo .edui-icon {\n    background-position: -100px 0;\n}\n\n.edui-default  .edui-for-bold .edui-icon {\n    background-position: 0 0;\n}\n\n.edui-default  .edui-for-italic .edui-icon {\n    background-position: -60px 0;\n}\n\n.edui-default  .edui-for-fontborder .edui-icon {\n    background-position:-160px -40px;\n}\n.edui-default  .edui-for-underline .edui-icon {\n    background-position: -140px 0;\n}\n\n.edui-default  .edui-for-strikethrough .edui-icon {\n    background-position: -120px 0;\n}\n\n.edui-default  .edui-for-subscript .edui-icon {\n    background-position: -600px 0;\n}\n\n.edui-default  .edui-for-superscript .edui-icon {\n    background-position: -620px 0;\n}\n\n.edui-default  .edui-for-blockquote .edui-icon {\n    background-position: -220px 0;\n}\n\n.edui-default  .edui-for-forecolor .edui-icon {\n    background-position: -720px 0;\n}\n\n.edui-default  .edui-for-backcolor .edui-icon {\n    background-position: -760px 0;\n}\n\n.edui-default  .edui-for-inserttable .edui-icon {\n    background-position: -580px -20px;\n}\n\n.edui-default  .edui-for-autotypeset .edui-icon {\n    background-position: -640px -40px;\n}\n\n.edui-default  .edui-for-justifyleft .edui-icon {\n    background-position: -460px 0;\n}\n\n.edui-default  .edui-for-justifycenter .edui-icon {\n    background-position: -420px 0;\n}\n\n.edui-default  .edui-for-justifyright .edui-icon {\n    background-position: -480px 0;\n}\n\n.edui-default  .edui-for-justifyjustify .edui-icon {\n    background-position: -440px 0;\n}\n\n.edui-default  .edui-for-insertorderedlist .edui-icon {\n    background-position: -80px 0;\n}\n\n.edui-default  .edui-for-insertunorderedlist .edui-icon {\n    background-position: -20px 0;\n}\n\n.edui-default  .edui-for-lineheight .edui-icon {\n    background-position: -725px -40px;\n}\n\n.edui-default  .edui-for-rowspacingbottom .edui-icon {\n    background-position: -745px -40px;\n}\n\n.edui-default  .edui-for-rowspacingtop .edui-icon {\n    background-position: -765px -40px;\n}\n\n.edui-default  .edui-for-horizontal .edui-icon {\n    background-position: -360px 0;\n}\n\n.edui-default  .edui-for-link .edui-icon {\n    background-position: -500px 0;\n}\n\n.edui-default  .edui-for-code .edui-icon {\n    background-position: -440px -40px;\n}\n\n.edui-default  .edui-for-insertimage .edui-icon {\n    background-position: -726px -77px;\n}\n\n.edui-default  .edui-for-insertframe .edui-icon {\n    background-position: -240px -40px;\n}\n\n.edui-default  .edui-for-emoticon .edui-icon {\n    background-position: -60px -20px;\n}\n\n.edui-default  .edui-for-spechars .edui-icon {\n    background-position: -240px 0;\n}\n\n.edui-default  .edui-for-help .edui-icon {\n    background-position: -340px 0;\n}\n\n.edui-default  .edui-for-print .edui-icon {\n    background-position: -440px -20px;\n}\n\n.edui-default  .edui-for-preview .edui-icon {\n    background-position: -420px -20px;\n}\n\n.edui-default  .edui-for-selectall .edui-icon {\n    background-position: -400px -20px;\n}\n\n.edui-default  .edui-for-searchreplace .edui-icon {\n    background-position: -520px -20px;\n}\n\n.edui-default  .edui-for-map .edui-icon {\n    background-position: -40px -40px;\n}\n\n.edui-default  .edui-for-gmap .edui-icon {\n    background-position: -260px -40px;\n}\n\n.edui-default  .edui-for-insertvideo .edui-icon {\n    background-position: -320px -20px;\n}\n\n.edui-default  .edui-for-time .edui-icon {\n    background-position: -160px -20px;\n}\n\n.edui-default  .edui-for-date .edui-icon {\n    background-position: -140px -20px;\n}\n\n.edui-default  .edui-for-cut .edui-icon {\n    background-position: -680px 0;\n}\n\n.edui-default  .edui-for-copy .edui-icon {\n    background-position: -700px 0;\n}\n\n.edui-default  .edui-for-paste .edui-icon {\n    background-position: -560px 0;\n}\n\n.edui-default  .edui-for-formatmatch .edui-icon {\n    background-position: -40px 0;\n}\n\n.edui-default  .edui-for-pasteplain .edui-icon {\n    background-position: -360px -20px;\n}\n\n.edui-default  .edui-for-directionalityltr .edui-icon {\n    background-position: -20px -20px;\n}\n\n.edui-default  .edui-for-directionalityrtl .edui-icon {\n    background-position: -40px -20px;\n}\n\n.edui-default  .edui-for-source .edui-icon {\n    background-position: -261px -0px;\n}\n\n.edui-default  .edui-for-removeformat .edui-icon {\n    background-position: -580px 0;\n}\n\n.edui-default  .edui-for-unlink .edui-icon {\n    background-position: -640px 0;\n}\n\n.edui-default  .edui-for-touppercase .edui-icon {\n    background-position: -786px 0;\n}\n\n.edui-default  .edui-for-tolowercase .edui-icon {\n    background-position: -806px 0;\n}\n\n.edui-default  .edui-for-insertrow .edui-icon {\n    background-position: -478px -76px;\n}\n\n.edui-default  .edui-for-insertrownext .edui-icon {\n    background-position: -498px -76px;\n}\n\n.edui-default  .edui-for-insertcol .edui-icon {\n    background-position: -455px -76px;\n}\n\n.edui-default  .edui-for-insertcolnext  .edui-icon {\n    background-position: -429px -76px;\n}\n\n.edui-default  .edui-for-mergeright .edui-icon {\n    background-position: -60px -40px;\n}\n\n.edui-default  .edui-for-mergedown .edui-icon {\n    background-position: -80px -40px;\n}\n\n.edui-default  .edui-for-splittorows .edui-icon {\n    background-position: -100px -40px;\n}\n\n.edui-default  .edui-for-splittocols .edui-icon {\n    background-position: -120px -40px;\n}\n\n.edui-default  .edui-for-insertparagraphbeforetable .edui-icon {\n    background-position: -140px -40px;\n}\n\n.edui-default  .edui-for-deleterow .edui-icon {\n    background-position: -660px -20px;\n}\n\n.edui-default  .edui-for-deletecol .edui-icon {\n    background-position: -640px -20px;\n}\n\n.edui-default  .edui-for-splittocells .edui-icon {\n    background-position: -800px -20px;\n}\n\n.edui-default  .edui-for-mergecells .edui-icon {\n    background-position: -760px -20px;\n}\n\n.edui-default  .edui-for-deletetable .edui-icon {\n    background-position: -620px -20px;\n}\n\n.edui-default  .edui-for-cleardoc .edui-icon {\n    background-position: -520px 0;\n}\n\n.edui-default  .edui-for-fullscreen .edui-icon {\n    background-position: -100px -20px;\n}\n\n.edui-default  .edui-for-anchor .edui-icon {\n    background-position: -200px 0;\n}\n\n.edui-default  .edui-for-pagebreak .edui-icon {\n    background-position: -460px -40px;\n}\n\n.edui-default  .edui-for-imagenone .edui-icon {\n    background-position: -480px -40px;\n}\n\n.edui-default  .edui-for-imageleft .edui-icon {\n    background-position: -500px -40px;\n}\n\n.edui-default  .edui-for-wordimage .edui-icon {\n    background-position: -660px -40px;\n}\n\n.edui-default  .edui-for-imageright .edui-icon {\n    background-position: -520px -40px;\n}\n\n.edui-default  .edui-for-imagecenter .edui-icon {\n    background-position: -540px -40px;\n}\n\n.edui-default  .edui-for-indent .edui-icon {\n    background-position: -400px 0;\n}\n\n.edui-default  .edui-for-outdent .edui-icon {\n    background-position: -540px 0;\n}\n\n.edui-default  .edui-for-webapp .edui-icon {\n    background-position: -601px -40px\n}\n\n.edui-default  .edui-for-table .edui-icon {\n    background-position: -580px -20px;\n}\n\n.edui-default  .edui-for-edittable .edui-icon {\n    background-position: -420px -40px;\n}\n\n.edui-default  .edui-for-template .edui-icon {\n    background-position: -339px -40px;\n}\n\n.edui-default  .edui-for-delete .edui-icon {\n    background-position: -360px -40px;\n}\n\n.edui-default  .edui-for-attachment .edui-icon {\n    background-position: -620px -40px;\n}\n\n.edui-default  .edui-for-edittd .edui-icon {\n    background-position: -700px -40px;\n}\n\n.edui-default  .edui-for-snapscreen .edui-icon {\n    background-position: -581px -40px\n}\n\n.edui-default  .edui-for-scrawl .edui-icon {\n    background-position: -801px -41px\n}\n\n.edui-default  .edui-for-background .edui-icon {\n    background-position: -680px -40px;\n}\n\n.edui-default  .edui-for-music .edui-icon {\n    background-position: -18px -40px\n}\n\n.edui-default  .edui-for-formula .edui-icon {\n    background-position: -200px -40px\n}\n\n.edui-default  .edui-for-aligntd  .edui-icon {\n    background-position: -236px -76px;\n}\n\n.edui-default  .edui-for-insertparagraphtrue  .edui-icon {\n    background-position: -625px -76px;\n}\n\n.edui-default  .edui-for-insertparagraph  .edui-icon {\n    background-position: -602px -76px;\n}\n\n.edui-default  .edui-for-insertcaption  .edui-icon {\n    background-position: -336px -76px;\n}\n\n.edui-default  .edui-for-deletecaption  .edui-icon {\n    background-position: -362px -76px;\n}\n\n.edui-default  .edui-for-inserttitle  .edui-icon {\n    background-position: -286px -76px;\n}\n\n.edui-default  .edui-for-deletetitle  .edui-icon {\n    background-position: -311px -76px;\n}\n\n.edui-default  .edui-for-aligntable  .edui-icon {\n    background-position: -440px 0;\n}\n\n.edui-default  .edui-for-tablealignment-left  .edui-icon {\n    background-position: -460px 0;\n}\n\n.edui-default  .edui-for-tablealignment-center  .edui-icon {\n    background-position: -420px 0;\n}\n\n.edui-default  .edui-for-tablealignment-right  .edui-icon {\n    background-position: -480px 0;\n}\n\n.edui-default  .edui-for-drafts  .edui-icon {\n    background-position: -560px 0;\n}\n\n.edui-default  .edui-for-charts  .edui-icon {\n    background: url(../images/charts.png) no-repeat 2px 3px!important;\n}\n\n.edui-default  .edui-for-inserttitlecol  .edui-icon {\n    background-position: -673px -76px;\n}\n\n.edui-default  .edui-for-deletetitlecol  .edui-icon {\n    background-position: -698px -76px;\n}\n\n.edui-default  .edui-for-simpleupload  .edui-icon {\n    background-position: -380px 0px;\n}\n\n/*splitbutton*/\n.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,\n.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow {\n    background: url(../images/icons.png) -741px 0;\n    _background: url(../images/icons.gif) -741px 0;\n    height: 20px;\n    width: 9px;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body {\n    padding: 1px;\n}\n\n.edui-default .edui-toolbar .edui-splitborder {\n    width: 1px;\n    height: 20px;\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-splitborder {\n    width: 1px;\n    border-left: 0px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-state-active .edui-splitborder {\n    width: 0;\n    border-left: 1px solid gray;\n}\n\n.edui-default .edui-toolbar .edui-state-opened .edui-splitborder {\n    width: 1px;\n    border: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body {\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n    padding: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body {\n    background-color: #FFE69F;\n    border: 1px solid #DCAC6C;\n    padding: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body {\n    background-color: #ffffff;\n    border: 1px solid gray;\n    padding: 0;\n}\n\n.edui-default .edui-state-disabled .edui-arrow {\n    opacity: 0.3;\n    _filter: alpha(opacity = 30);\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body {\n    background-color: white;\n    border: 1px solid gray;\n    padding: 0;\n}\n\n.edui-default .edui-for-insertorderedlist .edui-bordereraser,\n.edui-default .edui-for-lineheight .edui-bordereraser,\n.edui-default .edui-for-rowspacingtop .edui-bordereraser,\n.edui-default .edui-for-rowspacingbottom .edui-bordereraser,\n.edui-default .edui-for-insertunorderedlist .edui-bordereraser {\n    background-color: white;\n}\n\n/* 解决嵌套导致的图标问题 */\n.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,\n.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,\n.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,\n.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,\n.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon {\n    /*background-position: 0 -40px;*/\n    background-image: none  ;\n}\n\n/* 弹出菜单 */\n.edui-default .edui-popup {\n    z-index: 3000;\n    background-color: #ffffff;\n    width:auto;\n    height:auto;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n}\n\n.edui-default .edui-popup .edui-shadow {\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.edui-default .edui-popup-content {\n    border:1px solid #ccc;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    *border-right-width: 2px;\n    *border-bottom-width: 2px;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n    -webkit-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);\n    -moz-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);\n    -webkit-background-clip: padding-box;\n    -moz-background-clip: padding;\n    background-clip: padding-box;\n    padding: 5px;\n    background:#ffffff;\n}\n\n.edui-default .edui-popup .edui-bordereraser {\n    background-color: white;\n    height: 3px;\n}\n\n.edui-default .edui-menu .edui-bordereraser {\n    height: 3px;\n}\n\n.edui-default .edui-anchor-topleft .edui-bordereraser {\n    left: 1px;\n    top: -2px;\n}\n\n.edui-default .edui-anchor-topright .edui-bordereraser {\n    right: 1px;\n    top: -2px;\n}\n\n.edui-default .edui-anchor-bottomleft .edui-bordereraser {\n    left: 0;\n    bottom: -6px;\n    height: 7px;\n    border-left: 1px solid gray;\n    border-right: 1px solid gray;\n}\n\n.edui-default .edui-anchor-bottomright .edui-bordereraser {\n    right: 0;\n    bottom: -6px;\n    height: 7px;\n    border-left: 1px solid gray;\n    border-right: 1px solid gray;\n}\n\n.edui-popup div{\n    width:auto;\n    height:auto;\n}\n.edui-default .edui-editor-messageholder {\n    display: block;\n    width: 150px;\n    height: auto;\n    border: 0;\n    margin: 0;\n    padding: 0;\n    position: absolute;\n    top: 28px;\n    right: 3px;\n}\n\n.edui-default .edui-message{\n    min-height: 10px;\n    text-shadow: 0 1px 0 rgba(255,255,255,0.5);\n    padding: 0;\n    margin-bottom: 3px;\n    position: relative;\n}\n.edui-default .edui-message-body{\n    border-radius: 3px;\n    padding: 8px 15px 8px 8px;\n    color: #c09853;\n    background-color: #fcf8e3;\n    border: 1px solid #fbeed5;\n}\n.edui-default .edui-message-type-info{\n    color: #3a87ad;\n    background-color: #d9edf7;\n    border-color: #bce8f1\n}\n.edui-default .edui-message-type-success{\n    color: #468847;\n    background-color: #dff0d8;\n    border-color: #d6e9c6\n}\n.edui-default .edui-message-type-danger,\n.edui-default .edui-message-type-error{\n    color: #b94a48;\n    background-color: #f2dede;\n    border-color: #eed3d7\n}\n.edui-default .edui-message .edui-message-closer {\n    display: block;\n    width: 16px;\n    height: 16px;\n    line-height: 16px;\n    position: absolute;\n    top: 0;\n    right: 0;\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    float: right;\n    font-size: 20px;\n    font-weight: bold;\n    color: #999;\n    text-shadow: 0 1px 0 #fff;\n    font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n}\n.edui-default .edui-message .edui-message-content {\n    font-size: 10pt;\n    word-wrap: break-word;\n    word-break: normal;\n}\n/* 弹出对话框按钮和对话框大小 */\n.edui-default .edui-dialog {\n    z-index: 2000;\n    position: absolute;\n\n}\n\n.edui-dialog div{\n    width:auto;\n}\n\n.edui-default .edui-dialog-wrap {\n    margin-right: 6px;\n    margin-bottom: 6px;\n}\n\n.edui-default .edui-dialog-fullscreen-flag {\n    margin-right: 0;\n    margin-bottom: 0;\n}\n\n.edui-default .edui-dialog-body {\n    position: relative;\n    padding:2px 0 0 2px;\n    _zoom: 1;\n}\n\n.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body {\n    padding: 0;\n}\n\n.edui-default .edui-dialog-shadow {\n    position: absolute;\n    z-index: -1;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    background-color: #ffffff;\n    border: 1px solid #ccc;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    *border-right-width: 2px;\n    *border-bottom-width: 2px;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n    -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    -webkit-background-clip: padding-box;\n    -moz-background-clip: padding;\n    background-clip: padding-box;\n}\n\n.edui-default .edui-dialog-foot {\n    background-color: white;\n}\n\n.edui-default .edui-dialog-titlebar {\n    height: 26px;\n    border-bottom: 1px solid #c6c6c6;\n    background: url(../images/dialog-title-bg.png) repeat-x bottom;\n    position: relative;\n    cursor: move;\n}\n.edui-default .edui-dialog-caption {\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 26px;\n    padding-left: 5px;\n}\n\n.edui-default .edui-dialog-draghandle {\n    height: 26px;\n}\n\n.edui-default .edui-dialog-closebutton {\n    position: absolute !important;\n    right: 5px;\n    top: 3px;\n}\n\n.edui-default .edui-dialog-closebutton .edui-button-body {\n    height: 20px;\n    width: 20px;\n    cursor: pointer;\n    background: url(\"../images/icons-all.gif\") no-repeat 0 -59px;\n}\n\n.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body {\n    background: url(\"../images/icons-all.gif\") no-repeat 0 -89px;\n}\n\n.edui-default .edui-dialog-foot {\n    height: 40px;\n}\n\n.edui-default .edui-dialog-buttons {\n    position: absolute;\n    right: 0;\n}\n\n.edui-default .edui-dialog-buttons .edui-button {\n    margin-right: 10px;\n}\n\n.edui-default .edui-dialog-buttons .edui-button .edui-button-body {\n    background: url(\"../images/icons-all.gif\") no-repeat;\n    height: 24px;\n    width: 96px;\n    font-size: 12px;\n    line-height: 24px;\n    text-align: center;\n    cursor: default;\n}\n\n.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body {\n    background: url(\"../images/icons-all.gif\") no-repeat 0 -30px;\n}\n\n.edui-default .edui-dialog iframe {\n    border: 0;\n    padding: 0;\n    margin: 0;\n    vertical-align: top;\n}\n\n.edui-default .edui-dialog-modalmask {\n    opacity: 0.3;\n    filter: alpha(opacity = 30);\n    background-color: #ccc;\n    position: absolute;\n    /*z-index: 1999;*/\n}\n\n.edui-default .edui-dialog-dragmask {\n    position: absolute;\n    /*z-index: 2001;*/\n    background-color: transparent;\n    cursor: move;\n}\n\n.edui-default .edui-dialog-content {\n    position: relative;\n}\n\n.edui-default .dialogcontmask {\n    cursor: move;\n    visibility: hidden;\n    display: block;\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    opacity: 0;\n    filter: alpha(opacity = 0);\n}\n\n/*link-dialog*/\n.edui-default .edui-for-link .edui-dialog-content {\n    width: 420px;\n    height: 200px;\n    overflow: hidden;\n}\n/*background-dialog*/\n.edui-default .edui-for-background .edui-dialog-content {\n    width: 440px;\n    height: 280px;\n    overflow: hidden;\n}\n\n/*template-dialog*/\n.edui-default .edui-for-template .edui-dialog-content {\n    width: 630px;\n    height: 390px;\n    overflow: hidden;\n}\n\n/*scrawl-dialog*/\n.edui-default .edui-for-scrawl .edui-dialog-content {\n    width: 515px;\n    *width: 506px;\n    height: 360px;\n}\n\n/*spechars-dialog*/\n.edui-default .edui-for-spechars .edui-dialog-content {\n    width: 620px;\n    height: 500px;\n    *width: 630px;\n    *height: 570px;\n}\n\n/*image-dialog*/\n.edui-default .edui-for-insertimage .edui-dialog-content {\n    width: 650px;\n    height: 400px;\n    overflow: hidden;\n}\n/*webapp-dialog*/\n.edui-default .edui-for-webapp .edui-dialog-content {\n    width: 560px;\n    _width: 565px;\n    height: 450px;\n    overflow: hidden;\n}\n\n/*image-insertframe*/\n.edui-default .edui-for-insertframe .edui-dialog-content {\n    width: 350px;\n    height: 200px;\n    overflow: hidden;\n}\n\n/*wordImage-dialog*/\n.edui-default .edui-for-wordimage .edui-dialog-content {\n    width: 620px;\n    height: 380px;\n    overflow: hidden;\n}\n\n/*attachment-dialog*/\n.edui-default .edui-for-attachment .edui-dialog-content {\n    width: 650px;\n    height: 400px;\n    overflow: hidden;\n}\n\n\n/*map-dialog*/\n.edui-default .edui-for-map .edui-dialog-content {\n    width: 550px;\n    height: 400px;\n}\n\n/*gmap-dialog*/\n.edui-default .edui-for-gmap .edui-dialog-content {\n    width: 550px;\n    height: 400px;\n}\n\n/*video-dialog*/\n.edui-default .edui-for-insertvideo .edui-dialog-content {\n    width: 590px;\n    height: 390px;\n}\n\n/*anchor-dialog*/\n.edui-default .edui-for-anchor .edui-dialog-content {\n    width: 320px;\n    height: 60px;\n    overflow: hidden;\n}\n\n/*searchreplace-dialog*/\n.edui-default .edui-for-searchreplace .edui-dialog-content {\n    width: 400px;\n    height: 220px;\n}\n\n/*help-dialog*/\n.edui-default .edui-for-help .edui-dialog-content {\n    width: 400px;\n    height: 420px;\n}\n\n/*edittable-dialog*/\n.edui-default .edui-for-edittable .edui-dialog-content {\n    width: 540px;\n    _width:590px;\n    height: 335px;\n}\n\n/*edittip-dialog*/\n.edui-default .edui-for-edittip .edui-dialog-content {\n    width: 225px;\n    height: 60px;\n}\n\n/*edittd-dialog*/\n.edui-default .edui-for-edittd .edui-dialog-content {\n    width: 240px;\n    height: 50px;\n}\n/*snapscreen-dialog*/\n.edui-default .edui-for-snapscreen .edui-dialog-content {\n    width: 400px;\n    height: 220px;\n}\n\n/*music-dialog*/\n.edui-default .edui-for-music .edui-dialog-content {\n    width: 515px;\n    height: 360px;\n}\n\n/*段落弹出菜单*/\n.edui-default .edui-for-paragraph .edui-listitem-label {\n    font-family: Tahoma, Verdana, Arial, Helvetica;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p {\n    font-size: 22px;\n    line-height: 27px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1 {\n    font-weight: bolder;\n    font-size: 32px;\n    line-height: 36px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2 {\n    font-weight: bolder;\n    font-size: 27px;\n    line-height: 29px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3 {\n    font-weight: bolder;\n    font-size: 19px;\n    line-height: 23px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4 {\n    font-weight: bolder;\n    font-size: 16px;\n    line-height: 19px\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5 {\n    font-weight: bolder;\n    font-size: 13px;\n    line-height: 16px;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6 {\n    font-weight: bolder;\n    font-size: 12px;\n    line-height: 14px;\n}\n/* 表格弹出菜单 */\n.edui-default .edui-for-inserttable .edui-splitborder {\n    display: none\n}\n.edui-default .edui-for-inserttable  .edui-splitbutton-body .edui-arrow {\n    width: 0\n}\n.edui-default .edui-toolbar .edui-for-inserttable  .edui-state-active .edui-splitborder{\n    border-left: 1px solid transparent;\n}\n.edui-default .edui-tablepicker .edui-infoarea {\n    height: 14px;\n    line-height: 14px;\n    font-size: 12px;\n    width: 220px;\n    margin-bottom: 3px;\n    clear: both;\n}\n\n.edui-default .edui-tablepicker .edui-infoarea .edui-label {\n    float: left;\n}\n\n.edui-default .edui-dialog-buttons .edui-label {\n    line-height: 24px;\n}\n\n.edui-default .edui-tablepicker .edui-infoarea .edui-clickable {\n    float: right;\n}\n\n.edui-default .edui-tablepicker .edui-pickarea {\n    background: url(\"../images/unhighlighted.gif\") repeat;\n    height: 220px;\n    width: 220px;\n}\n\n.edui-default .edui-tablepicker .edui-pickarea .edui-overlay {\n    background: url(\"../images/highlighted.gif\") repeat;\n}\n\n/* 颜色弹出菜单 */\n.edui-default .edui-colorpicker-topbar {\n    height: 27px;\n    width: 200px;\n    /*border-bottom: 1px gray dashed;*/\n}\n\n.edui-default .edui-colorpicker-preview {\n    height: 20px;\n    border: 1px inset black;\n    margin-left: 1px;\n    width: 128px;\n    float: left;\n}\n\n.edui-default .edui-colorpicker-nocolor {\n    float: right;\n    margin-right: 1px;\n    font-size: 12px;\n    line-height: 14px;\n    height: 14px;\n    border: 1px solid #333;\n    padding: 3px 5px;\n    cursor: pointer;\n}\n\n.edui-default .edui-colorpicker-tablefirstrow {\n    height: 30px;\n}\n\n.edui-default .edui-colorpicker-colorcell {\n    width: 14px;\n    height: 14px;\n    display: block;\n    margin: 0;\n    cursor: pointer;\n}\n\n.edui-default .edui-colorpicker-colorcell:hover {\n    width: 14px;\n    height: 14px;\n    margin: 0;\n}\n.edui-default .edui-colorpicker-advbtn{\n    display: block;\n    text-align: center;\n    cursor: pointer;\n    height:20px;\n}\n.arrow_down{\n    background: white url('../images/arrow_down.png') no-repeat center;\n}\n.arrow_up{\n    background: white url('../images/arrow_up.png') no-repeat center;\n}\n/*高级的样式*/\n.edui-colorpicker-adv{\n    position: relative;\n    overflow: hidden;\n    height: 180px;\n    display: none;\n}\n.edui-colorpicker-plant, .edui-colorpicker-hue {\n    border: solid 1px #666;\n}\n.edui-colorpicker-pad {\n    width: 150px;\n    height: 150px;\n    left: 14px;\n    top: 13px;\n    position: absolute;\n    background: red;\n    overflow: hidden;\n    cursor: crosshair;\n}\n.edui-colorpicker-cover{\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 150px;\n    height: 150px;\n    background: url(\"../images/tangram-colorpicker.png\") -160px -200px;\n}\n.edui-colorpicker-padDot{\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 11px;\n    height: 11px;\n    overflow: hidden;\n    background: url(../images/tangram-colorpicker.png) 0px -200px repeat-x;\n    z-index: 1000;\n\n}\n.edui-colorpicker-sliderMain {\n    position: absolute;\n    left: 171px;\n    top: 13px;\n    width: 19px;\n    height: 152px;\n    background: url(../images/tangram-colorpicker.png) -179px -12px no-repeat;\n\n}\n.edui-colorpicker-slider {\n    width: 100%;\n    height: 100%;\n    cursor: pointer;\n}\n.edui-colorpicker-thumb{\n    position: absolute;\n    top: 0;\n    cursor: pointer;\n    height: 3px;\n    left: -1px;\n    right: -1px;\n    border: 1px solid black;\n    background: white;\n    opacity: .8;\n}\n/*自动排版弹出菜单*/\n.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body {\n    font-size: 12px;\n    margin-bottom: 3px;\n    clear: both;\n}\n\n.edui-default .edui-autotypesetpicker-body table {\n    border-collapse: separate;\n    border-spacing: 2px;\n}\n\n.edui-default .edui-autotypesetpicker-body td {\n    font-size: 12px;\n    word-wrap:break-word;\n}\n\n.edui-default .edui-autotypesetpicker-body td input {\n    margin: 3px 3px 3px 4px;\n    *margin: 1px 0 0 0;\n}\n/*自动排版弹出菜单*/\n.edui-default .edui-cellalignpicker .edui-cellalignpicker-body {\n    width: 70px;\n    font-size: 12px;\n    cursor: default;\n}\n\n.edui-default .edui-cellalignpicker-body table {\n    border-collapse: separate;\n    border-spacing: 0;\n}\n.edui-default .edui-cellalignpicker-body td{\n    padding: 1px;\n}\n.edui-default .edui-cellalignpicker-body .edui-icon{\n    height: 20px;\n    width: 20px;\n    padding: 1px;\n    background-image: url(../images/table-cell-align.png);\n}\n\n.edui-default .edui-cellalignpicker-body .edui-left{\n    background-position: 0 0;\n}\n\n.edui-default .edui-cellalignpicker-body .edui-center{\n    background-position: -25px 0;\n}\n.edui-default .edui-cellalignpicker-body .edui-right{\n    background-position: -51px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{\n    background-position: -73px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{\n    background-position: -98px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{\n    background-position: -124px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left {\n    background-position: -146px 0;\n    background-color: #f1f4f5;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center {\n    background-position: -245px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right {\n    background-position: -271px 0;\n}\n/*分隔线*/\n.edui-default .edui-toolbar .edui-separator {\n    width: 2px;\n    height: 20px;\n    margin: 2px 4px 2px 3px;\n    background: url(../images/icons.png) -181px 0;\n    background: url(../images/icons.gif) -181px 0 \\9;\n}\n\n/*颜色按钮 */\n.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump {\n    position: absolute;\n    overflow: hidden;\n    bottom: 1px;\n    left: 1px;\n    width: 18px;\n    height: 4px;\n}\n/*表情按钮及弹出菜单*/\n/*去除了表情的下拉箭头*/\n.edui-default .edui-for-emotion .edui-icon {\n    background-position: -60px -20px;\n}\n.edui-default .edui-for-emotion .edui-popup-content iframe\n{\n    width: 514px;\n    height: 380px;\n    overflow: hidden;\n}\n.edui-default .edui-for-emotion .edui-popup-content\n{\n    position: relative;\n    z-index: 555\n}\n\n.edui-default .edui-for-emotion .edui-splitborder {\n    display: none\n}\n\n.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow\n{\n    width: 0\n}\n.edui-default .edui-toolbar .edui-for-emotion  .edui-state-active .edui-splitborder\n{\n    border-left: 1px solid transparent;\n}\n/*contextmenu*/\n.edui-default .edui-hassubmenu .edui-arrow {\n    height: 20px;\n    width: 20px;\n    float: right;\n    background: url(\"../images/icons-all.gif\") no-repeat 10px -233px;\n}\n\n.edui-default .edui-menu-body .edui-menuitem {\n    padding: 1px;\n}\n\n.edui-default .edui-menuseparator {\n    margin: 2px 0;\n    height: 1px;\n    overflow: hidden;\n}\n\n.edui-default .edui-menuseparator-inner {\n    border-bottom: 1px solid #e2e3e3;\n    margin-left: 29px;\n    margin-right: 1px;\n}\n\n.edui-default .edui-menu-body .edui-state-hover {\n    padding: 0 !important;\n    background-color: #fff5d4;\n    border: 1px solid #dcac6c;\n}\n/*弹出菜单*/\n.edui-default .edui-shortcutmenu {\n    padding: 2px;\n    width: 190px;\n    height: 50px;\n    background-color: #fff;\n    border: 1px solid #ccc;\n    border-radius: 5px;\n}\n\n/*粘贴弹出菜单*/\n.edui-default .edui-wordpastepop .edui-popup-content{\n    border: none;\n    padding: 0;\n    width: 54px;\n    height: 21px;\n}\n.edui-default  .edui-pasteicon {\n    width: 100%;\n    height: 100%;\n    background-image: url('../images/wordpaste.png');\n    background-position: 0 0;\n}\n\n.edui-default  .edui-pasteicon.edui-state-opened {\n    background-position: 0 -34px;\n}\n\n.edui-default  .edui-pastecontainer {\n    position: relative;\n    visibility: hidden;\n    width: 97px;\n    background: #fff;\n    border: 1px solid #ccc;\n}\n\n.edui-default  .edui-pastecontainer .edui-title {\n    font-weight: bold;\n    background: #F8F8FF;\n    height: 25px;\n    line-height: 25px;\n    font-size: 12px;\n    padding-left: 5px;\n}\n\n.edui-default  .edui-pastecontainer .edui-button {\n    overflow: hidden;\n    margin: 3px 0;\n}\n\n.edui-default  .edui-pastecontainer .edui-button .edui-richtxticon,\n.edui-default  .edui-pastecontainer .edui-button .edui-tagicon,\n.edui-default  .edui-pastecontainer .edui-button .edui-plaintxticon{\n    float: left;\n    cursor: pointer;\n    width: 29px;\n    height: 29px;\n    margin-left: 5px;\n    background-image: url('../images/wordpaste.png');\n    background-repeat: no-repeat;\n}\n.edui-default  .edui-pastecontainer .edui-button .edui-richtxticon {\n    margin-left: 0;\n    background-position: -109px 0;\n}\n.edui-default  .edui-pastecontainer .edui-button .edui-tagicon {\n    background-position: -148px 1px;\n}\n\n.edui-default  .edui-pastecontainer .edui-button .edui-plaintxticon {\n    background-position: -72px 0;\n}\n\n.edui-default  .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon {\n    background-position: -109px -34px;\n}\n.edui-default  .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{\n    background-position: -148px -34px;\n}\n.edui-default  .edui-pastecontainer .edui-button  .edui-state-hover .edui-plaintxticon{\n    background-position: -72px -34px;\n}"
  },
  {
    "path": "web/console/public/UEditor/themes/default/dialogbase.css",
    "content": "/*弹出对话框页面样式组件\n*/\n\n/*reset\n*/\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, font, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td {\n    margin: 0;\n    padding: 0;\n    outline: 0;\n    font-size: 100%;\n}\n\nbody {\n    line-height: 1;\n}\n\nol, ul {\n    list-style: none;\n}\n\nblockquote, q {\n    quotes: none;\n}\n\nins {\n    text-decoration: none;\n}\n\ndel {\n    text-decoration: line-through;\n}\n\ntable {\n    border-collapse: collapse;\n    border-spacing: 0;\n}\n\n/*module\n*/\nbody {\n    background-color: #fff;\n    font: 12px/1.5 sans-serif, \"宋体\", \"Arial Narrow\", HELVETICA;\n    color: #646464;\n}\n\n/*tab*/\n.tabhead {\n    position: relative;\n    z-index: 10;\n}\n\n.tabhead span {\n    display: inline-block;\n    padding: 0 5px;\n    height: 30px;\n    border: 1px solid #ccc;\n    background: url(\"images/dialog-title-bg.png\") repeat-x;\n    text-align: center;\n    line-height: 30px;\n    cursor: pointer;\n    *margin-right: 5px;\n}\n\n.tabhead span.focus {\n    height: 31px;\n    border-bottom: none;\n    background: #fff;\n}\n\n.tabbody {\n    position: relative;\n    top: -1px;\n    margin: 0 auto;\n    border: 1px solid #ccc;\n}\n\n/*button*/\na.button {\n    display: block;\n    text-align: center;\n    line-height: 24px;\n    text-decoration: none;\n    height: 24px;\n    width: 95px;\n    border: 0;\n    color: #838383;\n    background: url(../../themes/default/images/icons-all.gif) no-repeat;\n}\n\na.button:hover {\n    background-position: 0 -30px;\n}"
  },
  {
    "path": "web/console/public/UEditor/themes/iframe.css",
    "content": "/*可以在这里添加你自己的css*/\nhtml,\nbody {\n  /* overflow-y: auto !important; */\n  /* overflow: hidden !important; */\n  /* height: auto !important; */\n}\n\nbody {\n\tpadding: 8px !important;\n\tmargin: 0 !important;\n\tbox-sizing: border-box;\n}"
  },
  {
    "path": "web/console/public/UEditor/third-party/SyntaxHighlighter/shCore.js",
    "content": "// XRegExp 1.5.1\n// (c) 2007-2012 Steven Levithan\n// MIT License\n// <http://xregexp.com>\n// Provides an augmented, extensible, cross-browser implementation of regular expressions,\n// including support for additional syntax, flags, and methods\n\nvar XRegExp;\n\nif (XRegExp) {\n    // Avoid running twice, since that would break references to native globals\n    throw Error(\"can't load XRegExp twice in the same frame\");\n}\n\n// Run within an anonymous function to protect variables and avoid new globals\n(function (undefined) {\n\n    //---------------------------------\n    //  Constructor\n    //---------------------------------\n\n    // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native\n    // regular expression in that additional syntax and flags are supported and cross-browser\n    // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and\n    // converts to type XRegExp\n    XRegExp = function (pattern, flags) {\n        var output = [],\n            currScope = XRegExp.OUTSIDE_CLASS,\n            pos = 0,\n            context, tokenResult, match, chr, regex;\n\n        if (XRegExp.isRegExp(pattern)) {\n            if (flags !== undefined)\n                throw TypeError(\"can't supply flags when constructing one RegExp from another\");\n            return clone(pattern);\n        }\n        // Tokens become part of the regex construction process, so protect against infinite\n        // recursion when an XRegExp is constructed within a token handler or trigger\n        if (isInsideConstructor)\n            throw Error(\"can't call the XRegExp constructor within token definition functions\");\n\n        flags = flags || \"\";\n        context = { // `this` object for custom tokens\n            hasNamedCapture: false,\n            captureNames: [],\n            hasFlag: function (flag) {return flags.indexOf(flag) > -1;},\n            setFlag: function (flag) {flags += flag;}\n        };\n\n        while (pos < pattern.length) {\n            // Check for custom tokens at the current position\n            tokenResult = runTokens(pattern, pos, currScope, context);\n\n            if (tokenResult) {\n                output.push(tokenResult.output);\n                pos += (tokenResult.match[0].length || 1);\n            } else {\n                // Check for native multicharacter metasequences (excluding character classes) at\n                // the current position\n                if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) {\n                    output.push(match[0]);\n                    pos += match[0].length;\n                } else {\n                    chr = pattern.charAt(pos);\n                    if (chr === \"[\")\n                        currScope = XRegExp.INSIDE_CLASS;\n                    else if (chr === \"]\")\n                        currScope = XRegExp.OUTSIDE_CLASS;\n                    // Advance position one character\n                    output.push(chr);\n                    pos++;\n                }\n            }\n        }\n\n        regex = RegExp(output.join(\"\"), nativ.replace.call(flags, flagClip, \"\"));\n        regex._xregexp = {\n            source: pattern,\n            captureNames: context.hasNamedCapture ? context.captureNames : null\n        };\n        return regex;\n    };\n\n\n    //---------------------------------\n    //  Public properties\n    //---------------------------------\n\n    XRegExp.version = \"1.5.1\";\n\n    // Token scope bitflags\n    XRegExp.INSIDE_CLASS = 1;\n    XRegExp.OUTSIDE_CLASS = 2;\n\n\n    //---------------------------------\n    //  Private variables\n    //---------------------------------\n\n    var replacementToken = /\\$(?:(\\d\\d?|[$&`'])|{([$\\w]+)})/g,\n        flagClip = /[^gimy]+|([\\s\\S])(?=[\\s\\S]*\\1)/g, // Nonnative and duplicate flags\n        quantifier = /^(?:[?*+]|{\\d+(?:,\\d*)?})\\??/,\n        isInsideConstructor = false,\n        tokens = [],\n    // Copy native globals for reference (\"native\" is an ES3 reserved keyword)\n        nativ = {\n            exec: RegExp.prototype.exec,\n            test: RegExp.prototype.test,\n            match: String.prototype.match,\n            replace: String.prototype.replace,\n            split: String.prototype.split\n        },\n        compliantExecNpcg = nativ.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n        compliantLastIndexIncrement = function () {\n            var x = /^/g;\n            nativ.test.call(x, \"\");\n            return !x.lastIndex;\n        }(),\n        hasNativeY = RegExp.prototype.sticky !== undefined,\n        nativeTokens = {};\n\n    // `nativeTokens` match native multicharacter metasequences only (including deprecated octals,\n    // excluding character classes)\n    nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S]))/;\n    nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??)/;\n\n\n    //---------------------------------\n    //  Public methods\n    //---------------------------------\n\n    // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by\n    // the XRegExp library and can be used to create XRegExp plugins. This function is intended for\n    // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can\n    // be disabled by `XRegExp.freezeTokens`\n    XRegExp.addToken = function (regex, handler, scope, trigger) {\n        tokens.push({\n            pattern: clone(regex, \"g\" + (hasNativeY ? \"y\" : \"\")),\n            handler: handler,\n            scope: scope || XRegExp.OUTSIDE_CLASS,\n            trigger: trigger || null\n        });\n    };\n\n    // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag\n    // combination has previously been cached, the cached copy is returned; otherwise the newly\n    // created regex is cached\n    XRegExp.cache = function (pattern, flags) {\n        var key = pattern + \"/\" + (flags || \"\");\n        return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags));\n    };\n\n    // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh\n    // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global`\n    // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve\n    // special properties required for named capture\n    XRegExp.copyAsGlobal = function (regex) {\n        return clone(regex, \"g\");\n    };\n\n    // Accepts a string; returns the string with regex metacharacters escaped. The returned string\n    // can safely be used at any point within a regex to match the provided literal string. Escaped\n    // characters are [ ] { } ( ) * + ? - . , \\ ^ $ | # and whitespace\n    XRegExp.escape = function (str) {\n        return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n    };\n\n    // Accepts a string to search, regex to search with, position to start the search within the\n    // string (default: 0), and an optional Boolean indicating whether matches must start at-or-\n    // after the position or at the specified position only. This function ignores the `lastIndex`\n    // of the provided regex in its own handling, but updates the property for compatibility\n    XRegExp.execAt = function (str, regex, pos, anchored) {\n        var r2 = clone(regex, \"g\" + ((anchored && hasNativeY) ? \"y\" : \"\")),\n            match;\n        r2.lastIndex = pos = pos || 0;\n        match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.)\n        if (anchored && match && match.index !== pos)\n            match = null;\n        if (regex.global)\n            regex.lastIndex = match ? r2.lastIndex : 0;\n        return match;\n    };\n\n    // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing\n    // syntax and flag changes. Should be run after XRegExp and any plugins are loaded\n    XRegExp.freezeTokens = function () {\n        XRegExp.addToken = function () {\n            throw Error(\"can't run addToken after freezeTokens\");\n        };\n    };\n\n    // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object.\n    // Note that this is also `true` for regex literals and regexes created by the `XRegExp`\n    // constructor. This works correctly for variables created in another frame, when `instanceof`\n    // and `constructor` checks would fail to work as intended\n    XRegExp.isRegExp = function (o) {\n        return Object.prototype.toString.call(o) === \"[object RegExp]\";\n    };\n\n    // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to\n    // iterate over regex matches compared to the traditional approaches of subverting\n    // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop\n    XRegExp.iterate = function (str, regex, callback, context) {\n        var r2 = clone(regex, \"g\"),\n            i = -1, match;\n        while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)\n            if (regex.global)\n                regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback`\n            callback.call(context, match, ++i, str, regex);\n            if (r2.lastIndex === match.index)\n                r2.lastIndex++;\n        }\n        if (regex.global)\n            regex.lastIndex = 0;\n    };\n\n    // Accepts a string and an array of regexes; returns the result of using each successive regex\n    // to search within the matches of the previous regex. The array of regexes can also contain\n    // objects with `regex` and `backref` properties, in which case the named or numbered back-\n    // references specified are passed forward to the next regex or returned. E.g.:\n    // var xregexpImgFileNames = XRegExp.matchChain(html, [\n    //     {regex: /<img\\b([^>]+)>/i, backref: 1}, // <img> tag attributes\n    //     {regex: XRegExp('(?ix) \\\\s src=\" (?<src> [^\"]+ )'), backref: \"src\"}, // src attribute values\n    //     {regex: XRegExp(\"^http://xregexp\\\\.com(/[^#?]+)\", \"i\"), backref: 1}, // xregexp.com paths\n    //     /[^\\/]+$/ // filenames (strip directory paths)\n    // ]);\n    XRegExp.matchChain = function (str, chain) {\n        return function recurseChain (values, level) {\n            var item = chain[level].regex ? chain[level] : {regex: chain[level]},\n                regex = clone(item.regex, \"g\"),\n                matches = [], i;\n            for (i = 0; i < values.length; i++) {\n                XRegExp.iterate(values[i], regex, function (match) {\n                    matches.push(item.backref ? (match[item.backref] || \"\") : match[0]);\n                });\n            }\n            return ((level === chain.length - 1) || !matches.length) ?\n                matches : recurseChain(matches, level + 1);\n        }([str], 0);\n    };\n\n\n    //---------------------------------\n    //  New RegExp prototype methods\n    //---------------------------------\n\n    // Accepts a context object and arguments array; returns the result of calling `exec` with the\n    // first value in the arguments array. the context is ignored but is accepted for congruity\n    // with `Function.prototype.apply`\n    RegExp.prototype.apply = function (context, args) {\n        return this.exec(args[0]);\n    };\n\n    // Accepts a context object and string; returns the result of calling `exec` with the provided\n    // string. the context is ignored but is accepted for congruity with `Function.prototype.call`\n    RegExp.prototype.call = function (context, str) {\n        return this.exec(str);\n    };\n\n\n    //---------------------------------\n    //  Overriden native methods\n    //---------------------------------\n\n    // Adds named capture support (with backreferences returned as `result.name`), and fixes two\n    // cross-browser issues per ES3:\n    // - Captured values for nonparticipating capturing groups should be returned as `undefined`,\n    //   rather than the empty string.\n    // - `lastIndex` should not be incremented after zero-length matches.\n    RegExp.prototype.exec = function (str) {\n        var match, name, r2, origLastIndex;\n        if (!this.global)\n            origLastIndex = this.lastIndex;\n        match = nativ.exec.apply(this, arguments);\n        if (match) {\n            // Fix browsers whose `exec` methods don't consistently return `undefined` for\n            // nonparticipating capturing groups\n            if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n                r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), \"g\", \"\"));\n                // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed\n                // matching due to characters outside the match\n                nativ.replace.call((str + \"\").slice(match.index), r2, function () {\n                    for (var i = 1; i < arguments.length - 2; i++) {\n                        if (arguments[i] === undefined)\n                            match[i] = undefined;\n                    }\n                });\n            }\n            // Attach named capture properties\n            if (this._xregexp && this._xregexp.captureNames) {\n                for (var i = 1; i < match.length; i++) {\n                    name = this._xregexp.captureNames[i - 1];\n                    if (name)\n                        match[name] = match[i];\n                }\n            }\n            // Fix browsers that increment `lastIndex` after zero-length matches\n            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n        }\n        if (!this.global)\n            this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        return match;\n    };\n\n    // Fix browser bugs in native method\n    RegExp.prototype.test = function (str) {\n        // Use the native `exec` to skip some processing overhead, even though the altered\n        // `exec` would take care of the `lastIndex` fixes\n        var match, origLastIndex;\n        if (!this.global)\n            origLastIndex = this.lastIndex;\n        match = nativ.exec.call(this, str);\n        // Fix browsers that increment `lastIndex` after zero-length matches\n        if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n            this.lastIndex--;\n        if (!this.global)\n            this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        return !!match;\n    };\n\n    // Adds named capture support and fixes browser bugs in native method\n    String.prototype.match = function (regex) {\n        if (!XRegExp.isRegExp(regex))\n            regex = RegExp(regex); // Native `RegExp`\n        if (regex.global) {\n            var result = nativ.match.apply(this, arguments);\n            regex.lastIndex = 0; // Fix IE bug\n            return result;\n        }\n        return regex.exec(this); // Run the altered `exec`\n    };\n\n    // Adds support for `${n}` tokens for named and numbered backreferences in replacement text,\n    // and provides named backreferences to replacement functions as `arguments[0].name`. Also\n    // fixes cross-browser differences in replacement text syntax when performing a replacement\n    // using a nonregex search value, and the value of replacement regexes' `lastIndex` property\n    // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary\n    // third (`flags`) parameter\n    String.prototype.replace = function (search, replacement) {\n        var isRegex = XRegExp.isRegExp(search),\n            captureNames, result, str, origLastIndex;\n\n        // There are too many combinations of search/replacement types/values and browser bugs that\n        // preclude passing to native `replace`, so don't try\n        //if (...)\n        //    return nativ.replace.apply(this, arguments);\n\n        if (isRegex) {\n            if (search._xregexp)\n                captureNames = search._xregexp.captureNames; // Array or `null`\n            if (!search.global)\n                origLastIndex = search.lastIndex;\n        } else {\n            search = search + \"\"; // Type conversion\n        }\n\n        if (Object.prototype.toString.call(replacement) === \"[object Function]\") {\n            result = nativ.replace.call(this + \"\", search, function () {\n                if (captureNames) {\n                    // Change the `arguments[0]` string primitive to a String object which can store properties\n                    arguments[0] = new String(arguments[0]);\n                    // Store named backreferences on `arguments[0]`\n                    for (var i = 0; i < captureNames.length; i++) {\n                        if (captureNames[i])\n                            arguments[0][captureNames[i]] = arguments[i + 1];\n                    }\n                }\n                // Update `lastIndex` before calling `replacement` (fix browsers)\n                if (isRegex && search.global)\n                    search.lastIndex = arguments[arguments.length - 2] + arguments[0].length;\n                return replacement.apply(null, arguments);\n            });\n        } else {\n            str = this + \"\"; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`)\n            result = nativ.replace.call(str, search, function () {\n                var args = arguments; // Keep this function's `arguments` available through closure\n                return nativ.replace.call(replacement + \"\", replacementToken, function ($0, $1, $2) {\n                    // Numbered backreference (without delimiters) or special variable\n                    if ($1) {\n                        switch ($1) {\n                            case \"$\": return \"$\";\n                            case \"&\": return args[0];\n                            case \"`\": return args[args.length - 1].slice(0, args[args.length - 2]);\n                            case \"'\": return args[args.length - 1].slice(args[args.length - 2] + args[0].length);\n                            // Numbered backreference\n                            default:\n                                // What does \"$10\" mean?\n                                // - Backreference 10, if 10 or more capturing groups exist\n                                // - Backreference 1 followed by \"0\", if 1-9 capturing groups exist\n                                // - Otherwise, it's the string \"$10\"\n                                // Also note:\n                                // - Backreferences cannot be more than two digits (enforced by `replacementToken`)\n                                // - \"$01\" is equivalent to \"$1\" if a capturing group exists, otherwise it's the string \"$01\"\n                                // - There is no \"$0\" token (\"$&\" is the entire match)\n                                var literalNumbers = \"\";\n                                $1 = +$1; // Type conversion; drop leading zero\n                                if (!$1) // `$1` was \"0\" or \"00\"\n                                    return $0;\n                                while ($1 > args.length - 3) {\n                                    literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers;\n                                    $1 = Math.floor($1 / 10); // Drop the last digit\n                                }\n                                return ($1 ? args[$1] || \"\" : \"$\") + literalNumbers;\n                        }\n                        // Named backreference or delimited numbered backreference\n                    } else {\n                        // What does \"${n}\" mean?\n                        // - Backreference to numbered capture n. Two differences from \"$n\":\n                        //   - n can be more than two digits\n                        //   - Backreference 0 is allowed, and is the entire match\n                        // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture\n                        // - Otherwise, it's the string \"${n}\"\n                        var n = +$2; // Type conversion; drop leading zeros\n                        if (n <= args.length - 3)\n                            return args[n];\n                        n = captureNames ? indexOf(captureNames, $2) : -1;\n                        return n > -1 ? args[n + 1] : $0;\n                    }\n                });\n            });\n        }\n\n        if (isRegex) {\n            if (search.global)\n                search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows)\n            else\n                search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        }\n\n        return result;\n    };\n\n    // A consistent cross-browser, ES3 compliant `split`\n    String.prototype.split = function (s /* separator */, limit) {\n        // If separator `s` is not a regex, use the native `split`\n        if (!XRegExp.isRegExp(s))\n            return nativ.split.apply(this, arguments);\n\n        var str = this + \"\", // Type conversion\n            output = [],\n            lastLastIndex = 0,\n            match, lastLength;\n\n        // Behavior for `limit`: if it's...\n        // - `undefined`: No limit\n        // - `NaN` or zero: Return an empty array\n        // - A positive number: Use `Math.floor(limit)`\n        // - A negative number: No limit\n        // - Other: Type-convert, then use the above rules\n        if (limit === undefined || +limit < 0) {\n            limit = Infinity;\n        } else {\n            limit = Math.floor(+limit);\n            if (!limit)\n                return [];\n        }\n\n        // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero\n        // and restore it to its original value when we're done using the regex\n        s = XRegExp.copyAsGlobal(s);\n\n        while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)\n            if (s.lastIndex > lastLastIndex) {\n                output.push(str.slice(lastLastIndex, match.index));\n\n                if (match.length > 1 && match.index < str.length)\n                    Array.prototype.push.apply(output, match.slice(1));\n\n                lastLength = match[0].length;\n                lastLastIndex = s.lastIndex;\n\n                if (output.length >= limit)\n                    break;\n            }\n\n            if (s.lastIndex === match.index)\n                s.lastIndex++;\n        }\n\n        if (lastLastIndex === str.length) {\n            if (!nativ.test.call(s, \"\") || lastLength)\n                output.push(\"\");\n        } else {\n            output.push(str.slice(lastLastIndex));\n        }\n\n        return output.length > limit ? output.slice(0, limit) : output;\n    };\n\n\n    //---------------------------------\n    //  Private helper functions\n    //---------------------------------\n\n    // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp`\n    // instance with a fresh `lastIndex` (set to zero), preserving properties required for named\n    // capture. Also allows adding new flags in the process of copying the regex\n    function clone (regex, additionalFlags) {\n        if (!XRegExp.isRegExp(regex))\n            throw TypeError(\"type RegExp expected\");\n        var x = regex._xregexp;\n        regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || \"\"));\n        if (x) {\n            regex._xregexp = {\n                source: x.source,\n                captureNames: x.captureNames ? x.captureNames.slice(0) : null\n            };\n        }\n        return regex;\n    }\n\n    function getNativeFlags (regex) {\n        return (regex.global     ? \"g\" : \"\") +\n            (regex.ignoreCase ? \"i\" : \"\") +\n            (regex.multiline  ? \"m\" : \"\") +\n            (regex.extended   ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n            (regex.sticky     ? \"y\" : \"\");\n    }\n\n    function runTokens (pattern, index, scope, context) {\n        var i = tokens.length,\n            result, match, t;\n        // Protect against constructing XRegExps within token handler and trigger functions\n        isInsideConstructor = true;\n        // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws\n        try {\n            while (i--) { // Run in reverse order\n                t = tokens[i];\n                if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) {\n                    t.pattern.lastIndex = index;\n                    match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc.\n                    if (match && match.index === index) {\n                        result = {\n                            output: t.handler.call(context, match, scope),\n                            match: match\n                        };\n                        break;\n                    }\n                }\n            }\n        } catch (err) {\n            throw err;\n        } finally {\n            isInsideConstructor = false;\n        }\n        return result;\n    }\n\n    function indexOf (array, item, from) {\n        if (Array.prototype.indexOf) // Use the native array method if available\n            return array.indexOf(item, from);\n        for (var i = from || 0; i < array.length; i++) {\n            if (array[i] === item)\n                return i;\n        }\n        return -1;\n    }\n\n\n    //---------------------------------\n    //  Built-in tokens\n    //---------------------------------\n\n    // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the\n    // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS`\n\n    // Comment pattern: (?# )\n    XRegExp.addToken(\n        /\\(\\?#[^)]*\\)/,\n        function (match) {\n            // Keep tokens separated unless the following token is a quantifier\n            return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? \"\" : \"(?:)\";\n        }\n    );\n\n    // Capturing group (match the opening parenthesis only).\n    // Required for support of named capturing groups\n    XRegExp.addToken(\n        /\\((?!\\?)/,\n        function () {\n            this.captureNames.push(null);\n            return \"(\";\n        }\n    );\n\n    // Named capturing group (match the opening delimiter only): (?<name>\n    XRegExp.addToken(\n        /\\(\\?<([$\\w]+)>/,\n        function (match) {\n            this.captureNames.push(match[1]);\n            this.hasNamedCapture = true;\n            return \"(\";\n        }\n    );\n\n    // Named backreference: \\k<name>\n    XRegExp.addToken(\n        /\\\\k<([\\w$]+)>/,\n        function (match) {\n            var index = indexOf(this.captureNames, match[1]);\n            // Keep backreferences separate from subsequent literal numbers. Preserve back-\n            // references to named groups that are undefined at this point as literal strings\n            return index > -1 ?\n                \"\\\\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? \"\" : \"(?:)\") :\n                match[0];\n        }\n    );\n\n    // Empty character class: [] or [^]\n    XRegExp.addToken(\n        /\\[\\^?]/,\n        function (match) {\n            // For cross-browser compatibility with ES3, convert [] to \\b\\B and [^] to [\\s\\S].\n            // (?!) should work like \\b\\B, but is unreliable in Firefox\n            return match[0] === \"[]\" ? \"\\\\b\\\\B\" : \"[\\\\s\\\\S]\";\n        }\n    );\n\n    // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx)\n    // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc.\n    XRegExp.addToken(\n        /^\\(\\?([imsx]+)\\)/,\n        function (match) {\n            this.setFlag(match[1]);\n            return \"\";\n        }\n    );\n\n    // Whitespace and comments, in free-spacing (aka extended) mode only\n    XRegExp.addToken(\n        /(?:\\s+|#.*)+/,\n        function (match) {\n            // Keep tokens separated unless the following token is a quantifier\n            return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? \"\" : \"(?:)\";\n        },\n        XRegExp.OUTSIDE_CLASS,\n        function () {return this.hasFlag(\"x\");}\n    );\n\n    // Dot, in dotall (aka singleline) mode only\n    XRegExp.addToken(\n        /\\./,\n        function () {return \"[\\\\s\\\\S]\";},\n        XRegExp.OUTSIDE_CLASS,\n        function () {return this.hasFlag(\"s\");}\n    );\n\n\n    //---------------------------------\n    //  Backward compatibility\n    //---------------------------------\n\n    // Uncomment the following block for compatibility with XRegExp 1.0-1.2:\n    /*\n     XRegExp.matchWithinChain = XRegExp.matchChain;\n     RegExp.prototype.addFlags = function (s) {return clone(this, s);};\n     RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;};\n     RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);};\n     RegExp.prototype.validate = function (s) {var r = RegExp(\"^(?:\" + this.source + \")$(?!\\\\s)\", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;};\n     */\n\n})();\n\n//\n// Begin anonymous function. This is used to contain local scope variables without polutting global scope.\n//\nif (typeof(SyntaxHighlighter) == 'undefined') var SyntaxHighlighter = function() {\n\n// CommonJS\n    if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined')\n    {\n        XRegExp = require('XRegExp').XRegExp;\n    }\n\n// Shortcut object which will be assigned to the SyntaxHighlighter variable.\n// This is a shorthand for local reference in order to avoid long namespace\n// references to SyntaxHighlighter.whatever...\n    var sh = {\n        defaults : {\n            /** Additional CSS class names to be added to highlighter elements. */\n            'class-name' : '',\n\n            /** First line number. */\n            'first-line' : 1,\n\n            /**\n             * Pads line numbers. Possible values are:\n             *\n             *   false - don't pad line numbers.\n             *   true  - automaticaly pad numbers with minimum required number of leading zeroes.\n             *   [int] - length up to which pad line numbers.\n             */\n            'pad-line-numbers' : false,\n\n            /** Lines to highlight. */\n            'highlight' : false,\n\n            /** Title to be displayed above the code block. */\n            'title' : null,\n\n            /** Enables or disables smart tabs. */\n            'smart-tabs' : true,\n\n            /** Gets or sets tab size. */\n            'tab-size' : 4,\n\n            /** Enables or disables gutter. */\n            'gutter' : true,\n\n            /** Enables or disables toolbar. */\n            'toolbar' : true,\n\n            /** Enables quick code copy and paste from double click. */\n            'quick-code' : true,\n\n            /** Forces code view to be collapsed. */\n            'collapse' : false,\n\n            /** Enables or disables automatic links. */\n            'auto-links' : false,\n\n            /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */\n            'light' : false,\n\n            'unindent' : true,\n\n            'html-script' : false\n        },\n\n        config : {\n            space : '&nbsp;',\n\n            /** Enables use of <SCRIPT type=\"syntaxhighlighter\" /> tags. */\n            useScriptTags : true,\n\n            /** Blogger mode flag. */\n            bloggerMode : false,\n\n            stripBrs : false,\n\n            /** Name of the tag that SyntaxHighlighter will automatically look for. */\n            tagName : 'pre',\n\n            strings : {\n                expandSource : 'expand source',\n                help : '?',\n                alert: 'SyntaxHighlighter\\n\\n',\n                noBrush : 'Can\\'t find brush for: ',\n                brushNotHtmlScript : 'Brush wasn\\'t configured for html-script option: ',\n\n                // this is populated by the build script\n                aboutDialog : '@ABOUT@'\n            }\n        },\n\n        /** Internal 'global' variables. */\n        vars : {\n            discoveredBrushes : null,\n            highlighters : {}\n        },\n\n        /** This object is populated by user included external brush files. */\n        brushes : {},\n\n        /** Common regular expressions. */\n        regexLib : {\n            multiLineCComments\t\t\t: /\\/\\*[\\s\\S]*?\\*\\//gm,\n            singleLineCComments\t\t\t: /\\/\\/.*$/gm,\n            singleLinePerlComments\t\t: /#.*$/gm,\n            doubleQuotedString\t\t\t: /\"([^\\\\\"\\n]|\\\\.)*\"/g,\n            singleQuotedString\t\t\t: /'([^\\\\'\\n]|\\\\.)*'/g,\n            multiLineDoubleQuotedString\t: new XRegExp('\"([^\\\\\\\\\"]|\\\\\\\\.)*\"', 'gs'),\n            multiLineSingleQuotedString\t: new XRegExp(\"'([^\\\\\\\\']|\\\\\\\\.)*'\", 'gs'),\n            xmlComments\t\t\t\t\t: /(&lt;|<)!--[\\s\\S]*?--(&gt;|>)/gm,\n            url\t\t\t\t\t\t\t: /\\w+:\\/\\/[\\w-.\\/?%&=:@;#]*/g,\n\n            /** <?= ?> tags. */\n            phpScriptTags \t\t\t\t: { left: /(&lt;|<)\\?(?:=|php)?/g, right: /\\?(&gt;|>)/g, 'eof' : true },\n\n            /** <%= %> tags. */\n            aspScriptTags\t\t\t\t: { left: /(&lt;|<)%=?/g, right: /%(&gt;|>)/g },\n\n            /** <script> tags. */\n            scriptScriptTags\t\t\t: { left: /(&lt;|<)\\s*script.*?(&gt;|>)/gi, right: /(&lt;|<)\\/\\s*script\\s*(&gt;|>)/gi }\n        },\n\n        toolbar: {\n            /**\n             * Generates HTML markup for the toolbar.\n             * @param {Highlighter} highlighter Highlighter instance.\n             * @return {String} Returns HTML markup.\n             */\n            getHtml: function(highlighter)\n            {\n                var html = '<div class=\"toolbar\">',\n                    items = sh.toolbar.items,\n                    list = items.list\n                    ;\n\n                function defaultGetHtml(highlighter, name)\n                {\n                    return sh.toolbar.getButtonHtml(highlighter, name, sh.config.strings[name]);\n                };\n\n                for (var i = 0; i < list.length; i++)\n                    html += (items[list[i]].getHtml || defaultGetHtml)(highlighter, list[i]);\n\n                html += '</div>';\n\n                return html;\n            },\n\n            /**\n             * Generates HTML markup for a regular button in the toolbar.\n             * @param {Highlighter} highlighter Highlighter instance.\n             * @param {String} commandName\t\tCommand name that would be executed.\n             * @param {String} label\t\t\tLabel text to display.\n             * @return {String}\t\t\t\t\tReturns HTML markup.\n             */\n            getButtonHtml: function(highlighter, commandName, label)\n            {\n                return '<span><a href=\"#\" class=\"toolbar_item'\n                    + ' command_' + commandName\n                    + ' ' + commandName\n                    + '\">' + label + '</a></span>'\n                    ;\n            },\n\n            /**\n             * Event handler for a toolbar anchor.\n             */\n            handler: function(e)\n            {\n                var target = e.target,\n                    className = target.className || ''\n                    ;\n\n                function getValue(name)\n                {\n                    var r = new RegExp(name + '_(\\\\w+)'),\n                        match = r.exec(className)\n                        ;\n\n                    return match ? match[1] : null;\n                };\n\n                var highlighter = getHighlighterById(findParentElement(target, '.syntaxhighlighter').id),\n                    commandName = getValue('command')\n                    ;\n\n                // execute the toolbar command\n                if (highlighter && commandName)\n                    sh.toolbar.items[commandName].execute(highlighter);\n\n                // disable default A click behaviour\n                e.preventDefault();\n            },\n\n            /** Collection of toolbar items. */\n            items : {\n                // Ordered lis of items in the toolbar. Can't expect `for (var n in items)` to be consistent.\n                list: ['expandSource', 'help'],\n\n                expandSource: {\n                    getHtml: function(highlighter)\n                    {\n                        if (highlighter.getParam('collapse') != true)\n                            return '';\n\n                        var title = highlighter.getParam('title');\n                        return sh.toolbar.getButtonHtml(highlighter, 'expandSource', title ? title : sh.config.strings.expandSource);\n                    },\n\n                    execute: function(highlighter)\n                    {\n                        var div = getHighlighterDivById(highlighter.id);\n                        removeClass(div, 'collapsed');\n                    }\n                },\n\n                /** Command to display the about dialog window. */\n                help: {\n                    execute: function(highlighter)\n                    {\n                        var wnd = popup('', '_blank', 500, 250, 'scrollbars=0'),\n                            doc = wnd.document\n                            ;\n\n                        doc.write(sh.config.strings.aboutDialog);\n                        doc.close();\n                        wnd.focus();\n                    }\n                }\n            }\n        },\n\n        /**\n         * Finds all elements on the page which should be processes by SyntaxHighlighter.\n         *\n         * @param {Object} globalParams\t\tOptional parameters which override element's\n         * \t\t\t\t\t\t\t\t\tparameters. Only used if element is specified.\n         *\n         * @param {Object} element\tOptional element to highlight. If none is\n         * \t\t\t\t\t\t\tprovided, all elements in the current document\n         * \t\t\t\t\t\t\tare returned which qualify.\n         *\n         * @return {Array}\tReturns list of <code>{ target: DOMElement, params: Object }</code> objects.\n         */\n        findElements: function(globalParams, element)\n        {\n            var elements = element ? [element] : toArray(document.getElementsByTagName(sh.config.tagName)),\n                conf = sh.config,\n                result = []\n                ;\n\n            // support for <SCRIPT TYPE=\"syntaxhighlighter\" /> feature\n            if (conf.useScriptTags)\n                elements = elements.concat(getSyntaxHighlighterScriptTags());\n\n            if (elements.length === 0)\n                return result;\n\n            for (var i = 0; i < elements.length; i++)\n            {\n                var item = {\n                    target: elements[i],\n                    // local params take precedence over globals\n                    params: merge(globalParams, parseParams(elements[i].className))\n                };\n\n                if (item.params['brush'] == null)\n                    continue;\n\n                result.push(item);\n            }\n\n            return result;\n        },\n\n        /**\n         * Shorthand to highlight all elements on the page that are marked as\n         * SyntaxHighlighter source code.\n         *\n         * @param {Object} globalParams\t\tOptional parameters which override element's\n         * \t\t\t\t\t\t\t\t\tparameters. Only used if element is specified.\n         *\n         * @param {Object} element\tOptional element to highlight. If none is\n         * \t\t\t\t\t\t\tprovided, all elements in the current document\n         * \t\t\t\t\t\t\tare highlighted.\n         */\n        highlight: function(globalParams, element)\n        {\n            var elements = this.findElements(globalParams, element),\n                propertyName = 'innerHTML',\n                highlighter = null,\n                conf = sh.config\n                ;\n\n            if (elements.length === 0)\n                return;\n\n            for (var i = 0; i < elements.length; i++)\n            {\n                var element = elements[i],\n                    target = element.target,\n                    params = element.params,\n                    brushName = params.brush,\n                    code\n                    ;\n\n                if (brushName == null)\n                    continue;\n\n                // Instantiate a brush\n                if (params['html-script'] == 'true' || sh.defaults['html-script'] == true)\n                {\n                    highlighter = new sh.HtmlScript(brushName);\n                    brushName = 'htmlscript';\n                }\n                else\n                {\n                    var brush = findBrush(brushName);\n\n                    if (brush)\n                        highlighter = new brush();\n                    else\n                        continue;\n                }\n\n                code = target[propertyName];\n\n                // remove CDATA from <SCRIPT/> tags if it's present\n                if (conf.useScriptTags)\n                    code = stripCData(code);\n\n                // Inject title if the attribute is present\n                if ((target.title || '') != '')\n                    params.title = target.title;\n\n                params['brush'] = brushName;\n                highlighter.init(params);\n                element = highlighter.getDiv(code);\n\n                // carry over ID\n                if ((target.id || '') != '')\n                    element.id = target.id;\n                //by zhanyi 去掉多余的外围div\n                var tmp = element.firstChild.firstChild;\n                tmp.className = element.firstChild.className;\n\n                target.parentNode.replaceChild(tmp, target);\n            }\n        },\n\n        /**\n         * Main entry point for the SyntaxHighlighter.\n         * @param {Object} params Optional params to apply to all highlighted elements.\n         */\n        all: function(params)\n        {\n            attachEvent(\n                window,\n                'load',\n                function() { sh.highlight(params); }\n            );\n        }\n    }; // end of sh\n\n    /**\n     * Checks if target DOM elements has specified CSS class.\n     * @param {DOMElement} target Target DOM element to check.\n     * @param {String} className Name of the CSS class to check for.\n     * @return {Boolean} Returns true if class name is present, false otherwise.\n     */\n    function hasClass(target, className)\n    {\n        return target.className.indexOf(className) != -1;\n    };\n\n    /**\n     * Adds CSS class name to the target DOM element.\n     * @param {DOMElement} target Target DOM element.\n     * @param {String} className New CSS class to add.\n     */\n    function addClass(target, className)\n    {\n        if (!hasClass(target, className))\n            target.className += ' ' + className;\n    };\n\n    /**\n     * Removes CSS class name from the target DOM element.\n     * @param {DOMElement} target Target DOM element.\n     * @param {String} className CSS class to remove.\n     */\n    function removeClass(target, className)\n    {\n        target.className = target.className.replace(className, '');\n    };\n\n    /**\n     * Converts the source to array object. Mostly used for function arguments and\n     * lists returned by getElementsByTagName() which aren't Array objects.\n     * @param {List} source Source list.\n     * @return {Array} Returns array.\n     */\n    function toArray(source)\n    {\n        var result = [];\n\n        for (var i = 0; i < source.length; i++)\n            result.push(source[i]);\n\n        return result;\n    };\n\n    /**\n     * Splits block of text into lines.\n     * @param {String} block Block of text.\n     * @return {Array} Returns array of lines.\n     */\n    function splitLines(block)\n    {\n        return block.split(/\\r?\\n/);\n    }\n\n    /**\n     * Generates HTML ID for the highlighter.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {String} Returns HTML ID.\n     */\n    function getHighlighterId(id)\n    {\n        var prefix = 'highlighter_';\n        return id.indexOf(prefix) == 0 ? id : prefix + id;\n    };\n\n    /**\n     * Finds Highlighter instance by ID.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {Highlighter} Returns instance of the highlighter.\n     */\n    function getHighlighterById(id)\n    {\n        return sh.vars.highlighters[getHighlighterId(id)];\n    };\n\n    /**\n     * Finds highlighter's DIV container.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {Element} Returns highlighter's DIV element.\n     */\n    function getHighlighterDivById(id)\n    {\n        return document.getElementById(getHighlighterId(id));\n    };\n\n    /**\n     * Stores highlighter so that getHighlighterById() can do its thing. Each\n     * highlighter must call this method to preserve itself.\n     * @param {Highilghter} highlighter Highlighter instance.\n     */\n    function storeHighlighter(highlighter)\n    {\n        sh.vars.highlighters[getHighlighterId(highlighter.id)] = highlighter;\n    };\n\n    /**\n     * Looks for a child or parent node which has specified classname.\n     * Equivalent to jQuery's $(container).find(\".className\")\n     * @param {Element} target Target element.\n     * @param {String} search Class name or node name to look for.\n     * @param {Boolean} reverse If set to true, will go up the node tree instead of down.\n     * @return {Element} Returns found child or parent element on null.\n     */\n    function findElement(target, search, reverse /* optional */)\n    {\n        if (target == null)\n            return null;\n\n        var nodes\t\t\t= reverse != true ? target.childNodes : [ target.parentNode ],\n            propertyToFind\t= { '#' : 'id', '.' : 'className' }[search.substr(0, 1)] || 'nodeName',\n            expectedValue,\n            found\n            ;\n\n        expectedValue = propertyToFind != 'nodeName'\n            ? search.substr(1)\n            : search.toUpperCase()\n        ;\n\n        // main return of the found node\n        if ((target[propertyToFind] || '').indexOf(expectedValue) != -1)\n            return target;\n\n        for (var i = 0; nodes && i < nodes.length && found == null; i++)\n            found = findElement(nodes[i], search, reverse);\n\n        return found;\n    };\n\n    /**\n     * Looks for a parent node which has specified classname.\n     * This is an alias to <code>findElement(container, className, true)</code>.\n     * @param {Element} target Target element.\n     * @param {String} className Class name to look for.\n     * @return {Element} Returns found parent element on null.\n     */\n    function findParentElement(target, className)\n    {\n        return findElement(target, className, true);\n    };\n\n    /**\n     * Finds an index of element in the array.\n     * @ignore\n     * @param {Object} searchElement\n     * @param {Number} fromIndex\n     * @return {Number} Returns index of element if found; -1 otherwise.\n     */\n    function indexOf(array, searchElement, fromIndex)\n    {\n        fromIndex = Math.max(fromIndex || 0, 0);\n\n        for (var i = fromIndex; i < array.length; i++)\n            if(array[i] == searchElement)\n                return i;\n\n        return -1;\n    };\n\n    /**\n     * Generates a unique element ID.\n     */\n    function guid(prefix)\n    {\n        return (prefix || '') + Math.round(Math.random() * 1000000).toString();\n    };\n\n    /**\n     * Merges two objects. Values from obj2 override values in obj1.\n     * Function is NOT recursive and works only for one dimensional objects.\n     * @param {Object} obj1 First object.\n     * @param {Object} obj2 Second object.\n     * @return {Object} Returns combination of both objects.\n     */\n    function merge(obj1, obj2)\n    {\n        var result = {}, name;\n\n        for (name in obj1)\n            result[name] = obj1[name];\n\n        for (name in obj2)\n            result[name] = obj2[name];\n\n        return result;\n    };\n\n    /**\n     * Attempts to convert string to boolean.\n     * @param {String} value Input string.\n     * @return {Boolean} Returns true if input was \"true\", false if input was \"false\" and value otherwise.\n     */\n    function toBoolean(value)\n    {\n        var result = { \"true\" : true, \"false\" : false }[value];\n        return result == null ? value : result;\n    };\n\n    /**\n     * Opens up a centered popup window.\n     * @param {String} url\t\tURL to open in the window.\n     * @param {String} name\t\tPopup name.\n     * @param {int} width\t\tPopup width.\n     * @param {int} height\t\tPopup height.\n     * @param {String} options\twindow.open() options.\n     * @return {Window}\t\t\tReturns window instance.\n     */\n    function popup(url, name, width, height, options)\n    {\n        var x = (screen.width - width) / 2,\n            y = (screen.height - height) / 2\n            ;\n\n        options +=\t', left=' + x +\n            ', top=' + y +\n            ', width=' + width +\n            ', height=' + height\n        ;\n        options = options.replace(/^,/, '');\n\n        var win = window.open(url, name, options);\n        win.focus();\n        return win;\n    };\n\n    /**\n     * Adds event handler to the target object.\n     * @param {Object} obj\t\tTarget object.\n     * @param {String} type\t\tName of the event.\n     * @param {Function} func\tHandling function.\n     */\n    function attachEvent(obj, type, func, scope)\n    {\n        function handler(e)\n        {\n            e = e || window.event;\n\n            if (!e.target)\n            {\n                e.target = e.srcElement;\n                e.preventDefault = function()\n                {\n                    this.returnValue = false;\n                };\n            }\n\n            func.call(scope || window, e);\n        };\n\n        if (obj.attachEvent)\n        {\n            obj.attachEvent('on' + type, handler);\n        }\n        else\n        {\n            obj.addEventListener(type, handler, false);\n        }\n    };\n\n    /**\n     * Displays an alert.\n     * @param {String} str String to display.\n     */\n    function alert(str)\n    {\n        window.alert(sh.config.strings.alert + str);\n    };\n\n    /**\n     * Finds a brush by its alias.\n     *\n     * @param {String} alias\t\tBrush alias.\n     * @param {Boolean} showAlert\tSuppresses the alert if false.\n     * @return {Brush}\t\t\t\tReturns bursh constructor if found, null otherwise.\n     */\n    function findBrush(alias, showAlert)\n    {\n        var brushes = sh.vars.discoveredBrushes,\n            result = null\n            ;\n\n        if (brushes == null)\n        {\n            brushes = {};\n\n            // Find all brushes\n            for (var brush in sh.brushes)\n            {\n                var info = sh.brushes[brush],\n                    aliases = info.aliases\n                    ;\n\n                if (aliases == null)\n                    continue;\n\n                // keep the brush name\n                info.brushName = brush.toLowerCase();\n\n                for (var i = 0; i < aliases.length; i++)\n                    brushes[aliases[i]] = brush;\n            }\n\n            sh.vars.discoveredBrushes = brushes;\n        }\n\n        result = sh.brushes[brushes[alias]];\n\n        if (result == null && showAlert)\n            alert(sh.config.strings.noBrush + alias);\n\n        return result;\n    };\n\n    /**\n     * Executes a callback on each line and replaces each line with result from the callback.\n     * @param {Object} str\t\t\tInput string.\n     * @param {Object} callback\t\tCallback function taking one string argument and returning a string.\n     */\n    function eachLine(str, callback)\n    {\n        var lines = splitLines(str);\n\n        for (var i = 0; i < lines.length; i++)\n            lines[i] = callback(lines[i], i);\n\n        // include \\r to enable copy-paste on windows (ie8) without getting everything on one line\n        return lines.join('\\r\\n');\n    };\n\n    /**\n     * This is a special trim which only removes first and last empty lines\n     * and doesn't affect valid leading space on the first line.\n     *\n     * @param {String} str   Input string\n     * @return {String}      Returns string without empty first and last lines.\n     */\n    function trimFirstAndLastLines(str)\n    {\n        return str.replace(/^[ ]*[\\n]+|[\\n]*[ ]*$/g, '');\n    };\n\n    /**\n     * Parses key/value pairs into hash object.\n     *\n     * Understands the following formats:\n     * - name: word;\n     * - name: [word, word];\n     * - name: \"string\";\n     * - name: 'string';\n     *\n     * For example:\n     *   name1: value; name2: [value, value]; name3: 'value'\n     *\n     * @param {String} str    Input string.\n     * @return {Object}       Returns deserialized object.\n     */\n    function parseParams(str)\n    {\n        var match,\n            result = {},\n            arrayRegex = new XRegExp(\"^\\\\[(?<values>(.*?))\\\\]$\"),\n            regex = new XRegExp(\n                \"(?<name>[\\\\w-]+)\" +\n                    \"\\\\s*:\\\\s*\" +\n                    \"(?<value>\" +\n                    \"[\\\\w-%#]+|\" +\t\t// word\n                    \"\\\\[.*?\\\\]|\" +\t\t// [] array\n                    '\".*?\"|' +\t\t\t// \"\" string\n                    \"'.*?'\" +\t\t\t// '' string\n                    \")\\\\s*;?\",\n                \"g\"\n            )\n            ;\n\n        while ((match = regex.exec(str)) != null)\n        {\n            var value = match.value\n                    .replace(/^['\"]|['\"]$/g, '') // strip quotes from end of strings\n                ;\n\n            // try to parse array value\n            if (value != null && arrayRegex.test(value))\n            {\n                var m = arrayRegex.exec(value);\n                value = m.values.length > 0 ? m.values.split(/\\s*,\\s*/) : [];\n            }\n\n            result[match.name] = value;\n        }\n\n        return result;\n    };\n\n    /**\n     * Wraps each line of the string into <code/> tag with given style applied to it.\n     *\n     * @param {String} str   Input string.\n     * @param {String} css   Style name to apply to the string.\n     * @return {String}      Returns input string with each line surrounded by <span/> tag.\n     */\n    function wrapLinesWithCode(str, css)\n    {\n        if (str == null || str.length == 0 || str == '\\n')\n            return str;\n\n        str = str.replace(/</g, '&lt;');\n\n        // Replace two or more sequential spaces with &nbsp; leaving last space untouched.\n        str = str.replace(/ {2,}/g, function(m)\n        {\n            var spaces = '';\n\n            for (var i = 0; i < m.length - 1; i++)\n                spaces += sh.config.space;\n\n            return spaces + ' ';\n        });\n\n        // Split each line and apply <span class=\"...\">...</span> to them so that\n        // leading spaces aren't included.\n        if (css != null)\n            str = eachLine(str, function(line)\n            {\n                if (line.length == 0)\n                    return '';\n\n                var spaces = '';\n\n                line = line.replace(/^(&nbsp;| )+/, function(s)\n                {\n                    spaces = s;\n                    return '';\n                });\n\n                if (line.length == 0)\n                    return spaces;\n\n                return spaces + '<code class=\"' + css + '\">' + line + '</code>';\n            });\n\n        return str;\n    };\n\n    /**\n     * Pads number with zeros until it's length is the same as given length.\n     *\n     * @param {Number} number\tNumber to pad.\n     * @param {Number} length\tMax string length with.\n     * @return {String}\t\t\tReturns a string padded with proper amount of '0'.\n     */\n    function padNumber(number, length)\n    {\n        var result = number.toString();\n\n        while (result.length < length)\n            result = '0' + result;\n\n        return result;\n    };\n\n    /**\n     * Replaces tabs with spaces.\n     *\n     * @param {String} code\t\tSource code.\n     * @param {Number} tabSize\tSize of the tab.\n     * @return {String}\t\t\tReturns code with all tabs replaces by spaces.\n     */\n    function processTabs(code, tabSize)\n    {\n        var tab = '';\n\n        for (var i = 0; i < tabSize; i++)\n            tab += ' ';\n\n        return code.replace(/\\t/g, tab);\n    };\n\n    /**\n     * Replaces tabs with smart spaces.\n     *\n     * @param {String} code    Code to fix the tabs in.\n     * @param {Number} tabSize Number of spaces in a column.\n     * @return {String}        Returns code with all tabs replaces with roper amount of spaces.\n     */\n    function processSmartTabs(code, tabSize)\n    {\n        var lines = splitLines(code),\n            tab = '\\t',\n            spaces = ''\n            ;\n\n        // Create a string with 1000 spaces to copy spaces from...\n        // It's assumed that there would be no indentation longer than that.\n        for (var i = 0; i < 50; i++)\n            spaces += '                    '; // 20 spaces * 50\n\n        // This function inserts specified amount of spaces in the string\n        // where a tab is while removing that given tab.\n        function insertSpaces(line, pos, count)\n        {\n            return line.substr(0, pos)\n                + spaces.substr(0, count)\n                + line.substr(pos + 1, line.length) // pos + 1 will get rid of the tab\n                ;\n        };\n\n        // Go through all the lines and do the 'smart tabs' magic.\n        code = eachLine(code, function(line)\n        {\n            if (line.indexOf(tab) == -1)\n                return line;\n\n            var pos = 0;\n\n            while ((pos = line.indexOf(tab)) != -1)\n            {\n                // This is pretty much all there is to the 'smart tabs' logic.\n                // Based on the position within the line and size of a tab,\n                // calculate the amount of spaces we need to insert.\n                var spaces = tabSize - pos % tabSize;\n                line = insertSpaces(line, pos, spaces);\n            }\n\n            return line;\n        });\n\n        return code;\n    };\n\n    /**\n     * Performs various string fixes based on configuration.\n     */\n    function fixInputString(str)\n    {\n        var br = /<br\\s*\\/?>|&lt;br\\s*\\/?&gt;/gi;\n\n        if (sh.config.bloggerMode == true)\n            str = str.replace(br, '\\n');\n\n        if (sh.config.stripBrs == true)\n            str = str.replace(br, '');\n\n        return str;\n    };\n\n    /**\n     * Removes all white space at the begining and end of a string.\n     *\n     * @param {String} str   String to trim.\n     * @return {String}      Returns string without leading and following white space characters.\n     */\n    function trim(str)\n    {\n        return str.replace(/^\\s+|\\s+$/g, '');\n    };\n\n    /**\n     * Unindents a block of text by the lowest common indent amount.\n     * @param {String} str   Text to unindent.\n     * @return {String}      Returns unindented text block.\n     */\n    function unindent(str)\n    {\n        var lines = splitLines(fixInputString(str)),\n            indents = new Array(),\n            regex = /^\\s*/,\n            min = 1000\n            ;\n\n        // go through every line and check for common number of indents\n        for (var i = 0; i < lines.length && min > 0; i++)\n        {\n            var line = lines[i];\n\n            if (trim(line).length == 0)\n                continue;\n\n            var matches = regex.exec(line);\n\n            // In the event that just one line doesn't have leading white space\n            // we can't unindent anything, so bail completely.\n            if (matches == null)\n                return str;\n\n            min = Math.min(matches[0].length, min);\n        }\n\n        // trim minimum common number of white space from the begining of every line\n        if (min > 0)\n            for (var i = 0; i < lines.length; i++)\n                lines[i] = lines[i].substr(min);\n\n        return lines.join('\\n');\n    };\n\n    /**\n     * Callback method for Array.sort() which sorts matches by\n     * index position and then by length.\n     *\n     * @param {Match} m1\tLeft object.\n     * @param {Match} m2    Right object.\n     * @return {Number}     Returns -1, 0 or -1 as a comparison result.\n     */\n    function matchesSortCallback(m1, m2)\n    {\n        // sort matches by index first\n        if(m1.index < m2.index)\n            return -1;\n        else if(m1.index > m2.index)\n            return 1;\n        else\n        {\n            // if index is the same, sort by length\n            if(m1.length < m2.length)\n                return -1;\n            else if(m1.length > m2.length)\n                return 1;\n        }\n\n        return 0;\n    };\n\n    /**\n     * Executes given regular expression on provided code and returns all\n     * matches that are found.\n     *\n     * @param {String} code    Code to execute regular expression on.\n     * @param {Object} regex   Regular expression item info from <code>regexList</code> collection.\n     * @return {Array}         Returns a list of Match objects.\n     */\n    function getMatches(code, regexInfo)\n    {\n        function defaultAdd(match, regexInfo)\n        {\n            return match[0];\n        };\n\n        var index = 0,\n            match = null,\n            matches = [],\n            func = regexInfo.func ? regexInfo.func : defaultAdd\n            ;\n\n        while((match = regexInfo.regex.exec(code)) != null)\n        {\n            var resultMatch = func(match, regexInfo);\n\n            if (typeof(resultMatch) == 'string')\n                resultMatch = [new sh.Match(resultMatch, match.index, regexInfo.css)];\n\n            matches = matches.concat(resultMatch);\n        }\n\n        return matches;\n    };\n\n    /**\n     * Turns all URLs in the code into <a/> tags.\n     * @param {String} code Input code.\n     * @return {String} Returns code with </a> tags.\n     */\n    function processUrls(code)\n    {\n        var gt = /(.*)((&gt;|&lt;).*)/;\n\n        return code.replace(sh.regexLib.url, function(m)\n        {\n            var suffix = '',\n                match = null\n                ;\n\n            // We include &lt; and &gt; in the URL for the common cases like <http://google.com>\n            // The problem is that they get transformed into &lt;http://google.com&gt;\n            // Where as &gt; easily looks like part of the URL string.\n\n            if (match = gt.exec(m))\n            {\n                m = match[1];\n                suffix = match[2];\n            }\n\n            return '<a href=\"' + m + '\">' + m + '</a>' + suffix;\n        });\n    };\n\n    /**\n     * Finds all <SCRIPT TYPE=\"syntaxhighlighter\" /> elementss.\n     * @return {Array} Returns array of all found SyntaxHighlighter tags.\n     */\n    function getSyntaxHighlighterScriptTags()\n    {\n        var tags = document.getElementsByTagName('script'),\n            result = []\n            ;\n\n        for (var i = 0; i < tags.length; i++)\n            if (tags[i].type == 'syntaxhighlighter')\n                result.push(tags[i]);\n\n        return result;\n    };\n\n    /**\n     * Strips <![CDATA[]]> from <SCRIPT /> content because it should be used\n     * there in most cases for XHTML compliance.\n     * @param {String} original\tInput code.\n     * @return {String} Returns code without leading <![CDATA[]]> tags.\n     */\n    function stripCData(original)\n    {\n        var left = '<![CDATA[',\n            right = ']]>',\n        // for some reason IE inserts some leading blanks here\n            copy = trim(original),\n            changed = false,\n            leftLength = left.length,\n            rightLength = right.length\n            ;\n\n        if (copy.indexOf(left) == 0)\n        {\n            copy = copy.substring(leftLength);\n            changed = true;\n        }\n\n        var copyLength = copy.length;\n\n        if (copy.indexOf(right) == copyLength - rightLength)\n        {\n            copy = copy.substring(0, copyLength - rightLength);\n            changed = true;\n        }\n\n        return changed ? copy : original;\n    };\n\n\n    /**\n     * Quick code mouse double click handler.\n     */\n    function quickCodeHandler(e)\n    {\n        var target = e.target,\n            highlighterDiv = findParentElement(target, '.syntaxhighlighter'),\n            container = findParentElement(target, '.container'),\n            textarea = document.createElement('textarea'),\n            highlighter\n            ;\n\n        if (!container || !highlighterDiv || findElement(container, 'textarea'))\n            return;\n\n        highlighter = getHighlighterById(highlighterDiv.id);\n\n        // add source class name\n        addClass(highlighterDiv, 'source');\n\n        // Have to go over each line and grab it's text, can't just do it on the\n        // container because Firefox loses all \\n where as Webkit doesn't.\n        var lines = container.childNodes,\n            code = []\n            ;\n\n        for (var i = 0; i < lines.length; i++)\n            code.push(lines[i].innerText || lines[i].textContent);\n\n        // using \\r instead of \\r or \\r\\n makes this work equally well on IE, FF and Webkit\n        code = code.join('\\r');\n\n        // For Webkit browsers, replace nbsp with a breaking space\n        code = code.replace(/\\u00a0/g, \" \");\n\n        // inject <textarea/> tag\n        textarea.appendChild(document.createTextNode(code));\n        container.appendChild(textarea);\n\n        // preselect all text\n        textarea.focus();\n        textarea.select();\n\n        // set up handler for lost focus\n        attachEvent(textarea, 'blur', function(e)\n        {\n            textarea.parentNode.removeChild(textarea);\n            removeClass(highlighterDiv, 'source');\n        });\n    };\n\n    /**\n     * Match object.\n     */\n    sh.Match = function(value, index, css)\n    {\n        this.value = value;\n        this.index = index;\n        this.length = value.length;\n        this.css = css;\n        this.brushName = null;\n    };\n\n    sh.Match.prototype.toString = function()\n    {\n        return this.value;\n    };\n\n    /**\n     * Simulates HTML code with a scripting language embedded.\n     *\n     * @param {String} scriptBrushName Brush name of the scripting language.\n     */\n    sh.HtmlScript = function(scriptBrushName)\n    {\n        var brushClass = findBrush(scriptBrushName),\n            scriptBrush,\n            xmlBrush = new sh.brushes.Xml(),\n            bracketsRegex = null,\n            ref = this,\n            methodsToExpose = 'getDiv getHtml init'.split(' ')\n            ;\n\n        if (brushClass == null)\n            return;\n\n        scriptBrush = new brushClass();\n\n        for(var i = 0; i < methodsToExpose.length; i++)\n            // make a closure so we don't lose the name after i changes\n            (function() {\n                var name = methodsToExpose[i];\n\n                ref[name] = function()\n                {\n                    return xmlBrush[name].apply(xmlBrush, arguments);\n                };\n            })();\n\n        if (scriptBrush.htmlScript == null)\n        {\n            alert(sh.config.strings.brushNotHtmlScript + scriptBrushName);\n            return;\n        }\n\n        xmlBrush.regexList.push(\n            { regex: scriptBrush.htmlScript.code, func: process }\n        );\n\n        function offsetMatches(matches, offset)\n        {\n            for (var j = 0; j < matches.length; j++)\n                matches[j].index += offset;\n        }\n\n        function process(match, info)\n        {\n            var code = match.code,\n                matches = [],\n                regexList = scriptBrush.regexList,\n                offset = match.index + match.left.length,\n                htmlScript = scriptBrush.htmlScript,\n                result\n                ;\n\n            // add all matches from the code\n            for (var i = 0; i < regexList.length; i++)\n            {\n                result = getMatches(code, regexList[i]);\n                offsetMatches(result, offset);\n                matches = matches.concat(result);\n            }\n\n            // add left script bracket\n            if (htmlScript.left != null && match.left != null)\n            {\n                result = getMatches(match.left, htmlScript.left);\n                offsetMatches(result, match.index);\n                matches = matches.concat(result);\n            }\n\n            // add right script bracket\n            if (htmlScript.right != null && match.right != null)\n            {\n                result = getMatches(match.right, htmlScript.right);\n                offsetMatches(result, match.index + match[0].lastIndexOf(match.right));\n                matches = matches.concat(result);\n            }\n\n            for (var j = 0; j < matches.length; j++)\n                matches[j].brushName = brushClass.brushName;\n\n            return matches;\n        }\n    };\n\n    /**\n     * Main Highlither class.\n     * @constructor\n     */\n    sh.Highlighter = function()\n    {\n        // not putting any code in here because of the prototype inheritance\n    };\n\n    sh.Highlighter.prototype = {\n        /**\n         * Returns value of the parameter passed to the highlighter.\n         * @param {String} name\t\t\t\tName of the parameter.\n         * @param {Object} defaultValue\t\tDefault value.\n         * @return {Object}\t\t\t\t\tReturns found value or default value otherwise.\n         */\n        getParam: function(name, defaultValue)\n        {\n            var result = this.params[name];\n            return toBoolean(result == null ? defaultValue : result);\n        },\n\n        /**\n         * Shortcut to document.createElement().\n         * @param {String} name\t\tName of the element to create (DIV, A, etc).\n         * @return {HTMLElement}\tReturns new HTML element.\n         */\n        create: function(name)\n        {\n            return document.createElement(name);\n        },\n\n        /**\n         * Applies all regular expression to the code and stores all found\n         * matches in the `this.matches` array.\n         * @param {Array} regexList\t\tList of regular expressions.\n         * @param {String} code\t\t\tSource code.\n         * @return {Array}\t\t\t\tReturns list of matches.\n         */\n        findMatches: function(regexList, code)\n        {\n            var result = [];\n\n            if (regexList != null)\n                for (var i = 0; i < regexList.length; i++)\n                    // BUG: length returns len+1 for array if methods added to prototype chain (oising@gmail.com)\n                    if (typeof (regexList[i]) == \"object\")\n                        result = result.concat(getMatches(code, regexList[i]));\n\n            // sort and remove nested the matches\n            return this.removeNestedMatches(result.sort(matchesSortCallback));\n        },\n\n        /**\n         * Checks to see if any of the matches are inside of other matches.\n         * This process would get rid of highligted strings inside comments,\n         * keywords inside strings and so on.\n         */\n        removeNestedMatches: function(matches)\n        {\n            // Optimized by Jose Prado (http://joseprado.com)\n            for (var i = 0; i < matches.length; i++)\n            {\n                if (matches[i] === null)\n                    continue;\n\n                var itemI = matches[i],\n                    itemIEndPos = itemI.index + itemI.length\n                    ;\n\n                for (var j = i + 1; j < matches.length && matches[i] !== null; j++)\n                {\n                    var itemJ = matches[j];\n\n                    if (itemJ === null)\n                        continue;\n                    else if (itemJ.index > itemIEndPos)\n                        break;\n                    else if (itemJ.index == itemI.index && itemJ.length > itemI.length)\n                        matches[i] = null;\n                    else if (itemJ.index >= itemI.index && itemJ.index < itemIEndPos)\n                        matches[j] = null;\n                }\n            }\n\n            return matches;\n        },\n\n        /**\n         * Creates an array containing integer line numbers starting from the 'first-line' param.\n         * @return {Array} Returns array of integers.\n         */\n        figureOutLineNumbers: function(code)\n        {\n            var lines = [],\n                firstLine = parseInt(this.getParam('first-line'))\n                ;\n\n            eachLine(code, function(line, index)\n            {\n                lines.push(index + firstLine);\n            });\n\n            return lines;\n        },\n\n        /**\n         * Determines if specified line number is in the highlighted list.\n         */\n        isLineHighlighted: function(lineNumber)\n        {\n            var list = this.getParam('highlight', []);\n\n            if (typeof(list) != 'object' && list.push == null)\n                list = [ list ];\n\n            return indexOf(list, lineNumber.toString()) != -1;\n        },\n\n        /**\n         * Generates HTML markup for a single line of code while determining alternating line style.\n         * @param {Integer} lineNumber\tLine number.\n         * @param {String} code Line\tHTML markup.\n         * @return {String}\t\t\t\tReturns HTML markup.\n         */\n        getLineHtml: function(lineIndex, lineNumber, code)\n        {\n            var classes = [\n                'line',\n                'number' + lineNumber,\n                'index' + lineIndex,\n                'alt' + (lineNumber % 2 == 0 ? 1 : 2).toString()\n            ];\n\n            if (this.isLineHighlighted(lineNumber))\n                classes.push('highlighted');\n\n            if (lineNumber == 0)\n                classes.push('break');\n\n            return '<div class=\"' + classes.join(' ') + '\">' + code + '</div>';\n        },\n\n        /**\n         * Generates HTML markup for line number column.\n         * @param {String} code\t\t\tComplete code HTML markup.\n         * @param {Array} lineNumbers\tCalculated line numbers.\n         * @return {String}\t\t\t\tReturns HTML markup.\n         */\n        getLineNumbersHtml: function(code, lineNumbers)\n        {\n            var html = '',\n                count = splitLines(code).length,\n                firstLine = parseInt(this.getParam('first-line')),\n                pad = this.getParam('pad-line-numbers')\n                ;\n\n            if (pad == true)\n                pad = (firstLine + count - 1).toString().length;\n            else if (isNaN(pad) == true)\n                pad = 0;\n\n            for (var i = 0; i < count; i++)\n            {\n                var lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i,\n                    code = lineNumber == 0 ? sh.config.space : padNumber(lineNumber, pad)\n                    ;\n\n                html += this.getLineHtml(i, lineNumber, code);\n            }\n\n            return html;\n        },\n\n        /**\n         * Splits block of text into individual DIV lines.\n         * @param {String} code\t\t\tCode to highlight.\n         * @param {Array} lineNumbers\tCalculated line numbers.\n         * @return {String}\t\t\t\tReturns highlighted code in HTML form.\n         */\n        getCodeLinesHtml: function(html, lineNumbers)\n        {\n            html = trim(html);\n\n            var lines = splitLines(html),\n                padLength = this.getParam('pad-line-numbers'),\n                firstLine = parseInt(this.getParam('first-line')),\n                html = '',\n                brushName = this.getParam('brush')\n                ;\n\n            for (var i = 0; i < lines.length; i++)\n            {\n                var line = lines[i],\n                    indent = /^(&nbsp;|\\s)+/.exec(line),\n                    spaces = null,\n                    lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i;\n                ;\n\n                if (indent != null)\n                {\n                    spaces = indent[0].toString();\n                    line = line.substr(spaces.length);\n                    spaces = spaces.replace(' ', sh.config.space);\n                }\n\n                line = trim(line);\n\n                if (line.length == 0)\n                    line = sh.config.space;\n\n                html += this.getLineHtml(\n                    i,\n                    lineNumber,\n                    (spaces != null ? '<code class=\"' + brushName + ' spaces\">' + spaces + '</code>' : '') + line\n                );\n            }\n\n            return html;\n        },\n\n        /**\n         * Returns HTML for the table title or empty string if title is null.\n         */\n        getTitleHtml: function(title)\n        {\n            return title ? '<caption>' + title + '</caption>' : '';\n        },\n\n        /**\n         * Finds all matches in the source code.\n         * @param {String} code\t\tSource code to process matches in.\n         * @param {Array} matches\tDiscovered regex matches.\n         * @return {String} Returns formatted HTML with processed mathes.\n         */\n        getMatchesHtml: function(code, matches)\n        {\n            var pos = 0,\n                result = '',\n                brushName = this.getParam('brush', '')\n                ;\n\n            function getBrushNameCss(match)\n            {\n                var result = match ? (match.brushName || brushName) : brushName;\n                return result ? result + ' ' : '';\n            };\n\n            // Finally, go through the final list of matches and pull the all\n            // together adding everything in between that isn't a match.\n            for (var i = 0; i < matches.length; i++)\n            {\n                var match = matches[i],\n                    matchBrushName\n                    ;\n\n                if (match === null || match.length === 0)\n                    continue;\n\n                matchBrushName = getBrushNameCss(match);\n\n                result += wrapLinesWithCode(code.substr(pos, match.index - pos), matchBrushName + 'plain')\n                    + wrapLinesWithCode(match.value, matchBrushName + match.css)\n                ;\n\n                pos = match.index + match.length + (match.offset || 0);\n            }\n\n            // don't forget to add whatever's remaining in the string\n            result += wrapLinesWithCode(code.substr(pos), getBrushNameCss() + 'plain');\n\n            return result;\n        },\n\n        /**\n         * Generates HTML markup for the whole syntax highlighter.\n         * @param {String} code Source code.\n         * @return {String} Returns HTML markup.\n         */\n        getHtml: function(code)\n        {\n            var html = '',\n                classes = [ 'syntaxhighlighter' ],\n                tabSize,\n                matches,\n                lineNumbers\n                ;\n\n            // process light mode\n            if (this.getParam('light') == true)\n                this.params.toolbar = this.params.gutter = false;\n\n            className = 'syntaxhighlighter';\n\n            if (this.getParam('collapse') == true)\n                classes.push('collapsed');\n\n            if ((gutter = this.getParam('gutter')) == false)\n                classes.push('nogutter');\n\n            // add custom user style name\n            classes.push(this.getParam('class-name'));\n\n            // add brush alias to the class name for custom CSS\n            classes.push(this.getParam('brush'));\n\n            code = trimFirstAndLastLines(code)\n                .replace(/\\r/g, ' ') // IE lets these buggers through\n            ;\n\n            tabSize = this.getParam('tab-size');\n\n            // replace tabs with spaces\n            code = this.getParam('smart-tabs') == true\n                ? processSmartTabs(code, tabSize)\n                : processTabs(code, tabSize)\n            ;\n\n            // unindent code by the common indentation\n            if (this.getParam('unindent'))\n                code = unindent(code);\n\n            if (gutter)\n                lineNumbers = this.figureOutLineNumbers(code);\n\n            // find matches in the code using brushes regex list\n            matches = this.findMatches(this.regexList, code);\n            // processes found matches into the html\n            html = this.getMatchesHtml(code, matches);\n            // finally, split all lines so that they wrap well\n            html = this.getCodeLinesHtml(html, lineNumbers);\n\n            // finally, process the links\n            if (this.getParam('auto-links'))\n                html = processUrls(html);\n\n            if (typeof(navigator) != 'undefined' && navigator.userAgent && navigator.userAgent.match(/MSIE/))\n                classes.push('ie');\n\n            html =\n                '<div id=\"' + getHighlighterId(this.id) + '\" class=\"' + classes.join(' ') + '\">'\n                    + (this.getParam('toolbar') ? sh.toolbar.getHtml(this) : '')\n                    + '<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">'\n                    + this.getTitleHtml(this.getParam('title'))\n                    + '<tbody>'\n                    + '<tr>'\n                    + (gutter ? '<td class=\"gutter\">' + this.getLineNumbersHtml(code) + '</td>' : '')\n                    + '<td class=\"code\">'\n                    + '<div class=\"container\">'\n                    + html\n                    + '</div>'\n                    + '</td>'\n                    + '</tr>'\n                    + '</tbody>'\n                    + '</table>'\n                    + '</div>'\n            ;\n\n            return html;\n        },\n\n        /**\n         * Highlights the code and returns complete HTML.\n         * @param {String} code     Code to highlight.\n         * @return {Element}        Returns container DIV element with all markup.\n         */\n        getDiv: function(code)\n        {\n            if (code === null)\n                code = '';\n\n            this.code = code;\n\n            var div = this.create('div');\n\n            // create main HTML\n            div.innerHTML = this.getHtml(code);\n\n            // set up click handlers\n            if (this.getParam('toolbar'))\n                attachEvent(findElement(div, '.toolbar'), 'click', sh.toolbar.handler);\n\n            if (this.getParam('quick-code'))\n                attachEvent(findElement(div, '.code'), 'dblclick', quickCodeHandler);\n\n            return div;\n        },\n\n        /**\n         * Initializes the highlighter/brush.\n         *\n         * Constructor isn't used for initialization so that nothing executes during necessary\n         * `new SyntaxHighlighter.Highlighter()` call when setting up brush inheritence.\n         *\n         * @param {Hash} params Highlighter parameters.\n         */\n        init: function(params)\n        {\n            this.id = guid();\n\n            // register this instance in the highlighters list\n            storeHighlighter(this);\n\n            // local params take precedence over defaults\n            this.params = merge(sh.defaults, params || {})\n\n            // process light mode\n            if (this.getParam('light') == true)\n                this.params.toolbar = this.params.gutter = false;\n        },\n\n        /**\n         * Converts space separated list of keywords into a regular expression string.\n         * @param {String} str    Space separated keywords.\n         * @return {String}       Returns regular expression string.\n         */\n        getKeywords: function(str)\n        {\n            str = str\n                .replace(/^\\s+|\\s+$/g, '')\n                .replace(/\\s+/g, '|')\n            ;\n\n            return '\\\\b(?:' + str + ')\\\\b';\n        },\n\n        /**\n         * Makes a brush compatible with the `html-script` functionality.\n         * @param {Object} regexGroup Object containing `left` and `right` regular expressions.\n         */\n        forHtmlScript: function(regexGroup)\n        {\n            var regex = { 'end' : regexGroup.right.source };\n\n            if(regexGroup.eof)\n                regex.end = \"(?:(?:\" + regex.end + \")|$)\";\n\n            this.htmlScript = {\n                left : { regex: regexGroup.left, css: 'script' },\n                right : { regex: regexGroup.right, css: 'script' },\n                code : new XRegExp(\n                    \"(?<left>\" + regexGroup.left.source + \")\" +\n                        \"(?<code>.*?)\" +\n                        \"(?<right>\" + regex.end + \")\",\n                    \"sgi\"\n                )\n            };\n        }\n    }; // end of Highlighter\n\n    return sh;\n}(); // end of anonymous function\n\n// CommonJS\ntypeof(exports) != 'undefined' ? exports.SyntaxHighlighter = SyntaxHighlighter : null;\n\n;(function()\n{\n    // CommonJS\n    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n    function Brush()\n    {\n        // Created by Peter Atoria @ http://iAtoria.com\n\n        var inits \t =  'class interface function package';\n\n        var keywords =\t'-Infinity ...rest Array as AS3 Boolean break case catch const continue Date decodeURI ' +\n                'decodeURIComponent default delete do dynamic each else encodeURI encodeURIComponent escape ' +\n                'extends false final finally flash_proxy for get if implements import in include Infinity ' +\n                'instanceof int internal is isFinite isNaN isXMLName label namespace NaN native new null ' +\n                'Null Number Object object_proxy override parseFloat parseInt private protected public ' +\n                'return set static String super switch this throw true try typeof uint undefined unescape ' +\n                'use void while with'\n            ;\n\n        this.regexList = [\n            { regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t// one line comments\n            { regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t// multiline comments\n            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// double quoted strings\n            { regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// single quoted strings\n            { regex: /\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,\t\t\t\tcss: 'value' },\t\t\t// numbers\n            { regex: new RegExp(this.getKeywords(inits), 'gm'),\t\t\tcss: 'color3' },\t\t// initializations\n            { regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n            { regex: new RegExp('var', 'gm'),\t\t\t\t\t\t\tcss: 'variable' },\t\t// variable\n            { regex: new RegExp('trace', 'gm'),\t\t\t\t\t\t\tcss: 'color1' }\t\t\t// trace\n        ];\n\n        this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags);\n    };\n\n    Brush.prototype\t= new SyntaxHighlighter.Highlighter();\n    Brush.aliases\t= ['actionscript3', 'as3'];\n\n    SyntaxHighlighter.brushes.AS3 = Brush;\n\n    // CommonJS\n    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n\n;(function()\n{\n    // CommonJS\n    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n    function Brush()\n    {\n        // AppleScript brush by David Chambers\n        // http://davidchambersdesign.com/\n        var keywords   = 'after before beginning continue copy each end every from return get global in local named of set some that the then times to where whose with without';\n        var ordinals   = 'first second third fourth fifth sixth seventh eighth ninth tenth last front back middle';\n        var specials   = 'activate add alias AppleScript ask attachment boolean class constant delete duplicate empty exists false id integer list make message modal modified new no paragraph pi properties quit real record remove rest result reveal reverse run running save string true word yes';\n\n        this.regexList = [\n\n            { regex: /(--|#).*$/gm,\n                css: 'comments' },\n\n            { regex: /\\(\\*(?:[\\s\\S]*?\\(\\*[\\s\\S]*?\\*\\))*[\\s\\S]*?\\*\\)/gm, // support nested comments\n                css: 'comments' },\n\n            { regex: /\"[\\s\\S]*?\"/gm,\n                css: 'string' },\n\n            { regex: /(?:,|:|¬|'s\\b|\\(|\\)|\\{|\\}|«|\\b\\w*»)/g,\n                css: 'color1' },\n\n            { regex: /(-)?(\\d)+(\\.(\\d)?)?(E\\+(\\d)+)?/g, // numbers\n                css: 'color1' },\n\n            { regex: /(?:&(amp;|gt;|lt;)?|=|� |>|<|≥|>=|≤|<=|\\*|\\+|-|\\/|÷|\\^)/g,\n                css: 'color2' },\n\n            { regex: /\\b(?:and|as|div|mod|not|or|return(?!\\s&)(ing)?|equals|(is(n't| not)? )?equal( to)?|does(n't| not) equal|(is(n't| not)? )?(greater|less) than( or equal( to)?)?|(comes|does(n't| not) come) (after|before)|is(n't| not)?( in)? (back|front) of|is(n't| not)? behind|is(n't| not)?( (in|contained by))?|does(n't| not) contain|contain(s)?|(start|begin|end)(s)? with|((but|end) )?(consider|ignor)ing|prop(erty)?|(a )?ref(erence)?( to)?|repeat (until|while|with)|((end|exit) )?repeat|((else|end) )?if|else|(end )?(script|tell|try)|(on )?error|(put )?into|(of )?(it|me)|its|my|with (timeout( of)?|transaction)|end (timeout|transaction))\\b/g,\n                css: 'keyword' },\n\n            { regex: /\\b\\d+(st|nd|rd|th)\\b/g, // ordinals\n                css: 'keyword' },\n\n            { regex: /\\b(?:about|above|against|around|at|below|beneath|beside|between|by|(apart|aside) from|(instead|out) of|into|on(to)?|over|since|thr(ough|u)|under)\\b/g,\n                css: 'color3' },\n\n            { regex: /\\b(?:adding folder items to|after receiving|choose( ((remote )?application|color|folder|from list|URL))?|clipboard info|set the clipboard to|(the )?clipboard|entire contents|display(ing| (alert|dialog|mode))?|document( (edited|file|nib name))?|file( (name|type))?|(info )?for|giving up after|(name )?extension|quoted form|return(ed)?|second(?! item)(s)?|list (disks|folder)|text item(s| delimiters)?|(Unicode )?text|(disk )?item(s)?|((current|list) )?view|((container|key) )?window|with (data|icon( (caution|note|stop))?|parameter(s)?|prompt|properties|seed|title)|case|diacriticals|hyphens|numeric strings|punctuation|white space|folder creation|application(s( folder)?| (processes|scripts position|support))?|((desktop )?(pictures )?|(documents|downloads|favorites|home|keychain|library|movies|music|public|scripts|sites|system|users|utilities|workflows) )folder|desktop|Folder Action scripts|font(s| panel)?|help|internet plugins|modem scripts|(system )?preferences|printer descriptions|scripting (additions|components)|shared (documents|libraries)|startup (disk|items)|temporary items|trash|on server|in AppleTalk zone|((as|long|short) )?user name|user (ID|locale)|(with )?password|in (bundle( with identifier)?|directory)|(close|open for) access|read|write( permission)?|(g|s)et eof|using( delimiters)?|starting at|default (answer|button|color|country code|entr(y|ies)|identifiers|items|name|location|script editor)|hidden( answer)?|open(ed| (location|untitled))?|error (handling|reporting)|(do( shell)?|load|run|store) script|administrator privileges|altering line endings|get volume settings|(alert|boot|input|mount|output|set) volume|output muted|(fax|random )?number|round(ing)?|up|down|toward zero|to nearest|as taught in school|system (attribute|info)|((AppleScript( Studio)?|system) )?version|(home )?directory|(IPv4|primary Ethernet) address|CPU (type|speed)|physical memory|time (stamp|to GMT)|replacing|ASCII (character|number)|localized string|from table|offset|summarize|beep|delay|say|(empty|multiple) selections allowed|(of|preferred) type|invisibles|showing( package contents)?|editable URL|(File|FTP|News|Media|Web) [Ss]ervers|Telnet hosts|Directory services|Remote applications|waiting until completion|saving( (in|to))?|path (for|to( (((current|frontmost) )?application|resource))?)|POSIX (file|path)|(background|RGB) color|(OK|cancel) button name|cancel button|button(s)?|cubic ((centi)?met(re|er)s|yards|feet|inches)|square ((kilo)?met(re|er)s|miles|yards|feet)|(centi|kilo)?met(re|er)s|miles|yards|feet|inches|lit(re|er)s|gallons|quarts|(kilo)?grams|ounces|pounds|degrees (Celsius|Fahrenheit|Kelvin)|print( (dialog|settings))?|clos(e(able)?|ing)|(de)?miniaturized|miniaturizable|zoom(ed|able)|attribute run|action (method|property|title)|phone|email|((start|end)ing|home) page|((birth|creation|current|custom|modification) )?date|((((phonetic )?(first|last|middle))|computer|host|maiden|related) |nick)?name|aim|icq|jabber|msn|yahoo|address(es)?|save addressbook|should enable action|city|country( code)?|formatte(r|d address)|(palette )?label|state|street|zip|AIM [Hh]andle(s)?|my card|select(ion| all)?|unsaved|(alpha )?value|entr(y|ies)|group|(ICQ|Jabber|MSN) handle|person|people|company|department|icon image|job title|note|organization|suffix|vcard|url|copies|collating|pages (across|down)|request print time|target( printer)?|((GUI Scripting|Script menu) )?enabled|show Computer scripts|(de)?activated|awake from nib|became (key|main)|call method|of (class|object)|center|clicked toolbar item|closed|for document|exposed|(can )?hide|idle|keyboard (down|up)|event( (number|type))?|launch(ed)?|load (image|movie|nib|sound)|owner|log|mouse (down|dragged|entered|exited|moved|up)|move|column|localization|resource|script|register|drag (info|types)|resigned (active|key|main)|resiz(e(d)?|able)|right mouse (down|dragged|up)|scroll wheel|(at )?index|should (close|open( untitled)?|quit( after last window closed)?|zoom)|((proposed|screen) )?bounds|show(n)?|behind|in front of|size (mode|to fit)|update(d| toolbar item)?|was (hidden|miniaturized)|will (become active|close|finish launching|hide|miniaturize|move|open|quit|(resign )?active|((maximum|minimum|proposed) )?size|show|zoom)|bundle|data source|movie|pasteboard|sound|tool(bar| tip)|(color|open|save) panel|coordinate system|frontmost|main( (bundle|menu|window))?|((services|(excluded from )?windows) )?menu|((executable|frameworks|resource|scripts|shared (frameworks|support)) )?path|(selected item )?identifier|data|content(s| view)?|character(s)?|click count|(command|control|option|shift) key down|context|delta (x|y|z)|key( code)?|location|pressure|unmodified characters|types|(first )?responder|playing|(allowed|selectable) identifiers|allows customization|(auto saves )?configuration|visible|image( name)?|menu form representation|tag|user(-| )defaults|associated file name|(auto|needs) display|current field editor|floating|has (resize indicator|shadow)|hides when deactivated|level|minimized (image|title)|opaque|position|release when closed|sheet|title(d)?)\\b/g,\n                css: 'color3' },\n\n            { regex: new RegExp(this.getKeywords(specials), 'gm'), css: 'color3' },\n            { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' },\n            { regex: new RegExp(this.getKeywords(ordinals), 'gm'), css: 'keyword' }\n        ];\n    };\n\n    Brush.prototype = new SyntaxHighlighter.Highlighter();\n    Brush.aliases = ['applescript'];\n\n    SyntaxHighlighter.brushes.AppleScript = Brush;\n\n    // CommonJS\n    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'if fi then elif else for do done until while break continue case esac function return in eq ne ge le';\n\t\tvar commands =  'alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chroot' +\n\t\t\t\t\t\t'cksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df ' +\n\t\t\t\t\t\t'diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval ' +\n\t\t\t\t\t\t'exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format ' +\n\t\t\t\t\t\t'free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig ' +\n\t\t\t\t\t\t'import install join kill less let ln local locate logname logout look lpc lpr lprint ' +\n\t\t\t\t\t\t'lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools ' +\n\t\t\t\t\t\t'mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap ' +\n\t\t\t\t\t\t'printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice ' +\n\t\t\t\t\t\t'remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown ' +\n\t\t\t\t\t\t'sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time ' +\n\t\t\t\t\t\t'times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias ' +\n\t\t\t\t\t\t'uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir ' +\n\t\t\t\t\t\t'vi watch wc whereis which who whoami Wget xargs yes'\n\t\t\t\t\t\t;\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /^#!.*$/gm,\t\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor bold' },\n\t\t\t{ regex: /\\/[\\w-\\/]+/gm,\t\t\t\t\t\t\t\t\t\tcss: 'plain' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\t\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(this.getKeywords(commands), 'gm'),\t\t\tcss: 'functions' }\t\t// commands\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['bash', 'shell', 'sh'];\n\n\tSyntaxHighlighter.brushes.Bash = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Jen\n\t\t// http://www.jensbits.com/2009/05/14/coldfusion-brush-for-syntaxhighlighter-plus\n\t\n\t\tvar funcs\t=\t'Abs ACos AddSOAPRequestHeader AddSOAPResponseHeader AjaxLink AjaxOnLoad ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ' + \n\t\t\t\t\t\t'ArrayInsertAt ArrayIsDefined ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArraySet ArraySort ArraySum ArraySwap ArrayToList ' + \n\t\t\t\t\t\t'Asc ASin Atn BinaryDecode BinaryEncode BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN BitSHRN BitXor ' + \n\t\t\t\t\t\t'Ceiling CharsetDecode CharsetEncode Chr CJustify Compare CompareNoCase Cos CreateDate CreateDateTime CreateObject ' + \n\t\t\t\t\t\t'CreateODBCDate CreateODBCDateTime CreateODBCTime CreateTime CreateTimeSpan CreateUUID DateAdd DateCompare DateConvert ' + \n\t\t\t\t\t\t'DateDiff DateFormat DatePart Day DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear DE DecimalFormat DecrementValue ' + \n\t\t\t\t\t\t'Decrypt DecryptBinary DeleteClientVariable DeserializeJSON DirectoryExists DollarFormat DotNetToCFType Duplicate Encrypt ' + \n\t\t\t\t\t\t'EncryptBinary Evaluate Exp ExpandPath FileClose FileCopy FileDelete FileExists FileIsEOF FileMove FileOpen FileRead ' + \n\t\t\t\t\t\t'FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute FileSetLastModified FileWrite Find FindNoCase FindOneOf ' + \n\t\t\t\t\t\t'FirstDayOfMonth Fix FormatBaseN GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList GetBaseTemplatePath ' + \n\t\t\t\t\t\t'GetClientVariablesList GetComponentMetaData GetContextRoot GetCurrentTemplatePath GetDirectoryFromPath GetEncoding ' + \n\t\t\t\t\t\t'GetException GetFileFromPath GetFileInfo GetFunctionList GetGatewayHelper GetHttpRequestData GetHttpTimeString ' + \n\t\t\t\t\t\t'GetK2ServerDocCount GetK2ServerDocCountLimit GetLocale GetLocaleDisplayName GetLocalHostIP GetMetaData GetMetricData ' + \n\t\t\t\t\t\t'GetPageContext GetPrinterInfo GetProfileSections GetProfileString GetReadableImageFormats GetSOAPRequest GetSOAPRequestHeader ' + \n\t\t\t\t\t\t'GetSOAPResponse GetSOAPResponseHeader GetTempDirectory GetTempFile GetTemplatePath GetTickCount GetTimeZoneInfo GetToken ' + \n\t\t\t\t\t\t'GetUserRoles GetWriteableImageFormats Hash Hour HTMLCodeFormat HTMLEditFormat IIf ImageAddBorder ImageBlur ImageClearRect ' + \n\t\t\t\t\t\t'ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect ImageDrawCubicCurve ImageDrawLine ImageDrawLines ImageDrawOval ' + \n\t\t\t\t\t\t'ImageDrawPoint ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob ImageGetBufferedImage ' + \n\t\t\t\t\t\t'ImageGetEXIFTag ImageGetHeight ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay ImagePaste ' + \n\t\t\t\t\t\t'ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit ImageSetAntialiasing ImageSetBackgroundColor ' + \n\t\t\t\t\t\t'ImageSetDrawingColor ImageSetDrawingStroke ImageSetDrawingTransparency ImageSharpen ImageShear ImageShearDrawingAxis ImageTranslate ' + \n\t\t\t\t\t\t'ImageTranslateDrawingAxis ImageWrite ImageWriteBase64 ImageXORDrawingMode IncrementValue InputBaseN Insert Int IsArray IsBinary ' + \n\t\t\t\t\t\t'IsBoolean IsCustomFunction IsDate IsDDX IsDebugMode IsDefined IsImage IsImageFile IsInstanceOf IsJSON IsLeapYear IsLocalHost ' + \n\t\t\t\t\t\t'IsNumeric IsNumericDate IsObject IsPDFFile IsPDFObject IsQuery IsSimpleValue IsSOAPRequest IsStruct IsUserInAnyRole IsUserInRole ' + \n\t\t\t\t\t\t'IsUserLoggedIn IsValid IsWDDX IsXML IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot JavaCast JSStringFormat LCase Left Len ' + \n\t\t\t\t\t\t'ListAppend ListChangeDelims ListContains ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst ListGetAt ListInsertAt ' + \n\t\t\t\t\t\t'ListLast ListLen ListPrepend ListQualify ListRest ListSetAt ListSort ListToArray ListValueCount ListValueCountNoCase LJustify Log ' + \n\t\t\t\t\t\t'Log10 LSCurrencyFormat LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime ' + \n\t\t\t\t\t\t'LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Max Mid Min Minute Month MonthAsString Now NumberFormat ParagraphFormat ParseDateTime ' + \n\t\t\t\t\t\t'Pi PrecisionEvaluate PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow QueryConvertForGrid QueryNew QuerySetCell QuotedValueList Rand ' + \n\t\t\t\t\t\t'Randomize RandRange REFind REFindNoCase ReleaseComObject REMatch REMatchNoCase RemoveChars RepeatString Replace ReplaceList ReplaceNoCase ' + \n\t\t\t\t\t\t'REReplace REReplaceNoCase Reverse Right RJustify Round RTrim Second SendGatewayMessage SerializeJSON SetEncoding SetLocale SetProfileString ' + \n\t\t\t\t\t\t'SetVariable Sgn Sin Sleep SpanExcluding SpanIncluding Sqr StripCR StructAppend StructClear StructCopy StructCount StructDelete StructFind ' + \n\t\t\t\t\t\t'StructFindKey StructFindValue StructGet StructInsert StructIsEmpty StructKeyArray StructKeyExists StructKeyList StructKeyList StructNew ' + \n\t\t\t\t\t\t'StructSort StructUpdate Tan TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase URLDecode URLEncodedFormat URLSessionFormat Val ' + \n\t\t\t\t\t\t'ValueList VerifyClient Week Wrap Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform ' + \n\t\t\t\t\t\t'XmlValidate Year YesNoFormat';\n\n\t\tvar keywords =\t'cfabort cfajaximport cfajaxproxy cfapplet cfapplication cfargument cfassociate cfbreak cfcache cfcalendar ' + \n\t\t\t\t\t\t'cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection cfcomponent cfcontent cfcookie cfdbinfo ' + \n\t\t\t\t\t\t'cfdefaultcase cfdirectory cfdiv cfdocument cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror ' + \n\t\t\t\t\t\t'cfexchangecalendar cfexchangeconnection cfexchangecontact cfexchangefilter cfexchangemail cfexchangetask ' + \n\t\t\t\t\t\t'cfexecute cfexit cffeed cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid cfgridcolumn ' + \n\t\t\t\t\t\t'cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif cfimage cfimport cfinclude cfindex ' + \n\t\t\t\t\t\t'cfinput cfinsert cfinterface cfinvoke cfinvokeargument cflayout cflayoutarea cfldap cflocation cflock cflog ' + \n\t\t\t\t\t\t'cflogin cfloginuser cflogout cfloop cfmail cfmailparam cfmailpart cfmenu cfmenuitem cfmodule cfNTauthenticate ' + \n\t\t\t\t\t\t'cfobject cfobjectcache cfoutput cfparam cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod cfpop ' + \n\t\t\t\t\t\t'cfpresentation cfpresentationslide cfpresenter cfprint cfprocessingdirective cfprocparam cfprocresult ' + \n\t\t\t\t\t\t'cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow cfreturn cfsavecontent cfschedule ' + \n\t\t\t\t\t\t'cfscript cfsearch cfselect cfset cfsetting cfsilent cfslider cfsprydataset cfstoredproc cfswitch cftable ' + \n\t\t\t\t\t\t'cftextarea cfthread cfthrow cftimer cftooltip cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx ' + \n\t\t\t\t\t\t'cfwindow cfxml cfzip cfzipparam';\n\n\t\tvar operators =\t'all and any between cross in join like not null or outer some';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp('--(.*)$', 'gm'),\t\t\t\t\t\tcss: 'comments' },  // one line and multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.xmlComments,\t\t\tcss: 'comments' },    // single quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },    // double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },    // single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' }, // functions\n\t\t\t{ regex: new RegExp(this.getKeywords(operators), 'gmi'),\tcss: 'color1' },    // operators and such\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\tcss: 'keyword' }    // keyword\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['coldfusion','cf'];\n\t\n\tSyntaxHighlighter.brushes.ColdFusion = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Copyright 2006 Shin, YoungJin\n\t\n\t\tvar datatypes =\t'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' +\n\t\t\t\t\t\t'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' +\n\t\t\t\t\t\t'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' +\n\t\t\t\t\t\t'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' +\n\t\t\t\t\t\t'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' +\n\t\t\t\t\t\t'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' +\n\t\t\t\t\t\t'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' +\n\t\t\t\t\t\t'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' +\n\t\t\t\t\t\t'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' +\n\t\t\t\t\t\t'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' +\n\t\t\t\t\t\t'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' +\n\t\t\t\t\t\t'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' +\n\t\t\t\t\t\t'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' +\n\t\t\t\t\t\t'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' +\n\t\t\t\t\t\t'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' +\n\t\t\t\t\t\t'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM ' +\n\t\t\t\t\t\t'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' +\n\t\t\t\t\t\t'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' +\n\t\t\t\t\t\t'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' +\n\t\t\t\t\t\t'__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' +\n\t\t\t\t\t\t'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' +\n\t\t\t\t\t\t'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' +\n\t\t\t\t\t\t'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' +\n\t\t\t\t\t\t'va_list wchar_t wctrans_t wctype_t wint_t signed';\n\n\t\tvar keywords =\t'auto break case catch class const decltype __finally __exception __try ' +\n\t\t\t\t\t\t'const_cast continue private public protected __declspec ' +\n\t\t\t\t\t\t'default delete deprecated dllexport dllimport do dynamic_cast ' +\n\t\t\t\t\t\t'else enum explicit extern if for friend goto inline ' +\n\t\t\t\t\t\t'mutable naked namespace new noinline noreturn nothrow ' +\n\t\t\t\t\t\t'register reinterpret_cast return selectany ' +\n\t\t\t\t\t\t'sizeof static static_cast struct switch template this ' +\n\t\t\t\t\t\t'thread throw true false try typedef typeid typename union ' +\n\t\t\t\t\t\t'using uuid virtual void volatile whcar_t while';\n\t\t\t\t\t\n\t\tvar functions =\t'assert isalnum isalpha iscntrl isdigit isgraph islower isprint' +\n\t\t\t\t\t\t'ispunct isspace isupper isxdigit tolower toupper errno localeconv ' +\n\t\t\t\t\t\t'setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod ' +\n\t\t\t\t\t\t'frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf ' +\n\t\t\t\t\t\t'longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start ' +\n\t\t\t\t\t\t'clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen ' +\n\t\t\t\t\t\t'fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell ' +\n\t\t\t\t\t\t'fwrite getc getchar gets perror printf putc putchar puts remove ' +\n\t\t\t\t\t\t'rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ' +\n\t\t\t\t\t\t'ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol ' +\n\t\t\t\t\t\t'bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs ' +\n\t\t\t\t\t\t'mbtowc qsort rand realloc srand strtod strtol strtoul system ' +\n\t\t\t\t\t\t'wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr ' +\n\t\t\t\t\t\t'strcmp strcoll strcpy strcspn strerror strlen strncat strncmp ' +\n\t\t\t\t\t\t'strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime ' +\n\t\t\t\t\t\t'clock ctime difftime gmtime localtime mktime strftime time';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^ *#.*/gm,\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\n\t\t\t{ regex: new RegExp(this.getKeywords(datatypes), 'gm'),\t\tcss: 'color1 bold' },\n\t\t\t{ regex: new RegExp(this.getKeywords(functions), 'gm'),\t\tcss: 'functions bold' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword bold' }\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['cpp', 'c'];\n\n\tSyntaxHighlighter.brushes.Cpp = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abstract as base bool break byte case catch char checked class const ' +\n\t\t\t\t\t\t'continue decimal default delegate do double else enum event explicit volatile ' +\n\t\t\t\t\t\t'extern false finally fixed float for foreach get goto if implicit in int ' +\n\t\t\t\t\t\t'interface internal is lock long namespace new null object operator out ' +\n\t\t\t\t\t\t'override params private protected public readonly ref return sbyte sealed set ' +\n\t\t\t\t\t\t'short sizeof stackalloc static string struct switch this throw true try ' +\n\t\t\t\t\t\t'typeof uint ulong unchecked unsafe ushort using virtual void while var ' +\n\t\t\t\t\t\t'from group by into select let where orderby join on equals ascending descending';\n\n\t\tfunction fixComments(match, regexInfo)\n\t\t{\n\t\t\tvar css = (match[0].indexOf(\"///\") == 0)\n\t\t\t\t? 'color1'\n\t\t\t\t: 'comments'\n\t\t\t\t;\n\t\t\t\n\t\t\treturn [new SyntaxHighlighter.Match(match[0], match.index, css)];\n\t\t}\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tfunc : fixComments },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: /@\"(?:[^\"]|\"\")*\"/g,\t\t\t\t\t\t\t\tcss: 'string' },\t\t\t// @-quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^\\s*#.*/gm,\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t\t// c# keyword\n\t\t\t{ regex: /\\bpartial(?=\\s+(?:class|interface|struct)\\b)/g,\tcss: 'keyword' },\t\t\t// contextual keyword: 'partial'\n\t\t\t{ regex: /\\byield(?=\\s+(?:return|break)\\b)/g,\t\t\t\tcss: 'keyword' }\t\t\t// contextual keyword: 'yield'\n\t\t\t];\n\t\t\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['c#', 'c-sharp', 'csharp'];\n\n\tSyntaxHighlighter.brushes.CSharp = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\t\n\t\tfunction getValuesCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';\n\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t// single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t// html colors\n\t\t\t{ regex: /(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)/g,\t\t\t\tcss: 'value' },\t\t// sizes\n\t\t\t{ regex: /!important/g,\t\t\t\t\t\t\t\t\t\tcss: 'color3' },\t// !important\n\t\t\t{ regex: new RegExp(getKeywordsCSS(keywords), 'gm'),\t\tcss: 'keyword' },\t// keywords\n\t\t\t{ regex: new RegExp(getValuesCSS(values), 'g'),\t\t\t\tcss: 'value' },\t\t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\tcss: 'color1' }\t\t// fonts\n\t\t\t];\n\n\t\tthis.forHtmlScript({ \n\t\t\tleft: /(&lt;|<)\\s*style.*?(&gt;|>)/gi, \n\t\t\tright: /(&lt;|<)\\/\\s*style\\s*(&gt;|>)/gi \n\t\t\t});\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['css'];\n\n\tSyntaxHighlighter.brushes.CSS = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' +\n\t\t\t\t\t\t'case char class comp const constructor currency destructor div do double ' +\n\t\t\t\t\t\t'downto else end except exports extended false file finalization finally ' +\n\t\t\t\t\t\t'for function goto if implementation in inherited int64 initialization ' +\n\t\t\t\t\t\t'integer interface is label library longint longword mod nil not object ' +\n\t\t\t\t\t\t'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' +\n\t\t\t\t\t\t'pint64 pointer private procedure program property pshortstring pstring ' +\n\t\t\t\t\t\t'pvariant pwidechar pwidestring protected public published raise real real48 ' +\n\t\t\t\t\t\t'record repeat set shl shortint shortstring shr single smallint string then ' +\n\t\t\t\t\t\t'threadvar to true try type unit until uses val var varirnt while widechar ' +\n\t\t\t\t\t\t'widestring with word write writeln xor';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /\\(\\*[\\s\\S]*?\\*\\)/gm,\t\t\t\t\t\t\t\tcss: 'comments' },  \t// multiline comments (* *)\n\t\t\t{ regex: /{(?!\\$)[\\s\\S]*?}/gm,\t\t\t\t\t\t\t\tcss: 'comments' },  \t// multiline comments { }\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },  \t// one line\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\\{\\$[a-zA-Z]+ .+\\}/g,\t\t\t\t\t\t\t\tcss: 'color1' },\t\t// compiler Directives and Region tags\n\t\t\t{ regex: /\\b[\\d\\.]+\\b/g,\t\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// numbers 12345\n\t\t\t{ regex: /\\$[a-zA-Z0-9]+\\b/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// numbers $F5D3\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\tcss: 'keyword' }\t\t// keyword\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['delphi', 'pascal', 'pas'];\n\n\tSyntaxHighlighter.brushes.Delphi = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tthis.regexList = [\n\t\t\t{ regex: /^\\+\\+\\+ .*$/gm,\tcss: 'color2' },\t// new file\n\t\t\t{ regex: /^\\-\\-\\- .*$/gm,\tcss: 'color2' },\t// old file\n\t\t\t{ regex: /^\\s.*$/gm,\t\tcss: 'color1' },\t// unchanged\n\t\t\t{ regex: /^@@.*@@.*$/gm,\tcss: 'variable' },\t// location\n\t\t\t{ regex: /^\\+.*$/gm,\t\tcss: 'string' },\t// additions\n\t\t\t{ regex: /^\\-.*$/gm,\t\tcss: 'color3' }\t\t// deletions\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['diff', 'patch'];\n\n\tSyntaxHighlighter.brushes.Diff = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Jean-Lou Dupont\n\t\t// http://jldupont.blogspot.com/2009/06/erlang-syntax-highlighter.html  \n\n\t\t// According to: http://erlang.org/doc/reference_manual/introduction.html#1.5\n\t\tvar keywords = 'after and andalso band begin bnot bor bsl bsr bxor '+\n\t\t\t'case catch cond div end fun if let not of or orelse '+\n\t\t\t'query receive rem try when xor'+\n\t\t\t// additional\n\t\t\t' module export import define';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp(\"[A-Z][A-Za-z0-9_]+\", 'g'), \t\t\tcss: 'constants' },\n\t\t\t{ regex: new RegExp(\"\\\\%.+\", 'gm'), \t\t\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: new RegExp(\"\\\\?[A-Za-z0-9_]+\", 'g'), \t\t\t\tcss: 'preprocessor' },\n\t\t\t{ regex: new RegExp(\"[a-z0-9_]+:[a-z0-9_]+\", 'g'), \t\t\tcss: 'functions' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords),\t'gm'),\t\tcss: 'keyword' }\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['erl', 'erlang'];\n\n\tSyntaxHighlighter.brushes.Erland = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Andres Almiray\n\t\t// http://jroller.com/aalmiray/entry/nice_source_code_syntax_highlighter\n\n\t\tvar keywords =\t'as assert break case catch class continue def default do else extends finally ' +\n\t\t\t\t\t\t'if in implements import instanceof interface new package property return switch ' +\n\t\t\t\t\t\t'throw throws try while public protected private static';\n\t\tvar types    =  'void boolean byte char short int long float double';\n\t\tvar constants = 'null';\n\t\tvar methods   = 'allProperties count get size '+\n\t\t\t\t\t\t'collect each eachProperty eachPropertyName eachWithIndex find findAll ' +\n\t\t\t\t\t\t'findIndexOf grep inject max min reverseEach sort ' +\n\t\t\t\t\t\t'asImmutable asSynchronized flatten intersect join pop reverse subMap toList ' +\n\t\t\t\t\t\t'padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize ' +\n\t\t\t\t\t\t'eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText ' +\n\t\t\t\t\t\t'splitEachLine withReader append encodeBase64 decodeBase64 filterLine ' +\n\t\t\t\t\t\t'transformChar transformLine withOutputStream withPrintWriter withStream ' +\n\t\t\t\t\t\t'withStreams withWriter withWriterAppend write writeLine '+\n\t\t\t\t\t\t'dump inspect invokeMethod print println step times upto use waitForOrKill '+\n\t\t\t\t\t\t'getText';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\t\t\t\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\t\t\t\tcss: 'comments' },\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\t\t\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\t\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\"\"\".*\"\"\"/g,\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'string' },\t\t// GStrings\n\t\t\t{ regex: new RegExp('\\\\b([\\\\d]+(\\\\.[\\\\d]+)?|0x[a-f0-9]+)\\\\b', 'gi'),\tcss: 'value' },\t\t\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\t\t\tcss: 'keyword' },\t\t// goovy keyword\n\t\t\t{ regex: new RegExp(this.getKeywords(types), 'gm'),\t\t\t\t\t\tcss: 'color1' },\t\t// goovy/java type\n\t\t\t{ regex: new RegExp(this.getKeywords(constants), 'gm'),\t\t\t\t\tcss: 'constants' },\t\t// constants\n\t\t\t{ regex: new RegExp(this.getKeywords(methods), 'gm'),\t\t\t\t\tcss: 'functions' }\t\t// methods\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['groovy'];\n\n\tSyntaxHighlighter.brushes.Groovy = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abstract assert boolean break byte case catch char class const ' +\n\t\t\t\t\t\t'continue default do double else enum extends ' +\n\t\t\t\t\t\t'false final finally float for goto if implements import ' +\n\t\t\t\t\t\t'instanceof int interface long native new null ' +\n\t\t\t\t\t\t'package private protected public return ' +\n\t\t\t\t\t\t'short static strictfp super switch synchronized this throw throws true ' +\n\t\t\t\t\t\t'transient try void volatile while';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: /\\/\\*([^\\*][\\s\\S]*)?\\*\\//gm,\t\t\t\t\t\tcss: 'comments' },\t \t// multiline comments\n\t\t\t{ regex: /\\/\\*(?!\\*\\/)\\*[\\s\\S]*?\\*\\//gm,\t\t\t\t\tcss: 'preprocessor' },\t// documentation comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,\t\t\t\tcss: 'value' },\t\t\t// numbers\n\t\t\t{ regex: /(?!\\@interface\\b)\\@[\\$\\w]+\\b/g,\t\t\t\t\tcss: 'color1' },\t\t// annotation @anno\n\t\t\t{ regex: /\\@interface\\b/g,\t\t\t\t\t\t\t\t\tcss: 'color2' },\t\t// @interface keyword\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\t\t// java keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript({\n\t\t\tleft\t: /(&lt;|<)%[@!=]?/g, \n\t\t\tright\t: /%(&gt;|>)/g \n\t\t});\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['java'];\n\n\tSyntaxHighlighter.brushes.Java = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Patrick Webster\n\t\t// http://patrickwebster.blogspot.com/2009/04/javafx-brush-for-syntaxhighlighter.html\n\t\tvar datatypes =\t'Boolean Byte Character Double Duration '\n\t\t\t\t\t\t+ 'Float Integer Long Number Short String Void'\n\t\t\t\t\t\t;\n\n\t\tvar keywords = 'abstract after and as assert at before bind bound break catch class '\n\t\t\t\t\t\t+ 'continue def delete else exclusive extends false finally first for from '\n\t\t\t\t\t\t+ 'function if import in indexof init insert instanceof into inverse last '\n\t\t\t\t\t\t+ 'lazy mixin mod nativearray new not null on or override package postinit '\n\t\t\t\t\t\t+ 'protected public public-init public-read replace return reverse sizeof '\n\t\t\t\t\t\t+ 'step super then this throw true try tween typeof var where while with '\n\t\t\t\t\t\t+ 'attribute let private readonly static trigger'\n\t\t\t\t\t\t;\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: /(-?\\.?)(\\b(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[+-]?\\d+)?|0x[a-f\\d]+)\\b\\.?/gi, css: 'color2' },\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(datatypes), 'gm'),\t\tcss: 'variable' },\t// datatypes\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\n\t\t];\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['jfx', 'javafx'];\n\n\tSyntaxHighlighter.brushes.JavaFX = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'break case catch continue ' +\n\t\t\t\t\t\t'default delete do else false  ' +\n\t\t\t\t\t\t'for function if in instanceof ' +\n\t\t\t\t\t\t'new null return super switch ' +\n\t\t\t\t\t\t'this throw true try typeof var while with'\n\t\t\t\t\t\t;\n\n\t\tvar r = SyntaxHighlighter.regexLib;\n\t\t\n\t\tthis.regexList = [\n\t\t\t{ regex: r.multiLineDoubleQuotedString,\t\t\t\t\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: r.multiLineSingleQuotedString,\t\t\t\t\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: r.singleLineCComments,\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: r.multiLineCComments,\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: /\\s*#.*/gm,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\t\t\t// keywords\n\t\t\t];\n\t\n\t\tthis.forHtmlScript(r.scriptScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['js', 'jscript', 'javascript'];\n\n\tSyntaxHighlighter.brushes.JScript = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by David Simmons-Duffin and Marty Kube\n\t\n\t\tvar funcs = \n\t\t\t'abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr ' + \n\t\t\t'chroot close closedir connect cos crypt defined delete each endgrent ' + \n\t\t\t'endhostent endnetent endprotoent endpwent endservent eof exec exists ' + \n\t\t\t'exp fcntl fileno flock fork format formline getc getgrent getgrgid ' + \n\t\t\t'getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr ' + \n\t\t\t'getnetbyname getnetent getpeername getpgrp getppid getpriority ' + \n\t\t\t'getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid ' + \n\t\t\t'getservbyname getservbyport getservent getsockname getsockopt glob ' + \n\t\t\t'gmtime grep hex index int ioctl join keys kill lc lcfirst length link ' + \n\t\t\t'listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd ' + \n\t\t\t'oct open opendir ord pack pipe pop pos print printf prototype push ' + \n\t\t\t'quotemeta rand read readdir readline readlink readpipe recv rename ' + \n\t\t\t'reset reverse rewinddir rindex rmdir scalar seek seekdir select semctl ' + \n\t\t\t'semget semop send setgrent sethostent setnetent setpgrp setpriority ' + \n\t\t\t'setprotoent setpwent setservent setsockopt shift shmctl shmget shmread ' + \n\t\t\t'shmwrite shutdown sin sleep socket socketpair sort splice split sprintf ' + \n\t\t\t'sqrt srand stat study substr symlink syscall sysopen sysread sysseek ' + \n\t\t\t'system syswrite tell telldir time times tr truncate uc ucfirst umask ' + \n\t\t\t'undef unlink unpack unshift utime values vec wait waitpid warn write ' +\n\t\t\t// feature\n\t\t\t'say';\n    \n\t\tvar keywords =  \n\t\t\t'bless caller continue dbmclose dbmopen die do dump else elsif eval exit ' +\n\t\t\t'for foreach goto if import last local my next no our package redo ref ' + \n\t\t\t'require return sub tie tied unless untie until use wantarray while ' +\n\t\t\t// feature\n\t\t\t'given when default ' +\n\t\t\t// Try::Tiny\n\t\t\t'try catch finally ' +\n\t\t\t// Moose\n\t\t\t'has extends with before after around override augment';\n    \n\t\tthis.regexList = [\n\t\t\t{ regex: /(<<|&lt;&lt;)((\\w+)|(['\"])(.+?)\\4)[\\s\\S]+?\\n\\3\\5\\n/g,\tcss: 'string' },\t// here doc (maybe html encoded)\n\t\t\t{ regex: /#.*$/gm,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: /^#!.*\\n/g,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t// shebang\n\t\t\t{ regex: /-?\\w+(?=\\s*=(>|&gt;))/g,\tcss: 'string' }, // fat comma\n\n\t\t\t// is this too much?\n\t\t\t{ regex: /\\bq[qwxr]?\\([\\s\\S]*?\\)/g,\tcss: 'string' }, // quote-like operators ()\n\t\t\t{ regex: /\\bq[qwxr]?\\{[\\s\\S]*?\\}/g,\tcss: 'string' }, // quote-like operators {}\n\t\t\t{ regex: /\\bq[qwxr]?\\[[\\s\\S]*?\\]/g,\tcss: 'string' }, // quote-like operators []\n\t\t\t{ regex: /\\bq[qwxr]?(<|&lt;)[\\s\\S]*?(>|&gt;)/g,\tcss: 'string' }, // quote-like operators <>\n\t\t\t{ regex: /\\bq[qwxr]?([^\\w({<[])[\\s\\S]*?\\1/g,\tcss: 'string' }, // quote-like operators non-paired\n\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\tcss: 'string' },\n\t\t\t// currently ignoring single quote package separator and utf8 names\n\t\t\t{ regex: /(?:&amp;|[$@%*]|\\$#)[a-zA-Z_](\\w+|::)*/g,   \t\tcss: 'variable' },\n\t\t\t{ regex: /\\b__(?:END|DATA)__\\b[\\s\\S]*$/g,\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: /(^|\\n)=\\w[\\s\\S]*?(\\n=cut\\s*\\n|$)/g,\t\t\t\tcss: 'comments' },\t\t// pod\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gm'),\t\tcss: 'functions' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\n\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t\t= ['perl', 'Perl', 'pl'];\n\n\tSyntaxHighlighter.brushes.Perl = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar funcs\t=\t'abs acos acosh addcslashes addslashes ' +\n\t\t\t\t\t\t'array_change_key_case array_chunk array_combine array_count_values array_diff '+\n\t\t\t\t\t\t'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+\n\t\t\t\t\t\t'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+\n\t\t\t\t\t\t'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+\n\t\t\t\t\t\t'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+\n\t\t\t\t\t\t'array_push array_rand array_reduce array_reverse array_search array_shift '+\n\t\t\t\t\t\t'array_slice array_splice array_sum array_udiff array_udiff_assoc '+\n\t\t\t\t\t\t'array_udiff_uassoc array_uintersect array_uintersect_assoc '+\n\t\t\t\t\t\t'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+\n\t\t\t\t\t\t'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+\n\t\t\t\t\t\t'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+\n\t\t\t\t\t\t'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+\n\t\t\t\t\t\t'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+\n\t\t\t\t\t\t'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+\n\t\t\t\t\t\t'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+\n\t\t\t\t\t\t'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+\n\t\t\t\t\t\t'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+\n\t\t\t\t\t\t'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+\n\t\t\t\t\t\t'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+\n\t\t\t\t\t\t'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+\n\t\t\t\t\t\t'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+\n\t\t\t\t\t\t'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+\n\t\t\t\t\t\t'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+\n\t\t\t\t\t\t'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+\n\t\t\t\t\t\t'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+\n\t\t\t\t\t\t'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+\n\t\t\t\t\t\t'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+\n\t\t\t\t\t\t'parse_ini_file parse_str parse_url passthru pathinfo print readlink realpath rewind rewinddir rmdir '+\n\t\t\t\t\t\t'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+\n\t\t\t\t\t\t'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+\n\t\t\t\t\t\t'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+\n\t\t\t\t\t\t'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+\n\t\t\t\t\t\t'strtoupper strtr strval substr substr_compare';\n\n\t\tvar keywords =\t'abstract and array as break case catch cfunction class clone const continue declare default die do ' +\n\t\t\t\t\t\t'else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach ' +\n\t\t\t\t\t\t'function global goto if implements include include_once interface instanceof insteadof namespace new ' +\n\t\t\t\t\t\t'old_function or private protected public return require require_once static switch ' +\n\t\t\t\t\t\t'trait throw try use var while xor ';\n\t\t\n\t\tvar constants\t= '__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: /\\$\\w+/g,\t\t\t\t\t\t\t\t\t\t\tcss: 'variable' },\t\t\t// variables\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' },\t\t\t// common functions\n\t\t\t{ regex: new RegExp(this.getKeywords(constants), 'gmi'),\tcss: 'constants' },\t\t\t// constants\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\t\t\t// keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['php'];\n\n\tSyntaxHighlighter.brushes.Php = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['text', 'plain'];\n\n\tSyntaxHighlighter.brushes.Plain = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Joel 'Jaykul' Bennett, http://PoshCode.org | http://HuddledMasses.org\n\t\tvar keywords =\t'while validateset validaterange validatepattern validatelength validatecount ' +\n\t\t\t\t\t\t'until trap switch return ref process param parameter in if global: '+\n\t\t\t\t\t\t'function foreach for finally filter end elseif else dynamicparam do default ' +\n\t\t\t\t\t\t'continue cmdletbinding break begin alias \\\\? % #script #private #local #global '+\n\t\t\t\t\t\t'mandatory parametersetname position valuefrompipeline ' +\n\t\t\t\t\t\t'valuefrompipelinebypropertyname valuefromremainingarguments helpmessage ';\n\n\t\tvar operators =\t' and as band bnot bor bxor casesensitive ccontains ceq cge cgt cle ' +\n\t\t\t\t\t\t'clike clt cmatch cne cnotcontains cnotlike cnotmatch contains ' +\n\t\t\t\t\t\t'creplace eq exact f file ge gt icontains ieq ige igt ile ilike ilt ' +\n\t\t\t\t\t\t'imatch ine inotcontains inotlike inotmatch ireplace is isnot le like ' +\n\t\t\t\t\t\t'lt match ne not notcontains notlike notmatch or regex replace wildcard';\n\t\t\t\t\t\t\n\t\tvar verbs =\t\t'write where wait use update unregister undo trace test tee take suspend ' +\n\t\t\t\t\t\t'stop start split sort skip show set send select scroll resume restore ' +\n\t\t\t\t\t\t'restart resolve resize reset rename remove register receive read push ' +\n\t\t\t\t\t\t'pop ping out new move measure limit join invoke import group get format ' +\n\t\t\t\t\t\t'foreach export expand exit enter enable disconnect disable debug cxnew ' +\n\t\t\t\t\t\t'copy convertto convertfrom convert connect complete compare clear ' +\n\t\t\t\t\t\t'checkpoint aggregate add';\n\n\t\t// I can't find a way to match the comment based help in multi-line comments, because SH won't highlight in highlights, and javascript doesn't support lookbehind\n\t\tvar commenthelp = ' component description example externalhelp forwardhelpcategory forwardhelptargetname forwardhelptargetname functionality inputs link notes outputs parameter remotehelprunspace role synopsis';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp('^\\\\s*#[#\\\\s]*\\\\.('+this.getKeywords(commenthelp)+').*$', 'gim'),\t\t\tcss: 'preprocessor help bold' },\t\t// comment-based help\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t\t\t\t// one line comments\n\t\t\t{ regex: /(&lt;|<)#[\\s\\S]*?#(&gt;|>)/gm,\t\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments here' },\t\t\t\t\t// multi-line comments\n\t\t\t\n\t\t\t{ regex: new RegExp('@\"\\\\n[\\\\s\\\\S]*?\\\\n\"@', 'gm'),\t\t\t\t\t\t\t\t\t\t\t\tcss: 'script string here' },\t\t\t// double quoted here-strings\n\t\t\t{ regex: new RegExp(\"@'\\\\n[\\\\s\\\\S]*?\\\\n'@\", 'gm'),\t\t\t\t\t\t\t\t\t\t\t\tcss: 'script string single here' },\t\t// single quoted here-strings\n\t\t\t{ regex: new RegExp('\"(?:\\\\$\\\\([^\\\\)]*\\\\)|[^\"]|`\"|\"\")*[^`]\"','g'),\t\t\t\t\t\t\t\tcss: 'string' },\t\t\t\t\t\t// double quoted strings\n\t\t\t{ regex: new RegExp(\"'(?:[^']|'')*'\", 'g'),\t\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'string single' },\t\t\t\t\t// single quoted strings\n\t\t\t\n\t\t\t{ regex: new RegExp('[\\\\$|@|@@](?:(?:global|script|private|env):)?[A-Z0-9_]+', 'gi'),\t\t\tcss: 'variable' },\t\t\t\t\t\t// $variables\n\t\t\t{ regex: new RegExp('(?:\\\\b'+verbs.replace(/ /g, '\\\\b|\\\\b')+')-[a-zA-Z_][a-zA-Z0-9_]*', 'gmi'),\tcss: 'functions' },\t\t\t\t\t\t// functions and cmdlets\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\t\t\t\t\t\t\t\t\t\tcss: 'keyword' },\t\t\t\t\t\t// keywords\n\t\t\t{ regex: new RegExp('-'+this.getKeywords(operators), 'gmi'),\t\t\t\t\t\t\t\t\tcss: 'operator value' },\t\t\t\t// operators\n\t\t\t{ regex: new RegExp('\\\\[[A-Z_\\\\[][A-Z0-9_. `,\\\\[\\\\]]*\\\\]', 'gi'),\t\t\t\t\t\t\t\tcss: 'constants' },\t\t\t\t\t\t// .Net [Type]s\n\t\t\t{ regex: new RegExp('\\\\s+-(?!'+this.getKeywords(operators)+')[a-zA-Z_][a-zA-Z0-9_]*', 'gmi'),\tcss: 'color1' },\t\t\t\t\t\t// parameters\t  \n\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['powershell', 'ps', 'posh'];\n\n\tSyntaxHighlighter.brushes.PowerShell = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Gheorghe Milas and Ahmad Sherif\n\t\n\t\tvar keywords =  'and assert break class continue def del elif else ' +\n\t\t\t\t\t\t'except exec finally for from global if import in is ' +\n\t\t\t\t\t\t'lambda not or pass print raise return try yield while';\n\n\t\tvar funcs = '__import__ abs all any apply basestring bin bool buffer callable ' +\n\t\t\t\t\t'chr classmethod cmp coerce compile complex delattr dict dir ' +\n\t\t\t\t\t'divmod enumerate eval execfile file filter float format frozenset ' +\n\t\t\t\t\t'getattr globals hasattr hash help hex id input int intern ' +\n\t\t\t\t\t'isinstance issubclass iter len list locals long map max min next ' +\n\t\t\t\t\t'object oct open ord pow print property range raw_input reduce ' +\n\t\t\t\t\t'reload repr reversed round set setattr slice sorted staticmethod ' +\n\t\t\t\t\t'str sum super tuple type type unichr unicode vars xrange zip';\n\n\t\tvar special =  'None True False self cls class_';\n\n\t\tthis.regexList = [\n\t\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' },\n\t\t\t\t{ regex: /^\\s*@\\w+/gm, \t\t\t\t\t\t\t\t\t\tcss: 'decorator' },\n\t\t\t\t{ regex: /(['\\\"]{3})([^\\1])*?\\1/gm, \t\t\t\t\t\tcss: 'comments' },\n\t\t\t\t{ regex: /\"(?!\")(?:\\.|\\\\\\\"|[^\\\"\"\\n])*\"/gm, \t\t\t\t\tcss: 'string' },\n\t\t\t\t{ regex: /'(?!')(?:\\.|(\\\\\\')|[^\\''\\n])*'/gm, \t\t\t\tcss: 'string' },\n\t\t\t\t{ regex: /\\+|\\-|\\*|\\/|\\%|=|==/gm, \t\t\t\t\t\t\tcss: 'keyword' },\n\t\t\t\t{ regex: /\\b\\d+\\.?\\w*/g, \t\t\t\t\t\t\t\t\tcss: 'value' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'), \t\tcss: 'keyword' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(special), 'gm'), \t\tcss: 'color1' }\n\t\t\t\t];\n\t\t\t\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['py', 'python'];\n\n\tSyntaxHighlighter.brushes.Python = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Erik Peterson.\n\t\n\t\tvar keywords =\t'alias and BEGIN begin break case class def define_method defined do each else elsif ' +\n\t\t\t\t\t\t'END end ensure false for if in module new next nil not or raise redo rescue retry return ' +\n\t\t\t\t\t\t'self super then throw true undef unless until when while yield';\n\n\t\tvar builtins =\t'Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload ' +\n\t\t\t\t\t\t'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ' +\n\t\t\t\t\t\t'ThreadGroup Thread Time TrueClass';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: /\\b[A-Z0-9_]+\\b/g,\t\t\t\t\t\t\t\t\tcss: 'constants' },\t\t// constants\n\t\t\t{ regex: /:[a-z][A-Za-z0-9_]*/g,\t\t\t\t\t\t\tcss: 'color2' },\t\t// symbols\n\t\t\t{ regex: /(\\$|@@|@)\\w+/g,\t\t\t\t\t\t\t\t\tcss: 'variable bold' },\t// $global, @instance, and @@class variables\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(this.getKeywords(builtins), 'gm'),\t\tcss: 'color1' }\t\t\t// builtins\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['ruby', 'rails', 'ror', 'rb'];\n\n\tSyntaxHighlighter.brushes.Ruby = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\t\n\t\tfunction getValuesCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';\n\t\t\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\t\t\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\t\t\n\t\tvar statements\t\t= '!important !default';\n\t\tvar preprocessor\t= '@import @extend @debug @warn @if @for @while @mixin @include';\n\t\t\n\t\tvar r = SyntaxHighlighter.regexLib;\n\t\t\n\t\tthis.regexList = [\n\t\t\t{ regex: r.multiLineCComments,\t\t\t\t\t\t\t\tcss: 'comments' },\t\t// multiline comments\n\t\t\t{ regex: r.singleLineCComments,\t\t\t\t\t\t\t\tcss: 'comments' },\t\t// singleline comments\n\t\t\t{ regex: r.doubleQuotedString,\t\t\t\t\t\t\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: r.singleQuotedString,\t\t\t\t\t\t\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// html colors\n\t\t\t{ regex: /\\b(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)\\b/g,\t\t\tcss: 'value' },\t\t\t// sizes\n\t\t\t{ regex: /\\$\\w+/g,\t\t\t\t\t\t\t\t\t\t\tcss: 'variable' },\t\t// variables\n\t\t\t{ regex: new RegExp(this.getKeywords(statements), 'g'),\t\tcss: 'color3' },\t\t// statements\n\t\t\t{ regex: new RegExp(this.getKeywords(preprocessor), 'g'),\tcss: 'preprocessor' },\t// preprocessor\n\t\t\t{ regex: new RegExp(getKeywordsCSS(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(getValuesCSS(values), 'g'),\t\t\t\tcss: 'value' },\t\t\t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\tcss: 'color1' }\t\t\t// fonts\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['sass', 'scss'];\n\n\tSyntaxHighlighter.brushes.Sass = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Yegor Jbanov and David Bernard.\n\t\n\t\tvar keywords =\t'val sealed case def true trait implicit forSome import match object null finally super ' +\n\t\t\t\t\t\t'override try lazy for var catch throw type extends class while with new final yield abstract ' +\n\t\t\t\t\t\t'else do if return protected private this package false';\n\n\t\tvar keyops =\t'[_:=><%#@]+';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\t\t\tcss: 'comments' },\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\t\t\tcss: 'comments' },\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString,\tcss: 'string' },\t// multi-line strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,    css: 'string' },\t// double-quoted string\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\t\tcss: 'string' },\t// strings\n\t\t\t{ regex: /0x[a-f0-9]+|\\d+(\\.\\d+)?/gi,\t\t\t\t\t\t\t\tcss: 'value' },\t\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\t\tcss: 'keyword' },\t// keywords\n\t\t\t{ regex: new RegExp(keyops, 'gm'),\t\t\t\t\t\t\t\t\tcss: 'keyword' }\t// scala keyword\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['scala'];\n\n\tSyntaxHighlighter.brushes.Scala = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar funcs\t=\t'abs avg case cast coalesce convert count current_timestamp ' +\n\t\t\t\t\t\t'current_user day isnull left lower month nullif replace right ' +\n\t\t\t\t\t\t'session_user space substring sum system_user upper user year';\n\n\t\tvar keywords =\t'absolute action add after alter as asc at authorization begin bigint ' +\n\t\t\t\t\t\t'binary bit by cascade char character check checkpoint close collate ' +\n\t\t\t\t\t\t'column commit committed connect connection constraint contains continue ' +\n\t\t\t\t\t\t'create cube current current_date current_time cursor database date ' +\n\t\t\t\t\t\t'deallocate dec decimal declare default delete desc distinct double drop ' +\n\t\t\t\t\t\t'dynamic else end end-exec escape except exec execute false fetch first ' +\n\t\t\t\t\t\t'float for force foreign forward free from full function global goto grant ' +\n\t\t\t\t\t\t'group grouping having hour ignore index inner insensitive insert instead ' +\n\t\t\t\t\t\t'int integer intersect into is isolation key last level load local max min ' +\n\t\t\t\t\t\t'minute modify move name national nchar next no numeric of off on only ' +\n\t\t\t\t\t\t'open option order out output partial password precision prepare primary ' +\n\t\t\t\t\t\t'prior privileges procedure public read real references relative repeatable ' +\n\t\t\t\t\t\t'restrict return returns revoke rollback rollup rows rule schema scroll ' +\n\t\t\t\t\t\t'second section select sequence serializable set size smallint static ' +\n\t\t\t\t\t\t'statistics table temp temporary then time timestamp to top transaction ' +\n\t\t\t\t\t\t'translation trigger true truncate uncommitted union unique update values ' +\n\t\t\t\t\t\t'varchar varying view when where with work';\n\n\t\tvar operators =\t'all and any between cross in join like not null or outer some';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /--(.*)$/gm,\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line and multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString,\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\t\t\tcss: 'color2' },\t\t\t// functions\n\t\t\t{ regex: new RegExp(this.getKeywords(operators), 'gmi'),\t\t\tcss: 'color1' },\t\t\t// operators and such\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\t\t\tcss: 'keyword' }\t\t\t// keyword\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['sql'];\n\n\tSyntaxHighlighter.brushes.Sql = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' +\n\t\t\t\t\t\t'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' +\n\t\t\t\t\t\t'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' +\n\t\t\t\t\t\t'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' +\n\t\t\t\t\t\t'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' +\n\t\t\t\t\t\t'Function Get GetType GoSub GoTo Handles If Implements Imports In ' +\n\t\t\t\t\t\t'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' +\n\t\t\t\t\t\t'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' +\n\t\t\t\t\t\t'NotInheritable NotOverridable Object On Option Optional Or OrElse ' +\n\t\t\t\t\t\t'Overloads Overridable Overrides ParamArray Preserve Private Property ' +\n\t\t\t\t\t\t'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' +\n\t\t\t\t\t\t'Return Select Set Shadows Shared Short Single Static Step Stop String ' +\n\t\t\t\t\t\t'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' +\n\t\t\t\t\t\t'Variant When While With WithEvents WriteOnly Xor';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /'.*$/gm,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^\\s*#.*$/gm,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\t\t\t// vb keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['vb', 'vbnet'];\n\n\tSyntaxHighlighter.brushes.Vb = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction process(match, regexInfo)\n\t\t{\n\t\t\tvar constructor = SyntaxHighlighter.Match,\n\t\t\t\tcode = match[0],\n\t\t\t\ttag = new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(?<name>[:\\\\w-\\\\.]+)', 'xg').exec(code),\n\t\t\t\tresult = []\n\t\t\t\t;\n\t\t\n\t\t\tif (match.attributes != null) \n\t\t\t{\n\t\t\t\tvar attributes,\n\t\t\t\t\tregex = new XRegExp('(?<name> [\\\\w:\\\\-\\\\.]+)' +\n\t\t\t\t\t\t\t\t\t\t'\\\\s*=\\\\s*' +\n\t\t\t\t\t\t\t\t\t\t'(?<value> \".*?\"|\\'.*?\\'|\\\\w+)',\n\t\t\t\t\t\t\t\t\t\t'xg');\n\n\t\t\t\twhile ((attributes = regex.exec(code)) != null) \n\t\t\t\t{\n\t\t\t\t\tresult.push(new constructor(attributes.name, match.index + attributes.index, 'color1'));\n\t\t\t\t\tresult.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tag != null)\n\t\t\t\tresult.push(\n\t\t\t\t\tnew constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword')\n\t\t\t\t);\n\n\t\t\treturn result;\n\t\t}\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: new XRegExp('(\\\\&lt;|<)\\\\!\\\\[[\\\\w\\\\s]*?\\\\[(.|\\\\s)*?\\\\]\\\\](\\\\&gt;|>)', 'gm'),\t\t\tcss: 'color2' },\t// <![ ... [ ... ]]>\n\t\t\t{ regex: SyntaxHighlighter.regexLib.xmlComments,\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t// <!-- ... -->\n\t\t\t{ regex: new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(\\\\w+)(?<attributes>.*?)[\\\\s\\\\/\\\\?]*(&gt;|>)', 'sg'), func: process }\n\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['xml', 'xhtml', 'xslt', 'html'];\n\n\tSyntaxHighlighter.brushes.Xml = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/SyntaxHighlighter/shCoreDefault.css",
    "content": ".syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter,.syntaxhighlighter td,.syntaxhighlighter tr,.syntaxhighlighter tbody,.syntaxhighlighter thead,.syntaxhighlighter caption,.syntaxhighlighter textarea{-moz-border-radius:0 0 0 0!important;-webkit-border-radius:0 0 0 0!important;background:none!important;border:0!important;bottom:auto!important;float:none!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Monaco,Menlo,Consolas,\"Courier New\",monospace;font-weight:normal!important;font-style:normal!important;min-height:inherit!important;min-height:auto!important;font-size:13px!important}.syntaxhighlighter{width:100%!important;margin:.3em 0 .3em 0!important;position:relative!important;overflow:auto!important;background-color:#f5f5f5!important;border:1px solid #ccc!important;border-radius:4px!important;border-collapse:separate!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .bold{font-weight:bold!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .gutter div{white-space:pre!important;word-wrap:normal}.syntaxhighlighter caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter td.code{width:100%!important}.syntaxhighlighter td.code .container{position:relative!important}.syntaxhighlighter td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;border:none!important;background:white!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0 .8em!important;font-size:1em!important;position:static!important;width:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar span.title{display:inline!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;text-decoration:none!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0 1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:none!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content{color:black!important}.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.printing a{text-decoration:none!important}.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:black!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:blue!important}.syntaxhighlighter.printing .keyword{color:#ff7800!important;font-weight:bold!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .script{font-weight:bold!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:black!important}.syntaxhighlighter{background-color:#f5f5f5!important}.syntaxhighlighter .line.highlighted.number{color:black!important}.syntaxhighlighter caption{color:black!important}.syntaxhighlighter .gutter{color:#afafaf!important;background-color:#f7f7f9!important;border-right:1px solid #e1e1e8!important;padding:9.5px 0 9.5px 9.5px!important;border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;user-select:none!important;-moz-user-select:none!important;-webkit-user-select:none!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:white!important}.syntaxhighlighter.printing .line .content{border:none!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:blue!important;background:white!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:blue!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:white!important;background:#6ce26c!important;border:none!important}.syntaxhighlighter .toolbar a{color:white!important}.syntaxhighlighter .toolbar a:hover{color:black!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:black!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:blue!important}.syntaxhighlighter .keyword{color:#ff7800!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{font-weight:bold!important;color:#ff7800!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}.syntaxhighlighter .keyword{font-weight:bold!important}"
  },
  {
    "path": "web/console/public/UEditor/third-party/codemirror/codemirror.css",
    "content": ".CodeMirror {\n    line-height: 1em;\n    font-family: monospace;\n}\n\n.CodeMirror-scroll {\n    overflow: auto;\n    height: 300px;\n    /* This is needed to prevent an IE[67] bug where the scrolled content\n       is visible outside of the scrolling box. */\n    position: relative;\n}\n\n.CodeMirror-gutter {\n    position: absolute; left: 0; top: 0;\n    z-index: 10;\n    background-color: #f7f7f7;\n    border-right: 1px solid #eee;\n    min-width: 2em;\n    height: 100%;\n}\n.CodeMirror-gutter-text {\n    color: #aaa;\n    text-align: right;\n    padding: .4em .2em .4em .4em;\n    white-space: pre !important;\n}\n.CodeMirror-lines {\n    padding: .4em;\n}\n\n.CodeMirror pre {\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    -o-border-radius: 0;\n    border-radius: 0;\n    border-width: 0; margin: 0; padding: 0; background: transparent;\n    font-family: inherit;\n    font-size: inherit;\n    padding: 0; margin: 0;\n    white-space: pre;\n    word-wrap: normal;\n}\n\n.CodeMirror-wrap pre {\n    word-wrap: break-word;\n    white-space: pre-wrap;\n}\n.CodeMirror-wrap .CodeMirror-scroll {\n    overflow-x: hidden;\n}\n\n.CodeMirror textarea {\n    outline: none !important;\n}\n\n.CodeMirror pre.CodeMirror-cursor {\n    z-index: 10;\n    position: absolute;\n    visibility: hidden;\n    border-left: 1px solid black;\n}\n.CodeMirror-focused pre.CodeMirror-cursor {\n    visibility: visible;\n}\n\nspan.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused span.CodeMirror-selected { background: #d2dcf8; }\n\n.CodeMirror-searching {background: #ffa;}\n\n/* Default theme */\n\n.cm-s-default span.cm-keyword {color: #708;}\n.cm-s-default span.cm-atom {color: #219;}\n.cm-s-default span.cm-number {color: #164;}\n.cm-s-default span.cm-def {color: #00f;}\n.cm-s-default span.cm-variable {color: black;}\n.cm-s-default span.cm-variable-2 {color: #05a;}\n.cm-s-default span.cm-variable-3 {color: #085;}\n.cm-s-default span.cm-property {color: black;}\n.cm-s-default span.cm-operator {color: black;}\n.cm-s-default span.cm-comment {color: #a50;}\n.cm-s-default span.cm-string {color: #a11;}\n.cm-s-default span.cm-string-2 {color: #f50;}\n.cm-s-default span.cm-meta {color: #555;}\n.cm-s-default span.cm-error {color: #f00;}\n.cm-s-default span.cm-qualifier {color: #555;}\n.cm-s-default span.cm-builtin {color: #30a;}\n.cm-s-default span.cm-bracket {color: #cc7;}\n.cm-s-default span.cm-tag {color: #170;}\n.cm-s-default span.cm-attribute {color: #00c;}\n.cm-s-default span.cm-header {color: #a0a;}\n.cm-s-default span.cm-quote {color: #090;}\n.cm-s-default span.cm-hr {color: #999;}\n.cm-s-default span.cm-link {color: #00c;}\n\nspan.cm-header, span.cm-strong {font-weight: bold;}\nspan.cm-em {font-style: italic;}\nspan.cm-emstrong {font-style: italic; font-weight: bold;}\nspan.cm-link {text-decoration: underline;}\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/codemirror/codemirror.js",
    "content": "// CodeMirror version 2.2\n//\n// All functions that need access to the editor's state live inside\n// the CodeMirror function. Below that, at the bottom of the file,\n// some utilities are defined.\n\n// CodeMirror is the only global var we claim\nvar CodeMirror = (function() {\n    // This is the function that produces an editor instance. It's\n    // closure is used to store the editor state.\n    function CodeMirror(place, givenOptions) {\n        // Determine effective options based on given values and defaults.\n        var options = {}, defaults = CodeMirror.defaults;\n        for (var opt in defaults)\n            if (defaults.hasOwnProperty(opt))\n                options[opt] = (givenOptions && givenOptions.hasOwnProperty(opt) ? givenOptions : defaults)[opt];\n\n        var targetDocument = options[\"document\"];\n        // The element in which the editor lives.\n        var wrapper = targetDocument.createElement(\"div\");\n        wrapper.className = \"CodeMirror\" + (options.lineWrapping ? \" CodeMirror-wrap\" : \"\");\n        // This mess creates the base DOM structure for the editor.\n        wrapper.innerHTML =\n            '<div style=\"overflow: hidden; position: relative; width: 3px; height: 0px;\">' + // Wraps and hides input textarea\n                '<textarea style=\"position: absolute; padding: 0; width: 1px;\" wrap=\"off\" ' +\n                'autocorrect=\"off\" autocapitalize=\"off\"></textarea></div>' +\n                '<div class=\"CodeMirror-scroll\" tabindex=\"-1\">' +\n                '<div style=\"position: relative\">' + // Set to the height of the text, causes scrolling\n                '<div style=\"position: relative\">' + // Moved around its parent to cover visible view\n                '<div class=\"CodeMirror-gutter\"><div class=\"CodeMirror-gutter-text\"></div></div>' +\n                // Provides positioning relative to (visible) text origin\n                '<div class=\"CodeMirror-lines\"><div style=\"position: relative\">' +\n                '<div style=\"position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden\"></div>' +\n                '<pre class=\"CodeMirror-cursor\">&#160;</pre>' + // Absolutely positioned blinky cursor\n                '<div></div>' + // This DIV contains the actual code\n                '</div></div></div></div></div>';\n        if (place.appendChild) place.appendChild(wrapper); else place(wrapper);\n        // I've never seen more elegant code in my life.\n        var inputDiv = wrapper.firstChild, input = inputDiv.firstChild,\n            scroller = wrapper.lastChild, code = scroller.firstChild,\n            mover = code.firstChild, gutter = mover.firstChild, gutterText = gutter.firstChild,\n            lineSpace = gutter.nextSibling.firstChild, measure = lineSpace.firstChild,\n            cursor = measure.nextSibling, lineDiv = cursor.nextSibling;\n        themeChanged();\n        // Needed to hide big blue blinking cursor on Mobile Safari\n        if (/AppleWebKit/.test(navigator.userAgent) && /Mobile\\/\\w+/.test(navigator.userAgent)) input.style.width = \"0px\";\n        if (!webkit) lineSpace.draggable = true;\n        if (options.tabindex != null) input.tabIndex = options.tabindex;\n        if (!options.gutter && !options.lineNumbers) gutter.style.display = \"none\";\n\n        // Check for problem with IE innerHTML not working when we have a\n        // P (or similar) parent node.\n        try { stringWidth(\"x\"); }\n        catch (e) {\n            if (e.message.match(/runtime/i))\n                e = new Error(\"A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)\");\n            throw e;\n        }\n\n        // Delayed object wrap timeouts, making sure only one is active. blinker holds an interval.\n        var poll = new Delayed(), highlight = new Delayed(), blinker;\n\n        // mode holds a mode API object. doc is the tree of Line objects,\n        // work an array of lines that should be parsed, and history the\n        // undo history (instance of History constructor).\n        var mode, doc = new BranchChunk([new LeafChunk([new Line(\"\")])]), work, focused;\n        loadMode();\n        // The selection. These are always maintained to point at valid\n        // positions. Inverted is used to remember that the user is\n        // selecting bottom-to-top.\n        var sel = {from: {line: 0, ch: 0}, to: {line: 0, ch: 0}, inverted: false};\n        // Selection-related flags. shiftSelecting obviously tracks\n        // whether the user is holding shift.\n        var shiftSelecting, lastClick, lastDoubleClick, draggingText, overwrite = false;\n        // Variables used by startOperation/endOperation to track what\n        // happened during the operation.\n        var updateInput, userSelChange, changes, textChanged, selectionChanged, leaveInputAlone,\n            gutterDirty, callbacks;\n        // Current visible range (may be bigger than the view window).\n        var displayOffset = 0, showingFrom = 0, showingTo = 0, lastSizeC = 0;\n        // bracketHighlighted is used to remember that a backet has been\n        // marked.\n        var bracketHighlighted;\n        // Tracks the maximum line length so that the horizontal scrollbar\n        // can be kept static when scrolling.\n        var maxLine = \"\", maxWidth, tabText = computeTabText();\n\n        // Initialize the content.\n        operation(function(){setValue(options.value || \"\"); updateInput = false;})();\n        var history = new History();\n\n        // Register our event handlers.\n        connect(scroller, \"mousedown\", operation(onMouseDown));\n        connect(scroller, \"dblclick\", operation(onDoubleClick));\n        connect(lineSpace, \"dragstart\", onDragStart);\n        connect(lineSpace, \"selectstart\", e_preventDefault);\n        // Gecko browsers fire contextmenu *after* opening the menu, at\n        // which point we can't mess with it anymore. Context menu is\n        // handled in onMouseDown for Gecko.\n        if (!gecko) connect(scroller, \"contextmenu\", onContextMenu);\n        connect(scroller, \"scroll\", function() {\n            updateDisplay([]);\n            if (options.fixedGutter) gutter.style.left = scroller.scrollLeft + \"px\";\n            if (options.onScroll) options.onScroll(instance);\n        });\n        connect(window, \"resize\", function() {updateDisplay(true);});\n        connect(input, \"keyup\", operation(onKeyUp));\n        connect(input, \"input\", fastPoll);\n        connect(input, \"keydown\", operation(onKeyDown));\n        connect(input, \"keypress\", operation(onKeyPress));\n        connect(input, \"focus\", onFocus);\n        connect(input, \"blur\", onBlur);\n\n        connect(scroller, \"dragenter\", e_stop);\n        connect(scroller, \"dragover\", e_stop);\n        connect(scroller, \"drop\", operation(onDrop));\n        connect(scroller, \"paste\", function(){focusInput(); fastPoll();});\n        connect(input, \"paste\", fastPoll);\n        connect(input, \"cut\", operation(function(){replaceSelection(\"\");}));\n\n        // IE throws unspecified error in certain cases, when\n        // trying to access activeElement before onload\n        var hasFocus; try { hasFocus = (targetDocument.activeElement == input); } catch(e) { }\n        if (hasFocus) setTimeout(onFocus, 20);\n        else onBlur();\n\n        function isLine(l) {return l >= 0 && l < doc.size;}\n        // The instance object that we'll return. Mostly calls out to\n        // local functions in the CodeMirror function. Some do some extra\n        // range checking and/or clipping. operation is used to wrap the\n        // call so that changes it makes are tracked, and the display is\n        // updated afterwards.\n        var instance = wrapper.CodeMirror = {\n            getValue: getValue,\n            setValue: operation(setValue),\n            getSelection: getSelection,\n            replaceSelection: operation(replaceSelection),\n            focus: function(){focusInput(); onFocus(); fastPoll();},\n            setOption: function(option, value) {\n                var oldVal = options[option];\n                options[option] = value;\n                if (option == \"mode\" || option == \"indentUnit\") loadMode();\n                else if (option == \"readOnly\" && value) {onBlur(); input.blur();}\n                else if (option == \"theme\") themeChanged();\n                else if (option == \"lineWrapping\" && oldVal != value) operation(wrappingChanged)();\n                else if (option == \"tabSize\") operation(tabsChanged)();\n                if (option == \"lineNumbers\" || option == \"gutter\" || option == \"firstLineNumber\" || option == \"theme\")\n                    operation(gutterChanged)();\n            },\n            getOption: function(option) {return options[option];},\n            undo: operation(undo),\n            redo: operation(redo),\n            indentLine: operation(function(n, dir) {\n                if (isLine(n)) indentLine(n, dir == null ? \"smart\" : dir ? \"add\" : \"subtract\");\n            }),\n            indentSelection: operation(indentSelected),\n            historySize: function() {return {undo: history.done.length, redo: history.undone.length};},\n            clearHistory: function() {history = new History();},\n            matchBrackets: operation(function(){matchBrackets(true);}),\n            getTokenAt: operation(function(pos) {\n                pos = clipPos(pos);\n                return getLine(pos.line).getTokenAt(mode, getStateBefore(pos.line), pos.ch);\n            }),\n            getStateAfter: function(line) {\n                line = clipLine(line == null ? doc.size - 1: line);\n                return getStateBefore(line + 1);\n            },\n            cursorCoords: function(start){\n                if (start == null) start = sel.inverted;\n                return pageCoords(start ? sel.from : sel.to);\n            },\n            charCoords: function(pos){return pageCoords(clipPos(pos));},\n            coordsChar: function(coords) {\n                var off = eltOffset(lineSpace);\n                return coordsChar(coords.x - off.left, coords.y - off.top);\n            },\n            markText: operation(markText),\n            setBookmark: setBookmark,\n            setMarker: operation(addGutterMarker),\n            clearMarker: operation(removeGutterMarker),\n            setLineClass: operation(setLineClass),\n            hideLine: operation(function(h) {return setLineHidden(h, true);}),\n            showLine: operation(function(h) {return setLineHidden(h, false);}),\n            onDeleteLine: function(line, f) {\n                if (typeof line == \"number\") {\n                    if (!isLine(line)) return null;\n                    line = getLine(line);\n                }\n                (line.handlers || (line.handlers = [])).push(f);\n                return line;\n            },\n            lineInfo: lineInfo,\n            addWidget: function(pos, node, scroll, vert, horiz) {\n                pos = localCoords(clipPos(pos));\n                var top = pos.yBot, left = pos.x;\n                node.style.position = \"absolute\";\n                code.appendChild(node);\n                if (vert == \"over\") top = pos.y;\n                else if (vert == \"near\") {\n                    var vspace = Math.max(scroller.offsetHeight, doc.height * textHeight()),\n                        hspace = Math.max(code.clientWidth, lineSpace.clientWidth) - paddingLeft();\n                    if (pos.yBot + node.offsetHeight > vspace && pos.y > node.offsetHeight)\n                        top = pos.y - node.offsetHeight;\n                    if (left + node.offsetWidth > hspace)\n                        left = hspace - node.offsetWidth;\n                }\n                node.style.top = (top + paddingTop()) + \"px\";\n                node.style.left = node.style.right = \"\";\n                if (horiz == \"right\") {\n                    left = code.clientWidth - node.offsetWidth;\n                    node.style.right = \"0px\";\n                } else {\n                    if (horiz == \"left\") left = 0;\n                    else if (horiz == \"middle\") left = (code.clientWidth - node.offsetWidth) / 2;\n                    node.style.left = (left + paddingLeft()) + \"px\";\n                }\n                if (scroll)\n                    scrollIntoView(left, top, left + node.offsetWidth, top + node.offsetHeight);\n            },\n\n            lineCount: function() {return doc.size;},\n            clipPos: clipPos,\n            getCursor: function(start) {\n                if (start == null) start = sel.inverted;\n                return copyPos(start ? sel.from : sel.to);\n            },\n            somethingSelected: function() {return !posEq(sel.from, sel.to);},\n            setCursor: operation(function(line, ch, user) {\n                if (ch == null && typeof line.line == \"number\") setCursor(line.line, line.ch, user);\n                else setCursor(line, ch, user);\n            }),\n            setSelection: operation(function(from, to, user) {\n                (user ? setSelectionUser : setSelection)(clipPos(from), clipPos(to || from));\n            }),\n            getLine: function(line) {if (isLine(line)) return getLine(line).text;},\n            getLineHandle: function(line) {if (isLine(line)) return getLine(line);},\n            setLine: operation(function(line, text) {\n                if (isLine(line)) replaceRange(text, {line: line, ch: 0}, {line: line, ch: getLine(line).text.length});\n            }),\n            removeLine: operation(function(line) {\n                if (isLine(line)) replaceRange(\"\", {line: line, ch: 0}, clipPos({line: line+1, ch: 0}));\n            }),\n            replaceRange: operation(replaceRange),\n            getRange: function(from, to) {return getRange(clipPos(from), clipPos(to));},\n\n            execCommand: function(cmd) {return commands[cmd](instance);},\n            // Stuff used by commands, probably not much use to outside code.\n            moveH: operation(moveH),\n            deleteH: operation(deleteH),\n            moveV: operation(moveV),\n            toggleOverwrite: function() {overwrite = !overwrite;},\n\n            posFromIndex: function(off) {\n                var lineNo = 0, ch;\n                doc.iter(0, doc.size, function(line) {\n                    var sz = line.text.length + 1;\n                    if (sz > off) { ch = off; return true; }\n                    off -= sz;\n                    ++lineNo;\n                });\n                return clipPos({line: lineNo, ch: ch});\n            },\n            indexFromPos: function (coords) {\n                if (coords.line < 0 || coords.ch < 0) return 0;\n                var index = coords.ch;\n                doc.iter(0, coords.line, function (line) {\n                    index += line.text.length + 1;\n                });\n                return index;\n            },\n\n            operation: function(f){return operation(f)();},\n            refresh: function(){updateDisplay(true);},\n            getInputField: function(){return input;},\n            getWrapperElement: function(){return wrapper;},\n            getScrollerElement: function(){return scroller;},\n            getGutterElement: function(){return gutter;}\n        };\n\n        function getLine(n) { return getLineAt(doc, n); }\n        function updateLineHeight(line, height) {\n            gutterDirty = true;\n            var diff = height - line.height;\n            for (var n = line; n; n = n.parent) n.height += diff;\n        }\n\n        function setValue(code) {\n            var top = {line: 0, ch: 0};\n            updateLines(top, {line: doc.size - 1, ch: getLine(doc.size-1).text.length},\n                splitLines(code), top, top);\n            updateInput = true;\n        }\n        function getValue(code) {\n            var text = [];\n            doc.iter(0, doc.size, function(line) { text.push(line.text); });\n            return text.join(\"\\n\");\n        }\n\n        function onMouseDown(e) {\n            setShift(e.shiftKey);\n            // Check whether this is a click in a widget\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\n                if (n.parentNode == code && n != mover) return;\n\n            // See if this is a click in the gutter\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\n                if (n.parentNode == gutterText) {\n                    if (options.onGutterClick)\n                        options.onGutterClick(instance, indexOf(gutterText.childNodes, n) + showingFrom, e);\n                    return e_preventDefault(e);\n                }\n\n            var start = posFromMouse(e);\n\n            switch (e_button(e)) {\n                case 3:\n                    if (gecko && !mac) onContextMenu(e);\n                    return;\n                case 2:\n                    if (start) setCursor(start.line, start.ch, true);\n                    return;\n            }\n            // For button 1, if it was clicked inside the editor\n            // (posFromMouse returning non-null), we have to adjust the\n            // selection.\n            if (!start) {if (e_target(e) == scroller) e_preventDefault(e); return;}\n\n            if (!focused) onFocus();\n\n            var now = +new Date;\n            if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) {\n                e_preventDefault(e);\n                setTimeout(focusInput, 20);\n                return selectLine(start.line);\n            } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) {\n                lastDoubleClick = {time: now, pos: start};\n                e_preventDefault(e);\n                return selectWordAt(start);\n            } else { lastClick = {time: now, pos: start}; }\n\n            var last = start, going;\n            if (dragAndDrop && !posEq(sel.from, sel.to) &&\n                !posLess(start, sel.from) && !posLess(sel.to, start)) {\n                // Let the drag handler handle this.\n                if (webkit) lineSpace.draggable = true;\n                var up = connect(targetDocument, \"mouseup\", operation(function(e2) {\n                    if (webkit) lineSpace.draggable = false;\n                    draggingText = false;\n                    up();\n                    if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {\n                        e_preventDefault(e2);\n                        setCursor(start.line, start.ch, true);\n                        focusInput();\n                    }\n                }), true);\n                draggingText = true;\n                return;\n            }\n            e_preventDefault(e);\n            setCursor(start.line, start.ch, true);\n\n            function extend(e) {\n                var cur = posFromMouse(e, true);\n                if (cur && !posEq(cur, last)) {\n                    if (!focused) onFocus();\n                    last = cur;\n                    setSelectionUser(start, cur);\n                    updateInput = false;\n                    var visible = visibleLines();\n                    if (cur.line >= visible.to || cur.line < visible.from)\n                        going = setTimeout(operation(function(){extend(e);}), 150);\n                }\n            }\n\n            var move = connect(targetDocument, \"mousemove\", operation(function(e) {\n                clearTimeout(going);\n                e_preventDefault(e);\n                extend(e);\n            }), true);\n            var up = connect(targetDocument, \"mouseup\", operation(function(e) {\n                clearTimeout(going);\n                var cur = posFromMouse(e);\n                if (cur) setSelectionUser(start, cur);\n                e_preventDefault(e);\n                focusInput();\n                updateInput = true;\n                move(); up();\n            }), true);\n        }\n        function onDoubleClick(e) {\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\n                if (n.parentNode == gutterText) return e_preventDefault(e);\n            var start = posFromMouse(e);\n            if (!start) return;\n            lastDoubleClick = {time: +new Date, pos: start};\n            e_preventDefault(e);\n            selectWordAt(start);\n        }\n        function onDrop(e) {\n            e.preventDefault();\n            var pos = posFromMouse(e, true), files = e.dataTransfer.files;\n            if (!pos || options.readOnly) return;\n            if (files && files.length && window.FileReader && window.File) {\n                function loadFile(file, i) {\n                    var reader = new FileReader;\n                    reader.onload = function() {\n                        text[i] = reader.result;\n                        if (++read == n) {\n                            pos = clipPos(pos);\n                            operation(function() {\n                                var end = replaceRange(text.join(\"\"), pos, pos);\n                                setSelectionUser(pos, end);\n                            })();\n                        }\n                    };\n                    reader.readAsText(file);\n                }\n                var n = files.length, text = Array(n), read = 0;\n                for (var i = 0; i < n; ++i) loadFile(files[i], i);\n            }\n            else {\n                try {\n                    var text = e.dataTransfer.getData(\"Text\");\n                    if (text) {\n                        var end = replaceRange(text, pos, pos);\n                        var curFrom = sel.from, curTo = sel.to;\n                        setSelectionUser(pos, end);\n                        if (draggingText) replaceRange(\"\", curFrom, curTo);\n                        focusInput();\n                    }\n                }\n                catch(e){}\n            }\n        }\n        function onDragStart(e) {\n            var txt = getSelection();\n            // This will reset escapeElement\n            htmlEscape(txt);\n            e.dataTransfer.setDragImage(escapeElement, 0, 0);\n            e.dataTransfer.setData(\"Text\", txt);\n        }\n        function handleKeyBinding(e) {\n            var name = keyNames[e.keyCode], next = keyMap[options.keyMap].auto, bound, dropShift;\n            if (name == null || e.altGraphKey) {\n                if (next) options.keyMap = next;\n                return null;\n            }\n            if (e.altKey) name = \"Alt-\" + name;\n            if (e.ctrlKey) name = \"Ctrl-\" + name;\n            if (e.metaKey) name = \"Cmd-\" + name;\n            if (e.shiftKey && (bound = lookupKey(\"Shift-\" + name, options.extraKeys, options.keyMap))) {\n                dropShift = true;\n            } else {\n                bound = lookupKey(name, options.extraKeys, options.keyMap);\n            }\n            if (typeof bound == \"string\") {\n                if (commands.propertyIsEnumerable(bound)) bound = commands[bound];\n                else bound = null;\n            }\n            if (next && (bound || !isModifierKey(e))) options.keyMap = next;\n            if (!bound) return false;\n            if (dropShift) {\n                var prevShift = shiftSelecting;\n                shiftSelecting = null;\n                bound(instance);\n                shiftSelecting = prevShift;\n            } else bound(instance);\n            e_preventDefault(e);\n            return true;\n        }\n        var lastStoppedKey = null;\n        function onKeyDown(e) {\n            if (!focused) onFocus();\n            var code = e.keyCode;\n            // IE does strange things with escape.\n            if (ie && code == 27) { e.returnValue = false; }\n            setShift(code == 16 || e.shiftKey);\n            // First give onKeyEvent option a chance to handle this.\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\n            var handled = handleKeyBinding(e);\n            if (window.opera) {\n                lastStoppedKey = handled ? e.keyCode : null;\n                // Opera has no cut event... we try to at least catch the key combo\n                if (!handled && (mac ? e.metaKey : e.ctrlKey) && e.keyCode == 88)\n                    replaceSelection(\"\");\n            }\n        }\n        function onKeyPress(e) {\n            if (window.opera && e.keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\n            if (window.opera && !e.which && handleKeyBinding(e)) return;\n            if (options.electricChars && mode.electricChars) {\n                var ch = String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode);\n                if (mode.electricChars.indexOf(ch) > -1)\n                    setTimeout(operation(function() {indentLine(sel.to.line, \"smart\");}), 75);\n            }\n            fastPoll();\n        }\n        function onKeyUp(e) {\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\n            if (e.keyCode == 16) shiftSelecting = null;\n        }\n\n        function onFocus() {\n            if (options.readOnly) return;\n            if (!focused) {\n                if (options.onFocus) options.onFocus(instance);\n                focused = true;\n                if (wrapper.className.search(/\\bCodeMirror-focused\\b/) == -1)\n                    wrapper.className += \" CodeMirror-focused\";\n                if (!leaveInputAlone) resetInput(true);\n            }\n            slowPoll();\n            restartBlink();\n        }\n        function onBlur() {\n            if (focused) {\n                if (options.onBlur) options.onBlur(instance);\n                focused = false;\n                wrapper.className = wrapper.className.replace(\" CodeMirror-focused\", \"\");\n            }\n            clearInterval(blinker);\n            setTimeout(function() {if (!focused) shiftSelecting = null;}, 150);\n        }\n\n        // Replace the range from from to to by the strings in newText.\n        // Afterwards, set the selection to selFrom, selTo.\n        function updateLines(from, to, newText, selFrom, selTo) {\n            if (history) {\n                var old = [];\n                doc.iter(from.line, to.line + 1, function(line) { old.push(line.text); });\n                history.addChange(from.line, newText.length, old);\n                while (history.done.length > options.undoDepth) history.done.shift();\n            }\n            updateLinesNoUndo(from, to, newText, selFrom, selTo);\n        }\n        function unredoHelper(from, to) {\n            var change = from.pop();\n            if (change) {\n                var replaced = [], end = change.start + change.added;\n                doc.iter(change.start, end, function(line) { replaced.push(line.text); });\n                to.push({start: change.start, added: change.old.length, old: replaced});\n                var pos = clipPos({line: change.start + change.old.length - 1,\n                    ch: editEnd(replaced[replaced.length-1], change.old[change.old.length-1])});\n                updateLinesNoUndo({line: change.start, ch: 0}, {line: end - 1, ch: getLine(end-1).text.length}, change.old, pos, pos);\n                updateInput = true;\n            }\n        }\n        function undo() {unredoHelper(history.done, history.undone);}\n        function redo() {unredoHelper(history.undone, history.done);}\n\n        function updateLinesNoUndo(from, to, newText, selFrom, selTo) {\n            var recomputeMaxLength = false, maxLineLength = maxLine.length;\n            if (!options.lineWrapping)\n                doc.iter(from.line, to.line, function(line) {\n                    if (line.text.length == maxLineLength) {recomputeMaxLength = true; return true;}\n                });\n            if (from.line != to.line || newText.length > 1) gutterDirty = true;\n\n            var nlines = to.line - from.line, firstLine = getLine(from.line), lastLine = getLine(to.line);\n            // First adjust the line structure, taking some care to leave highlighting intact.\n            if (from.ch == 0 && to.ch == 0 && newText[newText.length - 1] == \"\") {\n                // This is a whole-line replace. Treated specially to make\n                // sure line objects move the way they are supposed to.\n                var added = [], prevLine = null;\n                if (from.line) {\n                    prevLine = getLine(from.line - 1);\n                    prevLine.fixMarkEnds(lastLine);\n                } else lastLine.fixMarkStarts();\n                for (var i = 0, e = newText.length - 1; i < e; ++i)\n                    added.push(Line.inheritMarks(newText[i], prevLine));\n                if (nlines) doc.remove(from.line, nlines, callbacks);\n                if (added.length) doc.insert(from.line, added);\n            } else if (firstLine == lastLine) {\n                if (newText.length == 1)\n                    firstLine.replace(from.ch, to.ch, newText[0]);\n                else {\n                    lastLine = firstLine.split(to.ch, newText[newText.length-1]);\n                    firstLine.replace(from.ch, null, newText[0]);\n                    firstLine.fixMarkEnds(lastLine);\n                    var added = [];\n                    for (var i = 1, e = newText.length - 1; i < e; ++i)\n                        added.push(Line.inheritMarks(newText[i], firstLine));\n                    added.push(lastLine);\n                    doc.insert(from.line + 1, added);\n                }\n            } else if (newText.length == 1) {\n                firstLine.replace(from.ch, null, newText[0]);\n                lastLine.replace(null, to.ch, \"\");\n                firstLine.append(lastLine);\n                doc.remove(from.line + 1, nlines, callbacks);\n            } else {\n                var added = [];\n                firstLine.replace(from.ch, null, newText[0]);\n                lastLine.replace(null, to.ch, newText[newText.length-1]);\n                firstLine.fixMarkEnds(lastLine);\n                for (var i = 1, e = newText.length - 1; i < e; ++i)\n                    added.push(Line.inheritMarks(newText[i], firstLine));\n                if (nlines > 1) doc.remove(from.line + 1, nlines - 1, callbacks);\n                doc.insert(from.line + 1, added);\n            }\n            if (options.lineWrapping) {\n                var perLine = scroller.clientWidth / charWidth() - 3;\n                doc.iter(from.line, from.line + newText.length, function(line) {\n                    if (line.hidden) return;\n                    var guess = Math.ceil(line.text.length / perLine) || 1;\n                    if (guess != line.height) updateLineHeight(line, guess);\n                });\n            } else {\n                doc.iter(from.line, i + newText.length, function(line) {\n                    var l = line.text;\n                    if (l.length > maxLineLength) {\n                        maxLine = l; maxLineLength = l.length; maxWidth = null;\n                        recomputeMaxLength = false;\n                    }\n                });\n                if (recomputeMaxLength) {\n                    maxLineLength = 0; maxLine = \"\"; maxWidth = null;\n                    doc.iter(0, doc.size, function(line) {\n                        var l = line.text;\n                        if (l.length > maxLineLength) {\n                            maxLineLength = l.length; maxLine = l;\n                        }\n                    });\n                }\n            }\n\n            // Add these lines to the work array, so that they will be\n            // highlighted. Adjust work lines if lines were added/removed.\n            var newWork = [], lendiff = newText.length - nlines - 1;\n            for (var i = 0, l = work.length; i < l; ++i) {\n                var task = work[i];\n                if (task < from.line) newWork.push(task);\n                else if (task > to.line) newWork.push(task + lendiff);\n            }\n            var hlEnd = from.line + Math.min(newText.length, 500);\n            highlightLines(from.line, hlEnd);\n            newWork.push(hlEnd);\n            work = newWork;\n            startWorker(100);\n            // Remember that these lines changed, for updating the display\n            changes.push({from: from.line, to: to.line + 1, diff: lendiff});\n            var changeObj = {from: from, to: to, text: newText};\n            if (textChanged) {\n                for (var cur = textChanged; cur.next; cur = cur.next) {}\n                cur.next = changeObj;\n            } else textChanged = changeObj;\n\n            // Update the selection\n            function updateLine(n) {return n <= Math.min(to.line, to.line + lendiff) ? n : n + lendiff;}\n            setSelection(selFrom, selTo, updateLine(sel.from.line), updateLine(sel.to.line));\n\n            // Make sure the scroll-size div has the correct height.\n            code.style.height = (doc.height * textHeight() + 2 * paddingTop()) + \"px\";\n        }\n\n        function replaceRange(code, from, to) {\n            from = clipPos(from);\n            if (!to) to = from; else to = clipPos(to);\n            code = splitLines(code);\n            function adjustPos(pos) {\n                if (posLess(pos, from)) return pos;\n                if (!posLess(to, pos)) return end;\n                var line = pos.line + code.length - (to.line - from.line) - 1;\n                var ch = pos.ch;\n                if (pos.line == to.line)\n                    ch += code[code.length-1].length - (to.ch - (to.line == from.line ? from.ch : 0));\n                return {line: line, ch: ch};\n            }\n            var end;\n            replaceRange1(code, from, to, function(end1) {\n                end = end1;\n                return {from: adjustPos(sel.from), to: adjustPos(sel.to)};\n            });\n            return end;\n        }\n        function replaceSelection(code, collapse) {\n            replaceRange1(splitLines(code), sel.from, sel.to, function(end) {\n                if (collapse == \"end\") return {from: end, to: end};\n                else if (collapse == \"start\") return {from: sel.from, to: sel.from};\n                else return {from: sel.from, to: end};\n            });\n        }\n        function replaceRange1(code, from, to, computeSel) {\n            var endch = code.length == 1 ? code[0].length + from.ch : code[code.length-1].length;\n            var newSel = computeSel({line: from.line + code.length - 1, ch: endch});\n            updateLines(from, to, code, newSel.from, newSel.to);\n        }\n\n        function getRange(from, to) {\n            var l1 = from.line, l2 = to.line;\n            if (l1 == l2) return getLine(l1).text.slice(from.ch, to.ch);\n            var code = [getLine(l1).text.slice(from.ch)];\n            doc.iter(l1 + 1, l2, function(line) { code.push(line.text); });\n            code.push(getLine(l2).text.slice(0, to.ch));\n            return code.join(\"\\n\");\n        }\n        function getSelection() {\n            return getRange(sel.from, sel.to);\n        }\n\n        var pollingFast = false; // Ensures slowPoll doesn't cancel fastPoll\n        function slowPoll() {\n            if (pollingFast) return;\n            poll.set(options.pollInterval, function() {\n                startOperation();\n                readInput();\n                if (focused) slowPoll();\n                endOperation();\n            });\n        }\n        function fastPoll() {\n            var missed = false;\n            pollingFast = true;\n            function p() {\n                startOperation();\n                var changed = readInput();\n                if (!changed && !missed) {missed = true; poll.set(60, p);}\n                else {pollingFast = false; slowPoll();}\n                endOperation();\n            }\n            poll.set(20, p);\n        }\n\n        // Previnput is a hack to work with IME. If we reset the textarea\n        // on every change, that breaks IME. So we look for changes\n        // compared to the previous content instead. (Modern browsers have\n        // events that indicate IME taking place, but these are not widely\n        // supported or compatible enough yet to rely on.)\n        var prevInput = \"\";\n        function readInput() {\n            if (leaveInputAlone || !focused || hasSelection(input)) return false;\n            var text = input.value;\n            if (text == prevInput) return false;\n            shiftSelecting = null;\n            var same = 0, l = Math.min(prevInput.length, text.length);\n            while (same < l && prevInput[same] == text[same]) ++same;\n            if (same < prevInput.length)\n                sel.from = {line: sel.from.line, ch: sel.from.ch - (prevInput.length - same)};\n            else if (overwrite && posEq(sel.from, sel.to))\n                sel.to = {line: sel.to.line, ch: Math.min(getLine(sel.to.line).text.length, sel.to.ch + (text.length - same))};\n            replaceSelection(text.slice(same), \"end\");\n            prevInput = text;\n            return true;\n        }\n        function resetInput(user) {\n            if (!posEq(sel.from, sel.to)) {\n                prevInput = \"\";\n                input.value = getSelection();\n                input.select();\n            } else if (user) prevInput = input.value = \"\";\n        }\n\n        function focusInput() {\n            if (!options.readOnly) input.focus();\n        }\n\n        function scrollEditorIntoView() {\n            if (!cursor.getBoundingClientRect) return;\n            var rect = cursor.getBoundingClientRect();\n            // IE returns bogus coordinates when the instance sits inside of an iframe and the cursor is hidden\n            if (ie && rect.top == rect.bottom) return;\n            var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);\n            if (rect.top < 0 || rect.bottom > winH) cursor.scrollIntoView();\n        }\n        function scrollCursorIntoView() {\n            var cursor = localCoords(sel.inverted ? sel.from : sel.to);\n            var x = options.lineWrapping ? Math.min(cursor.x, lineSpace.offsetWidth) : cursor.x;\n            return scrollIntoView(x, cursor.y, x, cursor.yBot);\n        }\n        function scrollIntoView(x1, y1, x2, y2) {\n            var pl = paddingLeft(), pt = paddingTop(), lh = textHeight();\n            y1 += pt; y2 += pt; x1 += pl; x2 += pl;\n            var screen = scroller.clientHeight, screentop = scroller.scrollTop, scrolled = false, result = true;\n            if (y1 < screentop) {scroller.scrollTop = Math.max(0, y1 - 2*lh); scrolled = true;}\n            else if (y2 > screentop + screen) {scroller.scrollTop = y2 + lh - screen; scrolled = true;}\n\n            var screenw = scroller.clientWidth, screenleft = scroller.scrollLeft;\n            var gutterw = options.fixedGutter ? gutter.clientWidth : 0;\n            if (x1 < screenleft + gutterw) {\n                if (x1 < 50) x1 = 0;\n                scroller.scrollLeft = Math.max(0, x1 - 10 - gutterw);\n                scrolled = true;\n            }\n            else if (x2 > screenw + screenleft - 3) {\n                scroller.scrollLeft = x2 + 10 - screenw;\n                scrolled = true;\n                if (x2 > code.clientWidth) result = false;\n            }\n            if (scrolled && options.onScroll) options.onScroll(instance);\n            return result;\n        }\n\n        function visibleLines() {\n            var lh = textHeight(), top = scroller.scrollTop - paddingTop();\n            var from_height = Math.max(0, Math.floor(top / lh));\n            var to_height = Math.ceil((top + scroller.clientHeight) / lh);\n            return {from: lineAtHeight(doc, from_height),\n                to: lineAtHeight(doc, to_height)};\n        }\n        // Uses a set of changes plus the current scroll position to\n        // determine which DOM updates have to be made, and makes the\n        // updates.\n        function updateDisplay(changes, suppressCallback) {\n            if (!scroller.clientWidth) {\n                showingFrom = showingTo = displayOffset = 0;\n                return;\n            }\n            // Compute the new visible window\n            var visible = visibleLines();\n            // Bail out if the visible area is already rendered and nothing changed.\n            if (changes !== true && changes.length == 0 && visible.from >= showingFrom && visible.to <= showingTo) return;\n            var from = Math.max(visible.from - 100, 0), to = Math.min(doc.size, visible.to + 100);\n            if (showingFrom < from && from - showingFrom < 20) from = showingFrom;\n            if (showingTo > to && showingTo - to < 20) to = Math.min(doc.size, showingTo);\n\n            // Create a range of theoretically intact lines, and punch holes\n            // in that using the change info.\n            var intact = changes === true ? [] :\n                computeIntact([{from: showingFrom, to: showingTo, domStart: 0}], changes);\n            // Clip off the parts that won't be visible\n            var intactLines = 0;\n            for (var i = 0; i < intact.length; ++i) {\n                var range = intact[i];\n                if (range.from < from) {range.domStart += (from - range.from); range.from = from;}\n                if (range.to > to) range.to = to;\n                if (range.from >= range.to) intact.splice(i--, 1);\n                else intactLines += range.to - range.from;\n            }\n            if (intactLines == to - from) return;\n            intact.sort(function(a, b) {return a.domStart - b.domStart;});\n\n            var th = textHeight(), gutterDisplay = gutter.style.display;\n            lineDiv.style.display = gutter.style.display = \"none\";\n            patchDisplay(from, to, intact);\n            lineDiv.style.display = \"\";\n\n            // Position the mover div to align with the lines it's supposed\n            // to be showing (which will cover the visible display)\n            var different = from != showingFrom || to != showingTo || lastSizeC != scroller.clientHeight + th;\n            // This is just a bogus formula that detects when the editor is\n            // resized or the font size changes.\n            if (different) lastSizeC = scroller.clientHeight + th;\n            showingFrom = from; showingTo = to;\n            displayOffset = heightAtLine(doc, from);\n            mover.style.top = (displayOffset * th) + \"px\";\n            code.style.height = (doc.height * th + 2 * paddingTop()) + \"px\";\n\n            // Since this is all rather error prone, it is honoured with the\n            // only assertion in the whole file.\n            if (lineDiv.childNodes.length != showingTo - showingFrom)\n                throw new Error(\"BAD PATCH! \" + JSON.stringify(intact) + \" size=\" + (showingTo - showingFrom) +\n                    \" nodes=\" + lineDiv.childNodes.length);\n\n            if (options.lineWrapping) {\n                maxWidth = scroller.clientWidth;\n                var curNode = lineDiv.firstChild;\n                doc.iter(showingFrom, showingTo, function(line) {\n                    if (!line.hidden) {\n                        var height = Math.round(curNode.offsetHeight / th) || 1;\n                        if (line.height != height) {updateLineHeight(line, height); gutterDirty = true;}\n                    }\n                    curNode = curNode.nextSibling;\n                });\n            } else {\n                if (maxWidth == null) maxWidth = stringWidth(maxLine);\n                if (maxWidth > scroller.clientWidth) {\n                    lineSpace.style.width = maxWidth + \"px\";\n                    // Needed to prevent odd wrapping/hiding of widgets placed in here.\n                    code.style.width = \"\";\n                    code.style.width = scroller.scrollWidth + \"px\";\n                } else {\n                    lineSpace.style.width = code.style.width = \"\";\n                }\n            }\n            gutter.style.display = gutterDisplay;\n            if (different || gutterDirty) updateGutter();\n            updateCursor();\n            if (!suppressCallback && options.onUpdate) options.onUpdate(instance);\n            return true;\n        }\n\n        function computeIntact(intact, changes) {\n            for (var i = 0, l = changes.length || 0; i < l; ++i) {\n                var change = changes[i], intact2 = [], diff = change.diff || 0;\n                for (var j = 0, l2 = intact.length; j < l2; ++j) {\n                    var range = intact[j];\n                    if (change.to <= range.from && change.diff)\n                        intact2.push({from: range.from + diff, to: range.to + diff,\n                            domStart: range.domStart});\n                    else if (change.to <= range.from || change.from >= range.to)\n                        intact2.push(range);\n                    else {\n                        if (change.from > range.from)\n                            intact2.push({from: range.from, to: change.from, domStart: range.domStart});\n                        if (change.to < range.to)\n                            intact2.push({from: change.to + diff, to: range.to + diff,\n                                domStart: range.domStart + (change.to - range.from)});\n                    }\n                }\n                intact = intact2;\n            }\n            return intact;\n        }\n\n        function patchDisplay(from, to, intact) {\n            // The first pass removes the DOM nodes that aren't intact.\n            if (!intact.length) lineDiv.innerHTML = \"\";\n            else {\n                function killNode(node) {\n                    var tmp = node.nextSibling;\n                    node.parentNode.removeChild(node);\n                    return tmp;\n                }\n                var domPos = 0, curNode = lineDiv.firstChild, n;\n                for (var i = 0; i < intact.length; ++i) {\n                    var cur = intact[i];\n                    while (cur.domStart > domPos) {curNode = killNode(curNode); domPos++;}\n                    for (var j = 0, e = cur.to - cur.from; j < e; ++j) {curNode = curNode.nextSibling; domPos++;}\n                }\n                while (curNode) curNode = killNode(curNode);\n            }\n            // This pass fills in the lines that actually changed.\n            var nextIntact = intact.shift(), curNode = lineDiv.firstChild, j = from;\n            var sfrom = sel.from.line, sto = sel.to.line, inSel = sfrom < from && sto >= from;\n            var scratch = targetDocument.createElement(\"div\"), newElt;\n            doc.iter(from, to, function(line) {\n                var ch1 = null, ch2 = null;\n                if (inSel) {\n                    ch1 = 0;\n                    if (sto == j) {inSel = false; ch2 = sel.to.ch;}\n                } else if (sfrom == j) {\n                    if (sto == j) {ch1 = sel.from.ch; ch2 = sel.to.ch;}\n                    else {inSel = true; ch1 = sel.from.ch;}\n                }\n                if (nextIntact && nextIntact.to == j) nextIntact = intact.shift();\n                if (!nextIntact || nextIntact.from > j) {\n                    if (line.hidden) scratch.innerHTML = \"<pre></pre>\";\n                    else scratch.innerHTML = line.getHTML(ch1, ch2, true, tabText);\n                    lineDiv.insertBefore(scratch.firstChild, curNode);\n                } else {\n                    curNode = curNode.nextSibling;\n                }\n                ++j;\n            });\n        }\n\n        function updateGutter() {\n            if (!options.gutter && !options.lineNumbers) return;\n            var hText = mover.offsetHeight, hEditor = scroller.clientHeight;\n            gutter.style.height = (hText - hEditor < 2 ? hEditor : hText) + \"px\";\n            var html = [], i = showingFrom;\n            doc.iter(showingFrom, Math.max(showingTo, showingFrom + 1), function(line) {\n                if (line.hidden) {\n                    html.push(\"<pre></pre>\");\n                } else {\n                    var marker = line.gutterMarker;\n                    var text = options.lineNumbers ? i + options.firstLineNumber : null;\n                    if (marker && marker.text)\n                        text = marker.text.replace(\"%N%\", text != null ? text : \"\");\n                    else if (text == null)\n                        text = \"\\u00a0\";\n                    html.push((marker && marker.style ? '<pre class=\"' + marker.style + '\">' : \"<pre>\"), text);\n                    for (var j = 1; j < line.height; ++j) html.push(\"<br/>&#160;\");\n                    html.push(\"</pre>\");\n                }\n                ++i;\n            });\n            gutter.style.display = \"none\";\n            gutterText.innerHTML = html.join(\"\");\n            var minwidth = String(doc.size).length, firstNode = gutterText.firstChild, val = eltText(firstNode), pad = \"\";\n            while (val.length + pad.length < minwidth) pad += \"\\u00a0\";\n            if (pad) firstNode.insertBefore(targetDocument.createTextNode(pad), firstNode.firstChild);\n            gutter.style.display = \"\";\n            lineSpace.style.marginLeft = gutter.offsetWidth + \"px\";\n            gutterDirty = false;\n        }\n        function updateCursor() {\n            var head = sel.inverted ? sel.from : sel.to, lh = textHeight();\n            var pos = localCoords(head, true);\n            var wrapOff = eltOffset(wrapper), lineOff = eltOffset(lineDiv);\n            inputDiv.style.top = (pos.y + lineOff.top - wrapOff.top) + \"px\";\n            inputDiv.style.left = (pos.x + lineOff.left - wrapOff.left) + \"px\";\n            if (posEq(sel.from, sel.to)) {\n                cursor.style.top = pos.y + \"px\";\n                cursor.style.left = (options.lineWrapping ? Math.min(pos.x, lineSpace.offsetWidth) : pos.x) + \"px\";\n                cursor.style.display = \"\";\n            }\n            else cursor.style.display = \"none\";\n        }\n\n        function setShift(val) {\n            if (val) shiftSelecting = shiftSelecting || (sel.inverted ? sel.to : sel.from);\n            else shiftSelecting = null;\n        }\n        function setSelectionUser(from, to) {\n            var sh = shiftSelecting && clipPos(shiftSelecting);\n            if (sh) {\n                if (posLess(sh, from)) from = sh;\n                else if (posLess(to, sh)) to = sh;\n            }\n            setSelection(from, to);\n            userSelChange = true;\n        }\n        // Update the selection. Last two args are only used by\n        // updateLines, since they have to be expressed in the line\n        // numbers before the update.\n        function setSelection(from, to, oldFrom, oldTo) {\n            goalColumn = null;\n            if (oldFrom == null) {oldFrom = sel.from.line; oldTo = sel.to.line;}\n            if (posEq(sel.from, from) && posEq(sel.to, to)) return;\n            if (posLess(to, from)) {var tmp = to; to = from; from = tmp;}\n\n            // Skip over hidden lines.\n            if (from.line != oldFrom) from = skipHidden(from, oldFrom, sel.from.ch);\n            if (to.line != oldTo) to = skipHidden(to, oldTo, sel.to.ch);\n\n            if (posEq(from, to)) sel.inverted = false;\n            else if (posEq(from, sel.to)) sel.inverted = false;\n            else if (posEq(to, sel.from)) sel.inverted = true;\n\n            // Some ugly logic used to only mark the lines that actually did\n            // see a change in selection as changed, rather than the whole\n            // selected range.\n            if (posEq(from, to)) {\n                if (!posEq(sel.from, sel.to))\n                    changes.push({from: oldFrom, to: oldTo + 1});\n            }\n            else if (posEq(sel.from, sel.to)) {\n                changes.push({from: from.line, to: to.line + 1});\n            }\n            else {\n                if (!posEq(from, sel.from)) {\n                    if (from.line < oldFrom)\n                        changes.push({from: from.line, to: Math.min(to.line, oldFrom) + 1});\n                    else\n                        changes.push({from: oldFrom, to: Math.min(oldTo, from.line) + 1});\n                }\n                if (!posEq(to, sel.to)) {\n                    if (to.line < oldTo)\n                        changes.push({from: Math.max(oldFrom, from.line), to: oldTo + 1});\n                    else\n                        changes.push({from: Math.max(from.line, oldTo), to: to.line + 1});\n                }\n            }\n            sel.from = from; sel.to = to;\n            selectionChanged = true;\n        }\n        function skipHidden(pos, oldLine, oldCh) {\n            function getNonHidden(dir) {\n                var lNo = pos.line + dir, end = dir == 1 ? doc.size : -1;\n                while (lNo != end) {\n                    var line = getLine(lNo);\n                    if (!line.hidden) {\n                        var ch = pos.ch;\n                        if (ch > oldCh || ch > line.text.length) ch = line.text.length;\n                        return {line: lNo, ch: ch};\n                    }\n                    lNo += dir;\n                }\n            }\n            var line = getLine(pos.line);\n            if (!line.hidden) return pos;\n            if (pos.line >= oldLine) return getNonHidden(1) || getNonHidden(-1);\n            else return getNonHidden(-1) || getNonHidden(1);\n        }\n        function setCursor(line, ch, user) {\n            var pos = clipPos({line: line, ch: ch || 0});\n            (user ? setSelectionUser : setSelection)(pos, pos);\n        }\n\n        function clipLine(n) {return Math.max(0, Math.min(n, doc.size-1));}\n        function clipPos(pos) {\n            if (pos.line < 0) return {line: 0, ch: 0};\n            if (pos.line >= doc.size) return {line: doc.size-1, ch: getLine(doc.size-1).text.length};\n            var ch = pos.ch, linelen = getLine(pos.line).text.length;\n            if (ch == null || ch > linelen) return {line: pos.line, ch: linelen};\n            else if (ch < 0) return {line: pos.line, ch: 0};\n            else return pos;\n        }\n\n        function findPosH(dir, unit) {\n            var end = sel.inverted ? sel.from : sel.to, line = end.line, ch = end.ch;\n            var lineObj = getLine(line);\n            function findNextLine() {\n                for (var l = line + dir, e = dir < 0 ? -1 : doc.size; l != e; l += dir) {\n                    var lo = getLine(l);\n                    if (!lo.hidden) { line = l; lineObj = lo; return true; }\n                }\n            }\n            function moveOnce(boundToLine) {\n                if (ch == (dir < 0 ? 0 : lineObj.text.length)) {\n                    if (!boundToLine && findNextLine()) ch = dir < 0 ? lineObj.text.length : 0;\n                    else return false;\n                } else ch += dir;\n                return true;\n            }\n            if (unit == \"char\") moveOnce();\n            else if (unit == \"column\") moveOnce(true);\n            else if (unit == \"word\") {\n                var sawWord = false;\n                for (;;) {\n                    if (dir < 0) if (!moveOnce()) break;\n                    if (isWordChar(lineObj.text.charAt(ch))) sawWord = true;\n                    else if (sawWord) {if (dir < 0) {dir = 1; moveOnce();} break;}\n                    if (dir > 0) if (!moveOnce()) break;\n                }\n            }\n            return {line: line, ch: ch};\n        }\n        function moveH(dir, unit) {\n            var pos = dir < 0 ? sel.from : sel.to;\n            if (shiftSelecting || posEq(sel.from, sel.to)) pos = findPosH(dir, unit);\n            setCursor(pos.line, pos.ch, true);\n        }\n        function deleteH(dir, unit) {\n            if (!posEq(sel.from, sel.to)) replaceRange(\"\", sel.from, sel.to);\n            else if (dir < 0) replaceRange(\"\", findPosH(dir, unit), sel.to);\n            else replaceRange(\"\", sel.from, findPosH(dir, unit));\n            userSelChange = true;\n        }\n        var goalColumn = null;\n        function moveV(dir, unit) {\n            var dist = 0, pos = localCoords(sel.inverted ? sel.from : sel.to, true);\n            if (goalColumn != null) pos.x = goalColumn;\n            if (unit == \"page\") dist = scroller.clientHeight;\n            else if (unit == \"line\") dist = textHeight();\n            var target = coordsChar(pos.x, pos.y + dist * dir + 2);\n            setCursor(target.line, target.ch, true);\n            goalColumn = pos.x;\n        }\n\n        function selectWordAt(pos) {\n            var line = getLine(pos.line).text;\n            var start = pos.ch, end = pos.ch;\n            while (start > 0 && isWordChar(line.charAt(start - 1))) --start;\n            while (end < line.length && isWordChar(line.charAt(end))) ++end;\n            setSelectionUser({line: pos.line, ch: start}, {line: pos.line, ch: end});\n        }\n        function selectLine(line) {\n            setSelectionUser({line: line, ch: 0}, {line: line, ch: getLine(line).text.length});\n        }\n        function indentSelected(mode) {\n            if (posEq(sel.from, sel.to)) return indentLine(sel.from.line, mode);\n            var e = sel.to.line - (sel.to.ch ? 0 : 1);\n            for (var i = sel.from.line; i <= e; ++i) indentLine(i, mode);\n        }\n\n        function indentLine(n, how) {\n            if (!how) how = \"add\";\n            if (how == \"smart\") {\n                if (!mode.indent) how = \"prev\";\n                else var state = getStateBefore(n);\n            }\n\n            var line = getLine(n), curSpace = line.indentation(options.tabSize),\n                curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n            if (how == \"prev\") {\n                if (n) indentation = getLine(n-1).indentation(options.tabSize);\n                else indentation = 0;\n            }\n            else if (how == \"smart\") indentation = mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n            else if (how == \"add\") indentation = curSpace + options.indentUnit;\n            else if (how == \"subtract\") indentation = curSpace - options.indentUnit;\n            indentation = Math.max(0, indentation);\n            var diff = indentation - curSpace;\n\n            if (!diff) {\n                if (sel.from.line != n && sel.to.line != n) return;\n                var indentString = curSpaceString;\n            }\n            else {\n                var indentString = \"\", pos = 0;\n                if (options.indentWithTabs)\n                    for (var i = Math.floor(indentation / options.tabSize); i; --i) {pos += options.tabSize; indentString += \"\\t\";}\n                while (pos < indentation) {++pos; indentString += \" \";}\n            }\n\n            replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length});\n        }\n\n        function loadMode() {\n            mode = CodeMirror.getMode(options, options.mode);\n            doc.iter(0, doc.size, function(line) { line.stateAfter = null; });\n            work = [0];\n            startWorker();\n        }\n        function gutterChanged() {\n            var visible = options.gutter || options.lineNumbers;\n            gutter.style.display = visible ? \"\" : \"none\";\n            if (visible) gutterDirty = true;\n            else lineDiv.parentNode.style.marginLeft = 0;\n        }\n        function wrappingChanged(from, to) {\n            if (options.lineWrapping) {\n                wrapper.className += \" CodeMirror-wrap\";\n                var perLine = scroller.clientWidth / charWidth() - 3;\n                doc.iter(0, doc.size, function(line) {\n                    if (line.hidden) return;\n                    var guess = Math.ceil(line.text.length / perLine) || 1;\n                    if (guess != 1) updateLineHeight(line, guess);\n                });\n                lineSpace.style.width = code.style.width = \"\";\n            } else {\n                wrapper.className = wrapper.className.replace(\" CodeMirror-wrap\", \"\");\n                maxWidth = null; maxLine = \"\";\n                doc.iter(0, doc.size, function(line) {\n                    if (line.height != 1 && !line.hidden) updateLineHeight(line, 1);\n                    if (line.text.length > maxLine.length) maxLine = line.text;\n                });\n            }\n            changes.push({from: 0, to: doc.size});\n        }\n        function computeTabText() {\n            for (var str = '<span class=\"cm-tab\">', i = 0; i < options.tabSize; ++i) str += \" \";\n            return str + \"</span>\";\n        }\n        function tabsChanged() {\n            tabText = computeTabText();\n            updateDisplay(true);\n        }\n        function themeChanged() {\n            scroller.className = scroller.className.replace(/\\s*cm-s-\\w+/g, \"\") +\n                options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n        }\n\n        function TextMarker() { this.set = []; }\n        TextMarker.prototype.clear = operation(function() {\n            var min = Infinity, max = -Infinity;\n            for (var i = 0, e = this.set.length; i < e; ++i) {\n                var line = this.set[i], mk = line.marked;\n                if (!mk || !line.parent) continue;\n                var lineN = lineNo(line);\n                min = Math.min(min, lineN); max = Math.max(max, lineN);\n                for (var j = 0; j < mk.length; ++j)\n                    if (mk[j].set == this.set) mk.splice(j--, 1);\n            }\n            if (min != Infinity)\n                changes.push({from: min, to: max + 1});\n        });\n        TextMarker.prototype.find = function() {\n            var from, to;\n            for (var i = 0, e = this.set.length; i < e; ++i) {\n                var line = this.set[i], mk = line.marked;\n                for (var j = 0; j < mk.length; ++j) {\n                    var mark = mk[j];\n                    if (mark.set == this.set) {\n                        if (mark.from != null || mark.to != null) {\n                            var found = lineNo(line);\n                            if (found != null) {\n                                if (mark.from != null) from = {line: found, ch: mark.from};\n                                if (mark.to != null) to = {line: found, ch: mark.to};\n                            }\n                        }\n                    }\n                }\n            }\n            return {from: from, to: to};\n        };\n\n        function markText(from, to, className) {\n            from = clipPos(from); to = clipPos(to);\n            var tm = new TextMarker();\n            function add(line, from, to, className) {\n                getLine(line).addMark(new MarkedText(from, to, className, tm.set));\n            }\n            if (from.line == to.line) add(from.line, from.ch, to.ch, className);\n            else {\n                add(from.line, from.ch, null, className);\n                for (var i = from.line + 1, e = to.line; i < e; ++i)\n                    add(i, null, null, className);\n                add(to.line, null, to.ch, className);\n            }\n            changes.push({from: from.line, to: to.line + 1});\n            return tm;\n        }\n\n        function setBookmark(pos) {\n            pos = clipPos(pos);\n            var bm = new Bookmark(pos.ch);\n            getLine(pos.line).addMark(bm);\n            return bm;\n        }\n\n        function addGutterMarker(line, text, className) {\n            if (typeof line == \"number\") line = getLine(clipLine(line));\n            line.gutterMarker = {text: text, style: className};\n            gutterDirty = true;\n            return line;\n        }\n        function removeGutterMarker(line) {\n            if (typeof line == \"number\") line = getLine(clipLine(line));\n            line.gutterMarker = null;\n            gutterDirty = true;\n        }\n\n        function changeLine(handle, op) {\n            var no = handle, line = handle;\n            if (typeof handle == \"number\") line = getLine(clipLine(handle));\n            else no = lineNo(handle);\n            if (no == null) return null;\n            if (op(line, no)) changes.push({from: no, to: no + 1});\n            else return null;\n            return line;\n        }\n        function setLineClass(handle, className) {\n            return changeLine(handle, function(line) {\n                if (line.className != className) {\n                    line.className = className;\n                    return true;\n                }\n            });\n        }\n        function setLineHidden(handle, hidden) {\n            return changeLine(handle, function(line, no) {\n                if (line.hidden != hidden) {\n                    line.hidden = hidden;\n                    updateLineHeight(line, hidden ? 0 : 1);\n                    if (hidden && (sel.from.line == no || sel.to.line == no))\n                        setSelection(skipHidden(sel.from, sel.from.line, sel.from.ch),\n                            skipHidden(sel.to, sel.to.line, sel.to.ch));\n                    return (gutterDirty = true);\n                }\n            });\n        }\n\n        function lineInfo(line) {\n            if (typeof line == \"number\") {\n                if (!isLine(line)) return null;\n                var n = line;\n                line = getLine(line);\n                if (!line) return null;\n            }\n            else {\n                var n = lineNo(line);\n                if (n == null) return null;\n            }\n            var marker = line.gutterMarker;\n            return {line: n, handle: line, text: line.text, markerText: marker && marker.text,\n                markerClass: marker && marker.style, lineClass: line.className};\n        }\n\n        function stringWidth(str) {\n            measure.innerHTML = \"<pre><span>x</span></pre>\";\n            measure.firstChild.firstChild.firstChild.nodeValue = str;\n            return measure.firstChild.firstChild.offsetWidth || 10;\n        }\n        // These are used to go from pixel positions to character\n        // positions, taking varying character widths into account.\n        function charFromX(line, x) {\n            if (x <= 0) return 0;\n            var lineObj = getLine(line), text = lineObj.text;\n            function getX(len) {\n                measure.innerHTML = \"<pre><span>\" + lineObj.getHTML(null, null, false, tabText, len) + \"</span></pre>\";\n                return measure.firstChild.firstChild.offsetWidth;\n            }\n            var from = 0, fromX = 0, to = text.length, toX;\n            // Guess a suitable upper bound for our search.\n            var estimated = Math.min(to, Math.ceil(x / charWidth()));\n            for (;;) {\n                var estX = getX(estimated);\n                if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2));\n                else {toX = estX; to = estimated; break;}\n            }\n            if (x > toX) return to;\n            // Try to guess a suitable lower bound as well.\n            estimated = Math.floor(to * 0.8); estX = getX(estimated);\n            if (estX < x) {from = estimated; fromX = estX;}\n            // Do a binary search between these bounds.\n            for (;;) {\n                if (to - from <= 1) return (toX - x > x - fromX) ? from : to;\n                var middle = Math.ceil((from + to) / 2), middleX = getX(middle);\n                if (middleX > x) {to = middle; toX = middleX;}\n                else {from = middle; fromX = middleX;}\n            }\n        }\n\n        var tempId = Math.floor(Math.random() * 0xffffff).toString(16);\n        function measureLine(line, ch) {\n            var extra = \"\";\n            // Include extra text at the end to make sure the measured line is wrapped in the right way.\n            if (options.lineWrapping) {\n                var end = line.text.indexOf(\" \", ch + 2);\n                extra = htmlEscape(line.text.slice(ch + 1, end < 0 ? line.text.length : end + (ie ? 5 : 0)));\n            }\n            measure.innerHTML = \"<pre>\" + line.getHTML(null, null, false, tabText, ch) +\n                '<span id=\"CodeMirror-temp-' + tempId + '\">' + htmlEscape(line.text.charAt(ch) || \" \") + \"</span>\" +\n                extra + \"</pre>\";\n            var elt = document.getElementById(\"CodeMirror-temp-\" + tempId);\n            var top = elt.offsetTop, left = elt.offsetLeft;\n            // Older IEs report zero offsets for spans directly after a wrap\n            if (ie && ch && top == 0 && left == 0) {\n                var backup = document.createElement(\"span\");\n                backup.innerHTML = \"x\";\n                elt.parentNode.insertBefore(backup, elt.nextSibling);\n                top = backup.offsetTop;\n            }\n            return {top: top, left: left};\n        }\n        function localCoords(pos, inLineWrap) {\n            var x, lh = textHeight(), y = lh * (heightAtLine(doc, pos.line) - (inLineWrap ? displayOffset : 0));\n            if (pos.ch == 0) x = 0;\n            else {\n                var sp = measureLine(getLine(pos.line), pos.ch);\n                x = sp.left;\n                if (options.lineWrapping) y += Math.max(0, sp.top);\n            }\n            return {x: x, y: y, yBot: y + lh};\n        }\n        // Coords must be lineSpace-local\n        function coordsChar(x, y) {\n            if (y < 0) y = 0;\n            var th = textHeight(), cw = charWidth(), heightPos = displayOffset + Math.floor(y / th);\n            var lineNo = lineAtHeight(doc, heightPos);\n            if (lineNo >= doc.size) return {line: doc.size - 1, ch: getLine(doc.size - 1).text.length};\n            var lineObj = getLine(lineNo), text = lineObj.text;\n            var tw = options.lineWrapping, innerOff = tw ? heightPos - heightAtLine(doc, lineNo) : 0;\n            if (x <= 0 && innerOff == 0) return {line: lineNo, ch: 0};\n            function getX(len) {\n                var sp = measureLine(lineObj, len);\n                if (tw) {\n                    var off = Math.round(sp.top / th);\n                    return Math.max(0, sp.left + (off - innerOff) * scroller.clientWidth);\n                }\n                return sp.left;\n            }\n            var from = 0, fromX = 0, to = text.length, toX;\n            // Guess a suitable upper bound for our search.\n            var estimated = Math.min(to, Math.ceil((x + innerOff * scroller.clientWidth * .9) / cw));\n            for (;;) {\n                var estX = getX(estimated);\n                if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2));\n                else {toX = estX; to = estimated; break;}\n            }\n            if (x > toX) return {line: lineNo, ch: to};\n            // Try to guess a suitable lower bound as well.\n            estimated = Math.floor(to * 0.8); estX = getX(estimated);\n            if (estX < x) {from = estimated; fromX = estX;}\n            // Do a binary search between these bounds.\n            for (;;) {\n                if (to - from <= 1) return {line: lineNo, ch: (toX - x > x - fromX) ? from : to};\n                var middle = Math.ceil((from + to) / 2), middleX = getX(middle);\n                if (middleX > x) {to = middle; toX = middleX;}\n                else {from = middle; fromX = middleX;}\n            }\n        }\n        function pageCoords(pos) {\n            var local = localCoords(pos, true), off = eltOffset(lineSpace);\n            return {x: off.left + local.x, y: off.top + local.y, yBot: off.top + local.yBot};\n        }\n\n        var cachedHeight, cachedHeightFor, measureText;\n        function textHeight() {\n            if (measureText == null) {\n                measureText = \"<pre>\";\n                for (var i = 0; i < 49; ++i) measureText += \"x<br/>\";\n                measureText += \"x</pre>\";\n            }\n            var offsetHeight = lineDiv.clientHeight;\n            if (offsetHeight == cachedHeightFor) return cachedHeight;\n            cachedHeightFor = offsetHeight;\n            measure.innerHTML = measureText;\n            cachedHeight = measure.firstChild.offsetHeight / 50 || 1;\n            measure.innerHTML = \"\";\n            return cachedHeight;\n        }\n        var cachedWidth, cachedWidthFor = 0;\n        function charWidth() {\n            if (scroller.clientWidth == cachedWidthFor) return cachedWidth;\n            cachedWidthFor = scroller.clientWidth;\n            return (cachedWidth = stringWidth(\"x\"));\n        }\n        function paddingTop() {return lineSpace.offsetTop;}\n        function paddingLeft() {return lineSpace.offsetLeft;}\n\n        function posFromMouse(e, liberal) {\n            var offW = eltOffset(scroller, true), x, y;\n            // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n            try { x = e.clientX; y = e.clientY; } catch (e) { return null; }\n            // This is a mess of a heuristic to try and determine whether a\n            // scroll-bar was clicked or not, and to return null if one was\n            // (and !liberal).\n            if (!liberal && (x - offW.left > scroller.clientWidth || y - offW.top > scroller.clientHeight))\n                return null;\n            var offL = eltOffset(lineSpace, true);\n            return coordsChar(x - offL.left, y - offL.top);\n        }\n        function onContextMenu(e) {\n            var pos = posFromMouse(e);\n            if (!pos || window.opera) return; // Opera is difficult.\n            if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to))\n                operation(setCursor)(pos.line, pos.ch);\n\n            var oldCSS = input.style.cssText;\n            inputDiv.style.position = \"absolute\";\n            input.style.cssText = \"position: fixed; width: 30px; height: 30px; top: \" + (e.clientY - 5) +\n                \"px; left: \" + (e.clientX - 5) + \"px; z-index: 1000; background: white; \" +\n                \"border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n            leaveInputAlone = true;\n            var val = input.value = getSelection();\n            focusInput();\n            input.select();\n            function rehide() {\n                var newVal = splitLines(input.value).join(\"\\n\");\n                if (newVal != val) operation(replaceSelection)(newVal, \"end\");\n                inputDiv.style.position = \"relative\";\n                input.style.cssText = oldCSS;\n                leaveInputAlone = false;\n                resetInput(true);\n                slowPoll();\n            }\n\n            if (gecko) {\n                e_stop(e);\n                var mouseup = connect(window, \"mouseup\", function() {\n                    mouseup();\n                    setTimeout(rehide, 20);\n                }, true);\n            }\n            else {\n                setTimeout(rehide, 50);\n            }\n        }\n\n        // Cursor-blinking\n        function restartBlink() {\n            clearInterval(blinker);\n            var on = true;\n            cursor.style.visibility = \"\";\n            blinker = setInterval(function() {\n                cursor.style.visibility = (on = !on) ? \"\" : \"hidden\";\n            }, 650);\n        }\n\n        var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\"};\n        function matchBrackets(autoclear) {\n            var head = sel.inverted ? sel.from : sel.to, line = getLine(head.line), pos = head.ch - 1;\n            var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];\n            if (!match) return;\n            var ch = match.charAt(0), forward = match.charAt(1) == \">\", d = forward ? 1 : -1, st = line.styles;\n            for (var off = pos + 1, i = 0, e = st.length; i < e; i+=2)\n                if ((off -= st[i].length) <= 0) {var style = st[i+1]; break;}\n\n            var stack = [line.text.charAt(pos)], re = /[(){}[\\]]/;\n            function scan(line, from, to) {\n                if (!line.text) return;\n                var st = line.styles, pos = forward ? 0 : line.text.length - 1, cur;\n                for (var i = forward ? 0 : st.length - 2, e = forward ? st.length : -2; i != e; i += 2*d) {\n                    var text = st[i];\n                    if (st[i+1] != null && st[i+1] != style) {pos += d * text.length; continue;}\n                    for (var j = forward ? 0 : text.length - 1, te = forward ? text.length : -1; j != te; j += d, pos+=d) {\n                        if (pos >= from && pos < to && re.test(cur = text.charAt(j))) {\n                            var match = matching[cur];\n                            if (match.charAt(1) == \">\" == forward) stack.push(cur);\n                            else if (stack.pop() != match.charAt(0)) return {pos: pos, match: false};\n                            else if (!stack.length) return {pos: pos, match: true};\n                        }\n                    }\n                }\n            }\n            for (var i = head.line, e = forward ? Math.min(i + 100, doc.size) : Math.max(-1, i - 100); i != e; i+=d) {\n                var line = getLine(i), first = i == head.line;\n                var found = scan(line, first && forward ? pos + 1 : 0, first && !forward ? pos : line.text.length);\n                if (found) break;\n            }\n            if (!found) found = {pos: null, match: false};\n            var style = found.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n            var one = markText({line: head.line, ch: pos}, {line: head.line, ch: pos+1}, style),\n                two = found.pos != null && markText({line: i, ch: found.pos}, {line: i, ch: found.pos + 1}, style);\n            var clear = operation(function(){one.clear(); two && two.clear();});\n            if (autoclear) setTimeout(clear, 800);\n            else bracketHighlighted = clear;\n        }\n\n        // Finds the line to start with when starting a parse. Tries to\n        // find a line with a stateAfter, so that it can start with a\n        // valid state. If that fails, it returns the line with the\n        // smallest indentation, which tends to need the least context to\n        // parse correctly.\n        function findStartLine(n) {\n            var minindent, minline;\n            for (var search = n, lim = n - 40; search > lim; --search) {\n                if (search == 0) return 0;\n                var line = getLine(search-1);\n                if (line.stateAfter) return search;\n                var indented = line.indentation(options.tabSize);\n                if (minline == null || minindent > indented) {\n                    minline = search - 1;\n                    minindent = indented;\n                }\n            }\n            return minline;\n        }\n        function getStateBefore(n) {\n            var start = findStartLine(n), state = start && getLine(start-1).stateAfter;\n            if (!state) state = startState(mode);\n            else state = copyState(mode, state);\n            doc.iter(start, n, function(line) {\n                line.highlight(mode, state, options.tabSize);\n                line.stateAfter = copyState(mode, state);\n            });\n            if (start < n) changes.push({from: start, to: n});\n            if (n < doc.size && !getLine(n).stateAfter) work.push(n);\n            return state;\n        }\n        function highlightLines(start, end) {\n            var state = getStateBefore(start);\n            doc.iter(start, end, function(line) {\n                line.highlight(mode, state, options.tabSize);\n                line.stateAfter = copyState(mode, state);\n            });\n        }\n        function highlightWorker() {\n            var end = +new Date + options.workTime;\n            var foundWork = work.length;\n            while (work.length) {\n                if (!getLine(showingFrom).stateAfter) var task = showingFrom;\n                else var task = work.pop();\n                if (task >= doc.size) continue;\n                var start = findStartLine(task), state = start && getLine(start-1).stateAfter;\n                if (state) state = copyState(mode, state);\n                else state = startState(mode);\n\n                var unchanged = 0, compare = mode.compareStates, realChange = false,\n                    i = start, bail = false;\n                doc.iter(i, doc.size, function(line) {\n                    var hadState = line.stateAfter;\n                    if (+new Date > end) {\n                        work.push(i);\n                        startWorker(options.workDelay);\n                        if (realChange) changes.push({from: task, to: i + 1});\n                        return (bail = true);\n                    }\n                    var changed = line.highlight(mode, state, options.tabSize);\n                    if (changed) realChange = true;\n                    line.stateAfter = copyState(mode, state);\n                    if (compare) {\n                        if (hadState && compare(hadState, state)) return true;\n                    } else {\n                        if (changed !== false || !hadState) unchanged = 0;\n                        else if (++unchanged > 3 && (!mode.indent || mode.indent(hadState, \"\") == mode.indent(state, \"\")))\n                            return true;\n                    }\n                    ++i;\n                });\n                if (bail) return;\n                if (realChange) changes.push({from: task, to: i + 1});\n            }\n            if (foundWork && options.onHighlightComplete)\n                options.onHighlightComplete(instance);\n        }\n        function startWorker(time) {\n            if (!work.length) return;\n            highlight.set(time, operation(highlightWorker));\n        }\n\n        // Operations are used to wrap changes in such a way that each\n        // change won't have to update the cursor and display (which would\n        // be awkward, slow, and error-prone), but instead updates are\n        // batched and then all combined and executed at once.\n        function startOperation() {\n            updateInput = userSelChange = textChanged = null;\n            changes = []; selectionChanged = false; callbacks = [];\n        }\n        function endOperation() {\n            var reScroll = false, updated;\n            if (selectionChanged) reScroll = !scrollCursorIntoView();\n            if (changes.length) updated = updateDisplay(changes, true);\n            else {\n                if (selectionChanged) updateCursor();\n                if (gutterDirty) updateGutter();\n            }\n            if (reScroll) scrollCursorIntoView();\n            if (selectionChanged) {scrollEditorIntoView(); restartBlink();}\n\n            if (focused && !leaveInputAlone &&\n                (updateInput === true || (updateInput !== false && selectionChanged)))\n                resetInput(userSelChange);\n\n            if (selectionChanged && options.matchBrackets)\n                setTimeout(operation(function() {\n                    if (bracketHighlighted) {bracketHighlighted(); bracketHighlighted = null;}\n                    if (posEq(sel.from, sel.to)) matchBrackets(false);\n                }), 20);\n            var tc = textChanged, cbs = callbacks; // these can be reset by callbacks\n            if (selectionChanged && options.onCursorActivity)\n                options.onCursorActivity(instance);\n            if (tc && options.onChange && instance)\n                options.onChange(instance, tc);\n            for (var i = 0; i < cbs.length; ++i) cbs[i](instance);\n            if (updated && options.onUpdate) options.onUpdate(instance);\n        }\n        var nestedOperation = 0;\n        function operation(f) {\n            return function() {\n                if (!nestedOperation++) startOperation();\n                try {var result = f.apply(this, arguments);}\n                finally {if (!--nestedOperation) endOperation();}\n                return result;\n            };\n        }\n\n        for (var ext in extensions)\n            if (extensions.propertyIsEnumerable(ext) &&\n                !instance.propertyIsEnumerable(ext))\n                instance[ext] = extensions[ext];\n        return instance;\n    } // (end of function CodeMirror)\n\n    // The default configuration options.\n    CodeMirror.defaults = {\n        value: \"\",\n        mode: null,\n        theme: \"default\",\n        indentUnit: 2,\n        indentWithTabs: false,\n        tabSize: 4,\n        keyMap: \"default\",\n        extraKeys: null,\n        electricChars: true,\n        onKeyEvent: null,\n        lineWrapping: false,\n        lineNumbers: false,\n        gutter: false,\n        fixedGutter: false,\n        firstLineNumber: 1,\n        readOnly: false,\n        onChange: null,\n        onCursorActivity: null,\n        onGutterClick: null,\n        onHighlightComplete: null,\n        onUpdate: null,\n        onFocus: null, onBlur: null, onScroll: null,\n        matchBrackets: false,\n        workTime: 100,\n        workDelay: 200,\n        pollInterval: 100,\n        undoDepth: 40,\n        tabindex: null,\n        document: window.document\n    };\n\n    var mac = /Mac/.test(navigator.platform);\n    var win = /Win/.test(navigator.platform);\n\n    // Known modes, by name and by MIME\n    var modes = {}, mimeModes = {};\n    CodeMirror.defineMode = function(name, mode) {\n        if (!CodeMirror.defaults.mode && name != \"null\") CodeMirror.defaults.mode = name;\n        modes[name] = mode;\n    };\n    CodeMirror.defineMIME = function(mime, spec) {\n        mimeModes[mime] = spec;\n    };\n    CodeMirror.getMode = function(options, spec) {\n        if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec))\n            spec = mimeModes[spec];\n        if (typeof spec == \"string\")\n            var mname = spec, config = {};\n        else if (spec != null)\n            var mname = spec.name, config = spec;\n        var mfactory = modes[mname];\n        if (!mfactory) {\n            if (window.console) console.warn(\"No mode \" + mname + \" found, falling back to plain text.\");\n            return CodeMirror.getMode(options, \"text/plain\");\n        }\n        return mfactory(options, config || {});\n    };\n    CodeMirror.listModes = function() {\n        var list = [];\n        for (var m in modes)\n            if (modes.propertyIsEnumerable(m)) list.push(m);\n        return list;\n    };\n    CodeMirror.listMIMEs = function() {\n        var list = [];\n        for (var m in mimeModes)\n            if (mimeModes.propertyIsEnumerable(m)) list.push({mime: m, mode: mimeModes[m]});\n        return list;\n    };\n\n    var extensions = CodeMirror.extensions = {};\n    CodeMirror.defineExtension = function(name, func) {\n        extensions[name] = func;\n    };\n\n    var commands = CodeMirror.commands = {\n        selectAll: function(cm) {cm.setSelection({line: 0, ch: 0}, {line: cm.lineCount() - 1});},\n        killLine: function(cm) {\n            var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);\n            if (!sel && cm.getLine(from.line).length == from.ch) cm.replaceRange(\"\", from, {line: from.line + 1, ch: 0});\n            else cm.replaceRange(\"\", from, sel ? to : {line: from.line});\n        },\n        deleteLine: function(cm) {var l = cm.getCursor().line; cm.replaceRange(\"\", {line: l, ch: 0}, {line: l});},\n        undo: function(cm) {cm.undo();},\n        redo: function(cm) {cm.redo();},\n        goDocStart: function(cm) {cm.setCursor(0, 0, true);},\n        goDocEnd: function(cm) {cm.setSelection({line: cm.lineCount() - 1}, null, true);},\n        goLineStart: function(cm) {cm.setCursor(cm.getCursor().line, 0, true);},\n        goLineStartSmart: function(cm) {\n            var cur = cm.getCursor();\n            var text = cm.getLine(cur.line), firstNonWS = Math.max(0, text.search(/\\S/));\n            cm.setCursor(cur.line, cur.ch <= firstNonWS && cur.ch ? 0 : firstNonWS, true);\n        },\n        goLineEnd: function(cm) {cm.setSelection({line: cm.getCursor().line}, null, true);},\n        goLineUp: function(cm) {cm.moveV(-1, \"line\");},\n        goLineDown: function(cm) {cm.moveV(1, \"line\");},\n        goPageUp: function(cm) {cm.moveV(-1, \"page\");},\n        goPageDown: function(cm) {cm.moveV(1, \"page\");},\n        goCharLeft: function(cm) {cm.moveH(-1, \"char\");},\n        goCharRight: function(cm) {cm.moveH(1, \"char\");},\n        goColumnLeft: function(cm) {cm.moveH(-1, \"column\");},\n        goColumnRight: function(cm) {cm.moveH(1, \"column\");},\n        goWordLeft: function(cm) {cm.moveH(-1, \"word\");},\n        goWordRight: function(cm) {cm.moveH(1, \"word\");},\n        delCharLeft: function(cm) {cm.deleteH(-1, \"char\");},\n        delCharRight: function(cm) {cm.deleteH(1, \"char\");},\n        delWordLeft: function(cm) {cm.deleteH(-1, \"word\");},\n        delWordRight: function(cm) {cm.deleteH(1, \"word\");},\n        indentAuto: function(cm) {cm.indentSelection(\"smart\");},\n        indentMore: function(cm) {cm.indentSelection(\"add\");},\n        indentLess: function(cm) {cm.indentSelection(\"subtract\");},\n        insertTab: function(cm) {cm.replaceSelection(\"\\t\", \"end\");},\n        transposeChars: function(cm) {\n            var cur = cm.getCursor(), line = cm.getLine(cur.line);\n            if (cur.ch > 0 && cur.ch < line.length - 1)\n                cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1),\n                    {line: cur.line, ch: cur.ch - 1}, {line: cur.line, ch: cur.ch + 1});\n        },\n        newlineAndIndent: function(cm) {\n            cm.replaceSelection(\"\\n\", \"end\");\n            cm.indentLine(cm.getCursor().line);\n        },\n        toggleOverwrite: function(cm) {cm.toggleOverwrite();}\n    };\n\n    var keyMap = CodeMirror.keyMap = {};\n    keyMap.basic = {\n        \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n        \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n        \"Delete\": \"delCharRight\", \"Backspace\": \"delCharLeft\", \"Tab\": \"indentMore\", \"Shift-Tab\": \"indentLess\",\n        \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\"\n    };\n    // Note that the save and find-related commands aren't defined by\n    // default. Unknown commands are simply ignored.\n    keyMap.pcDefault = {\n        \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n        \"Ctrl-Home\": \"goDocStart\", \"Alt-Up\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Down\": \"goDocEnd\",\n        \"Ctrl-Left\": \"goWordLeft\", \"Ctrl-Right\": \"goWordRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n        \"Ctrl-Backspace\": \"delWordLeft\", \"Ctrl-Delete\": \"delWordRight\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n        \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n        fallthrough: \"basic\"\n    };\n    keyMap.macDefault = {\n        \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n        \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goWordLeft\",\n        \"Alt-Right\": \"goWordRight\", \"Cmd-Left\": \"goLineStart\", \"Cmd-Right\": \"goLineEnd\", \"Alt-Backspace\": \"delWordLeft\",\n        \"Ctrl-Alt-Backspace\": \"delWordRight\", \"Alt-Delete\": \"delWordRight\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n        \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n        fallthrough: [\"basic\", \"emacsy\"]\n    };\n    keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n    keyMap.emacsy = {\n        \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n        \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n        \"Ctrl-V\": \"goPageUp\", \"Shift-Ctrl-V\": \"goPageDown\", \"Ctrl-D\": \"delCharRight\", \"Ctrl-H\": \"delCharLeft\",\n        \"Alt-D\": \"delWordRight\", \"Alt-Backspace\": \"delWordLeft\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\"\n    };\n\n    function lookupKey(name, extraMap, map) {\n        function lookup(name, map, ft) {\n            var found = map[name];\n            if (found != null) return found;\n            if (ft == null) ft = map.fallthrough;\n            if (ft == null) return map.catchall;\n            if (typeof ft == \"string\") return lookup(name, keyMap[ft]);\n            for (var i = 0, e = ft.length; i < e; ++i) {\n                found = lookup(name, keyMap[ft[i]]);\n                if (found != null) return found;\n            }\n            return null;\n        }\n        return extraMap ? lookup(name, extraMap, map) : lookup(name, keyMap[map]);\n    }\n    function isModifierKey(event) {\n        var name = keyNames[event.keyCode];\n        return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n    }\n\n    CodeMirror.fromTextArea = function(textarea, options) {\n        if (!options) options = {};\n        options.value = textarea.value;\n        if (!options.tabindex && textarea.tabindex)\n            options.tabindex = textarea.tabindex;\n\n        function save() {textarea.value = instance.getValue();}\n        if (textarea.form) {\n            // Deplorable hack to make the submit method do the right thing.\n            var rmSubmit = connect(textarea.form, \"submit\", save, true);\n            if (typeof textarea.form.submit == \"function\") {\n                var realSubmit = textarea.form.submit;\n                function wrappedSubmit() {\n                    save();\n                    textarea.form.submit = realSubmit;\n                    textarea.form.submit();\n                    textarea.form.submit = wrappedSubmit;\n                }\n                textarea.form.submit = wrappedSubmit;\n            }\n        }\n\n        textarea.style.display = \"none\";\n        var instance = CodeMirror(function(node) {\n            textarea.parentNode.insertBefore(node, textarea.nextSibling);\n        }, options);\n        instance.save = save;\n        instance.getTextArea = function() { return textarea; };\n        instance.toTextArea = function() {\n            save();\n            textarea.parentNode.removeChild(instance.getWrapperElement());\n            textarea.style.display = \"\";\n            if (textarea.form) {\n                rmSubmit();\n                if (typeof textarea.form.submit == \"function\")\n                    textarea.form.submit = realSubmit;\n            }\n        };\n        return instance;\n    };\n\n    // Utility functions for working with state. Exported because modes\n    // sometimes need to do this.\n    function copyState(mode, state) {\n        if (state === true) return state;\n        if (mode.copyState) return mode.copyState(state);\n        var nstate = {};\n        for (var n in state) {\n            var val = state[n];\n            if (val instanceof Array) val = val.concat([]);\n            nstate[n] = val;\n        }\n        return nstate;\n    }\n    CodeMirror.copyState = copyState;\n    function startState(mode, a1, a2) {\n        return mode.startState ? mode.startState(a1, a2) : true;\n    }\n    CodeMirror.startState = startState;\n\n    // The character stream used by a mode's parser.\n    function StringStream(string, tabSize) {\n        this.pos = this.start = 0;\n        this.string = string;\n        this.tabSize = tabSize || 8;\n    }\n    StringStream.prototype = {\n        eol: function() {return this.pos >= this.string.length;},\n        sol: function() {return this.pos == 0;},\n        peek: function() {return this.string.charAt(this.pos);},\n        next: function() {\n            if (this.pos < this.string.length)\n                return this.string.charAt(this.pos++);\n        },\n        eat: function(match) {\n            var ch = this.string.charAt(this.pos);\n            if (typeof match == \"string\") var ok = ch == match;\n            else var ok = ch && (match.test ? match.test(ch) : match(ch));\n            if (ok) {++this.pos; return ch;}\n        },\n        eatWhile: function(match) {\n            var start = this.pos;\n            while (this.eat(match)){}\n            return this.pos > start;\n        },\n        eatSpace: function() {\n            var start = this.pos;\n            while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n            return this.pos > start;\n        },\n        skipToEnd: function() {this.pos = this.string.length;},\n        skipTo: function(ch) {\n            var found = this.string.indexOf(ch, this.pos);\n            if (found > -1) {this.pos = found; return true;}\n        },\n        backUp: function(n) {this.pos -= n;},\n        column: function() {return countColumn(this.string, this.start, this.tabSize);},\n        indentation: function() {return countColumn(this.string, null, this.tabSize);},\n        match: function(pattern, consume, caseInsensitive) {\n            if (typeof pattern == \"string\") {\n                function cased(str) {return caseInsensitive ? str.toLowerCase() : str;}\n                if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) {\n                    if (consume !== false) this.pos += pattern.length;\n                    return true;\n                }\n            }\n            else {\n                var match = this.string.slice(this.pos).match(pattern);\n                if (match && consume !== false) this.pos += match[0].length;\n                return match;\n            }\n        },\n        current: function(){return this.string.slice(this.start, this.pos);}\n    };\n    CodeMirror.StringStream = StringStream;\n\n    function MarkedText(from, to, className, set) {\n        this.from = from; this.to = to; this.style = className; this.set = set;\n    }\n    MarkedText.prototype = {\n        attach: function(line) { this.set.push(line); },\n        detach: function(line) {\n            var ix = indexOf(this.set, line);\n            if (ix > -1) this.set.splice(ix, 1);\n        },\n        split: function(pos, lenBefore) {\n            if (this.to <= pos && this.to != null) return null;\n            var from = this.from < pos || this.from == null ? null : this.from - pos + lenBefore;\n            var to = this.to == null ? null : this.to - pos + lenBefore;\n            return new MarkedText(from, to, this.style, this.set);\n        },\n        dup: function() { return new MarkedText(null, null, this.style, this.set); },\n        clipTo: function(fromOpen, from, toOpen, to, diff) {\n            if (this.from != null && this.from >= from)\n                this.from = Math.max(to, this.from) + diff;\n            if (this.to != null && this.to > from)\n                this.to = to < this.to ? this.to + diff : from;\n            if (fromOpen && to > this.from && (to < this.to || this.to == null))\n                this.from = null;\n            if (toOpen && (from < this.to || this.to == null) && (from > this.from || this.from == null))\n                this.to = null;\n        },\n        isDead: function() { return this.from != null && this.to != null && this.from >= this.to; },\n        sameSet: function(x) { return this.set == x.set; }\n    };\n\n    function Bookmark(pos) {\n        this.from = pos; this.to = pos; this.line = null;\n    }\n    Bookmark.prototype = {\n        attach: function(line) { this.line = line; },\n        detach: function(line) { if (this.line == line) this.line = null; },\n        split: function(pos, lenBefore) {\n            if (pos < this.from) {\n                this.from = this.to = (this.from - pos) + lenBefore;\n                return this;\n            }\n        },\n        isDead: function() { return this.from > this.to; },\n        clipTo: function(fromOpen, from, toOpen, to, diff) {\n            if ((fromOpen || from < this.from) && (toOpen || to > this.to)) {\n                this.from = 0; this.to = -1;\n            } else if (this.from > from) {\n                this.from = this.to = Math.max(to, this.from) + diff;\n            }\n        },\n        sameSet: function(x) { return false; },\n        find: function() {\n            if (!this.line || !this.line.parent) return null;\n            return {line: lineNo(this.line), ch: this.from};\n        },\n        clear: function() {\n            if (this.line) {\n                var found = indexOf(this.line.marked, this);\n                if (found != -1) this.line.marked.splice(found, 1);\n                this.line = null;\n            }\n        }\n    };\n\n    // Line objects. These hold state related to a line, including\n    // highlighting info (the styles array).\n    function Line(text, styles) {\n        this.styles = styles || [text, null];\n        this.text = text;\n        this.height = 1;\n        this.marked = this.gutterMarker = this.className = this.handlers = null;\n        this.stateAfter = this.parent = this.hidden = null;\n    }\n    Line.inheritMarks = function(text, orig) {\n        var ln = new Line(text), mk = orig && orig.marked;\n        if (mk) {\n            for (var i = 0; i < mk.length; ++i) {\n                if (mk[i].to == null && mk[i].style) {\n                    var newmk = ln.marked || (ln.marked = []), mark = mk[i];\n                    var nmark = mark.dup(); newmk.push(nmark); nmark.attach(ln);\n                }\n            }\n        }\n        return ln;\n    }\n    Line.prototype = {\n        // Replace a piece of a line, keeping the styles around it intact.\n        replace: function(from, to_, text) {\n            var st = [], mk = this.marked, to = to_ == null ? this.text.length : to_;\n            copyStyles(0, from, this.styles, st);\n            if (text) st.push(text, null);\n            copyStyles(to, this.text.length, this.styles, st);\n            this.styles = st;\n            this.text = this.text.slice(0, from) + text + this.text.slice(to);\n            this.stateAfter = null;\n            if (mk) {\n                var diff = text.length - (to - from);\n                for (var i = 0, mark = mk[i]; i < mk.length; ++i) {\n                    mark.clipTo(from == null, from || 0, to_ == null, to, diff);\n                    if (mark.isDead()) {mark.detach(this); mk.splice(i--, 1);}\n                }\n            }\n        },\n        // Split a part off a line, keeping styles and markers intact.\n        split: function(pos, textBefore) {\n            var st = [textBefore, null], mk = this.marked;\n            copyStyles(pos, this.text.length, this.styles, st);\n            var taken = new Line(textBefore + this.text.slice(pos), st);\n            if (mk) {\n                for (var i = 0; i < mk.length; ++i) {\n                    var mark = mk[i];\n                    var newmark = mark.split(pos, textBefore.length);\n                    if (newmark) {\n                        if (!taken.marked) taken.marked = [];\n                        taken.marked.push(newmark); newmark.attach(taken);\n                    }\n                }\n            }\n            return taken;\n        },\n        append: function(line) {\n            var mylen = this.text.length, mk = line.marked, mymk = this.marked;\n            this.text += line.text;\n            copyStyles(0, line.text.length, line.styles, this.styles);\n            if (mymk) {\n                for (var i = 0; i < mymk.length; ++i)\n                    if (mymk[i].to == null) mymk[i].to = mylen;\n            }\n            if (mk && mk.length) {\n                if (!mymk) this.marked = mymk = [];\n                outer: for (var i = 0; i < mk.length; ++i) {\n                    var mark = mk[i];\n                    if (!mark.from) {\n                        for (var j = 0; j < mymk.length; ++j) {\n                            var mymark = mymk[j];\n                            if (mymark.to == mylen && mymark.sameSet(mark)) {\n                                mymark.to = mark.to == null ? null : mark.to + mylen;\n                                if (mymark.isDead()) {\n                                    mymark.detach(this);\n                                    mk.splice(i--, 1);\n                                }\n                                continue outer;\n                            }\n                        }\n                    }\n                    mymk.push(mark);\n                    mark.attach(this);\n                    mark.from += mylen;\n                    if (mark.to != null) mark.to += mylen;\n                }\n            }\n        },\n        fixMarkEnds: function(other) {\n            var mk = this.marked, omk = other.marked;\n            if (!mk) return;\n            for (var i = 0; i < mk.length; ++i) {\n                var mark = mk[i], close = mark.to == null;\n                if (close && omk) {\n                    for (var j = 0; j < omk.length; ++j)\n                        if (omk[j].sameSet(mark)) {close = false; break;}\n                }\n                if (close) mark.to = this.text.length;\n            }\n        },\n        fixMarkStarts: function() {\n            var mk = this.marked;\n            if (!mk) return;\n            for (var i = 0; i < mk.length; ++i)\n                if (mk[i].from == null) mk[i].from = 0;\n        },\n        addMark: function(mark) {\n            mark.attach(this);\n            if (this.marked == null) this.marked = [];\n            this.marked.push(mark);\n            this.marked.sort(function(a, b){return (a.from || 0) - (b.from || 0);});\n        },\n        // Run the given mode's parser over a line, update the styles\n        // array, which contains alternating fragments of text and CSS\n        // classes.\n        highlight: function(mode, state, tabSize) {\n            var stream = new StringStream(this.text, tabSize), st = this.styles, pos = 0;\n            var changed = false, curWord = st[0], prevWord;\n            if (this.text == \"\" && mode.blankLine) mode.blankLine(state);\n            while (!stream.eol()) {\n                var style = mode.token(stream, state);\n                var substr = this.text.slice(stream.start, stream.pos);\n                stream.start = stream.pos;\n                if (pos && st[pos-1] == style)\n                    st[pos-2] += substr;\n                else if (substr) {\n                    if (!changed && (st[pos+1] != style || (pos && st[pos-2] != prevWord))) changed = true;\n                    st[pos++] = substr; st[pos++] = style;\n                    prevWord = curWord; curWord = st[pos];\n                }\n                // Give up when line is ridiculously long\n                if (stream.pos > 5000) {\n                    st[pos++] = this.text.slice(stream.pos); st[pos++] = null;\n                    break;\n                }\n            }\n            if (st.length != pos) {st.length = pos; changed = true;}\n            if (pos && st[pos-2] != prevWord) changed = true;\n            // Short lines with simple highlights return null, and are\n            // counted as changed by the driver because they are likely to\n            // highlight the same way in various contexts.\n            return changed || (st.length < 5 && this.text.length < 10 ? null : false);\n        },\n        // Fetch the parser token for a given character. Useful for hacks\n        // that want to inspect the mode state (say, for completion).\n        getTokenAt: function(mode, state, ch) {\n            var txt = this.text, stream = new StringStream(txt);\n            while (stream.pos < ch && !stream.eol()) {\n                stream.start = stream.pos;\n                var style = mode.token(stream, state);\n            }\n            return {start: stream.start,\n                end: stream.pos,\n                string: stream.current(),\n                className: style || null,\n                state: state};\n        },\n        indentation: function(tabSize) {return countColumn(this.text, null, tabSize);},\n        // Produces an HTML fragment for the line, taking selection,\n        // marking, and highlighting into account.\n        getHTML: function(sfrom, sto, includePre, tabText, endAt) {\n            var html = [], first = true;\n            if (includePre)\n                html.push(this.className ? '<pre class=\"' + this.className + '\">': \"<pre>\");\n            function span(text, style) {\n                if (!text) return;\n                // Work around a bug where, in some compat modes, IE ignores leading spaces\n                if (first && ie && text.charAt(0) == \" \") text = \"\\u00a0\" + text.slice(1);\n                first = false;\n                if (style) html.push('<span class=\"', style, '\">', htmlEscape(text).replace(/\\t/g, tabText), \"</span>\");\n                else html.push(htmlEscape(text).replace(/\\t/g, tabText));\n            }\n            var st = this.styles, allText = this.text, marked = this.marked;\n            if (sfrom == sto) sfrom = null;\n            var len = allText.length;\n            if (endAt != null) len = Math.min(endAt, len);\n\n            if (!allText && endAt == null)\n                span(\" \", sfrom != null && sto == null ? \"CodeMirror-selected\" : null);\n            else if (!marked && sfrom == null)\n                for (var i = 0, ch = 0; ch < len; i+=2) {\n                    var str = st[i], style = st[i+1], l = str.length;\n                    if (ch + l > len) str = str.slice(0, len - ch);\n                    ch += l;\n                    span(str, style && \"cm-\" + style);\n                }\n            else {\n                var pos = 0, i = 0, text = \"\", style, sg = 0;\n                var markpos = -1, mark = null;\n                function nextMark() {\n                    if (marked) {\n                        markpos += 1;\n                        mark = (markpos < marked.length) ? marked[markpos] : null;\n                    }\n                }\n                nextMark();\n                while (pos < len) {\n                    var upto = len;\n                    var extraStyle = \"\";\n                    if (sfrom != null) {\n                        if (sfrom > pos) upto = sfrom;\n                        else if (sto == null || sto > pos) {\n                            extraStyle = \" CodeMirror-selected\";\n                            if (sto != null) upto = Math.min(upto, sto);\n                        }\n                    }\n                    while (mark && mark.to != null && mark.to <= pos) nextMark();\n                    if (mark) {\n                        if (mark.from > pos) upto = Math.min(upto, mark.from);\n                        else {\n                            extraStyle += \" \" + mark.style;\n                            if (mark.to != null) upto = Math.min(upto, mark.to);\n                        }\n                    }\n                    for (;;) {\n                        var end = pos + text.length;\n                        var appliedStyle = style;\n                        if (extraStyle) appliedStyle = style ? style + extraStyle : extraStyle;\n                        span(end > upto ? text.slice(0, upto - pos) : text, appliedStyle);\n                        if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}\n                        pos = end;\n                        text = st[i++]; style = \"cm-\" + st[i++];\n                    }\n                }\n                if (sfrom != null && sto == null) span(\" \", \"CodeMirror-selected\");\n            }\n            if (includePre) html.push(\"</pre>\");\n            return html.join(\"\");\n        },\n        cleanUp: function() {\n            this.parent = null;\n            if (this.marked)\n                for (var i = 0, e = this.marked.length; i < e; ++i) this.marked[i].detach(this);\n        }\n    };\n    // Utility used by replace and split above\n    function copyStyles(from, to, source, dest) {\n        for (var i = 0, pos = 0, state = 0; pos < to; i+=2) {\n            var part = source[i], end = pos + part.length;\n            if (state == 0) {\n                if (end > from) dest.push(part.slice(from - pos, Math.min(part.length, to - pos)), source[i+1]);\n                if (end >= from) state = 1;\n            }\n            else if (state == 1) {\n                if (end > to) dest.push(part.slice(0, to - pos), source[i+1]);\n                else dest.push(part, source[i+1]);\n            }\n            pos = end;\n        }\n    }\n\n    // Data structure that holds the sequence of lines.\n    function LeafChunk(lines) {\n        this.lines = lines;\n        this.parent = null;\n        for (var i = 0, e = lines.length, height = 0; i < e; ++i) {\n            lines[i].parent = this;\n            height += lines[i].height;\n        }\n        this.height = height;\n    }\n    LeafChunk.prototype = {\n        chunkSize: function() { return this.lines.length; },\n        remove: function(at, n, callbacks) {\n            for (var i = at, e = at + n; i < e; ++i) {\n                var line = this.lines[i];\n                this.height -= line.height;\n                line.cleanUp();\n                if (line.handlers)\n                    for (var j = 0; j < line.handlers.length; ++j) callbacks.push(line.handlers[j]);\n            }\n            this.lines.splice(at, n);\n        },\n        collapse: function(lines) {\n            lines.splice.apply(lines, [lines.length, 0].concat(this.lines));\n        },\n        insertHeight: function(at, lines, height) {\n            this.height += height;\n            this.lines.splice.apply(this.lines, [at, 0].concat(lines));\n            for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this;\n        },\n        iterN: function(at, n, op) {\n            for (var e = at + n; at < e; ++at)\n                if (op(this.lines[at])) return true;\n        }\n    };\n    function BranchChunk(children) {\n        this.children = children;\n        var size = 0, height = 0;\n        for (var i = 0, e = children.length; i < e; ++i) {\n            var ch = children[i];\n            size += ch.chunkSize(); height += ch.height;\n            ch.parent = this;\n        }\n        this.size = size;\n        this.height = height;\n        this.parent = null;\n    }\n    BranchChunk.prototype = {\n        chunkSize: function() { return this.size; },\n        remove: function(at, n, callbacks) {\n            this.size -= n;\n            for (var i = 0; i < this.children.length; ++i) {\n                var child = this.children[i], sz = child.chunkSize();\n                if (at < sz) {\n                    var rm = Math.min(n, sz - at), oldHeight = child.height;\n                    child.remove(at, rm, callbacks);\n                    this.height -= oldHeight - child.height;\n                    if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n                    if ((n -= rm) == 0) break;\n                    at = 0;\n                } else at -= sz;\n            }\n            if (this.size - n < 25) {\n                var lines = [];\n                this.collapse(lines);\n                this.children = [new LeafChunk(lines)];\n            }\n        },\n        collapse: function(lines) {\n            for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines);\n        },\n        insert: function(at, lines) {\n            var height = 0;\n            for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height;\n            this.insertHeight(at, lines, height);\n        },\n        insertHeight: function(at, lines, height) {\n            this.size += lines.length;\n            this.height += height;\n            for (var i = 0, e = this.children.length; i < e; ++i) {\n                var child = this.children[i], sz = child.chunkSize();\n                if (at <= sz) {\n                    child.insertHeight(at, lines, height);\n                    if (child.lines && child.lines.length > 50) {\n                        while (child.lines.length > 50) {\n                            var spilled = child.lines.splice(child.lines.length - 25, 25);\n                            var newleaf = new LeafChunk(spilled);\n                            child.height -= newleaf.height;\n                            this.children.splice(i + 1, 0, newleaf);\n                            newleaf.parent = this;\n                        }\n                        this.maybeSpill();\n                    }\n                    break;\n                }\n                at -= sz;\n            }\n        },\n        maybeSpill: function() {\n            if (this.children.length <= 10) return;\n            var me = this;\n            do {\n                var spilled = me.children.splice(me.children.length - 5, 5);\n                var sibling = new BranchChunk(spilled);\n                if (!me.parent) { // Become the parent node\n                    var copy = new BranchChunk(me.children);\n                    copy.parent = me;\n                    me.children = [copy, sibling];\n                    me = copy;\n                } else {\n                    me.size -= sibling.size;\n                    me.height -= sibling.height;\n                    var myIndex = indexOf(me.parent.children, me);\n                    me.parent.children.splice(myIndex + 1, 0, sibling);\n                }\n                sibling.parent = me.parent;\n            } while (me.children.length > 10);\n            me.parent.maybeSpill();\n        },\n        iter: function(from, to, op) { this.iterN(from, to - from, op); },\n        iterN: function(at, n, op) {\n            for (var i = 0, e = this.children.length; i < e; ++i) {\n                var child = this.children[i], sz = child.chunkSize();\n                if (at < sz) {\n                    var used = Math.min(n, sz - at);\n                    if (child.iterN(at, used, op)) return true;\n                    if ((n -= used) == 0) break;\n                    at = 0;\n                } else at -= sz;\n            }\n        }\n    };\n\n    function getLineAt(chunk, n) {\n        while (!chunk.lines) {\n            for (var i = 0;; ++i) {\n                var child = chunk.children[i], sz = child.chunkSize();\n                if (n < sz) { chunk = child; break; }\n                n -= sz;\n            }\n        }\n        return chunk.lines[n];\n    }\n    function lineNo(line) {\n        if (line.parent == null) return null;\n        var cur = line.parent, no = indexOf(cur.lines, line);\n        for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n            for (var i = 0, e = chunk.children.length; ; ++i) {\n                if (chunk.children[i] == cur) break;\n                no += chunk.children[i].chunkSize();\n            }\n        }\n        return no;\n    }\n    function lineAtHeight(chunk, h) {\n        var n = 0;\n        outer: do {\n            for (var i = 0, e = chunk.children.length; i < e; ++i) {\n                var child = chunk.children[i], ch = child.height;\n                if (h < ch) { chunk = child; continue outer; }\n                h -= ch;\n                n += child.chunkSize();\n            }\n            return n;\n        } while (!chunk.lines);\n        for (var i = 0, e = chunk.lines.length; i < e; ++i) {\n            var line = chunk.lines[i], lh = line.height;\n            if (h < lh) break;\n            h -= lh;\n        }\n        return n + i;\n    }\n    function heightAtLine(chunk, n) {\n        var h = 0;\n        outer: do {\n            for (var i = 0, e = chunk.children.length; i < e; ++i) {\n                var child = chunk.children[i], sz = child.chunkSize();\n                if (n < sz) { chunk = child; continue outer; }\n                n -= sz;\n                h += child.height;\n            }\n            return h;\n        } while (!chunk.lines);\n        for (var i = 0; i < n; ++i) h += chunk.lines[i].height;\n        return h;\n    }\n\n    // The history object 'chunks' changes that are made close together\n    // and at almost the same time into bigger undoable units.\n    function History() {\n        this.time = 0;\n        this.done = []; this.undone = [];\n    }\n    History.prototype = {\n        addChange: function(start, added, old) {\n            this.undone.length = 0;\n            var time = +new Date, last = this.done[this.done.length - 1];\n            if (time - this.time > 400 || !last ||\n                last.start > start + added || last.start + last.added < start - last.added + last.old.length)\n                this.done.push({start: start, added: added, old: old});\n            else {\n                var oldoff = 0;\n                if (start < last.start) {\n                    for (var i = last.start - start - 1; i >= 0; --i)\n                        last.old.unshift(old[i]);\n                    last.added += last.start - start;\n                    last.start = start;\n                }\n                else if (last.start < start) {\n                    oldoff = start - last.start;\n                    added += oldoff;\n                }\n                for (var i = last.added - oldoff, e = old.length; i < e; ++i)\n                    last.old.push(old[i]);\n                if (last.added < added) last.added = added;\n            }\n            this.time = time;\n        }\n    };\n\n    function stopMethod() {e_stop(this);}\n    // Ensure an event has a stop method.\n    function addStop(event) {\n        if (!event.stop) event.stop = stopMethod;\n        return event;\n    }\n\n    function e_preventDefault(e) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n    }\n    function e_stopPropagation(e) {\n        if (e.stopPropagation) e.stopPropagation();\n        else e.cancelBubble = true;\n    }\n    function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n\n    function e_target(e) {return e.target || e.srcElement;}\n    function e_button(e) {\n        if (e.which) return e.which;\n        else if (e.button & 1) return 1;\n        else if (e.button & 2) return 3;\n        else if (e.button & 4) return 2;\n    }\n\n    // Event handler registration. If disconnect is true, it'll return a\n    // function that unregisters the handler.\n    function connect(node, type, handler, disconnect) {\n        if (typeof node.addEventListener == \"function\") {\n            node.addEventListener(type, handler, false);\n            if (disconnect) return function() {node.removeEventListener(type, handler, false);};\n        }\n        else {\n            var wrapHandler = function(event) {handler(event || window.event);};\n            node.attachEvent(\"on\" + type, wrapHandler);\n            if (disconnect) return function() {node.detachEvent(\"on\" + type, wrapHandler);};\n        }\n    }\n    CodeMirror.connect = connect;\n\n    function Delayed() {this.id = null;}\n    Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}};\n\n    // Detect drag-and-drop\n    var dragAndDrop = function() {\n        // IE8 has ondragstart and ondrop properties, but doesn't seem to\n        // actually support ondragstart the way it's supposed to work.\n        if (/MSIE [1-8]\\b/.test(navigator.userAgent)) return false;\n        var div = document.createElement('div');\n        return \"draggable\" in div;\n    }();\n\n    var gecko = /gecko\\/\\d{7}/i.test(navigator.userAgent);\n    var ie = /MSIE \\d/.test(navigator.userAgent);\n    var webkit = /WebKit\\//.test(navigator.userAgent);\n\n    var lineSep = \"\\n\";\n    // Feature-detect whether newlines in textareas are converted to \\r\\n\n    (function () {\n        var te = document.createElement(\"textarea\");\n        te.value = \"foo\\nbar\";\n        if (te.value.indexOf(\"\\r\") > -1) lineSep = \"\\r\\n\";\n    }());\n\n    // Counts the column offset in a string, taking tabs into account.\n    // Used mostly to find indentation.\n    function countColumn(string, end, tabSize) {\n        if (end == null) {\n            end = string.search(/[^\\s\\u00a0]/);\n            if (end == -1) end = string.length;\n        }\n        for (var i = 0, n = 0; i < end; ++i) {\n            if (string.charAt(i) == \"\\t\") n += tabSize - (n % tabSize);\n            else ++n;\n        }\n        return n;\n    }\n\n    function computedStyle(elt) {\n        if (elt.currentStyle) return elt.currentStyle;\n        return window.getComputedStyle(elt, null);\n    }\n\n    // Find the position of an element by following the offsetParent chain.\n    // If screen==true, it returns screen (rather than page) coordinates.\n    function eltOffset(node, screen) {\n        var bod = node.ownerDocument.body;\n        var x = 0, y = 0, skipBody = false;\n        for (var n = node; n; n = n.offsetParent) {\n            var ol = n.offsetLeft, ot = n.offsetTop;\n            // Firefox reports weird inverted offsets when the body has a border.\n            if (n == bod) { x += Math.abs(ol); y += Math.abs(ot); }\n            else { x += ol, y += ot; }\n            if (screen && computedStyle(n).position == \"fixed\")\n                skipBody = true;\n        }\n        var e = screen && !skipBody ? null : bod;\n        for (var n = node.parentNode; n != e; n = n.parentNode)\n            if (n.scrollLeft != null) { x -= n.scrollLeft; y -= n.scrollTop;}\n        return {left: x, top: y};\n    }\n    // Use the faster and saner getBoundingClientRect method when possible.\n    if (document.documentElement.getBoundingClientRect != null) eltOffset = function(node, screen) {\n        // Take the parts of bounding client rect that we are interested in so we are able to edit if need be,\n        // since the returned value cannot be changed externally (they are kept in sync as the element moves within the page)\n        try { var box = node.getBoundingClientRect(); box = { top: box.top, left: box.left }; }\n        catch(e) { box = {top: 0, left: 0}; }\n        if (!screen) {\n            // Get the toplevel scroll, working around browser differences.\n            if (window.pageYOffset == null) {\n                var t = document.documentElement || document.body.parentNode;\n                if (t.scrollTop == null) t = document.body;\n                box.top += t.scrollTop; box.left += t.scrollLeft;\n            } else {\n                box.top += window.pageYOffset; box.left += window.pageXOffset;\n            }\n        }\n        return box;\n    };\n\n    // Get a node's text content.\n    function eltText(node) {\n        return node.textContent || node.innerText || node.nodeValue || \"\";\n    }\n\n    // Operations on {line, ch} objects.\n    function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}\n    function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}\n    function copyPos(x) {return {line: x.line, ch: x.ch};}\n\n    var escapeElement = document.createElement(\"pre\");\n    function htmlEscape(str) {\n        escapeElement.textContent = str;\n        return escapeElement.innerHTML;\n    }\n    // Recent (late 2011) Opera betas insert bogus newlines at the start\n    // of the textContent, so we strip those.\n    if (htmlEscape(\"a\") == \"\\na\")\n        htmlEscape = function(str) {\n            escapeElement.textContent = str;\n            return escapeElement.innerHTML.slice(1);\n        };\n    // Some IEs don't preserve tabs through innerHTML\n    else if (htmlEscape(\"\\t\") != \"\\t\")\n        htmlEscape = function(str) {\n            escapeElement.innerHTML = \"\";\n            escapeElement.appendChild(document.createTextNode(str));\n            return escapeElement.innerHTML;\n        };\n    CodeMirror.htmlEscape = htmlEscape;\n\n    // Used to position the cursor after an undo/redo by finding the\n    // last edited character.\n    function editEnd(from, to) {\n        if (!to) return from ? from.length : 0;\n        if (!from) return to.length;\n        for (var i = from.length, j = to.length; i >= 0 && j >= 0; --i, --j)\n            if (from.charAt(i) != to.charAt(j)) break;\n        return j + 1;\n    }\n\n    function indexOf(collection, elt) {\n        if (collection.indexOf) return collection.indexOf(elt);\n        for (var i = 0, e = collection.length; i < e; ++i)\n            if (collection[i] == elt) return i;\n        return -1;\n    }\n    function isWordChar(ch) {\n        return /\\w/.test(ch) || ch.toUpperCase() != ch.toLowerCase();\n    }\n\n    // See if \"\".split is the broken IE version, if so, provide an\n    // alternative way to split lines.\n    var splitLines = \"\\n\\nb\".split(/\\n/).length != 3 ? function(string) {\n        var pos = 0, nl, result = [];\n        while ((nl = string.indexOf(\"\\n\", pos)) > -1) {\n            result.push(string.slice(pos, string.charAt(nl-1) == \"\\r\" ? nl - 1 : nl));\n            pos = nl + 1;\n        }\n        result.push(string.slice(pos));\n        return result;\n    } : function(string){return string.split(/\\r?\\n/);};\n    CodeMirror.splitLines = splitLines;\n\n    var hasSelection = window.getSelection ? function(te) {\n        try { return te.selectionStart != te.selectionEnd; }\n        catch(e) { return false; }\n    } : function(te) {\n        try {var range = te.ownerDocument.selection.createRange();}\n        catch(e) {}\n        if (!range || range.parentElement() != te) return false;\n        return range.compareEndPoints(\"StartToEnd\", range) != 0;\n    };\n\n    CodeMirror.defineMode(\"null\", function() {\n        return {token: function(stream) {stream.skipToEnd();}};\n    });\n    CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n    var keyNames = {3: \"Enter\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n        19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n        36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n        46: \"Delete\", 59: \";\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\", 186: \";\", 187: \"=\", 188: \",\",\n        189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\", 221: \"]\", 222: \"'\", 63276: \"PageUp\",\n        63277: \"PageDown\", 63275: \"End\", 63273: \"Home\", 63234: \"Left\", 63232: \"Up\", 63235: \"Right\",\n        63233: \"Down\", 63302: \"Insert\", 63272: \"Delete\"};\n    CodeMirror.keyNames = keyNames;\n    (function() {\n        // Number keys\n        for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i);\n        // Alphabetic keys\n        for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);\n        // Function keys\n        for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = \"F\" + i;\n    })();\n\n    return CodeMirror;\n})();\nCodeMirror.defineMode(\"xml\", function(config, parserConfig) {\n    var indentUnit = config.indentUnit;\n    var Kludges = parserConfig.htmlMode ? {\n        autoSelfClosers: {\"br\": true, \"img\": true, \"hr\": true, \"link\": true, \"input\": true,\n            \"meta\": true, \"col\": true, \"frame\": true, \"base\": true, \"area\": true},\n        doNotIndent: {\"pre\": true},\n        allowUnquoted: true\n    } : {autoSelfClosers: {}, doNotIndent: {}, allowUnquoted: false};\n    var alignCDATA = parserConfig.alignCDATA;\n\n    // Return variables for tokenizers\n    var tagName, type;\n\n    function inText(stream, state) {\n        function chain(parser) {\n            state.tokenize = parser;\n            return parser(stream, state);\n        }\n\n        var ch = stream.next();\n        if (ch == \"<\") {\n            if (stream.eat(\"!\")) {\n                if (stream.eat(\"[\")) {\n                    if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n                    else return null;\n                }\n                else if (stream.match(\"--\")) return chain(inBlock(\"comment\", \"-->\"));\n                else if (stream.match(\"DOCTYPE\", true, true)) {\n                    stream.eatWhile(/[\\w\\._\\-]/);\n                    return chain(doctype(1));\n                }\n                else return null;\n            }\n            else if (stream.eat(\"?\")) {\n                stream.eatWhile(/[\\w\\._\\-]/);\n                state.tokenize = inBlock(\"meta\", \"?>\");\n                return \"meta\";\n            }\n            else {\n                type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n                stream.eatSpace();\n                tagName = \"\";\n                var c;\n                while ((c = stream.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/))) tagName += c;\n                state.tokenize = inTag;\n                return \"tag\";\n            }\n        }\n        else if (ch == \"&\") {\n            stream.eatWhile(/[^;]/);\n            stream.eat(\";\");\n            return \"atom\";\n        }\n        else {\n            stream.eatWhile(/[^&<]/);\n            return null;\n        }\n    }\n\n    function inTag(stream, state) {\n        var ch = stream.next();\n        if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n            state.tokenize = inText;\n            type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n            return \"tag\";\n        }\n        else if (ch == \"=\") {\n            type = \"equals\";\n            return null;\n        }\n        else if (/[\\'\\\"]/.test(ch)) {\n            state.tokenize = inAttribute(ch);\n            return state.tokenize(stream, state);\n        }\n        else {\n            stream.eatWhile(/[^\\s\\u00a0=<>\\\"\\'\\/?]/);\n            return \"word\";\n        }\n    }\n\n    function inAttribute(quote) {\n        return function(stream, state) {\n            while (!stream.eol()) {\n                if (stream.next() == quote) {\n                    state.tokenize = inTag;\n                    break;\n                }\n            }\n            return \"string\";\n        };\n    }\n\n    function inBlock(style, terminator) {\n        return function(stream, state) {\n            while (!stream.eol()) {\n                if (stream.match(terminator)) {\n                    state.tokenize = inText;\n                    break;\n                }\n                stream.next();\n            }\n            return style;\n        };\n    }\n    function doctype(depth) {\n        return function(stream, state) {\n            var ch;\n            while ((ch = stream.next()) != null) {\n                if (ch == \"<\") {\n                    state.tokenize = doctype(depth + 1);\n                    return state.tokenize(stream, state);\n                } else if (ch == \">\") {\n                    if (depth == 1) {\n                        state.tokenize = inText;\n                        break;\n                    } else {\n                        state.tokenize = doctype(depth - 1);\n                        return state.tokenize(stream, state);\n                    }\n                }\n            }\n            return \"meta\";\n        };\n    }\n\n    var curState, setStyle;\n    function pass() {\n        for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]);\n    }\n    function cont() {\n        pass.apply(null, arguments);\n        return true;\n    }\n\n    function pushContext(tagName, startOfLine) {\n        var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName) || (curState.context && curState.context.noIndent);\n        curState.context = {\n            prev: curState.context,\n            tagName: tagName,\n            indent: curState.indented,\n            startOfLine: startOfLine,\n            noIndent: noIndent\n        };\n    }\n    function popContext() {\n        if (curState.context) curState.context = curState.context.prev;\n    }\n\n    function element(type) {\n        if (type == \"openTag\") {\n            curState.tagName = tagName;\n            return cont(attributes, endtag(curState.startOfLine));\n        } else if (type == \"closeTag\") {\n            var err = false;\n            if (curState.context) {\n                err = curState.context.tagName != tagName;\n            } else {\n                err = true;\n            }\n            if (err) setStyle = \"error\";\n            return cont(endclosetag(err));\n        }\n        return cont();\n    }\n    function endtag(startOfLine) {\n        return function(type) {\n            if (type == \"selfcloseTag\" ||\n                (type == \"endTag\" && Kludges.autoSelfClosers.hasOwnProperty(curState.tagName.toLowerCase())))\n                return cont();\n            if (type == \"endTag\") {pushContext(curState.tagName, startOfLine); return cont();}\n            return cont();\n        };\n    }\n    function endclosetag(err) {\n        return function(type) {\n            if (err) setStyle = \"error\";\n            if (type == \"endTag\") { popContext(); return cont(); }\n            setStyle = \"error\";\n            return cont(arguments.callee);\n        }\n    }\n\n    function attributes(type) {\n        if (type == \"word\") {setStyle = \"attribute\"; return cont(attributes);}\n        if (type == \"equals\") return cont(attvalue, attributes);\n        if (type == \"string\") {setStyle = \"error\"; return cont(attributes);}\n        return pass();\n    }\n    function attvalue(type) {\n        if (type == \"word\" && Kludges.allowUnquoted) {setStyle = \"string\"; return cont();}\n        if (type == \"string\") return cont(attvaluemaybe);\n        return pass();\n    }\n    function attvaluemaybe(type) {\n        if (type == \"string\") return cont(attvaluemaybe);\n        else return pass();\n    }\n\n    return {\n        startState: function() {\n            return {tokenize: inText, cc: [], indented: 0, startOfLine: true, tagName: null, context: null};\n        },\n\n        token: function(stream, state) {\n            if (stream.sol()) {\n                state.startOfLine = true;\n                state.indented = stream.indentation();\n            }\n            if (stream.eatSpace()) return null;\n\n            setStyle = type = tagName = null;\n            var style = state.tokenize(stream, state);\n            state.type = type;\n            if ((style || type) && style != \"comment\") {\n                curState = state;\n                while (true) {\n                    var comb = state.cc.pop() || element;\n                    if (comb(type || style)) break;\n                }\n            }\n            state.startOfLine = false;\n            return setStyle || style;\n        },\n\n        indent: function(state, textAfter, fullLine) {\n            var context = state.context;\n            if ((state.tokenize != inTag && state.tokenize != inText) ||\n                context && context.noIndent)\n                return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n            if (alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n            if (context && /^<\\//.test(textAfter))\n                context = context.prev;\n            while (context && !context.startOfLine)\n                context = context.prev;\n            if (context) return context.indent + indentUnit;\n            else return 0;\n        },\n\n        compareStates: function(a, b) {\n            if (a.indented != b.indented || a.tokenize != b.tokenize) return false;\n            for (var ca = a.context, cb = b.context; ; ca = ca.prev, cb = cb.prev) {\n                if (!ca || !cb) return ca == cb;\n                if (ca.tagName != cb.tagName) return false;\n            }\n        },\n\n        electricChars: \"/\"\n    };\n});\n\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nCodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n    var indentUnit = config.indentUnit;\n    var jsonMode = parserConfig.json;\n\n    // Tokenizer\n\n    var keywords = function(){\n        function kw(type) {return {type: type, style: \"keyword\"};}\n        var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\n        var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n        return {\n            \"if\": A, \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n            \"return\": C, \"break\": C, \"continue\": C, \"new\": C, \"delete\": C, \"throw\": C,\n            \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n            \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n            \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n            \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n            \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom\n        };\n    }();\n\n    var isOperatorChar = /[+\\-*&%=<>!?|]/;\n\n    function chain(stream, state, f) {\n        state.tokenize = f;\n        return f(stream, state);\n    }\n\n    function nextUntilUnescaped(stream, end) {\n        var escaped = false, next;\n        while ((next = stream.next()) != null) {\n            if (next == end && !escaped)\n                return false;\n            escaped = !escaped && next == \"\\\\\";\n        }\n        return escaped;\n    }\n\n    // Used as scratch variables to communicate multiple values without\n    // consing up tons of objects.\n    var type, content;\n    function ret(tp, style, cont) {\n        type = tp; content = cont;\n        return style;\n    }\n\n    function jsTokenBase(stream, state) {\n        var ch = stream.next();\n        if (ch == '\"' || ch == \"'\")\n            return chain(stream, state, jsTokenString(ch));\n        else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch))\n            return ret(ch);\n        else if (ch == \"0\" && stream.eat(/x/i)) {\n            stream.eatWhile(/[\\da-f]/i);\n            return ret(\"number\", \"number\");\n        }\n        else if (/\\d/.test(ch)) {\n            stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\n            return ret(\"number\", \"number\");\n        }\n        else if (ch == \"/\") {\n            if (stream.eat(\"*\")) {\n                return chain(stream, state, jsTokenComment);\n            }\n            else if (stream.eat(\"/\")) {\n                stream.skipToEnd();\n                return ret(\"comment\", \"comment\");\n            }\n            else if (state.reAllowed) {\n                nextUntilUnescaped(stream, \"/\");\n                stream.eatWhile(/[gimy]/); // 'y' is \"sticky\" option in Mozilla\n                return ret(\"regexp\", \"string\");\n            }\n            else {\n                stream.eatWhile(isOperatorChar);\n                return ret(\"operator\", null, stream.current());\n            }\n        }\n        else if (ch == \"#\") {\n            stream.skipToEnd();\n            return ret(\"error\", \"error\");\n        }\n        else if (isOperatorChar.test(ch)) {\n            stream.eatWhile(isOperatorChar);\n            return ret(\"operator\", null, stream.current());\n        }\n        else {\n            stream.eatWhile(/[\\w\\$_]/);\n            var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\n            return (known && state.kwAllowed) ? ret(known.type, known.style, word) :\n                ret(\"variable\", \"variable\", word);\n        }\n    }\n\n    function jsTokenString(quote) {\n        return function(stream, state) {\n            if (!nextUntilUnescaped(stream, quote))\n                state.tokenize = jsTokenBase;\n            return ret(\"string\", \"string\");\n        };\n    }\n\n    function jsTokenComment(stream, state) {\n        var maybeEnd = false, ch;\n        while (ch = stream.next()) {\n            if (ch == \"/\" && maybeEnd) {\n                state.tokenize = jsTokenBase;\n                break;\n            }\n            maybeEnd = (ch == \"*\");\n        }\n        return ret(\"comment\", \"comment\");\n    }\n\n    // Parser\n\n    var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true};\n\n    function JSLexical(indented, column, type, align, prev, info) {\n        this.indented = indented;\n        this.column = column;\n        this.type = type;\n        this.prev = prev;\n        this.info = info;\n        if (align != null) this.align = align;\n    }\n\n    function inScope(state, varname) {\n        for (var v = state.localVars; v; v = v.next)\n            if (v.name == varname) return true;\n    }\n\n    function parseJS(state, style, type, content, stream) {\n        var cc = state.cc;\n        // Communicate our context to the combinators.\n        // (Less wasteful than consing up a hundred closures on every call.)\n        cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;\n\n        if (!state.lexical.hasOwnProperty(\"align\"))\n            state.lexical.align = true;\n\n        while(true) {\n            var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n            if (combinator(type, content)) {\n                while(cc.length && cc[cc.length - 1].lex)\n                    cc.pop()();\n                if (cx.marked) return cx.marked;\n                if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n                return style;\n            }\n        }\n    }\n\n    // Combinator utils\n\n    var cx = {state: null, column: null, marked: null, cc: null};\n    function pass() {\n        for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n    }\n    function cont() {\n        pass.apply(null, arguments);\n        return true;\n    }\n    function register(varname) {\n        var state = cx.state;\n        if (state.context) {\n            cx.marked = \"def\";\n            for (var v = state.localVars; v; v = v.next)\n                if (v.name == varname) return;\n            state.localVars = {name: varname, next: state.localVars};\n        }\n    }\n\n    // Combinators\n\n    var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\n    function pushcontext() {\n        if (!cx.state.context) cx.state.localVars = defaultVars;\n        cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n    }\n    function popcontext() {\n        cx.state.localVars = cx.state.context.vars;\n        cx.state.context = cx.state.context.prev;\n    }\n    function pushlex(type, info) {\n        var result = function() {\n            var state = cx.state;\n            state.lexical = new JSLexical(state.indented, cx.stream.column(), type, null, state.lexical, info)\n        };\n        result.lex = true;\n        return result;\n    }\n    function poplex() {\n        var state = cx.state;\n        if (state.lexical.prev) {\n            if (state.lexical.type == \")\")\n                state.indented = state.lexical.indented;\n            state.lexical = state.lexical.prev;\n        }\n    }\n    poplex.lex = true;\n\n    function expect(wanted) {\n        return function expecting(type) {\n            if (type == wanted) return cont();\n            else if (wanted == \";\") return pass();\n            else return cont(arguments.callee);\n        };\n    }\n\n    function statement(type) {\n        if (type == \"var\") return cont(pushlex(\"vardef\"), vardef1, expect(\";\"), poplex);\n        if (type == \"keyword a\") return cont(pushlex(\"form\"), expression, statement, poplex);\n        if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n        if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\n        if (type == \";\") return cont();\n        if (type == \"function\") return cont(functiondef);\n        if (type == \"for\") return cont(pushlex(\"form\"), expect(\"(\"), pushlex(\")\"), forspec1, expect(\")\"),\n            poplex, statement, poplex);\n        if (type == \"variable\") return cont(pushlex(\"stat\"), maybelabel);\n        if (type == \"switch\") return cont(pushlex(\"form\"), expression, pushlex(\"}\", \"switch\"), expect(\"{\"),\n            block, poplex, poplex);\n        if (type == \"case\") return cont(expression, expect(\":\"));\n        if (type == \"default\") return cont(expect(\":\"));\n        if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n            statement, poplex, popcontext);\n        return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n    }\n    function expression(type) {\n        if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator);\n        if (type == \"function\") return cont(functiondef);\n        if (type == \"keyword c\") return cont(maybeexpression);\n        if (type == \"(\") return cont(pushlex(\")\"), expression, expect(\")\"), poplex, maybeoperator);\n        if (type == \"operator\") return cont(expression);\n        if (type == \"[\") return cont(pushlex(\"]\"), commasep(expression, \"]\"), poplex, maybeoperator);\n        if (type == \"{\") return cont(pushlex(\"}\"), commasep(objprop, \"}\"), poplex, maybeoperator);\n        return cont();\n    }\n    function maybeexpression(type) {\n        if (type.match(/[;\\}\\)\\],]/)) return pass();\n        return pass(expression);\n    }\n\n    function maybeoperator(type, value) {\n        if (type == \"operator\" && /\\+\\+|--/.test(value)) return cont(maybeoperator);\n        if (type == \"operator\") return cont(expression);\n        if (type == \";\") return;\n        if (type == \"(\") return cont(pushlex(\")\"), commasep(expression, \")\"), poplex, maybeoperator);\n        if (type == \".\") return cont(property, maybeoperator);\n        if (type == \"[\") return cont(pushlex(\"]\"), expression, expect(\"]\"), poplex, maybeoperator);\n    }\n    function maybelabel(type) {\n        if (type == \":\") return cont(poplex, statement);\n        return pass(maybeoperator, expect(\";\"), poplex);\n    }\n    function property(type) {\n        if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n    }\n    function objprop(type) {\n        if (type == \"variable\") cx.marked = \"property\";\n        if (atomicTypes.hasOwnProperty(type)) return cont(expect(\":\"), expression);\n    }\n    function commasep(what, end) {\n        function proceed(type) {\n            if (type == \",\") return cont(what, proceed);\n            if (type == end) return cont();\n            return cont(expect(end));\n        }\n        return function commaSeparated(type) {\n            if (type == end) return cont();\n            else return pass(what, proceed);\n        };\n    }\n    function block(type) {\n        if (type == \"}\") return cont();\n        return pass(statement, block);\n    }\n    function vardef1(type, value) {\n        if (type == \"variable\"){register(value); return cont(vardef2);}\n        return cont();\n    }\n    function vardef2(type, value) {\n        if (value == \"=\") return cont(expression, vardef2);\n        if (type == \",\") return cont(vardef1);\n    }\n    function forspec1(type) {\n        if (type == \"var\") return cont(vardef1, forspec2);\n        if (type == \";\") return pass(forspec2);\n        if (type == \"variable\") return cont(formaybein);\n        return pass(forspec2);\n    }\n    function formaybein(type, value) {\n        if (value == \"in\") return cont(expression);\n        return cont(maybeoperator, forspec2);\n    }\n    function forspec2(type, value) {\n        if (type == \";\") return cont(forspec3);\n        if (value == \"in\") return cont(expression);\n        return cont(expression, expect(\";\"), forspec3);\n    }\n    function forspec3(type) {\n        if (type != \")\") cont(expression);\n    }\n    function functiondef(type, value) {\n        if (type == \"variable\") {register(value); return cont(functiondef);}\n        if (type == \"(\") return cont(pushlex(\")\"), pushcontext, commasep(funarg, \")\"), poplex, statement, popcontext);\n    }\n    function funarg(type, value) {\n        if (type == \"variable\") {register(value); return cont();}\n    }\n\n    // Interface\n\n    return {\n        startState: function(basecolumn) {\n            return {\n                tokenize: jsTokenBase,\n                reAllowed: true,\n                kwAllowed: true,\n                cc: [],\n                lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n                localVars: null,\n                context: null,\n                indented: 0\n            };\n        },\n\n        token: function(stream, state) {\n            if (stream.sol()) {\n                if (!state.lexical.hasOwnProperty(\"align\"))\n                    state.lexical.align = false;\n                state.indented = stream.indentation();\n            }\n            if (stream.eatSpace()) return null;\n            var style = state.tokenize(stream, state);\n            if (type == \"comment\") return style;\n            state.reAllowed = type == \"operator\" || type == \"keyword c\" || type.match(/^[\\[{}\\(,;:]$/);\n            state.kwAllowed = type != '.';\n            return parseJS(state, style, type, content, stream);\n        },\n\n        indent: function(state, textAfter) {\n            if (state.tokenize != jsTokenBase) return 0;\n            var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical,\n                type = lexical.type, closing = firstChar == type;\n            if (type == \"vardef\") return lexical.indented + 4;\n            else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n            else if (type == \"stat\" || type == \"form\") return lexical.indented + indentUnit;\n            else if (lexical.info == \"switch\" && !closing)\n                return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n            else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n            else return lexical.indented + (closing ? 0 : indentUnit);\n        },\n\n        electricChars: \":{}\"\n    };\n});\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\n\nCodeMirror.defineMode(\"css\", function(config) {\n    var indentUnit = config.indentUnit, type;\n    function ret(style, tp) {type = tp; return style;}\n\n    function tokenBase(stream, state) {\n        var ch = stream.next();\n        if (ch == \"@\") {stream.eatWhile(/[\\w\\\\\\-]/); return ret(\"meta\", stream.current());}\n        else if (ch == \"/\" && stream.eat(\"*\")) {\n            state.tokenize = tokenCComment;\n            return tokenCComment(stream, state);\n        }\n        else if (ch == \"<\" && stream.eat(\"!\")) {\n            state.tokenize = tokenSGMLComment;\n            return tokenSGMLComment(stream, state);\n        }\n        else if (ch == \"=\") ret(null, \"compare\");\n        else if ((ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) return ret(null, \"compare\");\n        else if (ch == \"\\\"\" || ch == \"'\") {\n            state.tokenize = tokenString(ch);\n            return state.tokenize(stream, state);\n        }\n        else if (ch == \"#\") {\n            stream.eatWhile(/[\\w\\\\\\-]/);\n            return ret(\"atom\", \"hash\");\n        }\n        else if (ch == \"!\") {\n            stream.match(/^\\s*\\w*/);\n            return ret(\"keyword\", \"important\");\n        }\n        else if (/\\d/.test(ch)) {\n            stream.eatWhile(/[\\w.%]/);\n            return ret(\"number\", \"unit\");\n        }\n        else if (/[,.+>*\\/]/.test(ch)) {\n            return ret(null, \"select-op\");\n        }\n        else if (/[;{}:\\[\\]]/.test(ch)) {\n            return ret(null, ch);\n        }\n        else {\n            stream.eatWhile(/[\\w\\\\\\-]/);\n            return ret(\"variable\", \"variable\");\n        }\n    }\n\n    function tokenCComment(stream, state) {\n        var maybeEnd = false, ch;\n        while ((ch = stream.next()) != null) {\n            if (maybeEnd && ch == \"/\") {\n                state.tokenize = tokenBase;\n                break;\n            }\n            maybeEnd = (ch == \"*\");\n        }\n        return ret(\"comment\", \"comment\");\n    }\n\n    function tokenSGMLComment(stream, state) {\n        var dashes = 0, ch;\n        while ((ch = stream.next()) != null) {\n            if (dashes >= 2 && ch == \">\") {\n                state.tokenize = tokenBase;\n                break;\n            }\n            dashes = (ch == \"-\") ? dashes + 1 : 0;\n        }\n        return ret(\"comment\", \"comment\");\n    }\n\n    function tokenString(quote) {\n        return function(stream, state) {\n            var escaped = false, ch;\n            while ((ch = stream.next()) != null) {\n                if (ch == quote && !escaped)\n                    break;\n                escaped = !escaped && ch == \"\\\\\";\n            }\n            if (!escaped) state.tokenize = tokenBase;\n            return ret(\"string\", \"string\");\n        };\n    }\n\n    return {\n        startState: function(base) {\n            return {tokenize: tokenBase,\n                baseIndent: base || 0,\n                stack: []};\n        },\n\n        token: function(stream, state) {\n            if (stream.eatSpace()) return null;\n            var style = state.tokenize(stream, state);\n\n            var context = state.stack[state.stack.length-1];\n            if (type == \"hash\" && context == \"rule\") style = \"atom\";\n            else if (style == \"variable\") {\n                if (context == \"rule\") style = \"number\";\n                else if (!context || context == \"@media{\") style = \"tag\";\n            }\n\n            if (context == \"rule\" && /^[\\{\\};]$/.test(type))\n                state.stack.pop();\n            if (type == \"{\") {\n                if (context == \"@media\") state.stack[state.stack.length-1] = \"@media{\";\n                else state.stack.push(\"{\");\n            }\n            else if (type == \"}\") state.stack.pop();\n            else if (type == \"@media\") state.stack.push(\"@media\");\n            else if (context == \"{\" && type != \"comment\") state.stack.push(\"rule\");\n            return style;\n        },\n\n        indent: function(state, textAfter) {\n            var n = state.stack.length;\n            if (/^\\}/.test(textAfter))\n                n -= state.stack[state.stack.length-1] == \"rule\" ? 2 : 1;\n            return state.baseIndent + n * indentUnit;\n        },\n\n        electricChars: \"}\"\n    };\n});\n\nCodeMirror.defineMIME(\"text/css\", \"css\");\nCodeMirror.defineMode(\"htmlmixed\", function(config, parserConfig) {\n    var htmlMode = CodeMirror.getMode(config, {name: \"xml\", htmlMode: true});\n    var jsMode = CodeMirror.getMode(config, \"javascript\");\n    var cssMode = CodeMirror.getMode(config, \"css\");\n\n    function html(stream, state) {\n        var style = htmlMode.token(stream, state.htmlState);\n        if (style == \"tag\" && stream.current() == \">\" && state.htmlState.context) {\n            if (/^script$/i.test(state.htmlState.context.tagName)) {\n                state.token = javascript;\n                state.localState = jsMode.startState(htmlMode.indent(state.htmlState, \"\"));\n                state.mode = \"javascript\";\n            }\n            else if (/^style$/i.test(state.htmlState.context.tagName)) {\n                state.token = css;\n                state.localState = cssMode.startState(htmlMode.indent(state.htmlState, \"\"));\n                state.mode = \"css\";\n            }\n        }\n        return style;\n    }\n    function maybeBackup(stream, pat, style) {\n        var cur = stream.current();\n        var close = cur.search(pat);\n        if (close > -1) stream.backUp(cur.length - close);\n        return style;\n    }\n    function javascript(stream, state) {\n        if (stream.match(/^<\\/\\s*script\\s*>/i, false)) {\n            state.token = html;\n            state.curState = null;\n            state.mode = \"html\";\n            return html(stream, state);\n        }\n        return maybeBackup(stream, /<\\/\\s*script\\s*>/,\n            jsMode.token(stream, state.localState));\n    }\n    function css(stream, state) {\n        if (stream.match(/^<\\/\\s*style\\s*>/i, false)) {\n            state.token = html;\n            state.localState = null;\n            state.mode = \"html\";\n            return html(stream, state);\n        }\n        return maybeBackup(stream, /<\\/\\s*style\\s*>/,\n            cssMode.token(stream, state.localState));\n    }\n\n    return {\n        startState: function() {\n            var state = htmlMode.startState();\n            return {token: html, localState: null, mode: \"html\", htmlState: state};\n        },\n\n        copyState: function(state) {\n            if (state.localState)\n                var local = CodeMirror.copyState(state.token == css ? cssMode : jsMode, state.localState);\n            return {token: state.token, localState: local, mode: state.mode,\n                htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};\n        },\n\n        token: function(stream, state) {\n            return state.token(stream, state);\n        },\n\n        indent: function(state, textAfter) {\n            if (state.token == html || /^\\s*<\\//.test(textAfter))\n                return htmlMode.indent(state.htmlState, textAfter);\n            else if (state.token == javascript)\n                return jsMode.indent(state.localState, textAfter);\n            else\n                return cssMode.indent(state.localState, textAfter);\n        },\n\n        compareStates: function(a, b) {\n            return htmlMode.compareStates(a.htmlState, b.htmlState);\n        },\n\n        electricChars: \"/{}:\"\n    }\n});\n\nCodeMirror.defineMIME(\"text/html\", \"htmlmixed\");\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/adapters/mootools-adapter.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n MooTools adapter\n\n (c) 2010-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(){var e=window,h=document,f=e.MooTools.version.substring(0,3),i=f===\"1.2\"||f===\"1.1\",j=i||f===\"1.3\",g=e.$extend||function(){return Object.append.apply(Object,arguments)};e.HighchartsAdapter={init:function(a){var b=Fx.prototype,c=b.start,d=Fx.Morph.prototype,e=d.compute;b.start=function(b,d){var e=this.element;if(b.d)this.paths=a.init(e,e.d,this.toD);c.apply(this,arguments);return this};d.compute=function(b,c,d){var f=this.paths;if(f)this.element.attr(\"d\",a.step(f[0],f[1],d,this.toD));else return e.apply(this,\narguments)}},adapterRun:function(a,b){if(b===\"width\"||b===\"height\")return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=h.getElementsByTagName(\"head\")[0],d=h.createElement(\"script\");d.type=\"text/javascript\";d.src=a;d.onload=b;c.appendChild(d)},animate:function(a,b,c){var d=a.attr,f=c&&c.complete;if(d&&!a.setStyle)a.getStyle=a.attr,a.setStyle=function(){var a=arguments;this.attr.call(this,a[0],a[1][0])},a.$family=function(){return!0};e.HighchartsAdapter.stop(a);c=new Fx.Morph(d?a:$(a),\ng({transition:Fx.Transitions.Quad.easeInOut},c));if(d)c.element=a;if(b.d)c.toD=b.d;f&&c.addEvent(\"complete\",f);c.start(b);a.fx=c},each:function(a,b){return i?$each(a,b):Array.each(a,b)},map:function(a,b){return a.map(b)},grep:function(a,b){return a.filter(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){a=a.getPosition();return{left:a.x,top:a.y}},extendWithEvents:function(a){a.addEvent||(a.nodeName?$(a):g(a,new Events))},addEvent:function(a,b,c){typeof b===\"string\"&&(b===\n\"unload\"&&(b=\"beforeunload\"),e.HighchartsAdapter.extendWithEvents(a),a.addEvent(b,c))},removeEvent:function(a,b,c){typeof a!==\"string\"&&a.addEvent&&(b?(b===\"unload\"&&(b=\"beforeunload\"),c?a.removeEvent(b,c):a.removeEvents&&a.removeEvents(b)):a.removeEvents())},fireEvent:function(a,b,c,d){b={type:b,target:a};b=j?new Event(b):new DOMEvent(b);b=g(b,c);if(!b.target&&b.event)b.target=b.event.target;b.preventDefault=function(){d=null};a.fireEvent&&a.fireEvent(b.type,b);d&&d(b)},washMouseEvent:function(a){if(a.page)a.pageX=\na.page.x,a.pageY=a.page.y;return a},stop:function(a){a.fx&&a.fx.cancel()}}})();\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/adapters/mootools-adapter.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * MooTools adapter\n *\n * (c) 2010-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Fx, $, $extend, $each, $merge, Events, Event, DOMEvent */\n\n(function () {\n\nvar win = window,\n\tdoc = document,\n\tmooVersion = win.MooTools.version.substring(0, 3), // Get the first three characters of the version number\n\tlegacy = mooVersion === '1.2' || mooVersion === '1.1', // 1.1 && 1.2 considered legacy, 1.3 is not.\n\tlegacyEvent = legacy || mooVersion === '1.3', // In versions 1.1 - 1.3 the event class is named Event, in newer versions it is named DOMEvent.\n\t$extend = win.$extend || function () {\n\t\treturn Object.append.apply(Object, arguments);\n\t};\n\nwin.HighchartsAdapter = {\n\t/**\n\t * Initialize the adapter. This is run once as Highcharts is first run.\n\t * @param {Object} pathAnim The helper object to do animations across adapters.\n\t */\n\tinit: function (pathAnim) {\n\t\tvar fxProto = Fx.prototype,\n\t\t\tfxStart = fxProto.start,\n\t\t\tmorphProto = Fx.Morph.prototype,\n\t\t\tmorphCompute = morphProto.compute;\n\n\t\t// override Fx.start to allow animation of SVG element wrappers\n\t\t/*jslint unparam: true*//* allow unused parameters in fx functions */\n\t\tfxProto.start = function (from, to) {\n\t\t\tvar fx = this,\n\t\t\t\telem = fx.element;\n\n\t\t\t// special for animating paths\n\t\t\tif (from.d) {\n\t\t\t\t//this.fromD = this.element.d.split(' ');\n\t\t\t\tfx.paths = pathAnim.init(\n\t\t\t\t\telem,\n\t\t\t\t\telem.d,\n\t\t\t\t\tfx.toD\n\t\t\t\t);\n\t\t\t}\n\t\t\tfxStart.apply(fx, arguments);\n\n\t\t\treturn this; // chainable\n\t\t};\n\n\t\t// override Fx.step to allow animation of SVG element wrappers\n\t\tmorphProto.compute = function (from, to, delta) {\n\t\t\tvar fx = this,\n\t\t\t\tpaths = fx.paths;\n\n\t\t\tif (paths) {\n\t\t\t\tfx.element.attr(\n\t\t\t\t\t'd',\n\t\t\t\t\tpathAnim.step(paths[0], paths[1], delta, fx.toD)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn morphCompute.apply(fx, arguments);\n\t\t\t}\n\t\t};\n\t\t/*jslint unparam: false*/\n\t},\n\t\n\t/**\n\t * Run a general method on the framework, following jQuery syntax\n\t * @param {Object} el The HTML element\n\t * @param {String} method Which method to run on the wrapped element\n\t */\n\tadapterRun: function (el, method) {\n\t\t\n\t\t// This currently works for getting inner width and height. If adding\n\t\t// more methods later, we need a conditional implementation for each.\n\t\tif (method === 'width' || method === 'height') {\n\t\t\treturn parseInt($(el).getStyle(method), 10);\n\t\t}\n\t},\n\n\t/**\n\t * Downloads a script and executes a callback when done.\n\t * @param {String} scriptLocation\n\t * @param {Function} callback\n\t */\n\tgetScript: function (scriptLocation, callback) {\n\t\t// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.\n\t\tvar head = doc.getElementsByTagName('head')[0];\n\t\tvar script = doc.createElement('script');\n\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = scriptLocation;\n\t\tscript.onload = callback;\n\n\t\thead.appendChild(script);\n\t},\n\n\t/**\n\t * Animate a HTML element or SVG element wrapper\n\t * @param {Object} el\n\t * @param {Object} params\n\t * @param {Object} options jQuery-like animation options: duration, easing, callback\n\t */\n\tanimate: function (el, params, options) {\n\t\tvar isSVGElement = el.attr,\n\t\t\teffect,\n\t\t\tcomplete = options && options.complete;\n\n\t\tif (isSVGElement && !el.setStyle) {\n\t\t\t// add setStyle and getStyle methods for internal use in Moo\n\t\t\tel.getStyle = el.attr;\n\t\t\tel.setStyle = function () { // property value is given as array in Moo - break it down\n\t\t\t\tvar args = arguments;\n\t\t\t\tthis.attr.call(this, args[0], args[1][0]);\n\t\t\t};\n\t\t\t// dirty hack to trick Moo into handling el as an element wrapper\n\t\t\tel.$family = function () { return true; };\n\t\t}\n\n\t\t// stop running animations\n\t\twin.HighchartsAdapter.stop(el);\n\n\t\t// define and run the effect\n\t\teffect = new Fx.Morph(\n\t\t\tisSVGElement ? el : $(el),\n\t\t\t$extend({\n\t\t\t\ttransition: Fx.Transitions.Quad.easeInOut\n\t\t\t}, options)\n\t\t);\n\n\t\t// Make sure that the element reference is set when animating svg elements\n\t\tif (isSVGElement) {\n\t\t\teffect.element = el;\n\t\t}\n\n\t\t// special treatment for paths\n\t\tif (params.d) {\n\t\t\teffect.toD = params.d;\n\t\t}\n\n\t\t// jQuery-like events\n\t\tif (complete) {\n\t\t\teffect.addEvent('complete', complete);\n\t\t}\n\n\t\t// run\n\t\teffect.start(params);\n\n\t\t// record for use in stop method\n\t\tel.fx = effect;\n\t},\n\n\t/**\n\t * MooTool's each function\n\t *\n\t */\n\teach: function (arr, fn) {\n\t\treturn legacy ?\n\t\t\t$each(arr, fn) :\n\t\t\tArray.each(arr, fn);\n\t},\n\n\t/**\n\t * Map an array\n\t * @param {Array} arr\n\t * @param {Function} fn\n\t */\n\tmap: function (arr, fn) {\n\t\treturn arr.map(fn);\n\t},\n\n\t/**\n\t * Grep or filter an array\n\t * @param {Array} arr\n\t * @param {Function} fn\n\t */\n\tgrep: function (arr, fn) {\n\t\treturn arr.filter(fn);\n\t},\n\t\n\t/**\n\t * Return the index of an item in an array, or -1 if not matched\n\t */\n\tinArray: function (item, arr, from) {\n\t\treturn arr ? arr.indexOf(item, from) : -1;\n\t},\n\n\t/**\n\t * Get the offset of an element relative to the top left corner of the web page\n\t */\n\toffset: function (el) {\n\t\tvar offsets = el.getPosition(); // #1496\n\t\treturn {\n\t\t\tleft: offsets.x,\n\t\t\ttop: offsets.y\n\t\t};\n\t},\n\n\t/**\n\t * Extends an object with Events, if its not done\n\t */\n\textendWithEvents: function (el) {\n\t\t// if the addEvent method is not defined, el is a custom Highcharts object\n\t\t// like series or point\n\t\tif (!el.addEvent) {\n\t\t\tif (el.nodeName) {\n\t\t\t\tel = $(el); // a dynamically generated node\n\t\t\t} else {\n\t\t\t\t$extend(el, new Events()); // a custom object\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Add an event listener\n\t * @param {Object} el HTML element or custom object\n\t * @param {String} type Event type\n\t * @param {Function} fn Event handler\n\t */\n\taddEvent: function (el, type, fn) {\n\t\tif (typeof type === 'string') { // chart broke due to el being string, type function\n\n\t\t\tif (type === 'unload') { // Moo self destructs before custom unload events\n\t\t\t\ttype = 'beforeunload';\n\t\t\t}\n\n\t\t\twin.HighchartsAdapter.extendWithEvents(el);\n\n\t\t\tel.addEvent(type, fn);\n\t\t}\n\t},\n\n\tremoveEvent: function (el, type, fn) {\n\t\tif (typeof el === 'string') {\n\t\t\t// el.removeEvents below apperantly calls this method again. Do not quite understand why, so for now just bail out.\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif (el.addEvent) { // If el doesn't have an addEvent method, there are no events to remove\n\t\t\tif (type) {\n\t\t\t\tif (type === 'unload') { // Moo self destructs before custom unload events\n\t\t\t\t\ttype = 'beforeunload';\n\t\t\t\t}\n\t\n\t\t\t\tif (fn) {\n\t\t\t\t\tel.removeEvent(type, fn);\n\t\t\t\t} else if (el.removeEvents) { // #958\n\t\t\t\t\tel.removeEvents(type);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tel.removeEvents();\n\t\t\t}\n\t\t}\n\t},\n\n\tfireEvent: function (el, event, eventArguments, defaultFunction) {\n\t\tvar eventArgs = {\n\t\t\ttype: event,\n\t\t\ttarget: el\n\t\t};\n\t\t// create an event object that keeps all functions\n\t\tevent = legacyEvent ? new Event(eventArgs) : new DOMEvent(eventArgs);\n\t\tevent = $extend(event, eventArguments);\n\n\t\t// When running an event on the Chart.prototype, MooTools nests the target in event.event\n\t\tif (!event.target && event.event) {\n\t\t\tevent.target = event.event.target;\n\t\t}\n\n\t\t// override the preventDefault function to be able to use\n\t\t// this for custom events\n\t\tevent.preventDefault = function () {\n\t\t\tdefaultFunction = null;\n\t\t};\n\t\t// if fireEvent is not available on the object, there hasn't been added\n\t\t// any events to it above\n\t\tif (el.fireEvent) {\n\t\t\tel.fireEvent(event.type, event);\n\t\t}\n\n\t\t// fire the default if it is passed and it is not prevented above\n\t\tif (defaultFunction) {\n\t\t\tdefaultFunction(event);\n\t\t}\n\t},\n\t\n\t/**\n\t * Set back e.pageX and e.pageY that MooTools has abstracted away. #1165, #1346.\n\t */\n\twashMouseEvent: function (e) {\n\t\tif (e.page) {\n\t\t\te.pageX = e.page.x;\n\t\t\te.pageY = e.page.y;\n\t\t}\n\t\treturn e;\n\t},\n\n\t/**\n\t * Stop running animations on the object\n\t */\n\tstop: function (el) {\n\t\tif (el.fx) {\n\t\t\tel.fx.cancel();\n\t\t}\n\t}\n};\n\n}());\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/adapters/prototype-adapter.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Prototype adapter\n\n @author Michael Nelson, Torstein Hønsi.\n\n Feel free to use and modify this script.\n Highcharts license: www.highcharts.com/license.\n*/\nvar HighchartsAdapter=function(){var f=typeof Effect!==\"undefined\";return{init:function(a){if(f)Effect.HighchartsTransition=Class.create(Effect.Base,{initialize:function(b,c,d,g){var e;this.element=b;this.key=c;e=b.attr?b.attr(c):$(b).getStyle(c);if(c===\"d\")this.paths=a.init(b,b.d,d),this.toD=d,e=0,d=1;this.start(Object.extend(g||{},{from:e,to:d,attribute:c}))},setup:function(){HighchartsAdapter._extend(this.element);if(!this.element._highchart_animation)this.element._highchart_animation={};this.element._highchart_animation[this.key]=\nthis},update:function(b){var c=this.paths,d=this.element;c&&(b=a.step(c[0],c[1],b,this.toD));d.attr?d.element&&d.attr(this.options.attribute,b):(c={},c[this.options.attribute]=b,$(d).setStyle(c))},finish:function(){this.element&&this.element._highchart_animation&&delete this.element._highchart_animation[this.key]}})},adapterRun:function(a,b){return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=$$(\"head\")[0];c&&c.appendChild((new Element(\"script\",{type:\"text/javascript\",src:a})).observe(\"load\",\nb))},addNS:function(a){var b=/^(?:click|mouse(?:down|up|over|move|out))$/;return/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/.test(a)||b.test(a)?a:\"h:\"+a},addEvent:function(a,b,c){a.addEventListener||a.attachEvent?Event.observe($(a),HighchartsAdapter.addNS(b),c):(HighchartsAdapter._extend(a),a._highcharts_observe(b,c))},animate:function(a,b,c){var d,c=c||{};c.delay=0;c.duration=(c.duration||500)/1E3;c.afterFinish=c.complete;if(f)for(d in b)new Effect.HighchartsTransition($(a),\nd,b[d],c);else{if(a.attr)for(d in b)a.attr(d,b[d]);c.complete&&c.complete()}a.attr||$(a).setStyle(b)},stop:function(a){var b;if(a._highcharts_extended&&a._highchart_animation)for(b in a._highchart_animation)a._highchart_animation[b].cancel()},each:function(a,b){$A(a).each(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){return $(a).cumulativeOffset()},fireEvent:function(a,b,c,d){a.fire?a.fire(HighchartsAdapter.addNS(b),c):a._highcharts_extended&&(c=c||{},a._highcharts_fire(b,\nc));c&&c.defaultPrevented&&(d=null);d&&d(c)},removeEvent:function(a,b,c){$(a).stopObserving&&(b&&(b=HighchartsAdapter.addNS(b)),$(a).stopObserving(b,c));window===a?Event.stopObserving(a,b,c):(HighchartsAdapter._extend(a),a._highcharts_stop_observing(b,c))},washMouseEvent:function(a){return a},grep:function(a,b){return a.findAll(b)},map:function(a,b){return a.map(b)},_extend:function(a){a._highcharts_extended||Object.extend(a,{_highchart_events:{},_highchart_animation:null,_highcharts_extended:!0,\n_highcharts_observe:function(b,a){this._highchart_events[b]=[this._highchart_events[b],a].compact().flatten()},_highcharts_stop_observing:function(b,a){b?a?this._highchart_events[b]=[this._highchart_events[b]].compact().flatten().without(a):delete this._highchart_events[b]:this._highchart_events={}},_highcharts_fire:function(a,c){var d=this;(this._highchart_events[a]||[]).each(function(a){if(!c.stopped)c.preventDefault=function(){c.defaultPrevented=!0},c.target=d,a.bind(this)(c)===!1&&c.preventDefault()}.bind(this))}})}}}();\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/adapters/prototype-adapter.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Prototype adapter\n *\n * @author Michael Nelson, Torstein Hønsi.\n *\n * Feel free to use and modify this script.\n * Highcharts license: www.highcharts.com/license.\n */\n\n// JSLint options:\n/*global Effect, Class, Event, Element, $, $$, $A */\n\n// Adapter interface between prototype and the Highcharts charting library\nvar HighchartsAdapter = (function () {\n\nvar hasEffect = typeof Effect !== 'undefined';\n\nreturn {\n\n\t/**\n\t * Initialize the adapter. This is run once as Highcharts is first run.\n\t * @param {Object} pathAnim The helper object to do animations across adapters.\n\t */\n\tinit: function (pathAnim) {\n\t\tif (hasEffect) {\n\t\t\t/**\n\t\t\t * Animation for Highcharts SVG element wrappers only\n\t\t\t * @param {Object} element\n\t\t\t * @param {Object} attribute\n\t\t\t * @param {Object} to\n\t\t\t * @param {Object} options\n\t\t\t */\n\t\t\tEffect.HighchartsTransition = Class.create(Effect.Base, {\n\t\t\t\tinitialize: function (element, attr, to, options) {\n\t\t\t\t\tvar from,\n\t\t\t\t\t\topts;\n\n\t\t\t\t\tthis.element = element;\n\t\t\t\t\tthis.key = attr;\n\t\t\t\t\tfrom = element.attr ? element.attr(attr) : $(element).getStyle(attr);\n\n\t\t\t\t\t// special treatment for paths\n\t\t\t\t\tif (attr === 'd') {\n\t\t\t\t\t\tthis.paths = pathAnim.init(\n\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\telement.d,\n\t\t\t\t\t\t\tto\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.toD = to;\n\n\n\t\t\t\t\t\t// fake values in order to read relative position as a float in update\n\t\t\t\t\t\tfrom = 0;\n\t\t\t\t\t\tto = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\topts = Object.extend((options || {}), {\n\t\t\t\t\t\tfrom: from,\n\t\t\t\t\t\tto: to,\n\t\t\t\t\t\tattribute: attr\n\t\t\t\t\t});\n\t\t\t\t\tthis.start(opts);\n\t\t\t\t},\n\t\t\t\tsetup: function () {\n\t\t\t\t\tHighchartsAdapter._extend(this.element);\n\t\t\t\t\t// If this is the first animation on this object, create the _highcharts_animation helper that\n\t\t\t\t\t// contain pointers to the animation objects.\n\t\t\t\t\tif (!this.element._highchart_animation) {\n\t\t\t\t\t\tthis.element._highchart_animation = {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store a reference to this animation instance.\n\t\t\t\t\tthis.element._highchart_animation[this.key] = this;\n\t\t\t\t},\n\t\t\t\tupdate: function (position) {\n\t\t\t\t\tvar paths = this.paths,\n\t\t\t\t\t\telement = this.element,\n\t\t\t\t\t\tobj;\n\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tposition = pathAnim.step(paths[0], paths[1], position, this.toD);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (element.attr) { // SVGElement\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (element.element) { // If not, it has been destroyed (#1405)\n\t\t\t\t\t\t\telement.attr(this.options.attribute, position);\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t} else { // HTML, #409\n\t\t\t\t\t\tobj = {};\n\t\t\t\t\t\tobj[this.options.attribute] = position;\n\t\t\t\t\t\t$(element).setStyle(obj);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tfinish: function () {\n\t\t\t\t\t// Delete the property that holds this animation now that it is finished.\n\t\t\t\t\t// Both canceled animations and complete ones gets a 'finish' call.\n\t\t\t\t\tif (this.element && this.element._highchart_animation) { // #1405\n\t\t\t\t\t\tdelete this.element._highchart_animation[this.key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Run a general method on the framework, following jQuery syntax\n\t * @param {Object} el The HTML element\n\t * @param {String} method Which method to run on the wrapped element\n\t */\n\tadapterRun: function (el, method) {\n\t\t\n\t\t// This currently works for getting inner width and height. If adding\n\t\t// more methods later, we need a conditional implementation for each.\n\t\treturn parseInt($(el).getStyle(method), 10);\n\t\t\n\t},\n\n\t/**\n\t * Downloads a script and executes a callback when done.\n\t * @param {String} scriptLocation\n\t * @param {Function} callback\n\t */\n\tgetScript: function (scriptLocation, callback) {\n\t\tvar head = $$('head')[0]; // Returns an array, so pick the first element.\n\t\tif (head) {\n\t\t\t// Append a new 'script' element, set its type and src attributes, add a 'load' handler that calls the callback\n\t\t\thead.appendChild(new Element('script', { type: 'text/javascript', src: scriptLocation}).observe('load', callback));\n\t\t}\n\t},\n\n\t/**\n\t * Custom events in prototype needs to be namespaced. This method adds a namespace 'h:' in front of\n\t * events that are not recognized as native.\n\t */\n\taddNS: function (eventName) {\n\t\tvar HTMLEvents = /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,\n\t\t\tMouseEvents = /^(?:click|mouse(?:down|up|over|move|out))$/;\n\t\treturn (HTMLEvents.test(eventName) || MouseEvents.test(eventName)) ?\n\t\t\teventName :\n\t\t\t'h:' + eventName;\n\t},\n\n\t// el needs an event to be attached. el is not necessarily a dom element\n\taddEvent: function (el, event, fn) {\n\t\tif (el.addEventListener || el.attachEvent) {\n\t\t\tEvent.observe($(el), HighchartsAdapter.addNS(event), fn);\n\n\t\t} else {\n\t\t\tHighchartsAdapter._extend(el);\n\t\t\tel._highcharts_observe(event, fn);\n\t\t}\n\t},\n\n\t// motion makes things pretty. use it if effects is loaded, if not... still get to the end result.\n\tanimate: function (el, params, options) {\n\t\tvar key,\n\t\t\tfx;\n\n\t\t// default options\n\t\toptions = options || {};\n\t\toptions.delay = 0;\n\t\toptions.duration = (options.duration || 500) / 1000;\n\t\toptions.afterFinish = options.complete;\n\n\t\t// animate wrappers and DOM elements\n\t\tif (hasEffect) {\n\t\t\tfor (key in params) {\n\t\t\t\t// The fx variable is seemingly thrown away here, but the Effect.setup will add itself to the _highcharts_animation object\n\t\t\t\t// on the element itself so its not really lost.\n\t\t\t\tfx = new Effect.HighchartsTransition($(el), key, params[key], options);\n\t\t\t}\n\t\t} else {\n\t\t\tif (el.attr) { // #409 without effects\n\t\t\t\tfor (key in params) {\n\t\t\t\t\tel.attr(key, params[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.complete) {\n\t\t\t\toptions.complete();\n\t\t\t}\n\t\t}\n\n\t\tif (!el.attr) { // HTML element, #409\n\t\t\t$(el).setStyle(params);\n\t\t}\n\t},\n\n\t// this only occurs in higcharts 2.0+\n\tstop: function (el) {\n\t\tvar key;\n\t\tif (el._highcharts_extended && el._highchart_animation) {\n\t\t\tfor (key in el._highchart_animation) {\n\t\t\t\t// Cancel the animation\n\t\t\t\t// The 'finish' function in the Effect object will remove the reference\n\t\t\t\tel._highchart_animation[key].cancel();\n\t\t\t}\n\t\t}\n\t},\n\n\t// um.. each\n\teach: function (arr, fn) {\n\t\t$A(arr).each(fn);\n\t},\n\t\n\tinArray: function (item, arr, from) {\n\t\treturn arr ? arr.indexOf(item, from) : -1;\n\t},\n\n\t/**\n\t * Get the cumulative offset relative to the top left of the page. This method, unlike its\n\t * jQuery and MooTools counterpart, still suffers from issue #208 regarding the position\n\t * of a chart within a fixed container.\n\t */\n\toffset: function (el) {\n\t\treturn $(el).cumulativeOffset();\n\t},\n\n\t// fire an event based on an event name (event) and an object (el).\n\t// again, el may not be a dom element\n\tfireEvent: function (el, event, eventArguments, defaultFunction) {\n\t\tif (el.fire) {\n\t\t\tel.fire(HighchartsAdapter.addNS(event), eventArguments);\n\t\t} else if (el._highcharts_extended) {\n\t\t\teventArguments = eventArguments || {};\n\t\t\tel._highcharts_fire(event, eventArguments);\n\t\t}\n\n\t\tif (eventArguments && eventArguments.defaultPrevented) {\n\t\t\tdefaultFunction = null;\n\t\t}\n\n\t\tif (defaultFunction) {\n\t\t\tdefaultFunction(eventArguments);\n\t\t}\n\t},\n\n\tremoveEvent: function (el, event, handler) {\n\t\tif ($(el).stopObserving) {\n\t\t\tif (event) {\n\t\t\t\tevent = HighchartsAdapter.addNS(event);\n\t\t\t}\n\t\t\t$(el).stopObserving(event, handler);\n\t\t} if (window === el) {\n\t\t\tEvent.stopObserving(el, event, handler);\n\t\t} else {\n\t\t\tHighchartsAdapter._extend(el);\n\t\t\tel._highcharts_stop_observing(event, handler);\n\t\t}\n\t},\n\t\n\twashMouseEvent: function (e) {\n\t\treturn e;\n\t},\n\n\t// um, grep\n\tgrep: function (arr, fn) {\n\t\treturn arr.findAll(fn);\n\t},\n\n\t// um, map\n\tmap: function (arr, fn) {\n\t\treturn arr.map(fn);\n\t},\n\n\t// extend an object to handle highchart events (highchart objects, not svg elements).\n\t// this is a very simple way of handling events but whatever, it works (i think)\n\t_extend: function (object) {\n\t\tif (!object._highcharts_extended) {\n\t\t\tObject.extend(object, {\n\t\t\t\t_highchart_events: {},\n\t\t\t\t_highchart_animation: null,\n\t\t\t\t_highcharts_extended: true,\n\t\t\t\t_highcharts_observe: function (name, fn) {\n\t\t\t\t\tthis._highchart_events[name] = [this._highchart_events[name], fn].compact().flatten();\n\t\t\t\t},\n\t\t\t\t_highcharts_stop_observing: function (name, fn) {\n\t\t\t\t\tif (name) {\n\t\t\t\t\t\tif (fn) {\n\t\t\t\t\t\t\tthis._highchart_events[name] = [this._highchart_events[name]].compact().flatten().without(fn);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdelete this._highchart_events[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._highchart_events = {};\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t_highcharts_fire: function (name, args) {\n\t\t\t\t\tvar target = this;\n\t\t\t\t\t(this._highchart_events[name] || []).each(function (fn) {\n\t\t\t\t\t\t// args is never null here\n\t\t\t\t\t\tif (args.stopped) {\n\t\t\t\t\t\t\treturn; // \"throw $break\" wasn't working. i think because of the scope of 'this'.\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Attach a simple preventDefault function to skip default handler if called\n\t\t\t\t\t\targs.preventDefault = function () {\n\t\t\t\t\t\t\targs.defaultPrevented = true;\n\t\t\t\t\t\t};\n\t\t\t\t\t\targs.target = target;\n\n\t\t\t\t\t\t// If the event handler return false, prevent the default handler from executing\n\t\t\t\t\t\tif (fn.bind(this)(args) === false) {\n\t\t\t\t\t\t\targs.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n.bind(this));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n};\n}());\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/adapters/standalone-framework.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n Standalone Highcharts Framework\n\n License: MIT License\n*/\nvar HighchartsAdapter=function(){function o(c){function a(a,b,d){a.removeEventListener(b,d,!1)}function d(a,b,d){d=a.HCProxiedMethods[d.toString()];a.detachEvent(\"on\"+b,d)}function b(b,c){var f=b.HCEvents,i,g,k,j;if(b.removeEventListener)i=a;else if(b.attachEvent)i=d;else return;c?(g={},g[c]=!0):g=f;for(j in g)if(f[j])for(k=f[j].length;k--;)i(b,j,f[j][k])}c.HCExtended||Highcharts.extend(c,{HCExtended:!0,HCEvents:{},bind:function(b,a){var d=this,c=this.HCEvents,g;if(d.addEventListener)d.addEventListener(b,\na,!1);else if(d.attachEvent){g=function(b){a.call(d,b)};if(!d.HCProxiedMethods)d.HCProxiedMethods={};d.HCProxiedMethods[a.toString()]=g;d.attachEvent(\"on\"+b,g)}c[b]===r&&(c[b]=[]);c[b].push(a)},unbind:function(c,h){var f,i;c?(f=this.HCEvents[c]||[],h?(i=HighchartsAdapter.inArray(h,f),i>-1&&(f.splice(i,1),this.HCEvents[c]=f),this.removeEventListener?a(this,c,h):this.attachEvent&&d(this,c,h)):(b(this,c),this.HCEvents[c]=[])):(b(this),this.HCEvents={})},trigger:function(b,a){var d=this.HCEvents[b]||\n[],c=d.length,g,k,j;k=function(){a.defaultPrevented=!0};for(g=0;g<c;g++){j=d[g];if(a.stopped)break;a.preventDefault=k;a.target=this;a.type=b;j.call(this,a)===!1&&a.preventDefault()}}});return c}var r,l=document,p=[],m=[],q,n;Math.easeInOutSine=function(c,a,d,b){return-d/2*(Math.cos(Math.PI*c/b)-1)+a};return{init:function(c){if(!l.defaultView)this._getStyle=function(a,d){var b;return a.style[d]?a.style[d]:(d===\"opacity\"&&(d=\"filter\"),b=a.currentStyle[d.replace(/\\-(\\w)/g,function(a,b){return b.toUpperCase()})],\nd===\"filter\"&&(b=b.replace(/alpha\\(opacity=([0-9]+)\\)/,function(b,a){return a/100})),b===\"\"?1:b)},this.adapterRun=function(a,d){var b={width:\"clientWidth\",height:\"clientHeight\"}[d];if(b)return a.style.zoom=1,a[b]-2*parseInt(HighchartsAdapter._getStyle(a,\"padding\"),10)};if(!Array.prototype.forEach)this.each=function(a,d){for(var b=0,c=a.length;b<c;b++)if(d.call(a[b],a[b],b,a)===!1)return b};if(!Array.prototype.indexOf)this.inArray=function(a,d){var b,c=0;if(d)for(b=d.length;c<b;c++)if(d[c]===a)return c;\nreturn-1};if(!Array.prototype.filter)this.grep=function(a,d){for(var b=[],c=0,h=a.length;c<h;c++)d(a[c],c)&&b.push(a[c]);return b};n=function(a,c,b){this.options=c;this.elem=a;this.prop=b};n.prototype={update:function(){var a;a=this.paths;var d=this.elem,b=d.element;a&&b?d.attr(\"d\",c.step(a[0],a[1],this.now,this.toD)):d.attr?b&&d.attr(this.prop,this.now):(a={},a[d]=this.now+this.unit,Highcharts.css(d,a));this.options.step&&this.options.step.call(this.elem,this.now,this)},custom:function(a,c,b){var e=\nthis,h=function(a){return e.step(a)},f;this.startTime=+new Date;this.start=a;this.end=c;this.unit=b;this.now=this.start;this.pos=this.state=0;h.elem=this.elem;h()&&m.push(h)===1&&(q=setInterval(function(){for(f=0;f<m.length;f++)m[f]()||m.splice(f--,1);m.length||clearInterval(q)},13))},step:function(a){var c=+new Date,b;b=this.options;var e;if(this.elem.stopAnimation)b=!1;else if(a||c>=b.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();a=this.options.curAnim[this.prop]=\n!0;for(e in b.curAnim)b.curAnim[e]!==!0&&(a=!1);a&&b.complete&&b.complete.call(this.elem);b=!1}else e=c-this.startTime,this.state=e/b.duration,this.pos=b.easing(e,0,1,b.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update(),b=!0;return b}};this.animate=function(a,d,b){var e,h=\"\",f,i,g;a.stopAnimation=!1;if(typeof b!==\"object\"||b===null)e=arguments,b={duration:e[2],easing:e[3],complete:e[4]};if(typeof b.duration!==\"number\")b.duration=400;b.easing=Math[b.easing]||Math.easeInOutSine;\nb.curAnim=Highcharts.extend({},d);for(g in d)i=new n(a,b,g),f=null,g===\"d\"?(i.paths=c.init(a,a.d,d.d),i.toD=d.d,e=0,f=1):a.attr?e=a.attr(g):(e=parseFloat(HighchartsAdapter._getStyle(a,g))||0,g!==\"opacity\"&&(h=\"px\")),f||(f=parseFloat(d[g])),i.custom(e,f,h)}},_getStyle:function(c,a){return window.getComputedStyle(c).getPropertyValue(a)},getScript:function(c,a){var d=l.getElementsByTagName(\"head\")[0],b=l.createElement(\"script\");b.type=\"text/javascript\";b.src=c;b.onload=a;d.appendChild(b)},inArray:function(c,\na){return a.indexOf?a.indexOf(c):p.indexOf.call(a,c)},adapterRun:function(c,a){return parseInt(HighchartsAdapter._getStyle(c,a),10)},grep:function(c,a){return p.filter.call(c,a)},map:function(c,a){for(var d=[],b=0,e=c.length;b<e;b++)d[b]=a.call(c[b],c[b],b,c);return d},offset:function(c){for(var a=0,d=0;c;)a+=c.offsetLeft,d+=c.offsetTop,c=c.offsetParent;return{left:a,top:d}},addEvent:function(c,a,d){o(c).bind(a,d)},removeEvent:function(c,a,d){o(c).unbind(a,d)},fireEvent:function(c,a,d,b){var e;l.createEvent&&\n(c.dispatchEvent||c.fireEvent)?(e=l.createEvent(\"Events\"),e.initEvent(a,!0,!0),e.target=c,Highcharts.extend(e,d),c.dispatchEvent?c.dispatchEvent(e):c.fireEvent(a,e)):c.HCExtended===!0&&(d=d||{},c.trigger(a,d));d&&d.defaultPrevented&&(b=null);b&&b(d)},washMouseEvent:function(c){return c},stop:function(c){c.stopAnimation=!0},each:function(c,a){return Array.prototype.forEach.call(c,a)}}}();\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/adapters/standalone-framework.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n * Standalone Highcharts Framework\n *\n * License: MIT License\n */\n\n\n/*global Highcharts */\nvar HighchartsAdapter = (function () {\n\nvar UNDEFINED,\n\tdoc = document,\n\temptyArray = [],\n\ttimers = [],\n\ttimerId,\n\tFx;\n\nMath.easeInOutSine = function (t, b, c, d) {\n\treturn -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n};\n\n\n\n/**\n * Extend given object with custom events\n */\nfunction augment(obj) {\n\tfunction removeOneEvent(el, type, fn) {\n\t\tel.removeEventListener(type, fn, false);\n\t}\n\n\tfunction IERemoveOneEvent(el, type, fn) {\n\t\tfn = el.HCProxiedMethods[fn.toString()];\n\t\tel.detachEvent('on' + type, fn);\n\t}\n\n\tfunction removeAllEvents(el, type) {\n\t\tvar events = el.HCEvents,\n\t\t\tremove,\n\t\t\ttypes,\n\t\t\tlen,\n\t\t\tn;\n\n\t\tif (el.removeEventListener) {\n\t\t\tremove = removeOneEvent;\n\t\t} else if (el.attachEvent) {\n\t\t\tremove = IERemoveOneEvent;\n\t\t} else {\n\t\t\treturn; // break on non-DOM events\n\t\t}\n\n\n\t\tif (type) {\n\t\t\ttypes = {};\n\t\t\ttypes[type] = true;\n\t\t} else {\n\t\t\ttypes = events;\n\t\t}\n\n\t\tfor (n in types) {\n\t\t\tif (events[n]) {\n\t\t\t\tlen = events[n].length;\n\t\t\t\twhile (len--) {\n\t\t\t\t\tremove(el, n, events[n][len]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!obj.HCExtended) {\n\t\tHighcharts.extend(obj, {\n\t\t\tHCExtended: true,\n\n\t\t\tHCEvents: {},\n\n\t\t\tbind: function (name, fn) {\n\t\t\t\tvar el = this,\n\t\t\t\t\tevents = this.HCEvents,\n\t\t\t\t\twrappedFn;\n\n\t\t\t\t// handle DOM events in modern browsers\n\t\t\t\tif (el.addEventListener) {\n\t\t\t\t\tel.addEventListener(name, fn, false);\n\n\t\t\t\t// handle old IE implementation\n\t\t\t\t} else if (el.attachEvent) {\n\t\t\t\t\t\n\t\t\t\t\twrappedFn = function (e) {\n\t\t\t\t\t\tfn.call(el, e);\n\t\t\t\t\t};\n\n\t\t\t\t\tif (!el.HCProxiedMethods) {\n\t\t\t\t\t\tel.HCProxiedMethods = {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// link wrapped fn with original fn, so we can get this in removeEvent\n\t\t\t\t\tel.HCProxiedMethods[fn.toString()] = wrappedFn;\n\n\t\t\t\t\tel.attachEvent('on' + name, wrappedFn);\n\t\t\t\t}\n\n\n\t\t\t\tif (events[name] === UNDEFINED) {\n\t\t\t\t\tevents[name] = [];\n\t\t\t\t}\n\n\t\t\t\tevents[name].push(fn);\n\t\t\t},\n\n\t\t\tunbind: function (name, fn) {\n\t\t\t\tvar events,\n\t\t\t\t\tindex;\n\n\t\t\t\tif (name) {\n\t\t\t\t\tevents = this.HCEvents[name] || [];\n\t\t\t\t\tif (fn) {\n\t\t\t\t\t\tindex = HighchartsAdapter.inArray(fn, events);\n\t\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\t\tevents.splice(index, 1);\n\t\t\t\t\t\t\tthis.HCEvents[name] = events;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.removeEventListener) {\n\t\t\t\t\t\t\tremoveOneEvent(this, name, fn);\n\t\t\t\t\t\t} else if (this.attachEvent) {\n\t\t\t\t\t\t\tIERemoveOneEvent(this, name, fn);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tremoveAllEvents(this, name);\n\t\t\t\t\t\tthis.HCEvents[name] = [];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremoveAllEvents(this);\n\t\t\t\t\tthis.HCEvents = {};\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttrigger: function (name, args) {\n\t\t\t\tvar events = this.HCEvents[name] || [],\n\t\t\t\t\ttarget = this,\n\t\t\t\t\tlen = events.length,\n\t\t\t\t\ti,\n\t\t\t\t\tpreventDefault,\n\t\t\t\t\tfn;\n\n\t\t\t\t// Attach a simple preventDefault function to skip default handler if called\n\t\t\t\tpreventDefault = function () {\n\t\t\t\t\targs.defaultPrevented = true;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\tfn = events[i];\n\n\t\t\t\t\t// args is never null here\n\t\t\t\t\tif (args.stopped) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\targs.preventDefault = preventDefault;\n\t\t\t\t\targs.target = target;\n\t\t\t\t\targs.type = name; // #2297\t\n\t\t\t\t\t\n\t\t\t\t\t// If the event handler return false, prevent the default handler from executing\n\t\t\t\t\tif (fn.call(this, args) === false) {\n\t\t\t\t\t\targs.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn obj;\n}\n\n\nreturn {\n\t/**\n\t * Initialize the adapter. This is run once as Highcharts is first run.\n\t */\n\tinit: function (pathAnim) {\n\n\t\t/**\n\t\t * Compatibility section to add support for legacy IE. This can be removed if old IE \n\t\t * support is not needed.\n\t\t */\n\t\tif (!doc.defaultView) {\n\t\t\tthis._getStyle = function (el, prop) {\n\t\t\t\tvar val;\n\t\t\t\tif (el.style[prop]) {\n\t\t\t\t\treturn el.style[prop];\n\t\t\t\t} else {\n\t\t\t\t\tif (prop === 'opacity') {\n\t\t\t\t\t\tprop = 'filter';\n\t\t\t\t\t}\n\t\t\t\t\t/*jslint unparam: true*/\n\t\t\t\t\tval = el.currentStyle[prop.replace(/\\-(\\w)/g, function (a, b) { return b.toUpperCase(); })];\n\t\t\t\t\tif (prop === 'filter') {\n\t\t\t\t\t\tval = val.replace(\n\t\t\t\t\t\t\t/alpha\\(opacity=([0-9]+)\\)/, \n\t\t\t\t\t\t\tfunction (a, b) { \n\t\t\t\t\t\t\t\treturn b / 100; \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t/*jslint unparam: false*/\n\t\t\t\t\treturn val === '' ? 1 : val;\n\t\t\t\t} \n\t\t\t};\n\t\t\tthis.adapterRun = function (elem, method) {\n\t\t\t\tvar alias = { width: 'clientWidth', height: 'clientHeight' }[method];\n\n\t\t\t\tif (alias) {\n\t\t\t\t\telem.style.zoom = 1;\n\t\t\t\t\treturn elem[alias] - 2 * parseInt(HighchartsAdapter._getStyle(elem, 'padding'), 10);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (!Array.prototype.forEach) {\n\t\t\tthis.each = function (arr, fn) { // legacy\n\t\t\t\tvar i = 0, \n\t\t\t\t\tlen = arr.length;\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tif (fn.call(arr[i], arr[i], i, arr) === false) {\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (!Array.prototype.indexOf) {\n\t\t\tthis.inArray = function (item, arr) {\n\t\t\t\tvar len, \n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (arr) {\n\t\t\t\t\tlen = arr.length;\n\t\t\t\t\t\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tif (arr[i] === item) {\n\t\t\t\t\t\t\treturn i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t}\n\n\t\tif (!Array.prototype.filter) {\n\t\t\tthis.grep = function (elements, callback) {\n\t\t\t\tvar ret = [],\n\t\t\t\t\ti = 0,\n\t\t\t\t\tlength = elements.length;\n\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (!!callback(elements[i], i)) {\n\t\t\t\t\t\tret.push(elements[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn ret;\n\t\t\t};\n\t\t}\n\n\t\t//--- End compatibility section ---\n\n\n\t\t/**\n\t\t * Start of animation specific code\n\t\t */\n\t\tFx = function (elem, options, prop) {\n\t\t\tthis.options = options;\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t};\n\t\tFx.prototype = {\n\t\t\t\n\t\t\tupdate: function () {\n\t\t\t\tvar styles,\n\t\t\t\t\tpaths = this.paths,\n\t\t\t\t\telem = this.elem,\n\t\t\t\t\telemelem = elem.element; // if destroyed, it is null\n\n\t\t\t\t// Animating a path definition on SVGElement\n\t\t\t\tif (paths && elemelem) {\n\t\t\t\t\telem.attr('d', pathAnim.step(paths[0], paths[1], this.now, this.toD));\n\t\t\t\t\n\t\t\t\t// Other animations on SVGElement\n\t\t\t\t} else if (elem.attr) {\n\t\t\t\t\tif (elemelem) {\n\t\t\t\t\t\telem.attr(this.prop, this.now);\n\t\t\t\t\t}\n\n\t\t\t\t// HTML styles\n\t\t\t\t} else {\n\t\t\t\t\tstyles = {};\n\t\t\t\t\tstyles[elem] = this.now + this.unit;\n\t\t\t\t\tHighcharts.css(elem, styles);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (this.options.step) {\n\t\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t\t}\n\n\t\t\t},\n\t\t\tcustom: function (from, to, unit) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tt = function (gotoEnd) {\n\t\t\t\t\t\treturn self.step(gotoEnd);\n\t\t\t\t\t},\n\t\t\t\t\ti;\n\n\t\t\t\tthis.startTime = +new Date();\n\t\t\t\tthis.start = from;\n\t\t\t\tthis.end = to;\n\t\t\t\tthis.unit = unit;\n\t\t\t\tthis.now = this.start;\n\t\t\t\tthis.pos = this.state = 0;\n\n\t\t\t\tt.elem = this.elem;\n\n\t\t\t\tif (t() && timers.push(t) === 1) {\n\t\t\t\t\ttimerId = setInterval(function () {\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (i = 0; i < timers.length; i++) {\n\t\t\t\t\t\t\tif (!timers[i]()) {\n\t\t\t\t\t\t\t\ttimers.splice(i--, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!timers.length) {\n\t\t\t\t\t\t\tclearInterval(timerId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 13);\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tstep: function (gotoEnd) {\n\t\t\t\tvar t = +new Date(),\n\t\t\t\t\tret,\n\t\t\t\t\tdone,\n\t\t\t\t\toptions = this.options,\n\t\t\t\t\ti;\n\n\t\t\t\tif (this.elem.stopAnimation) {\n\t\t\t\t\tret = false;\n\n\t\t\t\t} else if (gotoEnd || t >= options.duration + this.startTime) {\n\t\t\t\t\tthis.now = this.end;\n\t\t\t\t\tthis.pos = this.state = 1;\n\t\t\t\t\tthis.update();\n\n\t\t\t\t\tthis.options.curAnim[this.prop] = true;\n\n\t\t\t\t\tdone = true;\n\t\t\t\t\tfor (i in options.curAnim) {\n\t\t\t\t\t\tif (options.curAnim[i] !== true) {\n\t\t\t\t\t\t\tdone = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tif (options.complete) {\n\t\t\t\t\t\t\toptions.complete.call(this.elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tret = false;\n\n\t\t\t\t} else {\n\t\t\t\t\tvar n = t - this.startTime;\n\t\t\t\t\tthis.state = n / options.duration;\n\t\t\t\t\tthis.pos = options.easing(n, 0, 1, options.duration);\n\t\t\t\t\tthis.now = this.start + ((this.end - this.start) * this.pos);\n\t\t\t\t\tthis.update();\n\t\t\t\t\tret = true;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * The adapter animate method\n\t\t */\n\t\tthis.animate = function (el, prop, opt) {\n\t\t\tvar start,\n\t\t\t\tunit = '',\n\t\t\t\tend,\n\t\t\t\tfx,\n\t\t\t\targs,\n\t\t\t\tname;\n\n\t\t\tel.stopAnimation = false; // ready for new\n\n\t\t\tif (typeof opt !== 'object' || opt === null) {\n\t\t\t\targs = arguments;\n\t\t\t\topt = {\n\t\t\t\t\tduration: args[2],\n\t\t\t\t\teasing: args[3],\n\t\t\t\t\tcomplete: args[4]\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (typeof opt.duration !== 'number') {\n\t\t\t\topt.duration = 400;\n\t\t\t}\n\t\t\topt.easing = Math[opt.easing] || Math.easeInOutSine;\n\t\t\topt.curAnim = Highcharts.extend({}, prop);\n\t\t\t\n\t\t\tfor (name in prop) {\n\t\t\t\tfx = new Fx(el, opt, name);\n\t\t\t\tend = null;\n\t\t\t\t\n\t\t\t\tif (name === 'd') {\n\t\t\t\t\tfx.paths = pathAnim.init(\n\t\t\t\t\t\tel,\n\t\t\t\t\t\tel.d,\n\t\t\t\t\t\tprop.d\n\t\t\t\t\t);\n\t\t\t\t\tfx.toD = prop.d;\n\t\t\t\t\tstart = 0;\n\t\t\t\t\tend = 1;\n\t\t\t\t} else if (el.attr) {\n\t\t\t\t\tstart = el.attr(name);\n\t\t\t\t} else {\n\t\t\t\t\tstart = parseFloat(HighchartsAdapter._getStyle(el, name)) || 0;\n\t\t\t\t\tif (name !== 'opacity') {\n\t\t\t\t\t\tunit = 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (!end) {\n\t\t\t\t\tend = parseFloat(prop[name]);\n\t\t\t\t}\n\t\t\t\tfx.custom(start, end, unit);\n\t\t\t}\t\n\t\t};\n\t},\n\n\t/**\n\t * Internal method to return CSS value for given element and property\n\t */\n\t_getStyle: function (el, prop) {\n\t\treturn window.getComputedStyle(el).getPropertyValue(prop);\n\t},\n\n\t/**\n\t * Downloads a script and executes a callback when done.\n\t * @param {String} scriptLocation\n\t * @param {Function} callback\n\t */\n\tgetScript: function (scriptLocation, callback) {\n\t\t// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.\n\t\tvar head = doc.getElementsByTagName('head')[0],\n\t\t\tscript = doc.createElement('script');\n\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = scriptLocation;\n\t\tscript.onload = callback;\n\n\t\thead.appendChild(script);\n\t},\n\n\t/**\n\t * Return the index of an item in an array, or -1 if not found\n\t */\n\tinArray: function (item, arr) {\n\t\treturn arr.indexOf ? arr.indexOf(item) : emptyArray.indexOf.call(arr, item);\n\t},\n\n\n\t/**\n\t * A direct link to adapter methods\n\t */\n\tadapterRun: function (elem, method) {\n\t\treturn parseInt(HighchartsAdapter._getStyle(elem, method), 10);\n\t},\n\n\t/**\n\t * Filter an array\n\t */\n\tgrep: function (elements, callback) {\n\t\treturn emptyArray.filter.call(elements, callback);\n\t},\n\n\t/**\n\t * Map an array\n\t */\n\tmap: function (arr, fn) {\n\t\tvar results = [], i = 0, len = arr.length;\n\n\t\tfor (; i < len; i++) {\n\t\t\tresults[i] = fn.call(arr[i], arr[i], i, arr);\n\t\t}\n\n\t\treturn results;\n\t},\n\n\toffset: function (el) {\n\t\tvar left = 0,\n\t\t\ttop = 0;\n\n\t\twhile (el) {\n\t\t\tleft += el.offsetLeft;\n\t\t\ttop += el.offsetTop;\n\t\t\tel = el.offsetParent;\n\t\t}\n\n\t\treturn {\n\t\t\tleft: left,\n\t\t\ttop: top\n\t\t};\n\t},\n\n\t/**\n\t * Add an event listener\n\t */\n\taddEvent: function (el, type, fn) {\n\t\taugment(el).bind(type, fn);\n\t},\n\n\t/**\n\t * Remove event added with addEvent\n\t */\n\tremoveEvent: function (el, type, fn) {\n\t\taugment(el).unbind(type, fn);\n\t},\n\n\t/**\n\t * Fire an event on a custom object\n\t */\n\tfireEvent: function (el, type, eventArguments, defaultFunction) {\n\t\tvar e;\n\n\t\tif (doc.createEvent && (el.dispatchEvent || el.fireEvent)) {\n\t\t\te = doc.createEvent('Events');\n\t\t\te.initEvent(type, true, true);\n\t\t\te.target = el;\n\n\t\t\tHighcharts.extend(e, eventArguments);\n\n\t\t\tif (el.dispatchEvent) {\n\t\t\t\tel.dispatchEvent(e);\n\t\t\t} else {\n\t\t\t\tel.fireEvent(type, e);\n\t\t\t}\n\n\t\t} else if (el.HCExtended === true) {\n\t\t\teventArguments = eventArguments || {};\n\t\t\tel.trigger(type, eventArguments);\n\t\t}\n\n\t\tif (eventArguments && eventArguments.defaultPrevented) {\n\t\t\tdefaultFunction = null;\n\t\t}\n\n\t\tif (defaultFunction) {\n\t\t\tdefaultFunction(eventArguments);\n\t\t}\n\t},\n\n\twashMouseEvent: function (e) {\n\t\treturn e;\n\t},\n\n\n\t/**\n\t * Stop running animation\n\t */\n\tstop: function (el) {\n\t\tel.stopAnimation = true;\n\t},\n\n\t/**\n\t * Utility for iterating over an array. Parameters are reversed compared to jQuery.\n\t * @param {Array} arr\n\t * @param {Function} fn\n\t */\n\teach: function (arr, fn) { // modern browsers\n\t\treturn Array.prototype.forEach.call(arr, fn);\n\t}\n};\n}());\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/highcharts-more.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n (c) 2009-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(j,C){function J(a,b,c){this.init.call(this,a,b,c)}function K(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var c=this.xAxis.center;a.push(\"L\",c[0],c[1])},this.closedStacks=!0}function L(a,b){var c=this.chart,d=this.options.animation,g=this.group,f=this.markerGroup,e=this.xAxis.center,i=c.plotLeft,n=c.plotTop;if(c.polar){if(c.renderer.isSVG)if(d===!0&&(d={}),b){if(c={translateX:e[0]+i,translateY:e[1]+n,scaleX:0.001,scaleY:0.001},g.attr(c),f)f.attrSetters=g.attrSetters,\nf.attr(c)}else c={translateX:i,translateY:n,scaleX:1,scaleY:1},g.animate(c,d),f&&f.animate(c,d),this.animate=null}else a.call(this,b)}var P=j.arrayMin,Q=j.arrayMax,s=j.each,F=j.extend,p=j.merge,R=j.map,r=j.pick,v=j.pInt,m=j.getOptions().plotOptions,h=j.seriesTypes,x=j.extendClass,M=j.splat,o=j.wrap,N=j.Axis,u=j.Tick,z=j.Series,q=h.column.prototype,t=Math,D=t.round,A=t.floor,S=t.max,w=function(){};F(J.prototype,{init:function(a,b,c){var d=this,g=d.defaultOptions;d.chart=b;if(b.angular)g.background=\n{};d.options=a=p(g,a);(a=a.background)&&s([].concat(M(a)).reverse(),function(a){var b=a.backgroundColor,a=p(d.defaultBackgroundOptions,a);if(b)a.backgroundColor=b;a.color=a.backgroundColor;c.options.plotBands.unshift(a)})},defaultOptions:{center:[\"50%\",\"50%\"],size:\"85%\",startAngle:0},defaultBackgroundOptions:{shape:\"circle\",borderWidth:1,borderColor:\"silver\",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,\"#FFF\"],[1,\"#DDD\"]]},from:Number.MIN_VALUE,innerRadius:0,to:Number.MAX_VALUE,\nouterRadius:\"105%\"}});var G=N.prototype,u=u.prototype,T={getOffset:w,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:w,setCategories:w,setTitle:w},O={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:\"center\",x:0,y:null},minorGridLineWidth:0,minorTickInterval:\"auto\",minorTickLength:10,minorTickPosition:\"inside\",minorTickWidth:1,plotBands:[],tickLength:10,tickPosition:\"inside\",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null,\ndistance:15,x:0,y:null},maxPadding:0,minPadding:0,plotBands:[],showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:\"circle\",labels:{align:\"right\",x:-3,y:-2},plotBands:[],showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){this.options=p(this.defaultOptions,this.defaultRadialOptions,a)},getOffset:function(){G.getOffset.call(this);this.chart.axisOffset[this.side]=0},getLinePath:function(a,b){var c=this.center,b=r(b,c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+\nc[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center&&(this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min||1),this.isXAxis))this.minPixelPadding=this.transA*this.minPointOffset+(this.reversed?(this.endAngleRad-this.startAngleRad)/4:0)},beforeSetTickPositions:function(){this.autoConnect&&(this.max+=this.categories&&\n1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial)this.center=this.pane.center=h.pie.prototype.getCenter.call(this.pane),this.len=this.width=this.height=this.isCircular?this.center[2]*(this.endAngleRad-this.startAngleRad)/2:this.center[2]/2},getPosition:function(a,b){if(!this.isCircular)b=this.translate(a),a=this.min;return this.postTranslate(this.translate(a),r(b,this.center[2]/2)-this.offset)},postTranslate:function(a,b){var c=this.chart,\nd=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+d[0]+Math.cos(a)*b,y:c.plotTop+d[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var d=this.center,g=this.startAngleRad,f=d[2]/2,e=[r(c.outerRadius,\"100%\"),c.innerRadius,r(c.thickness,10)],i=/%$/,n,l=this.isCircular;this.options.gridLineInterpolation===\"polygon\"?d=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(l||(e[0]=this.translate(a),e[1]=this.translate(b)),e=R(e,function(a){i.test(a)&&(a=v(a,10)*f/100);return a}),c.shape===\n\"circle\"||!l?(a=-Math.PI/2,b=Math.PI*1.5,n=!0):(a=g+this.translate(a),b=g+this.translate(b)),d=this.chart.renderer.symbols.arc(this.left+d[0],this.top+d[1],e[0],e[0],{start:a,end:b,innerR:r(e[1],e[0]-e[2]),open:n}));return d},getPlotLinePath:function(a,b){var c=this.center,d=this.chart,g=this.getPosition(a),f,e,i;this.isCircular?i=[\"M\",c[0]+d.plotLeft,c[1]+d.plotTop,\"L\",g.x,g.y]:this.options.gridLineInterpolation===\"circle\"?(a=this.translate(a))&&(i=this.getLinePath(0,a)):(f=d.xAxis[0],i=[],a=this.translate(a),\nc=f.tickPositions,f.autoConnect&&(c=c.concat([c[0]])),b&&(c=[].concat(c).reverse()),s(c,function(c,b){e=f.getPosition(c,a);i.push(b?\"L\":\"M\",e.x,e.y)}));return i},getTitlePosition:function(){var a=this.center,b=this.chart,c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};o(G,\"init\",function(a,b,c){var k;var d=b.angular,g=b.polar,f=c.isX,e=d&&f,i,n;n=b.options;var l=c.pane||0;if(d){if(F(this,e?T:O),i=!f)this.defaultRadialOptions=\nthis.defaultRadialGaugeOptions}else if(g)F(this,O),this.defaultRadialOptions=(i=f)?this.defaultRadialXOptions:p(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!e&&(d||g)){a=this.options;if(!b.panes)b.panes=[];this.pane=(k=b.panes[l]=b.panes[l]||new J(M(n.pane)[l],b,this),l=k);l=l.options;b.inverted=!1;n.chart.zoomType=null;this.startAngleRad=b=(l.startAngle-90)*Math.PI/180;this.endAngleRad=n=(r(l.endAngle,l.startAngle+360)-90)*Math.PI/180;this.offset=a.offset||0;if((this.isCircular=\ni)&&c.max===C&&n-b===2*Math.PI)this.autoConnect=!0}});o(u,\"getPosition\",function(a,b,c,d,g){var f=this.axis;return f.getPosition?f.getPosition(c):a.call(this,b,c,d,g)});o(u,\"getLabelPosition\",function(a,b,c,d,g,f,e,i,n){var l=this.axis,k=f.y,h=f.align,j=(l.translate(this.pos)+l.startAngleRad+Math.PI/2)/Math.PI*180%360;l.isRadial?(a=l.getPosition(this.pos,l.center[2]/2+r(f.distance,-25)),f.rotation===\"auto\"?d.attr({rotation:j}):k===null&&(k=v(d.styles.lineHeight)*0.9-d.getBBox().height/2),h===null&&\n(h=l.isCircular?j>20&&j<160?\"left\":j>200&&j<340?\"right\":\"center\":\"center\",d.attr({align:h})),a.x+=f.x,a.y+=k):a=a.call(this,b,c,d,g,f,e,i,n);return a});o(u,\"getMarkPath\",function(a,b,c,d,g,f,e){var i=this.axis;i.isRadial?(a=i.getPosition(this.pos,i.center[2]/2+d),b=[\"M\",b,c,\"L\",a.x,a.y]):b=a.call(this,b,c,d,g,f,e);return b});m.arearange=p(m.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:'<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>'},\ntrackByArea:!0,dataLabels:{verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0}});h.arearange=j.extendClass(h.area,{type:\"arearange\",pointArrayMap:[\"low\",\"high\"],toYData:function(a){return[a.low,a.high]},pointValKey:\"low\",getSegments:function(){var a=this;s(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y=null;else if(b.low===null&&b.high!==null)b.y=b.high});z.prototype.getSegments.call(this)},translate:function(){var a=this.yAxis;h.area.prototype.translate.apply(this);\ns(this.points,function(b){var c=b.low,d=b.high,g=b.plotY;d===null&&c===null?b.y=null:c===null?(b.plotLow=b.plotY=null,b.plotHigh=a.translate(d,0,1,0,1)):d===null?(b.plotLow=g,b.plotHigh=null):(b.plotLow=g,b.plotHigh=a.translate(d,0,1,0,1))})},getSegmentPath:function(a){var b,c=[],d=a.length,g=z.prototype.getSegmentPath,f,e;e=this.options;var i=e.step;for(b=HighchartsAdapter.grep(a,function(a){return a.plotLow!==null});d--;)f=a[d],f.plotHigh!==null&&c.push({plotX:f.plotX,plotY:f.plotHigh});a=g.call(this,\nb);if(i)i===!0&&(i=\"left\"),e.step={left:\"right\",center:\"center\",right:\"left\"}[i];c=g.call(this,c);e.step=i;e=[].concat(a,c);c[0]=\"L\";this.areaPath=this.areaPath.concat(a,c);return e},drawDataLabels:function(){var a=this.data,b=a.length,c,d=[],g=z.prototype,f=this.options.dataLabels,e,i=this.chart.inverted;if(f.enabled||this._hasPointLabels){for(c=b;c--;)e=a[c],e.y=e.high,e.plotY=e.plotHigh,d[c]=e.dataLabel,e.dataLabel=e.dataLabelUpper,e.below=!1,i?(f.align=\"left\",f.x=f.xHigh):f.y=f.yHigh;g.drawDataLabels.apply(this,\narguments);for(c=b;c--;)e=a[c],e.dataLabelUpper=e.dataLabel,e.dataLabel=d[c],e.y=e.low,e.plotY=e.plotLow,e.below=!0,i?(f.align=\"right\",f.x=f.xLow):f.y=f.yLow;g.drawDataLabels.apply(this,arguments)}},alignDataLabel:h.column.prototype.alignDataLabel,getSymbol:h.column.prototype.getSymbol,drawPoints:w});m.areasplinerange=p(m.arearange);h.areasplinerange=x(h.arearange,{type:\"areasplinerange\",getPointSpline:h.spline.prototype.getPointSpline});m.columnrange=p(m.column,m.arearange,{lineWidth:1,pointRange:null});\nh.columnrange=x(h.arearange,{type:\"columnrange\",translate:function(){var a=this,b=a.yAxis,c;q.translate.apply(a);s(a.points,function(d){var g=d.shapeArgs,f=a.options.minPointLength,e;d.plotHigh=c=b.translate(d.high,0,1,0,1);d.plotLow=d.plotY;e=c;d=d.plotY-c;d<f&&(f-=d,d+=f,e-=f/2);g.height=d;g.y=e})},trackerGroups:[\"group\",\"dataLabels\"],drawGraph:w,pointAttrToOptions:q.pointAttrToOptions,drawPoints:q.drawPoints,drawTracker:q.drawTracker,animate:q.animate,getColumnMetrics:q.getColumnMetrics});m.gauge=\np(m.line,{dataLabels:{enabled:!0,y:15,borderWidth:1,borderColor:\"silver\",borderRadius:3,style:{fontWeight:\"bold\"},verticalAlign:\"top\",zIndex:2},dial:{},pivot:{},tooltip:{headerFormat:\"\"},showInLegend:!1});u={type:\"gauge\",pointClass:j.extendClass(j.Point,{setState:function(a){this.state=a}}),angular:!0,drawGraph:w,fixedBox:!0,trackerGroups:[\"group\",\"dataLabels\"],translate:function(){var a=this.yAxis,b=this.options,c=a.center;this.generatePoints();s(this.points,function(d){var g=p(b.dial,d.dial),f=\nv(r(g.radius,80))*c[2]/200,e=v(r(g.baseLength,70))*f/100,i=v(r(g.rearLength,10))*f/100,n=g.baseWidth||3,l=g.topWidth||1,k=a.startAngleRad+a.translate(d.y,null,null,null,!0);b.wrap===!1&&(k=Math.max(a.startAngleRad,Math.min(a.endAngleRad,k)));k=k*180/Math.PI;d.shapeType=\"path\";d.shapeArgs={d:g.path||[\"M\",-i,-n/2,\"L\",e,-n/2,f,-l/2,f,l/2,e,n/2,-i,n/2,\"z\"],translateX:c[0],translateY:c[1],rotation:k};d.plotX=c[0];d.plotY=c[1]})},drawPoints:function(){var a=this,b=a.yAxis.center,c=a.pivot,d=a.options,g=\nd.pivot,f=a.chart.renderer;s(a.points,function(c){var b=c.graphic,g=c.shapeArgs,l=g.d,k=p(d.dial,c.dial);b?(b.animate(g),g.d=l):c.graphic=f[c.shapeType](g).attr({stroke:k.borderColor||\"none\",\"stroke-width\":k.borderWidth||0,fill:k.backgroundColor||\"black\",rotation:g.rotation}).add(a.group)});c?c.animate({translateX:b[0],translateY:b[1]}):a.pivot=f.circle(0,0,r(g.radius,5)).attr({\"stroke-width\":g.borderWidth||0,stroke:g.borderColor||\"silver\",fill:g.backgroundColor||\"black\"}).translate(b[0],b[1]).add(a.group)},\nanimate:function(a){var b=this;if(!a)s(b.points,function(a){var d=a.graphic;d&&(d.attr({rotation:b.yAxis.startAngleRad*180/Math.PI}),d.animate({rotation:a.shapeArgs.rotation},b.options.animation))}),b.animate=null},render:function(){this.group=this.plotGroup(\"group\",\"series\",this.visible?\"visible\":\"hidden\",this.options.zIndex,this.chart.seriesGroup);h.pie.prototype.render.call(this);this.group.clip(this.chart.clipRect)},setData:h.pie.prototype.setData,drawTracker:h.column.prototype.drawTracker};h.gauge=\nj.extendClass(h.line,u);m.boxplot=p(m.column,{fillColor:\"#FFFFFF\",lineWidth:1,medianWidth:2,states:{hover:{brightness:-0.3}},threshold:null,tooltip:{pointFormat:'<span style=\"color:{series.color};font-weight:bold\">{series.name}</span><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'},whiskerLength:\"50%\",whiskerWidth:2});h.boxplot=x(h.column,{type:\"boxplot\",pointArrayMap:[\"low\",\"q1\",\"median\",\"q3\",\"high\"],\ntoYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:\"high\",pointAttrToOptions:{fill:\"fillColor\",stroke:\"color\",\"stroke-width\":\"lineWidth\"},drawDataLabels:w,translate:function(){var a=this.yAxis,b=this.pointArrayMap;h.column.prototype.translate.apply(this);s(this.points,function(c){s(b,function(b){c[b]!==null&&(c[b+\"Plot\"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a=this,b=a.points,c=a.options,d=a.chart.renderer,g,f,e,i,n,l,k,h,j,m,o,H,p,E,I,q,w,t,v,u,z,y,x=a.doQuartiles!==\n!1,B=parseInt(a.options.whiskerLength,10)/100;s(b,function(b){j=b.graphic;z=b.shapeArgs;o={};E={};q={};y=b.color||a.color;if(b.plotY!==C)if(g=b.pointAttr[b.selected?\"selected\":\"\"],w=z.width,t=A(z.x),v=t+w,u=D(w/2),f=A(x?b.q1Plot:b.lowPlot),e=A(x?b.q3Plot:b.lowPlot),i=A(b.highPlot),n=A(b.lowPlot),o.stroke=b.stemColor||c.stemColor||y,o[\"stroke-width\"]=r(b.stemWidth,c.stemWidth,c.lineWidth),o.dashstyle=b.stemDashStyle||c.stemDashStyle,E.stroke=b.whiskerColor||c.whiskerColor||y,E[\"stroke-width\"]=r(b.whiskerWidth,\nc.whiskerWidth,c.lineWidth),q.stroke=b.medianColor||c.medianColor||y,q[\"stroke-width\"]=r(b.medianWidth,c.medianWidth,c.lineWidth),k=o[\"stroke-width\"]%2/2,h=t+u+k,m=[\"M\",h,e,\"L\",h,i,\"M\",h,f,\"L\",h,n,\"z\"],x&&(k=g[\"stroke-width\"]%2/2,h=A(h)+k,f=A(f)+k,e=A(e)+k,t+=k,v+=k,H=[\"M\",t,e,\"L\",t,f,\"L\",v,f,\"L\",v,e,\"L\",t,e,\"z\"]),B&&(k=E[\"stroke-width\"]%2/2,i+=k,n+=k,p=[\"M\",h-u*B,i,\"L\",h+u*B,i,\"M\",h-u*B,n,\"L\",h+u*B,n]),k=q[\"stroke-width\"]%2/2,l=D(b.medianPlot)+k,I=[\"M\",t,l,\"L\",v,l,\"z\"],j)b.stem.animate({d:m}),B&&\nb.whiskers.animate({d:p}),x&&b.box.animate({d:H}),b.medianShape.animate({d:I});else{b.graphic=j=d.g().add(a.group);b.stem=d.path(m).attr(o).add(j);if(B)b.whiskers=d.path(p).attr(E).add(j);if(x)b.box=d.path(H).attr(g).add(j);b.medianShape=d.path(I).attr(q).add(j)}})}});m.errorbar=p(m.boxplot,{color:\"#000000\",grouping:!1,linkedTo:\":previous\",tooltip:{pointFormat:m.arearange.tooltip.pointFormat},whiskerWidth:null});h.errorbar=x(h.boxplot,{type:\"errorbar\",pointArrayMap:[\"low\",\"high\"],toYData:function(a){return[a.low,\na.high]},pointValKey:\"high\",doQuartiles:!1,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||h.column.prototype.getColumnMetrics.call(this)}});m.waterfall=p(m.column,{lineWidth:1,lineColor:\"#333\",dashStyle:\"dot\",borderColor:\"#333\"});h.waterfall=x(h.column,{type:\"waterfall\",upColorProp:\"fill\",pointArrayMap:[\"low\",\"y\"],pointValKey:\"y\",init:function(a,b){b.stacking=!0;h.column.prototype.init.call(this,a,b)},translate:function(){var a=this.options,b=this.yAxis,c,d,\ng,f,e,i,n,l,k;c=a.threshold;a=a.borderWidth%2/2;h.column.prototype.translate.apply(this);l=c;g=this.points;for(d=0,c=g.length;d<c;d++){f=g[d];e=f.shapeArgs;i=this.getStack(d);k=i.points[this.index];if(isNaN(f.y))f.y=this.yData[d];n=S(l,l+f.y)+k[0];e.y=b.translate(n,0,1);f.isSum||f.isIntermediateSum?(e.y=b.translate(k[1],0,1),e.height=b.translate(k[0],0,1)-e.y):l+=i.total;e.height<0&&(e.y+=e.height,e.height*=-1);f.plotY=e.y=D(e.y)-a;e.height=D(e.height);f.yBottom=e.y+e.height}},processData:function(a){var b=\nthis.yData,c=this.points,d,g=b.length,f=this.options.threshold||0,e,i,h,l,k,j;i=e=h=l=f;for(j=0;j<g;j++)k=b[j],d=c&&c[j]?c[j]:{},k===\"sum\"||d.isSum?b[j]=i:k===\"intermediateSum\"||d.isIntermediateSum?(b[j]=e,e=f):(i+=k,e+=k),h=Math.min(i,h),l=Math.max(i,l);z.prototype.processData.call(this,a);this.dataMin=h;this.dataMax=l},toYData:function(a){if(a.isSum)return\"sum\";else if(a.isIntermediateSum)return\"intermediateSum\";return a.y},getAttribs:function(){h.column.prototype.getAttribs.apply(this,arguments);\nvar a=this.options,b=a.states,c=a.upColor||this.color,a=j.Color(c).brighten(0.1).get(),d=p(this.pointAttr),g=this.upColorProp;d[\"\"][g]=c;d.hover[g]=b.hover.upColor||a;d.select[g]=b.select.upColor||c;s(this.points,function(a){if(a.y>0&&!a.color)a.pointAttr=d,a.color=c})},getGraphPath:function(){var a=this.data,b=a.length,c=D(this.options.lineWidth+this.options.borderWidth)%2/2,d=[],g,f,e;for(e=1;e<b;e++)f=a[e].shapeArgs,g=a[e-1].shapeArgs,f=[\"M\",g.x+g.width,g.y+c,\"L\",f.x,g.y+c],a[e-1].y<0&&(f[2]+=\ng.height,f[5]+=g.height),d=d.concat(f);return d},getExtremes:w,getStack:function(a){var b=this.yAxis.stacks,c=this.stackKey;this.processedYData[a]<this.options.threshold&&(c=\"-\"+c);return b[c][a]},drawGraph:z.prototype.drawGraph});m.bubble=p(m.scatter,{dataLabels:{inside:!0,style:{color:\"white\",textShadow:\"0px 0px 3px black\"},verticalAlign:\"middle\"},marker:{lineColor:null,lineWidth:1},minSize:8,maxSize:\"20%\",tooltip:{pointFormat:\"({point.x}, {point.y}), Size: {point.z}\"},turboThreshold:0,zThreshold:0});\nh.bubble=x(h.scatter,{type:\"bubble\",pointArrayMap:[\"y\",\"z\"],trackerGroups:[\"group\",\"dataLabelsGroup\"],pointAttrToOptions:{stroke:\"lineColor\",\"stroke-width\":\"lineWidth\",fill:\"fillColor\"},applyOpacity:function(a){var b=this.options.marker,c=r(b.fillOpacity,0.5),a=a||b.fillColor||this.color;c!==1&&(a=j.Color(a).setOpacity(c).get(\"rgba\"));return a},convertAttribs:function(){var a=z.prototype.convertAttribs.apply(this,arguments);a.fill=this.applyOpacity(a.fill);return a},getRadii:function(a,b,c,d){var g,\nf,e,i=this.zData,h=[];for(f=0,g=i.length;f<g;f++)e=b-a,e=e>0?(i[f]-a)/(b-a):0.5,h.push(t.ceil(c+e*(d-c))/2);this.radii=h},animate:function(a){var b=this.options.animation;if(!a)s(this.points,function(a){var d=a.graphic,a=a.shapeArgs;d&&a&&(d.attr(\"r\",1),d.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,d,g=this.radii;h.scatter.prototype.translate.call(this);for(a=b.length;a--;)c=b[a],d=g?g[a]:0,c.negative=c.z<(this.options.zThreshold||0),d>=this.minPxSize/2?(c.shapeType=\n\"circle\",c.shapeArgs={x:c.plotX,y:c.plotY,r:d},c.dlBox={x:c.plotX-d,y:c.plotY-d,width:2*d,height:2*d}):c.shapeArgs=c.plotY=c.dlBox=C},drawLegendSymbol:function(a,b){var c=v(a.itemStyle.fontSize)/2;b.legendSymbol=this.chart.renderer.circle(c,a.baseline-c,c).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:h.column.prototype.drawPoints,alignDataLabel:h.column.prototype.alignDataLabel});N.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,d=0,g=b,f=this.isXAxis,\ne=f?\"xData\":\"yData\",i=this.min,h={},j=t.min(c.plotWidth,c.plotHeight),k=Number.MAX_VALUE,m=-Number.MAX_VALUE,o=this.max-i,p=b/o,q=[];this.tickPositions&&(s(this.series,function(b){var c=b.options;if(b.type===\"bubble\"&&b.visible&&(a.allowZoomOutside=!0,q.push(b),f))s([\"minSize\",\"maxSize\"],function(a){var b=c[a],d=/%$/.test(b),b=v(b);h[a]=d?j*b/100:b}),b.minPxSize=h.minSize,b=b.zData,b.length&&(k=t.min(k,t.max(P(b),c.displayNegative===!1?c.zThreshold:-Number.MAX_VALUE)),m=t.max(m,Q(b)))}),s(q,function(a){var b=\na[e],c=b.length,j;f&&a.getRadii(k,m,h.minSize,h.maxSize);if(o>0)for(;c--;)j=a.radii[c],d=Math.min((b[c]-i)*p-j,d),g=Math.max((b[c]-i)*p+j,g)}),q.length&&o>0&&r(this.options.min,this.userMin)===C&&r(this.options.max,this.userMax)===C&&(g-=b,p*=(b+d-g)/b,this.min+=d/p,this.max+=g/p))};var y=z.prototype,m=j.Pointer.prototype;y.toXY=function(a){var b,c=this.chart;b=a.plotX;var d=a.plotY;a.rectPlotX=b;a.rectPlotY=d;a.clientX=(b/Math.PI*180+this.xAxis.pane.options.startAngle)%360;b=this.xAxis.postTranslate(a.plotX,\nthis.yAxis.len-d);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop};y.orderTooltipPoints=function(a){if(this.chart.polar&&(a.sort(function(a,c){return a.clientX-c.clientX}),a[0]))a[0].wrappedClientX=a[0].clientX+360,a.push(a[0])};o(h.area.prototype,\"init\",K);o(h.areaspline.prototype,\"init\",K);o(h.spline.prototype,\"getPointSpline\",function(a,b,c,d){var g,f,e,i,h,j,k;if(this.chart.polar){g=c.plotX;f=c.plotY;a=b[d-1];e=b[d+1];this.connectEnds&&(a||(a=b[b.length-2]),e||(e=b[1]));\nif(a&&e)i=a.plotX,h=a.plotY,b=e.plotX,j=e.plotY,i=(1.5*g+i)/2.5,h=(1.5*f+h)/2.5,e=(1.5*g+b)/2.5,k=(1.5*f+j)/2.5,b=Math.sqrt(Math.pow(i-g,2)+Math.pow(h-f,2)),j=Math.sqrt(Math.pow(e-g,2)+Math.pow(k-f,2)),i=Math.atan2(h-f,i-g),h=Math.atan2(k-f,e-g),k=Math.PI/2+(i+h)/2,Math.abs(i-k)>Math.PI/2&&(k-=Math.PI),i=g+Math.cos(k)*b,h=f+Math.sin(k)*b,e=g+Math.cos(Math.PI+k)*j,k=f+Math.sin(Math.PI+k)*j,c.rightContX=e,c.rightContY=k;d?(c=[\"C\",a.rightContX||a.plotX,a.rightContY||a.plotY,i||g,h||f,g,f],a.rightContX=\na.rightContY=null):c=[\"M\",g,f]}else c=a.call(this,b,c,d);return c});o(y,\"translate\",function(a){a.call(this);if(this.chart.polar&&!this.preventPostTranslate)for(var a=this.points,b=a.length;b--;)this.toXY(a[b])});o(y,\"getSegmentPath\",function(a,b){var c=this.points;if(this.chart.polar&&this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this,b)});o(y,\"animate\",L);o(q,\"animate\",L);o(y,\"setTooltipPoints\",function(a,b){this.chart.polar&&\nF(this.xAxis,{tooltipLen:360});return a.call(this,b)});o(q,\"translate\",function(a){var b=this.xAxis,c=this.yAxis.len,d=b.center,g=b.startAngleRad,f=this.chart.renderer,e,h;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points;for(h=b.length;h--;)e=b[h],a=e.barX+g,e.shapeType=\"path\",e.shapeArgs={d:f.symbols.arc(d[0],d[1],c-e.plotY,null,{start:a,end:a+e.pointWidth,innerR:c-r(e.yBottom,c)})},this.toXY(e)}});o(q,\"alignDataLabel\",function(a,b,c,d,g,f){if(this.chart.polar){a=b.rectPlotX/\nMath.PI*180;if(d.align===null)d.align=a>20&&a<160?\"left\":a>200&&a<340?\"right\":\"center\";if(d.verticalAlign===null)d.verticalAlign=a<45||a>315?\"bottom\":a>135&&a<225?\"top\":\"middle\";y.alignDataLabel.call(this,b,c,d,g,f)}else a.call(this,b,c,d,g,f)});o(m,\"getIndex\",function(a,b){var c,d=this.chart,g;d.polar?(g=d.xAxis[0].center,c=b.chartX-g[0]-d.plotLeft,d=b.chartY-g[1]-d.plotTop,c=180-Math.round(Math.atan2(c,d)/Math.PI*180)):c=a.call(this,b);return c});o(m,\"getCoordinates\",function(a,b){var c=this.chart,\nd={xAxis:[],yAxis:[]};c.polar?s(c.axes,function(a){var f=a.isXAxis,e=a.center,h=b.chartX-e[0]-c.plotLeft,e=b.chartY-e[1]-c.plotTop;d[f?\"xAxis\":\"yAxis\"].push({axis:a,value:a.translate(f?Math.PI-Math.atan2(h,e):Math.sqrt(Math.pow(h,2)+Math.pow(e,2)),!0)})}):d=a.call(this,b);return d})})(Highcharts);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/highcharts-more.src.js",
    "content": "// ==ClosureCompiler==\n// @compilation_level SIMPLE_OPTIMIZATIONS\n\n/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n * (c) 2009-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts, HighchartsAdapter, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console */\n\n(function (Highcharts, UNDEFINED) {\nvar arrayMin = Highcharts.arrayMin,\n\tarrayMax = Highcharts.arrayMax,\n\teach = Highcharts.each,\n\textend = Highcharts.extend,\n\tmerge = Highcharts.merge,\n\tmap = Highcharts.map,\n\tpick = Highcharts.pick,\n\tpInt = Highcharts.pInt,\n\tdefaultPlotOptions = Highcharts.getOptions().plotOptions,\n\tseriesTypes = Highcharts.seriesTypes,\n\textendClass = Highcharts.extendClass,\n\tsplat = Highcharts.splat,\n\twrap = Highcharts.wrap,\n\tAxis = Highcharts.Axis,\n\tTick = Highcharts.Tick,\n\tSeries = Highcharts.Series,\n\tcolProto = seriesTypes.column.prototype,\n\tmath = Math,\n\tmathRound = math.round,\n\tmathFloor = math.floor,\n\tmathMax = math.max,\n\tnoop = function () {};/**\n * The Pane object allows options that are common to a set of X and Y axes.\n * \n * In the future, this can be extended to basic Highcharts and Highstock.\n */\nfunction Pane(options, chart, firstAxis) {\n\tthis.init.call(this, options, chart, firstAxis);\n}\n\n// Extend the Pane prototype\nextend(Pane.prototype, {\n\t\n\t/**\n\t * Initiate the Pane object\n\t */\n\tinit: function (options, chart, firstAxis) {\n\t\tvar pane = this,\n\t\t\tbackgroundOption,\n\t\t\tdefaultOptions = pane.defaultOptions;\n\t\t\n\t\tpane.chart = chart;\n\t\t\n\t\t// Set options\n\t\tif (chart.angular) { // gauges\n\t\t\tdefaultOptions.background = {}; // gets extended by this.defaultBackgroundOptions\n\t\t}\n\t\tpane.options = options = merge(defaultOptions, options);\n\t\t\n\t\tbackgroundOption = options.background;\n\t\t\n\t\t// To avoid having weighty logic to place, update and remove the backgrounds,\n\t\t// push them to the first axis' plot bands and borrow the existing logic there.\n\t\tif (backgroundOption) {\n\t\t\teach([].concat(splat(backgroundOption)).reverse(), function (config) {\n\t\t\t\tvar backgroundColor = config.backgroundColor; // if defined, replace the old one (specific for gradients)\n\t\t\t\tconfig = merge(pane.defaultBackgroundOptions, config);\n\t\t\t\tif (backgroundColor) {\n\t\t\t\t\tconfig.backgroundColor = backgroundColor;\n\t\t\t\t}\n\t\t\t\tconfig.color = config.backgroundColor; // due to naming in plotBands\n\t\t\t\tfirstAxis.options.plotBands.unshift(config);\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * The default options object\n\t */\n\tdefaultOptions: {\n\t\t// background: {conditional},\n\t\tcenter: ['50%', '50%'],\n\t\tsize: '85%',\n\t\tstartAngle: 0\n\t\t//endAngle: startAngle + 360\n\t},\t\n\t\n\t/**\n\t * The default background options\n\t */\n\tdefaultBackgroundOptions: {\n\t\tshape: 'circle',\n\t\tborderWidth: 1,\n\t\tborderColor: 'silver',\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#FFF'],\n\t\t\t\t[1, '#DDD']\n\t\t\t]\n\t\t},\n\t\tfrom: Number.MIN_VALUE, // corrected to axis min\n\t\tinnerRadius: 0,\n\t\tto: Number.MAX_VALUE, // corrected to axis max\n\t\touterRadius: '105%'\n\t}\n\t\n});\nvar axisProto = Axis.prototype,\n\ttickProto = Tick.prototype;\n\t\n/**\n * Augmented methods for the x axis in order to hide it completely, used for the X axis in gauges\n */\nvar hiddenAxisMixin = {\n\tgetOffset: noop,\n\tredraw: function () {\n\t\tthis.isDirty = false; // prevent setting Y axis dirty\n\t},\n\trender: function () {\n\t\tthis.isDirty = false; // prevent setting Y axis dirty\n\t},\n\tsetScale: noop,\n\tsetCategories: noop,\n\tsetTitle: noop\n};\n\n/**\n * Augmented methods for the value axis\n */\n/*jslint unparam: true*/\nvar radialAxisMixin = {\n\tisRadial: true,\n\t\n\t/**\n\t * The default options extend defaultYAxisOptions\n\t */\n\tdefaultRadialGaugeOptions: {\n\t\tlabels: {\n\t\t\talign: 'center',\n\t\t\tx: 0,\n\t\t\ty: null // auto\n\t\t},\n\t\tminorGridLineWidth: 0,\n\t\tminorTickInterval: 'auto',\n\t\tminorTickLength: 10,\n\t\tminorTickPosition: 'inside',\n\t\tminorTickWidth: 1,\n\t\tplotBands: [],\n\t\ttickLength: 10,\n\t\ttickPosition: 'inside',\n\t\ttickWidth: 2,\n\t\ttitle: {\n\t\t\trotation: 0\n\t\t},\n\t\tzIndex: 2 // behind dials, points in the series group\n\t},\n\t\n\t// Circular axis around the perimeter of a polar chart\n\tdefaultRadialXOptions: {\n\t\tgridLineWidth: 1, // spokes\n\t\tlabels: {\n\t\t\talign: null, // auto\n\t\t\tdistance: 15,\n\t\t\tx: 0,\n\t\t\ty: null // auto\n\t\t},\n\t\tmaxPadding: 0,\n\t\tminPadding: 0,\n\t\tplotBands: [],\n\t\tshowLastLabel: false, \n\t\ttickLength: 0\n\t},\n\t\n\t// Radial axis, like a spoke in a polar chart\n\tdefaultRadialYOptions: {\n\t\tgridLineInterpolation: 'circle',\n\t\tlabels: {\n\t\t\talign: 'right',\n\t\t\tx: -3,\n\t\t\ty: -2\n\t\t},\n\t\tplotBands: [],\n\t\tshowLastLabel: false,\n\t\ttitle: {\n\t\t\tx: 4,\n\t\t\ttext: null,\n\t\t\trotation: 90\n\t\t}\n\t},\n\t\n\t/**\n\t * Merge and set options\n\t */\n\tsetOptions: function (userOptions) {\n\t\t\n\t\tthis.options = merge(\n\t\t\tthis.defaultOptions,\n\t\t\tthis.defaultRadialOptions,\n\t\t\tuserOptions\n\t\t);\n\t\t\n\t},\n\t\n\t/**\n\t * Wrap the getOffset method to return zero offset for title or labels in a radial \n\t * axis\n\t */\n\tgetOffset: function () {\n\t\t// Call the Axis prototype method (the method we're in now is on the instance)\n\t\taxisProto.getOffset.call(this);\n\t\t\n\t\t// Title or label offsets are not counted\n\t\tthis.chart.axisOffset[this.side] = 0;\n\t},\n\n\n\t/**\n\t * Get the path for the axis line. This method is also referenced in the getPlotLinePath\n\t * method.\n\t */\n\tgetLinePath: function (lineWidth, radius) {\n\t\tvar center = this.center;\n\t\tradius = pick(radius, center[2] / 2 - this.offset);\n\t\t\n\t\treturn this.chart.renderer.symbols.arc(\n\t\t\tthis.left + center[0],\n\t\t\tthis.top + center[1],\n\t\t\tradius,\n\t\t\tradius, \n\t\t\t{\n\t\t\t\tstart: this.startAngleRad,\n\t\t\t\tend: this.endAngleRad,\n\t\t\t\topen: true,\n\t\t\t\tinnerR: 0\n\t\t\t}\n\t\t);\n\t},\n\n\t/**\n\t * Override setAxisTranslation by setting the translation to the difference\n\t * in rotation. This allows the translate method to return angle for \n\t * any given value.\n\t */\n\tsetAxisTranslation: function () {\n\t\t\n\t\t// Call uber method\t\t\n\t\taxisProto.setAxisTranslation.call(this);\n\t\t\t\n\t\t// Set transA and minPixelPadding\n\t\tif (this.center) { // it's not defined the first time\n\t\t\tif (this.isCircular) {\n\t\t\t\t\n\t\t\t\tthis.transA = (this.endAngleRad - this.startAngleRad) / \n\t\t\t\t\t((this.max - this.min) || 1);\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t} else { \n\t\t\t\tthis.transA = (this.center[2] / 2) / ((this.max - this.min) || 1);\n\t\t\t}\n\t\t\t\n\t\t\tif (this.isXAxis) {\n\t\t\t\tthis.minPixelPadding = this.transA * this.minPointOffset +\n\t\t\t\t\t(this.reversed ? (this.endAngleRad - this.startAngleRad) / 4 : 0); // ???\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * In case of auto connect, add one closestPointRange to the max value right before\n\t * tickPositions are computed, so that ticks will extend passed the real max.\n\t */\n\tbeforeSetTickPositions: function () {\n\t\tif (this.autoConnect) {\n\t\t\tthis.max += (this.categories && 1) || this.pointRange || this.closestPointRange || 0; // #1197, #2260\n\t\t}\n\t},\n\t\n\t/**\n\t * Override the setAxisSize method to use the arc's circumference as length. This\n\t * allows tickPixelInterval to apply to pixel lengths along the perimeter\n\t */\n\tsetAxisSize: function () {\n\t\t\n\t\taxisProto.setAxisSize.call(this);\n\n\t\tif (this.isRadial) {\n\n\t\t\t// Set the center array\n\t\t\tthis.center = this.pane.center = seriesTypes.pie.prototype.getCenter.call(this.pane);\n\t\t\t\n\t\t\tthis.len = this.width = this.height = this.isCircular ?\n\t\t\t\tthis.center[2] * (this.endAngleRad - this.startAngleRad) / 2 :\n\t\t\t\tthis.center[2] / 2;\n\t\t}\n\t},\n\t\n\t/**\n\t * Returns the x, y coordinate of a point given by a value and a pixel distance\n\t * from center\n\t */\n\tgetPosition: function (value, length) {\n\t\tif (!this.isCircular) {\n\t\t\tlength = this.translate(value);\n\t\t\tvalue = this.min;\t\n\t\t}\n\t\t\n\t\treturn this.postTranslate(\n\t\t\tthis.translate(value),\n\t\t\tpick(length, this.center[2] / 2) - this.offset\n\t\t);\t\t\n\t},\n\t\n\t/**\n\t * Translate from intermediate plotX (angle), plotY (axis.len - radius) to final chart coordinates. \n\t */\n\tpostTranslate: function (angle, radius) {\n\t\t\n\t\tvar chart = this.chart,\n\t\t\tcenter = this.center;\n\t\t\t\n\t\tangle = this.startAngleRad + angle;\n\t\t\n\t\treturn {\n\t\t\tx: chart.plotLeft + center[0] + Math.cos(angle) * radius,\n\t\t\ty: chart.plotTop + center[1] + Math.sin(angle) * radius\n\t\t}; \n\t\t\n\t},\n\t\n\t/**\n\t * Find the path for plot bands along the radial axis\n\t */\n\tgetPlotBandPath: function (from, to, options) {\n\t\tvar center = this.center,\n\t\t\tstartAngleRad = this.startAngleRad,\n\t\t\tfullRadius = center[2] / 2,\n\t\t\tradii = [\n\t\t\t\tpick(options.outerRadius, '100%'),\n\t\t\t\toptions.innerRadius,\n\t\t\t\tpick(options.thickness, 10)\n\t\t\t],\n\t\t\tpercentRegex = /%$/,\n\t\t\tstart,\n\t\t\tend,\n\t\t\topen,\n\t\t\tisCircular = this.isCircular, // X axis in a polar chart\n\t\t\tret;\n\t\t\t\n\t\t// Polygonal plot bands\n\t\tif (this.options.gridLineInterpolation === 'polygon') {\n\t\t\tret = this.getPlotLinePath(from).concat(this.getPlotLinePath(to, true));\n\t\t\n\t\t// Circular grid bands\n\t\t} else {\n\t\t\t\n\t\t\t// Plot bands on Y axis (radial axis) - inner and outer radius depend on to and from\n\t\t\tif (!isCircular) {\n\t\t\t\tradii[0] = this.translate(from);\n\t\t\t\tradii[1] = this.translate(to);\n\t\t\t}\n\t\t\t\n\t\t\t// Convert percentages to pixel values\n\t\t\tradii = map(radii, function (radius) {\n\t\t\t\tif (percentRegex.test(radius)) {\n\t\t\t\t\tradius = (pInt(radius, 10) * fullRadius) / 100;\n\t\t\t\t}\n\t\t\t\treturn radius;\n\t\t\t});\n\t\t\t\n\t\t\t// Handle full circle\n\t\t\tif (options.shape === 'circle' || !isCircular) {\n\t\t\t\tstart = -Math.PI / 2;\n\t\t\t\tend = Math.PI * 1.5;\n\t\t\t\topen = true;\n\t\t\t} else {\n\t\t\t\tstart = startAngleRad + this.translate(from);\n\t\t\t\tend = startAngleRad + this.translate(to);\n\t\t\t}\n\t\t\n\t\t\n\t\t\tret = this.chart.renderer.symbols.arc(\n\t\t\t\tthis.left + center[0],\n\t\t\t\tthis.top + center[1],\n\t\t\t\tradii[0],\n\t\t\t\tradii[0],\n\t\t\t\t{\n\t\t\t\t\tstart: start,\n\t\t\t\t\tend: end,\n\t\t\t\t\tinnerR: pick(radii[1], radii[0] - radii[2]),\n\t\t\t\t\topen: open\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\t \n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Find the path for plot lines perpendicular to the radial axis.\n\t */\n\tgetPlotLinePath: function (value, reverse) {\n\t\tvar axis = this,\n\t\t\tcenter = axis.center,\n\t\t\tchart = axis.chart,\n\t\t\tend = axis.getPosition(value),\n\t\t\txAxis,\n\t\t\txy,\n\t\t\ttickPositions,\n\t\t\tret;\n\t\t\n\t\t// Spokes\n\t\tif (axis.isCircular) {\n\t\t\tret = ['M', center[0] + chart.plotLeft, center[1] + chart.plotTop, 'L', end.x, end.y];\n\t\t\n\t\t// Concentric circles\t\t\t\n\t\t} else if (axis.options.gridLineInterpolation === 'circle') {\n\t\t\tvalue = axis.translate(value);\n\t\t\tif (value) { // a value of 0 is in the center\n\t\t\t\tret = axis.getLinePath(0, value);\n\t\t\t}\n\t\t// Concentric polygons \n\t\t} else {\n\t\t\txAxis = chart.xAxis[0];\n\t\t\tret = [];\n\t\t\tvalue = axis.translate(value);\n\t\t\ttickPositions = xAxis.tickPositions;\n\t\t\tif (xAxis.autoConnect) {\n\t\t\t\ttickPositions = tickPositions.concat([tickPositions[0]]);\n\t\t\t}\n\t\t\t// Reverse the positions for concatenation of polygonal plot bands\n\t\t\tif (reverse) {\n\t\t\t\ttickPositions = [].concat(tickPositions).reverse();\n\t\t\t}\n\t\t\t\t\n\t\t\teach(tickPositions, function (pos, i) {\n\t\t\t\txy = xAxis.getPosition(pos, value);\n\t\t\t\tret.push(i ? 'L' : 'M', xy.x, xy.y);\n\t\t\t});\n\t\t\t\n\t\t}\n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Find the position for the axis title, by default inside the gauge\n\t */\n\tgetTitlePosition: function () {\n\t\tvar center = this.center,\n\t\t\tchart = this.chart,\n\t\t\ttitleOptions = this.options.title;\n\t\t\n\t\treturn { \n\t\t\tx: chart.plotLeft + center[0] + (titleOptions.x || 0), \n\t\t\ty: chart.plotTop + center[1] - ({ high: 0.5, middle: 0.25, low: 0 }[titleOptions.align] * \n\t\t\t\tcenter[2]) + (titleOptions.y || 0)  \n\t\t};\n\t}\n\t\n};\n/*jslint unparam: false*/\n\n/**\n * Override axisProto.init to mix in special axis instance functions and function overrides\n */\nwrap(axisProto, 'init', function (proceed, chart, userOptions) {\n\tvar axis = this,\n\t\tangular = chart.angular,\n\t\tpolar = chart.polar,\n\t\tisX = userOptions.isX,\n\t\tisHidden = angular && isX,\n\t\tisCircular,\n\t\tstartAngleRad,\n\t\tendAngleRad,\n\t\toptions,\n\t\tchartOptions = chart.options,\n\t\tpaneIndex = userOptions.pane || 0,\n\t\tpane,\n\t\tpaneOptions;\n\t\t\n\t// Before prototype.init\n\tif (angular) {\n\t\textend(this, isHidden ? hiddenAxisMixin : radialAxisMixin);\n\t\tisCircular =  !isX;\n\t\tif (isCircular) {\n\t\t\tthis.defaultRadialOptions = this.defaultRadialGaugeOptions;\n\t\t}\n\t\t\n\t} else if (polar) {\n\t\t//extend(this, userOptions.isX ? radialAxisMixin : radialAxisMixin);\n\t\textend(this, radialAxisMixin);\n\t\tisCircular = isX;\n\t\tthis.defaultRadialOptions = isX ? this.defaultRadialXOptions : merge(this.defaultYAxisOptions, this.defaultRadialYOptions);\n\t\t\n\t}\n\t\n\t// Run prototype.init\n\tproceed.call(this, chart, userOptions);\n\t\n\tif (!isHidden && (angular || polar)) {\n\t\toptions = this.options;\n\t\t\n\t\t// Create the pane and set the pane options.\n\t\tif (!chart.panes) {\n\t\t\tchart.panes = [];\n\t\t}\n\t\tthis.pane = pane = chart.panes[paneIndex] = chart.panes[paneIndex] || new Pane(\n\t\t\tsplat(chartOptions.pane)[paneIndex],\n\t\t\tchart,\n\t\t\taxis\n\t\t);\n\t\tpaneOptions = pane.options;\n\t\t\n\t\t\t\n\t\t// Disable certain features on angular and polar axes\n\t\tchart.inverted = false;\n\t\tchartOptions.chart.zoomType = null;\n\t\t\n\t\t// Start and end angle options are\n\t\t// given in degrees relative to top, while internal computations are\n\t\t// in radians relative to right (like SVG).\n\t\tthis.startAngleRad = startAngleRad = (paneOptions.startAngle - 90) * Math.PI / 180;\n\t\tthis.endAngleRad = endAngleRad = (pick(paneOptions.endAngle, paneOptions.startAngle + 360)  - 90) * Math.PI / 180;\n\t\tthis.offset = options.offset || 0;\n\t\t\n\t\tthis.isCircular = isCircular;\n\t\t\n\t\t// Automatically connect grid lines?\n\t\tif (isCircular && userOptions.max === UNDEFINED && endAngleRad - startAngleRad === 2 * Math.PI) {\n\t\t\tthis.autoConnect = true;\n\t\t}\n\t}\n\t\n});\n\n/**\n * Add special cases within the Tick class' methods for radial axes.\n */\t\nwrap(tickProto, 'getPosition', function (proceed, horiz, pos, tickmarkOffset, old) {\n\tvar axis = this.axis;\n\t\n\treturn axis.getPosition ? \n\t\taxis.getPosition(pos) :\n\t\tproceed.call(this, horiz, pos, tickmarkOffset, old);\t\n});\n\n/**\n * Wrap the getLabelPosition function to find the center position of the label\n * based on the distance option\n */\t\nwrap(tickProto, 'getLabelPosition', function (proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {\n\tvar axis = this.axis,\n\t\toptionsY = labelOptions.y,\n\t\tret,\n\t\talign = labelOptions.align,\n\t\tangle = ((axis.translate(this.pos) + axis.startAngleRad + Math.PI / 2) / Math.PI * 180) % 360;\n\t\n\tif (axis.isRadial) {\n\t\tret = axis.getPosition(this.pos, (axis.center[2] / 2) + pick(labelOptions.distance, -25));\n\t\t\n\t\t// Automatically rotated\n\t\tif (labelOptions.rotation === 'auto') {\n\t\t\tlabel.attr({ \n\t\t\t\trotation: angle\n\t\t\t});\n\t\t\n\t\t// Vertically centered\n\t\t} else if (optionsY === null) {\n\t\t\toptionsY = pInt(label.styles.lineHeight) * 0.9 - label.getBBox().height / 2;\n\t\t\n\t\t}\n\t\t\n\t\t// Automatic alignment\n\t\tif (align === null) {\n\t\t\tif (axis.isCircular) {\n\t\t\t\tif (angle > 20 && angle < 160) {\n\t\t\t\t\talign = 'left'; // right hemisphere\n\t\t\t\t} else if (angle > 200 && angle < 340) {\n\t\t\t\t\talign = 'right'; // left hemisphere\n\t\t\t\t} else {\n\t\t\t\t\talign = 'center'; // top or bottom\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\talign = 'center';\n\t\t\t}\n\t\t\tlabel.attr({\n\t\t\t\talign: align\n\t\t\t});\n\t\t}\n\t\t\n\t\tret.x += labelOptions.x;\n\t\tret.y += optionsY;\n\t\t\n\t} else {\n\t\tret = proceed.call(this, x, y, label, horiz, labelOptions, tickmarkOffset, index, step);\n\t}\n\treturn ret;\n});\n\n/**\n * Wrap the getMarkPath function to return the path of the radial marker\n */\nwrap(tickProto, 'getMarkPath', function (proceed, x, y, tickLength, tickWidth, horiz, renderer) {\n\tvar axis = this.axis,\n\t\tendPoint,\n\t\tret;\n\t\t\n\tif (axis.isRadial) {\n\t\tendPoint = axis.getPosition(this.pos, axis.center[2] / 2 + tickLength);\n\t\tret = [\n\t\t\t'M',\n\t\t\tx,\n\t\t\ty,\n\t\t\t'L',\n\t\t\tendPoint.x,\n\t\t\tendPoint.y\n\t\t];\n\t} else {\n\t\tret = proceed.call(this, x, y, tickLength, tickWidth, horiz, renderer);\n\t}\n\treturn ret;\n});/* \n * The AreaRangeSeries class\n * \n */\n\n/**\n * Extend the default options with map options\n */\ndefaultPlotOptions.arearange = merge(defaultPlotOptions.area, {\n\tlineWidth: 1,\n\tmarker: null,\n\tthreshold: null,\n\ttooltip: {\n\t\tpointFormat: '<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>' \n\t},\n\ttrackByArea: true,\n\tdataLabels: {\n\t\tverticalAlign: null,\n\t\txLow: 0,\n\t\txHigh: 0,\n\t\tyLow: 0,\n\t\tyHigh: 0\t\n\t}\n});\n\n/**\n * Add the series type\n */\nseriesTypes.arearange = Highcharts.extendClass(seriesTypes.area, {\n\ttype: 'arearange',\n\tpointArrayMap: ['low', 'high'],\n\ttoYData: function (point) {\n\t\treturn [point.low, point.high];\n\t},\n\tpointValKey: 'low',\n\t\n\t/**\n\t * Extend getSegments to force null points if the higher value is null. #1703.\n\t */\n\tgetSegments: function () {\n\t\tvar series = this;\n\n\t\teach(series.points, function (point) {\n\t\t\tif (!series.options.connectNulls && (point.low === null || point.high === null)) {\n\t\t\t\tpoint.y = null;\n\t\t\t} else if (point.low === null && point.high !== null) {\n\t\t\t\tpoint.y = point.high;\n\t\t\t}\n\t\t});\n\t\tSeries.prototype.getSegments.call(this);\n\t},\n\t\n\t/**\n\t * Translate data points from raw values x and y to plotX and plotY\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis;\n\n\t\tseriesTypes.area.prototype.translate.apply(series);\n\n\t\t// Set plotLow and plotHigh\n\t\teach(series.points, function (point) {\n\n\t\t\tvar low = point.low,\n\t\t\t\thigh = point.high,\n\t\t\t\tplotY = point.plotY;\n\n\t\t\tif (high === null && low === null) {\n\t\t\t\tpoint.y = null;\n\t\t\t} else if (low === null) {\n\t\t\t\tpoint.plotLow = point.plotY = null;\n\t\t\t\tpoint.plotHigh = yAxis.translate(high, 0, 1, 0, 1);\n\t\t\t} else if (high === null) {\n\t\t\t\tpoint.plotLow = plotY;\n\t\t\t\tpoint.plotHigh = null;\n\t\t\t} else {\n\t\t\t\tpoint.plotLow = plotY;\n\t\t\t\tpoint.plotHigh = yAxis.translate(high, 0, 1, 0, 1);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Extend the line series' getSegmentPath method by applying the segment\n\t * path to both lower and higher values of the range\n\t */\n\tgetSegmentPath: function (segment) {\n\t\t\n\t\tvar lowSegment,\n\t\t\thighSegment = [],\n\t\t\ti = segment.length,\n\t\t\tbaseGetSegmentPath = Series.prototype.getSegmentPath,\n\t\t\tpoint,\n\t\t\tlinePath,\n\t\t\tlowerPath,\n\t\t\toptions = this.options,\n\t\t\tstep = options.step,\n\t\t\thigherPath;\n\t\t\t\n\t\t// Remove nulls from low segment\n\t\tlowSegment = HighchartsAdapter.grep(segment, function (point) {\n\t\t\treturn point.plotLow !== null;\n\t\t});\n\t\t\n\t\t// Make a segment with plotX and plotY for the top values\n\t\twhile (i--) {\n\t\t\tpoint = segment[i];\n\t\t\tif (point.plotHigh !== null) {\n\t\t\t\thighSegment.push({\n\t\t\t\t\tplotX: point.plotX,\n\t\t\t\t\tplotY: point.plotHigh\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Get the paths\n\t\tlowerPath = baseGetSegmentPath.call(this, lowSegment);\n\t\tif (step) {\n\t\t\tif (step === true) {\n\t\t\t\tstep = 'left';\n\t\t\t}\n\t\t\toptions.step = { left: 'right', center: 'center', right: 'left' }[step]; // swap for reading in getSegmentPath\n\t\t}\n\t\thigherPath = baseGetSegmentPath.call(this, highSegment);\n\t\toptions.step = step;\n\t\t\n\t\t// Create a line on both top and bottom of the range\n\t\tlinePath = [].concat(lowerPath, higherPath);\n\t\t\n\t\t// For the area path, we need to change the 'move' statement into 'lineTo' or 'curveTo'\n\t\thigherPath[0] = 'L'; // this probably doesn't work for spline\t\t\t\n\t\tthis.areaPath = this.areaPath.concat(lowerPath, higherPath);\n\t\t\n\t\treturn linePath;\n\t},\n\t\n\t/**\n\t * Extend the basic drawDataLabels method by running it for both lower and higher\n\t * values.\n\t */\n\tdrawDataLabels: function () {\n\t\t\n\t\tvar data = this.data,\n\t\t\tlength = data.length,\n\t\t\ti,\n\t\t\toriginalDataLabels = [],\n\t\t\tseriesProto = Series.prototype,\n\t\t\tdataLabelOptions = this.options.dataLabels,\n\t\t\tpoint,\n\t\t\tinverted = this.chart.inverted;\n\t\t\t\n\t\tif (dataLabelOptions.enabled || this._hasPointLabels) {\n\t\t\t\n\t\t\t// Step 1: set preliminary values for plotY and dataLabel and draw the upper labels\n\t\t\ti = length;\n\t\t\twhile (i--) {\n\t\t\t\tpoint = data[i];\n\t\t\t\t\n\t\t\t\t// Set preliminary values\n\t\t\t\tpoint.y = point.high;\n\t\t\t\tpoint.plotY = point.plotHigh;\n\t\t\t\t\n\t\t\t\t// Store original data labels and set preliminary label objects to be picked up \n\t\t\t\t// in the uber method\n\t\t\t\toriginalDataLabels[i] = point.dataLabel;\n\t\t\t\tpoint.dataLabel = point.dataLabelUpper;\n\t\t\t\t\n\t\t\t\t// Set the default offset\n\t\t\t\tpoint.below = false;\n\t\t\t\tif (inverted) {\n\t\t\t\t\tdataLabelOptions.align = 'left';\n\t\t\t\t\tdataLabelOptions.x = dataLabelOptions.xHigh;\t\t\t\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tdataLabelOptions.y = dataLabelOptions.yHigh;\n\t\t\t\t}\n\t\t\t}\n\t\t\tseriesProto.drawDataLabels.apply(this, arguments); // #1209\n\t\t\t\n\t\t\t// Step 2: reorganize and handle data labels for the lower values\n\t\t\ti = length;\n\t\t\twhile (i--) {\n\t\t\t\tpoint = data[i];\n\t\t\t\t\n\t\t\t\t// Move the generated labels from step 1, and reassign the original data labels\n\t\t\t\tpoint.dataLabelUpper = point.dataLabel;\n\t\t\t\tpoint.dataLabel = originalDataLabels[i];\n\t\t\t\t\n\t\t\t\t// Reset values\n\t\t\t\tpoint.y = point.low;\n\t\t\t\tpoint.plotY = point.plotLow;\n\t\t\t\t\n\t\t\t\t// Set the default offset\n\t\t\t\tpoint.below = true;\n\t\t\t\tif (inverted) {\n\t\t\t\t\tdataLabelOptions.align = 'right';\n\t\t\t\t\tdataLabelOptions.x = dataLabelOptions.xLow;\n\t\t\t\t} else {\n\t\t\t\t\tdataLabelOptions.y = dataLabelOptions.yLow;\n\t\t\t\t}\n\t\t\t}\n\t\t\tseriesProto.drawDataLabels.apply(this, arguments);\n\t\t}\n\t\n\t},\n\t\n\talignDataLabel: seriesTypes.column.prototype.alignDataLabel,\n\t\n\tgetSymbol: seriesTypes.column.prototype.getSymbol,\n\t\n\tdrawPoints: noop\n});/**\n * The AreaSplineRangeSeries class\n */\n\ndefaultPlotOptions.areasplinerange = merge(defaultPlotOptions.arearange);\n\n/**\n * AreaSplineRangeSeries object\n */\nseriesTypes.areasplinerange = extendClass(seriesTypes.arearange, {\n\ttype: 'areasplinerange',\n\tgetPointSpline: seriesTypes.spline.prototype.getPointSpline\n});/**\n * The ColumnRangeSeries class\n */\ndefaultPlotOptions.columnrange = merge(defaultPlotOptions.column, defaultPlotOptions.arearange, {\n\tlineWidth: 1,\n\tpointRange: null\n});\n\n/**\n * ColumnRangeSeries object\n */\nseriesTypes.columnrange = extendClass(seriesTypes.arearange, {\n\ttype: 'columnrange',\n\t/**\n\t * Translate data points from raw values x and y to plotX and plotY\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis,\n\t\t\tplotHigh;\n\n\t\tcolProto.translate.apply(series);\n\n\t\t// Set plotLow and plotHigh\n\t\teach(series.points, function (point) {\n\t\t\tvar shapeArgs = point.shapeArgs,\n\t\t\t\tminPointLength = series.options.minPointLength,\n\t\t\t\theightDifference,\n\t\t\t\theight,\n\t\t\t\ty;\n\n\t\t\tpoint.plotHigh = plotHigh = yAxis.translate(point.high, 0, 1, 0, 1);\n\t\t\tpoint.plotLow = point.plotY;\n\n\t\t\t// adjust shape\n\t\t\ty = plotHigh;\n\t\t\theight = point.plotY - plotHigh;\n\n\t\t\tif (height < minPointLength) {\n\t\t\t\theightDifference = (minPointLength - height);\n\t\t\t\theight += heightDifference;\n\t\t\t\ty -= heightDifference / 2;\n\t\t\t}\n\t\t\tshapeArgs.height = height;\n\t\t\tshapeArgs.y = y;\n\t\t});\n\t},\n\ttrackerGroups: ['group', 'dataLabels'],\n\tdrawGraph: noop,\n\tpointAttrToOptions: colProto.pointAttrToOptions,\n\tdrawPoints: colProto.drawPoints,\n\tdrawTracker: colProto.drawTracker,\n\tanimate: colProto.animate,\n\tgetColumnMetrics: colProto.getColumnMetrics\n});\n/* \n * The GaugeSeries class\n */\n\n\n\n/**\n * Extend the default options\n */\ndefaultPlotOptions.gauge = merge(defaultPlotOptions.line, {\n\tdataLabels: {\n\t\tenabled: true,\n\t\ty: 15,\n\t\tborderWidth: 1,\n\t\tborderColor: 'silver',\n\t\tborderRadius: 3,\n\t\tstyle: {\n\t\t\tfontWeight: 'bold'\n\t\t},\n\t\tverticalAlign: 'top',\n\t\tzIndex: 2\n\t},\n\tdial: {\n\t\t// radius: '80%',\n\t\t// backgroundColor: 'black',\n\t\t// borderColor: 'silver',\n\t\t// borderWidth: 0,\n\t\t// baseWidth: 3,\n\t\t// topWidth: 1,\n\t\t// baseLength: '70%' // of radius\n\t\t// rearLength: '10%'\n\t},\n\tpivot: {\n\t\t//radius: 5,\n\t\t//borderWidth: 0\n\t\t//borderColor: 'silver',\n\t\t//backgroundColor: 'black'\n\t},\n\ttooltip: {\n\t\theaderFormat: ''\n\t},\n\tshowInLegend: false\n});\n\n/**\n * Extend the point object\n */\nvar GaugePoint = Highcharts.extendClass(Highcharts.Point, {\n\t/**\n\t * Don't do any hover colors or anything\n\t */\n\tsetState: function (state) {\n\t\tthis.state = state;\n\t}\n});\n\n\n/**\n * Add the series type\n */\nvar GaugeSeries = {\n\ttype: 'gauge',\n\tpointClass: GaugePoint,\n\t\n\t// chart.angular will be set to true when a gauge series is present, and this will\n\t// be used on the axes\n\tangular: true, \n\tdrawGraph: noop,\n\tfixedBox: true,\n\ttrackerGroups: ['group', 'dataLabels'],\n\t\n\t/**\n\t * Calculate paths etc\n\t */\n\ttranslate: function () {\n\t\t\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis,\n\t\t\toptions = series.options,\n\t\t\tcenter = yAxis.center;\n\t\t\t\n\t\tseries.generatePoints();\n\t\t\n\t\teach(series.points, function (point) {\n\t\t\t\n\t\t\tvar dialOptions = merge(options.dial, point.dial),\n\t\t\t\tradius = (pInt(pick(dialOptions.radius, 80)) * center[2]) / 200,\n\t\t\t\tbaseLength = (pInt(pick(dialOptions.baseLength, 70)) * radius) / 100,\n\t\t\t\trearLength = (pInt(pick(dialOptions.rearLength, 10)) * radius) / 100,\n\t\t\t\tbaseWidth = dialOptions.baseWidth || 3,\n\t\t\t\ttopWidth = dialOptions.topWidth || 1,\n\t\t\t\trotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true);\n\n\t\t\t// Handle the wrap option\n\t\t\tif (options.wrap === false) {\n\t\t\t\trotation = Math.max(yAxis.startAngleRad, Math.min(yAxis.endAngleRad, rotation));\n\t\t\t}\n\t\t\trotation = rotation * 180 / Math.PI;\n\t\t\t\t\n\t\t\tpoint.shapeType = 'path';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\td: dialOptions.path || [\n\t\t\t\t\t'M', \n\t\t\t\t\t-rearLength, -baseWidth / 2, \n\t\t\t\t\t'L', \n\t\t\t\t\tbaseLength, -baseWidth / 2,\n\t\t\t\t\tradius, -topWidth / 2,\n\t\t\t\t\tradius, topWidth / 2,\n\t\t\t\t\tbaseLength, baseWidth / 2,\n\t\t\t\t\t-rearLength, baseWidth / 2,\n\t\t\t\t\t'z'\n\t\t\t\t],\n\t\t\t\ttranslateX: center[0],\n\t\t\t\ttranslateY: center[1],\n\t\t\t\trotation: rotation\n\t\t\t};\n\t\t\t\n\t\t\t// Positions for data label\n\t\t\tpoint.plotX = center[0];\n\t\t\tpoint.plotY = center[1];\n\t\t});\n\t},\n\t\n\t/**\n\t * Draw the points where each point is one needle\n\t */\n\tdrawPoints: function () {\n\t\t\n\t\tvar series = this,\n\t\t\tcenter = series.yAxis.center,\n\t\t\tpivot = series.pivot,\n\t\t\toptions = series.options,\n\t\t\tpivotOptions = options.pivot,\n\t\t\trenderer = series.chart.renderer;\n\t\t\n\t\teach(series.points, function (point) {\n\t\t\t\n\t\t\tvar graphic = point.graphic,\n\t\t\t\tshapeArgs = point.shapeArgs,\n\t\t\t\td = shapeArgs.d,\n\t\t\t\tdialOptions = merge(options.dial, point.dial); // #1233\n\t\t\t\n\t\t\tif (graphic) {\n\t\t\t\tgraphic.animate(shapeArgs);\n\t\t\t\tshapeArgs.d = d; // animate alters it\n\t\t\t} else {\n\t\t\t\tpoint.graphic = renderer[point.shapeType](shapeArgs)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tstroke: dialOptions.borderColor || 'none',\n\t\t\t\t\t\t'stroke-width': dialOptions.borderWidth || 0,\n\t\t\t\t\t\tfill: dialOptions.backgroundColor || 'black',\n\t\t\t\t\t\trotation: shapeArgs.rotation // required by VML when animation is false\n\t\t\t\t\t})\n\t\t\t\t\t.add(series.group);\n\t\t\t}\n\t\t});\n\t\t\n\t\t// Add or move the pivot\n\t\tif (pivot) {\n\t\t\tpivot.animate({ // #1235\n\t\t\t\ttranslateX: center[0],\n\t\t\t\ttranslateY: center[1]\n\t\t\t});\n\t\t} else {\n\t\t\tseries.pivot = renderer.circle(0, 0, pick(pivotOptions.radius, 5))\n\t\t\t\t.attr({\n\t\t\t\t\t'stroke-width': pivotOptions.borderWidth || 0,\n\t\t\t\t\tstroke: pivotOptions.borderColor || 'silver',\n\t\t\t\t\tfill: pivotOptions.backgroundColor || 'black'\n\t\t\t\t})\n\t\t\t\t.translate(center[0], center[1])\n\t\t\t\t.add(series.group);\n\t\t}\n\t},\n\t\n\t/**\n\t * Animate the arrow up from startAngle\n\t */\n\tanimate: function (init) {\n\t\tvar series = this;\n\n\t\tif (!init) {\n\t\t\teach(series.points, function (point) {\n\t\t\t\tvar graphic = point.graphic;\n\n\t\t\t\tif (graphic) {\n\t\t\t\t\t// start value\n\t\t\t\t\tgraphic.attr({\n\t\t\t\t\t\trotation: series.yAxis.startAngleRad * 180 / Math.PI\n\t\t\t\t\t});\n\n\t\t\t\t\t// animate\n\t\t\t\t\tgraphic.animate({\n\t\t\t\t\t\trotation: point.shapeArgs.rotation\n\t\t\t\t\t}, series.options.animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// delete this function to allow it only once\n\t\t\tseries.animate = null;\n\t\t}\n\t},\n\t\n\trender: function () {\n\t\tthis.group = this.plotGroup(\n\t\t\t'group', \n\t\t\t'series', \n\t\t\tthis.visible ? 'visible' : 'hidden', \n\t\t\tthis.options.zIndex, \n\t\t\tthis.chart.seriesGroup\n\t\t);\n\t\tseriesTypes.pie.prototype.render.call(this);\n\t\tthis.group.clip(this.chart.clipRect);\n\t},\n\t\n\tsetData: seriesTypes.pie.prototype.setData,\n\tdrawTracker: seriesTypes.column.prototype.drawTracker\n};\nseriesTypes.gauge = Highcharts.extendClass(seriesTypes.line, GaugeSeries);/* ****************************************************************************\n * Start Box plot series code\t\t\t\t\t\t\t\t\t\t\t      *\n *****************************************************************************/\n\n// Set default options\ndefaultPlotOptions.boxplot = merge(defaultPlotOptions.column, {\n\tfillColor: '#FFFFFF',\n\tlineWidth: 1,\n\t//medianColor: null,\n\tmedianWidth: 2,\n\tstates: {\n\t\thover: {\n\t\t\tbrightness: -0.3\n\t\t}\n\t},\n\t//stemColor: null,\n\t//stemDashStyle: 'solid'\n\t//stemWidth: null,\n\tthreshold: null,\n\ttooltip: {\n\t\tpointFormat: '<span style=\"color:{series.color};font-weight:bold\">{series.name}</span><br/>' +\n\t\t\t'Maximum: {point.high}<br/>' +\n\t\t\t'Upper quartile: {point.q3}<br/>' +\n\t\t\t'Median: {point.median}<br/>' +\n\t\t\t'Lower quartile: {point.q1}<br/>' +\n\t\t\t'Minimum: {point.low}<br/>'\n\t\t\t\n\t},\n\t//whiskerColor: null,\n\twhiskerLength: '50%',\n\twhiskerWidth: 2\n});\n\n// Create the series object\nseriesTypes.boxplot = extendClass(seriesTypes.column, {\n\ttype: 'boxplot',\n\tpointArrayMap: ['low', 'q1', 'median', 'q3', 'high'], // array point configs are mapped to this\n\ttoYData: function (point) { // return a plain array for speedy calculation\n\t\treturn [point.low, point.q1, point.median, point.q3, point.high];\n\t},\n\tpointValKey: 'high', // defines the top of the tracker\n\t\n\t/**\n\t * One-to-one mapping from options to SVG attributes\n\t */\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tfill: 'fillColor',\n\t\tstroke: 'color',\n\t\t'stroke-width': 'lineWidth'\n\t},\n\t\n\t/**\n\t * Disable data labels for box plot\n\t */\n\tdrawDataLabels: noop,\n\n\t/**\n\t * Translate data points from raw values x and y to plotX and plotY\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tyAxis = series.yAxis,\n\t\t\tpointArrayMap = series.pointArrayMap;\n\n\t\tseriesTypes.column.prototype.translate.apply(series);\n\n\t\t// do the translation on each point dimension\n\t\teach(series.points, function (point) {\n\t\t\teach(pointArrayMap, function (key) {\n\t\t\t\tif (point[key] !== null) {\n\t\t\t\t\tpoint[key + 'Plot'] = yAxis.translate(point[key], 0, 1, 0, 1);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n\t * Draw the data points\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,  //state = series.state,\n\t\t\tpoints = series.points,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tpointAttr,\n\t\t\tq1Plot,\n\t\t\tq3Plot,\n\t\t\thighPlot,\n\t\t\tlowPlot,\n\t\t\tmedianPlot,\n\t\t\tcrispCorr,\n\t\t\tcrispX,\n\t\t\tgraphic,\n\t\t\tstemPath,\n\t\t\tstemAttr,\n\t\t\tboxPath,\n\t\t\twhiskersPath,\n\t\t\twhiskersAttr,\n\t\t\tmedianPath,\n\t\t\tmedianAttr,\n\t\t\twidth,\n\t\t\tleft,\n\t\t\tright,\n\t\t\thalfWidth,\n\t\t\tshapeArgs,\n\t\t\tcolor,\n\t\t\tdoQuartiles = series.doQuartiles !== false, // error bar inherits this series type but doesn't do quartiles\n\t\t\twhiskerLength = parseInt(series.options.whiskerLength, 10) / 100;\n\n\n\t\teach(points, function (point) {\n\n\t\t\tgraphic = point.graphic;\n\t\t\tshapeArgs = point.shapeArgs; // the box\n\t\t\tstemAttr = {};\n\t\t\twhiskersAttr = {};\n\t\t\tmedianAttr = {};\n\t\t\tcolor = point.color || series.color;\n\t\t\t\n\t\t\tif (point.plotY !== UNDEFINED) {\n\n\t\t\t\tpointAttr = point.pointAttr[point.selected ? 'selected' : ''];\n\n\t\t\t\t// crisp vector coordinates\n\t\t\t\twidth = shapeArgs.width;\n\t\t\t\tleft = mathFloor(shapeArgs.x);\n\t\t\t\tright = left + width;\n\t\t\t\thalfWidth = mathRound(width / 2);\n\t\t\t\t//crispX = mathRound(left + halfWidth) + crispCorr;\n\t\t\t\tq1Plot = mathFloor(doQuartiles ? point.q1Plot : point.lowPlot);// + crispCorr;\n\t\t\t\tq3Plot = mathFloor(doQuartiles ? point.q3Plot : point.lowPlot);// + crispCorr;\n\t\t\t\thighPlot = mathFloor(point.highPlot);// + crispCorr;\n\t\t\t\tlowPlot = mathFloor(point.lowPlot);// + crispCorr;\n\t\t\t\t\n\t\t\t\t// Stem attributes\n\t\t\t\tstemAttr.stroke = point.stemColor || options.stemColor || color;\n\t\t\t\tstemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth);\n\t\t\t\tstemAttr.dashstyle = point.stemDashStyle || options.stemDashStyle;\n\t\t\t\t\n\t\t\t\t// Whiskers attributes\n\t\t\t\twhiskersAttr.stroke = point.whiskerColor || options.whiskerColor || color;\n\t\t\t\twhiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth);\n\t\t\t\t\n\t\t\t\t// Median attributes\n\t\t\t\tmedianAttr.stroke = point.medianColor || options.medianColor || color;\n\t\t\t\tmedianAttr['stroke-width'] = pick(point.medianWidth, options.medianWidth, options.lineWidth);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// The stem\n\t\t\t\tcrispCorr = (stemAttr['stroke-width'] % 2) / 2;\n\t\t\t\tcrispX = left + halfWidth + crispCorr;\t\t\t\t\n\t\t\t\tstemPath = [\n\t\t\t\t\t// stem up\n\t\t\t\t\t'M',\n\t\t\t\t\tcrispX, q3Plot,\n\t\t\t\t\t'L',\n\t\t\t\t\tcrispX, highPlot,\n\t\t\t\t\t\n\t\t\t\t\t// stem down\n\t\t\t\t\t'M',\n\t\t\t\t\tcrispX, q1Plot,\n\t\t\t\t\t'L',\n\t\t\t\t\tcrispX, lowPlot,\n\t\t\t\t\t'z'\n\t\t\t\t];\n\t\t\t\t\n\t\t\t\t// The box\n\t\t\t\tif (doQuartiles) {\n\t\t\t\t\tcrispCorr = (pointAttr['stroke-width'] % 2) / 2;\n\t\t\t\t\tcrispX = mathFloor(crispX) + crispCorr;\n\t\t\t\t\tq1Plot = mathFloor(q1Plot) + crispCorr;\n\t\t\t\t\tq3Plot = mathFloor(q3Plot) + crispCorr;\n\t\t\t\t\tleft += crispCorr;\n\t\t\t\t\tright += crispCorr;\n\t\t\t\t\tboxPath = [\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\tleft, q3Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tleft, q1Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tright, q1Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tright, q3Plot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tleft, q3Plot,\n\t\t\t\t\t\t'z'\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// The whiskers\n\t\t\t\tif (whiskerLength) {\n\t\t\t\t\tcrispCorr = (whiskersAttr['stroke-width'] % 2) / 2;\n\t\t\t\t\thighPlot = highPlot + crispCorr;\n\t\t\t\t\tlowPlot = lowPlot + crispCorr;\n\t\t\t\t\twhiskersPath = [\n\t\t\t\t\t\t// High whisker\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\tcrispX - halfWidth * whiskerLength, \n\t\t\t\t\t\thighPlot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tcrispX + halfWidth * whiskerLength, \n\t\t\t\t\t\thighPlot,\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Low whisker\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\tcrispX - halfWidth * whiskerLength, \n\t\t\t\t\t\tlowPlot,\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\tcrispX + halfWidth * whiskerLength, \n\t\t\t\t\t\tlowPlot\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// The median\n\t\t\t\tcrispCorr = (medianAttr['stroke-width'] % 2) / 2;\t\t\t\t\n\t\t\t\tmedianPlot = mathRound(point.medianPlot) + crispCorr;\n\t\t\t\tmedianPath = [\n\t\t\t\t\t'M',\n\t\t\t\t\tleft, \n\t\t\t\t\tmedianPlot,\n\t\t\t\t\t'L',\n\t\t\t\t\tright, \n\t\t\t\t\tmedianPlot,\n\t\t\t\t\t'z'\n\t\t\t\t];\n\t\t\t\t\n\t\t\t\t// Create or update the graphics\n\t\t\t\tif (graphic) { // update\n\t\t\t\t\t\n\t\t\t\t\tpoint.stem.animate({ d: stemPath });\n\t\t\t\t\tif (whiskerLength) {\n\t\t\t\t\t\tpoint.whiskers.animate({ d: whiskersPath });\n\t\t\t\t\t}\n\t\t\t\t\tif (doQuartiles) {\n\t\t\t\t\t\tpoint.box.animate({ d: boxPath });\n\t\t\t\t\t}\n\t\t\t\t\tpoint.medianShape.animate({ d: medianPath });\n\t\t\t\t\t\n\t\t\t\t} else { // create new\n\t\t\t\t\tpoint.graphic = graphic = renderer.g()\n\t\t\t\t\t\t.add(series.group);\n\t\t\t\t\t\n\t\t\t\t\tpoint.stem = renderer.path(stemPath)\n\t\t\t\t\t\t.attr(stemAttr)\n\t\t\t\t\t\t.add(graphic);\n\t\t\t\t\t\t\n\t\t\t\t\tif (whiskerLength) {\n\t\t\t\t\t\tpoint.whiskers = renderer.path(whiskersPath) \n\t\t\t\t\t\t\t.attr(whiskersAttr)\n\t\t\t\t\t\t\t.add(graphic);\n\t\t\t\t\t}\n\t\t\t\t\tif (doQuartiles) {\n\t\t\t\t\t\tpoint.box = renderer.path(boxPath)\n\t\t\t\t\t\t\t.attr(pointAttr)\n\t\t\t\t\t\t\t.add(graphic);\n\t\t\t\t\t}\t\n\t\t\t\t\tpoint.medianShape = renderer.path(medianPath)\n\t\t\t\t\t\t.attr(medianAttr)\n\t\t\t\t\t\t.add(graphic);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t}\n\n\n});\n\n/* ****************************************************************************\n * End Box plot series code\t\t\t\t\t\t\t\t\t\t\t\t*\n *****************************************************************************/\n/* ****************************************************************************\n * Start error bar series code                                                *\n *****************************************************************************/\n\n// 1 - set default options\ndefaultPlotOptions.errorbar = merge(defaultPlotOptions.boxplot, {\n\tcolor: '#000000',\n\tgrouping: false,\n\tlinkedTo: ':previous',\n\ttooltip: {\n\t\tpointFormat: defaultPlotOptions.arearange.tooltip.pointFormat\n\t},\n\twhiskerWidth: null\n});\n\n// 2 - Create the series object\nseriesTypes.errorbar = extendClass(seriesTypes.boxplot, {\n\ttype: 'errorbar',\n\tpointArrayMap: ['low', 'high'], // array point configs are mapped to this\n\ttoYData: function (point) { // return a plain array for speedy calculation\n\t\treturn [point.low, point.high];\n\t},\n\tpointValKey: 'high', // defines the top of the tracker\n\tdoQuartiles: false,\n\n\t/**\n\t * Get the width and X offset, either on top of the linked series column\n\t * or standalone\n\t */\n\tgetColumnMetrics: function () {\n\t\treturn (this.linkedParent && this.linkedParent.columnMetrics) || \n\t\t\tseriesTypes.column.prototype.getColumnMetrics.call(this);\n\t}\n});\n\n/* ****************************************************************************\n * End error bar series code                                                  *\n *****************************************************************************/\n/* ****************************************************************************\n * Start Waterfall series code                                                *\n *****************************************************************************/\n\n// 1 - set default options\ndefaultPlotOptions.waterfall = merge(defaultPlotOptions.column, {\n\tlineWidth: 1,\n\tlineColor: '#333',\n\tdashStyle: 'dot',\n\tborderColor: '#333'\n});\n\n\n// 2 - Create the series object\nseriesTypes.waterfall = extendClass(seriesTypes.column, {\n\ttype: 'waterfall',\n\n\tupColorProp: 'fill',\n\n\tpointArrayMap: ['low', 'y'],\n\n\tpointValKey: 'y',\n\n\t/**\n\t * Init waterfall series, force stacking\n\t */\n\tinit: function (chart, options) {\n\t\t// force stacking\n\t\toptions.stacking = true;\n\n\t\tseriesTypes.column.prototype.init.call(this, chart, options);\n\t},\n\n\n\t/**\n\t * Translate data points from raw values\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\taxis = series.yAxis,\n\t\t\tlen,\n\t\t\ti,\n\t\t\tpoints,\n\t\t\tpoint,\n\t\t\tshapeArgs,\n\t\t\tstack,\n\t\t\ty,\n\t\t\tpreviousY,\n\t\t\tstackPoint,\n\t\t\tthreshold = options.threshold,\n\t\t\tcrispCorr = (options.borderWidth % 2) / 2;\n\n\t\t// run column series translate\n\t\tseriesTypes.column.prototype.translate.apply(this);\n\n\t\tpreviousY = threshold;\n\t\tpoints = series.points;\n\n\t\tfor (i = 0, len = points.length; i < len; i++) {\n\t\t\t// cache current point object\n\t\t\tpoint = points[i];\n\t\t\tshapeArgs = point.shapeArgs;\n\n\t\t\t// get current stack\n\t\t\tstack = series.getStack(i);\n\t\t\tstackPoint = stack.points[series.index];\n\n\t\t\t// override point value for sums\n\t\t\tif (isNaN(point.y)) {\n\t\t\t\tpoint.y = series.yData[i];\n\t\t\t}\n\n\t\t\t// up points\n\t\t\ty = mathMax(previousY, previousY + point.y) + stackPoint[0];\n\t\t\tshapeArgs.y = axis.translate(y, 0, 1);\n\n\n\t\t\t// sum points\n\t\t\tif (point.isSum || point.isIntermediateSum) {\n\t\t\t\tshapeArgs.y = axis.translate(stackPoint[1], 0, 1);\n\t\t\t\tshapeArgs.height = axis.translate(stackPoint[0], 0, 1) - shapeArgs.y;\n\n\t\t\t// if it's not the sum point, update previous stack end position\n\t\t\t} else {\n\t\t\t\tpreviousY += stack.total;\n\t\t\t}\n\n\t\t\t// negative points\n\t\t\tif (shapeArgs.height < 0) {\n\t\t\t\tshapeArgs.y += shapeArgs.height;\n\t\t\t\tshapeArgs.height *= -1;\n\t\t\t}\n\n\t\t\tpoint.plotY = shapeArgs.y = mathRound(shapeArgs.y) - crispCorr;\n\t\t\tshapeArgs.height = mathRound(shapeArgs.height);\n\t\t\tpoint.yBottom = shapeArgs.y + shapeArgs.height;\n\t\t}\n\t},\n\n\t/**\n\t * Call default processData then override yData to reflect waterfall's extremes on yAxis\n\t */\n\tprocessData: function (force) {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tyData = series.yData,\n\t\t\tpoints = series.points,\n\t\t\tpoint,\n\t\t\tdataLength = yData.length,\n\t\t\tthreshold = options.threshold || 0,\n\t\t\tsubSum,\n\t\t\tsum,\n\t\t\tdataMin,\n\t\t\tdataMax,\n\t\t\ty,\n\t\t\ti;\n\n\t\tsum = subSum = dataMin = dataMax = threshold;\n\n\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\ty = yData[i];\n\t\t\tpoint = points && points[i] ? points[i] : {};\n\n\t\t\tif (y === \"sum\" || point.isSum) {\n\t\t\t\tyData[i] = sum;\n\t\t\t} else if (y === \"intermediateSum\" || point.isIntermediateSum) {\n\t\t\t\tyData[i] = subSum;\n\t\t\t\tsubSum = threshold;\n\t\t\t} else {\n\t\t\t\tsum += y;\n\t\t\t\tsubSum += y;\n\t\t\t}\n\t\t\tdataMin = Math.min(sum, dataMin);\n\t\t\tdataMax = Math.max(sum, dataMax);\n\t\t}\n\n\t\tSeries.prototype.processData.call(this, force);\n\n\t\t// Record extremes\n\t\tseries.dataMin = dataMin;\n\t\tseries.dataMax = dataMax;\n\t},\n\n\t/**\n\t * Return y value or string if point is sum\n\t */\n\ttoYData: function (pt) {\n\t\tif (pt.isSum) {\n\t\t\treturn \"sum\";\n\t\t} else if (pt.isIntermediateSum) {\n\t\t\treturn \"intermediateSum\";\n\t\t}\n\n\t\treturn pt.y;\n\t},\n\n\t/**\n\t * Postprocess mapping between options and SVG attributes\n\t */\n\tgetAttribs: function () {\n\t\tseriesTypes.column.prototype.getAttribs.apply(this, arguments);\n\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tstateOptions = options.states,\n\t\t\tupColor = options.upColor || series.color,\n\t\t\thoverColor = Highcharts.Color(upColor).brighten(0.1).get(),\n\t\t\tseriesDownPointAttr = merge(series.pointAttr),\n\t\t\tupColorProp = series.upColorProp;\n\n\t\tseriesDownPointAttr[''][upColorProp] = upColor;\n\t\tseriesDownPointAttr.hover[upColorProp] = stateOptions.hover.upColor || hoverColor;\n\t\tseriesDownPointAttr.select[upColorProp] = stateOptions.select.upColor || upColor;\n\n\t\teach(series.points, function (point) {\n\t\t\tif (point.y > 0 && !point.color) {\n\t\t\t\tpoint.pointAttr = seriesDownPointAttr;\n\t\t\t\tpoint.color = upColor;\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Draw columns' connector lines\n\t */\n\tgetGraphPath: function () {\n\n\t\tvar data = this.data,\n\t\t\tlength = data.length,\n\t\t\tlineWidth = this.options.lineWidth + this.options.borderWidth,\n\t\t\tnormalizer = mathRound(lineWidth) % 2 / 2,\n\t\t\tpath = [],\n\t\t\tM = 'M',\n\t\t\tL = 'L',\n\t\t\tprevArgs,\n\t\t\tpointArgs,\n\t\t\ti,\n\t\t\td;\n\n\t\tfor (i = 1; i < length; i++) {\n\t\t\tpointArgs = data[i].shapeArgs;\n\t\t\tprevArgs = data[i - 1].shapeArgs;\n\n\t\t\td = [\n\t\t\t\tM,\n\t\t\t\tprevArgs.x + prevArgs.width, prevArgs.y + normalizer,\n\t\t\t\tL,\n\t\t\t\tpointArgs.x, prevArgs.y + normalizer\n\t\t\t];\n\n\t\t\tif (data[i - 1].y < 0) {\n\t\t\t\td[2] += prevArgs.height;\n\t\t\t\td[5] += prevArgs.height;\n\t\t\t}\n\n\t\t\tpath = path.concat(d);\n\t\t}\n\n\t\treturn path;\n\t},\n\n\t/**\n\t * Extremes are recorded in processData\n\t */\n\tgetExtremes: noop,\n\n\t/**\n\t * Return stack for given index\n\t */\n\tgetStack: function (i) {\n\t\tvar axis = this.yAxis,\n\t\t\tstacks = axis.stacks,\n\t\t\tkey = this.stackKey;\n\n\t\tif (this.processedYData[i] < this.options.threshold) {\n\t\t\tkey = '-' + key;\n\t\t}\n\n\t\treturn stacks[key][i];\n\t},\n\n\tdrawGraph: Series.prototype.drawGraph\n});\n\n/* ****************************************************************************\n * End Waterfall series code                                                  *\n *****************************************************************************/\n/* ****************************************************************************\n * Start Bubble series code\t\t\t\t\t\t\t\t\t\t\t          *\n *****************************************************************************/\n\n// 1 - set default options\ndefaultPlotOptions.bubble = merge(defaultPlotOptions.scatter, {\n\tdataLabels: {\n\t\tinside: true,\n\t\tstyle: {\n\t\t\tcolor: 'white',\n\t\t\ttextShadow: '0px 0px 3px black'\n\t\t},\n\t\tverticalAlign: 'middle'\n\t},\n\t// displayNegative: true,\n\tmarker: {\n\t\t// fillOpacity: 0.5,\n\t\tlineColor: null, // inherit from series.color\n\t\tlineWidth: 1\n\t},\n\tminSize: 8,\n\tmaxSize: '20%',\n\t// negativeColor: null,\n\ttooltip: {\n\t\tpointFormat: '({point.x}, {point.y}), Size: {point.z}'\n\t},\n\tturboThreshold: 0,\n\tzThreshold: 0\n});\n\n// 2 - Create the series object\nseriesTypes.bubble = extendClass(seriesTypes.scatter, {\n\ttype: 'bubble',\n\tpointArrayMap: ['y', 'z'],\n\ttrackerGroups: ['group', 'dataLabelsGroup'],\n\t\n\t/**\n\t * Mapping between SVG attributes and the corresponding options\n\t */\n\tpointAttrToOptions: { \n\t\tstroke: 'lineColor',\n\t\t'stroke-width': 'lineWidth',\n\t\tfill: 'fillColor'\n\t},\n\t\n\t/**\n\t * Apply the fillOpacity to all fill positions\n\t */\n\tapplyOpacity: function (fill) {\n\t\tvar markerOptions = this.options.marker,\n\t\t\tfillOpacity = pick(markerOptions.fillOpacity, 0.5);\n\t\t\n\t\t// When called from Legend.colorizeItem, the fill isn't predefined\n\t\tfill = fill || markerOptions.fillColor || this.color; \n\t\t\n\t\tif (fillOpacity !== 1) {\n\t\t\tfill = Highcharts.Color(fill).setOpacity(fillOpacity).get('rgba');\n\t\t}\n\t\treturn fill;\n\t},\n\t\n\t/**\n\t * Extend the convertAttribs method by applying opacity to the fill\n\t */\n\tconvertAttribs: function () {\n\t\tvar obj = Series.prototype.convertAttribs.apply(this, arguments);\n\t\t\n\t\tobj.fill = this.applyOpacity(obj.fill);\n\t\t\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Get the radius for each point based on the minSize, maxSize and each point's Z value. This\n\t * must be done prior to Series.translate because the axis needs to add padding in \n\t * accordance with the point sizes.\n\t */\n\tgetRadii: function (zMin, zMax, minSize, maxSize) {\n\t\tvar len,\n\t\t\ti,\n\t\t\tpos,\n\t\t\tzData = this.zData,\n\t\t\tradii = [],\n\t\t\tzRange;\n\t\t\n\t\t// Set the shape type and arguments to be picked up in drawPoints\n\t\tfor (i = 0, len = zData.length; i < len; i++) {\n\t\t\tzRange = zMax - zMin;\n\t\t\tpos = zRange > 0 ? // relative size, a number between 0 and 1\n\t\t\t\t(zData[i] - zMin) / (zMax - zMin) : \n\t\t\t\t0.5;\n\t\t\tradii.push(math.ceil(minSize + pos * (maxSize - minSize)) / 2);\n\t\t}\n\t\tthis.radii = radii;\n\t},\n\t\n\t/**\n\t * Perform animation on the bubbles\n\t */\n\tanimate: function (init) {\n\t\tvar animation = this.options.animation;\n\t\t\n\t\tif (!init) { // run the animation\n\t\t\teach(this.points, function (point) {\n\t\t\t\tvar graphic = point.graphic,\n\t\t\t\t\tshapeArgs = point.shapeArgs;\n\n\t\t\t\tif (graphic && shapeArgs) {\n\t\t\t\t\t// start values\n\t\t\t\t\tgraphic.attr('r', 1);\n\n\t\t\t\t\t// animate\n\t\t\t\t\tgraphic.animate({\n\t\t\t\t\t\tr: shapeArgs.r\n\t\t\t\t\t}, animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// delete this function to allow it only once\n\t\t\tthis.animate = null;\n\t\t}\n\t},\n\t\n\t/**\n\t * Extend the base translate method to handle bubble size\n\t */\n\ttranslate: function () {\n\t\t\n\t\tvar i,\n\t\t\tdata = this.data,\n\t\t\tpoint,\n\t\t\tradius,\n\t\t\tradii = this.radii;\n\t\t\n\t\t// Run the parent method\n\t\tseriesTypes.scatter.prototype.translate.call(this);\n\t\t\n\t\t// Set the shape type and arguments to be picked up in drawPoints\n\t\ti = data.length;\n\t\t\n\t\twhile (i--) {\n\t\t\tpoint = data[i];\n\t\t\tradius = radii ? radii[i] : 0; // #1737\n\n\t\t\t// Flag for negativeColor to be applied in Series.js\n\t\t\tpoint.negative = point.z < (this.options.zThreshold || 0);\n\t\t\t\n\t\t\tif (radius >= this.minPxSize / 2) {\n\t\t\t\t// Shape arguments\n\t\t\t\tpoint.shapeType = 'circle';\n\t\t\t\tpoint.shapeArgs = {\n\t\t\t\t\tx: point.plotX,\n\t\t\t\t\ty: point.plotY,\n\t\t\t\t\tr: radius\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// Alignment box for the data label\n\t\t\t\tpoint.dlBox = {\n\t\t\t\t\tx: point.plotX - radius,\n\t\t\t\t\ty: point.plotY - radius,\n\t\t\t\t\twidth: 2 * radius,\n\t\t\t\t\theight: 2 * radius\n\t\t\t\t};\n\t\t\t} else { // below zThreshold\n\t\t\t\tpoint.shapeArgs = point.plotY = point.dlBox = UNDEFINED; // #1691\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Get the series' symbol in the legend\n\t * \n\t * @param {Object} legend The legend object\n\t * @param {Object} item The series (this) or point\n\t */\n\tdrawLegendSymbol: function (legend, item) {\n\t\tvar radius = pInt(legend.itemStyle.fontSize) / 2;\n\t\t\n\t\titem.legendSymbol = this.chart.renderer.circle(\n\t\t\tradius,\n\t\t\tlegend.baseline - radius,\n\t\t\tradius\n\t\t).attr({\n\t\t\tzIndex: 3\n\t\t}).add(item.legendGroup);\n\t\titem.legendSymbol.isMarker = true;\t\n\t\t\n\t},\n\t\n\tdrawPoints: seriesTypes.column.prototype.drawPoints,\n\talignDataLabel: seriesTypes.column.prototype.alignDataLabel\n});\n\n/**\n * Add logic to pad each axis with the amount of pixels\n * necessary to avoid the bubbles to overflow.\n */\nAxis.prototype.beforePadding = function () {\n\tvar axis = this,\n\t\taxisLength = this.len,\n\t\tchart = this.chart,\n\t\tpxMin = 0, \n\t\tpxMax = axisLength,\n\t\tisXAxis = this.isXAxis,\n\t\tdataKey = isXAxis ? 'xData' : 'yData',\n\t\tmin = this.min,\n\t\textremes = {},\n\t\tsmallestSize = math.min(chart.plotWidth, chart.plotHeight),\n\t\tzMin = Number.MAX_VALUE,\n\t\tzMax = -Number.MAX_VALUE,\n\t\trange = this.max - min,\n\t\ttransA = axisLength / range,\n\t\tactiveSeries = [];\n\n\t// Handle padding on the second pass, or on redraw\n\tif (this.tickPositions) {\n\t\teach(this.series, function (series) {\n\n\t\t\tvar seriesOptions = series.options,\n\t\t\t\tzData;\n\n\t\t\tif (series.type === 'bubble' && series.visible) {\n\n\t\t\t\t// Correction for #1673\n\t\t\t\taxis.allowZoomOutside = true;\n\n\t\t\t\t// Cache it\n\t\t\t\tactiveSeries.push(series);\n\n\t\t\t\tif (isXAxis) { // because X axis is evaluated first\n\t\t\t\t\n\t\t\t\t\t// For each series, translate the size extremes to pixel values\n\t\t\t\t\teach(['minSize', 'maxSize'], function (prop) {\n\t\t\t\t\t\tvar length = seriesOptions[prop],\n\t\t\t\t\t\t\tisPercent = /%$/.test(length);\n\t\t\t\t\t\t\n\t\t\t\t\t\tlength = pInt(length);\n\t\t\t\t\t\textremes[prop] = isPercent ?\n\t\t\t\t\t\t\tsmallestSize * length / 100 :\n\t\t\t\t\t\t\tlength;\n\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t\tseries.minPxSize = extremes.minSize;\n\t\t\t\t\t\n\t\t\t\t\t// Find the min and max Z\n\t\t\t\t\tzData = series.zData;\n\t\t\t\t\tif (zData.length) { // #1735\n\t\t\t\t\t\tzMin = math.min(\n\t\t\t\t\t\t\tzMin,\n\t\t\t\t\t\t\tmath.max(\n\t\t\t\t\t\t\t\tarrayMin(zData), \n\t\t\t\t\t\t\t\tseriesOptions.displayNegative === false ? seriesOptions.zThreshold : -Number.MAX_VALUE\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tzMax = math.max(zMax, arrayMax(zData));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\teach(activeSeries, function (series) {\n\n\t\t\tvar data = series[dataKey],\n\t\t\t\ti = data.length,\n\t\t\t\tradius;\n\n\t\t\tif (isXAxis) {\n\t\t\t\tseries.getRadii(zMin, zMax, extremes.minSize, extremes.maxSize);\n\t\t\t}\n\t\t\t\n\t\t\tif (range > 0) {\n\t\t\t\twhile (i--) {\n\t\t\t\t\tradius = series.radii[i];\n\t\t\t\t\tpxMin = Math.min(((data[i] - min) * transA) - radius, pxMin);\n\t\t\t\t\tpxMax = Math.max(((data[i] - min) * transA) + radius, pxMax);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tif (activeSeries.length && range > 0 && pick(this.options.min, this.userMin) === UNDEFINED && pick(this.options.max, this.userMax) === UNDEFINED) {\n\t\t\tpxMax -= axisLength;\n\t\t\ttransA *= (axisLength + pxMin - pxMax) / axisLength;\n\t\t\tthis.min += pxMin / transA;\n\t\t\tthis.max += pxMax / transA;\n\t\t}\n\t}\n};\n\n/* ****************************************************************************\n * End Bubble series code                                                     *\n *****************************************************************************/\n/**\n * Extensions for polar charts. Additionally, much of the geometry required for polar charts is\n * gathered in RadialAxes.js.\n * \n */\n\nvar seriesProto = Series.prototype,\n\tpointerProto = Highcharts.Pointer.prototype;\n\n\n\n/**\n * Translate a point's plotX and plotY from the internal angle and radius measures to \n * true plotX, plotY coordinates\n */\nseriesProto.toXY = function (point) {\n\tvar xy,\n\t\tchart = this.chart,\n\t\tplotX = point.plotX,\n\t\tplotY = point.plotY;\n\t\n\t// Save rectangular plotX, plotY for later computation\n\tpoint.rectPlotX = plotX;\n\tpoint.rectPlotY = plotY;\n\t\n\t// Record the angle in degrees for use in tooltip\n\tpoint.clientX = ((plotX / Math.PI * 180) + this.xAxis.pane.options.startAngle) % 360;\n\t\n\t// Find the polar plotX and plotY\n\txy = this.xAxis.postTranslate(point.plotX, this.yAxis.len - plotY);\n\tpoint.plotX = point.polarPlotX = xy.x - chart.plotLeft;\n\tpoint.plotY = point.polarPlotY = xy.y - chart.plotTop;\n};\n\n/** \n * Order the tooltip points to get the mouse capture ranges correct. #1915. \n */\nseriesProto.orderTooltipPoints = function (points) {\n\tif (this.chart.polar) {\n\t\tpoints.sort(function (a, b) {\n\t\t\treturn a.clientX - b.clientX;\n\t\t});\n\n\t\t// Wrap mouse tracking around to capture movement on the segment to the left\n\t\t// of the north point (#1469, #2093).\n\t\tif (points[0]) {\n\t\t\tpoints[0].wrappedClientX = points[0].clientX + 360;\n\t\t\tpoints.push(points[0]);\n\t\t}\n\t}\n};\n\n\n/**\n * Add some special init logic to areas and areasplines\n */\nfunction initArea(proceed, chart, options) {\n\tproceed.call(this, chart, options);\n\tif (this.chart.polar) {\n\t\t\n\t\t/**\n\t\t * Overridden method to close a segment path. While in a cartesian plane the area \n\t\t * goes down to the threshold, in the polar chart it goes to the center.\n\t\t */\n\t\tthis.closeSegment = function (path) {\n\t\t\tvar center = this.xAxis.center;\n\t\t\tpath.push(\n\t\t\t\t'L',\n\t\t\t\tcenter[0],\n\t\t\t\tcenter[1]\n\t\t\t);\t\t\t\n\t\t};\n\t\t\n\t\t// Instead of complicated logic to draw an area around the inner area in a stack,\n\t\t// just draw it behind\n\t\tthis.closedStacks = true;\n\t}\n}\nwrap(seriesTypes.area.prototype, 'init', initArea);\nwrap(seriesTypes.areaspline.prototype, 'init', initArea);\n\t\t\n\n/**\n * Overridden method for calculating a spline from one point to the next\n */\nwrap(seriesTypes.spline.prototype, 'getPointSpline', function (proceed, segment, point, i) {\n\t\n\tvar ret,\n\t\tsmoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc;\n\t\tdenom = smoothing + 1,\n\t\tplotX, \n\t\tplotY,\n\t\tlastPoint,\n\t\tnextPoint,\n\t\tlastX,\n\t\tlastY,\n\t\tnextX,\n\t\tnextY,\n\t\tleftContX,\n\t\tleftContY,\n\t\trightContX,\n\t\trightContY,\n\t\tdistanceLeftControlPoint,\n\t\tdistanceRightControlPoint,\n\t\tleftContAngle,\n\t\trightContAngle,\n\t\tjointAngle;\n\t\t\n\t\t\n\tif (this.chart.polar) {\n\t\t\n\t\tplotX = point.plotX;\n\t\tplotY = point.plotY;\n\t\tlastPoint = segment[i - 1];\n\t\tnextPoint = segment[i + 1];\n\t\t\t\n\t\t// Connect ends\n\t\tif (this.connectEnds) {\n\t\t\tif (!lastPoint) {\n\t\t\t\tlastPoint = segment[segment.length - 2]; // not the last but the second last, because the segment is already connected\n\t\t\t}\n\t\t\tif (!nextPoint) {\n\t\t\t\tnextPoint = segment[1];\n\t\t\t}\t\n\t\t}\n\n\t\t// find control points\n\t\tif (lastPoint && nextPoint) {\n\t\t\n\t\t\tlastX = lastPoint.plotX;\n\t\t\tlastY = lastPoint.plotY;\n\t\t\tnextX = nextPoint.plotX;\n\t\t\tnextY = nextPoint.plotY;\n\t\t\tleftContX = (smoothing * plotX + lastX) / denom;\n\t\t\tleftContY = (smoothing * plotY + lastY) / denom;\n\t\t\trightContX = (smoothing * plotX + nextX) / denom;\n\t\t\trightContY = (smoothing * plotY + nextY) / denom;\n\t\t\tdistanceLeftControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2));\n\t\t\tdistanceRightControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2));\n\t\t\tleftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX);\n\t\t\trightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX);\n\t\t\tjointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2);\n\t\t\t\t\n\t\t\t\t\n\t\t\t// Ensure the right direction, jointAngle should be in the same quadrant as leftContAngle\n\t\t\tif (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) {\n\t\t\t\tjointAngle -= Math.PI;\n\t\t\t}\n\t\t\t\n\t\t\t// Find the corrected control points for a spline straight through the point\n\t\t\tleftContX = plotX + Math.cos(jointAngle) * distanceLeftControlPoint;\n\t\t\tleftContY = plotY + Math.sin(jointAngle) * distanceLeftControlPoint;\n\t\t\trightContX = plotX + Math.cos(Math.PI + jointAngle) * distanceRightControlPoint;\n\t\t\trightContY = plotY + Math.sin(Math.PI + jointAngle) * distanceRightControlPoint;\n\t\t\t\n\t\t\t// Record for drawing in next point\n\t\t\tpoint.rightContX = rightContX;\n\t\t\tpoint.rightContY = rightContY;\n\n\t\t}\n\t\t\n\t\t\n\t\t// moveTo or lineTo\n\t\tif (!i) {\n\t\t\tret = ['M', plotX, plotY];\n\t\t} else { // curve from last point to this\n\t\t\tret = [\n\t\t\t\t'C',\n\t\t\t\tlastPoint.rightContX || lastPoint.plotX,\n\t\t\t\tlastPoint.rightContY || lastPoint.plotY,\n\t\t\t\tleftContX || plotX,\n\t\t\t\tleftContY || plotY,\n\t\t\t\tplotX,\n\t\t\t\tplotY\n\t\t\t];\n\t\t\tlastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later\n\t\t}\n\t\t\n\t\t\n\t} else {\n\t\tret = proceed.call(this, segment, point, i);\n\t}\n\treturn ret;\n});\n\n/**\n * Extend translate. The plotX and plotY values are computed as if the polar chart were a\n * cartesian plane, where plotX denotes the angle in radians and (yAxis.len - plotY) is the pixel distance from\n * center. \n */\nwrap(seriesProto, 'translate', function (proceed) {\n\t\t\n\t// Run uber method\n\tproceed.call(this);\n\t\n\t// Postprocess plot coordinates\n\tif (this.chart.polar && !this.preventPostTranslate) {\n\t\tvar points = this.points,\n\t\t\ti = points.length;\n\t\twhile (i--) {\n\t\t\t// Translate plotX, plotY from angle and radius to true plot coordinates\n\t\t\tthis.toXY(points[i]);\n\t\t}\n\t}\n});\n\n/** \n * Extend getSegmentPath to allow connecting ends across 0 to provide a closed circle in \n * line-like series.\n */\nwrap(seriesProto, 'getSegmentPath', function (proceed, segment) {\n\t\t\n\tvar points = this.points;\n\t\n\t// Connect the path\n\tif (this.chart.polar && this.options.connectEnds !== false && \n\t\t\tsegment[segment.length - 1] === points[points.length - 1] && points[0].y !== null) {\n\t\tthis.connectEnds = true; // re-used in splines\n\t\tsegment = [].concat(segment, [points[0]]);\n\t}\n\t\n\t// Run uber method\n\treturn proceed.call(this, segment);\n\t\n});\n\n\nfunction polarAnimate(proceed, init) {\n\tvar chart = this.chart,\n\t\tanimation = this.options.animation,\n\t\tgroup = this.group,\n\t\tmarkerGroup = this.markerGroup,\n\t\tcenter = this.xAxis.center,\n\t\tplotLeft = chart.plotLeft,\n\t\tplotTop = chart.plotTop,\n\t\tattribs;\n\n\t// Specific animation for polar charts\n\tif (chart.polar) {\n\t\t\n\t\t// Enable animation on polar charts only in SVG. In VML, the scaling is different, plus animation\n\t\t// would be so slow it would't matter.\n\t\tif (chart.renderer.isSVG) {\n\n\t\t\tif (animation === true) {\n\t\t\t\tanimation = {};\n\t\t\t}\n\t\n\t\t\t// Initialize the animation\n\t\t\tif (init) {\n\t\t\t\t\n\t\t\t\t// Scale down the group and place it in the center\n\t\t\t\tattribs = {\n\t\t\t\t\ttranslateX: center[0] + plotLeft,\n\t\t\t\t\ttranslateY: center[1] + plotTop,\n\t\t\t\t\tscaleX: 0.001, // #1499\n\t\t\t\t\tscaleY: 0.001\n\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\tgroup.attr(attribs);\n\t\t\t\tif (markerGroup) {\n\t\t\t\t\tmarkerGroup.attrSetters = group.attrSetters;\n\t\t\t\t\tmarkerGroup.attr(attribs);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t// Run the animation\n\t\t\t} else {\n\t\t\t\tattribs = {\n\t\t\t\t\ttranslateX: plotLeft,\n\t\t\t\t\ttranslateY: plotTop,\n\t\t\t\t\tscaleX: 1,\n\t\t\t\t\tscaleY: 1\n\t\t\t\t};\n\t\t\t\tgroup.animate(attribs, animation);\n\t\t\t\tif (markerGroup) {\n\t\t\t\t\tmarkerGroup.animate(attribs, animation);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Delete this function to allow it only once\n\t\t\t\tthis.animate = null;\n\t\t\t}\n\t\t}\n\t\n\t// For non-polar charts, revert to the basic animation\n\t} else {\n\t\tproceed.call(this, init);\n\t} \n}\n\n// Define the animate method for both regular series and column series and their derivatives\nwrap(seriesProto, 'animate', polarAnimate);\nwrap(colProto, 'animate', polarAnimate);\n\n\n/**\n * Throw in a couple of properties to let setTooltipPoints know we're indexing the points\n * in degrees (0-360), not plot pixel width.\n */\nwrap(seriesProto, 'setTooltipPoints', function (proceed, renew) {\n\t\t\n\tif (this.chart.polar) {\n\t\textend(this.xAxis, {\n\t\t\ttooltipLen: 360 // degrees are the resolution unit of the tooltipPoints array\n\t\t});\t\n\t}\n\t\n\t// Run uber method\n\treturn proceed.call(this, renew);\n});\n\n\n/**\n * Extend the column prototype's translate method\n */\nwrap(colProto, 'translate', function (proceed) {\n\t\t\n\tvar xAxis = this.xAxis,\n\t\tlen = this.yAxis.len,\n\t\tcenter = xAxis.center,\n\t\tstartAngleRad = xAxis.startAngleRad,\n\t\trenderer = this.chart.renderer,\n\t\tstart,\n\t\tpoints,\n\t\tpoint,\n\t\ti;\n\t\n\tthis.preventPostTranslate = true;\n\t\n\t// Run uber method\n\tproceed.call(this);\n\t\n\t// Postprocess plot coordinates\n\tif (xAxis.isRadial) {\n\t\tpoints = this.points;\n\t\ti = points.length;\n\t\twhile (i--) {\n\t\t\tpoint = points[i];\n\t\t\tstart = point.barX + startAngleRad;\n\t\t\tpoint.shapeType = 'path';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\td: renderer.symbols.arc(\n\t\t\t\t\tcenter[0],\n\t\t\t\t\tcenter[1],\n\t\t\t\t\tlen - point.plotY,\n\t\t\t\t\tnull, \n\t\t\t\t\t{\n\t\t\t\t\t\tstart: start,\n\t\t\t\t\t\tend: start + point.pointWidth,\n\t\t\t\t\t\tinnerR: len - pick(point.yBottom, len)\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t};\n\t\t\tthis.toXY(point); // provide correct plotX, plotY for tooltip\n\t\t}\n\t}\n});\n\n\n/**\n * Align column data labels outside the columns. #1199.\n */\nwrap(colProto, 'alignDataLabel', function (proceed, point, dataLabel, options, alignTo, isNew) {\n\t\n\tif (this.chart.polar) {\n\t\tvar angle = point.rectPlotX / Math.PI * 180,\n\t\t\talign,\n\t\t\tverticalAlign;\n\t\t\n\t\t// Align nicely outside the perimeter of the columns\n\t\tif (options.align === null) {\n\t\t\tif (angle > 20 && angle < 160) {\n\t\t\t\talign = 'left'; // right hemisphere\n\t\t\t} else if (angle > 200 && angle < 340) {\n\t\t\t\talign = 'right'; // left hemisphere\n\t\t\t} else {\n\t\t\t\talign = 'center'; // top or bottom\n\t\t\t}\n\t\t\toptions.align = align;\n\t\t}\n\t\tif (options.verticalAlign === null) {\n\t\t\tif (angle < 45 || angle > 315) {\n\t\t\t\tverticalAlign = 'bottom'; // top part\n\t\t\t} else if (angle > 135 && angle < 225) {\n\t\t\t\tverticalAlign = 'top'; // bottom part\n\t\t\t} else {\n\t\t\t\tverticalAlign = 'middle'; // left or right\n\t\t\t}\n\t\t\toptions.verticalAlign = verticalAlign;\n\t\t}\n\t\t\n\t\tseriesProto.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n\t} else {\n\t\tproceed.call(this, point, dataLabel, options, alignTo, isNew);\n\t}\n\t\n});\n\n/**\n * Extend the mouse tracker to return the tooltip position index in terms of\n * degrees rather than pixels\n */\nwrap(pointerProto, 'getIndex', function (proceed, e) {\n\tvar ret,\n\t\tchart = this.chart,\n\t\tcenter,\n\t\tx,\n\t\ty;\n\t\n\tif (chart.polar) {\n\t\tcenter = chart.xAxis[0].center;\n\t\tx = e.chartX - center[0] - chart.plotLeft;\n\t\ty = e.chartY - center[1] - chart.plotTop;\n\t\t\n\t\tret = 180 - Math.round(Math.atan2(x, y) / Math.PI * 180);\n\t\n\t} else {\n\t\n\t\t// Run uber method\n\t\tret = proceed.call(this, e);\n\t}\n\treturn ret;\n});\n\n/**\n * Extend getCoordinates to prepare for polar axis values\n */\nwrap(pointerProto, 'getCoordinates', function (proceed, e) {\n\tvar chart = this.chart,\n\t\tret = {\n\t\t\txAxis: [],\n\t\t\tyAxis: []\n\t\t};\n\t\n\tif (chart.polar) {\t\n\n\t\teach(chart.axes, function (axis) {\n\t\t\tvar isXAxis = axis.isXAxis,\n\t\t\t\tcenter = axis.center,\n\t\t\t\tx = e.chartX - center[0] - chart.plotLeft,\n\t\t\t\ty = e.chartY - center[1] - chart.plotTop;\n\t\t\t\n\t\t\tret[isXAxis ? 'xAxis' : 'yAxis'].push({\n\t\t\t\taxis: axis,\n\t\t\t\tvalue: axis.translate(\n\t\t\t\t\tisXAxis ?\n\t\t\t\t\t\tMath.PI - Math.atan2(x, y) : // angle \n\t\t\t\t\t\tMath.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), // distance from center\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t});\n\t\t});\n\t\t\n\t} else {\n\t\tret = proceed.call(this, e);\n\t}\n\t\n\treturn ret;\n});\n}(Highcharts));\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/highcharts.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n\n (c) 2009-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(){function r(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function x(){var a,b=arguments.length,c={},d=function(a,b){var c,h;typeof a!==\"object\"&&(a={});for(h in b)b.hasOwnProperty(h)&&(c=b[h],a[h]=c&&typeof c===\"object\"&&Object.prototype.toString.call(c)!==\"[object Array]\"&&typeof c.nodeType!==\"number\"?d(a[h]||{},c):b[h]);return a};for(a=0;a<b;a++)c=d(c,arguments[a]);return c}function C(a,b){return parseInt(a,b||10)}function ea(a){return typeof a===\"string\"}function T(a){return typeof a===\n\"object\"}function Ia(a){return Object.prototype.toString.call(a)===\"[object Array]\"}function sa(a){return typeof a===\"number\"}function na(a){return R.log(a)/R.LN10}function fa(a){return R.pow(10,a)}function ga(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function u(a){return a!==w&&a!==null}function v(a,b,c){var d,e;if(ea(b))u(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(u(b)&&T(b))for(d in b)a.setAttribute(d,b[d]);return e}function ja(a){return Ia(a)?\na:[a]}function o(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!==\"undefined\"&&c!==null)return c}function K(a,b){if(ta&&b&&b.opacity!==w)b.filter=\"alpha(opacity=\"+b.opacity*100+\")\";r(a.style,b)}function U(a,b,c,d,e){a=y.createElement(a);b&&r(a,b);e&&K(a,{padding:0,border:S,margin:0});c&&K(a,c);d&&d.appendChild(a);return a}function ha(a,b){var c=function(){};c.prototype=new a;r(c.prototype,b);return c}function Aa(a,b,c,d){var e=M.lang,a=+a||0,f=b===-1?(a.toString().split(\".\")[1]||\n\"\").length:isNaN(b=N(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?\"-\":\"\",c=String(C(a=N(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:\"\")+c.substr(g).replace(/(\\d{3})(?=\\d)/g,\"$1\"+d)+(f?b+N(a-c).toFixed(f).slice(2):\"\")}function Ba(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function mb(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);a.unshift(d);return c.apply(this,a)}}function Ca(a,b){for(var c=\"{\",d=!1,\ne,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(\":\");g=f.shift().split(\".\");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]];if(f.length)f=f.join(\":\"),g=/\\.([0-9])/,h=M.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e=Aa(e,i,h.decimalPoint,f.indexOf(\",\")>-1?h.thousandsSep:\"\")):e=Xa(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?\"}\":\"{\"}j.push(a);return j.join(\"\")}function nb(a){return R.pow(10,P(R.log(a)/R.LN10))}function ob(a,b,c,d){var e,c=o(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===\n!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function Cb(a,b){var c=b||[[Db,[1,2,5,10,20,25,50,100,200,500]],[pb,[1,2,5,10,15,30]],[Ya,[1,2,5,10,15,30]],[Qa,[1,2,3,4,6,8,12]],[ua,[1,2]],[Za,[1,2]],[Ra,[1,2,3,4,6]],[Da,null]],d=c[c.length-1],e=D[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=D[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+D[c[g+1][0]])/2)break;e===D[Da]&&a<5*e&&(f=[1,2,5]);c=ob(a/e,f,d[0]===Da?nb(a/e):1);\nreturn{unitRange:e,count:c,unitName:d[0]}}function Eb(a,b,c,d){var e=[],f={},g=M.global.useUTC,h,i=new Date(b),j=a.unitRange,k=a.count;if(u(b)){j>=D[pb]&&(i.setMilliseconds(0),i.setSeconds(j>=D[Ya]?0:k*P(i.getSeconds()/k)));if(j>=D[Ya])i[Fb](j>=D[Qa]?0:k*P(i[qb]()/k));if(j>=D[Qa])i[Gb](j>=D[ua]?0:k*P(i[rb]()/k));if(j>=D[ua])i[sb](j>=D[Ra]?1:k*P(i[Sa]()/k));j>=D[Ra]&&(i[Hb](j>=D[Da]?0:k*P(i[$a]()/k)),h=i[ab]());j>=D[Da]&&(h-=h%k,i[Ib](h));if(j===D[Za])i[sb](i[Sa]()-i[tb]()+o(d,1));b=1;h=i[ab]();for(var d=\ni.getTime(),l=i[$a](),m=i[Sa](),p=g?0:(864E5+i.getTimezoneOffset()*6E4)%864E5;d<c;)e.push(d),j===D[Da]?d=bb(h+b*k,0):j===D[Ra]?d=bb(h,l+b*k):!g&&(j===D[ua]||j===D[Za])?d=bb(h,l,m+b*k*(j===D[ua]?1:7)):d+=j*k,b++;e.push(d);n(ub(e,function(a){return j<=D[Qa]&&a%D[ua]===p}),function(a){f[a]=ua})}e.info=r(a,{higherRanks:f,totalRange:j*k});return e}function Jb(){this.symbol=this.color=0}function Kb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:\nd});for(e=0;e<c;e++)delete a[e].ss_i}function Ja(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function va(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Ka(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Ta(a){cb||(cb=U(Ea));a&&cb.appendChild(a);cb.innerHTML=\"\"}function ka(a,b){var c=\"Highcharts error #\"+a+\": www.highcharts.com/errors/\"+a;if(b)throw c;else O.console&&console.log(c)}function ia(a){return parseFloat(a.toPrecision(14))}\nfunction La(a,b){Fa=o(a,b.animation)}function Lb(){var a=M.global.useUTC,b=a?\"getUTC\":\"get\",c=a?\"setUTC\":\"set\";bb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,o(c,1),o(g,0),o(h,0),o(i,0))).getTime()};qb=b+\"Minutes\";rb=b+\"Hours\";tb=b+\"Day\";Sa=b+\"Date\";$a=b+\"Month\";ab=b+\"FullYear\";Fb=c+\"Minutes\";Gb=c+\"Hours\";sb=c+\"Date\";Hb=c+\"Month\";Ib=c+\"FullYear\"}function wa(){}function Ma(a,b,c,d){this.axis=a;this.pos=b;this.type=c||\"\";this.isNew=!0;!c&&!d&&this.addLabel()}function vb(a,b){this.axis=a;if(b)this.options=\nb,this.id=b.id}function Mb(a,b,c,d,e,f){var g=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.percent=f===\"percent\";this.alignOptions={align:b.align||(g?c?\"left\":\"right\":\"center\"),verticalAlign:b.verticalAlign||(g?\"middle\":c?\"bottom\":\"top\"),y:o(b.y,g?4:c?14:-6),x:o(b.x,g?c?-6:6:0)};this.textAlign=b.textAlign||(g?c?\"right\":\"left\":\"center\")}function db(){this.init.apply(this,arguments)}function wb(){this.init.apply(this,arguments)}\nfunction xb(a,b){this.init(a,b)}function eb(a,b){this.init(a,b)}function yb(){this.init.apply(this,arguments)}var w,y=document,O=window,R=Math,t=R.round,P=R.floor,xa=R.ceil,s=R.max,I=R.min,N=R.abs,V=R.cos,ca=R.sin,ya=R.PI,Ua=ya*2/360,oa=navigator.userAgent,Nb=O.opera,ta=/msie/i.test(oa)&&!Nb,fb=y.documentMode===8,gb=/AppleWebKit/.test(oa),hb=/Firefox/.test(oa),Ob=/(Mobile|Android|Windows Phone)/.test(oa),za=\"http://www.w3.org/2000/svg\",Z=!!y.createElementNS&&!!y.createElementNS(za,\"svg\").createSVGRect,\nUb=hb&&parseInt(oa.split(\"Firefox/\")[1],10)<4,$=!Z&&!ta&&!!y.createElement(\"canvas\").getContext,Va,ib=y.documentElement.ontouchstart!==w,Pb={},zb=0,cb,M,Xa,Fa,Ab,D,pa=function(){},Ga=[],Ea=\"div\",S=\"none\",Qb=\"rgba(192,192,192,\"+(Z?1.0E-4:0.002)+\")\",Db=\"millisecond\",pb=\"second\",Ya=\"minute\",Qa=\"hour\",ua=\"day\",Za=\"week\",Ra=\"month\",Da=\"year\",Rb=\"stroke-width\",bb,qb,rb,tb,Sa,$a,ab,Fb,Gb,sb,Hb,Ib,W={};O.Highcharts=O.Highcharts?ka(16,!0):{};Xa=function(a,b,c){if(!u(b)||isNaN(b))return\"Invalid date\";var a=\no(a,\"%Y-%m-%d %H:%M:%S\"),d=new Date(b),e,f=d[rb](),g=d[tb](),h=d[Sa](),i=d[$a](),j=d[ab](),k=M.lang,l=k.weekdays,d=r({a:l[g].substr(0,3),A:l[g],d:Ba(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ba(i+1),y:j.toString().substr(2,2),Y:j,H:Ba(f),I:Ba(f%12||12),l:f%12||12,M:Ba(d[qb]()),p:f<12?\"AM\":\"PM\",P:f<12?\"am\":\"pm\",S:Ba(d.getSeconds()),L:Ba(t(b%1E3),3)},Highcharts.dateFormats);for(e in d)for(;a.indexOf(\"%\"+e)!==-1;)a=a.replace(\"%\"+e,typeof d[e]===\"function\"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+\na.substr(1):a};Jb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};D=function(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}(Db,1,pb,1E3,Ya,6E4,Qa,36E5,ua,864E5,Za,6048E5,Ra,26784E5,Da,31556952E3);Ab={init:function(a,b,c){var b=b||\"\",d=a.shift,e=b.indexOf(\"C\")>-1,f=e?7:3,g,b=b.split(\" \"),c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]===\"M\"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&\n(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};\n(function(a){O.HighchartsAdapter=O.HighchartsAdapter||a&&{init:function(b){var c=a.fx,d=c.step,e,f=a.Tween,g=f&&f.propHooks;e=a.cssHooks.opacity;a.extend(a.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});a.each([\"cur\",\"_default\",\"width\",\"height\",\"opacity\"],function(a,b){var e=d,k,l;b===\"cur\"?e=c.prototype:b===\"_default\"&&f&&(e=g[b],b=\"set\");(k=e[b])&&(e[b]=function(c){c=a?c:this;if(c.prop!==\"align\")return l=c.elem,l.attr?l.attr(c.prop,b===\"cur\"?w:c.now):k.apply(this,arguments)})});\nmb(e,\"get\",function(a,b,c){return b.attr?b.opacity||0:a.call(this,b,c)});e=function(a){var c=a.elem,d;if(!a.started)d=b.init(c,c.d,c.toD),a.start=d[0],a.end=d[1],a.started=!0;c.attr(\"d\",b.step(a.start,a.end,a.pos,c.toD))};f?g.d={set:e}:d.d=e;this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c};a.fn.highcharts=function(){var a=\"Chart\",b=arguments,c,d;ea(b[0])&&(a=b[0],b=Array.prototype.slice.call(b,\n1));c=b[0];if(c!==w)c.chart=c.chart||{},c.chart.renderTo=this[0],new Highcharts[a](c,b[1]),d=this;c===w&&(d=Ga[v(this[0],\"data-highcharts-chart\")]);return d}},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b,c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);return d},offset:function(b){return a(b).offset()},addEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=y.removeEventListener?\"removeEventListener\":\n\"detachEvent\";y[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g=\"detached\"+c,h;!ta&&d&&(delete d.layerX,delete d.layerY);r(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each([\"preventDefault\",\"stopPropagation\"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b===\"preventDefault\"&&(h=!0)}}});a(b).trigger(f);b[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===w)c.pageX=\na.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(!b.style)b.style={};if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==w&&b.attr&&(c.opacity+=\"px\");e.animate(c,d)},stop:function(b){a(b).stop()}}})(O.jQuery);var X=O.HighchartsAdapter,G=X||{};X&&X.init.call(X,Ab);var jb=G.adapterRun,Vb=G.getScript,qa=G.inArray,n=G.each,ub=G.grep,Wb=G.offset,Na=G.map,J=G.addEvent,aa=G.removeEvent,z=G.fireEvent,Xb=G.washMouseEvent,Bb=G.animate,Wa=G.stop,G={enabled:!0,x:0,y:15,style:{color:\"#666\",cursor:\"default\",\nfontSize:\"11px\",lineHeight:\"14px\"}};M={colors:\"#2f7ed8,#0d233a,#8bbc21,#910000,#1aadce,#492970,#f28f43,#77a1e5,#c42525,#a6c96a\".split(\",\"),symbols:[\"circle\",\"diamond\",\"square\",\"triangle\",\"triangle-down\"],lang:{loading:\"Loading...\",months:\"January,February,March,April,May,June,July,August,September,October,November,December\".split(\",\"),shortMonths:\"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec\".split(\",\"),weekdays:\"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday\".split(\",\"),decimalPoint:\".\",\nnumericSymbols:\"k,M,G,T,P,E\".split(\",\"),resetZoom:\"Reset zoom\",resetZoomTitle:\"Reset zoom level 1:1\",thousandsSep:\",\"},global:{useUTC:!0,canvasToolsURL:\"http://code.highcharts.com/3.0.6/modules/canvas-tools.js\",VMLRadialGradientURL:\"http://code.highcharts.com/3.0.6/gfx/vml-radial-gradient.png\"},chart:{borderColor:\"#4572A7\",borderRadius:5,defaultSeriesType:\"line\",ignoreHiddenSeries:!0,spacing:[10,10,15,10],style:{fontFamily:'\"Lucida Grande\", \"Lucida Sans Unicode\", Verdana, Arial, Helvetica, sans-serif',\nfontSize:\"12px\"},backgroundColor:\"#FFFFFF\",plotBorderColor:\"#C0C0C0\",resetZoomButton:{theme:{zIndex:20},position:{align:\"right\",x:-10,y:10}}},title:{text:\"Chart title\",align:\"center\",margin:15,style:{color:\"#274b6d\",fontSize:\"16px\"}},subtitle:{text:\"\",align:\"center\",style:{color:\"#4d759e\"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{enabled:!0,lineWidth:0,radius:4,lineColor:\"#FFFFFF\",states:{hover:{enabled:!0},select:{fillColor:\"#FFFFFF\",\nlineColor:\"#000000\",lineWidth:2}}},point:{events:{}},dataLabels:x(G,{align:\"center\",enabled:!1,formatter:function(){return this.y===null?\"\":Aa(this.y,-1)},verticalAlign:\"bottom\",y:0}),cropThreshold:300,pointRange:0,showInLegend:!0,states:{hover:{marker:{}},select:{marker:{}}},stickyTracking:!0}},labels:{style:{position:\"absolute\",color:\"#3E576F\"}},legend:{enabled:!0,align:\"center\",layout:\"horizontal\",labelFormatter:function(){return this.name},borderWidth:1,borderColor:\"#909090\",borderRadius:5,navigation:{activeColor:\"#274b6d\",\ninactiveColor:\"#CCC\"},shadow:!1,itemStyle:{cursor:\"pointer\",color:\"#274b6d\",fontSize:\"12px\"},itemHoverStyle:{color:\"#000\"},itemHiddenStyle:{color:\"#CCC\"},itemCheckboxStyle:{position:\"absolute\",width:\"13px\",height:\"13px\"},symbolWidth:16,symbolPadding:5,verticalAlign:\"bottom\",x:0,y:0,title:{style:{fontWeight:\"bold\"}}},loading:{labelStyle:{fontWeight:\"bold\",position:\"relative\",top:\"1em\"},style:{position:\"absolute\",backgroundColor:\"white\",opacity:0.5,textAlign:\"center\"}},tooltip:{enabled:!0,animation:Z,\nbackgroundColor:\"rgba(255, 255, 255, .85)\",borderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:\"%A, %b %e, %H:%M:%S.%L\",second:\"%A, %b %e, %H:%M:%S\",minute:\"%A, %b %e, %H:%M\",hour:\"%A, %b %e, %H:%M\",day:\"%A, %b %e, %Y\",week:\"Week from %A, %b %e, %Y\",month:\"%B %Y\",year:\"%Y\"},headerFormat:'<span style=\"font-size: 10px\">{point.key}</span><br/>',pointFormat:'<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y}</b><br/>',shadow:!0,snap:Ob?25:10,style:{color:\"#333333\",cursor:\"default\",\nfontSize:\"12px\",padding:\"8px\",whiteSpace:\"nowrap\"}},credits:{enabled:!0,text:\"Highcharts.com\",href:\"http://www.highcharts.com\",position:{align:\"right\",x:-10,verticalAlign:\"bottom\",y:-5},style:{cursor:\"pointer\",color:\"#909090\",fontSize:\"9px\"}}};var Y=M.plotOptions,X=Y.line;Lb();var ra=function(a){var b=[],c,d;(function(a){a&&a.stops?d=Na(a.stops,function(a){return ra(a[1])}):(c=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/.exec(a))?b=[C(c[1]),C(c[2]),\nC(c[3]),parseFloat(c[4],10)]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))?b=[C(c[1],16),C(c[2],16),C(c[3],16),1]:(c=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(a))&&(b=[C(c[1]),C(c[2]),C(c[3]),1])})(a);return{get:function(c){var f;d?(f=x(a),f.stops=[].concat(f.stops),n(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c===\"rgb\"?\"rgb(\"+b[0]+\",\"+b[1]+\",\"+b[2]+\")\":c===\"a\"?b[3]:\"rgba(\"+b.join(\",\")+\")\":a;return f},brighten:function(a){if(d)n(d,\nfunction(b){b.brighten(a)});else if(sa(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=C(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};wa.prototype={init:function(a,b){this.element=b===\"span\"?U(b):y.createElementNS(za,b);this.renderer=a;this.attrSetters={}},opacity:1,animate:function(a,b,c){b=o(b,Fa,!0);Wa(this);if(b){b=x(b);if(c)b.complete=c;Bb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName.toLowerCase(),\ni=this.renderer,j,k=this.attrSetters,l=this.shadows,m,p,q=this;ea(a)&&u(b)&&(c=a,a={},a[c]=b);if(ea(a))c=a,h===\"circle\"?c={x:\"cx\",y:\"cy\"}[c]||c:c===\"strokeWidth\"&&(c=\"stroke-width\"),q=v(g,c)||this[c]||0,c!==\"d\"&&c!==\"visibility\"&&c!==\"fill\"&&(q=parseFloat(q));else{for(c in a)if(j=!1,d=a[c],e=k[c]&&k[c].call(this,d,c),e!==!1){e!==w&&(d=e);if(c===\"d\")d&&d.join&&(d=d.join(\" \")),/(NaN| {2}|^$)/.test(d)&&(d=\"M 0 0\");else if(c===\"x\"&&h===\"text\")for(e=0;e<g.childNodes.length;e++)f=g.childNodes[e],v(f,\"x\")===\nv(g,\"x\")&&v(f,\"x\",d);else if(this.rotation&&(c===\"x\"||c===\"y\"))p=!0;else if(c===\"fill\")d=i.color(d,g,c);else if(h===\"circle\"&&(c===\"x\"||c===\"y\"))c={x:\"cx\",y:\"cy\"}[c]||c;else if(h===\"rect\"&&c===\"r\")v(g,{rx:d,ry:d}),j=!0;else if(c===\"translateX\"||c===\"translateY\"||c===\"rotation\"||c===\"verticalAlign\"||c===\"scaleX\"||c===\"scaleY\")j=p=!0;else if(c===\"stroke\")d=i.color(d,g,c);else if(c===\"dashstyle\")if(c=\"stroke-dasharray\",d=d&&d.toLowerCase(),d===\"solid\")d=S;else{if(d){d=d.replace(\"shortdashdotdot\",\"3,1,1,1,1,1,\").replace(\"shortdashdot\",\n\"3,1,1,1\").replace(\"shortdot\",\"1,1,\").replace(\"shortdash\",\"3,1,\").replace(\"longdash\",\"8,3,\").replace(/dot/g,\"1,3,\").replace(\"dash\",\"4,3,\").replace(/,$/,\"\").split(\",\");for(e=d.length;e--;)d[e]=C(d[e])*o(a[\"stroke-width\"],this[\"stroke-width\"]);d=d.join(\",\")}}else if(c===\"width\")d=C(d);else if(c===\"align\")c=\"text-anchor\",d={left:\"start\",center:\"middle\",right:\"end\"}[d];else if(c===\"title\")e=g.getElementsByTagName(\"title\")[0],e||(e=y.createElementNS(za,\"title\"),g.appendChild(e)),e.textContent=d;c===\"strokeWidth\"&&\n(c=\"stroke-width\");if(c===\"stroke-width\"||c===\"stroke\"){this[c]=d;if(this.stroke&&this[\"stroke-width\"])v(g,\"stroke\",this.stroke),v(g,\"stroke-width\",this[\"stroke-width\"]),this.hasStroke=!0;else if(c===\"stroke-width\"&&d===0&&this.hasStroke)g.removeAttribute(\"stroke\"),this.hasStroke=!1;j=!0}this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&(m||(this.symbolAttr(a),m=!0),j=!0);if(l&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c))for(e=l.length;e--;)v(l[e],\nc,c===\"height\"?s(d-(l[e].cutHeight||0),0):d);if((c===\"width\"||c===\"height\")&&h===\"rect\"&&d<0)d=0;this[c]=d;c===\"text\"?(d!==this.textStr&&delete this.bBox,this.textStr=d,this.added&&i.buildText(this)):j||v(g,c,d)}p&&this.updateTransform()}return q},addClass:function(a){var b=this.element,c=v(b,\"class\")||\"\";c.indexOf(a)===-1&&v(b,\"class\",c+\" \"+a);return this},symbolAttr:function(a){var b=this;n(\"x,y,r,start,end,width,height,innerR,anchorX,anchorY\".split(\",\"),function(c){b[c]=o(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,\nb.y,b.width,b.height,b)})},clip:function(a){return this.attr(\"clip-path\",a?\"url(\"+this.renderer.url+\"#\"+a.id+\")\":S)},crisp:function(a,b,c,d,e){var f,g={},h={},i,a=a||this.strokeWidth||this.attr&&this.attr(\"stroke-width\")||0;i=t(a)%2/2;h.x=P(b||this.x||0)+i;h.y=P(c||this.y||0)+i;h.width=P((d||this.width||0)-2*i);h.height=P((e||this.height||0)-2*i);h.strokeWidth=a;for(f in h)this[f]!==h[f]&&(this[f]=g[f]=h[f]);return g},css:function(a){var b=this.element,c=a&&a.width&&b.nodeName.toLowerCase()===\"text\",\nd,e=\"\",f=function(a,b){return\"-\"+b.toLowerCase()};if(a&&a.color)a.fill=a.color;this.styles=a=r(this.styles,a);$&&c&&delete a.width;if(ta&&!Z)c&&delete a.width,K(this.element,a);else{for(d in a)e+=d.replace(/([A-Z])/g,f)+\":\"+a[d]+\";\";v(b,\"style\",e)}c&&this.added&&this.renderer.buildText(this);return this},on:function(a,b){var c=this,d=c.element;ib&&a===\"click\"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(oa.indexOf(\"Android\")===-1||\nDate.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d[\"on\"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},htmlCss:function(a){var b=this.element;if(b=a&&b.tagName===\"SPAN\"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();this.styles=r(this.styles,a);K(this.element,a);return this},htmlGetBBox:function(){var a=\nthis.element,b=this.bBox;if(!b){if(a.nodeName===\"text\")a.style.position=\"absolute\";b=this.bBox={x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}return b},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||\"left\",h={left:0,center:0.5,right:1}[g],i=g&&g!==\"left\",j=this.shadows;K(b,{marginLeft:c,marginTop:d});j&&n(j,function(a){K(a,{marginLeft:c+1,marginTop:d+1})});\nthis.inverted&&n(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName===\"SPAN\"){var k,l,j=this.rotation,m;k=0;var p=1,q=0,ba;m=C(this.textWidth);var A=this.xCorr||0,L=this.yCorr||0,Sb=[j,g,b.innerHTML,this.textWidth].join(\",\");if(Sb!==this.cTT){u(j)&&(k=j*Ua,p=V(k),q=ca(k),this.setSpanRotation(j,q,p));k=o(this.elemWidth,b.offsetWidth);l=o(this.elemHeight,b.offsetHeight);if(k>m&&/[ \\-]/.test(b.textContent||b.innerText))K(b,{width:m+\"px\",display:\"block\",whiteSpace:\"normal\"}),k=m;m=a.fontMetrics(b.style.fontSize).b;\nA=p<0&&-k;L=q<0&&-l;ba=p*q<0;A+=q*m*(ba?1-h:h);L-=p*m*(j?ba?h:1-h:1);i&&(A-=k*h*(p<0?-1:1),j&&(L-=l*h*(q<0?-1:1)),K(b,{textAlign:g}));this.xCorr=A;this.yCorr=L}K(b,{left:e+A+\"px\",top:f+L+\"px\"});if(gb)l=b.offsetHeight;this.cTT=Sb}}else this.alignOnAdd=!0},setSpanRotation:function(a){var b={};b[ta?\"-ms-transform\":gb?\"-webkit-transform\":hb?\"MozTransform\":Nb?\"-o-transform\":\"\"]=b.transform=\"rotate(\"+a+\"deg)\";K(this.element,b)},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=\nthis.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation;e&&(a+=this.attr(\"width\"),b+=this.attr(\"height\"));a=[\"translate(\"+a+\",\"+b+\")\"];e?a.push(\"rotate(90) scale(-1,1)\"):f&&a.push(\"rotate(\"+f+\" \"+(this.x||0)+\" \"+(this.y||0)+\")\");(u(c)||u(d))&&a.push(\"scale(\"+o(c,1)+\" \"+o(d,1)+\")\");a.length&&v(this.element,\"transform\",a.join(\" \"))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=\na,this.alignByTranslate=b,!c||ea(c))this.alignTo=d=c||\"renderer\",ga(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=o(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+(a.y||0);if(d===\"right\"||d===\"center\")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?\"translateX\":\"x\"]=t(f);if(e===\"bottom\"||e===\"middle\")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?\"translateY\":\"y\"]=t(g);this[this.placed?\"animate\":\"attr\"](h);this.placed=\n!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d=this.rotation;c=this.element;var e=this.styles,f=d*Ua;if(!a){if(c.namespaceURI===za||b.forExport){try{a=c.getBBox?r({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(g){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){b=a.width;c=a.height;if(ta&&e&&e.fontSize===\"11px\"&&c.toPrecision(3)===\"22.7\")a.height=c=14;if(d)a.width=N(c*ca(f))+N(b*V(f)),a.height=N(c*V(f))+N(b*ca(f))}this.bBox=\na}return a},show:function(){return this.attr({visibility:\"visible\"})},hide:function(){return this.attr({visibility:\"hidden\"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=d.childNodes,f=this.element,g=v(f,\"zIndex\"),h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(g)c.handleZ=!0,g=C(g);if(c.handleZ)for(c=0;c<e.length;c++)if(a=\ne[c],b=v(a,\"zIndex\"),a!==f&&(C(b)>g||!u(g)&&u(b))){d.insertBefore(f,a);h=!0;break}h||d.appendChild(f);this.added=!0;z(this,\"add\");return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName===\"SPAN\"&&b.parentNode,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;Wa(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();\na.stops=null}a.safeRemoveChild(b);for(c&&n(c,function(b){a.safeRemoveChild(b)});d&&d.childNodes.length===0;)b=d.parentNode,a.safeRemoveChild(d),d=b;a.alignTo&&ga(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,j,k;if(a){i=o(a.width,3);j=(a.opacity||0.15)/i;k=this.parentInverted?\"(-1,-1)\":\"(\"+o(a.offsetX,1)+\", \"+o(a.offsetY,1)+\")\";for(e=1;e<=i;e++){f=g.cloneNode(0);h=i*2+1-2*e;v(f,{isShadow:\"true\",stroke:a.color||\"black\",\"stroke-opacity\":j*\ne,\"stroke-width\":h,transform:\"translate\"+k,fill:S});if(c)v(f,\"height\",s(v(f,\"height\")-h,0)),f.cutHeight=h;b?b.element.appendChild(f):g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this}};var Ha=function(){this.init.apply(this,arguments)};Ha.prototype={Element:wa,init:function(a,b,c,d){var e=location,f,g;f=this.createElement(\"svg\").attr({version:\"1.1\"});g=f.element;a.appendChild(g);a.innerHTML.indexOf(\"xmlns\")===-1&&v(g,\"xmlns\",za);this.isSVG=!0;this.box=g;this.boxWrapper=f;this.alignedObjects=\n[];this.url=(hb||gb)&&y.getElementsByTagName(\"base\").length?e.href.replace(/#.*?$/,\"\").replace(/([\\('\\)])/g,\"\\\\$1\").replace(/ /g,\"%20\"):\"\";this.createElement(\"desc\").add().element.appendChild(y.createTextNode(\"Created with Highcharts 3.0.6\"));this.defs=this.createElement(\"defs\").add();this.forExport=d;this.gradients={};this.setSize(b,c,!1);var h;if(hb&&a.getBoundingClientRect)this.subPixelFix=b=function(){K(a,{left:0,top:0});h=a.getBoundingClientRect();K(a,{left:xa(h.left)-h.left+\"px\",top:xa(h.top)-\nh.top+\"px\"})},b(),J(O,\"resize\",b)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Ka(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&aa(O,\"resize\",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},buildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=o(a.textStr,\n\"\").toString().replace(/<(b|strong)>/g,'<span style=\"font-weight:bold\">').replace(/<(i|em)>/g,'<span style=\"font-style:italic\">').replace(/<a/g,\"<span\").replace(/<\\/(b|strong|i|em|a)>/g,\"</span>\").split(/<br.*?>/g),f=b.childNodes,g=/style=\"([^\"]+)\"/,h=/href=\"(http[^\"]+)\"/,i=v(b,\"x\"),j=a.styles,k=j&&j.width&&C(j.width),l=j&&j.lineHeight,m=f.length;m--;)b.removeChild(f[m]);k&&!a.added&&this.box.appendChild(b);e[e.length-1]===\"\"&&e.pop();n(e,function(e,f){var m,o=0,e=e.replace(/<span/g,\"|||<span\").replace(/<\\/span>/g,\n\"</span>|||\");m=e.split(\"|||\");n(m,function(e){if(e!==\"\"||m.length===1){var p={},n=y.createElementNS(za,\"tspan\"),s;g.test(e)&&(s=e.match(g)[1].replace(/(;| |^)color([ :])/,\"$1fill$2\"),v(n,\"style\",s));h.test(e)&&!d&&(v(n,\"onclick\",'location.href=\"'+e.match(h)[1]+'\"'),K(n,{cursor:\"pointer\"}));e=(e.replace(/<(.|\\n)*?>/g,\"\")||\" \").replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\");if(e!==\" \"&&(n.appendChild(y.createTextNode(e)),o?p.dx=0:p.x=i,v(n,p),!o&&f&&(!Z&&d&&K(n,{display:\"block\"}),v(n,\"dy\",l||c.fontMetrics(/px$/.test(n.style.fontSize)?\nn.style.fontSize:j.fontSize).h,gb&&n.offsetHeight)),b.appendChild(n),o++,k))for(var e=e.replace(/([^\\^])-/g,\"$1- \").split(\" \"),u,t,p=a._clipHeight,E=[],w=C(l||16),B=1;e.length||E.length;)delete a.bBox,u=a.getBBox(),t=u.width,u=t>k,!u||e.length===1?(e=E,E=[],e.length&&(B++,p&&B*w>p?(e=[\"...\"],a.attr(\"title\",a.textStr)):(n=y.createElementNS(za,\"tspan\"),v(n,{dy:w,x:i}),s&&v(n,\"style\",s),b.appendChild(n),t>k&&(k=t)))):(n.removeChild(n.firstChild),E.unshift(e.pop())),e.length&&n.appendChild(y.createTextNode(e.join(\" \").replace(/- /g,\n\"-\")))}})})},button:function(a,b,c,d,e,f,g,h){var i=this.label(a,b,c,null,null,null,null,null,\"button\"),j=0,k,l,m,p,q,n,a={x1:0,y1:0,x2:0,y2:1},e=x({\"stroke-width\":1,stroke:\"#CCCCCC\",fill:{linearGradient:a,stops:[[0,\"#FEFEFE\"],[1,\"#F6F6F6\"]]},r:2,padding:5,style:{color:\"black\"}},e);m=e.style;delete e.style;f=x(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#FFF\"],[1,\"#ACF\"]]}},f);p=f.style;delete f.style;g=x(e,{stroke:\"#68A\",fill:{linearGradient:a,stops:[[0,\"#9BD\"],[1,\"#CDF\"]]}},g);q=g.style;\ndelete g.style;h=x(e,{style:{color:\"#CCC\"}},h);n=h.style;delete h.style;J(i.element,ta?\"mouseover\":\"mouseenter\",function(){j!==3&&i.attr(f).css(p)});J(i.element,ta?\"mouseout\":\"mouseleave\",function(){j!==3&&(k=[e,f,g][j],l=[m,p,q][j],i.attr(k).css(l))});i.setState=function(a){(i.state=j=a)?a===2?i.attr(g).css(q):a===3&&i.attr(h).css(n):i.attr(e).css(m)};return i.on(\"click\",function(){j!==3&&d.call(i)}).attr(e).css(r({cursor:\"default\"},m))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=t(a[1])-b%\n2/2);a[2]===a[5]&&(a[2]=a[5]=t(a[2])+b%2/2);return a},path:function(a){var b={fill:S};Ia(a)?b.d=a:T(a)&&r(b,a);return this.createElement(\"path\").attr(b)},circle:function(a,b,c){a=T(a)?a:{x:a,y:b,r:c};return this.createElement(\"circle\").attr(a)},arc:function(a,b,c,d,e,f){if(T(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol(\"arc\",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){e=T(a)?a.r:e;e=this.createElement(\"rect\").attr({rx:e,ry:e,\nfill:S});return e.attr(T(a)?a:e.crisp(f,a,b,s(c,0),s(d,0)))},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[o(c,!0)?\"animate\":\"attr\"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement(\"g\");return u(a)?b.attr({\"class\":\"highcharts-\"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:S};arguments.length>1&&r(f,{x:b,y:c,width:d,height:e});f=this.createElement(\"image\").attr(f);f.element.setAttributeNS?f.element.setAttributeNS(\"http://www.w3.org/1999/xlink\",\n\"href\",a):f.element.setAttribute(\"hc-svg-href\",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(t(b),t(c),d,e,f),i=/^url\\((.*?)\\)$/,j,k;if(h)g=this.path(h),r(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&r(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),a.alignByTranslate||a.translate(t((d-b[0])/2),t((e-b[1])/2)))},j=a.match(i)[1],a=Pb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),U(\"img\",{onload:function(){k(g,\nPb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return[\"M\",a+c/2,b,\"C\",a+c+e,b,a+c+e,b+d,a+c/2,b+d,\"C\",a-e,b+d,a-e,b,a+c/2,b,\"Z\"]},square:function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c,b+d,a,b+d,\"Z\"]},triangle:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",a+c,b+d,a,b+d,\"Z\"]},\"triangle-down\":function(a,b,c,d){return[\"M\",a,b,\"L\",a+c,b,a+c/2,b+d,\"Z\"]},diamond:function(a,b,c,d){return[\"M\",a+c/2,b,\"L\",a+c,b+d/2,a+c/2,b+d,a,b+d/2,\"Z\"]},arc:function(a,b,c,d,\ne){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=V(f),j=ca(f),k=V(g),g=ca(g),e=e.end-f<ya?0:1;return[\"M\",a+c*i,b+c*j,\"A\",c,c,0,e,1,a+c*k,b+c*g,h?\"M\":\"L\",a+d*k,b+d*g,\"A\",d,d,0,e,0,a+d*i,b+d*j,h?\"\":\"Z\"]}},clipRect:function(a,b,c,d){var e=\"highcharts-\"+zb++,f=this.createElement(\"clipPath\").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;return a},color:function(a,b,c){var d=this,e,f=/^rgba/,g,h,i,j,k,l,m,p=[];a&&a.linearGradient?g=\"linearGradient\":a&&a.radialGradient&&\n(g=\"radialGradient\");if(g){c=a[g];h=d.gradients;j=a.stops;b=b.radialReference;Ia(c)&&(a[g]=c={x1:c[0],y1:c[1],x2:c[2],y2:c[3],gradientUnits:\"userSpaceOnUse\"});g===\"radialGradient\"&&b&&!u(c.gradientUnits)&&(c=x(c,{cx:b[0]-b[2]/2+c.cx*b[2],cy:b[1]-b[2]/2+c.cy*b[2],r:c.r*b[2],gradientUnits:\"userSpaceOnUse\"}));for(m in c)m!==\"id\"&&p.push(m,c[m]);for(m in j)p.push(j[m]);p=p.join(\",\");h[p]?a=h[p].id:(c.id=a=\"highcharts-\"+zb++,h[p]=i=d.createElement(g).attr(c).add(d.defs),i.stops=[],n(j,function(a){f.test(a[1])?\n(e=ra(a[1]),k=e.get(\"rgb\"),l=e.get(\"a\")):(k=a[1],l=1);a=d.createElement(\"stop\").attr({offset:a[0],\"stop-color\":k,\"stop-opacity\":l}).add(i);i.stops.push(a)}));return\"url(\"+d.url+\"#\"+a+\")\"}else return f.test(a)?(e=ra(a),v(b,c+\"-opacity\",e.get(\"a\")),e.get(\"rgb\")):(b.removeAttribute(c+\"-opacity\"),a)},text:function(a,b,c,d){var e=M.chart.style,f=$||!Z&&this.forExport;if(d&&!this.forExport)return this.html(a,b,c);b=t(o(b,0));c=t(o(c,0));a=this.createElement(\"text\").attr({x:b,y:c,text:a}).css({fontFamily:e.fontFamily,\nfontSize:e.fontSize});f&&a.css({position:\"absolute\"});a.x=b;a.y=c;return a},html:function(a,b,c){var d=M.chart.style,e=this.createElement(\"span\"),f=e.attrSetters,g=e.element,h=e.renderer;f.text=function(a){a!==g.innerHTML&&delete this.bBox;g.innerHTML=a;return!1};f.x=f.y=f.align=function(a,b){b===\"align\"&&(b=\"textAlign\");e[b]=a;e.htmlUpdateTransform();return!1};e.attr({text:a,x:t(b),y:t(c)}).css({position:\"absolute\",whiteSpace:\"nowrap\",fontFamily:d.fontFamily,fontSize:d.fontSize});e.css=e.htmlCss;\nif(h.isSVG)e.add=function(a){var b,c=h.box.parentNode,d=[];if(a){if(b=a.div,!b){for(;a;)d.push(a),a=a.parentGroup;n(d.reverse(),function(a){var d;b=a.div=a.div||U(Ea,{className:v(a.element,\"class\")},{position:\"absolute\",left:(a.translateX||0)+\"px\",top:(a.translateY||0)+\"px\"},b||c);d=b.style;r(a.attrSetters,{translateX:function(a){d.left=a+\"px\"},translateY:function(a){d.top=a+\"px\"},visibility:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(g);e.added=!0;e.alignOnAdd&&e.htmlUpdateTransform();return e};\nreturn e},fontMetrics:function(a){var a=C(a||11),a=a<24?a+4:t(a*1.2),b=t(a*0.8);return{h:a,b:b}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a,b;a=o.element.style;L=(Oa===void 0||la===void 0||q.styles.textAlign)&&o.getBBox();q.width=(Oa||L.width||0)+2*da+kb;q.height=(la||L.height||0)+2*da;v=da+p.fontMetrics(a&&a.fontSize).b;if(C){if(!A)a=t(-s*da),b=h?-v:0,q.box=A=d?p.symbol(d,a,b,q.width,q.height):p.rect(a,b,q.width,q.height,0,lb[Rb]),A.add(q);A.isImg||A.attr(x({width:q.width,height:q.height},\nlb));lb=null}}function k(){var a=q.styles,a=a&&a.textAlign,b=kb+da*(1-s),c;c=h?0:v;if(u(Oa)&&(a===\"center\"||a===\"right\"))b+={center:0.5,right:1}[a]*(Oa-L.width);(b!==o.x||c!==o.y)&&o.attr({x:b,y:c});o.x=b;o.y=c}function l(a,b){A?A.attr(a,b):lb[a]=b}function m(){o.add(q);q.attr({text:a,x:b,y:c});A&&u(e)&&q.attr({anchorX:e,anchorY:f})}var p=this,q=p.g(i),o=p.text(\"\",0,0,g).attr({zIndex:1}),A,L,s=0,da=3,kb=0,Oa,la,E,H,B=0,lb={},v,g=q.attrSetters,C;J(q,\"add\",m);g.width=function(a){Oa=a;return!1};g.height=\nfunction(a){la=a;return!1};g.padding=function(a){u(a)&&a!==da&&(da=a,k());return!1};g.paddingLeft=function(a){u(a)&&a!==kb&&(kb=a,k());return!1};g.align=function(a){s={left:0,center:0.5,right:1}[a];return!1};g.text=function(a,b){o.attr(b,a);j();k();return!1};g[Rb]=function(a,b){C=!0;B=a%2/2;l(b,a);return!1};g.stroke=g.fill=g.r=function(a,b){b===\"fill\"&&(C=!0);l(b,a);return!1};g.anchorX=function(a,b){e=a;l(b,a+B-E);return!1};g.anchorY=function(a,b){f=a;l(b,a-H);return!1};g.x=function(a){q.x=a;a-=s*\n((Oa||L.width)+da);E=t(a);q.attr(\"translateX\",E);return!1};g.y=function(a){H=q.y=t(a);q.attr(\"translateY\",H);return!1};var y=q.css;return r(q,{css:function(a){if(a){var b={},a=x(a);n(\"fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow\".split(\",\"),function(c){a[c]!==w&&(b[c]=a[c],delete a[c])});o.css(b)}return y.call(q,a)},getBBox:function(){return{width:L.width+2*da,height:L.height+2*da,x:L.x-da,y:L.y-da}},shadow:function(a){A&&A.shadow(a);return q},destroy:function(){aa(q,\n\"add\",m);aa(q.element,\"mouseenter\");aa(q.element,\"mouseleave\");o&&(o=o.destroy());A&&(A=A.destroy());wa.prototype.destroy.call(q);q=p=j=k=l=m=null}})}};Va=Ha;var F;if(!Z&&!$){Highcharts.VMLElement=F={init:function(a,b){var c=[\"<\",b,' filled=\"f\" stroked=\"f\"'],d=[\"position: \",\"absolute\",\";\"],e=b===Ea;(b===\"shape\"||e)&&d.push(\"left:0;top:0;width:1px;height:1px;\");d.push(\"visibility: \",e?\"hidden\":\"visible\");c.push(' style=\"',d.join(\"\"),'\"/>');if(b)c=e||b===\"span\"||b===\"img\"?c.join(\"\"):a.prepVML(c),this.element=\nU(c);this.renderer=a;this.attrSetters={}},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();z(this,\"add\");return this},updateTransform:wa.prototype.htmlUpdateTransform,setSpanRotation:function(a,b,c){K(this.element,{filter:a?[\"progid:DXImageTransform.Microsoft.Matrix(M11=\",c,\", M12=\",-b,\", M21=\",b,\", M22=\",c,\", sizingMethod='auto expand')\"].join(\"\"):\nS})},pathToVML:function(a){for(var b=a.length,c=[],d;b--;)if(sa(a[b]))c[b]=t(a[b]*10)-5;else if(a[b]===\"Z\")c[b]=\"x\";else if(c[b]=a[b],a.isArc&&(a[b]===\"wa\"||a[b]===\"at\"))d=a[b]===\"wa\"?1:-1,c[b+5]===c[b+7]&&(c[b+7]-=d),c[b+6]===c[b+8]&&(c[b+8]-=d);return c.join(\" \")||\"x\"},attr:function(a,b){var c,d,e,f=this.element||{},g=f.style,h=f.nodeName,i=this.renderer,j=this.symbolName,k,l=this.shadows,m,p=this.attrSetters,q=this;ea(a)&&u(b)&&(c=a,a={},a[c]=b);if(ea(a))c=a,q=c===\"strokeWidth\"||c===\"stroke-width\"?\nthis.strokeweight:this[c];else for(c in a)if(d=a[c],m=!1,e=p[c]&&p[c].call(this,d,c),e!==!1&&d!==null){e!==w&&(d=e);if(j&&/^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(c))k||(this.symbolAttr(a),k=!0),m=!0;else if(c===\"d\"){d=d||[];this.d=d.join(\" \");f.path=d=this.pathToVML(d);if(l)for(e=l.length;e--;)l[e].path=l[e].cutOff?this.cutOffPath(d,l[e].cutOff):d;m=!0}else if(c===\"visibility\"){if(l)for(e=l.length;e--;)l[e].style[c]=d;h===\"DIV\"&&(d=d===\"hidden\"?\"-999em\":0,fb||(g[c]=d?\"visible\":\n\"hidden\"),c=\"top\");g[c]=d;m=!0}else if(c===\"zIndex\")d&&(g[c]=d),m=!0;else if(qa(c,[\"x\",\"y\",\"width\",\"height\"])!==-1)this[c]=d,c===\"x\"||c===\"y\"?c={x:\"left\",y:\"top\"}[c]:d=s(0,d),this.updateClipping?(this[c]=d,this.updateClipping()):g[c]=d,m=!0;else if(c===\"class\"&&h===\"DIV\")f.className=d;else if(c===\"stroke\")d=i.color(d,f,c),c=\"strokecolor\";else if(c===\"stroke-width\"||c===\"strokeWidth\")f.stroked=d?!0:!1,c=\"strokeweight\",this[c]=d,sa(d)&&(d+=\"px\");else if(c===\"dashstyle\")(f.getElementsByTagName(\"stroke\")[0]||\nU(i.prepVML([\"<stroke/>\"]),null,null,f))[c]=d||\"solid\",this.dashstyle=d,m=!0;else if(c===\"fill\")if(h===\"SPAN\")g.color=d;else{if(h!==\"IMG\")f.filled=d!==S?!0:!1,d=i.color(d,f,c,this),c=\"fillcolor\"}else if(c===\"opacity\")m=!0;else if(h===\"shape\"&&c===\"rotation\")this[c]=f.style[c]=d,f.style.left=-t(ca(d*Ua)+1)+\"px\",f.style.top=t(V(d*Ua))+\"px\";else if(c===\"translateX\"||c===\"translateY\"||c===\"rotation\")this[c]=d,this.updateTransform(),m=!0;else if(c===\"text\")this.bBox=null,f.innerHTML=d,m=!0;m||(fb?f[c]=\nd:v(f,c,d))}return q},clip:function(a){var b=this,c;a?(c=a.members,ga(c,b),c.push(b),b.destroyClip=function(){ga(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:fb?\"inherit\":\"rect(auto)\"});return b.css(a)},css:wa.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Ta(a)},destroy:function(){this.destroyClip&&this.destroyClip();return wa.prototype.destroy.apply(this)},on:function(a,b){this.element[\"on\"+a]=function(){var a=O.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,\nb){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=C(a[c-2])-10*b;return a.join(\" \")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,l,m,p,q;k&&typeof k.value!==\"string\"&&(k=\"x\");m=k;if(a){p=o(a.width,3);q=(a.opacity||0.15)/p;for(e=1;e<=3;e++){l=p*2+1-2*e;c&&(m=this.cutOffPath(k.value,l+0.5));j=['<shape isShadow=\"true\" strokeweight=\"',l,'\" filled=\"false\" path=\"',m,'\" coordsize=\"10 10\" style=\"',f.style.cssText,'\" />'];h=U(g.prepVML(j),null,\n{left:C(i.left)+o(a.offsetX,1),top:C(i.top)+o(a.offsetY,1)});if(c)h.cutOff=l+1;j=['<stroke color=\"',a.color||\"black\",'\" opacity=\"',q*e,'\"/>'];U(g.prepVML(j),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this}};F=ha(wa,F);var ma={Element:F,isIE8:oa.indexOf(\"MSIE 8.0\")>-1,init:function(a,b,c){var d,e;this.alignedObjects=[];d=this.createElement(Ea);e=d.element;e.style.position=\"relative\";a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=\nd;this.setSize(b,c,!1);y.namespaces.hcv||(y.namespaces.add(\"hcv\",\"urn:schemas-microsoft-com:vml\"),(y.styleSheets.length?y.styleSheets[0]:y.createStyleSheet()).cssText+=\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \")},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=T(a);return r(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=\na.element,c=b.nodeName,a=a.inverted,d=this.top-(c===\"shape\"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:\"rect(\"+t(a?e:d)+\"px,\"+t(a?f:b)+\"px,\"+t(a?b:f)+\"px,\"+t(a?d:e)+\"px)\"};!a&&fb&&c===\"DIV\"&&r(d,{width:b+\"px\",height:f+\"px\"});return d},updateClipping:function(){n(e.members,function(a){a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=S;a&&a.linearGradient?i=\"gradient\":a&&a.radialGradient&&(i=\"pattern\");if(i){var k,l,m=a.linearGradient||a.radialGradient,\np,q,o,A,L,s=\"\",a=a.stops,u,t=[],w=function(){h=['<fill colors=\"'+t.join(\",\")+'\" opacity=\"',o,'\" o:opacity2=\"',q,'\" type=\"',i,'\" ',s,'focus=\"100%\" method=\"any\" />'];U(e.prepVML(h),null,null,b)};p=a[0];u=a[a.length-1];p[0]>0&&a.unshift([0,p[1]]);u[0]<1&&a.push([1,u[1]]);n(a,function(a,b){g.test(a[1])?(f=ra(a[1]),k=f.get(\"rgb\"),l=f.get(\"a\")):(k=a[1],l=1);t.push(a[0]*100+\"% \"+k);b?(o=l,A=k):(q=l,L=k)});if(c===\"fill\")if(i===\"gradient\")c=m.x1||m[0]||0,a=m.y1||m[1]||0,p=m.x2||m[2]||0,m=m.y2||m[3]||0,s='angle=\"'+\n(90-R.atan((m-a)/(p-c))*180/ya)+'\"',w();else{var j=m.r,r=j*2,E=j*2,H=m.cx,B=m.cy,x=b.radialReference,v,j=function(){x&&(v=d.getBBox(),H+=(x[0]-v.x)/v.width-0.5,B+=(x[1]-v.y)/v.height-0.5,r*=x[2]/v.width,E*=x[2]/v.height);s='src=\"'+M.global.VMLRadialGradientURL+'\" size=\"'+r+\",\"+E+'\" origin=\"0.5,0.5\" position=\"'+H+\",\"+B+'\" color2=\"'+L+'\" ';w()};d.added?j():J(d,\"add\",j);j=A}else j=k}else if(g.test(a)&&b.tagName!==\"IMG\")f=ra(a),h=[\"<\",c,' opacity=\"',f.get(\"a\"),'\"/>'],U(this.prepVML(h),null,null,b),j=\nf.get(\"rgb\");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type=\"solid\";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join(\"\");b?(a=a.replace(\"/>\",' xmlns=\"urn:schemas-microsoft-com:vml\" />'),a=a.indexOf('style=\"')===-1?a.replace(\"/>\",' style=\"display:inline-block;behavior:url(#default#VML);\" />'):a.replace('style=\"','style=\"display:inline-block;behavior:url(#default#VML);')):a=a.replace(\"<\",\"<hcv:\");return a},text:Ha.prototype.html,path:function(a){var b={coordsize:\"10 10\"};\nIa(a)?b.d=a:T(a)&&r(b,a);return this.createElement(\"shape\").attr(b)},circle:function(a,b,c){var d=this.symbol(\"circle\");if(T(a))c=a.r,b=a.y,a=a.x;d.isCircle=!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:\"highcharts-\"+a,\"class\":\"highcharts-\"+a});return this.createElement(Ea).attr(b)},image:function(a,b,c,d,e){var f=this.createElement(\"img\").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},rect:function(a,b,c,d,e,f){var g=this.symbol(\"rect\");g.r=\nT(a)?a.r:e;return g.attr(T(a)?a:g.crisp(f,a,b,s(c,0),s(d,0)))},invertChild:function(a,b){var c=b.style;K(a,{flip:\"x\",left:C(c.width)-1,top:C(c.height)-1,rotation:-90})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=V(f),i=ca(f),j=V(g),k=ca(g);if(g-f===0)return[\"x\"];f=[\"wa\",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push(\"e\",\"M\",a,b);f.push(\"at\",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,\"x\",\"e\");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);\ne&&e.isCircle&&(a-=c/2,b-=d/2);return[\"wa\",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,\"e\"]},rect:function(a,b,c,d,e){var f=a+c,g=b+d,h;!u(e)||!e.r?f=Ha.prototype.symbols.square.apply(0,arguments):(h=I(e.r,c,d),f=[\"M\",a+h,b,\"L\",f-h,b,\"wa\",f-2*h,b,f,b+2*h,f-h,b,f,b+h,\"L\",f,g-h,\"wa\",f-2*h,g-2*h,f,g,f,g-h,f-h,g,\"L\",a+h,g,\"wa\",a,g-2*h,a+2*h,g,a+h,g,a,g-h,\"L\",a,b+h,\"wa\",a,b,a+2*h,b+2*h,a,b+h,a+h,b,\"x\",\"e\"]);return f}}};Highcharts.VMLRenderer=F=function(){this.init.apply(this,arguments)};F.prototype=x(Ha.prototype,\nma);Va=F}var Tb;if($)Highcharts.CanVGRenderer=F=function(){za=\"http://www.w3.org/1999/xhtml\"},F.prototype.symbols={},Tb=function(){function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Vb(d,a);b.push(c)}}}(),Va=F;Ma.prototype={addLabel:function(){var a=this.axis,b=a.options,c=a.chart,d=a.horiz,e=a.categories,f=a.series[0]&&a.series[0].names,g=this.pos,h=b.labels,i=a.tickPositions,d=d&&e&&!h.step&&!h.staggerLines&&!h.rotation&&c.plotWidth/i.length||\n!d&&(c.margin[3]||c.chartWidth*0.33),j=g===i[0],k=g===i[i.length-1],l,f=e?o(e[g],f&&f[g],g):g,e=this.label,m=i.info;a.isDatetimeAxis&&m&&(l=b.dateTimeLabelFormats[m.higherRanks[g]||m.unitName]);this.isFirst=j;this.isLast=k;b=a.labelFormatter.call({axis:a,chart:c,isFirst:j,isLast:k,dateTimeLabelFormat:l,value:a.isLog?ia(fa(f)):f});g=d&&{width:s(1,t(d-2*(h.padding||10)))+\"px\"};g=r(g,h.style);if(u(e))e&&e.attr({text:b}).css(g);else{l={align:a.labelAlign};if(sa(h.rotation))l.rotation=h.rotation;if(d&&\nh.ellipsis)l._clipHeight=a.len/i.length;this.label=u(b)&&h.enabled?c.renderer.text(b,0,0,h.useHTML).attr(l).css(g).add(a.labelGroup):null}},getLabelSize:function(){var a=this.label,b=this.axis;return a?(this.labelBBox=a.getBBox())[b.horiz?\"height\":\"width\"]:0},getLabelSides:function(){var a=this.axis,b=this.labelBBox.width,a=b*{left:0,center:0.5,right:1}[a.labelAlign]-a.options.labels.x;return[-a,b-a]},handleOverflow:function(a,b){var c=!0,d=this.axis,e=d.chart,f=this.isFirst,g=this.isLast,h=b.x,i=\nd.reversed,j=d.tickPositions;if(f||g){var k=this.getLabelSides(),l=k[0],k=k[1],e=e.plotLeft,m=e+d.len,j=(d=d.ticks[j[a+(f?1:-1)]])&&d.label.xy&&d.label.xy.x+d.getLabelSides()[f?0:1];f&&!i||g&&i?h+l<e&&(h=e-l,d&&h+k>j&&(c=!1)):h+k>m&&(h=m-k,d&&h+l<j&&(c=!1));b.x=h}return c},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a?\ng-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,l=i.staggerLines,m=i.chart.renderer.fontMetrics(e.style.fontSize).b,p=e.rotation,a=a+e.x-(f&&d?f*j*(k?-1:1):0),b=b+e.y-(f&&!d?f*j*(k?1:-1):0);p&&i.side===2&&(b-=m-m*V(p*Ua));!u(e.y)&&!p&&(b+=m-c.getBBox().height/2);l&&(b+=g/(h||1)%l*(i.labelOffset/l));return{x:a,y:b}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine([\"M\",a,b,\"L\",\na+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,j=this.pos,k=e.labels,l=this.gridLine,m=h?h+\"Grid\":\"grid\",p=h?h+\"Tick\":\"tick\",q=e[m+\"LineWidth\"],n=e[m+\"LineColor\"],A=e[m+\"LineDashStyle\"],s=e[p+\"Length\"],m=e[p+\"Width\"]||0,u=e[p+\"Color\"],t=e[p+\"Position\"],p=this.mark,r=k.step,v=!0,x=d.tickmarkOffset,E=this.getPosition(g,j,x,b),H=E.x,E=E.y,B=g&&H===d.pos+d.len||!g&&E===d.pos?-1:1,C=d.staggerLines;this.isActive=!0;if(q){j=\nd.getPlotLinePath(j+x,q*B,b,!0);if(l===w){l={stroke:n,\"stroke-width\":q};if(A)l.dashstyle=A;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=q?f.path(j).attr(l).add(d.gridGroup):null}if(!b&&l&&j)l[this.isNew?\"attr\":\"animate\"]({d:j,opacity:c})}if(m&&s)t===\"inside\"&&(s=-s),d.opposite&&(s=-s),b=this.getMarkPath(H,E,s,m*B,g,f),p?p.animate({d:b,opacity:c}):this.mark=f.path(b).attr({stroke:u,\"stroke-width\":m,opacity:c}).add(d.axisGroup);if(i&&!isNaN(H))i.xy=E=this.getLabelPosition(H,E,i,g,k,x,a,r),this.isFirst&&\n!this.isLast&&!o(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!o(e.showLastLabel,1)?v=!1:!C&&g&&k.overflow===\"justify\"&&!this.handleOverflow(a,E)&&(v=!1),r&&a%r&&(v=!1),v&&!isNaN(E.y)?(E.opacity=c,i[this.isNew?\"attr\":\"animate\"](E),this.isNew=!1):i.attr(\"y\",-9999)},destroy:function(){Ka(this,this.axis)}};vb.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=(b.pointRange||0)/2,e=a.options,f=e.label,g=a.label,h=e.width,i=e.to,j=e.from,k=u(j)&&u(i),l=e.value,m=e.dashStyle,p=a.svgElem,q=\n[],n,A=e.color,L=e.zIndex,t=e.events,w=b.chart.renderer;b.isLog&&(j=na(j),i=na(i),l=na(l));if(h){if(q=b.getPlotLinePath(l,h),d={stroke:A,\"stroke-width\":h},m)d.dashstyle=m}else if(k){if(j=s(j,b.min-d),i=I(i,b.max+d),q=b.getPlotBandPath(j,i,e),d={fill:A},e.borderWidth)d.stroke=e.borderColor,d[\"stroke-width\"]=e.borderWidth}else return;if(u(L))d.zIndex=L;if(p)q?p.animate({d:q},null,p.onGetPath):(p.hide(),p.onGetPath=function(){p.show()});else if(q&&q.length&&(a.svgElem=p=w.path(q).attr(d).add(),t))for(n in e=\nfunction(b){p.on(b,function(c){t[b].apply(a,[c])})},t)e(n);if(f&&u(f.text)&&q&&q.length&&b.width>0&&b.height>0){f=x({align:c&&k&&\"center\",x:c?!k&&4:10,verticalAlign:!c&&k&&\"middle\",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g)a.label=g=w.text(f.text,0,0,f.useHTML).attr({align:f.textAlign||f.align,rotation:f.rotation,zIndex:L}).css(f.style).add();b=[q[1],q[4],o(q[6],q[1])];q=[q[2],q[5],o(q[7],q[2])];c=Ja(b);k=Ja(q);g.align(f,!1,{x:c,y:k,width:va(b)-c,height:va(q)-k});g.show()}else g&&g.hide();return a},\ndestroy:function(){ga(this.axis.plotLinesAndBands,this);delete this.axis;Ka(this)}};Mb.prototype={destroy:function(){Ka(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ca(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:\"hidden\"}):this.label=this.axis.chart.renderer.text(c,0,0,b.useHTML).css(b.style).attr({align:this.textAlign,rotation:b.rotation,visibility:\"hidden\"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,\ng=c.translate(this.percent?100:this.total,0,0,0,1),c=c.translate(0),c=N(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e.attr({visibility:this.options.crop===!1||d.isInsidePlot(f.x,f.y)?Z?\"inherit\":\"visible\":\"hidden\"})}};db.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:\"%H:%M:%S.%L\",second:\"%H:%M:%S\",minute:\"%H:%M\",hour:\"%H:%M\",day:\"%e. %b\",week:\"%e. %b\",\nmonth:\"%b '%y\",year:\"%Y\"},endOnTick:!1,gridLineColor:\"#C0C0C0\",labels:G,lineColor:\"#C0D0E0\",lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:\"#E0E0E0\",minorGridLineWidth:1,minorTickColor:\"#A0A0A0\",minorTickLength:2,minorTickPosition:\"outside\",startOfWeek:1,startOnTick:!1,tickColor:\"#C0D0E0\",tickLength:5,tickmarkPlacement:\"between\",tickPixelInterval:100,tickPosition:\"outside\",tickWidth:1,title:{align:\"middle\",style:{color:\"#4d759e\",fontWeight:\"bold\"}},type:\"linear\"},defaultYAxisOptions:{endOnTick:!0,\ngridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:\"Values\"},stackLabels:{enabled:!1,formatter:function(){return Aa(this.total,-1)},style:G.style}},defaultLeftAxisOptions:{labels:{x:-8,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:8,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:14},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-5},\ntitle:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.xOrY=(this.isXAxis=c)?\"x\":\"y\";this.opposite=b.opposite;this.side=this.horiz?this.opposite?0:2:this.opposite?1:3;this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e===\"category\";this.isLog=e===\"logarithmic\";this.isDatetimeAxis=\ne===\"datetime\";this.isLinked=u(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement===\"between\"?0.5:0;this.ticks={};this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.stackExtremes={};this.min=this.max=null;var f,d=this.options.events;qa(this,a.axes)===-1&&(a.axes.push(this),a[c?\"xAxis\":\"yAxis\"].push(this));this.series=this.series||\n[];if(a.inverted&&c&&this.reversed===w)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)J(this,f,d[f]);if(this.isLog)this.val2lin=na,this.lin2val=fa},setOptions:function(a){this.options=x(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],x(M[this.isXAxis?\"xAxis\":\"yAxis\"],a))},update:function(a,b){var c=this.chart,a=c.options[this.xOrY+\n\"Axis\"][this.options.index]=x(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.userMin=this.userMax=w;this.init(c,r(a,{events:w}));c.isDirtyBox=!0;o(b,!0)&&c.redraw()},remove:function(a){var b=this.chart,c=this.xOrY+\"Axis\";n(this.series,function(a){a.remove(!1)});ga(b.axes,this);ga(b[c],this);b.options[c].splice(this.options.index,1);n(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;o(a,!0)&&b.redraw()},defaultLabelFormatter:function(){var a=this.axis,b=this.value,\nc=a.categories,d=this.dateTimeLabelFormat,e=M.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ca(h,this);else if(c)g=b;else if(d)g=Xa(d,b);else if(f&&a>=1E3)for(;f--&&g===w;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Aa(b/c,-1)+e[f]);g===w&&(g=b>=1E3?Aa(b,0):Aa(b,-1));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.stackExtremes={};a.buildStacks();n(a.series,function(c){if(c.visible||!b.options.chart.ignoreHiddenSeries){var d;\nd=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=I(o(a.dataMin,d[0]),Ja(d)),a.dataMax=s(o(a.dataMax,d[0]),va(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(u(c)&&u(e))a.dataMin=I(o(a.dataMin,c),c),a.dataMax=s(o(a.dataMax,e),e);if(u(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMax<d)a.dataMax=d,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e,f){var g=this.len,h=1,i=0,j=d?this.oldTransA:this.transA,\nd=d?this.oldMin:this.min,k=this.minPixelPadding,e=(this.options.ordinal||this.isLog&&e)&&this.lin2val;if(!j)j=this.transA;c&&(h*=-1,i=g);this.reversed&&(h*=-1,i-=h*g);b?(a=a*h+i,a-=k,a=a/j+d,e&&(a=this.lin2val(a))):(e&&(a=this.val2lin(a)),f===\"between\"&&(f=0.5),a=h*(a-d)*j+i+h*k+(sa(f)?j*f*this.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,\nb,c,d){var e=this.chart,f=this.left,g=this.top,h,i,j,a=this.translate(a,null,null,c),k=c&&e.oldChartHeight||e.chartHeight,l=c&&e.oldChartWidth||e.chartWidth,m;h=this.transB;c=i=t(a+h);h=j=t(k-a-h);if(isNaN(a))m=!0;else if(this.horiz){if(h=g,j=k-this.bottom,c<f||c>f+this.width)m=!0}else if(c=f,i=l-this.right,h<g||h>g+this.height)m=!0;return m&&!d?null:e.renderer.crispLine([\"M\",c,h,\"L\",i,j],b||0)},getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b),d=this.getPlotLinePath(a);d&&c?d.push(c[4],\nc[5],c[1],c[2]):d=null;return d},getLinearTickPositions:function(a,b,c){for(var d,b=ia(P(b/a)*a),c=ia(xa(c/a)*a),e=[];b<=c;){e.push(b);b=ia(b+a);if(b===d)break;d=b}return e},getLogTickPositions:function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=t(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=P(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=na(fa(f)*e[h]),j>b&&(!d||\nk<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=fa(b),c=fa(c),a=e[d?\"minorTickInterval\":\"tickInterval\"],a=o(a===\"auto\"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=ob(a,null,nb(a)),g=Na(this.getLinearTickPositions(a,b,c),na),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a<e;a++)d=d.concat(this.getLogTickPositions(c,\nb[a-1],b[a],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval===\"auto\")d=d.concat(Eb(Cb(c),this.min,this.max,a.startOfWeek)),d[0]<this.min&&d.shift();else for(b=this.min+(b[0]-this.min)%c;b<=this.max;b+=c)d.push(b);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===w&&!this.isLog)u(a.min)||u(a.max)?this.minRange=null:(n(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-\n1;g>0;g--)if(h=i[g]-i[g-1],f===w||h<f)f=h}),this.minRange=I(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=(k-c+b)/2;d=[b-d,o(a.min,b-d)];if(e)d[2]=this.dataMin;b=va(d);c=[b+k,o(a.max,b+k)];if(e)c[2]=this.dataMax;c=Ja(c);c-b<k&&(d[0]=c-k,d[1]=o(a.min,c-k),b=va(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this.max-this.min,c=0,d,e=0,f=0,g=this.linkedParent,h=this.transA;if(this.isXAxis)g?(e=g.minPointOffset,f=g.pointRangePadding):n(this.series,function(a){var g=\na.pointRange,h=a.options.pointPlacement,l=a.closestPointRange;g>b&&(g=0);c=s(c,g);e=s(e,ea(h)?0:g/2);f=s(f,h===\"on\"?0:g);!a.noSharedTooltip&&u(l)&&(d=u(d)?I(d,l):l)}),g=this.ordinalSlope&&d?this.ordinalSlope/d:1,this.minPointOffset=e*=g,this.pointRangePadding=f*=g,this.pointRange=I(c,b),this.closestPointRange=d;if(a)this.oldTransA=h;this.translationSlope=this.transA=h=this.len/(b+f||1);this.transB=this.horiz?this.left:this.bottom;this.minPixelPadding=h*e},setTickPositions:function(a){var b=this,c=\nb.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding,k=d.minPadding,l=d.tickInterval,m=d.minTickInterval,p=d.tickPixelInterval,q,ba=b.categories;h?(b.linkedParent=c[g?\"xAxis\":\"yAxis\"][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=o(c.min,c.dataMin),b.max=o(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ka(11,1)):(b.min=o(b.userMin,d.min,b.dataMin),b.max=o(b.userMax,d.max,b.dataMax));if(e)!a&&I(b.min,o(b.dataMin,b.min))<=0&&\nka(10,1),b.min=ia(na(b.min)),b.max=ia(na(b.max));if(b.range&&(b.userMin=b.min=s(b.min,b.max-b.range),b.userMax=b.max,a))b.range=null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!ba&&!b.usePercentage&&!h&&u(b.min)&&u(b.max)&&(c=b.max-b.min)){if(!u(d.min)&&!u(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!u(d.max)&&!u(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&p===b.linkedParent.options.tickPixelInterval?\nb.tickInterval=b.linkedParent.tickInterval:(b.tickInterval=o(l,ba?1:(b.max-b.min)*p/s(b.len,p)),!u(l)&&b.len<p&&!this.isRadial&&(q=!0,b.tickInterval/=4));g&&!a&&n(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange)b.tickInterval=s(b.pointRange,b.tickInterval);if(!l&&b.tickInterval<m)b.tickInterval=\nm;if(!f&&!e&&!l)b.tickInterval=ob(b.tickInterval,null,nb(b.tickInterval),d);b.minorTickInterval=d.minorTickInterval===\"auto\"&&b.tickInterval?b.tickInterval/5:d.minorTickInterval;b.tickPositions=a=d.tickPositions?[].concat(d.tickPositions):i&&i.apply(b,[b.min,b.max]);if(!a)!b.ordinalPositions&&(b.max-b.min)/b.tickInterval>s(2*b.len,200)&&ka(19,!0),a=f?(b.getNonLinearTimeTicks||Eb)(Cb(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange,!0):e?b.getLogTickPositions(b.tickInterval,\nb.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),q&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h<f&&a.pop(),a.length===1&&(b.min-=0.001,b.max+=0.001)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.xOrY,this.pos,this.len].join(\"-\");if(!this.isLinked&&!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==\n!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e<a){for(;b.length<a;)b.push(ia(b[b.length-1]+this.tickInterval));this.transA*=(e-1)/(a-1);this.max=b[b.length-1]}if(u(d)&&a!==d)this.isDirty=!0}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=\nthis.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!==this.oldAxisLength;n(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax){if(!this.isXAxis)for(b in a)delete a[b];this.forceRedraw=!1;this.getSeriesExtremes();this.setTickPositions();this.oldUserMin=this.userMin;this.oldUserMax=this.userMax;if(!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==\nthis.oldMax}else if(!this.isXAxis){if(this.oldStacks)a=this.stacks=this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}this.setMaxTicks()},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=o(c,!0),e=r(e,{min:a,max:b});z(f,\"setExtremes\",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;f.isDirtyExtremes=!0;c&&g.redraw(d)})},zoom:function(a,b){this.allowZoomOutside||(u(this.dataMin)&&a<=this.dataMin&&(a=w),u(this.dataMax)&&b>=this.dataMax&&(b=w));this.displayBtn=a!==w||b!==w;this.setExtremes(a,\nb,!1,w,{trigger:\"zoom\"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=b.offsetRight||0,e=this.horiz,f,g;this.left=g=o(b.left,a.plotLeft+c);this.top=f=o(b.top,a.plotTop);this.width=c=o(b.width,a.plotWidth-c+d);this.height=b=o(b.height,a.plotHeight);this.bottom=a.chartHeight-b-f;this.right=a.chartWidth-c-g;this.len=s(e?c:b,0);this.pos=e?g:f},getExtremes:function(){var a=this.isLog;return{min:a?ia(fa(this.min)):this.min,max:a?ia(fa(this.max)):this.max,dataMin:this.dataMin,\ndataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?fa(this.min):this.min,b=b?fa(this.max):this.max;c>a||a===null?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},addPlotBand:function(a){this.addPlotBandOrLine(a,\"plotBands\")},addPlotLine:function(a){this.addPlotBandOrLine(a,\"plotLines\")},addPlotBandOrLine:function(a,b){var c=(new vb(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]||[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},\nautoLabelAlign:function(a){a=(o(a,0)-this.side*90+720)%360;return a>15&&a<165?\"right\":a>195&&a<345?\"left\":\"center\"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,m=0,p=d.title,q=d.labels,ba=0,A=b.axisOffset,L=b.clipOffset,t=[-1,1,1,-1][h],r,v=1,x=o(q.maxStaggerLines,5),la,E,H,B;a.hasData=j=a.hasVisibleSeries||u(a.min)&&u(a.max)&&!!e;a.showAxis=b=j||o(d.showEmpty,!0);a.staggerLines=a.horiz&&q.staggerLines;\nif(!a.axisGroup)a.gridGroup=c.g(\"grid\").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g(\"axis\").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g(\"axis-labels\").attr({zIndex:q.zIndex||7}).add();if(j||a.isLinked){a.labelAlign=o(q.align||a.autoLabelAlign(q.rotation));n(e,function(b){f[b]?f[b].addLabel():f[b]=new Ma(a,b)});if(a.horiz&&!a.staggerLines&&x&&!q.rotation){for(r=a.reversed?[].concat(e).reverse():e;v<x;){j=[];la=!1;for(q=0;q<r.length;q++)E=r[q],H=(H=f[E].label&&f[E].label.getBBox())?H.width:\n0,B=q%v,H&&(E=a.translate(E),j[B]!==w&&E<j[B]&&(la=!0),j[B]=E+H);if(la)v++;else break}if(v>1)a.staggerLines=v}n(e,function(b){if(h===0||h===2||{1:\"left\",3:\"right\"}[h]===a.labelAlign)ba=s(f[b].getLabelSize(),ba)});if(a.staggerLines)ba*=a.staggerLines,a.labelOffset=ba}else for(r in f)f[r].destroy(),delete f[r];if(p&&p.text&&p.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(p.text,0,0,p.useHTML).attr({zIndex:7,rotation:p.rotation||0,align:p.textAlign||{low:\"left\",middle:\"center\",high:\"right\"}[p.align]}).css(p.style).add(a.axisGroup),\na.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?\"height\":\"width\"],m=o(p.margin,g?5:10),l=p.offset;a.axisTitle[b?\"show\":\"hide\"]()}a.offset=t*o(d.offset,A[h]);a.axisTitleMargin=o(l,ba+m+(h!==2&&ba&&t*d.labels[g?\"y\":\"x\"]));A[h]=s(A[h],a.axisTitleMargin+k+t*a.offset);L[i]=s(L[i],P(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine([\"M\",\ne?this.left:f,e?d:this.top,\"L\",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=C(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,\nb=a.chart,c=b.renderer,d=a.options,e=a.isLog,f=a.isLinked,g=a.tickPositions,h=a.axisTitle,i=a.stacks,j=a.ticks,k=a.minorTicks,l=a.alternateBands,m=d.stackLabels,p=d.alternateGridColor,q=a.tickmarkOffset,o=d.lineWidth,A,s=b.hasRendered&&u(a.oldMin)&&!isNaN(a.oldMin);A=a.hasData;var t=a.showAxis,r,v;n([j,k,l],function(a){for(var b in a)a[b].isActive=!1});if(A||f)if(a.minorTickInterval&&!a.categories&&n(a.getMinorTickPositions(),function(b){k[b]||(k[b]=new Ma(a,b,\"minor\"));s&&k[b].isNew&&k[b].render(null,\n!0);k[b].render(null,!1,1)}),g.length&&(n(g.slice(1).concat([g[0]]),function(b,c){c=c===g.length-1?0:c+1;if(!f||b>=a.min&&b<=a.max)j[b]||(j[b]=new Ma(a,b)),s&&j[b].isNew&&j[b].render(c,!0),j[b].render(c,!1,1)}),q&&a.min===0&&(j[-1]||(j[-1]=new Ma(a,-1,null,!0)),j[-1].render(-1))),p&&n(g,function(b,c){if(c%2===0&&b<a.max)l[b]||(l[b]=new vb(a)),r=b+q,v=g[c+1]!==w?g[c+1]+q:a.max,l[b].options={from:e?fa(r):r,to:e?fa(v):v,color:p},l[b].render(),l[b].isActive=!0}),!a._addedPlotLB)n((d.plotLines||[]).concat(d.plotBands||\n[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0;n([j,k,l],function(a){var c,d,e=[],f=Fa?Fa.duration||500:0,g=function(){for(d=e.length;d--;)a[e[d]]&&!a[e[d]].isActive&&(a[e[d]].destroy(),delete a[e[d]])};for(c in a)if(!a[c].isActive)a[c].render(c,!1,0),a[c].isActive=!1,e.push(c);a===l||!b.hasRendered||!f?g():f&&setTimeout(g,f)});if(o)A=a.getLinePath(o),a.axisLine?a.axisLine.animate({d:A}):a.axisLine=c.path(A).attr({stroke:d.lineColor,\"stroke-width\":o,zIndex:7}).add(a.axisGroup),a.axisLine[t?\n\"show\":\"hide\"]();if(h&&t)h[h.isNew?\"attr\":\"animate\"](a.getTitlePosition()),h.isNew=!1;if(m&&m.enabled){var x,la,d=a.stackTotalGroup;if(!d)a.stackTotalGroup=d=c.g(\"stack-labels\").attr({visibility:\"visible\",zIndex:6}).add();d.translate(b.plotLeft,b.plotTop);for(x in i)for(la in c=i[x],c)c[la].render(d)}a.isDirty=!1},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();n([c.plotLines||[],d.plotLines||[],c.plotBands||\n[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id===a&&ga(b,b[e])})},setTitle:function(a,b){this.update({title:a},b)},redraw:function(){var a=this.chart.pointer;a.reset&&a.reset(!0);this.render();n(this.plotLinesAndBands,function(a){a.render()});n(this.series,function(a){a.isDirty=!0})},buildStacks:function(){var a=this.series,b=a.length;if(!this.isXAxis){for(;b--;)a[b].setStackedPoints();if(this.usePercentage)for(b=0;b<a.length;b++)a[b].setPercentStacks()}},setCategories:function(a,b){this.update({categories:a},\nb)},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||aa(b);for(d in c)Ka(c[d]),c[d]=null;n([b.ticks,b.minorTicks,b.alternateBands],function(a){Ka(a)});for(a=e.length;a--;)e[a].destroy();n(\"stackTotalGroup,axisLine,axisGroup,gridGroup,labelGroup,axisTitle\".split(\",\"),function(a){b[a]&&(b[a]=b[a].destroy())})}};wb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=C(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=\na.renderer.label(\"\",0,0,b.shape,null,null,b.useHTML,null,\"tooltip\").attr({padding:e,fill:b.backgroundColor,\"stroke-width\":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-999});$||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){n(this.crosshairs,function(a){a&&a.destroy()});if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden;\nr(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:g?(2*f.anchorX+c)/3:c,anchorY:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(N(a-f.x)>1||N(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a=this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},o(this.options.hideDelay,500)),b&&n(b,function(a){a.setState()}),this.chart.hoverPoints=\nnull},hideCrosshairs:function(){n(this.crosshairs,function(a){a&&a.hide()})},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=ja(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===w&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(n(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:\nh]);return Na(c,t)},getPosition:function(a,b,c){var d=this.chart,e=d.plotLeft,f=d.plotTop,g=d.plotWidth,h=d.plotHeight,i=o(this.options.distance,12),j=c.plotX,c=c.plotY,d=j+e+(d.inverted?i:-a-i),k=c-b+f+15,l;d<7&&(d=e+s(j,0)+i);d+a>e+g&&(d-=d+a-(e+g),k=c-b+f-i,l=!0);k<f+5&&(k=f+5,l&&c>=k&&c<=k+b&&(k=c+f+i));k+b>f+h&&(k=s(f,f+h-b-i));return{x:d,y:k}},defaultFormatter:function(a){var b=this.points||ja(this),c=b[0].series,d;d=[c.tooltipHeaderFormatter(b[0])];n(b,function(a){c=a.series;d.push(c.tooltipFormatter&&\nc.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))});d.push(a.options.footerFormat||\"\");return d.join(\"\")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=e.crosshairs,m=this.shared;clearTimeout(this.hideTimer);this.followPointer=ja(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];m&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&n(h,\nfunction(a){a.setState()}),n(a,function(a){a.setState(\"hover\");j.push(a.getLabelConfig())}),h={x:a[0].category,y:a[0].y},h.points=j,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;i===!1?this.hide():(this.isHidden&&(Wa(d),d.attr(\"opacity\",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||\"#606060\",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g}),this.isHidden=!1);if(l){l=ja(l);for(d=l.length;d--;)if(m=a.series,e=m[d?\"yAxis\":\"xAxis\"],l[d]&&e)if(h=d?o(a.stackY,a.y):a.x,\ne.isLog&&(h=na(h)),d===1&&m.modifyValue&&(h=m.modifyValue(h)),e=e.getPlotLinePath(h,1),this.crosshairs[d])this.crosshairs[d].attr({d:e,visibility:\"visible\"});else{h={\"stroke-width\":l[d].width||1,stroke:l[d].color||\"#C0C0C0\",zIndex:l[d].zIndex||2};if(l[d].dashStyle)h.dashstyle=l[d].dashStyle;this.crosshairs[d]=c.renderer.path(e).attr(h).add()}}z(c,\"tooltipRefresh\",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||\nthis.getPosition).call(this,c.width,c.height,a);this.move(t(c.x),t(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)}};xb.prototype={init:function(a,b){var c=b.chart,d=c.events,e=$?\"\":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(b.tooltip.enabled)a.tooltip=new wb(a,b.tooltip);this.setDOMEvents()},normalize:function(a,b){var c,\nd,a=a||O.event;if(!a.target)a.target=a.srcElement;a=Xb(a);d=a.touches?a.touches.item(0):a;if(!b)this.chartPosition=b=Wb(this.chart.container);d.pageX===w?(c=s(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return r(a,{chartX:t(c),chartY:t(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};n(this.chart.axes,function(c){b[c.isXAxis?\"xAxis\":\"yAxis\"].push({axis:c,value:c.toValue(a[c.horiz?\"chartX\":\"chartY\"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?\nb.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e,f=b.hoverPoint,g=b.hoverSeries,h,i,j=b.chartWidth,k=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!g||!g.noSharedTooltip)){e=[];h=c.length;for(i=0;i<h;i++)if(c[i].visible&&c[i].options.enableMouseTracking!==!1&&!c[i].noSharedTooltip&&c[i].tooltipPoints.length&&(b=c[i].tooltipPoints[k])&&b.series)b._dist=N(k-b.clientX),j=I(j,b._dist),e.push(b);for(h=e.length;h--;)e[h]._dist>\nj&&e.splice(h,1);if(e.length&&e[0].clientX!==this.hoverX)d.refresh(e,a),this.hoverX=e[0].clientX}if(g&&g.tracker){if((b=g.tooltipPoints[k])&&b!==f)b.onMouseOver(a)}else d&&d.followPointer&&!d.isHidden&&(a=d.getAnchor([{}],a),d.updatePosition({plotX:a[0],plotY:a[1]}))},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,b=e&&e.shared?b.hoverPoints:d;(a=a&&e&&b)&&ja(b)[0].plotX===w&&(a=!1);if(a)e.refresh(b);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&(e.hide(),e.hideCrosshairs());\nthis.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;n(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},pinchTranslateDirection:function(a,b,c,d,e,f,g){var h=this.chart,i=a?\"x\":\"y\",j=a?\"X\":\"Y\",k=\"chart\"+j,l=a?\"width\":\"height\",m=h[\"plot\"+(a?\"Left\":\"Top\")],p,q,o=1,n=h.inverted,s=h.bounds[a?\"h\":\"v\"],\nt=b.length===1,u=b[0][k],r=c[0][k],w=!t&&b[1][k],v=!t&&c[1][k],x,c=function(){!t&&N(u-w)>20&&(o=N(r-v)/N(u-w));q=(m-r)/o+u;p=h[\"plot\"+(a?\"Width\":\"Height\")]/o};c();b=q;b<s.min?(b=s.min,x=!0):b+p>s.max&&(b=s.max-p,x=!0);x?(r-=0.8*(r-g[i][0]),t||(v-=0.8*(v-g[i][1])),c()):g[i]=[r,v];n||(f[i]=q-m,f[l]=p);f=n?1/o:o;e[l]=p;e[i]=b;d[n?a?\"scaleY\":\"scaleX\":\"scale\"+j]=o;d[\"translate\"+j]=f*m+(r-f*u)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,e=c.tooltip&&c.tooltip.options.followTouchMove,f=a.touches,\ng=f.length,h=b.lastValidTouch,i=b.zoomHor||b.pinchHor,j=b.zoomVert||b.pinchVert,k=i||j,l=b.selectionMarker,m={},p=g===1&&(b.inClass(a.target,\"highcharts-tracker\")&&c.runTrackerClick||c.runChartClick),q={};(k||e)&&!p&&a.preventDefault();Na(f,function(a){return b.normalize(a)});if(a.type===\"touchstart\")n(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],n(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?\"h\":\"v\"],\nd=a.minPixelPadding,e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=I(e,f),e=s(e,f);b.min=I(a.pos,g-d);b.max=s(a.pos+a.len,e+d)}});else if(d.length){if(!l)b.selectionMarker=l=r({destroy:pa},c.plotBox);i&&b.pinchTranslateDirection(!0,d,f,m,l,q,h);j&&b.pinchTranslateDirection(!1,d,f,m,l,q,h);b.hasPinched=k;b.scaleGroups(m,q);!k&&e&&g===1&&this.runPointActions(b.normalize(a))}},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=\nthis.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,m=this.mouseDownX,p=this.mouseDownY;d<h?d=h:d>h+j&&(d=h+j);e<i?e=i:e>i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(m-d,2)+Math.pow(p-e,2));if(this.hasDragged>10){l=b.isInsidePlot(m-h,p-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?\n1:k,0).attr({fill:c.selectionMarkerFill||\"rgba(69,114,167,0.25)\",zIndex:7}).add();this.selectionMarker&&f&&(d-=m,this.selectionMarker.attr({width:N(d),x:(d>0?0:d)+m}));this.selectionMarker&&g&&(d=e-p,this.selectionMarker.attr({height:N(d),y:(d>0?0:d)+p}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},e=this.selectionMarker,f=e.x,g=e.y,h;if(this.hasDragged||\nc)n(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?f:g),b=a.toValue(b?f+e.width:g+e.height);!isNaN(c)&&!isNaN(b)&&(d[a.xOrY+\"Axis\"].push({axis:a,min:I(c,b),max:s(c,b)}),h=!0)}}),h&&z(b,\"selection\",d,function(a){b.zoom(r(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)K(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=\nthis.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){this.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,\"highcharts-tracker\")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){this.reset();this.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart,a=this.normalize(a);a.returnValue=\n!1;b.mouseIsDown===\"mousedown\"&&this.drag(a);(this.inClass(a.target,\"highcharts-tracker\")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=v(a,\"class\"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf(\"highcharts-container\")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries;if(b&&!b.options.stickyTracking&&!this.inClass(a.toElement||a.relatedTarget,\"highcharts-tooltip\"))b.onMouseOut()},\nonContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,f=b.inverted,g,h,i,a=this.normalize(a);a.cancelBubble=!0;if(!b.cancelClick)c&&this.inClass(a.target,\"highcharts-tracker\")?(g=this.chartPosition,h=c.plotX,i=c.plotY,r(c,{pageX:g.left+d+(f?b.plotWidth-i:h),pageY:g.top+e+(f?b.plotHeight-h:i)}),z(c.series,\"click\",r(a,{point:c})),b.hoverPoint&&c.firePointEvent(\"click\",a)):(r(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&z(b,\"click\",a))},onContainerTouchStart:function(a){var b=\nthis.chart;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){this.drop(a)},setDOMEvents:function(){var a=this,b=a.chart.container,c;this._events=c=[[b,\"onmousedown\",\"onContainerMouseDown\"],[b,\"onmousemove\",\"onContainerMouseMove\"],[b,\"onclick\",\n\"onContainerClick\"],[b,\"mouseleave\",\"onContainerMouseLeave\"],[y,\"mousemove\",\"onDocumentMouseMove\"],[y,\"mouseup\",\"onDocumentMouseUp\"]];ib&&c.push([b,\"ontouchstart\",\"onContainerTouchStart\"],[b,\"ontouchmove\",\"onContainerTouchMove\"],[y,\"touchend\",\"onDocumentTouchEnd\"]);n(c,function(b){a[\"_\"+b[2]]=function(c){a[b[2]](c)};b[1].indexOf(\"on\")===0?b[0][b[1]]=a[\"_\"+b[2]]:J(b[0],b[1],a[\"_\"+b[2]])})},destroy:function(){var a=this;n(a._events,function(b){b[1].indexOf(\"on\")===0?b[0][b[1]]=null:aa(b[0],b[1],a[\"_\"+\nb[2]])});delete a._events;clearInterval(a.tooltipTimeout)}};eb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=o(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=C(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=x(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY=e-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.render(),J(c.chart,\"endResize\",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,\nd=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.color:g,g=a.options&&a.options.marker,i={stroke:h,fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in g=a.convertAttribs(g),g)d=g[j],d!==w&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=\ne,f.y=d},destroyItem:function(a){var b=a.checkbox;n([\"legendItem\",\"legendLine\",\"legendSymbol\",\"legendGroup\"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Ta(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,n(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,K(f,{left:b.translateX+e.legendItemWidth+f.x-\n20+\"px\",top:g+\"px\",display:g>c-6&&g<c+d-6?\"\":S}))})},renderTitle:function(){var a=this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,\"legend-title\").attr({zIndex:1}).css(b.style).add(this.group);a=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},renderItem:function(a){var B;var b=this,c=b.chart,d=c.renderer,e=b.options,f=e.layout===\"horizontal\",\ng=e.symbolWidth,h=e.symbolPadding,i=b.itemStyle,j=b.itemHiddenStyle,k=b.padding,l=f?o(e.itemDistance,8):0,m=!e.rtl,p=e.width,q=e.itemMarginBottom||0,n=b.itemMarginTop,A=b.initialItemX,t=a.legendItem,u=a.series||a,r=u.options,w=r.showCheckbox,v=e.useHTML;if(!t&&(a.legendGroup=d.g(\"legend-item\").attr({zIndex:1}).add(b.scrollGroup),u.drawLegendSymbol(b,a),a.legendItem=t=d.text(e.labelFormat?Ca(e.labelFormat,a):e.labelFormatter.call(a),m?g+h:-h,b.baseline,v).css(x(a.visible?i:j)).attr({align:m?\"left\":\n\"right\",zIndex:2}).add(a.legendGroup),(v?t:a.legendGroup).on(\"mouseover\",function(){a.setState(\"hover\");t.css(b.options.itemHoverStyle)}).on(\"mouseout\",function(){t.css(a.visible?i:j);a.setState()}).on(\"click\",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent(\"legendItemClick\",b,c):z(a,\"legendItemClick\",b,c)}),b.colorizeItem(a,a.visible),r&&w))a.checkbox=U(\"input\",{type:\"checkbox\",checked:a.selected,defaultChecked:a.selected},e.itemCheckboxStyle,c.container),\nJ(a.checkbox,\"click\",function(b){z(a,\"checkboxClick\",{checked:b.target.checked},function(){a.select()})});d=t.getBBox();B=a.legendItemWidth=e.itemWidth||g+h+d.width+l+(w?20:0),e=B;b.itemHeight=g=d.height;if(f&&b.itemX-A+e>(p||c.chartWidth-2*k-A))b.itemX=A,b.itemY+=n+b.lastLineHeight+q,b.lastLineHeight=0;b.maxItemWidth=s(b.maxItemWidth,e);b.lastItemY=n+b.itemY+q;b.lastLineHeight=s(g,b.lastLineHeight);a._legendItemPos=[b.itemX,b.itemY];f?b.itemX+=e:(b.itemY+=n+g+q,b.lastLineHeight=g);b.offsetWidth=\np||s((f?b.itemX-A-l:e)+k,b.offsetWidth)},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,m=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g(\"legend\").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=[];n(b.series,function(a){var b=a.options;b.showInLegend&&!u(b.linkedTo)&&(e=e.concat(a.legendItems||\n(b.legendType===\"point\"?a.data:a)))});Kb(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;n(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||m){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?\"attr\":\"animate\"](i.crisp(null,null,null,g,h)),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,\n\"stroke-width\":l||0,fill:m||S}).add(d).shadow(j.shadow),i.isNew=!0;i[f?\"show\":\"hide\"]()}a.legendWidth=g;a.legendHeight=h;n(e,function(b){a.positionItem(b)});f&&d.align(r({width:g,height:h},j),!0,\"spacingBox\");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign===\"top\"?-f:f)-this.padding,g=e.maxHeight,h=this.clipRect,i=e.navigation,j=o(i.animation,!0),k=i.arrowSize||12,l=this.nav;e.layout===\n\"horizontal\"&&(f/=2);g&&(f=I(f,g));if(a>f&&!e.useHTML){this.clipHeight=c=f-20-this.titleHeight;this.pageCount=xa(a/c);this.currentPage=o(this.currentPage,1);this.fullHeight=a;if(!h)h=b.clipRect=d.clipRect(0,0,9999,0),b.contentGroup.clip(h);h.attr({height:c});if(!l)this.nav=l=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol(\"triangle\",0,0,k,k).on(\"click\",function(){b.scroll(-1,j)}).add(l),this.pager=d.text(\"\",15,10).css(i.style).add(l),this.down=d.symbol(\"triangle-down\",0,0,k,k).on(\"click\",\nfunction(){b.scroll(1,j)}).add(l);b.scroll(0);a=f}else if(l)h.attr({height:c.chartHeight}),l.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pageCount,d=this.currentPage+a,e=this.clipHeight,f=this.options.navigation,g=f.activeColor,h=f.inactiveColor,f=this.pager,i=this.padding;d>c&&(d=c);if(d>0)b!==w&&La(b,this.chart),this.nav.attr({translateX:i,translateY:e+7+this.titleHeight,visibility:\"visible\"}),this.up.attr({fill:d===1?h:g}).css({cursor:d===\n1?\"default\":\"pointer\"}),f.attr({text:d+\"/\"+this.pageCount}),this.down.attr({x:18+this.pager.getBBox().width,fill:d===c?h:g}).css({cursor:d===c?\"default\":\"pointer\"}),e=-I(e*(d-1),this.fullHeight-e+i)+1,this.scrollGroup.animate({translateY:e}),f.attr({text:d+\"/\"+c}),this.currentPage=d,this.positionCheckboxes(e)}};/Trident.*?11\\.0/.test(oa)&&mb(eb.prototype,\"positionItem\",function(a,b){var c=this;setTimeout(function(){a.call(c,b)})});yb.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=\nx(M,a);c.series=a.series=d;d=c.chart;this.margin=this.splashArray(\"margin\",d);this.spacing=this.splashArray(\"spacing\",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=Ga.length;Ga.push(f);d.reflow!==!1&&J(f,\"load\",function(){f.initReflow()});if(e)for(g in e)J(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=$?!1:o(d.animation,!0);f.pointCount=0;f.counters=new Jb;f.firstRender()},\ninitSeries:function(a){var b=this.options.chart;(b=W[a.type||b.type||b.defaultSeriesType])||ka(17,!0);b=new b;b.init(this,a);return b},addSeries:function(a,b,c){var d,e=this;a&&(b=o(b,!0),z(e,\"addSeries\",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?\"xAxis\":\"yAxis\",f=this.options;new db(this,x(a,{index:this[e].length,isX:b}));f[e]=ja(f[e]||{});f[e].push(a);o(c,!0)&&this.redraw(d)},isInsidePlot:function(a,b,\nc){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&n(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,m=l.isHidden(),p=[];La(a,this);m&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&&(g=!0,a.isDirty)){h=!0;\nbreak}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;n(c,function(a){a.isDirty&&a.options.legendType===\"point\"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,n(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();n(b,function(a){a.isDirty&&(i=!0)});n(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,p.push(function(){z(a,\"afterSetExtremes\",r(a.eventArgs,\na.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();n(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset&&d.reset(!0);l.draw();z(this,\"redraw\");m&&this.cloneRenderTo(!0);n(p,function(a){a.call()})},showLoading:function(a){var b=this.options,c=this.loadingDiv,d=b.loading;if(!c)this.loadingDiv=c=U(Ea,{className:\"highcharts-loading\"},r(d.style,{zIndex:10,display:S}),this.container),this.loadingSpan=U(\"span\",null,d.labelStyle,c);this.loadingSpan.innerHTML=\na||b.lang.loading;if(!this.loadingShown)K(c,{opacity:0,display:\"\",left:this.plotLeft+\"px\",top:this.plotTop+\"px\",width:this.plotWidth+\"px\",height:this.plotHeight+\"px\"}),Bb(c,{opacity:d.style.opacity},{duration:d.showDuration||0}),this.loadingShown=!0},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&Bb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){K(b,{display:S})}});this.loadingShown=!1},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===\na)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=ja(b.xAxis||{}),b=b.yAxis=ja(b.yAxis||{});n(c,function(a,b){a.index=b;a.isX=!0});n(b,function(a,b){a.index=b});c=c.concat(b);n(c,function(b){new db(a,b)});a.adjustTickAmounts()},getSelectedPoints:function(){var a=[];n(this.series,function(b){a=a.concat(ub(b.points||[],\nfunction(a){return a.selected}))});return a},getSelectedSeries:function(){return ub(this.series,function(a){return a.selected})},getStacks:function(){var a=this;n(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks=a.stacks});n(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===!1))b.stackKey=b.type+o(b.options.stack,\"\")})},showResetZoom:function(){var a=this,b=M.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo===\n\"chart\"?null:\"plotBox\";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this;z(a,\"selection\",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?n(this.axes,function(a){b=a.zoom()}):n(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?\"zoomX\":\"zoomY\"]||c[h?\"pinchX\":\"pinchY\"])b=\ne.zoom(a.min,a.max),e.displayBtn&&(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom();else if(!d&&T(e))this.resetZoomButton=e.destroy();b&&this.redraw(o(this.options.chart.animation,a&&a.animation,this.pointCount<100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&n(d,function(a){a.setState()});n(b===\"xy\"?[1,0]:[1],function(b){var d=a[b?\"chartX\":\"chartY\"],h=c[b?\"xAxis\":\"yAxis\"][0],i=c[b?\"mouseDownX\":\"mouseDownY\"],j=(h.pointRange||0)/2,k=h.getExtremes(),l=h.toValue(i-d,!0)+j,i=h.toValue(i+\nc[b?\"plotWidth\":\"plotHeight\"]-d,!0)-j;h.series.length&&l>I(k.dataMin,k.min)&&i<s(k.dataMax,k.max)&&(h.setExtremes(l,i,!1,!1,{trigger:\"pan\"}),e=!0);c[b?\"mouseDownX\":\"mouseDownY\"]=d});e&&c.redraw(!1);K(c.container,{cursor:\"move\"})},setTitle:function(a,b){var f;var c=this,d=c.options,e;e=d.title=x(d.title,a);f=d.subtitle=x(d.subtitle,b),d=f;n([[\"title\",a,e],[\"subtitle\",b,d]],function(a){var b=a[0],d=c[b],e=a[1],a=a[2];d&&e&&(c[b]=d=d.destroy());a&&a.text&&!d&&(c[b]=c.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,\n\"class\":\"highcharts-\"+b,zIndex:a.zIndex||4}).css(a.style).add())});c.layOutTitles()},layOutTitles:function(){var a=0,b=this.title,c=this.subtitle,d=this.options,e=d.title,d=d.subtitle,f=this.spacingBox.width-44;if(b&&(b.css({width:(e.width||f)+\"px\"}).align(r({y:15},e),!1,\"spacingBox\"),!e.floating&&!e.verticalAlign))a=b.getBBox().height,a>=18&&a<=25&&(a=15);c&&(c.css({width:(d.width||f)+\"px\"}).align(r({y:a+e.margin},d),!1,\"spacingBox\"),!d.floating&&!d.verticalAlign&&(a=xa(a+c.getBBox().height)));this.titleOffset=\na},getChartSize:function(){var a=this.options.chart,b=this.renderToClone||this.renderTo;this.containerWidth=jb(b,\"width\");this.containerHeight=jb(b,\"height\");this.chartWidth=s(0,a.width||this.containerWidth||600);this.chartHeight=s(0,o(a.height,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Ta(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=\nb=this.renderTo.cloneNode(0),K(b,{position:\"absolute\",top:\"-9999px\",display:\"block\"}),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e=\"highcharts-\"+zb++;if(ea(a))this.renderTo=a=y.getElementById(a);a||ka(13,!0);c=C(v(a,\"data-highcharts-chart\"));!isNaN(c)&&Ga[c]&&Ga[c].destroy();v(a,\"data-highcharts-chart\",this.index);a.innerHTML=\"\";a.offsetWidth||this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;\nthis.container=a=U(Ea,{className:\"highcharts-container\"+(b.className?\" \"+b.className:\"\"),id:e},r({position:\"relative\",overflow:\"hidden\",width:c+\"px\",height:d+\"px\",textAlign:\"left\",lineHeight:\"normal\",zIndex:0,\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\"},b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new Ha(a,c,d,!0):new Va(a,c,d);$&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,\nf=o(e.margin,10),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!u(d[0]))this.plotTop=s(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i===\"right\"){if(!u(d[1]))this.marginRight=s(this.marginRight,c.legendWidth-g+f+a[1])}else if(i===\"left\"){if(!u(d[3]))this.plotLeft=s(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j===\"top\"){if(!u(d[0]))this.plotTop=s(this.plotTop,c.legendHeight+h+f+a[0])}else if(j===\"bottom\"&&!u(d[2]))this.marginBottom=\ns(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&n(this.axes,function(a){a.getOffset()});u(d[3])||(this.plotLeft+=b[3]);u(d[0])||(this.plotTop+=b[0]);u(d[2])||(this.marginBottom+=b[2]);u(d[1])||(this.marginRight+=b[1]);this.setChartSize()},initReflow:function(){function a(a){var g=c.width||jb(d,\"width\"),h=c.height||jb(d,\"height\"),a=a?a.target:O;if(!b.hasUserSize&&\ng&&h&&(a===O||a===y)){if(g!==b.containerWidth||h!==b.containerHeight)clearTimeout(e),b.reflowTimeout=e=setTimeout(function(){if(b.container)b.setSize(g,h,!1),b.hasUserSize=null},100);b.containerWidth=g;b.containerHeight=h}}var b=this,c=b.options.chart,d=b.renderTo,e;b.reflow=a;J(O,\"resize\",a);J(b,\"destroy\",function(){aa(O,\"resize\",a)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&z(d,\"endResize\",null,function(){d.isResizing-=1})};La(c,d);d.oldChartHeight=d.chartHeight;\nd.oldChartWidth=d.chartWidth;if(u(a))d.chartWidth=e=s(0,t(a)),d.hasUserSize=!!e;if(u(b))d.chartHeight=f=s(0,t(b));K(d.container,{width:e+\"px\",height:f+\"px\"});d.setChartSize(!0);d.renderer.setSize(e,f,c);d.maxTicks=null;n(d.axes,function(a){a.isDirty=!0;a.setScale()});n(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.getMargins();d.redraw(c);d.oldChartHeight=null;z(d,\"resize\");Fa===!1?g():setTimeout(g,Fa&&Fa.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,\nd=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=t(this.plotLeft);this.plotTop=j=t(this.plotTop);this.plotWidth=k=s(0,t(d-i-this.marginRight));this.plotHeight=l=s(0,t(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*P(this.plotBorderWidth/2);\nb=xa(s(d,h[3])/2);c=xa(s(d,h[0])/2);this.clipBox={x:b,y:c,width:P(this.plotSizeX-s(d,h[1])/2-b),height:P(this.plotSizeY-s(d,h[2])/2-c)};a||n(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=o(b[0],a[0]);this.marginRight=o(b[1],a[1]);this.marginBottom=o(b[2],a[2]);this.plotLeft=o(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,\nd=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,m=a.plotBorderWidth||0,p,q=this.plotLeft,o=this.plotTop,n=this.plotWidth,s=this.plotHeight,t=this.plotBox,u=this.clipRect,r=this.clipBox;p=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp(null,null,null,c-p,d-p));else{e={fill:j||S};if(i)e.stroke=a.borderColor,e[\"stroke-width\"]=i;this.chartBackground=b.rect(p/2,p/\n2,c-p,d-p,a.borderRadius,i).attr(e).add().shadow(a.shadow)}if(k)f?f.animate(t):this.plotBackground=b.rect(q,o,n,s,0).attr({fill:k}).add().shadow(a.plotShadow);if(l)h?h.animate(t):this.plotBGImage=b.image(l,q,o,n,s).add();u?u.animate({width:r.width,height:r.height}):this.clipRect=b.clipRect(r);if(m)g?g.animate(g.crisp(null,q,o,n,s)):this.plotBorder=b.rect(q,o,n,s,0,-m).attr({stroke:a.plotBorderColor,\"stroke-width\":m,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,\nc,d=a.options.series,e,f;n([\"inverted\",\"angular\",\"polar\"],function(g){c=W[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=W[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;n(b,function(a){a.linkedSeries.length=0});n(b,function(b){var d=b.options.linkedTo;if(ea(d)&&(d=d===\":previous\"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,\ne=d.labels,f=d.credits,g;a.setTitle();a.legend=new eb(a,d.legend);a.getStacks();n(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;n(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&n(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g(\"series-group\").attr({zIndex:3}).add();n(a.series,function(a){a.translate();a.setTooltipPoints();a.render()});e.items&&n(e.items,function(b){var d=r(e.style,b.style),\nf=C(d.left)+a.plotLeft,g=C(d.top)+a.plotTop+12;delete d.left;delete d.top;c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on(\"click\",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;z(a,\"destroy\");Ga[a.index]=w;a.renderTo.removeAttribute(\"data-highcharts-chart\");aa(a);for(e=\nb.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();n(\"title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer\".split(\",\"),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML=\"\",aa(d),f&&Ta(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!Z&&O==O.top&&y.readyState!==\"complete\"||$&&!O.canvg?($?Tb.push(function(){a.firstRender()},\na.options.global.canvasToolsURL):y.attachEvent(\"onreadystatechange\",function(){y.detachEvent(\"onreadystatechange\",a.firstRender);y.readyState===\"complete\"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender())a.getContainer(),z(a,\"init\"),a.resetMargins(),a.setChartSize(),a.propFromSeries(),a.getAxes(),n(b.series||[],function(b){a.initSeries(b)}),a.linkSeries(),z(a,\"beforeRender\"),a.pointer=new xb(a,b),a.render(),a.renderer.draw(),c&&c.apply(a,\n[a]),n(a.callbacks,function(b){b.apply(a,[a])}),a.cloneRenderTo(!0),z(a,\"load\")},splashArray:function(a,b){var c=b[a],c=T(c)?c:[c,c,c,c];return[o(b[a+\"Top\"],c[0]),o(b[a+\"Right\"],c[1]),o(b[a+\"Bottom\"],c[2]),o(b[a+\"Left\"],c[3])]}};yb.prototype.callbacks=[];var Pa=function(){};Pa.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=\n0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Pa.prototype.optionsToObject.call(this,a);r(this,a);this.options=this.options?r(this.options,a):a;if(d)this.y=this[d];if(this.x===w&&c)this.x=b===w?c.autoIncrement():b;return this},optionsToObject:function(a){var b,c=this.series,d=c.pointArrayMap||[\"y\"],e=d.length,f=0,g=0;if(typeof a===\"number\"||a===null)b={y:a};else if(Ia(a)){b={};if(a.length>e){c=typeof a[0];if(c===\"string\")b.name=a[0];else if(c===\n\"number\")b.x=a[0];f++}for(;g<e;)b[d[g++]]=a[f++]}else if(typeof a===\"object\"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers=!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),ga(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)aa(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a=\n\"graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup\".split(\",\"),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},select:function(a,b){var c=this,d=c.series,e=d.chart,a=o(a,!c.selected);c.firePointEvent(a?\"select\":\"unselect\",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[qa(c,d.data)]=\nc.options;c.setState(a&&\"select\");b||n(e.getSelectedPoints(),function(a){if(a.selected&&a!==c)a.selected=a.options.selected=!1,d.options.data[qa(a,d.data)]=a.options,a.setState(\"\"),a.firePointEvent(\"unselect\")})})},onMouseOver:function(a){var b=this.series,c=b.chart,d=c.tooltip,e=c.hoverPoint;if(e&&e!==this)e.onMouseOut();this.firePointEvent(\"mouseOver\");d&&(!d.shared||b.noSharedTooltip)&&d.refresh(this,a);this.setState(\"hover\");c.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;\nif(!b||qa(this,b)===-1)this.firePointEvent(\"mouseOut\"),this.setState(),a.hoverPoint=null},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,d=o(c.valueDecimals,\"\"),e=c.valuePrefix||\"\",f=c.valueSuffix||\"\";n(b.pointArrayMap||[\"y\"],function(b){b=\"{point.\"+b;if(e||f)a=a.replace(b+\"}\",e+b+\"}\"+f);a=a.replace(b+\"}\",b+\":,.\"+d+\"f}\")});return Ca(a,{point:this,series:this.series})},update:function(a,b,c){var d=this,e=d.series,f=d.graphic,g,h=e.data,i=e.chart,j=e.options,b=o(b,!0);d.firePointEvent(\"update\",\n{options:a},function(){d.applyOptions(a);if(T(a)&&(e.getAttribs(),f))a.marker&&a.marker.symbol?d.graphic=f.destroy():f.attr(d.pointAttr[d.state||\"\"]);g=qa(d,h);e.xData[g]=d.x;e.yData[g]=e.toYData?e.toYData(d):d.y;e.zData[g]=d.z;j.data[g]=d.options;e.isDirty=e.isDirtyData=!0;if(!e.fixedBox&&e.hasCartesianSeries)i.isDirtyBox=!0;j.legendType===\"point\"&&i.legend.destroyItem(d);b&&i.redraw(c)})},remove:function(a,b){var c=this,d=c.series,e=d.points,f=d.chart,g,h=d.data;La(b,f);a=o(a,!0);c.firePointEvent(\"remove\",\nnull,function(){g=qa(c,h);h.length===e.length&&e.splice(g,1);h.splice(g,1);d.options.data.splice(g,1);d.xData.splice(g,1);d.yData.splice(g,1);d.zData.splice(g,1);c.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&f.redraw()})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a===\"click\"&&e.allowPointSelect&&(c=function(a){d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});z(this,a,b,c)},importEvents:function(){if(!this.hasImportedEvents){var a=\nx(this.series.options.point,this.options).events,b;this.events=a;for(b in a)J(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a){var b=this.plotX,c=this.plotY,d=this.series,e=d.options.states,f=Y[d.type].marker&&d.options.marker,g=f&&!f.enabled,h=f&&f.states[a],i=h&&h.enabled===!1,j=d.stateMarkerGraphic,k=this.marker||{},l=d.chart,m=this.pointAttr,a=a||\"\";if(!(a===this.state||this.selected&&a!==\"select\"||e[a]&&e[a].enabled===!1||a&&(i||g&&!h.enabled))){if(this.graphic)e=f&&this.graphic.symbolName&&\nm[a].r,this.graphic.attr(x(m[a],e?{x:b-e,y:c-e,width:2*e,height:2*e}:{}));else{if(a&&h)e=h.radius,k=k.symbol||d.symbol,j&&j.currentSymbol!==k&&(j=j.destroy()),j?j.attr({x:b-e,y:c-e}):(d.stateMarkerGraphic=j=l.renderer.symbol(k,b-e,c-e,2*e,2*e).attr(m[a]).add(d.markerGroup),j.currentSymbol=k);if(j)j[a&&l.isInsidePlot(b,c)?\"show\":\"hide\"]()}this.state=a}}};var Q=function(){};Q.prototype={isCartesian:!0,type:\"line\",pointClass:Pa,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:\"lineColor\",\"stroke-width\":\"lineWidth\",\nfill:\"fillColor\",r:\"radius\"},colorCounter:0,init:function(a,b){var c,d,e=a.series;this.chart=a;this.options=b=this.setOptions(b);this.linkedSeries=[];this.bindAxes();r(this,{name:b.name,state:\"\",pointAttr:{},visible:b.visible!==!1,selected:b.selected===!0});if($)b.animation=!1;d=b.events;for(c in d)J(this,c,d[c]);if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;this.getColor();this.getSymbol();this.setData(b.data,!1);if(this.isCartesian)a.hasCartesianSeries=\n!0;e.push(this);this._i=e.length-1;Kb(e,function(a,b){return o(a.options.index,a._i)-o(b.options.index,a._i)});n(e,function(a,b){a.index=b;a.name=a.name||\"Series \"+(b+1)})},bindAxes:function(){var a=this,b=a.options,c=a.chart,d;a.isCartesian&&n([\"xAxis\",\"yAxis\"],function(e){n(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]!==w&&b[e]===d.id||b[e]===w&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});a[e]||ka(18,!0)})},autoIncrement:function(){var a=this.options,b=this.xIncrement,b=o(b,a.pointStart,\n0);this.pointInterval=o(this.pointInterval,a.pointInterval,1);this.xIncrement=b+this.pointInterval;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else n(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart.options,c=b.plotOptions,d=c[this.type];this.userOptions=a;a=x(d,c.series,\na);this.tooltipOptions=x(b.tooltip,a.tooltip);d.marker===null&&delete a.marker;return a},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters,e;e=a.color||Y[this.type].color;if(!e&&!a.colorByPoint)u(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)u(a._symbolIndex)?\na=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:function(a){var b=this.options,c=b.marker,d=a.options,e;e=d.symbolWidth;var f=this.chart.renderer,g=this.legendGroup,a=a.baseline-t(f.fontMetrics(d.itemStyle.fontSize).b*0.3);if(b.lineWidth){d={\"stroke-width\":b.lineWidth};if(b.dashStyle)d.dashstyle=b.dashStyle;this.legendLine=f.path([\"M\",0,a,\"L\",e,a]).attr(d).add(g)}if(c&&c.enabled)b=c.radius,this.legendSymbol=\ne=f.symbol(this.symbol,e/2-b,a-b,2*b,2*b).add(g),e.isMarker=!0},addPoint:function(a,b,c,d){var e=this.options,f=this.data,g=this.graph,h=this.area,i=this.chart,j=this.xData,k=this.yData,l=this.zData,m=this.names,p=g&&g.shift||0,q=e.data,s;La(d,i);c&&n([g,h,this.graphNeg,this.areaNeg],function(a){if(a)a.shift=p+1});if(h)h.isArea=!0;b=o(b,!0);d={series:this};this.pointClass.prototype.applyOptions.apply(d,[a]);g=d.x;h=j.length;if(this.requireSorting&&g<j[h-1])for(s=!0;h&&j[h-1]>g;)h--;j.splice(h,0,g);\nk.splice(h,0,this.toYData?this.toYData(d):d.y);l.splice(h,0,d.z);if(m)m[g]=d.name;q.splice(h,0,a);s&&(this.data.splice(h,0,null),this.processData());e.legendType===\"point\"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),j.shift(),k.shift(),l.shift(),q.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},setData:function(a,b){var c=this.points,d=this.options,e=this.chart,f=null,g=this.xAxis,h=g&&g.categories&&!g.categories.length?[]:null,i;this.xIncrement=\nnull;this.pointRange=g&&g.categories?1:d.pointRange;this.colorCounter=0;var j=[],k=[],l=[],m=a?a.length:[];i=o(d.turboThreshold,1E3);var p=this.pointArrayMap,p=p&&p.length,q=!!this.toYData;if(i&&m>i){for(i=0;f===null&&i<m;)f=a[i],i++;if(sa(f)){f=o(d.pointStart,0);d=o(d.pointInterval,1);for(i=0;i<m;i++)j[i]=f,k[i]=a[i],f+=d;this.xIncrement=f}else if(Ia(f))if(p)for(i=0;i<m;i++)d=a[i],j[i]=d[0],k[i]=d.slice(1,p+1);else for(i=0;i<m;i++)d=a[i],j[i]=d[0],k[i]=d[1];else ka(12)}else for(i=0;i<m;i++)if(a[i]!==\nw&&(d={series:this},this.pointClass.prototype.applyOptions.apply(d,[a[i]]),j[i]=d.x,k[i]=q?this.toYData(d):d.y,l[i]=d.z,h&&d.name))h[d.x]=d.name;ea(k[0])&&ka(14,!0);this.data=[];this.options.data=a;this.xData=j;this.yData=k;this.zData=l;this.names=h;for(i=c&&c.length||0;i--;)c[i]&&c[i].destroy&&c[i].destroy();if(g)g.minRange=g.userMinRange;this.isDirty=this.isDirtyData=e.isDirtyBox=!0;o(b,!0)&&e.redraw(!1)},remove:function(a,b){var c=this,d=c.chart,a=o(a,!0);if(!c.isRemoving)c.isRemoving=!0,z(c,\"remove\",\nnull,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=!1},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i=this.options,j=i.cropThreshold,k=this.isCartesian;if(k&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(k&&this.sorted&&(!j||d>j||this.forceCrop))if(a=h.min,h=h.max,b[d-1]<a||b[0]>h)b=[],c=[];else if(b[0]<a||b[d-1]>h)e=this.cropData(this.xData,this.yData,a,h),b=e.xData,c=e.yData,e=e.start,\nf=!0;for(h=b.length-1;h>=0;h--)d=b[h]-b[h-1],d>0&&(g===w||d<g)?g=d:d<0&&this.requireSorting&&ka(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c;if(i.pointRange===null)this.pointRange=g||1;this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=o(this.cropShoulder,1),i;for(i=0;i<e;i++)if(a[i]>=c){f=s(0,i-h);break}for(;i<e;i++)if(a[i]>d){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,\nb=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],m;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(m=0;m<g;m++)i=h+m,j?l[m]=(new f).init(this,[d[m]].concat(ja(e[m]))):(b[i]?k=b[i]:a[i]!==w&&(b[i]=k=(new f).init(this,a[i],d[m])),l[m]=k);if(b&&(g!==(c=b.length)||j))for(m=0;m<c;m++)if(m===h&&!j&&(m+=g),b[m])b[m].destroyElements(),b[m].plotX=w;this.data=b;this.points=l},setStackedPoints:function(){if(this.options.stacking&&\n!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.stack,e=e.stacking,h=this.stackKey,i=\"-\"+h,j=this.negStacks,k=this.yAxis,l=k.stacks,m=k.oldStacks,p,q,o,n,t;for(o=0;o<d;o++){n=a[o];t=b[o];q=(p=j&&t<f)?i:h;l[q]||(l[q]={});if(!l[q][n])m[q]&&m[q][n]?(l[q][n]=m[q][n],l[q][n].total=null):l[q][n]=new Mb(k,k.options.stackLabels,p,n,g,e);q=l[q][n];q.points[this.index]=[q.cum||0];e===\"percent\"?\n(p=p?h:i,j&&l[p]&&l[p][n]?(p=l[p][n],q.total=p.total=s(p.total,q.total)+N(t)||0):q.total+=N(t)||0):q.total+=t||0;q.cum=(q.cum||0)+(t||0);q.points[this.index].push(q.cum);c[o]=q.cum}if(e===\"percent\")k.usePercentage=!0;this.stackedYData=c;k.oldStacks={}}},setPercentStacks:function(){var a=this,b=a.stackKey,c=a.yAxis.stacks;n([b,\"-\"+b],function(b){var d;for(var e=a.xData.length,f,g;e--;)if(f=a.xData[e],d=(g=c[b]&&c[b][f])&&g.points[a.index],f=d)g=g.total?100/g.total:0,f[0]=ia(f[0]*g),f[1]=ia(f[1]*g),\na.stackedYData[e]=f[1]})},getExtremes:function(){var a=this.yAxis,b=this.processedXData,c=this.stackedYData||this.processedYData,d=c.length,e=[],f=0,g=this.xAxis.getExtremes(),h=g.min,g=g.max,i,j,k,l;for(l=0;l<d;l++)if(j=b[l],k=c[l],i=k!==null&&k!==w&&(!a.isLog||k.length||k>0),j=this.getExtremesFromAll||this.cropped||(b[l+1]||j)>=h&&(b[l-1]||j)<=g,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=o(void 0,Ja(e));this.dataMax=o(void 0,va(e))},translate:function(){this.processedXData||\nthis.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i===\"between\"||sa(i),k=a.threshold,a=0;a<g;a++){var l=f[a],m=l.x,p=l.y,q=l.low,n=e.stacks[(this.negStacks&&p<k?\"-\":\"\")+this.stackKey];if(e.isLog&&p<=0)l.y=p=null;l.plotX=c.translate(m,0,0,0,1,i,this.type===\"flags\");if(b&&this.visible&&n&&n[m])n=n[m],p=n.points[this.index],q=p[0],p=p[1],q===0&&(q=o(k,e.min)),e.isLog&&\nq<=0&&(q=null),l.percentage=b===\"percent\"&&p,l.total=l.stackTotal=n.total,l.stackY=p,n.setOffset(this.pointXOffset||0,this.barW||0);l.yBottom=u(q)?e.translate(q,0,1,0,1):null;h&&(p=this.modifyValue(p,l));l.plotY=typeof p===\"number\"&&p!==Infinity?e.translate(p,0,1,0,1):w;l.clientX=j?c.translate(m,0,0,0,1):l.plotX;l.negative=l.y<(k||0);l.category=d&&d[l.x]!==w?d[l.x]:l.x}this.getSegments()},setTooltipPoints:function(a){var b=[],c,d,e=this.xAxis,f=e&&e.getExtremes(),g=e?e.tooltipLen||e.len:this.chart.plotSizeX,\nh,i,j=[];if(this.options.enableMouseTracking!==!1){if(a)this.tooltipPoints=null;n(this.segments||this.points,function(a){b=b.concat(a)});e&&e.reversed&&(b=b.reverse());this.orderTooltipPoints&&this.orderTooltipPoints(b);a=b.length;for(i=0;i<a;i++)if(e=b[i],c=e.x,c>=f.min&&c<=f.max){h=b[i+1];c=d===w?0:d+1;for(d=b[i+1]?I(s(0,P((e.clientX+(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},tooltipHeaderFormatter:function(a){var b=this.tooltipOptions,c=b.xDateFormat,\nd=b.dateTimeLabelFormats,e=this.xAxis,f=e&&e.options.type===\"datetime\",b=b.headerFormat,e=e&&e.closestPointRange,g;if(f&&!c)if(e)for(g in D){if(D[g]>=e){c=d[g];break}}else c=d.day;f&&c&&sa(a.key)&&(b=b.replace(\"{point.key}\",\"{point.key:\"+c+\"}\"));return Ca(b,{point:a,series:this})},onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&z(this,\"mouseOver\");this.setState(\"hover\");a.hoverSeries=this},onMouseOut:function(){var a=this.options,\nb=this.chart,c=b.tooltip,d=b.hoverPoint;if(d)d.onMouseOut();this&&a.events.mouseOut&&z(this,\"mouseOut\");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState();b.hoverSeries=null},animate:function(a){var b=this,c=b.chart,d=c.renderer,e;e=b.options.animation;var f=c.clipBox,g=c.inverted,h;if(e&&!T(e))e=Y[b.type].animation;h=\"_sharedClip\"+e.duration+e.easing;if(a)a=c[h],e=c[h+\"m\"],a||(c[h]=a=d.clipRect(r(f,{width:0})),c[h+\"m\"]=e=d.clipRect(-99,g?-c.plotLeft:-c.plotTop,99,g?\nc.chartWidth:c.chartHeight)),b.group.clip(a),b.markerGroup.clip(e),b.sharedClipKey=h;else{if(a=c[h])a.animate({width:c.plotSizeX},e),c[h+\"m\"].animate({width:c.plotSizeX+99},e);b.animate=null;b.animationTimeout=setTimeout(function(){b.afterAnimate()},e.duration)}},afterAnimate:function(){var a=this.chart,b=this.sharedClipKey,c=this.group;c&&this.options.clip!==!1&&(c.clip(a.clipRect),this.markerGroup.clip());setTimeout(function(){b&&a[b]&&(a[b]=a[b].destroy(),a[b+\"m\"]=a[b+\"m\"].destroy())},100)},drawPoints:function(){var a,\nb=this.points,c=this.chart,d,e,f,g,h,i,j,k,l=this.options.marker,m,p=this.markerGroup;if(l.enabled||this._hasPointMarkers)for(f=b.length;f--;)if(g=b[f],d=P(g.plotX),e=g.plotY,k=g.graphic,i=g.marker||{},a=l.enabled&&i.enabled===w||i.enabled,m=c.isInsidePlot(t(d),e,c.inverted),a&&e!==w&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?\"select\":\"\"],h=a.r,i=o(i.symbol,this.symbol),j=i.indexOf(\"url\")===0,k)k.attr({visibility:m?Z?\"inherit\":\"visible\":\"hidden\"}).animate(r({x:d-h,y:e-h},k.symbolName?{width:2*\nh,height:2*h}:{}));else{if(m&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(p)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=o(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=Y[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color,h={stroke:g,fill:g},i=a.points||[],j=[],k,l=a.pointAttrToOptions,m=b.negativeColor,p=c.lineColor,q;\nb.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color=e.color||ra(e.color||g).brighten(e.brightness).get();j[\"\"]=a.convertAttribs(c,h);n([\"hover\",\"select\"],function(b){j[b]=a.convertAttribs(d[b],j[\"\"])});a.pointAttr=j;for(g=i.length;g--;){h=i[g];if((c=h.options&&h.options.marker||h.options)&&c.enabled===!1)c.radius=0;if(h.negative&&m)h.color=h.fillColor=m;f=b.colorByPoint||h.color;if(h.options)for(q in l)u(c[l[q]])&&(f=!0);if(f){c=c||{};k=[];d=c.states||{};f=d.hover=\nd.hover||{};if(!b.marker)f.color=ra(f.color||h.color).brighten(f.brightness||e.brightness).get();k[\"\"]=a.convertAttribs(r({color:h.color,fillColor:h.color,lineColor:p===null?h.color:w},c),j[\"\"]);k.hover=a.convertAttribs(d.hover,j.hover,k[\"\"]);k.select=a.convertAttribs(d.select,j.select,k[\"\"])}else k=j;h.pointAttr=k}},update:function(a,b){var c=this.chart,d=this.type,e=W[d].prototype,f,a=x(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);\nfor(f in e)e.hasOwnProperty(f)&&(this[f]=w);r(this,W[a.type||d].prototype);this.init(c,a);o(b,!0)&&c.redraw(!1)},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\\/533/.test(oa),d,e,f=a.data||[],g,h,i;z(a,\"destroy\");aa(a);n([\"xAxis\",\"yAxis\"],function(b){if(i=a[b])ga(i.series,a),i.isDirty=i.forceRedraw=!0,i.stacks={}});a.legendItem&&a.chart.legend.destroyItem(a);for(e=f.length;e--;)(g=f[e])&&g.destroy&&g.destroy();a.points=null;clearTimeout(a.animationTimeout);n(\"area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip\".split(\",\"),\nfunction(b){a[b]&&(d=c&&b===\"group\"?\"hide\":\"destroy\",a[b][d]())});if(b.hoverSeries===a)b.hoverSeries=null;ga(b.series,a);for(h in a)delete a[h]},drawDataLabels:function(){var a=this,b=a.options.dataLabels,c=a.points,d,e,f,g;if(b.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(b),g=a.plotGroup(\"dataLabelsGroup\",\"data-labels\",a.visible?\"visible\":\"hidden\",b.zIndex||6),e=b,n(c,function(c){var i,j=c.dataLabel,k,l,m=c.connector,p=!0;d=c.options&&c.options.dataLabels;i=o(d&&d.enabled,e.enabled);\nif(j&&!i)c.dataLabel=j.destroy();else if(i){b=x(e,d);i=b.rotation;k=c.getLabelConfig();f=b.format?Ca(b.format,k):b.formatter.call(k,b);b.style.color=o(b.color,b.style.color,a.color,\"black\");if(j)if(u(f))j.attr({text:f}),p=!1;else{if(c.dataLabel=j=j.destroy(),m)c.connector=m.destroy()}else if(u(f)){j={fill:b.backgroundColor,stroke:b.borderColor,\"stroke-width\":b.borderWidth,r:b.borderRadius||0,rotation:i,padding:b.padding,zIndex:1};for(l in j)j[l]===w&&delete j[l];j=c.dataLabel=a.chart.renderer[i?\"text\":\n\"label\"](f,0,-999,null,null,null,b.useHTML).attr(j).css(b.style).add(g).shadow(b.shadow)}j&&a.alignDataLabel(c,j,b,null,p)}})},alignDataLabel:function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=o(a.plotX,-999),i=o(a.plotY,-999),j=b.getBBox();if(a=this.visible&&f.isInsidePlot(a.plotX,a.plotY,g))d=r({x:g?f.plotWidth-i:h,y:t(g?f.plotHeight-h:i),width:0,height:0},d),r(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?\"attr\":\"animate\"](g)):(b.align(c,\nnull,d),g=b.alignAttr,o(c.overflow,\"justify\")===\"justify\"?this.justifyDataLabel(b,c,g,j,d,e):o(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));a||b.attr({y:-999})},justifyDataLabel:function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h===\"right\"?b.align=\"left\":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h===\"left\"?b.align=\"right\":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i===\"bottom\"?b.verticalAlign=\"top\":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i===\n\"top\"?b.verticalAlign=\"bottom\":b.y=g.plotHeight-j,k=!0;if(k)a.placed=!f,a.align(b,null,e)},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;n(a,function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,e,f)):(c.push(f?\"L\":\"M\"),d&&f&&(i=a[f-1],d===\"right\"?c.push(i.plotX,h):d===\"center\"?c.push((i.plotX+g)/2,i.plotY,(i.plotX+g)/2,h):c.push(g,i.plotY)),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a=this,b=[],c,d=[];n(a.segments,function(e){c=\na.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[[\"graph\",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=this.getGraphPath(),g=b.negativeColor;g&&c.push([\"graphNeg\",g]);n(c,function(c,g){var j=c[0],k=a[j];if(k)Wa(k),k.animate({d:f});else if(d&&f.length)k={stroke:c[1],\"stroke-width\":d,zIndex:1},e?k.dashstyle=e:k[\"stroke-linecap\"]=k[\"stroke-linejoin\"]=\"round\",a[j]=a.chart.renderer.path(f).attr(k).add(a.group).shadow(!g&&\nb.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j=b.chartHeight,k=s(e,j),l=this.yAxis;if(d&&(f||g)){d=t(l.toPixels(a.threshold||0,!0));a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?\n(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};n([\"group\",\"markerGroup\"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)J(c,\"resize\",a),J(b,\"destroy\",function(){aa(c,\"resize\",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],\ng=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?\"attr\":\"animate\"](this.getPlotBox());return f},getPlotBox:function(){return{translateX:this.xAxis?this.xAxis.left:this.chart.plotLeft,translateY:this.yAxis?this.yAxis.top:this.chart.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this.chart,b,c=this.options,d=c.animation&&!!this.animate&&a.renderer.isSVG,e=this.visible?\"visible\":\"hidden\",f=c.zIndex,g=this.hasRendered,h=a.seriesGroup;b=this.plotGroup(\"group\",\n\"series\",e,f,h);this.markerGroup=this.plotGroup(\"markerGroup\",\"markers\",e,f,h);d&&this.animate(!0);this.getAttribs();b.inverted=this.isCartesian?a.inverted:!1;this.drawGraph&&(this.drawGraph(),this.clipNeg());this.drawDataLabels();this.drawPoints();this.options.enableMouseTracking!==!1&&this.drawTracker();a.inverted&&this.invertGroups();c.clip!==!1&&!this.sharedClipKey&&!g&&b.clip(a.clipRect);d?this.animate():g||this.afterAnimate();this.isDirty=this.isDirtyData=!1;this.hasRendered=!0},redraw:function(){var a=\nthis.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:o(d&&d.left,a.plotLeft),translateY:o(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints(!0);this.render();b&&z(this,\"updatedData\")},setState:function(a){var b=this.options,c=this.graph,d=this.graphNeg,e=b.states,b=b.lineWidth,a=a||\"\";if(this.state!==a)this.state=a,e[a]&&e[a].enabled===!1||(a&&(b=e[a].lineWidth||b+1),c&&!c.dashstyle&&\n(a={\"stroke-width\":b},c.attr(a),d&&d.attr(a)))},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===w?!h:a)?\"show\":\"hide\";n([\"group\",\"dataLabelsGroup\",\"markerGroup\",\"tracker\"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&n(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});n(c.linkedSeries,function(b){b.setVisible(a,\n!1)});if(g)d.isDirtyBox=!0;b!==!1&&d.redraw();z(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===w?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;z(this,a?\"select\":\"unselect\")},drawTracker:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,p=function(){if(f.hoverSeries!==\na)a.onMouseOver()};if(e&&!c)for(m=e+1;m--;)d[m]===\"M\"&&d.splice(m+1,0,d[m+1]-i,d[m+2],\"L\"),(m&&d[m]===\"M\"||m===e)&&d.splice(m,0,\"L\",d[m-2]+i,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push(\"M\",e.plotX-i,e.plotY,\"L\",e.plotX+i,e.plotY);j?j.attr({d:d}):(a.tracker=h.path(d).attr({\"stroke-linejoin\":\"round\",visibility:a.visible?\"visible\":\"hidden\",stroke:Qb,fill:c?Qb:S,\"stroke-width\":b.lineWidth+(c?0:2*i),zIndex:2}).add(a.group),n([a.tracker,a.markerGroup],function(a){a.addClass(\"highcharts-tracker\").on(\"mouseover\",\np).on(\"mouseout\",function(a){g.onTrackerMouseOut(a)}).css(l);if(ib)a.on(\"touchstart\",p)}))}};G=ha(Q);W.line=G;Y.area=x(X,{threshold:0});G=ha(Q,{type:\"area\",getSegments:function(){var a=[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,m,p;if(this.options.stacking&&!this.cropped){for(m=0;m<j.length;m++)g[j[m].x]=j[m];for(p in f)c.push(+p);c.sort(function(a,b){return a-b});n(c,function(a){if(!k||g[a]&&g[a].y!==null)g[a]?b.push(g[a]):\n(h=d.translate(a),l=f[a].percent?f[a].total?f[a].cum*100/f[a].total:0:f[a].cum,i=e.toPixels(l,!0),b.push({y:null,plotX:h,clientX:h,plotY:i,yBottom:i,onMouseOver:pa}))});b.length&&a.push(b)}else Q.prototype.getSegments.call(this),a=this.segments;this.segments=a},getSegmentPath:function(a){var b=Q.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),g;d===3&&c.push(\"L\",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-\n1;d>=0;d--)g=o(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},closeSegment:function(a,b,c){a.push(\"L\",b[b.length-1].plotX,c,\"L\",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];Q.prototype.drawGraph.apply(this);var a=this,b=this.areaPath,c=this.options,d=c.negativeColor,e=c.negativeFillColor,f=[[\"area\",this.color,c.fillColor]];(d||e)&&f.push([\"areaNeg\",d,e]);n(f,function(d){var e=d[0],\nf=a[e];f?f.animate({d:b}):a[e]=a.chart.renderer.path(b).attr({fill:o(d[2],ra(d[1]).setOpacity(o(c.fillOpacity,0.75)).get()),zIndex:0}).add(a.group)})},drawLegendSymbol:function(a,b){b.legendSymbol=this.chart.renderer.rect(0,a.baseline-11,a.options.symbolWidth,12,2).attr({zIndex:3}).add(b.legendGroup)}});W.area=G;Y.spline=x(X);F=ha(Q,{type:\"spline\",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(f&&g){a=f.plotY;j=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*\ne+a)/2.5;j=(1.5*d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=s(a,e),k=2*e-i):i<a&&i<e&&(i=I(a,e),k=2*e-i);k>g&&k>e?(k=s(g,e),i=2*e-k):k<g&&k<e&&(k=I(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=[\"C\",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=[\"M\",d,e];return b}});W.spline=F;Y.areaspline=x(Y.area);ma=G.prototype;F=ha(F,{type:\"areaspline\",closedStacks:!0,getSegmentPath:ma.getSegmentPath,closeSegment:ma.closeSegment,drawGraph:ma.drawGraph,\ndrawLegendSymbol:ma.drawLegendSymbol});W.areaspline=F;Y.column=x(X,{borderColor:\"#FFFFFF\",borderWidth:1,borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1},select:{color:\"#C0C0C0\",borderColor:\"#000000\",shadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},stickyTracking:!1,threshold:0});F=ha(Q,{type:\"column\",pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\",\nr:\"borderRadius\"},cropShoulder:0,trackerGroups:[\"group\",\"dataLabelsGroup\"],negStacks:!0,init:function(){Q.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=c.reversed,f,g={},h,i=0;b.grouping===!1?i=1:n(a.chart.series,function(b){var c=b.options,e=b.yAxis;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos===e.pos)c.stacking?(f=b.stackKey,g[f]===\nw&&(g[f]=i++),h=g[f]):c.grouping!==!1&&(h=i++),b.columnIndex=h});var c=I(N(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||1),c.len),j=c*b.groupPadding,k=(c-2*j)/i,l=b.pointWidth,b=u(l)?(k-l)/2:k*b.pointPadding,l=o(l,k-2*b);return a.columnMetrics={width:l,offset:b+(j+((e?i-(a.columnIndex||0):a.columnIndex)||0)*k-c/2)*(e?-1:1)}},translate:function(){var a=this.chart,b=this.options,c=b.borderWidth,d=this.yAxis,e=this.translatedThreshold=d.getThreshold(b.threshold),f=o(b.minPointLength,\n5),b=this.getColumnMetrics(),g=b.width,h=this.barW=xa(s(g,1+2*c)),i=this.pointXOffset=b.offset,j=-(c%2?0.5:0),k=c%2?0.5:1;a.renderer.isVML&&a.inverted&&(k+=1);Q.prototype.translate.apply(this);n(this.points,function(a){var b=o(a.yBottom,e),c=I(s(-999-b,a.plotY),d.len+999+b),n=a.plotX+i,u=h,r=I(c,b),w,c=s(c,b)-r;N(c)<f&&f&&(c=f,r=t(N(r-e)>f?b-f:e-(d.translate(a.y,0,1,0,1)<=e?f:0)));a.barX=n;a.pointWidth=g;b=N(n)<0.5;u=t(n+u)+j;n=t(n)+j;u-=n;w=N(r)<0.5;c=t(r+c)+k;r=t(r)+k;c-=r;b&&(n+=1,u-=1);w&&(r-=\n1,c+=1);a.shapeType=\"rect\";a.shapeArgs={x:n,y:r,width:u,height:c}})},getSymbol:pa,drawLegendSymbol:G.prototype.drawLegendSymbol,drawGraph:pa,drawPoints:function(){var a=this,b=a.options,c=a.chart.renderer,d;n(a.points,function(e){var f=e.plotY,g=e.graphic;if(f!==w&&!isNaN(f)&&e.y!==null)d=e.shapeArgs,g?(Wa(g),g.animate(x(d))):e.graphic=c[e.shapeType](d).attr(e.pointAttr[e.selected?\"select\":\"\"]).add(a.group).shadow(b.shadow,null,b.stacking&&!b.borderRadius);else if(g)e.graphic=g.destroy()})},drawTracker:function(){var a=\nthis,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver();for(;d&&!e;)e=d.point,d=d.parentNode;if(e!==w&&e!==b.hoverPoint)e.onMouseOver(c)};n(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)n(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass(\"highcharts-tracker\").on(\"mouseover\",f).on(\"mouseout\",function(a){c.onTrackerMouseOut(a)}).css(e),ib))a[b].on(\"touchstart\",\nf)}),a._hasTracking=!0},alignDataLabel:function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=a.dlBox||a.shapeArgs,i=a.below||a.plotY>o(this.translatedThreshold,f.plotSizeY),j=o(c.inside,!!this.options.stacking);if(h&&(d=x(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=o(c.align,!g||j?\"center\":i?\"right\":\"left\");c.verticalAlign=o(c.verticalAlign,g||j?\"middle\":i?\"top\":\"bottom\");Q.prototype.alignDataLabel.call(this,\na,b,c,d,e)},animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(Z)a?(e.scaleY=0.001,a=I(b.pos+b.len,s(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?\"translateX\":\"translateY\"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&n(b.series,function(b){if(b.type===a.type)b.isDirty=!0});Q.prototype.remove.apply(a,arguments)}});W.column=F;Y.bar=\nx(Y.column);ma=ha(F,{type:\"bar\",inverted:!0});W.bar=ma;Y.scatter=x(X,{lineWidth:0,tooltip:{headerFormat:'<span style=\"font-size: 10px; color:{series.color}\">{series.name}</span><br/>',pointFormat:\"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>\",followPointer:!0},stickyTracking:!1});ma=ha(Q,{type:\"scatter\",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"markerGroup\"],drawTracker:F.prototype.drawTracker,setTooltipPoints:pa});W.scatter=ma;Y.pie=x(X,{borderColor:\"#FFFFFF\",borderWidth:1,\ncenter:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0,legendType:\"point\",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});X={type:\"pie\",isCartesian:!1,pointClass:ha(Pa,{init:function(){Pa.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;r(a,{visible:a.visible!==!1,name:o(a.name,\"Slice\")});b=function(b){a.slice(b.type===\n\"select\")};J(a,\"select\",b);J(a,\"unselect\",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart,e;b.visible=b.options.visible=a=a===w?!b.visible:a;c.options.data[qa(b,c.data)]=b.options;e=a?\"show\":\"hide\";n([\"graphic\",\"dataLabel\",\"connector\",\"shadowGroup\"],function(a){if(b[a])b[a][e]()});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;La(c,d.chart);o(b,!0);this.sliced=this.options.sliced=\na=u(a)?a:!this.sliced;d.options.data[qa(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"group\",\"dataLabelsGroup\"],pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\"},getColor:pa,animate:function(a){var b=this,c=b.points,d=b.startAngleRad;if(!a)n(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/\n2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b){Q.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();o(b,!0)&&this.chart.redraw()},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;Q.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0?e.y/b*100:0,e.total=b},getCenter:function(){var a=\nthis.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[o(b[0],\"50%\"),o(b[1],\"50%\"),a.size||\"100%\",a.innerSize||0],g=I(e,f),h;return Na(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*C(a)/100:a)+(d?c:0)})},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ya/180*(i-90),i=(this.endAngleRad=ya/180*((c.endAngle||i+360)-90))-j,k=this.points,\nl=c.dataLabels.distance,c=c.ignoreHiddenPoint,m,n=k.length,o;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=R.asin((b-a[1])/(a[2]/2+l));return a[0]+(c?-1:1)*V(h)*(a[2]/2+l)};for(m=0;m<n;m++){o=k[m];f=j+b*i;if(!c||o.visible)b+=o.percentage/100;g=j+b*i;o.shapeType=\"arc\";o.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:t(f*1E3)/1E3,end:t(g*1E3)/1E3};h=(g+f)/2;h>0.75*i&&(h-=2*ya);o.slicedTranslation={translateX:t(V(h)*d),translateY:t(ca(h)*d)};f=V(h)*a[2]/2;g=ca(h)*a[2]/2;o.tooltipPos=\n[a[0]+f*0.7,a[1]+g*0.7];o.half=h<-ya/2||h>ya/2?1:0;o.angle=h;e=I(e,l/2);o.labelPos=[a[0]+f+V(h)*l,a[1]+g+ca(h)*l,a[0]+f+V(h)*e,a[1]+g+ca(h)*e,a[0]+f,a[1]+g,l<0?\"center\":o.half?\"right\":\"left\",h]}},setTooltipPoints:pa,drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g(\"shadow\").add(a.group);n(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g(\"shadow\").add(a.shadowGroup);c=h.sliced?\nh.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(r(g,c)):h.graphic=d=b.arc(g).setRadialReference(a.center).attr(h.pointAttr[h.selected?\"select\":\"\"]).attr({\"stroke-linejoin\":\"round\"}).attr(c).add(a.group).shadow(e,f);h.visible===!1&&h.setVisible(!1)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawDataLabels:function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=o(e.connectorPadding,10),g=o(e.connectorWidth,1),\nh=d.plotWidth,d=d.plotHeight,i,j,k=o(e.softConnector,!0),l=e.distance,m=a.center,p=m[2]/2,q=m[1],u=l>0,r,w,v,x,C=[[],[]],y,z,E,H,B,D=[0,0,0,0],I=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){Q.prototype.drawDataLabels.apply(a);n(b,function(a){a.dataLabel&&C[a.half].push(a)});for(H=0;!x&&b[H];)x=b[H]&&b[H].dataLabel&&(b[H].dataLabel.getBBox().height||21),H++;for(H=2;H--;){var b=[],K=[],G=C[H],J=G.length,F;a.sortByAngle(G,H-0.5);if(l>0){for(B=q-p-l;B<=q+p+l;B+=x)b.push(B);\nw=b.length;if(J>w){c=[].concat(G);c.sort(I);for(B=J;B--;)c[B].rank=B;for(B=J;B--;)G[B].rank>=w&&G.splice(B,1);J=G.length}for(B=0;B<J;B++){c=G[B];v=c.labelPos;c=9999;var O,M;for(M=0;M<w;M++)O=N(b[M]-v[1]),O<c&&(c=O,F=M);if(F<B&&b[B]!==null)F=B;else for(w<J-B+F&&b[B]!==null&&(F=w-J+B);b[F]===null;)F++;K.push({i:F,y:b[F]});b[F]=null}K.sort(I)}for(B=0;B<J;B++){c=G[B];v=c.labelPos;r=c.dataLabel;E=c.visible===!1?\"hidden\":\"visible\";c=v[1];if(l>0){if(w=K.pop(),F=w.i,z=w.y,c>z&&b[F+1]!==null||c<z&&b[F-1]!==\nnull)z=c}else z=c;y=e.justify?m[0]+(H?-1:1)*(p+l):a.getX(F===0||F===b.length-1?c:z,H);r._attr={visibility:E,align:v[6]};r._pos={x:y+e.x+({left:f,right:-f}[v[6]]||0),y:z+e.y-10};r.connX=y;r.connY=z;if(this.options.size===null)w=r.width,y-w<f?D[3]=s(t(w-y+f),D[3]):y+w>h-f&&(D[1]=s(t(y+w-h+f),D[1])),z-x/2<0?D[0]=s(t(-z+x/2),D[0]):z+x/2>d&&(D[2]=s(t(z+x/2-d),D[2]))}}if(va(D)===0||this.verifyDataLabelOverflow(D))this.placeDataLabels(),u&&g&&n(this.points,function(b){i=b.connector;v=b.labelPos;if((r=b.dataLabel)&&\nr._pos)E=r._attr.visibility,y=r.connX,z=r.connY,j=k?[\"M\",y+(v[6]===\"left\"?5:-5),z,\"C\",y,z,2*v[2]-v[4],2*v[3]-v[5],v[2],v[3],\"L\",v[4],v[5]]:[\"M\",y+(v[6]===\"left\"?5:-5),z,\"L\",v[2],v[3],\"L\",v[4],v[5]],i?(i.animate({d:j}),i.attr(\"visibility\",E)):b.connector=i=a.chart.renderer.path(j).attr({\"stroke-width\":g,stroke:e.connectorColor||b.color||\"#606060\",visibility:E}).add(a.group);else if(i)b.connector=i.destroy()})}},verifyDataLabelOverflow:function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||\n80,f;d[0]!==null?e=s(b[2]-s(a[1],a[3]),c):(e=s(b[2]-a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=s(I(e,b[2]-s(a[0],a[2])),c):(e=s(I(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);e<b[2]?(b[2]=e,this.translate(b),n(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels()):f=!0;return f},placeDataLabels:function(){n(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?\"animate\":\"attr\"](b),a.moved=!0):a&&a.attr({y:-999})})},alignDataLabel:pa,\ndrawTracker:F.prototype.drawTracker,drawLegendSymbol:G.prototype.drawLegendSymbol,getSymbol:pa};X=ha(Q,X);W.pie=X;r(Highcharts,{Axis:db,Chart:yb,Color:ra,Legend:eb,Pointer:xb,Point:Pa,Tick:Ma,Tooltip:wb,Renderer:Va,Series:Q,SVGElement:wa,SVGRenderer:Ha,arrayMin:Ja,arrayMax:va,charts:Ga,dateFormat:Xa,format:Ca,pathAnim:Ab,getOptions:function(){return M},hasBidiBug:Ub,isTouchDevice:Ob,numberFormat:Aa,seriesTypes:W,setOptions:function(a){M=x(M,a);Lb();return M},addEvent:J,removeEvent:aa,createElement:U,\ndiscardElement:Ta,css:K,each:n,extend:r,map:Na,merge:x,pick:o,splat:ja,extendClass:ha,pInt:C,wrap:mb,svg:Z,canvas:$,vml:!Z&&!$,product:\"Highcharts\",version:\"3.0.6\"})})();\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/highcharts.src.js",
    "content": "// ==ClosureCompiler==\n// @compilation_level SIMPLE_OPTIMIZATIONS\n\n/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n *\n * (c) 2009-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console, each, grep */\n\n(function () {\n// encapsulated variables\nvar UNDEFINED,\n\tdoc = document,\n\twin = window,\n\tmath = Math,\n\tmathRound = math.round,\n\tmathFloor = math.floor,\n\tmathCeil = math.ceil,\n\tmathMax = math.max,\n\tmathMin = math.min,\n\tmathAbs = math.abs,\n\tmathCos = math.cos,\n\tmathSin = math.sin,\n\tmathPI = math.PI,\n\tdeg2rad = mathPI * 2 / 360,\n\n\n\t// some variables\n\tuserAgent = navigator.userAgent,\n\tisOpera = win.opera,\n\tisIE = /msie/i.test(userAgent) && !isOpera,\n\tdocMode8 = doc.documentMode === 8,\n\tisWebKit = /AppleWebKit/.test(userAgent),\n\tisFirefox = /Firefox/.test(userAgent),\n\tisTouchDevice = /(Mobile|Android|Windows Phone)/.test(userAgent),\n\tSVG_NS = 'http://www.w3.org/2000/svg',\n\thasSVG = !!doc.createElementNS && !!doc.createElementNS(SVG_NS, 'svg').createSVGRect,\n\thasBidiBug = isFirefox && parseInt(userAgent.split('Firefox/')[1], 10) < 4, // issue #38\n\tuseCanVG = !hasSVG && !isIE && !!doc.createElement('canvas').getContext,\n\tRenderer,\n\thasTouch = doc.documentElement.ontouchstart !== UNDEFINED,\n\tsymbolSizes = {},\n\tidCounter = 0,\n\tgarbageBin,\n\tdefaultOptions,\n\tdateFormat, // function\n\tglobalAnimation,\n\tpathAnim,\n\ttimeUnits,\n\tnoop = function () {},\n\tcharts = [],\n\tPRODUCT = 'Highcharts',\n\tVERSION = '3.0.6',\n\n\t// some constants for frequently used strings\n\tDIV = 'div',\n\tABSOLUTE = 'absolute',\n\tRELATIVE = 'relative',\n\tHIDDEN = 'hidden',\n\tPREFIX = 'highcharts-',\n\tVISIBLE = 'visible',\n\tPX = 'px',\n\tNONE = 'none',\n\tM = 'M',\n\tL = 'L',\n\t/*\n\t * Empirical lowest possible opacities for TRACKER_FILL\n\t * IE6: 0.002\n\t * IE7: 0.002\n\t * IE8: 0.002\n\t * IE9: 0.00000000001 (unlimited)\n\t * IE10: 0.0001 (exporting only)\n\t * FF: 0.00000000001 (unlimited)\n\t * Chrome: 0.000001\n\t * Safari: 0.000001\n\t * Opera: 0.00000000001 (unlimited)\n\t */\n\tTRACKER_FILL = 'rgba(192,192,192,' + (hasSVG ? 0.0001 : 0.002) + ')', // invisible but clickable\n\t//TRACKER_FILL = 'rgba(192,192,192,0.5)',\n\tNORMAL_STATE = '',\n\tHOVER_STATE = 'hover',\n\tSELECT_STATE = 'select',\n\tMILLISECOND = 'millisecond',\n\tSECOND = 'second',\n\tMINUTE = 'minute',\n\tHOUR = 'hour',\n\tDAY = 'day',\n\tWEEK = 'week',\n\tMONTH = 'month',\n\tYEAR = 'year',\n\n\t// constants for attributes\n\tLINEAR_GRADIENT = 'linearGradient',\n\tSTOPS = 'stops',\n\tSTROKE_WIDTH = 'stroke-width',\n\n\t// time methods, changed based on whether or not UTC is used\n\tmakeTime,\n\tgetMinutes,\n\tgetHours,\n\tgetDay,\n\tgetDate,\n\tgetMonth,\n\tgetFullYear,\n\tsetMinutes,\n\tsetHours,\n\tsetDate,\n\tsetMonth,\n\tsetFullYear,\n\n\n\t// lookup over the types and the associated classes\n\tseriesTypes = {};\n\n// The Highcharts namespace\nwin.Highcharts = win.Highcharts ? error(16, true) : {};\n\n/**\n * Extend an object with the members of another\n * @param {Object} a The object to be extended\n * @param {Object} b The object to add to the first one\n */\nfunction extend(a, b) {\n\tvar n;\n\tif (!a) {\n\t\ta = {};\n\t}\n\tfor (n in b) {\n\t\ta[n] = b[n];\n\t}\n\treturn a;\n}\n\t\n/**\n * Deep merge two or more objects and return a third object.\n * Previously this function redirected to jQuery.extend(true), but this had two limitations.\n * First, it deep merged arrays, which lead to workarounds in Highcharts. Second,\n * it copied properties from extended prototypes. \n */\nfunction merge() {\n\tvar i,\n\t\tlen = arguments.length,\n\t\tret = {},\n\t\tdoCopy = function (copy, original) {\n\t\t\tvar value, key;\n\n\t\t\t// An object is replacing a primitive\n\t\t\tif (typeof copy !== 'object') {\n\t\t\t\tcopy = {};\n\t\t\t}\n\n\t\t\tfor (key in original) {\n\t\t\t\tif (original.hasOwnProperty(key)) {\n\t\t\t\t\tvalue = original[key];\n\n\t\t\t\t\t// Copy the contents of objects, but not arrays or DOM nodes\n\t\t\t\t\tif (value && typeof value === 'object' && Object.prototype.toString.call(value) !== '[object Array]'\n\t\t\t\t\t\t\t&& typeof value.nodeType !== 'number') {\n\t\t\t\t\t\tcopy[key] = doCopy(copy[key] || {}, value);\n\t\t\t\t\n\t\t\t\t\t// Primitives and arrays are copied over directly\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcopy[key] = original[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t// For each argument, extend the return\n\tfor (i = 0; i < len; i++) {\n\t\tret = doCopy(ret, arguments[i]);\n\t}\n\n\treturn ret;\n}\n\n/**\n * Take an array and turn into a hash with even number arguments as keys and odd numbers as\n * values. Allows creating constants for commonly used style properties, attributes etc.\n * Avoid it in performance critical situations like looping\n */\nfunction hash() {\n\tvar i = 0,\n\t\targs = arguments,\n\t\tlength = args.length,\n\t\tobj = {};\n\tfor (; i < length; i++) {\n\t\tobj[args[i++]] = args[i];\n\t}\n\treturn obj;\n}\n\n/**\n * Shortcut for parseInt\n * @param {Object} s\n * @param {Number} mag Magnitude\n */\nfunction pInt(s, mag) {\n\treturn parseInt(s, mag || 10);\n}\n\n/**\n * Check for string\n * @param {Object} s\n */\nfunction isString(s) {\n\treturn typeof s === 'string';\n}\n\n/**\n * Check for object\n * @param {Object} obj\n */\nfunction isObject(obj) {\n\treturn typeof obj === 'object';\n}\n\n/**\n * Check for array\n * @param {Object} obj\n */\nfunction isArray(obj) {\n\treturn Object.prototype.toString.call(obj) === '[object Array]';\n}\n\n/**\n * Check for number\n * @param {Object} n\n */\nfunction isNumber(n) {\n\treturn typeof n === 'number';\n}\n\nfunction log2lin(num) {\n\treturn math.log(num) / math.LN10;\n}\nfunction lin2log(num) {\n\treturn math.pow(10, num);\n}\n\n/**\n * Remove last occurence of an item from an array\n * @param {Array} arr\n * @param {Mixed} item\n */\nfunction erase(arr, item) {\n\tvar i = arr.length;\n\twhile (i--) {\n\t\tif (arr[i] === item) {\n\t\t\tarr.splice(i, 1);\n\t\t\tbreak;\n\t\t}\n\t}\n\t//return arr;\n}\n\n/**\n * Returns true if the object is not null or undefined. Like MooTools' $.defined.\n * @param {Object} obj\n */\nfunction defined(obj) {\n\treturn obj !== UNDEFINED && obj !== null;\n}\n\n/**\n * Set or get an attribute or an object of attributes. Can't use jQuery attr because\n * it attempts to set expando properties on the SVG element, which is not allowed.\n *\n * @param {Object} elem The DOM element to receive the attribute(s)\n * @param {String|Object} prop The property or an abject of key-value pairs\n * @param {String} value The value if a single property is set\n */\nfunction attr(elem, prop, value) {\n\tvar key,\n\t\tsetAttribute = 'setAttribute',\n\t\tret;\n\n\t// if the prop is a string\n\tif (isString(prop)) {\n\t\t// set the value\n\t\tif (defined(value)) {\n\n\t\t\telem[setAttribute](prop, value);\n\n\t\t// get the value\n\t\t} else if (elem && elem.getAttribute) { // elem not defined when printing pie demo...\n\t\t\tret = elem.getAttribute(prop);\n\t\t}\n\n\t// else if prop is defined, it is a hash of key/value pairs\n\t} else if (defined(prop) && isObject(prop)) {\n\t\tfor (key in prop) {\n\t\t\telem[setAttribute](key, prop[key]);\n\t\t}\n\t}\n\treturn ret;\n}\n/**\n * Check if an element is an array, and if not, make it into an array. Like\n * MooTools' $.splat.\n */\nfunction splat(obj) {\n\treturn isArray(obj) ? obj : [obj];\n}\n\n\n/**\n * Return the first value that is defined. Like MooTools' $.pick.\n */\nfunction pick() {\n\tvar args = arguments,\n\t\ti,\n\t\targ,\n\t\tlength = args.length;\n\tfor (i = 0; i < length; i++) {\n\t\targ = args[i];\n\t\tif (typeof arg !== 'undefined' && arg !== null) {\n\t\t\treturn arg;\n\t\t}\n\t}\n}\n\n/**\n * Set CSS on a given element\n * @param {Object} el\n * @param {Object} styles Style object with camel case property names\n */\nfunction css(el, styles) {\n\tif (isIE) {\n\t\tif (styles && styles.opacity !== UNDEFINED) {\n\t\t\tstyles.filter = 'alpha(opacity=' + (styles.opacity * 100) + ')';\n\t\t}\n\t}\n\textend(el.style, styles);\n}\n\n/**\n * Utility function to create element with attributes and styles\n * @param {Object} tag\n * @param {Object} attribs\n * @param {Object} styles\n * @param {Object} parent\n * @param {Object} nopad\n */\nfunction createElement(tag, attribs, styles, parent, nopad) {\n\tvar el = doc.createElement(tag);\n\tif (attribs) {\n\t\textend(el, attribs);\n\t}\n\tif (nopad) {\n\t\tcss(el, {padding: 0, border: NONE, margin: 0});\n\t}\n\tif (styles) {\n\t\tcss(el, styles);\n\t}\n\tif (parent) {\n\t\tparent.appendChild(el);\n\t}\n\treturn el;\n}\n\n/**\n * Extend a prototyped class by new members\n * @param {Object} parent\n * @param {Object} members\n */\nfunction extendClass(parent, members) {\n\tvar object = function () {};\n\tobject.prototype = new parent();\n\textend(object.prototype, members);\n\treturn object;\n}\n\n/**\n * Format a number and return a string based on input settings\n * @param {Number} number The input number to format\n * @param {Number} decimals The amount of decimals\n * @param {String} decPoint The decimal point, defaults to the one given in the lang options\n * @param {String} thousandsSep The thousands separator, defaults to the one given in the lang options\n */\nfunction numberFormat(number, decimals, decPoint, thousandsSep) {\n\tvar lang = defaultOptions.lang,\n\t\t// http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_number_format/\n\t\tn = +number || 0,\n\t\tc = decimals === -1 ?\n\t\t\t(n.toString().split('.')[1] || '').length : // preserve decimals\n\t\t\t(isNaN(decimals = mathAbs(decimals)) ? 2 : decimals),\n\t\td = decPoint === undefined ? lang.decimalPoint : decPoint,\n\t\tt = thousandsSep === undefined ? lang.thousandsSep : thousandsSep,\n\t\ts = n < 0 ? \"-\" : \"\",\n\t\ti = String(pInt(n = mathAbs(n).toFixed(c))),\n\t\tj = i.length > 3 ? i.length % 3 : 0;\n\n\treturn s + (j ? i.substr(0, j) + t : \"\") + i.substr(j).replace(/(\\d{3})(?=\\d)/g, \"$1\" + t) +\n\t\t(c ? d + mathAbs(n - i).toFixed(c).slice(2) : \"\");\n}\n\n/**\n * Pad a string to a given length by adding 0 to the beginning\n * @param {Number} number\n * @param {Number} length\n */\nfunction pad(number, length) {\n\t// Create an array of the remaining length +1 and join it with 0's\n\treturn new Array((length || 2) + 1 - String(number).length).join(0) + number;\n}\n\n/**\n * Wrap a method with extended functionality, preserving the original function\n * @param {Object} obj The context object that the method belongs to \n * @param {String} method The name of the method to extend\n * @param {Function} func A wrapper function callback. This function is called with the same arguments\n * as the original function, except that the original function is unshifted and passed as the first \n * argument. \n */\nfunction wrap(obj, method, func) {\n\tvar proceed = obj[method];\n\tobj[method] = function () {\n\t\tvar args = Array.prototype.slice.call(arguments);\n\t\targs.unshift(proceed);\n\t\treturn func.apply(this, args);\n\t};\n}\n\n/**\n * Based on http://www.php.net/manual/en/function.strftime.php\n * @param {String} format\n * @param {Number} timestamp\n * @param {Boolean} capitalize\n */\ndateFormat = function (format, timestamp, capitalize) {\n\tif (!defined(timestamp) || isNaN(timestamp)) {\n\t\treturn 'Invalid date';\n\t}\n\tformat = pick(format, '%Y-%m-%d %H:%M:%S');\n\n\tvar date = new Date(timestamp),\n\t\tkey, // used in for constuct below\n\t\t// get the basic time values\n\t\thours = date[getHours](),\n\t\tday = date[getDay](),\n\t\tdayOfMonth = date[getDate](),\n\t\tmonth = date[getMonth](),\n\t\tfullYear = date[getFullYear](),\n\t\tlang = defaultOptions.lang,\n\t\tlangWeekdays = lang.weekdays,\n\n\t\t// List all format keys. Custom formats can be added from the outside. \n\t\treplacements = extend({\n\n\t\t\t// Day\n\t\t\t'a': langWeekdays[day].substr(0, 3), // Short weekday, like 'Mon'\n\t\t\t'A': langWeekdays[day], // Long weekday, like 'Monday'\n\t\t\t'd': pad(dayOfMonth), // Two digit day of the month, 01 to 31\n\t\t\t'e': dayOfMonth, // Day of the month, 1 through 31\n\n\t\t\t// Week (none implemented)\n\t\t\t//'W': weekNumber(),\n\n\t\t\t// Month\n\t\t\t'b': lang.shortMonths[month], // Short month, like 'Jan'\n\t\t\t'B': lang.months[month], // Long month, like 'January'\n\t\t\t'm': pad(month + 1), // Two digit month number, 01 through 12\n\n\t\t\t// Year\n\t\t\t'y': fullYear.toString().substr(2, 2), // Two digits year, like 09 for 2009\n\t\t\t'Y': fullYear, // Four digits year, like 2009\n\n\t\t\t// Time\n\t\t\t'H': pad(hours), // Two digits hours in 24h format, 00 through 23\n\t\t\t'I': pad((hours % 12) || 12), // Two digits hours in 12h format, 00 through 11\n\t\t\t'l': (hours % 12) || 12, // Hours in 12h format, 1 through 12\n\t\t\t'M': pad(date[getMinutes]()), // Two digits minutes, 00 through 59\n\t\t\t'p': hours < 12 ? 'AM' : 'PM', // Upper case AM or PM\n\t\t\t'P': hours < 12 ? 'am' : 'pm', // Lower case AM or PM\n\t\t\t'S': pad(date.getSeconds()), // Two digits seconds, 00 through  59\n\t\t\t'L': pad(mathRound(timestamp % 1000), 3) // Milliseconds (naming from Ruby)\n\t\t}, Highcharts.dateFormats);\n\n\n\t// do the replaces\n\tfor (key in replacements) {\n\t\twhile (format.indexOf('%' + key) !== -1) { // regex would do it in one line, but this is faster\n\t\t\tformat = format.replace('%' + key, typeof replacements[key] === 'function' ? replacements[key](timestamp) : replacements[key]);\n\t\t}\n\t}\n\n\t// Optionally capitalize the string and return\n\treturn capitalize ? format.substr(0, 1).toUpperCase() + format.substr(1) : format;\n};\n\n/** \n * Format a single variable. Similar to sprintf, without the % prefix.\n */\nfunction formatSingle(format, val) {\n\tvar floatRegex = /f$/,\n\t\tdecRegex = /\\.([0-9])/,\n\t\tlang = defaultOptions.lang,\n\t\tdecimals;\n\n\tif (floatRegex.test(format)) { // float\n\t\tdecimals = format.match(decRegex);\n\t\tdecimals = decimals ? decimals[1] : -1;\n\t\tval = numberFormat(\n\t\t\tval,\n\t\t\tdecimals,\n\t\t\tlang.decimalPoint,\n\t\t\tformat.indexOf(',') > -1 ? lang.thousandsSep : ''\n\t\t);\n\t} else {\n\t\tval = dateFormat(format, val);\n\t}\n\treturn val;\n}\n\n/**\n * Format a string according to a subset of the rules of Python's String.format method.\n */\nfunction format(str, ctx) {\n\tvar splitter = '{',\n\t\tisInside = false,\n\t\tsegment,\n\t\tvalueAndFormat,\n\t\tpath,\n\t\ti,\n\t\tlen,\n\t\tret = [],\n\t\tval,\n\t\tindex;\n\t\n\twhile ((index = str.indexOf(splitter)) !== -1) {\n\t\t\n\t\tsegment = str.slice(0, index);\n\t\tif (isInside) { // we're on the closing bracket looking back\n\t\t\t\n\t\t\tvalueAndFormat = segment.split(':');\n\t\t\tpath = valueAndFormat.shift().split('.'); // get first and leave format\n\t\t\tlen = path.length;\n\t\t\tval = ctx;\n\n\t\t\t// Assign deeper paths\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tval = val[path[i]];\n\t\t\t}\n\n\t\t\t// Format the replacement\n\t\t\tif (valueAndFormat.length) {\n\t\t\t\tval = formatSingle(valueAndFormat.join(':'), val);\n\t\t\t}\n\n\t\t\t// Push the result and advance the cursor\n\t\t\tret.push(val);\n\t\t\t\n\t\t} else {\n\t\t\tret.push(segment);\n\t\t\t\n\t\t}\n\t\tstr = str.slice(index + 1); // the rest\n\t\tisInside = !isInside; // toggle\n\t\tsplitter = isInside ? '}' : '{'; // now look for next matching bracket\n\t}\n\tret.push(str);\n\treturn ret.join('');\n}\n\n/**\n * Get the magnitude of a number\n */\nfunction getMagnitude(num) {\n\treturn math.pow(10, mathFloor(math.log(num) / math.LN10));\n}\n\n/**\n * Take an interval and normalize it to multiples of 1, 2, 2.5 and 5\n * @param {Number} interval\n * @param {Array} multiples\n * @param {Number} magnitude\n * @param {Object} options\n */\nfunction normalizeTickInterval(interval, multiples, magnitude, options) {\n\tvar normalized, i;\n\n\t// round to a tenfold of 1, 2, 2.5 or 5\n\tmagnitude = pick(magnitude, 1);\n\tnormalized = interval / magnitude;\n\n\t// multiples for a linear scale\n\tif (!multiples) {\n\t\tmultiples = [1, 2, 2.5, 5, 10];\n\n\t\t// the allowDecimals option\n\t\tif (options && options.allowDecimals === false) {\n\t\t\tif (magnitude === 1) {\n\t\t\t\tmultiples = [1, 2, 5, 10];\n\t\t\t} else if (magnitude <= 0.1) {\n\t\t\t\tmultiples = [1 / magnitude];\n\t\t\t}\n\t\t}\n\t}\n\n\t// normalize the interval to the nearest multiple\n\tfor (i = 0; i < multiples.length; i++) {\n\t\tinterval = multiples[i];\n\t\tif (normalized <= (multiples[i] + (multiples[i + 1] || multiples[i])) / 2) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// multiply back to the correct magnitude\n\tinterval *= magnitude;\n\n\treturn interval;\n}\n\n/**\n * Get a normalized tick interval for dates. Returns a configuration object with\n * unit range (interval), count and name. Used to prepare data for getTimeTicks. \n * Previously this logic was part of getTimeTicks, but as getTimeTicks now runs\n * of segments in stock charts, the normalizing logic was extracted in order to \n * prevent it for running over again for each segment having the same interval. \n * #662, #697.\n */\nfunction normalizeTimeTickInterval(tickInterval, unitsOption) {\n\tvar units = unitsOption || [[\n\t\t\t\tMILLISECOND, // unit name\n\t\t\t\t[1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples\n\t\t\t], [\n\t\t\t\tSECOND,\n\t\t\t\t[1, 2, 5, 10, 15, 30]\n\t\t\t], [\n\t\t\t\tMINUTE,\n\t\t\t\t[1, 2, 5, 10, 15, 30]\n\t\t\t], [\n\t\t\t\tHOUR,\n\t\t\t\t[1, 2, 3, 4, 6, 8, 12]\n\t\t\t], [\n\t\t\t\tDAY,\n\t\t\t\t[1, 2]\n\t\t\t], [\n\t\t\t\tWEEK,\n\t\t\t\t[1, 2]\n\t\t\t], [\n\t\t\t\tMONTH,\n\t\t\t\t[1, 2, 3, 4, 6]\n\t\t\t], [\n\t\t\t\tYEAR,\n\t\t\t\tnull\n\t\t\t]],\n\t\tunit = units[units.length - 1], // default unit is years\n\t\tinterval = timeUnits[unit[0]],\n\t\tmultiples = unit[1],\n\t\tcount,\n\t\ti;\n\t\t\n\t// loop through the units to find the one that best fits the tickInterval\n\tfor (i = 0; i < units.length; i++) {\n\t\tunit = units[i];\n\t\tinterval = timeUnits[unit[0]];\n\t\tmultiples = unit[1];\n\n\n\t\tif (units[i + 1]) {\n\t\t\t// lessThan is in the middle between the highest multiple and the next unit.\n\t\t\tvar lessThan = (interval * multiples[multiples.length - 1] +\n\t\t\t\t\t\ttimeUnits[units[i + 1][0]]) / 2;\n\n\t\t\t// break and keep the current unit\n\t\t\tif (tickInterval <= lessThan) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// prevent 2.5 years intervals, though 25, 250 etc. are allowed\n\tif (interval === timeUnits[YEAR] && tickInterval < 5 * interval) {\n\t\tmultiples = [1, 2, 5];\n\t}\n\n\t// get the count\n\tcount = normalizeTickInterval(\n\t\ttickInterval / interval, \n\t\tmultiples,\n\t\tunit[0] === YEAR ? getMagnitude(tickInterval / interval) : 1 // #1913\n\t);\n\t\n\treturn {\n\t\tunitRange: interval,\n\t\tcount: count,\n\t\tunitName: unit[0]\n\t};\n}\n\n/**\n * Set the tick positions to a time unit that makes sense, for example\n * on the first of each month or on every Monday. Return an array\n * with the time positions. Used in datetime axes as well as for grouping\n * data on a datetime axis.\n *\n * @param {Object} normalizedInterval The interval in axis values (ms) and the count\n * @param {Number} min The minimum in axis values\n * @param {Number} max The maximum in axis values\n * @param {Number} startOfWeek\n */\nfunction getTimeTicks(normalizedInterval, min, max, startOfWeek) {\n\tvar tickPositions = [],\n\t\ti,\n\t\thigherRanks = {},\n\t\tuseUTC = defaultOptions.global.useUTC,\n\t\tminYear, // used in months and years as a basis for Date.UTC()\n\t\tminDate = new Date(min),\n\t\tinterval = normalizedInterval.unitRange,\n\t\tcount = normalizedInterval.count;\n\n\tif (defined(min)) { // #1300\n\t\tif (interval >= timeUnits[SECOND]) { // second\n\t\t\tminDate.setMilliseconds(0);\n\t\t\tminDate.setSeconds(interval >= timeUnits[MINUTE] ? 0 :\n\t\t\t\tcount * mathFloor(minDate.getSeconds() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[MINUTE]) { // minute\n\t\t\tminDate[setMinutes](interval >= timeUnits[HOUR] ? 0 :\n\t\t\t\tcount * mathFloor(minDate[getMinutes]() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[HOUR]) { // hour\n\t\t\tminDate[setHours](interval >= timeUnits[DAY] ? 0 :\n\t\t\t\tcount * mathFloor(minDate[getHours]() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[DAY]) { // day\n\t\t\tminDate[setDate](interval >= timeUnits[MONTH] ? 1 :\n\t\t\t\tcount * mathFloor(minDate[getDate]() / count));\n\t\t}\n\t\n\t\tif (interval >= timeUnits[MONTH]) { // month\n\t\t\tminDate[setMonth](interval >= timeUnits[YEAR] ? 0 :\n\t\t\t\tcount * mathFloor(minDate[getMonth]() / count));\n\t\t\tminYear = minDate[getFullYear]();\n\t\t}\n\t\n\t\tif (interval >= timeUnits[YEAR]) { // year\n\t\t\tminYear -= minYear % count;\n\t\t\tminDate[setFullYear](minYear);\n\t\t}\n\t\n\t\t// week is a special case that runs outside the hierarchy\n\t\tif (interval === timeUnits[WEEK]) {\n\t\t\t// get start of current week, independent of count\n\t\t\tminDate[setDate](minDate[getDate]() - minDate[getDay]() +\n\t\t\t\tpick(startOfWeek, 1));\n\t\t}\n\t\n\t\n\t\t// get tick positions\n\t\ti = 1;\n\t\tminYear = minDate[getFullYear]();\n\t\tvar time = minDate.getTime(),\n\t\t\tminMonth = minDate[getMonth](),\n\t\t\tminDateDate = minDate[getDate](),\n\t\t\ttimezoneOffset = useUTC ? \n\t\t\t\t0 : \n\t\t\t\t(24 * 3600 * 1000 + minDate.getTimezoneOffset() * 60 * 1000) % (24 * 3600 * 1000); // #950\n\t\n\t\t// iterate and add tick positions at appropriate values\n\t\twhile (time < max) {\n\t\t\ttickPositions.push(time);\n\t\n\t\t\t// if the interval is years, use Date.UTC to increase years\n\t\t\tif (interval === timeUnits[YEAR]) {\n\t\t\t\ttime = makeTime(minYear + i * count, 0);\n\t\n\t\t\t// if the interval is months, use Date.UTC to increase months\n\t\t\t} else if (interval === timeUnits[MONTH]) {\n\t\t\t\ttime = makeTime(minYear, minMonth + i * count);\n\t\n\t\t\t// if we're using global time, the interval is not fixed as it jumps\n\t\t\t// one hour at the DST crossover\n\t\t\t} else if (!useUTC && (interval === timeUnits[DAY] || interval === timeUnits[WEEK])) {\n\t\t\t\ttime = makeTime(minYear, minMonth, minDateDate +\n\t\t\t\t\ti * count * (interval === timeUnits[DAY] ? 1 : 7));\n\t\n\t\t\t// else, the interval is fixed and we use simple addition\n\t\t\t} else {\n\t\t\t\ttime += interval * count;\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t}\n\t\n\t\t// push the last time\n\t\ttickPositions.push(time);\n\n\n\t\t// mark new days if the time is dividible by day (#1649, #1760)\n\t\teach(grep(tickPositions, function (time) {\n\t\t\treturn interval <= timeUnits[HOUR] && time % timeUnits[DAY] === timezoneOffset;\n\t\t}), function (time) {\n\t\t\thigherRanks[time] = DAY;\n\t\t});\n\t}\n\n\n\t// record information on the chosen unit - for dynamic label formatter\n\ttickPositions.info = extend(normalizedInterval, {\n\t\thigherRanks: higherRanks,\n\t\ttotalRange: interval * count\n\t});\n\n\treturn tickPositions;\n}\n\n/**\n * Helper class that contains variuos counters that are local to the chart.\n */\nfunction ChartCounters() {\n\tthis.color = 0;\n\tthis.symbol = 0;\n}\n\nChartCounters.prototype =  {\n\t/**\n\t * Wraps the color counter if it reaches the specified length.\n\t */\n\twrapColor: function (length) {\n\t\tif (this.color >= length) {\n\t\t\tthis.color = 0;\n\t\t}\n\t},\n\n\t/**\n\t * Wraps the symbol counter if it reaches the specified length.\n\t */\n\twrapSymbol: function (length) {\n\t\tif (this.symbol >= length) {\n\t\t\tthis.symbol = 0;\n\t\t}\n\t}\n};\n\n\n/**\n * Utility method that sorts an object array and keeping the order of equal items.\n * ECMA script standard does not specify the behaviour when items are equal.\n */\nfunction stableSort(arr, sortFunction) {\n\tvar length = arr.length,\n\t\tsortValue,\n\t\ti;\n\n\t// Add index to each item\n\tfor (i = 0; i < length; i++) {\n\t\tarr[i].ss_i = i; // stable sort index\n\t}\n\n\tarr.sort(function (a, b) {\n\t\tsortValue = sortFunction(a, b);\n\t\treturn sortValue === 0 ? a.ss_i - b.ss_i : sortValue;\n\t});\n\n\t// Remove index from items\n\tfor (i = 0; i < length; i++) {\n\t\tdelete arr[i].ss_i; // stable sort index\n\t}\n}\n\n/**\n * Non-recursive method to find the lowest member of an array. Math.min raises a maximum\n * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This\n * method is slightly slower, but safe.\n */\nfunction arrayMin(data) {\n\tvar i = data.length,\n\t\tmin = data[0];\n\n\twhile (i--) {\n\t\tif (data[i] < min) {\n\t\t\tmin = data[i];\n\t\t}\n\t}\n\treturn min;\n}\n\n/**\n * Non-recursive method to find the lowest member of an array. Math.min raises a maximum\n * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This\n * method is slightly slower, but safe.\n */\nfunction arrayMax(data) {\n\tvar i = data.length,\n\t\tmax = data[0];\n\n\twhile (i--) {\n\t\tif (data[i] > max) {\n\t\t\tmax = data[i];\n\t\t}\n\t}\n\treturn max;\n}\n\n/**\n * Utility method that destroys any SVGElement or VMLElement that are properties on the given object.\n * It loops all properties and invokes destroy if there is a destroy method. The property is\n * then delete'ed.\n * @param {Object} The object to destroy properties on\n * @param {Object} Exception, do not destroy this property, only delete it.\n */\nfunction destroyObjectProperties(obj, except) {\n\tvar n;\n\tfor (n in obj) {\n\t\t// If the object is non-null and destroy is defined\n\t\tif (obj[n] && obj[n] !== except && obj[n].destroy) {\n\t\t\t// Invoke the destroy\n\t\t\tobj[n].destroy();\n\t\t}\n\n\t\t// Delete the property from the object.\n\t\tdelete obj[n];\n\t}\n}\n\n\n/**\n * Discard an element by moving it to the bin and delete\n * @param {Object} The HTML node to discard\n */\nfunction discardElement(element) {\n\t// create a garbage bin element, not part of the DOM\n\tif (!garbageBin) {\n\t\tgarbageBin = createElement(DIV);\n\t}\n\n\t// move the node and empty bin\n\tif (element) {\n\t\tgarbageBin.appendChild(element);\n\t}\n\tgarbageBin.innerHTML = '';\n}\n\n/**\n * Provide error messages for debugging, with links to online explanation \n */\nfunction error(code, stop) {\n\tvar msg = 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code;\n\tif (stop) {\n\t\tthrow msg;\n\t} else if (win.console) {\n\t\tconsole.log(msg);\n\t}\n}\n\n/**\n * Fix JS round off float errors\n * @param {Number} num\n */\nfunction correctFloat(num) {\n\treturn parseFloat(\n\t\tnum.toPrecision(14)\n\t);\n}\n\n/**\n * Set the global animation to either a given value, or fall back to the\n * given chart's animation option\n * @param {Object} animation\n * @param {Object} chart\n */\nfunction setAnimation(animation, chart) {\n\tglobalAnimation = pick(animation, chart.animation);\n}\n\n/**\n * The time unit lookup\n */\n/*jslint white: true*/\ntimeUnits = hash(\n\tMILLISECOND, 1,\n\tSECOND, 1000,\n\tMINUTE, 60000,\n\tHOUR, 3600000,\n\tDAY, 24 * 3600000,\n\tWEEK, 7 * 24 * 3600000,\n\tMONTH, 31 * 24 * 3600000,\n\tYEAR, 31556952000\n);\n/*jslint white: false*/\n/**\n * Path interpolation algorithm used across adapters\n */\npathAnim = {\n\t/**\n\t * Prepare start and end values so that the path can be animated one to one\n\t */\n\tinit: function (elem, fromD, toD) {\n\t\tfromD = fromD || '';\n\t\tvar shift = elem.shift,\n\t\t\tbezier = fromD.indexOf('C') > -1,\n\t\t\tnumParams = bezier ? 7 : 3,\n\t\t\tendLength,\n\t\t\tslice,\n\t\t\ti,\n\t\t\tstart = fromD.split(' '),\n\t\t\tend = [].concat(toD), // copy\n\t\t\tstartBaseLine,\n\t\t\tendBaseLine,\n\t\t\tsixify = function (arr) { // in splines make move points have six parameters like bezier curves\n\t\t\t\ti = arr.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tif (arr[i] === M) {\n\t\t\t\t\t\tarr.splice(i + 1, 0, arr[i + 1], arr[i + 2], arr[i + 1], arr[i + 2]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tif (bezier) {\n\t\t\tsixify(start);\n\t\t\tsixify(end);\n\t\t}\n\n\t\t// pull out the base lines before padding\n\t\tif (elem.isArea) {\n\t\t\tstartBaseLine = start.splice(start.length - 6, 6);\n\t\t\tendBaseLine = end.splice(end.length - 6, 6);\n\t\t}\n\n\t\t// if shifting points, prepend a dummy point to the end path\n\t\tif (shift <= end.length / numParams && start.length === end.length) {\n\t\t\twhile (shift--) {\n\t\t\t\tend = [].concat(end).splice(0, numParams).concat(end);\n\t\t\t}\n\t\t}\n\t\telem.shift = 0; // reset for following animations\n\n\t\t// copy and append last point until the length matches the end length\n\t\tif (start.length) {\n\t\t\tendLength = end.length;\n\t\t\twhile (start.length < endLength) {\n\n\t\t\t\t//bezier && sixify(start);\n\t\t\t\tslice = [].concat(start).splice(start.length - numParams, numParams);\n\t\t\t\tif (bezier) { // disable first control point\n\t\t\t\t\tslice[numParams - 6] = slice[numParams - 2];\n\t\t\t\t\tslice[numParams - 5] = slice[numParams - 1];\n\t\t\t\t}\n\t\t\t\tstart = start.concat(slice);\n\t\t\t}\n\t\t}\n\n\t\tif (startBaseLine) { // append the base lines for areas\n\t\t\tstart = start.concat(startBaseLine);\n\t\t\tend = end.concat(endBaseLine);\n\t\t}\n\t\treturn [start, end];\n\t},\n\n\t/**\n\t * Interpolate each value of the path and return the array\n\t */\n\tstep: function (start, end, pos, complete) {\n\t\tvar ret = [],\n\t\t\ti = start.length,\n\t\t\tstartVal;\n\n\t\tif (pos === 1) { // land on the final path without adjustment points appended in the ends\n\t\t\tret = complete;\n\n\t\t} else if (i === end.length && pos < 1) {\n\t\t\twhile (i--) {\n\t\t\t\tstartVal = parseFloat(start[i]);\n\t\t\t\tret[i] =\n\t\t\t\t\tisNaN(startVal) ? // a letter instruction like M or L\n\t\t\t\t\t\tstart[i] :\n\t\t\t\t\t\tpos * (parseFloat(end[i] - startVal)) + startVal;\n\n\t\t\t}\n\t\t} else { // if animation is finished or length not matching, land on right value\n\t\t\tret = end;\n\t\t}\n\t\treturn ret;\n\t}\n};\n\n(function ($) {\n\t/**\n\t * The default HighchartsAdapter for jQuery\n\t */\n\twin.HighchartsAdapter = win.HighchartsAdapter || ($ && {\n\t\t\n\t\t/**\n\t\t * Initialize the adapter by applying some extensions to jQuery\n\t\t */\n\t\tinit: function (pathAnim) {\n\t\t\t\n\t\t\t// extend the animate function to allow SVG animations\n\t\t\tvar Fx = $.fx,\n\t\t\t\tStep = Fx.step,\n\t\t\t\tdSetter,\n\t\t\t\tTween = $.Tween,\n\t\t\t\tpropHooks = Tween && Tween.propHooks,\n\t\t\t\topacityHook = $.cssHooks.opacity;\n\t\t\t\n\t\t\t/*jslint unparam: true*//* allow unused param x in this function */\n\t\t\t$.extend($.easing, {\n\t\t\t\teaseOutQuad: function (x, t, b, c, d) {\n\t\t\t\t\treturn -c * (t /= d) * (t - 2) + b;\n\t\t\t\t}\n\t\t\t});\n\t\t\t/*jslint unparam: false*/\n\t\t\n\t\t\t// extend some methods to check for elem.attr, which means it is a Highcharts SVG object\n\t\t\t$.each(['cur', '_default', 'width', 'height', 'opacity'], function (i, fn) {\n\t\t\t\tvar obj = Step,\n\t\t\t\t\tbase,\n\t\t\t\t\telem;\n\t\t\t\t\t\n\t\t\t\t// Handle different parent objects\n\t\t\t\tif (fn === 'cur') {\n\t\t\t\t\tobj = Fx.prototype; // 'cur', the getter, relates to Fx.prototype\n\t\t\t\t\n\t\t\t\t} else if (fn === '_default' && Tween) { // jQuery 1.8 model\n\t\t\t\t\tobj = propHooks[fn];\n\t\t\t\t\tfn = 'set';\n\t\t\t\t}\n\t\t\n\t\t\t\t// Overwrite the method\n\t\t\t\tbase = obj[fn];\n\t\t\t\tif (base) { // step.width and step.height don't exist in jQuery < 1.7\n\t\t\n\t\t\t\t\t// create the extended function replacement\n\t\t\t\t\tobj[fn] = function (fx) {\n\t\t\n\t\t\t\t\t\t// Fx.prototype.cur does not use fx argument\n\t\t\t\t\t\tfx = i ? fx : this;\n\n\t\t\t\t\t\t// Don't run animations on textual properties like align (#1821)\n\t\t\t\t\t\tif (fx.prop === 'align') {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// shortcut\n\t\t\t\t\t\telem = fx.elem;\n\t\t\n\t\t\t\t\t\t// Fx.prototype.cur returns the current value. The other ones are setters\n\t\t\t\t\t\t// and returning a value has no effect.\n\t\t\t\t\t\treturn elem.attr ? // is SVG element wrapper\n\t\t\t\t\t\t\telem.attr(fx.prop, fn === 'cur' ? UNDEFINED : fx.now) : // apply the SVG wrapper's method\n\t\t\t\t\t\t\tbase.apply(this, arguments); // use jQuery's built-in method\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Extend the opacity getter, needed for fading opacity with IE9 and jQuery 1.10+\n\t\t\twrap(opacityHook, 'get', function (proceed, elem, computed) {\n\t\t\t\treturn elem.attr ? (elem.opacity || 0) : proceed.call(this, elem, computed);\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t// Define the setter function for d (path definitions)\n\t\t\tdSetter = function (fx) {\n\t\t\t\tvar elem = fx.elem,\n\t\t\t\t\tends;\n\t\t\n\t\t\t\t// Normally start and end should be set in state == 0, but sometimes,\n\t\t\t\t// for reasons unknown, this doesn't happen. Perhaps state == 0 is skipped\n\t\t\t\t// in these cases\n\t\t\t\tif (!fx.started) {\n\t\t\t\t\tends = pathAnim.init(elem, elem.d, elem.toD);\n\t\t\t\t\tfx.start = ends[0];\n\t\t\t\t\tfx.end = ends[1];\n\t\t\t\t\tfx.started = true;\n\t\t\t\t}\n\t\t\n\t\t\n\t\t\t\t// interpolate each value of the path\n\t\t\t\telem.attr('d', pathAnim.step(fx.start, fx.end, fx.pos, elem.toD));\n\t\t\t};\n\t\t\t\n\t\t\t// jQuery 1.8 style\n\t\t\tif (Tween) {\n\t\t\t\tpropHooks.d = {\n\t\t\t\t\tset: dSetter\n\t\t\t\t};\n\t\t\t// pre 1.8\n\t\t\t} else {\n\t\t\t\t// animate paths\n\t\t\t\tStep.d = dSetter;\n\t\t\t}\n\t\t\t\n\t\t\t/**\n\t\t\t * Utility for iterating over an array. Parameters are reversed compared to jQuery.\n\t\t\t * @param {Array} arr\n\t\t\t * @param {Function} fn\n\t\t\t */\n\t\t\tthis.each = Array.prototype.forEach ?\n\t\t\t\tfunction (arr, fn) { // modern browsers\n\t\t\t\t\treturn Array.prototype.forEach.call(arr, fn);\n\t\t\t\t\t\n\t\t\t\t} : \n\t\t\t\tfunction (arr, fn) { // legacy\n\t\t\t\t\tvar i = 0, \n\t\t\t\t\t\tlen = arr.length;\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tif (fn.call(arr[i], arr[i], i, arr) === false) {\n\t\t\t\t\t\t\treturn i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\n\t\t\t/**\n\t\t\t * Register Highcharts as a plugin in the respective framework\n\t\t\t */\n\t\t\t$.fn.highcharts = function () {\n\t\t\t\tvar constr = 'Chart', // default constructor\n\t\t\t\t\targs = arguments,\n\t\t\t\t\toptions,\n\t\t\t\t\tret,\n\t\t\t\t\tchart;\n\n\t\t\t\tif (isString(args[0])) {\n\t\t\t\t\tconstr = args[0];\n\t\t\t\t\targs = Array.prototype.slice.call(args, 1); \n\t\t\t\t}\n\t\t\t\toptions = args[0];\n\n\t\t\t\t// Create the chart\n\t\t\t\tif (options !== UNDEFINED) {\n\t\t\t\t\t/*jslint unused:false*/\n\t\t\t\t\toptions.chart = options.chart || {};\n\t\t\t\t\toptions.chart.renderTo = this[0];\n\t\t\t\t\tchart = new Highcharts[constr](options, args[1]);\n\t\t\t\t\tret = this;\n\t\t\t\t\t/*jslint unused:true*/\n\t\t\t\t}\n\n\t\t\t\t// When called without parameters or with the return argument, get a predefined chart\n\t\t\t\tif (options === UNDEFINED) {\n\t\t\t\t\tret = charts[attr(this[0], 'data-highcharts-chart')];\n\t\t\t\t}\t\n\n\t\t\t\treturn ret;\n\t\t\t};\n\n\t\t},\n\n\t\t\n\t\t/**\n\t\t * Downloads a script and executes a callback when done.\n\t\t * @param {String} scriptLocation\n\t\t * @param {Function} callback\n\t\t */\n\t\tgetScript: $.getScript,\n\t\t\n\t\t/**\n\t\t * Return the index of an item in an array, or -1 if not found\n\t\t */\n\t\tinArray: $.inArray,\n\t\t\n\t\t/**\n\t\t * A direct link to jQuery methods. MooTools and Prototype adapters must be implemented for each case of method.\n\t\t * @param {Object} elem The HTML element\n\t\t * @param {String} method Which method to run on the wrapped element\n\t\t */\n\t\tadapterRun: function (elem, method) {\n\t\t\treturn $(elem)[method]();\n\t\t},\n\t\n\t\t/**\n\t\t * Filter an array\n\t\t */\n\t\tgrep: $.grep,\n\t\n\t\t/**\n\t\t * Map an array\n\t\t * @param {Array} arr\n\t\t * @param {Function} fn\n\t\t */\n\t\tmap: function (arr, fn) {\n\t\t\t//return jQuery.map(arr, fn);\n\t\t\tvar results = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = arr.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tresults[i] = fn.call(arr[i], arr[i], i, arr);\n\t\t\t}\n\t\t\treturn results;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the position of an element relative to the top left of the page\n\t\t */\n\t\toffset: function (el) {\n\t\t\treturn $(el).offset();\n\t\t},\n\t\n\t\t/**\n\t\t * Add an event listener\n\t\t * @param {Object} el A HTML element or custom object\n\t\t * @param {String} event The event type\n\t\t * @param {Function} fn The event handler\n\t\t */\n\t\taddEvent: function (el, event, fn) {\n\t\t\t$(el).bind(event, fn);\n\t\t},\n\t\n\t\t/**\n\t\t * Remove event added with addEvent\n\t\t * @param {Object} el The object\n\t\t * @param {String} eventType The event type. Leave blank to remove all events.\n\t\t * @param {Function} handler The function to remove\n\t\t */\n\t\tremoveEvent: function (el, eventType, handler) {\n\t\t\t// workaround for jQuery issue with unbinding custom events:\n\t\t\t// http://forum.jQuery.com/topic/javascript-error-when-unbinding-a-custom-event-using-jQuery-1-4-2\n\t\t\tvar func = doc.removeEventListener ? 'removeEventListener' : 'detachEvent';\n\t\t\tif (doc[func] && el && !el[func]) {\n\t\t\t\tel[func] = function () {};\n\t\t\t}\n\t\n\t\t\t$(el).unbind(eventType, handler);\n\t\t},\n\t\n\t\t/**\n\t\t * Fire an event on a custom object\n\t\t * @param {Object} el\n\t\t * @param {String} type\n\t\t * @param {Object} eventArguments\n\t\t * @param {Function} defaultFunction\n\t\t */\n\t\tfireEvent: function (el, type, eventArguments, defaultFunction) {\n\t\t\tvar event = $.Event(type),\n\t\t\t\tdetachedType = 'detached' + type,\n\t\t\t\tdefaultPrevented;\n\t\n\t\t\t// Remove warnings in Chrome when accessing layerX and layerY. Although Highcharts\n\t\t\t// never uses these properties, Chrome includes them in the default click event and\n\t\t\t// raises the warning when they are copied over in the extend statement below.\n\t\t\t//\n\t\t\t// To avoid problems in IE (see #1010) where we cannot delete the properties and avoid\n\t\t\t// testing if they are there (warning in chrome) the only option is to test if running IE.\n\t\t\tif (!isIE && eventArguments) {\n\t\t\t\tdelete eventArguments.layerX;\n\t\t\t\tdelete eventArguments.layerY;\n\t\t\t}\n\t\n\t\t\textend(event, eventArguments);\n\t\n\t\t\t// Prevent jQuery from triggering the object method that is named the\n\t\t\t// same as the event. For example, if the event is 'select', jQuery\n\t\t\t// attempts calling el.select and it goes into a loop.\n\t\t\tif (el[type]) {\n\t\t\t\tel[detachedType] = el[type];\n\t\t\t\tel[type] = null;\n\t\t\t}\n\t\n\t\t\t// Wrap preventDefault and stopPropagation in try/catch blocks in\n\t\t\t// order to prevent JS errors when cancelling events on non-DOM\n\t\t\t// objects. #615.\n\t\t\t/*jslint unparam: true*/\n\t\t\t$.each(['preventDefault', 'stopPropagation'], function (i, fn) {\n\t\t\t\tvar base = event[fn];\n\t\t\t\tevent[fn] = function () {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbase.call(event);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (fn === 'preventDefault') {\n\t\t\t\t\t\t\tdefaultPrevented = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t});\n\t\t\t/*jslint unparam: false*/\n\t\n\t\t\t// trigger it\n\t\t\t$(el).trigger(event);\n\t\n\t\t\t// attach the method\n\t\t\tif (el[detachedType]) {\n\t\t\t\tel[type] = el[detachedType];\n\t\t\t\tel[detachedType] = null;\n\t\t\t}\n\t\n\t\t\tif (defaultFunction && !event.isDefaultPrevented() && !defaultPrevented) {\n\t\t\t\tdefaultFunction(event);\n\t\t\t}\n\t\t},\n\t\t\n\t\t/**\n\t\t * Extension method needed for MooTools\n\t\t */\n\t\twashMouseEvent: function (e) {\n\t\t\tvar ret = e.originalEvent || e;\n\t\t\t\n\t\t\t// computed by jQuery, needed by IE8\n\t\t\tif (ret.pageX === UNDEFINED) { // #1236\n\t\t\t\tret.pageX = e.pageX;\n\t\t\t\tret.pageY = e.pageY;\n\t\t\t}\n\t\t\t\n\t\t\treturn ret;\n\t\t},\n\t\n\t\t/**\n\t\t * Animate a HTML element or SVG element wrapper\n\t\t * @param {Object} el\n\t\t * @param {Object} params\n\t\t * @param {Object} options jQuery-like animation options: duration, easing, callback\n\t\t */\n\t\tanimate: function (el, params, options) {\n\t\t\tvar $el = $(el);\n\t\t\tif (!el.style) {\n\t\t\t\tel.style = {}; // #1881\n\t\t\t}\n\t\t\tif (params.d) {\n\t\t\t\tel.toD = params.d; // keep the array form for paths, used in $.fx.step.d\n\t\t\t\tparams.d = 1; // because in jQuery, animating to an array has a different meaning\n\t\t\t}\n\t\n\t\t\t$el.stop();\n\t\t\tif (params.opacity !== UNDEFINED && el.attr) {\n\t\t\t\tparams.opacity += 'px'; // force jQuery to use same logic as width and height (#2161)\n\t\t\t}\n\t\t\t$el.animate(params, options);\n\t\n\t\t},\n\t\t/**\n\t\t * Stop running animation\n\t\t */\n\t\tstop: function (el) {\n\t\t\t$(el).stop();\n\t\t}\n\t});\n}(win.jQuery));\n\n\n// check for a custom HighchartsAdapter defined prior to this file\nvar globalAdapter = win.HighchartsAdapter,\n\tadapter = globalAdapter || {};\n\t\n// Initialize the adapter\nif (globalAdapter) {\n\tglobalAdapter.init.call(globalAdapter, pathAnim);\n}\n\n\n// Utility functions. If the HighchartsAdapter is not defined, adapter is an empty object\n// and all the utility functions will be null. In that case they are populated by the\n// default adapters below.\nvar adapterRun = adapter.adapterRun,\n\tgetScript = adapter.getScript,\n\tinArray = adapter.inArray,\n\teach = adapter.each,\n\tgrep = adapter.grep,\n\toffset = adapter.offset,\n\tmap = adapter.map,\n\taddEvent = adapter.addEvent,\n\tremoveEvent = adapter.removeEvent,\n\tfireEvent = adapter.fireEvent,\n\twashMouseEvent = adapter.washMouseEvent,\n\tanimate = adapter.animate,\n\tstop = adapter.stop;\n\n\n\n/* ****************************************************************************\n * Handle the options                                                         *\n *****************************************************************************/\nvar\n\ndefaultLabelOptions = {\n\tenabled: true,\n\t// rotation: 0,\n\t// align: 'center',\n\tx: 0,\n\ty: 15,\n\t/*formatter: function () {\n\t\treturn this.value;\n\t},*/\n\tstyle: {\n\t\tcolor: '#666',\n\t\tcursor: 'default',\n\t\tfontSize: '11px',\n\t\tlineHeight: '14px'\n\t}\n};\n\ndefaultOptions = {\n\tcolors: ['#2f7ed8', '#0d233a', '#8bbc21', '#910000', '#1aadce', '#492970',\n\t\t'#f28f43', '#77a1e5', '#c42525', '#a6c96a'],\n\tsymbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'],\n\tlang: {\n\t\tloading: 'Loading...',\n\t\tmonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July',\n\t\t\t\t'August', 'September', 'October', 'November', 'December'],\n\t\tshortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n\t\tweekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n\t\tdecimalPoint: '.',\n\t\tnumericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'], // SI prefixes used in axis labels\n\t\tresetZoom: 'Reset zoom',\n\t\tresetZoomTitle: 'Reset zoom level 1:1',\n\t\tthousandsSep: ','\n\t},\n\tglobal: {\n\t\tuseUTC: true,\n\t\tcanvasToolsURL: 'http://code.highcharts.com/3.0.6/modules/canvas-tools.js',\n\t\tVMLRadialGradientURL: 'http://code.highcharts.com/3.0.6/gfx/vml-radial-gradient.png'\n\t},\n\tchart: {\n\t\t//animation: true,\n\t\t//alignTicks: false,\n\t\t//reflow: true,\n\t\t//className: null,\n\t\t//events: { load, selection },\n\t\t//margin: [null],\n\t\t//marginTop: null,\n\t\t//marginRight: null,\n\t\t//marginBottom: null,\n\t\t//marginLeft: null,\n\t\tborderColor: '#4572A7',\n\t\t//borderWidth: 0,\n\t\tborderRadius: 5,\n\t\tdefaultSeriesType: 'line',\n\t\tignoreHiddenSeries: true,\n\t\t//inverted: false,\n\t\t//shadow: false,\n\t\tspacing: [10, 10, 15, 10],\n\t\t//spacingTop: 10,\n\t\t//spacingRight: 10,\n\t\t//spacingBottom: 15,\n\t\t//spacingLeft: 10,\n\t\tstyle: {\n\t\t\tfontFamily: '\"Lucida Grande\", \"Lucida Sans Unicode\", Verdana, Arial, Helvetica, sans-serif', // default font\n\t\t\tfontSize: '12px'\n\t\t},\n\t\tbackgroundColor: '#FFFFFF',\n\t\t//plotBackgroundColor: null,\n\t\tplotBorderColor: '#C0C0C0',\n\t\t//plotBorderWidth: 0,\n\t\t//plotShadow: false,\n\t\t//zoomType: ''\n\t\tresetZoomButton: {\n\t\t\ttheme: {\n\t\t\t\tzIndex: 20\n\t\t\t},\n\t\t\tposition: {\n\t\t\t\talign: 'right',\n\t\t\t\tx: -10,\n\t\t\t\t//verticalAlign: 'top',\n\t\t\t\ty: 10\n\t\t\t}\n\t\t\t// relativeTo: 'plot'\n\t\t}\n\t},\n\ttitle: {\n\t\ttext: 'Chart title',\n\t\talign: 'center',\n\t\t// floating: false,\n\t\tmargin: 15,\n\t\t// x: 0,\n\t\t// verticalAlign: 'top',\n\t\t// y: null,\n\t\tstyle: {\n\t\t\tcolor: '#274b6d',//#3E576F',\n\t\t\tfontSize: '16px'\n\t\t}\n\n\t},\n\tsubtitle: {\n\t\ttext: '',\n\t\talign: 'center',\n\t\t// floating: false\n\t\t// x: 0,\n\t\t// verticalAlign: 'top',\n\t\t// y: null,\n\t\tstyle: {\n\t\t\tcolor: '#4d759e'\n\t\t}\n\t},\n\n\tplotOptions: {\n\t\tline: { // base series options\n\t\t\tallowPointSelect: false,\n\t\t\tshowCheckbox: false,\n\t\t\tanimation: {\n\t\t\t\tduration: 1000\n\t\t\t},\n\t\t\t//connectNulls: false,\n\t\t\t//cursor: 'default',\n\t\t\t//clip: true,\n\t\t\t//dashStyle: null,\n\t\t\t//enableMouseTracking: true,\n\t\t\tevents: {},\n\t\t\t//legendIndex: 0,\n\t\t\tlineWidth: 2,\n\t\t\t//shadow: false,\n\t\t\t// stacking: null,\n\t\t\tmarker: {\n\t\t\t\tenabled: true,\n\t\t\t\t//symbol: null,\n\t\t\t\tlineWidth: 0,\n\t\t\t\tradius: 4,\n\t\t\t\tlineColor: '#FFFFFF',\n\t\t\t\t//fillColor: null,\n\t\t\t\tstates: { // states for a single point\n\t\t\t\t\thover: {\n\t\t\t\t\t\tenabled: true\n\t\t\t\t\t\t//radius: base + 2\n\t\t\t\t\t},\n\t\t\t\t\tselect: {\n\t\t\t\t\t\tfillColor: '#FFFFFF',\n\t\t\t\t\t\tlineColor: '#000000',\n\t\t\t\t\t\tlineWidth: 2\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tpoint: {\n\t\t\t\tevents: {}\n\t\t\t},\n\t\t\tdataLabels: merge(defaultLabelOptions, {\n\t\t\t\talign: 'center',\n\t\t\t\tenabled: false,\n\t\t\t\tformatter: function () {\n\t\t\t\t\treturn this.y === null ? '' : numberFormat(this.y, -1);\n\t\t\t\t},\n\t\t\t\tverticalAlign: 'bottom', // above singular point\n\t\t\t\ty: 0\n\t\t\t\t// backgroundColor: undefined,\n\t\t\t\t// borderColor: undefined,\n\t\t\t\t// borderRadius: undefined,\n\t\t\t\t// borderWidth: undefined,\n\t\t\t\t// padding: 3,\n\t\t\t\t// shadow: false\n\t\t\t}),\n\t\t\tcropThreshold: 300, // draw points outside the plot area when the number of points is less than this\n\t\t\tpointRange: 0,\n\t\t\t//pointStart: 0,\n\t\t\t//pointInterval: 1,\n\t\t\tshowInLegend: true,\n\t\t\tstates: { // states for the entire series\n\t\t\t\thover: {\n\t\t\t\t\t//enabled: false,\n\t\t\t\t\t//lineWidth: base + 1,\n\t\t\t\t\tmarker: {\n\t\t\t\t\t\t// lineWidth: base + 1,\n\t\t\t\t\t\t// radius: base + 1\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tmarker: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tstickyTracking: true\n\t\t\t//tooltip: {\n\t\t\t\t//pointFormat: '<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y}</b>'\n\t\t\t\t//valueDecimals: null,\n\t\t\t\t//xDateFormat: '%A, %b %e, %Y',\n\t\t\t\t//valuePrefix: '',\n\t\t\t\t//ySuffix: ''\t\t\t\t\n\t\t\t//}\n\t\t\t// turboThreshold: 1000\n\t\t\t// zIndex: null\n\t\t}\n\t},\n\tlabels: {\n\t\t//items: [],\n\t\tstyle: {\n\t\t\t//font: defaultFont,\n\t\t\tposition: ABSOLUTE,\n\t\t\tcolor: '#3E576F'\n\t\t}\n\t},\n\tlegend: {\n\t\tenabled: true,\n\t\talign: 'center',\n\t\t//floating: false,\n\t\tlayout: 'horizontal',\n\t\tlabelFormatter: function () {\n\t\t\treturn this.name;\n\t\t},\n\t\tborderWidth: 1,\n\t\tborderColor: '#909090',\n\t\tborderRadius: 5,\n\t\tnavigation: {\n\t\t\t// animation: true,\n\t\t\tactiveColor: '#274b6d',\n\t\t\t// arrowSize: 12\n\t\t\tinactiveColor: '#CCC'\n\t\t\t// style: {} // text styles\n\t\t},\n\t\t// margin: 10,\n\t\t// reversed: false,\n\t\tshadow: false,\n\t\t// backgroundColor: null,\n\t\t/*style: {\n\t\t\tpadding: '5px'\n\t\t},*/\n\t\titemStyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#274b6d',\n\t\t\tfontSize: '12px'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\t//cursor: 'pointer', removed as of #601\n\t\t\tcolor: '#000'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#CCC'\n\t\t},\n\t\titemCheckboxStyle: {\n\t\t\tposition: ABSOLUTE,\n\t\t\twidth: '13px', // for IE precision\n\t\t\theight: '13px'\n\t\t},\n\t\t// itemWidth: undefined,\n\t\tsymbolWidth: 16,\n\t\tsymbolPadding: 5,\n\t\tverticalAlign: 'bottom',\n\t\t// width: undefined,\n\t\tx: 0,\n\t\ty: 0,\n\t\ttitle: {\n\t\t\t//text: null,\n\t\t\tstyle: {\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t}\t\t\t\n\t},\n\n\tloading: {\n\t\t// hideDuration: 100,\n\t\tlabelStyle: {\n\t\t\tfontWeight: 'bold',\n\t\t\tposition: RELATIVE,\n\t\t\ttop: '1em'\n\t\t},\n\t\t// showDuration: 0,\n\t\tstyle: {\n\t\t\tposition: ABSOLUTE,\n\t\t\tbackgroundColor: 'white',\n\t\t\topacity: 0.5,\n\t\t\ttextAlign: 'center'\n\t\t}\n\t},\n\n\ttooltip: {\n\t\tenabled: true,\n\t\tanimation: hasSVG,\n\t\t//crosshairs: null,\n\t\tbackgroundColor: 'rgba(255, 255, 255, .85)',\n\t\tborderWidth: 1,\n\t\tborderRadius: 3,\n\t\tdateTimeLabelFormats: { \n\t\t\tmillisecond: '%A, %b %e, %H:%M:%S.%L',\n\t\t\tsecond: '%A, %b %e, %H:%M:%S',\n\t\t\tminute: '%A, %b %e, %H:%M',\n\t\t\thour: '%A, %b %e, %H:%M',\n\t\t\tday: '%A, %b %e, %Y',\n\t\t\tweek: 'Week from %A, %b %e, %Y',\n\t\t\tmonth: '%B %Y',\n\t\t\tyear: '%Y'\n\t\t},\n\t\t//formatter: defaultFormatter,\n\t\theaderFormat: '<span style=\"font-size: 10px\">{point.key}</span><br/>',\n\t\tpointFormat: '<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y}</b><br/>',\n\t\tshadow: true,\n\t\t//shared: false,\n\t\tsnap: isTouchDevice ? 25 : 10,\n\t\tstyle: {\n\t\t\tcolor: '#333333',\n\t\t\tcursor: 'default',\n\t\t\tfontSize: '12px',\n\t\t\tpadding: '8px',\n\t\t\twhiteSpace: 'nowrap'\n\t\t}\n\t\t//xDateFormat: '%A, %b %e, %Y',\n\t\t//valueDecimals: null,\n\t\t//valuePrefix: '',\n\t\t//valueSuffix: ''\n\t},\n\n\tcredits: {\n\t\tenabled: true,\n\t\ttext: 'Highcharts.com',\n\t\thref: 'http://www.highcharts.com',\n\t\tposition: {\n\t\t\talign: 'right',\n\t\t\tx: -10,\n\t\t\tverticalAlign: 'bottom',\n\t\t\ty: -5\n\t\t},\n\t\tstyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#909090',\n\t\t\tfontSize: '9px'\n\t\t}\n\t}\n};\n\n\n\n\n// Series defaults\nvar defaultPlotOptions = defaultOptions.plotOptions,\n\tdefaultSeriesOptions = defaultPlotOptions.line;\n\n// set the default time methods\nsetTimeMethods();\n\n\n\n/**\n * Set the time methods globally based on the useUTC option. Time method can be either\n * local time or UTC (default).\n */\nfunction setTimeMethods() {\n\tvar useUTC = defaultOptions.global.useUTC,\n\t\tGET = useUTC ? 'getUTC' : 'get',\n\t\tSET = useUTC ? 'setUTC' : 'set';\n\n\tmakeTime = useUTC ? Date.UTC : function (year, month, date, hours, minutes, seconds) {\n\t\treturn new Date(\n\t\t\tyear,\n\t\t\tmonth,\n\t\t\tpick(date, 1),\n\t\t\tpick(hours, 0),\n\t\t\tpick(minutes, 0),\n\t\t\tpick(seconds, 0)\n\t\t).getTime();\n\t};\n\tgetMinutes =  GET + 'Minutes';\n\tgetHours =    GET + 'Hours';\n\tgetDay =      GET + 'Day';\n\tgetDate =     GET + 'Date';\n\tgetMonth =    GET + 'Month';\n\tgetFullYear = GET + 'FullYear';\n\tsetMinutes =  SET + 'Minutes';\n\tsetHours =    SET + 'Hours';\n\tsetDate =     SET + 'Date';\n\tsetMonth =    SET + 'Month';\n\tsetFullYear = SET + 'FullYear';\n\n}\n\n/**\n * Merge the default options with custom options and return the new options structure\n * @param {Object} options The new custom options\n */\nfunction setOptions(options) {\n\t\n\t// Pull out axis options and apply them to the respective default axis options \n\t/*defaultXAxisOptions = merge(defaultXAxisOptions, options.xAxis);\n\tdefaultYAxisOptions = merge(defaultYAxisOptions, options.yAxis);\n\toptions.xAxis = options.yAxis = UNDEFINED;*/\n\t\n\t// Merge in the default options\n\tdefaultOptions = merge(defaultOptions, options);\n\t\n\t// Apply UTC\n\tsetTimeMethods();\n\n\treturn defaultOptions;\n}\n\n/**\n * Get the updated default options. Merely exposing defaultOptions for outside modules\n * isn't enough because the setOptions method creates a new object.\n */\nfunction getOptions() {\n\treturn defaultOptions;\n}\n\n\n/**\n * Handle color operations. The object methods are chainable.\n * @param {String} input The input color in either rbga or hex format\n */\nvar Color = function (input) {\n\t// declare variables\n\tvar rgba = [], result, stops;\n\n\t/**\n\t * Parse the input color to rgba array\n\t * @param {String} input\n\t */\n\tfunction init(input) {\n\n\t\t// Gradients\n\t\tif (input && input.stops) {\n\t\t\tstops = map(input.stops, function (stop) {\n\t\t\t\treturn Color(stop[1]);\n\t\t\t});\n\n\t\t// Solid colors\n\t\t} else {\n\t\t\t// rgba\n\t\t\tresult = /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/.exec(input);\n\t\t\tif (result) {\n\t\t\t\trgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), parseFloat(result[4], 10)];\n\t\t\t} else { \n\t\t\t\t// hex\n\t\t\t\tresult = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(input);\n\t\t\t\tif (result) {\n\t\t\t\t\trgba = [pInt(result[1], 16), pInt(result[2], 16), pInt(result[3], 16), 1];\n\t\t\t\t} else {\n\t\t\t\t\t// rgb\n\t\t\t\t\tresult = /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(input);\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\trgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), 1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\t\t\n\n\t}\n\t/**\n\t * Return the color a specified format\n\t * @param {String} format\n\t */\n\tfunction get(format) {\n\t\tvar ret;\n\n\t\tif (stops) {\n\t\t\tret = merge(input);\n\t\t\tret.stops = [].concat(ret.stops);\n\t\t\teach(stops, function (stop, i) {\n\t\t\t\tret.stops[i] = [ret.stops[i][0], stop.get(format)];\n\t\t\t});\n\n\t\t// it's NaN if gradient colors on a column chart\n\t\t} else if (rgba && !isNaN(rgba[0])) {\n\t\t\tif (format === 'rgb') {\n\t\t\t\tret = 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')';\n\t\t\t} else if (format === 'a') {\n\t\t\t\tret = rgba[3];\n\t\t\t} else {\n\t\t\t\tret = 'rgba(' + rgba.join(',') + ')';\n\t\t\t}\n\t\t} else {\n\t\t\tret = input;\n\t\t}\n\t\treturn ret;\n\t}\n\n\t/**\n\t * Brighten the color\n\t * @param {Number} alpha\n\t */\n\tfunction brighten(alpha) {\n\t\tif (stops) {\n\t\t\teach(stops, function (stop) {\n\t\t\t\tstop.brighten(alpha);\n\t\t\t});\n\t\t\n\t\t} else if (isNumber(alpha) && alpha !== 0) {\n\t\t\tvar i;\n\t\t\tfor (i = 0; i < 3; i++) {\n\t\t\t\trgba[i] += pInt(alpha * 255);\n\n\t\t\t\tif (rgba[i] < 0) {\n\t\t\t\t\trgba[i] = 0;\n\t\t\t\t}\n\t\t\t\tif (rgba[i] > 255) {\n\t\t\t\t\trgba[i] = 255;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Set the color's opacity to a given alpha value\n\t * @param {Number} alpha\n\t */\n\tfunction setOpacity(alpha) {\n\t\trgba[3] = alpha;\n\t\treturn this;\n\t}\n\n\t// initialize: parse the input\n\tinit(input);\n\n\t// public methods\n\treturn {\n\t\tget: get,\n\t\tbrighten: brighten,\n\t\trgba: rgba,\n\t\tsetOpacity: setOpacity\n\t};\n};\n\n\n/**\n * A wrapper object for SVG elements\n */\nfunction SVGElement() {}\n\nSVGElement.prototype = {\n\t/**\n\t * Initialize the SVG renderer\n\t * @param {Object} renderer\n\t * @param {String} nodeName\n\t */\n\tinit: function (renderer, nodeName) {\n\t\tvar wrapper = this;\n\t\twrapper.element = nodeName === 'span' ?\n\t\t\tcreateElement(nodeName) :\n\t\t\tdoc.createElementNS(SVG_NS, nodeName);\n\t\twrapper.renderer = renderer;\n\t\t/**\n\t\t * A collection of attribute setters. These methods, if defined, are called right before a certain\n\t\t * attribute is set on an element wrapper. Returning false prevents the default attribute\n\t\t * setter to run. Returning a value causes the default setter to set that value. Used in\n\t\t * Renderer.label.\n\t\t */\n\t\twrapper.attrSetters = {};\n\t},\n\t/**\n\t * Default base for animation\n\t */\n\topacity: 1,\n\t/**\n\t * Animate a given attribute\n\t * @param {Object} params\n\t * @param {Number} options The same options as in jQuery animation\n\t * @param {Function} complete Function to perform at the end of animation\n\t */\n\tanimate: function (params, options, complete) {\n\t\tvar animOptions = pick(options, globalAnimation, true);\n\t\tstop(this); // stop regardless of animation actually running, or reverting to .attr (#607)\n\t\tif (animOptions) {\n\t\t\tanimOptions = merge(animOptions);\n\t\t\tif (complete) { // allows using a callback with the global animation without overwriting it\n\t\t\t\tanimOptions.complete = complete;\n\t\t\t}\n\t\t\tanimate(this, params, animOptions);\n\t\t} else {\n\t\t\tthis.attr(params);\n\t\t\tif (complete) {\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Set or get a given attribute\n\t * @param {Object|String} hash\n\t * @param {Mixed|Undefined} val\n\t */\n\tattr: function (hash, val) {\n\t\tvar wrapper = this,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\tresult,\n\t\t\ti,\n\t\t\tchild,\n\t\t\telement = wrapper.element,\n\t\t\tnodeName = element.nodeName.toLowerCase(), // Android2 requires lower for \"text\"\n\t\t\trenderer = wrapper.renderer,\n\t\t\tskipAttr,\n\t\t\ttitleNode,\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\tshadows = wrapper.shadows,\n\t\t\thasSetSymbolSize,\n\t\t\tdoTransform,\n\t\t\tret = wrapper;\n\n\t\t// single key-value pair\n\t\tif (isString(hash) && defined(val)) {\n\t\t\tkey = hash;\n\t\t\thash = {};\n\t\t\thash[key] = val;\n\t\t}\n\n\t\t// used as a getter: first argument is a string, second is undefined\n\t\tif (isString(hash)) {\n\t\t\tkey = hash;\n\t\t\tif (nodeName === 'circle') {\n\t\t\t\tkey = { x: 'cx', y: 'cy' }[key] || key;\n\t\t\t} else if (key === 'strokeWidth') {\n\t\t\t\tkey = 'stroke-width';\n\t\t\t}\n\t\t\tret = attr(element, key) || wrapper[key] || 0;\n\t\t\tif (key !== 'd' && key !== 'visibility' && key !== 'fill') { // 'd' is string in animation step\n\t\t\t\tret = parseFloat(ret);\n\t\t\t}\n\n\t\t// setter\n\t\t} else {\n\n\t\t\tfor (key in hash) {\n\t\t\t\tskipAttr = false; // reset\n\t\t\t\tvalue = hash[key];\n\n\t\t\t\t// check for a specific attribute setter\n\t\t\t\tresult = attrSetters[key] && attrSetters[key].call(wrapper, value, key);\n\n\t\t\t\tif (result !== false) {\n\t\t\t\t\tif (result !== UNDEFINED) {\n\t\t\t\t\t\tvalue = result; // the attribute setter has returned a new value to set\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// paths\n\t\t\t\t\tif (key === 'd') {\n\t\t\t\t\t\tif (value && value.join) { // join path\n\t\t\t\t\t\t\tvalue = value.join(' ');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (/(NaN| {2}|^$)/.test(value)) {\n\t\t\t\t\t\t\tvalue = 'M 0 0';\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//wrapper.d = value; // shortcut for animations\n\n\t\t\t\t\t// update child tspans x values\n\t\t\t\t\t} else if (key === 'x' && nodeName === 'text') {\n\t\t\t\t\t\tfor (i = 0; i < element.childNodes.length; i++) {\n\t\t\t\t\t\t\tchild = element.childNodes[i];\n\t\t\t\t\t\t\t// if the x values are equal, the tspan represents a linebreak\n\t\t\t\t\t\t\tif (attr(child, 'x') === attr(element, 'x')) {\n\t\t\t\t\t\t\t\t//child.setAttribute('x', value);\n\t\t\t\t\t\t\t\tattr(child, 'x', value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (wrapper.rotation && (key === 'x' || key === 'y')) {\n\t\t\t\t\t\tdoTransform = true;\n\n\t\t\t\t\t// apply gradients\n\t\t\t\t\t} else if (key === 'fill') {\n\t\t\t\t\t\tvalue = renderer.color(value, element, key);\n\n\t\t\t\t\t// circle x and y\n\t\t\t\t\t} else if (nodeName === 'circle' && (key === 'x' || key === 'y')) {\n\t\t\t\t\t\tkey = { x: 'cx', y: 'cy' }[key] || key;\n\n\t\t\t\t\t// rectangle border radius\n\t\t\t\t\t} else if (nodeName === 'rect' && key === 'r') {\n\t\t\t\t\t\tattr(element, {\n\t\t\t\t\t\t\trx: value,\n\t\t\t\t\t\t\try: value\n\t\t\t\t\t\t});\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// translation and text rotation\n\t\t\t\t\t} else if (key === 'translateX' || key === 'translateY' || key === 'rotation' ||\n\t\t\t\t\t\t\tkey === 'verticalAlign' || key === 'scaleX' || key === 'scaleY') {\n\t\t\t\t\t\tdoTransform = true;\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// apply opacity as subnode (required by legacy WebKit and Batik)\n\t\t\t\t\t} else if (key === 'stroke') {\n\t\t\t\t\t\tvalue = renderer.color(value, element, key);\n\n\t\t\t\t\t// emulate VML's dashstyle implementation\n\t\t\t\t\t} else if (key === 'dashstyle') {\n\t\t\t\t\t\tkey = 'stroke-dasharray';\n\t\t\t\t\t\tvalue = value && value.toLowerCase();\n\t\t\t\t\t\tif (value === 'solid') {\n\t\t\t\t\t\t\tvalue = NONE;\n\t\t\t\t\t\t} else if (value) {\n\t\t\t\t\t\t\tvalue = value\n\t\t\t\t\t\t\t\t.replace('shortdashdotdot', '3,1,1,1,1,1,')\n\t\t\t\t\t\t\t\t.replace('shortdashdot', '3,1,1,1')\n\t\t\t\t\t\t\t\t.replace('shortdot', '1,1,')\n\t\t\t\t\t\t\t\t.replace('shortdash', '3,1,')\n\t\t\t\t\t\t\t\t.replace('longdash', '8,3,')\n\t\t\t\t\t\t\t\t.replace(/dot/g, '1,3,')\n\t\t\t\t\t\t\t\t.replace('dash', '4,3,')\n\t\t\t\t\t\t\t\t.replace(/,$/, '')\n\t\t\t\t\t\t\t\t.split(','); // ending comma\n\n\t\t\t\t\t\t\ti = value.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tvalue[i] = pInt(value[i]) * pick(hash['stroke-width'], wrapper['stroke-width']);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue = value.join(',');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// IE9/MooTools combo: MooTools returns objects instead of numbers and IE9 Beta 2\n\t\t\t\t\t// is unable to cast them. Test again with final IE9.\n\t\t\t\t\t} else if (key === 'width') {\n\t\t\t\t\t\tvalue = pInt(value);\n\n\t\t\t\t\t// Text alignment\n\t\t\t\t\t} else if (key === 'align') {\n\t\t\t\t\t\tkey = 'text-anchor';\n\t\t\t\t\t\tvalue = { left: 'start', center: 'middle', right: 'end' }[value];\n\n\t\t\t\t\t// Title requires a subnode, #431\n\t\t\t\t\t} else if (key === 'title') {\n\t\t\t\t\t\ttitleNode = element.getElementsByTagName('title')[0];\n\t\t\t\t\t\tif (!titleNode) {\n\t\t\t\t\t\t\ttitleNode = doc.createElementNS(SVG_NS, 'title');\n\t\t\t\t\t\t\telement.appendChild(titleNode);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitleNode.textContent = value;\n\t\t\t\t\t}\n\n\t\t\t\t\t// jQuery animate changes case\n\t\t\t\t\tif (key === 'strokeWidth') {\n\t\t\t\t\t\tkey = 'stroke-width';\n\t\t\t\t\t}\n\n\t\t\t\t\t// In Chrome/Win < 6 as well as Batik, the stroke attribute can't be set when the stroke-\n\t\t\t\t\t// width is 0. #1369\n\t\t\t\t\tif (key === 'stroke-width' || key === 'stroke') {\n\t\t\t\t\t\twrapper[key] = value;\n\t\t\t\t\t\t// Only apply the stroke attribute if the stroke width is defined and larger than 0\n\t\t\t\t\t\tif (wrapper.stroke && wrapper['stroke-width']) {\n\t\t\t\t\t\t\tattr(element, 'stroke', wrapper.stroke);\n\t\t\t\t\t\t\tattr(element, 'stroke-width', wrapper['stroke-width']);\n\t\t\t\t\t\t\twrapper.hasStroke = true;\n\t\t\t\t\t\t} else if (key === 'stroke-width' && value === 0 && wrapper.hasStroke) {\n\t\t\t\t\t\t\telement.removeAttribute('stroke');\n\t\t\t\t\t\t\twrapper.hasStroke = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// symbols\n\t\t\t\t\tif (wrapper.symbolName && /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(key)) {\n\n\n\t\t\t\t\t\tif (!hasSetSymbolSize) {\n\t\t\t\t\t\t\twrapper.symbolAttr(hash);\n\t\t\t\t\t\t\thasSetSymbolSize = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// let the shadow follow the main element\n\t\t\t\t\tif (shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(key)) {\n\t\t\t\t\t\ti = shadows.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tattr(\n\t\t\t\t\t\t\t\tshadows[i],\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tkey === 'height' ?\n\t\t\t\t\t\t\t\t\tmathMax(value - (shadows[i].cutHeight || 0), 0) :\n\t\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// validate heights\n\t\t\t\t\tif ((key === 'width' || key === 'height') && nodeName === 'rect' && value < 0) {\n\t\t\t\t\t\tvalue = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Record for animation and quick access without polling the DOM\n\t\t\t\t\twrapper[key] = value;\n\n\n\t\t\t\t\tif (key === 'text') {\n\t\t\t\t\t\t// Delete bBox memo when the text changes\n\t\t\t\t\t\tif (value !== wrapper.textStr) {\n\t\t\t\t\t\t\tdelete wrapper.bBox;\n\t\t\t\t\t\t}\n\t\t\t\t\t\twrapper.textStr = value;\n\t\t\t\t\t\tif (wrapper.added) {\n\t\t\t\t\t\t\trenderer.buildText(wrapper);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!skipAttr) {\n\t\t\t\t\t\tattr(element, key, value);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Update transform. Do this outside the loop to prevent redundant updating for batch setting\n\t\t\t// of attributes.\n\t\t\tif (doTransform) {\n\t\t\t\twrapper.updateTransform();\n\t\t\t}\n\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\n\t/**\n\t * Add a class name to an element\n\t */\n\taddClass: function (className) {\n\t\tvar element = this.element,\n\t\t\tcurrentClassName = attr(element, 'class') || '';\n\n\t\tif (currentClassName.indexOf(className) === -1) {\n\t\t\tattr(element, 'class', currentClassName + ' ' + className);\n\t\t}\n\t\treturn this;\n\t},\n\t/* hasClass and removeClass are not (yet) needed\n\thasClass: function (className) {\n\t\treturn attr(this.element, 'class').indexOf(className) !== -1;\n\t},\n\tremoveClass: function (className) {\n\t\tattr(this.element, 'class', attr(this.element, 'class').replace(className, ''));\n\t\treturn this;\n\t},\n\t*/\n\n\t/**\n\t * If one of the symbol size affecting parameters are changed,\n\t * check all the others only once for each call to an element's\n\t * .attr() method\n\t * @param {Object} hash\n\t */\n\tsymbolAttr: function (hash) {\n\t\tvar wrapper = this;\n\n\t\teach(['x', 'y', 'r', 'start', 'end', 'width', 'height', 'innerR', 'anchorX', 'anchorY'], function (key) {\n\t\t\twrapper[key] = pick(hash[key], wrapper[key]);\n\t\t});\n\n\t\twrapper.attr({\n\t\t\td: wrapper.renderer.symbols[wrapper.symbolName](\n\t\t\t\twrapper.x,\n\t\t\t\twrapper.y,\n\t\t\t\twrapper.width,\n\t\t\t\twrapper.height,\n\t\t\t\twrapper\n\t\t\t)\n\t\t});\n\t},\n\n\t/**\n\t * Apply a clipping path to this object\n\t * @param {String} id\n\t */\n\tclip: function (clipRect) {\n\t\treturn this.attr('clip-path', clipRect ? 'url(' + this.renderer.url + '#' + clipRect.id + ')' : NONE);\n\t},\n\n\t/**\n\t * Calculate the coordinates needed for drawing a rectangle crisply and return the\n\t * calculated attributes\n\t * @param {Number} strokeWidth\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tcrisp: function (strokeWidth, x, y, width, height) {\n\n\t\tvar wrapper = this,\n\t\t\tkey,\n\t\t\tattribs = {},\n\t\t\tvalues = {},\n\t\t\tnormalizer;\n\n\t\tstrokeWidth = strokeWidth || wrapper.strokeWidth || (wrapper.attr && wrapper.attr('stroke-width')) || 0;\n\t\tnormalizer = mathRound(strokeWidth) % 2 / 2; // mathRound because strokeWidth can sometimes have roundoff errors\n\n\t\t// normalize for crisp edges\n\t\tvalues.x = mathFloor(x || wrapper.x || 0) + normalizer;\n\t\tvalues.y = mathFloor(y || wrapper.y || 0) + normalizer;\n\t\tvalues.width = mathFloor((width || wrapper.width || 0) - 2 * normalizer);\n\t\tvalues.height = mathFloor((height || wrapper.height || 0) - 2 * normalizer);\n\t\tvalues.strokeWidth = strokeWidth;\n\n\t\tfor (key in values) {\n\t\t\tif (wrapper[key] !== values[key]) { // only set attribute if changed\n\t\t\t\twrapper[key] = attribs[key] = values[key];\n\t\t\t}\n\t\t}\n\n\t\treturn attribs;\n\t},\n\n\t/**\n\t * Set styles for the element\n\t * @param {Object} styles\n\t */\n\tcss: function (styles) {\n\t\t/*jslint unparam: true*//* allow unused param a in the regexp function below */\n\t\tvar elemWrapper = this,\n\t\t\telem = elemWrapper.element,\n\t\t\ttextWidth = styles && styles.width && elem.nodeName.toLowerCase() === 'text',\n\t\t\tn,\n\t\t\tserializedCss = '',\n\t\t\thyphenate = function (a, b) { return '-' + b.toLowerCase(); };\n\t\t/*jslint unparam: false*/\n\n\t\t// convert legacy\n\t\tif (styles && styles.color) {\n\t\t\tstyles.fill = styles.color;\n\t\t}\n\n\t\t// Merge the new styles with the old ones\n\t\tstyles = extend(\n\t\t\telemWrapper.styles,\n\t\t\tstyles\n\t\t);\n\n\t\t// store object\n\t\telemWrapper.styles = styles;\n\n\n\t\t// Don't handle line wrap on canvas\n\t\tif (useCanVG && textWidth) {\n\t\t\tdelete styles.width;\n\t\t}\n\n\t\t// serialize and set style attribute\n\t\tif (isIE && !hasSVG) { // legacy IE doesn't support setting style attribute\n\t\t\tif (textWidth) {\n\t\t\t\tdelete styles.width;\n\t\t\t}\n\t\t\tcss(elemWrapper.element, styles);\n\t\t} else {\n\t\t\tfor (n in styles) {\n\t\t\t\tserializedCss += n.replace(/([A-Z])/g, hyphenate) + ':' + styles[n] + ';';\n\t\t\t}\n\t\t\tattr(elem, 'style', serializedCss); // #1881\n\t\t}\n\n\n\t\t// re-build text\n\t\tif (textWidth && elemWrapper.added) {\n\t\t\telemWrapper.renderer.buildText(elemWrapper);\n\t\t}\n\n\t\treturn elemWrapper;\n\t},\n\n\t/**\n\t * Add an event listener\n\t * @param {String} eventType\n\t * @param {Function} handler\n\t */\n\ton: function (eventType, handler) {\n\t\tvar svgElement = this,\n\t\t\telement = svgElement.element;\n\t\t\n\t\t// touch\n\t\tif (hasTouch && eventType === 'click') {\n\t\t\telement.ontouchstart = function (e) {\t\t\t\n\t\t\t\tsvgElement.touchEventFired = Date.now();\t\t\t\t\n\t\t\t\te.preventDefault();\n\t\t\t\thandler.call(element, e);\n\t\t\t};\n\t\t\telement.onclick = function (e) {\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\tif (userAgent.indexOf('Android') === -1 || Date.now() - (svgElement.touchEventFired || 0) > 1100) { // #2269\n\t\t\t\t\thandler.call(element, e);\n\t\t\t\t}\n\t\t\t};\t\t\t\n\t\t} else {\n\t\t\t// simplest possible event model for internal use\n\t\t\telement['on' + eventType] = handler;\n\t\t}\n\t\treturn this;\n\t},\n\n\t/**\n\t * Set the coordinates needed to draw a consistent radial gradient across\n\t * pie slices regardless of positioning inside the chart. The format is\n\t * [centerX, centerY, diameter] in pixels.\n\t */\n\tsetRadialReference: function (coordinates) {\n\t\tthis.element.radialReference = coordinates;\n\t\treturn this;\n\t},\n\n\t/**\n\t * Move an object and its children by x and y values\n\t * @param {Number} x\n\t * @param {Number} y\n\t */\n\ttranslate: function (x, y) {\n\t\treturn this.attr({\n\t\t\ttranslateX: x,\n\t\t\ttranslateY: y\n\t\t});\n\t},\n\n\t/**\n\t * Invert a group, rotate and flip\n\t */\n\tinvert: function () {\n\t\tvar wrapper = this;\n\t\twrapper.inverted = true;\n\t\twrapper.updateTransform();\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * Apply CSS to HTML elements. This is used in text within SVG rendering and\n\t * by the VML renderer\n\t */\n\thtmlCss: function (styles) {\n\t\tvar wrapper = this,\n\t\t\telement = wrapper.element,\n\t\t\ttextWidth = styles && element.tagName === 'SPAN' && styles.width;\n\n\t\tif (textWidth) {\n\t\t\tdelete styles.width;\n\t\t\twrapper.textWidth = textWidth;\n\t\t\twrapper.updateTransform();\n\t\t}\n\n\t\twrapper.styles = extend(wrapper.styles, styles);\n\t\tcss(wrapper.element, styles);\n\n\t\treturn wrapper;\n\t},\n\n\n\n\t/**\n\t * VML and useHTML method for calculating the bounding box based on offsets\n\t * @param {Boolean} refresh Whether to force a fresh value from the DOM or to\n\t * use the cached value\n\t *\n\t * @return {Object} A hash containing values for x, y, width and height\n\t */\n\n\thtmlGetBBox: function () {\n\t\tvar wrapper = this,\n\t\t\telement = wrapper.element,\n\t\t\tbBox = wrapper.bBox;\n\n\t\t// faking getBBox in exported SVG in legacy IE\n\t\tif (!bBox) {\n\t\t\t// faking getBBox in exported SVG in legacy IE (is this a duplicate of the fix for #1079?)\n\t\t\tif (element.nodeName === 'text') {\n\t\t\t\telement.style.position = ABSOLUTE;\n\t\t\t}\n\n\t\t\tbBox = wrapper.bBox = {\n\t\t\t\tx: element.offsetLeft,\n\t\t\t\ty: element.offsetTop,\n\t\t\t\twidth: element.offsetWidth,\n\t\t\t\theight: element.offsetHeight\n\t\t\t};\n\t\t}\n\n\t\treturn bBox;\n\t},\n\n\t/**\n\t * VML override private method to update elements based on internal\n\t * properties based on SVG transform\n\t */\n\thtmlUpdateTransform: function () {\n\t\t// aligning non added elements is expensive\n\t\tif (!this.added) {\n\t\t\tthis.alignOnAdd = true;\n\t\t\treturn;\n\t\t}\n\n\t\tvar wrapper = this,\n\t\t\trenderer = wrapper.renderer,\n\t\t\telem = wrapper.element,\n\t\t\ttranslateX = wrapper.translateX || 0,\n\t\t\ttranslateY = wrapper.translateY || 0,\n\t\t\tx = wrapper.x || 0,\n\t\t\ty = wrapper.y || 0,\n\t\t\talign = wrapper.textAlign || 'left',\n\t\t\talignCorrection = { left: 0, center: 0.5, right: 1 }[align],\n\t\t\tnonLeft = align && align !== 'left',\n\t\t\tshadows = wrapper.shadows;\n\n\t\t// apply translate\n\t\tcss(elem, {\n\t\t\tmarginLeft: translateX,\n\t\t\tmarginTop: translateY\n\t\t});\n\t\tif (shadows) { // used in labels/tooltip\n\t\t\teach(shadows, function (shadow) {\n\t\t\t\tcss(shadow, {\n\t\t\t\t\tmarginLeft: translateX + 1,\n\t\t\t\t\tmarginTop: translateY + 1\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// apply inversion\n\t\tif (wrapper.inverted) { // wrapper is a group\n\t\t\teach(elem.childNodes, function (child) {\n\t\t\t\trenderer.invertChild(child, elem);\n\t\t\t});\n\t\t}\n\n\t\tif (elem.tagName === 'SPAN') {\n\n\t\t\tvar width, height,\n\t\t\t\trotation = wrapper.rotation,\n\t\t\t\tbaseline,\n\t\t\t\tradians = 0,\n\t\t\t\tcostheta = 1,\n\t\t\t\tsintheta = 0,\n\t\t\t\tquad,\n\t\t\t\ttextWidth = pInt(wrapper.textWidth),\n\t\t\t\txCorr = wrapper.xCorr || 0,\n\t\t\t\tyCorr = wrapper.yCorr || 0,\n\t\t\t\tcurrentTextTransform = [rotation, align, elem.innerHTML, wrapper.textWidth].join(',');\n\n\t\t\tif (currentTextTransform !== wrapper.cTT) { // do the calculations and DOM access only if properties changed\n\n\t\t\t\tif (defined(rotation)) {\n\n\t\t\t\t\tradians = rotation * deg2rad; // deg to rad\n\t\t\t\t\tcostheta = mathCos(radians);\n\t\t\t\t\tsintheta = mathSin(radians);\n\n\t\t\t\t\twrapper.setSpanRotation(rotation, sintheta, costheta);\n\n\t\t\t\t}\n\n\t\t\t\twidth = pick(wrapper.elemWidth, elem.offsetWidth);\n\t\t\t\theight = pick(wrapper.elemHeight, elem.offsetHeight);\n\n\t\t\t\t// update textWidth\n\t\t\t\tif (width > textWidth && /[ \\-]/.test(elem.textContent || elem.innerText)) { // #983, #1254\n\t\t\t\t\tcss(elem, {\n\t\t\t\t\t\twidth: textWidth + PX,\n\t\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\t\twhiteSpace: 'normal'\n\t\t\t\t\t});\n\t\t\t\t\twidth = textWidth;\n\t\t\t\t}\n\n\t\t\t\t// correct x and y\n\t\t\t\tbaseline = renderer.fontMetrics(elem.style.fontSize).b;\n\t\t\t\txCorr = costheta < 0 && -width;\n\t\t\t\tyCorr = sintheta < 0 && -height;\n\n\t\t\t\t// correct for baseline and corners spilling out after rotation\n\t\t\t\tquad = costheta * sintheta < 0;\n\t\t\t\txCorr += sintheta * baseline * (quad ? 1 - alignCorrection : alignCorrection);\n\t\t\t\tyCorr -= costheta * baseline * (rotation ? (quad ? alignCorrection : 1 - alignCorrection) : 1);\n\n\t\t\t\t// correct for the length/height of the text\n\t\t\t\tif (nonLeft) {\n\t\t\t\t\txCorr -= width * alignCorrection * (costheta < 0 ? -1 : 1);\n\t\t\t\t\tif (rotation) {\n\t\t\t\t\t\tyCorr -= height * alignCorrection * (sintheta < 0 ? -1 : 1);\n\t\t\t\t\t}\n\t\t\t\t\tcss(elem, {\n\t\t\t\t\t\ttextAlign: align\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// record correction\n\t\t\t\twrapper.xCorr = xCorr;\n\t\t\t\twrapper.yCorr = yCorr;\n\t\t\t}\n\n\t\t\t// apply position with correction\n\t\t\tcss(elem, {\n\t\t\t\tleft: (x + xCorr) + PX,\n\t\t\t\ttop: (y + yCorr) + PX\n\t\t\t});\n\n\t\t\t// force reflow in webkit to apply the left and top on useHTML element (#1249)\n\t\t\tif (isWebKit) {\n\t\t\t\theight = elem.offsetHeight; // assigned to height for JSLint purpose\n\t\t\t}\n\n\t\t\t// record current text transform\n\t\t\twrapper.cTT = currentTextTransform;\n\t\t}\n\t},\n\n\t/**\n\t * Set the rotation of an individual HTML span\n\t */\n\tsetSpanRotation: function (rotation) {\n\t\tvar rotationStyle = {},\n\t\t\tcssTransformKey = isIE ? '-ms-transform' : isWebKit ? '-webkit-transform' : isFirefox ? 'MozTransform' : isOpera ? '-o-transform' : '';\n\n\t\trotationStyle[cssTransformKey] = rotationStyle.transform = 'rotate(' + rotation + 'deg)';\n\t\tcss(this.element, rotationStyle);\n\t},\n\n\t/**\n\t * Private method to update the transform attribute based on internal\n\t * properties\n\t */\n\tupdateTransform: function () {\n\t\tvar wrapper = this,\n\t\t\ttranslateX = wrapper.translateX || 0,\n\t\t\ttranslateY = wrapper.translateY || 0,\n\t\t\tscaleX = wrapper.scaleX,\n\t\t\tscaleY = wrapper.scaleY,\n\t\t\tinverted = wrapper.inverted,\n\t\t\trotation = wrapper.rotation,\n\t\t\ttransform;\n\n\t\t// flipping affects translate as adjustment for flipping around the group's axis\n\t\tif (inverted) {\n\t\t\ttranslateX += wrapper.attr('width');\n\t\t\ttranslateY += wrapper.attr('height');\n\t\t}\n\n\t\t// Apply translate. Nearly all transformed elements have translation, so instead\n\t\t// of checking for translate = 0, do it always (#1767, #1846).\n\t\ttransform = ['translate(' + translateX + ',' + translateY + ')'];\n\n\t\t// apply rotation\n\t\tif (inverted) {\n\t\t\ttransform.push('rotate(90) scale(-1,1)');\n\t\t} else if (rotation) { // text rotation\n\t\t\ttransform.push('rotate(' + rotation + ' ' + (wrapper.x || 0) + ' ' + (wrapper.y || 0) + ')');\n\t\t}\n\n\t\t// apply scale\n\t\tif (defined(scaleX) || defined(scaleY)) {\n\t\t\ttransform.push('scale(' + pick(scaleX, 1) + ' ' + pick(scaleY, 1) + ')');\n\t\t}\n\n\t\tif (transform.length) {\n\t\t\tattr(wrapper.element, 'transform', transform.join(' '));\n\t\t}\n\t},\n\t/**\n\t * Bring the element to the front\n\t */\n\ttoFront: function () {\n\t\tvar element = this.element;\n\t\telement.parentNode.appendChild(element);\n\t\treturn this;\n\t},\n\n\n\t/**\n\t * Break down alignment options like align, verticalAlign, x and y\n\t * to x and y relative to the chart.\n\t *\n\t * @param {Object} alignOptions\n\t * @param {Boolean} alignByTranslate\n\t * @param {String[Object} box The box to align to, needs a width and height. When the\n\t *        box is a string, it refers to an object in the Renderer. For example, when\n\t *        box is 'spacingBox', it refers to Renderer.spacingBox which holds width, height\n\t *        x and y properties.\n\t *\n\t */\n\talign: function (alignOptions, alignByTranslate, box) {\n\t\tvar align,\n\t\t\tvAlign,\n\t\t\tx,\n\t\t\ty,\n\t\t\tattribs = {},\n\t\t\talignTo,\n\t\t\trenderer = this.renderer,\n\t\t\talignedObjects = renderer.alignedObjects;\n\n\t\t// First call on instanciate\n\t\tif (alignOptions) {\n\t\t\tthis.alignOptions = alignOptions;\n\t\t\tthis.alignByTranslate = alignByTranslate;\n\t\t\tif (!box || isString(box)) { // boxes other than renderer handle this internally\n\t\t\t\tthis.alignTo = alignTo = box || 'renderer';\n\t\t\t\terase(alignedObjects, this); // prevent duplicates, like legendGroup after resize\n\t\t\t\talignedObjects.push(this);\n\t\t\t\tbox = null; // reassign it below\n\t\t\t}\n\n\t\t// When called on resize, no arguments are supplied\n\t\t} else {\n\t\t\talignOptions = this.alignOptions;\n\t\t\talignByTranslate = this.alignByTranslate;\n\t\t\talignTo = this.alignTo;\n\t\t}\n\n\t\tbox = pick(box, renderer[alignTo], renderer);\n\n\t\t// Assign variables\n\t\talign = alignOptions.align;\n\t\tvAlign = alignOptions.verticalAlign;\n\t\tx = (box.x || 0) + (alignOptions.x || 0); // default: left align\n\t\ty = (box.y || 0) + (alignOptions.y || 0); // default: top align\n\n\t\t// Align\n\t\tif (align === 'right' || align === 'center') {\n\t\t\tx += (box.width - (alignOptions.width || 0)) /\n\t\t\t\t\t{ right: 1, center: 2 }[align];\n\t\t}\n\t\tattribs[alignByTranslate ? 'translateX' : 'x'] = mathRound(x);\n\n\n\t\t// Vertical align\n\t\tif (vAlign === 'bottom' || vAlign === 'middle') {\n\t\t\ty += (box.height - (alignOptions.height || 0)) /\n\t\t\t\t\t({ bottom: 1, middle: 2 }[vAlign] || 1);\n\n\t\t}\n\t\tattribs[alignByTranslate ? 'translateY' : 'y'] = mathRound(y);\n\n\t\t// Animate only if already placed\n\t\tthis[this.placed ? 'animate' : 'attr'](attribs);\n\t\tthis.placed = true;\n\t\tthis.alignAttr = attribs;\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get the bounding box (width, height, x and y) for the element\n\t */\n\tgetBBox: function () {\n\t\tvar wrapper = this,\n\t\t\tbBox = wrapper.bBox,\n\t\t\trenderer = wrapper.renderer,\n\t\t\twidth,\n\t\t\theight,\n\t\t\trotation = wrapper.rotation,\n\t\t\telement = wrapper.element,\n\t\t\tstyles = wrapper.styles,\n\t\t\trad = rotation * deg2rad;\n\n\t\tif (!bBox) {\n\t\t\t// SVG elements\n\t\t\tif (element.namespaceURI === SVG_NS || renderer.forExport) {\n\t\t\t\ttry { // Fails in Firefox if the container has display: none.\n\n\t\t\t\t\tbBox = element.getBBox ?\n\t\t\t\t\t\t// SVG: use extend because IE9 is not allowed to change width and height in case\n\t\t\t\t\t\t// of rotation (below)\n\t\t\t\t\t\textend({}, element.getBBox()) :\n\t\t\t\t\t\t// Canvas renderer and legacy IE in export mode\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidth: element.offsetWidth,\n\t\t\t\t\t\t\theight: element.offsetHeight\n\t\t\t\t\t\t};\n\t\t\t\t} catch (e) {}\n\n\t\t\t\t// If the bBox is not set, the try-catch block above failed. The other condition\n\t\t\t\t// is for Opera that returns a width of -Infinity on hidden elements.\n\t\t\t\tif (!bBox || bBox.width < 0) {\n\t\t\t\t\tbBox = { width: 0, height: 0 };\n\t\t\t\t}\n\n\n\t\t\t// VML Renderer or useHTML within SVG\n\t\t\t} else {\n\n\t\t\t\tbBox = wrapper.htmlGetBBox();\n\n\t\t\t}\n\n\t\t\t// True SVG elements as well as HTML elements in modern browsers using the .useHTML option\n\t\t\t// need to compensated for rotation\n\t\t\tif (renderer.isSVG) {\n\t\t\t\twidth = bBox.width;\n\t\t\t\theight = bBox.height;\n\n\t\t\t\t// Workaround for wrong bounding box in IE9 and IE10 (#1101, #1505, #1669)\n\t\t\t\tif (isIE && styles && styles.fontSize === '11px' && height.toPrecision(3) === '22.7') {\n\t\t\t\t\tbBox.height = height = 14;\n\t\t\t\t}\n\n\t\t\t\t// Adjust for rotated text\n\t\t\t\tif (rotation) {\n\t\t\t\t\tbBox.width = mathAbs(height * mathSin(rad)) + mathAbs(width * mathCos(rad));\n\t\t\t\t\tbBox.height = mathAbs(height * mathCos(rad)) + mathAbs(width * mathSin(rad));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twrapper.bBox = bBox;\n\t\t}\n\t\treturn bBox;\n\t},\n\n\t/**\n\t * Show the element\n\t */\n\tshow: function () {\n\t\treturn this.attr({ visibility: VISIBLE });\n\t},\n\n\t/**\n\t * Hide the element\n\t */\n\thide: function () {\n\t\treturn this.attr({ visibility: HIDDEN });\n\t},\n\n\tfadeOut: function (duration) {\n\t\tvar elemWrapper = this;\n\t\telemWrapper.animate({\n\t\t\topacity: 0\n\t\t}, {\n\t\t\tduration: duration || 150,\n\t\t\tcomplete: function () {\n\t\t\t\telemWrapper.hide();\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Add the element\n\t * @param {Object|Undefined} parent Can be an element, an element wrapper or undefined\n\t *    to append the element to the renderer.box.\n\t */\n\tadd: function (parent) {\n\n\t\tvar renderer = this.renderer,\n\t\t\tparentWrapper = parent || renderer,\n\t\t\tparentNode = parentWrapper.element || renderer.box,\n\t\t\tchildNodes = parentNode.childNodes,\n\t\t\telement = this.element,\n\t\t\tzIndex = attr(element, 'zIndex'),\n\t\t\totherElement,\n\t\t\totherZIndex,\n\t\t\ti,\n\t\t\tinserted;\n\n\t\tif (parent) {\n\t\t\tthis.parentGroup = parent;\n\t\t}\n\n\t\t// mark as inverted\n\t\tthis.parentInverted = parent && parent.inverted;\n\n\t\t// build formatted text\n\t\tif (this.textStr !== undefined) {\n\t\t\trenderer.buildText(this);\n\t\t}\n\n\t\t// mark the container as having z indexed children\n\t\tif (zIndex) {\n\t\t\tparentWrapper.handleZ = true;\n\t\t\tzIndex = pInt(zIndex);\n\t\t}\n\n\t\t// insert according to this and other elements' zIndex\n\t\tif (parentWrapper.handleZ) { // this element or any of its siblings has a z index\n\t\t\tfor (i = 0; i < childNodes.length; i++) {\n\t\t\t\totherElement = childNodes[i];\n\t\t\t\totherZIndex = attr(otherElement, 'zIndex');\n\t\t\t\tif (otherElement !== element && (\n\t\t\t\t\t\t// insert before the first element with a higher zIndex\n\t\t\t\t\t\tpInt(otherZIndex) > zIndex ||\n\t\t\t\t\t\t// if no zIndex given, insert before the first element with a zIndex\n\t\t\t\t\t\t(!defined(zIndex) && defined(otherZIndex))\n\n\t\t\t\t\t\t)) {\n\t\t\t\t\tparentNode.insertBefore(element, otherElement);\n\t\t\t\t\tinserted = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// default: append at the end\n\t\tif (!inserted) {\n\t\t\tparentNode.appendChild(element);\n\t\t}\n\n\t\t// mark as added\n\t\tthis.added = true;\n\n\t\t// fire an event for internal hooks\n\t\tfireEvent(this, 'add');\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Removes a child either by removeChild or move to garbageBin.\n\t * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not.\n\t */\n\tsafeRemoveChild: function (element) {\n\t\tvar parentNode = element.parentNode;\n\t\tif (parentNode) {\n\t\t\tparentNode.removeChild(element);\n\t\t}\n\t},\n\n\t/**\n\t * Destroy the element and element wrapper\n\t */\n\tdestroy: function () {\n\t\tvar wrapper = this,\n\t\t\telement = wrapper.element || {},\n\t\t\tshadows = wrapper.shadows,\n\t\t\tparentToClean = wrapper.renderer.isSVG && element.nodeName === 'SPAN' && element.parentNode,\n\t\t\tgrandParent,\n\t\t\tkey,\n\t\t\ti;\n\n\t\t// remove events\n\t\telement.onclick = element.onmouseout = element.onmouseover = element.onmousemove = element.point = null;\n\t\tstop(wrapper); // stop running animations\n\n\t\tif (wrapper.clipPath) {\n\t\t\twrapper.clipPath = wrapper.clipPath.destroy();\n\t\t}\n\n\t\t// Destroy stops in case this is a gradient object\n\t\tif (wrapper.stops) {\n\t\t\tfor (i = 0; i < wrapper.stops.length; i++) {\n\t\t\t\twrapper.stops[i] = wrapper.stops[i].destroy();\n\t\t\t}\n\t\t\twrapper.stops = null;\n\t\t}\n\n\t\t// remove element\n\t\twrapper.safeRemoveChild(element);\n\n\t\t// destroy shadows\n\t\tif (shadows) {\n\t\t\teach(shadows, function (shadow) {\n\t\t\t\twrapper.safeRemoveChild(shadow);\n\t\t\t});\n\t\t}\n\n\t\t// In case of useHTML, clean up empty containers emulating SVG groups (#1960).\n\t\twhile (parentToClean && parentToClean.childNodes.length === 0) {\n\t\t\tgrandParent = parentToClean.parentNode;\n\t\t\twrapper.safeRemoveChild(parentToClean);\n\t\t\tparentToClean = grandParent;\n\t\t}\n\n\t\t// remove from alignObjects\n\t\tif (wrapper.alignTo) {\n\t\t\terase(wrapper.renderer.alignedObjects, wrapper);\n\t\t}\n\n\t\tfor (key in wrapper) {\n\t\t\tdelete wrapper[key];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Add a shadow to the element. Must be done after the element is added to the DOM\n\t * @param {Boolean|Object} shadowOptions\n\t */\n\tshadow: function (shadowOptions, group, cutOff) {\n\t\tvar shadows = [],\n\t\t\ti,\n\t\t\tshadow,\n\t\t\telement = this.element,\n\t\t\tstrokeWidth,\n\t\t\tshadowWidth,\n\t\t\tshadowElementOpacity,\n\n\t\t\t// compensate for inverted plot area\n\t\t\ttransform;\n\n\n\t\tif (shadowOptions) {\n\t\t\tshadowWidth = pick(shadowOptions.width, 3);\n\t\t\tshadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth;\n\t\t\ttransform = this.parentInverted ?\n\t\t\t\t'(-1,-1)' :\n\t\t\t\t'(' + pick(shadowOptions.offsetX, 1) + ', ' + pick(shadowOptions.offsetY, 1) + ')';\n\t\t\tfor (i = 1; i <= shadowWidth; i++) {\n\t\t\t\tshadow = element.cloneNode(0);\n\t\t\t\tstrokeWidth = (shadowWidth * 2) + 1 - (2 * i);\n\t\t\t\tattr(shadow, {\n\t\t\t\t\t'isShadow': 'true',\n\t\t\t\t\t'stroke': shadowOptions.color || 'black',\n\t\t\t\t\t'stroke-opacity': shadowElementOpacity * i,\n\t\t\t\t\t'stroke-width': strokeWidth,\n\t\t\t\t\t'transform': 'translate' + transform,\n\t\t\t\t\t'fill': NONE\n\t\t\t\t});\n\t\t\t\tif (cutOff) {\n\t\t\t\t\tattr(shadow, 'height', mathMax(attr(shadow, 'height') - strokeWidth, 0));\n\t\t\t\t\tshadow.cutHeight = strokeWidth;\n\t\t\t\t}\n\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.element.appendChild(shadow);\n\t\t\t\t} else {\n\t\t\t\t\telement.parentNode.insertBefore(shadow, element);\n\t\t\t\t}\n\n\t\t\t\tshadows.push(shadow);\n\t\t\t}\n\n\t\t\tthis.shadows = shadows;\n\t\t}\n\t\treturn this;\n\n\t}\n};\n\n\n/**\n * The default SVG renderer\n */\nvar SVGRenderer = function () {\n\tthis.init.apply(this, arguments);\n};\nSVGRenderer.prototype = {\n\tElement: SVGElement,\n\n\t/**\n\t * Initialize the SVGRenderer\n\t * @param {Object} container\n\t * @param {Number} width\n\t * @param {Number} height\n\t * @param {Boolean} forExport\n\t */\n\tinit: function (container, width, height, forExport) {\n\t\tvar renderer = this,\n\t\t\tloc = location,\n\t\t\tboxWrapper,\n\t\t\telement,\n\t\t\tdesc;\n\n\t\tboxWrapper = renderer.createElement('svg')\n\t\t\t.attr({\n\t\t\t\tversion: '1.1'\n\t\t\t});\n\t\telement = boxWrapper.element;\n\t\tcontainer.appendChild(element);\n\n\t\t// For browsers other than IE, add the namespace attribute (#1978)\n\t\tif (container.innerHTML.indexOf('xmlns') === -1) {\n\t\t\tattr(element, 'xmlns', SVG_NS);\n\t\t}\n\n\t\t// object properties\n\t\trenderer.isSVG = true;\n\t\trenderer.box = element;\n\t\trenderer.boxWrapper = boxWrapper;\n\t\trenderer.alignedObjects = [];\n\n\t\t// Page url used for internal references. #24, #672, #1070\n\t\trenderer.url = (isFirefox || isWebKit) && doc.getElementsByTagName('base').length ?\n\t\t\tloc.href\n\t\t\t\t.replace(/#.*?$/, '') // remove the hash\n\t\t\t\t.replace(/([\\('\\)])/g, '\\\\$1') // escape parantheses and quotes\n\t\t\t\t.replace(/ /g, '%20') : // replace spaces (needed for Safari only)\n\t\t\t'';\n\n\t\t// Add description\n\t\tdesc = this.createElement('desc').add();\n\t\tdesc.element.appendChild(doc.createTextNode('Created with ' + PRODUCT + ' ' + VERSION));\n\n\n\t\trenderer.defs = this.createElement('defs').add();\n\t\trenderer.forExport = forExport;\n\t\trenderer.gradients = {}; // Object where gradient SvgElements are stored\n\n\t\trenderer.setSize(width, height, false);\n\n\n\n\t\t// Issue 110 workaround:\n\t\t// In Firefox, if a div is positioned by percentage, its pixel position may land\n\t\t// between pixels. The container itself doesn't display this, but an SVG element\n\t\t// inside this container will be drawn at subpixel precision. In order to draw\n\t\t// sharp lines, this must be compensated for. This doesn't seem to work inside\n\t\t// iframes though (like in jsFiddle).\n\t\tvar subPixelFix, rect;\n\t\tif (isFirefox && container.getBoundingClientRect) {\n\t\t\trenderer.subPixelFix = subPixelFix = function () {\n\t\t\t\tcss(container, { left: 0, top: 0 });\n\t\t\t\trect = container.getBoundingClientRect();\n\t\t\t\tcss(container, {\n\t\t\t\t\tleft: (mathCeil(rect.left) - rect.left) + PX,\n\t\t\t\t\ttop: (mathCeil(rect.top) - rect.top) + PX\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t// run the fix now\n\t\t\tsubPixelFix();\n\n\t\t\t// run it on resize\n\t\t\taddEvent(win, 'resize', subPixelFix);\n\t\t}\n\t},\n\n\t/**\n\t * Detect whether the renderer is hidden. This happens when one of the parent elements\n\t * has display: none. #608.\n\t */\n\tisHidden: function () {\n\t\treturn !this.boxWrapper.getBBox().width;\n\t},\n\n\t/**\n\t * Destroys the renderer and its allocated members.\n\t */\n\tdestroy: function () {\n\t\tvar renderer = this,\n\t\t\trendererDefs = renderer.defs;\n\t\trenderer.box = null;\n\t\trenderer.boxWrapper = renderer.boxWrapper.destroy();\n\n\t\t// Call destroy on all gradient elements\n\t\tdestroyObjectProperties(renderer.gradients || {});\n\t\trenderer.gradients = null;\n\n\t\t// Defs are null in VMLRenderer\n\t\t// Otherwise, destroy them here.\n\t\tif (rendererDefs) {\n\t\t\trenderer.defs = rendererDefs.destroy();\n\t\t}\n\n\t\t// Remove sub pixel fix handler\n\t\t// We need to check that there is a handler, otherwise all functions that are registered for event 'resize' are removed\n\t\t// See issue #982\n\t\tif (renderer.subPixelFix) {\n\t\t\tremoveEvent(win, 'resize', renderer.subPixelFix);\n\t\t}\n\n\t\trenderer.alignedObjects = null;\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Create a wrapper for an SVG element\n\t * @param {Object} nodeName\n\t */\n\tcreateElement: function (nodeName) {\n\t\tvar wrapper = new this.Element();\n\t\twrapper.init(this, nodeName);\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * Dummy function for use in canvas renderer\n\t */\n\tdraw: function () {},\n\n\t/**\n\t * Parse a simple HTML string into SVG tspans\n\t *\n\t * @param {Object} textNode The parent text SVG node\n\t */\n\tbuildText: function (wrapper) {\n\t\tvar textNode = wrapper.element,\n\t\t\trenderer = this,\n\t\t\tforExport = renderer.forExport,\n\t\t\tlines = pick(wrapper.textStr, '').toString()\n\t\t\t\t.replace(/<(b|strong)>/g, '<span style=\"font-weight:bold\">')\n\t\t\t\t.replace(/<(i|em)>/g, '<span style=\"font-style:italic\">')\n\t\t\t\t.replace(/<a/g, '<span')\n\t\t\t\t.replace(/<\\/(b|strong|i|em|a)>/g, '</span>')\n\t\t\t\t.split(/<br.*?>/g),\n\t\t\tchildNodes = textNode.childNodes,\n\t\t\tstyleRegex = /style=\"([^\"]+)\"/,\n\t\t\threfRegex = /href=\"(http[^\"]+)\"/,\n\t\t\tparentX = attr(textNode, 'x'),\n\t\t\ttextStyles = wrapper.styles,\n\t\t\twidth = textStyles && textStyles.width && pInt(textStyles.width),\n\t\t\ttextLineHeight = textStyles && textStyles.lineHeight,\n\t\t\ti = childNodes.length;\n\n\t\t/// remove old text\n\t\twhile (i--) {\n\t\t\ttextNode.removeChild(childNodes[i]);\n\t\t}\n\n\t\tif (width && !wrapper.added) {\n\t\t\tthis.box.appendChild(textNode); // attach it to the DOM to read offset width\n\t\t}\n\n\t\t// remove empty line at end\n\t\tif (lines[lines.length - 1] === '') {\n\t\t\tlines.pop();\n\t\t}\n\n\t\t// build the lines\n\t\teach(lines, function (line, lineNo) {\n\t\t\tvar spans, spanNo = 0;\n\n\t\t\tline = line.replace(/<span/g, '|||<span').replace(/<\\/span>/g, '</span>|||');\n\t\t\tspans = line.split('|||');\n\n\t\t\teach(spans, function (span) {\n\t\t\t\tif (span !== '' || spans.length === 1) {\n\t\t\t\t\tvar attributes = {},\n\t\t\t\t\t\ttspan = doc.createElementNS(SVG_NS, 'tspan'),\n\t\t\t\t\t\tspanStyle; // #390\n\t\t\t\t\tif (styleRegex.test(span)) {\n\t\t\t\t\t\tspanStyle = span.match(styleRegex)[1].replace(/(;| |^)color([ :])/, '$1fill$2');\n\t\t\t\t\t\tattr(tspan, 'style', spanStyle);\n\t\t\t\t\t}\n\t\t\t\t\tif (hrefRegex.test(span) && !forExport) { // Not for export - #1529\n\t\t\t\t\t\tattr(tspan, 'onclick', 'location.href=\\\"' + span.match(hrefRegex)[1] + '\\\"');\n\t\t\t\t\t\tcss(tspan, { cursor: 'pointer' });\n\t\t\t\t\t}\n\n\t\t\t\t\tspan = (span.replace(/<(.|\\n)*?>/g, '') || ' ')\n\t\t\t\t\t\t.replace(/&lt;/g, '<')\n\t\t\t\t\t\t.replace(/&gt;/g, '>');\n\n\t\t\t\t\t// Nested tags aren't supported, and cause crash in Safari (#1596)\n\t\t\t\t\tif (span !== ' ') {\n\n\t\t\t\t\t\t// add the text node\n\t\t\t\t\t\ttspan.appendChild(doc.createTextNode(span));\n\n\t\t\t\t\t\tif (!spanNo) { // first span in a line, align it to the left\n\t\t\t\t\t\t\tattributes.x = parentX;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattributes.dx = 0; // #16\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// add attributes\n\t\t\t\t\t\tattr(tspan, attributes);\n\n\t\t\t\t\t\t// first span on subsequent line, add the line height\n\t\t\t\t\t\tif (!spanNo && lineNo) {\n\n\t\t\t\t\t\t\t// allow getting the right offset height in exporting in IE\n\t\t\t\t\t\t\tif (!hasSVG && forExport) {\n\t\t\t\t\t\t\t\tcss(tspan, { display: 'block' });\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Set the line height based on the font size of either\n\t\t\t\t\t\t\t// the text element or the tspan element\n\t\t\t\t\t\t\tattr(\n\t\t\t\t\t\t\t\ttspan,\n\t\t\t\t\t\t\t\t'dy',\n\t\t\t\t\t\t\t\ttextLineHeight || renderer.fontMetrics(\n\t\t\t\t\t\t\t\t\t/px$/.test(tspan.style.fontSize) ?\n\t\t\t\t\t\t\t\t\t\ttspan.style.fontSize :\n\t\t\t\t\t\t\t\t\t\ttextStyles.fontSize\n\t\t\t\t\t\t\t\t).h,\n\t\t\t\t\t\t\t\t// Safari 6.0.2 - too optimized for its own good (#1539)\n\t\t\t\t\t\t\t\t// TODO: revisit this with future versions of Safari\n\t\t\t\t\t\t\t\tisWebKit && tspan.offsetHeight\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Append it\n\t\t\t\t\t\ttextNode.appendChild(tspan);\n\n\t\t\t\t\t\tspanNo++;\n\n\t\t\t\t\t\t// check width and apply soft breaks\n\t\t\t\t\t\tif (width) {\n\t\t\t\t\t\t\tvar words = span.replace(/([^\\^])-/g, '$1- ').split(' '), // #1273\n\t\t\t\t\t\t\t\ttooLong,\n\t\t\t\t\t\t\t\tactualWidth,\n\t\t\t\t\t\t\t\tclipHeight = wrapper._clipHeight,\n\t\t\t\t\t\t\t\trest = [],\n\t\t\t\t\t\t\t\tdy = pInt(textLineHeight || 16),\n\t\t\t\t\t\t\t\tsoftLineNo = 1,\n\t\t\t\t\t\t\t\tbBox;\n\n\t\t\t\t\t\t\twhile (words.length || rest.length) {\n\t\t\t\t\t\t\t\tdelete wrapper.bBox; // delete cache\n\t\t\t\t\t\t\t\tbBox = wrapper.getBBox();\n\t\t\t\t\t\t\t\tactualWidth = bBox.width;\n\t\t\t\t\t\t\t\ttooLong = actualWidth > width;\n\t\t\t\t\t\t\t\tif (!tooLong || words.length === 1) { // new line needed\n\t\t\t\t\t\t\t\t\twords = rest;\n\t\t\t\t\t\t\t\t\trest = [];\n\t\t\t\t\t\t\t\t\tif (words.length) {\n\t\t\t\t\t\t\t\t\t\tsoftLineNo++;\n\n\t\t\t\t\t\t\t\t\t\tif (clipHeight && softLineNo * dy > clipHeight) {\n\t\t\t\t\t\t\t\t\t\t\twords = ['...'];\n\t\t\t\t\t\t\t\t\t\t\twrapper.attr('title', wrapper.textStr);\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\ttspan = doc.createElementNS(SVG_NS, 'tspan');\n\t\t\t\t\t\t\t\t\t\t\tattr(tspan, {\n\t\t\t\t\t\t\t\t\t\t\t\tdy: dy,\n\t\t\t\t\t\t\t\t\t\t\t\tx: parentX\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\tif (spanStyle) { // #390\n\t\t\t\t\t\t\t\t\t\t\t\tattr(tspan, 'style', spanStyle);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\ttextNode.appendChild(tspan);\n\n\t\t\t\t\t\t\t\t\t\t\tif (actualWidth > width) { // a single word is pressing it out\n\t\t\t\t\t\t\t\t\t\t\t\twidth = actualWidth;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else { // append to existing line tspan\n\t\t\t\t\t\t\t\t\ttspan.removeChild(tspan.firstChild);\n\t\t\t\t\t\t\t\t\trest.unshift(words.pop());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (words.length) {\n\t\t\t\t\t\t\t\t\ttspan.appendChild(doc.createTextNode(words.join(' ').replace(/- /g, '-')));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n\t * Create a button with preset states\n\t * @param {String} text\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Function} callback\n\t * @param {Object} normalState\n\t * @param {Object} hoverState\n\t * @param {Object} pressedState\n\t */\n\tbutton: function (text, x, y, callback, normalState, hoverState, pressedState, disabledState) {\n\t\tvar label = this.label(text, x, y, null, null, null, null, null, 'button'),\n\t\t\tcurState = 0,\n\t\t\tstateOptions,\n\t\t\tstateStyle,\n\t\t\tnormalStyle,\n\t\t\thoverStyle,\n\t\t\tpressedStyle,\n\t\t\tdisabledStyle,\n\t\t\tSTYLE = 'style',\n\t\t\tverticalGradient = { x1: 0, y1: 0, x2: 0, y2: 1 };\n\n\t\t// Normal state - prepare the attributes\n\t\tnormalState = merge({\n\t\t\t'stroke-width': 1,\n\t\t\tstroke: '#CCCCCC',\n\t\t\tfill: {\n\t\t\t\tlinearGradient: verticalGradient,\n\t\t\t\tstops: [\n\t\t\t\t\t[0, '#FEFEFE'],\n\t\t\t\t\t[1, '#F6F6F6']\n\t\t\t\t]\n\t\t\t},\n\t\t\tr: 2,\n\t\t\tpadding: 5,\n\t\t\tstyle: {\n\t\t\t\tcolor: 'black'\n\t\t\t}\n\t\t}, normalState);\n\t\tnormalStyle = normalState[STYLE];\n\t\tdelete normalState[STYLE];\n\n\t\t// Hover state\n\t\thoverState = merge(normalState, {\n\t\t\tstroke: '#68A',\n\t\t\tfill: {\n\t\t\t\tlinearGradient: verticalGradient,\n\t\t\t\tstops: [\n\t\t\t\t\t[0, '#FFF'],\n\t\t\t\t\t[1, '#ACF']\n\t\t\t\t]\n\t\t\t}\n\t\t}, hoverState);\n\t\thoverStyle = hoverState[STYLE];\n\t\tdelete hoverState[STYLE];\n\n\t\t// Pressed state\n\t\tpressedState = merge(normalState, {\n\t\t\tstroke: '#68A',\n\t\t\tfill: {\n\t\t\t\tlinearGradient: verticalGradient,\n\t\t\t\tstops: [\n\t\t\t\t\t[0, '#9BD'],\n\t\t\t\t\t[1, '#CDF']\n\t\t\t\t]\n\t\t\t}\n\t\t}, pressedState);\n\t\tpressedStyle = pressedState[STYLE];\n\t\tdelete pressedState[STYLE];\n\n\t\t// Disabled state\n\t\tdisabledState = merge(normalState, {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t}\n\t\t}, disabledState);\n\t\tdisabledStyle = disabledState[STYLE];\n\t\tdelete disabledState[STYLE];\n\n\t\t// Add the events. IE9 and IE10 need mouseover and mouseout to funciton (#667).\n\t\taddEvent(label.element, isIE ? 'mouseover' : 'mouseenter', function () {\n\t\t\tif (curState !== 3) {\n\t\t\t\tlabel.attr(hoverState)\n\t\t\t\t\t.css(hoverStyle);\n\t\t\t}\n\t\t});\n\t\taddEvent(label.element, isIE ? 'mouseout' : 'mouseleave', function () {\n\t\t\tif (curState !== 3) {\n\t\t\t\tstateOptions = [normalState, hoverState, pressedState][curState];\n\t\t\t\tstateStyle = [normalStyle, hoverStyle, pressedStyle][curState];\n\t\t\t\tlabel.attr(stateOptions)\n\t\t\t\t\t.css(stateStyle);\n\t\t\t}\n\t\t});\n\n\t\tlabel.setState = function (state) {\n\t\t\tlabel.state = curState = state;\n\t\t\tif (!state) {\n\t\t\t\tlabel.attr(normalState)\n\t\t\t\t\t.css(normalStyle);\n\t\t\t} else if (state === 2) {\n\t\t\t\tlabel.attr(pressedState)\n\t\t\t\t\t.css(pressedStyle);\n\t\t\t} else if (state === 3) {\n\t\t\t\tlabel.attr(disabledState)\n\t\t\t\t\t.css(disabledStyle);\n\t\t\t}\n\t\t};\n\n\t\treturn label\n\t\t\t.on('click', function () {\n\t\t\t\tif (curState !== 3) {\n\t\t\t\t\tcallback.call(label);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.attr(normalState)\n\t\t\t.css(extend({ cursor: 'default' }, normalStyle));\n\t},\n\n\t/**\n\t * Make a straight line crisper by not spilling out to neighbour pixels\n\t * @param {Array} points\n\t * @param {Number} width\n\t */\n\tcrispLine: function (points, width) {\n\t\t// points format: [M, 0, 0, L, 100, 0]\n\t\t// normalize to a crisp line\n\t\tif (points[1] === points[4]) {\n\t\t\t// Substract due to #1129. Now bottom and left axis gridlines behave the same.\n\t\t\tpoints[1] = points[4] = mathRound(points[1]) - (width % 2 / 2);\n\t\t}\n\t\tif (points[2] === points[5]) {\n\t\t\tpoints[2] = points[5] = mathRound(points[2]) + (width % 2 / 2);\n\t\t}\n\t\treturn points;\n\t},\n\n\n\t/**\n\t * Draw a path\n\t * @param {Array} path An SVG path in array form\n\t */\n\tpath: function (path) {\n\t\tvar attr = {\n\t\t\tfill: NONE\n\t\t};\n\t\tif (isArray(path)) {\n\t\t\tattr.d = path;\n\t\t} else if (isObject(path)) { // attributes\n\t\t\textend(attr, path);\n\t\t}\n\t\treturn this.createElement('path').attr(attr);\n\t},\n\n\t/**\n\t * Draw and return an SVG circle\n\t * @param {Number} x The x position\n\t * @param {Number} y The y position\n\t * @param {Number} r The radius\n\t */\n\tcircle: function (x, y, r) {\n\t\tvar attr = isObject(x) ?\n\t\t\tx :\n\t\t\t{\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\tr: r\n\t\t\t};\n\n\t\treturn this.createElement('circle').attr(attr);\n\t},\n\n\t/**\n\t * Draw and return an arc\n\t * @param {Number} x X position\n\t * @param {Number} y Y position\n\t * @param {Number} r Radius\n\t * @param {Number} innerR Inner radius like used in donut charts\n\t * @param {Number} start Starting angle\n\t * @param {Number} end Ending angle\n\t */\n\tarc: function (x, y, r, innerR, start, end) {\n\t\tvar arc;\n\n\t\tif (isObject(x)) {\n\t\t\ty = x.y;\n\t\t\tr = x.r;\n\t\t\tinnerR = x.innerR;\n\t\t\tstart = x.start;\n\t\t\tend = x.end;\n\t\t\tx = x.x;\n\t\t}\n\n\t\t// Arcs are defined as symbols for the ability to set\n\t\t// attributes in attr and animate\n\t\tarc = this.symbol('arc', x || 0, y || 0, r || 0, r || 0, {\n\t\t\tinnerR: innerR || 0,\n\t\t\tstart: start || 0,\n\t\t\tend: end || 0\n\t\t});\n\t\tarc.r = r; // #959\n\t\treturn arc;\n\t},\n\n\t/**\n\t * Draw and return a rectangle\n\t * @param {Number} x Left position\n\t * @param {Number} y Top position\n\t * @param {Number} width\n\t * @param {Number} height\n\t * @param {Number} r Border corner radius\n\t * @param {Number} strokeWidth A stroke width can be supplied to allow crisp drawing\n\t */\n\trect: function (x, y, width, height, r, strokeWidth) {\n\n\t\tr = isObject(x) ? x.r : r;\n\n\t\tvar wrapper = this.createElement('rect').attr({\n\t\t\t\trx: r,\n\t\t\t\try: r,\n\t\t\t\tfill: NONE\n\t\t\t});\n\t\treturn wrapper.attr(\n\t\t\t\tisObject(x) ?\n\t\t\t\t\tx :\n\t\t\t\t\t// do not crispify when an object is passed in (as in column charts)\n\t\t\t\t\twrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0))\n\t\t\t);\n\t},\n\n\t/**\n\t * Resize the box and re-align all aligned elements\n\t * @param {Object} width\n\t * @param {Object} height\n\t * @param {Boolean} animate\n\t *\n\t */\n\tsetSize: function (width, height, animate) {\n\t\tvar renderer = this,\n\t\t\talignedObjects = renderer.alignedObjects,\n\t\t\ti = alignedObjects.length;\n\n\t\trenderer.width = width;\n\t\trenderer.height = height;\n\n\t\trenderer.boxWrapper[pick(animate, true) ? 'animate' : 'attr']({\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t});\n\n\t\twhile (i--) {\n\t\t\talignedObjects[i].align();\n\t\t}\n\t},\n\n\t/**\n\t * Create a group\n\t * @param {String} name The group will be given a class name of 'highcharts-{name}'.\n\t *     This can be used for styling and scripting.\n\t */\n\tg: function (name) {\n\t\tvar elem = this.createElement('g');\n\t\treturn defined(name) ? elem.attr({ 'class': PREFIX + name }) : elem;\n\t},\n\n\t/**\n\t * Display an image\n\t * @param {String} src\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\timage: function (src, x, y, width, height) {\n\t\tvar attribs = {\n\t\t\t\tpreserveAspectRatio: NONE\n\t\t\t},\n\t\t\telemWrapper;\n\n\t\t// optional properties\n\t\tif (arguments.length > 1) {\n\t\t\textend(attribs, {\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t});\n\t\t}\n\n\t\telemWrapper = this.createElement('image').attr(attribs);\n\n\t\t// set the href in the xlink namespace\n\t\tif (elemWrapper.element.setAttributeNS) {\n\t\t\telemWrapper.element.setAttributeNS('http://www.w3.org/1999/xlink',\n\t\t\t\t'href', src);\n\t\t} else {\n\t\t\t// could be exporting in IE\n\t\t\t// using href throws \"not supported\" in ie7 and under, requries regex shim to fix later\n\t\t\telemWrapper.element.setAttribute('hc-svg-href', src);\n\t}\n\n\t\treturn elemWrapper;\n\t},\n\n\t/**\n\t * Draw a symbol out of pre-defined shape paths from the namespace 'symbol' object.\n\t *\n\t * @param {Object} symbol\n\t * @param {Object} x\n\t * @param {Object} y\n\t * @param {Object} radius\n\t * @param {Object} options\n\t */\n\tsymbol: function (symbol, x, y, width, height, options) {\n\n\t\tvar obj,\n\n\t\t\t// get the symbol definition function\n\t\t\tsymbolFn = this.symbols[symbol],\n\n\t\t\t// check if there's a path defined for this symbol\n\t\t\tpath = symbolFn && symbolFn(\n\t\t\t\tmathRound(x),\n\t\t\t\tmathRound(y),\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\toptions\n\t\t\t),\n\n\t\t\timageElement,\n\t\t\timageRegex = /^url\\((.*?)\\)$/,\n\t\t\timageSrc,\n\t\t\timageSize,\n\t\t\tcenterImage;\n\n\t\tif (path) {\n\n\t\t\tobj = this.path(path);\n\t\t\t// expando properties for use in animate and attr\n\t\t\textend(obj, {\n\t\t\t\tsymbolName: symbol,\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t});\n\t\t\tif (options) {\n\t\t\t\textend(obj, options);\n\t\t\t}\n\n\n\t\t// image symbols\n\t\t} else if (imageRegex.test(symbol)) {\n\n\t\t\t// On image load, set the size and position\n\t\t\tcenterImage = function (img, size) {\n\t\t\t\tif (img.element) { // it may be destroyed in the meantime (#1390)\n\t\t\t\t\timg.attr({\n\t\t\t\t\t\twidth: size[0],\n\t\t\t\t\t\theight: size[1]\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!img.alignByTranslate) { // #185\n\t\t\t\t\t\timg.translate(\n\t\t\t\t\t\t\tmathRound((width - size[0]) / 2), // #1378\n\t\t\t\t\t\t\tmathRound((height - size[1]) / 2)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\timageSrc = symbol.match(imageRegex)[1];\n\t\t\timageSize = symbolSizes[imageSrc];\n\n\t\t\t// Ireate the image synchronously, add attribs async\n\t\t\tobj = this.image(imageSrc)\n\t\t\t\t.attr({\n\t\t\t\t\tx: x,\n\t\t\t\t\ty: y\n\t\t\t\t});\n\t\t\tobj.isImg = true;\n\n\t\t\tif (imageSize) {\n\t\t\t\tcenterImage(obj, imageSize);\n\t\t\t} else {\n\t\t\t\t// Initialize image to be 0 size so export will still function if there's no cached sizes.\n\t\t\t\t//\n\t\t\t\tobj.attr({ width: 0, height: 0 });\n\n\t\t\t\t// Create a dummy JavaScript image to get the width and height. Due to a bug in IE < 8,\n\t\t\t\t// the created element must be assigned to a variable in order to load (#292).\n\t\t\t\timageElement = createElement('img', {\n\t\t\t\t\tonload: function () {\n\t\t\t\t\t\tcenterImage(obj, symbolSizes[imageSrc] = [this.width, this.height]);\n\t\t\t\t\t},\n\t\t\t\t\tsrc: imageSrc\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t/**\n\t * An extendable collection of functions for defining symbol paths.\n\t */\n\tsymbols: {\n\t\t'circle': function (x, y, w, h) {\n\t\t\tvar cpw = 0.166 * w;\n\t\t\treturn [\n\t\t\t\tM, x + w / 2, y,\n\t\t\t\t'C', x + w + cpw, y, x + w + cpw, y + h, x + w / 2, y + h,\n\t\t\t\t'C', x - cpw, y + h, x - cpw, y, x + w / 2, y,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\n\t\t'square': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x, y,\n\t\t\t\tL, x + w, y,\n\t\t\t\tx + w, y + h,\n\t\t\t\tx, y + h,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\n\t\t'triangle': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x + w / 2, y,\n\t\t\t\tL, x + w, y + h,\n\t\t\t\tx, y + h,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\n\t\t'triangle-down': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x, y,\n\t\t\t\tL, x + w, y,\n\t\t\t\tx + w / 2, y + h,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\t\t'diamond': function (x, y, w, h) {\n\t\t\treturn [\n\t\t\t\tM, x + w / 2, y,\n\t\t\t\tL, x + w, y + h / 2,\n\t\t\t\tx + w / 2, y + h,\n\t\t\t\tx, y + h / 2,\n\t\t\t\t'Z'\n\t\t\t];\n\t\t},\n\t\t'arc': function (x, y, w, h, options) {\n\t\t\tvar start = options.start,\n\t\t\t\tradius = options.r || w || h,\n\t\t\t\tend = options.end - 0.001, // to prevent cos and sin of start and end from becoming equal on 360 arcs (related: #1561)\n\t\t\t\tinnerRadius = options.innerR,\n\t\t\t\topen = options.open,\n\t\t\t\tcosStart = mathCos(start),\n\t\t\t\tsinStart = mathSin(start),\n\t\t\t\tcosEnd = mathCos(end),\n\t\t\t\tsinEnd = mathSin(end),\n\t\t\t\tlongArc = options.end - start < mathPI ? 0 : 1;\n\n\t\t\treturn [\n\t\t\t\tM,\n\t\t\t\tx + radius * cosStart,\n\t\t\t\ty + radius * sinStart,\n\t\t\t\t'A', // arcTo\n\t\t\t\tradius, // x radius\n\t\t\t\tradius, // y radius\n\t\t\t\t0, // slanting\n\t\t\t\tlongArc, // long or short arc\n\t\t\t\t1, // clockwise\n\t\t\t\tx + radius * cosEnd,\n\t\t\t\ty + radius * sinEnd,\n\t\t\t\topen ? M : L,\n\t\t\t\tx + innerRadius * cosEnd,\n\t\t\t\ty + innerRadius * sinEnd,\n\t\t\t\t'A', // arcTo\n\t\t\t\tinnerRadius, // x radius\n\t\t\t\tinnerRadius, // y radius\n\t\t\t\t0, // slanting\n\t\t\t\tlongArc, // long or short arc\n\t\t\t\t0, // clockwise\n\t\t\t\tx + innerRadius * cosStart,\n\t\t\t\ty + innerRadius * sinStart,\n\n\t\t\t\topen ? '' : 'Z' // close\n\t\t\t];\n\t\t}\n\t},\n\n\t/**\n\t * Define a clipping rectangle\n\t * @param {String} id\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tclipRect: function (x, y, width, height) {\n\t\tvar wrapper,\n\t\t\tid = PREFIX + idCounter++,\n\n\t\t\tclipPath = this.createElement('clipPath').attr({\n\t\t\t\tid: id\n\t\t\t}).add(this.defs);\n\n\t\twrapper = this.rect(x, y, width, height, 0).add(clipPath);\n\t\twrapper.id = id;\n\t\twrapper.clipPath = clipPath;\n\n\t\treturn wrapper;\n\t},\n\n\n\t/**\n\t * Take a color and return it if it's a string, make it a gradient if it's a\n\t * gradient configuration object. Prior to Highstock, an array was used to define\n\t * a linear gradient with pixel positions relative to the SVG. In newer versions\n\t * we change the coordinates to apply relative to the shape, using coordinates\n\t * 0-1 within the shape. To preserve backwards compatibility, linearGradient\n\t * in this definition is an object of x1, y1, x2 and y2.\n\t *\n\t * @param {Object} color The color or config object\n\t */\n\tcolor: function (color, elem, prop) {\n\t\tvar renderer = this,\n\t\t\tcolorObject,\n\t\t\tregexRgba = /^rgba/,\n\t\t\tgradName,\n\t\t\tgradAttr,\n\t\t\tgradients,\n\t\t\tgradientObject,\n\t\t\tstops,\n\t\t\tstopColor,\n\t\t\tstopOpacity,\n\t\t\tradialReference,\n\t\t\tn,\n\t\t\tid,\n\t\t\tkey = [];\n\n\t\t// Apply linear or radial gradients\n\t\tif (color && color.linearGradient) {\n\t\t\tgradName = 'linearGradient';\n\t\t} else if (color && color.radialGradient) {\n\t\t\tgradName = 'radialGradient';\n\t\t}\n\n\t\tif (gradName) {\n\t\t\tgradAttr = color[gradName];\n\t\t\tgradients = renderer.gradients;\n\t\t\tstops = color.stops;\n\t\t\tradialReference = elem.radialReference;\n\n\t\t\t// Keep < 2.2 kompatibility\n\t\t\tif (isArray(gradAttr)) {\n\t\t\t\tcolor[gradName] = gradAttr = {\n\t\t\t\t\tx1: gradAttr[0],\n\t\t\t\t\ty1: gradAttr[1],\n\t\t\t\t\tx2: gradAttr[2],\n\t\t\t\t\ty2: gradAttr[3],\n\t\t\t\t\tgradientUnits: 'userSpaceOnUse'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Correct the radial gradient for the radial reference system\n\t\t\tif (gradName === 'radialGradient' && radialReference && !defined(gradAttr.gradientUnits)) {\n\t\t\t\tgradAttr = merge(gradAttr, {\n\t\t\t\t\tcx: (radialReference[0] - radialReference[2] / 2) + gradAttr.cx * radialReference[2],\n\t\t\t\t\tcy: (radialReference[1] - radialReference[2] / 2) + gradAttr.cy * radialReference[2],\n\t\t\t\t\tr: gradAttr.r * radialReference[2],\n\t\t\t\t\tgradientUnits: 'userSpaceOnUse'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Build the unique key to detect whether we need to create a new element (#1282)\n\t\t\tfor (n in gradAttr) {\n\t\t\t\tif (n !== 'id') {\n\t\t\t\t\tkey.push(n, gradAttr[n]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (n in stops) {\n\t\t\t\tkey.push(stops[n]);\n\t\t\t}\n\t\t\tkey = key.join(',');\n\n\t\t\t// Check if a gradient object with the same config object is created within this renderer\n\t\t\tif (gradients[key]) {\n\t\t\t\tid = gradients[key].id;\n\n\t\t\t} else {\n\n\t\t\t\t// Set the id and create the element\n\t\t\t\tgradAttr.id = id = PREFIX + idCounter++;\n\t\t\t\tgradients[key] = gradientObject = renderer.createElement(gradName)\n\t\t\t\t\t.attr(gradAttr)\n\t\t\t\t\t.add(renderer.defs);\n\n\n\t\t\t\t// The gradient needs to keep a list of stops to be able to destroy them\n\t\t\t\tgradientObject.stops = [];\n\t\t\t\teach(stops, function (stop) {\n\t\t\t\t\tvar stopObject;\n\t\t\t\t\tif (regexRgba.test(stop[1])) {\n\t\t\t\t\t\tcolorObject = Color(stop[1]);\n\t\t\t\t\t\tstopColor = colorObject.get('rgb');\n\t\t\t\t\t\tstopOpacity = colorObject.get('a');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstopColor = stop[1];\n\t\t\t\t\t\tstopOpacity = 1;\n\t\t\t\t\t}\n\t\t\t\t\tstopObject = renderer.createElement('stop').attr({\n\t\t\t\t\t\toffset: stop[0],\n\t\t\t\t\t\t'stop-color': stopColor,\n\t\t\t\t\t\t'stop-opacity': stopOpacity\n\t\t\t\t\t}).add(gradientObject);\n\n\t\t\t\t\t// Add the stop element to the gradient\n\t\t\t\t\tgradientObject.stops.push(stopObject);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Return the reference to the gradient object\n\t\t\treturn 'url(' + renderer.url + '#' + id + ')';\n\n\t\t// Webkit and Batik can't show rgba.\n\t\t} else if (regexRgba.test(color)) {\n\t\t\tcolorObject = Color(color);\n\t\t\tattr(elem, prop + '-opacity', colorObject.get('a'));\n\n\t\t\treturn colorObject.get('rgb');\n\n\n\t\t} else {\n\t\t\t// Remove the opacity attribute added above. Does not throw if the attribute is not there.\n\t\t\telem.removeAttribute(prop + '-opacity');\n\n\t\t\treturn color;\n\t\t}\n\n\t},\n\n\n\t/**\n\t * Add text to the SVG object\n\t * @param {String} str\n\t * @param {Number} x Left position\n\t * @param {Number} y Top position\n\t * @param {Boolean} useHTML Use HTML to render the text\n\t */\n\ttext: function (str, x, y, useHTML) {\n\n\t\t// declare variables\n\t\tvar renderer = this,\n\t\t\tdefaultChartStyle = defaultOptions.chart.style,\n\t\t\tfakeSVG = useCanVG || (!hasSVG && renderer.forExport),\n\t\t\twrapper;\n\n\t\tif (useHTML && !renderer.forExport) {\n\t\t\treturn renderer.html(str, x, y);\n\t\t}\n\n\t\tx = mathRound(pick(x, 0));\n\t\ty = mathRound(pick(y, 0));\n\n\t\twrapper = renderer.createElement('text')\n\t\t\t.attr({\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\ttext: str\n\t\t\t})\n\t\t\t.css({\n\t\t\t\tfontFamily: defaultChartStyle.fontFamily,\n\t\t\t\tfontSize: defaultChartStyle.fontSize\n\t\t\t});\n\n\t\t// Prevent wrapping from creating false offsetWidths in export in legacy IE (#1079, #1063)\n\t\tif (fakeSVG) {\n\t\t\twrapper.css({\n\t\t\t\tposition: ABSOLUTE\n\t\t\t});\n\t\t}\n\n\t\twrapper.x = x;\n\t\twrapper.y = y;\n\t\treturn wrapper;\n\t},\n\n\n\t/**\n\t * Create HTML text node. This is used by the VML renderer as well as the SVG\n\t * renderer through the useHTML option.\n\t *\n\t * @param {String} str\n\t * @param {Number} x\n\t * @param {Number} y\n\t */\n\thtml: function (str, x, y) {\n\t\tvar defaultChartStyle = defaultOptions.chart.style,\n\t\t\twrapper = this.createElement('span'),\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\telement = wrapper.element,\n\t\t\trenderer = wrapper.renderer;\n\n\t\t// Text setter\n\t\tattrSetters.text = function (value) {\n\t\t\tif (value !== element.innerHTML) {\n\t\t\t\tdelete this.bBox;\n\t\t\t}\n\t\t\telement.innerHTML = value;\n\t\t\treturn false;\n\t\t};\n\n\t\t// Various setters which rely on update transform\n\t\tattrSetters.x = attrSetters.y = attrSetters.align = function (value, key) {\n\t\t\tif (key === 'align') {\n\t\t\t\tkey = 'textAlign'; // Do not overwrite the SVGElement.align method. Same as VML.\n\t\t\t}\n\t\t\twrapper[key] = value;\n\t\t\twrapper.htmlUpdateTransform();\n\t\t\treturn false;\n\t\t};\n\n\t\t// Set the default attributes\n\t\twrapper.attr({\n\t\t\t\ttext: str,\n\t\t\t\tx: mathRound(x),\n\t\t\t\ty: mathRound(y)\n\t\t\t})\n\t\t\t.css({\n\t\t\t\tposition: ABSOLUTE,\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tfontFamily: defaultChartStyle.fontFamily,\n\t\t\t\tfontSize: defaultChartStyle.fontSize\n\t\t\t});\n\n\t\t// Use the HTML specific .css method\n\t\twrapper.css = wrapper.htmlCss;\n\n\t\t// This is specific for HTML within SVG\n\t\tif (renderer.isSVG) {\n\t\t\twrapper.add = function (svgGroupWrapper) {\n\n\t\t\t\tvar htmlGroup,\n\t\t\t\t\tcontainer = renderer.box.parentNode,\n\t\t\t\t\tparentGroup,\n\t\t\t\t\tparents = [];\n\n\t\t\t\t// Create a mock group to hold the HTML elements\n\t\t\t\tif (svgGroupWrapper) {\n\t\t\t\t\thtmlGroup = svgGroupWrapper.div;\n\t\t\t\t\tif (!htmlGroup) {\n\n\t\t\t\t\t\t// Read the parent chain into an array and read from top down\n\t\t\t\t\t\tparentGroup = svgGroupWrapper;\n\t\t\t\t\t\twhile (parentGroup) {\n\n\t\t\t\t\t\t\tparents.push(parentGroup);\n\n\t\t\t\t\t\t\t// Move up to the next parent group\n\t\t\t\t\t\t\tparentGroup = parentGroup.parentGroup;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Ensure dynamically updating position when any parent is translated\n\t\t\t\t\t\teach(parents.reverse(), function (parentGroup) {\n\t\t\t\t\t\t\tvar htmlGroupStyle;\n\n\t\t\t\t\t\t\t// Create a HTML div and append it to the parent div to emulate\n\t\t\t\t\t\t\t// the SVG group structure\n\t\t\t\t\t\t\thtmlGroup = parentGroup.div = parentGroup.div || createElement(DIV, {\n\t\t\t\t\t\t\t\tclassName: attr(parentGroup.element, 'class')\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tposition: ABSOLUTE,\n\t\t\t\t\t\t\t\tleft: (parentGroup.translateX || 0) + PX,\n\t\t\t\t\t\t\t\ttop: (parentGroup.translateY || 0) + PX\n\t\t\t\t\t\t\t}, htmlGroup || container); // the top group is appended to container\n\n\t\t\t\t\t\t\t// Shortcut\n\t\t\t\t\t\t\thtmlGroupStyle = htmlGroup.style;\n\n\t\t\t\t\t\t\t// Set listeners to update the HTML div's position whenever the SVG group\n\t\t\t\t\t\t\t// position is changed\n\t\t\t\t\t\t\textend(parentGroup.attrSetters, {\n\t\t\t\t\t\t\t\ttranslateX: function (value) {\n\t\t\t\t\t\t\t\t\thtmlGroupStyle.left = value + PX;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttranslateY: function (value) {\n\t\t\t\t\t\t\t\t\thtmlGroupStyle.top = value + PX;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tvisibility: function (value, key) {\n\t\t\t\t\t\t\t\t\thtmlGroupStyle[key] = value;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thtmlGroup = container;\n\t\t\t\t}\n\n\t\t\t\thtmlGroup.appendChild(element);\n\n\t\t\t\t// Shared with VML:\n\t\t\t\twrapper.added = true;\n\t\t\t\tif (wrapper.alignOnAdd) {\n\t\t\t\t\twrapper.htmlUpdateTransform();\n\t\t\t\t}\n\n\t\t\t\treturn wrapper;\n\t\t\t};\n\t\t}\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * Utility to return the baseline offset and total line height from the font size\n\t */\n\tfontMetrics: function (fontSize) {\n\t\tfontSize = pInt(fontSize || 11);\n\n\t\t// Empirical values found by comparing font size and bounding box height.\n\t\t// Applies to the default font family. http://jsfiddle.net/highcharts/7xvn7/\n\t\tvar lineHeight = fontSize < 24 ? fontSize + 4 : mathRound(fontSize * 1.2),\n\t\t\tbaseline = mathRound(lineHeight * 0.8);\n\n\t\treturn {\n\t\t\th: lineHeight,\n\t\t\tb: baseline\n\t\t};\n\t},\n\n\t/**\n\t * Add a label, a text item that can hold a colored or gradient background\n\t * as well as a border and shadow.\n\t * @param {string} str\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {String} shape\n\t * @param {Number} anchorX In case the shape has a pointer, like a flag, this is the\n\t *    coordinates it should be pinned to\n\t * @param {Number} anchorY\n\t * @param {Boolean} baseline Whether to position the label relative to the text baseline,\n\t *    like renderer.text, or to the upper border of the rectangle.\n\t * @param {String} className Class name for the group\n\t */\n\tlabel: function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) {\n\n\t\tvar renderer = this,\n\t\t\twrapper = renderer.g(className),\n\t\t\ttext = renderer.text('', 0, 0, useHTML)\n\t\t\t\t.attr({\n\t\t\t\t\tzIndex: 1\n\t\t\t\t}),\n\t\t\t\t//.add(wrapper),\n\t\t\tbox,\n\t\t\tbBox,\n\t\t\talignFactor = 0,\n\t\t\tpadding = 3,\n\t\t\tpaddingLeft = 0,\n\t\t\twidth,\n\t\t\theight,\n\t\t\twrapperX,\n\t\t\twrapperY,\n\t\t\tcrispAdjust = 0,\n\t\t\tdeferredAttr = {},\n\t\t\tbaselineOffset,\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\tneedsBox;\n\n\t\t/**\n\t\t * This function runs after the label is added to the DOM (when the bounding box is\n\t\t * available), and after the text of the label is updated to detect the new bounding\n\t\t * box and reflect it in the border box.\n\t\t */\n\t\tfunction updateBoxSize() {\n\t\t\tvar boxX,\n\t\t\t\tboxY,\n\t\t\t\tstyle = text.element.style;\n\n\t\t\tbBox = (width === undefined || height === undefined || wrapper.styles.textAlign) &&\n\t\t\t\ttext.getBBox();\n\t\t\twrapper.width = (width || bBox.width || 0) + 2 * padding + paddingLeft;\n\t\t\twrapper.height = (height || bBox.height || 0) + 2 * padding;\n\n\t\t\t// update the label-scoped y offset\n\t\t\tbaselineOffset = padding + renderer.fontMetrics(style && style.fontSize).b;\n\n\t\t\tif (needsBox) {\n\n\t\t\t\t// create the border box if it is not already present\n\t\t\t\tif (!box) {\n\t\t\t\t\tboxX = mathRound(-alignFactor * padding);\n\t\t\t\t\tboxY = baseline ? -baselineOffset : 0;\n\n\t\t\t\t\twrapper.box = box = shape ?\n\t\t\t\t\t\trenderer.symbol(shape, boxX, boxY, wrapper.width, wrapper.height) :\n\t\t\t\t\t\trenderer.rect(boxX, boxY, wrapper.width, wrapper.height, 0, deferredAttr[STROKE_WIDTH]);\n\t\t\t\t\tbox.add(wrapper);\n\t\t\t\t}\n\n\t\t\t\t// apply the box attributes\n\t\t\t\tif (!box.isImg) { // #1630\n\t\t\t\t\tbox.attr(merge({\n\t\t\t\t\t\twidth: wrapper.width,\n\t\t\t\t\t\theight: wrapper.height\n\t\t\t\t\t}, deferredAttr));\n\t\t\t\t}\n\t\t\t\tdeferredAttr = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * This function runs after setting text or padding, but only if padding is changed\n\t\t */\n\t\tfunction updateTextPadding() {\n\t\t\tvar styles = wrapper.styles,\n\t\t\t\ttextAlign = styles && styles.textAlign,\n\t\t\t\tx = paddingLeft + padding * (1 - alignFactor),\n\t\t\t\ty;\n\n\t\t\t// determin y based on the baseline\n\t\t\ty = baseline ? 0 : baselineOffset;\n\n\t\t\t// compensate for alignment\n\t\t\tif (defined(width) && (textAlign === 'center' || textAlign === 'right')) {\n\t\t\t\tx += { center: 0.5, right: 1 }[textAlign] * (width - bBox.width);\n\t\t\t}\n\n\t\t\t// update if anything changed\n\t\t\tif (x !== text.x || y !== text.y) {\n\t\t\t\ttext.attr({\n\t\t\t\t\tx: x,\n\t\t\t\t\ty: y\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// record current values\n\t\t\ttext.x = x;\n\t\t\ttext.y = y;\n\t\t}\n\n\t\t/**\n\t\t * Set a box attribute, or defer it if the box is not yet created\n\t\t * @param {Object} key\n\t\t * @param {Object} value\n\t\t */\n\t\tfunction boxAttr(key, value) {\n\t\t\tif (box) {\n\t\t\t\tbox.attr(key, value);\n\t\t\t} else {\n\t\t\t\tdeferredAttr[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tfunction getSizeAfterAdd() {\n\t\t\ttext.add(wrapper);\n\t\t\twrapper.attr({\n\t\t\t\ttext: str, // alignment is available now\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t});\n\n\t\t\tif (box && defined(anchorX)) {\n\t\t\t\twrapper.attr({\n\t\t\t\t\tanchorX: anchorX,\n\t\t\t\t\tanchorY: anchorY\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * After the text element is added, get the desired size of the border box\n\t\t * and add it before the text in the DOM.\n\t\t */\n\t\taddEvent(wrapper, 'add', getSizeAfterAdd);\n\n\t\t/*\n\t\t * Add specific attribute setters.\n\t\t */\n\n\t\t// only change local variables\n\t\tattrSetters.width = function (value) {\n\t\t\twidth = value;\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.height = function (value) {\n\t\t\theight = value;\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.padding =  function (value) {\n\t\t\tif (defined(value) && value !== padding) {\n\t\t\t\tpadding = value;\n\t\t\t\tupdateTextPadding();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.paddingLeft =  function (value) {\n\t\t\tif (defined(value) && value !== paddingLeft) {\n\t\t\t\tpaddingLeft = value;\n\t\t\t\tupdateTextPadding();\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\t// change local variable and set attribue as well\n\t\tattrSetters.align = function (value) {\n\t\t\talignFactor = { left: 0, center: 0.5, right: 1 }[value];\n\t\t\treturn false; // prevent setting text-anchor on the group\n\t\t};\n\n\t\t// apply these to the box and the text alike\n\t\tattrSetters.text = function (value, key) {\n\t\t\ttext.attr(key, value);\n\t\t\tupdateBoxSize();\n\t\t\tupdateTextPadding();\n\t\t\treturn false;\n\t\t};\n\n\t\t// apply these to the box but not to the text\n\t\tattrSetters[STROKE_WIDTH] = function (value, key) {\n\t\t\tneedsBox = true;\n\t\t\tcrispAdjust = value % 2 / 2;\n\t\t\tboxAttr(key, value);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.stroke = attrSetters.fill = attrSetters.r = function (value, key) {\n\t\t\tif (key === 'fill') {\n\t\t\t\tneedsBox = true;\n\t\t\t}\n\t\t\tboxAttr(key, value);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.anchorX = function (value, key) {\n\t\t\tanchorX = value;\n\t\t\tboxAttr(key, value + crispAdjust - wrapperX);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.anchorY = function (value, key) {\n\t\t\tanchorY = value;\n\t\t\tboxAttr(key, value - wrapperY);\n\t\t\treturn false;\n\t\t};\n\n\t\t// rename attributes\n\t\tattrSetters.x = function (value) {\n\t\t\twrapper.x = value; // for animation getter\n\t\t\tvalue -= alignFactor * ((width || bBox.width) + padding);\n\t\t\twrapperX = mathRound(value);\n\n\t\t\twrapper.attr('translateX', wrapperX);\n\t\t\treturn false;\n\t\t};\n\t\tattrSetters.y = function (value) {\n\t\t\twrapperY = wrapper.y = mathRound(value);\n\t\t\twrapper.attr('translateY', wrapperY);\n\t\t\treturn false;\n\t\t};\n\n\t\t// Redirect certain methods to either the box or the text\n\t\tvar baseCss = wrapper.css;\n\t\treturn extend(wrapper, {\n\t\t\t/**\n\t\t\t * Pick up some properties and apply them to the text instead of the wrapper\n\t\t\t */\n\t\t\tcss: function (styles) {\n\t\t\t\tif (styles) {\n\t\t\t\t\tvar textStyles = {};\n\t\t\t\t\tstyles = merge(styles); // create a copy to avoid altering the original object (#537)\n\t\t\t\t\teach(['fontSize', 'fontWeight', 'fontFamily', 'color', 'lineHeight', 'width', 'textDecoration', 'textShadow'], function (prop) {\n\t\t\t\t\t\tif (styles[prop] !== UNDEFINED) {\n\t\t\t\t\t\t\ttextStyles[prop] = styles[prop];\n\t\t\t\t\t\t\tdelete styles[prop];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\ttext.css(textStyles);\n\t\t\t\t}\n\t\t\t\treturn baseCss.call(wrapper, styles);\n\t\t\t},\n\t\t\t/**\n\t\t\t * Return the bounding box of the box, not the group\n\t\t\t */\n\t\t\tgetBBox: function () {\n\t\t\t\treturn {\n\t\t\t\t\twidth: bBox.width + 2 * padding,\n\t\t\t\t\theight: bBox.height + 2 * padding,\n\t\t\t\t\tx: bBox.x - padding,\n\t\t\t\t\ty: bBox.y - padding\n\t\t\t\t};\n\t\t\t},\n\t\t\t/**\n\t\t\t * Apply the shadow to the box\n\t\t\t */\n\t\t\tshadow: function (b) {\n\t\t\t\tif (box) {\n\t\t\t\t\tbox.shadow(b);\n\t\t\t\t}\n\t\t\t\treturn wrapper;\n\t\t\t},\n\t\t\t/**\n\t\t\t * Destroy and release memory.\n\t\t\t */\n\t\t\tdestroy: function () {\n\t\t\t\tremoveEvent(wrapper, 'add', getSizeAfterAdd);\n\n\t\t\t\t// Added by button implementation\n\t\t\t\tremoveEvent(wrapper.element, 'mouseenter');\n\t\t\t\tremoveEvent(wrapper.element, 'mouseleave');\n\n\t\t\t\tif (text) {\n\t\t\t\t\ttext = text.destroy();\n\t\t\t\t}\n\t\t\t\tif (box) {\n\t\t\t\t\tbox = box.destroy();\n\t\t\t\t}\n\t\t\t\t// Call base implementation to destroy the rest\n\t\t\t\tSVGElement.prototype.destroy.call(wrapper);\n\n\t\t\t\t// Release local pointers (#1298)\n\t\t\t\twrapper = renderer = updateBoxSize = updateTextPadding = boxAttr = getSizeAfterAdd = null;\n\t\t\t}\n\t\t});\n\t}\n}; // end SVGRenderer\n\n\n// general renderer\nRenderer = SVGRenderer;\n\n\n/* ****************************************************************************\n *                                                                            *\n * START OF INTERNET EXPLORER <= 8 SPECIFIC CODE                              *\n *                                                                            *\n * For applications and websites that don't need IE support, like platform    *\n * targeted mobile apps and web apps, this code can be removed.               *\n *                                                                            *\n *****************************************************************************/\n\n/**\n * @constructor\n */\nvar VMLRenderer, VMLElement;\nif (!hasSVG && !useCanVG) {\n\n/**\n * The VML element wrapper.\n */\nHighcharts.VMLElement = VMLElement = {\n\n\t/**\n\t * Initialize a new VML element wrapper. It builds the markup as a string\n\t * to minimize DOM traffic.\n\t * @param {Object} renderer\n\t * @param {Object} nodeName\n\t */\n\tinit: function (renderer, nodeName) {\n\t\tvar wrapper = this,\n\t\t\tmarkup =  ['<', nodeName, ' filled=\"f\" stroked=\"f\"'],\n\t\t\tstyle = ['position: ', ABSOLUTE, ';'],\n\t\t\tisDiv = nodeName === DIV;\n\n\t\t// divs and shapes need size\n\t\tif (nodeName === 'shape' || isDiv) {\n\t\t\tstyle.push('left:0;top:0;width:1px;height:1px;');\n\t\t}\n\t\tstyle.push('visibility: ', isDiv ? HIDDEN : VISIBLE);\n\n\t\tmarkup.push(' style=\"', style.join(''), '\"/>');\n\n\t\t// create element with default attributes and style\n\t\tif (nodeName) {\n\t\t\tmarkup = isDiv || nodeName === 'span' || nodeName === 'img' ?\n\t\t\t\tmarkup.join('')\n\t\t\t\t: renderer.prepVML(markup);\n\t\t\twrapper.element = createElement(markup);\n\t\t}\n\n\t\twrapper.renderer = renderer;\n\t\twrapper.attrSetters = {};\n\t},\n\n\t/**\n\t * Add the node to the given parent\n\t * @param {Object} parent\n\t */\n\tadd: function (parent) {\n\t\tvar wrapper = this,\n\t\t\trenderer = wrapper.renderer,\n\t\t\telement = wrapper.element,\n\t\t\tbox = renderer.box,\n\t\t\tinverted = parent && parent.inverted,\n\n\t\t\t// get the parent node\n\t\t\tparentNode = parent ?\n\t\t\t\tparent.element || parent :\n\t\t\t\tbox;\n\n\n\t\t// if the parent group is inverted, apply inversion on all children\n\t\tif (inverted) { // only on groups\n\t\t\trenderer.invertChild(element, parentNode);\n\t\t}\n\n\t\t// append it\n\t\tparentNode.appendChild(element);\n\n\t\t// align text after adding to be able to read offset\n\t\twrapper.added = true;\n\t\tif (wrapper.alignOnAdd && !wrapper.deferUpdateTransform) {\n\t\t\twrapper.updateTransform();\n\t\t}\n\n\t\t// fire an event for internal hooks\n\t\tfireEvent(wrapper, 'add');\n\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * VML always uses htmlUpdateTransform\n\t */\n\tupdateTransform: SVGElement.prototype.htmlUpdateTransform,\n\n\t/**\n\t * Set the rotation of a span with oldIE's filter\n\t */\n\tsetSpanRotation: function (rotation, sintheta, costheta) {\n\t\t// Adjust for alignment and rotation. Rotation of useHTML content is not yet implemented\n\t\t// but it can probably be implemented for Firefox 3.5+ on user request. FF3.5+\n\t\t// has support for CSS3 transform. The getBBox method also needs to be updated\n\t\t// to compensate for the rotation, like it currently does for SVG.\n\t\t// Test case: http://highcharts.com/tests/?file=text-rotation\n\t\tcss(this.element, {\n\t\t\tfilter: rotation ? ['progid:DXImageTransform.Microsoft.Matrix(M11=', costheta,\n\t\t\t\t', M12=', -sintheta, ', M21=', sintheta, ', M22=', costheta,\n\t\t\t\t', sizingMethod=\\'auto expand\\')'].join('') : NONE\n\t\t});\n\t},\n\n\t/**\n\t * Converts a subset of an SVG path definition to its VML counterpart. Takes an array\n\t * as the parameter and returns a string.\n\t */\n\tpathToVML: function (value) {\n\t\t// convert paths\n\t\tvar i = value.length,\n\t\t\tpath = [],\n\t\t\tclockwise;\n\n\t\twhile (i--) {\n\n\t\t\t// Multiply by 10 to allow subpixel precision.\n\t\t\t// Substracting half a pixel seems to make the coordinates\n\t\t\t// align with SVG, but this hasn't been tested thoroughly\n\t\t\tif (isNumber(value[i])) {\n\t\t\t\tpath[i] = mathRound(value[i] * 10) - 5;\n\t\t\t} else if (value[i] === 'Z') { // close the path\n\t\t\t\tpath[i] = 'x';\n\t\t\t} else {\n\t\t\t\tpath[i] = value[i];\n\n\t\t\t\t// When the start X and end X coordinates of an arc are too close,\n\t\t\t\t// they are rounded to the same value above. In this case, substract 1 from the end X\n\t\t\t\t// position. #760, #1371.\n\t\t\t\tif (value.isArc && (value[i] === 'wa' || value[i] === 'at')) {\n\t\t\t\t\tclockwise = value[i] === 'wa' ? 1 : -1; // #1642\n\t\t\t\t\tif (path[i + 5] === path[i + 7]) {\n\t\t\t\t\t\tpath[i + 7] -= clockwise;\n\t\t\t\t\t}\n\t\t\t\t\t// Start and end Y (#1410)\n\t\t\t\t\tif (path[i + 6] === path[i + 8]) {\n\t\t\t\t\t\tpath[i + 8] -= clockwise;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Loop up again to handle path shortcuts (#2132)\n\t\t/*while (i++ < path.length) {\n\t\t\tif (path[i] === 'H') { // horizontal line to\n\t\t\t\tpath[i] = 'L';\n\t\t\t\tpath.splice(i + 2, 0, path[i - 1]);\n\t\t\t} else if (path[i] === 'V') { // vertical line to\n\t\t\t\tpath[i] = 'L';\n\t\t\t\tpath.splice(i + 1, 0, path[i - 2]);\n\t\t\t}\n\t\t}*/\n\t\treturn path.join(' ') || 'x';\n\t},\n\n\t/**\n\t * Get or set attributes\n\t */\n\tattr: function (hash, val) {\n\t\tvar wrapper = this,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\ti,\n\t\t\tresult,\n\t\t\telement = wrapper.element || {},\n\t\t\telemStyle = element.style,\n\t\t\tnodeName = element.nodeName,\n\t\t\trenderer = wrapper.renderer,\n\t\t\tsymbolName = wrapper.symbolName,\n\t\t\thasSetSymbolSize,\n\t\t\tshadows = wrapper.shadows,\n\t\t\tskipAttr,\n\t\t\tattrSetters = wrapper.attrSetters,\n\t\t\tret = wrapper;\n\n\t\t// single key-value pair\n\t\tif (isString(hash) && defined(val)) {\n\t\t\tkey = hash;\n\t\t\thash = {};\n\t\t\thash[key] = val;\n\t\t}\n\n\t\t// used as a getter, val is undefined\n\t\tif (isString(hash)) {\n\t\t\tkey = hash;\n\t\t\tif (key === 'strokeWidth' || key === 'stroke-width') {\n\t\t\t\tret = wrapper.strokeweight;\n\t\t\t} else {\n\t\t\t\tret = wrapper[key];\n\t\t\t}\n\n\t\t// setter\n\t\t} else {\n\t\t\tfor (key in hash) {\n\t\t\t\tvalue = hash[key];\n\t\t\t\tskipAttr = false;\n\n\t\t\t\t// check for a specific attribute setter\n\t\t\t\tresult = attrSetters[key] && attrSetters[key].call(wrapper, value, key);\n\n\t\t\t\tif (result !== false && value !== null) { // #620\n\n\t\t\t\t\tif (result !== UNDEFINED) {\n\t\t\t\t\t\tvalue = result; // the attribute setter has returned a new value to set\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// prepare paths\n\t\t\t\t\t// symbols\n\t\t\t\t\tif (symbolName && /^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/.test(key)) {\n\t\t\t\t\t\t// if one of the symbol size affecting parameters are changed,\n\t\t\t\t\t\t// check all the others only once for each call to an element's\n\t\t\t\t\t\t// .attr() method\n\t\t\t\t\t\tif (!hasSetSymbolSize) {\n\t\t\t\t\t\t\twrapper.symbolAttr(hash);\n\n\t\t\t\t\t\t\thasSetSymbolSize = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t} else if (key === 'd') {\n\t\t\t\t\t\tvalue = value || [];\n\t\t\t\t\t\twrapper.d = value.join(' '); // used in getter for animation\n\n\t\t\t\t\t\telement.path = value = wrapper.pathToVML(value);\n\n\t\t\t\t\t\t// update shadows\n\t\t\t\t\t\tif (shadows) {\n\t\t\t\t\t\t\ti = shadows.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tshadows[i].path = shadows[i].cutOff ? this.cutOffPath(value, shadows[i].cutOff) : value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// handle visibility\n\t\t\t\t\t} else if (key === 'visibility') {\n\n\t\t\t\t\t\t// let the shadow follow the main element\n\t\t\t\t\t\tif (shadows) {\n\t\t\t\t\t\t\ti = shadows.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tshadows[i].style[key] = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Instead of toggling the visibility CSS property, move the div out of the viewport.\n\t\t\t\t\t\t// This works around #61 and #586\n\t\t\t\t\t\tif (nodeName === 'DIV') {\n\t\t\t\t\t\t\tvalue = value === HIDDEN ? '-999em' : 0;\n\n\t\t\t\t\t\t\t// In order to redraw, IE7 needs the div to be visible when tucked away\n\t\t\t\t\t\t\t// outside the viewport. So the visibility is actually opposite of\n\t\t\t\t\t\t\t// the expected value. This applies to the tooltip only.\n\t\t\t\t\t\t\tif (!docMode8) {\n\t\t\t\t\t\t\t\telemStyle[key] = value ? VISIBLE : HIDDEN;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tkey = 'top';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telemStyle[key] = value;\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// directly mapped to css\n\t\t\t\t\t} else if (key === 'zIndex') {\n\n\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\telemStyle[key] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// x, y, width, height\n\t\t\t\t\t} else if (inArray(key, ['x', 'y', 'width', 'height']) !== -1) {\n\n\t\t\t\t\t\twrapper[key] = value; // used in getter\n\n\t\t\t\t\t\tif (key === 'x' || key === 'y') {\n\t\t\t\t\t\t\tkey = { x: 'left', y: 'top' }[key];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvalue = mathMax(0, value); // don't set width or height below zero (#311)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// clipping rectangle special\n\t\t\t\t\t\tif (wrapper.updateClipping) {\n\t\t\t\t\t\t\twrapper[key] = value; // the key is now 'left' or 'top' for 'x' and 'y'\n\t\t\t\t\t\t\twrapper.updateClipping();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// normal\n\t\t\t\t\t\t\telemStyle[key] = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// class name\n\t\t\t\t\t} else if (key === 'class' && nodeName === 'DIV') {\n\t\t\t\t\t\t// IE8 Standards mode has problems retrieving the className\n\t\t\t\t\t\telement.className = value;\n\n\t\t\t\t\t// stroke\n\t\t\t\t\t} else if (key === 'stroke') {\n\n\t\t\t\t\t\tvalue = renderer.color(value, element, key);\n\n\t\t\t\t\t\tkey = 'strokecolor';\n\n\t\t\t\t\t// stroke width\n\t\t\t\t\t} else if (key === 'stroke-width' || key === 'strokeWidth') {\n\t\t\t\t\t\telement.stroked = value ? true : false;\n\t\t\t\t\t\tkey = 'strokeweight';\n\t\t\t\t\t\twrapper[key] = value; // used in getter, issue #113\n\t\t\t\t\t\tif (isNumber(value)) {\n\t\t\t\t\t\t\tvalue += PX;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// dashStyle\n\t\t\t\t\t} else if (key === 'dashstyle') {\n\t\t\t\t\t\tvar strokeElem = element.getElementsByTagName('stroke')[0] ||\n\t\t\t\t\t\t\tcreateElement(renderer.prepVML(['<stroke/>']), null, null, element);\n\t\t\t\t\t\tstrokeElem[key] = value || 'solid';\n\t\t\t\t\t\twrapper.dashstyle = value; /* because changing stroke-width will change the dash length\n\t\t\t\t\t\t\tand cause an epileptic effect */\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// fill\n\t\t\t\t\t} else if (key === 'fill') {\n\n\t\t\t\t\t\tif (nodeName === 'SPAN') { // text color\n\t\t\t\t\t\t\telemStyle.color = value;\n\t\t\t\t\t\t} else if (nodeName !== 'IMG') { // #1336\n\t\t\t\t\t\t\telement.filled = value !== NONE ? true : false;\n\n\t\t\t\t\t\t\tvalue = renderer.color(value, element, key, wrapper);\n\n\t\t\t\t\t\t\tkey = 'fillcolor';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// opacity: don't bother - animation is too slow and filters introduce artifacts\n\t\t\t\t\t} else if (key === 'opacity') {\n\t\t\t\t\t\t/*css(element, {\n\t\t\t\t\t\t\topacity: value\n\t\t\t\t\t\t});*/\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// rotation on VML elements\n\t\t\t\t\t} else if (nodeName === 'shape' && key === 'rotation') {\n\n\t\t\t\t\t\twrapper[key] = element.style[key] = value; // style is for #1873\n\n\t\t\t\t\t\t// Correction for the 1x1 size of the shape container. Used in gauge needles.\n\t\t\t\t\t\telement.style.left = -mathRound(mathSin(value * deg2rad) + 1) + PX;\n\t\t\t\t\t\telement.style.top = mathRound(mathCos(value * deg2rad)) + PX;\n\n\t\t\t\t\t// translation for animation\n\t\t\t\t\t} else if (key === 'translateX' || key === 'translateY' || key === 'rotation') {\n\t\t\t\t\t\twrapper[key] = value;\n\t\t\t\t\t\twrapper.updateTransform();\n\n\t\t\t\t\t\tskipAttr = true;\n\n\t\t\t\t\t// text for rotated and non-rotated elements\n\t\t\t\t\t} else if (key === 'text') {\n\t\t\t\t\t\tthis.bBox = null;\n\t\t\t\t\t\telement.innerHTML = value;\n\t\t\t\t\t\tskipAttr = true;\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif (!skipAttr) {\n\t\t\t\t\t\tif (docMode8) { // IE8 setAttribute bug\n\t\t\t\t\t\t\telement[key] = value;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattr(element, key, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Set the element's clipping to a predefined rectangle\n\t *\n\t * @param {String} id The id of the clip rectangle\n\t */\n\tclip: function (clipRect) {\n\t\tvar wrapper = this,\n\t\t\tclipMembers,\n\t\t\tcssRet;\n\n\t\tif (clipRect) {\n\t\t\tclipMembers = clipRect.members;\n\t\t\terase(clipMembers, wrapper); // Ensure unique list of elements (#1258)\n\t\t\tclipMembers.push(wrapper);\n\t\t\twrapper.destroyClip = function () {\n\t\t\t\terase(clipMembers, wrapper);\n\t\t\t};\n\t\t\tcssRet = clipRect.getCSS(wrapper);\n\n\t\t} else {\n\t\t\tif (wrapper.destroyClip) {\n\t\t\t\twrapper.destroyClip();\n\t\t\t}\n\t\t\tcssRet = { clip: docMode8 ? 'inherit' : 'rect(auto)' }; // #1214\n\t\t}\n\n\t\treturn wrapper.css(cssRet);\n\n\t},\n\n\t/**\n\t * Set styles for the element\n\t * @param {Object} styles\n\t */\n\tcss: SVGElement.prototype.htmlCss,\n\n\t/**\n\t * Removes a child either by removeChild or move to garbageBin.\n\t * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not.\n\t */\n\tsafeRemoveChild: function (element) {\n\t\t// discardElement will detach the node from its parent before attaching it\n\t\t// to the garbage bin. Therefore it is important that the node is attached and have parent.\n\t\tif (element.parentNode) {\n\t\t\tdiscardElement(element);\n\t\t}\n\t},\n\n\t/**\n\t * Extend element.destroy by removing it from the clip members array\n\t */\n\tdestroy: function () {\n\t\tif (this.destroyClip) {\n\t\t\tthis.destroyClip();\n\t\t}\n\n\t\treturn SVGElement.prototype.destroy.apply(this);\n\t},\n\n\t/**\n\t * Add an event listener. VML override for normalizing event parameters.\n\t * @param {String} eventType\n\t * @param {Function} handler\n\t */\n\ton: function (eventType, handler) {\n\t\t// simplest possible event model for internal use\n\t\tthis.element['on' + eventType] = function () {\n\t\t\tvar evt = win.event;\n\t\t\tevt.target = evt.srcElement;\n\t\t\thandler(evt);\n\t\t};\n\t\treturn this;\n\t},\n\n\t/**\n\t * In stacked columns, cut off the shadows so that they don't overlap\n\t */\n\tcutOffPath: function (path, length) {\n\n\t\tvar len;\n\n\t\tpath = path.split(/[ ,]/);\n\t\tlen = path.length;\n\n\t\tif (len === 9 || len === 11) {\n\t\t\tpath[len - 4] = path[len - 2] = pInt(path[len - 2]) - 10 * length;\n\t\t}\n\t\treturn path.join(' ');\n\t},\n\n\t/**\n\t * Apply a drop shadow by copying elements and giving them different strokes\n\t * @param {Boolean|Object} shadowOptions\n\t */\n\tshadow: function (shadowOptions, group, cutOff) {\n\t\tvar shadows = [],\n\t\t\ti,\n\t\t\telement = this.element,\n\t\t\trenderer = this.renderer,\n\t\t\tshadow,\n\t\t\telemStyle = element.style,\n\t\t\tmarkup,\n\t\t\tpath = element.path,\n\t\t\tstrokeWidth,\n\t\t\tmodifiedPath,\n\t\t\tshadowWidth,\n\t\t\tshadowElementOpacity;\n\n\t\t// some times empty paths are not strings\n\t\tif (path && typeof path.value !== 'string') {\n\t\t\tpath = 'x';\n\t\t}\n\t\tmodifiedPath = path;\n\n\t\tif (shadowOptions) {\n\t\t\tshadowWidth = pick(shadowOptions.width, 3);\n\t\t\tshadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth;\n\t\t\tfor (i = 1; i <= 3; i++) {\n\n\t\t\t\tstrokeWidth = (shadowWidth * 2) + 1 - (2 * i);\n\n\t\t\t\t// Cut off shadows for stacked column items\n\t\t\t\tif (cutOff) {\n\t\t\t\t\tmodifiedPath = this.cutOffPath(path.value, strokeWidth + 0.5);\n\t\t\t\t}\n\n\t\t\t\tmarkup = ['<shape isShadow=\"true\" strokeweight=\"', strokeWidth,\n\t\t\t\t\t'\" filled=\"false\" path=\"', modifiedPath,\n\t\t\t\t\t'\" coordsize=\"10 10\" style=\"', element.style.cssText, '\" />'];\n\n\t\t\t\tshadow = createElement(renderer.prepVML(markup),\n\t\t\t\t\tnull, {\n\t\t\t\t\t\tleft: pInt(elemStyle.left) + pick(shadowOptions.offsetX, 1),\n\t\t\t\t\t\ttop: pInt(elemStyle.top) + pick(shadowOptions.offsetY, 1)\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (cutOff) {\n\t\t\t\t\tshadow.cutOff = strokeWidth + 1;\n\t\t\t\t}\n\n\t\t\t\t// apply the opacity\n\t\t\t\tmarkup = ['<stroke color=\"', shadowOptions.color || 'black', '\" opacity=\"', shadowElementOpacity * i, '\"/>'];\n\t\t\t\tcreateElement(renderer.prepVML(markup), null, null, shadow);\n\n\n\t\t\t\t// insert it\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.element.appendChild(shadow);\n\t\t\t\t} else {\n\t\t\t\t\telement.parentNode.insertBefore(shadow, element);\n\t\t\t\t}\n\n\t\t\t\t// record it\n\t\t\t\tshadows.push(shadow);\n\n\t\t\t}\n\n\t\t\tthis.shadows = shadows;\n\t\t}\n\t\treturn this;\n\n\t}\n};\nVMLElement = extendClass(SVGElement, VMLElement);\n\n/**\n * The VML renderer\n */\nvar VMLRendererExtension = { // inherit SVGRenderer\n\n\tElement: VMLElement,\n\tisIE8: userAgent.indexOf('MSIE 8.0') > -1,\n\n\n\t/**\n\t * Initialize the VMLRenderer\n\t * @param {Object} container\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tinit: function (container, width, height) {\n\t\tvar renderer = this,\n\t\t\tboxWrapper,\n\t\t\tbox;\n\n\t\trenderer.alignedObjects = [];\n\n\t\tboxWrapper = renderer.createElement(DIV);\n\t\tbox = boxWrapper.element;\n\t\tbox.style.position = RELATIVE; // for freeform drawing using renderer directly\n\t\tcontainer.appendChild(boxWrapper.element);\n\n\n\t\t// generate the containing box\n\t\trenderer.isVML = true;\n\t\trenderer.box = box;\n\t\trenderer.boxWrapper = boxWrapper;\n\n\n\t\trenderer.setSize(width, height, false);\n\n\t\t// The only way to make IE6 and IE7 print is to use a global namespace. However,\n\t\t// with IE8 the only way to make the dynamic shapes visible in screen and print mode\n\t\t// seems to be to add the xmlns attribute and the behaviour style inline.\n\t\tif (!doc.namespaces.hcv) {\n\n\t\t\tdoc.namespaces.add('hcv', 'urn:schemas-microsoft-com:vml');\n\n\t\t\t// Setup default CSS (#2153)\n\t\t\t(doc.styleSheets.length ? doc.styleSheets[0] : doc.createStyleSheet()).cssText +=\n\t\t\t\t'hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke' +\n\t\t\t\t'{ behavior:url(#default#VML); display: inline-block; } ';\n\n\t\t}\n\t},\n\n\n\t/**\n\t * Detect whether the renderer is hidden. This happens when one of the parent elements\n\t * has display: none\n\t */\n\tisHidden: function () {\n\t\treturn !this.box.offsetWidth;\n\t},\n\n\t/**\n\t * Define a clipping rectangle. In VML it is accomplished by storing the values\n\t * for setting the CSS style to all associated members.\n\t *\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\tclipRect: function (x, y, width, height) {\n\n\t\t// create a dummy element\n\t\tvar clipRect = this.createElement(),\n\t\t\tisObj = isObject(x);\n\n\t\t// mimic a rectangle with its style object for automatic updating in attr\n\t\treturn extend(clipRect, {\n\t\t\tmembers: [],\n\t\t\tleft: (isObj ? x.x : x) + 1,\n\t\t\ttop: (isObj ? x.y : y) + 1,\n\t\t\twidth: (isObj ? x.width : width) - 1,\n\t\t\theight: (isObj ? x.height : height) - 1,\n\t\t\tgetCSS: function (wrapper) {\n\t\t\t\tvar element = wrapper.element,\n\t\t\t\t\tnodeName = element.nodeName,\n\t\t\t\t\tisShape = nodeName === 'shape',\n\t\t\t\t\tinverted = wrapper.inverted,\n\t\t\t\t\trect = this,\n\t\t\t\t\ttop = rect.top - (isShape ? element.offsetTop : 0),\n\t\t\t\t\tleft = rect.left,\n\t\t\t\t\tright = left + rect.width,\n\t\t\t\t\tbottom = top + rect.height,\n\t\t\t\t\tret = {\n\t\t\t\t\t\tclip: 'rect(' +\n\t\t\t\t\t\t\tmathRound(inverted ? left : top) + 'px,' +\n\t\t\t\t\t\t\tmathRound(inverted ? bottom : right) + 'px,' +\n\t\t\t\t\t\t\tmathRound(inverted ? right : bottom) + 'px,' +\n\t\t\t\t\t\t\tmathRound(inverted ? top : left) + 'px)'\n\t\t\t\t\t};\n\n\t\t\t\t// issue 74 workaround\n\t\t\t\tif (!inverted && docMode8 && nodeName === 'DIV') {\n\t\t\t\t\textend(ret, {\n\t\t\t\t\t\twidth: right + PX,\n\t\t\t\t\t\theight: bottom + PX\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// used in attr and animation to update the clipping of all members\n\t\t\tupdateClipping: function () {\n\t\t\t\teach(clipRect.members, function (member) {\n\t\t\t\t\tmember.css(clipRect.getCSS(member));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t},\n\n\n\t/**\n\t * Take a color and return it if it's a string, make it a gradient if it's a\n\t * gradient configuration object, and apply opacity.\n\t *\n\t * @param {Object} color The color or config object\n\t */\n\tcolor: function (color, elem, prop, wrapper) {\n\t\tvar renderer = this,\n\t\t\tcolorObject,\n\t\t\tregexRgba = /^rgba/,\n\t\t\tmarkup,\n\t\t\tfillType,\n\t\t\tret = NONE;\n\n\t\t// Check for linear or radial gradient\n\t\tif (color && color.linearGradient) {\n\t\t\tfillType = 'gradient';\n\t\t} else if (color && color.radialGradient) {\n\t\t\tfillType = 'pattern';\n\t\t}\n\n\n\t\tif (fillType) {\n\n\t\t\tvar stopColor,\n\t\t\t\tstopOpacity,\n\t\t\t\tgradient = color.linearGradient || color.radialGradient,\n\t\t\t\tx1,\n\t\t\t\ty1,\n\t\t\t\tx2,\n\t\t\t\ty2,\n\t\t\t\topacity1,\n\t\t\t\topacity2,\n\t\t\t\tcolor1,\n\t\t\t\tcolor2,\n\t\t\t\tfillAttr = '',\n\t\t\t\tstops = color.stops,\n\t\t\t\tfirstStop,\n\t\t\t\tlastStop,\n\t\t\t\tcolors = [],\n\t\t\t\taddFillNode = function () {\n\t\t\t\t\t// Add the fill subnode. When colors attribute is used, the meanings of opacity and o:opacity2\n\t\t\t\t\t// are reversed.\n\t\t\t\t\tmarkup = ['<fill colors=\"' + colors.join(',') + '\" opacity=\"', opacity2, '\" o:opacity2=\"', opacity1,\n\t\t\t\t\t\t'\" type=\"', fillType, '\" ', fillAttr, 'focus=\"100%\" method=\"any\" />'];\n\t\t\t\t\tcreateElement(renderer.prepVML(markup), null, null, elem);\n\t\t\t\t};\n\n\t\t\t// Extend from 0 to 1\n\t\t\tfirstStop = stops[0];\n\t\t\tlastStop = stops[stops.length - 1];\n\t\t\tif (firstStop[0] > 0) {\n\t\t\t\tstops.unshift([\n\t\t\t\t\t0,\n\t\t\t\t\tfirstStop[1]\n\t\t\t\t]);\n\t\t\t}\n\t\t\tif (lastStop[0] < 1) {\n\t\t\t\tstops.push([\n\t\t\t\t\t1,\n\t\t\t\t\tlastStop[1]\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\t// Compute the stops\n\t\t\teach(stops, function (stop, i) {\n\t\t\t\tif (regexRgba.test(stop[1])) {\n\t\t\t\t\tcolorObject = Color(stop[1]);\n\t\t\t\t\tstopColor = colorObject.get('rgb');\n\t\t\t\t\tstopOpacity = colorObject.get('a');\n\t\t\t\t} else {\n\t\t\t\t\tstopColor = stop[1];\n\t\t\t\t\tstopOpacity = 1;\n\t\t\t\t}\n\n\t\t\t\t// Build the color attribute\n\t\t\t\tcolors.push((stop[0] * 100) + '% ' + stopColor);\n\n\t\t\t\t// Only start and end opacities are allowed, so we use the first and the last\n\t\t\t\tif (!i) {\n\t\t\t\t\topacity1 = stopOpacity;\n\t\t\t\t\tcolor2 = stopColor;\n\t\t\t\t} else {\n\t\t\t\t\topacity2 = stopOpacity;\n\t\t\t\t\tcolor1 = stopColor;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Apply the gradient to fills only.\n\t\t\tif (prop === 'fill') {\n\n\t\t\t\t// Handle linear gradient angle\n\t\t\t\tif (fillType === 'gradient') {\n\t\t\t\t\tx1 = gradient.x1 || gradient[0] || 0;\n\t\t\t\t\ty1 = gradient.y1 || gradient[1] || 0;\n\t\t\t\t\tx2 = gradient.x2 || gradient[2] || 0;\n\t\t\t\t\ty2 = gradient.y2 || gradient[3] || 0;\n\t\t\t\t\tfillAttr = 'angle=\"' + (90  - math.atan(\n\t\t\t\t\t\t(y2 - y1) / // y vector\n\t\t\t\t\t\t(x2 - x1) // x vector\n\t\t\t\t\t\t) * 180 / mathPI) + '\"';\n\n\t\t\t\t\taddFillNode();\n\n\t\t\t\t// Radial (circular) gradient\n\t\t\t\t} else {\n\n\t\t\t\t\tvar r = gradient.r,\n\t\t\t\t\t\tsizex = r * 2,\n\t\t\t\t\t\tsizey = r * 2,\n\t\t\t\t\t\tcx = gradient.cx,\n\t\t\t\t\t\tcy = gradient.cy,\n\t\t\t\t\t\tradialReference = elem.radialReference,\n\t\t\t\t\t\tbBox,\n\t\t\t\t\t\tapplyRadialGradient = function () {\n\t\t\t\t\t\t\tif (radialReference) {\n\t\t\t\t\t\t\t\tbBox = wrapper.getBBox();\n\t\t\t\t\t\t\t\tcx += (radialReference[0] - bBox.x) / bBox.width - 0.5;\n\t\t\t\t\t\t\t\tcy += (radialReference[1] - bBox.y) / bBox.height - 0.5;\n\t\t\t\t\t\t\t\tsizex *= radialReference[2] / bBox.width;\n\t\t\t\t\t\t\t\tsizey *= radialReference[2] / bBox.height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfillAttr = 'src=\"' + defaultOptions.global.VMLRadialGradientURL + '\" ' +\n\t\t\t\t\t\t\t\t'size=\"' + sizex + ',' + sizey + '\" ' +\n\t\t\t\t\t\t\t\t'origin=\"0.5,0.5\" ' +\n\t\t\t\t\t\t\t\t'position=\"' + cx + ',' + cy + '\" ' +\n\t\t\t\t\t\t\t\t'color2=\"' + color2 + '\" ';\n\n\t\t\t\t\t\t\taddFillNode();\n\t\t\t\t\t\t};\n\n\t\t\t\t\t// Apply radial gradient\n\t\t\t\t\tif (wrapper.added) {\n\t\t\t\t\t\tapplyRadialGradient();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// We need to know the bounding box to get the size and position right\n\t\t\t\t\t\taddEvent(wrapper, 'add', applyRadialGradient);\n\t\t\t\t\t}\n\n\t\t\t\t\t// The fill element's color attribute is broken in IE8 standards mode, so we\n\t\t\t\t\t// need to set the parent shape's fillcolor attribute instead.\n\t\t\t\t\tret = color1;\n\t\t\t\t}\n\n\t\t\t// Gradients are not supported for VML stroke, return the first color. #722.\n\t\t\t} else {\n\t\t\t\tret = stopColor;\n\t\t\t}\n\n\t\t// if the color is an rgba color, split it and add a fill node\n\t\t// to hold the opacity component\n\t\t} else if (regexRgba.test(color) && elem.tagName !== 'IMG') {\n\n\t\t\tcolorObject = Color(color);\n\n\t\t\tmarkup = ['<', prop, ' opacity=\"', colorObject.get('a'), '\"/>'];\n\t\t\tcreateElement(this.prepVML(markup), null, null, elem);\n\n\t\t\tret = colorObject.get('rgb');\n\n\n\t\t} else {\n\t\t\tvar propNodes = elem.getElementsByTagName(prop); // 'stroke' or 'fill' node\n\t\t\tif (propNodes.length) {\n\t\t\t\tpropNodes[0].opacity = 1;\n\t\t\t\tpropNodes[0].type = 'solid';\n\t\t\t}\n\t\t\tret = color;\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Take a VML string and prepare it for either IE8 or IE6/IE7.\n\t * @param {Array} markup A string array of the VML markup to prepare\n\t */\n\tprepVML: function (markup) {\n\t\tvar vmlStyle = 'display:inline-block;behavior:url(#default#VML);',\n\t\t\tisIE8 = this.isIE8;\n\n\t\tmarkup = markup.join('');\n\n\t\tif (isIE8) { // add xmlns and style inline\n\t\t\tmarkup = markup.replace('/>', ' xmlns=\"urn:schemas-microsoft-com:vml\" />');\n\t\t\tif (markup.indexOf('style=\"') === -1) {\n\t\t\t\tmarkup = markup.replace('/>', ' style=\"' + vmlStyle + '\" />');\n\t\t\t} else {\n\t\t\t\tmarkup = markup.replace('style=\"', 'style=\"' + vmlStyle);\n\t\t\t}\n\n\t\t} else { // add namespace\n\t\t\tmarkup = markup.replace('<', '<hcv:');\n\t\t}\n\n\t\treturn markup;\n\t},\n\n\t/**\n\t * Create rotated and aligned text\n\t * @param {String} str\n\t * @param {Number} x\n\t * @param {Number} y\n\t */\n\ttext: SVGRenderer.prototype.html,\n\n\t/**\n\t * Create and return a path element\n\t * @param {Array} path\n\t */\n\tpath: function (path) {\n\t\tvar attr = {\n\t\t\t// subpixel precision down to 0.1 (width and height = 1px)\n\t\t\tcoordsize: '10 10'\n\t\t};\n\t\tif (isArray(path)) {\n\t\t\tattr.d = path;\n\t\t} else if (isObject(path)) { // attributes\n\t\t\textend(attr, path);\n\t\t}\n\t\t// create the shape\n\t\treturn this.createElement('shape').attr(attr);\n\t},\n\n\t/**\n\t * Create and return a circle element. In VML circles are implemented as\n\t * shapes, which is faster than v:oval\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} r\n\t */\n\tcircle: function (x, y, r) {\n\t\tvar circle = this.symbol('circle');\n\t\tif (isObject(x)) {\n\t\t\tr = x.r;\n\t\t\ty = x.y;\n\t\t\tx = x.x;\n\t\t}\n\t\tcircle.isCircle = true; // Causes x and y to mean center (#1682)\n\t\tcircle.r = r;\n\t\treturn circle.attr({ x: x, y: y });\n\t},\n\n\t/**\n\t * Create a group using an outer div and an inner v:group to allow rotating\n\t * and flipping. A simple v:group would have problems with positioning\n\t * child HTML elements and CSS clip.\n\t *\n\t * @param {String} name The name of the group\n\t */\n\tg: function (name) {\n\t\tvar wrapper,\n\t\t\tattribs;\n\n\t\t// set the class name\n\t\tif (name) {\n\t\t\tattribs = { 'className': PREFIX + name, 'class': PREFIX + name };\n\t\t}\n\n\t\t// the div to hold HTML and clipping\n\t\twrapper = this.createElement(DIV).attr(attribs);\n\n\t\treturn wrapper;\n\t},\n\n\t/**\n\t * VML override to create a regular HTML image\n\t * @param {String} src\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @param {Number} width\n\t * @param {Number} height\n\t */\n\timage: function (src, x, y, width, height) {\n\t\tvar obj = this.createElement('img')\n\t\t\t.attr({ src: src });\n\n\t\tif (arguments.length > 1) {\n\t\t\tobj.attr({\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t});\n\t\t}\n\t\treturn obj;\n\t},\n\n\t/**\n\t * VML uses a shape for rect to overcome bugs and rotation problems\n\t */\n\trect: function (x, y, width, height, r, strokeWidth) {\n\n\t\tvar wrapper = this.symbol('rect');\n\t\twrapper.r = isObject(x) ? x.r : r;\n\n\t\t//return wrapper.attr(wrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0)));\n\t\treturn wrapper.attr(\n\t\t\t\tisObject(x) ?\n\t\t\t\t\tx :\n\t\t\t\t\t// do not crispify when an object is passed in (as in column charts)\n\t\t\t\t\twrapper.crisp(strokeWidth, x, y, mathMax(width, 0), mathMax(height, 0))\n\t\t\t);\n\t},\n\n\t/**\n\t * In the VML renderer, each child of an inverted div (group) is inverted\n\t * @param {Object} element\n\t * @param {Object} parentNode\n\t */\n\tinvertChild: function (element, parentNode) {\n\t\tvar parentStyle = parentNode.style;\n\t\tcss(element, {\n\t\t\tflip: 'x',\n\t\t\tleft: pInt(parentStyle.width) - 1,\n\t\t\ttop: pInt(parentStyle.height) - 1,\n\t\t\trotation: -90\n\t\t});\n\t},\n\n\t/**\n\t * Symbol definitions that override the parent SVG renderer's symbols\n\t *\n\t */\n\tsymbols: {\n\t\t// VML specific arc function\n\t\tarc: function (x, y, w, h, options) {\n\t\t\tvar start = options.start,\n\t\t\t\tend = options.end,\n\t\t\t\tradius = options.r || w || h,\n\t\t\t\tinnerRadius = options.innerR,\n\t\t\t\tcosStart = mathCos(start),\n\t\t\t\tsinStart = mathSin(start),\n\t\t\t\tcosEnd = mathCos(end),\n\t\t\t\tsinEnd = mathSin(end),\n\t\t\t\tret;\n\n\t\t\tif (end - start === 0) { // no angle, don't show it.\n\t\t\t\treturn ['x'];\n\t\t\t}\n\n\t\t\tret = [\n\t\t\t\t'wa', // clockwise arc to\n\t\t\t\tx - radius, // left\n\t\t\t\ty - radius, // top\n\t\t\t\tx + radius, // right\n\t\t\t\ty + radius, // bottom\n\t\t\t\tx + radius * cosStart, // start x\n\t\t\t\ty + radius * sinStart, // start y\n\t\t\t\tx + radius * cosEnd, // end x\n\t\t\t\ty + radius * sinEnd  // end y\n\t\t\t];\n\n\t\t\tif (options.open && !innerRadius) {\n\t\t\t\tret.push(\n\t\t\t\t\t'e',\n\t\t\t\t\tM,\n\t\t\t\t\tx,// - innerRadius,\n\t\t\t\t\ty// - innerRadius\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.push(\n\t\t\t\t'at', // anti clockwise arc to\n\t\t\t\tx - innerRadius, // left\n\t\t\t\ty - innerRadius, // top\n\t\t\t\tx + innerRadius, // right\n\t\t\t\ty + innerRadius, // bottom\n\t\t\t\tx + innerRadius * cosEnd, // start x\n\t\t\t\ty + innerRadius * sinEnd, // start y\n\t\t\t\tx + innerRadius * cosStart, // end x\n\t\t\t\ty + innerRadius * sinStart, // end y\n\t\t\t\t'x', // finish path\n\t\t\t\t'e' // close\n\t\t\t);\n\n\t\t\tret.isArc = true;\n\t\t\treturn ret;\n\n\t\t},\n\t\t// Add circle symbol path. This performs significantly faster than v:oval.\n\t\tcircle: function (x, y, w, h, wrapper) {\n\n\t\t\tif (wrapper) {\n\t\t\t\tw = h = 2 * wrapper.r;\n\t\t\t}\n\n\t\t\t// Center correction, #1682\n\t\t\tif (wrapper && wrapper.isCircle) {\n\t\t\t\tx -= w / 2;\n\t\t\t\ty -= h / 2;\n\t\t\t}\n\n\t\t\t// Return the path\n\t\t\treturn [\n\t\t\t\t'wa', // clockwisearcto\n\t\t\t\tx, // left\n\t\t\t\ty, // top\n\t\t\t\tx + w, // right\n\t\t\t\ty + h, // bottom\n\t\t\t\tx + w, // start x\n\t\t\t\ty + h / 2,     // start y\n\t\t\t\tx + w, // end x\n\t\t\t\ty + h / 2,     // end y\n\t\t\t\t//'x', // finish path\n\t\t\t\t'e' // close\n\t\t\t];\n\t\t},\n\t\t/**\n\t\t * Add rectangle symbol path which eases rotation and omits arcsize problems\n\t\t * compared to the built-in VML roundrect shape\n\t\t *\n\t\t * @param {Number} left Left position\n\t\t * @param {Number} top Top position\n\t\t * @param {Number} r Border radius\n\t\t * @param {Object} options Width and height\n\t\t */\n\n\t\trect: function (left, top, width, height, options) {\n\n\t\t\tvar right = left + width,\n\t\t\t\tbottom = top + height,\n\t\t\t\tret,\n\t\t\t\tr;\n\n\t\t\t// No radius, return the more lightweight square\n\t\t\tif (!defined(options) || !options.r) {\n\t\t\t\tret = SVGRenderer.prototype.symbols.square.apply(0, arguments);\n\n\t\t\t// Has radius add arcs for the corners\n\t\t\t} else {\n\n\t\t\t\tr = mathMin(options.r, width, height);\n\t\t\t\tret = [\n\t\t\t\t\tM,\n\t\t\t\t\tleft + r, top,\n\n\t\t\t\t\tL,\n\t\t\t\t\tright - r, top,\n\t\t\t\t\t'wa',\n\t\t\t\t\tright - 2 * r, top,\n\t\t\t\t\tright, top + 2 * r,\n\t\t\t\t\tright - r, top,\n\t\t\t\t\tright, top + r,\n\n\t\t\t\t\tL,\n\t\t\t\t\tright, bottom - r,\n\t\t\t\t\t'wa',\n\t\t\t\t\tright - 2 * r, bottom - 2 * r,\n\t\t\t\t\tright, bottom,\n\t\t\t\t\tright, bottom - r,\n\t\t\t\t\tright - r, bottom,\n\n\t\t\t\t\tL,\n\t\t\t\t\tleft + r, bottom,\n\t\t\t\t\t'wa',\n\t\t\t\t\tleft, bottom - 2 * r,\n\t\t\t\t\tleft + 2 * r, bottom,\n\t\t\t\t\tleft + r, bottom,\n\t\t\t\t\tleft, bottom - r,\n\n\t\t\t\t\tL,\n\t\t\t\t\tleft, top + r,\n\t\t\t\t\t'wa',\n\t\t\t\t\tleft, top,\n\t\t\t\t\tleft + 2 * r, top + 2 * r,\n\t\t\t\t\tleft, top + r,\n\t\t\t\t\tleft + r, top,\n\n\n\t\t\t\t\t'x',\n\t\t\t\t\t'e'\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t}\n};\nHighcharts.VMLRenderer = VMLRenderer = function () {\n\tthis.init.apply(this, arguments);\n};\nVMLRenderer.prototype = merge(SVGRenderer.prototype, VMLRendererExtension);\n\n\t// general renderer\n\tRenderer = VMLRenderer;\n}\n\n/* ****************************************************************************\n *                                                                            *\n * END OF INTERNET EXPLORER <= 8 SPECIFIC CODE                                *\n *                                                                            *\n *****************************************************************************/\n/* ****************************************************************************\n *                                                                            *\n * START OF ANDROID < 3 SPECIFIC CODE. THIS CAN BE REMOVED IF YOU'RE NOT      *\n * TARGETING THAT SYSTEM.                                                     *\n *                                                                            *\n *****************************************************************************/\nvar CanVGRenderer,\n\tCanVGController;\n\nif (useCanVG) {\n\t/**\n\t * The CanVGRenderer is empty from start to keep the source footprint small.\n\t * When requested, the CanVGController downloads the rest of the source packaged\n\t * together with the canvg library.\n\t */\n\tHighcharts.CanVGRenderer = CanVGRenderer = function () {\n\t\t// Override the global SVG namespace to fake SVG/HTML that accepts CSS\n\t\tSVG_NS = 'http://www.w3.org/1999/xhtml';\n\t};\n\n\t/**\n\t * Start with an empty symbols object. This is needed when exporting is used (exporting.src.js will add a few symbols), but \n\t * the implementation from SvgRenderer will not be merged in until first render.\n\t */\n\tCanVGRenderer.prototype.symbols = {};\n\n\t/**\n\t * Handles on demand download of canvg rendering support.\n\t */\n\tCanVGController = (function () {\n\t\t// List of renderering calls\n\t\tvar deferredRenderCalls = [];\n\n\t\t/**\n\t\t * When downloaded, we are ready to draw deferred charts.\n\t\t */\n\t\tfunction drawDeferred() {\n\t\t\tvar callLength = deferredRenderCalls.length,\n\t\t\t\tcallIndex;\n\n\t\t\t// Draw all pending render calls\n\t\t\tfor (callIndex = 0; callIndex < callLength; callIndex++) {\n\t\t\t\tdeferredRenderCalls[callIndex]();\n\t\t\t}\n\t\t\t// Clear the list\n\t\t\tdeferredRenderCalls = [];\n\t\t}\n\n\t\treturn {\n\t\t\tpush: function (func, scriptLocation) {\n\t\t\t\t// Only get the script once\n\t\t\t\tif (deferredRenderCalls.length === 0) {\n\t\t\t\t\tgetScript(scriptLocation, drawDeferred);\n\t\t\t\t}\n\t\t\t\t// Register render call\n\t\t\t\tdeferredRenderCalls.push(func);\n\t\t\t}\n\t\t};\n\t}());\n\n\tRenderer = CanVGRenderer;\n} // end CanVGRenderer\n\n/* ****************************************************************************\n *                                                                            *\n * END OF ANDROID < 3 SPECIFIC CODE                                           *\n *                                                                            *\n *****************************************************************************/\n\n/**\n * The Tick class\n */\nfunction Tick(axis, pos, type, noLabel) {\n\tthis.axis = axis;\n\tthis.pos = pos;\n\tthis.type = type || '';\n\tthis.isNew = true;\n\n\tif (!type && !noLabel) {\n\t\tthis.addLabel();\n\t}\n}\n\nTick.prototype = {\n\t/**\n\t * Write the tick label\n\t */\n\taddLabel: function () {\n\t\tvar tick = this,\n\t\t\taxis = tick.axis,\n\t\t\toptions = axis.options,\n\t\t\tchart = axis.chart,\n\t\t\thoriz = axis.horiz,\n\t\t\tcategories = axis.categories,\n\t\t\tnames = axis.series[0] && axis.series[0].names,\n\t\t\tpos = tick.pos,\n\t\t\tlabelOptions = options.labels,\n\t\t\tstr,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\twidth = (horiz && categories &&\n\t\t\t\t!labelOptions.step && !labelOptions.staggerLines &&\n\t\t\t\t!labelOptions.rotation &&\n\t\t\t\tchart.plotWidth / tickPositions.length) ||\n\t\t\t\t(!horiz && (chart.margin[3] || chart.chartWidth * 0.33)), // #1580, #1931\n\t\t\tisFirst = pos === tickPositions[0],\n\t\t\tisLast = pos === tickPositions[tickPositions.length - 1],\n\t\t\tcss,\n\t\t\tattr,\n\t\t\tvalue = categories ?\n\t\t\t\tpick(categories[pos], names && names[pos], pos) : \n\t\t\t\tpos,\n\t\t\tlabel = tick.label,\n\t\t\ttickPositionInfo = tickPositions.info,\n\t\t\tdateTimeLabelFormat;\n\n\t\t// Set the datetime label format. If a higher rank is set for this position, use that. If not,\n\t\t// use the general format.\n\t\tif (axis.isDatetimeAxis && tickPositionInfo) {\n\t\t\tdateTimeLabelFormat = options.dateTimeLabelFormats[tickPositionInfo.higherRanks[pos] || tickPositionInfo.unitName];\n\t\t}\n\n\t\t// set properties for access in render method\n\t\ttick.isFirst = isFirst;\n\t\ttick.isLast = isLast;\n\n\t\t// get the string\n\t\tstr = axis.labelFormatter.call({\n\t\t\taxis: axis,\n\t\t\tchart: chart,\n\t\t\tisFirst: isFirst,\n\t\t\tisLast: isLast,\n\t\t\tdateTimeLabelFormat: dateTimeLabelFormat,\n\t\t\tvalue: axis.isLog ? correctFloat(lin2log(value)) : value\n\t\t});\n\n\t\t// prepare CSS\n\t\tcss = width && { width: mathMax(1, mathRound(width - 2 * (labelOptions.padding || 10))) + PX };\n\t\tcss = extend(css, labelOptions.style);\n\n\t\t// first call\n\t\tif (!defined(label)) {\n\t\t\tattr = {\n\t\t\t\talign: axis.labelAlign\n\t\t\t};\n\t\t\tif (isNumber(labelOptions.rotation)) {\n\t\t\t\tattr.rotation = labelOptions.rotation;\n\t\t\t}\n\t\t\tif (width && labelOptions.ellipsis) {\n\t\t\t\tattr._clipHeight = axis.len / tickPositions.length;\n\t\t\t}\n\n\t\t\ttick.label =\n\t\t\t\tdefined(str) && labelOptions.enabled ?\n\t\t\t\t\tchart.renderer.text(\n\t\t\t\t\t\t\tstr,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tlabelOptions.useHTML\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(attr)\n\t\t\t\t\t\t// without position absolute, IE export sometimes is wrong\n\t\t\t\t\t\t.css(css)\n\t\t\t\t\t\t.add(axis.labelGroup) :\n\t\t\t\t\tnull;\n\n\t\t// update\n\t\t} else if (label) {\n\t\t\tlabel.attr({\n\t\t\t\t\ttext: str\n\t\t\t\t})\n\t\t\t\t.css(css);\n\t\t}\n\t},\n\n\t/**\n\t * Get the offset height or width of the label\n\t */\n\tgetLabelSize: function () {\n\t\tvar label = this.label,\n\t\t\taxis = this.axis;\n\t\treturn label ?\n\t\t\t((this.labelBBox = label.getBBox()))[axis.horiz ? 'height' : 'width'] :\n\t\t\t0;\n\t},\n\n\t/**\n\t * Find how far the labels extend to the right and left of the tick's x position. Used for anti-collision\n\t * detection with overflow logic.\n\t */\n\tgetLabelSides: function () {\n\t\tvar bBox = this.labelBBox, // assume getLabelSize has run at this point\n\t\t\taxis = this.axis,\n\t\t\toptions = axis.options,\n\t\t\tlabelOptions = options.labels,\n\t\t\twidth = bBox.width,\n\t\t\tleftSide = width * { left: 0, center: 0.5, right: 1 }[axis.labelAlign] - labelOptions.x;\n\n\t\treturn [-leftSide, width - leftSide];\n\t},\n\n\t/**\n\t * Handle the label overflow by adjusting the labels to the left and right edge, or\n\t * hide them if they collide into the neighbour label.\n\t */\n\thandleOverflow: function (index, xy) {\n\t\tvar show = true,\n\t\t\taxis = this.axis,\n\t\t\tchart = axis.chart,\n\t\t\tisFirst = this.isFirst,\n\t\t\tisLast = this.isLast,\n\t\t\tx = xy.x,\n\t\t\treversed = axis.reversed,\n\t\t\ttickPositions = axis.tickPositions;\n\n\t\tif (isFirst || isLast) {\n\n\t\t\tvar sides = this.getLabelSides(),\n\t\t\t\tleftSide = sides[0],\n\t\t\t\trightSide = sides[1],\n\t\t\t\tplotLeft = chart.plotLeft,\n\t\t\t\tplotRight = plotLeft + axis.len,\n\t\t\t\tneighbour = axis.ticks[tickPositions[index + (isFirst ? 1 : -1)]],\n\t\t\t\tneighbourEdge = neighbour && neighbour.label.xy && neighbour.label.xy.x + neighbour.getLabelSides()[isFirst ? 0 : 1];\n\n\t\t\tif ((isFirst && !reversed) || (isLast && reversed)) {\n\t\t\t\t// Is the label spilling out to the left of the plot area?\n\t\t\t\tif (x + leftSide < plotLeft) {\n\n\t\t\t\t\t// Align it to plot left\n\t\t\t\t\tx = plotLeft - leftSide;\n\n\t\t\t\t\t// Hide it if it now overlaps the neighbour label\n\t\t\t\t\tif (neighbour && x + rightSide > neighbourEdge) {\n\t\t\t\t\t\tshow = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// Is the label spilling out to the right of the plot area?\n\t\t\t\tif (x + rightSide > plotRight) {\n\n\t\t\t\t\t// Align it to plot right\n\t\t\t\t\tx = plotRight - rightSide;\n\n\t\t\t\t\t// Hide it if it now overlaps the neighbour label\n\t\t\t\t\tif (neighbour && x + leftSide < neighbourEdge) {\n\t\t\t\t\t\tshow = false;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the modified x position of the label\n\t\t\txy.x = x;\n\t\t}\n\t\treturn show;\n\t},\n\n\t/**\n\t * Get the x and y position for ticks and labels\n\t */\n\tgetPosition: function (horiz, pos, tickmarkOffset, old) {\n\t\tvar axis = this.axis,\n\t\t\tchart = axis.chart,\n\t\t\tcHeight = (old && chart.oldChartHeight) || chart.chartHeight;\n\t\t\n\t\treturn {\n\t\t\tx: horiz ?\n\t\t\t\taxis.translate(pos + tickmarkOffset, null, null, old) + axis.transB :\n\t\t\t\taxis.left + axis.offset + (axis.opposite ? ((old && chart.oldChartWidth) || chart.chartWidth) - axis.right - axis.left : 0),\n\n\t\t\ty: horiz ?\n\t\t\t\tcHeight - axis.bottom + axis.offset - (axis.opposite ? axis.height : 0) :\n\t\t\t\tcHeight - axis.translate(pos + tickmarkOffset, null, null, old) - axis.transB\n\t\t};\n\t\t\n\t},\n\t\n\t/**\n\t * Get the x, y position of the tick label\n\t */\n\tgetLabelPosition: function (x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {\n\t\tvar axis = this.axis,\n\t\t\ttransA = axis.transA,\n\t\t\treversed = axis.reversed,\n\t\t\tstaggerLines = axis.staggerLines,\n\t\t\tbaseline = axis.chart.renderer.fontMetrics(labelOptions.style.fontSize).b,\n\t\t\trotation = labelOptions.rotation;\n\t\t\t\n\t\tx = x + labelOptions.x - (tickmarkOffset && horiz ?\n\t\t\ttickmarkOffset * transA * (reversed ? -1 : 1) : 0);\n\t\ty = y + labelOptions.y - (tickmarkOffset && !horiz ?\n\t\t\ttickmarkOffset * transA * (reversed ? 1 : -1) : 0);\n\n\t\t// Correct for rotation (#1764)\n\t\tif (rotation && axis.side === 2) {\n\t\t\ty -= baseline - baseline * mathCos(rotation * deg2rad);\n\t\t}\n\t\t\n\t\t// Vertically centered\n\t\tif (!defined(labelOptions.y) && !rotation) { // #1951\n\t\t\ty += baseline - label.getBBox().height / 2;\n\t\t}\n\t\t\n\t\t// Correct for staggered labels\n\t\tif (staggerLines) {\n\t\t\ty += (index / (step || 1) % staggerLines) * (axis.labelOffset / staggerLines);\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\t\n\t/**\n\t * Extendible method to return the path of the marker\n\t */\n\tgetMarkPath: function (x, y, tickLength, tickWidth, horiz, renderer) {\n\t\treturn renderer.crispLine([\n\t\t\t\tM,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tL,\n\t\t\t\tx + (horiz ? 0 : -tickLength),\n\t\t\t\ty + (horiz ? tickLength : 0)\n\t\t\t], tickWidth);\n\t},\n\n\t/**\n\t * Put everything in place\n\t *\n\t * @param index {Number}\n\t * @param old {Boolean} Use old coordinates to prepare an animation into new position\n\t */\n\trender: function (index, old, opacity) {\n\t\tvar tick = this,\n\t\t\taxis = tick.axis,\n\t\t\toptions = axis.options,\n\t\t\tchart = axis.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\thoriz = axis.horiz,\n\t\t\ttype = tick.type,\n\t\t\tlabel = tick.label,\n\t\t\tpos = tick.pos,\n\t\t\tlabelOptions = options.labels,\n\t\t\tgridLine = tick.gridLine,\n\t\t\tgridPrefix = type ? type + 'Grid' : 'grid',\n\t\t\ttickPrefix = type ? type + 'Tick' : 'tick',\n\t\t\tgridLineWidth = options[gridPrefix + 'LineWidth'],\n\t\t\tgridLineColor = options[gridPrefix + 'LineColor'],\n\t\t\tdashStyle = options[gridPrefix + 'LineDashStyle'],\n\t\t\ttickLength = options[tickPrefix + 'Length'],\n\t\t\ttickWidth = options[tickPrefix + 'Width'] || 0,\n\t\t\ttickColor = options[tickPrefix + 'Color'],\n\t\t\ttickPosition = options[tickPrefix + 'Position'],\n\t\t\tgridLinePath,\n\t\t\tmark = tick.mark,\n\t\t\tmarkPath,\n\t\t\tstep = labelOptions.step,\n\t\t\tattribs,\n\t\t\tshow = true,\n\t\t\ttickmarkOffset = axis.tickmarkOffset,\n\t\t\txy = tick.getPosition(horiz, pos, tickmarkOffset, old),\n\t\t\tx = xy.x,\n\t\t\ty = xy.y,\n\t\t\treverseCrisp = ((horiz && x === axis.pos + axis.len) || (!horiz && y === axis.pos)) ? -1 : 1, // #1480, #1687\n\t\t\tstaggerLines = axis.staggerLines;\n\n\t\tthis.isActive = true;\n\t\t\n\t\t// create the grid line\n\t\tif (gridLineWidth) {\n\t\t\tgridLinePath = axis.getPlotLinePath(pos + tickmarkOffset, gridLineWidth * reverseCrisp, old, true);\n\n\t\t\tif (gridLine === UNDEFINED) {\n\t\t\t\tattribs = {\n\t\t\t\t\tstroke: gridLineColor,\n\t\t\t\t\t'stroke-width': gridLineWidth\n\t\t\t\t};\n\t\t\t\tif (dashStyle) {\n\t\t\t\t\tattribs.dashstyle = dashStyle;\n\t\t\t\t}\n\t\t\t\tif (!type) {\n\t\t\t\t\tattribs.zIndex = 1;\n\t\t\t\t}\n\t\t\t\tif (old) {\n\t\t\t\t\tattribs.opacity = 0;\n\t\t\t\t}\n\t\t\t\ttick.gridLine = gridLine =\n\t\t\t\t\tgridLineWidth ?\n\t\t\t\t\t\trenderer.path(gridLinePath)\n\t\t\t\t\t\t\t.attr(attribs).add(axis.gridGroup) :\n\t\t\t\t\t\tnull;\n\t\t\t}\n\n\t\t\t// If the parameter 'old' is set, the current call will be followed\n\t\t\t// by another call, therefore do not do any animations this time\n\t\t\tif (!old && gridLine && gridLinePath) {\n\t\t\t\tgridLine[tick.isNew ? 'attr' : 'animate']({\n\t\t\t\t\td: gridLinePath,\n\t\t\t\t\topacity: opacity\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// create the tick mark\n\t\tif (tickWidth && tickLength) {\n\n\t\t\t// negate the length\n\t\t\tif (tickPosition === 'inside') {\n\t\t\t\ttickLength = -tickLength;\n\t\t\t}\n\t\t\tif (axis.opposite) {\n\t\t\t\ttickLength = -tickLength;\n\t\t\t}\n\n\t\t\tmarkPath = tick.getMarkPath(x, y, tickLength, tickWidth * reverseCrisp, horiz, renderer);\n\n\t\t\tif (mark) { // updating\n\t\t\t\tmark.animate({\n\t\t\t\t\td: markPath,\n\t\t\t\t\topacity: opacity\n\t\t\t\t});\n\t\t\t} else { // first time\n\t\t\t\ttick.mark = renderer.path(\n\t\t\t\t\tmarkPath\n\t\t\t\t).attr({\n\t\t\t\t\tstroke: tickColor,\n\t\t\t\t\t'stroke-width': tickWidth,\n\t\t\t\t\topacity: opacity\n\t\t\t\t}).add(axis.axisGroup);\n\t\t\t}\n\t\t}\n\n\t\t// the label is created on init - now move it into place\n\t\tif (label && !isNaN(x)) {\n\t\t\tlabel.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step);\n\n\t\t\t// Apply show first and show last. If the tick is both first and last, it is \n\t\t\t// a single centered tick, in which case we show the label anyway (#2100).\n\t\t\tif ((tick.isFirst && !tick.isLast && !pick(options.showFirstLabel, 1)) ||\n\t\t\t\t\t(tick.isLast && !tick.isFirst && !pick(options.showLastLabel, 1))) {\n\t\t\t\tshow = false;\n\n\t\t\t// Handle label overflow and show or hide accordingly\n\t\t\t} else if (!staggerLines && horiz && labelOptions.overflow === 'justify' && !tick.handleOverflow(index, xy)) {\n\t\t\t\tshow = false;\n\t\t\t}\n\n\t\t\t// apply step\n\t\t\tif (step && index % step) {\n\t\t\t\t// show those indices dividable by step\n\t\t\t\tshow = false;\n\t\t\t}\n\n\t\t\t// Set the new position, and show or hide\n\t\t\tif (show && !isNaN(xy.y)) {\n\t\t\t\txy.opacity = opacity;\n\t\t\t\tlabel[tick.isNew ? 'attr' : 'animate'](xy);\n\t\t\t\ttick.isNew = false;\n\t\t\t} else {\n\t\t\t\tlabel.attr('y', -9999); // #1338\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Destructor for the tick prototype\n\t */\n\tdestroy: function () {\n\t\tdestroyObjectProperties(this, this.axis);\n\t}\n};\n\n/**\n * The object wrapper for plot lines and plot bands\n * @param {Object} options\n */\nfunction PlotLineOrBand(axis, options) {\n\tthis.axis = axis;\n\n\tif (options) {\n\t\tthis.options = options;\n\t\tthis.id = options.id;\n\t}\n}\n\nPlotLineOrBand.prototype = {\n\t\n\t/**\n\t * Render the plot line or plot band. If it is already existing,\n\t * move it.\n\t */\n\trender: function () {\n\t\tvar plotLine = this,\n\t\t\taxis = plotLine.axis,\n\t\t\thoriz = axis.horiz,\n\t\t\thalfPointRange = (axis.pointRange || 0) / 2,\n\t\t\toptions = plotLine.options,\n\t\t\toptionsLabel = options.label,\n\t\t\tlabel = plotLine.label,\n\t\t\twidth = options.width,\n\t\t\tto = options.to,\n\t\t\tfrom = options.from,\n\t\t\tisBand = defined(from) && defined(to),\n\t\t\tvalue = options.value,\n\t\t\tdashStyle = options.dashStyle,\n\t\t\tsvgElem = plotLine.svgElem,\n\t\t\tpath = [],\n\t\t\taddEvent,\n\t\t\teventType,\n\t\t\txs,\n\t\t\tys,\n\t\t\tx,\n\t\t\ty,\n\t\t\tcolor = options.color,\n\t\t\tzIndex = options.zIndex,\n\t\t\tevents = options.events,\n\t\t\tattribs,\n\t\t\trenderer = axis.chart.renderer;\n\n\t\t// logarithmic conversion\n\t\tif (axis.isLog) {\n\t\t\tfrom = log2lin(from);\n\t\t\tto = log2lin(to);\n\t\t\tvalue = log2lin(value);\n\t\t}\n\n\t\t// plot line\n\t\tif (width) {\n\t\t\tpath = axis.getPlotLinePath(value, width);\n\t\t\tattribs = {\n\t\t\t\tstroke: color,\n\t\t\t\t'stroke-width': width\n\t\t\t};\n\t\t\tif (dashStyle) {\n\t\t\t\tattribs.dashstyle = dashStyle;\n\t\t\t}\n\t\t} else if (isBand) { // plot band\n\t\t\t\n\t\t\t// keep within plot area\n\t\t\tfrom = mathMax(from, axis.min - halfPointRange);\n\t\t\tto = mathMin(to, axis.max + halfPointRange);\n\t\t\t\n\t\t\tpath = axis.getPlotBandPath(from, to, options);\n\t\t\tattribs = {\n\t\t\t\tfill: color\n\t\t\t};\n\t\t\tif (options.borderWidth) {\n\t\t\t\tattribs.stroke = options.borderColor;\n\t\t\t\tattribs['stroke-width'] = options.borderWidth;\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t\t// zIndex\n\t\tif (defined(zIndex)) {\n\t\t\tattribs.zIndex = zIndex;\n\t\t}\n\n\t\t// common for lines and bands\n\t\tif (svgElem) {\n\t\t\tif (path) {\n\t\t\t\tsvgElem.animate({\n\t\t\t\t\td: path\n\t\t\t\t}, null, svgElem.onGetPath);\n\t\t\t} else {\n\t\t\t\tsvgElem.hide();\n\t\t\t\tsvgElem.onGetPath = function () {\n\t\t\t\t\tsvgElem.show();\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (path && path.length) {\n\t\t\tplotLine.svgElem = svgElem = renderer.path(path)\n\t\t\t\t.attr(attribs).add();\n\n\t\t\t// events\n\t\t\tif (events) {\n\t\t\t\taddEvent = function (eventType) {\n\t\t\t\t\tsvgElem.on(eventType, function (e) {\n\t\t\t\t\t\tevents[eventType].apply(plotLine, [e]);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tfor (eventType in events) {\n\t\t\t\t\taddEvent(eventType);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// the plot band/line label\n\t\tif (optionsLabel && defined(optionsLabel.text) && path && path.length && axis.width > 0 && axis.height > 0) {\n\t\t\t// apply defaults\n\t\t\toptionsLabel = merge({\n\t\t\t\talign: horiz && isBand && 'center',\n\t\t\t\tx: horiz ? !isBand && 4 : 10,\n\t\t\t\tverticalAlign : !horiz && isBand && 'middle',\n\t\t\t\ty: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4,\n\t\t\t\trotation: horiz && !isBand && 90\n\t\t\t}, optionsLabel);\n\n\t\t\t// add the SVG element\n\t\t\tif (!label) {\n\t\t\t\tplotLine.label = label = renderer.text(\n\t\t\t\t\t\toptionsLabel.text,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\toptionsLabel.useHTML\n\t\t\t\t\t)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\talign: optionsLabel.textAlign || optionsLabel.align,\n\t\t\t\t\t\trotation: optionsLabel.rotation,\n\t\t\t\t\t\tzIndex: zIndex\n\t\t\t\t\t})\n\t\t\t\t\t.css(optionsLabel.style)\n\t\t\t\t\t.add();\n\t\t\t}\n\n\t\t\t// get the bounding box and align the label\n\t\t\txs = [path[1], path[4], pick(path[6], path[1])];\n\t\t\tys = [path[2], path[5], pick(path[7], path[2])];\n\t\t\tx = arrayMin(xs);\n\t\t\ty = arrayMin(ys);\n\n\t\t\tlabel.align(optionsLabel, false, {\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\twidth: arrayMax(xs) - x,\n\t\t\t\theight: arrayMax(ys) - y\n\t\t\t});\n\t\t\tlabel.show();\n\n\t\t} else if (label) { // move out of sight\n\t\t\tlabel.hide();\n\t\t}\n\n\t\t// chainable\n\t\treturn plotLine;\n\t},\n\n\t/**\n\t * Remove the plot line or band\n\t */\n\tdestroy: function () {\n\t\t// remove it from the lookup\n\t\terase(this.axis.plotLinesAndBands, this);\n\t\t\n\t\tdelete this.axis;\n\t\tdestroyObjectProperties(this);\n\t}\n};\n/**\n * The class for stack items\n */\nfunction StackItem(axis, options, isNegative, x, stackOption, stacking) {\n\t\n\tvar inverted = axis.chart.inverted;\n\n\tthis.axis = axis;\n\n\t// Tells if the stack is negative\n\tthis.isNegative = isNegative;\n\n\t// Save the options to be able to style the label\n\tthis.options = options;\n\n\t// Save the x value to be able to position the label later\n\tthis.x = x;\n\n\t// Initialize total value\n\tthis.total = null;\n\n\t// This will keep each points' extremes stored by series.index\n\tthis.points = {};\n\n\t// Save the stack option on the series configuration object, and whether to treat it as percent\n\tthis.stack = stackOption;\n\tthis.percent = stacking === 'percent';\n\n\t// The align options and text align varies on whether the stack is negative and\n\t// if the chart is inverted or not.\n\t// First test the user supplied value, then use the dynamic.\n\tthis.alignOptions = {\n\t\talign: options.align || (inverted ? (isNegative ? 'left' : 'right') : 'center'),\n\t\tverticalAlign: options.verticalAlign || (inverted ? 'middle' : (isNegative ? 'bottom' : 'top')),\n\t\ty: pick(options.y, inverted ? 4 : (isNegative ? 14 : -6)),\n\t\tx: pick(options.x, inverted ? (isNegative ? -6 : 6) : 0)\n\t};\n\n\tthis.textAlign = options.textAlign || (inverted ? (isNegative ? 'right' : 'left') : 'center');\n}\n\nStackItem.prototype = {\n\tdestroy: function () {\n\t\tdestroyObjectProperties(this, this.axis);\n\t},\n\n\t/**\n\t * Renders the stack total label and adds it to the stack label group.\n\t */\n\trender: function (group) {\n\t\tvar options = this.options,\n\t\t\tformatOption = options.format,\n\t\t\tstr = formatOption ?\n\t\t\t\tformat(formatOption, this) : \n\t\t\t\toptions.formatter.call(this);  // format the text in the label\n\n\t\t// Change the text to reflect the new total and set visibility to hidden in case the serie is hidden\n\t\tif (this.label) {\n\t\t\tthis.label.attr({text: str, visibility: HIDDEN});\n\t\t// Create new label\n\t\t} else {\n\t\t\tthis.label =\n\t\t\t\tthis.axis.chart.renderer.text(str, 0, 0, options.useHTML)\t\t// dummy positions, actual position updated with setOffset method in columnseries\n\t\t\t\t\t.css(options.style)\t\t\t\t// apply style\n\t\t\t\t\t.attr({\n\t\t\t\t\t\talign: this.textAlign,\t\t\t\t// fix the text-anchor\n\t\t\t\t\t\trotation: options.rotation,\t// rotation\n\t\t\t\t\t\tvisibility: HIDDEN\t\t\t\t\t// hidden until setOffset is called\n\t\t\t\t\t})\t\t\t\t\n\t\t\t\t\t.add(group);\t\t\t\t\t\t\t// add to the labels-group\n\t\t}\n\t},\n\n\t/**\n\t * Sets the offset that the stack has from the x value and repositions the label.\n\t */\n\tsetOffset: function (xOffset, xWidth) {\n\t\tvar stackItem = this,\n\t\t\taxis = stackItem.axis,\n\t\t\tchart = axis.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tneg = this.isNegative,\t\t\t\t\t\t\t// special treatment is needed for negative stacks\n\t\t\ty = axis.translate(this.percent ? 100 : this.total, 0, 0, 0, 1), // stack value translated mapped to chart coordinates\n\t\t\tyZero = axis.translate(0),\t\t\t\t\t\t// stack origin\n\t\t\th = mathAbs(y - yZero),\t\t\t\t\t\t\t// stack height\n\t\t\tx = chart.xAxis[0].translate(this.x) + xOffset,\t// stack x position\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tstackBox = {\t// this is the box for the complete stack\n\t\t\t\tx: inverted ? (neg ? y : y - h) : x,\n\t\t\t\ty: inverted ? plotHeight - x - xWidth : (neg ? (plotHeight - y - h) : plotHeight - y),\n\t\t\t\twidth: inverted ? h : xWidth,\n\t\t\t\theight: inverted ? xWidth : h\n\t\t\t},\n\t\t\tlabel = this.label,\n\t\t\talignAttr;\n\t\t\n\t\tif (label) {\n\t\t\tlabel.align(this.alignOptions, null, stackBox);\t// align the label to the box\n\t\t\t\t\n\t\t\t// Set visibility (#678)\n\t\t\talignAttr = label.alignAttr;\n\t\t\tlabel.attr({ \n\t\t\t\tvisibility: this.options.crop === false || chart.isInsidePlot(alignAttr.x, alignAttr.y) ? \n\t\t\t\t\t(hasSVG ? 'inherit' : VISIBLE) : \n\t\t\t\t\tHIDDEN\n\t\t\t});\n\t\t}\n\t}\n};\n/**\n * Create a new axis object\n * @param {Object} chart\n * @param {Object} options\n */\nfunction Axis() {\n\tthis.init.apply(this, arguments);\n}\n\nAxis.prototype = {\n\t\n\t/**\n\t * Default options for the X axis - the Y axis has extended defaults \n\t */\n\tdefaultOptions: {\n\t\t// allowDecimals: null,\n\t\t// alternateGridColor: null,\n\t\t// categories: [],\n\t\tdateTimeLabelFormats: {\n\t\t\tmillisecond: '%H:%M:%S.%L',\n\t\t\tsecond: '%H:%M:%S',\n\t\t\tminute: '%H:%M',\n\t\t\thour: '%H:%M',\n\t\t\tday: '%e. %b',\n\t\t\tweek: '%e. %b',\n\t\t\tmonth: '%b \\'%y',\n\t\t\tyear: '%Y'\n\t\t},\n\t\tendOnTick: false,\n\t\tgridLineColor: '#C0C0C0',\n\t\t// gridLineDashStyle: 'solid',\n\t\t// gridLineWidth: 0,\n\t\t// reversed: false,\n\t\n\t\tlabels: defaultLabelOptions,\n\t\t\t// { step: null },\n\t\tlineColor: '#C0D0E0',\n\t\tlineWidth: 1,\n\t\t//linkedTo: null,\n\t\t//max: undefined,\n\t\t//min: undefined,\n\t\tminPadding: 0.01,\n\t\tmaxPadding: 0.01,\n\t\t//minRange: null,\n\t\tminorGridLineColor: '#E0E0E0',\n\t\t// minorGridLineDashStyle: null,\n\t\tminorGridLineWidth: 1,\n\t\tminorTickColor: '#A0A0A0',\n\t\t//minorTickInterval: null,\n\t\tminorTickLength: 2,\n\t\tminorTickPosition: 'outside', // inside or outside\n\t\t//minorTickWidth: 0,\n\t\t//opposite: false,\n\t\t//offset: 0,\n\t\t//plotBands: [{\n\t\t//\tevents: {},\n\t\t//\tzIndex: 1,\n\t\t//\tlabels: { align, x, verticalAlign, y, style, rotation, textAlign }\n\t\t//}],\n\t\t//plotLines: [{\n\t\t//\tevents: {}\n\t\t//  dashStyle: {}\n\t\t//\tzIndex:\n\t\t//\tlabels: { align, x, verticalAlign, y, style, rotation, textAlign }\n\t\t//}],\n\t\t//reversed: false,\n\t\t// showFirstLabel: true,\n\t\t// showLastLabel: true,\n\t\tstartOfWeek: 1,\n\t\tstartOnTick: false,\n\t\ttickColor: '#C0D0E0',\n\t\t//tickInterval: null,\n\t\ttickLength: 5,\n\t\ttickmarkPlacement: 'between', // on or between\n\t\ttickPixelInterval: 100,\n\t\ttickPosition: 'outside',\n\t\ttickWidth: 1,\n\t\ttitle: {\n\t\t\t//text: null,\n\t\t\talign: 'middle', // low, middle or high\n\t\t\t//margin: 0 for horizontal, 10 for vertical axes,\n\t\t\t//rotation: 0,\n\t\t\t//side: 'outside',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#4d759e',\n\t\t\t\t//font: defaultFont.replace('normal', 'bold')\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t\t//x: 0,\n\t\t\t//y: 0\n\t\t},\n\t\ttype: 'linear' // linear, logarithmic or datetime\n\t},\n\t\n\t/**\n\t * This options set extends the defaultOptions for Y axes\n\t */\n\tdefaultYAxisOptions: {\n\t\tendOnTick: true,\n\t\tgridLineWidth: 1,\n\t\ttickPixelInterval: 72,\n\t\tshowLastLabel: true,\n\t\tlabels: {\n\t\t\tx: -8,\n\t\t\ty: 3\n\t\t},\n\t\tlineWidth: 0,\n\t\tmaxPadding: 0.05,\n\t\tminPadding: 0.05,\n\t\tstartOnTick: true,\n\t\ttickWidth: 0,\n\t\ttitle: {\n\t\t\trotation: 270,\n\t\t\ttext: 'Values'\n\t\t},\n\t\tstackLabels: {\n\t\t\tenabled: false,\n\t\t\t//align: dynamic,\n\t\t\t//y: dynamic,\n\t\t\t//x: dynamic,\n\t\t\t//verticalAlign: dynamic,\n\t\t\t//textAlign: dynamic,\n\t\t\t//rotation: 0,\n\t\t\tformatter: function () {\n\t\t\t\treturn numberFormat(this.total, -1);\n\t\t\t},\n\t\t\tstyle: defaultLabelOptions.style\n\t\t}\n\t},\n\t\n\t/**\n\t * These options extend the defaultOptions for left axes\n\t */\n\tdefaultLeftAxisOptions: {\n\t\tlabels: {\n\t\t\tx: -8,\n\t\t\ty: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 270\n\t\t}\n\t},\n\t\n\t/**\n\t * These options extend the defaultOptions for right axes\n\t */\n\tdefaultRightAxisOptions: {\n\t\tlabels: {\n\t\t\tx: 8,\n\t\t\ty: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 90\n\t\t}\n\t},\n\t\n\t/**\n\t * These options extend the defaultOptions for bottom axes\n\t */\n\tdefaultBottomAxisOptions: {\n\t\tlabels: {\n\t\t\tx: 0,\n\t\t\ty: 14\n\t\t\t// overflow: undefined,\n\t\t\t// staggerLines: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 0\n\t\t}\n\t},\n\t/**\n\t * These options extend the defaultOptions for left axes\n\t */\n\tdefaultTopAxisOptions: {\n\t\tlabels: {\n\t\t\tx: 0,\n\t\t\ty: -5\n\t\t\t// overflow: undefined\n\t\t\t// staggerLines: null\n\t\t},\n\t\ttitle: {\n\t\t\trotation: 0\n\t\t}\n\t},\n\t\n\t/**\n\t * Initialize the axis\n\t */\n\tinit: function (chart, userOptions) {\n\t\t\t\n\t\t\n\t\tvar isXAxis = userOptions.isX,\n\t\t\taxis = this;\n\t\n\t\t// Flag, is the axis horizontal\n\t\taxis.horiz = chart.inverted ? !isXAxis : isXAxis;\n\t\t\n\t\t// Flag, isXAxis\n\t\taxis.isXAxis = isXAxis;\n\t\taxis.xOrY = isXAxis ? 'x' : 'y';\n\t\n\t\n\t\taxis.opposite = userOptions.opposite; // needed in setOptions\n\t\taxis.side = axis.horiz ?\n\t\t\t\t(axis.opposite ? 0 : 2) : // top : bottom\n\t\t\t\t(axis.opposite ? 1 : 3);  // right : left\n\t\n\t\taxis.setOptions(userOptions);\n\t\t\n\t\n\t\tvar options = this.options,\n\t\t\ttype = options.type,\n\t\t\tisDatetimeAxis = type === 'datetime';\n\t\n\t\taxis.labelFormatter = options.labels.formatter || axis.defaultLabelFormatter; // can be overwritten by dynamic format\n\t\n\t\n\t\t// Flag, stagger lines or not\n\t\taxis.userOptions = userOptions;\n\t\n\t\t//axis.axisTitleMargin = UNDEFINED,// = options.title.margin,\n\t\taxis.minPixelPadding = 0;\n\t\t//axis.ignoreMinPadding = UNDEFINED; // can be set to true by a column or bar series\n\t\t//axis.ignoreMaxPadding = UNDEFINED;\n\t\n\t\taxis.chart = chart;\n\t\taxis.reversed = options.reversed;\n\t\taxis.zoomEnabled = options.zoomEnabled !== false;\n\t\n\t\t// Initial categories\n\t\taxis.categories = options.categories || type === 'category';\n\t\n\t\t// Elements\n\t\t//axis.axisGroup = UNDEFINED;\n\t\t//axis.gridGroup = UNDEFINED;\n\t\t//axis.axisTitle = UNDEFINED;\n\t\t//axis.axisLine = UNDEFINED;\n\t\n\t\t// Shorthand types\n\t\taxis.isLog = type === 'logarithmic';\n\t\taxis.isDatetimeAxis = isDatetimeAxis;\n\t\n\t\t// Flag, if axis is linked to another axis\n\t\taxis.isLinked = defined(options.linkedTo);\n\t\t// Linked axis.\n\t\t//axis.linkedParent = UNDEFINED;\t\n\t\t\n\t\t// Tick positions\n\t\t//axis.tickPositions = UNDEFINED; // array containing predefined positions\n\t\t// Tick intervals\n\t\t//axis.tickInterval = UNDEFINED;\n\t\t//axis.minorTickInterval = UNDEFINED;\n\t\t\n\t\taxis.tickmarkOffset = (axis.categories && options.tickmarkPlacement === 'between') ? 0.5 : 0;\n\t\n\t\t// Major ticks\n\t\taxis.ticks = {};\n\t\t// Minor ticks\n\t\taxis.minorTicks = {};\n\t\t//axis.tickAmount = UNDEFINED;\n\t\n\t\t// List of plotLines/Bands\n\t\taxis.plotLinesAndBands = [];\n\t\n\t\t// Alternate bands\n\t\taxis.alternateBands = {};\n\t\n\t\t// Axis metrics\n\t\t//axis.left = UNDEFINED;\n\t\t//axis.top = UNDEFINED;\n\t\t//axis.width = UNDEFINED;\n\t\t//axis.height = UNDEFINED;\n\t\t//axis.bottom = UNDEFINED;\n\t\t//axis.right = UNDEFINED;\n\t\t//axis.transA = UNDEFINED;\n\t\t//axis.transB = UNDEFINED;\n\t\t//axis.oldTransA = UNDEFINED;\n\t\taxis.len = 0;\n\t\t//axis.oldMin = UNDEFINED;\n\t\t//axis.oldMax = UNDEFINED;\n\t\t//axis.oldUserMin = UNDEFINED;\n\t\t//axis.oldUserMax = UNDEFINED;\n\t\t//axis.oldAxisLength = UNDEFINED;\n\t\taxis.minRange = axis.userMinRange = options.minRange || options.maxZoom;\n\t\taxis.range = options.range;\n\t\taxis.offset = options.offset || 0;\n\t\n\t\n\t\t// Dictionary for stacks\n\t\taxis.stacks = {};\n\t\taxis.oldStacks = {};\n\n\t\t// Dictionary for stacks max values\n\t\taxis.stackExtremes = {};\n\n\t\t// Min and max in the data\n\t\t//axis.dataMin = UNDEFINED,\n\t\t//axis.dataMax = UNDEFINED,\n\t\n\t\t// The axis range\n\t\taxis.max = null;\n\t\taxis.min = null;\n\t\n\t\t// User set min and max\n\t\t//axis.userMin = UNDEFINED,\n\t\t//axis.userMax = UNDEFINED,\n\n\t\t// Run Axis\n\t\t\n\t\tvar eventType,\n\t\t\tevents = axis.options.events;\n\n\t\t// Register\n\t\tif (inArray(axis, chart.axes) === -1) { // don't add it again on Axis.update()\n\t\t\tchart.axes.push(axis);\n\t\t\tchart[isXAxis ? 'xAxis' : 'yAxis'].push(axis);\n\t\t}\n\n\t\taxis.series = axis.series || []; // populated by Series\n\n\t\t// inverted charts have reversed xAxes as default\n\t\tif (chart.inverted && isXAxis && axis.reversed === UNDEFINED) {\n\t\t\taxis.reversed = true;\n\t\t}\n\n\t\taxis.removePlotBand = axis.removePlotBandOrLine;\n\t\taxis.removePlotLine = axis.removePlotBandOrLine;\n\n\n\t\t// register event listeners\n\t\tfor (eventType in events) {\n\t\t\taddEvent(axis, eventType, events[eventType]);\n\t\t}\n\n\t\t// extend logarithmic axis\n\t\tif (axis.isLog) {\n\t\t\taxis.val2lin = log2lin;\n\t\t\taxis.lin2val = lin2log;\n\t\t}\n\t},\n\t\n\t/**\n\t * Merge and set options\n\t */\n\tsetOptions: function (userOptions) {\n\t\tthis.options = merge(\n\t\t\tthis.defaultOptions,\n\t\t\tthis.isXAxis ? {} : this.defaultYAxisOptions,\n\t\t\t[this.defaultTopAxisOptions, this.defaultRightAxisOptions,\n\t\t\t\tthis.defaultBottomAxisOptions, this.defaultLeftAxisOptions][this.side],\n\t\t\tmerge(\n\t\t\t\tdefaultOptions[this.isXAxis ? 'xAxis' : 'yAxis'], // if set in setOptions (#1053)\n\t\t\t\tuserOptions\n\t\t\t)\n\t\t);\n\t},\n\n\t/**\n\t * Update the axis with a new options structure\n\t */\n\tupdate: function (newOptions, redraw) {\n\t\tvar chart = this.chart;\n\n\t\tnewOptions = chart.options[this.xOrY + 'Axis'][this.options.index] = merge(this.userOptions, newOptions);\n\n\t\tthis.destroy(true);\n\t\tthis._addedPlotLB = this.userMin = this.userMax = UNDEFINED; // #1611, #2306\n\n\t\tthis.init(chart, extend(newOptions, { events: UNDEFINED }));\n\n\t\tchart.isDirtyBox = true;\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw();\n\t\t}\n\t},\t\n\t\n\t/**\n     * Remove the axis from the chart\n     */\n\tremove: function (redraw) {\n\t\tvar chart = this.chart,\n\t\t\tkey = this.xOrY + 'Axis'; // xAxis or yAxis\n\n\t\t// Remove associated series\n\t\teach(this.series, function (series) {\n\t\t\tseries.remove(false);\n\t\t});\n\n\t\t// Remove the axis\n\t\terase(chart.axes, this);\n\t\terase(chart[key], this);\n\t\tchart.options[key].splice(this.options.index, 1);\n\t\teach(chart[key], function (axis, i) { // Re-index, #1706\n\t\t\taxis.options.index = i;\n\t\t});\n\t\tthis.destroy();\n\t\tchart.isDirtyBox = true;\n\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw();\n\t\t}\n\t},\n\t\n\t/** \n\t * The default label formatter. The context is a special config object for the label.\n\t */\n\tdefaultLabelFormatter: function () {\n\t\tvar axis = this.axis,\n\t\t\tvalue = this.value,\n\t\t\tcategories = axis.categories, \n\t\t\tdateTimeLabelFormat = this.dateTimeLabelFormat,\n\t\t\tnumericSymbols = defaultOptions.lang.numericSymbols,\n\t\t\ti = numericSymbols && numericSymbols.length,\n\t\t\tmulti,\n\t\t\tret,\n\t\t\tformatOption = axis.options.labels.format,\n\t\t\t\n\t\t\t// make sure the same symbol is added for all labels on a linear axis\n\t\t\tnumericSymbolDetector = axis.isLog ? value : axis.tickInterval;\n\n\t\tif (formatOption) {\n\t\t\tret = format(formatOption, this);\n\t\t\n\t\t} else if (categories) {\n\t\t\tret = value;\n\t\t\n\t\t} else if (dateTimeLabelFormat) { // datetime axis\n\t\t\tret = dateFormat(dateTimeLabelFormat, value);\n\t\t\n\t\t} else if (i && numericSymbolDetector >= 1000) {\n\t\t\t// Decide whether we should add a numeric symbol like k (thousands) or M (millions).\n\t\t\t// If we are to enable this in tooltip or other places as well, we can move this\n\t\t\t// logic to the numberFormatter and enable it by a parameter.\n\t\t\twhile (i-- && ret === UNDEFINED) {\n\t\t\t\tmulti = Math.pow(1000, i + 1);\n\t\t\t\tif (numericSymbolDetector >= multi && numericSymbols[i] !== null) {\n\t\t\t\t\tret = numberFormat(value / multi, -1) + numericSymbols[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (ret === UNDEFINED) {\n\t\t\tif (value >= 1000) { // add thousands separators\n\t\t\t\tret = numberFormat(value, 0);\n\n\t\t\t} else { // small numbers\n\t\t\t\tret = numberFormat(value, -1);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Get the minimum and maximum for the series of each axis\n\t */\n\tgetSeriesExtremes: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart;\n\n\t\taxis.hasVisibleSeries = false;\n\n\t\t// reset dataMin and dataMax in case we're redrawing\n\t\taxis.dataMin = axis.dataMax = null;\n\n\t\t// reset cached stacking extremes\n\t\taxis.stackExtremes = {};\n\n\t\taxis.buildStacks();\n\n\t\t// loop through this axis' series\n\t\teach(axis.series, function (series) {\n\n\t\t\tif (series.visible || !chart.options.chart.ignoreHiddenSeries) {\n\n\t\t\t\tvar seriesOptions = series.options,\n\t\t\t\t\txData,\n\t\t\t\t\tthreshold = seriesOptions.threshold,\n\t\t\t\t\tseriesDataMin,\n\t\t\t\t\tseriesDataMax;\n\n\t\t\t\taxis.hasVisibleSeries = true;\n\n\t\t\t\t// Validate threshold in logarithmic axes\n\t\t\t\tif (axis.isLog && threshold <= 0) {\n\t\t\t\t\tthreshold = null;\n\t\t\t\t}\n\n\t\t\t\t// Get dataMin and dataMax for X axes\n\t\t\t\tif (axis.isXAxis) {\n\t\t\t\t\txData = series.xData;\n\t\t\t\t\tif (xData.length) {\n\t\t\t\t\t\taxis.dataMin = mathMin(pick(axis.dataMin, xData[0]), arrayMin(xData));\n\t\t\t\t\t\taxis.dataMax = mathMax(pick(axis.dataMax, xData[0]), arrayMax(xData));\n\t\t\t\t\t}\n\n\t\t\t\t// Get dataMin and dataMax for Y axes, as well as handle stacking and processed data\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get this particular series extremes\n\t\t\t\t\tseries.getExtremes();\n\t\t\t\t\tseriesDataMax = series.dataMax;\n\t\t\t\t\tseriesDataMin = series.dataMin;\n\n\t\t\t\t\t// Get the dataMin and dataMax so far. If percentage is used, the min and max are\n\t\t\t\t\t// always 0 and 100. If seriesDataMin and seriesDataMax is null, then series\n\t\t\t\t\t// doesn't have active y data, we continue with nulls\n\t\t\t\t\tif (defined(seriesDataMin) && defined(seriesDataMax)) {\n\t\t\t\t\t\taxis.dataMin = mathMin(pick(axis.dataMin, seriesDataMin), seriesDataMin);\n\t\t\t\t\t\taxis.dataMax = mathMax(pick(axis.dataMax, seriesDataMax), seriesDataMax);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Adjust to threshold\n\t\t\t\t\tif (defined(threshold)) {\n\t\t\t\t\t\tif (axis.dataMin >= threshold) {\n\t\t\t\t\t\t\taxis.dataMin = threshold;\n\t\t\t\t\t\t\taxis.ignoreMinPadding = true;\n\t\t\t\t\t\t} else if (axis.dataMax < threshold) {\n\t\t\t\t\t\t\taxis.dataMax = threshold;\n\t\t\t\t\t\t\taxis.ignoreMaxPadding = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Translate from axis value to pixel position on the chart, or back\n\t *\n\t */\n\ttranslate: function (val, backwards, cvsCoord, old, handleLog, pointPlacement) {\n\t\tvar axis = this,\n\t\t\taxisLength = axis.len,\n\t\t\tsign = 1,\n\t\t\tcvsOffset = 0,\n\t\t\tlocalA = old ? axis.oldTransA : axis.transA,\n\t\t\tlocalMin = old ? axis.oldMin : axis.min,\n\t\t\treturnValue,\n\t\t\tminPixelPadding = axis.minPixelPadding,\n\t\t\tpostTranslate = (axis.options.ordinal || (axis.isLog && handleLog)) && axis.lin2val;\n\n\t\tif (!localA) {\n\t\t\tlocalA = axis.transA;\n\t\t}\n\n\t\t// In vertical axes, the canvas coordinates start from 0 at the top like in \n\t\t// SVG. \n\t\tif (cvsCoord) {\n\t\t\tsign *= -1; // canvas coordinates inverts the value\n\t\t\tcvsOffset = axisLength;\n\t\t}\n\n\t\t// Handle reversed axis\n\t\tif (axis.reversed) { \n\t\t\tsign *= -1;\n\t\t\tcvsOffset -= sign * axisLength;\n\t\t}\n\n\t\t// From pixels to value\n\t\tif (backwards) { // reverse translation\n\t\t\t\n\t\t\tval = val * sign + cvsOffset;\n\t\t\tval -= minPixelPadding;\n\t\t\treturnValue = val / localA + localMin; // from chart pixel to value\n\t\t\tif (postTranslate) { // log and ordinal axes\n\t\t\t\treturnValue = axis.lin2val(returnValue);\n\t\t\t}\n\n\t\t// From value to pixels\n\t\t} else {\n\t\t\tif (postTranslate) { // log and ordinal axes\n\t\t\t\tval = axis.val2lin(val);\n\t\t\t}\n\t\t\tif (pointPlacement === 'between') {\n\t\t\t\tpointPlacement = 0.5;\n\t\t\t}\n\t\t\treturnValue = sign * (val - localMin) * localA + cvsOffset + (sign * minPixelPadding) +\n\t\t\t\t(isNumber(pointPlacement) ? localA * pointPlacement * axis.pointRange : 0);\n\t\t}\n\n\t\treturn returnValue;\n\t},\n\n\t/**\n\t * Utility method to translate an axis value to pixel position. \n\t * @param {Number} value A value in terms of axis units\n\t * @param {Boolean} paneCoordinates Whether to return the pixel coordinate relative to the chart\n\t *        or just the axis/pane itself.\n\t */\n\ttoPixels: function (value, paneCoordinates) {\n\t\treturn this.translate(value, false, !this.horiz, null, true) + (paneCoordinates ? 0 : this.pos);\n\t},\n\n\t/*\n\t * Utility method to translate a pixel position in to an axis value\n\t * @param {Number} pixel The pixel value coordinate\n\t * @param {Boolean} paneCoordiantes Whether the input pixel is relative to the chart or just the\n\t *        axis/pane itself.\n\t */\n\ttoValue: function (pixel, paneCoordinates) {\n\t\treturn this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, null, true);\n\t},\n\n\t/**\n\t * Create the path for a plot line that goes from the given value on\n\t * this axis, across the plot to the opposite side\n\t * @param {Number} value\n\t * @param {Number} lineWidth Used for calculation crisp line\n\t * @param {Number] old Use old coordinates (for resizing and rescaling)\n\t */\n\tgetPlotLinePath: function (value, lineWidth, old, force) {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\taxisLeft = axis.left,\n\t\t\taxisTop = axis.top,\n\t\t\tx1,\n\t\t\ty1,\n\t\t\tx2,\n\t\t\ty2,\n\t\t\ttranslatedValue = axis.translate(value, null, null, old),\n\t\t\tcHeight = (old && chart.oldChartHeight) || chart.chartHeight,\n\t\t\tcWidth = (old && chart.oldChartWidth) || chart.chartWidth,\n\t\t\tskip,\n\t\t\ttransB = axis.transB;\n\n\t\tx1 = x2 = mathRound(translatedValue + transB);\n\t\ty1 = y2 = mathRound(cHeight - translatedValue - transB);\n\n\t\tif (isNaN(translatedValue)) { // no min or max\n\t\t\tskip = true;\n\n\t\t} else if (axis.horiz) {\n\t\t\ty1 = axisTop;\n\t\t\ty2 = cHeight - axis.bottom;\n\t\t\tif (x1 < axisLeft || x1 > axisLeft + axis.width) {\n\t\t\t\tskip = true;\n\t\t\t}\n\t\t} else {\n\t\t\tx1 = axisLeft;\n\t\t\tx2 = cWidth - axis.right;\n\n\t\t\tif (y1 < axisTop || y1 > axisTop + axis.height) {\n\t\t\t\tskip = true;\n\t\t\t}\n\t\t}\n\t\treturn skip && !force ?\n\t\t\tnull :\n\t\t\tchart.renderer.crispLine([M, x1, y1, L, x2, y2], lineWidth || 0);\n\t},\n\t\n\t/**\n\t * Create the path for a plot band\n\t */\n\tgetPlotBandPath: function (from, to) {\n\n\t\tvar toPath = this.getPlotLinePath(to),\n\t\t\tpath = this.getPlotLinePath(from);\n\t\t\t\n\t\tif (path && toPath) {\n\t\t\tpath.push(\n\t\t\t\ttoPath[4],\n\t\t\t\ttoPath[5],\n\t\t\t\ttoPath[1],\n\t\t\t\ttoPath[2]\n\t\t\t);\n\t\t} else { // outside the axis area\n\t\t\tpath = null;\n\t\t}\n\t\t\n\t\treturn path;\n\t},\n\t\n\t/**\n\t * Set the tick positions of a linear axis to round values like whole tens or every five.\n\t */\n\tgetLinearTickPositions: function (tickInterval, min, max) {\n\t\tvar pos,\n\t\t\tlastPos,\n\t\t\troundedMin = correctFloat(mathFloor(min / tickInterval) * tickInterval),\n\t\t\troundedMax = correctFloat(mathCeil(max / tickInterval) * tickInterval),\n\t\t\ttickPositions = [];\n\n\t\t// Populate the intermediate values\n\t\tpos = roundedMin;\n\t\twhile (pos <= roundedMax) {\n\n\t\t\t// Place the tick on the rounded value\n\t\t\ttickPositions.push(pos);\n\n\t\t\t// Always add the raw tickInterval, not the corrected one.\n\t\t\tpos = correctFloat(pos + tickInterval);\n\n\t\t\t// If the interval is not big enough in the current min - max range to actually increase\n\t\t\t// the loop variable, we need to break out to prevent endless loop. Issue #619\n\t\t\tif (pos === lastPos) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Record the last value\n\t\t\tlastPos = pos;\n\t\t}\n\t\treturn tickPositions;\n\t},\n\t\n\t/**\n\t * Set the tick positions of a logarithmic axis\n\t */\n\tgetLogTickPositions: function (interval, min, max, minor) {\n\t\tvar axis = this,\n\t\t\toptions = axis.options,\n\t\t\taxisLength = axis.len,\n\t\t\t// Since we use this method for both major and minor ticks,\n\t\t\t// use a local variable and return the result\n\t\t\tpositions = []; \n\t\t\n\t\t// Reset\n\t\tif (!minor) {\n\t\t\taxis._minorAutoInterval = null;\n\t\t}\n\t\t\n\t\t// First case: All ticks fall on whole logarithms: 1, 10, 100 etc.\n\t\tif (interval >= 0.5) {\n\t\t\tinterval = mathRound(interval);\n\t\t\tpositions = axis.getLinearTickPositions(interval, min, max);\n\t\t\t\n\t\t// Second case: We need intermediary ticks. For example \n\t\t// 1, 2, 4, 6, 8, 10, 20, 40 etc. \n\t\t} else if (interval >= 0.08) {\n\t\t\tvar roundedMin = mathFloor(min),\n\t\t\t\tintermediate,\n\t\t\t\ti,\n\t\t\t\tj,\n\t\t\t\tlen,\n\t\t\t\tpos,\n\t\t\t\tlastPos,\n\t\t\t\tbreak2;\n\t\t\t\t\n\t\t\tif (interval > 0.3) {\n\t\t\t\tintermediate = [1, 2, 4];\n\t\t\t} else if (interval > 0.15) { // 0.2 equals five minor ticks per 1, 10, 100 etc\n\t\t\t\tintermediate = [1, 2, 4, 6, 8];\n\t\t\t} else { // 0.1 equals ten minor ticks per 1, 10, 100 etc\n\t\t\t\tintermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n\t\t\t}\n\t\t\t\n\t\t\tfor (i = roundedMin; i < max + 1 && !break2; i++) {\n\t\t\t\tlen = intermediate.length;\n\t\t\t\tfor (j = 0; j < len && !break2; j++) {\n\t\t\t\t\tpos = log2lin(lin2log(i) * intermediate[j]);\n\t\t\t\t\t\n\t\t\t\t\tif (pos > min && (!minor || lastPos <= max)) { // #1670\n\t\t\t\t\t\tpositions.push(lastPos);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (lastPos > max) {\n\t\t\t\t\t\tbreak2 = true;\n\t\t\t\t\t}\n\t\t\t\t\tlastPos = pos;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t// Third case: We are so deep in between whole logarithmic values that\n\t\t// we might as well handle the tick positions like a linear axis. For\n\t\t// example 1.01, 1.02, 1.03, 1.04.\n\t\t} else {\n\t\t\tvar realMin = lin2log(min),\n\t\t\t\trealMax = lin2log(max),\n\t\t\t\ttickIntervalOption = options[minor ? 'minorTickInterval' : 'tickInterval'],\n\t\t\t\tfilteredTickIntervalOption = tickIntervalOption === 'auto' ? null : tickIntervalOption,\n\t\t\t\ttickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1),\n\t\t\t\ttotalPixelLength = minor ? axisLength / axis.tickPositions.length : axisLength;\n\t\t\t\n\t\t\tinterval = pick(\n\t\t\t\tfilteredTickIntervalOption,\n\t\t\t\taxis._minorAutoInterval,\n\t\t\t\t(realMax - realMin) * tickPixelIntervalOption / (totalPixelLength || 1)\n\t\t\t);\n\t\t\t\n\t\t\tinterval = normalizeTickInterval(\n\t\t\t\tinterval, \n\t\t\t\tnull, \n\t\t\t\tgetMagnitude(interval)\n\t\t\t);\n\t\t\t\n\t\t\tpositions = map(axis.getLinearTickPositions(\n\t\t\t\tinterval, \n\t\t\t\trealMin,\n\t\t\t\trealMax\t\n\t\t\t), log2lin);\n\t\t\t\n\t\t\tif (!minor) {\n\t\t\t\taxis._minorAutoInterval = interval / 5;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Set the axis-level tickInterval variable \n\t\tif (!minor) {\n\t\t\taxis.tickInterval = interval;\n\t\t}\n\t\treturn positions;\n\t},\n\n\t/**\n\t * Return the minor tick positions. For logarithmic axes, reuse the same logic\n\t * as for major ticks.\n\t */\n\tgetMinorTickPositions: function () {\n\t\tvar axis = this,\n\t\t\toptions = axis.options,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\tminorTickInterval = axis.minorTickInterval,\n\t\t\tminorTickPositions = [],\n\t\t\tpos,\n\t\t\ti,\n\t\t\tlen;\n\t\t\n\t\tif (axis.isLog) {\n\t\t\tlen = tickPositions.length;\n\t\t\tfor (i = 1; i < len; i++) {\n\t\t\t\tminorTickPositions = minorTickPositions.concat(\n\t\t\t\t\taxis.getLogTickPositions(minorTickInterval, tickPositions[i - 1], tickPositions[i], true)\n\t\t\t\t);\t\n\t\t\t}\n\t\t} else if (axis.isDatetimeAxis && options.minorTickInterval === 'auto') { // #1314\n\t\t\tminorTickPositions = minorTickPositions.concat(\n\t\t\t\tgetTimeTicks(\n\t\t\t\t\tnormalizeTimeTickInterval(minorTickInterval),\n\t\t\t\t\taxis.min,\n\t\t\t\t\taxis.max,\n\t\t\t\t\toptions.startOfWeek\n\t\t\t\t)\n\t\t\t);\n\t\t\tif (minorTickPositions[0] < axis.min) {\n\t\t\t\tminorTickPositions.shift();\n\t\t\t}\n\t\t} else {\t\t\t\n\t\t\tfor (pos = axis.min + (tickPositions[0] - axis.min) % minorTickInterval; pos <= axis.max; pos += minorTickInterval) {\n\t\t\t\tminorTickPositions.push(pos);\n\t\t\t}\n\t\t}\n\t\treturn minorTickPositions;\n\t},\n\n\t/**\n\t * Adjust the min and max for the minimum range. Keep in mind that the series data is \n\t * not yet processed, so we don't have information on data cropping and grouping, or \n\t * updated axis.pointRange or series.pointRange. The data can't be processed until\n\t * we have finally established min and max.\n\t */\n\tadjustForMinRange: function () {\n\t\tvar axis = this,\n\t\t\toptions = axis.options,\n\t\t\tmin = axis.min,\n\t\t\tmax = axis.max,\n\t\t\tzoomOffset,\n\t\t\tspaceAvailable = axis.dataMax - axis.dataMin >= axis.minRange,\n\t\t\tclosestDataRange,\n\t\t\ti,\n\t\t\tdistance,\n\t\t\txData,\n\t\t\tloopLength,\n\t\t\tminArgs,\n\t\t\tmaxArgs;\n\n\t\t// Set the automatic minimum range based on the closest point distance\n\t\tif (axis.isXAxis && axis.minRange === UNDEFINED && !axis.isLog) {\n\n\t\t\tif (defined(options.min) || defined(options.max)) {\n\t\t\t\taxis.minRange = null; // don't do this again\n\n\t\t\t} else {\n\n\t\t\t\t// Find the closest distance between raw data points, as opposed to\n\t\t\t\t// closestPointRange that applies to processed points (cropped and grouped)\n\t\t\t\teach(axis.series, function (series) {\n\t\t\t\t\txData = series.xData;\n\t\t\t\t\tloopLength = series.xIncrement ? 1 : xData.length - 1;\n\t\t\t\t\tfor (i = loopLength; i > 0; i--) {\n\t\t\t\t\t\tdistance = xData[i] - xData[i - 1];\n\t\t\t\t\t\tif (closestDataRange === UNDEFINED || distance < closestDataRange) {\n\t\t\t\t\t\t\tclosestDataRange = distance;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\taxis.minRange = mathMin(closestDataRange * 5, axis.dataMax - axis.dataMin);\n\t\t\t}\n\t\t}\n\n\t\t// if minRange is exceeded, adjust\n\t\tif (max - min < axis.minRange) {\n\t\t\tvar minRange = axis.minRange;\n\t\t\tzoomOffset = (minRange - max + min) / 2;\n\n\t\t\t// if min and max options have been set, don't go beyond it\n\t\t\tminArgs = [min - zoomOffset, pick(options.min, min - zoomOffset)];\n\t\t\tif (spaceAvailable) { // if space is available, stay within the data range\n\t\t\t\tminArgs[2] = axis.dataMin;\n\t\t\t}\n\t\t\tmin = arrayMax(minArgs);\n\n\t\t\tmaxArgs = [min + minRange, pick(options.max, min + minRange)];\n\t\t\tif (spaceAvailable) { // if space is availabe, stay within the data range\n\t\t\t\tmaxArgs[2] = axis.dataMax;\n\t\t\t}\n\n\t\t\tmax = arrayMin(maxArgs);\n\n\t\t\t// now if the max is adjusted, adjust the min back\n\t\t\tif (max - min < minRange) {\n\t\t\t\tminArgs[0] = max - minRange;\n\t\t\t\tminArgs[1] = pick(options.min, max - minRange);\n\t\t\t\tmin = arrayMax(minArgs);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Record modified extremes\n\t\taxis.min = min;\n\t\taxis.max = max;\n\t},\n\n\t/**\n\t * Update translation information\n\t */\n\tsetAxisTranslation: function (saveOld) {\n\t\tvar axis = this,\n\t\t\trange = axis.max - axis.min,\n\t\t\tpointRange = 0,\n\t\t\tclosestPointRange,\n\t\t\tminPointOffset = 0,\n\t\t\tpointRangePadding = 0,\n\t\t\tlinkedParent = axis.linkedParent,\n\t\t\tordinalCorrection,\n\t\t\ttransA = axis.transA;\n\n\t\t// adjust translation for padding\n\t\tif (axis.isXAxis) {\n\t\t\tif (linkedParent) {\n\t\t\t\tminPointOffset = linkedParent.minPointOffset;\n\t\t\t\tpointRangePadding = linkedParent.pointRangePadding;\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\teach(axis.series, function (series) {\n\t\t\t\t\tvar seriesPointRange = series.pointRange,\n\t\t\t\t\t\tpointPlacement = series.options.pointPlacement,\n\t\t\t\t\t\tseriesClosestPointRange = series.closestPointRange;\n\n\t\t\t\t\tif (seriesPointRange > range) { // #1446\n\t\t\t\t\t\tseriesPointRange = 0;\n\t\t\t\t\t}\n\t\t\t\t\tpointRange = mathMax(pointRange, seriesPointRange);\n\t\t\t\t\t\n\t\t\t\t\t// minPointOffset is the value padding to the left of the axis in order to make\n\t\t\t\t\t// room for points with a pointRange, typically columns. When the pointPlacement option\n\t\t\t\t\t// is 'between' or 'on', this padding does not apply.\n\t\t\t\t\tminPointOffset = mathMax(\n\t\t\t\t\t\tminPointOffset, \n\t\t\t\t\t\tisString(pointPlacement) ? 0 : seriesPointRange / 2\n\t\t\t\t\t);\n\t\t\t\t\t\n\t\t\t\t\t// Determine the total padding needed to the length of the axis to make room for the \n\t\t\t\t\t// pointRange. If the series' pointPlacement is 'on', no padding is added.\n\t\t\t\t\tpointRangePadding = mathMax(\n\t\t\t\t\t\tpointRangePadding,\n\t\t\t\t\t\tpointPlacement === 'on' ? 0 : seriesPointRange\n\t\t\t\t\t);\n\n\t\t\t\t\t// Set the closestPointRange\n\t\t\t\t\tif (!series.noSharedTooltip && defined(seriesClosestPointRange)) {\n\t\t\t\t\t\tclosestPointRange = defined(closestPointRange) ?\n\t\t\t\t\t\t\tmathMin(closestPointRange, seriesClosestPointRange) :\n\t\t\t\t\t\t\tseriesClosestPointRange;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t// Record minPointOffset and pointRangePadding\n\t\t\tordinalCorrection = axis.ordinalSlope && closestPointRange ? axis.ordinalSlope / closestPointRange : 1; // #988, #1853\n\t\t\taxis.minPointOffset = minPointOffset = minPointOffset * ordinalCorrection;\n\t\t\taxis.pointRangePadding = pointRangePadding = pointRangePadding * ordinalCorrection;\n\n\t\t\t// pointRange means the width reserved for each point, like in a column chart\n\t\t\taxis.pointRange = mathMin(pointRange, range);\n\n\t\t\t// closestPointRange means the closest distance between points. In columns\n\t\t\t// it is mostly equal to pointRange, but in lines pointRange is 0 while closestPointRange\n\t\t\t// is some other value\n\t\t\taxis.closestPointRange = closestPointRange;\n\t\t}\n\n\t\t// Secondary values\n\t\tif (saveOld) {\n\t\t\taxis.oldTransA = transA;\n\t\t}\n\t\taxis.translationSlope = axis.transA = transA = axis.len / ((range + pointRangePadding) || 1);\n\t\taxis.transB = axis.horiz ? axis.left : axis.bottom; // translation addend\n\t\taxis.minPixelPadding = transA * minPointOffset;\n\t},\n\n\t/**\n\t * Set the tick positions to round values and optionally extend the extremes\n\t * to the nearest tick\n\t */\n\tsetTickPositions: function (secondPass) {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\toptions = axis.options,\n\t\t\tisLog = axis.isLog,\n\t\t\tisDatetimeAxis = axis.isDatetimeAxis,\n\t\t\tisXAxis = axis.isXAxis,\n\t\t\tisLinked = axis.isLinked,\n\t\t\ttickPositioner = axis.options.tickPositioner,\n\t\t\tmaxPadding = options.maxPadding,\n\t\t\tminPadding = options.minPadding,\n\t\t\tlength,\n\t\t\tlinkedParentExtremes,\n\t\t\ttickIntervalOption = options.tickInterval,\n\t\t\tminTickIntervalOption = options.minTickInterval,\n\t\t\ttickPixelIntervalOption = options.tickPixelInterval,\n\t\t\ttickPositions,\n\t\t\tkeepTwoTicksOnly,\n\t\t\tcategories = axis.categories;\n\n\t\t// linked axis gets the extremes from the parent axis\n\t\tif (isLinked) {\n\t\t\taxis.linkedParent = chart[isXAxis ? 'xAxis' : 'yAxis'][options.linkedTo];\n\t\t\tlinkedParentExtremes = axis.linkedParent.getExtremes();\n\t\t\taxis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin);\n\t\t\taxis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax);\n\t\t\tif (options.type !== axis.linkedParent.options.type) {\n\t\t\t\terror(11, 1); // Can't link axes of different type\n\t\t\t}\n\t\t} else { // initial min and max from the extreme data values\n\t\t\taxis.min = pick(axis.userMin, options.min, axis.dataMin);\n\t\t\taxis.max = pick(axis.userMax, options.max, axis.dataMax);\n\t\t}\n\n\t\tif (isLog) {\n\t\t\tif (!secondPass && mathMin(axis.min, pick(axis.dataMin, axis.min)) <= 0) { // #978\n\t\t\t\terror(10, 1); // Can't plot negative values on log axis\n\t\t\t}\n\t\t\taxis.min = correctFloat(log2lin(axis.min)); // correctFloat cures #934\n\t\t\taxis.max = correctFloat(log2lin(axis.max));\n\t\t}\n\n\t\t// handle zoomed range\n\t\tif (axis.range) {\n\t\t\taxis.userMin = axis.min = mathMax(axis.min, axis.max - axis.range); // #618\n\t\t\taxis.userMax = axis.max;\n\t\t\tif (secondPass) {\n\t\t\t\taxis.range = null;  // don't use it when running setExtremes\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Hook for adjusting this.min and this.max. Used by bubble series.\n\t\tif (axis.beforePadding) {\n\t\t\taxis.beforePadding();\n\t\t}\n\n\t\t// adjust min and max for the minimum range\n\t\taxis.adjustForMinRange();\n\t\t\n\t\t// Pad the values to get clear of the chart's edges. To avoid tickInterval taking the padding\n\t\t// into account, we do this after computing tick interval (#1337).\n\t\tif (!categories && !axis.usePercentage && !isLinked && defined(axis.min) && defined(axis.max)) {\n\t\t\tlength = axis.max - axis.min;\n\t\t\tif (length) {\n\t\t\t\tif (!defined(options.min) && !defined(axis.userMin) && minPadding && (axis.dataMin < 0 || !axis.ignoreMinPadding)) {\n\t\t\t\t\taxis.min -= length * minPadding;\n\t\t\t\t}\n\t\t\t\tif (!defined(options.max) && !defined(axis.userMax)  && maxPadding && (axis.dataMax > 0 || !axis.ignoreMaxPadding)) {\n\t\t\t\t\taxis.max += length * maxPadding;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// get tickInterval\n\t\tif (axis.min === axis.max || axis.min === undefined || axis.max === undefined) {\n\t\t\taxis.tickInterval = 1;\n\t\t} else if (isLinked && !tickIntervalOption &&\n\t\t\t\ttickPixelIntervalOption === axis.linkedParent.options.tickPixelInterval) {\n\t\t\taxis.tickInterval = axis.linkedParent.tickInterval;\n\t\t} else {\n\t\t\taxis.tickInterval = pick(\n\t\t\t\ttickIntervalOption,\n\t\t\t\tcategories ? // for categoried axis, 1 is default, for linear axis use tickPix\n\t\t\t\t\t1 :\n\t\t\t\t\t// don't let it be more than the data range\n\t\t\t\t\t(axis.max - axis.min) * tickPixelIntervalOption / mathMax(axis.len, tickPixelIntervalOption)\n\t\t\t);\n\t\t\t// For squished axes, set only two ticks\n\t\t\tif (!defined(tickIntervalOption) && axis.len < tickPixelIntervalOption && !this.isRadial) {\n\t\t\t\tkeepTwoTicksOnly = true;\n\t\t\t\taxis.tickInterval /= 4; // tick extremes closer to the real values\n\t\t\t}\n\t\t}\n\n\t\t// Now we're finished detecting min and max, crop and group series data. This\n\t\t// is in turn needed in order to find tick positions in ordinal axes. \n\t\tif (isXAxis && !secondPass) {\n\t\t\teach(axis.series, function (series) {\n\t\t\t\tseries.processData(axis.min !== axis.oldMin || axis.max !== axis.oldMax);\n\t\t\t});\n\t\t}\n\n\t\t// set the translation factor used in translate function\n\t\taxis.setAxisTranslation(true);\n\n\t\t// hook for ordinal axes and radial axes\n\t\tif (axis.beforeSetTickPositions) {\n\t\t\taxis.beforeSetTickPositions();\n\t\t}\n\t\t\n\t\t// hook for extensions, used in Highstock ordinal axes\n\t\tif (axis.postProcessTickInterval) {\n\t\t\taxis.tickInterval = axis.postProcessTickInterval(axis.tickInterval);\n\t\t}\n\n\t\t// In column-like charts, don't cramp in more ticks than there are points (#1943)\n\t\tif (axis.pointRange) {\n\t\t\taxis.tickInterval = mathMax(axis.pointRange, axis.tickInterval);\n\t\t}\n\t\t\n\t\t// Before normalizing the tick interval, handle minimum tick interval. This applies only if tickInterval is not defined.\n\t\tif (!tickIntervalOption && axis.tickInterval < minTickIntervalOption) {\n\t\t\taxis.tickInterval = minTickIntervalOption;\n\t\t}\n\n\t\t// for linear axes, get magnitude and normalize the interval\n\t\tif (!isDatetimeAxis && !isLog) { // linear\n\t\t\tif (!tickIntervalOption) {\n\t\t\t\taxis.tickInterval = normalizeTickInterval(axis.tickInterval, null, getMagnitude(axis.tickInterval), options);\n\t\t\t}\n\t\t}\n\n\t\t// get minorTickInterval\n\t\taxis.minorTickInterval = options.minorTickInterval === 'auto' && axis.tickInterval ?\n\t\t\t\taxis.tickInterval / 5 : options.minorTickInterval;\n\n\t\t// find the tick positions\n\t\taxis.tickPositions = tickPositions = options.tickPositions ?\n\t\t\t[].concat(options.tickPositions) : // Work on a copy (#1565)\n\t\t\t(tickPositioner && tickPositioner.apply(axis, [axis.min, axis.max]));\n\t\tif (!tickPositions) {\n\t\t\t\n\t\t\t// Too many ticks\n\t\t\tif (!axis.ordinalPositions && (axis.max - axis.min) / axis.tickInterval > mathMax(2 * axis.len, 200)) {\n\t\t\t\terror(19, true);\n\t\t\t}\n\t\t\t\n\t\t\tif (isDatetimeAxis) {\n\t\t\t\ttickPositions = (axis.getNonLinearTimeTicks || getTimeTicks)(\n\t\t\t\t\tnormalizeTimeTickInterval(axis.tickInterval, options.units),\n\t\t\t\t\taxis.min,\n\t\t\t\t\taxis.max,\n\t\t\t\t\toptions.startOfWeek,\n\t\t\t\t\taxis.ordinalPositions,\n\t\t\t\t\taxis.closestPointRange,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t} else if (isLog) {\n\t\t\t\ttickPositions = axis.getLogTickPositions(axis.tickInterval, axis.min, axis.max);\n\t\t\t} else {\n\t\t\t\ttickPositions = axis.getLinearTickPositions(axis.tickInterval, axis.min, axis.max);\n\t\t\t}\n\t\t\tif (keepTwoTicksOnly) {\n\t\t\t\ttickPositions.splice(1, tickPositions.length - 2);\n\t\t\t}\n\n\t\t\taxis.tickPositions = tickPositions;\n\t\t}\n\n\t\tif (!isLinked) {\n\n\t\t\t// reset min/max or remove extremes based on start/end on tick\n\t\t\tvar roundedMin = tickPositions[0],\n\t\t\t\troundedMax = tickPositions[tickPositions.length - 1],\n\t\t\t\tminPointOffset = axis.minPointOffset || 0,\n\t\t\t\tsinglePad;\n\n\t\t\tif (options.startOnTick) {\n\t\t\t\taxis.min = roundedMin;\n\t\t\t} else if (axis.min - minPointOffset > roundedMin) {\n\t\t\t\ttickPositions.shift();\n\t\t\t}\n\n\t\t\tif (options.endOnTick) {\n\t\t\t\taxis.max = roundedMax;\n\t\t\t} else if (axis.max + minPointOffset < roundedMax) {\n\t\t\t\ttickPositions.pop();\n\t\t\t}\n\t\t\t\n\t\t\t// When there is only one point, or all points have the same value on this axis, then min\n\t\t\t// and max are equal and tickPositions.length is 1. In this case, add some padding\n\t\t\t// in order to center the point, but leave it with one tick. #1337.\n\t\t\tif (tickPositions.length === 1) {\n\t\t\t\tsinglePad = 0.001; // The lowest possible number to avoid extra padding on columns\n\t\t\t\taxis.min -= singlePad;\n\t\t\t\taxis.max += singlePad;\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Set the max ticks of either the x and y axis collection\n\t */\n\tsetMaxTicks: function () {\n\t\t\n\t\tvar chart = this.chart,\n\t\t\tmaxTicks = chart.maxTicks || {},\n\t\t\ttickPositions = this.tickPositions,\n\t\t\tkey = this._maxTicksKey = [this.xOrY, this.pos, this.len].join('-');\n\t\t\n\t\tif (!this.isLinked && !this.isDatetimeAxis && tickPositions && tickPositions.length > (maxTicks[key] || 0) && this.options.alignTicks !== false) {\n\t\t\tmaxTicks[key] = tickPositions.length;\n\t\t}\n\t\tchart.maxTicks = maxTicks;\n\t},\n\n\t/**\n\t * When using multiple axes, adjust the number of ticks to match the highest\n\t * number of ticks in that group\n\t */\n\tadjustTickAmount: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\tkey = axis._maxTicksKey,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\tmaxTicks = chart.maxTicks;\n\n\t\tif (maxTicks && maxTicks[key] && !axis.isDatetimeAxis && !axis.categories && !axis.isLinked && axis.options.alignTicks !== false) { // only apply to linear scale\n\t\t\tvar oldTickAmount = axis.tickAmount,\n\t\t\t\tcalculatedTickAmount = tickPositions.length,\n\t\t\t\ttickAmount;\n\n\t\t\t// set the axis-level tickAmount to use below\n\t\t\taxis.tickAmount = tickAmount = maxTicks[key];\n\n\t\t\tif (calculatedTickAmount < tickAmount) {\n\t\t\t\twhile (tickPositions.length < tickAmount) {\n\t\t\t\t\ttickPositions.push(correctFloat(\n\t\t\t\t\t\ttickPositions[tickPositions.length - 1] + axis.tickInterval\n\t\t\t\t\t));\n\t\t\t\t}\n\t\t\t\taxis.transA *= (calculatedTickAmount - 1) / (tickAmount - 1);\n\t\t\t\taxis.max = tickPositions[tickPositions.length - 1];\n\n\t\t\t}\n\t\t\tif (defined(oldTickAmount) && tickAmount !== oldTickAmount) {\n\t\t\t\taxis.isDirty = true;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set the scale based on data min and max, user set min and max or options\n\t *\n\t */\n\tsetScale: function () {\n\t\tvar axis = this,\n\t\t\tstacks = axis.stacks,\n\t\t\ttype,\n\t\t\ti,\n\t\t\tisDirtyData,\n\t\t\tisDirtyAxisLength;\n\n\t\taxis.oldMin = axis.min;\n\t\taxis.oldMax = axis.max;\n\t\taxis.oldAxisLength = axis.len;\n\n\t\t// set the new axisLength\n\t\taxis.setAxisSize();\n\t\t//axisLength = horiz ? axisWidth : axisHeight;\n\t\tisDirtyAxisLength = axis.len !== axis.oldAxisLength;\n\n\t\t// is there new data?\n\t\teach(axis.series, function (series) {\n\t\t\tif (series.isDirtyData || series.isDirty ||\n\t\t\t\t\tseries.xAxis.isDirty) { // when x axis is dirty, we need new data extremes for y as well\n\t\t\t\tisDirtyData = true;\n\t\t\t}\n\t\t});\n\n\t\t// do we really need to go through all this?\n\t\tif (isDirtyAxisLength || isDirtyData || axis.isLinked || axis.forceRedraw ||\n\t\t\taxis.userMin !== axis.oldUserMin || axis.userMax !== axis.oldUserMax) {\n\t\t\t\n\t\t\t// reset stacks\n\t\t\tif (!axis.isXAxis) {\n\t\t\t\tfor (type in stacks) {\n\t\t\t\t\tdelete stacks[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\taxis.forceRedraw = false;\n\n\t\t\t// get data extremes if needed\n\t\t\taxis.getSeriesExtremes();\n\n\t\t\t// get fixed positions based on tickInterval\n\t\t\taxis.setTickPositions();\n\n\t\t\t// record old values to decide whether a rescale is necessary later on (#540)\n\t\t\taxis.oldUserMin = axis.userMin;\n\t\t\taxis.oldUserMax = axis.userMax;\n\n\t\t\t// Mark as dirty if it is not already set to dirty and extremes have changed. #595.\n\t\t\tif (!axis.isDirty) {\n\t\t\t\taxis.isDirty = isDirtyAxisLength || axis.min !== axis.oldMin || axis.max !== axis.oldMax;\n\t\t\t}\n\t\t} else if (!axis.isXAxis) {\n\t\t\tif (axis.oldStacks) {\n\t\t\t\tstacks = axis.stacks = axis.oldStacks;\n\t\t\t}\n\n\t\t\t// reset stacks\n\t\t\tfor (type in stacks) {\n\t\t\t\tfor (i in stacks[type]) {\n\t\t\t\t\tstacks[type][i].cum = stacks[type][i].total;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Set the maximum tick amount\n\t\taxis.setMaxTicks();\n\t},\n\n\t/**\n\t * Set the extremes and optionally redraw\n\t * @param {Number} newMin\n\t * @param {Number} newMax\n\t * @param {Boolean} redraw\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t * @param {Object} eventArguments \n\t *\n\t */\n\tsetExtremes: function (newMin, newMax, redraw, animation, eventArguments) {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart;\n\n\t\tredraw = pick(redraw, true); // defaults to true\n\n\t\t// Extend the arguments with min and max\n\t\teventArguments = extend(eventArguments, {\n\t\t\tmin: newMin,\n\t\t\tmax: newMax\n\t\t});\n\n\t\t// Fire the event\n\t\tfireEvent(axis, 'setExtremes', eventArguments, function () { // the default event handler\n\n\t\t\taxis.userMin = newMin;\n\t\t\taxis.userMax = newMax;\n\t\t\taxis.eventArgs = eventArguments;\n\n\t\t\t// Mark for running afterSetExtremes\n\t\t\taxis.isDirtyExtremes = true;\n\n\t\t\t// redraw\n\t\t\tif (redraw) {\n\t\t\t\tchart.redraw(animation);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Overridable method for zooming chart. Pulled out in a separate method to allow overriding\n\t * in stock charts.\n\t */\n\tzoom: function (newMin, newMax) {\n\n\t\t// Prevent pinch zooming out of range. Check for defined is for #1946.\n\t\tif (!this.allowZoomOutside) {\n\t\t\tif (defined(this.dataMin) && newMin <= this.dataMin) {\n\t\t\t\tnewMin = UNDEFINED;\n\t\t\t}\n\t\t\tif (defined(this.dataMax) && newMax >= this.dataMax) {\n\t\t\t\tnewMax = UNDEFINED;\n\t\t\t}\n\t\t}\n\n\t\t// In full view, displaying the reset zoom button is not required\n\t\tthis.displayBtn = newMin !== UNDEFINED || newMax !== UNDEFINED;\n\t\t\n\t\t// Do it\n\t\tthis.setExtremes(\n\t\t\tnewMin,\n\t\t\tnewMax,\n\t\t\tfalse, \n\t\t\tUNDEFINED, \n\t\t\t{ trigger: 'zoom' }\n\t\t);\n\t\treturn true;\n\t},\n\t\n\t/**\n\t * Update the axis metrics\n\t */\n\tsetAxisSize: function () {\n\t\tvar chart = this.chart,\n\t\t\toptions = this.options,\n\t\t\toffsetLeft = options.offsetLeft || 0,\n\t\t\toffsetRight = options.offsetRight || 0,\n\t\t\thoriz = this.horiz,\n\t\t\twidth,\n\t\t\theight,\n\t\t\ttop,\n\t\t\tleft;\n\n\t\t// Expose basic values to use in Series object and navigator\n\t\tthis.left = left = pick(options.left, chart.plotLeft + offsetLeft);\n\t\tthis.top = top = pick(options.top, chart.plotTop);\n\t\tthis.width = width = pick(options.width, chart.plotWidth - offsetLeft + offsetRight);\n\t\tthis.height = height = pick(options.height, chart.plotHeight);\n\t\tthis.bottom = chart.chartHeight - height - top;\n\t\tthis.right = chart.chartWidth - width - left;\n\n\t\t// Direction agnostic properties\n\t\tthis.len = mathMax(horiz ? width : height, 0); // mathMax fixes #905\n\t\tthis.pos = horiz ? left : top; // distance from SVG origin\n\t},\n\n\t/**\n\t * Get the actual axis extremes\n\t */\n\tgetExtremes: function () {\n\t\tvar axis = this,\n\t\t\tisLog = axis.isLog;\n\n\t\treturn {\n\t\t\tmin: isLog ? correctFloat(lin2log(axis.min)) : axis.min,\n\t\t\tmax: isLog ? correctFloat(lin2log(axis.max)) : axis.max,\n\t\t\tdataMin: axis.dataMin,\n\t\t\tdataMax: axis.dataMax,\n\t\t\tuserMin: axis.userMin,\n\t\t\tuserMax: axis.userMax\n\t\t};\n\t},\n\n\t/**\n\t * Get the zero plane either based on zero or on the min or max value.\n\t * Used in bar and area plots\n\t */\n\tgetThreshold: function (threshold) {\n\t\tvar axis = this,\n\t\t\tisLog = axis.isLog;\n\n\t\tvar realMin = isLog ? lin2log(axis.min) : axis.min,\n\t\t\trealMax = isLog ? lin2log(axis.max) : axis.max;\n\t\t\n\t\tif (realMin > threshold || threshold === null) {\n\t\t\tthreshold = realMin;\n\t\t} else if (realMax < threshold) {\n\t\t\tthreshold = realMax;\n\t\t}\n\n\t\treturn axis.translate(threshold, 0, 1, 0, 1);\n\t},\n\n\taddPlotBand: function (options) {\n\t\tthis.addPlotBandOrLine(options, 'plotBands');\n\t},\n\t\n\taddPlotLine: function (options) {\n\t\tthis.addPlotBandOrLine(options, 'plotLines');\n\t},\n\n\t/**\n\t * Add a plot band or plot line after render time\n\t *\n\t * @param options {Object} The plotBand or plotLine configuration object\n\t */\n\taddPlotBandOrLine: function (options, coll) {\n\t\tvar obj = new PlotLineOrBand(this, options).render(),\n\t\t\tuserOptions = this.userOptions;\n\n\t\tif (obj) { // #2189\n\t\t\t// Add it to the user options for exporting and Axis.update\n\t\t\tif (coll) {\n\t\t\t\tuserOptions[coll] = userOptions[coll] || [];\n\t\t\t\tuserOptions[coll].push(options); \n\t\t\t}\n\t\t\tthis.plotLinesAndBands.push(obj); \n\t\t}\n\t\t\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Compute auto alignment for the axis label based on which side the axis is on \n\t * and the given rotation for the label\n\t */\n\tautoLabelAlign: function (rotation) {\n\t\tvar ret, \n\t\t\tangle = (pick(rotation, 0) - (this.side * 90) + 720) % 360;\n\n\t\tif (angle > 15 && angle < 165) {\n\t\t\tret = 'right';\n\t\t} else if (angle > 195 && angle < 345) {\n\t\t\tret = 'left';\n\t\t} else {\n\t\t\tret = 'center';\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Render the tick labels to a preliminary position to get their sizes\n\t */\n\tgetOffset: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = axis.options,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\tticks = axis.ticks,\n\t\t\thoriz = axis.horiz,\n\t\t\tside = axis.side,\n\t\t\tinvertedSide = chart.inverted ? [1, 0, 3, 2][side] : side,\n\t\t\thasData,\n\t\t\tshowAxis,\n\t\t\ttitleOffset = 0,\n\t\t\ttitleOffsetOption,\n\t\t\ttitleMargin = 0,\n\t\t\taxisTitleOptions = options.title,\n\t\t\tlabelOptions = options.labels,\n\t\t\tlabelOffset = 0, // reset\n\t\t\taxisOffset = chart.axisOffset,\n\t\t\tclipOffset = chart.clipOffset,\n\t\t\tdirectionFactor = [-1, 1, 1, -1][side],\n\t\t\tn,\n\t\t\ti,\n\t\t\tautoStaggerLines = 1,\n\t\t\tmaxStaggerLines = pick(labelOptions.maxStaggerLines, 5),\n\t\t\tsortedPositions,\n\t\t\tlastRight,\n\t\t\toverlap,\n\t\t\tpos,\n\t\t\tbBox,\n\t\t\tx,\n\t\t\tw,\n\t\t\tlineNo;\n\t\t\t\n\t\t// For reuse in Axis.render\n\t\taxis.hasData = hasData = (axis.hasVisibleSeries || (defined(axis.min) && defined(axis.max) && !!tickPositions));\n\t\taxis.showAxis = showAxis = hasData || pick(options.showEmpty, true);\n\n\t\t// Set/reset staggerLines\n\t\taxis.staggerLines = axis.horiz && labelOptions.staggerLines;\n\t\t\n\t\t// Create the axisGroup and gridGroup elements on first iteration\n\t\tif (!axis.axisGroup) {\n\t\t\taxis.gridGroup = renderer.g('grid')\n\t\t\t\t.attr({ zIndex: options.gridZIndex || 1 })\n\t\t\t\t.add();\n\t\t\taxis.axisGroup = renderer.g('axis')\n\t\t\t\t.attr({ zIndex: options.zIndex || 2 })\n\t\t\t\t.add();\n\t\t\taxis.labelGroup = renderer.g('axis-labels')\n\t\t\t\t.attr({ zIndex: labelOptions.zIndex || 7 })\n\t\t\t\t.add();\n\t\t}\n\n\t\tif (hasData || axis.isLinked) {\n\t\t\t\n\t\t\t// Set the explicit or automatic label alignment\n\t\t\taxis.labelAlign = pick(labelOptions.align || axis.autoLabelAlign(labelOptions.rotation));\n\n\t\t\teach(tickPositions, function (pos) {\n\t\t\t\tif (!ticks[pos]) {\n\t\t\t\t\tticks[pos] = new Tick(axis, pos);\n\t\t\t\t} else {\n\t\t\t\t\tticks[pos].addLabel(); // update labels depending on tick interval\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Handle automatic stagger lines\n\t\t\tif (axis.horiz && !axis.staggerLines && maxStaggerLines && !labelOptions.rotation) {\n\t\t\t\tsortedPositions = axis.reversed ? [].concat(tickPositions).reverse() : tickPositions;\n\t\t\t\twhile (autoStaggerLines < maxStaggerLines) {\n\t\t\t\t\tlastRight = [];\n\t\t\t\t\toverlap = false;\n\t\t\t\t\t\n\t\t\t\t\tfor (i = 0; i < sortedPositions.length; i++) {\n\t\t\t\t\t\tpos = sortedPositions[i];\n\t\t\t\t\t\tbBox = ticks[pos].label && ticks[pos].label.getBBox();\n\t\t\t\t\t\tw = bBox ? bBox.width : 0;\n\t\t\t\t\t\tlineNo = i % autoStaggerLines;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (w) {\n\t\t\t\t\t\t\tx = axis.translate(pos); // don't handle log\n\t\t\t\t\t\t\tif (lastRight[lineNo] !== UNDEFINED && x < lastRight[lineNo]) {\n\t\t\t\t\t\t\t\toverlap = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastRight[lineNo] = x + w;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (overlap) {\n\t\t\t\t\t\tautoStaggerLines++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (autoStaggerLines > 1) {\n\t\t\t\t\taxis.staggerLines = autoStaggerLines;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\teach(tickPositions, function (pos) {\n\t\t\t\t// left side must be align: right and right side must have align: left for labels\n\t\t\t\tif (side === 0 || side === 2 || { 1: 'left', 3: 'right' }[side] === axis.labelAlign) {\n\n\t\t\t\t\t// get the highest offset\n\t\t\t\t\tlabelOffset = mathMax(\n\t\t\t\t\t\tticks[pos].getLabelSize(),\n\t\t\t\t\t\tlabelOffset\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t});\n\t\t\tif (axis.staggerLines) {\n\t\t\t\tlabelOffset *= axis.staggerLines;\n\t\t\t\taxis.labelOffset = labelOffset;\n\t\t\t}\n\t\t\t\n\n\t\t} else { // doesn't have data\n\t\t\tfor (n in ticks) {\n\t\t\t\tticks[n].destroy();\n\t\t\t\tdelete ticks[n];\n\t\t\t}\n\t\t}\n\n\t\tif (axisTitleOptions && axisTitleOptions.text && axisTitleOptions.enabled !== false) { \n\t\t\tif (!axis.axisTitle) {\n\t\t\t\taxis.axisTitle = renderer.text(\n\t\t\t\t\taxisTitleOptions.text,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\taxisTitleOptions.useHTML\n\t\t\t\t)\n\t\t\t\t.attr({\n\t\t\t\t\tzIndex: 7,\n\t\t\t\t\trotation: axisTitleOptions.rotation || 0,\n\t\t\t\t\talign:\n\t\t\t\t\t\taxisTitleOptions.textAlign ||\n\t\t\t\t\t\t{ low: 'left', middle: 'center', high: 'right' }[axisTitleOptions.align]\n\t\t\t\t})\n\t\t\t\t.css(axisTitleOptions.style)\n\t\t\t\t.add(axis.axisGroup);\n\t\t\t\taxis.axisTitle.isNew = true;\n\t\t\t}\n\n\t\t\tif (showAxis) {\n\t\t\t\ttitleOffset = axis.axisTitle.getBBox()[horiz ? 'height' : 'width'];\n\t\t\t\ttitleMargin = pick(axisTitleOptions.margin, horiz ? 5 : 10);\n\t\t\t\ttitleOffsetOption = axisTitleOptions.offset;\n\t\t\t}\n\n\t\t\t// hide or show the title depending on whether showEmpty is set\n\t\t\taxis.axisTitle[showAxis ? 'show' : 'hide']();\n\t\t}\n\t\t\n\t\t// handle automatic or user set offset\n\t\taxis.offset = directionFactor * pick(options.offset, axisOffset[side]);\n\t\t\n\t\taxis.axisTitleMargin =\n\t\t\tpick(titleOffsetOption,\n\t\t\t\tlabelOffset + titleMargin +\n\t\t\t\t(side !== 2 && labelOffset && directionFactor * options.labels[horiz ? 'y' : 'x'])\n\t\t\t);\n\n\t\taxisOffset[side] = mathMax(\n\t\t\taxisOffset[side],\n\t\t\taxis.axisTitleMargin + titleOffset + directionFactor * axis.offset\n\t\t);\n\t\tclipOffset[invertedSide] = mathMax(clipOffset[invertedSide], mathFloor(options.lineWidth / 2) * 2);\n\t},\n\t\n\t/**\n\t * Get the path for the axis line\n\t */\n\tgetLinePath: function (lineWidth) {\n\t\tvar chart = this.chart,\n\t\t\topposite = this.opposite,\n\t\t\toffset = this.offset,\n\t\t\thoriz = this.horiz,\n\t\t\tlineLeft = this.left + (opposite ? this.width : 0) + offset,\n\t\t\tlineTop = chart.chartHeight - this.bottom - (opposite ? this.height : 0) + offset;\n\t\t\t\n\t\tif (opposite) {\n\t\t\tlineWidth *= -1; // crispify the other way - #1480, #1687\n\t\t}\n\n\t\treturn chart.renderer.crispLine([\n\t\t\t\tM,\n\t\t\t\thoriz ?\n\t\t\t\t\tthis.left :\n\t\t\t\t\tlineLeft,\n\t\t\t\thoriz ?\n\t\t\t\t\tlineTop :\n\t\t\t\t\tthis.top,\n\t\t\t\tL,\n\t\t\t\thoriz ?\n\t\t\t\t\tchart.chartWidth - this.right :\n\t\t\t\t\tlineLeft,\n\t\t\t\thoriz ?\n\t\t\t\t\tlineTop :\n\t\t\t\t\tchart.chartHeight - this.bottom\n\t\t\t], lineWidth);\n\t},\n\t\n\t/**\n\t * Position the title\n\t */\n\tgetTitlePosition: function () {\n\t\t// compute anchor points for each of the title align options\n\t\tvar horiz = this.horiz,\n\t\t\taxisLeft = this.left,\n\t\t\taxisTop = this.top,\n\t\t\taxisLength = this.len,\n\t\t\taxisTitleOptions = this.options.title,\t\t\t\n\t\t\tmargin = horiz ? axisLeft : axisTop,\n\t\t\topposite = this.opposite,\n\t\t\toffset = this.offset,\n\t\t\tfontSize = pInt(axisTitleOptions.style.fontSize || 12),\n\t\t\t\n\t\t\t// the position in the length direction of the axis\n\t\t\talongAxis = {\n\t\t\t\tlow: margin + (horiz ? 0 : axisLength),\n\t\t\t\tmiddle: margin + axisLength / 2,\n\t\t\t\thigh: margin + (horiz ? axisLength : 0)\n\t\t\t}[axisTitleOptions.align],\n\t\n\t\t\t// the position in the perpendicular direction of the axis\n\t\t\toffAxis = (horiz ? axisTop + this.height : axisLeft) +\n\t\t\t\t(horiz ? 1 : -1) * // horizontal axis reverses the margin\n\t\t\t\t(opposite ? -1 : 1) * // so does opposite axes\n\t\t\t\tthis.axisTitleMargin +\n\t\t\t\t(this.side === 2 ? fontSize : 0);\n\n\t\treturn {\n\t\t\tx: horiz ?\n\t\t\t\talongAxis :\n\t\t\t\toffAxis + (opposite ? this.width : 0) + offset +\n\t\t\t\t\t(axisTitleOptions.x || 0), // x\n\t\t\ty: horiz ?\n\t\t\t\toffAxis - (opposite ? this.height : 0) + offset :\n\t\t\t\talongAxis + (axisTitleOptions.y || 0) // y\n\t\t};\n\t},\n\t\n\t/**\n\t * Render the axis\n\t */\n\trender: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = axis.options,\n\t\t\tisLog = axis.isLog,\n\t\t\tisLinked = axis.isLinked,\n\t\t\ttickPositions = axis.tickPositions,\n\t\t\taxisTitle = axis.axisTitle,\n\t\t\tstacks = axis.stacks,\n\t\t\tticks = axis.ticks,\n\t\t\tminorTicks = axis.minorTicks,\n\t\t\talternateBands = axis.alternateBands,\n\t\t\tstackLabelOptions = options.stackLabels,\n\t\t\talternateGridColor = options.alternateGridColor,\n\t\t\ttickmarkOffset = axis.tickmarkOffset,\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tlinePath,\n\t\t\thasRendered = chart.hasRendered,\n\t\t\tslideInTicks = hasRendered && defined(axis.oldMin) && !isNaN(axis.oldMin),\n\t\t\thasData = axis.hasData,\n\t\t\tshowAxis = axis.showAxis,\n\t\t\tfrom,\n\t\t\tto;\n\n\t\t// Mark all elements inActive before we go over and mark the active ones\n\t\teach([ticks, minorTicks, alternateBands], function (coll) {\n\t\t\tvar pos;\n\t\t\tfor (pos in coll) {\n\t\t\t\tcoll[pos].isActive = false;\n\t\t\t}\n\t\t});\n\n\t\t// If the series has data draw the ticks. Else only the line and title\n\t\tif (hasData || isLinked) {\n\n\t\t\t// minor ticks\n\t\t\tif (axis.minorTickInterval && !axis.categories) {\n\t\t\t\teach(axis.getMinorTickPositions(), function (pos) {\n\t\t\t\t\tif (!minorTicks[pos]) {\n\t\t\t\t\t\tminorTicks[pos] = new Tick(axis, pos, 'minor');\n\t\t\t\t\t}\n\n\t\t\t\t\t// render new ticks in old position\n\t\t\t\t\tif (slideInTicks && minorTicks[pos].isNew) {\n\t\t\t\t\t\tminorTicks[pos].render(null, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tminorTicks[pos].render(null, false, 1);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Major ticks. Pull out the first item and render it last so that\n\t\t\t// we can get the position of the neighbour label. #808.\n\t\t\tif (tickPositions.length) { // #1300\n\t\t\t\teach(tickPositions.slice(1).concat([tickPositions[0]]), function (pos, i) {\n\t\n\t\t\t\t\t// Reorganize the indices\n\t\t\t\t\ti = (i === tickPositions.length - 1) ? 0 : i + 1;\n\t\n\t\t\t\t\t// linked axes need an extra check to find out if\n\t\t\t\t\tif (!isLinked || (pos >= axis.min && pos <= axis.max)) {\n\t\n\t\t\t\t\t\tif (!ticks[pos]) {\n\t\t\t\t\t\t\tticks[pos] = new Tick(axis, pos);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// render new ticks in old position\n\t\t\t\t\t\tif (slideInTicks && ticks[pos].isNew) {\n\t\t\t\t\t\t\tticks[pos].render(i, true);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tticks[pos].render(i, false, 1);\n\t\t\t\t\t}\n\t\n\t\t\t\t});\n\t\t\t\t// In a categorized axis, the tick marks are displayed between labels. So\n\t\t\t\t// we need to add a tick mark and grid line at the left edge of the X axis.\n\t\t\t\tif (tickmarkOffset && axis.min === 0) {\n\t\t\t\t\tif (!ticks[-1]) {\n\t\t\t\t\t\tticks[-1] = new Tick(axis, -1, null, true);\n\t\t\t\t\t}\n\t\t\t\t\tticks[-1].render(-1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\n\t\t\t// alternate grid color\n\t\t\tif (alternateGridColor) {\n\t\t\t\teach(tickPositions, function (pos, i) {\n\t\t\t\t\tif (i % 2 === 0 && pos < axis.max) {\n\t\t\t\t\t\tif (!alternateBands[pos]) {\n\t\t\t\t\t\t\talternateBands[pos] = new PlotLineOrBand(axis);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfrom = pos + tickmarkOffset; // #949\n\t\t\t\t\t\tto = tickPositions[i + 1] !== UNDEFINED ? tickPositions[i + 1] + tickmarkOffset : axis.max;\n\t\t\t\t\t\talternateBands[pos].options = {\n\t\t\t\t\t\t\tfrom: isLog ? lin2log(from) : from,\n\t\t\t\t\t\t\tto: isLog ? lin2log(to) : to,\n\t\t\t\t\t\t\tcolor: alternateGridColor\n\t\t\t\t\t\t};\n\t\t\t\t\t\talternateBands[pos].render();\n\t\t\t\t\t\talternateBands[pos].isActive = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// custom plot lines and bands\n\t\t\tif (!axis._addedPlotLB) { // only first time\n\t\t\t\teach((options.plotLines || []).concat(options.plotBands || []), function (plotLineOptions) {\n\t\t\t\t\taxis.addPlotBandOrLine(plotLineOptions);\n\t\t\t\t});\n\t\t\t\taxis._addedPlotLB = true;\n\t\t\t}\n\n\t\t} // end if hasData\n\n\t\t// Remove inactive ticks\n\t\teach([ticks, minorTicks, alternateBands], function (coll) {\n\t\t\tvar pos, \n\t\t\t\ti,\n\t\t\t\tforDestruction = [],\n\t\t\t\tdelay = globalAnimation ? globalAnimation.duration || 500 : 0,\n\t\t\t\tdestroyInactiveItems = function () {\n\t\t\t\t\ti = forDestruction.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t// When resizing rapidly, the same items may be destroyed in different timeouts,\n\t\t\t\t\t\t// or the may be reactivated\n\t\t\t\t\t\tif (coll[forDestruction[i]] && !coll[forDestruction[i]].isActive) {\n\t\t\t\t\t\t\tcoll[forDestruction[i]].destroy();\n\t\t\t\t\t\t\tdelete coll[forDestruction[i]];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t};\n\n\t\t\tfor (pos in coll) {\n\n\t\t\t\tif (!coll[pos].isActive) {\n\t\t\t\t\t// Render to zero opacity\n\t\t\t\t\tcoll[pos].render(pos, false, 0);\n\t\t\t\t\tcoll[pos].isActive = false;\n\t\t\t\t\tforDestruction.push(pos);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// When the objects are finished fading out, destroy them\n\t\t\tif (coll === alternateBands || !chart.hasRendered || !delay) {\n\t\t\t\tdestroyInactiveItems();\n\t\t\t} else if (delay) {\n\t\t\t\tsetTimeout(destroyInactiveItems, delay);\n\t\t\t}\n\t\t});\n\n\t\t// Static items. As the axis group is cleared on subsequent calls\n\t\t// to render, these items are added outside the group.\n\t\t// axis line\n\t\tif (lineWidth) {\n\t\t\tlinePath = axis.getLinePath(lineWidth);\n\t\t\tif (!axis.axisLine) {\n\t\t\t\taxis.axisLine = renderer.path(linePath)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tstroke: options.lineColor,\n\t\t\t\t\t\t'stroke-width': lineWidth,\n\t\t\t\t\t\tzIndex: 7\n\t\t\t\t\t})\n\t\t\t\t\t.add(axis.axisGroup);\n\t\t\t} else {\n\t\t\t\taxis.axisLine.animate({ d: linePath });\n\t\t\t}\n\n\t\t\t// show or hide the line depending on options.showEmpty\n\t\t\taxis.axisLine[showAxis ? 'show' : 'hide']();\n\t\t}\n\n\t\tif (axisTitle && showAxis) {\n\t\t\t\n\t\t\taxisTitle[axisTitle.isNew ? 'attr' : 'animate'](\n\t\t\t\taxis.getTitlePosition()\n\t\t\t);\n\t\t\taxisTitle.isNew = false;\n\t\t}\n\n\t\t// Stacked totals:\n\t\tif (stackLabelOptions && stackLabelOptions.enabled) {\n\t\t\tvar stackKey, oneStack, stackCategory,\n\t\t\t\tstackTotalGroup = axis.stackTotalGroup;\n\n\t\t\t// Create a separate group for the stack total labels\n\t\t\tif (!stackTotalGroup) {\n\t\t\t\taxis.stackTotalGroup = stackTotalGroup =\n\t\t\t\t\trenderer.g('stack-labels')\n\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\tvisibility: VISIBLE,\n\t\t\t\t\t\t\tzIndex: 6\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.add();\n\t\t\t}\n\n\t\t\t// plotLeft/Top will change when y axis gets wider so we need to translate the\n\t\t\t// stackTotalGroup at every render call. See bug #506 and #516\n\t\t\tstackTotalGroup.translate(chart.plotLeft, chart.plotTop);\n\n\t\t\t// Render each stack total\n\t\t\tfor (stackKey in stacks) {\n\t\t\t\toneStack = stacks[stackKey];\n\t\t\t\tfor (stackCategory in oneStack) {\n\t\t\t\t\toneStack[stackCategory].render(stackTotalGroup);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// End stacked totals\n\n\t\taxis.isDirty = false;\n\t},\n\n\t/**\n\t * Remove a plot band or plot line from the chart by id\n\t * @param {Object} id\n\t */\n\tremovePlotBandOrLine: function (id) {\n\t\tvar plotLinesAndBands = this.plotLinesAndBands,\n\t\t\toptions = this.options,\n\t\t\tuserOptions = this.userOptions,\n\t\t\ti = plotLinesAndBands.length;\n\t\twhile (i--) {\n\t\t\tif (plotLinesAndBands[i].id === id) {\n\t\t\t\tplotLinesAndBands[i].destroy();\n\t\t\t}\n\t\t}\n\t\teach([options.plotLines || [], userOptions.plotLines || [], options.plotBands || [], userOptions.plotBands || []], function (arr) {\n\t\t\ti = arr.length;\n\t\t\twhile (i--) {\n\t\t\t\tif (arr[i].id === id) {\n\t\t\t\t\terase(arr, arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t},\n\n\t/**\n\t * Update the axis title by options\n\t */\n\tsetTitle: function (newTitleOptions, redraw) {\n\t\tthis.update({ title: newTitleOptions }, redraw);\n\t},\n\n\t/**\n\t * Redraw the axis to reflect changes in the data or axis extremes\n\t */\n\tredraw: function () {\n\t\tvar axis = this,\n\t\t\tchart = axis.chart,\n\t\t\tpointer = chart.pointer;\n\n\t\t// hide tooltip and hover states\n\t\tif (pointer.reset) {\n\t\t\tpointer.reset(true);\n\t\t}\n\n\t\t// render the axis\n\t\taxis.render();\n\n\t\t// move plot lines and bands\n\t\teach(axis.plotLinesAndBands, function (plotLine) {\n\t\t\tplotLine.render();\n\t\t});\n\n\t\t// mark associated series as dirty and ready for redraw\n\t\teach(axis.series, function (series) {\n\t\t\tseries.isDirty = true;\n\t\t});\n\n\t},\n\n\t/**\n\t * Build the stacks from top down\n\t */\n\tbuildStacks: function () {\n\t\tvar series = this.series,\n\t\t\ti = series.length;\n\t\tif (!this.isXAxis) {\n\t\t\twhile (i--) {\n\t\t\t\tseries[i].setStackedPoints();\n\t\t\t}\n\t\t\t// Loop up again to compute percent stack\n\t\t\tif (this.usePercentage) {\n\t\t\t\tfor (i = 0; i < series.length; i++) {\n\t\t\t\t\tseries[i].setPercentStacks();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set new axis categories and optionally redraw\n\t * @param {Array} categories\n\t * @param {Boolean} redraw\n\t */\n\tsetCategories: function (categories, redraw) {\n\t\tthis.update({ categories: categories }, redraw);\n\t},\n\n\t/**\n\t * Destroys an Axis instance.\n\t */\n\tdestroy: function (keepEvents) {\n\t\tvar axis = this,\n\t\t\tstacks = axis.stacks,\n\t\t\tstackKey,\n\t\t\tplotLinesAndBands = axis.plotLinesAndBands,\n\t\t\ti;\n\n\t\t// Remove the events\n\t\tif (!keepEvents) {\n\t\t\tremoveEvent(axis);\n\t\t}\n\n\t\t// Destroy each stack total\n\t\tfor (stackKey in stacks) {\n\t\t\tdestroyObjectProperties(stacks[stackKey]);\n\n\t\t\tstacks[stackKey] = null;\n\t\t}\n\n\t\t// Destroy collections\n\t\teach([axis.ticks, axis.minorTicks, axis.alternateBands], function (coll) {\n\t\t\tdestroyObjectProperties(coll);\n\t\t});\n\t\ti = plotLinesAndBands.length;\n\t\twhile (i--) { // #1975\n\t\t\tplotLinesAndBands[i].destroy();\n\t\t}\n\n\t\t// Destroy local variables\n\t\teach(['stackTotalGroup', 'axisLine', 'axisGroup', 'gridGroup', 'labelGroup', 'axisTitle'], function (prop) {\n\t\t\tif (axis[prop]) {\n\t\t\t\taxis[prop] = axis[prop].destroy();\n\t\t\t}\n\t\t});\n\t}\n\n\t\n}; // end Axis\n\n/**\n * The tooltip object\n * @param {Object} chart The chart instance\n * @param {Object} options Tooltip options\n */\nfunction Tooltip() {\n\tthis.init.apply(this, arguments);\n}\n\nTooltip.prototype = {\n\n\tinit: function (chart, options) {\n\n\t\tvar borderWidth = options.borderWidth,\n\t\t\tstyle = options.style,\n\t\t\tpadding = pInt(style.padding);\n\n\t\t// Save the chart and options\n\t\tthis.chart = chart;\n\t\tthis.options = options;\n\n\t\t// Keep track of the current series\n\t\t//this.currentSeries = UNDEFINED;\n\n\t\t// List of crosshairs\n\t\tthis.crosshairs = [];\n\n\t\t// Current values of x and y when animating\n\t\tthis.now = { x: 0, y: 0 };\n\n\t\t// The tooltip is initially hidden\n\t\tthis.isHidden = true;\n\n\n\t\t// create the label\n\t\tthis.label = chart.renderer.label('', 0, 0, options.shape, null, null, options.useHTML, null, 'tooltip')\n\t\t\t.attr({\n\t\t\t\tpadding: padding,\n\t\t\t\tfill: options.backgroundColor,\n\t\t\t\t'stroke-width': borderWidth,\n\t\t\t\tr: options.borderRadius,\n\t\t\t\tzIndex: 8\n\t\t\t})\n\t\t\t.css(style)\n\t\t\t.css({ padding: 0 }) // Remove it from VML, the padding is applied as an attribute instead (#1117)\n\t\t\t.add()\n\t\t\t.attr({ y: -999 }); // #2301\n\n\t\t// When using canVG the shadow shows up as a gray circle\n\t\t// even if the tooltip is hidden.\n\t\tif (!useCanVG) {\n\t\t\tthis.label.shadow(options.shadow);\n\t\t}\n\n\t\t// Public property for getting the shared state.\n\t\tthis.shared = options.shared;\n\t},\n\n\t/**\n\t * Destroy the tooltip and its elements.\n\t */\n\tdestroy: function () {\n\t\teach(this.crosshairs, function (crosshair) {\n\t\t\tif (crosshair) {\n\t\t\t\tcrosshair.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// Destroy and clear local variables\n\t\tif (this.label) {\n\t\t\tthis.label = this.label.destroy();\n\t\t}\n\t\tclearTimeout(this.hideTimer);\n\t\tclearTimeout(this.tooltipTimeout);\n\t},\n\n\t/**\n\t * Provide a soft movement for the tooltip\n\t *\n\t * @param {Number} x\n\t * @param {Number} y\n\t * @private\n\t */\n\tmove: function (x, y, anchorX, anchorY) {\n\t\tvar tooltip = this,\n\t\t\tnow = tooltip.now,\n\t\t\tanimate = tooltip.options.animation !== false && !tooltip.isHidden;\n\n\t\t// get intermediate values for animation\n\t\textend(now, {\n\t\t\tx: animate ? (2 * now.x + x) / 3 : x,\n\t\t\ty: animate ? (now.y + y) / 2 : y,\n\t\t\tanchorX: animate ? (2 * now.anchorX + anchorX) / 3 : anchorX,\n\t\t\tanchorY: animate ? (now.anchorY + anchorY) / 2 : anchorY\n\t\t});\n\n\t\t// move to the intermediate value\n\t\ttooltip.label.attr(now);\n\n\t\t\n\t\t// run on next tick of the mouse tracker\n\t\tif (animate && (mathAbs(x - now.x) > 1 || mathAbs(y - now.y) > 1)) {\n\t\t\n\t\t\t// never allow two timeouts\n\t\t\tclearTimeout(this.tooltipTimeout);\n\t\t\t\n\t\t\t// set the fixed interval ticking for the smooth tooltip\n\t\t\tthis.tooltipTimeout = setTimeout(function () {\n\t\t\t\t// The interval function may still be running during destroy, so check that the chart is really there before calling.\n\t\t\t\tif (tooltip) {\n\t\t\t\t\ttooltip.move(x, y, anchorX, anchorY);\n\t\t\t\t}\n\t\t\t}, 32);\n\t\t\t\n\t\t}\n\t},\n\n\t/**\n\t * Hide the tooltip\n\t */\n\thide: function () {\n\t\tvar tooltip = this,\n\t\t\thoverPoints;\n\t\t\n\t\tclearTimeout(this.hideTimer); // disallow duplicate timers (#1728, #1766)\n\t\tif (!this.isHidden) {\n\t\t\thoverPoints = this.chart.hoverPoints;\n\n\t\t\tthis.hideTimer = setTimeout(function () {\n\t\t\t\ttooltip.label.fadeOut();\n\t\t\t\ttooltip.isHidden = true;\n\t\t\t}, pick(this.options.hideDelay, 500));\n\n\t\t\t// hide previous hoverPoints and set new\n\t\t\tif (hoverPoints) {\n\t\t\t\teach(hoverPoints, function (point) {\n\t\t\t\t\tpoint.setState();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.chart.hoverPoints = null;\n\t\t}\n\t},\n\n\t/**\n\t * Hide the crosshairs\n\t */\n\thideCrosshairs: function () {\n\t\teach(this.crosshairs, function (crosshair) {\n\t\t\tif (crosshair) {\n\t\t\t\tcrosshair.hide();\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/** \n\t * Extendable method to get the anchor position of the tooltip\n\t * from a point or set of points\n\t */\n\tgetAnchor: function (points, mouseEvent) {\n\t\tvar ret,\n\t\t\tchart = this.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotX = 0,\n\t\t\tplotY = 0,\n\t\t\tyAxis;\n\t\t\n\t\tpoints = splat(points);\n\t\t\n\t\t// Pie uses a special tooltipPos\n\t\tret = points[0].tooltipPos;\n\t\t\n\t\t// When tooltip follows mouse, relate the position to the mouse\n\t\tif (this.followPointer && mouseEvent) {\n\t\t\tif (mouseEvent.chartX === UNDEFINED) {\n\t\t\t\tmouseEvent = chart.pointer.normalize(mouseEvent);\n\t\t\t}\n\t\t\tret = [\n\t\t\t\tmouseEvent.chartX - chart.plotLeft,\n\t\t\t\tmouseEvent.chartY - plotTop\n\t\t\t];\n\t\t}\n\t\t// When shared, use the average position\n\t\tif (!ret) {\n\t\t\teach(points, function (point) {\n\t\t\t\tyAxis = point.series.yAxis;\n\t\t\t\tplotX += point.plotX;\n\t\t\t\tplotY += (point.plotLow ? (point.plotLow + point.plotHigh) / 2 : point.plotY) +\n\t\t\t\t\t(!inverted && yAxis ? yAxis.top - plotTop : 0); // #1151\n\t\t\t});\n\t\t\t\n\t\t\tplotX /= points.length;\n\t\t\tplotY /= points.length;\n\t\t\t\n\t\t\tret = [\n\t\t\t\tinverted ? chart.plotWidth - plotY : plotX,\n\t\t\t\tthis.shared && !inverted && points.length > 1 && mouseEvent ? \n\t\t\t\t\tmouseEvent.chartY - plotTop : // place shared tooltip next to the mouse (#424)\n\t\t\t\t\tinverted ? chart.plotHeight - plotX : plotY\n\t\t\t];\n\t\t}\n\n\t\treturn map(ret, mathRound);\n\t},\n\t\n\t/**\n\t * Place the tooltip in a chart without spilling over\n\t * and not covering the point it self.\n\t */\n\tgetPosition: function (boxWidth, boxHeight, point) {\n\t\t\n\t\t// Set up the variables\n\t\tvar chart = this.chart,\n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tdistance = pick(this.options.distance, 12),\n\t\t\tpointX = point.plotX,\n\t\t\tpointY = point.plotY,\n\t\t\tx = pointX + plotLeft + (chart.inverted ? distance : -boxWidth - distance),\n\t\t\ty = pointY - boxHeight + plotTop + 15, // 15 means the point is 15 pixels up from the bottom of the tooltip\n\t\t\talignedRight;\n\t\n\t\t// It is too far to the left, adjust it\n\t\tif (x < 7) {\n\t\t\tx = plotLeft + mathMax(pointX, 0) + distance;\n\t\t}\n\t\n\t\t// Test to see if the tooltip is too far to the right,\n\t\t// if it is, move it back to be inside and then up to not cover the point.\n\t\tif ((x + boxWidth) > (plotLeft + plotWidth)) {\n\t\t\tx -= (x + boxWidth) - (plotLeft + plotWidth);\n\t\t\ty = pointY - boxHeight + plotTop - distance;\n\t\t\talignedRight = true;\n\t\t}\n\t\n\t\t// If it is now above the plot area, align it to the top of the plot area\n\t\tif (y < plotTop + 5) {\n\t\t\ty = plotTop + 5;\n\t\n\t\t\t// If the tooltip is still covering the point, move it below instead\n\t\t\tif (alignedRight && pointY >= y && pointY <= (y + boxHeight)) {\n\t\t\t\ty = pointY + plotTop + distance; // below\n\t\t\t}\n\t\t} \n\t\n\t\t// Now if the tooltip is below the chart, move it up. It's better to cover the\n\t\t// point than to disappear outside the chart. #834.\n\t\tif (y + boxHeight > plotTop + plotHeight) {\n\t\t\ty = mathMax(plotTop, plotTop + plotHeight - boxHeight - distance); // below\n\t\t}\n\t\n\t\treturn {x: x, y: y};\n\t},\n\n\t/**\n\t * In case no user defined formatter is given, this will be used. Note that the context\n\t * here is an object holding point, series, x, y etc.\n\t */\n\tdefaultFormatter: function (tooltip) {\n\t\tvar items = this.points || splat(this),\n\t\t\tseries = items[0].series,\n\t\t\ts;\n\n\t\t// build the header\n\t\ts = [series.tooltipHeaderFormatter(items[0])];\n\n\t\t// build the values\n\t\teach(items, function (item) {\n\t\t\tseries = item.series;\n\t\t\ts.push((series.tooltipFormatter && series.tooltipFormatter(item)) ||\n\t\t\t\titem.point.tooltipFormatter(series.tooltipOptions.pointFormat));\n\t\t});\n\n\t\t// footer\n\t\ts.push(tooltip.options.footerFormat || '');\n\n\t\treturn s.join('');\n\t},\n\n\t/**\n\t * Refresh the tooltip's text and position.\n\t * @param {Object} point\n\t */\n\trefresh: function (point, mouseEvent) {\n\t\tvar tooltip = this,\n\t\t\tchart = tooltip.chart,\n\t\t\tlabel = tooltip.label,\n\t\t\toptions = tooltip.options,\n\t\t\tx,\n\t\t\ty,\n\t\t\tanchor,\n\t\t\ttextConfig = {},\n\t\t\ttext,\n\t\t\tpointConfig = [],\n\t\t\tformatter = options.formatter || tooltip.defaultFormatter,\n\t\t\thoverPoints = chart.hoverPoints,\n\t\t\tborderColor,\n\t\t\tcrosshairsOptions = options.crosshairs,\n\t\t\tshared = tooltip.shared,\n\t\t\tcurrentSeries;\n\t\t\t\n\t\tclearTimeout(this.hideTimer);\n\t\t\n\t\t// get the reference point coordinates (pie charts use tooltipPos)\n\t\ttooltip.followPointer = splat(point)[0].series.tooltipOptions.followPointer;\n\t\tanchor = tooltip.getAnchor(point, mouseEvent);\n\t\tx = anchor[0];\n\t\ty = anchor[1];\n\n\t\t// shared tooltip, array is sent over\n\t\tif (shared && !(point.series && point.series.noSharedTooltip)) {\n\t\t\t\n\t\t\t// hide previous hoverPoints and set new\n\t\t\t\n\t\t\tchart.hoverPoints = point;\n\t\t\tif (hoverPoints) {\n\t\t\t\teach(hoverPoints, function (point) {\n\t\t\t\t\tpoint.setState();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\teach(point, function (item) {\n\t\t\t\titem.setState(HOVER_STATE);\n\n\t\t\t\tpointConfig.push(item.getLabelConfig());\n\t\t\t});\n\n\t\t\ttextConfig = {\n\t\t\t\tx: point[0].category,\n\t\t\t\ty: point[0].y\n\t\t\t};\n\t\t\ttextConfig.points = pointConfig;\n\t\t\tpoint = point[0];\n\n\t\t// single point tooltip\n\t\t} else {\n\t\t\ttextConfig = point.getLabelConfig();\n\t\t}\n\t\ttext = formatter.call(textConfig, tooltip);\n\n\t\t// register the current series\n\t\tcurrentSeries = point.series;\n\n\t\t// update the inner HTML\n\t\tif (text === false) {\n\t\t\tthis.hide();\n\t\t} else {\n\n\t\t\t// show it\n\t\t\tif (tooltip.isHidden) {\n\t\t\t\tstop(label);\n\t\t\t\tlabel.attr('opacity', 1).show();\n\t\t\t}\n\n\t\t\t// update text\n\t\t\tlabel.attr({\n\t\t\t\ttext: text\n\t\t\t});\n\n\t\t\t// set the stroke color of the box\n\t\t\tborderColor = options.borderColor || point.color || currentSeries.color || '#606060';\n\t\t\tlabel.attr({\n\t\t\t\tstroke: borderColor\n\t\t\t});\n\t\t\t\n\t\t\ttooltip.updatePosition({ plotX: x, plotY: y });\n\t\t\n\t\t\tthis.isHidden = false;\n\t\t}\n\n\t\t// crosshairs\n\t\tif (crosshairsOptions) {\n\t\t\tcrosshairsOptions = splat(crosshairsOptions); // [x, y]\n\n\t\t\tvar path,\n\t\t\t\ti = crosshairsOptions.length,\n\t\t\t\tattribs,\n\t\t\t\taxis,\n\t\t\t\tval,\n\t\t\t\tseries;\n\n\t\t\twhile (i--) {\n\t\t\t\tseries = point.series;\n\t\t\t\taxis = series[i ? 'yAxis' : 'xAxis'];\n\t\t\t\tif (crosshairsOptions[i] && axis) {\n\t\t\t\t\tval = i ? pick(point.stackY, point.y) : point.x; // #814\n\t\t\t\t\tif (axis.isLog) { // #1671\n\t\t\t\t\t\tval = log2lin(val);\n\t\t\t\t\t}\n\t\t\t\t\tif (i === 1 && series.modifyValue) { // #1205, #2316\n\t\t\t\t\t\tval = series.modifyValue(val);\n\t\t\t\t\t}\n\n\t\t\t\t\tpath = axis.getPlotLinePath(\n\t\t\t\t\t\tval,\n\t\t\t\t\t\t1\n\t\t\t\t\t);\n\n\t\t\t\t\tif (tooltip.crosshairs[i]) {\n\t\t\t\t\t\ttooltip.crosshairs[i].attr({ d: path, visibility: VISIBLE });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattribs = {\n\t\t\t\t\t\t\t'stroke-width': crosshairsOptions[i].width || 1,\n\t\t\t\t\t\t\tstroke: crosshairsOptions[i].color || '#C0C0C0',\n\t\t\t\t\t\t\tzIndex: crosshairsOptions[i].zIndex || 2\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (crosshairsOptions[i].dashStyle) {\n\t\t\t\t\t\t\tattribs.dashstyle = crosshairsOptions[i].dashStyle;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttooltip.crosshairs[i] = chart.renderer.path(path)\n\t\t\t\t\t\t\t.attr(attribs)\n\t\t\t\t\t\t\t.add();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfireEvent(chart, 'tooltipRefresh', {\n\t\t\t\ttext: text,\n\t\t\t\tx: x + chart.plotLeft,\n\t\t\t\ty: y + chart.plotTop,\n\t\t\t\tborderColor: borderColor\n\t\t\t});\n\t},\n\t\n\t/**\n\t * Find the new position and perform the move\n\t */\n\tupdatePosition: function (point) {\n\t\tvar chart = this.chart,\n\t\t\tlabel = this.label, \n\t\t\tpos = (this.options.positioner || this.getPosition).call(\n\t\t\t\tthis,\n\t\t\t\tlabel.width,\n\t\t\t\tlabel.height,\n\t\t\t\tpoint\n\t\t\t);\n\n\t\t// do the move\n\t\tthis.move(\n\t\t\tmathRound(pos.x), \n\t\t\tmathRound(pos.y), \n\t\t\tpoint.plotX + chart.plotLeft, \n\t\t\tpoint.plotY + chart.plotTop\n\t\t);\n\t}\n};\n/**\n * The mouse tracker object. All methods starting with \"on\" are primary DOM event handlers. \n * Subsequent methods should be named differently from what they are doing.\n * @param {Object} chart The Chart instance\n * @param {Object} options The root options object\n */\nfunction Pointer(chart, options) {\n\tthis.init(chart, options);\n}\n\nPointer.prototype = {\n\t/**\n\t * Initialize Pointer\n\t */\n\tinit: function (chart, options) {\n\t\t\n\t\tvar chartOptions = options.chart,\n\t\t\tchartEvents = chartOptions.events,\n\t\t\tzoomType = useCanVG ? '' : chartOptions.zoomType,\n\t\t\tinverted = chart.inverted,\n\t\t\tzoomX,\n\t\t\tzoomY;\n\n\t\t// Store references\n\t\tthis.options = options;\n\t\tthis.chart = chart;\n\t\t\n\t\t// Zoom status\n\t\tthis.zoomX = zoomX = /x/.test(zoomType);\n\t\tthis.zoomY = zoomY = /y/.test(zoomType);\n\t\tthis.zoomHor = (zoomX && !inverted) || (zoomY && inverted);\n\t\tthis.zoomVert = (zoomY && !inverted) || (zoomX && inverted);\n\n\t\t// Do we need to handle click on a touch device?\n\t\tthis.runChartClick = chartEvents && !!chartEvents.click;\n\n\t\tthis.pinchDown = [];\n\t\tthis.lastValidTouch = {};\n\n\t\tif (options.tooltip.enabled) {\n\t\t\tchart.tooltip = new Tooltip(chart, options.tooltip);\n\t\t}\n\n\t\tthis.setDOMEvents();\n\t}, \n\n\t/**\n\t * Add crossbrowser support for chartX and chartY\n\t * @param {Object} e The event object in standard browsers\n\t */\n\tnormalize: function (e, chartPosition) {\n\t\tvar chartX,\n\t\t\tchartY,\n\t\t\tePos;\n\n\t\t// common IE normalizing\n\t\te = e || win.event;\n\t\tif (!e.target) {\n\t\t\te.target = e.srcElement;\n\t\t}\n\n\t\t// Framework specific normalizing (#1165)\n\t\te = washMouseEvent(e);\n\t\t\n\t\t// iOS\n\t\tePos = e.touches ? e.touches.item(0) : e;\n\n\t\t// Get mouse position\n\t\tif (!chartPosition) {\n\t\t\tthis.chartPosition = chartPosition = offset(this.chart.container);\n\t\t}\n\n\t\t// chartX and chartY\n\t\tif (ePos.pageX === UNDEFINED) { // IE < 9. #886.\n\t\t\tchartX = mathMax(e.x, e.clientX - chartPosition.left); // #2005, #2129: the second case is \n\t\t\t\t// for IE10 quirks mode within framesets\n\t\t\tchartY = e.y;\n\t\t} else {\n\t\t\tchartX = ePos.pageX - chartPosition.left;\n\t\t\tchartY = ePos.pageY - chartPosition.top;\n\t\t}\n\n\t\treturn extend(e, {\n\t\t\tchartX: mathRound(chartX),\n\t\t\tchartY: mathRound(chartY)\n\t\t});\n\t},\n\n\t/**\n\t * Get the click position in terms of axis values.\n\t *\n\t * @param {Object} e A pointer event\n\t */\n\tgetCoordinates: function (e) {\n\t\tvar coordinates = {\n\t\t\t\txAxis: [],\n\t\t\t\tyAxis: []\n\t\t\t};\n\n\t\teach(this.chart.axes, function (axis) {\n\t\t\tcoordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({\n\t\t\t\taxis: axis,\n\t\t\t\tvalue: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY'])\n\t\t\t});\n\t\t});\n\t\treturn coordinates;\n\t},\n\t\n\t/**\n\t * Return the index in the tooltipPoints array, corresponding to pixel position in \n\t * the plot area.\n\t */\n\tgetIndex: function (e) {\n\t\tvar chart = this.chart;\n\t\treturn chart.inverted ? \n\t\t\tchart.plotHeight + chart.plotTop - e.chartY : \n\t\t\te.chartX - chart.plotLeft;\n\t},\n\n\t/**\n\t * With line type charts with a single tracker, get the point closest to the mouse.\n\t * Run Point.onMouseOver and display tooltip for the point or points.\n\t */\n\trunPointActions: function (e) {\n\t\tvar pointer = this,\n\t\t\tchart = pointer.chart,\n\t\t\tseries = chart.series,\n\t\t\ttooltip = chart.tooltip,\n\t\t\tpoint,\n\t\t\tpoints,\n\t\t\thoverPoint = chart.hoverPoint,\n\t\t\thoverSeries = chart.hoverSeries,\n\t\t\ti,\n\t\t\tj,\n\t\t\tdistance = chart.chartWidth,\n\t\t\tindex = pointer.getIndex(e),\n\t\t\tanchor;\n\n\t\t// shared tooltip\n\t\tif (tooltip && pointer.options.tooltip.shared && !(hoverSeries && hoverSeries.noSharedTooltip)) {\n\t\t\tpoints = [];\n\n\t\t\t// loop over all series and find the ones with points closest to the mouse\n\t\t\ti = series.length;\n\t\t\tfor (j = 0; j < i; j++) {\n\t\t\t\tif (series[j].visible &&\n\t\t\t\t\t\tseries[j].options.enableMouseTracking !== false &&\n\t\t\t\t\t\t!series[j].noSharedTooltip && series[j].tooltipPoints.length) {\n\t\t\t\t\tpoint = series[j].tooltipPoints[index];\n\t\t\t\t\tif (point && point.series) { // not a dummy point, #1544\n\t\t\t\t\t\tpoint._dist = mathAbs(index - point.clientX);\n\t\t\t\t\t\tdistance = mathMin(distance, point._dist);\n\t\t\t\t\t\tpoints.push(point);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// remove furthest points\n\t\t\ti = points.length;\n\t\t\twhile (i--) {\n\t\t\t\tif (points[i]._dist > distance) {\n\t\t\t\t\tpoints.splice(i, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// refresh the tooltip if necessary\n\t\t\tif (points.length && (points[0].clientX !== pointer.hoverX)) {\n\t\t\t\ttooltip.refresh(points, e);\n\t\t\t\tpointer.hoverX = points[0].clientX;\n\t\t\t}\n\t\t}\n\n\t\t// separate tooltip and general mouse events\n\t\tif (hoverSeries && hoverSeries.tracker) { // only use for line-type series with common tracker\n\n\t\t\t// get the point\n\t\t\tpoint = hoverSeries.tooltipPoints[index];\n\n\t\t\t// a new point is hovered, refresh the tooltip\n\t\t\tif (point && point !== hoverPoint) {\n\n\t\t\t\t// trigger the events\n\t\t\t\tpoint.onMouseOver(e);\n\n\t\t\t}\n\t\t\t\n\t\t} else if (tooltip && tooltip.followPointer && !tooltip.isHidden) {\n\t\t\tanchor = tooltip.getAnchor([{}], e);\n\t\t\ttooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] });\n\t\t}\n\t},\n\n\n\n\t/**\n\t * Reset the tracking by hiding the tooltip, the hover series state and the hover point\n\t * \n\t * @param allowMove {Boolean} Instead of destroying the tooltip altogether, allow moving it if possible\n\t */\n\treset: function (allowMove) {\n\t\tvar pointer = this,\n\t\t\tchart = pointer.chart,\n\t\t\thoverSeries = chart.hoverSeries,\n\t\t\thoverPoint = chart.hoverPoint,\n\t\t\ttooltip = chart.tooltip,\n\t\t\ttooltipPoints = tooltip && tooltip.shared ? chart.hoverPoints : hoverPoint;\n\t\t\t\n\t\t// Narrow in allowMove\n\t\tallowMove = allowMove && tooltip && tooltipPoints;\n\t\t\t\n\t\t// Check if the points have moved outside the plot area, #1003\n\t\tif (allowMove && splat(tooltipPoints)[0].plotX === UNDEFINED) {\n\t\t\tallowMove = false;\n\t\t}\t\n\n\t\t// Just move the tooltip, #349\n\t\tif (allowMove) {\n\t\t\ttooltip.refresh(tooltipPoints);\n\n\t\t// Full reset\n\t\t} else {\n\n\t\t\tif (hoverPoint) {\n\t\t\t\thoverPoint.onMouseOut();\n\t\t\t}\n\n\t\t\tif (hoverSeries) {\n\t\t\t\thoverSeries.onMouseOut();\n\t\t\t}\n\n\t\t\tif (tooltip) {\n\t\t\t\ttooltip.hide();\n\t\t\t\ttooltip.hideCrosshairs();\n\t\t\t}\n\n\t\t\tpointer.hoverX = null;\n\n\t\t}\n\t},\n\n\t/**\n\t * Scale series groups to a certain scale and translation\n\t */\n\tscaleGroups: function (attribs, clip) {\n\n\t\tvar chart = this.chart,\n\t\t\tseriesAttribs;\n\n\t\t// Scale each series\n\t\teach(chart.series, function (series) {\n\t\t\tseriesAttribs = attribs || series.getPlotBox(); // #1701\n\t\t\tif (series.xAxis && series.xAxis.zoomEnabled) {\n\t\t\t\tseries.group.attr(seriesAttribs);\n\t\t\t\tif (series.markerGroup) {\n\t\t\t\t\tseries.markerGroup.attr(seriesAttribs);\n\t\t\t\t\tseries.markerGroup.clip(clip ? chart.clipRect : null);\n\t\t\t\t}\n\t\t\t\tif (series.dataLabelsGroup) {\n\t\t\t\t\tseries.dataLabelsGroup.attr(seriesAttribs);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t// Clip\n\t\tchart.clipRect.attr(clip || chart.clipBox);\n\t},\n\n\t/**\n\t * Run translation operations for each direction (horizontal and vertical) independently\n\t */\n\tpinchTranslateDirection: function (horiz, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) {\n\t\tvar chart = this.chart,\n\t\t\txy = horiz ? 'x' : 'y',\n\t\t\tXY = horiz ? 'X' : 'Y',\n\t\t\tsChartXY = 'chart' + XY,\n\t\t\twh = horiz ? 'width' : 'height',\n\t\t\tplotLeftTop = chart['plot' + (horiz ? 'Left' : 'Top')],\n\t\t\tselectionWH,\n\t\t\tselectionXY,\n\t\t\tclipXY,\n\t\t\tscale = 1,\n\t\t\tinverted = chart.inverted,\n\t\t\tbounds = chart.bounds[horiz ? 'h' : 'v'],\n\t\t\tsingleTouch = pinchDown.length === 1,\n\t\t\ttouch0Start = pinchDown[0][sChartXY],\n\t\t\ttouch0Now = touches[0][sChartXY],\n\t\t\ttouch1Start = !singleTouch && pinchDown[1][sChartXY],\n\t\t\ttouch1Now = !singleTouch && touches[1][sChartXY],\n\t\t\toutOfBounds,\n\t\t\ttransformScale,\n\t\t\tscaleKey,\n\t\t\tsetScale = function () {\n\t\t\t\tif (!singleTouch && mathAbs(touch0Start - touch1Start) > 20) { // Don't zoom if fingers are too close on this axis\n\t\t\t\t\tscale = mathAbs(touch0Now - touch1Now) / mathAbs(touch0Start - touch1Start);\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tclipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start;\n\t\t\t\tselectionWH = chart['plot' + (horiz ? 'Width' : 'Height')] / scale;\n\t\t\t};\n\n\t\t// Set the scale, first pass\n\t\tsetScale();\n\n\t\tselectionXY = clipXY; // the clip position (x or y) is altered if out of bounds, the selection position is not\n\n\t\t// Out of bounds\n\t\tif (selectionXY < bounds.min) {\n\t\t\tselectionXY = bounds.min;\n\t\t\toutOfBounds = true;\n\t\t} else if (selectionXY + selectionWH > bounds.max) {\n\t\t\tselectionXY = bounds.max - selectionWH;\n\t\t\toutOfBounds = true;\n\t\t}\n\t\t\n\t\t// Is the chart dragged off its bounds, determined by dataMin and dataMax?\n\t\tif (outOfBounds) {\n\n\t\t\t// Modify the touchNow position in order to create an elastic drag movement. This indicates\n\t\t\t// to the user that the chart is responsive but can't be dragged further.\n\t\t\ttouch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]);\n\t\t\tif (!singleTouch) {\n\t\t\t\ttouch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]);\n\t\t\t}\n\n\t\t\t// Set the scale, second pass to adapt to the modified touchNow positions\n\t\t\tsetScale();\n\n\t\t} else {\n\t\t\tlastValidTouch[xy] = [touch0Now, touch1Now];\n\t\t}\n\n\t\t\n\t\t// Set geometry for clipping, selection and transformation\n\t\tif (!inverted) { // TODO: implement clipping for inverted charts\n\t\t\tclip[xy] = clipXY - plotLeftTop;\n\t\t\tclip[wh] = selectionWH;\n\t\t}\n\t\tscaleKey = inverted ? (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY;\n\t\ttransformScale = inverted ? 1 / scale : scale;\n\n\t\tselectionMarker[wh] = selectionWH;\n\t\tselectionMarker[xy] = selectionXY;\n\t\ttransform[scaleKey] = scale;\n\t\ttransform['translate' + XY] = (transformScale * plotLeftTop) + (touch0Now - (transformScale * touch0Start));\n\t},\n\t\n\t/**\n\t * Handle touch events with two touches\n\t */\n\tpinch: function (e) {\n\n\t\tvar self = this,\n\t\t\tchart = self.chart,\n\t\t\tpinchDown = self.pinchDown,\n\t\t\tfollowTouchMove = chart.tooltip && chart.tooltip.options.followTouchMove,\n\t\t\ttouches = e.touches,\n\t\t\ttouchesLength = touches.length,\n\t\t\tlastValidTouch = self.lastValidTouch,\n\t\t\tzoomHor = self.zoomHor || self.pinchHor,\n\t\t\tzoomVert = self.zoomVert || self.pinchVert,\n\t\t\thasZoom = zoomHor || zoomVert,\n\t\t\tselectionMarker = self.selectionMarker,\n\t\t\ttransform = {},\n\t\t\tfireClickEvent = touchesLength === 1 && ((self.inClass(e.target, PREFIX + 'tracker') && \n\t\t\t\tchart.runTrackerClick) || chart.runChartClick),\n\t\t\tclip = {};\n\n\t\t// On touch devices, only proceed to trigger click if a handler is defined\n\t\tif ((hasZoom || followTouchMove) && !fireClickEvent) {\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\t// Normalize each touch\n\t\tmap(touches, function (e) {\n\t\t\treturn self.normalize(e);\n\t\t});\n\t\t\t\n\t\t// Register the touch start position\n\t\tif (e.type === 'touchstart') {\n\t\t\teach(touches, function (e, i) {\n\t\t\t\tpinchDown[i] = { chartX: e.chartX, chartY: e.chartY };\n\t\t\t});\n\t\t\tlastValidTouch.x = [pinchDown[0].chartX, pinchDown[1] && pinchDown[1].chartX];\n\t\t\tlastValidTouch.y = [pinchDown[0].chartY, pinchDown[1] && pinchDown[1].chartY];\n\n\t\t\t// Identify the data bounds in pixels\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\tif (axis.zoomEnabled) {\n\t\t\t\t\tvar bounds = chart.bounds[axis.horiz ? 'h' : 'v'],\n\t\t\t\t\t\tminPixelPadding = axis.minPixelPadding,\n\t\t\t\t\t\tmin = axis.toPixels(axis.dataMin),\n\t\t\t\t\t\tmax = axis.toPixels(axis.dataMax),\n\t\t\t\t\t\tabsMin = mathMin(min, max),\n\t\t\t\t\t\tabsMax = mathMax(min, max);\n\n\t\t\t\t\t// Store the bounds for use in the touchmove handler\n\t\t\t\t\tbounds.min = mathMin(axis.pos, absMin - minPixelPadding);\n\t\t\t\t\tbounds.max = mathMax(axis.pos + axis.len, absMax + minPixelPadding);\n\t\t\t\t}\n\t\t\t});\n\t\t\n\t\t// Event type is touchmove, handle panning and pinching\n\t\t} else if (pinchDown.length) { // can be 0 when releasing, if touchend fires first\n\t\t\t\n\n\t\t\t// Set the marker\n\t\t\tif (!selectionMarker) {\n\t\t\t\tself.selectionMarker = selectionMarker = extend({\n\t\t\t\t\tdestroy: noop\n\t\t\t\t}, chart.plotBox);\n\t\t\t}\n\n\t\t\t\n\n\t\t\tif (zoomHor) {\n\t\t\t\tself.pinchTranslateDirection(true, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch);\n\t\t\t}\n\t\t\tif (zoomVert) {\n\t\t\t\tself.pinchTranslateDirection(false, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch);\n\t\t\t}\n\n\t\t\tself.hasPinched = hasZoom;\n\n\t\t\t// Scale and translate the groups to provide visual feedback during pinching\n\t\t\tself.scaleGroups(transform, clip);\n\t\t\t\n\t\t\t// Optionally move the tooltip on touchmove\n\t\t\tif (!hasZoom && followTouchMove && touchesLength === 1) {\n\t\t\t\tthis.runPointActions(self.normalize(e));\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Start a drag operation\n\t */\n\tdragStart: function (e) {\n\t\tvar chart = this.chart;\n\n\t\t// Record the start position\n\t\tchart.mouseIsDown = e.type;\n\t\tchart.cancelClick = false;\n\t\tchart.mouseDownX = this.mouseDownX = e.chartX;\n\t\tchart.mouseDownY = this.mouseDownY = e.chartY;\n\t},\n\n\t/**\n\t * Perform a drag operation in response to a mousemove event while the mouse is down\n\t */\n\tdrag: function (e) {\n\n\t\tvar chart = this.chart,\n\t\t\tchartOptions = chart.options.chart,\n\t\t\tchartX = e.chartX,\n\t\t\tchartY = e.chartY,\n\t\t\tzoomHor = this.zoomHor,\n\t\t\tzoomVert = this.zoomVert,\n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tclickedInside,\n\t\t\tsize,\n\t\t\tmouseDownX = this.mouseDownX,\n\t\t\tmouseDownY = this.mouseDownY;\n\n\t\t// If the mouse is outside the plot area, adjust to cooordinates\n\t\t// inside to prevent the selection marker from going outside\n\t\tif (chartX < plotLeft) {\n\t\t\tchartX = plotLeft;\n\t\t} else if (chartX > plotLeft + plotWidth) {\n\t\t\tchartX = plotLeft + plotWidth;\n\t\t}\n\n\t\tif (chartY < plotTop) {\n\t\t\tchartY = plotTop;\n\t\t} else if (chartY > plotTop + plotHeight) {\n\t\t\tchartY = plotTop + plotHeight;\n\t\t}\n\t\t\n\t\t// determine if the mouse has moved more than 10px\n\t\tthis.hasDragged = Math.sqrt(\n\t\t\tMath.pow(mouseDownX - chartX, 2) +\n\t\t\tMath.pow(mouseDownY - chartY, 2)\n\t\t);\n\t\tif (this.hasDragged > 10) {\n\t\t\tclickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop);\n\n\t\t\t// make a selection\n\t\t\tif (chart.hasCartesianSeries && (this.zoomX || this.zoomY) && clickedInside) {\n\t\t\t\tif (!this.selectionMarker) {\n\t\t\t\t\tthis.selectionMarker = chart.renderer.rect(\n\t\t\t\t\t\tplotLeft,\n\t\t\t\t\t\tplotTop,\n\t\t\t\t\t\tzoomHor ? 1 : plotWidth,\n\t\t\t\t\t\tzoomVert ? 1 : plotHeight,\n\t\t\t\t\t\t0\n\t\t\t\t\t)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tfill: chartOptions.selectionMarkerFill || 'rgba(69,114,167,0.25)',\n\t\t\t\t\t\tzIndex: 7\n\t\t\t\t\t})\n\t\t\t\t\t.add();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// adjust the width of the selection marker\n\t\t\tif (this.selectionMarker && zoomHor) {\n\t\t\t\tsize = chartX - mouseDownX;\n\t\t\t\tthis.selectionMarker.attr({\n\t\t\t\t\twidth: mathAbs(size),\n\t\t\t\t\tx: (size > 0 ? 0 : size) + mouseDownX\n\t\t\t\t});\n\t\t\t}\n\t\t\t// adjust the height of the selection marker\n\t\t\tif (this.selectionMarker && zoomVert) {\n\t\t\t\tsize = chartY - mouseDownY;\n\t\t\t\tthis.selectionMarker.attr({\n\t\t\t\t\theight: mathAbs(size),\n\t\t\t\t\ty: (size > 0 ? 0 : size) + mouseDownY\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// panning\n\t\t\tif (clickedInside && !this.selectionMarker && chartOptions.panning) {\n\t\t\t\tchart.pan(e, chartOptions.panning);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * On mouse up or touch end across the entire document, drop the selection.\n\t */\n\tdrop: function (e) {\n\t\tvar chart = this.chart,\n\t\t\thasPinched = this.hasPinched;\n\n\t\tif (this.selectionMarker) {\n\t\t\tvar selectionData = {\n\t\t\t\t\txAxis: [],\n\t\t\t\t\tyAxis: [],\n\t\t\t\t\toriginalEvent: e.originalEvent || e\n\t\t\t\t},\n\t\t\t\tselectionBox = this.selectionMarker,\n\t\t\t\tselectionLeft = selectionBox.x,\n\t\t\t\tselectionTop = selectionBox.y,\n\t\t\t\trunZoom;\n\t\t\t// a selection has been made\n\t\t\tif (this.hasDragged || hasPinched) {\n\n\t\t\t\t// record each axis' min and max\n\t\t\t\teach(chart.axes, function (axis) {\n\t\t\t\t\tif (axis.zoomEnabled) {\n\t\t\t\t\t\tvar horiz = axis.horiz,\n\t\t\t\t\t\t\tselectionMin = axis.toValue((horiz ? selectionLeft : selectionTop)),\n\t\t\t\t\t\t\tselectionMax = axis.toValue((horiz ? selectionLeft + selectionBox.width : selectionTop + selectionBox.height));\n\n\t\t\t\t\t\tif (!isNaN(selectionMin) && !isNaN(selectionMax)) { // #859\n\t\t\t\t\t\t\tselectionData[axis.xOrY + 'Axis'].push({\n\t\t\t\t\t\t\t\taxis: axis,\n\t\t\t\t\t\t\t\tmin: mathMin(selectionMin, selectionMax), // for reversed axes,\n\t\t\t\t\t\t\t\tmax: mathMax(selectionMin, selectionMax)\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\trunZoom = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (runZoom) {\n\t\t\t\t\tfireEvent(chart, 'selection', selectionData, function (args) { \n\t\t\t\t\t\tchart.zoom(extend(args, hasPinched ? { animation: false } : null)); \n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tthis.selectionMarker = this.selectionMarker.destroy();\n\n\t\t\t// Reset scaling preview\n\t\t\tif (hasPinched) {\n\t\t\t\tthis.scaleGroups();\n\t\t\t}\n\t\t}\n\n\t\t// Reset all\n\t\tif (chart) { // it may be destroyed on mouse up - #877\n\t\t\tcss(chart.container, { cursor: chart._cursor });\n\t\t\tchart.cancelClick = this.hasDragged > 10; // #370\n\t\t\tchart.mouseIsDown = this.hasDragged = this.hasPinched = false;\n\t\t\tthis.pinchDown = [];\n\t\t}\n\t},\n\n\tonContainerMouseDown: function (e) {\n\n\t\te = this.normalize(e);\n\n\t\t// issue #295, dragging not always working in Firefox\n\t\tif (e.preventDefault) {\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\tthis.dragStart(e);\n\t},\n\n\t\n\n\tonDocumentMouseUp: function (e) {\n\t\tthis.drop(e);\n\t},\n\n\t/**\n\t * Special handler for mouse move that will hide the tooltip when the mouse leaves the plotarea.\n\t * Issue #149 workaround. The mouseleave event does not always fire. \n\t */\n\tonDocumentMouseMove: function (e) {\n\t\tvar chart = this.chart,\n\t\t\tchartPosition = this.chartPosition,\n\t\t\thoverSeries = chart.hoverSeries;\n\n\t\te = this.normalize(e, chartPosition);\n\n\t\t// If we're outside, hide the tooltip\n\t\tif (chartPosition && hoverSeries && !this.inClass(e.target, 'highcharts-tracker') &&\n\t\t\t\t!chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\t\t\tthis.reset();\n\t\t}\n\t},\n\n\t/**\n\t * When mouse leaves the container, hide the tooltip.\n\t */\n\tonContainerMouseLeave: function () {\n\t\tthis.reset();\n\t\tthis.chartPosition = null; // also reset the chart position, used in #149 fix\n\t},\n\n\t// The mousemove, touchmove and touchstart event handler\n\tonContainerMouseMove: function (e) {\n\n\t\tvar chart = this.chart;\n\n\t\t// normalize\n\t\te = this.normalize(e);\n\n\t\t// #295\n\t\te.returnValue = false;\n\t\t\n\t\t\n\t\tif (chart.mouseIsDown === 'mousedown') {\n\t\t\tthis.drag(e);\n\t\t} \n\t\t\n\t\t// Show the tooltip and run mouse over events (#977)\n\t\tif ((this.inClass(e.target, 'highcharts-tracker') || \n\t\t\t\tchart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) && !chart.openMenu) {\n\t\t\tthis.runPointActions(e);\n\t\t}\n\t},\n\n\t/**\n\t * Utility to detect whether an element has, or has a parent with, a specific\n\t * class name. Used on detection of tracker objects and on deciding whether\n\t * hovering the tooltip should cause the active series to mouse out.\n\t */\n\tinClass: function (element, className) {\n\t\tvar elemClassName;\n\t\twhile (element) {\n\t\t\telemClassName = attr(element, 'class');\n\t\t\tif (elemClassName) {\n\t\t\t\tif (elemClassName.indexOf(className) !== -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (elemClassName.indexOf(PREFIX + 'container') !== -1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telement = element.parentNode;\n\t\t}\t\t\n\t},\n\n\tonTrackerMouseOut: function (e) {\n\t\tvar series = this.chart.hoverSeries;\n\t\tif (series && !series.options.stickyTracking && !this.inClass(e.toElement || e.relatedTarget, PREFIX + 'tooltip')) {\n\t\t\tseries.onMouseOut();\n\t\t}\n\t},\n\n\tonContainerClick: function (e) {\n\t\tvar chart = this.chart,\n\t\t\thoverPoint = chart.hoverPoint, \n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tinverted = chart.inverted,\n\t\t\tchartPosition,\n\t\t\tplotX,\n\t\t\tplotY;\n\t\t\n\t\te = this.normalize(e);\n\t\te.cancelBubble = true; // IE specific\n\n\t\tif (!chart.cancelClick) {\n\t\t\t\n\t\t\t// On tracker click, fire the series and point events. #783, #1583\n\t\t\tif (hoverPoint && this.inClass(e.target, PREFIX + 'tracker')) {\n\t\t\t\tchartPosition = this.chartPosition;\n\t\t\t\tplotX = hoverPoint.plotX;\n\t\t\t\tplotY = hoverPoint.plotY;\n\n\t\t\t\t// add page position info\n\t\t\t\textend(hoverPoint, {\n\t\t\t\t\tpageX: chartPosition.left + plotLeft +\n\t\t\t\t\t\t(inverted ? chart.plotWidth - plotY : plotX),\n\t\t\t\t\tpageY: chartPosition.top + plotTop +\n\t\t\t\t\t\t(inverted ? chart.plotHeight - plotX : plotY)\n\t\t\t\t});\n\t\t\t\n\t\t\t\t// the series click event\n\t\t\t\tfireEvent(hoverPoint.series, 'click', extend(e, {\n\t\t\t\t\tpoint: hoverPoint\n\t\t\t\t}));\n\n\t\t\t\t// the point click event\n\t\t\t\tif (chart.hoverPoint) { // it may be destroyed (#1844)\n\t\t\t\t\thoverPoint.firePointEvent('click', e);\n\t\t\t\t}\n\n\t\t\t// When clicking outside a tracker, fire a chart event\n\t\t\t} else {\n\t\t\t\textend(e, this.getCoordinates(e));\n\n\t\t\t\t// fire a click event in the chart\n\t\t\t\tif (chart.isInsidePlot(e.chartX - plotLeft, e.chartY - plotTop)) {\n\t\t\t\t\tfireEvent(chart, 'click', e);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\t},\n\n\tonContainerTouchStart: function (e) {\n\t\tvar chart = this.chart;\n\n\t\tif (e.touches.length === 1) {\n\n\t\t\te = this.normalize(e);\n\n\t\t\tif (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\n\t\t\t\t// Prevent the click pseudo event from firing unless it is set in the options\n\t\t\t\t/*if (!chart.runChartClick) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}*/\n\t\t\t\n\t\t\t\t// Run mouse events and display tooltip etc\n\t\t\t\tthis.runPointActions(e);\n\n\t\t\t\tthis.pinch(e);\n\n\t\t\t} else {\n\t\t\t\t// Hide the tooltip on touching outside the plot area (#1203)\n\t\t\t\tthis.reset();\n\t\t\t}\n\n\t\t} else if (e.touches.length === 2) {\n\t\t\tthis.pinch(e);\n\t\t}\t\t\n\t},\n\n\tonContainerTouchMove: function (e) {\n\t\tif (e.touches.length === 1 || e.touches.length === 2) {\n\t\t\tthis.pinch(e);\n\t\t}\n\t},\n\n\tonDocumentTouchEnd: function (e) {\n\t\tthis.drop(e);\n\t},\n\n\t/**\n\t * Set the JS DOM events on the container and document. This method should contain\n\t * a one-to-one assignment between methods and their handlers. Any advanced logic should\n\t * be moved to the handler reflecting the event's name.\n\t */\n\tsetDOMEvents: function () {\n\n\t\tvar pointer = this,\n\t\t\tcontainer = pointer.chart.container,\n\t\t\tevents;\n\n\t\tthis._events = events = [\n\t\t\t[container, 'onmousedown', 'onContainerMouseDown'],\n\t\t\t[container, 'onmousemove', 'onContainerMouseMove'],\n\t\t\t[container, 'onclick', 'onContainerClick'],\n\t\t\t[container, 'mouseleave', 'onContainerMouseLeave'],\n\t\t\t[doc, 'mousemove', 'onDocumentMouseMove'],\n\t\t\t[doc, 'mouseup', 'onDocumentMouseUp']\n\t\t];\n\n\t\tif (hasTouch) {\n\t\t\tevents.push(\n\t\t\t\t[container, 'ontouchstart', 'onContainerTouchStart'],\n\t\t\t\t[container, 'ontouchmove', 'onContainerTouchMove'],\n\t\t\t\t[doc, 'touchend', 'onDocumentTouchEnd']\n\t\t\t);\n\t\t}\n\n\t\teach(events, function (eventConfig) {\n\n\t\t\t// First, create the callback function that in turn calls the method on Pointer\n\t\t\tpointer['_' + eventConfig[2]] = function (e) {\n\t\t\t\tpointer[eventConfig[2]](e);\n\t\t\t};\n\n\t\t\t// Now attach the function, either as a direct property or through addEvent\n\t\t\tif (eventConfig[1].indexOf('on') === 0) {\n\t\t\t\teventConfig[0][eventConfig[1]] = pointer['_' + eventConfig[2]];\n\t\t\t} else {\n\t\t\t\taddEvent(eventConfig[0], eventConfig[1], pointer['_' + eventConfig[2]]);\n\t\t\t}\n\t\t});\n\n\t\t\n\t},\n\n\t/**\n\t * Destroys the Pointer object and disconnects DOM events.\n\t */\n\tdestroy: function () {\n\t\tvar pointer = this;\n\n\t\t// Release all DOM events\n\t\teach(pointer._events, function (eventConfig) {\t\n\t\t\tif (eventConfig[1].indexOf('on') === 0) {\n\t\t\t\teventConfig[0][eventConfig[1]] = null; // delete breaks oldIE\n\t\t\t} else {\t\t\n\t\t\t\tremoveEvent(eventConfig[0], eventConfig[1], pointer['_' + eventConfig[2]]);\n\t\t\t}\n\t\t});\n\t\tdelete pointer._events;\n\n\t\t// memory and CPU leak\n\t\tclearInterval(pointer.tooltipTimeout);\n\t}\n};\n/**\n * The overview of the chart's series\n */\nfunction Legend(chart, options) {\n\tthis.init(chart, options);\n}\n\nLegend.prototype = {\n\t\n\t/**\n\t * Initialize the legend\n\t */\n\tinit: function (chart, options) {\n\t\t\n\t\tvar legend = this,\n\t\t\titemStyle = options.itemStyle,\n\t\t\tpadding = pick(options.padding, 8),\n\t\t\titemMarginTop = options.itemMarginTop || 0;\n\t\n\t\tthis.options = options;\n\n\t\tif (!options.enabled) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tlegend.baseline = pInt(itemStyle.fontSize) + 3 + itemMarginTop; // used in Series prototype\n\t\tlegend.itemStyle = itemStyle;\n\t\tlegend.itemHiddenStyle = merge(itemStyle, options.itemHiddenStyle);\n\t\tlegend.itemMarginTop = itemMarginTop;\n\t\tlegend.padding = padding;\n\t\tlegend.initialItemX = padding;\n\t\tlegend.initialItemY = padding - 5; // 5 is the number of pixels above the text\n\t\tlegend.maxItemWidth = 0;\n\t\tlegend.chart = chart;\n\t\tlegend.itemHeight = 0;\n\t\tlegend.lastLineHeight = 0;\n\n\t\t// Render it\n\t\tlegend.render();\n\n\t\t// move checkboxes\n\t\taddEvent(legend.chart, 'endResize', function () { \n\t\t\tlegend.positionCheckboxes();\n\t\t});\n\n\t},\n\n\t/**\n\t * Set the colors for the legend item\n\t * @param {Object} item A Series or Point instance\n\t * @param {Object} visible Dimmed or colored\n\t */\n\tcolorizeItem: function (item, visible) {\n\t\tvar legend = this,\n\t\t\toptions = legend.options,\n\t\t\tlegendItem = item.legendItem,\n\t\t\tlegendLine = item.legendLine,\n\t\t\tlegendSymbol = item.legendSymbol,\n\t\t\thiddenColor = legend.itemHiddenStyle.color,\n\t\t\ttextColor = visible ? options.itemStyle.color : hiddenColor,\n\t\t\tsymbolColor = visible ? item.color : hiddenColor,\n\t\t\tmarkerOptions = item.options && item.options.marker,\n\t\t\tsymbolAttr = {\n\t\t\t\tstroke: symbolColor,\n\t\t\t\tfill: symbolColor\n\t\t\t},\n\t\t\tkey,\n\t\t\tval;\n\t\t\n\t\tif (legendItem) {\n\t\t\tlegendItem.css({ fill: textColor, color: textColor }); // color for #1553, oldIE\n\t\t}\n\t\tif (legendLine) {\n\t\t\tlegendLine.attr({ stroke: symbolColor });\n\t\t}\n\t\t\n\t\tif (legendSymbol) {\n\t\t\t\n\t\t\t// Apply marker options\n\t\t\tif (markerOptions && legendSymbol.isMarker) { // #585\n\t\t\t\tmarkerOptions = item.convertAttribs(markerOptions);\n\t\t\t\tfor (key in markerOptions) {\n\t\t\t\t\tval = markerOptions[key];\n\t\t\t\t\tif (val !== UNDEFINED) {\n\t\t\t\t\t\tsymbolAttr[key] = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlegendSymbol.attr(symbolAttr);\n\t\t}\n\t},\n\n\t/**\n\t * Position the legend item\n\t * @param {Object} item A Series or Point instance\n\t */\n\tpositionItem: function (item) {\n\t\tvar legend = this,\n\t\t\toptions = legend.options,\n\t\t\tsymbolPadding = options.symbolPadding,\n\t\t\tltr = !options.rtl,\n\t\t\tlegendItemPos = item._legendItemPos,\n\t\t\titemX = legendItemPos[0],\n\t\t\titemY = legendItemPos[1],\n\t\t\tcheckbox = item.checkbox;\n\n\t\tif (item.legendGroup) {\n\t\t\titem.legendGroup.translate(\n\t\t\t\tltr ? itemX : legend.legendWidth - itemX - 2 * symbolPadding - 4,\n\t\t\t\titemY\n\t\t\t);\n\t\t}\n\n\t\tif (checkbox) {\n\t\t\tcheckbox.x = itemX;\n\t\t\tcheckbox.y = itemY;\n\t\t}\n\t},\n\n\t/**\n\t * Destroy a single legend item\n\t * @param {Object} item The series or point\n\t */\n\tdestroyItem: function (item) {\n\t\tvar checkbox = item.checkbox;\n\n\t\t// destroy SVG elements\n\t\teach(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function (key) {\n\t\t\tif (item[key]) {\n\t\t\t\titem[key] = item[key].destroy();\n\t\t\t}\n\t\t});\n\n\t\tif (checkbox) {\n\t\t\tdiscardElement(item.checkbox);\n\t\t}\n\t},\n\n\t/**\n\t * Destroys the legend.\n\t */\n\tdestroy: function () {\n\t\tvar legend = this,\n\t\t\tlegendGroup = legend.group,\n\t\t\tbox = legend.box;\n\n\t\tif (box) {\n\t\t\tlegend.box = box.destroy();\n\t\t}\n\n\t\tif (legendGroup) {\n\t\t\tlegend.group = legendGroup.destroy();\n\t\t}\n\t},\n\n\t/**\n\t * Position the checkboxes after the width is determined\n\t */\n\tpositionCheckboxes: function (scrollOffset) {\n\t\tvar alignAttr = this.group.alignAttr,\n\t\t\ttranslateY,\n\t\t\tclipHeight = this.clipHeight || this.legendHeight;\n\n\t\tif (alignAttr) {\n\t\t\ttranslateY = alignAttr.translateY;\n\t\t\teach(this.allItems, function (item) {\n\t\t\t\tvar checkbox = item.checkbox,\n\t\t\t\t\ttop;\n\t\t\t\t\n\t\t\t\tif (checkbox) {\n\t\t\t\t\ttop = (translateY + checkbox.y + (scrollOffset || 0) + 3);\n\t\t\t\t\tcss(checkbox, {\n\t\t\t\t\t\tleft: (alignAttr.translateX + item.legendItemWidth + checkbox.x - 20) + PX,\n\t\t\t\t\t\ttop: top + PX,\n\t\t\t\t\t\tdisplay: top > translateY - 6 && top < translateY + clipHeight - 6 ? '' : NONE\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Render the legend title on top of the legend\n\t */\n\trenderTitle: function () {\n\t\tvar options = this.options,\n\t\t\tpadding = this.padding,\n\t\t\ttitleOptions = options.title,\n\t\t\ttitleHeight = 0,\n\t\t\tbBox;\n\t\t\n\t\tif (titleOptions.text) {\n\t\t\tif (!this.title) {\n\t\t\t\tthis.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, null, null, null, null, null, 'legend-title')\n\t\t\t\t\t.attr({ zIndex: 1 })\n\t\t\t\t\t.css(titleOptions.style)\n\t\t\t\t\t.add(this.group);\n\t\t\t}\n\t\t\tbBox = this.title.getBBox();\n\t\t\ttitleHeight = bBox.height;\n\t\t\tthis.offsetWidth = bBox.width; // #1717\n\t\t\tthis.contentGroup.attr({ translateY: titleHeight });\n\t\t}\n\t\tthis.titleHeight = titleHeight;\n\t},\n\n\t/**\n\t * Render a single specific legend item\n\t * @param {Object} item A series or point\n\t */\n\trenderItem: function (item) {\n\t\tvar legend = this,\n\t\t\tchart = legend.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = legend.options,\n\t\t\thorizontal = options.layout === 'horizontal',\n\t\t\tsymbolWidth = options.symbolWidth,\n\t\t\tsymbolPadding = options.symbolPadding,\n\t\t\titemStyle = legend.itemStyle,\n\t\t\titemHiddenStyle = legend.itemHiddenStyle,\n\t\t\tpadding = legend.padding,\n\t\t\titemDistance = horizontal ? pick(options.itemDistance, 8) : 0,\n\t\t\tltr = !options.rtl,\n\t\t\titemHeight,\n\t\t\twidthOption = options.width,\n\t\t\titemMarginBottom = options.itemMarginBottom || 0,\n\t\t\titemMarginTop = legend.itemMarginTop,\n\t\t\tinitialItemX = legend.initialItemX,\n\t\t\tbBox,\n\t\t\titemWidth,\n\t\t\tli = item.legendItem,\n\t\t\tseries = item.series || item,\n\t\t\titemOptions = series.options,\n\t\t\tshowCheckbox = itemOptions.showCheckbox,\n\t\t\tuseHTML = options.useHTML;\n\n\t\tif (!li) { // generate it once, later move it\n\n\t\t\t// Generate the group box\n\t\t\t// A group to hold the symbol and text. Text is to be appended in Legend class.\n\t\t\titem.legendGroup = renderer.g('legend-item')\n\t\t\t\t.attr({ zIndex: 1 })\n\t\t\t\t.add(legend.scrollGroup);\n\n\t\t\t// Draw the legend symbol inside the group box\n\t\t\tseries.drawLegendSymbol(legend, item);\n\n\t\t\t// Generate the list item text and add it to the group\n\t\t\titem.legendItem = li = renderer.text(\n\t\t\t\t\toptions.labelFormat ? format(options.labelFormat, item) : options.labelFormatter.call(item),\n\t\t\t\t\tltr ? symbolWidth + symbolPadding : -symbolPadding,\n\t\t\t\t\tlegend.baseline,\n\t\t\t\t\tuseHTML\n\t\t\t\t)\n\t\t\t\t.css(merge(item.visible ? itemStyle : itemHiddenStyle)) // merge to prevent modifying original (#1021)\n\t\t\t\t.attr({\n\t\t\t\t\talign: ltr ? 'left' : 'right',\n\t\t\t\t\tzIndex: 2\n\t\t\t\t})\n\t\t\t\t.add(item.legendGroup);\n\n\t\t\t// Set the events on the item group, or in case of useHTML, the item itself (#1249)\n\t\t\t(useHTML ? li : item.legendGroup).on('mouseover', function () {\n\t\t\t\t\titem.setState(HOVER_STATE);\n\t\t\t\t\tli.css(legend.options.itemHoverStyle);\n\t\t\t\t})\n\t\t\t\t.on('mouseout', function () {\n\t\t\t\t\tli.css(item.visible ? itemStyle : itemHiddenStyle);\n\t\t\t\t\titem.setState();\n\t\t\t\t})\n\t\t\t\t.on('click', function (event) {\n\t\t\t\t\tvar strLegendItemClick = 'legendItemClick',\n\t\t\t\t\t\tfnLegendItemClick = function () {\n\t\t\t\t\t\t\titem.setVisible();\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t// Pass over the click/touch event. #4.\n\t\t\t\t\tevent = {\n\t\t\t\t\t\tbrowserEvent: event\n\t\t\t\t\t};\n\n\t\t\t\t\t// click the name or symbol\n\t\t\t\t\tif (item.firePointEvent) { // point\n\t\t\t\t\t\titem.firePointEvent(strLegendItemClick, event, fnLegendItemClick);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfireEvent(item, strLegendItemClick, event, fnLegendItemClick);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t// Colorize the items\n\t\t\tlegend.colorizeItem(item, item.visible);\n\n\t\t\t// add the HTML checkbox on top\n\t\t\tif (itemOptions && showCheckbox) {\n\t\t\t\titem.checkbox = createElement('input', {\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchecked: item.selected,\n\t\t\t\t\tdefaultChecked: item.selected // required by IE7\n\t\t\t\t}, options.itemCheckboxStyle, chart.container);\n\n\t\t\t\taddEvent(item.checkbox, 'click', function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\tfireEvent(item, 'checkboxClick', {\n\t\t\t\t\t\t\tchecked: target.checked\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\titem.select();\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// calculate the positions for the next line\n\t\tbBox = li.getBBox();\n\n\t\titemWidth = item.legendItemWidth =\n\t\t\toptions.itemWidth || symbolWidth + symbolPadding + bBox.width + itemDistance +\n\t\t\t(showCheckbox ? 20 : 0);\n\t\tlegend.itemHeight = itemHeight = bBox.height;\n\n\t\t// if the item exceeds the width, start a new line\n\t\tif (horizontal && legend.itemX - initialItemX + itemWidth >\n\t\t\t\t(widthOption || (chart.chartWidth - 2 * padding - initialItemX))) {\n\t\t\tlegend.itemX = initialItemX;\n\t\t\tlegend.itemY += itemMarginTop + legend.lastLineHeight + itemMarginBottom;\n\t\t\tlegend.lastLineHeight = 0; // reset for next line\n\t\t}\n\n\t\t// If the item exceeds the height, start a new column\n\t\t/*if (!horizontal && legend.itemY + options.y + itemHeight > chart.chartHeight - spacingTop - spacingBottom) {\n\t\t\tlegend.itemY = legend.initialItemY;\n\t\t\tlegend.itemX += legend.maxItemWidth;\n\t\t\tlegend.maxItemWidth = 0;\n\t\t}*/\n\n\t\t// Set the edge positions\n\t\tlegend.maxItemWidth = mathMax(legend.maxItemWidth, itemWidth);\n\t\tlegend.lastItemY = itemMarginTop + legend.itemY + itemMarginBottom;\n\t\tlegend.lastLineHeight = mathMax(itemHeight, legend.lastLineHeight); // #915\n\n\t\t// cache the position of the newly generated or reordered items\n\t\titem._legendItemPos = [legend.itemX, legend.itemY];\n\n\t\t// advance\n\t\tif (horizontal) {\n\t\t\tlegend.itemX += itemWidth;\n\n\t\t} else {\n\t\t\tlegend.itemY += itemMarginTop + itemHeight + itemMarginBottom;\n\t\t\tlegend.lastLineHeight = itemHeight;\n\t\t}\n\n\t\t// the width of the widest item\n\t\tlegend.offsetWidth = widthOption || mathMax(\n\t\t\t(horizontal ? legend.itemX - initialItemX - itemDistance : itemWidth) + padding,\n\t\t\tlegend.offsetWidth\n\t\t);\n\t},\n\n\t/**\n\t * Render the legend. This method can be called both before and after\n\t * chart.render. If called after, it will only rearrange items instead\n\t * of creating new ones.\n\t */\n\trender: function () {\n\t\tvar legend = this,\n\t\t\tchart = legend.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tlegendGroup = legend.group,\n\t\t\tallItems,\n\t\t\tdisplay,\n\t\t\tlegendWidth,\n\t\t\tlegendHeight,\n\t\t\tbox = legend.box,\n\t\t\toptions = legend.options,\n\t\t\tpadding = legend.padding,\n\t\t\tlegendBorderWidth = options.borderWidth,\n\t\t\tlegendBackgroundColor = options.backgroundColor;\n\n\t\tlegend.itemX = legend.initialItemX;\n\t\tlegend.itemY = legend.initialItemY;\n\t\tlegend.offsetWidth = 0;\n\t\tlegend.lastItemY = 0;\n\n\t\tif (!legendGroup) {\n\t\t\tlegend.group = legendGroup = renderer.g('legend')\n\t\t\t\t.attr({ zIndex: 7 }) \n\t\t\t\t.add();\n\t\t\tlegend.contentGroup = renderer.g()\n\t\t\t\t.attr({ zIndex: 1 }) // above background\n\t\t\t\t.add(legendGroup);\n\t\t\tlegend.scrollGroup = renderer.g()\n\t\t\t\t.add(legend.contentGroup);\n\t\t}\n\t\t\n\t\tlegend.renderTitle();\n\n\t\t// add each series or point\n\t\tallItems = [];\n\t\teach(chart.series, function (serie) {\n\t\t\tvar seriesOptions = serie.options;\n\n\t\t\tif (!seriesOptions.showInLegend || defined(seriesOptions.linkedTo)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// use points or series for the legend item depending on legendType\n\t\t\tallItems = allItems.concat(\n\t\t\t\t\tserie.legendItems ||\n\t\t\t\t\t(seriesOptions.legendType === 'point' ?\n\t\t\t\t\t\t\tserie.data :\n\t\t\t\t\t\t\tserie)\n\t\t\t);\n\t\t});\n\n\t\t// sort by legendIndex\n\t\tstableSort(allItems, function (a, b) {\n\t\t\treturn ((a.options && a.options.legendIndex) || 0) - ((b.options && b.options.legendIndex) || 0);\n\t\t});\n\n\t\t// reversed legend\n\t\tif (options.reversed) {\n\t\t\tallItems.reverse();\n\t\t}\n\n\t\tlegend.allItems = allItems;\n\t\tlegend.display = display = !!allItems.length;\n\n\t\t// render the items\n\t\teach(allItems, function (item) {\n\t\t\tlegend.renderItem(item); \n\t\t});\n\n\t\t// Draw the border\n\t\tlegendWidth = options.width || legend.offsetWidth;\n\t\tlegendHeight = legend.lastItemY + legend.lastLineHeight + legend.titleHeight;\n\t\t\n\t\t\n\t\tlegendHeight = legend.handleOverflow(legendHeight);\n\n\t\tif (legendBorderWidth || legendBackgroundColor) {\n\t\t\tlegendWidth += padding;\n\t\t\tlegendHeight += padding;\n\n\t\t\tif (!box) {\n\t\t\t\tlegend.box = box = renderer.rect(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tlegendWidth,\n\t\t\t\t\tlegendHeight,\n\t\t\t\t\toptions.borderRadius,\n\t\t\t\t\tlegendBorderWidth || 0\n\t\t\t\t).attr({\n\t\t\t\t\tstroke: options.borderColor,\n\t\t\t\t\t'stroke-width': legendBorderWidth || 0,\n\t\t\t\t\tfill: legendBackgroundColor || NONE\n\t\t\t\t})\n\t\t\t\t.add(legendGroup)\n\t\t\t\t.shadow(options.shadow);\n\t\t\t\tbox.isNew = true;\n\n\t\t\t} else if (legendWidth > 0 && legendHeight > 0) {\n\t\t\t\tbox[box.isNew ? 'attr' : 'animate'](\n\t\t\t\t\tbox.crisp(null, null, null, legendWidth, legendHeight)\n\t\t\t\t);\n\t\t\t\tbox.isNew = false;\n\t\t\t}\n\n\t\t\t// hide the border if no items\n\t\t\tbox[display ? 'show' : 'hide']();\n\t\t}\n\t\t\n\t\tlegend.legendWidth = legendWidth;\n\t\tlegend.legendHeight = legendHeight;\n\n\t\t// Now that the legend width and height are established, put the items in the \n\t\t// final position\n\t\teach(allItems, function (item) {\n\t\t\tlegend.positionItem(item);\n\t\t});\n\n\t\t// 1.x compatibility: positioning based on style\n\t\t/*var props = ['left', 'right', 'top', 'bottom'],\n\t\t\tprop,\n\t\t\ti = 4;\n\t\twhile (i--) {\n\t\t\tprop = props[i];\n\t\t\tif (options.style[prop] && options.style[prop] !== 'auto') {\n\t\t\t\toptions[i < 2 ? 'align' : 'verticalAlign'] = prop;\n\t\t\t\toptions[i < 2 ? 'x' : 'y'] = pInt(options.style[prop]) * (i % 2 ? -1 : 1);\n\t\t\t}\n\t\t}*/\n\n\t\tif (display) {\n\t\t\tlegendGroup.align(extend({\n\t\t\t\twidth: legendWidth,\n\t\t\t\theight: legendHeight\n\t\t\t}, options), true, 'spacingBox');\n\t\t}\n\n\t\tif (!chart.isResizing) {\n\t\t\tthis.positionCheckboxes();\n\t\t}\n\t},\n\t\n\t/**\n\t * Set up the overflow handling by adding navigation with up and down arrows below the\n\t * legend.\n\t */\n\thandleOverflow: function (legendHeight) {\n\t\tvar legend = this,\n\t\t\tchart = this.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tpageCount,\n\t\t\toptions = this.options,\n\t\t\toptionsY = options.y,\n\t\t\talignTop = options.verticalAlign === 'top',\n\t\t\tspaceHeight = chart.spacingBox.height + (alignTop ? -optionsY : optionsY) - this.padding,\n\t\t\tmaxHeight = options.maxHeight,\n\t\t\tclipHeight,\n\t\t\tclipRect = this.clipRect,\n\t\t\tnavOptions = options.navigation,\n\t\t\tanimation = pick(navOptions.animation, true),\n\t\t\tarrowSize = navOptions.arrowSize || 12,\n\t\t\tnav = this.nav;\n\t\t\t\n\t\t// Adjust the height\n\t\tif (options.layout === 'horizontal') {\n\t\t\tspaceHeight /= 2;\n\t\t}\n\t\tif (maxHeight) {\n\t\t\tspaceHeight = mathMin(spaceHeight, maxHeight);\n\t\t}\n\t\t\n\t\t// Reset the legend height and adjust the clipping rectangle\n\t\tif (legendHeight > spaceHeight && !options.useHTML) {\n\n\t\t\tthis.clipHeight = clipHeight = spaceHeight - 20 - this.titleHeight;\n\t\t\tthis.pageCount = pageCount = mathCeil(legendHeight / clipHeight);\n\t\t\tthis.currentPage = pick(this.currentPage, 1);\n\t\t\tthis.fullHeight = legendHeight;\n\t\t\t\n\t\t\t// Only apply clipping if needed. Clipping causes blurred legend in PDF export (#1787)\n\t\t\tif (!clipRect) {\n\t\t\t\tclipRect = legend.clipRect = renderer.clipRect(0, 0, 9999, 0);\n\t\t\t\tlegend.contentGroup.clip(clipRect);\n\t\t\t}\n\t\t\tclipRect.attr({\n\t\t\t\theight: clipHeight\n\t\t\t});\n\t\t\t\n\t\t\t// Add navigation elements\n\t\t\tif (!nav) {\n\t\t\t\tthis.nav = nav = renderer.g().attr({ zIndex: 1 }).add(this.group);\n\t\t\t\tthis.up = renderer.symbol('triangle', 0, 0, arrowSize, arrowSize)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tlegend.scroll(-1, animation);\n\t\t\t\t\t})\n\t\t\t\t\t.add(nav);\n\t\t\t\tthis.pager = renderer.text('', 15, 10)\n\t\t\t\t\t.css(navOptions.style)\n\t\t\t\t\t.add(nav);\n\t\t\t\tthis.down = renderer.symbol('triangle-down', 0, 0, arrowSize, arrowSize)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tlegend.scroll(1, animation);\n\t\t\t\t\t})\n\t\t\t\t\t.add(nav);\n\t\t\t}\n\t\t\t\n\t\t\t// Set initial position\n\t\t\tlegend.scroll(0);\n\t\t\t\n\t\t\tlegendHeight = spaceHeight;\n\t\t\t\n\t\t} else if (nav) {\n\t\t\tclipRect.attr({\n\t\t\t\theight: chart.chartHeight\n\t\t\t});\n\t\t\tnav.hide();\n\t\t\tthis.scrollGroup.attr({\n\t\t\t\ttranslateY: 1\n\t\t\t});\n\t\t\tthis.clipHeight = 0; // #1379\n\t\t}\n\t\t\n\t\treturn legendHeight;\n\t},\n\t\n\t/**\n\t * Scroll the legend by a number of pages\n\t * @param {Object} scrollBy\n\t * @param {Object} animation\n\t */\n\tscroll: function (scrollBy, animation) {\n\t\tvar pageCount = this.pageCount,\n\t\t\tcurrentPage = this.currentPage + scrollBy,\n\t\t\tclipHeight = this.clipHeight,\n\t\t\tnavOptions = this.options.navigation,\n\t\t\tactiveColor = navOptions.activeColor,\n\t\t\tinactiveColor = navOptions.inactiveColor,\n\t\t\tpager = this.pager,\n\t\t\tpadding = this.padding,\n\t\t\tscrollOffset;\n\t\t\n\t\t// When resizing while looking at the last page\n\t\tif (currentPage > pageCount) {\n\t\t\tcurrentPage = pageCount;\n\t\t}\n\t\t\n\t\tif (currentPage > 0) {\n\t\t\t\n\t\t\tif (animation !== UNDEFINED) {\n\t\t\t\tsetAnimation(animation, this.chart);\n\t\t\t}\n\t\t\t\n\t\t\tthis.nav.attr({\n\t\t\t\ttranslateX: padding,\n\t\t\t\ttranslateY: clipHeight + 7 + this.titleHeight,\n\t\t\t\tvisibility: VISIBLE\n\t\t\t});\n\t\t\tthis.up.attr({\n\t\t\t\t\tfill: currentPage === 1 ? inactiveColor : activeColor\n\t\t\t\t})\n\t\t\t\t.css({\n\t\t\t\t\tcursor: currentPage === 1 ? 'default' : 'pointer'\n\t\t\t\t});\n\t\t\tpager.attr({\n\t\t\t\ttext: currentPage + '/' + this.pageCount\n\t\t\t});\n\t\t\tthis.down.attr({\n\t\t\t\t\tx: 18 + this.pager.getBBox().width, // adjust to text width\n\t\t\t\t\tfill: currentPage === pageCount ? inactiveColor : activeColor\n\t\t\t\t})\n\t\t\t\t.css({\n\t\t\t\t\tcursor: currentPage === pageCount ? 'default' : 'pointer'\n\t\t\t\t});\n\t\t\t\n\t\t\tscrollOffset = -mathMin(clipHeight * (currentPage - 1), this.fullHeight - clipHeight + padding) + 1;\n\t\t\tthis.scrollGroup.animate({\n\t\t\t\ttranslateY: scrollOffset\n\t\t\t});\n\t\t\tpager.attr({\n\t\t\t\ttext: currentPage + '/' + pageCount\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tthis.currentPage = currentPage;\n\t\t\tthis.positionCheckboxes(scrollOffset);\n\t\t}\n\t\t\t\n\t}\n\t\n};\n\n// Workaround for #2030, horizontal legend items not displaying in IE11 Preview.\n// TODO: When IE11 is released, check again for this bug, and remove the fix\n// or make a better one.\nif (/Trident.*?11\\.0/.test(userAgent)) {\n\twrap(Legend.prototype, 'positionItem', function (proceed, item) {\n\t\tvar legend = this;\n\t\tsetTimeout(function () {\n\t\t\tproceed.call(legend, item);\n\t\t});\n\t});\n}\n\n/**\n * The chart class\n * @param {Object} options\n * @param {Function} callback Function to run when the chart has loaded\n */\nfunction Chart() {\n\tthis.init.apply(this, arguments);\n}\n\nChart.prototype = {\n\n\t/**\n\t * Initialize the chart\n\t */\n\tinit: function (userOptions, callback) {\n\n\t\t// Handle regular options\n\t\tvar options,\n\t\t\tseriesOptions = userOptions.series; // skip merging data points to increase performance\n\n\t\tuserOptions.series = null;\n\t\toptions = merge(defaultOptions, userOptions); // do the merge\n\t\toptions.series = userOptions.series = seriesOptions; // set back the series data\n\n\t\tvar optionsChart = options.chart;\n\t\t\n\t\t// Create margin & spacing array\n\t\tthis.margin = this.splashArray('margin', optionsChart);\n\t\tthis.spacing = this.splashArray('spacing', optionsChart);\n\n\t\tvar chartEvents = optionsChart.events;\n\n\t\t//this.runChartClick = chartEvents && !!chartEvents.click;\n\t\tthis.bounds = { h: {}, v: {} }; // Pixel data bounds for touch zoom\n\n\t\tthis.callback = callback;\n\t\tthis.isResizing = 0;\n\t\tthis.options = options;\n\t\t//chartTitleOptions = UNDEFINED;\n\t\t//chartSubtitleOptions = UNDEFINED;\n\n\t\tthis.axes = [];\n\t\tthis.series = [];\n\t\tthis.hasCartesianSeries = optionsChart.showAxes;\n\t\t//this.axisOffset = UNDEFINED;\n\t\t//this.maxTicks = UNDEFINED; // handle the greatest amount of ticks on grouped axes\n\t\t//this.inverted = UNDEFINED;\n\t\t//this.loadingShown = UNDEFINED;\n\t\t//this.container = UNDEFINED;\n\t\t//this.chartWidth = UNDEFINED;\n\t\t//this.chartHeight = UNDEFINED;\n\t\t//this.marginRight = UNDEFINED;\n\t\t//this.marginBottom = UNDEFINED;\n\t\t//this.containerWidth = UNDEFINED;\n\t\t//this.containerHeight = UNDEFINED;\n\t\t//this.oldChartWidth = UNDEFINED;\n\t\t//this.oldChartHeight = UNDEFINED;\n\n\t\t//this.renderTo = UNDEFINED;\n\t\t//this.renderToClone = UNDEFINED;\n\n\t\t//this.spacingBox = UNDEFINED\n\n\t\t//this.legend = UNDEFINED;\n\n\t\t// Elements\n\t\t//this.chartBackground = UNDEFINED;\n\t\t//this.plotBackground = UNDEFINED;\n\t\t//this.plotBGImage = UNDEFINED;\n\t\t//this.plotBorder = UNDEFINED;\n\t\t//this.loadingDiv = UNDEFINED;\n\t\t//this.loadingSpan = UNDEFINED;\n\n\t\tvar chart = this,\n\t\t\teventType;\n\n\t\t// Add the chart to the global lookup\n\t\tchart.index = charts.length;\n\t\tcharts.push(chart);\n\n\t\t// Set up auto resize\n\t\tif (optionsChart.reflow !== false) {\n\t\t\taddEvent(chart, 'load', function () {\n\t\t\t\tchart.initReflow();\n\t\t\t});\n\t\t}\n\n\t\t// Chart event handlers\n\t\tif (chartEvents) {\n\t\t\tfor (eventType in chartEvents) {\n\t\t\t\taddEvent(chart, eventType, chartEvents[eventType]);\n\t\t\t}\n\t\t}\n\n\t\tchart.xAxis = [];\n\t\tchart.yAxis = [];\n\n\t\t// Expose methods and variables\n\t\tchart.animation = useCanVG ? false : pick(optionsChart.animation, true);\n\t\tchart.pointCount = 0;\n\t\tchart.counters = new ChartCounters();\n\n\t\tchart.firstRender();\n\t},\n\n\t/**\n\t * Initialize an individual series, called internally before render time\n\t */\n\tinitSeries: function (options) {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\ttype = options.type || optionsChart.type || optionsChart.defaultSeriesType,\n\t\t\tseries,\n\t\t\tconstr = seriesTypes[type];\n\n\t\t// No such series type\n\t\tif (!constr) {\n\t\t\terror(17, true);\n\t\t}\n\n\t\tseries = new constr();\n\t\tseries.init(this, options);\n\t\treturn series;\n\t},\n\n\t/**\n\t * Add a series dynamically after  time\n\t *\n\t * @param {Object} options The config options\n\t * @param {Boolean} redraw Whether to redraw the chart after adding. Defaults to true.\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t *\n\t * @return {Object} series The newly created series object\n\t */\n\taddSeries: function (options, redraw, animation) {\n\t\tvar series,\n\t\t\tchart = this;\n\n\t\tif (options) {\n\t\t\tredraw = pick(redraw, true); // defaults to true\n\n\t\t\tfireEvent(chart, 'addSeries', { options: options }, function () {\n\t\t\t\tseries = chart.initSeries(options);\n\t\t\t\t\n\t\t\t\tchart.isDirtyLegend = true; // the series array is out of sync with the display\n\t\t\t\tchart.linkSeries();\n\t\t\t\tif (redraw) {\n\t\t\t\t\tchart.redraw(animation);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn series;\n\t},\n\n\t/**\n     * Add an axis to the chart\n     * @param {Object} options The axis option\n     * @param {Boolean} isX Whether it is an X axis or a value axis\n     */\n\taddAxis: function (options, isX, redraw, animation) {\n\t\tvar key = isX ? 'xAxis' : 'yAxis',\n\t\t\tchartOptions = this.options,\n\t\t\taxis;\n\n\t\t/*jslint unused: false*/\n\t\taxis = new Axis(this, merge(options, {\n\t\t\tindex: this[key].length,\n\t\t\tisX: isX\n\t\t}));\n\t\t/*jslint unused: true*/\n\n\t\t// Push the new axis options to the chart options\n\t\tchartOptions[key] = splat(chartOptions[key] || {});\n\t\tchartOptions[key].push(options);\n\n\t\tif (pick(redraw, true)) {\n\t\t\tthis.redraw(animation);\n\t\t}\n\t},\n\n\t/**\n\t * Check whether a given point is within the plot area\n\t *\n\t * @param {Number} plotX Pixel x relative to the plot area\n\t * @param {Number} plotY Pixel y relative to the plot area\n\t * @param {Boolean} inverted Whether the chart is inverted\n\t */\n\tisInsidePlot: function (plotX, plotY, inverted) {\n\t\tvar x = inverted ? plotY : plotX,\n\t\t\ty = inverted ? plotX : plotY;\n\t\t\t\n\t\treturn x >= 0 &&\n\t\t\tx <= this.plotWidth &&\n\t\t\ty >= 0 &&\n\t\t\ty <= this.plotHeight;\n\t},\n\n\t/**\n\t * Adjust all axes tick amounts\n\t */\n\tadjustTickAmounts: function () {\n\t\tif (this.options.chart.alignTicks !== false) {\n\t\t\teach(this.axes, function (axis) {\n\t\t\t\taxis.adjustTickAmount();\n\t\t\t});\n\t\t}\n\t\tthis.maxTicks = null;\n\t},\n\n\t/**\n\t * Redraw legend, axes or series based on updated data\n\t *\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\tredraw: function (animation) {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\tseries = chart.series,\n\t\t\tpointer = chart.pointer,\n\t\t\tlegend = chart.legend,\n\t\t\tredrawLegend = chart.isDirtyLegend,\n\t\t\thasStackedSeries,\n\t\t\thasDirtyStacks,\n\t\t\tisDirtyBox = chart.isDirtyBox, // todo: check if it has actually changed?\n\t\t\tseriesLength = series.length,\n\t\t\ti = seriesLength,\n\t\t\tserie,\n\t\t\trenderer = chart.renderer,\n\t\t\tisHiddenChart = renderer.isHidden(),\n\t\t\tafterRedraw = [];\n\t\t\t\n\t\tsetAnimation(animation, chart);\n\t\t\n\t\tif (isHiddenChart) {\n\t\t\tchart.cloneRenderTo();\n\t\t}\n\n\t\t// Adjust title layout (reflow multiline text)\n\t\tchart.layOutTitles();\n\n\t\t// link stacked series\n\t\twhile (i--) {\n\t\t\tserie = series[i];\n\n\t\t\tif (serie.options.stacking) {\n\t\t\t\thasStackedSeries = true;\n\t\t\t\t\n\t\t\t\tif (serie.isDirty) {\n\t\t\t\t\thasDirtyStacks = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (hasDirtyStacks) { // mark others as dirty\n\t\t\ti = seriesLength;\n\t\t\twhile (i--) {\n\t\t\t\tserie = series[i];\n\t\t\t\tif (serie.options.stacking) {\n\t\t\t\t\tserie.isDirty = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// handle updated data in the series\n\t\teach(series, function (serie) {\n\t\t\tif (serie.isDirty) { // prepare the data so axis can read it\n\t\t\t\tif (serie.options.legendType === 'point') {\n\t\t\t\t\tredrawLegend = true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// handle added or removed series\n\t\tif (redrawLegend && legend.options.enabled) { // series or pie points are added or removed\n\t\t\t// draw legend graphics\n\t\t\tlegend.render();\n\n\t\t\tchart.isDirtyLegend = false;\n\t\t}\n\n\t\t// reset stacks\n\t\tif (hasStackedSeries) {\n\t\t\tchart.getStacks();\n\t\t}\n\n\n\t\tif (chart.hasCartesianSeries) {\n\t\t\tif (!chart.isResizing) {\n\n\t\t\t\t// reset maxTicks\n\t\t\t\tchart.maxTicks = null;\n\n\t\t\t\t// set axes scales\n\t\t\t\teach(axes, function (axis) {\n\t\t\t\t\taxis.setScale();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tchart.adjustTickAmounts();\n\t\t\tchart.getMargins();\n\n\t\t\t// If one axis is dirty, all axes must be redrawn (#792, #2169)\n\t\t\teach(axes, function (axis) {\n\t\t\t\tif (axis.isDirty) {\n\t\t\t\t\tisDirtyBox = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// redraw axes\n\t\t\teach(axes, function (axis) {\n\t\t\t\t\n\t\t\t\t// Fire 'afterSetExtremes' only if extremes are set\n\t\t\t\tif (axis.isDirtyExtremes) { // #821\n\t\t\t\t\taxis.isDirtyExtremes = false;\n\t\t\t\t\tafterRedraw.push(function () { // prevent a recursive call to chart.redraw() (#1119)\n\t\t\t\t\t\tfireEvent(axis, 'afterSetExtremes', extend(axis.eventArgs, axis.getExtremes())); // #747, #751\n\t\t\t\t\t\tdelete axis.eventArgs;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (isDirtyBox || hasStackedSeries) {\n\t\t\t\t\taxis.redraw();\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t}\n\t\t// the plot areas size has changed\n\t\tif (isDirtyBox) {\n\t\t\tchart.drawChartBox();\n\t\t}\n\n\n\t\t// redraw affected series\n\t\teach(series, function (serie) {\n\t\t\tif (serie.isDirty && serie.visible &&\n\t\t\t\t\t(!serie.isCartesian || serie.xAxis)) { // issue #153\n\t\t\t\tserie.redraw();\n\t\t\t}\n\t\t});\n\n\t\t// move tooltip or reset\n\t\tif (pointer && pointer.reset) {\n\t\t\tpointer.reset(true);\n\t\t}\n\n\t\t// redraw if canvas\n\t\trenderer.draw();\n\n\t\t// fire the event\n\t\tfireEvent(chart, 'redraw'); // jQuery breaks this when calling it from addEvent. Overwrites chart.redraw\n\t\t\n\t\tif (isHiddenChart) {\n\t\t\tchart.cloneRenderTo(true);\n\t\t}\n\t\t\n\t\t// Fire callbacks that are put on hold until after the redraw\n\t\teach(afterRedraw, function (callback) {\n\t\t\tcallback.call();\n\t\t});\n\t},\n\n\n\n\t/**\n\t * Dim the chart and show a loading text or symbol\n\t * @param {String} str An optional text to show in the loading label instead of the default one\n\t */\n\tshowLoading: function (str) {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\tloadingDiv = chart.loadingDiv;\n\n\t\tvar loadingOptions = options.loading;\n\n\t\t// create the layer at the first call\n\t\tif (!loadingDiv) {\n\t\t\tchart.loadingDiv = loadingDiv = createElement(DIV, {\n\t\t\t\tclassName: PREFIX + 'loading'\n\t\t\t}, extend(loadingOptions.style, {\n\t\t\t\tzIndex: 10,\n\t\t\t\tdisplay: NONE\n\t\t\t}), chart.container);\n\n\t\t\tchart.loadingSpan = createElement(\n\t\t\t\t'span',\n\t\t\t\tnull,\n\t\t\t\tloadingOptions.labelStyle,\n\t\t\t\tloadingDiv\n\t\t\t);\n\n\t\t}\n\n\t\t// update text\n\t\tchart.loadingSpan.innerHTML = str || options.lang.loading;\n\n\t\t// show it\n\t\tif (!chart.loadingShown) {\n\t\t\tcss(loadingDiv, { \n\t\t\t\topacity: 0, \n\t\t\t\tdisplay: '',\n\t\t\t\tleft: chart.plotLeft + PX,\n\t\t\t\ttop: chart.plotTop + PX,\n\t\t\t\twidth: chart.plotWidth + PX,\n\t\t\t\theight: chart.plotHeight + PX\n\t\t\t});\n\t\t\tanimate(loadingDiv, {\n\t\t\t\topacity: loadingOptions.style.opacity\n\t\t\t}, {\n\t\t\t\tduration: loadingOptions.showDuration || 0\n\t\t\t});\n\t\t\tchart.loadingShown = true;\n\t\t}\n\t},\n\n\t/**\n\t * Hide the loading layer\n\t */\n\thideLoading: function () {\n\t\tvar options = this.options,\n\t\t\tloadingDiv = this.loadingDiv;\n\n\t\tif (loadingDiv) {\n\t\t\tanimate(loadingDiv, {\n\t\t\t\topacity: 0\n\t\t\t}, {\n\t\t\t\tduration: options.loading.hideDuration || 100,\n\t\t\t\tcomplete: function () {\n\t\t\t\t\tcss(loadingDiv, { display: NONE });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.loadingShown = false;\n\t},\n\n\t/**\n\t * Get an axis, series or point object by id.\n\t * @param id {String} The id as given in the configuration options\n\t */\n\tget: function (id) {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\tseries = chart.series;\n\n\t\tvar i,\n\t\t\tj,\n\t\t\tpoints;\n\n\t\t// search axes\n\t\tfor (i = 0; i < axes.length; i++) {\n\t\t\tif (axes[i].options.id === id) {\n\t\t\t\treturn axes[i];\n\t\t\t}\n\t\t}\n\n\t\t// search series\n\t\tfor (i = 0; i < series.length; i++) {\n\t\t\tif (series[i].options.id === id) {\n\t\t\t\treturn series[i];\n\t\t\t}\n\t\t}\n\n\t\t// search points\n\t\tfor (i = 0; i < series.length; i++) {\n\t\t\tpoints = series[i].points || [];\n\t\t\tfor (j = 0; j < points.length; j++) {\n\t\t\t\tif (points[j].id === id) {\n\t\t\t\t\treturn points[j];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t},\n\n\t/**\n\t * Create the Axis instances based on the config options\n\t */\n\tgetAxes: function () {\n\t\tvar chart = this,\n\t\t\toptions = this.options,\n\t\t\txAxisOptions = options.xAxis = splat(options.xAxis || {}),\n\t\t\tyAxisOptions = options.yAxis = splat(options.yAxis || {}),\n\t\t\toptionsArray,\n\t\t\taxis;\n\n\t\t// make sure the options are arrays and add some members\n\t\teach(xAxisOptions, function (axis, i) {\n\t\t\taxis.index = i;\n\t\t\taxis.isX = true;\n\t\t});\n\n\t\teach(yAxisOptions, function (axis, i) {\n\t\t\taxis.index = i;\n\t\t});\n\n\t\t// concatenate all axis options into one array\n\t\toptionsArray = xAxisOptions.concat(yAxisOptions);\n\n\t\teach(optionsArray, function (axisOptions) {\n\t\t\taxis = new Axis(chart, axisOptions);\n\t\t});\n\n\t\tchart.adjustTickAmounts();\n\t},\n\n\n\t/**\n\t * Get the currently selected points from all series\n\t */\n\tgetSelectedPoints: function () {\n\t\tvar points = [];\n\t\teach(this.series, function (serie) {\n\t\t\tpoints = points.concat(grep(serie.points || [], function (point) {\n\t\t\t\treturn point.selected;\n\t\t\t}));\n\t\t});\n\t\treturn points;\n\t},\n\n\t/**\n\t * Get the currently selected series\n\t */\n\tgetSelectedSeries: function () {\n\t\treturn grep(this.series, function (serie) {\n\t\t\treturn serie.selected;\n\t\t});\n\t},\n\n\t/**\n\t * Generate stacks for each series and calculate stacks total values\n\t */\n\tgetStacks: function () {\n\t\tvar chart = this;\n\n\t\t// reset stacks for each yAxis\n\t\teach(chart.yAxis, function (axis) {\n\t\t\tif (axis.stacks && axis.hasVisibleSeries) {\n\t\t\t\taxis.oldStacks = axis.stacks;\n\t\t\t}\n\t\t});\n\n\t\teach(chart.series, function (series) {\n\t\t\tif (series.options.stacking && (series.visible === true || chart.options.chart.ignoreHiddenSeries === false)) {\n\t\t\t\tseries.stackKey = series.type + pick(series.options.stack, '');\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Display the zoom button\n\t */\n\tshowResetZoom: function () {\n\t\tvar chart = this,\n\t\t\tlang = defaultOptions.lang,\n\t\t\tbtnOptions = chart.options.chart.resetZoomButton,\n\t\t\ttheme = btnOptions.theme,\n\t\t\tstates = theme.states,\n\t\t\talignTo = btnOptions.relativeTo === 'chart' ? null : 'plotBox';\n\t\t\t\n\t\tthis.resetZoomButton = chart.renderer.button(lang.resetZoom, null, null, function () { chart.zoomOut(); }, theme, states && states.hover)\n\t\t\t.attr({\n\t\t\t\talign: btnOptions.position.align,\n\t\t\t\ttitle: lang.resetZoomTitle\n\t\t\t})\n\t\t\t.add()\n\t\t\t.align(btnOptions.position, false, alignTo);\n\t\t\t\n\t},\n\n\t/**\n\t * Zoom out to 1:1\n\t */\n\tzoomOut: function () {\n\t\tvar chart = this;\n\t\tfireEvent(chart, 'selection', { resetSelection: true }, function () { \n\t\t\tchart.zoom();\n\t\t});\n\t},\n\n\t/**\n\t * Zoom into a given portion of the chart given by axis coordinates\n\t * @param {Object} event\n\t */\n\tzoom: function (event) {\n\t\tvar chart = this,\n\t\t\thasZoomed,\n\t\t\tpointer = chart.pointer,\n\t\t\tdisplayButton = false,\n\t\t\tresetZoomButton;\n\n\t\t// If zoom is called with no arguments, reset the axes\n\t\tif (!event || event.resetSelection) {\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\thasZoomed = axis.zoom();\n\t\t\t});\n\t\t} else { // else, zoom in on all axes\n\t\t\teach(event.xAxis.concat(event.yAxis), function (axisData) {\n\t\t\t\tvar axis = axisData.axis,\n\t\t\t\t\tisXAxis = axis.isXAxis;\n\n\t\t\t\t// don't zoom more than minRange\n\t\t\t\tif (pointer[isXAxis ? 'zoomX' : 'zoomY'] || pointer[isXAxis ? 'pinchX' : 'pinchY']) {\n\t\t\t\t\thasZoomed = axis.zoom(axisData.min, axisData.max);\n\t\t\t\t\tif (axis.displayBtn) {\n\t\t\t\t\t\tdisplayButton = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\t// Show or hide the Reset zoom button\n\t\tresetZoomButton = chart.resetZoomButton;\n\t\tif (displayButton && !resetZoomButton) {\n\t\t\tchart.showResetZoom();\n\t\t} else if (!displayButton && isObject(resetZoomButton)) {\n\t\t\tchart.resetZoomButton = resetZoomButton.destroy();\n\t\t}\n\t\t\n\n\t\t// Redraw\n\t\tif (hasZoomed) {\n\t\t\tchart.redraw(\n\t\t\t\tpick(chart.options.chart.animation, event && event.animation, chart.pointCount < 100) // animation\n\t\t\t);\n\t\t}\n\t},\n\n\t/**\n\t * Pan the chart by dragging the mouse across the pane. This function is called\n\t * on mouse move, and the distance to pan is computed from chartX compared to\n\t * the first chartX position in the dragging operation.\n\t */\n\tpan: function (e, panning) {\n\n\t\tvar chart = this,\n\t\t\thoverPoints = chart.hoverPoints,\n\t\t\tdoRedraw;\n\n\t\t// remove active points for shared tooltip\n\t\tif (hoverPoints) {\n\t\t\teach(hoverPoints, function (point) {\n\t\t\t\tpoint.setState();\n\t\t\t});\n\t\t}\n\n\t\teach(panning === 'xy' ? [1, 0] : [1], function (isX) { // xy is used in maps\n\t\t\tvar mousePos = e[isX ? 'chartX' : 'chartY'],\n\t\t\t\taxis = chart[isX ? 'xAxis' : 'yAxis'][0],\n\t\t\t\tstartPos = chart[isX ? 'mouseDownX' : 'mouseDownY'],\n\t\t\t\thalfPointRange = (axis.pointRange || 0) / 2,\n\t\t\t\textremes = axis.getExtremes(),\n\t\t\t\tnewMin = axis.toValue(startPos - mousePos, true) + halfPointRange,\n\t\t\t\tnewMax = axis.toValue(startPos + chart[isX ? 'plotWidth' : 'plotHeight'] - mousePos, true) - halfPointRange;\n\n\t\t\tif (axis.series.length && newMin > mathMin(extremes.dataMin, extremes.min) && newMax < mathMax(extremes.dataMax, extremes.max)) {\n\t\t\t\taxis.setExtremes(newMin, newMax, false, false, { trigger: 'pan' });\n\t\t\t\tdoRedraw = true;\n\t\t\t}\n\n\t\t\tchart[isX ? 'mouseDownX' : 'mouseDownY'] = mousePos; // set new reference for next run\n\t\t});\n\n\t\tif (doRedraw) {\n\t\t\tchart.redraw(false);\n\t\t}\n\t\tcss(chart.container, { cursor: 'move' });\n\t},\n\n\t/**\n\t * Show the title and subtitle of the chart\n\t *\n\t * @param titleOptions {Object} New title options\n\t * @param subtitleOptions {Object} New subtitle options\n\t *\n\t */\n\tsetTitle: function (titleOptions, subtitleOptions) {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\tchartTitleOptions,\n\t\t\tchartSubtitleOptions;\n\n\t\tchartTitleOptions = options.title = merge(options.title, titleOptions);\n\t\tchartSubtitleOptions = options.subtitle = merge(options.subtitle, subtitleOptions);\n\n\t\t// add title and subtitle\n\t\teach([\n\t\t\t['title', titleOptions, chartTitleOptions],\n\t\t\t['subtitle', subtitleOptions, chartSubtitleOptions]\n\t\t], function (arr) {\n\t\t\tvar name = arr[0],\n\t\t\t\ttitle = chart[name],\n\t\t\t\ttitleOptions = arr[1],\n\t\t\t\tchartTitleOptions = arr[2];\n\n\t\t\tif (title && titleOptions) {\n\t\t\t\tchart[name] = title = title.destroy(); // remove old\n\t\t\t}\n\t\t\t\n\t\t\tif (chartTitleOptions && chartTitleOptions.text && !title) {\n\t\t\t\tchart[name] = chart.renderer.text(\n\t\t\t\t\tchartTitleOptions.text,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tchartTitleOptions.useHTML\n\t\t\t\t)\n\t\t\t\t.attr({\n\t\t\t\t\talign: chartTitleOptions.align,\n\t\t\t\t\t'class': PREFIX + name,\n\t\t\t\t\tzIndex: chartTitleOptions.zIndex || 4\n\t\t\t\t})\n\t\t\t\t.css(chartTitleOptions.style)\n\t\t\t\t.add();\n\t\t\t}\t\n\t\t});\n\t\tchart.layOutTitles();\n\t},\n\n\t/**\n\t * Lay out the chart titles and cache the full offset height for use in getMargins\n\t */\n\tlayOutTitles: function () {\n\t\tvar titleOffset = 0,\n\t\t\ttitle = this.title,\n\t\t\tsubtitle = this.subtitle,\n\t\t\toptions = this.options,\n\t\t\ttitleOptions = options.title,\n\t\t\tsubtitleOptions = options.subtitle,\n\t\t\tautoWidth = this.spacingBox.width - 44; // 44 makes room for default context button\n\n\t\tif (title) {\n\t\t\ttitle\n\t\t\t\t.css({ width: (titleOptions.width || autoWidth) + PX })\n\t\t\t\t.align(extend({ y: 15 }, titleOptions), false, 'spacingBox');\n\t\t\t\n\t\t\tif (!titleOptions.floating && !titleOptions.verticalAlign) {\n\t\t\t\ttitleOffset = title.getBBox().height;\n\n\t\t\t\t// Adjust for browser consistency + backwards compat after #776 fix\n\t\t\t\tif (titleOffset >= 18 && titleOffset <= 25) {\n\t\t\t\t\ttitleOffset = 15; \n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (subtitle) {\n\t\t\tsubtitle\n\t\t\t\t.css({ width: (subtitleOptions.width || autoWidth) + PX })\n\t\t\t\t.align(extend({ y: titleOffset + titleOptions.margin }, subtitleOptions), false, 'spacingBox');\n\t\t\t\n\t\t\tif (!subtitleOptions.floating && !subtitleOptions.verticalAlign) {\n\t\t\t\ttitleOffset = mathCeil(titleOffset + subtitle.getBBox().height);\n\t\t\t}\n\t\t}\n\n\t\tthis.titleOffset = titleOffset; // used in getMargins\n\t},\n\n\t/**\n\t * Get chart width and height according to options and container size\n\t */\n\tgetChartSize: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\trenderTo = chart.renderToClone || chart.renderTo;\n\n\t\t// get inner width and height from jQuery (#824)\n\t\tchart.containerWidth = adapterRun(renderTo, 'width');\n\t\tchart.containerHeight = adapterRun(renderTo, 'height');\n\t\t\n\t\tchart.chartWidth = mathMax(0, optionsChart.width || chart.containerWidth || 600); // #1393, 1460\n\t\tchart.chartHeight = mathMax(0, pick(optionsChart.height,\n\t\t\t// the offsetHeight of an empty container is 0 in standard browsers, but 19 in IE7:\n\t\t\tchart.containerHeight > 19 ? chart.containerHeight : 400));\n\t},\n\n\t/**\n\t * Create a clone of the chart's renderTo div and place it outside the viewport to allow\n\t * size computation on chart.render and chart.redraw\n\t */\n\tcloneRenderTo: function (revert) {\n\t\tvar clone = this.renderToClone,\n\t\t\tcontainer = this.container;\n\t\t\n\t\t// Destroy the clone and bring the container back to the real renderTo div\n\t\tif (revert) {\n\t\t\tif (clone) {\n\t\t\t\tthis.renderTo.appendChild(container);\n\t\t\t\tdiscardElement(clone);\n\t\t\t\tdelete this.renderToClone;\n\t\t\t}\n\t\t\n\t\t// Set up the clone\n\t\t} else {\n\t\t\tif (container && container.parentNode === this.renderTo) {\n\t\t\t\tthis.renderTo.removeChild(container); // do not clone this\n\t\t\t}\n\t\t\tthis.renderToClone = clone = this.renderTo.cloneNode(0);\n\t\t\tcss(clone, {\n\t\t\t\tposition: ABSOLUTE,\n\t\t\t\ttop: '-9999px',\n\t\t\t\tdisplay: 'block' // #833\n\t\t\t});\n\t\t\tdoc.body.appendChild(clone);\n\t\t\tif (container) {\n\t\t\t\tclone.appendChild(container);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Get the containing element, determine the size and create the inner container\n\t * div to hold the chart\n\t */\n\tgetContainer: function () {\n\t\tvar chart = this,\n\t\t\tcontainer,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\tchartWidth,\n\t\t\tchartHeight,\n\t\t\trenderTo,\n\t\t\tindexAttrName = 'data-highcharts-chart',\n\t\t\toldChartIndex,\n\t\t\tcontainerId;\n\n\t\tchart.renderTo = renderTo = optionsChart.renderTo;\n\t\tcontainerId = PREFIX + idCounter++;\n\n\t\tif (isString(renderTo)) {\n\t\t\tchart.renderTo = renderTo = doc.getElementById(renderTo);\n\t\t}\n\t\t\n\t\t// Display an error if the renderTo is wrong\n\t\tif (!renderTo) {\n\t\t\terror(13, true);\n\t\t}\n\t\t\n\t\t// If the container already holds a chart, destroy it\n\t\toldChartIndex = pInt(attr(renderTo, indexAttrName));\n\t\tif (!isNaN(oldChartIndex) && charts[oldChartIndex]) {\n\t\t\tcharts[oldChartIndex].destroy();\n\t\t}\t\t\n\t\t\n\t\t// Make a reference to the chart from the div\n\t\tattr(renderTo, indexAttrName, chart.index);\n\n\t\t// remove previous chart\n\t\trenderTo.innerHTML = '';\n\n\t\t// If the container doesn't have an offsetWidth, it has or is a child of a node\n\t\t// that has display:none. We need to temporarily move it out to a visible\n\t\t// state to determine the size, else the legend and tooltips won't render\n\t\t// properly\n\t\tif (!renderTo.offsetWidth) {\n\t\t\tchart.cloneRenderTo();\n\t\t}\n\n\t\t// get the width and height\n\t\tchart.getChartSize();\n\t\tchartWidth = chart.chartWidth;\n\t\tchartHeight = chart.chartHeight;\n\n\t\t// create the inner container\n\t\tchart.container = container = createElement(DIV, {\n\t\t\t\tclassName: PREFIX + 'container' +\n\t\t\t\t\t(optionsChart.className ? ' ' + optionsChart.className : ''),\n\t\t\t\tid: containerId\n\t\t\t}, extend({\n\t\t\t\tposition: RELATIVE,\n\t\t\t\toverflow: HIDDEN, // needed for context menu (avoid scrollbars) and\n\t\t\t\t\t// content overflow in IE\n\t\t\t\twidth: chartWidth + PX,\n\t\t\t\theight: chartHeight + PX,\n\t\t\t\ttextAlign: 'left',\n\t\t\t\tlineHeight: 'normal', // #427\n\t\t\t\tzIndex: 0, // #1072\n\t\t\t\t'-webkit-tap-highlight-color': 'rgba(0,0,0,0)'\n\t\t\t}, optionsChart.style),\n\t\t\tchart.renderToClone || renderTo\n\t\t);\n\n\t\t// cache the cursor (#1650)\n\t\tchart._cursor = container.style.cursor;\n\n\t\tchart.renderer =\n\t\t\toptionsChart.forExport ? // force SVG, used for SVG export\n\t\t\t\tnew SVGRenderer(container, chartWidth, chartHeight, true) :\n\t\t\t\tnew Renderer(container, chartWidth, chartHeight);\n\n\t\tif (useCanVG) {\n\t\t\t// If we need canvg library, extend and configure the renderer\n\t\t\t// to get the tracker for translating mouse events\n\t\t\tchart.renderer.create(chart, container, chartWidth, chartHeight);\n\t\t}\n\t},\n\n\t/**\n\t * Calculate margins by rendering axis labels in a preliminary position. Title,\n\t * subtitle and legend have already been rendered at this stage, but will be\n\t * moved into their final positions\n\t */\n\tgetMargins: function () {\n\t\tvar chart = this,\n\t\t\tspacing = chart.spacing,\n\t\t\taxisOffset,\n\t\t\tlegend = chart.legend,\n\t\t\tmargin = chart.margin,\n\t\t\tlegendOptions = chart.options.legend,\n\t\t\tlegendMargin = pick(legendOptions.margin, 10),\n\t\t\tlegendX = legendOptions.x,\n\t\t\tlegendY = legendOptions.y,\n\t\t\talign = legendOptions.align,\n\t\t\tverticalAlign = legendOptions.verticalAlign,\n\t\t\ttitleOffset = chart.titleOffset;\n\n\t\tchart.resetMargins();\n\t\taxisOffset = chart.axisOffset;\n\n\t\t// Adjust for title and subtitle\n\t\tif (titleOffset && !defined(margin[0])) {\n\t\t\tchart.plotTop = mathMax(chart.plotTop, titleOffset + chart.options.title.margin + spacing[0]);\n\t\t}\n\t\t\n\t\t// Adjust for legend\n\t\tif (legend.display && !legendOptions.floating) {\n\t\t\tif (align === 'right') { // horizontal alignment handled first\n\t\t\t\tif (!defined(margin[1])) {\n\t\t\t\t\tchart.marginRight = mathMax(\n\t\t\t\t\t\tchart.marginRight,\n\t\t\t\t\t\tlegend.legendWidth - legendX + legendMargin + spacing[1]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (align === 'left') {\n\t\t\t\tif (!defined(margin[3])) {\n\t\t\t\t\tchart.plotLeft = mathMax(\n\t\t\t\t\t\tchart.plotLeft,\n\t\t\t\t\t\tlegend.legendWidth + legendX + legendMargin + spacing[3]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t} else if (verticalAlign === 'top') {\n\t\t\t\tif (!defined(margin[0])) {\n\t\t\t\t\tchart.plotTop = mathMax(\n\t\t\t\t\t\tchart.plotTop,\n\t\t\t\t\t\tlegend.legendHeight + legendY + legendMargin + spacing[0]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t} else if (verticalAlign === 'bottom') {\n\t\t\t\tif (!defined(margin[2])) {\n\t\t\t\t\tchart.marginBottom = mathMax(\n\t\t\t\t\t\tchart.marginBottom,\n\t\t\t\t\t\tlegend.legendHeight - legendY + legendMargin + spacing[2]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// adjust for scroller\n\t\tif (chart.extraBottomMargin) {\n\t\t\tchart.marginBottom += chart.extraBottomMargin;\n\t\t}\n\t\tif (chart.extraTopMargin) {\n\t\t\tchart.plotTop += chart.extraTopMargin;\n\t\t}\n\n\t\t// pre-render axes to get labels offset width\n\t\tif (chart.hasCartesianSeries) {\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\taxis.getOffset();\n\t\t\t});\n\t\t}\n\t\t\n\t\tif (!defined(margin[3])) {\n\t\t\tchart.plotLeft += axisOffset[3];\n\t\t}\n\t\tif (!defined(margin[0])) {\n\t\t\tchart.plotTop += axisOffset[0];\n\t\t}\n\t\tif (!defined(margin[2])) {\n\t\t\tchart.marginBottom += axisOffset[2];\n\t\t}\n\t\tif (!defined(margin[1])) {\n\t\t\tchart.marginRight += axisOffset[1];\n\t\t}\n\n\t\tchart.setChartSize();\n\n\t},\n\n\t/**\n\t * Add the event handlers necessary for auto resizing\n\t *\n\t */\n\tinitReflow: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\trenderTo = chart.renderTo,\n\t\t\treflowTimeout;\n\t\t\t\n\t\tfunction reflow(e) {\n\t\t\tvar width = optionsChart.width || adapterRun(renderTo, 'width'),\n\t\t\t\theight = optionsChart.height || adapterRun(renderTo, 'height'),\n\t\t\t\ttarget = e ? e.target : win; // #805 - MooTools doesn't supply e\n\t\t\t\t\n\t\t\t// Width and height checks for display:none. Target is doc in IE8 and Opera,\n\t\t\t// win in Firefox, Chrome and IE9.\n\t\t\tif (!chart.hasUserSize && width && height && (target === win || target === doc)) {\n\t\t\t\t\n\t\t\t\tif (width !== chart.containerWidth || height !== chart.containerHeight) {\n\t\t\t\t\tclearTimeout(reflowTimeout);\n\t\t\t\t\tchart.reflowTimeout = reflowTimeout = setTimeout(function () {\n\t\t\t\t\t\tif (chart.container) { // It may have been destroyed in the meantime (#1257)\n\t\t\t\t\t\t\tchart.setSize(width, height, false);\n\t\t\t\t\t\t\tchart.hasUserSize = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 100);\n\t\t\t\t}\n\t\t\t\tchart.containerWidth = width;\n\t\t\t\tchart.containerHeight = height;\n\t\t\t}\n\t\t}\n\t\tchart.reflow = reflow;\n\t\taddEvent(win, 'resize', reflow);\n\t\taddEvent(chart, 'destroy', function () {\n\t\t\tremoveEvent(win, 'resize', reflow);\n\t\t});\n\t},\n\n\t/**\n\t * Resize the chart to a given width and height\n\t * @param {Number} width\n\t * @param {Number} height\n\t * @param {Object|Boolean} animation\n\t */\n\tsetSize: function (width, height, animation) {\n\t\tvar chart = this,\n\t\t\tchartWidth,\n\t\t\tchartHeight,\n\t\t\tfireEndResize;\n\n\t\t// Handle the isResizing counter\n\t\tchart.isResizing += 1;\n\t\tfireEndResize = function () {\n\t\t\tif (chart) {\n\t\t\t\tfireEvent(chart, 'endResize', null, function () {\n\t\t\t\t\tchart.isResizing -= 1;\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t// set the animation for the current process\n\t\tsetAnimation(animation, chart);\n\n\t\tchart.oldChartHeight = chart.chartHeight;\n\t\tchart.oldChartWidth = chart.chartWidth;\n\t\tif (defined(width)) {\n\t\t\tchart.chartWidth = chartWidth = mathMax(0, mathRound(width));\n\t\t\tchart.hasUserSize = !!chartWidth;\n\t\t}\n\t\tif (defined(height)) {\n\t\t\tchart.chartHeight = chartHeight = mathMax(0, mathRound(height));\n\t\t}\n\n\t\tcss(chart.container, {\n\t\t\twidth: chartWidth + PX,\n\t\t\theight: chartHeight + PX\n\t\t});\n\t\tchart.setChartSize(true);\n\t\tchart.renderer.setSize(chartWidth, chartHeight, animation);\n\n\t\t// handle axes\n\t\tchart.maxTicks = null;\n\t\teach(chart.axes, function (axis) {\n\t\t\taxis.isDirty = true;\n\t\t\taxis.setScale();\n\t\t});\n\n\t\t// make sure non-cartesian series are also handled\n\t\teach(chart.series, function (serie) {\n\t\t\tserie.isDirty = true;\n\t\t});\n\n\t\tchart.isDirtyLegend = true; // force legend redraw\n\t\tchart.isDirtyBox = true; // force redraw of plot and chart border\n\n\t\tchart.getMargins();\n\n\t\tchart.redraw(animation);\n\n\n\t\tchart.oldChartHeight = null;\n\t\tfireEvent(chart, 'resize');\n\n\t\t// fire endResize and set isResizing back\n\t\t// If animation is disabled, fire without delay\n\t\tif (globalAnimation === false) {\n\t\t\tfireEndResize();\n\t\t} else { // else set a timeout with the animation duration\n\t\t\tsetTimeout(fireEndResize, (globalAnimation && globalAnimation.duration) || 500);\n\t\t}\n\t},\n\n\t/**\n\t * Set the public chart properties. This is done before and after the pre-render\n\t * to determine margin sizes\n\t */\n\tsetChartSize: function (skipAxes) {\n\t\tvar chart = this,\n\t\t\tinverted = chart.inverted,\n\t\t\trenderer = chart.renderer,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\tspacing = chart.spacing,\n\t\t\tclipOffset = chart.clipOffset,\n\t\t\tclipX,\n\t\t\tclipY,\n\t\t\tplotLeft,\n\t\t\tplotTop,\n\t\t\tplotWidth,\n\t\t\tplotHeight,\n\t\t\tplotBorderWidth;\n\n\t\tchart.plotLeft = plotLeft = mathRound(chart.plotLeft);\n\t\tchart.plotTop = plotTop = mathRound(chart.plotTop);\n\t\tchart.plotWidth = plotWidth = mathMax(0, mathRound(chartWidth - plotLeft - chart.marginRight));\n\t\tchart.plotHeight = plotHeight = mathMax(0, mathRound(chartHeight - plotTop - chart.marginBottom));\n\n\t\tchart.plotSizeX = inverted ? plotHeight : plotWidth;\n\t\tchart.plotSizeY = inverted ? plotWidth : plotHeight;\n\t\t\n\t\tchart.plotBorderWidth = optionsChart.plotBorderWidth || 0;\n\n\t\t// Set boxes used for alignment\n\t\tchart.spacingBox = renderer.spacingBox = {\n\t\t\tx: spacing[3],\n\t\t\ty: spacing[0],\n\t\t\twidth: chartWidth - spacing[3] - spacing[1],\n\t\t\theight: chartHeight - spacing[0] - spacing[2]\n\t\t};\n\t\tchart.plotBox = renderer.plotBox = {\n\t\t\tx: plotLeft,\n\t\t\ty: plotTop,\n\t\t\twidth: plotWidth,\n\t\t\theight: plotHeight\n\t\t};\n\n\t\tplotBorderWidth = 2 * mathFloor(chart.plotBorderWidth / 2);\n\t\tclipX = mathCeil(mathMax(plotBorderWidth, clipOffset[3]) / 2);\n\t\tclipY = mathCeil(mathMax(plotBorderWidth, clipOffset[0]) / 2);\n\t\tchart.clipBox = {\n\t\t\tx: clipX, \n\t\t\ty: clipY, \n\t\t\twidth: mathFloor(chart.plotSizeX - mathMax(plotBorderWidth, clipOffset[1]) / 2 - clipX), \n\t\t\theight: mathFloor(chart.plotSizeY - mathMax(plotBorderWidth, clipOffset[2]) / 2 - clipY)\n\t\t};\n\n\t\tif (!skipAxes) {\n\t\t\teach(chart.axes, function (axis) {\n\t\t\t\taxis.setAxisSize();\n\t\t\t\taxis.setAxisTranslation();\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Initial margins before auto size margins are applied\n\t */\n\tresetMargins: function () {\n\t\tvar chart = this,\n\t\t\tspacing = chart.spacing,\n\t\t\tmargin = chart.margin;\n\n\t\tchart.plotTop = pick(margin[0], spacing[0]);\n\t\tchart.marginRight = pick(margin[1], spacing[1]);\n\t\tchart.marginBottom = pick(margin[2], spacing[2]);\n\t\tchart.plotLeft = pick(margin[3], spacing[3]);\n\t\tchart.axisOffset = [0, 0, 0, 0]; // top, right, bottom, left\n\t\tchart.clipOffset = [0, 0, 0, 0];\n\t},\n\n\t/**\n\t * Draw the borders and backgrounds for chart and plot area\n\t */\n\tdrawChartBox: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\tchartBackground = chart.chartBackground,\n\t\t\tplotBackground = chart.plotBackground,\n\t\t\tplotBorder = chart.plotBorder,\n\t\t\tplotBGImage = chart.plotBGImage,\n\t\t\tchartBorderWidth = optionsChart.borderWidth || 0,\n\t\t\tchartBackgroundColor = optionsChart.backgroundColor,\n\t\t\tplotBackgroundColor = optionsChart.plotBackgroundColor,\n\t\t\tplotBackgroundImage = optionsChart.plotBackgroundImage,\n\t\t\tplotBorderWidth = optionsChart.plotBorderWidth || 0,\n\t\t\tmgn,\n\t\t\tbgAttr,\n\t\t\tplotLeft = chart.plotLeft,\n\t\t\tplotTop = chart.plotTop,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tplotBox = chart.plotBox,\n\t\t\tclipRect = chart.clipRect,\n\t\t\tclipBox = chart.clipBox;\n\n\t\t// Chart area\n\t\tmgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0);\n\n\t\tif (chartBorderWidth || chartBackgroundColor) {\n\t\t\tif (!chartBackground) {\n\t\t\t\t\n\t\t\t\tbgAttr = {\n\t\t\t\t\tfill: chartBackgroundColor || NONE\n\t\t\t\t};\n\t\t\t\tif (chartBorderWidth) { // #980\n\t\t\t\t\tbgAttr.stroke = optionsChart.borderColor;\n\t\t\t\t\tbgAttr['stroke-width'] = chartBorderWidth;\n\t\t\t\t}\n\t\t\t\tchart.chartBackground = renderer.rect(mgn / 2, mgn / 2, chartWidth - mgn, chartHeight - mgn,\n\t\t\t\t\t\toptionsChart.borderRadius, chartBorderWidth)\n\t\t\t\t\t.attr(bgAttr)\n\t\t\t\t\t.add()\n\t\t\t\t\t.shadow(optionsChart.shadow);\n\n\t\t\t} else { // resize\n\t\t\t\tchartBackground.animate(\n\t\t\t\t\tchartBackground.crisp(null, null, null, chartWidth - mgn, chartHeight - mgn)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\n\t\t// Plot background\n\t\tif (plotBackgroundColor) {\n\t\t\tif (!plotBackground) {\n\t\t\t\tchart.plotBackground = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tfill: plotBackgroundColor\n\t\t\t\t\t})\n\t\t\t\t\t.add()\n\t\t\t\t\t.shadow(optionsChart.plotShadow);\n\t\t\t} else {\n\t\t\t\tplotBackground.animate(plotBox);\n\t\t\t}\n\t\t}\n\t\tif (plotBackgroundImage) {\n\t\t\tif (!plotBGImage) {\n\t\t\t\tchart.plotBGImage = renderer.image(plotBackgroundImage, plotLeft, plotTop, plotWidth, plotHeight)\n\t\t\t\t\t.add();\n\t\t\t} else {\n\t\t\t\tplotBGImage.animate(plotBox);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Plot clip\n\t\tif (!clipRect) {\n\t\t\tchart.clipRect = renderer.clipRect(clipBox);\n\t\t} else {\n\t\t\tclipRect.animate({\n\t\t\t\twidth: clipBox.width,\n\t\t\t\theight: clipBox.height\n\t\t\t});\n\t\t}\n\n\t\t// Plot area border\n\t\tif (plotBorderWidth) {\n\t\t\tif (!plotBorder) {\n\t\t\t\tchart.plotBorder = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0, -plotBorderWidth)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tstroke: optionsChart.plotBorderColor,\n\t\t\t\t\t\t'stroke-width': plotBorderWidth,\n\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t})\n\t\t\t\t\t.add();\n\t\t\t} else {\n\t\t\t\tplotBorder.animate(\n\t\t\t\t\tplotBorder.crisp(null, plotLeft, plotTop, plotWidth, plotHeight)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// reset\n\t\tchart.isDirtyBox = false;\n\t},\n\n\t/**\n\t * Detect whether a certain chart property is needed based on inspecting its options\n\t * and series. This mainly applies to the chart.invert property, and in extensions to \n\t * the chart.angular and chart.polar properties.\n\t */\n\tpropFromSeries: function () {\n\t\tvar chart = this,\n\t\t\toptionsChart = chart.options.chart,\n\t\t\tklass,\n\t\t\tseriesOptions = chart.options.series,\n\t\t\ti,\n\t\t\tvalue;\n\t\t\t\n\t\t\t\n\t\teach(['inverted', 'angular', 'polar'], function (key) {\n\t\t\t\n\t\t\t// The default series type's class\n\t\t\tklass = seriesTypes[optionsChart.type || optionsChart.defaultSeriesType];\n\t\t\t\n\t\t\t// Get the value from available chart-wide properties\n\t\t\tvalue = (\n\t\t\t\tchart[key] || // 1. it is set before\n\t\t\t\toptionsChart[key] || // 2. it is set in the options\n\t\t\t\t(klass && klass.prototype[key]) // 3. it's default series class requires it\n\t\t\t);\n\t\n\t\t\t// 4. Check if any the chart's series require it\n\t\t\ti = seriesOptions && seriesOptions.length;\n\t\t\twhile (!value && i--) {\n\t\t\t\tklass = seriesTypes[seriesOptions[i].type];\n\t\t\t\tif (klass && klass.prototype[key]) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Set the chart property\n\t\t\tchart[key] = value;\t\n\t\t});\n\t\t\n\t},\n\n\t/**\n\t * Link two or more series together. This is done initially from Chart.render,\n\t * and after Chart.addSeries and Series.remove.\n\t */\n\tlinkSeries: function () {\n\t\tvar chart = this,\n\t\t\tchartSeries = chart.series;\n\n\t\t// Reset links\n\t\teach(chartSeries, function (series) {\n\t\t\tseries.linkedSeries.length = 0;\n\t\t});\n\n\t\t// Apply new links\n\t\teach(chartSeries, function (series) {\n\t\t\tvar linkedTo = series.options.linkedTo;\n\t\t\tif (isString(linkedTo)) {\n\t\t\t\tif (linkedTo === ':previous') {\n\t\t\t\t\tlinkedTo = chart.series[series.index - 1];\n\t\t\t\t} else {\n\t\t\t\t\tlinkedTo = chart.get(linkedTo);\n\t\t\t\t}\n\t\t\t\tif (linkedTo) {\n\t\t\t\t\tlinkedTo.linkedSeries.push(series);\n\t\t\t\t\tseries.linkedParent = linkedTo;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Render all graphics for the chart\n\t */\n\trender: function () {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\trenderer = chart.renderer,\n\t\t\toptions = chart.options;\n\n\t\tvar labels = options.labels,\n\t\t\tcredits = options.credits,\n\t\t\tcreditsHref;\n\n\t\t// Title\n\t\tchart.setTitle();\n\n\n\t\t// Legend\n\t\tchart.legend = new Legend(chart, options.legend);\n\n\t\tchart.getStacks(); // render stacks\n\n\t\t// Get margins by pre-rendering axes\n\t\t// set axes scales\n\t\teach(axes, function (axis) {\n\t\t\taxis.setScale();\n\t\t});\n\n\t\tchart.getMargins();\n\n\t\tchart.maxTicks = null; // reset for second pass\n\t\teach(axes, function (axis) {\n\t\t\taxis.setTickPositions(true); // update to reflect the new margins\n\t\t\taxis.setMaxTicks();\n\t\t});\n\t\tchart.adjustTickAmounts();\n\t\tchart.getMargins(); // second pass to check for new labels\n\n\n\t\t// Draw the borders and backgrounds\n\t\tchart.drawChartBox();\t\t\n\n\n\t\t// Axes\n\t\tif (chart.hasCartesianSeries) {\n\t\t\teach(axes, function (axis) {\n\t\t\t\taxis.render();\n\t\t\t});\n\t\t}\n\n\t\t// The series\n\t\tif (!chart.seriesGroup) {\n\t\t\tchart.seriesGroup = renderer.g('series-group')\n\t\t\t\t.attr({ zIndex: 3 })\n\t\t\t\t.add();\n\t\t}\n\t\teach(chart.series, function (serie) {\n\t\t\tserie.translate();\n\t\t\tserie.setTooltipPoints();\n\t\t\tserie.render();\n\t\t});\n\n\t\t// Labels\n\t\tif (labels.items) {\n\t\t\teach(labels.items, function (label) {\n\t\t\t\tvar style = extend(labels.style, label.style),\n\t\t\t\t\tx = pInt(style.left) + chart.plotLeft,\n\t\t\t\t\ty = pInt(style.top) + chart.plotTop + 12;\n\n\t\t\t\t// delete to prevent rewriting in IE\n\t\t\t\tdelete style.left;\n\t\t\t\tdelete style.top;\n\n\t\t\t\trenderer.text(\n\t\t\t\t\tlabel.html,\n\t\t\t\t\tx,\n\t\t\t\t\ty\n\t\t\t\t)\n\t\t\t\t.attr({ zIndex: 2 })\n\t\t\t\t.css(style)\n\t\t\t\t.add();\n\n\t\t\t});\n\t\t}\n\n\t\t// Credits\n\t\tif (credits.enabled && !chart.credits) {\n\t\t\tcreditsHref = credits.href;\n\t\t\tchart.credits = renderer.text(\n\t\t\t\tcredits.text,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t)\n\t\t\t.on('click', function () {\n\t\t\t\tif (creditsHref) {\n\t\t\t\t\tlocation.href = creditsHref;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.attr({\n\t\t\t\talign: credits.position.align,\n\t\t\t\tzIndex: 8\n\t\t\t})\n\t\t\t.css(credits.style)\n\t\t\t.add()\n\t\t\t.align(credits.position);\n\t\t}\n\n\t\t// Set flag\n\t\tchart.hasRendered = true;\n\n\t},\n\n\t/**\n\t * Clean up memory usage\n\t */\n\tdestroy: function () {\n\t\tvar chart = this,\n\t\t\taxes = chart.axes,\n\t\t\tseries = chart.series,\n\t\t\tcontainer = chart.container,\n\t\t\ti,\n\t\t\tparentNode = container && container.parentNode;\n\t\t\t\n\t\t// fire the chart.destoy event\n\t\tfireEvent(chart, 'destroy');\n\t\t\n\t\t// Delete the chart from charts lookup array\n\t\tcharts[chart.index] = UNDEFINED;\n\t\tchart.renderTo.removeAttribute('data-highcharts-chart');\n\n\t\t// remove events\n\t\tremoveEvent(chart);\n\n\t\t// ==== Destroy collections:\n\t\t// Destroy axes\n\t\ti = axes.length;\n\t\twhile (i--) {\n\t\t\taxes[i] = axes[i].destroy();\n\t\t}\n\n\t\t// Destroy each series\n\t\ti = series.length;\n\t\twhile (i--) {\n\t\t\tseries[i] = series[i].destroy();\n\t\t}\n\n\t\t// ==== Destroy chart properties:\n\t\teach(['title', 'subtitle', 'chartBackground', 'plotBackground', 'plotBGImage', \n\t\t\t\t'plotBorder', 'seriesGroup', 'clipRect', 'credits', 'pointer', 'scroller', \n\t\t\t\t'rangeSelector', 'legend', 'resetZoomButton', 'tooltip', 'renderer'], function (name) {\n\t\t\tvar prop = chart[name];\n\n\t\t\tif (prop && prop.destroy) {\n\t\t\t\tchart[name] = prop.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// remove container and all SVG\n\t\tif (container) { // can break in IE when destroyed before finished loading\n\t\t\tcontainer.innerHTML = '';\n\t\t\tremoveEvent(container);\n\t\t\tif (parentNode) {\n\t\t\t\tdiscardElement(container);\n\t\t\t}\n\n\t\t}\n\n\t\t// clean it all up\n\t\tfor (i in chart) {\n\t\t\tdelete chart[i];\n\t\t}\n\n\t},\n\n\n\t/**\n\t * VML namespaces can't be added until after complete. Listening\n\t * for Perini's doScroll hack is not enough.\n\t */\n\tisReadyToRender: function () {\n\t\tvar chart = this;\n\n\t\t// Note: in spite of JSLint's complaints, win == win.top is required\n\t\t/*jslint eqeq: true*/\n\t\tif ((!hasSVG && (win == win.top && doc.readyState !== 'complete')) || (useCanVG && !win.canvg)) {\n\t\t/*jslint eqeq: false*/\n\t\t\tif (useCanVG) {\n\t\t\t\t// Delay rendering until canvg library is downloaded and ready\n\t\t\t\tCanVGController.push(function () { chart.firstRender(); }, chart.options.global.canvasToolsURL);\n\t\t\t} else {\n\t\t\t\tdoc.attachEvent('onreadystatechange', function () {\n\t\t\t\t\tdoc.detachEvent('onreadystatechange', chart.firstRender);\n\t\t\t\t\tif (doc.readyState === 'complete') {\n\t\t\t\t\t\tchart.firstRender();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t/**\n\t * Prepare for first rendering after all data are loaded\n\t */\n\tfirstRender: function () {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\tcallback = chart.callback;\n\n\t\t// Check whether the chart is ready to render\n\t\tif (!chart.isReadyToRender()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Create the container\n\t\tchart.getContainer();\n\n\t\t// Run an early event after the container and renderer are established\n\t\tfireEvent(chart, 'init');\n\n\t\t\n\t\tchart.resetMargins();\n\t\tchart.setChartSize();\n\n\t\t// Set the common chart properties (mainly invert) from the given series\n\t\tchart.propFromSeries();\n\n\t\t// get axes\n\t\tchart.getAxes();\n\n\t\t// Initialize the series\n\t\teach(options.series || [], function (serieOptions) {\n\t\t\tchart.initSeries(serieOptions);\n\t\t});\n\n\t\tchart.linkSeries();\n\n\t\t// Run an event after axes and series are initialized, but before render. At this stage,\n\t\t// the series data is indexed and cached in the xData and yData arrays, so we can access\n\t\t// those before rendering. Used in Highstock. \n\t\tfireEvent(chart, 'beforeRender'); \n\n\t\t// depends on inverted and on margins being set\n\t\tchart.pointer = new Pointer(chart, options);\n\n\t\tchart.render();\n\n\t\t// add canvas\n\t\tchart.renderer.draw();\n\t\t// run callbacks\n\t\tif (callback) {\n\t\t\tcallback.apply(chart, [chart]);\n\t\t}\n\t\teach(chart.callbacks, function (fn) {\n\t\t\tfn.apply(chart, [chart]);\n\t\t});\n\t\t\n\t\t\n\t\t// If the chart was rendered outside the top container, put it back in\n\t\tchart.cloneRenderTo(true);\n\n\t\tfireEvent(chart, 'load');\n\n\t},\n\n\t/**\n\t* Creates arrays for spacing and margin from given options.\n\t*/\n\tsplashArray: function (target, options) {\n\t\tvar oVar = options[target],\n\t\t\ttArray = isObject(oVar) ? oVar : [oVar, oVar, oVar, oVar];\n\n\t\treturn [pick(options[target + 'Top'], tArray[0]),\n\t\t\t\tpick(options[target + 'Right'], tArray[1]),\n\t\t\t\tpick(options[target + 'Bottom'], tArray[2]),\n\t\t\t\tpick(options[target + 'Left'], tArray[3])];\n\t}\n}; // end Chart\n\n// Hook for exporting module\nChart.prototype.callbacks = [];\n/**\n * The Point object and prototype. Inheritable and used as base for PiePoint\n */\nvar Point = function () {};\nPoint.prototype = {\n\n\t/**\n\t * Initialize the point\n\t * @param {Object} series The series object containing this point\n\t * @param {Object} options The data in either number, array or object format\n\t */\n\tinit: function (series, options, x) {\n\n\t\tvar point = this,\n\t\t\tcolors;\n\t\tpoint.series = series;\n\t\tpoint.applyOptions(options, x);\n\t\tpoint.pointAttr = {};\n\n\t\tif (series.options.colorByPoint) {\n\t\t\tcolors = series.options.colors || series.chart.options.colors;\n\t\t\tpoint.color = point.color || colors[series.colorCounter++];\n\t\t\t// loop back to zero\n\t\t\tif (series.colorCounter === colors.length) {\n\t\t\t\tseries.colorCounter = 0;\n\t\t\t}\n\t\t}\n\n\t\tseries.chart.pointCount++;\n\t\treturn point;\n\t},\n\t/**\n\t * Apply the options containing the x and y data and possible some extra properties.\n\t * This is called on point init or from point.update.\n\t *\n\t * @param {Object} options\n\t */\n\tapplyOptions: function (options, x) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tpointValKey = series.pointValKey;\n\n\t\toptions = Point.prototype.optionsToObject.call(this, options);\n\n\t\t// copy options directly to point\n\t\textend(point, options);\n\t\tpoint.options = point.options ? extend(point.options, options) : options;\n\t\t\t\n\t\t// For higher dimension series types. For instance, for ranges, point.y is mapped to point.low.\n\t\tif (pointValKey) {\n\t\t\tpoint.y = point[pointValKey];\n\t\t}\n\t\t\n\t\t// If no x is set by now, get auto incremented value. All points must have an\n\t\t// x value, however the y value can be null to create a gap in the series\n\t\tif (point.x === UNDEFINED && series) {\n\t\t\tpoint.x = x === UNDEFINED ? series.autoIncrement() : x;\n\t\t}\n\t\t\n\t\treturn point;\n\t},\n\n\t/**\n\t * Transform number or array configs into objects\n\t */\n\toptionsToObject: function (options) {\n\t\tvar ret,\n\t\t\tseries = this.series,\n\t\t\tpointArrayMap = series.pointArrayMap || ['y'],\n\t\t\tvalueCount = pointArrayMap.length,\n\t\t\tfirstItemType,\n\t\t\ti = 0,\n\t\t\tj = 0;\n\n\t\tif (typeof options === 'number' || options === null) {\n\t\t\tret = { y: options };\n\n\t\t} else if (isArray(options)) {\n\t\t\tret = {};\n\t\t\t// with leading x value\n\t\t\tif (options.length > valueCount) {\n\t\t\t\tfirstItemType = typeof options[0];\n\t\t\t\tif (firstItemType === 'string') {\n\t\t\t\t\tret.name = options[0];\n\t\t\t\t} else if (firstItemType === 'number') {\n\t\t\t\t\tret.x = options[0];\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\twhile (j < valueCount) {\n\t\t\t\tret[pointArrayMap[j++]] = options[i++];\n\t\t\t}\t\t\t\n\t\t} else if (typeof options === 'object') {\n\t\t\tret = options;\n\n\t\t\t// This is the fastest way to detect if there are individual point dataLabels that need \n\t\t\t// to be considered in drawDataLabels. These can only occur in object configs.\n\t\t\tif (options.dataLabels) {\n\t\t\t\tseries._hasPointLabels = true;\n\t\t\t}\n\n\t\t\t// Same approach as above for markers\n\t\t\tif (options.marker) {\n\t\t\t\tseries._hasPointMarkers = true;\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Destroy a point to clear memory. Its reference still stays in series.data.\n\t */\n\tdestroy: function () {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\thoverPoints = chart.hoverPoints,\n\t\t\tprop;\n\n\t\tchart.pointCount--;\n\n\t\tif (hoverPoints) {\n\t\t\tpoint.setState();\n\t\t\terase(hoverPoints, point);\n\t\t\tif (!hoverPoints.length) {\n\t\t\t\tchart.hoverPoints = null;\n\t\t\t}\n\n\t\t}\n\t\tif (point === chart.hoverPoint) {\n\t\t\tpoint.onMouseOut();\n\t\t}\n\t\t\n\t\t// remove all events\n\t\tif (point.graphic || point.dataLabel) { // removeEvent and destroyElements are performance expensive\n\t\t\tremoveEvent(point);\n\t\t\tpoint.destroyElements();\n\t\t}\n\n\t\tif (point.legendItem) { // pies have legend items\n\t\t\tchart.legend.destroyItem(point);\n\t\t}\n\n\t\tfor (prop in point) {\n\t\t\tpoint[prop] = null;\n\t\t}\n\n\n\t},\n\n\t/**\n\t * Destroy SVG elements associated with the point\n\t */\n\tdestroyElements: function () {\n\t\tvar point = this,\n\t\t\tprops = ['graphic', 'dataLabel', 'dataLabelUpper', 'group', 'connector', 'shadowGroup'],\n\t\t\tprop,\n\t\t\ti = 6;\n\t\twhile (i--) {\n\t\t\tprop = props[i];\n\t\t\tif (point[prop]) {\n\t\t\t\tpoint[prop] = point[prop].destroy();\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Return the configuration hash needed for the data label and tooltip formatters\n\t */\n\tgetLabelConfig: function () {\n\t\tvar point = this;\n\t\treturn {\n\t\t\tx: point.category,\n\t\t\ty: point.y,\n\t\t\tkey: point.name || point.category,\n\t\t\tseries: point.series,\n\t\t\tpoint: point,\n\t\t\tpercentage: point.percentage,\n\t\t\ttotal: point.total || point.stackTotal\n\t\t};\n\t},\n\n\t/**\n\t * Toggle the selection status of a point\n\t * @param {Boolean} selected Whether to select or unselect the point.\n\t * @param {Boolean} accumulate Whether to add to the previous selection. By default,\n\t *     this happens if the control key (Cmd on Mac) was pressed during clicking.\n\t */\n\tselect: function (selected, accumulate) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart;\n\n\t\tselected = pick(selected, !point.selected);\n\n\t\t// fire the event with the defalut handler\n\t\tpoint.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () {\n\t\t\tpoint.selected = point.options.selected = selected;\n\t\t\tseries.options.data[inArray(point, series.data)] = point.options;\n\t\t\t\n\t\t\tpoint.setState(selected && SELECT_STATE);\n\n\t\t\t// unselect all other points unless Ctrl or Cmd + click\n\t\t\tif (!accumulate) {\n\t\t\t\teach(chart.getSelectedPoints(), function (loopPoint) {\n\t\t\t\t\tif (loopPoint.selected && loopPoint !== point) {\n\t\t\t\t\t\tloopPoint.selected = loopPoint.options.selected = false;\n\t\t\t\t\t\tseries.options.data[inArray(loopPoint, series.data)] = loopPoint.options;\n\t\t\t\t\t\tloopPoint.setState(NORMAL_STATE);\n\t\t\t\t\t\tloopPoint.firePointEvent('unselect');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Runs on mouse over the point\n\t */\n\tonMouseOver: function (e) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\ttooltip = chart.tooltip,\n\t\t\thoverPoint = chart.hoverPoint;\n\n\t\t// set normal state to previous series\n\t\tif (hoverPoint && hoverPoint !== point) {\n\t\t\thoverPoint.onMouseOut();\n\t\t}\n\n\t\t// trigger the event\n\t\tpoint.firePointEvent('mouseOver');\n\n\t\t// update the tooltip\n\t\tif (tooltip && (!tooltip.shared || series.noSharedTooltip)) {\n\t\t\ttooltip.refresh(point, e);\n\t\t}\n\n\t\t// hover this\n\t\tpoint.setState(HOVER_STATE);\n\t\tchart.hoverPoint = point;\n\t},\n\t\n\t/**\n\t * Runs on mouse out from the point\n\t */\n\tonMouseOut: function () {\n\t\tvar chart = this.series.chart,\n\t\t\thoverPoints = chart.hoverPoints;\n\t\t\n\t\tif (!hoverPoints || inArray(this, hoverPoints) === -1) { // #887\n\t\t\tthis.firePointEvent('mouseOut');\n\t\n\t\t\tthis.setState();\n\t\t\tchart.hoverPoint = null;\n\t\t}\n\t},\n\n\t/**\n\t * Extendable method for formatting each point's tooltip line\n\t *\n\t * @return {String} A string to be concatenated in to the common tooltip text\n\t */\n\ttooltipFormatter: function (pointFormat) {\n\t\t\n\t\t// Insert options for valueDecimals, valuePrefix, and valueSuffix\n\t\tvar series = this.series,\n\t\t\tseriesTooltipOptions = series.tooltipOptions,\n\t\t\tvalueDecimals = pick(seriesTooltipOptions.valueDecimals, ''),\n\t\t\tvaluePrefix = seriesTooltipOptions.valuePrefix || '',\n\t\t\tvalueSuffix = seriesTooltipOptions.valueSuffix || '';\n\t\t\t\n\t\t// Loop over the point array map and replace unformatted values with sprintf formatting markup\n\t\teach(series.pointArrayMap || ['y'], function (key) {\n\t\t\tkey = '{point.' + key; // without the closing bracket\n\t\t\tif (valuePrefix || valueSuffix) {\n\t\t\t\tpointFormat = pointFormat.replace(key + '}', valuePrefix + key + '}' + valueSuffix);\n\t\t\t}\n\t\t\tpointFormat = pointFormat.replace(key + '}', key + ':,.' + valueDecimals + 'f}');\n\t\t});\n\t\t\n\t\treturn format(pointFormat, {\n\t\t\tpoint: this,\n\t\t\tseries: this.series\n\t\t});\n\t},\n\n\t/**\n\t * Update the point with new options (typically x/y data) and optionally redraw the series.\n\t *\n\t * @param {Object} options Point options as defined in the series.data array\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t *\n\t */\n\tupdate: function (options, redraw, animation) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tgraphic = point.graphic,\n\t\t\ti,\n\t\t\tdata = series.data,\n\t\t\tchart = series.chart,\n\t\t\tseriesOptions = series.options;\n\n\t\tredraw = pick(redraw, true);\n\n\t\t// fire the event with a default handler of doing the update\n\t\tpoint.firePointEvent('update', { options: options }, function () {\n\n\t\t\tpoint.applyOptions(options);\n\n\t\t\t// update visuals\n\t\t\tif (isObject(options)) {\n\t\t\t\tseries.getAttribs();\n\t\t\t\tif (graphic) {\n\t\t\t\t\tif (options.marker && options.marker.symbol) {\n\t\t\t\t\t\tpoint.graphic = graphic.destroy();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgraphic.attr(point.pointAttr[point.state || '']);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// record changes in the parallel arrays\n\t\t\ti = inArray(point, data);\n\t\t\tseries.xData[i] = point.x;\n\t\t\tseries.yData[i] = series.toYData ? series.toYData(point) : point.y;\n\t\t\tseries.zData[i] = point.z;\n\t\t\tseriesOptions.data[i] = point.options;\n\n\t\t\t// redraw\n\t\t\tseries.isDirty = series.isDirtyData = true;\n\t\t\tif (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320\n\t\t\t\tchart.isDirtyBox = true;\n\t\t\t}\n\t\t\t\n\t\t\tif (seriesOptions.legendType === 'point') { // #1831, #1885\n\t\t\t\tchart.legend.destroyItem(point);\n\t\t\t}\n\t\t\tif (redraw) {\n\t\t\t\tchart.redraw(animation);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Remove a point and optionally redraw the series and if necessary the axes\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\tremove: function (redraw, animation) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tpoints = series.points,\n\t\t\tchart = series.chart,\n\t\t\ti,\n\t\t\tdata = series.data;\n\n\t\tsetAnimation(animation, chart);\n\t\tredraw = pick(redraw, true);\n\n\t\t// fire the event with a default handler of removing the point\n\t\tpoint.firePointEvent('remove', null, function () {\n\n\t\t\t// splice all the parallel arrays\n\t\t\ti = inArray(point, data);\n\t\t\tif (data.length === points.length) {\n\t\t\t\tpoints.splice(i, 1);\t\t\t\n\t\t\t}\n\t\t\tdata.splice(i, 1);\n\t\t\tseries.options.data.splice(i, 1);\n\t\t\tseries.xData.splice(i, 1);\n\t\t\tseries.yData.splice(i, 1);\n\t\t\tseries.zData.splice(i, 1);\n\n\t\t\tpoint.destroy();\n\n\n\t\t\t// redraw\n\t\t\tseries.isDirty = true;\n\t\t\tseries.isDirtyData = true;\n\t\t\tif (redraw) {\n\t\t\t\tchart.redraw();\n\t\t\t}\n\t\t});\n\n\n\t},\n\n\t/**\n\t * Fire an event on the Point object. Must not be renamed to fireEvent, as this\n\t * causes a name clash in MooTools\n\t * @param {String} eventType\n\t * @param {Object} eventArgs Additional event arguments\n\t * @param {Function} defaultFunction Default event handler\n\t */\n\tfirePointEvent: function (eventType, eventArgs, defaultFunction) {\n\t\tvar point = this,\n\t\t\tseries = this.series,\n\t\t\tseriesOptions = series.options;\n\n\t\t// load event handlers on demand to save time on mouseover/out\n\t\tif (seriesOptions.point.events[eventType] || (point.options && point.options.events && point.options.events[eventType])) {\n\t\t\tthis.importEvents();\n\t\t}\n\n\t\t// add default handler if in selection mode\n\t\tif (eventType === 'click' && seriesOptions.allowPointSelect) {\n\t\t\tdefaultFunction = function (event) {\n\t\t\t\t// Control key is for Windows, meta (= Cmd key) for Mac, Shift for Opera\n\t\t\t\tpoint.select(null, event.ctrlKey || event.metaKey || event.shiftKey);\n\t\t\t};\n\t\t}\n\n\t\tfireEvent(this, eventType, eventArgs, defaultFunction);\n\t},\n\t/**\n\t * Import events from the series' and point's options. Only do it on\n\t * demand, to save processing time on hovering.\n\t */\n\timportEvents: function () {\n\t\tif (!this.hasImportedEvents) {\n\t\t\tvar point = this,\n\t\t\t\toptions = merge(point.series.options.point, point.options),\n\t\t\t\tevents = options.events,\n\t\t\t\teventType;\n\n\t\t\tpoint.events = events;\n\n\t\t\tfor (eventType in events) {\n\t\t\t\taddEvent(point, eventType, events[eventType]);\n\t\t\t}\n\t\t\tthis.hasImportedEvents = true;\n\n\t\t}\n\t},\n\n\t/**\n\t * Set the point's state\n\t * @param {String} state\n\t */\n\tsetState: function (state) {\n\t\tvar point = this,\n\t\t\tplotX = point.plotX,\n\t\t\tplotY = point.plotY,\n\t\t\tseries = point.series,\n\t\t\tstateOptions = series.options.states,\n\t\t\tmarkerOptions = defaultPlotOptions[series.type].marker && series.options.marker,\n\t\t\tnormalDisabled = markerOptions && !markerOptions.enabled,\n\t\t\tmarkerStateOptions = markerOptions && markerOptions.states[state],\n\t\t\tstateDisabled = markerStateOptions && markerStateOptions.enabled === false,\n\t\t\tstateMarkerGraphic = series.stateMarkerGraphic,\n\t\t\tpointMarker = point.marker || {},\n\t\t\tchart = series.chart,\n\t\t\tradius,\n\t\t\tnewSymbol,\n\t\t\tpointAttr = point.pointAttr;\n\n\t\tstate = state || NORMAL_STATE; // empty string\n\n\t\tif (\n\t\t\t\t// already has this state\n\t\t\t\tstate === point.state ||\n\t\t\t\t// selected points don't respond to hover\n\t\t\t\t(point.selected && state !== SELECT_STATE) ||\n\t\t\t\t// series' state options is disabled\n\t\t\t\t(stateOptions[state] && stateOptions[state].enabled === false) ||\n\t\t\t\t// point marker's state options is disabled\n\t\t\t\t(state && (stateDisabled || (normalDisabled && !markerStateOptions.enabled)))\n\n\t\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// apply hover styles to the existing point\n\t\tif (point.graphic) {\n\t\t\tradius = markerOptions && point.graphic.symbolName && pointAttr[state].r;\n\t\t\tpoint.graphic.attr(merge(\n\t\t\t\tpointAttr[state],\n\t\t\t\tradius ? { // new symbol attributes (#507, #612)\n\t\t\t\t\tx: plotX - radius,\n\t\t\t\t\ty: plotY - radius,\n\t\t\t\t\twidth: 2 * radius,\n\t\t\t\t\theight: 2 * radius\n\t\t\t\t} : {}\n\t\t\t));\n\t\t} else {\n\t\t\t// if a graphic is not applied to each point in the normal state, create a shared\n\t\t\t// graphic for the hover state\n\t\t\tif (state && markerStateOptions) {\n\t\t\t\tradius = markerStateOptions.radius;\n\t\t\t\tnewSymbol = pointMarker.symbol || series.symbol;\n\n\t\t\t\t// If the point has another symbol than the previous one, throw away the \n\t\t\t\t// state marker graphic and force a new one (#1459)\n\t\t\t\tif (stateMarkerGraphic && stateMarkerGraphic.currentSymbol !== newSymbol) {\t\t\t\t\n\t\t\t\t\tstateMarkerGraphic = stateMarkerGraphic.destroy();\n\t\t\t\t}\n\n\t\t\t\t// Add a new state marker graphic\n\t\t\t\tif (!stateMarkerGraphic) {\n\t\t\t\t\tseries.stateMarkerGraphic = stateMarkerGraphic = chart.renderer.symbol(\n\t\t\t\t\t\tnewSymbol,\n\t\t\t\t\t\tplotX - radius,\n\t\t\t\t\t\tplotY - radius,\n\t\t\t\t\t\t2 * radius,\n\t\t\t\t\t\t2 * radius\n\t\t\t\t\t)\n\t\t\t\t\t.attr(pointAttr[state])\n\t\t\t\t\t.add(series.markerGroup);\n\t\t\t\t\tstateMarkerGraphic.currentSymbol = newSymbol;\n\t\t\t\t\n\t\t\t\t// Move the existing graphic\n\t\t\t\t} else {\n\t\t\t\t\tstateMarkerGraphic.attr({ // #1054\n\t\t\t\t\t\tx: plotX - radius,\n\t\t\t\t\t\ty: plotY - radius\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (stateMarkerGraphic) {\n\t\t\t\tstateMarkerGraphic[state && chart.isInsidePlot(plotX, plotY) ? 'show' : 'hide']();\n\t\t\t}\n\t\t}\n\n\t\tpoint.state = state;\n\t}\n};\n\n/**\n * @classDescription The base function which all other series types inherit from. The data in the series is stored\n * in various arrays.\n *\n * - First, series.options.data contains all the original config options for\n * each point whether added by options or methods like series.addPoint.\n * - Next, series.data contains those values converted to points, but in case the series data length\n * exceeds the cropThreshold, or if the data is grouped, series.data doesn't contain all the points. It\n * only contains the points that have been created on demand.\n * - Then there's series.points that contains all currently visible point objects. In case of cropping,\n * the cropped-away points are not part of this array. The series.points array starts at series.cropStart\n * compared to series.data and series.options.data. If however the series data is grouped, these can't\n * be correlated one to one.\n * - series.xData and series.processedXData contain clean x values, equivalent to series.data and series.points.\n * - series.yData and series.processedYData contain clean x values, equivalent to series.data and series.points.\n *\n * @param {Object} chart\n * @param {Object} options\n */\nvar Series = function () {};\n\nSeries.prototype = {\n\n\tisCartesian: true,\n\ttype: 'line',\n\tpointClass: Point,\n\tsorted: true, // requires the data to be sorted\n\trequireSorting: true,\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tstroke: 'lineColor',\n\t\t'stroke-width': 'lineWidth',\n\t\tfill: 'fillColor',\n\t\tr: 'radius'\n\t},\n\tcolorCounter: 0,\n\tinit: function (chart, options) {\n\t\tvar series = this,\n\t\t\teventType,\n\t\t\tevents,\n\t\t\tchartSeries = chart.series;\n\n\t\tseries.chart = chart;\n\t\tseries.options = options = series.setOptions(options); // merge with plotOptions\n\t\tseries.linkedSeries = [];\n\n\t\t// bind the axes\n\t\tseries.bindAxes();\n\n\t\t// set some variables\n\t\textend(series, {\n\t\t\tname: options.name,\n\t\t\tstate: NORMAL_STATE,\n\t\t\tpointAttr: {},\n\t\t\tvisible: options.visible !== false, // true by default\n\t\t\tselected: options.selected === true // false by default\n\t\t});\n\t\t\n\t\t// special\n\t\tif (useCanVG) {\n\t\t\toptions.animation = false;\n\t\t}\n\n\t\t// register event listeners\n\t\tevents = options.events;\n\t\tfor (eventType in events) {\n\t\t\taddEvent(series, eventType, events[eventType]);\n\t\t}\n\t\tif (\n\t\t\t(events && events.click) ||\n\t\t\t(options.point && options.point.events && options.point.events.click) ||\n\t\t\toptions.allowPointSelect\n\t\t) {\n\t\t\tchart.runTrackerClick = true;\n\t\t}\n\n\t\tseries.getColor();\n\t\tseries.getSymbol();\n\n\t\t// set the data\n\t\tseries.setData(options.data, false);\n\t\t\n\t\t// Mark cartesian\n\t\tif (series.isCartesian) {\n\t\t\tchart.hasCartesianSeries = true;\n\t\t}\n\n\t\t// Register it in the chart\n\t\tchartSeries.push(series);\n\t\tseries._i = chartSeries.length - 1;\n\t\t\n\t\t// Sort series according to index option (#248, #1123)\n\t\tstableSort(chartSeries, function (a, b) {\n\t\t\treturn pick(a.options.index, a._i) - pick(b.options.index, a._i);\n\t\t});\n\t\teach(chartSeries, function (series, i) {\n\t\t\tseries.index = i;\n\t\t\tseries.name = series.name || 'Series ' + (i + 1);\n\t\t});\n\n\t},\n\t\n\t/**\n\t * Set the xAxis and yAxis properties of cartesian series, and register the series\n\t * in the axis.series array\n\t */\n\tbindAxes: function () {\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\taxisOptions;\n\t\t\t\n\t\tif (series.isCartesian) {\n\t\t\t\n\t\t\teach(['xAxis', 'yAxis'], function (AXIS) { // repeat for xAxis and yAxis\n\t\t\t\t\n\t\t\t\teach(chart[AXIS], function (axis) { // loop through the chart's axis objects\n\t\t\t\t\t\n\t\t\t\t\taxisOptions = axis.options;\n\t\t\t\t\t\n\t\t\t\t\t// apply if the series xAxis or yAxis option mathches the number of the \n\t\t\t\t\t// axis, or if undefined, use the first axis\n\t\t\t\t\tif ((seriesOptions[AXIS] === axisOptions.index) ||\n\t\t\t\t\t\t\t(seriesOptions[AXIS] !== UNDEFINED && seriesOptions[AXIS] === axisOptions.id) ||\n\t\t\t\t\t\t\t(seriesOptions[AXIS] === UNDEFINED && axisOptions.index === 0)) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// register this series in the axis.series lookup\n\t\t\t\t\t\taxis.series.push(series);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// set this series.xAxis or series.yAxis reference\n\t\t\t\t\t\tseries[AXIS] = axis;\n\t\t\t\t\t\t\n\t\t\t\t\t\t// mark dirty for redraw\n\t\t\t\t\t\taxis.isDirty = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// The series needs an X and an Y axis\n\t\t\t\tif (!series[AXIS]) {\n\t\t\t\t\terror(18, true);\n\t\t\t\t}\n\n\t\t\t});\n\t\t}\n\t},\n\n\n\t/**\n\t * Return an auto incremented x value based on the pointStart and pointInterval options.\n\t * This is only used if an x value is not given for the point that calls autoIncrement.\n\t */\n\tautoIncrement: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\txIncrement = series.xIncrement;\n\n\t\txIncrement = pick(xIncrement, options.pointStart, 0);\n\n\t\tseries.pointInterval = pick(series.pointInterval, options.pointInterval, 1);\n\n\t\tseries.xIncrement = xIncrement + series.pointInterval;\n\t\treturn xIncrement;\n\t},\n\n\t/**\n\t * Divide the series data into segments divided by null values.\n\t */\n\tgetSegments: function () {\n\t\tvar series = this,\n\t\t\tlastNull = -1,\n\t\t\tsegments = [],\n\t\t\ti,\n\t\t\tpoints = series.points,\n\t\t\tpointsLength = points.length;\n\n\t\tif (pointsLength) { // no action required for []\n\t\t\t\n\t\t\t// if connect nulls, just remove null points\n\t\t\tif (series.options.connectNulls) {\n\t\t\t\ti = pointsLength;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tif (points[i].y === null) {\n\t\t\t\t\t\tpoints.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (points.length) {\n\t\t\t\t\tsegments = [points];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t// else, split on null points\n\t\t\t} else {\n\t\t\t\teach(points, function (point, i) {\n\t\t\t\t\tif (point.y === null) {\n\t\t\t\t\t\tif (i > lastNull + 1) {\n\t\t\t\t\t\t\tsegments.push(points.slice(lastNull + 1, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastNull = i;\n\t\t\t\t\t} else if (i === pointsLength - 1) { // last value\n\t\t\t\t\t\tsegments.push(points.slice(lastNull + 1, i + 1));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t// register it\n\t\tseries.segments = segments;\n\t},\n\t\n\t/**\n\t * Set the series options by merging from the options tree\n\t * @param {Object} itemOptions\n\t */\n\tsetOptions: function (itemOptions) {\n\t\tvar chart = this.chart,\n\t\t\tchartOptions = chart.options,\n\t\t\tplotOptions = chartOptions.plotOptions,\n\t\t\ttypeOptions = plotOptions[this.type],\n\t\t\toptions;\n\n\t\tthis.userOptions = itemOptions;\n\n\t\toptions = merge(\n\t\t\ttypeOptions,\n\t\t\tplotOptions.series,\n\t\t\titemOptions\n\t\t);\n\t\t\n\t\t// the tooltip options are merged between global and series specific options\n\t\tthis.tooltipOptions = merge(chartOptions.tooltip, options.tooltip);\n\t\t\n\t\t// Delte marker object if not allowed (#1125)\n\t\tif (typeOptions.marker === null) {\n\t\t\tdelete options.marker;\n\t\t}\n\t\t\n\t\treturn options;\n\n\t},\n\t/**\n\t * Get the series' color\n\t */\n\tgetColor: function () {\n\t\tvar options = this.options,\n\t\t\tuserOptions = this.userOptions,\n\t\t\tdefaultColors = this.chart.options.colors,\n\t\t\tcounters = this.chart.counters,\n\t\t\tcolor,\n\t\t\tcolorIndex;\n\n\t\tcolor = options.color || defaultPlotOptions[this.type].color;\n\n\t\tif (!color && !options.colorByPoint) {\n\t\t\tif (defined(userOptions._colorIndex)) { // after Series.update()\n\t\t\t\tcolorIndex = userOptions._colorIndex;\n\t\t\t} else {\n\t\t\t\tuserOptions._colorIndex = counters.color;\n\t\t\t\tcolorIndex = counters.color++;\n\t\t\t}\n\t\t\tcolor = defaultColors[colorIndex];\n\t\t}\n\t\t\n\t\tthis.color = color;\n\t\tcounters.wrapColor(defaultColors.length);\n\t},\n\t/**\n\t * Get the series' symbol\n\t */\n\tgetSymbol: function () {\n\t\tvar series = this,\n\t\t\tuserOptions = series.userOptions,\n\t\t\tseriesMarkerOption = series.options.marker,\n\t\t\tchart = series.chart,\n\t\t\tdefaultSymbols = chart.options.symbols,\n\t\t\tcounters = chart.counters,\n\t\t\tsymbolIndex;\n\n\t\tseries.symbol = seriesMarkerOption.symbol;\n\t\tif (!series.symbol) {\n\t\t\tif (defined(userOptions._symbolIndex)) { // after Series.update()\n\t\t\t\tsymbolIndex = userOptions._symbolIndex;\n\t\t\t} else {\n\t\t\t\tuserOptions._symbolIndex = counters.symbol;\n\t\t\t\tsymbolIndex = counters.symbol++;\n\t\t\t}\n\t\t\tseries.symbol = defaultSymbols[symbolIndex];\n\t\t}\n\n\t\t// don't substract radius in image symbols (#604)\n\t\tif (/^url/.test(series.symbol)) {\n\t\t\tseriesMarkerOption.radius = 0;\n\t\t}\n\t\tcounters.wrapSymbol(defaultSymbols.length);\n\t},\n\n\t/**\n\t * Get the series' symbol in the legend. This method should be overridable to create custom \n\t * symbols through Highcharts.seriesTypes[type].prototype.drawLegendSymbols.\n\t * \n\t * @param {Object} legend The legend object\n\t */\n\tdrawLegendSymbol: function (legend) {\n\t\t\n\t\tvar options = this.options,\n\t\t\tmarkerOptions = options.marker,\n\t\t\tradius,\n\t\t\tlegendOptions = legend.options,\n\t\t\tlegendSymbol,\n\t\t\tsymbolWidth = legendOptions.symbolWidth,\n\t\t\trenderer = this.chart.renderer,\n\t\t\tlegendItemGroup = this.legendGroup,\n\t\t\tverticalCenter = legend.baseline - mathRound(renderer.fontMetrics(legendOptions.itemStyle.fontSize).b * 0.3),\n\t\t\tattr;\n\t\t\t\n\t\t// Draw the line\n\t\tif (options.lineWidth) {\n\t\t\tattr = {\n\t\t\t\t'stroke-width': options.lineWidth\n\t\t\t};\n\t\t\tif (options.dashStyle) {\n\t\t\t\tattr.dashstyle = options.dashStyle;\n\t\t\t}\n\t\t\tthis.legendLine = renderer.path([\n\t\t\t\tM,\n\t\t\t\t0,\n\t\t\t\tverticalCenter,\n\t\t\t\tL,\n\t\t\t\tsymbolWidth,\n\t\t\t\tverticalCenter\n\t\t\t])\n\t\t\t.attr(attr)\n\t\t\t.add(legendItemGroup);\n\t\t}\n\t\t\n\t\t// Draw the marker\n\t\tif (markerOptions && markerOptions.enabled) {\n\t\t\tradius = markerOptions.radius;\n\t\t\tthis.legendSymbol = legendSymbol = renderer.symbol(\n\t\t\t\tthis.symbol,\n\t\t\t\t(symbolWidth / 2) - radius,\n\t\t\t\tverticalCenter - radius,\n\t\t\t\t2 * radius,\n\t\t\t\t2 * radius\n\t\t\t)\n\t\t\t.add(legendItemGroup);\n\t\t\tlegendSymbol.isMarker = true;\n\t\t}\n\t},\n\n\t/**\n\t * Add a point dynamically after chart load time\n\t * @param {Object} options Point options as given in series.data\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean} shift If shift is true, a point is shifted off the start\n\t *    of the series as one is appended to the end.\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\taddPoint: function (options, redraw, shift, animation) {\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\tdata = series.data,\n\t\t\tgraph = series.graph,\n\t\t\tarea = series.area,\n\t\t\tchart = series.chart,\n\t\t\txData = series.xData,\n\t\t\tyData = series.yData,\n\t\t\tzData = series.zData,\n\t\t\tnames = series.names,\n\t\t\tcurrentShift = (graph && graph.shift) || 0,\n\t\t\tdataOptions = seriesOptions.data,\n\t\t\tpoint,\n\t\t\tisInTheMiddle,\n\t\t\tx,\n\t\t\ti;\n\n\t\tsetAnimation(animation, chart);\n\n\t\t// Make graph animate sideways\n\t\tif (shift) {\n\t\t\teach([graph, area, series.graphNeg, series.areaNeg], function (shape) {\n\t\t\t\tif (shape) {\n\t\t\t\t\tshape.shift = currentShift + 1;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (area) {\n\t\t\tarea.isArea = true; // needed in animation, both with and without shift\n\t\t}\n\t\t\n\t\t// Optional redraw, defaults to true\n\t\tredraw = pick(redraw, true);\n\n\t\t// Get options and push the point to xData, yData and series.options. In series.generatePoints\n\t\t// the Point instance will be created on demand and pushed to the series.data array.\n\t\tpoint = { series: series };\n\t\tseries.pointClass.prototype.applyOptions.apply(point, [options]);\n\t\tx = point.x;\n\n\t\t// Get the insertion point\n\t\ti = xData.length;\n\t\tif (series.requireSorting && x < xData[i - 1]) {\n\t\t\tisInTheMiddle = true;\n\t\t\twhile (i && xData[i - 1] > x) {\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\t\n\t\txData.splice(i, 0, x);\n\t\tyData.splice(i, 0, series.toYData ? series.toYData(point) : point.y);\n\t\tzData.splice(i, 0, point.z);\n\t\tif (names) {\n\t\t\tnames[x] = point.name;\n\t\t}\n\t\tdataOptions.splice(i, 0, options);\n\n\t\tif (isInTheMiddle) {\n\t\t\tseries.data.splice(i, 0, null);\n\t\t\tseries.processData();\n\t\t}\n\t\t\n\t\t// Generate points to be added to the legend (#1329) \n\t\tif (seriesOptions.legendType === 'point') {\n\t\t\tseries.generatePoints();\n\t\t}\n\n\t\t// Shift the first point off the parallel arrays\n\t\t// todo: consider series.removePoint(i) method\n\t\tif (shift) {\n\t\t\tif (data[0] && data[0].remove) {\n\t\t\t\tdata[0].remove(false);\n\t\t\t} else {\n\t\t\t\tdata.shift();\n\t\t\t\txData.shift();\n\t\t\t\tyData.shift();\n\t\t\t\tzData.shift();\n\t\t\t\tdataOptions.shift();\n\t\t\t}\n\t\t}\n\n\t\t// redraw\n\t\tseries.isDirty = true;\n\t\tseries.isDirtyData = true;\n\t\tif (redraw) {\n\t\t\tseries.getAttribs(); // #1937\n\t\t\tchart.redraw();\n\t\t}\n\t},\n\n\t/**\n\t * Replace the series data with a new set of data\n\t * @param {Object} data\n\t * @param {Object} redraw\n\t */\n\tsetData: function (data, redraw) {\n\t\tvar series = this,\n\t\t\toldData = series.points,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\tfirstPoint = null,\n\t\t\txAxis = series.xAxis,\n\t\t\tnames = xAxis && xAxis.categories && !xAxis.categories.length ? [] : null,\n\t\t\ti;\n\n\t\t// reset properties\n\t\tseries.xIncrement = null;\n\t\tseries.pointRange = xAxis && xAxis.categories ? 1 : options.pointRange;\n\n\t\tseries.colorCounter = 0; // for series with colorByPoint (#1547)\n\t\t\n\t\t// parallel arrays\n\t\tvar xData = [],\n\t\t\tyData = [],\n\t\t\tzData = [],\n\t\t\tdataLength = data ? data.length : [],\n\t\t\tturboThreshold = pick(options.turboThreshold, 1000),\n\t\t\tpt,\n\t\t\tpointArrayMap = series.pointArrayMap,\n\t\t\tvalueCount = pointArrayMap && pointArrayMap.length,\n\t\t\thasToYData = !!series.toYData;\n\n\t\t// In turbo mode, only one- or twodimensional arrays of numbers are allowed. The\n\t\t// first value is tested, and we assume that all the rest are defined the same\n\t\t// way. Although the 'for' loops are similar, they are repeated inside each\n\t\t// if-else conditional for max performance.\n\t\tif (turboThreshold && dataLength > turboThreshold) { \n\t\t\t\n\t\t\t// find the first non-null point\n\t\t\ti = 0;\n\t\t\twhile (firstPoint === null && i < dataLength) {\n\t\t\t\tfirstPoint = data[i];\n\t\t\t\ti++;\n\t\t\t}\n\t\t\n\t\t\n\t\t\tif (isNumber(firstPoint)) { // assume all points are numbers\n\t\t\t\tvar x = pick(options.pointStart, 0),\n\t\t\t\t\tpointInterval = pick(options.pointInterval, 1);\n\n\t\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\t\txData[i] = x;\n\t\t\t\t\tyData[i] = data[i];\n\t\t\t\t\tx += pointInterval;\n\t\t\t\t}\n\t\t\t\tseries.xIncrement = x;\n\t\t\t} else if (isArray(firstPoint)) { // assume all points are arrays\n\t\t\t\tif (valueCount) { // [x, low, high] or [x, o, h, l, c]\n\t\t\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\t\t\tpt = data[i];\n\t\t\t\t\t\txData[i] = pt[0];\n\t\t\t\t\t\tyData[i] = pt.slice(1, valueCount + 1);\n\t\t\t\t\t}\n\t\t\t\t} else { // [x, y]\n\t\t\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\t\t\tpt = data[i];\n\t\t\t\t\t\txData[i] = pt[0];\n\t\t\t\t\t\tyData[i] = pt[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terror(12); // Highcharts expects configs to be numbers or arrays in turbo mode\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\tif (data[i] !== UNDEFINED) { // stray commas in oldIE\n\t\t\t\t\tpt = { series: series };\n\t\t\t\t\tseries.pointClass.prototype.applyOptions.apply(pt, [data[i]]);\n\t\t\t\t\txData[i] = pt.x;\n\t\t\t\t\tyData[i] = hasToYData ? series.toYData(pt) : pt.y;\n\t\t\t\t\tzData[i] = pt.z;\n\t\t\t\t\tif (names && pt.name) {\n\t\t\t\t\t\tnames[pt.x] = pt.name; // #2046\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Forgetting to cast strings to numbers is a common caveat when handling CSV or JSON\t\t\n\t\tif (isString(yData[0])) {\n\t\t\terror(14, true);\n\t\t} \n\n\t\tseries.data = [];\n\t\tseries.options.data = data;\n\t\tseries.xData = xData;\n\t\tseries.yData = yData;\n\t\tseries.zData = zData;\n\t\tseries.names = names;\n\n\t\t// destroy old points\n\t\ti = (oldData && oldData.length) || 0;\n\t\twhile (i--) {\n\t\t\tif (oldData[i] && oldData[i].destroy) {\n\t\t\t\toldData[i].destroy();\n\t\t\t}\n\t\t}\n\n\t\t// reset minRange (#878)\n\t\tif (xAxis) {\n\t\t\txAxis.minRange = xAxis.userMinRange;\n\t\t}\n\n\t\t// redraw\n\t\tseries.isDirty = series.isDirtyData = chart.isDirtyBox = true;\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Remove a series and optionally redraw the chart\n\t *\n\t * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call\n\t * @param {Boolean|Object} animation Whether to apply animation, and optionally animation\n\t *    configuration\n\t */\n\n\tremove: function (redraw, animation) {\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\t\tredraw = pick(redraw, true);\n\n\t\tif (!series.isRemoving) {  /* prevent triggering native event in jQuery\n\t\t\t\t(calling the remove function from the remove event) */\n\t\t\tseries.isRemoving = true;\n\n\t\t\t// fire the event with a default handler of removing the point\n\t\t\tfireEvent(series, 'remove', null, function () {\n\n\n\t\t\t\t// destroy elements\n\t\t\t\tseries.destroy();\n\n\n\t\t\t\t// redraw\n\t\t\t\tchart.isDirtyLegend = chart.isDirtyBox = true;\n\t\t\t\tchart.linkSeries();\n\t\t\t\t\n\t\t\t\tif (redraw) {\n\t\t\t\t\tchart.redraw(animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t\tseries.isRemoving = false;\n\t},\n\n\t/**\n\t * Process the data by cropping away unused data points if the series is longer\n\t * than the crop threshold. This saves computing time for lage series.\n\t */\n\tprocessData: function (force) {\n\t\tvar series = this,\n\t\t\tprocessedXData = series.xData, // copied during slice operation below\n\t\t\tprocessedYData = series.yData,\n\t\t\tdataLength = processedXData.length,\n\t\t\tcroppedData,\n\t\t\tcropStart = 0,\n\t\t\tcropped,\n\t\t\tdistance,\n\t\t\tclosestPointRange,\n\t\t\txAxis = series.xAxis,\n\t\t\ti, // loop variable\n\t\t\toptions = series.options,\n\t\t\tcropThreshold = options.cropThreshold,\n\t\t\tisCartesian = series.isCartesian;\n\n\t\t// If the series data or axes haven't changed, don't go through this. Return false to pass\n\t\t// the message on to override methods like in data grouping. \n\t\tif (isCartesian && !series.isDirty && !xAxis.isDirty && !series.yAxis.isDirty && !force) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\n\t\t// optionally filter out points outside the plot area\n\t\tif (isCartesian && series.sorted && (!cropThreshold || dataLength > cropThreshold || series.forceCrop)) {\n\t\t\tvar min = xAxis.min,\n\t\t\t\tmax = xAxis.max;\n\n\t\t\t// it's outside current extremes\n\t\t\tif (processedXData[dataLength - 1] < min || processedXData[0] > max) {\n\t\t\t\tprocessedXData = [];\n\t\t\t\tprocessedYData = [];\n\t\t\t\n\t\t\t// only crop if it's actually spilling out\n\t\t\t} else if (processedXData[0] < min || processedXData[dataLength - 1] > max) {\n\t\t\t\tcroppedData = this.cropData(series.xData, series.yData, min, max);\n\t\t\t\tprocessedXData = croppedData.xData;\n\t\t\t\tprocessedYData = croppedData.yData;\n\t\t\t\tcropStart = croppedData.start;\n\t\t\t\tcropped = true;\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\t\t// Find the closest distance between processed points\n\t\tfor (i = processedXData.length - 1; i >= 0; i--) {\n\t\t\tdistance = processedXData[i] - processedXData[i - 1];\n\t\t\tif (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) {\n\t\t\t\tclosestPointRange = distance;\n\n\t\t\t// Unsorted data is not supported by the line tooltip, as well as data grouping and \n\t\t\t// navigation in Stock charts (#725) and width calculation of columns (#1900)\n\t\t\t} else if (distance < 0 && series.requireSorting) {\n\t\t\t\terror(15);\n\t\t\t}\n\t\t}\n\n\t\t// Record the properties\n\t\tseries.cropped = cropped; // undefined or true\n\t\tseries.cropStart = cropStart;\n\t\tseries.processedXData = processedXData;\n\t\tseries.processedYData = processedYData;\n\n\t\tif (options.pointRange === null) { // null means auto, as for columns, candlesticks and OHLC\n\t\t\tseries.pointRange = closestPointRange || 1;\n\t\t}\n\t\tseries.closestPointRange = closestPointRange;\n\t\t\n\t},\n\n\t/**\n\t * Iterate over xData and crop values between min and max. Returns object containing crop start/end\n\t * cropped xData with corresponding part of yData, dataMin and dataMax within the cropped range\n\t */\n\tcropData: function (xData, yData, min, max) {\n\t\tvar dataLength = xData.length,\n\t\t\tcropStart = 0,\n\t\t\tcropEnd = dataLength,\n\t\t\tcropShoulder = pick(this.cropShoulder, 1), // line-type series need one point outside\n\t\t\ti;\n\n\t\t// iterate up to find slice start\n\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\tif (xData[i] >= min) {\n\t\t\t\tcropStart = mathMax(0, i - cropShoulder);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// proceed to find slice end\n\t\tfor (; i < dataLength; i++) {\n\t\t\tif (xData[i] > max) {\n\t\t\t\tcropEnd = i + cropShoulder;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\txData: xData.slice(cropStart, cropEnd),\n\t\t\tyData: yData.slice(cropStart, cropEnd),\n\t\t\tstart: cropStart,\n\t\t\tend: cropEnd\n\t\t};\n\t},\n\n\n\t/**\n\t * Generate the data point after the data has been processed by cropping away\n\t * unused points and optionally grouped in Highcharts Stock.\n\t */\n\tgeneratePoints: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tdataOptions = options.data,\n\t\t\tdata = series.data,\n\t\t\tdataLength,\n\t\t\tprocessedXData = series.processedXData,\n\t\t\tprocessedYData = series.processedYData,\n\t\t\tpointClass = series.pointClass,\n\t\t\tprocessedDataLength = processedXData.length,\n\t\t\tcropStart = series.cropStart || 0,\n\t\t\tcursor,\n\t\t\thasGroupedData = series.hasGroupedData,\n\t\t\tpoint,\n\t\t\tpoints = [],\n\t\t\ti;\n\n\t\tif (!data && !hasGroupedData) {\n\t\t\tvar arr = [];\n\t\t\tarr.length = dataOptions.length;\n\t\t\tdata = series.data = arr;\n\t\t}\n\n\t\tfor (i = 0; i < processedDataLength; i++) {\n\t\t\tcursor = cropStart + i;\n\t\t\tif (!hasGroupedData) {\n\t\t\t\tif (data[cursor]) {\n\t\t\t\t\tpoint = data[cursor];\n\t\t\t\t} else if (dataOptions[cursor] !== UNDEFINED) { // #970\n\t\t\t\t\tdata[cursor] = point = (new pointClass()).init(series, dataOptions[cursor], processedXData[i]);\n\t\t\t\t}\n\t\t\t\tpoints[i] = point;\n\t\t\t} else {\n\t\t\t\t// splat the y data in case of ohlc data array\n\t\t\t\tpoints[i] = (new pointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i])));\n\t\t\t}\n\t\t}\n\n\t\t// Hide cropped-away points - this only runs when the number of points is above cropThreshold, or when\n\t\t// swithching view from non-grouped data to grouped data (#637)\t\n\t\tif (data && (processedDataLength !== (dataLength = data.length) || hasGroupedData)) {\n\t\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\t\tif (i === cropStart && !hasGroupedData) { // when has grouped data, clear all points\n\t\t\t\t\ti += processedDataLength;\n\t\t\t\t}\n\t\t\t\tif (data[i]) {\n\t\t\t\t\tdata[i].destroyElements();\n\t\t\t\t\tdata[i].plotX = UNDEFINED; // #1003\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tseries.data = data;\n\t\tseries.points = points;\n\t},\n\n\t/**\n\t * Adds series' points value to corresponding stack\n\t */\n\tsetStackedPoints: function () {\n\t\tif (!this.options.stacking || (this.visible !== true && this.chart.options.chart.ignoreHiddenSeries !== false)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar series = this,\n\t\t\txData = series.processedXData,\n\t\t\tyData = series.processedYData,\n\t\t\tstackedYData = [],\n\t\t\tyDataLength = yData.length,\n\t\t\tseriesOptions = series.options,\n\t\t\tthreshold = seriesOptions.threshold,\n\t\t\tstackOption = seriesOptions.stack,\n\t\t\tstacking = seriesOptions.stacking,\n\t\t\tstackKey = series.stackKey,\n\t\t\tnegKey = '-' + stackKey,\n\t\t\tnegStacks = series.negStacks,\n\t\t\tyAxis = series.yAxis,\n\t\t\tstacks = yAxis.stacks,\n\t\t\toldStacks = yAxis.oldStacks,\n\t\t\tisNegative,\n\t\t\tstack,\n\t\t\tother,\n\t\t\tkey,\n\t\t\ti,\n\t\t\tx,\n\t\t\ty;\n\n\t\t// loop over the non-null y values and read them into a local array\n\t\tfor (i = 0; i < yDataLength; i++) {\n\t\t\tx = xData[i];\n\t\t\ty = yData[i];\n\n\t\t\t// Read stacked values into a stack based on the x value,\n\t\t\t// the sign of y and the stack key. Stacking is also handled for null values (#739)\n\t\t\tisNegative = negStacks && y < threshold;\n\t\t\tkey = isNegative ? negKey : stackKey;\n\n\t\t\t// Create empty object for this stack if it doesn't exist yet\n\t\t\tif (!stacks[key]) {\n\t\t\t\tstacks[key] = {};\n\t\t\t}\n\n\t\t\t// Initialize StackItem for this x\n\t\t\tif (!stacks[key][x]) {\n\t\t\t\tif (oldStacks[key] && oldStacks[key][x]) {\n\t\t\t\t\tstacks[key][x] = oldStacks[key][x];\n\t\t\t\t\tstacks[key][x].total = null;\n\t\t\t\t} else {\n\t\t\t\t\tstacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, isNegative, x, stackOption, stacking);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the StackItem doesn't exist, create it first\n\t\t\tstack = stacks[key][x];\n\t\t\tstack.points[series.index] = [stack.cum || 0];\n\n\t\t\t// Add value to the stack total\n\t\t\tif (stacking === 'percent') {\n\t\t\t\t\n\t\t\t\t// Percent stacked column, totals are the same for the positive and negative stacks\n\t\t\t\tother = isNegative ? stackKey : negKey;\n\t\t\t\tif (negStacks && stacks[other] && stacks[other][x]) {\n\t\t\t\t\tother = stacks[other][x];\n\t\t\t\t\tstack.total = other.total = mathMax(other.total, stack.total) + mathAbs(y) || 0;\n\n\t\t\t\t// Percent stacked areas\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tstack.total += mathAbs(y) || 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstack.total += y || 0;\n\t\t\t}\n\n\t\t\tstack.cum = (stack.cum || 0) + (y || 0);\n\n\t\t\tstack.points[series.index].push(stack.cum);\n\t\t\tstackedYData[i] = stack.cum;\n\n\t\t}\n\n\t\tif (stacking === 'percent') {\n\t\t\tyAxis.usePercentage = true;\n\t\t}\n\n\t\tthis.stackedYData = stackedYData; // To be used in getExtremes\n\t\t\n\t\t// Reset old stacks\n\t\tyAxis.oldStacks = {};\n\t},\n\n\t/**\n\t * Iterate over all stacks and compute the absolute values to percent\n\t */\n\tsetPercentStacks: function () {\n\t\tvar series = this,\n\t\t\tstackKey = series.stackKey,\n\t\t\tstacks = series.yAxis.stacks;\n\t\t\n\t\teach([stackKey, '-' + stackKey], function (key) {\n\t\t\tvar i = series.xData.length,\n\t\t\t\tx,\n\t\t\t\tstack,\n\t\t\t\tpointExtremes,\n\t\t\t\ttotalFactor;\n\n\t\t\twhile (i--) {\n\t\t\t\tx = series.xData[i];\n\t\t\t\tstack = stacks[key] && stacks[key][x];\n\t\t\t\tpointExtremes = stack && stack.points[series.index];\n\t\t\t\tif (pointExtremes) {\n\t\t\t\t\ttotalFactor = stack.total ? 100 / stack.total : 0;\n\t\t\t\t\tpointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor); // Y bottom value\n\t\t\t\t\tpointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor); // Y value\n\t\t\t\t\tseries.stackedYData[i] = pointExtremes[1];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Calculate Y extremes for visible data\n\t */\n\tgetExtremes: function () {\n\t\tvar xAxis = this.xAxis,\n\t\t\tyAxis = this.yAxis,\n\t\t\txData = this.processedXData,\n\t\t\tyData = this.stackedYData || this.processedYData,\n\t\t\tyDataLength = yData.length,\n\t\t\tactiveYData = [],\n\t\t\tactiveCounter = 0,\n\t\t\txExtremes = xAxis.getExtremes(), // #2117, need to compensate for log X axis\n\t\t\txMin = xExtremes.min,\n\t\t\txMax = xExtremes.max,\n\t\t\tvalidValue,\n\t\t\twithinRange,\n\t\t\tdataMin,\n\t\t\tdataMax,\n\t\t\tx,\n\t\t\ty,\n\t\t\ti,\n\t\t\tj;\n\n\t\tfor (i = 0; i < yDataLength; i++) {\n\t\t\t\n\t\t\tx = xData[i];\n\t\t\ty = yData[i];\n\n\t\t\t// For points within the visible range, including the first point outside the\n\t\t\t// visible range, consider y extremes\n\t\t\tvalidValue = y !== null && y !== UNDEFINED && (!yAxis.isLog || (y.length || y > 0));\n\t\t\twithinRange = this.getExtremesFromAll || this.cropped || ((xData[i + 1] || x) >= xMin && \n\t\t\t\t(xData[i - 1] || x) <= xMax);\n\n\t\t\tif (validValue && withinRange) {\n\n\t\t\t\tj = y.length;\n\t\t\t\tif (j) { // array, like ohlc or range data\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\tif (y[j] !== null) {\n\t\t\t\t\t\t\tactiveYData[activeCounter++] = y[j];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tactiveYData[activeCounter++] = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.dataMin = pick(dataMin, arrayMin(activeYData));\n\t\tthis.dataMax = pick(dataMax, arrayMax(activeYData));\n\t},\n\n\t/**\n\t * Translate data points from raw data values to chart specific positioning data\n\t * needed later in drawPoints, drawGraph and drawTracker.\n\t */\n\ttranslate: function () {\n\t\tif (!this.processedXData) { // hidden series\n\t\t\tthis.processData();\n\t\t}\n\t\tthis.generatePoints();\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tstacking = options.stacking,\n\t\t\txAxis = series.xAxis,\n\t\t\tcategories = xAxis.categories,\n\t\t\tyAxis = series.yAxis,\n\t\t\tpoints = series.points,\n\t\t\tdataLength = points.length,\n\t\t\thasModifyValue = !!series.modifyValue,\n\t\t\ti,\n\t\t\tpointPlacement = options.pointPlacement,\n\t\t\tdynamicallyPlaced = pointPlacement === 'between' || isNumber(pointPlacement),\n\t\t\tthreshold = options.threshold;\n\n\t\t\n\t\t// Translate each point\n\t\tfor (i = 0; i < dataLength; i++) {\n\t\t\tvar point = points[i],\n\t\t\t\txValue = point.x,\n\t\t\t\tyValue = point.y,\n\t\t\t\tyBottom = point.low,\n\t\t\t\tstack = yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey],\n\t\t\t\tpointStack,\n\t\t\t\tstackValues;\n\n\t\t\t// Discard disallowed y values for log axes\n\t\t\tif (yAxis.isLog && yValue <= 0) {\n\t\t\t\tpoint.y = yValue = null;\n\t\t\t}\n\t\t\t\n\t\t\t// Get the plotX translation\n\t\t\tpoint.plotX = xAxis.translate(xValue, 0, 0, 0, 1, pointPlacement, this.type === 'flags'); // Math.round fixes #591\n\t\t\t\n\n\t\t\t// Calculate the bottom y value for stacked series\n\t\t\tif (stacking && series.visible && stack && stack[xValue]) {\n\n\t\t\t\tpointStack = stack[xValue];\n\t\t\t\tstackValues = pointStack.points[series.index];\n\t\t\t\tyBottom = stackValues[0];\n\t\t\t\tyValue = stackValues[1];\n\n\t\t\t\tif (yBottom === 0) {\n\t\t\t\t\tyBottom = pick(threshold, yAxis.min);\n\t\t\t\t}\n\t\t\t\tif (yAxis.isLog && yBottom <= 0) { // #1200, #1232\n\t\t\t\t\tyBottom = null;\n\t\t\t\t}\n\n\t\t\t\tpoint.percentage = stacking === 'percent' && yValue;\n\t\t\t\tpoint.total = point.stackTotal = pointStack.total;\n\t\t\t\tpoint.stackY = yValue;\n\n\t\t\t\t// Place the stack label\n\t\t\t\tpointStack.setOffset(series.pointXOffset || 0, series.barW || 0);\n\t\t\t\t\n\t\t\t}\n\n\t\t\t// Set translated yBottom or remove it\n\t\t\tpoint.yBottom = defined(yBottom) ? \n\t\t\t\tyAxis.translate(yBottom, 0, 1, 0, 1) :\n\t\t\t\tnull;\n\t\t\t\t\n\t\t\t// general hook, used for Highstock compare mode\n\t\t\tif (hasModifyValue) {\n\t\t\t\tyValue = series.modifyValue(yValue, point);\n\t\t\t}\n\n\t\t\t// Set the the plotY value, reset it for redraws\n\t\t\tpoint.plotY = (typeof yValue === 'number' && yValue !== Infinity) ? \n\t\t\t\t//mathRound(yAxis.translate(yValue, 0, 1, 0, 1) * 10) / 10 : // Math.round fixes #591\n\t\t\t\tyAxis.translate(yValue, 0, 1, 0, 1) : \n\t\t\t\tUNDEFINED;\n\t\t\t\n\t\t\t// Set client related positions for mouse tracking\n\t\t\tpoint.clientX = dynamicallyPlaced ? xAxis.translate(xValue, 0, 0, 0, 1) : point.plotX; // #1514\n\t\t\t\t\n\t\t\tpoint.negative = point.y < (threshold || 0);\n\n\t\t\t// some API data\n\t\t\tpoint.category = categories && categories[point.x] !== UNDEFINED ?\n\t\t\t\tcategories[point.x] : point.x;\n\n\n\t\t}\n\n\t\t// now that we have the cropped data, build the segments\n\t\tseries.getSegments();\n\t},\n\t/**\n\t * Memoize tooltip texts and positions\n\t */\n\tsetTooltipPoints: function (renew) {\n\t\tvar series = this,\n\t\t\tpoints = [],\n\t\t\tpointsLength,\n\t\t\tlow,\n\t\t\thigh,\n\t\t\txAxis = series.xAxis,\n\t\t\txExtremes = xAxis && xAxis.getExtremes(),\n\t\t\taxisLength = xAxis ? (xAxis.tooltipLen || xAxis.len) : series.chart.plotSizeX, // tooltipLen and tooltipPosName used in polar\n\t\t\tpoint,\n\t\t\tpointX,\n\t\t\tnextPoint,\n\t\t\ti,\n\t\t\ttooltipPoints = []; // a lookup array for each pixel in the x dimension\n\n\t\t// don't waste resources if tracker is disabled\n\t\tif (series.options.enableMouseTracking === false) {\n\t\t\treturn;\n\t\t}\n\n\t\t// renew\n\t\tif (renew) {\n\t\t\tseries.tooltipPoints = null;\n\t\t}\n\n\t\t// concat segments to overcome null values\n\t\teach(series.segments || series.points, function (segment) {\n\t\t\tpoints = points.concat(segment);\n\t\t});\n\n\t\t// Reverse the points in case the X axis is reversed\n\t\tif (xAxis && xAxis.reversed) {\n\t\t\tpoints = points.reverse();\n\t\t}\n\n\t\t// Polar needs additional shaping\n\t\tif (series.orderTooltipPoints) {\n\t\t\tseries.orderTooltipPoints(points);\n\t\t}\n\n\t\t// Assign each pixel position to the nearest point\n\t\tpointsLength = points.length;\n\t\tfor (i = 0; i < pointsLength; i++) {\n\t\t\tpoint = points[i];\n\t\t\tpointX = point.x;\n\t\t\tif (pointX >= xExtremes.min && pointX <= xExtremes.max) { // #1149\n\t\t\t\tnextPoint = points[i + 1];\n\t\t\t\t\n\t\t\t\t// Set this range's low to the last range's high plus one\n\t\t\t\tlow = high === UNDEFINED ? 0 : high + 1;\n\t\t\t\t// Now find the new high\n\t\t\t\thigh = points[i + 1] ?\n\t\t\t\t\tmathMin(mathMax(0, mathFloor( // #2070\n\t\t\t\t\t\t(point.clientX + (nextPoint ? (nextPoint.wrappedClientX || nextPoint.clientX) : axisLength)) / 2\n\t\t\t\t\t)), axisLength) :\n\t\t\t\t\taxisLength;\n\n\t\t\t\twhile (low >= 0 && low <= high) {\n\t\t\t\t\ttooltipPoints[low++] = point;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tseries.tooltipPoints = tooltipPoints;\n\t},\n\n\t/**\n\t * Format the header of the tooltip\n\t */\n\ttooltipHeaderFormatter: function (point) {\n\t\tvar series = this,\n\t\t\ttooltipOptions = series.tooltipOptions,\n\t\t\txDateFormat = tooltipOptions.xDateFormat,\n\t\t\tdateTimeLabelFormats = tooltipOptions.dateTimeLabelFormats,\n\t\t\txAxis = series.xAxis,\n\t\t\tisDateTime = xAxis && xAxis.options.type === 'datetime',\n\t\t\theaderFormat = tooltipOptions.headerFormat,\n\t\t\tclosestPointRange = xAxis && xAxis.closestPointRange,\n\t\t\tn;\n\t\t\t\n\t\t// Guess the best date format based on the closest point distance (#568)\n\t\tif (isDateTime && !xDateFormat) {\n\t\t\tif (closestPointRange) {\n\t\t\t\tfor (n in timeUnits) {\n\t\t\t\t\tif (timeUnits[n] >= closestPointRange) {\n\t\t\t\t\t\txDateFormat = dateTimeLabelFormats[n];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txDateFormat = dateTimeLabelFormats.day;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Insert the header date format if any\n\t\tif (isDateTime && xDateFormat && isNumber(point.key)) {\n\t\t\theaderFormat = headerFormat.replace('{point.key}', '{point.key:' + xDateFormat + '}');\n\t\t}\n\t\t\n\t\treturn format(headerFormat, {\n\t\t\tpoint: point,\n\t\t\tseries: series\n\t\t});\n\t},\n\n\t/**\n\t * Series mouse over handler\n\t */\n\tonMouseOver: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\thoverSeries = chart.hoverSeries;\n\n\t\t// set normal state to previous series\n\t\tif (hoverSeries && hoverSeries !== series) {\n\t\t\thoverSeries.onMouseOut();\n\t\t}\n\n\t\t// trigger the event, but to save processing time,\n\t\t// only if defined\n\t\tif (series.options.events.mouseOver) {\n\t\t\tfireEvent(series, 'mouseOver');\n\t\t}\n\n\t\t// hover this\n\t\tseries.setState(HOVER_STATE);\n\t\tchart.hoverSeries = series;\n\t},\n\n\t/**\n\t * Series mouse out handler\n\t */\n\tonMouseOut: function () {\n\t\t// trigger the event only if listeners exist\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\ttooltip = chart.tooltip,\n\t\t\thoverPoint = chart.hoverPoint;\n\n\t\t// trigger mouse out on the point, which must be in this series\n\t\tif (hoverPoint) {\n\t\t\thoverPoint.onMouseOut();\n\t\t}\n\n\t\t// fire the mouse out event\n\t\tif (series && options.events.mouseOut) {\n\t\t\tfireEvent(series, 'mouseOut');\n\t\t}\n\n\n\t\t// hide the tooltip\n\t\tif (tooltip && !options.stickyTracking && (!tooltip.shared || series.noSharedTooltip)) {\n\t\t\ttooltip.hide();\n\t\t}\n\n\t\t// set normal state\n\t\tseries.setState();\n\t\tchart.hoverSeries = null;\n\t},\n\n\t/**\n\t * Animate in the series\n\t */\n\tanimate: function (init) {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tclipRect,\n\t\t\tmarkerClipRect,\n\t\t\tanimation = series.options.animation,\n\t\t\tclipBox = chart.clipBox,\n\t\t\tinverted = chart.inverted,\n\t\t\tsharedClipKey;\n\n\t\t// Animation option is set to true\n\t\tif (animation && !isObject(animation)) {\n\t\t\tanimation = defaultPlotOptions[series.type].animation;\n\t\t}\n\t\tsharedClipKey = '_sharedClip' + animation.duration + animation.easing;\n\n\t\t// Initialize the animation. Set up the clipping rectangle.\n\t\tif (init) { \n\t\t\t\n\t\t\t// If a clipping rectangle with the same properties is currently present in the chart, use that. \n\t\t\tclipRect = chart[sharedClipKey];\n\t\t\tmarkerClipRect = chart[sharedClipKey + 'm'];\n\t\t\tif (!clipRect) {\n\t\t\t\tchart[sharedClipKey] = clipRect = renderer.clipRect(\n\t\t\t\t\textend(clipBox, { width: 0 })\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\tchart[sharedClipKey + 'm'] = markerClipRect = renderer.clipRect(\n\t\t\t\t\t-99, // include the width of the first marker\n\t\t\t\t\tinverted ? -chart.plotLeft : -chart.plotTop, \n\t\t\t\t\t99,\n\t\t\t\t\tinverted ? chart.chartWidth : chart.chartHeight\n\t\t\t\t);\n\t\t\t}\n\t\t\tseries.group.clip(clipRect);\n\t\t\tseries.markerGroup.clip(markerClipRect);\n\t\t\tseries.sharedClipKey = sharedClipKey;\n\n\t\t// Run the animation\n\t\t} else { \n\t\t\tclipRect = chart[sharedClipKey];\n\t\t\tif (clipRect) {\n\t\t\t\tclipRect.animate({\n\t\t\t\t\twidth: chart.plotSizeX\n\t\t\t\t}, animation);\n\t\t\t\tchart[sharedClipKey + 'm'].animate({\n\t\t\t\t\twidth: chart.plotSizeX + 99\n\t\t\t\t}, animation);\n\t\t\t}\n\n\t\t\t// Delete this function to allow it only once\n\t\t\tseries.animate = null;\n\t\t\t\n\t\t\t// Call the afterAnimate function on animation complete (but don't overwrite the animation.complete option\n\t\t\t// which should be available to the user).\n\t\t\tseries.animationTimeout = setTimeout(function () {\n\t\t\t\tseries.afterAnimate();\n\t\t\t}, animation.duration);\n\t\t}\n\t},\n\t\n\t/**\n\t * This runs after animation to land on the final plot clipping\n\t */\n\tafterAnimate: function () {\n\t\tvar chart = this.chart,\n\t\t\tsharedClipKey = this.sharedClipKey,\n\t\t\tgroup = this.group;\n\t\t\t\n\t\tif (group && this.options.clip !== false) {\n\t\t\tgroup.clip(chart.clipRect);\n\t\t\tthis.markerGroup.clip(); // no clip\n\t\t}\n\t\t\n\t\t// Remove the shared clipping rectancgle when all series are shown\t\t\n\t\tsetTimeout(function () {\n\t\t\tif (sharedClipKey && chart[sharedClipKey]) {\n\t\t\t\tchart[sharedClipKey] = chart[sharedClipKey].destroy();\n\t\t\t\tchart[sharedClipKey + 'm'] = chart[sharedClipKey + 'm'].destroy();\n\t\t\t}\n\t\t}, 100);\n\t},\n\n\t/**\n\t * Draw the markers\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\tpointAttr,\n\t\t\tpoints = series.points,\n\t\t\tchart = series.chart,\n\t\t\tplotX,\n\t\t\tplotY,\n\t\t\ti,\n\t\t\tpoint,\n\t\t\tradius,\n\t\t\tsymbol,\n\t\t\tisImage,\n\t\t\tgraphic,\n\t\t\toptions = series.options,\n\t\t\tseriesMarkerOptions = options.marker,\n\t\t\tpointMarkerOptions,\n\t\t\tenabled,\n\t\t\tisInside,\n\t\t\tmarkerGroup = series.markerGroup;\n\n\t\tif (seriesMarkerOptions.enabled || series._hasPointMarkers) {\n\t\t\t\n\t\t\ti = points.length;\n\t\t\twhile (i--) {\n\t\t\t\tpoint = points[i];\n\t\t\t\tplotX = mathFloor(point.plotX); // #1843\n\t\t\t\tplotY = point.plotY;\n\t\t\t\tgraphic = point.graphic;\n\t\t\t\tpointMarkerOptions = point.marker || {};\n\t\t\t\tenabled = (seriesMarkerOptions.enabled && pointMarkerOptions.enabled === UNDEFINED) || pointMarkerOptions.enabled;\n\t\t\t\tisInside = chart.isInsidePlot(mathRound(plotX), plotY, chart.inverted); // #1858\n\t\t\t\t\n\t\t\t\t// only draw the point if y is defined\n\t\t\t\tif (enabled && plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) {\n\n\t\t\t\t\t// shortcuts\n\t\t\t\t\tpointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE];\n\t\t\t\t\tradius = pointAttr.r;\n\t\t\t\t\tsymbol = pick(pointMarkerOptions.symbol, series.symbol);\n\t\t\t\t\tisImage = symbol.indexOf('url') === 0;\n\n\t\t\t\t\tif (graphic) { // update\n\t\t\t\t\t\tgraphic\n\t\t\t\t\t\t\t.attr({ // Since the marker group isn't clipped, each individual marker must be toggled\n\t\t\t\t\t\t\t\tvisibility: isInside ? (hasSVG ? 'inherit' : VISIBLE) : HIDDEN\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.animate(extend({\n\t\t\t\t\t\t\t\tx: plotX - radius,\n\t\t\t\t\t\t\t\ty: plotY - radius\n\t\t\t\t\t\t\t}, graphic.symbolName ? { // don't apply to image symbols #507\n\t\t\t\t\t\t\t\twidth: 2 * radius,\n\t\t\t\t\t\t\t\theight: 2 * radius\n\t\t\t\t\t\t\t} : {}));\n\t\t\t\t\t} else if (isInside && (radius > 0 || isImage)) {\n\t\t\t\t\t\tpoint.graphic = graphic = chart.renderer.symbol(\n\t\t\t\t\t\t\tsymbol,\n\t\t\t\t\t\t\tplotX - radius,\n\t\t\t\t\t\t\tplotY - radius,\n\t\t\t\t\t\t\t2 * radius,\n\t\t\t\t\t\t\t2 * radius\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(pointAttr)\n\t\t\t\t\t\t.add(markerGroup);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else if (graphic) {\n\t\t\t\t\tpoint.graphic = graphic.destroy(); // #1269\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t},\n\n\t/**\n\t * Convert state properties from API naming conventions to SVG attributes\n\t *\n\t * @param {Object} options API options object\n\t * @param {Object} base1 SVG attribute object to inherit from\n\t * @param {Object} base2 Second level SVG attribute object to inherit from\n\t */\n\tconvertAttribs: function (options, base1, base2, base3) {\n\t\tvar conversion = this.pointAttrToOptions,\n\t\t\tattr,\n\t\t\toption,\n\t\t\tobj = {};\n\n\t\toptions = options || {};\n\t\tbase1 = base1 || {};\n\t\tbase2 = base2 || {};\n\t\tbase3 = base3 || {};\n\n\t\tfor (attr in conversion) {\n\t\t\toption = conversion[attr];\n\t\t\tobj[attr] = pick(options[option], base1[attr], base2[attr], base3[attr]);\n\t\t}\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Get the state attributes. Each series type has its own set of attributes\n\t * that are allowed to change on a point's state change. Series wide attributes are stored for\n\t * all series, and additionally point specific attributes are stored for all\n\t * points with individual marker options. If such options are not defined for the point,\n\t * a reference to the series wide attributes is stored in point.pointAttr.\n\t */\n\tgetAttribs: function () {\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\tnormalOptions = defaultPlotOptions[series.type].marker ? seriesOptions.marker : seriesOptions,\n\t\t\tstateOptions = normalOptions.states,\n\t\t\tstateOptionsHover = stateOptions[HOVER_STATE],\n\t\t\tpointStateOptionsHover,\n\t\t\tseriesColor = series.color,\n\t\t\tnormalDefaults = {\n\t\t\t\tstroke: seriesColor,\n\t\t\t\tfill: seriesColor\n\t\t\t},\n\t\t\tpoints = series.points || [], // #927\n\t\t\ti,\n\t\t\tpoint,\n\t\t\tseriesPointAttr = [],\n\t\t\tpointAttr,\n\t\t\tpointAttrToOptions = series.pointAttrToOptions,\n\t\t\thasPointSpecificOptions,\n\t\t\tnegativeColor = seriesOptions.negativeColor,\n\t\t\tdefaultLineColor = normalOptions.lineColor,\n\t\t\tkey;\n\n\t\t// series type specific modifications\n\t\tif (seriesOptions.marker) { // line, spline, area, areaspline, scatter\n\n\t\t\t// if no hover radius is given, default to normal radius + 2\n\t\t\tstateOptionsHover.radius = stateOptionsHover.radius || normalOptions.radius + 2;\n\t\t\tstateOptionsHover.lineWidth = stateOptionsHover.lineWidth || normalOptions.lineWidth + 1;\n\t\t\t\n\t\t} else { // column, bar, pie\n\n\t\t\t// if no hover color is given, brighten the normal color\n\t\t\tstateOptionsHover.color = stateOptionsHover.color ||\n\t\t\t\tColor(stateOptionsHover.color || seriesColor)\n\t\t\t\t\t.brighten(stateOptionsHover.brightness).get();\n\t\t}\n\n\t\t// general point attributes for the series normal state\n\t\tseriesPointAttr[NORMAL_STATE] = series.convertAttribs(normalOptions, normalDefaults);\n\n\t\t// HOVER_STATE and SELECT_STATE states inherit from normal state except the default radius\n\t\teach([HOVER_STATE, SELECT_STATE], function (state) {\n\t\t\tseriesPointAttr[state] =\n\t\t\t\t\tseries.convertAttribs(stateOptions[state], seriesPointAttr[NORMAL_STATE]);\n\t\t});\n\n\t\t// set it\n\t\tseries.pointAttr = seriesPointAttr;\n\n\n\t\t// Generate the point-specific attribute collections if specific point\n\t\t// options are given. If not, create a referance to the series wide point\n\t\t// attributes\n\t\ti = points.length;\n\t\twhile (i--) {\n\t\t\tpoint = points[i];\n\t\t\tnormalOptions = (point.options && point.options.marker) || point.options;\n\t\t\tif (normalOptions && normalOptions.enabled === false) {\n\t\t\t\tnormalOptions.radius = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif (point.negative && negativeColor) {\n\t\t\t\tpoint.color = point.fillColor = negativeColor;\n\t\t\t}\n\t\t\t\n\t\t\thasPointSpecificOptions = seriesOptions.colorByPoint || point.color; // #868\n\n\t\t\t// check if the point has specific visual options\n\t\t\tif (point.options) {\n\t\t\t\tfor (key in pointAttrToOptions) {\n\t\t\t\t\tif (defined(normalOptions[pointAttrToOptions[key]])) {\n\t\t\t\t\t\thasPointSpecificOptions = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// a specific marker config object is defined for the individual point:\n\t\t\t// create it's own attribute collection\n\t\t\tif (hasPointSpecificOptions) {\n\t\t\t\tnormalOptions = normalOptions || {};\n\t\t\t\tpointAttr = [];\n\t\t\t\tstateOptions = normalOptions.states || {}; // reassign for individual point\n\t\t\t\tpointStateOptionsHover = stateOptions[HOVER_STATE] = stateOptions[HOVER_STATE] || {};\n\n\t\t\t\t// Handle colors for column and pies\n\t\t\t\tif (!seriesOptions.marker) { // column, bar, point\n\t\t\t\t\t// if no hover color is given, brighten the normal color\n\t\t\t\t\tpointStateOptionsHover.color =\n\t\t\t\t\t\tColor(pointStateOptionsHover.color || point.color)\n\t\t\t\t\t\t\t.brighten(pointStateOptionsHover.brightness ||\n\t\t\t\t\t\t\t\tstateOptionsHover.brightness).get();\n\n\t\t\t\t}\n\n\t\t\t\t// normal point state inherits series wide normal state\n\t\t\t\tpointAttr[NORMAL_STATE] = series.convertAttribs(extend({\n\t\t\t\t\tcolor: point.color, // #868\n\t\t\t\t\tfillColor: point.color, // Individual point color or negative color markers (#2219)\n\t\t\t\t\tlineColor: defaultLineColor === null ? point.color : UNDEFINED // Bubbles take point color, line markers use white\n\t\t\t\t}, normalOptions), seriesPointAttr[NORMAL_STATE]);\n\n\t\t\t\t// inherit from point normal and series hover\n\t\t\t\tpointAttr[HOVER_STATE] = series.convertAttribs(\n\t\t\t\t\tstateOptions[HOVER_STATE],\n\t\t\t\t\tseriesPointAttr[HOVER_STATE],\n\t\t\t\t\tpointAttr[NORMAL_STATE]\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\t// inherit from point normal and series hover\n\t\t\t\tpointAttr[SELECT_STATE] = series.convertAttribs(\n\t\t\t\t\tstateOptions[SELECT_STATE],\n\t\t\t\t\tseriesPointAttr[SELECT_STATE],\n\t\t\t\t\tpointAttr[NORMAL_STATE]\n\t\t\t\t);\n\n\n\t\t\t// no marker config object is created: copy a reference to the series-wide\n\t\t\t// attribute collection\n\t\t\t} else {\n\t\t\t\tpointAttr = seriesPointAttr;\n\t\t\t}\n\n\t\t\tpoint.pointAttr = pointAttr;\n\n\t\t}\n\n\t},\n\t/**\n\t * Update the series with a new set of options\n\t */\n\tupdate: function (newOptions, redraw) {\n\t\tvar chart = this.chart,\n\t\t\t// must use user options when changing type because this.options is merged\n\t\t\t// in with type specific plotOptions\n\t\t\toldOptions = this.userOptions,\n\t\t\toldType = this.type,\n\t\t\tproto = seriesTypes[oldType].prototype,\n\t\t\tn;\n\n\t\t// Do the merge, with some forced options\n\t\tnewOptions = merge(oldOptions, {\n\t\t\tanimation: false,\n\t\t\tindex: this.index,\n\t\t\tpointStart: this.xData[0] // when updating after addPoint\n\t\t}, { data: this.options.data }, newOptions);\n\n\t\t// Destroy the series and reinsert methods from the type prototype\n\t\tthis.remove(false);\n\t\tfor (n in proto) { // Overwrite series-type specific methods (#2270)\n\t\t\tif (proto.hasOwnProperty(n)) {\n\t\t\t\tthis[n] = UNDEFINED;\n\t\t\t}\n\t\t}\n\t\textend(this, seriesTypes[newOptions.type || oldType].prototype);\n\t\t\n\n\t\tthis.init(chart, newOptions);\n\t\tif (pick(redraw, true)) {\n\t\t\tchart.redraw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Clear DOM objects and free up memory\n\t */\n\tdestroy: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tissue134 = /AppleWebKit\\/533/.test(userAgent),\n\t\t\tdestroy,\n\t\t\ti,\n\t\t\tdata = series.data || [],\n\t\t\tpoint,\n\t\t\tprop,\n\t\t\taxis;\n\n\t\t// add event hook\n\t\tfireEvent(series, 'destroy');\n\n\t\t// remove all events\n\t\tremoveEvent(series);\n\t\t\n\t\t// erase from axes\n\t\teach(['xAxis', 'yAxis'], function (AXIS) {\n\t\t\taxis = series[AXIS];\n\t\t\tif (axis) {\n\t\t\t\terase(axis.series, series);\n\t\t\t\taxis.isDirty = axis.forceRedraw = true;\n\t\t\t\taxis.stacks = {}; // Rebuild stacks when updating (#2229)\n\t\t\t}\n\t\t});\n\n\t\t// remove legend items\n\t\tif (series.legendItem) {\n\t\t\tseries.chart.legend.destroyItem(series);\n\t\t}\n\n\t\t// destroy all points with their elements\n\t\ti = data.length;\n\t\twhile (i--) {\n\t\t\tpoint = data[i];\n\t\t\tif (point && point.destroy) {\n\t\t\t\tpoint.destroy();\n\t\t\t}\n\t\t}\n\t\tseries.points = null;\n\n\t\t// Clear the animation timeout if we are destroying the series during initial animation\n\t\tclearTimeout(series.animationTimeout);\n\n\t\t// destroy all SVGElements associated to the series\n\t\teach(['area', 'graph', 'dataLabelsGroup', 'group', 'markerGroup', 'tracker',\n\t\t\t\t'graphNeg', 'areaNeg', 'posClip', 'negClip'], function (prop) {\n\t\t\tif (series[prop]) {\n\n\t\t\t\t// issue 134 workaround\n\t\t\t\tdestroy = issue134 && prop === 'group' ?\n\t\t\t\t\t'hide' :\n\t\t\t\t\t'destroy';\n\n\t\t\t\tseries[prop][destroy]();\n\t\t\t}\n\t\t});\n\n\t\t// remove from hoverSeries\n\t\tif (chart.hoverSeries === series) {\n\t\t\tchart.hoverSeries = null;\n\t\t}\n\t\terase(chart.series, series);\n\n\t\t// clear all members\n\t\tfor (prop in series) {\n\t\t\tdelete series[prop];\n\t\t}\n\t},\n\n\t/**\n\t * Draw the data labels\n\t */\n\tdrawDataLabels: function () {\n\t\t\n\t\tvar series = this,\n\t\t\tseriesOptions = series.options,\n\t\t\toptions = seriesOptions.dataLabels,\n\t\t\tpoints = series.points,\n\t\t\tpointOptions,\n\t\t\tgeneralOptions,\n\t\t\tstr,\n\t\t\tdataLabelsGroup;\n\t\t\n\t\tif (options.enabled || series._hasPointLabels) {\n\t\t\t\t\t\t\n\t\t\t// Process default alignment of data labels for columns\n\t\t\tif (series.dlProcessOptions) {\n\t\t\t\tseries.dlProcessOptions(options);\n\t\t\t}\n\n\t\t\t// Create a separate group for the data labels to avoid rotation\n\t\t\tdataLabelsGroup = series.plotGroup(\n\t\t\t\t'dataLabelsGroup', \n\t\t\t\t'data-labels', \n\t\t\t\tseries.visible ? VISIBLE : HIDDEN, \n\t\t\t\toptions.zIndex || 6\n\t\t\t);\n\t\t\t\n\t\t\t// Make the labels for each point\n\t\t\tgeneralOptions = options;\n\t\t\teach(points, function (point) {\n\t\t\t\t\n\t\t\t\tvar enabled,\n\t\t\t\t\tdataLabel = point.dataLabel,\n\t\t\t\t\tlabelConfig,\n\t\t\t\t\tattr,\n\t\t\t\t\tname,\n\t\t\t\t\trotation,\n\t\t\t\t\tconnector = point.connector,\n\t\t\t\t\tisNew = true;\n\t\t\t\t\n\t\t\t\t// Determine if each data label is enabled\n\t\t\t\tpointOptions = point.options && point.options.dataLabels;\n\t\t\t\tenabled = pick(pointOptions && pointOptions.enabled, generalOptions.enabled); // #2282\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// If the point is outside the plot area, destroy it. #678, #820\n\t\t\t\tif (dataLabel && !enabled) {\n\t\t\t\t\tpoint.dataLabel = dataLabel.destroy();\n\t\t\t\t\n\t\t\t\t// Individual labels are disabled if the are explicitly disabled \n\t\t\t\t// in the point options, or if they fall outside the plot area.\n\t\t\t\t} else if (enabled) {\n\t\t\t\t\t\n\t\t\t\t\t// Create individual options structure that can be extended without \n\t\t\t\t\t// affecting others\n\t\t\t\t\toptions = merge(generalOptions, pointOptions);\n\n\t\t\t\t\trotation = options.rotation;\n\t\t\t\t\t\n\t\t\t\t\t// Get the string\n\t\t\t\t\tlabelConfig = point.getLabelConfig();\n\t\t\t\t\tstr = options.format ?\n\t\t\t\t\t\tformat(options.format, labelConfig) : \n\t\t\t\t\t\toptions.formatter.call(labelConfig, options);\n\t\t\t\t\t\n\t\t\t\t\t// Determine the color\n\t\t\t\t\toptions.style.color = pick(options.color, options.style.color, series.color, 'black');\n\t\n\t\t\t\t\t\n\t\t\t\t\t// update existing label\n\t\t\t\t\tif (dataLabel) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (defined(str)) {\n\t\t\t\t\t\t\tdataLabel\n\t\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\t\ttext: str\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tisNew = false;\n\t\t\t\t\t\t\n\t\t\t\t\t\t} else { // #1437 - the label is shown conditionally\n\t\t\t\t\t\t\tpoint.dataLabel = dataLabel = dataLabel.destroy();\n\t\t\t\t\t\t\tif (connector) {\n\t\t\t\t\t\t\t\tpoint.connector = connector.destroy();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t// create new label\n\t\t\t\t\t} else if (defined(str)) {\n\t\t\t\t\t\tattr = {\n\t\t\t\t\t\t\t//align: align,\n\t\t\t\t\t\t\tfill: options.backgroundColor,\n\t\t\t\t\t\t\tstroke: options.borderColor,\n\t\t\t\t\t\t\t'stroke-width': options.borderWidth,\n\t\t\t\t\t\t\tr: options.borderRadius || 0,\n\t\t\t\t\t\t\trotation: rotation,\n\t\t\t\t\t\t\tpadding: options.padding,\n\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t};\n\t\t\t\t\t\t// Remove unused attributes (#947)\n\t\t\t\t\t\tfor (name in attr) {\n\t\t\t\t\t\t\tif (attr[name] === UNDEFINED) {\n\t\t\t\t\t\t\t\tdelete attr[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tdataLabel = point.dataLabel = series.chart.renderer[rotation ? 'text' : 'label']( // labels don't support rotation\n\t\t\t\t\t\t\tstr,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t-999,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\toptions.useHTML\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(attr)\n\t\t\t\t\t\t.css(options.style)\n\t\t\t\t\t\t.add(dataLabelsGroup)\n\t\t\t\t\t\t.shadow(options.shadow);\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (dataLabel) {\n\t\t\t\t\t\t// Now the data label is created and placed at 0,0, so we need to align it\n\t\t\t\t\t\tseries.alignDataLabel(point, dataLabel, options, null, isNew);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Align each individual data label\n\t */\n\talignDataLabel: function (point, dataLabel, options, alignTo, isNew) {\n\t\tvar chart = this.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tplotX = pick(point.plotX, -999),\n\t\t\tplotY = pick(point.plotY, -999),\n\t\t\tbBox = dataLabel.getBBox(),\n\t\t\tvisible = this.visible && chart.isInsidePlot(point.plotX, point.plotY, inverted),\n\t\t\talignAttr; // the final position;\n\t\t\t\t\n\t\tif (visible) {\n\n\t\t\t// The alignment box is a singular point\n\t\t\talignTo = extend({\n\t\t\t\tx: inverted ? chart.plotWidth - plotY : plotX,\n\t\t\t\ty: mathRound(inverted ? chart.plotHeight - plotX : plotY),\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t}, alignTo);\n\t\t\t\n\t\t\t// Add the text size for alignment calculation\n\t\t\textend(options, {\n\t\t\t\twidth: bBox.width,\n\t\t\t\theight: bBox.height\n\t\t\t});\n\n\t\t\t// Allow a hook for changing alignment in the last moment, then do the alignment\n\t\t\tif (options.rotation) { // Fancy box alignment isn't supported for rotated text\n\t\t\t\talignAttr = {\n\t\t\t\t\talign: options.align,\n\t\t\t\t\tx: alignTo.x + options.x + alignTo.width / 2,\n\t\t\t\t\ty: alignTo.y + options.y + alignTo.height / 2\n\t\t\t\t};\n\t\t\t\tdataLabel[isNew ? 'attr' : 'animate'](alignAttr);\n\t\t\t} else {\n\t\t\t\tdataLabel.align(options, null, alignTo);\n\t\t\t\talignAttr = dataLabel.alignAttr;\n\n\t\t\t\t// Handle justify or crop\n\t\t\t\tif (pick(options.overflow, 'justify') === 'justify') { // docs: overflow: justify, also crop only applies when not justify\n\t\t\t\t\tthis.justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew);\n\t\t\t\t\n\t\t\t\t} else if (pick(options.crop, true)) {\n\t\t\t\t\t// Now check that the data label is within the plot area\n\t\t\t\t\tvisible = chart.isInsidePlot(alignAttr.x, alignAttr.y) && chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height);\n\t\t\t\t\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t}\n\n\t\t// Show or hide based on the final aligned position\n\t\tif (!visible) {\n\t\t\tdataLabel.attr({ y: -999 });\n\t\t}\n\t\t\t\t\n\t},\n\t\n\t/**\n\t * If data labels fall partly outside the plot area, align them back in, in a way that\n\t * doesn't hide the point.\n\t */\n\tjustifyDataLabel: function (dataLabel, options, alignAttr, bBox, alignTo, isNew) {\n\t\tvar chart = this.chart,\n\t\t\talign = options.align,\n\t\t\tverticalAlign = options.verticalAlign,\n\t\t\toff,\n\t\t\tjustified;\n\n\t\t// Off left\n\t\toff = alignAttr.x;\n\t\tif (off < 0) {\n\t\t\tif (align === 'right') {\n\t\t\t\toptions.align = 'left';\n\t\t\t} else {\n\t\t\t\toptions.x = -off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\n\t\t// Off right\n\t\toff = alignAttr.x + bBox.width;\n\t\tif (off > chart.plotWidth) {\n\t\t\tif (align === 'left') {\n\t\t\t\toptions.align = 'right';\n\t\t\t} else {\n\t\t\t\toptions.x = chart.plotWidth - off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\n\t\t// Off top\n\t\toff = alignAttr.y;\n\t\tif (off < 0) {\n\t\t\tif (verticalAlign === 'bottom') {\n\t\t\t\toptions.verticalAlign = 'top';\n\t\t\t} else {\n\t\t\t\toptions.y = -off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\n\t\t// Off bottom\n\t\toff = alignAttr.y + bBox.height;\n\t\tif (off > chart.plotHeight) {\n\t\t\tif (verticalAlign === 'top') {\n\t\t\t\toptions.verticalAlign = 'bottom';\n\t\t\t} else {\n\t\t\t\toptions.y = chart.plotHeight - off;\n\t\t\t}\n\t\t\tjustified = true;\n\t\t}\n\t\t\n\t\tif (justified) {\n\t\t\tdataLabel.placed = !isNew;\n\t\t\tdataLabel.align(options, null, alignTo);\n\t\t}\n\t},\n\t\n\t/**\n\t * Return the graph path of a segment\n\t */\n\tgetSegmentPath: function (segment) {\t\t\n\t\tvar series = this,\n\t\t\tsegmentPath = [],\n\t\t\tstep = series.options.step;\n\t\t\t\n\t\t// build the segment line\n\t\teach(segment, function (point, i) {\n\t\t\t\n\t\t\tvar plotX = point.plotX,\n\t\t\t\tplotY = point.plotY,\n\t\t\t\tlastPoint;\n\n\t\t\tif (series.getPointSpline) { // generate the spline as defined in the SplineSeries object\n\t\t\t\tsegmentPath.push.apply(segmentPath, series.getPointSpline(segment, point, i));\n\n\t\t\t} else {\n\n\t\t\t\t// moveTo or lineTo\n\t\t\t\tsegmentPath.push(i ? L : M);\n\n\t\t\t\t// step line?\n\t\t\t\tif (step && i) {\n\t\t\t\t\tlastPoint = segment[i - 1];\n\t\t\t\t\tif (step === 'right') {\n\t\t\t\t\t\tsegmentPath.push(\n\t\t\t\t\t\t\tlastPoint.plotX,\n\t\t\t\t\t\t\tplotY\n\t\t\t\t\t\t);\n\t\t\t\t\t\t\n\t\t\t\t\t} else if (step === 'center') {\n\t\t\t\t\t\tsegmentPath.push(\n\t\t\t\t\t\t\t(lastPoint.plotX + plotX) / 2,\n\t\t\t\t\t\t\tlastPoint.plotY,\n\t\t\t\t\t\t\t(lastPoint.plotX + plotX) / 2,\n\t\t\t\t\t\t\tplotY\n\t\t\t\t\t\t);\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsegmentPath.push(\n\t\t\t\t\t\t\tplotX,\n\t\t\t\t\t\t\tlastPoint.plotY\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// normal line to next point\n\t\t\t\tsegmentPath.push(\n\t\t\t\t\tpoint.plotX,\n\t\t\t\t\tpoint.plotY\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn segmentPath;\n\t},\n\n\t/**\n\t * Get the graph path\n\t */\n\tgetGraphPath: function () {\n\t\tvar series = this,\n\t\t\tgraphPath = [],\n\t\t\tsegmentPath,\n\t\t\tsinglePoints = []; // used in drawTracker\n\n\t\t// Divide into segments and build graph and area paths\n\t\teach(series.segments, function (segment) {\n\t\t\t\n\t\t\tsegmentPath = series.getSegmentPath(segment);\n\t\t\t\n\t\t\t// add the segment to the graph, or a single point for tracking\n\t\t\tif (segment.length > 1) {\n\t\t\t\tgraphPath = graphPath.concat(segmentPath);\n\t\t\t} else {\n\t\t\t\tsinglePoints.push(segment[0]);\n\t\t\t}\n\t\t});\n\n\t\t// Record it for use in drawGraph and drawTracker, and return graphPath\n\t\tseries.singlePoints = singlePoints;\n\t\tseries.graphPath = graphPath;\n\t\t\n\t\treturn graphPath;\n\t\t\n\t},\n\t\n\t/**\n\t * Draw the actual graph\n\t */\n\tdrawGraph: function () {\n\t\tvar series = this,\n\t\t\toptions = this.options,\n\t\t\tprops = [['graph', options.lineColor || this.color]],\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tdashStyle =  options.dashStyle,\n\t\t\tgraphPath = this.getGraphPath(),\n\t\t\tnegativeColor = options.negativeColor;\n\t\t\t\n\t\tif (negativeColor) {\n\t\t\tprops.push(['graphNeg', negativeColor]);\n\t\t}\n\t\t\n\t\t// draw the graph\n\t\teach(props, function (prop, i) {\n\t\t\tvar graphKey = prop[0],\n\t\t\t\tgraph = series[graphKey],\n\t\t\t\tattribs;\n\t\t\t\n\t\t\tif (graph) {\n\t\t\t\tstop(graph); // cancel running animations, #459\n\t\t\t\tgraph.animate({ d: graphPath });\n\t\n\t\t\t} else if (lineWidth && graphPath.length) { // #1487\n\t\t\t\tattribs = {\n\t\t\t\t\tstroke: prop[1],\n\t\t\t\t\t'stroke-width': lineWidth,\n\t\t\t\t\tzIndex: 1 // #1069\n\t\t\t\t};\n\t\t\t\tif (dashStyle) {\n\t\t\t\t\tattribs.dashstyle = dashStyle;\n\t\t\t\t} else {\n\t\t\t\t\tattribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round';\n\t\t\t\t}\n\n\t\t\t\tseries[graphKey] = series.chart.renderer.path(graphPath)\n\t\t\t\t\t.attr(attribs)\n\t\t\t\t\t.add(series.group)\n\t\t\t\t\t.shadow(!i && options.shadow);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Clip the graphs into the positive and negative coloured graphs\n\t */\n\tclipNeg: function () {\n\t\tvar options = this.options,\n\t\t\tchart = this.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tnegativeColor = options.negativeColor || options.negativeFillColor,\n\t\t\ttranslatedThreshold,\n\t\t\tposAttr,\n\t\t\tnegAttr,\n\t\t\tgraph = this.graph,\n\t\t\tarea = this.area,\n\t\t\tposClip = this.posClip,\n\t\t\tnegClip = this.negClip,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\tchartSizeMax = mathMax(chartWidth, chartHeight),\n\t\t\tyAxis = this.yAxis,\n\t\t\tabove,\n\t\t\tbelow;\n\t\t\n\t\tif (negativeColor && (graph || area)) {\n\t\t\ttranslatedThreshold = mathRound(yAxis.toPixels(options.threshold || 0, true));\n\t\t\tabove = {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: chartSizeMax,\n\t\t\t\theight: translatedThreshold\n\t\t\t};\n\t\t\tbelow = {\n\t\t\t\tx: 0,\n\t\t\t\ty: translatedThreshold,\n\t\t\t\twidth: chartSizeMax,\n\t\t\t\theight: chartSizeMax\n\t\t\t};\n\t\t\t\n\t\t\tif (chart.inverted) {\n\n\t\t\t\tabove.height = below.y = chart.plotWidth - translatedThreshold;\n\t\t\t\tif (renderer.isVML) {\n\t\t\t\t\tabove = {\n\t\t\t\t\t\tx: chart.plotWidth - translatedThreshold - chart.plotLeft,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: chartWidth,\n\t\t\t\t\t\theight: chartHeight\n\t\t\t\t\t};\n\t\t\t\t\tbelow = {\n\t\t\t\t\t\tx: translatedThreshold + chart.plotLeft - chartWidth,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: chart.plotLeft + translatedThreshold,\n\t\t\t\t\t\theight: chartWidth\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (yAxis.reversed) {\n\t\t\t\tposAttr = below;\n\t\t\t\tnegAttr = above;\n\t\t\t} else {\n\t\t\t\tposAttr = above;\n\t\t\t\tnegAttr = below;\n\t\t\t}\n\t\t\n\t\t\tif (posClip) { // update\n\t\t\t\tposClip.animate(posAttr);\n\t\t\t\tnegClip.animate(negAttr);\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tthis.posClip = posClip = renderer.clipRect(posAttr);\n\t\t\t\tthis.negClip = negClip = renderer.clipRect(negAttr);\n\t\t\t\t\n\t\t\t\tif (graph && this.graphNeg) {\n\t\t\t\t\tgraph.clip(posClip);\n\t\t\t\t\tthis.graphNeg.clip(negClip);\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (area) {\n\t\t\t\t\tarea.clip(posClip);\n\t\t\t\t\tthis.areaNeg.clip(negClip);\n\t\t\t\t} \n\t\t\t} \n\t\t}\t\n\t},\n\n\t/**\n\t * Initialize and perform group inversion on series.group and series.markerGroup\n\t */\n\tinvertGroups: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\n\t\t// Pie, go away (#1736)\n\t\tif (!series.xAxis) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// A fixed size is needed for inversion to work\n\t\tfunction setInvert() {\t\t\t\n\t\t\tvar size = {\n\t\t\t\twidth: series.yAxis.len,\n\t\t\t\theight: series.xAxis.len\n\t\t\t};\n\t\t\t\n\t\t\teach(['group', 'markerGroup'], function (groupName) {\n\t\t\t\tif (series[groupName]) {\n\t\t\t\t\tseries[groupName].attr(size).invert();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\taddEvent(chart, 'resize', setInvert); // do it on resize\n\t\taddEvent(series, 'destroy', function () {\n\t\t\tremoveEvent(chart, 'resize', setInvert);\n\t\t});\n\n\t\t// Do it now\n\t\tsetInvert(); // do it now\n\t\t\n\t\t// On subsequent render and redraw, just do setInvert without setting up events again\n\t\tseries.invertGroups = setInvert;\n\t},\n\t\n\t/**\n\t * General abstraction for creating plot groups like series.group, series.dataLabelsGroup and \n\t * series.markerGroup. On subsequent calls, the group will only be adjusted to the updated plot size.\n\t */\n\tplotGroup: function (prop, name, visibility, zIndex, parent) {\n\t\tvar group = this[prop],\n\t\t\tisNew = !group;\n\t\t\n\t\t// Generate it on first call\n\t\tif (isNew) {\t\n\t\t\tthis[prop] = group = this.chart.renderer.g(name)\n\t\t\t\t.attr({\n\t\t\t\t\tvisibility: visibility,\n\t\t\t\t\tzIndex: zIndex || 0.1 // IE8 needs this\n\t\t\t\t})\n\t\t\t\t.add(parent);\n\t\t}\n\t\t// Place it on first and subsequent (redraw) calls\n\t\tgroup[isNew ? 'attr' : 'animate'](this.getPlotBox());\n\t\treturn group;\t\t\n\t},\n\n\t/**\n\t * Get the translation and scale for the plot area of this series\n\t */\n\tgetPlotBox: function () {\n\t\treturn {\n\t\t\ttranslateX: this.xAxis ? this.xAxis.left : this.chart.plotLeft, \n\t\t\ttranslateY: this.yAxis ? this.yAxis.top : this.chart.plotTop,\n\t\t\tscaleX: 1, // #1623\n\t\t\tscaleY: 1\n\t\t};\n\t},\n\t\n\t/**\n\t * Render the graph and markers\n\t */\n\trender: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tgroup,\n\t\t\toptions = series.options,\n\t\t\tanimation = options.animation,\n\t\t\tdoAnimation = animation && !!series.animate && \n\t\t\t\tchart.renderer.isSVG, // this animation doesn't work in IE8 quirks when the group div is hidden,\n\t\t\t\t// and looks bad in other oldIE\n\t\t\tvisibility = series.visible ? VISIBLE : HIDDEN,\n\t\t\tzIndex = options.zIndex,\n\t\t\thasRendered = series.hasRendered,\n\t\t\tchartSeriesGroup = chart.seriesGroup;\n\t\t\n\t\t// the group\n\t\tgroup = series.plotGroup(\n\t\t\t'group', \n\t\t\t'series', \n\t\t\tvisibility, \n\t\t\tzIndex, \n\t\t\tchartSeriesGroup\n\t\t);\n\t\t\n\t\tseries.markerGroup = series.plotGroup(\n\t\t\t'markerGroup', \n\t\t\t'markers', \n\t\t\tvisibility, \n\t\t\tzIndex, \n\t\t\tchartSeriesGroup\n\t\t);\n\t\t\n\t\t// initiate the animation\n\t\tif (doAnimation) {\n\t\t\tseries.animate(true);\n\t\t}\n\n\t\t// cache attributes for shapes\n\t\tseries.getAttribs();\n\n\t\t// SVGRenderer needs to know this before drawing elements (#1089, #1795)\n\t\tgroup.inverted = series.isCartesian ? chart.inverted : false;\n\t\t\n\t\t// draw the graph if any\n\t\tif (series.drawGraph) {\n\t\t\tseries.drawGraph();\n\t\t\tseries.clipNeg();\n\t\t}\n\n\t\t// draw the data labels (inn pies they go before the points)\n\t\tseries.drawDataLabels();\n\t\t\n\t\t// draw the points\n\t\tseries.drawPoints();\n\n\n\t\t// draw the mouse tracking area\n\t\tif (series.options.enableMouseTracking !== false) {\n\t\t\tseries.drawTracker();\n\t\t}\n\t\t\n\t\t// Handle inverted series and tracker groups\n\t\tif (chart.inverted) {\n\t\t\tseries.invertGroups();\n\t\t}\n\t\t\n\t\t// Initial clipping, must be defined after inverting groups for VML\n\t\tif (options.clip !== false && !series.sharedClipKey && !hasRendered) {\n\t\t\tgroup.clip(chart.clipRect);\n\t\t}\n\n\t\t// Run the animation\n\t\tif (doAnimation) {\n\t\t\tseries.animate();\n\t\t} else if (!hasRendered) {\n\t\t\tseries.afterAnimate();\n\t\t}\n\n\t\tseries.isDirty = series.isDirtyData = false; // means data is in accordance with what you see\n\t\t// (See #322) series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see\n\t\tseries.hasRendered = true;\n\t},\n\t\n\t/**\n\t * Redraw the series after an update in the axes.\n\t */\n\tredraw: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\twasDirtyData = series.isDirtyData, // cache it here as it is set to false in render, but used after\n\t\t\tgroup = series.group,\n\t\t\txAxis = series.xAxis,\n\t\t\tyAxis = series.yAxis;\n\n\t\t// reposition on resize\n\t\tif (group) {\n\t\t\tif (chart.inverted) {\n\t\t\t\tgroup.attr({\n\t\t\t\t\twidth: chart.plotWidth,\n\t\t\t\t\theight: chart.plotHeight\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tgroup.animate({\n\t\t\t\ttranslateX: pick(xAxis && xAxis.left, chart.plotLeft),\n\t\t\t\ttranslateY: pick(yAxis && yAxis.top, chart.plotTop)\n\t\t\t});\n\t\t}\n\n\t\tseries.translate();\n\t\tseries.setTooltipPoints(true);\n\n\t\tseries.render();\n\t\tif (wasDirtyData) {\n\t\t\tfireEvent(series, 'updatedData');\n\t\t}\n\t},\n\n\t/**\n\t * Set the state of the graph\n\t */\n\tsetState: function (state) {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tgraph = series.graph,\n\t\t\tgraphNeg = series.graphNeg,\n\t\t\tstateOptions = options.states,\n\t\t\tlineWidth = options.lineWidth,\n\t\t\tattribs;\n\n\t\tstate = state || NORMAL_STATE;\n\n\t\tif (series.state !== state) {\n\t\t\tseries.state = state;\n\n\t\t\tif (stateOptions[state] && stateOptions[state].enabled === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (state) {\n\t\t\t\tlineWidth = stateOptions[state].lineWidth || lineWidth + 1;\n\t\t\t}\n\n\t\t\tif (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML\n\t\t\t\tattribs = {\n\t\t\t\t\t'stroke-width': lineWidth\n\t\t\t\t};\n\t\t\t\t// use attr because animate will cause any other animation on the graph to stop\n\t\t\t\tgraph.attr(attribs);\n\t\t\t\tif (graphNeg) {\n\t\t\t\t\tgraphNeg.attr(attribs);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set the visibility of the graph\n\t *\n\t * @param vis {Boolean} True to show the series, false to hide. If UNDEFINED,\n\t *        the visibility is toggled.\n\t */\n\tsetVisible: function (vis, redraw) {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tlegendItem = series.legendItem,\n\t\t\tshowOrHide,\n\t\t\tignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries,\n\t\t\toldVisibility = series.visible;\n\n\t\t// if called without an argument, toggle visibility\n\t\tseries.visible = vis = series.userOptions.visible = vis === UNDEFINED ? !oldVisibility : vis;\n\t\tshowOrHide = vis ? 'show' : 'hide';\n\n\t\t// show or hide elements\n\t\teach(['group', 'dataLabelsGroup', 'markerGroup', 'tracker'], function (key) {\n\t\t\tif (series[key]) {\n\t\t\t\tseries[key][showOrHide]();\n\t\t\t}\n\t\t});\n\n\t\t\n\t\t// hide tooltip (#1361)\n\t\tif (chart.hoverSeries === series) {\n\t\t\tseries.onMouseOut();\n\t\t}\n\n\n\t\tif (legendItem) {\n\t\t\tchart.legend.colorizeItem(series, vis);\n\t\t}\n\n\n\t\t// rescale or adapt to resized chart\n\t\tseries.isDirty = true;\n\t\t// in a stack, all other series are affected\n\t\tif (series.options.stacking) {\n\t\t\teach(chart.series, function (otherSeries) {\n\t\t\t\tif (otherSeries.options.stacking && otherSeries.visible) {\n\t\t\t\t\totherSeries.isDirty = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// show or hide linked series\n\t\teach(series.linkedSeries, function (otherSeries) {\n\t\t\totherSeries.setVisible(vis, false);\n\t\t});\n\n\t\tif (ignoreHiddenSeries) {\n\t\t\tchart.isDirtyBox = true;\n\t\t}\n\t\tif (redraw !== false) {\n\t\t\tchart.redraw();\n\t\t}\n\n\t\tfireEvent(series, showOrHide);\n\t},\n\n\t/**\n\t * Show the graph\n\t */\n\tshow: function () {\n\t\tthis.setVisible(true);\n\t},\n\n\t/**\n\t * Hide the graph\n\t */\n\thide: function () {\n\t\tthis.setVisible(false);\n\t},\n\n\n\t/**\n\t * Set the selected state of the graph\n\t *\n\t * @param selected {Boolean} True to select the series, false to unselect. If\n\t *        UNDEFINED, the selection state is toggled.\n\t */\n\tselect: function (selected) {\n\t\tvar series = this;\n\t\t// if called without an argument, toggle\n\t\tseries.selected = selected = (selected === UNDEFINED) ? !series.selected : selected;\n\n\t\tif (series.checkbox) {\n\t\t\tseries.checkbox.checked = selected;\n\t\t}\n\n\t\tfireEvent(series, selected ? 'select' : 'unselect');\n\t},\n\n\t/**\n\t * Draw the tracker object that sits above all data labels and markers to\n\t * track mouse events on the graph or points. For the line type charts\n\t * the tracker uses the same graphPath, but with a greater stroke width\n\t * for better control.\n\t */\n\tdrawTracker: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\ttrackByArea = options.trackByArea,\n\t\t\ttrackerPath = [].concat(trackByArea ? series.areaPath : series.graphPath),\n\t\t\ttrackerPathLength = trackerPath.length,\n\t\t\tchart = series.chart,\n\t\t\tpointer = chart.pointer,\n\t\t\trenderer = chart.renderer,\n\t\t\tsnap = chart.options.tooltip.snap,\n\t\t\ttracker = series.tracker,\n\t\t\tcursor = options.cursor,\n\t\t\tcss = cursor && { cursor: cursor },\n\t\t\tsinglePoints = series.singlePoints,\n\t\t\tsinglePoint,\n\t\t\ti,\n\t\t\tonMouseOver = function () {\n\t\t\t\tif (chart.hoverSeries !== series) {\n\t\t\t\t\tseries.onMouseOver();\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Extend end points. A better way would be to use round linecaps,\n\t\t// but those are not clickable in VML.\n\t\tif (trackerPathLength && !trackByArea) {\n\t\t\ti = trackerPathLength + 1;\n\t\t\twhile (i--) {\n\t\t\t\tif (trackerPath[i] === M) { // extend left side\n\t\t\t\t\ttrackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L);\n\t\t\t\t}\n\t\t\t\tif ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side\n\t\t\t\t\ttrackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// handle single points\n\t\tfor (i = 0; i < singlePoints.length; i++) {\n\t\t\tsinglePoint = singlePoints[i];\n\t\t\ttrackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY,\n\t\t\t\tL, singlePoint.plotX + snap, singlePoint.plotY);\n\t\t}\n\t\t\n\t\t\n\n\t\t// draw the tracker\n\t\tif (tracker) {\n\t\t\ttracker.attr({ d: trackerPath });\n\n\t\t} else { // create\n\t\t\t\t\n\t\t\tseries.tracker = renderer.path(trackerPath)\n\t\t\t\t.attr({\n\t\t\t\t\t'stroke-linejoin': 'round', // #1225\n\t\t\t\t\tvisibility: series.visible ? VISIBLE : HIDDEN,\n\t\t\t\t\tstroke: TRACKER_FILL,\n\t\t\t\t\tfill: trackByArea ? TRACKER_FILL : NONE,\n\t\t\t\t\t'stroke-width' : options.lineWidth + (trackByArea ? 0 : 2 * snap),\n\t\t\t\t\tzIndex: 2\n\t\t\t\t})\n\t\t\t\t.add(series.group);\n\t\t\t\t\n\t\t\t// The tracker is added to the series group, which is clipped, but is covered \n\t\t\t// by the marker group. So the marker group also needs to capture events.\n\t\t\teach([series.tracker, series.markerGroup], function (tracker) {\n\t\t\t\ttracker.addClass(PREFIX + 'tracker')\n\t\t\t\t\t.on('mouseover', onMouseOver)\n\t\t\t\t\t.on('mouseout', function (e) { pointer.onTrackerMouseOut(e); })\n\t\t\t\t\t.css(css);\n\n\t\t\t\tif (hasTouch) {\n\t\t\t\t\ttracker.on('touchstart', onMouseOver);\n\t\t\t\t} \n\t\t\t});\n\t\t}\n\n\t}\n\n}; // end Series prototype\n\n\n/**\n * LineSeries object\n */\nvar LineSeries = extendClass(Series);\nseriesTypes.line = LineSeries;\n\n/**\n * Set the default options for area\n */\ndefaultPlotOptions.area = merge(defaultSeriesOptions, {\n\tthreshold: 0\n\t// trackByArea: false,\n\t// lineColor: null, // overrides color, but lets fillColor be unaltered\n\t// fillOpacity: 0.75,\n\t// fillColor: null\n});\n\n/**\n * AreaSeries object\n */\nvar AreaSeries = extendClass(Series, {\n\ttype: 'area',\n\t\n\t/**\n\t * For stacks, don't split segments on null values. Instead, draw null values with \n\t * no marker. Also insert dummy points for any X position that exists in other series\n\t * in the stack.\n\t */ \n\tgetSegments: function () {\n\t\tvar segments = [],\n\t\t\tsegment = [],\n\t\t\tkeys = [],\n\t\t\txAxis = this.xAxis,\n\t\t\tyAxis = this.yAxis,\n\t\t\tstack = yAxis.stacks[this.stackKey],\n\t\t\tpointMap = {},\n\t\t\tplotX,\n\t\t\tplotY,\n\t\t\tpoints = this.points,\n\t\t\tconnectNulls = this.options.connectNulls,\n\t\t\tval,\n\t\t\ti,\n\t\t\tx;\n\n\t\tif (this.options.stacking && !this.cropped) { // cropped causes artefacts in Stock, and perf issue\n\t\t\t// Create a map where we can quickly look up the points by their X value.\n\t\t\tfor (i = 0; i < points.length; i++) {\n\t\t\t\tpointMap[points[i].x] = points[i];\n\t\t\t}\n\n\t\t\t// Sort the keys (#1651)\n\t\t\tfor (x in stack) {\n\t\t\t\tkeys.push(+x);\n\t\t\t}\n\t\t\tkeys.sort(function (a, b) {\n\t\t\t\treturn a - b;\n\t\t\t});\n\n\t\t\teach(keys, function (x) {\n\t\t\t\tif (connectNulls && (!pointMap[x] || pointMap[x].y === null)) { // #1836\n\t\t\t\t\treturn;\n\n\t\t\t\t// The point exists, push it to the segment\n\t\t\t\t} else if (pointMap[x]) {\n\t\t\t\t\tsegment.push(pointMap[x]);\n\n\t\t\t\t// There is no point for this X value in this series, so we \n\t\t\t\t// insert a dummy point in order for the areas to be drawn\n\t\t\t\t// correctly.\n\t\t\t\t} else {\n\t\t\t\t\tplotX = xAxis.translate(x);\n\t\t\t\t\tval = stack[x].percent ? (stack[x].total ? stack[x].cum * 100 / stack[x].total : 0) : stack[x].cum; // #1991\n\t\t\t\t\tplotY = yAxis.toPixels(val, true);\n\t\t\t\t\tsegment.push({ \n\t\t\t\t\t\ty: null, \n\t\t\t\t\t\tplotX: plotX,\n\t\t\t\t\t\tclientX: plotX, \n\t\t\t\t\t\tplotY: plotY, \n\t\t\t\t\t\tyBottom: plotY,\n\t\t\t\t\t\tonMouseOver: noop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (segment.length) {\n\t\t\t\tsegments.push(segment);\n\t\t\t}\n\n\t\t} else {\n\t\t\tSeries.prototype.getSegments.call(this);\n\t\t\tsegments = this.segments;\n\t\t}\n\n\t\tthis.segments = segments;\n\t},\n\t\n\t/**\n\t * Extend the base Series getSegmentPath method by adding the path for the area.\n\t * This path is pushed to the series.areaPath property.\n\t */\n\tgetSegmentPath: function (segment) {\n\t\t\n\t\tvar segmentPath = Series.prototype.getSegmentPath.call(this, segment), // call base method\n\t\t\tareaSegmentPath = [].concat(segmentPath), // work on a copy for the area path\n\t\t\ti,\n\t\t\toptions = this.options,\n\t\t\tsegLength = segmentPath.length,\n\t\t\ttranslatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181\n\t\t\tyBottom;\n\t\t\n\t\tif (segLength === 3) { // for animation from 1 to two points\n\t\t\tareaSegmentPath.push(L, segmentPath[1], segmentPath[2]);\n\t\t}\n\t\tif (options.stacking && !this.closedStacks) {\n\t\t\t\n\t\t\t// Follow stack back. Todo: implement areaspline. A general solution could be to \n\t\t\t// reverse the entire graphPath of the previous series, though may be hard with\n\t\t\t// splines and with series with different extremes\n\t\t\tfor (i = segment.length - 1; i >= 0; i--) {\n\n\t\t\t\tyBottom = pick(segment[i].yBottom, translatedThreshold);\n\t\t\t\n\t\t\t\t// step line?\n\t\t\t\tif (i < segment.length - 1 && options.step) {\n\t\t\t\t\tareaSegmentPath.push(segment[i + 1].plotX, yBottom);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tareaSegmentPath.push(segment[i].plotX, yBottom);\n\t\t\t}\n\n\t\t} else { // follow zero line back\n\t\t\tthis.closeSegment(areaSegmentPath, segment, translatedThreshold);\n\t\t}\n\t\tthis.areaPath = this.areaPath.concat(areaSegmentPath);\n\t\treturn segmentPath;\n\t},\n\t\n\t/**\n\t * Extendable method to close the segment path of an area. This is overridden in polar \n\t * charts.\n\t */\n\tcloseSegment: function (path, segment, translatedThreshold) {\n\t\tpath.push(\n\t\t\tL,\n\t\t\tsegment[segment.length - 1].plotX,\n\t\t\ttranslatedThreshold,\n\t\t\tL,\n\t\t\tsegment[0].plotX,\n\t\t\ttranslatedThreshold\n\t\t);\n\t},\n\t\n\t/**\n\t * Draw the graph and the underlying area. This method calls the Series base\n\t * function and adds the area. The areaPath is calculated in the getSegmentPath\n\t * method called from Series.prototype.drawGraph.\n\t */\n\tdrawGraph: function () {\n\t\t\n\t\t// Define or reset areaPath\n\t\tthis.areaPath = [];\n\t\t\n\t\t// Call the base method\n\t\tSeries.prototype.drawGraph.apply(this);\n\t\t\n\t\t// Define local variables\n\t\tvar series = this,\n\t\t\tareaPath = this.areaPath,\n\t\t\toptions = this.options,\n\t\t\tnegativeColor = options.negativeColor,\n\t\t\tnegativeFillColor = options.negativeFillColor,\n\t\t\tprops = [['area', this.color, options.fillColor]]; // area name, main color, fill color\n\t\t\n\t\tif (negativeColor || negativeFillColor) {\n\t\t\tprops.push(['areaNeg', negativeColor, negativeFillColor]);\n\t\t}\n\t\t\n\t\teach(props, function (prop) {\n\t\t\tvar areaKey = prop[0],\n\t\t\t\tarea = series[areaKey];\n\t\t\t\t\n\t\t\t// Create or update the area\n\t\t\tif (area) { // update\n\t\t\t\tarea.animate({ d: areaPath });\n\t\n\t\t\t} else { // create\n\t\t\t\tseries[areaKey] = series.chart.renderer.path(areaPath)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tfill: pick(\n\t\t\t\t\t\t\tprop[2],\n\t\t\t\t\t\t\tColor(prop[1]).setOpacity(pick(options.fillOpacity, 0.75)).get()\n\t\t\t\t\t\t),\n\t\t\t\t\t\tzIndex: 0 // #1069\n\t\t\t\t\t}).add(series.group);\n\t\t\t}\n\t\t});\n\t},\n\t\n\t/**\n\t * Get the series' symbol in the legend\n\t * \n\t * @param {Object} legend The legend object\n\t * @param {Object} item The series (this) or point\n\t */\n\tdrawLegendSymbol: function (legend, item) {\n\t\t\n\t\titem.legendSymbol = this.chart.renderer.rect(\n\t\t\t0,\n\t\t\tlegend.baseline - 11,\n\t\t\tlegend.options.symbolWidth,\n\t\t\t12,\n\t\t\t2\n\t\t).attr({\n\t\t\tzIndex: 3\n\t\t}).add(item.legendGroup);\t\t\n\t\t\n\t}\n});\n\nseriesTypes.area = AreaSeries;/**\n * Set the default options for spline\n */\ndefaultPlotOptions.spline = merge(defaultSeriesOptions);\n\n/**\n * SplineSeries object\n */\nvar SplineSeries = extendClass(Series, {\n\ttype: 'spline',\n\n\t/**\n\t * Get the spline segment from a given point's previous neighbour to the given point\n\t */\n\tgetPointSpline: function (segment, point, i) {\n\t\tvar smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc\n\t\t\tdenom = smoothing + 1,\n\t\t\tplotX = point.plotX,\n\t\t\tplotY = point.plotY,\n\t\t\tlastPoint = segment[i - 1],\n\t\t\tnextPoint = segment[i + 1],\n\t\t\tleftContX,\n\t\t\tleftContY,\n\t\t\trightContX,\n\t\t\trightContY,\n\t\t\tret;\n\n\t\t// find control points\n\t\tif (lastPoint && nextPoint) {\n\t\t\n\t\t\tvar lastX = lastPoint.plotX,\n\t\t\t\tlastY = lastPoint.plotY,\n\t\t\t\tnextX = nextPoint.plotX,\n\t\t\t\tnextY = nextPoint.plotY,\n\t\t\t\tcorrection;\n\n\t\t\tleftContX = (smoothing * plotX + lastX) / denom;\n\t\t\tleftContY = (smoothing * plotY + lastY) / denom;\n\t\t\trightContX = (smoothing * plotX + nextX) / denom;\n\t\t\trightContY = (smoothing * plotY + nextY) / denom;\n\n\t\t\t// have the two control points make a straight line through main point\n\t\t\tcorrection = ((rightContY - leftContY) * (rightContX - plotX)) /\n\t\t\t\t(rightContX - leftContX) + plotY - rightContY;\n\n\t\t\tleftContY += correction;\n\t\t\trightContY += correction;\n\n\t\t\t// to prevent false extremes, check that control points are between\n\t\t\t// neighbouring points' y values\n\t\t\tif (leftContY > lastY && leftContY > plotY) {\n\t\t\t\tleftContY = mathMax(lastY, plotY);\n\t\t\t\trightContY = 2 * plotY - leftContY; // mirror of left control point\n\t\t\t} else if (leftContY < lastY && leftContY < plotY) {\n\t\t\t\tleftContY = mathMin(lastY, plotY);\n\t\t\t\trightContY = 2 * plotY - leftContY;\n\t\t\t}\n\t\t\tif (rightContY > nextY && rightContY > plotY) {\n\t\t\t\trightContY = mathMax(nextY, plotY);\n\t\t\t\tleftContY = 2 * plotY - rightContY;\n\t\t\t} else if (rightContY < nextY && rightContY < plotY) {\n\t\t\t\trightContY = mathMin(nextY, plotY);\n\t\t\t\tleftContY = 2 * plotY - rightContY;\n\t\t\t}\n\n\t\t\t// record for drawing in next point\n\t\t\tpoint.rightContX = rightContX;\n\t\t\tpoint.rightContY = rightContY;\n\n\t\t}\n\t\t\n\t\t// Visualize control points for debugging\n\t\t/*\n\t\tif (leftContX) {\n\t\t\tthis.chart.renderer.circle(leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, 2)\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'red',\n\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\tfill: 'none'\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t\tthis.chart.renderer.path(['M', leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop,\n\t\t\t\t'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop])\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'red',\n\t\t\t\t\t'stroke-width': 1\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t\tthis.chart.renderer.circle(rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, 2)\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'green',\n\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\tfill: 'none'\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t\tthis.chart.renderer.path(['M', rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop,\n\t\t\t\t'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop])\n\t\t\t\t.attr({\n\t\t\t\t\tstroke: 'green',\n\t\t\t\t\t'stroke-width': 1\n\t\t\t\t})\n\t\t\t\t.add();\n\t\t}\n\t\t*/\n\n\t\t// moveTo or lineTo\n\t\tif (!i) {\n\t\t\tret = [M, plotX, plotY];\n\t\t} else { // curve from last point to this\n\t\t\tret = [\n\t\t\t\t'C',\n\t\t\t\tlastPoint.rightContX || lastPoint.plotX,\n\t\t\t\tlastPoint.rightContY || lastPoint.plotY,\n\t\t\t\tleftContX || plotX,\n\t\t\t\tleftContY || plotY,\n\t\t\t\tplotX,\n\t\t\t\tplotY\n\t\t\t];\n\t\t\tlastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later\n\t\t}\n\t\treturn ret;\n\t}\n});\nseriesTypes.spline = SplineSeries;\n\n/**\n * Set the default options for areaspline\n */\ndefaultPlotOptions.areaspline = merge(defaultPlotOptions.area);\n\n/**\n * AreaSplineSeries object\n */\nvar areaProto = AreaSeries.prototype,\n\tAreaSplineSeries = extendClass(SplineSeries, {\n\t\ttype: 'areaspline',\n\t\tclosedStacks: true, // instead of following the previous graph back, follow the threshold back\n\t\t\n\t\t// Mix in methods from the area series\n\t\tgetSegmentPath: areaProto.getSegmentPath,\n\t\tcloseSegment: areaProto.closeSegment,\n\t\tdrawGraph: areaProto.drawGraph,\n\t\tdrawLegendSymbol: areaProto.drawLegendSymbol\n\t});\nseriesTypes.areaspline = AreaSplineSeries;\n\n/**\n * Set the default options for column\n */\ndefaultPlotOptions.column = merge(defaultSeriesOptions, {\n\tborderColor: '#FFFFFF',\n\tborderWidth: 1,\n\tborderRadius: 0,\n\t//colorByPoint: undefined,\n\tgroupPadding: 0.2,\n\t//grouping: true,\n\tmarker: null, // point options are specified in the base options\n\tpointPadding: 0.1,\n\t//pointWidth: null,\n\tminPointLength: 0,\n\tcropThreshold: 50, // when there are more points, they will not animate out of the chart on xAxis.setExtremes\n\tpointRange: null, // null means auto, meaning 1 in a categorized axis and least distance between points if not categories\n\tstates: {\n\t\thover: {\n\t\t\tbrightness: 0.1,\n\t\t\tshadow: false\n\t\t},\n\t\tselect: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tborderColor: '#000000',\n\t\t\tshadow: false\n\t\t}\n\t},\n\tdataLabels: {\n\t\talign: null, // auto\n\t\tverticalAlign: null, // auto\n\t\ty: null\n\t},\n\tstickyTracking: false,\n\tthreshold: 0\n});\n\n/**\n * ColumnSeries object\n */\nvar ColumnSeries = extendClass(Series, {\n\ttype: 'column',\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tstroke: 'borderColor',\n\t\t'stroke-width': 'borderWidth',\n\t\tfill: 'color',\n\t\tr: 'borderRadius'\n\t},\n\tcropShoulder: 0,\n\ttrackerGroups: ['group', 'dataLabelsGroup'],\n\tnegStacks: true, // use separate negative stacks, unlike area stacks where a negative \n\t\t// point is substracted from previous (#1910)\n\t\n\t/**\n\t * Initialize the series\n\t */\n\tinit: function () {\n\t\tSeries.prototype.init.apply(this, arguments);\n\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\n\t\t// if the series is added dynamically, force redraw of other\n\t\t// series affected by a new column\n\t\tif (chart.hasRendered) {\n\t\t\teach(chart.series, function (otherSeries) {\n\t\t\t\tif (otherSeries.type === series.type) {\n\t\t\t\t\totherSeries.isDirty = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Return the width and x offset of the columns adjusted for grouping, groupPadding, pointPadding,\n\t * pointWidth etc. \n\t */\n\tgetColumnMetrics: function () {\n\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\txAxis = series.xAxis,\n\t\t\tyAxis = series.yAxis,\n\t\t\treversedXAxis = xAxis.reversed,\n\t\t\tstackKey,\n\t\t\tstackGroups = {},\n\t\t\tcolumnIndex,\n\t\t\tcolumnCount = 0;\n\n\t\t// Get the total number of column type series.\n\t\t// This is called on every series. Consider moving this logic to a\n\t\t// chart.orderStacks() function and call it on init, addSeries and removeSeries\n\t\tif (options.grouping === false) {\n\t\t\tcolumnCount = 1;\n\t\t} else {\n\t\t\teach(series.chart.series, function (otherSeries) {\n\t\t\t\tvar otherOptions = otherSeries.options,\n\t\t\t\t\totherYAxis = otherSeries.yAxis;\n\t\t\t\tif (otherSeries.type === series.type && otherSeries.visible &&\n\t\t\t\t\t\tyAxis.len === otherYAxis.len && yAxis.pos === otherYAxis.pos) {  // #642, #2086\n\t\t\t\t\tif (otherOptions.stacking) {\n\t\t\t\t\t\tstackKey = otherSeries.stackKey;\n\t\t\t\t\t\tif (stackGroups[stackKey] === UNDEFINED) {\n\t\t\t\t\t\t\tstackGroups[stackKey] = columnCount++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolumnIndex = stackGroups[stackKey];\n\t\t\t\t\t} else if (otherOptions.grouping !== false) { // #1162\n\t\t\t\t\t\tcolumnIndex = columnCount++;\n\t\t\t\t\t}\n\t\t\t\t\totherSeries.columnIndex = columnIndex;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar categoryWidth = mathMin(\n\t\t\t\tmathAbs(xAxis.transA) * (xAxis.ordinalSlope || options.pointRange || xAxis.closestPointRange || 1), \n\t\t\t\txAxis.len // #1535\n\t\t\t),\n\t\t\tgroupPadding = categoryWidth * options.groupPadding,\n\t\t\tgroupWidth = categoryWidth - 2 * groupPadding,\n\t\t\tpointOffsetWidth = groupWidth / columnCount,\n\t\t\toptionPointWidth = options.pointWidth,\n\t\t\tpointPadding = defined(optionPointWidth) ? (pointOffsetWidth - optionPointWidth) / 2 :\n\t\t\t\tpointOffsetWidth * options.pointPadding,\n\t\t\tpointWidth = pick(optionPointWidth, pointOffsetWidth - 2 * pointPadding), // exact point width, used in polar charts\n\t\t\tcolIndex = (reversedXAxis ? \n\t\t\t\tcolumnCount - (series.columnIndex || 0) : // #1251\n\t\t\t\tseries.columnIndex) || 0,\n\t\t\tpointXOffset = pointPadding + (groupPadding + colIndex *\n\t\t\t\tpointOffsetWidth - (categoryWidth / 2)) *\n\t\t\t\t(reversedXAxis ? -1 : 1);\n\n\t\t// Save it for reading in linked series (Error bars particularly)\n\t\treturn (series.columnMetrics = { \n\t\t\twidth: pointWidth, \n\t\t\toffset: pointXOffset \n\t\t});\n\t\t\t\n\t},\n\n\t/**\n\t * Translate each point to the plot area coordinate system and find shape positions\n\t */\n\ttranslate: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\toptions = series.options,\n\t\t\tborderWidth = options.borderWidth,\n\t\t\tyAxis = series.yAxis,\n\t\t\tthreshold = options.threshold,\n\t\t\ttranslatedThreshold = series.translatedThreshold = yAxis.getThreshold(threshold),\n\t\t\tminPointLength = pick(options.minPointLength, 5),\n\t\t\tmetrics = series.getColumnMetrics(),\n\t\t\tpointWidth = metrics.width,\n\t\t\tseriesBarW = series.barW = mathCeil(mathMax(pointWidth, 1 + 2 * borderWidth)), // rounded and postprocessed for border width\n\t\t\tpointXOffset = series.pointXOffset = metrics.offset,\n\t\t\txCrisp = -(borderWidth % 2 ? 0.5 : 0),\n\t\t\tyCrisp = borderWidth % 2 ? 0.5 : 1;\n\n\t\tif (chart.renderer.isVML && chart.inverted) {\n\t\t\tyCrisp += 1;\n\t\t}\n\n\t\tSeries.prototype.translate.apply(series);\n\n\t\t// record the new values\n\t\teach(series.points, function (point) {\n\t\t\tvar yBottom = pick(point.yBottom, translatedThreshold),\n\t\t\t\tplotY = mathMin(mathMax(-999 - yBottom, point.plotY), yAxis.len + 999 + yBottom), // Don't draw too far outside plot area (#1303, #2241)\n\t\t\t\tbarX = point.plotX + pointXOffset,\n\t\t\t\tbarW = seriesBarW,\n\t\t\t\tbarY = mathMin(plotY, yBottom),\n\t\t\t\tright,\n\t\t\t\tbottom,\n\t\t\t\tfromTop,\n\t\t\t\tfromLeft,\n\t\t\t\tbarH = mathMax(plotY, yBottom) - barY;\n\n\t\t\t// Handle options.minPointLength\n\t\t\tif (mathAbs(barH) < minPointLength) {\n\t\t\t\tif (minPointLength) {\n\t\t\t\t\tbarH = minPointLength;\n\t\t\t\t\tbarY =\n\t\t\t\t\t\tmathRound(mathAbs(barY - translatedThreshold) > minPointLength ? // stacked\n\t\t\t\t\t\t\tyBottom - minPointLength : // keep position\n\t\t\t\t\t\t\ttranslatedThreshold - (yAxis.translate(point.y, 0, 1, 0, 1) <= translatedThreshold ? minPointLength : 0)); // use exact yAxis.translation (#1485)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Cache for access in polar\n\t\t\tpoint.barX = barX;\n\t\t\tpoint.pointWidth = pointWidth;\n\n\n\t\t\t// Round off to obtain crisp edges\n\t\t\tfromLeft = mathAbs(barX) < 0.5;\n\t\t\tright = mathRound(barX + barW) + xCrisp;\n\t\t\tbarX = mathRound(barX) + xCrisp;\n\t\t\tbarW = right - barX;\n\n\t\t\tfromTop = mathAbs(barY) < 0.5;\n\t\t\tbottom = mathRound(barY + barH) + yCrisp;\n\t\t\tbarY = mathRound(barY) + yCrisp;\n\t\t\tbarH = bottom - barY;\n\n\t\t\t// Top and left edges are exceptions\n\t\t\tif (fromLeft) {\n\t\t\t\tbarX += 1;\n\t\t\t\tbarW -= 1;\n\t\t\t}\n\t\t\tif (fromTop) {\n\t\t\t\tbarY -= 1;\n\t\t\t\tbarH += 1;\n\t\t\t}\n\n\t\t\t// Register shape type and arguments to be used in drawPoints\n\t\t\tpoint.shapeType = 'rect';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\tx: barX,\n\t\t\t\ty: barY,\n\t\t\t\twidth: barW,\n\t\t\t\theight: barH\n\t\t\t};\n\t\t});\n\n\t},\n\n\tgetSymbol: noop,\n\t\n\t/**\n\t * Use a solid rectangle like the area series types\n\t */\n\tdrawLegendSymbol: AreaSeries.prototype.drawLegendSymbol,\n\t\n\t\n\t/**\n\t * Columns have no graph\n\t */\n\tdrawGraph: noop,\n\n\t/**\n\t * Draw the columns. For bars, the series.group is rotated, so the same coordinates\n\t * apply for columns and bars. This method is inherited by scatter series.\n\t *\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\trenderer = series.chart.renderer,\n\t\t\tshapeArgs;\n\n\n\t\t// draw the columns\n\t\teach(series.points, function (point) {\n\t\t\tvar plotY = point.plotY,\n\t\t\t\tgraphic = point.graphic;\n\n\t\t\tif (plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) {\n\t\t\t\tshapeArgs = point.shapeArgs;\n\t\t\t\t\n\t\t\t\tif (graphic) { // update\n\t\t\t\t\tstop(graphic);\n\t\t\t\t\tgraphic.animate(merge(shapeArgs));\n\n\t\t\t\t} else {\n\t\t\t\t\tpoint.graphic = graphic = renderer[point.shapeType](shapeArgs)\n\t\t\t\t\t\t.attr(point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE])\n\t\t\t\t\t\t.add(series.group)\n\t\t\t\t\t\t.shadow(options.shadow, null, options.stacking && !options.borderRadius);\n\t\t\t\t}\n\n\t\t\t} else if (graphic) {\n\t\t\t\tpoint.graphic = graphic.destroy(); // #1269\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Add tracking event listener to the series group, so the point graphics\n\t * themselves act as trackers\n\t */\n\tdrawTracker: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\tpointer = chart.pointer,\n\t\t\tcursor = series.options.cursor,\n\t\t\tcss = cursor && { cursor: cursor },\n\t\t\tonMouseOver = function (e) {\n\t\t\t\tvar target = e.target,\n\t\t\t\t\tpoint;\n\n\t\t\t\tif (chart.hoverSeries !== series) {\n\t\t\t\t\tseries.onMouseOver();\n\t\t\t\t}\n\t\t\t\twhile (target && !point) {\n\t\t\t\t\tpoint = target.point;\n\t\t\t\t\ttarget = target.parentNode;\n\t\t\t\t}\n\t\t\t\tif (point !== UNDEFINED && point !== chart.hoverPoint) { // undefined on graph in scatterchart\n\t\t\t\t\tpoint.onMouseOver(e);\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Add reference to the point\n\t\teach(series.points, function (point) {\n\t\t\tif (point.graphic) {\n\t\t\t\tpoint.graphic.element.point = point;\n\t\t\t}\n\t\t\tif (point.dataLabel) {\n\t\t\t\tpoint.dataLabel.element.point = point;\n\t\t\t}\n\t\t});\n\n\t\t// Add the event listeners, we need to do this only once\n\t\tif (!series._hasTracking) {\n\t\t\teach(series.trackerGroups, function (key) {\n\t\t\t\tif (series[key]) { // we don't always have dataLabelsGroup\n\t\t\t\t\tseries[key]\n\t\t\t\t\t\t.addClass(PREFIX + 'tracker')\n\t\t\t\t\t\t.on('mouseover', onMouseOver)\n\t\t\t\t\t\t.on('mouseout', function (e) { pointer.onTrackerMouseOut(e); })\n\t\t\t\t\t\t.css(css);\n\t\t\t\t\tif (hasTouch) {\n\t\t\t\t\t\tseries[key].on('touchstart', onMouseOver);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tseries._hasTracking = true;\n\t\t}\n\t},\n\t\n\t/** \n\t * Override the basic data label alignment by adjusting for the position of the column\n\t */\n\talignDataLabel: function (point, dataLabel, options,  alignTo, isNew) {\n\t\tvar chart = this.chart,\n\t\t\tinverted = chart.inverted,\n\t\t\tdlBox = point.dlBox || point.shapeArgs, // data label box for alignment\n\t\t\tbelow = point.below || (point.plotY > pick(this.translatedThreshold, chart.plotSizeY)),\n\t\t\tinside = pick(options.inside, !!this.options.stacking); // draw it inside the box?\n\t\t\n\t\t// Align to the column itself, or the top of it\n\t\tif (dlBox) { // Area range uses this method but not alignTo\n\t\t\talignTo = merge(dlBox);\n\t\t\tif (inverted) {\n\t\t\t\talignTo = {\n\t\t\t\t\tx: chart.plotWidth - alignTo.y - alignTo.height,\n\t\t\t\t\ty: chart.plotHeight - alignTo.x - alignTo.width,\n\t\t\t\t\twidth: alignTo.height,\n\t\t\t\t\theight: alignTo.width\n\t\t\t\t};\n\t\t\t}\n\t\t\t\t\n\t\t\t// Compute the alignment box\n\t\t\tif (!inside) {\n\t\t\t\tif (inverted) {\n\t\t\t\t\talignTo.x += below ? 0 : alignTo.width;\n\t\t\t\t\talignTo.width = 0;\n\t\t\t\t} else {\n\t\t\t\t\talignTo.y += below ? alignTo.height : 0;\n\t\t\t\t\talignTo.height = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// When alignment is undefined (typically columns and bars), display the individual \n\t\t// point below or above the point depending on the threshold\n\t\toptions.align = pick(\n\t\t\toptions.align, \n\t\t\t!inverted || inside ? 'center' : below ? 'right' : 'left'\n\t\t);\n\t\toptions.verticalAlign = pick(\n\t\t\toptions.verticalAlign, \n\t\t\tinverted || inside ? 'middle' : below ? 'top' : 'bottom'\n\t\t);\n\t\t\n\t\t// Call the parent method\n\t\tSeries.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n\t},\n\n\n\t/**\n\t * Animate the column heights one by one from zero\n\t * @param {Boolean} init Whether to initialize the animation or run it\n\t */\n\tanimate: function (init) {\n\t\tvar series = this,\n\t\t\tyAxis = this.yAxis,\n\t\t\toptions = series.options,\n\t\t\tinverted = this.chart.inverted,\n\t\t\tattr = {},\n\t\t\ttranslatedThreshold;\n\n\t\tif (hasSVG) { // VML is too slow anyway\n\t\t\tif (init) {\n\t\t\t\tattr.scaleY = 0.001;\n\t\t\t\ttranslatedThreshold = mathMin(yAxis.pos + yAxis.len, mathMax(yAxis.pos, yAxis.toPixels(options.threshold)));\n\t\t\t\tif (inverted) {\n\t\t\t\t\tattr.translateX = translatedThreshold - yAxis.len;\n\t\t\t\t} else {\n\t\t\t\t\tattr.translateY = translatedThreshold;\n\t\t\t\t}\n\t\t\t\tseries.group.attr(attr);\n\n\t\t\t} else { // run the animation\n\t\t\t\t\n\t\t\t\tattr.scaleY = 1;\n\t\t\t\tattr[inverted ? 'translateX' : 'translateY'] = yAxis.pos;\n\t\t\t\tseries.group.animate(attr, series.options.animation);\n\n\t\t\t\t// delete this function to allow it only once\n\t\t\t\tseries.animate = null;\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Remove this series from the chart\n\t */\n\tremove: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart;\n\n\t\t// column and bar series affects other series of the same type\n\t\t// as they are either stacked or grouped\n\t\tif (chart.hasRendered) {\n\t\t\teach(chart.series, function (otherSeries) {\n\t\t\t\tif (otherSeries.type === series.type) {\n\t\t\t\t\totherSeries.isDirty = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tSeries.prototype.remove.apply(series, arguments);\n\t}\n});\nseriesTypes.column = ColumnSeries;\n/**\n * Set the default options for bar\n */\ndefaultPlotOptions.bar = merge(defaultPlotOptions.column);\n/**\n * The Bar series class\n */\nvar BarSeries = extendClass(ColumnSeries, {\n\ttype: 'bar',\n\tinverted: true\n});\nseriesTypes.bar = BarSeries;\n\n/**\n * Set the default options for scatter\n */\ndefaultPlotOptions.scatter = merge(defaultSeriesOptions, {\n\tlineWidth: 0,\n\ttooltip: {\n\t\theaderFormat: '<span style=\"font-size: 10px; color:{series.color}\">{series.name}</span><br/>',\n\t\tpointFormat: 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>',\n\t\tfollowPointer: true\n\t},\n\tstickyTracking: false\n});\n\n/**\n * The scatter series class\n */\nvar ScatterSeries = extendClass(Series, {\n\ttype: 'scatter',\n\tsorted: false,\n\trequireSorting: false,\n\tnoSharedTooltip: true,\n\ttrackerGroups: ['markerGroup'],\n\n\tdrawTracker: ColumnSeries.prototype.drawTracker,\n\t\n\tsetTooltipPoints: noop\n});\nseriesTypes.scatter = ScatterSeries;\n\n/**\n * Set the default options for pie\n */\ndefaultPlotOptions.pie = merge(defaultSeriesOptions, {\n\tborderColor: '#FFFFFF',\n\tborderWidth: 1,\n\tcenter: [null, null],\n\tclip: false,\n\tcolorByPoint: true, // always true for pies\n\tdataLabels: {\n\t\t// align: null,\n\t\t// connectorWidth: 1,\n\t\t// connectorColor: point.color,\n\t\t// connectorPadding: 5,\n\t\tdistance: 30,\n\t\tenabled: true,\n\t\tformatter: function () {\n\t\t\treturn this.point.name;\n\t\t}\n\t\t// softConnector: true,\n\t\t//y: 0\n\t},\n\tignoreHiddenPoint: true,\n\t//innerSize: 0,\n\tlegendType: 'point',\n\tmarker: null, // point options are specified in the base options\n\tsize: null,\n\tshowInLegend: false,\n\tslicedOffset: 10,\n\tstates: {\n\t\thover: {\n\t\t\tbrightness: 0.1,\n\t\t\tshadow: false\n\t\t}\n\t},\n\tstickyTracking: false,\n\ttooltip: {\n\t\tfollowPointer: true\n\t}\n});\n\n/**\n * Extended point object for pies\n */\nvar PiePoint = extendClass(Point, {\n\t/**\n\t * Initiate the pie slice\n\t */\n\tinit: function () {\n\n\t\tPoint.prototype.init.apply(this, arguments);\n\n\t\tvar point = this,\n\t\t\ttoggleSlice;\n\n\t\t// Disallow negative values (#1530)\n\t\tif (point.y < 0) {\n\t\t\tpoint.y = null;\n\t\t}\n\n\t\t//visible: options.visible !== false,\n\t\textend(point, {\n\t\t\tvisible: point.visible !== false,\n\t\t\tname: pick(point.name, 'Slice')\n\t\t});\n\n\t\t// add event listener for select\n\t\ttoggleSlice = function (e) {\n\t\t\tpoint.slice(e.type === 'select');\n\t\t};\n\t\taddEvent(point, 'select', toggleSlice);\n\t\taddEvent(point, 'unselect', toggleSlice);\n\n\t\treturn point;\n\t},\n\n\t/**\n\t * Toggle the visibility of the pie slice\n\t * @param {Boolean} vis Whether to show the slice or not. If undefined, the\n\t *    visibility is toggled\n\t */\n\tsetVisible: function (vis) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\tmethod;\n\n\t\t// if called without an argument, toggle visibility\n\t\tpoint.visible = point.options.visible = vis = vis === UNDEFINED ? !point.visible : vis;\n\t\tseries.options.data[inArray(point, series.data)] = point.options; // update userOptions.data\n\t\t\n\t\tmethod = vis ? 'show' : 'hide';\n\n\t\t// Show and hide associated elements\n\t\teach(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function (key) {\n\t\t\tif (point[key]) {\n\t\t\t\tpoint[key][method]();\n\t\t\t}\n\t\t});\n\n\t\tif (point.legendItem) {\n\t\t\tchart.legend.colorizeItem(point, vis);\n\t\t}\n\t\t\n\t\t// Handle ignore hidden slices\n\t\tif (!series.isDirty && series.options.ignoreHiddenPoint) {\n\t\t\tseries.isDirty = true;\n\t\t\tchart.redraw();\n\t\t}\n\t},\n\n\t/**\n\t * Set or toggle whether the slice is cut out from the pie\n\t * @param {Boolean} sliced When undefined, the slice state is toggled\n\t * @param {Boolean} redraw Whether to redraw the chart. True by default.\n\t */\n\tslice: function (sliced, redraw, animation) {\n\t\tvar point = this,\n\t\t\tseries = point.series,\n\t\t\tchart = series.chart,\n\t\t\ttranslation;\n\n\t\tsetAnimation(animation, chart);\n\n\t\t// redraw is true by default\n\t\tredraw = pick(redraw, true);\n\n\t\t// if called without an argument, toggle\n\t\tpoint.sliced = point.options.sliced = sliced = defined(sliced) ? sliced : !point.sliced;\n\t\tseries.options.data[inArray(point, series.data)] = point.options; // update userOptions.data\n\n\t\ttranslation = sliced ? point.slicedTranslation : {\n\t\t\ttranslateX: 0,\n\t\t\ttranslateY: 0\n\t\t};\n\n\t\tpoint.graphic.animate(translation);\n\t\t\n\t\tif (point.shadowGroup) {\n\t\t\tpoint.shadowGroup.animate(translation);\n\t\t}\n\n\t}\n});\n\n/**\n * The Pie series class\n */\nvar PieSeries = {\n\ttype: 'pie',\n\tisCartesian: false,\n\tpointClass: PiePoint,\n\trequireSorting: false,\n\tnoSharedTooltip: true,\n\ttrackerGroups: ['group', 'dataLabelsGroup'],\n\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\tstroke: 'borderColor',\n\t\t'stroke-width': 'borderWidth',\n\t\tfill: 'color'\n\t},\n\n\t/**\n\t * Pies have one color each point\n\t */\n\tgetColor: noop,\n\n\t/**\n\t * Animate the pies in\n\t */\n\tanimate: function (init) {\n\t\tvar series = this,\n\t\t\tpoints = series.points,\n\t\t\tstartAngleRad = series.startAngleRad;\n\n\t\tif (!init) {\n\t\t\teach(points, function (point) {\n\t\t\t\tvar graphic = point.graphic,\n\t\t\t\t\targs = point.shapeArgs;\n\n\t\t\t\tif (graphic) {\n\t\t\t\t\t// start values\n\t\t\t\t\tgraphic.attr({\n\t\t\t\t\t\tr: series.center[3] / 2, // animate from inner radius (#779)\n\t\t\t\t\t\tstart: startAngleRad,\n\t\t\t\t\t\tend: startAngleRad\n\t\t\t\t\t});\n\n\t\t\t\t\t// animate\n\t\t\t\t\tgraphic.animate({\n\t\t\t\t\t\tr: args.r,\n\t\t\t\t\t\tstart: args.start,\n\t\t\t\t\t\tend: args.end\n\t\t\t\t\t}, series.options.animation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// delete this function to allow it only once\n\t\t\tseries.animate = null;\n\t\t}\n\t},\n\n\t/**\n\t * Extend the basic setData method by running processData and generatePoints immediately,\n\t * in order to access the points from the legend.\n\t */\n\tsetData: function (data, redraw) {\n\t\tSeries.prototype.setData.call(this, data, false);\n\t\tthis.processData();\n\t\tthis.generatePoints();\n\t\tif (pick(redraw, true)) {\n\t\t\tthis.chart.redraw();\n\t\t} \n\t},\n\n\t/**\n\t * Extend the generatePoints method by adding total and percentage properties to each point\n\t */\n\tgeneratePoints: function () {\n\t\tvar i,\n\t\t\ttotal = 0,\n\t\t\tpoints,\n\t\t\tlen,\n\t\t\tpoint,\n\t\t\tignoreHiddenPoint = this.options.ignoreHiddenPoint;\n\n\t\tSeries.prototype.generatePoints.call(this);\n\n\t\t// Populate local vars\n\t\tpoints = this.points;\n\t\tlen = points.length;\n\t\t\n\t\t// Get the total sum\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tpoint = points[i];\n\t\t\ttotal += (ignoreHiddenPoint && !point.visible) ? 0 : point.y;\n\t\t}\n\t\tthis.total = total;\n\n\t\t// Set each point's properties\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tpoint = points[i];\n\t\t\tpoint.percentage = total > 0 ? (point.y / total) * 100 : 0;\n\t\t\tpoint.total = total;\n\t\t}\n\t\t\n\t},\n\t\n\t/**\n\t * Get the center of the pie based on the size and center options relative to the  \n\t * plot area. Borrowed by the polar and gauge series types.\n\t */\n\tgetCenter: function () {\n\t\t\n\t\tvar options = this.options,\n\t\t\tchart = this.chart,\n\t\t\tslicingRoom = 2 * (options.slicedOffset || 0),\n\t\t\thandleSlicingRoom,\n\t\t\tplotWidth = chart.plotWidth - 2 * slicingRoom,\n\t\t\tplotHeight = chart.plotHeight - 2 * slicingRoom,\n\t\t\tcenterOption = options.center,\n\t\t\tpositions = [pick(centerOption[0], '50%'), pick(centerOption[1], '50%'), options.size || '100%', options.innerSize || 0],\n\t\t\tsmallestSize = mathMin(plotWidth, plotHeight),\n\t\t\tisPercent;\n\t\t\n\t\treturn map(positions, function (length, i) {\n\t\t\tisPercent = /%$/.test(length);\n\t\t\thandleSlicingRoom = i < 2 || (i === 2 && isPercent);\n\t\t\treturn (isPercent ?\n\t\t\t\t// i == 0: centerX, relative to width\n\t\t\t\t// i == 1: centerY, relative to height\n\t\t\t\t// i == 2: size, relative to smallestSize\n\t\t\t\t// i == 4: innerSize, relative to smallestSize\n\t\t\t\t[plotWidth, plotHeight, smallestSize, smallestSize][i] *\n\t\t\t\t\tpInt(length) / 100 :\n\t\t\t\tlength) + (handleSlicingRoom ? slicingRoom : 0);\n\t\t});\n\t},\n\t\n\t/**\n\t * Do translation for pie slices\n\t */\n\ttranslate: function (positions) {\n\t\tthis.generatePoints();\n\t\t\n\t\tvar series = this,\n\t\t\tcumulative = 0,\n\t\t\tprecision = 1000, // issue #172\n\t\t\toptions = series.options,\n\t\t\tslicedOffset = options.slicedOffset,\n\t\t\tconnectorOffset = slicedOffset + options.borderWidth,\n\t\t\tstart,\n\t\t\tend,\n\t\t\tangle,\n\t\t\tstartAngle = options.startAngle || 0,\n\t\t\tstartAngleRad = series.startAngleRad = mathPI / 180 * (startAngle - 90),\n\t\t\tendAngleRad = series.endAngleRad = mathPI / 180 * ((options.endAngle || (startAngle + 360)) - 90), // docs\n\t\t\tcirc = endAngleRad - startAngleRad, //2 * mathPI,\n\t\t\tpoints = series.points,\n\t\t\tradiusX, // the x component of the radius vector for a given point\n\t\t\tradiusY,\n\t\t\tlabelDistance = options.dataLabels.distance,\n\t\t\tignoreHiddenPoint = options.ignoreHiddenPoint,\n\t\t\ti,\n\t\t\tlen = points.length,\n\t\t\tpoint;\n\n\t\t// Get positions - either an integer or a percentage string must be given.\n\t\t// If positions are passed as a parameter, we're in a recursive loop for adjusting\n\t\t// space for data labels.\n\t\tif (!positions) {\n\t\t\tseries.center = positions = series.getCenter();\n\t\t}\n\n\t\t// utility for getting the x value from a given y, used for anticollision logic in data labels\n\t\tseries.getX = function (y, left) {\n\n\t\t\tangle = math.asin((y - positions[1]) / (positions[2] / 2 + labelDistance));\n\n\t\t\treturn positions[0] +\n\t\t\t\t(left ? -1 : 1) *\n\t\t\t\t(mathCos(angle) * (positions[2] / 2 + labelDistance));\n\t\t};\n\n\t\t// Calculate the geometry for each point\n\t\tfor (i = 0; i < len; i++) {\n\t\t\t\n\t\t\tpoint = points[i];\n\t\t\t\n\t\t\t// set start and end angle\n\t\t\tstart = startAngleRad + (cumulative * circ);\n\t\t\tif (!ignoreHiddenPoint || point.visible) {\n\t\t\t\tcumulative += point.percentage / 100;\n\t\t\t}\n\t\t\tend = startAngleRad + (cumulative * circ);\n\n\t\t\t// set the shape\n\t\t\tpoint.shapeType = 'arc';\n\t\t\tpoint.shapeArgs = {\n\t\t\t\tx: positions[0],\n\t\t\t\ty: positions[1],\n\t\t\t\tr: positions[2] / 2,\n\t\t\t\tinnerR: positions[3] / 2,\n\t\t\t\tstart: mathRound(start * precision) / precision,\n\t\t\t\tend: mathRound(end * precision) / precision\n\t\t\t};\n\n\t\t\t// center for the sliced out slice\n\t\t\tangle = (end + start) / 2;\n\t\t\tif (angle > 0.75 * circ) {\n\t\t\t\tangle -= 2 * mathPI;\n\t\t\t}\n\t\t\tpoint.slicedTranslation = {\n\t\t\t\ttranslateX: mathRound(mathCos(angle) * slicedOffset),\n\t\t\t\ttranslateY: mathRound(mathSin(angle) * slicedOffset)\n\t\t\t};\n\n\t\t\t// set the anchor point for tooltips\n\t\t\tradiusX = mathCos(angle) * positions[2] / 2;\n\t\t\tradiusY = mathSin(angle) * positions[2] / 2;\n\t\t\tpoint.tooltipPos = [\n\t\t\t\tpositions[0] + radiusX * 0.7,\n\t\t\t\tpositions[1] + radiusY * 0.7\n\t\t\t];\n\t\t\t\n\t\t\tpoint.half = angle < -mathPI / 2 || angle > mathPI / 2 ? 1 : 0;\n\t\t\tpoint.angle = angle;\n\n\t\t\t// set the anchor point for data labels\n\t\t\tconnectorOffset = mathMin(connectorOffset, labelDistance / 2); // #1678\n\t\t\tpoint.labelPos = [\n\t\t\t\tpositions[0] + radiusX + mathCos(angle) * labelDistance, // first break of connector\n\t\t\t\tpositions[1] + radiusY + mathSin(angle) * labelDistance, // a/a\n\t\t\t\tpositions[0] + radiusX + mathCos(angle) * connectorOffset, // second break, right outside pie\n\t\t\t\tpositions[1] + radiusY + mathSin(angle) * connectorOffset, // a/a\n\t\t\t\tpositions[0] + radiusX, // landing point for connector\n\t\t\t\tpositions[1] + radiusY, // a/a\n\t\t\t\tlabelDistance < 0 ? // alignment\n\t\t\t\t\t'center' :\n\t\t\t\t\tpoint.half ? 'right' : 'left', // alignment\n\t\t\t\tangle // center angle\n\t\t\t];\n\n\t\t}\n\t},\n\n\tsetTooltipPoints: noop,\n\tdrawGraph: null,\n\n\t/**\n\t * Draw the data points\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer,\n\t\t\tgroupTranslation,\n\t\t\t//center,\n\t\t\tgraphic,\n\t\t\t//group,\n\t\t\tshadow = series.options.shadow,\n\t\t\tshadowGroup,\n\t\t\tshapeArgs;\n\n\t\tif (shadow && !series.shadowGroup) {\n\t\t\tseries.shadowGroup = renderer.g('shadow')\n\t\t\t\t.add(series.group);\n\t\t}\n\n\t\t// draw the slices\n\t\teach(series.points, function (point) {\n\t\t\tgraphic = point.graphic;\n\t\t\tshapeArgs = point.shapeArgs;\n\t\t\tshadowGroup = point.shadowGroup;\n\n\t\t\t// put the shadow behind all points\n\t\t\tif (shadow && !shadowGroup) {\n\t\t\t\tshadowGroup = point.shadowGroup = renderer.g('shadow')\n\t\t\t\t\t.add(series.shadowGroup);\n\t\t\t}\n\n\t\t\t// if the point is sliced, use special translation, else use plot area traslation\n\t\t\tgroupTranslation = point.sliced ? point.slicedTranslation : {\n\t\t\t\ttranslateX: 0,\n\t\t\t\ttranslateY: 0\n\t\t\t};\n\n\t\t\t//group.translate(groupTranslation[0], groupTranslation[1]);\n\t\t\tif (shadowGroup) {\n\t\t\t\tshadowGroup.attr(groupTranslation);\n\t\t\t}\n\n\t\t\t// draw the slice\n\t\t\tif (graphic) {\n\t\t\t\tgraphic.animate(extend(shapeArgs, groupTranslation));\n\t\t\t} else {\n\t\t\t\tpoint.graphic = graphic = renderer.arc(shapeArgs)\n\t\t\t\t\t.setRadialReference(series.center)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\tpoint.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE]\n\t\t\t\t\t)\n\t\t\t\t\t.attr({ 'stroke-linejoin': 'round' })\n\t\t\t\t\t.attr(groupTranslation)\n\t\t\t\t\t.add(series.group)\n\t\t\t\t\t.shadow(shadow, shadowGroup);\t\n\t\t\t}\n\n\t\t\t// detect point specific visibility\n\t\t\tif (point.visible === false) {\n\t\t\t\tpoint.setVisible(false);\n\t\t\t}\n\n\t\t});\n\n\t},\n\n\t/**\n\t * Utility for sorting data labels\n\t */\n\tsortByAngle: function (points, sign) {\n\t\tpoints.sort(function (a, b) {\n\t\t\treturn a.angle !== undefined && (b.angle - a.angle) * sign;\n\t\t});\n\t},\n\n\t/**\n\t * Override the base drawDataLabels method by pie specific functionality\n\t */\n\tdrawDataLabels: function () {\n\t\tvar series = this,\n\t\t\tdata = series.data,\n\t\t\tpoint,\n\t\t\tchart = series.chart,\n\t\t\toptions = series.options.dataLabels,\n\t\t\tconnectorPadding = pick(options.connectorPadding, 10),\n\t\t\tconnectorWidth = pick(options.connectorWidth, 1),\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tconnector,\n\t\t\tconnectorPath,\n\t\t\tsoftConnector = pick(options.softConnector, true),\n\t\t\tdistanceOption = options.distance,\n\t\t\tseriesCenter = series.center,\n\t\t\tradius = seriesCenter[2] / 2,\n\t\t\tcenterY = seriesCenter[1],\n\t\t\toutside = distanceOption > 0,\n\t\t\tdataLabel,\n\t\t\tdataLabelWidth,\n\t\t\tlabelPos,\n\t\t\tlabelHeight,\n\t\t\thalves = [// divide the points into right and left halves for anti collision\n\t\t\t\t[], // right\n\t\t\t\t[]  // left\n\t\t\t],\n\t\t\tx,\n\t\t\ty,\n\t\t\tvisibility,\n\t\t\trankArr,\n\t\t\ti,\n\t\t\tj,\n\t\t\toverflow = [0, 0, 0, 0], // top, right, bottom, left\n\t\t\tsort = function (a, b) {\n\t\t\t\treturn b.y - a.y;\n\t\t\t};\n\n\t\t// get out if not enabled\n\t\tif (!series.visible || (!options.enabled && !series._hasPointLabels)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// run parent method\n\t\tSeries.prototype.drawDataLabels.apply(series);\n\n\t\t// arrange points for detection collision\n\t\teach(data, function (point) {\n\t\t\tif (point.dataLabel) { // it may have been cancelled in the base method (#407)\n\t\t\t\thalves[point.half].push(point);\n\t\t\t}\n\t\t});\n\n\t\t// assume equal label heights\n\t\ti = 0;\n\t\twhile (!labelHeight && data[i]) { // #1569\n\t\t\tlabelHeight = data[i] && data[i].dataLabel && (data[i].dataLabel.getBBox().height || 21); // 21 is for #968\n\t\t\ti++;\n\t\t}\n\n\t\t/* Loop over the points in each half, starting from the top and bottom\n\t\t * of the pie to detect overlapping labels.\n\t\t */\n\t\ti = 2;\n\t\twhile (i--) {\n\n\t\t\tvar slots = [],\n\t\t\t\tslotsLength,\n\t\t\t\tusedSlots = [],\n\t\t\t\tpoints = halves[i],\n\t\t\t\tpos,\n\t\t\t\tlength = points.length,\n\t\t\t\tslotIndex;\n\t\t\t\t\n\t\t\t// Sort by angle\n\t\t\tseries.sortByAngle(points, i - 0.5);\n\n\t\t\t// Only do anti-collision when we are outside the pie and have connectors (#856)\n\t\t\tif (distanceOption > 0) {\n\t\t\t\t\n\t\t\t\t// build the slots\n\t\t\t\tfor (pos = centerY - radius - distanceOption; pos <= centerY + radius + distanceOption; pos += labelHeight) {\n\t\t\t\t\tslots.push(pos);\n\t\t\t\t\t\n\t\t\t\t\t// visualize the slot\n\t\t\t\t\t/*\n\t\t\t\t\tvar slotX = series.getX(pos, i) + chart.plotLeft - (i ? 100 : 0),\n\t\t\t\t\t\tslotY = pos + chart.plotTop;\n\t\t\t\t\tif (!isNaN(slotX)) {\n\t\t\t\t\t\tchart.renderer.rect(slotX, slotY - 7, 100, labelHeight, 1)\n\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\t\t\t\tstroke: 'silver'\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.add();\n\t\t\t\t\t\tchart.renderer.text('Slot '+ (slots.length - 1), slotX, slotY + 4)\n\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\tfill: 'silver'\n\t\t\t\t\t\t\t}).add();\n\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t}\n\t\t\t\tslotsLength = slots.length;\n\t\n\t\t\t\t// if there are more values than available slots, remove lowest values\n\t\t\t\tif (length > slotsLength) {\n\t\t\t\t\t// create an array for sorting and ranking the points within each quarter\n\t\t\t\t\trankArr = [].concat(points);\n\t\t\t\t\trankArr.sort(sort);\n\t\t\t\t\tj = length;\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\trankArr[j].rank = j;\n\t\t\t\t\t}\n\t\t\t\t\tj = length;\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\tif (points[j].rank >= slotsLength) {\n\t\t\t\t\t\t\tpoints.splice(j, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlength = points.length;\n\t\t\t\t}\n\t\n\t\t\t\t// The label goes to the nearest open slot, but not closer to the edge than\n\t\t\t\t// the label's index.\n\t\t\t\tfor (j = 0; j < length; j++) {\n\t\n\t\t\t\t\tpoint = points[j];\n\t\t\t\t\tlabelPos = point.labelPos;\n\t\n\t\t\t\t\tvar closest = 9999,\n\t\t\t\t\t\tdistance,\n\t\t\t\t\t\tslotI;\n\t\n\t\t\t\t\t// find the closest slot index\n\t\t\t\t\tfor (slotI = 0; slotI < slotsLength; slotI++) {\n\t\t\t\t\t\tdistance = mathAbs(slots[slotI] - labelPos[1]);\n\t\t\t\t\t\tif (distance < closest) {\n\t\t\t\t\t\t\tclosest = distance;\n\t\t\t\t\t\t\tslotIndex = slotI;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// if that slot index is closer to the edges of the slots, move it\n\t\t\t\t\t// to the closest appropriate slot\n\t\t\t\t\tif (slotIndex < j && slots[j] !== null) { // cluster at the top\n\t\t\t\t\t\tslotIndex = j;\n\t\t\t\t\t} else if (slotsLength  < length - j + slotIndex && slots[j] !== null) { // cluster at the bottom\n\t\t\t\t\t\tslotIndex = slotsLength - length + j;\n\t\t\t\t\t\twhile (slots[slotIndex] === null) { // make sure it is not taken\n\t\t\t\t\t\t\tslotIndex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Slot is taken, find next free slot below. In the next run, the next slice will find the\n\t\t\t\t\t\t// slot above these, because it is the closest one\n\t\t\t\t\t\twhile (slots[slotIndex] === null) { // make sure it is not taken\n\t\t\t\t\t\t\tslotIndex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tusedSlots.push({ i: slotIndex, y: slots[slotIndex] });\n\t\t\t\t\tslots[slotIndex] = null; // mark as taken\n\t\t\t\t}\n\t\t\t\t// sort them in order to fill in from the top\n\t\t\t\tusedSlots.sort(sort);\n\t\t\t}\n\n\t\t\t// now the used slots are sorted, fill them up sequentially\n\t\t\tfor (j = 0; j < length; j++) {\n\t\t\t\t\n\t\t\t\tvar slot, naturalY;\n\n\t\t\t\tpoint = points[j];\n\t\t\t\tlabelPos = point.labelPos;\n\t\t\t\tdataLabel = point.dataLabel;\n\t\t\t\tvisibility = point.visible === false ? HIDDEN : VISIBLE;\n\t\t\t\tnaturalY = labelPos[1];\n\t\t\t\t\n\t\t\t\tif (distanceOption > 0) {\n\t\t\t\t\tslot = usedSlots.pop();\n\t\t\t\t\tslotIndex = slot.i;\n\n\t\t\t\t\t// if the slot next to currrent slot is free, the y value is allowed\n\t\t\t\t\t// to fall back to the natural position\n\t\t\t\t\ty = slot.y;\n\t\t\t\t\tif ((naturalY > y && slots[slotIndex + 1] !== null) ||\n\t\t\t\t\t\t\t(naturalY < y &&  slots[slotIndex - 1] !== null)) {\n\t\t\t\t\t\ty = naturalY;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\ty = naturalY;\n\t\t\t\t}\n\n\t\t\t\t// get the x - use the natural x position for first and last slot, to prevent the top\n\t\t\t\t// and botton slice connectors from touching each other on either side\n\t\t\t\tx = options.justify ? \n\t\t\t\t\tseriesCenter[0] + (i ? -1 : 1) * (radius + distanceOption) :\n\t\t\t\t\tseries.getX(slotIndex === 0 || slotIndex === slots.length - 1 ? naturalY : y, i);\n\t\t\t\t\n\t\t\t\n\t\t\t\t// Record the placement and visibility\n\t\t\t\tdataLabel._attr = {\n\t\t\t\t\tvisibility: visibility,\n\t\t\t\t\talign: labelPos[6]\n\t\t\t\t};\n\t\t\t\tdataLabel._pos = {\n\t\t\t\t\tx: x + options.x +\n\t\t\t\t\t\t({ left: connectorPadding, right: -connectorPadding }[labelPos[6]] || 0),\n\t\t\t\t\ty: y + options.y - 10 // 10 is for the baseline (label vs text)\n\t\t\t\t};\n\t\t\t\tdataLabel.connX = x;\n\t\t\t\tdataLabel.connY = y;\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t// Detect overflowing data labels\n\t\t\t\tif (this.options.size === null) {\n\t\t\t\t\tdataLabelWidth = dataLabel.width;\n\t\t\t\t\t// Overflow left\n\t\t\t\t\tif (x - dataLabelWidth < connectorPadding) {\n\t\t\t\t\t\toverflow[3] = mathMax(mathRound(dataLabelWidth - x + connectorPadding), overflow[3]);\n\t\t\t\t\t\t\n\t\t\t\t\t// Overflow right\n\t\t\t\t\t} else if (x + dataLabelWidth > plotWidth - connectorPadding) {\n\t\t\t\t\t\toverflow[1] = mathMax(mathRound(x + dataLabelWidth - plotWidth + connectorPadding), overflow[1]);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Overflow top\n\t\t\t\t\tif (y - labelHeight / 2 < 0) {\n\t\t\t\t\t\toverflow[0] = mathMax(mathRound(-y + labelHeight / 2), overflow[0]);\n\t\t\t\t\t\t\n\t\t\t\t\t// Overflow left\n\t\t\t\t\t} else if (y + labelHeight / 2 > plotHeight) {\n\t\t\t\t\t\toverflow[2] = mathMax(mathRound(y + labelHeight / 2 - plotHeight), overflow[2]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} // for each point\n\t\t} // for each half\n\t\t\n\t\t// Do not apply the final placement and draw the connectors until we have verified\n\t\t// that labels are not spilling over. \n\t\tif (arrayMax(overflow) === 0 || this.verifyDataLabelOverflow(overflow)) {\n\t\t\t\n\t\t\t// Place the labels in the final position\n\t\t\tthis.placeDataLabels();\n\t\t\t\n\t\t\t// Draw the connectors\n\t\t\tif (outside && connectorWidth) {\n\t\t\t\teach(this.points, function (point) {\n\t\t\t\t\tconnector = point.connector;\n\t\t\t\t\tlabelPos = point.labelPos;\n\t\t\t\t\tdataLabel = point.dataLabel;\n\t\t\t\t\t\n\t\t\t\t\tif (dataLabel && dataLabel._pos) {\n\t\t\t\t\t\tvisibility = dataLabel._attr.visibility;\n\t\t\t\t\t\tx = dataLabel.connX;\n\t\t\t\t\t\ty = dataLabel.connY;\n\t\t\t\t\t\tconnectorPath = softConnector ? [\n\t\t\t\t\t\t\tM,\n\t\t\t\t\t\t\tx + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label\n\t\t\t\t\t\t\t'C',\n\t\t\t\t\t\t\tx, y, // first break, next to the label\n\t\t\t\t\t\t\t2 * labelPos[2] - labelPos[4], 2 * labelPos[3] - labelPos[5],\n\t\t\t\t\t\t\tlabelPos[2], labelPos[3], // second break\n\t\t\t\t\t\t\tL,\n\t\t\t\t\t\t\tlabelPos[4], labelPos[5] // base\n\t\t\t\t\t\t] : [\n\t\t\t\t\t\t\tM,\n\t\t\t\t\t\t\tx + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label\n\t\t\t\t\t\t\tL,\n\t\t\t\t\t\t\tlabelPos[2], labelPos[3], // second break\n\t\t\t\t\t\t\tL,\n\t\t\t\t\t\t\tlabelPos[4], labelPos[5] // base\n\t\t\t\t\t\t];\n\t\t\n\t\t\t\t\t\tif (connector) {\n\t\t\t\t\t\t\tconnector.animate({ d: connectorPath });\n\t\t\t\t\t\t\tconnector.attr('visibility', visibility);\n\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpoint.connector = connector = series.chart.renderer.path(connectorPath).attr({\n\t\t\t\t\t\t\t\t'stroke-width': connectorWidth,\n\t\t\t\t\t\t\t\tstroke: options.connectorColor || point.color || '#606060',\n\t\t\t\t\t\t\t\tvisibility: visibility\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.add(series.group);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (connector) {\n\t\t\t\t\t\tpoint.connector = connector.destroy();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\t\t\t\n\t\t}\n\t},\n\t\n\t/**\n\t * Verify whether the data labels are allowed to draw, or we should run more translation and data\n\t * label positioning to keep them inside the plot area. Returns true when data labels are ready \n\t * to draw.\n\t */\n\tverifyDataLabelOverflow: function (overflow) {\n\t\t\n\t\tvar center = this.center,\n\t\t\toptions = this.options,\n\t\t\tcenterOption = options.center,\n\t\t\tminSize = options.minSize || 80,\n\t\t\tnewSize = minSize,\n\t\t\tret;\n\t\t\t\n\t\t// Handle horizontal size and center\n\t\tif (centerOption[0] !== null) { // Fixed center\n\t\t\tnewSize = mathMax(center[2] - mathMax(overflow[1], overflow[3]), minSize);\n\t\t\t\n\t\t} else { // Auto center\n\t\t\tnewSize = mathMax(\n\t\t\t\tcenter[2] - overflow[1] - overflow[3], // horizontal overflow\t\t\t\t\t\n\t\t\t\tminSize\n\t\t\t);\n\t\t\tcenter[0] += (overflow[3] - overflow[1]) / 2; // horizontal center\n\t\t}\n\t\t\n\t\t// Handle vertical size and center\n\t\tif (centerOption[1] !== null) { // Fixed center\n\t\t\tnewSize = mathMax(mathMin(newSize, center[2] - mathMax(overflow[0], overflow[2])), minSize);\n\t\t\t\n\t\t} else { // Auto center\n\t\t\tnewSize = mathMax(\n\t\t\t\tmathMin(\n\t\t\t\t\tnewSize,\t\t\n\t\t\t\t\tcenter[2] - overflow[0] - overflow[2] // vertical overflow\n\t\t\t\t),\n\t\t\t\tminSize\n\t\t\t);\n\t\t\tcenter[1] += (overflow[0] - overflow[2]) / 2; // vertical center\n\t\t}\n\t\t\n\t\t// If the size must be decreased, we need to run translate and drawDataLabels again\n\t\tif (newSize < center[2]) {\n\t\t\tcenter[2] = newSize;\n\t\t\tthis.translate(center);\n\t\t\teach(this.points, function (point) {\n\t\t\t\tif (point.dataLabel) {\n\t\t\t\t\tpoint.dataLabel._pos = null; // reset\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.drawDataLabels();\n\t\t\t\n\t\t// Else, return true to indicate that the pie and its labels is within the plot area\n\t\t} else {\n\t\t\tret = true;\n\t\t}\n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Perform the final placement of the data labels after we have verified that they\n\t * fall within the plot area.\n\t */\n\tplaceDataLabels: function () {\n\t\teach(this.points, function (point) {\n\t\t\tvar dataLabel = point.dataLabel,\n\t\t\t\t_pos;\n\t\t\t\n\t\t\tif (dataLabel) {\n\t\t\t\t_pos = dataLabel._pos;\n\t\t\t\tif (_pos) {\n\t\t\t\t\tdataLabel.attr(dataLabel._attr);\t\t\t\n\t\t\t\t\tdataLabel[dataLabel.moved ? 'animate' : 'attr'](_pos);\n\t\t\t\t\tdataLabel.moved = true;\n\t\t\t\t} else if (dataLabel) {\n\t\t\t\t\tdataLabel.attr({ y: -999 });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\t\n\talignDataLabel: noop,\n\n\t/**\n\t * Draw point specific tracker objects. Inherit directly from column series.\n\t */\n\tdrawTracker: ColumnSeries.prototype.drawTracker,\n\n\t/**\n\t * Use a simple symbol from column prototype\n\t */\n\tdrawLegendSymbol: AreaSeries.prototype.drawLegendSymbol,\n\n\t/**\n\t * Pies don't have point marker symbols\n\t */\n\tgetSymbol: noop\n\n};\nPieSeries = extendClass(Series, PieSeries);\nseriesTypes.pie = PieSeries;\n\n\n// global variables\nextend(Highcharts, {\n\t\n\t// Constructors\n\tAxis: Axis,\n\tChart: Chart,\n\tColor: Color,\n\tLegend: Legend,\n\tPointer: Pointer,\n\tPoint: Point,\n\tTick: Tick,\n\tTooltip: Tooltip,\n\tRenderer: Renderer,\n\tSeries: Series,\n\tSVGElement: SVGElement,\n\tSVGRenderer: SVGRenderer,\n\t\n\t// Various\n\tarrayMin: arrayMin,\n\tarrayMax: arrayMax,\n\tcharts: charts,\n\tdateFormat: dateFormat,\n\tformat: format,\n\tpathAnim: pathAnim,\n\tgetOptions: getOptions,\n\thasBidiBug: hasBidiBug,\n\tisTouchDevice: isTouchDevice,\n\tnumberFormat: numberFormat,\n\tseriesTypes: seriesTypes,\n\tsetOptions: setOptions,\n\taddEvent: addEvent,\n\tremoveEvent: removeEvent,\n\tcreateElement: createElement,\n\tdiscardElement: discardElement,\n\tcss: css,\n\teach: each,\n\textend: extend,\n\tmap: map,\n\tmerge: merge,\n\tpick: pick,\n\tsplat: splat,\n\textendClass: extendClass,\n\tpInt: pInt,\n\twrap: wrap,\n\tsvg: hasSVG,\n\tcanvas: useCanVG,\n\tvml: !hasSVG && !useCanVG,\n\tproduct: PRODUCT,\n\tversion: VERSION\n});\n}());\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/annotations.js",
    "content": "(function(i,C){function m(a){return typeof a===\"number\"}function n(a){return a!==D&&a!==null}var D,p,r,s=i.Chart,t=i.extend,z=i.each;r=[\"path\",\"rect\",\"circle\"];p={top:0,left:0,center:0.5,middle:0.5,bottom:1,right:1};var u=C.inArray,A=i.merge,B=function(){this.init.apply(this,arguments)};B.prototype={init:function(a,d){var c=d.shape&&d.shape.type;this.chart=a;var b,f;f={xAxis:0,yAxis:0,title:{style:{},text:\"\",x:0,y:0},shape:{params:{stroke:\"#000000\",fill:\"transparent\",strokeWidth:2}}};b={circle:{params:{x:0,\ny:0}}};if(b[c])f.shape=A(f.shape,b[c]);this.options=A({},f,d)},render:function(a){var d=this.chart,c=this.chart.renderer,b=this.group,f=this.title,e=this.shape,h=this.options,i=h.title,l=h.shape;if(!b)b=this.group=c.g();if(!e&&l&&u(l.type,r)!==-1)e=this.shape=c[h.shape.type](l.params),e.add(b);if(!f&&i)f=this.title=c.label(i),f.add(b);b.add(d.annotations.group);this.linkObjects();a!==!1&&this.redraw()},redraw:function(){var a=this.options,d=this.chart,c=this.group,b=this.title,f=this.shape,e=this.linkedObject,\nh=d.xAxis[a.xAxis],v=d.yAxis[a.yAxis],l=a.width,w=a.height,x=p[a.anchorY],y=p[a.anchorX],j,o,g,q;if(e)j=e instanceof i.Point?\"point\":e instanceof i.Series?\"series\":null,j===\"point\"?(a.xValue=e.x,a.yValue=e.y,o=e.series):j===\"series\"&&(o=e),c.visibility!==o.group.visibility&&c.attr({visibility:o.group.visibility});e=n(a.xValue)?h.toPixels(a.xValue+h.minPointOffset)-h.minPixelPadding:a.x;j=n(a.yValue)?v.toPixels(a.yValue):a.y;if(!isNaN(e)&&!isNaN(j)&&m(e)&&m(j)){b&&(b.attr(a.title),b.css(a.title.style));\nif(f){b=t({},a.shape.params);if(a.units===\"values\"){for(g in b)u(g,[\"width\",\"x\"])>-1?b[g]=h.translate(b[g]):u(g,[\"height\",\"y\"])>-1&&(b[g]=v.translate(b[g]));b.width&&(b.width-=h.toPixels(0)-h.left);b.x&&(b.x+=h.minPixelPadding);if(a.shape.type===\"path\"){g=b.d;o=e;for(var r=j,s=g.length,k=0;k<s;)typeof g[k]===\"number\"&&typeof g[k+1]===\"number\"?(g[k]=h.toPixels(g[k])-o,g[k+1]=v.toPixels(g[k+1])-r,k+=2):k+=1}}a.shape.type===\"circle\"&&(b.x+=b.r,b.y+=b.r);f.attr(b)}c.bBox=null;if(!m(l))q=c.getBBox(),l=\nq.width;if(!m(w))q||(q=c.getBBox()),w=q.height;if(!m(y))y=p.center;if(!m(x))x=p.center;e-=l*y;j-=w*x;d.animation&&n(c.translateX)&&n(c.translateY)?c.animate({translateX:e,translateY:j}):c.translate(e,j)}},destroy:function(){var a=this,d=this.chart.annotations.allItems,c=d.indexOf(a);c>-1&&d.splice(c,1);z([\"title\",\"shape\",\"group\"],function(b){a[b]&&(a[b].destroy(),a[b]=null)});a.group=a.title=a.shape=a.chart=a.options=null},update:function(a,d){t(this.options,a);this.linkObjects();this.render(d)},\nlinkObjects:function(){var a=this.chart,d=this.linkedObject,c=d&&(d.id||d.options.id),b=this.options.linkedTo;if(n(b)){if(!n(d)||b!==c)this.linkedObject=a.get(b)}else this.linkedObject=null}};t(s.prototype,{annotations:{add:function(a,d){var c=this.allItems,b=this.chart,f,e;Object.prototype.toString.call(a)===\"[object Array]\"||(a=[a]);for(e=a.length;e--;)f=new B(b,a[e]),c.push(f),f.render(d)},redraw:function(){z(this.allItems,function(a){a.redraw()})}}});s.prototype.callbacks.push(function(a){var d=\na.options.annotations,c;c=a.renderer.g(\"annotations\");c.attr({zIndex:7});c.add();a.annotations.allItems=[];a.annotations.chart=a;a.annotations.group=c;Object.prototype.toString.call(d)===\"[object Array]\"&&d.length>0&&a.annotations.add(a.options.annotations);i.addEvent(a,\"redraw\",function(){a.annotations.redraw()})})})(Highcharts,HighchartsAdapter);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/annotations.src.js",
    "content": "(function (Highcharts, HighchartsAdapter) {\n\nvar UNDEFINED,\n\tALIGN_FACTOR,\n\tALLOWED_SHAPES,\n\tChart = Highcharts.Chart,\n\textend = Highcharts.extend,\n\teach = Highcharts.each;\n\nALLOWED_SHAPES = [\"path\", \"rect\", \"circle\"];\n\nALIGN_FACTOR = {\n\ttop: 0,\n\tleft: 0,\n\tcenter: 0.5,\n\tmiddle: 0.5,\n\tbottom: 1,\n\tright: 1\n};\n\n\n// Highcharts helper methods\nvar inArray = HighchartsAdapter.inArray,\n\tmerge = Highcharts.merge;\n\nfunction defaultOptions(shapeType) {\n\tvar shapeOptions,\n\t\toptions;\n\n\toptions = {\n\t\txAxis: 0,\n\t\tyAxis: 0,\n\t\ttitle: {\n\t\t\tstyle: {},\n\t\t\ttext: \"\",\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\tshape: {\n\t\t\tparams: {\n\t\t\t\tstroke: \"#000000\",\n\t\t\t\tfill: \"transparent\",\n\t\t\t\tstrokeWidth: 2\n\t\t\t}\n\t\t}\n\t};\n\n\tshapeOptions = {\n\t\tcircle: {\n\t\t\tparams: {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0\n\t\t\t}\n\t\t}\n\t};\n\n\tif (shapeOptions[shapeType]) {\n\t\toptions.shape = merge(options.shape, shapeOptions[shapeType]);\n\t}\n\n\treturn options;\n}\n\nfunction isArray(obj) {\n\treturn Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction isNumber(n) {\n\treturn typeof n === 'number';\n}\n\nfunction defined(obj) {\n\treturn obj !== UNDEFINED && obj !== null;\n}\n\nfunction translatePath(d, xAxis, yAxis, xOffset, yOffset) {\n\tvar len = d.length,\n\t\ti = 0;\n\n\twhile (i < len) {\n\t\tif (typeof d[i] === 'number' && typeof d[i + 1] === 'number') {\n\t\t\td[i] = xAxis.toPixels(d[i]) - xOffset;\n\t\t\td[i + 1] = yAxis.toPixels(d[i + 1]) - yOffset;\n\t\t\ti += 2;\n\t\t} else {\n\t\t\ti += 1;\n\t\t}\n\t}\n\n\treturn d;\n}\n\n\n// Define annotation prototype\nvar Annotation = function () {\n\tthis.init.apply(this, arguments);\n};\nAnnotation.prototype = {\n\t/* \n\t * Initialize the annotation\n\t */\n\tinit: function (chart, options) {\n\t\tvar shapeType = options.shape && options.shape.type;\n\n\t\tthis.chart = chart;\n\t\tthis.options = merge({}, defaultOptions(shapeType), options);\n\t},\n\n\t/*\n\t * Render the annotation\n\t */\n\trender: function (redraw) {\n\t\tvar annotation = this,\n\t\t\tchart = this.chart,\n\t\t\trenderer = annotation.chart.renderer,\n\t\t\tgroup = annotation.group,\n\t\t\ttitle = annotation.title,\n\t\t\tshape = annotation.shape,\n\t\t\toptions = annotation.options,\n\t\t\ttitleOptions = options.title,\n\t\t\tshapeOptions = options.shape;\n\n\t\tif (!group) {\n\t\t\tgroup = annotation.group = renderer.g();\n\t\t}\n\n\n\t\tif (!shape && shapeOptions && inArray(shapeOptions.type, ALLOWED_SHAPES) !== -1) {\n\t\t\tshape = annotation.shape = renderer[options.shape.type](shapeOptions.params);\n\t\t\tshape.add(group);\n\t\t}\n\n\t\tif (!title && titleOptions) {\n\t\t\ttitle = annotation.title = renderer.label(titleOptions);\n\t\t\ttitle.add(group);\n\t\t}\n\n\t\tgroup.add(chart.annotations.group);\n\n\t\t// link annotations to point or series\n\t\tannotation.linkObjects();\n\n\t\tif (redraw !== false) {\n\t\t\tannotation.redraw();\n\t\t}\n\t},\n\n\t/*\n\t * Redraw the annotation title or shape after options update\n\t */\n\tredraw: function () {\n\t\tvar options = this.options,\n\t\t\tchart = this.chart,\n\t\t\tgroup = this.group,\n\t\t\ttitle = this.title,\n\t\t\tshape = this.shape,\n\t\t\tlinkedTo = this.linkedObject,\n\t\t\txAxis = chart.xAxis[options.xAxis],\n\t\t\tyAxis = chart.yAxis[options.yAxis],\n\t\t\twidth = options.width,\n\t\t\theight = options.height,\n\t\t\tanchorY = ALIGN_FACTOR[options.anchorY],\n\t\t\tanchorX = ALIGN_FACTOR[options.anchorX],\n\t\t\tresetBBox = false,\n\t\t\tshapeParams,\n\t\t\tlinkType,\n\t\t\tseries,\n\t\t\tparam,\n\t\t\tbbox,\n\t\t\tx,\n\t\t\ty;\n\n\t\tif (linkedTo) {\n\t\t\tlinkType = (linkedTo instanceof Highcharts.Point) ? 'point' :\n\t\t\t\t\t\t(linkedTo instanceof Highcharts.Series) ? 'series' : null;\n\n\t\t\tif (linkType === 'point') {\n\t\t\t\toptions.xValue = linkedTo.x;\n\t\t\t\toptions.yValue = linkedTo.y;\n\t\t\t\tseries = linkedTo.series;\n\t\t\t} else if (linkType === 'series') {\n\t\t\t\tseries = linkedTo;\n\t\t\t}\n\n\t\t\tif (group.visibility !== series.group.visibility) {\n\t\t\t\tgroup.attr({\n\t\t\t\t\tvisibility: series.group.visibility\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\n\t\t// Based on given options find annotation pixel position\n\t\tx = (defined(options.xValue) ? xAxis.toPixels(options.xValue + xAxis.minPointOffset) - xAxis.minPixelPadding : options.x);\n\t\ty = defined(options.yValue) ? yAxis.toPixels(options.yValue) : options.y;\n\n\t\tif (isNaN(x) || isNaN(y) || !isNumber(x) || !isNumber(y)) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tif (title) {\n\t\t\ttitle.attr(options.title);\n\t\t\ttitle.css(options.title.style);\n\t\t\tresetBBox = true;\n\t\t}\n\n\t\tif (shape) {\n\t\t\tshapeParams = extend({}, options.shape.params);\n\n\t\t\tif (options.units === 'values') {\n\t\t\t\tfor (param in shapeParams) {\n\t\t\t\t\tif (inArray(param, ['width', 'x']) > -1) {\n\t\t\t\t\t\tshapeParams[param] = xAxis.translate(shapeParams[param]);\n\t\t\t\t\t} else if (inArray(param, ['height', 'y']) > -1) {\n\t\t\t\t\t\tshapeParams[param] = yAxis.translate(shapeParams[param]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (shapeParams.width) {\n\t\t\t\t\tshapeParams.width -= xAxis.toPixels(0) - xAxis.left;\n\t\t\t\t}\n\n\t\t\t\tif (shapeParams.x) {\n\t\t\t\t\tshapeParams.x += xAxis.minPixelPadding;\n\t\t\t\t}\n\n\t\t\t\tif (options.shape.type === 'path') {\n\t\t\t\t\ttranslatePath(shapeParams.d, xAxis, yAxis, x, y);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// move the center of the circle to shape x/y\n\t\t\tif (options.shape.type === 'circle') {\n\t\t\t\tshapeParams.x += shapeParams.r;\n\t\t\t\tshapeParams.y += shapeParams.r;\n\t\t\t}\n\n\t\t\tresetBBox = true;\n\t\t\tshape.attr(shapeParams);\n\t\t}\n\n\t\tgroup.bBox = null;\n\n\t\t// If annotation width or height is not defined in options use bounding box size\n\t\tif (!isNumber(width)) {\n\t\t\tbbox = group.getBBox();\n\t\t\twidth = bbox.width;\n\t\t}\n\n\t\tif (!isNumber(height)) {\n\t\t\t// get bbox only if it wasn't set before\n\t\t\tif (!bbox) {\n\t\t\t\tbbox = group.getBBox();\n\t\t\t}\n\n\t\t\theight = bbox.height;\n\t\t}\n\n\t\t// Calculate anchor point\n\t\tif (!isNumber(anchorX)) {\n\t\t\tanchorX = ALIGN_FACTOR.center;\n\t\t}\n\n\t\tif (!isNumber(anchorY)) {\n\t\t\tanchorY = ALIGN_FACTOR.center;\n\t\t}\n\n\t\t// Translate group according to its dimension and anchor point\n\t\tx = x - width * anchorX;\n\t\ty = y - height * anchorY;\n\n\t\tif (chart.animation && defined(group.translateX) && defined(group.translateY)) {\n\t\t\tgroup.animate({\n\t\t\t\ttranslateX: x,\n\t\t\t\ttranslateY: y\n\t\t\t});\n\t\t} else {\n\t\t\tgroup.translate(x, y);\n\t\t}\n\t},\n\n\t/*\n\t * Destroy the annotation\n\t */\n\tdestroy: function () {\n\t\tvar annotation = this,\n\t\t\tchart = this.chart,\n\t\t\tallItems = chart.annotations.allItems,\n\t\t\tindex = allItems.indexOf(annotation);\n\n\t\tif (index > -1) {\n\t\t\tallItems.splice(index, 1);\n\t\t}\n\n\t\teach(['title', 'shape', 'group'], function (element) {\n\t\t\tif (annotation[element]) {\n\t\t\t\tannotation[element].destroy();\n\t\t\t\tannotation[element] = null;\n\t\t\t}\n\t\t});\n\n\t\tannotation.group = annotation.title = annotation.shape = annotation.chart = annotation.options = null;\n\t},\n\n\t/*\n\t * Update the annotation with a given options\n\t */\n\tupdate: function (options, redraw) {\n\t\textend(this.options, options);\n\n\t\t// update link to point or series\n\t\tthis.linkObjects();\n\n\t\tthis.render(redraw);\n\t},\n\n\tlinkObjects: function () {\n\t\tvar annotation = this,\n\t\t\tchart = annotation.chart,\n\t\t\tlinkedTo = annotation.linkedObject,\n\t\t\tlinkedId = linkedTo && (linkedTo.id || linkedTo.options.id),\n\t\t\toptions = annotation.options,\n\t\t\tid = options.linkedTo;\n\n\t\tif (!defined(id)) {\n\t\t\tannotation.linkedObject = null;\n\t\t} else if (!defined(linkedTo) || id !== linkedId) {\n\t\t\tannotation.linkedObject = chart.get(id);\n\t\t}\n\t}\n};\n\n\n// Add annotations methods to chart prototype\nextend(Chart.prototype, {\n\tannotations: {\n\t\t/*\n\t\t * Unified method for adding annotations to the chart\n\t\t */\n\t\tadd: function (options, redraw) {\n\t\t\tvar annotations = this.allItems,\n\t\t\t\tchart = this.chart,\n\t\t\t\titem,\n\t\t\t\tlen;\n\n\t\t\tif (!isArray(options)) {\n\t\t\t\toptions = [options];\n\t\t\t}\n\n\t\t\tlen = options.length;\n\n\t\t\twhile (len--) {\n\t\t\t\titem = new Annotation(chart, options[len]);\n\t\t\t\tannotations.push(item);\n\t\t\t\titem.render(redraw);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Redraw all annotations, method used in chart events\n\t\t */\n\t\tredraw: function () {\n\t\t\teach(this.allItems, function (annotation) {\n\t\t\t\tannotation.redraw();\n\t\t\t});\n\t\t}\n\t}\n});\n\n\n// Initialize on chart load\nChart.prototype.callbacks.push(function (chart) {\n\tvar options = chart.options.annotations,\n\t\tgroup;\n\n\tgroup = chart.renderer.g(\"annotations\");\n\tgroup.attr({\n\t\tzIndex: 7\n\t});\n\tgroup.add();\n\n\t// initialize empty array for annotations\n\tchart.annotations.allItems = [];\n\n\t// link chart object to annotations\n\tchart.annotations.chart = chart;\n\n\t// link annotations group element to the chart\n\tchart.annotations.group = group;\n\n\tif (isArray(options) && options.length > 0) {\n\t\tchart.annotations.add(chart.options.annotations);\n\t}\n\n\t// update annotations after chart redraw\n\tHighcharts.addEvent(chart, 'redraw', function () {\n\t\tchart.annotations.redraw();\n\t});\n});\n}(Highcharts, HighchartsAdapter));\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/canvas-tools.js",
    "content": "/*\n A class to parse color values\n @author Stoyan Stefanov <sstoo@gmail.com>\n @link   http://www.phpied.com/rgb-color-parser-in-javascript/\n Use it if you like it\n\n canvg.js - Javascript SVG parser and renderer on Canvas\n MIT Licensed \n Gabe Lerner (gabelerner@gmail.com)\n http://code.google.com/p/canvg/\n\n Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/\n\n Highcharts JS v3.0.6 (2013-10-04)\n CanVGRenderer Extension module\n\n (c) 2011-2012 Torstein Hønsi, Erik Olsson\n\n License: www.highcharts.com/license\n*/\nfunction RGBColor(m){this.ok=!1;m.charAt(0)==\"#\"&&(m=m.substr(1,6));var m=m.replace(/ /g,\"\"),m=m.toLowerCase(),a={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",\ndarkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",\ngainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",\nlightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",\noldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",\nslategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"},c;for(c in a)m==c&&(m=a[c]);var d=[{re:/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(b){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}},{re:/^(\\w{2})(\\w{2})(\\w{2})$/,\nexample:[\"#00ff00\",\"336699\"],process:function(b){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}},{re:/^(\\w{1})(\\w{1})(\\w{1})$/,example:[\"#fb0\",\"f0f\"],process:function(b){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}}];for(c=0;c<d.length;c++){var b=d[c].process,k=d[c].re.exec(m);if(k)channels=b(k),this.r=channels[0],this.g=channels[1],this.b=channels[2],this.ok=!0}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r;this.g=this.g<0||isNaN(this.g)?0:\nthis.g>255?255:this.g;this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b;this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"};this.toHex=function(){var b=this.r.toString(16),a=this.g.toString(16),d=this.b.toString(16);b.length==1&&(b=\"0\"+b);a.length==1&&(a=\"0\"+a);d.length==1&&(d=\"0\"+d);return\"#\"+b+a+d};this.getHelpXML=function(){for(var b=[],k=0;k<d.length;k++)for(var c=d[k].example,j=0;j<c.length;j++)b[b.length]=c[j];for(var h in a)b[b.length]=h;c=document.createElement(\"ul\");\nc.setAttribute(\"id\",\"rgbcolor-examples\");for(k=0;k<b.length;k++)try{var l=document.createElement(\"li\"),o=new RGBColor(b[k]),n=document.createElement(\"div\");n.style.cssText=\"margin: 3px; border: 1px solid black; background:\"+o.toHex()+\"; color:\"+o.toHex();n.appendChild(document.createTextNode(\"test\"));var q=document.createTextNode(\" \"+b[k]+\" -> \"+o.toRGB()+\" -> \"+o.toHex());l.appendChild(n);l.appendChild(q);c.appendChild(l)}catch(p){}return c}}\nif(!window.console)window.console={},window.console.log=function(){},window.console.dir=function(){};if(!Array.prototype.indexOf)Array.prototype.indexOf=function(m){for(var a=0;a<this.length;a++)if(this[a]==m)return a;return-1};\n(function(){function m(){var a={FRAMERATE:30,MAX_VIRTUAL_PIXELS:3E4};a.init=function(c){a.Definitions={};a.Styles={};a.Animations=[];a.Images=[];a.ctx=c;a.ViewPort=new function(){this.viewPorts=[];this.Clear=function(){this.viewPorts=[]};this.SetCurrent=function(a,b){this.viewPorts.push({width:a,height:b})};this.RemoveCurrent=function(){this.viewPorts.pop()};this.Current=function(){return this.viewPorts[this.viewPorts.length-1]};this.width=function(){return this.Current().width};this.height=function(){return this.Current().height};\nthis.ComputeSize=function(a){return a!=null&&typeof a==\"number\"?a:a==\"x\"?this.width():a==\"y\"?this.height():Math.sqrt(Math.pow(this.width(),2)+Math.pow(this.height(),2))/Math.sqrt(2)}}};a.init();a.ImagesLoaded=function(){for(var c=0;c<a.Images.length;c++)if(!a.Images[c].loaded)return!1;return!0};a.trim=function(a){return a.replace(/^\\s+|\\s+$/g,\"\")};a.compressSpaces=function(a){return a.replace(/[\\s\\r\\t\\n]+/gm,\" \")};a.ajax=function(a){var d;return(d=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject(\"Microsoft.XMLHTTP\"))?\n(d.open(\"GET\",a,!1),d.send(null),d.responseText):null};a.parseXml=function(a){if(window.DOMParser)return(new DOMParser).parseFromString(a,\"text/xml\");else{var a=a.replace(/<!DOCTYPE svg[^>]*>/,\"\"),d=new ActiveXObject(\"Microsoft.XMLDOM\");d.async=\"false\";d.loadXML(a);return d}};a.Property=function(c,d){this.name=c;this.value=d;this.hasValue=function(){return this.value!=null&&this.value!==\"\"};this.numValue=function(){if(!this.hasValue())return 0;var b=parseFloat(this.value);(this.value+\"\").match(/%$/)&&\n(b/=100);return b};this.valueOrDefault=function(b){return this.hasValue()?this.value:b};this.numValueOrDefault=function(b){return this.hasValue()?this.numValue():b};var b=this;this.Color={addOpacity:function(d){var c=b.value;if(d!=null&&d!=\"\"){var f=new RGBColor(b.value);f.ok&&(c=\"rgba(\"+f.r+\", \"+f.g+\", \"+f.b+\", \"+d+\")\")}return new a.Property(b.name,c)}};this.Definition={getDefinition:function(){var d=b.value.replace(/^(url\\()?#([^\\)]+)\\)?$/,\"$2\");return a.Definitions[d]},isUrl:function(){return b.value.indexOf(\"url(\")==\n0},getFillStyle:function(b){var d=this.getDefinition();return d!=null&&d.createGradient?d.createGradient(a.ctx,b):d!=null&&d.createPattern?d.createPattern(a.ctx,b):null}};this.Length={DPI:function(){return 96},EM:function(b){var d=12,c=new a.Property(\"fontSize\",a.Font.Parse(a.ctx.font).fontSize);c.hasValue()&&(d=c.Length.toPixels(b));return d},toPixels:function(d){if(!b.hasValue())return 0;var c=b.value+\"\";return c.match(/em$/)?b.numValue()*this.EM(d):c.match(/ex$/)?b.numValue()*this.EM(d)/2:c.match(/px$/)?\nb.numValue():c.match(/pt$/)?b.numValue()*1.25:c.match(/pc$/)?b.numValue()*15:c.match(/cm$/)?b.numValue()*this.DPI(d)/2.54:c.match(/mm$/)?b.numValue()*this.DPI(d)/25.4:c.match(/in$/)?b.numValue()*this.DPI(d):c.match(/%$/)?b.numValue()*a.ViewPort.ComputeSize(d):b.numValue()}};this.Time={toMilliseconds:function(){if(!b.hasValue())return 0;var a=b.value+\"\";if(a.match(/s$/))return b.numValue()*1E3;a.match(/ms$/);return b.numValue()}};this.Angle={toRadians:function(){if(!b.hasValue())return 0;var a=b.value+\n\"\";return a.match(/deg$/)?b.numValue()*(Math.PI/180):a.match(/grad$/)?b.numValue()*(Math.PI/200):a.match(/rad$/)?b.numValue():b.numValue()*(Math.PI/180)}}};a.Font=new function(){this.Styles=[\"normal\",\"italic\",\"oblique\",\"inherit\"];this.Variants=[\"normal\",\"small-caps\",\"inherit\"];this.Weights=\"normal,bold,bolder,lighter,100,200,300,400,500,600,700,800,900,inherit\".split(\",\");this.CreateFont=function(d,b,c,e,f,g){g=g!=null?this.Parse(g):this.CreateFont(\"\",\"\",\"\",\"\",\"\",a.ctx.font);return{fontFamily:f||\ng.fontFamily,fontSize:e||g.fontSize,fontStyle:d||g.fontStyle,fontWeight:c||g.fontWeight,fontVariant:b||g.fontVariant,toString:function(){return[this.fontStyle,this.fontVariant,this.fontWeight,this.fontSize,this.fontFamily].join(\" \")}}};var c=this;this.Parse=function(d){for(var b={},d=a.trim(a.compressSpaces(d||\"\")).split(\" \"),k=!1,e=!1,f=!1,g=!1,j=\"\",h=0;h<d.length;h++)if(!e&&c.Styles.indexOf(d[h])!=-1){if(d[h]!=\"inherit\")b.fontStyle=d[h];e=!0}else if(!g&&c.Variants.indexOf(d[h])!=-1){if(d[h]!=\"inherit\")b.fontVariant=\nd[h];e=g=!0}else if(!f&&c.Weights.indexOf(d[h])!=-1){if(d[h]!=\"inherit\")b.fontWeight=d[h];e=g=f=!0}else if(k)d[h]!=\"inherit\"&&(j+=d[h]);else{if(d[h]!=\"inherit\")b.fontSize=d[h].split(\"/\")[0];e=g=f=k=!0}if(j!=\"\")b.fontFamily=j;return b}};a.ToNumberArray=function(c){for(var c=a.trim(a.compressSpaces((c||\"\").replace(/,/g,\" \"))).split(\" \"),d=0;d<c.length;d++)c[d]=parseFloat(c[d]);return c};a.Point=function(a,d){this.x=a;this.y=d;this.angleTo=function(b){return Math.atan2(b.y-this.y,b.x-this.x)};this.applyTransform=\nfunction(b){var a=this.x*b[1]+this.y*b[3]+b[5];this.x=this.x*b[0]+this.y*b[2]+b[4];this.y=a}};a.CreatePoint=function(c){c=a.ToNumberArray(c);return new a.Point(c[0],c[1])};a.CreatePath=function(c){for(var c=a.ToNumberArray(c),d=[],b=0;b<c.length;b+=2)d.push(new a.Point(c[b],c[b+1]));return d};a.BoundingBox=function(a,d,b,k){this.y2=this.x2=this.y1=this.x1=Number.NaN;this.x=function(){return this.x1};this.y=function(){return this.y1};this.width=function(){return this.x2-this.x1};this.height=function(){return this.y2-\nthis.y1};this.addPoint=function(b,a){if(b!=null){if(isNaN(this.x1)||isNaN(this.x2))this.x2=this.x1=b;if(b<this.x1)this.x1=b;if(b>this.x2)this.x2=b}if(a!=null){if(isNaN(this.y1)||isNaN(this.y2))this.y2=this.y1=a;if(a<this.y1)this.y1=a;if(a>this.y2)this.y2=a}};this.addX=function(b){this.addPoint(b,null)};this.addY=function(b){this.addPoint(null,b)};this.addBoundingBox=function(b){this.addPoint(b.x1,b.y1);this.addPoint(b.x2,b.y2)};this.addQuadraticCurve=function(b,a,d,c,k,l){d=b+2/3*(d-b);c=a+2/3*(c-\na);this.addBezierCurve(b,a,d,d+1/3*(k-b),c,c+1/3*(l-a),k,l)};this.addBezierCurve=function(b,a,d,c,k,l,o,n){var q=[b,a],p=[d,c],t=[k,l],m=[o,n];this.addPoint(q[0],q[1]);this.addPoint(m[0],m[1]);for(i=0;i<=1;i++)b=function(b){return Math.pow(1-b,3)*q[i]+3*Math.pow(1-b,2)*b*p[i]+3*(1-b)*Math.pow(b,2)*t[i]+Math.pow(b,3)*m[i]},a=6*q[i]-12*p[i]+6*t[i],d=-3*q[i]+9*p[i]-9*t[i]+3*m[i],c=3*p[i]-3*q[i],d==0?a!=0&&(a=-c/a,0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))):(c=Math.pow(a,2)-4*c*d,c<0||(k=\n(-a+Math.sqrt(c))/(2*d),0<k&&k<1&&(i==0&&this.addX(b(k)),i==1&&this.addY(b(k))),a=(-a-Math.sqrt(c))/(2*d),0<a&&a<1&&(i==0&&this.addX(b(a)),i==1&&this.addY(b(a)))))};this.isPointInBox=function(b,a){return this.x1<=b&&b<=this.x2&&this.y1<=a&&a<=this.y2};this.addPoint(a,d);this.addPoint(b,k)};a.Transform=function(c){var d=this;this.Type={};this.Type.translate=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.translate(this.p.x||0,this.p.y||0)};this.applyToPoint=function(b){b.applyTransform([1,\n0,0,1,this.p.x||0,this.p.y||0])}};this.Type.rotate=function(b){b=a.ToNumberArray(b);this.angle=new a.Property(\"angle\",b[0]);this.cx=b[1]||0;this.cy=b[2]||0;this.apply=function(b){b.translate(this.cx,this.cy);b.rotate(this.angle.Angle.toRadians());b.translate(-this.cx,-this.cy)};this.applyToPoint=function(b){var a=this.angle.Angle.toRadians();b.applyTransform([1,0,0,1,this.p.x||0,this.p.y||0]);b.applyTransform([Math.cos(a),Math.sin(a),-Math.sin(a),Math.cos(a),0,0]);b.applyTransform([1,0,0,1,-this.p.x||\n0,-this.p.y||0])}};this.Type.scale=function(b){this.p=a.CreatePoint(b);this.apply=function(b){b.scale(this.p.x||1,this.p.y||this.p.x||1)};this.applyToPoint=function(b){b.applyTransform([this.p.x||0,0,0,this.p.y||0,0,0])}};this.Type.matrix=function(b){this.m=a.ToNumberArray(b);this.apply=function(b){b.transform(this.m[0],this.m[1],this.m[2],this.m[3],this.m[4],this.m[5])};this.applyToPoint=function(b){b.applyTransform(this.m)}};this.Type.SkewBase=function(b){this.base=d.Type.matrix;this.base(b);this.angle=\nnew a.Property(\"angle\",b)};this.Type.SkewBase.prototype=new this.Type.matrix;this.Type.skewX=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,0,Math.tan(this.angle.Angle.toRadians()),1,0,0]};this.Type.skewX.prototype=new this.Type.SkewBase;this.Type.skewY=function(b){this.base=d.Type.SkewBase;this.base(b);this.m=[1,Math.tan(this.angle.Angle.toRadians()),0,1,0,0]};this.Type.skewY.prototype=new this.Type.SkewBase;this.transforms=[];this.apply=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].apply(b)};\nthis.applyToPoint=function(b){for(var a=0;a<this.transforms.length;a++)this.transforms[a].applyToPoint(b)};for(var c=a.trim(a.compressSpaces(c)).split(/\\s(?=[a-z])/),b=0;b<c.length;b++){var k=c[b].split(\"(\")[0],e=c[b].split(\"(\")[1].replace(\")\",\"\");this.transforms.push(new this.Type[k](e))}};a.AspectRatio=function(c,d,b,k,e,f,g,j,h,l){var d=a.compressSpaces(d),d=d.replace(/^defer\\s/,\"\"),o=d.split(\" \")[0]||\"xMidYMid\",d=d.split(\" \")[1]||\"meet\",n=b/k,q=e/f,p=Math.min(n,q),m=Math.max(n,q);d==\"meet\"&&(k*=\np,f*=p);d==\"slice\"&&(k*=m,f*=m);h=new a.Property(\"refX\",h);l=new a.Property(\"refY\",l);h.hasValue()&&l.hasValue()?c.translate(-p*h.Length.toPixels(\"x\"),-p*l.Length.toPixels(\"y\")):(o.match(/^xMid/)&&(d==\"meet\"&&p==q||d==\"slice\"&&m==q)&&c.translate(b/2-k/2,0),o.match(/YMid$/)&&(d==\"meet\"&&p==n||d==\"slice\"&&m==n)&&c.translate(0,e/2-f/2),o.match(/^xMax/)&&(d==\"meet\"&&p==q||d==\"slice\"&&m==q)&&c.translate(b-k,0),o.match(/YMax$/)&&(d==\"meet\"&&p==n||d==\"slice\"&&m==n)&&c.translate(0,e-f));o==\"none\"?c.scale(n,\nq):d==\"meet\"?c.scale(p,p):d==\"slice\"&&c.scale(m,m);c.translate(g==null?0:-g,j==null?0:-j)};a.Element={};a.Element.ElementBase=function(c){this.attributes={};this.styles={};this.children=[];this.attribute=function(b,d){var c=this.attributes[b];if(c!=null)return c;c=new a.Property(b,\"\");d==!0&&(this.attributes[b]=c);return c};this.style=function(b,d){var c=this.styles[b];if(c!=null)return c;c=this.attribute(b);if(c!=null&&c.hasValue())return c;c=this.parent;if(c!=null&&(c=c.style(b),c!=null&&c.hasValue()))return c;\nc=new a.Property(b,\"\");d==!0&&(this.styles[b]=c);return c};this.render=function(b){if(this.style(\"display\").value!=\"none\"&&this.attribute(\"visibility\").value!=\"hidden\"){b.save();this.setContext(b);if(this.attribute(\"mask\").hasValue()){var a=this.attribute(\"mask\").Definition.getDefinition();a!=null&&a.apply(b,this)}else this.style(\"filter\").hasValue()?(a=this.style(\"filter\").Definition.getDefinition(),a!=null&&a.apply(b,this)):this.renderChildren(b);this.clearContext(b);b.restore()}};this.setContext=\nfunction(){};this.clearContext=function(){};this.renderChildren=function(b){for(var a=0;a<this.children.length;a++)this.children[a].render(b)};this.addChild=function(b,d){var c=b;d&&(c=a.CreateElement(b));c.parent=this;this.children.push(c)};if(c!=null&&c.nodeType==1){for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1&&this.addChild(b,!0)}for(d=0;d<c.attributes.length;d++)b=c.attributes[d],this.attributes[b.nodeName]=new a.Property(b.nodeName,b.nodeValue);b=a.Styles[c.nodeName];\nif(b!=null)for(var k in b)this.styles[k]=b[k];if(this.attribute(\"class\").hasValue())for(var d=a.compressSpaces(this.attribute(\"class\").value).split(\" \"),e=0;e<d.length;e++){b=a.Styles[\".\"+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k];b=a.Styles[c.nodeName+\".\"+d[e]];if(b!=null)for(k in b)this.styles[k]=b[k]}if(this.attribute(\"style\").hasValue()){b=this.attribute(\"style\").value.split(\";\");for(d=0;d<b.length;d++)a.trim(b[d])!=\"\"&&(c=b[d].split(\":\"),k=a.trim(c[0]),c=a.trim(c[1]),this.styles[k]=new a.Property(k,\nc))}this.attribute(\"id\").hasValue()&&a.Definitions[this.attribute(\"id\").value]==null&&(a.Definitions[this.attribute(\"id\").value]=this)}};a.Element.RenderedElementBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.setContext=function(d){if(this.style(\"fill\").Definition.isUrl()){var b=this.style(\"fill\").Definition.getFillStyle(this);if(b!=null)d.fillStyle=b}else if(this.style(\"fill\").hasValue())b=this.style(\"fill\"),this.style(\"fill-opacity\").hasValue()&&(b=b.Color.addOpacity(this.style(\"fill-opacity\").value)),\nd.fillStyle=b.value==\"none\"?\"rgba(0,0,0,0)\":b.value;if(this.style(\"stroke\").Definition.isUrl()){if(b=this.style(\"stroke\").Definition.getFillStyle(this),b!=null)d.strokeStyle=b}else if(this.style(\"stroke\").hasValue())b=this.style(\"stroke\"),this.style(\"stroke-opacity\").hasValue()&&(b=b.Color.addOpacity(this.style(\"stroke-opacity\").value)),d.strokeStyle=b.value==\"none\"?\"rgba(0,0,0,0)\":b.value;if(this.style(\"stroke-width\").hasValue())d.lineWidth=this.style(\"stroke-width\").Length.toPixels();if(this.style(\"stroke-linecap\").hasValue())d.lineCap=\nthis.style(\"stroke-linecap\").value;if(this.style(\"stroke-linejoin\").hasValue())d.lineJoin=this.style(\"stroke-linejoin\").value;if(this.style(\"stroke-miterlimit\").hasValue())d.miterLimit=this.style(\"stroke-miterlimit\").value;if(typeof d.font!=\"undefined\")d.font=a.Font.CreateFont(this.style(\"font-style\").value,this.style(\"font-variant\").value,this.style(\"font-weight\").value,this.style(\"font-size\").hasValue()?this.style(\"font-size\").Length.toPixels()+\"px\":\"\",this.style(\"font-family\").value).toString();\nthis.attribute(\"transform\").hasValue()&&(new a.Transform(this.attribute(\"transform\").value)).apply(d);this.attribute(\"clip-path\").hasValue()&&(b=this.attribute(\"clip-path\").Definition.getDefinition(),b!=null&&b.apply(d));if(this.style(\"opacity\").hasValue())d.globalAlpha=this.style(\"opacity\").numValue()}};a.Element.RenderedElementBase.prototype=new a.Element.ElementBase;a.Element.PathElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.path=function(d){d!=null&&d.beginPath();\nreturn new a.BoundingBox};this.renderChildren=function(d){this.path(d);a.Mouse.checkPath(this,d);d.fillStyle!=\"\"&&d.fill();d.strokeStyle!=\"\"&&d.stroke();var b=this.getMarkers();if(b!=null){if(this.style(\"marker-start\").Definition.isUrl()){var c=this.style(\"marker-start\").Definition.getDefinition();c.render(d,b[0][0],b[0][1])}if(this.style(\"marker-mid\").Definition.isUrl())for(var c=this.style(\"marker-mid\").Definition.getDefinition(),e=1;e<b.length-1;e++)c.render(d,b[e][0],b[e][1]);this.style(\"marker-end\").Definition.isUrl()&&\n(c=this.style(\"marker-end\").Definition.getDefinition(),c.render(d,b[b.length-1][0],b[b.length-1][1]))}};this.getBoundingBox=function(){return this.path()};this.getMarkers=function(){return null}};a.Element.PathElementBase.prototype=new a.Element.RenderedElementBase;a.Element.svg=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseClearContext=this.clearContext;this.clearContext=function(d){this.baseClearContext(d);a.ViewPort.RemoveCurrent()};this.baseSetContext=this.setContext;\nthis.setContext=function(d){d.strokeStyle=\"rgba(0,0,0,0)\";d.lineCap=\"butt\";d.lineJoin=\"miter\";d.miterLimit=4;this.baseSetContext(d);this.attribute(\"x\").hasValue()&&this.attribute(\"y\").hasValue()&&d.translate(this.attribute(\"x\").Length.toPixels(\"x\"),this.attribute(\"y\").Length.toPixels(\"y\"));var b=a.ViewPort.width(),c=a.ViewPort.height();if(typeof this.root==\"undefined\"&&this.attribute(\"width\").hasValue()&&this.attribute(\"height\").hasValue()){var b=this.attribute(\"width\").Length.toPixels(\"x\"),c=this.attribute(\"height\").Length.toPixels(\"y\"),\ne=0,f=0;this.attribute(\"refX\").hasValue()&&this.attribute(\"refY\").hasValue()&&(e=-this.attribute(\"refX\").Length.toPixels(\"x\"),f=-this.attribute(\"refY\").Length.toPixels(\"y\"));d.beginPath();d.moveTo(e,f);d.lineTo(b,f);d.lineTo(b,c);d.lineTo(e,c);d.closePath();d.clip()}a.ViewPort.SetCurrent(b,c);if(this.attribute(\"viewBox\").hasValue()){var e=a.ToNumberArray(this.attribute(\"viewBox\").value),f=e[0],g=e[1],b=e[2],c=e[3];a.AspectRatio(d,this.attribute(\"preserveAspectRatio\").value,a.ViewPort.width(),b,a.ViewPort.height(),\nc,f,g,this.attribute(\"refX\").value,this.attribute(\"refY\").value);a.ViewPort.RemoveCurrent();a.ViewPort.SetCurrent(e[2],e[3])}}};a.Element.svg.prototype=new a.Element.RenderedElementBase;a.Element.rect=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute(\"x\").Length.toPixels(\"x\"),c=this.attribute(\"y\").Length.toPixels(\"y\"),e=this.attribute(\"width\").Length.toPixels(\"x\"),f=this.attribute(\"height\").Length.toPixels(\"y\"),g=this.attribute(\"rx\").Length.toPixels(\"x\"),\nj=this.attribute(\"ry\").Length.toPixels(\"y\");this.attribute(\"rx\").hasValue()&&!this.attribute(\"ry\").hasValue()&&(j=g);this.attribute(\"ry\").hasValue()&&!this.attribute(\"rx\").hasValue()&&(g=j);d!=null&&(d.beginPath(),d.moveTo(b+g,c),d.lineTo(b+e-g,c),d.quadraticCurveTo(b+e,c,b+e,c+j),d.lineTo(b+e,c+f-j),d.quadraticCurveTo(b+e,c+f,b+e-g,c+f),d.lineTo(b+g,c+f),d.quadraticCurveTo(b,c+f,b,c+f-j),d.lineTo(b,c+j),d.quadraticCurveTo(b,c,b+g,c),d.closePath());return new a.BoundingBox(b,c,b+e,c+f)}};a.Element.rect.prototype=\nnew a.Element.PathElementBase;a.Element.circle=function(c){this.base=a.Element.PathElementBase;this.base(c);this.path=function(d){var b=this.attribute(\"cx\").Length.toPixels(\"x\"),c=this.attribute(\"cy\").Length.toPixels(\"y\"),e=this.attribute(\"r\").Length.toPixels();d!=null&&(d.beginPath(),d.arc(b,c,e,0,Math.PI*2,!0),d.closePath());return new a.BoundingBox(b-e,c-e,b+e,c+e)}};a.Element.circle.prototype=new a.Element.PathElementBase;a.Element.ellipse=function(c){this.base=a.Element.PathElementBase;this.base(c);\nthis.path=function(d){var b=4*((Math.sqrt(2)-1)/3),c=this.attribute(\"rx\").Length.toPixels(\"x\"),e=this.attribute(\"ry\").Length.toPixels(\"y\"),f=this.attribute(\"cx\").Length.toPixels(\"x\"),g=this.attribute(\"cy\").Length.toPixels(\"y\");d!=null&&(d.beginPath(),d.moveTo(f,g-e),d.bezierCurveTo(f+b*c,g-e,f+c,g-b*e,f+c,g),d.bezierCurveTo(f+c,g+b*e,f+b*c,g+e,f,g+e),d.bezierCurveTo(f-b*c,g+e,f-c,g+b*e,f-c,g),d.bezierCurveTo(f-c,g-b*e,f-b*c,g-e,f,g-e),d.closePath());return new a.BoundingBox(f-c,g-e,f+c,g+e)}};a.Element.ellipse.prototype=\nnew a.Element.PathElementBase;a.Element.line=function(c){this.base=a.Element.PathElementBase;this.base(c);this.getPoints=function(){return[new a.Point(this.attribute(\"x1\").Length.toPixels(\"x\"),this.attribute(\"y1\").Length.toPixels(\"y\")),new a.Point(this.attribute(\"x2\").Length.toPixels(\"x\"),this.attribute(\"y2\").Length.toPixels(\"y\"))]};this.path=function(d){var b=this.getPoints();d!=null&&(d.beginPath(),d.moveTo(b[0].x,b[0].y),d.lineTo(b[1].x,b[1].y));return new a.BoundingBox(b[0].x,b[0].y,b[1].x,b[1].y)};\nthis.getMarkers=function(){var a=this.getPoints(),b=a[0].angleTo(a[1]);return[[a[0],b],[a[1],b]]}};a.Element.line.prototype=new a.Element.PathElementBase;a.Element.polyline=function(c){this.base=a.Element.PathElementBase;this.base(c);this.points=a.CreatePath(this.attribute(\"points\").value);this.path=function(d){var b=new a.BoundingBox(this.points[0].x,this.points[0].y);d!=null&&(d.beginPath(),d.moveTo(this.points[0].x,this.points[0].y));for(var c=1;c<this.points.length;c++)b.addPoint(this.points[c].x,\nthis.points[c].y),d!=null&&d.lineTo(this.points[c].x,this.points[c].y);return b};this.getMarkers=function(){for(var a=[],b=0;b<this.points.length-1;b++)a.push([this.points[b],this.points[b].angleTo(this.points[b+1])]);a.push([this.points[this.points.length-1],a[a.length-1][1]]);return a}};a.Element.polyline.prototype=new a.Element.PathElementBase;a.Element.polygon=function(c){this.base=a.Element.polyline;this.base(c);this.basePath=this.path;this.path=function(a){var b=this.basePath(a);a!=null&&(a.lineTo(this.points[0].x,\nthis.points[0].y),a.closePath());return b}};a.Element.polygon.prototype=new a.Element.polyline;a.Element.path=function(c){this.base=a.Element.PathElementBase;this.base(c);c=this.attribute(\"d\").value;c=c.replace(/,/gm,\" \");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,\"$1 $2\");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,\"$1 $2\");c=c.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\\s])/gm,\"$1 $2\");c=c.replace(/([^\\s])([MmZzLlHhVvCcSsQqTtAa])/gm,\"$1 $2\");c=c.replace(/([0-9])([+\\-])/gm,\n\"$1 $2\");c=c.replace(/(\\.[0-9]*)(\\.)/gm,\"$1 $2\");c=c.replace(/([Aa](\\s+[0-9]+){3})\\s+([01])\\s*([01])/gm,\"$1 $3 $4 \");c=a.compressSpaces(c);c=a.trim(c);this.PathParser=new function(d){this.tokens=d.split(\" \");this.reset=function(){this.i=-1;this.previousCommand=this.command=\"\";this.start=new a.Point(0,0);this.control=new a.Point(0,0);this.current=new a.Point(0,0);this.points=[];this.angles=[]};this.isEnd=function(){return this.i>=this.tokens.length-1};this.isCommandOrEnd=function(){return this.isEnd()?\n!0:this.tokens[this.i+1].match(/^[A-Za-z]$/)!=null};this.isRelativeCommand=function(){return this.command==this.command.toLowerCase()};this.getToken=function(){this.i+=1;return this.tokens[this.i]};this.getScalar=function(){return parseFloat(this.getToken())};this.nextCommand=function(){this.previousCommand=this.command;this.command=this.getToken()};this.getPoint=function(){return this.makeAbsolute(new a.Point(this.getScalar(),this.getScalar()))};this.getAsControlPoint=function(){var b=this.getPoint();\nreturn this.control=b};this.getAsCurrentPoint=function(){var b=this.getPoint();return this.current=b};this.getReflectedControlPoint=function(){return this.previousCommand.toLowerCase()!=\"c\"&&this.previousCommand.toLowerCase()!=\"s\"?this.current:new a.Point(2*this.current.x-this.control.x,2*this.current.y-this.control.y)};this.makeAbsolute=function(b){if(this.isRelativeCommand())b.x=this.current.x+b.x,b.y=this.current.y+b.y;return b};this.addMarker=function(b,a,d){d!=null&&this.angles.length>0&&this.angles[this.angles.length-\n1]==null&&(this.angles[this.angles.length-1]=this.points[this.points.length-1].angleTo(d));this.addMarkerAngle(b,a==null?null:a.angleTo(b))};this.addMarkerAngle=function(b,a){this.points.push(b);this.angles.push(a)};this.getMarkerPoints=function(){return this.points};this.getMarkerAngles=function(){for(var b=0;b<this.angles.length;b++)if(this.angles[b]==null)for(var a=b+1;a<this.angles.length;a++)if(this.angles[a]!=null){this.angles[b]=this.angles[a];break}return this.angles}}(c);this.path=function(d){var b=\nthis.PathParser;b.reset();var c=new a.BoundingBox;for(d!=null&&d.beginPath();!b.isEnd();)switch(b.nextCommand(),b.command.toUpperCase()){case \"M\":var e=b.getAsCurrentPoint();b.addMarker(e);c.addPoint(e.x,e.y);d!=null&&d.moveTo(e.x,e.y);for(b.start=b.current;!b.isCommandOrEnd();)e=b.getAsCurrentPoint(),b.addMarker(e,b.start),c.addPoint(e.x,e.y),d!=null&&d.lineTo(e.x,e.y);break;case \"L\":for(;!b.isCommandOrEnd();){var f=b.current,e=b.getAsCurrentPoint();b.addMarker(e,f);c.addPoint(e.x,e.y);d!=null&&\nd.lineTo(e.x,e.y)}break;case \"H\":for(;!b.isCommandOrEnd();)e=new a.Point((b.isRelativeCommand()?b.current.x:0)+b.getScalar(),b.current.y),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case \"V\":for(;!b.isCommandOrEnd();)e=new a.Point(b.current.x,(b.isRelativeCommand()?b.current.y:0)+b.getScalar()),b.addMarker(e,b.current),b.current=e,c.addPoint(b.current.x,b.current.y),d!=null&&d.lineTo(b.current.x,b.current.y);break;case \"C\":for(;!b.isCommandOrEnd();){var g=\nb.current,f=b.getPoint(),j=b.getAsControlPoint(),e=b.getAsCurrentPoint();b.addMarker(e,j,f);c.addBezierCurve(g.x,g.y,f.x,f.y,j.x,j.y,e.x,e.y);d!=null&&d.bezierCurveTo(f.x,f.y,j.x,j.y,e.x,e.y)}break;case \"S\":for(;!b.isCommandOrEnd();)g=b.current,f=b.getReflectedControlPoint(),j=b.getAsControlPoint(),e=b.getAsCurrentPoint(),b.addMarker(e,j,f),c.addBezierCurve(g.x,g.y,f.x,f.y,j.x,j.y,e.x,e.y),d!=null&&d.bezierCurveTo(f.x,f.y,j.x,j.y,e.x,e.y);break;case \"Q\":for(;!b.isCommandOrEnd();)g=b.current,j=b.getAsControlPoint(),\ne=b.getAsCurrentPoint(),b.addMarker(e,j,j),c.addQuadraticCurve(g.x,g.y,j.x,j.y,e.x,e.y),d!=null&&d.quadraticCurveTo(j.x,j.y,e.x,e.y);break;case \"T\":for(;!b.isCommandOrEnd();)g=b.current,j=b.getReflectedControlPoint(),b.control=j,e=b.getAsCurrentPoint(),b.addMarker(e,j,j),c.addQuadraticCurve(g.x,g.y,j.x,j.y,e.x,e.y),d!=null&&d.quadraticCurveTo(j.x,j.y,e.x,e.y);break;case \"A\":for(;!b.isCommandOrEnd();){var g=b.current,h=b.getScalar(),l=b.getScalar(),f=b.getScalar()*(Math.PI/180),o=b.getScalar(),j=b.getScalar(),\ne=b.getAsCurrentPoint(),n=new a.Point(Math.cos(f)*(g.x-e.x)/2+Math.sin(f)*(g.y-e.y)/2,-Math.sin(f)*(g.x-e.x)/2+Math.cos(f)*(g.y-e.y)/2),q=Math.pow(n.x,2)/Math.pow(h,2)+Math.pow(n.y,2)/Math.pow(l,2);q>1&&(h*=Math.sqrt(q),l*=Math.sqrt(q));o=(o==j?-1:1)*Math.sqrt((Math.pow(h,2)*Math.pow(l,2)-Math.pow(h,2)*Math.pow(n.y,2)-Math.pow(l,2)*Math.pow(n.x,2))/(Math.pow(h,2)*Math.pow(n.y,2)+Math.pow(l,2)*Math.pow(n.x,2)));isNaN(o)&&(o=0);var p=new a.Point(o*h*n.y/l,o*-l*n.x/h),g=new a.Point((g.x+e.x)/2+Math.cos(f)*\np.x-Math.sin(f)*p.y,(g.y+e.y)/2+Math.sin(f)*p.x+Math.cos(f)*p.y),m=function(b,a){return(b[0]*a[0]+b[1]*a[1])/(Math.sqrt(Math.pow(b[0],2)+Math.pow(b[1],2))*Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)))},s=function(b,a){return(b[0]*a[1]<b[1]*a[0]?-1:1)*Math.acos(m(b,a))},o=s([1,0],[(n.x-p.x)/h,(n.y-p.y)/l]),q=[(n.x-p.x)/h,(n.y-p.y)/l],p=[(-n.x-p.x)/h,(-n.y-p.y)/l],n=s(q,p);if(m(q,p)<=-1)n=Math.PI;m(q,p)>=1&&(n=0);j==0&&n>0&&(n-=2*Math.PI);j==1&&n<0&&(n+=2*Math.PI);q=new a.Point(g.x-h*Math.cos((o+n)/\n2),g.y-l*Math.sin((o+n)/2));b.addMarkerAngle(q,(o+n)/2+(j==0?1:-1)*Math.PI/2);b.addMarkerAngle(e,n+(j==0?1:-1)*Math.PI/2);c.addPoint(e.x,e.y);d!=null&&(m=h>l?h:l,e=h>l?1:h/l,h=h>l?l/h:1,d.translate(g.x,g.y),d.rotate(f),d.scale(e,h),d.arc(0,0,m,o,o+n,1-j),d.scale(1/e,1/h),d.rotate(-f),d.translate(-g.x,-g.y))}break;case \"Z\":d!=null&&d.closePath(),b.current=b.start}return c};this.getMarkers=function(){for(var a=this.PathParser.getMarkerPoints(),b=this.PathParser.getMarkerAngles(),c=[],e=0;e<a.length;e++)c.push([a[e],\nb[e]]);return c}};a.Element.path.prototype=new a.Element.PathElementBase;a.Element.pattern=function(c){this.base=a.Element.ElementBase;this.base(c);this.createPattern=function(d){var b=new a.Element.svg;b.attributes.viewBox=new a.Property(\"viewBox\",this.attribute(\"viewBox\").value);b.attributes.x=new a.Property(\"x\",this.attribute(\"x\").value);b.attributes.y=new a.Property(\"y\",this.attribute(\"y\").value);b.attributes.width=new a.Property(\"width\",this.attribute(\"width\").value);b.attributes.height=new a.Property(\"height\",\nthis.attribute(\"height\").value);b.children=this.children;var c=document.createElement(\"canvas\");c.width=this.attribute(\"width\").Length.toPixels(\"x\");c.height=this.attribute(\"height\").Length.toPixels(\"y\");b.render(c.getContext(\"2d\"));return d.createPattern(c,\"repeat\")}};a.Element.pattern.prototype=new a.Element.ElementBase;a.Element.marker=function(c){this.base=a.Element.ElementBase;this.base(c);this.baseRender=this.render;this.render=function(d,b,c){d.translate(b.x,b.y);this.attribute(\"orient\").valueOrDefault(\"auto\")==\n\"auto\"&&d.rotate(c);this.attribute(\"markerUnits\").valueOrDefault(\"strokeWidth\")==\"strokeWidth\"&&d.scale(d.lineWidth,d.lineWidth);d.save();var e=new a.Element.svg;e.attributes.viewBox=new a.Property(\"viewBox\",this.attribute(\"viewBox\").value);e.attributes.refX=new a.Property(\"refX\",this.attribute(\"refX\").value);e.attributes.refY=new a.Property(\"refY\",this.attribute(\"refY\").value);e.attributes.width=new a.Property(\"width\",this.attribute(\"markerWidth\").value);e.attributes.height=new a.Property(\"height\",\nthis.attribute(\"markerHeight\").value);e.attributes.fill=new a.Property(\"fill\",this.attribute(\"fill\").valueOrDefault(\"black\"));e.attributes.stroke=new a.Property(\"stroke\",this.attribute(\"stroke\").valueOrDefault(\"none\"));e.children=this.children;e.render(d);d.restore();this.attribute(\"markerUnits\").valueOrDefault(\"strokeWidth\")==\"strokeWidth\"&&d.scale(1/d.lineWidth,1/d.lineWidth);this.attribute(\"orient\").valueOrDefault(\"auto\")==\"auto\"&&d.rotate(-c);d.translate(-b.x,-b.y)}};a.Element.marker.prototype=\nnew a.Element.ElementBase;a.Element.defs=function(c){this.base=a.Element.ElementBase;this.base(c);this.render=function(){}};a.Element.defs.prototype=new a.Element.ElementBase;a.Element.GradientBase=function(c){this.base=a.Element.ElementBase;this.base(c);this.gradientUnits=this.attribute(\"gradientUnits\").valueOrDefault(\"objectBoundingBox\");this.stops=[];for(c=0;c<this.children.length;c++)this.stops.push(this.children[c]);this.getGradient=function(){};this.createGradient=function(d,b){var c=this;this.attribute(\"xlink:href\").hasValue()&&\n(c=this.attribute(\"xlink:href\").Definition.getDefinition());for(var e=this.getGradient(d,b),f=0;f<c.stops.length;f++)e.addColorStop(c.stops[f].offset,c.stops[f].color);if(this.attribute(\"gradientTransform\").hasValue()){c=a.ViewPort.viewPorts[0];f=new a.Element.rect;f.attributes.x=new a.Property(\"x\",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.y=new a.Property(\"y\",-a.MAX_VIRTUAL_PIXELS/3);f.attributes.width=new a.Property(\"width\",a.MAX_VIRTUAL_PIXELS);f.attributes.height=new a.Property(\"height\",a.MAX_VIRTUAL_PIXELS);\nvar g=new a.Element.g;g.attributes.transform=new a.Property(\"transform\",this.attribute(\"gradientTransform\").value);g.children=[f];f=new a.Element.svg;f.attributes.x=new a.Property(\"x\",0);f.attributes.y=new a.Property(\"y\",0);f.attributes.width=new a.Property(\"width\",c.width);f.attributes.height=new a.Property(\"height\",c.height);f.children=[g];g=document.createElement(\"canvas\");g.width=c.width;g.height=c.height;c=g.getContext(\"2d\");c.fillStyle=e;f.render(c);return c.createPattern(g,\"no-repeat\")}return e}};\na.Element.GradientBase.prototype=new a.Element.ElementBase;a.Element.linearGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits==\"objectBoundingBox\"?c.x()+c.width()*this.attribute(\"x1\").numValue():this.attribute(\"x1\").Length.toPixels(\"x\"),f=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"y1\").numValue():this.attribute(\"y1\").Length.toPixels(\"y\"),g=this.gradientUnits==\"objectBoundingBox\"?\nc.x()+c.width()*this.attribute(\"x2\").numValue():this.attribute(\"x2\").Length.toPixels(\"x\"),c=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"y2\").numValue():this.attribute(\"y2\").Length.toPixels(\"y\");return a.createLinearGradient(e,f,g,c)}};a.Element.linearGradient.prototype=new a.Element.GradientBase;a.Element.radialGradient=function(c){this.base=a.Element.GradientBase;this.base(c);this.getGradient=function(a,b){var c=b.getBoundingBox(),e=this.gradientUnits==\"objectBoundingBox\"?\nc.x()+c.width()*this.attribute(\"cx\").numValue():this.attribute(\"cx\").Length.toPixels(\"x\"),f=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"cy\").numValue():this.attribute(\"cy\").Length.toPixels(\"y\"),g=e,j=f;this.attribute(\"fx\").hasValue()&&(g=this.gradientUnits==\"objectBoundingBox\"?c.x()+c.width()*this.attribute(\"fx\").numValue():this.attribute(\"fx\").Length.toPixels(\"x\"));this.attribute(\"fy\").hasValue()&&(j=this.gradientUnits==\"objectBoundingBox\"?c.y()+c.height()*this.attribute(\"fy\").numValue():\nthis.attribute(\"fy\").Length.toPixels(\"y\"));c=this.gradientUnits==\"objectBoundingBox\"?(c.width()+c.height())/2*this.attribute(\"r\").numValue():this.attribute(\"r\").Length.toPixels();return a.createRadialGradient(g,j,0,e,f,c)}};a.Element.radialGradient.prototype=new a.Element.GradientBase;a.Element.stop=function(c){this.base=a.Element.ElementBase;this.base(c);this.offset=this.attribute(\"offset\").numValue();c=this.style(\"stop-color\");this.style(\"stop-opacity\").hasValue()&&(c=c.Color.addOpacity(this.style(\"stop-opacity\").value));\nthis.color=c.value};a.Element.stop.prototype=new a.Element.ElementBase;a.Element.AnimateBase=function(c){this.base=a.Element.ElementBase;this.base(c);a.Animations.push(this);this.duration=0;this.begin=this.attribute(\"begin\").Time.toMilliseconds();this.maxDuration=this.begin+this.attribute(\"dur\").Time.toMilliseconds();this.getProperty=function(){var a=this.attribute(\"attributeType\").value,b=this.attribute(\"attributeName\").value;return a==\"CSS\"?this.parent.style(b,!0):this.parent.attribute(b,!0)};this.initialValue=\nnull;this.removed=!1;this.calcValue=function(){return\"\"};this.update=function(a){if(this.initialValue==null)this.initialValue=this.getProperty().value;if(this.duration>this.maxDuration)if(this.attribute(\"repeatCount\").value==\"indefinite\")this.duration=0;else return this.attribute(\"fill\").valueOrDefault(\"remove\")==\"remove\"&&!this.removed?(this.removed=!0,this.getProperty().value=this.initialValue,!0):!1;this.duration+=a;a=!1;if(this.begin<this.duration)a=this.calcValue(),this.attribute(\"type\").hasValue()&&\n(a=this.attribute(\"type\").value+\"(\"+a+\")\"),this.getProperty().value=a,a=!0;return a};this.progress=function(){return(this.duration-this.begin)/(this.maxDuration-this.begin)}};a.Element.AnimateBase.prototype=new a.Element.ElementBase;a.Element.animate=function(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=this.attribute(\"from\").numValue(),b=this.attribute(\"to\").numValue();return a+(b-a)*this.progress()}};a.Element.animate.prototype=new a.Element.AnimateBase;a.Element.animateColor=\nfunction(c){this.base=a.Element.AnimateBase;this.base(c);this.calcValue=function(){var a=new RGBColor(this.attribute(\"from\").value),b=new RGBColor(this.attribute(\"to\").value);if(a.ok&&b.ok){var c=a.r+(b.r-a.r)*this.progress(),e=a.g+(b.g-a.g)*this.progress(),a=a.b+(b.b-a.b)*this.progress();return\"rgb(\"+parseInt(c,10)+\",\"+parseInt(e,10)+\",\"+parseInt(a,10)+\")\"}return this.attribute(\"from\").value}};a.Element.animateColor.prototype=new a.Element.AnimateBase;a.Element.animateTransform=function(c){this.base=\na.Element.animate;this.base(c)};a.Element.animateTransform.prototype=new a.Element.animate;a.Element.font=function(c){this.base=a.Element.ElementBase;this.base(c);this.horizAdvX=this.attribute(\"horiz-adv-x\").numValue();this.isArabic=this.isRTL=!1;this.missingGlyph=this.fontFace=null;this.glyphs=[];for(c=0;c<this.children.length;c++){var d=this.children[c];if(d.type==\"font-face\")this.fontFace=d,d.style(\"font-family\").hasValue()&&(a.Definitions[d.style(\"font-family\").value]=this);else if(d.type==\"missing-glyph\")this.missingGlyph=\nd;else if(d.type==\"glyph\")d.arabicForm!=\"\"?(this.isArabic=this.isRTL=!0,typeof this.glyphs[d.unicode]==\"undefined\"&&(this.glyphs[d.unicode]=[]),this.glyphs[d.unicode][d.arabicForm]=d):this.glyphs[d.unicode]=d}};a.Element.font.prototype=new a.Element.ElementBase;a.Element.fontface=function(c){this.base=a.Element.ElementBase;this.base(c);this.ascent=this.attribute(\"ascent\").value;this.descent=this.attribute(\"descent\").value;this.unitsPerEm=this.attribute(\"units-per-em\").numValue()};a.Element.fontface.prototype=\nnew a.Element.ElementBase;a.Element.missingglyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=0};a.Element.missingglyph.prototype=new a.Element.path;a.Element.glyph=function(c){this.base=a.Element.path;this.base(c);this.horizAdvX=this.attribute(\"horiz-adv-x\").numValue();this.unicode=this.attribute(\"unicode\").value;this.arabicForm=this.attribute(\"arabic-form\").value};a.Element.glyph.prototype=new a.Element.path;a.Element.text=function(c){this.base=a.Element.RenderedElementBase;\nthis.base(c);if(c!=null){this.children=[];for(var d=0;d<c.childNodes.length;d++){var b=c.childNodes[d];b.nodeType==1?this.addChild(b,!0):b.nodeType==3&&this.addChild(new a.Element.tspan(b),!1)}}this.baseSetContext=this.setContext;this.setContext=function(b){this.baseSetContext(b);if(this.style(\"dominant-baseline\").hasValue())b.textBaseline=this.style(\"dominant-baseline\").value;if(this.style(\"alignment-baseline\").hasValue())b.textBaseline=this.style(\"alignment-baseline\").value};this.renderChildren=\nfunction(b){for(var a=this.style(\"text-anchor\").valueOrDefault(\"start\"),c=this.attribute(\"x\").Length.toPixels(\"x\"),d=this.attribute(\"y\").Length.toPixels(\"y\"),j=0;j<this.children.length;j++){var h=this.children[j];h.attribute(\"x\").hasValue()?h.x=h.attribute(\"x\").Length.toPixels(\"x\"):(h.attribute(\"dx\").hasValue()&&(c+=h.attribute(\"dx\").Length.toPixels(\"x\")),h.x=c);c=h.measureText(b);if(a!=\"start\"&&(j==0||h.attribute(\"x\").hasValue())){for(var l=c,o=j+1;o<this.children.length;o++){var n=this.children[o];\nif(n.attribute(\"x\").hasValue())break;l+=n.measureText(b)}h.x-=a==\"end\"?l:l/2}c=h.x+c;h.attribute(\"y\").hasValue()?h.y=h.attribute(\"y\").Length.toPixels(\"y\"):(h.attribute(\"dy\").hasValue()&&(d+=h.attribute(\"dy\").Length.toPixels(\"y\")),h.y=d);d=h.y;h.render(b)}}};a.Element.text.prototype=new a.Element.RenderedElementBase;a.Element.TextElementBase=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getGlyph=function(a,b,c){var e=b[c],f=null;if(a.isArabic){var g=\"isolated\";if((c==0||b[c-\n1]==\" \")&&c<b.length-2&&b[c+1]!=\" \")g=\"terminal\";c>0&&b[c-1]!=\" \"&&c<b.length-2&&b[c+1]!=\" \"&&(g=\"medial\");if(c>0&&b[c-1]!=\" \"&&(c==b.length-1||b[c+1]==\" \"))g=\"initial\";typeof a.glyphs[e]!=\"undefined\"&&(f=a.glyphs[e][g],f==null&&a.glyphs[e].type==\"glyph\"&&(f=a.glyphs[e]))}else f=a.glyphs[e];if(f==null)f=a.missingGlyph;return f};this.renderChildren=function(c){var b=this.parent.style(\"font-family\").Definition.getDefinition();if(b!=null){var k=this.parent.style(\"font-size\").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize),\ne=this.parent.style(\"font-style\").valueOrDefault(a.Font.Parse(a.ctx.font).fontStyle),f=this.getText();b.isRTL&&(f=f.split(\"\").reverse().join(\"\"));for(var g=a.ToNumberArray(this.parent.attribute(\"dx\").value),j=0;j<f.length;j++){var h=this.getGlyph(b,f,j),l=k/b.fontFace.unitsPerEm;c.translate(this.x,this.y);c.scale(l,-l);var o=c.lineWidth;c.lineWidth=c.lineWidth*b.fontFace.unitsPerEm/k;e==\"italic\"&&c.transform(1,0,0.4,1,0,0);h.render(c);e==\"italic\"&&c.transform(1,0,-0.4,1,0,0);c.lineWidth=o;c.scale(1/\nl,-1/l);c.translate(-this.x,-this.y);this.x+=k*(h.horizAdvX||b.horizAdvX)/b.fontFace.unitsPerEm;typeof g[j]!=\"undefined\"&&!isNaN(g[j])&&(this.x+=g[j])}}else c.strokeStyle!=\"\"&&c.strokeText(a.compressSpaces(this.getText()),this.x,this.y),c.fillStyle!=\"\"&&c.fillText(a.compressSpaces(this.getText()),this.x,this.y)};this.getText=function(){};this.measureText=function(c){var b=this.parent.style(\"font-family\").Definition.getDefinition();if(b!=null){var c=this.parent.style(\"font-size\").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize),\nk=0,e=this.getText();b.isRTL&&(e=e.split(\"\").reverse().join(\"\"));for(var f=a.ToNumberArray(this.parent.attribute(\"dx\").value),g=0;g<e.length;g++){var j=this.getGlyph(b,e,g);k+=(j.horizAdvX||b.horizAdvX)*c/b.fontFace.unitsPerEm;typeof f[g]!=\"undefined\"&&!isNaN(f[g])&&(k+=f[g])}return k}b=a.compressSpaces(this.getText());if(!c.measureText)return b.length*10;c.save();this.setContext(c);b=c.measureText(b).width;c.restore();return b}};a.Element.TextElementBase.prototype=new a.Element.RenderedElementBase;\na.Element.tspan=function(c){this.base=a.Element.TextElementBase;this.base(c);this.text=c.nodeType==3?c.nodeValue:c.childNodes.length>0?c.childNodes[0].nodeValue:c.text;this.getText=function(){return this.text}};a.Element.tspan.prototype=new a.Element.TextElementBase;a.Element.tref=function(c){this.base=a.Element.TextElementBase;this.base(c);this.getText=function(){var a=this.attribute(\"xlink:href\").Definition.getDefinition();if(a!=null)return a.children[0].getText()}};a.Element.tref.prototype=new a.Element.TextElementBase;\na.Element.a=function(c){this.base=a.Element.TextElementBase;this.base(c);this.hasText=!0;for(var d=0;d<c.childNodes.length;d++)if(c.childNodes[d].nodeType!=3)this.hasText=!1;this.text=this.hasText?c.childNodes[0].nodeValue:\"\";this.getText=function(){return this.text};this.baseRenderChildren=this.renderChildren;this.renderChildren=function(b){if(this.hasText){this.baseRenderChildren(b);var c=new a.Property(\"fontSize\",a.Font.Parse(a.ctx.font).fontSize);a.Mouse.checkBoundingBox(this,new a.BoundingBox(this.x,\nthis.y-c.Length.toPixels(\"y\"),this.x+this.measureText(b),this.y))}else c=new a.Element.g,c.children=this.children,c.parent=this,c.render(b)};this.onclick=function(){window.open(this.attribute(\"xlink:href\").value)};this.onmousemove=function(){a.ctx.canvas.style.cursor=\"pointer\"}};a.Element.a.prototype=new a.Element.TextElementBase;a.Element.image=function(c){this.base=a.Element.RenderedElementBase;this.base(c);a.Images.push(this);this.img=document.createElement(\"img\");this.loaded=!1;var d=this;this.img.onload=\nfunction(){d.loaded=!0};this.img.src=this.attribute(\"xlink:href\").value;this.renderChildren=function(b){var c=this.attribute(\"x\").Length.toPixels(\"x\"),d=this.attribute(\"y\").Length.toPixels(\"y\"),f=this.attribute(\"width\").Length.toPixels(\"x\"),g=this.attribute(\"height\").Length.toPixels(\"y\");f==0||g==0||(b.save(),b.translate(c,d),a.AspectRatio(b,this.attribute(\"preserveAspectRatio\").value,f,this.img.width,g,this.img.height,0,0),b.drawImage(this.img,0,0),b.restore())}};a.Element.image.prototype=new a.Element.RenderedElementBase;\na.Element.g=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.getBoundingBox=function(){for(var c=new a.BoundingBox,b=0;b<this.children.length;b++)c.addBoundingBox(this.children[b].getBoundingBox());return c}};a.Element.g.prototype=new a.Element.RenderedElementBase;a.Element.symbol=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(c){this.baseSetContext(c);if(this.attribute(\"viewBox\").hasValue()){var b=\na.ToNumberArray(this.attribute(\"viewBox\").value),k=b[0],e=b[1];width=b[2];height=b[3];a.AspectRatio(c,this.attribute(\"preserveAspectRatio\").value,this.attribute(\"width\").Length.toPixels(\"x\"),width,this.attribute(\"height\").Length.toPixels(\"y\"),height,k,e);a.ViewPort.SetCurrent(b[2],b[3])}}};a.Element.symbol.prototype=new a.Element.RenderedElementBase;a.Element.style=function(c){this.base=a.Element.ElementBase;this.base(c);for(var c=c.childNodes[0].nodeValue+(c.childNodes.length>1?c.childNodes[1].nodeValue:\n\"\"),c=c.replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*\\/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm,\"\"),c=a.compressSpaces(c),c=c.split(\"}\"),d=0;d<c.length;d++)if(a.trim(c[d])!=\"\")for(var b=c[d].split(\"{\"),k=b[0].split(\",\"),b=b[1].split(\";\"),e=0;e<k.length;e++){var f=a.trim(k[e]);if(f!=\"\"){for(var g={},j=0;j<b.length;j++){var h=b[j].indexOf(\":\"),l=b[j].substr(0,h),h=b[j].substr(h+1,b[j].length-h);l!=null&&h!=null&&(g[a.trim(l)]=new a.Property(a.trim(l),a.trim(h)))}a.Styles[f]=g;if(f==\"@font-face\"){f=g[\"font-family\"].value.replace(/\"/g,\n\"\");g=g.src.value.split(\",\");for(j=0;j<g.length;j++)if(g[j].indexOf('format(\"svg\")')>0){l=g[j].indexOf(\"url\");h=g[j].indexOf(\")\",l);l=g[j].substr(l+5,h-l-6);l=a.parseXml(a.ajax(l)).getElementsByTagName(\"font\");for(h=0;h<l.length;h++){var o=a.CreateElement(l[h]);a.Definitions[f]=o}}}}}};a.Element.style.prototype=new a.Element.ElementBase;a.Element.use=function(c){this.base=a.Element.RenderedElementBase;this.base(c);this.baseSetContext=this.setContext;this.setContext=function(a){this.baseSetContext(a);\nthis.attribute(\"x\").hasValue()&&a.translate(this.attribute(\"x\").Length.toPixels(\"x\"),0);this.attribute(\"y\").hasValue()&&a.translate(0,this.attribute(\"y\").Length.toPixels(\"y\"))};this.getDefinition=function(){var a=this.attribute(\"xlink:href\").Definition.getDefinition();if(this.attribute(\"width\").hasValue())a.attribute(\"width\",!0).value=this.attribute(\"width\").value;if(this.attribute(\"height\").hasValue())a.attribute(\"height\",!0).value=this.attribute(\"height\").value;return a};this.path=function(a){var b=\nthis.getDefinition();b!=null&&b.path(a)};this.renderChildren=function(a){var b=this.getDefinition();b!=null&&b.render(a)}};a.Element.use.prototype=new a.Element.RenderedElementBase;a.Element.mask=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=this.attribute(\"x\").Length.toPixels(\"x\"),e=this.attribute(\"y\").Length.toPixels(\"y\"),f=this.attribute(\"width\").Length.toPixels(\"x\"),g=this.attribute(\"height\").Length.toPixels(\"y\"),j=b.attribute(\"mask\").value;b.attribute(\"mask\").value=\n\"\";var h=document.createElement(\"canvas\");h.width=c+f;h.height=e+g;var l=h.getContext(\"2d\");this.renderChildren(l);var o=document.createElement(\"canvas\");o.width=c+f;o.height=e+g;var n=o.getContext(\"2d\");b.render(n);n.globalCompositeOperation=\"destination-in\";n.fillStyle=l.createPattern(h,\"no-repeat\");n.fillRect(0,0,c+f,e+g);a.fillStyle=n.createPattern(o,\"no-repeat\");a.fillRect(0,0,c+f,e+g);b.attribute(\"mask\").value=j};this.render=function(){}};a.Element.mask.prototype=new a.Element.ElementBase;a.Element.clipPath=\nfunction(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a){for(var b=0;b<this.children.length;b++)this.children[b].path&&(this.children[b].path(a),a.clip())};this.render=function(){}};a.Element.clipPath.prototype=new a.Element.ElementBase;a.Element.filter=function(c){this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,b){var c=b.getBoundingBox(),e=this.attribute(\"x\").Length.toPixels(\"x\"),f=this.attribute(\"y\").Length.toPixels(\"y\");if(e==0||f==0)e=c.x1,f=c.y1;var g=\nthis.attribute(\"width\").Length.toPixels(\"x\"),j=this.attribute(\"height\").Length.toPixels(\"y\");if(g==0||j==0)g=c.width(),j=c.height();c=b.style(\"filter\").value;b.style(\"filter\").value=\"\";var h=0.2*g,l=0.2*j,o=document.createElement(\"canvas\");o.width=g+2*h;o.height=j+2*l;var n=o.getContext(\"2d\");n.translate(-e+h,-f+l);b.render(n);for(var q=0;q<this.children.length;q++)this.children[q].apply(n,0,0,g+2*h,j+2*l);a.drawImage(o,0,0,g+2*h,j+2*l,e-h,f-l,g+2*h,j+2*l);b.style(\"filter\",!0).value=c};this.render=\nfunction(){}};a.Element.filter.prototype=new a.Element.ElementBase;a.Element.feGaussianBlur=function(c){function d(a,c,d,f,g){for(var j=0;j<g;j++)for(var h=0;h<f;h++)for(var l=a[j*f*4+h*4+3]/255,o=0;o<4;o++){for(var n=d[0]*(l==0?255:a[j*f*4+h*4+o])*(l==0||o==3?1:l),q=1;q<d.length;q++){var p=Math.max(h-q,0),m=a[j*f*4+p*4+3]/255,p=Math.min(h+q,f-1),p=a[j*f*4+p*4+3]/255,s=d[q],r;m==0?r=255:(r=Math.max(h-q,0),r=a[j*f*4+r*4+o]);m=r*(m==0||o==3?1:m);p==0?r=255:(r=Math.min(h+q,f-1),r=a[j*f*4+r*4+o]);n+=\ns*(m+r*(p==0||o==3?1:p))}c[h*g*4+j*4+o]=n}}this.base=a.Element.ElementBase;this.base(c);this.apply=function(a,c,e,f,g){var e=this.attribute(\"stdDeviation\").numValue(),c=a.getImageData(0,0,f,g),e=Math.max(e,0.01),j=Math.ceil(e*4)+1;mask=[];for(var h=0;h<j;h++)mask[h]=Math.exp(-0.5*(h/e)*(h/e));e=mask;j=0;for(h=1;h<e.length;h++)j+=Math.abs(e[h]);j=2*j+Math.abs(e[0]);for(h=0;h<e.length;h++)e[h]/=j;tmp=[];d(c.data,tmp,e,f,g);d(tmp,c.data,e,g,f);a.clearRect(0,0,f,g);a.putImageData(c,0,0)}};a.Element.filter.prototype=\nnew a.Element.feGaussianBlur;a.Element.title=function(){};a.Element.title.prototype=new a.Element.ElementBase;a.Element.desc=function(){};a.Element.desc.prototype=new a.Element.ElementBase;a.Element.MISSING=function(a){console.log(\"ERROR: Element '\"+a.nodeName+\"' not yet implemented.\")};a.Element.MISSING.prototype=new a.Element.ElementBase;a.CreateElement=function(c){var d=c.nodeName.replace(/^[^:]+:/,\"\"),d=d.replace(/\\-/g,\"\"),b=null,b=typeof a.Element[d]!=\"undefined\"?new a.Element[d](c):new a.Element.MISSING(c);\nb.type=c.nodeName;return b};a.load=function(c,d){a.loadXml(c,a.ajax(d))};a.loadXml=function(c,d){a.loadXmlDoc(c,a.parseXml(d))};a.loadXmlDoc=function(c,d){a.init(c);var b=function(a){for(var b=c.canvas;b;)a.x-=b.offsetLeft,a.y-=b.offsetTop,b=b.offsetParent;window.scrollX&&(a.x+=window.scrollX);window.scrollY&&(a.y+=window.scrollY);return a};if(a.opts.ignoreMouse!=!0)c.canvas.onclick=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onclick(c.x,c.y)},\nc.canvas.onmousemove=function(c){c=b(new a.Point(c!=null?c.clientX:event.clientX,c!=null?c.clientY:event.clientY));a.Mouse.onmousemove(c.x,c.y)};var k=a.CreateElement(d.documentElement),e=k.root=!0,f=function(){a.ViewPort.Clear();c.canvas.parentNode&&a.ViewPort.SetCurrent(c.canvas.parentNode.clientWidth,c.canvas.parentNode.clientHeight);if(a.opts.ignoreDimensions!=!0){if(k.style(\"width\").hasValue())c.canvas.width=k.style(\"width\").Length.toPixels(\"x\"),c.canvas.style.width=c.canvas.width+\"px\";if(k.style(\"height\").hasValue())c.canvas.height=\nk.style(\"height\").Length.toPixels(\"y\"),c.canvas.style.height=c.canvas.height+\"px\"}var b=c.canvas.clientWidth||c.canvas.width,d=c.canvas.clientHeight||c.canvas.height;a.ViewPort.SetCurrent(b,d);if(a.opts!=null&&a.opts.offsetX!=null)k.attribute(\"x\",!0).value=a.opts.offsetX;if(a.opts!=null&&a.opts.offsetY!=null)k.attribute(\"y\",!0).value=a.opts.offsetY;if(a.opts!=null&&a.opts.scaleWidth!=null&&a.opts.scaleHeight!=null){var f=1,g=1;k.attribute(\"width\").hasValue()&&(f=k.attribute(\"width\").Length.toPixels(\"x\")/\na.opts.scaleWidth);k.attribute(\"height\").hasValue()&&(g=k.attribute(\"height\").Length.toPixels(\"y\")/a.opts.scaleHeight);k.attribute(\"width\",!0).value=a.opts.scaleWidth;k.attribute(\"height\",!0).value=a.opts.scaleHeight;k.attribute(\"viewBox\",!0).value=\"0 0 \"+b*f+\" \"+d*g;k.attribute(\"preserveAspectRatio\",!0).value=\"none\"}a.opts.ignoreClear!=!0&&c.clearRect(0,0,b,d);k.render(c);e&&(e=!1,a.opts!=null&&typeof a.opts.renderCallback==\"function\"&&a.opts.renderCallback())},g=!0;a.ImagesLoaded()&&(g=!1,f());\na.intervalID=setInterval(function(){var b=!1;g&&a.ImagesLoaded()&&(g=!1,b=!0);a.opts.ignoreMouse!=!0&&(b|=a.Mouse.hasEvents());if(a.opts.ignoreAnimation!=!0)for(var c=0;c<a.Animations.length;c++)b|=a.Animations[c].update(1E3/a.FRAMERATE);a.opts!=null&&typeof a.opts.forceRedraw==\"function\"&&a.opts.forceRedraw()==!0&&(b=!0);b&&(f(),a.Mouse.runEvents())},1E3/a.FRAMERATE)};a.stop=function(){a.intervalID&&clearInterval(a.intervalID)};a.Mouse=new function(){this.events=[];this.hasEvents=function(){return this.events.length!=\n0};this.onclick=function(a,d){this.events.push({type:\"onclick\",x:a,y:d,run:function(a){if(a.onclick)a.onclick()}})};this.onmousemove=function(a,d){this.events.push({type:\"onmousemove\",x:a,y:d,run:function(a){if(a.onmousemove)a.onmousemove()}})};this.eventElements=[];this.checkPath=function(a,d){for(var b=0;b<this.events.length;b++){var k=this.events[b];d.isPointInPath&&d.isPointInPath(k.x,k.y)&&(this.eventElements[b]=a)}};this.checkBoundingBox=function(a,d){for(var b=0;b<this.events.length;b++){var k=\nthis.events[b];d.isPointInBox(k.x,k.y)&&(this.eventElements[b]=a)}};this.runEvents=function(){a.ctx.canvas.style.cursor=\"\";for(var c=0;c<this.events.length;c++)for(var d=this.events[c],b=this.eventElements[c];b;)d.run(b),b=b.parent;this.events=[];this.eventElements=[]}};return a}this.canvg=function(a,c,d){if(a==null&&c==null&&d==null)for(var c=document.getElementsByTagName(\"svg\"),b=0;b<c.length;b++){a=c[b];d=document.createElement(\"canvas\");d.width=a.clientWidth;d.height=a.clientHeight;a.parentNode.insertBefore(d,\na);a.parentNode.removeChild(a);var k=document.createElement(\"div\");k.appendChild(a);canvg(d,k.innerHTML)}else d=d||{},typeof a==\"string\"&&(a=document.getElementById(a)),a.svg==null?(b=m(),a.svg=b):(b=a.svg,b.stop()),b.opts=d,a=a.getContext(\"2d\"),typeof c.documentElement!=\"undefined\"?b.loadXmlDoc(a,c):c.substr(0,1)==\"<\"?b.loadXml(a,c):b.load(a,c)}})();\nif(CanvasRenderingContext2D)CanvasRenderingContext2D.prototype.drawSvg=function(m,a,c,d,b){canvg(this.canvas,m,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:a,offsetY:c,scaleWidth:d,scaleHeight:b})};\n(function(m){var a=m.css,c=m.CanVGRenderer,d=m.SVGRenderer,b=m.extend,k=m.merge,e=m.addEvent,f=m.createElement,g=m.discardElement;b(c.prototype,d.prototype);b(c.prototype,{create:function(a,b,c,d){this.setContainer(b,c,d);this.configure(a)},setContainer:function(a,b,c){var d=a.style,e=a.parentNode,g=d.left,d=d.top,k=a.offsetWidth,m=a.offsetHeight,s={visibility:\"hidden\",position:\"absolute\"};this.init.apply(this,[a,b,c]);this.canvas=f(\"canvas\",{width:k,height:m},{position:\"relative\",left:g,top:d},a);\nthis.ttLine=f(\"div\",null,s,e);this.ttDiv=f(\"div\",null,s,e);this.ttTimer=void 0;this.hiddenSvg=a=f(\"div\",{width:k,height:m},{visibility:\"hidden\",left:g,top:d},e);a.appendChild(this.box)},configure:function(b){var c=this,d=b.options.tooltip,f=d.borderWidth,g=c.ttDiv,m=d.style,p=c.ttLine,t=parseInt(m.padding,10),m=k(m,{padding:t+\"px\",\"background-color\":d.backgroundColor,\"border-style\":\"solid\",\"border-width\":f+\"px\",\"border-radius\":d.borderRadius+\"px\"});d.shadow&&(m=k(m,{\"box-shadow\":\"1px 1px 3px gray\",\n\"-webkit-box-shadow\":\"1px 1px 3px gray\"}));a(g,m);a(p,{\"border-left\":\"1px solid darkgray\"});e(b,\"tooltipRefresh\",function(d){var e=b.container,f=e.offsetLeft,e=e.offsetTop,k;g.innerHTML=d.text;k=b.tooltip.getPosition(g.offsetWidth,g.offsetHeight,{plotX:d.x,plotY:d.y});a(g,{visibility:\"visible\",left:k.x+\"px\",top:k.y+\"px\",\"border-color\":d.borderColor});a(p,{visibility:\"visible\",left:f+d.x+\"px\",top:e+b.plotTop+\"px\",height:b.plotHeight+\"px\"});c.ttTimer!==void 0&&clearTimeout(c.ttTimer);c.ttTimer=setTimeout(function(){a(g,\n{visibility:\"hidden\"});a(p,{visibility:\"hidden\"})},3E3)})},destroy:function(){g(this.canvas);this.ttTimer!==void 0&&clearTimeout(this.ttTimer);g(this.ttLine);g(this.ttDiv);g(this.hiddenSvg);return d.prototype.destroy.apply(this)},color:function(a,b,c){a&&a.linearGradient&&(a=a.stops[a.stops.length-1][1]);return d.prototype.color.call(this,a,b,c)},draw:function(){window.canvg(this.canvas,this.hiddenSvg.innerHTML)}})})(Highcharts);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/canvas-tools.src.js",
    "content": "/**\n * @license A class to parse color values\n * @author Stoyan Stefanov <sstoo@gmail.com>\n * @link   http://www.phpied.com/rgb-color-parser-in-javascript/\n * Use it if you like it\n *\n */\nfunction RGBColor(color_string)\n{\n    this.ok = false;\n\n    // strip any leading #\n    if (color_string.charAt(0) == '#') { // remove # if any\n        color_string = color_string.substr(1,6);\n    }\n\n    color_string = color_string.replace(/ /g,'');\n    color_string = color_string.toLowerCase();\n\n    // before getting into regexps, try simple matches\n    // and overwrite the input\n    var simple_colors = {\n        aliceblue: 'f0f8ff',\n        antiquewhite: 'faebd7',\n        aqua: '00ffff',\n        aquamarine: '7fffd4',\n        azure: 'f0ffff',\n        beige: 'f5f5dc',\n        bisque: 'ffe4c4',\n        black: '000000',\n        blanchedalmond: 'ffebcd',\n        blue: '0000ff',\n        blueviolet: '8a2be2',\n        brown: 'a52a2a',\n        burlywood: 'deb887',\n        cadetblue: '5f9ea0',\n        chartreuse: '7fff00',\n        chocolate: 'd2691e',\n        coral: 'ff7f50',\n        cornflowerblue: '6495ed',\n        cornsilk: 'fff8dc',\n        crimson: 'dc143c',\n        cyan: '00ffff',\n        darkblue: '00008b',\n        darkcyan: '008b8b',\n        darkgoldenrod: 'b8860b',\n        darkgray: 'a9a9a9',\n        darkgreen: '006400',\n        darkkhaki: 'bdb76b',\n        darkmagenta: '8b008b',\n        darkolivegreen: '556b2f',\n        darkorange: 'ff8c00',\n        darkorchid: '9932cc',\n        darkred: '8b0000',\n        darksalmon: 'e9967a',\n        darkseagreen: '8fbc8f',\n        darkslateblue: '483d8b',\n        darkslategray: '2f4f4f',\n        darkturquoise: '00ced1',\n        darkviolet: '9400d3',\n        deeppink: 'ff1493',\n        deepskyblue: '00bfff',\n        dimgray: '696969',\n        dodgerblue: '1e90ff',\n        feldspar: 'd19275',\n        firebrick: 'b22222',\n        floralwhite: 'fffaf0',\n        forestgreen: '228b22',\n        fuchsia: 'ff00ff',\n        gainsboro: 'dcdcdc',\n        ghostwhite: 'f8f8ff',\n        gold: 'ffd700',\n        goldenrod: 'daa520',\n        gray: '808080',\n        green: '008000',\n        greenyellow: 'adff2f',\n        honeydew: 'f0fff0',\n        hotpink: 'ff69b4',\n        indianred : 'cd5c5c',\n        indigo : '4b0082',\n        ivory: 'fffff0',\n        khaki: 'f0e68c',\n        lavender: 'e6e6fa',\n        lavenderblush: 'fff0f5',\n        lawngreen: '7cfc00',\n        lemonchiffon: 'fffacd',\n        lightblue: 'add8e6',\n        lightcoral: 'f08080',\n        lightcyan: 'e0ffff',\n        lightgoldenrodyellow: 'fafad2',\n        lightgrey: 'd3d3d3',\n        lightgreen: '90ee90',\n        lightpink: 'ffb6c1',\n        lightsalmon: 'ffa07a',\n        lightseagreen: '20b2aa',\n        lightskyblue: '87cefa',\n        lightslateblue: '8470ff',\n        lightslategray: '778899',\n        lightsteelblue: 'b0c4de',\n        lightyellow: 'ffffe0',\n        lime: '00ff00',\n        limegreen: '32cd32',\n        linen: 'faf0e6',\n        magenta: 'ff00ff',\n        maroon: '800000',\n        mediumaquamarine: '66cdaa',\n        mediumblue: '0000cd',\n        mediumorchid: 'ba55d3',\n        mediumpurple: '9370d8',\n        mediumseagreen: '3cb371',\n        mediumslateblue: '7b68ee',\n        mediumspringgreen: '00fa9a',\n        mediumturquoise: '48d1cc',\n        mediumvioletred: 'c71585',\n        midnightblue: '191970',\n        mintcream: 'f5fffa',\n        mistyrose: 'ffe4e1',\n        moccasin: 'ffe4b5',\n        navajowhite: 'ffdead',\n        navy: '000080',\n        oldlace: 'fdf5e6',\n        olive: '808000',\n        olivedrab: '6b8e23',\n        orange: 'ffa500',\n        orangered: 'ff4500',\n        orchid: 'da70d6',\n        palegoldenrod: 'eee8aa',\n        palegreen: '98fb98',\n        paleturquoise: 'afeeee',\n        palevioletred: 'd87093',\n        papayawhip: 'ffefd5',\n        peachpuff: 'ffdab9',\n        peru: 'cd853f',\n        pink: 'ffc0cb',\n        plum: 'dda0dd',\n        powderblue: 'b0e0e6',\n        purple: '800080',\n        red: 'ff0000',\n        rosybrown: 'bc8f8f',\n        royalblue: '4169e1',\n        saddlebrown: '8b4513',\n        salmon: 'fa8072',\n        sandybrown: 'f4a460',\n        seagreen: '2e8b57',\n        seashell: 'fff5ee',\n        sienna: 'a0522d',\n        silver: 'c0c0c0',\n        skyblue: '87ceeb',\n        slateblue: '6a5acd',\n        slategray: '708090',\n        snow: 'fffafa',\n        springgreen: '00ff7f',\n        steelblue: '4682b4',\n        tan: 'd2b48c',\n        teal: '008080',\n        thistle: 'd8bfd8',\n        tomato: 'ff6347',\n        turquoise: '40e0d0',\n        violet: 'ee82ee',\n        violetred: 'd02090',\n        wheat: 'f5deb3',\n        white: 'ffffff',\n        whitesmoke: 'f5f5f5',\n        yellow: 'ffff00',\n        yellowgreen: '9acd32'\n    };\n    for (var key in simple_colors) {\n        if (color_string == key) {\n            color_string = simple_colors[key];\n        }\n    }\n    // emd of simple type-in colors\n\n    // array of color definition objects\n    var color_defs = [\n        {\n            re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n            example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1]),\n                    parseInt(bits[2]),\n                    parseInt(bits[3])\n                ];\n            }\n        },\n        {\n            re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n            example: ['#00ff00', '336699'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1], 16),\n                    parseInt(bits[2], 16),\n                    parseInt(bits[3], 16)\n                ];\n            }\n        },\n        {\n            re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n            example: ['#fb0', 'f0f'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1] + bits[1], 16),\n                    parseInt(bits[2] + bits[2], 16),\n                    parseInt(bits[3] + bits[3], 16)\n                ];\n            }\n        }\n    ];\n\n    // search through the definitions to find a match\n    for (var i = 0; i < color_defs.length; i++) {\n        var re = color_defs[i].re;\n        var processor = color_defs[i].process;\n        var bits = re.exec(color_string);\n        if (bits) {\n            channels = processor(bits);\n            this.r = channels[0];\n            this.g = channels[1];\n            this.b = channels[2];\n            this.ok = true;\n        }\n\n    }\n\n    // validate/cleanup values\n    this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);\n    this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);\n    this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);\n\n    // some getters\n    this.toRGB = function () {\n        return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';\n    }\n    this.toHex = function () {\n        var r = this.r.toString(16);\n        var g = this.g.toString(16);\n        var b = this.b.toString(16);\n        if (r.length == 1) r = '0' + r;\n        if (g.length == 1) g = '0' + g;\n        if (b.length == 1) b = '0' + b;\n        return '#' + r + g + b;\n    }\n\n    // help\n    this.getHelpXML = function () {\n\n        var examples = new Array();\n        // add regexps\n        for (var i = 0; i < color_defs.length; i++) {\n            var example = color_defs[i].example;\n            for (var j = 0; j < example.length; j++) {\n                examples[examples.length] = example[j];\n            }\n        }\n        // add type-in colors\n        for (var sc in simple_colors) {\n            examples[examples.length] = sc;\n        }\n\n        var xml = document.createElement('ul');\n        xml.setAttribute('id', 'rgbcolor-examples');\n        for (var i = 0; i < examples.length; i++) {\n            try {\n                var list_item = document.createElement('li');\n                var list_color = new RGBColor(examples[i]);\n                var example_div = document.createElement('div');\n                example_div.style.cssText =\n                        'margin: 3px; '\n                        + 'border: 1px solid black; '\n                        + 'background:' + list_color.toHex() + '; '\n                        + 'color:' + list_color.toHex()\n                ;\n                example_div.appendChild(document.createTextNode('test'));\n                var list_item_value = document.createTextNode(\n                    ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()\n                );\n                list_item.appendChild(example_div);\n                list_item.appendChild(list_item_value);\n                xml.appendChild(list_item);\n\n            } catch(e){}\n        }\n        return xml;\n\n    }\n\n}\n\n/**\n * @license canvg.js - Javascript SVG parser and renderer on Canvas\n * MIT Licensed \n * Gabe Lerner (gabelerner@gmail.com)\n * http://code.google.com/p/canvg/\n *\n * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/\n *\n */\nif(!window.console) {\n\twindow.console = {};\n\twindow.console.log = function(str) {};\n\twindow.console.dir = function(str) {};\n}\n\nif(!Array.prototype.indexOf){\n\tArray.prototype.indexOf = function(obj){\n\t\tfor(var i=0; i<this.length; i++){\n\t\t\tif(this[i]==obj){\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n}\n\n(function(){\n\t// canvg(target, s)\n\t// empty parameters: replace all 'svg' elements on page with 'canvas' elements\n\t// target: canvas element or the id of a canvas element\n\t// s: svg string, url to svg file, or xml document\n\t// opts: optional hash of options\n\t//\t\t ignoreMouse: true => ignore mouse events\n\t//\t\t ignoreAnimation: true => ignore animations\n\t//\t\t ignoreDimensions: true => does not try to resize canvas\n\t//\t\t ignoreClear: true => does not clear canvas\n\t//\t\t offsetX: int => draws at a x offset\n\t//\t\t offsetY: int => draws at a y offset\n\t//\t\t scaleWidth: int => scales horizontally to width\n\t//\t\t scaleHeight: int => scales vertically to height\n\t//\t\t renderCallback: function => will call the function after the first render is completed\n\t//\t\t forceRedraw: function => will call the function on every frame, if it returns true, will redraw\n\tthis.canvg = function (target, s, opts) {\n\t\t// no parameters\n\t\tif (target == null && s == null && opts == null) {\n\t\t\tvar svgTags = document.getElementsByTagName('svg');\n\t\t\tfor (var i=0; i<svgTags.length; i++) {\n\t\t\t\tvar svgTag = svgTags[i];\n\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\tc.width = svgTag.clientWidth;\n\t\t\t\tc.height = svgTag.clientHeight;\n\t\t\t\tsvgTag.parentNode.insertBefore(c, svgTag);\n\t\t\t\tsvgTag.parentNode.removeChild(svgTag);\n\t\t\t\tvar div = document.createElement('div');\n\t\t\t\tdiv.appendChild(svgTag);\n\t\t\t\tcanvg(c, div.innerHTML);\n\t\t\t}\n\t\t\treturn;\n\t\t}\t\n\t\topts = opts || {};\n\t\n\t\tif (typeof target == 'string') {\n\t\t\ttarget = document.getElementById(target);\n\t\t}\n\t\t\n\t\t// reuse class per canvas\n\t\tvar svg;\n\t\tif (target.svg == null) {\n\t\t\tsvg = build();\n\t\t\ttarget.svg = svg;\n\t\t}\n\t\telse {\n\t\t\tsvg = target.svg;\n\t\t\tsvg.stop();\n\t\t}\n\t\tsvg.opts = opts;\n\t\t\n\t\tvar ctx = target.getContext('2d');\n\t\tif (typeof(s.documentElement) != 'undefined') {\n\t\t\t// load from xml doc\n\t\t\tsvg.loadXmlDoc(ctx, s);\n\t\t}\n\t\telse if (s.substr(0,1) == '<') {\n\t\t\t// load from xml string\n\t\t\tsvg.loadXml(ctx, s);\n\t\t}\n\t\telse {\n\t\t\t// load from url\n\t\t\tsvg.load(ctx, s);\n\t\t}\n\t}\n\n\tfunction build() {\n\t\tvar svg = { };\n\t\t\n\t\tsvg.FRAMERATE = 30;\n\t\tsvg.MAX_VIRTUAL_PIXELS = 30000;\n\t\t\n\t\t// globals\n\t\tsvg.init = function(ctx) {\n\t\t\tsvg.Definitions = {};\n\t\t\tsvg.Styles = {};\n\t\t\tsvg.Animations = [];\n\t\t\tsvg.Images = [];\n\t\t\tsvg.ctx = ctx;\n\t\t\tsvg.ViewPort = new (function () {\n\t\t\t\tthis.viewPorts = [];\n\t\t\t\tthis.Clear = function() { this.viewPorts = []; }\n\t\t\t\tthis.SetCurrent = function(width, height) { this.viewPorts.push({ width: width, height: height }); }\n\t\t\t\tthis.RemoveCurrent = function() { this.viewPorts.pop(); }\n\t\t\t\tthis.Current = function() { return this.viewPorts[this.viewPorts.length - 1]; }\n\t\t\t\tthis.width = function() { return this.Current().width; }\n\t\t\t\tthis.height = function() { return this.Current().height; }\n\t\t\t\tthis.ComputeSize = function(d) {\n\t\t\t\t\tif (d != null && typeof(d) == 'number') return d;\n\t\t\t\t\tif (d == 'x') return this.width();\n\t\t\t\t\tif (d == 'y') return this.height();\n\t\t\t\t\treturn Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2);\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tsvg.init();\n\t\t\n\t\t// images loaded\n\t\tsvg.ImagesLoaded = function() { \n\t\t\tfor (var i=0; i<svg.Images.length; i++) {\n\t\t\t\tif (!svg.Images[i].loaded) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t// trim\n\t\tsvg.trim = function(s) { return s.replace(/^\\s+|\\s+$/g, ''); }\n\t\t\n\t\t// compress spaces\n\t\tsvg.compressSpaces = function(s) { return s.replace(/[\\s\\r\\t\\n]+/gm,' '); }\n\t\t\n\t\t// ajax\n\t\tsvg.ajax = function(url) {\n\t\t\tvar AJAX;\n\t\t\tif(window.XMLHttpRequest){AJAX=new XMLHttpRequest();}\n\t\t\telse{AJAX=new ActiveXObject('Microsoft.XMLHTTP');}\n\t\t\tif(AJAX){\n\t\t\t   AJAX.open('GET',url,false);\n\t\t\t   AJAX.send(null);\n\t\t\t   return AJAX.responseText;\n\t\t\t}\n\t\t\treturn null;\n\t\t} \n\t\t\n\t\t// parse xml\n\t\tsvg.parseXml = function(xml) {\n\t\t\tif (window.DOMParser)\n\t\t\t{\n\t\t\t\tvar parser = new DOMParser();\n\t\t\t\treturn parser.parseFromString(xml, 'text/xml');\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\txml = xml.replace(/<!DOCTYPE svg[^>]*>/, '');\n\t\t\t\tvar xmlDoc = new ActiveXObject('Microsoft.XMLDOM');\n\t\t\t\txmlDoc.async = 'false';\n\t\t\t\txmlDoc.loadXML(xml); \n\t\t\t\treturn xmlDoc;\n\t\t\t}\t\t\n\t\t}\n\t\t\n\t\tsvg.Property = function(name, value) {\n\t\t\tthis.name = name;\n\t\t\tthis.value = value;\n\t\t\t\n\t\t\tthis.hasValue = function() {\n\t\t\t\treturn (this.value != null && this.value !== '');\n\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t// return the numerical value of the property\n\t\t\tthis.numValue = function() {\n\t\t\t\tif (!this.hasValue()) return 0;\n\t\t\t\t\n\t\t\t\tvar n = parseFloat(this.value);\n\t\t\t\tif ((this.value + '').match(/%$/)) {\n\t\t\t\t\tn = n / 100.0;\n\t\t\t\t}\n\t\t\t\treturn n;\n\t\t\t}\n\t\t\t\n\t\t\tthis.valueOrDefault = function(def) {\n\t\t\t\tif (this.hasValue()) return this.value;\n\t\t\t\treturn def;\n\t\t\t}\n\t\t\t\n\t\t\tthis.numValueOrDefault = function(def) {\n\t\t\t\tif (this.hasValue()) return this.numValue();\n\t\t\t\treturn def;\n\t\t\t}\n\t\t\t\n\t\t\t/* EXTENSIONS */\n\t\t\tvar that = this;\n\t\t\t\n\t\t\t// color extensions\n\t\t\tthis.Color = {\n\t\t\t\t// augment the current color value with the opacity\n\t\t\t\taddOpacity: function(opacity) {\n\t\t\t\t\tvar newValue = that.value;\n\t\t\t\t\tif (opacity != null && opacity != '') {\n\t\t\t\t\t\tvar color = new RGBColor(that.value);\n\t\t\t\t\t\tif (color.ok) {\n\t\t\t\t\t\t\tnewValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacity + ')';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn new svg.Property(that.name, newValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// definition extensions\n\t\t\tthis.Definition = {\n\t\t\t\t// get the definition from the definitions table\n\t\t\t\tgetDefinition: function() {\n\t\t\t\t\tvar name = that.value.replace(/^(url\\()?#([^\\)]+)\\)?$/, '$2');\n\t\t\t\t\treturn svg.Definitions[name];\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tisUrl: function() {\n\t\t\t\t\treturn that.value.indexOf('url(') == 0\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tgetFillStyle: function(e) {\n\t\t\t\t\tvar def = this.getDefinition();\n\t\t\t\t\t\n\t\t\t\t\t// gradient\n\t\t\t\t\tif (def != null && def.createGradient) {\n\t\t\t\t\t\treturn def.createGradient(svg.ctx, e);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// pattern\n\t\t\t\t\tif (def != null && def.createPattern) {\n\t\t\t\t\t\treturn def.createPattern(svg.ctx, e);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// length extensions\n\t\t\tthis.Length = {\n\t\t\t\tDPI: function(viewPort) {\n\t\t\t\t\treturn 96.0; // TODO: compute?\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tEM: function(viewPort) {\n\t\t\t\t\tvar em = 12;\n\t\t\t\t\t\n\t\t\t\t\tvar fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tif (fontSize.hasValue()) em = fontSize.Length.toPixels(viewPort);\n\t\t\t\t\t\n\t\t\t\t\treturn em;\n\t\t\t\t},\n\t\t\t\n\t\t\t\t// get the length as pixels\n\t\t\t\ttoPixels: function(viewPort) {\n\t\t\t\t\tif (!that.hasValue()) return 0;\n\t\t\t\t\tvar s = that.value+'';\n\t\t\t\t\tif (s.match(/em$/)) return that.numValue() * this.EM(viewPort);\n\t\t\t\t\tif (s.match(/ex$/)) return that.numValue() * this.EM(viewPort) / 2.0;\n\t\t\t\t\tif (s.match(/px$/)) return that.numValue();\n\t\t\t\t\tif (s.match(/pt$/)) return that.numValue() * 1.25;\n\t\t\t\t\tif (s.match(/pc$/)) return that.numValue() * 15;\n\t\t\t\t\tif (s.match(/cm$/)) return that.numValue() * this.DPI(viewPort) / 2.54;\n\t\t\t\t\tif (s.match(/mm$/)) return that.numValue() * this.DPI(viewPort) / 25.4;\n\t\t\t\t\tif (s.match(/in$/)) return that.numValue() * this.DPI(viewPort);\n\t\t\t\t\tif (s.match(/%$/)) return that.numValue() * svg.ViewPort.ComputeSize(viewPort);\n\t\t\t\t\treturn that.numValue();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// time extensions\n\t\t\tthis.Time = {\n\t\t\t\t// get the time as milliseconds\n\t\t\t\ttoMilliseconds: function() {\n\t\t\t\t\tif (!that.hasValue()) return 0;\n\t\t\t\t\tvar s = that.value+'';\n\t\t\t\t\tif (s.match(/s$/)) return that.numValue() * 1000;\n\t\t\t\t\tif (s.match(/ms$/)) return that.numValue();\n\t\t\t\t\treturn that.numValue();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// angle extensions\n\t\t\tthis.Angle = {\n\t\t\t\t// get the angle as radians\n\t\t\t\ttoRadians: function() {\n\t\t\t\t\tif (!that.hasValue()) return 0;\n\t\t\t\t\tvar s = that.value+'';\n\t\t\t\t\tif (s.match(/deg$/)) return that.numValue() * (Math.PI / 180.0);\n\t\t\t\t\tif (s.match(/grad$/)) return that.numValue() * (Math.PI / 200.0);\n\t\t\t\t\tif (s.match(/rad$/)) return that.numValue();\n\t\t\t\t\treturn that.numValue() * (Math.PI / 180.0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// fonts\n\t\tsvg.Font = new (function() {\n\t\t\tthis.Styles = ['normal','italic','oblique','inherit'];\n\t\t\tthis.Variants = ['normal','small-caps','inherit'];\n\t\t\tthis.Weights = ['normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900','inherit'];\n\t\t\t\n\t\t\tthis.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) { \n\t\t\t\tvar f = inherit != null ? this.Parse(inherit) : this.CreateFont('', '', '', '', '', svg.ctx.font);\n\t\t\t\treturn { \n\t\t\t\t\tfontFamily: fontFamily || f.fontFamily, \n\t\t\t\t\tfontSize: fontSize || f.fontSize, \n\t\t\t\t\tfontStyle: fontStyle || f.fontStyle, \n\t\t\t\t\tfontWeight: fontWeight || f.fontWeight, \n\t\t\t\t\tfontVariant: fontVariant || f.fontVariant,\n\t\t\t\t\ttoString: function () { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') } \n\t\t\t\t} \n\t\t\t}\n\t\t\t\n\t\t\tvar that = this;\n\t\t\tthis.Parse = function(s) {\n\t\t\t\tvar f = {};\n\t\t\t\tvar d = svg.trim(svg.compressSpaces(s || '')).split(' ');\n\t\t\t\tvar set = { fontSize: false, fontStyle: false, fontWeight: false, fontVariant: false }\n\t\t\t\tvar ff = '';\n\t\t\t\tfor (var i=0; i<d.length; i++) {\n\t\t\t\t\tif (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontStyle = d[i]; set.fontStyle = true; }\n\t\t\t\t\telse if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontVariant = d[i]; set.fontStyle = set.fontVariant = true;\t}\n\t\t\t\t\telse if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) {\tif (d[i] != 'inherit') f.fontWeight = d[i]; set.fontStyle = set.fontVariant = set.fontWeight = true; }\n\t\t\t\t\telse if (!set.fontSize) { if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; }\n\t\t\t\t\telse { if (d[i] != 'inherit') ff += d[i]; }\n\t\t\t\t} if (ff != '') f.fontFamily = ff;\n\t\t\t\treturn f;\n\t\t\t}\n\t\t});\n\t\t\n\t\t// points and paths\n\t\tsvg.ToNumberArray = function(s) {\n\t\t\tvar a = svg.trim(svg.compressSpaces((s || '').replace(/,/g, ' '))).split(' ');\n\t\t\tfor (var i=0; i<a.length; i++) {\n\t\t\t\ta[i] = parseFloat(a[i]);\n\t\t\t}\n\t\t\treturn a;\n\t\t}\t\t\n\t\tsvg.Point = function(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\t\n\t\t\tthis.angleTo = function(p) {\n\t\t\t\treturn Math.atan2(p.y - this.y, p.x - this.x);\n\t\t\t}\n\t\t\t\n\t\t\tthis.applyTransform = function(v) {\n\t\t\t\tvar xp = this.x * v[0] + this.y * v[2] + v[4];\n\t\t\t\tvar yp = this.x * v[1] + this.y * v[3] + v[5];\n\t\t\t\tthis.x = xp;\n\t\t\t\tthis.y = yp;\n\t\t\t}\n\t\t}\n\t\tsvg.CreatePoint = function(s) {\n\t\t\tvar a = svg.ToNumberArray(s);\n\t\t\treturn new svg.Point(a[0], a[1]);\n\t\t}\n\t\tsvg.CreatePath = function(s) {\n\t\t\tvar a = svg.ToNumberArray(s);\n\t\t\tvar path = [];\n\t\t\tfor (var i=0; i<a.length; i+=2) {\n\t\t\t\tpath.push(new svg.Point(a[i], a[i+1]));\n\t\t\t}\n\t\t\treturn path;\n\t\t}\n\t\t\n\t\t// bounding box\n\t\tsvg.BoundingBox = function(x1, y1, x2, y2) { // pass in initial points if you want\n\t\t\tthis.x1 = Number.NaN;\n\t\t\tthis.y1 = Number.NaN;\n\t\t\tthis.x2 = Number.NaN;\n\t\t\tthis.y2 = Number.NaN;\n\t\t\t\n\t\t\tthis.x = function() { return this.x1; }\n\t\t\tthis.y = function() { return this.y1; }\n\t\t\tthis.width = function() { return this.x2 - this.x1; }\n\t\t\tthis.height = function() { return this.y2 - this.y1; }\n\t\t\t\n\t\t\tthis.addPoint = function(x, y) {\t\n\t\t\t\tif (x != null) {\n\t\t\t\t\tif (isNaN(this.x1) || isNaN(this.x2)) {\n\t\t\t\t\t\tthis.x1 = x;\n\t\t\t\t\t\tthis.x2 = x;\n\t\t\t\t\t}\n\t\t\t\t\tif (x < this.x1) this.x1 = x;\n\t\t\t\t\tif (x > this.x2) this.x2 = x;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif (y != null) {\n\t\t\t\t\tif (isNaN(this.y1) || isNaN(this.y2)) {\n\t\t\t\t\t\tthis.y1 = y;\n\t\t\t\t\t\tthis.y2 = y;\n\t\t\t\t\t}\n\t\t\t\t\tif (y < this.y1) this.y1 = y;\n\t\t\t\t\tif (y > this.y2) this.y2 = y;\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\tthis.addX = function(x) { this.addPoint(x, null); }\n\t\t\tthis.addY = function(y) { this.addPoint(null, y); }\n\t\t\t\n\t\t\tthis.addBoundingBox = function(bb) {\n\t\t\t\tthis.addPoint(bb.x1, bb.y1);\n\t\t\t\tthis.addPoint(bb.x2, bb.y2);\n\t\t\t}\n\t\t\t\n\t\t\tthis.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) {\n\t\t\t\tvar cp1x = p0x + 2/3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0)\n\t\t\t\tvar cp1y = p0y + 2/3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0)\n\t\t\t\tvar cp2x = cp1x + 1/3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0)\n\t\t\t\tvar cp2y = cp1y + 1/3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0)\n\t\t\t\tthis.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y,\tcp2y, p2x, p2y);\n\t\t\t}\n\t\t\t\n\t\t\tthis.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n\t\t\t\t// from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n\t\t\t\tvar p0 = [p0x, p0y], p1 = [p1x, p1y], p2 = [p2x, p2y], p3 = [p3x, p3y];\n\t\t\t\tthis.addPoint(p0[0], p0[1]);\n\t\t\t\tthis.addPoint(p3[0], p3[1]);\n\t\t\t\t\n\t\t\t\tfor (i=0; i<=1; i++) {\n\t\t\t\t\tvar f = function(t) { \n\t\t\t\t\t\treturn Math.pow(1-t, 3) * p0[i]\n\t\t\t\t\t\t+ 3 * Math.pow(1-t, 2) * t * p1[i]\n\t\t\t\t\t\t+ 3 * (1-t) * Math.pow(t, 2) * p2[i]\n\t\t\t\t\t\t+ Math.pow(t, 3) * p3[i];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n\t\t\t\t\tvar a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n\t\t\t\t\tvar c = 3 * p1[i] - 3 * p0[i];\n\t\t\t\t\t\n\t\t\t\t\tif (a == 0) {\n\t\t\t\t\t\tif (b == 0) continue;\n\t\t\t\t\t\tvar t = -c / b;\n\t\t\t\t\t\tif (0 < t && t < 1) {\n\t\t\t\t\t\t\tif (i == 0) this.addX(f(t));\n\t\t\t\t\t\t\tif (i == 1) this.addY(f(t));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar b2ac = Math.pow(b, 2) - 4 * c * a;\n\t\t\t\t\tif (b2ac < 0) continue;\n\t\t\t\t\tvar t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n\t\t\t\t\tif (0 < t1 && t1 < 1) {\n\t\t\t\t\t\tif (i == 0) this.addX(f(t1));\n\t\t\t\t\t\tif (i == 1) this.addY(f(t1));\n\t\t\t\t\t}\n\t\t\t\t\tvar t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n\t\t\t\t\tif (0 < t2 && t2 < 1) {\n\t\t\t\t\t\tif (i == 0) this.addX(f(t2));\n\t\t\t\t\t\tif (i == 1) this.addY(f(t2));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.isPointInBox = function(x, y) {\n\t\t\t\treturn (this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2);\n\t\t\t}\n\t\t\t\n\t\t\tthis.addPoint(x1, y1);\n\t\t\tthis.addPoint(x2, y2);\n\t\t}\n\t\t\n\t\t// transforms\n\t\tsvg.Transform = function(v) {\t\n\t\t\tvar that = this;\n\t\t\tthis.Type = {}\n\t\t\n\t\t\t// translate\n\t\t\tthis.Type.translate = function(s) {\n\t\t\t\tthis.p = svg.CreatePoint(s);\t\t\t\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.translate(this.p.x || 0.0, this.p.y || 0.0);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tp.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// rotate\n\t\t\tthis.Type.rotate = function(s) {\n\t\t\t\tvar a = svg.ToNumberArray(s);\n\t\t\t\tthis.angle = new svg.Property('angle', a[0]);\n\t\t\t\tthis.cx = a[1] || 0;\n\t\t\t\tthis.cy = a[2] || 0;\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.translate(this.cx, this.cy);\n\t\t\t\t\tctx.rotate(this.angle.Angle.toRadians());\n\t\t\t\t\tctx.translate(-this.cx, -this.cy);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tvar a = this.angle.Angle.toRadians();\n\t\t\t\t\tp.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]);\n\t\t\t\t\tp.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]);\n\t\t\t\t\tp.applyTransform([1, 0, 0, 1, -this.p.x || 0.0, -this.p.y || 0.0]);\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.Type.scale = function(s) {\n\t\t\t\tthis.p = svg.CreatePoint(s);\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.scale(this.p.x || 1.0, this.p.y || this.p.x || 1.0);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tp.applyTransform([this.p.x || 0.0, 0, 0, this.p.y || 0.0, 0, 0]);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.Type.matrix = function(s) {\n\t\t\t\tthis.m = svg.ToNumberArray(s);\n\t\t\t\tthis.apply = function(ctx) {\n\t\t\t\t\tctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]);\n\t\t\t\t}\n\t\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\t\tp.applyTransform(this.m);\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.Type.SkewBase = function(s) {\n\t\t\t\tthis.base = that.Type.matrix;\n\t\t\t\tthis.base(s);\n\t\t\t\tthis.angle = new svg.Property('angle', s);\n\t\t\t}\n\t\t\tthis.Type.SkewBase.prototype = new this.Type.matrix;\n\t\t\t\n\t\t\tthis.Type.skewX = function(s) {\n\t\t\t\tthis.base = that.Type.SkewBase;\n\t\t\t\tthis.base(s);\n\t\t\t\tthis.m = [1, 0, Math.tan(this.angle.Angle.toRadians()), 1, 0, 0];\n\t\t\t}\n\t\t\tthis.Type.skewX.prototype = new this.Type.SkewBase;\n\t\t\t\n\t\t\tthis.Type.skewY = function(s) {\n\t\t\t\tthis.base = that.Type.SkewBase;\n\t\t\t\tthis.base(s);\n\t\t\t\tthis.m = [1, Math.tan(this.angle.Angle.toRadians()), 0, 1, 0, 0];\n\t\t\t}\n\t\t\tthis.Type.skewY.prototype = new this.Type.SkewBase;\n\t\t\n\t\t\tthis.transforms = [];\n\t\t\t\n\t\t\tthis.apply = function(ctx) {\n\t\t\t\tfor (var i=0; i<this.transforms.length; i++) {\n\t\t\t\t\tthis.transforms[i].apply(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.applyToPoint = function(p) {\n\t\t\t\tfor (var i=0; i<this.transforms.length; i++) {\n\t\t\t\t\tthis.transforms[i].applyToPoint(p);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar data = svg.trim(svg.compressSpaces(v)).split(/\\s(?=[a-z])/);\n\t\t\tfor (var i=0; i<data.length; i++) {\n\t\t\t\tvar type = data[i].split('(')[0];\n\t\t\t\tvar s = data[i].split('(')[1].replace(')','');\n\t\t\t\tvar transform = new this.Type[type](s);\n\t\t\t\tthis.transforms.push(transform);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// aspect ratio\n\t\tsvg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) {\n\t\t\t// aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute\n\t\t\taspectRatio = svg.compressSpaces(aspectRatio);\n\t\t\taspectRatio = aspectRatio.replace(/^defer\\s/,''); // ignore defer\n\t\t\tvar align = aspectRatio.split(' ')[0] || 'xMidYMid';\n\t\t\tvar meetOrSlice = aspectRatio.split(' ')[1] || 'meet';\t\t\t\t\t\n\t\n\t\t\t// calculate scale\n\t\t\tvar scaleX = width / desiredWidth;\n\t\t\tvar scaleY = height / desiredHeight;\n\t\t\tvar scaleMin = Math.min(scaleX, scaleY);\n\t\t\tvar scaleMax = Math.max(scaleX, scaleY);\n\t\t\tif (meetOrSlice == 'meet') { desiredWidth *= scaleMin; desiredHeight *= scaleMin; }\n\t\t\tif (meetOrSlice == 'slice') { desiredWidth *= scaleMax; desiredHeight *= scaleMax; }\t\n\t\t\t\n\t\t\trefX = new svg.Property('refX', refX);\n\t\t\trefY = new svg.Property('refY', refY);\n\t\t\tif (refX.hasValue() && refY.hasValue()) {\t\t\t\t\n\t\t\t\tctx.translate(-scaleMin * refX.Length.toPixels('x'), -scaleMin * refY.Length.toPixels('y'));\n\t\t\t} \n\t\t\telse {\t\t\t\t\t\n\t\t\t\t// align\n\t\t\t\tif (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0); \n\t\t\t\tif (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0); \n\t\t\t\tif (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0); \n\t\t\t\tif (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight); \n\t\t\t}\n\t\t\t\n\t\t\t// scale\n\t\t\tif (align == 'none') ctx.scale(scaleX, scaleY);\n\t\t\telse if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin); \n\t\t\telse if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax); \t\n\t\t\t\n\t\t\t// translate\n\t\t\tctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY);\t\t\t\n\t\t}\n\t\t\n\t\t// elements\n\t\tsvg.Element = {}\n\t\t\n\t\tsvg.Element.ElementBase = function(node) {\t\n\t\t\tthis.attributes = {};\n\t\t\tthis.styles = {};\n\t\t\tthis.children = [];\n\t\t\t\n\t\t\t// get or create attribute\n\t\t\tthis.attribute = function(name, createIfNotExists) {\n\t\t\t\tvar a = this.attributes[name];\n\t\t\t\tif (a != null) return a;\n\t\t\t\t\t\t\t\n\t\t\t\ta = new svg.Property(name, '');\n\t\t\t\tif (createIfNotExists == true) this.attributes[name] = a;\n\t\t\t\treturn a;\n\t\t\t}\n\t\t\t\n\t\t\t// get or create style, crawls up node tree\n\t\t\tthis.style = function(name, createIfNotExists) {\n\t\t\t\tvar s = this.styles[name];\n\t\t\t\tif (s != null) return s;\n\t\t\t\t\n\t\t\t\tvar a = this.attribute(name);\n\t\t\t\tif (a != null && a.hasValue()) {\n\t\t\t\t\treturn a;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar p = this.parent;\n\t\t\t\tif (p != null) {\n\t\t\t\t\tvar ps = p.style(name);\n\t\t\t\t\tif (ps != null && ps.hasValue()) {\n\t\t\t\t\t\treturn ps;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\ts = new svg.Property(name, '');\n\t\t\t\tif (createIfNotExists == true) this.styles[name] = s;\n\t\t\t\treturn s;\n\t\t\t}\n\t\t\t\n\t\t\t// base render\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// don't render display=none\n\t\t\t\tif (this.style('display').value == 'none') return;\n\t\t\t\t\n\t\t\t\t// don't render visibility=hidden\n\t\t\t\tif (this.attribute('visibility').value == 'hidden') return;\n\t\t\t\n\t\t\t\tctx.save();\n\t\t\t\t\tthis.setContext(ctx);\n\t\t\t\t\t\t// mask\n\t\t\t\t\t\tif (this.attribute('mask').hasValue()) {\n\t\t\t\t\t\t\tvar mask = this.attribute('mask').Definition.getDefinition();\n\t\t\t\t\t\t\tif (mask != null) mask.apply(ctx, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (this.style('filter').hasValue()) {\n\t\t\t\t\t\t\tvar filter = this.style('filter').Definition.getDefinition();\n\t\t\t\t\t\t\tif (filter != null) filter.apply(ctx, this);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse this.renderChildren(ctx);\t\t\t\t\n\t\t\t\t\tthis.clearContext(ctx);\n\t\t\t\tctx.restore();\n\t\t\t}\n\t\t\t\n\t\t\t// base set context\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t}\n\t\t\t\n\t\t\t// base clear context\n\t\t\tthis.clearContext = function(ctx) {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\t// base render children\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tthis.children[i].render(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.addChild = function(childNode, create) {\n\t\t\t\tvar child = childNode;\n\t\t\t\tif (create) child = svg.CreateElement(childNode);\n\t\t\t\tchild.parent = this;\n\t\t\t\tthis.children.push(child);\t\t\t\n\t\t\t}\n\t\t\t\t\n\t\t\tif (node != null && node.nodeType == 1) { //ELEMENT_NODE\n\t\t\t\t// add children\n\t\t\t\tfor (var i=0; i<node.childNodes.length; i++) {\n\t\t\t\t\tvar childNode = node.childNodes[i];\n\t\t\t\t\tif (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// add attributes\n\t\t\t\tfor (var i=0; i<node.attributes.length; i++) {\n\t\t\t\t\tvar attribute = node.attributes[i];\n\t\t\t\t\tthis.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue);\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t// add tag styles\n\t\t\t\tvar styles = svg.Styles[node.nodeName];\n\t\t\t\tif (styles != null) {\n\t\t\t\t\tfor (var name in styles) {\n\t\t\t\t\t\tthis.styles[name] = styles[name];\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t// add class styles\n\t\t\t\tif (this.attribute('class').hasValue()) {\n\t\t\t\t\tvar classes = svg.compressSpaces(this.attribute('class').value).split(' ');\n\t\t\t\t\tfor (var j=0; j<classes.length; j++) {\n\t\t\t\t\t\tstyles = svg.Styles['.'+classes[j]];\n\t\t\t\t\t\tif (styles != null) {\n\t\t\t\t\t\t\tfor (var name in styles) {\n\t\t\t\t\t\t\t\tthis.styles[name] = styles[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyles = svg.Styles[node.nodeName+'.'+classes[j]];\n\t\t\t\t\t\tif (styles != null) {\n\t\t\t\t\t\t\tfor (var name in styles) {\n\t\t\t\t\t\t\t\tthis.styles[name] = styles[name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// add inline styles\n\t\t\t\tif (this.attribute('style').hasValue()) {\n\t\t\t\t\tvar styles = this.attribute('style').value.split(';');\n\t\t\t\t\tfor (var i=0; i<styles.length; i++) {\n\t\t\t\t\t\tif (svg.trim(styles[i]) != '') {\n\t\t\t\t\t\t\tvar style = styles[i].split(':');\n\t\t\t\t\t\t\tvar name = svg.trim(style[0]);\n\t\t\t\t\t\t\tvar value = svg.trim(style[1]);\n\t\t\t\t\t\t\tthis.styles[name] = new svg.Property(name, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\t\n\n\t\t\t\t// add id\n\t\t\t\tif (this.attribute('id').hasValue()) {\n\t\t\t\t\tif (svg.Definitions[this.attribute('id').value] == null) {\n\t\t\t\t\t\tsvg.Definitions[this.attribute('id').value] = this;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tsvg.Element.RenderedElementBase = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\t// fill\n\t\t\t\tif (this.style('fill').Definition.isUrl()) {\n\t\t\t\t\tvar fs = this.style('fill').Definition.getFillStyle(this);\n\t\t\t\t\tif (fs != null) ctx.fillStyle = fs;\n\t\t\t\t}\n\t\t\t\telse if (this.style('fill').hasValue()) {\n\t\t\t\t\tvar fillStyle = this.style('fill');\n\t\t\t\t\tif (this.style('fill-opacity').hasValue()) fillStyle = fillStyle.Color.addOpacity(this.style('fill-opacity').value);\n\t\t\t\t\tctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value);\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t// stroke\n\t\t\t\tif (this.style('stroke').Definition.isUrl()) {\n\t\t\t\t\tvar fs = this.style('stroke').Definition.getFillStyle(this);\n\t\t\t\t\tif (fs != null) ctx.strokeStyle = fs;\n\t\t\t\t}\n\t\t\t\telse if (this.style('stroke').hasValue()) {\n\t\t\t\t\tvar strokeStyle = this.style('stroke');\n\t\t\t\t\tif (this.style('stroke-opacity').hasValue()) strokeStyle = strokeStyle.Color.addOpacity(this.style('stroke-opacity').value);\n\t\t\t\t\tctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value);\n\t\t\t\t}\n\t\t\t\tif (this.style('stroke-width').hasValue()) ctx.lineWidth = this.style('stroke-width').Length.toPixels();\n\t\t\t\tif (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value;\n\t\t\t\tif (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value;\n\t\t\t\tif (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value;\n\n\t\t\t\t// font\n\t\t\t\tif (typeof(ctx.font) != 'undefined') {\n\t\t\t\t\tctx.font = svg.Font.CreateFont( \n\t\t\t\t\t\tthis.style('font-style').value, \n\t\t\t\t\t\tthis.style('font-variant').value, \n\t\t\t\t\t\tthis.style('font-weight').value, \n\t\t\t\t\t\tthis.style('font-size').hasValue() ? this.style('font-size').Length.toPixels() + 'px' : '', \n\t\t\t\t\t\tthis.style('font-family').value).toString();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// transform\n\t\t\t\tif (this.attribute('transform').hasValue()) { \n\t\t\t\t\tvar transform = new svg.Transform(this.attribute('transform').value);\n\t\t\t\t\ttransform.apply(ctx);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// clip\n\t\t\t\tif (this.attribute('clip-path').hasValue()) {\n\t\t\t\t\tvar clip = this.attribute('clip-path').Definition.getDefinition();\n\t\t\t\t\tif (clip != null) clip.apply(ctx);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// opacity\n\t\t\t\tif (this.style('opacity').hasValue()) {\n\t\t\t\t\tctx.globalAlpha = this.style('opacity').numValue();\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t}\n\t\tsvg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase;\n\t\t\n\t\tsvg.Element.PathElementBase = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tif (ctx != null) ctx.beginPath();\n\t\t\t\treturn new svg.BoundingBox();\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tthis.path(ctx);\n\t\t\t\tsvg.Mouse.checkPath(this, ctx);\n\t\t\t\tif (ctx.fillStyle != '') ctx.fill();\n\t\t\t\tif (ctx.strokeStyle != '') ctx.stroke();\n\t\t\t\t\n\t\t\t\tvar markers = this.getMarkers();\n\t\t\t\tif (markers != null) {\n\t\t\t\t\tif (this.style('marker-start').Definition.isUrl()) {\n\t\t\t\t\t\tvar marker = this.style('marker-start').Definition.getDefinition();\n\t\t\t\t\t\tmarker.render(ctx, markers[0][0], markers[0][1]);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.style('marker-mid').Definition.isUrl()) {\n\t\t\t\t\t\tvar marker = this.style('marker-mid').Definition.getDefinition();\n\t\t\t\t\t\tfor (var i=1;i<markers.length-1;i++) {\n\t\t\t\t\t\t\tmarker.render(ctx, markers[i][0], markers[i][1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (this.style('marker-end').Definition.isUrl()) {\n\t\t\t\t\t\tvar marker = this.style('marker-end').Definition.getDefinition();\n\t\t\t\t\t\tmarker.render(ctx, markers[markers.length-1][0], markers[markers.length-1][1]);\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.getBoundingBox = function() {\n\t\t\t\treturn this.path();\n\t\t\t}\n\t\t\t\n\t\t\tthis.getMarkers = function() {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// svg element\n\t\tsvg.Element.svg = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseClearContext = this.clearContext;\n\t\t\tthis.clearContext = function(ctx) {\n\t\t\t\tthis.baseClearContext(ctx);\n\t\t\t\tsvg.ViewPort.RemoveCurrent();\n\t\t\t}\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\t// initial values\n\t\t\t\tctx.strokeStyle = 'rgba(0,0,0,0)';\n\t\t\t\tctx.lineCap = 'butt';\n\t\t\t\tctx.lineJoin = 'miter';\n\t\t\t\tctx.miterLimit = 4;\t\t\t\n\t\t\t\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\t\n\t\t\t\t// create new view port\n\t\t\t\tif (this.attribute('x').hasValue() && this.attribute('y').hasValue()) {\n\t\t\t\t\tctx.translate(this.attribute('x').Length.toPixels('x'), this.attribute('y').Length.toPixels('y'));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar width = svg.ViewPort.width();\n\t\t\t\tvar height = svg.ViewPort.height();\n\t\t\t\tif (typeof(this.root) == 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue()) {\n\t\t\t\t\twidth = this.attribute('width').Length.toPixels('x');\n\t\t\t\t\theight = this.attribute('height').Length.toPixels('y');\n\t\t\t\t\t\n\t\t\t\t\tvar x = 0;\n\t\t\t\t\tvar y = 0;\n\t\t\t\t\tif (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) {\n\t\t\t\t\t\tx = -this.attribute('refX').Length.toPixels('x');\n\t\t\t\t\t\ty = -this.attribute('refY').Length.toPixels('y');\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(x, y);\n\t\t\t\t\tctx.lineTo(width, y);\n\t\t\t\t\tctx.lineTo(width, height);\n\t\t\t\t\tctx.lineTo(x, height);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tctx.clip();\n\t\t\t\t}\n\t\t\t\tsvg.ViewPort.SetCurrent(width, height);\t\n\t\t\t\t\t\t\n\t\t\t\t// viewbox\n\t\t\t\tif (this.attribute('viewBox').hasValue()) {\t\t\t\t\n\t\t\t\t\tvar viewBox = svg.ToNumberArray(this.attribute('viewBox').value);\n\t\t\t\t\tvar minX = viewBox[0];\n\t\t\t\t\tvar minY = viewBox[1];\n\t\t\t\t\twidth = viewBox[2];\n\t\t\t\t\theight = viewBox[3];\n\t\t\t\t\t\n\t\t\t\t\tsvg.AspectRatio(ctx,\n\t\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value, \n\t\t\t\t\t\t\t\t\tsvg.ViewPort.width(), \n\t\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\t\tsvg.ViewPort.height(),\n\t\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\t\tminX,\n\t\t\t\t\t\t\t\t\tminY,\n\t\t\t\t\t\t\t\t\tthis.attribute('refX').value,\n\t\t\t\t\t\t\t\t\tthis.attribute('refY').value);\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\tsvg.ViewPort.RemoveCurrent();\t\n\t\t\t\t\tsvg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);\t\t\t\t\t\t\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t}\n\t\tsvg.Element.svg.prototype = new svg.Element.RenderedElementBase;\n\n\t\t// rect element\n\t\tsvg.Element.rect = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\n\t\t\t\tvar rx = this.attribute('rx').Length.toPixels('x');\n\t\t\t\tvar ry = this.attribute('ry').Length.toPixels('y');\n\t\t\t\tif (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx;\n\t\t\t\tif (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry;\n\t\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(x + rx, y);\n\t\t\t\t\tctx.lineTo(x + width - rx, y);\n\t\t\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + ry)\n\t\t\t\t\tctx.lineTo(x + width, y + height - ry);\n\t\t\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height)\n\t\t\t\t\tctx.lineTo(x + rx, y + height);\n\t\t\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - ry)\n\t\t\t\t\tctx.lineTo(x, y + ry);\n\t\t\t\t\tctx.quadraticCurveTo(x, y, x + rx, y)\n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(x, y, x + width, y + height);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.rect.prototype = new svg.Element.PathElementBase;\n\t\t\n\t\t// circle element\n\t\tsvg.Element.circle = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar cx = this.attribute('cx').Length.toPixels('x');\n\t\t\t\tvar cy = this.attribute('cy').Length.toPixels('y');\n\t\t\t\tvar r = this.attribute('r').Length.toPixels();\n\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.arc(cx, cy, r, 0, Math.PI * 2, true); \n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.circle.prototype = new svg.Element.PathElementBase;\t\n\n\t\t// ellipse element\n\t\tsvg.Element.ellipse = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);\n\t\t\t\tvar rx = this.attribute('rx').Length.toPixels('x');\n\t\t\t\tvar ry = this.attribute('ry').Length.toPixels('y');\n\t\t\t\tvar cx = this.attribute('cx').Length.toPixels('x');\n\t\t\t\tvar cy = this.attribute('cy').Length.toPixels('y');\n\t\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(cx, cy - ry);\n\t\t\t\t\tctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry,  cx + rx, cy - (KAPPA * ry), cx + rx, cy);\n\t\t\t\t\tctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry);\n\t\t\t\t\tctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy);\n\t\t\t\t\tctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.ellipse.prototype = new svg.Element.PathElementBase;\t\t\t\n\t\t\n\t\t// line element\n\t\tsvg.Element.line = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getPoints = function() {\n\t\t\t\treturn [\n\t\t\t\t\tnew svg.Point(this.attribute('x1').Length.toPixels('x'), this.attribute('y1').Length.toPixels('y')),\n\t\t\t\t\tnew svg.Point(this.attribute('x2').Length.toPixels('x'), this.attribute('y2').Length.toPixels('y'))];\n\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar points = this.getPoints();\n\t\t\t\t\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(points[0].x, points[0].y);\n\t\t\t\t\tctx.lineTo(points[1].x, points[1].y);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y);\n\t\t\t}\n\t\t\t\n\t\t\tthis.getMarkers = function() {\n\t\t\t\tvar points = this.getPoints();\t\n\t\t\t\tvar a = points[0].angleTo(points[1]);\n\t\t\t\treturn [[points[0], a], [points[1], a]];\n\t\t\t}\n\t\t}\n\t\tsvg.Element.line.prototype = new svg.Element.PathElementBase;\t\t\n\t\t\t\t\n\t\t// polyline element\n\t\tsvg.Element.polyline = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.points = svg.CreatePath(this.attribute('points').value);\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar bb = new svg.BoundingBox(this.points[0].x, this.points[0].y);\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(this.points[0].x, this.points[0].y);\n\t\t\t\t}\n\t\t\t\tfor (var i=1; i<this.points.length; i++) {\n\t\t\t\t\tbb.addPoint(this.points[i].x, this.points[i].y);\n\t\t\t\t\tif (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y);\n\t\t\t\t}\n\t\t\t\treturn bb;\n\t\t\t}\n\t\t\t\n\t\t\tthis.getMarkers = function() {\n\t\t\t\tvar markers = [];\n\t\t\t\tfor (var i=0; i<this.points.length - 1; i++) {\n\t\t\t\t\tmarkers.push([this.points[i], this.points[i].angleTo(this.points[i+1])]);\n\t\t\t\t}\n\t\t\t\tmarkers.push([this.points[this.points.length-1], markers[markers.length-1][1]]);\n\t\t\t\treturn markers;\n\t\t\t}\t\t\t\n\t\t}\n\t\tsvg.Element.polyline.prototype = new svg.Element.PathElementBase;\t\t\t\t\n\t\t\t\t\n\t\t// polygon element\n\t\tsvg.Element.polygon = function(node) {\n\t\t\tthis.base = svg.Element.polyline;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.basePath = this.path;\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar bb = this.basePath(ctx);\n\t\t\t\tif (ctx != null) {\n\t\t\t\t\tctx.lineTo(this.points[0].x, this.points[0].y);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t}\n\t\t\t\treturn bb;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.polygon.prototype = new svg.Element.polyline;\n\n\t\t// path element\n\t\tsvg.Element.path = function(node) {\n\t\t\tthis.base = svg.Element.PathElementBase;\n\t\t\tthis.base(node);\n\t\t\t\t\t\n\t\t\tvar d = this.attribute('d').value;\n\t\t\t// TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF\n\t\t\td = d.replace(/,/gm,' '); // get rid of all commas\n\t\t\td = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands\n\t\t\td = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands\n\t\t\td = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\\s])/gm,'$1 $2'); // separate commands from points\n\t\t\td = d.replace(/([^\\s])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from points\n\t\t\td = d.replace(/([0-9])([+\\-])/gm,'$1 $2'); // separate digits when no comma\n\t\t\td = d.replace(/(\\.[0-9]*)(\\.)/gm,'$1 $2'); // separate digits when no comma\n\t\t\td = d.replace(/([Aa](\\s+[0-9]+){3})\\s+([01])\\s*([01])/gm,'$1 $3 $4 '); // shorthand elliptical arc path syntax\n\t\t\td = svg.compressSpaces(d); // compress multiple spaces\n\t\t\td = svg.trim(d);\n\t\t\tthis.PathParser = new (function(d) {\n\t\t\t\tthis.tokens = d.split(' ');\n\t\t\t\t\n\t\t\t\tthis.reset = function() {\n\t\t\t\t\tthis.i = -1;\n\t\t\t\t\tthis.command = '';\n\t\t\t\t\tthis.previousCommand = '';\n\t\t\t\t\tthis.start = new svg.Point(0, 0);\n\t\t\t\t\tthis.control = new svg.Point(0, 0);\n\t\t\t\t\tthis.current = new svg.Point(0, 0);\n\t\t\t\t\tthis.points = [];\n\t\t\t\t\tthis.angles = [];\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\tthis.isEnd = function() {\n\t\t\t\t\treturn this.i >= this.tokens.length - 1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.isCommandOrEnd = function() {\n\t\t\t\t\tif (this.isEnd()) return true;\n\t\t\t\t\treturn this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.isRelativeCommand = function() {\n\t\t\t\t\treturn this.command == this.command.toLowerCase();\n\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\tthis.getToken = function() {\n\t\t\t\t\tthis.i = this.i + 1;\n\t\t\t\t\treturn this.tokens[this.i];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getScalar = function() {\n\t\t\t\t\treturn parseFloat(this.getToken());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.nextCommand = function() {\n\t\t\t\t\tthis.previousCommand = this.command;\n\t\t\t\t\tthis.command = this.getToken();\n\t\t\t\t}\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.getPoint = function() {\n\t\t\t\t\tvar p = new svg.Point(this.getScalar(), this.getScalar());\n\t\t\t\t\treturn this.makeAbsolute(p);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getAsControlPoint = function() {\n\t\t\t\t\tvar p = this.getPoint();\n\t\t\t\t\tthis.control = p;\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getAsCurrentPoint = function() {\n\t\t\t\t\tvar p = this.getPoint();\n\t\t\t\t\tthis.current = p;\n\t\t\t\t\treturn p;\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.getReflectedControlPoint = function() {\n\t\t\t\t\tif (this.previousCommand.toLowerCase() != 'c' && this.previousCommand.toLowerCase() != 's') {\n\t\t\t\t\t\treturn this.current;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// reflect point\n\t\t\t\t\tvar p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y);\t\t\t\t\t\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.makeAbsolute = function(p) {\n\t\t\t\t\tif (this.isRelativeCommand()) {\n\t\t\t\t\t\tp.x = this.current.x + p.x;\n\t\t\t\t\t\tp.y = this.current.y + p.y;\n\t\t\t\t\t}\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.addMarker = function(p, from, priorTo) {\n\t\t\t\t\t// if the last angle isn't filled in because we didn't have this point yet ...\n\t\t\t\t\tif (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length-1] == null) {\n\t\t\t\t\t\tthis.angles[this.angles.length-1] = this.points[this.points.length-1].angleTo(priorTo);\n\t\t\t\t\t}\n\t\t\t\t\tthis.addMarkerAngle(p, from == null ? null : from.angleTo(p));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.addMarkerAngle = function(p, a) {\n\t\t\t\t\tthis.points.push(p);\n\t\t\t\t\tthis.angles.push(a);\n\t\t\t\t}\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.getMarkerPoints = function() { return this.points; }\n\t\t\t\tthis.getMarkerAngles = function() {\n\t\t\t\t\tfor (var i=0; i<this.angles.length; i++) {\n\t\t\t\t\t\tif (this.angles[i] == null) {\n\t\t\t\t\t\t\tfor (var j=i+1; j<this.angles.length; j++) {\n\t\t\t\t\t\t\t\tif (this.angles[j] != null) {\n\t\t\t\t\t\t\t\t\tthis.angles[i] = this.angles[j];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this.angles;\n\t\t\t\t}\n\t\t\t})(d);\n\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar pp = this.PathParser;\n\t\t\t\tpp.reset();\n\n\t\t\t\tvar bb = new svg.BoundingBox();\n\t\t\t\tif (ctx != null) ctx.beginPath();\n\t\t\t\twhile (!pp.isEnd()) {\n\t\t\t\t\tpp.nextCommand();\n\t\t\t\t\tswitch (pp.command.toUpperCase()) {\n\t\t\t\t\tcase 'M':\n\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\n\t\t\t\t\t\tpp.addMarker(p);\n\t\t\t\t\t\tbb.addPoint(p.x, p.y);\n\t\t\t\t\t\tif (ctx != null) ctx.moveTo(p.x, p.y);\n\t\t\t\t\t\tpp.start = pp.current;\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(p, pp.start);\n\t\t\t\t\t\t\tbb.addPoint(p.x, p.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(p.x, p.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'L':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar c = pp.current;\n\t\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(p, c);\n\t\t\t\t\t\t\tbb.addPoint(p.x, p.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(p.x, p.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'H':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y);\n\t\t\t\t\t\t\tpp.addMarker(newP, pp.current);\n\t\t\t\t\t\t\tpp.current = newP;\n\t\t\t\t\t\t\tbb.addPoint(pp.current.x, pp.current.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'V':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar());\n\t\t\t\t\t\t\tpp.addMarker(newP, pp.current);\n\t\t\t\t\t\t\tpp.current = newP;\n\t\t\t\t\t\t\tbb.addPoint(pp.current.x, pp.current.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'C':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar p1 = pp.getPoint();\n\t\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, p1);\n\t\t\t\t\t\t\tbb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'S':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar p1 = pp.getReflectedControlPoint();\n\t\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, p1);\n\t\t\t\t\t\t\tbb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Q':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, cntrl);\n\t\t\t\t\t\t\tbb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'T':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t\tvar curr = pp.current;\n\t\t\t\t\t\t\tvar cntrl = pp.getReflectedControlPoint();\n\t\t\t\t\t\t\tpp.control = cntrl;\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\t\t\t\t\t\t\tpp.addMarker(cp, cntrl, cntrl);\n\t\t\t\t\t\t\tbb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t\tif (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'A':\n\t\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\n\t\t\t\t\t\t    var curr = pp.current;\n\t\t\t\t\t\t\tvar rx = pp.getScalar();\n\t\t\t\t\t\t\tvar ry = pp.getScalar();\n\t\t\t\t\t\t\tvar xAxisRotation = pp.getScalar() * (Math.PI / 180.0);\n\t\t\t\t\t\t\tvar largeArcFlag = pp.getScalar();\n\t\t\t\t\t\t\tvar sweepFlag = pp.getScalar();\n\t\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\n\n\t\t\t\t\t\t\t// Conversion from endpoint to center parameterization\n\t\t\t\t\t\t\t// http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n\t\t\t\t\t\t\t// x1', y1'\n\t\t\t\t\t\t\tvar currp = new svg.Point(\n\t\t\t\t\t\t\t\tMath.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0,\n\t\t\t\t\t\t\t\t-Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// adjust radii\n\t\t\t\t\t\t\tvar l = Math.pow(currp.x,2)/Math.pow(rx,2)+Math.pow(currp.y,2)/Math.pow(ry,2);\n\t\t\t\t\t\t\tif (l > 1) {\n\t\t\t\t\t\t\t\trx *= Math.sqrt(l);\n\t\t\t\t\t\t\t\try *= Math.sqrt(l);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// cx', cy'\n\t\t\t\t\t\t\tvar s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt(\n\t\t\t\t\t\t\t\t((Math.pow(rx,2)*Math.pow(ry,2))-(Math.pow(rx,2)*Math.pow(currp.y,2))-(Math.pow(ry,2)*Math.pow(currp.x,2))) /\n\t\t\t\t\t\t\t\t(Math.pow(rx,2)*Math.pow(currp.y,2)+Math.pow(ry,2)*Math.pow(currp.x,2))\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (isNaN(s)) s = 0;\n\t\t\t\t\t\t\tvar cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx);\n\t\t\t\t\t\t\t// cx, cy\n\t\t\t\t\t\t\tvar centp = new svg.Point(\n\t\t\t\t\t\t\t\t(curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y,\n\t\t\t\t\t\t\t\t(curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// vector magnitude\n\t\t\t\t\t\t\tvar m = function(v) { return Math.sqrt(Math.pow(v[0],2) + Math.pow(v[1],2)); }\n\t\t\t\t\t\t\t// ratio between two vectors\n\t\t\t\t\t\t\tvar r = function(u, v) { return (u[0]*v[0]+u[1]*v[1]) / (m(u)*m(v)) }\n\t\t\t\t\t\t\t// angle between two vectors\n\t\t\t\t\t\t\tvar a = function(u, v) { return (u[0]*v[1] < u[1]*v[0] ? -1 : 1) * Math.acos(r(u,v)); }\n\t\t\t\t\t\t\t// initial angle\n\t\t\t\t\t\t\tvar a1 = a([1,0], [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]);\n\t\t\t\t\t\t\t// angle delta\n\t\t\t\t\t\t\tvar u = [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry];\n\t\t\t\t\t\t\tvar v = [(-currp.x-cpp.x)/rx,(-currp.y-cpp.y)/ry];\n\t\t\t\t\t\t\tvar ad = a(u, v);\n\t\t\t\t\t\t\tif (r(u,v) <= -1) ad = Math.PI;\n\t\t\t\t\t\t\tif (r(u,v) >= 1) ad = 0;\n\n\t\t\t\t\t\t\tif (sweepFlag == 0 && ad > 0) ad = ad - 2 * Math.PI;\n\t\t\t\t\t\t\tif (sweepFlag == 1 && ad < 0) ad = ad + 2 * Math.PI;\n\n\t\t\t\t\t\t\t// for markers\n\t\t\t\t\t\t\tvar halfWay = new svg.Point(\n\t\t\t\t\t\t\t\tcentp.x - rx * Math.cos((a1 + ad) / 2),\n\t\t\t\t\t\t\t\tcentp.y - ry * Math.sin((a1 + ad) / 2)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tpp.addMarkerAngle(halfWay, (a1 + ad) / 2 + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2);\n\t\t\t\t\t\t\tpp.addMarkerAngle(cp, ad + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2);\n\n\t\t\t\t\t\t\tbb.addPoint(cp.x, cp.y); // TODO: this is too naive, make it better\n\t\t\t\t\t\t\tif (ctx != null) {\n\t\t\t\t\t\t\t\tvar r = rx > ry ? rx : ry;\n\t\t\t\t\t\t\t\tvar sx = rx > ry ? 1 : rx / ry;\n\t\t\t\t\t\t\t\tvar sy = rx > ry ? ry / rx : 1;\n\n\t\t\t\t\t\t\t\tctx.translate(centp.x, centp.y);\n\t\t\t\t\t\t\t\tctx.rotate(xAxisRotation);\n\t\t\t\t\t\t\t\tctx.scale(sx, sy);\n\t\t\t\t\t\t\t\tctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag);\n\t\t\t\t\t\t\t\tctx.scale(1/sx, 1/sy);\n\t\t\t\t\t\t\t\tctx.rotate(-xAxisRotation);\n\t\t\t\t\t\t\t\tctx.translate(-centp.x, -centp.y);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Z':\n\t\t\t\t\t\tif (ctx != null) ctx.closePath();\n\t\t\t\t\t\tpp.current = pp.start;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn bb;\n\t\t\t}\n\n\t\t\tthis.getMarkers = function() {\n\t\t\t\tvar points = this.PathParser.getMarkerPoints();\n\t\t\t\tvar angles = this.PathParser.getMarkerAngles();\n\t\t\t\t\n\t\t\t\tvar markers = [];\n\t\t\t\tfor (var i=0; i<points.length; i++) {\n\t\t\t\t\tmarkers.push([points[i], angles[i]]);\n\t\t\t\t}\n\t\t\t\treturn markers;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.path.prototype = new svg.Element.PathElementBase;\n\t\t\n\t\t// pattern element\n\t\tsvg.Element.pattern = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.createPattern = function(ctx, element) {\n\t\t\t\t// render me using a temporary svg element\n\t\t\t\tvar tempSvg = new svg.Element.svg();\n\t\t\t\ttempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);\n\t\t\t\ttempSvg.attributes['x'] = new svg.Property('x', this.attribute('x').value);\n\t\t\t\ttempSvg.attributes['y'] = new svg.Property('y', this.attribute('y').value);\n\t\t\t\ttempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value);\n\t\t\t\ttempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value);\n\t\t\t\ttempSvg.children = this.children;\n\t\t\t\t\n\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\tc.width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tc.height = this.attribute('height').Length.toPixels('y');\n\t\t\t\ttempSvg.render(c.getContext('2d'));\t\t\n\t\t\t\treturn ctx.createPattern(c, 'repeat');\n\t\t\t}\n\t\t}\n\t\tsvg.Element.pattern.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// marker element\n\t\tsvg.Element.marker = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseRender = this.render;\n\t\t\tthis.render = function(ctx, point, angle) {\n\t\t\t\tctx.translate(point.x, point.y);\n\t\t\t\tif (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle);\n\t\t\t\tif (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth);\n\t\t\t\tctx.save();\n\t\t\t\t\t\t\t\n\t\t\t\t// render me using a temporary svg element\n\t\t\t\tvar tempSvg = new svg.Element.svg();\n\t\t\t\ttempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);\n\t\t\t\ttempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value);\n\t\t\t\ttempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value);\n\t\t\t\ttempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value);\n\t\t\t\ttempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value);\n\t\t\t\ttempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black'));\n\t\t\t\ttempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none'));\n\t\t\t\ttempSvg.children = this.children;\n\t\t\t\ttempSvg.render(ctx);\n\t\t\t\t\n\t\t\t\tctx.restore();\n\t\t\t\tif (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1/ctx.lineWidth, 1/ctx.lineWidth);\n\t\t\t\tif (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle);\n\t\t\t\tctx.translate(-point.x, -point.y);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.marker.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// definitions element\n\t\tsvg.Element.defs = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NOOP\n\t\t\t}\n\t\t}\n\t\tsvg.Element.defs.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// base for gradients\n\t\tsvg.Element.GradientBase = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox');\n\t\t\t\n\t\t\tthis.stops = [];\t\t\t\n\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\tvar child = this.children[i];\n\t\t\t\tthis.stops.push(child);\n\t\t\t}\t\n\t\t\t\n\t\t\tthis.getGradient = function() {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t}\t\t\t\n\n\t\t\tthis.createGradient = function(ctx, element) {\n\t\t\t\tvar stopsContainer = this;\n\t\t\t\tif (this.attribute('xlink:href').hasValue()) {\n\t\t\t\t\tstopsContainer = this.attribute('xlink:href').Definition.getDefinition();\n\t\t\t\t}\n\t\t\t\n\t\t\t\tvar g = this.getGradient(ctx, element);\n\t\t\t\tfor (var i=0; i<stopsContainer.stops.length; i++) {\n\t\t\t\t\tg.addColorStop(stopsContainer.stops[i].offset, stopsContainer.stops[i].color);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (this.attribute('gradientTransform').hasValue()) {\n\t\t\t\t\t// render as transformed pattern on temporary canvas\n\t\t\t\t\tvar rootView = svg.ViewPort.viewPorts[0];\n\t\t\t\t\t\n\t\t\t\t\tvar rect = new svg.Element.rect();\n\t\t\t\t\trect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS/3.0);\n\t\t\t\t\trect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS/3.0);\n\t\t\t\t\trect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS);\n\t\t\t\t\trect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS);\n\t\t\t\t\t\n\t\t\t\t\tvar group = new svg.Element.g();\n\t\t\t\t\tgroup.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value);\n\t\t\t\t\tgroup.children = [ rect ];\n\t\t\t\t\t\n\t\t\t\t\tvar tempSvg = new svg.Element.svg();\n\t\t\t\t\ttempSvg.attributes['x'] = new svg.Property('x', 0);\n\t\t\t\t\ttempSvg.attributes['y'] = new svg.Property('y', 0);\n\t\t\t\t\ttempSvg.attributes['width'] = new svg.Property('width', rootView.width);\n\t\t\t\t\ttempSvg.attributes['height'] = new svg.Property('height', rootView.height);\n\t\t\t\t\ttempSvg.children = [ group ];\n\t\t\t\t\t\n\t\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\t\tc.width = rootView.width;\n\t\t\t\t\tc.height = rootView.height;\n\t\t\t\t\tvar tempCtx = c.getContext('2d');\n\t\t\t\t\ttempCtx.fillStyle = g;\n\t\t\t\t\ttempSvg.render(tempCtx);\t\t\n\t\t\t\t\treturn tempCtx.createPattern(c, 'no-repeat');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn g;\t\t\t\t\n\t\t\t}\n\t\t}\n\t\tsvg.Element.GradientBase.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// linear gradient element\n\t\tsvg.Element.linearGradient = function(node) {\n\t\t\tthis.base = svg.Element.GradientBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getGradient = function(ctx, element) {\n\t\t\t\tvar bb = element.getBoundingBox();\n\t\t\t\t\n\t\t\t\tvar x1 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('x1').numValue() \n\t\t\t\t\t: this.attribute('x1').Length.toPixels('x'));\n\t\t\t\tvar y1 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('y1').numValue()\n\t\t\t\t\t: this.attribute('y1').Length.toPixels('y'));\n\t\t\t\tvar x2 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('x2').numValue()\n\t\t\t\t\t: this.attribute('x2').Length.toPixels('x'));\n\t\t\t\tvar y2 = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('y2').numValue()\n\t\t\t\t\t: this.attribute('y2').Length.toPixels('y'));\n\n\t\t\t\treturn ctx.createLinearGradient(x1, y1, x2, y2);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.linearGradient.prototype = new svg.Element.GradientBase;\n\t\t\n\t\t// radial gradient element\n\t\tsvg.Element.radialGradient = function(node) {\n\t\t\tthis.base = svg.Element.GradientBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getGradient = function(ctx, element) {\n\t\t\t\tvar bb = element.getBoundingBox();\n\t\t\t\t\n\t\t\t\tvar cx = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('cx').numValue() \n\t\t\t\t\t: this.attribute('cx').Length.toPixels('x'));\n\t\t\t\tvar cy = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('cy').numValue() \n\t\t\t\t\t: this.attribute('cy').Length.toPixels('y'));\n\t\t\t\t\n\t\t\t\tvar fx = cx;\n\t\t\t\tvar fy = cy;\n\t\t\t\tif (this.attribute('fx').hasValue()) {\n\t\t\t\t\tfx = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.x() + bb.width() * this.attribute('fx').numValue() \n\t\t\t\t\t: this.attribute('fx').Length.toPixels('x'));\n\t\t\t\t}\n\t\t\t\tif (this.attribute('fy').hasValue()) {\n\t\t\t\t\tfy = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? bb.y() + bb.height() * this.attribute('fy').numValue() \n\t\t\t\t\t: this.attribute('fy').Length.toPixels('y'));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar r = (this.gradientUnits == 'objectBoundingBox' \n\t\t\t\t\t? (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue()\n\t\t\t\t\t: this.attribute('r').Length.toPixels());\n\t\t\t\t\n\t\t\t\treturn ctx.createRadialGradient(fx, fy, 0, cx, cy, r);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.radialGradient.prototype = new svg.Element.GradientBase;\n\t\t\n\t\t// gradient stop element\n\t\tsvg.Element.stop = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.offset = this.attribute('offset').numValue();\n\t\t\t\n\t\t\tvar stopColor = this.style('stop-color');\n\t\t\tif (this.style('stop-opacity').hasValue()) stopColor = stopColor.Color.addOpacity(this.style('stop-opacity').value);\n\t\t\tthis.color = stopColor.value;\n\t\t}\n\t\tsvg.Element.stop.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// animation base element\n\t\tsvg.Element.AnimateBase = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tsvg.Animations.push(this);\n\t\t\t\n\t\t\tthis.duration = 0.0;\n\t\t\tthis.begin = this.attribute('begin').Time.toMilliseconds();\n\t\t\tthis.maxDuration = this.begin + this.attribute('dur').Time.toMilliseconds();\n\t\t\t\n\t\t\tthis.getProperty = function() {\n\t\t\t\tvar attributeType = this.attribute('attributeType').value;\n\t\t\t\tvar attributeName = this.attribute('attributeName').value;\n\t\t\t\t\n\t\t\t\tif (attributeType == 'CSS') {\n\t\t\t\t\treturn this.parent.style(attributeName, true);\n\t\t\t\t}\n\t\t\t\treturn this.parent.attribute(attributeName, true);\t\t\t\n\t\t\t};\n\t\t\t\n\t\t\tthis.initialValue = null;\n\t\t\tthis.removed = false;\t\t\t\n\n\t\t\tthis.calcValue = function() {\n\t\t\t\t// OVERRIDE ME!\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\t\n\t\t\tthis.update = function(delta) {\t\n\t\t\t\t// set initial value\n\t\t\t\tif (this.initialValue == null) {\n\t\t\t\t\tthis.initialValue = this.getProperty().value;\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// if we're past the end time\n\t\t\t\tif (this.duration > this.maxDuration) {\n\t\t\t\t\t// loop for indefinitely repeating animations\n\t\t\t\t\tif (this.attribute('repeatCount').value == 'indefinite') {\n\t\t\t\t\t\tthis.duration = 0.0\n\t\t\t\t\t}\n\t\t\t\t\telse if (this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed) {\n\t\t\t\t\t\tthis.removed = true;\n\t\t\t\t\t\tthis.getProperty().value = this.initialValue;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn false; // no updates made\n\t\t\t\t\t}\n\t\t\t\t}\t\t\t\n\t\t\t\tthis.duration = this.duration + delta;\n\t\t\t\n\t\t\t\t// if we're past the begin time\n\t\t\t\tvar updated = false;\n\t\t\t\tif (this.begin < this.duration) {\n\t\t\t\t\tvar newValue = this.calcValue(); // tween\n\t\t\t\t\t\n\t\t\t\t\tif (this.attribute('type').hasValue()) {\n\t\t\t\t\t\t// for transform, etc.\n\t\t\t\t\t\tvar type = this.attribute('type').value;\n\t\t\t\t\t\tnewValue = type + '(' + newValue + ')';\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.getProperty().value = newValue;\n\t\t\t\t\tupdated = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn updated;\n\t\t\t}\n\t\t\t\n\t\t\t// fraction of duration we've covered\n\t\t\tthis.progress = function() {\n\t\t\t\treturn ((this.duration - this.begin) / (this.maxDuration - this.begin));\n\t\t\t}\t\t\t\n\t\t}\n\t\tsvg.Element.AnimateBase.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// animate element\n\t\tsvg.Element.animate = function(node) {\n\t\t\tthis.base = svg.Element.AnimateBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.calcValue = function() {\n\t\t\t\tvar from = this.attribute('from').numValue();\n\t\t\t\tvar to = this.attribute('to').numValue();\n\t\t\t\t\n\t\t\t\t// tween value linearly\n\t\t\t\treturn from + (to - from) * this.progress(); \n\t\t\t};\n\t\t}\n\t\tsvg.Element.animate.prototype = new svg.Element.AnimateBase;\n\t\t\t\n\t\t// animate color element\n\t\tsvg.Element.animateColor = function(node) {\n\t\t\tthis.base = svg.Element.AnimateBase;\n\t\t\tthis.base(node);\n\n\t\t\tthis.calcValue = function() {\n\t\t\t\tvar from = new RGBColor(this.attribute('from').value);\n\t\t\t\tvar to = new RGBColor(this.attribute('to').value);\n\t\t\t\t\n\t\t\t\tif (from.ok && to.ok) {\n\t\t\t\t\t// tween color linearly\n\t\t\t\t\tvar r = from.r + (to.r - from.r) * this.progress();\n\t\t\t\t\tvar g = from.g + (to.g - from.g) * this.progress();\n\t\t\t\t\tvar b = from.b + (to.b - from.b) * this.progress();\n\t\t\t\t\treturn 'rgb('+parseInt(r,10)+','+parseInt(g,10)+','+parseInt(b,10)+')';\n\t\t\t\t}\n\t\t\t\treturn this.attribute('from').value;\n\t\t\t};\n\t\t}\n\t\tsvg.Element.animateColor.prototype = new svg.Element.AnimateBase;\n\t\t\n\t\t// animate transform element\n\t\tsvg.Element.animateTransform = function(node) {\n\t\t\tthis.base = svg.Element.animate;\n\t\t\tthis.base(node);\n\t\t}\n\t\tsvg.Element.animateTransform.prototype = new svg.Element.animate;\n\t\t\n\t\t// font element\n\t\tsvg.Element.font = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\n\t\t\tthis.horizAdvX = this.attribute('horiz-adv-x').numValue();\t\t\t\n\t\t\t\n\t\t\tthis.isRTL = false;\n\t\t\tthis.isArabic = false;\n\t\t\tthis.fontFace = null;\n\t\t\tthis.missingGlyph = null;\n\t\t\tthis.glyphs = [];\t\t\t\n\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\tvar child = this.children[i];\n\t\t\t\tif (child.type == 'font-face') {\n\t\t\t\t\tthis.fontFace = child;\n\t\t\t\t\tif (child.style('font-family').hasValue()) {\n\t\t\t\t\t\tsvg.Definitions[child.style('font-family').value] = this;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (child.type == 'missing-glyph') this.missingGlyph = child;\n\t\t\t\telse if (child.type == 'glyph') {\n\t\t\t\t\tif (child.arabicForm != '') {\n\t\t\t\t\t\tthis.isRTL = true;\n\t\t\t\t\t\tthis.isArabic = true;\n\t\t\t\t\t\tif (typeof(this.glyphs[child.unicode]) == 'undefined') this.glyphs[child.unicode] = [];\n\t\t\t\t\t\tthis.glyphs[child.unicode][child.arabicForm] = child;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.glyphs[child.unicode] = child;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t}\n\t\tsvg.Element.font.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// font-face element\n\t\tsvg.Element.fontface = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.ascent = this.attribute('ascent').value;\n\t\t\tthis.descent = this.attribute('descent').value;\n\t\t\tthis.unitsPerEm = this.attribute('units-per-em').numValue();\t\t\t\t\n\t\t}\n\t\tsvg.Element.fontface.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// missing-glyph element\n\t\tsvg.Element.missingglyph = function(node) {\n\t\t\tthis.base = svg.Element.path;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.horizAdvX = 0;\n\t\t}\n\t\tsvg.Element.missingglyph.prototype = new svg.Element.path;\n\t\t\n\t\t// glyph element\n\t\tsvg.Element.glyph = function(node) {\n\t\t\tthis.base = svg.Element.path;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tthis.horizAdvX = this.attribute('horiz-adv-x').numValue();\n\t\t\tthis.unicode = this.attribute('unicode').value;\n\t\t\tthis.arabicForm = this.attribute('arabic-form').value;\n\t\t}\n\t\tsvg.Element.glyph.prototype = new svg.Element.path;\n\t\t\n\t\t// text element\n\t\tsvg.Element.text = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tif (node != null) {\n\t\t\t\t// add children\n\t\t\t\tthis.children = [];\n\t\t\t\tfor (var i=0; i<node.childNodes.length; i++) {\n\t\t\t\t\tvar childNode = node.childNodes[i];\n\t\t\t\t\tif (childNode.nodeType == 1) { // capture tspan and tref nodes\n\t\t\t\t\t\tthis.addChild(childNode, true);\n\t\t\t\t\t}\n\t\t\t\t\telse if (childNode.nodeType == 3) { // capture text\n\t\t\t\t\t\tthis.addChild(new svg.Element.tspan(childNode), false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\tif (this.style('dominant-baseline').hasValue()) ctx.textBaseline = this.style('dominant-baseline').value;\n\t\t\t\tif (this.style('alignment-baseline').hasValue()) ctx.textBaseline = this.style('alignment-baseline').value;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar textAnchor = this.style('text-anchor').valueOrDefault('start');\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tvar child = this.children[i];\n\t\t\t\t\n\t\t\t\t\tif (child.attribute('x').hasValue()) {\n\t\t\t\t\t\tchild.x = child.attribute('x').Length.toPixels('x');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (child.attribute('dx').hasValue()) x += child.attribute('dx').Length.toPixels('x');\n\t\t\t\t\t\tchild.x = x;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar childLength = child.measureText(ctx);\n\t\t\t\t\tif (textAnchor != 'start' && (i==0 || child.attribute('x').hasValue())) { // new group?\n\t\t\t\t\t\t// loop through rest of children\n\t\t\t\t\t\tvar groupLength = childLength;\n\t\t\t\t\t\tfor (var j=i+1; j<this.children.length; j++) {\n\t\t\t\t\t\t\tvar childInGroup = this.children[j];\n\t\t\t\t\t\t\tif (childInGroup.attribute('x').hasValue()) break; // new group\n\t\t\t\t\t\t\tgroupLength += childInGroup.measureText(ctx);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchild.x -= (textAnchor == 'end' ? groupLength : groupLength / 2.0);\n\t\t\t\t\t}\n\t\t\t\t\tx = child.x + childLength;\n\t\t\t\t\t\n\t\t\t\t\tif (child.attribute('y').hasValue()) {\n\t\t\t\t\t\tchild.y = child.attribute('y').Length.toPixels('y');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (child.attribute('dy').hasValue()) y += child.attribute('dy').Length.toPixels('y');\n\t\t\t\t\t\tchild.y = y;\n\t\t\t\t\t}\t\n\t\t\t\t\ty = child.y;\n\t\t\t\t\t\n\t\t\t\t\tchild.render(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsvg.Element.text.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// text base\n\t\tsvg.Element.TextElementBase = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getGlyph = function(font, text, i) {\n\t\t\t\tvar c = text[i];\n\t\t\t\tvar glyph = null;\n\t\t\t\tif (font.isArabic) {\n\t\t\t\t\tvar arabicForm = 'isolated';\n\t\t\t\t\tif ((i==0 || text[i-1]==' ') && i<text.length-2 && text[i+1]!=' ') arabicForm = 'terminal'; \n\t\t\t\t\tif (i>0 && text[i-1]!=' ' && i<text.length-2 && text[i+1]!=' ') arabicForm = 'medial';\n\t\t\t\t\tif (i>0 && text[i-1]!=' ' && (i == text.length-1 || text[i+1]==' ')) arabicForm = 'initial';\n\t\t\t\t\tif (typeof(font.glyphs[c]) != 'undefined') {\n\t\t\t\t\t\tglyph = font.glyphs[c][arabicForm];\n\t\t\t\t\t\tif (glyph == null && font.glyphs[c].type == 'glyph') glyph = font.glyphs[c];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tglyph = font.glyphs[c];\n\t\t\t\t}\n\t\t\t\tif (glyph == null) glyph = font.missingGlyph;\n\t\t\t\treturn glyph;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar customFont = this.parent.style('font-family').Definition.getDefinition();\n\t\t\t\tif (customFont != null) {\n\t\t\t\t\tvar fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tvar fontStyle = this.parent.style('font-style').valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle);\n\t\t\t\t\tvar text = this.getText();\n\t\t\t\t\tif (customFont.isRTL) text = text.split(\"\").reverse().join(\"\");\n\t\t\t\t\t\n\t\t\t\t\tvar dx = svg.ToNumberArray(this.parent.attribute('dx').value);\n\t\t\t\t\tfor (var i=0; i<text.length; i++) {\n\t\t\t\t\t\tvar glyph = this.getGlyph(customFont, text, i);\n\t\t\t\t\t\tvar scale = fontSize / customFont.fontFace.unitsPerEm;\n\t\t\t\t\t\tctx.translate(this.x, this.y);\n\t\t\t\t\t\tctx.scale(scale, -scale);\n\t\t\t\t\t\tvar lw = ctx.lineWidth;\n\t\t\t\t\t\tctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize;\n\t\t\t\t\t\tif (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0);\n\t\t\t\t\t\tglyph.render(ctx);\n\t\t\t\t\t\tif (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0);\n\t\t\t\t\t\tctx.lineWidth = lw;\n\t\t\t\t\t\tctx.scale(1/scale, -1/scale);\n\t\t\t\t\t\tctx.translate(-this.x, -this.y);\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm;\n\t\t\t\t\t\tif (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {\n\t\t\t\t\t\t\tthis.x += dx[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y);\n\t\t\t\tif (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y);\n\t\t\t}\n\t\t\t\n\t\t\tthis.getText = function() {\n\t\t\t\t// OVERRIDE ME\n\t\t\t}\n\t\t\t\n\t\t\tthis.measureText = function(ctx) {\n\t\t\t\tvar customFont = this.parent.style('font-family').Definition.getDefinition();\n\t\t\t\tif (customFont != null) {\n\t\t\t\t\tvar fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tvar measure = 0;\n\t\t\t\t\tvar text = this.getText();\n\t\t\t\t\tif (customFont.isRTL) text = text.split(\"\").reverse().join(\"\");\n\t\t\t\t\tvar dx = svg.ToNumberArray(this.parent.attribute('dx').value);\n\t\t\t\t\tfor (var i=0; i<text.length; i++) {\n\t\t\t\t\t\tvar glyph = this.getGlyph(customFont, text, i);\n\t\t\t\t\t\tmeasure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm;\n\t\t\t\t\t\tif (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {\n\t\t\t\t\t\t\tmeasure += dx[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn measure;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tvar textToMeasure = svg.compressSpaces(this.getText());\n\t\t\t\tif (!ctx.measureText) return textToMeasure.length * 10;\n\t\t\t\t\n\t\t\t\tctx.save();\n\t\t\t\tthis.setContext(ctx);\n\t\t\t\tvar width = ctx.measureText(textToMeasure).width;\n\t\t\t\tctx.restore();\n\t\t\t\treturn width;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// tspan \n\t\tsvg.Element.tspan = function(node) {\n\t\t\tthis.base = svg.Element.TextElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.text = node.nodeType == 3 ? node.nodeValue : // text\n\t\t\t\t\t\tnode.childNodes.length > 0 ? node.childNodes[0].nodeValue : // element\n\t\t\t\t\t\tnode.text;\n\t\t\tthis.getText = function() {\n\t\t\t\treturn this.text;\n\t\t\t}\n\t\t}\n\t\tsvg.Element.tspan.prototype = new svg.Element.TextElementBase;\n\t\t\n\t\t// tref\n\t\tsvg.Element.tref = function(node) {\n\t\t\tthis.base = svg.Element.TextElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getText = function() {\n\t\t\t\tvar element = this.attribute('xlink:href').Definition.getDefinition();\n\t\t\t\tif (element != null) return element.children[0].getText();\n\t\t\t}\n\t\t}\n\t\tsvg.Element.tref.prototype = new svg.Element.TextElementBase;\t\t\n\t\t\n\t\t// a element\n\t\tsvg.Element.a = function(node) {\n\t\t\tthis.base = svg.Element.TextElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.hasText = true;\n\t\t\tfor (var i=0; i<node.childNodes.length; i++) {\n\t\t\t\tif (node.childNodes[i].nodeType != 3) this.hasText = false;\n\t\t\t}\n\t\t\t\n\t\t\t// this might contain text\n\t\t\tthis.text = this.hasText ? node.childNodes[0].nodeValue : '';\n\t\t\tthis.getText = function() {\n\t\t\t\treturn this.text;\n\t\t\t}\t\t\n\n\t\t\tthis.baseRenderChildren = this.renderChildren;\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tif (this.hasText) {\n\t\t\t\t\t// render as text element\n\t\t\t\t\tthis.baseRenderChildren(ctx);\n\t\t\t\t\tvar fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);\n\t\t\t\t\tsvg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.Length.toPixels('y'), this.x + this.measureText(ctx), this.y));\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// render as temporary group\n\t\t\t\t\tvar g = new svg.Element.g();\n\t\t\t\t\tg.children = this.children;\n\t\t\t\t\tg.parent = this;\n\t\t\t\t\tg.render(ctx);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.onclick = function() {\n\t\t\t\twindow.open(this.attribute('xlink:href').value);\n\t\t\t}\n\t\t\t\n\t\t\tthis.onmousemove = function() {\n\t\t\t\tsvg.ctx.canvas.style.cursor = 'pointer';\n\t\t\t}\n\t\t}\n\t\tsvg.Element.a.prototype = new svg.Element.TextElementBase;\t\t\n\t\t\n\t\t// image element\n\t\tsvg.Element.image = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tsvg.Images.push(this);\n\t\t\tthis.img = document.createElement('img');\n\t\t\tthis.loaded = false;\n\t\t\tvar that = this;\n\t\t\tthis.img.onload = function() { that.loaded = true; }\n\t\t\tthis.img.src = this.attribute('xlink:href').value;\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\t\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\t\t\t\n\t\t\t\tif (width == 0 || height == 0) return;\n\t\t\t\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(x, y);\n\t\t\t\tsvg.AspectRatio(ctx,\n\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value,\n\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\tthis.img.width,\n\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\tthis.img.height,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0);\t\n\t\t\t\tctx.drawImage(this.img, 0, 0);\t\t\t\n\t\t\t\tctx.restore();\n\t\t\t}\n\t\t}\n\t\tsvg.Element.image.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// group element\n\t\tsvg.Element.g = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.getBoundingBox = function() {\n\t\t\t\tvar bb = new svg.BoundingBox();\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tbb.addBoundingBox(this.children[i].getBoundingBox());\n\t\t\t\t}\n\t\t\t\treturn bb;\n\t\t\t};\n\t\t}\n\t\tsvg.Element.g.prototype = new svg.Element.RenderedElementBase;\n\n\t\t// symbol element\n\t\tsvg.Element.symbol = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\t\t\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\t\n\t\t\t\t// viewbox\n\t\t\t\tif (this.attribute('viewBox').hasValue()) {\t\t\t\t\n\t\t\t\t\tvar viewBox = svg.ToNumberArray(this.attribute('viewBox').value);\n\t\t\t\t\tvar minX = viewBox[0];\n\t\t\t\t\tvar minY = viewBox[1];\n\t\t\t\t\twidth = viewBox[2];\n\t\t\t\t\theight = viewBox[3];\n\t\t\t\t\t\n\t\t\t\t\tsvg.AspectRatio(ctx,\n\t\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value, \n\t\t\t\t\t\t\t\t\tthis.attribute('width').Length.toPixels('x'),\n\t\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\t\tthis.attribute('height').Length.toPixels('y'),\n\t\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\t\tminX,\n\t\t\t\t\t\t\t\t\tminY);\n\n\t\t\t\t\tsvg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\t\tsvg.Element.symbol.prototype = new svg.Element.RenderedElementBase;\t\t\n\t\t\t\n\t\t// style element\n\t\tsvg.Element.style = function(node) { \n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\t// text, or spaces then CDATA\n\t\t\tvar css = node.childNodes[0].nodeValue + (node.childNodes.length > 1 ? node.childNodes[1].nodeValue : '');\n\t\t\tcss = css.replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*\\/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm, ''); // remove comments\n\t\t\tcss = svg.compressSpaces(css); // replace whitespace\n\t\t\tvar cssDefs = css.split('}');\n\t\t\tfor (var i=0; i<cssDefs.length; i++) {\n\t\t\t\tif (svg.trim(cssDefs[i]) != '') {\n\t\t\t\t\tvar cssDef = cssDefs[i].split('{');\n\t\t\t\t\tvar cssClasses = cssDef[0].split(',');\n\t\t\t\t\tvar cssProps = cssDef[1].split(';');\n\t\t\t\t\tfor (var j=0; j<cssClasses.length; j++) {\n\t\t\t\t\t\tvar cssClass = svg.trim(cssClasses[j]);\n\t\t\t\t\t\tif (cssClass != '') {\n\t\t\t\t\t\t\tvar props = {};\n\t\t\t\t\t\t\tfor (var k=0; k<cssProps.length; k++) {\n\t\t\t\t\t\t\t\tvar prop = cssProps[k].indexOf(':');\n\t\t\t\t\t\t\t\tvar name = cssProps[k].substr(0, prop);\n\t\t\t\t\t\t\t\tvar value = cssProps[k].substr(prop + 1, cssProps[k].length - prop);\n\t\t\t\t\t\t\t\tif (name != null && value != null) {\n\t\t\t\t\t\t\t\t\tprops[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsvg.Styles[cssClass] = props;\n\t\t\t\t\t\t\tif (cssClass == '@font-face') {\n\t\t\t\t\t\t\t\tvar fontFamily = props['font-family'].value.replace(/\"/g,'');\n\t\t\t\t\t\t\t\tvar srcs = props['src'].value.split(',');\n\t\t\t\t\t\t\t\tfor (var s=0; s<srcs.length; s++) {\n\t\t\t\t\t\t\t\t\tif (srcs[s].indexOf('format(\"svg\")') > 0) {\n\t\t\t\t\t\t\t\t\t\tvar urlStart = srcs[s].indexOf('url');\n\t\t\t\t\t\t\t\t\t\tvar urlEnd = srcs[s].indexOf(')', urlStart);\n\t\t\t\t\t\t\t\t\t\tvar url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6);\n\t\t\t\t\t\t\t\t\t\tvar doc = svg.parseXml(svg.ajax(url));\n\t\t\t\t\t\t\t\t\t\tvar fonts = doc.getElementsByTagName('font');\n\t\t\t\t\t\t\t\t\t\tfor (var f=0; f<fonts.length; f++) {\n\t\t\t\t\t\t\t\t\t\t\tvar font = svg.CreateElement(fonts[f]);\n\t\t\t\t\t\t\t\t\t\t\tsvg.Definitions[fontFamily] = font;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsvg.Element.style.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// use element \n\t\tsvg.Element.use = function(node) {\n\t\t\tthis.base = svg.Element.RenderedElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.baseSetContext = this.setContext;\n\t\t\tthis.setContext = function(ctx) {\n\t\t\t\tthis.baseSetContext(ctx);\n\t\t\t\tif (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').Length.toPixels('x'), 0);\n\t\t\t\tif (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').Length.toPixels('y'));\n\t\t\t}\n\t\t\t\n\t\t\tthis.getDefinition = function() {\n\t\t\t\tvar element = this.attribute('xlink:href').Definition.getDefinition();\n\t\t\t\tif (this.attribute('width').hasValue()) element.attribute('width', true).value = this.attribute('width').value;\n\t\t\t\tif (this.attribute('height').hasValue()) element.attribute('height', true).value = this.attribute('height').value;\n\t\t\t\treturn element;\n\t\t\t}\n\t\t\t\n\t\t\tthis.path = function(ctx) {\n\t\t\t\tvar element = this.getDefinition();\n\t\t\t\tif (element != null) element.path(ctx);\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderChildren = function(ctx) {\n\t\t\t\tvar element = this.getDefinition();\n\t\t\t\tif (element != null) element.render(ctx);\n\t\t\t}\n\t\t}\n\t\tsvg.Element.use.prototype = new svg.Element.RenderedElementBase;\n\t\t\n\t\t// mask element\n\t\tsvg.Element.mask = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\t\t\t\n\t\t\tthis.apply = function(ctx, element) {\n\t\t\t\t// render as temp svg\t\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\n\t\t\t\t\n\t\t\t\t// temporarily remove mask to avoid recursion\n\t\t\t\tvar mask = element.attribute('mask').value;\n\t\t\t\telement.attribute('mask').value = '';\n\t\t\t\t\n\t\t\t\t\tvar cMask = document.createElement('canvas');\n\t\t\t\t\tcMask.width = x + width;\n\t\t\t\t\tcMask.height = y + height;\n\t\t\t\t\tvar maskCtx = cMask.getContext('2d');\n\t\t\t\t\tthis.renderChildren(maskCtx);\n\t\t\t\t\n\t\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\t\tc.width = x + width;\n\t\t\t\t\tc.height = y + height;\n\t\t\t\t\tvar tempCtx = c.getContext('2d');\n\t\t\t\t\telement.render(tempCtx);\n\t\t\t\t\ttempCtx.globalCompositeOperation = 'destination-in';\n\t\t\t\t\ttempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat');\n\t\t\t\t\ttempCtx.fillRect(0, 0, x + width, y + height);\n\t\t\t\t\t\n\t\t\t\t\tctx.fillStyle = tempCtx.createPattern(c, 'no-repeat');\n\t\t\t\t\tctx.fillRect(0, 0, x + width, y + height);\n\t\t\t\t\t\n\t\t\t\t// reassign mask\n\t\t\t\telement.attribute('mask').value = mask;\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NO RENDER\n\t\t\t}\n\t\t}\n\t\tsvg.Element.mask.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// clip element\n\t\tsvg.Element.clipPath = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\n\t\t\tthis.apply = function(ctx) {\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tif (this.children[i].path) {\n\t\t\t\t\t\tthis.children[i].path(ctx);\n\t\t\t\t\t\tctx.clip();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NO RENDER\n\t\t\t}\n\t\t}\n\t\tsvg.Element.clipPath.prototype = new svg.Element.ElementBase;\n\n\t\t// filters\n\t\tsvg.Element.filter = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\n\t\t\t\t\t\t\n\t\t\tthis.apply = function(ctx, element) {\n\t\t\t\t// render as temp svg\t\n\t\t\t\tvar bb = element.getBoundingBox();\n\t\t\t\tvar x = this.attribute('x').Length.toPixels('x');\n\t\t\t\tvar y = this.attribute('y').Length.toPixels('y');\n\t\t\t\tif (x == 0 || y == 0) {\n\t\t\t\t\tx = bb.x1;\n\t\t\t\t\ty = bb.y1;\n\t\t\t\t}\n\t\t\t\tvar width = this.attribute('width').Length.toPixels('x');\n\t\t\t\tvar height = this.attribute('height').Length.toPixels('y');\n\t\t\t\tif (width == 0 || height == 0) {\n\t\t\t\t\twidth = bb.width();\n\t\t\t\t\theight = bb.height();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// temporarily remove filter to avoid recursion\n\t\t\t\tvar filter = element.style('filter').value;\n\t\t\t\telement.style('filter').value = '';\n\t\t\t\t\n\t\t\t\t// max filter distance\n\t\t\t\tvar extraPercent = .20;\n\t\t\t\tvar px = extraPercent * width;\n\t\t\t\tvar py = extraPercent * height;\n\t\t\t\t\n\t\t\t\tvar c = document.createElement('canvas');\n\t\t\t\tc.width = width + 2*px;\n\t\t\t\tc.height = height + 2*py;\n\t\t\t\tvar tempCtx = c.getContext('2d');\n\t\t\t\ttempCtx.translate(-x + px, -y + py);\n\t\t\t\telement.render(tempCtx);\n\t\t\t\n\t\t\t\t// apply filters\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\n\t\t\t\t\tthis.children[i].apply(tempCtx, 0, 0, width + 2*px, height + 2*py);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// render on me\n\t\t\t\tctx.drawImage(c, 0, 0, width + 2*px, height + 2*py, x - px, y - py, width + 2*px, height + 2*py);\n\t\t\t\t\n\t\t\t\t// reassign filter\n\t\t\t\telement.style('filter', true).value = filter;\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.render = function(ctx) {\n\t\t\t\t// NO RENDER\n\t\t\t}\t\t\n\t\t}\n\t\tsvg.Element.filter.prototype = new svg.Element.ElementBase;\n\t\t\n\t\tsvg.Element.feGaussianBlur = function(node) {\n\t\t\tthis.base = svg.Element.ElementBase;\n\t\t\tthis.base(node);\t\n\t\t\t\n\t\t\tfunction make_fgauss(sigma) {\n\t\t\t\tsigma = Math.max(sigma, 0.01);\t\t\t      \n\t\t\t\tvar len = Math.ceil(sigma * 4.0) + 1;                     \n\t\t\t\tmask = [];                               \n\t\t\t\tfor (var i = 0; i < len; i++) {                             \n\t\t\t\t\tmask[i] = Math.exp(-0.5 * (i / sigma) * (i / sigma));                                           \n\t\t\t\t}                                                           \n\t\t\t\treturn mask; \n\t\t\t}\n\t\t\t\n\t\t\tfunction normalize(mask) {\n\t\t\t\tvar sum = 0;\n\t\t\t\tfor (var i = 1; i < mask.length; i++) {\n\t\t\t\t\tsum += Math.abs(mask[i]);\n\t\t\t\t}\n\t\t\t\tsum = 2 * sum + Math.abs(mask[0]);\n\t\t\t\tfor (var i = 0; i < mask.length; i++) {\n\t\t\t\t\tmask[i] /= sum;\n\t\t\t\t}\n\t\t\t\treturn mask;\n\t\t\t}\n\t\t\t\n\t\t\tfunction convolve_even(src, dst, mask, width, height) {\n\t\t\t  for (var y = 0; y < height; y++) {\n\t\t\t\tfor (var x = 0; x < width; x++) {\n\t\t\t\t  var a = imGet(src, x, y, width, height, 3)/255;\n\t\t\t\t  for (var rgba = 0; rgba < 4; rgba++) {\t\t\t\t\t  \n\t\t\t\t\t  var sum = mask[0] * (a==0?255:imGet(src, x, y, width, height, rgba)) * (a==0||rgba==3?1:a);\n\t\t\t\t\t  for (var i = 1; i < mask.length; i++) {\n\t\t\t\t\t\tvar a1 = imGet(src, Math.max(x-i,0), y, width, height, 3)/255;\n\t\t\t\t\t    var a2 = imGet(src, Math.min(x+i, width-1), y, width, height, 3)/255;\n\t\t\t\t\t\tsum += mask[i] * \n\t\t\t\t\t\t  ((a1==0?255:imGet(src, Math.max(x-i,0), y, width, height, rgba)) * (a1==0||rgba==3?1:a1) + \n\t\t\t\t\t\t   (a2==0?255:imGet(src, Math.min(x+i, width-1), y, width, height, rgba)) * (a2==0||rgba==3?1:a2));\n\t\t\t\t\t  }\n\t\t\t\t\t  imSet(dst, y, x, height, width, rgba, sum);\n\t\t\t\t  }\t\t\t  \n\t\t\t\t}\n\t\t\t  }\n\t\t\t}\t\t\n\n\t\t\tfunction imGet(img, x, y, width, height, rgba) {\n\t\t\t\treturn img[y*width*4 + x*4 + rgba];\n\t\t\t}\n\t\t\t\n\t\t\tfunction imSet(img, x, y, width, height, rgba, val) {\n\t\t\t\timg[y*width*4 + x*4 + rgba] = val;\n\t\t\t}\n\t\t\t\t\t\t\n\t\t\tfunction blur(ctx, width, height, sigma)\n\t\t\t{\n\t\t\t\tvar srcData = ctx.getImageData(0, 0, width, height);\n\t\t\t\tvar mask = make_fgauss(sigma);\n\t\t\t\tmask = normalize(mask);\n\t\t\t\ttmp = [];\n\t\t\t\tconvolve_even(srcData.data, tmp, mask, width, height);\n\t\t\t\tconvolve_even(tmp, srcData.data, mask, height, width);\n\t\t\t\tctx.clearRect(0, 0, width, height);\n\t\t\t\tctx.putImageData(srcData, 0, 0);\n\t\t\t}\t\t\t\n\t\t\n\t\t\tthis.apply = function(ctx, x, y, width, height) {\n\t\t\t\t// assuming x==0 && y==0 for now\n\t\t\t\tblur(ctx, width, height, this.attribute('stdDeviation').numValue());\n\t\t\t}\n\t\t}\n\t\tsvg.Element.filter.prototype = new svg.Element.feGaussianBlur;\n\t\t\n\t\t// title element, do nothing\n\t\tsvg.Element.title = function(node) {\n\t\t}\n\t\tsvg.Element.title.prototype = new svg.Element.ElementBase;\n\n\t\t// desc element, do nothing\n\t\tsvg.Element.desc = function(node) {\n\t\t}\n\t\tsvg.Element.desc.prototype = new svg.Element.ElementBase;\t\t\n\t\t\n\t\tsvg.Element.MISSING = function(node) {\n\t\t\tconsole.log('ERROR: Element \\'' + node.nodeName + '\\' not yet implemented.');\n\t\t}\n\t\tsvg.Element.MISSING.prototype = new svg.Element.ElementBase;\n\t\t\n\t\t// element factory\n\t\tsvg.CreateElement = function(node) {\t\n\t\t\tvar className = node.nodeName.replace(/^[^:]+:/,''); // remove namespace\n\t\t\tclassName = className.replace(/\\-/g,''); // remove dashes\n\t\t\tvar e = null;\n\t\t\tif (typeof(svg.Element[className]) != 'undefined') {\n\t\t\t\te = new svg.Element[className](node);\n\t\t\t}\n\t\t\telse {\n\t\t\t\te = new svg.Element.MISSING(node);\n\t\t\t}\n\n\t\t\te.type = node.nodeName;\n\t\t\treturn e;\n\t\t}\n\t\t\t\t\n\t\t// load from url\n\t\tsvg.load = function(ctx, url) {\n\t\t\tsvg.loadXml(ctx, svg.ajax(url));\n\t\t}\n\t\t\n\t\t// load from xml\n\t\tsvg.loadXml = function(ctx, xml) {\n\t\t\tsvg.loadXmlDoc(ctx, svg.parseXml(xml));\n\t\t}\n\t\t\n\t\tsvg.loadXmlDoc = function(ctx, dom) {\n\t\t\tsvg.init(ctx);\n\t\t\t\n\t\t\tvar mapXY = function(p) {\n\t\t\t\tvar e = ctx.canvas;\n\t\t\t\twhile (e) {\n\t\t\t\t\tp.x -= e.offsetLeft;\n\t\t\t\t\tp.y -= e.offsetTop;\n\t\t\t\t\te = e.offsetParent;\n\t\t\t\t}\n\t\t\t\tif (window.scrollX) p.x += window.scrollX;\n\t\t\t\tif (window.scrollY) p.y += window.scrollY;\n\t\t\t\treturn p;\n\t\t\t}\n\t\t\t\n\t\t\t// bind mouse\n\t\t\tif (svg.opts['ignoreMouse'] != true) {\n\t\t\t\tctx.canvas.onclick = function(e) {\n\t\t\t\t\tvar p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));\n\t\t\t\t\tsvg.Mouse.onclick(p.x, p.y);\n\t\t\t\t};\n\t\t\t\tctx.canvas.onmousemove = function(e) {\n\t\t\t\t\tvar p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));\n\t\t\t\t\tsvg.Mouse.onmousemove(p.x, p.y);\n\t\t\t\t};\n\t\t\t}\n\t\t\n\t\t\tvar e = svg.CreateElement(dom.documentElement);\n\t\t\te.root = true;\n\t\t\t\t\t\n\t\t\t// render loop\n\t\t\tvar isFirstRender = true;\n\t\t\tvar draw = function() {\n\t\t\t\tsvg.ViewPort.Clear();\n\t\t\t\tif (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight);\n\t\t\t\n\t\t\t\tif (svg.opts['ignoreDimensions'] != true) {\n\t\t\t\t\t// set canvas size\n\t\t\t\t\tif (e.style('width').hasValue()) {\n\t\t\t\t\t\tctx.canvas.width = e.style('width').Length.toPixels('x');\n\t\t\t\t\t\tctx.canvas.style.width = ctx.canvas.width + 'px';\n\t\t\t\t\t}\n\t\t\t\t\tif (e.style('height').hasValue()) {\n\t\t\t\t\t\tctx.canvas.height = e.style('height').Length.toPixels('y');\n\t\t\t\t\t\tctx.canvas.style.height = ctx.canvas.height + 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar cWidth = ctx.canvas.clientWidth || ctx.canvas.width;\n\t\t\t\tvar cHeight = ctx.canvas.clientHeight || ctx.canvas.height;\n\t\t\t\tsvg.ViewPort.SetCurrent(cWidth, cHeight);\t\t\n\t\t\t\t\n\t\t\t\tif (svg.opts != null && svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX'];\n\t\t\t\tif (svg.opts != null && svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY'];\n\t\t\t\tif (svg.opts != null && svg.opts['scaleWidth'] != null && svg.opts['scaleHeight'] != null) {\n\t\t\t\t\tvar xRatio = 1, yRatio = 1;\n\t\t\t\t\tif (e.attribute('width').hasValue()) xRatio = e.attribute('width').Length.toPixels('x') / svg.opts['scaleWidth'];\n\t\t\t\t\tif (e.attribute('height').hasValue()) yRatio = e.attribute('height').Length.toPixels('y') / svg.opts['scaleHeight'];\n\t\t\t\t\n\t\t\t\t\te.attribute('width', true).value = svg.opts['scaleWidth'];\n\t\t\t\t\te.attribute('height', true).value = svg.opts['scaleHeight'];\t\t\t\n\t\t\t\t\te.attribute('viewBox', true).value = '0 0 ' + (cWidth * xRatio) + ' ' + (cHeight * yRatio);\n\t\t\t\t\te.attribute('preserveAspectRatio', true).value = 'none';\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// clear and render\n\t\t\t\tif (svg.opts['ignoreClear'] != true) {\n\t\t\t\t\tctx.clearRect(0, 0, cWidth, cHeight);\n\t\t\t\t}\n\t\t\t\te.render(ctx);\n\t\t\t\tif (isFirstRender) {\n\t\t\t\t\tisFirstRender = false;\n\t\t\t\t\tif (svg.opts != null && typeof(svg.opts['renderCallback']) == 'function') svg.opts['renderCallback']();\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tvar waitingForImages = true;\n\t\t\tif (svg.ImagesLoaded()) {\n\t\t\t\twaitingForImages = false;\n\t\t\t\tdraw();\n\t\t\t}\n\t\t\tsvg.intervalID = setInterval(function() { \n\t\t\t\tvar needUpdate = false;\n\t\t\t\t\n\t\t\t\tif (waitingForImages && svg.ImagesLoaded()) {\n\t\t\t\t\twaitingForImages = false;\n\t\t\t\t\tneedUpdate = true;\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// need update from mouse events?\n\t\t\t\tif (svg.opts['ignoreMouse'] != true) {\n\t\t\t\t\tneedUpdate = needUpdate | svg.Mouse.hasEvents();\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// need update from animations?\n\t\t\t\tif (svg.opts['ignoreAnimation'] != true) {\n\t\t\t\t\tfor (var i=0; i<svg.Animations.length; i++) {\n\t\t\t\t\t\tneedUpdate = needUpdate | svg.Animations[i].update(1000 / svg.FRAMERATE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// need update from redraw?\n\t\t\t\tif (svg.opts != null && typeof(svg.opts['forceRedraw']) == 'function') {\n\t\t\t\t\tif (svg.opts['forceRedraw']() == true) needUpdate = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// render if needed\n\t\t\t\tif (needUpdate) {\n\t\t\t\t\tdraw();\t\t\t\t\n\t\t\t\t\tsvg.Mouse.runEvents(); // run and clear our events\n\t\t\t\t}\n\t\t\t}, 1000 / svg.FRAMERATE);\n\t\t}\n\t\t\n\t\tsvg.stop = function() {\n\t\t\tif (svg.intervalID) {\n\t\t\t\tclearInterval(svg.intervalID);\n\t\t\t}\n\t\t}\n\t\t\n\t\tsvg.Mouse = new (function() {\n\t\t\tthis.events = [];\n\t\t\tthis.hasEvents = function() { return this.events.length != 0; }\n\t\t\n\t\t\tthis.onclick = function(x, y) {\n\t\t\t\tthis.events.push({ type: 'onclick', x: x, y: y, \n\t\t\t\t\trun: function(e) { if (e.onclick) e.onclick(); }\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.onmousemove = function(x, y) {\n\t\t\t\tthis.events.push({ type: 'onmousemove', x: x, y: y,\n\t\t\t\t\trun: function(e) { if (e.onmousemove) e.onmousemove(); }\n\t\t\t\t});\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\tthis.eventElements = [];\n\t\t\t\n\t\t\tthis.checkPath = function(element, ctx) {\n\t\t\t\tfor (var i=0; i<this.events.length; i++) {\n\t\t\t\t\tvar e = this.events[i];\n\t\t\t\t\tif (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.checkBoundingBox = function(element, bb) {\n\t\t\t\tfor (var i=0; i<this.events.length; i++) {\n\t\t\t\t\tvar e = this.events[i];\n\t\t\t\t\tif (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element;\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.runEvents = function() {\n\t\t\t\tsvg.ctx.canvas.style.cursor = '';\n\t\t\t\t\n\t\t\t\tfor (var i=0; i<this.events.length; i++) {\n\t\t\t\t\tvar e = this.events[i];\n\t\t\t\t\tvar element = this.eventElements[i];\n\t\t\t\t\twhile (element) {\n\t\t\t\t\t\te.run(element);\n\t\t\t\t\t\telement = element.parent;\n\t\t\t\t\t}\n\t\t\t\t}\t\t\n\t\t\t\n\t\t\t\t// done running, clear\n\t\t\t\tthis.events = []; \n\t\t\t\tthis.eventElements = [];\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn svg;\n\t}\n})();\n\nif (CanvasRenderingContext2D) {\n\tCanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) {\n\t\tcanvg(this.canvas, s, { \n\t\t\tignoreMouse: true, \n\t\t\tignoreAnimation: true, \n\t\t\tignoreDimensions: true, \n\t\t\tignoreClear: true, \n\t\t\toffsetX: dx, \n\t\t\toffsetY: dy, \n\t\t\tscaleWidth: dw, \n\t\t\tscaleHeight: dh\n\t\t});\n\t}\n}/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * CanVGRenderer Extension module\n *\n * (c) 2011-2012 Torstein Hønsi, Erik Olsson\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts */\n\n(function (Highcharts) { // encapsulate\n\tvar UNDEFINED,\n\t\tDIV = 'div',\n\t\tABSOLUTE = 'absolute',\n\t\tRELATIVE = 'relative',\n\t\tHIDDEN = 'hidden',\n\t\tVISIBLE = 'visible',\n\t\tPX = 'px',\n\t\tcss = Highcharts.css,\n\t\tCanVGRenderer = Highcharts.CanVGRenderer,\n\t\tSVGRenderer = Highcharts.SVGRenderer,\n\t\textend = Highcharts.extend,\n\t\tmerge = Highcharts.merge,\n\t\taddEvent = Highcharts.addEvent,\n\t\tcreateElement = Highcharts.createElement,\n\t\tdiscardElement = Highcharts.discardElement;\n\n\t// Extend CanVG renderer on demand, inherit from SVGRenderer\n\textend(CanVGRenderer.prototype, SVGRenderer.prototype);\n\n\t// Add additional functionality:\n\textend(CanVGRenderer.prototype, {\n\t\tcreate: function (chart, container, chartWidth, chartHeight) {\n\t\t\tthis.setContainer(container, chartWidth, chartHeight);\n\t\t\tthis.configure(chart);\n\t\t},\n\t\tsetContainer: function (container, chartWidth, chartHeight) {\n\t\t\tvar containerStyle = container.style,\n\t\t\t\tcontainerParent = container.parentNode,\n\t\t\t\tcontainerLeft = containerStyle.left,\n\t\t\t\tcontainerTop = containerStyle.top,\n\t\t\t\tcontainerOffsetWidth = container.offsetWidth,\n\t\t\t\tcontainerOffsetHeight = container.offsetHeight,\n\t\t\t\tcanvas,\n\t\t\t\tinitialHiddenStyle = { visibility: HIDDEN, position: ABSOLUTE };\n\n\t\t\tthis.init.apply(this, [container, chartWidth, chartHeight]);\n\n\t\t\t// add the canvas above it\n\t\t\tcanvas = createElement('canvas', {\n\t\t\t\twidth: containerOffsetWidth,\n\t\t\t\theight: containerOffsetHeight\n\t\t\t}, {\n\t\t\t\tposition: RELATIVE,\n\t\t\t\tleft: containerLeft,\n\t\t\t\ttop: containerTop\n\t\t\t}, container);\n\t\t\tthis.canvas = canvas;\n\n\t\t\t// Create the tooltip line and div, they are placed as siblings to\n\t\t\t// the container (and as direct childs to the div specified in the html page)\n\t\t\tthis.ttLine = createElement(DIV, null, initialHiddenStyle, containerParent);\n\t\t\tthis.ttDiv = createElement(DIV, null, initialHiddenStyle, containerParent);\n\t\t\tthis.ttTimer = UNDEFINED;\n\n\t\t\t// Move away the svg node to a new div inside the container's parent so we can hide it.\n\t\t\tvar hiddenSvg = createElement(DIV, {\n\t\t\t\twidth: containerOffsetWidth,\n\t\t\t\theight: containerOffsetHeight\n\t\t\t}, {\n\t\t\t\tvisibility: HIDDEN,\n\t\t\t\tleft: containerLeft,\n\t\t\t\ttop: containerTop\n\t\t\t}, containerParent);\n\t\t\tthis.hiddenSvg = hiddenSvg;\n\t\t\thiddenSvg.appendChild(this.box);\n\t\t},\n\n\t\t/**\n\t\t * Configures the renderer with the chart. Attach a listener to the event tooltipRefresh.\n\t\t **/\n\t\tconfigure: function (chart) {\n\t\t\tvar renderer = this,\n\t\t\t\toptions = chart.options.tooltip,\n\t\t\t\tborderWidth = options.borderWidth,\n\t\t\t\ttooltipDiv = renderer.ttDiv,\n\t\t\t\ttooltipDivStyle = options.style,\n\t\t\t\ttooltipLine = renderer.ttLine,\n\t\t\t\tpadding = parseInt(tooltipDivStyle.padding, 10);\n\n\t\t\t// Add border styling from options to the style\n\t\t\ttooltipDivStyle = merge(tooltipDivStyle, {\n\t\t\t\tpadding: padding + PX,\n\t\t\t\t'background-color': options.backgroundColor,\n\t\t\t\t'border-style': 'solid',\n\t\t\t\t'border-width': borderWidth + PX,\n\t\t\t\t'border-radius': options.borderRadius + PX\n\t\t\t});\n\n\t\t\t// Optionally add shadow\n\t\t\tif (options.shadow) {\n\t\t\t\ttooltipDivStyle = merge(tooltipDivStyle, {\n\t\t\t\t\t'box-shadow': '1px 1px 3px gray', // w3c\n\t\t\t\t\t'-webkit-box-shadow': '1px 1px 3px gray' // webkit\n\t\t\t\t});\n\t\t\t}\n\t\t\tcss(tooltipDiv, tooltipDivStyle);\n\n\t\t\t// Set simple style on the line\n\t\t\tcss(tooltipLine, {\n\t\t\t\t'border-left': '1px solid darkgray'\n\t\t\t});\n\n\t\t\t// This event is triggered when a new tooltip should be shown\n\t\t\taddEvent(chart, 'tooltipRefresh', function (args) {\n\t\t\t\tvar chartContainer = chart.container,\n\t\t\t\t\toffsetLeft = chartContainer.offsetLeft,\n\t\t\t\t\toffsetTop = chartContainer.offsetTop,\n\t\t\t\t\tposition;\n\n\t\t\t\t// Set the content of the tooltip\n\t\t\t\ttooltipDiv.innerHTML = args.text;\n\n\t\t\t\t// Compute the best position for the tooltip based on the divs size and container size.\n\t\t\t\tposition = chart.tooltip.getPosition(tooltipDiv.offsetWidth, tooltipDiv.offsetHeight, {plotX: args.x, plotY: args.y});\n\n\t\t\t\tcss(tooltipDiv, {\n\t\t\t\t\tvisibility: VISIBLE,\n\t\t\t\t\tleft: position.x + PX,\n\t\t\t\t\ttop: position.y + PX,\n\t\t\t\t\t'border-color': args.borderColor\n\t\t\t\t});\n\n\t\t\t\t// Position the tooltip line\n\t\t\t\tcss(tooltipLine, {\n\t\t\t\t\tvisibility: VISIBLE,\n\t\t\t\t\tleft: offsetLeft + args.x + PX,\n\t\t\t\t\ttop: offsetTop + chart.plotTop + PX,\n\t\t\t\t\theight: chart.plotHeight  + PX\n\t\t\t\t});\n\n\t\t\t\t// This timeout hides the tooltip after 3 seconds\n\t\t\t\t// First clear any existing timer\n\t\t\t\tif (renderer.ttTimer !== UNDEFINED) {\n\t\t\t\t\tclearTimeout(renderer.ttTimer);\n\t\t\t\t}\n\n\t\t\t\t// Start a new timer that hides tooltip and line\n\t\t\t\trenderer.ttTimer = setTimeout(function () {\n\t\t\t\t\tcss(tooltipDiv, { visibility: HIDDEN });\n\t\t\t\t\tcss(tooltipLine, { visibility: HIDDEN });\n\t\t\t\t}, 3000);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Extend SVGRenderer.destroy to also destroy the elements added by CanVGRenderer.\n\t\t */\n\t\tdestroy: function () {\n\t\t\tvar renderer = this;\n\n\t\t\t// Remove the canvas\n\t\t\tdiscardElement(renderer.canvas);\n\n\t\t\t// Kill the timer\n\t\t\tif (renderer.ttTimer !== UNDEFINED) {\n\t\t\t\tclearTimeout(renderer.ttTimer);\n\t\t\t}\n\n\t\t\t// Remove the divs for tooltip and line\n\t\t\tdiscardElement(renderer.ttLine);\n\t\t\tdiscardElement(renderer.ttDiv);\n\t\t\tdiscardElement(renderer.hiddenSvg);\n\n\t\t\t// Continue with base class\n\t\t\treturn SVGRenderer.prototype.destroy.apply(renderer);\n\t\t},\n\n\t\t/**\n\t\t * Take a color and return it if it's a string, do not make it a gradient even if it is a\n\t\t * gradient. Currently canvg cannot render gradients (turns out black),\n\t\t * see: http://code.google.com/p/canvg/issues/detail?id=104\n\t\t *\n\t\t * @param {Object} color The color or config object\n\t\t */\n\t\tcolor: function (color, elem, prop) {\n\t\t\tif (color && color.linearGradient) {\n\t\t\t\t// Pick the end color and forward to base implementation\n\t\t\t\tcolor = color.stops[color.stops.length - 1][1];\n\t\t\t}\n\t\t\treturn SVGRenderer.prototype.color.call(this, color, elem, prop);\n\t\t},\n\n\t\t/**\n\t\t * Draws the SVG on the canvas or adds a draw invokation to the deferred list.\n\t\t */\n\t\tdraw: function () {\n\t\t\tvar renderer = this;\n\t\t\twindow.canvg(renderer.canvas, renderer.hiddenSvg.innerHTML);\n\t\t}\n\t});\n}(Highcharts));\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/data.js",
    "content": "/*\n Data plugin for Highcharts\n\n (c) 2012-2013 Torstein Hønsi\n Last revision 2013-06-07\n\n License: www.highcharts.com/license\n*/\n(function(h){var k=h.each,m=function(b,a){this.init(b,a)};h.extend(m.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.columns.length?this.dataFound():(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=b&&b.chart&&b.chart.type,c=[];k(b&&b.series||[],function(b){c.push((h.seriesTypes[b.type||a||\"line\"].prototype.pointArrayMap||[0]).length)});this.valueCount=\n{global:(h.seriesTypes[a||\"line\"].prototype.pointArrayMap||[0]).length,individual:c}},dataFound:function(){this.parseTypes();this.findHeaderRow();this.parsed();this.complete()},parseCSV:function(){var b=this,a=this.options,c=a.csv,d=this.columns,f=a.startRow||0,i=a.endRow||Number.MAX_VALUE,j=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g=0;c&&(c=c.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\").split(a.lineDelimiter||\"\\n\"),k(c,function(c,h){var n=b.trim(c),p=n.indexOf(\"#\")===0;h>=f&&h<=i&&!p&&n!==\"\"&&\n(n=c.split(a.itemDelimiter||\",\"),k(n,function(b,a){a>=j&&a<=e&&(d[a-j]||(d[a-j]=[]),d[a-j][g]=b)}),g+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,c=this.columns,d=b.startRow||0,f=b.endRow||Number.MAX_VALUE,i=b.startColumn||0,j=b.endColumn||Number.MAX_VALUE,e;a&&(typeof a===\"string\"&&(a=document.getElementById(a)),k(a.getElementsByTagName(\"tr\"),function(a,b){e=0;b>=d&&b<=f&&k(a.childNodes,function(a){if((a.tagName===\"TD\"||a.tagName===\"TH\")&&e>=i&&e<=j)c[e]||(c[e]=[]),\nc[e][b-d]=a.innerHTML,e+=1})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this,a=this.options,c=a.googleSpreadsheetKey,d=this.columns,f=a.startRow||0,i=a.endRow||Number.MAX_VALUE,j=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,h;c&&jQuery.getJSON(\"https://spreadsheets.google.com/feeds/cells/\"+c+\"/\"+(a.googleSpreadsheetWorksheet||\"od6\")+\"/public/values?alt=json-in-script&callback=?\",function(a){var a=a.feed.entry,c,k=a.length,m=0,o=0,l;for(l=0;l<k;l++)c=a[l],m=Math.max(m,c.gs$cell.col),\no=Math.max(o,c.gs$cell.row);for(l=0;l<m;l++)if(l>=j&&l<=e)d[l-j]=[],d[l-j].length=Math.min(o,i-f);for(l=0;l<k;l++)if(c=a[l],g=c.gs$cell.row-1,h=c.gs$cell.col-1,h>=j&&h<=e&&g>=f&&g<=i)d[h-j][g-f]=c.content.$t;b.dataFound()})},findHeaderRow:function(){k(this.columns,function(){});this.headerRow=0},trim:function(b){return typeof b===\"string\"?b.replace(/^\\s+|\\s+$/g,\"\"):b},parseTypes:function(){for(var b=this.columns,a=b.length,c,d,f,i;a--;)for(c=b[a].length;c--;)d=b[a][c],f=parseFloat(d),i=this.trim(d),\ni==f?(b[a][c]=f,f>31536E6?b[a].isDatetime=!0:b[a].isNumeric=!0):(d=this.parseDate(d),a===0&&typeof d===\"number\"&&!isNaN(d)?(b[a][c]=d,b[a].isDatetime=!0):b[a][c]=i===\"\"?null:i)},dateFormats:{\"YYYY-mm-dd\":{regex:\"^([0-9]{4})-([0-9]{2})-([0-9]{2})$\",parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}}},parseDate:function(b){var a=this.options.parseDate,c,d,f;a&&(c=a(b));if(typeof b===\"string\")for(d in this.dateFormats)a=this.dateFormats[d],(f=b.match(a.regex))&&(c=a.parser(f));return c},rowsToColumns:function(b){var a,\nc,d,f,i;if(b){i=[];c=b.length;for(a=0;a<c;a++){f=b[a].length;for(d=0;d<f;d++)i[d]||(i[d]=[]),i[d][a]=b[a][d]}}return i},parsed:function(){this.options.parsed&&this.options.parsed.call(this,this.columns)},complete:function(){var b=this.columns,a,c,d=this.options,f,i,j,e,g,k;if(d.complete){this.getColumnDistribution();b.length>1&&(a=b.shift(),this.headerRow===0&&a.shift(),a.isDatetime?c=\"datetime\":a.isNumeric||(c=\"category\"));for(e=0;e<b.length;e++)if(this.headerRow===0)b[e].name=b[e].shift();i=[];\nfor(e=0,k=0;e<b.length;k++){f=h.pick(this.valueCount.individual[k],this.valueCount.global);j=[];for(g=0;g<b[e].length;g++)j[g]=[a[g],b[e][g]!==void 0?b[e][g]:null],f>1&&j[g].push(b[e+1][g]!==void 0?b[e+1][g]:null),f>2&&j[g].push(b[e+2][g]!==void 0?b[e+2][g]:null),f>3&&j[g].push(b[e+3][g]!==void 0?b[e+3][g]:null),f>4&&j[g].push(b[e+4][g]!==void 0?b[e+4][g]:null);i[k]={name:b[e].name,data:j};e+=f}d.complete({xAxis:{type:c},series:i})}}});h.Data=m;h.data=function(b,a){return new m(b,a)};h.wrap(h.Chart.prototype,\n\"init\",function(b,a,c){var d=this;a&&a.data?h.data(h.extend(a.data,{complete:function(f){a.series&&k(a.series,function(b,c){a.series[c]=h.merge(b,f.series[c])});a=h.merge(f,a);b.call(d,a,c)}}),a):b.call(d,a,c)})})(Highcharts);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/data.src.js",
    "content": "/**\n * @license Data plugin for Highcharts\n *\n * (c) 2012-2013 Torstein Hønsi\n * Last revision 2013-06-07\n *\n * License: www.highcharts.com/license\n */\n\n/*\n * The Highcharts Data plugin is a utility to ease parsing of input sources like\n * CSV, HTML tables or grid views into basic configuration options for use \n * directly in the Highcharts constructor.\n *\n * Demo: http://jsfiddle.net/highcharts/SnLFj/\n *\n * --- OPTIONS ---\n *\n * - columns : Array<Array<Mixed>>\n * A two-dimensional array representing the input data on tabular form. This input can\n * be used when the data is already parsed, for example from a grid view component.\n * Each cell can be a string or number. If not switchRowsAndColumns is set, the columns\n * are interpreted as series. See also the rows option.\n *\n * - complete : Function(chartOptions)\n * The callback that is evaluated when the data is finished loading, optionally from an \n * external source, and parsed. The first argument passed is a finished chart options\n * object, containing series and an xAxis with categories if applicable. Thise options\n * can be extended with additional options and passed directly to the chart constructor.\n *\n * - csv : String\n * A comma delimited string to be parsed. Related options are startRow, endRow, startColumn\n * and endColumn to delimit what part of the table is used. The lineDelimiter and \n * itemDelimiter options define the CSV delimiter formats.\n * \n * - endColumn : Integer\n * In tabular input data, the first row (indexed by 0) to use. Defaults to the last \n * column containing data.\n *\n * - endRow : Integer\n * In tabular input data, the last row (indexed by 0) to use. Defaults to the last row\n * containing data.\n *\n * - googleSpreadsheetKey : String \n * A Google Spreadsheet key. See https://developers.google.com/gdata/samples/spreadsheet_sample\n * for general information on GS.\n *\n * - googleSpreadsheetWorksheet : String \n * The Google Spreadsheet worksheet. The available id's can be read from \n * https://spreadsheets.google.com/feeds/worksheets/{key}/public/basic\n *\n * - itemDelimiter : String\n * Item or cell delimiter for parsing CSV. Defaults to \",\".\n *\n * - lineDelimiter : String\n * Line delimiter for parsing CSV. Defaults to \"\\n\".\n *\n * - parsed : Function\n * A callback function to access the parsed columns, the two-dimentional input data\n * array directly, before they are interpreted into series data and categories.\n *\n * - parseDate : Function\n * A callback function to parse string representations of dates into JavaScript timestamps.\n * Return an integer on success.\n *\n * - rows : Array<Array<Mixed>>\n * The same as the columns input option, but defining rows intead of columns.\n *\n * - startColumn : Integer\n * In tabular input data, the first column (indexed by 0) to use. \n *\n * - startRow : Integer\n * In tabular input data, the first row (indexed by 0) to use.\n *\n * - table : String|HTMLElement\n * A HTML table or the id of such to be parsed as input data. Related options ara startRow,\n * endRow, startColumn and endColumn to delimit what part of the table is used.\n */\n\n// JSLint options:\n/*global jQuery */\n\n(function (Highcharts) {\t\n\t\n\t// Utilities\n\tvar each = Highcharts.each;\n\t\n\t\n\t// The Data constructor\n\tvar Data = function (dataOptions, chartOptions) {\n\t\tthis.init(dataOptions, chartOptions);\n\t};\n\t\n\t// Set the prototype properties\n\tHighcharts.extend(Data.prototype, {\n\t\t\n\t/**\n\t * Initialize the Data object with the given options\n\t */\n\tinit: function (options, chartOptions) {\n\t\tthis.options = options;\n\t\tthis.chartOptions = chartOptions;\n\t\tthis.columns = options.columns || this.rowsToColumns(options.rows) || [];\n\n\t\t// No need to parse or interpret anything\n\t\tif (this.columns.length) {\n\t\t\tthis.dataFound();\n\n\t\t// Parse and interpret\n\t\t} else {\n\n\t\t\t// Parse a CSV string if options.csv is given\n\t\t\tthis.parseCSV();\n\t\t\t\n\t\t\t// Parse a HTML table if options.table is given\n\t\t\tthis.parseTable();\n\n\t\t\t// Parse a Google Spreadsheet \n\t\t\tthis.parseGoogleSpreadsheet();\t\n\t\t}\n\n\t},\n\n\t/**\n\t * Get the column distribution. For example, a line series takes a single column for \n\t * Y values. A range series takes two columns for low and high values respectively,\n\t * and an OHLC series takes four columns.\n\t */\n\tgetColumnDistribution: function () {\n\t\tvar chartOptions = this.chartOptions,\n\t\t\tgetValueCount = function (type) {\n\t\t\t\treturn (Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap || [0]).length;\n\t\t\t},\n\t\t\tglobalType = chartOptions && chartOptions.chart && chartOptions.chart.type,\n\t\t\tindividualCounts = [];\n\n\t\teach((chartOptions && chartOptions.series) || [], function (series) {\n\t\t\tindividualCounts.push(getValueCount(series.type || globalType));\n\t\t});\n\n\t\tthis.valueCount = {\n\t\t\tglobal: getValueCount(globalType),\n\t\t\tindividual: individualCounts\n\t\t};\n\t},\n\n\n\tdataFound: function () {\n\t\t// Interpret the values into right types\n\t\tthis.parseTypes();\n\t\t\n\t\t// Use first row for series names?\n\t\tthis.findHeaderRow();\n\t\t\n\t\t// Handle columns if a handleColumns callback is given\n\t\tthis.parsed();\n\t\t\n\t\t// Complete if a complete callback is given\n\t\tthis.complete();\n\t\t\n\t},\n\t\n\t/**\n\t * Parse a CSV input string\n\t */\n\tparseCSV: function () {\n\t\tvar self = this,\n\t\t\toptions = this.options,\n\t\t\tcsv = options.csv,\n\t\t\tcolumns = this.columns,\n\t\t\tstartRow = options.startRow || 0,\n\t\t\tendRow = options.endRow || Number.MAX_VALUE,\n\t\t\tstartColumn = options.startColumn || 0,\n\t\t\tendColumn = options.endColumn || Number.MAX_VALUE,\n\t\t\tlines,\n\t\t\tactiveRowNo = 0;\n\t\t\t\n\t\tif (csv) {\n\t\t\t\n\t\t\tlines = csv\n\t\t\t\t.replace(/\\r\\n/g, \"\\n\") // Unix\n\t\t\t\t.replace(/\\r/g, \"\\n\") // Mac\n\t\t\t\t.split(options.lineDelimiter || \"\\n\");\n\t\t\t\n\t\t\teach(lines, function (line, rowNo) {\n\t\t\t\tvar trimmed = self.trim(line),\n\t\t\t\t\tisComment = trimmed.indexOf('#') === 0,\n\t\t\t\t\tisBlank = trimmed === '',\n\t\t\t\t\titems;\n\t\t\t\t\n\t\t\t\tif (rowNo >= startRow && rowNo <= endRow && !isComment && !isBlank) {\n\t\t\t\t\titems = line.split(options.itemDelimiter || ',');\n\t\t\t\t\teach(items, function (item, colNo) {\n\t\t\t\t\t\tif (colNo >= startColumn && colNo <= endColumn) {\n\t\t\t\t\t\t\tif (!columns[colNo - startColumn]) {\n\t\t\t\t\t\t\t\tcolumns[colNo - startColumn] = [];\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcolumns[colNo - startColumn][activeRowNo] = item;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tactiveRowNo += 1;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.dataFound();\n\t\t}\n\t},\n\t\n\t/**\n\t * Parse a HTML table\n\t */\n\tparseTable: function () {\n\t\tvar options = this.options,\n\t\t\ttable = options.table,\n\t\t\tcolumns = this.columns,\n\t\t\tstartRow = options.startRow || 0,\n\t\t\tendRow = options.endRow || Number.MAX_VALUE,\n\t\t\tstartColumn = options.startColumn || 0,\n\t\t\tendColumn = options.endColumn || Number.MAX_VALUE,\n\t\t\tcolNo;\n\t\t\t\n\t\tif (table) {\n\t\t\t\n\t\t\tif (typeof table === 'string') {\n\t\t\t\ttable = document.getElementById(table);\n\t\t\t}\n\t\t\t\n\t\t\teach(table.getElementsByTagName('tr'), function (tr, rowNo) {\n\t\t\t\tcolNo = 0; \n\t\t\t\tif (rowNo >= startRow && rowNo <= endRow) {\n\t\t\t\t\teach(tr.childNodes, function (item) {\n\t\t\t\t\t\tif ((item.tagName === 'TD' || item.tagName === 'TH') && colNo >= startColumn && colNo <= endColumn) {\n\t\t\t\t\t\t\tif (!columns[colNo]) {\n\t\t\t\t\t\t\t\tcolumns[colNo] = [];\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcolumns[colNo][rowNo - startRow] = item.innerHTML;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcolNo += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.dataFound(); // continue\n\t\t}\n\t},\n\n\t/**\n\t * TODO: \n\t * - switchRowsAndColumns\n\t */\n\tparseGoogleSpreadsheet: function () {\n\t\tvar self = this,\n\t\t\toptions = this.options,\n\t\t\tgoogleSpreadsheetKey = options.googleSpreadsheetKey,\n\t\t\tcolumns = this.columns,\n\t\t\tstartRow = options.startRow || 0,\n\t\t\tendRow = options.endRow || Number.MAX_VALUE,\n\t\t\tstartColumn = options.startColumn || 0,\n\t\t\tendColumn = options.endColumn || Number.MAX_VALUE,\n\t\t\tgr, // google row\n\t\t\tgc; // google column\n\n\t\tif (googleSpreadsheetKey) {\n\t\t\tjQuery.getJSON('https://spreadsheets.google.com/feeds/cells/' + \n\t\t\t\t  googleSpreadsheetKey + '/' + (options.googleSpreadsheetWorksheet || 'od6') +\n\t\t\t\t\t  '/public/values?alt=json-in-script&callback=?',\n\t\t\t\t\t  function (json) {\n\t\t\t\t\t\n\t\t\t\t// Prepare the data from the spreadsheat\n\t\t\t\tvar cells = json.feed.entry,\n\t\t\t\t\tcell,\n\t\t\t\t\tcellCount = cells.length,\n\t\t\t\t\tcolCount = 0,\n\t\t\t\t\trowCount = 0,\n\t\t\t\t\ti;\n\t\t\t\n\t\t\t\t// First, find the total number of columns and rows that \n\t\t\t\t// are actually filled with data\n\t\t\t\tfor (i = 0; i < cellCount; i++) {\n\t\t\t\t\tcell = cells[i];\n\t\t\t\t\tcolCount = Math.max(colCount, cell.gs$cell.col);\n\t\t\t\t\trowCount = Math.max(rowCount, cell.gs$cell.row);\t\t\t\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// Set up arrays containing the column data\n\t\t\t\tfor (i = 0; i < colCount; i++) {\n\t\t\t\t\tif (i >= startColumn && i <= endColumn) {\n\t\t\t\t\t\t// Create new columns with the length of either end-start or rowCount\n\t\t\t\t\t\tcolumns[i - startColumn] = [];\n\n\t\t\t\t\t\t// Setting the length to avoid jslint warning\n\t\t\t\t\t\tcolumns[i - startColumn].length = Math.min(rowCount, endRow - startRow);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Loop over the cells and assign the value to the right\n\t\t\t\t// place in the column arrays\n\t\t\t\tfor (i = 0; i < cellCount; i++) {\n\t\t\t\t\tcell = cells[i];\n\t\t\t\t\tgr = cell.gs$cell.row - 1; // rows start at 1\n\t\t\t\t\tgc = cell.gs$cell.col - 1; // columns start at 1\n\n\t\t\t\t\t// If both row and col falls inside start and end\n\t\t\t\t\t// set the transposed cell value in the newly created columns\n\t\t\t\t\tif (gc >= startColumn && gc <= endColumn &&\n\t\t\t\t\t\tgr >= startRow && gr <= endRow) {\n\t\t\t\t\t\tcolumns[gc - startColumn][gr - startRow] = cell.content.$t;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.dataFound();\n\t\t\t});\n\t\t}\n\t},\n\t\n\t/**\n\t * Find the header row. For now, we just check whether the first row contains\n\t * numbers or strings. Later we could loop down and find the first row with \n\t * numbers.\n\t */\n\tfindHeaderRow: function () {\n\t\tvar headerRow = 0;\n\t\teach(this.columns, function (column) {\n\t\t\tif (typeof column[0] !== 'string') {\n\t\t\t\theaderRow = null;\n\t\t\t}\n\t\t});\n\t\tthis.headerRow = 0;\t\t\t\n\t},\n\t\n\t/**\n\t * Trim a string from whitespace\n\t */\n\ttrim: function (str) {\n\t\treturn typeof str === 'string' ? str.replace(/^\\s+|\\s+$/g, '') : str;\n\t},\n\t\n\t/**\n\t * Parse numeric cells in to number types and date types in to true dates.\n\t * @param {Object} columns\n\t */\n\tparseTypes: function () {\n\t\tvar columns = this.columns,\n\t\t\tcol = columns.length, \n\t\t\trow,\n\t\t\tval,\n\t\t\tfloatVal,\n\t\t\ttrimVal,\n\t\t\tdateVal;\n\t\t\t\n\t\twhile (col--) {\n\t\t\trow = columns[col].length;\n\t\t\twhile (row--) {\n\t\t\t\tval = columns[col][row];\n\t\t\t\tfloatVal = parseFloat(val);\n\t\t\t\ttrimVal = this.trim(val);\n\n\t\t\t\t/*jslint eqeq: true*/\n\t\t\t\tif (trimVal == floatVal) { // is numeric\n\t\t\t\t/*jslint eqeq: false*/\n\t\t\t\t\tcolumns[col][row] = floatVal;\n\t\t\t\t\t\n\t\t\t\t\t// If the number is greater than milliseconds in a year, assume datetime\n\t\t\t\t\tif (floatVal > 365 * 24 * 3600 * 1000) {\n\t\t\t\t\t\tcolumns[col].isDatetime = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolumns[col].isNumeric = true;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t} else { // string, continue to determine if it is a date string or really a string\n\t\t\t\t\tdateVal = this.parseDate(val);\n\t\t\t\t\t\n\t\t\t\t\tif (col === 0 && typeof dateVal === 'number' && !isNaN(dateVal)) { // is date\n\t\t\t\t\t\tcolumns[col][row] = dateVal;\n\t\t\t\t\t\tcolumns[col].isDatetime = true;\n\t\t\t\t\t\n\t\t\t\t\t} else { // string\n\t\t\t\t\t\tcolumns[col][row] = trimVal === '' ? null : trimVal;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t},\n\t//*\n\tdateFormats: {\n\t\t'YYYY-mm-dd': {\n\t\t\tregex: '^([0-9]{4})-([0-9]{2})-([0-9]{2})$',\n\t\t\tparser: function (match) {\n\t\t\t\treturn Date.UTC(+match[1], match[2] - 1, +match[3]);\n\t\t\t}\n\t\t}\n\t},\n\t// */\n\t/**\n\t * Parse a date and return it as a number. Overridable through options.parseDate.\n\t */\n\tparseDate: function (val) {\n\t\tvar parseDate = this.options.parseDate,\n\t\t\tret,\n\t\t\tkey,\n\t\t\tformat,\n\t\t\tmatch;\n\n\t\tif (parseDate) {\n\t\t\tret = parseDate(val);\n\t\t}\n\t\t\t\n\t\tif (typeof val === 'string') {\n\t\t\tfor (key in this.dateFormats) {\n\t\t\t\tformat = this.dateFormats[key];\n\t\t\t\tmatch = val.match(format.regex);\n\t\t\t\tif (match) {\n\t\t\t\t\tret = format.parser(match);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\t\n\t/**\n\t * Reorganize rows into columns\n\t */\n\trowsToColumns: function (rows) {\n\t\tvar row,\n\t\t\trowsLength,\n\t\t\tcol,\n\t\t\tcolsLength,\n\t\t\tcolumns;\n\n\t\tif (rows) {\n\t\t\tcolumns = [];\n\t\t\trowsLength = rows.length;\n\t\t\tfor (row = 0; row < rowsLength; row++) {\n\t\t\t\tcolsLength = rows[row].length;\n\t\t\t\tfor (col = 0; col < colsLength; col++) {\n\t\t\t\t\tif (!columns[col]) {\n\t\t\t\t\t\tcolumns[col] = [];\n\t\t\t\t\t}\n\t\t\t\t\tcolumns[col][row] = rows[row][col];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn columns;\n\t},\n\t\n\t/**\n\t * A hook for working directly on the parsed columns\n\t */\n\tparsed: function () {\n\t\tif (this.options.parsed) {\n\t\t\tthis.options.parsed.call(this, this.columns);\n\t\t}\n\t},\n\t\n\t/**\n\t * If a complete callback function is provided in the options, interpret the \n\t * columns into a Highcharts options object.\n\t */\n\tcomplete: function () {\n\t\t\n\t\tvar columns = this.columns,\n\t\t\tfirstCol,\n\t\t\ttype,\n\t\t\toptions = this.options,\n\t\t\tvalueCount,\n\t\t\tseries,\n\t\t\tdata,\n\t\t\ti,\n\t\t\tj,\n\t\t\tseriesIndex;\n\t\t\t\n\t\t\n\t\tif (options.complete) {\n\n\t\t\tthis.getColumnDistribution();\n\t\t\t\n\t\t\t// Use first column for X data or categories?\n\t\t\tif (columns.length > 1) {\n\t\t\t\tfirstCol = columns.shift();\n\t\t\t\tif (this.headerRow === 0) {\n\t\t\t\t\tfirstCol.shift(); // remove the first cell\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif (firstCol.isDatetime) {\n\t\t\t\t\ttype = 'datetime';\n\t\t\t\t} else if (!firstCol.isNumeric) {\n\t\t\t\t\ttype = 'category';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get the names and shift the top row\n\t\t\tfor (i = 0; i < columns.length; i++) {\n\t\t\t\tif (this.headerRow === 0) {\n\t\t\t\t\tcolumns[i].name = columns[i].shift();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Use the next columns for series\n\t\t\tseries = [];\n\t\t\tfor (i = 0, seriesIndex = 0; i < columns.length; seriesIndex++) {\n\n\t\t\t\t// This series' value count\n\t\t\t\tvalueCount = Highcharts.pick(this.valueCount.individual[seriesIndex], this.valueCount.global);\n\t\t\t\t\n\t\t\t\t// Iterate down the cells of each column and add data to the series\n\t\t\t\tdata = [];\n\t\t\t\tfor (j = 0; j < columns[i].length; j++) {\n\t\t\t\t\tdata[j] = [\n\t\t\t\t\t\tfirstCol[j], \n\t\t\t\t\t\tcolumns[i][j] !== undefined ? columns[i][j] : null\n\t\t\t\t\t];\n\t\t\t\t\tif (valueCount > 1) {\n\t\t\t\t\t\tdata[j].push(columns[i + 1][j] !== undefined ? columns[i + 1][j] : null);\n\t\t\t\t\t}\n\t\t\t\t\tif (valueCount > 2) {\n\t\t\t\t\t\tdata[j].push(columns[i + 2][j] !== undefined ? columns[i + 2][j] : null);\n\t\t\t\t\t}\n\t\t\t\t\tif (valueCount > 3) {\n\t\t\t\t\t\tdata[j].push(columns[i + 3][j] !== undefined ? columns[i + 3][j] : null);\n\t\t\t\t\t}\n\t\t\t\t\tif (valueCount > 4) {\n\t\t\t\t\t\tdata[j].push(columns[i + 4][j] !== undefined ? columns[i + 4][j] : null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add the series\n\t\t\t\tseries[seriesIndex] = {\n\t\t\t\t\tname: columns[i].name,\n\t\t\t\t\tdata: data\n\t\t\t\t};\n\n\t\t\t\ti += valueCount;\n\t\t\t}\n\t\t\t\n\t\t\t// Do the callback\n\t\t\toptions.complete({\n\t\t\t\txAxis: {\n\t\t\t\t\ttype: type\n\t\t\t\t},\n\t\t\t\tseries: series\n\t\t\t});\n\t\t}\n\t}\n\t});\n\t\n\t// Register the Data prototype and data function on Highcharts\n\tHighcharts.Data = Data;\n\tHighcharts.data = function (options, chartOptions) {\n\t\treturn new Data(options, chartOptions);\n\t};\n\n\t// Extend Chart.init so that the Chart constructor accepts a new configuration\n\t// option group, data.\n\tHighcharts.wrap(Highcharts.Chart.prototype, 'init', function (proceed, userOptions, callback) {\n\t\tvar chart = this;\n\n\t\tif (userOptions && userOptions.data) {\n\t\t\tHighcharts.data(Highcharts.extend(userOptions.data, {\n\t\t\t\tcomplete: function (dataOptions) {\n\t\t\t\t\t\n\t\t\t\t\t// Merge series configs\n\t\t\t\t\tif (userOptions.series) {\n\t\t\t\t\t\teach(userOptions.series, function (series, i) {\n\t\t\t\t\t\t\tuserOptions.series[i] = Highcharts.merge(series, dataOptions.series[i]);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Do the merge\n\t\t\t\t\tuserOptions = Highcharts.merge(dataOptions, userOptions);\n\n\t\t\t\t\tproceed.call(chart, userOptions, callback);\n\t\t\t\t}\n\t\t\t}), userOptions);\n\t\t} else {\n\t\t\tproceed.call(chart, userOptions, callback);\n\t\t}\n\t});\n\n}(Highcharts));\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/drilldown.js",
    "content": "(function(e){function q(b,a,c){return\"rgba(\"+[Math.round(b[0]+(a[0]-b[0])*c),Math.round(b[1]+(a[1]-b[1])*c),Math.round(b[2]+(a[2]-b[2])*c),b[3]+(a[3]-b[3])*c].join(\",\")+\")\"}var m=function(){},j=e.getOptions(),g=e.each,n=e.extend,o=e.wrap,h=e.Chart,i=e.seriesTypes,k=i.pie,l=i.column,r=HighchartsAdapter.fireEvent;n(j.lang,{drillUpText:\"◁ Back to {series.name}\"});j.drilldown={activeAxisLabelStyle:{cursor:\"pointer\",color:\"#039\",fontWeight:\"bold\",textDecoration:\"underline\"},activeDataLabelStyle:{cursor:\"pointer\",\ncolor:\"#039\",fontWeight:\"bold\",textDecoration:\"underline\"},animation:{duration:500},drillUpButton:{position:{align:\"right\",x:-10,y:10}}};e.SVGRenderer.prototype.Element.prototype.fadeIn=function(){this.attr({opacity:0.1,visibility:\"visible\"}).animate({opacity:1},{duration:250})};h.prototype.drilldownLevels=[];h.prototype.addSeriesAsDrilldown=function(b,a){var c=b.series,d=c.xAxis,f=c.yAxis,e;e=b.color||c.color;var g,a=n({color:e},a);g=HighchartsAdapter.inArray(this,c.points);this.drilldownLevels.push({seriesOptions:c.userOptions,\nshapeArgs:b.shapeArgs,bBox:b.graphic.getBBox(),color:e,newSeries:a,pointOptions:c.options.data[g],pointIndex:g,oldExtremes:{xMin:d&&d.userMin,xMax:d&&d.userMax,yMin:f&&f.userMin,yMax:f&&f.userMax}});e=this.addSeries(a,!1);if(d)d.oldPos=d.pos,d.userMin=d.userMax=null,f.userMin=f.userMax=null;if(c.type===e.type)e.animate=e.animateDrilldown||m,e.options.animation=!0;c.remove(!1);this.redraw();this.showDrillUpButton()};h.prototype.getDrilldownBackText=function(){return this.options.lang.drillUpText.replace(\"{series.name}\",\nthis.drilldownLevels[this.drilldownLevels.length-1].seriesOptions.name)};h.prototype.showDrillUpButton=function(){var b=this,a=this.getDrilldownBackText(),c=b.options.drilldown.drillUpButton;this.drillUpButton?this.drillUpButton.attr({text:a}).align():this.drillUpButton=this.renderer.button(a,null,null,function(){b.drillUp()}).attr(n({align:c.position.align,zIndex:9},c.theme)).add().align(c.position,!1,c.relativeTo||\"plotBox\")};h.prototype.drillUp=function(){var b=this.drilldownLevels.pop(),a=this.series[0],\nc=b.oldExtremes,d=this.addSeries(b.seriesOptions,!1);r(this,\"drillup\",{seriesOptions:b.seriesOptions});if(d.type===a.type)d.drilldownLevel=b,d.animate=d.animateDrillupTo||m,d.options.animation=!0,a.animateDrillupFrom&&a.animateDrillupFrom(b);a.remove(!1);d.xAxis&&(d.xAxis.setExtremes(c.xMin,c.xMax,!1),d.yAxis.setExtremes(c.yMin,c.yMax,!1));this.redraw();this.drilldownLevels.length===0?this.drillUpButton=this.drillUpButton.destroy():this.drillUpButton.attr({text:this.getDrilldownBackText()}).align()};\nk.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],c=this.chart.options.drilldown.animation,d=a.shapeArgs,f=d.start,s=(d.end-f)/this.points.length,h=e.Color(a.color).rgba;b||g(this.points,function(a,b){var g=e.Color(a.color).rgba;a.graphic.attr(e.merge(d,{start:f+b*s,end:f+(b+1)*s})).animate(a.shapeArgs,e.merge(c,{step:function(a,d){d.prop===\"start\"&&this.attr({fill:q(h,g,d.pos)})}}))})};k.prototype.animateDrillupTo=l.prototype.animateDrillupTo=\nfunction(b){if(!b){var a=this,c=a.drilldownLevel;g(this.points,function(a){a.graphic.hide();a.dataLabel&&a.dataLabel.hide();a.connector&&a.connector.hide()});setTimeout(function(){g(a.points,function(a,b){var e=b===c.pointIndex?\"show\":\"fadeIn\";a.graphic[e]();if(a.dataLabel)a.dataLabel[e]();if(a.connector)a.connector[e]()})},Math.max(this.chart.options.drilldown.animation.duration-50,0));this.animate=m}};l.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-\n1].shapeArgs,c=this.chart.options.drilldown.animation;b||(a.x+=this.xAxis.oldPos-this.xAxis.pos,g(this.points,function(b){b.graphic.attr(a).animate(b.shapeArgs,c)}))};l.prototype.animateDrillupFrom=k.prototype.animateDrillupFrom=function(b){var a=this.chart.options.drilldown.animation,c=this.group;delete this.group;g(this.points,function(d){var f=d.graphic,g=e.Color(d.color).rgba;delete d.graphic;f.animate(b.shapeArgs,e.merge(a,{step:function(a,c){c.prop===\"start\"&&this.attr({fill:q(g,e.Color(b.color).rgba,\nc.pos)})},complete:function(){f.destroy();c&&(c=c.destroy())}}))})};e.Point.prototype.doDrilldown=function(){for(var b=this.series.chart,a=b.options.drilldown,c=a.series.length,d;c--&&!d;)a.series[c].id===this.drilldown&&(d=a.series[c]);r(b,\"drilldown\",{point:this,seriesOptions:d});d&&b.addSeriesAsDrilldown(this,d)};o(e.Point.prototype,\"init\",function(b,a,c,d){var f=b.call(this,a,c,d),b=a.chart,a=(a=a.xAxis&&a.xAxis.ticks[d])&&a.label;if(f.drilldown){if(e.addEvent(f,\"click\",function(){f.doDrilldown()}),\na){if(!a._basicStyle)a._basicStyle=a.element.getAttribute(\"style\");a.addClass(\"highcharts-drilldown-axis-label\").css(b.options.drilldown.activeAxisLabelStyle).on(\"click\",function(){f.doDrilldown&&f.doDrilldown()})}}else a&&a._basicStyle&&a.element.setAttribute(\"style\",a._basicStyle);return f});o(e.Series.prototype,\"drawDataLabels\",function(b){var a=this.chart.options.drilldown.activeDataLabelStyle;b.call(this);g(this.points,function(b){if(b.drilldown&&b.dataLabel)b.dataLabel.attr({\"class\":\"highcharts-drilldown-data-label\"}).css(a).on(\"click\",\nfunction(){b.doDrilldown()})})});l.prototype.supportsDrilldown=!0;k.prototype.supportsDrilldown=!0;var p,j=function(b){b.call(this);g(this.points,function(a){a.drilldown&&a.graphic&&a.graphic.attr({\"class\":\"highcharts-drilldown-point\"}).css({cursor:\"pointer\"})})};for(p in i)i[p].prototype.supportsDrilldown&&o(i[p].prototype,\"drawTracker\",j)})(Highcharts);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/drilldown.src.js",
    "content": "/**\n * Highcharts Drilldown plugin\n * \n * Author: Torstein Honsi\n * Last revision: 2013-02-18\n * License: MIT License\n *\n * Demo: http://jsfiddle.net/highcharts/Vf3yT/\n */\n\n/*global HighchartsAdapter*/\n(function (H) {\n\n\t\"use strict\";\n\n\tvar noop = function () {},\n\t\tdefaultOptions = H.getOptions(),\n\t\teach = H.each,\n\t\textend = H.extend,\n\t\twrap = H.wrap,\n\t\tChart = H.Chart,\n\t\tseriesTypes = H.seriesTypes,\n\t\tPieSeries = seriesTypes.pie,\n\t\tColumnSeries = seriesTypes.column,\n\t\tfireEvent = HighchartsAdapter.fireEvent;\n\n\t// Utilities\n\tfunction tweenColors(startColor, endColor, pos) {\n\t\tvar rgba = [\n\t\t\t\tMath.round(startColor[0] + (endColor[0] - startColor[0]) * pos),\n\t\t\t\tMath.round(startColor[1] + (endColor[1] - startColor[1]) * pos),\n\t\t\t\tMath.round(startColor[2] + (endColor[2] - startColor[2]) * pos),\n\t\t\t\tstartColor[3] + (endColor[3] - startColor[3]) * pos\n\t\t\t];\n\t\treturn 'rgba(' + rgba.join(',') + ')';\n\t}\n\n\t// Add language\n\textend(defaultOptions.lang, {\n\t\tdrillUpText: '◁ Back to {series.name}'\n\t});\n\tdefaultOptions.drilldown = {\n\t\tactiveAxisLabelStyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#039',\n\t\t\tfontWeight: 'bold',\n\t\t\ttextDecoration: 'underline'\t\t\t\n\t\t},\n\t\tactiveDataLabelStyle: {\n\t\t\tcursor: 'pointer',\n\t\t\tcolor: '#039',\n\t\t\tfontWeight: 'bold',\n\t\t\ttextDecoration: 'underline'\t\t\t\n\t\t},\n\t\tanimation: {\n\t\t\tduration: 500\n\t\t},\n\t\tdrillUpButton: {\n\t\t\tposition: { \n\t\t\t\talign: 'right',\n\t\t\t\tx: -10,\n\t\t\t\ty: 10\n\t\t\t}\n\t\t\t// relativeTo: 'plotBox'\n\t\t\t// theme\n\t\t}\n\t};\t\n\n\t/**\n\t * A general fadeIn method\n\t */\n\tH.SVGRenderer.prototype.Element.prototype.fadeIn = function () {\n\t\tthis\n\t\t.attr({\n\t\t\topacity: 0.1,\n\t\t\tvisibility: 'visible'\n\t\t})\n\t\t.animate({\n\t\t\topacity: 1\n\t\t}, {\n\t\t\tduration: 250\n\t\t});\n\t};\n\n\t// Extend the Chart prototype\n\tChart.prototype.drilldownLevels = [];\n\n\tChart.prototype.addSeriesAsDrilldown = function (point, ddOptions) {\n\t\tvar oldSeries = point.series,\n\t\t\txAxis = oldSeries.xAxis,\n\t\t\tyAxis = oldSeries.yAxis,\n\t\t\tnewSeries,\n\t\t\tcolor = point.color || oldSeries.color,\n\t\t\tpointIndex,\n\t\t\tlevel;\n\t\t\t\n\t\tddOptions = extend({\n\t\t\tcolor: color\n\t\t}, ddOptions);\n\t\tpointIndex = HighchartsAdapter.inArray(this, oldSeries.points);\n\t\tlevel = {\n\t\t\tseriesOptions: oldSeries.userOptions,\n\t\t\tshapeArgs: point.shapeArgs,\n\t\t\tbBox: point.graphic.getBBox(),\n\t\t\tcolor: color,\n\t\t\tnewSeries: ddOptions,\n\t\t\tpointOptions: oldSeries.options.data[pointIndex],\n\t\t\tpointIndex: pointIndex,\n\t\t\toldExtremes: {\n\t\t\t\txMin: xAxis && xAxis.userMin,\n\t\t\t\txMax: xAxis && xAxis.userMax,\n\t\t\t\tyMin: yAxis && yAxis.userMin,\n\t\t\t\tyMax: yAxis && yAxis.userMax\n\t\t\t}\n\t\t};\n\n\t\tthis.drilldownLevels.push(level);\n\n\t\tnewSeries = this.addSeries(ddOptions, false);\n\t\tif (xAxis) {\n\t\t\txAxis.oldPos = xAxis.pos;\n\t\t\txAxis.userMin = xAxis.userMax = null;\n\t\t\tyAxis.userMin = yAxis.userMax = null;\n\t\t}\n\n\t\t// Run fancy cross-animation on supported and equal types\n\t\tif (oldSeries.type === newSeries.type) {\n\t\t\tnewSeries.animate = newSeries.animateDrilldown || noop;\n\t\t\tnewSeries.options.animation = true;\n\t\t}\n\t\t\n\t\toldSeries.remove(false);\n\t\t\n\t\tthis.redraw();\n\t\tthis.showDrillUpButton();\n\t};\n\n\tChart.prototype.getDrilldownBackText = function () {\n\t\tvar lastLevel = this.drilldownLevels[this.drilldownLevels.length - 1];\n\n\t\treturn this.options.lang.drillUpText.replace('{series.name}', lastLevel.seriesOptions.name);\n\n\t};\n\n\tChart.prototype.showDrillUpButton = function () {\n\t\tvar chart = this,\n\t\t\tbackText = this.getDrilldownBackText(),\n\t\t\tbuttonOptions = chart.options.drilldown.drillUpButton;\n\t\t\t\n\n\t\tif (!this.drillUpButton) {\n\t\t\tthis.drillUpButton = this.renderer.button(\n\t\t\t\tbackText,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tfunction () {\n\t\t\t\t\tchart.drillUp(); \n\t\t\t\t}\n\t\t\t)\n\t\t\t.attr(extend({\n\t\t\t\talign: buttonOptions.position.align,\n\t\t\t\tzIndex: 9\n\t\t\t}, buttonOptions.theme))\n\t\t\t.add()\n\t\t\t.align(buttonOptions.position, false, buttonOptions.relativeTo || 'plotBox');\n\t\t} else {\n\t\t\tthis.drillUpButton.attr({\n\t\t\t\ttext: backText\n\t\t\t})\n\t\t\t.align();\n\t\t}\n\t};\n\n\tChart.prototype.drillUp = function () {\n\t\tvar chart = this,\n\t\t\tlevel = chart.drilldownLevels.pop(),\n\t\t\toldSeries = chart.series[0],\n\t\t\toldExtremes = level.oldExtremes,\n\t\t\tnewSeries = chart.addSeries(level.seriesOptions, false);\n\t\t\n\t\tfireEvent(chart, 'drillup', { seriesOptions: level.seriesOptions });\n\n\t\tif (newSeries.type === oldSeries.type) {\n\t\t\tnewSeries.drilldownLevel = level;\n\t\t\tnewSeries.animate = newSeries.animateDrillupTo || noop;\n\t\t\tnewSeries.options.animation = true;\n\n\t\t\tif (oldSeries.animateDrillupFrom) {\n\t\t\t\toldSeries.animateDrillupFrom(level);\n\t\t\t}\n\t\t}\n\n\t\toldSeries.remove(false);\n\n\t\t// Reset the zoom level of the upper series\n\t\tif (newSeries.xAxis) {\n\t\t\tnewSeries.xAxis.setExtremes(oldExtremes.xMin, oldExtremes.xMax, false);\n\t\t\tnewSeries.yAxis.setExtremes(oldExtremes.yMin, oldExtremes.yMax, false);\n\t\t}\n\n\n\t\tthis.redraw();\n\n\t\tif (this.drilldownLevels.length === 0) {\n\t\t\tthis.drillUpButton = this.drillUpButton.destroy();\n\t\t} else {\n\t\t\tthis.drillUpButton.attr({\n\t\t\t\ttext: this.getDrilldownBackText()\n\t\t\t})\n\t\t\t.align();\n\t\t}\n\t};\n\n\tPieSeries.prototype.animateDrilldown = function (init) {\n\t\tvar level = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1],\n\t\t\tanimationOptions = this.chart.options.drilldown.animation,\n\t\t\tanimateFrom = level.shapeArgs,\n\t\t\tstart = animateFrom.start,\n\t\t\tangle = animateFrom.end - start,\n\t\t\tstartAngle = angle / this.points.length,\n\t\t\tstartColor = H.Color(level.color).rgba;\n\n\t\tif (!init) {\n\t\t\teach(this.points, function (point, i) {\n\t\t\t\tvar endColor = H.Color(point.color).rgba;\n\n\t\t\t\t/*jslint unparam: true*/\n\t\t\t\tpoint.graphic\n\t\t\t\t\t.attr(H.merge(animateFrom, {\n\t\t\t\t\t\tstart: start + i * startAngle,\n\t\t\t\t\t\tend: start + (i + 1) * startAngle\n\t\t\t\t\t}))\n\t\t\t\t\t.animate(point.shapeArgs, H.merge(animationOptions, {\n\t\t\t\t\t\tstep: function (val, fx) {\n\t\t\t\t\t\t\tif (fx.prop === 'start') {\n\t\t\t\t\t\t\t\tthis.attr({\n\t\t\t\t\t\t\t\t\tfill: tweenColors(startColor, endColor, fx.pos)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t/*jslint unparam: false*/\n\t\t\t});\n\t\t}\n\t};\n\n\n\t/**\n\t * When drilling up, keep the upper series invisible until the lower series has\n\t * moved into place\n\t */\n\tPieSeries.prototype.animateDrillupTo = \n\t\t\tColumnSeries.prototype.animateDrillupTo = function (init) {\n\t\tif (!init) {\n\t\t\tvar newSeries = this,\n\t\t\t\tlevel = newSeries.drilldownLevel;\n\n\t\t\teach(this.points, function (point) {\n\t\t\t\tpoint.graphic.hide();\n\t\t\t\tif (point.dataLabel) {\n\t\t\t\t\tpoint.dataLabel.hide();\n\t\t\t\t}\n\t\t\t\tif (point.connector) {\n\t\t\t\t\tpoint.connector.hide();\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\t// Do dummy animation on first point to get to complete\n\t\t\tsetTimeout(function () {\n\t\t\t\teach(newSeries.points, function (point, i) {  \n\t\t\t\t\t// Fade in other points\t\t\t  \n\t\t\t\t\tvar verb = i === level.pointIndex ? 'show' : 'fadeIn';\n\t\t\t\t\tpoint.graphic[verb]();\n\t\t\t\t\tif (point.dataLabel) {\n\t\t\t\t\t\tpoint.dataLabel[verb]();\n\t\t\t\t\t}\n\t\t\t\t\tif (point.connector) {\n\t\t\t\t\t\tpoint.connector[verb]();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, Math.max(this.chart.options.drilldown.animation.duration - 50, 0));\n\n\t\t\t// Reset\n\t\t\tthis.animate = noop;\n\t\t}\n\n\t};\n\t\n\tColumnSeries.prototype.animateDrilldown = function (init) {\n\t\tvar animateFrom = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1].shapeArgs,\n\t\t\tanimationOptions = this.chart.options.drilldown.animation;\n\t\t\t\n\t\tif (!init) {\n\n\t\t\tanimateFrom.x += (this.xAxis.oldPos - this.xAxis.pos);\n\t\n\t\t\teach(this.points, function (point) {\n\t\t\t\tpoint.graphic\n\t\t\t\t\t.attr(animateFrom)\n\t\t\t\t\t.animate(point.shapeArgs, animationOptions);\n\t\t\t});\n\t\t}\n\t\t\n\t};\n\n\t/**\n\t * When drilling up, pull out the individual point graphics from the lower series\n\t * and animate them into the origin point in the upper series.\n\t */\n\tColumnSeries.prototype.animateDrillupFrom = \n\t\tPieSeries.prototype.animateDrillupFrom =\n\tfunction (level) {\n\t\tvar animationOptions = this.chart.options.drilldown.animation,\n\t\t\tgroup = this.group;\n\n\t\tdelete this.group;\n\t\teach(this.points, function (point) {\n\t\t\tvar graphic = point.graphic,\n\t\t\t\tstartColor = H.Color(point.color).rgba;\n\n\t\t\tdelete point.graphic;\n\n\t\t\t/*jslint unparam: true*/\n\t\t\tgraphic.animate(level.shapeArgs, H.merge(animationOptions, {\n\n\t\t\t\tstep: function (val, fx) {\n\t\t\t\t\tif (fx.prop === 'start') {\n\t\t\t\t\t\tthis.attr({\n\t\t\t\t\t\t\tfill: tweenColors(startColor, H.Color(level.color).rgba, fx.pos)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcomplete: function () {\n\t\t\t\t\tgraphic.destroy();\n\t\t\t\t\tif (group) {\n\t\t\t\t\t\tgroup = group.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\t\t\t/*jslint unparam: false*/\n\t\t});\n\t};\n\t\n\tH.Point.prototype.doDrilldown = function () {\n\t\tvar series = this.series,\n\t\t\tchart = series.chart,\n\t\t\tdrilldown = chart.options.drilldown,\n\t\t\ti = drilldown.series.length,\n\t\t\tseriesOptions;\n\t\t\n\t\twhile (i-- && !seriesOptions) {\n\t\t\tif (drilldown.series[i].id === this.drilldown) {\n\t\t\t\tseriesOptions = drilldown.series[i];\n\t\t\t}\n\t\t}\n\n\t\t// Fire the event. If seriesOptions is undefined, the implementer can check for \n\t\t// seriesOptions, and call addSeriesAsDrilldown async if necessary.\n\t\tfireEvent(chart, 'drilldown', { \n\t\t\tpoint: this,\n\t\t\tseriesOptions: seriesOptions\n\t\t});\n\t\t\n\t\tif (seriesOptions) {\n\t\t\tchart.addSeriesAsDrilldown(this, seriesOptions);\n\t\t}\n\n\t};\n\t\n\twrap(H.Point.prototype, 'init', function (proceed, series, options, x) {\n\t\tvar point = proceed.call(this, series, options, x),\n\t\t\tchart = series.chart,\n\t\t\ttick = series.xAxis && series.xAxis.ticks[x],\n\t\t\ttickLabel = tick && tick.label;\n\t\t\n\t\tif (point.drilldown) {\n\t\t\t\n\t\t\t// Add the click event to the point label\n\t\t\tH.addEvent(point, 'click', function () {\n\t\t\t\tpoint.doDrilldown();\n\t\t\t});\n\t\t\t\n\t\t\t// Make axis labels clickable\n\t\t\tif (tickLabel) {\n\t\t\t\tif (!tickLabel._basicStyle) {\n\t\t\t\t\ttickLabel._basicStyle = tickLabel.element.getAttribute('style');\n\t\t\t\t}\n\t\t\t\ttickLabel\n\t\t\t\t\t.addClass('highcharts-drilldown-axis-label')\n\t\t\t\t\t.css(chart.options.drilldown.activeAxisLabelStyle)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tif (point.doDrilldown) {\n\t\t\t\t\t\t\tpoint.doDrilldown();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t}\n\t\t} else if (tickLabel && tickLabel._basicStyle) {\n\t\t\ttickLabel.element.setAttribute('style', tickLabel._basicStyle);\n\t\t}\n\t\t\n\t\treturn point;\n\t});\n\n\twrap(H.Series.prototype, 'drawDataLabels', function (proceed) {\n\t\tvar css = this.chart.options.drilldown.activeDataLabelStyle;\n\n\t\tproceed.call(this);\n\n\t\teach(this.points, function (point) {\n\t\t\tif (point.drilldown && point.dataLabel) {\n\t\t\t\tpoint.dataLabel\n\t\t\t\t\t.attr({\n\t\t\t\t\t\t'class': 'highcharts-drilldown-data-label'\n\t\t\t\t\t})\n\t\t\t\t\t.css(css)\n\t\t\t\t\t.on('click', function () {\n\t\t\t\t\t\tpoint.doDrilldown();\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\t// Mark the trackers with a pointer \n\tColumnSeries.prototype.supportsDrilldown = true;\n\tPieSeries.prototype.supportsDrilldown = true;\n\tvar type, \n\t\tdrawTrackerWrapper = function (proceed) {\n\t\t\tproceed.call(this);\n\t\t\teach(this.points, function (point) {\n\t\t\t\tif (point.drilldown && point.graphic) {\n\t\t\t\t\tpoint.graphic\n\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t'class': 'highcharts-drilldown-point'\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.css({ cursor: 'pointer' });\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\tfor (type in seriesTypes) {\n\t\tif (seriesTypes[type].prototype.supportsDrilldown) {\n\t\t\twrap(seriesTypes[type].prototype, 'drawTracker', drawTrackerWrapper);\n\t\t}\n\t}\n\t\t\n}(Highcharts));\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/exporting.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Exporting module\n\n (c) 2010-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(f){var A=f.Chart,t=f.addEvent,C=f.removeEvent,k=f.createElement,n=f.discardElement,u=f.css,o=f.merge,r=f.each,p=f.extend,D=Math.max,j=document,B=window,E=f.isTouchDevice,F=f.Renderer.prototype.symbols,x=f.getOptions(),y;p(x.lang,{printChart:\"Print chart\",downloadPNG:\"Download PNG image\",downloadJPEG:\"Download JPEG image\",downloadPDF:\"Download PDF document\",downloadSVG:\"Download SVG vector image\",contextButtonTitle:\"Chart context menu\"});x.navigation={menuStyle:{border:\"1px solid #A0A0A0\",\nbackground:\"#FFFFFF\",padding:\"5px 0\"},menuItemStyle:{padding:\"0 10px\",background:\"none\",color:\"#303030\",fontSize:E?\"14px\":\"11px\"},menuItemHoverStyle:{background:\"#4572A5\",color:\"#FFFFFF\"},buttonOptions:{symbolFill:\"#E0E0E0\",symbolSize:14,symbolStroke:\"#666\",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:\"right\",buttonSpacing:3,height:22,theme:{fill:\"white\",stroke:\"none\"},verticalAlign:\"top\",width:24}};x.exporting={type:\"image/png\",url:\"http://export.highcharts.com/\",buttons:{contextButton:{menuClassName:\"highcharts-contextmenu\",\nsymbol:\"menu\",_titleKey:\"contextButtonTitle\",menuItems:[{textKey:\"printChart\",onclick:function(){this.print()}},{separator:!0},{textKey:\"downloadPNG\",onclick:function(){this.exportChart()}},{textKey:\"downloadJPEG\",onclick:function(){this.exportChart({type:\"image/jpeg\"})}},{textKey:\"downloadPDF\",onclick:function(){this.exportChart({type:\"application/pdf\"})}},{textKey:\"downloadSVG\",onclick:function(){this.exportChart({type:\"image/svg+xml\"})}}]}}};f.post=function(c,a){var d,b;b=k(\"form\",{method:\"post\",\naction:c,enctype:\"multipart/form-data\"},{display:\"none\"},j.body);for(d in a)k(\"input\",{type:\"hidden\",name:d,value:a[d]},null,b);b.submit();n(b)};p(A.prototype,{getSVG:function(c){var a=this,d,b,z,h,g=o(a.options,c);if(!j.createElementNS)j.createElementNS=function(a,b){return j.createElement(b)};c=k(\"div\",null,{position:\"absolute\",top:\"-9999em\",width:a.chartWidth+\"px\",height:a.chartHeight+\"px\"},j.body);b=a.renderTo.style.width;h=a.renderTo.style.height;b=g.exporting.sourceWidth||g.chart.width||/px$/.test(b)&&\nparseInt(b,10)||600;h=g.exporting.sourceHeight||g.chart.height||/px$/.test(h)&&parseInt(h,10)||400;p(g.chart,{animation:!1,renderTo:c,forExport:!0,width:b,height:h});g.exporting.enabled=!1;g.series=[];r(a.series,function(a){z=o(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});z.isInternal||g.series.push(z)});d=new f.Chart(g,a.callback);r([\"xAxis\",\"yAxis\"],function(b){r(a[b],function(a,c){var g=d[b][c],f=a.getExtremes(),h=f.userMin,f=f.userMax;g&&(h!==void 0||f!==void 0)&&g.setExtremes(h,\nf,!0,!1)})});b=d.container.innerHTML;g=null;d.destroy();n(c);b=b.replace(/zIndex=\"[^\"]+\"/g,\"\").replace(/isShadow=\"[^\"]+\"/g,\"\").replace(/symbolName=\"[^\"]+\"/g,\"\").replace(/jQuery[0-9]+=\"[^\"]+\"/g,\"\").replace(/url\\([^#]+#/g,\"url(#\").replace(/<svg /,'<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" ').replace(/ href=/g,\" xlink:href=\").replace(/\\n/,\" \").replace(/<\\/svg>.*?$/,\"</svg>\").replace(/&nbsp;/g,\" \").replace(/&shy;/g,\"­\").replace(/<IMG /g,\"<image \").replace(/height=([^\" ]+)/g,'height=\"$1\"').replace(/width=([^\" ]+)/g,\n'width=\"$1\"').replace(/hc-svg-href=\"([^\"]+)\">/g,'xlink:href=\"$1\"/>').replace(/id=([^\" >]+)/g,'id=\"$1\"').replace(/class=([^\" >]+)/g,'class=\"$1\"').replace(/ transform /g,\" \").replace(/:(path|rect)/g,\"$1\").replace(/style=\"([^\"]+)\"/g,function(a){return a.toLowerCase()});return b=b.replace(/(url\\(#highcharts-[0-9]+)&quot;/g,\"$1\").replace(/&quot;/g,\"'\")},exportChart:function(c,a){var c=c||{},d=this.options.exporting,d=this.getSVG(o({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:c.sourceWidth||\nd.sourceWidth,sourceHeight:c.sourceHeight||d.sourceHeight}})),c=o(this.options.exporting,c);f.post(c.url,{filename:c.filename||\"chart\",type:c.type,width:c.width||0,scale:c.scale||2,svg:d})},print:function(){var c=this,a=c.container,d=[],b=a.parentNode,f=j.body,h=f.childNodes;if(!c.isPrinting)c.isPrinting=!0,r(h,function(a,b){if(a.nodeType===1)d[b]=a.style.display,a.style.display=\"none\"}),f.appendChild(a),B.focus(),B.print(),setTimeout(function(){b.appendChild(a);r(h,function(a,b){if(a.nodeType===\n1)a.style.display=d[b]});c.isPrinting=!1},1E3)},contextMenu:function(c,a,d,b,f,h,g){var e=this,j=e.options.navigation,q=j.menuItemStyle,l=e.chartWidth,m=e.chartHeight,o=\"cache-\"+c,i=e[o],s=D(f,h),v,w,n;if(!i)e[o]=i=k(\"div\",{className:c},{position:\"absolute\",zIndex:1E3,padding:s+\"px\"},e.container),v=k(\"div\",null,p({MozBoxShadow:\"3px 3px 10px #888\",WebkitBoxShadow:\"3px 3px 10px #888\",boxShadow:\"3px 3px 10px #888\"},j.menuStyle),i),w=function(){u(i,{display:\"none\"});g&&g.setState(0);e.openMenu=!1},t(i,\n\"mouseleave\",function(){n=setTimeout(w,500)}),t(i,\"mouseenter\",function(){clearTimeout(n)}),t(document,\"mousedown\",function(a){e.pointer.inClass(a.target,c)||w()}),r(a,function(a){if(a){var b=a.separator?k(\"hr\",null,null,v):k(\"div\",{onmouseover:function(){u(this,j.menuItemHoverStyle)},onmouseout:function(){u(this,q)},onclick:function(){w();a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},p({cursor:\"pointer\"},q),v);e.exportDivElements.push(b)}}),e.exportDivElements.push(v,\ni),e.exportMenuWidth=i.offsetWidth,e.exportMenuHeight=i.offsetHeight;a={display:\"block\"};d+e.exportMenuWidth>l?a.right=l-d-f-s+\"px\":a.left=d-s+\"px\";b+h+e.exportMenuHeight>m&&g.alignOptions.verticalAlign!==\"top\"?a.bottom=m-b-s+\"px\":a.top=b+h-s+\"px\";u(i,a);e.openMenu=!0},addButton:function(c){var a=this,d=a.renderer,b=o(a.options.navigation.buttonOptions,c),j=b.onclick,h=b.menuItems,g,e,k={stroke:b.symbolStroke,fill:b.symbolFill},q=b.symbolSize||12;if(!a.btnCount)a.btnCount=0;if(!a.exportDivElements)a.exportDivElements=\n[],a.exportSVGElements=[];if(b.enabled!==!1){var l=b.theme,m=l.states,n=m&&m.hover,m=m&&m.select,i;delete l.states;j?i=function(){j.apply(a,arguments)}:h&&(i=function(){a.contextMenu(e.menuClassName,h,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});b.text&&b.symbol?l.paddingLeft=f.pick(l.paddingLeft,25):b.text||p(l,{width:b.width,height:b.height,padding:0});e=d.button(b.text,0,0,i,l,n,m).attr({title:a.options.lang[b._titleKey],\"stroke-linecap\":\"round\"});e.menuClassName=c.menuClassName||\n\"highcharts-menu-\"+a.btnCount++;b.symbol&&(g=d.symbol(b.symbol,b.symbolX-q/2,b.symbolY-q/2,q,q).attr(p(k,{\"stroke-width\":b.symbolStrokeWidth||1,zIndex:1})).add(e));e.add().align(p(b,{width:e.width,x:f.pick(b.x,y)}),!0,\"spacingBox\");y+=(e.width+b.buttonSpacing)*(b.align===\"right\"?-1:1);a.exportSVGElements.push(e,g)}},destroyExport:function(c){var c=c.target,a,d;for(a=0;a<c.exportSVGElements.length;a++)if(d=c.exportSVGElements[a])d.onclick=d.ontouchstart=null,c.exportSVGElements[a]=d.destroy();for(a=\n0;a<c.exportDivElements.length;a++)d=c.exportDivElements[a],C(d,\"mouseleave\"),c.exportDivElements[a]=d.onmouseout=d.onmouseover=d.ontouchstart=d.onclick=null,n(d)}});F.menu=function(c,a,d,b){return[\"M\",c,a+2.5,\"L\",c+d,a+2.5,\"M\",c,a+b/2+0.5,\"L\",c+d,a+b/2+0.5,\"M\",c,a+b-1.5,\"L\",c+d,a+b-1.5]};A.prototype.callbacks.push(function(c){var a,d=c.options.exporting,b=d.buttons;y=0;if(d.enabled!==!1){for(a in b)c.addButton(b[a]);t(c,\"destroy\",c.destroyExport)}})})(Highcharts);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/exporting.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Exporting module\n *\n * (c) 2010-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n// JSLint options:\n/*global Highcharts, document, window, Math, setTimeout */\n\n(function (Highcharts) { // encapsulate\n\n// create shortcuts\nvar Chart = Highcharts.Chart,\n\taddEvent = Highcharts.addEvent,\n\tremoveEvent = Highcharts.removeEvent,\n\tcreateElement = Highcharts.createElement,\n\tdiscardElement = Highcharts.discardElement,\n\tcss = Highcharts.css,\n\tmerge = Highcharts.merge,\n\teach = Highcharts.each,\n\textend = Highcharts.extend,\n\tmath = Math,\n\tmathMax = math.max,\n\tdoc = document,\n\twin = window,\n\tisTouchDevice = Highcharts.isTouchDevice,\n\tM = 'M',\n\tL = 'L',\n\tDIV = 'div',\n\tHIDDEN = 'hidden',\n\tNONE = 'none',\n\tPREFIX = 'highcharts-',\n\tABSOLUTE = 'absolute',\n\tPX = 'px',\n\tUNDEFINED,\n\tsymbols = Highcharts.Renderer.prototype.symbols,\n\tdefaultOptions = Highcharts.getOptions(),\n\tbuttonOffset;\n\n\t// Add language\n\textend(defaultOptions.lang, {\n\t\tprintChart: 'Print chart',\n\t\tdownloadPNG: 'Download PNG image',\n\t\tdownloadJPEG: 'Download JPEG image',\n\t\tdownloadPDF: 'Download PDF document',\n\t\tdownloadSVG: 'Download SVG vector image',\n\t\tcontextButtonTitle: 'Chart context menu'\n\t});\n\n// Buttons and menus are collected in a separate config option set called 'navigation'.\n// This can be extended later to add control buttons like zoom and pan right click menus.\ndefaultOptions.navigation = {\n\tmenuStyle: {\n\t\tborder: '1px solid #A0A0A0',\n\t\tbackground: '#FFFFFF',\n\t\tpadding: '5px 0'\n\t},\n\tmenuItemStyle: {\n\t\tpadding: '0 10px',\n\t\tbackground: NONE,\n\t\tcolor: '#303030',\n\t\tfontSize: isTouchDevice ? '14px' : '11px'\n\t},\n\tmenuItemHoverStyle: {\n\t\tbackground: '#4572A5',\n\t\tcolor: '#FFFFFF'\n\t},\n\n\tbuttonOptions: {\n\t\tsymbolFill: '#E0E0E0',\n\t\tsymbolSize: 14,\n\t\tsymbolStroke: '#666',\n\t\tsymbolStrokeWidth: 3,\n\t\tsymbolX: 12.5,\n\t\tsymbolY: 10.5,\n\t\talign: 'right',\n\t\tbuttonSpacing: 3, \n\t\theight: 22,\n\t\t// text: null,\n\t\ttheme: {\n\t\t\tfill: 'white', // capture hover\n\t\t\tstroke: 'none'\n\t\t},\n\t\tverticalAlign: 'top',\n\t\twidth: 24\n\t}\n};\n\n\n\n// Add the export related options\ndefaultOptions.exporting = {\n\t//enabled: true,\n\t//filename: 'chart',\n\ttype: 'image/png',\n\turl: 'http://export.highcharts.com/',\n\t//width: undefined,\n\t//scale: 2\n\tbuttons: {\n\t\tcontextButton: {\n\t\t\tmenuClassName: PREFIX + 'contextmenu',\n\t\t\t//x: -10,\n\t\t\tsymbol: 'menu',\n\t\t\t_titleKey: 'contextButtonTitle',\n\t\t\tmenuItems: [{\n\t\t\t\ttextKey: 'printChart',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.print();\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tseparator: true\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadPNG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart();\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadJPEG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart({\n\t\t\t\t\t\ttype: 'image/jpeg'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadPDF',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart({\n\t\t\t\t\t\ttype: 'application/pdf'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttextKey: 'downloadSVG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.exportChart({\n\t\t\t\t\t\ttype: 'image/svg+xml'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Enable this block to add \"View SVG\" to the dropdown menu\n\t\t\t/*\n\t\t\t,{\n\n\t\t\t\ttext: 'View SVG',\n\t\t\t\tonclick: function () {\n\t\t\t\t\tvar svg = this.getSVG()\n\t\t\t\t\t\t.replace(/</g, '\\n&lt;')\n\t\t\t\t\t\t.replace(/>/g, '&gt;');\n\n\t\t\t\t\tdoc.body.innerHTML = '<pre>' + svg + '</pre>';\n\t\t\t\t}\n\t\t\t} // */\n\t\t\t]\n\t\t}\n\t}\n};\n\n// Add the Highcharts.post utility\nHighcharts.post = function (url, data) {\n\tvar name,\n\t\tform;\n\t\n\t// create the form\n\tform = createElement('form', {\n\t\tmethod: 'post',\n\t\taction: url,\n\t\tenctype: 'multipart/form-data'\n\t}, {\n\t\tdisplay: NONE\n\t}, doc.body);\n\n\t// add the data\n\tfor (name in data) {\n\t\tcreateElement('input', {\n\t\t\ttype: HIDDEN,\n\t\t\tname: name,\n\t\t\tvalue: data[name]\n\t\t}, null, form);\n\t}\n\n\t// submit\n\tform.submit();\n\n\t// clean up\n\tdiscardElement(form);\n};\n\nextend(Chart.prototype, {\n\n\t/**\n\t * Return an SVG representation of the chart\n\t *\n\t * @param additionalOptions {Object} Additional chart options for the generated SVG representation\n\t */\n\tgetSVG: function (additionalOptions) {\n\t\tvar chart = this,\n\t\t\tchartCopy,\n\t\t\tsandbox,\n\t\t\tsvg,\n\t\t\tseriesOptions,\n\t\t\tsourceWidth,\n\t\t\tsourceHeight,\n\t\t\tcssWidth,\n\t\t\tcssHeight,\n\t\t\toptions = merge(chart.options, additionalOptions); // copy the options and add extra options\n\n\t\t// IE compatibility hack for generating SVG content that it doesn't really understand\n\t\tif (!doc.createElementNS) {\n\t\t\t/*jslint unparam: true*//* allow unused parameter ns in function below */\n\t\t\tdoc.createElementNS = function (ns, tagName) {\n\t\t\t\treturn doc.createElement(tagName);\n\t\t\t};\n\t\t\t/*jslint unparam: false*/\n\t\t}\n\n\t\t// create a sandbox where a new chart will be generated\n\t\tsandbox = createElement(DIV, null, {\n\t\t\tposition: ABSOLUTE,\n\t\t\ttop: '-9999em',\n\t\t\twidth: chart.chartWidth + PX,\n\t\t\theight: chart.chartHeight + PX\n\t\t}, doc.body);\n\t\t\n\t\t// get the source size\n\t\tcssWidth = chart.renderTo.style.width;\n\t\tcssHeight = chart.renderTo.style.height;\n\t\tsourceWidth = options.exporting.sourceWidth ||\n\t\t\toptions.chart.width ||\n\t\t\t(/px$/.test(cssWidth) && parseInt(cssWidth, 10)) ||\n\t\t\t600;\n\t\tsourceHeight = options.exporting.sourceHeight ||\n\t\t\toptions.chart.height ||\n\t\t\t(/px$/.test(cssHeight) && parseInt(cssHeight, 10)) ||\n\t\t\t400;\n\n\t\t// override some options\n\t\textend(options.chart, {\n\t\t\tanimation: false,\n\t\t\trenderTo: sandbox,\n\t\t\tforExport: true,\n\t\t\twidth: sourceWidth,\n\t\t\theight: sourceHeight\n\t\t});\n\t\toptions.exporting.enabled = false; // hide buttons in print\n\t\t\n\t\t// prepare for replicating the chart\n\t\toptions.series = [];\n\t\teach(chart.series, function (serie) {\n\t\t\tseriesOptions = merge(serie.options, {\n\t\t\t\tanimation: false, // turn off animation\n\t\t\t\tshowCheckbox: false,\n\t\t\t\tvisible: serie.visible\n\t\t\t});\n\n\t\t\tif (!seriesOptions.isInternal) { // used for the navigator series that has its own option set\n\t\t\t\toptions.series.push(seriesOptions);\n\t\t\t}\n\t\t});\n\n\t\t// generate the chart copy\n\t\tchartCopy = new Highcharts.Chart(options, chart.callback);\n\n\t\t// reflect axis extremes in the export\n\t\teach(['xAxis', 'yAxis'], function (axisType) {\n\t\t\teach(chart[axisType], function (axis, i) {\n\t\t\t\tvar axisCopy = chartCopy[axisType][i],\n\t\t\t\t\textremes = axis.getExtremes(),\n\t\t\t\t\tuserMin = extremes.userMin,\n\t\t\t\t\tuserMax = extremes.userMax;\n\n\t\t\t\tif (axisCopy && (userMin !== UNDEFINED || userMax !== UNDEFINED)) {\n\t\t\t\t\taxisCopy.setExtremes(userMin, userMax, true, false);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// get the SVG from the container's innerHTML\n\t\tsvg = chartCopy.container.innerHTML;\n\n\t\t// free up memory\n\t\toptions = null;\n\t\tchartCopy.destroy();\n\t\tdiscardElement(sandbox);\n\n\t\t// sanitize\n\t\tsvg = svg\n\t\t\t.replace(/zIndex=\"[^\"]+\"/g, '')\n\t\t\t.replace(/isShadow=\"[^\"]+\"/g, '')\n\t\t\t.replace(/symbolName=\"[^\"]+\"/g, '')\n\t\t\t.replace(/jQuery[0-9]+=\"[^\"]+\"/g, '')\n\t\t\t.replace(/url\\([^#]+#/g, 'url(#')\n\t\t\t.replace(/<svg /, '<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" ')\n\t\t\t.replace(/ href=/g, ' xlink:href=')\n\t\t\t.replace(/\\n/, ' ')\n\t\t\t.replace(/<\\/svg>.*?$/, '</svg>') // any HTML added to the container after the SVG (#894)\n\t\t\t/* This fails in IE < 8\n\t\t\t.replace(/([0-9]+)\\.([0-9]+)/g, function(s1, s2, s3) { // round off to save weight\n\t\t\t\treturn s2 +'.'+ s3[0];\n\t\t\t})*/\n\n\t\t\t// Replace HTML entities, issue #347\n\t\t\t.replace(/&nbsp;/g, '\\u00A0') // no-break space\n\t\t\t.replace(/&shy;/g,  '\\u00AD') // soft hyphen\n\n\t\t\t// IE specific\n\t\t\t.replace(/<IMG /g, '<image ')\n\t\t\t.replace(/height=([^\" ]+)/g, 'height=\"$1\"')\n\t\t\t.replace(/width=([^\" ]+)/g, 'width=\"$1\"')\n\t\t\t.replace(/hc-svg-href=\"([^\"]+)\">/g, 'xlink:href=\"$1\"/>')\n\t\t\t.replace(/id=([^\" >]+)/g, 'id=\"$1\"')\n\t\t\t.replace(/class=([^\" >]+)/g, 'class=\"$1\"')\n\t\t\t.replace(/ transform /g, ' ')\n\t\t\t.replace(/:(path|rect)/g, '$1')\n\t\t\t.replace(/style=\"([^\"]+)\"/g, function (s) {\n\t\t\t\treturn s.toLowerCase();\n\t\t\t});\n\n\t\t// IE9 beta bugs with innerHTML. Test again with final IE9.\n\t\tsvg = svg.replace(/(url\\(#highcharts-[0-9]+)&quot;/g, '$1')\n\t\t\t.replace(/&quot;/g, \"'\");\n\n\t\treturn svg;\n\t},\n\n\t/**\n\t * Submit the SVG representation of the chart to the server\n\t * @param {Object} options Exporting options. Possible members are url, type and width.\n\t * @param {Object} chartOptions Additional chart options for the SVG representation of the chart\n\t */\n\texportChart: function (options, chartOptions) {\n\t\toptions = options || {};\n\t\t\n\t\tvar chart = this,\n\t\t\tchartExportingOptions = chart.options.exporting,\n\t\t\tsvg = chart.getSVG(merge(\n\t\t\t\t{ chart: { borderRadius: 0 } },\n\t\t\t\tchartExportingOptions.chartOptions,\n\t\t\t\tchartOptions, \n\t\t\t\t{\n\t\t\t\t\texporting: {\n\t\t\t\t\t\tsourceWidth: options.sourceWidth || chartExportingOptions.sourceWidth,\n\t\t\t\t\t\tsourceHeight: options.sourceHeight || chartExportingOptions.sourceHeight\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t));\n\n\t\t// merge the options\n\t\toptions = merge(chart.options.exporting, options);\n\t\t\n\t\t// do the post\n\t\tHighcharts.post(options.url, {\n\t\t\tfilename: options.filename || 'chart',\n\t\t\ttype: options.type,\n\t\t\twidth: options.width || 0, // IE8 fails to post undefined correctly, so use 0\n\t\t\tscale: options.scale || 2,\n\t\t\tsvg: svg\n\t\t});\n\n\t},\n\t\n\t/**\n\t * Print the chart\n\t */\n\tprint: function () {\n\n\t\tvar chart = this,\n\t\t\tcontainer = chart.container,\n\t\t\torigDisplay = [],\n\t\t\torigParent = container.parentNode,\n\t\t\tbody = doc.body,\n\t\t\tchildNodes = body.childNodes;\n\n\t\tif (chart.isPrinting) { // block the button while in printing mode\n\t\t\treturn;\n\t\t}\n\n\t\tchart.isPrinting = true;\n\n\t\t// hide all body content\n\t\teach(childNodes, function (node, i) {\n\t\t\tif (node.nodeType === 1) {\n\t\t\t\torigDisplay[i] = node.style.display;\n\t\t\t\tnode.style.display = NONE;\n\t\t\t}\n\t\t});\n\n\t\t// pull out the chart\n\t\tbody.appendChild(container);\n\n\t\t// print\n\t\twin.focus(); // #1510\n\t\twin.print();\n\n\t\t// allow the browser to prepare before reverting\n\t\tsetTimeout(function () {\n\n\t\t\t// put the chart back in\n\t\t\torigParent.appendChild(container);\n\n\t\t\t// restore all body content\n\t\t\teach(childNodes, function (node, i) {\n\t\t\t\tif (node.nodeType === 1) {\n\t\t\t\t\tnode.style.display = origDisplay[i];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tchart.isPrinting = false;\n\n\t\t}, 1000);\n\n\t},\n\n\t/**\n\t * Display a popup menu for choosing the export type\n\t *\n\t * @param {String} className An identifier for the menu\n\t * @param {Array} items A collection with text and onclicks for the items\n\t * @param {Number} x The x position of the opener button\n\t * @param {Number} y The y position of the opener button\n\t * @param {Number} width The width of the opener button\n\t * @param {Number} height The height of the opener button\n\t */\n\tcontextMenu: function (className, items, x, y, width, height, button) {\n\t\tvar chart = this,\n\t\t\tnavOptions = chart.options.navigation,\n\t\t\tmenuItemStyle = navOptions.menuItemStyle,\n\t\t\tchartWidth = chart.chartWidth,\n\t\t\tchartHeight = chart.chartHeight,\n\t\t\tcacheName = 'cache-' + className,\n\t\t\tmenu = chart[cacheName],\n\t\t\tmenuPadding = mathMax(width, height), // for mouse leave detection\n\t\t\tboxShadow = '3px 3px 10px #888',\n\t\t\tinnerMenu,\n\t\t\thide,\n\t\t\thideTimer,\n\t\t\tmenuStyle;\n\n\t\t// create the menu only the first time\n\t\tif (!menu) {\n\n\t\t\t// create a HTML element above the SVG\n\t\t\tchart[cacheName] = menu = createElement(DIV, {\n\t\t\t\tclassName: className\n\t\t\t}, {\n\t\t\t\tposition: ABSOLUTE,\n\t\t\t\tzIndex: 1000,\n\t\t\t\tpadding: menuPadding + PX\n\t\t\t}, chart.container);\n\n\t\t\tinnerMenu = createElement(DIV, null,\n\t\t\t\textend({\n\t\t\t\t\tMozBoxShadow: boxShadow,\n\t\t\t\t\tWebkitBoxShadow: boxShadow,\n\t\t\t\t\tboxShadow: boxShadow\n\t\t\t\t}, navOptions.menuStyle), menu);\n\n\t\t\t// hide on mouse out\n\t\t\thide = function () {\n\t\t\t\tcss(menu, { display: NONE });\n\t\t\t\tif (button) {\n\t\t\t\t\tbutton.setState(0);\n\t\t\t\t}\n\t\t\t\tchart.openMenu = false;\n\t\t\t};\n\n\t\t\t// Hide the menu some time after mouse leave (#1357)\n\t\t\taddEvent(menu, 'mouseleave', function () {\n\t\t\t\thideTimer = setTimeout(hide, 500);\n\t\t\t});\n\t\t\taddEvent(menu, 'mouseenter', function () {\n\t\t\t\tclearTimeout(hideTimer);\n\t\t\t});\n\t\t\t// Hide it on clicking or touching outside the menu (#2258)\n\t\t\taddEvent(document, 'mousedown', function (e) {\n\t\t\t\tif (!chart.pointer.inClass(e.target, className)) {\n\t\t\t\t\thide();\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\t// create the items\n\t\t\teach(items, function (item) {\n\t\t\t\tif (item) {\n\t\t\t\t\tvar element = item.separator ? \n\t\t\t\t\t\tcreateElement('hr', null, null, innerMenu) :\n\t\t\t\t\t\tcreateElement(DIV, {\n\t\t\t\t\t\t\tonmouseover: function () {\n\t\t\t\t\t\t\t\tcss(this, navOptions.menuItemHoverStyle);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonmouseout: function () {\n\t\t\t\t\t\t\t\tcss(this, menuItemStyle);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonclick: function () {\n\t\t\t\t\t\t\t\thide();\n\t\t\t\t\t\t\t\titem.onclick.apply(chart, arguments);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tinnerHTML: item.text || chart.options.lang[item.textKey]\n\t\t\t\t\t\t}, extend({\n\t\t\t\t\t\t\tcursor: 'pointer'\n\t\t\t\t\t\t}, menuItemStyle), innerMenu);\n\n\n\t\t\t\t\t// Keep references to menu divs to be able to destroy them\n\t\t\t\t\tchart.exportDivElements.push(element);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Keep references to menu and innerMenu div to be able to destroy them\n\t\t\tchart.exportDivElements.push(innerMenu, menu);\n\n\t\t\tchart.exportMenuWidth = menu.offsetWidth;\n\t\t\tchart.exportMenuHeight = menu.offsetHeight;\n\t\t}\n\n\t\tmenuStyle = { display: 'block' };\n\n\t\t// if outside right, right align it\n\t\tif (x + chart.exportMenuWidth > chartWidth) {\n\t\t\tmenuStyle.right = (chartWidth - x - width - menuPadding) + PX;\n\t\t} else {\n\t\t\tmenuStyle.left = (x - menuPadding) + PX;\n\t\t}\n\t\t// if outside bottom, bottom align it\n\t\tif (y + height + chart.exportMenuHeight > chartHeight && button.alignOptions.verticalAlign !== 'top') {\n\t\t\tmenuStyle.bottom = (chartHeight - y - menuPadding)  + PX;\n\t\t} else {\n\t\t\tmenuStyle.top = (y + height - menuPadding) + PX;\n\t\t}\n\n\t\tcss(menu, menuStyle);\n\t\tchart.openMenu = true;\n\t},\n\n\t/**\n\t * Add the export button to the chart\n\t */\n\taddButton: function (options) {\n\t\tvar chart = this,\n\t\t\trenderer = chart.renderer,\n\t\t\tbtnOptions = merge(chart.options.navigation.buttonOptions, options),\n\t\t\tonclick = btnOptions.onclick,\n\t\t\tmenuItems = btnOptions.menuItems,\n\t\t\tsymbol,\n\t\t\tbutton,\n\t\t\tsymbolAttr = {\n\t\t\t\tstroke: btnOptions.symbolStroke,\n\t\t\t\tfill: btnOptions.symbolFill\n\t\t\t},\n\t\t\tsymbolSize = btnOptions.symbolSize || 12;\n\t\tif (!chart.btnCount) {\n\t\t\tchart.btnCount = 0;\n\t\t}\n\n\t\t// Keeps references to the button elements\n\t\tif (!chart.exportDivElements) {\n\t\t\tchart.exportDivElements = [];\n\t\t\tchart.exportSVGElements = [];\n\t\t}\n\n\t\tif (btnOptions.enabled === false) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tvar attr = btnOptions.theme,\n\t\t\tstates = attr.states,\n\t\t\thover = states && states.hover,\n\t\t\tselect = states && states.select,\n\t\t\tcallback;\n\n\t\tdelete attr.states;\n\n\t\tif (onclick) {\n\t\t\tcallback = function () {\n\t\t\t\tonclick.apply(chart, arguments);\n\t\t\t};\n\n\t\t} else if (menuItems) {\n\t\t\tcallback = function () {\n\t\t\t\tchart.contextMenu(\n\t\t\t\t\tbutton.menuClassName, \n\t\t\t\t\tmenuItems, \n\t\t\t\t\tbutton.translateX, \n\t\t\t\t\tbutton.translateY, \n\t\t\t\t\tbutton.width, \n\t\t\t\t\tbutton.height,\n\t\t\t\t\tbutton\n\t\t\t\t);\n\t\t\t\tbutton.setState(2);\n\t\t\t};\n\t\t}\n\n\n\t\tif (btnOptions.text && btnOptions.symbol) {\n\t\t\tattr.paddingLeft = Highcharts.pick(attr.paddingLeft, 25);\n\t\t\n\t\t} else if (!btnOptions.text) {\n\t\t\textend(attr, {\n\t\t\t\twidth: btnOptions.width,\n\t\t\t\theight: btnOptions.height,\n\t\t\t\tpadding: 0\n\t\t\t});\n\t\t}\n\n\t\tbutton = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select)\n\t\t\t.attr({\n\t\t\t\ttitle: chart.options.lang[btnOptions._titleKey],\n\t\t\t\t'stroke-linecap': 'round'\n\t\t\t});\n\t\tbutton.menuClassName = options.menuClassName || PREFIX + 'menu-' + chart.btnCount++;\n\n\t\tif (btnOptions.symbol) {\n\t\t\tsymbol = renderer.symbol(\n\t\t\t\t\tbtnOptions.symbol,\n\t\t\t\t\tbtnOptions.symbolX - (symbolSize / 2),\n\t\t\t\t\tbtnOptions.symbolY - (symbolSize / 2),\n\t\t\t\t\tsymbolSize,\t\t\t\t\n\t\t\t\t\tsymbolSize\n\t\t\t\t)\n\t\t\t\t.attr(extend(symbolAttr, {\n\t\t\t\t\t'stroke-width': btnOptions.symbolStrokeWidth || 1,\n\t\t\t\t\tzIndex: 1\n\t\t\t\t})).add(button);\n\t\t}\n\n\t\tbutton.add()\n\t\t\t.align(extend(btnOptions, {\n\t\t\t\twidth: button.width,\n\t\t\t\tx: Highcharts.pick(btnOptions.x, buttonOffset) // #1654\n\t\t\t}), true, 'spacingBox');\n\n\t\tbuttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1);\n\n\t\tchart.exportSVGElements.push(button, symbol);\n\n\t},\n\n\t/**\n\t * Destroy the buttons.\n\t */\n\tdestroyExport: function (e) {\n\t\tvar chart = e.target,\n\t\t\ti,\n\t\t\telem;\n\n\t\t// Destroy the extra buttons added\n\t\tfor (i = 0; i < chart.exportSVGElements.length; i++) {\n\t\t\telem = chart.exportSVGElements[i];\n\t\t\t\n\t\t\t// Destroy and null the svg/vml elements\n\t\t\tif (elem) { // #1822\n\t\t\t\telem.onclick = elem.ontouchstart = null;\n\t\t\t\tchart.exportSVGElements[i] = elem.destroy();\n\t\t\t}\n\t\t}\n\n\t\t// Destroy the divs for the menu\n\t\tfor (i = 0; i < chart.exportDivElements.length; i++) {\n\t\t\telem = chart.exportDivElements[i];\n\n\t\t\t// Remove the event handler\n\t\t\tremoveEvent(elem, 'mouseleave');\n\n\t\t\t// Remove inline events\n\t\t\tchart.exportDivElements[i] = elem.onmouseout = elem.onmouseover = elem.ontouchstart = elem.onclick = null;\n\n\t\t\t// Destroy the div by moving to garbage bin\n\t\t\tdiscardElement(elem);\n\t\t}\n\t}\n});\n\n\nsymbols.menu = function (x, y, width, height) {\n\tvar arr = [\n\t\tM, x, y + 2.5,\n\t\tL, x + width, y + 2.5,\n\t\tM, x, y + height / 2 + 0.5,\n\t\tL, x + width, y + height / 2 + 0.5,\n\t\tM, x, y + height - 1.5,\n\t\tL, x + width, y + height - 1.5\n\t];\n\treturn arr;\n};\n\n// Add the buttons on chart load\nChart.prototype.callbacks.push(function (chart) {\n\tvar n,\n\t\texportingOptions = chart.options.exporting,\n\t\tbuttons = exportingOptions.buttons;\n\n\tbuttonOffset = 0;\n\n\tif (exportingOptions.enabled !== false) {\n\n\t\tfor (n in buttons) {\n\t\t\tchart.addButton(buttons[n]);\n\t\t}\n\n\t\t// Destroy the export elements at chart destroy\n\t\taddEvent(chart, 'destroy', chart.destroyExport);\n\t}\n\n});\n\n\n}(Highcharts));\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/funnel.js",
    "content": "/*\n \n Highcharts funnel module, Beta\n\n (c) 2010-2012 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(d){var u=d.getOptions().plotOptions,p=d.seriesTypes,D=d.merge,z=function(){},A=d.each;u.funnel=D(u.pie,{center:[\"50%\",\"50%\"],width:\"90%\",neckWidth:\"30%\",height:\"100%\",neckHeight:\"25%\",dataLabels:{connectorWidth:1,connectorColor:\"#606060\"},size:!0,states:{select:{color:\"#C0C0C0\",borderColor:\"#000000\",shadow:!1}}});p.funnel=d.extendClass(p.pie,{type:\"funnel\",animate:z,translate:function(){var a=function(k,a){return/%$/.test(k)?a*parseInt(k,10)/100:parseInt(k,10)},g=0,e=this.chart,f=e.plotWidth,\ne=e.plotHeight,h=0,c=this.options,C=c.center,b=a(C[0],f),d=a(C[0],e),p=a(c.width,f),i,q,j=a(c.height,e),r=a(c.neckWidth,f),s=a(c.neckHeight,e),v=j-s,a=this.data,w,x,u=c.dataLabels.position===\"left\"?1:0,y,m,B,n,l,t,o;this.getWidthAt=q=function(k){return k>j-s||j===s?r:r+(p-r)*((j-s-k)/(j-s))};this.getX=function(k,a){return b+(a?-1:1)*(q(k)/2+c.dataLabels.distance)};this.center=[b,d,j];this.centerX=b;A(a,function(a){g+=a.y});A(a,function(a){o=null;x=g?a.y/g:0;m=d-j/2+h*j;l=m+x*j;i=q(m);y=b-i/2;B=y+\ni;i=q(l);n=b-i/2;t=n+i;m>v?(y=n=b-r/2,B=t=b+r/2):l>v&&(o=l,i=q(v),n=b-i/2,t=n+i,l=v);w=[\"M\",y,m,\"L\",B,m,t,l];o&&w.push(t,o,n,o);w.push(n,l,\"Z\");a.shapeType=\"path\";a.shapeArgs={d:w};a.percentage=x*100;a.plotX=b;a.plotY=(m+(o||l))/2;a.tooltipPos=[b,a.plotY];a.slice=z;a.half=u;h+=x});this.setTooltipPoints()},drawPoints:function(){var a=this,g=a.options,e=a.chart.renderer;A(a.data,function(f){var h=f.graphic,c=f.shapeArgs;h?h.animate(c):f.graphic=e.path(c).attr({fill:f.color,stroke:g.borderColor,\"stroke-width\":g.borderWidth}).add(a.group)})},\nsortByAngle:z,drawDataLabels:function(){var a=this.data,g=this.options.dataLabels.distance,e,f,h,c=a.length,d,b;for(this.center[2]-=2*g;c--;)h=a[c],f=(e=h.half)?1:-1,b=h.plotY,d=this.getX(b,e),h.labelPos=[0,b,d+(g-5)*f,b,d+g*f,b,e?\"right\":\"left\",0];p.pie.prototype.drawDataLabels.call(this)}})})(Highcharts);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/funnel.src.js",
    "content": "/**\n * @license \n * Highcharts funnel module, Beta\n *\n * (c) 2010-2012 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n/*global Highcharts */\n(function (Highcharts) {\n\t\n'use strict';\n\n// create shortcuts\nvar defaultOptions = Highcharts.getOptions(),\n\tdefaultPlotOptions = defaultOptions.plotOptions,\n\tseriesTypes = Highcharts.seriesTypes,\n\tmerge = Highcharts.merge,\n\tnoop = function () {},\n\teach = Highcharts.each;\n\n// set default options\ndefaultPlotOptions.funnel = merge(defaultPlotOptions.pie, {\n\tcenter: ['50%', '50%'],\n\twidth: '90%',\n\tneckWidth: '30%',\n\theight: '100%',\n\tneckHeight: '25%',\n\n\tdataLabels: {\n\t\t//position: 'right',\n\t\tconnectorWidth: 1,\n\t\tconnectorColor: '#606060'\n\t},\n\tsize: true, // to avoid adapting to data label size in Pie.drawDataLabels\n\tstates: {\n\t\tselect: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tborderColor: '#000000',\n\t\t\tshadow: false\n\t\t}\n\t}\t\n});\n\n\nseriesTypes.funnel = Highcharts.extendClass(seriesTypes.pie, {\n\t\n\ttype: 'funnel',\n\tanimate: noop,\n\n\t/**\n\t * Overrides the pie translate method\n\t */\n\ttranslate: function () {\n\t\t\n\t\tvar \n\t\t\t// Get positions - either an integer or a percentage string must be given\n\t\t\tgetLength = function (length, relativeTo) {\n\t\t\t\treturn (/%$/).test(length) ?\n\t\t\t\t\trelativeTo * parseInt(length, 10) / 100 :\n\t\t\t\t\tparseInt(length, 10);\n\t\t\t},\n\t\t\t\n\t\t\tsum = 0,\n\t\t\tseries = this,\n\t\t\tchart = series.chart,\n\t\t\tplotWidth = chart.plotWidth,\n\t\t\tplotHeight = chart.plotHeight,\n\t\t\tcumulative = 0, // start at top\n\t\t\toptions = series.options,\n\t\t\tcenter = options.center,\n\t\t\tcenterX = getLength(center[0], plotWidth),\n\t\t\tcenterY = getLength(center[0], plotHeight),\n\t\t\twidth = getLength(options.width, plotWidth),\n\t\t\ttempWidth,\n\t\t\tgetWidthAt,\n\t\t\theight = getLength(options.height, plotHeight),\n\t\t\tneckWidth = getLength(options.neckWidth, plotWidth),\n\t\t\tneckHeight = getLength(options.neckHeight, plotHeight),\n\t\t\tneckY = height - neckHeight,\n\t\t\tdata = series.data,\n\t\t\tpath,\n\t\t\tfraction,\n\t\t\thalf = options.dataLabels.position === 'left' ? 1 : 0,\n\n\t\t\tx1, \n\t\t\ty1, \n\t\t\tx2, \n\t\t\tx3, \n\t\t\ty3, \n\t\t\tx4, \n\t\t\ty5;\n\n\t\t// Return the width at a specific y coordinate\n\t\tseries.getWidthAt = getWidthAt = function (y) {\n\t\t\treturn y > height - neckHeight || height === neckHeight ?\n\t\t\t\tneckWidth :\n\t\t\t\tneckWidth + (width - neckWidth) * ((height - neckHeight - y) / (height - neckHeight));\n\t\t};\n\t\tseries.getX = function (y, half) {\n\t\t\treturn centerX + (half ? -1 : 1) * ((getWidthAt(y) / 2) + options.dataLabels.distance);\n\t\t};\n\n\t\t// Expose\n\t\tseries.center = [centerX, centerY, height];\n\t\tseries.centerX = centerX;\n\n\t\t/*\n\t\t * Individual point coordinate naming:\n\t\t *\n\t\t * x1,y1 _________________ x2,y1\n\t\t *  \\                         /\n\t\t *   \\                       /\n\t\t *    \\                     /\n\t\t *     \\                   /\n\t\t *      \\                 /\n\t\t *     x3,y3 _________ x4,y3\n\t\t *\n\t\t * Additional for the base of the neck:\n\t\t *\n\t\t *       |               |\n\t\t *       |               |\n\t\t *       |               |\n\t\t *     x3,y5 _________ x4,y5\n\t\t */\n\n\n\n\n\t\t// get the total sum\n\t\teach(data, function (point) {\n\t\t\tsum += point.y;\n\t\t});\n\n\t\teach(data, function (point) {\n\t\t\t// set start and end positions\n\t\t\ty5 = null;\n\t\t\tfraction = sum ? point.y / sum : 0;\n\t\t\ty1 = centerY - height / 2 + cumulative * height;\n\t\t\ty3 = y1 + fraction * height;\n\t\t\t//tempWidth = neckWidth + (width - neckWidth) * ((height - neckHeight - y1) / (height - neckHeight));\n\t\t\ttempWidth = getWidthAt(y1);\n\t\t\tx1 = centerX - tempWidth / 2;\n\t\t\tx2 = x1 + tempWidth;\n\t\t\ttempWidth = getWidthAt(y3);\n\t\t\tx3 = centerX - tempWidth / 2;\n\t\t\tx4 = x3 + tempWidth;\n\n\t\t\t// the entire point is within the neck\n\t\t\tif (y1 > neckY) {\n\t\t\t\tx1 = x3 = centerX - neckWidth / 2;\n\t\t\t\tx2 = x4 = centerX + neckWidth / 2;\n\t\t\t\n\t\t\t// the base of the neck\n\t\t\t} else if (y3 > neckY) {\n\t\t\t\ty5 = y3;\n\n\t\t\t\ttempWidth = getWidthAt(neckY);\n\t\t\t\tx3 = centerX - tempWidth / 2;\n\t\t\t\tx4 = x3 + tempWidth;\n\n\t\t\t\ty3 = neckY;\n\t\t\t}\n\n\t\t\t// save the path\n\t\t\tpath = [\n\t\t\t\t'M',\n\t\t\t\tx1, y1,\n\t\t\t\t'L',\n\t\t\t\tx2, y1,\n\t\t\t\tx4, y3\n\t\t\t];\n\t\t\tif (y5) {\n\t\t\t\tpath.push(x4, y5, x3, y5);\n\t\t\t}\n\t\t\tpath.push(x3, y3, 'Z');\n\n\t\t\t// prepare for using shared dr\n\t\t\tpoint.shapeType = 'path';\n\t\t\tpoint.shapeArgs = { d: path };\n\n\n\t\t\t// for tooltips and data labels\n\t\t\tpoint.percentage = fraction * 100;\n\t\t\tpoint.plotX = centerX;\n\t\t\tpoint.plotY = (y1 + (y5 || y3)) / 2;\n\n\t\t\t// Placement of tooltips and data labels\n\t\t\tpoint.tooltipPos = [\n\t\t\t\tcenterX,\n\t\t\t\tpoint.plotY\n\t\t\t];\n\n\t\t\t// Slice is a noop on funnel points\n\t\t\tpoint.slice = noop;\n\t\t\t\n\t\t\t// Mimicking pie data label placement logic\n\t\t\tpoint.half = half;\n\n\t\t\tcumulative += fraction;\n\t\t});\n\n\n\t\tseries.setTooltipPoints();\n\t},\n\t/**\n\t * Draw a single point (wedge)\n\t * @param {Object} point The point object\n\t * @param {Object} color The color of the point\n\t * @param {Number} brightness The brightness relative to the color\n\t */\n\tdrawPoints: function () {\n\t\tvar series = this,\n\t\t\toptions = series.options,\n\t\t\tchart = series.chart,\n\t\t\trenderer = chart.renderer;\n\n\t\teach(series.data, function (point) {\n\t\t\t\n\t\t\tvar graphic = point.graphic,\n\t\t\t\tshapeArgs = point.shapeArgs;\n\n\t\t\tif (!graphic) { // Create the shapes\n\t\t\t\tpoint.graphic = renderer.path(shapeArgs).\n\t\t\t\t\tattr({\n\t\t\t\t\t\tfill: point.color,\n\t\t\t\t\t\tstroke: options.borderColor,\n\t\t\t\t\t\t'stroke-width': options.borderWidth\n\t\t\t\t\t}).\n\t\t\t\t\tadd(series.group);\n\t\t\t\t\t\n\t\t\t} else { // Update the shapes\n\t\t\t\tgraphic.animate(shapeArgs);\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Funnel items don't have angles (#2289)\n\t */\n\tsortByAngle: noop,\n\t\n\t/**\n\t * Extend the pie data label method\n\t */\n\tdrawDataLabels: function () {\n\t\tvar data = this.data,\n\t\t\tlabelDistance = this.options.dataLabels.distance,\n\t\t\tleftSide,\n\t\t\tsign,\n\t\t\tpoint,\n\t\t\ti = data.length,\n\t\t\tx,\n\t\t\ty;\n\t\t\n\t\t// In the original pie label anticollision logic, the slots are distributed\n\t\t// from one labelDistance above to one labelDistance below the pie. In funnels\n\t\t// we don't want this.\n\t\tthis.center[2] -= 2 * labelDistance;\n\t\t\n\t\t// Set the label position array for each point.\n\t\twhile (i--) {\n\t\t\tpoint = data[i];\n\t\t\tleftSide = point.half;\n\t\t\tsign = leftSide ? 1 : -1;\n\t\t\ty = point.plotY;\n\t\t\tx = this.getX(y, leftSide);\n\t\t\t\t\n\t\t\t// set the anchor point for data labels\n\t\t\tpoint.labelPos = [\n\t\t\t\t0, // first break of connector\n\t\t\t\ty, // a/a\n\t\t\t\tx + (labelDistance - 5) * sign, // second break, right outside point shape\n\t\t\t\ty, // a/a\n\t\t\t\tx + labelDistance * sign, // landing point for connector\n\t\t\t\ty, // a/a\n\t\t\t\tleftSide ? 'right' : 'left', // alignment\n\t\t\t\t0 // center angle\n\t\t\t];\n\t\t}\n\t\t\n\t\tseriesTypes.pie.prototype.drawDataLabels.call(this);\n\t}\n\n});\n\n\n}(Highcharts));\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/heatmap.js",
    "content": "(function(b){var k=b.seriesTypes,l=b.each;k.heatmap=b.extendClass(k.map,{colorKey:\"z\",useMapGeometry:!1,pointArrayMap:[\"y\",\"z\"],translate:function(){var c=this,b=c.options,i=Number.MAX_VALUE,j=Number.MIN_VALUE;c.generatePoints();l(c.data,function(a){var e=a.x,f=a.y,d=a.z,g=(b.colsize||1)/2,h=(b.rowsize||1)/2;a.path=[\"M\",e-g,f-h,\"L\",e+g,f-h,\"L\",e+g,f+h,\"L\",e-g,f+h,\"Z\"];a.shapeType=\"path\";a.shapeArgs={d:c.translatePath(a.path)};typeof d===\"number\"&&(d>j?j=d:d<i&&(i=d))});c.translateColors(i,j)},getBox:function(){}})})(Highcharts);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/heatmap.src.js",
    "content": "(function (Highcharts) {\n\tvar seriesTypes = Highcharts.seriesTypes,\n\t\teach = Highcharts.each;\n\t\n\tseriesTypes.heatmap = Highcharts.extendClass(seriesTypes.map, {\n\t\tcolorKey: 'z',\n\t\tuseMapGeometry: false,\n\t\tpointArrayMap: ['y', 'z'],\n\t\ttranslate: function () {\n\t\t\tvar series = this,\n\t\t\t\toptions = series.options,\n\t\t\t\tdataMin = Number.MAX_VALUE,\n\t\t\t\tdataMax = Number.MIN_VALUE;\n\n\t\t\tseries.generatePoints();\n\t\n\t\t\teach(series.data, function (point) {\n\t\t\t\tvar x = point.x,\n\t\t\t\t\ty = point.y,\n\t\t\t\t\tvalue = point.z,\n\t\t\t\t\txPad = (options.colsize || 1) / 2,\n\t\t\t\t\tyPad = (options.rowsize || 1) / 2;\n\n\t\t\t\tpoint.path = [\n\t\t\t\t\t'M', x - xPad, y - yPad,\n\t\t\t\t\t'L', x + xPad, y - yPad,\n\t\t\t\t\t'L', x + xPad, y + yPad,\n\t\t\t\t\t'L', x - xPad, y + yPad,\n\t\t\t\t\t'Z'\n\t\t\t\t];\n\t\t\t\t\n\t\t\t\tpoint.shapeType = 'path';\n\t\t\t\tpoint.shapeArgs = {\n\t\t\t\t\td: series.translatePath(point.path)\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (typeof value === 'number') {\n\t\t\t\t\tif (value > dataMax) {\n\t\t\t\t\t\tdataMax = value;\n\t\t\t\t\t} else if (value < dataMin) {\n\t\t\t\t\t\tdataMin = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tseries.translateColors(dataMin, dataMax);\n\t\t},\n\t\t\n\t\tgetBox: function () {}\n\t\t\t\n\t});\n\t\n}(Highcharts));\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/map.js",
    "content": "/*\n Map plugin v0.1 for Highcharts\n\n (c) 2011-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function(g){function x(a,b,c){for(var d=4,e=[];d--;)e[d]=Math.round(b.rgba[d]+(a.rgba[d]-b.rgba[d])*(1-c));return\"rgba(\"+e.join(\",\")+\")\"}var r=g.Axis,y=g.Chart,s=g.Point,z=g.Pointer,l=g.each,v=g.extend,p=g.merge,n=g.pick,A=g.numberFormat,B=g.getOptions(),k=g.seriesTypes,q=B.plotOptions,t=g.wrap,u=g.Color,w=function(){};B.mapNavigation={buttonOptions:{align:\"right\",verticalAlign:\"bottom\",x:0,width:18,height:18,style:{fontSize:\"15px\",fontWeight:\"bold\",textAlign:\"center\"}},buttons:{zoomIn:{onclick:function(){this.mapZoom(0.5)},\ntext:\"+\",y:-32},zoomOut:{onclick:function(){this.mapZoom(2)},text:\"-\",y:0}}};g.splitPath=function(a){var b,a=a.replace(/([A-Za-z])/g,\" $1 \"),a=a.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\"),a=a.split(/[ ,]+/);for(b=0;b<a.length;b++)/[a-zA-Z]/.test(a[b])||(a[b]=parseFloat(a[b]));return a};g.maps={};t(r.prototype,\"getSeriesExtremes\",function(a){var b=this.isXAxis,c,d,e=[];l(this.series,function(a,b){if(a.useMapGeometry)e[b]=a.xData,a.xData=[]});a.call(this);c=n(this.dataMin,Number.MAX_VALUE);d=n(this.dataMax,\nNumber.MIN_VALUE);l(this.series,function(a,i){if(a.useMapGeometry)c=Math.min(c,a[b?\"minX\":\"minY\"]),d=Math.max(d,a[b?\"maxX\":\"maxY\"]),a.xData=e[i]});this.dataMin=c;this.dataMax=d});t(r.prototype,\"setAxisTranslation\",function(a){var b=this.chart,c=b.plotWidth/b.plotHeight,d=this.isXAxis,e=b.xAxis[0];a.call(this);if(b.options.chart.type===\"map\"&&!d&&e.transA!==void 0)this.transA=e.transA=Math.min(this.transA,e.transA),a=(e.max-e.min)/(this.max-this.min),e=a>c?this:e,c=(e.max-e.min)*e.transA,e.minPixelPadding=\n(e.len-c)/2});t(y.prototype,\"render\",function(a){var b=this,c=b.options.mapNavigation;a.call(b);b.renderMapNavigation();c.zoomOnDoubleClick&&g.addEvent(b.container,\"dblclick\",function(a){b.pointer.onContainerDblClick(a)});c.zoomOnMouseWheel&&g.addEvent(b.container,document.onmousewheel===void 0?\"DOMMouseScroll\":\"mousewheel\",function(a){b.pointer.onContainerMouseWheel(a)})});v(z.prototype,{onContainerDblClick:function(a){var b=this.chart,a=this.normalize(a);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-\nb.plotTop)&&b.mapZoom(0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY))},onContainerMouseWheel:function(a){var b=this.chart,c,a=this.normalize(a);c=a.detail||-(a.wheelDelta/120);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&b.mapZoom(c>0?2:0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY))}});t(z.prototype,\"init\",function(a,b,c){a.call(this,b,c);if(c.mapNavigation.enableTouchZoom)this.pinchX=this.pinchHor=this.pinchY=this.pinchVert=!0});v(y.prototype,{renderMapNavigation:function(){var a=\nthis,b=this.options.mapNavigation,c=b.buttons,d,e,f,i=function(){this.handler.call(a)};if(b.enableButtons)for(d in c)if(c.hasOwnProperty(d))f=p(b.buttonOptions,c[d]),e=a.renderer.button(f.text,0,0,i).attr({width:f.width,height:f.height}).css(f.style).add(),e.handler=f.onclick,e.align(v(f,{width:e.width,height:e.height}),null,\"spacingBox\")},fitToBox:function(a,b){l([[\"x\",\"width\"],[\"y\",\"height\"]],function(c){var d=c[0],c=c[1];a[d]+a[c]>b[d]+b[c]&&(a[c]>b[c]?(a[c]=b[c],a[d]=b[d]):a[d]=b[d]+b[c]-a[c]);\na[c]>b[c]&&(a[c]=b[c]);a[d]<b[d]&&(a[d]=b[d])});return a},mapZoom:function(a,b,c){if(!this.isMapZooming){var d=this,e=d.xAxis[0],f=e.max-e.min,i=n(b,e.min+f/2),b=f*a,f=d.yAxis[0],h=f.max-f.min,c=n(c,f.min+h/2);a*=h;i-=b/2;h=c-a/2;c=n(d.options.chart.animation,!0);b=d.fitToBox({x:i,y:h,width:b,height:a},{x:e.dataMin,y:f.dataMin,width:e.dataMax-e.dataMin,height:f.dataMax-f.dataMin});e.setExtremes(b.x,b.x+b.width,!1);f.setExtremes(b.y,b.y+b.height,!1);if(e=c?c.duration||500:0)d.isMapZooming=!0,setTimeout(function(){d.isMapZooming=\n!1},e);d.redraw()}}});q.map=p(q.scatter,{animation:!1,nullColor:\"#F8F8F8\",borderColor:\"silver\",borderWidth:1,marker:null,stickyTracking:!1,dataLabels:{verticalAlign:\"middle\"},turboThreshold:0,tooltip:{followPointer:!0,pointFormat:\"{point.name}: {point.y}<br/>\"},states:{normal:{animation:!0}}});r=g.extendClass(s,{applyOptions:function(a,b){var c=s.prototype.applyOptions.call(this,a,b);if(c.path&&typeof c.path===\"string\")c.path=c.options.path=g.splitPath(c.path);return c},onMouseOver:function(){clearTimeout(this.colorInterval);\ns.prototype.onMouseOver.call(this)},onMouseOut:function(){var a=this,b=+new Date,c=u(a.options.color),d=u(a.pointAttr.hover.fill),e=a.series.options.states.normal.animation,f=e&&(e.duration||500);if(f&&c.rgba.length===4&&d.rgba.length===4)delete a.pointAttr[\"\"].fill,clearTimeout(a.colorInterval),a.colorInterval=setInterval(function(){var e=(new Date-b)/f,h=a.graphic;e>1&&(e=1);h&&h.attr(\"fill\",x(d,c,e));e>=1&&clearTimeout(a.colorInterval)},13);s.prototype.onMouseOut.call(a)}});k.map=g.extendClass(k.scatter,\n{type:\"map\",pointAttrToOptions:{stroke:\"borderColor\",\"stroke-width\":\"borderWidth\",fill:\"color\"},colorKey:\"y\",pointClass:r,trackerGroups:[\"group\",\"markerGroup\",\"dataLabelsGroup\"],getSymbol:w,supportsDrilldown:!0,getExtremesFromAll:!0,useMapGeometry:!0,init:function(a){var b=this,c=a.options.legend.valueDecimals,d=[],e,f,i,h,j,o,m;o=a.options.legend.layout===\"horizontal\";g.Series.prototype.init.apply(this,arguments);j=b.options.colorRange;if(h=b.options.valueRanges)l(h,function(a){f=a.from;i=a.to;e=\n\"\";f===void 0?e=\"< \":i===void 0&&(e=\"> \");f!==void 0&&(e+=A(f,c));f!==void 0&&i!==void 0&&(e+=\" - \");i!==void 0&&(e+=A(i,c));d.push(g.extend({chart:b.chart,name:e,options:{},drawLegendSymbol:k.area.prototype.drawLegendSymbol,visible:!0,setState:function(){},setVisible:function(){}},a))}),b.legendItems=d;else if(j)f=j.from,i=j.to,h=j.fromLabel,j=j.toLabel,m=o?[0,0,1,0]:[0,1,0,0],o||(o=h,h=j,j=o),o={linearGradient:{x1:m[0],y1:m[1],x2:m[2],y2:m[3]},stops:[[0,f],[1,i]]},d=[{chart:b.chart,options:{},fromLabel:h,\ntoLabel:j,color:o,drawLegendSymbol:this.drawLegendSymbolGradient,visible:!0,setState:function(){},setVisible:function(){}}],b.legendItems=d},drawLegendSymbol:k.area.prototype.drawLegendSymbol,drawLegendSymbolGradient:function(a,b){var c=a.options.symbolPadding,d=n(a.options.padding,8),e,f,i=this.chart.renderer.fontMetrics(a.options.itemStyle.fontSize).h,h=a.options.layout===\"horizontal\",j;j=n(a.options.rectangleLength,200);h?(e=-(c/2),f=0):(e=-j+a.baseline-c/2,f=d+i);b.fromText=this.chart.renderer.text(b.fromLabel,\nf,e).attr({zIndex:2}).add(b.legendGroup);f=b.fromText.getBBox();b.legendSymbol=this.chart.renderer.rect(h?f.x+f.width+c:f.x-i-c,f.y,h?j:i,h?i:j,2).attr({zIndex:1}).add(b.legendGroup);j=b.legendSymbol.getBBox();b.toText=this.chart.renderer.text(b.toLabel,j.x+j.width+c,h?e:j.y+j.height-c).attr({zIndex:2}).add(b.legendGroup);e=b.toText.getBBox();h?(a.offsetWidth=f.width+j.width+e.width+c*2+d,a.itemY=i+d):(a.offsetWidth=Math.max(f.width,e.width)+c+j.width+d,a.itemY=j.height+d,a.itemX=c)},getBox:function(a){var b=\nNumber.MIN_VALUE,c=Number.MAX_VALUE,d=Number.MIN_VALUE,e=Number.MAX_VALUE;l(a||this.options.data,function(a){for(var i=a.path,h=i.length,j=!1,g=Number.MIN_VALUE,m=Number.MAX_VALUE,k=Number.MIN_VALUE,l=Number.MAX_VALUE;h--;)typeof i[h]===\"number\"&&!isNaN(i[h])&&(j?(g=Math.max(g,i[h]),m=Math.min(m,i[h])):(k=Math.max(k,i[h]),l=Math.min(l,i[h])),j=!j);a._maxX=g;a._minX=m;a._maxY=k;a._minY=l;b=Math.max(b,g);c=Math.min(c,m);d=Math.max(d,k);e=Math.min(e,l)});this.minY=e;this.maxY=d;this.minX=c;this.maxX=\nb},translatePath:function(a){var b=!1,c=this.xAxis,d=this.yAxis,e,a=[].concat(a);for(e=a.length;e--;)typeof a[e]===\"number\"&&(a[e]=b?Math.round(c.translate(a[e])):Math.round(d.len-d.translate(a[e])),b=!b);return a},setData:function(){g.Series.prototype.setData.apply(this,arguments);this.getBox()},translate:function(){var a=this,b=Number.MAX_VALUE,c=Number.MIN_VALUE;a.generatePoints();l(a.data,function(d){d.shapeType=\"path\";d.shapeArgs={d:a.translatePath(d.path)};if(typeof d.y===\"number\")if(d.y>c)c=\nd.y;else if(d.y<b)b=d.y});a.translateColors(b,c)},translateColors:function(a,b){var c=this.options,d=c.valueRanges,e=c.colorRange,f=this.colorKey,i,h;e&&(i=u(e.from),h=u(e.to));l(this.data,function(g){var k=g[f],m,l,n;if(d)for(n=d.length;n--;){if(m=d[n],i=m.from,h=m.to,(i===void 0||k>=i)&&(h===void 0||k<=h)){l=m.color;break}}else e&&k!==void 0&&(m=1-(b-k)/(b-a),l=k===null?c.nullColor:x(i,h,m));if(l)g.color=null,g.options.color=l})},drawGraph:w,drawDataLabels:w,drawPoints:function(){var a=this.xAxis,\nb=this.yAxis,c=this.colorKey;l(this.data,function(a){a.plotY=1;if(a[c]===null)a[c]=0,a.isNull=!0});k.column.prototype.drawPoints.apply(this);l(this.data,function(d){var e=d.dataLabels,f=a.toPixels(d._minX,!0),g=a.toPixels(d._maxX,!0),h=b.toPixels(d._minY,!0),j=b.toPixels(d._maxY,!0);d.plotX=Math.round(f+(g-f)*n(e&&e.anchorX,0.5));d.plotY=Math.round(h+(j-h)*n(e&&e.anchorY,0.5));d.isNull&&(d[c]=null)});g.Series.prototype.drawDataLabels.call(this)},animateDrilldown:function(a){var b=this.chart.plotBox,\nc=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],d=c.bBox,e=this.chart.options.drilldown.animation;if(!a)a=Math.min(d.width/b.width,d.height/b.height),c.shapeArgs={scaleX:a,scaleY:a,translateX:d.x,translateY:d.y},l(this.points,function(a){a.graphic.attr(c.shapeArgs).animate({scaleX:1,scaleY:1,translateX:0,translateY:0},e)}),delete this.animate},animateDrillupFrom:function(a){k.column.prototype.animateDrillupFrom.call(this,a)},animateDrillupTo:function(a){k.column.prototype.animateDrillupTo.call(this,\na)}});q.mapline=p(q.map,{lineWidth:1,backgroundColor:\"none\"});k.mapline=g.extendClass(k.map,{type:\"mapline\",pointAttrToOptions:{stroke:\"color\",\"stroke-width\":\"lineWidth\",fill:\"backgroundColor\"},drawLegendSymbol:k.line.prototype.drawLegendSymbol});q.mappoint=p(q.scatter,{dataLabels:{enabled:!0,format:\"{point.name}\",color:\"black\",style:{textShadow:\"0 0 5px white\"}}});k.mappoint=g.extendClass(k.scatter,{type:\"mappoint\"});g.Map=function(a,b){var c={endOnTick:!1,gridLineWidth:0,labels:{enabled:!1},lineWidth:0,\nminPadding:0,maxPadding:0,startOnTick:!1,tickWidth:0,title:null},d;d=a.series;a.series=null;a=p({chart:{type:\"map\",panning:\"xy\"},xAxis:c,yAxis:p(c,{reversed:!0})},a,{chart:{inverted:!1}});a.series=d;return new g.Chart(a,b)}})(Highcharts);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/map.src.js",
    "content": "/**\n * @license Map plugin v0.1 for Highcharts\n *\n * (c) 2011-2013 Torstein Hønsi\n *\n * License: www.highcharts.com/license\n */\n\n/* \n * See www.highcharts.com/studies/world-map.htm for use case.\n *\n * To do:\n * - Optimize long variable names and alias adapter methods and Highcharts namespace variables\n * - Zoom and pan GUI\n */\n(function (Highcharts) {\n\tvar UNDEFINED,\n\t\tAxis = Highcharts.Axis,\n\t\tChart = Highcharts.Chart,\n\t\tPoint = Highcharts.Point,\n\t\tPointer = Highcharts.Pointer,\n\t\teach = Highcharts.each,\n\t\textend = Highcharts.extend,\n\t\tmerge = Highcharts.merge,\n\t\tpick = Highcharts.pick,\n\t\tnumberFormat = Highcharts.numberFormat,\n\t\tdefaultOptions = Highcharts.getOptions(),\n\t\tseriesTypes = Highcharts.seriesTypes,\n\t\tplotOptions = defaultOptions.plotOptions,\n\t\twrap = Highcharts.wrap,\n\t\tColor = Highcharts.Color,\n\t\tnoop = function () {};\n\n\t\n\n\t/*\n\t * Return an intermediate color between two colors, according to pos where 0\n\t * is the from color and 1 is the to color\n\t */\n\tfunction tweenColors(from, to, pos) {\n\t\tvar i = 4,\n\t\t\trgba = [];\n\n\t\twhile (i--) {\n\t\t\trgba[i] = Math.round(\n\t\t\t\tto.rgba[i] + (from.rgba[i] - to.rgba[i]) * (1 - pos)\n\t\t\t);\n\t\t}\n\t\treturn 'rgba(' + rgba.join(',') + ')';\n\t}\n\n\t// Set the default map navigation options\n\tdefaultOptions.mapNavigation = {\n\t\tbuttonOptions: {\n\t\t\talign: 'right',\n\t\t\tverticalAlign: 'bottom',\n\t\t\tx: 0,\n\t\t\twidth: 18,\n\t\t\theight: 18,\n\t\t\tstyle: {\n\t\t\t\tfontSize: '15px',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\ttextAlign: 'center'\n\t\t\t}\n\t\t},\n\t\tbuttons: {\n\t\t\tzoomIn: {\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.mapZoom(0.5);\n\t\t\t\t},\n\t\t\t\ttext: '+',\n\t\t\t\ty: -32\n\t\t\t},\n\t\t\tzoomOut: {\n\t\t\t\tonclick: function () {\n\t\t\t\t\tthis.mapZoom(2);\n\t\t\t\t},\n\t\t\t\ttext: '-',\n\t\t\t\ty: 0\n\t\t\t}\n\t\t}\n\t\t// enableButtons: false,\n\t\t// enableTouchZoom: false,\n\t\t// zoomOnDoubleClick: false,\n\t\t// zoomOnMouseWheel: false\n\n\t};\n\t\n\t/**\n\t * Utility for reading SVG paths directly.\n\t */\n\tHighcharts.splitPath = function (path) {\n\t\tvar i;\n\n\t\t// Move letters apart\n\t\tpath = path.replace(/([A-Za-z])/g, ' $1 ');\n\t\t// Trim\n\t\tpath = path.replace(/^\\s*/, \"\").replace(/\\s*$/, \"\");\n\t\t\n\t\t// Split on spaces and commas\n\t\tpath = path.split(/[ ,]+/);\n\t\t\n\t\t// Parse numbers\n\t\tfor (i = 0; i < path.length; i++) {\n\t\t\tif (!/[a-zA-Z]/.test(path[i])) {\n\t\t\t\tpath[i] = parseFloat(path[i]);\n\t\t\t}\n\t\t}\n\t\treturn path;\n\t};\n\n\t// A placeholder for map definitions\n\tHighcharts.maps = {};\n\t\n\t/**\n\t * Override to use the extreme coordinates from the SVG shape, not the\n\t * data values\n\t */\n\twrap(Axis.prototype, 'getSeriesExtremes', function (proceed) {\n\t\tvar isXAxis = this.isXAxis,\n\t\t\tdataMin,\n\t\t\tdataMax,\n\t\t\txData = [];\n\n\t\t// Remove the xData array and cache it locally so that the proceed method doesn't use it\n\t\teach(this.series, function (series, i) {\n\t\t\tif (series.useMapGeometry) {\n\t\t\t\txData[i] = series.xData;\n\t\t\t\tseries.xData = [];\n\t\t\t}\n\t\t});\n\n\t\t// Call base to reach normal cartesian series (like mappoint)\n\t\tproceed.call(this);\n\n\t\t// Run extremes logic for map and mapline\n\t\tdataMin = pick(this.dataMin, Number.MAX_VALUE);\n\t\tdataMax = pick(this.dataMax, Number.MIN_VALUE);\n\t\teach(this.series, function (series, i) {\n\t\t\tif (series.useMapGeometry) {\n\t\t\t\tdataMin = Math.min(dataMin, series[isXAxis ? 'minX' : 'minY']);\n\t\t\t\tdataMax = Math.max(dataMax, series[isXAxis ? 'maxX' : 'maxY']);\n\t\t\t\tseries.xData = xData[i]; // Reset xData array\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.dataMin = dataMin;\n\t\tthis.dataMax = dataMax;\n\t});\n\t\n\t/**\n\t * Override axis translation to make sure the aspect ratio is always kept\n\t */\n\twrap(Axis.prototype, 'setAxisTranslation', function (proceed) {\n\t\tvar chart = this.chart,\n\t\t\tmapRatio,\n\t\t\tplotRatio = chart.plotWidth / chart.plotHeight,\n\t\t\tisXAxis = this.isXAxis,\n\t\t\tadjustedAxisLength,\n\t\t\txAxis = chart.xAxis[0],\n\t\t\tpadAxis;\n\t\t\n\t\t// Run the parent method\n\t\tproceed.call(this);\n\t\t\n\t\t// On Y axis, handle both\n\t\tif (chart.options.chart.type === 'map' && !isXAxis && xAxis.transA !== UNDEFINED) {\n\t\t\t\n\t\t\t// Use the same translation for both axes\n\t\t\tthis.transA = xAxis.transA = Math.min(this.transA, xAxis.transA);\n\t\t\t\n\t\t\tmapRatio = (xAxis.max - xAxis.min) / (this.max - this.min);\n\t\t\t\n\t\t\t// What axis to pad to put the map in the middle\n\t\t\tpadAxis = mapRatio > plotRatio ? this : xAxis;\n\t\t\t\n\t\t\t// Pad it\n\t\t\tadjustedAxisLength = (padAxis.max - padAxis.min) * padAxis.transA;\n\t\t\tpadAxis.minPixelPadding = (padAxis.len - adjustedAxisLength) / 2;\n\t\t}\n\t});\n\n\n\t//--- Start zooming and panning features\n\n\twrap(Chart.prototype, 'render', function (proceed) {\n\t\tvar chart = this,\n\t\t\tmapNavigation = chart.options.mapNavigation;\n\n\t\tproceed.call(chart);\n\n\t\t// Render the plus and minus buttons\n\t\tchart.renderMapNavigation();\n\n\t\t// Add the double click event\n\t\tif (mapNavigation.zoomOnDoubleClick) {\n\t\t\tHighcharts.addEvent(chart.container, 'dblclick', function (e) {\n\t\t\t\tchart.pointer.onContainerDblClick(e);\n\t\t\t});\n\t\t}\n\n\t\t// Add the mousewheel event\n\t\tif (mapNavigation.zoomOnMouseWheel) {\n\t\t\tHighcharts.addEvent(chart.container, document.onmousewheel === undefined ? 'DOMMouseScroll' : 'mousewheel', function (e) {\n\t\t\t\tchart.pointer.onContainerMouseWheel(e);\n\t\t\t});\n\t\t}\n\t});\n\n\t// Extend the Pointer\n\textend(Pointer.prototype, {\n\n\t\t/**\n\t\t * The event handler for the doubleclick event\n\t\t */\n\t\tonContainerDblClick: function (e) {\n\t\t\tvar chart = this.chart;\n\n\t\t\te = this.normalize(e);\n\n\t\t\tif (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\t\t\t\tchart.mapZoom(\n\t\t\t\t\t0.5,\n\t\t\t\t\tchart.xAxis[0].toValue(e.chartX),\n\t\t\t\t\tchart.yAxis[0].toValue(e.chartY)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The event handler for the mouse scroll event\n\t\t */\n\t\tonContainerMouseWheel: function (e) {\n\t\t\tvar chart = this.chart,\n\t\t\t\tdelta;\n\n\t\t\te = this.normalize(e);\n\n\t\t\t// Firefox uses e.detail, WebKit and IE uses wheelDelta\n\t\t\tdelta = e.detail || -(e.wheelDelta / 120);\n\t\t\tif (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {\n\t\t\t\tchart.mapZoom(\n\t\t\t\t\tdelta > 0 ? 2 : 0.5,\n\t\t\t\t\tchart.xAxis[0].toValue(e.chartX),\n\t\t\t\t\tchart.yAxis[0].toValue(e.chartY)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\t// Implement the pinchType option\n\twrap(Pointer.prototype, 'init', function (proceed, chart, options) {\n\n\t\tproceed.call(this, chart, options);\n\n\t\t// Pinch status\n\t\tif (options.mapNavigation.enableTouchZoom) {\n\t\t\tthis.pinchX = this.pinchHor = \n\t\t\t\tthis.pinchY = this.pinchVert = true;\n\t\t}\n\t});\n\n\t// Add events to the Chart object itself\n\textend(Chart.prototype, {\n\t\trenderMapNavigation: function () {\n\t\t\tvar chart = this,\n\t\t\t\toptions = this.options.mapNavigation,\n\t\t\t\tbuttons = options.buttons,\n\t\t\t\tn,\n\t\t\t\tbutton,\n\t\t\t\tbuttonOptions,\n\t\t\t\touterHandler = function () { \n\t\t\t\t\tthis.handler.call(chart); \n\t\t\t\t};\n\n\t\t\tif (options.enableButtons) {\n\t\t\t\tfor (n in buttons) {\n\t\t\t\t\tif (buttons.hasOwnProperty(n)) {\n\t\t\t\t\t\tbuttonOptions = merge(options.buttonOptions, buttons[n]);\n\n\t\t\t\t\t\tbutton = chart.renderer.button(buttonOptions.text, 0, 0, outerHandler)\n\t\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t\twidth: buttonOptions.width,\n\t\t\t\t\t\t\t\theight: buttonOptions.height\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.css(buttonOptions.style)\n\t\t\t\t\t\t\t.add();\n\t\t\t\t\t\tbutton.handler = buttonOptions.onclick;\n\t\t\t\t\t\tbutton.align(extend(buttonOptions, { width: button.width, height: button.height }), null, 'spacingBox');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fit an inner box to an outer. If the inner box overflows left or right, align it to the sides of the\n\t\t * outer. If it overflows both sides, fit it within the outer. This is a pattern that occurs more places\n\t\t * in Highcharts, perhaps it should be elevated to a common utility function.\n\t\t */\n\t\tfitToBox: function (inner, outer) {\n\t\t\teach([['x', 'width'], ['y', 'height']], function (dim) {\n\t\t\t\tvar pos = dim[0],\n\t\t\t\t\tsize = dim[1];\n\t\t\t\tif (inner[pos] + inner[size] > outer[pos] + outer[size]) { // right overflow\n\t\t\t\t\tif (inner[size] > outer[size]) { // the general size is greater, fit fully to outer\n\t\t\t\t\t\tinner[size] = outer[size];\n\t\t\t\t\t\tinner[pos] = outer[pos];\n\t\t\t\t\t} else { // align right\n\t\t\t\t\t\tinner[pos] = outer[pos] + outer[size] - inner[size];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (inner[size] > outer[size]) {\n\t\t\t\t\tinner[size] = outer[size];\n\t\t\t\t}\n\t\t\t\tif (inner[pos] < outer[pos]) {\n\t\t\t\t\tinner[pos] = outer[pos];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\n\t\t\treturn inner;\n\t\t},\n\n\t\t/**\n\t\t * Zoom the map in or out by a certain amount. Less than 1 zooms in, greater than 1 zooms out.\n\t\t */\n\t\tmapZoom: function (howMuch, centerXArg, centerYArg) {\n\n\t\t\tif (this.isMapZooming) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar chart = this,\n\t\t\t\txAxis = chart.xAxis[0],\n\t\t\t\txRange = xAxis.max - xAxis.min,\n\t\t\t\tcenterX = pick(centerXArg, xAxis.min + xRange / 2),\n\t\t\t\tnewXRange = xRange * howMuch,\n\t\t\t\tyAxis = chart.yAxis[0],\n\t\t\t\tyRange = yAxis.max - yAxis.min,\n\t\t\t\tcenterY = pick(centerYArg, yAxis.min + yRange / 2),\n\t\t\t\tnewYRange = yRange * howMuch,\n\t\t\t\tnewXMin = centerX - newXRange / 2,\n\t\t\t\tnewYMin = centerY - newYRange / 2,\n\t\t\t\tanimation = pick(chart.options.chart.animation, true),\n\t\t\t\tdelay,\n\t\t\t\tnewExt = chart.fitToBox({\n\t\t\t\t\tx: newXMin,\n\t\t\t\t\ty: newYMin,\n\t\t\t\t\twidth: newXRange,\n\t\t\t\t\theight: newYRange\n\t\t\t\t}, {\n\t\t\t\t\tx: xAxis.dataMin,\n\t\t\t\t\ty: yAxis.dataMin,\n\t\t\t\t\twidth: xAxis.dataMax - xAxis.dataMin,\n\t\t\t\t\theight: yAxis.dataMax - yAxis.dataMin\n\t\t\t\t});\n\n\t\t\txAxis.setExtremes(newExt.x, newExt.x + newExt.width, false);\n\t\t\tyAxis.setExtremes(newExt.y, newExt.y + newExt.height, false);\n\n\t\t\t// Prevent zooming until this one is finished animating\n\t\t\tdelay = animation ? animation.duration || 500 : 0;\n\t\t\tif (delay) {\n\t\t\t\tchart.isMapZooming = true;\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tchart.isMapZooming = false;\n\t\t\t\t}, delay);\n\t\t\t}\n\n\t\t\tchart.redraw();\n\t\t}\n\t});\n\t\n\t/**\n\t * Extend the default options with map options\n\t */\n\tplotOptions.map = merge(plotOptions.scatter, {\n\t\tanimation: false, // makes the complex shapes slow\n\t\tnullColor: '#F8F8F8',\n\t\tborderColor: 'silver',\n\t\tborderWidth: 1,\n\t\tmarker: null,\n\t\tstickyTracking: false,\n\t\tdataLabels: {\n\t\t\tverticalAlign: 'middle'\n\t\t},\n\t\tturboThreshold: 0,\n\t\ttooltip: {\n\t\t\tfollowPointer: true,\n\t\t\tpointFormat: '{point.name}: {point.y}<br/>'\n\t\t},\n\t\tstates: {\n\t\t\tnormal: {\n\t\t\t\tanimation: true\n\t\t\t}\n\t\t}\n\t});\n\n\tvar MapAreaPoint = Highcharts.extendClass(Point, {\n\t\t/**\n\t\t * Extend the Point object to split paths\n\t\t */\n\t\tapplyOptions: function (options, x) {\n\n\t\t\tvar point = Point.prototype.applyOptions.call(this, options, x);\n\n\t\t\tif (point.path && typeof point.path === 'string') {\n\t\t\t\tpoint.path = point.options.path = Highcharts.splitPath(point.path);\n\t\t\t}\n\n\t\t\treturn point;\n\t\t},\n\t\t/**\n\t\t * Stop the fade-out \n\t\t */\n\t\tonMouseOver: function () {\n\t\t\tclearTimeout(this.colorInterval);\n\t\t\tPoint.prototype.onMouseOver.call(this);\n\t\t},\n\t\t/**\n\t\t * Custom animation for tweening out the colors. Animation reduces blinking when hovering\n\t\t * over islands and coast lines. We run a custom implementation of animation becuase we\n\t\t * need to be able to run this independently from other animations like zoom redraw. Also,\n\t\t * adding color animation to the adapters would introduce almost the same amount of code.\n\t\t */\n\t\tonMouseOut: function () {\n\t\t\tvar point = this,\n\t\t\t\tstart = +new Date(),\n\t\t\t\tnormalColor = Color(point.options.color),\n\t\t\t\thoverColor = Color(point.pointAttr.hover.fill),\n\t\t\t\tanimation = point.series.options.states.normal.animation,\n\t\t\t\tduration = animation && (animation.duration || 500);\n\n\t\t\tif (duration && normalColor.rgba.length === 4 && hoverColor.rgba.length === 4) {\n\t\t\t\tdelete point.pointAttr[''].fill; // avoid resetting it in Point.setState\n\n\t\t\t\tclearTimeout(point.colorInterval);\n\t\t\t\tpoint.colorInterval = setInterval(function () {\n\t\t\t\t\tvar pos = (new Date() - start) / duration,\n\t\t\t\t\t\tgraphic = point.graphic;\n\t\t\t\t\tif (pos > 1) {\n\t\t\t\t\t\tpos = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (graphic) {\n\t\t\t\t\t\tgraphic.attr('fill', tweenColors(hoverColor, normalColor, pos));\n\t\t\t\t\t}\n\t\t\t\t\tif (pos >= 1) {\n\t\t\t\t\t\tclearTimeout(point.colorInterval);\n\t\t\t\t\t}\n\t\t\t\t}, 13);\n\t\t\t}\n\t\t\tPoint.prototype.onMouseOut.call(point);\n\t\t}\n\t});\n\n\t/**\n\t * Add the series type\n\t */\n\tseriesTypes.map = Highcharts.extendClass(seriesTypes.scatter, {\n\t\ttype: 'map',\n\t\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\t\tstroke: 'borderColor',\n\t\t\t'stroke-width': 'borderWidth',\n\t\t\tfill: 'color'\n\t\t},\n\t\tcolorKey: 'y',\n\t\tpointClass: MapAreaPoint,\n\t\ttrackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'],\n\t\tgetSymbol: noop,\n\t\tsupportsDrilldown: true,\n\t\tgetExtremesFromAll: true,\n\t\tuseMapGeometry: true, // get axis extremes from paths, not values\n\t\tinit: function (chart) {\n\t\t\tvar series = this,\n\t\t\t\tvalueDecimals = chart.options.legend.valueDecimals,\n\t\t\t\tlegendItems = [],\n\t\t\t\tname,\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t\tfromLabel,\n\t\t\t\ttoLabel,\n\t\t\t\tcolorRange,\n\t\t\t\tvalueRanges,\n\t\t\t\tgradientColor,\n\t\t\t\tgrad,\n\t\t\t\ttmpLabel,\n\t\t\t\thorizontal = chart.options.legend.layout === 'horizontal';\n\n\t\t\t\n\t\t\tHighcharts.Series.prototype.init.apply(this, arguments);\n\t\t\tcolorRange = series.options.colorRange;\n\t\t\tvalueRanges = series.options.valueRanges;\n\n\t\t\tif (valueRanges) {\n\t\t\t\teach(valueRanges, function (range) {\n\t\t\t\t\tfrom = range.from;\n\t\t\t\t\tto = range.to;\n\t\t\t\t\t\n\t\t\t\t\t// Assemble the default name. This can be overridden by legend.options.labelFormatter\n\t\t\t\t\tname = '';\n\t\t\t\t\tif (from === UNDEFINED) {\n\t\t\t\t\t\tname = '< ';\n\t\t\t\t\t} else if (to === UNDEFINED) {\n\t\t\t\t\t\tname = '> ';\n\t\t\t\t\t}\n\t\t\t\t\tif (from !== UNDEFINED) {\n\t\t\t\t\t\tname += numberFormat(from, valueDecimals);\n\t\t\t\t\t}\n\t\t\t\t\tif (from !== UNDEFINED && to !== UNDEFINED) {\n\t\t\t\t\t\tname += ' - ';\n\t\t\t\t\t}\n\t\t\t\t\tif (to !== UNDEFINED) {\n\t\t\t\t\t\tname += numberFormat(to, valueDecimals);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Add a mock object to the legend items\n\t\t\t\t\tlegendItems.push(Highcharts.extend({\n\t\t\t\t\t\tchart: series.chart,\n\t\t\t\t\t\tname: name,\n\t\t\t\t\t\toptions: {},\n\t\t\t\t\t\tdrawLegendSymbol: seriesTypes.area.prototype.drawLegendSymbol,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tsetState: function () {},\n\t\t\t\t\t\tsetVisible: function () {}\n\t\t\t\t\t}, range));\n\t\t\t\t});\n\t\t\t\tseries.legendItems = legendItems;\n\n\t\t\t} else if (colorRange) {\n\n\t\t\t\tfrom = colorRange.from;\n\t\t\t\tto = colorRange.to;\n\t\t\t\tfromLabel = colorRange.fromLabel;\n\t\t\t\ttoLabel = colorRange.toLabel;\n\n\t\t\t\t// Flips linearGradient variables and label text.\n\t\t\t\tgrad = horizontal ? [0, 0, 1, 0] : [0, 1, 0, 0]; \n\t\t\t\tif (!horizontal) {\n\t\t\t\t\ttmpLabel = fromLabel;\n\t\t\t\t\tfromLabel = toLabel;\n\t\t\t\t\ttoLabel = tmpLabel;\n\t\t\t\t} \n\n\t\t\t\t// Creates color gradient.\n\t\t\t\tgradientColor = {\n\t\t\t\t\tlinearGradient: { x1: grad[0], y1: grad[1], x2: grad[2], y2: grad[3] },\n\t\t\t\t\tstops: \n\t\t\t\t\t[\n\t\t\t\t\t\t[0, from],\n\t\t\t\t\t\t[1, to]\n\t\t\t\t\t]\n\t\t\t\t};\n\n\t\t\t\t// Add a mock object to the legend items.\n\t\t\t\tlegendItems = [{\n\t\t\t\t\tchart: series.chart,\n\t\t\t\t\toptions: {},\n\t\t\t\t\tfromLabel: fromLabel,\n\t\t\t\t\ttoLabel: toLabel,\n\t\t\t\t\tcolor: gradientColor,\n\t\t\t\t\tdrawLegendSymbol: this.drawLegendSymbolGradient,\n\t\t\t\t\tvisible: true,\n\t\t\t\t\tsetState: function () {},\n\t\t\t\t\tsetVisible: function () {}\n\t\t\t\t}];\n\n\t\t\t\tseries.legendItems = legendItems;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * If neither valueRanges nor colorRanges are defined, use basic area symbol.\n\t\t */\n\t\tdrawLegendSymbol: seriesTypes.area.prototype.drawLegendSymbol,\n\n\t\t/**\n\t\t * Gets the series' symbol in the legend and extended legend with more information.\n\t\t * \n\t\t * @param {Object} legend The legend object\n\t\t * @param {Object} item The series (this) or point\n\t\t */\n\t\tdrawLegendSymbolGradient: function (legend, item) {\n\t\t\tvar spacing = legend.options.symbolPadding,\n\t\t\t\tpadding = pick(legend.options.padding, 8),\n\t\t\t\tpositionY,\n\t\t\t\tpositionX,\n\t\t\t\tgradientSize = this.chart.renderer.fontMetrics(legend.options.itemStyle.fontSize).h,\n\t\t\t\thorizontal = legend.options.layout === 'horizontal',\n\t\t\t\tbox1,\n\t\t\t\tbox2,\n\t\t\t\tbox3,\n\t\t\t\trectangleLength = pick(legend.options.rectangleLength, 200);\n\n\t\t\t// Set local variables based on option.\n\t\t\tif (horizontal) {\n\t\t\t\tpositionY = -(spacing / 2);\n\t\t\t\tpositionX = 0;\n\t\t\t} else {\n\t\t\t\tpositionY = -rectangleLength + legend.baseline - (spacing / 2);\n\t\t\t\tpositionX = padding + gradientSize;\n\t\t\t}\n\n\t\t\t// Creates the from text.\n\t\t\titem.fromText = this.chart.renderer.text(\n\t\t\t\t\titem.fromLabel,\t// Text.\n\t\t\t\t\tpositionX,\t\t// Lower left x.\n\t\t\t\t\tpositionY\t\t// Lower left y.\n\t\t\t\t).attr({\n\t\t\t\t\tzIndex: 2\n\t\t\t\t}).add(item.legendGroup);\n\t\t\tbox1 = item.fromText.getBBox();\n\n\t\t\t// Creates legend symbol.\n\t\t\t// Ternary changes variables based on option.\n\t\t\titem.legendSymbol = this.chart.renderer.rect(\n\t\t\t\thorizontal ? box1.x + box1.width + spacing : box1.x - gradientSize - spacing,\t\t// Upper left x.\n\t\t\t\tbox1.y,\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Upper left y.\n\t\t\t\thorizontal ? rectangleLength : gradientSize,\t\t\t\t\t\t\t\t\t\t\t// Width.\n\t\t\t\thorizontal ? gradientSize : rectangleLength,\t\t\t\t\t\t\t\t\t\t// Height.\n\t\t\t\t2\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Corner radius.\n\t\t\t).attr({\n\t\t\t\tzIndex: 1\n\t\t\t}).add(item.legendGroup);\n\t\t\tbox2 = item.legendSymbol.getBBox();\n\n\t\t\t// Creates the to text.\n\t\t\t// Vertical coordinate changed based on option.\n\t\t\titem.toText = this.chart.renderer.text(\n\t\t\t\t\titem.toLabel,\n\t\t\t\t\tbox2.x + box2.width + spacing,\n\t\t\t\t\thorizontal ? positionY : box2.y + box2.height - spacing\n\t\t\t\t).attr({\n\t\t\t\t\tzIndex: 2\n\t\t\t\t}).add(item.legendGroup);\n\t\t\tbox3 = item.toText.getBBox();\n\n\t\t\t// Changes legend box settings based on option.\n\t\t\tif (horizontal) {\n\t\t\t\tlegend.offsetWidth = box1.width + box2.width + box3.width + (spacing * 2) + padding;\n\t\t\t\tlegend.itemY = gradientSize + padding;\n\t\t\t} else {\n\t\t\t\tlegend.offsetWidth = Math.max(box1.width, box3.width) + (spacing) + box2.width + padding;\n\t\t\t\tlegend.itemY = box2.height + padding;\n\t\t\t\tlegend.itemX = spacing;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get the bounding box of all paths in the map combined.\n\t\t */\n\t\tgetBox: function (paths) {\n\t\t\tvar maxX = Number.MIN_VALUE, \n\t\t\t\tminX =  Number.MAX_VALUE, \n\t\t\t\tmaxY = Number.MIN_VALUE, \n\t\t\t\tminY =  Number.MAX_VALUE;\n\t\t\t\n\t\t\t\n\t\t\t// Find the bounding box\n\t\t\teach(paths || this.options.data, function (point) {\n\t\t\t\tvar path = point.path,\n\t\t\t\t\ti = path.length,\n\t\t\t\t\teven = false, // while loop reads from the end\n\t\t\t\t\tpointMaxX = Number.MIN_VALUE, \n\t\t\t\t\tpointMinX =  Number.MAX_VALUE, \n\t\t\t\t\tpointMaxY = Number.MIN_VALUE, \n\t\t\t\t\tpointMinY =  Number.MAX_VALUE;\n\t\t\t\t\t\n\t\t\t\twhile (i--) {\n\t\t\t\t\tif (typeof path[i] === 'number' && !isNaN(path[i])) {\n\t\t\t\t\t\tif (even) { // even = x\n\t\t\t\t\t\t\tpointMaxX = Math.max(pointMaxX, path[i]);\n\t\t\t\t\t\t\tpointMinX = Math.min(pointMinX, path[i]);\n\t\t\t\t\t\t} else { // odd = Y\n\t\t\t\t\t\t\tpointMaxY = Math.max(pointMaxY, path[i]);\n\t\t\t\t\t\t\tpointMinY = Math.min(pointMinY, path[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\teven = !even;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Cache point bounding box for use to position data labels\n\t\t\t\tpoint._maxX = pointMaxX;\n\t\t\t\tpoint._minX = pointMinX;\n\t\t\t\tpoint._maxY = pointMaxY;\n\t\t\t\tpoint._minY = pointMinY;\n\n\t\t\t\tmaxX = Math.max(maxX, pointMaxX);\n\t\t\t\tminX = Math.min(minX, pointMinX);\n\t\t\t\tmaxY = Math.max(maxY, pointMaxY);\n\t\t\t\tminY = Math.min(minY, pointMinY);\n\t\t\t});\n\t\t\tthis.minY = minY;\n\t\t\tthis.maxY = maxY;\n\t\t\tthis.minX = minX;\n\t\t\tthis.maxX = maxX;\n\t\t\t\n\t\t},\n\t\t\n\t\t\n\t\t\n\t\t/**\n\t\t * Translate the path so that it automatically fits into the plot area box\n\t\t * @param {Object} path\n\t\t */\n\t\ttranslatePath: function (path) {\n\t\t\t\n\t\t\tvar series = this,\n\t\t\t\teven = false, // while loop reads from the end\n\t\t\t\txAxis = series.xAxis,\n\t\t\t\tyAxis = series.yAxis,\n\t\t\t\ti;\n\t\t\t\t\n\t\t\t// Preserve the original\n\t\t\tpath = [].concat(path);\n\t\t\t\t\n\t\t\t// Do the translation\n\t\t\ti = path.length;\n\t\t\twhile (i--) {\n\t\t\t\tif (typeof path[i] === 'number') {\n\t\t\t\t\tif (even) { // even = x\n\t\t\t\t\t\tpath[i] = Math.round(xAxis.translate(path[i]));\n\t\t\t\t\t} else { // odd = Y\n\t\t\t\t\t\tpath[i] = Math.round(yAxis.len - yAxis.translate(path[i]));\n\t\t\t\t\t}\n\t\t\t\t\teven = !even;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn path;\n\t\t},\n\t\t\n\t\tsetData: function () {\n\t\t\tHighcharts.Series.prototype.setData.apply(this, arguments);\n\t\t\tthis.getBox();\n\t\t},\n\t\t\n\t\t/**\n\t\t * Add the path option for data points. Find the max value for color calculation.\n\t\t */\n\t\ttranslate: function () {\n\t\t\tvar series = this,\n\t\t\t\tdataMin = Number.MAX_VALUE,\n\t\t\t\tdataMax = Number.MIN_VALUE;\n\t\n\t\t\tseries.generatePoints();\n\t\n\t\t\teach(series.data, function (point) {\n\t\t\t\t\n\t\t\t\tpoint.shapeType = 'path';\n\t\t\t\tpoint.shapeArgs = {\n\t\t\t\t\td: series.translatePath(point.path)\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// TODO: do point colors in drawPoints instead of point.init\n\t\t\t\tif (typeof point.y === 'number') {\n\t\t\t\t\tif (point.y > dataMax) {\n\t\t\t\t\t\tdataMax = point.y;\n\t\t\t\t\t} else if (point.y < dataMin) {\n\t\t\t\t\t\tdataMin = point.y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tseries.translateColors(dataMin, dataMax);\n\t\t},\n\t\t\n\t\t/**\n\t\t * In choropleth maps, the color is a result of the value, so this needs translation too\n\t\t */\n\t\ttranslateColors: function (dataMin, dataMax) {\n\t\t\t\n\t\t\tvar seriesOptions = this.options,\n\t\t\t\tvalueRanges = seriesOptions.valueRanges,\n\t\t\t\tcolorRange = seriesOptions.colorRange,\n\t\t\t\tcolorKey = this.colorKey,\n\t\t\t\tfrom,\n\t\t\t\tto;\n\n\t\t\tif (colorRange) {\n\t\t\t\tfrom = Color(colorRange.from);\n\t\t\t\tto = Color(colorRange.to);\n\t\t\t}\n\t\t\t\n\t\t\teach(this.data, function (point) {\n\t\t\t\tvar value = point[colorKey],\n\t\t\t\t\trange,\n\t\t\t\t\tcolor,\n\t\t\t\t\ti,\n\t\t\t\t\tpos;\n\n\t\t\t\tif (valueRanges) {\n\t\t\t\t\ti = valueRanges.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\trange = valueRanges[i];\n\t\t\t\t\t\tfrom = range.from;\n\t\t\t\t\t\tto = range.to;\n\t\t\t\t\t\tif ((from === UNDEFINED || value >= from) && (to === UNDEFINED || value <= to)) {\n\t\t\t\t\t\t\tcolor = range.color;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t} else if (colorRange && value !== undefined) {\n\n\t\t\t\t\tpos = 1 - ((dataMax - value) / (dataMax - dataMin));\n\t\t\t\t\tcolor = value === null ? seriesOptions.nullColor : tweenColors(from, to, pos);\n\t\t\t\t}\n\n\t\t\t\tif (color) {\n\t\t\t\t\tpoint.color = null; // reset from previous drilldowns, use of the same data options\n\t\t\t\t\tpoint.options.color = color;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t\n\t\tdrawGraph: noop,\n\t\t\n\t\t/**\n\t\t * We need the points' bounding boxes in order to draw the data labels, so \n\t\t * we skip it now and call if from drawPoints instead.\n\t\t */\n\t\tdrawDataLabels: noop,\n\t\t\n\t\t/** \n\t\t * Use the drawPoints method of column, that is able to handle simple shapeArgs.\n\t\t * Extend it by assigning the tooltip position.\n\t\t */\n\t\tdrawPoints: function () {\n\t\t\tvar series = this,\n\t\t\t\txAxis = series.xAxis,\n\t\t\t\tyAxis = series.yAxis,\n\t\t\t\tcolorKey = series.colorKey;\n\t\t\t\n\t\t\t// Make points pass test in drawing\n\t\t\teach(series.data, function (point) {\n\t\t\t\tpoint.plotY = 1; // pass null test in column.drawPoints\n\t\t\t\tif (point[colorKey] === null) {\n\t\t\t\t\tpoint[colorKey] = 0;\n\t\t\t\t\tpoint.isNull = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t// Draw them\n\t\t\tseriesTypes.column.prototype.drawPoints.apply(series);\n\t\t\t\n\t\t\teach(series.data, function (point) {\n\n\t\t\t\tvar dataLabels = point.dataLabels,\n\t\t\t\t\tminX = xAxis.toPixels(point._minX, true),\n\t\t\t\t\tmaxX = xAxis.toPixels(point._maxX, true),\n\t\t\t\t\tminY = yAxis.toPixels(point._minY, true),\n\t\t\t\t\tmaxY = yAxis.toPixels(point._maxY, true);\n\n\t\t\t\tpoint.plotX = Math.round(minX + (maxX - minX) * pick(dataLabels && dataLabels.anchorX, 0.5));\n\t\t\t\tpoint.plotY = Math.round(minY + (maxY - minY) * pick(dataLabels && dataLabels.anchorY, 0.5)); \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// Reset escaped null points\n\t\t\t\tif (point.isNull) {\n\t\t\t\t\tpoint[colorKey] = null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Now draw the data labels\n\t\t\tHighcharts.Series.prototype.drawDataLabels.call(series);\n\t\t\t\n\t\t},\n\n\t\t/**\n\t\t * Animate in the new series from the clicked point in the old series.\n\t\t * Depends on the drilldown.js module\n\t\t */\n\t\tanimateDrilldown: function (init) {\n\t\t\tvar toBox = this.chart.plotBox,\n\t\t\t\tlevel = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1],\n\t\t\t\tfromBox = level.bBox,\n\t\t\t\tanimationOptions = this.chart.options.drilldown.animation,\n\t\t\t\tscale;\n\t\t\t\t\n\t\t\tif (!init) {\n\n\t\t\t\tscale = Math.min(fromBox.width / toBox.width, fromBox.height / toBox.height);\n\t\t\t\tlevel.shapeArgs = {\n\t\t\t\t\tscaleX: scale,\n\t\t\t\t\tscaleY: scale,\n\t\t\t\t\ttranslateX: fromBox.x,\n\t\t\t\t\ttranslateY: fromBox.y\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// TODO: Animate this.group instead\n\t\t\t\teach(this.points, function (point) {\n\n\t\t\t\t\tpoint.graphic\n\t\t\t\t\t\t.attr(level.shapeArgs)\n\t\t\t\t\t\t.animate({\n\t\t\t\t\t\t\tscaleX: 1,\n\t\t\t\t\t\t\tscaleY: 1,\n\t\t\t\t\t\t\ttranslateX: 0,\n\t\t\t\t\t\t\ttranslateY: 0\n\t\t\t\t\t\t}, animationOptions);\n\n\t\t\t\t});\n\n\t\t\t\tdelete this.animate;\n\t\t\t}\n\t\t\t\n\t\t},\n\n\t\t/**\n\t\t * When drilling up, pull out the individual point graphics from the lower series\n\t\t * and animate them into the origin point in the upper series.\n\t\t */\n\t\tanimateDrillupFrom: function (level) {\n\t\t\tseriesTypes.column.prototype.animateDrillupFrom.call(this, level);\n\t\t},\n\n\n\t\t/**\n\t\t * When drilling up, keep the upper series invisible until the lower series has\n\t\t * moved into place\n\t\t */\n\t\tanimateDrillupTo: function (init) {\n\t\t\tseriesTypes.column.prototype.animateDrillupTo.call(this, init);\n\t\t}\n\t});\n\n\n\t// The mapline series type\n\tplotOptions.mapline = merge(plotOptions.map, {\n\t\tlineWidth: 1,\n\t\tbackgroundColor: 'none'\n\t});\n\tseriesTypes.mapline = Highcharts.extendClass(seriesTypes.map, {\n\t\ttype: 'mapline',\n\t\tpointAttrToOptions: { // mapping between SVG attributes and the corresponding options\n\t\t\tstroke: 'color',\n\t\t\t'stroke-width': 'lineWidth',\n\t\t\tfill: 'backgroundColor'\n\t\t},\n\t\tdrawLegendSymbol: seriesTypes.line.prototype.drawLegendSymbol\n\t});\n\n\t// The mappoint series type\n\tplotOptions.mappoint = merge(plotOptions.scatter, {\n\t\tdataLabels: {\n\t\t\tenabled: true,\n\t\t\tformat: '{point.name}',\n\t\t\tcolor: 'black',\n\t\t\tstyle: {\n\t\t\t\ttextShadow: '0 0 5px white'\n\t\t\t}\n\t\t}\n\t});\n\tseriesTypes.mappoint = Highcharts.extendClass(seriesTypes.scatter, {\n\t\ttype: 'mappoint'\n\t});\n\t\n\n\t\n\t/**\n\t * A wrapper for Chart with all the default values for a Map\n\t */\n\tHighcharts.Map = function (options, callback) {\n\t\t\n\t\tvar hiddenAxis = {\n\t\t\t\tendOnTick: false,\n\t\t\t\tgridLineWidth: 0,\n\t\t\t\tlabels: {\n\t\t\t\t\tenabled: false\n\t\t\t\t},\n\t\t\t\tlineWidth: 0,\n\t\t\t\tminPadding: 0,\n\t\t\t\tmaxPadding: 0,\n\t\t\t\tstartOnTick: false,\n\t\t\t\ttickWidth: 0,\n\t\t\t\ttitle: null\n\t\t\t},\n\t\t\tseriesOptions;\n\t\t\n\t\t// Don't merge the data\n\t\tseriesOptions = options.series;\n\t\toptions.series = null;\n\t\t\n\t\toptions = merge({\n\t\t\tchart: {\n\t\t\t\ttype: 'map',\n\t\t\t\tpanning: 'xy'\n\t\t\t},\n\t\t\txAxis: hiddenAxis,\n\t\t\tyAxis: merge(hiddenAxis, { reversed: true })\t\n\t\t},\n\t\toptions, // user's options\n\t\n\t\t{ // forced options\n\t\t\tchart: {\n\t\t\t\tinverted: false\n\t\t\t}\n\t\t});\n\t\n\t\toptions.series = seriesOptions;\n\t\n\t\n\t\treturn new Highcharts.Chart(options, callback);\n\t};\n}(Highcharts));\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/no-data-to-display.js",
    "content": "/*\n Highcharts JS v3.0.6 (2013-10-04)\n Plugin for displaying a message when there is no data visible in chart.\n\n (c) 2010-2013 Highsoft AS\n Author: Øystein Moseng\n\n License: www.highcharts.com/license\n*/\n(function(c){function f(){return!!this.points.length}function g(){this.hasData()?this.hideNoData():this.showNoData()}var d=c.seriesTypes,e=c.Chart.prototype,h=c.getOptions(),i=c.extend;i(h.lang,{noData:\"No data to display\"});h.noData={position:{x:0,y:0,align:\"center\",verticalAlign:\"middle\"},attr:{},style:{fontWeight:\"bold\",fontSize:\"12px\",color:\"#60606a\"}};d.pie.prototype.hasData=f;if(d.gauge)d.gauge.prototype.hasData=f;if(d.waterfall)d.waterfall.prototype.hasData=f;c.Series.prototype.hasData=function(){return this.dataMax!==\nvoid 0&&this.dataMin!==void 0};e.showNoData=function(a){var b=this.options,a=a||b.lang.noData,b=b.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(a,0,0,null,null,null,null,null,\"no-data\").attr(b.attr).css(b.style).add(),this.noDataLabel.align(i(this.noDataLabel.getBBox(),b.position),!1,\"plotBox\")};e.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};e.hasData=function(){for(var a=this.series,b=a.length;b--;)if(a[b].hasData()&&!a[b].options.isInternal)return!0;\nreturn!1};e.callbacks.push(function(a){c.addEvent(a,\"load\",g);c.addEvent(a,\"redraw\",g)})})(Highcharts);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/modules/no-data-to-display.src.js",
    "content": "/**\n * @license Highcharts JS v3.0.6 (2013-10-04)\n * Plugin for displaying a message when there is no data visible in chart.\n *\n * (c) 2010-2013 Highsoft AS\n * Author: Øystein Moseng\n *\n * License: www.highcharts.com/license\n */\n\n(function (H) { // docs\n\t\n\tvar seriesTypes = H.seriesTypes,\n\t\tchartPrototype = H.Chart.prototype,\n\t\tdefaultOptions = H.getOptions(),\n\t\textend = H.extend;\n\n\t// Add language option\n\textend(defaultOptions.lang, {\n\t\tnoData: 'No data to display'\n\t});\n\t\n\t// Add default display options for message\n\tdefaultOptions.noData = {\n\t\tposition: {\n\t\t\tx: 0,\n\t\t\ty: 0,\t\t\t\n\t\t\talign: 'center',\n\t\t\tverticalAlign: 'middle'\n\t\t},\n\t\tattr: {\t\t\t\t\t\t\n\t\t},\n\t\tstyle: {\t\n\t\t\tfontWeight: 'bold',\t\t\n\t\t\tfontSize: '12px',\n\t\t\tcolor: '#60606a'\t\t\n\t\t}\n\t};\n\n\t/**\n\t * Define hasData functions for series. These return true if there are data points on this series within the plot area\n\t */\t\n\tfunction hasDataPie() {\n\t\treturn !!this.points.length; /* != 0 */\n\t}\n\n\tseriesTypes.pie.prototype.hasData = hasDataPie;\n\n\tif (seriesTypes.gauge) {\n\t\tseriesTypes.gauge.prototype.hasData = hasDataPie;\n\t}\n\n\tif (seriesTypes.waterfall) {\n\t\tseriesTypes.waterfall.prototype.hasData = hasDataPie;\n\t}\n\n\tH.Series.prototype.hasData = function () {\n\t\treturn this.dataMax !== undefined && this.dataMin !== undefined;\n\t};\n\t\n\t/**\n\t * Display a no-data message.\n\t *\n\t * @param {String} str An optional message to show in place of the default one \n\t */\n\tchartPrototype.showNoData = function (str) {\n\t\tvar chart = this,\n\t\t\toptions = chart.options,\n\t\t\ttext = str || options.lang.noData,\n\t\t\tnoDataOptions = options.noData;\n\n\t\tif (!chart.noDataLabel) {\n\t\t\tchart.noDataLabel = chart.renderer.label(text, 0, 0, null, null, null, null, null, 'no-data')\n\t\t\t\t.attr(noDataOptions.attr)\n\t\t\t\t.css(noDataOptions.style)\n\t\t\t\t.add();\n\t\t\tchart.noDataLabel.align(extend(chart.noDataLabel.getBBox(), noDataOptions.position), false, 'plotBox');\n\t\t}\n\t};\n\n\t/**\n\t * Hide no-data message\t\n\t */\t\n\tchartPrototype.hideNoData = function () {\n\t\tvar chart = this;\n\t\tif (chart.noDataLabel) {\n\t\t\tchart.noDataLabel = chart.noDataLabel.destroy();\n\t\t}\n\t};\n\n\t/**\n\t * Returns true if there are data points within the plot area now\n\t */\t\n\tchartPrototype.hasData = function () {\n\t\tvar chart = this,\n\t\t\tseries = chart.series,\n\t\t\ti = series.length;\n\n\t\twhile (i--) {\n\t\t\tif (series[i].hasData() && !series[i].options.isInternal) { \n\t\t\t\treturn true;\n\t\t\t}\t\n\t\t}\n\n\t\treturn false;\n\t};\n\n\t/**\n\t * Show no-data message if there is no data in sight. Otherwise, hide it.\n\t */\n\tfunction handleNoData() {\n\t\tvar chart = this;\n\t\tif (chart.hasData()) {\n\t\t\tchart.hideNoData();\n\t\t} else {\n\t\t\tchart.showNoData();\n\t\t}\n\t}\n\n\t/**\n\t * Add event listener to handle automatic display of no-data message\n\t */\n\tchartPrototype.callbacks.push(function (chart) {\n\t\tH.addEvent(chart, 'load', handleNoData);\n\t\tH.addEvent(chart, 'redraw', handleNoData);\n\t});\n\n}(Highcharts));\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/themes/dark-blue.js",
    "content": "/**\n * Dark blue theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(48, 48, 96)'],\n\t\t\t\t[1, 'rgb(0, 0, 0)']\n\t\t\t]\n\t\t},\n\t\tborderColor: '#000000',\n\t\tborderWidth: 2,\n\t\tclassName: 'dark-container',\n\t\tplotBackgroundColor: 'rgba(255, 255, 255, .1)',\n\t\tplotBorderColor: '#CCCCCC',\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tfont: 'bold 16px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#666666',\n\t\t\tfont: 'bold 12px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineColor: '#333333',\n\t\tgridLineWidth: 1,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\ttickColor: '#A0A0A0',\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\tgridLineColor: '#333333',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\tminorTickInterval: null,\n\t\ttickColor: '#A0A0A0',\n\t\ttickWidth: 1,\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\ttooltip: {\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.75)',\n\t\tstyle: {\n\t\t\tcolor: '#F0F0F0'\n\t\t}\n\t},\n\ttoolbar: {\n\t\titemStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\tplotOptions: {\n\t\tline: {\n\t\t\tdataLabels: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t},\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tspline: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tscatter: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tcandlestick: {\n\t\t\tlineColor: 'white'\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: '#A0A0A0'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#FFF'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#444'\n\t\t}\n\t},\n\tcredits: {\n\t\tstyle: {\n\t\t\tcolor: '#666'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\tsymbolStroke: '#DDDDDD',\n\t\t\thoverSymbolStroke: '#FFFFFF',\n\t\t\ttheme: {\n\t\t\t\tfill: {\n\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\tstops: [\n\t\t\t\t\t\t[0.4, '#606060'],\n\t\t\t\t\t\t[0.6, '#333333']\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tstroke: '#000000'\n\t\t\t}\n\t\t}\n\t},\n\n\t// scroll charts\n\trangeSelector: {\n\t\tbuttonTheme: {\n\t\t\tfill: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\t\tstroke: '#000000',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t},\n\t\t\tstates: {\n\t\t\t\thover: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.4, '#BBB'],\n\t\t\t\t\t\t\t[0.6, '#888']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'white'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.1, '#000'],\n\t\t\t\t\t\t\t[0.3, '#333']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'yellow'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinputStyle: {\n\t\t\tbackgroundColor: '#333',\n\t\t\tcolor: 'silver'\n\t\t},\n\t\tlabelStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\n\tnavigator: {\n\t\thandles: {\n\t\t\tbackgroundColor: '#666',\n\t\t\tborderColor: '#AAA'\n\t\t},\n\t\toutlineColor: '#CCC',\n\t\tmaskFill: 'rgba(16, 16, 16, 0.5)',\n\t\tseries: {\n\t\t\tcolor: '#7798BF',\n\t\t\tlineColor: '#A6C7ED'\n\t\t}\n\t},\n\n\tscrollbar: {\n\t\tbarBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbarBorderColor: '#CCC',\n\t\tbuttonArrowColor: '#CCC',\n\t\tbuttonBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbuttonBorderColor: '#CCC',\n\t\trifleColor: '#FFF',\n\t\ttrackBackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#000'],\n\t\t\t\t[1, '#333']\n\t\t\t]\n\t\t},\n\t\ttrackBorderColor: '#666'\n\t},\n\n\t// special colors for some of the\n\tlegendBackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\tlegendBackgroundColorSolid: 'rgb(35, 35, 70)',\n\tdataLabelsColor: '#444',\n\ttextColor: '#C0C0C0',\n\tmaskColor: 'rgba(255,255,255,0.3)'\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/themes/dark-green.js",
    "content": "/**\n * Dark blue theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: [0, 0, 250, 500],\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(48, 96, 48)'],\n\t\t\t\t[1, 'rgb(0, 0, 0)']\n\t\t\t]\n\t\t},\n\t\tborderColor: '#000000',\n\t\tborderWidth: 2,\n\t\tclassName: 'dark-container',\n\t\tplotBackgroundColor: 'rgba(255, 255, 255, .1)',\n\t\tplotBorderColor: '#CCCCCC',\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#C0C0C0',\n\t\t\tfont: 'bold 16px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#666666',\n\t\t\tfont: 'bold 12px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineColor: '#333333',\n\t\tgridLineWidth: 1,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\ttickColor: '#A0A0A0',\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\tgridLineColor: '#333333',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#A0A0A0'\n\t\t\t}\n\t\t},\n\t\tlineColor: '#A0A0A0',\n\t\tminorTickInterval: null,\n\t\ttickColor: '#A0A0A0',\n\t\ttickWidth: 1,\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\ttooltip: {\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.75)',\n\t\tstyle: {\n\t\t\tcolor: '#F0F0F0'\n\t\t}\n\t},\n\ttoolbar: {\n\t\titemStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\tplotOptions: {\n\t\tline: {\n\t\t\tdataLabels: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t},\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tspline: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tscatter: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tcandlestick: {\n\t\t\tlineColor: 'white'\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: '#A0A0A0'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#FFF'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#444'\n\t\t}\n\t},\n\tcredits: {\n\t\tstyle: {\n\t\t\tcolor: '#666'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\tsymbolStroke: '#DDDDDD',\n\t\t\thoverSymbolStroke: '#FFFFFF',\n\t\t\ttheme: {\n\t\t\t\tfill: {\n\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\tstops: [\n\t\t\t\t\t\t[0.4, '#606060'],\n\t\t\t\t\t\t[0.6, '#333333']\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tstroke: '#000000'\n\t\t\t}\n\t\t}\n\t},\n\n\t// scroll charts\n\trangeSelector: {\n\t\tbuttonTheme: {\n\t\t\tfill: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\t\tstroke: '#000000',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t},\n\t\t\tstates: {\n\t\t\t\thover: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.4, '#BBB'],\n\t\t\t\t\t\t\t[0.6, '#888']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'white'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.1, '#000'],\n\t\t\t\t\t\t\t[0.3, '#333']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'yellow'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinputStyle: {\n\t\t\tbackgroundColor: '#333',\n\t\t\tcolor: 'silver'\n\t\t},\n\t\tlabelStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\n\tnavigator: {\n\t\thandles: {\n\t\t\tbackgroundColor: '#666',\n\t\t\tborderColor: '#AAA'\n\t\t},\n\t\toutlineColor: '#CCC',\n\t\tmaskFill: 'rgba(16, 16, 16, 0.5)',\n\t\tseries: {\n\t\t\tcolor: '#7798BF',\n\t\t\tlineColor: '#A6C7ED'\n\t\t}\n\t},\n\n\tscrollbar: {\n\t\tbarBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbarBorderColor: '#CCC',\n\t\tbuttonArrowColor: '#CCC',\n\t\tbuttonBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbuttonBorderColor: '#CCC',\n\t\trifleColor: '#FFF',\n\t\ttrackBackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#000'],\n\t\t\t\t[1, '#333']\n\t\t\t]\n\t\t},\n\t\ttrackBorderColor: '#666'\n\t},\n\n\t// special colors for some of the\n\tlegendBackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\tlegendBackgroundColorSolid: 'rgb(35, 35, 70)',\n\tdataLabelsColor: '#444',\n\ttextColor: '#C0C0C0',\n\tmaskColor: 'rgba(255,255,255,0.3)'\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/themes/gray.js",
    "content": "/**\n * Gray theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#DDDF0D\", \"#7798BF\", \"#55BF3B\", \"#DF5353\", \"#aaeeee\", \"#ff0066\", \"#eeaaee\",\n\t\t\"#55BF3B\", \"#DF5353\", \"#7798BF\", \"#aaeeee\"],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(96, 96, 96)'],\n\t\t\t\t[1, 'rgb(16, 16, 16)']\n\t\t\t]\n\t\t},\n\t\tborderWidth: 0,\n\t\tborderRadius: 15,\n\t\tplotBackgroundColor: null,\n\t\tplotShadow: false,\n\t\tplotBorderWidth: 0\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#FFF',\n\t\t\tfont: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#DDD',\n\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineWidth: 0,\n\t\tlineColor: '#999',\n\t\ttickColor: '#999',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#999',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#AAA',\n\t\t\t\tfont: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\talternateGridColor: null,\n\t\tminorTickInterval: null,\n\t\tgridLineColor: 'rgba(255, 255, 255, .1)',\n\t\tminorGridLineColor: 'rgba(255,255,255,0.07)',\n\t\tlineWidth: 0,\n\t\ttickWidth: 0,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#999',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#AAA',\n\t\t\t\tfont: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tcolor: '#CCC'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#FFF'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: '#333'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\ttooltip: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgba(96, 96, 96, .8)'],\n\t\t\t\t[1, 'rgba(16, 16, 16, .8)']\n\t\t\t]\n\t\t},\n\t\tborderWidth: 0,\n\t\tstyle: {\n\t\t\tcolor: '#FFF'\n\t\t}\n\t},\n\n\n\tplotOptions: {\n\t\tseries: {\n\t\t\tshadow: true\n\t\t},\n\t\tline: {\n\t\t\tdataLabels: {\n\t\t\t\tcolor: '#CCC'\n\t\t\t},\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tspline: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tscatter: {\n\t\t\tmarker: {\n\t\t\t\tlineColor: '#333'\n\t\t\t}\n\t\t},\n\t\tcandlestick: {\n\t\t\tlineColor: 'white'\n\t\t}\n\t},\n\n\ttoolbar: {\n\t\titemStyle: {\n\t\t\tcolor: '#CCC'\n\t\t}\n\t},\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\tsymbolStroke: '#DDDDDD',\n\t\t\thoverSymbolStroke: '#FFFFFF',\n\t\t\ttheme: {\n\t\t\t\tfill: {\n\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\tstops: [\n\t\t\t\t\t\t[0.4, '#606060'],\n\t\t\t\t\t\t[0.6, '#333333']\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tstroke: '#000000'\n\t\t\t}\n\t\t}\n\t},\n\n\t// scroll charts\n\trangeSelector: {\n\t\tbuttonTheme: {\n\t\t\tfill: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\t\tstroke: '#000000',\n\t\t\tstyle: {\n\t\t\t\tcolor: '#CCC',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t},\n\t\t\tstates: {\n\t\t\t\thover: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.4, '#BBB'],\n\t\t\t\t\t\t\t[0.6, '#888']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'white'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselect: {\n\t\t\t\t\tfill: {\n\t\t\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\t\t\tstops: [\n\t\t\t\t\t\t\t[0.1, '#000'],\n\t\t\t\t\t\t\t[0.3, '#333']\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tstroke: '#000000',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tcolor: 'yellow'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinputStyle: {\n\t\t\tbackgroundColor: '#333',\n\t\t\tcolor: 'silver'\n\t\t},\n\t\tlabelStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\n\tnavigator: {\n\t\thandles: {\n\t\t\tbackgroundColor: '#666',\n\t\t\tborderColor: '#AAA'\n\t\t},\n\t\toutlineColor: '#CCC',\n\t\tmaskFill: 'rgba(16, 16, 16, 0.5)',\n\t\tseries: {\n\t\t\tcolor: '#7798BF',\n\t\t\tlineColor: '#A6C7ED'\n\t\t}\n\t},\n\n\tscrollbar: {\n\t\tbarBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbarBorderColor: '#CCC',\n\t\tbuttonArrowColor: '#CCC',\n\t\tbuttonBackgroundColor: {\n\t\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\t\tstops: [\n\t\t\t\t\t[0.4, '#888'],\n\t\t\t\t\t[0.6, '#555']\n\t\t\t\t]\n\t\t\t},\n\t\tbuttonBorderColor: '#CCC',\n\t\trifleColor: '#FFF',\n\t\ttrackBackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, '#000'],\n\t\t\t\t[1, '#333']\n\t\t\t]\n\t\t},\n\t\ttrackBorderColor: '#666'\n\t},\n\n\t// special colors for some of the demo examples\n\tlegendBackgroundColor: 'rgba(48, 48, 48, 0.8)',\n\tlegendBackgroundColorSolid: 'rgb(70, 70, 70)',\n\tdataLabelsColor: '#444',\n\ttextColor: '#E0E0E0',\n\tmaskColor: 'rgba(255,255,255,0.3)'\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/themes/grid.js",
    "content": "/**\n * Grid theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'],\n\tchart: {\n\t\tbackgroundColor: {\n\t\t\tlinearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 },\n\t\t\tstops: [\n\t\t\t\t[0, 'rgb(255, 255, 255)'],\n\t\t\t\t[1, 'rgb(240, 240, 255)']\n\t\t\t]\n\t\t},\n\t\tborderWidth: 2,\n\t\tplotBackgroundColor: 'rgba(255, 255, 255, .9)',\n\t\tplotShadow: true,\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#000',\n\t\t\tfont: 'bold 16px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#666666',\n\t\t\tfont: 'bold 12px \"Trebuchet MS\", Verdana, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineWidth: 1,\n\t\tlineColor: '#000',\n\t\ttickColor: '#000',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#000',\n\t\t\t\tfont: '11px Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#333',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\tminorTickInterval: 'auto',\n\t\tlineColor: '#000',\n\t\tlineWidth: 1,\n\t\ttickWidth: 1,\n\t\ttickColor: '#000',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#000',\n\t\t\t\tfont: '11px Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#333',\n\t\t\t\tfontWeight: 'bold',\n\t\t\t\tfontSize: '12px',\n\t\t\t\tfontFamily: 'Trebuchet MS, Verdana, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: 'black'\n\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: '#039'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: 'gray'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#99b'\n\t\t}\n\t},\n\n\tnavigation: {\n\t\tbuttonOptions: {\n\t\t\ttheme: {\n\t\t\t\tstroke: '#CCCCCC'\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/highcharts/themes/skies.js",
    "content": "/**\n * Skies theme for Highcharts JS\n * @author Torstein Hønsi\n */\n\nHighcharts.theme = {\n\tcolors: [\"#514F78\", \"#42A07B\", \"#9B5E4A\", \"#72727F\", \"#1F949A\", \"#82914E\", \"#86777F\", \"#42A07B\"],\n\tchart: {\n\t\tclassName: 'skies',\n\t\tborderWidth: 0,\n\t\tplotShadow: true,\n\t\tplotBackgroundImage: 'http://www.highcharts.com/demo/gfx/skies.jpg',\n\t\tplotBackgroundColor: {\n\t\t\tlinearGradient: [0, 0, 250, 500],\n\t\t\tstops: [\n\t\t\t\t[0, 'rgba(255, 255, 255, 1)'],\n\t\t\t\t[1, 'rgba(255, 255, 255, 0)']\n\t\t\t]\n\t\t},\n\t\tplotBorderWidth: 1\n\t},\n\ttitle: {\n\t\tstyle: {\n\t\t\tcolor: '#3E576F',\n\t\t\tfont: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\tsubtitle: {\n\t\tstyle: {\n\t\t\tcolor: '#6D869F',\n\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t}\n\t},\n\txAxis: {\n\t\tgridLineWidth: 0,\n\t\tlineColor: '#C0D0E0',\n\t\ttickColor: '#C0D0E0',\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tyAxis: {\n\t\talternateGridColor: 'rgba(255, 255, 255, .5)',\n\t\tlineColor: '#C0D0E0',\n\t\ttickColor: '#C0D0E0',\n\t\ttickWidth: 1,\n\t\tlabels: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfontWeight: 'bold'\n\t\t\t}\n\t\t},\n\t\ttitle: {\n\t\t\tstyle: {\n\t\t\t\tcolor: '#666',\n\t\t\t\tfont: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'\n\t\t\t}\n\t\t}\n\t},\n\tlegend: {\n\t\titemStyle: {\n\t\t\tfont: '9pt Trebuchet MS, Verdana, sans-serif',\n\t\t\tcolor: '#3E576F'\n\t\t},\n\t\titemHoverStyle: {\n\t\t\tcolor: 'black'\n\t\t},\n\t\titemHiddenStyle: {\n\t\t\tcolor: 'silver'\n\t\t}\n\t},\n\tlabels: {\n\t\tstyle: {\n\t\t\tcolor: '#3E576F'\n\t\t}\n\t}\n};\n\n// Apply the theme\nvar highchartsOptions = Highcharts.setOptions(Highcharts.theme);\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/jquery-1.10.2.js",
    "content": "/*!\n * jQuery JavaScript Library v1.10.2\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03T13:48Z\n */\n(function( window, undefined ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\"use strict\";\nvar\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// Support: IE<10\n\t// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`\n\tcore_strundefined = typeof undefined,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tlocation = window.location,\n\tdocument = window.document,\n\tdocElem = document.documentElement,\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {},\n\n\t// List of deleted data cache ids, so we can reuse them\n\tcore_deletedIds = [],\n\n\tcore_version = \"1.10.2\",\n\n\t// Save a reference to some core methods\n\tcore_concat = core_deletedIds.concat,\n\tcore_push = core_deletedIds.push,\n\tcore_slice = core_deletedIds.slice,\n\tcore_indexOf = core_deletedIds.indexOf,\n\tcore_toString = class2type.toString,\n\tcore_hasOwn = class2type.hasOwnProperty,\n\tcore_trim = core_version.trim,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n\n\t// Used for splitting on whitespace\n\tcore_rnotwhite = /\\S+/g,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t},\n\n\t// The ready event handler\n\tcompleted = function( event ) {\n\n\t\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\n\t\t\tdetach();\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\t// Clean-up method for dom ready events\n\tdetach = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\t\t\twindow.removeEventListener( \"load\", completed, false );\n\n\t\t} else {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\t\twindow.detachEvent( \"onload\", completed );\n\t\t}\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: core_version,\n\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn core_slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( core_version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn String( obj );\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( jQuery.support.ownLast ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn core_hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, keepScripts ) {\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\t\tcontext = context || document;\n\n\t\tvar parsed = rsingleTag.exec( data ),\n\t\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif ( parsed ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\t\tif ( scripts ) {\n\t\t\tjQuery( scripts ).remove();\n\t\t}\n\t\treturn jQuery.merge( [], parsed.childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\tif ( data === null ) {\n\t\t\treturn data;\n\t\t}\n\n\t\tif ( typeof data === \"string\" ) {\n\n\t\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\t\tdata = jQuery.trim( data );\n\n\t\t\tif ( data ) {\n\t\t\t\t// Make sure the incoming data is actual JSON\n\t\t\t\t// Logic borrowed from http://json.org/json2.js\n\t\t\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\t\t\treturn ( new Function( \"return \" + data ) )();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcore_push.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn core_concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\t\tvar i = 0,\n\t\t\tlength = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif ( jQuery.type( key ) === \"object\" ) {\n\t\t\tchainable = true;\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t\t}\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\tchainable = true;\n\n\t\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif ( raw ) {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\n\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations.\n\t// Note: this method belongs to the css module but it's needed here for the support module.\n\t// If support gets modularized, this method should be moved back to the css module.\n\tswap: function( elem, options, callback, args ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.apply( elem, args || [] );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || type !== \"function\" &&\n\t\t( length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj );\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n/*!\n * Sizzle CSS Selector Engine v1.10.2\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03\n */\n(function( window, undefined ) {\n\nvar i,\n\tsupport,\n\tcachedruns,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcompile,\n\toutermostContext,\n\tsortInput,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\thasDuplicate = false,\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:([*^$|!~]?=)\" + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments quoted,\n\t//   then not containing pseudos/brackets,\n\t//   then attribute selectors/non-parenthetical expressions,\n\t//   then anything else\n\t// These preferences are here to reduce the number of selectors\n\t//   needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes.replace( 3, 8 ) + \")*)|.*)\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trsibling = new RegExp( whitespace + \"*[+~]\" ),\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\t// BMP codepoint\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && context.parentNode || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key += \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect xml\n * @param {Element|Object} elem An element or a document\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar doc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent.attachEvent && parent !== parent.top ) {\n\t\tparent.attachEvent( \"onbeforeunload\", function() {\n\t\t\tsetDocument();\n\t\t});\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = assert(function( div ) {\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Support: Opera 10-12/IE8\n\t\t\t// ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type attribute is restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"t\", \"\" );\n\n\t\t\tif ( div.querySelectorAll(\"[t^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );\n\n\t\tif ( compare ) {\n\t\t\t// Disconnected nodes\n\t\t\tif ( compare & 1 ||\n\t\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\tif ( a === doc || contains(preferredDoc, a) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === doc || contains(preferredDoc, b) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\t// Maintain original order\n\t\t\t\treturn sortInput ?\n\t\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t\t0;\n\t\t\t}\n\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t}\n\n\t\t// Not directly comparable, sort on existence of method\n\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\t} else if ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [elem] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val === undefined ?\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull :\n\t\tval;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( ; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (see #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[5] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] && match[4] !== undefined ) {\n\t\t\t\tmatch[2] = match[4];\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t//   not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t//   Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || elem.nodeType === 3 || elem.nodeType === 4 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === elem.type );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( tokens = [] );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar data, cache, outerCache,\n\t\t\t\tdirkey = dirruns + \" \" + doneName;\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {\n\t\t\t\t\t\t\tif ( (data = cache[1]) === true || data === cachedruns ) {\n\t\t\t\t\t\t\t\treturn data === true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcache = outerCache[ dir ] = [ dirkey ];\n\t\t\t\t\t\t\tcache[1] = matcher( elem, context, xml ) || cachedruns;\n\t\t\t\t\t\t\tif ( cache[1] === true ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\t// A counter to specify which element is currently being matched\n\tvar matcherCachedRuns = 0,\n\t\tbySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = matcherCachedRuns;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\tcachedruns = ++matcherCachedRuns;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\t}\n\treturn cached;\n};\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector );\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn (val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\telem[ name ] === true ? name.toLowerCase() : null;\n\t\t}\n\t});\n}\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = core_slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n\t\t\t\t\tif( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\njQuery.support = (function( support ) {\n\n\tvar all, a, input, select, fragment, opt, eventName, isSupported, i,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Setup\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// Finish early in limited (non-browser) environments\n\tall = div.getElementsByTagName(\"*\") || [];\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\tif ( !a || !a.style || !all.length ) {\n\t\treturn support;\n\t}\n\n\t// First batch of tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\n\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName(\"tbody\").length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName(\"link\").length;\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute(\"style\") );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute(\"href\") === \"/a\";\n\n\t// Make sure that element opacity exists\n\t// (IE uses filter instead)\n\t// Use a regex to work around a WebKit issue. See #5145\n\tsupport.opacity = /^0.5/.test( a.style.opacity );\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!a.style.cssFloat;\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement(\"form\").enctype;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone = document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Will be defined later\n\tsupport.inlineBlockNeedsLayout = false;\n\tsupport.shrinkWrapBlocks = false;\n\tsupport.pixelPosition = false;\n\tsupport.deleteExpando = true;\n\tsupport.noCloneEvent = true;\n\tsupport.reliableMarginRight = true;\n\tsupport.boxSizingReliable = true;\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<9\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement(\"input\");\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"checked\", \"t\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( input );\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\n\tif ( div.attachEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\n\t\tdiv.cloneNode( true ).click();\n\t}\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)\n\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\tfor ( i in { submit: true, change: true, focusin: true }) {\n\t\tdiv.setAttribute( eventName = \"on\" + i, \"t\" );\n\n\t\tsupport[ i + \"Bubbles\" ] = eventName in window || div.attributes[ eventName ].expando === false;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t// Support: IE<9\n\t// Iteration over object's inherited properties before its own.\n\tfor ( i in jQuery( support ) ) {\n\t\tbreak;\n\t}\n\tsupport.ownLast = i !== \"0\";\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, marginDiv, tds,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\";\n\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE8\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Support: IE8\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior.\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\n\t\t// Workaround failing boxSizing test due to offsetWidth returning wrong value\n\t\t// with some non-1 values of body zoom, ticket #13543\n\t\tjQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {\n\t\t\tsupport.boxSizing = div.offsetWidth === 4;\n\t\t});\n\n\t\t// Use window.getComputedStyle because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = div.appendChild( document.createElement(\"div\") );\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== core_strundefined ) {\n\t\t\t// Support: IE<8\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Support: IE6\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.innerHTML = \"<div></div>\";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tif ( support.inlineBlockNeedsLayout ) {\n\t\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t\t// Support: IE<8\n\t\t\t\tbody.style.zoom = 1;\n\t\t\t}\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\t// Null elements to avoid leaks in IE\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tall = select = fragment = opt = a = input = null;\n\n\treturn support;\n})({});\n\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ){\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, null\n\t} else {\n\t\tcache[ id ] = null;\n\t}\n}\n\njQuery.extend({\n\tcache: {},\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"applet\": true,\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\t// Do not set data on non-element because it will not be cleared (#8335).\n\t\tif ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar attrs, name,\n\t\t\tdata = null,\n\t\t\ti = 0,\n\t\t\telem = this[0];\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattrs = elem.attributes;\n\t\t\t\t\tfor ( ; i < attrs.length; i++ ) {\n\t\t\t\t\t\tname = attrs[i].name;\n\n\t\t\t\t\t\tif ( name.indexOf(\"data-\") === 0 ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each(function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t}) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar nodeHook, boolHook,\n\trclass = /[\\t\\r\\n\\f]/g,\n\trreturn = /\\r/g,\n\trfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tgetSetInput = jQuery.support.input;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = jQuery.trim( cur );\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( core_rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === core_strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar ret, hooks, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Use proper attribute retrieval(#6932, #12072)\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\telem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === core_strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( core_rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t} else {\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;\n\n\tjQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar fn = jQuery.expr.attrHandle[ name ],\n\t\t\t\tret = isXML ?\n\t\t\t\t\tundefined :\n\t\t\t\t\t/* jshint eqeqeq: false */\n\t\t\t\t\t(jQuery.expr.attrHandle[ name ] = undefined) !=\n\t\t\t\t\t\tgetter( elem, name, isXML ) ?\n\n\t\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\t\tnull;\n\t\t\tjQuery.expr.attrHandle[ name ] = fn;\n\t\t\treturn ret;\n\t\t} :\n\t\tfunction( elem, name, isXML ) {\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t};\n});\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\treturn name === \"value\" || value === elem.getAttribute( name ) ?\n\t\t\t\tvalue :\n\t\t\t\tundefined;\n\t\t}\n\t};\n\tjQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =\n\t\t// Some attributes are constructed with empty-string values when not defined\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\t(ret = elem.getAttributeNode( name )) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t};\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn ret && ret.specified ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !jQuery.support.hrefNormalized ) {\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !jQuery.support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = core_hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = core_hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, ret, handleObj, matched, j,\n\t\t\thandlerQueue = [],\n\t\t\targs = core_slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar sel, handleObj, matches, i,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Chrome 23+, Safari?\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Even when returnValue equals to undefined Firefox will still show alert\n\t\t\t\tif ( event.result !== undefined ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === core_strundefined ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar type, origFn;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\nvar isSimple = /^.[^:#\\[\\.,]*$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\trneedsContext = jQuery.expr.match.needsContext,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tret = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tcur = ret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( jQuery.unique(all) );\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.unique( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tvar elem = elems[ 0 ];\n\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\t\treturn elem.nodeType === 1;\n\t\t\t}));\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\tmanipulation_rcheckableType = /^(?:checkbox|radio)$/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\tparam: [ 1, \"<object>\", \"</object>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\n\t\t_default: jQuery.support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\"  ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar\n\t\t\t// Snapshot the DOM in case .domManip sweeps something relevant into its fragment\n\t\t\targs = jQuery.map( this, function( elem ) {\n\t\t\t\treturn [ elem.nextSibling, elem.parentNode ];\n\t\t\t}),\n\t\t\ti = 0;\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\tvar next = args[ i++ ],\n\t\t\t\tparent = args[ i++ ];\n\n\t\t\tif ( parent ) {\n\t\t\t\t// Don't use the snapshot next if it has moved (#13810)\n\t\t\t\tif ( next && next.parentNode !== parent ) {\n\t\t\t\t\tnext = this.nextSibling;\n\t\t\t\t}\n\t\t\t\tjQuery( this ).remove();\n\t\t\t\tparent.insertBefore( elem, next );\n\t\t\t}\n\t\t// Allow new content to include elements from the context set\n\t\t}, true );\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn i ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback, allowIntersection ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = core_concat.apply( [], args );\n\n\t\tvar first, node, hasScripts,\n\t\t\tscripts, doc, fragment,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction || !( l <= 1 || typeof value !== \"string\" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[0] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback, allowIntersection );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[i], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Hope ajax is available...\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\t\tfragment = first = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (jQuery.find.attr( elem, \"type\" ) !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[1];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && manipulation_rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone(true);\n\t\t\tjQuery( insert[i] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tcore_push.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n// Used in buildFragment, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( manipulation_rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar j, elem, contains,\n\t\t\ttmp, tag, tbody, wrap,\n\t\t\tl = elems.length,\n\n\t\t\t// Ensure a safe fragment\n\t\t\tsafe = createSafeFragment( context ),\n\n\t\t\tnodes = [],\n\t\t\ti = 0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\twrap[1] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t\t0;\n\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\t\ttmp = safe.lastChild;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from fragment\n\t\tif ( tmp ) {\n\t\t\tsafe.removeChild( tmp );\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t\t}\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttmp = null;\n\n\t\treturn safe;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== core_strundefined ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcore_deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_evalUrl: function( url ) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\t\t\t\"throws\": true\n\t\t});\n\t}\n});\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\nvar iframe, getStyles, curCSS,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = { BODY: \"block\" },\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction isHidden( elem, el ) {\n\t// isHidden might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\n\t\t\tif ( !values[ index ] ) {\n\t\t\t\thidden = isHidden( elem );\n\n\t\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\tvar len, styles,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !jQuery.support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\n// NOTE: we've included the \"window\" in window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar width, minWidth, maxWidth,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\n\t\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar left, rs, rsLeft,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\t\t\tret = computed ? computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe ||\n\t\t\t\tjQuery(\"<iframe frameborder='0' width='0' height='0'/>\")\n\t\t\t\t.css( \"cssText\", \"display:block !important\" )\n\t\t\t).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;\n\t\t\tdoc.write(\"<!doctype html><html><body>\");\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\n\n// Called ONLY from within css_defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\t\tdisplay = jQuery.css( elem[0], \"display\" );\n\telem.remove();\n\treturn display;\n}\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, \"display\" ) ) ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\n// These hooks cannot be added until DOM ready because the support test\n// for it is not run until after DOM ready\njQuery(function() {\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// getComputedStyle returns percent when specified for top/left/bottom/right\n\t// rather than make the css module depend on the offset module, we just check for it here\n\tif ( !jQuery.support.pixelPosition && jQuery.fn.position ) {\n\t\tjQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\t\t\tjQuery.cssHooks[ prop ] = {\n\t\t\t\tget: function( elem, computed ) {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\t\t\tcomputed;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\t// Support: Opera <= 12.12\n\t\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||\n\t\t\t(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\tvar type = this.type;\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !manipulation_rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n//Serialize an array of form elements or a set of\n//key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\tajax_nonce = jQuery.now(),\n\n\tajax_rquery = /\\?/,\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat(\"*\");\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, response, type,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = url.slice( off, url.length );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ){\n\tjQuery.fn[ type ] = function( fn ){\n\t\treturn this.on( type, fn );\n\t};\n});\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( core_rnotwhite ) || [\"\"];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + ajax_nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ajax_nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery(\"head\")[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement(\"script\");\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( ajax_nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( ajax_rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\nvar xhrCallbacks, xhrSupported,\n\txhrId = 0,\n\t// #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject && function() {\n\t\t// Abort all pending requests\n\t\tvar key;\n\t\tfor ( key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t};\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\nxhrSupported = jQuery.ajaxSettings.xhr();\njQuery.support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = jQuery.support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar handle, i,\n\t\t\t\t\t\txhr = s.xhr();\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( err ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, responseHeaders, statusText, responses;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occurred\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\n\t\t\t\t\t\t\t\t\t// When requesting binary data, IE6-9 will throw an exception\n\t\t\t\t\t\t\t\t\t// on any attempt to access responseText (#11426)\n\t\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( !s.async ) {\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\tsetTimeout( callback );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\nvar fxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + core_pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t}]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tif ( jQuery.css( elem, \"display\" ) === \"inline\" &&\n\t\t\t\tjQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !jQuery.support.shrinkWrapBlocks ) {\n\t\t\tanim.always(function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth? 1 : 0;\n\tfor( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p*Math.PI ) / 2;\n\t}\n};\n\njQuery.timers = [];\njQuery.fx = Tween.prototype.init;\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tif ( timer() && jQuery.timers.push( timer ) ) {\n\t\tjQuery.fx.start();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\njQuery.fn.offset = function( options ) {\n\tif ( arguments.length ) {\n\t\treturn options === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t}\n\n\tvar docElem, win,\n\t\tbox = { top: 0, left: 0 },\n\t\telem = this[ 0 ],\n\t\tdoc = elem && elem.ownerDocument;\n\n\tif ( !doc ) {\n\t\treturn;\n\t}\n\n\tdocElem = doc.documentElement;\n\n\t// Make sure it's not a disconnected DOM node\n\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\treturn box;\n\t}\n\n\t// If we don't have gBCR, just use 0,0 rather than error\n\t// BlackBerry 5, iOS 3 (original iPhone)\n\tif ( typeof elem.getBoundingClientRect !== core_strundefined ) {\n\t\tbox = elem.getBoundingClientRect();\n\t}\n\twin = getWindow( doc );\n\treturn {\n\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\n\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t};\n};\n\njQuery.offset = {\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top  += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true)\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\") === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn jQuery.access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn jQuery.access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n// Limit scope pollution from any deprecated API\n// (function() {\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n// })();\nif ( typeof module === \"object\" && module && typeof module.exports === \"object\" ) {\n\t// Expose jQuery as module.exports in loaders that implement the Node\n\t// module pattern (including browserify). Do not create the global, since\n\t// the user will be storing it themselves locally, and globals are frowned\n\t// upon in the Node module world.\n\tmodule.exports = jQuery;\n} else {\n\t// Otherwise expose jQuery to the global object as usual\n\twindow.jQuery = window.$ = jQuery;\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( \"jquery\", [], function () { return jQuery; } );\n\t}\n}\n\n})( window );\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/video-js/video-js.css",
    "content": "/*!\nVideo.js Default Styles (http://videojs.com)\nVersion 4.3.0\nCreate your own skin at http://designer.videojs.com\n*/\n/* SKIN\n================================================================================\nThe main class name for all skin-specific styles. To make your own skin,\nreplace all occurances of 'vjs-default-skin' with a new name. Then add your new\nskin name to your video tag instead of the default skin.\ne.g. <video class=\"video-js my-skin-name\">\n*/\n.vjs-default-skin {\n  color: #cccccc;\n}\n/* Custom Icon Font\n--------------------------------------------------------------------------------\nThe control icons are from a custom font. Each icon corresponds to a character\n(e.g. \"\\e001\"). Font icons allow for easy scaling and coloring of icons.\n*/\n@font-face {\n  font-family: 'VideoJS';\n  src: url('font/vjs.eot');\n  src: url('font/vjs.eot?#iefix') format('embedded-opentype'), url('font/vjs.woff') format('woff'), url('font/vjs.ttf') format('truetype');\n  font-weight: normal;\n  font-style: normal;\n}\n/* Base UI Component Classes\n--------------------------------------------------------------------------------\n*/\n/* Slider - used for Volume bar and Seek bar */\n.vjs-default-skin .vjs-slider {\n  /* Replace browser focus hightlight with handle highlight */\n  outline: 0;\n  position: relative;\n  cursor: pointer;\n  padding: 0;\n  /* background-color-with-alpha */\n  background-color: #333333;\n  background-color: rgba(51, 51, 51, 0.9);\n}\n.vjs-default-skin .vjs-slider:focus {\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 2em #ffffff;\n  -moz-box-shadow: 0 0 2em #ffffff;\n  box-shadow: 0 0 2em #ffffff;\n}\n.vjs-default-skin .vjs-slider-handle {\n  position: absolute;\n  /* Needed for IE6 */\n  left: 0;\n  top: 0;\n}\n.vjs-default-skin .vjs-slider-handle:before {\n  content: \"\\e009\";\n  font-family: VideoJS;\n  font-size: 1em;\n  line-height: 1;\n  text-align: center;\n  text-shadow: 0em 0em 1em #fff;\n  position: absolute;\n  top: 0;\n  left: 0;\n  /* Rotate the square icon to make a diamond */\n  /* transform */\n  -webkit-transform: rotate(-45deg);\n  -moz-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n  -o-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n/* Control Bar\n--------------------------------------------------------------------------------\nThe default control bar that is a container for most of the controls.\n*/\n.vjs-default-skin .vjs-control-bar {\n  /* Start hidden */\n  display: none;\n  position: absolute;\n  /* Place control bar at the bottom of the player box/video.\n     If you want more margin below the control bar, add more height. */\n  bottom: 0;\n  /* Use left/right to stretch to 100% width of player div */\n  left: 0;\n  right: 0;\n  /* Height includes any margin you want above or below control items */\n  height: 3.0em;\n  /* background-color-with-alpha */\n  background-color: #07141e;\n  background-color: rgba(7, 20, 30, 0.7);\n}\n/* Show the control bar only once the video has started playing */\n.vjs-default-skin.vjs-has-started .vjs-control-bar {\n  display: block;\n  /* Visibility needed to make sure things hide in older browsers too. */\n\n  visibility: visible;\n  opacity: 1;\n  /* transition */\n  -webkit-transition: visibility 0.1s, opacity 0.1s;\n  -moz-transition: visibility 0.1s, opacity 0.1s;\n  -o-transition: visibility 0.1s, opacity 0.1s;\n  transition: visibility 0.1s, opacity 0.1s;\n}\n/* Hide the control bar when the video is playing and the user is inactive  */\n.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {\n  display: block;\n  visibility: hidden;\n  opacity: 0;\n  /* transition */\n  -webkit-transition: visibility 1s, opacity 1s;\n  -moz-transition: visibility 1s, opacity 1s;\n  -o-transition: visibility 1s, opacity 1s;\n  transition: visibility 1s, opacity 1s;\n}\n.vjs-default-skin.vjs-controls-disabled .vjs-control-bar {\n  display: none;\n}\n.vjs-default-skin.vjs-using-native-controls .vjs-control-bar {\n  display: none;\n}\n/* IE8 is flakey with fonts, and you have to change the actual content to force\nfonts to show/hide properly.\n  - \"\\9\" IE8 hack didn't work for this\n  - Found in XP IE8 from http://modern.ie. Does not show up in \"IE8 mode\" in IE9\n*/\n@media \\0screen {\n  .vjs-default-skin.vjs-user-inactive.vjs-playing .vjs-control-bar :before {\n    content: \"\";\n  }\n}\n/* General styles for individual controls. */\n.vjs-default-skin .vjs-control {\n  outline: none;\n  position: relative;\n  float: left;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n  height: 3.0em;\n  width: 4em;\n}\n/* FontAwsome button icons */\n.vjs-default-skin .vjs-control:before {\n  font-family: VideoJS;\n  font-size: 1.5em;\n  line-height: 2;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);\n}\n/* Replacement for focus outline */\n.vjs-default-skin .vjs-control:focus:before,\n.vjs-default-skin .vjs-control:hover:before {\n  text-shadow: 0em 0em 1em #ffffff;\n}\n.vjs-default-skin .vjs-control:focus {\n  /*  outline: 0; */\n  /* keyboard-only users cannot see the focus on several of the UI elements when\n  this is set to 0 */\n\n}\n/* Hide control text visually, but have it available for screenreaders */\n.vjs-default-skin .vjs-control-text {\n  /* hide-visually */\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n/* Play/Pause\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-play-control {\n  width: 5em;\n  cursor: pointer;\n}\n.vjs-default-skin .vjs-play-control:before {\n  content: \"\\e001\";\n}\n.vjs-default-skin.vjs-playing .vjs-play-control:before {\n  content: \"\\e002\";\n}\n/* Volume/Mute\n-------------------------------------------------------------------------------- */\n.vjs-default-skin .vjs-mute-control,\n.vjs-default-skin .vjs-volume-menu-button {\n  cursor: pointer;\n  float: right;\n}\n.vjs-default-skin .vjs-mute-control:before,\n.vjs-default-skin .vjs-volume-menu-button:before {\n  content: \"\\e006\";\n}\n.vjs-default-skin .vjs-mute-control.vjs-vol-0:before,\n.vjs-default-skin .vjs-volume-menu-button.vjs-vol-0:before {\n  content: \"\\e003\";\n}\n.vjs-default-skin .vjs-mute-control.vjs-vol-1:before,\n.vjs-default-skin .vjs-volume-menu-button.vjs-vol-1:before {\n  content: \"\\e004\";\n}\n.vjs-default-skin .vjs-mute-control.vjs-vol-2:before,\n.vjs-default-skin .vjs-volume-menu-button.vjs-vol-2:before {\n  content: \"\\e005\";\n}\n.vjs-default-skin .vjs-volume-control {\n  width: 5em;\n  float: right;\n}\n.vjs-default-skin .vjs-volume-bar {\n  width: 5em;\n  height: 0.6em;\n  margin: 1.1em auto 0;\n}\n.vjs-default-skin .vjs-volume-menu-button .vjs-menu-content {\n  height: 2.9em;\n}\n.vjs-default-skin .vjs-volume-level {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 0.5em;\n  background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat;\n}\n.vjs-default-skin .vjs-volume-bar .vjs-volume-handle {\n  width: 0.5em;\n  height: 0.5em;\n}\n.vjs-default-skin .vjs-volume-handle:before {\n  font-size: 0.9em;\n  top: -0.2em;\n  left: -0.2em;\n  width: 1em;\n  height: 1em;\n}\n.vjs-default-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content {\n  width: 6em;\n  left: -4em;\n}\n/* Progress\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-progress-control {\n  position: absolute;\n  left: 0;\n  right: 0;\n  width: auto;\n  font-size: 0.3em;\n  height: 1em;\n  /* Set above the rest of the controls. */\n  top: -1em;\n  /* Shrink the bar slower than it grows. */\n  /* transition */\n  -webkit-transition: all 0.4s;\n  -moz-transition: all 0.4s;\n  -o-transition: all 0.4s;\n  transition: all 0.4s;\n}\n/* On hover, make the progress bar grow to something that's more clickable.\n    This simply changes the overall font for the progress bar, and this\n    updates both the em-based widths and heights, as wells as the icon font */\n.vjs-default-skin:hover .vjs-progress-control {\n  font-size: .9em;\n  /* Even though we're not changing the top/height, we need to include them in\n      the transition so they're handled correctly. */\n\n  /* transition */\n  -webkit-transition: all 0.2s;\n  -moz-transition: all 0.2s;\n  -o-transition: all 0.2s;\n  transition: all 0.2s;\n}\n/* Box containing play and load progresses. Also acts as seek scrubber. */\n.vjs-default-skin .vjs-progress-holder {\n  height: 100%;\n}\n/* Progress Bars */\n.vjs-default-skin .vjs-progress-holder .vjs-play-progress,\n.vjs-default-skin .vjs-progress-holder .vjs-load-progress {\n  position: absolute;\n  display: block;\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  /* Needed for IE6 */\n  left: 0;\n  top: 0;\n}\n.vjs-default-skin .vjs-play-progress {\n  /*\n    Using a data URI to create the white diagonal lines with a transparent\n      background. Surprisingly works in IE8.\n      Created using http://www.patternify.com\n    Changing the first color value will change the bar color.\n    Also using a paralax effect to make the lines move backwards.\n      The -50% left position makes that happen.\n  */\n\n  background: #66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat;\n}\n.vjs-default-skin .vjs-load-progress {\n  background: #646464 /* IE8- Fallback */;\n  background: rgba(255, 255, 255, 0.4);\n}\n.vjs-default-skin .vjs-seek-handle {\n  width: 1.5em;\n  height: 100%;\n}\n.vjs-default-skin .vjs-seek-handle:before {\n  padding-top: 0.1em /* Minor adjustment */;\n}\n/* Time Display\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-time-controls {\n  font-size: 1em;\n  /* Align vertically by making the line height the same as the control bar */\n  line-height: 3em;\n}\n.vjs-default-skin .vjs-current-time {\n  float: left;\n}\n.vjs-default-skin .vjs-duration {\n  float: left;\n}\n/* Remaining time is in the HTML, but not included in default design */\n.vjs-default-skin .vjs-remaining-time {\n  display: none;\n  float: left;\n}\n.vjs-time-divider {\n  float: left;\n  line-height: 3em;\n}\n/* Fullscreen\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-fullscreen-control {\n  width: 3.8em;\n  cursor: pointer;\n  float: right;\n}\n.vjs-default-skin .vjs-fullscreen-control:before {\n  content: \"\\e000\";\n}\n/* Switch to the exit icon when the player is in fullscreen */\n.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control:before {\n  content: \"\\e00b\";\n}\n/* Big Play Button (play button at start)\n--------------------------------------------------------------------------------\nPositioning of the play button in the center or other corners can be done more\neasily in the skin designer. http://designer.videojs.com/\n*/\n.vjs-default-skin .vjs-big-play-button {\n  left: 0.5em;\n  top: 0.5em;\n  font-size: 3em;\n  display: block;\n  z-index: 2;\n  position: absolute;\n  width: 4em;\n  height: 2.6em;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  opacity: 1;\n  /* Need a slightly gray bg so it can be seen on black backgrounds */\n  /* background-color-with-alpha */\n  background-color: #07141e;\n  background-color: rgba(7, 20, 30, 0.7);\n  border: 0.1em solid #3b4249;\n  /* border-radius */\n  -webkit-border-radius: 0.8em;\n  -moz-border-radius: 0.8em;\n  border-radius: 0.8em;\n  /* box-shadow */\n  -webkit-box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);\n  -moz-box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);\n  box-shadow: 0px 0px 1em rgba(255, 255, 255, 0.25);\n  /* transition */\n  -webkit-transition: all 0.4s;\n  -moz-transition: all 0.4s;\n  -o-transition: all 0.4s;\n  transition: all 0.4s;\n}\n/* Optionally center */\n.vjs-default-skin.vjs-big-play-centered .vjs-big-play-button {\n  /* Center it horizontally */\n  left: 50%;\n  margin-left: -2.1em;\n  /* Center it vertically */\n  top: 50%;\n  margin-top: -1.4000000000000001em;\n}\n/* Hide if controls are disabled */\n.vjs-default-skin.vjs-controls-disabled .vjs-big-play-button {\n  display: none;\n}\n/* Hide when video starts playing */\n.vjs-default-skin.vjs-has-started .vjs-big-play-button {\n  display: none;\n}\n/* Hide on mobile devices. Remove when we stop using native controls\n    by default on mobile  */\n.vjs-default-skin.vjs-using-native-controls .vjs-big-play-button {\n  display: none;\n}\n.vjs-default-skin:hover .vjs-big-play-button,\n.vjs-default-skin .vjs-big-play-button:focus {\n  outline: 0;\n  border-color: #fff;\n  /* IE8 needs a non-glow hover state */\n  background-color: #505050;\n  background-color: rgba(50, 50, 50, 0.75);\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 3em #ffffff;\n  -moz-box-shadow: 0 0 3em #ffffff;\n  box-shadow: 0 0 3em #ffffff;\n  /* transition */\n  -webkit-transition: all 0s;\n  -moz-transition: all 0s;\n  -o-transition: all 0s;\n  transition: all 0s;\n}\n.vjs-default-skin .vjs-big-play-button:before {\n  content: \"\\e001\";\n  font-family: VideoJS;\n  /* In order to center the play icon vertically we need to set the line height\n     to the same as the button height */\n\n  line-height: 2.6em;\n  text-shadow: 0.05em 0.05em 0.1em #000;\n  text-align: center /* Needed for IE8 */;\n  position: absolute;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n/* Loading Spinner\n--------------------------------------------------------------------------------\n*/\n.vjs-loading-spinner {\n  display: none;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  font-size: 4em;\n  line-height: 1;\n  width: 1em;\n  height: 1em;\n  margin-left: -0.5em;\n  margin-top: -0.5em;\n  opacity: 0.75;\n  /* animation */\n  -webkit-animation: spin 1.5s infinite linear;\n  -moz-animation: spin 1.5s infinite linear;\n  -o-animation: spin 1.5s infinite linear;\n  animation: spin 1.5s infinite linear;\n}\n.vjs-default-skin .vjs-loading-spinner:before {\n  content: \"\\e01e\";\n  font-family: VideoJS;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 1em;\n  height: 1em;\n  text-align: center;\n  text-shadow: 0em 0em 0.1em #000;\n}\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n  }\n  100% {\n    -moz-transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n  }\n}\n@-o-keyframes spin {\n  0% {\n    -o-transform: rotate(0deg);\n  }\n  100% {\n    -o-transform: rotate(359deg);\n  }\n}\n@keyframes spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(359deg);\n  }\n}\n/* Menu Buttons (Captions/Subtitles/etc.)\n--------------------------------------------------------------------------------\n*/\n.vjs-default-skin .vjs-menu-button {\n  float: right;\n  cursor: pointer;\n}\n.vjs-default-skin .vjs-menu {\n  display: none;\n  position: absolute;\n  bottom: 0;\n  left: 0em;\n  /* (Width of vjs-menu - width of button) / 2 */\n\n  width: 0em;\n  height: 0em;\n  margin-bottom: 3em;\n  border-left: 2em solid transparent;\n  border-right: 2em solid transparent;\n  border-top: 1.55em solid #000000;\n  /* Same width top as ul bottom */\n\n  border-top-color: rgba(7, 40, 50, 0.5);\n  /* Same as ul background */\n\n}\n/* Button Pop-up Menu */\n.vjs-default-skin .vjs-menu-button .vjs-menu .vjs-menu-content {\n  display: block;\n  padding: 0;\n  margin: 0;\n  position: absolute;\n  width: 10em;\n  bottom: 1.5em;\n  /* Same bottom as vjs-menu border-top */\n\n  max-height: 15em;\n  overflow: auto;\n  left: -5em;\n  /* Width of menu - width of button / 2 */\n\n  /* background-color-with-alpha */\n  background-color: #07141e;\n  background-color: rgba(7, 20, 30, 0.7);\n  /* box-shadow */\n  -webkit-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);\n  -moz-box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);\n  box-shadow: -0.2em -0.2em 0.3em rgba(255, 255, 255, 0.2);\n}\n.vjs-default-skin .vjs-menu-button:hover .vjs-menu {\n  display: block;\n}\n.vjs-default-skin .vjs-menu-button ul li {\n  list-style: none;\n  margin: 0;\n  padding: 0.3em 0 0.3em 0;\n  line-height: 1.4em;\n  font-size: 1.2em;\n  text-align: center;\n  text-transform: lowercase;\n}\n.vjs-default-skin .vjs-menu-button ul li.vjs-selected {\n  background-color: #000;\n}\n.vjs-default-skin .vjs-menu-button ul li:focus,\n.vjs-default-skin .vjs-menu-button ul li:hover,\n.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus,\n.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover {\n  outline: 0;\n  color: #111;\n  /* background-color-with-alpha */\n  background-color: #ffffff;\n  background-color: rgba(255, 255, 255, 0.75);\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 1em #ffffff;\n  -moz-box-shadow: 0 0 1em #ffffff;\n  box-shadow: 0 0 1em #ffffff;\n}\n.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title {\n  text-align: center;\n  text-transform: uppercase;\n  font-size: 1em;\n  line-height: 2em;\n  padding: 0;\n  margin: 0 0 0.3em 0;\n  font-weight: bold;\n  cursor: default;\n}\n/* Subtitles Button */\n.vjs-default-skin .vjs-subtitles-button:before {\n  content: \"\\e00c\";\n}\n/* Captions Button */\n.vjs-default-skin .vjs-captions-button:before {\n  content: \"\\e008\";\n}\n/* Replacement for focus outline */\n.vjs-default-skin .vjs-captions-button:focus .vjs-control-content:before,\n.vjs-default-skin .vjs-captions-button:hover .vjs-control-content:before {\n  /* box-shadow */\n  -webkit-box-shadow: 0 0 1em #ffffff;\n  -moz-box-shadow: 0 0 1em #ffffff;\n  box-shadow: 0 0 1em #ffffff;\n}\n/*\nREQUIRED STYLES (be careful overriding)\n================================================================================\nWhen loading the player, the video tag is replaced with a DIV,\nthat will hold the video tag or object tag for other playback methods.\nThe div contains the video playback element (Flash or HTML5) and controls,\nand sets the width and height of the video.\n\n** If you want to add some kind of border/padding (e.g. a frame), or special\npositioning, use another containing element. Otherwise you risk messing up\ncontrol positioning and full window mode. **\n*/\n.video-js {\n  background-color: #000;\n  position: relative;\n  padding: 0;\n  /* Start with 10px for base font size so other dimensions can be em based and\n     easily calculable. */\n\n  font-size: 10px;\n  /* Allow poster to be vertially aligned. */\n\n  vertical-align: middle;\n  /*  display: table-cell; */\n  /*This works in Safari but not Firefox.*/\n\n  /* Provide some basic defaults for fonts */\n\n  font-weight: normal;\n  font-style: normal;\n  /* Avoiding helvetica: issue #376 */\n\n  font-family: Arial, sans-serif;\n  /* Turn off user selection (text highlighting) by default.\n     The majority of player components will not be text blocks.\n     Text areas will need to turn user selection back on. */\n\n  /* user-select */\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n/* Playback technology elements expand to the width/height of the containing div\n    <video> or <object> */\n.video-js .vjs-tech {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n/* Fix for Firefox 9 fullscreen (only if it is enabled). Not needed when\n   checking fullScreenEnabled. */\n.video-js:-moz-full-screen {\n  position: absolute;\n}\n/* Fullscreen Styles */\nbody.vjs-full-window {\n  padding: 0;\n  margin: 0;\n  height: 100%;\n  /* Fix for IE6 full-window. http://www.cssplay.co.uk/layouts/fixed.html */\n  overflow-y: auto;\n}\n.video-js.vjs-fullscreen {\n  position: fixed;\n  overflow: hidden;\n  z-index: 1000;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  width: 100% !important;\n  height: 100% !important;\n  /* IE6 full-window (underscore hack) */\n  _position: absolute;\n}\n.video-js:-webkit-full-screen {\n  width: 100% !important;\n  height: 100% !important;\n}\n.video-js.vjs-fullscreen.vjs-user-inactive {\n  cursor: none;\n}\n/* Poster Styles */\n.vjs-poster {\n  background-repeat: no-repeat;\n  background-position: 50% 50%;\n  background-size: contain;\n  cursor: pointer;\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.vjs-poster img {\n  display: block;\n  margin: 0 auto;\n  max-height: 100%;\n  padding: 0;\n  width: 100%;\n}\n/* Hide the poster when native controls are used otherwise it covers them */\n.video-js.vjs-using-native-controls .vjs-poster {\n  display: none;\n}\n/* Text Track Styles */\n/* Overall track holder for both captions and subtitles */\n.video-js .vjs-text-track-display {\n  text-align: center;\n  position: absolute;\n  bottom: 4em;\n  /* Leave padding on left and right */\n  left: 1em;\n  right: 1em;\n}\n/* Individual tracks */\n.video-js .vjs-text-track {\n  display: none;\n  font-size: 1.4em;\n  text-align: center;\n  margin-bottom: 0.1em;\n  /* Transparent black background, or fallback to all black (oldIE) */\n  /* background-color-with-alpha */\n  background-color: #000000;\n  background-color: rgba(0, 0, 0, 0.5);\n}\n.video-js .vjs-subtitles {\n  color: #ffffff /* Subtitles are white */;\n}\n.video-js .vjs-captions {\n  color: #ffcc66 /* Captions are yellow */;\n}\n.vjs-tt-cue {\n  display: block;\n}\n/* Hide disabled or unsupported controls */\n.vjs-default-skin .vjs-hidden {\n  display: none;\n}\n.vjs-lock-showing {\n  display: block !important;\n  opacity: 1;\n  visibility: visible;\n}\n/* -----------------------------------------------------------------------------\nThe original source of this file lives at\nhttps://github.com/videojs/video.js/blob/master/src/css/video-js.less */\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/video-js/video.dev.js",
    "content": "/**\n * @fileoverview Main function src.\n */\n\n// HTML5 Shiv. Must be in <head> to support older browsers.\ndocument.createElement('video');\ndocument.createElement('audio');\ndocument.createElement('track');\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n *\n * **ALIASES** videojs, _V_ (deprecated)\n *\n * The `vjs` function can be used to initialize or retrieve a player.\n *\n *     var myPlayer = vjs('my_video_id');\n *\n * @param  {String|Element} id      Video element or video element ID\n * @param  {Object=} options        Optional options object for config/settings\n * @param  {Function=} ready        Optional ready callback\n * @return {vjs.Player}             A player instance\n * @namespace\n */\nvar vjs = function(id, options, ready){\n  var tag; // Element of ID\n\n  // Allow for element or ID to be passed in\n  // String ID\n  if (typeof id === 'string') {\n\n    // Adjust for jQuery ID syntax\n    if (id.indexOf('#') === 0) {\n      id = id.slice(1);\n    }\n\n    // If a player instance has already been created for this ID return it.\n    if (vjs.players[id]) {\n      return vjs.players[id];\n\n    // Otherwise get element for ID\n    } else {\n      tag = vjs.el(id);\n    }\n\n  // ID is a media element\n  } else {\n    tag = id;\n  }\n\n  // Check for a useable element\n  if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n    throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n  }\n\n  // Element may have a player attr referring to an already created player instance.\n  // If not, set up a new player and return the instance.\n  return tag['player'] || new vjs.Player(tag, options, ready);\n};\n\n// Extended name, also available externally, window.videojs\nvar videojs = vjs;\nwindow.videojs = window.vjs = vjs;\n\n// CDN Version. Used to target right flash swf.\nvjs.CDN_VERSION = '4.3';\nvjs.ACCESS_PROTOCOL = ('https:' == document.location.protocol ? 'https://' : 'http://');\n\n/**\n * Global Player instance options, surfaced from vjs.Player.prototype.options_\n * vjs.options = vjs.Player.prototype.options_\n * All options should use string keys so they avoid\n * renaming by closure compiler\n * @type {Object}\n */\nvjs.options = {\n  // Default order of fallback technology\n  'techOrder': ['html5','flash'],\n  // techOrder: ['flash','html5'],\n\n  'html5': {},\n  'flash': {},\n\n  // Default of web browser is 300x150. Should rely on source width/height.\n  'width': 300,\n  'height': 150,\n  // defaultVolume: 0.85,\n  'defaultVolume': 0.00, // The freakin seaguls are driving me crazy!\n\n  // Included control sets\n  'children': {\n    'mediaLoader': {},\n    'posterImage': {},\n    'textTrackDisplay': {},\n    'loadingSpinner': {},\n    'bigPlayButton': {},\n    'controlBar': {}\n  },\n\n  // Default message to show when a video cannot be played.\n  'notSupportedMessage': 'Sorry, no compatible source and playback ' +\n      'technology were found for this video. Try using another browser ' +\n      'like <a href=\"http://bit.ly/ccMUEC\">Chrome</a> or download the ' +\n      'latest <a href=\"http://adobe.ly/mwfN1\">Adobe Flash Player</a>.'\n};\n\n// Set CDN Version of swf\n// The added (+) blocks the replace from changing this 4.3 string\nif (vjs.CDN_VERSION !== 'GENERATED'+'_CDN_VSN') {\n  videojs.options['flash']['swf'] = vjs.ACCESS_PROTOCOL + 'vjs.zencdn.net/'+vjs.CDN_VERSION+'/video-js.swf';\n}\n\n/**\n * Global player list\n * @type {Object}\n */\nvjs.players = {};\n/**\n * Core Object/Class for objects that use inheritance + contstructors\n *\n * To create a class that can be subclassed itself, extend the CoreObject class.\n *\n *     var Animal = CoreObject.extend();\n *     var Horse = Animal.extend();\n *\n * The constructor can be defined through the init property of an object argument.\n *\n *     var Animal = CoreObject.extend({\n *       init: function(name, sound){\n *         this.name = name;\n *       }\n *     });\n *\n * Other methods and properties can be added the same way, or directly to the\n * prototype.\n *\n *    var Animal = CoreObject.extend({\n *       init: function(name){\n *         this.name = name;\n *       },\n *       getName: function(){\n *         return this.name;\n *       },\n *       sound: '...'\n *    });\n *\n *    Animal.prototype.makeSound = function(){\n *      alert(this.sound);\n *    };\n *\n * To create an instance of a class, use the create method.\n *\n *    var fluffy = Animal.create('Fluffy');\n *    fluffy.getName(); // -> Fluffy\n *\n * Methods and properties can be overridden in subclasses.\n *\n *     var Horse = Animal.extend({\n *       sound: 'Neighhhhh!'\n *     });\n *\n *     var horsey = Horse.create('Horsey');\n *     horsey.getName(); // -> Horsey\n *     horsey.makeSound(); // -> Alert: Neighhhhh!\n *\n * @class\n * @constructor\n */\nvjs.CoreObject = vjs['CoreObject'] = function(){};\n// Manually exporting vjs['CoreObject'] here for Closure Compiler\n// because of the use of the extend/create class methods\n// If we didn't do this, those functions would get flattend to something like\n// `a = ...` and `this.prototype` would refer to the global object instead of\n// CoreObject\n\n/**\n * Create a new object that inherits from this Object\n *\n *     var Animal = CoreObject.extend();\n *     var Horse = Animal.extend();\n *\n * @param {Object} props Functions and properties to be applied to the\n *                       new object's prototype\n * @return {vjs.CoreObject} An object that inherits from CoreObject\n * @this {*}\n */\nvjs.CoreObject.extend = function(props){\n  var init, subObj;\n\n  props = props || {};\n  // Set up the constructor using the supplied init method\n  // or using the init of the parent object\n  // Make sure to check the unobfuscated version for external libs\n  init = props['init'] || props.init || this.prototype['init'] || this.prototype.init || function(){};\n  // In Resig's simple class inheritance (previously used) the constructor\n  //  is a function that calls `this.init.apply(arguments)`\n  // However that would prevent us from using `ParentObject.call(this);`\n  //  in a Child constuctor because the `this` in `this.init`\n  //  would still refer to the Child and cause an inifinite loop.\n  // We would instead have to do\n  //    `ParentObject.prototype.init.apply(this, argumnents);`\n  //  Bleh. We're not creating a _super() function, so it's good to keep\n  //  the parent constructor reference simple.\n  subObj = function(){\n    init.apply(this, arguments);\n  };\n\n  // Inherit from this object's prototype\n  subObj.prototype = vjs.obj.create(this.prototype);\n  // Reset the constructor property for subObj otherwise\n  // instances of subObj would have the constructor of the parent Object\n  subObj.prototype.constructor = subObj;\n\n  // Make the class extendable\n  subObj.extend = vjs.CoreObject.extend;\n  // Make a function for creating instances\n  subObj.create = vjs.CoreObject.create;\n\n  // Extend subObj's prototype with functions and other properties from props\n  for (var name in props) {\n    if (props.hasOwnProperty(name)) {\n      subObj.prototype[name] = props[name];\n    }\n  }\n\n  return subObj;\n};\n\n/**\n * Create a new instace of this Object class\n *\n *     var myAnimal = Animal.create();\n *\n * @return {vjs.CoreObject} An instance of a CoreObject subclass\n * @this {*}\n */\nvjs.CoreObject.create = function(){\n  // Create a new object that inherits from this object's prototype\n  var inst = vjs.obj.create(this.prototype);\n\n  // Apply this constructor function to the new object\n  this.apply(inst, arguments);\n\n  // Return the new object\n  return inst;\n};\n/**\n * @fileoverview Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n * @param  {Element|Object}   elem Element or object to bind listeners to\n * @param  {String}   type Type of event to bind to.\n * @param  {Function} fn   Event listener.\n * @private\n */\nvjs.on = function(elem, type, fn){\n  var data = vjs.getData(elem);\n\n  // We need a place to store all our handler data\n  if (!data.handlers) data.handlers = {};\n\n  if (!data.handlers[type]) data.handlers[type] = [];\n\n  if (!fn.guid) fn.guid = vjs.guid++;\n\n  data.handlers[type].push(fn);\n\n  if (!data.dispatcher) {\n    data.disabled = false;\n\n    data.dispatcher = function (event){\n\n      if (data.disabled) return;\n      event = vjs.fixEvent(event);\n\n      var handlers = data.handlers[event.type];\n\n      if (handlers) {\n        // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n        var handlersCopy = handlers.slice(0);\n\n        for (var m = 0, n = handlersCopy.length; m < n; m++) {\n          if (event.isImmediatePropagationStopped()) {\n            break;\n          } else {\n            handlersCopy[m].call(elem, event);\n          }\n        }\n      }\n    };\n  }\n\n  if (data.handlers[type].length == 1) {\n    if (document.addEventListener) {\n      elem.addEventListener(type, data.dispatcher, false);\n    } else if (document.attachEvent) {\n      elem.attachEvent('on' + type, data.dispatcher);\n    }\n  }\n};\n\n/**\n * Removes event listeners from an element\n * @param  {Element|Object}   elem Object to remove listeners from\n * @param  {String=}   type Type of listener to remove. Don't include to remove all events from element.\n * @param  {Function} fn   Specific listener to remove. Don't incldue to remove listeners for an event type.\n * @private\n */\nvjs.off = function(elem, type, fn) {\n  // Don't want to add a cache object through getData if not needed\n  if (!vjs.hasData(elem)) return;\n\n  var data = vjs.getData(elem);\n\n  // If no events exist, nothing to unbind\n  if (!data.handlers) { return; }\n\n  // Utility function\n  var removeType = function(t){\n     data.handlers[t] = [];\n     vjs.cleanUpEvents(elem,t);\n  };\n\n  // Are we removing all bound events?\n  if (!type) {\n    for (var t in data.handlers) removeType(t);\n    return;\n  }\n\n  var handlers = data.handlers[type];\n\n  // If no handlers exist, nothing to unbind\n  if (!handlers) return;\n\n  // If no listener was provided, remove all listeners for type\n  if (!fn) {\n    removeType(type);\n    return;\n  }\n\n  // We're only removing a single handler\n  if (fn.guid) {\n    for (var n = 0; n < handlers.length; n++) {\n      if (handlers[n].guid === fn.guid) {\n        handlers.splice(n--, 1);\n      }\n    }\n  }\n\n  vjs.cleanUpEvents(elem, type);\n};\n\n/**\n * Clean up the listener cache and dispatchers\n * @param  {Element|Object} elem Element to clean up\n * @param  {String} type Type of event to clean up\n * @private\n */\nvjs.cleanUpEvents = function(elem, type) {\n  var data = vjs.getData(elem);\n\n  // Remove the events of a particular type if there are none left\n  if (data.handlers[type].length === 0) {\n    delete data.handlers[type];\n    // data.handlers[type] = null;\n    // Setting to null was causing an error with data.handlers\n\n    // Remove the meta-handler from the element\n    if (document.removeEventListener) {\n      elem.removeEventListener(type, data.dispatcher, false);\n    } else if (document.detachEvent) {\n      elem.detachEvent('on' + type, data.dispatcher);\n    }\n  }\n\n  // Remove the events object if there are no types left\n  if (vjs.isEmpty(data.handlers)) {\n    delete data.handlers;\n    delete data.dispatcher;\n    delete data.disabled;\n\n    // data.handlers = null;\n    // data.dispatcher = null;\n    // data.disabled = null;\n  }\n\n  // Finally remove the expando if there is no data left\n  if (vjs.isEmpty(data)) {\n    vjs.removeData(elem);\n  }\n};\n\n/**\n * Fix a native event to have standard property values\n * @param  {Object} event Event object to fix\n * @return {Object}\n * @private\n */\nvjs.fixEvent = function(event) {\n\n  function returnTrue() { return true; }\n  function returnFalse() { return false; }\n\n  // Test if fixing up is needed\n  // Used to check if !event.stopPropagation instead of isPropagationStopped\n  // But native events return true for stopPropagation, but don't have\n  // other expected methods like isPropagationStopped. Seems to be a problem\n  // with the Javascript Ninja code. So we're just overriding all events now.\n  if (!event || !event.isPropagationStopped) {\n    var old = event || window.event;\n\n    event = {};\n    // Clone the old object so that we can modify the values event = {};\n    // IE8 Doesn't like when you mess with native event properties\n    // Firefox returns false for event.hasOwnProperty('type') and other props\n    //  which makes copying more difficult.\n    // TODO: Probably best to create a whitelist of event props\n    for (var key in old) {\n      // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n      if (key !== 'layerX' && key !== 'layerY') {\n        event[key] = old[key];\n      }\n    }\n\n    // The event occurred on this element\n    if (!event.target) {\n      event.target = event.srcElement || document;\n    }\n\n    // Handle which other element the event is related to\n    event.relatedTarget = event.fromElement === event.target ?\n      event.toElement :\n      event.fromElement;\n\n    // Stop the default browser action\n    event.preventDefault = function () {\n      if (old.preventDefault) {\n        old.preventDefault();\n      }\n      event.returnValue = false;\n      event.isDefaultPrevented = returnTrue;\n    };\n\n    event.isDefaultPrevented = returnFalse;\n\n    // Stop the event from bubbling\n    event.stopPropagation = function () {\n      if (old.stopPropagation) {\n        old.stopPropagation();\n      }\n      event.cancelBubble = true;\n      event.isPropagationStopped = returnTrue;\n    };\n\n    event.isPropagationStopped = returnFalse;\n\n    // Stop the event from bubbling and executing other handlers\n    event.stopImmediatePropagation = function () {\n      if (old.stopImmediatePropagation) {\n        old.stopImmediatePropagation();\n      }\n      event.isImmediatePropagationStopped = returnTrue;\n      event.stopPropagation();\n    };\n\n    event.isImmediatePropagationStopped = returnFalse;\n\n    // Handle mouse position\n    if (event.clientX != null) {\n      var doc = document.documentElement, body = document.body;\n\n      event.pageX = event.clientX +\n        (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n        (doc && doc.clientLeft || body && body.clientLeft || 0);\n      event.pageY = event.clientY +\n        (doc && doc.scrollTop || body && body.scrollTop || 0) -\n        (doc && doc.clientTop || body && body.clientTop || 0);\n    }\n\n    // Handle key presses\n    event.which = event.charCode || event.keyCode;\n\n    // Fix button for mouse clicks:\n    // 0 == left; 1 == middle; 2 == right\n    if (event.button != null) {\n      event.button = (event.button & 1 ? 0 :\n        (event.button & 4 ? 1 :\n          (event.button & 2 ? 2 : 0)));\n    }\n  }\n\n  // Returns fixed-up instance\n  return event;\n};\n\n/**\n * Trigger an event for an element\n * @param  {Element|Object} elem  Element to trigger an event on\n * @param  {String} event Type of event to trigger\n * @private\n */\nvjs.trigger = function(elem, event) {\n  // Fetches element data and a reference to the parent (for bubbling).\n  // Don't want to add a data object to cache for every parent,\n  // so checking hasData first.\n  var elemData = (vjs.hasData(elem)) ? vjs.getData(elem) : {};\n  var parent = elem.parentNode || elem.ownerDocument;\n      // type = event.type || event,\n      // handler;\n\n  // If an event name was passed as a string, creates an event out of it\n  if (typeof event === 'string') {\n    event = { type:event, target:elem };\n  }\n  // Normalizes the event properties.\n  event = vjs.fixEvent(event);\n\n  // If the passed element has a dispatcher, executes the established handlers.\n  if (elemData.dispatcher) {\n    elemData.dispatcher.call(elem, event);\n  }\n\n  // Unless explicitly stopped or the event does not bubble (e.g. media events)\n    // recursively calls this function to bubble the event up the DOM.\n    if (parent && !event.isPropagationStopped() && event.bubbles !== false) {\n    vjs.trigger(parent, event);\n\n  // If at the top of the DOM, triggers the default action unless disabled.\n  } else if (!parent && !event.isDefaultPrevented()) {\n    var targetData = vjs.getData(event.target);\n\n    // Checks if the target has a default action for this event.\n    if (event.target[event.type]) {\n      // Temporarily disables event dispatching on the target as we have already executed the handler.\n      targetData.disabled = true;\n      // Executes the default action.\n      if (typeof event.target[event.type] === 'function') {\n        event.target[event.type]();\n      }\n      // Re-enables event dispatching.\n      targetData.disabled = false;\n    }\n  }\n\n  // Inform the triggerer if the default was prevented by returning false\n  return !event.isDefaultPrevented();\n  /* Original version of js ninja events wasn't complete.\n   * We've since updated to the latest version, but keeping this around\n   * for now just in case.\n   */\n  // // Added in attion to book. Book code was broke.\n  // event = typeof event === 'object' ?\n  //   event[vjs.expando] ?\n  //     event :\n  //     new vjs.Event(type, event) :\n  //   new vjs.Event(type);\n\n  // event.type = type;\n  // if (handler) {\n  //   handler.call(elem, event);\n  // }\n\n  // // Clean up the event in case it is being reused\n  // event.result = undefined;\n  // event.target = elem;\n};\n\n/**\n * Trigger a listener only once for an event\n * @param  {Element|Object}   elem Element or object to\n * @param  {String}   type\n * @param  {Function} fn\n * @private\n */\nvjs.one = function(elem, type, fn) {\n  var func = function(){\n    vjs.off(elem, type, func);\n    fn.apply(this, arguments);\n  };\n  func.guid = fn.guid = fn.guid || vjs.guid++;\n  vjs.on(elem, type, func);\n};\nvar hasOwnProp = Object.prototype.hasOwnProperty;\n\n/**\n * Creates an element and applies properties.\n * @param  {String=} tagName    Name of tag to be created.\n * @param  {Object=} properties Element properties to be applied.\n * @return {Element}\n * @private\n */\nvjs.createEl = function(tagName, properties){\n  var el, propName;\n\n  el = document.createElement(tagName || 'div');\n\n  for (propName in properties){\n    if (hasOwnProp.call(properties, propName)) {\n      //el[propName] = properties[propName];\n      // Not remembering why we were checking for dash\n      // but using setAttribute means you have to use getAttribute\n\n      // The check for dash checks for the aria-* attributes, like aria-label, aria-valuemin.\n      // The additional check for \"role\" is because the default method for adding attributes does not\n      // add the attribute \"role\". My guess is because it's not a valid attribute in some namespaces, although\n      // browsers handle the attribute just fine. The W3C allows for aria-* attributes to be used in pre-HTML5 docs.\n      // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem.\n\n       if (propName.indexOf('aria-') !== -1 || propName=='role') {\n         el.setAttribute(propName, properties[propName]);\n       } else {\n         el[propName] = properties[propName];\n       }\n    }\n  }\n  return el;\n};\n\n/**\n * Uppercase the first letter of a string\n * @param  {String} string String to be uppercased\n * @return {String}\n * @private\n */\nvjs.capitalize = function(string){\n  return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n/**\n * Object functions container\n * @type {Object}\n * @private\n */\nvjs.obj = {};\n\n/**\n * Object.create shim for prototypal inheritance\n *\n * https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create\n *\n * @function\n * @param  {Object}   obj Object to use as prototype\n * @private\n */\n vjs.obj.create = Object.create || function(obj){\n  //Create a new function called 'F' which is just an empty object.\n  function F() {}\n\n  //the prototype of the 'F' function should point to the\n  //parameter of the anonymous function.\n  F.prototype = obj;\n\n  //create a new constructor function based off of the 'F' function.\n  return new F();\n};\n\n/**\n * Loop through each property in an object and call a function\n * whose arguments are (key,value)\n * @param  {Object}   obj Object of properties\n * @param  {Function} fn  Function to be called on each property.\n * @this {*}\n * @private\n */\nvjs.obj.each = function(obj, fn, context){\n  for (var key in obj) {\n    if (hasOwnProp.call(obj, key)) {\n      fn.call(context || this, key, obj[key]);\n    }\n  }\n};\n\n/**\n * Merge two objects together and return the original.\n * @param  {Object} obj1\n * @param  {Object} obj2\n * @return {Object}\n * @private\n */\nvjs.obj.merge = function(obj1, obj2){\n  if (!obj2) { return obj1; }\n  for (var key in obj2){\n    if (hasOwnProp.call(obj2, key)) {\n      obj1[key] = obj2[key];\n    }\n  }\n  return obj1;\n};\n\n/**\n * Merge two objects, and merge any properties that are objects\n * instead of just overwriting one. Uses to merge options hashes\n * where deeper default settings are important.\n * @param  {Object} obj1 Object to override\n * @param  {Object} obj2 Overriding object\n * @return {Object}      New object. Obj1 and Obj2 will be untouched.\n * @private\n */\nvjs.obj.deepMerge = function(obj1, obj2){\n  var key, val1, val2;\n\n  // make a copy of obj1 so we're not ovewriting original values.\n  // like prototype.options_ and all sub options objects\n  obj1 = vjs.obj.copy(obj1);\n\n  for (key in obj2){\n    if (hasOwnProp.call(obj2, key)) {\n      val1 = obj1[key];\n      val2 = obj2[key];\n\n      // Check if both properties are pure objects and do a deep merge if so\n      if (vjs.obj.isPlain(val1) && vjs.obj.isPlain(val2)) {\n        obj1[key] = vjs.obj.deepMerge(val1, val2);\n      } else {\n        obj1[key] = obj2[key];\n      }\n    }\n  }\n  return obj1;\n};\n\n/**\n * Make a copy of the supplied object\n * @param  {Object} obj Object to copy\n * @return {Object}     Copy of object\n * @private\n */\nvjs.obj.copy = function(obj){\n  return vjs.obj.merge({}, obj);\n};\n\n/**\n * Check if an object is plain, and not a dom node or any object sub-instance\n * @param  {Object} obj Object to check\n * @return {Boolean}     True if plain, false otherwise\n * @private\n */\nvjs.obj.isPlain = function(obj){\n  return !!obj\n    && typeof obj === 'object'\n    && obj.toString() === '[object Object]'\n    && obj.constructor === Object;\n};\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n   It also stores a unique id on the function so it can be easily removed from events\n * @param  {*}   context The object to bind as scope\n * @param  {Function} fn      The function to be bound to a scope\n * @param  {Number=}   uid     An optional unique ID for the function to be set\n * @return {Function}\n * @private\n */\nvjs.bind = function(context, fn, uid) {\n  // Make sure the function has a unique ID\n  if (!fn.guid) { fn.guid = vjs.guid++; }\n\n  // Create the new function that changes the context\n  var ret = function() {\n    return fn.apply(context, arguments);\n  };\n\n  // Allow for the ability to individualize this function\n  // Needed in the case where multiple objects might share the same prototype\n  // IF both items add an event listener with the same function, then you try to remove just one\n  // it will remove both because they both have the same guid.\n  // when using this, you need to use the bind method when you remove the listener as well.\n  // currently used in text tracks\n  ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n  return ret;\n};\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listneres are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n * @type {Object}\n * @private\n */\nvjs.cache = {};\n\n/**\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nvjs.guid = 1;\n\n/**\n * Unique attribute name to store an element's guid in\n * @type {String}\n * @constant\n * @private\n */\nvjs.expando = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n * @param  {Element} el Element to store data for.\n * @return {Object}\n * @private\n */\nvjs.getData = function(el){\n  var id = el[vjs.expando];\n  if (!id) {\n    id = el[vjs.expando] = vjs.guid++;\n    vjs.cache[id] = {};\n  }\n  return vjs.cache[id];\n};\n\n/**\n * Returns the cache object where data for an element is stored\n * @param  {Element} el Element to store data for.\n * @return {Object}\n * @private\n */\nvjs.hasData = function(el){\n  var id = el[vjs.expando];\n  return !(!id || vjs.isEmpty(vjs.cache[id]));\n};\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n * @param  {Element} el Remove data for an element\n * @private\n */\nvjs.removeData = function(el){\n  var id = el[vjs.expando];\n  if (!id) { return; }\n  // Remove all stored data\n  // Changed to = null\n  // http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/\n  // vjs.cache[id] = null;\n  delete vjs.cache[id];\n\n  // Remove the expando property from the DOM node\n  try {\n    delete el[vjs.expando];\n  } catch(e) {\n    if (el.removeAttribute) {\n      el.removeAttribute(vjs.expando);\n    } else {\n      // IE doesn't appear to support removeAttribute on the document element\n      el[vjs.expando] = null;\n    }\n  }\n};\n\n/**\n * Check if an object is empty\n * @param  {Object}  obj The object to check for emptiness\n * @return {Boolean}\n * @private\n */\nvjs.isEmpty = function(obj) {\n  for (var prop in obj) {\n    // Inlude null properties as empty.\n    if (obj[prop] !== null) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Add a CSS class name to an element\n * @param {Element} element    Element to add class name to\n * @param {String} classToAdd Classname to add\n * @private\n */\nvjs.addClass = function(element, classToAdd){\n  if ((' '+element.className+' ').indexOf(' '+classToAdd+' ') == -1) {\n    element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n  }\n};\n\n/**\n * Remove a CSS class name from an element\n * @param {Element} element    Element to remove from class name\n * @param {String} classToAdd Classname to remove\n * @private\n */\nvjs.removeClass = function(element, classToRemove){\n  var classNames, i;\n\n  if (element.className.indexOf(classToRemove) == -1) { return; }\n\n  classNames = element.className.split(' ');\n\n  // no arr.indexOf in ie8, and we don't want to add a big shim\n  for (i = classNames.length - 1; i >= 0; i--) {\n    if (classNames[i] === classToRemove) {\n      classNames.splice(i,1);\n    }\n  }\n\n  element.className = classNames.join(' ');\n};\n\n/**\n * Element for testing browser HTML5 video capabilities\n * @type {Element}\n * @constant\n * @private\n */\nvjs.TEST_VID = vjs.createEl('video');\n\n/**\n * Useragent for browser testing.\n * @type {String}\n * @constant\n * @private\n */\nvjs.USER_AGENT = navigator.userAgent;\n\n/**\n * Device is an iPhone\n * @type {Boolean}\n * @constant\n * @private\n */\nvjs.IS_IPHONE = (/iPhone/i).test(vjs.USER_AGENT);\nvjs.IS_IPAD = (/iPad/i).test(vjs.USER_AGENT);\nvjs.IS_IPOD = (/iPod/i).test(vjs.USER_AGENT);\nvjs.IS_IOS = vjs.IS_IPHONE || vjs.IS_IPAD || vjs.IS_IPOD;\n\nvjs.IOS_VERSION = (function(){\n  var match = vjs.USER_AGENT.match(/OS (\\d+)_/i);\n  if (match && match[1]) { return match[1]; }\n})();\n\nvjs.IS_ANDROID = (/Android/i).test(vjs.USER_AGENT);\nvjs.ANDROID_VERSION = (function() {\n  // This matches Android Major.Minor.Patch versions\n  // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n  var match = vjs.USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n    major,\n    minor;\n\n  if (!match) {\n    return null;\n  }\n\n  major = match[1] && parseFloat(match[1]);\n  minor = match[2] && parseFloat(match[2]);\n\n  if (major && minor) {\n    return parseFloat(match[1] + '.' + match[2]);\n  } else if (major) {\n    return major;\n  } else {\n    return null;\n  }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nvjs.IS_OLD_ANDROID = vjs.IS_ANDROID && (/webkit/i).test(vjs.USER_AGENT) && vjs.ANDROID_VERSION < 2.3;\n\nvjs.IS_FIREFOX = (/Firefox/i).test(vjs.USER_AGENT);\nvjs.IS_CHROME = (/Chrome/i).test(vjs.USER_AGENT);\n\nvjs.TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributs are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n * @param  {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n */\nvjs.getAttributeValues = function(tag){\n  var obj, knownBooleans, attrs, attrName, attrVal;\n\n  obj = {};\n\n  // known boolean attributes\n  // we can check for matching boolean properties, but older browsers\n  // won't know about HTML5 boolean attributes that we still read from\n  knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n  if (tag && tag.attributes && tag.attributes.length > 0) {\n    attrs = tag.attributes;\n\n    for (var i = attrs.length - 1; i >= 0; i--) {\n      attrName = attrs[i].name;\n      attrVal = attrs[i].value;\n\n      // check for known booleans\n      // the matching element property will return a value for typeof\n      if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n        // the value of an included boolean attribute is typically an empty\n        // string ('') which would equal false if we just check for a false value.\n        // we also don't want support bad code like autoplay='false'\n        attrVal = (attrVal !== null) ? true : false;\n      }\n\n      obj[attrName] = attrVal;\n    }\n  }\n\n  return obj;\n};\n\n/**\n * Get the computed style value for an element\n * From http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/\n * @param  {Element} el        Element to get style value for\n * @param  {String} strCssRule Style name\n * @return {String}            Style value\n * @private\n */\nvjs.getComputedDimension = function(el, strCssRule){\n  var strValue = '';\n  if(document.defaultView && document.defaultView.getComputedStyle){\n    strValue = document.defaultView.getComputedStyle(el, '').getPropertyValue(strCssRule);\n\n  } else if(el.currentStyle){\n    // IE8 Width/Height support\n    strValue = el['client'+strCssRule.substr(0,1).toUpperCase() + strCssRule.substr(1)] + 'px';\n  }\n  return strValue;\n};\n\n/**\n * Insert an element as the first child node of another\n * @param  {Element} child   Element to insert\n * @param  {[type]} parent Element to insert child into\n * @private\n */\nvjs.insertFirst = function(child, parent){\n  if (parent.firstChild) {\n    parent.insertBefore(child, parent.firstChild);\n  } else {\n    parent.appendChild(child);\n  }\n};\n\n/**\n * Object to hold browser support information\n * @type {Object}\n * @private\n */\nvjs.support = {};\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n * @param  {String} id  Element ID\n * @return {Element}    Element with supplied ID\n * @private\n */\nvjs.el = function(id){\n  if (id.indexOf('#') === 0) {\n    id = id.slice(1);\n  }\n\n  return document.getElementById(id);\n};\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n * @param  {Number} seconds Number of seconds to be turned into a string\n * @param  {Number} guide   Number (in seconds) to model the string after\n * @return {String}         Time formatted as H:MM:SS or M:SS\n * @private\n */\nvjs.formatTime = function(seconds, guide) {\n  // Default to using seconds as guide\n  guide = guide || seconds;\n  var s = Math.floor(seconds % 60),\n      m = Math.floor(seconds / 60 % 60),\n      h = Math.floor(seconds / 3600),\n      gm = Math.floor(guide / 60 % 60),\n      gh = Math.floor(guide / 3600);\n\n  // handle invalid times\n  if (isNaN(seconds) || seconds === Infinity) {\n    // '-' is false for all relational operators (e.g. <, >=) so this setting\n    // will add the minimum number of fields specified by the guide\n    h = m = s = '-';\n  }\n\n  // Check if we need to show hours\n  h = (h > 0 || gh > 0) ? h + ':' : '';\n\n  // If hours are showing, we may need to add a leading zero.\n  // Always show at least one digit of minutes.\n  m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n  // Check if leading zero is need for seconds\n  s = (s < 10) ? '0' + s : s;\n\n  return h + m + s;\n};\n\n// Attempt to block the ability to select text while dragging controls\nvjs.blockTextSelection = function(){\n  document.body.focus();\n  document.onselectstart = function () { return false; };\n};\n// Turn off text selection blocking\nvjs.unblockTextSelection = function(){ document.onselectstart = function () { return true; }; };\n\n/**\n * Trim whitespace from the ends of a string.\n * @param  {String} string String to trim\n * @return {String}        Trimmed string\n * @private\n */\nvjs.trim = function(str){\n  return (str+'').replace(/^\\s+|\\s+$/g, '');\n};\n\n/**\n * Should round off a number to a decimal place\n * @param  {Number} num Number to round\n * @param  {Number} dec Number of decimal places to round to\n * @return {Number}     Rounded number\n * @private\n */\nvjs.round = function(num, dec) {\n  if (!dec) { dec = 0; }\n  return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);\n};\n\n/**\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n * @param  {Number} start Start time in seconds\n * @param  {Number} end   End time in seconds\n * @return {Object}       Fake TimeRange object\n * @private\n */\nvjs.createTimeRange = function(start, end){\n  return {\n    length: 1,\n    start: function() { return start; },\n    end: function() { return end; }\n  };\n};\n\n/**\n * Simple http request for retrieving external files (e.g. text tracks)\n * @param  {String} url           URL of resource\n * @param  {Function=} onSuccess  Success callback\n * @param  {Function=} onError    Error callback\n * @private\n */\nvjs.get = function(url, onSuccess, onError){\n  var local, request;\n\n  if (typeof XMLHttpRequest === 'undefined') {\n    window.XMLHttpRequest = function () {\n      try { return new window.ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (e) {}\n      try { return new window.ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (f) {}\n      try { return new window.ActiveXObject('Msxml2.XMLHTTP'); } catch (g) {}\n      throw new Error('This browser does not support XMLHttpRequest.');\n    };\n  }\n\n  request = new XMLHttpRequest();\n  try {\n    request.open('GET', url);\n  } catch(e) {\n    onError(e);\n  }\n\n  local = (url.indexOf('file:') === 0 || (window.location.href.indexOf('file:') === 0 && url.indexOf('http') === -1));\n\n  request.onreadystatechange = function() {\n    if (request.readyState === 4) {\n      if (request.status === 200 || local && request.status === 0) {\n        onSuccess(request.responseText);\n      } else {\n        if (onError) {\n          onError();\n        }\n      }\n    }\n  };\n\n  try {\n    request.send();\n  } catch(e) {\n    if (onError) {\n      onError(e);\n    }\n  }\n};\n\n/**\n * Add to local storage (may removeable)\n * @private\n */\nvjs.setLocalStorage = function(key, value){\n  try {\n    // IE was throwing errors referencing the var anywhere without this\n    var localStorage = window.localStorage || false;\n    if (!localStorage) { return; }\n    localStorage[key] = value;\n  } catch(e) {\n    if (e.code == 22 || e.code == 1014) { // Webkit == 22 / Firefox == 1014\n      vjs.log('LocalStorage Full (VideoJS)', e);\n    } else {\n      if (e.code == 18) {\n        vjs.log('LocalStorage not allowed (VideoJS)', e);\n      } else {\n        vjs.log('LocalStorage Error (VideoJS)', e);\n      }\n    }\n  }\n};\n\n/**\n * Get abosolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n * @param  {String} url URL to make absolute\n * @return {String}     Absolute URL\n * @private\n */\nvjs.getAbsoluteURL = function(url){\n\n  // Check if absolute URL\n  if (!url.match(/^https?:\\/\\//)) {\n    // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n    url = vjs.createEl('div', {\n      innerHTML: '<a href=\"'+url+'\">x</a>'\n    }).firstChild.href;\n  }\n\n  return url;\n};\n\n// usage: log('inside coolFunc',this,arguments);\n// http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/\nvjs.log = function(){\n  vjs.log.history = vjs.log.history || [];   // store logs to an array for reference\n  vjs.log.history.push(arguments);\n  if(window.console){\n    window.console.log(Array.prototype.slice.call(arguments));\n  }\n};\n\n// Offset Left\n// getBoundingClientRect technique from John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\nvjs.findPosition = function(el) {\n    var box, docEl, body, clientLeft, scrollLeft, left, clientTop, scrollTop, top;\n\n    if (el.getBoundingClientRect && el.parentNode) {\n      box = el.getBoundingClientRect();\n    }\n\n    if (!box) {\n      return {\n        left: 0,\n        top: 0\n      };\n    }\n\n    docEl = document.documentElement;\n    body = document.body;\n\n    clientLeft = docEl.clientLeft || body.clientLeft || 0;\n    scrollLeft = window.pageXOffset || body.scrollLeft;\n    left = box.left + scrollLeft - clientLeft;\n\n    clientTop = docEl.clientTop || body.clientTop || 0;\n    scrollTop = window.pageYOffset || body.scrollTop;\n    top = box.top + scrollTop - clientTop;\n\n    return {\n      left: left,\n      top: top\n    };\n};\n/**\n * @fileoverview Player Component - Base class for all UI objects\n *\n */\n\n/**\n * Base UI Component class\n *\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n *\n *     // adding a button to the player\n *     var button = player.addChild('button');\n *     button.el(); // -> button element\n *\n *     <div class=\"video-js\">\n *       <div class=\"vjs-button\">Button</div>\n *     </div>\n *\n * Components are also event emitters.\n *\n *     button.on('click', function(){\n *       console.log('Button Clicked!');\n *     });\n *\n *     button.trigger('customevent');\n *\n * @param {Object} player  Main Player\n * @param {Object=} options\n * @class\n * @constructor\n * @extends vjs.CoreObject\n */\nvjs.Component = vjs.CoreObject.extend({\n  /**\n   * the constructor funciton for the class\n   *\n   * @constructor\n   */\n  init: function(player, options, ready){\n    this.player_ = player;\n\n    // Make a copy of prototype.options_ to protect against overriding global defaults\n    this.options_ = vjs.obj.copy(this.options_);\n\n    // Updated options with supplied options\n    options = this.options(options);\n\n    // Get ID from options, element, or create using player ID and unique ID\n    this.id_ = options['id'] || ((options['el'] && options['el']['id']) ? options['el']['id'] : player.id() + '_component_' + vjs.guid++ );\n\n    this.name_ = options['name'] || null;\n\n    // Create element if one wasn't provided in options\n    this.el_ = options['el'] || this.createEl();\n\n    this.children_ = [];\n    this.childIndex_ = {};\n    this.childNameIndex_ = {};\n\n    // Add any child components in options\n    this.initChildren();\n\n    this.ready(ready);\n    // Don't want to trigger ready here or it will before init is actually\n    // finished for all children that run this constructor\n  }\n});\n\n/**\n * Dispose of the component and all child components\n */\nvjs.Component.prototype.dispose = function(){\n  this.trigger('dispose');\n\n  // Dispose all children.\n  if (this.children_) {\n    for (var i = this.children_.length - 1; i >= 0; i--) {\n      if (this.children_[i].dispose) {\n        this.children_[i].dispose();\n      }\n    }\n  }\n\n  // Delete child references\n  this.children_ = null;\n  this.childIndex_ = null;\n  this.childNameIndex_ = null;\n\n  // Remove all event listeners.\n  this.off();\n\n  // Remove element from DOM\n  if (this.el_.parentNode) {\n    this.el_.parentNode.removeChild(this.el_);\n  }\n\n  vjs.removeData(this.el_);\n  this.el_ = null;\n};\n\n/**\n * Reference to main player instance\n *\n * @type {vjs.Player}\n * @private\n */\nvjs.Component.prototype.player_ = true;\n\n/**\n * Return the component's player\n *\n * @return {vjs.Player}\n */\nvjs.Component.prototype.player = function(){\n  return this.player_;\n};\n\n/**\n * The component's options object\n *\n * @type {Object}\n * @private\n */\nvjs.Component.prototype.options_;\n\n/**\n * Deep merge of options objects\n *\n * Whenever a property is an object on both options objects\n * the two properties will be merged using vjs.obj.deepMerge.\n *\n * This is used for merging options for child components. We\n * want it to be easy to override individual options on a child\n * component without having to rewrite all the other default options.\n *\n *     Parent.prototype.options_ = {\n *       children: {\n *         'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n *         'childTwo': {},\n *         'childThree': {}\n *       }\n *     }\n *     newOptions = {\n *       children: {\n *         'childOne': { 'foo': 'baz', 'abc': '123' }\n *         'childTwo': null,\n *         'childFour': {}\n *       }\n *     }\n *\n *     this.options(newOptions);\n *\n * RESULT\n *\n *     {\n *       children: {\n *         'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n *         'childTwo': null, // Disabled. Won't be initialized.\n *         'childThree': {},\n *         'childFour': {}\n *       }\n *     }\n *\n * @param  {Object} obj Object whose values will be overwritten\n * @return {Object}     NEW merged object. Does not return obj1.\n */\nvjs.Component.prototype.options = function(obj){\n  if (obj === undefined) return this.options_;\n\n  return this.options_ = vjs.obj.deepMerge(this.options_, obj);\n};\n\n/**\n * The DOM element for the component\n *\n * @type {Element}\n * @private\n */\nvjs.Component.prototype.el_;\n\n/**\n * Create the component's DOM element\n *\n * @param  {String=} tagName  Element's node type. e.g. 'div'\n * @param  {Object=} attributes An object of element attributes that should be set on the element\n * @return {Element}\n */\nvjs.Component.prototype.createEl = function(tagName, attributes){\n  return vjs.createEl(tagName, attributes);\n};\n\n/**\n * Get the component's DOM element\n *\n *     var domEl = myComponent.el();\n *\n * @return {Element}\n */\nvjs.Component.prototype.el = function(){\n  return this.el_;\n};\n\n/**\n * An optional element where, if defined, children will be inserted instead of\n * directly in `el_`\n *\n * @type {Element}\n * @private\n */\nvjs.Component.prototype.contentEl_;\n\n/**\n * Return the component's DOM element for embedding content.\n * Will either be el_ or a new element defined in createEl.\n *\n * @return {Element}\n */\nvjs.Component.prototype.contentEl = function(){\n  return this.contentEl_ || this.el_;\n};\n\n/**\n * The ID for the component\n *\n * @type {String}\n * @private\n */\nvjs.Component.prototype.id_;\n\n/**\n * Get the component's ID\n *\n *     var id = myComponent.id();\n *\n * @return {String}\n */\nvjs.Component.prototype.id = function(){\n  return this.id_;\n};\n\n/**\n * The name for the component. Often used to reference the component.\n *\n * @type {String}\n * @private\n */\nvjs.Component.prototype.name_;\n\n/**\n * Get the component's name. The name is often used to reference the component.\n *\n *     var name = myComponent.name();\n *\n * @return {String}\n */\nvjs.Component.prototype.name = function(){\n  return this.name_;\n};\n\n/**\n * Array of child components\n *\n * @type {Array}\n * @private\n */\nvjs.Component.prototype.children_;\n\n/**\n * Get an array of all child components\n *\n *     var kids = myComponent.children();\n *\n * @return {Array} The children\n */\nvjs.Component.prototype.children = function(){\n  return this.children_;\n};\n\n/**\n * Object of child components by ID\n *\n * @type {Object}\n * @private\n */\nvjs.Component.prototype.childIndex_;\n\n/**\n * Returns a child component with the provided ID\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.getChildById = function(id){\n  return this.childIndex_[id];\n};\n\n/**\n * Object of child components by name\n *\n * @type {Object}\n * @private\n */\nvjs.Component.prototype.childNameIndex_;\n\n/**\n * Returns a child component with the provided ID\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.getChild = function(name){\n  return this.childNameIndex_[name];\n};\n\n/**\n * Adds a child component inside this component\n *\n *     myComponent.el();\n *     // -> <div class='my-component'></div>\n *     myComonent.children();\n *     // [empty array]\n *\n *     var myButton = myComponent.addChild('MyButton');\n *     // -> <div class='my-component'><div class=\"my-button\">myButton<div></div>\n *     // -> myButton === myComonent.children()[0];\n *\n * Pass in options for child constructors and options for children of the child\n *\n *    var myButton = myComponent.addChild('MyButton', {\n *      text: 'Press Me',\n *      children: {\n *        buttonChildExample: {\n *          buttonChildOption: true\n *        }\n *      }\n *    });\n *\n * @param {String|vjs.Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {vjs.Component} The child component (created by this process if a string was used)\n * @suppress {accessControls|checkRegExp|checkTypes|checkVars|const|constantProperty|deprecated|duplicate|es5Strict|fileoverviewTags|globalThis|invalidCasts|missingProperties|nonStandardJsDocs|strictModuleDepCheck|undefinedNames|undefinedVars|unknownDefines|uselessCode|visibility}\n */\nvjs.Component.prototype.addChild = function(child, options){\n  var component, componentClass, componentName, componentId;\n\n  // If string, create new component with options\n  if (typeof child === 'string') {\n\n    componentName = child;\n\n    // Make sure options is at least an empty object to protect against errors\n    options = options || {};\n\n    // Assume name of set is a lowercased name of the UI Class (PlayButton, etc.)\n    componentClass = options['componentClass'] || vjs.capitalize(componentName);\n\n    // Set name through options\n    options['name'] = componentName;\n\n    // Create a new object & element for this controls set\n    // If there's no .player_, this is a player\n    // Closure Compiler throws an 'incomplete alias' warning if we use the vjs variable directly.\n    // Every class should be exported, so this should never be a problem here.\n    component = new window['videojs'][componentClass](this.player_ || this, options);\n\n  // child is a component instance\n  } else {\n    component = child;\n  }\n\n  this.children_.push(component);\n\n  if (typeof component.id === 'function') {\n    this.childIndex_[component.id()] = component;\n  }\n\n  // If a name wasn't used to create the component, check if we can use the\n  // name function of the component\n  componentName = componentName || (component.name && component.name());\n\n  if (componentName) {\n    this.childNameIndex_[componentName] = component;\n  }\n\n  // Add the UI object's element to the container div (box)\n  // Having an element is not required\n  if (typeof component['el'] === 'function' && component['el']()) {\n    this.contentEl().appendChild(component['el']());\n  }\n\n  // Return so it can stored on parent object if desired.\n  return component;\n};\n\n/**\n * Remove a child component from this component's list of children, and the\n * child component's element from this component's element\n *\n * @param  {vjs.Component} component Component to remove\n */\nvjs.Component.prototype.removeChild = function(component){\n  if (typeof component === 'string') {\n    component = this.getChild(component);\n  }\n\n  if (!component || !this.children_) return;\n\n  var childFound = false;\n  for (var i = this.children_.length - 1; i >= 0; i--) {\n    if (this.children_[i] === component) {\n      childFound = true;\n      this.children_.splice(i,1);\n      break;\n    }\n  }\n\n  if (!childFound) return;\n\n  this.childIndex_[component.id] = null;\n  this.childNameIndex_[component.name] = null;\n\n  var compEl = component.el();\n  if (compEl && compEl.parentNode === this.contentEl()) {\n    this.contentEl().removeChild(component.el());\n  }\n};\n\n/**\n * Add and initialize default child components from options\n *\n *     // when an instance of MyComponent is created, all children in options\n *     // will be added to the instance by their name strings and options\n *     MyComponent.prototype.options_.children = {\n *       myChildComponent: {\n *         myChildOption: true\n *       }\n *     }\n */\nvjs.Component.prototype.initChildren = function(){\n  var options = this.options_;\n\n  if (options && options['children']) {\n    var self = this;\n\n    // Loop through components and add them to the player\n    vjs.obj.each(options['children'], function(name, opts){\n      // Allow for disabling default components\n      // e.g. vjs.options['children']['posterImage'] = false\n      if (opts === false) return;\n\n      // Allow waiting to add components until a specific event is called\n      var tempAdd = function(){\n        // Set property name on player. Could cause conflicts with other prop names, but it's worth making refs easy.\n        self[name] = self.addChild(name, opts);\n      };\n\n      if (opts['loadEvent']) {\n        // this.one(opts.loadEvent, tempAdd)\n      } else {\n        tempAdd();\n      }\n    });\n  }\n};\n\n/**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n */\nvjs.Component.prototype.buildCSSClass = function(){\n    // Child classes can include a function that does:\n    // return 'CLASS NAME' + this._super();\n    return '';\n};\n\n/* Events\n============================================================================= */\n\n/**\n * Add an event listener to this component's element\n *\n *     var myFunc = function(){\n *       var myPlayer = this;\n *       // Do something when the event is fired\n *     };\n *\n *     myPlayer.on(\"eventName\", myFunc);\n *\n * The context will be the component.\n *\n * @param  {String}   type The event type e.g. 'click'\n * @param  {Function} fn   The event listener\n * @return {vjs.Component} self\n */\nvjs.Component.prototype.on = function(type, fn){\n  vjs.on(this.el_, type, vjs.bind(this, fn));\n  return this;\n};\n\n/**\n * Remove an event listener from the component's element\n *\n *     myComponent.off(\"eventName\", myFunc);\n *\n * @param  {String=}   type Event type. Without type it will remove all listeners.\n * @param  {Function=} fn   Event listener. Without fn it will remove all listeners for a type.\n * @return {vjs.Component}\n */\nvjs.Component.prototype.off = function(type, fn){\n  vjs.off(this.el_, type, fn);\n  return this;\n};\n\n/**\n * Add an event listener to be triggered only once and then removed\n *\n * @param  {String}   type Event type\n * @param  {Function} fn   Event listener\n * @return {vjs.Component}\n */\nvjs.Component.prototype.one = function(type, fn) {\n  vjs.one(this.el_, type, vjs.bind(this, fn));\n  return this;\n};\n\n/**\n * Trigger an event on an element\n *\n *     myComponent.trigger('eventName');\n *\n * @param  {String}       type  The event type to trigger, e.g. 'click'\n * @param  {Event|Object} event The event object to be passed to the listener\n * @return {vjs.Component}      self\n */\nvjs.Component.prototype.trigger = function(type, event){\n  vjs.trigger(this.el_, type, event);\n  return this;\n};\n\n/* Ready\n================================================================================ */\n/**\n * Is the component loaded\n * This can mean different things depending on the component.\n *\n * @private\n * @type {Boolean}\n */\nvjs.Component.prototype.isReady_;\n\n/**\n * Trigger ready as soon as initialization is finished\n *\n * Allows for delaying ready. Override on a sub class prototype.\n * If you set this.isReadyOnInitFinish_ it will affect all components.\n * Specially used when waiting for the Flash player to asynchrnously load.\n *\n * @type {Boolean}\n * @private\n */\nvjs.Component.prototype.isReadyOnInitFinish_ = true;\n\n/**\n * List of ready listeners\n *\n * @type {Array}\n * @private\n */\nvjs.Component.prototype.readyQueue_;\n\n/**\n * Bind a listener to the component's ready state\n *\n * Different from event listeners in that if the ready event has already happend\n * it will trigger the function immediately.\n *\n * @param  {Function} fn Ready listener\n * @return {vjs.Component}\n */\nvjs.Component.prototype.ready = function(fn){\n  if (fn) {\n    if (this.isReady_) {\n      fn.call(this);\n    } else {\n      if (this.readyQueue_ === undefined) {\n        this.readyQueue_ = [];\n      }\n      this.readyQueue_.push(fn);\n    }\n  }\n  return this;\n};\n\n/**\n * Trigger the ready listeners\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.triggerReady = function(){\n  this.isReady_ = true;\n\n  var readyQueue = this.readyQueue_;\n\n  if (readyQueue && readyQueue.length > 0) {\n\n    for (var i = 0, j = readyQueue.length; i < j; i++) {\n      readyQueue[i].call(this);\n    }\n\n    // Reset Ready Queue\n    this.readyQueue_ = [];\n\n    // Allow for using event listeners also, in case you want to do something everytime a source is ready.\n    this.trigger('ready');\n  }\n};\n\n/* Display\n============================================================================= */\n\n/**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {vjs.Component}\n */\nvjs.Component.prototype.addClass = function(classToAdd){\n  vjs.addClass(this.el_, classToAdd);\n  return this;\n};\n\n/**\n * Remove a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {vjs.Component}\n */\nvjs.Component.prototype.removeClass = function(classToRemove){\n  vjs.removeClass(this.el_, classToRemove);\n  return this;\n};\n\n/**\n * Show the component element if hidden\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.show = function(){\n  this.el_.style.display = 'block';\n  return this;\n};\n\n/**\n * Hide the component element if hidden\n *\n * @return {vjs.Component}\n */\nvjs.Component.prototype.hide = function(){\n  this.el_.style.display = 'none';\n  return this;\n};\n\n/**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {vjs.Component}\n * @private\n */\nvjs.Component.prototype.lockShowing = function(){\n  this.addClass('vjs-lock-showing');\n  return this;\n};\n\n/**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {vjs.Component}\n * @private\n */\nvjs.Component.prototype.unlockShowing = function(){\n  this.removeClass('vjs-lock-showing');\n  return this;\n};\n\n/**\n * Disable component by making it unshowable\n */\nvjs.Component.prototype.disable = function(){\n  this.hide();\n  this.show = function(){};\n};\n\n/**\n * Set or get the width of the component (CSS values)\n *\n * Video tag width/height only work in pixels. No percents.\n * But allowing limited percents use. e.g. width() will return number+%, not computed width\n *\n * @param  {Number|String=} num   Optional width number\n * @param  {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {vjs.Component} Returns 'this' if width was set\n * @return {Number|String} Returns the width if nothing was set\n */\nvjs.Component.prototype.width = function(num, skipListeners){\n  return this.dimension('width', num, skipListeners);\n};\n\n/**\n * Get or set the height of the component (CSS values)\n *\n * @param  {Number|String=} num     New component height\n * @param  {Boolean=} skipListeners Skip the resize event trigger\n * @return {vjs.Component} The component if the height was set\n * @return {Number|String} The height if it wasn't set\n */\nvjs.Component.prototype.height = function(num, skipListeners){\n  return this.dimension('height', num, skipListeners);\n};\n\n/**\n * Set both width and height at the same time\n *\n * @param  {Number|String} width\n * @param  {Number|String} height\n * @return {vjs.Component} The component\n */\nvjs.Component.prototype.dimensions = function(width, height){\n  // Skip resize listeners on width for optimization\n  return this.width(width, true).height(height);\n};\n\n/**\n * Get or set width or height\n *\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n *\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param  {String} widthOrHeight  'width' or 'height'\n * @param  {Number|String=} num     New dimension\n * @param  {Boolean=} skipListeners Skip resize event trigger\n * @return {vjs.Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n */\nvjs.Component.prototype.dimension = function(widthOrHeight, num, skipListeners){\n  if (num !== undefined) {\n\n    // Check if using css width/height (% or px) and adjust\n    if ((''+num).indexOf('%') !== -1 || (''+num).indexOf('px') !== -1) {\n      this.el_.style[widthOrHeight] = num;\n    } else if (num === 'auto') {\n      this.el_.style[widthOrHeight] = '';\n    } else {\n      this.el_.style[widthOrHeight] = num+'px';\n    }\n\n    // skipListeners allows us to avoid triggering the resize event when setting both width and height\n    if (!skipListeners) { this.trigger('resize'); }\n\n    // Return component\n    return this;\n  }\n\n  // Not setting a value, so getting it\n  // Make sure element exists\n  if (!this.el_) return 0;\n\n  // Get dimension value from style\n  var val = this.el_.style[widthOrHeight];\n  var pxIndex = val.indexOf('px');\n  if (pxIndex !== -1) {\n    // Return the pixel value with no 'px'\n    return parseInt(val.slice(0,pxIndex), 10);\n\n  // No px so using % or no style was set, so falling back to offsetWidth/height\n  // If component has display:none, offset will return 0\n  // TODO: handle display:none and no dimension style using px\n  } else {\n\n    return parseInt(this.el_['offset'+vjs.capitalize(widthOrHeight)], 10);\n\n    // ComputedStyle version.\n    // Only difference is if the element is hidden it will return\n    // the percent value (e.g. '100%'')\n    // instead of zero like offsetWidth returns.\n    // var val = vjs.getComputedStyleValue(this.el_, widthOrHeight);\n    // var pxIndex = val.indexOf('px');\n\n    // if (pxIndex !== -1) {\n    //   return val.slice(0, pxIndex);\n    // } else {\n    //   return val;\n    // }\n  }\n};\n\n/**\n * Fired when the width and/or height of the component changes\n * @event resize\n */\nvjs.Component.prototype.onResize;\n\n/**\n * Emit 'tap' events when touch events are supported\n *\n * This is used to support toggling the controls through a tap on the video.\n *\n * We're requireing them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n * @private\n */\nvjs.Component.prototype.emitTapEvents = function(){\n  var touchStart, touchTime, couldBeTap, noTap;\n\n  // Track the start time so we can determine how long the touch lasted\n  touchStart = 0;\n\n  this.on('touchstart', function(event) {\n    // Record start time so we can detect a tap vs. \"touch and hold\"\n    touchStart = new Date().getTime();\n    // Reset couldBeTap tracking\n    couldBeTap = true;\n  });\n\n  noTap = function(){\n    couldBeTap = false;\n  };\n  // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n  this.on('touchmove', noTap);\n  this.on('touchleave', noTap);\n  this.on('touchcancel', noTap);\n\n  // When the touch ends, measure how long it took and trigger the appropriate\n  // event\n  this.on('touchend', function() {\n    // Proceed only if the touchmove/leave/cancel event didn't happen\n    if (couldBeTap === true) {\n      // Measure how long the touch lasted\n      touchTime = new Date().getTime() - touchStart;\n      // The touch needs to be quick in order to consider it a tap\n      if (touchTime < 250) {\n        this.trigger('tap');\n        // It may be good to copy the touchend event object and change the\n        // type to tap, if the other event properties aren't exact after\n        // vjs.fixEvent runs (e.g. event.target)\n      }\n    }\n  });\n};\n/* Button - Base class for all buttons\n================================================================================ */\n/**\n * Base class for all buttons\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.Button = vjs.Component.extend({\n  /**\n   * @constructor\n   * @inheritDoc\n   */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    var touchstart = false;\n    this.on('touchstart', function(event) {\n      // Stop click and other mouse events from triggering also\n      event.preventDefault();\n      touchstart = true;\n    });\n    this.on('touchmove', function() {\n      touchstart = false;\n    });\n    var self = this;\n    this.on('touchend', function(event) {\n      if (touchstart) {\n        self.onClick(event);\n      }\n      event.preventDefault();\n    });\n\n    this.on('click', this.onClick);\n    this.on('focus', this.onFocus);\n    this.on('blur', this.onBlur);\n  }\n});\n\nvjs.Button.prototype.createEl = function(type, props){\n  // Add standard Aria and Tabindex info\n  props = vjs.obj.merge({\n    className: this.buildCSSClass(),\n    innerHTML: '<div class=\"vjs-control-content\"><span class=\"vjs-control-text\">' + (this.buttonText || 'Need Text') + '</span></div>',\n    role: 'button',\n    'aria-live': 'polite', // let the screen reader user know that the text of the button may change\n    tabIndex: 0\n  }, props);\n\n  return vjs.Component.prototype.createEl.call(this, type, props);\n};\n\nvjs.Button.prototype.buildCSSClass = function(){\n  // TODO: Change vjs-control to vjs-button?\n  return 'vjs-control ' + vjs.Component.prototype.buildCSSClass.call(this);\n};\n\n  // Click - Override with specific functionality for button\nvjs.Button.prototype.onClick = function(){};\n\n  // Focus - Add keyboard functionality to element\nvjs.Button.prototype.onFocus = function(){\n  vjs.on(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n\n  // KeyPress (document level) - Trigger click when keys are pressed\nvjs.Button.prototype.onKeyPress = function(event){\n  // Check for space bar (32) or enter (13) keys\n  if (event.which == 32 || event.which == 13) {\n    event.preventDefault();\n    this.onClick();\n  }\n};\n\n// Blur - Remove keyboard triggers\nvjs.Button.prototype.onBlur = function(){\n  vjs.off(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n/* Slider\n================================================================================ */\n/**\n * The base functionality for sliders like the volume bar and seek bar\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.Slider = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    // Set property names to bar and handle to match with the child Slider class is looking for\n    this.bar = this.getChild(this.options_['barName']);\n    this.handle = this.getChild(this.options_['handleName']);\n\n    player.on(this.playerEvent, vjs.bind(this, this.update));\n\n    this.on('mousedown', this.onMouseDown);\n    this.on('touchstart', this.onMouseDown);\n    this.on('focus', this.onFocus);\n    this.on('blur', this.onBlur);\n    this.on('click', this.onClick);\n\n    this.player_.on('controlsvisible', vjs.bind(this, this.update));\n\n    // This is actually to fix the volume handle position. http://twitter.com/#!/gerritvanaaken/status/159046254519787520\n    // this.player_.one('timeupdate', vjs.bind(this, this.update));\n\n    player.ready(vjs.bind(this, this.update));\n\n    this.boundEvents = {};\n  }\n});\n\nvjs.Slider.prototype.createEl = function(type, props) {\n  props = props || {};\n  // Add the slider element class to all sub classes\n  props.className = props.className + ' vjs-slider';\n  props = vjs.obj.merge({\n    role: 'slider',\n    'aria-valuenow': 0,\n    'aria-valuemin': 0,\n    'aria-valuemax': 100,\n    tabIndex: 0\n  }, props);\n\n  return vjs.Component.prototype.createEl.call(this, type, props);\n};\n\nvjs.Slider.prototype.onMouseDown = function(event){\n  event.preventDefault();\n  vjs.blockTextSelection();\n\n  this.boundEvents.move = vjs.bind(this, this.onMouseMove);\n  this.boundEvents.end = vjs.bind(this, this.onMouseUp);\n\n  vjs.on(document, 'mousemove', this.boundEvents.move);\n  vjs.on(document, 'mouseup', this.boundEvents.end);\n  vjs.on(document, 'touchmove', this.boundEvents.move);\n  vjs.on(document, 'touchend', this.boundEvents.end);\n\n  this.onMouseMove(event);\n};\n\nvjs.Slider.prototype.onMouseUp = function() {\n  vjs.unblockTextSelection();\n  vjs.off(document, 'mousemove', this.boundEvents.move, false);\n  vjs.off(document, 'mouseup', this.boundEvents.end, false);\n  vjs.off(document, 'touchmove', this.boundEvents.move, false);\n  vjs.off(document, 'touchend', this.boundEvents.end, false);\n\n  this.update();\n};\n\nvjs.Slider.prototype.update = function(){\n  // In VolumeBar init we have a setTimeout for update that pops and update to the end of the\n  // execution stack. The player is destroyed before then update will cause an error\n  if (!this.el_) return;\n\n  // If scrubbing, we could use a cached value to make the handle keep up with the user's mouse.\n  // On HTML5 browsers scrubbing is really smooth, but some flash players are slow, so we might want to utilize this later.\n  // var progress =  (this.player_.scrubbing) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration();\n\n  var barProgress,\n      progress = this.getPercent(),\n      handle = this.handle,\n      bar = this.bar;\n\n  // Protect against no duration and other division issues\n  if (isNaN(progress)) { progress = 0; }\n\n  barProgress = progress;\n\n  // If there is a handle, we need to account for the handle in our calculation for progress bar\n  // so that it doesn't fall short of or extend past the handle.\n  if (handle) {\n\n    var box = this.el_,\n        boxWidth = box.offsetWidth,\n\n        handleWidth = handle.el().offsetWidth,\n\n        // The width of the handle in percent of the containing box\n        // In IE, widths may not be ready yet causing NaN\n        handlePercent = (handleWidth) ? handleWidth / boxWidth : 0,\n\n        // Get the adjusted size of the box, considering that the handle's center never touches the left or right side.\n        // There is a margin of half the handle's width on both sides.\n        boxAdjustedPercent = 1 - handlePercent,\n\n        // Adjust the progress that we'll use to set widths to the new adjusted box width\n        adjustedProgress = progress * boxAdjustedPercent;\n\n    // The bar does reach the left side, so we need to account for this in the bar's width\n    barProgress = adjustedProgress + (handlePercent / 2);\n\n    // Move the handle from the left based on the adjected progress\n    handle.el().style.left = vjs.round(adjustedProgress * 100, 2) + '%';\n  }\n\n  // Set the new bar width\n  bar.el().style.width = vjs.round(barProgress * 100, 2) + '%';\n};\n\nvjs.Slider.prototype.calculateDistance = function(event){\n  var el, box, boxX, boxY, boxW, boxH, handle, pageX, pageY;\n\n  el = this.el_;\n  box = vjs.findPosition(el);\n  boxW = boxH = el.offsetWidth;\n  handle = this.handle;\n\n  if (this.options_.vertical) {\n    boxY = box.top;\n\n    if (event.changedTouches) {\n      pageY = event.changedTouches[0].pageY;\n    } else {\n      pageY = event.pageY;\n    }\n\n    if (handle) {\n      var handleH = handle.el().offsetHeight;\n      // Adjusted X and Width, so handle doesn't go outside the bar\n      boxY = boxY + (handleH / 2);\n      boxH = boxH - handleH;\n    }\n\n    // Percent that the click is through the adjusted area\n    return Math.max(0, Math.min(1, ((boxY - pageY) + boxH) / boxH));\n\n  } else {\n    boxX = box.left;\n\n    if (event.changedTouches) {\n      pageX = event.changedTouches[0].pageX;\n    } else {\n      pageX = event.pageX;\n    }\n\n    if (handle) {\n      var handleW = handle.el().offsetWidth;\n\n      // Adjusted X and Width, so handle doesn't go outside the bar\n      boxX = boxX + (handleW / 2);\n      boxW = boxW - handleW;\n    }\n\n    // Percent that the click is through the adjusted area\n    return Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n  }\n};\n\nvjs.Slider.prototype.onFocus = function(){\n  vjs.on(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n\nvjs.Slider.prototype.onKeyPress = function(event){\n  if (event.which == 37) { // Left Arrow\n    event.preventDefault();\n    this.stepBack();\n  } else if (event.which == 39) { // Right Arrow\n    event.preventDefault();\n    this.stepForward();\n  }\n};\n\nvjs.Slider.prototype.onBlur = function(){\n  vjs.off(document, 'keyup', vjs.bind(this, this.onKeyPress));\n};\n\n/**\n * Listener for click events on slider, used to prevent clicks\n *   from bubbling up to parent elements like button menus.\n * @param  {Object} event Event object\n */\nvjs.Slider.prototype.onClick = function(event){\n  event.stopImmediatePropagation();\n  event.preventDefault();\n};\n\n/**\n * SeekBar Behavior includes play progress bar, and seek handle\n * Needed so it can determine seek position based on handle position/size\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.SliderHandle = vjs.Component.extend();\n\n/**\n * Default value of the slider\n *\n * @type {Number}\n * @private\n */\nvjs.SliderHandle.prototype.defaultValue = 0;\n\n/** @inheritDoc */\nvjs.SliderHandle.prototype.createEl = function(type, props) {\n  props = props || {};\n  // Add the slider element class to all sub classes\n  props.className = props.className + ' vjs-slider-handle';\n  props = vjs.obj.merge({\n    innerHTML: '<span class=\"vjs-control-text\">'+this.defaultValue+'</span>'\n  }, props);\n\n  return vjs.Component.prototype.createEl.call(this, 'div', props);\n};\n/* Menu\n================================================================================ */\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.Menu = vjs.Component.extend();\n\n/**\n * Add a menu item to the menu\n * @param {Object|String} component Component or component type to add\n */\nvjs.Menu.prototype.addItem = function(component){\n  this.addChild(component);\n  component.on('click', vjs.bind(this, function(){\n    this.unlockShowing();\n  }));\n};\n\n/** @inheritDoc */\nvjs.Menu.prototype.createEl = function(){\n  var contentElType = this.options().contentElType || 'ul';\n  this.contentEl_ = vjs.createEl(contentElType, {\n    className: 'vjs-menu-content'\n  });\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    append: this.contentEl_,\n    className: 'vjs-menu'\n  });\n  el.appendChild(this.contentEl_);\n\n  // Prevent clicks from bubbling up. Needed for Menu Buttons,\n  // where a click on the parent is significant\n  vjs.on(el, 'click', function(event){\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  });\n\n  return el;\n};\n\n/**\n * The component for a menu item. `<li>`\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.MenuItem = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n    this.selected(options['selected']);\n  }\n});\n\n/** @inheritDoc */\nvjs.MenuItem.prototype.createEl = function(type, props){\n  return vjs.Button.prototype.createEl.call(this, 'li', vjs.obj.merge({\n    className: 'vjs-menu-item',\n    innerHTML: this.options_['label']\n  }, props));\n};\n\n/**\n * Handle a click on the menu item, and set it to selected\n */\nvjs.MenuItem.prototype.onClick = function(){\n  this.selected(true);\n};\n\n/**\n * Set this menu item as selected or not\n * @param  {Boolean} selected\n */\nvjs.MenuItem.prototype.selected = function(selected){\n  if (selected) {\n    this.addClass('vjs-selected');\n    this.el_.setAttribute('aria-selected',true);\n  } else {\n    this.removeClass('vjs-selected');\n    this.el_.setAttribute('aria-selected',false);\n  }\n};\n\n\n/**\n * A button class with a popup menu\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.MenuButton = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    this.menu = this.createMenu();\n\n    // Add list to element\n    this.addChild(this.menu);\n\n    // Automatically hide empty menu buttons\n    if (this.items && this.items.length === 0) {\n      this.hide();\n    }\n\n    this.on('keyup', this.onKeyPress);\n    this.el_.setAttribute('aria-haspopup', true);\n    this.el_.setAttribute('role', 'button');\n  }\n});\n\n/**\n * Track the state of the menu button\n * @type {Boolean}\n * @private\n */\nvjs.MenuButton.prototype.buttonPressed_ = false;\n\nvjs.MenuButton.prototype.createMenu = function(){\n  var menu = new vjs.Menu(this.player_);\n\n  // Add a title list item to the top\n  if (this.options().title) {\n    menu.el().appendChild(vjs.createEl('li', {\n      className: 'vjs-menu-title',\n      innerHTML: vjs.capitalize(this.kind_),\n      tabindex: -1\n    }));\n  }\n\n  this.items = this['createItems']();\n\n  if (this.items) {\n    // Add menu items to the menu\n    for (var i = 0; i < this.items.length; i++) {\n      menu.addItem(this.items[i]);\n    }\n  }\n\n  return menu;\n};\n\n/**\n * Create the list of menu items. Specific to each subclass.\n */\nvjs.MenuButton.prototype.createItems = function(){};\n\n/** @inheritDoc */\nvjs.MenuButton.prototype.buildCSSClass = function(){\n  return this.className + ' vjs-menu-button ' + vjs.Button.prototype.buildCSSClass.call(this);\n};\n\n// Focus - Add keyboard functionality to element\n// This function is not needed anymore. Instead, the keyboard functionality is handled by\n// treating the button as triggering a submenu. When the button is pressed, the submenu\n// appears. Pressing the button again makes the submenu disappear.\nvjs.MenuButton.prototype.onFocus = function(){};\n// Can't turn off list display that we turned on with focus, because list would go away.\nvjs.MenuButton.prototype.onBlur = function(){};\n\nvjs.MenuButton.prototype.onClick = function(){\n  // When you click the button it adds focus, which will show the menu indefinitely.\n  // So we'll remove focus when the mouse leaves the button.\n  // Focus is needed for tab navigation.\n  this.one('mouseout', vjs.bind(this, function(){\n    this.menu.unlockShowing();\n    this.el_.blur();\n  }));\n  if (this.buttonPressed_){\n    this.unpressButton();\n  } else {\n    this.pressButton();\n  }\n};\n\nvjs.MenuButton.prototype.onKeyPress = function(event){\n  event.preventDefault();\n\n  // Check for space bar (32) or enter (13) keys\n  if (event.which == 32 || event.which == 13) {\n    if (this.buttonPressed_){\n      this.unpressButton();\n    } else {\n      this.pressButton();\n    }\n  // Check for escape (27) key\n  } else if (event.which == 27){\n    if (this.buttonPressed_){\n      this.unpressButton();\n    }\n  }\n};\n\nvjs.MenuButton.prototype.pressButton = function(){\n  this.buttonPressed_ = true;\n  this.menu.lockShowing();\n  this.el_.setAttribute('aria-pressed', true);\n  if (this.items && this.items.length > 0) {\n    this.items[0].el().focus(); // set the focus to the title of the submenu\n  }\n};\n\nvjs.MenuButton.prototype.unpressButton = function(){\n  this.buttonPressed_ = false;\n  this.menu.unlockShowing();\n  this.el_.setAttribute('aria-pressed', false);\n};\n\n/**\n * An instance of the `vjs.Player` class is created when any of the Video.js setup methods are used to initialize a video.\n *\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n *\n * In the follwing example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n *\n * ```html\n * <video id=\"example_video_1\" data-setup='{}' controls>\n *   <source src=\"my-source.mp4\" type=\"video/mp4\">\n * </video>\n * ```\n *\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @class\n * @extends vjs.Component\n */\nvjs.Player = vjs.Component.extend({\n\n  /**\n   * player's constructor function\n   *\n   * @constructs\n   * @method init\n   * @param {Element} tag        The original video tag used for configuring options\n   * @param {Object=} options    Player options\n   * @param {Function=} ready    Ready callback function\n   */\n  init: function(tag, options, ready){\n    this.tag = tag; // Store the original tag used to set options\n\n    // Set Options\n    // The options argument overrides options set in the video tag\n    // which overrides globally set options.\n    // This latter part coincides with the load order\n    // (tag must exist before Player)\n    options = vjs.obj.merge(this.getTagSettings(tag), options);\n\n    // Cache for video property values.\n    this.cache_ = {};\n\n    // Set poster\n    this.poster_ = options['poster'];\n    // Set controls\n    this.controls_ = options['controls'];\n    // Original tag settings stored in options\n    // now remove immediately so native controls don't flash.\n    // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n    tag.controls = false;\n\n    // Run base component initializing with new options.\n    // Builds the element through createEl()\n    // Inits and embeds any child components in opts\n    vjs.Component.call(this, this, options, ready);\n\n    // Update controls className. Can't do this when the controls are initially\n    // set because the element doesn't exist yet.\n    if (this.controls()) {\n      this.addClass('vjs-controls-enabled');\n    } else {\n      this.addClass('vjs-controls-disabled');\n    }\n\n    // TODO: Make this smarter. Toggle user state between touching/mousing\n    // using events, since devices can have both touch and mouse events.\n    // if (vjs.TOUCH_ENABLED) {\n    //   this.addClass('vjs-touch-enabled');\n    // }\n\n    // Firstplay event implimentation. Not sold on the event yet.\n    // Could probably just check currentTime==0?\n    this.one('play', function(e){\n      var fpEvent = { type: 'firstplay', target: this.el_ };\n      // Using vjs.trigger so we can check if default was prevented\n      var keepGoing = vjs.trigger(this.el_, fpEvent);\n\n      if (!keepGoing) {\n        e.preventDefault();\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n      }\n    });\n\n    this.on('ended', this.onEnded);\n    this.on('play', this.onPlay);\n    this.on('firstplay', this.onFirstPlay);\n    this.on('pause', this.onPause);\n    this.on('progress', this.onProgress);\n    this.on('durationchange', this.onDurationChange);\n    this.on('error', this.onError);\n    this.on('fullscreenchange', this.onFullscreenChange);\n\n    // Make player easily findable by ID\n    vjs.players[this.id_] = this;\n\n    if (options['plugins']) {\n      vjs.obj.each(options['plugins'], function(key, val){\n        this[key](val);\n      }, this);\n    }\n\n    this.listenForUserActivity();\n  }\n});\n\n/**\n * Player instance options, surfaced using vjs.options\n * vjs.options = vjs.Player.prototype.options_\n * Make changes in vjs.options, not here.\n * All options should use string keys so they avoid\n * renaming by closure compiler\n * @type {Object}\n * @private\n */\nvjs.Player.prototype.options_ = vjs.options;\n\n/**\n * Destroys the video player and does any necessary cleanup\n *\n *     myPlayer.dispose();\n *\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n */\nvjs.Player.prototype.dispose = function(){\n  this.trigger('dispose');\n  // prevent dispose from being called twice\n  this.off('dispose');\n\n  // Kill reference to this player\n  vjs.players[this.id_] = null;\n  if (this.tag && this.tag['player']) { this.tag['player'] = null; }\n  if (this.el_ && this.el_['player']) { this.el_['player'] = null; }\n\n  // Ensure that tracking progress and time progress will stop and plater deleted\n  this.stopTrackingProgress();\n  this.stopTrackingCurrentTime();\n\n  if (this.tech) { this.tech.dispose(); }\n\n  // Component dispose\n  vjs.Component.prototype.dispose.call(this);\n};\n\nvjs.Player.prototype.getTagSettings = function(tag){\n  var options = {\n    'sources': [],\n    'tracks': []\n  };\n\n  vjs.obj.merge(options, vjs.getAttributeValues(tag));\n\n  // Get tag children settings\n  if (tag.hasChildNodes()) {\n    var children, child, childName, i, j;\n\n    children = tag.childNodes;\n\n    for (i=0,j=children.length; i<j; i++) {\n      child = children[i];\n      // Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/\n      childName = child.nodeName.toLowerCase();\n      if (childName === 'source') {\n        options['sources'].push(vjs.getAttributeValues(child));\n      } else if (childName === 'track') {\n        options['tracks'].push(vjs.getAttributeValues(child));\n      }\n    }\n  }\n\n  return options;\n};\n\nvjs.Player.prototype.createEl = function(){\n  var el = this.el_ = vjs.Component.prototype.createEl.call(this, 'div');\n  var tag = this.tag;\n\n  // Remove width/height attrs from tag so CSS can make it 100% width/height\n  tag.removeAttribute('width');\n  tag.removeAttribute('height');\n  // Empty video tag tracks so the built-in player doesn't use them also.\n  // This may not be fast enough to stop HTML5 browsers from reading the tags\n  // so we'll need to turn off any default tracks if we're manually doing\n  // captions and subtitles. videoElement.textTracks\n  if (tag.hasChildNodes()) {\n    var nodes, nodesLength, i, node, nodeName, removeNodes;\n\n    nodes = tag.childNodes;\n    nodesLength = nodes.length;\n    removeNodes = [];\n\n    while (nodesLength--) {\n      node = nodes[nodesLength];\n      nodeName = node.nodeName.toLowerCase();\n      if (nodeName === 'track') {\n        removeNodes.push(node);\n      }\n    }\n\n    for (i=0; i<removeNodes.length; i++) {\n      tag.removeChild(removeNodes[i]);\n    }\n  }\n\n  // Make sure tag ID exists\n  tag.id = tag.id || 'vjs_video_' + vjs.guid++;\n\n  // Give video tag ID and class to player div\n  // ID will now reference player box, not the video tag\n  el.id = tag.id;\n  el.className = tag.className;\n\n  // Update tag id/class for use as HTML5 playback tech\n  // Might think we should do this after embedding in container so .vjs-tech class\n  // doesn't flash 100% width/height, but class only applies with .video-js parent\n  tag.id += '_html5_api';\n  tag.className = 'vjs-tech';\n\n  // Make player findable on elements\n  tag['player'] = el['player'] = this;\n  // Default state of video is paused\n  this.addClass('vjs-paused');\n\n  // Make box use width/height of tag, or rely on default implementation\n  // Enforce with CSS since width/height attrs don't work on divs\n  this.width(this.options_['width'], true); // (true) Skip resize listener on load\n  this.height(this.options_['height'], true);\n\n  // Wrap video tag in div (el/box) container\n  if (tag.parentNode) {\n    tag.parentNode.insertBefore(el, tag);\n  }\n  vjs.insertFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n\n  return el;\n};\n\n// /* Media Technology (tech)\n// ================================================================================ */\n// Load/Create an instance of playback technlogy including element and API methods\n// And append playback element in player div.\nvjs.Player.prototype.loadTech = function(techName, source){\n\n  // Pause and remove current playback technology\n  if (this.tech) {\n    this.unloadTech();\n\n  // if this is the first time loading, HTML5 tag will exist but won't be initialized\n  // so we need to remove it if we're not loading HTML5\n  } else if (techName !== 'Html5' && this.tag) {\n    vjs.Html5.disposeMediaElement(this.tag);\n    this.tag = null;\n  }\n\n  this.techName = techName;\n\n  // Turn off API access because we're loading a new tech that might load asynchronously\n  this.isReady_ = false;\n\n  var techReady = function(){\n    this.player_.triggerReady();\n\n    // Manually track progress in cases where the browser/flash player doesn't report it.\n    if (!this.features['progressEvents']) {\n      this.player_.manualProgressOn();\n    }\n\n    // Manually track timeudpates in cases where the browser/flash player doesn't report it.\n    if (!this.features['timeupdateEvents']) {\n      this.player_.manualTimeUpdatesOn();\n    }\n  };\n\n  // Grab tech-specific options from player options and add source and parent element to use.\n  var techOptions = vjs.obj.merge({ 'source': source, 'parentEl': this.el_ }, this.options_[techName.toLowerCase()]);\n\n  if (source) {\n    if (source.src == this.cache_.src && this.cache_.currentTime > 0) {\n      techOptions['startTime'] = this.cache_.currentTime;\n    }\n\n    this.cache_.src = source.src;\n  }\n\n  // Initialize tech instance\n  this.tech = new window['videojs'][techName](this, techOptions);\n\n  this.tech.ready(techReady);\n};\n\nvjs.Player.prototype.unloadTech = function(){\n  this.isReady_ = false;\n  this.tech.dispose();\n\n  // Turn off any manual progress or timeupdate tracking\n  if (this.manualProgress) { this.manualProgressOff(); }\n\n  if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }\n\n  this.tech = false;\n};\n\n// There's many issues around changing the size of a Flash (or other plugin) object.\n// First is a plugin reload issue in Firefox that has been around for 11 years: https://bugzilla.mozilla.org/show_bug.cgi?id=90268\n// Then with the new fullscreen API, Mozilla and webkit browsers will reload the flash object after going to fullscreen.\n// To get around this, we're unloading the tech, caching source and currentTime values, and reloading the tech once the plugin is resized.\n// reloadTech: function(betweenFn){\n//   vjs.log('unloadingTech')\n//   this.unloadTech();\n//   vjs.log('unloadedTech')\n//   if (betweenFn) { betweenFn.call(); }\n//   vjs.log('LoadingTech')\n//   this.loadTech(this.techName, { src: this.cache_.src })\n//   vjs.log('loadedTech')\n// },\n\n/* Fallbacks for unsupported event types\n================================================================================ */\n// Manually trigger progress events based on changes to the buffered amount\n// Many flash players and older HTML5 browsers don't send progress or progress-like events\nvjs.Player.prototype.manualProgressOn = function(){\n  this.manualProgress = true;\n\n  // Trigger progress watching when a source begins loading\n  this.trackProgress();\n\n  // Watch for a native progress event call on the tech element\n  // In HTML5, some older versions don't support the progress event\n  // So we're assuming they don't, and turning off manual progress if they do.\n  // As opposed to doing user agent detection\n  this.tech.one('progress', function(){\n\n    // Update known progress support for this playback technology\n    this.features['progressEvents'] = true;\n\n    // Turn off manual progress tracking\n    this.player_.manualProgressOff();\n  });\n};\n\nvjs.Player.prototype.manualProgressOff = function(){\n  this.manualProgress = false;\n  this.stopTrackingProgress();\n};\n\nvjs.Player.prototype.trackProgress = function(){\n\n  this.progressInterval = setInterval(vjs.bind(this, function(){\n    // Don't trigger unless buffered amount is greater than last time\n    // log(this.cache_.bufferEnd, this.buffered().end(0), this.duration())\n    /* TODO: update for multiple buffered regions */\n    if (this.cache_.bufferEnd < this.buffered().end(0)) {\n      this.trigger('progress');\n    } else if (this.bufferedPercent() == 1) {\n      this.stopTrackingProgress();\n      this.trigger('progress'); // Last update\n    }\n  }), 500);\n};\nvjs.Player.prototype.stopTrackingProgress = function(){ clearInterval(this.progressInterval); };\n\n/*! Time Tracking -------------------------------------------------------------- */\nvjs.Player.prototype.manualTimeUpdatesOn = function(){\n  this.manualTimeUpdates = true;\n\n  this.on('play', this.trackCurrentTime);\n  this.on('pause', this.stopTrackingCurrentTime);\n  // timeupdate is also called by .currentTime whenever current time is set\n\n  // Watch for native timeupdate event\n  this.tech.one('timeupdate', function(){\n    // Update known progress support for this playback technology\n    this.features['timeupdateEvents'] = true;\n    // Turn off manual progress tracking\n    this.player_.manualTimeUpdatesOff();\n  });\n};\n\nvjs.Player.prototype.manualTimeUpdatesOff = function(){\n  this.manualTimeUpdates = false;\n  this.stopTrackingCurrentTime();\n  this.off('play', this.trackCurrentTime);\n  this.off('pause', this.stopTrackingCurrentTime);\n};\n\nvjs.Player.prototype.trackCurrentTime = function(){\n  if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }\n  this.currentTimeInterval = setInterval(vjs.bind(this, function(){\n    this.trigger('timeupdate');\n  }), 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n};\n\n// Turn off play progress tracking (when paused or dragging)\nvjs.Player.prototype.stopTrackingCurrentTime = function(){ clearInterval(this.currentTimeInterval); };\n\n// /* Player event handlers (how the player reacts to certain events)\n// ================================================================================ */\n\n/**\n * Fired when the user agent begins looking for media data\n * @event loadstart\n */\nvjs.Player.prototype.onLoadStart;\n\n/**\n * Fired when the player has initial duration and dimension information\n * @event loadedmetadata\n */\nvjs.Player.prototype.onLoadedMetaData;\n\n/**\n * Fired when the player has downloaded data at the current playback position\n * @event loadeddata\n */\nvjs.Player.prototype.onLoadedData;\n\n/**\n * Fired when the player has finished downloading the source data\n * @event loadedalldata\n */\nvjs.Player.prototype.onLoadedAllData;\n\n/**\n * Fired whenever the media begins or resumes playback\n * @event play\n */\nvjs.Player.prototype.onPlay = function(){\n  vjs.removeClass(this.el_, 'vjs-paused');\n  vjs.addClass(this.el_, 'vjs-playing');\n};\n\n/**\n * Fired the first time a video is played\n *\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @event firstplay\n */\nvjs.Player.prototype.onFirstPlay = function(){\n    //If the first starttime attribute is specified\n    //then we will start at the given offset in seconds\n    if(this.options_['starttime']){\n      this.currentTime(this.options_['starttime']);\n    }\n\n    this.addClass('vjs-has-started');\n};\n\n/**\n * Fired whenever the media has been paused\n * @event pause\n */\nvjs.Player.prototype.onPause = function(){\n  vjs.removeClass(this.el_, 'vjs-playing');\n  vjs.addClass(this.el_, 'vjs-paused');\n};\n\n/**\n * Fired when the current playback position has changed\n *\n * During playback this is fired every 15-250 milliseconds, depnding on the\n * playback technology in use.\n * @event timeupdate\n */\nvjs.Player.prototype.onTimeUpdate;\n\n/**\n * Fired while the user agent is downloading media data\n * @event progress\n */\nvjs.Player.prototype.onProgress = function(){\n  // Add custom event for when source is finished downloading.\n  if (this.bufferedPercent() == 1) {\n    this.trigger('loadedalldata');\n  }\n};\n\n/**\n * Fired when the end of the media resource is reached (currentTime == duration)\n * @event ended\n */\nvjs.Player.prototype.onEnded = function(){\n  if (this.options_['loop']) {\n    this.currentTime(0);\n    this.play();\n  }\n};\n\n/**\n * Fired when the duration of the media resource is first known or changed\n * @event durationchange\n */\nvjs.Player.prototype.onDurationChange = function(){\n  // Allows for cacheing value instead of asking player each time.\n  this.duration(this.techGet('duration'));\n};\n\n/**\n * Fired when the volume changes\n * @event volumechange\n */\nvjs.Player.prototype.onVolumeChange;\n\n/**\n * Fired when the player switches in or out of fullscreen mode\n * @event fullscreenchange\n */\nvjs.Player.prototype.onFullscreenChange = function() {\n  if (this.isFullScreen) {\n    this.addClass('vjs-fullscreen');\n  } else {\n    this.removeClass('vjs-fullscreen');\n  }\n};\n\n/**\n * Fired when there is an error in playback\n * @event error\n */\nvjs.Player.prototype.onError = function(e) {\n  vjs.log('Video Error', e);\n};\n\n// /* Player API\n// ================================================================================ */\n\n/**\n * Object for cached values.\n * @private\n */\nvjs.Player.prototype.cache_;\n\nvjs.Player.prototype.getCache = function(){\n  return this.cache_;\n};\n\n// Pass values to the playback tech\nvjs.Player.prototype.techCall = function(method, arg){\n  // If it's not ready yet, call method when it is\n  if (this.tech && !this.tech.isReady_) {\n    this.tech.ready(function(){\n      this[method](arg);\n    });\n\n  // Otherwise call method now\n  } else {\n    try {\n      this.tech[method](arg);\n    } catch(e) {\n      vjs.log(e);\n      throw e;\n    }\n  }\n};\n\n// Get calls can't wait for the tech, and sometimes don't need to.\nvjs.Player.prototype.techGet = function(method){\n\n  if (this.tech && this.tech.isReady_) {\n\n    // Flash likes to die and reload when you hide or reposition it.\n    // In these cases the object methods go away and we get errors.\n    // When that happens we'll catch the errors and inform tech that it's not ready any more.\n    try {\n      return this.tech[method]();\n    } catch(e) {\n      // When building additional tech libs, an expected method may not be defined yet\n      if (this.tech[method] === undefined) {\n        vjs.log('Video.js: ' + method + ' method not defined for '+this.techName+' playback technology.', e);\n      } else {\n        // When a method isn't available on the object it throws a TypeError\n        if (e.name == 'TypeError') {\n          vjs.log('Video.js: ' + method + ' unavailable on '+this.techName+' playback technology element.', e);\n          this.tech.isReady_ = false;\n        } else {\n          vjs.log(e);\n        }\n      }\n      throw e;\n    }\n  }\n\n  return;\n};\n\n/**\n * start media playback\n *\n *     myPlayer.play();\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.play = function(){\n  this.techCall('play');\n  return this;\n};\n\n/**\n * Pause the video playback\n *\n *     myPlayer.pause();\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.pause = function(){\n  this.techCall('pause');\n  return this;\n};\n\n/**\n * Check if the player is paused\n *\n *     var isPaused = myPlayer.paused();\n *     var isPlaying = !myPlayer.paused();\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n */\nvjs.Player.prototype.paused = function(){\n  // The initial state of paused should be true (in Safari it's actually false)\n  return (this.techGet('paused') === false) ? false : true;\n};\n\n/**\n * Get or set the current time (in seconds)\n *\n *     // get\n *     var whereYouAt = myPlayer.currentTime();\n *\n *     // set\n *     myPlayer.currentTime(120); // 2 minutes into the video\n *\n * @param  {Number|String=} seconds The time to seek to\n * @return {Number}        The time in seconds, when not setting\n * @return {vjs.Player}    self, when the current time is set\n */\nvjs.Player.prototype.currentTime = function(seconds){\n  if (seconds !== undefined) {\n\n    // cache the last set value for smoother scrubbing\n    this.cache_.lastSetCurrentTime = seconds;\n\n    this.techCall('setCurrentTime', seconds);\n\n    // improve the accuracy of manual timeupdates\n    if (this.manualTimeUpdates) { this.trigger('timeupdate'); }\n\n    return this;\n  }\n\n  // cache last currentTime and return\n  // default to 0 seconds\n  return this.cache_.currentTime = (this.techGet('currentTime') || 0);\n};\n\n/**\n * Get the length in time of the video in seconds\n *\n *     var lengthOfVideo = myPlayer.duration();\n *\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @return {Number} The duration of the video in seconds\n */\nvjs.Player.prototype.duration = function(seconds){\n  if (seconds !== undefined) {\n\n    // cache the last set value for optimiized scrubbing (esp. Flash)\n    this.cache_.duration = parseFloat(seconds);\n\n    return this;\n  }\n\n  if (this.cache_.duration === undefined) {\n    this.onDurationChange();\n  }\n\n  return this.cache_.duration;\n};\n\n// Calculates how much time is left. Not in spec, but useful.\nvjs.Player.prototype.remainingTime = function(){\n  return this.duration() - this.currentTime();\n};\n\n// http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n// Buffered returns a timerange object.\n// Kind of like an array of portions of the video that have been downloaded.\n// So far no browsers return more than one range (portion)\n\n/**\n * Get a TimeRange object with the times of the video that have been downloaded\n *\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n *\n *     // Number of different ranges of time have been buffered. Usually 1.\n *     numberOfRanges = bufferedTimeRange.length,\n *\n *     // Time in seconds when the first range starts. Usually 0.\n *     firstRangeStart = bufferedTimeRange.start(0),\n *\n *     // Time in seconds when the first range ends\n *     firstRangeEnd = bufferedTimeRange.end(0),\n *\n *     // Length in seconds of the first time range\n *     firstRangeLength = firstRangeEnd - firstRangeStart;\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n */\nvjs.Player.prototype.buffered = function(){\n  var buffered = this.techGet('buffered'),\n      start = 0,\n      buflast = buffered.length - 1,\n      // Default end to 0 and store in values\n      end = this.cache_.bufferEnd = this.cache_.bufferEnd || 0;\n\n  if (buffered && buflast >= 0 && buffered.end(buflast) !== end) {\n    end = buffered.end(buflast);\n    // Storing values allows them be overridden by setBufferedFromProgress\n    this.cache_.bufferEnd = end;\n  }\n\n  return vjs.createTimeRange(start, end);\n};\n\n/**\n * Get the percent (as a decimal) of the video that's been downloaded\n *\n *     var howMuchIsDownloaded = myPlayer.bufferedPercent();\n *\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n */\nvjs.Player.prototype.bufferedPercent = function(){\n  return (this.duration()) ? this.buffered().end(0) / this.duration() : 0;\n};\n\n/**\n * Get or set the current volume of the media\n *\n *     // get\n *     var howLoudIsIt = myPlayer.volume();\n *\n *     // set\n *     myPlayer.volume(0.5); // Set volume to half\n *\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param  {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number}                  The current volume, when getting\n * @return {vjs.Player}              self, when setting\n */\nvjs.Player.prototype.volume = function(percentAsDecimal){\n  var vol;\n\n  if (percentAsDecimal !== undefined) {\n    vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n    this.cache_.volume = vol;\n    this.techCall('setVolume', vol);\n    vjs.setLocalStorage('volume', vol);\n    return this;\n  }\n\n  // Default to 1 when returning current volume.\n  vol = parseFloat(this.techGet('volume'));\n  return (isNaN(vol)) ? 1 : vol;\n};\n\n\n/**\n * Get the current muted state, or turn mute on or off\n *\n *     // get\n *     var isVolumeMuted = myPlayer.muted();\n *\n *     // set\n *     myPlayer.muted(true); // mute the volume\n *\n * @param  {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not, when getting\n * @return {vjs.Player} self, when setting mute\n */\nvjs.Player.prototype.muted = function(muted){\n  if (muted !== undefined) {\n    this.techCall('setMuted', muted);\n    return this;\n  }\n  return this.techGet('muted') || false; // Default to false\n};\n\n// Check if current tech can support native fullscreen (e.g. with built in controls lik iOS, so not our flash swf)\nvjs.Player.prototype.supportsFullScreen = function(){ return this.techGet('supportsFullScreen') || false; };\n\n/**\n * Increase the size of the video to full screen\n *\n *     myPlayer.requestFullScreen();\n *\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.requestFullScreen = function(){\n  var requestFullScreen = vjs.support.requestFullScreen;\n  this.isFullScreen = true;\n\n  if (requestFullScreen) {\n    // the browser supports going fullscreen at the element level so we can\n    // take the controls fullscreen as well as the video\n\n    // Trigger fullscreenchange event after change\n    // We have to specifically add this each time, and remove\n    // when cancelling fullscreen. Otherwise if there's multiple\n    // players on a page, they would all be reacting to the same fullscreen\n    // events\n    vjs.on(document, requestFullScreen.eventName, vjs.bind(this, function(e){\n      this.isFullScreen = document[requestFullScreen.isFullScreen];\n\n      // If cancelling fullscreen, remove event listener.\n      if (this.isFullScreen === false) {\n        vjs.off(document, requestFullScreen.eventName, arguments.callee);\n      }\n\n      this.trigger('fullscreenchange');\n    }));\n\n    this.el_[requestFullScreen.requestFn]();\n\n  } else if (this.tech.supportsFullScreen()) {\n    // we can't take the video.js controls fullscreen but we can go fullscreen\n    // with native controls\n    this.techCall('enterFullScreen');\n  } else {\n    // fullscreen isn't supported so we'll just stretch the video element to\n    // fill the viewport\n    this.enterFullWindow();\n    this.trigger('fullscreenchange');\n  }\n\n  return this;\n};\n\n/**\n * Return the video to its normal size after having been in full screen mode\n *\n *     myPlayer.cancelFullScreen();\n *\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.cancelFullScreen = function(){\n  var requestFullScreen = vjs.support.requestFullScreen;\n  this.isFullScreen = false;\n\n  // Check for browser element fullscreen support\n  if (requestFullScreen) {\n    document[requestFullScreen.cancelFn]();\n  } else if (this.tech.supportsFullScreen()) {\n   this.techCall('exitFullScreen');\n  } else {\n   this.exitFullWindow();\n   this.trigger('fullscreenchange');\n  }\n\n  return this;\n};\n\n// When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\nvjs.Player.prototype.enterFullWindow = function(){\n  this.isFullWindow = true;\n\n  // Storing original doc overflow value to return to when fullscreen is off\n  this.docOrigOverflow = document.documentElement.style.overflow;\n\n  // Add listener for esc key to exit fullscreen\n  vjs.on(document, 'keydown', vjs.bind(this, this.fullWindowOnEscKey));\n\n  // Hide any scroll bars\n  document.documentElement.style.overflow = 'hidden';\n\n  // Apply fullscreen styles\n  vjs.addClass(document.body, 'vjs-full-window');\n\n  this.trigger('enterFullWindow');\n};\nvjs.Player.prototype.fullWindowOnEscKey = function(event){\n  if (event.keyCode === 27) {\n    if (this.isFullScreen === true) {\n      this.cancelFullScreen();\n    } else {\n      this.exitFullWindow();\n    }\n  }\n};\n\nvjs.Player.prototype.exitFullWindow = function(){\n  this.isFullWindow = false;\n  vjs.off(document, 'keydown', this.fullWindowOnEscKey);\n\n  // Unhide scroll bars.\n  document.documentElement.style.overflow = this.docOrigOverflow;\n\n  // Remove fullscreen styles\n  vjs.removeClass(document.body, 'vjs-full-window');\n\n  // Resize the box, controller, and poster to original sizes\n  // this.positionAll();\n  this.trigger('exitFullWindow');\n};\n\nvjs.Player.prototype.selectSource = function(sources){\n\n  // Loop through each playback technology in the options order\n  for (var i=0,j=this.options_['techOrder'];i<j.length;i++) {\n    var techName = vjs.capitalize(j[i]),\n        tech = window['videojs'][techName];\n\n    // Check if the browser supports this technology\n    if (tech.isSupported()) {\n      // Loop through each source object\n      for (var a=0,b=sources;a<b.length;a++) {\n        var source = b[a];\n\n        // Check if source can be played with this technology\n        if (tech['canPlaySource'](source)) {\n          return { source: source, tech: techName };\n        }\n      }\n    }\n  }\n\n  return false;\n};\n\n/**\n * The source function updates the video source\n *\n * There are three types of variables you can pass as the argument.\n *\n * **URL String**: A URL to the the video file. Use this method if you are sure\n * the current playback technology (HTML5/Flash) can support the source you\n * provide. Currently only MP4 files can be used in both HTML5 and Flash.\n *\n *     myPlayer.src(\"http://www.example.com/path/to/video.mp4\");\n *\n * **Source Object (or element):** A javascript object containing information\n * about the source file. Use this method if you want the player to determine if\n * it can support the file using the type information.\n *\n *     myPlayer.src({ type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" });\n *\n * **Array of Source Objects:** To provide multiple versions of the source so\n * that it can be played using HTML5 across browsers you can use an array of\n * source objects. Video.js will detect which version is supported and load that\n * file.\n *\n *     myPlayer.src([\n *       { type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" },\n *       { type: \"video/webm\", src: \"http://www.example.com/path/to/video.webm\" },\n *       { type: \"video/ogg\", src: \"http://www.example.com/path/to/video.ogv\" }\n *     ]);\n *\n * @param  {String|Object|Array=} source The source URL, object, or array of sources\n * @return {vjs.Player} self\n */\nvjs.Player.prototype.src = function(source){\n  // Case: Array of source objects to choose from and pick the best to play\n  if (source instanceof Array) {\n\n    var sourceTech = this.selectSource(source),\n        techName;\n\n    if (sourceTech) {\n        source = sourceTech.source;\n        techName = sourceTech.tech;\n\n      // If this technology is already loaded, set source\n      if (techName == this.techName) {\n        this.src(source); // Passing the source object\n      // Otherwise load this technology with chosen source\n      } else {\n        this.loadTech(techName, source);\n      }\n    } else {\n      this.el_.appendChild(vjs.createEl('p', {\n        innerHTML: this.options()['notSupportedMessage']\n      }));\n    }\n\n  // Case: Source object { src: '', type: '' ... }\n  } else if (source instanceof Object) {\n\n    if (window['videojs'][this.techName]['canPlaySource'](source)) {\n      this.src(source.src);\n    } else {\n      // Send through tech loop to check for a compatible technology.\n      this.src([source]);\n    }\n\n  // Case: URL String (http://myvideo...)\n  } else {\n    // Cache for getting last set source\n    this.cache_.src = source;\n\n    if (!this.isReady_) {\n      this.ready(function(){\n        this.src(source);\n      });\n    } else {\n      this.techCall('src', source);\n      if (this.options_['preload'] == 'auto') {\n        this.load();\n      }\n      if (this.options_['autoplay']) {\n        this.play();\n      }\n    }\n  }\n  return this;\n};\n\n// Begin loading the src data\n// http://dev.w3.org/html5/spec/video.html#dom-media-load\nvjs.Player.prototype.load = function(){\n  this.techCall('load');\n  return this;\n};\n\n// http://dev.w3.org/html5/spec/video.html#dom-media-currentsrc\nvjs.Player.prototype.currentSrc = function(){\n  return this.techGet('currentSrc') || this.cache_.src || '';\n};\n\n// Attributes/Options\nvjs.Player.prototype.preload = function(value){\n  if (value !== undefined) {\n    this.techCall('setPreload', value);\n    this.options_['preload'] = value;\n    return this;\n  }\n  return this.techGet('preload');\n};\nvjs.Player.prototype.autoplay = function(value){\n  if (value !== undefined) {\n    this.techCall('setAutoplay', value);\n    this.options_['autoplay'] = value;\n    return this;\n  }\n  return this.techGet('autoplay', value);\n};\nvjs.Player.prototype.loop = function(value){\n  if (value !== undefined) {\n    this.techCall('setLoop', value);\n    this.options_['loop'] = value;\n    return this;\n  }\n  return this.techGet('loop');\n};\n\n/**\n * the url of the poster image source\n * @type {String}\n * @private\n */\nvjs.Player.prototype.poster_;\n\n/**\n * get or set the poster image source url\n *\n * ##### EXAMPLE:\n *\n *     // getting\n *     var currentPoster = myPlayer.poster();\n *\n *     // setting\n *     myPlayer.poster('http://example.com/myImage.jpg');\n *\n * @param  {String=} [src] Poster image source URL\n * @return {String} poster URL when getting\n * @return {vjs.Player} self when setting\n */\nvjs.Player.prototype.poster = function(src){\n  if (src !== undefined) {\n    this.poster_ = src;\n    return this;\n  }\n  return this.poster_;\n};\n\n/**\n * Whether or not the controls are showing\n * @type {Boolean}\n * @private\n */\nvjs.Player.prototype.controls_;\n\n/**\n * Get or set whether or not the controls are showing.\n * @param  {Boolean} controls Set controls to showing or not\n * @return {Boolean}    Controls are showing\n */\nvjs.Player.prototype.controls = function(bool){\n  if (bool !== undefined) {\n    bool = !!bool; // force boolean\n    // Don't trigger a change event unless it actually changed\n    if (this.controls_ !== bool) {\n      this.controls_ = bool;\n      if (bool) {\n        this.removeClass('vjs-controls-disabled');\n        this.addClass('vjs-controls-enabled');\n        this.trigger('controlsenabled');\n      } else {\n        this.removeClass('vjs-controls-enabled');\n        this.addClass('vjs-controls-disabled');\n        this.trigger('controlsdisabled');\n      }\n    }\n    return this;\n  }\n  return this.controls_;\n};\n\nvjs.Player.prototype.usingNativeControls_;\n\n/**\n * Toggle native controls on/off. Native controls are the controls built into\n * devices (e.g. default iPhone controls), Flash, or other techs\n * (e.g. Vimeo Controls)\n *\n * **This should only be set by the current tech, because only the tech knows\n * if it can support native controls**\n *\n * @param  {Boolean} bool    True signals that native controls are on\n * @return {vjs.Player}      Returns the player\n * @private\n */\nvjs.Player.prototype.usingNativeControls = function(bool){\n  if (bool !== undefined) {\n    bool = !!bool; // force boolean\n    // Don't trigger a change event unless it actually changed\n    if (this.usingNativeControls_ !== bool) {\n      this.usingNativeControls_ = bool;\n      if (bool) {\n        this.addClass('vjs-using-native-controls');\n\n        /**\n         * player is using the native device controls\n         *\n         * @event usingnativecontrols\n         * @memberof vjs.Player\n         * @instance\n         * @private\n         */\n        this.trigger('usingnativecontrols');\n      } else {\n        this.removeClass('vjs-using-native-controls');\n\n        /**\n         * player is using the custom HTML controls\n         *\n         * @event usingcustomcontrols\n         * @memberof vjs.Player\n         * @instance\n         * @private\n         */\n        this.trigger('usingcustomcontrols');\n      }\n    }\n    return this;\n  }\n  return this.usingNativeControls_;\n};\n\nvjs.Player.prototype.error = function(){ return this.techGet('error'); };\nvjs.Player.prototype.ended = function(){ return this.techGet('ended'); };\nvjs.Player.prototype.seeking = function(){ return this.techGet('seeking'); };\n\n// When the player is first initialized, trigger activity so components\n// like the control bar show themselves if needed\nvjs.Player.prototype.userActivity_ = true;\nvjs.Player.prototype.reportUserActivity = function(event){\n  this.userActivity_ = true;\n};\n\nvjs.Player.prototype.userActive_ = true;\nvjs.Player.prototype.userActive = function(bool){\n  if (bool !== undefined) {\n    bool = !!bool;\n    if (bool !== this.userActive_) {\n      this.userActive_ = bool;\n      if (bool) {\n        // If the user was inactive and is now active we want to reset the\n        // inactivity timer\n        this.userActivity_ = true;\n        this.removeClass('vjs-user-inactive');\n        this.addClass('vjs-user-active');\n        this.trigger('useractive');\n      } else {\n        // We're switching the state to inactive manually, so erase any other\n        // activity\n        this.userActivity_ = false;\n\n        // Chrome/Safari/IE have bugs where when you change the cursor it can\n        // trigger a mousemove event. This causes an issue when you're hiding\n        // the cursor when the user is inactive, and a mousemove signals user\n        // activity. Making it impossible to go into inactive mode. Specifically\n        // this happens in fullscreen when we really need to hide the cursor.\n        //\n        // When this gets resolved in ALL browsers it can be removed\n        // https://code.google.com/p/chromium/issues/detail?id=103041\n        this.tech.one('mousemove', function(e){\n          e.stopPropagation();\n          e.preventDefault();\n        });\n        this.removeClass('vjs-user-active');\n        this.addClass('vjs-user-inactive');\n        this.trigger('userinactive');\n      }\n    }\n    return this;\n  }\n  return this.userActive_;\n};\n\nvjs.Player.prototype.listenForUserActivity = function(){\n  var onMouseActivity, onMouseDown, mouseInProgress, onMouseUp,\n      activityCheck, inactivityTimeout;\n\n  onMouseActivity = this.reportUserActivity;\n\n  onMouseDown = function() {\n    onMouseActivity();\n    // For as long as the they are touching the device or have their mouse down,\n    // we consider them active even if they're not moving their finger or mouse.\n    // So we want to continue to update that they are active\n    clearInterval(mouseInProgress);\n    // Setting userActivity=true now and setting the interval to the same time\n    // as the activityCheck interval (250) should ensure we never miss the\n    // next activityCheck\n    mouseInProgress = setInterval(vjs.bind(this, onMouseActivity), 250);\n  };\n\n  onMouseUp = function(event) {\n    onMouseActivity();\n    // Stop the interval that maintains activity if the mouse/touch is down\n    clearInterval(mouseInProgress);\n  };\n\n  // Any mouse movement will be considered user activity\n  this.on('mousedown', onMouseDown);\n  this.on('mousemove', onMouseActivity);\n  this.on('mouseup', onMouseUp);\n\n  // Listen for keyboard navigation\n  // Shouldn't need to use inProgress interval because of key repeat\n  this.on('keydown', onMouseActivity);\n  this.on('keyup', onMouseActivity);\n\n  // Consider any touch events that bubble up to be activity\n  // Certain touches on the tech will be blocked from bubbling because they\n  // toggle controls\n  this.on('touchstart', onMouseDown);\n  this.on('touchmove', onMouseActivity);\n  this.on('touchend', onMouseUp);\n  this.on('touchcancel', onMouseUp);\n\n  // Run an interval every 250 milliseconds instead of stuffing everything into\n  // the mousemove/touchmove function itself, to prevent performance degradation.\n  // `this.reportUserActivity` simply sets this.userActivity_ to true, which\n  // then gets picked up by this loop\n  // http://ejohn.org/blog/learning-from-twitter/\n  activityCheck = setInterval(vjs.bind(this, function() {\n    // Check to see if mouse/touch activity has happened\n    if (this.userActivity_) {\n      // Reset the activity tracker\n      this.userActivity_ = false;\n\n      // If the user state was inactive, set the state to active\n      this.userActive(true);\n\n      // Clear any existing inactivity timeout to start the timer over\n      clearTimeout(inactivityTimeout);\n\n      // In X seconds, if no more activity has occurred the user will be\n      // considered inactive\n      inactivityTimeout = setTimeout(vjs.bind(this, function() {\n        // Protect against the case where the inactivityTimeout can trigger just\n        // before the next user activity is picked up by the activityCheck loop\n        // causing a flicker\n        if (!this.userActivity_) {\n          this.userActive(false);\n        }\n      }), 2000);\n    }\n  }), 250);\n\n  // Clean up the intervals when we kill the player\n  this.on('dispose', function(){\n    clearInterval(activityCheck);\n    clearTimeout(inactivityTimeout);\n  });\n};\n\n// Methods to add support for\n// networkState: function(){ return this.techCall('networkState'); },\n// readyState: function(){ return this.techCall('readyState'); },\n// seeking: function(){ return this.techCall('seeking'); },\n// initialTime: function(){ return this.techCall('initialTime'); },\n// startOffsetTime: function(){ return this.techCall('startOffsetTime'); },\n// played: function(){ return this.techCall('played'); },\n// seekable: function(){ return this.techCall('seekable'); },\n// videoTracks: function(){ return this.techCall('videoTracks'); },\n// audioTracks: function(){ return this.techCall('audioTracks'); },\n// videoWidth: function(){ return this.techCall('videoWidth'); },\n// videoHeight: function(){ return this.techCall('videoHeight'); },\n// defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); },\n// playbackRate: function(){ return this.techCall('playbackRate'); },\n// mediaGroup: function(){ return this.techCall('mediaGroup'); },\n// controller: function(){ return this.techCall('controller'); },\n// defaultMuted: function(){ return this.techCall('defaultMuted'); }\n\n// TODO\n// currentSrcList: the array of sources including other formats and bitrates\n// playList: array of source lists in order of playback\n\n// RequestFullscreen API\n(function(){\n  var prefix, requestFS, div;\n\n  div = document.createElement('div');\n\n  requestFS = {};\n\n  // Current W3C Spec\n  // http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#api\n  // Mozilla Draft: https://wiki.mozilla.org/Gecko:FullScreenAPI#fullscreenchange_event\n  // New: https://dvcs.w3.org/hg/fullscreen/raw-file/529a67b8d9f3/Overview.html\n  if (div.cancelFullscreen !== undefined) {\n    requestFS.requestFn = 'requestFullscreen';\n    requestFS.cancelFn = 'exitFullscreen';\n    requestFS.eventName = 'fullscreenchange';\n    requestFS.isFullScreen = 'fullScreen';\n\n  // Webkit (Chrome/Safari) and Mozilla (Firefox) have working implementations\n  // that use prefixes and vary slightly from the new W3C spec. Specifically,\n  // using 'exit' instead of 'cancel', and lowercasing the 'S' in Fullscreen.\n  // Other browsers don't have any hints of which version they might follow yet,\n  // so not going to try to predict by looping through all prefixes.\n  } else {\n\n    if (document.mozCancelFullScreen) {\n      prefix = 'moz';\n      requestFS.isFullScreen = prefix + 'FullScreen';\n    } else {\n      prefix = 'webkit';\n      requestFS.isFullScreen = prefix + 'IsFullScreen';\n    }\n\n    if (div[prefix + 'RequestFullScreen']) {\n      requestFS.requestFn = prefix + 'RequestFullScreen';\n      requestFS.cancelFn = prefix + 'CancelFullScreen';\n    }\n    requestFS.eventName = prefix + 'fullscreenchange';\n  }\n\n  if (document[requestFS.cancelFn]) {\n    vjs.support.requestFullScreen = requestFS;\n  }\n\n})();\n\n\n/**\n * Container of main controls\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n * @extends vjs.Component\n */\nvjs.ControlBar = vjs.Component.extend();\n\nvjs.ControlBar.prototype.options_ = {\n  loadEvent: 'play',\n  children: {\n    'playToggle': {},\n    'currentTimeDisplay': {},\n    'timeDivider': {},\n    'durationDisplay': {},\n    'remainingTimeDisplay': {},\n    'progressControl': {},\n    'fullscreenToggle': {},\n    'volumeControl': {},\n    'muteToggle': {}\n    // 'volumeMenuButton': {}\n  }\n};\n\nvjs.ControlBar.prototype.createEl = function(){\n  return vjs.createEl('div', {\n    className: 'vjs-control-bar'\n  });\n};\n/**\n * Button to toggle between play and pause\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.PlayToggle = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    player.on('play', vjs.bind(this, this.onPlay));\n    player.on('pause', vjs.bind(this, this.onPause));\n  }\n});\n\nvjs.PlayToggle.prototype.buttonText = 'Play';\n\nvjs.PlayToggle.prototype.buildCSSClass = function(){\n  return 'vjs-play-control ' + vjs.Button.prototype.buildCSSClass.call(this);\n};\n\n// OnClick - Toggle between play and pause\nvjs.PlayToggle.prototype.onClick = function(){\n  if (this.player_.paused()) {\n    this.player_.play();\n  } else {\n    this.player_.pause();\n  }\n};\n\n  // OnPlay - Add the vjs-playing class to the element so it can change appearance\nvjs.PlayToggle.prototype.onPlay = function(){\n  vjs.removeClass(this.el_, 'vjs-paused');\n  vjs.addClass(this.el_, 'vjs-playing');\n  this.el_.children[0].children[0].innerHTML = 'Pause'; // change the button text to \"Pause\"\n};\n\n  // OnPause - Add the vjs-paused class to the element so it can change appearance\nvjs.PlayToggle.prototype.onPause = function(){\n  vjs.removeClass(this.el_, 'vjs-playing');\n  vjs.addClass(this.el_, 'vjs-paused');\n  this.el_.children[0].children[0].innerHTML = 'Play'; // change the button text to \"Play\"\n};\n/**\n * Displays the current time\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.CurrentTimeDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('timeupdate', vjs.bind(this, this.updateContent));\n  }\n});\n\nvjs.CurrentTimeDisplay.prototype.createEl = function(){\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-current-time vjs-time-controls vjs-control'\n  });\n\n  this.content = vjs.createEl('div', {\n    className: 'vjs-current-time-display',\n    innerHTML: '<span class=\"vjs-control-text\">Current Time </span>' + '0:00', // label the current time for screen reader users\n    'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n  });\n\n  el.appendChild(vjs.createEl('div').appendChild(this.content));\n  return el;\n};\n\nvjs.CurrentTimeDisplay.prototype.updateContent = function(){\n  // Allows for smooth scrubbing, when player can't keep up.\n  var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n  this.content.innerHTML = '<span class=\"vjs-control-text\">Current Time </span>' + vjs.formatTime(time, this.player_.duration());\n};\n\n/**\n * Displays the duration\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.DurationDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('timeupdate', vjs.bind(this, this.updateContent)); // this might need to be changes to 'durationchange' instead of 'timeupdate' eventually, however the durationchange event fires before this.player_.duration() is set, so the value cannot be written out using this method. Once the order of durationchange and this.player_.duration() being set is figured out, this can be updated.\n  }\n});\n\nvjs.DurationDisplay.prototype.createEl = function(){\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-duration vjs-time-controls vjs-control'\n  });\n\n  this.content = vjs.createEl('div', {\n    className: 'vjs-duration-display',\n    innerHTML: '<span class=\"vjs-control-text\">Duration Time </span>' + '0:00', // label the duration time for screen reader users\n    'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n  });\n\n  el.appendChild(vjs.createEl('div').appendChild(this.content));\n  return el;\n};\n\nvjs.DurationDisplay.prototype.updateContent = function(){\n  var duration = this.player_.duration();\n  if (duration) {\n      this.content.innerHTML = '<span class=\"vjs-control-text\">Duration Time </span>' + vjs.formatTime(duration); // label the duration time for screen reader users\n  }\n};\n\n/**\n * The separator between the current time and duration\n *\n * Can be hidden if it's not needed in the design.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.TimeDivider = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.TimeDivider.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-time-divider',\n    innerHTML: '<div><span>/</span></div>'\n  });\n};\n\n/**\n * Displays the time left in the video\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.RemainingTimeDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('timeupdate', vjs.bind(this, this.updateContent));\n  }\n});\n\nvjs.RemainingTimeDisplay.prototype.createEl = function(){\n  var el = vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-remaining-time vjs-time-controls vjs-control'\n  });\n\n  this.content = vjs.createEl('div', {\n    className: 'vjs-remaining-time-display',\n    innerHTML: '<span class=\"vjs-control-text\">Remaining Time </span>' + '-0:00', // label the remaining time for screen reader users\n    'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n  });\n\n  el.appendChild(vjs.createEl('div').appendChild(this.content));\n  return el;\n};\n\nvjs.RemainingTimeDisplay.prototype.updateContent = function(){\n  if (this.player_.duration()) {\n    this.content.innerHTML = '<span class=\"vjs-control-text\">Remaining Time </span>' + '-'+ vjs.formatTime(this.player_.remainingTime());\n  }\n\n  // Allows for smooth scrubbing, when player can't keep up.\n  // var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n  // this.content.innerHTML = vjs.formatTime(time, this.player_.duration());\n};\n/**\n * Toggle fullscreen video\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @extends vjs.Button\n */\nvjs.FullscreenToggle = vjs.Button.extend({\n  /**\n   * @constructor\n   * @memberof vjs.FullscreenToggle\n   * @instance\n   */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n  }\n});\n\nvjs.FullscreenToggle.prototype.buttonText = 'Fullscreen';\n\nvjs.FullscreenToggle.prototype.buildCSSClass = function(){\n  return 'vjs-fullscreen-control ' + vjs.Button.prototype.buildCSSClass.call(this);\n};\n\nvjs.FullscreenToggle.prototype.onClick = function(){\n  if (!this.player_.isFullScreen) {\n    this.player_.requestFullScreen();\n    this.el_.children[0].children[0].innerHTML = 'Non-Fullscreen'; // change the button text to \"Non-Fullscreen\"\n  } else {\n    this.player_.cancelFullScreen();\n    this.el_.children[0].children[0].innerHTML = 'Fullscreen'; // change the button to \"Fullscreen\"\n  }\n};\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.ProgressControl = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.ProgressControl.prototype.options_ = {\n  children: {\n    'seekBar': {}\n  }\n};\n\nvjs.ProgressControl.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-progress-control vjs-control'\n  });\n};\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.SeekBar = vjs.Slider.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Slider.call(this, player, options);\n    player.on('timeupdate', vjs.bind(this, this.updateARIAAttributes));\n    player.ready(vjs.bind(this, this.updateARIAAttributes));\n  }\n});\n\nvjs.SeekBar.prototype.options_ = {\n  children: {\n    'loadProgressBar': {},\n    'playProgressBar': {},\n    'seekHandle': {}\n  },\n  'barName': 'playProgressBar',\n  'handleName': 'seekHandle'\n};\n\nvjs.SeekBar.prototype.playerEvent = 'timeupdate';\n\nvjs.SeekBar.prototype.createEl = function(){\n  return vjs.Slider.prototype.createEl.call(this, 'div', {\n    className: 'vjs-progress-holder',\n    'aria-label': 'video progress bar'\n  });\n};\n\nvjs.SeekBar.prototype.updateARIAAttributes = function(){\n    // Allows for smooth scrubbing, when player can't keep up.\n    var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    this.el_.setAttribute('aria-valuenow',vjs.round(this.getPercent()*100, 2)); // machine readable value of progress bar (percentage complete)\n    this.el_.setAttribute('aria-valuetext',vjs.formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n};\n\nvjs.SeekBar.prototype.getPercent = function(){\n  var currentTime;\n  // Flash RTMP provider will not report the correct time\n  // immediately after a seek. This isn't noticeable if you're\n  // seeking while the video is playing, but it is if you seek\n  // while the video is paused.\n  if (this.player_.techName === 'Flash' && this.player_.seeking()) {\n    var cache = this.player_.getCache();\n    if (cache.lastSetCurrentTime) {\n      currentTime = cache.lastSetCurrentTime;\n    }\n    else {\n      currentTime = this.player_.currentTime();\n    }\n  }\n  else {\n    currentTime = this.player_.currentTime();\n  }\n\n  return currentTime / this.player_.duration();\n};\n\nvjs.SeekBar.prototype.onMouseDown = function(event){\n  vjs.Slider.prototype.onMouseDown.call(this, event);\n\n  this.player_.scrubbing = true;\n\n  this.videoWasPlaying = !this.player_.paused();\n  this.player_.pause();\n};\n\nvjs.SeekBar.prototype.onMouseMove = function(event){\n  var newTime = this.calculateDistance(event) * this.player_.duration();\n\n  // Don't let video end while scrubbing.\n  if (newTime == this.player_.duration()) { newTime = newTime - 0.1; }\n\n  // Set new time (tell player to seek to new time)\n  this.player_.currentTime(newTime);\n};\n\nvjs.SeekBar.prototype.onMouseUp = function(event){\n  vjs.Slider.prototype.onMouseUp.call(this, event);\n\n  this.player_.scrubbing = false;\n  if (this.videoWasPlaying) {\n    this.player_.play();\n  }\n};\n\nvjs.SeekBar.prototype.stepForward = function(){\n  this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n};\n\nvjs.SeekBar.prototype.stepBack = function(){\n  this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n};\n\n\n/**\n * Shows load progress\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.LoadProgressBar = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n    player.on('progress', vjs.bind(this, this.update));\n  }\n});\n\nvjs.LoadProgressBar.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-load-progress',\n    innerHTML: '<span class=\"vjs-control-text\">Loaded: 0%</span>'\n  });\n};\n\nvjs.LoadProgressBar.prototype.update = function(){\n  if (this.el_.style) { this.el_.style.width = vjs.round(this.player_.bufferedPercent() * 100, 2) + '%'; }\n};\n\n\n/**\n * Shows play progress\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.PlayProgressBar = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.PlayProgressBar.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-play-progress',\n    innerHTML: '<span class=\"vjs-control-text\">Progress: 0%</span>'\n  });\n};\n\n/**\n * The Seek Handle shows the current position of the playhead during playback,\n * and can be dragged to adjust the playhead.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.SeekHandle = vjs.SliderHandle.extend();\n\n/**\n * The default value for the handle content, which may be read by screen readers\n *\n * @type {String}\n * @private\n */\nvjs.SeekHandle.prototype.defaultValue = '00:00';\n\n/** @inheritDoc */\nvjs.SeekHandle.prototype.createEl = function(){\n  return vjs.SliderHandle.prototype.createEl.call(this, 'div', {\n    className: 'vjs-seek-handle'\n  });\n};\n/**\n * The component for controlling the volume level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.VolumeControl = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    // hide volume controls when they're not supported by the current tech\n    if (player.tech && player.tech.features && player.tech.features['volumeControl'] === false) {\n      this.addClass('vjs-hidden');\n    }\n    player.on('loadstart', vjs.bind(this, function(){\n      if (player.tech.features && player.tech.features['volumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }));\n  }\n});\n\nvjs.VolumeControl.prototype.options_ = {\n  children: {\n    'volumeBar': {}\n  }\n};\n\nvjs.VolumeControl.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-control vjs-control'\n  });\n};\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.VolumeBar = vjs.Slider.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Slider.call(this, player, options);\n    player.on('volumechange', vjs.bind(this, this.updateARIAAttributes));\n    player.ready(vjs.bind(this, this.updateARIAAttributes));\n    setTimeout(vjs.bind(this, this.update), 0); // update when elements is in DOM\n  }\n});\n\nvjs.VolumeBar.prototype.updateARIAAttributes = function(){\n  // Current value of volume bar as a percentage\n  this.el_.setAttribute('aria-valuenow',vjs.round(this.player_.volume()*100, 2));\n  this.el_.setAttribute('aria-valuetext',vjs.round(this.player_.volume()*100, 2)+'%');\n};\n\nvjs.VolumeBar.prototype.options_ = {\n  children: {\n    'volumeLevel': {},\n    'volumeHandle': {}\n  },\n  'barName': 'volumeLevel',\n  'handleName': 'volumeHandle'\n};\n\nvjs.VolumeBar.prototype.playerEvent = 'volumechange';\n\nvjs.VolumeBar.prototype.createEl = function(){\n  return vjs.Slider.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-bar',\n    'aria-label': 'volume level'\n  });\n};\n\nvjs.VolumeBar.prototype.onMouseMove = function(event) {\n  if (this.player_.muted()) {\n    this.player_.muted(false);\n  }\n\n  this.player_.volume(this.calculateDistance(event));\n};\n\nvjs.VolumeBar.prototype.getPercent = function(){\n  if (this.player_.muted()) {\n    return 0;\n  } else {\n    return this.player_.volume();\n  }\n};\n\nvjs.VolumeBar.prototype.stepForward = function(){\n  this.player_.volume(this.player_.volume() + 0.1);\n};\n\nvjs.VolumeBar.prototype.stepBack = function(){\n  this.player_.volume(this.player_.volume() - 0.1);\n};\n\n/**\n * Shows volume level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.VolumeLevel = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n  }\n});\n\nvjs.VolumeLevel.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-level',\n    innerHTML: '<span class=\"vjs-control-text\"></span>'\n  });\n};\n\n/**\n * The volume handle can be dragged to adjust the volume level\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\n vjs.VolumeHandle = vjs.SliderHandle.extend();\n\n vjs.VolumeHandle.prototype.defaultValue = '00:00';\n\n /** @inheritDoc */\n vjs.VolumeHandle.prototype.createEl = function(){\n   return vjs.SliderHandle.prototype.createEl.call(this, 'div', {\n     className: 'vjs-volume-handle'\n   });\n };\n/**\n * A button component for muting the audio\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.MuteToggle = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    player.on('volumechange', vjs.bind(this, this.update));\n\n    // hide mute toggle if the current tech doesn't support volume control\n    if (player.tech && player.tech.features && player.tech.features['volumeControl'] === false) {\n      this.addClass('vjs-hidden');\n    }\n    player.on('loadstart', vjs.bind(this, function(){\n      if (player.tech.features && player.tech.features['volumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }));\n  }\n});\n\nvjs.MuteToggle.prototype.createEl = function(){\n  return vjs.Button.prototype.createEl.call(this, 'div', {\n    className: 'vjs-mute-control vjs-control',\n    innerHTML: '<div><span class=\"vjs-control-text\">Mute</span></div>'\n  });\n};\n\nvjs.MuteToggle.prototype.onClick = function(){\n  this.player_.muted( this.player_.muted() ? false : true );\n};\n\nvjs.MuteToggle.prototype.update = function(){\n  var vol = this.player_.volume(),\n      level = 3;\n\n  if (vol === 0 || this.player_.muted()) {\n    level = 0;\n  } else if (vol < 0.33) {\n    level = 1;\n  } else if (vol < 0.67) {\n    level = 2;\n  }\n\n  // Don't rewrite the button text if the actual text doesn't change.\n  // This causes unnecessary and confusing information for screen reader users.\n  // This check is needed because this function gets called every time the volume level is changed.\n  if(this.player_.muted()){\n      if(this.el_.children[0].children[0].innerHTML!='Unmute'){\n          this.el_.children[0].children[0].innerHTML = 'Unmute'; // change the button text to \"Unmute\"\n      }\n  } else {\n      if(this.el_.children[0].children[0].innerHTML!='Mute'){\n          this.el_.children[0].children[0].innerHTML = 'Mute'; // change the button text to \"Mute\"\n      }\n  }\n\n  /* TODO improve muted icon classes */\n  for (var i = 0; i < 4; i++) {\n    vjs.removeClass(this.el_, 'vjs-vol-'+i);\n  }\n  vjs.addClass(this.el_, 'vjs-vol-'+level);\n};\n/**\n * Menu button with a popup for showing the volume slider.\n * @constructor\n */\nvjs.VolumeMenuButton = vjs.MenuButton.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.MenuButton.call(this, player, options);\n\n    // Same listeners as MuteToggle\n    player.on('volumechange', vjs.bind(this, this.update));\n\n    // hide mute toggle if the current tech doesn't support volume control\n    if (player.tech && player.tech.features && player.tech.features.volumeControl === false) {\n      this.addClass('vjs-hidden');\n    }\n    player.on('loadstart', vjs.bind(this, function(){\n      if (player.tech.features && player.tech.features.volumeControl === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }));\n    this.addClass('vjs-menu-button');\n  }\n});\n\nvjs.VolumeMenuButton.prototype.createMenu = function(){\n  var menu = new vjs.Menu(this.player_, {\n    contentElType: 'div'\n  });\n  var vc = new vjs.VolumeBar(this.player_, vjs.obj.merge({vertical: true}, this.options_.volumeBar));\n  menu.addChild(vc);\n  return menu;\n};\n\nvjs.VolumeMenuButton.prototype.onClick = function(){\n  vjs.MuteToggle.prototype.onClick.call(this);\n  vjs.MenuButton.prototype.onClick.call(this);\n};\n\nvjs.VolumeMenuButton.prototype.createEl = function(){\n  return vjs.Button.prototype.createEl.call(this, 'div', {\n    className: 'vjs-volume-menu-button vjs-menu-button vjs-control',\n    innerHTML: '<div><span class=\"vjs-control-text\">Mute</span></div>'\n  });\n};\nvjs.VolumeMenuButton.prototype.update = vjs.MuteToggle.prototype.update;\n/* Poster Image\n================================================================================ */\n/**\n * The component that handles showing the poster image.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.PosterImage = vjs.Button.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Button.call(this, player, options);\n\n    if (!player.poster() || !player.controls()) {\n      this.hide();\n    }\n\n    player.on('play', vjs.bind(this, this.hide));\n  }\n});\n\nvjs.PosterImage.prototype.createEl = function(){\n  var el = vjs.createEl('div', {\n        className: 'vjs-poster',\n\n        // Don't want poster to be tabbable.\n        tabIndex: -1\n      }),\n      poster = this.player_.poster();\n\n  if (poster) {\n    if ('backgroundSize' in el.style) {\n      el.style.backgroundImage = 'url(\"' + poster + '\")';\n    } else {\n      el.appendChild(vjs.createEl('img', { src: poster }));\n    }\n  }\n\n  return el;\n};\n\nvjs.PosterImage.prototype.onClick = function(){\n  // Only accept clicks when controls are enabled\n  if (this.player().controls()) {\n    this.player_.play();\n  }\n};\n/* Loading Spinner\n================================================================================ */\n/**\n * Loading spinner for waiting events\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.LoadingSpinner = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    player.on('canplay', vjs.bind(this, this.hide));\n    player.on('canplaythrough', vjs.bind(this, this.hide));\n    player.on('playing', vjs.bind(this, this.hide));\n    player.on('seeked', vjs.bind(this, this.hide));\n\n    player.on('seeking', vjs.bind(this, this.show));\n\n    // in some browsers seeking does not trigger the 'playing' event,\n    // so we also need to trap 'seeked' if we are going to set a\n    // 'seeking' event\n    player.on('seeked', vjs.bind(this, this.hide));\n\n    player.on('error', vjs.bind(this, this.show));\n\n    // Not showing spinner on stalled any more. Browsers may stall and then not trigger any events that would remove the spinner.\n    // Checked in Chrome 16 and Safari 5.1.2. http://help.videojs.com/discussions/problems/883-why-is-the-download-progress-showing\n    // player.on('stalled', vjs.bind(this, this.show));\n\n    player.on('waiting', vjs.bind(this, this.show));\n  }\n});\n\nvjs.LoadingSpinner.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-loading-spinner'\n  });\n};\n/* Big Play Button\n================================================================================ */\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nvjs.BigPlayButton = vjs.Button.extend();\n\nvjs.BigPlayButton.prototype.createEl = function(){\n  return vjs.Button.prototype.createEl.call(this, 'div', {\n    className: 'vjs-big-play-button',\n    innerHTML: '<span aria-hidden=\"true\"></span>',\n    'aria-label': 'play video'\n  });\n};\n\nvjs.BigPlayButton.prototype.onClick = function(){\n  this.player_.play();\n};\n/**\n * @fileoverview Media Technology Controller - Base class for media playback\n * technology controllers like Flash and HTML5\n */\n\n/**\n * Base class for media (HTML5 Video, Flash) controllers\n * @param {vjs.Player|Object} player  Central player instance\n * @param {Object=} options Options object\n * @constructor\n */\nvjs.MediaTechController = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.Component.call(this, player, options, ready);\n\n    this.initControlsListeners();\n  }\n});\n\n/**\n * Set up click and touch listeners for the playback element\n * On desktops, a click on the video itself will toggle playback,\n * on a mobile device a click on the video toggles controls.\n * (toggling controls is done by toggling the user state between active and\n * inactive)\n *\n * A tap can signal that a user has become active, or has become inactive\n * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n * quick tap should hide them again (signaling the user is in an inactive\n * viewing state)\n *\n * In addition to this, we still want the user to be considered inactive after\n * a few seconds of inactivity.\n *\n * Note: the only part of iOS interaction we can't mimic with this setup\n * is a touch and hold on the video element counting as activity in order to\n * keep the controls showing, but that shouldn't be an issue. A touch and hold on\n * any controls will still keep the user active\n */\nvjs.MediaTechController.prototype.initControlsListeners = function(){\n  var player, tech, activateControls, deactivateControls;\n\n  tech = this;\n  player = this.player();\n\n  var activateControls = function(){\n    if (player.controls() && !player.usingNativeControls()) {\n      tech.addControlsListeners();\n    }\n  };\n\n  deactivateControls = vjs.bind(tech, tech.removeControlsListeners);\n\n  // Set up event listeners once the tech is ready and has an element to apply\n  // listeners to\n  this.ready(activateControls);\n  player.on('controlsenabled', activateControls);\n  player.on('controlsdisabled', deactivateControls);\n};\n\nvjs.MediaTechController.prototype.addControlsListeners = function(){\n  var preventBubble, userWasActive;\n\n  // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n  // trigger mousedown/up.\n  // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n  // Any touch events are set to block the mousedown event from happening\n  this.on('mousedown', this.onClick);\n\n  // We need to block touch events on the video element from bubbling up,\n  // otherwise they'll signal activity prematurely. The specific use case is\n  // when the video is playing and the controls have faded out. In this case\n  // only a tap (fast touch) should toggle the user active state and turn the\n  // controls back on. A touch and move or touch and hold should not trigger\n  // the controls (per iOS as an example at least)\n  //\n  // We always want to stop propagation on touchstart because touchstart\n  // at the player level starts the touchInProgress interval. We can still\n  // report activity on the other events, but won't let them bubble for\n  // consistency. We don't want to bubble a touchend without a touchstart.\n  this.on('touchstart', function(event) {\n    // Stop the mouse events from also happening\n    event.preventDefault();\n    event.stopPropagation();\n    // Record if the user was active now so we don't have to keep polling it\n    userWasActive = this.player_.userActive();\n  });\n\n  preventBubble = function(event){\n    event.stopPropagation();\n    if (userWasActive) {\n      this.player_.reportUserActivity();\n    }\n  };\n\n  // Treat all touch events the same for consistency\n  this.on('touchmove', preventBubble);\n  this.on('touchleave', preventBubble);\n  this.on('touchcancel', preventBubble);\n  this.on('touchend', preventBubble);\n\n  // Turn on component tap events\n  this.emitTapEvents();\n\n  // The tap listener needs to come after the touchend listener because the tap\n  // listener cancels out any reportedUserActivity when setting userActive(false)\n  this.on('tap', this.onTap);\n};\n\n/**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n */\nvjs.MediaTechController.prototype.removeControlsListeners = function(){\n  // We don't want to just use `this.off()` because there might be other needed\n  // listeners added by techs that extend this.\n  this.off('tap');\n  this.off('touchstart');\n  this.off('touchmove');\n  this.off('touchleave');\n  this.off('touchcancel');\n  this.off('touchend');\n  this.off('click');\n  this.off('mousedown');\n};\n\n/**\n * Handle a click on the media element. By default will play/pause the media.\n */\nvjs.MediaTechController.prototype.onClick = function(event){\n  // We're using mousedown to detect clicks thanks to Flash, but mousedown\n  // will also be triggered with right-clicks, so we need to prevent that\n  if (event.button !== 0) return;\n\n  // When controls are disabled a click should not toggle playback because\n  // the click is considered a control\n  if (this.player().controls()) {\n    if (this.player().paused()) {\n      this.player().play();\n    } else {\n      this.player().pause();\n    }\n  }\n};\n\n/**\n * Handle a tap on the media element. By default it will toggle the user\n * activity state, which hides and shows the controls.\n */\n\nvjs.MediaTechController.prototype.onTap = function(){\n  this.player().userActive(!this.player().userActive());\n};\n\nvjs.MediaTechController.prototype.features = {\n  'volumeControl': true,\n\n  // Resizing plugins using request fullscreen reloads the plugin\n  'fullscreenResize': false,\n\n  // Optional events that we can manually mimic with timers\n  // currently not triggered by video-js-swf\n  'progressEvents': false,\n  'timeupdateEvents': false\n};\n\nvjs.media = {};\n\n/**\n * List of default API methods for any MediaTechController\n * @type {String}\n */\nvjs.media.ApiMethods = 'play,pause,paused,currentTime,setCurrentTime,duration,buffered,volume,setVolume,muted,setMuted,width,height,supportsFullScreen,enterFullScreen,src,load,currentSrc,preload,setPreload,autoplay,setAutoplay,loop,setLoop,error,networkState,readyState,seeking,initialTime,startOffsetTime,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks,defaultPlaybackRate,playbackRate,mediaGroup,controller,controls,defaultMuted'.split(',');\n// Create placeholder methods for each that warn when a method isn't supported by the current playback technology\n\nfunction createMethod(methodName){\n  return function(){\n    throw new Error('The \"'+methodName+'\" method is not available on the playback technology\\'s API');\n  };\n}\n\nfor (var i = vjs.media.ApiMethods.length - 1; i >= 0; i--) {\n  var methodName = vjs.media.ApiMethods[i];\n  vjs.MediaTechController.prototype[vjs.media.ApiMethods[i]] = createMethod(methodName);\n}\n/**\n * @fileoverview HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @param {Function=} ready\n * @constructor\n */\nvjs.Html5 = vjs.MediaTechController.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    // volume cannot be changed from 1 on iOS\n    this.features['volumeControl'] = vjs.Html5.canControlVolume();\n\n    // In iOS, if you move a video element in the DOM, it breaks video playback.\n    this.features['movingMediaElementInDOM'] = !vjs.IS_IOS;\n\n    // HTML video is able to automatically resize when going to fullscreen\n    this.features['fullscreenResize'] = true;\n\n    vjs.MediaTechController.call(this, player, options, ready);\n\n    var source = options['source'];\n\n    // If the element source is already set, we may have missed the loadstart event, and want to trigger it.\n    // We don't want to set the source again and interrupt playback.\n    if (source && this.el_.currentSrc === source.src && this.el_.networkState > 0) {\n      player.trigger('loadstart');\n\n    // Otherwise set the source if one was provided.\n    } else if (source) {\n      this.el_.src = source.src;\n    }\n\n    // Determine if native controls should be used\n    // Our goal should be to get the custom controls on mobile solid everywhere\n    // so we can remove this all together. Right now this will block custom\n    // controls on touch enabled laptops like the Chrome Pixel\n    if (vjs.TOUCH_ENABLED && player.options()['nativeControlsForTouch'] !== false) {\n      this.useNativeControls();\n    }\n\n    // Chrome and Safari both have issues with autoplay.\n    // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n    // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n    // This fixes both issues. Need to wait for API, so it updates displays correctly\n    player.ready(function(){\n      if (this.tag && this.options_['autoplay'] && this.paused()) {\n        delete this.tag['poster']; // Chrome Fix. Fixed in Chrome v16.\n        this.play();\n      }\n    });\n\n    this.setupTriggers();\n    this.triggerReady();\n  }\n});\n\nvjs.Html5.prototype.dispose = function(){\n  vjs.MediaTechController.prototype.dispose.call(this);\n};\n\nvjs.Html5.prototype.createEl = function(){\n  var player = this.player_,\n      // If possible, reuse original tag for HTML5 playback technology element\n      el = player.tag,\n      newEl,\n      clone;\n\n  // Check if this browser supports moving the element into the box.\n  // On the iPhone video will break if you move the element,\n  // So we have to create a brand new element.\n  if (!el || this.features['movingMediaElementInDOM'] === false) {\n\n    // If the original tag is still there, clone and remove it.\n    if (el) {\n      clone = el.cloneNode(false);\n      vjs.Html5.disposeMediaElement(el);\n      el = clone;\n      player.tag = null;\n    } else {\n      el = vjs.createEl('video', {\n        id:player.id() + '_html5_api',\n        className:'vjs-tech'\n      });\n    }\n    // associate the player with the new tag\n    el['player'] = player;\n\n    vjs.insertFirst(el, player.el());\n  }\n\n  // Update specific tag settings, in case they were overridden\n  var attrs = ['autoplay','preload','loop','muted'];\n  for (var i = attrs.length - 1; i >= 0; i--) {\n    var attr = attrs[i];\n    if (player.options_[attr] !== null) {\n      el[attr] = player.options_[attr];\n    }\n  }\n\n  return el;\n  // jenniisawesome = true;\n};\n\n// Make video events trigger player events\n// May seem verbose here, but makes other APIs possible.\nvjs.Html5.prototype.setupTriggers = function(){\n  for (var i = vjs.Html5.Events.length - 1; i >= 0; i--) {\n    vjs.on(this.el_, vjs.Html5.Events[i], vjs.bind(this.player_, this.eventHandler));\n  }\n};\n// Triggers removed using this.off when disposed\n\nvjs.Html5.prototype.eventHandler = function(e){\n  this.trigger(e);\n\n  // No need for media events to bubble up.\n  e.stopPropagation();\n};\n\nvjs.Html5.prototype.useNativeControls = function(){\n  var tech, player, controlsOn, controlsOff, cleanUp;\n\n  tech = this;\n  player = this.player();\n\n  // If the player controls are enabled turn on the native controls\n  tech.setControls(player.controls());\n\n  // Update the native controls when player controls state is updated\n  controlsOn = function(){\n    tech.setControls(true);\n  };\n  controlsOff = function(){\n    tech.setControls(false);\n  };\n  player.on('controlsenabled', controlsOn);\n  player.on('controlsdisabled', controlsOff);\n\n  // Clean up when not using native controls anymore\n  cleanUp = function(){\n    player.off('controlsenabled', controlsOn);\n    player.off('controlsdisabled', controlsOff);\n  };\n  tech.on('dispose', cleanUp);\n  player.on('usingcustomcontrols', cleanUp);\n\n  // Update the state of the player to using native controls\n  player.usingNativeControls(true);\n};\n\n\nvjs.Html5.prototype.play = function(){ this.el_.play(); };\nvjs.Html5.prototype.pause = function(){ this.el_.pause(); };\nvjs.Html5.prototype.paused = function(){ return this.el_.paused; };\n\nvjs.Html5.prototype.currentTime = function(){ return this.el_.currentTime; };\nvjs.Html5.prototype.setCurrentTime = function(seconds){\n  try {\n    this.el_.currentTime = seconds;\n  } catch(e) {\n    vjs.log(e, 'Video is not ready. (Video.js)');\n    // this.warning(VideoJS.warnings.videoNotReady);\n  }\n};\n\nvjs.Html5.prototype.duration = function(){ return this.el_.duration || 0; };\nvjs.Html5.prototype.buffered = function(){ return this.el_.buffered; };\n\nvjs.Html5.prototype.volume = function(){ return this.el_.volume; };\nvjs.Html5.prototype.setVolume = function(percentAsDecimal){ this.el_.volume = percentAsDecimal; };\nvjs.Html5.prototype.muted = function(){ return this.el_.muted; };\nvjs.Html5.prototype.setMuted = function(muted){ this.el_.muted = muted; };\n\nvjs.Html5.prototype.width = function(){ return this.el_.offsetWidth; };\nvjs.Html5.prototype.height = function(){ return this.el_.offsetHeight; };\n\nvjs.Html5.prototype.supportsFullScreen = function(){\n  if (typeof this.el_.webkitEnterFullScreen == 'function') {\n\n    // Seems to be broken in Chromium/Chrome && Safari in Leopard\n    if (/Android/.test(vjs.USER_AGENT) || !/Chrome|Mac OS X 10.5/.test(vjs.USER_AGENT)) {\n      return true;\n    }\n  }\n  return false;\n};\n\nvjs.Html5.prototype.enterFullScreen = function(){\n  var video = this.el_;\n  if (video.paused && video.networkState <= video.HAVE_METADATA) {\n    // attempt to prime the video element for programmatic access\n    // this isn't necessary on the desktop but shouldn't hurt\n    this.el_.play();\n\n    // playing and pausing synchronously during the transition to fullscreen\n    // can get iOS ~6.1 devices into a play/pause loop\n    setTimeout(function(){\n      video.pause();\n      video.webkitEnterFullScreen();\n    }, 0);\n  } else {\n    video.webkitEnterFullScreen();\n  }\n};\nvjs.Html5.prototype.exitFullScreen = function(){\n  this.el_.webkitExitFullScreen();\n};\nvjs.Html5.prototype.src = function(src){ this.el_.src = src; };\nvjs.Html5.prototype.load = function(){ this.el_.load(); };\nvjs.Html5.prototype.currentSrc = function(){ return this.el_.currentSrc; };\n\nvjs.Html5.prototype.preload = function(){ return this.el_.preload; };\nvjs.Html5.prototype.setPreload = function(val){ this.el_.preload = val; };\n\nvjs.Html5.prototype.autoplay = function(){ return this.el_.autoplay; };\nvjs.Html5.prototype.setAutoplay = function(val){ this.el_.autoplay = val; };\n\nvjs.Html5.prototype.controls = function(){ return this.el_.controls; }\nvjs.Html5.prototype.setControls = function(val){ this.el_.controls = !!val; }\n\nvjs.Html5.prototype.loop = function(){ return this.el_.loop; };\nvjs.Html5.prototype.setLoop = function(val){ this.el_.loop = val; };\n\nvjs.Html5.prototype.error = function(){ return this.el_.error; };\nvjs.Html5.prototype.seeking = function(){ return this.el_.seeking; };\nvjs.Html5.prototype.ended = function(){ return this.el_.ended; };\nvjs.Html5.prototype.defaultMuted = function(){ return this.el_.defaultMuted; };\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\nvjs.Html5.isSupported = function(){\n  return !!vjs.TEST_VID.canPlayType;\n};\n\nvjs.Html5.canPlaySource = function(srcObj){\n  // IE9 on Windows 7 without MediaPlayer throws an error here\n  // https://github.com/videojs/video.js/issues/519\n  try {\n    return !!vjs.TEST_VID.canPlayType(srcObj.type);\n  } catch(e) {\n    return '';\n  }\n  // TODO: Check Type\n  // If no Type, check ext\n  // Check Media Type\n};\n\nvjs.Html5.canControlVolume = function(){\n  var volume =  vjs.TEST_VID.volume;\n  vjs.TEST_VID.volume = (volume / 2) + 0.1;\n  return volume !== vjs.TEST_VID.volume;\n};\n\n// List of all HTML5 events (various uses).\nvjs.Html5.Events = 'loadstart,suspend,abort,error,emptied,stalled,loadedmetadata,loadeddata,canplay,canplaythrough,playing,waiting,seeking,seeked,ended,durationchange,timeupdate,progress,play,pause,ratechange,volumechange'.split(',');\n\nvjs.Html5.disposeMediaElement = function(el){\n  if (!el) { return; }\n\n  el['player'] = null;\n\n  if (el.parentNode) {\n    el.parentNode.removeChild(el);\n  }\n\n  // remove any child track or source nodes to prevent their loading\n  while(el.hasChildNodes()) {\n    el.removeChild(el.firstChild);\n  }\n\n  // remove any src reference. not setting `src=''` because that causes a warning\n  // in firefox\n  el.removeAttribute('src');\n\n  // force the media element to update its loading state by calling load()\n  if (typeof el.load === 'function') {\n    el.load();\n  }\n};\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\n\n  // Override Android 2.2 and less canPlayType method which is broken\nif (vjs.IS_OLD_ANDROID) {\n  document.createElement('video').constructor.prototype.canPlayType = function(type){\n    return (type && type.toLowerCase().indexOf('video/mp4') != -1) ? 'maybe' : '';\n  };\n}\n/**\n * @fileoverview VideoJS-SWF - Custom Flash Player with HTML5-ish API\n * https://github.com/zencoder/video-js-swf\n * Not using setupTriggers. Using global onEvent func to distribute events\n */\n\n/**\n * Flash Media Controller - Wrapper for fallback SWF API\n *\n * @param {vjs.Player} player\n * @param {Object=} options\n * @param {Function=} ready\n * @constructor\n */\nvjs.Flash = vjs.MediaTechController.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.MediaTechController.call(this, player, options, ready);\n\n    var source = options['source'],\n\n        // Which element to embed in\n        parentEl = options['parentEl'],\n\n        // Create a temporary element to be replaced by swf object\n        placeHolder = this.el_ = vjs.createEl('div', { id: player.id() + '_temp_flash' }),\n\n        // Generate ID for swf object\n        objId = player.id()+'_flash_api',\n\n        // Store player options in local var for optimization\n        // TODO: switch to using player methods instead of options\n        // e.g. player.autoplay();\n        playerOptions = player.options_,\n\n        // Merge default flashvars with ones passed in to init\n        flashVars = vjs.obj.merge({\n\n          // SWF Callback Functions\n          'readyFunction': 'videojs.Flash.onReady',\n          'eventProxyFunction': 'videojs.Flash.onEvent',\n          'errorEventProxyFunction': 'videojs.Flash.onError',\n\n          // Player Settings\n          'autoplay': playerOptions.autoplay,\n          'preload': playerOptions.preload,\n          'loop': playerOptions.loop,\n          'muted': playerOptions.muted\n\n        }, options['flashVars']),\n\n        // Merge default parames with ones passed in\n        params = vjs.obj.merge({\n          'wmode': 'opaque', // Opaque is needed to overlay controls, but can affect playback performance\n          'bgcolor': '#000000' // Using bgcolor prevents a white flash when the object is loading\n        }, options['params']),\n\n        // Merge default attributes with ones passed in\n        attributes = vjs.obj.merge({\n          'id': objId,\n          'name': objId, // Both ID and Name needed or swf to identifty itself\n          'class': 'vjs-tech'\n        }, options['attributes'])\n    ;\n\n    // If source was supplied pass as a flash var.\n    if (source) {\n      if (source.type && vjs.Flash.isStreamingType(source.type)) {\n        var parts = vjs.Flash.streamToParts(source.src);\n        flashVars['rtmpConnection'] = encodeURIComponent(parts.connection);\n        flashVars['rtmpStream'] = encodeURIComponent(parts.stream);\n      }\n      else {\n        flashVars['src'] = encodeURIComponent(vjs.getAbsoluteURL(source.src));\n      }\n    }\n\n    // Add placeholder to player div\n    vjs.insertFirst(placeHolder, parentEl);\n\n    // Having issues with Flash reloading on certain page actions (hide/resize/fullscreen) in certain browsers\n    // This allows resetting the playhead when we catch the reload\n    if (options['startTime']) {\n      this.ready(function(){\n        this.load();\n        this.play();\n        this.currentTime(options['startTime']);\n      });\n    }\n\n    // Flash iFrame Mode\n    // In web browsers there are multiple instances where changing the parent element or visibility of a plugin causes the plugin to reload.\n    // - Firefox just about always. https://bugzilla.mozilla.org/show_bug.cgi?id=90268 (might be fixed by version 13)\n    // - Webkit when hiding the plugin\n    // - Webkit and Firefox when using requestFullScreen on a parent element\n    // Loading the flash plugin into a dynamically generated iFrame gets around most of these issues.\n    // Issues that remain include hiding the element and requestFullScreen in Firefox specifically\n\n    // There's on particularly annoying issue with this method which is that Firefox throws a security error on an offsite Flash object loaded into a dynamically created iFrame.\n    // Even though the iframe was inserted into a page on the web, Firefox + Flash considers it a local app trying to access an internet file.\n    // I tried mulitple ways of setting the iframe src attribute but couldn't find a src that worked well. Tried a real/fake source, in/out of domain.\n    // Also tried a method from stackoverflow that caused a security error in all browsers. http://stackoverflow.com/questions/2486901/how-to-set-document-domain-for-a-dynamically-generated-iframe\n    // In the end the solution I found to work was setting the iframe window.location.href right before doing a document.write of the Flash object.\n    // The only downside of this it seems to trigger another http request to the original page (no matter what's put in the href). Not sure why that is.\n\n    // NOTE (2012-01-29): Cannot get Firefox to load the remote hosted SWF into a dynamically created iFrame\n    // Firefox 9 throws a security error, unleess you call location.href right before doc.write.\n    //    Not sure why that even works, but it causes the browser to look like it's continuously trying to load the page.\n    // Firefox 3.6 keeps calling the iframe onload function anytime I write to it, causing an endless loop.\n\n    if (options['iFrameMode'] === true && !vjs.IS_FIREFOX) {\n\n      // Create iFrame with vjs-tech class so it's 100% width/height\n      var iFrm = vjs.createEl('iframe', {\n        'id': objId + '_iframe',\n        'name': objId + '_iframe',\n        'className': 'vjs-tech',\n        'scrolling': 'no',\n        'marginWidth': 0,\n        'marginHeight': 0,\n        'frameBorder': 0\n      });\n\n      // Update ready function names in flash vars for iframe window\n      flashVars['readyFunction'] = 'ready';\n      flashVars['eventProxyFunction'] = 'events';\n      flashVars['errorEventProxyFunction'] = 'errors';\n\n      // Tried multiple methods to get this to work in all browsers\n\n      // Tried embedding the flash object in the page first, and then adding a place holder to the iframe, then replacing the placeholder with the page object.\n      // The goal here was to try to load the swf URL in the parent page first and hope that got around the firefox security error\n      // var newObj = vjs.Flash.embed(options['swf'], placeHolder, flashVars, params, attributes);\n      // (in onload)\n      //  var temp = vjs.createEl('a', { id:'asdf', innerHTML: 'asdf' } );\n      //  iDoc.body.appendChild(temp);\n\n      // Tried embedding the flash object through javascript in the iframe source.\n      // This works in webkit but still triggers the firefox security error\n      // iFrm.src = 'javascript: document.write('\"+vjs.Flash.getEmbedCode(options['swf'], flashVars, params, attributes)+\"');\";\n\n      // Tried an actual local iframe just to make sure that works, but it kills the easiness of the CDN version if you require the user to host an iframe\n      // We should add an option to host the iframe locally though, because it could help a lot of issues.\n      // iFrm.src = \"iframe.html\";\n\n      // Wait until iFrame has loaded to write into it.\n      vjs.on(iFrm, 'load', vjs.bind(this, function(){\n\n        var iDoc,\n            iWin = iFrm.contentWindow;\n\n        // The one working method I found was to use the iframe's document.write() to create the swf object\n        // This got around the security issue in all browsers except firefox.\n        // I did find a hack where if I call the iframe's window.location.href='', it would get around the security error\n        // However, the main page would look like it was loading indefinitely (URL bar loading spinner would never stop)\n        // Plus Firefox 3.6 didn't work no matter what I tried.\n        // if (vjs.USER_AGENT.match('Firefox')) {\n        //   iWin.location.href = '';\n        // }\n\n        // Get the iFrame's document depending on what the browser supports\n        iDoc = iFrm.contentDocument ? iFrm.contentDocument : iFrm.contentWindow.document;\n\n        // Tried ensuring both document domains were the same, but they already were, so that wasn't the issue.\n        // Even tried adding /. that was mentioned in a browser security writeup\n        // document.domain = document.domain+'/.';\n        // iDoc.domain = document.domain+'/.';\n\n        // Tried adding the object to the iframe doc's innerHTML. Security error in all browsers.\n        // iDoc.body.innerHTML = swfObjectHTML;\n\n        // Tried appending the object to the iframe doc's body. Security error in all browsers.\n        // iDoc.body.appendChild(swfObject);\n\n        // Using document.write actually got around the security error that browsers were throwing.\n        // Again, it's a dynamically generated (same domain) iframe, loading an external Flash swf.\n        // Not sure why that's a security issue, but apparently it is.\n        iDoc.write(vjs.Flash.getEmbedCode(options['swf'], flashVars, params, attributes));\n\n        // Setting variables on the window needs to come after the doc write because otherwise they can get reset in some browsers\n        // So far no issues with swf ready event being called before it's set on the window.\n        iWin['player'] = this.player_;\n\n        // Create swf ready function for iFrame window\n        iWin['ready'] = vjs.bind(this.player_, function(currSwf){\n          var el = iDoc.getElementById(currSwf),\n              player = this,\n              tech = player.tech;\n\n          // Update reference to playback technology element\n          tech.el_ = el;\n\n          // Make sure swf is actually ready. Sometimes the API isn't actually yet.\n          vjs.Flash.checkReady(tech);\n        });\n\n        // Create event listener for all swf events\n        iWin['events'] = vjs.bind(this.player_, function(swfID, eventName){\n          var player = this;\n          if (player && player.techName === 'flash') {\n            player.trigger(eventName);\n          }\n        });\n\n        // Create error listener for all swf errors\n        iWin['errors'] = vjs.bind(this.player_, function(swfID, eventName){\n          vjs.log('Flash Error', eventName);\n        });\n\n      }));\n\n      // Replace placeholder with iFrame (it will load now)\n      placeHolder.parentNode.replaceChild(iFrm, placeHolder);\n\n    // If not using iFrame mode, embed as normal object\n    } else {\n      vjs.Flash.embed(options['swf'], placeHolder, flashVars, params, attributes);\n    }\n  }\n});\n\nvjs.Flash.prototype.dispose = function(){\n  vjs.MediaTechController.prototype.dispose.call(this);\n};\n\nvjs.Flash.prototype.play = function(){\n  this.el_.vjs_play();\n};\n\nvjs.Flash.prototype.pause = function(){\n  this.el_.vjs_pause();\n};\n\nvjs.Flash.prototype.src = function(src){\n  if (vjs.Flash.isStreamingSrc(src)) {\n    src = vjs.Flash.streamToParts(src);\n    this.setRtmpConnection(src.connection);\n    this.setRtmpStream(src.stream);\n  }\n  else {\n    // Make sure source URL is abosolute.\n    src = vjs.getAbsoluteURL(src);\n    this.el_.vjs_src(src);\n  }\n\n  // Currently the SWF doesn't autoplay if you load a source later.\n  // e.g. Load player w/ no source, wait 2s, set src.\n  if (this.player_.autoplay()) {\n    var tech = this;\n    setTimeout(function(){ tech.play(); }, 0);\n  }\n};\n\nvjs.Flash.prototype.currentSrc = function(){\n  var src = this.el_.vjs_getProperty('currentSrc');\n  // no src, check and see if RTMP\n  if (src == null) {\n    var connection = this.rtmpConnection(),\n        stream = this.rtmpStream();\n\n    if (connection && stream) {\n      src = vjs.Flash.streamFromParts(connection, stream);\n    }\n  }\n  return src;\n};\n\nvjs.Flash.prototype.load = function(){\n  this.el_.vjs_load();\n};\n\nvjs.Flash.prototype.poster = function(){\n  this.el_.vjs_getProperty('poster');\n};\n\nvjs.Flash.prototype.buffered = function(){\n  return vjs.createTimeRange(0, this.el_.vjs_getProperty('buffered'));\n};\n\nvjs.Flash.prototype.supportsFullScreen = function(){\n  return false; // Flash does not allow fullscreen through javascript\n};\n\nvjs.Flash.prototype.enterFullScreen = function(){\n  return false;\n};\n\n\n// Create setters and getters for attributes\nvar api = vjs.Flash.prototype,\n    readWrite = 'rtmpConnection,rtmpStream,preload,currentTime,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(','),\n    readOnly = 'error,currentSrc,networkState,readyState,seeking,initialTime,duration,startOffsetTime,paused,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks'.split(',');\n    // Overridden: buffered\n\n/**\n * @this {*}\n * @private\n */\nvar createSetter = function(attr){\n  var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n  api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n};\n\n/**\n * @this {*}\n * @private\n */\nvar createGetter = function(attr){\n  api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n};\n\n(function(){\n  var i;\n  // Create getter and setters for all read/write attributes\n  for (i = 0; i < readWrite.length; i++) {\n    createGetter(readWrite[i]);\n    createSetter(readWrite[i]);\n  }\n\n  // Create getters for read-only attributes\n  for (i = 0; i < readOnly.length; i++) {\n    createGetter(readOnly[i]);\n  }\n})();\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nvjs.Flash.isSupported = function(){\n  return vjs.Flash.version()[0] >= 10;\n  // return swfobject.hasFlashPlayerVersion('10');\n};\n\nvjs.Flash.canPlaySource = function(srcObj){\n  var type;\n\n  if (!srcObj.type) {\n    return '';\n  }\n\n  type = srcObj.type.replace(/;.*/,'').toLowerCase();\n  if (type in vjs.Flash.formats || type in vjs.Flash.streamingFormats) {\n    return 'maybe';\n  }\n};\n\nvjs.Flash.formats = {\n  'video/flv': 'FLV',\n  'video/x-flv': 'FLV',\n  'video/mp4': 'MP4',\n  'video/m4v': 'MP4'\n};\n\nvjs.Flash.streamingFormats = {\n  'rtmp/mp4': 'MP4',\n  'rtmp/flv': 'FLV'\n};\n\nvjs.Flash['onReady'] = function(currSwf){\n  var el = vjs.el(currSwf);\n\n  // Get player from box\n  // On firefox reloads, el might already have a player\n  var player = el['player'] || el.parentNode['player'],\n      tech = player.tech;\n\n  // Reference player on tech element\n  el['player'] = player;\n\n  // Update reference to playback technology element\n  tech.el_ = el;\n\n  vjs.Flash.checkReady(tech);\n};\n\n// The SWF isn't alwasy ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nvjs.Flash.checkReady = function(tech){\n\n  // Check if API property exists\n  if (tech.el().vjs_getProperty) {\n\n    // If so, tell tech it's ready\n    tech.triggerReady();\n\n  // Otherwise wait longer.\n  } else {\n\n    setTimeout(function(){\n      vjs.Flash.checkReady(tech);\n    }, 50);\n\n  }\n};\n\n// Trigger events from the swf on the player\nvjs.Flash['onEvent'] = function(swfID, eventName){\n  var player = vjs.el(swfID)['player'];\n  player.trigger(eventName);\n};\n\n// Log errors from the swf\nvjs.Flash['onError'] = function(swfID, err){\n  var player = vjs.el(swfID)['player'];\n  player.trigger('error');\n  vjs.log('Flash Error', err, swfID);\n};\n\n// Flash Version Check\nvjs.Flash.version = function(){\n  var version = '0,0,0';\n\n  // IE\n  try {\n    version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n  // other browsers\n  } catch(e) {\n    try {\n      if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n        version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n      }\n    } catch(err) {}\n  }\n  return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nvjs.Flash.embed = function(swf, placeHolder, flashVars, params, attributes){\n  var code = vjs.Flash.getEmbedCode(swf, flashVars, params, attributes),\n\n      // Get element by embedding code and retrieving created element\n      obj = vjs.createEl('div', { innerHTML: code }).childNodes[0],\n\n      par = placeHolder.parentNode\n  ;\n\n  placeHolder.parentNode.replaceChild(obj, placeHolder);\n\n  // IE6 seems to have an issue where it won't initialize the swf object after injecting it.\n  // This is a dumb fix\n  var newObj = par.childNodes[0];\n  setTimeout(function(){\n    newObj.style.display = 'block';\n  }, 1000);\n\n  return obj;\n\n};\n\nvjs.Flash.getEmbedCode = function(swf, flashVars, params, attributes){\n\n  var objTag = '<object type=\"application/x-shockwave-flash\"',\n      flashVarsString = '',\n      paramsString = '',\n      attrsString = '';\n\n  // Convert flash vars to string\n  if (flashVars) {\n    vjs.obj.each(flashVars, function(key, val){\n      flashVarsString += (key + '=' + val + '&amp;');\n    });\n  }\n\n  // Add swf, flashVars, and other default params\n  params = vjs.obj.merge({\n    'movie': swf,\n    'flashvars': flashVarsString,\n    'allowScriptAccess': 'always', // Required to talk to swf\n    'allowNetworking': 'all' // All should be default, but having security issues.\n  }, params);\n\n  // Create param tags string\n  vjs.obj.each(params, function(key, val){\n    paramsString += '<param name=\"'+key+'\" value=\"'+val+'\" />';\n  });\n\n  attributes = vjs.obj.merge({\n    // Add swf to attributes (need both for IE and Others to work)\n    'data': swf,\n\n    // Default to 100% width/height\n    'width': '100%',\n    'height': '100%'\n\n  }, attributes);\n\n  // Create Attributes string\n  vjs.obj.each(attributes, function(key, val){\n    attrsString += (key + '=\"' + val + '\" ');\n  });\n\n  return objTag + attrsString + '>' + paramsString + '</object>';\n};\n\nvjs.Flash.streamFromParts = function(connection, stream) {\n  return connection + '&' + stream;\n};\n\nvjs.Flash.streamToParts = function(src) {\n  var parts = {\n    connection: '',\n    stream: ''\n  };\n\n  if (! src) {\n    return parts;\n  }\n\n  // Look for the normal URL separator we expect, '&'.\n  // If found, we split the URL into two pieces around the\n  // first '&'.\n  var connEnd = src.indexOf('&');\n  var streamBegin;\n  if (connEnd !== -1) {\n    streamBegin = connEnd + 1;\n  }\n  else {\n    // If there's not a '&', we use the last '/' as the delimiter.\n    connEnd = streamBegin = src.lastIndexOf('/') + 1;\n    if (connEnd === 0) {\n      // really, there's not a '/'?\n      connEnd = streamBegin = src.length;\n    }\n  }\n  parts.connection = src.substring(0, connEnd);\n  parts.stream = src.substring(streamBegin, src.length);\n\n  return parts;\n};\n\nvjs.Flash.isStreamingType = function(srcType) {\n  return srcType in vjs.Flash.streamingFormats;\n};\n\n// RTMP has four variations, any string starting\n// with one of these protocols should be valid\nvjs.Flash.RTMP_RE = /^rtmp[set]?:\\/\\//i;\n\nvjs.Flash.isStreamingSrc = function(src) {\n  return vjs.Flash.RTMP_RE.test(src);\n};\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @constructor\n */\nvjs.MediaLoader = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.Component.call(this, player, options, ready);\n\n    // If there are no sources when the player is initialized,\n    // load the first supported playback technology.\n    if (!player.options_['sources'] || player.options_['sources'].length === 0) {\n      for (var i=0,j=player.options_['techOrder']; i<j.length; i++) {\n        var techName = vjs.capitalize(j[i]),\n            tech = window['videojs'][techName];\n\n        // Check if the browser supports this technology\n        if (tech && tech.isSupported()) {\n          player.loadTech(techName);\n          break;\n        }\n      }\n    } else {\n      // // Loop through playback technologies (HTML5, Flash) and check for support.\n      // // Then load the best source.\n      // // A few assumptions here:\n      // //   All playback technologies respect preload false.\n      player.src(player.options_['sources']);\n    }\n  }\n});\n/**\n * @fileoverview Text Tracks\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impared\n * Subtitles - text displayed over the video for those who don't understand langauge in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n// Player Additions - Functions add to the player object for easier access to tracks\n\n/**\n * List of associated text tracks\n * @type {Array}\n * @private\n */\nvjs.Player.prototype.textTracks_;\n\n/**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n * @return {Array}           Array of track objects\n * @private\n */\nvjs.Player.prototype.textTracks = function(){\n  this.textTracks_ = this.textTracks_ || [];\n  return this.textTracks_;\n};\n\n/**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n * @param {String}  kind        Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label       Optional label\n * @param {String=} language    Optional language\n * @param {Object=} options     Additional track options, like src\n * @private\n */\nvjs.Player.prototype.addTextTrack = function(kind, label, language, options){\n  var tracks = this.textTracks_ = this.textTracks_ || [];\n  options = options || {};\n\n  options['kind'] = kind;\n  options['label'] = label;\n  options['language'] = language;\n\n  // HTML5 Spec says default to subtitles.\n  // Uppercase first letter to match class names\n  var Kind = vjs.capitalize(kind || 'subtitles');\n\n  // Create correct texttrack class. CaptionsTrack, etc.\n  var track = new window['videojs'][Kind + 'Track'](this, options);\n\n  tracks.push(track);\n\n  // If track.dflt() is set, start showing immediately\n  // TODO: Add a process to deterime the best track to show for the specific kind\n  // Incase there are mulitple defaulted tracks of the same kind\n  // Or the user has a set preference of a specific language that should override the default\n  // if (track.dflt()) {\n  //   this.ready(vjs.bind(track, track.show));\n  // }\n\n  return track;\n};\n\n/**\n * Add an array of text tracks. captions, subtitles, chapters, descriptions\n * Track objects will be stored in the player.textTracks() array\n * @param {Array} trackList Array of track elements or objects (fake track elements)\n * @private\n */\nvjs.Player.prototype.addTextTracks = function(trackList){\n  var trackObj;\n\n  for (var i = 0; i < trackList.length; i++) {\n    trackObj = trackList[i];\n    this.addTextTrack(trackObj['kind'], trackObj['label'], trackObj['language'], trackObj);\n  }\n\n  return this;\n};\n\n// Show a text track\n// disableSameKind: disable all other tracks of the same kind. Value should be a track kind (captions, etc.)\nvjs.Player.prototype.showTextTrack = function(id, disableSameKind){\n  var tracks = this.textTracks_,\n      i = 0,\n      j = tracks.length,\n      track, showTrack, kind;\n\n  // Find Track with same ID\n  for (;i<j;i++) {\n    track = tracks[i];\n    if (track.id() === id) {\n      track.show();\n      showTrack = track;\n\n    // Disable tracks of the same kind\n    } else if (disableSameKind && track.kind() == disableSameKind && track.mode() > 0) {\n      track.disable();\n    }\n  }\n\n  // Get track kind from shown track or disableSameKind\n  kind = (showTrack) ? showTrack.kind() : ((disableSameKind) ? disableSameKind : false);\n\n  // Trigger trackchange event, captionstrackchange, subtitlestrackchange, etc.\n  if (kind) {\n    this.trigger(kind+'trackchange');\n  }\n\n  return this;\n};\n\n/**\n * The base class for all text tracks\n *\n * Handles the parsing, hiding, and showing of text track cues\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.TextTrack = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.Component.call(this, player, options);\n\n    // Apply track info to track object\n    // Options will often be a track element\n\n    // Build ID if one doesn't exist\n    this.id_ = options['id'] || ('vjs_' + options['kind'] + '_' + options['language'] + '_' + vjs.guid++);\n    this.src_ = options['src'];\n    // 'default' is a reserved keyword in js so we use an abbreviated version\n    this.dflt_ = options['default'] || options['dflt'];\n    this.title_ = options['title'];\n    this.language_ = options['srclang'];\n    this.label_ = options['label'];\n    this.cues_ = [];\n    this.activeCues_ = [];\n    this.readyState_ = 0;\n    this.mode_ = 0;\n\n    this.player_.on('fullscreenchange', vjs.bind(this, this.adjustFontSize));\n  }\n});\n\n/**\n * Track kind value. Captions, subtitles, etc.\n * @private\n */\nvjs.TextTrack.prototype.kind_;\n\n/**\n * Get the track kind value\n * @return {String}\n */\nvjs.TextTrack.prototype.kind = function(){\n  return this.kind_;\n};\n\n/**\n * Track src value\n * @private\n */\nvjs.TextTrack.prototype.src_;\n\n/**\n * Get the track src value\n * @return {String}\n */\nvjs.TextTrack.prototype.src = function(){\n  return this.src_;\n};\n\n/**\n * Track default value\n * If default is used, subtitles/captions to start showing\n * @private\n */\nvjs.TextTrack.prototype.dflt_;\n\n/**\n * Get the track default value. ('default' is a reserved keyword)\n * @return {Boolean}\n */\nvjs.TextTrack.prototype.dflt = function(){\n  return this.dflt_;\n};\n\n/**\n * Track title value\n * @private\n */\nvjs.TextTrack.prototype.title_;\n\n/**\n * Get the track title value\n * @return {String}\n */\nvjs.TextTrack.prototype.title = function(){\n  return this.title_;\n};\n\n/**\n * Language - two letter string to represent track language, e.g. 'en' for English\n * Spec def: readonly attribute DOMString language;\n * @private\n */\nvjs.TextTrack.prototype.language_;\n\n/**\n * Get the track language value\n * @return {String}\n */\nvjs.TextTrack.prototype.language = function(){\n  return this.language_;\n};\n\n/**\n * Track label e.g. 'English'\n * Spec def: readonly attribute DOMString label;\n * @private\n */\nvjs.TextTrack.prototype.label_;\n\n/**\n * Get the track label value\n * @return {String}\n */\nvjs.TextTrack.prototype.label = function(){\n  return this.label_;\n};\n\n/**\n * All cues of the track. Cues have a startTime, endTime, text, and other properties.\n * Spec def: readonly attribute TextTrackCueList cues;\n * @private\n */\nvjs.TextTrack.prototype.cues_;\n\n/**\n * Get the track cues\n * @return {Array}\n */\nvjs.TextTrack.prototype.cues = function(){\n  return this.cues_;\n};\n\n/**\n * ActiveCues is all cues that are currently showing\n * Spec def: readonly attribute TextTrackCueList activeCues;\n * @private\n */\nvjs.TextTrack.prototype.activeCues_;\n\n/**\n * Get the track active cues\n * @return {Array}\n */\nvjs.TextTrack.prototype.activeCues = function(){\n  return this.activeCues_;\n};\n\n/**\n * ReadyState describes if the text file has been loaded\n * const unsigned short NONE = 0;\n * const unsigned short LOADING = 1;\n * const unsigned short LOADED = 2;\n * const unsigned short ERROR = 3;\n * readonly attribute unsigned short readyState;\n * @private\n */\nvjs.TextTrack.prototype.readyState_;\n\n/**\n * Get the track readyState\n * @return {Number}\n */\nvjs.TextTrack.prototype.readyState = function(){\n  return this.readyState_;\n};\n\n/**\n * Mode describes if the track is showing, hidden, or disabled\n * const unsigned short OFF = 0;\n * const unsigned short HIDDEN = 1; (still triggering cuechange events, but not visible)\n * const unsigned short SHOWING = 2;\n * attribute unsigned short mode;\n * @private\n */\nvjs.TextTrack.prototype.mode_;\n\n/**\n * Get the track mode\n * @return {Number}\n */\nvjs.TextTrack.prototype.mode = function(){\n  return this.mode_;\n};\n\n/**\n * Change the font size of the text track to make it larger when playing in fullscreen mode\n * and restore it to its normal size when not in fullscreen mode.\n */\nvjs.TextTrack.prototype.adjustFontSize = function(){\n    if (this.player_.isFullScreen) {\n        // Scale the font by the same factor as increasing the video width to the full screen window width.\n        // Additionally, multiply that factor by 1.4, which is the default font size for\n        // the caption track (from the CSS)\n        this.el_.style.fontSize = screen.width / this.player_.width() * 1.4 * 100 + '%';\n    } else {\n        // Change the font size of the text track back to its original non-fullscreen size\n        this.el_.style.fontSize = '';\n    }\n};\n\n/**\n * Create basic div to hold cue text\n * @return {Element}\n */\nvjs.TextTrack.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-' + this.kind_ + ' vjs-text-track'\n  });\n};\n\n/**\n * Show: Mode Showing (2)\n * Indicates that the text track is active. If no attempt has yet been made to obtain the track's cues, the user agent will perform such an attempt momentarily.\n * The user agent is maintaining a list of which cues are active, and events are being fired accordingly.\n * In addition, for text tracks whose kind is subtitles or captions, the cues are being displayed over the video as appropriate;\n * for text tracks whose kind is descriptions, the user agent is making the cues available to the user in a non-visual fashion;\n * and for text tracks whose kind is chapters, the user agent is making available to the user a mechanism by which the user can navigate to any point in the media resource by selecting a cue.\n * The showing by default state is used in conjunction with the default attribute on track elements to indicate that the text track was enabled due to that attribute.\n * This allows the user agent to override the state if a later track is discovered that is more appropriate per the user's preferences.\n */\nvjs.TextTrack.prototype.show = function(){\n  this.activate();\n\n  this.mode_ = 2;\n\n  // Show element.\n  vjs.Component.prototype.show.call(this);\n};\n\n/**\n * Hide: Mode Hidden (1)\n * Indicates that the text track is active, but that the user agent is not actively displaying the cues.\n * If no attempt has yet been made to obtain the track's cues, the user agent will perform such an attempt momentarily.\n * The user agent is maintaining a list of which cues are active, and events are being fired accordingly.\n */\nvjs.TextTrack.prototype.hide = function(){\n  // When hidden, cues are still triggered. Disable to stop triggering.\n  this.activate();\n\n  this.mode_ = 1;\n\n  // Hide element.\n  vjs.Component.prototype.hide.call(this);\n};\n\n/**\n * Disable: Mode Off/Disable (0)\n * Indicates that the text track is not active. Other than for the purposes of exposing the track in the DOM, the user agent is ignoring the text track.\n * No cues are active, no events are fired, and the user agent will not attempt to obtain the track's cues.\n */\nvjs.TextTrack.prototype.disable = function(){\n  // If showing, hide.\n  if (this.mode_ == 2) { this.hide(); }\n\n  // Stop triggering cues\n  this.deactivate();\n\n  // Switch Mode to Off\n  this.mode_ = 0;\n};\n\n/**\n * Turn on cue tracking. Tracks that are showing OR hidden are active.\n */\nvjs.TextTrack.prototype.activate = function(){\n  // Load text file if it hasn't been yet.\n  if (this.readyState_ === 0) { this.load(); }\n\n  // Only activate if not already active.\n  if (this.mode_ === 0) {\n    // Update current cue on timeupdate\n    // Using unique ID for bind function so other tracks don't remove listener\n    this.player_.on('timeupdate', vjs.bind(this, this.update, this.id_));\n\n    // Reset cue time on media end\n    this.player_.on('ended', vjs.bind(this, this.reset, this.id_));\n\n    // Add to display\n    if (this.kind_ === 'captions' || this.kind_ === 'subtitles') {\n      this.player_.getChild('textTrackDisplay').addChild(this);\n    }\n  }\n};\n\n/**\n * Turn off cue tracking.\n */\nvjs.TextTrack.prototype.deactivate = function(){\n  // Using unique ID for bind function so other tracks don't remove listener\n  this.player_.off('timeupdate', vjs.bind(this, this.update, this.id_));\n  this.player_.off('ended', vjs.bind(this, this.reset, this.id_));\n  this.reset(); // Reset\n\n  // Remove from display\n  this.player_.getChild('textTrackDisplay').removeChild(this);\n};\n\n// A readiness state\n// One of the following:\n//\n// Not loaded\n// Indicates that the text track is known to exist (e.g. it has been declared with a track element), but its cues have not been obtained.\n//\n// Loading\n// Indicates that the text track is loading and there have been no fatal errors encountered so far. Further cues might still be added to the track.\n//\n// Loaded\n// Indicates that the text track has been loaded with no fatal errors. No new cues will be added to the track except if the text track corresponds to a MutableTextTrack object.\n//\n// Failed to load\n// Indicates that the text track was enabled, but when the user agent attempted to obtain it, this failed in some way (e.g. URL could not be resolved, network error, unknown text track format). Some or all of the cues are likely missing and will not be obtained.\nvjs.TextTrack.prototype.load = function(){\n\n  // Only load if not loaded yet.\n  if (this.readyState_ === 0) {\n    this.readyState_ = 1;\n    vjs.get(this.src_, vjs.bind(this, this.parseCues), vjs.bind(this, this.onError));\n  }\n\n};\n\nvjs.TextTrack.prototype.onError = function(err){\n  this.error = err;\n  this.readyState_ = 3;\n  this.trigger('error');\n};\n\n// Parse the WebVTT text format for cue times.\n// TODO: Separate parser into own class so alternative timed text formats can be used. (TTML, DFXP)\nvjs.TextTrack.prototype.parseCues = function(srcContent) {\n  var cue, time, text,\n      lines = srcContent.split('\\n'),\n      line = '', id;\n\n  for (var i=1, j=lines.length; i<j; i++) {\n    // Line 0 should be 'WEBVTT', so skipping i=0\n\n    line = vjs.trim(lines[i]); // Trim whitespace and linebreaks\n\n    if (line) { // Loop until a line with content\n\n      // First line could be an optional cue ID\n      // Check if line has the time separator\n      if (line.indexOf('-->') == -1) {\n        id = line;\n        // Advance to next line for timing.\n        line = vjs.trim(lines[++i]);\n      } else {\n        id = this.cues_.length;\n      }\n\n      // First line - Number\n      cue = {\n        id: id, // Cue Number\n        index: this.cues_.length // Position in Array\n      };\n\n      // Timing line\n      time = line.split(' --> ');\n      cue.startTime = this.parseCueTime(time[0]);\n      cue.endTime = this.parseCueTime(time[1]);\n\n      // Additional lines - Cue Text\n      text = [];\n\n      // Loop until a blank line or end of lines\n      // Assumeing trim('') returns false for blank lines\n      while (lines[++i] && (line = vjs.trim(lines[i]))) {\n        text.push(line);\n      }\n\n      cue.text = text.join('<br/>');\n\n      // Add this cue\n      this.cues_.push(cue);\n    }\n  }\n\n  this.readyState_ = 2;\n  this.trigger('loaded');\n};\n\n\nvjs.TextTrack.prototype.parseCueTime = function(timeText) {\n  var parts = timeText.split(':'),\n      time = 0,\n      hours, minutes, other, seconds, ms;\n\n  // Check if optional hours place is included\n  // 00:00:00.000 vs. 00:00.000\n  if (parts.length == 3) {\n    hours = parts[0];\n    minutes = parts[1];\n    other = parts[2];\n  } else {\n    hours = 0;\n    minutes = parts[0];\n    other = parts[1];\n  }\n\n  // Break other (seconds, milliseconds, and flags) by spaces\n  // TODO: Make additional cue layout settings work with flags\n  other = other.split(/\\s+/);\n  // Remove seconds. Seconds is the first part before any spaces.\n  seconds = other.splice(0,1)[0];\n  // Could use either . or , for decimal\n  seconds = seconds.split(/\\.|,/);\n  // Get milliseconds\n  ms = parseFloat(seconds[1]);\n  seconds = seconds[0];\n\n  // hours => seconds\n  time += parseFloat(hours) * 3600;\n  // minutes => seconds\n  time += parseFloat(minutes) * 60;\n  // Add seconds\n  time += parseFloat(seconds);\n  // Add milliseconds\n  if (ms) { time += ms/1000; }\n\n  return time;\n};\n\n// Update active cues whenever timeupdate events are triggered on the player.\nvjs.TextTrack.prototype.update = function(){\n  if (this.cues_.length > 0) {\n\n    // Get curent player time\n    var time = this.player_.currentTime();\n\n    // Check if the new time is outside the time box created by the the last update.\n    if (this.prevChange === undefined || time < this.prevChange || this.nextChange <= time) {\n      var cues = this.cues_,\n\n          // Create a new time box for this state.\n          newNextChange = this.player_.duration(), // Start at beginning of the timeline\n          newPrevChange = 0, // Start at end\n\n          reverse = false, // Set the direction of the loop through the cues. Optimized the cue check.\n          newCues = [], // Store new active cues.\n\n          // Store where in the loop the current active cues are, to provide a smart starting point for the next loop.\n          firstActiveIndex, lastActiveIndex,\n          cue, i; // Loop vars\n\n      // Check if time is going forwards or backwards (scrubbing/rewinding)\n      // If we know the direction we can optimize the starting position and direction of the loop through the cues array.\n      if (time >= this.nextChange || this.nextChange === undefined) { // NextChange should happen\n        // Forwards, so start at the index of the first active cue and loop forward\n        i = (this.firstActiveIndex !== undefined) ? this.firstActiveIndex : 0;\n      } else {\n        // Backwards, so start at the index of the last active cue and loop backward\n        reverse = true;\n        i = (this.lastActiveIndex !== undefined) ? this.lastActiveIndex : cues.length - 1;\n      }\n\n      while (true) { // Loop until broken\n        cue = cues[i];\n\n        // Cue ended at this point\n        if (cue.endTime <= time) {\n          newPrevChange = Math.max(newPrevChange, cue.endTime);\n\n          if (cue.active) {\n            cue.active = false;\n          }\n\n          // No earlier cues should have an active start time.\n          // Nevermind. Assume first cue could have a duration the same as the video.\n          // In that case we need to loop all the way back to the beginning.\n          // if (reverse && cue.startTime) { break; }\n\n        // Cue hasn't started\n        } else if (time < cue.startTime) {\n          newNextChange = Math.min(newNextChange, cue.startTime);\n\n          if (cue.active) {\n            cue.active = false;\n          }\n\n          // No later cues should have an active start time.\n          if (!reverse) { break; }\n\n        // Cue is current\n        } else {\n\n          if (reverse) {\n            // Add cue to front of array to keep in time order\n            newCues.splice(0,0,cue);\n\n            // If in reverse, the first current cue is our lastActiveCue\n            if (lastActiveIndex === undefined) { lastActiveIndex = i; }\n            firstActiveIndex = i;\n          } else {\n            // Add cue to end of array\n            newCues.push(cue);\n\n            // If forward, the first current cue is our firstActiveIndex\n            if (firstActiveIndex === undefined) { firstActiveIndex = i; }\n            lastActiveIndex = i;\n          }\n\n          newNextChange = Math.min(newNextChange, cue.endTime);\n          newPrevChange = Math.max(newPrevChange, cue.startTime);\n\n          cue.active = true;\n        }\n\n        if (reverse) {\n          // Reverse down the array of cues, break if at first\n          if (i === 0) { break; } else { i--; }\n        } else {\n          // Walk up the array fo cues, break if at last\n          if (i === cues.length - 1) { break; } else { i++; }\n        }\n\n      }\n\n      this.activeCues_ = newCues;\n      this.nextChange = newNextChange;\n      this.prevChange = newPrevChange;\n      this.firstActiveIndex = firstActiveIndex;\n      this.lastActiveIndex = lastActiveIndex;\n\n      this.updateDisplay();\n\n      this.trigger('cuechange');\n    }\n  }\n};\n\n// Add cue HTML to display\nvjs.TextTrack.prototype.updateDisplay = function(){\n  var cues = this.activeCues_,\n      html = '',\n      i=0,j=cues.length;\n\n  for (;i<j;i++) {\n    html += '<span class=\"vjs-tt-cue\">'+cues[i].text+'</span>';\n  }\n\n  this.el_.innerHTML = html;\n};\n\n// Set all loop helper values back\nvjs.TextTrack.prototype.reset = function(){\n  this.nextChange = 0;\n  this.prevChange = this.player_.duration();\n  this.firstActiveIndex = 0;\n  this.lastActiveIndex = 0;\n};\n\n// Create specific track types\n/**\n * The track component for managing the hiding and showing of captions\n *\n * @constructor\n */\nvjs.CaptionsTrack = vjs.TextTrack.extend();\nvjs.CaptionsTrack.prototype.kind_ = 'captions';\n// Exporting here because Track creation requires the track kind\n// to be available on global object. e.g. new window['videojs'][Kind + 'Track']\n\n/**\n * The track component for managing the hiding and showing of subtitles\n *\n * @constructor\n */\nvjs.SubtitlesTrack = vjs.TextTrack.extend();\nvjs.SubtitlesTrack.prototype.kind_ = 'subtitles';\n\n/**\n * The track component for managing the hiding and showing of chapters\n *\n * @constructor\n */\nvjs.ChaptersTrack = vjs.TextTrack.extend();\nvjs.ChaptersTrack.prototype.kind_ = 'chapters';\n\n\n/* Text Track Display\n============================================================================= */\n// Global container for both subtitle and captions text. Simple div container.\n\n/**\n * The component for displaying text track cues\n *\n * @constructor\n */\nvjs.TextTrackDisplay = vjs.Component.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.Component.call(this, player, options, ready);\n\n    // This used to be called during player init, but was causing an error\n    // if a track should show by default and the display hadn't loaded yet.\n    // Should probably be moved to an external track loader when we support\n    // tracks that don't need a display.\n    if (player.options_['tracks'] && player.options_['tracks'].length > 0) {\n      this.player_.addTextTracks(player.options_['tracks']);\n    }\n  }\n});\n\nvjs.TextTrackDisplay.prototype.createEl = function(){\n  return vjs.Component.prototype.createEl.call(this, 'div', {\n    className: 'vjs-text-track-display'\n  });\n};\n\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @constructor\n */\nvjs.TextTrackMenuItem = vjs.MenuItem.extend({\n  /** @constructor */\n  init: function(player, options){\n    var track = this.track = options['track'];\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = track.label();\n    options['selected'] = track.dflt();\n    vjs.MenuItem.call(this, player, options);\n\n    this.player_.on(track.kind() + 'trackchange', vjs.bind(this, this.update));\n  }\n});\n\nvjs.TextTrackMenuItem.prototype.onClick = function(){\n  vjs.MenuItem.prototype.onClick.call(this);\n  this.player_.showTextTrack(this.track.id_, this.track.kind());\n};\n\nvjs.TextTrackMenuItem.prototype.update = function(){\n  this.selected(this.track.mode() == 2);\n};\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @constructor\n */\nvjs.OffTextTrackMenuItem = vjs.TextTrackMenuItem.extend({\n  /** @constructor */\n  init: function(player, options){\n    // Create pseudo track info\n    // Requires options['kind']\n    options['track'] = {\n      kind: function() { return options['kind']; },\n      player: player,\n      label: function(){ return options['kind'] + ' off'; },\n      dflt: function(){ return false; },\n      mode: function(){ return false; }\n    };\n    vjs.TextTrackMenuItem.call(this, player, options);\n    this.selected(true);\n  }\n});\n\nvjs.OffTextTrackMenuItem.prototype.onClick = function(){\n  vjs.TextTrackMenuItem.prototype.onClick.call(this);\n  this.player_.showTextTrack(this.track.id_, this.track.kind());\n};\n\nvjs.OffTextTrackMenuItem.prototype.update = function(){\n  var tracks = this.player_.textTracks(),\n      i=0, j=tracks.length, track,\n      off = true;\n\n  for (;i<j;i++) {\n    track = tracks[i];\n    if (track.kind() == this.track.kind() && track.mode() == 2) {\n      off = false;\n    }\n  }\n\n  this.selected(off);\n};\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @constructor\n */\nvjs.TextTrackButton = vjs.MenuButton.extend({\n  /** @constructor */\n  init: function(player, options){\n    vjs.MenuButton.call(this, player, options);\n\n    if (this.items.length <= 1) {\n      this.hide();\n    }\n  }\n});\n\n// vjs.TextTrackButton.prototype.buttonPressed = false;\n\n// vjs.TextTrackButton.prototype.createMenu = function(){\n//   var menu = new vjs.Menu(this.player_);\n\n//   // Add a title list item to the top\n//   // menu.el().appendChild(vjs.createEl('li', {\n//   //   className: 'vjs-menu-title',\n//   //   innerHTML: vjs.capitalize(this.kind_),\n//   //   tabindex: -1\n//   // }));\n\n//   this.items = this.createItems();\n\n//   // Add menu items to the menu\n//   for (var i = 0; i < this.items.length; i++) {\n//     menu.addItem(this.items[i]);\n//   }\n\n//   // Add list to element\n//   this.addChild(menu);\n\n//   return menu;\n// };\n\n// Create a menu item for each text track\nvjs.TextTrackButton.prototype.createItems = function(){\n  var items = [], track;\n\n  // Add an OFF menu item to turn all tracks off\n  items.push(new vjs.OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n  for (var i = 0; i < this.player_.textTracks().length; i++) {\n    track = this.player_.textTracks()[i];\n    if (track.kind() === this.kind_) {\n      items.push(new vjs.TextTrackMenuItem(this.player_, {\n        'track': track\n      }));\n    }\n  }\n\n  return items;\n};\n\n/**\n * The button component for toggling and selecting captions\n *\n * @constructor\n */\nvjs.CaptionsButton = vjs.TextTrackButton.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.TextTrackButton.call(this, player, options, ready);\n    this.el_.setAttribute('aria-label','Captions Menu');\n  }\n});\nvjs.CaptionsButton.prototype.kind_ = 'captions';\nvjs.CaptionsButton.prototype.buttonText = 'Captions';\nvjs.CaptionsButton.prototype.className = 'vjs-captions-button';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @constructor\n */\nvjs.SubtitlesButton = vjs.TextTrackButton.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.TextTrackButton.call(this, player, options, ready);\n    this.el_.setAttribute('aria-label','Subtitles Menu');\n  }\n});\nvjs.SubtitlesButton.prototype.kind_ = 'subtitles';\nvjs.SubtitlesButton.prototype.buttonText = 'Subtitles';\nvjs.SubtitlesButton.prototype.className = 'vjs-subtitles-button';\n\n// Chapters act much differently than other text tracks\n// Cues are navigation vs. other tracks of alternative languages\n/**\n * The button component for toggling and selecting chapters\n *\n * @constructor\n */\nvjs.ChaptersButton = vjs.TextTrackButton.extend({\n  /** @constructor */\n  init: function(player, options, ready){\n    vjs.TextTrackButton.call(this, player, options, ready);\n    this.el_.setAttribute('aria-label','Chapters Menu');\n  }\n});\nvjs.ChaptersButton.prototype.kind_ = 'chapters';\nvjs.ChaptersButton.prototype.buttonText = 'Chapters';\nvjs.ChaptersButton.prototype.className = 'vjs-chapters-button';\n\n// Create a menu item for each text track\nvjs.ChaptersButton.prototype.createItems = function(){\n  var items = [], track;\n\n  for (var i = 0; i < this.player_.textTracks().length; i++) {\n    track = this.player_.textTracks()[i];\n    if (track.kind() === this.kind_) {\n      items.push(new vjs.TextTrackMenuItem(this.player_, {\n        'track': track\n      }));\n    }\n  }\n\n  return items;\n};\n\nvjs.ChaptersButton.prototype.createMenu = function(){\n  var tracks = this.player_.textTracks(),\n      i = 0,\n      j = tracks.length,\n      track, chaptersTrack,\n      items = this.items = [];\n\n  for (;i<j;i++) {\n    track = tracks[i];\n    if (track.kind() == this.kind_ && track.dflt()) {\n      if (track.readyState() < 2) {\n        this.chaptersTrack = track;\n        track.on('loaded', vjs.bind(this, this.createMenu));\n        return;\n      } else {\n        chaptersTrack = track;\n        break;\n      }\n    }\n  }\n\n  var menu = this.menu = new vjs.Menu(this.player_);\n\n  menu.el_.appendChild(vjs.createEl('li', {\n    className: 'vjs-menu-title',\n    innerHTML: vjs.capitalize(this.kind_),\n    tabindex: -1\n  }));\n\n  if (chaptersTrack) {\n    var cues = chaptersTrack.cues_, cue, mi;\n    i = 0;\n    j = cues.length;\n\n    for (;i<j;i++) {\n      cue = cues[i];\n\n      mi = new vjs.ChaptersTrackMenuItem(this.player_, {\n        'track': chaptersTrack,\n        'cue': cue\n      });\n\n      items.push(mi);\n\n      menu.addChild(mi);\n    }\n  }\n\n  if (this.items.length > 0) {\n    this.show();\n  }\n\n  return menu;\n};\n\n\n/**\n * @constructor\n */\nvjs.ChaptersTrackMenuItem = vjs.MenuItem.extend({\n  /** @constructor */\n  init: function(player, options){\n    var track = this.track = options['track'],\n        cue = this.cue = options['cue'],\n        currentTime = player.currentTime();\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = cue.text;\n    options['selected'] = (cue.startTime <= currentTime && currentTime < cue.endTime);\n    vjs.MenuItem.call(this, player, options);\n\n    track.on('cuechange', vjs.bind(this, this.update));\n  }\n});\n\nvjs.ChaptersTrackMenuItem.prototype.onClick = function(){\n  vjs.MenuItem.prototype.onClick.call(this);\n  this.player_.currentTime(this.cue.startTime);\n  this.update(this.cue.startTime);\n};\n\nvjs.ChaptersTrackMenuItem.prototype.update = function(){\n  var cue = this.cue,\n      currentTime = this.player_.currentTime();\n\n  // vjs.log(currentTime, cue.startTime);\n  this.selected(cue.startTime <= currentTime && currentTime < cue.endTime);\n};\n\n// Add Buttons to controlBar\nvjs.obj.merge(vjs.ControlBar.prototype.options_['children'], {\n  'subtitlesButton': {},\n  'captionsButton': {},\n  'chaptersButton': {}\n});\n\n// vjs.Cue = vjs.Component.extend({\n//   /** @constructor */\n//   init: function(player, options){\n//     vjs.Component.call(this, player, options);\n//   }\n// });\n/**\n * @fileoverview Add JSON support\n * @suppress {undefinedVars}\n * (Compiler doesn't like JSON not being declared)\n */\n\n/**\n * Javascript JSON implementation\n * (Parse Method Only)\n * https://github.com/douglascrockford/JSON-js/blob/master/json2.js\n * Only using for parse method when parsing data-setup attribute JSON.\n * @suppress {undefinedVars}\n * @namespace\n * @private\n */\nvjs.JSON;\n\nif (typeof window.JSON !== 'undefined' && window.JSON.parse === 'function') {\n  vjs.JSON = window.JSON;\n\n} else {\n  vjs.JSON = {};\n\n  var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n  /**\n   * parse the json\n   *\n   * @memberof vjs.JSON\n   * @return {Object|Array} The parsed JSON\n   */\n  vjs.JSON.parse = function (text, reviver) {\n      var j;\n\n      function walk(holder, key) {\n          var k, v, value = holder[key];\n          if (value && typeof value === 'object') {\n              for (k in value) {\n                  if (Object.prototype.hasOwnProperty.call(value, k)) {\n                      v = walk(value, k);\n                      if (v !== undefined) {\n                          value[k] = v;\n                      } else {\n                          delete value[k];\n                      }\n                  }\n              }\n          }\n          return reviver.call(holder, key, value);\n      }\n      text = String(text);\n      cx.lastIndex = 0;\n      if (cx.test(text)) {\n          text = text.replace(cx, function (a) {\n              return '\\\\u' +\n                  ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n          });\n      }\n\n      if (/^[\\],:{}\\s]*$/\n              .test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')\n                  .replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']')\n                  .replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''))) {\n\n          j = eval('(' + text + ')');\n\n          return typeof reviver === 'function' ?\n              walk({'': j}, '') : j;\n      }\n\n      throw new SyntaxError('JSON.parse(): invalid or malformed JSON data');\n  };\n}\n/**\n * @fileoverview Functions for automatically setting up a player\n * based on the data-setup attribute of the video tag\n */\n\n// Automatically set up any tags that have a data-setup attribute\nvjs.autoSetup = function(){\n  var options, vid, player,\n      vids = document.getElementsByTagName('video');\n\n  // Check if any media elements exist\n  if (vids && vids.length > 0) {\n\n    for (var i=0,j=vids.length; i<j; i++) {\n      vid = vids[i];\n\n      // Check if element exists, has getAttribute func.\n      // IE seems to consider typeof el.getAttribute == 'object' instead of 'function' like expected, at least when loading the player immediately.\n      if (vid && vid.getAttribute) {\n\n        // Make sure this player hasn't already been set up.\n        if (vid['player'] === undefined) {\n          options = vid.getAttribute('data-setup');\n\n          // Check if data-setup attr exists.\n          // We only auto-setup if they've added the data-setup attr.\n          if (options !== null) {\n\n            // Parse options JSON\n            // If empty string, make it a parsable json object.\n            options = vjs.JSON.parse(options || '{}');\n\n            // Create new video.js instance.\n            player = videojs(vid, options);\n          }\n        }\n\n      // If getAttribute isn't defined, we need to wait for the DOM.\n      } else {\n        vjs.autoSetupTimeout(1);\n        break;\n      }\n    }\n\n  // No videos were found, so keep looping unless page is finisehd loading.\n  } else if (!vjs.windowLoaded) {\n    vjs.autoSetupTimeout(1);\n  }\n};\n\n// Pause to let the DOM keep processing\nvjs.autoSetupTimeout = function(wait){\n  setTimeout(vjs.autoSetup, wait);\n};\n\nif (document.readyState === 'complete') {\n  vjs.windowLoaded = true;\n} else {\n  vjs.one(window, 'load', function(){\n    vjs.windowLoaded = true;\n  });\n}\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nvjs.autoSetupTimeout(1);\n/**\n * the method for registering a video.js plugin\n *\n * @param  {String} name The name of the plugin\n * @param  {Function} init The function that is run when the player inits\n */\nvjs.plugin = function(name, init){\n  vjs.Player.prototype[name] = init;\n};\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/video-js/video.js",
    "content": "/*! Video.js v4.3.0 Copyright 2013 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */ (function() {var b=void 0,f=!0,h=null,l=!1;function m(){return function(){}}function p(a){return function(){return this[a]}}function s(a){return function(){return a}}var t;document.createElement(\"video\");document.createElement(\"audio\");document.createElement(\"track\");function u(a,c,d){if(\"string\"===typeof a){0===a.indexOf(\"#\")&&(a=a.slice(1));if(u.xa[a])return u.xa[a];a=u.w(a)}if(!a||!a.nodeName)throw new TypeError(\"The element or ID supplied is not valid. (videojs)\");return a.player||new u.s(a,c,d)}var v=u;\nwindow.Td=window.Ud=u;u.Tb=\"4.3\";u.Fc=\"https:\"==document.location.protocol?\"https://\":\"http://\";u.options={techOrder:[\"html5\",\"flash\"],html5:{},flash:{},width:300,height:150,defaultVolume:0,children:{mediaLoader:{},posterImage:{},textTrackDisplay:{},loadingSpinner:{},bigPlayButton:{},controlBar:{}},notSupportedMessage:'Sorry, no compatible source and playback technology were found for this video. Try using another browser like <a href=\"http://bit.ly/ccMUEC\">Chrome</a> or download the latest <a href=\"http://adobe.ly/mwfN1\">Adobe Flash Player</a>.'};\n\"GENERATED_CDN_VSN\"!==u.Tb&&(v.options.flash.swf=u.Fc+\"vjs.zencdn.net/\"+u.Tb+\"/video-js.swf\");u.xa={};u.la=u.CoreObject=m();u.la.extend=function(a){var c,d;a=a||{};c=a.init||a.i||this.prototype.init||this.prototype.i||m();d=function(){c.apply(this,arguments)};d.prototype=u.k.create(this.prototype);d.prototype.constructor=d;d.extend=u.la.extend;d.create=u.la.create;for(var e in a)a.hasOwnProperty(e)&&(d.prototype[e]=a[e]);return d};\nu.la.create=function(){var a=u.k.create(this.prototype);this.apply(a,arguments);return a};u.d=function(a,c,d){var e=u.getData(a);e.z||(e.z={});e.z[c]||(e.z[c]=[]);d.t||(d.t=u.t++);e.z[c].push(d);e.W||(e.disabled=l,e.W=function(c){if(!e.disabled){c=u.kc(c);var d=e.z[c.type];if(d)for(var d=d.slice(0),k=0,q=d.length;k<q&&!c.pc();k++)d[k].call(a,c)}});1==e.z[c].length&&(document.addEventListener?a.addEventListener(c,e.W,l):document.attachEvent&&a.attachEvent(\"on\"+c,e.W))};\nu.o=function(a,c,d){if(u.oc(a)){var e=u.getData(a);if(e.z)if(c){var g=e.z[c];if(g){if(d){if(d.t)for(e=0;e<g.length;e++)g[e].t===d.t&&g.splice(e--,1)}else e.z[c]=[];u.gc(a,c)}}else for(g in e.z)c=g,e.z[c]=[],u.gc(a,c)}};u.gc=function(a,c){var d=u.getData(a);0===d.z[c].length&&(delete d.z[c],document.removeEventListener?a.removeEventListener(c,d.W,l):document.detachEvent&&a.detachEvent(\"on\"+c,d.W));u.Bb(d.z)&&(delete d.z,delete d.W,delete d.disabled);u.Bb(d)&&u.vc(a)};\nu.kc=function(a){function c(){return f}function d(){return l}if(!a||!a.Cb){var e=a||window.event;a={};for(var g in e)\"layerX\"!==g&&\"layerY\"!==g&&(a[g]=e[g]);a.target||(a.target=a.srcElement||document);a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;a.preventDefault=function(){e.preventDefault&&e.preventDefault();a.returnValue=l;a.Ab=c};a.Ab=d;a.stopPropagation=function(){e.stopPropagation&&e.stopPropagation();a.cancelBubble=f;a.Cb=c};a.Cb=d;a.stopImmediatePropagation=function(){e.stopImmediatePropagation&&\ne.stopImmediatePropagation();a.pc=c;a.stopPropagation()};a.pc=d;if(a.clientX!=h){g=document.documentElement;var j=document.body;a.pageX=a.clientX+(g&&g.scrollLeft||j&&j.scrollLeft||0)-(g&&g.clientLeft||j&&j.clientLeft||0);a.pageY=a.clientY+(g&&g.scrollTop||j&&j.scrollTop||0)-(g&&g.clientTop||j&&j.clientTop||0)}a.which=a.charCode||a.keyCode;a.button!=h&&(a.button=a.button&1?0:a.button&4?1:a.button&2?2:0)}return a};\nu.j=function(a,c){var d=u.oc(a)?u.getData(a):{},e=a.parentNode||a.ownerDocument;\"string\"===typeof c&&(c={type:c,target:a});c=u.kc(c);d.W&&d.W.call(a,c);if(e&&!c.Cb()&&c.bubbles!==l)u.j(e,c);else if(!e&&!c.Ab()&&(d=u.getData(c.target),c.target[c.type])){d.disabled=f;if(\"function\"===typeof c.target[c.type])c.target[c.type]();d.disabled=l}return!c.Ab()};u.U=function(a,c,d){function e(){u.o(a,c,e);d.apply(this,arguments)}e.t=d.t=d.t||u.t++;u.d(a,c,e)};var w=Object.prototype.hasOwnProperty;\nu.e=function(a,c){var d,e;d=document.createElement(a||\"div\");for(e in c)w.call(c,e)&&(-1!==e.indexOf(\"aria-\")||\"role\"==e?d.setAttribute(e,c[e]):d[e]=c[e]);return d};u.$=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};u.k={};u.k.create=Object.create||function(a){function c(){}c.prototype=a;return new c};u.k.ua=function(a,c,d){for(var e in a)w.call(a,e)&&c.call(d||this,e,a[e])};u.k.B=function(a,c){if(!c)return a;for(var d in c)w.call(c,d)&&(a[d]=c[d]);return a};\nu.k.ic=function(a,c){var d,e,g;a=u.k.copy(a);for(d in c)w.call(c,d)&&(e=a[d],g=c[d],a[d]=u.k.qc(e)&&u.k.qc(g)?u.k.ic(e,g):c[d]);return a};u.k.copy=function(a){return u.k.B({},a)};u.k.qc=function(a){return!!a&&\"object\"===typeof a&&\"[object Object]\"===a.toString()&&a.constructor===Object};u.bind=function(a,c,d){function e(){return c.apply(a,arguments)}c.t||(c.t=u.t++);e.t=d?d+\"_\"+c.t:c.t;return e};u.ra={};u.t=1;u.expando=\"vdata\"+(new Date).getTime();\nu.getData=function(a){var c=a[u.expando];c||(c=a[u.expando]=u.t++,u.ra[c]={});return u.ra[c]};u.oc=function(a){a=a[u.expando];return!(!a||u.Bb(u.ra[a]))};u.vc=function(a){var c=a[u.expando];if(c){delete u.ra[c];try{delete a[u.expando]}catch(d){a.removeAttribute?a.removeAttribute(u.expando):a[u.expando]=h}}};u.Bb=function(a){for(var c in a)if(a[c]!==h)return l;return f};u.n=function(a,c){-1==(\" \"+a.className+\" \").indexOf(\" \"+c+\" \")&&(a.className=\"\"===a.className?c:a.className+\" \"+c)};\nu.u=function(a,c){var d,e;if(-1!=a.className.indexOf(c)){d=a.className.split(\" \");for(e=d.length-1;0<=e;e--)d[e]===c&&d.splice(e,1);a.className=d.join(\" \")}};u.na=u.e(\"video\");u.F=navigator.userAgent;u.Mc=/iPhone/i.test(u.F);u.Lc=/iPad/i.test(u.F);u.Nc=/iPod/i.test(u.F);u.Kc=u.Mc||u.Lc||u.Nc;var aa=u,x;var y=u.F.match(/OS (\\d+)_/i);x=y&&y[1]?y[1]:b;aa.Fd=x;u.Ic=/Android/i.test(u.F);var ba=u,z;var A=u.F.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),B,C;\nA?(B=A[1]&&parseFloat(A[1]),C=A[2]&&parseFloat(A[2]),z=B&&C?parseFloat(A[1]+\".\"+A[2]):B?B:h):z=h;ba.Gc=z;u.Oc=u.Ic&&/webkit/i.test(u.F)&&2.3>u.Gc;u.Jc=/Firefox/i.test(u.F);u.Gd=/Chrome/i.test(u.F);u.ac=!!(\"ontouchstart\"in window||window.Hc&&document instanceof window.Hc);\nu.xb=function(a){var c,d,e,g;c={};if(a&&a.attributes&&0<a.attributes.length){d=a.attributes;for(var j=d.length-1;0<=j;j--){e=d[j].name;g=d[j].value;if(\"boolean\"===typeof a[e]||-1!==\",autoplay,controls,loop,muted,default,\".indexOf(\",\"+e+\",\"))g=g!==h?f:l;c[e]=g}}return c};\nu.Kd=function(a,c){var d=\"\";document.defaultView&&document.defaultView.getComputedStyle?d=document.defaultView.getComputedStyle(a,\"\").getPropertyValue(c):a.currentStyle&&(d=a[\"client\"+c.substr(0,1).toUpperCase()+c.substr(1)]+\"px\");return d};u.zb=function(a,c){c.firstChild?c.insertBefore(a,c.firstChild):c.appendChild(a)};u.Pb={};u.w=function(a){0===a.indexOf(\"#\")&&(a=a.slice(1));return document.getElementById(a)};\nu.La=function(a,c){c=c||a;var d=Math.floor(a%60),e=Math.floor(a/60%60),g=Math.floor(a/3600),j=Math.floor(c/60%60),k=Math.floor(c/3600);if(isNaN(a)||Infinity===a)g=e=d=\"-\";g=0<g||0<k?g+\":\":\"\";return g+(((g||10<=j)&&10>e?\"0\"+e:e)+\":\")+(10>d?\"0\"+d:d)};u.Tc=function(){document.body.focus();document.onselectstart=s(l)};u.Bd=function(){document.onselectstart=s(f)};u.trim=function(a){return(a+\"\").replace(/^\\s+|\\s+$/g,\"\")};u.round=function(a,c){c||(c=0);return Math.round(a*Math.pow(10,c))/Math.pow(10,c)};\nu.tb=function(a,c){return{length:1,start:function(){return a},end:function(){return c}}};\nu.get=function(a,c,d){var e,g;\"undefined\"===typeof XMLHttpRequest&&(window.XMLHttpRequest=function(){try{return new window.ActiveXObject(\"Msxml2.XMLHTTP.6.0\")}catch(a){}try{return new window.ActiveXObject(\"Msxml2.XMLHTTP.3.0\")}catch(c){}try{return new window.ActiveXObject(\"Msxml2.XMLHTTP\")}catch(d){}throw Error(\"This browser does not support XMLHttpRequest.\");});g=new XMLHttpRequest;try{g.open(\"GET\",a)}catch(j){d(j)}e=0===a.indexOf(\"file:\")||0===window.location.href.indexOf(\"file:\")&&-1===a.indexOf(\"http\");\ng.onreadystatechange=function(){4===g.readyState&&(200===g.status||e&&0===g.status?c(g.responseText):d&&d())};try{g.send()}catch(k){d&&d(k)}};u.td=function(a){try{var c=window.localStorage||l;c&&(c.volume=a)}catch(d){22==d.code||1014==d.code?u.log(\"LocalStorage Full (VideoJS)\",d):18==d.code?u.log(\"LocalStorage not allowed (VideoJS)\",d):u.log(\"LocalStorage Error (VideoJS)\",d)}};u.mc=function(a){a.match(/^https?:\\/\\//)||(a=u.e(\"div\",{innerHTML:'<a href=\"'+a+'\">x</a>'}).firstChild.href);return a};\nu.log=function(){u.log.history=u.log.history||[];u.log.history.push(arguments);window.console&&window.console.log(Array.prototype.slice.call(arguments))};u.ad=function(a){var c,d;a.getBoundingClientRect&&a.parentNode&&(c=a.getBoundingClientRect());if(!c)return{left:0,top:0};a=document.documentElement;d=document.body;return{left:c.left+(window.pageXOffset||d.scrollLeft)-(a.clientLeft||d.clientLeft||0),top:c.top+(window.pageYOffset||d.scrollTop)-(a.clientTop||d.clientTop||0)}};\nu.c=u.la.extend({i:function(a,c,d){this.b=a;this.g=u.k.copy(this.g);c=this.options(c);this.Q=c.id||(c.el&&c.el.id?c.el.id:a.id()+\"_component_\"+u.t++);this.gd=c.name||h;this.a=c.el||this.e();this.G=[];this.qb={};this.V={};if((a=this.g)&&a.children){var e=this;u.k.ua(a.children,function(a,c){c!==l&&!c.loadEvent&&(e[a]=e.Z(a,c))})}this.L(d)}});t=u.c.prototype;\nt.D=function(){this.j(\"dispose\");if(this.G)for(var a=this.G.length-1;0<=a;a--)this.G[a].D&&this.G[a].D();this.V=this.qb=this.G=h;this.o();this.a.parentNode&&this.a.parentNode.removeChild(this.a);u.vc(this.a);this.a=h};t.b=f;t.K=p(\"b\");t.options=function(a){return a===b?this.g:this.g=u.k.ic(this.g,a)};t.e=function(a,c){return u.e(a,c)};t.w=p(\"a\");t.id=p(\"Q\");t.name=p(\"gd\");t.children=p(\"G\");\nt.Z=function(a,c){var d,e;\"string\"===typeof a?(e=a,c=c||{},d=c.componentClass||u.$(e),c.name=e,d=new window.videojs[d](this.b||this,c)):d=a;this.G.push(d);\"function\"===typeof d.id&&(this.qb[d.id()]=d);(e=e||d.name&&d.name())&&(this.V[e]=d);\"function\"===typeof d.el&&d.el()&&(this.sa||this.a).appendChild(d.el());return d};\nt.removeChild=function(a){\"string\"===typeof a&&(a=this.V[a]);if(a&&this.G){for(var c=l,d=this.G.length-1;0<=d;d--)if(this.G[d]===a){c=f;this.G.splice(d,1);break}c&&(this.qb[a.id]=h,this.V[a.name]=h,(c=a.w())&&c.parentNode===(this.sa||this.a)&&(this.sa||this.a).removeChild(a.w()))}};t.T=s(\"\");t.d=function(a,c){u.d(this.a,a,u.bind(this,c));return this};t.o=function(a,c){u.o(this.a,a,c);return this};t.U=function(a,c){u.U(this.a,a,u.bind(this,c));return this};t.j=function(a,c){u.j(this.a,a,c);return this};\nt.L=function(a){a&&(this.aa?a.call(this):(this.Sa===b&&(this.Sa=[]),this.Sa.push(a)));return this};t.Ua=function(){this.aa=f;var a=this.Sa;if(a&&0<a.length){for(var c=0,d=a.length;c<d;c++)a[c].call(this);this.Sa=[];this.j(\"ready\")}};t.n=function(a){u.n(this.a,a);return this};t.u=function(a){u.u(this.a,a);return this};t.show=function(){this.a.style.display=\"block\";return this};t.C=function(){this.a.style.display=\"none\";return this};function D(a){a.u(\"vjs-lock-showing\")}\nt.disable=function(){this.C();this.show=m()};t.width=function(a,c){return E(this,\"width\",a,c)};t.height=function(a,c){return E(this,\"height\",a,c)};t.Xc=function(a,c){return this.width(a,f).height(c)};function E(a,c,d,e){if(d!==b)return a.a.style[c]=-1!==(\"\"+d).indexOf(\"%\")||-1!==(\"\"+d).indexOf(\"px\")?d:\"auto\"===d?\"\":d+\"px\",e||a.j(\"resize\"),a;if(!a.a)return 0;d=a.a.style[c];e=d.indexOf(\"px\");return-1!==e?parseInt(d.slice(0,e),10):parseInt(a.a[\"offset\"+u.$(c)],10)}\nu.q=u.c.extend({i:function(a,c){u.c.call(this,a,c);var d=l;this.d(\"touchstart\",function(a){a.preventDefault();d=f});this.d(\"touchmove\",function(){d=l});var e=this;this.d(\"touchend\",function(a){d&&e.p(a);a.preventDefault()});this.d(\"click\",this.p);this.d(\"focus\",this.Oa);this.d(\"blur\",this.Na)}});t=u.q.prototype;\nt.e=function(a,c){c=u.k.B({className:this.T(),innerHTML:'<div class=\"vjs-control-content\"><span class=\"vjs-control-text\">'+(this.qa||\"Need Text\")+\"</span></div>\",qd:\"button\",\"aria-live\":\"polite\",tabIndex:0},c);return u.c.prototype.e.call(this,a,c)};t.T=function(){return\"vjs-control \"+u.c.prototype.T.call(this)};t.p=m();t.Oa=function(){u.d(document,\"keyup\",u.bind(this,this.ba))};t.ba=function(a){if(32==a.which||13==a.which)a.preventDefault(),this.p()};\nt.Na=function(){u.o(document,\"keyup\",u.bind(this,this.ba))};u.O=u.c.extend({i:function(a,c){u.c.call(this,a,c);this.Sc=this.V[this.g.barName];this.handle=this.V[this.g.handleName];a.d(this.tc,u.bind(this,this.update));this.d(\"mousedown\",this.Pa);this.d(\"touchstart\",this.Pa);this.d(\"focus\",this.Oa);this.d(\"blur\",this.Na);this.d(\"click\",this.p);this.b.d(\"controlsvisible\",u.bind(this,this.update));a.L(u.bind(this,this.update));this.P={}}});t=u.O.prototype;\nt.e=function(a,c){c=c||{};c.className+=\" vjs-slider\";c=u.k.B({qd:\"slider\",\"aria-valuenow\":0,\"aria-valuemin\":0,\"aria-valuemax\":100,tabIndex:0},c);return u.c.prototype.e.call(this,a,c)};t.Pa=function(a){a.preventDefault();u.Tc();this.P.move=u.bind(this,this.Hb);this.P.end=u.bind(this,this.Ib);u.d(document,\"mousemove\",this.P.move);u.d(document,\"mouseup\",this.P.end);u.d(document,\"touchmove\",this.P.move);u.d(document,\"touchend\",this.P.end);this.Hb(a)};\nt.Ib=function(){u.Bd();u.o(document,\"mousemove\",this.P.move,l);u.o(document,\"mouseup\",this.P.end,l);u.o(document,\"touchmove\",this.P.move,l);u.o(document,\"touchend\",this.P.end,l);this.update()};t.update=function(){if(this.a){var a,c=this.yb(),d=this.handle,e=this.Sc;isNaN(c)&&(c=0);a=c;if(d){a=this.a.offsetWidth;var g=d.w().offsetWidth;a=g?g/a:0;c*=1-a;a=c+a/2;d.w().style.left=u.round(100*c,2)+\"%\"}e.w().style.width=u.round(100*a,2)+\"%\"}};\nfunction F(a,c){var d,e,g,j;d=a.a;e=u.ad(d);j=g=d.offsetWidth;d=a.handle;if(a.g.Cd)return j=e.top,e=c.changedTouches?c.changedTouches[0].pageY:c.pageY,d&&(d=d.w().offsetHeight,j+=d/2,g-=d),Math.max(0,Math.min(1,(j-e+g)/g));g=e.left;e=c.changedTouches?c.changedTouches[0].pageX:c.pageX;d&&(d=d.w().offsetWidth,g+=d/2,j-=d);return Math.max(0,Math.min(1,(e-g)/j))}t.Oa=function(){u.d(document,\"keyup\",u.bind(this,this.ba))};\nt.ba=function(a){37==a.which?(a.preventDefault(),this.yc()):39==a.which&&(a.preventDefault(),this.zc())};t.Na=function(){u.o(document,\"keyup\",u.bind(this,this.ba))};t.p=function(a){a.stopImmediatePropagation();a.preventDefault()};u.ea=u.c.extend();u.ea.prototype.defaultValue=0;u.ea.prototype.e=function(a,c){c=c||{};c.className+=\" vjs-slider-handle\";c=u.k.B({innerHTML:'<span class=\"vjs-control-text\">'+this.defaultValue+\"</span>\"},c);return u.c.prototype.e.call(this,\"div\",c)};u.ma=u.c.extend();\nfunction ca(a,c){a.Z(c);c.d(\"click\",u.bind(a,function(){D(this)}))}u.ma.prototype.e=function(){var a=this.options().Vc||\"ul\";this.sa=u.e(a,{className:\"vjs-menu-content\"});a=u.c.prototype.e.call(this,\"div\",{append:this.sa,className:\"vjs-menu\"});a.appendChild(this.sa);u.d(a,\"click\",function(a){a.preventDefault();a.stopImmediatePropagation()});return a};u.N=u.q.extend({i:function(a,c){u.q.call(this,a,c);this.selected(c.selected)}});\nu.N.prototype.e=function(a,c){return u.q.prototype.e.call(this,\"li\",u.k.B({className:\"vjs-menu-item\",innerHTML:this.g.label},c))};u.N.prototype.p=function(){this.selected(f)};u.N.prototype.selected=function(a){a?(this.n(\"vjs-selected\"),this.a.setAttribute(\"aria-selected\",f)):(this.u(\"vjs-selected\"),this.a.setAttribute(\"aria-selected\",l))};\nu.R=u.q.extend({i:function(a,c){u.q.call(this,a,c);this.wa=this.Ka();this.Z(this.wa);this.I&&0===this.I.length&&this.C();this.d(\"keyup\",this.ba);this.a.setAttribute(\"aria-haspopup\",f);this.a.setAttribute(\"role\",\"button\")}});t=u.R.prototype;t.pa=l;t.Ka=function(){var a=new u.ma(this.b);this.options().title&&a.w().appendChild(u.e(\"li\",{className:\"vjs-menu-title\",innerHTML:u.$(this.A),zd:-1}));if(this.I=this.createItems())for(var c=0;c<this.I.length;c++)ca(a,this.I[c]);return a};t.ta=m();\nt.T=function(){return this.className+\" vjs-menu-button \"+u.q.prototype.T.call(this)};t.Oa=m();t.Na=m();t.p=function(){this.U(\"mouseout\",u.bind(this,function(){D(this.wa);this.a.blur()}));this.pa?G(this):H(this)};t.ba=function(a){a.preventDefault();32==a.which||13==a.which?this.pa?G(this):H(this):27==a.which&&this.pa&&G(this)};function H(a){a.pa=f;a.wa.n(\"vjs-lock-showing\");a.a.setAttribute(\"aria-pressed\",f);a.I&&0<a.I.length&&a.I[0].w().focus()}\nfunction G(a){a.pa=l;D(a.wa);a.a.setAttribute(\"aria-pressed\",l)}\nu.s=u.c.extend({i:function(a,c,d){this.M=a;c=u.k.B(da(a),c);this.v={};this.uc=c.poster;this.sb=c.controls;a.controls=l;u.c.call(this,this,c,d);this.controls()?this.n(\"vjs-controls-enabled\"):this.n(\"vjs-controls-disabled\");this.U(\"play\",function(a){u.j(this.a,{type:\"firstplay\",target:this.a})||(a.preventDefault(),a.stopPropagation(),a.stopImmediatePropagation())});this.d(\"ended\",this.hd);this.d(\"play\",this.Kb);this.d(\"firstplay\",this.jd);this.d(\"pause\",this.Jb);this.d(\"progress\",this.ld);this.d(\"durationchange\",\nthis.sc);this.d(\"error\",this.Gb);this.d(\"fullscreenchange\",this.kd);u.xa[this.Q]=this;c.plugins&&u.k.ua(c.plugins,function(a,c){this[a](c)},this);var e,g,j,k;e=this.Mb;a=function(){e();clearInterval(g);g=setInterval(u.bind(this,e),250)};c=function(){e();clearInterval(g)};this.d(\"mousedown\",a);this.d(\"mousemove\",e);this.d(\"mouseup\",c);this.d(\"keydown\",e);this.d(\"keyup\",e);this.d(\"touchstart\",a);this.d(\"touchmove\",e);this.d(\"touchend\",c);this.d(\"touchcancel\",c);j=setInterval(u.bind(this,function(){this.ka&&\n(this.ka=l,this.ja(f),clearTimeout(k),k=setTimeout(u.bind(this,function(){this.ka||this.ja(l)}),2E3))}),250);this.d(\"dispose\",function(){clearInterval(j);clearTimeout(k)})}});t=u.s.prototype;t.g=u.options;t.D=function(){this.j(\"dispose\");this.o(\"dispose\");u.xa[this.Q]=h;this.M&&this.M.player&&(this.M.player=h);this.a&&this.a.player&&(this.a.player=h);clearInterval(this.Ra);this.za();this.h&&this.h.D();u.c.prototype.D.call(this)};\nfunction da(a){var c={sources:[],tracks:[]};u.k.B(c,u.xb(a));if(a.hasChildNodes()){var d,e,g,j;a=a.childNodes;g=0;for(j=a.length;g<j;g++)d=a[g],e=d.nodeName.toLowerCase(),\"source\"===e?c.sources.push(u.xb(d)):\"track\"===e&&c.tracks.push(u.xb(d))}return c}\nt.e=function(){var a=this.a=u.c.prototype.e.call(this,\"div\"),c=this.M;c.removeAttribute(\"width\");c.removeAttribute(\"height\");if(c.hasChildNodes()){var d,e,g,j,k;d=c.childNodes;e=d.length;for(k=[];e--;)g=d[e],j=g.nodeName.toLowerCase(),\"track\"===j&&k.push(g);for(d=0;d<k.length;d++)c.removeChild(k[d])}c.id=c.id||\"vjs_video_\"+u.t++;a.id=c.id;a.className=c.className;c.id+=\"_html5_api\";c.className=\"vjs-tech\";c.player=a.player=this;this.n(\"vjs-paused\");this.width(this.g.width,f);this.height(this.g.height,\nf);c.parentNode&&c.parentNode.insertBefore(a,c);u.zb(c,a);return a};\nfunction I(a,c,d){a.h?(a.aa=l,a.h.D(),a.Eb&&(a.Eb=l,clearInterval(a.Ra)),a.Fb&&J(a),a.h=l):\"Html5\"!==c&&a.M&&(u.l.jc(a.M),a.M=h);a.ia=c;a.aa=l;var e=u.k.B({source:d,parentEl:a.a},a.g[c.toLowerCase()]);d&&(d.src==a.v.src&&0<a.v.currentTime&&(e.startTime=a.v.currentTime),a.v.src=d.src);a.h=new window.videojs[c](a,e);a.h.L(function(){this.b.Ua();if(!this.m.progressEvents){var a=this.b;a.Eb=f;a.Ra=setInterval(u.bind(a,function(){this.v.lb<this.buffered().end(0)?this.j(\"progress\"):1==this.Ja()&&(clearInterval(this.Ra),\nthis.j(\"progress\"))}),500);a.h.U(\"progress\",function(){this.m.progressEvents=f;var a=this.b;a.Eb=l;clearInterval(a.Ra)})}this.m.timeupdateEvents||(a=this.b,a.Fb=f,a.d(\"play\",a.Cc),a.d(\"pause\",a.za),a.h.U(\"timeupdate\",function(){this.m.timeupdateEvents=f;J(this.b)}))})}function J(a){a.Fb=l;a.za();a.o(\"play\",a.Cc);a.o(\"pause\",a.za)}t.Cc=function(){this.hc&&this.za();this.hc=setInterval(u.bind(this,function(){this.j(\"timeupdate\")}),250)};t.za=function(){clearInterval(this.hc)};\nt.Kb=function(){u.u(this.a,\"vjs-paused\");u.n(this.a,\"vjs-playing\")};t.jd=function(){this.g.starttime&&this.currentTime(this.g.starttime);this.n(\"vjs-has-started\")};t.Jb=function(){u.u(this.a,\"vjs-playing\");u.n(this.a,\"vjs-paused\")};t.ld=function(){1==this.Ja()&&this.j(\"loadedalldata\")};t.hd=function(){this.g.loop&&(this.currentTime(0),this.play())};t.sc=function(){this.duration(K(this,\"duration\"))};t.kd=function(){this.H?this.n(\"vjs-fullscreen\"):this.u(\"vjs-fullscreen\")};\nt.Gb=function(a){u.log(\"Video Error\",a)};function L(a,c,d){if(a.h&&!a.h.aa)a.h.L(function(){this[c](d)});else try{a.h[c](d)}catch(e){throw u.log(e),e;}}function K(a,c){if(a.h&&a.h.aa)try{return a.h[c]()}catch(d){throw a.h[c]===b?u.log(\"Video.js: \"+c+\" method not defined for \"+a.ia+\" playback technology.\",d):\"TypeError\"==d.name?(u.log(\"Video.js: \"+c+\" unavailable on \"+a.ia+\" playback technology element.\",d),a.h.aa=l):u.log(d),d;}}t.play=function(){L(this,\"play\");return this};\nt.pause=function(){L(this,\"pause\");return this};t.paused=function(){return K(this,\"paused\")===l?l:f};t.currentTime=function(a){return a!==b?(this.v.rc=a,L(this,\"setCurrentTime\",a),this.Fb&&this.j(\"timeupdate\"),this):this.v.currentTime=K(this,\"currentTime\")||0};t.duration=function(a){if(a!==b)return this.v.duration=parseFloat(a),this;this.v.duration===b&&this.sc();return this.v.duration};\nt.buffered=function(){var a=K(this,\"buffered\"),c=a.length-1,d=this.v.lb=this.v.lb||0;a&&(0<=c&&a.end(c)!==d)&&(d=a.end(c),this.v.lb=d);return u.tb(0,d)};t.Ja=function(){return this.duration()?this.buffered().end(0)/this.duration():0};t.volume=function(a){if(a!==b)return a=Math.max(0,Math.min(1,parseFloat(a))),this.v.volume=a,L(this,\"setVolume\",a),u.td(a),this;a=parseFloat(K(this,\"volume\"));return isNaN(a)?1:a};t.muted=function(a){return a!==b?(L(this,\"setMuted\",a),this):K(this,\"muted\")||l};\nt.Ta=function(){return K(this,\"supportsFullScreen\")||l};\nt.ya=function(){var a=u.Pb.ya;this.H=f;a?(u.d(document,a.vb,u.bind(this,function(c){this.H=document[a.H];this.H===l&&u.o(document,a.vb,arguments.callee);this.j(\"fullscreenchange\")})),this.a[a.wc]()):this.h.Ta()?L(this,\"enterFullScreen\"):(this.cd=f,this.Yc=document.documentElement.style.overflow,u.d(document,\"keydown\",u.bind(this,this.lc)),document.documentElement.style.overflow=\"hidden\",u.n(document.body,\"vjs-full-window\"),this.j(\"enterFullWindow\"),this.j(\"fullscreenchange\"));return this};\nt.ob=function(){var a=u.Pb.ya;this.H=l;if(a)document[a.nb]();else this.h.Ta()?L(this,\"exitFullScreen\"):(M(this),this.j(\"fullscreenchange\"));return this};t.lc=function(a){27===a.keyCode&&(this.H===f?this.ob():M(this))};function M(a){a.cd=l;u.o(document,\"keydown\",a.lc);document.documentElement.style.overflow=a.Yc;u.u(document.body,\"vjs-full-window\");a.j(\"exitFullWindow\")}\nt.src=function(a){if(a instanceof Array){var c;a:{c=a;for(var d=0,e=this.g.techOrder;d<e.length;d++){var g=u.$(e[d]),j=window.videojs[g];if(j.isSupported())for(var k=0,q=c;k<q.length;k++){var n=q[k];if(j.canPlaySource(n)){c={source:n,h:g};break a}}}c=l}c?(a=c.source,c=c.h,c==this.ia?this.src(a):I(this,c,a)):this.a.appendChild(u.e(\"p\",{innerHTML:this.options().notSupportedMessage}))}else a instanceof Object?window.videojs[this.ia].canPlaySource(a)?this.src(a.src):this.src([a]):(this.v.src=a,this.aa?\n(L(this,\"src\",a),\"auto\"==this.g.preload&&this.load(),this.g.autoplay&&this.play()):this.L(function(){this.src(a)}));return this};t.load=function(){L(this,\"load\");return this};t.currentSrc=function(){return K(this,\"currentSrc\")||this.v.src||\"\"};t.Qa=function(a){return a!==b?(L(this,\"setPreload\",a),this.g.preload=a,this):K(this,\"preload\")};t.autoplay=function(a){return a!==b?(L(this,\"setAutoplay\",a),this.g.autoplay=a,this):K(this,\"autoplay\")};\nt.loop=function(a){return a!==b?(L(this,\"setLoop\",a),this.g.loop=a,this):K(this,\"loop\")};t.poster=function(a){return a!==b?(this.uc=a,this):this.uc};t.controls=function(a){return a!==b?(a=!!a,this.sb!==a&&((this.sb=a)?(this.u(\"vjs-controls-disabled\"),this.n(\"vjs-controls-enabled\"),this.j(\"controlsenabled\")):(this.u(\"vjs-controls-enabled\"),this.n(\"vjs-controls-disabled\"),this.j(\"controlsdisabled\"))),this):this.sb};u.s.prototype.Sb;t=u.s.prototype;\nt.Rb=function(a){return a!==b?(a=!!a,this.Sb!==a&&((this.Sb=a)?(this.n(\"vjs-using-native-controls\"),this.j(\"usingnativecontrols\")):(this.u(\"vjs-using-native-controls\"),this.j(\"usingcustomcontrols\"))),this):this.Sb};t.error=function(){return K(this,\"error\")};t.seeking=function(){return K(this,\"seeking\")};t.ka=f;t.Mb=function(){this.ka=f};t.Qb=f;\nt.ja=function(a){return a!==b?(a=!!a,a!==this.Qb&&((this.Qb=a)?(this.ka=f,this.u(\"vjs-user-inactive\"),this.n(\"vjs-user-active\"),this.j(\"useractive\")):(this.ka=l,this.h.U(\"mousemove\",function(a){a.stopPropagation();a.preventDefault()}),this.u(\"vjs-user-active\"),this.n(\"vjs-user-inactive\"),this.j(\"userinactive\"))),this):this.Qb};var N,O,P;P=document.createElement(\"div\");O={};\nP.Hd!==b?(O.wc=\"requestFullscreen\",O.nb=\"exitFullscreen\",O.vb=\"fullscreenchange\",O.H=\"fullScreen\"):(document.mozCancelFullScreen?(N=\"moz\",O.H=N+\"FullScreen\"):(N=\"webkit\",O.H=N+\"IsFullScreen\"),P[N+\"RequestFullScreen\"]&&(O.wc=N+\"RequestFullScreen\",O.nb=N+\"CancelFullScreen\"),O.vb=N+\"fullscreenchange\");document[O.nb]&&(u.Pb.ya=O);u.Fa=u.c.extend();\nu.Fa.prototype.g={Md:\"play\",children:{playToggle:{},currentTimeDisplay:{},timeDivider:{},durationDisplay:{},remainingTimeDisplay:{},progressControl:{},fullscreenToggle:{},volumeControl:{},muteToggle:{}}};u.Fa.prototype.e=function(){return u.e(\"div\",{className:\"vjs-control-bar\"})};u.Yb=u.q.extend({i:function(a,c){u.q.call(this,a,c);a.d(\"play\",u.bind(this,this.Kb));a.d(\"pause\",u.bind(this,this.Jb))}});t=u.Yb.prototype;t.qa=\"Play\";t.T=function(){return\"vjs-play-control \"+u.q.prototype.T.call(this)};\nt.p=function(){this.b.paused()?this.b.play():this.b.pause()};t.Kb=function(){u.u(this.a,\"vjs-paused\");u.n(this.a,\"vjs-playing\");this.a.children[0].children[0].innerHTML=\"Pause\"};t.Jb=function(){u.u(this.a,\"vjs-playing\");u.n(this.a,\"vjs-paused\");this.a.children[0].children[0].innerHTML=\"Play\"};u.Ya=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ca))}});\nu.Ya.prototype.e=function(){var a=u.c.prototype.e.call(this,\"div\",{className:\"vjs-current-time vjs-time-controls vjs-control\"});this.content=u.e(\"div\",{className:\"vjs-current-time-display\",innerHTML:'<span class=\"vjs-control-text\">Current Time </span>0:00',\"aria-live\":\"off\"});a.appendChild(u.e(\"div\").appendChild(this.content));return a};\nu.Ya.prototype.Ca=function(){var a=this.b.Nb?this.b.v.currentTime:this.b.currentTime();this.content.innerHTML='<span class=\"vjs-control-text\">Current Time </span>'+u.La(a,this.b.duration())};u.Za=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ca))}});\nu.Za.prototype.e=function(){var a=u.c.prototype.e.call(this,\"div\",{className:\"vjs-duration vjs-time-controls vjs-control\"});this.content=u.e(\"div\",{className:\"vjs-duration-display\",innerHTML:'<span class=\"vjs-control-text\">Duration Time </span>0:00',\"aria-live\":\"off\"});a.appendChild(u.e(\"div\").appendChild(this.content));return a};u.Za.prototype.Ca=function(){var a=this.b.duration();a&&(this.content.innerHTML='<span class=\"vjs-control-text\">Duration Time </span>'+u.La(a))};\nu.cc=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.cc.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-time-divider\",innerHTML:\"<div><span>/</span></div>\"})};u.fb=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ca))}});\nu.fb.prototype.e=function(){var a=u.c.prototype.e.call(this,\"div\",{className:\"vjs-remaining-time vjs-time-controls vjs-control\"});this.content=u.e(\"div\",{className:\"vjs-remaining-time-display\",innerHTML:'<span class=\"vjs-control-text\">Remaining Time </span>-0:00',\"aria-live\":\"off\"});a.appendChild(u.e(\"div\").appendChild(this.content));return a};u.fb.prototype.Ca=function(){this.b.duration()&&(this.content.innerHTML='<span class=\"vjs-control-text\">Remaining Time </span>-'+u.La(this.b.duration()-this.b.currentTime()))};\nu.Ga=u.q.extend({i:function(a,c){u.q.call(this,a,c)}});u.Ga.prototype.qa=\"Fullscreen\";u.Ga.prototype.T=function(){return\"vjs-fullscreen-control \"+u.q.prototype.T.call(this)};u.Ga.prototype.p=function(){this.b.H?(this.b.ob(),this.a.children[0].children[0].innerHTML=\"Fullscreen\"):(this.b.ya(),this.a.children[0].children[0].innerHTML=\"Non-Fullscreen\")};u.eb=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.eb.prototype.g={children:{seekBar:{}}};\nu.eb.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-progress-control vjs-control\"})};u.Zb=u.O.extend({i:function(a,c){u.O.call(this,a,c);a.d(\"timeupdate\",u.bind(this,this.Ba));a.L(u.bind(this,this.Ba))}});t=u.Zb.prototype;t.g={children:{loadProgressBar:{},playProgressBar:{},seekHandle:{}},barName:\"playProgressBar\",handleName:\"seekHandle\"};t.tc=\"timeupdate\";t.e=function(){return u.O.prototype.e.call(this,\"div\",{className:\"vjs-progress-holder\",\"aria-label\":\"video progress bar\"})};\nt.Ba=function(){var a=this.b.Nb?this.b.v.currentTime:this.b.currentTime();this.a.setAttribute(\"aria-valuenow\",u.round(100*this.yb(),2));this.a.setAttribute(\"aria-valuetext\",u.La(a,this.b.duration()))};t.yb=function(){var a;\"Flash\"===this.b.ia&&this.b.seeking()?(a=this.b.v,a=a.rc?a.rc:this.b.currentTime()):a=this.b.currentTime();return a/this.b.duration()};t.Pa=function(a){u.O.prototype.Pa.call(this,a);this.b.Nb=f;this.Dd=!this.b.paused();this.b.pause()};\nt.Hb=function(a){a=F(this,a)*this.b.duration();a==this.b.duration()&&(a-=0.1);this.b.currentTime(a)};t.Ib=function(a){u.O.prototype.Ib.call(this,a);this.b.Nb=l;this.Dd&&this.b.play()};t.zc=function(){this.b.currentTime(this.b.currentTime()+5)};t.yc=function(){this.b.currentTime(this.b.currentTime()-5)};u.ab=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"progress\",u.bind(this,this.update))}});u.ab.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-load-progress\",innerHTML:'<span class=\"vjs-control-text\">Loaded: 0%</span>'})};\nu.ab.prototype.update=function(){this.a.style&&(this.a.style.width=u.round(100*this.b.Ja(),2)+\"%\")};u.Xb=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});u.Xb.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-play-progress\",innerHTML:'<span class=\"vjs-control-text\">Progress: 0%</span>'})};u.gb=u.ea.extend();u.gb.prototype.defaultValue=\"00:00\";u.gb.prototype.e=function(){return u.ea.prototype.e.call(this,\"div\",{className:\"vjs-seek-handle\"})};\nu.ib=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.h&&(a.h.m&&a.h.m.volumeControl===l)&&this.n(\"vjs-hidden\");a.d(\"loadstart\",u.bind(this,function(){a.h.m&&a.h.m.volumeControl===l?this.n(\"vjs-hidden\"):this.u(\"vjs-hidden\")}))}});u.ib.prototype.g={children:{volumeBar:{}}};u.ib.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-volume-control vjs-control\"})};\nu.hb=u.O.extend({i:function(a,c){u.O.call(this,a,c);a.d(\"volumechange\",u.bind(this,this.Ba));a.L(u.bind(this,this.Ba));setTimeout(u.bind(this,this.update),0)}});t=u.hb.prototype;t.Ba=function(){this.a.setAttribute(\"aria-valuenow\",u.round(100*this.b.volume(),2));this.a.setAttribute(\"aria-valuetext\",u.round(100*this.b.volume(),2)+\"%\")};t.g={children:{volumeLevel:{},volumeHandle:{}},barName:\"volumeLevel\",handleName:\"volumeHandle\"};t.tc=\"volumechange\";\nt.e=function(){return u.O.prototype.e.call(this,\"div\",{className:\"vjs-volume-bar\",\"aria-label\":\"volume level\"})};t.Hb=function(a){this.b.muted()&&this.b.muted(l);this.b.volume(F(this,a))};t.yb=function(){return this.b.muted()?0:this.b.volume()};t.zc=function(){this.b.volume(this.b.volume()+0.1)};t.yc=function(){this.b.volume(this.b.volume()-0.1)};u.dc=u.c.extend({i:function(a,c){u.c.call(this,a,c)}});\nu.dc.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-volume-level\",innerHTML:'<span class=\"vjs-control-text\"></span>'})};u.jb=u.ea.extend();u.jb.prototype.defaultValue=\"00:00\";u.jb.prototype.e=function(){return u.ea.prototype.e.call(this,\"div\",{className:\"vjs-volume-handle\"})};\nu.da=u.q.extend({i:function(a,c){u.q.call(this,a,c);a.d(\"volumechange\",u.bind(this,this.update));a.h&&(a.h.m&&a.h.m.volumeControl===l)&&this.n(\"vjs-hidden\");a.d(\"loadstart\",u.bind(this,function(){a.h.m&&a.h.m.volumeControl===l?this.n(\"vjs-hidden\"):this.u(\"vjs-hidden\")}))}});u.da.prototype.e=function(){return u.q.prototype.e.call(this,\"div\",{className:\"vjs-mute-control vjs-control\",innerHTML:'<div><span class=\"vjs-control-text\">Mute</span></div>'})};\nu.da.prototype.p=function(){this.b.muted(this.b.muted()?l:f)};u.da.prototype.update=function(){var a=this.b.volume(),c=3;0===a||this.b.muted()?c=0:0.33>a?c=1:0.67>a&&(c=2);this.b.muted()?\"Unmute\"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML=\"Unmute\"):\"Mute\"!=this.a.children[0].children[0].innerHTML&&(this.a.children[0].children[0].innerHTML=\"Mute\");for(a=0;4>a;a++)u.u(this.a,\"vjs-vol-\"+a);u.n(this.a,\"vjs-vol-\"+c)};\nu.oa=u.R.extend({i:function(a,c){u.R.call(this,a,c);a.d(\"volumechange\",u.bind(this,this.update));a.h&&(a.h.m&&a.h.m.Dc===l)&&this.n(\"vjs-hidden\");a.d(\"loadstart\",u.bind(this,function(){a.h.m&&a.h.m.Dc===l?this.n(\"vjs-hidden\"):this.u(\"vjs-hidden\")}));this.n(\"vjs-menu-button\")}});u.oa.prototype.Ka=function(){var a=new u.ma(this.b,{Vc:\"div\"}),c=new u.hb(this.b,u.k.B({Cd:f},this.g.Vd));a.Z(c);return a};u.oa.prototype.p=function(){u.da.prototype.p.call(this);u.R.prototype.p.call(this)};\nu.oa.prototype.e=function(){return u.q.prototype.e.call(this,\"div\",{className:\"vjs-volume-menu-button vjs-menu-button vjs-control\",innerHTML:'<div><span class=\"vjs-control-text\">Mute</span></div>'})};u.oa.prototype.update=u.da.prototype.update;u.cb=u.q.extend({i:function(a,c){u.q.call(this,a,c);(!a.poster()||!a.controls())&&this.C();a.d(\"play\",u.bind(this,this.C))}});\nu.cb.prototype.e=function(){var a=u.e(\"div\",{className:\"vjs-poster\",tabIndex:-1}),c=this.b.poster();c&&(\"backgroundSize\"in a.style?a.style.backgroundImage='url(\"'+c+'\")':a.appendChild(u.e(\"img\",{src:c})));return a};u.cb.prototype.p=function(){this.K().controls()&&this.b.play()};\nu.Wb=u.c.extend({i:function(a,c){u.c.call(this,a,c);a.d(\"canplay\",u.bind(this,this.C));a.d(\"canplaythrough\",u.bind(this,this.C));a.d(\"playing\",u.bind(this,this.C));a.d(\"seeked\",u.bind(this,this.C));a.d(\"seeking\",u.bind(this,this.show));a.d(\"seeked\",u.bind(this,this.C));a.d(\"error\",u.bind(this,this.show));a.d(\"waiting\",u.bind(this,this.show))}});u.Wb.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-loading-spinner\"})};u.Wa=u.q.extend();\nu.Wa.prototype.e=function(){return u.q.prototype.e.call(this,\"div\",{className:\"vjs-big-play-button\",innerHTML:'<span aria-hidden=\"true\"></span>',\"aria-label\":\"play video\"})};u.Wa.prototype.p=function(){this.b.play()};\nu.r=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);var e,g;g=this;e=this.K();a=function(){if(e.controls()&&!e.Rb()){var a,c;g.d(\"mousedown\",g.p);g.d(\"touchstart\",function(a){a.preventDefault();a.stopPropagation();c=this.b.ja()});a=function(a){a.stopPropagation();c&&this.b.Mb()};g.d(\"touchmove\",a);g.d(\"touchleave\",a);g.d(\"touchcancel\",a);g.d(\"touchend\",a);var d,n,r;d=0;g.d(\"touchstart\",function(){d=(new Date).getTime();r=f});a=function(){r=l};g.d(\"touchmove\",a);g.d(\"touchleave\",a);g.d(\"touchcancel\",\na);g.d(\"touchend\",function(){r===f&&(n=(new Date).getTime()-d,250>n&&this.j(\"tap\"))});g.d(\"tap\",g.md)}};c=u.bind(g,g.pd);this.L(a);e.d(\"controlsenabled\",a);e.d(\"controlsdisabled\",c)}});u.r.prototype.pd=function(){this.o(\"tap\");this.o(\"touchstart\");this.o(\"touchmove\");this.o(\"touchleave\");this.o(\"touchcancel\");this.o(\"touchend\");this.o(\"click\");this.o(\"mousedown\")};u.r.prototype.p=function(a){0===a.button&&this.K().controls()&&(this.K().paused()?this.K().play():this.K().pause())};\nu.r.prototype.md=function(){this.K().ja(!this.K().ja())};u.r.prototype.m={volumeControl:f,fullscreenResize:l,progressEvents:l,timeupdateEvents:l};u.media={};u.media.Va=\"play pause paused currentTime setCurrentTime duration buffered volume setVolume muted setMuted width height supportsFullScreen enterFullScreen src load currentSrc preload setPreload autoplay setAutoplay loop setLoop error networkState readyState seeking initialTime startOffsetTime played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks defaultPlaybackRate playbackRate mediaGroup controller controls defaultMuted\".split(\" \");\nfunction ea(){var a=u.media.Va[i];return function(){throw Error('The \"'+a+\"\\\" method is not available on the playback technology's API\");}}for(var i=u.media.Va.length-1;0<=i;i--)u.r.prototype[u.media.Va[i]]=ea();\nu.l=u.r.extend({i:function(a,c,d){this.m.volumeControl=u.l.Uc();this.m.movingMediaElementInDOM=!u.Kc;this.m.fullscreenResize=f;u.r.call(this,a,c,d);(c=c.source)&&this.a.currentSrc===c.src&&0<this.a.networkState?a.j(\"loadstart\"):c&&(this.a.src=c.src);if(u.ac&&a.options().nativeControlsForTouch!==l){var e,g,j,k;e=this;g=this.K();c=g.controls();e.a.controls=!!c;j=function(){e.a.controls=f};k=function(){e.a.controls=l};g.d(\"controlsenabled\",j);g.d(\"controlsdisabled\",k);c=function(){g.o(\"controlsenabled\",\nj);g.o(\"controlsdisabled\",k)};e.d(\"dispose\",c);g.d(\"usingcustomcontrols\",c);g.Rb(f)}a.L(function(){this.M&&(this.g.autoplay&&this.paused())&&(delete this.M.poster,this.play())});for(a=u.l.$a.length-1;0<=a;a--)u.d(this.a,u.l.$a[a],u.bind(this.b,this.$c));this.Ua()}});t=u.l.prototype;t.D=function(){u.r.prototype.D.call(this)};\nt.e=function(){var a=this.b,c=a.M,d;if(!c||this.m.movingMediaElementInDOM===l)c?(d=c.cloneNode(l),u.l.jc(c),c=d,a.M=h):c=u.e(\"video\",{id:a.id()+\"_html5_api\",className:\"vjs-tech\"}),c.player=a,u.zb(c,a.w());d=[\"autoplay\",\"preload\",\"loop\",\"muted\"];for(var e=d.length-1;0<=e;e--){var g=d[e];a.g[g]!==h&&(c[g]=a.g[g])}return c};t.$c=function(a){this.j(a);a.stopPropagation()};t.play=function(){this.a.play()};t.pause=function(){this.a.pause()};t.paused=function(){return this.a.paused};t.currentTime=function(){return this.a.currentTime};\nt.sd=function(a){try{this.a.currentTime=a}catch(c){u.log(c,\"Video is not ready. (Video.js)\")}};t.duration=function(){return this.a.duration||0};t.buffered=function(){return this.a.buffered};t.volume=function(){return this.a.volume};t.xd=function(a){this.a.volume=a};t.muted=function(){return this.a.muted};t.vd=function(a){this.a.muted=a};t.width=function(){return this.a.offsetWidth};t.height=function(){return this.a.offsetHeight};\nt.Ta=function(){return\"function\"==typeof this.a.webkitEnterFullScreen&&(/Android/.test(u.F)||!/Chrome|Mac OS X 10.5/.test(u.F))?f:l};t.src=function(a){this.a.src=a};t.load=function(){this.a.load()};t.currentSrc=function(){return this.a.currentSrc};t.Qa=function(){return this.a.Qa};t.wd=function(a){this.a.Qa=a};t.autoplay=function(){return this.a.autoplay};t.rd=function(a){this.a.autoplay=a};t.controls=function(){return this.a.controls};t.loop=function(){return this.a.loop};\nt.ud=function(a){this.a.loop=a};t.error=function(){return this.a.error};t.seeking=function(){return this.a.seeking};u.l.isSupported=function(){return!!u.na.canPlayType};u.l.mb=function(a){try{return!!u.na.canPlayType(a.type)}catch(c){return\"\"}};u.l.Uc=function(){var a=u.na.volume;u.na.volume=a/2+0.1;return a!==u.na.volume};u.l.$a=\"loadstart suspend abort error emptied stalled loadedmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate progress play pause ratechange volumechange\".split(\" \");\nu.l.jc=function(a){if(a){a.player=h;for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute(\"src\");\"function\"===typeof a.load&&a.load()}};u.Oc&&(document.createElement(\"video\").constructor.prototype.canPlayType=function(a){return a&&-1!=a.toLowerCase().indexOf(\"video/mp4\")?\"maybe\":\"\"});\nu.f=u.r.extend({i:function(a,c,d){u.r.call(this,a,c,d);var e=c.source;d=c.parentEl;var g=this.a=u.e(\"div\",{id:a.id()+\"_temp_flash\"}),j=a.id()+\"_flash_api\";a=a.g;var k=u.k.B({readyFunction:\"videojs.Flash.onReady\",eventProxyFunction:\"videojs.Flash.onEvent\",errorEventProxyFunction:\"videojs.Flash.onError\",autoplay:a.autoplay,preload:a.Qa,loop:a.loop,muted:a.muted},c.flashVars),q=u.k.B({wmode:\"opaque\",bgcolor:\"#000000\"},c.params),n=u.k.B({id:j,name:j,\"class\":\"vjs-tech\"},c.attributes);e&&(e.type&&u.f.ed(e.type)?\n(a=u.f.Ac(e.src),k.rtmpConnection=encodeURIComponent(a.rb),k.rtmpStream=encodeURIComponent(a.Ob)):k.src=encodeURIComponent(u.mc(e.src)));u.zb(g,d);c.startTime&&this.L(function(){this.load();this.play();this.currentTime(c.startTime)});if(c.iFrameMode===f&&!u.Jc){var r=u.e(\"iframe\",{id:j+\"_iframe\",name:j+\"_iframe\",className:\"vjs-tech\",scrolling:\"no\",marginWidth:0,marginHeight:0,frameBorder:0});k.readyFunction=\"ready\";k.eventProxyFunction=\"events\";k.errorEventProxyFunction=\"errors\";u.d(r,\"load\",u.bind(this,\nfunction(){var a,d=r.contentWindow;a=r.contentDocument?r.contentDocument:r.contentWindow.document;a.write(u.f.nc(c.swf,k,q,n));d.player=this.b;d.ready=u.bind(this.b,function(c){var d=this.h;d.a=a.getElementById(c);u.f.pb(d)});d.events=u.bind(this.b,function(a,c){this&&\"flash\"===this.ia&&this.j(c)});d.errors=u.bind(this.b,function(a,c){u.log(\"Flash Error\",c)})}));g.parentNode.replaceChild(r,g)}else u.f.Zc(c.swf,g,k,q,n)}});t=u.f.prototype;t.D=function(){u.r.prototype.D.call(this)};t.play=function(){this.a.vjs_play()};\nt.pause=function(){this.a.vjs_pause()};t.src=function(a){u.f.dd(a)?(a=u.f.Ac(a),this.Qd(a.rb),this.Rd(a.Ob)):(a=u.mc(a),this.a.vjs_src(a));if(this.b.autoplay()){var c=this;setTimeout(function(){c.play()},0)}};t.currentSrc=function(){var a=this.a.vjs_getProperty(\"currentSrc\");if(a==h){var c=this.Od(),d=this.Pd();c&&d&&(a=u.f.yd(c,d))}return a};t.load=function(){this.a.vjs_load()};t.poster=function(){this.a.vjs_getProperty(\"poster\")};t.buffered=function(){return u.tb(0,this.a.vjs_getProperty(\"buffered\"))};\nt.Ta=s(l);var Q=u.f.prototype,R=\"rtmpConnection rtmpStream preload currentTime defaultPlaybackRate playbackRate autoplay loop mediaGroup controller controls volume muted defaultMuted\".split(\" \"),S=\"error currentSrc networkState readyState seeking initialTime duration startOffsetTime paused played seekable ended videoTracks audioTracks videoWidth videoHeight textTracks\".split(\" \");\nfunction fa(){var a=R[T],c=a.charAt(0).toUpperCase()+a.slice(1);Q[\"set\"+c]=function(c){return this.a.vjs_setProperty(a,c)}}function U(a){Q[a]=function(){return this.a.vjs_getProperty(a)}}var T;for(T=0;T<R.length;T++)U(R[T]),fa();for(T=0;T<S.length;T++)U(S[T]);u.f.isSupported=function(){return 10<=u.f.version()[0]};u.f.mb=function(a){if(!a.type)return\"\";a=a.type.replace(/;.*/,\"\").toLowerCase();if(a in u.f.bd||a in u.f.Bc)return\"maybe\"};\nu.f.bd={\"video/flv\":\"FLV\",\"video/x-flv\":\"FLV\",\"video/mp4\":\"MP4\",\"video/m4v\":\"MP4\"};u.f.Bc={\"rtmp/mp4\":\"MP4\",\"rtmp/flv\":\"FLV\"};u.f.onReady=function(a){a=u.w(a);var c=a.player||a.parentNode.player,d=c.h;a.player=c;d.a=a;u.f.pb(d)};u.f.pb=function(a){a.w().vjs_getProperty?a.Ua():setTimeout(function(){u.f.pb(a)},50)};u.f.onEvent=function(a,c){u.w(a).player.j(c)};u.f.onError=function(a,c){u.w(a).player.j(\"error\");u.log(\"Flash Error\",c,a)};\nu.f.version=function(){var a=\"0,0,0\";try{a=(new window.ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\")).GetVariable(\"$version\").replace(/\\D+/g,\",\").match(/^,?(.+),?$/)[1]}catch(c){try{navigator.mimeTypes[\"application/x-shockwave-flash\"].enabledPlugin&&(a=(navigator.plugins[\"Shockwave Flash 2.0\"]||navigator.plugins[\"Shockwave Flash\"]).description.replace(/\\D+/g,\",\").match(/^,?(.+),?$/)[1])}catch(d){}}return a.split(\",\")};\nu.f.Zc=function(a,c,d,e,g){a=u.f.nc(a,d,e,g);a=u.e(\"div\",{innerHTML:a}).childNodes[0];d=c.parentNode;c.parentNode.replaceChild(a,c);var j=d.childNodes[0];setTimeout(function(){j.style.display=\"block\"},1E3)};\nu.f.nc=function(a,c,d,e){var g=\"\",j=\"\",k=\"\";c&&u.k.ua(c,function(a,c){g+=a+\"=\"+c+\"&amp;\"});d=u.k.B({movie:a,flashvars:g,allowScriptAccess:\"always\",allowNetworking:\"all\"},d);u.k.ua(d,function(a,c){j+='<param name=\"'+a+'\" value=\"'+c+'\" />'});e=u.k.B({data:a,width:\"100%\",height:\"100%\"},e);u.k.ua(e,function(a,c){k+=a+'=\"'+c+'\" '});return'<object type=\"application/x-shockwave-flash\"'+k+\">\"+j+\"</object>\"};u.f.yd=function(a,c){return a+\"&\"+c};\nu.f.Ac=function(a){var c={rb:\"\",Ob:\"\"};if(!a)return c;var d=a.indexOf(\"&\"),e;-1!==d?e=d+1:(d=e=a.lastIndexOf(\"/\")+1,0===d&&(d=e=a.length));c.rb=a.substring(0,d);c.Ob=a.substring(e,a.length);return c};u.f.ed=function(a){return a in u.f.Bc};u.f.Qc=/^rtmp[set]?:\\/\\//i;u.f.dd=function(a){return u.f.Qc.test(a)};\nu.Pc=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);if(!a.g.sources||0===a.g.sources.length){c=0;for(d=a.g.techOrder;c<d.length;c++){var e=u.$(d[c]),g=window.videojs[e];if(g&&g.isSupported()){I(a,e);break}}}else a.src(a.g.sources)}});function V(a){a.Aa=a.Aa||[];return a.Aa}function W(a,c,d){for(var e=a.Aa,g=0,j=e.length,k,q;g<j;g++)k=e[g],k.id()===c?(k.show(),q=k):d&&(k.J()==d&&0<k.mode())&&k.disable();(c=q?q.J():d?d:l)&&a.j(c+\"trackchange\")}\nu.X=u.c.extend({i:function(a,c){u.c.call(this,a,c);this.Q=c.id||\"vjs_\"+c.kind+\"_\"+c.language+\"_\"+u.t++;this.xc=c.src;this.Wc=c[\"default\"]||c.dflt;this.Ad=c.title;this.Ld=c.srclang;this.fd=c.label;this.fa=[];this.ec=[];this.ga=this.ha=0;this.b.d(\"fullscreenchange\",u.bind(this,this.Rc))}});t=u.X.prototype;t.J=p(\"A\");t.src=p(\"xc\");t.ub=p(\"Wc\");t.title=p(\"Ad\");t.label=p(\"fd\");t.readyState=p(\"ha\");t.mode=p(\"ga\");t.Rc=function(){this.a.style.fontSize=this.b.H?140*(screen.width/this.b.width())+\"%\":\"\"};\nt.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-\"+this.A+\" vjs-text-track\"})};t.show=function(){X(this);this.ga=2;u.c.prototype.show.call(this)};t.C=function(){X(this);this.ga=1;u.c.prototype.C.call(this)};t.disable=function(){2==this.ga&&this.C();this.b.o(\"timeupdate\",u.bind(this,this.update,this.Q));this.b.o(\"ended\",u.bind(this,this.reset,this.Q));this.reset();this.b.V.textTrackDisplay.removeChild(this);this.ga=0};\nfunction X(a){0===a.ha&&a.load();0===a.ga&&(a.b.d(\"timeupdate\",u.bind(a,a.update,a.Q)),a.b.d(\"ended\",u.bind(a,a.reset,a.Q)),(\"captions\"===a.A||\"subtitles\"===a.A)&&a.b.V.textTrackDisplay.Z(a))}t.load=function(){0===this.ha&&(this.ha=1,u.get(this.xc,u.bind(this,this.nd),u.bind(this,this.Gb)))};t.Gb=function(a){this.error=a;this.ha=3;this.j(\"error\")};\nt.nd=function(a){var c,d;a=a.split(\"\\n\");for(var e=\"\",g=1,j=a.length;g<j;g++)if(e=u.trim(a[g])){-1==e.indexOf(\"--\\x3e\")?(c=e,e=u.trim(a[++g])):c=this.fa.length;c={id:c,index:this.fa.length};d=e.split(\" --\\x3e \");c.startTime=Y(d[0]);c.va=Y(d[1]);for(d=[];a[++g]&&(e=u.trim(a[g]));)d.push(e);c.text=d.join(\"<br/>\");this.fa.push(c)}this.ha=2;this.j(\"loaded\")};\nfunction Y(a){var c=a.split(\":\");a=0;var d,e,g;3==c.length?(d=c[0],e=c[1],c=c[2]):(d=0,e=c[0],c=c[1]);c=c.split(/\\s+/);c=c.splice(0,1)[0];c=c.split(/\\.|,/);g=parseFloat(c[1]);c=c[0];a+=3600*parseFloat(d);a+=60*parseFloat(e);a+=parseFloat(c);g&&(a+=g/1E3);return a}\nt.update=function(){if(0<this.fa.length){var a=this.b.currentTime();if(this.Lb===b||a<this.Lb||this.Ma<=a){var c=this.fa,d=this.b.duration(),e=0,g=l,j=[],k,q,n,r;a>=this.Ma||this.Ma===b?r=this.wb!==b?this.wb:0:(g=f,r=this.Db!==b?this.Db:c.length-1);for(;;){n=c[r];if(n.va<=a)e=Math.max(e,n.va),n.Ia&&(n.Ia=l);else if(a<n.startTime){if(d=Math.min(d,n.startTime),n.Ia&&(n.Ia=l),!g)break}else g?(j.splice(0,0,n),q===b&&(q=r),k=r):(j.push(n),k===b&&(k=r),q=r),d=Math.min(d,n.va),e=Math.max(e,n.startTime),\nn.Ia=f;if(g)if(0===r)break;else r--;else if(r===c.length-1)break;else r++}this.ec=j;this.Ma=d;this.Lb=e;this.wb=k;this.Db=q;a=this.ec;c=\"\";d=0;for(e=a.length;d<e;d++)c+='<span class=\"vjs-tt-cue\">'+a[d].text+\"</span>\";this.a.innerHTML=c;this.j(\"cuechange\")}}};t.reset=function(){this.Ma=0;this.Lb=this.b.duration();this.Db=this.wb=0};u.Ub=u.X.extend();u.Ub.prototype.A=\"captions\";u.$b=u.X.extend();u.$b.prototype.A=\"subtitles\";u.Vb=u.X.extend();u.Vb.prototype.A=\"chapters\";\nu.bc=u.c.extend({i:function(a,c,d){u.c.call(this,a,c,d);if(a.g.tracks&&0<a.g.tracks.length){c=this.b;a=a.g.tracks;var e;for(d=0;d<a.length;d++){e=a[d];var g=c,j=e.kind,k=e.label,q=e.language,n=e;e=g.Aa=g.Aa||[];n=n||{};n.kind=j;n.label=k;n.language=q;j=u.$(j||\"subtitles\");g=new window.videojs[j+\"Track\"](g,n);e.push(g)}}}});u.bc.prototype.e=function(){return u.c.prototype.e.call(this,\"div\",{className:\"vjs-text-track-display\"})};\nu.Y=u.N.extend({i:function(a,c){var d=this.ca=c.track;c.label=d.label();c.selected=d.ub();u.N.call(this,a,c);this.b.d(d.J()+\"trackchange\",u.bind(this,this.update))}});u.Y.prototype.p=function(){u.N.prototype.p.call(this);W(this.b,this.ca.Q,this.ca.J())};u.Y.prototype.update=function(){this.selected(2==this.ca.mode())};u.bb=u.Y.extend({i:function(a,c){c.track={J:function(){return c.kind},K:a,label:function(){return c.kind+\" off\"},ub:s(l),mode:s(l)};u.Y.call(this,a,c);this.selected(f)}});\nu.bb.prototype.p=function(){u.Y.prototype.p.call(this);W(this.b,this.ca.Q,this.ca.J())};u.bb.prototype.update=function(){for(var a=V(this.b),c=0,d=a.length,e,g=f;c<d;c++)e=a[c],e.J()==this.ca.J()&&2==e.mode()&&(g=l);this.selected(g)};u.S=u.R.extend({i:function(a,c){u.R.call(this,a,c);1>=this.I.length&&this.C()}});u.S.prototype.ta=function(){var a=[],c;a.push(new u.bb(this.b,{kind:this.A}));for(var d=0;d<V(this.b).length;d++)c=V(this.b)[d],c.J()===this.A&&a.push(new u.Y(this.b,{track:c}));return a};\nu.Da=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute(\"aria-label\",\"Captions Menu\")}});u.Da.prototype.A=\"captions\";u.Da.prototype.qa=\"Captions\";u.Da.prototype.className=\"vjs-captions-button\";u.Ha=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute(\"aria-label\",\"Subtitles Menu\")}});u.Ha.prototype.A=\"subtitles\";u.Ha.prototype.qa=\"Subtitles\";u.Ha.prototype.className=\"vjs-subtitles-button\";\nu.Ea=u.S.extend({i:function(a,c,d){u.S.call(this,a,c,d);this.a.setAttribute(\"aria-label\",\"Chapters Menu\")}});t=u.Ea.prototype;t.A=\"chapters\";t.qa=\"Chapters\";t.className=\"vjs-chapters-button\";t.ta=function(){for(var a=[],c,d=0;d<V(this.b).length;d++)c=V(this.b)[d],c.J()===this.A&&a.push(new u.Y(this.b,{track:c}));return a};\nt.Ka=function(){for(var a=V(this.b),c=0,d=a.length,e,g,j=this.I=[];c<d;c++)if(e=a[c],e.J()==this.A&&e.ub()){if(2>e.readyState()){this.Id=e;e.d(\"loaded\",u.bind(this,this.Ka));return}g=e;break}a=this.wa=new u.ma(this.b);a.a.appendChild(u.e(\"li\",{className:\"vjs-menu-title\",innerHTML:u.$(this.A),zd:-1}));if(g){e=g.fa;for(var k,c=0,d=e.length;c<d;c++)k=e[c],k=new u.Xa(this.b,{track:g,cue:k}),j.push(k),a.Z(k)}0<this.I.length&&this.show();return a};\nu.Xa=u.N.extend({i:function(a,c){var d=this.ca=c.track,e=this.cue=c.cue,g=a.currentTime();c.label=e.text;c.selected=e.startTime<=g&&g<e.va;u.N.call(this,a,c);d.d(\"cuechange\",u.bind(this,this.update))}});u.Xa.prototype.p=function(){u.N.prototype.p.call(this);this.b.currentTime(this.cue.startTime);this.update(this.cue.startTime)};u.Xa.prototype.update=function(){var a=this.cue,c=this.b.currentTime();this.selected(a.startTime<=c&&c<a.va)};\nu.k.B(u.Fa.prototype.g.children,{subtitlesButton:{},captionsButton:{},chaptersButton:{}});\nif(\"undefined\"!==typeof window.JSON&&\"function\"===window.JSON.parse)u.JSON=window.JSON;else{u.JSON={};var Z=/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;u.JSON.parse=function(a,c){function d(a,e){var k,q,n=a[e];if(n&&\"object\"===typeof n)for(k in n)Object.prototype.hasOwnProperty.call(n,k)&&(q=d(n,k),q!==b?n[k]=q:delete n[k]);return c.call(a,e,n)}var e;a=String(a);Z.lastIndex=0;Z.test(a)&&(a=a.replace(Z,function(a){return\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)}));\nif(/^[\\],:{}\\s]*$/.test(a.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g,\"\")))return e=eval(\"(\"+a+\")\"),\"function\"===typeof c?d({\"\":e},\"\"):e;throw new SyntaxError(\"JSON.parse(): invalid or malformed JSON data\");}}\nu.fc=function(){var a,c,d=document.getElementsByTagName(\"video\");if(d&&0<d.length)for(var e=0,g=d.length;e<g;e++)if((c=d[e])&&c.getAttribute)c.player===b&&(a=c.getAttribute(\"data-setup\"),a!==h&&(a=u.JSON.parse(a||\"{}\"),v(c,a)));else{u.kb();break}else u.Ec||u.kb()};u.kb=function(){setTimeout(u.fc,1)};\"complete\"===document.readyState?u.Ec=f:u.U(window,\"load\",function(){u.Ec=f});u.kb();u.od=function(a,c){u.s.prototype[a]=c};var ga=this;ga.Ed=f;function $(a,c){var d=a.split(\".\"),e=ga;!(d[0]in e)&&e.execScript&&e.execScript(\"var \"+d[0]);for(var g;d.length&&(g=d.shift());)!d.length&&c!==b?e[g]=c:e=e[g]?e[g]:e[g]={}};$(\"videojs\",u);$(\"_V_\",u);$(\"videojs.options\",u.options);$(\"videojs.players\",u.xa);$(\"videojs.TOUCH_ENABLED\",u.ac);$(\"videojs.cache\",u.ra);$(\"videojs.Component\",u.c);u.c.prototype.player=u.c.prototype.K;u.c.prototype.dispose=u.c.prototype.D;u.c.prototype.createEl=u.c.prototype.e;u.c.prototype.el=u.c.prototype.w;u.c.prototype.addChild=u.c.prototype.Z;u.c.prototype.children=u.c.prototype.children;u.c.prototype.on=u.c.prototype.d;u.c.prototype.off=u.c.prototype.o;u.c.prototype.one=u.c.prototype.U;\nu.c.prototype.trigger=u.c.prototype.j;u.c.prototype.triggerReady=u.c.prototype.Ua;u.c.prototype.show=u.c.prototype.show;u.c.prototype.hide=u.c.prototype.C;u.c.prototype.width=u.c.prototype.width;u.c.prototype.height=u.c.prototype.height;u.c.prototype.dimensions=u.c.prototype.Xc;u.c.prototype.ready=u.c.prototype.L;u.c.prototype.addClass=u.c.prototype.n;u.c.prototype.removeClass=u.c.prototype.u;$(\"videojs.Player\",u.s);u.s.prototype.dispose=u.s.prototype.D;u.s.prototype.requestFullScreen=u.s.prototype.ya;\nu.s.prototype.cancelFullScreen=u.s.prototype.ob;u.s.prototype.bufferedPercent=u.s.prototype.Ja;u.s.prototype.usingNativeControls=u.s.prototype.Rb;u.s.prototype.reportUserActivity=u.s.prototype.Mb;u.s.prototype.userActive=u.s.prototype.ja;$(\"videojs.MediaLoader\",u.Pc);$(\"videojs.TextTrackDisplay\",u.bc);$(\"videojs.ControlBar\",u.Fa);$(\"videojs.Button\",u.q);$(\"videojs.PlayToggle\",u.Yb);$(\"videojs.FullscreenToggle\",u.Ga);$(\"videojs.BigPlayButton\",u.Wa);$(\"videojs.LoadingSpinner\",u.Wb);\n$(\"videojs.CurrentTimeDisplay\",u.Ya);$(\"videojs.DurationDisplay\",u.Za);$(\"videojs.TimeDivider\",u.cc);$(\"videojs.RemainingTimeDisplay\",u.fb);$(\"videojs.Slider\",u.O);$(\"videojs.ProgressControl\",u.eb);$(\"videojs.SeekBar\",u.Zb);$(\"videojs.LoadProgressBar\",u.ab);$(\"videojs.PlayProgressBar\",u.Xb);$(\"videojs.SeekHandle\",u.gb);$(\"videojs.VolumeControl\",u.ib);$(\"videojs.VolumeBar\",u.hb);$(\"videojs.VolumeLevel\",u.dc);$(\"videojs.VolumeMenuButton\",u.oa);$(\"videojs.VolumeHandle\",u.jb);$(\"videojs.MuteToggle\",u.da);\n$(\"videojs.PosterImage\",u.cb);$(\"videojs.Menu\",u.ma);$(\"videojs.MenuItem\",u.N);$(\"videojs.MenuButton\",u.R);u.R.prototype.createItems=u.R.prototype.ta;u.S.prototype.createItems=u.S.prototype.ta;u.Ea.prototype.createItems=u.Ea.prototype.ta;$(\"videojs.SubtitlesButton\",u.Ha);$(\"videojs.CaptionsButton\",u.Da);$(\"videojs.ChaptersButton\",u.Ea);$(\"videojs.MediaTechController\",u.r);u.r.prototype.features=u.r.prototype.m;u.r.prototype.m.volumeControl=u.r.prototype.m.Dc;u.r.prototype.m.fullscreenResize=u.r.prototype.m.Jd;\nu.r.prototype.m.progressEvents=u.r.prototype.m.Nd;u.r.prototype.m.timeupdateEvents=u.r.prototype.m.Sd;$(\"videojs.Html5\",u.l);u.l.Events=u.l.$a;u.l.isSupported=u.l.isSupported;u.l.canPlaySource=u.l.mb;u.l.prototype.setCurrentTime=u.l.prototype.sd;u.l.prototype.setVolume=u.l.prototype.xd;u.l.prototype.setMuted=u.l.prototype.vd;u.l.prototype.setPreload=u.l.prototype.wd;u.l.prototype.setAutoplay=u.l.prototype.rd;u.l.prototype.setLoop=u.l.prototype.ud;$(\"videojs.Flash\",u.f);u.f.isSupported=u.f.isSupported;\nu.f.canPlaySource=u.f.mb;u.f.onReady=u.f.onReady;$(\"videojs.TextTrack\",u.X);u.X.prototype.label=u.X.prototype.label;$(\"videojs.CaptionsTrack\",u.Ub);$(\"videojs.SubtitlesTrack\",u.$b);$(\"videojs.ChaptersTrack\",u.Vb);$(\"videojs.autoSetup\",u.fc);$(\"videojs.plugin\",u.od);$(\"videojs.createTimeRange\",u.tb);})();\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/webuploader/webuploader.css",
    "content": ".webuploader-container {\n\tposition: relative;\n}\n.webuploader-element-invisible {\n\tposition: absolute !important;\n\tclip: rect(1px 1px 1px 1px); /* IE6, IE7 */\n    clip: rect(1px,1px,1px,1px);\n}\n.webuploader-pick {\n\tposition: relative;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tbackground: #00b7ee;\n\tpadding: 10px 15px;\n\tcolor: #fff;\n\ttext-align: center;\n\tborder-radius: 3px;\n\toverflow: hidden;\n}\n.webuploader-pick-hover {\n\tbackground: #00a2d4;\n}\n\n.webuploader-pick-disable {\n\topacity: 0.6;\n\tpointer-events:none;\n}\n\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/webuploader/webuploader.custom.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: true,\n    \n            // 是否允许放大。\n            allowMagnify: true\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: false,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n            'make-thumb': 'makeThumb',\n            'before-send-file': 'compressImage'\n        }, {\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             *\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function() {\n                    cb( true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            compressImage: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 300 * 1024,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( opts.width, opts.height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destory = this.destory;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    lable = $( document.createElement('label') ),\n                    input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler;\n    \n                input.attr( 'type', 'file' );\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                lable.on( 'click', function() {\n                    input.trigger('click');\n                });\n    \n                lable.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( lable );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                input.on( 'change', function( e ) {\n                    var fn = arguments.callee,\n                        clone;\n    \n                    me.files = e.target.files;\n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', fn )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                });\n    \n                lable.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger('complete');\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, 'image/jpeg',\n                                opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        canvas.getContext('2d').drawImage( img, x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                            iw * vertSquashRatio, ih * vertSquashRatio,\n                            x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * 这个方式性能不行，但是可以解决android里面的toDataUrl的bug\n     * android里面toDataUrl('image/jpege')得到的结果却是png.\n     *\n     * 所以这里没辙，只能借助这个工具\n     * @fileOverview jpeg encoder\n     */\n    define('runtime/html5/jpegencoder',[], function( require, exports, module ) {\n    \n        /*\n          Copyright (c) 2008, Adobe Systems Incorporated\n          All rights reserved.\n    \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are\n          met:\n    \n          * Redistributions of source code must retain the above copyright notice,\n            this list of conditions and the following disclaimer.\n    \n          * Redistributions in binary form must reproduce the above copyright\n            notice, this list of conditions and the following disclaimer in the\n            documentation and/or other materials provided with the distribution.\n    \n          * Neither the name of Adobe Systems Incorporated nor the names of its\n            contributors may be used to endorse or promote products derived from\n            this software without specific prior written permission.\n    \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n          IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n          THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n          PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n          CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n          EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n          PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n          PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n          LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n          NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n          SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n        /*\n        JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n    \n        Basic GUI blocking jpeg encoder\n        */\n    \n        function JPEGEncoder(quality) {\n          var self = this;\n            var fround = Math.round;\n            var ffloor = Math.floor;\n            var YTable = new Array(64);\n            var UVTable = new Array(64);\n            var fdtbl_Y = new Array(64);\n            var fdtbl_UV = new Array(64);\n            var YDC_HT;\n            var UVDC_HT;\n            var YAC_HT;\n            var UVAC_HT;\n    \n            var bitcode = new Array(65535);\n            var category = new Array(65535);\n            var outputfDCTQuant = new Array(64);\n            var DU = new Array(64);\n            var byteout = [];\n            var bytenew = 0;\n            var bytepos = 7;\n    \n            var YDU = new Array(64);\n            var UDU = new Array(64);\n            var VDU = new Array(64);\n            var clt = new Array(256);\n            var RGB_YUV_TABLE = new Array(2048);\n            var currentQuality;\n    \n            var ZigZag = [\n                     0, 1, 5, 6,14,15,27,28,\n                     2, 4, 7,13,16,26,29,42,\n                     3, 8,12,17,25,30,41,43,\n                     9,11,18,24,31,40,44,53,\n                    10,19,23,32,39,45,52,54,\n                    20,22,33,38,46,51,55,60,\n                    21,34,37,47,50,56,59,61,\n                    35,36,48,49,57,58,62,63\n                ];\n    \n            var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n            var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n            var std_ac_luminance_values = [\n                    0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n                    0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n                    0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n                    0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n                    0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n                    0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n                    0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n                    0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n                    0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n                    0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n                    0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n                    0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n                    0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n                    0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n                    0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n                    0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n                    0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n                    0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n                    0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n                    0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n            var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n            var std_ac_chrominance_values = [\n                    0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n                    0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n                    0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n                    0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n                    0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n                    0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n                    0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n                    0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n                    0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n                    0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n                    0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n                    0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n                    0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n                    0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n                    0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n                    0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n                    0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n                    0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n                    0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n                    0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            function initQuantTables(sf){\n                    var YQT = [\n                        16, 11, 10, 16, 24, 40, 51, 61,\n                        12, 12, 14, 19, 26, 58, 60, 55,\n                        14, 13, 16, 24, 40, 57, 69, 56,\n                        14, 17, 22, 29, 51, 87, 80, 62,\n                        18, 22, 37, 56, 68,109,103, 77,\n                        24, 35, 55, 64, 81,104,113, 92,\n                        49, 64, 78, 87,103,121,120,101,\n                        72, 92, 95, 98,112,100,103, 99\n                    ];\n    \n                    for (var i = 0; i < 64; i++) {\n                        var t = ffloor((YQT[i]*sf+50)/100);\n                        if (t < 1) {\n                            t = 1;\n                        } else if (t > 255) {\n                            t = 255;\n                        }\n                        YTable[ZigZag[i]] = t;\n                    }\n                    var UVQT = [\n                        17, 18, 24, 47, 99, 99, 99, 99,\n                        18, 21, 26, 66, 99, 99, 99, 99,\n                        24, 26, 56, 99, 99, 99, 99, 99,\n                        47, 66, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99\n                    ];\n                    for (var j = 0; j < 64; j++) {\n                        var u = ffloor((UVQT[j]*sf+50)/100);\n                        if (u < 1) {\n                            u = 1;\n                        } else if (u > 255) {\n                            u = 255;\n                        }\n                        UVTable[ZigZag[j]] = u;\n                    }\n                    var aasf = [\n                        1.0, 1.387039845, 1.306562965, 1.175875602,\n                        1.0, 0.785694958, 0.541196100, 0.275899379\n                    ];\n                    var k = 0;\n                    for (var row = 0; row < 8; row++)\n                    {\n                        for (var col = 0; col < 8; col++)\n                        {\n                            fdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            k++;\n                        }\n                    }\n                }\n    \n                function computeHuffmanTbl(nrcodes, std_table){\n                    var codevalue = 0;\n                    var pos_in_table = 0;\n                    var HT = new Array();\n                    for (var k = 1; k <= 16; k++) {\n                        for (var j = 1; j <= nrcodes[k]; j++) {\n                            HT[std_table[pos_in_table]] = [];\n                            HT[std_table[pos_in_table]][0] = codevalue;\n                            HT[std_table[pos_in_table]][1] = k;\n                            pos_in_table++;\n                            codevalue++;\n                        }\n                        codevalue*=2;\n                    }\n                    return HT;\n                }\n    \n                function initHuffmanTbl()\n                {\n                    YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n                    UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n                    YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n                    UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n                }\n    \n                function initCategoryNumber()\n                {\n                    var nrlower = 1;\n                    var nrupper = 2;\n                    for (var cat = 1; cat <= 15; cat++) {\n                        //Positive numbers\n                        for (var nr = nrlower; nr<nrupper; nr++) {\n                            category[32767+nr] = cat;\n                            bitcode[32767+nr] = [];\n                            bitcode[32767+nr][1] = cat;\n                            bitcode[32767+nr][0] = nr;\n                        }\n                        //Negative numbers\n                        for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n                            category[32767+nrneg] = cat;\n                            bitcode[32767+nrneg] = [];\n                            bitcode[32767+nrneg][1] = cat;\n                            bitcode[32767+nrneg][0] = nrupper-1+nrneg;\n                        }\n                        nrlower <<= 1;\n                        nrupper <<= 1;\n                    }\n                }\n    \n                function initRGBYUVTable() {\n                    for(var i = 0; i < 256;i++) {\n                        RGB_YUV_TABLE[i]            =  19595 * i;\n                        RGB_YUV_TABLE[(i+ 256)>>0]  =  38470 * i;\n                        RGB_YUV_TABLE[(i+ 512)>>0]  =   7471 * i + 0x8000;\n                        RGB_YUV_TABLE[(i+ 768)>>0]  = -11059 * i;\n                        RGB_YUV_TABLE[(i+1024)>>0]  = -21709 * i;\n                        RGB_YUV_TABLE[(i+1280)>>0]  =  32768 * i + 0x807FFF;\n                        RGB_YUV_TABLE[(i+1536)>>0]  = -27439 * i;\n                        RGB_YUV_TABLE[(i+1792)>>0]  = - 5329 * i;\n                    }\n                }\n    \n                // IO functions\n                function writeBits(bs)\n                {\n                    var value = bs[0];\n                    var posval = bs[1]-1;\n                    while ( posval >= 0 ) {\n                        if (value & (1 << posval) ) {\n                            bytenew |= (1 << bytepos);\n                        }\n                        posval--;\n                        bytepos--;\n                        if (bytepos < 0) {\n                            if (bytenew == 0xFF) {\n                                writeByte(0xFF);\n                                writeByte(0);\n                            }\n                            else {\n                                writeByte(bytenew);\n                            }\n                            bytepos=7;\n                            bytenew=0;\n                        }\n                    }\n                }\n    \n                function writeByte(value)\n                {\n                    byteout.push(clt[value]); // write char directly instead of converting later\n                }\n    \n                function writeWord(value)\n                {\n                    writeByte((value>>8)&0xFF);\n                    writeByte((value   )&0xFF);\n                }\n    \n                // DCT & quantization core\n                function fDCTQuant(data, fdtbl)\n                {\n                    var d0, d1, d2, d3, d4, d5, d6, d7;\n                    /* Pass 1: process rows. */\n                    var dataOff=0;\n                    var i;\n                    var I8 = 8;\n                    var I64 = 64;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff+1];\n                        d2 = data[dataOff+2];\n                        d3 = data[dataOff+3];\n                        d4 = data[dataOff+4];\n                        d5 = data[dataOff+5];\n                        d6 = data[dataOff+6];\n                        d7 = data[dataOff+7];\n    \n                        var tmp0 = d0 + d7;\n                        var tmp7 = d0 - d7;\n                        var tmp1 = d1 + d6;\n                        var tmp6 = d1 - d6;\n                        var tmp2 = d2 + d5;\n                        var tmp5 = d2 - d5;\n                        var tmp3 = d3 + d4;\n                        var tmp4 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10 = tmp0 + tmp3;    /* phase 2 */\n                        var tmp13 = tmp0 - tmp3;\n                        var tmp11 = tmp1 + tmp2;\n                        var tmp12 = tmp1 - tmp2;\n    \n                        data[dataOff] = tmp10 + tmp11; /* phase 3 */\n                        data[dataOff+4] = tmp10 - tmp11;\n    \n                        var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n                        data[dataOff+2] = tmp13 + z1; /* phase 5 */\n                        data[dataOff+6] = tmp13 - z1;\n    \n                        /* Odd part */\n                        tmp10 = tmp4 + tmp5; /* phase 2 */\n                        tmp11 = tmp5 + tmp6;\n                        tmp12 = tmp6 + tmp7;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n                        var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n                        var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n                        var z3 = tmp11 * 0.707106781; /* c4 */\n    \n                        var z11 = tmp7 + z3;    /* phase 5 */\n                        var z13 = tmp7 - z3;\n    \n                        data[dataOff+5] = z13 + z2; /* phase 6 */\n                        data[dataOff+3] = z13 - z2;\n                        data[dataOff+1] = z11 + z4;\n                        data[dataOff+7] = z11 - z4;\n    \n                        dataOff += 8; /* advance pointer to next row */\n                    }\n    \n                    /* Pass 2: process columns. */\n                    dataOff = 0;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff + 8];\n                        d2 = data[dataOff + 16];\n                        d3 = data[dataOff + 24];\n                        d4 = data[dataOff + 32];\n                        d5 = data[dataOff + 40];\n                        d6 = data[dataOff + 48];\n                        d7 = data[dataOff + 56];\n    \n                        var tmp0p2 = d0 + d7;\n                        var tmp7p2 = d0 - d7;\n                        var tmp1p2 = d1 + d6;\n                        var tmp6p2 = d1 - d6;\n                        var tmp2p2 = d2 + d5;\n                        var tmp5p2 = d2 - d5;\n                        var tmp3p2 = d3 + d4;\n                        var tmp4p2 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10p2 = tmp0p2 + tmp3p2;  /* phase 2 */\n                        var tmp13p2 = tmp0p2 - tmp3p2;\n                        var tmp11p2 = tmp1p2 + tmp2p2;\n                        var tmp12p2 = tmp1p2 - tmp2p2;\n    \n                        data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n                        data[dataOff+32] = tmp10p2 - tmp11p2;\n    \n                        var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n                        data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n                        data[dataOff+48] = tmp13p2 - z1p2;\n    \n                        /* Odd part */\n                        tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n                        tmp11p2 = tmp5p2 + tmp6p2;\n                        tmp12p2 = tmp6p2 + tmp7p2;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n                        var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n                        var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n                        var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n    \n                        var z11p2 = tmp7p2 + z3p2;  /* phase 5 */\n                        var z13p2 = tmp7p2 - z3p2;\n    \n                        data[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n                        data[dataOff+24] = z13p2 - z2p2;\n                        data[dataOff+ 8] = z11p2 + z4p2;\n                        data[dataOff+56] = z11p2 - z4p2;\n    \n                        dataOff++; /* advance pointer to next column */\n                    }\n    \n                    // Quantize/descale the coefficients\n                    var fDCTQuant;\n                    for (i=0; i<I64; ++i)\n                    {\n                        // Apply the quantization and scaling factor & Round to nearest integer\n                        fDCTQuant = data[i]*fdtbl[i];\n                        outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n                        //outputfDCTQuant[i] = fround(fDCTQuant);\n    \n                    }\n                    return outputfDCTQuant;\n                }\n    \n                function writeAPP0()\n                {\n                    writeWord(0xFFE0); // marker\n                    writeWord(16); // length\n                    writeByte(0x4A); // J\n                    writeByte(0x46); // F\n                    writeByte(0x49); // I\n                    writeByte(0x46); // F\n                    writeByte(0); // = \"JFIF\",'\\0'\n                    writeByte(1); // versionhi\n                    writeByte(1); // versionlo\n                    writeByte(0); // xyunits\n                    writeWord(1); // xdensity\n                    writeWord(1); // ydensity\n                    writeByte(0); // thumbnwidth\n                    writeByte(0); // thumbnheight\n                }\n    \n                function writeSOF0(width, height)\n                {\n                    writeWord(0xFFC0); // marker\n                    writeWord(17);   // length, truecolor YUV JPG\n                    writeByte(8);    // precision\n                    writeWord(height);\n                    writeWord(width);\n                    writeByte(3);    // nrofcomponents\n                    writeByte(1);    // IdY\n                    writeByte(0x11); // HVY\n                    writeByte(0);    // QTY\n                    writeByte(2);    // IdU\n                    writeByte(0x11); // HVU\n                    writeByte(1);    // QTU\n                    writeByte(3);    // IdV\n                    writeByte(0x11); // HVV\n                    writeByte(1);    // QTV\n                }\n    \n                function writeDQT()\n                {\n                    writeWord(0xFFDB); // marker\n                    writeWord(132);    // length\n                    writeByte(0);\n                    for (var i=0; i<64; i++) {\n                        writeByte(YTable[i]);\n                    }\n                    writeByte(1);\n                    for (var j=0; j<64; j++) {\n                        writeByte(UVTable[j]);\n                    }\n                }\n    \n                function writeDHT()\n                {\n                    writeWord(0xFFC4); // marker\n                    writeWord(0x01A2); // length\n    \n                    writeByte(0); // HTYDCinfo\n                    for (var i=0; i<16; i++) {\n                        writeByte(std_dc_luminance_nrcodes[i+1]);\n                    }\n                    for (var j=0; j<=11; j++) {\n                        writeByte(std_dc_luminance_values[j]);\n                    }\n    \n                    writeByte(0x10); // HTYACinfo\n                    for (var k=0; k<16; k++) {\n                        writeByte(std_ac_luminance_nrcodes[k+1]);\n                    }\n                    for (var l=0; l<=161; l++) {\n                        writeByte(std_ac_luminance_values[l]);\n                    }\n    \n                    writeByte(1); // HTUDCinfo\n                    for (var m=0; m<16; m++) {\n                        writeByte(std_dc_chrominance_nrcodes[m+1]);\n                    }\n                    for (var n=0; n<=11; n++) {\n                        writeByte(std_dc_chrominance_values[n]);\n                    }\n    \n                    writeByte(0x11); // HTUACinfo\n                    for (var o=0; o<16; o++) {\n                        writeByte(std_ac_chrominance_nrcodes[o+1]);\n                    }\n                    for (var p=0; p<=161; p++) {\n                        writeByte(std_ac_chrominance_values[p]);\n                    }\n                }\n    \n                function writeSOS()\n                {\n                    writeWord(0xFFDA); // marker\n                    writeWord(12); // length\n                    writeByte(3); // nrofcomponents\n                    writeByte(1); // IdY\n                    writeByte(0); // HTY\n                    writeByte(2); // IdU\n                    writeByte(0x11); // HTU\n                    writeByte(3); // IdV\n                    writeByte(0x11); // HTV\n                    writeByte(0); // Ss\n                    writeByte(0x3f); // Se\n                    writeByte(0); // Bf\n                }\n    \n                function processDU(CDU, fdtbl, DC, HTDC, HTAC){\n                    var EOB = HTAC[0x00];\n                    var M16zeroes = HTAC[0xF0];\n                    var pos;\n                    var I16 = 16;\n                    var I63 = 63;\n                    var I64 = 64;\n                    var DU_DCT = fDCTQuant(CDU, fdtbl);\n                    //ZigZag reorder\n                    for (var j=0;j<I64;++j) {\n                        DU[ZigZag[j]]=DU_DCT[j];\n                    }\n                    var Diff = DU[0] - DC; DC = DU[0];\n                    //Encode DC\n                    if (Diff==0) {\n                        writeBits(HTDC[0]); // Diff might be 0\n                    } else {\n                        pos = 32767+Diff;\n                        writeBits(HTDC[category[pos]]);\n                        writeBits(bitcode[pos]);\n                    }\n                    //Encode ACs\n                    var end0pos = 63; // was const... which is crazy\n                    for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n                    //end0pos = first element in reverse order !=0\n                    if ( end0pos == 0) {\n                        writeBits(EOB);\n                        return DC;\n                    }\n                    var i = 1;\n                    var lng;\n                    while ( i <= end0pos ) {\n                        var startpos = i;\n                        for (; (DU[i]==0) && (i<=end0pos); ++i) {}\n                        var nrzeroes = i-startpos;\n                        if ( nrzeroes >= I16 ) {\n                            lng = nrzeroes>>4;\n                            for (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n                                writeBits(M16zeroes);\n                            nrzeroes = nrzeroes&0xF;\n                        }\n                        pos = 32767+DU[i];\n                        writeBits(HTAC[(nrzeroes<<4)+category[pos]]);\n                        writeBits(bitcode[pos]);\n                        i++;\n                    }\n                    if ( end0pos != I63 ) {\n                        writeBits(EOB);\n                    }\n                    return DC;\n                }\n    \n                function initCharLookupTable(){\n                    var sfcc = String.fromCharCode;\n                    for(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n                        clt[i] = sfcc(i);\n                    }\n                }\n    \n                this.encode = function(image,quality) // image data object\n                {\n                    // var time_start = new Date().getTime();\n    \n                    if(quality) setQuality(quality);\n    \n                    // Initialize bit writer\n                    byteout = new Array();\n                    bytenew=0;\n                    bytepos=7;\n    \n                    // Add JPEG headers\n                    writeWord(0xFFD8); // SOI\n                    writeAPP0();\n                    writeDQT();\n                    writeSOF0(image.width,image.height);\n                    writeDHT();\n                    writeSOS();\n    \n    \n                    // Encode 8x8 macroblocks\n                    var DCY=0;\n                    var DCU=0;\n                    var DCV=0;\n    \n                    bytenew=0;\n                    bytepos=7;\n    \n    \n                    this.encode.displayName = \"_encode_\";\n    \n                    var imageData = image.data;\n                    var width = image.width;\n                    var height = image.height;\n    \n                    var quadWidth = width*4;\n                    var tripleWidth = width*3;\n    \n                    var x, y = 0;\n                    var r, g, b;\n                    var start,p, col,row,pos;\n                    while(y < height){\n                        x = 0;\n                        while(x < quadWidth){\n                        start = quadWidth * y + x;\n                        p = start;\n                        col = -1;\n                        row = 0;\n    \n                        for(pos=0; pos < 64; pos++){\n                            row = pos >> 3;// /8\n                            col = ( pos & 7 ) * 4; // %8\n                            p = start + ( row * quadWidth ) + col;\n    \n                            if(y+row >= height){ // padding bottom\n                                p-= (quadWidth*(y+1+row-height));\n                            }\n    \n                            if(x+col >= quadWidth){ // padding right\n                                p-= ((x+col) - quadWidth +4)\n                            }\n    \n                            r = imageData[ p++ ];\n                            g = imageData[ p++ ];\n                            b = imageData[ p++ ];\n    \n    \n                            /* // calculate YUV values dynamically\n                            YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n                            UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n                            VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n                            */\n    \n                            // use lookup table (slightly faster)\n                            YDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n                            UDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n                            VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n    \n                        }\n    \n                        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n                        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n                        x+=32;\n                        }\n                        y+=8;\n                    }\n    \n    \n                    ////////////////////////////////////////////////////////////////\n    \n                    // Do the bit alignment of the EOI marker\n                    if ( bytepos >= 0 ) {\n                        var fillbits = [];\n                        fillbits[1] = bytepos+1;\n                        fillbits[0] = (1<<(bytepos+1))-1;\n                        writeBits(fillbits);\n                    }\n    \n                    writeWord(0xFFD9); //EOI\n    \n                    var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n    \n                    byteout = [];\n    \n                    // benchmarking\n                    // var duration = new Date().getTime() - time_start;\n                    // console.log('Encoding time: '+ currentQuality + 'ms');\n                    //\n    \n                    return jpegDataUri\n            }\n    \n            function setQuality(quality){\n                if (quality <= 0) {\n                    quality = 1;\n                }\n                if (quality > 100) {\n                    quality = 100;\n                }\n    \n                if(currentQuality == quality) return // don't recalc if unchanged\n    \n                var sf = 0;\n                if (quality < 50) {\n                    sf = Math.floor(5000 / quality);\n                } else {\n                    sf = Math.floor(200 - quality*2);\n                }\n    \n                initQuantTables(sf);\n                currentQuality = quality;\n                // console.log('Quality set to: '+quality +'%');\n            }\n    \n            function init(){\n                // var time_start = new Date().getTime();\n                if(!quality) quality = 50;\n                // Create tables\n                initCharLookupTable()\n                initHuffmanTbl();\n                initCategoryNumber();\n                initRGBYUVTable();\n    \n                setQuality(quality);\n                // var duration = new Date().getTime() - time_start;\n                // console.log('Initialization '+ duration + 'ms');\n            }\n    \n            init();\n    \n        };\n    \n        JPEGEncoder.encode = function( data, quality ) {\n            var encoder = new JPEGEncoder( quality );\n    \n            return encoder.encode( data );\n        }\n    \n        return JPEGEncoder;\n    });\n    /**\n     * @fileOverview Fix android canvas.toDataUrl bug.\n     */\n    define('runtime/html5/androidpatch',[\n        'runtime/html5/util',\n        'runtime/html5/jpegencoder',\n        'base'\n    ], function( Util, encoder, Base ) {\n        var origin = Util.canvasToDataUrl,\n            supportJpeg;\n    \n        Util.canvasToDataUrl = function( canvas, type, quality ) {\n            var ctx, w, h, fragement, parts;\n    \n            // 非android手机直接跳过。\n            if ( !Base.os.android ) {\n                return origin.apply( null, arguments );\n            }\n    \n            // 检测是否canvas支持jpeg导出，根据数据格式来判断。\n            // JPEG 前两位分别是：255, 216\n            if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) {\n                fragement = origin.apply( null, arguments );\n    \n                parts = fragement.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    fragement = atob( parts[ 1 ] );\n                } else {\n                    fragement = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                fragement = fragement.substring( 0, 2 );\n    \n                supportJpeg = fragement.charCodeAt( 0 ) === 255 &&\n                        fragement.charCodeAt( 1 ) === 216;\n            }\n    \n            // 只有在android环境下才修复\n            if ( type === 'image/jpeg' && !supportJpeg ) {\n                w = canvas.width;\n                h = canvas.height;\n                ctx = canvas.getContext('2d');\n    \n                return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality );\n            }\n    \n            return origin.apply( null, arguments );\n        };\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    define('webuploader',[\n        'base',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'runtime/html5/blob',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/image',\n        'runtime/html5/androidpatch',\n        'runtime/html5/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/webuploader/webuploader.flashonly.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: true,\n    \n            // 是否允许放大。\n            allowMagnify: true\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: false,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n            'make-thumb': 'makeThumb',\n            'before-send-file': 'compressImage'\n        }, {\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             *\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function() {\n                    cb( true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            compressImage: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 300 * 1024,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( opts.width, opts.height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            init: function() {\n                var me = this;\n                $.each( validators, function() {\n                    this.call( me.owner );\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileNumLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileSizeLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {int} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destory = this.destory,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * @fileOverview 图片压缩\n     */\n    define('runtime/flash/image',[\n        'runtime/flash/runtime'\n    ], function( FlashRuntime ) {\n    \n        return FlashRuntime.register( 'Image', {\n            // init: function( options ) {\n            //     var owner = this.owner;\n    \n            //     this.flashExec( 'Image', 'init', options );\n            //     owner.on( 'load', function() {\n            //         debugger;\n            //     });\n            // },\n    \n            loadFromBlob: function( blob ) {\n                var owner = this.owner;\n    \n                owner.info() && this.flashExec( 'Image', 'info', owner.info() );\n                owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() );\n    \n                this.flashExec( 'Image', 'loadFromBlob', blob.uid );\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    return me.trigger( 'progress', e.loaded / e.total );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        err = '';\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                    } else if ( status >= 500 && status < 600 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 只有flash实现的文件版本。\n     */\n    define('preset/flashonly',[\n        'base',\n    \n        // widgets\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/image',\n        'runtime/flash/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/flashonly'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/webuploader/webuploader.html5only.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.disconnectRuntime();\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.exec('destroy');\n                this.disconnectRuntime();\n                this.off();\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: true,\n    \n            // 是否允许放大。\n            allowMagnify: true\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'widgets/widget'\n    ], function( Base, Uploader, Image ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: false,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n    \n            /**\n             * @property {Object} [compress]\n             * @namespace options\n             * @for Uploader\n             * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 1600,\n             *     height: 1600,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 90,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: false,\n             *\n             *     // 是否允许裁剪。\n             *     crop: false,\n             *\n             *     // 是否保留头部meta信息。\n             *     preserveHeaders: true\n             * }\n             * ```\n             */\n            compress: {\n                width: 1600,\n                height: 1600,\n                quality: 90,\n                allowMagnify: false,\n                crop: false,\n                preserveHeaders: true\n            }\n        });\n    \n        return Uploader.register({\n            'make-thumb': 'makeThumb',\n            'before-send-file': 'compressImage'\n        }, {\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             *\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( width, height );\n                });\n    \n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function() {\n                    cb( true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            compressImage: function( file ) {\n                var opts = this.options.compress || this.options.resize,\n                    compressSize = opts && opts.compressSize || 300 * 1024,\n                    image, deferred;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) ||\n                        file.size < compressSize ||\n                        file._compressed ) {\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                image = new Image( opts );\n    \n                deferred.always(function() {\n                    image.destroy();\n                    image = null;\n                });\n                image.once( 'error', deferred.reject );\n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n                    image.resize( opts.width, opts.height );\n                });\n    \n                image.once( 'complete', function() {\n                    var blob, size;\n    \n                    // 移动端 UC / qq 浏览器的无图模式下\n                    // ctx.getImageData 处理大图的时候会报 Exception\n                    // INDEX_SIZE_ERR: DOM Exception 1\n                    try {\n                        blob = image.getAsBlob( opts.type );\n    \n                        size = file.size;\n    \n                        // 如果压缩后，比原来还大则不用压缩后的。\n                        if ( blob.size < size ) {\n                            // file.source.destroy && file.source.destroy();\n                            file.source = blob;\n                            file.size = blob.size;\n    \n                            file.trigger( 'resize', blob.size, size );\n                        }\n    \n                        // 标记，避免重复压缩。\n                        file._compressed = true;\n                        deferred.resolve();\n                    } catch ( e ) {\n                        // 出错了直接继续，让其上传原始图片\n                        deferred.resolve();\n                    }\n                });\n    \n                file._info && image.info( file._info );\n                file._meta && image.meta( file._meta );\n    \n                image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            init: function() {\n                var me = this;\n                $.each( validators, function() {\n                    this.call( me.owner );\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileNumLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileSizeLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {int} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destory = this.destory;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/dnd',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        var $ = Base.$,\n            prefix = 'webuploader-dnd-';\n    \n        return Html5Runtime.register( 'DragAndDrop', {\n            init: function() {\n                var elem = this.elem = this.options.container;\n    \n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\n                this.dndOver = false;\n    \n                elem.on( 'dragenter', this.dragEnterHandler );\n                elem.on( 'dragover', this.dragOverHandler );\n                elem.on( 'dragleave', this.dragLeaveHandler );\n                elem.on( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).on( 'dragover', this.dragOverHandler );\n                    $( document ).on( 'drop', this.dropHandler );\n                }\n            },\n    \n            _dragEnterHandler: function( e ) {\n                var me = this,\n                    denied = me._denied || false,\n                    items;\n    \n                e = e.originalEvent || e;\n    \n                if ( !me.dndOver ) {\n                    me.dndOver = true;\n    \n                    // 注意只有 chrome 支持。\n                    items = e.dataTransfer.items;\n    \n                    if ( items && items.length ) {\n                        me._denied = denied = !me.trigger( 'accept', items );\n                    }\n    \n                    me.elem.addClass( prefix + 'over' );\n                    me.elem[ denied ? 'addClass' :\n                            'removeClass' ]( prefix + 'denied' );\n                }\n    \n    \n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\n    \n                return false;\n            },\n    \n            _dragOverHandler: function( e ) {\n                // 只处理框内的。\n                var parentElem = this.elem.parent().get( 0 );\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                clearTimeout( this._leaveTimer );\n                this._dragEnterHandler.call( this, e );\n    \n                return false;\n            },\n    \n            _dragLeaveHandler: function() {\n                var me = this,\n                    handler;\n    \n                handler = function() {\n                    me.dndOver = false;\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\n                };\n    \n                clearTimeout( me._leaveTimer );\n                me._leaveTimer = setTimeout( handler, 100 );\n                return false;\n            },\n    \n            _dropHandler: function( e ) {\n                var me = this,\n                    ruid = me.getRuid(),\n                    parentElem = me.elem.parent().get( 0 );\n    \n                // 只处理框内的。\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                me._getTansferFiles( e, function( results ) {\n                    me.trigger( 'drop', $.map( results, function( file ) {\n                        return new File( ruid, file );\n                    }) );\n                });\n    \n                me.dndOver = false;\n                me.elem.removeClass( prefix + 'over' );\n                return false;\n            },\n    \n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\n            _getTansferFiles: function( e, callback ) {\n                var results  = [],\n                    promises = [],\n                    items, files, dataTransfer, file, item, i, len, canAccessFolder;\n    \n                e = e.originalEvent || e;\n    \n                dataTransfer = e.dataTransfer;\n                items = dataTransfer.items;\n                files = dataTransfer.files;\n    \n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\n    \n                for ( i = 0, len = files.length; i < len; i++ ) {\n                    file = files[ i ];\n                    item = items && items[ i ];\n    \n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\n    \n                        promises.push( this._traverseDirectoryTree(\n                                item.webkitGetAsEntry(), results ) );\n                    } else {\n                        results.push( file );\n                    }\n                }\n    \n                Base.when.apply( Base, promises ).done(function() {\n    \n                    if ( !results.length ) {\n                        return;\n                    }\n    \n                    callback( results );\n                });\n            },\n    \n            _traverseDirectoryTree: function( entry, results ) {\n                var deferred = Base.Deferred(),\n                    me = this;\n    \n                if ( entry.isFile ) {\n                    entry.file(function( file ) {\n                        results.push( file );\n                        deferred.resolve();\n                    });\n                } else if ( entry.isDirectory ) {\n                    entry.createReader().readEntries(function( entries ) {\n                        var len = entries.length,\n                            promises = [],\n                            arr = [],    // 为了保证顺序。\n                            i;\n    \n                        for ( i = 0; i < len; i++ ) {\n                            promises.push( me._traverseDirectoryTree(\n                                    entries[ i ], arr ) );\n                        }\n    \n                        Base.when.apply( Base, promises ).then(function() {\n                            results.push.apply( results, arr );\n                            deferred.resolve();\n                        }, deferred.reject );\n                    });\n                }\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                var elem = this.elem;\n    \n                elem.off( 'dragenter', this.dragEnterHandler );\n                elem.off( 'dragover', this.dragEnterHandler );\n                elem.off( 'dragleave', this.dragLeaveHandler );\n                elem.off( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).off( 'dragover', this.dragOverHandler );\n                    $( document ).off( 'drop', this.dropHandler );\n                }\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/filepaste',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        return Html5Runtime.register( 'FilePaste', {\n            init: function() {\n                var opts = this.options,\n                    elem = this.elem = opts.container,\n                    accept = '.*',\n                    arr, i, len, item;\n    \n                // accetp的mimeTypes中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].mimeTypes;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = arr.join(',');\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\n                    }\n                }\n                this.accept = accept = new RegExp( accept, 'i' );\n                this.hander = Base.bindFn( this._pasteHander, this );\n                elem.on( 'paste', this.hander );\n            },\n    \n            _pasteHander: function( e ) {\n                var allowed = [],\n                    ruid = this.getRuid(),\n                    items, item, blob, i, len;\n    \n                e = e.originalEvent || e;\n                items = e.clipboardData.items;\n    \n                for ( i = 0, len = items.length; i < len; i++ ) {\n                    item = items[ i ];\n    \n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\n                        continue;\n                    }\n    \n                    allowed.push( new File( ruid, blob ) );\n                }\n    \n                if ( allowed.length ) {\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.trigger( 'paste', allowed );\n                }\n            },\n    \n            destroy: function() {\n                this.elem.off( 'paste', this.hander );\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    lable = $( document.createElement('label') ),\n                    input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler;\n    \n                input.attr( 'type', 'file' );\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                lable.on( 'click', function() {\n                    input.trigger('click');\n                });\n    \n                lable.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( lable );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                input.on( 'change', function( e ) {\n                    var fn = arguments.callee,\n                        clone;\n    \n                    me.files = e.target.files;\n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', fn )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                });\n    \n                lable.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger('complete');\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, 'image/jpeg',\n                                opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        canvas.getContext('2d').drawImage( img, x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                            iw * vertSquashRatio, ih * vertSquashRatio,\n                            x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview 只有html5实现的文件版本。\n     */\n    define('preset/html5only',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/image',\n        'runtime/html5/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/html5only'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/webuploader/webuploader.min.bak.js",
    "content": "/* WebUploader 0.1.2 */!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}},j=b(a,f,e);i(j),\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j:\"function\"==typeof define&&define.amd?define([],j):(c=a.WebUploader,a.WebUploader=j,a.WebUploader.noConflict=function(){a.WebUploader=c})}(this,function(a,b,c){return b(\"dollar-third\",[],function(){return a.jQuery||a.Zepto}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"0.1.2\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",getDimension:\"get-dimension\",addButton:\"add-btn\",getRuntimeType:\"get-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return{successNum:a.numOfSuccess,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1?!1:!0},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.parentNode.removeChild(this.__container),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/dnd\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},d.options,a),a.container=e(a.container),a.container.length&&c.call(this,\"DragAndDrop\")}var e=a.$;return d.options={accept:null,disableGlobalDnd:!1},a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})},destroy:function(){this.disconnectRuntime()}}),b.installTo(d.prototype),d}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return 1===a.nodeType&&b?!0:\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g={},h=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):g},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[];return e.each(h,function(c,d){b.push(new d(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,h,i,j,k=0,l=this._widgets,m=l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],h=f.invoke(b,d),h!==g&&(a.isPromise(h)?o.push(h):n.push(h));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return setTimeout(function(){b.resolve.apply(b,c)},1),b.promise()})[j](e||a.noop)):n[0]}}),b.register=d.register=function(b,c){var f,g={init:\"init\"};return 1===arguments.length?(c=b,c.responseMap=g):c.responseMap=e.extend(g,b),f=a.inherits(d,c),h.push(f),f},d}),b(\"widgets/filednd\",[\"base\",\"uploader\",\"lib/dnd\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.options.dnd=\"\",b.register({init:function(b){if(b.dnd&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{disableGlobalDnd:b.disableGlobalDnd,container:b.dnd,accept:b.accept});return e=new c(h),e.once(\"ready\",g.resolve),e.on(\"drop\",function(a){f.request(\"add-file\",[a])}),e.on(\"accept\",function(a){return f.owner.trigger(\"dndAccept\",a)}),e.init(),g.promise()}}})}),b(\"lib/filepaste\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},a),a.container=e(a.container||document.body),c.call(this,\"FilePaste\")}var e=a.$;return a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})},destroy:function(){this.exec(\"destroy\"),this.disconnectRuntime(),this.off()}}),b.installTo(d.prototype),d}),b(\"widgets/filepaste\",[\"base\",\"uploader\",\"lib/filepaste\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.register({init:function(b){if(b.paste&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{container:b.paste,accept:b.accept});return e=new c(h),e.once(\"ready\",g.resolve),e.on(\"paste\",function(a){f.owner.request(\"add-file\",[a])}),e.init(),g.promise()}}})}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,b.call(d,\"Blob\"),this.uid=c.uid||this.uid,this.type=c.type||\"\",this.size=c.size||0,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;b.apply(this,arguments),this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&this.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(this.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),!this.type&&~\"jpg,jpeg,png,gif,bmp\".indexOf(f)&&(this.type=\"image/\"+(\"jpg\"===f?\"jpeg\":f)),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||(new Date).toLocaleString()}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\"},b.inherits(c,{constructor:e,init:function(){var b=this,c=b.options,e=c.button;e.addClass(\"webuploader-pick\"),b.on(\"all\",function(a){var g;switch(a){case\"mouseenter\":e.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":e.removeClass(\"webuploader-pick-hover\");break;case\"change\":g=b.exec(\"getFiles\"),b.trigger(\"select\",f.map(g,function(a){return a=new d(b.getRuid(),a),a._refer=c.container,a}),c.container)}}),b.connectRuntime(c,function(){b.refresh(),b.exec(\"init\",c),b.trigger(\"ready\")}),f(a).on(\"resize\",function(){b.refresh()})},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b.outerWidth?b.outerWidth():b.width(),d=b.outerHeight?b.outerHeight():b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){this.runtime&&(this.exec(\"destroy\"),this.disconnectRuntime())}}),e}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({\"add-btn\":\"addButton\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\"},{init:function(a){return this.pickers=[],a.pick&&this.addButton(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addButton:function(b){var e,f,g,h=this,i=h.options,j=i.accept;if(b)return g=a.Deferred(),d.isPlainObject(b)||(b={id:b}),e=d.extend({},b,{accept:d.isPlainObject(j)?[j]:j,swf:i.swf,runtimeOrder:i.runtimeOrder}),f=new c(e),f.once(\"ready\",g.resolve),f.on(\"select\",function(a){h.owner.request(\"add-file\",[a])}),f.init(),this.pickers.push(f),g.promise()},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})}})}),b(\"lib/image\",[\"base\",\"runtime/client\",\"lib/blob\"],function(a,b,c){function d(a){this.options=e.extend({},d.options,a),b.call(this,\"Image\"),this.on(\"load\",function(){this._info=this.exec(\"info\"),this._meta=this.exec(\"meta\")})}var e=a.$;return d.options={quality:90,crop:!1,preserveHeaders:!0,allowMagnify:!0},a.inherits(b,{constructor:d,info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},loadFromBlob:function(a){var b=this,c=a.getRuid();this.connectRuntime(c,function(){b.exec(\"init\",b.options),b.exec(\"loadFromBlob\",a)})},resize:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"resize\"].concat(b))},getAsDataUrl:function(a){return this.exec(\"getAsDataUrl\",a)},getAsBlob:function(a){var b=this.exec(\"getAsBlob\",a);return new c(this.getRuid(),b)}}),d}),b(\"widgets/image\",[\"base\",\"uploader\",\"lib/image\",\"widgets/widget\"],function(a,b,c){var d,e=a.$;return d=function(a){var b=0,c=[],d=function(){for(var d;c.length&&a>b;)d=c.shift(),b+=d[0],d[1]()};return function(a,e,f){c.push([e,f]),a.once(\"destroy\",function(){b-=e,setTimeout(d,1)}),setTimeout(d,1)}}(5242880),e.extend(b.options,{thumb:{width:110,height:110,quality:70,allowMagnify:!0,crop:!0,preserveHeaders:!1,type:\"image/jpeg\"},compress:{width:1600,height:1600,quality:90,allowMagnify:!1,crop:!1,preserveHeaders:!0}}),b.register({\"make-thumb\":\"makeThumb\",\"before-send-file\":\"compressImage\"},{makeThumb:function(a,b,f,g){var h,i;return a=this.request(\"get-file\",a),a.type.match(/^image/)?(h=e.extend({},this.options.thumb),e.isPlainObject(f)&&(h=e.extend(h,f),f=null),f=f||h.width,g=g||h.height,i=new c(h),i.once(\"load\",function(){a._info=a._info||i.info(),a._meta=a._meta||i.meta(),i.resize(f,g)}),i.once(\"complete\",function(){b(!1,i.getAsDataUrl(h.type)),i.destroy()}),i.once(\"error\",function(){b(!0),i.destroy()}),void d(i,a.source.size,function(){a._info&&i.info(a._info),a._meta&&i.meta(a._meta),i.loadFromBlob(a.source)})):void b(!0)},compressImage:function(b){var d,f,g=this.options.compress||this.options.resize,h=g&&g.compressSize||307200;return b=this.request(\"get-file\",b),!g||!~\"image/jpeg,image/jpg\".indexOf(b.type)||b.size<h||b._compressed?void 0:(g=e.extend({},g),f=a.Deferred(),d=new c(g),f.always(function(){d.destroy(),d=null}),d.once(\"error\",f.reject),d.once(\"load\",function(){b._info=b._info||d.info(),b._meta=b._meta||d.meta(),d.resize(g.width,g.height)}),d.once(\"complete\",function(){var a,c;try{a=d.getAsBlob(g.type),c=b.size,a.size<c&&(b.source=a,b.size=a.size,b.trigger(\"resize\",a.size,c)),b._compressed=!0,f.resolve()}catch(e){f.resolve()}}),b._info&&d.info(b._info),b._meta&&d.meta(b._meta),d.loadFromBlob(b.source),f.promise())}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destory:function(){delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)})),a.setStatus(f.QUEUED)},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({\"sort-files\":\"sortFiles\",\"add-file\":\"addFiles\",\"get-file\":\"getFile\",\"fetch-file\":\"fetchFile\",\"get-stats\":\"getStats\",\"get-files\":\"getFiles\",\"remove-file\":\"removeFile\",retry:\"retry\",reset:\"reset\",\"accept-file\":\"acceptFile\"},{init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||a.size<6||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFiles:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),b.owner.trigger(\"filesQueued\",a),b.options.auto&&b.request(\"start-upload\")},getStats:function(){return this.stats},removeFile:function(a){var b=this;a=a.id?a:b.queue.getFile(a),a.setStatus(i.CANCELLED),b.owner.trigger(\"fileDequeued\",a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.queue=new c,this.stats=this.queue.stats}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({\"predict-runtime-type\":\"predictRuntmeType\"},{init:function(){if(!this.predictRuntmeType())throw Error(\"Runtime Error\")},predictRuntmeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){for(var c,d=[],e=a.source,f=e.size,g=b?Math.ceil(f/b):1,h=0,i=0;g>i;)c=Math.min(b,f-h),d.push({file:a,start:h,end:b?h+c:f,total:f,chunks:g,chunk:i++}),h+=c;return a.blocks=d.concat(),a.remaning=d.length,{file:a,has:function(){return!!d.length},fetch:function(){return d.shift()}}}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,threads:3,formData:null}),b.register({\"start-upload\":\"start\",\"stop-upload\":\"stop\",\"skip-file\":\"skipFile\",\"is-in-progress\":\"isInProgress\"},{init:function(){var b=this.owner;this.runing=!1,this.pool=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},start:function(){var b=this;f.each(b.request(\"get-files\",h.INVALID),function(){b.request(\"remove-file\",this)}),b.runing||(b.runing=!0,f.each(b.pool,function(a,c){var d=c.file;d.getStatus()===h.INTERRUPT&&(d.setStatus(h.PROGRESS),b._trigged=!1,c.transport&&c.transport.send())}),b._trigged=!1,b.owner.trigger(\"startUpload\"),a.nextTick(b.__tick))},stop:function(a){var b=this;b.runing!==!1&&(b.runing=!1,a&&f.each(b.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),b.owner.trigger(\"stopUpload\"))},isInProgress:function(){return!!this.runing},getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d.getStats().numOfQueue||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_nextBlock:function(){var a,b,c=this,d=c._act,f=c.options;return d&&d.has()&&d.file.getStatus()===h.PROGRESS?(f.prepareNextFile&&!c.pending.length&&c._prepareNextFile(),d.fetch()):c.runing?(!c.pending.length&&c.getStats().numOfQueue&&c._prepareNextFile(),a=c.pending.shift(),b=function(a){return a?(d=e(a,f.chunked?f.chunkSize:0),c._act=d,d.fetch()):null},g(a)?a[a.pipe?\"pipe\":\"then\"](b):b(a)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.QUEUED?(b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),c):b._finishFile(c)}),a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),c=d.request(\"before-send\",b,function(){e.getStatus()===h.PROGRESS?d._doSend(b):(d._popBlock(b),a.nextTick(d.__tick))}),c.fail(function(){1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d._popBlock(b),a.nextTick(d.__tick))})},_doSend:function(b){var c,e,g=this,i=g.owner,j=g.options,k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){var c=0,d=0;c=b.percentage=a,b.chunks>1&&(f.each(k.blocks,function(a,b){d+=(b.percentage||0)*(b.end-b.start)}),c=d/k.size),i.trigger(\"uploadProgress\",k,c||0)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){b.retried=b.retried||0,b.chunks>1&&~\"http,abort\".indexOf(a)&&b.retried<j.chunkRetry?(b.retried++,l.send()):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)}).always(function(){d.trigger(\"uploadComplete\",a)})}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({init:function(){var a=this;e.each(f,function(){this.call(a.owner)})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=b.fileNumLimit>>0,e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),c>=d?!1:!0}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"uploadFinished\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=b.fileSizeLimit>>0,e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),b?!1:!0}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"uploadFinished\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));return d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}))}),d}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destory;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destory=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;return d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/dnd\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){var d=a.$,e=\"webuploader-dnd-\";return b.register(\"DragAndDrop\",{init:function(){var b=this.elem=this.options.container;this.dragEnterHandler=a.bindFn(this._dragEnterHandler,this),this.dragOverHandler=a.bindFn(this._dragOverHandler,this),this.dragLeaveHandler=a.bindFn(this._dragLeaveHandler,this),this.dropHandler=a.bindFn(this._dropHandler,this),this.dndOver=!1,b.on(\"dragenter\",this.dragEnterHandler),b.on(\"dragover\",this.dragOverHandler),b.on(\"dragleave\",this.dragLeaveHandler),b.on(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).on(\"dragover\",this.dragOverHandler),d(document).on(\"drop\",this.dropHandler))\n},_dragEnterHandler:function(a){var b,c=this,d=c._denied||!1;return a=a.originalEvent||a,c.dndOver||(c.dndOver=!0,b=a.dataTransfer.items,b&&b.length&&(c._denied=d=!c.trigger(\"accept\",b)),c.elem.addClass(e+\"over\"),c.elem[d?\"addClass\":\"removeClass\"](e+\"denied\")),a.dataTransfer.dropEffect=d?\"none\":\"copy\",!1},_dragOverHandler:function(a){var b=this.elem.parent().get(0);return b&&!d.contains(b,a.currentTarget)?!1:(clearTimeout(this._leaveTimer),this._dragEnterHandler.call(this,a),!1)},_dragLeaveHandler:function(){var a,b=this;return a=function(){b.dndOver=!1,b.elem.removeClass(e+\"over \"+e+\"denied\")},clearTimeout(b._leaveTimer),b._leaveTimer=setTimeout(a,100),!1},_dropHandler:function(a){var b=this,f=b.getRuid(),g=b.elem.parent().get(0);return g&&!d.contains(g,a.currentTarget)?!1:(b._getTansferFiles(a,function(a){b.trigger(\"drop\",d.map(a,function(a){return new c(f,a)}))}),b.dndOver=!1,b.elem.removeClass(e+\"over\"),!1)},_getTansferFiles:function(b,c){var d,e,f,g,h,i,j,k,l=[],m=[];for(b=b.originalEvent||b,f=b.dataTransfer,d=f.items,e=f.files,k=!(!d||!d[0].webkitGetAsEntry),i=0,j=e.length;j>i;i++)g=e[i],h=d&&d[i],k&&h.webkitGetAsEntry().isDirectory?m.push(this._traverseDirectoryTree(h.webkitGetAsEntry(),l)):l.push(g);a.when.apply(a,m).done(function(){l.length&&c(l)})},_traverseDirectoryTree:function(b,c){var d=a.Deferred(),e=this;return b.isFile?b.file(function(a){c.push(a),d.resolve()}):b.isDirectory&&b.createReader().readEntries(function(b){var f,g=b.length,h=[],i=[];for(f=0;g>f;f++)h.push(e._traverseDirectoryTree(b[f],i));a.when.apply(a,h).then(function(){c.push.apply(c,i),d.resolve()},d.reject)}),d.promise()},destroy:function(){var a=this.elem;a.off(\"dragenter\",this.dragEnterHandler),a.off(\"dragover\",this.dragEnterHandler),a.off(\"dragleave\",this.dragLeaveHandler),a.off(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).off(\"dragover\",this.dragOverHandler),d(document).off(\"drop\",this.dropHandler))}})}),b(\"runtime/html5/filepaste\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){return b.register(\"FilePaste\",{init:function(){var b,c,d,e,f=this.options,g=this.elem=f.container,h=\".*\";if(f.accept){for(b=[],c=0,d=f.accept.length;d>c;c++)e=f.accept[c].mimeTypes,e&&b.push(e);b.length&&(h=b.join(\",\"),h=h.replace(/,/g,\"|\").replace(/\\*/g,\".*\"))}this.accept=h=new RegExp(h,\"i\"),this.hander=a.bindFn(this._pasteHander,this),g.on(\"paste\",this.hander)},_pasteHander:function(a){var b,d,e,f,g,h=[],i=this.getRuid();for(a=a.originalEvent||a,b=a.clipboardData.items,f=0,g=b.length;g>f;f++)d=b[f],\"file\"===d.kind&&(e=d.getAsFile())&&h.push(new c(i,e));h.length&&(a.preventDefault(),a.stopPropagation(),this.trigger(\"paste\",h))},destroy:function(){this.elem.off(\"paste\",this.hander)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f=this.getRuntime().getContainer(),g=this,h=g.owner,i=g.options,j=c(document.createElement(\"label\")),k=c(document.createElement(\"input\"));if(k.attr(\"type\",\"file\"),k.attr(\"name\",i.name),k.addClass(\"webuploader-element-invisible\"),j.on(\"click\",function(){k.trigger(\"click\")}),j.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),i.multiple&&k.attr(\"multiple\",\"multiple\"),i.accept&&i.accept.length>0){for(a=[],b=0,d=i.accept.length;d>b;b++)a.push(i.accept[b].mimeTypes);k.attr(\"accept\",a.join(\",\"))}f.append(k),f.append(j),e=function(a){h.trigger(a.type)},k.on(\"change\",function(a){var b,d=arguments.callee;g.files=a.target.files,b=this.cloneNode(!0),this.parentNode.replaceChild(b,this),k.off(),k=c(b).on(\"change\",d).on(\"mouseenter mouseleave\",e),h.trigger(\"change\")}),j.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){}})}),b(\"runtime/html5/util\",[\"base\"],function(b){var c=a.createObjectURL&&a||a.URL&&URL.revokeObjectURL&&URL||a.webkitURL,d=b.noop,e=d;return c&&(d=function(){return c.createObjectURL.apply(c,arguments)},e=function(){return c.revokeObjectURL.apply(c,arguments)}),{createObjectURL:d,revokeObjectURL:e,dataURL2Blob:function(a){var b,c,d,e,f,g;for(g=a.split(\",\"),b=~g[0].indexOf(\"base64\")?atob(g[1]):decodeURIComponent(g[1]),d=new ArrayBuffer(b.length),c=new Uint8Array(d),e=0;e<b.length;e++)c[e]=b.charCodeAt(e);return f=g[0].split(\":\")[1].split(\";\")[0],this.arrayBufferToBlob(d,f)},dataURL2ArrayBuffer:function(a){var b,c,d,e;for(e=a.split(\",\"),b=~e[0].indexOf(\"base64\")?atob(e[1]):decodeURIComponent(e[1]),c=new Uint8Array(b.length),d=0;d<b.length;d++)c[d]=b.charCodeAt(d);return c.buffer},arrayBufferToBlob:function(b,c){var d,e=a.BlobBuilder||a.WebKitBlobBuilder;return e?(d=new e,d.append(b),d.getBlob(c)):new Blob([b],c?{type:c}:{})},canvasToDataUrl:function(a,b,c){return a.toDataURL(b,c/100)},parseMeta:function(a,b){b(!1,{})},updateImageHead:function(a){return a}}}),b(\"runtime/html5/imagemeta\",[\"runtime/html5/util\"],function(a){var b;return b={parsers:{65505:[]},maxMetaDataSize:262144,parse:function(a,b){var c=this,d=new FileReader;d.onload=function(){b(!1,c._parse(this.result)),d=d.onload=d.onerror=null},d.onerror=function(a){b(a.message),d=d.onload=d.onerror=null},a=a.slice(0,c.maxMetaDataSize),d.readAsArrayBuffer(a.getSource())},_parse:function(a,c){if(!(a.byteLength<6)){var d,e,f,g,h=new DataView(a),i=2,j=h.byteLength-4,k=i,l={};if(65496===h.getUint16(0)){for(;j>i&&(d=h.getUint16(i),d>=65504&&65519>=d||65534===d)&&(e=h.getUint16(i+2)+2,!(i+e>h.byteLength));){if(f=b.parsers[d],!c&&f)for(g=0;g<f.length;g+=1)f[g].call(b,h,i,e,l);i+=e,k=i}k>6&&(l.imageHead=a.slice?a.slice(2,k):new Uint8Array(a).subarray(2,k))}return l}},updateImageHead:function(a,b){var c,d,e,f=this._parse(a,!0);return e=2,f.imageHead&&(e=2+f.imageHead.byteLength),d=a.slice?a.slice(e):new Uint8Array(a).subarray(e),c=new Uint8Array(b.byteLength+2+d.byteLength),c[0]=255,c[1]=216,c.set(new Uint8Array(b),2),c.set(new Uint8Array(d),b.byteLength+2),c.buffer}},a.parseMeta=function(){return b.parse.apply(b,arguments)},a.updateImageHead=function(){return b.updateImageHead.apply(b,arguments)},b}),b(\"runtime/html5/imagemeta/exif\",[\"base\",\"runtime/html5/imagemeta\"],function(a,b){var c={};return c.ExifMap=function(){return this},c.ExifMap.prototype.map={Orientation:274},c.ExifMap.prototype.get=function(a){return this[a]||this[this.map[a]]},c.exifTagTypes={1:{getValue:function(a,b){return a.getUint8(b)},size:1},2:{getValue:function(a,b){return String.fromCharCode(a.getUint8(b))},size:1,ascii:!0},3:{getValue:function(a,b,c){return a.getUint16(b,c)},size:2},4:{getValue:function(a,b,c){return a.getUint32(b,c)},size:4},5:{getValue:function(a,b,c){return a.getUint32(b,c)/a.getUint32(b+4,c)},size:8},9:{getValue:function(a,b,c){return a.getInt32(b,c)},size:4},10:{getValue:function(a,b,c){return a.getInt32(b,c)/a.getInt32(b+4,c)},size:8}},c.exifTagTypes[7]=c.exifTagTypes[1],c.getExifValue=function(b,d,e,f,g,h){var i,j,k,l,m,n,o=c.exifTagTypes[f];if(!o)return void a.log(\"Invalid Exif data: Invalid tag type.\");if(i=o.size*g,j=i>4?d+b.getUint32(e+8,h):e+8,j+i>b.byteLength)return void a.log(\"Invalid Exif data: Invalid data offset.\");if(1===g)return o.getValue(b,j,h);for(k=[],l=0;g>l;l+=1)k[l]=o.getValue(b,j+l*o.size,h);if(o.ascii){for(m=\"\",l=0;l<k.length&&(n=k[l],\"\\x00\"!==n);l+=1)m+=n;return m}return k},c.parseExifTag=function(a,b,d,e,f){var g=a.getUint16(d,e);f.exif[g]=c.getExifValue(a,b,d,a.getUint16(d+2,e),a.getUint32(d+4,e),e)},c.parseExifTags=function(b,c,d,e,f){var g,h,i;if(d+6>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory offset.\");if(g=b.getUint16(d,e),h=d+2+12*g,h+4>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory size.\");for(i=0;g>i;i+=1)this.parseExifTag(b,c,d+2+12*i,e,f);return b.getUint32(h,e)},c.parseExifData=function(b,d,e,f){var g,h,i=d+10;if(1165519206===b.getUint32(d+4)){if(i+8>b.byteLength)return void a.log(\"Invalid Exif data: Invalid segment size.\");if(0!==b.getUint16(d+8))return void a.log(\"Invalid Exif data: Missing byte alignment offset.\");switch(b.getUint16(i)){case 18761:g=!0;break;case 19789:g=!1;break;default:return void a.log(\"Invalid Exif data: Invalid byte alignment marker.\")}if(42!==b.getUint16(i+2,g))return void a.log(\"Invalid Exif data: Missing TIFF marker.\");h=b.getUint32(i+4,g),f.exif=new c.ExifMap,h=c.parseExifTags(b,i,i+h,g,f)}},b.parsers[65505].push(c.parseExifData),c}),b(\"runtime/html5/jpegencoder\",[],function(){function a(a){function b(a){for(var b=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],c=0;64>c;c++){var d=y((b[c]*a+50)/100);1>d?d=1:d>255&&(d=255),z[P[c]]=d}for(var e=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],f=0;64>f;f++){var g=y((e[f]*a+50)/100);1>g?g=1:g>255&&(g=255),A[P[f]]=g}for(var h=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],i=0,j=0;8>j;j++)for(var k=0;8>k;k++)B[i]=1/(z[P[i]]*h[j]*h[k]*8),C[i]=1/(A[P[i]]*h[j]*h[k]*8),i++}function c(a,b){for(var c=0,d=0,e=new Array,f=1;16>=f;f++){for(var g=1;g<=a[f];g++)e[b[d]]=[],e[b[d]][0]=c,e[b[d]][1]=f,d++,c++;c*=2}return e}function d(){t=c(Q,R),u=c(U,V),v=c(S,T),w=c(W,X)}function e(){for(var a=1,b=2,c=1;15>=c;c++){for(var d=a;b>d;d++)E[32767+d]=c,D[32767+d]=[],D[32767+d][1]=c,D[32767+d][0]=d;for(var e=-(b-1);-a>=e;e++)E[32767+e]=c,D[32767+e]=[],D[32767+e][1]=c,D[32767+e][0]=b-1+e;a<<=1,b<<=1}}function f(){for(var a=0;256>a;a++)O[a]=19595*a,O[a+256>>0]=38470*a,O[a+512>>0]=7471*a+32768,O[a+768>>0]=-11059*a,O[a+1024>>0]=-21709*a,O[a+1280>>0]=32768*a+8421375,O[a+1536>>0]=-27439*a,O[a+1792>>0]=-5329*a}function g(a){for(var b=a[0],c=a[1]-1;c>=0;)b&1<<c&&(I|=1<<J),c--,J--,0>J&&(255==I?(h(255),h(0)):h(I),J=7,I=0)}function h(a){H.push(N[a])}function i(a){h(a>>8&255),h(255&a)}function j(a,b){var c,d,e,f,g,h,i,j,k,l=0,m=8,n=64;for(k=0;m>k;++k){c=a[l],d=a[l+1],e=a[l+2],f=a[l+3],g=a[l+4],h=a[l+5],i=a[l+6],j=a[l+7];var o=c+j,p=c-j,q=d+i,r=d-i,s=e+h,t=e-h,u=f+g,v=f-g,w=o+u,x=o-u,y=q+s,z=q-s;a[l]=w+y,a[l+4]=w-y;var A=.707106781*(z+x);a[l+2]=x+A,a[l+6]=x-A,w=v+t,y=t+r,z=r+p;var B=.382683433*(w-z),C=.5411961*w+B,D=1.306562965*z+B,E=.707106781*y,G=p+E,H=p-E;a[l+5]=H+C,a[l+3]=H-C,a[l+1]=G+D,a[l+7]=G-D,l+=8}for(l=0,k=0;m>k;++k){c=a[l],d=a[l+8],e=a[l+16],f=a[l+24],g=a[l+32],h=a[l+40],i=a[l+48],j=a[l+56];var I=c+j,J=c-j,K=d+i,L=d-i,M=e+h,N=e-h,O=f+g,P=f-g,Q=I+O,R=I-O,S=K+M,T=K-M;a[l]=Q+S,a[l+32]=Q-S;var U=.707106781*(T+R);a[l+16]=R+U,a[l+48]=R-U,Q=P+N,S=N+L,T=L+J;var V=.382683433*(Q-T),W=.5411961*Q+V,X=1.306562965*T+V,Y=.707106781*S,Z=J+Y,$=J-Y;a[l+40]=$+W,a[l+24]=$-W,a[l+8]=Z+X,a[l+56]=Z-X,l++}var _;for(k=0;n>k;++k)_=a[k]*b[k],F[k]=_>0?_+.5|0:_-.5|0;return F}function k(){i(65504),i(16),h(74),h(70),h(73),h(70),h(0),h(1),h(1),h(0),i(1),i(1),h(0),h(0)}function l(a,b){i(65472),i(17),h(8),i(b),i(a),h(3),h(1),h(17),h(0),h(2),h(17),h(1),h(3),h(17),h(1)}function m(){i(65499),i(132),h(0);for(var a=0;64>a;a++)h(z[a]);h(1);for(var b=0;64>b;b++)h(A[b])}function n(){i(65476),i(418),h(0);for(var a=0;16>a;a++)h(Q[a+1]);for(var b=0;11>=b;b++)h(R[b]);h(16);for(var c=0;16>c;c++)h(S[c+1]);for(var d=0;161>=d;d++)h(T[d]);h(1);for(var e=0;16>e;e++)h(U[e+1]);for(var f=0;11>=f;f++)h(V[f]);h(17);for(var g=0;16>g;g++)h(W[g+1]);for(var j=0;161>=j;j++)h(X[j])}function o(){i(65498),i(12),h(3),h(1),h(0),h(2),h(17),h(3),h(17),h(0),h(63),h(0)}function p(a,b,c,d,e){for(var f,h=e[0],i=e[240],k=16,l=63,m=64,n=j(a,b),o=0;m>o;++o)G[P[o]]=n[o];var p=G[0]-c;c=G[0],0==p?g(d[0]):(f=32767+p,g(d[E[f]]),g(D[f]));for(var q=63;q>0&&0==G[q];q--);if(0==q)return g(h),c;for(var r,s=1;q>=s;){for(var t=s;0==G[s]&&q>=s;++s);var u=s-t;if(u>=k){r=u>>4;for(var v=1;r>=v;++v)g(i);u=15&u}f=32767+G[s],g(e[(u<<4)+E[f]]),g(D[f]),s++}return q!=l&&g(h),c}function q(){for(var a=String.fromCharCode,b=0;256>b;b++)N[b]=a(b)}function r(a){if(0>=a&&(a=1),a>100&&(a=100),x!=a){var c=0;c=Math.floor(50>a?5e3/a:200-2*a),b(c),x=a}}function s(){a||(a=50),q(),d(),e(),f(),r(a)}var t,u,v,w,x,y=(Math.round,Math.floor),z=new Array(64),A=new Array(64),B=new Array(64),C=new Array(64),D=new Array(65535),E=new Array(65535),F=new Array(64),G=new Array(64),H=[],I=0,J=7,K=new Array(64),L=new Array(64),M=new Array(64),N=new Array(256),O=new Array(2048),P=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Q=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],R=[0,1,2,3,4,5,6,7,8,9,10,11],S=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],T=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],U=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],V=[0,1,2,3,4,5,6,7,8,9,10,11],W=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],X=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(a,b){b&&r(b),H=new Array,I=0,J=7,i(65496),k(),m(),l(a.width,a.height),n(),o();var c=0,d=0,e=0;I=0,J=7,this.encode.displayName=\"_encode_\";for(var f,h,j,q,s,x,y,z,A,D=a.data,E=a.width,F=a.height,G=4*E,N=0;F>N;){for(f=0;G>f;){for(s=G*N+f,x=s,y=-1,z=0,A=0;64>A;A++)z=A>>3,y=4*(7&A),x=s+z*G+y,N+z>=F&&(x-=G*(N+1+z-F)),f+y>=G&&(x-=f+y-G+4),h=D[x++],j=D[x++],q=D[x++],K[A]=(O[h]+O[j+256>>0]+O[q+512>>0]>>16)-128,L[A]=(O[h+768>>0]+O[j+1024>>0]+O[q+1280>>0]>>16)-128,M[A]=(O[h+1280>>0]+O[j+1536>>0]+O[q+1792>>0]>>16)-128;c=p(K,B,c,t,v),d=p(L,C,d,u,w),e=p(M,C,e,u,w),f+=32}N+=8}if(J>=0){var P=[];P[1]=J+1,P[0]=(1<<J+1)-1,g(P)}i(65497);var Q=\"data:image/jpeg;base64,\"+btoa(H.join(\"\"));return H=[],Q},s()}return a.encode=function(b,c){var d=new a(c);return d.encode(b)},a}),b(\"runtime/html5/androidpatch\",[\"runtime/html5/util\",\"runtime/html5/jpegencoder\",\"base\"],function(a,b,c){var d,e=a.canvasToDataUrl;a.canvasToDataUrl=function(a,f,g){var h,i,j,k,l;return c.os.android?(\"image/jpeg\"===f&&\"undefined\"==typeof d&&(k=e.apply(null,arguments),l=k.split(\",\"),k=~l[0].indexOf(\"base64\")?atob(l[1]):decodeURIComponent(l[1]),k=k.substring(0,2),d=255===k.charCodeAt(0)&&216===k.charCodeAt(1)),\"image/jpeg\"!==f||d?e.apply(null,arguments):(i=a.width,j=a.height,h=a.getContext(\"2d\"),b.encode(h.getImageData(0,0,i,j),g))):e.apply(null,arguments)}}),b(\"runtime/html5/image\",[\"base\",\"runtime/html5/runtime\",\"runtime/html5/util\"],function(a,b,c){var d=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\";return b.register(\"Image\",{modified:!1,init:function(){var a=this,b=new Image;b.onload=function(){a._info={type:a.type,width:this.width,height:this.height},a._metas||\"image/jpeg\"!==a.type?a.owner.trigger(\"load\"):c.parseMeta(a._blob,function(b,c){a._metas=c,a.owner.trigger(\"load\")})},b.onerror=function(){a.owner.trigger(\"error\")},a._img=b},loadFromBlob:function(a){var b=this,d=b._img;b._blob=a,b.type=a.type,d.src=c.createObjectURL(a.getSource()),b.owner.once(\"load\",function(){c.revokeObjectURL(d.src)})},resize:function(a,b){var c=this._canvas||(this._canvas=document.createElement(\"canvas\"));this._resize(this._img,c,a,b),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\")},getAsBlob:function(a){var b,d=this._blob,e=this.options;if(a=a||this.type,this.modified||this.type!==a){if(b=this._canvas,\"image/jpeg\"===a){if(d=c.canvasToDataUrl(b,\"image/jpeg\",e.quality),e.preserveHeaders&&this._metas&&this._metas.imageHead)return d=c.dataURL2ArrayBuffer(d),d=c.updateImageHead(d,this._metas.imageHead),d=c.arrayBufferToBlob(d,a)}else d=c.canvasToDataUrl(b,a);d=c.dataURL2Blob(d)}return d},getAsDataUrl:function(a){var b=this.options;return a=a||this.type,\"image/jpeg\"===a?c.canvasToDataUrl(this._canvas,a,b.quality):this._canvas.toDataURL(a)},getOrientation:function(){return this._metas&&this._metas.exif&&this._metas.exif.get(\"Orientation\")||1},info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},destroy:function(){var a=this._canvas;this._img.onload=null,a&&(a.getContext(\"2d\").clearRect(0,0,a.width,a.height),a.width=a.height=0,this._canvas=null),this._img.src=d,this._img=this._blob=null},_resize:function(a,b,c,d){var e,f,g,h,i,j=this.options,k=a.width,l=a.height,m=this.getOrientation();~[5,6,7,8].indexOf(m)&&(c^=d,d^=c,c^=d),e=Math[j.crop?\"max\":\"min\"](c/k,d/l),j.allowMagnify||(e=Math.min(1,e)),f=k*e,g=l*e,j.crop?(b.width=c,b.height=d):(b.width=f,b.height=g),h=(b.width-f)/2,i=(b.height-g)/2,j.preserveHeaders||this._rotate2Orientaion(b,m),this._renderImageToCanvas(b,a,h,i,f,g)},_rotate2Orientaion:function(a,b){var c=a.width,d=a.height,e=a.getContext(\"2d\");switch(b){case 5:case 6:case 7:case 8:a.width=d,a.height=c}switch(b){case 2:e.translate(c,0),e.scale(-1,1);break;case 3:e.translate(c,d),e.rotate(Math.PI);break;case 4:e.translate(0,d),e.scale(1,-1);break;case 5:e.rotate(.5*Math.PI),e.scale(1,-1);break;case 6:e.rotate(.5*Math.PI),e.translate(0,-d);break;case 7:e.rotate(.5*Math.PI),e.translate(c,-d),e.scale(-1,1);break;case 8:e.rotate(-.5*Math.PI),e.translate(-c,0)}},_renderImageToCanvas:function(){function b(a,b,c){var d,e,f,g=document.createElement(\"canvas\"),h=g.getContext(\"2d\"),i=0,j=c,k=c;for(g.width=1,g.height=c,h.drawImage(a,0,0),d=h.getImageData(0,0,1,c).data;k>i;)e=d[4*(k-1)+3],0===e?j=k:i=k,k=j+i>>1;return f=k/c,0===f?1:f}function c(a){var b,c,d=a.naturalWidth,e=a.naturalHeight;return d*e>1048576?(b=document.createElement(\"canvas\"),b.width=b.height=1,c=b.getContext(\"2d\"),c.drawImage(a,-d+1,0),0===c.getImageData(0,0,1,1).data[3]):!1}return a.os.ios?a.os.ios>=7?function(a,c,d,e,f,g){var h=c.naturalWidth,i=c.naturalHeight,j=b(c,h,i);return a.getContext(\"2d\").drawImage(c,0,0,h*j,i*j,d,e,f,g)}:function(a,d,e,f,g,h){var i,j,k,l,m,n,o,p=d.naturalWidth,q=d.naturalHeight,r=a.getContext(\"2d\"),s=c(d),t=\"image/jpeg\"===this.type,u=1024,v=0,w=0;for(s&&(p/=2,q/=2),r.save(),i=document.createElement(\"canvas\"),i.width=i.height=u,j=i.getContext(\"2d\"),k=t?b(d,p,q):1,l=Math.ceil(u*g/p),m=Math.ceil(u*h/q/k);q>v;){for(n=0,o=0;p>n;)j.clearRect(0,0,u,u),j.drawImage(d,-n,-v),r.drawImage(i,0,0,u,u,e+o,f+w,l,m),n+=u,o+=l;v+=u,w+=m}r.restore(),i=j=null}:function(a,b,c,d,e,f){a.getContext(\"2d\").drawImage(b,c,d,e,f)}}()})}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData),c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){return 4===b.readyState?(b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status,b.status>=200&&b.status<300?(a._response=b.responseText,a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a.trigger(\"error\",\"server\")):a.trigger(\"error\",a._status?\"http\":\"abort\")):void 0},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"runtime/flash/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a;try{a=navigator.plugins[\"Shockwave Flash\"],a=a.description}catch(b){try{a=new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\").GetVariable(\"$version\")}catch(c){a=\"0.0\"}}return a=a.match(/\\d+/g),parseFloat(a[0]+\".\"+a[1],10)}function f(){function d(a,b){var c,d,e=a.type||a;c=e.split(\"::\"),d=c[0],e=c[1],\"Ready\"===e&&d===j.uid?j.trigger(\"ready\"):f[d]&&f[d].trigger(e.toLowerCase(),a,b)}var e={},f={},g=this.destory,j=this,k=b.guid(\"webuploader_\");c.apply(j,arguments),j.type=h,j.exec=function(a,c){var d,g=this,h=g.uid,k=b.slice(arguments,2);return f[h]=g,i[a]&&(e[h]||(e[h]=new i[a](g,j)),d=e[h],d[c])?d[c].apply(d,k):j.flashExec.apply(g,arguments)},a[k]=function(){var a=arguments;setTimeout(function(){d.apply(null,a)},1)},this.jsreciver=k,this.destory=function(){return g&&g.apply(this,arguments)},this.flashExec=function(a,c){var d=j.getFlash(),e=b.slice(arguments,2);return d.exec(this.uid,a,c,e)}}var g=b.$,h=\"flash\",i={};return b.inherits(c,{constructor:f,init:function(){var a,c=this.getContainer(),d=this.options;c.css({position:\"absolute\",top:\"-8px\",left:\"-8px\",width:\"9px\",height:\"9px\",overflow:\"hidden\"}),a='<object id=\"'+this.uid+'\" type=\"application/x-shockwave-flash\" data=\"'+d.swf+'\" ',b.browser.ie&&(a+='classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" '),a+='width=\"100%\" height=\"100%\" style=\"outline:0\"><param name=\"movie\" value=\"'+d.swf+'\" /><param name=\"flashvars\" value=\"uid='+this.uid+\"&jsreciver=\"+this.jsreciver+'\" /><param name=\"wmode\" value=\"transparent\" /><param name=\"allowscriptaccess\" value=\"always\" /></object>',c.html(a)},getFlash:function(){return this._flash?this._flash:(this._flash=g(\"#\"+this.uid).get(0),this._flash)}}),f.register=function(a,c){return c=i[a]=b.inherits(d,g.extend({flashExec:function(){var a=this.owner,b=this.getRuntime();return b.flashExec.apply(a,arguments)}},c))},e()>=11.4&&c.addRuntime(h,f),f}),b(\"runtime/flash/filepicker\",[\"base\",\"runtime/flash/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(a){var b,d,e=c.extend({},a);for(b=e.accept&&e.accept.length,d=0;b>d;d++)e.accept[d].title||(e.accept[d].title=\"Files\");delete e.button,delete e.container,this.flashExec(\"FilePicker\",\"init\",e)},destroy:function(){}})}),b(\"runtime/flash/image\",[\"runtime/flash/runtime\"],function(a){return a.register(\"Image\",{loadFromBlob:function(a){var b=this.owner;b.info()&&this.flashExec(\"Image\",\"info\",b.info()),b.meta()&&this.flashExec(\"Image\",\"meta\",b.meta()),this.flashExec(\"Image\",\"loadFromBlob\",a.uid)}})}),b(\"runtime/flash/transport\",[\"base\",\"runtime/flash/runtime\",\"runtime/client\"],function(a,b,c){var d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null,this._responseJson=null},send:function(){var a,b=this.owner,c=this.options,e=this._initAjax(),f=b._blob,g=c.server;e.connectRuntime(f.ruid),c.sendAsBinary?(g+=(/\\?/.test(g)?\"&\":\"?\")+d.param(b._formData),a=f.uid):(d.each(b._formData,function(a,b){e.exec(\"append\",a,b)}),e.exec(\"appendBlob\",c.fileVal,f.uid,c.filename||b._formData.name||\"\")),this._setRequestHeader(e,c.headers),e.exec(\"send\",{method:c.method,url:g},a)},getStatus:function(){return this._status},getResponse:function(){return this._response},getResponseAsJson:function(){return this._responseJson},abort:function(){var a=this._xhr;a&&(a.exec(\"abort\"),a.destroy(),this._xhr=a=null)},destroy:function(){this.abort()},_initAjax:function(){var a=this,b=new c(\"XMLHttpRequest\");return b.on(\"uploadprogress progress\",function(b){return a.trigger(\"progress\",b.loaded/b.total)}),b.on(\"load\",function(){var c=b.exec(\"getStatus\"),d=\"\";return b.off(),a._xhr=null,c>=200&&300>c?(a._response=b.exec(\"getResponse\"),a._responseJson=b.exec(\"getResponseAsJson\")):c>=500&&600>c?(a._response=b.exec(\"getResponse\"),a._responseJson=b.exec(\"getResponseAsJson\"),d=\"server\"):d=\"http\",b.destroy(),b=null,d?a.trigger(\"error\",d):a.trigger(\"load\")}),b.on(\"error\",function(){b.off(),a._xhr=null,a.trigger(\"error\",\"http\")}),a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.exec(\"setRequestHeader\",b,c)})}})}),b(\"preset/all\",[\"base\",\"widgets/filednd\",\"widgets/filepaste\",\"widgets/filepicker\",\"widgets/image\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"runtime/html5/blob\",\"runtime/html5/dnd\",\"runtime/html5/filepaste\",\"runtime/html5/filepicker\",\"runtime/html5/imagemeta/exif\",\"runtime/html5/androidpatch\",\"runtime/html5/image\",\"runtime/html5/transport\",\"runtime/flash/filepicker\",\"runtime/flash/image\",\"runtime/flash/transport\"],function(a){return a}),b(\"webuploader\",[\"preset/all\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "web/console/public/UEditor/third-party/webuploader/webuploader.withoutimage.js",
    "content": "/*! WebUploader 0.1.2 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n        },\n\n        exports = factory( root, _define, _require ),\n        origin;\n\n    // exports every module.\n    exportsTo( exports );\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = exports;\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([], exports );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = exports;\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( this, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     */\n    define('dollar-third',[],function() {\n        return window.jQuery || window.Zepto;\n    });\n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档将可能省略`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '0.1.2',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数loop](#WebUploader:Base.log)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {};\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            getRuntimeType: 'get-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     resize: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.options( 'resize', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `queueNum` 还在队列中的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return {\n                    successNum: stats.numOfSuccess,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue\n                };\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                if ( this._container ) {\n                    this._container.parentNode.removeChild( this.__container );\n                }\n    \n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.disconnectRuntime();\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [];\n    \n                $.each( widgetClass, function( _, klass ) {\n                    widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个tick中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                setTimeout(function() {\n                                    deferred.resolve.apply( deferred, args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ key ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @param  {object} widgetProto 组件原型，构造函数通过constructor属性定义\n         * @param  {object} responseMap API名称与函数实现的映射\n         * @example\n         *     Uploader.register( {\n         *         init: function( options ) {},\n         *         makeThumb: function() {}\n         *     }, {\n         *         'make-thumb': 'makeThumb'\n         *     } );\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n                widgetProto.responseMap = map;\n            } else {\n                widgetProto.responseMap = $.extend( map, responseMap );\n            }\n    \n            klass = Base.inherits( Widget, widgetProto );\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            },\n    \n            destroy: function() {\n                this.exec('destroy');\n                this.disconnectRuntime();\n                this.off();\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n    \n            RuntimeClient.call( me, 'Blob' );\n    \n            this.uid = source.uid || this.uid;\n            this.type = source.type || '';\n            this.size = source.size || 0;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            Blob.apply( this, arguments );\n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n    \n            // 如果有mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && this.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( this.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            // 如果没有指定mimetype, 但是知道文件后缀。\n            if ( !this.type &&  ~'jpg,jpeg,png,gif,bmp'.indexOf( ext ) ) {\n                this.type = 'image/' + (ext === 'jpg' ? 'jpeg' : ext);\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate ||\n                    (new Date()).toLocaleString();\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClent, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClent.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file'\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button;\n    \n                button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                $( window ).on( 'resize', function() {\n                    me.refresh();\n                });\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n    \n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                if ( this.runtime ) {\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                }\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor} 指定选择文件的按钮容器，不指定则不创建按钮。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Arroy} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            'add-btn': 'addButton',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable'\n        }, {\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addButton( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addButton: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    options, picker, deferred;\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                deferred = Base.Deferred();\n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                options = $.extend({}, pick, {\n                    accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                    swf: opts.swf,\n                    runtimeOrder: opts.runtimeOrder\n                });\n    \n                picker = new FilePicker( options );\n    \n                picker.once( 'ready', deferred.resolve );\n                picker.on( 'select', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                picker.init();\n    \n                this.pickers.push( picker );\n    \n                return deferred.promise();\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application'\n             */\n            this.type = source.type || 'application';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destory: function() {\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被移除的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            'sort-files': 'sortFiles',\n            'add-file': 'addFiles',\n            'get-file': 'getFile',\n            'fetch-file': 'fetchFile',\n            'get-stats': 'getStats',\n            'get-files': 'getFiles',\n            'remove-file': 'removeFile',\n            'retry': 'retry',\n            'reset': 'reset',\n            'accept-file': 'acceptFile'\n        }, {\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || file.size < 6 || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发，此事件的handler返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFiles: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \n                me.owner.trigger( 'filesQueued', files );\n    \n                if ( me.options.auto ) {\n                    me.request('start-upload');\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                file.setStatus( Status.CANCELLED );\n                me.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        return Uploader.register({\n            'predict-runtime-type': 'predictRuntmeType'\n        }, {\n    \n            init: function() {\n                if ( !this.predictRuntmeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntmeType() => String\n             * @method predictRuntmeType\n             * @for  Uploader\n             */\n            predictRuntmeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename ) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                this.exec( 'send', method );\n                this._timeout();\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 对于一个文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 3,\n    \n    \n            /**\n             * @property {Object} [formData]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: null\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n            /**\n             * @property {Object} [method='POST']\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST`或者`GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len;\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                fetch: function() {\n                    return pending.shift();\n                }\n            };\n        }\n    \n        Uploader.register({\n            'start-upload': 'start',\n            'stop-upload': 'stop',\n            'skip-file': 'skipFile',\n            'is-in-progress': 'isInProgress'\n        }, {\n    \n            init: function() {\n                var owner = this.owner;\n    \n                this.runing = false;\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                owner.on( 'uploadComplete', function( file ) {\n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             * @grammar upload() => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            start: function() {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                if ( me.runing ) {\n                    return;\n                }\n    \n                me.runing = true;\n    \n                // 如果有暂停的，则续传\n                $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        file.setStatus( Status.PROGRESS );\n                        me._trigged = false;\n                        v.transport && v.transport.send();\n                    }\n                });\n    \n                me._trigged = false;\n                me.owner.trigger('startUpload');\n                Base.nextTick( me.__tick );\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stop: function( interrupt ) {\n                var me = this;\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                me.runing = false;\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * 判断`Uplaode`r是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.runing;\n            },\n    \n            getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 掉过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me.getStats().numOfQueue ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    act = me._act,\n                    opts = me.options,\n                    next, done;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( act && act.has() &&\n                        act.file.getStatus() === Status.PROGRESS ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.fetch();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me.getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 );\n                        me._act = act;\n                        return act.fetch();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    return isPromise( next ) ?\n                            next[ next.pipe ? 'pipe' : 'then']( done ) :\n                            done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.QUEUED ) {\n                            me.owner.trigger( 'uploadStart', file );\n                            file.setStatus( Status.PROGRESS );\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                promise = me.request( 'before-send', block, function() {\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else {\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    var totalPercent = 0,\n                        uploaded = 0;\n    \n                    // 可能没有abort掉，progress还是执行进来了。\n                    // if ( !file.blocks ) {\n                    //     return;\n                    // }\n    \n                    totalPercent = block.percentage = percentage;\n    \n                    if ( block.chunks > 1 ) {    // 计算文件的整体速度。\n                        $.each( file.blocks, function( _, v ) {\n                            uploaded += (v.percentage || 0) * (v.end - v.start);\n                        });\n    \n                        totalPercent = uploaded / file.size;\n                    }\n    \n                    owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    ret = tr.getResponseAsJson() || {};\n                    ret._raw = tr.getResponse();\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n                        tr.send();\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name );\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            }\n    \n        });\n    });\n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            init: function() {\n                var me = this;\n                $.each( validators, function() {\n                    this.call( me.owner );\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileNumLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = opts.fileSizeLimit >> 0,\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'uploadFinished', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {int} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destory = this.destory;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/dnd',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        var $ = Base.$,\n            prefix = 'webuploader-dnd-';\n    \n        return Html5Runtime.register( 'DragAndDrop', {\n            init: function() {\n                var elem = this.elem = this.options.container;\n    \n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\n                this.dndOver = false;\n    \n                elem.on( 'dragenter', this.dragEnterHandler );\n                elem.on( 'dragover', this.dragOverHandler );\n                elem.on( 'dragleave', this.dragLeaveHandler );\n                elem.on( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).on( 'dragover', this.dragOverHandler );\n                    $( document ).on( 'drop', this.dropHandler );\n                }\n            },\n    \n            _dragEnterHandler: function( e ) {\n                var me = this,\n                    denied = me._denied || false,\n                    items;\n    \n                e = e.originalEvent || e;\n    \n                if ( !me.dndOver ) {\n                    me.dndOver = true;\n    \n                    // 注意只有 chrome 支持。\n                    items = e.dataTransfer.items;\n    \n                    if ( items && items.length ) {\n                        me._denied = denied = !me.trigger( 'accept', items );\n                    }\n    \n                    me.elem.addClass( prefix + 'over' );\n                    me.elem[ denied ? 'addClass' :\n                            'removeClass' ]( prefix + 'denied' );\n                }\n    \n    \n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\n    \n                return false;\n            },\n    \n            _dragOverHandler: function( e ) {\n                // 只处理框内的。\n                var parentElem = this.elem.parent().get( 0 );\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                clearTimeout( this._leaveTimer );\n                this._dragEnterHandler.call( this, e );\n    \n                return false;\n            },\n    \n            _dragLeaveHandler: function() {\n                var me = this,\n                    handler;\n    \n                handler = function() {\n                    me.dndOver = false;\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\n                };\n    \n                clearTimeout( me._leaveTimer );\n                me._leaveTimer = setTimeout( handler, 100 );\n                return false;\n            },\n    \n            _dropHandler: function( e ) {\n                var me = this,\n                    ruid = me.getRuid(),\n                    parentElem = me.elem.parent().get( 0 );\n    \n                // 只处理框内的。\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                me._getTansferFiles( e, function( results ) {\n                    me.trigger( 'drop', $.map( results, function( file ) {\n                        return new File( ruid, file );\n                    }) );\n                });\n    \n                me.dndOver = false;\n                me.elem.removeClass( prefix + 'over' );\n                return false;\n            },\n    \n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\n            _getTansferFiles: function( e, callback ) {\n                var results  = [],\n                    promises = [],\n                    items, files, dataTransfer, file, item, i, len, canAccessFolder;\n    \n                e = e.originalEvent || e;\n    \n                dataTransfer = e.dataTransfer;\n                items = dataTransfer.items;\n                files = dataTransfer.files;\n    \n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\n    \n                for ( i = 0, len = files.length; i < len; i++ ) {\n                    file = files[ i ];\n                    item = items && items[ i ];\n    \n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\n    \n                        promises.push( this._traverseDirectoryTree(\n                                item.webkitGetAsEntry(), results ) );\n                    } else {\n                        results.push( file );\n                    }\n                }\n    \n                Base.when.apply( Base, promises ).done(function() {\n    \n                    if ( !results.length ) {\n                        return;\n                    }\n    \n                    callback( results );\n                });\n            },\n    \n            _traverseDirectoryTree: function( entry, results ) {\n                var deferred = Base.Deferred(),\n                    me = this;\n    \n                if ( entry.isFile ) {\n                    entry.file(function( file ) {\n                        results.push( file );\n                        deferred.resolve();\n                    });\n                } else if ( entry.isDirectory ) {\n                    entry.createReader().readEntries(function( entries ) {\n                        var len = entries.length,\n                            promises = [],\n                            arr = [],    // 为了保证顺序。\n                            i;\n    \n                        for ( i = 0; i < len; i++ ) {\n                            promises.push( me._traverseDirectoryTree(\n                                    entries[ i ], arr ) );\n                        }\n    \n                        Base.when.apply( Base, promises ).then(function() {\n                            results.push.apply( results, arr );\n                            deferred.resolve();\n                        }, deferred.reject );\n                    });\n                }\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                var elem = this.elem;\n    \n                elem.off( 'dragenter', this.dragEnterHandler );\n                elem.off( 'dragover', this.dragEnterHandler );\n                elem.off( 'dragleave', this.dragLeaveHandler );\n                elem.off( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).off( 'dragover', this.dragOverHandler );\n                    $( document ).off( 'drop', this.dropHandler );\n                }\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/filepaste',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        return Html5Runtime.register( 'FilePaste', {\n            init: function() {\n                var opts = this.options,\n                    elem = this.elem = opts.container,\n                    accept = '.*',\n                    arr, i, len, item;\n    \n                // accetp的mimeTypes中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].mimeTypes;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = arr.join(',');\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\n                    }\n                }\n                this.accept = accept = new RegExp( accept, 'i' );\n                this.hander = Base.bindFn( this._pasteHander, this );\n                elem.on( 'paste', this.hander );\n            },\n    \n            _pasteHander: function( e ) {\n                var allowed = [],\n                    ruid = this.getRuid(),\n                    items, item, blob, i, len;\n    \n                e = e.originalEvent || e;\n                items = e.clipboardData.items;\n    \n                for ( i = 0, len = items.length; i < len; i++ ) {\n                    item = items[ i ];\n    \n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\n                        continue;\n                    }\n    \n                    allowed.push( new File( ruid, blob ) );\n                }\n    \n                if ( allowed.length ) {\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.trigger( 'paste', allowed );\n                }\n            },\n    \n            destroy: function() {\n                this.elem.off( 'paste', this.hander );\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    lable = $( document.createElement('label') ),\n                    input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler;\n    \n                input.attr( 'type', 'file' );\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                lable.on( 'click', function() {\n                    input.trigger('click');\n                });\n    \n                lable.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( lable );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                input.on( 'change', function( e ) {\n                    var fn = arguments.callee,\n                        clone;\n    \n                    me.files = e.target.files;\n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', fn )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                });\n    \n                lable.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        return me.trigger( 'error', 'server' );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    /**\n     * @fileOverview FlashRuntime\n     */\n    define('runtime/flash/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var $ = Base.$,\n            type = 'flash',\n            components = {};\n    \n    \n        function getFlashVersion() {\n            var version;\n    \n            try {\n                version = navigator.plugins[ 'Shockwave Flash' ];\n                version = version.description;\n            } catch ( ex ) {\n                try {\n                    version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                            .GetVariable('$version');\n                } catch ( ex2 ) {\n                    version = '0.0';\n                }\n            }\n            version = version.match( /\\d+/g );\n            return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );\n        }\n    \n        function FlashRuntime() {\n            var pool = {},\n                clients = {},\n                destory = this.destory,\n                me = this,\n                jsreciver = Base.guid('webuploader_');\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/ ) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                clients[ uid ] = client;\n    \n                if ( components[ comp ] ) {\n                    if ( !pool[ uid ] ) {\n                        pool[ uid ] = new components[ comp ]( client, me );\n                    }\n    \n                    instance = pool[ uid ];\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n    \n                return me.flashExec.apply( client, arguments );\n            };\n    \n            function handler( evt, obj ) {\n                var type = evt.type || evt,\n                    parts, uid;\n    \n                parts = type.split('::');\n                uid = parts[ 0 ];\n                type = parts[ 1 ];\n    \n                // console.log.apply( console, arguments );\n    \n                if ( type === 'Ready' && uid === me.uid ) {\n                    me.trigger('ready');\n                } else if ( clients[ uid ] ) {\n                    clients[ uid ].trigger( type.toLowerCase(), evt, obj );\n                }\n    \n                // Base.log( evt, obj );\n            }\n    \n            // flash的接受器。\n            window[ jsreciver ] = function() {\n                var args = arguments;\n    \n                // 为了能捕获得到。\n                setTimeout(function() {\n                    handler.apply( null, args );\n                }, 1 );\n            };\n    \n            this.jsreciver = jsreciver;\n    \n            this.destory = function() {\n                // @todo 删除池子中的所有实例\n                return destory && destory.apply( this, arguments );\n            };\n    \n            this.flashExec = function( comp, fn ) {\n                var flash = me.getFlash(),\n                    args = Base.slice( arguments, 2 );\n    \n                return flash.exec( this.uid, comp, fn, args );\n            };\n    \n            // @todo\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: FlashRuntime,\n    \n            init: function() {\n                var container = this.getContainer(),\n                    opts = this.options,\n                    html;\n    \n                // if not the minimal height, shims are not initialized\n                // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc)\n                container.css({\n                    position: 'absolute',\n                    top: '-8px',\n                    left: '-8px',\n                    width: '9px',\n                    height: '9px',\n                    overflow: 'hidden'\n                });\n    \n                // insert flash object\n                html = '<object id=\"' + this.uid + '\" type=\"application/' +\n                        'x-shockwave-flash\" data=\"' +  opts.swf + '\" ';\n    \n                if ( Base.browser.ie ) {\n                    html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                }\n    \n                html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">'  +\n                    '<param name=\"movie\" value=\"' + opts.swf + '\" />' +\n                    '<param name=\"flashvars\" value=\"uid=' + this.uid +\n                    '&jsreciver=' + this.jsreciver + '\" />' +\n                    '<param name=\"wmode\" value=\"transparent\" />' +\n                    '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                '</object>';\n    \n                container.html( html );\n            },\n    \n            getFlash: function() {\n                if ( this._flash ) {\n                    return this._flash;\n                }\n    \n                this._flash = $( '#' + this.uid ).get( 0 );\n                return this._flash;\n            }\n    \n        });\n    \n        FlashRuntime.register = function( name, component ) {\n            component = components[ name ] = Base.inherits( CompBase, $.extend({\n    \n                // @todo fix this later\n                flashExec: function() {\n                    var owner = this.owner,\n                        runtime = this.getRuntime();\n    \n                    return runtime.flashExec.apply( owner, arguments );\n                }\n            }, component ) );\n    \n            return component;\n        };\n    \n        if ( getFlashVersion() >= 11.4 ) {\n            Runtime.addRuntime( type, FlashRuntime );\n        }\n    \n        return FlashRuntime;\n    });\n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/flash/filepicker',[\n        'base',\n        'runtime/flash/runtime'\n    ], function( Base, FlashRuntime ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'FilePicker', {\n            init: function( opts ) {\n                var copy = $.extend({}, opts ),\n                    len, i;\n    \n                // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug.\n                len = copy.accept && copy.accept.length;\n                for (  i = 0; i < len; i++ ) {\n                    if ( !copy.accept[ i ].title ) {\n                        copy.accept[ i ].title = 'Files';\n                    }\n                }\n    \n                delete copy.button;\n                delete copy.container;\n    \n                this.flashExec( 'FilePicker', 'init', copy );\n            },\n    \n            destroy: function() {\n                // todo\n            }\n        });\n    });\n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/flash/transport',[\n        'base',\n        'runtime/flash/runtime',\n        'runtime/client'\n    ], function( Base, FlashRuntime, RuntimeClient ) {\n        var $ = Base.$;\n    \n        return FlashRuntime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n                this._responseJson = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    binary;\n    \n                xhr.connectRuntime( blob.ruid );\n    \n                if ( opts.sendAsBinary ) {\n                    server += (/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData );\n    \n                    binary = blob.uid;\n                } else {\n                    $.each( owner._formData, function( k, v ) {\n                        xhr.exec( 'append', k, v );\n                    });\n    \n                    xhr.exec( 'appendBlob', opts.fileVal, blob.uid,\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n                xhr.exec( 'send', {\n                    method: opts.method,\n                    url: server\n                }, binary );\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._responseJson;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.exec('abort');\n                    xhr.destroy();\n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new RuntimeClient('XMLHttpRequest');\n    \n                xhr.on( 'uploadprogress progress', function( e ) {\n                    return me.trigger( 'progress', e.loaded / e.total );\n                });\n    \n                xhr.on( 'load', function() {\n                    var status = xhr.exec('getStatus'),\n                        err = '';\n    \n                    xhr.off();\n                    me._xhr = null;\n    \n                    if ( status >= 200 && status < 300 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                    } else if ( status >= 500 && status < 600 ) {\n                        me._response = xhr.exec('getResponse');\n                        me._responseJson = xhr.exec('getResponseAsJson');\n                        err = 'server';\n                    } else {\n                        err = 'http';\n                    }\n    \n                    xhr.destroy();\n                    xhr = null;\n    \n                    return err ? me.trigger( 'error', err ) : me.trigger('load');\n                });\n    \n                xhr.on( 'error', function() {\n                    xhr.off();\n                    me._xhr = null;\n                    me.trigger( 'error', 'http' );\n                });\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.exec( 'setRequestHeader', key, val );\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview 没有图像处理的版本。\n     */\n    define('preset/withoutimage',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/transport',\n    \n        // flash\n        'runtime/flash/filepicker',\n        'runtime/flash/transport'\n    ], function( Base ) {\n        return Base;\n    });\n    define('webuploader',[\n        'preset/withoutimage'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "web/console/public/UEditor/third-party/zeroclipboard/ZeroClipboard.js",
    "content": "/*!\n* ZeroClipboard\n* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n* Copyright (c) 2014 Jon Rohan, James M. Greene\n* Licensed MIT\n* http://zeroclipboard.org/\n* v2.0.0-beta.5\n*/\n(function(window) {\n  \"use strict\";\n  var _currentElement;\n  var _flashState = {\n    bridge: null,\n    version: \"0.0.0\",\n    pluginType: \"unknown\",\n    disabled: null,\n    outdated: null,\n    unavailable: null,\n    deactivated: null,\n    overdue: null,\n    ready: null\n  };\n  var _clipData = {};\n  var _clipDataFormatMap = null;\n  var _clientIdCounter = 0;\n  var _clientMeta = {};\n  var _elementIdCounter = 0;\n  var _elementMeta = {};\n  var _swfPath = function() {\n    var i, jsDir, tmpJsPath, jsPath, swfPath = \"ZeroClipboard.swf\";\n    if (!(document.currentScript && (jsPath = document.currentScript.src))) {\n      var scripts = document.getElementsByTagName(\"script\");\n      if (\"readyState\" in scripts[0]) {\n        for (i = scripts.length; i--; ) {\n          if (scripts[i].readyState === \"interactive\" && (jsPath = scripts[i].src)) {\n            break;\n          }\n        }\n      } else if (document.readyState === \"loading\") {\n        jsPath = scripts[scripts.length - 1].src;\n      } else {\n        for (i = scripts.length; i--; ) {\n          tmpJsPath = scripts[i].src;\n          if (!tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n          tmpJsPath = tmpJsPath.split(\"#\")[0].split(\"?\")[0];\n          tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\"/\") + 1);\n          if (jsDir == null) {\n            jsDir = tmpJsPath;\n          } else if (jsDir !== tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n        }\n        if (jsDir !== null) {\n          jsPath = jsDir;\n        }\n      }\n    }\n    if (jsPath) {\n      jsPath = jsPath.split(\"#\")[0].split(\"?\")[0];\n      swfPath = jsPath.slice(0, jsPath.lastIndexOf(\"/\") + 1) + swfPath;\n    }\n    return swfPath;\n  }();\n  var _camelizeCssPropName = function() {\n    var matcherRegex = /\\-([a-z])/g, replacerFn = function(match, group) {\n      return group.toUpperCase();\n    };\n    return function(prop) {\n      return prop.replace(matcherRegex, replacerFn);\n    };\n  }();\n  var _getStyle = function(el, prop) {\n    var value, camelProp, tagName;\n    if (window.getComputedStyle) {\n      value = window.getComputedStyle(el, null).getPropertyValue(prop);\n    } else {\n      camelProp = _camelizeCssPropName(prop);\n      if (el.currentStyle) {\n        value = el.currentStyle[camelProp];\n      } else {\n        value = el.style[camelProp];\n      }\n    }\n    if (prop === \"cursor\") {\n      if (!value || value === \"auto\") {\n        tagName = el.tagName.toLowerCase();\n        if (tagName === \"a\") {\n          return \"pointer\";\n        }\n      }\n    }\n    return value;\n  };\n  var _elementMouseOver = function(event) {\n    if (!event) {\n      event = window.event;\n    }\n    var target;\n    if (this !== window) {\n      target = this;\n    } else if (event.target) {\n      target = event.target;\n    } else if (event.srcElement) {\n      target = event.srcElement;\n    }\n    ZeroClipboard.activate(target);\n  };\n  var _addEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.addEventListener) {\n      element.addEventListener(method, func, false);\n    } else if (element.attachEvent) {\n      element.attachEvent(\"on\" + method, func);\n    }\n  };\n  var _removeEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.removeEventListener) {\n      element.removeEventListener(method, func, false);\n    } else if (element.detachEvent) {\n      element.detachEvent(\"on\" + method, func);\n    }\n  };\n  var _addClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (!element.classList.contains(value)) {\n        element.classList.add(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\") {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1) {\n        if (!element.className) {\n          element.className = value;\n        } else {\n          var className = \" \" + element.className + \" \", setClass = element.className;\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n              setClass += \" \" + classNames[c];\n            }\n          }\n          element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n        }\n      }\n    }\n    return element;\n  };\n  var _removeClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (element.classList.contains(value)) {\n        element.classList.remove(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\" || value === undefined) {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1 && element.className) {\n        if (value) {\n          var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            className = className.replace(\" \" + classNames[c] + \" \", \" \");\n          }\n          element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n        } else {\n          element.className = \"\";\n        }\n      }\n    }\n    return element;\n  };\n  var _getZoomFactor = function() {\n    var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n    if (typeof document.body.getBoundingClientRect === \"function\") {\n      rect = document.body.getBoundingClientRect();\n      physicalWidth = rect.right - rect.left;\n      logicalWidth = document.body.offsetWidth;\n      zoomFactor = Math.round(physicalWidth / logicalWidth * 100) / 100;\n    }\n    return zoomFactor;\n  };\n  var _getDOMObjectPosition = function(obj, defaultZIndex) {\n    var info = {\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0,\n      zIndex: _getSafeZIndex(defaultZIndex) - 1\n    };\n    if (obj.getBoundingClientRect) {\n      var rect = obj.getBoundingClientRect();\n      var pageXOffset, pageYOffset, zoomFactor;\n      if (\"pageXOffset\" in window && \"pageYOffset\" in window) {\n        pageXOffset = window.pageXOffset;\n        pageYOffset = window.pageYOffset;\n      } else {\n        zoomFactor = _getZoomFactor();\n        pageXOffset = Math.round(document.documentElement.scrollLeft / zoomFactor);\n        pageYOffset = Math.round(document.documentElement.scrollTop / zoomFactor);\n      }\n      var leftBorderWidth = document.documentElement.clientLeft || 0;\n      var topBorderWidth = document.documentElement.clientTop || 0;\n      info.left = rect.left + pageXOffset - leftBorderWidth;\n      info.top = rect.top + pageYOffset - topBorderWidth;\n      info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n      info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n    }\n    return info;\n  };\n  var _cacheBust = function(path, options) {\n    var cacheBust = options == null || options && options.cacheBust === true;\n    if (cacheBust) {\n      return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + new Date().getTime();\n    } else {\n      return \"\";\n    }\n  };\n  var _vars = function(options) {\n    var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n    if (options.trustedDomains) {\n      if (typeof options.trustedDomains === \"string\") {\n        domains = [ options.trustedDomains ];\n      } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n        domains = options.trustedDomains;\n      }\n    }\n    if (domains && domains.length) {\n      for (i = 0, len = domains.length; i < len; i++) {\n        if (domains.hasOwnProperty(i) && domains[i] && typeof domains[i] === \"string\") {\n          domain = _extractDomain(domains[i]);\n          if (!domain) {\n            continue;\n          }\n          if (domain === \"*\") {\n            trustedOriginsExpanded = [ domain ];\n            break;\n          }\n          trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, window.location.protocol + \"//\" + domain ]);\n        }\n      }\n    }\n    if (trustedOriginsExpanded.length) {\n      str += \"trustedOrigins=\" + encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n    }\n    if (options.forceEnhancedClipboard === true) {\n      str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n    }\n    return str;\n  };\n  var _inArray = function(elem, array, fromIndex) {\n    if (typeof array.indexOf === \"function\") {\n      return array.indexOf(elem, fromIndex);\n    }\n    var i, len = array.length;\n    if (typeof fromIndex === \"undefined\") {\n      fromIndex = 0;\n    } else if (fromIndex < 0) {\n      fromIndex = len + fromIndex;\n    }\n    for (i = fromIndex; i < len; i++) {\n      if (array.hasOwnProperty(i) && array[i] === elem) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var _prepClip = function(elements) {\n    if (typeof elements === \"string\") {\n      throw new TypeError(\"ZeroClipboard doesn't accept query strings.\");\n    }\n    return typeof elements.length !== \"number\" ? [ elements ] : elements;\n  };\n  var _dispatchCallback = function(func, context, args, async) {\n    if (async) {\n      window.setTimeout(function() {\n        func.apply(context, args);\n      }, 0);\n    } else {\n      func.apply(context, args);\n    }\n  };\n  var _getSafeZIndex = function(val) {\n    var zIndex, tmp;\n    if (val) {\n      if (typeof val === \"number\" && val > 0) {\n        zIndex = val;\n      } else if (typeof val === \"string\" && (tmp = parseInt(val, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    if (!zIndex) {\n      if (typeof _globalConfig.zIndex === \"number\" && _globalConfig.zIndex > 0) {\n        zIndex = _globalConfig.zIndex;\n      } else if (typeof _globalConfig.zIndex === \"string\" && (tmp = parseInt(_globalConfig.zIndex, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    return zIndex || 0;\n  };\n  var _extend = function() {\n    var i, len, arg, prop, src, copy, target = arguments[0] || {};\n    for (i = 1, len = arguments.length; i < len; i++) {\n      if ((arg = arguments[i]) != null) {\n        for (prop in arg) {\n          if (arg.hasOwnProperty(prop)) {\n            src = target[prop];\n            copy = arg[prop];\n            if (target === copy) {\n              continue;\n            }\n            if (copy !== undefined) {\n              target[prop] = copy;\n            }\n          }\n        }\n      }\n    }\n    return target;\n  };\n  var _extractDomain = function(originOrUrl) {\n    if (originOrUrl == null || originOrUrl === \"\") {\n      return null;\n    }\n    originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n    if (originOrUrl === \"\") {\n      return null;\n    }\n    var protocolIndex = originOrUrl.indexOf(\"//\");\n    originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n    var pathIndex = originOrUrl.indexOf(\"/\");\n    originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n    if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n      return null;\n    }\n    return originOrUrl || null;\n  };\n  var _determineScriptAccess = function() {\n    var _extractAllDomains = function(origins, resultsArray) {\n      var i, len, tmp;\n      if (origins == null || resultsArray[0] === \"*\") {\n        return;\n      }\n      if (typeof origins === \"string\") {\n        origins = [ origins ];\n      }\n      if (!(typeof origins === \"object\" && typeof origins.length === \"number\")) {\n        return;\n      }\n      for (i = 0, len = origins.length; i < len; i++) {\n        if (origins.hasOwnProperty(i) && (tmp = _extractDomain(origins[i]))) {\n          if (tmp === \"*\") {\n            resultsArray.length = 0;\n            resultsArray.push(\"*\");\n            break;\n          }\n          if (_inArray(tmp, resultsArray) === -1) {\n            resultsArray.push(tmp);\n          }\n        }\n      }\n    };\n    return function(currentDomain, configOptions) {\n      var swfDomain = _extractDomain(configOptions.swfPath);\n      if (swfDomain === null) {\n        swfDomain = currentDomain;\n      }\n      var trustedDomains = [];\n      _extractAllDomains(configOptions.trustedOrigins, trustedDomains);\n      _extractAllDomains(configOptions.trustedDomains, trustedDomains);\n      var len = trustedDomains.length;\n      if (len > 0) {\n        if (len === 1 && trustedDomains[0] === \"*\") {\n          return \"always\";\n        }\n        if (_inArray(currentDomain, trustedDomains) !== -1) {\n          if (len === 1 && currentDomain === swfDomain) {\n            return \"sameDomain\";\n          }\n          return \"always\";\n        }\n      }\n      return \"never\";\n    };\n  }();\n  var _objectKeys = function(obj) {\n    if (obj == null) {\n      return [];\n    }\n    if (Object.keys) {\n      return Object.keys(obj);\n    }\n    var keys = [];\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        keys.push(prop);\n      }\n    }\n    return keys;\n  };\n  var _deleteOwnProperties = function(obj) {\n    if (obj) {\n      for (var prop in obj) {\n        if (obj.hasOwnProperty(prop)) {\n          delete obj[prop];\n        }\n      }\n    }\n    return obj;\n  };\n  var _safeActiveElement = function() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n    return null;\n  };\n  var _pick = function(obj, keys) {\n    var newObj = {};\n    for (var i = 0, len = keys.length; i < len; i++) {\n      if (keys[i] in obj) {\n        newObj[keys[i]] = obj[keys[i]];\n      }\n    }\n    return newObj;\n  };\n  var _omit = function(obj, keys) {\n    var newObj = {};\n    for (var prop in obj) {\n      if (_inArray(prop, keys) === -1) {\n        newObj[prop] = obj[prop];\n      }\n    }\n    return newObj;\n  };\n  var _mapClipDataToFlash = function(clipData) {\n    var newClipData = {}, formatMap = {};\n    if (!(typeof clipData === \"object\" && clipData)) {\n      return;\n    }\n    for (var dataFormat in clipData) {\n      if (dataFormat && clipData.hasOwnProperty(dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n        switch (dataFormat.toLowerCase()) {\n         case \"text/plain\":\n         case \"text\":\n         case \"air:text\":\n         case \"flash:text\":\n          newClipData.text = clipData[dataFormat];\n          formatMap.text = dataFormat;\n          break;\n\n         case \"text/html\":\n         case \"html\":\n         case \"air:html\":\n         case \"flash:html\":\n          newClipData.html = clipData[dataFormat];\n          formatMap.html = dataFormat;\n          break;\n\n         case \"application/rtf\":\n         case \"text/rtf\":\n         case \"rtf\":\n         case \"richtext\":\n         case \"air:rtf\":\n         case \"flash:rtf\":\n          newClipData.rtf = clipData[dataFormat];\n          formatMap.rtf = dataFormat;\n          break;\n\n         default:\n          break;\n        }\n      }\n    }\n    return {\n      data: newClipData,\n      formatMap: formatMap\n    };\n  };\n  var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n    if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n      return clipResults;\n    }\n    var newResults = {};\n    for (var prop in clipResults) {\n      if (clipResults.hasOwnProperty(prop)) {\n        if (prop !== \"success\" && prop !== \"data\") {\n          newResults[prop] = clipResults[prop];\n          continue;\n        }\n        newResults[prop] = {};\n        var tmpHash = clipResults[prop];\n        for (var dataFormat in tmpHash) {\n          if (dataFormat && tmpHash.hasOwnProperty(dataFormat) && formatMap.hasOwnProperty(dataFormat)) {\n            newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n          }\n        }\n      }\n    }\n    return newResults;\n  };\n  var _args = function(arraySlice) {\n    return function(args) {\n      return arraySlice.call(args, 0);\n    };\n  }(window.Array.prototype.slice);\n  var _detectFlashSupport = function() {\n    var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n    function parseFlashVersion(desc) {\n      var matches = desc.match(/[\\d]+/g);\n      matches.length = 3;\n      return matches.join(\".\");\n    }\n    function isPepperFlash(flashPlayerFileName) {\n      return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n    }\n    function inspectPlugin(plugin) {\n      if (plugin) {\n        hasFlash = true;\n        if (plugin.version) {\n          flashVersion = parseFlashVersion(plugin.version);\n        }\n        if (!flashVersion && plugin.description) {\n          flashVersion = parseFlashVersion(plugin.description);\n        }\n        if (plugin.filename) {\n          isPPAPI = isPepperFlash(plugin.filename);\n        }\n      }\n    }\n    if (navigator.plugins && navigator.plugins.length) {\n      plugin = navigator.plugins[\"Shockwave Flash\"];\n      inspectPlugin(plugin);\n      if (navigator.plugins[\"Shockwave Flash 2.0\"]) {\n        hasFlash = true;\n        flashVersion = \"2.0.0.11\";\n      }\n    } else if (navigator.mimeTypes && navigator.mimeTypes.length) {\n      mimeType = navigator.mimeTypes[\"application/x-shockwave-flash\"];\n      plugin = mimeType && mimeType.enabledPlugin;\n      inspectPlugin(plugin);\n    } else if (typeof ActiveXObject !== \"undefined\") {\n      isActiveX = true;\n      try {\n        ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n        hasFlash = true;\n        flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n      } catch (e1) {\n        try {\n          ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n          hasFlash = true;\n          flashVersion = \"6.0.21\";\n        } catch (e2) {\n          try {\n            ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n            hasFlash = true;\n            flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n          } catch (e3) {\n            isActiveX = false;\n          }\n        }\n      }\n    }\n    _flashState.disabled = hasFlash !== true;\n    _flashState.outdated = flashVersion && parseFloat(flashVersion) < 11;\n    _flashState.version = flashVersion || \"0.0.0\";\n    _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n  };\n  _detectFlashSupport();\n  var ZeroClipboard = function(elements) {\n    if (!(this instanceof ZeroClipboard)) {\n      return new ZeroClipboard(elements);\n    }\n    this.id = \"\" + _clientIdCounter++;\n    _clientMeta[this.id] = {\n      instance: this,\n      elements: [],\n      handlers: {}\n    };\n    if (elements) {\n      this.clip(elements);\n    }\n    if (typeof _flashState.ready !== \"boolean\") {\n      _flashState.ready = false;\n    }\n    if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n      var _client = this;\n      var maxWait = _globalConfig.flashLoadTimeout;\n      if (typeof maxWait === \"number\" && maxWait >= 0) {\n        setTimeout(function() {\n          if (typeof _flashState.deactivated !== \"boolean\") {\n            _flashState.deactivated = true;\n          }\n          if (_flashState.deactivated === true) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-deactivated\",\n              client: _client\n            });\n          }\n        }, maxWait);\n      }\n      _flashState.overdue = false;\n      _bridge();\n    }\n  };\n  ZeroClipboard.prototype.setText = function(text) {\n    ZeroClipboard.setData(\"text/plain\", text);\n    return this;\n  };\n  ZeroClipboard.prototype.setHtml = function(html) {\n    ZeroClipboard.setData(\"text/html\", html);\n    return this;\n  };\n  ZeroClipboard.prototype.setRichText = function(richText) {\n    ZeroClipboard.setData(\"application/rtf\", richText);\n    return this;\n  };\n  ZeroClipboard.prototype.setData = function() {\n    ZeroClipboard.setData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.clearData = function() {\n    ZeroClipboard.clearData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.setSize = function(width, height) {\n    _setSize(width, height);\n    return this;\n  };\n  var _setHandCursor = function(enabled) {\n    if (_flashState.ready === true && _flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n      _flashState.bridge.setHandCursor(enabled);\n    } else {\n      _flashState.ready = false;\n    }\n  };\n  ZeroClipboard.prototype.destroy = function() {\n    this.unclip();\n    this.off();\n    delete _clientMeta[this.id];\n  };\n  var _getAllClients = function() {\n    var i, len, client, clients = [], clientIds = _objectKeys(_clientMeta);\n    for (i = 0, len = clientIds.length; i < len; i++) {\n      client = _clientMeta[clientIds[i]].instance;\n      if (client && client instanceof ZeroClipboard) {\n        clients.push(client);\n      }\n    }\n    return clients;\n  };\n  ZeroClipboard.version = \"2.0.0-beta.5\";\n  var _globalConfig = {\n    swfPath: _swfPath,\n    trustedDomains: window.location.host ? [ window.location.host ] : [],\n    cacheBust: true,\n    forceHandCursor: false,\n    forceEnhancedClipboard: false,\n    zIndex: 999999999,\n    debug: false,\n    title: null,\n    autoActivate: true,\n    flashLoadTimeout: 3e4\n  };\n  ZeroClipboard.isFlashUnusable = function() {\n    return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n  };\n  ZeroClipboard.config = function(options) {\n    if (typeof options === \"object\" && options !== null) {\n      _extend(_globalConfig, options);\n    }\n    if (typeof options === \"string\" && options) {\n      if (_globalConfig.hasOwnProperty(options)) {\n        return _globalConfig[options];\n      }\n      return;\n    }\n    var copy = {};\n    for (var prop in _globalConfig) {\n      if (_globalConfig.hasOwnProperty(prop)) {\n        if (typeof _globalConfig[prop] === \"object\" && _globalConfig[prop] !== null) {\n          if (\"length\" in _globalConfig[prop]) {\n            copy[prop] = _globalConfig[prop].slice(0);\n          } else {\n            copy[prop] = _extend({}, _globalConfig[prop]);\n          }\n        } else {\n          copy[prop] = _globalConfig[prop];\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.destroy = function() {\n    ZeroClipboard.deactivate();\n    for (var clientId in _clientMeta) {\n      if (_clientMeta.hasOwnProperty(clientId) && _clientMeta[clientId]) {\n        var client = _clientMeta[clientId].instance;\n        if (client && typeof client.destroy === \"function\") {\n          client.destroy();\n        }\n      }\n    }\n    var flashBridge = _flashState.bridge;\n    if (flashBridge) {\n      var htmlBridge = _getHtmlBridge(flashBridge);\n      if (htmlBridge) {\n        if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n          flashBridge.style.display = \"none\";\n          (function removeSwfFromIE() {\n            if (flashBridge.readyState === 4) {\n              for (var prop in flashBridge) {\n                if (typeof flashBridge[prop] === \"function\") {\n                  flashBridge[prop] = null;\n                }\n              }\n              flashBridge.parentNode.removeChild(flashBridge);\n              if (htmlBridge.parentNode) {\n                htmlBridge.parentNode.removeChild(htmlBridge);\n              }\n            } else {\n              setTimeout(removeSwfFromIE, 10);\n            }\n          })();\n        } else {\n          flashBridge.parentNode.removeChild(flashBridge);\n          if (htmlBridge.parentNode) {\n            htmlBridge.parentNode.removeChild(htmlBridge);\n          }\n        }\n      }\n      _flashState.ready = null;\n      _flashState.bridge = null;\n      _flashState.deactivated = null;\n    }\n    ZeroClipboard.clearData();\n  };\n  ZeroClipboard.activate = function(element) {\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n    }\n    _currentElement = element;\n    _addClass(element, _globalConfig.hoverClass);\n    _reposition();\n    var newTitle = _globalConfig.title || element.getAttribute(\"title\");\n    if (newTitle) {\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.setAttribute(\"title\", newTitle);\n      }\n    }\n    var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n    _setHandCursor(useHandCursor);\n  };\n  ZeroClipboard.deactivate = function() {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.removeAttribute(\"title\");\n      htmlBridge.style.left = \"0px\";\n      htmlBridge.style.top = \"-9999px\";\n      _setSize(1, 1);\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      _currentElement = null;\n    }\n  };\n  ZeroClipboard.state = function() {\n    return {\n      browser: _pick(window.navigator, [ \"userAgent\", \"platform\", \"appName\" ]),\n      flash: _omit(_flashState, [ \"bridge\" ]),\n      zeroclipboard: {\n        version: ZeroClipboard.version,\n        config: ZeroClipboard.config()\n      }\n    };\n  };\n  ZeroClipboard.setData = function(format, data) {\n    var dataObj;\n    if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n      dataObj = format;\n      ZeroClipboard.clearData();\n    } else if (typeof format === \"string\" && format) {\n      dataObj = {};\n      dataObj[format] = data;\n    } else {\n      return;\n    }\n    for (var dataFormat in dataObj) {\n      if (dataFormat && dataObj.hasOwnProperty(dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n        _clipData[dataFormat] = dataObj[dataFormat];\n      }\n    }\n  };\n  ZeroClipboard.clearData = function(format) {\n    if (typeof format === \"undefined\") {\n      _deleteOwnProperties(_clipData);\n      _clipDataFormatMap = null;\n    } else if (typeof format === \"string\" && _clipData.hasOwnProperty(format)) {\n      delete _clipData[format];\n    }\n  };\n  var _bridge = function() {\n    var flashBridge, len;\n    var container = document.getElementById(\"global-zeroclipboard-html-bridge\");\n    if (!container) {\n      var allowScriptAccess = _determineScriptAccess(window.location.host, _globalConfig);\n      var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n      var flashvars = _vars(_globalConfig);\n      var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n      container = _createHtmlBridge();\n      var divToBeReplaced = document.createElement(\"div\");\n      container.appendChild(divToBeReplaced);\n      document.body.appendChild(container);\n      var tmpDiv = document.createElement(\"div\");\n      var oldIE = _flashState.pluginType === \"activex\";\n      tmpDiv.innerHTML = '<object id=\"global-zeroclipboard-flash-bridge\" name=\"global-zeroclipboard-flash-bridge\" ' + 'width=\"100%\" height=\"100%\" ' + (oldIE ? 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\"' : 'type=\"application/x-shockwave-flash\" data=\"' + swfUrl + '\"') + \">\" + (oldIE ? '<param name=\"movie\" value=\"' + swfUrl + '\"/>' : \"\") + '<param name=\"allowScriptAccess\" value=\"' + allowScriptAccess + '\"/>' + '<param name=\"allowNetworking\" value=\"' + allowNetworking + '\"/>' + '<param name=\"menu\" value=\"false\"/>' + '<param name=\"wmode\" value=\"transparent\"/>' + '<param name=\"flashvars\" value=\"' + flashvars + '\"/>' + \"</object>\";\n      flashBridge = tmpDiv.firstChild;\n      tmpDiv = null;\n      flashBridge.ZeroClipboard = ZeroClipboard;\n      container.replaceChild(flashBridge, divToBeReplaced);\n    }\n    if (!flashBridge) {\n      flashBridge = document[\"global-zeroclipboard-flash-bridge\"];\n      if (flashBridge && (len = flashBridge.length)) {\n        flashBridge = flashBridge[len - 1];\n      }\n      if (!flashBridge) {\n        flashBridge = container.firstChild;\n      }\n    }\n    _flashState.bridge = flashBridge || null;\n  };\n  var _createHtmlBridge = function() {\n    var container = document.createElement(\"div\");\n    container.id = \"global-zeroclipboard-html-bridge\";\n    container.className = \"global-zeroclipboard-container\";\n    container.style.position = \"absolute\";\n    container.style.left = \"0px\";\n    container.style.top = \"-9999px\";\n    container.style.width = \"1px\";\n    container.style.height = \"1px\";\n    container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n    return container;\n  };\n  var _getHtmlBridge = function(flashBridge) {\n    var htmlBridge = flashBridge && flashBridge.parentNode;\n    while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n      htmlBridge = htmlBridge.parentNode;\n    }\n    return htmlBridge || null;\n  };\n  var _reposition = function() {\n    if (_currentElement) {\n      var pos = _getDOMObjectPosition(_currentElement, _globalConfig.zIndex);\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.style.top = pos.top + \"px\";\n        htmlBridge.style.left = pos.left + \"px\";\n        htmlBridge.style.width = pos.width + \"px\";\n        htmlBridge.style.height = pos.height + \"px\";\n        htmlBridge.style.zIndex = pos.zIndex + 1;\n      }\n      _setSize(pos.width, pos.height);\n    }\n  };\n  var _setSize = function(width, height) {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.style.width = width + \"px\";\n      htmlBridge.style.height = height + \"px\";\n    }\n  };\n  ZeroClipboard.emit = function(event) {\n    var eventType, eventObj, performCallbackAsync, clients, i, len, eventCopy, returnVal, tmp;\n    if (typeof event === \"string\" && event) {\n      eventType = event;\n    }\n    if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n      eventType = event.type;\n      eventObj = event;\n    }\n    if (!eventType) {\n      return;\n    }\n    event = _createEvent(eventType, eventObj);\n    _preprocessEvent(event);\n    if (event.type === \"ready\" && _flashState.overdue === true) {\n      return ZeroClipboard.emit({\n        type: \"error\",\n        name: \"flash-overdue\"\n      });\n    }\n    performCallbackAsync = !/^(before)?copy$/.test(event.type);\n    if (event.client) {\n      _dispatchClientCallbacks.call(event.client, event, performCallbackAsync);\n    } else {\n      clients = event.target && event.target !== window && _globalConfig.autoActivate === true ? _getAllClientsClippedToElement(event.target) : _getAllClients();\n      for (i = 0, len = clients.length; i < len; i++) {\n        eventCopy = _extend({}, event, {\n          client: clients[i]\n        });\n        _dispatchClientCallbacks.call(clients[i], eventCopy, performCallbackAsync);\n      }\n    }\n    if (event.type === \"copy\") {\n      tmp = _mapClipDataToFlash(_clipData);\n      returnVal = tmp.data;\n      _clipDataFormatMap = tmp.formatMap;\n    }\n    return returnVal;\n  };\n  var _dispatchClientCallbacks = function(event, async) {\n    var handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type];\n    if (handlers && handlers.length) {\n      var i, len, func, context, originalContext = this;\n      for (i = 0, len = handlers.length; i < len; i++) {\n        func = handlers[i];\n        context = originalContext;\n        if (typeof func === \"string\" && typeof window[func] === \"function\") {\n          func = window[func];\n        }\n        if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n          context = func;\n          func = func.handleEvent;\n        }\n        if (typeof func === \"function\") {\n          _dispatchCallback(func, context, [ event ], async);\n        }\n      }\n    }\n    return this;\n  };\n  var _eventMessages = {\n    ready: \"Flash communication is established\",\n    error: {\n      \"flash-disabled\": \"Flash is disabled or not installed\",\n      \"flash-outdated\": \"Flash is too outdated to support ZeroClipboard\",\n      \"flash-unavailable\": \"Flash is unable to communicate bidirectionally with JavaScript\",\n      \"flash-deactivated\": \"Flash is too outdated for your browser and/or is configured as click-to-activate\",\n      \"flash-overdue\": \"Flash communication was established but NOT within the acceptable time limit\"\n    }\n  };\n  var _createEvent = function(eventType, event) {\n    if (!(eventType || event && event.type)) {\n      return;\n    }\n    event = event || {};\n    eventType = (eventType || event.type).toLowerCase();\n    _extend(event, {\n      type: eventType,\n      target: event.target || _currentElement || null,\n      relatedTarget: event.relatedTarget || null,\n      currentTarget: _flashState && _flashState.bridge || null\n    });\n    var msg = _eventMessages[event.type];\n    if (event.type === \"error\" && event.name && msg) {\n      msg = msg[event.name];\n    }\n    if (msg) {\n      event.message = msg;\n    }\n    if (event.type === \"ready\") {\n      _extend(event, {\n        target: null,\n        version: _flashState.version\n      });\n    }\n    if (event.type === \"error\") {\n      event.target = null;\n      if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          version: _flashState.version,\n          minimumVersion: \"11.0.0\"\n        });\n      }\n    }\n    if (event.type === \"copy\") {\n      event.clipboardData = {\n        setData: ZeroClipboard.setData,\n        clearData: ZeroClipboard.clearData\n      };\n    }\n    if (event.type === \"aftercopy\") {\n      event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n    }\n    if (event.target && !event.relatedTarget) {\n      event.relatedTarget = _getRelatedTarget(event.target);\n    }\n    return event;\n  };\n  var _getRelatedTarget = function(targetEl) {\n    var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n    return relatedTargetId ? document.getElementById(relatedTargetId) : null;\n  };\n  var _preprocessEvent = function(event) {\n    var element = event.target || _currentElement;\n    switch (event.type) {\n     case \"error\":\n      if (_inArray(event.name, [ \"flash-disabled\", \"flash-outdated\", \"flash-deactivated\", \"flash-overdue\" ])) {\n        _extend(_flashState, {\n          disabled: event.name === \"flash-disabled\",\n          outdated: event.name === \"flash-outdated\",\n          unavailable: event.name === \"flash-unavailable\",\n          deactivated: event.name === \"flash-deactivated\",\n          overdue: event.name === \"flash-overdue\",\n          ready: false\n        });\n      }\n      break;\n\n     case \"ready\":\n      var wasDeactivated = _flashState.deactivated === true;\n      _extend(_flashState, {\n        disabled: false,\n        outdated: false,\n        unavailable: false,\n        deactivated: false,\n        overdue: wasDeactivated,\n        ready: !wasDeactivated\n      });\n      break;\n\n     case \"copy\":\n      var textContent, htmlContent, targetEl = event.relatedTarget;\n      if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n        if (htmlContent !== textContent) {\n          event.clipboardData.setData(\"text/html\", htmlContent);\n        }\n      } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n      }\n      break;\n\n     case \"aftercopy\":\n      ZeroClipboard.clearData();\n      if (element && element !== _safeActiveElement() && element.focus) {\n        element.focus();\n      }\n      break;\n\n     case \"mouseover\":\n      _addClass(element, _globalConfig.hoverClass);\n      break;\n\n     case \"mouseout\":\n      if (_globalConfig.autoActivate === true) {\n        ZeroClipboard.deactivate();\n      }\n      break;\n\n     case \"mousedown\":\n      _addClass(element, _globalConfig.activeClass);\n      break;\n\n     case \"mouseup\":\n      _removeClass(element, _globalConfig.activeClass);\n      break;\n    }\n  };\n  ZeroClipboard.prototype.on = function(eventName, func) {\n    var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (typeof eventName === \"string\" && eventName) {\n      events = eventName.toLowerCase().split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.on(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].replace(/^on/, \"\");\n        added[eventName] = true;\n        if (!handlers[eventName]) {\n          handlers[eventName] = [];\n        }\n        handlers[eventName].push(func);\n      }\n      if (added.ready && _flashState.ready) {\n        ZeroClipboard.emit({\n          type: \"ready\",\n          client: this\n        });\n      }\n      if (added.error) {\n        var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n        for (i = 0, len = errorTypes.length; i < len; i++) {\n          if (_flashState[errorTypes[i]]) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-\" + errorTypes[i],\n              client: this\n            });\n            break;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.off = function(eventName, func) {\n    var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (arguments.length === 0) {\n      events = _objectKeys(handlers);\n    } else if (typeof eventName === \"string\" && eventName) {\n      events = eventName.split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.off(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].toLowerCase().replace(/^on/, \"\");\n        perEventHandlers = handlers[eventName];\n        if (perEventHandlers && perEventHandlers.length) {\n          if (func) {\n            foundIndex = _inArray(func, perEventHandlers);\n            while (foundIndex !== -1) {\n              perEventHandlers.splice(foundIndex, 1);\n              foundIndex = _inArray(func, perEventHandlers, foundIndex);\n            }\n          } else {\n            handlers[eventName].length = 0;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.handlers = function(eventName) {\n    var prop, copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (handlers) {\n      if (typeof eventName === \"string\" && eventName) {\n        return handlers[eventName] ? handlers[eventName].slice(0) : null;\n      }\n      copy = {};\n      for (prop in handlers) {\n        if (handlers.hasOwnProperty(prop) && handlers[prop]) {\n          copy[prop] = handlers[prop].slice(0);\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.prototype.clip = function(elements) {\n    elements = _prepClip(elements);\n    for (var i = 0; i < elements.length; i++) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        if (!elements[i].zcClippingId) {\n          elements[i].zcClippingId = \"zcClippingId_\" + _elementIdCounter++;\n          _elementMeta[elements[i].zcClippingId] = [ this.id ];\n          if (_globalConfig.autoActivate === true) {\n            _addEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n          }\n        } else if (_inArray(this.id, _elementMeta[elements[i].zcClippingId]) === -1) {\n          _elementMeta[elements[i].zcClippingId].push(this.id);\n        }\n        var clippedElements = _clientMeta[this.id].elements;\n        if (_inArray(elements[i], clippedElements) === -1) {\n          clippedElements.push(elements[i]);\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.unclip = function(elements) {\n    var meta = _clientMeta[this.id];\n    if (!meta) {\n      return this;\n    }\n    var clippedElements = meta.elements;\n    var arrayIndex;\n    if (typeof elements === \"undefined\") {\n      elements = clippedElements.slice(0);\n    } else {\n      elements = _prepClip(elements);\n    }\n    for (var i = elements.length; i--; ) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        arrayIndex = 0;\n        while ((arrayIndex = _inArray(elements[i], clippedElements, arrayIndex)) !== -1) {\n          clippedElements.splice(arrayIndex, 1);\n        }\n        var clientIds = _elementMeta[elements[i].zcClippingId];\n        if (clientIds) {\n          arrayIndex = 0;\n          while ((arrayIndex = _inArray(this.id, clientIds, arrayIndex)) !== -1) {\n            clientIds.splice(arrayIndex, 1);\n          }\n          if (clientIds.length === 0) {\n            if (_globalConfig.autoActivate === true) {\n              _removeEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n            }\n            delete elements[i].zcClippingId;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.elements = function() {\n    var meta = _clientMeta[this.id];\n    return meta && meta.elements ? meta.elements.slice(0) : [];\n  };\n  var _getAllClientsClippedToElement = function(element) {\n    var elementMetaId, clientIds, i, len, client, clients = [];\n    if (element && element.nodeType === 1 && (elementMetaId = element.zcClippingId) && _elementMeta.hasOwnProperty(elementMetaId)) {\n      clientIds = _elementMeta[elementMetaId];\n      if (clientIds && clientIds.length) {\n        for (i = 0, len = clientIds.length; i < len; i++) {\n          client = _clientMeta[clientIds[i]].instance;\n          if (client && client instanceof ZeroClipboard) {\n            clients.push(client);\n          }\n        }\n      }\n    }\n    return clients;\n  };\n  _globalConfig.hoverClass = \"zeroclipboard-is-hover\";\n  _globalConfig.activeClass = \"zeroclipboard-is-active\";\n  if (typeof define === \"function\" && define.amd) {\n    define(function() {\n      return ZeroClipboard;\n    });\n  } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n    module.exports = ZeroClipboard;\n  } else {\n    window.ZeroClipboard = ZeroClipboard;\n  }\n})(function() {\n  return this;\n}());"
  },
  {
    "path": "web/console/public/UEditor/ueditor.all.min.bak.js",
    "content": "/*!\n * ueditor\n * version: 2.0.0\n * build: Wed Jan 17 2024 13:54:21 GMT+0800 (中国标准时间)\n */!function(){function getListener(a,b,c){var d;return b=b.toLowerCase(),(d=a.__allListeners||c&&(a.__allListeners={}))&&(d[b]||c&&(d[b]=[]))}function getDomNode(a,b,c,d,e,f){var g,h=d&&a[b];for(!h&&(h=a[c]);!h&&(g=(g||a).parentNode);){if(\"BODY\"==g.tagName||f&&!f(g))return null;h=g[c]}return h&&e&&!e(h)?getDomNode(h,b,c,!1,e):h}UEDITOR_CONFIG=window.UEDITOR_CONFIG||{};var baidu=window.baidu||{};window.baidu=baidu,window.UE=baidu.editor={plugins:{},commands:{},instants:{},I18N:{},_customizeUI:{},version:\"1.5.0\"};var dom=UE.dom={},browser=UE.browser=function(){var a=navigator.userAgent.toLowerCase(),b=window.opera,c={ie:/(msie\\s|trident.*rv:)([\\w.]+)/i.test(a),opera:!!b&&b.version,webkit:a.indexOf(\" applewebkit/\")>-1,mac:a.indexOf(\"macintosh\")>-1,quirks:\"BackCompat\"==document.compatMode};c.gecko=\"Gecko\"==navigator.product&&!c.webkit&&!c.opera&&!c.ie;var d=0;if(c.ie){var e=a.match(/(?:msie\\s([\\w.]+))/),f=a.match(/(?:trident.*rv:([\\w.]+))/);d=e&&f&&e[1]&&f[1]?Math.max(1*e[1],1*f[1]):e&&e[1]?1*e[1]:f&&f[1]?1*f[1]:0,c.ie11Compat=11==document.documentMode,c.ie9Compat=9==document.documentMode,c.ie8=!!document.documentMode,c.ie8Compat=8==document.documentMode,c.ie7Compat=7==d&&!document.documentMode||7==document.documentMode,c.ie6Compat=d<7||c.quirks,c.ie9above=d>8,c.ie9below=d<9,c.ie11above=d>10,c.ie11below=d<11}if(c.gecko){var g=a.match(/rv:([\\d\\.]+)/);g&&(g=g[1].split(\".\"),d=1e4*g[0]+100*(g[1]||0)+1*(g[2]||0))}return/chrome\\/(\\d+\\.\\d)/i.test(a)&&(c.chrome=+RegExp.$1),/(\\d+\\.\\d)?(?:\\.\\d)?\\s+safari\\/?(\\d+\\.\\d+)?/i.test(a)&&!/chrome/i.test(a)&&(c.safari=+(RegExp.$1||RegExp.$2)),c.opera&&(d=parseFloat(b.version())),c.webkit&&(d=parseFloat(a.match(/ applewebkit\\/(\\d+)/)[1])),c.version=d,c.isCompatible=!c.mobile&&(c.ie&&d>=6||c.gecko&&d>=10801||c.opera&&d>=9.5||c.air&&d>=1||c.webkit&&d>=522||!1),c}(),ie=browser.ie,webkit=browser.webkit,gecko=browser.gecko,opera=browser.opera,utils=UE.utils={each:function(a,b,c){if(null!=a)if(a.length===+a.length){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a)===!1)return!1}else for(var f in a)if(a.hasOwnProperty(f)&&b.call(c,a[f],f,a)===!1)return!1},makeInstance:function(a){var b=new Function;return b.prototype=a,a=new b,b.prototype=null,a},extend:function(a,b,c){if(b)for(var d in b)c&&a.hasOwnProperty(d)||(a[d]=b[d]);return a},extend2:function(a){for(var b=arguments,c=1;c<b.length;c++){var d=b[c];for(var e in d)a.hasOwnProperty(e)||(a[e]=d[e])}return a},inherits:function(a,b){var c=a.prototype,d=utils.makeInstance(b.prototype);return utils.extend(d,c,!0),a.prototype=d,d.constructor=a},bind:function(a,b){return function(){return a.apply(b,arguments)}},defer:function(a,b,c){var d;return function(){c&&clearTimeout(d),d=setTimeout(a,b)}},indexOf:function(a,b,c){var d=-1;return c=this.isNumber(c)?c:0,this.each(a,function(a,e){if(e>=c&&a===b)return d=e,!1}),d},removeItem:function(a,b){for(var c=0,d=a.length;c<d;c++)a[c]===b&&(a.splice(c,1),c--)},trim:function(a){return a.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g,\"\")},listToMap:function(a){if(!a)return{};a=utils.isArray(a)?a:a.split(\",\");for(var b,c=0,d={};b=a[c++];)d[b.toUpperCase()]=d[b]=1;return d},unhtml:function(a,b){return a?a.replace(b||/[&<\">'](?:(amp|lt|ldquo|rdquo|quot|gt|#39|nbsp|#\\d+);)?/g,function(a,b){return b?a:{\"<\":\"&lt;\",\"&\":\"&amp;\",'\"':\"&quot;\",\"“\":\"&ldquo;\",\"”\":\"&rdquo;\",\">\":\"&gt;\",\"'\":\"&#39;\"}[a]}):\"\"},html:function(a){return a?a.replace(/&((g|l|quo|ldquo|rdquo)t|amp|#39|nbsp);/g,function(a){return{\"&lt;\":\"<\",\"&amp;\":\"&\",\"&quot;\":'\"',\"&ldquo;\":\"“\",\"&rdquo;\":\"”\",\"&gt;\":\">\",\"&#39;\":\"'\",\"&nbsp;\":\" \"}[a]}):\"\"},cssStyleToDomStyle:function(){var a=document.createElement(\"div\").style,b={\"float\":void 0!=a.cssFloat?\"cssFloat\":void 0!=a.styleFloat?\"styleFloat\":\"float\"};return function(a){return b[a]||(b[a]=a.toLowerCase().replace(/-./g,function(a){return a.charAt(1).toUpperCase()}))}}(),loadFile:function(){function a(a,c){try{for(var d,e=0;d=b[e++];)if(d.doc===a&&d.url==(c.src||c.href))return d}catch(f){return null}}var b=[];return function(c,d,e){var f=a(c,d);if(f)return void(f.ready?e&&e():f.funs.push(e));if(b.push({doc:c,url:d.src||d.href,funs:[e]}),!c.body){var g=[];for(var h in d)\"tag\"!=h&&g.push(h+'=\"'+d[h]+'\"');return void c.write(\"<\"+d.tag+\" \"+g.join(\" \")+\" ></\"+d.tag+\">\")}if(!d.id||!c.getElementById(d.id)){var i=c.createElement(d.tag);delete d.tag;for(var h in d)i.setAttribute(h,d[h]);i.onload=i.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){if(f=a(c,d),f.funs.length>0){f.ready=1;for(var b;b=f.funs.pop();)b()}i.onload=i.onreadystatechange=null}},i.onerror=function(){throw Error(\"The load \"+(d.href||d.src)+\" fails,check the url settings of file ueditor.config.js \")},c.getElementsByTagName(\"head\")[0].appendChild(i)}}}(),isEmptyObject:function(a){if(null==a)return!0;if(this.isArray(a)||this.isString(a))return 0===a.length;for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},fixColor:function(a,b){if(/color/i.test(a)&&/rgba?/.test(b)){var c=b.split(\",\");if(c.length>3)return\"\";b=\"#\";for(var d,e=0;d=c[e++];)d=parseInt(d.replace(/[^\\d]/gi,\"\"),10).toString(16),b+=1==d.length?\"0\"+d:d;b=b.toUpperCase()}return b},optCss:function(a){function b(a,b){if(!a)return\"\";var c=a.top,d=a.bottom,e=a.left,f=a.right,g=\"\";if(c&&e&&d&&f)g+=\";\"+b+\":\"+(c==d&&d==e&&e==f?c:c==d&&e==f?c+\" \"+e:e==f?c+\" \"+e+\" \"+d:c+\" \"+f+\" \"+d+\" \"+e)+\";\";else for(var h in a)g+=\";\"+b+\"-\"+h+\":\"+a[h]+\";\";return g}var c,d;return a=a.replace(/(padding|margin|border)\\-([^:]+):([^;]+);?/gi,function(a,b,e,f){if(1==f.split(\" \").length)switch(b){case\"padding\":return!c&&(c={}),c[e]=f,\"\";case\"margin\":return!d&&(d={}),d[e]=f,\"\";case\"border\":return\"initial\"==f?\"\":a}return a}),a+=b(c,\"padding\")+b(d,\"margin\"),a.replace(/^[ \\n\\r\\t;]*|[ \\n\\r\\t]*$/,\"\").replace(/;([ \\n\\r\\t]+)|\\1;/g,\";\").replace(/(&((l|g)t|quot|#39))?;{2,}/g,function(a,b){return b?b+\";;\":\";\"})},clone:function(a,b){var c;b=b||{};for(var d in a)a.hasOwnProperty(d)&&(c=a[d],\"object\"==typeof c?(b[d]=utils.isArray(c)?[]:{},utils.clone(a[d],b[d])):b[d]=c);return b},transUnitToPx:function(a){if(!/(pt|cm)/.test(a))return a;var b;switch(a.replace(/([\\d.]+)(\\w+)/,function(c,d,e){a=d,b=e}),b){case\"cm\":a=25*parseFloat(a);break;case\"pt\":a=Math.round(96*parseFloat(a)/72)}return a+(a?\"px\":\"\")},domReady:function(){function a(a){a.isReady=!0;for(var c;c=b.pop();c());}var b=[];return function(c,d){d=d||window;var e=d.document;c&&b.push(c),\"complete\"===e.readyState?a(e):(e.isReady&&a(e),browser.ie&&11!=browser.version?(!function(){if(!e.isReady){try{e.documentElement.doScroll(\"left\")}catch(b){return void setTimeout(arguments.callee,0)}a(e)}}(),d.attachEvent(\"onload\",function(){a(e)})):(e.addEventListener(\"DOMContentLoaded\",function(){e.removeEventListener(\"DOMContentLoaded\",arguments.callee,!1),a(e)},!1),d.addEventListener(\"load\",function(){a(e)},!1)))}}(),cssRule:browser.ie&&11!=browser.version?function(a,b,c){var d,e;if(void 0===b||b&&b.nodeType&&9==b.nodeType){if(c=b&&b.nodeType&&9==b.nodeType?b:c||document,d=c.indexList||(c.indexList={}),e=d[a],void 0!==e)return c.styleSheets[e].cssText}else{if(c=c||document,d=c.indexList||(c.indexList={}),e=d[a],\"\"===b)return void 0!==e&&(c.styleSheets[e].cssText=\"\",delete d[a],!0);void 0!==e?sheetStyle=c.styleSheets[e]:(sheetStyle=c.createStyleSheet(\"\",e=c.styleSheets.length),d[a]=e),sheetStyle.cssText=b}}:function(a,b,c){var d;return void 0===b||b&&b.nodeType&&9==b.nodeType?(c=b&&b.nodeType&&9==b.nodeType?b:c||document,d=c.getElementById(a),d?d.innerHTML:void 0):(c=c||document,d=c.getElementById(a),\"\"===b?!!d&&(d.parentNode.removeChild(d),!0):void(d?d.innerHTML=b:(d=c.createElement(\"style\"),d.id=a,d.innerHTML=b,c.getElementsByTagName(\"head\")[0].appendChild(d))))},sort:function(a,b){b=b||function(a,b){return a.localeCompare(b)};for(var c=0,d=a.length;c<d;c++)for(var e=c,f=a.length;e<f;e++)if(b(a[c],a[e])>0){var g=a[c];a[c]=a[e],a[e]=g}return a},serializeParam:function(a){var b=[];for(var c in a)if(\"method\"!=c&&\"timeout\"!=c&&\"async\"!=c)if(\"function\"!=(typeof a[c]).toLowerCase()&&\"object\"!=(typeof a[c]).toLowerCase())b.push(encodeURIComponent(c)+\"=\"+encodeURIComponent(a[c]));else if(utils.isArray(a[c]))for(var d=0;d<a[c].length;d++)b.push(encodeURIComponent(c)+\"[]=\"+encodeURIComponent(a[c][d]));return b.join(\"&\")},formatUrl:function(a){var b=a.replace(/&&/g,\"&\");return b=b.replace(/\\?&/g,\"?\"),b=b.replace(/&$/g,\"\"),b=b.replace(/&#/g,\"#\"),b=b.replace(/&+/g,\"&\")},isCrossDomainUrl:function(a){var b=document.createElement(\"a\");return b.href=a,browser.ie&&(b.href=b.href),!(b.protocol==location.protocol&&b.hostname==location.hostname&&(b.port==location.port||\"80\"==b.port&&\"\"==location.port||\"\"==b.port&&\"80\"==location.port))},clearEmptyAttrs:function(a){for(var b in a)\"\"===a[b]&&delete a[b];return a},str2json:function(a){return utils.isString(a)?window.JSON?JSON.parse(a):new Function(\"return \"+utils.trim(a||\"\"))():null},json2str:function(){function a(a){return/[\"\\\\\\x00-\\x1f]/.test(a)&&(a=a.replace(/[\"\\\\\\x00-\\x1f]/g,function(a){var b=e[a];return b?b:(b=a.charCodeAt(),\"\\\\u00\"+Math.floor(b/16).toString(16)+(b%16).toString(16))})),'\"'+a+'\"'}function b(a){var b,c,d,e=[\"[\"],f=a.length;for(c=0;c<f;c++)switch(d=a[c],typeof d){case\"undefined\":case\"function\":case\"unknown\":break;default:b&&e.push(\",\"),e.push(utils.json2str(d)),b=1}return e.push(\"]\"),e.join(\"\")}function c(a){return a<10?\"0\"+a:a}function d(a){return'\"'+a.getFullYear()+\"-\"+c(a.getMonth()+1)+\"-\"+c(a.getDate())+\"T\"+c(a.getHours())+\":\"+c(a.getMinutes())+\":\"+c(a.getSeconds())+'\"'}if(window.JSON)return JSON.stringify;var e={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"};return function(c){switch(typeof c){case\"undefined\":return\"undefined\";case\"number\":return isFinite(c)?String(c):\"null\";case\"string\":return a(c);case\"boolean\":return String(c);default:if(null===c)return\"null\";if(utils.isArray(c))return b(c);if(utils.isDate(c))return d(c);var e,f,g=[\"{\"],h=utils.json2str;for(var i in c)if(Object.prototype.hasOwnProperty.call(c,i))switch(f=c[i],typeof f){case\"undefined\":case\"unknown\":case\"function\":break;default:e&&g.push(\",\"),e=1,g.push(h(i)+\":\"+h(f))}return g.push(\"}\"),g.join(\"\")}}}()};utils.each([\"String\",\"Function\",\"Array\",\"Number\",\"RegExp\",\"Object\",\"Date\"],function(a){UE.utils[\"is\"+a]=function(b){return Object.prototype.toString.apply(b)==\"[object \"+a+\"]\"}});var EventBase=UE.EventBase=function(){};EventBase.prototype={addListener:function(a,b){a=utils.trim(a).split(/\\s+/);for(var c,d=0;c=a[d++];)getListener(this,c,!0).push(b)},on:function(a,b){return this.addListener(a,b)},off:function(a,b){return this.removeListener(a,b)},trigger:function(){return this.fireEvent.apply(this,arguments)},removeListener:function(a,b){a=utils.trim(a).split(/\\s+/);for(var c,d=0;c=a[d++];)utils.removeItem(getListener(this,c)||[],b)},fireEvent:function(){var a=arguments[0];a=utils.trim(a).split(\" \");for(var b,c=0;b=a[c++];){var d,e,f,g=getListener(this,b);if(g)for(f=g.length;f--;)if(g[f]){if(e=g[f].apply(this,arguments),e===!0)return e;void 0!==e&&(d=e)}(e=this[\"on\"+b.toLowerCase()])&&(d=e.apply(this,arguments))}return d}};var dtd=dom.dtd=function(){function a(a){for(var b in a)a[b.toUpperCase()]=a[b];return a}var b=utils.extend2,c=a({isindex:1,fieldset:1}),d=a({input:1,button:1,select:1,textarea:1,label:1}),e=b(a({a:1}),d),f=b({iframe:1},e),g=a({hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1}),h=a({ins:1,del:1,script:1,style:1}),i=b(a({mark:1,b:1,acronym:1,bdo:1,\"var\":1,\"#\":1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1}),h),j=b(a({sub:1,img:1,embed:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1}),i),k=b(a({p:1}),j),l=b(a({iframe:1}),j,d),m=a({img:1,embed:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,\"#\":1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,\"var\":1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1}),n=b(a({a:0}),l),o=a({tr:1}),p=a({\"#\":1}),q=b(a({param:1}),m),r=b(a({form:1}),c,f,g,k),s=a({li:1,ol:1,ul:1}),t=a({style:1,script:1}),u=a({base:1,link:1,meta:1,title:1}),v=b(u,t),w=a({head:1,body:1}),x=a({html:1}),y=a({address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1}),z=a({area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1});return a({$nonBodyContent:b(x,w,u),$block:y,$inline:n,$inlineWithA:b(a({a:1}),n),$body:b(a({script:1,style:1}),y),$cdata:a({script:1,style:1}),$empty:z,$nonChild:a({iframe:1,textarea:1}),$listItem:a({dd:1,dt:1,li:1}),$list:a({ul:1,ol:1,dl:1}),$isNotEmpty:a({table:1,ul:1,ol:1,dl:1,iframe:1,area:1,base:1,col:1,hr:1,img:1,embed:1,input:1,textarea:1,link:1,meta:1,param:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1}),$removeEmpty:a({a:1,abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,\"var\":1}),$removeEmptyBlock:a({p:1,div:1}),$tableContent:a({caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1,table:1}),$notTransContent:a({pre:1,script:1,style:1,textarea:1}),html:w,head:v,style:p,script:p,body:r,base:{},link:{},meta:{},title:p,col:{},tr:a({td:1,th:1}),img:{},embed:{},colgroup:a({thead:1,col:1,tbody:1,tr:1,tfoot:1}),noscript:r,td:r,br:{},th:r,center:r,kbd:n,button:b(k,g),basefont:{},h5:n,h4:n,samp:n,h6:n,ol:s,h1:n,h3:n,option:p,h2:n,form:b(c,f,g,k),select:a({optgroup:1,option:1}),font:n,ins:n,menu:s,abbr:n,label:n,table:a({thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1}),code:n,tfoot:o,cite:n,li:r,input:{},iframe:r,strong:n,textarea:p,noframes:r,big:n,small:n,span:a({\"#\":1,br:1,b:1,strong:1,u:1,i:1,em:1,sub:1,sup:1,strike:1,span:1}),hr:n,dt:n,sub:n,optgroup:a({option:1}),param:{},bdo:n,\"var\":n,div:r,object:q,sup:n,dd:r,strike:n,area:{},dir:s,map:b(a({area:1,form:1,p:1}),c,h,g),applet:q,dl:a({dt:1,dd:1}),del:n,isindex:{},fieldset:b(a({legend:1}),m),thead:o,ul:s,acronym:n,b:n,a:b(a({a:1}),l),blockquote:b(a({td:1,tr:1,tbody:1,li:1}),r),caption:n,i:n,u:n,tbody:o,s:n,address:b(f,k),tt:n,legend:n,q:n,pre:b(i,e),p:b(a({a:1}),n),em:n,dfn:n,mark:n})}(),attrFix=ie&&browser.version<9?{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\"}:{tabindex:\"tabIndex\",readonly:\"readOnly\"},styleBlock=utils.listToMap([\"-webkit-box\",\"-moz-box\",\"block\",\"list-item\",\"table\",\"table-row-group\",\"table-header-group\",\"table-footer-group\",\"table-row\",\"table-column-group\",\"table-column\",\"table-cell\",\"table-caption\"]),domUtils=dom.domUtils={NODE_ELEMENT:1,NODE_DOCUMENT:9,NODE_TEXT:3,NODE_COMMENT:8,NODE_DOCUMENT_FRAGMENT:11,POSITION_IDENTICAL:0,POSITION_DISCONNECTED:1,POSITION_FOLLOWING:2,POSITION_PRECEDING:4,POSITION_IS_CONTAINED:8,POSITION_CONTAINS:16,fillChar:ie&&\"6\"==browser.version?\"\\ufeff\":\"​\",keys:{8:1,46:1,16:1,17:1,18:1,37:1,38:1,39:1,40:1,13:1},getPosition:function(a,b){if(a===b)return 0;var c,d=[a],e=[b];for(c=a;c=c.parentNode;){if(c===b)return 10;d.push(c)}for(c=b;c=c.parentNode;){if(c===a)return 20;e.push(c)}if(d.reverse(),e.reverse(),d[0]!==e[0])return 1;for(var f=-1;f++,d[f]===e[f];);for(a=d[f],b=e[f];a=a.nextSibling;)if(a===b)return 4;return 2},getNodeIndex:function(a,b){for(var c=a,d=0;c=c.previousSibling;)b&&3==c.nodeType?c.nodeType!=c.nextSibling.nodeType&&d++:d++;return d},inDoc:function(a,b){return 10==domUtils.getPosition(a,b)},findParent:function(a,b,c){if(a&&!domUtils.isBody(a))for(a=c?a:a.parentNode;a;){if(!b||b(a)||domUtils.isBody(a))return b&&!b(a)&&domUtils.isBody(a)?null:a;a=a.parentNode}return null},findParentByTagName:function(a,b,c,d){return b=utils.listToMap(utils.isArray(b)?b:[b]),domUtils.findParent(a,function(a){return b[a.tagName]&&!(d&&d(a))},c)},findParents:function(a,b,c,d){for(var e=b&&(c&&c(a)||!c)?[a]:[];a=domUtils.findParent(a,c);)e.push(a);return d?e:e.reverse()},insertAfter:function(a,b){return a.nextSibling?a.parentNode.insertBefore(b,a.nextSibling):a.parentNode.appendChild(b)},remove:function(a,b){var c,d=a.parentNode;if(d){if(b&&a.hasChildNodes())for(;c=a.firstChild;)d.insertBefore(c,a);d.removeChild(a)}return a},getNextDomNode:function(a,b,c,d){return getDomNode(a,\"firstChild\",\"nextSibling\",b,c,d)},getPreDomNode:function(a,b,c,d){return getDomNode(a,\"lastChild\",\"previousSibling\",b,c,d)},isBookmarkNode:function(a){return 1==a.nodeType&&a.id&&/^_baidu_bookmark_/i.test(a.id)},getWindow:function(a){var b=a.ownerDocument||a;return b.defaultView||b.parentWindow},getCommonAncestor:function(a,b){if(a===b)return a;for(var c=[a],d=[b],e=a,f=-1;e=e.parentNode;){if(e===b)return e;c.push(e)}for(e=b;e=e.parentNode;){if(e===a)return e;d.push(e)}for(c.reverse(),d.reverse();f++,c[f]===d[f];);return 0==f?null:c[f-1]},clearEmptySibling:function(a,b,c){function d(a,b){for(var c;a&&!domUtils.isBookmarkNode(a)&&(domUtils.isEmptyInlineElement(a)||!new RegExp(\"[^\\t\\n\\r\"+domUtils.fillChar+\"]\").test(a.nodeValue));)c=a[b],domUtils.remove(a),a=c}!b&&d(a.nextSibling,\"nextSibling\"),!c&&d(a.previousSibling,\"previousSibling\")},split:function(a,b){var c=a.ownerDocument;if(browser.ie&&b==a.nodeValue.length){var d=c.createTextNode(\"\");return domUtils.insertAfter(a,d)}var e=a.splitText(b);if(browser.ie8){var f=c.createTextNode(\"\");domUtils.insertAfter(e,f),domUtils.remove(f)}return e},isWhitespace:function(a){return!new RegExp(\"[^ \\t\\n\\r\"+domUtils.fillChar+\"]\").test(a.nodeValue)},getXY:function(a){for(var b=0,c=0;a.offsetParent;)c+=a.offsetTop,b+=a.offsetLeft,a=a.offsetParent;return{x:b,y:c}},on:function(a,b,c){var d=utils.isArray(b)?b:utils.trim(b).split(/\\s+/),e=d.length;if(e)for(;e--;)if(b=d[e],a.addEventListener)a.addEventListener(b,c,!1);else{c._d||(c._d={els:[]});var f=b+c.toString(),g=utils.indexOf(c._d.els,a);c._d[f]&&g!=-1||(g==-1&&c._d.els.push(a),c._d[f]||(c._d[f]=function(a){return c.call(a.srcElement,a||window.event)}),a.attachEvent(\"on\"+b,c._d[f]))}a=null},un:function(a,b,c){var d=utils.isArray(b)?b:utils.trim(b).split(/\\s+/),e=d.length;if(e)for(;e--;)if(b=d[e],a.removeEventListener)a.removeEventListener(b,c,!1);else{var f=b+c.toString();try{a.detachEvent(\"on\"+b,c._d?c._d[f]:c)}catch(g){}if(c._d&&c._d[f]){var h=utils.indexOf(c._d.els,a);h!=-1&&c._d.els.splice(h,1),0==c._d.els.length&&delete c._d[f]}}},isSameElement:function(a,b){if(a.tagName!=b.tagName)return!1;var c=a.attributes,d=b.attributes;if(!ie&&c.length!=d.length)return!1;for(var e,f,g=0,h=0,i=0;e=c[i++];){if(\"style\"==e.nodeName){if(e.specified&&g++,domUtils.isSameStyle(a,b))continue;return!1}if(ie){if(!e.specified)continue;g++,f=d.getNamedItem(e.nodeName)}else f=b.attributes[e.nodeName];if(!f.specified||e.nodeValue!=f.nodeValue)return!1}if(ie){for(i=0;f=d[i++];)f.specified&&h++;if(g!=h)return!1}return!0},isSameStyle:function(a,b){var c=a.style.cssText.replace(/( ?; ?)/g,\";\").replace(/( ?: ?)/g,\":\"),d=b.style.cssText.replace(/( ?; ?)/g,\";\").replace(/( ?: ?)/g,\":\");if(browser.opera){if(c=a.style,d=b.style,c.length!=d.length)return!1;for(var e in c)if(!/^(\\d+|csstext)$/i.test(e)&&c[e]!=d[e])return!1;return!0}if(!c||!d)return c==d;if(c=c.split(\";\"),d=d.split(\";\"),c.length!=d.length)return!1;for(var f,g=0;f=c[g++];)if(utils.indexOf(d,f)==-1)return!1;return!0},isBlockElm:function(a){return 1==a.nodeType&&(dtd.$block[a.tagName]||styleBlock[domUtils.getComputedStyle(a,\"display\")])&&!dtd.$nonChild[a.tagName]},isBody:function(a){return a&&1==a.nodeType&&\"body\"==a.tagName.toLowerCase()},breakParent:function(a,b){var c,d,e,f=a,g=a;do{for(f=f.parentNode,d?(c=f.cloneNode(!1),c.appendChild(d),d=c,c=f.cloneNode(!1),c.appendChild(e),e=c):(d=f.cloneNode(!1),e=d.cloneNode(!1));c=g.previousSibling;)d.insertBefore(c,d.firstChild);for(;c=g.nextSibling;)e.appendChild(c);g=f}while(b!==f);return c=b.parentNode,c.insertBefore(d,b),c.insertBefore(e,b),c.insertBefore(a,e),domUtils.remove(b),a},isEmptyInlineElement:function(a){if(1!=a.nodeType||!dtd.$removeEmpty[a.tagName])return 0;for(a=a.firstChild;a;){if(domUtils.isBookmarkNode(a))return 0;if(1==a.nodeType&&!domUtils.isEmptyInlineElement(a)||3==a.nodeType&&!domUtils.isWhitespace(a))return 0;a=a.nextSibling}return 1},trimWhiteTextNode:function(a){function b(b){for(var c;(c=a[b])&&3==c.nodeType&&domUtils.isWhitespace(c);)a.removeChild(c)}b(\"firstChild\"),b(\"lastChild\")},mergeChild:function(a,b,c){for(var d,e=domUtils.getElementsByTagName(a,a.tagName.toLowerCase()),f=0;d=e[f++];)if(d.parentNode&&!domUtils.isBookmarkNode(d))if(\"span\"!=d.tagName.toLowerCase())domUtils.isSameElement(a,d)&&domUtils.remove(d,!0);else{if(a===d.parentNode&&(domUtils.trimWhiteTextNode(a),1==a.childNodes.length)){a.style.cssText=d.style.cssText+\";\"+a.style.cssText,domUtils.remove(d,!0);continue}if(d.style.cssText=a.style.cssText+\";\"+d.style.cssText,c){var g=c.style;if(g){g=g.split(\";\");for(var h,i=0;h=g[i++];)d.style[utils.cssStyleToDomStyle(h.split(\":\")[0])]=h.split(\":\")[1]}}domUtils.isSameStyle(d,a)&&domUtils.remove(d,!0)}},getElementsByTagName:function(a,b,c){if(c&&utils.isString(c)){var d=c;c=function(a){return domUtils.hasClass(a,d)}}b=utils.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var e,f=[],g=0;e=b[g++];)for(var h,i=a.getElementsByTagName(e),j=0;h=i[j++];)c&&!c(h)||f.push(h);return f},mergeToParent:function(a){for(var b=a.parentNode;b&&dtd.$removeEmpty[b.tagName];){if(b.tagName==a.tagName||\"A\"==b.tagName){if(domUtils.trimWhiteTextNode(b),\"SPAN\"==b.tagName&&!domUtils.isSameStyle(b,a)||\"A\"==b.tagName&&\"SPAN\"==a.tagName){if(b.childNodes.length>1||b!==a.parentNode){a.style.cssText=b.style.cssText+\";\"+a.style.cssText,b=b.parentNode;continue}b.style.cssText+=\";\"+a.style.cssText,\"A\"==b.tagName&&(b.style.textDecoration=\"underline\")}if(\"A\"!=b.tagName){b===a.parentNode&&domUtils.remove(a,!0);break}}b=b.parentNode}},mergeSibling:function(a,b,c){function d(a,b,c){var d;if((d=c[a])&&!domUtils.isBookmarkNode(d)&&1==d.nodeType&&domUtils.isSameElement(c,d)){for(;d.firstChild;)\"firstChild\"==b?c.insertBefore(d.lastChild,c.firstChild):c.appendChild(d.firstChild);domUtils.remove(d)}}!b&&d(\"previousSibling\",\"firstChild\",a),!c&&d(\"nextSibling\",\"lastChild\",a)},unSelectable:ie&&browser.ie9below||browser.opera?function(a){a.onselectstart=function(){return!1},a.onclick=a.onkeyup=a.onkeydown=function(){return!1},a.unselectable=\"on\",a.setAttribute(\"unselectable\",\"on\");for(var b,c=0;b=a.all[c++];)switch(b.tagName.toLowerCase()){case\"iframe\":case\"textarea\":case\"input\":case\"select\":break;default:b.unselectable=\"on\",a.setAttribute(\"unselectable\",\"on\")}}:function(a){a.style.MozUserSelect=a.style.webkitUserSelect=a.style.msUserSelect=a.style.KhtmlUserSelect=\"none\"},removeAttributes:function(a,b){b=utils.isArray(b)?b:utils.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0;c=b[d++];){switch(c=attrFix[c]||c){case\"className\":a[c]=\"\";break;case\"style\":a.style.cssText=\"\";var e=a.getAttributeNode(\"style\");!browser.ie&&e&&a.removeAttributeNode(e)}a.removeAttribute(c)}},createElement:function(a,b,c){return domUtils.setAttributes(a.createElement(b),c)},setAttributes:function(a,b){for(var c in b)if(b.hasOwnProperty(c)){var d=b[c];switch(c){case\"class\":a.className=d;break;case\"style\":a.style.cssText=a.style.cssText+\";\"+d;break;case\"innerHTML\":a[c]=d;break;case\"value\":a.value=d;break;default:a.setAttribute(attrFix[c]||c,d)}}return a},getComputedStyle:function(a,b){var c=\"width height top left\";if(c.indexOf(b)>-1)return a[\"offset\"+b.replace(/^\\w/,function(a){return a.toUpperCase()})]+\"px\";if(3==a.nodeType&&(a=a.parentNode),browser.ie&&browser.version<9&&\"font-size\"==b&&!a.style.fontSize&&!dtd.$empty[a.tagName]&&!dtd.$nonChild[a.tagName]){var d=a.ownerDocument.createElement(\"span\");d.style.cssText=\"padding:0;border:0;font-family:simsun;\",d.innerHTML=\".\",a.appendChild(d);var e=d.offsetHeight;return a.removeChild(d),d=null,e+\"px\"}try{var f=domUtils.getStyle(a,b)||(window.getComputedStyle?domUtils.getWindow(a).getComputedStyle(a,\"\").getPropertyValue(b):(a.currentStyle||a.style)[utils.cssStyleToDomStyle(b)])}catch(g){return\"\"}return utils.transUnitToPx(utils.fixColor(b,f))},removeClasses:function(a,b){b=utils.isArray(b)?b:utils.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)e=e.replace(new RegExp(\"\\\\b\"+c+\"\\\\b\"),\"\");e=utils.trim(e).replace(/[ ]{2,}/g,\" \"),e?a.className=e:domUtils.removeAttributes(a,[\"class\"])},addClass:function(a,b){if(a){b=utils.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)new RegExp(\"\\\\b\"+c+\"\\\\b\").test(e)||(e+=\" \"+c);a.className=utils.trim(e)}},hasClass:function(a,b){if(utils.isRegExp(b))return b.test(a.className);b=utils.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)if(!new RegExp(\"\\\\b\"+c+\"\\\\b\",\"i\").test(e))return!1;return d-1==b.length},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},removeStyle:function(a,b){browser.ie?(\"color\"==b&&(b=\"(^|;)\"+b),a.style.cssText=a.style.cssText.replace(new RegExp(b+\"[^:]*:[^;]+;?\",\"ig\"),\"\")):a.style.removeProperty?a.style.removeProperty(b):a.style.removeAttribute(utils.cssStyleToDomStyle(b)),a.style.cssText||domUtils.removeAttributes(a,[\"style\"])},getStyle:function(a,b){var c=a.style[utils.cssStyleToDomStyle(b)];return utils.fixColor(b,c)},setStyle:function(a,b,c){a.style[utils.cssStyleToDomStyle(b)]=c,utils.trim(a.style.cssText)||this.removeAttributes(a,\"style\")},setStyles:function(a,b){for(var c in b)b.hasOwnProperty(c)&&domUtils.setStyle(a,c,b[c])},removeDirtyAttr:function(a){for(var b,c=0,d=a.getElementsByTagName(\"*\");b=d[c++];)b.removeAttribute(\"_moz_dirty\");a.removeAttribute(\"_moz_dirty\")},getChildCount:function(a,b){var c=0,d=a.firstChild;for(b=b||function(){return 1};d;)b(d)&&c++,d=d.nextSibling;return c},isEmptyNode:function(a){return!a.firstChild||0==domUtils.getChildCount(a,function(a){return!domUtils.isBr(a)&&!domUtils.isBookmarkNode(a)&&!domUtils.isWhitespace(a)})},clearSelectedArr:function(a){for(var b;b=a.pop();)domUtils.removeAttributes(b,[\"class\"])},scrollToView:function(a,b,c){var d=function(){var a=b.document,c=\"CSS1Compat\"==a.compatMode;return{width:(c?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(c?a.documentElement.clientHeight:a.body.clientHeight)||0}},e=function(a){if(\"pageXOffset\"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};var b=a.document;return{x:b.documentElement.scrollLeft||b.body.scrollLeft||0,y:b.documentElement.scrollTop||b.body.scrollTop||0}},f=d().height,g=f*-1+c;g+=a.offsetHeight||0;var h=domUtils.getXY(a);g+=h.y;var i=e(b).y;(g>i||g<i-f)&&b.scrollTo(0,g+(g<0?-20:20))},isBr:function(a){return 1==a.nodeType&&\"BR\"==a.tagName},isFillChar:function(a,b){if(3!=a.nodeType)return!1;var c=a.nodeValue;return b?new RegExp(\"^\"+domUtils.fillChar).test(c):!c.replace(new RegExp(domUtils.fillChar,\"g\"),\"\").length},isStartInblock:function(a){var b,c=a.cloneRange(),d=0,e=c.startContainer;if(1==e.nodeType&&e.childNodes[c.startOffset]){e=e.childNodes[c.startOffset];for(var f=e.previousSibling;f&&domUtils.isFillChar(f);)e=f,f=f.previousSibling}for(this.isFillChar(e,!0)&&1==c.startOffset&&(c.setStartBefore(e),e=c.startContainer);e&&domUtils.isFillChar(e);)b=e,e=e.previousSibling;for(b&&(c.setStartBefore(b),e=c.startContainer),1==e.nodeType&&domUtils.isEmptyNode(e)&&1==c.startOffset&&c.setStart(e,0).collapse(!0);!c.startOffset;){if(e=c.startContainer,domUtils.isBlockElm(e)||domUtils.isBody(e)){d=1;break}var g,f=c.startContainer.previousSibling;if(f){for(;f&&domUtils.isFillChar(f);)g=f,f=f.previousSibling;g?c.setStartBefore(g):c.setStartBefore(c.startContainer)}else c.setStartBefore(c.startContainer)}return d&&!domUtils.isBody(c.startContainer)?1:0},isEmptyBlock:function(a,b){if(1!=a.nodeType)return 0;if(b=b||new RegExp(\"[  \\t\\r\\n\"+domUtils.fillChar+\"]\",\"g\"),a[browser.ie?\"innerText\":\"textContent\"].replace(b,\"\").length>0)return 0;for(var c in dtd.$isNotEmpty)if(a.getElementsByTagName(c).length)return 0;return 1},setViewportOffset:function(a,b){var c=0|parseInt(a.style.left),d=0|parseInt(a.style.top),e=a.getBoundingClientRect(),f=b.left-e.left,g=b.top-e.top;f&&(a.style.left=c+f+\"px\"),g&&(a.style.top=d+g+\"px\")},fillNode:function(a,b){var c=browser.ie?a.createTextNode(domUtils.fillChar):a.createElement(\"br\");b.innerHTML=\"\",b.appendChild(c)},moveChild:function(a,b,c){for(;a.firstChild;)c&&b.firstChild?b.insertBefore(a.lastChild,b.firstChild):b.appendChild(a.firstChild)},hasNoAttributes:function(a){return browser.ie?/^<\\w+\\s*?>/.test(a.outerHTML):0==a.attributes.length},isCustomeNode:function(a){return 1==a.nodeType&&a.getAttribute(\"_ue_custom_node_\")},isTagNode:function(a,b){return 1==a.nodeType&&new RegExp(\"\\\\b\"+a.tagName+\"\\\\b\",\"i\").test(b)},filterNodeList:function(a,b,c){var d=[];if(!utils.isFunction(b)){var e=b;b=function(a){return utils.indexOf(utils.isArray(e)?e:e.split(\" \"),a.tagName.toLowerCase())!=-1}}return utils.each(a,function(a){b(a)&&d.push(a)}),0==d.length?null:1!=d.length&&c?d:d[0]},isInNodeEndBoundary:function(a,b){var c=a.startContainer;if(3==c.nodeType&&a.startOffset!=c.nodeValue.length)return 0;if(1==c.nodeType&&a.startOffset!=c.childNodes.length)return 0;for(;c!==b;){if(c.nextSibling)return 0;c=c.parentNode}return 1},isBoundaryNode:function(a,b){for(var c;!domUtils.isBody(a);)if(c=a,a=a.parentNode,c!==a[b])return!1;return!0},fillHtml:browser.ie11below?\"&nbsp;\":\"<br/>\"},fillCharReg=new RegExp(domUtils.fillChar,\"g\");!function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer===a.endContainer&&a.startOffset==a.endOffset}function b(a){return!a.collapsed&&1==a.startContainer.nodeType&&a.startContainer===a.endContainer&&a.endOffset-a.startOffset==1}function c(b,c,d,e){return 1==c.nodeType&&(dtd.$empty[c.tagName]||dtd.$nonChild[c.tagName])&&(d=domUtils.getNodeIndex(c)+(b?0:1),c=c.parentNode),b?(e.startContainer=c,e.startOffset=d,e.endContainer||e.collapse(!0)):(e.endContainer=c,e.endOffset=d,e.startContainer||e.collapse(!1)),a(e),e}function d(a,b){var c,d,e=a.startContainer,f=a.endContainer,g=a.startOffset,h=a.endOffset,i=a.document,j=i.createDocumentFragment();if(1==e.nodeType&&(e=e.childNodes[g]||(c=e.appendChild(i.createTextNode(\"\")))),1==f.nodeType&&(f=f.childNodes[h]||(d=f.appendChild(i.createTextNode(\"\")))),e===f&&3==e.nodeType)return j.appendChild(i.createTextNode(e.substringData(g,h-g))),b&&(e.deleteData(g,h-g),a.collapse(!0)),j;for(var k,l,m=j,n=domUtils.findParents(e,!0),o=domUtils.findParents(f,!0),p=0;n[p]==o[p];)p++;for(var q,r=p;q=n[r];r++){for(k=q.nextSibling,q==e?c||(3==a.startContainer.nodeType?(m.appendChild(i.createTextNode(e.nodeValue.slice(g))),b&&e.deleteData(g,e.nodeValue.length-g)):m.appendChild(b?e:e.cloneNode(!0))):(l=q.cloneNode(!1),m.appendChild(l));k&&k!==f&&k!==o[r];)q=k.nextSibling,m.appendChild(b?k:k.cloneNode(!0)),k=q;m=l}m=j,n[p]||(m.appendChild(n[p-1].cloneNode(!1)),m=m.firstChild);for(var s,r=p;s=o[r];r++){if(k=s.previousSibling,s==f?d||3!=a.endContainer.nodeType||(m.appendChild(i.createTextNode(f.substringData(0,h))),b&&f.deleteData(0,h)):(l=s.cloneNode(!1),m.appendChild(l)),r!=p||!n[p])for(;k&&k!==e;)s=k.previousSibling,m.insertBefore(b?k:k.cloneNode(!0),m.firstChild),k=s;m=l}return b&&a.setStartBefore(o[p]?n[p]?o[p]:n[p-1]:o[p-1]).collapse(!0),c&&domUtils.remove(c),d&&domUtils.remove(d),j}function e(a,b){try{if(g&&domUtils.inDoc(g,a))if(g.nodeValue.replace(fillCharReg,\"\").length)g.nodeValue=g.nodeValue.replace(fillCharReg,\"\");else{var c=g.parentNode;for(domUtils.remove(g);c&&domUtils.isEmptyInlineElement(c)&&(browser.safari?!(domUtils.getPosition(c,b)&domUtils.POSITION_CONTAINS):!c.contains(b));)g=c.parentNode,domUtils.remove(c),c=g}}catch(d){}}function f(a,b){var c;for(a=a[b];a&&domUtils.isFillChar(a);)c=a[b],\ndomUtils.remove(a),a=c}var g,h=0,i=domUtils.fillChar,j=dom.Range=function(a){var b=this;b.startContainer=b.startOffset=b.endContainer=b.endOffset=null,b.document=a,b.collapsed=!0};j.prototype={cloneContents:function(){return this.collapsed?null:d(this,0)},deleteContents:function(){var a;return this.collapsed||d(this,1),browser.webkit&&(a=this.startContainer,3!=a.nodeType||a.nodeValue.length||(this.setStartBefore(a).collapse(!0),domUtils.remove(a))),this},extractContents:function(){return this.collapsed?null:d(this,2)},setStart:function(a,b){return c(!0,a,b,this)},setEnd:function(a,b){return c(!1,a,b,this)},setStartAfter:function(a){return this.setStart(a.parentNode,domUtils.getNodeIndex(a)+1)},setStartBefore:function(a){return this.setStart(a.parentNode,domUtils.getNodeIndex(a))},setEndAfter:function(a){return this.setEnd(a.parentNode,domUtils.getNodeIndex(a)+1)},setEndBefore:function(a){return this.setEnd(a.parentNode,domUtils.getNodeIndex(a))},setStartAtFirst:function(a){return this.setStart(a,0)},setStartAtLast:function(a){return this.setStart(a,3==a.nodeType?a.nodeValue.length:a.childNodes.length)},setEndAtFirst:function(a){return this.setEnd(a,0)},setEndAtLast:function(a){return this.setEnd(a,3==a.nodeType?a.nodeValue.length:a.childNodes.length)},selectNode:function(a){return this.setStartBefore(a).setEndAfter(a)},selectNodeContents:function(a){return this.setStart(a,0).setEndAtLast(a)},cloneRange:function(){var a=this;return new j(a.document).setStart(a.startContainer,a.startOffset).setEnd(a.endContainer,a.endOffset)},collapse:function(a){var b=this;return a?(b.endContainer=b.startContainer,b.endOffset=b.startOffset):(b.startContainer=b.endContainer,b.startOffset=b.endOffset),b.collapsed=!0,b},shrinkBoundary:function(a){function b(a){return 1==a.nodeType&&!domUtils.isBookmarkNode(a)&&!dtd.$empty[a.tagName]&&!dtd.$nonChild[a.tagName]}for(var c,d=this,e=d.collapsed;1==d.startContainer.nodeType&&(c=d.startContainer.childNodes[d.startOffset])&&b(c);)d.setStart(c,0);if(e)return d.collapse(!0);if(!a)for(;1==d.endContainer.nodeType&&d.endOffset>0&&(c=d.endContainer.childNodes[d.endOffset-1])&&b(c);)d.setEnd(c,c.childNodes.length);return d},getCommonAncestor:function(a,c){var d=this,e=d.startContainer,f=d.endContainer;return e===f?a&&b(this)&&(e=e.childNodes[d.startOffset],1==e.nodeType)?e:c&&3==e.nodeType?e.parentNode:e:domUtils.getCommonAncestor(e,f)},trimBoundary:function(a){this.txtToElmBoundary();var b=this.startContainer,c=this.startOffset,d=this.collapsed,e=this.endContainer;if(3==b.nodeType){if(0==c)this.setStartBefore(b);else if(c>=b.nodeValue.length)this.setStartAfter(b);else{var f=domUtils.split(b,c);b===e?this.setEnd(f,this.endOffset-c):b.parentNode===e&&(this.endOffset+=1),this.setStartBefore(f)}if(d)return this.collapse(!0)}return a||(c=this.endOffset,e=this.endContainer,3==e.nodeType&&(0==c?this.setEndBefore(e):(c<e.nodeValue.length&&domUtils.split(e,c),this.setEndAfter(e)))),this},txtToElmBoundary:function(a){function b(a,b){var c=a[b+\"Container\"],d=a[b+\"Offset\"];3==c.nodeType&&(d?d>=c.nodeValue.length&&a[\"set\"+b.replace(/(\\w)/,function(a){return a.toUpperCase()})+\"After\"](c):a[\"set\"+b.replace(/(\\w)/,function(a){return a.toUpperCase()})+\"Before\"](c))}return!a&&this.collapsed||(b(this,\"start\"),b(this,\"end\")),this},insertNode:function(a){var b=a,c=1;11==a.nodeType&&(b=a.firstChild,c=a.childNodes.length),this.trimBoundary(!0);var d=this.startContainer,e=this.startOffset,f=d.childNodes[e];return f?d.insertBefore(a,f):d.appendChild(a),b.parentNode===this.endContainer&&(this.endOffset=this.endOffset+c),this.setStartBefore(b)},setCursor:function(a,b){return this.collapse(!a).select(b)},createBookmark:function(a,b){var c,d=this.document.createElement(\"span\");return d.style.cssText=\"display:none;line-height:0px;\",d.appendChild(this.document.createTextNode(\"‍\")),d.id=\"_baidu_bookmark_start_\"+(b?\"\":h++),this.collapsed||(c=d.cloneNode(!0),c.id=\"_baidu_bookmark_end_\"+(b?\"\":h++)),this.insertNode(d),c&&this.collapse().insertNode(c).setEndBefore(c),this.setStartAfter(d),{start:a?d.id:d,end:c?a?c.id:c:null,id:a}},moveToBookmark:function(a){var b=a.id?this.document.getElementById(a.start):a.start,c=a.end&&a.id?this.document.getElementById(a.end):a.end;return this.setStartBefore(b),domUtils.remove(b),c?(this.setEndBefore(c),domUtils.remove(c)):this.collapse(!0),this},enlarge:function(a,b){var c,d,e=domUtils.isBody,f=this.document.createTextNode(\"\");if(a){for(d=this.startContainer,1==d.nodeType?d.childNodes[this.startOffset]?c=d=d.childNodes[this.startOffset]:(d.appendChild(f),c=d=f):c=d;;){if(domUtils.isBlockElm(d)){for(d=c;(c=d.previousSibling)&&!domUtils.isBlockElm(c);)d=c;this.setStartBefore(d);break}c=d,d=d.parentNode}for(d=this.endContainer,1==d.nodeType?((c=d.childNodes[this.endOffset])?d.insertBefore(f,c):d.appendChild(f),c=d=f):c=d;;){if(domUtils.isBlockElm(d)){for(d=c;(c=d.nextSibling)&&!domUtils.isBlockElm(c);)d=c;this.setEndAfter(d);break}c=d,d=d.parentNode}f.parentNode===this.endContainer&&this.endOffset--,domUtils.remove(f)}if(!this.collapsed){for(;!(0!=this.startOffset||b&&b(this.startContainer)||e(this.startContainer));)this.setStartBefore(this.startContainer);for(;!(this.endOffset!=(1==this.endContainer.nodeType?this.endContainer.childNodes.length:this.endContainer.nodeValue.length)||b&&b(this.endContainer)||e(this.endContainer));)this.setEndAfter(this.endContainer)}return this},enlargeToBlockElm:function(a){for(;!domUtils.isBlockElm(this.startContainer);)this.setStartBefore(this.startContainer);if(!a)for(;!domUtils.isBlockElm(this.endContainer);)this.setEndAfter(this.endContainer);return this},adjustmentBoundary:function(){if(!this.collapsed){for(;!domUtils.isBody(this.startContainer)&&this.startOffset==this.startContainer[3==this.startContainer.nodeType?\"nodeValue\":\"childNodes\"].length&&this.startContainer[3==this.startContainer.nodeType?\"nodeValue\":\"childNodes\"].length;)this.setStartAfter(this.startContainer);for(;!domUtils.isBody(this.endContainer)&&!this.endOffset&&this.endContainer[3==this.endContainer.nodeType?\"nodeValue\":\"childNodes\"].length;)this.setEndBefore(this.endContainer)}return this},applyInlineStyle:function(a,b,c){if(this.collapsed)return this;this.trimBoundary().enlarge(!1,function(a){return 1==a.nodeType&&domUtils.isBlockElm(a)}).adjustmentBoundary();for(var d,e,f=this.createBookmark(),g=f.end,h=function(a){return 1==a.nodeType?\"br\"!=a.tagName.toLowerCase():!domUtils.isWhitespace(a)},i=domUtils.getNextDomNode(f.start,!1,h),j=this.cloneRange();i&&domUtils.getPosition(i,g)&domUtils.POSITION_PRECEDING;)if(3==i.nodeType||dtd[a][i.tagName]){for(j.setStartBefore(i),d=i;d&&(3==d.nodeType||dtd[a][d.tagName])&&d!==g;)e=d,d=domUtils.getNextDomNode(d,1==d.nodeType,null,function(b){return dtd[a][b.tagName]});var k,l=j.setEndAfter(e).extractContents();if(c&&c.length>0){var m,n;n=m=c[0].cloneNode(!1);for(var o,p=1;o=c[p++];)m.appendChild(o.cloneNode(!1)),m=m.firstChild;k=m}else k=j.document.createElement(a);b&&domUtils.setAttributes(k,b),k.appendChild(l),\"SPAN\"==k.tagName&&b&&b.style&&utils.each(k.getElementsByTagName(\"span\"),function(a){a.style.cssText=a.style.cssText+\";\"+b.style}),j.insertNode(c?n:k);var q;if(\"span\"==a&&b.style&&/text\\-decoration/.test(b.style)&&(q=domUtils.findParentByTagName(k,\"a\",!0))?(domUtils.setAttributes(q,b),domUtils.remove(k,!0),k=q):(domUtils.mergeSibling(k),domUtils.clearEmptySibling(k)),domUtils.mergeChild(k,b),i=domUtils.getNextDomNode(k,!1,h),domUtils.mergeToParent(k),d===g)break}else i=domUtils.getNextDomNode(i,!0,h);return this.moveToBookmark(f)},removeInlineStyle:function(a){if(this.collapsed)return this;a=utils.isArray(a)?a:[a],this.shrinkBoundary().adjustmentBoundary();for(var b=this.startContainer,c=this.endContainer;;){if(1==b.nodeType){if(utils.indexOf(a,b.tagName.toLowerCase())>-1)break;if(\"body\"==b.tagName.toLowerCase()){b=null;break}}b=b.parentNode}for(;;){if(1==c.nodeType){if(utils.indexOf(a,c.tagName.toLowerCase())>-1)break;if(\"body\"==c.tagName.toLowerCase()){c=null;break}}c=c.parentNode}var d,e,f=this.createBookmark();b&&(e=this.cloneRange().setEndBefore(f.start).setStartBefore(b),d=e.extractContents(),e.insertNode(d),domUtils.clearEmptySibling(b,!0),b.parentNode.insertBefore(f.start,b)),c&&(e=this.cloneRange().setStartAfter(f.end).setEndAfter(c),d=e.extractContents(),e.insertNode(d),domUtils.clearEmptySibling(c,!1,!0),c.parentNode.insertBefore(f.end,c.nextSibling));for(var g,h=domUtils.getNextDomNode(f.start,!1,function(a){return 1==a.nodeType});h&&h!==f.end;)g=domUtils.getNextDomNode(h,!0,function(a){return 1==a.nodeType}),utils.indexOf(a,h.tagName.toLowerCase())>-1&&domUtils.remove(h,!0),h=g;return this.moveToBookmark(f)},getClosedNode:function(){var a;if(!this.collapsed){var c=this.cloneRange().adjustmentBoundary().shrinkBoundary();if(b(c)){var d=c.startContainer.childNodes[c.startOffset];d&&1==d.nodeType&&(dtd.$empty[d.tagName]||dtd.$nonChild[d.tagName])&&(a=d)}}return a},select:browser.ie?function(a,b){var c;this.collapsed||this.shrinkBoundary();var d=this.getClosedNode();if(d&&!b){try{c=this.document.body.createControlRange(),c.addElement(d),c.select()}catch(h){}return this}var j,k=this.createBookmark(),l=k.start;if(c=this.document.body.createTextRange(),c.moveToElementText(l),c.moveStart(\"character\",1),this.collapsed){if(!a&&3!=this.startContainer.nodeType){var m=this.document.createTextNode(i),n=this.document.createElement(\"span\");n.appendChild(this.document.createTextNode(i)),l.parentNode.insertBefore(n,l),l.parentNode.insertBefore(m,l),e(this.document,m),g=m,f(n,\"previousSibling\"),f(l,\"nextSibling\"),c.moveStart(\"character\",-1),c.collapse(!0)}}else{var o=this.document.body.createTextRange();j=k.end,o.moveToElementText(j),c.setEndPoint(\"EndToEnd\",o)}this.moveToBookmark(k),n&&domUtils.remove(n);try{c.select()}catch(h){}return this}:function(a){function b(a){function b(b,c,d){3==b.nodeType&&b.nodeValue.length<c&&(a[d+\"Offset\"]=b.nodeValue.length)}b(a.startContainer,a.startOffset,\"start\"),b(a.endContainer,a.endOffset,\"end\")}var c,d=domUtils.getWindow(this.document),h=d.getSelection();if(browser.gecko?this.document.body.focus():d.focus(),h){if(h.removeAllRanges(),this.collapsed&&!a){var j=this.startContainer,k=j;1==j.nodeType&&(k=j.childNodes[this.startOffset]),3==j.nodeType&&this.startOffset||(k?k.previousSibling&&3==k.previousSibling.nodeType:j.lastChild&&3==j.lastChild.nodeType)||(c=this.document.createTextNode(i),this.insertNode(c),e(this.document,c),f(c,\"previousSibling\"),f(c,\"nextSibling\"),g=c,this.setStart(c,browser.webkit?1:0).collapse(!0))}var l=this.document.createRange();if(this.collapsed&&browser.opera&&1==this.startContainer.nodeType){var k=this.startContainer.childNodes[this.startOffset];if(k){for(;k&&domUtils.isBlockElm(k)&&1==k.nodeType&&k.childNodes[0];)k=k.childNodes[0];k&&this.setStartBefore(k).collapse(!0)}else k=this.startContainer.lastChild,k&&domUtils.isBr(k)&&this.setStartBefore(k).collapse(!0)}b(this),l.setStart(this.startContainer,this.startOffset),l.setEnd(this.endContainer,this.endOffset),h.addRange(l)}return this},scrollToView:function(a,b){a=a?window:domUtils.getWindow(this.document);var c=this,d=c.document.createElement(\"span\");return d.innerHTML=\"&nbsp;\",c.cloneRange().insertNode(d),domUtils.scrollToView(d,a,b),domUtils.remove(d),c},inFillChar:function(){var a=this.startContainer;return!(!this.collapsed||3!=a.nodeType||a.nodeValue.replace(new RegExp(\"^\"+domUtils.fillChar),\"\").length+1!=a.nodeValue.length)},createAddress:function(a,b){function c(a){for(var c,d=a?e.startContainer:e.endContainer,f=domUtils.findParents(d,!0,function(a){return!domUtils.isBody(a)}),g=[],h=0;c=f[h++];)g.push(domUtils.getNodeIndex(c,b));var i=0;if(b)if(3==d.nodeType){for(var j=d.previousSibling;j&&3==j.nodeType;)i+=j.nodeValue.replace(fillCharReg,\"\").length,j=j.previousSibling;i+=a?e.startOffset:e.endOffset}else if(d=d.childNodes[a?e.startOffset:e.endOffset])i=domUtils.getNodeIndex(d,b);else{d=a?e.startContainer:e.endContainer;for(var k=d.firstChild;k;)if(domUtils.isFillChar(k))k=k.nextSibling;else if(i++,3==k.nodeType)for(;k&&3==k.nodeType;)k=k.nextSibling;else k=k.nextSibling}else i=a?domUtils.isFillChar(d)?0:e.startOffset:e.endOffset;return i<0&&(i=0),g.push(i),g}var d={},e=this;return d.startAddress=c(!0),a||(d.endAddress=e.collapsed?[].concat(d.startAddress):c()),d},moveToAddress:function(a,b){function c(a,b){for(var c,e,f,g=d.document.body,h=0,i=a.length;h<i;h++)if(f=a[h],c=g,g=g.childNodes[f],!g){e=f;break}b?g?d.setStartBefore(g):d.setStart(c,e):g?d.setEndBefore(g):d.setEnd(c,e)}var d=this;return c(a.startAddress,!0),!b&&a.endAddress&&c(a.endAddress),d},equals:function(a){for(var b in this)if(this.hasOwnProperty(b)&&this[b]!==a[b])return!1;return!0},traversal:function(a,b){if(this.collapsed)return this;for(var c=this.createBookmark(),d=c.end,e=domUtils.getNextDomNode(c.start,!1,b);e&&e!==d&&domUtils.getPosition(e,d)&domUtils.POSITION_PRECEDING;){var f=domUtils.getNextDomNode(e,!1,b);a(e),e=f}return this.moveToBookmark(c)}}}(),function(){function a(a,b){var c=domUtils.getNodeIndex;a=a.duplicate(),a.collapse(b);var d=a.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e,f,g=d.children,h=a.duplicate(),i=0,j=g.length-1,k=-1;i<=j;){k=Math.floor((i+j)/2),e=g[k],h.moveToElementText(e);var l=h.compareEndPoints(\"StartToStart\",a);if(l>0)j=k-1;else{if(!(l<0))return{container:d,offset:c(e)};i=k+1}}if(k==-1){if(h.moveToElementText(d),h.setEndPoint(\"StartToStart\",a),f=h.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length,g=d.childNodes,!f)return e=g[g.length-1],{container:e,offset:e.nodeValue.length};for(var m=g.length;f>0;)f-=g[--m].nodeValue.length;return{container:g[m],offset:-f}}if(h.collapse(l>0),h.setEndPoint(l>0?\"StartToStart\":\"EndToStart\",a),f=h.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length,!f)return dtd.$empty[e.tagName]||dtd.$nonChild[e.tagName]?{container:d,offset:c(e)+(l>0?0:1)}:{container:e,offset:l>0?0:e.childNodes.length};for(;f>0;)try{var n=e;e=e[l>0?\"previousSibling\":\"nextSibling\"],f-=e.nodeValue.length}catch(o){return{container:d,offset:c(n)}}return{container:e,offset:l>0?-f:e.nodeValue.length+f}}function b(b,c){if(b.item)c.selectNode(b.item(0));else{var d=a(b,!0);c.setStart(d.container,d.offset),0!=b.compareEndPoints(\"StartToEnd\",b)&&(d=a(b,!1),c.setEnd(d.container,d.offset))}return c}function c(a){var b;try{b=a.getNative().createRange()}catch(c){return null}var d=b.item?b.item(0):b.parentElement();return(d.ownerDocument||d)===a.document?b:null}var d=dom.Selection=function(a){var b,d=this;d.document=a,browser.ie9below&&(b=domUtils.getWindow(a).frameElement,domUtils.on(b,\"beforedeactivate\",function(){d._bakIERange=d.getIERange()}),domUtils.on(b,\"activate\",function(){try{!c(d)&&d._bakIERange&&d._bakIERange.select()}catch(a){}d._bakIERange=null})),b=a=null};d.prototype={rangeInBody:function(a,b){var c=browser.ie9below||b?a.item?a.item():a.parentElement():a.startContainer;return c===this.document.body||domUtils.inDoc(c,this.document)},getNative:function(){var a=this.document;try{return a?browser.ie9below?a.selection:domUtils.getWindow(a).getSelection():null}catch(b){return null}},getIERange:function(){var a=c(this);return!a&&this._bakIERange?this._bakIERange:a},cache:function(){this.clear(),this._cachedRange=this.getRange(),this._cachedStartElement=this.getStart(),this._cachedStartElementPath=this.getStartElementPath()},getStartElementPath:function(){if(this._cachedStartElementPath)return this._cachedStartElementPath;var a=this.getStart();return a?domUtils.findParents(a,!0,null,!0):[]},clear:function(){this._cachedStartElementPath=this._cachedRange=this._cachedStartElement=null},isFocus:function(){try{if(browser.ie9below){var a=c(this);return!(!a||!this.rangeInBody(a))}return!!this.getNative().rangeCount}catch(b){return!1}},getRange:function(){function a(a){for(var b=c.document.body.firstChild,d=a.collapsed;b&&b.firstChild;)a.setStart(b,0),b=b.firstChild;a.startContainer||a.setStart(c.document.body,0),d&&a.collapse(!0)}var c=this;if(null!=c._cachedRange)return this._cachedRange;var d=new baidu.editor.dom.Range(c.document);if(browser.ie9below){var e=c.getIERange();if(e)try{b(e,d)}catch(f){a(d)}else a(d)}else{var g=c.getNative();if(g&&g.rangeCount){var h=g.getRangeAt(0),i=g.getRangeAt(g.rangeCount-1);d.setStart(h.startContainer,h.startOffset).setEnd(i.endContainer,i.endOffset),d.collapsed&&domUtils.isBody(d.startContainer)&&!d.startOffset&&a(d)}else{if(this._bakRange&&domUtils.inDoc(this._bakRange.startContainer,this.document))return this._bakRange;a(d)}}return this._bakRange=d},getStart:function(){if(this._cachedStartElement)return this._cachedStartElement;var a,b,c,d,e=browser.ie9below?this.getIERange():this.getRange();if(browser.ie9below){if(!e)return this.document.body.firstChild;if(e.item)return e.item(0);for(a=e.duplicate(),a.text.length>0&&a.moveStart(\"character\",1),a.collapse(1),b=a.parentElement(),d=c=e.parentElement();c=c.parentNode;)if(c==b){b=d;break}}else if(e.shrinkBoundary(),b=e.startContainer,1==b.nodeType&&b.hasChildNodes()&&(b=b.childNodes[Math.min(b.childNodes.length-1,e.startOffset)]),3==b.nodeType)return b.parentNode;return b},getText:function(){var a,b;return this.isFocus()&&(a=this.getNative())?(b=browser.ie9below?a.createRange():a.getRangeAt(0),browser.ie9below?b.text:b.toString()):\"\"},clearRange:function(){this.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]()}}}(),function(){function a(a,b){var c;if(b.options.textarea)if(utils.isString(b.options.textarea)){for(var d,e=0,f=domUtils.getElementsByTagName(a,\"textarea\");d=f[e++];)if(d.id==\"ueditor_textarea_\"+b.options.textarea){c=d;break}}else c=b.textarea;c||(a.appendChild(c=domUtils.createElement(document,\"textarea\",{name:b.options.textarea,id:\"ueditor_textarea_\"+b.options.textarea,style:\"display:none\"})),b.textarea=c),!c.getAttribute(\"name\")&&c.setAttribute(\"name\",b.options.textarea),c.value=b.hasContents()?b.options.allHtmlEnabled?b.getAllHtml():b.getContent(null,null,!0):\"\"}function b(a){for(var b in a)return b}function c(a){a.langIsReady=!0,a.fireEvent(\"langReady\")}var d,e=0,f=UE.Editor=function(a){var d=this;d.uid=e++,EventBase.call(d),d.commands={},d.options=utils.extend(utils.clone(a||{}),UEDITOR_CONFIG,!0),d.shortcutkeys={},d.inputRules=[],d.outputRules=[],d.setOpt(f.defaultOptions(d)),d.loadServerConfig(),utils.isEmptyObject(UE.I18N)?utils.loadFile(document,{src:d.options.langPath+d.options.lang+\"/\"+d.options.lang+\".js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){UE.plugin.load(d),c(d)}):(d.options.lang=b(UE.I18N),UE.plugin.load(d),c(d)),UE.instants[\"ueditorInstant\"+d.uid]=d};f.prototype={registerCommand:function(a,b){this.commands[a]=b},ready:function(a){var b=this;a&&(b.isReady?a.apply(b):b.addListener(\"ready\",a))},setOpt:function(a,b){var c={};utils.isString(a)?c[a]=b:c=a,utils.extend(this.options,c,!0)},getOpt:function(a){return this.options[a]},destroy:function(){var a=this;a.fireEvent(\"destroy\");var b=a.container.parentNode,c=a.textarea;c?c.style.display=\"\":(c=document.createElement(\"textarea\"),b.parentNode.insertBefore(c,b)),c.style.width=a.iframe.offsetWidth+\"px\",c.style.height=a.iframe.offsetHeight+\"px\",c.value=a.getContent(),c.id=a.key,b.innerHTML=\"\",domUtils.remove(b);var d=a.key;for(var e in a)a.hasOwnProperty(e)&&delete this[e];UE.delEditor(d)},render:function(a){var b=this,c=b.options,d=function(b){return parseInt(domUtils.getComputedStyle(a,b))};if(utils.isString(a)&&(a=document.getElementById(a)),a){c.initialFrameWidth?c.minFrameWidth=c.initialFrameWidth:c.minFrameWidth=c.initialFrameWidth=a.offsetWidth,c.initialFrameHeight?c.minFrameHeight=c.initialFrameHeight:c.initialFrameHeight=c.minFrameHeight=a.offsetHeight,a.style.width=/%$/.test(c.initialFrameWidth)?\"100%\":c.initialFrameWidth-d(\"padding-left\")-d(\"padding-right\")+\"px\",a.style.height=/%$/.test(c.initialFrameHeight)?\"100%\":c.initialFrameHeight-d(\"padding-top\")-d(\"padding-bottom\")+\"px\",a.style.zIndex=c.zIndex;var e=(ie&&browser.version<9?\"\":\"<!DOCTYPE html>\")+\"<html xmlns='http://www.w3.org/1999/xhtml' class='view' ><head><style type='text/css'>.view{padding:0;word-wrap:break-word;cursor:text;height:90%;}\\nbody{margin:8px;font-family:sans-serif;font-size:16px;}p{margin:5px 0;}</style>\"+(c.iframeCssUrl?\"<link rel='stylesheet' type='text/css' href='\"+utils.unhtml(c.iframeCssUrl)+\"'/>\":\"\")+(c.initialStyle?\"<style>\"+c.initialStyle+\"</style>\":\"\")+\"</head><body class='view' ></body><script type='text/javascript' \"+(ie?\"defer='defer'\":\"\")+\" id='_initialScript'>setTimeout(function(){editor = window.parent.UE.instants['ueditorInstant\"+b.uid+\"'];editor._setup(document);},0);var _tmpScript = document.getElementById('_initialScript');_tmpScript.parentNode.removeChild(_tmpScript);</script>\"+(c.iframeJsUrl?\"<script type='text/javascript' src='\"+utils.unhtml(c.iframeJsUrl)+\"'></script>\":\"\")+\"</html>\";a.appendChild(domUtils.createElement(document,\"iframe\",{id:\"ueditor_\"+b.uid,width:\"100%\",height:\"100%\",frameborder:\"0\",src:\"javascript:void(function(){document.open();\"+(c.customDomain&&document.domain!=location.hostname?'document.domain=\"'+document.domain+'\";':\"\")+'document.write(\"'+e+'\");document.close();}())'})),a.style.overflow=\"hidden\",setTimeout(function(){/%$/.test(c.initialFrameWidth)&&(c.minFrameWidth=c.initialFrameWidth=a.offsetWidth),/%$/.test(c.initialFrameHeight)&&(c.minFrameHeight=c.initialFrameHeight=a.offsetHeight,a.style.height=c.initialFrameHeight+\"px\")})}},_setup:function(b){var c=this,d=c.options;ie?(b.body.disabled=!0,b.body.contentEditable=!0,b.body.disabled=!1):b.body.contentEditable=!0,b.body.spellcheck=!1,c.document=b,c.window=b.defaultView||b.parentWindow,c.iframe=c.window.frameElement,c.body=b.body,c.selection=new dom.Selection(b);var e;browser.gecko&&(e=this.selection.getNative())&&e.removeAllRanges(),this._initEvents();for(var f=this.iframe.parentNode;!domUtils.isBody(f);f=f.parentNode)if(\"FORM\"==f.tagName){c.form=f,c.options.autoSyncData?domUtils.on(c.window,\"blur\",function(){a(f,c)}):domUtils.on(f,\"submit\",function(){a(this,c)});break}if(d.initialContent)if(d.autoClearinitialContent){var g=c.execCommand;c.execCommand=function(){return c.fireEvent(\"firstBeforeExecCommand\"),g.apply(c,arguments)},this._setDefaultContent(d.initialContent)}else this.setContent(d.initialContent,!1,!0);domUtils.isEmptyNode(c.body)&&(c.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\"),d.focus&&setTimeout(function(){c.focus(c.options.focusInEnd),!c.options.autoClearinitialContent&&c._selectionChange()},0),c.container||(c.container=this.iframe.parentNode),d.fullscreen&&c.ui&&c.ui.setFullScreen(!0);try{c.document.execCommand(\"2D-position\",!1,!1)}catch(h){}try{c.document.execCommand(\"enableInlineTableEditing\",!1,!1)}catch(h){}try{c.document.execCommand(\"enableObjectResizing\",!1,!1)}catch(h){}c._bindshortcutKeys(),c.isReady=1,c.fireEvent(\"ready\"),d.onready&&d.onready.call(c),browser.ie9below||domUtils.on(c.window,[\"blur\",\"focus\"],function(a){if(\"blur\"==a.type){c._bakRange=c.selection.getRange();try{c._bakNativeRange=c.selection.getNative().getRangeAt(0),c.selection.getNative().removeAllRanges()}catch(a){c._bakNativeRange=null}}else try{c._bakRange&&c._bakRange.select()}catch(a){}}),browser.gecko&&browser.version<=10902&&(c.body.contentEditable=!1,setTimeout(function(){c.body.contentEditable=!0},100),setInterval(function(){c.body.style.height=c.iframe.offsetHeight-20+\"px\"},100)),!d.isShow&&c.setHide(),d.readonly&&c.setDisabled()},sync:function(b){var c=this,d=b?document.getElementById(b):domUtils.findParent(c.iframe.parentNode,function(a){return\"FORM\"==a.tagName},!0);d&&a(d,c)},setHeight:function(a,b){a!==parseInt(this.iframe.parentNode.style.height)&&(this.iframe.parentNode.style.height=a+\"px\"),!b&&(this.options.minFrameHeight=this.options.initialFrameHeight=a),this.body.style.height=a+\"px\",!b&&this.trigger(\"setHeight\")},addshortcutkey:function(a,b){var c={};b?c[a]=b:c=a,utils.extend(this.shortcutkeys,c)},_bindshortcutKeys:function(){var a=this,b=this.shortcutkeys;a.addListener(\"keydown\",function(c,d){var e=d.keyCode||d.which;for(var f in b)for(var g,h=b[f].split(\",\"),i=0;g=h[i++];){g=g.split(\":\");var j=g[0],k=g[1];(/^(ctrl)(\\+shift)?\\+(\\d+)$/.test(j.toLowerCase())||/^(\\d+)$/.test(j))&&((\"ctrl\"==RegExp.$1?d.ctrlKey||d.metaKey:0)&&(\"\"!=RegExp.$2?d[RegExp.$2.slice(1)+\"Key\"]:1)&&e==RegExp.$3||e==RegExp.$1)&&(a.queryCommandState(f,k)!=-1&&a.execCommand(f,k),domUtils.preventDefault(d))}})},getContent:function(a,b,c,d,e){var f=this;if(a&&utils.isFunction(a)&&(b=a,a=\"\"),b?!b():!this.hasContents())return\"\";f.fireEvent(\"beforegetcontent\");var g=UE.htmlparser(f.body.innerHTML,d);return f.filterOutputRule(g),f.fireEvent(\"aftergetcontent\",a,g),g.toHtml(e)},getAllHtml:function(){var a=this,b=[];if(a.fireEvent(\"getAllHtml\",b),browser.ie&&browser.version>8){var c=\"\";utils.each(a.document.styleSheets,function(a){c+=a.href?'<link rel=\"stylesheet\" type=\"text/css\" href=\"'+a.href+'\" />':\"<style>\"+a.cssText+\"</style>\"}),utils.each(a.document.getElementsByTagName(\"script\"),function(a){c+=a.outerHTML})}return\"<html><head>\"+(a.options.charset?'<meta http-equiv=\"Content-Type\" content=\"text/html; charset='+a.options.charset+'\"/>':\"\")+(c||a.document.getElementsByTagName(\"head\")[0].innerHTML)+b.join(\"\\n\")+\"</head><body \"+(ie&&browser.version<9?'class=\"view\"':\"\")+\">\"+a.getContent(null,null,!0)+\"</body></html>\"},getPlainTxt:function(){var a=new RegExp(domUtils.fillChar,\"g\"),b=this.body.innerHTML.replace(/[\\n\\r]/g,\"\");return b=b.replace(/<(p|div)[^>]*>(<br\\/?>|&nbsp;)<\\/\\1>/gi,\"\\n\").replace(/<br\\/?>/gi,\"\\n\").replace(/<[^>/]+>/g,\"\").replace(/(\\n)?<\\/([^>]+)>/g,function(a,b,c){return dtd.$block[c]?\"\\n\":b?b:\"\"}),b.replace(a,\"\").replace(/\\u00a0/g,\" \").replace(/&nbsp;/g,\" \")},getContentTxt:function(){var a=new RegExp(domUtils.fillChar,\"g\");return this.body[browser.ie?\"innerText\":\"textContent\"].replace(a,\"\").replace(/\\u00a0/g,\" \")},setContent:function(b,c,d){function e(a){return\"DIV\"==a.tagName&&a.getAttribute(\"cdata_tag\")}var f=this;f.fireEvent(\"beforesetcontent\",b);var g=UE.htmlparser(b);if(f.filterInputRule(g),b=g.toHtml(),f.body.innerHTML=(c?f.body.innerHTML:\"\")+b,\"p\"==f.options.enterTag){var h,i=this.body.firstChild;if(!i||1==i.nodeType&&(dtd.$cdata[i.tagName]||e(i)||domUtils.isCustomeNode(i))&&i===this.body.lastChild)this.body.innerHTML=\"<p>\"+(browser.ie?\"&nbsp;\":\"<br/>\")+\"</p>\"+this.body.innerHTML;else for(var j=f.document.createElement(\"p\");i;){for(;i&&(3==i.nodeType||1==i.nodeType&&dtd.p[i.tagName]&&!dtd.$cdata[i.tagName]);)h=i.nextSibling,j.appendChild(i),i=h;if(j.firstChild){if(!i){f.body.appendChild(j);break}i.parentNode.insertBefore(j,i),j=f.document.createElement(\"p\")}i=i.nextSibling}}f.fireEvent(\"aftersetcontent\"),f.fireEvent(\"contentchange\"),!d&&f._selectionChange(),f._bakRange=f._bakIERange=f._bakNativeRange=null;var k;browser.gecko&&(k=this.selection.getNative())&&k.removeAllRanges(),f.options.autoSyncData&&f.form&&a(f.form,f)},focus:function(a){try{var b=this,c=b.selection.getRange();if(a){var d=b.body.lastChild;d&&1==d.nodeType&&!dtd.$empty[d.tagName]&&(domUtils.isEmptyBlock(d)?c.setStartAtFirst(d):c.setStartAtLast(d),c.collapse(!0)),c.setCursor(!0)}else{if(!c.collapsed&&domUtils.isBody(c.startContainer)&&0==c.startOffset){var d=b.body.firstChild;d&&1==d.nodeType&&!dtd.$empty[d.tagName]&&c.setStartAtFirst(d).collapse(!0)}c.select(!0)}this.fireEvent(\"focus selectionchange\")}catch(e){}},isFocus:function(){return this.selection.isFocus()},blur:function(){var a=this.selection.getNative();if(a.empty&&browser.ie){var b=document.body.createTextRange();b.moveToElementText(document.body),b.collapse(!0),b.select(),a.empty()}else a.removeAllRanges()},_initEvents:function(){var a=this,b=a.document,c=a.window;a._proxyDomEvent=utils.bind(a._proxyDomEvent,a),domUtils.on(b,[\"click\",\"contextmenu\",\"mousedown\",\"keydown\",\"keyup\",\"keypress\",\"mouseup\",\"mouseover\",\"mouseout\",\"selectstart\"],a._proxyDomEvent),domUtils.on(c,[\"focus\",\"blur\"],a._proxyDomEvent),domUtils.on(a.body,\"drop\",function(b){browser.gecko&&b.stopPropagation&&b.stopPropagation(),a.fireEvent(\"contentchange\")}),domUtils.on(b,[\"mouseup\",\"keydown\"],function(b){\"keydown\"==b.type&&(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)||2!=b.button&&a._selectionChange(250,b)})},_proxyDomEvent:function(a){return this.fireEvent(\"before\"+a.type.replace(/^on/,\"\").toLowerCase())!==!1&&(this.fireEvent(a.type.replace(/^on/,\"\"),a)!==!1&&this.fireEvent(\"after\"+a.type.replace(/^on/,\"\").toLowerCase()))},_selectionChange:function(a,b){var c,e,f=this,g=!1;if(browser.ie&&browser.version<9&&b&&\"mouseup\"==b.type){var h=this.selection.getRange();h.collapsed||(g=!0,c=b.clientX,e=b.clientY)}clearTimeout(d),d=setTimeout(function(){if(f.selection&&f.selection.getNative()){var a;if(g&&\"None\"==f.selection.getNative().type){a=f.document.body.createTextRange();try{a.moveToPoint(c,e)}catch(d){a=null}}var h;a&&(h=f.selection.getIERange,f.selection.getIERange=function(){return a}),f.selection.cache(),h&&(f.selection.getIERange=h),f.selection._cachedRange&&f.selection._cachedStartElement&&(f.fireEvent(\"beforeselectionchange\"),f.fireEvent(\"selectionchange\",!!b),f.fireEvent(\"afterselectionchange\"),f.selection.clear())}},a||50)},_callCmdFn:function(a,b){var c,d,e=b[0].toLowerCase();return c=this.commands[e]||UE.commands[e],d=c&&c[a],c&&d||\"queryCommandState\"!=a?d?d.apply(this,b):void 0:0},execCommand:function(a){a=a.toLowerCase();var b,c=this,d=c.commands[a]||UE.commands[a];return d&&d.execCommand?(d.notNeedUndo||c.__hasEnterExecCommand?(b=this._callCmdFn(\"execCommand\",arguments),!c.__hasEnterExecCommand&&!d.ignoreContentChange&&!c._ignoreContentChange&&c.fireEvent(\"contentchange\")):(c.__hasEnterExecCommand=!0,c.queryCommandState.apply(c,arguments)!=-1&&(c.fireEvent(\"saveScene\"),c.fireEvent.apply(c,[\"beforeexeccommand\",a].concat(arguments)),b=this._callCmdFn(\"execCommand\",arguments),c.fireEvent.apply(c,[\"afterexeccommand\",a].concat(arguments)),c.fireEvent(\"saveScene\")),c.__hasEnterExecCommand=!1),!c.__hasEnterExecCommand&&!d.ignoreContentChange&&!c._ignoreContentChange&&c._selectionChange(),b):null},queryCommandState:function(a){return this._callCmdFn(\"queryCommandState\",arguments)},queryCommandValue:function(a){return this._callCmdFn(\"queryCommandValue\",arguments)},hasContents:function(a){if(a)for(var b,c=0;b=a[c++];)if(this.document.getElementsByTagName(b).length>0)return!0;if(!domUtils.isEmptyBlock(this.body))return!0;for(a=[\"div\"],c=0;b=a[c++];)for(var d,e=domUtils.getElementsByTagName(this.document,b),f=0;d=e[f++];)if(domUtils.isCustomeNode(d))return!0;return!1},reset:function(){this.fireEvent(\"reset\")},setEnabled:function(){var a,b=this;if(\"false\"==b.body.contentEditable){b.body.contentEditable=!0,a=b.selection.getRange();try{a.moveToBookmark(b.lastBk),delete b.lastBk}catch(c){a.setStartAtFirst(b.body).collapse(!0)}a.select(!0),b.bkqueryCommandState&&(b.queryCommandState=b.bkqueryCommandState,delete b.bkqueryCommandState),b.bkqueryCommandValue&&(b.queryCommandValue=b.bkqueryCommandValue,delete b.bkqueryCommandValue),b.fireEvent(\"selectionchange\")}},enable:function(){return this.setEnabled()},setDisabled:function(a){var b=this;a=a?utils.isArray(a)?a:[a]:[],\"true\"==b.body.contentEditable&&(b.lastBk||(b.lastBk=b.selection.getRange().createBookmark(!0)),b.body.contentEditable=!1,b.bkqueryCommandState=b.queryCommandState,b.bkqueryCommandValue=b.queryCommandValue,b.queryCommandState=function(c){return utils.indexOf(a,c)!=-1?b.bkqueryCommandState.apply(b,arguments):-1},b.queryCommandValue=function(c){return utils.indexOf(a,c)!=-1?b.bkqueryCommandValue.apply(b,arguments):null},b.fireEvent(\"selectionchange\"))},disable:function(a){return this.setDisabled(a)},_setDefaultContent:function(){function a(){var b=this;b.document.getElementById(\"initContent\")&&(b.body.innerHTML=\"<p>\"+(ie?\"\":\"<br/>\")+\"</p>\",b.removeListener(\"firstBeforeExecCommand focus\",a),setTimeout(function(){b.focus(),b._selectionChange()},0))}return function(b){var c=this;c.body.innerHTML='<p id=\"initContent\">'+b+\"</p>\",c.addListener(\"firstBeforeExecCommand focus\",a)}}(),setShow:function(){var a=this,b=a.selection.getRange();if(\"none\"==a.container.style.display){try{b.moveToBookmark(a.lastBk),\ndelete a.lastBk}catch(c){b.setStartAtFirst(a.body).collapse(!0)}setTimeout(function(){b.select(!0)},100),a.container.style.display=\"\"}},show:function(){return this.setShow()},setHide:function(){var a=this;a.lastBk||(a.lastBk=a.selection.getRange().createBookmark(!0)),a.container.style.display=\"none\"},hide:function(){return this.setHide()},getLang:function(a){var b=UE.I18N[this.options.lang];if(!b)throw Error(\"not import language file\");a=(a||\"\").split(\".\");for(var c,d=0;(c=a[d++])&&(b=b[c],b););return b},getContentLength:function(a,b){var c=this.getContent(!1,!1,!0).length;if(a){b=(b||[]).concat([\"hr\",\"img\",\"iframe\"]),c=this.getContentTxt().replace(/[\\t\\r\\n]+/g,\"\").length;for(var d,e=0;d=b[e++];)c+=this.document.getElementsByTagName(d).length}return c},addInputRule:function(a){this.inputRules.push(a)},filterInputRule:function(a){for(var b,c=0;b=this.inputRules[c++];)b.call(this,a)},addOutputRule:function(a){this.outputRules.push(a)},filterOutputRule:function(a){for(var b,c=0;b=this.outputRules[c++];)b.call(this,a)},getActionUrl:function(a){var b=this.getOpt(a)||a,c=this.getOpt(\"imageUrl\"),d=this.getOpt(\"serverUrl\");return!d&&c&&(d=c.replace(/^(.*[\\/]).+([\\.].+)$/,\"$1controller$2\")),d?(d=d+(d.indexOf(\"?\")==-1?\"?\":\"&\")+\"action=\"+(b||\"\"),utils.formatUrl(d)):\"\"}},utils.inherits(f,EventBase)}(),UE.Editor.defaultOptions=function(a){var b=a.options.UEDITOR_HOME_URL;return{isShow:!0,initialContent:\"\",initialStyle:\"\",autoClearinitialContent:!1,iframeCssUrl:b+\"themes/iframe.css\",textarea:\"editorValue\",focus:!1,focusInEnd:!0,autoClearEmptyNode:!0,fullscreen:!1,readonly:!1,zIndex:999,imagePopup:!0,enterTag:\"p\",customDomain:!1,lang:\"zh-cn\",langPath:b+\"lang/\",theme:\"default\",themePath:b+\"themes/\",allHtmlEnabled:!1,scaleEnabled:!1,tableNativeEditInFF:!1,autoSyncData:!0,fileNameFormat:\"{time}{rand:6}\"}},function(){UE.Editor.prototype.loadServerConfig=function(){function showErrorMsg(a){console&&console.error(a)}var me=this;setTimeout(function(){try{me.options.imageUrl&&me.setOpt(\"serverUrl\",me.options.imageUrl.replace(/^(.*[\\/]).+([\\.].+)$/,\"$1controller$2\"));var configUrl=me.getActionUrl(\"config\"),isJsonp=utils.isCrossDomainUrl(configUrl);me._serverConfigLoaded=!1,configUrl&&UE.ajax.request(configUrl,{method:\"GET\",dataType:isJsonp?\"jsonp\":\"\",onsuccess:function(r){try{var config=isJsonp?r:eval(\"(\"+r.responseText+\")\");utils.extend(me.options,config),me.fireEvent(\"serverConfigLoaded\"),me._serverConfigLoaded=!0}catch(e){showErrorMsg(me.getLang(\"loadconfigFormatError\"))}},onerror:function(){showErrorMsg(me.getLang(\"loadconfigHttpError\"))}})}catch(e){showErrorMsg(me.getLang(\"loadconfigError\"))}})},UE.Editor.prototype.isServerConfigLoaded=function(){var a=this;return a._serverConfigLoaded||!1},UE.Editor.prototype.afterConfigReady=function(a){if(a&&utils.isFunction(a)){var b=this,c=function(){a.apply(b,arguments),b.removeListener(\"serverConfigLoaded\",c)};b.isServerConfigLoaded()?a.call(b,\"serverConfigLoaded\"):b.addListener(\"serverConfigLoaded\",c)}}}(),UE.ajax=function(){function a(a){var b=[];for(var c in a)if(\"method\"!=c&&\"timeout\"!=c&&\"async\"!=c&&\"dataType\"!=c&&\"callback\"!=c&&void 0!=a[c]&&null!=a[c])if(\"function\"!=(typeof a[c]).toLowerCase()&&\"object\"!=(typeof a[c]).toLowerCase())b.push(encodeURIComponent(c)+\"=\"+encodeURIComponent(a[c]));else if(utils.isArray(a[c]))for(var d=0;d<a[c].length;d++)b.push(encodeURIComponent(c)+\"[]=\"+encodeURIComponent(a[c][d]));return b.join(\"&\")}function b(b,c){var d=f(),e=!1,g={method:\"POST\",timeout:5e3,async:!0,data:{},onsuccess:function(){},onerror:function(){}};if(\"object\"==typeof b&&(c=b,b=c.url),d&&b){var h=c?utils.extend(g,c):g,i=a(h);utils.isEmptyObject(h.data)||(i+=(i?\"&\":\"\")+a(h.data));var j=setTimeout(function(){4!=d.readyState&&(e=!0,d.abort(),clearTimeout(j))},h.timeout),k=h.method.toUpperCase(),l=b+(b.indexOf(\"?\")==-1?\"?\":\"&\")+(\"POST\"==k?\"\":i+\"&noCache=\"+ +new Date);d.open(k,l,h.async),d.onreadystatechange=function(){4==d.readyState&&(e||200!=d.status?h.onerror(d):h.onsuccess(d))},\"POST\"==k?(d.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\"),d.send(i)):d.send(null)}}function c(b,c){function d(a,b,c){a.setAttribute(\"type\",\"text/javascript\"),a.setAttribute(\"defer\",\"defer\"),c&&a.setAttribute(\"charset\",c),a.setAttribute(\"src\",b),document.getElementsByTagName(\"head\")[0].appendChild(a)}function e(a){return function(){try{if(a)k.onerror&&k.onerror();else try{clearTimeout(g),i.apply(window,arguments)}catch(b){}}catch(c){k.onerror&&k.onerror.call(window,c)}finally{k.oncomplete&&k.oncomplete.apply(window,arguments),j.parentNode&&j.parentNode.removeChild(j),window[f]=null;try{delete window[f]}catch(b){}}}}var f,g,h,i=c.onsuccess||function(){},j=document.createElement(\"SCRIPT\"),k=c||{},l=k.charset,m=k.jsonp||\"callback\",n=k.timeOut||0,o=new RegExp(\"(\\\\?|&)\"+m+\"=([^&]*)\");utils.isFunction(i)?(f=\"bd__editor__\"+Math.floor(2147483648*Math.random()).toString(36),window[f]=e(0)):utils.isString(i)?f=i:(h=o.exec(b))&&(f=h[2]),b=b.replace(o,\"$1\"+m+\"=\"+f),b.search(o)<0&&(b+=(b.indexOf(\"?\")<0?\"?\":\"&\")+m+\"=\"+f);var p=a(c);utils.isEmptyObject(c.data)||(p+=(p?\"&\":\"\")+a(c.data)),p&&(b=b.replace(/\\?/,\"?\"+p+\"&\")),j.onerror=e(1),n&&(g=setTimeout(e(1),n)),d(j,b,l)}var d=\"XMLHttpRequest()\";try{new ActiveXObject(\"Msxml2.XMLHTTP\"),d=\"ActiveXObject('Msxml2.XMLHTTP')\"}catch(e){try{new ActiveXObject(\"Microsoft.XMLHTTP\"),d=\"ActiveXObject('Microsoft.XMLHTTP')\"}catch(e){}}var f=new Function(\"return new \"+d);return{request:function(a,d){d&&\"jsonp\"==d.dataType?c(a,d):b(a,d)},getJSONP:function(a,b,d){var e={data:b,oncomplete:d};c(a,e)}}}();var filterWord=UE.filterWord=function(){function a(a){return/(class=\"?Mso|style=\"[^\"]*\\bmso\\-|w:WordDocument|<(v|o):|lang=)/gi.test(a)}function b(a){return a=a.replace(/[\\d.]+\\w+/g,function(a){return utils.transUnitToPx(a)})}function c(a){return a.replace(/[\\t\\r\\n]+/g,\" \").replace(/<!--[\\s\\S]*?-->/gi,\"\").replace(/<v:shape [^>]*>[\\s\\S]*?.<\\/v:shape>/gi,function(a){if(browser.opera)return\"\";try{if(/Bitmap/i.test(a))return\"\";var c=a.match(/width:([ \\d.]*p[tx])/i)[1],d=a.match(/height:([ \\d.]*p[tx])/i)[1],e=a.match(/src=\\s*\"([^\"]*)\"/i)[1];return'<img width=\"'+b(c)+'\" height=\"'+b(d)+'\" src=\"'+e+'\" />'}catch(f){return\"\"}}).replace(/<\\/?div[^>]*>/g,\"\").replace(/v:\\w+=([\"']?)[^'\"]+\\1/g,\"\").replace(/<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|xml|meta|link|style|\\w+:\\w+)(?=[\\s\\/>]))[^>]*>/gi,\"\").replace(/<p [^>]*class=\"?MsoHeading\"?[^>]*>(.*?)<\\/p>/gi,\"<p><strong>$1</strong></p>\").replace(/\\s+(class|lang|align)\\s*=\\s*(['\"]?)([\\w-]+)\\2/gi,function(a,b,c,d){return\"class\"==b&&\"MsoListParagraph\"==d?a:\"\"}).replace(/<(font|span)[^>]*>(\\s*)<\\/\\1>/gi,function(a,b,c){return c.replace(/[\\t\\r\\n ]+/g,\" \")}).replace(/(<[a-z][^>]*)\\sstyle=([\"'])([^\\2]*?)\\2/gi,function(a,c,d,e){for(var f,g=[],h=e.replace(/^\\s+|\\s+$/,\"\").replace(/&#39;/g,\"'\").replace(/&quot;/gi,\"'\").replace(/[\\d.]+(cm|pt)/g,function(a){return utils.transUnitToPx(a)}).split(/;\\s*/g),i=0;f=h[i];i++){var j,k,l=f.split(\":\");if(2==l.length){if(j=l[0].toLowerCase(),k=l[1].toLowerCase(),/^(background)\\w*/.test(j)&&0==k.replace(/(initial|\\s)/g,\"\").length||/^(margin)\\w*/.test(j)&&/^0\\w+$/.test(k))continue;switch(j){case\"mso-padding-alt\":case\"mso-padding-top-alt\":case\"mso-padding-right-alt\":case\"mso-padding-bottom-alt\":case\"mso-padding-left-alt\":case\"mso-margin-alt\":case\"mso-margin-top-alt\":case\"mso-margin-right-alt\":case\"mso-margin-bottom-alt\":case\"mso-margin-left-alt\":case\"mso-height\":case\"mso-width\":case\"mso-vertical-align-alt\":/<table/.test(c)||(g[i]=j.replace(/^mso-|-alt$/g,\"\")+\":\"+b(k));continue;case\"horiz-align\":g[i]=\"text-align:\"+k;continue;case\"vert-align\":g[i]=\"vertical-align:\"+k;continue;case\"font-color\":case\"mso-foreground\":g[i]=\"color:\"+k;continue;case\"mso-background\":case\"mso-highlight\":g[i]=\"background:\"+k;continue;case\"mso-default-height\":g[i]=\"min-height:\"+b(k);continue;case\"mso-default-width\":g[i]=\"min-width:\"+b(k);continue;case\"mso-padding-between-alt\":g[i]=\"border-collapse:separate;border-spacing:\"+b(k);continue;case\"text-line-through\":\"single\"!=k&&\"double\"!=k||(g[i]=\"text-decoration:line-through\");continue;case\"mso-zero-height\":\"yes\"==k&&(g[i]=\"display:none\");continue;case\"margin\":if(!/[1-9]/.test(k))continue}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?:decor|trans)|top-bar|version|vnd|word-break)/.test(j)||/text\\-indent|padding|margin/.test(j)&&/\\-[\\d.]+/.test(k))continue;g[i]=j+\":\"+l[1]}}return c+(g.length?' style=\"'+g.join(\";\").replace(/;{2,}/g,\";\")+'\"':\"\")})}return function(b){return a(b)?c(b):b}}();!function(){function a(a,b,c){return a.push(n),b+(c?1:-1)}function b(a,b){for(var c=0;c<b;c++)a.push(m)}function c(g,h,i,j){switch(g.type){case\"root\":for(var k,l=0;k=g.children[l++];)i&&\"element\"==k.type&&!dtd.$inlineWithA[k.tagName]&&l>1&&(a(h,j,!0),b(h,j)),c(k,h,i,j);break;case\"text\":d(g,h);break;case\"element\":e(g,h,i,j);break;case\"comment\":f(g,h,i)}return h}function d(a,b){\"pre\"==a.parentNode.tagName?b.push(a.data):b.push(l[a.parentNode.tagName]?utils.html(a.data):a.data.replace(/[ ]{2}/g,\" &nbsp;\"))}function e(d,e,f,g){var h=\"\";if(d.attrs){h=[];var i=d.attrs;for(var j in i)h.push(j+(void 0!==i[j]?'=\"'+(k[j]?utils.html(i[j]).replace(/[\"]/g,function(a){return\"&quot;\"}):utils.unhtml(i[j]))+'\"':\"\"));h=h.join(\" \")}if(e.push(\"<\"+d.tagName+(h?\" \"+h:\"\")+(dtd.$empty[d.tagName]?\"/\":\"\")+\">\"),f&&!dtd.$inlineWithA[d.tagName]&&\"pre\"!=d.tagName&&d.children&&d.children.length&&(g=a(e,g,!0),b(e,g)),d.children&&d.children.length)for(var l,m=0;l=d.children[m++];)f&&\"element\"==l.type&&!dtd.$inlineWithA[l.tagName]&&m>1&&(a(e,g),b(e,g)),c(l,e,f,g);dtd.$empty[d.tagName]||(f&&!dtd.$inlineWithA[d.tagName]&&\"pre\"!=d.tagName&&d.children&&d.children.length&&(g=a(e,g),b(e,g)),e.push(\"</\"+d.tagName+\">\"))}function f(a,b){b.push(\"<!--\"+a.data+\"-->\")}function g(a,b){var c;if(\"element\"==a.type&&a.getAttr(\"id\")==b)return a;if(a.children&&a.children.length)for(var d,e=0;d=a.children[e++];)if(c=g(d,b))return c}function h(a,b,c){if(\"element\"==a.type&&a.tagName==b&&c.push(a),a.children&&a.children.length)for(var d,e=0;d=a.children[e++];)h(d,b,c)}function i(a,b){if(a.children&&a.children.length)for(var c,d=0;c=a.children[d];)i(c,b),c.parentNode&&(c.children&&c.children.length&&b(c),c.parentNode&&d++);else b(a)}var j=UE.uNode=function(a){this.type=a.type,this.data=a.data,this.tagName=a.tagName,this.parentNode=a.parentNode,this.attrs=a.attrs||{},this.children=a.children},k={href:1,src:1,_src:1,_href:1,cdata_data:1},l={style:1,script:1},m=\"    \",n=\"\\n\";j.createElement=function(a){return/[<>]/.test(a)?UE.htmlparser(a).children[0]:new j({type:\"element\",children:[],tagName:a})},j.createText=function(a,b){return new UE.uNode({type:\"text\",data:b?a:utils.unhtml(a||\"\")})},j.prototype={toHtml:function(a){var b=[];return c(this,b,a,0),b.join(\"\")},innerHTML:function(a){if(\"element\"!=this.type||dtd.$empty[this.tagName])return this;if(utils.isString(a)){if(this.children)for(var b,c=0;b=this.children[c++];)b.parentNode=null;this.children=[];for(var b,d=UE.htmlparser(a),c=0;b=d.children[c++];)this.children.push(b),b.parentNode=this;return this}var d=new UE.uNode({type:\"root\",children:this.children});return d.toHtml()},innerText:function(a,b){if(\"element\"!=this.type||dtd.$empty[this.tagName])return this;if(a){if(this.children)for(var c,d=0;c=this.children[d++];)c.parentNode=null;return this.children=[],this.appendChild(j.createText(a,b)),this}return this.toHtml().replace(/<[^>]+>/g,\"\")},getData:function(){return\"element\"==this.type?\"\":this.data},firstChild:function(){return this.children?this.children[0]:null},lastChild:function(){return this.children?this.children[this.children.length-1]:null},previousSibling:function(){for(var a,b=this.parentNode,c=0;a=b.children[c];c++)if(a===this)return 0==c?null:b.children[c-1]},nextSibling:function(){for(var a,b=this.parentNode,c=0;a=b.children[c++];)if(a===this)return b.children[c]},replaceChild:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c,d=0;c=this.children[d];d++)if(c===b)return this.children.splice(d,1,a),b.parentNode=null,a.parentNode=this,a}},appendChild:function(a){if(\"root\"==this.type||\"element\"==this.type&&!dtd.$empty[this.tagName]){this.children||(this.children=[]),a.parentNode&&a.parentNode.removeChild(a);for(var b,c=0;b=this.children[c];c++)if(b===a){this.children.splice(c,1);break}return this.children.push(a),a.parentNode=this,a}},insertBefore:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c,d=0;c=this.children[d];d++)if(c===b)return this.children.splice(d,0,a),a.parentNode=this,a}},insertAfter:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c,d=0;c=this.children[d];d++)if(c===b)return this.children.splice(d+1,0,a),a.parentNode=this,a}},removeChild:function(a,b){if(this.children)for(var c,d=0;c=this.children[d];d++)if(c===a){if(this.children.splice(d,1),c.parentNode=null,b&&c.children&&c.children.length)for(var e,f=0;e=c.children[f];f++)this.children.splice(d+f,0,e),e.parentNode=this;return c}},getAttr:function(a){return this.attrs&&this.attrs[a.toLowerCase()]},setAttr:function(a,b){if(!a)return void delete this.attrs;if(this.attrs||(this.attrs={}),utils.isObject(a))for(var c in a)a[c]?this.attrs[c.toLowerCase()]=a[c]:delete this.attrs[c];else b?this.attrs[a.toLowerCase()]=b:delete this.attrs[a]},getIndex:function(){for(var a,b=this.parentNode,c=0;a=b.children[c];c++)if(a===this)return c;return-1},getNodeById:function(a){var b;if(this.children&&this.children.length)for(var c,d=0;c=this.children[d++];)if(b=g(c,a))return b},getNodesByTagName:function(a){a=utils.trim(a).replace(/[ ]{2,}/g,\" \").split(\" \");var b=[],c=this;return utils.each(a,function(a){if(c.children&&c.children.length)for(var d,e=0;d=c.children[e++];)h(d,a,b)}),b},getStyle:function(a){var b=this.getAttr(\"style\");if(!b)return\"\";var c=new RegExp(\"(^|;)\\\\s*\"+a+\":([^;]+)\",\"i\"),d=b.match(c);return d&&d[0]?d[2]:\"\"},setStyle:function(a,b){function c(a,b){var c=new RegExp(\"(^|;)\\\\s*\"+a+\":([^;]+;?)\",\"gi\");d=d.replace(c,\"$1\"),b&&(d=a+\":\"+utils.unhtml(b)+\";\"+d)}var d=this.getAttr(\"style\");if(d||(d=\"\"),utils.isObject(a))for(var e in a)c(e,a[e]);else c(a,b);this.setAttr(\"style\",utils.trim(d))},traversal:function(a){return this.children&&this.children.length&&i(this,a),this}}}();var htmlparser=UE.htmlparser=function(a,b){function c(a,b){if(m[a.tagName]){var c=k.createElement(m[a.tagName]);a.appendChild(c),c.appendChild(k.createText(b)),a=c}else a.appendChild(k.createText(b))}function d(a,b,c){var e;if(e=l[b]){for(var f,h=a;\"root\"!=h.type;){if(utils.isArray(e)?utils.indexOf(e,h.tagName)!=-1:e==h.tagName){a=h,f=!0;break}h=h.parentNode}f||(a=d(a,utils.isArray(e)?e[0]:e))}var i=new k({parentNode:a,type:\"element\",tagName:b.toLowerCase(),children:dtd.$empty[b]?null:[]});if(c){for(var m,n={};m=g.exec(c);)n[m[1].toLowerCase()]=j[m[1].toLowerCase()]?m[2]||m[3]||m[4]:utils.unhtml(m[2]||m[3]||m[4]);i.attrs=n}return a.children.push(i),dtd.$empty[b]?a:i}function e(a,b){a.children.push(new k({type:\"comment\",data:b,parentNode:a}))}var f=/<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\/\\s>]+)((?:\\s+[\\w\\-:.]+(?:\\s*=\\s*?(?:(?:\"[^\"]*\")|(?:'[^']*')|[^\\s\"'\\/>]+))?)*)[\\S\\s]*?(\\/?)>))/g,g=/([\\w\\-:.]+)(?:(?:\\s*=\\s*(?:(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s>]+)))|(?=\\s|$))/g,h={b:1,code:1,i:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,span:1,sub:1,img:1,sup:1,font:1,big:1,small:1,iframe:1,a:1,br:1,pre:1};a=a.replace(new RegExp(domUtils.fillChar,\"g\"),\"\"),b||(a=a.replace(new RegExp(\"[\\\\r\\\\t\\\\n\"+(b?\"\":\" \")+\"]*</?(\\\\w+)\\\\s*(?:[^>]*)>[\\\\r\\\\t\\\\n\"+(b?\"\":\" \")+\"]*\",\"g\"),function(a,c){return c&&h[c.toLowerCase()]?a.replace(/(^[\\n\\r]+)|([\\n\\r]+$)/g,\"\"):a.replace(new RegExp(\"^[\\\\r\\\\n\"+(b?\"\":\" \")+\"]+\"),\"\").replace(new RegExp(\"[\\\\r\\\\n\"+(b?\"\":\" \")+\"]+$\"),\"\")}));for(var i,j={href:1,src:1},k=UE.uNode,l={td:\"tr\",tr:[\"tbody\",\"thead\",\"tfoot\"],tbody:\"table\",th:\"tr\",thead:\"table\",tfoot:\"table\",caption:\"table\",li:[\"ul\",\"ol\"],dt:\"dl\",dd:\"dl\",option:\"select\"},m={ol:\"li\",ul:\"li\"},n=0,o=0,p=new k({type:\"root\",children:[]}),q=p;i=f.exec(a);){n=i.index;try{if(n>o&&c(q,a.slice(o,n)),i[3])dtd.$cdata[q.tagName]?c(q,i[0]):q=d(q,i[3].toLowerCase(),i[4]);else if(i[1]){if(\"root\"!=q.type)if(dtd.$cdata[q.tagName]&&!dtd.$cdata[i[1]])c(q,i[0]);else{for(var r=q;\"element\"==q.type&&q.tagName!=i[1].toLowerCase();)if(q=q.parentNode,\"root\"==q.type)throw q=r,\"break\";q=q.parentNode}}else i[2]&&e(q,i[2])}catch(s){}o=f.lastIndex}return o<a.length&&c(q,a.slice(o)),p},filterNode=UE.filterNode=function(){function a(b,c){switch(b.type){case\"text\":break;case\"element\":var d;if(d=c[b.tagName])if(\"-\"===d)b.parentNode.removeChild(b);else if(utils.isFunction(d)){var e=b.parentNode,f=b.getIndex();if(d(b),b.parentNode){if(b.children)for(var g,h=0;g=b.children[h];)a(g,c),g.parentNode&&h++}else for(var g,h=f;g=e.children[h];)a(g,c),g.parentNode&&h++}else{var i=d.$;if(i&&b.attrs){var j,k={};for(var l in i){if(j=b.getAttr(l),\"style\"==l&&utils.isArray(i[l])){var m=[];utils.each(i[l],function(a){var c;(c=b.getStyle(a))&&m.push(a+\":\"+c)}),j=m.join(\";\")}j&&(k[l]=j)}b.attrs=k}if(b.children)for(var g,h=0;g=b.children[h];)a(g,c),g.parentNode&&h++}else if(dtd.$cdata[b.tagName])b.parentNode.removeChild(b);else{var e=b.parentNode,f=b.getIndex();b.parentNode.removeChild(b,!0);for(var g,h=f;g=e.children[h];)a(g,c),g.parentNode&&h++}break;case\"comment\":b.parentNode.removeChild(b)}}return function(b,c){if(utils.isEmptyObject(c))return b;var d;(d=c[\"-\"])&&utils.each(d.split(\" \"),function(a){c[a]=\"-\"});for(var e,f=0;e=b.children[f];)a(e,c),e.parentNode&&f++;return b}}();UE.plugin=function(){var a={};return{register:function(b,c,d,e){d&&utils.isFunction(d)&&(e=d,d=null),a[b]={optionName:d||b,execFn:c,afterDisabled:e}},load:function(b){utils.each(a,function(a){var c=a.execFn.call(b);b.options[a.optionName]!==!1?c&&utils.each(c,function(a,c){switch(c.toLowerCase()){case\"shortcutkey\":b.addshortcutkey(a);break;case\"bindevents\":utils.each(a,function(a,c){b.addListener(c,a)});break;case\"bindmultievents\":utils.each(utils.isArray(a)?a:[a],function(a){var c=utils.trim(a.type).split(/\\s+/);utils.each(c,function(c){b.addListener(c,a.handler)})});break;case\"commands\":utils.each(a,function(a,c){b.commands[c]=a});break;case\"outputrule\":b.addOutputRule(a);break;case\"inputrule\":b.addInputRule(a);break;case\"defaultoptions\":b.setOpt(a)}}):a.afterDisabled&&a.afterDisabled.call(b)}),utils.each(UE.plugins,function(a){a.call(b)})},run:function(b,c){var d=a[b];d&&d.exeFn.call(c)}}}();var keymap=UE.keymap={Backspace:8,Tab:9,Enter:13,Shift:16,Control:17,Alt:18,CapsLock:20,Esc:27,Spacebar:32,PageUp:33,PageDown:34,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Insert:45,Del:46,NumLock:144,Cmd:91,\"=\":187,\"-\":189,b:66,i:73,z:90,y:89,v:86,x:88,s:83,n:78},LocalStorage=UE.LocalStorage=function(){function a(){var a=document.createElement(\"div\");return a.style.display=\"none\",a.addBehavior?(a.addBehavior(\"#default#userdata\"),{getItem:function(b){var d=null;try{document.body.appendChild(a),a.load(c),d=a.getAttribute(b),document.body.removeChild(a)}catch(e){}return d},setItem:function(b,d){document.body.appendChild(a),a.setAttribute(b,d),a.save(c),document.body.removeChild(a)},removeItem:function(b){document.body.appendChild(a),a.removeAttribute(b),a.save(c),document.body.removeChild(a)}}):null}var b=window.localStorage||a()||null,c=\"localStorage\";return{saveLocalData:function(a,c){return!(!b||!c)&&(b.setItem(a,c),!0)},getLocalData:function(a){return b?b.getItem(a):null},removeItem:function(a){b&&b.removeItem(a)}}}();!function(){var a=\"ueditor_preference\";UE.Editor.prototype.setPreferences=function(b,c){var d={};utils.isString(b)?d[b]=c:d=b;var e=LocalStorage.getLocalData(a);e&&(e=utils.str2json(e))?utils.extend(e,d):e=d,e&&LocalStorage.saveLocalData(a,utils.json2str(e))},UE.Editor.prototype.getPreferences=function(b){var c=LocalStorage.getLocalData(a);return c&&(c=utils.str2json(c))?b?c[b]:c:null},UE.Editor.prototype.removePreferences=function(b){var c=LocalStorage.getLocalData(a);c&&(c=utils.str2json(c))&&(c[b]=void 0,delete c[b]),c&&LocalStorage.saveLocalData(a,utils.json2str(c))}}(),UE.plugins.defaultfilter=function(){var a=this;a.setOpt({allowDivTransToP:!0,disabledTableInTable:!0,rgb2Hex:!0}),a.addInputRule(function(b){function c(a){for(;a&&\"element\"==a.type;){if(\"td\"==a.tagName)return!0;a=a.parentNode}return!1}var d,e=this.options.allowDivTransToP;b.traversal(function(b){if(\"element\"==b.type){if(!dtd.$cdata[b.tagName]&&a.options.autoClearEmptyNode&&dtd.$inline[b.tagName]&&!dtd.$empty[b.tagName]&&(!b.attrs||utils.isEmptyObject(b.attrs)))return void(b.firstChild()?\"span\"!=b.tagName||b.attrs&&!utils.isEmptyObject(b.attrs)||b.parentNode.removeChild(b,!0):b.parentNode.removeChild(b));switch(b.tagName){case\"style\":case\"script\":b.setAttr({cdata_tag:b.tagName,cdata_data:b.innerHTML()||\"\",_ue_custom_node_:\"true\"}),b.tagName=\"div\",b.innerHTML(\"\");break;case\"a\":(d=b.getAttr(\"href\"))&&b.setAttr(\"_href\",d);break;case\"img\":if((d=b.getAttr(\"src\"))&&/^data:/.test(d)){b.parentNode.removeChild(b);break}b.setAttr(\"_src\",b.getAttr(\"src\"));break;case\"span\":browser.webkit&&(d=b.getStyle(\"white-space\"))&&/nowrap|normal/.test(d)&&(b.setStyle(\"white-space\",\"\"),a.options.autoClearEmptyNode&&utils.isEmptyObject(b.attrs)&&b.parentNode.removeChild(b,!0)),d=b.getAttr(\"id\"),d&&/^_baidu_bookmark_/i.test(d)&&b.parentNode.removeChild(b);break;case\"p\":(d=b.getAttr(\"align\"))&&(b.setAttr(\"align\"),b.setStyle(\"text-align\",d)),utils.each(b.children,function(a){if(\"element\"==a.type&&\"p\"==a.tagName){var c=a.nextSibling();b.parentNode.insertAfter(a,b);for(var d=a;c;){var e=c.nextSibling();b.parentNode.insertAfter(c,d),d=c,c=e}return!1}}),b.firstChild()||b.innerHTML(browser.ie?\"&nbsp;\":\"<br/>\");break;case\"div\":if(b.getAttr(\"cdata_tag\"))break;if(d=b.getAttr(\"class\"),d&&/^line number\\d+/.test(d))break;if(!e)break;for(var f,g=UE.uNode.createElement(\"p\");f=b.firstChild();)\"text\"!=f.type&&UE.dom.dtd.$block[f.tagName]?g.firstChild()?(b.parentNode.insertBefore(g,b),g=UE.uNode.createElement(\"p\")):b.parentNode.insertBefore(f,b):g.appendChild(f);g.firstChild()&&b.parentNode.insertBefore(g,b),b.parentNode.removeChild(b);break;case\"dl\":b.tagName=\"ul\";break;case\"dt\":case\"dd\":b.tagName=\"li\";break;case\"li\":var h=b.getAttr(\"class\");h&&/list\\-/.test(h)||b.setAttr();var i=b.getNodesByTagName(\"ol ul\");UE.utils.each(i,function(a){b.parentNode.insertAfter(a,b)});break;case\"td\":case\"th\":case\"caption\":b.children&&b.children.length||b.appendChild(browser.ie11below?UE.uNode.createText(\" \"):UE.uNode.createElement(\"br\"));break;case\"table\":a.options.disabledTableInTable&&c(b)&&(b.parentNode.insertBefore(UE.uNode.createText(b.innerText()),b),b.parentNode.removeChild(b))}}})}),a.addOutputRule(function(b){var c;b.traversal(function(b){if(\"element\"==b.type){if(a.options.autoClearEmptyNode&&dtd.$inline[b.tagName]&&!dtd.$empty[b.tagName]&&(!b.attrs||utils.isEmptyObject(b.attrs)))return void(b.firstChild()?\"span\"!=b.tagName||b.attrs&&!utils.isEmptyObject(b.attrs)||b.parentNode.removeChild(b,!0):b.parentNode.removeChild(b));switch(b.tagName){case\"div\":(c=b.getAttr(\"cdata_tag\"))&&(b.tagName=c,b.appendChild(UE.uNode.createText(b.getAttr(\"cdata_data\"))),b.setAttr({cdata_tag:\"\",cdata_data:\"\",_ue_custom_node_:\"\"}));break;case\"a\":(c=b.getAttr(\"_href\"))&&b.setAttr({href:utils.html(c),_href:\"\"});break;case\"span\":if(c=b.getAttr(\"id\"),c&&/^_baidu_bookmark_/i.test(c)&&b.parentNode.removeChild(b),a.getOpt(\"rgb2Hex\")){var d=b.getAttr(\"style\");d&&b.setAttr(\"style\",d.replace(/rgba?\\(([\\d,\\s]+)\\)/g,function(a,b){var c=b.split(\",\");if(c.length>3)return\"\";b=\"#\";for(var d,e=0;d=c[e++];)d=parseInt(d.replace(/[^\\d]/gi,\"\"),10).toString(16),b+=1==d.length?\"0\"+d:d;return b.toUpperCase()}))}break;case\"img\":(c=b.getAttr(\"_src\"))&&b.setAttr({src:b.getAttr(\"_src\"),_src:\"\"})}}})})},UE.commands.inserthtml={execCommand:function(a,b,c){var d,e,f=this;if(b&&f.fireEvent(\"beforeinserthtml\",b)!==!0){if(d=f.selection.getRange(),e=d.document.createElement(\"div\"),e.style.display=\"inline\",!c){var g=UE.htmlparser(b);f.options.filterRules&&UE.filterNode(g,f.options.filterRules),f.filterInputRule(g),b=g.toHtml()}if(e.innerHTML=utils.trim(b),!d.collapsed){var h=d.startContainer;if(domUtils.isFillChar(h)&&d.setStartBefore(h),h=d.endContainer,domUtils.isFillChar(h)&&d.setEndAfter(h),d.txtToElmBoundary(),d.endContainer&&1==d.endContainer.nodeType&&(h=d.endContainer.childNodes[d.endOffset],h&&domUtils.isBr(h)&&d.setEndAfter(h)),0==d.startOffset&&(h=d.startContainer,domUtils.isBoundaryNode(h,\"firstChild\")&&(h=d.endContainer,d.endOffset==(3==h.nodeType?h.nodeValue.length:h.childNodes.length)&&domUtils.isBoundaryNode(h,\"lastChild\")&&(f.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\",d.setStart(f.body.firstChild,0).collapse(!0)))),!d.collapsed&&d.deleteContents(),1==d.startContainer.nodeType){var i,j=d.startContainer.childNodes[d.startOffset];if(j&&domUtils.isBlockElm(j)&&(i=j.previousSibling)&&domUtils.isBlockElm(i)){for(d.setEnd(i,i.childNodes.length).collapse();j.firstChild;)i.appendChild(j.firstChild);domUtils.remove(j)}}}var j,k,i,l,m,n=0;d.inFillChar()&&(j=d.startContainer,domUtils.isFillChar(j)?(d.setStartBefore(j).collapse(!0),domUtils.remove(j)):domUtils.isFillChar(j,!0)&&(j.nodeValue=j.nodeValue.replace(fillCharReg,\"\"),d.startOffset--,d.collapsed&&d.collapse(!0)));var o=domUtils.findParentByTagName(d.startContainer,\"li\",!0);if(o){for(var p,q;j=e.firstChild;){for(;j&&(3==j.nodeType||!domUtils.isBlockElm(j)||\"HR\"==j.tagName);)p=j.nextSibling,d.insertNode(j).collapse(),q=j,j=p;if(j)if(/^(ol|ul)$/i.test(j.tagName)){for(;j.firstChild;)q=j.firstChild,domUtils.insertAfter(o,j.firstChild),o=o.nextSibling;domUtils.remove(j)}else{var r;p=j.nextSibling,r=f.document.createElement(\"li\"),domUtils.insertAfter(o,r),r.appendChild(j),q=j,j=p,o=r}}o=domUtils.findParentByTagName(d.startContainer,\"li\",!0),domUtils.isEmptyBlock(o)&&domUtils.remove(o),q&&d.setStartAfter(q).collapse(!0).select(!0)}else{for(;j=e.firstChild;){if(n){for(var s=f.document.createElement(\"p\");j&&(3==j.nodeType||!dtd.$block[j.tagName]);)m=j.nextSibling,s.appendChild(j),j=m;s.firstChild&&(j=s)}if(d.insertNode(j),m=j.nextSibling,!n&&j.nodeType==domUtils.NODE_ELEMENT&&domUtils.isBlockElm(j)&&(k=domUtils.findParent(j,function(a){return domUtils.isBlockElm(a)}),k&&\"body\"!=k.tagName.toLowerCase()&&(!dtd[k.tagName][j.nodeName]||j.parentNode!==k))){if(dtd[k.tagName][j.nodeName])for(l=j.parentNode;l!==k;)i=l,l=l.parentNode;else i=k;domUtils.breakParent(j,i||l);var i=j.previousSibling;domUtils.trimWhiteTextNode(i),i.childNodes.length||domUtils.remove(i),!browser.ie&&(p=j.nextSibling)&&domUtils.isBlockElm(p)&&p.lastChild&&!domUtils.isBr(p.lastChild)&&p.appendChild(f.document.createElement(\"br\")),n=1}var p=j.nextSibling;if(!e.firstChild&&p&&domUtils.isBlockElm(p)){d.setStart(p,0).collapse(!0);break}d.setEndAfter(j).collapse()}if(j=d.startContainer,m&&domUtils.isBr(m)&&domUtils.remove(m),domUtils.isBlockElm(j)&&domUtils.isEmptyNode(j))if(m=j.nextSibling)domUtils.remove(j),1==m.nodeType&&dtd.$block[m.tagName]&&d.setStart(m,0).collapse(!0).shrinkBoundary();else try{j.innerHTML=browser.ie?domUtils.fillChar:\"<br/>\"}catch(t){d.setStartBefore(j),domUtils.remove(j)}try{d.select(!0)}catch(t){}}setTimeout(function(){d=f.selection.getRange(),d.scrollToView(f.autoHeightEnabled,f.autoHeightEnabled?domUtils.getXY(f.iframe).y:0),f.fireEvent(\"afterinserthtml\",b)},200)}}},UE.plugins.autotypeset=function(){function a(a,b){return a&&3!=a.nodeType?domUtils.isBr(a)?1:a&&a.parentNode&&l[a.tagName.toLowerCase()]?g&&g.contains(a)||a.getAttribute(\"pagebreak\")?0:b?!domUtils.isEmptyBlock(a):domUtils.isEmptyBlock(a,new RegExp(\"[\\\\s\"+domUtils.fillChar+\"]\",\"g\")):void 0:0}function b(a){a.style.cssText||(domUtils.removeAttributes(a,[\"style\"]),\"span\"==a.tagName.toLowerCase()&&domUtils.hasNoAttributes(a)&&domUtils.remove(a,!0))}function c(c,f){var h,l=this;if(f){if(!i.pasteFilter)return;h=l.document.createElement(\"div\"),h.innerHTML=f.html}else h=l.document.body;for(var m,n=domUtils.getElementsByTagName(h,\"*\"),o=0;m=n[o++];)if(l.fireEvent(\"excludeNodeinautotype\",m)!==!0){if(i.clearFontSize&&m.style.fontSize&&(domUtils.removeStyle(m,\"font-size\"),b(m)),i.clearFontFamily&&m.style.fontFamily&&(domUtils.removeStyle(m,\"font-family\"),b(m)),a(m)){if(i.mergeEmptyline)for(var p,q=m.nextSibling,r=domUtils.isBr(m);a(q)&&(p=q,q=p.nextSibling,!r||q&&(!q||domUtils.isBr(q)));)domUtils.remove(p);if(i.removeEmptyline&&domUtils.inDoc(m,h)&&!k[m.parentNode.tagName.toLowerCase()]){if(domUtils.isBr(m)&&(q=m.nextSibling,q&&!domUtils.isBr(q)))continue;domUtils.remove(m);continue}}if(a(m,!0)&&\"SPAN\"!=m.tagName&&(i.indent&&(m.style.textIndent=i.indentValue),i.textAlign&&(m.style.textAlign=i.textAlign)),i.removeClass&&m.className&&!j[m.className.toLowerCase()]){if(g&&g.contains(m))continue;domUtils.removeAttributes(m,[\"class\"])}if(i.imageBlockLine&&\"img\"==m.tagName.toLowerCase()&&!m.getAttribute(\"emotion\"))if(f){var s=m;switch(i.imageBlockLine){case\"left\":case\"right\":case\"none\":for(var p,t,q,u=s.parentNode;dtd.$inline[u.tagName]||\"A\"==u.tagName;)u=u.parentNode;if(p=u,\"P\"==p.tagName&&\"center\"==domUtils.getStyle(p,\"text-align\")&&!domUtils.isBody(p)&&1==domUtils.getChildCount(p,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)}))if(t=p.previousSibling,q=p.nextSibling,t&&q&&1==t.nodeType&&1==q.nodeType&&t.tagName==q.tagName&&domUtils.isBlockElm(t)){for(t.appendChild(p.firstChild);q.firstChild;)t.appendChild(q.firstChild);domUtils.remove(p),domUtils.remove(q)}else domUtils.setStyle(p,\"text-align\",\"\");domUtils.setStyle(s,\"float\",i.imageBlockLine);break;case\"center\":if(\"center\"!=l.queryCommandValue(\"imagefloat\")){for(u=s.parentNode,domUtils.setStyle(s,\"float\",\"none\"),p=s;u&&1==domUtils.getChildCount(u,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)})&&(dtd.$inline[u.tagName]||\"A\"==u.tagName);)p=u,u=u.parentNode;var v=l.document.createElement(\"p\");domUtils.setAttributes(v,{style:\"text-align:center\"}),p.parentNode.insertBefore(v,p),v.appendChild(p),domUtils.setStyle(p,\"float\",\"\")}}}else{var w=l.selection.getRange();w.selectNode(m).select(),l.execCommand(\"imagefloat\",i.imageBlockLine)}i.removeEmptyNode&&i.removeTagNames[m.tagName.toLowerCase()]&&domUtils.hasNoAttributes(m)&&domUtils.isEmptyBlock(m)&&domUtils.remove(m)}if(i.tobdc){var x=UE.htmlparser(h.innerHTML);x.traversal(function(a){\"text\"==a.type&&(a.data=e(a.data))}),h.innerHTML=x.toHtml()}if(i.bdc2sb){var x=UE.htmlparser(h.innerHTML);x.traversal(function(a){\"text\"==a.type&&(a.data=d(a.data))}),h.innerHTML=x.toHtml()}f&&(f.html=h.innerHTML)}function d(a){for(var b=\"\",c=0;c<a.length;c++){var d=a.charCodeAt(c);b+=d>=65281&&d<=65373?String.fromCharCode(a.charCodeAt(c)-65248):12288==d?String.fromCharCode(a.charCodeAt(c)-12288+32):a.charAt(c)}return b}function e(a){a=utils.html(a);for(var b=\"\",c=0;c<a.length;c++)b+=32==a.charCodeAt(c)?String.fromCharCode(12288):a.charCodeAt(c)<127?String.fromCharCode(a.charCodeAt(c)+65248):a.charAt(c);return b}function f(){var a=h.getPreferences(\"autotypeset\");utils.extend(h.options.autotypeset,a)}this.setOpt({autotypeset:{mergeEmptyline:!0,removeClass:!0,removeEmptyline:!1,textAlign:\"left\",imageBlockLine:\"center\",pasteFilter:!1,clearFontSize:!1,clearFontFamily:!1,removeEmptyNode:!1,removeTagNames:utils.extend({div:1},dtd.$removeEmpty),indent:!1,indentValue:\"2em\",bdc2sb:!1,tobdc:!1}});var g,h=this,i=h.options.autotypeset,j={selectTdClass:1,pagebreak:1,anchorclass:1},k={li:1},l={div:1,p:1,blockquote:1,center:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,span:1};i&&(f(),i.pasteFilter&&h.addListener(\"beforepaste\",c),h.commands.autotypeset={execCommand:function(){h.removeListener(\"beforepaste\",c),i.pasteFilter&&h.addListener(\"beforepaste\",c),c.call(h)}})},UE.plugin.register(\"autosubmit\",function(){return{shortcutkey:{autosubmit:\"ctrl+13\"},commands:{autosubmit:{execCommand:function(){var a=this,b=domUtils.findParentByTagName(a.iframe,\"form\",!1);if(b){if(a.fireEvent(\"beforesubmit\")===!1)return;a.sync(),b.submit()}}}}}}),UE.plugin.register(\"background\",function(){function a(a){var b={},c=a.split(\";\");return utils.each(c,function(a){var c=a.indexOf(\":\"),d=utils.trim(a.substr(0,c)).toLowerCase();\nd&&(b[d]=utils.trim(a.substr(c+1)||\"\"))}),b}function b(a){if(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c+\":\"+a[c]+\"; \");utils.cssRule(e,b.length?\"body{\"+b.join(\"\")+\"}\":\"\",d.document)}else utils.cssRule(e,\"\",d.document)}var c,d=this,e=\"editor_background\",f=new RegExp(\"body[\\\\s]*\\\\{(.+)\\\\}\",\"i\"),g=d.hasContents;return d.hasContents=function(){return!!d.queryCommandValue(\"background\")||g.apply(d,arguments)},{bindEvents:{getAllHtml:function(a,b){var c=this.body,e=domUtils.getComputedStyle(c,\"background-image\"),f=\"\";f=e.indexOf(d.options.imagePath)>0?e.substring(e.indexOf(d.options.imagePath),e.length-1).replace(/\"|\\(|\\)/gi,\"\"):\"none\"!=e?e.replace(/url\\(\"?|\"?\\)/gi,\"\"):\"\";var g='<style type=\"text/css\">body{',h={\"background-color\":domUtils.getComputedStyle(c,\"background-color\")||\"#ffffff\",\"background-image\":f?\"url(\"+f+\")\":\"\",\"background-repeat\":domUtils.getComputedStyle(c,\"background-repeat\")||\"\",\"background-position\":browser.ie?domUtils.getComputedStyle(c,\"background-position-x\")+\" \"+domUtils.getComputedStyle(c,\"background-position-y\"):domUtils.getComputedStyle(c,\"background-position\"),height:domUtils.getComputedStyle(c,\"height\")};for(var i in h)h.hasOwnProperty(i)&&(g+=i+\":\"+h[i]+\"; \");g+=\"}</style> \",b.push(g)},aftersetcontent:function(){0==c&&b()}},inputRule:function(d){c=!1,utils.each(d.getNodesByTagName(\"p\"),function(d){var e=d.getAttr(\"data-background\");e&&(c=!0,b(a(e)),d.parentNode.removeChild(d))})},outputRule:function(a){var b=this,c=(utils.cssRule(e,b.document)||\"\").replace(/[\\n\\r]+/g,\"\").match(f);c&&a.appendChild(UE.uNode.createElement('<p style=\"display:none;\" data-background=\"'+utils.trim(c[1].replace(/\"/g,\"\").replace(/[\\s]+/g,\" \"))+'\"><br/></p>'))},commands:{background:{execCommand:function(a,c){b(c)},queryCommandValue:function(){var b=this,c=(utils.cssRule(e,b.document)||\"\").replace(/[\\n\\r]+/g,\"\").match(f);return c?a(c[1]):null},notNeedUndo:!0}}}}),UE.commands.imagefloat={execCommand:function(a,b){var c=this,d=c.selection.getRange();if(!d.collapsed){var e=d.getClosedNode();if(e&&\"IMG\"==e.tagName)switch(b){case\"left\":case\"right\":case\"none\":for(var f,g,h,i=e.parentNode;dtd.$inline[i.tagName]||\"A\"==i.tagName;)i=i.parentNode;if(f=i,\"P\"==f.tagName&&\"center\"==domUtils.getStyle(f,\"text-align\")){if(!domUtils.isBody(f)&&1==domUtils.getChildCount(f,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)}))if(g=f.previousSibling,h=f.nextSibling,g&&h&&1==g.nodeType&&1==h.nodeType&&g.tagName==h.tagName&&domUtils.isBlockElm(g)){for(g.appendChild(f.firstChild);h.firstChild;)g.appendChild(h.firstChild);domUtils.remove(f),domUtils.remove(h)}else domUtils.setStyle(f,\"text-align\",\"\");d.selectNode(e).select()}domUtils.setStyle(e,\"float\",\"none\"==b?\"\":b),\"none\"==b&&domUtils.removeAttributes(e,\"align\");break;case\"center\":if(\"center\"!=c.queryCommandValue(\"imagefloat\")){for(i=e.parentNode,domUtils.setStyle(e,\"float\",\"\"),domUtils.removeAttributes(e,\"align\"),f=e;i&&1==domUtils.getChildCount(i,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)})&&(dtd.$inline[i.tagName]||\"A\"==i.tagName);)f=i,i=i.parentNode;d.setStartBefore(f).setCursor(!1),i=c.document.createElement(\"div\"),i.appendChild(f),domUtils.setStyle(f,\"float\",\"\"),c.execCommand(\"insertHtml\",'<p id=\"_img_parent_tmp\" style=\"text-align:center\">'+i.innerHTML+\"</p>\"),f=c.document.getElementById(\"_img_parent_tmp\"),f.removeAttribute(\"id\"),f=f.firstChild,d.selectNode(f).select(),h=f.parentNode.nextSibling,h&&domUtils.isEmptyNode(h)&&domUtils.remove(h)}}}},queryCommandValue:function(){var a,b,c=this.selection.getRange();return c.collapsed?\"none\":(a=c.getClosedNode(),a&&1==a.nodeType&&\"IMG\"==a.tagName?(b=domUtils.getComputedStyle(a,\"float\")||a.getAttribute(\"align\"),\"none\"==b&&(b=\"center\"==domUtils.getComputedStyle(a.parentNode,\"text-align\")?\"center\":b),{left:1,right:1,center:1}[b]?b:\"none\"):\"none\")},queryCommandState:function(){var a,b=this.selection.getRange();return b.collapsed?-1:(a=b.getClosedNode(),a&&1==a.nodeType&&\"IMG\"==a.tagName?0:-1)}},UE.commands.insertimage={execCommand:function(a,b){if(b=utils.isArray(b)?b:[b],b.length){var c=this,d=c.selection.getRange(),e=d.getClosedNode();if(c.fireEvent(\"beforeinsertimage\",b)!==!0){if(!e||!/img/i.test(e.tagName)||\"edui-faked-video\"==e.className&&e.className.indexOf(\"edui-upload-video\")==-1||e.getAttribute(\"word_img\")){var f,g=[],h=\"\";if(f=b[0],1==b.length)h='<img src=\"'+f.src+'\" '+(f._src?' _src=\"'+f._src+'\" ':\"\")+(f.width?'width=\"'+f.width+'\" ':\"\")+(f.height?' height=\"'+f.height+'\" ':\"\")+(\"left\"==f.floatStyle||\"right\"==f.floatStyle?' style=\"float:'+f.floatStyle+';\"':\"\")+(f.title&&\"\"!=f.title?' title=\"'+f.title+'\"':\"\")+(f.border&&\"0\"!=f.border?' border=\"'+f.border+'\"':\"\")+(f.alt&&\"\"!=f.alt?' alt=\"'+f.alt+'\"':\"\")+(f.hspace&&\"0\"!=f.hspace?' hspace = \"'+f.hspace+'\"':\"\")+(f.vspace&&\"0\"!=f.vspace?' vspace = \"'+f.vspace+'\"':\"\")+\"/>\",\"center\"==f.floatStyle&&(h='<p style=\"text-align: center\">'+h+\"</p>\"),g.push(h);else for(var i=0;f=b[i++];)h=\"<p \"+(\"center\"==f.floatStyle?'style=\"text-align: center\" ':\"\")+'><img src=\"'+f.src+'\" '+(f.width?'width=\"'+f.width+'\" ':\"\")+(f._src?' _src=\"'+f._src+'\" ':\"\")+(f.height?' height=\"'+f.height+'\" ':\"\")+' style=\"'+(f.floatStyle&&\"center\"!=f.floatStyle?\"float:\"+f.floatStyle+\";\":\"\")+(f.border||\"\")+'\" '+(f.title?' title=\"'+f.title+'\"':\"\")+\" /></p>\",g.push(h);c.execCommand(\"insertHtml\",g.join(\"\"))}else{var j=b.shift(),k=j.floatStyle;delete j.floatStyle,domUtils.setAttributes(e,j),c.execCommand(\"imagefloat\",k),b.length>0&&(d.setStartAfter(e).setCursor(!1,!0),c.execCommand(\"insertimage\",b))}c.fireEvent(\"afterinsertimage\",b)}}}},UE.plugins.justify=function(){var a=domUtils.isBlockElm,b={left:1,right:1,center:1,justify:1},c=function(b,c){var d=b.createBookmark(),e=function(a){return 1==a.nodeType?\"br\"!=a.tagName.toLowerCase()&&!domUtils.isBookmarkNode(a):!domUtils.isWhitespace(a)};b.enlarge(!0);for(var f,g=b.createBookmark(),h=domUtils.getNextDomNode(g.start,!1,e),i=b.cloneRange();h&&!(domUtils.getPosition(h,g.end)&domUtils.POSITION_FOLLOWING);)if(3!=h.nodeType&&a(h))h=domUtils.getNextDomNode(h,!0,e);else{for(i.setStartBefore(h);h&&h!==g.end&&!a(h);)f=h,h=domUtils.getNextDomNode(h,!1,null,function(b){return!a(b)});i.setEndAfter(f);var j=i.getCommonAncestor();if(!domUtils.isBody(j)&&a(j))domUtils.setStyles(j,utils.isString(c)?{\"text-align\":c}:c),h=j;else{var k=b.document.createElement(\"p\");domUtils.setStyles(k,utils.isString(c)?{\"text-align\":c}:c);var l=i.extractContents();k.appendChild(l),i.insertNode(k),h=k}h=domUtils.getNextDomNode(h,!1,e)}return b.moveToBookmark(g).moveToBookmark(d)};UE.commands.justify={execCommand:function(a,b){var d,e=this.selection.getRange();return e.collapsed&&(d=this.document.createTextNode(\"p\"),e.insertNode(d)),c(e,b),d&&(e.setStartBefore(d).collapse(!0),domUtils.remove(d)),e.select(),!0},queryCommandValue:function(){var a=this.selection.getStart(),c=domUtils.getComputedStyle(a,\"text-align\");return b[c]?c:\"left\"},queryCommandState:function(){var a=this.selection.getStart(),b=a&&domUtils.findParentByTagName(a,[\"td\",\"th\",\"caption\"],!0);return b?-1:0}}},UE.plugins.font=function(){function a(a){for(var b;(b=a.parentNode)&&\"SPAN\"==b.tagName&&1==domUtils.getChildCount(b,function(a){return!domUtils.isBookmarkNode(a)&&!domUtils.isBr(a)});)b.style.cssText+=a.style.cssText,domUtils.remove(a,!0),a=b}function b(a,b,c){if(g[b]&&(a.adjustmentBoundary(),!a.collapsed&&1==a.startContainer.nodeType)){var d=a.startContainer.childNodes[a.startOffset];if(d&&domUtils.isTagNode(d,\"span\")){var e=a.createBookmark();utils.each(domUtils.getElementsByTagName(d,\"span\"),function(a){a.parentNode&&!domUtils.isBookmarkNode(a)&&(\"backcolor\"==b&&domUtils.getComputedStyle(a,\"background-color\").toLowerCase()===c||(domUtils.removeStyle(a,g[b]),0==a.style.cssText.replace(/^\\s+$/,\"\").length&&domUtils.remove(a,!0)))}),a.moveToBookmark(e)}}}function c(c,d,e){var f,g=c.collapsed,h=c.createBookmark();if(g)for(f=h.start.parentNode;dtd.$inline[f.tagName];)f=f.parentNode;else f=domUtils.getCommonAncestor(h.start,h.end);utils.each(domUtils.getElementsByTagName(f,\"span\"),function(b){if(b.parentNode&&!domUtils.isBookmarkNode(b)){if(/\\s*border\\s*:\\s*none;?\\s*/i.test(b.style.cssText))return void(/^\\s*border\\s*:\\s*none;?\\s*$/.test(b.style.cssText)?domUtils.remove(b,!0):domUtils.removeStyle(b,\"border\"));if(/border/i.test(b.style.cssText)&&\"SPAN\"==b.parentNode.tagName&&/border/i.test(b.parentNode.style.cssText)&&(b.style.cssText=b.style.cssText.replace(/border[^:]*:[^;]+;?/gi,\"\")),\"fontborder\"!=d||\"none\"!=e)for(var c=b.nextSibling;c&&1==c.nodeType&&\"SPAN\"==c.tagName;)if(domUtils.isBookmarkNode(c)&&\"fontborder\"==d)b.appendChild(c),c=b.nextSibling;else{if(c.style.cssText==b.style.cssText&&(domUtils.moveChild(c,b),domUtils.remove(c)),b.nextSibling===c)break;c=b.nextSibling}if(a(b),browser.ie&&browser.version>8){var f=domUtils.findParent(b,function(a){return\"SPAN\"==a.tagName&&/background-color/.test(a.style.cssText)});f&&!/background-color/.test(b.style.cssText)&&(b.style.backgroundColor=f.style.backgroundColor)}}}),c.moveToBookmark(h),b(c,d,e)}var d=this,e={forecolor:\"color\",backcolor:\"background-color\",fontsize:\"font-size\",fontfamily:\"font-family\",underline:\"text-decoration\",strikethrough:\"text-decoration\",fontborder:\"border\"},f={underline:1,strikethrough:1,fontborder:1},g={forecolor:\"color\",backcolor:\"background-color\",fontsize:\"font-size\",fontfamily:\"font-family\"};d.setOpt({fontfamily:[{name:\"songti\",val:\"宋体,SimSun\"},{name:\"yahei\",val:\"微软雅黑,Microsoft YaHei\"},{name:\"kaiti\",val:\"楷体,楷体_GB2312, SimKai\"},{name:\"heiti\",val:\"黑体, SimHei\"},{name:\"lishu\",val:\"隶书, SimLi\"},{name:\"andaleMono\",val:\"andale mono\"},{name:\"arial\",val:\"arial, helvetica,sans-serif\"},{name:\"arialBlack\",val:\"arial black,avant garde\"},{name:\"comicSansMs\",val:\"comic sans ms\"},{name:\"impact\",val:\"impact,chicago\"},{name:\"timesNewRoman\",val:\"times new roman\"}],fontsize:[10,11,12,14,16,18,20,24,36]}),d.addInputRule(function(a){utils.each(a.getNodesByTagName(\"u s del font strike\"),function(a){if(\"font\"==a.tagName){var b=[];for(var c in a.attrs)switch(c){case\"size\":b.push(\"font-size:\"+({1:\"10\",2:\"12\",3:\"16\",4:\"18\",5:\"24\",6:\"32\",7:\"48\"}[a.attrs[c]]||a.attrs[c])+\"px\");break;case\"color\":b.push(\"color:\"+a.attrs[c]);break;case\"face\":b.push(\"font-family:\"+a.attrs[c]);break;case\"style\":b.push(a.attrs[c])}a.attrs={style:b.join(\";\")}}else{var d=\"u\"==a.tagName?\"underline\":\"line-through\";a.attrs={style:(a.getAttr(\"style\")||\"\")+\"text-decoration:\"+d+\";\"}}a.tagName=\"span\"})});for(var h in e)!function(a,b){UE.commands[a]={execCommand:function(d,e){e=e||(this.queryCommandState(d)?\"none\":\"underline\"==d?\"underline\":\"fontborder\"==d?\"1px solid #000\":\"line-through\");var g,h=this,i=this.selection.getRange();if(\"default\"==e)i.collapsed&&(g=h.document.createTextNode(\"font\"),i.insertNode(g).select()),h.execCommand(\"removeFormat\",\"span,a\",b),g&&(i.setStartBefore(g).collapse(!0),domUtils.remove(g)),c(i,d,e),i.select();else if(i.collapsed){var j=domUtils.findParentByTagName(i.startContainer,\"span\",!0);if(g=h.document.createTextNode(\"font\"),!j||j.children.length||j[browser.ie?\"innerText\":\"textContent\"].replace(fillCharReg,\"\").length){if(i.insertNode(g),i.selectNode(g).select(),j=i.document.createElement(\"span\"),f[a]){if(domUtils.findParentByTagName(g,\"a\",!0))return i.setStartBefore(g).setCursor(),void domUtils.remove(g);h.execCommand(\"removeFormat\",\"span,a\",b)}if(j.style.cssText=b+\":\"+e,g.parentNode.insertBefore(j,g),!browser.ie||browser.ie&&9==browser.version)for(var k=j.parentNode;!domUtils.isBlockElm(k);)\"SPAN\"==k.tagName&&(j.style.cssText=k.style.cssText+\";\"+j.style.cssText),k=k.parentNode;opera?setTimeout(function(){i.setStart(j,0).collapse(!0),c(i,d,e),i.select()}):(i.setStart(j,0).collapse(!0),c(i,d,e),i.select())}else i.insertNode(g),f[a]&&(i.selectNode(g).select(),h.execCommand(\"removeFormat\",\"span,a\",b,null),j=domUtils.findParentByTagName(g,\"span\",!0),i.setStartBefore(g)),j&&(j.style.cssText+=\";\"+b+\":\"+e),i.collapse(!0).select();domUtils.remove(g)}else f[a]&&h.queryCommandValue(a)&&h.execCommand(\"removeFormat\",\"span,a\",b),i=h.selection.getRange(),i.applyInlineStyle(\"span\",{style:b+\":\"+e}),c(i,d,e),i.select();return!0},queryCommandValue:function(a){var c=this.selection.getStart();if(\"underline\"==a||\"strikethrough\"==a){for(var d,e=c;e&&!domUtils.isBlockElm(e)&&!domUtils.isBody(e);){if(1==e.nodeType&&(d=domUtils.getComputedStyle(e,b),\"none\"!=d))return d;e=e.parentNode}return\"none\"}if(\"fontborder\"==a){for(var f,g=c;g&&dtd.$inline[g.tagName];){if((f=domUtils.getComputedStyle(g,\"border\"))&&/1px/.test(f)&&/solid/.test(f))return f;g=g.parentNode}return\"\"}if(\"FontSize\"==a){var h=domUtils.getComputedStyle(c,b),g=/^([\\d\\.]+)(\\w+)$/.exec(h);return g?Math.floor(g[1])+g[2]:h}return domUtils.getComputedStyle(c,b)},queryCommandState:function(a){if(!f[a])return 0;var b=this.queryCommandValue(a);return\"fontborder\"==a?/1px/.test(b)&&/solid/.test(b):\"underline\"==a?/underline/.test(b):/line\\-through/.test(b)}}}(h,e[h])},UE.plugins.link=function(){function a(a){var b=a.startContainer,c=a.endContainer;(b=domUtils.findParentByTagName(b,\"a\",!0))&&a.setStartBefore(b),(c=domUtils.findParentByTagName(c,\"a\",!0))&&a.setEndAfter(c)}function b(b,c,d){var e=b.cloneRange(),f=d.queryCommandValue(\"link\");a(b=b.adjustmentBoundary());var g=b.startContainer;if(1==g.nodeType&&f&&(g=g.childNodes[b.startOffset],g&&1==g.nodeType&&\"A\"==g.tagName&&/^(?:https?|ftp|file)\\s*:\\s*\\/\\//.test(g[browser.ie?\"innerText\":\"textContent\"])&&(g[browser.ie?\"innerText\":\"textContent\"]=utils.html(c.textValue||c.href))),e.collapsed&&!f||(b.removeInlineStyle(\"a\"),e=b.cloneRange()),e.collapsed){var h=b.document.createElement(\"a\"),i=\"\";c.textValue?(i=utils.html(c.textValue),delete c.textValue):i=utils.html(c.href),domUtils.setAttributes(h,c),g=domUtils.findParentByTagName(e.startContainer,\"a\",!0),g&&domUtils.isInNodeEndBoundary(e,g)&&b.setStartAfter(g).collapse(!0),h[browser.ie?\"innerText\":\"textContent\"]=i,b.insertNode(h).selectNode(h)}else b.applyInlineStyle(\"a\",c)}UE.commands.unlink={execCommand:function(){var b,c=this.selection.getRange();c.collapsed&&!domUtils.findParentByTagName(c.startContainer,\"a\",!0)||(b=c.createBookmark(),a(c),c.removeInlineStyle(\"a\").moveToBookmark(b).select())},queryCommandState:function(){return!this.highlight&&this.queryCommandValue(\"link\")?0:-1}},UE.commands.link={execCommand:function(a,c){var d;c._href&&(c._href=utils.unhtml(c._href,/[<\">]/g)),c.href&&(c.href=utils.unhtml(c.href,/[<\">]/g)),c.textValue&&(c.textValue=utils.unhtml(c.textValue,/[<\">]/g)),b(d=this.selection.getRange(),c,this),d.collapse().select(!0)},queryCommandValue:function(){var a,b=this.selection.getRange();if(!b.collapsed){b.shrinkBoundary();var c=3!=b.startContainer.nodeType&&b.startContainer.childNodes[b.startOffset]?b.startContainer.childNodes[b.startOffset]:b.startContainer,d=3==b.endContainer.nodeType||0==b.endOffset?b.endContainer:b.endContainer.childNodes[b.endOffset-1],e=b.getCommonAncestor();if(a=domUtils.findParentByTagName(e,\"a\",!0),!a&&1==e.nodeType)for(var f,g,h,i=e.getElementsByTagName(\"a\"),j=0;h=i[j++];)if(f=domUtils.getPosition(h,c),g=domUtils.getPosition(h,d),(f&domUtils.POSITION_FOLLOWING||f&domUtils.POSITION_CONTAINS)&&(g&domUtils.POSITION_PRECEDING||g&domUtils.POSITION_CONTAINS)){a=h;break}return a}if(a=b.startContainer,a=1==a.nodeType?a:a.parentNode,a&&(a=domUtils.findParentByTagName(a,\"a\",!0))&&!domUtils.isInNodeEndBoundary(b,a))return a},queryCommandState:function(){var a=this.selection.getRange().getClosedNode(),b=a&&(\"edui-faked-video\"==a.className||a.className.indexOf(\"edui-upload-video\")!=-1);return b?-1:0}}},UE.plugins.insertframe=function(){function a(){b._iframe&&delete b._iframe}var b=this;b.addListener(\"selectionchange\",function(){a()})},UE.commands.scrawl={queryCommandState:function(){return browser.ie&&browser.version<=8?-1:0}},UE.plugins.removeformat=function(){var a=this;a.setOpt({removeFormatTags:\"b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var\",removeFormatAttributes:\"class,style,lang,width,height,align,hspace,valign\"}),a.commands.removeformat={execCommand:function(a,b,c,d,e){function f(a){if(3==a.nodeType||\"span\"!=a.tagName.toLowerCase())return 0;if(browser.ie){var b=a.attributes;if(b.length){for(var c=0,d=b.length;c<d;c++)if(b[c].specified)return 0;return 1}}return!a.attributes.length}function g(a){var b=a.createBookmark();if(a.collapsed&&a.enlarge(!0),!e){var d=domUtils.findParentByTagName(a.startContainer,\"a\",!0);d&&a.setStartBefore(d),d=domUtils.findParentByTagName(a.endContainer,\"a\",!0),d&&a.setEndAfter(d)}for(h=a.createBookmark(),p=h.start;(i=p.parentNode)&&!domUtils.isBlockElm(i);)domUtils.breakParent(p,i),domUtils.clearEmptySibling(p);if(h.end){for(p=h.end;(i=p.parentNode)&&!domUtils.isBlockElm(i);)domUtils.breakParent(p,i),domUtils.clearEmptySibling(p);for(var g,l=domUtils.getNextDomNode(h.start,!1,m);l&&l!=h.end;)g=domUtils.getNextDomNode(l,!0,m),dtd.$empty[l.tagName.toLowerCase()]||domUtils.isBookmarkNode(l)||(j.test(l.tagName)?c?(domUtils.removeStyle(l,c),f(l)&&\"text-decoration\"!=c&&domUtils.remove(l,!0)):domUtils.remove(l,!0):dtd.$tableContent[l.tagName]||dtd.$list[l.tagName]||(domUtils.removeAttributes(l,k),f(l)&&domUtils.remove(l,!0))),l=g}var n=h.start.parentNode;!domUtils.isBlockElm(n)||dtd.$tableContent[n.tagName]||dtd.$list[n.tagName]||domUtils.removeAttributes(n,k),n=h.end.parentNode,h.end&&domUtils.isBlockElm(n)&&!dtd.$tableContent[n.tagName]&&!dtd.$list[n.tagName]&&domUtils.removeAttributes(n,k),a.moveToBookmark(h).moveToBookmark(b);for(var o,p=a.startContainer,q=a.collapsed;1==p.nodeType&&domUtils.isEmptyNode(p)&&dtd.$removeEmpty[p.tagName];)o=p.parentNode,a.setStartBefore(p),a.startContainer===a.endContainer&&a.endOffset--,domUtils.remove(p),p=o;if(!q)for(p=a.endContainer;1==p.nodeType&&domUtils.isEmptyNode(p)&&dtd.$removeEmpty[p.tagName];)o=p.parentNode,a.setEndBefore(p),domUtils.remove(p),p=o}var h,i,j=new RegExp(\"^(?:\"+(b||this.options.removeFormatTags).replace(/,/g,\"|\")+\")$\",\"i\"),k=c?[]:(d||this.options.removeFormatAttributes).split(\",\"),l=new dom.Range(this.document),m=function(a){return 1==a.nodeType};l=this.selection.getRange(),g(l),l.select()}}},UE.plugins.blockquote=function(){function a(a){return domUtils.filterNodeList(a.selection.getStartElementPath(),\"blockquote\")}var b=this;b.commands.blockquote={execCommand:function(b,c){var d=this.selection.getRange(),e=a(this),f=dtd.blockquote,g=d.createBookmark();if(e){var h=d.startContainer,i=domUtils.isBlockElm(h)?h:domUtils.findParent(h,function(a){return domUtils.isBlockElm(a)}),j=d.endContainer,k=domUtils.isBlockElm(j)?j:domUtils.findParent(j,function(a){return domUtils.isBlockElm(a)});i=domUtils.findParentByTagName(i,\"li\",!0)||i,k=domUtils.findParentByTagName(k,\"li\",!0)||k,\"LI\"==i.tagName||\"TD\"==i.tagName||i===e||domUtils.isBody(i)?domUtils.remove(e,!0):domUtils.breakParent(i,e),i!==k&&(e=domUtils.findParentByTagName(k,\"blockquote\"),e&&(\"LI\"==k.tagName||\"TD\"==k.tagName||domUtils.isBody(k)?e.parentNode&&domUtils.remove(e,!0):domUtils.breakParent(k,e)));for(var l,m=domUtils.getElementsByTagName(this.document,\"blockquote\"),n=0;l=m[n++];)l.childNodes.length?domUtils.getPosition(l,i)&domUtils.POSITION_FOLLOWING&&domUtils.getPosition(l,k)&domUtils.POSITION_PRECEDING&&domUtils.remove(l,!0):domUtils.remove(l)}else{for(var o=d.cloneRange(),p=1==o.startContainer.nodeType?o.startContainer:o.startContainer.parentNode,q=p,r=1;;){if(domUtils.isBody(p)){q!==p?d.collapsed?(o.selectNode(q),r=0):o.setStartBefore(q):o.setStart(p,0);break}if(!f[p.tagName]){d.collapsed?o.selectNode(q):o.setStartBefore(q);break}q=p,p=p.parentNode}if(r)for(q=p=p=1==o.endContainer.nodeType?o.endContainer:o.endContainer.parentNode;;){if(domUtils.isBody(p)){q!==p?o.setEndAfter(q):o.setEnd(p,p.childNodes.length);break}if(!f[p.tagName]){o.setEndAfter(q);break}q=p,p=p.parentNode}p=d.document.createElement(\"blockquote\"),domUtils.setAttributes(p,c),p.appendChild(o.extractContents()),o.insertNode(p);for(var s,t=domUtils.getElementsByTagName(p,\"blockquote\"),n=0;s=t[n++];)s.parentNode&&domUtils.remove(s,!0)}d.moveToBookmark(g).select()},queryCommandState:function(){return a(this)?1:0}}},UE.commands.touppercase=UE.commands.tolowercase={execCommand:function(a){var b=this,c=b.selection.getRange();if(c.collapsed)return c;for(var d=c.createBookmark(),e=d.end,f=function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)},g=domUtils.getNextDomNode(d.start,!1,f);g&&domUtils.getPosition(g,e)&domUtils.POSITION_PRECEDING&&(3==g.nodeType&&(g.nodeValue=g.nodeValue[\"touppercase\"==a?\"toUpperCase\":\"toLowerCase\"]()),g=domUtils.getNextDomNode(g,!0,f),g!==e););c.moveToBookmark(d).select()}},UE.commands.indent={execCommand:function(){var a=this,b=a.queryCommandState(\"indent\")?\"0em\":a.options.indentValue||\"2em\";a.execCommand(\"Paragraph\",\"p\",{style:\"text-indent:\"+b})},queryCommandState:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),\"p h1 h2 h3 h4 h5 h6\");return a&&a.style.textIndent&&parseInt(a.style.textIndent)?1:0}},UE.commands.print={execCommand:function(){this.window.print()},notNeedUndo:1},UE.commands.preview={execCommand:function(){var a=window.open(\"\",\"_blank\",\"\"),b=a.document;b.open(),b.write('<!DOCTYPE html><html><head><meta charset=\"utf-8\"/><script src=\"'+this.options.UEDITOR_HOME_URL+\"ueditor.parse.js\\\"></script><script>setTimeout(function(){uParse('div',{rootPath: '\"+this.options.UEDITOR_HOME_URL+\"'})},300)</script></head><body><div>\"+this.getContent(null,null,!0)+\"</div></body></html>\"),b.close()},notNeedUndo:1},UE.plugins.selectall=function(){var a=this;a.commands.selectall={execCommand:function(){var a=this,b=a.body,c=a.selection.getRange();c.selectNodeContents(b),domUtils.isEmptyBlock(b)&&(browser.opera&&b.firstChild&&1==b.firstChild.nodeType&&c.setStartAtFirst(b.firstChild),c.collapse(!0)),c.select(!0)},notNeedUndo:1},a.addshortcutkey({selectAll:\"ctrl+65\"})},UE.plugins.paragraph=function(){var a=this,b=domUtils.isBlockElm,c=[\"TD\",\"LI\",\"PRE\"],d=function(a,d,e,f){var g,h=a.createBookmark(),i=function(a){return 1==a.nodeType?\"br\"!=a.tagName.toLowerCase()&&!domUtils.isBookmarkNode(a):!domUtils.isWhitespace(a)};a.enlarge(!0);for(var j,k=a.createBookmark(),l=domUtils.getNextDomNode(k.start,!1,i),m=a.cloneRange();l&&!(domUtils.getPosition(l,k.end)&domUtils.POSITION_FOLLOWING);)if(3!=l.nodeType&&b(l))l=domUtils.getNextDomNode(l,!0,i);else{for(m.setStartBefore(l);l&&l!==k.end&&!b(l);)j=l,l=domUtils.getNextDomNode(l,!1,null,function(a){return!b(a)});m.setEndAfter(j),g=a.document.createElement(d),e&&(domUtils.setAttributes(g,e),f&&\"customstyle\"==f&&e.style&&(g.style.cssText=e.style)),g.appendChild(m.extractContents()),domUtils.isEmptyNode(g)&&domUtils.fillChar(a.document,g),m.insertNode(g);var n=g.parentNode;b(n)&&!domUtils.isBody(g.parentNode)&&utils.indexOf(c,n.tagName)==-1&&(f&&\"customstyle\"==f||(n.getAttribute(\"dir\")&&g.setAttribute(\"dir\",n.getAttribute(\"dir\")),n.style.cssText&&(g.style.cssText=n.style.cssText+\";\"+g.style.cssText),n.style.textAlign&&!g.style.textAlign&&(g.style.textAlign=n.style.textAlign),n.style.textIndent&&!g.style.textIndent&&(g.style.textIndent=n.style.textIndent),n.style.padding&&!g.style.padding&&(g.style.padding=n.style.padding)),e&&/h\\d/i.test(n.tagName)&&!/h\\d/i.test(g.tagName)?(domUtils.setAttributes(n,e),f&&\"customstyle\"==f&&e.style&&(n.style.cssText=e.style),domUtils.remove(g.parentNode,!0),g=n):domUtils.remove(g.parentNode,!0)),l=utils.indexOf(c,n.tagName)!=-1?n:g,l=domUtils.getNextDomNode(l,!1,i)}return a.moveToBookmark(k).moveToBookmark(h)};a.setOpt(\"paragraph\",{p:\"\",h1:\"\",h2:\"\",h3:\"\",h4:\"\",h5:\"\",h6:\"\"}),a.commands.paragraph={execCommand:function(a,b,c,e){var f=this.selection.getRange();if(f.collapsed){var g=this.document.createTextNode(\"p\");if(f.insertNode(g),browser.ie){var h=g.previousSibling;h&&domUtils.isWhitespace(h)&&domUtils.remove(h),h=g.nextSibling,h&&domUtils.isWhitespace(h)&&domUtils.remove(h)}}if(f=d(f,b,c,e),g&&(f.setStartBefore(g).collapse(!0),pN=g.parentNode,domUtils.remove(g),domUtils.isBlockElm(pN)&&domUtils.isEmptyNode(pN)&&domUtils.fillNode(this.document,pN)),browser.gecko&&f.collapsed&&1==f.startContainer.nodeType){var i=f.startContainer.childNodes[f.startOffset];i&&1==i.nodeType&&i.tagName.toLowerCase()==b&&f.setStart(i,0).collapse(!0)}return f.select(),!0},queryCommandValue:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),\"p h1 h2 h3 h4 h5 h6\");return a?a.tagName.toLowerCase():\"\"}}},function(){var a=domUtils.isBlockElm,b=function(a){return domUtils.filterNodeList(a.selection.getStartElementPath(),function(a){return a&&1==a.nodeType&&a.getAttribute(\"dir\")})},c=function(c,d,e){var f,g=function(a){return 1==a.nodeType?!domUtils.isBookmarkNode(a):!domUtils.isWhitespace(a)},h=b(d);if(h&&c.collapsed)return h.setAttribute(\"dir\",e),c;f=c.createBookmark(),c.enlarge(!0);for(var i,j=c.createBookmark(),k=domUtils.getNextDomNode(j.start,!1,g),l=c.cloneRange();k&&!(domUtils.getPosition(k,j.end)&domUtils.POSITION_FOLLOWING);)if(3!=k.nodeType&&a(k))k=domUtils.getNextDomNode(k,!0,g);else{for(l.setStartBefore(k);k&&k!==j.end&&!a(k);)i=k,k=domUtils.getNextDomNode(k,!1,null,function(b){return!a(b)});l.setEndAfter(i);var m=l.getCommonAncestor();if(!domUtils.isBody(m)&&a(m))m.setAttribute(\"dir\",e),k=m;else{var n=c.document.createElement(\"p\");n.setAttribute(\"dir\",e);var o=l.extractContents();n.appendChild(o),l.insertNode(n),k=n}k=domUtils.getNextDomNode(k,!1,g)}return c.moveToBookmark(j).moveToBookmark(f)};UE.commands.directionality={execCommand:function(a,b){var d=this.selection.getRange();if(d.collapsed){var e=this.document.createTextNode(\"d\");d.insertNode(e)}return c(d,this,b),e&&(d.setStartBefore(e).collapse(!0),domUtils.remove(e)),d.select(),!0},queryCommandValue:function(){var a=b(this);return a?a.getAttribute(\"dir\"):\"ltr\"}}}(),UE.plugins.horizontal=function(){var a=this;a.commands.horizontal={execCommand:function(a){var b=this;if(b.queryCommandState(a)!==-1){b.execCommand(\"insertHtml\",\"<hr>\");var c=b.selection.getRange(),d=c.startContainer;if(1==d.nodeType&&!d.childNodes[c.startOffset]){var e;(e=d.childNodes[c.startOffset-1])&&1==e.nodeType&&\"HR\"==e.tagName&&(\"p\"==b.options.enterTag?(e=b.document.createElement(\"p\"),c.insertNode(e),c.setStart(e,0).setCursor()):(e=b.document.createElement(\"br\"),c.insertNode(e),c.setStartBefore(e).setCursor()))}return!0}},queryCommandState:function(){return domUtils.filterNodeList(this.selection.getStartElementPath(),\"table\")?-1:0}},a.addListener(\"delkeydown\",function(a,b){var c=this.selection.getRange();if(c.txtToElmBoundary(!0),domUtils.isStartInblock(c)){var d=c.startContainer,e=d.previousSibling;if(e&&domUtils.isTagNode(e,\"hr\"))return domUtils.remove(e),c.select(),domUtils.preventDefault(b),!0}})},UE.commands.time=UE.commands.date={execCommand:function(a,b){function c(a,b){var c=(\"0\"+a.getHours()).slice(-2),d=(\"0\"+a.getMinutes()).slice(-2),e=(\"0\"+a.getSeconds()).slice(-2);return b=b||\"hh:ii:ss\",b.replace(/hh/gi,c).replace(/ii/gi,d).replace(/ss/gi,e)}function d(a,b){var c=(\"000\"+a.getFullYear()).slice(-4),d=c.slice(-2),e=(\"0\"+(a.getMonth()+1)).slice(-2),f=(\"0\"+a.getDate()).slice(-2);return b=b||\"yyyy-mm-dd\",b.replace(/yyyy/gi,c).replace(/yy/gi,d).replace(/mm/gi,e).replace(/dd/gi,f)}var e=new Date;this.execCommand(\"insertHtml\",\"time\"==a?c(e,b):d(e,b))}},UE.plugins.rowspacing=function(){var a=this;a.setOpt({rowspacingtop:[\"5\",\"10\",\"15\",\"20\",\"25\"],rowspacingbottom:[\"5\",\"10\",\"15\",\"20\",\"25\"]}),a.commands.rowspacing={execCommand:function(a,b,c){return this.execCommand(\"paragraph\",\"p\",{style:\"margin-\"+c+\":\"+b+\"px\"}),!0},queryCommandValue:function(a,b){var c,d=domUtils.filterNodeList(this.selection.getStartElementPath(),function(a){return domUtils.isBlockElm(a)});return d?(c=domUtils.getComputedStyle(d,\"margin-\"+b).replace(/[^\\d]/g,\"\"),c?c:0):0}}},UE.plugins.lineheight=function(){var a=this;a.setOpt({lineheight:[\"1\",\"1.5\",\"1.75\",\"2\",\"3\",\"4\",\"5\"]}),a.commands.lineheight={execCommand:function(a,b){return this.execCommand(\"paragraph\",\"p\",{style:\"line-height:\"+(\"1\"==b?\"normal\":b+\"em\")}),!0},queryCommandValue:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),function(a){return domUtils.isBlockElm(a)});if(a){var b=domUtils.getComputedStyle(a,\"line-height\");return\"normal\"==b?1:b.replace(/[^\\d.]*/gi,\"\")}}}},UE.plugins.insertcode=function(){var a=this;a.ready(function(){utils.cssRule(\"pre\",\"pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;}\",a.document)}),a.setOpt(\"insertcode\",{as3:\"ActionScript3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"Css\",cf:\"CodeFunction\",\"c#\":\"C#\",delphi:\"Delphi\",diff:\"Diff\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"Html\",java:\"Java\",jfx:\"JavaFx\",js:\"Javascript\",pl:\"Perl\",php:\"Php\",plain:\"Plain Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"Sql\",vb:\"Vb\",xml:\"Xml\"}),a.commands.insertcode={execCommand:function(a,b){var c=this,d=c.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,\"pre\",!0);if(e)e.className=\"brush:\"+b+\";toolbar:false;\";else{var f=\"\";if(d.collapsed)f=browser.ie&&browser.ie11below?browser.version<=8?\"&nbsp;\":\"\":\"<br/>\";else{var g=d.extractContents(),h=c.document.createElement(\"div\");h.appendChild(g),utils.each(UE.filterNode(UE.htmlparser(h.innerHTML.replace(/[\\r\\t]/g,\"\")),c.options.filterTxtRules).children,function(a){if(browser.ie&&browser.ie11below&&browser.version>8)\"element\"==a.type?\"br\"==a.tagName?f+=\"\\n\":dtd.$empty[a.tagName]||(utils.each(a.children,function(b){\"element\"==b.type?\"br\"==b.tagName?f+=\"\\n\":dtd.$empty[a.tagName]||(f+=b.innerText()):f+=b.data}),/\\n$/.test(f)||(f+=\"\\n\")):f+=a.data+\"\\n\",!a.nextSibling()&&/\\n$/.test(f)&&(f=f.replace(/\\n$/,\"\"));else if(browser.ie&&browser.ie11below)\"element\"==a.type?\"br\"==a.tagName?f+=\"<br>\":dtd.$empty[a.tagName]||(utils.each(a.children,function(b){\"element\"==b.type?\"br\"==b.tagName?f+=\"<br>\":dtd.$empty[a.tagName]||(f+=b.innerText()):f+=b.data}),/br>$/.test(f)||(f+=\"<br>\")):f+=a.data+\"<br>\",!a.nextSibling()&&/<br>$/.test(f)&&(f=f.replace(/<br>$/,\"\"));else if(f+=\"element\"==a.type?dtd.$empty[a.tagName]?\"\":a.innerText():a.data,!/br\\/?\\s*>$/.test(f)){if(!a.nextSibling())return;f+=\"<br>\"}})}c.execCommand(\"inserthtml\",'<pre id=\"coder\"class=\"brush:'+b+';toolbar:false\">'+f+\"</pre>\",!0),e=c.document.getElementById(\"coder\"),domUtils.removeAttributes(e,\"id\");var i=e.previousSibling;i&&(3==i.nodeType&&1==i.nodeValue.length&&browser.ie&&6==browser.version||domUtils.isEmptyBlock(i))&&domUtils.remove(i);var d=c.selection.getRange();domUtils.isEmptyBlock(e)?d.setStart(e,0).setCursor(!1,!0):d.selectNodeContents(e).select()}},queryCommandValue:function(){var a=this.selection.getStartElementPath(),b=\"\";return utils.each(a,function(a){if(\"PRE\"==a.nodeName){var c=a.className.match(/brush:([^;]+)/);return b=c&&c[1]?c[1]:\"\",!1}}),b}},a.addInputRule(function(a){utils.each(a.getNodesByTagName(\"pre\"),function(a){var b=a.getNodesByTagName(\"br\");if(b.length)return void(browser.ie&&browser.ie11below&&browser.version>8&&utils.each(b,function(a){var b=UE.uNode.createText(\"\\n\");a.parentNode.insertBefore(b,a),a.parentNode.removeChild(a)}));if(!(browser.ie&&browser.ie11below&&browser.version>8)){var c=a.innerText().split(/\\n/);a.innerHTML(\"\"),utils.each(c,function(b){b.length&&a.appendChild(UE.uNode.createText(b)),a.appendChild(UE.uNode.createElement(\"br\"))})}})}),a.addOutputRule(function(a){utils.each(a.getNodesByTagName(\"pre\"),function(a){var b=\"\";utils.each(a.children,function(a){b+=\"text\"==a.type?a.data.replace(/[ ]/g,\"&nbsp;\").replace(/\\n$/,\"\"):\"br\"==a.tagName?\"\\n\":dtd.$empty[a.tagName]?a.innerText():\"\"}),a.innerText(b.replace(/(&nbsp;|\\n)+$/,\"\"))})}),a.notNeedCodeQuery={help:1,undo:1,redo:1,source:1,print:1,searchreplace:1,fullscreen:1,preview:1,insertparagraph:1,elementpath:1,insertcode:1,inserthtml:1,selectall:1};a.queryCommandState;a.queryCommandState=function(a){var b=this;return!b.notNeedCodeQuery[a.toLowerCase()]&&b.selection&&b.queryCommandValue(\"insertcode\")?-1:UE.Editor.prototype.queryCommandState.apply(this,arguments)},a.addListener(\"beforeenterkeydown\",function(){var b=a.selection.getRange(),c=domUtils.findParentByTagName(b.startContainer,\"pre\",!0);if(c){if(a.fireEvent(\"saveScene\"),\nb.collapsed||b.deleteContents(),!browser.ie||browser.ie9above){var c,d=a.document.createElement(\"br\");b.insertNode(d).setStartAfter(d).collapse(!0);var e=d.nextSibling;e||browser.ie&&!(browser.version>10)?b.setStartAfter(d):b.insertNode(d.cloneNode(!1)),c=d.previousSibling;for(var f;c;)if(f=c,c=c.previousSibling,!c||\"BR\"==c.nodeName){c=f;break}if(c){for(var g=\"\";c&&\"BR\"!=c.nodeName&&new RegExp(\"^[\\\\s\"+domUtils.fillChar+\"]*$\").test(c.nodeValue);)g+=c.nodeValue,c=c.nextSibling;if(\"BR\"!=c.nodeName){var h=c.nodeValue.match(new RegExp(\"^([\\\\s\"+domUtils.fillChar+\"]+)\"));h&&h[1]&&(g+=h[1])}g&&(g=a.document.createTextNode(g),b.insertNode(g).setStartAfter(g))}b.collapse(!0).select(!0)}else if(browser.version>8){var i=a.document.createTextNode(\"\\n\"),j=b.startContainer;if(0==b.startOffset){var k=j.previousSibling;if(k){b.insertNode(i);var l=a.document.createTextNode(\" \");b.setStartAfter(i).insertNode(l).setStart(l,0).collapse(!0).select(!0)}}else{b.insertNode(i).setStartAfter(i);var l=a.document.createTextNode(\" \");j=b.startContainer.childNodes[b.startOffset],j&&!/^\\n/.test(j.nodeValue)&&b.setStartBefore(i),b.insertNode(l).setStart(l,0).collapse(!0).select(!0)}}else{var d=a.document.createElement(\"br\");b.insertNode(d),b.insertNode(a.document.createTextNode(domUtils.fillChar)),b.setStartAfter(d),c=d.previousSibling;for(var f;c;)if(f=c,c=c.previousSibling,!c||\"BR\"==c.nodeName){c=f;break}if(c){for(var g=\"\";c&&\"BR\"!=c.nodeName&&new RegExp(\"^[ \"+domUtils.fillChar+\"]*$\").test(c.nodeValue);)g+=c.nodeValue,c=c.nextSibling;if(\"BR\"!=c.nodeName){var h=c.nodeValue.match(new RegExp(\"^([ \"+domUtils.fillChar+\"]+)\"));h&&h[1]&&(g+=h[1])}g=a.document.createTextNode(g),b.insertNode(g).setStartAfter(g)}b.collapse(!0).select()}return a.fireEvent(\"saveScene\"),!0}}),a.addListener(\"tabkeydown\",function(b,c){var d=a.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,\"pre\",!0);if(e){if(a.fireEvent(\"saveScene\"),c.shiftKey);else if(d.collapsed){var f=a.document.createTextNode(\"    \");d.insertNode(f).setStartAfter(f).collapse(!0).select(!0)}else{for(var g=d.createBookmark(),h=g.start.previousSibling;h;){if(e.firstChild===h&&!domUtils.isBr(h)){e.insertBefore(a.document.createTextNode(\"    \"),h);break}if(domUtils.isBr(h)){e.insertBefore(a.document.createTextNode(\"    \"),h.nextSibling);break}h=h.previousSibling}var i=g.end;for(h=g.start.nextSibling,e.firstChild===g.start&&e.insertBefore(a.document.createTextNode(\"    \"),h.nextSibling);h&&h!==i;){if(domUtils.isBr(h)&&h.nextSibling){if(h.nextSibling===i)break;e.insertBefore(a.document.createTextNode(\"    \"),h.nextSibling)}h=h.nextSibling}d.moveToBookmark(g).select()}return a.fireEvent(\"saveScene\"),!0}}),a.addListener(\"beforeinserthtml\",function(a,b){var c=this,d=c.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,\"pre\",!0);if(e){d.collapsed||d.deleteContents();var f=\"\";if(browser.ie&&browser.version>8){utils.each(UE.filterNode(UE.htmlparser(b),c.options.filterTxtRules).children,function(a){\"element\"==a.type?\"br\"==a.tagName?f+=\"\\n\":dtd.$empty[a.tagName]||(utils.each(a.children,function(b){\"element\"==b.type?\"br\"==b.tagName?f+=\"\\n\":dtd.$empty[a.tagName]||(f+=b.innerText()):f+=b.data}),/\\n$/.test(f)||(f+=\"\\n\")):f+=a.data+\"\\n\",!a.nextSibling()&&/\\n$/.test(f)&&(f=f.replace(/\\n$/,\"\"))});var g=c.document.createTextNode(utils.html(f.replace(/&nbsp;/g,\" \")));d.insertNode(g).selectNode(g).select()}else{var h=c.document.createDocumentFragment();utils.each(UE.filterNode(UE.htmlparser(b),c.options.filterTxtRules).children,function(a){\"element\"==a.type?\"br\"==a.tagName?h.appendChild(c.document.createElement(\"br\")):dtd.$empty[a.tagName]||(utils.each(a.children,function(b){\"element\"==b.type?\"br\"==b.tagName?h.appendChild(c.document.createElement(\"br\")):dtd.$empty[a.tagName]||h.appendChild(c.document.createTextNode(utils.html(b.innerText().replace(/&nbsp;/g,\" \")))):h.appendChild(c.document.createTextNode(utils.html(b.data.replace(/&nbsp;/g,\" \"))))}),\"BR\"!=h.lastChild.nodeName&&h.appendChild(c.document.createElement(\"br\"))):h.appendChild(c.document.createTextNode(utils.html(a.data.replace(/&nbsp;/g,\" \")))),a.nextSibling()||\"BR\"!=h.lastChild.nodeName||h.removeChild(h.lastChild)}),d.insertNode(h).select()}return!0}}),a.addListener(\"keydown\",function(a,b){var c=this,d=b.keyCode||b.which;if(40==d){var e,f=c.selection.getRange(),g=f.startContainer;if(f.collapsed&&(e=domUtils.findParentByTagName(f.startContainer,\"pre\",!0))&&!e.nextSibling){for(var h=e.lastChild;h&&\"BR\"==h.nodeName;)h=h.previousSibling;(h===g||f.startContainer===e&&f.startOffset==e.childNodes.length)&&(c.execCommand(\"insertparagraph\"),domUtils.preventDefault(b))}}}),a.addListener(\"delkeydown\",function(b,c){var d=this.selection.getRange();d.txtToElmBoundary(!0);var e=d.startContainer;if(domUtils.isTagNode(e,\"pre\")&&d.collapsed&&domUtils.isStartInblock(d)){var f=a.document.createElement(\"p\");return domUtils.fillNode(a.document,f),e.parentNode.insertBefore(f,e),domUtils.remove(e),d.setStart(f,0).setCursor(!1,!0),domUtils.preventDefault(c),!0}})},UE.commands.cleardoc={execCommand:function(a){var b=this,c=b.options.enterTag,d=b.selection.getRange();\"br\"==c?(b.body.innerHTML=\"<br/>\",d.setStart(b.body,0).setCursor()):(b.body.innerHTML=\"<p>\"+(ie?\"\":\"<br/>\")+\"</p>\",d.setStart(b.body.firstChild,0).setCursor(!1,!0)),setTimeout(function(){b.fireEvent(\"clearDoc\")},0)}},UE.plugin.register(\"anchor\",function(){return{bindEvents:{ready:function(){utils.cssRule(\"anchor\",\".anchorclass{background: url('\"+this.options.themePath+this.options.theme+\"/images/anchor.gif') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}\",this.document)}},outputRule:function(a){utils.each(a.getNodesByTagName(\"img\"),function(a){var b;(b=a.getAttr(\"anchorname\"))&&(a.tagName=\"a\",a.setAttr({anchorname:\"\",name:b,\"class\":\"\"}))})},inputRule:function(a){utils.each(a.getNodesByTagName(\"a\"),function(a){var b;if((b=a.getAttr(\"name\"))&&!a.getAttr(\"href\")){if(/^\\_Toc\\d+$/.test(b))return void a.parentNode.removeChild(a);a.tagName=\"img\",a.setAttr({anchorname:a.getAttr(\"name\"),\"class\":\"anchorclass\"}),a.setAttr(\"name\")}})},commands:{anchor:{execCommand:function(a,b){var c=this.selection.getRange(),d=c.getClosedNode();if(d&&d.getAttribute(\"anchorname\"))b?d.setAttribute(\"anchorname\",b):(c.setStartBefore(d).setCursor(),domUtils.remove(d));else if(b){var e=this.document.createElement(\"img\");c.collapse(!0),domUtils.setAttributes(e,{anchorname:b,\"class\":\"anchorclass\"}),c.insertNode(e).setStartAfter(e).setCursor(!1,!0)}}}}}}),UE.plugins.wordcount=function(){var a=this;a.setOpt(\"wordCount\",!0),a.addListener(\"contentchange\",function(){a.fireEvent(\"wordcount\")});var b;a.addListener(\"ready\",function(){var a=this;domUtils.on(a.body,\"keyup\",function(c){var d=c.keyCode||c.which,e={16:1,18:1,20:1,37:1,38:1,39:1,40:1};d in e||(clearTimeout(b),b=setTimeout(function(){a.fireEvent(\"wordcount\")},200))})})},UE.plugins.pagebreak=function(){function a(a){if(domUtils.isEmptyBlock(a)){for(var b,d=a.firstChild;d&&1==d.nodeType&&domUtils.isEmptyBlock(d);)b=d,d=d.firstChild;!b&&(b=a),domUtils.fillNode(c.document,b)}}function b(a){return a&&1==a.nodeType&&\"HR\"==a.tagName&&\"pagebreak\"==a.className}var c=this,d=[\"td\"];c.setOpt(\"pageBreakTag\",\"_ueditor_page_break_tag_\"),c.ready(function(){utils.cssRule(\"pagebreak\",\".pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}\",c.document)}),c.addInputRule(function(a){a.traversal(function(a){if(\"text\"==a.type&&a.data==c.options.pageBreakTag){var b=UE.uNode.createElement('<hr class=\"pagebreak\" noshade=\"noshade\" size=\"5\" style=\"-webkit-user-select: none;\">');a.parentNode.insertBefore(b,a),a.parentNode.removeChild(a)}})}),c.addOutputRule(function(a){utils.each(a.getNodesByTagName(\"hr\"),function(a){if(\"pagebreak\"==a.getAttr(\"class\")){var b=UE.uNode.createText(c.options.pageBreakTag);a.parentNode.insertBefore(b,a),a.parentNode.removeChild(a)}})}),c.commands.pagebreak={execCommand:function(){var e=c.selection.getRange(),f=c.document.createElement(\"hr\");domUtils.setAttributes(f,{\"class\":\"pagebreak\",noshade:\"noshade\",size:\"5\"}),domUtils.unSelectable(f);var g,h=domUtils.findParentByTagName(e.startContainer,d,!0),i=[];if(h)switch(h.tagName){case\"TD\":if(g=h.parentNode,g.previousSibling)g.parentNode.insertBefore(f,g),i=domUtils.findParents(f);else{var j=domUtils.findParentByTagName(g,\"table\");j.parentNode.insertBefore(f,j),i=domUtils.findParents(f,!0)}g=i[1],f!==g&&domUtils.breakParent(f,g),c.fireEvent(\"afteradjusttable\",c.document)}else{if(!e.collapsed){e.deleteContents();for(var k=e.startContainer;!domUtils.isBody(k)&&domUtils.isBlockElm(k)&&domUtils.isEmptyNode(k);)e.setStartBefore(k).collapse(!0),domUtils.remove(k),k=e.startContainer}e.insertNode(f);for(var l,g=f.parentNode;!domUtils.isBody(g);)domUtils.breakParent(f,g),l=f.nextSibling,l&&domUtils.isEmptyBlock(l)&&domUtils.remove(l),g=f.parentNode;l=f.nextSibling;var m=f.previousSibling;if(b(m)?domUtils.remove(m):m&&a(m),l)b(l)?domUtils.remove(l):a(l),e.setEndAfter(f).collapse(!1);else{var n=c.document.createElement(\"p\");f.parentNode.appendChild(n),domUtils.fillNode(c.document,n),e.setStart(n,0).collapse(!0)}e.select(!0)}}}},UE.plugin.register(\"wordimage\",function(){var a=this,b=[];return{commands:{wordimage:{execCommand:function(){for(var b,c=domUtils.getElementsByTagName(a.body,\"img\"),d=[],e=0;b=c[e++];){var f=b.getAttribute(\"word_img\");f&&d.push(f)}return d},queryCommandState:function(){b=domUtils.getElementsByTagName(a.body,\"img\");for(var c,d=0;c=b[d++];)if(c.getAttribute(\"word_img\"))return 1;return-1},notNeedUndo:!0}},inputRule:function(b){utils.each(b.getNodesByTagName(\"img\"),function(b){var c=b.attrs,d=parseInt(c.width)<128||parseInt(c.height)<43,e=a.options,f=e.UEDITOR_HOME_URL+\"themes/default/images/spacer.gif\";c.src&&/^(?:(file:\\/+))/.test(c.src)&&b.setAttr({width:c.width,height:c.height,alt:c.alt,word_img:c.src,src:f,style:\"background:url(\"+(d?e.themePath+e.theme+\"/images/word.gif\":e.langPath+e.lang+\"/images/localimage.png\")+\") no-repeat center center;border:1px solid #ddd\"})})}}}),UE.plugins.dragdrop=function(){var a=this;a.ready(function(){domUtils.on(this.body,\"dragend\",function(){var b=a.selection.getRange(),c=b.getClosedNode()||a.selection.getStart();if(c&&\"IMG\"==c.tagName){for(var d,e=c.previousSibling;(d=c.nextSibling)&&1==d.nodeType&&\"SPAN\"==d.tagName&&!d.firstChild;)domUtils.remove(d);(!e||1!=e.nodeType||domUtils.isEmptyBlock(e))&&e||d&&(!d||domUtils.isEmptyBlock(d))||(e&&\"P\"==e.tagName&&!domUtils.isEmptyBlock(e)?(e.appendChild(c),domUtils.moveChild(d,e),domUtils.remove(d)):d&&\"P\"==d.tagName&&!domUtils.isEmptyBlock(d)&&d.insertBefore(c,d.firstChild),e&&\"P\"==e.tagName&&domUtils.isEmptyBlock(e)&&domUtils.remove(e),d&&\"P\"==d.tagName&&domUtils.isEmptyBlock(d)&&domUtils.remove(d),b.selectNode(c).select(),a.fireEvent(\"saveScene\"))}})}),a.addListener(\"keyup\",function(b,c){var d=c.keyCode||c.which;if(13==d){var e,f=a.selection.getRange();(e=domUtils.findParentByTagName(f.startContainer,\"p\",!0))&&\"center\"==domUtils.getComputedStyle(e,\"text-align\")&&domUtils.removeStyle(e,\"text-align\")}})},UE.plugins.undo=function(){function a(a,b){if(a.length!=b.length)return 0;for(var c=0,d=a.length;c<d;c++)if(a[c]!=b[c])return 0;return 1}function b(b,c){return b.collapsed!=c.collapsed?0:a(b.startAddress,c.startAddress)&&a(b.endAddress,c.endAddress)?1:0}function c(){this.list=[],this.index=0,this.hasUndo=!1,this.hasRedo=!1,this.undo=function(){if(this.hasUndo){if(!this.list[this.index-1]&&1==this.list.length)return void this.reset();for(;this.list[this.index].content==this.list[this.index-1].content;)if(this.index--,0==this.index)return this.restore(0);this.restore(--this.index)}},this.redo=function(){if(this.hasRedo){for(;this.list[this.index].content==this.list[this.index+1].content;)if(this.index++,this.index==this.list.length-1)return this.restore(this.index);this.restore(++this.index)}},this.restore=function(){var a=this.editor,b=this.list[this.index],c=UE.htmlparser(b.content.replace(h,\"\"));a.options.autoClearEmptyNode=!1,a.filterInputRule(c),a.options.autoClearEmptyNode=j,a.document.body.innerHTML=c.toHtml(),a.fireEvent(\"afterscencerestore\"),browser.ie&&utils.each(domUtils.getElementsByTagName(a.document,\"td th caption p\"),function(b){domUtils.isEmptyNode(b)&&domUtils.fillNode(a.document,b)});try{var d=new dom.Range(a.document).moveToAddress(b.address);d.select(i[d.startContainer.nodeName.toLowerCase()])}catch(e){}this.update(),this.clearKey(),a.fireEvent(\"reset\",!0)},this.getScene=function(){var a=this.editor,b=a.selection.getRange(),c=b.createAddress(!1,!0);a.fireEvent(\"beforegetscene\");var d=UE.htmlparser(a.body.innerHTML);a.options.autoClearEmptyNode=!1,a.filterOutputRule(d),a.options.autoClearEmptyNode=j;var e=d.toHtml();return a.fireEvent(\"aftergetscene\"),{address:c,content:e}},this.save=function(a,c){clearTimeout(d);var g=this.getScene(c),h=this.list[this.index];h&&h.content!=g.content&&e.trigger(\"contentchange\"),h&&h.content==g.content&&(a?1:b(h.address,g.address))||(this.list=this.list.slice(0,this.index+1),this.list.push(g),this.list.length>f&&this.list.shift(),this.index=this.list.length-1,this.clearKey(),this.update())},this.update=function(){this.hasRedo=!!this.list[this.index+1],this.hasUndo=!!this.list[this.index-1]},this.reset=function(){this.list=[],this.index=0,this.hasUndo=!1,this.hasRedo=!1,this.clearKey()},this.clearKey=function(){m=0,k=null}}var d,e=this,f=e.options.maxUndoCount||20,g=e.options.maxInputCount||20,h=new RegExp(domUtils.fillChar+\"|</hr>\",\"gi\"),i={ol:1,ul:1,table:1,tbody:1,tr:1,body:1},j=e.options.autoClearEmptyNode;e.undoManger=new c,e.undoManger.editor=e,e.addListener(\"saveScene\",function(){var a=Array.prototype.splice.call(arguments,1);this.undoManger.save.apply(this.undoManger,a)}),e.addListener(\"reset\",function(a,b){b||this.undoManger.reset()}),e.commands.redo=e.commands.undo={execCommand:function(a){this.undoManger[a]()},queryCommandState:function(a){return this.undoManger[\"has\"+(\"undo\"==a.toLowerCase()?\"Undo\":\"Redo\")]?0:-1},notNeedUndo:1};var k,l={16:1,17:1,18:1,37:1,38:1,39:1,40:1},m=0,n=!1;e.addListener(\"ready\",function(){domUtils.on(this.body,\"compositionstart\",function(){n=!0}),domUtils.on(this.body,\"compositionend\",function(){n=!1})}),e.addshortcutkey({Undo:\"ctrl+90\",Redo:\"ctrl+89\"});var o=!0;e.addListener(\"keydown\",function(a,b){function c(a){a.undoManger.save(!1,!0),a.fireEvent(\"selectionchange\")}var e=this,f=b.keyCode||b.which;if(!(l[f]||b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)){if(n)return;if(!e.selection.getRange().collapsed)return e.undoManger.save(!1,!0),void(o=!1);0==e.undoManger.list.length&&e.undoManger.save(!0),clearTimeout(d),d=setTimeout(function(){if(n)var a=setInterval(function(){n||(c(e),clearInterval(a))},300);else c(e)},200),k=f,m++,m>=g&&c(e)}}),e.addListener(\"keyup\",function(a,b){var c=b.keyCode||b.which;if(!(l[c]||b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)){if(n)return;o||(this.undoManger.save(!1,!0),o=!0)}}),e.stopCmdUndo=function(){e.__hasEnterExecCommand=!0},e.startCmdUndo=function(){e.__hasEnterExecCommand=!1}},UE.plugin.register(\"copy\",function(){function a(){ZeroClipboard.config({debug:!1,swfPath:b.options.UEDITOR_HOME_URL+\"third-party/zeroclipboard/ZeroClipboard.swf\"});var a=b.zeroclipboard=new ZeroClipboard;a.on(\"copy\",function(a){var c=a.client,d=b.selection.getRange(),e=document.createElement(\"div\");e.appendChild(d.cloneContents()),c.setText(e.innerText||e.textContent),c.setHtml(e.innerHTML),d.select()}),a.on(\"mouseover mouseout\",function(a){var b=a.target;b&&(\"mouseover\"==a.type?domUtils.addClass(b,\"edui-state-hover\"):\"mouseout\"==a.type&&domUtils.removeClasses(b,\"edui-state-hover\"))}),a.on(\"wrongflash noflash\",function(){ZeroClipboard.destroy()}),b.fireEvent(\"zeroclipboardready\",a)}var b=this;return{bindEvents:{ready:function(){browser.ie||(window.ZeroClipboard?a():utils.loadFile(document,{src:b.options.UEDITOR_HOME_URL+\"third-party/zeroclipboard/ZeroClipboard.js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){a()}))}},commands:{copy:{execCommand:function(a){b.document.execCommand(\"copy\")||alert(b.getLang(\"copymsg\"))}}}}}),UE.plugins.paste=function(){function a(a){var b=this.document;if(!b.getElementById(\"baidu_pastebin\")){var c=this.selection.getRange(),d=c.createBookmark(),e=b.createElement(\"div\");e.id=\"baidu_pastebin\",browser.webkit&&e.appendChild(b.createTextNode(domUtils.fillChar+domUtils.fillChar)),b.body.appendChild(e),d.start.style.display=\"\",e.style.cssText=\"position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:\"+domUtils.getXY(d.start).y+\"px\",c.selectNodeContents(e).select(!0),setTimeout(function(){if(browser.webkit)for(var f,g=0,h=b.querySelectorAll(\"#baidu_pastebin\");f=h[g++];){if(!domUtils.isEmptyNode(f)){e=f;break}domUtils.remove(f)}try{e.parentNode.removeChild(e)}catch(i){}c.moveToBookmark(d).select(!0),a(e)},0)}}function b(a){return a.replace(/<(\\/?)([\\w\\-]+)([^>]*)>/gi,function(a,b,c,d){return c=c.toLowerCase(),{img:1}[c]?a:(d=d.replace(/([\\w\\-]*?)\\s*=\\s*((\"([^\"]*)\")|('([^']*)')|([^\\s>]+))/gi,function(a,b,c){return{src:1,href:1,name:1}[b.toLowerCase()]?b+\"=\"+c+\" \":\"\"}),{span:1,div:1}[c]?\"\":\"<\"+b+c+\" \"+utils.trim(d)+\">\")})}function c(a){var c;if(a.firstChild){for(var h,i=domUtils.getElementsByTagName(a,\"span\"),j=0;h=i[j++];)\"_baidu_cut_start\"!=h.id&&\"_baidu_cut_end\"!=h.id||domUtils.remove(h);if(browser.webkit){for(var k,l=a.querySelectorAll(\"div br\"),j=0;k=l[j++];){var m=k.parentNode;\"DIV\"==m.tagName&&1==m.childNodes.length&&(m.innerHTML=\"<p><br/></p>\",domUtils.remove(m))}for(var n,o=a.querySelectorAll(\"#baidu_pastebin\"),j=0;n=o[j++];){var p=d.document.createElement(\"p\");for(n.parentNode.insertBefore(p,n);n.firstChild;)p.appendChild(n.firstChild);domUtils.remove(n)}for(var q,r=a.querySelectorAll(\"meta\"),j=0;q=r[j++];)domUtils.remove(q);var l=a.querySelectorAll(\"br\");for(j=0;q=l[j++];)/^apple-/i.test(q.className)&&domUtils.remove(q)}if(browser.gecko){var s=a.querySelectorAll(\"[_moz_dirty]\");for(j=0;q=s[j++];)q.removeAttribute(\"_moz_dirty\")}if(!browser.ie)for(var q,t=a.querySelectorAll(\"span.Apple-style-span\"),j=0;q=t[j++];)domUtils.remove(q,!0);c=a.innerHTML,c=UE.filterWord(c);var u=UE.htmlparser(c);if(d.options.filterRules&&UE.filterNode(u,d.options.filterRules),d.filterInputRule(u),browser.webkit){var v=u.lastChild();v&&\"element\"==v.type&&\"br\"==v.tagName&&u.removeChild(v),utils.each(d.body.querySelectorAll(\"div\"),function(a){domUtils.isEmptyBlock(a)&&domUtils.remove(a,!0)})}if(c={html:u.toHtml()},d.fireEvent(\"beforepaste\",c,u),!c.html)return;u=UE.htmlparser(c.html,!0),1===d.queryCommandState(\"pasteplain\")?d.execCommand(\"insertHtml\",UE.filterNode(u,d.options.filterTxtRules).toHtml(),!0):(UE.filterNode(u,d.options.filterTxtRules),e=u.toHtml(),f=c.html,g=d.selection.getRange().createAddress(!0),d.execCommand(\"insertHtml\",d.getOpt(\"retainOnlyLabelPasted\")===!0?b(f):f,!0)),d.fireEvent(\"afterpaste\",c)}}var d=this;d.setOpt({retainOnlyLabelPasted:!1});var e,f,g;d.addListener(\"pasteTransfer\",function(a,c){if(g&&e&&f&&e!=f){var h=d.selection.getRange();if(h.moveToAddress(g,!0),!h.collapsed){for(;!domUtils.isBody(h.startContainer);){var i=h.startContainer;if(1==i.nodeType){if(i=i.childNodes[h.startOffset],!i){h.setStartBefore(h.startContainer);continue}var j=i.previousSibling;j&&3==j.nodeType&&new RegExp(\"^[\\n\\r\\t \"+domUtils.fillChar+\"]*$\").test(j.nodeValue)&&h.setStartBefore(j)}if(0!=h.startOffset)break;h.setStartBefore(h.startContainer)}for(;!domUtils.isBody(h.endContainer);){var k=h.endContainer;if(1==k.nodeType){if(k=k.childNodes[h.endOffset],!k){h.setEndAfter(h.endContainer);continue}var l=k.nextSibling;l&&3==l.nodeType&&new RegExp(\"^[\\n\\r\\t\"+domUtils.fillChar+\"]*$\").test(l.nodeValue)&&h.setEndAfter(l)}if(h.endOffset!=h.endContainer[3==h.endContainer.nodeType?\"nodeValue\":\"childNodes\"].length)break;h.setEndAfter(h.endContainer)}}h.deleteContents(),h.select(!0),d.__hasEnterExecCommand=!0;var m=f;2===c?m=b(m):c&&(m=e),d.execCommand(\"inserthtml\",m,!0),d.__hasEnterExecCommand=!1;for(var n=d.selection.getRange();!domUtils.isBody(n.startContainer)&&!n.startOffset&&n.startContainer[3==n.startContainer.nodeType?\"nodeValue\":\"childNodes\"].length;)n.setStartBefore(n.startContainer);var o=n.createAddress(!0);g.endAddress=o.startAddress}}),d.addListener(\"ready\",function(){domUtils.on(d.body,\"cut\",function(){var a=d.selection.getRange();!a.collapsed&&d.undoManger&&d.undoManger.save()}),domUtils.on(d.body,browser.ie||browser.opera?\"keydown\":\"paste\",function(b){(!browser.ie&&!browser.opera||(b.ctrlKey||b.metaKey)&&\"86\"==b.keyCode)&&a.call(d,function(a){c(a)})})}),d.commands.paste={execCommand:function(b){browser.ie?(a.call(d,function(a){c(a)}),d.document.execCommand(\"paste\")):alert(d.getLang(\"pastemsg\"))}}},UE.plugins.pasteplain=function(){var a=this;a.setOpt({pasteplain:!1,filterTxtRules:function(){function a(a){a.tagName=\"p\",a.setStyle()}function b(a){a.parentNode.removeChild(a,!0)}return{\"-\":\"script style object iframe embed input select\",p:{$:{}},br:{$:{}},div:function(a){for(var b,c=UE.uNode.createElement(\"p\");b=a.firstChild();)\"text\"!=b.type&&UE.dom.dtd.$block[b.tagName]?c.firstChild()?(a.parentNode.insertBefore(c,a),c=UE.uNode.createElement(\"p\")):a.parentNode.insertBefore(b,a):c.appendChild(b);c.firstChild()&&a.parentNode.insertBefore(c,a),a.parentNode.removeChild(a)},ol:b,ul:b,dl:b,dt:b,dd:b,li:b,caption:a,th:a,tr:a,h1:a,h2:a,h3:a,h4:a,h5:a,h6:a,td:function(a){var b=!!a.innerText();b&&a.parentNode.insertAfter(UE.uNode.createText(\" &nbsp; &nbsp;\"),a),a.parentNode.removeChild(a,a.innerText())}}}()});var b=a.options.pasteplain;a.commands.pasteplain={queryCommandState:function(){return b?1:0},execCommand:function(){b=0|!b},notNeedUndo:1}},UE.plugins.list=function(){function a(a){var b=[];for(var c in a)b.push(c);return b}function b(a){var b=a.className;return domUtils.hasClass(a,/custom_/)?b.match(/custom_(\\w+)/)[1]:domUtils.getStyle(a,\"list-style-type\")}function c(a,c){utils.each(domUtils.getElementsByTagName(a,\"ol ul\"),function(f){if(domUtils.inDoc(f,a)){var g=f.parentNode;if(g.tagName==f.tagName){var h=b(f)||(\"OL\"==f.tagName?\"decimal\":\"disc\"),i=b(g)||(\"OL\"==g.tagName?\"decimal\":\"disc\");if(h==i){var l=utils.indexOf(k[f.tagName],h);l=l+1==k[f.tagName].length?0:l+1,e(f,k[f.tagName][l])}}var m=0,n=2;domUtils.hasClass(f,/custom_/)?/[ou]l/i.test(g.tagName)&&domUtils.hasClass(g,/custom_/)||(n=1):/[ou]l/i.test(g.tagName)&&domUtils.hasClass(g,/custom_/)&&(n=3);var o=domUtils.getStyle(f,\"list-style-type\");o&&(f.style.cssText=\"list-style-type:\"+o),f.className=utils.trim(f.className.replace(/list-paddingleft-\\w+/,\"\"))+\" list-paddingleft-\"+n,utils.each(domUtils.getElementsByTagName(f,\"li\"),function(a){if(a.style.cssText&&(a.style.cssText=\"\"),!a.firstChild)return void domUtils.remove(a);if(a.parentNode===f){if(m++,domUtils.hasClass(f,/custom_/)){var c=1,d=b(f);if(\"OL\"==f.tagName){if(d)switch(d){case\"cn\":case\"cn1\":case\"cn2\":m>10&&(m%10==0||m>10&&m<20)?c=2:m>20&&(c=3);break;case\"num2\":m>9&&(c=2)}a.className=\"list-\"+j[d]+m+\" list-\"+d+\"-paddingleft-\"+c}else a.className=\"list-\"+j[d]+\" list-\"+d+\"-paddingleft\"}else a.className=a.className.replace(/list-[\\w\\-]+/gi,\"\");var e=a.getAttribute(\"class\");null===e||e.replace(/\\s/g,\"\")||domUtils.removeAttributes(a,\"class\")}}),!c&&d(f,f.tagName.toLowerCase(),b(f)||domUtils.getStyle(f,\"list-style-type\"),!0)}})}function d(a,d,e,f){var g=a.nextSibling;g&&1==g.nodeType&&g.tagName.toLowerCase()==d&&(b(g)||domUtils.getStyle(g,\"list-style-type\")||(\"ol\"==d?\"decimal\":\"disc\"))==e&&(domUtils.moveChild(g,a),0==g.childNodes.length&&domUtils.remove(g)),g&&domUtils.isFillChar(g)&&domUtils.remove(g);var h=a.previousSibling;h&&1==h.nodeType&&h.tagName.toLowerCase()==d&&(b(h)||domUtils.getStyle(h,\"list-style-type\")||(\"ol\"==d?\"decimal\":\"disc\"))==e&&domUtils.moveChild(a,h),h&&domUtils.isFillChar(h)&&domUtils.remove(h),!f&&domUtils.isEmptyBlock(a)&&domUtils.remove(a),b(a)&&c(a.ownerDocument,!0)}function e(a,b){j[b]&&(a.className=\"custom_\"+b);try{domUtils.setStyle(a,\"list-style-type\",b)}catch(c){}}function f(a){var b=a.previousSibling;b&&domUtils.isEmptyBlock(b)&&domUtils.remove(b),b=a.nextSibling,b&&domUtils.isEmptyBlock(b)&&domUtils.remove(b)}function g(a){for(;a&&!domUtils.isBody(a);){if(\"TABLE\"==a.nodeName)return null;if(\"LI\"==a.nodeName)return a;a=a.parentNode}}var h=this,i={TD:1,PRE:1,BLOCKQUOTE:1},j={cn:\"cn-1-\",cn1:\"cn-2-\",cn2:\"cn-3-\",num:\"num-1-\",num1:\"num-2-\",num2:\"num-3-\",dash:\"dash\",dot:\"dot\"};h.setOpt({autoTransWordToList:!1,insertorderedlist:{num:\"\",num1:\"\",num2:\"\",cn:\"\",cn1:\"\",cn2:\"\",decimal:\"\",\"lower-alpha\":\"\",\"lower-roman\":\"\",\"upper-alpha\":\"\",\"upper-roman\":\"\"},insertunorderedlist:{circle:\"\",disc:\"\",square:\"\",dash:\"\",dot:\"\"},listDefaultPaddingLeft:\"30\",listiconpath:\"http://bs.baidu.com/listicon/\",maxListLevel:-1,disablePInList:!1});var k={OL:a(h.options.insertorderedlist),UL:a(h.options.insertunorderedlist)},l=h.options.listiconpath;for(var m in j)h.options.insertorderedlist.hasOwnProperty(m)||h.options.insertunorderedlist.hasOwnProperty(m)||delete j[m];h.ready(function(){var a=[];for(var b in j){if(\"dash\"==b||\"dot\"==b)a.push(\"li.list-\"+j[b]+\"{background-image:url(\"+l+j[b]+\".gif)}\"),a.push(\"ul.custom_\"+b+\"{list-style:none;}ul.custom_\"+b+\" li{background-position:0 3px;background-repeat:no-repeat}\");else{for(var c=0;c<99;c++)a.push(\"li.list-\"+j[b]+c+\"{background-image:url(\"+l+\"list-\"+j[b]+c+\".gif)}\");a.push(\"ol.custom_\"+b+\"{list-style:none;}ol.custom_\"+b+\" li{background-position:0 3px;background-repeat:no-repeat}\")}switch(b){case\"cn\":a.push(\"li.list-\"+b+\"-paddingleft-1{padding-left:25px}\"),a.push(\"li.list-\"+b+\"-paddingleft-2{padding-left:40px}\"),a.push(\"li.list-\"+b+\"-paddingleft-3{padding-left:55px}\");break;case\"cn1\":a.push(\"li.list-\"+b+\"-paddingleft-1{padding-left:30px}\"),a.push(\"li.list-\"+b+\"-paddingleft-2{padding-left:40px}\"),a.push(\"li.list-\"+b+\"-paddingleft-3{padding-left:55px}\");break;case\"cn2\":a.push(\"li.list-\"+b+\"-paddingleft-1{padding-left:40px}\"),a.push(\"li.list-\"+b+\"-paddingleft-2{padding-left:55px}\"),a.push(\"li.list-\"+b+\"-paddingleft-3{padding-left:68px}\");break;case\"num\":case\"num1\":a.push(\"li.list-\"+b+\"-paddingleft-1{padding-left:25px}\");break;case\"num2\":a.push(\"li.list-\"+b+\"-paddingleft-1{padding-left:35px}\"),a.push(\"li.list-\"+b+\"-paddingleft-2{padding-left:40px}\");break;case\"dash\":a.push(\"li.list-\"+b+\"-paddingleft{padding-left:35px}\");break;case\"dot\":a.push(\"li.list-\"+b+\"-paddingleft{padding-left:20px}\")}}a.push(\".list-paddingleft-1{padding-left:0}\"),a.push(\".list-paddingleft-2{padding-left:\"+h.options.listDefaultPaddingLeft+\"px}\"),a.push(\".list-paddingleft-3{padding-left:\"+2*h.options.listDefaultPaddingLeft+\"px}\"),utils.cssRule(\"list\",\"ol,ul{margin:0;pading:0;\"+(browser.ie?\"\":\"width:95%\")+\"}li{clear:both;}\"+a.join(\"\\n\"),h.document)}),h.ready(function(){domUtils.on(h.body,\"cut\",function(){setTimeout(function(){var a,b=h.selection.getRange();if(!b.collapsed&&(a=domUtils.findParentByTagName(b.startContainer,\"li\",!0))&&!a.nextSibling&&domUtils.isEmptyBlock(a)){var c,d=a.parentNode;if(c=d.previousSibling)domUtils.remove(d),b.setStartAtLast(c).collapse(!0),b.select(!0);else if(c=d.nextSibling)domUtils.remove(d),b.setStartAtFirst(c).collapse(!0),b.select(!0);else{var e=h.document.createElement(\"p\");domUtils.fillNode(h.document,e),d.parentNode.insertBefore(e,d),domUtils.remove(d),b.setStart(e,0).collapse(!0),b.select(!0)}}})})}),h.addListener(\"beforepaste\",function(a,c){var d,e=this,f=e.selection.getRange(),g=UE.htmlparser(c.html,!0);if(d=domUtils.findParentByTagName(f.startContainer,\"li\",!0)){var h=d.parentNode,i=\"OL\"==h.tagName?\"ul\":\"ol\";utils.each(g.getNodesByTagName(i),function(c){if(c.tagName=h.tagName,c.setAttr(),c.parentNode===g)a=b(h)||(\"OL\"==h.tagName?\"decimal\":\"disc\");else{var d=c.parentNode.getAttr(\"class\");a=d&&/custom_/.test(d)?d.match(/custom_(\\w+)/)[1]:c.parentNode.getStyle(\"list-style-type\"),a||(a=\"OL\"==h.tagName?\"decimal\":\"disc\")}var e=utils.indexOf(k[h.tagName],a);c.parentNode!==g&&(e=e+1==k[h.tagName].length?0:e+1);var f=k[h.tagName][e];j[f]?c.setAttr(\"class\",\"custom_\"+f):c.setStyle(\"list-style-type\",f)})}c.html=g.toHtml()}),h.getOpt(\"disablePInList\")===!0&&h.addOutputRule(function(a){utils.each(a.getNodesByTagName(\"li\"),function(a){var b=[],c=0;utils.each(a.children,function(d){if(\"p\"==d.tagName){for(var e;e=d.children.pop();)b.splice(c,0,e),e.parentNode=a,lastNode=e;if(e=b[b.length-1],!e||\"element\"!=e.type||\"br\"!=e.tagName){var f=UE.uNode.createElement(\"br\");f.parentNode=a,b.push(f)}c=b.length}}),b.length&&(a.children=b)})}),h.addInputRule(function(a){function b(a,b){var e=b.firstChild();if(e&&\"element\"==e.type&&\"span\"==e.tagName&&/Wingdings|Symbol/.test(e.getStyle(\"font-family\"))){for(var f in d)if(d[f]==e.data)return f;return\"disc\"}for(var f in c)if(c[f].test(a))return f}if(utils.each(a.getNodesByTagName(\"li\"),function(a){for(var b,c=UE.uNode.createElement(\"p\"),d=0;b=a.children[d];)\"text\"==b.type||dtd.p[b.tagName]?c.appendChild(b):c.firstChild()?(a.insertBefore(c,b),c=UE.uNode.createElement(\"p\"),d+=2):d++;(c.firstChild()&&!c.parentNode||!a.firstChild())&&a.appendChild(c),c.firstChild()||c.innerHTML(browser.ie?\"&nbsp;\":\"<br/>\");var e=a.firstChild(),f=e.lastChild();f&&\"text\"==f.type&&/^\\s*$/.test(f.data)&&e.removeChild(f)}),h.options.autoTransWordToList){var c={num1:/^\\d+\\)/,decimal:/^\\d+\\./,\"lower-alpha\":/^[a-z]+\\)/,\"upper-alpha\":/^[A-Z]+\\./,cn:/^[\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+[\\u3001]/,cn2:/^\\([\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+\\)/},d={square:\"n\"};utils.each(a.getNodesByTagName(\"p\"),function(a){function d(a,b,d){if(\"ol\"==a.tagName)if(browser.ie){var e=b.firstChild();\"element\"==e.type&&\"span\"==e.tagName&&c[d].test(e.innerText())&&b.removeChild(e)}else b.innerHTML(b.innerHTML().replace(c[d],\"\"));else b.removeChild(b.firstChild());var f=UE.uNode.createElement(\"li\");f.appendChild(b),a.appendChild(f)}if(\"MsoListParagraph\"==a.getAttr(\"class\")){a.setStyle(\"margin\",\"\"),a.setStyle(\"margin-left\",\"\"),a.setAttr(\"class\",\"\");var e,f=a,g=a;if(\"li\"!=a.parentNode.tagName&&(e=b(a.innerText(),a))){var i=UE.uNode.createElement(h.options.insertorderedlist.hasOwnProperty(e)?\"ol\":\"ul\");for(j[e]?i.setAttr(\"class\",\"custom_\"+e):i.setStyle(\"list-style-type\",e);a&&\"li\"!=a.parentNode.tagName&&b(a.innerText(),a);)f=a.nextSibling(),f||a.parentNode.insertBefore(i,a),d(i,a,e),a=f;!i.parentNode&&a&&a.parentNode&&a.parentNode.insertBefore(i,a)}var k=g.firstChild();k&&\"element\"==k.type&&\"span\"==k.tagName&&/^\\s*(&nbsp;)+\\s*$/.test(k.innerText())&&k.parentNode.removeChild(k)}})}}),h.addListener(\"contentchange\",function(){c(h.document)}),h.addListener(\"keydown\",function(a,b){function c(){b.preventDefault?b.preventDefault():b.returnValue=!1,h.fireEvent(\"contentchange\"),h.undoManger&&h.undoManger.save()}function d(a,b){for(;a&&!domUtils.isBody(a);){if(b(a))return null;if(1==a.nodeType&&/[ou]l/i.test(a.tagName))return a;a=a.parentNode}return null}var e=b.keyCode||b.which;if(13==e&&!b.shiftKey){var g=h.selection.getRange(),i=domUtils.findParent(g.startContainer,function(a){return domUtils.isBlockElm(a)},!0),j=domUtils.findParentByTagName(g.startContainer,\"li\",!0);if(i&&\"PRE\"!=i.tagName&&!j){var k=i.innerHTML.replace(new RegExp(domUtils.fillChar,\"g\"),\"\");/^\\s*1\\s*\\.[^\\d]/.test(k)&&(i.innerHTML=k.replace(/^\\s*1\\s*\\./,\"\"),g.setStartAtLast(i).collapse(!0).select(),h.__hasEnterExecCommand=!0,h.execCommand(\"insertorderedlist\"),h.__hasEnterExecCommand=!1)}var l=h.selection.getRange(),m=d(l.startContainer,function(a){return\"TABLE\"==a.tagName}),n=l.collapsed?m:d(l.endContainer,function(a){return\"TABLE\"==a.tagName});if(m&&n&&m===n){if(!l.collapsed){if(m=domUtils.findParentByTagName(l.startContainer,\"li\",!0),n=domUtils.findParentByTagName(l.endContainer,\"li\",!0),!m||!n||m!==n){var o=l.cloneRange(),p=o.collapse(!1).createBookmark();l.deleteContents(),o.moveToBookmark(p);var j=domUtils.findParentByTagName(o.startContainer,\"li\",!0);return f(j),o.select(),void c()}if(l.deleteContents(),j=domUtils.findParentByTagName(l.startContainer,\"li\",!0),j&&domUtils.isEmptyBlock(j))return v=j.previousSibling,next=j.nextSibling,s=h.document.createElement(\"p\"),\ndomUtils.fillNode(h.document,s),q=j.parentNode,v&&next?(l.setStart(next,0).collapse(!0).select(!0),domUtils.remove(j)):((v||next)&&v?j.parentNode.parentNode.insertBefore(s,q.nextSibling):q.parentNode.insertBefore(s,q),domUtils.remove(j),q.firstChild||domUtils.remove(q),l.setStart(s,0).setCursor()),void c()}if(j=domUtils.findParentByTagName(l.startContainer,\"li\",!0)){if(domUtils.isEmptyBlock(j)){p=l.createBookmark();var q=j.parentNode;if(j!==q.lastChild?(domUtils.breakParent(j,q),f(j)):(q.parentNode.insertBefore(j,q.nextSibling),domUtils.isEmptyNode(q)&&domUtils.remove(q)),!dtd.$list[j.parentNode.tagName])if(domUtils.isBlockElm(j.firstChild))domUtils.remove(j,!0);else{for(s=h.document.createElement(\"p\"),j.parentNode.insertBefore(s,j);j.firstChild;)s.appendChild(j.firstChild);domUtils.remove(j)}l.moveToBookmark(p).select()}else{var r=j.firstChild;if(!r||!domUtils.isBlockElm(r)){var s=h.document.createElement(\"p\");for(!j.firstChild&&domUtils.fillNode(h.document,s);j.firstChild;)s.appendChild(j.firstChild);j.appendChild(s),r=s}var t=h.document.createElement(\"span\");l.insertNode(t),domUtils.breakParent(t,j);var u=t.nextSibling;r=u.firstChild,r||(s=h.document.createElement(\"p\"),domUtils.fillNode(h.document,s),u.appendChild(s),r=s),domUtils.isEmptyNode(r)&&(r.innerHTML=\"\",domUtils.fillNode(h.document,r)),l.setStart(r,0).collapse(!0).shrinkBoundary().select(),domUtils.remove(t);var v=u.previousSibling;v&&domUtils.isEmptyBlock(v)&&(v.innerHTML=\"<p></p>\",domUtils.fillNode(h.document,v.firstChild))}c()}}}if(8==e&&(l=h.selection.getRange(),l.collapsed&&domUtils.isStartInblock(l)&&(o=l.cloneRange().trimBoundary(),j=domUtils.findParentByTagName(l.startContainer,\"li\",!0),j&&domUtils.isStartInblock(o)))){if(m=domUtils.findParentByTagName(l.startContainer,\"p\",!0),m&&m!==j.firstChild){var q=domUtils.findParentByTagName(m,[\"ol\",\"ul\"]);return domUtils.breakParent(m,q),f(m),h.fireEvent(\"contentchange\"),l.setStart(m,0).setCursor(!1,!0),h.fireEvent(\"saveScene\"),void domUtils.preventDefault(b)}if(j&&(v=j.previousSibling)){if(46==e&&j.childNodes.length)return;if(dtd.$list[v.tagName]&&(v=v.lastChild),h.undoManger&&h.undoManger.save(),r=j.firstChild,domUtils.isBlockElm(r))if(domUtils.isEmptyNode(r))for(v.appendChild(r),l.setStart(r,0).setCursor(!1,!0);j.firstChild;)v.appendChild(j.firstChild);else t=h.document.createElement(\"span\"),l.insertNode(t),domUtils.isEmptyBlock(v)&&(v.innerHTML=\"\"),domUtils.moveChild(j,v),l.setStartBefore(t).collapse(!0).select(!0),domUtils.remove(t);else if(domUtils.isEmptyNode(j)){var s=h.document.createElement(\"p\");v.appendChild(s),l.setStart(s,0).setCursor()}else for(l.setEnd(v,v.childNodes.length).collapse().select(!0);j.firstChild;)v.appendChild(j.firstChild);return domUtils.remove(j),h.fireEvent(\"contentchange\"),h.fireEvent(\"saveScene\"),void domUtils.preventDefault(b)}if(j&&!j.previousSibling){var q=j.parentNode,p=l.createBookmark();if(domUtils.isTagNode(q.parentNode,\"ol ul\"))q.parentNode.insertBefore(j,q),domUtils.isEmptyNode(q)&&domUtils.remove(q);else{for(;j.firstChild;)q.parentNode.insertBefore(j.firstChild,q);domUtils.remove(j),domUtils.isEmptyNode(q)&&domUtils.remove(q)}return l.moveToBookmark(p).setCursor(!1,!0),h.fireEvent(\"contentchange\"),h.fireEvent(\"saveScene\"),void domUtils.preventDefault(b)}}}),h.addListener(\"keyup\",function(a,c){var e=c.keyCode||c.which;if(8==e){var f,g=h.selection.getRange();(f=domUtils.findParentByTagName(g.startContainer,[\"ol\",\"ul\"],!0))&&d(f,f.tagName.toLowerCase(),b(f)||domUtils.getComputedStyle(f,\"list-style-type\"),!0)}}),h.addListener(\"tabkeydown\",function(){function a(a){if(h.options.maxListLevel!=-1){for(var b=a.parentNode,c=0;/[ou]l/i.test(b.tagName);)c++,b=b.parentNode;if(c>=h.options.maxListLevel)return!0}}var c=h.selection.getRange(),f=domUtils.findParentByTagName(c.startContainer,\"li\",!0);if(f){var g;if(!c.collapsed){h.fireEvent(\"saveScene\"),g=c.createBookmark();for(var i,j,l=0,m=domUtils.findParents(f);j=m[l++];)if(domUtils.isTagNode(j,\"ol ul\")){i=j;break}var n=f;if(g.end)for(;n&&!(domUtils.getPosition(n,g.end)&domUtils.POSITION_FOLLOWING);)if(a(n))n=domUtils.getNextDomNode(n,!1,null,function(a){return a!==i});else{var o=n.parentNode,p=h.document.createElement(o.tagName),q=utils.indexOf(k[p.tagName],b(o)||domUtils.getComputedStyle(o,\"list-style-type\")),r=q+1==k[p.tagName].length?0:q+1,s=k[p.tagName][r];for(e(p,s),o.insertBefore(p,n);n&&!(domUtils.getPosition(n,g.end)&domUtils.POSITION_FOLLOWING);){if(f=n.nextSibling,p.appendChild(n),!f||domUtils.isTagNode(f,\"ol ul\")){if(f)for(;(f=f.firstChild)&&\"LI\"!=f.tagName;);else f=domUtils.getNextDomNode(n,!1,null,function(a){return a!==i});break}n=f}d(p,p.tagName.toLowerCase(),s),n=f}return h.fireEvent(\"contentchange\"),c.moveToBookmark(g).select(),!0}if(a(f))return!0;var o=f.parentNode,p=h.document.createElement(o.tagName),q=utils.indexOf(k[p.tagName],b(o)||domUtils.getComputedStyle(o,\"list-style-type\"));q=q+1==k[p.tagName].length?0:q+1;var s=k[p.tagName][q];if(e(p,s),domUtils.isStartInblock(c))return h.fireEvent(\"saveScene\"),g=c.createBookmark(),o.insertBefore(p,f),p.appendChild(f),d(p,p.tagName.toLowerCase(),s),h.fireEvent(\"contentchange\"),c.moveToBookmark(g).select(!0),!0}}),h.commands.insertorderedlist=h.commands.insertunorderedlist={execCommand:function(a,c){c||(c=\"insertorderedlist\"==a.toLowerCase()?\"decimal\":\"disc\");var f=this,h=this.selection.getRange(),j=function(a){return 1==a.nodeType?\"br\"!=a.tagName.toLowerCase():!domUtils.isWhitespace(a)},k=\"insertorderedlist\"==a.toLowerCase()?\"ol\":\"ul\",l=f.document.createDocumentFragment();h.adjustmentBoundary().shrinkBoundary();var m,n,o,p,q=h.createBookmark(!0),r=g(f.document.getElementById(q.start)),s=0,t=g(f.document.getElementById(q.end)),u=0;if(r||t){if(r&&(m=r.parentNode),q.end||(t=r),t&&(n=t.parentNode),m===n){for(;r!==t;){if(p=r,r=r.nextSibling,!domUtils.isBlockElm(p.firstChild)){for(var v=f.document.createElement(\"p\");p.firstChild;)v.appendChild(p.firstChild);p.appendChild(v)}l.appendChild(p)}if(p=f.document.createElement(\"span\"),m.insertBefore(p,t),!domUtils.isBlockElm(t.firstChild)){for(v=f.document.createElement(\"p\");t.firstChild;)v.appendChild(t.firstChild);t.appendChild(v)}l.appendChild(t),domUtils.breakParent(p,m),domUtils.isEmptyNode(p.previousSibling)&&domUtils.remove(p.previousSibling),domUtils.isEmptyNode(p.nextSibling)&&domUtils.remove(p.nextSibling);var w=b(m)||domUtils.getComputedStyle(m,\"list-style-type\")||(\"insertorderedlist\"==a.toLowerCase()?\"decimal\":\"disc\");if(m.tagName.toLowerCase()==k&&w==c){for(var x,y=0,z=f.document.createDocumentFragment();x=l.firstChild;)if(domUtils.isTagNode(x,\"ol ul\"))z.appendChild(x);else for(;x.firstChild;)z.appendChild(x.firstChild),domUtils.remove(x);p.parentNode.insertBefore(z,p)}else o=f.document.createElement(k),e(o,c),o.appendChild(l),p.parentNode.insertBefore(o,p);return domUtils.remove(p),o&&d(o,k,c),void h.moveToBookmark(q).select()}if(r){for(;r;){if(p=r.nextSibling,domUtils.isTagNode(r,\"ol ul\"))l.appendChild(r);else{for(var A=f.document.createDocumentFragment(),B=0;r.firstChild;)domUtils.isBlockElm(r.firstChild)&&(B=1),A.appendChild(r.firstChild);if(B)l.appendChild(A);else{var C=f.document.createElement(\"p\");C.appendChild(A),l.appendChild(C)}domUtils.remove(r)}r=p}m.parentNode.insertBefore(l,m.nextSibling),domUtils.isEmptyNode(m)?(h.setStartBefore(m),domUtils.remove(m)):h.setStartAfter(m),s=1}if(t&&domUtils.inDoc(n,f.document)){for(r=n.firstChild;r&&r!==t;){if(p=r.nextSibling,domUtils.isTagNode(r,\"ol ul\"))l.appendChild(r);else{for(A=f.document.createDocumentFragment(),B=0;r.firstChild;)domUtils.isBlockElm(r.firstChild)&&(B=1),A.appendChild(r.firstChild);B?l.appendChild(A):(C=f.document.createElement(\"p\"),C.appendChild(A),l.appendChild(C)),domUtils.remove(r)}r=p}var D=domUtils.createElement(f.document,\"div\",{tmpDiv:1});domUtils.moveChild(t,D),l.appendChild(D),domUtils.remove(t),n.parentNode.insertBefore(l,n),h.setEndBefore(n),domUtils.isEmptyNode(n)&&domUtils.remove(n),u=1}}s||h.setStartBefore(f.document.getElementById(q.start)),q.end&&!u&&h.setEndAfter(f.document.getElementById(q.end)),h.enlarge(!0,function(a){return i[a.tagName]}),l=f.document.createDocumentFragment();for(var E,F=h.createBookmark(),G=domUtils.getNextDomNode(F.start,!1,j),H=h.cloneRange(),I=domUtils.isBlockElm;G&&G!==F.end&&domUtils.getPosition(G,F.end)&domUtils.POSITION_PRECEDING;)if(3==G.nodeType||dtd.li[G.tagName]){if(1==G.nodeType&&dtd.$list[G.tagName]){for(;G.firstChild;)l.appendChild(G.firstChild);E=domUtils.getNextDomNode(G,!1,j),domUtils.remove(G),G=E;continue}for(E=G,H.setStartBefore(G);G&&G!==F.end&&(!I(G)||domUtils.isBookmarkNode(G));)E=G,G=domUtils.getNextDomNode(G,!1,null,function(a){return!i[a.tagName]});G&&I(G)&&(p=domUtils.getNextDomNode(E,!1,j),p&&domUtils.isBookmarkNode(p)&&(G=domUtils.getNextDomNode(p,!1,j),E=p)),H.setEndAfter(E),G=domUtils.getNextDomNode(E,!1,j);var J=h.document.createElement(\"li\");if(J.appendChild(H.extractContents()),domUtils.isEmptyNode(J)){for(var E=h.document.createElement(\"p\");J.firstChild;)E.appendChild(J.firstChild);J.appendChild(E)}l.appendChild(J)}else G=domUtils.getNextDomNode(G,!0,j);h.moveToBookmark(F).collapse(!0),o=f.document.createElement(k),e(o,c),o.appendChild(l),h.insertNode(o),d(o,k,c);for(var x,y=0,K=domUtils.getElementsByTagName(o,\"div\");x=K[y++];)x.getAttribute(\"tmpDiv\")&&domUtils.remove(x,!0);h.moveToBookmark(q).select()},queryCommandState:function(a){for(var b,c=\"insertorderedlist\"==a.toLowerCase()?\"ol\":\"ul\",d=this.selection.getStartElementPath(),e=0;b=d[e++];){if(\"TABLE\"==b.nodeName)return 0;if(c==b.nodeName.toLowerCase())return 1}return 0},queryCommandValue:function(a){for(var c,d,e=\"insertorderedlist\"==a.toLowerCase()?\"ol\":\"ul\",f=this.selection.getStartElementPath(),g=0;d=f[g++];){if(\"TABLE\"==d.nodeName){c=null;break}if(e==d.nodeName.toLowerCase()){c=d;break}}return c?b(c)||domUtils.getComputedStyle(c,\"list-style-type\"):null}}},function(){var a={textarea:function(a,b){var c=b.ownerDocument.createElement(\"textarea\");return c.style.cssText=\"position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;\",browser.ie&&browser.version<8&&(c.style.width=b.offsetWidth+\"px\",c.style.height=b.offsetHeight+\"px\",b.onresize=function(){c.style.width=b.offsetWidth+\"px\",c.style.height=b.offsetHeight+\"px\"}),b.appendChild(c),{setContent:function(a){c.value=a},getContent:function(){return c.value},select:function(){var a;browser.ie?(a=c.createTextRange(),a.collapse(!0),a.select()):(c.setSelectionRange(0,0),c.focus())},dispose:function(){b.removeChild(c),b.onresize=null,c=null,b=null},focus:function(){c.focus()},blur:function(){c.blur()}}},codemirror:function(a,b){var c=window.CodeMirror(b,{mode:\"text/html\",tabMode:\"indent\",lineNumbers:!0,lineWrapping:!0}),d=c.getWrapperElement();return d.style.cssText='position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,\"Courier new\",monospace;font-size:13px;',c.getScrollerElement().style.cssText=\"position:absolute;left:0;top:0;width:100%;height:100%;\",c.refresh(),{getCodeMirror:function(){return c},setContent:function(a){c.setValue(a)},getContent:function(){return c.getValue()},select:function(){c.focus()},dispose:function(){b.removeChild(d),d=null,c=null},focus:function(){c.focus()},blur:function(){c.setOption(\"readOnly\",!0),c.setOption(\"readOnly\",!1)}}}};UE.plugins.source=function(){function b(b){return a[\"codemirror\"==h.sourceEditor&&window.CodeMirror?\"codemirror\":\"textarea\"](g,b)}var c,d,e,f,g=this,h=this.options,i=!1;h.sourceEditor=browser.ie?\"textarea\":h.sourceEditor||\"codemirror\",g.setOpt({sourceEditorFirst:!1});var j,k,l;g.commands.source={execCommand:function(){if(i=!i){l=g.selection.getRange().createAddress(!1,!0),g.undoManger&&g.undoManger.save(!0),browser.gecko&&(g.body.contentEditable=!1),j=g.iframe.style.cssText,g.iframe.style.cssText+=\"position:absolute;left:-32768px;top:-32768px;\",g.fireEvent(\"beforegetcontent\");var a=UE.htmlparser(g.body.innerHTML);g.filterOutputRule(a),a.traversal(function(a){if(\"element\"==a.type)switch(a.tagName){case\"td\":case\"th\":case\"caption\":a.children&&1==a.children.length&&\"br\"==a.firstChild().tagName&&a.removeChild(a.firstChild());break;case\"pre\":a.innerText(a.innerText().replace(/&nbsp;/g,\" \"))}}),g.fireEvent(\"aftergetcontent\");var h=a.toHtml(!0);c=b(g.iframe.parentNode),c.setContent(h),d=g.setContent,g.setContent=function(a){var b=UE.htmlparser(a);g.filterInputRule(b),a=b.toHtml(),c.setContent(a)},setTimeout(function(){c.select(),g.addListener(\"fullscreenchanged\",function(){try{c.getCodeMirror().refresh()}catch(a){}})}),k=g.getContent,g.getContent=function(){return c.getContent()||\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\"},e=g.focus,f=g.blur,g.focus=function(){c.focus()},g.blur=function(){f.call(g),c.blur()}}else{g.iframe.style.cssText=j;var m=c.getContent()||\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";m=m.replace(new RegExp(\"[\\\\r\\\\t\\\\n ]*</?(\\\\w+)\\\\s*(?:[^>]*)>\",\"g\"),function(a,b){return b&&!dtd.$inlineWithA[b.toLowerCase()]?a.replace(/(^[\\n\\r\\t ]*)|([\\n\\r\\t ]*$)/g,\"\"):a.replace(/(^[\\n\\r\\t]*)|([\\n\\r\\t]*$)/g,\"\")}),g.setContent=d,g.setContent(m),c.dispose(),c=null,g.getContent=k,g.focus=e,g.blur=f;var n=g.body.firstChild;if(n||(g.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\",n=g.body.firstChild),g.undoManger&&g.undoManger.save(!0),browser.gecko){var o=document.createElement(\"input\");o.style.cssText=\"position:absolute;left:0;top:-32768px\",document.body.appendChild(o),g.body.contentEditable=!1,setTimeout(function(){domUtils.setViewportOffset(o,{left:-32768,top:0}),o.focus(),setTimeout(function(){g.body.contentEditable=!0,g.selection.getRange().moveToAddress(l).select(!0),domUtils.remove(o)})})}else try{g.selection.getRange().moveToAddress(l).select(!0)}catch(p){}}this.fireEvent(\"sourcemodechanged\",i)},queryCommandState:function(){return 0|i},notNeedUndo:1};var m=g.queryCommandState;g.queryCommandState=function(a){return a=a.toLowerCase(),i?a in{source:1,fullscreen:1}?1:-1:m.apply(this,arguments)},\"codemirror\"==h.sourceEditor&&g.addListener(\"ready\",function(){utils.loadFile(document,{src:h.codeMirrorJsUrl||h.UEDITOR_HOME_URL+\"third-party/codemirror/codemirror.js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){h.sourceEditorFirst&&setTimeout(function(){g.execCommand(\"source\")},0)}),utils.loadFile(document,{tag:\"link\",rel:\"stylesheet\",type:\"text/css\",href:h.codeMirrorCssUrl||h.UEDITOR_HOME_URL+\"third-party/codemirror/codemirror.css\"})})}}(),UE.plugins.enterkey=function(){var a,b=this,c=b.options.enterTag;b.addListener(\"keyup\",function(c,d){var e=d.keyCode||d.which;if(13==e){var f,g=b.selection.getRange(),h=g.startContainer;if(browser.ie)b.fireEvent(\"saveScene\",!0,!0);else{if(/h\\d/i.test(a)){if(browser.gecko){var i=domUtils.findParentByTagName(h,[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"caption\",\"table\"],!0);i||(b.document.execCommand(\"formatBlock\",!1,\"<p>\"),f=1)}else if(1==h.nodeType){var j,k=b.document.createTextNode(\"\");if(g.insertNode(k),j=domUtils.findParentByTagName(k,\"div\",!0)){for(var l=b.document.createElement(\"p\");j.firstChild;)l.appendChild(j.firstChild);j.parentNode.insertBefore(l,j),domUtils.remove(j),g.setStartBefore(k).setCursor(),f=1}domUtils.remove(k)}b.undoManger&&f&&b.undoManger.save()}browser.opera&&g.select()}}}),b.addListener(\"keydown\",function(d,e){var f=e.keyCode||e.which;if(13==f){if(b.fireEvent(\"beforeenterkeydown\"))return void domUtils.preventDefault(e);b.fireEvent(\"saveScene\",!0,!0),a=\"\";var g=b.selection.getRange();if(!g.collapsed){var h=g.startContainer,i=g.endContainer,j=domUtils.findParentByTagName(h,\"td\",!0),k=domUtils.findParentByTagName(i,\"td\",!0);if(j&&k&&j!==k||!j&&k||j&&!k)return void(e.preventDefault?e.preventDefault():e.returnValue=!1)}if(\"p\"==c)browser.ie||(h=domUtils.findParentByTagName(g.startContainer,[\"ol\",\"ul\",\"p\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"caption\"],!0),h||browser.opera?(a=h.tagName,\"p\"==h.tagName.toLowerCase()&&browser.gecko&&domUtils.removeDirtyAttr(h)):(b.document.execCommand(\"formatBlock\",!1,\"<p>\"),browser.gecko&&(g=b.selection.getRange(),h=domUtils.findParentByTagName(g.startContainer,\"p\",!0),h&&domUtils.removeDirtyAttr(h))));else if(e.preventDefault?e.preventDefault():e.returnValue=!1,g.collapsed){m=g.document.createElement(\"br\"),g.insertNode(m);var l=m.parentNode;l.lastChild===m?(m.parentNode.insertBefore(m.cloneNode(!0),m),g.setStartBefore(m)):g.setStartAfter(m),g.setCursor()}else if(g.deleteContents(),h=g.startContainer,1==h.nodeType&&(h=h.childNodes[g.startOffset])){for(;1==h.nodeType;){if(dtd.$empty[h.tagName])return g.setStartBefore(h).setCursor(),b.undoManger&&b.undoManger.save(),!1;if(!h.firstChild){var m=g.document.createElement(\"br\");return h.appendChild(m),g.setStart(h,0).setCursor(),b.undoManger&&b.undoManger.save(),!1}h=h.firstChild}h===g.startContainer.childNodes[g.startOffset]?(m=g.document.createElement(\"br\"),g.insertNode(m).setCursor()):g.setStart(h,0).setCursor()}else m=g.document.createElement(\"br\"),g.insertNode(m).setStartAfter(m).setCursor()}})},UE.plugins.keystrokes=function(){var a=this,b=!0;a.addListener(\"keydown\",function(c,d){var e=d.keyCode||d.which,f=a.selection.getRange();if(!f.collapsed&&!(d.ctrlKey||d.shiftKey||d.altKey||d.metaKey)&&(e>=65&&e<=90||e>=48&&e<=57||e>=96&&e<=111||{13:1,8:1,46:1}[e])){var g=f.startContainer;if(domUtils.isFillChar(g)&&f.setStartBefore(g),g=f.endContainer,domUtils.isFillChar(g)&&f.setEndAfter(g),f.txtToElmBoundary(),f.endContainer&&1==f.endContainer.nodeType&&(g=f.endContainer.childNodes[f.endOffset],g&&domUtils.isBr(g)&&f.setEndAfter(g)),0==f.startOffset&&(g=f.startContainer,domUtils.isBoundaryNode(g,\"firstChild\")&&(g=f.endContainer,f.endOffset==(3==g.nodeType?g.nodeValue.length:g.childNodes.length)&&domUtils.isBoundaryNode(g,\"lastChild\"))))return a.fireEvent(\"saveScene\"),a.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\",f.setStart(a.body.firstChild,0).setCursor(!1,!0),void a._selectionChange()}if(e==keymap.Backspace){if(f=a.selection.getRange(),b=f.collapsed,a.fireEvent(\"delkeydown\",d))return;var h,i;if(f.collapsed&&f.inFillChar()&&(h=f.startContainer,domUtils.isFillChar(h)?(f.setStartBefore(h).shrinkBoundary(!0).collapse(!0),domUtils.remove(h)):(h.nodeValue=h.nodeValue.replace(new RegExp(\"^\"+domUtils.fillChar),\"\"),f.startOffset--,f.collapse(!0).select(!0))),h=f.getClosedNode())return a.fireEvent(\"saveScene\"),f.setStartBefore(h),domUtils.remove(h),f.setCursor(),a.fireEvent(\"saveScene\"),void domUtils.preventDefault(d);if(!browser.ie&&(h=domUtils.findParentByTagName(f.startContainer,\"table\",!0),i=domUtils.findParentByTagName(f.endContainer,\"table\",!0),h&&!i||!h&&i||h!==i))return void d.preventDefault()}if(e==keymap.Tab){var j={ol:1,ul:1,table:1};if(a.fireEvent(\"tabkeydown\",d))return void domUtils.preventDefault(d);var k=a.selection.getRange();a.fireEvent(\"saveScene\");for(var l=0,m=\"\",n=a.options.tabSize||4,o=a.options.tabNode||\"&nbsp;\";l<n;l++)m+=o;var p=a.document.createElement(\"span\");if(p.innerHTML=m+domUtils.fillChar,k.collapsed)k.insertNode(p.cloneNode(!0).firstChild).setCursor(!0);else{var q=function(a){return domUtils.isBlockElm(a)&&!j[a.tagName.toLowerCase()]};if(h=domUtils.findParent(k.startContainer,q,!0),i=domUtils.findParent(k.endContainer,q,!0),h&&i&&h===i)k.deleteContents(),k.insertNode(p.cloneNode(!0).firstChild).setCursor(!0);else{var r=k.createBookmark();k.enlarge(!0);for(var s=k.createBookmark(),t=domUtils.getNextDomNode(s.start,!1,q);t&&!(domUtils.getPosition(t,s.end)&domUtils.POSITION_FOLLOWING);)t.insertBefore(p.cloneNode(!0).firstChild,t.firstChild),t=domUtils.getNextDomNode(t,!1,q);k.moveToBookmark(s).moveToBookmark(r).select()}}domUtils.preventDefault(d)}if(browser.gecko&&46==e&&(k=a.selection.getRange(),k.collapsed&&(h=k.startContainer,domUtils.isEmptyBlock(h)))){for(var u=h.parentNode;1==domUtils.getChildCount(u)&&!domUtils.isBody(u);)h=u,u=u.parentNode;return void(h===u.lastChild&&d.preventDefault())}browser.chrome&&a.on(\"keydown\",function(a,b){var c=b.keyCode||b.which;if((b.metaKey&&b.altKey||b.ctrlKey&&b.shiftKey)&&73==c)return!0})}),a.addListener(\"keyup\",function(a,c){var d,e=c.keyCode||c.which,f=this;if(e==keymap.Backspace){if(f.fireEvent(\"delkeyup\"))return;if(d=f.selection.getRange(),d.collapsed){var g,h=[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"];if((g=domUtils.findParentByTagName(d.startContainer,h,!0))&&domUtils.isEmptyBlock(g)){var i=g.previousSibling;if(i&&\"TABLE\"!=i.nodeName)return domUtils.remove(g),void d.setStartAtLast(i).setCursor(!1,!0);var j=g.nextSibling;if(j&&\"TABLE\"!=j.nodeName)return domUtils.remove(g),void d.setStartAtFirst(j).setCursor(!1,!0)}if(domUtils.isBody(d.startContainer)){var g=domUtils.createElement(f.document,\"p\",{innerHTML:browser.ie?domUtils.fillChar:\"<br/>\"});d.insertNode(g).setStart(g,0).setCursor(!1,!0)}}if(!b&&(3==d.startContainer.nodeType||1==d.startContainer.nodeType&&domUtils.isEmptyBlock(d.startContainer)))if(browser.ie){var k=d.document.createElement(\"span\");d.insertNode(k).setStartBefore(k).collapse(!0),d.select(),domUtils.remove(k)}else d.select()}})},UE.plugins.fiximgclick=function(){function a(){this.editor=null,this.resizer=null,this.cover=null,this.doc=document,this.prePos={x:0,y:0},this.startPos={x:0,y:0}}var b=!1;return function(){var c=[[0,0,-1,-1],[0,0,0,-1],[0,0,1,-1],[0,0,-1,0],[0,0,1,0],[0,0,-1,1],[0,0,0,1],[0,0,1,1]];a.prototype={init:function(a){var b=this;b.editor=a,b.startPos=this.prePos={x:0,y:0},b.dragId=-1;var c=[],d=b.cover=document.createElement(\"div\"),e=b.resizer=document.createElement(\"div\");for(d.id=b.editor.ui.id+\"_imagescale_cover\",d.style.cssText=\"position:absolute;display:none;z-index:\"+b.editor.options.zIndex+\";filter:alpha(opacity=0); opacity:0;background:#CCC;\",domUtils.on(d,\"mousedown click\",function(){b.hide()}),i=0;i<8;i++)c.push('<span class=\"edui-editor-imagescale-hand'+i+'\"></span>');e.id=b.editor.ui.id+\"_imagescale\",e.className=\"edui-editor-imagescale\",e.innerHTML=c.join(\"\"),e.style.cssText+=\";display:none;border:1px solid #3b77ff;z-index:\"+b.editor.options.zIndex+\";\",b.editor.ui.getDom().appendChild(d),b.editor.ui.getDom().appendChild(e),b.initStyle(),b.initEvents()},initStyle:function(){utils.cssRule(\"imagescale\",\".edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}.edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}.edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}\")},initEvents:function(){var a=this;a.startPos.x=a.startPos.y=0,a.isDraging=!1},_eventHandler:function(a){var c=this;switch(a.type){case\"mousedown\":var d,d=a.target||a.srcElement;d.className.indexOf(\"edui-editor-imagescale-hand\")!=-1&&c.dragId==-1&&(c.dragId=d.className.slice(-1),c.startPos.x=c.prePos.x=a.clientX,c.startPos.y=c.prePos.y=a.clientY,domUtils.on(c.doc,\"mousemove\",c.proxy(c._eventHandler,c)));break;case\"mousemove\":c.dragId!=-1&&(c.updateContainerStyle(c.dragId,{x:a.clientX-c.prePos.x,y:a.clientY-c.prePos.y}),c.prePos.x=a.clientX,c.prePos.y=a.clientY,b=!0,c.updateTargetElement());break;case\"mouseup\":c.dragId!=-1&&(c.updateContainerStyle(c.dragId,{x:a.clientX-c.prePos.x,y:a.clientY-c.prePos.y}),c.updateTargetElement(),c.target.parentNode&&c.attachTo(c.target),c.dragId=-1),domUtils.un(c.doc,\"mousemove\",c.proxy(c._eventHandler,c)),b&&(b=!1,c.editor.fireEvent(\"contentchange\"))}},updateTargetElement:function(){var a=this;domUtils.setStyles(a.target,{width:a.resizer.style.width,height:a.resizer.style.height}),a.target.width=parseInt(a.resizer.style.width),a.target.height=parseInt(a.resizer.style.height),a.attachTo(a.target)},updateContainerStyle:function(a,b){var d,e=this,f=e.resizer;0!=c[a][0]&&(d=parseInt(f.style.left)+b.x,f.style.left=e._validScaledProp(\"left\",d)+\"px\"),0!=c[a][1]&&(d=parseInt(f.style.top)+b.y,f.style.top=e._validScaledProp(\"top\",d)+\"px\"),0!=c[a][2]&&(d=f.clientWidth+c[a][2]*b.x,f.style.width=e._validScaledProp(\"width\",d)+\"px\"),0!=c[a][3]&&(d=f.clientHeight+c[a][3]*b.y,f.style.height=e._validScaledProp(\"height\",d)+\"px\")},_validScaledProp:function(a,b){var c=this.resizer,d=document;switch(b=isNaN(b)?0:b,a){case\"left\":return b<0?0:b+c.clientWidth>d.clientWidth?d.clientWidth-c.clientWidth:b;case\"top\":return b<0?0:b+c.clientHeight>d.clientHeight?d.clientHeight-c.clientHeight:b;case\"width\":return b<=0?1:b+c.offsetLeft>d.clientWidth?d.clientWidth-c.offsetLeft:b;case\"height\":return b<=0?1:b+c.offsetTop>d.clientHeight?d.clientHeight-c.offsetTop:b}},hideCover:function(){this.cover.style.display=\"none\"},showCover:function(){var a=this,b=domUtils.getXY(a.editor.ui.getDom()),c=domUtils.getXY(a.editor.iframe);domUtils.setStyles(a.cover,{width:a.editor.iframe.offsetWidth+\"px\",height:a.editor.iframe.offsetHeight+\"px\",top:c.y-b.y+\"px\",left:c.x-b.x+\"px\",position:\"absolute\",display:\"\"})},show:function(a){var b=this;b.resizer.style.display=\"block\",a&&b.attachTo(a),domUtils.on(this.resizer,\"mousedown\",b.proxy(b._eventHandler,b)),domUtils.on(b.doc,\"mouseup\",b.proxy(b._eventHandler,b)),b.showCover(),b.editor.fireEvent(\"afterscaleshow\",b),b.editor.fireEvent(\"saveScene\")},hide:function(){var a=this;a.hideCover(),a.resizer.style.display=\"none\",domUtils.un(a.resizer,\"mousedown\",a.proxy(a._eventHandler,a)),domUtils.un(a.doc,\"mouseup\",a.proxy(a._eventHandler,a)),a.editor.fireEvent(\"afterscalehide\",a)},proxy:function(a,b){return function(c){return a.apply(b||this,arguments)}},attachTo:function(a){var b=this,c=b.target=a,d=this.resizer,e=domUtils.getXY(c),f=domUtils.getXY(b.editor.iframe),g=domUtils.getXY(d.parentNode);domUtils.setStyles(d,{width:c.width+\"px\",height:c.height+\"px\",left:f.x+e.x-b.editor.document.body.scrollLeft-g.x-parseInt(d.style.borderLeftWidth)+\"px\",top:f.y+e.y-b.editor.document.body.scrollTop-g.y-parseInt(d.style.borderTopWidth)+\"px\"})}}}(),function(){var b,c=this;c.setOpt(\"imageScaleEnabled\",!0),!browser.ie&&c.options.imageScaleEnabled&&c.addListener(\"click\",function(d,e){var f=c.selection.getRange(),g=f.getClosedNode();if(g&&\"IMG\"==g.tagName&&\"false\"!=c.body.contentEditable){if(g.className.indexOf(\"edui-faked-music\")!=-1||g.getAttribute(\"anchorname\")||domUtils.hasClass(g,\"loadingclass\")||domUtils.hasClass(g,\"loaderrorclass\"))return;if(!b){b=new a,b.init(c),c.ui.getDom().appendChild(b.resizer);var h,i=function(a){b.hide(),b.target&&c.selection.getRange().selectNode(b.target).select()},j=function(a){var b=a.target||a.srcElement;!b||void 0!==b.className&&b.className.indexOf(\"edui-editor-imagescale\")!=-1||i(a)};c.addListener(\"afterscaleshow\",function(a){c.addListener(\"beforekeydown\",i),c.addListener(\"beforemousedown\",j),domUtils.on(document,\"keydown\",i),domUtils.on(document,\"mousedown\",j),c.selection.getNative().removeAllRanges()}),c.addListener(\"afterscalehide\",function(a){c.removeListener(\"beforekeydown\",i),c.removeListener(\"beforemousedown\",j),domUtils.un(document,\"keydown\",i),domUtils.un(document,\"mousedown\",j);var d=b.target;d.parentNode&&c.selection.getRange().selectNode(d).select()}),domUtils.on(b.resizer,\"mousedown\",function(a){c.selection.getNative().removeAllRanges();var d=a.target||a.srcElement;d&&d.className.indexOf(\"edui-editor-imagescale-hand\")==-1&&(h=setTimeout(function(){b.hide(),b.target&&c.selection.getRange().selectNode(d).select()},200))}),domUtils.on(b.resizer,\"mouseup\",function(a){var b=a.target||a.srcElement;b&&b.className.indexOf(\"edui-editor-imagescale-hand\")==-1&&clearTimeout(h)})}b.show(g)}else b&&\"none\"!=b.resizer.style.display&&b.hide()}),browser.webkit&&c.addListener(\"click\",function(a,b){if(\"IMG\"==b.target.tagName&&\"false\"!=c.body.contentEditable){var d=new dom.Range(c.document);d.selectNode(b.target).select()}})}}(),UE.plugin.register(\"autolink\",function(){var a=0;return browser.ie?{}:{bindEvents:{reset:function(){a=0},keydown:function(a,b){var c=this,d=b.keyCode||b.which;if(32==d||13==d){for(var e,f,g=c.selection.getNative(),h=g.getRangeAt(0).cloneRange(),i=h.startContainer;1==i.nodeType&&h.startOffset>0&&(i=h.startContainer.childNodes[h.startOffset-1]);)h.setStart(i,1==i.nodeType?i.childNodes.length:i.nodeValue.length),h.collapse(!0),i=h.startContainer;do{if(0==h.startOffset){for(i=h.startContainer.previousSibling;i&&1==i.nodeType;)i=i.lastChild;if(!i||domUtils.isFillChar(i))break;e=i.nodeValue.length}else i=h.startContainer,e=h.startOffset;h.setStart(i,e-1),f=h.toString().charCodeAt(0)}while(160!=f&&32!=f);if(h.toString().replace(new RegExp(domUtils.fillChar,\"g\"),\"\").match(/(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i)){for(;h.toString().length&&!/^(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i.test(h.toString());)try{h.setStart(h.startContainer,h.startOffset+1)}catch(j){for(var i=h.startContainer;!(next=i.nextSibling);){if(domUtils.isBody(i))return;i=i.parentNode}h.setStart(next,0)}if(domUtils.findParentByTagName(h.startContainer,\"a\",!0))return;var k,l=c.document.createElement(\"a\"),m=c.document.createTextNode(\" \");c.undoManger&&c.undoManger.save(),l.appendChild(h.extractContents()),l.href=l.innerHTML=l.innerHTML.replace(/<[^>]+>/g,\"\"),k=l.getAttribute(\"href\").replace(new RegExp(domUtils.fillChar,\"g\"),\"\"),k=/^(?:https?:\\/\\/)/gi.test(k)?k:\"http://\"+k,l.setAttribute(\"_src\",utils.html(k)),l.href=utils.html(k),h.insertNode(l),l.parentNode.insertBefore(m,l.nextSibling),h.setStart(m,0),h.collapse(!0),g.removeAllRanges(),g.addRange(h),c.undoManger&&c.undoManger.save()}}}}}},function(){function a(a){if(3==a.nodeType)return null;if(\"A\"==a.nodeName)return a;for(var b=a.lastChild;b;){if(\"A\"==b.nodeName)return b;if(3==b.nodeType){if(domUtils.isWhitespace(b)){b=b.previousSibling;continue}return null}b=b.lastChild}}var b={37:1,38:1,39:1,40:1,13:1,32:1};browser.ie&&this.addListener(\"keyup\",function(c,d){var e=this,f=d.keyCode;if(b[f]){var g=e.selection.getRange(),h=g.startContainer;if(13==f){for(;h&&!domUtils.isBody(h)&&!domUtils.isBlockElm(h);)h=h.parentNode;if(h&&!domUtils.isBody(h)&&\"P\"==h.nodeName){var i=h.previousSibling;if(i&&1==i.nodeType){var i=a(i);i&&!i.getAttribute(\"_href\")&&domUtils.remove(i,!0)}}}else if(32==f)3==h.nodeType&&/^\\s$/.test(h.nodeValue)&&(h=h.previousSibling,h&&\"A\"==h.nodeName&&!h.getAttribute(\"_href\")&&domUtils.remove(h,!0));else if(h=domUtils.findParentByTagName(h,\"a\",!0),h&&!h.getAttribute(\"_href\")){var j=g.createBookmark();domUtils.remove(h,!0),g.moveToBookmark(j).select(!0)}}})}),UE.plugins.autoheight=function(){function a(){var a=this;clearTimeout(f),g||(!a.queryCommandState||a.queryCommandState&&1!=a.queryCommandState(\"source\"))&&(f=setTimeout(function(){for(var b=a.body.lastChild;b&&1!=b.nodeType;)b=b.previousSibling;b&&1==b.nodeType&&(b.style.clear=\"both\",e=Math.max(domUtils.getXY(b).y+b.offsetHeight+25,Math.max(i.minFrameHeight,i.initialFrameHeight)),e!=h&&(e!==parseInt(a.iframe.parentNode.style.height)&&(a.iframe.parentNode.style.height=e+\"px\"),a.body.style.height=e+\"px\",h=e),domUtils.removeStyle(b,\"clear\"))},50))}function b(){c.window&&(null===j?j=c.window.scrollY:0==c.window.scrollY&&0!=j&&(c.window.scrollTo(0,0),j=null))}var c=this;if(c.autoHeightEnabled=c.options.autoHeightEnabled!==!1,c.autoHeightEnabled){var d,e,f,g,h=0,i=c.options;c.addListener(\"fullscreenchanged\",function(a,b){g=b}),c.addListener(\"destroy\",function(){domUtils.un(c.window,\"scroll\",b),\nc.removeListener(\"contentchange afterinserthtml keyup mouseup\",a)}),c.enableAutoHeight=function(){var b=this;if(b.autoHeightEnabled){var c=b.document;b.autoHeightEnabled=!0,d=c.body.style.overflowY,c.body.style.overflowY=\"hidden\",b.addListener(\"contentchange afterinserthtml keyup mouseup\",a),setTimeout(function(){a.call(b)},browser.gecko?100:0),b.fireEvent(\"autoheightchanged\",b.autoHeightEnabled)}},c.disableAutoHeight=function(){c.body.style.overflowY=d||\"\",c.removeListener(\"contentchange\",a),c.removeListener(\"keyup\",a),c.removeListener(\"mouseup\",a),c.autoHeightEnabled=!1,c.fireEvent(\"autoheightchanged\",c.autoHeightEnabled)},c.on(\"setHeight\",function(){c.disableAutoHeight()}),c.addListener(\"ready\",function(){c.enableAutoHeight();var d;domUtils.on(browser.ie?c.body:c.document,browser.webkit?\"dragover\":\"drop\",function(){clearTimeout(d),d=setTimeout(function(){a.call(c)},100)}),domUtils.on(c.window,\"scroll\",b)});var j}},UE.plugins.autofloat=function(){function a(){return UE.ui?1:(alert(g.autofloatMsg),0)}function b(){var a=document.body.style;a.backgroundImage='url(\"about:blank\")',a.backgroundAttachment=\"fixed\"}function c(){var a=domUtils.getXY(k),b=domUtils.getComputedStyle(k,\"position\"),c=domUtils.getComputedStyle(k,\"left\");k.style.width=k.offsetWidth+\"px\",k.style.zIndex=1*f.options.zIndex+1,k.parentNode.insertBefore(q,k),o||p&&browser.ie?(\"absolute\"!=k.style.position&&(k.style.position=\"absolute\"),k.style.top=(document.body.scrollTop||document.documentElement.scrollTop)-l+i+\"px\"):(browser.ie7Compat&&r&&(r=!1,k.style.left=domUtils.getXY(k).x-document.documentElement.getBoundingClientRect().left+2+\"px\"),\"fixed\"!=k.style.position&&(k.style.position=\"fixed\",k.style.top=i+\"px\",(\"absolute\"==b||\"relative\"==b)&&parseFloat(c)&&(k.style.left=a.x+\"px\")))}function d(){r=!0,q.parentNode&&q.parentNode.removeChild(q),k.style.cssText=j}function e(){var a=m(f.container),b=f.options.toolbarTopOffset||0;a.top<0&&a.bottom-k.offsetHeight>b?c():d()}var f=this,g=f.getLang();f.setOpt({topOffset:0});var h=f.options.autoFloatEnabled!==!1,i=f.options.topOffset;if(h){var j,k,l,m,n=UE.ui.uiUtils,o=browser.ie&&browser.version<=6,p=browser.quirks,q=document.createElement(\"div\"),r=!0,s=utils.defer(function(){e()},browser.ie?200:100,!0);f.addListener(\"destroy\",function(){domUtils.un(window,[\"scroll\",\"resize\"],e),f.removeListener(\"keydown\",s)}),f.addListener(\"ready\",function(){if(a(f)){if(!f.ui)return;m=n.getClientRect,k=f.ui.getDom(\"toolbarbox\"),l=m(k).top,j=k.style.cssText,q.style.height=k.offsetHeight+\"px\",o&&b(),domUtils.on(window,[\"scroll\",\"resize\"],e),f.addListener(\"keydown\",s),f.addListener(\"beforefullscreenchange\",function(a,b){b&&d()}),f.addListener(\"fullscreenchanged\",function(a,b){b||e()}),f.addListener(\"sourcemodechanged\",function(a,b){setTimeout(function(){e()},0)}),f.addListener(\"clearDoc\",function(){setTimeout(function(){e()},0)})}})}},UE.plugins.video=function(){function a(a,b,d,e,f,g,h){var i;switch(h){case\"image\":i=\"<img \"+(e?'id=\"'+e+'\"':\"\")+' width=\"'+b+'\" height=\"'+d+'\" _url=\"'+a+'\" class=\"'+g.replace(/\\bvideo-js\\b/,\"\")+'\" src=\"'+c.options.UEDITOR_HOME_URL+'themes/default/images/spacer.gif\" style=\"background:url('+c.options.UEDITOR_HOME_URL+\"themes/default/images/videologo.gif) no-repeat center center; border:1px solid gray;\"+(f?\"float:\"+f+\";\":\"\")+'\" />';break;case\"embed\":i='<embed type=\"application/x-shockwave-flash\" class=\"'+g+'\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" src=\"'+utils.html(a)+'\" width=\"'+b+'\" height=\"'+d+'\"'+(f?' style=\"float:'+f+'\"':\"\")+' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >';break;case\"video\":var j=a.substr(a.lastIndexOf(\".\")+1);\"ogv\"==j&&(j=\"ogg\"),i=\"<video\"+(e?' id=\"'+e+'\"':\"\")+' class=\"'+g+' video-js\" '+(f?' style=\"float:'+f+'\"':\"\")+' controls preload=\"none\" width=\"'+b+'\" height=\"'+d+'\" src=\"'+a+'\" data-setup=\"{}\"><source src=\"'+a+'\" type=\"video/'+j+'\" /></video>'}return i}function b(b,c){utils.each(b.getNodesByTagName(c?\"img\":\"embed video\"),function(b){var d=b.getAttr(\"class\");if(d&&d.indexOf(\"edui-faked-video\")!=-1){var e=a(c?b.getAttr(\"_url\"):b.getAttr(\"src\"),b.getAttr(\"width\"),b.getAttr(\"height\"),null,b.getStyle(\"float\")||\"\",d,c?\"embed\":\"image\");b.parentNode.replaceChild(UE.uNode.createElement(e),b)}if(d&&d.indexOf(\"edui-upload-video\")!=-1){var e=a(c?b.getAttr(\"_url\"):b.getAttr(\"src\"),b.getAttr(\"width\"),b.getAttr(\"height\"),null,b.getStyle(\"float\")||\"\",d,c?\"video\":\"image\");b.parentNode.replaceChild(UE.uNode.createElement(e),b)}})}var c=this;c.addOutputRule(function(a){b(a,!0)}),c.addInputRule(function(a){b(a)}),c.commands.insertvideo={execCommand:function(b,d,e){if(d=utils.isArray(d)?d:[d],c.fireEvent(\"beforeinsertvideo\",d)!==!0){for(var f,g,h=[],i=\"tmpVedio\",j=0,k=d.length;j<k;j++)g=d[j],f=\"upload\"==e?\"edui-upload-video video-js vjs-default-skin\":\"edui-faked-video\",h.push(a(g.url,g.width||420,g.height||280,i+j,null,f,\"image\"));c.execCommand(\"inserthtml\",h.join(\"\"),!0);for(var l=this.selection.getRange(),j=0,k=d.length;j<k;j++){var m=this.document.getElementById(\"tmpVedio\"+j);domUtils.removeAttributes(m,\"id\"),l.selectNode(m).select(),c.execCommand(\"imagefloat\",d[j].align)}c.fireEvent(\"afterinsertvideo\",d)}},queryCommandState:function(){var a=c.selection.getRange().getClosedNode(),b=a&&(\"edui-faked-video\"==a.className||a.className.indexOf(\"edui-upload-video\")!=-1);return b?1:0}}},function(){function a(a){}var b=UE.UETable=function(a){this.table=a,this.indexTable=[],this.selectedTds=[],this.cellsRange={},this.update(a)};b.removeSelectedClass=function(a){utils.each(a,function(a){domUtils.removeClasses(a,\"selectTdClass\")})},b.addSelectedClass=function(a){utils.each(a,function(a){domUtils.addClass(a,\"selectTdClass\")})},b.isEmptyBlock=function(a){var b=new RegExp(domUtils.fillChar,\"g\");if(a[browser.ie?\"innerText\":\"textContent\"].replace(/^\\s*$/,\"\").replace(b,\"\").length>0)return 0;for(var c in dtd.$isNotEmpty)if(dtd.$isNotEmpty.hasOwnProperty(c)&&a.getElementsByTagName(c).length)return 0;return 1},b.getWidth=function(a){return a?parseInt(domUtils.getComputedStyle(a,\"width\"),10):0},b.getTableCellAlignState=function(a){!utils.isArray(a)&&(a=[a]);var b={},c=[\"align\",\"valign\"],d=null,e=!0;return utils.each(a,function(a){return utils.each(c,function(c){if(d=a.getAttribute(c),!b[c]&&d)b[c]=d;else if(!b[c]||d!==b[c])return e=!1,!1}),e}),e?b:null},b.getTableItemsByRange=function(a){var b=a.selection.getStart();b&&b.id&&0===b.id.indexOf(\"_baidu_bookmark_start_\")&&b.nextSibling&&(b=b.nextSibling);var c=b&&domUtils.findParentByTagName(b,[\"td\",\"th\"],!0),d=c&&c.parentNode,e=d&&domUtils.findParentByTagName(d,[\"table\"]),f=e&&e.getElementsByTagName(\"caption\")[0];return{cell:c,tr:d,table:e,caption:f}},b.getUETableBySelected=function(a){var c=b.getTableItemsByRange(a).table;return c&&c.ueTable&&c.ueTable.selectedTds.length?c.ueTable:null},b.getDefaultValue=function(a,b){var c,d,e,f,g={thin:\"0px\",medium:\"1px\",thick:\"2px\"};if(b)return h=b.getElementsByTagName(\"td\")[0],f=domUtils.getComputedStyle(b,\"border-left-width\"),c=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,\"padding-left\"),d=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,\"border-left-width\"),e=parseInt(g[f]||f,10),{tableBorder:c,tdPadding:d,tdBorder:e};b=a.document.createElement(\"table\"),b.insertRow(0).insertCell(0).innerHTML=\"xxx\",a.body.appendChild(b);var h=b.getElementsByTagName(\"td\")[0];return f=domUtils.getComputedStyle(b,\"border-left-width\"),c=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,\"padding-left\"),d=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,\"border-left-width\"),e=parseInt(g[f]||f,10),domUtils.remove(b),{tableBorder:c,tdPadding:d,tdBorder:e}},b.getUETable=function(a){var c=a.tagName.toLowerCase();return a=\"td\"==c||\"th\"==c||\"caption\"==c?domUtils.findParentByTagName(a,\"table\",!0):a,a.ueTable||(a.ueTable=new b(a)),a.ueTable},b.cloneCell=function(a,b,c){if(!a||utils.isString(a))return this.table.ownerDocument.createElement(a||\"td\");var d=domUtils.hasClass(a,\"selectTdClass\");d&&domUtils.removeClasses(a,\"selectTdClass\");var e=a.cloneNode(!0);return b&&(e.rowSpan=e.colSpan=1),!c&&domUtils.removeAttributes(e,\"width height\"),!c&&domUtils.removeAttributes(e,\"style\"),e.style.borderLeftStyle=\"\",e.style.borderTopStyle=\"\",e.style.borderLeftColor=a.style.borderRightColor,e.style.borderLeftWidth=a.style.borderRightWidth,e.style.borderTopColor=a.style.borderBottomColor,e.style.borderTopWidth=a.style.borderBottomWidth,d&&domUtils.addClass(a,\"selectTdClass\"),e},b.prototype={getMaxRows:function(){for(var a,b=this.table.rows,c=1,d=0;a=b[d];d++){for(var e,f=1,g=0;e=a.cells[g++];)f=Math.max(e.rowSpan||1,f);c=Math.max(f+d,c)}return c},getMaxCols:function(){for(var a,b=this.table.rows,c=0,d={},e=0;a=b[e];e++){for(var f,g=0,h=0;f=a.cells[h++];)if(g+=f.colSpan||1,f.rowSpan&&f.rowSpan>1)for(var i=1;i<f.rowSpan;i++)d[\"row_\"+(e+i)]?d[\"row_\"+(e+i)]++:d[\"row_\"+(e+i)]=f.colSpan||1;g+=d[\"row_\"+e]||0,c=Math.max(g,c)}return c},getCellColIndex:function(a){},getHSideCell:function(b,c){try{var d,e,f=this.getCellInfo(b),g=this.selectedTds.length,h=this.cellsRange;return!c&&(g?!h.beginColIndex:!f.colIndex)||c&&(g?h.endColIndex==this.colsNum-1:f.colIndex==this.colsNum-1)?null:(d=g?h.beginRowIndex:f.rowIndex,e=c?g?h.endColIndex+1:f.colIndex+1:g?h.beginColIndex-1:f.colIndex<1?0:f.colIndex-1,this.getCell(this.indexTable[d][e].rowIndex,this.indexTable[d][e].cellIndex))}catch(i){a(i)}},getTabNextCell:function(a,b){var c,d=this.getCellInfo(a),e=b||d.rowIndex,f=d.colIndex+1+(d.colSpan-1);try{c=this.getCell(this.indexTable[e][f].rowIndex,this.indexTable[e][f].cellIndex)}catch(g){try{e=1*e+1,f=0,c=this.getCell(this.indexTable[e][f].rowIndex,this.indexTable[e][f].cellIndex)}catch(g){}}return c},getVSideCell:function(b,c,d){try{var e,f,g=this.getCellInfo(b),h=this.selectedTds.length&&!d,i=this.cellsRange;return!c&&0==g.rowIndex||c&&(h?i.endRowIndex==this.rowsNum-1:g.rowIndex+g.rowSpan>this.rowsNum-1)?null:(e=c?h?i.endRowIndex+1:g.rowIndex+g.rowSpan:h?i.beginRowIndex-1:g.rowIndex-1,f=h?i.beginColIndex:g.colIndex,this.getCell(this.indexTable[e][f].rowIndex,this.indexTable[e][f].cellIndex))}catch(j){a(j)}},getSameEndPosCells:function(b,c){try{for(var d=\"x\"===c.toLowerCase(),e=domUtils.getXY(b)[d?\"x\":\"y\"]+b[\"offset\"+(d?\"Width\":\"Height\")],f=this.table.rows,g=null,h=[],i=0;i<this.rowsNum;i++){g=f[i].cells;for(var j,k=0;j=g[k++];){var l=domUtils.getXY(j)[d?\"x\":\"y\"]+j[\"offset\"+(d?\"Width\":\"Height\")];if(l>e&&d)break;if((b==j||e==l)&&(1==j[d?\"colSpan\":\"rowSpan\"]&&h.push(j),d))break}}return h}catch(m){a(m)}},setCellContent:function(a,b){a.innerHTML=b||(browser.ie?domUtils.fillChar:\"<br />\")},cloneCell:b.cloneCell,getSameStartPosXCells:function(b){try{for(var c,d=domUtils.getXY(b).x+b.offsetWidth,e=this.table.rows,f=[],g=0;g<this.rowsNum;g++){c=e[g].cells;for(var h,i=0;h=c[i++];){var j=domUtils.getXY(h).x;if(j>d)break;if(j==d&&1==h.colSpan){f.push(h);break}}}return f}catch(k){a(k)}},update:function(a){this.table=a||this.table,this.selectedTds=[],this.cellsRange={},this.indexTable=[];for(var b=this.table.rows,c=this.getMaxRows(),d=c-b.length,e=this.getMaxCols();d--;)this.table.insertRow(b.length);this.rowsNum=c,this.colsNum=e;for(var f=0,g=b.length;f<g;f++)this.indexTable[f]=new Array(e);for(var h,i=0;h=b[i];i++)for(var j,k=0,l=h.cells;j=l[k];k++){j.rowSpan>c&&(j.rowSpan=c);for(var m=k,n=j.rowSpan||1,o=j.colSpan||1;this.indexTable[i][m];)m++;for(var p=0;p<n;p++)for(var q=0;q<o;q++)this.indexTable[i+p][m+q]={rowIndex:i,cellIndex:k,colIndex:m,rowSpan:n,colSpan:o}}for(p=0;p<c;p++)for(q=0;q<e;q++)void 0===this.indexTable[p][q]&&(h=b[p],j=h.cells[h.cells.length-1],j=j?j.cloneNode(!0):this.table.ownerDocument.createElement(\"td\"),this.setCellContent(j),1!==j.colSpan&&(j.colSpan=1),1!==j.rowSpan&&(j.rowSpan=1),h.appendChild(j),this.indexTable[p][q]={rowIndex:p,cellIndex:j.cellIndex,colIndex:q,rowSpan:1,colSpan:1});var r=domUtils.getElementsByTagName(this.table,\"td\"),s=[];if(utils.each(r,function(a){domUtils.hasClass(a,\"selectTdClass\")&&s.push(a)}),s.length){var t=s[0],u=s[s.length-1],v=this.getCellInfo(t),w=this.getCellInfo(u);this.selectedTds=s,this.cellsRange={beginRowIndex:v.rowIndex,beginColIndex:v.colIndex,endRowIndex:w.rowIndex+w.rowSpan-1,endColIndex:w.colIndex+w.colSpan-1}}if(!domUtils.hasClass(this.table.rows[0],\"firstRow\")){domUtils.addClass(this.table.rows[0],\"firstRow\");for(var f=1;f<this.table.rows.length;f++)domUtils.removeClasses(this.table.rows[f],\"firstRow\")}},getCellInfo:function(a){if(a)for(var b=a.cellIndex,c=a.parentNode.rowIndex,d=this.indexTable[c],e=this.colsNum,f=b;f<e;f++){var g=d[f];if(g.rowIndex===c&&g.cellIndex===b)return g}},getCell:function(a,b){return a<this.rowsNum&&this.table.rows[a].cells[b]||null},deleteCell:function(a,b){b=\"number\"==typeof b?b:a.parentNode.rowIndex;var c=this.table.rows[b];c.deleteCell(a.cellIndex)},getCellsRange:function(a,b){function c(a,b,e,f){var g,h,i,j=a,k=b,l=e,m=f;if(a>0)for(h=b;h<f;h++)g=d.indexTable[a][h],i=g.rowIndex,i<a&&(j=Math.min(i,j));if(f<d.colsNum)for(i=a;i<e;i++)g=d.indexTable[i][f],h=g.colIndex+g.colSpan-1,h>f&&(m=Math.max(h,m));if(e<d.rowsNum)for(h=b;h<f;h++)g=d.indexTable[e][h],i=g.rowIndex+g.rowSpan-1,i>e&&(l=Math.max(i,l));if(b>0)for(i=a;i<e;i++)g=d.indexTable[i][b],h=g.colIndex,h<b&&(k=Math.min(g.colIndex,k));return j!=a||k!=b||l!=e||m!=f?c(j,k,l,m):{beginRowIndex:a,beginColIndex:b,endRowIndex:e,endColIndex:f}}try{var d=this,e=d.getCellInfo(a);if(a===b)return{beginRowIndex:e.rowIndex,beginColIndex:e.colIndex,endRowIndex:e.rowIndex+e.rowSpan-1,endColIndex:e.colIndex+e.colSpan-1};var f=d.getCellInfo(b),g=Math.min(e.rowIndex,f.rowIndex),h=Math.min(e.colIndex,f.colIndex),i=Math.max(e.rowIndex+e.rowSpan-1,f.rowIndex+f.rowSpan-1),j=Math.max(e.colIndex+e.colSpan-1,f.colIndex+f.colSpan-1);return c(g,h,i,j)}catch(k){}},getCells:function(a){this.clearSelected();for(var b,c,d,e=a.beginRowIndex,f=a.beginColIndex,g=a.endRowIndex,h=a.endColIndex,i={},j=[],k=e;k<=g;k++)for(var l=f;l<=h;l++){b=this.indexTable[k][l],c=b.rowIndex,d=b.colIndex;var m=c+\"|\"+d;if(!i[m]){if(i[m]=1,c<k||d<l||c+b.rowSpan-1>g||d+b.colSpan-1>h)return null;j.push(this.getCell(c,b.cellIndex))}}return j},clearSelected:function(){b.removeSelectedClass(this.selectedTds),this.selectedTds=[],this.cellsRange={}},setSelected:function(a){var c=this.getCells(a);b.addSelectedClass(c),this.selectedTds=c,this.cellsRange=a},isFullRow:function(){var a=this.cellsRange;return a.endColIndex-a.beginColIndex+1==this.colsNum},isFullCol:function(){var a=this.cellsRange,b=this.table,c=b.getElementsByTagName(\"th\"),d=a.endRowIndex-a.beginRowIndex+1;return c.length?d==this.rowsNum||d==this.rowsNum-1:d==this.rowsNum},getNextCell:function(b,c,d){try{var e,f,g=this.getCellInfo(b),h=this.selectedTds.length&&!d,i=this.cellsRange;return!c&&0==g.rowIndex||c&&(h?i.endRowIndex==this.rowsNum-1:g.rowIndex+g.rowSpan>this.rowsNum-1)?null:(e=c?h?i.endRowIndex+1:g.rowIndex+g.rowSpan:h?i.beginRowIndex-1:g.rowIndex-1,f=h?i.beginColIndex:g.colIndex,this.getCell(this.indexTable[e][f].rowIndex,this.indexTable[e][f].cellIndex))}catch(j){a(j)}},getPreviewCell:function(b,c){try{var d,e,f=this.getCellInfo(b),g=this.selectedTds.length,h=this.cellsRange;return!c&&(g?!h.beginColIndex:!f.colIndex)||c&&(g?h.endColIndex==this.colsNum-1:f.rowIndex>this.colsNum-1)?null:(d=c?g?h.beginRowIndex:f.rowIndex<1?0:f.rowIndex-1:g?h.beginRowIndex:f.rowIndex,e=c?g?h.endColIndex+1:f.colIndex:g?h.beginColIndex-1:f.colIndex<1?0:f.colIndex-1,this.getCell(this.indexTable[d][e].rowIndex,this.indexTable[d][e].cellIndex))}catch(i){a(i)}},moveContent:function(a,c){if(!b.isEmptyBlock(c)){if(b.isEmptyBlock(a))return void(a.innerHTML=c.innerHTML);var d=a.lastChild;for(3!=d.nodeType&&dtd.$block[d.tagName]||a.appendChild(a.ownerDocument.createElement(\"br\"));d=c.firstChild;)a.appendChild(d)}},mergeRight:function(a){var b=this.getCellInfo(a),c=b.colIndex+b.colSpan,d=this.indexTable[b.rowIndex][c],e=this.getCell(d.rowIndex,d.cellIndex);a.colSpan=b.colSpan+d.colSpan,a.removeAttribute(\"width\"),this.moveContent(a,e),this.deleteCell(e,d.rowIndex),this.update()},mergeDown:function(a){var b=this.getCellInfo(a),c=b.rowIndex+b.rowSpan,d=this.indexTable[c][b.colIndex],e=this.getCell(d.rowIndex,d.cellIndex);a.rowSpan=b.rowSpan+d.rowSpan,a.removeAttribute(\"height\"),this.moveContent(a,e),this.deleteCell(e,d.rowIndex),this.update()},mergeRange:function(){for(var a,b=this.cellsRange,c=this.getCell(b.beginRowIndex,this.indexTable[b.beginRowIndex][b.beginColIndex].cellIndex),d=this.getCells(b),e=0;a=d[e++];)a!==c&&(this.moveContent(c,a),this.deleteCell(a));if(c.rowSpan=b.endRowIndex-b.beginRowIndex+1,c.rowSpan>1&&c.removeAttribute(\"height\"),c.colSpan=b.endColIndex-b.beginColIndex+1,c.colSpan>1&&c.removeAttribute(\"width\"),c.rowSpan==this.rowsNum&&1!=c.colSpan&&(c.colSpan=1),c.colSpan==this.colsNum&&1!=c.rowSpan){var f=c.parentNode.rowIndex;if(this.table.deleteRow)for(var e=f+1,g=f+1,h=c.rowSpan;e<h;e++)this.table.deleteRow(g);else for(var e=0,h=c.rowSpan-1;e<h;e++){var i=this.table.rows[f+1];i.parentNode.removeChild(i)}c.rowSpan=1}this.update()},insertRow:function(a,b){function c(a,b,c){if(0==a){var d=c.nextSibling||c.previousSibling,e=d.cells[a];\"TH\"==e.tagName&&(e=b.ownerDocument.createElement(\"th\"),e.appendChild(b.firstChild),c.insertBefore(e,b),domUtils.remove(b))}else if(\"TH\"==b.tagName){var f=b.ownerDocument.createElement(\"td\");f.appendChild(b.firstChild),c.insertBefore(f,b),domUtils.remove(b)}}var d,e=this.colsNum,f=this.table,g=f.insertRow(a),h=null,i=\"string\"==typeof b&&\"TH\"==b.toUpperCase();if(0==a||a==this.rowsNum){for(var j=0;j<e;j++)d=this.cloneCell(b,!0),this.setCellContent(d),d.getAttribute(\"vAlign\")&&d.setAttribute(\"vAlign\",d.getAttribute(\"vAlign\")),g.appendChild(d),i||c(j,d,g);i&&(h=f.createTHead(),h.insertBefore(g,h.firstChild))}else{var k=this.indexTable[a];for(j=0;j<e;j++){var l=k[j];l.rowIndex<a?(d=this.getCell(l.rowIndex,l.cellIndex),d.rowSpan=l.rowSpan+1):(d=this.cloneCell(b,!0),this.setCellContent(d),g.appendChild(d)),i||c(j,d,g)}}return this.update(),g},deleteRow:function(a){for(var b=this.table.rows[a],c=this.indexTable[a],d=this.colsNum,e=0,f=0;f<d;){var g=c[f],h=this.getCell(g.rowIndex,g.cellIndex);if(h.rowSpan>1&&g.rowIndex==a){var i=h.cloneNode(!0);i.rowSpan=h.rowSpan-1,i.innerHTML=\"\",h.rowSpan=1;var j,k=a+1,l=this.table.rows[k],m=this.getPreviewMergedCellsNum(k,f)-e;m<f?(j=f-m-1,domUtils.insertAfter(l.cells[j],i)):l.cells.length&&l.insertBefore(i,l.cells[0]),e+=1}f+=h.colSpan||1}var n=[],o={};for(f=0;f<d;f++){var p=c[f].rowIndex,q=c[f].cellIndex,r=p+\"_\"+q;o[r]||(o[r]=1,h=this.getCell(p,q),n.push(h))}var s=[];utils.each(n,function(a){1==a.rowSpan?a.parentNode.removeChild(a):s.push(a)}),utils.each(s,function(a){a.rowSpan--}),b.parentNode.removeChild(b),this.update()},insertCol:function(a,b,c){function d(a,b,c){if(0==a){var d=b.nextSibling||b.previousSibling;\"TH\"==d.tagName&&(d=b.ownerDocument.createElement(\"th\"),d.appendChild(b.firstChild),c.insertBefore(d,b),domUtils.remove(b))}else if(\"TH\"==b.tagName){var e=b.ownerDocument.createElement(\"td\");e.appendChild(b.firstChild),c.insertBefore(e,b),domUtils.remove(b)}}var e,f,g,h=this.rowsNum,i=0,j=parseInt((this.table.offsetWidth-20*(this.colsNum+1)-(this.colsNum+1))/(this.colsNum+1),10),k=\"string\"==typeof b&&\"TH\"==b.toUpperCase();if(0==a||a==this.colsNum)for(;i<h;i++)e=this.table.rows[i],g=e.cells[0==a?a:e.cells.length],f=this.cloneCell(b,!0),this.setCellContent(f),f.setAttribute(\"vAlign\",f.getAttribute(\"vAlign\")),g&&f.setAttribute(\"width\",g.getAttribute(\"width\")),a?domUtils.insertAfter(e.cells[e.cells.length-1],f):e.insertBefore(f,e.cells[0]),k||d(i,f,e);else for(;i<h;i++){var l=this.indexTable[i][a];l.colIndex<a?(f=this.getCell(l.rowIndex,l.cellIndex),f.colSpan=l.colSpan+1):(e=this.table.rows[i],g=e.cells[l.cellIndex],f=this.cloneCell(b,!0),this.setCellContent(f),f.setAttribute(\"vAlign\",f.getAttribute(\"vAlign\")),g&&f.setAttribute(\"width\",g.getAttribute(\"width\")),g?e.insertBefore(f,g):e.appendChild(f)),k||d(i,f,e)}this.update(),this.updateWidth(j,c||{tdPadding:10,tdBorder:1})},updateWidth:function(a,c){var d=this.table,e=b.getWidth(d)-2*c.tdPadding-c.tdBorder+a;if(e<d.ownerDocument.body.offsetWidth)return void d.setAttribute(\"width\",e);var f=domUtils.getElementsByTagName(this.table,\"td th\");utils.each(f,function(b){b.setAttribute(\"width\",a)})},deleteCol:function(a){for(var b=this.indexTable,c=this.table.rows,d=this.table.getAttribute(\"width\"),e=0,f=this.rowsNum,g={},h=0;h<f;){var i=b[h],j=i[a],k=j.rowIndex+\"_\"+j.colIndex;if(!g[k]){g[k]=1;var l=this.getCell(j.rowIndex,j.cellIndex);e||(e=l&&parseInt(l.offsetWidth/l.colSpan,10).toFixed(0)),l.colSpan>1?l.colSpan--:c[h].deleteCell(j.cellIndex),h+=j.rowSpan||1}}this.table.setAttribute(\"width\",d-e),this.update()},splitToCells:function(a){var b=this,c=this.splitToRows(a);utils.each(c,function(a){b.splitToCols(a)})},splitToRows:function(a){var b=this.getCellInfo(a),c=b.rowIndex,d=b.colIndex,e=[];a.rowSpan=1,e.push(a);for(var f=c,g=c+b.rowSpan;f<g;f++)if(f!=c){var h=this.table.rows[f],i=h.insertCell(d-this.getPreviewMergedCellsNum(f,d));i.colSpan=b.colSpan,this.setCellContent(i),i.setAttribute(\"vAlign\",a.getAttribute(\"vAlign\")),i.setAttribute(\"align\",a.getAttribute(\"align\")),a.style.cssText&&(i.style.cssText=a.style.cssText),e.push(i)}return this.update(),e},getPreviewMergedCellsNum:function(a,b){for(var c=this.indexTable[a],d=0,e=0;e<b;){var f=c[e].colSpan,g=c[e].rowIndex;d+=f-(g==a?1:0),e+=f}return d},splitToCols:function(a){var b=(a.offsetWidth/a.colSpan-22).toFixed(0),c=this.getCellInfo(a),d=c.rowIndex,e=c.colIndex,f=[];a.colSpan=1,a.setAttribute(\"width\",b),f.push(a);for(var g=e,h=e+c.colSpan;g<h;g++)if(g!=e){var i=this.table.rows[d],j=i.insertCell(this.indexTable[d][g].cellIndex+1);if(j.rowSpan=c.rowSpan,this.setCellContent(j),j.setAttribute(\"vAlign\",a.getAttribute(\"vAlign\")),j.setAttribute(\"align\",a.getAttribute(\"align\")),j.setAttribute(\"width\",b),a.style.cssText&&(j.style.cssText=a.style.cssText),\"TH\"==a.tagName){var k=a.ownerDocument.createElement(\"th\");k.appendChild(j.firstChild),k.setAttribute(\"vAlign\",a.getAttribute(\"vAlign\")),k.rowSpan=j.rowSpan,i.insertBefore(k,j),domUtils.remove(j)}f.push(j)}return this.update(),f},isLastCell:function(a,b,c){b=b||this.rowsNum,c=c||this.colsNum;var d=this.getCellInfo(a);return d.rowIndex+d.rowSpan==b&&d.colIndex+d.colSpan==c},getLastCell:function(a){a=a||this.table.getElementsByTagName(\"td\");var b,c=(this.getCellInfo(a[0]),this),d=a[0],e=d.parentNode,f=0,g=0;return utils.each(a,function(a){a.parentNode==e&&(g+=a.colSpan||1),f+=a.rowSpan*a.colSpan||1}),b=f/g,utils.each(a,function(a){if(c.isLastCell(a,b,g))return d=a,!1}),d},selectRow:function(a){var b=this.indexTable[a],c=this.getCell(b[0].rowIndex,b[0].cellIndex),d=this.getCell(b[this.colsNum-1].rowIndex,b[this.colsNum-1].cellIndex),e=this.getCellsRange(c,d);this.setSelected(e)},selectTable:function(){var a=this.table.getElementsByTagName(\"td\"),b=this.getCellsRange(a[0],a[a.length-1]);this.setSelected(b)},setBackground:function(a,b){if(\"string\"==typeof b)utils.each(a,function(a){a.style.backgroundColor=b});else if(\"object\"==typeof b){b=utils.extend({repeat:!0,colorList:[\"#ddd\",\"#fff\"]},b);for(var c,d=this.getCellInfo(a[0]).rowIndex,e=0,f=b.colorList,g=function(a,b,c){return a[b]?a[b]:c?a[b%a.length]:\"\"},h=0;c=a[h++];){var i=this.getCellInfo(c);c.style.backgroundColor=g(f,d+e==i.rowIndex?e:++e,b.repeat)}}},removeBackground:function(a){utils.each(a,function(a){a.style.backgroundColor=\"\"})}}}(),function(){function a(a,c){var d=domUtils.getElementsByTagName(a,\"td th\");utils.each(d,function(a){a.removeAttribute(\"width\")}),a.setAttribute(\"width\",b(c,!0,g(c,a)));var e=[];setTimeout(function(){utils.each(d,function(a){1==a.colSpan&&e.push(a.offsetWidth)}),utils.each(d,function(a,b){1==a.colSpan&&a.setAttribute(\"width\",e[b]+\"\")})},0)}function b(a,b,c){var d=a.body;return d.offsetWidth-(b?2*parseInt(domUtils.getComputedStyle(d,\"margin-left\"),10):0)-2*c.tableBorder-(a.options.offsetWidth||0)}function c(a){var b=e(a).cell;if(b){var c=h(b);return c.selectedTds.length?c.selectedTds:[b]}return[]}var d=UE.UETable,e=function(a){return d.getTableItemsByRange(a)},f=function(a){return d.getUETableBySelected(a)},g=function(a,b){return d.getDefaultValue(a,b)},h=function(a){return d.getUETable(a)};UE.commands.inserttable={queryCommandState:function(){return e(this).table?-1:0},execCommand:function(a,b){function c(a,b){for(var c=[],d=a.numRows,e=a.numCols,f=0;f<d;f++){c.push(\"<tr\"+(0==f?' class=\"firstRow\"':\"\")+\">\");for(var g=0;g<e;g++)c.push('<td width=\"'+b+'\"  vAlign=\"'+a.tdvalign+'\" >'+(browser.ie&&browser.version<11?domUtils.fillChar:\"<br/>\")+\"</td>\");c.push(\"</tr>\")}return\"<table><tbody>\"+c.join(\"\")+\"</tbody></table>\"}b||(b=utils.extend({},{numCols:this.options.defaultCols,numRows:this.options.defaultRows,tdvalign:this.options.tdvalign}));var d=this,e=this.selection.getRange(),f=e.startContainer,h=domUtils.findParent(f,function(a){return domUtils.isBlockElm(a)},!0)||d.body,i=g(d),j=h.offsetWidth,k=Math.floor(j/b.numCols-2*i.tdPadding-i.tdBorder);!b.tdvalign&&(b.tdvalign=d.options.tdvalign),d.execCommand(\"inserthtml\",c(b,k))}},UE.commands.insertparagraphbeforetable={queryCommandState:function(){return e(this).cell?0:-1},execCommand:function(){var a=e(this).table;if(a){var b=this.document.createElement(\"p\");b.innerHTML=browser.ie?\"&nbsp;\":\"<br />\",a.parentNode.insertBefore(b,a),this.selection.getRange().setStart(b,0).setCursor()}}},UE.commands.deletetable={queryCommandState:function(){var a=this.selection.getRange();return domUtils.findParentByTagName(a.startContainer,\"table\",!0)?0:-1},execCommand:function(a,b){var c=this.selection.getRange();if(b=b||domUtils.findParentByTagName(c.startContainer,\"table\",!0)){var d=b.nextSibling;d||(d=domUtils.createElement(this.document,\"p\",{innerHTML:browser.ie?domUtils.fillChar:\"<br/>\"}),b.parentNode.insertBefore(d,b)),domUtils.remove(b),c=this.selection.getRange(),3==d.nodeType?c.setStartBefore(d):c.setStart(d,0),c.setCursor(!1,!0),this.fireEvent(\"tablehasdeleted\")}}},UE.commands.cellalign={queryCommandState:function(){return c(this).length?0:-1},execCommand:function(a,b){var d=c(this);if(d.length)for(var e,f=0;e=d[f++];)e.setAttribute(\"align\",b)}},UE.commands.cellvalign={queryCommandState:function(){return c(this).length?0:-1},execCommand:function(a,b){var d=c(this);if(d.length)for(var e,f=0;e=d[f++];)e.setAttribute(\"vAlign\",b)}},UE.commands.insertcaption={queryCommandState:function(){var a=e(this).table;return a&&0==a.getElementsByTagName(\"caption\").length?1:-1},execCommand:function(){var a=e(this).table;if(a){var b=this.document.createElement(\"caption\");b.innerHTML=browser.ie?domUtils.fillChar:\"<br/>\",a.insertBefore(b,a.firstChild);var c=this.selection.getRange();c.setStart(b,0).setCursor()}}},UE.commands.deletecaption={queryCommandState:function(){var a=this.selection.getRange(),b=domUtils.findParentByTagName(a.startContainer,\"table\");return b?0==b.getElementsByTagName(\"caption\").length?-1:1:-1},execCommand:function(){var a=this.selection.getRange(),b=domUtils.findParentByTagName(a.startContainer,\"table\");if(b){domUtils.remove(b.getElementsByTagName(\"caption\")[0]);var c=this.selection.getRange();c.setStart(b.rows[0].cells[0],0).setCursor()}}},UE.commands.inserttitle={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[0];return\"th\"!=b.cells[b.cells.length-1].tagName.toLowerCase()?0:-1}return-1},execCommand:function(){var a=e(this).table;a&&h(a).insertRow(0,\"th\");var b=a.getElementsByTagName(\"th\")[0];this.selection.getRange().setStart(b,0).setCursor(!1,!0)}},UE.commands.deletetitle={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[0];return\"th\"==b.cells[b.cells.length-1].tagName.toLowerCase()?0:-1}return-1},execCommand:function(){var a=e(this).table;a&&domUtils.remove(a.rows[0]);var b=a.getElementsByTagName(\"td\")[0];this.selection.getRange().setStart(b,0).setCursor(!1,!0)}},UE.commands.inserttitlecol={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[a.rows.length-1];return b.getElementsByTagName(\"th\").length?-1:0}return-1},execCommand:function(b){var c=e(this).table;c&&h(c).insertCol(0,\"th\"),a(c,this);var d=c.getElementsByTagName(\"th\")[0];this.selection.getRange().setStart(d,0).setCursor(!1,!0)}},UE.commands.deletetitlecol={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[a.rows.length-1];return b.getElementsByTagName(\"th\").length?0:-1}return-1},execCommand:function(){var b=e(this).table;if(b)for(var c=0;c<b.rows.length;c++)domUtils.remove(b.rows[c].children[0]);a(b,this);var d=b.getElementsByTagName(\"td\")[0];this.selection.getRange().setStart(d,0).setCursor(!1,!0)}},UE.commands.mergeright={queryCommandState:function(a){var b=e(this),c=b.table,d=b.cell;if(!c||!d)return-1;var f=h(c);if(f.selectedTds.length)return-1;var g=f.getCellInfo(d),i=g.colIndex+g.colSpan;if(i>=f.colsNum)return-1;var j=f.indexTable[g.rowIndex][i],k=c.rows[j.rowIndex].cells[j.cellIndex];return k&&d.tagName==k.tagName&&j.rowIndex==g.rowIndex&&j.rowSpan==g.rowSpan?0:-1},execCommand:function(a){var b=this.selection.getRange(),c=b.createBookmark(!0),d=e(this).cell,f=h(d);f.mergeRight(d),b.moveToBookmark(c).select()}},UE.commands.mergedown={queryCommandState:function(a){var b=e(this),c=b.table,d=b.cell;if(!c||!d)return-1;var f=h(c);if(f.selectedTds.length)return-1;var g=f.getCellInfo(d),i=g.rowIndex+g.rowSpan;if(i>=f.rowsNum)return-1;var j=f.indexTable[i][g.colIndex],k=c.rows[j.rowIndex].cells[j.cellIndex];return k&&d.tagName==k.tagName&&j.colIndex==g.colIndex&&j.colSpan==g.colSpan?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.mergeDown(c),a.moveToBookmark(b).select()}},UE.commands.mergecells={queryCommandState:function(){return f(this)?0:-1},execCommand:function(){var a=f(this);if(a&&a.selectedTds.length){var b=a.selectedTds[0];a.mergeRange();var c=this.selection.getRange();domUtils.isEmptyBlock(b)?c.setStart(b,0).collapse(!0):c.selectNodeContents(b),c.select()}}},UE.commands.insertrow={queryCommandState:function(){var a=e(this),b=a.cell;return b&&(\"TD\"==b.tagName||\"TH\"==b.tagName&&a.tr!==a.table.rows[0])&&h(a.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this),d=c.cell,f=c.table,g=h(f),i=g.getCellInfo(d);if(g.selectedTds.length)for(var j=g.cellsRange,k=0,l=j.endRowIndex-j.beginRowIndex+1;k<l;k++)g.insertRow(j.beginRowIndex,d);else g.insertRow(i.rowIndex,d);a.moveToBookmark(b).select(),\"enabled\"===f.getAttribute(\"interlaced\")&&this.fireEvent(\"interlacetable\",f)}},UE.commands.insertrownext={queryCommandState:function(){var a=e(this),b=a.cell;return b&&\"TD\"==b.tagName&&h(a.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this),d=c.cell,f=c.table,g=h(f),i=g.getCellInfo(d);if(g.selectedTds.length)for(var j=g.cellsRange,k=0,l=j.endRowIndex-j.beginRowIndex+1;k<l;k++)g.insertRow(j.endRowIndex+1,d);else g.insertRow(i.rowIndex+i.rowSpan,d);a.moveToBookmark(b).select(),\"enabled\"===f.getAttribute(\"interlaced\")&&this.fireEvent(\"interlacetable\",f)}},UE.commands.deleterow={queryCommandState:function(){var a=e(this);return a.cell?0:-1},execCommand:function(){var a=e(this).cell,b=h(a),c=b.cellsRange,d=b.getCellInfo(a),f=b.getVSideCell(a),g=b.getVSideCell(a,!0),i=this.selection.getRange();if(utils.isEmptyObject(c))b.deleteRow(d.rowIndex);else for(var j=c.beginRowIndex;j<c.endRowIndex+1;j++)b.deleteRow(c.beginRowIndex);var k=b.table;if(k.getElementsByTagName(\"td\").length)if(1==d.rowSpan||d.rowSpan==c.endRowIndex-c.beginRowIndex+1)(g||f)&&i.selectNodeContents(g||f).setCursor(!1,!0);else{var l=b.getCell(d.rowIndex,b.indexTable[d.rowIndex][d.colIndex].cellIndex);l&&i.selectNodeContents(l).setCursor(!1,!0)}else{var m=k.nextSibling;domUtils.remove(k),m&&i.setStart(m,0).setCursor(!1,!0)}\"enabled\"===k.getAttribute(\"interlaced\")&&this.fireEvent(\"interlacetable\",k)}},UE.commands.insertcol={queryCommandState:function(a){var b=e(this),c=b.cell;return c&&(\"TD\"==c.tagName||\"TH\"==c.tagName&&c!==b.tr.cells[0])&&h(b.table).colsNum<this.options.maxColNum?0:-1;\n},execCommand:function(a){var b=this.selection.getRange(),c=b.createBookmark(!0);if(this.queryCommandState(a)!=-1){var d=e(this).cell,f=h(d),g=f.getCellInfo(d);if(f.selectedTds.length)for(var i=f.cellsRange,j=0,k=i.endColIndex-i.beginColIndex+1;j<k;j++)f.insertCol(i.beginColIndex,d);else f.insertCol(g.colIndex,d);b.moveToBookmark(c).select(!0)}}},UE.commands.insertcolnext={queryCommandState:function(){var a=e(this),b=a.cell;return b&&h(a.table).colsNum<this.options.maxColNum?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c),f=d.getCellInfo(c);if(d.selectedTds.length)for(var g=d.cellsRange,i=0,j=g.endColIndex-g.beginColIndex+1;i<j;i++)d.insertCol(g.endColIndex+1,c);else d.insertCol(f.colIndex+f.colSpan,c);a.moveToBookmark(b).select()}},UE.commands.deletecol={queryCommandState:function(){var a=e(this);return a.cell?0:-1},execCommand:function(){var a=e(this).cell,b=h(a),c=b.cellsRange,d=b.getCellInfo(a),f=b.getHSideCell(a),g=b.getHSideCell(a,!0);if(utils.isEmptyObject(c))b.deleteCol(d.colIndex);else for(var i=c.beginColIndex;i<c.endColIndex+1;i++)b.deleteCol(c.beginColIndex);var j=b.table,k=this.selection.getRange();if(j.getElementsByTagName(\"td\").length)domUtils.inDoc(a,this.document)?k.setStart(a,0).setCursor(!1,!0):g&&domUtils.inDoc(g,this.document)?k.selectNodeContents(g).setCursor(!1,!0):f&&domUtils.inDoc(f,this.document)&&k.selectNodeContents(f).setCursor(!0,!0);else{var l=j.nextSibling;domUtils.remove(j),l&&k.setStart(l,0).setCursor(!1,!0)}}},UE.commands.splittocells={queryCommandState:function(){var a=e(this),b=a.cell;if(!b)return-1;var c=h(a.table);return c.selectedTds.length>0?-1:b&&(b.colSpan>1||b.rowSpan>1)?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.splitToCells(c),a.moveToBookmark(b).select()}},UE.commands.splittorows={queryCommandState:function(){var a=e(this),b=a.cell;if(!b)return-1;var c=h(a.table);return c.selectedTds.length>0?-1:b&&b.rowSpan>1?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.splitToRows(c),a.moveToBookmark(b).select()}},UE.commands.splittocols={queryCommandState:function(){var a=e(this),b=a.cell;if(!b)return-1;var c=h(a.table);return c.selectedTds.length>0?-1:b&&b.colSpan>1?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.splitToCols(c),a.moveToBookmark(b).select()}},UE.commands.adaptbytext=UE.commands.adaptbywindow={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(b){var c=e(this),d=c.table;if(d)if(\"adaptbywindow\"==b)a(d,this);else{var f=domUtils.getElementsByTagName(d,\"td th\");utils.each(f,function(a){a.removeAttribute(\"width\")}),d.removeAttribute(\"width\")}}},UE.commands.averagedistributecol={queryCommandState:function(){var a=f(this);return a&&(a.isFullRow()||a.isFullCol())?0:-1},execCommand:function(a){function b(){var a,b=e.table,c=0,f=0,h=g(d,b);if(e.isFullRow())c=b.offsetWidth,f=e.colsNum;else for(var i,j=e.cellsRange.beginColIndex,k=e.cellsRange.endColIndex,l=j;l<=k;)i=e.selectedTds[l],c+=i.offsetWidth,l+=i.colSpan,f+=1;return a=Math.ceil(c/f)-2*h.tdBorder-2*h.tdPadding}function c(a){utils.each(domUtils.getElementsByTagName(e.table,\"th\"),function(a){a.setAttribute(\"width\",\"\")});var b=e.isFullRow()?domUtils.getElementsByTagName(e.table,\"td\"):e.selectedTds;utils.each(b,function(b){1==b.colSpan&&b.setAttribute(\"width\",a)})}var d=this,e=f(d);e&&e.selectedTds.length&&c(b())}},UE.commands.averagedistributerow={queryCommandState:function(){var a=f(this);return a?a.selectedTds&&/th/gi.test(a.selectedTds[0].tagName)?-1:a.isFullRow()||a.isFullCol()?0:-1:-1},execCommand:function(a){function b(){var a,b,c=0,f=e.table,h=g(d,f),i=parseInt(domUtils.getComputedStyle(f.getElementsByTagName(\"td\")[0],\"padding-top\"));if(e.isFullCol()){var j,k,l=domUtils.getElementsByTagName(f,\"caption\"),m=domUtils.getElementsByTagName(f,\"th\");l.length>0&&(j=l[0].offsetHeight),m.length>0&&(k=m[0].offsetHeight),c=f.offsetHeight-(j||0)-(k||0),b=0==m.length?e.rowsNum:e.rowsNum-1}else{for(var n=e.cellsRange.beginRowIndex,o=e.cellsRange.endRowIndex,p=0,q=domUtils.getElementsByTagName(f,\"tr\"),r=n;r<=o;r++)c+=q[r].offsetHeight,p+=1;b=p}return a=browser.ie&&browser.version<9?Math.ceil(c/b):Math.ceil(c/b)-2*h.tdBorder-2*i}function c(a){var b=e.isFullCol()?domUtils.getElementsByTagName(e.table,\"td\"):e.selectedTds;utils.each(b,function(b){1==b.rowSpan&&b.setAttribute(\"height\",a)})}var d=this,e=f(d);e&&e.selectedTds.length&&c(b())}},UE.commands.cellalignment={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(a,b){var c=this,d=f(c);if(d)utils.each(d.selectedTds,function(a){domUtils.setAttributes(a,b)});else{var e=c.selection.getStart(),g=e&&domUtils.findParentByTagName(e,[\"td\",\"th\",\"caption\"],!0);/caption/gi.test(g.tagName)?(g.style.textAlign=b.align,g.style.verticalAlign=b.vAlign):domUtils.setAttributes(g,b),c.selection.getRange().setCursor(!0)}},queryCommandValue:function(a){var b=e(this).cell;if(b||(b=c(this)[0]),b){var d=UE.UETable.getUETable(b).selectedTds;return!d.length&&(d=b),UE.UETable.getTableCellAlignState(d)}return null}},UE.commands.tablealignment={queryCommandState:function(){return browser.ie&&browser.version<8?-1:e(this).table?0:-1},execCommand:function(a,b){var c=this,d=c.selection.getStart(),e=d&&domUtils.findParentByTagName(d,[\"table\"],!0);e&&e.setAttribute(\"align\",b)}},UE.commands.edittable={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(a,b){var c=this.selection.getRange(),d=domUtils.findParentByTagName(c.startContainer,\"table\");if(d){var e=domUtils.getElementsByTagName(d,\"td\").concat(domUtils.getElementsByTagName(d,\"th\"),domUtils.getElementsByTagName(d,\"caption\"));utils.each(e,function(a){a.style.borderColor=b})}}},UE.commands.edittd={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(a,b){var c=this,d=f(c);if(d)utils.each(d.selectedTds,function(a){a.style.backgroundColor=b});else{var e=c.selection.getStart(),g=e&&domUtils.findParentByTagName(e,[\"td\",\"th\",\"caption\"],!0);g&&(g.style.backgroundColor=b)}}},UE.commands.settablebackground={queryCommandState:function(){return c(this).length>1?0:-1},execCommand:function(a,b){var d,e;d=c(this),e=h(d[0]),e.setBackground(d,b)}},UE.commands.cleartablebackground={queryCommandState:function(){var a=c(this);if(!a.length)return-1;for(var b,d=0;b=a[d++];)if(\"\"!==b.style.backgroundColor)return 0;return-1},execCommand:function(){var a=c(this),b=h(a[0]);b.removeBackground(a)}},UE.commands.interlacetable=UE.commands.uninterlacetable={queryCommandState:function(a){var b=e(this).table;if(!b)return-1;var c=b.getAttribute(\"interlaced\");return\"interlacetable\"==a?\"enabled\"===c?-1:0:c&&\"disabled\"!==c?0:-1},execCommand:function(a,b){var c=e(this).table;\"interlacetable\"==a?(c.setAttribute(\"interlaced\",\"enabled\"),this.fireEvent(\"interlacetable\",c,b)):(c.setAttribute(\"interlaced\",\"disabled\"),this.fireEvent(\"uninterlacetable\",c))}},UE.commands.setbordervisible={queryCommandState:function(a){var b=e(this).table;return b?0:-1},execCommand:function(){var a=e(this).table;utils.each(domUtils.getElementsByTagName(a,\"td\"),function(a){a.style.borderWidth=\"1px\",a.style.borderStyle=\"solid\"})}}}(),UE.plugins.table=function(){function a(a){}function b(a,b){c(a,\"width\",!0),c(a,\"height\",!0)}function c(a,b,c){a.style[b]&&(c&&a.setAttribute(b,parseInt(a.style[b],10)),a.style[b]=\"\")}function d(a){if(\"TD\"==a.tagName||\"TH\"==a.tagName)return a;var b;return(b=domUtils.findParentByTagName(a,\"td\",!0)||domUtils.findParentByTagName(a,\"th\",!0))?b:null}function e(a){var b=new RegExp(domUtils.fillChar,\"g\");if(a[browser.ie?\"innerText\":\"textContent\"].replace(/^\\s*$/,\"\").replace(b,\"\").length>0)return 0;for(var c in dtd.$isNotEmpty)if(a.getElementsByTagName(c).length)return 0;return 1}function f(a){return a.pageX||a.pageY?{x:a.pageX,y:a.pageY}:{x:a.clientX+N.document.body.scrollLeft-N.document.body.clientLeft,y:a.clientY+N.document.body.scrollTop-N.document.body.clientTop}}function g(b){if(!A())try{var c,e=d(b.target||b.srcElement);if(R&&(N.body.style.webkitUserSelect=\"none\",(Math.abs(V.x-b.clientX)>T||Math.abs(V.y-b.clientY)>T)&&(t(),R=!1,U=0,v(b))),ca&&ha)return U=0,N.body.style.webkitUserSelect=\"none\",N.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"](),c=f(b),m(N,!0,ca,c,e),void(\"h\"==ca?ga.style.left=k(ha,b)+\"px\":\"v\"==ca&&(ga.style.top=l(ha,b)+\"px\"));if(e){if(N.fireEvent(\"excludetable\",e)===!0)return;c=f(b);var g=n(e,c),i=domUtils.findParentByTagName(e,\"table\",!0);if(j(i,e,b,!0)){if(N.fireEvent(\"excludetable\",i)===!0)return;N.body.style.cursor=\"url(\"+N.options.cursorpath+\"h.png),pointer\"}else if(j(i,e,b)){if(N.fireEvent(\"excludetable\",i)===!0)return;N.body.style.cursor=\"url(\"+N.options.cursorpath+\"v.png),pointer\"}else{N.body.style.cursor=\"text\";/\\d/.test(g)&&(g=g.replace(/\\d/,\"\"),e=Y(e).getPreviewCell(e,\"v\"==g)),m(N,!!e&&!!g,e?g:\"\",c,e)}}else h(!1,i,N)}catch(o){a(o)}}function h(a,b,c){if(a)i(b,c);else{if(fa)return;la=setTimeout(function(){!fa&&ea&&ea.parentNode&&ea.parentNode.removeChild(ea)},2e3)}}function i(a,b){function c(c,d){clearTimeout(g),g=setTimeout(function(){b.fireEvent(\"tableClicked\",a,d)},300)}function d(c){clearTimeout(g);var d=Y(a),e=a.rows[0].cells[0],f=d.getLastCell(),h=d.getCellsRange(e,f);b.selection.getRange().setStart(e,0).setCursor(!1,!0),d.setSelected(h)}var e=domUtils.getXY(a),f=a.ownerDocument;if(ea&&ea.parentNode)return ea;ea=f.createElement(\"div\"),ea.contentEditable=!1,ea.innerHTML=\"\",ea.style.cssText=\"width:15px;height:15px;background-image:url(\"+b.options.UEDITOR_HOME_URL+\"dialogs/table/dragicon.png);position: absolute;cursor:move;top:\"+(e.y-15)+\"px;left:\"+e.x+\"px;\",domUtils.unSelectable(ea),ea.onmouseover=function(a){fa=!0},ea.onmouseout=function(a){fa=!1},domUtils.on(ea,\"click\",function(a,b){c(b,this)}),domUtils.on(ea,\"dblclick\",function(a,b){d(b)}),domUtils.on(ea,\"dragstart\",function(a,b){domUtils.preventDefault(b)});var g;f.body.appendChild(ea)}function j(a,b,c,d){var e=f(c),g=n(b,e);if(d){var h=a.getElementsByTagName(\"caption\")[0],i=h?h.offsetHeight:0;return\"v1\"==g&&e.y-domUtils.getXY(a).y-i<8}return\"h1\"==g&&e.x-domUtils.getXY(a).x<8}function k(a,b){var c=Y(a);if(c){var d=c.getSameEndPosCells(a,\"x\")[0],e=c.getSameStartPosXCells(a)[0],g=f(b).x,h=(d?domUtils.getXY(d).x:domUtils.getXY(c.table).x)+20,i=e?domUtils.getXY(e).x+e.offsetWidth-20:N.body.offsetWidth+5||parseInt(domUtils.getComputedStyle(N.body,\"width\"),10);return h+=Q,i-=Q,g<h?h:g>i?i:g}}function l(b,c){try{var d=domUtils.getXY(b).y,e=f(c).y;return e<d?d:e}catch(g){a(g)}}function m(b,c,d,e,f){try{b.body.style.cursor=\"h\"==d?\"col-resize\":\"v\"==d?\"row-resize\":\"text\",browser.ie&&(!d||ia||Z(b)?I(b):(H(b,b.document),J(d,f))),da=c}catch(g){a(g)}}function n(a,b){var c=domUtils.getXY(a);return c?c.x+a.offsetWidth-b.x<S?\"h\":b.x-c.x<S?\"h1\":c.y+a.offsetHeight-b.y<S?\"v\":b.y-c.y<S?\"v1\":\"\":\"\"}function o(a,b){if(!A())if(V={x:b.clientX,y:b.clientY},2==b.button){var c=Z(N),d=!1;if(c){var e=M(N,b);utils.each(c.selectedTds,function(a){a===e&&(d=!0)}),d?(e=c.selectedTds[0],setTimeout(function(){N.selection.getRange().setStart(e,0).setCursor(!1,!0)},0)):(_(domUtils.getElementsByTagName(N.body,\"th td\")),c.clearSelected())}}else q(b)}function p(a){U=0,a=a||N.window.event;var b=d(a.target||a.srcElement);if(b){var c;if(c=n(b,f(a))){if(I(N),\"h1\"==c)if(c=\"h\",j(domUtils.findParentByTagName(b,\"table\"),b,a))N.execCommand(\"adaptbywindow\");else if(b=Y(b).getPreviewCell(b)){var e=N.selection.getRange();e.selectNodeContents(b).setCursor(!0,!0)}if(\"h\"==c){var g=Y(b),h=g.table,i=C(b,h,!0);i=s(i,\"left\"),g.width=g.offsetWidth;var k=[],l=[];utils.each(i,function(a){k.push(a.offsetWidth)}),utils.each(i,function(a){a.removeAttribute(\"width\")}),window.setTimeout(function(){var a=!0;utils.each(i,function(b,c){var d=b.offsetWidth;return d>k[c]?(a=!1,!1):void l.push(d)});var b=a?l:k;utils.each(i,function(a,c){a.width=b[c]-G()})},0)}}}}function q(a){if(_(domUtils.getElementsByTagName(N.body,\"td th\")),utils.each(N.document.getElementsByTagName(\"table\"),function(a){a.ueTable=null}),aa=M(N,a)){var b=domUtils.findParentByTagName(aa,\"table\",!0);ut=Y(b),ut&&ut.clearSelected(),da?r(a):(N.document.body.style.webkitUserSelect=\"\",ia=!0,N.addListener(\"mouseover\",x))}}function r(a){browser.ie&&(a=u(a)),t(),R=!0,O=setTimeout(function(){v(a)},W)}function s(a,b){for(var c=[],d=null,e=0,f=a.length;e<f;e++)d=a[e][b],d&&c.push(d);return c}function t(){O&&clearTimeout(O),O=null}function u(a){var b=[\"pageX\",\"pageY\",\"clientX\",\"clientY\",\"srcElement\",\"target\"],c={};if(a)for(var d,e,f=0;d=b[f];f++)e=a[d],e&&(c[d]=e);return c}function v(a){if(R=!1,aa=a.target||a.srcElement){var b=n(aa,f(a));/\\d/.test(b)&&(b=b.replace(/\\d/,\"\"),aa=Y(aa).getPreviewCell(aa,\"v\"==b)),I(N),H(N,N.document),N.fireEvent(\"saveScene\"),J(b,aa),ia=!0,ca=b,ha=aa}}function w(a,b){if(!A()){if(t(),R=!1,da&&(U=++U%3,V={x:b.clientX,y:b.clientY},P=setTimeout(function(){U>0&&U--},W),2===U))return U=0,void p(b);if(2!=b.button){var c=this,d=c.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,\"table\",!0),f=domUtils.findParentByTagName(d.endContainer,\"table\",!0);if((e||f)&&(e===f?(e=domUtils.findParentByTagName(d.startContainer,[\"td\",\"th\",\"caption\"],!0),f=domUtils.findParentByTagName(d.endContainer,[\"td\",\"th\",\"caption\"],!0),e!==f&&c.selection.clearRange()):c.selection.clearRange()),ia=!1,c.document.body.style.webkitUserSelect=\"\",ca&&ha&&(c.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"](),U=0,ga=c.document.getElementById(\"ue_tableDragLine\"))){var g=domUtils.getXY(ha),h=domUtils.getXY(ga);switch(ca){case\"h\":z(ha,h.x-g.x);break;case\"v\":B(ha,h.y-g.y-ha.offsetHeight)}return ca=\"\",ha=null,I(c),void c.fireEvent(\"saveScene\")}if(aa){var i=Y(aa),j=i?i.selectedTds[0]:null;if(j)d=new dom.Range(c.document),domUtils.isEmptyBlock(j)?d.setStart(j,0).setCursor(!1,!0):d.selectNodeContents(j).shrinkBoundary().setCursor(!1,!0);else if(d=c.selection.getRange().shrinkBoundary(),!d.collapsed){var e=domUtils.findParentByTagName(d.startContainer,[\"td\",\"th\"],!0),f=domUtils.findParentByTagName(d.endContainer,[\"td\",\"th\"],!0);(e&&!f||!e&&f||e&&f&&e!==f)&&d.setCursor(!1,!0)}aa=null,c.removeListener(\"mouseover\",x)}else{var k=domUtils.findParentByTagName(b.target||b.srcElement,\"td\",!0);if(k||(k=domUtils.findParentByTagName(b.target||b.srcElement,\"th\",!0)),k&&(\"TD\"==k.tagName||\"TH\"==k.tagName)){if(c.fireEvent(\"excludetable\",k)===!0)return;d=new dom.Range(c.document),d.setStart(k,0).setCursor(!1,!0)}}c._selectionChange(250,b)}}}function x(a,b){if(!A()){var c=this,d=b.target||b.srcElement;if(ba=domUtils.findParentByTagName(d,\"td\",!0)||domUtils.findParentByTagName(d,\"th\",!0),aa&&ba&&(\"TD\"==aa.tagName&&\"TD\"==ba.tagName||\"TH\"==aa.tagName&&\"TH\"==ba.tagName)&&domUtils.findParentByTagName(aa,\"table\")==domUtils.findParentByTagName(ba,\"table\")){var e=Y(ba);if(aa!=ba){c.document.body.style.webkitUserSelect=\"none\",c.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();var f=e.getCellsRange(aa,ba);e.setSelected(f)}else c.document.body.style.webkitUserSelect=\"\",e.clearSelected()}b.preventDefault?b.preventDefault():b.returnValue=!1}}function y(a,b,c){var d=parseInt(domUtils.getComputedStyle(a,\"line-height\"),10),e=c+b;b=e<d?d:e,a.style.height&&(a.style.height=\"\"),1==a.rowSpan?a.setAttribute(\"height\",b):a.removeAttribute&&a.removeAttribute(\"height\")}function z(a,b){var c=Y(a);if(c){var d=c.table,e=C(a,d);if(d.style.width=\"\",d.removeAttribute(\"width\"),b=D(b,a,e),a.nextSibling){utils.each(e,function(a){a.left.width=+a.left.width+b,a.right&&(a.right.width=+a.right.width-b)})}else utils.each(e,function(a){a.left.width-=-b})}}function A(){return\"false\"===N.body.contentEditable}function B(a,b){if(!(Math.abs(b)<10)){var c=Y(a);if(c)for(var d,e=c.getSameEndPosCells(a,\"y\"),f=e[0]?e[0].offsetHeight:0,g=0;d=e[g++];)y(d,b,f)}}function C(a,b,c){if(b||(b=domUtils.findParentByTagName(a,\"table\")),!b)return null;for(var d=(domUtils.getNodeIndex(a),a),e=b.rows,f=0;d;)1===d.nodeType&&(f+=d.colSpan||1),d=d.previousSibling;d=null;var g=[];return utils.each(e,function(a){var b=a.cells,d=0;utils.each(b,function(a){return d+=a.colSpan||1,d===f?(g.push({left:a,right:a.nextSibling||null}),!1):d>f?(c&&g.push({left:a}),!1):void 0})}),g}function D(a,b,c){if(a-=G(),a<0)return 0;a-=E(b);var d=a<0?\"left\":\"right\";return a=Math.abs(a),utils.each(c,function(b){var c=b[d];c&&(a=Math.min(a,E(c)-Q))}),a=a<0?0:a,\"left\"===d?-a:a}function E(a){var b=0,b=a.offsetWidth-G();a.nextSibling||(b-=F(a)),b=b<0?0:b;try{a.width=b}catch(c){}return b}function F(a){if(tab=domUtils.findParentByTagName(a,\"table\",!1),void 0===tab.offsetVal){var b=a.previousSibling;b?tab.offsetVal=a.offsetWidth-b.offsetWidth===X.borderWidth?X.borderWidth:0:tab.offsetVal=0}return tab.offsetVal}function G(){if(void 0===X.tabcellSpace){var a=N.document.createElement(\"table\"),b=N.document.createElement(\"tbody\"),c=N.document.createElement(\"tr\"),d=N.document.createElement(\"td\"),e=null;d.style.cssText=\"border: 0;\",d.width=1,c.appendChild(d),c.appendChild(e=d.cloneNode(!1)),b.appendChild(c),a.appendChild(b),a.style.cssText=\"visibility: hidden;\",N.body.appendChild(a),X.paddingSpace=d.offsetWidth-1;var f=a.offsetWidth;d.style.cssText=\"\",e.style.cssText=\"\",X.borderWidth=(a.offsetWidth-f)/3,X.tabcellSpace=X.paddingSpace+X.borderWidth,N.body.removeChild(a)}return G=function(){return X.tabcellSpace},X.tabcellSpace}function H(a,b){ia||(ga=a.document.createElement(\"div\"),domUtils.setAttributes(ga,{id:\"ue_tableDragLine\",unselectable:\"on\",contenteditable:!1,onresizestart:\"return false\",ondragstart:\"return false\",onselectstart:\"return false\",style:\"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)\"}),a.body.appendChild(ga))}function I(a){if(!ia)for(var b;b=a.document.getElementById(\"ue_tableDragLine\");)domUtils.remove(b)}function J(a,b){if(b){var c,d=domUtils.findParentByTagName(b,\"table\"),e=d.getElementsByTagName(\"caption\"),f=d.offsetWidth,g=d.offsetHeight-(e.length>0?e[0].offsetHeight:0),h=domUtils.getXY(d),i=domUtils.getXY(b);switch(a){case\"h\":c=\"height:\"+g+\"px;top:\"+(h.y+(e.length>0?e[0].offsetHeight:0))+\"px;left:\"+(i.x+b.offsetWidth),ga.style.cssText=c+\"px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)\";break;case\"v\":c=\"width:\"+f+\"px;left:\"+h.x+\"px;top:\"+(i.y+b.offsetHeight),ga.style.cssText=c+\"px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)\"}}}function K(a,b){for(var c,d,e=domUtils.getElementsByTagName(a.body,\"table\"),f=0;d=e[f++];){var g=domUtils.getElementsByTagName(d,\"td\");g[0]&&(b?(c=g[0].style.borderColor.replace(/\\s/g,\"\"),/(#ffffff)|(rgb\\(255,255,255\\))/gi.test(c)&&domUtils.addClass(d,\"noBorderTable\")):domUtils.removeClasses(d,\"noBorderTable\"))}}function L(a,b,c){var d=a.body;return d.offsetWidth-(b?2*parseInt(domUtils.getComputedStyle(d,\"margin-left\"),10):0)-2*c.tableBorder-(a.options.offsetWidth||0)}function M(a,b){var c=domUtils.findParentByTagName(b.target||b.srcElement,[\"td\",\"th\"],!0),d=null;if(!c)return null;if(d=n(c,f(b)),!c)return null;if(\"h1\"===d&&c.previousSibling){var e=domUtils.getXY(c),g=c.offsetWidth;Math.abs(e.x+g-b.clientX)>g/3&&(c=c.previousSibling)}else if(\"v1\"===d&&c.parentNode.previousSibling){var e=domUtils.getXY(c),h=c.offsetHeight;Math.abs(e.y+h-b.clientY)>h/3&&(c=c.parentNode.previousSibling.firstChild)}return c&&a.fireEvent(\"excludetable\",c)!==!0?c:null}var N=this,O=null,P=null,Q=5,R=!1,S=5,T=10,U=0,V=null,W=360,X=UE.UETable,Y=function(a){return X.getUETable(a)},Z=function(a){return X.getUETableBySelected(a)},$=function(a,b){return X.getDefaultValue(a,b)},_=function(a){return X.removeSelectedClass(a)};N.ready(function(){var a=this,b=a.selection.getText;a.selection.getText=function(){var c=Z(a);if(c){var d=\"\";return utils.each(c.selectedTds,function(a){d+=a[browser.ie?\"innerText\":\"textContent\"]}),d}return b.call(a.selection)}});var aa=null,ba=null,ca=\"\",da=!1,ea=null,fa=!1,ga=null,ha=null,ia=!1,ja=!0;N.setOpt({maxColNum:20,maxRowNum:100,defaultCols:5,defaultRows:5,tdvalign:\"top\",cursorpath:N.options.UEDITOR_HOME_URL+\"themes/default/images/cursor_\",tableDragable:!1,classList:[\"ue-table-interlace-color-single\",\"ue-table-interlace-color-double\"]}),N.getUETable=Y;var ka={deletetable:1,inserttable:1,cellvalign:1,insertcaption:1,deletecaption:1,inserttitle:1,deletetitle:1,mergeright:1,mergedown:1,mergecells:1,insertrow:1,insertrownext:1,deleterow:1,insertcol:1,insertcolnext:1,deletecol:1,splittocells:1,splittorows:1,splittocols:1,adaptbytext:1,adaptbywindow:1,adaptbycustomer:1,insertparagraph:1,insertparagraphbeforetable:1,averagedistributecol:1,averagedistributerow:1};N.ready(function(){utils.cssRule(\"table\",\".selectTdClass{background-color:#edf5fa !important}table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}table{margin-bottom:10px;border-collapse:collapse;display:table;}td,th{padding: 5px 10px;border: 1px solid #DDD;}caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}th{border-top:1px solid #BBB;background-color:#F7F7F7;}table tr.firstRow th{border-top-width:2px;}.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }td p{margin:0;padding:0;}\",N.document);var a,c,f;N.addListener(\"keydown\",function(b,d){var g=this,h=d.keyCode||d.which;if(8==h){var i=Z(g);i&&i.selectedTds.length&&(i.isFullCol()?g.execCommand(\"deletecol\"):i.isFullRow()?g.execCommand(\"deleterow\"):g.fireEvent(\"delcells\"),domUtils.preventDefault(d));var j=domUtils.findParentByTagName(g.selection.getStart(),\"caption\",!0),k=g.selection.getRange();if(k.collapsed&&j&&e(j)){g.fireEvent(\"saveScene\");var l=j.parentNode;domUtils.remove(j),l&&k.setStart(l.rows[0].cells[0],0).setCursor(!1,!0),g.fireEvent(\"saveScene\")}}if(46==h&&(i=Z(g))){g.fireEvent(\"saveScene\");for(var m,n=0;m=i.selectedTds[n++];)domUtils.fillNode(g.document,m);g.fireEvent(\"saveScene\"),domUtils.preventDefault(d)}if(13==h){var o=g.selection.getRange(),j=domUtils.findParentByTagName(o.startContainer,\"caption\",!0);if(j){var l=domUtils.findParentByTagName(j,\"table\");return o.collapsed?j&&o.setStart(l.rows[0].cells[0],0).setCursor(!1,!0):(o.deleteContents(),g.fireEvent(\"saveScene\")),void domUtils.preventDefault(d)}if(o.collapsed){var l=domUtils.findParentByTagName(o.startContainer,\"table\");if(l){var p=l.rows[0].cells[0],q=domUtils.findParentByTagName(g.selection.getStart(),[\"td\",\"th\"],!0),r=l.previousSibling;if(p===q&&(!r||1==r.nodeType&&\"TABLE\"==r.tagName)&&domUtils.isStartInblock(o)){var s=domUtils.findParent(g.selection.getStart(),function(a){return domUtils.isBlockElm(a)},!0);s&&(/t(h|d)/i.test(s.tagName)||s===q.firstChild)&&(g.execCommand(\"insertparagraphbeforetable\"),domUtils.preventDefault(d))}}}}if((d.ctrlKey||d.metaKey)&&\"67\"==d.keyCode){a=null;var i=Z(g);if(i){var t=i.selectedTds;c=i.isFullCol(),f=i.isFullRow(),a=[[i.cloneCell(t[0],null,!0)]];for(var m,n=1;m=t[n];n++)m.parentNode!==t[n-1].parentNode?a.push([i.cloneCell(m,null,!0)]):a[a.length-1].push(i.cloneCell(m,null,!0))}}}),N.addListener(\"tablehasdeleted\",function(){m(this,!1,\"\",null),ea&&domUtils.remove(ea)}),N.addListener(\"beforepaste\",function(d,g){var h=this,i=h.selection.getRange();if(domUtils.findParentByTagName(i.startContainer,\"caption\",!0)){var j=h.document.createElement(\"div\");return j.innerHTML=g.html,void(g.html=j[browser.ie9below?\"innerText\":\"textContent\"])}var k=Z(h);if(a){h.fireEvent(\"saveScene\");var l,m,i=h.selection.getRange(),n=domUtils.findParentByTagName(i.startContainer,[\"td\",\"th\"],!0);if(n){var o=Y(n);if(f){var p=o.getCellInfo(n).rowIndex;\"TH\"==n.tagName&&p++;for(var q,r=0;q=a[r++];){for(var s,t=o.insertRow(p++,\"td\"),u=0;s=q[u];u++){var v=t.cells[u];v||(v=t.insertCell(u)),v.innerHTML=s.innerHTML,s.getAttribute(\"width\")&&v.setAttribute(\"width\",s.getAttribute(\"width\")),s.getAttribute(\"vAlign\")&&v.setAttribute(\"vAlign\",s.getAttribute(\"vAlign\")),s.getAttribute(\"align\")&&v.setAttribute(\"align\",s.getAttribute(\"align\")),s.style.cssText&&(v.style.cssText=s.style.cssText)}for(var s,u=0;(s=t.cells[u])&&q[u];u++)s.innerHTML=q[u].innerHTML,q[u].getAttribute(\"width\")&&s.setAttribute(\"width\",q[u].getAttribute(\"width\")),q[u].getAttribute(\"vAlign\")&&s.setAttribute(\"vAlign\",q[u].getAttribute(\"vAlign\")),q[u].getAttribute(\"align\")&&s.setAttribute(\"align\",q[u].getAttribute(\"align\")),q[u].style.cssText&&(s.style.cssText=q[u].style.cssText)}}else{if(c){y=o.getCellInfo(n);for(var s,w=0,u=0,q=a[0];s=q[u++];)w+=s.colSpan||1;for(h.__hasEnterExecCommand=!0,r=0;r<w;r++)h.execCommand(\"insertcol\");h.__hasEnterExecCommand=!1,n=o.table.rows[0].cells[y.cellIndex],\"TH\"==n.tagName&&(n=o.table.rows[1].cells[y.cellIndex])}for(var q,r=0;q=a[r++];){l=n;for(var s,u=0;s=q[u++];)if(n)n.innerHTML=s.innerHTML,s.getAttribute(\"width\")&&n.setAttribute(\"width\",s.getAttribute(\"width\")),s.getAttribute(\"vAlign\")&&n.setAttribute(\"vAlign\",s.getAttribute(\"vAlign\")),s.getAttribute(\"align\")&&n.setAttribute(\"align\",s.getAttribute(\"align\")),s.style.cssText&&(n.style.cssText=s.style.cssText),m=n,n=n.nextSibling;else{var x=s.cloneNode(!0);domUtils.removeAttributes(x,[\"class\",\"rowSpan\",\"colSpan\"]),m.parentNode.appendChild(x)}if(n=o.getNextCell(l,!0,!0),!a[r])break;if(!n){var y=o.getCellInfo(l);o.table.insertRow(o.table.rows.length),o.update(),n=o.getVSideCell(l,!0)}}}o.update()}else{k=h.document.createElement(\"table\");for(var q,r=0;q=a[r++];){for(var s,t=k.insertRow(k.rows.length),u=0;s=q[u++];)x=X.cloneCell(s,null,!0),domUtils.removeAttributes(x,[\"class\"]),t.appendChild(x);2==u&&x.rowSpan>1&&(x.rowSpan=1)}var z=$(h),A=h.body.offsetWidth-(ja?2*parseInt(domUtils.getComputedStyle(h.body,\"margin-left\"),10):0)-2*z.tableBorder-(h.options.offsetWidth||0);h.execCommand(\"insertHTML\",\"<table  \"+(c&&f?'width=\"'+A+'\"':\"\")+\">\"+k.innerHTML.replace(/>\\s*</g,\"><\").replace(/\\bth\\b/gi,\"td\")+\"</table>\")}return h.fireEvent(\"contentchange\"),h.fireEvent(\"saveScene\"),g.html=\"\",!0}var B,j=h.document.createElement(\"div\");j.innerHTML=g.html,B=j.getElementsByTagName(\"table\"),domUtils.findParentByTagName(h.selection.getStart(),\"table\")?(utils.each(B,function(a){domUtils.remove(a)}),domUtils.findParentByTagName(h.selection.getStart(),\"caption\",!0)&&(j.innerHTML=j[browser.ie?\"innerText\":\"textContent\"])):utils.each(B,function(a){b(a,!0),domUtils.removeAttributes(a,[\"style\",\"border\"]),utils.each(domUtils.getElementsByTagName(a,\"td\"),function(a){e(a)&&domUtils.fillNode(h.document,a),b(a,!0)})}),g.html=j.innerHTML}),N.addListener(\"afterpaste\",function(){utils.each(domUtils.getElementsByTagName(N.body,\"table\"),function(a){if(a.offsetWidth>N.body.offsetWidth){var b=$(N,a);a.style.width=N.body.offsetWidth-(ja?2*parseInt(domUtils.getComputedStyle(N.body,\"margin-left\"),10):0)-2*b.tableBorder-(N.options.offsetWidth||0)+\"px\"}})}),N.addListener(\"blur\",function(){a=null});var i;N.addListener(\"keydown\",function(){clearTimeout(i),i=setTimeout(function(){var a=N.selection.getRange(),b=domUtils.findParentByTagName(a.startContainer,[\"th\",\"td\"],!0);if(b){var c=b.parentNode.parentNode.parentNode;c.offsetWidth>c.getAttribute(\"width\")&&(b.style.wordBreak=\"break-all\")}},100)}),N.addListener(\"selectionchange\",function(){m(N,!1,\"\",null)}),N.addListener(\"contentchange\",function(){var a=this;if(I(a),!Z(a)){var b=a.selection.getRange(),c=b.startContainer;c=domUtils.findParentByTagName(c,[\"td\",\"th\"],!0),utils.each(domUtils.getElementsByTagName(a.document,\"table\"),function(b){a.fireEvent(\"excludetable\",b)!==!0&&(b.ueTable=new X(b),b.onmouseover=function(){a.fireEvent(\"tablemouseover\",b)},b.onmousemove=function(){a.fireEvent(\"tablemousemove\",b),a.options.tableDragable&&h(!0,this,a),utils.defer(function(){a.fireEvent(\"contentchange\",50)},!0)},b.onmouseout=function(){a.fireEvent(\"tablemouseout\",b),m(a,!1,\"\",null),I(a)},b.onclick=function(b){b=a.window.event||b;var c=d(b.target||b.srcElement);if(c){var e,f=Y(c),g=f.table,h=f.getCellInfo(c),i=a.selection.getRange();if(j(g,c,b,!0)){var k=f.getCell(f.indexTable[f.rowsNum-1][h.colIndex].rowIndex,f.indexTable[f.rowsNum-1][h.colIndex].cellIndex);return void(b.shiftKey&&f.selectedTds.length?f.selectedTds[0]!==k?(e=f.getCellsRange(f.selectedTds[0],k),f.setSelected(e)):i&&i.selectNodeContents(k).select():c!==k?(e=f.getCellsRange(c,k),f.setSelected(e)):i&&i.selectNodeContents(k).select())}if(j(g,c,b)){var l=f.getCell(f.indexTable[h.rowIndex][f.colsNum-1].rowIndex,f.indexTable[h.rowIndex][f.colsNum-1].cellIndex);b.shiftKey&&f.selectedTds.length?f.selectedTds[0]!==l?(e=f.getCellsRange(f.selectedTds[0],l),f.setSelected(e)):i&&i.selectNodeContents(l).select():c!==l?(e=f.getCellsRange(c,l),f.setSelected(e)):i&&i.selectNodeContents(l).select()}}})}),K(a,!0)}}),domUtils.on(N.document,\"mousemove\",g),domUtils.on(N.document,\"mouseout\",function(a){var b=a.target||a.srcElement;\"TABLE\"==b.tagName&&m(N,!1,\"\",null)}),N.addListener(\"interlacetable\",function(a,b,c){if(b)for(var d=this,e=b.rows,f=e.length,g=function(a,b,c){return a[b]?a[b]:c?a[b%a.length]:\"\"},h=0;h<f;h++)e[h].className=g(c||d.options.classList,h,!0)}),N.addListener(\"uninterlacetable\",function(a,b){if(b)for(var c=this,d=b.rows,e=c.options.classList,f=d.length,g=0;g<f;g++)domUtils.removeClasses(d[g],e)}),N.addListener(\"mousedown\",o),N.addListener(\"mouseup\",w),domUtils.on(N.body,\"dragstart\",function(a){w.call(N,\"dragstart\",a)}),N.addOutputRule(function(a){utils.each(a.getNodesByTagName(\"div\"),function(a){\"ue_tableDragLine\"==a.getAttr(\"id\")&&a.parentNode.removeChild(a)})});var k=0;N.addListener(\"mousedown\",function(){k=0}),N.addListener(\"tabkeydown\",function(){var a=this.selection.getRange(),b=a.getCommonAncestor(!0,!0),c=domUtils.findParentByTagName(b,\"table\");if(c){if(domUtils.findParentByTagName(b,\"caption\",!0)){var d=domUtils.getElementsByTagName(c,\"th td\");d&&d.length&&a.setStart(d[0],0).setCursor(!1,!0)}else{var d=domUtils.findParentByTagName(b,[\"td\",\"th\"],!0),f=Y(d);k=d.rowSpan>1?k:f.getCellInfo(d).rowIndex;var g=f.getTabNextCell(d,k);g?e(g)?a.setStart(g,0).setCursor(!1,!0):a.selectNodeContents(g).select():(N.fireEvent(\"saveScene\"),N.__hasEnterExecCommand=!0,this.execCommand(\"insertrownext\"),N.__hasEnterExecCommand=!1,a=this.selection.getRange(),a.setStart(c.rows[c.rows.length-1].cells[0],0).setCursor(),N.fireEvent(\"saveScene\"))}return!0}}),browser.ie&&N.addListener(\"selectionchange\",function(){m(this,!1,\"\",null)}),N.addListener(\"keydown\",function(a,b){var c=this,d=b.keyCode||b.which;if(8!=d&&46!=d){var e=!(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey);e&&_(domUtils.getElementsByTagName(c.body,\"td\"));var f=Z(c);f&&e&&f.clearSelected()}}),N.addListener(\"beforegetcontent\",function(){K(this,!1),browser.ie&&utils.each(this.document.getElementsByTagName(\"caption\"),function(a){domUtils.isEmptyNode(a)&&(a.innerHTML=\"&nbsp;\")})}),N.addListener(\"aftergetcontent\",function(){K(this,!0)}),N.addListener(\"getAllHtml\",function(){_(N.document.getElementsByTagName(\"td\"))}),N.addListener(\"fullscreenchanged\",function(a,b){if(!b){var c=this.body.offsetWidth/document.body.offsetWidth,d=domUtils.getElementsByTagName(this.body,\"table\");utils.each(d,function(a){if(a.offsetWidth<N.body.offsetWidth)return!1;var b=domUtils.getElementsByTagName(a,\"td\"),d=[];utils.each(b,function(a){d.push(a.offsetWidth)});for(var e,f=0;e=b[f];f++)e.setAttribute(\"width\",Math.floor(d[f]*c));a.setAttribute(\"width\",Math.floor(L(N,ja,$(N))))})}});var l=N.execCommand;N.execCommand=function(a,b){var c=this;a=a.toLowerCase();var d,f,g=Z(c),h=new dom.Range(c.document),i=c.commands[a]||UE.commands[a];if(i){if(!g||ka[a]||i.notNeedUndo||c.__hasEnterExecCommand)f=l.apply(c,arguments);else{c.__hasEnterExecCommand=!0,c.fireEvent(\"beforeexeccommand\",a),d=g.selectedTds;for(var j,k,m,n=-2,o=-2,p=0;m=d[p];p++)e(m)?h.setStart(m,0).setCursor(!1,!0):h.selectNode(m).select(!0),k=c.queryCommandState(a),j=c.queryCommandValue(a),k!=-1&&(n===k&&o===j||(c._ignoreContentChange=!0,f=l.apply(c,arguments),c._ignoreContentChange=!1),\nn=c.queryCommandState(a),o=c.queryCommandValue(a),domUtils.isEmptyBlock(m)&&domUtils.fillNode(c.document,m));h.setStart(d[0],0).shrinkBoundary(!0).setCursor(!1,!0),c.fireEvent(\"contentchange\"),c.fireEvent(\"afterexeccommand\",a),c.__hasEnterExecCommand=!1,c._selectionChange()}return f}}});var la},UE.UETable.prototype.sortTable=function(a,b){var c=this.table,d=c.rows,e=[],f=\"TH\"===d[0].cells[0].tagName,g=0;if(this.selectedTds.length){for(var h=this.cellsRange,i=h.endRowIndex+1,j=h.beginRowIndex;j<i;j++)e[j]=d[j];e.splice(0,h.beginRowIndex),g=h.endRowIndex+1===this.rowsNum?0:h.endRowIndex+1}else for(var j=0,i=d.length;j<i;j++)e[j]=d[j];var k={reversecurrent:function(a,b){return 1},orderbyasc:function(a,b){var c=a.innerText||a.textContent,d=b.innerText||b.textContent;return c.localeCompare(d)},reversebyasc:function(a,b){var c=a.innerHTML,d=b.innerHTML;return d.localeCompare(c)},orderbynum:function(a,b){var c=a[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/),d=b[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/);return c&&(c=+c[0]),d&&(d=+d[0]),(c||0)-(d||0)},reversebynum:function(a,b){var c=a[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/),d=b[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/);return c&&(c=+c[0]),d&&(d=+d[0]),(d||0)-(c||0)}};c.setAttribute(\"data-sort-type\",b&&\"string\"==typeof b&&k[b]?b:\"\"),f&&e.splice(0,1),e=utils.sort(e,function(c,d){var e;return e=b&&\"function\"==typeof b?b.call(this,c.cells[a],d.cells[a]):b&&\"number\"==typeof b?1:b&&\"string\"==typeof b&&k[b]?k[b].call(this,c.cells[a],d.cells[a]):k.orderbyasc.call(this,c.cells[a],d.cells[a])});for(var l=c.ownerDocument.createDocumentFragment(),m=0,i=e.length;m<i;m++)l.appendChild(e[m]);var n=c.getElementsByTagName(\"tbody\")[0];g?n.insertBefore(l,d[g-h.endRowIndex+h.beginRowIndex-1]):n.appendChild(l)},UE.plugins.tablesort=function(){var a=this,b=UE.UETable,c=function(a){return b.getUETable(a)},d=function(a){return b.getTableItemsByRange(a)};a.ready(function(){utils.cssRule(\"tablesort\",\"table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;   background-image:url(\"+a.options.themePath+a.options.theme+\"/images/sortable.png);}\",a.document),a.addListener(\"afterexeccommand\",function(a,b){\"mergeright\"!=b&&\"mergedown\"!=b&&\"mergecells\"!=b||this.execCommand(\"disablesort\")})}),UE.commands.sorttable={queryCommandState:function(){var a=this,b=d(a);if(!b.cell)return-1;for(var c,e=b.table,f=e.getElementsByTagName(\"td\"),g=0;c=f[g++];)if(1!=c.rowSpan||1!=c.colSpan)return-1;return 0},execCommand:function(a,b){var e=this,f=e.selection.getRange(),g=f.createBookmark(!0),h=d(e),i=h.cell,j=c(h.table),k=j.getCellInfo(i);j.sortTable(k.cellIndex,b),f.moveToBookmark(g);try{f.select()}catch(l){}}},UE.commands.enablesort=UE.commands.disablesort={queryCommandState:function(a){var b=d(this).table;if(b&&\"enablesort\"==a)for(var c=domUtils.getElementsByTagName(b,\"th td\"),e=0;e<c.length;e++)if(c[e].getAttribute(\"colspan\")>1||c[e].getAttribute(\"rowspan\")>1)return-1;return b?\"enablesort\"==a^\"sortEnabled\"!=b.getAttribute(\"data-sort\")?-1:0:-1},execCommand:function(a){var b=d(this).table;b.setAttribute(\"data-sort\",\"enablesort\"==a?\"sortEnabled\":\"sortDisabled\"),\"enablesort\"==a?domUtils.addClass(b,\"sortEnabled\"):domUtils.removeClasses(b,\"sortEnabled\")}}},UE.plugins.contextmenu=function(){var a=this;if(a.setOpt(\"enableContextMenu\",a.getOpt(\"enableContextMenu\")||!0),a.getOpt(\"enableContextMenu\")!==!1){var b,c=a.getLang(\"contextMenu\"),d=a.options.contextMenu||[{label:c.selectall,cmdName:\"selectall\"},{label:c.cleardoc,cmdName:\"cleardoc\",exec:function(){confirm(c.confirmclear)&&this.execCommand(\"cleardoc\")}},\"-\",{label:c.unlink,cmdName:\"unlink\"},\"-\",{group:c.paragraph,icon:\"justifyjustify\",subMenu:[{label:c.justifyleft,cmdName:\"justify\",value:\"left\"},{label:c.justifyright,cmdName:\"justify\",value:\"right\"},{label:c.justifycenter,cmdName:\"justify\",value:\"center\"},{label:c.justifyjustify,cmdName:\"justify\",value:\"justify\"}]},\"-\",{group:c.table,icon:\"table\",subMenu:[{label:c.inserttable,cmdName:\"inserttable\"},{label:c.deletetable,cmdName:\"deletetable\"},\"-\",{label:c.deleterow,cmdName:\"deleterow\"},{label:c.deletecol,cmdName:\"deletecol\"},{label:c.insertcol,cmdName:\"insertcol\"},{label:c.insertcolnext,cmdName:\"insertcolnext\"},{label:c.insertrow,cmdName:\"insertrow\"},{label:c.insertrownext,cmdName:\"insertrownext\"},\"-\",{label:c.insertcaption,cmdName:\"insertcaption\"},{label:c.deletecaption,cmdName:\"deletecaption\"},{label:c.inserttitle,cmdName:\"inserttitle\"},{label:c.deletetitle,cmdName:\"deletetitle\"},{label:c.inserttitlecol,cmdName:\"inserttitlecol\"},{label:c.deletetitlecol,cmdName:\"deletetitlecol\"},\"-\",{label:c.mergecells,cmdName:\"mergecells\"},{label:c.mergeright,cmdName:\"mergeright\"},{label:c.mergedown,cmdName:\"mergedown\"},\"-\",{label:c.splittorows,cmdName:\"splittorows\"},{label:c.splittocols,cmdName:\"splittocols\"},{label:c.splittocells,cmdName:\"splittocells\"},\"-\",{label:c.averageDiseRow,cmdName:\"averagedistributerow\"},{label:c.averageDisCol,cmdName:\"averagedistributecol\"},\"-\",{label:c.edittd,cmdName:\"edittd\",exec:function(){UE.ui.edittd&&new UE.ui.edittd(this),this.getDialog(\"edittd\").open()}},{label:c.edittable,cmdName:\"edittable\",exec:function(){UE.ui.edittable&&new UE.ui.edittable(this),this.getDialog(\"edittable\").open()}},{label:c.setbordervisible,cmdName:\"setbordervisible\"}]},{group:c.tablesort,icon:\"tablesort\",subMenu:[{label:c.enablesort,cmdName:\"enablesort\"},{label:c.disablesort,cmdName:\"disablesort\"},\"-\",{label:c.reversecurrent,cmdName:\"sorttable\",value:\"reversecurrent\"},{label:c.orderbyasc,cmdName:\"sorttable\",value:\"orderbyasc\"},{label:c.reversebyasc,cmdName:\"sorttable\",value:\"reversebyasc\"},{label:c.orderbynum,cmdName:\"sorttable\",value:\"orderbynum\"},{label:c.reversebynum,cmdName:\"sorttable\",value:\"reversebynum\"}]},{group:c.borderbk,icon:\"borderBack\",subMenu:[{label:c.setcolor,cmdName:\"interlacetable\",exec:function(){this.execCommand(\"interlacetable\")}},{label:c.unsetcolor,cmdName:\"uninterlacetable\",exec:function(){this.execCommand(\"uninterlacetable\")}},{label:c.setbackground,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:!0,colorList:[\"#bbb\",\"#ccc\"]})}},{label:c.unsetbackground,cmdName:\"cleartablebackground\",exec:function(){this.execCommand(\"cleartablebackground\")}},{label:c.redandblue,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:!0,colorList:[\"red\",\"blue\"]})}},{label:c.threecolorgradient,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:!0,colorList:[\"#aaa\",\"#bbb\",\"#ccc\"]})}}]},{group:c.aligntd,icon:\"aligntd\",subMenu:[{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"bottom\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"bottom\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"bottom\"}}]},{group:c.aligntable,icon:\"aligntable\",subMenu:[{cmdName:\"tablealignment\",className:\"left\",label:c.tableleft,value:\"left\"},{cmdName:\"tablealignment\",className:\"center\",label:c.tablecenter,value:\"center\"},{cmdName:\"tablealignment\",className:\"right\",label:c.tableright,value:\"right\"}]},\"-\",{label:c.insertparagraphbefore,cmdName:\"insertparagraph\",value:!0},{label:c.insertparagraphafter,cmdName:\"insertparagraph\"},{label:c.copy,cmdName:\"copy\"},{label:c.paste,cmdName:\"paste\"}];if(d.length){var e=UE.ui.uiUtils;a.addListener(\"contextmenu\",function(f,g){var h=e.getViewportOffsetByEvent(g);a.fireEvent(\"beforeselectionchange\"),b&&b.destroy();for(var i,j=0,k=[];i=d[j];j++){var l;!function(b){function d(){switch(b.icon){case\"table\":return a.getLang(\"contextMenu.table\");case\"justifyjustify\":return a.getLang(\"contextMenu.paragraph\");case\"aligntd\":return a.getLang(\"contextMenu.aligntd\");case\"aligntable\":return a.getLang(\"contextMenu.aligntable\");case\"tablesort\":return c.tablesort;case\"borderBack\":return c.borderbk;default:return\"\"}}if(\"-\"==b)(l=k[k.length-1])&&\"-\"!==l&&k.push(\"-\");else if(b.hasOwnProperty(\"group\")){for(var e,f=0,g=[];e=b.subMenu[f];f++)!function(b){\"-\"==b?(l=g[g.length-1])&&\"-\"!==l?g.push(\"-\"):g.splice(g.length-1):(a.commands[b.cmdName]||UE.commands[b.cmdName]||b.query)&&(b.query?b.query():a.queryCommandState(b.cmdName))>-1&&g.push({label:b.label||a.getLang(\"contextMenu.\"+b.cmdName+(b.value||\"\"))||\"\",className:\"edui-for-\"+b.cmdName+(b.className?\" edui-for-\"+b.cmdName+\"-\"+b.className:\"\"),onclick:b.exec?function(){b.exec.call(a)}:function(){a.execCommand(b.cmdName,b.value)}})}(e);g.length&&k.push({label:d(),className:\"edui-for-\"+b.icon,subMenu:{items:g,editor:a}})}else(a.commands[b.cmdName]||UE.commands[b.cmdName]||b.query)&&(b.query?b.query.call(a):a.queryCommandState(b.cmdName))>-1&&k.push({label:b.label||a.getLang(\"contextMenu.\"+b.cmdName),className:\"edui-for-\"+(b.icon?b.icon:b.cmdName+(b.value||\"\")),onclick:b.exec?function(){b.exec.call(a)}:function(){a.execCommand(b.cmdName,b.value)}})}(i)}if(\"-\"==k[k.length-1]&&k.pop(),b=new UE.ui.Menu({items:k,className:\"edui-contextmenu\",editor:a}),b.render(),b.showAt(h),a.fireEvent(\"aftershowcontextmenu\",b),domUtils.preventDefault(g),browser.ie){var m;try{m=a.selection.getNative().createRange()}catch(n){return}if(m.item){var o=new dom.Range(a.document);o.selectNode(m.item(0)).select(!0,!0)}}}),a.addListener(\"aftershowcontextmenu\",function(b,c){if(a.zeroclipboard){var d=c.items;for(var e in d)\"edui-for-copy\"==d[e].className&&a.zeroclipboard.clip(d[e].getDom())}})}}},UE.plugins.shortcutmenu=function(){var a,b=this,c=b.options.shortcutMenu||[];c.length&&(b.addListener(\"contextmenu mouseup\",function(b,d){var e=this,f={type:b,target:d.target||d.srcElement,screenX:d.screenX,screenY:d.screenY,clientX:d.clientX,clientY:d.clientY};if(setTimeout(function(){var d=e.selection.getRange();d.collapsed!==!1&&\"contextmenu\"!=b||(a||(a=new baidu.editor.ui.ShortCutMenu({editor:e,items:c,theme:e.options.theme,className:\"edui-shortcutmenu\"}),a.render(),e.fireEvent(\"afterrendershortcutmenu\",a)),a.show(f,!!UE.plugins.contextmenu))}),\"contextmenu\"==b&&(domUtils.preventDefault(d),browser.ie9below)){var g;try{g=e.selection.getNative().createRange()}catch(d){return}if(g.item){var h=new dom.Range(e.document);h.selectNode(g.item(0)).select(!0,!0)}}}),b.addListener(\"keydown\",function(b){\"keydown\"==b&&a&&!a.isHidden&&a.hide()}))},UE.plugins.basestyle=function(){var a={bold:[\"strong\",\"b\"],italic:[\"em\",\"i\"],subscript:[\"sub\"],superscript:[\"sup\"]},b=function(a,b){return domUtils.filterNodeList(a.selection.getStartElementPath(),b)},c=this;c.addshortcutkey({Bold:\"ctrl+66\",Italic:\"ctrl+73\",Underline:\"ctrl+85\"}),c.addInputRule(function(a){utils.each(a.getNodesByTagName(\"b i\"),function(a){switch(a.tagName){case\"b\":a.tagName=\"strong\";break;case\"i\":a.tagName=\"em\"}})});for(var d in a)!function(a,d){c.commands[a]={execCommand:function(a){var e=c.selection.getRange(),f=b(this,d);if(e.collapsed){if(f){var g=c.document.createTextNode(\"\");e.insertNode(g).removeInlineStyle(d),e.setStartBefore(g),domUtils.remove(g)}else{var h=e.document.createElement(d[0]);\"superscript\"!=a&&\"subscript\"!=a||(g=c.document.createTextNode(\"\"),e.insertNode(g).removeInlineStyle([\"sub\",\"sup\"]).setStartBefore(g).collapse(!0)),e.insertNode(h).setStart(h,0)}e.collapse(!0)}else\"superscript\"!=a&&\"subscript\"!=a||f&&f.tagName.toLowerCase()==a||e.removeInlineStyle([\"sub\",\"sup\"]),f?e.removeInlineStyle(d):e.applyInlineStyle(d[0]);e.select()},queryCommandState:function(){return b(this,d)?1:0}}}(d,a[d])},UE.plugins.elementpath=function(){var a,b,c=this;c.setOpt(\"elementPathEnabled\",!0),c.options.elementPathEnabled&&(c.commands.elementpath={execCommand:function(d,e){var f=b[e],g=c.selection.getRange();a=1*e,g.selectNode(f).select()},queryCommandValue:function(){var c=[].concat(this.selection.getStartElementPath()).reverse(),d=[];b=c;for(var e,f=0;e=c[f];f++)if(3!=e.nodeType){var g=e.tagName.toLowerCase();if(\"img\"==g&&e.getAttribute(\"anchorname\")&&(g=\"anchor\"),d[f]=g,a==f){a=-1;break}}return d}})},UE.plugins.formatmatch=function(){function a(f,g){function h(a){return m&&a.selectNode(m),a.applyInlineStyle(d[d.length-1].tagName,null,d)}if(browser.webkit)var i=\"IMG\"==g.target.tagName?g.target:null;c.undoManger&&c.undoManger.save();var j=c.selection.getRange(),k=i||j.getClosedNode();if(b&&k&&\"IMG\"==k.tagName)k.style.cssText+=\";float:\"+(b.style.cssFloat||b.style.styleFloat||\"none\")+\";display:\"+(b.style.display||\"inline\"),b=null;else if(!b){var l=j.collapsed;if(l){var m=c.document.createTextNode(\"match\");j.insertNode(m).select()}c.__hasEnterExecCommand=!0;var n=c.options.removeFormatAttributes;c.options.removeFormatAttributes=\"\",c.execCommand(\"removeformat\"),c.options.removeFormatAttributes=n,c.__hasEnterExecCommand=!1,j=c.selection.getRange(),d.length&&h(j),m&&j.setStartBefore(m).collapse(!0),j.select(),m&&domUtils.remove(m)}c.undoManger&&c.undoManger.save(),c.removeListener(\"mouseup\",a),e=0}var b,c=this,d=[],e=0;c.addListener(\"reset\",function(){d=[],e=0}),c.commands.formatmatch={execCommand:function(f){if(e)return e=0,d=[],void c.removeListener(\"mouseup\",a);var g=c.selection.getRange();if(b=g.getClosedNode(),!b||\"IMG\"!=b.tagName){g.collapse(!0).shrinkBoundary();var h=g.startContainer;d=domUtils.findParents(h,!0,function(a){return!domUtils.isBlockElm(a)&&1==a.nodeType});for(var i,j=0;i=d[j];j++)if(\"A\"==i.tagName){d.splice(j,1);break}}c.addListener(\"mouseup\",a),e=1},queryCommandState:function(){return e},notNeedUndo:1}},UE.plugin.register(\"searchreplace\",function(){function a(a){var b=3==a.nodeType?a.nodeValue:a[browser.ie?\"innerText\":\"textContent\"];return b.replace(domUtils.fillChar,\"\")}function b(a,b,c){var d,e=b.searchStr,f=new RegExp(e,\"g\"+(b.casesensitive?\"\":\"i\"));if(b.dir==-1){if(a=a.substr(0,c),a=a.split(\"\").reverse().join(\"\"),e=e.split(\"\").reverse().join(\"\"),d=f.exec(a))return c-d.index-e.length}else if(a=a.substr(c),d=f.exec(a))return d.index+c;return-1}function c(c,d,e){var f,g,i=e.all||1==e.dir?\"getNextDomNode\":\"getPreDomNode\";domUtils.isBody(c)&&(c=c.firstChild);for(var j=1;c;){if(f=a(c),g=b(f,e,d),j=0,g!=-1)return{node:c,index:g};for(c=domUtils[i](c);c&&h[c.nodeName.toLowerCase()];)c=domUtils[i](c,!0);c&&(d=e.dir==-1?a(c).length:0)}}function d(b,c,e){for(var f,g=0,h=b.firstChild,i=0;h;){if(3==h.nodeType){if(i=a(h).replace(/(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\"\").length,g+=i,g>=c)return{node:h,index:i-(g-c)}}else if(!dtd.$empty[h.tagName]&&(i=a(h).replace(/(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\"\").length,g+=i,g>=c&&(f=d(h,i-(g-c),e))))return f;h=domUtils.getNextDomNode(h)}}function e(b,e){var g,h=i||b.selection.getRange(),j=e.searchStr,k=b.document.createElement(\"span\");if(k.innerHTML=\"$$ueditor_searchreplace_key$$\",h.shrinkBoundary(!0),!h.collapsed){h.select();var l=b.selection.getText();if(new RegExp(\"^\"+e.searchStr+\"$\",e.casesensitive?\"\":\"i\").test(l)){if(void 0!=e.replaceStr)return f(h,e.replaceStr),h.select(),!0;h.collapse(e.dir==-1)}}h.insertNode(k),h.enlargeToBlockElm(!0),g=h.startContainer;var m=a(g).indexOf(\"$$ueditor_searchreplace_key$$\");h.setStartBefore(k),domUtils.remove(k);var n=c(g,m,e);if(n){var o=d(n.node,n.index,j),p=d(n.node,n.index+j.length,j);return h.setStart(o.node,o.index).setEnd(p.node,p.index),void 0!==e.replaceStr&&f(h,e.replaceStr),h.select(),!0}h.setCursor()}function f(a,b){b=g.document.createTextNode(b),a.deleteContents().insertNode(b)}var g=this,h={table:1,tbody:1,tr:1,ol:1,ul:1},i=null;return{commands:{searchreplace:{execCommand:function(a,b){utils.extend(b,{all:!1,casesensitive:!1,dir:1},!0);var c=0;if(b.all){i=null;var d=g.selection.getRange(),f=g.body.firstChild;for(f&&1==f.nodeType?(d.setStart(f,0),d.shrinkBoundary(!0)):3==f.nodeType&&d.setStartBefore(f),d.collapse(!0).select(!0),void 0!==b.replaceStr&&g.fireEvent(\"saveScene\");e(this,b);)c++,i=g.selection.getRange(),i.collapse(b.dir==-1);c&&g.fireEvent(\"saveScene\")}else void 0!==b.replaceStr&&g.fireEvent(\"saveScene\"),e(this,b)&&(c++,i=g.selection.getRange(),i.collapse(b.dir==-1)),c&&g.fireEvent(\"saveScene\");return c},notNeedUndo:1}},bindEvents:{clearlastSearchResult:function(){i=null}}}}),UE.plugins.customstyle=function(){var a=this;a.setOpt({customstyle:[{tag:\"h1\",name:\"tc\",style:\"font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;\"},{tag:\"h1\",name:\"tl\",style:\"font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;margin:0 0 10px 0;\"},{tag:\"span\",name:\"im\",style:\"font-size:16px;font-style:italic;font-weight:bold;line-height:18px;\"},{tag:\"span\",name:\"hi\",style:\"font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;\"}]}),a.commands.customstyle={execCommand:function(a,b){var c,d,e=this,f=b.tag,g=domUtils.findParent(e.selection.getStart(),function(a){return a.getAttribute(\"label\")},!0),h={};for(var i in b)void 0!==b[i]&&(h[i]=b[i]);if(delete h.tag,g&&g.getAttribute(\"label\")==b.label){if(c=this.selection.getRange(),d=c.createBookmark(),c.collapsed)if(dtd.$block[g.tagName]){var j=e.document.createElement(\"p\");domUtils.moveChild(g,j),g.parentNode.insertBefore(j,g),domUtils.remove(g)}else domUtils.remove(g,!0);else{var k=domUtils.getCommonAncestor(d.start,d.end),l=domUtils.getElementsByTagName(k,f);new RegExp(f,\"i\").test(k.tagName)&&l.push(k);for(var m,n=0;m=l[n++];)if(m.getAttribute(\"label\")==b.label){var o=domUtils.getPosition(m,d.start),p=domUtils.getPosition(m,d.end);if((o&domUtils.POSITION_FOLLOWING||o&domUtils.POSITION_CONTAINS)&&(p&domUtils.POSITION_PRECEDING||p&domUtils.POSITION_CONTAINS)&&dtd.$block[f]){var j=e.document.createElement(\"p\");domUtils.moveChild(m,j),m.parentNode.insertBefore(j,m)}domUtils.remove(m,!0)}g=domUtils.findParent(k,function(a){return a.getAttribute(\"label\")==b.label},!0),g&&domUtils.remove(g,!0)}c.moveToBookmark(d).select()}else if(dtd.$block[f]){if(this.execCommand(\"paragraph\",f,h,\"customstyle\"),c=e.selection.getRange(),!c.collapsed){c.collapse(),g=domUtils.findParent(e.selection.getStart(),function(a){return a.getAttribute(\"label\")==b.label},!0);var q=e.document.createElement(\"p\");domUtils.insertAfter(g,q),domUtils.fillNode(e.document,q),c.setStart(q,0).setCursor()}}else{if(c=e.selection.getRange(),c.collapsed)return g=e.document.createElement(f),domUtils.setAttributes(g,h),void c.insertNode(g).setStart(g,0).setCursor();d=c.createBookmark(),c.applyInlineStyle(f,h).moveToBookmark(d).select()}},queryCommandValue:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),function(a){return a.getAttribute(\"label\")});return a?a.getAttribute(\"label\"):\"\"}},a.addListener(\"keyup\",function(b,c){var d=c.keyCode||c.which;if(32==d||13==d){var e=a.selection.getRange();if(e.collapsed){var f=domUtils.findParent(a.selection.getStart(),function(a){return a.getAttribute(\"label\")},!0);if(f&&dtd.$block[f.tagName]&&domUtils.isEmptyNode(f)){var g=a.document.createElement(\"p\");domUtils.insertAfter(f,g),domUtils.fillNode(a.document,g),domUtils.remove(f),e.setStart(g,0).setCursor()}}}})},UE.plugins.catchremoteimage=function(){var me=this,ajax=UE.ajax;me.options.catchRemoteImageEnable!==!1&&(me.setOpt({catchRemoteImageEnable:!1}),me.addListener(\"afterpaste\",function(){me.fireEvent(\"catchRemoteImage\")}),me.addListener(\"catchRemoteImage\",function(){function catchremoteimage(a,b){var c=utils.serializeParam(me.queryCommandValue(\"serverparam\"))||\"\",d=utils.formatUrl(catcherActionUrl+(catcherActionUrl.indexOf(\"?\")==-1?\"?\":\"&\")+c),e=utils.isCrossDomainUrl(d),f={method:\"POST\",dataType:e?\"jsonp\":\"\",timeout:6e4,onsuccess:b.success,onerror:b.error};f[catcherFieldName]=a,ajax.request(d,f)}for(var catcherLocalDomain=me.getOpt(\"catcherLocalDomain\"),catcherActionUrl=me.getActionUrl(me.getOpt(\"catcherActionName\")),catcherUrlPrefix=me.getOpt(\"catcherUrlPrefix\"),catcherFieldName=me.getOpt(\"catcherFieldName\"),remoteImages=[],loadingIMG=me.options.themePath+me.options.theme+\"/images/spacer.gif\",imgs=me.document.querySelectorAll('[style*=\"url\"],img'),test=function(a,b){if(a.indexOf(location.host)!=-1||/(^\\.)|(^\\/)/.test(a))return!0;if(b)for(var c,d=0;c=b[d++];)if(a.indexOf(c)!==-1)return!0;return!1},i=0,ci;ci=imgs[i++];)if(!ci.getAttribute(\"word_img\"))if(\"IMG\"==ci.nodeName){var src=ci.getAttribute(\"_src\")||ci.src||\"\";/^(https?|ftp):/i.test(src)&&!test(src,catcherLocalDomain)&&(remoteImages.push(src),domUtils.setAttributes(ci,{\"class\":\"loadingclass\",_src:src,src:loadingIMG}))}else{var backgroundImageurl=ci.style.cssText.replace(/.*\\s?url\\([\\'\\\"]?/,\"\").replace(/[\\'\\\"]?\\).*/,\"\");/^(https?|ftp):/i.test(backgroundImageurl)&&!test(backgroundImageurl,catcherLocalDomain)&&(remoteImages.push(backgroundImageurl),ci.style.cssText=ci.style.cssText.replace(backgroundImageurl,loadingIMG),domUtils.setAttributes(ci,{\"data-background\":backgroundImageurl}))}remoteImages.length&&catchremoteimage(remoteImages,{success:function(r){try{var info=void 0!==r.state?r:eval(\"(\"+r.responseText+\")\")}catch(e){return}var i,j,ci,cj,oldSrc,newSrc,list=info.list,catchFailList=[],catchSuccessList=[],failIMG=me.options.themePath+me.options.theme+\"/images/img-cracked.png\";for(i=0;ci=imgs[i++];)for(oldSrc=ci.getAttribute(\"_src\")||ci.src||\"\",oldBgIMG=ci.getAttribute(\"data-background\")||\"\",j=0;cj=list[j++];){if(oldSrc==cj.source&&\"SUCCESS\"==cj.state){newSrc=catcherUrlPrefix+cj.url,domUtils.removeClasses(ci,\"loadingclass\"),domUtils.setAttributes(ci,{src:newSrc,_src:newSrc,\"data-catchResult\":\"img_catchSuccess\"}),catchSuccessList.push(ci);break}if(oldSrc==cj.source&&\"FAIL\"==cj.state){domUtils.removeClasses(ci,\"loadingclass\"),domUtils.setAttributes(ci,{src:failIMG,_src:failIMG,\"data-catchResult\":\"img_catchFail\"}),catchFailList.push(ci);break}if(oldBgIMG==cj.source&&\"SUCCESS\"==cj.state){newBgIMG=catcherUrlPrefix+cj.url,ci.style.cssText=ci.style.cssText.replace(loadingIMG,newBgIMG),domUtils.removeAttributes(ci,\"data-background\"),domUtils.setAttributes(ci,{\"data-catchResult\":\"img_catchSuccess\"}),catchSuccessList.push(ci);break}if(oldBgIMG==cj.source&&\"FAIL\"==cj.state){ci.style.cssText=ci.style.cssText.replace(loadingIMG,failIMG),domUtils.removeAttributes(ci,\"data-background\"),domUtils.setAttributes(ci,{\"data-catchResult\":\"img_catchFail\"}),catchFailList.push(ci);break}}me.fireEvent(\"catchremotesuccess\",catchSuccessList,catchFailList)},error:function(){me.fireEvent(\"catchremoteerror\")}})}))},UE.plugin.register(\"snapscreen\",function(){function getLocation(a){var b,c=document.createElement(\"a\"),d=utils.serializeParam(me.queryCommandValue(\"serverparam\"))||\"\";return c.href=a,browser.ie&&(c.href=c.href),b=c.search,d&&(b=b+(b.indexOf(\"?\")==-1?\"?\":\"&\")+d,b=b.replace(/[&]+/gi,\"&\")),{port:c.port,hostname:c.hostname,path:c.pathname+b||+c.hash}}var me=this,snapplugin;return{commands:{snapscreen:{execCommand:function(cmd){function onSuccess(rs){try{if(rs=eval(\"(\"+rs+\")\"),\"SUCCESS\"==rs.state){var opt=me.options;me.execCommand(\"insertimage\",{src:opt.snapscreenUrlPrefix+rs.url,_src:opt.snapscreenUrlPrefix+rs.url,alt:rs.title||\"\",floatStyle:opt.snapscreenImgAlign})}else alert(rs.state)}catch(e){alert(lang.callBackErrorMsg)}}var url,local,res,lang=me.getLang(\"snapScreen_plugin\");if(!snapplugin){var container=me.container,doc=me.container.ownerDocument||me.container.document;snapplugin=doc.createElement(\"object\");try{snapplugin.type=\"application/x-pluginbaidusnap\"}catch(e){return}snapplugin.style.cssText=\"position:absolute;left:-9999px;width:0;height:0;\",snapplugin.setAttribute(\"width\",\"0\"),snapplugin.setAttribute(\"height\",\"0\"),container.appendChild(snapplugin)}url=me.getActionUrl(me.getOpt(\"snapscreenActionName\")),local=getLocation(url),setTimeout(function(){try{res=snapplugin.saveSnapshot(local.hostname,local.path,local.port)}catch(a){return void me.ui._dialogs.snapscreenDialog.open()}onSuccess(res)},50)},queryCommandState:function(){return navigator.userAgent.indexOf(\"Windows\",0)!=-1?0:-1}}}}}),UE.commands.insertparagraph={execCommand:function(a,b){for(var c,d=this,e=d.selection.getRange(),f=e.startContainer;f&&!domUtils.isBody(f);)c=f,f=f.parentNode;if(c){var g=d.document.createElement(\"p\");b?c.parentNode.insertBefore(g,c):c.parentNode.insertBefore(g,c.nextSibling),domUtils.fillNode(d.document,g),e.setStart(g,0).setCursor(!1,!0)}}},UE.plugin.register(\"webapp\",function(){function a(a,c){return c?'<iframe class=\"edui-faked-webapp\" title=\"'+a.title+'\" '+(a.align&&!a.cssfloat?'align=\"'+a.align+'\"':\"\")+(a.cssfloat?'style=\"float:'+a.cssfloat+'\"':\"\")+'width=\"'+a.width+'\" height=\"'+a.height+'\"  scrolling=\"no\" frameborder=\"0\" src=\"'+a.url+'\" logo_url = \"'+a.logo+'\"></iframe>':'<img title=\"'+a.title+'\" width=\"'+a.width+'\" height=\"'+a.height+'\" src=\"'+b.options.UEDITOR_HOME_URL+'themes/default/images/spacer.gif\" _logo_url=\"'+a.logo+'\" style=\"background:url('+a.logo+') no-repeat center center; border:1px solid gray;\" class=\"edui-faked-webapp\" _url=\"'+a.url+'\" '+(a.align&&!a.cssfloat?'align=\"'+a.align+'\"':\"\")+(a.cssfloat?'style=\"float:'+a.cssfloat+'\"':\"\")+\"/>\"}var b=this;return{outputRule:function(b){utils.each(b.getNodesByTagName(\"img\"),function(b){var c;if(\"edui-faked-webapp\"==b.getAttr(\"class\")){c=a({title:b.getAttr(\"title\"),width:b.getAttr(\"width\"),height:b.getAttr(\"height\"),align:b.getAttr(\"align\"),cssfloat:b.getStyle(\"float\"),url:b.getAttr(\"_url\"),logo:b.getAttr(\"_logo_url\")},!0);var d=UE.uNode.createElement(c);b.parentNode.replaceChild(d,b)}})},inputRule:function(b){utils.each(b.getNodesByTagName(\"iframe\"),function(b){if(\"edui-faked-webapp\"==b.getAttr(\"class\")){var c=UE.uNode.createElement(a({title:b.getAttr(\"title\"),width:b.getAttr(\"width\"),height:b.getAttr(\"height\"),align:b.getAttr(\"align\"),cssfloat:b.getStyle(\"float\"),url:b.getAttr(\"src\"),logo:b.getAttr(\"logo_url\")}));b.parentNode.replaceChild(c,b)}})},commands:{webapp:{execCommand:function(b,c){var d=this,e=a(utils.extend(c,{align:\"none\"}),!1);d.execCommand(\"inserthtml\",e)},queryCommandState:function(){var a=this,b=a.selection.getRange().getClosedNode(),c=b&&\"edui-faked-webapp\"==b.className;return c?1:0}}}}}),UE.plugins.template=function(){UE.commands.template={execCommand:function(a,b){b.html&&this.execCommand(\"inserthtml\",b.html)}},this.addListener(\"click\",function(a,b){var c=b.target||b.srcElement,d=this.selection.getRange(),e=domUtils.findParent(c,function(a){if(a.className&&domUtils.hasClass(a,\"ue_t\"))return a},!0);e&&d.selectNode(e).shrinkBoundary().select()}),this.addListener(\"keydown\",function(a,b){var c=this.selection.getRange();if(!c.collapsed&&!(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)){var d=domUtils.findParent(c.startContainer,function(a){if(a.className&&domUtils.hasClass(a,\"ue_t\"))return a},!0);d&&domUtils.removeClasses(d,[\"ue_t\"])}})},UE.plugin.register(\"music\",function(){function a(a,c,d,e,f,g){return g?'<embed type=\"application/x-shockwave-flash\" class=\"edui-faked-music\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" src=\"'+a+'\" width=\"'+c+'\" height=\"'+d+'\" '+(e&&!f?'align=\"'+e+'\"':\"\")+(f?'style=\"float:'+f+'\"':\"\")+' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >':\"<img \"+(e&&!f?'align=\"'+e+'\"':\"\")+(f?'style=\"float:'+f+'\"':\"\")+' width=\"'+c+'\" height=\"'+d+'\" _url=\"'+a+'\" class=\"edui-faked-music\" src=\"'+b.options.langPath+b.options.lang+'/images/music.png\" />'}var b=this;return{outputRule:function(b){utils.each(b.getNodesByTagName(\"img\"),function(b){var c;if(\"edui-faked-music\"==b.getAttr(\"class\")){var d=b.getStyle(\"float\"),e=b.getAttr(\"align\");c=a(b.getAttr(\"_url\"),b.getAttr(\"width\"),b.getAttr(\"height\"),e,d,!0);var f=UE.uNode.createElement(c);b.parentNode.replaceChild(f,b)}})},inputRule:function(b){utils.each(b.getNodesByTagName(\"embed\"),function(b){if(\"edui-faked-music\"==b.getAttr(\"class\")){var c=b.getStyle(\"float\"),d=b.getAttr(\"align\");html=a(b.getAttr(\"src\"),b.getAttr(\"width\"),b.getAttr(\"height\"),d,c,!1);var e=UE.uNode.createElement(html);b.parentNode.replaceChild(e,b)}})},commands:{music:{execCommand:function(b,c){var d=this,e=a(c.url,c.width||400,c.height||95,\"none\",!1);d.execCommand(\"inserthtml\",e)},queryCommandState:function(){var a=this,b=a.selection.getRange().getClosedNode(),c=b&&\"edui-faked-music\"==b.className;return c?1:0}}}}}),UE.plugin.register(\"autoupload\",function(){function a(a,b){var c,d,e,f,g,h,i,j,k=b,l=/image\\/\\w+/i.test(a.type)?\"image\":\"file\",m=\"loading_\"+(+new Date).toString(36);if(c=k.getOpt(l+\"FieldName\"),d=k.getOpt(l+\"UrlPrefix\"),e=k.getOpt(l+\"MaxSize\"),f=k.getOpt(l+\"AllowFiles\"),g=k.getActionUrl(k.getOpt(l+\"ActionName\")),i=function(a){var b=k.document.getElementById(m);b&&domUtils.remove(b),k.fireEvent(\"showmessage\",{id:m,content:a,type:\"error\",timeout:4e3})},\"image\"==l?(h='<img class=\"loadingclass\" id=\"'+m+'\" src=\"'+k.options.themePath+k.options.theme+'/images/spacer.gif\">',j=function(a){var b=d+a.url,c=k.document.getElementById(m);c&&(domUtils.removeClasses(c,\"loadingclass\"),c.setAttribute(\"src\",b),c.setAttribute(\"_src\",b),c.setAttribute(\"alt\",a.original||\"\"),c.removeAttribute(\"id\"),k.trigger(\"contentchange\",c))}):(h='<p><img class=\"loadingclass\" id=\"'+m+'\" src=\"'+k.options.themePath+k.options.theme+'/images/spacer.gif\"></p>',j=function(a){var b=d+a.url,c=k.document.getElementById(m),e=k.selection.getRange(),f=e.createBookmark();e.selectNode(c).select(),k.execCommand(\"insertfile\",{url:b}),e.moveToBookmark(f).select()}),k.execCommand(\"inserthtml\",h),!k.getOpt(l+\"ActionName\"))return void i(k.getLang(\"autoupload.errorLoadConfig\"));if(a.size>e)return void i(k.getLang(\"autoupload.exceedSizeError\"));var n=a.name?a.name.substr(a.name.lastIndexOf(\".\")):\"\";if(n&&\"image\"!=l||f&&(f.join(\"\")+\".\").indexOf(n.toLowerCase()+\".\")==-1)return void i(k.getLang(\"autoupload.exceedTypeError\"));var o=new XMLHttpRequest,p=new FormData,q=utils.serializeParam(k.queryCommandValue(\"serverparam\"))||\"\",r=utils.formatUrl(g+(g.indexOf(\"?\")==-1?\"?\":\"&\")+q);p.append(c,a,a.name||\"blob.\"+a.type.substr(\"image/\".length)),p.append(\"type\",\"ajax\"),o.open(\"post\",r,!0),o.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),o.addEventListener(\"load\",function(a){try{var b=new Function(\"return \"+utils.trim(a.target.response))();\"SUCCESS\"==b.state&&b.url?j(b):i(b.state)}catch(c){i(k.getLang(\"autoupload.loadError\"))}}),o.send(p)}function b(a){return a.clipboardData&&a.clipboardData.items&&1==a.clipboardData.items.length&&/^image\\//.test(a.clipboardData.items[0].type)?a.clipboardData.items:null}function c(a){return a.dataTransfer&&a.dataTransfer.files?a.dataTransfer.files:null}return{outputRule:function(a){utils.each(a.getNodesByTagName(\"img\"),function(a){/\\b(loaderrorclass)|(bloaderrorclass)\\b/.test(a.getAttr(\"class\"))&&a.parentNode.removeChild(a)}),utils.each(a.getNodesByTagName(\"p\"),function(a){/\\bloadpara\\b/.test(a.getAttr(\"class\"))&&a.parentNode.removeChild(a)})},bindEvents:{defaultOptions:{enableDragUpload:!0,enablePasteUpload:!0},ready:function(d){var e=this;if(window.FormData&&window.FileReader){var f=function(d){var f,g=!1;if(f=\"paste\"==d.type?b(d):c(d)){for(var h,i=f.length;i--;)h=f[i],h.getAsFile&&(h=h.getAsFile()),h&&h.size>0&&(a(h,e),g=!0);g&&d.preventDefault()}};e.getOpt(\"enablePasteUpload\")!==!1&&domUtils.on(e.body,\"paste \",f),e.getOpt(\"enableDragUpload\")!==!1?(domUtils.on(e.body,\"drop\",f),domUtils.on(e.body,\"dragover\",function(a){\"Files\"==a.dataTransfer.types[0]&&a.preventDefault()})):browser.gecko&&domUtils.on(e.body,\"drop\",function(a){c(a)&&a.preventDefault()}),utils.cssRule(\"loading\",\".loadingclass{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-left:1px;height: 22px;width: 22px;}\\n.loaderrorclass{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\",this.document);\n}}}}}),UE.plugin.register(\"autosave\",function(){function a(a){var f;if(!(new Date-c<d)){if(!a.hasContents())return void(e&&b.removePreferences(e));c=new Date,a._saveFlag=null,f=b.body.innerHTML,a.fireEvent(\"beforeautosave\",{content:f})!==!1&&(b.setPreferences(e,f),a.fireEvent(\"afterautosave\",{content:f}))}}var b=this,c=new Date,d=20,e=null;return{defaultOptions:{saveInterval:500,enableAutoSave:!0},bindEvents:{ready:function(){var a=\"-drafts-data\",c=null;c=b.key?b.key+a:(b.container.parentNode.id||\"ue-common\")+a,e=(location.protocol+location.host+location.pathname).replace(/[.:\\/]/g,\"_\")+c},contentchange:function(){b.getOpt(\"enableAutoSave\")&&e&&(b._saveFlag&&window.clearTimeout(b._saveFlag),b.options.saveInterval>0?b._saveFlag=window.setTimeout(function(){a(b)},b.options.saveInterval):a(b))}},commands:{clearlocaldata:{execCommand:function(a,c){e&&b.getPreferences(e)&&b.removePreferences(e)},notNeedUndo:!0,ignoreContentChange:!0},getlocaldata:{execCommand:function(a,c){return e?b.getPreferences(e)||\"\":\"\"},notNeedUndo:!0,ignoreContentChange:!0},drafts:{execCommand:function(a,c){e&&(b.body.innerHTML=b.getPreferences(e)||\"<p>\"+domUtils.fillHtml+\"</p>\",b.focus(!0))},queryCommandState:function(){return e?null===b.getPreferences(e)?-1:0:-1},notNeedUndo:!0,ignoreContentChange:!0}}}}),UE.plugin.register(\"charts\",function(){function a(a){var b=null,c=0;if(a.rows.length<2)return!1;if(a.rows[0].cells.length<2)return!1;b=a.rows[0].cells,c=b.length;for(var d,e=0;d=b[e];e++)if(\"th\"!==d.tagName.toLowerCase())return!1;for(var f,e=1;f=a.rows[e];e++){if(f.cells.length!=c)return!1;if(\"th\"!==f.cells[0].tagName.toLowerCase())return!1;for(var d,g=1;d=f.cells[g];g++){var h=utils.trim(d.innerText||d.textContent||\"\");if(h=h.replace(new RegExp(UE.dom.domUtils.fillChar,\"g\"),\"\").replace(/^\\s+|\\s+$/g,\"\"),!/^\\d*\\.?\\d+$/.test(h))return!1}}return!0}var b=this;return{bindEvents:{chartserror:function(){}},commands:{charts:{execCommand:function(c,d){var e=domUtils.findParentByTagName(this.selection.getRange().startContainer,\"table\",!0),f=[],g={};if(!e)return!1;if(!a(e))return b.fireEvent(\"chartserror\"),!1;g.title=d.title||\"\",g.subTitle=d.subTitle||\"\",g.xTitle=d.xTitle||\"\",g.yTitle=d.yTitle||\"\",g.suffix=d.suffix||\"\",g.tip=d.tip||\"\",g.dataFormat=d.tableDataFormat||\"\",g.chartType=d.chartType||0;for(var h in g)g.hasOwnProperty(h)&&f.push(h+\":\"+g[h]);e.setAttribute(\"data-chart\",f.join(\";\")),domUtils.addClass(e,\"edui-charts-table\")},queryCommandState:function(b,c){var d=domUtils.findParentByTagName(this.selection.getRange().startContainer,\"table\",!0);return d&&a(d)?0:-1}}},inputRule:function(a){utils.each(a.getNodesByTagName(\"table\"),function(a){void 0!==a.getAttr(\"data-chart\")&&a.setAttr(\"style\")})},outputRule:function(a){utils.each(a.getNodesByTagName(\"table\"),function(a){void 0!==a.getAttr(\"data-chart\")&&a.setAttr(\"style\",\"display: none;\")})}}}),UE.plugin.register(\"section\",function(){function a(a){this.tag=\"\",this.level=-1,this.dom=null,this.nextSection=null,this.previousSection=null,this.parentSection=null,this.startAddress=[],this.endAddress=[],this.children=[]}function b(b){var c=new a;return utils.extend(c,b)}function c(a,b){for(var c=b,d=0;d<a.length;d++){if(!c.childNodes)return null;c=c.childNodes[a[d]]}return c}var d=this;return{bindMultiEvents:{type:\"aftersetcontent afterscencerestore\",handler:function(){d.fireEvent(\"updateSections\")}},bindEvents:{ready:function(){d.fireEvent(\"updateSections\"),domUtils.on(d.body,\"drop paste\",function(){d.fireEvent(\"updateSections\")})},afterexeccommand:function(a,b){\"paragraph\"==b&&d.fireEvent(\"updateSections\")},keyup:function(a,b){var c=this,d=c.selection.getRange();if(1!=d.collapsed)c.fireEvent(\"updateSections\");else{var e=b.keyCode||b.which;13!=e&&8!=e&&46!=e||c.fireEvent(\"updateSections\")}}},commands:{getsections:{execCommand:function(a,c){function d(a){for(var b=0;b<f.length;b++)if(f[b](a))return b;return-1}function e(a,c){for(var f,g,i,k=null,l=a.childNodes,m=0,n=l.length;m<n;m++)if(i=l[m],f=d(i),f>=0){var o=h.selection.getRange().selectNode(i).createAddress(!0).startAddress,p=b({tag:i.tagName,title:i.innerText||i.textContent||\"\",level:f,dom:i,startAddress:utils.clone(o,[]),endAddress:utils.clone(o,[]),children:[]});for(j.nextSection=p,p.previousSection=j,g=j;f<=g.level;)g=g.parentSection;p.parentSection=g,g.children.push(p),k=j=p}else 1===i.nodeType&&e(i,c),k&&k.endAddress[k.endAddress.length-1]++}for(var f=c||[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"],g=0;g<f.length;g++)\"string\"==typeof f[g]?f[g]=function(a){return function(b){return b.tagName==a.toUpperCase()}}(f[g]):\"function\"!=typeof f[g]&&(f[g]=function(a){return null});var h=this,i=b({level:-1,title:\"root\"}),j=i;return e(h.body,i),i},notNeedUndo:!0},movesection:{execCommand:function(a,b,d,e){function f(a,b,c){for(var d=!1,e=!1,f=0;f<a.length&&!(f>=c.length);f++){if(c[f]>a[f]){d=!0;break}if(c[f]<a[f])break}for(var f=0;f<b.length&&!(f>=c.length);f++){if(c[f]<a[f]){e=!0;break}if(c[f]>a[f])break}return d&&e}var g,h,i=this;if(b&&d&&d.level!=-1&&(g=e?d.endAddress:d.startAddress,h=c(g,i.body),g&&h&&!f(b.startAddress,b.endAddress,g))){var j,k,l=c(b.startAddress,i.body),m=c(b.endAddress,i.body);if(e)for(j=m;j&&!(domUtils.getPosition(l,j)&domUtils.POSITION_FOLLOWING)&&(k=j.previousSibling,domUtils.insertAfter(h,j),j!=l);)j=k;else for(j=l;j&&!(domUtils.getPosition(j,m)&domUtils.POSITION_FOLLOWING)&&(k=j.nextSibling,h.parentNode.insertBefore(j,h),j!=m);)j=k;i.fireEvent(\"updateSections\")}}},deletesection:{execCommand:function(a,b,c){function d(a){for(var b=e.body,c=0;c<a.length;c++){if(!b.childNodes)return null;b=b.childNodes[a[c]]}return b}var e=this;if(b){var f,g=d(b.startAddress),h=d(b.endAddress),i=g;if(c)domUtils.remove(i);else for(;i&&domUtils.inDoc(h,e.document)&&!(domUtils.getPosition(i,h)&domUtils.POSITION_FOLLOWING);)f=i.nextSibling,domUtils.remove(i),i=f;e.fireEvent(\"updateSections\")}}},selectsection:{execCommand:function(a,b){if(!b&&!b.dom)return!1;var c=this,d=c.selection.getRange(),e={startAddress:utils.clone(b.startAddress,[]),endAddress:utils.clone(b.endAddress,[])};return e.endAddress[e.endAddress.length-1]++,d.moveToAddress(e).select().scrollToView(),!0},notNeedUndo:!0},scrolltosection:{execCommand:function(a,b){if(!b&&!b.dom)return!1;var c=this,d=c.selection.getRange(),e={startAddress:b.startAddress,endAddress:b.endAddress};return e.endAddress[e.endAddress.length-1]++,d.moveToAddress(e).scrollToView(),!0},notNeedUndo:!0}}}}),UE.plugin.register(\"simpleupload\",function(){function a(){var a=b.offsetWidth||20,e=b.offsetHeight||20,f=document.createElement(\"iframe\"),g=\"display:block;width:\"+a+\"px;height:\"+e+\"px;overflow:hidden;border:0;margin:0;padding:0;position:absolute;top:0;left:0;filter:alpha(opacity=0);-moz-opacity:0;-khtml-opacity: 0;opacity: 0;cursor:pointer;\";domUtils.on(f,\"load\",function(){var b,h,i,j=(+new Date).toString(36);h=f.contentDocument||f.contentWindow.document,i=h.body,b=h.createElement(\"div\"),b.innerHTML='<form id=\"edui_form_'+j+'\" target=\"edui_iframe_'+j+'\" method=\"POST\" enctype=\"multipart/form-data\" action=\"'+c.getOpt(\"serverUrl\")+'\" style=\"'+g+'\"><input id=\"edui_input_'+j+'\" type=\"file\" accept=\"image/*\" name=\"'+c.options.imageFieldName+'\" style=\"'+g+'\"></form><iframe id=\"edui_iframe_'+j+'\" name=\"edui_iframe_'+j+'\" style=\"display:none;width:0;height:0;border:0;margin:0;padding:0;position:absolute;\"></iframe>',b.className=\"edui-\"+c.options.theme,b.id=c.ui.id+\"_iframeupload\",i.style.cssText=g,i.style.width=a+\"px\",i.style.height=e+\"px\",i.appendChild(b),i.parentNode&&(i.parentNode.style.width=a+\"px\",i.parentNode.style.height=a+\"px\");var k=h.getElementById(\"edui_form_\"+j),l=h.getElementById(\"edui_input_\"+j),m=h.getElementById(\"edui_iframe_\"+j);domUtils.on(l,\"change\",function(){function a(){try{var e,f,g,h=(m.contentDocument||m.contentWindow.document).body,i=h.innerText||h.textContent||\"\";f=new Function(\"return \"+i)(),e=c.options.imageUrlPrefix+f.url,\"SUCCESS\"==f.state&&f.url?(g=c.document.getElementById(d),domUtils.removeClasses(g,\"loadingclass\"),g.setAttribute(\"src\",e),g.setAttribute(\"_src\",e),g.setAttribute(\"alt\",f.original||\"\"),g.removeAttribute(\"id\"),c.fireEvent(\"contentchange\")):b&&b(f.state)}catch(j){b&&b(c.getLang(\"simpleupload.loadError\"))}k.reset(),domUtils.un(m,\"load\",a)}function b(a){if(d){var b=c.document.getElementById(d);b&&domUtils.remove(b),c.fireEvent(\"showmessage\",{id:d,content:a,type:\"error\",timeout:4e3})}}if(l.value){var d=\"loading_\"+(+new Date).toString(36),e=utils.serializeParam(c.queryCommandValue(\"serverparam\"))||\"\",f=c.getActionUrl(c.getOpt(\"imageActionName\")),g=c.getOpt(\"imageAllowFiles\");if(c.focus(),c.execCommand(\"inserthtml\",'<img class=\"loadingclass\" id=\"'+d+'\" src=\"'+c.options.themePath+c.options.theme+'/images/spacer.gif\">'),!c.getOpt(\"imageActionName\"))return void errorHandler(c.getLang(\"autoupload.errorLoadConfig\"));var h=l.value,i=h?h.substr(h.lastIndexOf(\".\")):\"\";if(!i||g&&(g.join(\"\")+\".\").indexOf(i.toLowerCase()+\".\")==-1)return void b(c.getLang(\"simpleupload.exceedTypeError\"));domUtils.on(m,\"load\",a),k.action=utils.formatUrl(f+(f.indexOf(\"?\")==-1?\"?\":\"&\")+e),k.submit()}});var n;c.addListener(\"selectionchange\",function(){clearTimeout(n),n=setTimeout(function(){var a=c.queryCommandState(\"simpleupload\");a==-1?l.disabled=\"disabled\":l.disabled=!1},400)}),d=!0}),f.style.cssText=g,b.appendChild(f)}var b,c=this,d=!1;return{bindEvents:{ready:function(){utils.cssRule(\"loading\",\".loadingclass{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\\n.loaderrorclass{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\",this.document)},simpleuploadbtnready:function(d,e){b=e,c.afterConfigReady(a)}},outputRule:function(a){utils.each(a.getNodesByTagName(\"img\"),function(a){/\\b(loaderrorclass)|(bloaderrorclass)\\b/.test(a.getAttr(\"class\"))&&a.parentNode.removeChild(a)})},commands:{simpleupload:{queryCommandState:function(){return d?0:-1}}}}}),UE.plugin.register(\"serverparam\",function(){var a={};return{commands:{serverparam:{execCommand:function(b,c,d){void 0===c||null===c?a={}:utils.isString(c)?void 0===d||null===d?delete a[c]:a[c]=d:utils.isObject(c)?utils.extend(a,c,!1):utils.isFunction(c)&&utils.extend(a,c(),!1)},queryCommandValue:function(){return a||{}}}}}}),UE.plugin.register(\"insertfile\",function(){function a(a){var b=a.substr(a.lastIndexOf(\".\")+1).toLowerCase(),c={rar:\"icon_rar.gif\",zip:\"icon_rar.gif\",tar:\"icon_rar.gif\",gz:\"icon_rar.gif\",bz2:\"icon_rar.gif\",doc:\"icon_doc.gif\",docx:\"icon_doc.gif\",pdf:\"icon_pdf.gif\",mp3:\"icon_mp3.gif\",xls:\"icon_xls.gif\",chm:\"icon_chm.gif\",ppt:\"icon_ppt.gif\",pptx:\"icon_ppt.gif\",avi:\"icon_mv.gif\",rmvb:\"icon_mv.gif\",wmv:\"icon_mv.gif\",flv:\"icon_mv.gif\",swf:\"icon_mv.gif\",rm:\"icon_mv.gif\",exe:\"icon_exe.gif\",psd:\"icon_psd.gif\",txt:\"icon_txt.gif\",jpg:\"icon_jpg.gif\",png:\"icon_jpg.gif\",jpeg:\"icon_jpg.gif\",gif:\"icon_jpg.gif\",ico:\"icon_jpg.gif\",bmp:\"icon_jpg.gif\"};return c[b]?c[b]:c.txt}var b=this;return{commands:{insertfile:{execCommand:function(c,d){if(d=utils.isArray(d)?d:[d],b.fireEvent(\"beforeinsertfile\",d)!==!0){var e,f,g,h,i=\"\",j=b.getOpt(\"UEDITOR_HOME_URL\"),k=j+(\"/\"==j.substr(j.length-1)?\"\":\"/\")+\"dialogs/attachment/fileTypeImages/\";for(e=0;e<d.length;e++)f=d[e],g=k+a(f.url),h=f.title||f.url.substr(f.url.lastIndexOf(\"/\")+1),i+='<p style=\"line-height: 16px;\"><img style=\"vertical-align: middle; margin-right: 2px;\" src=\"'+g+'\" _src=\"'+g+'\" /><a style=\"font-size:12px; color:#0066cc;\" href=\"'+f.url+'\" title=\"'+h+'\">'+h+\"</a></p>\";b.execCommand(\"insertHtml\",i),b.fireEvent(\"afterinsertfile\",d)}}}}}});var baidu=baidu||{};baidu.editor=baidu.editor||{},UE.ui=baidu.editor.ui={},function(){function a(){var a=document.getElementById(\"edui_fixedlayer\");i.setViewportOffset(a,{left:0,top:0})}function b(b){d.on(window,\"scroll\",a),d.on(window,\"resize\",baidu.editor.utils.defer(a,0,!0))}var c=baidu.editor.browser,d=baidu.editor.dom.domUtils,e=\"$EDITORUI\",f=window[e]={},g=\"ID\"+e,h=0,i=baidu.editor.ui.uiUtils={uid:function(a){return a?a[g]||(a[g]=++h):++h},hook:function(a,b){var c;return a&&a._callbacks?c=a:(c=function(){var b;a&&(b=a.apply(this,arguments));for(var d=c._callbacks,e=d.length;e--;){var f=d[e].apply(this,arguments);void 0===b&&(b=f)}return b},c._callbacks=[]),c._callbacks.push(b),c},createElementByHtml:function(a){var b=document.createElement(\"div\");return b.innerHTML=a,b=b.firstChild,b.parentNode.removeChild(b),b},getViewportElement:function(){return c.ie&&c.quirks?document.body:document.documentElement},getClientRect:function(a){var b;try{b=a.getBoundingClientRect()}catch(c){b={left:0,top:0,height:0,width:0}}for(var e,f={left:Math.round(b.left),top:Math.round(b.top),height:Math.round(b.bottom-b.top),width:Math.round(b.right-b.left)};(e=a.ownerDocument)!==document&&(a=d.getWindow(e).frameElement);)b=a.getBoundingClientRect(),f.left+=b.left,f.top+=b.top;return f.bottom=f.top+f.height,f.right=f.left+f.width,f},getViewportRect:function(){var a=i.getViewportElement(),b=0|(window.innerWidth||a.clientWidth),c=0|(window.innerHeight||a.clientHeight);return{left:0,top:0,height:c,width:b,bottom:c,right:b}},setViewportOffset:function(a,b){var c=i.getFixedLayer();a.parentNode===c?(a.style.left=b.left+\"px\",a.style.top=b.top+\"px\"):d.setViewportOffset(a,b)},getEventOffset:function(a){var b=a.target||a.srcElement,c=i.getClientRect(b),d=i.getViewportOffsetByEvent(a);return{left:d.left-c.left,top:d.top-c.top}},getViewportOffsetByEvent:function(a){var b=a.target||a.srcElement,c=d.getWindow(b).frameElement,e={left:a.clientX,top:a.clientY};if(c&&b.ownerDocument!==document){var f=i.getClientRect(c);e.left+=f.left,e.top+=f.top}return e},setGlobal:function(a,b){return f[a]=b,e+'[\"'+a+'\"]'},unsetGlobal:function(a){delete f[a]},copyAttributes:function(a,b){for(var e=b.attributes,f=e.length;f--;){var g=e[f];\"style\"==g.nodeName||\"class\"==g.nodeName||c.ie&&!g.specified||a.setAttribute(g.nodeName,g.nodeValue)}b.className&&d.addClass(a,b.className),b.style.cssText&&(a.style.cssText+=\";\"+b.style.cssText)},removeStyle:function(a,b){if(a.style.removeProperty)a.style.removeProperty(b);else{if(!a.style.removeAttribute)throw\"\";a.style.removeAttribute(b)}},contains:function(a,b){return a&&b&&a!==b&&(a.contains?a.contains(b):16&a.compareDocumentPosition(b))},startDrag:function(a,b,c){function d(a){var c=a.clientX-g,d=a.clientY-h;b.ondragmove(c,d,a),a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function e(a){c.removeEventListener(\"mousemove\",d,!0),c.removeEventListener(\"mouseup\",e,!0),window.removeEventListener(\"mouseup\",e,!0),b.ondragstop()}function f(){i.releaseCapture(),i.detachEvent(\"onmousemove\",d),i.detachEvent(\"onmouseup\",f),i.detachEvent(\"onlosecaptrue\",f),b.ondragstop()}var c=c||document,g=a.clientX,h=a.clientY;if(c.addEventListener)c.addEventListener(\"mousemove\",d,!0),c.addEventListener(\"mouseup\",e,!0),window.addEventListener(\"mouseup\",e,!0),a.preventDefault();else{var i=a.srcElement;i.setCapture(),i.attachEvent(\"onmousemove\",d),i.attachEvent(\"onmouseup\",f),i.attachEvent(\"onlosecaptrue\",f),a.returnValue=!1}b.ondragstart()},getFixedLayer:function(){var d=document.getElementById(\"edui_fixedlayer\");return null==d&&(d=document.createElement(\"div\"),d.id=\"edui_fixedlayer\",document.body.appendChild(d),c.ie&&c.version<=8?(d.style.position=\"absolute\",b(),setTimeout(a)):d.style.position=\"fixed\",d.style.left=\"0\",d.style.top=\"0\",d.style.width=\"0\",d.style.height=\"0\"),d},makeUnselectable:function(a){if(c.opera||c.ie&&c.version<9){if(a.unselectable=\"on\",a.hasChildNodes())for(var b=0;b<a.childNodes.length;b++)1==a.childNodes[b].nodeType&&i.makeUnselectable(a.childNodes[b])}else void 0!==a.style.MozUserSelect?a.style.MozUserSelect=\"none\":void 0!==a.style.WebkitUserSelect?a.style.WebkitUserSelect=\"none\":void 0!==a.style.KhtmlUserSelect&&(a.style.KhtmlUserSelect=\"none\")}}}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.EventBase,d=baidu.editor.ui.UIBase=function(){};d.prototype={className:\"\",uiName:\"\",initOptions:function(a){var c=this;for(var d in a)c[d]=a[d];this.id=this.id||\"edui\"+b.uid()},initUIBase:function(){this._globalKey=a.unhtml(b.setGlobal(this.id,this))},render:function(a){for(var c,d=this.renderHtml(),e=b.createElementByHtml(d),f=domUtils.getElementsByTagName(e,\"*\"),g=\"edui-\"+(this.theme||this.editor.options.theme),h=document.getElementById(\"edui_fixedlayer\"),i=0;c=f[i++];)domUtils.addClass(c,g);domUtils.addClass(e,g),h&&(h.className=\"\",domUtils.addClass(h,g));var j=this.getDom();null!=j?(j.parentNode.replaceChild(e,j),b.copyAttributes(e,j)):(\"string\"==typeof a&&(a=document.getElementById(a)),a=a||b.getFixedLayer(),domUtils.addClass(a,g),a.appendChild(e)),this.postRender()},getDom:function(a){return a?document.getElementById(this.id+\"_\"+a):document.getElementById(this.id)},postRender:function(){this.fireEvent(\"postrender\")},getHtmlTpl:function(){return\"\"},formatHtml:function(a){var b=\"edui-\"+this.uiName;return a.replace(/##/g,this.id).replace(/%%-/g,this.uiName?b+\"-\":\"\").replace(/%%/g,(this.uiName?b:\"\")+\" \"+this.className).replace(/\\$\\$/g,this._globalKey)},renderHtml:function(){return this.formatHtml(this.getHtmlTpl())},dispose:function(){var a=this.getDom();a&&baidu.editor.dom.domUtils.remove(a),b.unsetGlobal(this.id)}},a.inherits(d,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.Separator=function(a){this.initOptions(a),this.initSeparator()};c.prototype={uiName:\"separator\",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\"></div>'}},a.inherits(c,b)}(),function(){var a=baidu.editor.utils,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.uiUtils,e=baidu.editor.ui.Mask=function(a){this.initOptions(a),this.initUIBase()};e.prototype={getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-mask %%\" onclick=\"return $$._onClick(event, this);\" onmousedown=\"return $$._onMouseDown(event, this);\"></div>'},postRender:function(){var a=this;b.on(window,\"resize\",function(){setTimeout(function(){a.isHidden()||a._fill()})})},show:function(a){this._fill(),this.getDom().style.display=\"\",this.getDom().style.zIndex=a},hide:function(){this.getDom().style.display=\"none\",this.getDom().style.zIndex=\"\"},isHidden:function(){return\"none\"==this.getDom().style.display},_onMouseDown:function(){return!1},_onClick:function(a,b){this.fireEvent(\"click\",a,b)},_fill:function(){var a=this.getDom(),b=d.getViewportRect();a.style.width=b.width+\"px\",a.style.height=b.height+\"px\"}},a.inherits(e,c)}(),function(){function a(a,b){for(var c=0;c<g.length;c++){var d=g[c];if(!d.isHidden()&&d.queryAutoHide(b)!==!1){if(a&&/scroll/gi.test(a.type)&&\"edui-wordpastepop\"==d.className)return;d.hide()}}g.length&&d.editor.fireEvent(\"afterhidepop\")}var b=baidu.editor.utils,c=baidu.editor.ui.uiUtils,d=baidu.editor.dom.domUtils,e=baidu.editor.ui.UIBase,f=baidu.editor.ui.Popup=function(a){this.initOptions(a),this.initPopup()},g=[];f.postHide=a;var h=[\"edui-anchor-topleft\",\"edui-anchor-topright\",\"edui-anchor-bottomleft\",\"edui-anchor-bottomright\"];f.prototype={SHADOW_RADIUS:5,content:null,_hidden:!1,autoRender:!0,canSideLeft:!0,canSideUp:!0,initPopup:function(){this.initUIBase(),g.push(this)},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-popup %%\" onmousedown=\"return false;\"> <div id=\"##_body\" class=\"edui-popup-body\"> <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe> <div class=\"edui-shadow\"></div> <div id=\"##_content\" class=\"edui-popup-content\">'+this.getContentHtmlTpl()+\"  </div> </div></div>\"},getContentHtmlTpl:function(){return this.content?\"string\"==typeof this.content?this.content:this.content.renderHtml():\"\"},_UIBase_postRender:e.prototype.postRender,postRender:function(){if(this.content instanceof e&&this.content.postRender(),this.captureWheel&&!this.captured){this.captured=!0;var a=(document.documentElement.clientHeight||document.body.clientHeight)-80,b=this.getDom().offsetHeight,f=c.getClientRect(this.combox.getDom()).top,g=this.getDom(\"content\"),h=this.getDom(\"body\").getElementsByTagName(\"iframe\"),i=this;for(h.length&&(h=h[0]);f+b>a;)b-=30;g.style.height=b+\"px\",h&&(h.style.height=b+\"px\"),window.XMLHttpRequest?d.on(g,\"onmousewheel\"in document.body?\"mousewheel\":\"DOMMouseScroll\",function(a){a.preventDefault?a.preventDefault():a.returnValue=!1,a.wheelDelta?g.scrollTop-=a.wheelDelta/120*60:g.scrollTop-=a.detail/-3*60}):d.on(this.getDom(),\"mousewheel\",function(a){a.returnValue=!1,i.getDom(\"content\").scrollTop-=a.wheelDelta/120*60})}this.fireEvent(\"postRenderAfter\"),this.hide(!0),this._UIBase_postRender()},_doAutoRender:function(){!this.getDom()&&this.autoRender&&this.render()},mesureSize:function(){var a=this.getDom(\"content\");return c.getClientRect(a)},fitSize:function(){if(this.captureWheel&&this.sized)return this.__size;this.sized=!0;var a=this.getDom(\"body\");a.style.width=\"\",a.style.height=\"\";var b=this.mesureSize();if(this.captureWheel){a.style.width=-(-20-b.width)+\"px\";var c=parseInt(this.getDom(\"content\").style.height,10);!window.isNaN(c)&&(b.height=c)}else a.style.width=b.width+\"px\";return a.style.height=b.height+\"px\",this.__size=b,this.captureWheel&&(this.getDom(\"content\").style.overflow=\"auto\"),b},showAnchor:function(a,b){this.showAnchorRect(c.getClientRect(a),b)},showAnchorRect:function(a,b,e){this._doAutoRender();var f=c.getViewportRect();this.getDom().style.visibility=\"hidden\",this._show();var g,i,j,k,l=this.fitSize();b?(g=this.canSideLeft&&a.right+l.width>f.right&&a.left>l.width,i=this.canSideUp&&a.top+l.height>f.bottom&&a.bottom>l.height,j=g?a.left-l.width:a.right,k=i?a.bottom-l.height:a.top):(g=this.canSideLeft&&a.right+l.width>f.right&&a.left>l.width,i=this.canSideUp&&a.top+l.height>f.bottom&&a.bottom>l.height,j=g?a.right-l.width:a.left,k=i?a.top-l.height:a.bottom);var m=this.getDom();c.setViewportOffset(m,{left:j,top:k}),d.removeClasses(m,h),m.className+=\" \"+h[2*(i?1:0)+(g?1:0)],this.editor&&(m.style.zIndex=1*this.editor.container.style.zIndex+10,baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=m.style.zIndex-1),this.getDom().style.visibility=\"visible\"},showAt:function(a){var b=a.left,c=a.top,d={left:b,top:c,right:b,bottom:c,height:0,width:0};this.showAnchorRect(d,!1,!0)},_show:function(){if(this._hidden){var a=this.getDom();a.style.display=\"\",this._hidden=!1,this.fireEvent(\"show\")}},isHidden:function(){return this._hidden},show:function(){this._doAutoRender(),this._show()},hide:function(a){!this._hidden&&this.getDom()&&(this.getDom().style.display=\"none\",this._hidden=!0,a||this.fireEvent(\"hide\"))},queryAutoHide:function(a){return!a||!c.contains(this.getDom(),a)}},b.inherits(f,e),d.on(document,\"mousedown\",function(b){var c=b.target||b.srcElement;a(b,c)}),d.on(window,\"scroll\",function(b,c){a(b,c)})}(),function(){function a(a,b){for(var c='<div id=\"##\" class=\"edui-colorpicker %%\"><div class=\"edui-colorpicker-topbar edui-clearfix\"><div unselectable=\"on\" id=\"##_preview\" class=\"edui-colorpicker-preview\"></div><div unselectable=\"on\" class=\"edui-colorpicker-nocolor\" onclick=\"$$._onPickNoColor(event, this);\">'+a+'</div></div><table  class=\"edui-box\" style=\"border-collapse: collapse;\" onmouseover=\"$$._onTableOver(event, this);\" onmouseout=\"$$._onTableOut(event, this);\" onclick=\"return $$._onTableClick(event, this);\" cellspacing=\"0\" cellpadding=\"0\"><tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;padding-top: 2px\"><td colspan=\"10\">'+b.getLang(\"themeColor\")+'</td> </tr><tr class=\"edui-colorpicker-tablefirstrow\" >',d=0;d<e.length;d++)d&&d%10===0&&(c+=\"</tr>\"+(60==d?'<tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;\"><td colspan=\"10\">'+b.getLang(\"standardColor\")+\"</td></tr>\":\"\")+\"<tr\"+(60==d?' class=\"edui-colorpicker-tablefirstrow\"':\"\")+\">\"),c+=d<70?'<td style=\"padding: 0 2px;\"><a hidefocus title=\"'+e[d]+'\" onclick=\"return false;\" href=\"javascript:\" unselectable=\"on\" class=\"edui-box edui-colorpicker-colorcell\" data-color=\"#'+e[d]+'\" style=\"background-color:#'+e[d]+\";border:solid #ccc;\"+(d<10||d>=60?\"border-width:1px;\":d>=10&&d<20?\"border-width:1px 1px 0 1px;\":\"border-width:0 1px 0 1px;\")+'\"></a></td>':\"\";return c+=\"</tr></table></div>\"}var b=baidu.editor.utils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.ColorPicker=function(a){this.initOptions(a),this.noColorText=this.noColorText||this.editor.getLang(\"clearColor\"),this.initUIBase()};d.prototype={getHtmlTpl:function(){return a(this.noColorText,this.editor)},_onTableClick:function(a){var b=a.target||a.srcElement,c=b.getAttribute(\"data-color\");c&&this.fireEvent(\"pickcolor\",c)},_onTableOver:function(a){var b=a.target||a.srcElement,c=b.getAttribute(\"data-color\");c&&(this.getDom(\"preview\").style.backgroundColor=c)},_onTableOut:function(){this.getDom(\"preview\").style.backgroundColor=\"\"},_onPickNoColor:function(){this.fireEvent(\"picknocolor\")}},b.inherits(d,c);var e=\"ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,d8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,\".split(\",\")}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.TablePicker=function(a){this.initOptions(a),this.initTablePicker()};d.prototype={defaultNumRows:10,defaultNumCols:10,maxNumRows:20,maxNumCols:20,numRows:10,numCols:10,lengthOfCellSide:22,initTablePicker:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-tablepicker %%\"><div class=\"edui-tablepicker-body\"><div class=\"edui-infoarea\"><span id=\"##_label\" class=\"edui-label\"></span></div><div class=\"edui-pickarea\" onmousemove=\"$$._onMouseMove(event, this);\" onmouseover=\"$$._onMouseOver(event, this);\" onmouseout=\"$$._onMouseOut(event, this);\" onclick=\"$$._onClick(event, this);\"><div id=\"##_overlay\" class=\"edui-overlay\"></div></div></div></div>'},_UIBase_render:c.prototype.render,render:function(a){this._UIBase_render(a),this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_row\")+\" x 0\"+this.editor.getLang(\"t_col\")},_track:function(a,b){var c=this.getDom(\"overlay\").style,d=this.lengthOfCellSide;c.width=a*d+\"px\",c.height=b*d+\"px\";var e=this.getDom(\"label\");e.innerHTML=a+this.editor.getLang(\"t_col\")+\" x \"+b+this.editor.getLang(\"t_row\"),this.numCols=a,this.numRows=b},_onMouseOver:function(a,c){var d=a.relatedTarget||a.fromElement;b.contains(c,d)||c===d||(this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_col\")+\" x 0\"+this.editor.getLang(\"t_row\"),this.getDom(\"overlay\").style.visibility=\"\")},_onMouseOut:function(a,c){var d=a.relatedTarget||a.toElement;b.contains(c,d)||c===d||(this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_col\")+\" x 0\"+this.editor.getLang(\"t_row\"),this.getDom(\"overlay\").style.visibility=\"hidden\")},_onMouseMove:function(a,c){var d=(this.getDom(\"overlay\").style,b.getEventOffset(a)),e=this.lengthOfCellSide,f=Math.ceil(d.left/e),g=Math.ceil(d.top/e);this._track(f,g)},_onClick:function(){this.fireEvent(\"picktable\",this.numCols,this.numRows)}},a.inherits(d,c)}(),function(){var a=baidu.editor.browser,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.uiUtils,d='onmousedown=\"$$.Stateful_onMouseDown(event, this);\" onmouseup=\"$$.Stateful_onMouseUp(event, this);\"'+(a.ie?' onmouseenter=\"$$.Stateful_onMouseEnter(event, this);\" onmouseleave=\"$$.Stateful_onMouseLeave(event, this);\"':' onmouseover=\"$$.Stateful_onMouseOver(event, this);\" onmouseout=\"$$.Stateful_onMouseOut(event, this);\"');baidu.editor.ui.Stateful={alwalysHoverable:!1,target:null,Stateful_init:function(){this._Stateful_dGetHtmlTpl=this.getHtmlTpl,this.getHtmlTpl=this.Stateful_getHtmlTpl},Stateful_getHtmlTpl:function(){var a=this._Stateful_dGetHtmlTpl();return a.replace(/stateful/g,function(){return d})},Stateful_onMouseEnter:function(a,b){this.target=b,this.isDisabled()&&!this.alwalysHoverable||(this.addState(\"hover\"),this.fireEvent(\"over\"))},Stateful_onMouseLeave:function(a,b){this.isDisabled()&&!this.alwalysHoverable||(this.removeState(\"hover\"),this.removeState(\"active\"),this.fireEvent(\"out\"))},Stateful_onMouseOver:function(a,b){var d=a.relatedTarget;c.contains(b,d)||b===d||this.Stateful_onMouseEnter(a,b)},Stateful_onMouseOut:function(a,b){var d=a.relatedTarget;c.contains(b,d)||b===d||this.Stateful_onMouseLeave(a,b)},Stateful_onMouseDown:function(a,b){this.isDisabled()||this.addState(\"active\")},Stateful_onMouseUp:function(a,b){this.isDisabled()||this.removeState(\"active\")},Stateful_postRender:function(){this.disabled&&!this.hasState(\"disabled\")&&this.addState(\"disabled\")},hasState:function(a){return b.hasClass(this.getStateDom(),\"edui-state-\"+a)},addState:function(a){this.hasState(a)||(this.getStateDom().className+=\" edui-state-\"+a)},removeState:function(a){this.hasState(a)&&b.removeClasses(this.getStateDom(),[\"edui-state-\"+a])},getStateDom:function(){return this.getDom(\"state\")},isChecked:function(){return this.hasState(\"checked\")},setChecked:function(a){!this.isDisabled()&&a?this.addState(\"checked\"):this.removeState(\"checked\")},isDisabled:function(){return this.hasState(\"disabled\")},setDisabled:function(a){a?(this.removeState(\"hover\"),this.removeState(\"checked\"),this.removeState(\"active\"),this.addState(\"disabled\")):this.removeState(\"disabled\")}}}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.Stateful,d=baidu.editor.ui.Button=function(a){if(a.name){var b=a.name,c=a.cssRules;a.className||(a.className=\"edui-for-\"+b),a.cssRules=\".edui-\"+(a.theme||\"default\")+\" .edui-toolbar .edui-button.edui-for-\"+b+\" .edui-icon {\"+c+\"}\"}this.initOptions(a),this.initButton()};d.prototype={uiName:\"button\",label:\"\",title:\"\",showIcon:!0,showText:!0,cssRules:\"\",initButton:function(){this.initUIBase(),this.Stateful_init(),this.cssRules&&a.cssRule(\"edui-customize-\"+this.name+\"-style\",this.cssRules)},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\"><div id=\"##_state\" stateful><div class=\"%%-wrap\"><div id=\"##_body\" unselectable=\"on\" '+(this.title?'title=\"'+this.title+'\"':\"\")+' class=\"%%-body\" onmousedown=\"return $$._onMouseDown(event, this);\" onclick=\"return $$._onClick(event, this);\">'+(this.showIcon?'<div class=\"edui-box edui-icon\"></div>':\"\")+(this.showText?'<div class=\"edui-box edui-label\">'+this.label+\"</div>\":\"\")+\"</div></div></div></div>\"},postRender:function(){this.Stateful_postRender(),this.setDisabled(this.disabled)},_onMouseDown:function(a){var b=a.target||a.srcElement,c=b&&b.tagName&&b.tagName.toLowerCase();if(\"input\"==c||\"object\"==c||\"object\"==c)return!1},_onClick:function(){this.isDisabled()||this.fireEvent(\"click\")},setTitle:function(a){var b=this.getDom(\"label\");b.innerHTML=a}},a.inherits(d,b),a.extend(d.prototype,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=(baidu.editor.dom.domUtils,baidu.editor.ui.UIBase),d=baidu.editor.ui.Stateful,e=baidu.editor.ui.SplitButton=function(a){this.initOptions(a),this.initSplitButton()};e.prototype={popup:null,uiName:\"splitbutton\",title:\"\",initSplitButton:function(){this.initUIBase(),this.Stateful_init();if(null!=this.popup){var a=this.popup;this.popup=null,this.setPopup(a)}},_UIBase_postRender:c.prototype.postRender,postRender:function(){this.Stateful_postRender(),this._UIBase_postRender()},setPopup:function(c){this.popup!==c&&(null!=this.popup&&this.popup.dispose(),c.addListener(\"show\",a.bind(this._onPopupShow,this)),c.addListener(\"hide\",a.bind(this._onPopupHide,this)),c.addListener(\"postrender\",a.bind(function(){c.getDom(\"body\").appendChild(b.createElementByHtml('<div id=\"'+this.popup.id+'_bordereraser\" class=\"edui-bordereraser edui-background\" style=\"width:'+(b.getClientRect(this.getDom()).width+20)+'px\"></div>')),\nc.getDom().className+=\" \"+this.className},this)),this.popup=c)},_onPopupShow:function(){this.addState(\"opened\")},_onPopupHide:function(){this.removeState(\"opened\")},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\"><div '+(this.title?'title=\"'+this.title+'\"':\"\")+' id=\"##_state\" stateful><div class=\"%%-body\"><div id=\"##_button_body\" class=\"edui-box edui-button-body\" onclick=\"$$._onButtonClick(event, this);\"><div class=\"edui-box edui-icon\"></div></div><div class=\"edui-box edui-splitborder\"></div><div class=\"edui-box edui-arrow\" onclick=\"$$._onArrowClick();\"></div></div></div></div>'},showPopup:function(){var a=b.getClientRect(this.getDom());a.top-=this.popup.SHADOW_RADIUS,a.height+=this.popup.SHADOW_RADIUS,this.popup.showAnchorRect(a)},_onArrowClick:function(a,b){this.isDisabled()||this.showPopup()},_onButtonClick:function(){this.isDisabled()||this.fireEvent(\"buttonclick\")}},a.inherits(e,c),a.extend(e.prototype,d,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.ColorPicker,d=baidu.editor.ui.Popup,e=baidu.editor.ui.SplitButton,f=baidu.editor.ui.ColorButton=function(a){this.initOptions(a),this.initColorButton()};f.prototype={initColorButton:function(){var a=this;this.popup=new d({content:new c({noColorText:a.editor.getLang(\"clearColor\"),editor:a.editor,onpickcolor:function(b,c){a._onPickColor(c)},onpicknocolor:function(b,c){a._onPickNoColor(c)}}),editor:a.editor}),this.initSplitButton()},_SplitButton_postRender:e.prototype.postRender,postRender:function(){this._SplitButton_postRender(),this.getDom(\"button_body\").appendChild(b.createElementByHtml('<div id=\"'+this.id+'_colorlump\" class=\"edui-colorlump\"></div>')),this.getDom().className+=\" edui-colorbutton\"},setColor:function(a){this.getDom(\"colorlump\").style.backgroundColor=a,this.color=a},_onPickColor:function(a){this.fireEvent(\"pickcolor\",a)!==!1&&(this.setColor(a),this.popup.hide())},_onPickNoColor:function(a){this.fireEvent(\"picknocolor\")!==!1&&this.popup.hide()}},a.inherits(f,e)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Popup,c=baidu.editor.ui.TablePicker,d=baidu.editor.ui.SplitButton,e=baidu.editor.ui.TableButton=function(a){this.initOptions(a),this.initTableButton()};e.prototype={initTableButton:function(){var a=this;this.popup=new b({content:new c({editor:a.editor,onpicktable:function(b,c,d){a._onPickTable(c,d)}}),editor:a.editor}),this.initSplitButton()},_onPickTable:function(a,b){this.fireEvent(\"picktable\",a,b)!==!1&&this.popup.hide()}},a.inherits(e,d)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.AutoTypeSetPicker=function(a){this.initOptions(a),this.initAutoTypeSetPicker()};c.prototype={initAutoTypeSetPicker:function(){this.initUIBase()},getHtmlTpl:function(){var a=this.editor,b=a.options.autotypeset,c=a.getLang(\"autoTypeSet\"),d=\"textAlignValue\"+a.uid,e=\"imageBlockLineValue\"+a.uid,f=\"symbolConverValue\"+a.uid;return'<div id=\"##\" class=\"edui-autotypesetpicker %%\"><div class=\"edui-autotypesetpicker-body\"><table ><tr><td nowrap><input type=\"checkbox\" name=\"mergeEmptyline\" '+(b.mergeEmptyline?\"checked\":\"\")+\">\"+c.mergeLine+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"removeEmptyline\" '+(b.removeEmptyline?\"checked\":\"\")+\">\"+c.delLine+'</td></tr><tr><td nowrap><input type=\"checkbox\" name=\"removeClass\" '+(b.removeClass?\"checked\":\"\")+\">\"+c.removeFormat+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"indent\" '+(b.indent?\"checked\":\"\")+\">\"+c.indent+'</td></tr><tr><td nowrap><input type=\"checkbox\" name=\"textAlign\" '+(b.textAlign?\"checked\":\"\")+\">\"+c.alignment+'</td><td colspan=\"2\" id=\"'+d+'\"><input type=\"radio\" name=\"'+d+'\" value=\"left\" '+(b.textAlign&&\"left\"==b.textAlign?\"checked\":\"\")+\">\"+a.getLang(\"justifyleft\")+'<input type=\"radio\" name=\"'+d+'\" value=\"center\" '+(b.textAlign&&\"center\"==b.textAlign?\"checked\":\"\")+\">\"+a.getLang(\"justifycenter\")+'<input type=\"radio\" name=\"'+d+'\" value=\"right\" '+(b.textAlign&&\"right\"==b.textAlign?\"checked\":\"\")+\">\"+a.getLang(\"justifyright\")+'</td></tr><tr><td nowrap><input type=\"checkbox\" name=\"imageBlockLine\" '+(b.imageBlockLine?\"checked\":\"\")+\">\"+c.imageFloat+'</td><td nowrap id=\"'+e+'\"><input type=\"radio\" name=\"'+e+'\" value=\"none\" '+(b.imageBlockLine&&\"none\"==b.imageBlockLine?\"checked\":\"\")+\">\"+a.getLang(\"default\")+'<input type=\"radio\" name=\"'+e+'\" value=\"left\" '+(b.imageBlockLine&&\"left\"==b.imageBlockLine?\"checked\":\"\")+\">\"+a.getLang(\"justifyleft\")+'<input type=\"radio\" name=\"'+e+'\" value=\"center\" '+(b.imageBlockLine&&\"center\"==b.imageBlockLine?\"checked\":\"\")+\">\"+a.getLang(\"justifycenter\")+'<input type=\"radio\" name=\"'+e+'\" value=\"right\" '+(b.imageBlockLine&&\"right\"==b.imageBlockLine?\"checked\":\"\")+\">\"+a.getLang(\"justifyright\")+'</td></tr><tr><td nowrap><input type=\"checkbox\" name=\"clearFontSize\" '+(b.clearFontSize?\"checked\":\"\")+\">\"+c.removeFontsize+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"clearFontFamily\" '+(b.clearFontFamily?\"checked\":\"\")+\">\"+c.removeFontFamily+'</td></tr><tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"removeEmptyNode\" '+(b.removeEmptyNode?\"checked\":\"\")+\">\"+c.removeHtml+'</td></tr><tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"pasteFilter\" '+(b.pasteFilter?\"checked\":\"\")+\">\"+c.pasteFilter+'</td></tr><tr><td nowrap><input type=\"checkbox\" name=\"symbolConver\" '+(b.bdc2sb||b.tobdc?\"checked\":\"\")+\">\"+c.symbol+'</td><td id=\"'+f+'\"><input type=\"radio\" name=\"bdc\" value=\"bdc2sb\" '+(b.bdc2sb?\"checked\":\"\")+\">\"+c.bdc2sb+'<input type=\"radio\" name=\"bdc\" value=\"tobdc\" '+(b.tobdc?\"checked\":\"\")+\">\"+c.tobdc+'</td><td nowrap align=\"right\"><button >'+c.run+\"</button></td></tr></table></div></div>\"},_UIBase_render:b.prototype.render},a.inherits(c,b)}(),function(){function a(a){for(var c,d={},e=a.getDom(),f=a.editor.uid,g=null,h=null,i=domUtils.getElementsByTagName(e,\"input\"),j=i.length-1;c=i[j--];)if(g=c.getAttribute(\"type\"),\"checkbox\"==g)if(h=c.getAttribute(\"name\"),d[h]&&delete d[h],c.checked){var k=document.getElementById(h+\"Value\"+f);if(k){if(/input/gi.test(k.tagName))d[h]=k.value;else for(var l,m=k.getElementsByTagName(\"input\"),n=m.length-1;l=m[n--];)if(l.checked){d[h]=l.value;break}}else d[h]=!0}else d[h]=!1;else d[c.getAttribute(\"value\")]=c.checked;for(var o,p=domUtils.getElementsByTagName(e,\"select\"),j=0;o=p[j++];){var q=o.getAttribute(\"name\");d[q]=d[q]?o.value:\"\"}b.extend(a.editor.options.autotypeset,d),a.editor.setPreferences(\"autotypeset\",d)}var b=baidu.editor.utils,c=baidu.editor.ui.Popup,d=baidu.editor.ui.AutoTypeSetPicker,e=baidu.editor.ui.SplitButton,f=baidu.editor.ui.AutoTypeSetButton=function(a){this.initOptions(a),this.initAutoTypeSetButton()};f.prototype={initAutoTypeSetButton:function(){var b=this;this.popup=new c({content:new d({editor:b.editor}),editor:b.editor,hide:function(){!this._hidden&&this.getDom()&&(a(this),this.getDom().style.display=\"none\",this._hidden=!0,this.fireEvent(\"hide\"))}});var e=0;this.popup.addListener(\"postRenderAfter\",function(){var c=this;if(!e){var d=this.getDom(),f=d.getElementsByTagName(\"button\")[0];f.onclick=function(){a(c),b.editor.execCommand(\"autotypeset\"),c.hide()},domUtils.on(d,\"click\",function(d){var e=d.target||d.srcElement,f=b.editor.uid;if(e&&\"INPUT\"==e.tagName){if(\"imageBlockLine\"==e.name||\"textAlign\"==e.name||\"symbolConver\"==e.name)for(var g=e.checked,h=document.getElementById(e.name+\"Value\"+f),i=h.getElementsByTagName(\"input\"),j={imageBlockLine:\"none\",textAlign:\"left\",symbolConver:\"tobdc\"},k=0;k<i.length;k++)g?i[k].value==j[e.name]&&(i[k].checked=\"checked\"):i[k].checked=!1;if(e.name==\"imageBlockLineValue\"+f||e.name==\"textAlignValue\"+f||\"bdc\"==e.name){var l=e.parentNode.previousSibling.getElementsByTagName(\"input\");l&&(l[0].checked=!0)}a(c)}}),e=1}}),this.initSplitButton()}},b.inherits(f,e)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Popup,c=baidu.editor.ui.Stateful,d=baidu.editor.ui.UIBase,e=baidu.editor.ui.CellAlignPicker=function(a){this.initOptions(a),this.initSelected(),this.initCellAlignPicker()};e.prototype={initSelected:function(){var a={valign:{top:0,middle:1,bottom:2},align:{left:0,center:1,right:2},count:3};this.selected&&(this.selectedIndex=a.valign[this.selected.valign]*a.count+a.align[this.selected.align])},initCellAlignPicker:function(){this.initUIBase(),this.Stateful_init()},getHtmlTpl:function(){for(var a=[\"left\",\"center\",\"right\"],b=9,c=null,d=-1,e=[],f=0;f<b;f++)c=this.selectedIndex===f?' class=\"edui-cellalign-selected\" ':\"\",d=f%3,0===d&&e.push(\"<tr>\"),e.push('<td index=\"'+f+'\" '+c+' stateful><div class=\"edui-icon edui-'+a[d]+'\"></div></td>'),2===d&&e.push(\"</tr>\");return'<div id=\"##\" class=\"edui-cellalignpicker %%\"><div class=\"edui-cellalignpicker-body\"><table onclick=\"$$._onClick(event);\">'+e.join(\"\")+\"</table></div></div>\"},getStateDom:function(){return this.target},_onClick:function(a){var c=a.target||a.srcElement;/icon/.test(c.className)&&(this.items[c.parentNode.getAttribute(\"index\")].onclick(),b.postHide(a))},_UIBase_render:d.prototype.render},a.inherits(e,d),a.extend(e.prototype,c,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Stateful,c=baidu.editor.ui.uiUtils,d=baidu.editor.ui.UIBase,e=baidu.editor.ui.PastePicker=function(a){this.initOptions(a),this.initPastePicker()};e.prototype={initPastePicker:function(){this.initUIBase(),this.Stateful_init()},getHtmlTpl:function(){return'<div class=\"edui-pasteicon\" onclick=\"$$._onClick(this)\"></div><div class=\"edui-pastecontainer\"><div class=\"edui-title\">'+this.editor.getLang(\"pasteOpt\")+'</div><div class=\"edui-button\"><div title=\"'+this.editor.getLang(\"pasteSourceFormat\")+'\" onclick=\"$$.format(false)\" stateful><div class=\"edui-richtxticon\"></div></div><div title=\"'+this.editor.getLang(\"tagFormat\")+'\" onclick=\"$$.format(2)\" stateful><div class=\"edui-tagicon\"></div></div><div title=\"'+this.editor.getLang(\"pasteTextFormat\")+'\" onclick=\"$$.format(true)\" stateful><div class=\"edui-plaintxticon\"></div></div></div></div></div>'},getStateDom:function(){return this.target},format:function(a){this.editor.ui._isTransfer=!0,this.editor.fireEvent(\"pasteTransfer\",a)},_onClick:function(a){var b=domUtils.getNextDomNode(a),d=c.getViewportRect().height,e=c.getClientRect(b);e.top+e.height>d?b.style.top=-e.height-a.offsetHeight+\"px\":b.style.top=\"\",/hidden/gi.test(domUtils.getComputedStyle(b,\"visibility\"))?(b.style.visibility=\"visible\",domUtils.addClass(a,\"edui-state-opened\")):(b.style.visibility=\"hidden\",domUtils.removeClasses(a,\"edui-state-opened\"))},_UIBase_render:d.prototype.render},a.inherits(e,d),a.extend(e.prototype,b,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.Toolbar=function(a){this.initOptions(a),this.initToolbar()};d.prototype={items:null,initToolbar:function(){this.items=this.items||[],this.initUIBase()},add:function(a,b){void 0===b?this.items.push(a):this.items.splice(b,0,a)},getHtmlTpl:function(){for(var a=[],b=0;b<this.items.length;b++)a[b]=this.items[b].renderHtml();return'<div id=\"##\" class=\"edui-toolbar %%\" onselectstart=\"return false;\" onmousedown=\"return $$._onMouseDown(event, this);\">'+a.join(\"\")+\"</div>\"},postRender:function(){for(var a=this.getDom(),c=0;c<this.items.length;c++)this.items[c].postRender();b.makeUnselectable(a)},_onMouseDown:function(a){var b=a.target||a.srcElement,c=b&&b.tagName&&b.tagName.toLowerCase();if(\"input\"==c||\"object\"==c||\"object\"==c)return!1}},a.inherits(d,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.uiUtils,d=baidu.editor.ui.UIBase,e=baidu.editor.ui.Popup,f=baidu.editor.ui.Stateful,g=baidu.editor.ui.CellAlignPicker,h=baidu.editor.ui.Menu=function(a){this.initOptions(a),this.initMenu()},i={renderHtml:function(){return'<div class=\"edui-menuitem edui-menuseparator\"><div class=\"edui-menuseparator-inner\"></div></div>'},postRender:function(){},queryAutoHide:function(){return!0}};h.prototype={items:null,uiName:\"menu\",initMenu:function(){this.items=this.items||[],this.initPopup(),this.initItems()},initItems:function(){for(var a=0;a<this.items.length;a++){var b=this.items[a];\"-\"==b?this.items[a]=this.getSeparator():b instanceof j||(b.editor=this.editor,b.theme=this.editor.options.theme,this.items[a]=this.createItem(b))}},getSeparator:function(){return i},createItem:function(a){return a.menu=this,new j(a)},_Popup_getContentHtmlTpl:e.prototype.getContentHtmlTpl,getContentHtmlTpl:function(){if(0==this.items.length)return this._Popup_getContentHtmlTpl();for(var a=[],b=0;b<this.items.length;b++){var c=this.items[b];a[b]=c.renderHtml()}return'<div class=\"%%-body\">'+a.join(\"\")+\"</div>\"},_Popup_postRender:e.prototype.postRender,postRender:function(){for(var a=this,d=0;d<this.items.length;d++){var e=this.items[d];e.ownerMenu=this,e.postRender()}b.on(this.getDom(),\"mouseover\",function(b){b=b||event;var d=b.relatedTarget||b.fromElement,e=a.getDom();c.contains(e,d)||e===d||a.fireEvent(\"over\")}),this._Popup_postRender()},queryAutoHide:function(a){if(a){if(c.contains(this.getDom(),a))return!1;for(var b=0;b<this.items.length;b++){var d=this.items[b];if(d.queryAutoHide(a)===!1)return!1}}},clearItems:function(){for(var a=0;a<this.items.length;a++){var b=this.items[a];clearTimeout(b._showingTimer),clearTimeout(b._closingTimer),b.subMenu&&b.subMenu.destroy()}this.items=[]},destroy:function(){this.getDom()&&b.remove(this.getDom()),this.clearItems()},dispose:function(){this.destroy()}},a.inherits(h,e);var j=baidu.editor.ui.MenuItem=function(a){if(this.initOptions(a),this.initUIBase(),this.Stateful_init(),this.subMenu&&!(this.subMenu instanceof h))if(a.className&&a.className.indexOf(\"aligntd\")!=-1){var c=this;this.subMenu.selected=this.editor.queryCommandValue(\"cellalignment\"),this.subMenu=new e({content:new g(this.subMenu),parentMenu:c,editor:c.editor,destroy:function(){this.getDom()&&b.remove(this.getDom())}}),this.subMenu.addListener(\"postRenderAfter\",function(){b.on(this.getDom(),\"mouseover\",function(){c.addState(\"opened\")})})}else this.subMenu=new h(this.subMenu)};j.prototype={label:\"\",subMenu:null,ownerMenu:null,uiName:\"menuitem\",alwalysHoverable:!0,getHtmlTpl:function(){return'<div id=\"##\" class=\"%%\" stateful onclick=\"$$._onClick(event, this);\"><div class=\"%%-body\">'+this.renderLabelHtml()+\"</div></div>\"},postRender:function(){var a=this;this.addListener(\"over\",function(){a.ownerMenu.fireEvent(\"submenuover\",a),a.subMenu&&a.delayShowSubMenu()}),this.subMenu&&(this.getDom().className+=\" edui-hassubmenu\",this.subMenu.render(),this.addListener(\"out\",function(){a.delayHideSubMenu()}),this.subMenu.addListener(\"over\",function(){clearTimeout(a._closingTimer),a._closingTimer=null,a.addState(\"opened\")}),this.ownerMenu.addListener(\"hide\",function(){a.hideSubMenu()}),this.ownerMenu.addListener(\"submenuover\",function(b,c){c!==a&&a.delayHideSubMenu()}),this.subMenu._bakQueryAutoHide=this.subMenu.queryAutoHide,this.subMenu.queryAutoHide=function(b){return(!b||!c.contains(a.getDom(),b))&&this._bakQueryAutoHide(b)}),this.getDom().style.tabIndex=\"-1\",c.makeUnselectable(this.getDom()),this.Stateful_postRender()},delayShowSubMenu:function(){var a=this;a.isDisabled()||(a.addState(\"opened\"),clearTimeout(a._showingTimer),clearTimeout(a._closingTimer),a._closingTimer=null,a._showingTimer=setTimeout(function(){a.showSubMenu()},250))},delayHideSubMenu:function(){var a=this;a.isDisabled()||(a.removeState(\"opened\"),clearTimeout(a._showingTimer),a._closingTimer||(a._closingTimer=setTimeout(function(){a.hasState(\"opened\")||a.hideSubMenu(),a._closingTimer=null},400)))},renderLabelHtml:function(){return'<div class=\"edui-arrow\"></div><div class=\"edui-box edui-icon\"></div><div class=\"edui-box edui-label %%-label\">'+(this.label||\"\")+\"</div>\"},getStateDom:function(){return this.getDom()},queryAutoHide:function(a){if(this.subMenu&&this.hasState(\"opened\"))return this.subMenu.queryAutoHide(a)},_onClick:function(a,b){this.hasState(\"disabled\")||this.fireEvent(\"click\",a,b)!==!1&&(this.subMenu?this.showSubMenu():e.postHide(a))},showSubMenu:function(){var a=c.getClientRect(this.getDom());a.right-=5,a.left+=2,a.width-=7,a.top-=4,a.bottom+=4,a.height+=8,this.subMenu.showAnchorRect(a,!0,!0)},hideSubMenu:function(){this.subMenu.hide()}},a.inherits(j,d),a.extend(j.prototype,f,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.Menu,d=baidu.editor.ui.SplitButton,e=baidu.editor.ui.Combox=function(a){this.initOptions(a),this.initCombox()};e.prototype={uiName:\"combox\",onbuttonclick:function(){this.showPopup()},initCombox:function(){var a=this;this.items=this.items||[];for(var b=0;b<this.items.length;b++){var d=this.items[b];d.uiName=\"listitem\",d.index=b,d.onclick=function(){a.selectByIndex(this.index)}}this.popup=new c({items:this.items,uiName:\"list\",editor:this.editor,captureWheel:!0,combox:this}),this.initSplitButton()},_SplitButton_postRender:d.prototype.postRender,postRender:function(){this._SplitButton_postRender(),this.setLabel(this.label||\"\"),this.setValue(this.initValue||\"\")},showPopup:function(){var a=b.getClientRect(this.getDom());a.top+=1,a.bottom-=1,a.height-=2,this.popup.showAnchorRect(a)},getValue:function(){return this.value},setValue:function(a){var b=this.indexByValue(a);b!=-1?(this.selectedIndex=b,this.setLabel(this.items[b].label),this.value=this.items[b].value):(this.selectedIndex=-1,this.setLabel(this.getLabelForUnknowValue(a)),this.value=a)},setLabel:function(a){this.getDom(\"button_body\").innerHTML=a,this.label=a},getLabelForUnknowValue:function(a){return a},indexByValue:function(a){for(var b=0;b<this.items.length;b++)if(a==this.items[b].value)return b;return-1},getItem:function(a){return this.items[a]},selectByIndex:function(a){a<this.items.length&&this.fireEvent(\"select\",a)!==!1&&(this.selectedIndex=a,this.value=this.items[a].value,this.setLabel(this.items[a].label))}},a.inherits(e,d)}(),function(){var a,b,c,d=baidu.editor.utils,e=baidu.editor.dom.domUtils,f=baidu.editor.ui.uiUtils,g=baidu.editor.ui.Mask,h=baidu.editor.ui.UIBase,i=baidu.editor.ui.Button,j=baidu.editor.ui.Dialog=function(a){if(a.name){var b=a.name,c=a.cssRules;a.className||(a.className=\"edui-for-\"+b),c&&(a.cssRules=\".edui-for-\"+b+\" .edui-dialog-content  {\"+c+\"}\")}this.initOptions(d.extend({autoReset:!0,draggable:!0,onok:function(){},oncancel:function(){},onclose:function(a,b){return b?this.onok():this.oncancel()},holdScroll:!1},a)),this.initDialog()};j.prototype={draggable:!1,uiName:\"dialog\",initDialog:function(){var e=this,f=this.editor.options.theme;if(this.cssRules&&(this.cssRules=\".edui-\"+f+\" \"+this.cssRules,d.cssRule(\"edui-customize-\"+this.name+\"-style\",this.cssRules)),this.initUIBase(),this.modalMask=a||(a=new g({className:\"edui-dialog-modalmask\",theme:f,onclick:function(){c&&c.close(!1)}})),this.dragMask=b||(b=new g({className:\"edui-dialog-dragmask\",theme:f})),this.closeButton=new i({className:\"edui-dialog-closebutton\",title:e.closeDialog,theme:f,onclick:function(){e.close(!1)}}),this.fullscreen&&this.initResizeEvent(),this.buttons)for(var h=0;h<this.buttons.length;h++)this.buttons[h]instanceof i||(this.buttons[h]=new i(d.extend(this.buttons[h],{editor:this.editor},!0)))},initResizeEvent:function(){var a=this;e.on(window,\"resize\",function(){a._hidden||void 0===a._hidden||(a.__resizeTimer&&window.clearTimeout(a.__resizeTimer),a.__resizeTimer=window.setTimeout(function(){a.__resizeTimer=null;var b=a.getDom(),c=a.getDom(\"content\"),d=UE.ui.uiUtils.getClientRect(b),e=UE.ui.uiUtils.getClientRect(c),g=f.getViewportRect();c.style.width=g.width-d.width+e.width+\"px\",c.style.height=g.height-d.height+e.height+\"px\",b.style.width=g.width+\"px\",b.style.height=g.height+\"px\",a.fireEvent(\"resize\")},100))})},fitSize:function(){var a=this.getDom(\"body\"),b=this.mesureSize();return a.style.width=b.width+\"px\",a.style.height=b.height+\"px\",b},safeSetOffset:function(a){var b=this,c=b.getDom(),d=f.getViewportRect(),e=f.getClientRect(c),g=a.left;g+e.width>d.right&&(g=d.right-e.width);var h=a.top;h+e.height>d.bottom&&(h=d.bottom-e.height),c.style.left=Math.max(g,0)+\"px\",c.style.top=Math.max(h,0)+\"px\"},showAtCenter:function(){var a=f.getViewportRect();if(this.fullscreen){var b=this.getDom(),c=this.getDom(\"content\");b.style.display=\"block\";var d=UE.ui.uiUtils.getClientRect(b),g=UE.ui.uiUtils.getClientRect(c);b.style.left=\"-100000px\",c.style.width=a.width-d.width+g.width+\"px\",c.style.height=a.height-d.height+g.height+\"px\",b.style.width=a.width+\"px\",b.style.height=a.height+\"px\",b.style.left=0,this._originalContext={html:{overflowX:document.documentElement.style.overflowX,overflowY:document.documentElement.style.overflowY},body:{overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY}},document.documentElement.style.overflowX=\"hidden\",document.documentElement.style.overflowY=\"hidden\",document.body.style.overflowX=\"hidden\",document.body.style.overflowY=\"hidden\"}else{this.getDom().style.display=\"\";var h=this.fitSize(),i=0|this.getDom(\"titlebar\").offsetHeight,j=a.width/2-h.width/2,k=a.height/2-(h.height-i)/2-i,l=this.getDom();this.safeSetOffset({left:Math.max(0|j,0),top:Math.max(0|k,0)}),e.hasClass(l,\"edui-state-centered\")||(l.className+=\" edui-state-centered\")}this._show()},getContentHtml:function(){var a=\"\";return\"string\"==typeof this.content?a=this.content:this.iframeUrl&&(a='<span id=\"'+this.id+'_contmask\" class=\"dialogcontmask\"></span><iframe id=\"'+this.id+'_iframe\" class=\"%%-iframe\" height=\"100%\" width=\"100%\" frameborder=\"0\" src=\"'+this.iframeUrl+'\"></iframe>'),a},getHtmlTpl:function(){var a=\"\";if(this.buttons){for(var b=[],c=0;c<this.buttons.length;c++)b[c]=this.buttons[c].renderHtml();a='<div class=\"%%-foot\"><div id=\"##_buttons\" class=\"%%-buttons\">'+b.join(\"\")+\"</div></div>\"}return'<div id=\"##\" class=\"%%\"><div '+(this.fullscreen?'class=\"%%-wrap edui-dialog-fullscreen-flag\"':'class=\"%%\"')+'><div id=\"##_body\" class=\"%%-body\"><div class=\"%%-shadow\"></div><div id=\"##_titlebar\" class=\"%%-titlebar\"><div class=\"%%-draghandle\" onmousedown=\"$$._onTitlebarMouseDown(event, this);\"><span class=\"%%-caption\">'+(this.title||\"\")+\"</span></div>\"+this.closeButton.renderHtml()+'</div><div id=\"##_content\" class=\"%%-content\">'+(this.autoReset?\"\":this.getContentHtml())+\"</div>\"+a+\"</div></div></div>\"},postRender:function(){this.modalMask.getDom()||(this.modalMask.render(),this.modalMask.hide()),this.dragMask.getDom()||(this.dragMask.render(),this.dragMask.hide());var a=this;if(this.addListener(\"show\",function(){a.modalMask.show(this.getDom().style.zIndex-2)}),this.addListener(\"hide\",function(){a.modalMask.hide()}),this.buttons)for(var b=0;b<this.buttons.length;b++)this.buttons[b].postRender();e.on(window,\"resize\",function(){setTimeout(function(){a.isHidden()||a.safeSetOffset(f.getClientRect(a.getDom()))})}),this._hide()},mesureSize:function(){var a=this.getDom(\"body\"),b=f.getClientRect(this.getDom(\"content\")).width,c=a.style;return c.width=b,f.getClientRect(a)},_onTitlebarMouseDown:function(a,b){if(this.draggable){var c,d=(f.getViewportRect(),this);f.startDrag(a,{ondragstart:function(){c=f.getClientRect(d.getDom()),d.getDom(\"contmask\").style.visibility=\"visible\",d.dragMask.show(d.getDom().style.zIndex-1)},ondragmove:function(a,b){var e=c.left+a,f=c.top+b;d.safeSetOffset({left:e,top:f})},ondragstop:function(){d.getDom(\"contmask\").style.visibility=\"hidden\",e.removeClasses(d.getDom(),[\"edui-state-centered\"]),d.dragMask.hide()}})}},reset:function(){this.getDom(\"content\").innerHTML=this.getContentHtml(),this.fireEvent(\"dialogafterreset\")},_show:function(){this._hidden&&(this.getDom().style.display=\"\",this.editor.container.style.zIndex&&(this.getDom().style.zIndex=1*this.editor.container.style.zIndex+10),this._hidden=!1,this.fireEvent(\"show\"),baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=this.getDom().style.zIndex-4)},isHidden:function(){return this._hidden},_hide:function(){if(!this._hidden){var a=this.getDom();a.style.display=\"none\",a.style.zIndex=\"\",a.style.width=\"\",a.style.height=\"\",this._hidden=!0,this.fireEvent(\"hide\")}},open:function(){if(this.autoReset)try{this.reset()}catch(a){this.render(),this.open()}if(this.showAtCenter(),this.iframeUrl)try{this.getDom(\"iframe\").focus()}catch(b){}c=this},_onCloseButtonClick:function(a,b){this.close(!1)},close:function(a){if(this.fireEvent(\"close\",a)!==!1){this.fullscreen&&(document.documentElement.style.overflowX=this._originalContext.html.overflowX,document.documentElement.style.overflowY=this._originalContext.html.overflowY,document.body.style.overflowX=this._originalContext.body.overflowX,document.body.style.overflowY=this._originalContext.body.overflowY,delete this._originalContext),this._hide();var b=this.getDom(\"content\"),c=this.getDom(\"iframe\");if(b&&c){var d=c.contentDocument||c.contentWindow.document;d&&(d.body.innerHTML=\"\"),e.remove(b)}}}},d.inherits(j,h)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Menu,c=baidu.editor.ui.SplitButton,d=baidu.editor.ui.MenuButton=function(a){this.initOptions(a),this.initMenuButton()};d.prototype={initMenuButton:function(){var a=this;this.uiName=\"menubutton\",this.popup=new b({items:a.items,className:a.className,editor:a.editor}),this.popup.addListener(\"show\",function(){for(var b=this,c=0;c<b.items.length;c++)b.items[c].removeState(\"checked\"),b.items[c].value==a._value&&(b.items[c].addState(\"checked\"),this.value=a._value)}),this.initSplitButton()},setValue:function(a){this._value=a}},a.inherits(d,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Popup,c=baidu.editor.ui.SplitButton,d=baidu.editor.ui.MultiMenuPop=function(a){this.initOptions(a),this.initMultiMenu()};d.prototype={initMultiMenu:function(){var a=this;this.popup=new b({content:\"\",editor:a.editor,iframe_rendered:!1,onshow:function(){this.iframe_rendered||(this.iframe_rendered=!0,this.getDom(\"content\").innerHTML='<iframe id=\"'+a.id+'_iframe\" src=\"'+a.iframeUrl+'\" frameborder=\"0\"></iframe>',a.editor.container.style.zIndex&&(this.getDom().style.zIndex=1*a.editor.container.style.zIndex+1))}}),this.onbuttonclick=function(){this.showPopup()},this.initSplitButton()}},a.inherits(d,c)}(),function(){function a(a){var b=a.target||a.srcElement,c=g.findParent(b,function(a){return g.hasClass(a,\"edui-shortcutmenu\")||g.hasClass(a,\"edui-popup\")},!0);if(!c)for(var d,e=0;d=h[e++];)d.hide()}var b,c=baidu.editor.ui,d=c.UIBase,e=c.uiUtils,f=baidu.editor.utils,g=baidu.editor.dom.domUtils,h=[],i=!1,j=c.ShortCutMenu=function(a){this.initOptions(a),this.initShortCutMenu()};j.postHide=a,j.prototype={isHidden:!0,SPACE:5,initShortCutMenu:function(){this.items=this.items||[],this.initUIBase(),this.initItems(),this.initEvent(),h.push(this)},initEvent:function(){var a=this,c=a.editor.document;g.on(c,\"mousemove\",function(c){if(a.isHidden===!1){if(a.getSubMenuMark()||\"contextmenu\"==a.eventType)return;var d=!0,e=a.getDom(),f=e.offsetWidth,g=e.offsetHeight,h=f/2+a.SPACE,i=g/2,j=Math.abs(c.screenX-a.left),k=Math.abs(c.screenY-a.top);clearTimeout(b),b=setTimeout(function(){k>0&&k<i?a.setOpacity(e,\"1\"):k>i&&k<i+70?(a.setOpacity(e,\"0.5\"),d=!1):k>i+70&&k<i+140&&a.hide(),d&&j>0&&j<h?a.setOpacity(e,\"1\"):j>h&&j<h+70?a.setOpacity(e,\"0.5\"):j>h+70&&j<h+140&&a.hide()})}}),browser.chrome&&g.on(c,\"mouseout\",function(b){var c=b.relatedTarget||b.toElement;null!=c&&\"HTML\"!=c.tagName||a.hide()}),a.editor.addListener(\"afterhidepop\",function(){a.isHidden||(i=!0)})},initItems:function(){if(f.isArray(this.items))for(var a=0,b=this.items.length;a<b;a++){var d=this.items[a].toLowerCase();c[d]&&(this.items[a]=new c[d](this.editor),this.items[a].className+=\" edui-shortcutsubmenu \")}},setOpacity:function(a,b){browser.ie&&browser.version<9?a.style.filter=\"alpha(opacity = \"+100*parseFloat(b)+\");\":a.style.opacity=b},getSubMenuMark:function(){i=!1;for(var a,b=e.getFixedLayer(),c=g.getElementsByTagName(b,\"div\",function(a){return g.hasClass(a,\"edui-shortcutsubmenu edui-popup\")}),d=0;a=c[d++];)\"none\"!=a.style.display&&(i=!0);return i},show:function(a,b){function c(a){a.left<0&&(a.left=0),a.top<0&&(a.top=0),i.style.cssText=\"position:absolute;left:\"+a.left+\"px;top:\"+a.top+\"px;\"}function d(a){a.tagName||(a=a.getDom()),h.left=parseInt(a.style.left),h.top=parseInt(a.style.top),h.top-=i.offsetHeight+15,c(h)}var f=this,h={},i=this.getDom(),j=e.getFixedLayer();if(f.eventType=a.type,i.style.cssText=\"display:block;left:-9999px\",\"contextmenu\"==a.type&&b){var k=g.getElementsByTagName(j,\"div\",\"edui-contextmenu\")[0];k?d(k):f.editor.addListener(\"aftershowcontextmenu\",function(a,b){d(b)})}else h=e.getViewportOffsetByEvent(a),h.top-=i.offsetHeight+f.SPACE,h.left+=f.SPACE+20,c(h),f.setOpacity(i,.2);f.isHidden=!1,f.left=a.screenX+i.offsetWidth/2-f.SPACE,f.top=a.screenY-i.offsetHeight/2-f.SPACE,f.editor&&(i.style.zIndex=1*f.editor.container.style.zIndex+10,j.style.zIndex=i.style.zIndex-1)},hide:function(){this.getDom()&&(this.getDom().style.display=\"none\"),this.isHidden=!0},postRender:function(){if(f.isArray(this.items))for(var a,b=0;a=this.items[b++];)a.postRender()},getHtmlTpl:function(){var a;if(f.isArray(this.items)){a=[];for(var b=0;b<this.items.length;b++)a[b]=this.items[b].renderHtml();a=a.join(\"\")}else a=this.items;return'<div id=\"##\" class=\"%% edui-toolbar\" data-src=\"shortcutmenu\" onmousedown=\"return false;\" onselectstart=\"return false;\" >'+a+\"</div>\"}},f.inherits(j,d),g.on(document,\"mousedown\",function(b){a(b)}),g.on(window,\"scroll\",function(b){a(b)})}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.Breakline=function(a){this.initOptions(a),this.initSeparator()};c.prototype={uiName:\"Breakline\",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return\"<br/>\"}},a.inherits(c,b)}(),function(){var a=baidu.editor.utils,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.Message=function(a){this.initOptions(a),this.initMessage()};d.prototype={initMessage:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-message %%\"> <div id=\"##_closer\" class=\"edui-message-closer\">×</div> <div id=\"##_body\" class=\"edui-message-body edui-message-type-info\"> <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe> <div class=\"edui-shadow\"></div> <div id=\"##_content\" class=\"edui-message-content\">  </div> </div></div>'},reset:function(a){var b=this;a.keepshow||(clearTimeout(this.timer),b.timer=setTimeout(function(){b.hide()},a.timeout||4e3)),void 0!==a.content&&b.setContent(a.content),void 0!==a.type&&b.setType(a.type),b.show()},postRender:function(){var a=this,c=this.getDom(\"closer\");c&&b.on(c,\"click\",function(){a.hide()})},setContent:function(a){this.getDom(\"content\").innerHTML=a},setType:function(a){a=a||\"info\";var b=this.getDom(\"body\");b.className=b.className.replace(/edui-message-type-[\\w-]+/,\"edui-message-type-\"+a)},getContent:function(){return this.getDom(\"content\").innerHTML},getType:function(){var a=this.getDom(\"body\").match(/edui-message-type-([\\w-]+)/);return a?a[1]:\"\"},show:function(){this.getDom().style.display=\"block\"},hide:function(){var a=this.getDom();a&&(a.style.display=\"none\",a.parentNode&&a.parentNode.removeChild(a))}},a.inherits(d,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui,c=b.Dialog;b.buttons={},b.Dialog=function(a){var b=new c(a);return b.addListener(\"hide\",function(){if(b.editor){var a=b.editor;try{if(browser.gecko){var c=a.window.scrollY,d=a.window.scrollX;a.body.focus(),a.window.scrollTo(d,c)}else a.focus()}catch(e){}}}),b};for(var d,e={anchor:\"~/dialogs/anchor/anchor.html\",insertimage:\"~/dialogs/image/image.html\",link:\"~/dialogs/link/link.html\",spechars:\"~/dialogs/spechars/spechars.html\",searchreplace:\"~/dialogs/searchreplace/searchreplace.html\",map:\"~/dialogs/map/map.html\",gmap:\"~/dialogs/gmap/gmap.html\",insertvideo:\"~/dialogs/video/video.html\",help:\"~/dialogs/help/help.html\",preview:\"~/dialogs/preview/preview.html\",emotion:\"~/dialogs/emotion/emotion.html\",wordimage:\"~/dialogs/wordimage/wordimage.html\",attachment:\"~/dialogs/attachment/attachment.html\",insertframe:\"~/dialogs/insertframe/insertframe.html\",edittip:\"~/dialogs/table/edittip.html\",edittable:\"~/dialogs/table/edittable.html\",edittd:\"~/dialogs/table/edittd.html\",webapp:\"~/dialogs/webapp/webapp.html\",snapscreen:\"~/dialogs/snapscreen/snapscreen.html\",\nscrawl:\"~/dialogs/scrawl/scrawl.html\",music:\"~/dialogs/music/music.html\",template:\"~/dialogs/template/template.html\",background:\"~/dialogs/background/background.html\",charts:\"~/dialogs/charts/charts.html\"},f=[\"undo\",\"redo\",\"formatmatch\",\"bold\",\"italic\",\"underline\",\"fontborder\",\"touppercase\",\"tolowercase\",\"strikethrough\",\"subscript\",\"superscript\",\"source\",\"indent\",\"outdent\",\"blockquote\",\"pasteplain\",\"pagebreak\",\"selectall\",\"print\",\"horizontal\",\"removeformat\",\"time\",\"date\",\"unlink\",\"insertparagraphbeforetable\",\"insertrow\",\"insertcol\",\"mergeright\",\"mergedown\",\"deleterow\",\"deletecol\",\"splittorows\",\"splittocols\",\"splittocells\",\"mergecells\",\"deletetable\",\"drafts\"],g=0;d=f[g++];)d=d.toLowerCase(),b[d]=function(a){return function(c){var d=new b.Button({className:\"edui-for-\"+a,title:c.options.labelMap[a]||c.getLang(\"labelMap.\"+a)||\"\",onclick:function(){c.execCommand(a)},theme:c.options.theme,showText:!1});return b.buttons[a]=d,c.addListener(\"selectionchange\",function(b,e,f){var g=c.queryCommandState(a);g==-1?(d.setDisabled(!0),d.setChecked(!1)):f||(d.setDisabled(!1),d.setChecked(g))}),d}}(d);b.cleardoc=function(a){var c=new b.Button({className:\"edui-for-cleardoc\",title:a.options.labelMap.cleardoc||a.getLang(\"labelMap.cleardoc\")||\"\",theme:a.options.theme,onclick:function(){confirm(a.getLang(\"confirmClear\"))&&a.execCommand(\"cleardoc\")}});return b.buttons.cleardoc=c,a.addListener(\"selectionchange\",function(){c.setDisabled(a.queryCommandState(\"cleardoc\")==-1)}),c};var h={justify:[\"left\",\"right\",\"center\",\"justify\"],imagefloat:[\"none\",\"left\",\"center\",\"right\"],directionality:[\"ltr\",\"rtl\"]};for(var i in h)!function(a,c){for(var d,e=0;d=c[e++];)!function(c){b[a.replace(\"float\",\"\")+c]=function(d){var e=new b.Button({className:\"edui-for-\"+a.replace(\"float\",\"\")+c,title:d.options.labelMap[a.replace(\"float\",\"\")+c]||d.getLang(\"labelMap.\"+a.replace(\"float\",\"\")+c)||\"\",theme:d.options.theme,onclick:function(){d.execCommand(a,c)}});return b.buttons[a]=e,d.addListener(\"selectionchange\",function(b,f,g){e.setDisabled(d.queryCommandState(a)==-1),e.setChecked(d.queryCommandValue(a)==c&&!g)}),e}}(d)}(i,h[i]);for(var d,g=0;d=[\"backcolor\",\"forecolor\"][g++];)b[d]=function(a){return function(c){var d=new b.ColorButton({className:\"edui-for-\"+a,color:\"default\",title:c.options.labelMap[a]||c.getLang(\"labelMap.\"+a)||\"\",editor:c,onpickcolor:function(b,d){c.execCommand(a,d)},onpicknocolor:function(){c.execCommand(a,\"default\"),this.setColor(\"transparent\"),this.color=\"default\"},onbuttonclick:function(){c.execCommand(a,this.color)}});return b.buttons[a]=d,c.addListener(\"selectionchange\",function(){d.setDisabled(c.queryCommandState(a)==-1)}),d}}(d);var j={noOk:[\"searchreplace\",\"help\",\"spechars\",\"webapp\",\"preview\"],ok:[\"attachment\",\"anchor\",\"link\",\"insertimage\",\"map\",\"gmap\",\"insertframe\",\"wordimage\",\"insertvideo\",\"insertframe\",\"edittip\",\"edittable\",\"edittd\",\"scrawl\",\"template\",\"music\",\"background\",\"charts\"]};for(var i in j)!function(c,d){for(var f,g=0;f=d[g++];)browser.opera&&\"searchreplace\"===f||!function(d){b[d]=function(f,g,h){g=g||(f.options.iframeUrlMap||{})[d]||e[d],h=f.options.labelMap[d]||f.getLang(\"labelMap.\"+d)||\"\";var i;g&&(i=new b.Dialog(a.extend({iframeUrl:f.ui.mapUrl(g),editor:f,className:\"edui-for-\"+d,title:h,holdScroll:\"insertimage\"===d,fullscreen:/charts|preview/.test(d),closeDialog:f.getLang(\"closeDialog\")},\"ok\"==c?{buttons:[{className:\"edui-okbutton\",label:f.getLang(\"ok\"),editor:f,onclick:function(){i.close(!0)}},{className:\"edui-cancelbutton\",label:f.getLang(\"cancel\"),editor:f,onclick:function(){i.close(!1)}}]}:{})),f.ui._dialogs[d+\"Dialog\"]=i);var j=new b.Button({className:\"edui-for-\"+d,title:h,onclick:function(){if(i)switch(d){case\"wordimage\":var a=f.execCommand(\"wordimage\");a&&a.length&&(i.render(),i.open());break;case\"scrawl\":f.queryCommandState(\"scrawl\")!=-1&&(i.render(),i.open());break;default:i.render(),i.open()}},theme:f.options.theme,disabled:\"scrawl\"==d&&f.queryCommandState(\"scrawl\")==-1||\"charts\"==d});return b.buttons[d]=j,f.addListener(\"selectionchange\",function(){var a={edittable:1};if(!(d in a)){var b=f.queryCommandState(d);j.getDom()&&(j.setDisabled(b==-1),j.setChecked(b))}}),j}}(f.toLowerCase())}(i,j[i]);b.snapscreen=function(a,c,d){d=a.options.labelMap.snapscreen||a.getLang(\"labelMap.snapscreen\")||\"\";var f=new b.Button({className:\"edui-for-snapscreen\",title:d,onclick:function(){a.execCommand(\"snapscreen\")},theme:a.options.theme});if(b.buttons.snapscreen=f,c=c||(a.options.iframeUrlMap||{}).snapscreen||e.snapscreen){var g=new b.Dialog({iframeUrl:a.ui.mapUrl(c),editor:a,className:\"edui-for-snapscreen\",title:d,buttons:[{className:\"edui-okbutton\",label:a.getLang(\"ok\"),editor:a,onclick:function(){g.close(!0)}},{className:\"edui-cancelbutton\",label:a.getLang(\"cancel\"),editor:a,onclick:function(){g.close(!1)}}]});g.render(),a.ui._dialogs.snapscreenDialog=g}return a.addListener(\"selectionchange\",function(){f.setDisabled(a.queryCommandState(\"snapscreen\")==-1)}),f},b.insertcode=function(c,d,e){d=c.options.insertcode||[],e=c.options.labelMap.insertcode||c.getLang(\"labelMap.insertcode\")||\"\";var f=[];a.each(d,function(a,b){f.push({label:a,value:b,theme:c.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" >'+(this.label||\"\")+\"</div>\"}})});var g=new b.Combox({editor:c,items:f,onselect:function(a,b){c.execCommand(\"insertcode\",this.items[b].value)},onbuttonclick:function(){this.showPopup()},title:e,initValue:e,className:\"edui-for-insertcode\",indexByValue:function(a){if(a)for(var b,c=0;b=this.items[c];c++)if(b.value.indexOf(a)!=-1)return c;return-1}});return b.buttons.insertcode=g,c.addListener(\"selectionchange\",function(a,b,d){if(!d){var f=c.queryCommandState(\"insertcode\");if(f==-1)g.setDisabled(!0);else{g.setDisabled(!1);var h=c.queryCommandValue(\"insertcode\");if(!h)return void g.setValue(e);h&&(h=h.replace(/['\"]/g,\"\").split(\",\")[0]),g.setValue(h)}}}),g},b.fontfamily=function(c,d,e){if(d=c.options.fontfamily||[],e=c.options.labelMap.fontfamily||c.getLang(\"labelMap.fontfamily\")||\"\",d.length){for(var f,g=0,h=[];f=d[g];g++){var i=c.getLang(\"fontfamily\")[f.name]||\"\";!function(b,d){h.push({label:b,value:d,theme:c.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" style=\"font-family:'+a.unhtml(this.value)+'\">'+(this.label||\"\")+\"</div>\"}})}(f.label||i,f.val)}var j=new b.Combox({editor:c,items:h,onselect:function(a,b){c.execCommand(\"FontFamily\",this.items[b].value)},onbuttonclick:function(){this.showPopup()},title:e,initValue:e,className:\"edui-for-fontfamily\",indexByValue:function(a){if(a)for(var b,c=0;b=this.items[c];c++)if(b.value.indexOf(a)!=-1)return c;return-1}});return b.buttons.fontfamily=j,c.addListener(\"selectionchange\",function(a,b,d){if(!d){var e=c.queryCommandState(\"FontFamily\");if(e==-1)j.setDisabled(!0);else{j.setDisabled(!1);var f=c.queryCommandValue(\"FontFamily\");f&&(f=f.replace(/['\"]/g,\"\").split(\",\")[0]),j.setValue(f)}}}),j}},b.fontsize=function(a,c,d){if(d=a.options.labelMap.fontsize||a.getLang(\"labelMap.fontsize\")||\"\",c=c||a.options.fontsize||[],c.length){for(var e=[],f=0;f<c.length;f++){var g=c[f]+\"px\";e.push({label:g,value:g,theme:a.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" style=\"line-height:1;font-size:'+this.value+'\">'+(this.label||\"\")+\"</div>\"}})}var h=new b.Combox({editor:a,items:e,title:d,initValue:d,onselect:function(b,c){a.execCommand(\"FontSize\",this.items[c].value)},onbuttonclick:function(){this.showPopup()},className:\"edui-for-fontsize\"});return b.buttons.fontsize=h,a.addListener(\"selectionchange\",function(b,c,d){if(!d){var e=a.queryCommandState(\"FontSize\");e==-1?h.setDisabled(!0):(h.setDisabled(!1),h.setValue(a.queryCommandValue(\"FontSize\")))}}),h}},b.paragraph=function(c,d,e){if(e=c.options.labelMap.paragraph||c.getLang(\"labelMap.paragraph\")||\"\",d=c.options.paragraph||[],!a.isEmptyObject(d)){var f=[];for(var g in d)f.push({value:g,label:d[g]||c.getLang(\"paragraph\")[g],theme:c.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\"><span class=\"edui-for-'+this.value+'\">'+(this.label||\"\")+\"</span></div>\"}});var h=new b.Combox({editor:c,items:f,title:e,initValue:e,className:\"edui-for-paragraph\",onselect:function(a,b){c.execCommand(\"Paragraph\",this.items[b].value)},onbuttonclick:function(){this.showPopup()}});return b.buttons.paragraph=h,c.addListener(\"selectionchange\",function(a,b,d){if(!d){var e=c.queryCommandState(\"Paragraph\");if(e==-1)h.setDisabled(!0);else{h.setDisabled(!1);var f=c.queryCommandValue(\"Paragraph\"),g=h.indexByValue(f);g!=-1?h.setValue(f):h.setValue(h.initValue)}}}),h}},b.customstyle=function(a){var c=a.options.customstyle||[],d=a.options.labelMap.customstyle||a.getLang(\"labelMap.customstyle\")||\"\";if(c.length){for(var e,f=a.getLang(\"customstyle\"),g=0,h=[];e=c[g++];)!function(b){var c={};c.label=b.label?b.label:f[b.name],c.style=b.style,c.className=b.className,c.tag=b.tag,h.push({label:c.label,value:c,theme:a.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\"><'+c.tag+\" \"+(c.className?' class=\"'+c.className+'\"':\"\")+(c.style?' style=\"'+c.style+'\"':\"\")+\">\"+c.label+\"</\"+c.tag+\"></div>\"}})}(e);var i=new b.Combox({editor:a,items:h,title:d,initValue:d,className:\"edui-for-customstyle\",onselect:function(b,c){a.execCommand(\"customstyle\",this.items[c].value)},onbuttonclick:function(){this.showPopup()},indexByValue:function(a){for(var b,c=0;b=this.items[c++];)if(b.label==a)return c-1;return-1}});return b.buttons.customstyle=i,a.addListener(\"selectionchange\",function(b,c,d){if(!d){var e=a.queryCommandState(\"customstyle\");if(e==-1)i.setDisabled(!0);else{i.setDisabled(!1);var f=a.queryCommandValue(\"customstyle\"),g=i.indexByValue(f);g!=-1?i.setValue(f):i.setValue(i.initValue)}}}),i}},b.inserttable=function(a,c,d){d=a.options.labelMap.inserttable||a.getLang(\"labelMap.inserttable\")||\"\";var e=new b.TableButton({editor:a,title:d,className:\"edui-for-inserttable\",onpicktable:function(b,c,d){a.execCommand(\"InsertTable\",{numRows:d,numCols:c,border:1})},onbuttonclick:function(){this.showPopup()}});return b.buttons.inserttable=e,a.addListener(\"selectionchange\",function(){e.setDisabled(a.queryCommandState(\"inserttable\")==-1)}),e},b.lineheight=function(a){var c=a.options.lineheight||[];if(c.length){for(var d,e=0,f=[];d=c[e++];)f.push({label:d,value:d,theme:a.options.theme,onclick:function(){a.execCommand(\"lineheight\",this.value)}});var g=new b.MenuButton({editor:a,className:\"edui-for-lineheight\",title:a.options.labelMap.lineheight||a.getLang(\"labelMap.lineheight\")||\"\",items:f,onbuttonclick:function(){var b=a.queryCommandValue(\"LineHeight\")||this.value;a.execCommand(\"LineHeight\",b)}});return b.buttons.lineheight=g,a.addListener(\"selectionchange\",function(){var b=a.queryCommandState(\"LineHeight\");if(b==-1)g.setDisabled(!0);else{g.setDisabled(!1);var c=a.queryCommandValue(\"LineHeight\");c&&g.setValue((c+\"\").replace(/cm/,\"\")),g.setChecked(b)}}),g}};for(var k,l=[\"top\",\"bottom\"],m=0;k=l[m++];)!function(a){b[\"rowspacing\"+a]=function(c){var d=c.options[\"rowspacing\"+a]||[];if(!d.length)return null;for(var e,f=0,g=[];e=d[f++];)g.push({label:e,value:e,theme:c.options.theme,onclick:function(){c.execCommand(\"rowspacing\",this.value,a)}});var h=new b.MenuButton({editor:c,className:\"edui-for-rowspacing\"+a,title:c.options.labelMap[\"rowspacing\"+a]||c.getLang(\"labelMap.rowspacing\"+a)||\"\",items:g,onbuttonclick:function(){var b=c.queryCommandValue(\"rowspacing\",a)||this.value;c.execCommand(\"rowspacing\",b,a)}});return b.buttons[a]=h,c.addListener(\"selectionchange\",function(){var b=c.queryCommandState(\"rowspacing\",a);if(b==-1)h.setDisabled(!0);else{h.setDisabled(!1);var d=c.queryCommandValue(\"rowspacing\",a);d&&h.setValue((d+\"\").replace(/%/,\"\")),h.setChecked(b)}}),h}}(k);for(var n,o=[\"insertorderedlist\",\"insertunorderedlist\"],p=0;n=o[p++];)!function(a){b[a]=function(c){var d=c.options[a],e=function(){c.execCommand(a,this.value)},f=[];for(var g in d)f.push({label:d[g]||c.getLang()[a][g]||\"\",value:g,theme:c.options.theme,onclick:e});var h=new b.MenuButton({editor:c,className:\"edui-for-\"+a,title:c.getLang(\"labelMap.\"+a)||\"\",items:f,onbuttonclick:function(){var b=c.queryCommandValue(a)||this.value;c.execCommand(a,b)}});return b.buttons[a]=h,c.addListener(\"selectionchange\",function(){var b=c.queryCommandState(a);if(b==-1)h.setDisabled(!0);else{h.setDisabled(!1);var d=c.queryCommandValue(a);h.setValue(d),h.setChecked(b)}}),h}}(n);b.fullscreen=function(a,c){c=a.options.labelMap.fullscreen||a.getLang(\"labelMap.fullscreen\")||\"\";var d=new b.Button({className:\"edui-for-fullscreen\",title:c,theme:a.options.theme,onclick:function(){a.ui&&a.ui.setFullScreen(!a.ui.isFullScreen()),this.setChecked(a.ui.isFullScreen())}});return b.buttons.fullscreen=d,a.addListener(\"selectionchange\",function(){var b=a.queryCommandState(\"fullscreen\");d.setDisabled(b==-1),d.setChecked(a.ui.isFullScreen())}),d},b.emotion=function(a,c){var d=\"emotion\",f=new b.MultiMenuPop({title:a.options.labelMap[d]||a.getLang(\"labelMap.\"+d)||\"\",editor:a,className:\"edui-for-\"+d,iframeUrl:a.ui.mapUrl(c||(a.options.iframeUrlMap||{})[d]||e[d])});return b.buttons[d]=f,a.addListener(\"selectionchange\",function(){f.setDisabled(a.queryCommandState(d)==-1)}),f},b.autotypeset=function(a){var c=new b.AutoTypeSetButton({editor:a,title:a.options.labelMap.autotypeset||a.getLang(\"labelMap.autotypeset\")||\"\",className:\"edui-for-autotypeset\",onbuttonclick:function(){a.execCommand(\"autotypeset\")}});return b.buttons.autotypeset=c,a.addListener(\"selectionchange\",function(){c.setDisabled(a.queryCommandState(\"autotypeset\")==-1)}),c},b.simpleupload=function(a){var c=\"simpleupload\",d=new b.Button({className:\"edui-for-\"+c,title:a.options.labelMap[c]||a.getLang(\"labelMap.\"+c)||\"\",onclick:function(){},theme:a.options.theme,showText:!1});return b.buttons[c]=d,a.addListener(\"ready\",function(){var b=d.getDom(\"body\"),c=b.children[0];a.fireEvent(\"simpleuploadbtnready\",c)}),a.addListener(\"selectionchange\",function(b,e,f){var g=a.queryCommandState(c);g==-1?(d.setDisabled(!0),d.setChecked(!1)):f||(d.setDisabled(!1),d.setChecked(g))}),d}}(),function(){function a(a){this.initOptions(a),this.initEditorUI()}var b=baidu.editor.utils,c=baidu.editor.ui.uiUtils,d=baidu.editor.ui.UIBase,e=baidu.editor.dom.domUtils,f=[];a.prototype={uiName:\"editor\",initEditorUI:function(){function a(a,b){a.setOpt({wordCount:!0,maximumWords:1e4,wordCountMsg:a.options.wordCountMsg||a.getLang(\"wordCountMsg\"),wordOverFlowMsg:a.options.wordOverFlowMsg||a.getLang(\"wordOverFlowMsg\")});var c=a.options,d=c.maximumWords,e=c.wordCountMsg,f=c.wordOverFlowMsg,g=b.getDom(\"wordcount\");if(c.wordCount){var h=a.getContentLength(!0);h>d?(g.innerHTML=f,a.fireEvent(\"wordcountoverflow\")):g.innerHTML=e.replace(\"{#leave}\",d-h).replace(\"{#count}\",h)}}this.editor.ui=this,this._dialogs={},this.initUIBase(),this._initToolbars();var b=this.editor,c=this;b.addListener(\"ready\",function(){function d(){a(b,c),e.un(b.document,\"click\",arguments.callee)}b.getDialog=function(a){return b.ui._dialogs[a+\"Dialog\"]},e.on(b.window,\"scroll\",function(a){baidu.editor.ui.Popup.postHide(a)}),b.ui._actualFrameWidth=b.options.initialFrameWidth,UE.browser.ie&&6===UE.browser.version&&b.container.ownerDocument.execCommand(\"BackgroundImageCache\",!1,!0),b.options.elementPathEnabled&&(b.ui.getDom(\"elementpath\").innerHTML='<div class=\"edui-editor-breadcrumb\">'+b.getLang(\"elementPathTip\")+\":</div>\"),b.options.wordCount&&(e.on(b.document,\"click\",d),b.ui.getDom(\"wordcount\").innerHTML=b.getLang(\"wordCountTip\")),b.ui._scale(),b.options.scaleEnabled?(b.autoHeightEnabled&&b.disableAutoHeight(),c.enableScale()):c.disableScale(),b.options.elementPathEnabled||b.options.wordCount||b.options.scaleEnabled||(b.ui.getDom(\"elementpath\").style.display=\"none\",b.ui.getDom(\"wordcount\").style.display=\"none\",b.ui.getDom(\"scale\").style.display=\"none\"),b.selection.isFocus()&&b.fireEvent(\"selectionchange\",!1,!0)}),b.addListener(\"mousedown\",function(a,b){var c=b.target||b.srcElement;baidu.editor.ui.Popup.postHide(b,c),baidu.editor.ui.ShortCutMenu.postHide(b)}),b.addListener(\"delcells\",function(){UE.ui.edittip&&new UE.ui.edittip(b),b.getDialog(\"edittip\").open()});var d,f,g=!1;b.addListener(\"afterpaste\",function(){b.queryCommandState(\"pasteplain\")||(baidu.editor.ui.PastePicker&&(d=new baidu.editor.ui.Popup({content:new baidu.editor.ui.PastePicker({editor:b}),editor:b,className:\"edui-wordpastepop\"}),d.render()),g=!0)}),b.addListener(\"afterinserthtml\",function(){clearTimeout(f),f=setTimeout(function(){if(d&&(g||b.ui._isTransfer)){if(d.isHidden()){var a=e.createElement(b.document,\"span\",{style:\"line-height:0px;\",innerHTML:\"\\ufeff\"}),c=b.selection.getRange();c.insertNode(a);var f=getDomNode(a,\"firstChild\",\"previousSibling\");f&&d.showAnchor(3==f.nodeType?f.parentNode:f),e.remove(a)}else d.show();delete b.ui._isTransfer,g=!1}},200)}),b.addListener(\"contextmenu\",function(a,b){baidu.editor.ui.Popup.postHide(b)}),b.addListener(\"keydown\",function(a,b){d&&d.dispose(b);var c=b.keyCode||b.which;b.altKey&&90==c&&UE.ui.buttons.fullscreen.onclick()}),b.addListener(\"wordcount\",function(b){a(this,c)}),b.addListener(\"selectionchange\",function(){b.options.elementPathEnabled&&c[(b.queryCommandState(\"elementpath\")==-1?\"dis\":\"en\")+\"ableElementPath\"](),b.options.scaleEnabled&&c[(b.queryCommandState(\"scale\")==-1?\"dis\":\"en\")+\"ableScale\"]()});var h=new baidu.editor.ui.Popup({editor:b,content:\"\",className:\"edui-bubble\",_onEditButtonClick:function(){this.hide(),b.ui._dialogs.linkDialog.open()},_onImgEditButtonClick:function(a){this.hide(),b.ui._dialogs[a]&&b.ui._dialogs[a].open()},_onImgSetFloat:function(a){this.hide(),b.execCommand(\"imagefloat\",a)},_setIframeAlign:function(a){var b=h.anchorEl,c=b.cloneNode(!0);switch(a){case-2:c.setAttribute(\"align\",\"\");break;case-1:c.setAttribute(\"align\",\"left\");break;case 1:c.setAttribute(\"align\",\"right\")}b.parentNode.insertBefore(c,b),e.remove(b),h.anchorEl=c,h.showAnchor(h.anchorEl)},_updateIframe:function(){var a=b._iframe=h.anchorEl;e.hasClass(a,\"ueditor_baidumap\")?(b.selection.getRange().selectNode(a).select(),b.ui._dialogs.mapDialog.open(),h.hide()):(b.ui._dialogs.insertframeDialog.open(),h.hide())},_onRemoveButtonClick:function(a){b.execCommand(a),this.hide()},queryAutoHide:function(a){return a&&a.ownerDocument==b.document&&(\"img\"==a.tagName.toLowerCase()||e.findParentByTagName(a,\"a\",!0))?a!==h.anchorEl:baidu.editor.ui.Popup.prototype.queryAutoHide.call(this,a)}});h.render(),b.options.imagePopup&&(b.addListener(\"mouseover\",function(a,c){c=c||window.event;var d=c.target||c.srcElement;if(b.ui._dialogs.insertframeDialog&&/iframe/gi.test(d.tagName)){var e=h.formatHtml(\"<nobr>\"+b.getLang(\"property\")+': <span onclick=$$._setIframeAlign(-2) class=\"edui-clickable\">'+b.getLang(\"default\")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(-1) class=\"edui-clickable\">'+b.getLang(\"justifyleft\")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(1) class=\"edui-clickable\">'+b.getLang(\"justifyright\")+'</span>&nbsp;&nbsp; <span onclick=\"$$._updateIframe( this);\" class=\"edui-clickable\">'+b.getLang(\"modify\")+\"</span></nobr>\");e?(h.getDom(\"content\").innerHTML=e,h.anchorEl=d,h.showAnchor(h.anchorEl)):h.hide()}}),b.addListener(\"selectionchange\",function(a,c){if(c){var d=\"\",f=\"\",g=b.selection.getRange().getClosedNode(),i=b.ui._dialogs;if(g&&\"IMG\"==g.tagName){var j=\"insertimageDialog\";if(g.className.indexOf(\"edui-faked-video\")==-1&&g.className.indexOf(\"edui-upload-video\")==-1||(j=\"insertvideoDialog\"),g.className.indexOf(\"edui-faked-webapp\")!=-1&&(j=\"webappDialog\"),g.src.indexOf(\"http://api.map.baidu.com\")!=-1&&(j=\"mapDialog\"),g.className.indexOf(\"edui-faked-music\")!=-1&&(j=\"musicDialog\"),g.src.indexOf(\"http://maps.google.com/maps/api/staticmap\")!=-1&&(j=\"gmapDialog\"),g.getAttribute(\"anchorname\")&&(j=\"anchorDialog\",d=h.formatHtml(\"<nobr>\"+b.getLang(\"property\")+': <span onclick=$$._onImgEditButtonClick(\"anchorDialog\") class=\"edui-clickable\">'+b.getLang(\"modify\")+\"</span>&nbsp;&nbsp;<span onclick=$$._onRemoveButtonClick('anchor') class=\\\"edui-clickable\\\">\"+b.getLang(\"delete\")+\"</span></nobr>\")),g.getAttribute(\"word_img\")&&(b.word_img=[g.getAttribute(\"word_img\")],j=\"wordimageDialog\"),(e.hasClass(g,\"loadingclass\")||e.hasClass(g,\"loaderrorclass\"))&&(j=\"\"),!i[j])return;f=\"<nobr>\"+b.getLang(\"property\")+': <span onclick=$$._onImgSetFloat(\"none\") class=\"edui-clickable\">'+b.getLang(\"default\")+'</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat(\"left\") class=\"edui-clickable\">'+b.getLang(\"justifyleft\")+'</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat(\"right\") class=\"edui-clickable\">'+b.getLang(\"justifyright\")+'</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat(\"center\") class=\"edui-clickable\">'+b.getLang(\"justifycenter\")+\"</span>&nbsp;&nbsp;<span onclick=\\\"$$._onImgEditButtonClick('\"+j+'\\');\" class=\"edui-clickable\">'+b.getLang(\"modify\")+\"</span></nobr>\",!d&&(d=h.formatHtml(f))}if(b.ui._dialogs.linkDialog){var k,l=b.queryCommandValue(\"link\");if(l&&(k=l.getAttribute(\"_href\")||l.getAttribute(\"href\",2))){var m=k;k.length>30&&(m=k.substring(0,20)+\"...\"),d&&(d+='<div style=\"height:5px;\"></div>'),d+=h.formatHtml(\"<nobr>\"+b.getLang(\"anthorMsg\")+': <a target=\"_blank\" href=\"'+k+'\" title=\"'+k+'\" >'+m+'</a> <span class=\"edui-clickable\" onclick=\"$$._onEditButtonClick();\">'+b.getLang(\"modify\")+'</span> <span class=\"edui-clickable\" onclick=\"$$._onRemoveButtonClick(\\'unlink\\');\"> '+b.getLang(\"clear\")+\"</span></nobr>\"),h.showAnchor(l)}}d?(h.getDom(\"content\").innerHTML=d,h.anchorEl=g||l,h.showAnchor(h.anchorEl)):h.hide()}}))},_initToolbars:function(){for(var a=this.editor,c=this.toolbars||[],d=[],e=[],f=0;f<c.length;f++){for(var g=c[f],h=new baidu.editor.ui.Toolbar({theme:a.options.theme}),i=0;i<g.length;i++){var j=g[i],k=null;if(\"string\"==typeof j){j=j.toLowerCase(),\"|\"==j&&(j=\"Separator\"),\"||\"==j&&(j=\"Breakline\");var l=baidu.editor.ui[j];if(l)if(b.isFunction(l))k=new baidu.editor.ui[j](a);else{if(l.id&&l.id!=a.key)continue;var m=l.execFn.call(a,a,j);if(m){if(void 0===l.index){h.add(m);continue}e.push({index:l.index,itemUI:m})}}if(\"fullscreen\"==j){d&&d[0]?d[0].items.splice(0,0,k):k&&h.items.splice(0,0,k);continue}}else k=j;k&&k.id&&h.add(k)}d[f]=h}b.each(e,function(a){h.add(a.itemUI,a.index)}),this.toolbars=d},getHtmlTpl:function(){return'<div id=\"##\" class=\"%%\"><div id=\"##_toolbarbox\" class=\"%%-toolbarbox\">'+(this.toolbars.length?'<div id=\"##_toolbarboxouter\" class=\"%%-toolbarboxouter\"><div class=\"%%-toolbarboxinner\">'+this.renderToolbarBoxHtml()+\"</div></div>\":\"\")+'<div id=\"##_toolbarmsg\" class=\"%%-toolbarmsg\" style=\"display:none;\"><div id = \"##_upload_dialog\" class=\"%%-toolbarmsg-upload\" onclick=\"$$.showWordImageDialog();\">'+this.editor.getLang(\"clickToUpload\")+'</div><div class=\"%%-toolbarmsg-close\" onclick=\"$$.hideToolbarMsg();\">x</div><div id=\"##_toolbarmsg_label\" class=\"%%-toolbarmsg-label\"></div><div style=\"height:0;overflow:hidden;clear:both;\"></div></div><div id=\"##_message_holder\" class=\"%%-messageholder\"></div></div><div id=\"##_iframeholder\" class=\"%%-iframeholder\"></div><div id=\"##_bottombar\" class=\"%%-bottomContainer\"><table><tr><td id=\"##_elementpath\" class=\"%%-bottombar\"></td><td id=\"##_wordcount\" class=\"%%-wordcount\"></td><td id=\"##_scale\" class=\"%%-scale\"><div class=\"%%-icon\"></div></td></tr></table></div><div id=\"##_scalelayer\"></div></div>'},showWordImageDialog:function(){this._dialogs.wordimageDialog.open()},renderToolbarBoxHtml:function(){for(var a=[],b=0;b<this.toolbars.length;b++)a.push(this.toolbars[b].renderHtml());return a.join(\"\")},setFullScreen:function(a){var b=this.editor,c=b.container.parentNode.parentNode;if(this._fullscreen!=a){if(this._fullscreen=a,this.editor.fireEvent(\"beforefullscreenchange\",a),baidu.editor.browser.gecko)var d=b.selection.getRange().createBookmark();if(a){for(;\"BODY\"!=c.tagName;){var e=baidu.editor.dom.domUtils.getComputedStyle(c,\"position\");f.push(e),c.style.position=\"static\",c=c.parentNode}this._bakHtmlOverflow=document.documentElement.style.overflow,this._bakBodyOverflow=document.body.style.overflow,this._bakAutoHeight=this.editor.autoHeightEnabled,this._bakScrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop),this._bakEditorContaninerWidth=b.iframe.parentNode.offsetWidth,this._bakAutoHeight&&(b.autoHeightEnabled=!1,this.editor.disableAutoHeight()),document.documentElement.style.overflow=\"hidden\",window.scrollTo(0,window.scrollY),this._bakCssText=this.getDom().style.cssText,this._bakCssText1=this.getDom(\"iframeholder\").style.cssText,b.iframe.parentNode.style.width=\"\",this._updateFullScreen()}else{for(;\"BODY\"!=c.tagName;)c.style.position=f.shift(),c=c.parentNode;this.getDom().style.cssText=this._bakCssText,this.getDom(\"iframeholder\").style.cssText=this._bakCssText1,this._bakAutoHeight&&(b.autoHeightEnabled=!0,this.editor.enableAutoHeight()),document.documentElement.style.overflow=this._bakHtmlOverflow,document.body.style.overflow=this._bakBodyOverflow,b.iframe.parentNode.style.width=this._bakEditorContaninerWidth+\"px\",window.scrollTo(0,this._bakScrollTop)}if(browser.gecko&&\"true\"===b.body.contentEditable){var g=document.createElement(\"input\");document.body.appendChild(g),b.body.contentEditable=!1,setTimeout(function(){g.focus(),setTimeout(function(){b.body.contentEditable=!0,b.fireEvent(\"fullscreenchanged\",a),b.selection.getRange().moveToBookmark(d).select(!0),baidu.editor.dom.domUtils.remove(g),a&&window.scroll(0,0)},0)},0)}\"true\"===b.body.contentEditable&&(this.editor.fireEvent(\"fullscreenchanged\",a),this.triggerLayout())}},_updateFullScreen:function(){if(this._fullscreen){var a=c.getViewportRect();if(this.getDom().style.cssText=\"border:0;position:absolute;left:0;top:\"+(this.editor.options.topOffset||0)+\"px;width:\"+a.width+\"px;height:\"+a.height+\"px;z-index:\"+(1*this.getDom().style.zIndex+100),c.setViewportOffset(this.getDom(),{left:0,top:this.editor.options.topOffset||0}),this.editor.setHeight(a.height-this.getDom(\"toolbarbox\").offsetHeight-this.getDom(\"bottombar\").offsetHeight-(this.editor.options.topOffset||0),!0),browser.gecko)try{window.onresize()}catch(b){}}},_updateElementPath:function(){var a,b=this.getDom(\"elementpath\");if(this.elementPathEnabled&&(a=this.editor.queryCommandValue(\"elementpath\"))){for(var c,d=[],e=0;c=a[e];e++)d[e]=this.formatHtml('<span unselectable=\"on\" onclick=\"$$.editor.execCommand(&quot;elementpath&quot;, &quot;'+e+'&quot;);\">'+c+\"</span>\");b.innerHTML='<div class=\"edui-editor-breadcrumb\" onmousedown=\"return false;\">'+this.editor.getLang(\"elementPathTip\")+\": \"+d.join(\" &gt; \")+\"</div>\"}else b.style.display=\"none\"},disableElementPath:function(){var a=this.getDom(\"elementpath\");a.innerHTML=\"\",a.style.display=\"none\",this.elementPathEnabled=!1},enableElementPath:function(){var a=this.getDom(\"elementpath\");a.style.display=\"\",this.elementPathEnabled=!0,this._updateElementPath()},_scale:function(){function a(){o=e.getXY(h),p||(p=g.options.minFrameHeight+j.offsetHeight+k.offsetHeight),m.style.cssText=\"position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:\"+h.offsetWidth+\"px;height:\"+h.offsetHeight+\"px;z-index:\"+(g.options.zIndex+1),e.on(f,\"mousemove\",b),e.on(i,\"mouseup\",c),e.on(f,\"mouseup\",c)}function b(a){d();var b=a||window.event;r=b.pageX||f.documentElement.scrollLeft+b.clientX,s=b.pageY||f.documentElement.scrollTop+b.clientY,t=r-o.x,u=s-o.y,t>=q&&(n=!0,m.style.width=t+\"px\"),u>=p&&(n=!0,m.style.height=u+\"px\")}function c(){n&&(n=!1,g.ui._actualFrameWidth=m.offsetWidth-2,h.style.width=g.ui._actualFrameWidth+\"px\",g.setHeight(m.offsetHeight-k.offsetHeight-j.offsetHeight-2,!0)),m&&(m.style.display=\"none\"),d(),e.un(f,\"mousemove\",b),e.un(i,\"mouseup\",c),e.un(f,\"mouseup\",c)}function d(){browser.ie?f.selection.clear():window.getSelection().removeAllRanges()}var f=document,g=this.editor,h=g.container,i=g.document,j=this.getDom(\"toolbarbox\"),k=this.getDom(\"bottombar\"),l=this.getDom(\"scale\"),m=this.getDom(\"scalelayer\"),n=!1,o=null,p=0,q=g.options.minFrameWidth,r=0,s=0,t=0,u=0,v=this;this.editor.addListener(\"fullscreenchanged\",function(a,b){if(b)v.disableScale();else if(v.editor.options.scaleEnabled){v.enableScale();var c=v.editor.document.createElement(\"span\");v.editor.body.appendChild(c),v.editor.body.style.height=Math.max(e.getXY(c).y,v.editor.iframe.offsetHeight-20)+\"px\",e.remove(c)}}),this.enableScale=function(){1!=g.queryCommandState(\"source\")&&(l.style.display=\"\",this.scaleEnabled=!0,e.on(l,\"mousedown\",a))},this.disableScale=function(){l.style.display=\"none\",this.scaleEnabled=!1,e.un(l,\"mousedown\",a)}},isFullScreen:function(){return this._fullscreen},postRender:function(){d.prototype.postRender.call(this);for(var a=0;a<this.toolbars.length;a++)this.toolbars[a].postRender();var b,c=this,e=baidu.editor.dom.domUtils,f=function(){clearTimeout(b),b=setTimeout(function(){c._updateFullScreen()})};e.on(window,\"resize\",f),c.addListener(\"destroy\",function(){e.un(window,\"resize\",f),clearTimeout(b)})},showToolbarMsg:function(a,b){if(this.getDom(\"toolbarmsg_label\").innerHTML=a,this.getDom(\"toolbarmsg\").style.display=\"\",!b){var c=this.getDom(\"upload_dialog\");c.style.display=\"none\"}},hideToolbarMsg:function(){this.getDom(\"toolbarmsg\").style.display=\"none\"},mapUrl:function(a){return a?a.replace(\"~/\",this.editor.options.UEDITOR_HOME_URL||\"\"):\"\"},triggerLayout:function(){var a=this.getDom();\"1\"==a.style.zoom?a.style.zoom=\"100%\":a.style.zoom=\"1\"}},b.inherits(a,baidu.editor.ui.UIBase);var g={};UE.ui.Editor=function(c){var d=new UE.Editor(c);d.options.editor=d,b.loadFile(document,{href:d.options.themePath+d.options.theme+\"/css/ueditor.css\",tag:\"link\",type:\"text/css\",rel:\"stylesheet\"});var f=d.render;return d.render=function(c){c.constructor===String&&(d.key=c,g[c]=d),b.domReady(function(){function b(){if(d.setOpt({labelMap:d.options.labelMap||d.getLang(\"labelMap\")}),new a(d.options),c&&(c.constructor===String&&(c=document.getElementById(c)),c&&c.getAttribute(\"name\")&&(d.options.textarea=c.getAttribute(\"name\")),c&&/script|textarea/gi.test(c.tagName))){var b=document.createElement(\"div\");c.parentNode.insertBefore(b,c);var g=c.value||c.innerHTML;d.options.initialContent=/^[\\t\\r\\n ]*$/.test(g)?d.options.initialContent:g.replace(/>[\\n\\r\\t]+([ ]{4})+/g,\">\").replace(/[\\n\\r\\t]+([ ]{4})+</g,\"<\").replace(/>[\\n\\r\\t]+</g,\"><\"),c.className&&(b.className=c.className),c.style.cssText&&(b.style.cssText=c.style.cssText),/textarea/i.test(c.tagName)?(d.textarea=c,d.textarea.style.display=\"none\"):c.parentNode.removeChild(c),c.id&&(b.id=c.id,e.removeAttributes(c,\"id\")),c=b,c.innerHTML=\"\"}e.addClass(c,\"edui-\"+d.options.theme),d.ui.render(c);var h=d.options;d.container=d.ui.getDom();for(var i,j=e.findParents(c,!0),k=[],l=0;i=j[l];l++)k[l]=i.style.display,i.style.display=\"block\";if(h.initialFrameWidth)h.minFrameWidth=h.initialFrameWidth;else{h.minFrameWidth=h.initialFrameWidth=c.offsetWidth;var m=c.style.width;/%$/.test(m)&&(h.initialFrameWidth=m)}h.initialFrameHeight?h.minFrameHeight=h.initialFrameHeight:h.initialFrameHeight=h.minFrameHeight=c.offsetHeight;for(var i,l=0;i=j[l];l++)i.style.display=k[l];c.style.height&&(c.style.height=\"\"),d.container.style.width=h.initialFrameWidth+(/%$/.test(h.initialFrameWidth)?\"\":\"px\"),d.container.style.zIndex=h.zIndex,f.call(d,d.ui.getDom(\"iframeholder\")),d.fireEvent(\"afteruiready\")}d.langIsReady?b():d.addListener(\"langReady\",b)})},d},UE.getEditor=function(a,b){var c=g[a];return c||(c=g[a]=new UE.ui.Editor(b),c.render(a)),c},UE.delEditor=function(a){var b;(b=g[a])&&(b.key&&b.destroy(),delete g[a])},UE.registerUI=function(a,c,d,e){b.each(a.split(/\\s+/),function(a){baidu.editor.ui[a]={id:e,execFn:c,index:d}})}}(),UE.registerUI(\"message\",function(a){function b(){if(c&&g.ui){var a=g.ui.getDom(\"toolbarbox\");a&&(c.style.top=a.offsetHeight+3+\"px\"),c.style.zIndex=Math.max(g.options.zIndex,g.iframe.style.zIndex)+1}}var c,d=baidu.editor.ui,e=d.Message,f=[],g=a;g.setOpt(\"enableMessageShow\",!0),g.getOpt(\"enableMessageShow\")!==!1&&(g.addListener(\"ready\",function(){c=document.getElementById(g.ui.id+\"_message_holder\"),b(),setTimeout(function(){b()},500)}),g.addListener(\"showmessage\",function(a,d){d=utils.isString(d)?{content:d}:d;var h=new e({timeout:d.timeout,type:d.type,\ncontent:d.content,keepshow:d.keepshow,editor:g}),i=d.id||\"msg_\"+(+new Date).toString(36);return h.render(c),f[i]=h,h.reset(d),b(),i}),g.addListener(\"updatemessage\",function(a,b,d){d=utils.isString(d)?{content:d}:d;var e=f[b];e.render(c),e&&e.reset(d)}),g.addListener(\"hidemessage\",function(a,b){var c=f[b];c&&c.hide()}))}),UE.registerUI(\"autosave\",function(a){var b=null,c=null;a.on(\"afterautosave\",function(){clearTimeout(b),b=setTimeout(function(){c&&a.trigger(\"hidemessage\",c),c=a.trigger(\"showmessage\",{content:a.getLang(\"autosave.success\"),timeout:2e3})},2e3)})})}();"
  },
  {
    "path": "web/console/public/UEditor/ueditor.config.js",
    "content": "/**\n * ueditor完整配置项\n * 可以在这里配置整个编辑器的特性\n */\n/**************************提示********************************\n * 所有被注释的配置项均为UEditor默认值。\n * 修改默认配置请首先确保已经完全明确该参数的真实用途。\n * 主要有两种修改方案，一种是取消此处注释，然后修改成对应参数；另一种是在实例化编辑器时传入对应参数。\n * 当升级编辑器时，可直接使用旧版配置文件替换新版配置文件,不用担心旧版配置文件中因缺少新功能所需的参数而导致脚本报错。\n **************************提示********************************/\n\n;(function () {\n  /**\n   * 编辑器资源文件根路径。它所表示的含义是：以编辑器实例化页面为当前路径，指向编辑器资源文件（即dialog等文件夹）的路径。\n   * 鉴于很多同学在使用编辑器的时候出现的种种路径问题，此处强烈建议大家使用\"相对于网站根目录的相对路径\"进行配置。\n   * \"相对于网站根目录的相对路径\"也就是以斜杠开头的形如\"/myProject/ueditor/\"这样的路径。\n   * 如果站点中有多个不在同一层级的页面需要实例化编辑器，且引用了同一UEditor的时候，此处的URL可能不适用于每个页面的编辑器。\n   * 因此，UEditor提供了针对不同页面的编辑器可单独配置的根路径，具体来说，在需要实例化编辑器的页面最顶部写上如下代码即可。当然，需要令此处的URL等于对应的配置。\n   * window.UEDITOR_HOME_URL = \"/xxxx/xxxx/\";\n   */\n  // window.UEDITOR_HOME_URL =\n  //   window.UEDITOR_HOME_URL || '/public/static/libs/UEditor/'\n  var URL = window.UEDITOR_HOME_URL || getUEBasePath()\n\n  /**\n   * 配置项主体。注意，此处所有涉及到路径的配置别遗漏URL变量。\n   */\n  window.UEDITOR_CONFIG = {\n    //为编辑器实例添加一个路径，这个不能被注释\n    UEDITOR_HOME_URL: URL,\n\n    // 服务器统一请求接口路径\n    // serverUrl: URL + 'php/controller.php',\n    serverUrl: 'https://ibosapp.oss-cn-hangzhou.aliyuncs.com/',\n\n    //工具栏上的所有的功能按钮和下拉框，可以在new编辑器的实例时选择自己需要的重新定义\n    toolbars: [\n      [\n        // 'fullscreen',\n        'source',\n        '|',\n        'undo',\n        'redo',\n        '|',\n        'bold',\n        'italic',\n        'underline',\n        'fontborder',\n        'strikethrough',\n        'superscript',\n        'subscript',\n        'removeformat',\n        'formatmatch',\n        'autotypeset',\n        'blockquote',\n        'pasteplain',\n        '|',\n        'forecolor',\n        'backcolor',\n        'insertorderedlist',\n        'insertunorderedlist',\n        'selectall',\n        'cleardoc',\n        '|',\n        'rowspacingtop',\n        'rowspacingbottom',\n        'lineheight',\n        '|',\n        'customstyle',\n        'paragraph',\n        'fontfamily',\n        'fontsize',\n        '|',\n        'directionalityltr',\n        'directionalityrtl',\n        'indent',\n        '|',\n        'justifyleft',\n        'justifycenter',\n        'justifyright',\n        'justifyjustify',\n        '|',\n        'touppercase',\n        'tolowercase',\n        '|',\n        'link',\n        'unlink',\n        'insertimage',\n        'insertvideo',\n        // 'simpleupload',\n        // 'music',\n        // 'attachment',\n        // 'anchor',\n        '|',\n        'imagenone',\n        'imageleft',\n        'imageright',\n        'imagecenter',\n        // '|',\n        // 'insertframe',\n        // 'pagebreak',\n        // 'template',\n        // 'background',\n        // 'insertcode',\n        // 'webapp',\n        // 'emotion',\n        // 'scrawl',\n        // 'map',\n        // 'gmap',\n        '|',\n        'horizontal',\n        'date',\n        'time',\n        'spechars',\n        // 'snapscreen',\n        // 'wordimage',\n        '|',\n        'inserttable',\n        'deletetable',\n        'insertparagraphbeforetable',\n        'insertrow',\n        'deleterow',\n        'insertcol',\n        'deletecol',\n        'mergecells',\n        'mergeright',\n        'mergedown',\n        'splittocells',\n        'splittorows',\n        'splittocols',\n        // 'charts',\n        // '|',\n        // 'print',\n        // 'searchreplace',\n        // 'help',\n        // 'preview',\n        // 'drafts',\n      ],\n    ],\n    //当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置，否则以配置值为准\n    //,labelMap:{\n    //    'anchor':'', 'undo':''\n    //}\n\n    //语言配置项,默认是zh-cn。有需要的话也可以使用如下这样的方式来自动多语言切换，当然，前提条件是lang文件夹下存在对应的语言文件：\n    //lang值也可以通过自动获取 (navigator.language||navigator.browserLanguage ||navigator.userLanguage).toLowerCase()\n    //,lang:\"zh-cn\"\n    //,langPath:URL +\"lang/\"\n\n    //主题配置项,默认是default。有需要的话也可以使用如下这样的方式来自动多主题切换，当然，前提条件是themes文件夹下存在对应的主题文件：\n    //现有如下皮肤:default\n    //,theme:'default'\n    //,themePath:URL +\"themes/\"\n\n    zIndex: 999, //编辑器层级的基数,默认是900\n\n    //针对getAllHtml方法，会在对应的head标签中增加该编码设置。\n    //,charset:\"utf-8\"\n\n    //若实例化编辑器的页面手动修改的domain，此处需要设置为true\n    //,customDomain:false\n\n    //常用配置项目\n    //,isShow : true    //默认显示编辑器\n\n    //,textarea:'editorValue' // 提交表单时，服务器获取编辑器提交内容的所用的参数，多实例时可以给容器name属性，会将name给定的值最为每个实例的键值，不用每次实例化的时候都设置这个值\n\n    //,initialContent:'欢迎使用ueditor!'    //初始化编辑器的内容,也可以通过textarea/script给值，看官网例子\n\n    //,autoClearinitialContent:true //是否自动清除编辑器初始内容，注意：如果focus属性设置为true,这个也为真，那么编辑器一上来就会触发导致初始化的内容看不到了\n\n    //,focus:false //初始化时，是否让编辑器获得焦点true或false\n\n    //如果自定义，最好给p标签如下的行高，要不输入中文时，会有跳动感\n    //,initialStyle:'p{line-height:1em}'//编辑器层级的基数,可以用来改变字体等\n\n    //,iframeJsUrl: '' //给编辑区域的iframe引入一个js文件\n    //,iframeCssUrl: URL + '/themes/iframe.css' //给编辑区域的iframe引入一个css文件\n\n    //indentValue\n    //首行缩进距离,默认是2em\n    //,indentValue:'2em'\n\n    //,initialFrameWidth:1000  //初始化编辑器宽度,默认1000\n    //,initialFrameHeight:320  //初始化编辑器高度,默认320\n\n    //,readonly : false //编辑器初始化结束后,编辑区域是否是只读的，默认是false\n\n    //,autoClearEmptyNode : true //getContent时，是否删除空的inlineElement节点（包括嵌套的情况）\n\n    //启用自动保存\n    //,enableAutoSave: true\n    //自动保存间隔时间， 单位ms\n    //,saveInterval: 500\n\n    //启用拖放上传\n    //,enableDragUpload: true\n    //启用粘贴上传\n    //,enablePasteUpload: true\n\n    //启用图片拉伸缩放\n    //,imageScaleEnabled: true\n\n    //,fullscreen : false //是否开启初始化时即全屏，默认关闭\n\n    //,imagePopup:true      //图片操作的浮层开关，默认打开\n\n    //,autoSyncData:true //自动同步编辑器要提交的数据\n    //,emotionLocalization:false //是否开启表情本地化，默认关闭。若要开启请确保emotion文件夹下包含官网提供的images表情文件夹\n\n    //粘贴只保留标签，去除标签所有属性\n    //,retainOnlyLabelPasted: false\n\n    //,pasteplain:false  //是否默认为纯文本粘贴。false为不使用纯文本粘贴，true为使用纯文本粘贴\n    //纯文本粘贴模式下的过滤规则\n    //'filterTxtRules' : function(){\n    //    function transP(node){\n    //        node.tagName = 'p';\n    //        node.setStyle();\n    //    }\n    //    return {\n    //        //直接删除及其字节点内容\n    //        '-' : 'script style object iframe embed input select',\n    //        'p': {$:{}},\n    //        'br':{$:{}},\n    //        'div':{'$':{}},\n    //        'li':{'$':{}},\n    //        'caption':transP,\n    //        'th':transP,\n    //        'tr':transP,\n    //        'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP,\n    //        'td':function(node){\n    //            //没有内容的td直接删掉\n    //            var txt = !!node.innerText();\n    //            if(txt){\n    //                node.parentNode.insertAfter(UE.uNode.createText(' &nbsp; &nbsp;'),node);\n    //            }\n    //            node.parentNode.removeChild(node,node.innerText())\n    //        }\n    //    }\n    //}()\n\n    //,allHtmlEnabled:false //提交到后台的数据是否包含整个html字符串\n\n    //insertorderedlist\n    //有序列表的下拉配置,值留空时支持多语言自动识别，若配置值，则以此值为准\n    //,'insertorderedlist':{\n    //      //自定的样式\n    //        'num':'1,2,3...',\n    //        'num1':'1),2),3)...',\n    //        'num2':'(1),(2),(3)...',\n    //        'cn':'一,二,三....',\n    //        'cn1':'一),二),三)....',\n    //        'cn2':'(一),(二),(三)....',\n    //     //系统自带\n    //     'decimal' : '' ,         //'1,2,3...'\n    //     'lower-alpha' : '' ,    // 'a,b,c...'\n    //     'lower-roman' : '' ,    //'i,ii,iii...'\n    //     'upper-alpha' : '' , lang   //'A,B,C'\n    //     'upper-roman' : ''      //'I,II,III...'\n    //}\n\n    //insertunorderedlist\n    //无序列表的下拉配置，值留空时支持多语言自动识别，若配置值，则以此值为准\n    //,insertunorderedlist : { //自定的样式\n    //    'dash' :'— 破折号', //-破折号\n    //    'dot':' 。 小圆圈', //系统自带\n    //    'circle' : '',  // '○ 小圆圈'\n    //    'disc' : '',    // '● 小圆点'\n    //    'square' : ''   //'■ 小方块'\n    //}\n    //,listDefaultPaddingLeft : '30'//默认的左边缩进的基数倍\n    //,listiconpath : 'http://bs.baidu.com/listicon/'//自定义标号的路径\n    //,maxListLevel : 3 //限制可以tab的级数, 设置-1为不限制\n\n    //,autoTransWordToList:false  //禁止word中粘贴进来的列表自动变成列表标签\n\n    //fontfamily\n    //字体设置 label留空支持多语言自动切换，若配置，则以配置值为准\n    //,'fontfamily':[\n    //    { label:'',name:'songti',val:'宋体,SimSun'},\n    //    { label:'',name:'kaiti',val:'楷体,楷体_GB2312, SimKai'},\n    //    { label:'',name:'yahei',val:'微软雅黑,Microsoft YaHei'},\n    //    { label:'',name:'heiti',val:'黑体, SimHei'},\n    //    { label:'',name:'lishu',val:'隶书, SimLi'},\n    //    { label:'',name:'andaleMono',val:'andale mono'},\n    //    { label:'',name:'arial',val:'arial, helvetica,sans-serif'},\n    //    { label:'',name:'arialBlack',val:'arial black,avant garde'},\n    //    { label:'',name:'comicSansMs',val:'comic sans ms'},\n    //    { label:'',name:'impact',val:'impact,chicago'},\n    //    { label:'',name:'timesNewRoman',val:'times new roman'}\n    //]\n\n    //fontsize\n    //字号\n    //,'fontsize':[10, 11, 12, 14, 16, 18, 20, 24, 36]\n\n    //paragraph\n    //段落格式 值留空时支持多语言自动识别，若配置，则以配置值为准\n    //,'paragraph':{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''}\n\n    //rowspacingtop\n    //段间距 值和显示的名字相同\n    //,'rowspacingtop':['5', '10', '15', '20', '25']\n\n    //rowspacingBottom\n    //段间距 值和显示的名字相同\n    //,'rowspacingbottom':['5', '10', '15', '20', '25']\n\n    //lineheight\n    //行内间距 值和显示的名字相同\n    //,'lineheight':['1', '1.5','1.75','2', '3', '4', '5']\n\n    //customstyle\n    //自定义样式，不支持国际化，此处配置值即可最后显示值\n    //block的元素是依据设置段落的逻辑设置的，inline的元素依据BIU的逻辑设置\n    //尽量使用一些常用的标签\n    //参数说明\n    //tag 使用的标签名字\n    //label 显示的名字也是用来标识不同类型的标识符，注意这个值每个要不同，\n    //style 添加的样式\n    //每一个对象就是一个自定义的样式\n    //,'customstyle':[\n    //    {tag:'h1', name:'tc', label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;'},\n    //    {tag:'h1', name:'tl',label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;margin:0 0 10px 0;'},\n    //    {tag:'span',name:'im', label:'', style:'font-style:italic;font-weight:bold'},\n    //    {tag:'span',name:'hi', label:'', style:'font-style:italic;font-weight:bold;color:rgb(51, 153, 204)'}\n    //]\n\n    //打开右键菜单功能\n    //,enableContextMenu: true\n    //右键菜单的内容，可以参考plugins/contextmenu.js里边的默认菜单的例子，label留空支持国际化，否则以此配置为准\n    //,contextMenu:[\n    //    {\n    //        label:'',       //显示的名称\n    //        cmdName:'selectall',//执行的command命令，当点击这个右键菜单时\n    //        //exec可选，有了exec就会在点击时执行这个function，优先级高于cmdName\n    //        exec:function () {\n    //            //this是当前编辑器的实例\n    //            //this.ui._dialogs['inserttableDialog'].open();\n    //        }\n    //    }\n    //]\n\n    //快捷菜单\n    //,shortcutMenu:[\"fontfamily\", \"fontsize\", \"bold\", \"italic\", \"underline\", \"forecolor\", \"backcolor\", \"insertorderedlist\", \"insertunorderedlist\"]\n\n    //elementPathEnabled\n    //是否启用元素路径，默认是显示\n    //,elementPathEnabled : true\n\n    //wordCount\n    //,wordCount:true          //是否开启字数统计\n    //,maximumWords:10000       //允许的最大字符数\n    //字数统计提示，{#count}代表当前字数，{#leave}代表还可以输入多少字符数,留空支持多语言自动切换，否则按此配置显示\n    //,wordCountMsg:''   //当前已输入 {#count} 个字符，您还可以输入{#leave} 个字符\n    //超出字数限制提示  留空支持多语言自动切换，否则按此配置显示\n    //,wordOverFlowMsg:''    //<span style=\"color:red;\">你输入的字符个数已经超出最大允许值，服务器可能会拒绝保存！</span>\n\n    //tab\n    //点击tab键时移动的距离,tabSize倍数，tabNode什么字符做为单位\n    //,tabSize:4\n    //,tabNode:'&nbsp;'\n\n    //removeFormat\n    //清除格式时可以删除的标签和属性\n    //removeForamtTags标签\n    //,removeFormatTags:'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var'\n    //removeFormatAttributes属性\n    //,removeFormatAttributes:'class,style,lang,width,height,align,hspace,valign'\n\n    //undo\n    //可以最多回退的次数,默认20\n    //,maxUndoCount:20\n    //当输入的字符数超过该值时，保存一次现场\n    //,maxInputCount:1\n\n    //autoHeightEnabled\n    // 是否自动长高,默认true\n    //,autoHeightEnabled:true\n\n    //scaleEnabled\n    //是否可以拉伸长高,默认true(当开启时，自动长高失效)\n    //,scaleEnabled:false\n    //,minFrameWidth:800    //编辑器拖动时最小宽度,默认800\n    //,minFrameHeight:220  //编辑器拖动时最小高度,默认220\n\n    //autoFloatEnabled\n    //是否保持toolbar的位置不动,默认true\n    //,autoFloatEnabled:true\n    //浮动时工具栏距离浏览器顶部的高度，用于某些具有固定头部的页面\n    //,topOffset:30\n    //编辑器底部距离工具栏高度(如果参数大于等于编辑器高度，则设置无效)\n    //,toolbarTopOffset:400\n\n    //设置远程图片是否抓取到本地保存\n    //,catchRemoteImageEnable: true //设置是否抓取远程图片\n\n    //pageBreakTag\n    //分页标识符,默认是_ueditor_page_break_tag_\n    //,pageBreakTag:'_ueditor_page_break_tag_'\n\n    //autotypeset\n    //自动排版参数\n    //,autotypeset: {\n    //    mergeEmptyline: true,           //合并空行\n    //    removeClass: true,              //去掉冗余的class\n    //    removeEmptyline: false,         //去掉空行\n    //    textAlign:\"left\",               //段落的排版方式，可以是 left,right,center,justify 去掉这个属性表示不执行排版\n    //    imageBlockLine: 'center',       //图片的浮动方式，独占一行剧中,左右浮动，默认: center,left,right,none 去掉这个属性表示不执行排版\n    //    pasteFilter: false,             //根据规则过滤没事粘贴进来的内容\n    //    clearFontSize: false,           //去掉所有的内嵌字号，使用编辑器默认的字号\n    //    clearFontFamily: false,         //去掉所有的内嵌字体，使用编辑器默认的字体\n    //    removeEmptyNode: false,         // 去掉空节点\n    //    //可以去掉的标签\n    //    removeTagNames: {标签名字:1},\n    //    indent: false,                  // 行首缩进\n    //    indentValue : '2em',            //行首缩进的大小\n    //    bdc2sb: false,\n    //    tobdc: false\n    //}\n\n    //tableDragable\n    //表格是否可以拖拽\n    //,tableDragable: true\n\n    //sourceEditor\n    //源码的查看方式,codemirror 是代码高亮，textarea是文本框,默认是codemirror\n    //注意默认codemirror只能在ie8+和非ie中使用\n    //,sourceEditor:\"codemirror\"\n    //如果sourceEditor是codemirror，还用配置一下两个参数\n    //codeMirrorJsUrl js加载的路径，默认是 URL + \"third-party/codemirror/codemirror.js\"\n    //,codeMirrorJsUrl:URL + \"third-party/codemirror/codemirror.js\"\n    //codeMirrorCssUrl css加载的路径，默认是 URL + \"third-party/codemirror/codemirror.css\"\n    //,codeMirrorCssUrl:URL + \"third-party/codemirror/codemirror.css\"\n    //编辑器初始化完成后是否进入源码模式，默认为否。\n    //,sourceEditorFirst:false\n\n    //iframeUrlMap\n    //dialog内容的路径 ～会被替换成URL,垓属性一旦打开，将覆盖所有的dialog的默认路径\n    //,iframeUrlMap:{\n    //    'anchor':'~/dialogs/anchor/anchor.html',\n    //}\n\n    //allowLinkProtocol 允许的链接地址，有这些前缀的链接地址不会自动添加http\n    //, allowLinkProtocols: ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:', 'git:', 'svn:']\n\n    //webAppKey 百度应用的APIkey，每个站长必须首先去百度官网注册一个key后方能正常使用app功能，注册介绍，http://app.baidu.com/static/cms/getapikey.html\n    //, webAppKey: \"\"\n\n    //默认过滤规则相关配置项目\n    //,disabledTableInTable:true  //禁止表格嵌套\n    //,allowDivTransToP:true      //允许进入编辑器的div标签自动变成p标签\n    //,rgb2Hex:true               //默认产出的数据中的color自动从rgb格式变成16进制格式\n    // xss 过滤是否开启,inserthtml等操作\n    // xssFilterRules: true,\n    //input xss过滤\n    // inputXssFilter: true,\n    //output xss过滤\n    // outputXssFilter: true,\n    // xss过滤白名单 名单来源: https://raw.githubusercontent.com/leizongmin/js-xss/master/lib/default.js\n    // whiteList: {\n    //   a: ['target', 'href', 'title', 'class', 'style'],\n    //   abbr: ['title', 'class', 'style'],\n    //   address: ['class', 'style'],\n    //   area: ['shape', 'coords', 'href', 'alt'],\n    //   article: [],\n    //   aside: [],\n    //   audio: [\n    //     'autoplay',\n    //     'controls',\n    //     'loop',\n    //     'preload',\n    //     'src',\n    //     'class',\n    //     'style',\n    //   ],\n    //   b: ['class', 'style'],\n    //   bdi: ['dir'],\n    //   bdo: ['dir'],\n    //   big: [],\n    //   blockquote: ['cite', 'class', 'style'],\n    //   br: [],\n    //   caption: ['class', 'style'],\n    //   center: [],\n    //   cite: [],\n    //   code: ['class', 'style'],\n    //   col: ['align', 'valign', 'span', 'width', 'class', 'style'],\n    //   colgroup: ['align', 'valign', 'span', 'width', 'class', 'style'],\n    //   dd: ['class', 'style'],\n    //   del: ['datetime'],\n    //   details: ['open'],\n    //   div: ['class', 'style'],\n    //   dl: ['class', 'style'],\n    //   dt: ['class', 'style'],\n    //   em: ['class', 'style'],\n    //   font: ['color', 'size', 'face'],\n    //   footer: [],\n    //   h1: ['class', 'style'],\n    //   h2: ['class', 'style'],\n    //   h3: ['class', 'style'],\n    //   h4: ['class', 'style'],\n    //   h5: ['class', 'style'],\n    //   h6: ['class', 'style'],\n    //   header: [],\n    //   hr: [],\n    //   i: ['class', 'style'],\n    //   img: [\n    //     'src',\n    //     'alt',\n    //     'title',\n    //     'width',\n    //     'height',\n    //     'id',\n    //     '_src',\n    //     'loadingclass',\n    //     'class',\n    //     'data-latex',\n    //   ],\n    //   ins: ['datetime'],\n    //   li: ['class', 'style'],\n    //   mark: [],\n    //   nav: [],\n    //   ol: ['class', 'style'],\n    //   p: ['class', 'style'],\n    //   pre: ['class', 'style'],\n    //   s: [],\n    //   section: ['class', 'style'],\n    //   small: [],\n    //   span: ['class', 'style'],\n    //   sub: ['class', 'style'],\n    //   sup: ['class', 'style'],\n    //   strong: ['class', 'style'],\n    //   table: ['width', 'border', 'align', 'valign', 'class', 'style'],\n    //   tbody: ['align', 'valign', 'class', 'style'],\n    //   td: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],\n    //   tfoot: ['align', 'valign', 'class', 'style'],\n    //   th: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],\n    //   thead: ['align', 'valign', 'class', 'style'],\n    //   tr: ['rowspan', 'align', 'valign', 'class', 'style'],\n    //   tt: [],\n    //   u: [],\n    //   ul: ['class', 'style'],\n    //   video: [\n    //     'autoplay',\n    //     'controls',\n    //     'loop',\n    //     'preload',\n    //     'src',\n    //     'height',\n    //     'width',\n    //     'class',\n    //     'style',\n    //   ],\n    // },\n\n    /* 上传图片配置项 */\n    imageActionName: 'uploadimage' /* 执行上传图片的action名称 */,\n    imageFieldName: 'file' /* 提交的图片表单名称 */,\n    imageMaxSize: 10 * 1024 * 1024 /* 上传大小限制，单位B */,\n    imageAllowFiles: [\n      '.png',\n      '.jpg',\n      '.jpeg',\n      '.gif',\n      '.bmp',\n    ] /* 上传图片格式显示 */,\n    imageCompressEnable: true /* 是否压缩图片,默认是true */,\n    imageCompressBorder: 1600 /* 图片压缩最长边限制 */,\n    imageInsertAlign: 'none' /* 插入的图片浮动方式 */,\n    // imageUrlPrefix: 'http://192.168.1.6:9090/' /* 图片访问路径前缀 */,\n    imageUrlPrefix: '' /* 图片访问路径前缀 */,\n    imagePathFormat:\n      '/img/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */\n    /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */\n    /* {time} 会替换成时间戳 */\n    /* {yyyy} 会替换成四位年份 */\n    /* {yy} 会替换成两位年份 */\n    /* {mm} 会替换成两位月份 */\n    /* {dd} 会替换成两位日期 */\n    /* {hh} 会替换成两位小时 */\n    /* {ii} 会替换成两位分钟 */\n    /* {ss} 会替换成两位秒 */\n    /* 非法字符 \\ : * ? \" < > | */\n    /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */\n\n    /* 涂鸦图片上传配置项 */\n    scrawlActionName: 'uploadscrawl' /* 执行上传涂鸦的action名称 */,\n    scrawlFieldName: 'file' /* 提交的图片表单名称 */,\n    scrawlPathFormat:\n      '/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    scrawlMaxSize: 2048000 /* 上传大小限制，单位B */,\n    scrawlUrlPrefix: '' /* 图片访问路径前缀 */,\n    scrawlInsertAlign: 'none',\n\n    /* 截图工具上传 */\n    snapscreenActionName: 'uploadimage' /* 执行上传截图的action名称 */,\n    snapscreenPathFormat:\n      '/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    snapscreenUrlPrefix: '' /* 图片访问路径前缀 */,\n    snapscreenInsertAlign: 'none' /* 插入的图片浮动方式 */,\n\n    /* 抓取远程图片配置 */\n    catcherLocalDomain: ['127.0.0.1', 'localhost', 'img.baidu.com'],\n    catcherActionName: 'catchimage' /* 执行抓取远程图片的action名称 */,\n    catcherFieldName: 'source' /* 提交的图片列表表单名称 */,\n    catcherPathFormat:\n      '/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    catcherUrlPrefix: '' /* 图片访问路径前缀 */,\n    catcherMaxSize: 2048000 /* 上传大小限制，单位B */,\n    catcherAllowFiles: [\n      '.png',\n      '.jpg',\n      '.jpeg',\n      '.gif',\n      '.bmp',\n    ] /* 抓取图片格式显示 */,\n\n    /* 上传视频配置 */\n    videoActionName: 'uploadvideo' /* 执行上传视频的action名称 */,\n    videoFieldName: 'file' /* 提交的视频表单名称 */,\n    videoPathFormat:\n      '/ueditor/php/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    videoUrlPrefix: '' /* 视频访问路径前缀 */,\n    videoMaxSize: 10 * 1024 * 1024 /* 上传大小限制，单位B，默认100MB */,\n    videoAllowFiles: [\n      '.flv',\n      '.swf',\n      '.mkv',\n      '.avi',\n      '.rm',\n      '.rmvb',\n      '.mpeg',\n      '.mpg',\n      '.ogg',\n      '.ogv',\n      '.mov',\n      '.wmv',\n      '.mp4',\n      '.webm',\n      '.mp3',\n      '.wav',\n      '.mid',\n    ] /* 上传视频格式显示 */,\n\n    /* 上传文件配置 */\n    fileActionName: 'uploadfile' /* controller里,执行上传视频的action名称 */,\n    fileFieldName: 'file' /* 提交的文件表单名称 */,\n    filePathFormat:\n      '/ueditor/php/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}' /* 上传保存路径,可以自定义保存路径和文件名格式 */,\n    fileUrlPrefix: '' /* 文件访问路径前缀 */,\n    fileMaxSize: 50 * 1024 * 1024 /* 上传大小限制，单位B，默认50MB */,\n    fileAllowFiles: [\n      '.png',\n      '.jpg',\n      '.jpeg',\n      '.gif',\n      '.bmp',\n      '.flv',\n      '.swf',\n      '.mkv',\n      '.avi',\n      '.rm',\n      '.rmvb',\n      '.mpeg',\n      '.mpg',\n      '.ogg',\n      '.ogv',\n      '.mov',\n      '.wmv',\n      '.mp4',\n      '.webm',\n      '.mp3',\n      '.wav',\n      '.mid',\n      '.rar',\n      '.zip',\n      '.tar',\n      '.gz',\n      '.7z',\n      '.bz2',\n      '.cab',\n      '.iso',\n      '.doc',\n      '.docx',\n      '.xls',\n      '.xlsx',\n      '.ppt',\n      '.pptx',\n      '.pdf',\n      '.txt',\n      '.md',\n      '.xml',\n    ] /* 上传文件格式显示 */,\n\n    /* 列出指定目录下的图片 */\n    imageManagerActionName: 'listimage' /* 执行图片管理的action名称 */,\n    imageManagerListPath:\n      '/ueditor/php/upload/image/' /* 指定要列出图片的目录 */,\n    imageManagerListSize: 20 /* 每次列出文件数量 */,\n    imageManagerUrlPrefix: '' /* 图片访问路径前缀 */,\n    imageManagerInsertAlign: 'none' /* 插入的图片浮动方式 */,\n    imageManagerAllowFiles: [\n      '.png',\n      '.jpg',\n      '.jpeg',\n      '.gif',\n      '.bmp',\n    ] /* 列出的文件类型 */,\n\n    /* 列出指定目录下的文件 */\n    fileManagerActionName: 'listfile' /* 执行文件管理的action名称 */,\n    fileManagerListPath: '/ueditor/php/upload/file/' /* 指定要列出文件的目录 */,\n    fileManagerUrlPrefix: '' /* 文件访问路径前缀 */,\n    fileManagerListSize: 20 /* 每次列出文件数量 */,\n    fileManagerAllowFiles: [\n      '.png',\n      '.jpg',\n      '.jpeg',\n      '.gif',\n      '.bmp',\n      '.flv',\n      '.swf',\n      '.mkv',\n      '.avi',\n      '.rm',\n      '.rmvb',\n      '.mpeg',\n      '.mpg',\n      '.ogg',\n      '.ogv',\n      '.mov',\n      '.wmv',\n      '.mp4',\n      '.webm',\n      '.mp3',\n      '.wav',\n      '.mid',\n      '.rar',\n      '.zip',\n      '.tar',\n      '.gz',\n      '.7z',\n      '.bz2',\n      '.cab',\n      '.iso',\n      '.doc',\n      '.docx',\n      '.xls',\n      '.xlsx',\n      '.ppt',\n      '.pptx',\n      '.pdf',\n      '.txt',\n      '.md',\n      '.xml',\n    ] /* 列出的文件类型 */,\n  }\n\n  function getUEBasePath(docUrl, confUrl) {\n    return getBasePath(\n      docUrl || self.document.URL || self.location.href,\n      confUrl || getConfigFilePath()\n    )\n  }\n\n  function getConfigFilePath() {\n    var configPath = document.getElementsByTagName('script')\n\n    return configPath[configPath.length - 1].src\n  }\n\n  function getBasePath(docUrl, confUrl) {\n    var basePath = confUrl\n\n    if (/^(\\/|\\\\\\\\)/.test(confUrl)) {\n      basePath =\n        /^.+?\\w(\\/|\\\\\\\\)/.exec(docUrl)[0] + confUrl.replace(/^(\\/|\\\\\\\\)/, '')\n    } else if (!/^[a-z]+:/i.test(confUrl)) {\n      docUrl = docUrl\n        .split('#')[0]\n        .split('?')[0]\n        .replace(/[^\\\\\\/]+$/, '')\n\n      basePath = docUrl + '' + confUrl\n    }\n\n    return optimizationPath(basePath)\n  }\n\n  function optimizationPath(path) {\n    var protocol = /^[a-z]+:\\/\\//.exec(path)[0],\n      tmp = null,\n      res = []\n\n    path = path.replace(protocol, '').split('?')[0].split('#')[0]\n\n    path = path.replace(/\\\\/g, '/').split(/\\//)\n\n    path[path.length - 1] = ''\n\n    while (path.length) {\n      if ((tmp = path.shift()) === '..') {\n        res.pop()\n      } else if (tmp !== '.') {\n        res.push(tmp)\n      }\n    }\n\n    return protocol + res.join('/')\n  }\n\n  window.UE = {\n    getUEBasePath: getUEBasePath,\n  }\n})()"
  },
  {
    "path": "web/console/public/UEditor/ueditor.parse.js",
    "content": "/*!\n * ueditor parse\n * version: 2.0.0\n * build: Wed Jan 17 2024 13:54:20 GMT+0800 (中国标准时间)\n */\n\n(function(){\n\n(function() {\n  UE = window.UE || {};\n  var isIE = !!window.ActiveXObject;\n  //定义utils工具\n  var utils = {\n    removeLastbs: function(url) {\n      return url.replace(/\\/$/, \"\");\n    },\n    extend: function(t, s) {\n      var a = arguments,\n        notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false,\n        len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length;\n      for (var i = 1; i < len; i++) {\n        var x = a[i];\n        for (var k in x) {\n          if (!notCover || !t.hasOwnProperty(k)) {\n            t[k] = x[k];\n          }\n        }\n      }\n      return t;\n    },\n    isIE: isIE,\n    cssRule: isIE\n      ? function(key, style, doc) {\n          var indexList, index;\n          doc = doc || document;\n          if (doc.indexList) {\n            indexList = doc.indexList;\n          } else {\n            indexList = doc.indexList = {};\n          }\n          var sheetStyle;\n          if (!indexList[key]) {\n            if (style === undefined) {\n              return \"\";\n            }\n            sheetStyle = doc.createStyleSheet(\n              \"\",\n              (index = doc.styleSheets.length)\n            );\n            indexList[key] = index;\n          } else {\n            sheetStyle = doc.styleSheets[indexList[key]];\n          }\n          if (style === undefined) {\n            return sheetStyle.cssText;\n          }\n          sheetStyle.cssText = sheetStyle.cssText + \"\\n\" + (style || \"\");\n        }\n      : function(key, style, doc) {\n          doc = doc || document;\n          var head = doc.getElementsByTagName(\"head\")[0],\n            node;\n          if (!(node = doc.getElementById(key))) {\n            if (style === undefined) {\n              return \"\";\n            }\n            node = doc.createElement(\"style\");\n            node.id = key;\n            head.appendChild(node);\n          }\n          if (style === undefined) {\n            return node.innerHTML;\n          }\n          if (style !== \"\") {\n            node.innerHTML = node.innerHTML + \"\\n\" + style;\n          } else {\n            head.removeChild(node);\n          }\n        },\n    domReady: function(onready) {\n      var doc = window.document;\n      if (doc.readyState === \"complete\") {\n        onready();\n      } else {\n        if (isIE) {\n          (function() {\n            if (doc.isReady) return;\n            try {\n              doc.documentElement.doScroll(\"left\");\n            } catch (error) {\n              setTimeout(arguments.callee, 0);\n              return;\n            }\n            onready();\n          })();\n          window.attachEvent(\"onload\", function() {\n            onready();\n          });\n        } else {\n          doc.addEventListener(\n            \"DOMContentLoaded\",\n            function() {\n              doc.removeEventListener(\n                \"DOMContentLoaded\",\n                arguments.callee,\n                false\n              );\n              onready();\n            },\n            false\n          );\n          window.addEventListener(\n            \"load\",\n            function() {\n              onready();\n            },\n            false\n          );\n        }\n      }\n    },\n    each: function(obj, iterator, context) {\n      if (obj == null) return;\n      if (obj.length === +obj.length) {\n        for (var i = 0, l = obj.length; i < l; i++) {\n          if (iterator.call(context, obj[i], i, obj) === false) return false;\n        }\n      } else {\n        for (var key in obj) {\n          if (obj.hasOwnProperty(key)) {\n            if (iterator.call(context, obj[key], key, obj) === false)\n              return false;\n          }\n        }\n      }\n    },\n    inArray: function(arr, item) {\n      var index = -1;\n      this.each(arr, function(v, i) {\n        if (v === item) {\n          index = i;\n          return false;\n        }\n      });\n      return index;\n    },\n    pushItem: function(arr, item) {\n      if (this.inArray(arr, item) == -1) {\n        arr.push(item);\n      }\n    },\n    trim: function(str) {\n      return str.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g, \"\");\n    },\n    indexOf: function(array, item, start) {\n      var index = -1;\n      start = this.isNumber(start) ? start : 0;\n      this.each(array, function(v, i) {\n        if (i >= start && v === item) {\n          index = i;\n          return false;\n        }\n      });\n      return index;\n    },\n    hasClass: function(element, className) {\n      className = className\n        .replace(/(^[ ]+)|([ ]+$)/g, \"\")\n        .replace(/[ ]{2,}/g, \" \")\n        .split(\" \");\n      for (var i = 0, ci, cls = element.className; (ci = className[i++]); ) {\n        if (!new RegExp(\"\\\\b\" + ci + \"\\\\b\", \"i\").test(cls)) {\n          return false;\n        }\n      }\n      return i - 1 == className.length;\n    },\n    addClass: function(elm, classNames) {\n      if (!elm) return;\n      classNames = this.trim(classNames).replace(/[ ]{2,}/g, \" \").split(\" \");\n      for (var i = 0, ci, cls = elm.className; (ci = classNames[i++]); ) {\n        if (!new RegExp(\"\\\\b\" + ci + \"\\\\b\").test(cls)) {\n          cls += \" \" + ci;\n        }\n      }\n      elm.className = utils.trim(cls);\n    },\n    removeClass: function(elm, classNames) {\n      classNames = this.isArray(classNames)\n        ? classNames\n        : this.trim(classNames).replace(/[ ]{2,}/g, \" \").split(\" \");\n      for (var i = 0, ci, cls = elm.className; (ci = classNames[i++]); ) {\n        cls = cls.replace(new RegExp(\"\\\\b\" + ci + \"\\\\b\"), \"\");\n      }\n      cls = this.trim(cls).replace(/[ ]{2,}/g, \" \");\n      elm.className = cls;\n      !cls && elm.removeAttribute(\"className\");\n    },\n    on: function(element, type, handler) {\n      var types = this.isArray(type) ? type : type.split(/\\s+/),\n        k = types.length;\n      if (k)\n        while (k--) {\n          type = types[k];\n          if (element.addEventListener) {\n            element.addEventListener(type, handler, false);\n          } else {\n            if (!handler._d) {\n              handler._d = {\n                els: []\n              };\n            }\n            var key = type + handler.toString(),\n              index = utils.indexOf(handler._d.els, element);\n            if (!handler._d[key] || index == -1) {\n              if (index == -1) {\n                handler._d.els.push(element);\n              }\n              if (!handler._d[key]) {\n                handler._d[key] = function(evt) {\n                  return handler.call(evt.srcElement, evt || window.event);\n                };\n              }\n\n              element.attachEvent(\"on\" + type, handler._d[key]);\n            }\n          }\n        }\n      element = null;\n    },\n    off: function(element, type, handler) {\n      var types = this.isArray(type) ? type : type.split(/\\s+/),\n        k = types.length;\n      if (k)\n        while (k--) {\n          type = types[k];\n          if (element.removeEventListener) {\n            element.removeEventListener(type, handler, false);\n          } else {\n            var key = type + handler.toString();\n            try {\n              element.detachEvent(\n                \"on\" + type,\n                handler._d ? handler._d[key] : handler\n              );\n            } catch (e) {}\n            if (handler._d && handler._d[key]) {\n              var index = utils.indexOf(handler._d.els, element);\n              if (index != -1) {\n                handler._d.els.splice(index, 1);\n              }\n              handler._d.els.length == 0 && delete handler._d[key];\n            }\n          }\n        }\n    },\n    loadFile: (function() {\n      var tmpList = [];\n      function getItem(doc, obj) {\n        try {\n          for (var i = 0, ci; (ci = tmpList[i++]); ) {\n            if (ci.doc === doc && ci.url == (obj.src || obj.href)) {\n              return ci;\n            }\n          }\n        } catch (e) {\n          return null;\n        }\n      }\n      return function(doc, obj, fn) {\n        var item = getItem(doc, obj);\n        if (item) {\n          if (item.ready) {\n            fn && fn();\n          } else {\n            item.funs.push(fn);\n          }\n          return;\n        }\n        tmpList.push({\n          doc: doc,\n          url: obj.src || obj.href,\n          funs: [fn]\n        });\n        if (!doc.body) {\n          var html = [];\n          for (var p in obj) {\n            if (p == \"tag\") continue;\n            html.push(p + '=\"' + obj[p] + '\"');\n          }\n          doc.write(\n            \"<\" + obj.tag + \" \" + html.join(\" \") + \" ></\" + obj.tag + \">\"\n          );\n          return;\n        }\n        if (obj.id && doc.getElementById(obj.id)) {\n          return;\n        }\n        var element = doc.createElement(obj.tag);\n        delete obj.tag;\n        for (var p in obj) {\n          element.setAttribute(p, obj[p]);\n        }\n        element.onload = element.onreadystatechange = function() {\n          if (!this.readyState || /loaded|complete/.test(this.readyState)) {\n            item = getItem(doc, obj);\n            if (item.funs.length > 0) {\n              item.ready = 1;\n              for (var fi; (fi = item.funs.pop()); ) {\n                fi();\n              }\n            }\n            element.onload = element.onreadystatechange = null;\n          }\n        };\n        element.onerror = function() {\n          throw Error(\n            \"The load \" + (obj.href || obj.src) + \" fails,check the url\"\n          );\n        };\n        doc.getElementsByTagName(\"head\")[0].appendChild(element);\n      };\n    })()\n  };\n  utils.each(\n    [\"String\", \"Function\", \"Array\", \"Number\", \"RegExp\", \"Object\", \"Boolean\"],\n    function(v) {\n      utils[\"is\" + v] = function(obj) {\n        return Object.prototype.toString.apply(obj) == \"[object \" + v + \"]\";\n      };\n    }\n  );\n  var parselist = {};\n  UE.parse = {\n    register: function(parseName, fn) {\n      parselist[parseName] = fn;\n    },\n    load: function(opt) {\n      utils.each(parselist, function(v) {\n        v.call(opt, utils);\n      });\n    }\n  };\n  uParse = function(selector, opt) {\n    utils.domReady(function() {\n      var contents;\n      if (document.querySelectorAll) {\n        contents = document.querySelectorAll(selector);\n      } else {\n        if (/^#/.test(selector)) {\n          contents = [document.getElementById(selector.replace(/^#/, \"\"))];\n        } else if (/^\\./.test(selector)) {\n          var contents = [];\n          utils.each(document.getElementsByTagName(\"*\"), function(node) {\n            if (\n              node.className &&\n              new RegExp(\"\\\\b\" + selector.replace(/^\\./, \"\") + \"\\\\b\", \"i\").test(\n                node.className\n              )\n            ) {\n              contents.push(node);\n            }\n          });\n        } else {\n          contents = document.getElementsByTagName(selector);\n        }\n      }\n      utils.each(contents, function(v) {\n        UE.parse.load(utils.extend({ root: v, selector: selector }, opt));\n      });\n    });\n  };\n})();\n\nUE.parse.register(\"insertcode\", function(utils) {\n  var pres = this.root.getElementsByTagName(\"pre\");\n  if (pres.length) {\n    if (typeof XRegExp == \"undefined\") {\n      var jsurl, cssurl;\n      if (this.rootPath !== undefined) {\n        jsurl =\n          utils.removeLastbs(this.rootPath) +\n          \"/third-party/SyntaxHighlighter/shCore.js\";\n        cssurl =\n          utils.removeLastbs(this.rootPath) +\n          \"/third-party/SyntaxHighlighter/shCoreDefault.css\";\n      } else {\n        jsurl = this.highlightJsUrl;\n        cssurl = this.highlightCssUrl;\n      }\n      utils.loadFile(document, {\n        id: \"syntaxhighlighter_css\",\n        tag: \"link\",\n        rel: \"stylesheet\",\n        type: \"text/css\",\n        href: cssurl\n      });\n      utils.loadFile(\n        document,\n        {\n          id: \"syntaxhighlighter_js\",\n          src: jsurl,\n          tag: \"script\",\n          type: \"text/javascript\",\n          defer: \"defer\"\n        },\n        function() {\n          utils.each(pres, function(pi) {\n            if (pi && /brush/i.test(pi.className)) {\n              SyntaxHighlighter.highlight(pi);\n            }\n          });\n        }\n      );\n    } else {\n      utils.each(pres, function(pi) {\n        if (pi && /brush/i.test(pi.className)) {\n          SyntaxHighlighter.highlight(pi);\n        }\n      });\n    }\n  }\n});\n\nUE.parse.register(\"table\", function(utils) {\n  var me = this,\n    root = this.root,\n    tables = root.getElementsByTagName(\"table\");\n  if (tables.length) {\n    var selector = this.selector;\n    //追加默认的表格样式\n    utils.cssRule(\n      \"table\",\n      selector +\n        \" table.noBorderTable td,\" +\n        selector +\n        \" table.noBorderTable th,\" +\n        selector +\n        \" table.noBorderTable caption{border:1px dashed #ddd !important}\" +\n        selector +\n        \" table.sortEnabled tr.firstRow th,\" +\n        selector +\n        \" table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;\" +\n        \"background-position: center right; background-image:url(\" +\n        this.rootPath +\n        \"themes/default/images/sortable.png);}\" +\n        selector +\n        \" table.sortEnabled tr.firstRow th:hover,\" +\n        selector +\n        \" table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}\" +\n        selector +\n        \" table{margin-bottom:10px;border-collapse:collapse;display:table;}\" +\n        selector +\n        \" td,\" +\n        selector +\n        \" th{padding: 5px 10px;border: 1px solid #DDD;}\" +\n        selector +\n        \" caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}\" +\n        selector +\n        \" th{border-top:1px solid #BBB;background:#F7F7F7;}\" +\n        selector +\n        \" table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}\" +\n        selector +\n        \" tr.ue-table-interlace-color-single td{ background: #fcfcfc; }\" +\n        selector +\n        \" tr.ue-table-interlace-color-double td{ background: #f7faff; }\" +\n        selector +\n        \" td p{margin:0;padding:0;width:auto;height:auto;}\",\n      document\n    );\n    //填充空的单元格\n\n    utils.each(\"td th caption\".split(\" \"), function(tag) {\n      var cells = root.getElementsByTagName(tag);\n      cells.length &&\n        utils.each(cells, function(node) {\n          if (!node.firstChild) {\n            node.innerHTML = \"&nbsp;\";\n          }\n        });\n    });\n\n    //表格可排序\n    var tables = root.getElementsByTagName(\"table\");\n    utils.each(tables, function(table) {\n      if (/\\bsortEnabled\\b/.test(table.className)) {\n        utils.on(table, \"click\", function(e) {\n          var target = e.target || e.srcElement,\n            cell = findParentByTagName(target, [\"td\", \"th\"]);\n          var table = findParentByTagName(target, \"table\"),\n            colIndex = utils.indexOf(table.rows[0].cells, cell),\n            sortType = table.getAttribute(\"data-sort-type\");\n          if (colIndex != -1) {\n            sortTable(table, colIndex, me.tableSortCompareFn || sortType);\n            updateTable(table);\n          }\n        });\n      }\n    });\n\n    //按照标签名查找父节点\n    function findParentByTagName(target, tagNames) {\n      var i,\n        current = target;\n      tagNames = utils.isArray(tagNames) ? tagNames : [tagNames];\n      while (current) {\n        for (i = 0; i < tagNames.length; i++) {\n          if (current.tagName == tagNames[i].toUpperCase()) return current;\n        }\n        current = current.parentNode;\n      }\n      return null;\n    }\n    //表格排序\n    function sortTable(table, sortByCellIndex, compareFn) {\n      var rows = table.rows,\n        trArray = [],\n        flag = rows[0].cells[0].tagName === \"TH\",\n        lastRowIndex = 0;\n\n      for (var i = 0, len = rows.length; i < len; i++) {\n        trArray[i] = rows[i];\n      }\n\n      var Fn = {\n        reversecurrent: function(td1, td2) {\n          return 1;\n        },\n        orderbyasc: function(td1, td2) {\n          var value1 = td1.innerText || td1.textContent,\n            value2 = td2.innerText || td2.textContent;\n          return value1.localeCompare(value2);\n        },\n        reversebyasc: function(td1, td2) {\n          var value1 = td1.innerHTML,\n            value2 = td2.innerHTML;\n          return value2.localeCompare(value1);\n        },\n        orderbynum: function(td1, td2) {\n          var value1 = td1[utils.isIE ? \"innerText\" : \"textContent\"].match(\n            /\\d+/\n          ),\n            value2 = td2[utils.isIE ? \"innerText\" : \"textContent\"].match(/\\d+/);\n          if (value1) value1 = +value1[0];\n          if (value2) value2 = +value2[0];\n          return (value1 || 0) - (value2 || 0);\n        },\n        reversebynum: function(td1, td2) {\n          var value1 = td1[utils.isIE ? \"innerText\" : \"textContent\"].match(\n            /\\d+/\n          ),\n            value2 = td2[utils.isIE ? \"innerText\" : \"textContent\"].match(/\\d+/);\n          if (value1) value1 = +value1[0];\n          if (value2) value2 = +value2[0];\n          return (value2 || 0) - (value1 || 0);\n        }\n      };\n\n      //对表格设置排序的标记data-sort-type\n      table.setAttribute(\n        \"data-sort-type\",\n        compareFn && typeof compareFn === \"string\" && Fn[compareFn]\n          ? compareFn\n          : \"\"\n      );\n\n      //th不参与排序\n      flag && trArray.splice(0, 1);\n      trArray = sort(trArray, function(tr1, tr2) {\n        var result;\n        if (compareFn && typeof compareFn === \"function\") {\n          result = compareFn.call(\n            this,\n            tr1.cells[sortByCellIndex],\n            tr2.cells[sortByCellIndex]\n          );\n        } else if (compareFn && typeof compareFn === \"number\") {\n          result = 1;\n        } else if (\n          compareFn &&\n          typeof compareFn === \"string\" &&\n          Fn[compareFn]\n        ) {\n          result = Fn[compareFn].call(\n            this,\n            tr1.cells[sortByCellIndex],\n            tr2.cells[sortByCellIndex]\n          );\n        } else {\n          result = Fn[\"orderbyasc\"].call(\n            this,\n            tr1.cells[sortByCellIndex],\n            tr2.cells[sortByCellIndex]\n          );\n        }\n        return result;\n      });\n      var fragment = table.ownerDocument.createDocumentFragment();\n      for (var j = 0, len = trArray.length; j < len; j++) {\n        fragment.appendChild(trArray[j]);\n      }\n      var tbody = table.getElementsByTagName(\"tbody\")[0];\n      if (!lastRowIndex) {\n        tbody.appendChild(fragment);\n      } else {\n        tbody.insertBefore(\n          fragment,\n          rows[lastRowIndex - range.endRowIndex + range.beginRowIndex - 1]\n        );\n      }\n    }\n    //冒泡排序\n    function sort(array, compareFn) {\n      compareFn =\n        compareFn ||\n        function(item1, item2) {\n          return item1.localeCompare(item2);\n        };\n      for (var i = 0, len = array.length; i < len; i++) {\n        for (var j = i, length = array.length; j < length; j++) {\n          if (compareFn(array[i], array[j]) > 0) {\n            var t = array[i];\n            array[i] = array[j];\n            array[j] = t;\n          }\n        }\n      }\n      return array;\n    }\n    //更新表格\n    function updateTable(table) {\n      //给第一行设置firstRow的样式名称,在排序图标的样式上使用到\n      if (!utils.hasClass(table.rows[0], \"firstRow\")) {\n        for (var i = 1; i < table.rows.length; i++) {\n          utils.removeClass(table.rows[i], \"firstRow\");\n        }\n        utils.addClass(table.rows[0], \"firstRow\");\n      }\n    }\n  }\n});\n\nUE.parse.register(\"charts\", function(utils) {\n  utils.cssRule(\n    \"chartsContainerHeight\",\n    \".edui-chart-container { height:\" +\n      (this.chartContainerHeight || 300) +\n      \"px}\"\n  );\n  var resourceRoot = this.rootPath,\n    containers = this.root,\n    sources = null;\n\n  //不存在指定的根路径， 则直接退出\n  if (!resourceRoot) {\n    return;\n  }\n\n  if ((sources = parseSources())) {\n    loadResources();\n  }\n\n  function parseSources() {\n    if (!containers) {\n      return null;\n    }\n\n    return extractChartData(containers);\n  }\n\n  /**\n     * 提取数据\n     */\n  function extractChartData(rootNode) {\n    var data = [],\n      tables = rootNode.getElementsByTagName(\"table\");\n\n    for (var i = 0, tableNode; (tableNode = tables[i]); i++) {\n      if (tableNode.getAttribute(\"data-chart\") !== null) {\n        data.push(formatData(tableNode));\n      }\n    }\n\n    return data.length ? data : null;\n  }\n\n  function formatData(tableNode) {\n    var meta = tableNode.getAttribute(\"data-chart\"),\n      metaConfig = {},\n      data = [];\n\n    //提取table数据\n    for (var i = 0, row; (row = tableNode.rows[i]); i++) {\n      var rowData = [];\n\n      for (var j = 0, cell; (cell = row.cells[j]); j++) {\n        var value = cell.innerText || cell.textContent || \"\";\n        rowData.push(cell.tagName == \"TH\" ? value : value | 0);\n      }\n\n      data.push(rowData);\n    }\n\n    //解析元信息\n    meta = meta.split(\";\");\n    for (var i = 0, metaData; (metaData = meta[i]); i++) {\n      metaData = metaData.split(\":\");\n      metaConfig[metaData[0]] = metaData[1];\n    }\n\n    return {\n      table: tableNode,\n      meta: metaConfig,\n      data: data\n    };\n  }\n\n  //加载资源\n  function loadResources() {\n    loadJQuery();\n  }\n\n  function loadJQuery() {\n    //不存在jquery， 则加载jquery\n    if (!window.jQuery) {\n      utils.loadFile(\n        document,\n        {\n          src: resourceRoot + \"/third-party/jquery-1.10.2.min.js\",\n          tag: \"script\",\n          type: \"text/javascript\",\n          defer: \"defer\"\n        },\n        function() {\n          loadHighcharts();\n        }\n      );\n    } else {\n      loadHighcharts();\n    }\n  }\n\n  function loadHighcharts() {\n    //不存在Highcharts， 则加载Highcharts\n    if (!window.Highcharts) {\n      utils.loadFile(\n        document,\n        {\n          src: resourceRoot + \"/third-party/highcharts/highcharts.js\",\n          tag: \"script\",\n          type: \"text/javascript\",\n          defer: \"defer\"\n        },\n        function() {\n          loadTypeConfig();\n        }\n      );\n    } else {\n      loadTypeConfig();\n    }\n  }\n\n  //加载图表差异化配置文件\n  function loadTypeConfig() {\n    utils.loadFile(\n      document,\n      {\n        src: resourceRoot + \"/dialogs/charts/chart.config.js\",\n        tag: \"script\",\n        type: \"text/javascript\",\n        defer: \"defer\"\n      },\n      function() {\n        render();\n      }\n    );\n  }\n\n  //渲染图表\n  function render() {\n    var config = null,\n      chartConfig = null,\n      container = null;\n\n    for (var i = 0, len = sources.length; i < len; i++) {\n      config = sources[i];\n\n      chartConfig = analysisConfig(config);\n\n      container = createContainer(config.table);\n\n      renderChart(container, typeConfig[config.meta.chartType], chartConfig);\n    }\n  }\n\n  /**\n     * 渲染图表\n     * @param container 图表容器节点对象\n     * @param typeConfig 图表类型配置\n     * @param config 图表通用配置\n     * */\n  function renderChart(container, typeConfig, config) {\n    $(container).highcharts(\n      $.extend({}, typeConfig, {\n        credits: {\n          enabled: false\n        },\n        exporting: {\n          enabled: false\n        },\n        title: {\n          text: config.title,\n          x: -20 //center\n        },\n        subtitle: {\n          text: config.subTitle,\n          x: -20\n        },\n        xAxis: {\n          title: {\n            text: config.xTitle\n          },\n          categories: config.categories\n        },\n        yAxis: {\n          title: {\n            text: config.yTitle\n          },\n          plotLines: [\n            {\n              value: 0,\n              width: 1,\n              color: \"#808080\"\n            }\n          ]\n        },\n        tooltip: {\n          enabled: true,\n          valueSuffix: config.suffix\n        },\n        legend: {\n          layout: \"vertical\",\n          align: \"right\",\n          verticalAlign: \"middle\",\n          borderWidth: 1\n        },\n        series: config.series\n      })\n    );\n  }\n\n  /**\n     * 创建图表的容器\n     * 新创建的容器会替换掉对应的table对象\n     * */\n  function createContainer(tableNode) {\n    var container = document.createElement(\"div\");\n    container.className = \"edui-chart-container\";\n\n    tableNode.parentNode.replaceChild(container, tableNode);\n\n    return container;\n  }\n\n  //根据config解析出正确的类别和图表数据信息\n  function analysisConfig(config) {\n    var series = [],\n      //数据类别\n      categories = [],\n      result = [],\n      data = config.data,\n      meta = config.meta;\n\n    //数据对齐方式为相反的方式， 需要反转数据\n    if (meta.dataFormat != \"1\") {\n      for (var i = 0, len = data.length; i < len; i++) {\n        for (var j = 0, jlen = data[i].length; j < jlen; j++) {\n          if (!result[j]) {\n            result[j] = [];\n          }\n\n          result[j][i] = data[i][j];\n        }\n      }\n\n      data = result;\n    }\n\n    result = {};\n\n    //普通图表\n    if (meta.chartType != typeConfig.length - 1) {\n      categories = data[0].slice(1);\n\n      for (var i = 1, curData; (curData = data[i]); i++) {\n        series.push({\n          name: curData[0],\n          data: curData.slice(1)\n        });\n      }\n\n      result.series = series;\n      result.categories = categories;\n      result.title = meta.title;\n      result.subTitle = meta.subTitle;\n      result.xTitle = meta.xTitle;\n      result.yTitle = meta.yTitle;\n      result.suffix = meta.suffix;\n    } else {\n      var curData = [];\n\n      for (var i = 1, len = data[0].length; i < len; i++) {\n        curData.push([data[0][i], data[1][i] | 0]);\n      }\n\n      //饼图\n      series[0] = {\n        type: \"pie\",\n        name: meta.tip,\n        data: curData\n      };\n\n      result.series = series;\n      result.title = meta.title;\n      result.suffix = meta.suffix;\n    }\n\n    return result;\n  }\n});\n\nUE.parse.register(\"background\", function(utils) {\n  var me = this,\n    root = me.root,\n    p = root.getElementsByTagName(\"p\"),\n    styles;\n\n  for (var i = 0, ci; (ci = p[i++]); ) {\n    styles = ci.getAttribute(\"data-background\");\n    if (styles) {\n      ci.parentNode.removeChild(ci);\n    }\n  }\n\n  //追加默认的表格样式\n  styles &&\n    utils.cssRule(\n      \"ueditor_background\",\n      me.selector + \"{\" + styles + \"}\",\n      document\n    );\n});\n\nUE.parse.register(\"list\", function(utils) {\n  var customCss = [],\n    customStyle = {\n      cn: \"cn-1-\",\n      cn1: \"cn-2-\",\n      cn2: \"cn-3-\",\n      num: \"num-1-\",\n      num1: \"num-2-\",\n      num2: \"num-3-\",\n      dash: \"dash\",\n      dot: \"dot\"\n    };\n\n  utils.extend(this, {\n    liiconpath: \"http://bs.baidu.com/listicon/\",\n    listDefaultPaddingLeft: \"20\"\n  });\n\n  var root = this.root,\n    ols = root.getElementsByTagName(\"ol\"),\n    uls = root.getElementsByTagName(\"ul\"),\n    selector = this.selector;\n\n  if (ols.length) {\n    applyStyle.call(this, ols);\n  }\n\n  if (uls.length) {\n    applyStyle.call(this, uls);\n  }\n\n  if (ols.length || uls.length) {\n    customCss.push(selector + \" .list-paddingleft-1{padding-left:0}\");\n    customCss.push(\n      selector +\n        \" .list-paddingleft-2{padding-left:\" +\n        this.listDefaultPaddingLeft +\n        \"px}\"\n    );\n    customCss.push(\n      selector +\n        \" .list-paddingleft-3{padding-left:\" +\n        this.listDefaultPaddingLeft * 2 +\n        \"px}\"\n    );\n\n    utils.cssRule(\n      \"list\",\n      selector +\n        \" ol,\" +\n        selector +\n        \" ul{margin:0;padding:0;}\\n\" +\n        selector +\n        \" li{clear:both;}\\n\" +\n        customCss.join(\"\\n\"),\n      document\n    );\n  }\n  function applyStyle(nodes) {\n    var T = this;\n    utils.each(nodes, function(list) {\n      if (list.className && /custom_/i.test(list.className)) {\n        var listStyle = list.className.match(/custom_(\\w+)/)[1];\n        if (listStyle == \"dash\" || listStyle == \"dot\") {\n          utils.pushItem(\n            customCss,\n            selector +\n              \" li.list-\" +\n              customStyle[listStyle] +\n              \"{background-image:url(\" +\n              T.liiconpath +\n              customStyle[listStyle] +\n              \".gif)}\"\n          );\n          utils.pushItem(\n            customCss,\n            selector +\n              \" ul.custom_\" +\n              listStyle +\n              \"{list-style:none;} \" +\n              selector +\n              \" ul.custom_\" +\n              listStyle +\n              \" li{background-position:0 3px;background-repeat:no-repeat}\"\n          );\n        } else {\n          var index = 1;\n          utils.each(list.childNodes, function(li) {\n            if (li.tagName == \"LI\") {\n              utils.pushItem(\n                customCss,\n                selector +\n                  \" li.list-\" +\n                  customStyle[listStyle] +\n                  index +\n                  \"{background-image:url(\" +\n                  T.liiconpath +\n                  \"list-\" +\n                  customStyle[listStyle] +\n                  index +\n                  \".gif)}\"\n              );\n              index++;\n            }\n          });\n          utils.pushItem(\n            customCss,\n            selector +\n              \" ol.custom_\" +\n              listStyle +\n              \"{list-style:none;}\" +\n              selector +\n              \" ol.custom_\" +\n              listStyle +\n              \" li{background-position:0 3px;background-repeat:no-repeat}\"\n          );\n        }\n        switch (listStyle) {\n          case \"cn\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-1{padding-left:25px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-2{padding-left:40px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-3{padding-left:55px}\"\n            );\n            break;\n          case \"cn1\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-1{padding-left:30px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-2{padding-left:40px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-3{padding-left:55px}\"\n            );\n            break;\n          case \"cn2\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-1{padding-left:40px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-2{padding-left:55px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-3{padding-left:68px}\"\n            );\n            break;\n          case \"num\":\n          case \"num1\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-1{padding-left:25px}\"\n            );\n            break;\n          case \"num2\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-1{padding-left:35px}\"\n            );\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft-2{padding-left:40px}\"\n            );\n            break;\n          case \"dash\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft{padding-left:35px}\"\n            );\n            break;\n          case \"dot\":\n            utils.pushItem(\n              customCss,\n              selector +\n                \" li.list-\" +\n                listStyle +\n                \"-paddingleft{padding-left:20px}\"\n            );\n        }\n      }\n    });\n  }\n});\n\nUE.parse.register(\"vedio\", function(utils) {\n  var video = this.root.getElementsByTagName(\"video\"),\n    audio = this.root.getElementsByTagName(\"audio\");\n\n  document.createElement(\"video\");\n  document.createElement(\"audio\");\n  if (video.length || audio.length) {\n    var sourcePath = utils.removeLastbs(this.rootPath),\n      jsurl = sourcePath + \"/third-party/video-js/video.js\",\n      cssurl = sourcePath + \"/third-party/video-js/video-js.min.css\",\n      swfUrl = sourcePath + \"/third-party/video-js/video-js.swf\";\n\n    if (window.videojs) {\n      videojs.autoSetup();\n    } else {\n      utils.loadFile(document, {\n        id: \"video_css\",\n        tag: \"link\",\n        rel: \"stylesheet\",\n        type: \"text/css\",\n        href: cssurl\n      });\n      utils.loadFile(\n        document,\n        {\n          id: \"video_js\",\n          src: jsurl,\n          tag: \"script\",\n          type: \"text/javascript\"\n        },\n        function() {\n          videojs.options.flash.swf = swfUrl;\n          videojs.autoSetup();\n        }\n      );\n    }\n  }\n});\n\n\n})();\n"
  },
  {
    "path": "web/console/public/km-login/index.html",
    "content": "\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover\" />\n\t<link rel=\"apple-touch-icon\" href=\"/favicon.ico\">\n\t<title>53AI KM</title>\n\t<script>\t</script>\n</head>\n\n<body>\n\t<style>\n\t\thtml, body {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tbox-sizing: border-box;\n\t\t\toverflow: hidden;\n\t\t}\n\t</style>\n\t<script>\n\t\tconst user_info = JSON.parse(localStorage.getItem('user_info') || '{}')\n\t\tif (user_info.access_token && user_info.eid) window.location.replace(`//${window.location.host}/console/index.html${window.location.search}#/`)\n\t\telse {\n\t\t\tconst iframe_el = document.createElement('iframe')\n\t\t\tiframe_el.width = '100%'\n\t\t\tiframe_el.height = '100%'\n\t\t\tiframe_el.scrolling = 'no'\n\t\t\tiframe_el.style.border = 'none'\n\t\t\tiframe_el.src = `//${window.location.host}/console/index.html${window.location.search}#/login`\n\t\t\tdocument.body.appendChild(iframe_el)\n\t\t\twindow.addEventListener('message', (event) => {\n\t\t\t\tif (event.data.action === 'saas-login-success') {\n          const params = new URLSearchParams(window.location.search)\n          if (params.get('redirect')) {\n            window.location.href = params.get('redirect')\n          } else {\n            window.location.href = `//${window.location.host}/#/`\n          }\n        }\n\t\t\t}, false)\n\t\t}\n\t</script>\n</body>\n\n</html>\n"
  },
  {
    "path": "web/console/public/manifest.json",
    "content": "{\n  \"name\": \"53AI\",\n  \"short_name\": \"53AI\",\n  \"start_url\": \"/?source=pwa\",\n  \"display\": \"standalone\",\n  \"scope\": \"/\",\n  \"background_color\": \"#fff\",\n  \"homepage\": \"https://chat.53ai.com/\",\n  \"icons\": [\n    {\n      \"src\": \"/images/logo.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"48x48\"\n    },\n    {\n      \"src\": \"/images/logo.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"96x96\"\n    },\n    {\n      \"src\": \"/images/logo.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"144x144\"\n    },\n    {\n      \"src\": \"/images/logo.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    }\n  ]\n}\n"
  },
  {
    "path": "web/console/public/oauth_login.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <script src=\"//res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <link rel=\"icon\" href=\"/favicon.png\" />\n    <title>Wescrm OAuth Login</title>\n  </head>\n  <body>\n    <div style=\"position: relative; width: 100vw; height: 100vh\">\n      <div class=\"loading-spinner-box\">\n        <div class=\"loading-spinner\"></div>\n        <div class=\"loading-text\">授权中...</div>\n      </div>\n    </div>\n    <script>\n      var parentWindow = (window.parent && window.parent[0]) || window.parent\n      var url_params = new URLSearchParams(window.location.search)\n      var wechat_oauth_code = url_params.get('code')\n      var appid = url_params.get('appid')\n      var suiteid = url_params.get('suiteid')\n      var state = url_params.get('state')\n      var api = decodeURIComponent(url_params.get('api') || '')\n      var redirect_url = decodeURIComponent(url_params.get('redirect_url') || '')\n      if (wechat_oauth_code) {\n        api = api || `https://${suiteid === '53aihub' ? 'agenthubdev.53ai.com/api/saas/wechat/redirect' : 'apircdev.ibos.cn/wescrm/wechat/redirect'}`\n        redirect_url = redirect_url || `${window.location.origin}${window.location.pathname}?state=${state}`\n        const wechat_redirect_url = `${api}?appid=${appid}&suiteid=${suiteid}&code=${wechat_oauth_code}&redirect_url=${encodeURIComponent(redirect_url)}`\n        setTimeout(() => {\n          location.href = wechat_redirect_url\n        }, 1000)\n      }\n      var loginkey = url_params.get('loginkey')\n      if (loginkey) {\n        if (parentWindow) parentWindow.postMessage({ from: '53hub', loginkey, state }, '*')\n        window.postMessage({ from: '53hub', loginkey, state }, '*')\n      }\n      var openid = url_params.get('openid') || ''\n      var nickname = url_params.get('nickname') || ''\n      var unionid = url_params.get('unionid') || ''\n      var access_token = url_params.get('access_token') || url_params.get('accesstoken') || ''\n      if (openid) {\n        let messageData = { from: '53hub', openid, unionid, nickname, state, access_token }\n        if (parentWindow) parentWindow.postMessage(messageData, '*')\n        window.postMessage(messageData, '*')\n        sessionStorage.setItem('oauth_login_data', JSON.stringify(messageData))\n      }\n    </script>\n    <style>\n      .loading-spinner-box {\n        width: 100%;\n        height: 100%;\n        position: absolute;\n        z-index: 9999;\n        top: 0;\n        left: 0;\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        align-items: center;\n        gap: 12px;\n        background-color: rgba(0, 0, 0, 0.5);\n      }\n      .loading-spinner {\n        width: 40px;\n        height: 40px;\n        border: 4px solid #f3f3f3;\n        border-top: 4px solid #0082f0;\n        border-radius: 50%;\n        animation: spin 1s linear infinite;\n        -webkit-animation: spin 1s linear infinite;\n      }\n      @keyframes spin {\n        0% {\n          transform: rotate(0deg);\n        }\n        100% {\n          transform: rotate(360deg);\n        }\n      }\n      .loading-text {\n        color: #fff;\n      }\n    </style>\n  </body>\n</html>\n"
  },
  {
    "path": "web/console/public/saas-login/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-cmn-Hans\">\n\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover\" />\n\t<link rel=\"apple-touch-icon\" href=\"/favicon.ico\">\n\t<title>53AI Hub</title>\n\t<script>\t</script>\n</head>\n\n<body>\n\t<style>\n\t\thtml, body {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tbox-sizing: border-box;\n\t\t\toverflow: hidden;\n\t\t}\n\t</style>\n\t<script>\n\t\tconst user_info = JSON.parse(localStorage.getItem('user_info') || '{}')\n\t\tif (user_info.access_token && user_info.eid) window.location.replace(`//${location.host}/console${location.search}#/`)\n\t\telse {\n\t\t\tconst iframe_el = document.createElement('iframe')\n\t\t\tiframe_el.width = '100%'\n\t\t\tiframe_el.height = '100%'\n\t\t\tiframe_el.scrolling = 'no'\n\t\t\tiframe_el.style.border = 'none'\n\t\t\tiframe_el.src = `//${location.host}/console${location.search}#/login`\n\t\t\tdocument.body.appendChild(iframe_el)\n\t\t\twindow.addEventListener('message', (event) => {\n\t\t\t\tif (event.data.action === 'saas-login-success') {\n          window.location.href = `//${location.host}/console${location.search}#/`\n        } else if (event.data.action === 'saas-login-redirect') {\n\t\t\t\t\twindow.location.replace(event.data.url)\n\t\t\t\t}\n\t\t\t}, false)\n\t\t}\n\t</script>\n</body>\n\n</html>\n"
  },
  {
    "path": "web/console/src/App.vue",
    "content": "<template>\n  <ElConfigProvider :locale=\"locale === 'en' ? en : locale === 'ja' ? ja : locale === 'zh-tw' ? zhTw : zhCn\">\n    <RouterView />\n    <UserLoginDialog />\n  </ElConfigProvider>\n</template>\n\n<script setup lang=\"ts\">\nimport { ElConfigProvider } from 'element-plus'\nimport { useI18n } from 'vue-i18n'\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\nimport zhTw from 'element-plus/es/locale/lang/zh-tw'\nimport en from 'element-plus/es/locale/lang/en'\nimport ja from 'element-plus/es/locale/lang/ja'\n\nimport { onMounted } from 'vue'\nimport eventBus from '@/utils/event-bus'\nimport { gotoLogin } from '@/router'\n// import { useRouter } from 'vue-router'\nimport { useEnterpriseStore, useUserStore } from '@/stores'\n\nimport settingApi from '@/api/modules/setting'\nimport { useEnv } from '@/hooks/useEnv'\n\nconst { isOpLocalEnv } = useEnv()\nconst { locale } = useI18n()\n// const router = useRouter()\nconst enterprise_store = useEnterpriseStore()\nconst user_store = useUserStore()\n\neventBus.on('user-login-expired', async () => {\n  await user_store.logoff()\n  gotoLogin()\n})\nenterprise_store.loadSelfInfo()\nuser_store.loadSelfInfo()\n\nconst insertScript = (content: string) => {\n  if (!content) return\n\n  const trimmed = content.trim()\n  const node = document.createElement('div')\n  node.innerHTML = trimmed\n  const scripts = node.querySelectorAll('script')\n\n  if (scripts.length) {\n    scripts.forEach(script => {\n      const newScript = document.createElement('script')\n      // Copy all attributes from the original script element\n      Array.from(script.attributes).forEach(attr => {\n        newScript.setAttribute(attr.name, attr.value)\n      })\n\n      // If no src attribute, set type and content\n      if (!script.src) {\n        newScript.type = 'text/javascript'\n        newScript.appendChild(document.createTextNode(script.innerHTML))\n      }\n      document.body.appendChild(newScript)\n    })\n  } else {\n    const newScript = document.createElement('script')\n    newScript.type = 'text/javascript'\n    newScript.appendChild(document.createTextNode(content))\n    document.body.appendChild(newScript)\n  }\n}\n\nonMounted(() => {\n  if (isOpLocalEnv.value) {\n    settingApi.detail('third_party_statistic').then(res => {\n      const items = {\n        script: res.data.find(item => item.key === 'third_party_statistic_header')?.value || '',\n      }\n      insertScript(items.script)\n    })\n  }\n})\n</script>\n\n<style>\n/* 临时添加，后续hub-ui-x 要支持 */\n.markdown-body img {\n  display: inline;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/api/code.ts",
    "content": "// 使用枚举替代常量\nexport const ResponseCode = {\n  SUCCESS: 0,\n  PARAM_ERROR: 1,\n  DATABASE_ERROR: 2,\n  NETWORK_ERROR: 3,\n  SYSTEM_ERROR: 4,\n  AUTH_ERROR: 5,\n  NOT_FOUND_ERROR: 6,\n  UNAUTHORIZED_ERROR: 7,\n  FILE_ERROR: 8,\n  FORBIDDEN_ERROR: 9,\n  AGENT_ERROR: 10,\n  TOKEN_EXPIRED_ERROR: 11,\n  VERIFICATION_CODE_ERROR: -14,\n}\n\nexport const ResponseStatus = {\n  SUCCESS: 200,\n  CREATED: 201,\n  NO_CONTENT: 204,\n  BAD_REQUEST: 400,\n  UNAUTHORIZED: 401,\n  FORBIDDEN: 403,\n  NOT_FOUND: 404,\n  INTERNAL_SERVER_ERROR: 500,\n  BAD_GATEWAY: 502,\n  SERVICE_UNAVAILABLE: 503,\n  GATEWAY_TIMEOUT: 504,\n}\n\nexport const RESPONSE_CODE_MESSAGE_MAP = new Map([\n  [ResponseCode.SUCCESS, 'response_code.success'],\n  [ResponseCode.PARAM_ERROR, 'response_code.param_error'],\n  [ResponseCode.DATABASE_ERROR, 'response_code.database_error'],\n  [ResponseCode.NETWORK_ERROR, 'response_code.network_error'],\n  [ResponseCode.SYSTEM_ERROR, 'response_code.system_error'],\n  [ResponseCode.AUTH_ERROR, 'response_code.auth_error'],\n  [ResponseCode.NOT_FOUND_ERROR, 'response_code.not_found_error'],\n  [ResponseCode.UNAUTHORIZED_ERROR, 'response_code.unauthorized_error'],\n  [ResponseCode.FILE_ERROR, 'response_code.file_error'],\n  [ResponseCode.FORBIDDEN_ERROR, 'response_code.forbidden_error'],\n  [ResponseCode.AGENT_ERROR, 'response_code.agent_error'],\n  [ResponseCode.TOKEN_EXPIRED_ERROR, 'response_code.token_expired_error'],\n  [ResponseCode.VERIFICATION_CODE_ERROR, 'response_code.verification_code_error'],\n])\n\n// 错误码映射\nexport const ERROR_MESSAGES = new Map([\n  [ResponseStatus.BAD_REQUEST, 'response_status.400'],\n  [ResponseStatus.UNAUTHORIZED, 'response_status.401'],\n  [ResponseStatus.FORBIDDEN, 'response_status.403'],\n  [ResponseStatus.NOT_FOUND, 'response_status.404'],\n  [ResponseStatus.SERVICE_UNAVAILABLE, 'response_status.500'],\n  [ResponseStatus.BAD_GATEWAY, 'response_status.502'],\n  [ResponseStatus.INTERNAL_SERVER_ERROR, 'response_status.503'],\n  [ResponseStatus.GATEWAY_TIMEOUT, 'response_status.504'],\n])\n\nexport const RESPONSE_MESSAGE_MAP = new Map([\n  ['unauthorized: user not found', 'response_message.user_not_found'],\n  [\n    'unauthorized: username or password is incorrect',\n    'response_message.username_or_password_is_incorrect',\n  ],\n  ['auth failed: record not found', 'response_message.user_not_found'],\n  ['invalid or expired verification code', 'response_code.verification_code_error'],\n  ['operate too fast', 'response_message.operate_too_fast'],\n])\n\nexport const RESPONSE_DATA_MESSAGE_MAP = new Map([\n  ['该域名已被绑定', 'response_data.domain_already_bound'],\n  ['您已有一个正在审核中的申请', 'response_data.apply_already_submitted'],\n])\n"
  },
  {
    "path": "web/console/src/api/config.ts",
    "content": "import axios, { type AxiosRequestConfig, type AxiosResponse } from 'axios'\nimport { generateIbosSignParams, generateSignParams } from './signature'\nimport { api_host } from '@/utils/config'\nimport { ResponseStatus } from './code'\n\n// 定义重试配置接口  TODO: 需要优化\ninterface RetryConfig {\n  retry: number\n  retryDelay: number\n  count?: number\n}\n// 扩展 AxiosRequestConfig 类型\ndeclare module 'axios' {\n  export interface AxiosRequestConfig {\n    // 重试配置\n    retryConfig?: RetryConfig\n    // ibos签名\n    ibos_sign?: boolean\n    // 发送验证码签名\n    code_sign?: boolean\n    // 需要身份验证\n    requiresAuth?: boolean\n  }\n}\n\nconst service = axios.create({\n  baseURL: api_host,\n})\n\nservice.interceptors.request.use(\n  config => {\n    config.params = config.params || {}\n    const access_token = config.params.access_token || localStorage.getItem('access_token') || ''\n    if (access_token) config.headers.set('Authorization', `Bearer ${access_token}`)\n\n    if (config.ibos_sign) {\n      const { token, platform, createtime } = generateIbosSignParams()\n      config.headers.set('token', token)\n      config.headers.set('platform', platform)\n      config.headers.set('createtime', createtime)\n    }\n    if (config.code_sign) config.params = generateSignParams(config.params)\n\n    return config\n  },\n  error => {\n    return Promise.reject(error.response)\n  }\n)\n\nservice.interceptors.response.use(\n  (response: AxiosResponse): AxiosResponse => {\n    if (\n      [ResponseStatus.SUCCESS, ResponseStatus.CREATED, ResponseStatus.NO_CONTENT].includes(\n        response.status\n      )\n    )\n      return response.data\n\n    throw new Error(response.status.toString())\n  },\n  error => {\n    return Promise.reject(error)\n  }\n)\n\n// 封装通用请求方法\nfunction request<T = unknown>(config: AxiosRequestConfig): Promise<T> {\n  return service(config).then(res => res.data)\n}\n\n// 导出常用HTTP方法\nexport const get = <T = unknown>(url: string, config?: AxiosRequestConfig): Promise<T> => {\n  return request({ ...config, method: 'get', url })\n}\n\nexport const post = <T = unknown>(\n  url: string,\n  data?: unknown,\n  config?: AxiosRequestConfig\n): Promise<T> => {\n  return request({ ...config, method: 'post', url, data })\n}\n\nexport const put = <T = unknown>(\n  url: string,\n  data?: unknown,\n  config?: AxiosRequestConfig\n): Promise<T> => {\n  return request({ ...config, method: 'put', url, data })\n}\n\nexport const del = <T = unknown>(url: string, config?: AxiosRequestConfig): Promise<T> => {\n  return request({ ...config, method: 'delete', url })\n}\n\nexport const patch = <T = unknown>(\n  url: string,\n  data?: unknown,\n  config?: AxiosRequestConfig\n): Promise<T> => {\n  return request({ ...config, method: 'patch', url, data })\n}\n\nexport default service\n"
  },
  {
    "path": "web/console/src/api/errorHandler.ts",
    "content": "import { ElMessage } from 'element-plus'\n\nimport {\n  ERROR_MESSAGES,\n  RESPONSE_CODE_MESSAGE_MAP,\n  RESPONSE_DATA_MESSAGE_MAP,\n  RESPONSE_MESSAGE_MAP,\n  ResponseCode,\n} from './code'\n\n// 定义错误响应接口\ninterface ErrorResponse {\n  status?: ResponseStatus\n  response?: {\n    status?: ResponseStatus\n    data?: {\n      code?: ResponseCode\n      message?: string\n      [key: string]: unknown\n    }\n  }\n  message?: string\n}\n\n// 消息缓存，用于防止重复显示\nconst messageCache = new Map<string, number>()\nconst messageTimers = new Map<string, NodeJS.Timeout>() // 存储定时器ID\nconst CACHE_DURATION = 3000 // 3秒内相同消息不重复显示\n\n// 显示消息（带去重功能）\nfunction showMessage(message: string) {\n  const now = Date.now()\n\n  // 检查是否在缓存期内\n  if (messageCache.has(message)) {\n    const lastShowTime = messageCache.get(message)!\n    if (now - lastShowTime < CACHE_DURATION) {\n      return // 跳过显示\n    }\n\n    // 清除之前的定时器\n    const existingTimer = messageTimers.get(message)\n    if (existingTimer) {\n      clearTimeout(existingTimer)\n    }\n  }\n\n  // 显示消息并更新缓存\n  ElMessage.warning(message)\n  messageCache.set(message, now)\n\n  // 设置新的定时器并存储ID\n  const timer = setTimeout(() => {\n    messageCache.delete(message)\n    messageTimers.delete(message)\n  }, CACHE_DURATION)\n\n  messageTimers.set(message, timer)\n}\n\n// 统一错误处理\nexport function handleError(error: ErrorResponse): Promise<never> {\n  const status = error.response?.status || 500\n  let resData = error.response?.data\n  try {\n    if (resData && typeof resData === 'string') {\n      resData = JSON.parse(resData)\n    }\n  } catch (error) {\n    resData = {}\n  }\n  const code = resData?.code\n  const data = resData?.data\n  let message = resData?.message\n\n  const messageMatch = RESPONSE_MESSAGE_MAP.get(message || '')\n  if (messageMatch) {\n    if (messageMatch === 'not_tip') message = ''\n    else message = window.$t(messageMatch)\n  } else {\n    // 优化消息获取逻辑\n    // 先看错误集里有没有转换的信息提示，\n    // 然后再是错误信息显示，\n    // 如果没有则Code相关的错误提示，最后是错误信\n    message =\n      (data !== undefined && RESPONSE_DATA_MESSAGE_MAP.get(data)\n        ? window.$t(RESPONSE_DATA_MESSAGE_MAP.get(data))\n        : '') ||\n      message ||\n      error.message ||\n      (code !== undefined && RESPONSE_CODE_MESSAGE_MAP.get(code)\n        ? window.$t(RESPONSE_CODE_MESSAGE_MAP.get(code))\n        : '') ||\n      (ERROR_MESSAGES.get(status) ? window.$t(ERROR_MESSAGES.get(status)) : '') ||\n      error.message ||\n      window.$t('response_message.unknown_error')\n  }\n\n  // 使用带去重功能的消息显示\n  if (message && code !== ResponseCode.UNAUTHORIZED_ERROR) {\n    showMessage(message)\n  }\n\n  if (code === ResponseCode.TOKEN_EXPIRED_ERROR || code === ResponseCode.UNAUTHORIZED_ERROR) {\n    localStorage.removeItem('access_token')\n    localStorage.removeItem('site_token')\n    window.location.reload(true)\n  }\n  return Promise.reject(error)\n}\n\n// 清理所有消息缓存和定时器（可选，用于应用退出时清理）\nexport function clearMessageCache(): void {\n  // 清理所有定时器\n  for (const timer of messageTimers.values()) {\n    clearTimeout(timer)\n  }\n\n  // 清空缓存\n  messageCache.clear()\n  messageTimers.clear()\n}\n"
  },
  {
    "path": "web/console/src/api/index.ts",
    "content": "export * from './modules/common'\nexport * from './modules/setting'\nexport * from './modules/domain'\nexport * from './modules/channel'\nexport * from './modules/order'\nexport * from './modules/provider'\nexport * from './modules/subscription'\nexport * from './modules/agent'\nexport * from './modules/ai-link'\nexport * from './modules/auth'\nexport * from './modules/template-style'\nexport * from './modules/user'\nexport * from './modules/department'\nexport * from './modules/enterprise'\n"
  },
  {
    "path": "web/console/src/api/modules/agent.ts",
    "content": "import { BACKEND_AGENT_TYPE, getAgentByAgentType, AGENT_TYPES } from '@/constants/platform/config'\nimport service from '../config'\nimport { handleError } from '../errorHandler'\nimport { AGENT_TYPE, type AgentType } from '@/constants/platform'\n\nexport { AGENT_TYPE, type AgentType }\n\ninterface AgentData {\n  user_group_ids?: string | number[]\n  tools?: string | any[]\n  use_cases?: string | any[]\n  configs?: string | Record<string, any>\n  custom_config?:\n    | string\n    | {\n        agent_type?: string\n        channel_config?: Record<string, any>\n      }\n  backend_agent_type?: number\n  agent_type?: string\n  agent_type_label?: string\n  channel_type?: number\n  enable?: boolean | number | string\n  sort?: number | string\n  channel_config?: Record<string, any>\n  agents?: AgentData[]\n  count?: number\n  settings?: Record<string, any>\n  internal_members?: string[]\n}\n\ninterface ListParams {\n  offset?: number\n  limit?: number\n  keyword?: string\n  group_id?: string\n  channel_types?: string\n  agent_types?: string\n}\n\ninterface SaveParams {\n  agent_id?: number\n  channel_type?: number\n  group_id?: number\n  configs?: Record<string, any> | string\n  logo?: string\n  name?: string\n  description?: string\n  model?: string\n  prompt?: string\n  sort?: number\n  tools?: any[] | string\n  use_cases?: any[] | string\n  user_group_ids?: number[]\n  custom_config?: Record<string, any> | string\n  settings?: Record<string, any> | string\n  enable?: boolean\n}\n\ninterface SaveRequestData\n  extends Omit<SaveParams, 'configs' | 'tools' | 'use_cases' | 'custom_config'> {\n  configs: string\n  tools: string\n  use_cases: string\n  custom_config: string\n  settings: string\n}\n\nexport interface RawCozeWorkspaceItem {\n  id: string\n  name: string\n  icon_url: string\n  role_type: string\n  workspace_type: string\n}\n\nexport interface CozeWorkspaceItem extends RawCozeWorkspaceItem {\n  value: string\n  label: string\n  icon: string\n}\n\nexport interface Raw53aiBotItem {\n  bot_id: string\n  name: string\n  logo: string\n  description: string\n  opening_statement: string\n  suggested_questions: string[]\n}\n\nexport interface RawCozeBotItem {\n  bot_id: string\n  bot_name: string\n  description: string\n  icon_url: string\n}\n\nexport interface RawTencentAppItem {\n  AppType: string\n  AppTypeDesc: string\n  AppBizId: string\n  Name: string\n  Avatar: string\n  Desc: string\n  AppStatus: number\n  AppStatusDesc: string\n  UpdateTime: string\n  Operator: string\n  ModelAliasName: string\n  Pattern: string\n  ThoughtModelAliasName: string\n  PermissionIds: string[]\n  Creator: string\n}\n\nexport interface CozeBotItem extends RawCozeBotItem {\n  value: string\n  label: string\n  icon: string\n}\n\nexport interface RawAppBuilderBotItem {\n  id: string\n  name: string\n  description: string\n  appType: string\n  isPublished: boolean\n  updateTime: number\n}\n\nexport interface AppBuilderBotItem extends RawAppBuilderBotItem {\n  value: string\n  label: string\n  icon: string\n}\n\nexport interface BotItem53aiItem extends Raw53aiBotItem {\n  value: string\n  label: string\n  icon: string\n}\nexport interface TencentAppItem extends RawTencentAppItem {\n  value: string\n  label: string\n  icon: string\n  description: string\n}\n\nexport const transformCozeBotItem = (item: RawCozeBotItem): CozeBotItem => {\n  return {\n    ...item,\n    value: item.bot_id,\n    label: item.bot_name,\n    icon: item.icon_url,\n  }\n}\n\nexport const transformAppBuilderBotItem = (item: RawAppBuilderBotItem): AppBuilderBotItem => {\n  return {\n    ...item,\n    value: item.id,\n    label: item.name,\n    icon: getAgentByAgentType(AGENT_TYPES.APP_BUILDER).icon,\n  }\n}\n\nexport const transformCozeWorkspaceItem = (item: RawCozeWorkspaceItem): CozeWorkspaceItem => {\n  return {\n    ...item,\n    value: item.id,\n    label: item.name,\n    icon: item.icon_url,\n  }\n}\n\nexport const transform53aiBotItem = (item: Raw53aiBotItem): BotItem53aiItem => {\n  return {\n    ...item,\n    value: item.bot_id,\n    label: item.name,\n    icon: item.logo,\n  }\n}\n\nexport const transformTencentAppItem = (item: RawTencentAppItem): TencentAppItem => {\n  return {\n    ...item,\n    value: item.AppBizId,\n    label: item.Name,\n    icon: item.Avatar,\n    description: item.Desc,\n  }\n}\n\nconst parseJsonField = <T>(value: string | T, defaultValue: T): T => {\n  if (typeof value !== 'string') return value ?? defaultValue\n\n  try {\n    return JSON.parse(value) ?? defaultValue\n  } catch {\n    return defaultValue\n  }\n}\n\nexport function getFormatAgentData(data: AgentData = {}): AgentData {\n  data.user_group_ids = parseJsonField(data.user_group_ids, [])\n  data.user_group_ids = [...new Set(data.user_group_ids)]\n  data.tools = parseJsonField(data.tools, [])\n  data.use_cases = parseJsonField(data.use_cases, [])\n  data.configs = parseJsonField(data.configs, {})\n  data.custom_config = parseJsonField(data.custom_config, {})\n  data.settings = parseJsonField(data.settings, {})\n  data.backend_agent_type = data.agent_type || BACKEND_AGENT_TYPE.AGENT\n  data.agent_type = (data.custom_config as any)?.agent_type || AGENT_TYPE.PROMPT\n  data.agent_type_label = `agent_app.${data.agent_type}`\n\n  data.enable = !!+(data.enable ?? false)\n  data.sort = +(data.sort ?? 0)\n  data.channel_config = (data.custom_config as any)?.channel_config || {}\n  data.internal_members = []\n  return data\n}\n\nexport const agentApi = {\n  async list(\n    { params = {} as ListParams }: { params: ListParams } = { params: {} }\n  ): Promise<AgentData> {\n    params = JSON.parse(JSON.stringify(params))\n    params.offset = params.offset ?? 0\n    params.limit = params.limit ?? 10\n    params.group_id = !params.group_id || +params.group_id < 1 ? '0' : params.group_id\n\n    if (!params.keyword) delete params.keyword\n\n    if (!params.channel_types) delete params.channel_types\n\n    const { data = {} } = await service.get('/api/agents/group', { params }).catch(handleError)\n    const result = data as AgentData\n    result.agents = (result.agents || []).map(item => getFormatAgentData(item))\n    result.count = +(result.count ?? 0)\n    return result\n  },\n\n  async save({ data = {} as SaveParams } = {}): Promise<AgentData> {\n    const saveData: SaveParams = {\n      agent_id: 0,\n      channel_type: 0,\n      group_id: 0,\n      configs: {},\n      logo: '',\n      name: '',\n      description: '',\n      model: '',\n      prompt: '',\n      sort: 0,\n      tools: [],\n      use_cases: [],\n      user_group_ids: [],\n      custom_config: {},\n      settings: {},\n      enable: true,\n      ...data,\n    }\n\n    const agent_id = +(saveData.agent_id ?? 0)\n    delete saveData.agent_id\n\n    const requestData: SaveRequestData = {\n      ...saveData,\n      configs:\n        typeof saveData.configs === 'object'\n          ? JSON.stringify(saveData.configs)\n          : (saveData.configs as string),\n      tools: Array.isArray(saveData.tools)\n        ? JSON.stringify(saveData.tools)\n        : (saveData.tools as string),\n      use_cases: Array.isArray(saveData.use_cases)\n        ? JSON.stringify(saveData.use_cases)\n        : (saveData.use_cases as string),\n      custom_config:\n        typeof saveData.custom_config === 'object'\n          ? JSON.stringify(saveData.custom_config)\n          : (saveData.custom_config as string),\n      settings:\n        typeof saveData.settings === 'object'\n          ? JSON.stringify(saveData.settings)\n          : (saveData.settings as string),\n    }\n\n    if (typeof requestData.enable === 'undefined') requestData.enable = true\n\n    const { data: result = {} } = await service[agent_id ? 'put' : 'post'](\n      `/api/agents${agent_id ? `/${agent_id}` : ''}`,\n      requestData\n    ).catch(handleError)\n    return getFormatAgentData(result)\n  },\n\n  async delete({ data: { agent_id } }: { data: { agent_id: number } }) {\n    return service.delete(`/api/agents/${agent_id}`).catch(handleError)\n  },\n\n  async detail({ data: { agent_id } }: { data: { agent_id: number } }) {\n    const { data = {} } = await service.get(`/api/agents/${agent_id}`).catch(handleError)\n    return getFormatAgentData(data)\n  },\n\n  coze: {\n    workspaces_list(params?: { provider_id?: number }): Promise<RawCozeWorkspaceItem[]> {\n      return service\n        .get('/api/coze/workspaces', { params })\n        .then(res => res.data)\n        .catch(handleError)\n    },\n    bots_list(workspace_id: string, params?: { provider_id?: number }): Promise<RawCozeBotItem[]> {\n      return service\n        .get(`/api/coze/workspaces/${workspace_id}/bots`, { params })\n        .then(res => res.data || [])\n        .catch(handleError)\n    },\n  },\n  appbuilder: {\n    bots_list(params?: { provider_id?: number }): Promise<RawAppBuilderBotItem[]> {\n      return service\n        .get('/api/appbuilder/bots', { params })\n        .then(res => res.data || [])\n        .catch(handleError)\n    },\n  },\n\n  chat53ai: {\n    bots_list(params?: { provider_id?: number }) {\n      return service\n        .get('/api/53ai/bots', { params })\n        .then(res => res.data)\n        .catch(handleError)\n    },\n    workflow_list(params?: { provider_id?: number }) {\n      return service\n        .get('/api/53ai/workflows', { params })\n        .then(res => res.data)\n        .catch(handleError)\n    },\n    workflow_field_list(botId: string, params?: { provider_id?: number }) {\n      return service\n        .get(`/api/53ai/parameters/${botId}`, { params })\n        .then(res => res.data)\n        .catch(handleError)\n    },\n  },\n\n  dify: {\n    workflow_field_list(workflow_id: string) {\n      return service\n        .get(`/api/dify/parameters/${workflow_id}`)\n        .then(res => res.data)\n        .catch(handleError)\n    },\n  },\n\n  tencent: {\n    bots_list(params?: { provider_id?: number }) {\n      return service\n        .get('/api/tencent/apps', { params })\n        .then(res => res.data)\n        .catch(handleError)\n    },\n    detail(app_biz_id: string) {\n      return service\n        .get(`/api/tencent/apps/${app_biz_id}`)\n        .then(res => res.data)\n        .catch(handleError)\n    },\n  },\n\n  async updateStatus({\n    data: { agent_id, enable },\n  }: {\n    data: { agent_id: number; enable: boolean }\n  }) {\n    return service.patch(`/api/agents/${agent_id}/status`, { enable }).catch(handleError)\n  },\n}\n\nexport default agentApi\n"
  },
  {
    "path": "web/console/src/api/modules/agents/index.ts",
    "content": "import service from '../../config'\nimport { handleError } from '../../errorHandler'\n\nexport interface RawAgentInfo {\n  agent_id: number\n  eid: number\n  name: string\n  logo: string\n  sort: number\n  description: string\n  channel_type: number\n  model: string\n  prompt: string\n  configs: string\n  tools: string\n  group_id: number\n  use_cases: string\n  created_by: number\n  custom_config: string\n  settings: string\n  user_group_ids: number[]\n  enable: boolean\n  conversation_count: number\n  agent_type: number\n  created_time: number\n  updated_time: number\n}\n\nexport interface AgentInfo\n  extends Omit<RawAgentInfo, 'settings' | 'tools' | 'use_cases' | 'custom_config' | 'configs'> {\n  settings: Record<string, any>\n  tools: Record<string, any>\n  use_cases: Record<string, any>\n  custom_config: Record<string, any>\n  configs: Record<string, any>\n}\n\ninterface AgentInfoResponse {\n  agents: RawAgentInfo[]\n  count: number\n}\n\ninterface AgentInfoRequest {\n  channel_type: number\n  group_id: number\n  configs: string\n  logo: string\n  name: string\n  description: string\n  model: string\n  prompt: string\n  sort: number\n  tools: string\n  use_cases: string\n  user_group_ids: number[]\n  custom_config: string\n  settings: string\n  enable: boolean\n  agent_type: number\n  subscription_group_ids: number[]\n}\n\ninterface RawAgentModelInfo {\n  agent_id: number\n  channel_id: number\n  channel_type: number\n  created_time: number\n  eid: number\n  id: number\n  model: string\n  updated_time: number\n}\n\ninterface RawAgentModelRequest {\n  channel_id: number\n  channel_type: number\n  model: string\n}\n\ninterface AgentModelResponse {\n  agent_models: RawAgentModelInfo[]\n  count: number\n}\n\nconst agentsApi = {\n  group(params: {\n    group_id: number\n    keyword?: string\n    offset?: number\n    limit?: number\n  }): Promise<AgentInfoResponse> {\n    return service\n      .get('/api/agents/group', { params })\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  create(data: AgentInfoRequest): Promise<RawAgentInfo> {\n    return service\n      .post('/api/agents', data)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  update(agent_id: RawAgentInfo['agent_id'], data: AgentInfoRequest) {\n    return service\n      .put(`/api/agents/${agent_id}`, data)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  delete(agent_id: RawAgentInfo['agent_id']) {\n    return service.delete(`/api/agents/${agent_id}`).catch(handleError)\n  },\n  models: {\n    list(agent_id: RawAgentInfo['agent_id']): Promise<AgentModelResponse> {\n      return service\n        .get(`/api/agents/${agent_id}/models`)\n        .then(res => res.data)\n        .catch(handleError)\n    },\n    batch(data: { agent_id: RawAgentInfo['agent_id']; models: RawAgentModelRequest[] }) {\n      return service\n        .post('/api/agents/models/batch', data)\n        .then(res => res.data)\n        .catch(handleError)\n    },\n    create(agent_id: RawAgentInfo['agent_id'], data: RawAgentModelRequest) {\n      return service\n        .get(`/api/agents/${agent_id}/models`, { params: data })\n        .then(res => res.data)\n        .catch(handleError)\n    },\n    update(agent_id: RawAgentInfo['agent_id'], model_id: number, data: RawAgentModelRequest) {\n      return service\n        .put(`/api/agents/${agent_id}/models/${model_id}`, { params: data })\n        .then(res => res.data)\n        .catch(handleError)\n    },\n    delete(agent_id: RawAgentInfo['agent_id'], model_id: number) {\n      return service\n        .delete(`/api/agents/${agent_id}/models/${model_id}`)\n        .then(res => res.data)\n        .catch(handleError)\n    },\n  },\n}\n\nexport default agentsApi\n"
  },
  {
    "path": "web/console/src/api/modules/agents/transform.ts",
    "content": "import { RawAgentInfo, AgentInfo } from './index'\nimport { JSONParse } from '@/utils'\n\nexport const transformAgentInfo = (agent: RawAgentInfo): AgentInfo => {\n  return {\n    ...agent,\n    settings: JSONParse(agent.settings, {}),\n    tools: JSONParse(agent.tools, []),\n    use_cases: JSONParse(agent.use_cases, []),\n    custom_config: JSONParse(agent.custom_config, {}),\n    configs: JSONParse(agent.configs, {}),\n  }\n}\n"
  },
  {
    "path": "web/console/src/api/modules/agents/types.ts",
    "content": ""
  },
  {
    "path": "web/console/src/api/modules/ai-link.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const getFormatAiLinkData = (data = {}) => {\n  data.ai_link_id = data.id = +data.id || 0\n  return data\n}\n\nexport const aiLinkApi = {\n  async list({\n    params = {},\n  }: {\n    params: {\n      group_id?: number\n      keyword?: string\n    }\n  } = {}) {\n    params = JSON.parse(JSON.stringify(params))\n    if (!+params.group_id || +params.group_id < 0) delete params.group_id\n    if (!params.keyword) delete params.keyword\n    const { data = [] } = await service.get('/api/ai_links', { params }).catch(handleError)\n    const list = data.map((item = {}) => getFormatAiLinkData(item))\n    return list\n  },\n  async save({ data = {} } = {}) {\n    data = {\n      ai_link_id: 0,\n      logo: '',\n      name: '',\n      url: '',\n      description: '',\n      group_id: 0,\n      sort: 0,\n      user_group_ids: [],\n      subscription_group_ids: [],\n      shared_account: '',\n      ...data,\n    }\n    const { ai_link_id } = data\n    delete data.ai_link_id\n    const { data: resultData = {} } = await service[ai_link_id ? 'put' : 'post'](\n      `/api/ai_links${ai_link_id ? `/${ai_link_id}` : ''}`,\n      data\n    ).catch(handleError)\n    return getFormatAiLinkData(resultData)\n  },\n  delete({ data: { ai_link_id } }: { data: { ai_link_id: number } }) {\n    return service.delete(`/api/ai_links/${ai_link_id}`).catch(handleError)\n  },\n  store() {\n    return service.get('/api/ai_links/default').catch(handleError)\n  },\n  sort({ items = [] }: { items: { group_id: number; id: number; sort: number }[] }) {\n    return service.post('/api/ai_links/batch/sort', { items }).catch(handleError)\n  },\n  detail(id: number) {\n    return service.get(`api/ai_links/${id}`).catch(handleError)\n  },\n}\n\nexport default aiLinkApi\n"
  },
  {
    "path": "web/console/src/api/modules/auth.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nconst checkAccountMap = new Map()\n\nexport const authApi = {\n  // async list({ params = {} }: {\n  // \tparams: {\n  // \t\tgroup_id?: number\n  // \t\tkeyword?: string\n  // \t}\n  // } = {}) {\n  // \tparams = JSON.parse(JSON.stringify(params))\n  // \tif (!+params.group_id || +params.group_id < 0) delete params.group_id\n  // \tif (!params.keyword) delete params.keyword\n  // \tconst { data = [] } = await service.get('/api/ai_links', { params }).catch(handleError)\n  // \tconst list = data.map((item = {}) => getFormatAiLinkData(item))\n  // \treturn list\n  // },\n  async checkAccount({ data = {} } = {}) {\n    data = {\n      account: '',\n      ...data\n    }\n    if (checkAccountMap.has(data.account)) return checkAccountMap.get(data.account)\n    const { data: resultData = {} } = await service\n      .post(`/api/saas/auth/check_account`, data)\n      .catch(handleError)\n    checkAccountMap.set(data.account, resultData)\n    return resultData\n  }\n  // async delete({ data: { ai_link_id } }: { data: { ai_link_id: number } }) {\n  // \treturn service.delete(`/api/ai_links/${ai_link_id}`).catch(handleError)\n  // },\n}\n\nexport default authApi\n"
  },
  {
    "path": "web/console/src/api/modules/banner/index.ts",
    "content": "import service from '@/api/config'\nimport { handleError } from '@/api/errorHandler'\n\nimport type { Banner, RawBanner } from './types'\n\nexport const bannerApi = {\n  get(): Promise<RawBanner> {\n    return service\n      .get('/api/enterprises/banner')\n      .then(res => res.data.banner)\n      .catch(handleError)\n  },\n  async save(data: Banner) {\n    return service\n      .put('/api/enterprises/banner', { banner: JSON.stringify(data) })\n      .catch(handleError)\n  },\n}\n\nexport default bannerApi\n"
  },
  {
    "path": "web/console/src/api/modules/banner/transform.ts",
    "content": "import { BANNER_CONFIG } from '@/constants/banner'\nimport type { Banner, RawBanner } from './types'\n\nexport const getDefaultBanner = (): Banner => ({\n  url_list: [],\n  interval: BANNER_CONFIG.DEFAULT_INTERVAL,\n})\n\nexport function transformBanner(rawBanner: RawBanner): Banner {\n  try {\n    const banner = JSON.parse(rawBanner)\n    return {\n      url_list: banner.url_list,\n      interval: banner.interval,\n    }\n  } catch (error) {\n    return getDefaultBanner()\n  }\n}\n"
  },
  {
    "path": "web/console/src/api/modules/banner/types.ts",
    "content": "export interface Banner {\n  url_list: string[]\n  interval: number\n}\n\nexport type RawBanner = string\n"
  },
  {
    "path": "web/console/src/api/modules/channel/index.ts",
    "content": "import service from '@/api/config'\nimport { handleError } from '@/api/errorHandler'\nimport { getModelByChannelType, ModelValue } from '@/constants/platform/config'\n\nexport interface RawModelOption {\n  categories: Array<{\n    model_count: number\n    model_type: number\n    models: Array<{\n      model_id: string\n      model_name: string\n    }>\n  }>\n  platform_id: string\n  platform_name: string\n  channel_type: number\n  can_multiple: boolean\n}\n\nexport interface ModelOption extends RawModelOption {\n  icon: string\n  categories: Array<{\n    icon: string\n    model_type: number\n    model_type_name: string\n    models: Array<{ icon: string; model_id: string; model_name: string }>\n  }>\n}\n\nexport interface ChannelRequestData {\n  base_url: string\n  config: string\n  key: string\n  custom_config: string\n  model_mapping: string\n  model_type: number\n  models: string\n  name: string\n  other: string\n  priority: number\n  provider_id: number\n  type: number\n  weight: number\n}\n\nexport interface RawChannelItem {\n  channel_id: number\n  eid: number\n  type: ModelValue\n  key: string\n  weight: number\n  name: string\n  models: string\n  config: string\n  custom_config: string\n  other: string\n  model_mapping: string\n  priority: number\n  base_url: string\n  used_quota: number\n  status: number\n  balance: number\n  balance_updated_time: number\n  test_time: number\n  response_time: number\n  provider_id: number\n  created_time: number\n  updated_time: number\n}\n\nexport interface ChannelItem extends RawChannelItem {\n  icon: string\n  name: string\n  label: string\n  custom_config: Record<string, any>\n  config: Record<string, any>\n  channel_type: number\n  models: string[]\n  group: Array<{\n    type: number\n    typeName: string\n    options: Array<{\n      value: string\n      type: number\n      typeName: string\n      label: string\n      icon: string\n    }>\n  }>\n  aliasMap: Record<string, string>\n  options: Array<{\n    value: string\n    label: string\n    icon: string\n  }>\n}\n\nexport interface ChannelTestResponse {\n  success: boolean\n  message: string\n  time: number\n}\n\nexport const getModelIcon = (value: string) => {\n  let icon = ''\n  if (/deepseek/i.test(value)) icon = 'deepseek'\n  else if (/tongyi|qwen/i.test(value)) icon = 'tongyi'\n  else if (/thudm/i.test(value)) icon = 'zhipu'\n  else if (/ai\\/yi/i.test(value)) icon = 'yi'\n  else if (/internlm/i.test(value)) icon = 'internlm'\n  else if (/baai/i.test(value)) icon = 'baai'\n  else if (/google/i.test(value)) icon = 'google'\n  else if (/mistralai/i.test(value)) icon = 'mistralai'\n  else if (/llama/i.test(value)) icon = 'llama'\n\n  return icon ? window.$getRealPath({ url: `/images/platform/${icon}.png` }) : ''\n}\n\nexport const transformChannelData = (data: RawChannelItem): ChannelItem => {\n  const model = getModelByChannelType(data.type) || {}\n\n  const config = (typeof data.config === 'string' ? JSON.parse(data.config) : data.config) || {}\n  const custom_config =\n    typeof data.custom_config === 'string' && data.custom_config\n      ? JSON.parse(data.custom_config)\n      : data.custom_config || {}\n\n  const models = typeof data.models === 'string' ? data.models.split(',') : data.models || []\n  const model_alias_map = (config.model_alias_map || {}) as Record<string, string>\n\n  const options = models.map(value => {\n    const type = custom_config[value] || 0\n    return {\n      value,\n      type,\n      typeName: type === '1' ? '推理' : type === '2' ? '嵌入' : '重排序',\n      label: model_alias_map[value] || value,\n      icon:\n        getModelIcon(value) || window.$getRealPath({ url: `/images/platform/${model.icon}.png` }),\n    }\n  })\n  const group = options.reduce((acc, item) => {\n    const data = acc.find(row => row.type === item.type)\n    if (data) {\n      data.options.push(item)\n    } else {\n      acc.push({\n        type: item.type,\n        typeName: item.typeName,\n        options: [item],\n      })\n    }\n    return acc\n  }, [])\n  return {\n    ...data,\n    icon: window.$getRealPath({ url: `/images/platform/${model.icon}.png` }),\n    // name: model.name,\n    label: window.$t(`provider_platform.${model.name}`),\n    channel_type: data.type,\n    custom_config,\n    config,\n    models,\n    aliasMap: model_alias_map,\n    group,\n  }\n}\n\nexport const transformSelectData = (data: RawChannelItem, type?: string): ChannelItem => {\n  const result = transformChannelData(data)\n  let models = result.models\n  if (type) {\n    models = models.filter(item => result.custom_config[item] === type)\n  }\n  return {\n    ...result,\n    options: models.map(value => {\n      return {\n        value: `${data.channel_id}_${value}`,\n        model_value: `${data.channel_id}_${value}_${data.type}`,\n        label: result.aliasMap[value] || value,\n        icon: getModelIcon(value) || result.icon,\n      }\n    }),\n  }\n}\n\nexport const transformModelList = (data: RawModelOption[]): ModelOption[] => {\n  return data.map(item => {\n    return {\n      ...item,\n      icon: window.$getRealPath({ url: `/images/platform/${item.platform_id}.png` }),\n      channel_type: item.channel_type,\n      categories: item.categories.map(cate => {\n        return {\n          ...cate,\n          model_type_name:\n            cate.model_type === 1\n              ? '逻辑推理模型'\n              : cate.model_type === 2\n                ? '向量嵌入模型'\n                : '重排序模型',\n          models: cate.models.map(model => {\n            return {\n              ...model,\n              icon: getModelIcon(model.model_id),\n            }\n          }),\n        }\n      }),\n    }\n  })\n}\n\nexport const channelApi = {\n  models: {\n    config(): Promise<RawModelOption[]> {\n      return service\n        .get('/api/channels/km/models')\n        .then(res => res.data.platforms)\n        .catch(handleError)\n    },\n  },\n  listv2(): Promise<RawChannelItem[]> {\n    return service\n      .get('/api/channels')\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  create(data: ChannelRequestData) {\n    return service.post('/api/channels', data).catch(handleError)\n  },\n  update(channel_id: number, data: ChannelRequestData) {\n    return service.put(`/api/channels/${channel_id}`, data).catch(handleError)\n  },\n\n  delete(channel_id: number) {\n    return service.delete(`/api/channels/${channel_id}`).catch(handleError)\n  },\n  test(channel_id: number, params?: { model?: string }): Promise<ChannelTestResponse> {\n    return service\n      .get(`/api/channels/test/${channel_id}`, { params })\n      .then(res => res.data ?? res)\n      .catch(handleError)\n  },\n}\n\nexport default channelApi\n"
  },
  {
    "path": "web/console/src/api/modules/channel/transform.ts",
    "content": ""
  },
  {
    "path": "web/console/src/api/modules/channel/types.ts",
    "content": ""
  },
  {
    "path": "web/console/src/api/modules/channel.ts",
    "content": "import { ElMessageBox } from 'element-plus'\nimport service from '../config'\nimport { handleError } from '../errorHandler'\nimport {\n  CHANNEL_TYPE,\n  CHANNEL_TYPE_ICON_MAP,\n  CHANNEL_TYPE_LABEL_MAP,\n  CHANNEL_TYPE_OPTIONS,\n  CHANNEL_TYPE_VALUE_MAP,\n  type ChannelType,\n} from '@/constants/platform'\n\nexport {\n  CHANNEL_TYPE,\n  CHANNEL_TYPE_LABEL_MAP,\n  CHANNEL_TYPE_ICON_MAP,\n  CHANNEL_TYPE_VALUE_MAP,\n  CHANNEL_TYPE_OPTIONS,\n  type ChannelType,\n}\n\nexport interface ModelOption {\n  categories: Array<{\n    model_count: number\n    model_type: number\n    models: Array<{\n      model_id: string\n      model_name: string\n    }>\n  }>\n  platform_id: string\n  platform_name: string\n  channel_type: number\n  can_multiple: boolean\n}\n\nexport interface ChannelRequestData {\n  base_url: string\n  config: string\n  key: string\n  custom_config: string\n  model_mapping: string\n  model_type: number\n  models: string\n  name: string\n  other: string\n  priority: number\n  provider_id: number\n  type: number\n  weight: number\n}\n\nexport interface RawChannelItem {\n  channel_id: number\n  eid: number\n  type: number\n  key: string\n  weight: number\n  name: string\n  models: string\n  config: string\n  custom_config: string\n  other: string\n  model_mapping: string\n  priority: number\n  base_url: string\n  used_quota: number\n  status: number\n  balance: number\n  balance_updated_time: number\n  test_time: number\n  response_time: number\n  provider_id: number\n  created_time: number\n  updated_time: number\n}\n\nexport interface ChannelItem extends RawChannelItem {\n  icon: string\n  custom_config: Record<string, any>\n  config: Record<string, any>\n  channel_id: number\n  models: string[]\n}\n\ninterface ModelConfig {\n  id: string\n  vision?: boolean\n  provider: ChannelType\n}\n\ninterface ChannelData {\n  value?: number\n  channel_id?: number\n  channel_type?: number | string\n  type?: string | number\n  name?: string\n  id?: string\n  label?: string\n  icon?: string\n  key?: string\n  api_key?: string\n  base_url?: string\n  config?: any\n  models?: string[] | string\n  model_options?: Array<{\n    value: string\n    label: string\n    icon: string\n    vision: boolean\n  }>\n  modelOptions?: Array<{\n    value: string\n    label: string\n    icon: string\n    vision: boolean\n  }>\n  owned_by?: string\n  priority?: number\n  weight?: number\n  model_mapping?: string\n}\n\ninterface ModelItem {\n  id: string\n  icon?: string\n  label?: string\n  owned_by?: string\n  value?: string\n}\n\nexport const OPEN_AI_MODEL_LIST: ModelConfig[] = [\n  // 'gpt-4',\n  { provider: CHANNEL_TYPE.OPENAI, id: 'gpt-4.1', vision: true },\n  { provider: CHANNEL_TYPE.OPENAI, id: 'gpt-4.1-mini', vision: true },\n  { provider: CHANNEL_TYPE.OPENAI, id: 'gpt-4o', vision: true },\n  { provider: CHANNEL_TYPE.OPENAI, id: 'gpt-4o-mini', vision: true },\n  { provider: CHANNEL_TYPE.OPENAI, id: 'o1', vision: true },\n  { provider: CHANNEL_TYPE.OPENAI, id: 'o1-mini' },\n]\n\nexport const SILICON_FLOW_MODEL_LIST: ModelConfig[] = [\n  { provider: CHANNEL_TYPE.SILICONFLOW, id: 'Qwen/Qwen3-8B', vision: false },\n  { provider: CHANNEL_TYPE.SILICONFLOW, id: 'Qwen/Qwen2.5-7B-Instruct' },\n  { provider: CHANNEL_TYPE.SILICONFLOW, id: 'deepseek-ai/DeepSeek-R1' },\n  { provider: CHANNEL_TYPE.SILICONFLOW, id: 'deepseek-ai/DeepSeek-V3', vision: false },\n  { provider: CHANNEL_TYPE.SILICONFLOW, id: 'THUDM/glm-4-9b-chat' },\n]\n\nexport const DEEP_SEEK_MODEL_LIST: ModelConfig[] = [\n  { provider: CHANNEL_TYPE.DEEPSEEK, id: 'deepseek-chat', vision: false },\n  { provider: CHANNEL_TYPE.DEEPSEEK, id: 'deepseek-reasoner' },\n]\n\nexport const ALL_MODEL_LIST = [\n  ...OPEN_AI_MODEL_LIST,\n  ...SILICON_FLOW_MODEL_LIST,\n  ...DEEP_SEEK_MODEL_LIST,\n]\n\nexport const MODEL_ALIAS_MAP = new Map([\n  ['deepseek-chat', 'DeepSeek-V3'],\n  ['deepseek-reasoner', 'DeepSeek-R1'],\n])\n\nexport const getModelIcon = ({ value = '' }: { value: string }) => {\n  let icon = ''\n  if (/deepseek/i.test(value)) icon = 'deepseek'\n  else if (/tongyi|qwen/i.test(value)) icon = 'tongyi'\n  else if (/thudm/i.test(value)) icon = 'zhipu'\n  else if (/ai\\/yi/i.test(value)) icon = 'yi'\n  else if (/internlm/i.test(value)) icon = 'internlm'\n  else if (/baai/i.test(value)) icon = 'baai'\n  else if (/google/i.test(value)) icon = 'google'\n  else if (/mistralai/i.test(value)) icon = 'mistralai'\n  else if (/llama/i.test(value)) icon = 'llama'\n\n  return icon\n}\n\nexport const getFormatChannelData = (data: ChannelData = {}) => {\n  const channelId = data.channel_id || 0\n  data.value = channelId\n  data.channel_id = channelId\n  data.channel_type = data.channel_type || data.type || 0\n  data.type = data.name || data.id || ''\n  data.channel_type =\n    data.channel_type || Number(CHANNEL_TYPE_VALUE_MAP.get(data.type || '') || 0) || 0\n  data.name = data.name || ''\n  data.label = CHANNEL_TYPE_LABEL_MAP.get(data.channel_type) || data.name || ''\n  data.icon = CHANNEL_TYPE_ICON_MAP.get(data.channel_type) || ''\n  data.api_key = data.key || ''\n  data.base_url = data.base_url || ''\n  try {\n    data.config = typeof data.config === 'string' ? JSON.parse(data.config) : data.config || {}\n  } catch (error) {\n    data.config = {}\n  }\n  data.models = typeof data.models === 'string' ? data.models.split(',') : data.models || []\n  const model_alias_map = (data.config?.model_alias_map || {}) as Record<string, string>\n\n  data.model_options = (Array.isArray(data.models) ? data.models : []).map(value => ({\n    value,\n    label: model_alias_map[value] || MODEL_ALIAS_MAP.get(value) || value,\n    icon: getModelIcon({ value }) || data.icon || '',\n    vision: ALL_MODEL_LIST.find(item => item.id === value)?.vision || false,\n  }))\n  data.modelOptions = (Array.isArray(data.models) ? data.models : []).map(value => ({\n    value,\n    label: model_alias_map[value] || MODEL_ALIAS_MAP.get(value) || value,\n    icon: getModelIcon({ value }) || data.icon || '',\n    vision: ALL_MODEL_LIST.find(item => item.id === value)?.vision || false,\n  }))\n\n  return data\n}\n\nexport const channelApi = {\n  async list(\n    {\n      params = {},\n    }: {\n      params: {\n        provider_id?: number\n        channel_types?: string\n      }\n    } = { params: {} }\n  ) {\n    params = JSON.parse(JSON.stringify(params))\n    const { data = [] } = await service.get('/api/channels', { params }).catch(handleError)\n    const list = data.map((item: ChannelData = {}) => getFormatChannelData(item))\n    return list\n  },\n\n  async save({ data = {} }: { data: ChannelData } = { data: {} }) {\n    data = {\n      channel_id: 0,\n      key: '',\n      base_url: '',\n      config: {},\n      model_mapping: '',\n      models: '',\n      name: '',\n      priority: 0,\n      type: 0,\n      weight: 0,\n      ...data,\n    }\n    if (!data.type) {\n      data.type = CHANNEL_TYPE_VALUE_MAP.get(data.name || '') || 0\n      if (!data.type) return Promise.reject(new Error('Invalid channel type'))\n    }\n    const { channel_id } = data\n    delete data.channel_id\n    if (typeof data.config === 'object') {\n      if (data.config.model_alias_map) {\n        const models = typeof data.models === 'string' ? data.models.split(',') : data.models || []\n        Object.keys(data.config.model_alias_map).forEach(key => {\n          if (!models.includes(key)) delete data.config.model_alias_map[key]\n        })\n        if (!Object.keys(data.config.model_alias_map).length) delete data.config.model_alias_map\n      }\n      data.config = JSON.stringify(data.config)\n    }\n    if (Array.isArray(data.models)) data.models = data.models.join(',')\n    const { data: resultData = {} } = await service[channel_id ? 'put' : 'post'](\n      `/api/channels${channel_id ? `/${channel_id}` : ''}`,\n      data\n    ).catch(handleError)\n    return getFormatChannelData(resultData)\n  },\n\n  async delete({ data: { channel_id } }: { data: { channel_id: number } }) {\n    return service.delete(`/api/channels/${channel_id}`).catch(handleError)\n  },\n\n  async modelList({ params: { owner = 'all' } }: { params: { owner: string } }) {\n    const { data: { models = [] } = {} } = await service\n      .get('/api/channels/models', { params: { owner } })\n      .catch(handleError)\n    let list = models.map((item: ModelItem) => {\n      const id = item.id || item.value || ''\n      return {\n        ...item,\n        id,\n        icon: item.icon || getModelIcon({ value: id }) || '',\n        label: item.label || MODEL_ALIAS_MAP.get(id) || '',\n      }\n    })\n    // #ifndef KM\n    list = list.filter(\n      item =>\n        ![CHANNEL_TYPE.OPENAI, CHANNEL_TYPE.SILICONFLOW, CHANNEL_TYPE.DEEPSEEK].includes(\n          item.owned_by as ChannelType\n        )\n    )\n    const manual_list = [\n      ...OPEN_AI_MODEL_LIST.map(model => ({\n        value: model.id,\n        id: model.id,\n        label: model.id,\n        icon: CHANNEL_TYPE.OPENAI,\n        owned_by: CHANNEL_TYPE.OPENAI,\n        vision: model.vision,\n      })),\n      ...SILICON_FLOW_MODEL_LIST.map(model => ({\n        value: model.id,\n        id: model.id,\n        label: model.id,\n        icon: getModelIcon({ value: model.id }) || CHANNEL_TYPE.SILICONFLOW || '',\n        owned_by: CHANNEL_TYPE.SILICONFLOW,\n        vision: model.vision,\n      })),\n      ...DEEP_SEEK_MODEL_LIST.map(model => ({\n        value: model.id,\n        id: model.id,\n        label: MODEL_ALIAS_MAP.get(model.id) || model.id,\n        icon: CHANNEL_TYPE.DEEPSEEK,\n        owned_by: CHANNEL_TYPE.DEEPSEEK,\n        vision: model.vision,\n      })),\n    ]\n    list.push(...manual_list)\n    // #endif\n    return list\n  },\n\n  async cozeWorkspaceList() {\n    const { data = [] } = await service.get('/api/coze/workspaces').catch((error: any = {}) => {\n      const { response: { data: { code } = {} } = {} } = error\n      if ([13].includes(+code)) {\n        ElMessageBox.confirm(\n          (window as any).$t('coze_cn_not_auth', (window as any).$t('tip')),\n          (window as any).$t('tip'),\n          {\n            confirmButtonText: (window as any).$t('action_go'),\n            type: 'warning',\n            closeOnClickModal: false,\n            showClose: false,\n            showCancelButton: false,\n          }\n        ).then(() => {\n          location.hash = '#/platform'\n        })\n        return Promise.reject(error)\n      }\n      return handleError(error)\n    })\n    return data\n  },\n\n  async cozeBotList(\n    {\n      params: { workspace_id } = { workspace_id: 0 },\n    }: {\n      params: { workspace_id: number }\n    } = { params: { workspace_id: 0 } }\n  ) {\n    const { data = [] } = await service\n      .get(`/api/coze/workspaces/${workspace_id}/bots`)\n      .catch(handleError)\n    return data\n  },\n\n  async appBuilderBotList() {\n    const { data = [] } = await service.get('/api/appbuilder/bots').catch(handleError)\n    return data\n  },\n\n  async chat53aiAgentList() {\n    const { data = [] } = await service.get('/api/53ai/bots').catch(handleError)\n    return data\n  },\n  async chat53aiWorkflowList() {\n    const { data = [] } = await service.get('/api/53ai/workflows').catch(handleError)\n    return data\n  },\n  models: {\n    config(): Promise<ModelOption[]> {\n      return service\n        .get('/api/channels/km/models')\n        .then(res => res.data.platforms)\n        .catch(handleError)\n    },\n  },\n  listv2(): Promise<RawChannelItem[]> {\n    return service\n      .get('/api/channels')\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  create(data: ChannelRequestData) {\n    return service.post('/api/channels', data).catch(handleError)\n  },\n  update(channel_id: number, data: ChannelRequestData) {\n    return service.put(`/api/channels/${channel_id}`, data).catch(handleError)\n  },\n}\n\nexport default channelApi\n"
  },
  {
    "path": "web/console/src/api/modules/chunk-setting.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport interface ChunkSetting {\n  chunking_config: {\n    common_questions: {\n      generation_method: string\n    }\n    content_summary: {\n      generation_method: string\n    }\n    index_chunking: {\n      include_title: true\n      include_filename: true\n      max_length: number\n      overlap_size: number\n      split_rule: string\n      chunk_mode: string\n    }\n    knowledge_chunking: {\n      include_title: true\n      include_filename: true\n      max_length: number\n      overlap_size: number\n      split_rule: string\n      chunk_mode: string\n    }\n    version: string\n  }\n  created_time: number\n  eid: number\n  file_id: number\n  id: number\n  library_id: number\n  updated_time: number\n}\n\nexport interface ModelSetting {\n  created_time: number\n  eid: number\n  file_id: number\n  id: number\n  library_id: number\n  model_config: {\n    version: string\n    logic_reasoning: {\n      channel_id: number | null\n      channel_type: number | null\n      model_name: string | null\n    }\n    vector_embedding: {\n      channel_id: number | null\n      channel_type: number | null\n      model_name: string | null\n    }\n    search_config: {\n      vector: boolean\n      fulltext: boolean\n      hybrid: boolean\n      rerank_model: string\n      rerank_channel_id: number\n      rerank_channel_type: number\n      rerank_model_name: string\n      reranking_enable: boolean\n      top_k: number\n      score_threshold: number\n      score_threshold_enabled: boolean\n      weights: {\n        keyword_setting: {\n          keyword_weight: number\n        }\n        vector_setting: {\n          vector_weight: number\n        }\n      }\n    }\n  }\n  updated_time: number\n}\n\nexport const chunkSettingApi = {\n  list() {\n    return service.get('/api/chunk-settings/list').catch(handleError)\n  },\n  channels: {\n    list() {\n      return service.get('/api/chunk-settings/channels').catch(handleError)\n    },\n  },\n  chunkingConfig: {\n    get(): Promise<ChunkSetting> {\n      return service\n        .get('/api/chunk-settings/chunking-config/site')\n        .then(res => res.data)\n        .catch(handleError)\n    },\n    update(data: { chunking_config: ChunkSetting['chunking_config'] }) {\n      return service.put('/api/chunk-settings/chunking-config/site', data).catch(handleError)\n    },\n  },\n  modelConfig: {\n    get(): Promise<ModelSetting> {\n      return service\n        .get('/api/chunk-settings/model-config/site')\n        .then(res => res.data)\n        .catch(handleError)\n    },\n    update(data: { model_config: ModelSetting['model_config'] }) {\n      return service.put('/api/chunk-settings/model-config/site', data).catch(handleError)\n    },\n  },\n\n  // default: {\n  //   get(): Promise<ChunkSetting> {\n  //     return service\n  //       .get('/api/chunk-settings/default')\n  //       .then(res => res.data)\n  //       .catch(handleError)\n  //   },\n  //   update(data: Partial<ChunkSetting>) {\n  //     return service.put('/api/chunk-settings/default', data).catch(handleError)\n  //   },\n  // },\n}\n\nexport default chunkSettingApi\n"
  },
  {
    "path": "web/console/src/api/modules/common.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport { qyy_host } from '@/utils/config'\n\nexport const commonApi = {\n  sendcode(data: { mobile: string; source: '53ai' }) {\n    return service\n      .post(`${qyy_host}/v3/users/sendcode`, data, {\n        code_sign: true,\n        baseURL: '',\n      })\n      .catch(handleError)\n  },\n  verifycode(data: { mobile: string; verifycode: string; type: '1' }) {\n    return service\n      .post(`${qyy_host}/v4/xbot/checkverificationcode`, data, {\n        ibos_sign: true,\n        baseURL: '',\n      })\n      .then(res => {\n        if (res.code !== 0) return Promise.reject({ response: { data: res } })\n\n        return res\n      })\n      .catch(handleError)\n  },\n  sendEmailCode(data: { email: string }) {\n    return service.post('/api/email/send_verification', data).catch(handleError)\n  },\n  verifyEmailcode(data: { email: string; code: string }, id: string) {\n    return service\n      .patch(`/api/users/${id}/email`, data)\n      .then(res => {\n        if (res.code !== 0) {\n          return Promise.reject({ response: { data: res } })\n        }\n        return res\n      })\n      .catch(handleError)\n  },\n}\nexport default commonApi\n"
  },
  {
    "path": "web/console/src/api/modules/conversation.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const conversationApi = {\n  fetch_agent_conversations(params: {\n    agent_id: number\n    keyword?: string\n    created_at_start?: number\n    created_at_end?: number\n    offset?: number\n    limit?: number\n  }) {\n    const { agent_id } = params\n    delete params.agent_id\n    return service.get(`/api/agents/${agent_id}/conversations`, { params }).catch(handleError)\n  },\n  fetch_user_conversations(params: {\n    user_id: number\n    keyword?: string\n    created_at_start?: number\n    created_at_end?: number\n    offset?: number\n    limit?: number\n  }) {\n    const { user_id } = params\n    delete params.user_id\n    return service.get(`/api/users/${user_id}/conversations`, { params }).catch(handleError)\n  },\n  fetch_conversation_detail(conversation_id: number) {\n    return service.get(`/api/conversations/${conversation_id}`).catch(handleError)\n  },\n  workflow: {\n    run(\n      data: {\n        conversation_id: number\n        model: string\n        parameters: {\n          [key: string]: any\n        }\n        stream: boolean\n      },\n      options: {\n        responseType: 'stream'\n        onDownloadProgress: (e: any) => void\n        signal: AbortSignal\n      }\n    ) {\n      return service.post('/v1/workflow/run', data, options).catch(handleError)\n    },\n  },\n}\n\nexport default conversationApi\n"
  },
  {
    "path": "web/console/src/api/modules/department.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport { useEnterpriseStore } from '@/stores'\nimport { ENTERPRISE_SYNC_FROM, type EnterpriseSyncFrom } from '@/constants/enterprise'\n\nexport const getRootDepartmentData = async () => {\n  const enterpriseStore = useEnterpriseStore()\n  if (!enterpriseStore.info.eid) await enterpriseStore.loadSelfInfo()\n  return {\n    did: 0,\n    value: 0,\n    name: enterpriseStore.info.name,\n    label: enterpriseStore.info.name,\n    index: 0,\n    lastIndex: 0,\n    children: [],\n  }\n}\n\nexport const departmentApi = {\n  async fetch_department_tree(\n    params: {\n      from: EnterpriseSyncFrom\n      keyword?: string\n      offset?: number\n      limit?: number\n    } = {\n      from: '0',\n    }\n  ) {\n    let {\n      data: { tree: treeData = [] },\n    } = await service.get('/api/departments/tree', { params }).catch(handleError)\n    const findData = (data: any = {}) => {\n      data = {\n        ...data,\n        children: data.children || [],\n        ...(data.department || {}),\n      }\n      data.label = data.name || ''\n      data.value = data.did || 0\n      data.children = data.children.map((item, index) => {\n        item = findData(item)\n        item.index = index\n        item.lastIndex = data.children.length - 1\n        return item\n      })\n      return data\n    }\n    treeData = treeData.map((item, index) => {\n      item = findData(item)\n      item.index = index\n      item.lastIndex = treeData.length - 1\n      return item\n    })\n    const rootData = await getRootDepartmentData()\n    return [\n      {\n        ...rootData,\n        bind_value: '0',\n        children: JSON.parse(JSON.stringify(treeData)),\n      },\n    ]\n  },\n  async save(data: { did?: number; name: string; pdid?: number; sort?: number }) {\n    data = JSON.parse(JSON.stringify(data))\n    const did = data.did || 0\n    delete data.did\n    if (typeof data.sort === 'undefined') data.sort = 999999\n    if (!data.pdid) data.pdid = 0\n    return await service[did ? 'put' : 'post'](\n      `/api/departments${did ? `/${did}` : ''}`,\n      data\n    ).catch(handleError)\n  },\n\n  async delete(did: number) {\n    return await service.delete(`/api/departments/${did}`).catch(handleError)\n  },\n  tree(from: EnterpriseSyncFrom) {\n    return service.get('/api/departments/tree', { params: { from } }).catch(handleError)\n  },\n  sync(\n    from: EnterpriseSyncFrom,\n    data = {\n      suite_id: from === ENTERPRISE_SYNC_FROM.WECOM ? import.meta.env.VITE_GLOB_SUITEID : '',\n    }\n  ) {\n    return service.post(`/api/departments/sync/${from}`, data).catch(handleError)\n  },\n  bind_member(data: { bid: number; user_id: number; from: EnterpriseSyncFrom }) {\n    return service.post('/api/departments/bind-member', data).catch(handleError)\n  },\n  unbind_member(data: { user_id: number; from: EnterpriseSyncFrom }) {\n    return service.delete('/api/departments/bind-member', { data }).catch(handleError)\n  },\n  sync_progress(from: EnterpriseSyncFrom) {\n    return service.get(`/api/sync-progress/${from}`).catch(handleError)\n  },\n}\n\nexport default departmentApi\n"
  },
  {
    "path": "web/console/src/api/modules/dingtalk.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const dingtalkApi = {\n  /**\n   * 发起钉钉OAuth2授权，对接调试用，实际授权需要在体验企业点击授权\n   * @param uri 授权成功后跳转的URL\n   */\n  dingtalkOauth2(params: { redirect_uri: string }) {\n    return service\n      .get(`/api/saas/dingtalk/oauth2/start`, {\n        params: { ...params, access_token: localStorage.getItem('access_token') },\n      })\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  // 钉钉成员搜索\n  contact_search(data: { keyword: string }) {\n    return service\n      .post(`/api/saas/dingtalk/contact-search`, {\n        offest: 0,\n        query_word: data.keyword,\n        size: 0,\n      })\n      .then(res => res.data?.list ?? [])\n      .catch(handleError)\n  },\n}\n\nexport default dingtalkApi\n"
  },
  {
    "path": "web/console/src/api/modules/domain/index.ts",
    "content": "import service from '@/api/config'\nimport { handleError } from '@/api/errorHandler'\n\nimport type { RawDomainListResponse, ExclusiveDomainData, IndependentDomainData } from './types'\n\n/**\n * 域名管理 API\n */\nexport const domainApi = {\n  /**\n   * 获取域名列表\n   */\n  list(): Promise<RawDomainListResponse> {\n    return service\n      .get('/api/saas/domains')\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  /**\n   * 创建专属域名\n   */\n  createExclusive(data: ExclusiveDomainData) {\n    return service.post('/api/saas/domains/exclusive', data).catch(handleError)\n  },\n\n  /**\n   * 更新专属域名\n   */\n  updateExclusive(domainId: number, data: ExclusiveDomainData) {\n    return service.put(`/api/saas/domains/exclusive/${domainId}`, data).catch(handleError)\n  },\n\n  /**\n   * 创建独立域名\n   */\n  createIndependent(data: IndependentDomainData) {\n    return service.post('/api/saas/domains/independent', data).catch(handleError)\n  },\n\n  /**\n   * 更新独立域名\n   */\n  updateIndependent(domainId: number, data: IndependentDomainData) {\n    return service.put(`/api/saas/domains/independent/${domainId}`, data).catch(handleError)\n  },\n\n  /**\n   * 删除独立域名\n   */\n  deleteIndependent(domainId: number) {\n    return service.delete(`/api/saas/domains/independent/${domainId}`).catch(handleError)\n  },\n\n  /**\n   * 检查域名是否存在\n   */\n  checkIsDomainExists(subdomain: string) {\n    return service\n      .get(`/api/saas/domains/check?subdomain=${subdomain}`)\n      .then(res => res.data)\n      .catch(err => console.log(err))\n  },\n}\n\nexport default domainApi\n"
  },
  {
    "path": "web/console/src/api/modules/domain/transform.ts",
    "content": "import {\n  DOMAIN_CONFIG,\n  INDEPENDENT_RESOLVE_TYPE,\n  INDEPENDENT_SSL_CERT_TYPE,\n} from '@/constants/domain'\nimport type {\n  DomainListResponse,\n  RawDomainListResponse,\n  IndependentDomainConfig,\n  IndependentDomainData,\n  ExclusiveDomainData,\n  DomainConfig,\n  DomainData,\n} from './types'\nimport { useEnv } from '@/hooks/useEnv'\n\nconst { isDevEnv } = useEnv()\n\n/**\n * 获取默认的独立域名配置\n */\nexport const getDefaultIndependentConfig = (): IndependentDomainConfig => ({\n  resolve_type: INDEPENDENT_RESOLVE_TYPE.CNAME,\n  enable_https: DOMAIN_CONFIG.DEFAULT_ENABLE_HTTPS,\n  force_https: DOMAIN_CONFIG.DEFAULT_FORCE_HTTPS,\n  ssl_cert_type: INDEPENDENT_SSL_CERT_TYPE['53AI'],\n  ssl_certificate: '',\n  ssl_private_key: '',\n  use_subdir: DOMAIN_CONFIG.DEFAULT_USE_SUBDIR,\n  subdir: DOMAIN_CONFIG.DEFAULT_SUBDIR,\n})\n\n/**\n * 获取默认的独立域名数据\n */\nexport const getDefaultIndependentDomain = (): IndependentDomainData => ({\n  domain: '',\n  config: getDefaultIndependentConfig(),\n})\n\n/**\n * 获取默认的专属域名数据\n */\nexport const getDefaultExclusiveDomain = (): ExclusiveDomainData => ({\n  domain: '',\n})\n\n/**\n * 转换域名列表响应数据\n */\nexport function transformDomainList(rawData: RawDomainListResponse): DomainListResponse {\n  try {\n    return {\n      exclusive_domains: rawData.exclusive_domains || [],\n      independent_domains: rawData.independent_domains || [],\n    }\n  } catch (error) {\n    console.error('转换域名列表数据失败:', error)\n    return {\n      exclusive_domains: [],\n      independent_domains: [],\n    }\n  }\n}\n\n/**\n * 验证独立域名配置\n */\nexport function validateIndependentConfig(config: Partial<IndependentDomainConfig>): boolean {\n  // 如果启用 HTTPS 且使用自定义证书，则必须提供证书和私钥\n  if (config.enable_https && config.ssl_cert_type === INDEPENDENT_SSL_CERT_TYPE.CUSTOM) {\n    return !!(config.ssl_certificate && config.ssl_private_key)\n  }\n\n  // 如果使用子目录，则必须提供子目录名称\n  if (config.use_subdir) {\n    return !!(config.subdir && config.subdir.trim())\n  }\n\n  return true\n}\n\n/**\n * 格式化域名（移除协议前缀等）\n */\nexport function formatDomain(domain: string): string {\n  return domain\n    .replace(/^https?:\\/\\//, '') // 移除协议前缀\n    .replace(/\\/$/, '') // 移除末尾斜杠\n    .toLowerCase() // 转为小写\n    .trim()\n}\n\n// 专属域名数据处理\nexport function processExclusiveDomainData(domainData: DomainData) {\n  if (domainData.domain) {\n    let domainName = domainData.domain\n      .trim()\n      .replace(/^https?:\\/\\//, '')\n      .replace(/\\.53ai\\.com$/, '')\n\n    if (isDevEnv.value) {\n      domainName = domainName.replace(/\\.hub$/, '')\n      return `https://${domainName}${isDevEnv.value ? '.hub' : ''}.53ai.com`\n    }\n  }\n  return ''\n}\n\n// 独立域名数据处理\nexport function processIndependentDomainData(domainData: DomainData) {\n  const rawData = { ...domainData }\n\n  // 解析配置\n  let config: DomainConfig = {}\n  if (domainData.config) {\n    try {\n      config =\n        typeof domainData.config === 'string' ? JSON.parse(domainData.config) : domainData.config\n    } catch (error) {\n      console.error('解析独立域名配置失败:', error)\n      config = {}\n    }\n  }\n\n  rawData.config = config\n\n  // 处理域名信息\n  const domainName = (domainData.domain || '').trim().replace(/^https?:\\/\\//, '')\n  const httpsEnabled = Boolean(Number(config.enable_https))\n\n  if (!domainName) return ''\n  return `http${httpsEnabled ? 's' : ''}://${domainName}`\n}\n"
  },
  {
    "path": "web/console/src/api/modules/domain/types.ts",
    "content": "import type { IndependentResolveType, IndependentSslCertType } from '@/constants/domain'\n\n/**\n * 域名基础信息\n */\nexport interface DomainInfo {\n  domain_id?: number\n  domain: string\n  status?: number\n  created_time?: string\n  updated_time?: string\n}\n\n/**\n * 独立域名配置\n */\nexport interface IndependentDomainConfig {\n  resolve_type: IndependentResolveType\n  enable_https: boolean\n  force_https: boolean\n  ssl_cert_type: IndependentSslCertType\n  ssl_certificate: string\n  ssl_private_key: string\n  use_subdir: boolean\n  subdir: string\n}\n\n/**\n * 独立域名数据\n */\nexport interface IndependentDomainData {\n  domain: string\n  config: IndependentDomainConfig\n}\n\n/**\n * 专属域名数据\n */\nexport interface ExclusiveDomainData {\n  domain: string\n}\n\n/**\n * 域名列表响应\n */\nexport interface DomainListResponse {\n  exclusive_domains?: DomainInfo[]\n  independent_domains?: DomainInfo[]\n}\n\n/**\n * 原始域名列表响应（从 API 返回）\n */\nexport type RawDomainListResponse = any\n\nexport type DomainConfig = {\n  enable_https?: string | number\n  [key: string]: unknown\n}\n\nexport type DomainData = {\n  id?: number\n  domain?: string\n  domain_name?: string\n  config?: string | DomainConfig\n  [key: string]: unknown\n}\n\nexport type IndependentDomainInfo = {\n  httpsEnabled: boolean\n  domainName: string\n  rawData: DomainInfo\n}\n"
  },
  {
    "path": "web/console/src/api/modules/enterprise.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const enterpriseApi = {\n  enterprise_config(type: 'smtp' | 'auth_sso') {\n    return service.get(`/api/enterprise-configs/${type}`).catch(handleError)\n  },\n  save_enterprise_config(type: 'smtp' | 'auth_sso', params: { content: string; enabled: boolean }) {\n    return service.post(`/api/enterprise-configs/${type}`, params).catch(handleError)\n  },\n  toggle_enterprise_config(type: 'smtp' | 'auth_sso') {\n    return service.put(`/api/enterprise-configs/${type}/toggle`).catch(handleError)\n  },\n}\n\nexport default enterpriseApi\n"
  },
  {
    "path": "web/console/src/api/modules/group.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport { GroupType, ResourceType, RESOURCE_TYPE } from '@/constants/group'\n\nexport interface Group {\n  group_id: number\n  group_name: string\n  sort: number\n}\n\nexport const DEFAULT_GROUP_DATA = {\n  group_id: -Date.now(),\n  group_name: '',\n  sort: 0,\n}\n\ninterface RequestType {\n  resource_ids: number[]\n  resource_type: ResourceType\n}\n\nexport const groupApi = {\n  async list({\n    params = {},\n  }: {\n    params: {\n      group_type: GroupType\n    }\n  } = {}) {\n    params = JSON.parse(JSON.stringify(params))\n    const { group_type } = params\n    delete params.group_type\n    const { data = [] } = await service\n      .get(`/api/groups/type/${group_type}`, { params })\n      .catch(handleError)\n    return data\n  },\n  async save({\n    data: { group_type, groups },\n  }: {\n    data: { group_type: GroupType; groups: Group[] }\n  }) {\n    const { data = {} } = await service\n      .post(`/api/groups/type/${group_type}`, { groups })\n      .catch(handleError)\n    return data\n  },\n  async single_save(data: {\n    group_id?: number\n    group_name?: string\n    group_type?: GroupType\n    sort?: number\n  }) {\n    const group_id = +data.group_id || 0\n    delete data.group_id\n    const { data: resultData = {} } = await service[group_id ? 'put' : 'post'](\n      `/api/groups${group_id ? `/${group_id}` : ''}`,\n      data\n    ).catch(handleError)\n    return resultData\n  },\n  async delete({ data: { group_id } }: { data: { group_id: number } }) {\n    return service.delete(`/api/groups/${group_id}`).catch(handleError)\n  },\n\n  async user_list(params: {\n    params: {\n      group_id: number\n      keyword?: string\n      offset?: number\n      limit?: number\n    }\n  }) {\n    const group_id = +params.group_id || 0\n    delete params.group_id\n    const { data: resultData = {} } = await service\n      .get(`/api/groups/${group_id}/users`, { params })\n      .catch(handleError)\n    return {\n      total: +resultData.total || 0,\n      list: (resultData.permissions || []).map((item = {}) => {\n        item.permission_id = +item.permission_id || +item.id || 0\n        item.user = item.user || {}\n        item.department = item.department || {}\n\n        item = {\n          ...item,\n          ...item.user,\n          ...item.department,\n        }\n        item.departments = item.departments || []\n        item.dept_id_list = item.departments.map(item => +item.did).filter(did => did)\n        item.dept_names = item.departments.map(item => item.name).join(',')\n        if (item.resource_type === 'department') {\n          item.dept_id_list = [+item.department.did]\n          item.dept_names = item.department.name || ''\n        }\n\n        return item\n      }),\n    }\n  },\n\n  async remove_user(data: { group_id: number; permission_ids: number[] }) {\n    const group_id = +data.group_id || 0\n    delete data.group_id\n    return service.delete(`/api/groups/${group_id}/users`, { data }).catch(handleError)\n  },\n  async batch_add_user(data: { group_id: number; department_ids: number[]; user_ids: number[] }) {\n    const group_id = +data.group_id || 0\n    delete data.group_id\n    if (!data.department_ids) data.department_ids = []\n    if (!data.user_ids) data.user_ids = []\n    return service.post(`/api/groups/${group_id}/users/batch`, data).catch(handleError)\n  },\n  async agent_list(params: {\n    params: {\n      group_id: number\n      keyword?: string\n      offset?: number\n      limit?: number\n    }\n  }) {\n    const group_id = +params.group_id || 0\n    delete params.group_id\n    const { data: resultData = {} } = await service\n      .get(`/api/groups/${group_id}/agents`, { params })\n      .catch(handleError)\n    return {\n      total: +resultData.count || 0,\n      list: (resultData.agents || []).map((item = {}) => {\n        item.value = +item.agent_id || 0\n        item.label = item.name || ''\n        return item\n      }),\n    }\n  },\n  async batch_add_agent(data: { group_id: number; agent_ids: number[] }) {\n    const group_id = +data.group_id || 0\n    delete data.group_id\n    if (!data.agent_ids) data.agent_ids = []\n    return service.post(`/api/groups/${group_id}/agents`, data).catch(handleError)\n  },\n  async remove_agent(data: { group_id: number; agent_ids: number[] }) {\n    const group_id = +data.group_id || 0\n    delete data.group_id\n    return service.delete(`/api/groups/${group_id}/agents`, { data }).catch(handleError)\n  },\n  async resource_list(data: {\n    id: number\n    params: {\n      keyword?: string\n      offset?: number\n      limit?: number\n      resource_type?: ResourceType\n    }\n  }) {\n    const id = +data.id || 0\n    const { data: resultData = {} } = await service\n      .get(`/api/groups/${id}/resources`, { params: data.params })\n      .catch(handleError)\n    const list =\n      data.params.resource_type === RESOURCE_TYPE.AGENT ? resultData.agents : resultData.resources\n    return {\n      total: +resultData.count || 0,\n      list: (list || []).map((item = {}) => {\n        const value =\n          data.params.resource_type === RESOURCE_TYPE.AGENT\n            ? +item.agent_id\n            : data.params.resource_type === RESOURCE_TYPE.PROMPT\n              ? +item.prompt_id\n              : +item.id\n        item.value = value || 0\n        item.label = item.name || ''\n        return item\n      }),\n    }\n  },\n  async batch_add_resource(data: { id: number; request: RequestType }) {\n    const id = +data.id || 0\n    return service.post(`/api/groups/${id}/resources`, data.request).catch(handleError)\n  },\n  async remove_resource(data: { id: number; request: RequestType }) {\n    const id = +data.id || 0\n    return service.delete(`/api/groups/${id}/resources`, { data: data.request }).catch(handleError)\n  },\n}\n\nexport default groupApi\n"
  },
  {
    "path": "web/console/src/api/modules/libraries/index.ts",
    "content": "import service from '@/api/config'\nimport { handleError } from '@/api/errorHandler'\n\nimport type { LibraryListResponse, LibraryListRequest, LibraryCreateRequest } from './types'\n\nexport const librariesApi = {\n  list(params: LibraryListRequest): Promise<LibraryListResponse> {\n    return service\n      .get('/api/libraries', { params })\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  create(data: LibraryCreateRequest) {\n    return service.post('/api/libraries', data).catch(handleError)\n  },\n\n  update(library_id: number, data: LibraryCreateRequest) {\n    return service.put(`/api/libraries/${library_id}`, data).catch(handleError)\n  },\n\n  delete(library_id: number) {\n    return service.delete(`/api/libraries/${library_id}`).catch(handleError)\n  },\n}\n\nexport default librariesApi\n"
  },
  {
    "path": "web/console/src/api/modules/libraries/transform.ts",
    "content": "import type { LibraryItem, LibraryDisplayItem } from './types'\nimport { getSimpleDateFormatString } from '@/utils/moment'\n\nexport const transformLibraryItem = (item: LibraryItem): LibraryDisplayItem => ({\n  ...item,\n  created_time: getSimpleDateFormatString({\n    date: item.created_time,\n    format: 'YYYY-MM-DD hh:mm',\n  }),\n  updated_time: getSimpleDateFormatString({\n    date: item.updated_time,\n    format: 'YYYY-MM-DD hh:mm',\n  }),\n})\n\nexport const transformLibraryList = (items: LibraryItem[]): LibraryDisplayItem[] => {\n  return items.map(transformLibraryItem)\n}\n\nexport const getDefaultLibraryRequest = (space_id: number) => ({\n  space_id,\n  offset: 0,\n  limit: 10,\n  keyword: '',\n})\n"
  },
  {
    "path": "web/console/src/api/modules/libraries/types.ts",
    "content": "export interface LibraryItem {\n  id: number\n  eid: number\n  space_id: number\n  creator_id: number\n  name: string\n  icon: string\n  description: string\n  sort: number\n  status: number\n  created_time: number\n  updated_time: number\n}\n\nexport interface LibraryListResponse {\n  list: LibraryItem[]\n  total: number\n}\n\nexport interface LibraryListRequest {\n  space_id: number\n  offset: number\n  limit: number\n  keyword?: string\n}\n\nexport interface LibraryCreateRequest {\n  space_id: number\n  name: string\n  icon: string\n  description: string\n}\n\nexport interface LibraryDisplayItem extends Omit<LibraryItem, 'created_time' | 'updated_time'> {\n  created_time: string\n  updated_time: string\n}\n"
  },
  {
    "path": "web/console/src/api/modules/message.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const messageApi = {\n\tfetch_conversation_messages(params: {\n\t\tconversation_id : number\n\t\tkeyword?: string\n\t\tdirection?: 'desc' | 'asc'\n\t\toffset?: number\n\t\tlimit?: number\n\t}) {\n\t\tconst conversation_id  = params.conversation_id\n\t\tdelete params.conversation_id\n\t\treturn service.get(`/api/conversations/${conversation_id}/messages`, { params }).catch(handleError)\n\t},\n}\n\nexport default messageApi\n\nexport type { messageApi }\n"
  },
  {
    "path": "web/console/src/api/modules/navigation/index.ts",
    "content": "import service from '@/api/config'\nimport { handleError } from '@/api/errorHandler'\nimport { NAVIGATION_INIT_DATA } from '@/constants/navigation'\n\nimport type {\n  NavigationListParams,\n  CreateNavigationData,\n  UpdateNavigationData,\n  UpdateNavigationStatusData,\n  UpdateNavigationSortData,\n  SaveNavigationContentData,\n} from './types'\n\n/**\n * 导航管理 API\n */\nexport const navigationApi = {\n  /**\n   * 获取导航列表\n   */\n  list(params: NavigationListParams = {}) {\n    const cleanParams = JSON.parse(JSON.stringify(params))\n    return service\n      .get('/api/navigations', { params: cleanParams })\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  /**\n   * 初始化导航数据\n   */\n  init() {\n    return service.post('/api/navigations/init', [...NAVIGATION_INIT_DATA]).catch(handleError)\n  },\n\n  /**\n   * 获取导航详情\n   */\n  detail(navigation_id: number) {\n    return service\n      .get(`/api/navigations/${navigation_id}`)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  /**\n   * 创建导航\n   */\n  create(data: CreateNavigationData) {\n    const payload = {\n      ...data,\n      config: JSON.stringify(data.config),\n    }\n    return service.post('/api/navigations', payload).catch(handleError)\n  },\n\n  /**\n   * 更新导航\n   */\n  update(data: UpdateNavigationData) {\n    const payload = {\n      ...data,\n      config: JSON.stringify(data.config),\n    }\n    return service.put(`/api/navigations/${data.navigation_id}`, payload).catch(handleError)\n  },\n\n  /**\n   * 保存导航（创建或更新）\n   */\n  save(data: CreateNavigationData | UpdateNavigationData) {\n    if ('navigation_id' in data && data.navigation_id) {\n      return this.update(data as UpdateNavigationData)\n    }\n    return this.create(data as CreateNavigationData)\n  },\n\n  /**\n   * 删除导航\n   */\n  delete(navigation_id: number) {\n    return service.delete(`/api/navigations/${navigation_id}`).catch(handleError)\n  },\n\n  /**\n   * 更新导航状态\n   */\n  updateStatus(data: UpdateNavigationStatusData) {\n    return service\n      .patch(`/api/navigations/${data.navigation_id}/status`, { status: data.status })\n      .catch(handleError)\n  },\n\n  /**\n   * 更新导航排序\n   */\n  updateSort(sortList: UpdateNavigationSortData) {\n    return service.post('/api/navigations/sort', sortList).catch(handleError)\n  },\n\n  /**\n   * 保存导航内容\n   */\n  saveContent(data: SaveNavigationContentData) {\n    return service\n      .post(`/api/navigations/${data.navigation_id}/content`, {\n        html_content: data.html_content,\n      })\n      .catch(handleError)\n  },\n}\n\nexport default navigationApi\n"
  },
  {
    "path": "web/console/src/api/modules/navigation/transform.ts",
    "content": "import {\n  NAVIGATION_TYPE,\n  NAVIGATION_TYPE_LABEL_MAP,\n  NAVIGATION_TARGET,\n  NAVIGATION_TARGET_LABEL_MAP,\n} from '@/constants/navigation'\nimport type { NavigationItem, RawNavigationItem } from './types'\nimport { img_host } from '@/utils/config'\n\n/**\n * 获取默认的导航项配置\n */\nexport const getDefaultNavigationItem = (): Partial<NavigationItem> => ({\n  type: NAVIGATION_TYPE.EXTERNAL,\n  target: NAVIGATION_TARGET.SELF,\n  config: {\n    target: NAVIGATION_TARGET.SELF,\n    seo_title: '',\n    seo_keywords: '',\n    seo_description: '',\n  },\n  status: 1,\n  sort: 0,\n})\n\n/**\n * 转换单个导航项数据\n */\nexport function transformNavigationItem(rawItem: RawNavigationItem): NavigationItem {\n  try {\n    // 解析config字段\n    let config: any = {}\n    if (typeof rawItem.config === 'string') {\n      config = JSON.parse(rawItem.config)\n    } else if (typeof rawItem.config === 'object' && rawItem.config !== null) {\n      config = rawItem.config\n    }\n\n    // 确定type值\n    const type = (Number(rawItem.type) || Number(config.type) || NAVIGATION_TYPE.SYSTEM) as any\n\n    // 确定target值\n    const target = (Number(rawItem.target) ||\n      Number(config.target) ||\n      NAVIGATION_TARGET.SELF) as any\n\n    // 获取标签\n    const type_label = NAVIGATION_TYPE_LABEL_MAP.get(type)\n    const target_label = NAVIGATION_TARGET_LABEL_MAP.get(target)\n\n    let icon = rawItem.icon\n    // 系统页面图标固定\n    if (rawItem.type === 1) {\n      const pathIconMap: Record<string, number> = {\n        '/index': 1,\n        '/agent': 2,\n        '/prompt': 3,\n        '/toolkit': 4,\n      }\n      icon = `${img_host}/navigation/icon${pathIconMap[rawItem.jump_path]}.png`\n    } else if (rawItem.icon?.indexOf('default') !== -1) {\n      icon = `${img_host}/navigation/icon5.png`\n    }\n\n    return {\n      ...rawItem,\n      type,\n      type_label,\n      target,\n      target_label,\n      config: {\n        target,\n        seo_title: config.seo_title || '',\n        seo_keywords: config.seo_keywords || '',\n        seo_description: config.seo_description || '',\n        agent_id: config.agent_id,\n        agent_class_id: config.agent_class_id,\n      },\n      icon,\n    }\n  } catch (error) {\n    console.error('转换导航项数据失败:', error)\n    return {\n      ...rawItem,\n      ...getDefaultNavigationItem(),\n      type: NAVIGATION_TYPE.SYSTEM,\n      target: NAVIGATION_TARGET.SELF,\n      type_label: NAVIGATION_TYPE_LABEL_MAP.get(NAVIGATION_TYPE.SYSTEM),\n      target_label: NAVIGATION_TARGET_LABEL_MAP.get(NAVIGATION_TARGET.SELF),\n    } as NavigationItem\n  }\n}\n\n/**\n * 转换导航列表数据\n */\nexport function transformNavigationList(rawList: RawNavigationItem[]): NavigationItem[] {\n  try {\n    return rawList.map(item => transformNavigationItem(item))\n  } catch (error) {\n    console.error('转换导航列表数据失败:', error)\n    return []\n  }\n}\n"
  },
  {
    "path": "web/console/src/api/modules/navigation/types.ts",
    "content": "import type { NavigationType, NavigationTarget } from '@/constants/navigation'\n\n/**\n * 导航项配置\n */\nexport interface NavigationConfig {\n  target: NavigationTarget\n  seo_title: string\n  seo_keywords: string\n  seo_description: string\n  agent_id?: number\n  agent_class_id?: number\n}\n\n/**\n * 导航项（转换后的数据）\n */\nexport interface NavigationItem {\n  id: number\n  navigation_id: number\n  type: NavigationType\n  type_label?: string\n  name: string\n  jump_path: string\n  sort: number\n  status: 0 | 1\n  target: NavigationTarget\n  target_label?: string\n  config: NavigationConfig\n  created_at?: string\n  icon?: string\n}\n\n/**\n * 原始导航项（从 API 返回）\n */\nexport interface RawNavigationItem {\n  id: number\n  navigation_id: number\n  type: number | string\n  name: string\n  jump_path: string\n  sort: number\n  status: 0 | 1\n  target?: number | string\n  config: string | object\n  created_at?: string\n  updated_at?: string\n  icon?: string\n}\n\n/**\n * 导航列表查询参数\n */\nexport interface NavigationListParams {\n  keyword?: string\n  offset?: number\n  limit?: number\n}\n\n/**\n * 导航列表响应\n */\nexport interface NavigationListResponse {\n  total: number\n  list: NavigationItem[]\n}\n\n/**\n * 创建导航数据\n */\nexport interface CreateNavigationData {\n  type: NavigationType\n  name: string\n  jump_path: string\n  sort: number\n  config: NavigationConfig\n  icon: string\n}\n\n/**\n * 更新导航数据\n */\nexport interface UpdateNavigationData extends CreateNavigationData {\n  navigation_id: string\n}\n\n/**\n * 更新导航状态数据\n */\nexport interface UpdateNavigationStatusData {\n  navigation_id: number\n  status: 0 | 1\n}\n\n/**\n * 更新导航排序数据\n */\nexport type UpdateNavigationSortData = {\n  id: number\n  sort: number\n}[]\n\n/**\n * 保存导航内容数据\n */\nexport interface SaveNavigationContentData {\n  navigation_id: number\n  html_content: string\n}\n"
  },
  {
    "path": "web/console/src/api/modules/order.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport { getSimpleDateFormatString } from '@/utils/moment'\nimport { PaymentType, PAYMENT_TYPE } from '@/constants/payment'\n\nexport const orderApi = {\n  async list({\n    params = {}\n  }: {\n    params: {\n      status?: number\n      pay_type?: number\n      keyword?: string\n      offset?: number\n      limit?: number\n    }\n  } = {}) {\n    params = JSON.parse(JSON.stringify(params))\n    if (!params.offset) params.offset = 0\n    if (!params.limit) params.limit = 10\n    if (!params.keyword) delete params.keyword\n    const { data = {} } = await service.get('/api/orders', { params }).catch(handleError)\n    const list = (data.orders || []).map((item = {}) => {\n      item.created_time = +item.created_time\n      item.created_time = getSimpleDateFormatString({\n        date: item.created_time,\n        format: 'YYYY-MM-DD hh:mm:ss'\n      })\n      return item\n    })\n    return {\n      ...data,\n      list\n    }\n  },\n  async detail(params: { id: number }) {\n    const id = params.id || ''\n    delete params.id\n    return service.get(`/api/orders/${id}`).catch(handleError)\n  },\n  async confirm_order(data: { id: number }) {\n    const id = data.id || ''\n    delete data.id\n    return service.post(`/api/orders/${id}/confirm`).catch(handleError)\n  },\n  async delete_order(data: { id: number }) {\n    const id = data.id || ''\n    delete data.id\n    return service.delete(`/api/orders/${id}`).catch(handleError)\n  },\n  async save(data: {\n    id?: number\n    pay_type?: PaymentType\n    user_id: number\n    nickname: string\n    subscription_id: number\n    subscription_name: string\n    time_unit: string\n    duration: number\n    currency: string\n    amount: number\n  }) {\n    const id = data.id || ''\n    delete data.id\n    if (!data.pay_type) data.pay_type = PAYMENT_TYPE.MANUAL\n    return service[id ? 'put' : 'post'](`/api/orders${id ? `/${id}/manual` : ''}`, data).catch(\n      handleError\n    )\n  }\n}\n\nexport default orderApi\n"
  },
  {
    "path": "web/console/src/api/modules/payment/index.ts",
    "content": "/**\n * 支付设置API接口\n * 只包含HTTP请求调用，业务逻辑在transform中处理\n */\nimport service from '@/api/config'\nimport { handleError } from '@/api/errorHandler'\nimport type {\n  PaymentSettingListResponse,\n  SavePaymentSettingRequest,\n  UpdatePaymentStatusRequest,\n} from './types'\n\nexport const paymentApi = {\n  /**\n   * 获取支付设置列表\n   * @returns 支付设置列表响应\n   */\n  getPaymentSettings(): Promise<PaymentSettingListResponse> {\n    return service\n      .get('/api/pay_settings')\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  /**\n   * 保存支付设置\n   * @param data 支付设置数据\n   * @returns API响应\n   */\n  savePaymentSetting(data: SavePaymentSettingRequest) {\n    const { pay_setting_id, ...requestData } = data\n\n    return pay_setting_id\n      ? service\n          .patch(`/api/pay_settings/${pay_setting_id}/config`, {\n            pay_config: requestData.pay_config,\n            extra_config: requestData.extra_config,\n          })\n          .catch(handleError)\n      : service.post('/api/pay_settings', requestData).catch(handleError)\n  },\n\n  /**\n   * 更新支付状态\n   * @param pay_setting_id 支付设置ID\n   * @param data 状态更新数据\n   * @returns API响应\n   */\n  updatePaymentStatus(pay_setting_id: number, data: UpdatePaymentStatusRequest) {\n    return service.patch(`/api/pay_settings/${pay_setting_id}/status`, data).catch(handleError)\n  },\n}\n\nexport default paymentApi\n"
  },
  {
    "path": "web/console/src/api/modules/payment/transform.ts",
    "content": "/**\n * 支付设置数据转换逻辑\n */\nimport { getSimpleDateFormatString } from '@/utils/moment'\nimport { PAYMENT_TYPE, PAYMENT_TYPE_LABEL_MAP } from '@/constants/payment'\nimport type { PaymentType } from '@/constants/payment'\nimport type {\n  RawPaymentSetting,\n  PaymentSetting,\n  PaymentSettingListResponse,\n  PaymentSettingMap,\n} from './types'\n\n/**\n * 转换单个支付设置数据\n * @param rawItem 原始支付设置数据\n * @returns 处理后的支付设置数据\n */\nexport function transformPaymentSetting(rawItem: RawPaymentSetting): PaymentSetting {\n  const item: any = { ...rawItem }\n\n  // 转换ID和类型为数字\n  item.pay_setting_id = +item.pay_setting_id || 0\n  item.pay_type = +item.pay_type || 0\n\n  // 获取支付类型标签\n  item.pay_label = PAYMENT_TYPE_LABEL_MAP.get(item.pay_type as any) || 'payment.type.unknown'\n\n  // 转换状态为布尔值\n  item.pay_status = !!+item.pay_status\n\n  // 处理配置数据\n  item.pay_config = item.pay_config || '{}'\n  item.pay_config =\n    typeof item.pay_config === 'string' ? JSON.parse(item.pay_config) : item.pay_config\n\n  item.extra_config = item.extra_config || '{}'\n  item.extra_config =\n    typeof item.extra_config === 'string' ? JSON.parse(item.extra_config) : item.extra_config\n\n  // 处理时间格式\n  item.created_time = +item.created_time || 0\n  if (item.created_time) {\n    item.created_time = getSimpleDateFormatString({ date: item.created_time })\n  }\n\n  item.updated_time = +item.updated_time || 0\n  if (item.updated_time) {\n    item.updated_time = getSimpleDateFormatString({ date: item.updated_time })\n  }\n\n  return item as PaymentSetting\n}\n\n/**\n * 转换支付设置列表\n * @param rawData 原始支付设置列表响应\n * @returns 处理后的支付设置列表\n */\nexport function transformPaymentSettingList(rawData: PaymentSettingListResponse): PaymentSetting[] {\n  const { pay_settings = [] } = rawData\n  return pay_settings.map(transformPaymentSetting)\n}\n\n/**\n * 获取默认支付设置\n * @param payType 支付类型\n * @returns 默认支付设置\n */\nfunction getDefaultPaymentSetting(payType: PaymentType): PaymentSetting {\n  const label = PAYMENT_TYPE_LABEL_MAP.get(payType)\n\n  return {\n    pay_setting_id: 0,\n    pay_type: payType,\n    pay_label: label || '',\n    pay_status: false,\n    pay_config: {},\n    extra_config: {},\n    created_time: '',\n    updated_time: '',\n  }\n}\n\n/**\n * 将支付设置列表转换为按类型分组的映射\n * @param paymentSettings 支付设置列表\n * @returns 按支付类型分组的映射\n */\nexport function transformToPaymentSettingMap(paymentSettings: PaymentSetting[]): PaymentSettingMap {\n  const map: PaymentSettingMap = {\n    wechat: getDefaultPaymentSetting(PAYMENT_TYPE.WECHAT),\n    alipay: getDefaultPaymentSetting(PAYMENT_TYPE.ALIPAY),\n    manual: getDefaultPaymentSetting(PAYMENT_TYPE.MANUAL),\n    paypal: getDefaultPaymentSetting(PAYMENT_TYPE.PAYPAL),\n  }\n\n  paymentSettings.forEach(setting => {\n    switch (setting.pay_type) {\n      case PAYMENT_TYPE.WECHAT:\n        map.wechat = setting\n        break\n      case PAYMENT_TYPE.ALIPAY:\n        map.alipay = setting\n        break\n      case PAYMENT_TYPE.MANUAL:\n        map.manual = setting\n        break\n      case PAYMENT_TYPE.PAYPAL:\n        map.paypal = setting\n        break\n    }\n  })\n\n  return map\n}\n\n/**\n * 准备保存支付设置的数据\n * @param data 支付设置数据\n * @returns 格式化后的保存数据\n */\nexport function prepareSavePaymentSettingData(data: any) {\n  const preparedData: any = {\n    pay_setting_id: 0,\n    pay_config: {},\n    extra_config: {},\n    pay_status: true,\n    pay_type: PAYMENT_TYPE.WECHAT,\n    ...data,\n  }\n\n  const { pay_setting_id } = preparedData\n  delete preparedData.pay_setting_id\n\n  // 将配置对象转换为JSON字符串\n  preparedData.pay_config = JSON.stringify(preparedData.pay_config || {})\n  preparedData.extra_config = JSON.stringify(preparedData.extra_config || {})\n\n  return { preparedData, pay_setting_id }\n}\n"
  },
  {
    "path": "web/console/src/api/modules/payment/types.ts",
    "content": "/**\n * 支付设置相关类型定义\n */\n\n// 支付类型枚举\nexport type PaymentType = 1 | 2 | 3 | 4 | -1\n\n// 原始支付设置数据（从API返回的原始格式）\nexport interface RawPaymentSetting {\n  pay_setting_id: string | number\n  pay_type: string | number\n  pay_status: string | number\n  pay_config: string | object\n  extra_config: string | object\n  created_time: string | number\n  updated_time: string | number\n}\n\n// 处理后的支付设置数据\nexport interface PaymentSetting {\n  pay_setting_id: number\n  pay_type: PaymentType\n  pay_label: string\n  pay_status: boolean\n  pay_config: Record<string, any>\n  extra_config: Record<string, any>\n  created_time: string\n  updated_time: string\n}\n\n// 支付设置列表响应\nexport interface PaymentSettingListResponse {\n  pay_settings: RawPaymentSetting[]\n}\n\n// 保存支付设置的请求参数\nexport interface SavePaymentSettingRequest {\n  pay_setting_id: number\n  pay_config: Record<string, any>\n  extra_config?: Record<string, any>\n  pay_status?: boolean\n  pay_type: PaymentType\n}\n\n// 更新支付状态的请求参数\nexport interface UpdatePaymentStatusRequest {\n  pay_status: boolean\n}\n\n// 支付设置映射\nexport interface PaymentSettingMap {\n  wechat: PaymentSetting\n  alipay: PaymentSetting\n  manual: PaymentSetting\n  paypal: PaymentSetting\n}\n"
  },
  {
    "path": "web/console/src/api/modules/permissions.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport interface PermissionListRequest {\n  resource_type: number\n  resource_id?: string\n  subject_type?: number\n  subject_id?: number\n  permission?: number\n}\n\nexport interface PermissionItem {\n  created_time: number\n  eid: number\n  id: number\n  permission: number\n  resource_id: number\n  resource_type: number\n  subject_id: number\n  subject_type: number\n  updated_time: number\n}\nexport type PermissionListResponse = PermissionItem[]\n\nexport interface PermissionCreateRequest {\n  permission: {\n    subject_type: number\n    subject_id: number\n    permission: number\n  }[]\n}\n\nexport const permissionsApi = {\n  list(params: PermissionListRequest): Promise<PermissionListResponse> {\n    return service\n      .get('/api/permissions', { params })\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  update(permission_id: PermissionItem['id'], data: { permission: number }) {\n    return service.put(`/api/permissions/${permission_id}`, data).catch(handleError)\n  },\n  delete(permission_id: PermissionItem['id']) {\n    return service.delete(`/api/permissions/${permission_id}`).catch(handleError)\n  },\n  create(resource_type: number, resource_id: number, data: PermissionCreateRequest) {\n    return service.post(`/api/permissions/${resource_type}/${resource_id}`, data).catch(handleError)\n  },\n}\n\nexport default permissionsApi\n"
  },
  {
    "path": "web/console/src/api/modules/platform-settings/index.ts",
    "content": "import service from '@/api/config'\nimport { handleError } from '@/api/errorHandler'\nimport type { PlatformSetting, RawPlatformSetting } from './types'\n\nconst platformSettingsApi = {\n  find(params: { platform_key: string }): Promise<RawPlatformSetting[]> {\n    return service\n      .get('/api/platform-settings', { params })\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  get(id: string): Promise<RawPlatformSetting> {\n    return service\n      .get(`/api/platform-settings/${id}`)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  create(data: { platform_key: string; setting: string; external_id?: string }): Promise<void> {\n    return service\n      .post('/api/platform-settings', data)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  update(\n    id: string,\n    data: { platform_key: string; setting: string; external_id?: string }\n  ): Promise<PlatformSetting> {\n    return service\n      .put(`/api/platform-settings/${id}`, data)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n  delete(id: string): Promise<void> {\n    return service\n      .delete(`/api/platform-settings/${id}`)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n}\n\nexport default platformSettingsApi\n"
  },
  {
    "path": "web/console/src/api/modules/platform-settings/transform.ts",
    "content": "import { RawPlatformSetting, PlatformSetting } from './types'\n\nexport function transformPlatformSetting(rawSetting: RawPlatformSetting): PlatformSetting {\n  return {\n    ...rawSetting,\n    setting: JSON.parse(rawSetting.setting),\n  }\n}\n"
  },
  {
    "path": "web/console/src/api/modules/platform-settings/types.ts",
    "content": "export interface RawPlatformSetting {\n  created_time: number\n  eid: string\n  id: string\n  platform_key: string\n  setting: string\n  updated_time: number\n}\n\nexport interface PlatformSetting extends Omit<RawPlatformSetting, 'setting'> {\n  setting: Record<string, any>\n}\n"
  },
  {
    "path": "web/console/src/api/modules/prompt.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const promptApi = {\n  async list({\n    params = {}\n  }: {\n    params: {\n      keyword?: string\n      group_id?: string\n      offset?: number\n      limit?: number\n    }\n  } = {}) {\n    params = JSON.parse(JSON.stringify(params))\n    const { data: { count = 0, prompts = [] } = {} } = await service\n      .get(`/api/prompts/admin`, { params })\n      .catch(handleError)\n    return { total: +count || 0, list: prompts }\n  },\n  async detail({ prompt_id }: { prompt_id: number }) {\n    const { data = {} } = await service.get(`/api/prompts/${prompt_id}`).catch(handleError)\n    return data\n  },\n  async save(data: {\n    prompt_id?: string\n    group_ids?: (string | number)[]\n    name?: string\n    description?: string\n    content?: string\n    subscription_group_ids?: (string | number)[]\n    user_group_ids?: (string | number)[]\n    sort?: number\n    status?: 0 | 1 | undefined\n    custom_config?: any\n    ai_links?: any[]\n  }) {\n    const prompt_id = +data.prompt_id || 0\n    delete data.prompt_id\n    if (data.custom_config && typeof data.custom_config === 'object')\n      data.custom_config = JSON.stringify(data.custom_config)\n    if (!data.content) data.content = ' '\n    const { data: resultData = {} } = await service[prompt_id ? 'put' : 'post'](\n      `/api/prompts/${prompt_id ? `${prompt_id}` : 'system'}`,\n      data\n    ).catch(handleError)\n    return resultData\n  },\n  async delete({ prompt_id }: { prompt_id: number }) {\n    return service.delete(`/api/prompts/${prompt_id}`).catch(handleError)\n  },\n  async update_status({ prompt_id, status }: { prompt_id: number; status: 0 | 1 }) {\n    return service.patch(`/api/prompts/${prompt_id}/status`, { status }).catch(handleError)\n  }\n}\n\nexport default promptApi\n"
  },
  {
    "path": "web/console/src/api/modules/provider.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport { getSimpleDateFormatString } from '@/utils/moment'\nimport { PROVIDER_VALUE, type ProviderValueType } from '@/constants/platform'\n\nexport const providerApi = {\n  async list({\n    params = {},\n  }: {\n    params: {\n      providerType?: ProviderValueType\n    }\n  } = {}) {\n    params = JSON.parse(JSON.stringify(params))\n    const { data = [] } = await service.get('/api/providers', { params }).catch(handleError)\n    const list = data.map((item = {}, index) => {\n      try {\n        item.configs =\n          typeof item.configs === 'string' ? JSON.parse(item.configs) : item.configs || {}\n      } catch (error) {\n        item.configs = {}\n      }\n      item.created_time = item.created_time\n        ? getSimpleDateFormatString({ date: item.created_time })\n        : ''\n      item.updated_time = item.updated_time\n        ? getSimpleDateFormatString({ date: item.updated_time })\n        : ''\n      item.authed_time = item.authed_time\n        ? getSimpleDateFormatString({ date: item.authed_time })\n        : ''\n\n      switch (item.provider_type) {\n        case PROVIDER_VALUE.APP_BUILDER:\n        case PROVIDER_VALUE['53AI']:\n        case PROVIDER_VALUE.COZE_OSV:\n          item.authed_time = item.created_time\n          break\n      }\n      return item\n    })\n    return list\n  },\n  async save({ data } = {}) {\n    data = {\n      provider_type: PROVIDER_VALUE.COZE_CN,\n      provider_id: 0,\n      name: '',\n      access_token: '',\n      configs: {},\n      ...data,\n    }\n    const { provider_id } = data\n    delete data.provider_id\n    if (typeof data.configs === 'object') data.configs = JSON.stringify(data.configs)\n    const { data: result = {} } = await service[provider_id ? 'put' : 'post'](\n      `/api/providers${provider_id ? `/${provider_id}` : ''}`,\n      data\n    ).catch(handleError)\n    return result\n  },\n  async delete({ data: { provider_id } }: { data: { provider_id: number } }) {\n    return service.delete(`/api/providers/${provider_id}`).catch(handleError)\n  },\n}\n\nexport default providerApi\n"
  },
  {
    "path": "web/console/src/api/modules/providers/index.ts",
    "content": "import service from '../../config'\nimport { handleError } from '../../errorHandler'\nimport { ProviderValueType } from '@/constants/platform'\nimport { ProviderCreateRequest, ProviderUpdateRequest, RawProviderItem } from './types'\n\nconst providersApi = {\n  list(params?: { providerType?: ProviderValueType; name?: string }): Promise<RawProviderItem[]> {\n    return service\n      .get('/api/providers', { params })\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  create(data: ProviderCreateRequest): Promise<RawProviderItem> {\n    return service\n      .post('/api/providers', data)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  update(provider_id: RawProviderItem['provider_id'], data: ProviderUpdateRequest) {\n    return service.put(`/api/providers/${provider_id}`, data).catch(handleError)\n  },\n\n  delete(provider_id: RawProviderItem['provider_id']) {\n    return service.delete(`/api/providers/${provider_id}`).catch(handleError)\n  },\n}\n\nexport default providersApi\n"
  },
  {
    "path": "web/console/src/api/modules/providers/transform.ts",
    "content": "import { RawProviderItem, ProviderItem } from './types'\nimport { getProviderByProviderType } from '@/constants/platform/config'\n\nexport const transformProviderItem = (item: RawProviderItem): ProviderItem => {\n  const provider = getProviderByProviderType(item.provider_type)\n  return {\n    ...item,\n    provider_icon: window.$getRealPath({ url: `/images/platform/${provider.icon}.png` }),\n    provider_label: provider.label,\n    configs: typeof item.configs === 'string' ? JSON.parse(item.configs) : item.configs || {},\n  }\n}\n\nexport const transformProviderList = (list: RawProviderItem[]): ProviderItem[] => {\n  return list.map(transformProviderItem)\n}\n"
  },
  {
    "path": "web/console/src/api/modules/providers/types.ts",
    "content": "import { ProviderValueType } from '@/constants/platform'\n\nexport interface RawProviderItem {\n  provider_id: number\n  eid: number\n  name: string\n  provider_type: number\n  // json string\n  configs: string\n  is_authorized: boolean\n  access_token: string\n  refresh_token: string\n  expires_in: number\n  authed_time: number\n  base_url: string\n  created_time: number\n  updated_time: number\n}\n\nexport interface ProviderItem extends Omit<RawProviderItem, 'configs'> {\n  configs: Record<string, string>\n  provider_icon: string\n  provider_label: string\n}\n\nexport interface ProviderCreateRequest {\n  provider_type: ProviderValueType\n  name: string\n  access_token: string\n  base_url: string\n  configs: string\n}\nexport interface ProviderUpdateRequest extends ProviderCreateRequest {}\n"
  },
  {
    "path": "web/console/src/api/modules/saas.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nimport type { WebsiteType } from '@/constants/enterprise'\n\nexport const saasApi = {\n  product: {\n    list() {\n      return service.get(`/api/saas/products`).catch(handleError)\n    },\n    find(version: WebsiteType) {\n      return service.get(`/api/saas/products/${version}`).catch(handleError)\n    },\n  },\n  wechat_login(params: { unionid: string; from?: string }) {\n    return service.get('/api/saas/wechat/user', { params }).catch(handleError)\n  },\n  bind_wechat(data: {\n    mobile?: string\n    verify_code?: string\n    openid: string\n    unionid?: string\n    nickname?: string\n    from?: string\n  }) {\n    let api_url = '/api/saas/wechat/bind'\n    if (data.mobile) api_url = '/api/saas/wechat/user'\n    return service.post(api_url, data).catch(handleError)\n  },\n}\n\nexport default saasApi\n"
  },
  {
    "path": "web/console/src/api/modules/setting.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport type DefaultLinkItem = {\n  name: string\n  logo: string\n  url: string\n  description: string\n  sort: number\n}\n\nexport type DefaultLinkReuest = {\n  links: {\n    ai_link: DefaultLinkItem[]\n    delete: boolean\n  }\n}\n\nexport const settingApi = {\n  list() {\n    return service.get('/api/settings').catch(handleError)\n  },\n  get(key: string) {\n    return service.get(`/api/settings/key/${key}`).catch(handleError)\n  },\n  detail(group_name: string) {\n    return service.get(`/api/settings/group/${group_name}`).catch(handleError)\n  },\n  create(data: { key: string; value: string }) {\n    return service.post('/api/settings', data).catch(handleError)\n  },\n  update(setting_id: number, data: { key: string; value: string }) {\n    return service.put(`/api/settings/${setting_id}`, data).catch(handleError)\n  },\n  default_links: {\n    list() {\n      return service.get('/api/settings/default_links').catch(handleError)\n    },\n    save(data: DefaultLinkReuest) {\n      return service.post('/api/settings/default_links', data).catch(handleError)\n    },\n  },\n}\n\nexport default settingApi\n"
  },
  {
    "path": "web/console/src/api/modules/spaces/index.ts",
    "content": "import service from '@/api/config'\nimport { handleError } from '@/api/errorHandler'\n\nimport type { SpaceListResponse, SpaceListRequest, SpaceCreateRequest, SpaceItem } from './types'\n\nexport const spacesApi = {\n  list(params: SpaceListRequest): Promise<SpaceListResponse> {\n    return service\n      .get('/api/spaces', { params })\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  create(data: SpaceCreateRequest) {\n    return service.post('/api/spaces', data).catch(handleError)\n  },\n\n  update(space_id: SpaceItem['id'], data: SpaceCreateRequest) {\n    return service.put(`/api/spaces/${space_id}`, data).catch(handleError)\n  },\n\n  delete(space_id: SpaceItem['id']) {\n    return service.delete(`/api/spaces/${space_id}`).catch(handleError)\n  },\n\n  detail(space_id: SpaceItem['id']): Promise<SpaceItem> {\n    return service\n      .get(`/api/spaces/${space_id}`)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n}\n\nexport default spacesApi\n"
  },
  {
    "path": "web/console/src/api/modules/spaces/transform.ts",
    "content": "import type { SpaceItem, SpaceDisplayItem } from './types'\nimport { getSimpleDateFormatString } from '@/utils/moment'\n\nexport const transformSpaceItem = (item: SpaceItem): SpaceDisplayItem => ({\n  ...item,\n  created_time: getSimpleDateFormatString({\n    date: item.created_time,\n    format: 'YYYY-MM-DD hh:mm',\n  }),\n  updated_time: getSimpleDateFormatString({\n    date: item.updated_time,\n    format: 'YYYY-MM-DD hh:mm',\n  }),\n})\n\nexport const transformSpaceList = (items: SpaceItem[]): SpaceDisplayItem[] => {\n  return items.map(transformSpaceItem)\n}\n\nexport const getDefaultSpaceRequest = () => ({\n  offset: 0,\n  limit: 10,\n  name: '',\n})\n"
  },
  {
    "path": "web/console/src/api/modules/spaces/types.ts",
    "content": "export interface SpaceItem {\n  id: string\n  eid: number\n  name: string\n  description: string\n  icon: string\n  owner_id: number\n  sort: number\n  status: number\n  library_count: number\n  is_default: boolean\n  created_time: number\n  updated_time: number\n  visibility: number\n  owner_info: {\n    nickname: string\n  }\n}\n\nexport interface SpaceListRequest {\n  offset: number\n  limit: number\n  name?: string\n  view?: 'admin' | 'user'\n}\nexport interface SpaceListResponse {\n  spaces: SpaceItem[]\n  count: number\n}\n\nexport interface SpaceCreateRequest {\n  name: string\n  description: string\n  icon: string\n  visibility: number\n  permissions: {\n    subject_type: number\n    subject_id: number\n    permission: number\n  }[]\n}\n\nexport interface SpaceDisplayItem extends Omit<SpaceItem, 'created_time' | 'updated_time'> {\n  created_time: string\n  updated_time: string\n}\n\nexport interface SpacePermissionItem {\n  id: number\n  eid: number\n  resource_type: number\n  resource_id: number\n  subject_type: number\n  subject_id: number\n  permission: number\n  created_time: number\n  updated_time: number\n}\n"
  },
  {
    "path": "web/console/src/api/modules/subscription.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const subscriptionApi = {\n  async list({ params = {} }: { params: { offset: number; limit: number } } = {}) {\n    const { data: { settings = [] } = {} } = await service.get('/api/subscriptions/settings', { params }).catch(handleError)\n    const list = settings.map((item = {}, index) => {\n      item.group = item.group || {}\n      item.setting = item.setting || {}\n      item = {\n        ...item,\n        ...item.group,\n        ...item.setting,\n      }\n      item.delete = Boolean(item.delete) || false\n      item.group_id = item.group_id || 0\n      item.setting_id = item.setting_id || 0\n      item.sort = item.sort || (settings.length - index) || 0\n      item.group_name = item.group_name || ''\n      item.logo_url = item.logo_url || ''\n      item.ai_enabled = Boolean(item.ai_enabled) || false\n      item.relations = item.relations || []\n      item.year_info = JSON.parse(JSON.stringify(item.relations.find((row = {}) => row.type == 1 && row.time_unit === 'year') || {}))\n      item.year_info.amount = (Number(item.year_info.amount || 0) / 100).toFixed(2)\n      item.year_info.currency = item.year_info.currency || 'CNY'\n      item.year_info.relation_id = item.year_info.relation_id || 0\n      item.year_info.time_unit = item.year_info.time_unit || 'year'\n      item.year_info.type = item.year_info.type || 1\n      item.month_info = JSON.parse(JSON.stringify(item.relations.find((row = {}) => row.type == 1 && row.time_unit === 'month') || {}))\n      item.month_info.amount = (Number(item.month_info.amount || 0) / 100).toFixed(2)\n      item.month_info.currency = item.month_info.currency || 'CNY'\n      item.month_info.relation_id = item.month_info.relation_id || 0\n      item.month_info.time_unit = item.month_info.time_unit || 'month'\n      item.month_info.type = item.month_info.type || 1\n      item.point_month_info = JSON.parse(JSON.stringify(item.relations.find((row = {}) => row.type == 2) || {}))\n      item.point_month_info.amount = Number(item.point_month_info.amount || 0)\n      item.point_month_info.currency = item.point_month_info.currency || ''\n      item.point_month_info.relation_id = item.point_month_info.relation_id || 0\n      item.point_month_info.time_unit = item.point_month_info.time_unit || 'month'\n      item.point_month_info.type = item.point_month_info.type || 2\n      item.agents = item.agents || []\n      return item\n    })\n    return list\n  },\n  async save({ data } = {}) {\n    return service.post('/api/subscriptions/batch', data).catch(handleError)\n  },\n}\n\nexport default subscriptionApi\n"
  },
  {
    "path": "web/console/src/api/modules/system-log/index.ts",
    "content": "import service from '@/api/config'\nimport { handleError } from '@/api/errorHandler'\n\nimport type {\n  SystemLogListResponse,\n  SystemLogListRequest,\n  SystemLogCreateRequest,\n  ActionItem,\n  ModuleItem,\n} from './types'\n\nexport const systemLogApi = {\n  list(params: SystemLogListRequest): Promise<SystemLogListResponse> {\n    return service\n      .get('/api/system_logs', { params })\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  create(data: SystemLogCreateRequest) {\n    return service.post('/api/users/system_log', data).catch(() => ({}))\n  },\n\n  actions(): Promise<ActionItem[]> {\n    return service\n      .get('/api/system_logs/actions')\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  modules(): Promise<ModuleItem[]> {\n    return service\n      .get('/api/system_logs/modules')\n      .then(res => res.data)\n      .catch(handleError)\n  },\n}\n\nexport default systemLogApi\n"
  },
  {
    "path": "web/console/src/api/modules/system-log/transform.ts",
    "content": "import type { SystemLogItem, SystemLogDisplayItem } from './types'\nimport { getSimpleDateFormatString } from '@/utils/moment'\n\nexport const transformSystemLogItem = (item: SystemLogItem): SystemLogDisplayItem => ({\n  ...item,\n  action_time: getSimpleDateFormatString({\n    date: item.action_time,\n    format: 'YYYY-MM-DD hh:mm',\n  }),\n})\n\nexport const transformSystemLogList = (items: SystemLogItem[]): SystemLogDisplayItem[] => {\n  return items.map(transformSystemLogItem)\n}\n\nexport const getDefaultSystemLogRequest = () => ({\n  offset: 0,\n  limit: 10,\n  user_id: null,\n  start_time: null,\n  end_time: null,\n  module: undefined,\n  action: undefined,\n})\n"
  },
  {
    "path": "web/console/src/api/modules/system-log/types.ts",
    "content": "import type { SystemLogAction } from '@/constants/system-log'\n\nexport interface SystemLogItem {\n  id: number\n  eid: number\n  user_id: number\n  nickname: string\n  module: number\n  action: number\n  content: string\n  ip: string\n  action_time: number\n}\n\nexport interface SystemLogListResponse {\n  system_logs: SystemLogItem[]\n  count: number\n}\n\nexport interface SystemLogListRequest {\n  offset: number\n  limit: number\n  user_id?: string | null\n  start_time?: number | null\n  end_time?: number | null\n  module?: number\n  action?: number\n}\n\nexport interface SystemLogCreateRequest {\n  action: SystemLogAction\n  content: string\n}\n\nexport interface ActionItem {\n  value: number\n  text: string\n}\n\nexport interface ModuleItem {\n  value: number\n  text: string\n}\n\nexport interface SystemLogDisplayItem extends Omit<SystemLogItem, 'action_time'> {\n  action_time: string\n}\n"
  },
  {
    "path": "web/console/src/api/modules/template-style.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const templateStyleApi = {\n  async getTemplateStyle() {\n    const { data: { template_type = '{}' } = {} } = await service\n      .get('/api/enterprises/template_type')\n      .catch(handleError)\n    let data = {}\n    try {\n      data = JSON.parse(template_type)\n    } catch (error) {\n      // console.error(error)\n      data = {}\n    }\n    return data\n  },\n  async saveTemplateStyle(data: {\n    style_type: string\n    theme_color: string\n    text_color: string\n    nav_bg_color: string\n    nav_text_color: string\n    page_footer_bg_color: string\n    page_footer_text_color: string\n  }) {\n    return service\n      .put('/api/enterprises/template_type', { template_type: JSON.stringify(data) })\n      .catch(handleError)\n  }\n}\n\nexport default templateStyleApi\n\nexport type { templateStyleApi }\n"
  },
  {
    "path": "web/console/src/api/modules/upload.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const uploadApi = {\n  upload(file: File) {\n    const formData = new FormData()\n    formData.append('file', file)\n    return service.post(`/api/upload`, formData).catch(handleError)\n  },\n  preview(key: string) {\n    return service.get(`/api/preview/${key}`).catch(handleError)\n  }\n}\nexport default uploadApi\n"
  },
  {
    "path": "web/console/src/api/modules/user.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport { getSimpleDateFormatString } from '@/utils/moment'\nimport type { EnterpriseSyncFrom } from '@/constants/enterprise'\n\nexport const USER_ROLE_NORMAL = 1\nexport const USER_ROLE_ADMIN = 10\nexport const USER_ROLE_CREATOR = 10000\nexport const USER_ROLE_LABEL_MAP = new Map([\n  [USER_ROLE_NORMAL, 'role.normal'],\n  [USER_ROLE_ADMIN, 'role.admin'],\n  [USER_ROLE_CREATOR, 'role.creator'],\n])\n\nexport const INTERNAL_USER_STATUS_ALL = -1\nexport const INTERNAL_USER_STATUS_UNDEFINED = 0\nexport const INTERNAL_USER_STATUS_ENABLED = 1\nexport const INTERNAL_USER_STATUS_DISABLED = 2\nexport type InternalUserStatus =\n  | typeof INTERNAL_USER_STATUS_ALL\n  | typeof INTERNAL_USER_STATUS_UNDEFINED\n  | typeof INTERNAL_USER_STATUS_ENABLED\n  | typeof INTERNAL_USER_STATUS_DISABLED\nexport const INTERNAL_USER_STATUS_LABEL_MAP = new Map<InternalUserStatus, string>([\n  [INTERNAL_USER_STATUS_ALL, 'internal_user.status.all'],\n  [INTERNAL_USER_STATUS_UNDEFINED, 'internal_user.status.undefined'],\n  [INTERNAL_USER_STATUS_ENABLED, 'internal_user.status.enabled'],\n  [INTERNAL_USER_STATUS_DISABLED, 'internal_user.status.disabled'],\n])\n\nexport function getFormatUserData(data = {}) {\n  data.expired_time = +data.expired_time || 0\n  data.created_time = +data.created_time || 0\n  data.add_admin_time = +data.add_admin_time || 0\n  if (data.expired_time) data.expired_time = getSimpleDateFormatString({ date: data.expired_time })\n  if (data.created_time) data.register_time = getSimpleDateFormatString({ date: data.created_time })\n  if (data.add_admin_time)\n    data.add_admin_time = getSimpleDateFormatString({ date: data.add_admin_time })\n\n  data.role = data.role || USER_ROLE_NORMAL\n  data.role_label = USER_ROLE_LABEL_MAP.get(data.role)\n  data.is_admin = data.role === USER_ROLE_ADMIN\n  data.is_creator = data.role === USER_ROLE_CREATOR\n\n  data.departments = data.departments || []\n  data.dept_id_list = data.departments.map(item => +item.did).filter(did => did)\n  data.dept_names = data.departments.map(item => item.name).join(',')\n\n  return data\n}\n\nexport const userApi = {\n  batch_save_admin(data: { user_ids: number[] }) {\n    return service.put('/api/users/batch/admin', data).catch(handleError)\n  },\n  batch_remove_admin(data: { user_ids: number[] }) {\n    return service.delete('/api/users/batch/admin', { data }).catch(handleError)\n  },\n  async fetch_admin_user(params: { keyword?: string; offset?: number; limit?: number }) {\n    const {\n      data: { count = 0, users = [] },\n    } = await service.get('/api/users/admin', { params }).catch(handleError)\n    return {\n      total: count,\n      list: users.map(item => getFormatUserData(item)),\n    }\n  },\n  async fetch_internal_user(params: {\n    keyword?: string\n    from?: EnterpriseSyncFrom\n    status?: InternalUserStatus\n    not_bind?: 0 | 1\n    did?: number\n    offset?: number\n    limit?: number\n  }) {\n    if (typeof params.status === 'undefined') params.status = INTERNAL_USER_STATUS_ALL\n    const {\n      data: { count = 0, users = [] },\n    } = await service.get('/api/users/internal', { params }).catch(handleError)\n    return {\n      total: count,\n      list: users.map(item => getFormatUserData(item)),\n    }\n  },\n  batch_save_internal_user(data: {\n    users: {\n      did: number[]\n      nickname: string\n      password: string\n      username: string\n    }[]\n  }) {\n    if (data.users && data.users.length) {\n      data.users = data.users.map(item => {\n        if (!Array.isArray(item.did)) item.dids = [item.did || 0]\n        return item\n      })\n    }\n    return service.post('/api/users/internal/batch', data).catch(handleError)\n  },\n  update_internal_user(data: {\n    user_id?: number\n    department?: number[]\n    email?: string\n    mobile?: string\n    nickname?: string\n    status?: InternalUserStatus\n  }) {\n    const user_id = data.user_id\n    delete data.user_id\n    return service.put(`/api/users/internal/${user_id}`, data).catch(handleError)\n  },\n  delete_user(data: { user_id: number }) {\n    return service.delete(`/api/users/${data.user_id}`).catch(handleError)\n  },\n  register_to_internal(data: {\n    user_departments: {\n      did: number[]\n      user_id: number\n    }[]\n  }) {\n    if (data.user_departments && data.user_departments.length) {\n      data.user_departments = data.user_departments.map(item => {\n        if (!Array.isArray(item.did)) item.dids = [item.did || 0]\n        return item\n      })\n    }\n    return service.put('/api/users/register/to/internal', data).catch(handleError)\n  },\n  update_user_status(data: { user_id: number; status: InternalUserStatus }) {\n    const { user_id, status } = data\n    return service.patch(`/api/users/${user_id}/status`, { status }).catch(handleError)\n  },\n  organization(params: {\n    did: number\n    status: number\n    from: EnterpriseSyncFrom\n    keyword: string\n    offset: number\n    limit: number\n  }) {\n    return service.get('/api/users/organization', { params }).catch(handleError)\n  },\n}\n\nexport default userApi\n"
  },
  {
    "path": "web/console/src/api/modules/wecom.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const wecomApi = {\n  jssdk_config(suite_id: number, params: { url: string }) {\n    return service.get(`/api/saas/wecom/callback/jssdk-config/${suite_id}`, { params }).catch(handleError)\n  },\n  contact_search(data: { keyword: string }) {\n    const suite_id = import.meta.env.VITE_GLOB_SUITEID\n    return service.post(`/api/saas/wecom/callback/contact-search/${suite_id}`, {\n      limit: 10,\n      query_word: data.keyword,\n    }).catch(handleError)\n  },\n}\n\nexport default wecomApi\n"
  },
  {
    "path": "web/console/src/api/readme.md",
    "content": "# API 架构开发指南\n\n本文档介绍 53AIHub-console 项目的 API 架构设计，包括核心配置文件和模块开发规范。\n\n## 📁 目录结构\n\n```\nsrc/api/\n├── index.ts              # 模块统一导出入口\n├── config.ts             # Axios 配置和拦截器\n├── errorHandler.ts       # 统一错误处理\n├── code.ts               # 响应状态码和错误码定义\n├── signature.ts          # 签名生成工具\n├── types.ts              # 基础类型定义\n├── readme.md             # 本文档\n└── modules/              # 业务模块目录\n    ├── banner/           # Banner 模块示例\n    ├── user/             # 用户管理模块\n    ├── agent/            # 代理管理模块\n    └── ...               # 其他业务模块\n```\n\n## 🔧 核心配置文件\n\n### 1. `config.ts` - Axios 配置和拦截器\n\n负责创建和配置 Axios 实例，包含请求和响应拦截器。\n\n**主要功能：**\n\n- 创建 Axios 实例并配置基础 URL\n- 请求拦截器：自动添加认证 token、签名参数\n- 响应拦截器：统一处理响应数据格式\n- 支持重试机制和特殊签名配置\n\n**关键特性：**\n\n```typescript\n// 自动添加认证 token\nconst access_token = localStorage.getItem(\"access_token\") || \"\"\nif (access_token) config.headers.set(\"Authorization\", `Bearer ${access_token}`)\n\n// 支持 ibos 签名\nif (config.ibos_sign) {\n  const { token, platform, createtime } = generateIbosSignParams()\n  config.headers.set(\"token\", token)\n  config.headers.set(\"platform\", platform)\n  config.headers.set(\"createtime\", createtime)\n}\n\n// 支持验证码签名\nif (config.code_sign) config.params = generateSignParams(config.params)\n```\n\n**使用方式：**\n\n```typescript\nimport service from \"@/api/config\"\n\n// 基础请求\nconst response = await service.get(\"/api/endpoint\")\n\n// 带签名的请求\nconst response = await service.get(\"/api/endpoint\", { ibos_sign: true })\n\n// 带重试的请求\nconst response = await service.get(\"/api/endpoint\", {\n  retryConfig: { retry: 3, retryDelay: 1000 },\n})\n```\n\n### 2. `errorHandler.ts` - 统一错误处理\n\n提供统一的错误处理机制，包括错误消息国际化、token 过期处理等。\n\n**主要功能：**\n\n- 解析错误响应数据\n- 根据错误码和状态码显示对应的国际化消息\n- 自动处理 token 过期情况\n- 支持自定义错误消息映射\n\n**错误处理流程：**\n\n```typescript\nexport function handleError(error: ErrorResponse): Promise<never> {\n  // 1. 解析错误状态和响应数据\n  const status = error.response?.status || 500\n  const code = resData?.code\n  const message = resData?.message\n\n  // 2. 根据错误类型获取对应消息\n  const messageMatch = RESPONSE_MESSAGE_MAP.get(message || \"\")\n\n  // 3. 特殊错误处理（如 token 过期）\n  if (code === ResponseCode.TOKEN_EXPIRED_ERROR) {\n    localStorage.removeItem(\"access_token\")\n    window.location.reload(true)\n  }\n\n  // 4. 显示错误消息\n  if (message) ElMessage.warning(message)\n\n  return Promise.reject(error)\n}\n```\n\n**使用方式：**\n\n```typescript\nimport { handleError } from \"@/api/errorHandler\"\n\n// 在所有 API 调用中使用\nservice\n  .get(\"/api/endpoint\")\n  .then(res => res.data)\n  .catch(handleError)\n```\n\n### 3. `code.ts` - 响应状态码和错误码定义\n\n定义系统中使用的所有响应状态码、业务错误码和对应的消息映射。\n\n**包含内容：**\n\n- **ResponseCode**: 业务逻辑错误码（如 0=成功，1=参数错误）\n- **ResponseStatus**: HTTP 状态码（如 200=成功，400=请求错误）\n- **消息映射**: 错误码到国际化消息的映射关系\n\n**错误码分类：**\n\n```typescript\nexport enum ResponseCode {\n  SUCCESS = 0, // 成功\n  PARAM_ERROR = 1, // 参数错误\n  DATABASE_ERROR = 2, // 数据库错误\n  NETWORK_ERROR = 3, // 网络错误\n  SYSTEM_ERROR = 4, // 系统错误\n  AUTH_ERROR = 5, // 认证错误\n  NOT_FOUND_ERROR = 6, // 资源不存在\n  UNAUTHORIZED_ERROR = 7, // 未授权\n  FILE_ERROR = 8, // 文件错误\n  FORBIDDEN_ERROR = 9, // 禁止访问\n  AGENT_ERROR = 10, // 代理错误\n  TOKEN_EXPIRED_ERROR = 11, // Token 过期\n  VERIFICATION_CODE_ERROR = -14, // 验证码错误\n}\n```\n\n**消息映射：**\n\n```typescript\nexport const RESPONSE_CODE_MESSAGE_MAP = new Map([\n  [ResponseCode.SUCCESS, \"response_code.success\"],\n  [ResponseCode.PARAM_ERROR, \"response_code.param_error\"],\n  // ... 其他映射\n])\n```\n\n### 4. `signature.ts` - 签名生成工具\n\n提供两种签名生成方式：普通签名和 ibos 签名。\n\n**普通签名 (generateSignParams)：**\n\n```typescript\nexport function generateSignParams(params = {}) {\n  const authkey = \"c3a39e4eeacf4542d6a488e19037fa45\"\n  params = Object.assign({}, params, {\n    timestamp: Math.floor(Date.now() / 1000),\n    platform: \"web\",\n  })\n\n  const strForSign = serialize(params)\n  const sign = md5(strForSign + authkey)\n\n  return { sign, method: \"md5\", ...params }\n}\n```\n\n**ibos 签名 (generateIbosSignParams)：**\n\n```typescript\nexport function generateIbosSignParams() {\n  const authkey = \"c3a39e4eeacf4542d6a488e19037fa45\"\n  const platform = \"web\"\n  const createtime = Math.floor(Date.now() / 1000)\n  const token = md5(authkey + createtime)\n  return { token, platform, createtime }\n}\n```\n\n**使用方式：**\n\n```typescript\nimport { generateSignParams, generateIbosSignParams } from \"@/api/signature\"\n\n// 在请求配置中使用\nconst config = {\n  ibos_sign: true, // 自动添加 ibos 签名\n  code_sign: true, // 自动添加普通签名\n}\n```\n\n### 5. `types.ts` - 基础类型定义\n\n定义 API 响应的基础类型结构。\n\n```typescript\nexport interface BaseResponse<T = any> {\n  code: number // 响应状态码\n  message: string // 响应消息\n  data: T // 响应数据\n}\n```\n\n### 6. `index.ts` - 模块统一导出\n\n统一导出所有业务模块，方便在项目中引入使用。\n\n```typescript\nexport * from \"./modules/common\"\nexport * from \"./modules/setting\"\nexport * from \"./modules/domain\"\nexport * from \"./modules/channel\"\nexport * from \"./modules/order\"\nexport * from \"./modules/provider\"\nexport * from \"./modules/subscription\"\nexport * from \"./modules/agent\"\nexport * from \"./modules/ai-link\"\nexport * from \"./modules/auth\"\nexport * from \"./modules/template-style\"\nexport * from \"./modules/user\"\nexport * from \"./modules/department\"\n```\n\n**使用方式：**\n\n```typescript\n// 统一导入所有模块\nimport { userApi, agentApi, bannerApi } from \"@/api\"\n\n// 或者单独导入特定模块\nimport { userApi } from \"@/api/modules/user\"\n```\n\n## 🚀 新模块开发指南\n\n本文档介绍如何基于现有架构开发新的 API 模块，参考 `modules/banner` 模块的实现模式。\n\n## 目录结构\n\n每个新模块应包含以下文件：\n\n```\nsrc/api/modules/your-module/\n├── index.ts          # 主要 API 方法\n├── your-module.d.ts  # TypeScript 类型定义\n└── transform.ts      # 数据转换工具（可选）\n```\n\n## 文件模板\n\n### 1. 类型定义文件 (`your-module.d.ts`)\n\n```typescript\n// 定义模块的主要数据类型\nexport interface YourModule {\n  id: string\n  name: string\n  // ... 其他属性\n}\n\n// 定义原始数据格式（如果需要转换）\nexport type RawYourModule = string | object\n\n// 定义创建/更新时的数据类型\nexport interface CreateYourModuleRequest {\n  name: string\n  // ... 其他必填属性\n}\n\nexport interface UpdateYourModuleRequest\n  extends Partial<CreateYourModuleRequest> {\n  id: string\n}\n```\n\n### 2. 主要 API 文件 (`index.ts`)\n\n```typescript\nimport service from \"@/api/config\"\nimport { handleError } from \"@/api/errorHandler\"\n\nimport type {\n  YourModule,\n  CreateYourModuleRequest,\n  UpdateYourModuleRequest,\n} from \"./your-module.d\"\n\nexport const yourModuleApi = {\n  // 获取列表\n  getList(params?: Record<string, unknown>): Promise<YourModule[]> {\n    return service\n      .get(\"/api/your-module\", { params })\n      .then(res => res.data.list)\n      .catch(handleError)\n  },\n\n  // 获取单个项目\n  getById(id: string): Promise<YourModule> {\n    return service\n      .get(`/api/your-module/${id}`)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  // 创建\n  create(data: CreateYourModuleRequest): Promise<YourModule> {\n    return service\n      .post(\"/api/your-module\", data)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  // 更新\n  update(id: string, data: UpdateYourModuleRequest): Promise<YourModule> {\n    return service\n      .put(`/api/your-module/${id}`, data)\n      .then(res => res.data)\n      .catch(handleError)\n  },\n\n  // 删除\n  delete(id: string): Promise<void> {\n    return service\n      .delete(`/api/your-module/${id}`)\n      .then(() => {})\n      .catch(handleError)\n  },\n}\n\nexport default yourModuleApi\n```\n\n### 3. 数据转换文件 (`transform.ts`) - 可选\n\n当需要处理复杂的数据转换时使用：\n\n```typescript\nimport { YOUR_MODULE_CONFIG } from \"@/constants/your-module\"\nimport type { YourModule, RawYourModule } from \"./your-module.d\"\n\n// 获取默认值\nexport const getDefaultYourModule = (): YourModule => ({\n  id: \"\",\n  name: \"\",\n  // ... 其他默认值\n})\n\n// 转换原始数据\nexport function transformYourModule(rawData: RawYourModule): YourModule {\n  try {\n    if (typeof rawData === \"string\") {\n      const parsed = JSON.parse(rawData)\n      return {\n        id: parsed.id || \"\",\n        name: parsed.name || \"\",\n        // ... 转换其他字段\n      }\n    }\n\n    return rawData as YourModule\n  } catch (error) {\n    console.warn(\"Failed to transform your module data:\", error)\n    return getDefaultYourModule()\n  }\n}\n```\n\n## 开发规范\n\n### 1. 命名约定\n\n- **文件名**: 使用 kebab-case（如 `your-module.ts`）\n- **API 对象**: 使用 camelCase + Api 后缀（如 `yourModuleApi`）\n- **类型**: 使用 PascalCase（如 `YourModule`）\n- **常量**: 使用 UPPER_SNAKE_CASE（如 `YOUR_MODULE_CONFIG`）\n\n### 2. 错误处理\n\n- 所有 API 调用必须使用 `handleError` 进行错误处理\n- 使用 `.catch(handleError)` 捕获并统一处理错误\n\n### 3. 类型安全\n\n- 为所有 API 方法定义明确的返回类型\n- 使用 TypeScript 接口定义请求和响应数据结构\n- 避免使用 `any` 类型\n\n### 4. 响应处理\n\n- 使用 `.then(res => res.data)` 提取响应数据\n- 根据 API 响应结构调整数据提取逻辑\n- 处理嵌套数据结构（如 `res.data.list`）\n\n### 5. 参数处理\n\n- 使用可选参数对象处理查询参数\n- 为必填参数定义明确的类型\n- 使用 `Record<string, unknown>` 处理动态查询参数\n\n## 使用示例\n\n### 在组件中使用\n\n```typescript\nimport { yourModuleApi } from \"@/api/modules/your-module\"\n\n// 在 setup 中使用\nconst {\n  data: yourModules,\n  pending,\n  error,\n} = await useAsyncData(\"your-modules\", () => yourModuleApi.getList())\n\n// 创建新项目\nconst handleCreate = async (formData: CreateYourModuleRequest) => {\n  try {\n    const result = await yourModuleApi.create(formData)\n    ElMessage.success(\"创建成功\")\n    // 刷新列表\n    await refresh()\n  } catch (error) {\n    // 错误已在 handleError 中处理\n    console.error(\"创建失败:\", error)\n  }\n}\n```\n\n### 在 Store 中使用\n\n```typescript\n// stores/modules/your-module.ts\nimport { yourModuleApi } from \"@/api/modules/your-module\"\n\nexport const useYourModuleStore = defineStore(\"yourModule\", () => {\n  const yourModules = ref<YourModule[]>([])\n\n  const fetchYourModules = async () => {\n    try {\n      const data = await yourModuleApi.getList()\n      yourModules.value = data\n    } catch (error) {\n      console.error(\"获取数据失败:\", error)\n    }\n  }\n\n  return {\n    yourModules,\n    fetchYourModules,\n  }\n})\n```\n\n## 最佳实践\n\n1. **模块化**: 每个模块独立管理，避免跨模块依赖\n2. **类型优先**: 先定义类型，再实现 API 方法\n3. **错误处理**: 统一使用 `handleError` 处理所有错误\n4. **数据转换**: 复杂的数据转换逻辑放在 `transform.ts` 中\n5. **常量管理**: 模块相关的常量放在 `constants` 目录下\n6. **测试友好**: 设计易于测试的 API 接口\n\n## 参考模块\n\n- **banner**: 简单的 CRUD 操作，包含数据转换\n- **user**: 复杂的用户管理，包含多种 API 方法\n- **agent**: 代理管理，包含文件上传等特殊操作\n\n通过遵循这些规范，可以确保新模块与现有架构保持一致，提高代码质量和可维护性。\n"
  },
  {
    "path": "web/console/src/api/signature.ts",
    "content": "import { serialize } from '@/utils'\n\nimport md5 from '@/utils/md5'\n\nexport function generateSignParams(params = {}) {\n  const authkey = 'c3a39e4eeacf4542d6a488e19037fa45'\n  params = Object.assign({}, params, {\n    timestamp: Math.floor(Date.now() / 1000),\n    platform: 'web',\n  })\n\n  const strForSign = serialize(params)\n  const sign = md5(strForSign + authkey)\n\n  return {\n    sign,\n    method: 'md5',\n    ...params,\n  }\n}\n\nexport function generateIbosSignParams() {\n  const authkey = 'c3a39e4eeacf4542d6a488e19037fa45'\n  const platform = 'web'\n  const createtime = Math.floor(Date.now() / 1000)\n  const token = md5(authkey + createtime)\n  return {\n    token,\n    platform,\n    createtime,\n  }\n}\n"
  },
  {
    "path": "web/console/src/api/types.ts",
    "content": "// 基础响应类型\nexport interface BaseResponse<T = any> {\n  code: number\n  message: string\n  data: T\n}\n"
  },
  {
    "path": "web/console/src/apis/index.ts",
    "content": "// import type { AxiosProgressEvent, GenericAbortSignal } from 'axios'\n// import cache from '@/utils/cache'\nimport user from './modules/user'\nimport group from './modules/group'\nimport conversation from './modules/conversation'\nimport enterprise from './modules/enterprise'\nimport setting from './modules/setting'\nimport qyy from './modules/qyy'\nimport { isObject } from '@/utils'\nimport { del, get, patch, post, put } from '@/utils/request'\n\nconst api_config = {\n  user,\n  group,\n  conversation,\n  enterprise,\n  setting,\n  qyy,\n}\n\nconst REQUEST_MAP = new Map([\n  ['GET', get],\n  ['POST', post],\n  ['PATCH', patch],\n  ['PUT', put],\n  ['DELETE', del],\n])\n\n// export function fetchChatAPIProcess<T = any>(\n//   params: {\n//     data: {\n//       conversationid: string\n//       eid: number\n//       question: string\n//       modelid?: string\n//       datasetid?: string\n//       contentid?: number\n//       characterid?: string\n//       app_model_config_id?: string\n//       othersaveparams: any\n//     }\n//     // prompt: string\n//     // options?: { conversationId?: string; parentMessageId?: string }\n//     signal?: GenericAbortSignal\n//     onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void\n//   },\n// ) {\n//   // const settingStore = useSettingStore()\n//   // const authStore = useAuthStore()\n\n//   const data: Record<string, any> = {\n//     conversationid: params.data.conversationid,\n//     eid: params.data.eid,\n//     question: params.data.question,\n//     modelid: params.data.modelid,\n//     datasetid: params.data.datasetid,\n//     characterid: params.data.characterid,\n//     app_model_config_id: params.data.app_model_config_id,\n//     othersaveparams: params.data.othersaveparams,\n//   }\n//   if (typeof params.data.contentid !== 'undefined')\n//     data.contentid = params.data.contentid\n\n//   // if (authStore.isChatGPTAPI) {\n//   //   data = {\n//   //     ...data,\n//   //     systemMessage: settingStore.systemMessage,\n//   //     temperature: settingStore.temperature,\n//   //     top_p: settingStore.top_p,\n//   //   }\n//   // }\n\n//   return post<T>({\n//     url: `${apiHost}/chat/send`,\n//     data,\n//     signal: params.signal,\n//     onDownloadProgress: params.onDownloadProgress,\n//   })\n// }\n\n// export function downloadUrl<T = any>(url: string, data?: any) {\n//   return get<T>({\n//     url,\n//     data,\n//     responseType: 'blob',\n//   })\n// }\n\nconst findEach = (source: any = {}, url = '') => {\n  Object.keys(source).forEach(key => {\n    const data = source[key]\n    if (data.method && !isObject(data.method)) {\n      let method = data.method || ''\n      Object.keys(data).forEach(data_key => {\n        if (!Object.keys(data).includes('method'))\n          findEach(data[data_key], `${url}/${key}/${data_key}`)\n      })\n      source[key] = (config: any = {}) => {\n        method = (config.method || method).toUpperCase()\n        if (['DELETE', 'DEL'].includes(method)) method = 'DELETE'\n        const _request = REQUEST_MAP.get(method) || REQUEST_MAP.get('GET')\n        return _request({\n          ...data,\n          method,\n          url: data.url || `${url}/${key}`,\n          ...config,\n        })\n      }\n    } else {\n      findEach(data, `${url}/${key}`)\n    }\n  })\n}\nfindEach(api_config)\n\nexport default {\n  ...api_config,\n}\n"
  },
  {
    "path": "web/console/src/apis/modules/conversation.ts",
    "content": "export default {\n  list: {\n    url: '/conversations',\n    method: 'GET',\n  },\n  create: {\n    url: '/conversations',\n    method: 'POST',\n  },\n  update: {\n    url: '/conversations/${conversation_id}',\n    method: 'PUT',\n  },\n  delete: {\n    url: '/conversations/${conversation_id}',\n    method: 'DELETE',\n  },\n  detail: {\n    url: '/conversations/${conversation_id}',\n    method: 'GET',\n  },\n  chat: {\n    pathname: '/v1',\n    url: '/chat/completions',\n    method: 'POST',\n    isStream: true,\n  },\n}\n"
  },
  {
    "path": "web/console/src/apis/modules/enterprise.ts",
    "content": "export default {\n  saas_list: {\n    url: '/saas/enterprise/applies',\n    method: 'GET',\n  },\n  saas_apply: {\n    url: '/saas/enterprise/apply',\n    method: 'POST',\n  },\n  saas_detail: {\n    url: '/saas/enterprise/${eid}',\n    method: 'GET',\n  },\n  is_saas: {\n    url: '/enterprises/is_saas',\n    method: 'GET',\n  },\n  saas_self_info: {\n    url: '/saas/enterprise/current',\n    method: 'GET',\n  },\n  self_info: {\n    url: '/enterprises/current',\n    method: 'GET',\n  },\n  home_info: {\n    url: '/enterprises/homepage',\n    method: 'GET',\n  },\n  update: {\n    url: '/enterprises/${eid}',\n    method: 'PUT',\n  },\n  smtp_config: {\n    url: '/enterprise-configs',\n    method: 'GET',\n  },\n  smtp_detail: {\n    url: '/enterprise-configs/${type}',\n    method: 'GET',\n  },\n  smtp_save: {\n    url: '/enterprise-configs/${type}',\n    method: 'POST',\n  },\n  smtp_send: {\n    url: '/email/send_test',\n    method: 'POST',\n  },\n}\n"
  },
  {
    "path": "web/console/src/apis/modules/group.ts",
    "content": "export default {\n  list: {\n    url: '/groups/type/${group_type}',\n    method: 'GET',\n\t},\n\tsave: {\n\t\turl: '/groups/type/${group_type}',\n    method: 'POST',\n\t},\n\tdelete: {\n\t\turl: '/groups/${group_id}',\n    method: 'DELETE',\n\t},\n}\n"
  },
  {
    "path": "web/console/src/apis/modules/qyy.ts",
    "content": "import { qyy_host } from '@/utils/config'\n\nexport default {\n\tsend_code: {\n\t\tapi_host: qyy_host,\n\t\tpathname: '/v3',\n\t\turl: '/users/sendcode',\n\t\tmethod: 'POST',\n\t},\n\tvalidate_code: {\n\t\tapi_host: qyy_host,\n\t\tpathname: '/v4',\n\t\turl: '/xbot/checkverificationcode',\n\t\tmethod: 'POST',\n\t}\n}\n"
  },
  {
    "path": "web/console/src/apis/modules/setting.ts",
    "content": "export default {\n  list: {\n    url: '/settings',\n    method: 'GET',\n  },\n  detail: {\n    url: '/settings/group/${group_name}',\n    method: 'GET',\n  },\n  create: {\n    url: '/settings',\n    method: 'POST',\n  },\n  update: {\n    url: '/settings/${setting_id}',\n    method: 'PUT',\n  },\n  payment_setting_list: {\n    url: '/pay_settings',\n    method: 'GET',\n  },\n}\n"
  },
  {
    "path": "web/console/src/apis/modules/user.ts",
    "content": "export default {\n  saas_login: {\n    url: '/saas/auth/login',\n    method: 'POST',\n  },\n  saas_sms_login: {\n    url: '/saas/auth/sms_login',\n    method: 'POST',\n  },\n  saas_logout: {\n    url: '/saas/auth/logout',\n    method: 'POST',\n  },\n  logout: {\n    url: '/logout',\n    method: 'POST',\n  },\n  register: {\n    url: '/register',\n    method: 'POST',\n  },\n  self_info: {\n    url: '/users/me',\n    method: 'GET',\n  },\n  reset_password: {\n    url: '/saas/auth/reset_password',\n    method: 'POST',\n  },\n  list: {\n    url: '/users',\n    method: 'GET',\n  },\n  delete: {\n    url: '/users/${user_id}',\n    method: 'DELETE',\n  },\n  update: {\n    url: '/users/${user_id}',\n    method: 'PUT',\n  },\n}\n"
  },
  {
    "path": "web/console/src/apis/readme.md",
    "content": "旧版api。 后续新模块不在这块开发\n"
  },
  {
    "path": "web/console/src/components/AgentPicker/index.vue",
    "content": "<template>\n\t<div class=\"relative\">\n\t\t<div v-if=\"$slots.trigger\" @click=\"open\">\n\t\t\t<slot name=\"trigger\" />\n\t\t</div>\n\t\t<div v-if=\"!$slots.trigger\" class=\"w-full flex items-center flex-wrap gap-2\">\n\t\t\t<ElButton type=\"default\" class=\"!bg-transparent !border-dashed border-[#3664EF] text-[#3664EF]\" plain size=\"large\"\n\t\t\t\t@click=\"open\">\n\t\t\t\t+ {{ $t('action_add') }}\n\t\t\t</ElButton>\n\t\t\t<ElTag v-for=\"item in modelValue\" :key=\"item.value\" size=\"large\" effect=\"plain\" type=\"info\" closable\n\t\t\t\tclass=\"!h-[40px]\" @close=\"handleRemove(item)\">\n\t\t\t\t<img class=\"size-6 inline-block object-contain rounded-full overflow-hidden\" :src=\"item.logo || ''\" />\n\t\t\t\t<label class=\"text-[#333] inline-block mt-2 ml-2\">{{ item.label }}</label>\n\t\t\t</ElTag>\n\t\t</div>\n\t\t<ElDialog v-model=\"visible\" :title=\"$t('action_select')\" :close-on-click-modal=\"false\" width=\"800px\"\n\t\t\tdestroy-on-close append-to-body align-center @close=\"close\">\n\t\t\t<div class=\"w-full flex items-center justify-between gap-4\">\n\t\t\t\t<div class=\"flex-1 w-0\">\n\t\t\t\t\t<GroupTabs ref=\"group_tabs_ref\" v-model=\"filterForm.group_id\" :group-type=\"GROUP_TYPE.AGENT\"\n\t\t\t\t\t\t@change=\"refresh\" />\n\t\t\t\t</div>\n\t\t\t\t<ElInput v-model=\"filterForm.keyword\" style=\"width: 220px\" size=\"large\" clearable :suffix-icon=\"Search\"\n\t\t\t\t\t:placeholder=\"$t('module.agent_search_placeholder')\" @change=\"refresh\" />\n\t\t\t</div>\n\t\t\t<TablePlus ref=\"tableRef\" class=\"mt-5\" :page=\"filterForm.page\" :limit=\"filterForm.pageSize\" :data=\"tableData\"\n\t\t\t\t:total=\"tableTotal\" style=\"width: 100%\"\n\t\t\t\theader-row-class-name=\"rounded overflow-hidden\" header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n\t\t\t\t:loading=\"loading\" max-height=\"54vh\" @page-size-change=\"onPageSizeChange\" @page-current-change=\"onPageChange\"\n\t\t\t\t@selection-change=\"onSelectionChange\">\n\t\t\t\t<ElTableColumn type=\"selection\" width=\"40\" :selectable=\"selectable\" />\n\t\t\t\t<ElTableColumn prop=\"date\" :label=\"$t('module.agent')\" min-width=\"260\" show-overflow-tooltip>\n\t\t\t\t\t<template #default=\"{ row }\">\n\t\t\t\t\t\t<div class=\"flex items-center gap-2 w-full\">\n\t\t\t\t\t\t\t<img class=\"flex-none w-8 h-8 rounded-full overflow-hidden\" :src=\"row.logo\" alt=\"\">\n\t\t\t\t\t\t\t<div class=\"flex-1 w-0 text-sm flex flex-col\">\n\t\t\t\t\t\t\t\t<div class=\"text-[#2563EB] truncate\">{{ row.name || '--' }}</div>\n\t\t\t\t\t\t\t\t<div v-show=\"row.description\" class=\"text-xs text-[#808080] truncate\">{{ row.description || '' }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</ElTableColumn>\n\t\t\t\t<ElTableColumn :label=\"$t('type')\" width=\"200\" show-overflow-tooltip>\n\t\t\t\t\t<template #default=\"{ row = {} }\">\n\t\t\t\t\t\t{{ $t(row.agent_type_label) || '--' }}\n\t\t\t\t\t</template>\n\t\t\t\t</ElTableColumn>\n\t\t\t</TablePlus>\n\n\t\t\t<template #footer>\n\t\t\t\t<div class=\"py-4 flex items-center justify-between\">\n\t\t\t\t\t<div class=\"text-sm text-[#768097] text-left\"\n\t\t\t\t\t\tv-html=\"$t('selected_tip', { total: `<span class='text-[#3664EF]'>${checkedList.length}</span>` })\" />\n\t\t\t\t\t<div class=\"flex-center\">\n\t\t\t\t\t\t<ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n\t\t\t\t\t\t\t{{ $t('action_cancel') }}\n\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t<ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"loading\" :disabled=\"!checkedList.length\"\n\t\t\t\t\t\t\t@click=\"handleConfirm\">\n\t\t\t\t\t\t\t{{ $t('action_confirm') }}\n\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</ElDialog>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Search } from '@element-plus/icons-vue';\nimport { ref, onMounted, computed, reactive, nextTick } from 'vue';\nimport {\n  agentApi,\n} from '@/api/modules/agent';\n\nimport { GROUP_TYPE } from '@/constants/group';\n\nconst props = withDefaults(defineProps<{\n\tmodelValue?: any[]\n}>(), {\n\tmodelValue: () => [],\n})\n\nconst emits = defineEmits<{\n\t(e: 'update:modelValue', value: any[]): void\n\t(e: 'change', result: { value: any[] }): void\n\t(e: 'confirm', result: { value: any[] }): void\n\t(e: 'remove', result: { value: any[] }): void\n}>()\n\nconst tableRef = ref()\nconst selectedValue = ref(JSON.parse(JSON.stringify(props.modelValue)))\nconst visible = ref(false)\nconst tableData = ref([])\nconst tableTotal = ref(0)\nconst loading = ref(false)\nconst filterForm = reactive({\n\tgroup_id: '-1',\n\tkeyword: '',\n\tpage: 1,\n\tpageSize: 10,\n})\nconst checkedListMap = ref(new Map([]))\n\nconst checkedList = computed(() => {\n\tlet list = Array.from(checkedListMap.value.values()).flat()\n\tlist = list.filter((item, index, self) =>\n\t\tindex === self.findIndex((t) => t.agent_id === item.agent_id) &&\n\t\t!props.modelValue.find((row: any) => row.agent_id === item.agent_id))\n\treturn list\n})\n\nconst setModelValue = ({ value = [] } = {}) => {\n\tvalue = JSON.parse(JSON.stringify(value))\n\tselectedValue.value = value\n\temits('update:modelValue', value)\n\temits('change', { value })\n}\nconst fetchAgentData = async () => {\n\tloading.value = true\n\tconst { count = 0, agents = [] } = await agentApi.list({\n\t\tparams: {\n\t\t\tgroup_id: filterForm.group_id,\n\t\t\tkeyword: filterForm.keyword,\n\t\t\toffset: (filterForm.page - 1) * filterForm.pageSize,\n\t\t\tlimit: filterForm.pageSize,\n\t\t}\n\t}).catch(() => {\n\t\tloading.value = false\n\t})\n\ttableTotal.value = count\n\ttableData.value = []\n\tawait nextTick()\n\ttableData.value = agents.map((item = {}) => {\n\t\titem.value = +item.agent_id || 0\n\t\titem.label = item.name || ''\n\t\treturn item\n\t})\n\tawait nextTick()\n\tif (checkedList.value.length) {\n\t\tawait nextTick()\n\t\tcheckedList.value.forEach((item = {}) => {\n\t\t\tconst row = tableData.value.find((row: any) => row.agent_id === item.agent_id)\n\t\t\tif (row) tableRef.value.toggleRowSelection(row)\n\t\t})\n\t}\n\tawait nextTick()\n\ttableData.value.forEach((item = {}) => {\n\t\tconst disabled = !!props.modelValue.find((row: any) => row.agent_id === item.agent_id)\n\t\tif (disabled && !checkedList.value.find((row: any) => row.agent_id === item.agent_id)) tableRef.value.toggleRowSelection(item)\n\t})\n\tloading.value = false\n}\nconst open = async () => {\n\tcheckedListMap.value = new Map([])\n\tselectedValue.value = JSON.parse(JSON.stringify(props.modelValue)).map((item = {}) => {\n\t\titem.value = +item.value || +item.agent_id || 0\n\t\titem.label = item.label || item.name || ''\n\t\treturn item\n\t})\n\tvisible.value = true\n\tawait nextTick()\n\trefresh()\n}\nconst close = () => {\n\tvisible.value = false\n}\nconst refresh = () => {\n\tfilterForm.page = 1\n\treturn fetchAgentData()\n}\nconst onPageSizeChange = (pageSize: number) => {\n\tfilterForm.pageSize = pageSize\n\trefresh()\n}\nconst onPageChange = (page: number) => {\n\tfilterForm.page = page\n\tfetchAgentData()\n}\nconst onSelectionChange = (selection: any[]) => {\n\tif (loading.value) return\n\tcheckedListMap.value.set(filterForm.group_id, [...selection])\n}\nconst selectable = (data: any = {}) => {\n\tconst disabled = !!props.modelValue.find((row: any) => row.agent_id === data.agent_id)\n\treturn !disabled\n}\nconst handleRemove = (item: any) => {\n\tselectedValue.value = selectedValue.value.filter(i => i.value !== item.value)\n\temits('remove', { value: [item] })\n}\nconst handleConfirm = () => {\n\tconst value = JSON.parse(JSON.stringify(checkedList.value))\n\tsetModelValue({ value })\n\temits('confirm', { value })\n\tclose()\n}\n\nonMounted(async () => {\n})\n\ndefineExpose({\n\topen,\n\tclose\n})\n</script>\n\n<style scoped lang=\"scss\">\n::v-deep(.el-tabs__content),\n::v-deep(.el-tabs__nav-wrap:after) {\n\tdisplay: none;\n}\n\n::v-deep(.el-tabs__header) {\n\tmargin-bottom: 0 !important;\n}\n</style>\n\n"
  },
  {
    "path": "web/console/src/components/CropperDialog/index.vue",
    "content": "<template>\n\t<el-dialog :model-value=\"dialogVisible\" :title=\"$t('image_cropper')\" width=\"550px\" :close-on-click-modal=\"false\"\n\t\t:close-on-press-escape=\"false\" append-to-body @close=\"dialogVisible = false\">\n\t\t<template #default>\n\t\t\t<div class=\"cropper\">\n\t\t\t\t<div class=\"cropper_left\">\n\t\t\t\t\t<VueCropper ref=\"cropperRef\" :style=\"{ width: `${showWidth}px`, height: `${showHeight}px` }\"\n\t\t\t\t\t\t:img=\"options.img\" :info=\"true\" :info-true=\"options.infoTrue\" :auto-crop=\"options.autoCrop\"\n\t\t\t\t\t\t:fixed-box=\"options.fixedBox\" :can-move=\"options.canMove\" :can-scale=\"options.canScale\"\n\t\t\t\t\t\t:fixed-number=\"fixedNumber\" :fixed=\"options.fixed\" :full=\"options.full\" :center-box=\"options.centerBox\"\n\t\t\t\t\t\t:fill-color=\"options.fillColor\" :output-type=\"options.outputType\" @real-time=\"previewHandle\" />\n\t\t\t\t\t<div class=\"reupload_box\">\n\t\t\t\t\t\t<div class=\"reupload_text\" @click=\"uploadFile('reload')\">\n\t\t\t\t\t\t\t{{ $t('reupload') }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<el-icon class=\"rotate_right\" @click=\"changeScale(1)\">\n\t\t\t\t\t\t\t\t<CirclePlus />\n\t\t\t\t\t\t\t</el-icon>\n\t\t\t\t\t\t\t<el-icon class=\"rotate_right\" @click=\"changeScale(-1)\">\n\t\t\t\t\t\t\t\t<Remove />\n\t\t\t\t\t\t\t</el-icon>\n\t\t\t\t\t\t\t<el-icon class=\"rotate_right\" @click=\"rotateRight\">\n\t\t\t\t\t\t\t\t<RefreshRight />\n\t\t\t\t\t\t\t</el-icon>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"cropper_right\">\n\t\t\t\t\t<div class=\"preview_text\">\n\t\t\t\t\t\t{{ $t('action_preview') }}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div :style=\"getStyle\" class=\"previewImg\">\n\t\t\t\t\t\t<img :style=\"previews.img\" :src=\"previews.img\" alt=\"\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template #footer>\n\t\t\t<span class=\"dialog-footer\">\n\t\t\t\t<el-button size=\"large\" @click=\"dialogVisible = false\">\n\t\t\t\t\t{{ $t('action_cancel') }}\n\t\t\t\t</el-button>\n\t\t\t\t<el-button size=\"large\" type=\"\" @click=\"refreshCrop\">\n\t\t\t\t\t{{ $t('action_reset') }}\n\t\t\t\t</el-button>\n\t\t\t\t<el-button size=\"large\" type=\"primary\" :loading=\"uploading\" @click=\"onConfirm\">\n\t\t\t\t\t{{ $t('action_confirm') }}\n\t\t\t\t</el-button>\n\t\t\t</span>\n\t\t</template>\n\t</el-dialog>\n</template>\n\n<script lang=\"ts\" setup>\n// 需要引入的库\nimport 'vue-cropper/dist/index.css'\nimport { VueCropper } from 'vue-cropper'\nimport { CirclePlus, RefreshRight, Remove } from '@element-plus/icons-vue'\n\nimport { reactive, ref, watch, nextTick } from 'vue'\n// 封装的dialog组件\nimport { ElMessage } from 'element-plus'\nimport uploadApi from '@/api/modules/upload'\nimport { api_host } from '@/utils/config'\n\n// 父组件传参props\ninterface IProps {\n  type?: string // 上传类型, 企业logo / 浏览器logo\n  allowTypeList?: string[] // 接收允许上传的图片类型\n  limitSize?: number // 限制大小，单位MB\n  fixedNumber?: number[] // 截图框的宽高比例\n  fixedNumberAider?: number[] // 侧边栏收起截图框的宽高比例\n  previewWidth?: number // 预览宽度\n  title?: string // 裁剪标题\n  showWidth?: number\n  showHeight?: number\n  action?: 'ibos' | 'python'\n\tuploadAvatar?: boolean\n\tcropperDisabled?: boolean\n}\n\n// 裁剪组件需要使用到的参数\ninterface Options {\n  img: string | ArrayBuffer | null // 裁剪图片的地址\n  info: true // 裁剪框的大小信息\n  outputSize: number // 裁剪生成图片的质量 [1至0.1]\n  outputType: string // 裁剪生成图片的格式\n  canScale: boolean // 图片是否允许滚轮缩放\n  autoCrop: boolean // 是否默认生成截图框\n  autoCropWidth: number // 默认生成截图框宽度\n  autoCropHeight: number // 默认生成截图框高度\n  fixedBox: boolean // 固定截图框大小 不允许改变\n  fixed: boolean // 是否开启截图框宽高固定比例\n  fixedNumber: Array<number> // 截图框的宽高比例  需要配合centerBox一起使用才能生效\n  full: boolean // 是否输出原图比例的截图\n  canMove: boolean // 截图框能否拖动\n  original: boolean // 上传图片按照原始比例渲染\n  centerBox: boolean // 截图框是否被限制在图片里面\n  infoTrue: boolean // true 为展示真实输出图片宽高 false 展示看到的截图框宽高\n  accept: string // 上传允许的格式\n  fillColor: string\n}\n\n// 预览样式\ninterface IStyle {\n  width: number | string\n  height: number | string\n}\n\nconst ACCEPT_MAP = new Map([\n\t['jpg', 'image/jpg'],\n\t['png', 'image/png'],\n\t['jpeg', 'image/jpeg'],\n\t['ico', 'image/x-icon,image/ico'],\n])\n\nconst props = withDefaults(defineProps<IProps>(), {\n  type: 'systemLogo',\n  allowTypeList: () => ['jpg', 'png', 'jpeg'],\n  limitSize: 10,\n  fixedNumber: () => [1, 1],\n  fixedNumberAider: () => [1, 1],\n  previewWidth: 160,\n  title: '图片裁剪',\n  showWidth: 300,\n  showHeight: 300,\n  action: 'ibos',\n  uploadAvatar: false,\n\tcropperDisabled: false,\n})// dialog的显示与隐藏\n\nconst emits = defineEmits(['confirm']) // 封装的api\nconst dialogVisible = ref<boolean>(false) // 自定义事件\n\n// 裁剪组件需要使用到的参数\nconst options = reactive<Options>({\n  img: '', // 需要剪裁的图片\n  autoCrop: true, // 是否默认生成截图框\n  autoCropWidth: 300, // 默认生成截图框的宽度\n  autoCropHeight: 300, // 默认生成截图框的长度\n  fixedBox: false, // 是否固定截图框的大小 不允许改变\n  info: true, // 裁剪框的大小信息\n  outputSize: 1, // 裁剪生成图片的质量 [1至0.1]\n  outputType: 'png', // 裁剪生成图片的格式\n  canScale: true, // 图片是否允许滚轮缩放\n  fixed: true, // 是否开启截图框宽高固定比例\n  fixedNumber: [1, 1], // 截图框的宽高比例 需要配合centerBox一起使用才能生效 1比1\n  full: true, // 是否输出原图比例的截图\n  canMove: false, // 截图框能否拖动\n  original: false, // 上传图片按照原始比例渲染\n  centerBox: true, // 截图框是否被限制在图片里面\n  infoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高\n  accept: 'image/jpeg,image/jpg,image/png,image/gif,image/x-icon',\n  fillColor: 'transparent'\n})\n\nconst getStyle = ref<IStyle>({\n  width: '',\n  height: ''\n})\n\n/* 允许上传的类型 */\nconst acceptType = ref<string[]>([])\n\n// 裁剪后的预览样式信息\nconst previews: any = ref({})\n\n// 裁剪组件Ref\nconst cropperRef: any = ref({})\n// input组件Ref\nconst reuploadInput = ref<HTMLElement | null | undefined>()\nconst uploading = ref(false)\n\n/* 上传图片前置拦截函数 */\nconst beforeUploadEvent = (file: File) => {\n  const type = file.name.substring(file.name.lastIndexOf('.') + 1) // 获得图片上传后缀\n  // 判断是否符合上传类型\n  const isAllowTye = props.allowTypeList.includes(type)\n  if (!isAllowTye) {\n    ElMessage.error(`仅支持${acceptType.value.join('、')}格式的图片`)\n    return false\n  }\n  return true\n}\n\n// 回显图片使用的方法\nconst onChange = async(e: any) => {\n  const { limitSize } = props\n  const file = e.target.files[0]\n  if (file.size > limitSize * 1024 * 1024)\n    return ElMessage.warning(`图片上传大小不能超过${limitSize}MB`)\n  const URL = window.URL || window.webkitURL\n  // 上传图片前置钩子，用于判断限制类型用\n  if (beforeUploadEvent(file)) {\n\t\toptions.img = URL.createObjectURL(file)\n\t\tif (props.cropperDisabled) {\n\t\t\tuploading.value = true\n\t\t\tconst res = await cropperSuccess(file).finally(() => {\n\t\t\t\tuploading.value = false\n\t\t\t})\n\t\t\tconst url = `${api_host}/api/preview/${res.preview_key || ''}`\n\t\t\tres.url = url\n\t\t\temits('confirm', res)\n\t\t\treturn\n\t\t}\n    dialogVisible.value = true\n  }\n}\n/* 重置裁剪组件 */\nconst refreshCrop = () => {\n  // cropperRef裁剪组件自带很多方法，可以打印看看\n  cropperRef.value.refresh()\n}\n\n/* 右旋转图片 */\nconst rotateRight = () => {\n  cropperRef.value.rotateRight()\n}\n\n/* 放大缩小图片比例 */\nconst changeScale = (num: number) => {\n  const scale = num || 1\n  cropperRef.value.changeScale(scale)\n}\n\n// 点击上传\nconst uploadFile = async (type: string): Promise<void> => {\n\tif (uploading.value) return\n\t/* 打开新的上传文件无需生成新的input元素 */\n  if (type === 'reupload') {\n    reuploadInput.value?.click()\n    return\n  }\n  let input: HTMLInputElement | null = document.createElement('input')\n\tinput.type = 'file'\n\t// input.accept = options.accept\n\tinput.accept = props.allowTypeList.map((val) => ACCEPT_MAP.get(val)).join(',') || options.accept\n  input.onchange = onChange\n\tinput.click()\n\tawait nextTick()\n  input = null\n}\n\n/* 上传成功方法 */\nconst cropperSuccess = async (dataFile: File) => {\n\ttry {\n\t\tconst res = await uploadApi.upload(dataFile)\n\t\treturn res.data\n\t}\n\tcatch (error) {\n\t\treturn { }\n\t}\n}\n\n// base64转图片文件\nconst dataURLtoFile = (dataUrl: string, filename: string) => {\n  const arr = dataUrl.split(',')\n  const mime = arr[0].match(/:(.*?);/)[1]\n  const bstr = atob(arr[1])\n  let len = bstr.length\n  const u8arr = new Uint8Array(len)\n  while (len--)\n    u8arr[len] = bstr.charCodeAt(len)\n\n  return new File([u8arr], filename, { type: mime })\n}\n\n// 上传图片（点击保存按钮）\nconst onConfirm = () => {\n\tuploading.value = true\n\tcropperRef.value.getCropData(async (data: string) => {\n    const dataFile: File = dataURLtoFile(data, 'images.png')\n\t\tconst res = await cropperSuccess(dataFile).finally(() => {\n\t\t\tuploading.value = false\n\t\t})\n\t\tconst url = `${api_host}/api/preview/${res.preview_key || ''}`\n\t\tres.url = url\n    emits('confirm', res)\n\t\tdialogVisible.value = false\n  })\n}\n\n// 裁剪之后的数据\nconst previewHandle = (data: any) => {\n  // previews.value = data // 预览img图片\n\n  cropperRef.value.getCropData((data: string) => {\n    previews.value.img = data\n  })\n}\n\nwatch(\n  () => props,\n  () => {\n    /* 预览样式 */\n    getStyle.value = {\n      'width': `${props.previewWidth}px`, // 预览宽度\n      'height': `${props.previewWidth / props.fixedNumber[0]}px`, // 预览高度\n      'border': '1px solid #e8e8e8',\n      'border-radius': '2px',\n    }\n    // 上传格式tips信息\n    acceptType.value = []\n    for (let i = 0; i < props.allowTypeList.length; i++)\n      acceptType.value.push(props.allowTypeList[i].toUpperCase())\n  }, {\n    deep: true,\n    immediate: true,\n  },\n)\n\n/* 向子组件抛出上传事件 */\ndefineExpose({\n  uploadFile,\n  open(url) {\n    options.img = url\n    dialogVisible.value = true\n  },\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.cropper {\n  width: 100%;\n  height: 330px;\n  display: flex;\n  overflow: hidden;\n  .cropper_left {\n    display: flex;\n    flex-direction: column;\n    .reupload_box {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      margin-top: 10px;\n      .reupload_text {\n        color: var(--primary-color);\n        cursor: pointer;\n      }\n      .rotate_right {\n        margin-left: 16px;\n        cursor: pointer;\n      }\n    }\n  }\n  .cropper_right {\n    flex: 1;\n    margin-left: 16px;\n    .preview_text {\n      margin-bottom: 12px;\n    }\n  }\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/DeptMemberPicker/index.vue",
    "content": "<template>\n  <div class=\"relative\">\n    <div v-if=\"$slots.trigger\" @click=\"open\">\n      <slot name=\"trigger\" />\n    </div>\n    <ul v-if=\"!$slots.trigger\" class=\"w-full flex items-center flex-wrap gap-2\">\n      <li\n        v-for=\"item in modelValue\"\n        :key=\"item.value\"\n        class=\"flex items-center gap-2 px-2 box-border border border-[#E5E5E5] rounded-sm text-[#666]\"\n      >\n        <SvgIcon name=\"department\" width=\"16px\" height=\"16px\" color=\"#57A1FF\" />\n        {{ item.name }}\n      </li>\n      <ElButton type=\"primary\" link @click=\"open\">\n        {{ $t(!modelValue.length ? 'action_add' : 'action_modify') }}\n      </ElButton>\n    </ul>\n    <ElDialog\n      v-model=\"visible\"\n      :title=\"$t('action_select')\"\n      width=\"650px\"\n      :close-on-click-modal=\"false\"\n      destroy-on-close\n      append-to-body\n    >\n      <div class=\"flex h-[400px]\">\n        <div class=\"flex-1 w-0 pr-4 box-border flex flex-col border-r border-[#E5E5E5]\">\n          <ElInput\n            v-model=\"filterForm.keyword\"\n            class=\"w-full h-[36px]\"\n            size=\"default\"\n            clearable\n            :prefix-icon=\"Search\"\n            :placeholder=\"\n              type === 'user'\n                ? $t('internal_user.organization.user_search_placeholder')\n                : $t('internal_user.organization.department_search_placeholder')\n            \"\n            @change=\"handleKeywordChange\"\n          />\n          <el-radio-group v-if=\"showGroup\" v-model=\"selectionMode\" class=\"mt-4\">\n            <el-radio-button label=\"成员\" value=\"member\" />\n            <el-radio-button label=\"分组\" value=\"group\" />\n          </el-radio-group>\n          <template v-if=\"selectionMode === 'member'\">\n            <ElTree\n              ref=\"treeRef\"\n              class=\"mt-4 flex-1 h-0 box-border pr-1 overflow-auto\"\n              node-key=\"value\"\n              :data=\"treeData\"\n              :default-expanded-keys=\"[0]\"\n              :expand-on-click-node=\"false\"\n              :filter-node-method=\"filterNode\"\n              @node-click=\"handleNodeClick\"\n            >\n              <template #default=\"{ data }\">\n                <div class=\"w-full flex items-center gap-2 group\">\n                  <SvgIcon\n                    :name=\"+data.user_id ? 'member' : 'department'\"\n                    width=\"16px\"\n                    height=\"16px\"\n                    :color=\"selectedValue.some(i => i.value === data.value) ? '#3664EF' : '#999'\"\n                  />\n                  <div\n                    class=\"flex-1 w-0 text-sm truncate\"\n                    :class=\"[selectedValue.some(i => i.value === data.value) ? 'text-[#3664EF]' : 'text-[#333]']\"\n                    :title=\"data.label\"\n                  >\n                    {{ data.label }}\n                  </div>\n                  <ElIcon v-if=\"selectedValue.some(i => i.value === data.value)\" color=\"#3664EF\">\n                    <Check />\n                  </ElIcon>\n                </div>\n              </template>\n            </ElTree>\n          </template>\n          <template v-if=\"selectionMode === 'group'\">\n            <ElTree\n              ref=\"treeGroupRef\"\n              class=\"mt-4 flex-1 h-0 box-border pr-1 overflow-auto\"\n              node-key=\"value\"\n              :data=\"groupData\"\n              :default-expanded-keys=\"[0]\"\n              :expand-on-click-node=\"false\"\n              :filter-node-method=\"filterNode\"\n              @node-click=\"handleNodeClickGroup\"\n            >\n              <template #default=\"{ data }\">\n                <div class=\"w-full flex items-center gap-2 group\">\n                  <SvgIcon\n                    name=\"user-group\"\n                    width=\"16px\"\n                    height=\"16px\"\n                    :color=\"selectedValue.some(i => i.value === data.value) ? '#3664EF' : '#999'\"\n                  />\n                  <div\n                    class=\"flex-1 w-0 text-sm truncate\"\n                    :class=\"[selectedValue.some(i => i.value === data.value) ? 'text-[#3664EF]' : 'text-[#333]']\"\n                    :title=\"data.label\"\n                  >\n                    {{ data.label }}\n                  </div>\n                  <ElIcon v-if=\"selectedValue.some(i => i.value === data.value)\" color=\"#3664EF\">\n                    <Check />\n                  </ElIcon>\n                </div>\n              </template>\n            </ElTree>\n          </template>\n        </div>\n        <div class=\"flex-1 w-0 pl-4 box-border flex flex-col\">\n          <div class=\"h-10 flex items-center justify-between\">\n            <h4>\n              {{ $t('internal_user.scope.selected_title') }}\n            </h4>\n            <!-- <ElButton type=\"primary\" :disabled=\"!selectedValue.length\" link @click=\"handleClear\">\n              {{ $t('action_clear') }}\n            </ElButton> -->\n          </div>\n          <div class=\"flex-1 h-0 w-full mt-3 bg-[#FBF8FB] rounded overflow-auto\">\n            <ul class=\"box-border p-4 flex items-start flex-wrap gap-2\">\n              <li\n                v-for=\"item in selectedValue\"\n                :key=\"item.value\"\n                class=\"py-1 bg-white px-2 box-border border border-[#E5E5E5] rounded-sm\"\n              >\n                <SvgIcon\n                  v-if=\"item.type === 'member'\"\n                  class=\"inline-block mr-1\"\n                  :name=\"+item.user_id ? 'member' : 'department'\"\n                  width=\"12px\"\n                  height=\"12px\"\n                  color=\"#939499\"\n                />\n                <SvgIcon\n                  v-else-if=\"item.type === 'group'\"\n                  class=\"inline-block mr-1\"\n                  name=\"user-group\"\n                  width=\"16px\"\n                  height=\"16px\"\n                  color=\"#939499\"\n                />\n                {{ item.label }}\n                <ElButton\n                  class=\"ml-1 !outline-none !border-none !bg-[#C4C4C4] !size-4\"\n                  style=\"zoom: 0.9\"\n                  :icon=\"Close\"\n                  type=\"info\"\n                  size=\"small\"\n                  circle\n                  @click=\"handleRemove(item)\"\n                />\n              </li>\n            </ul>\n          </div>\n        </div>\n      </div>\n      <template #footer>\n        <div class=\"py-4 flex items-center justify-end\">\n          <ElButton size=\"large\" @click.stop=\"close\">\n            {{ $t('action_cancel') }}\n          </ElButton>\n          <ElButton size=\"large\" type=\"primary\" @click=\"handleConfirm\">\n            {{ $t('action_confirm') }}\n          </ElButton>\n        </div>\n      </template>\n    </ElDialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Check, Close, Search } from '@element-plus/icons-vue'\nimport { onMounted, reactive, ref } from 'vue'\nimport { departmentApi, getRootDepartmentData } from '@/api/modules/department'\nimport { INTERNAL_USER_STATUS_ALL, userApi } from '@/api/modules/user'\nimport { groupApi } from '@/api/modules/group'\nimport { GROUP_TYPE } from '@/constants/group'\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: any[]\n    type?: 'general' | 'department' | 'user'\n    defaultFirstValue?: boolean\n    multiple?: boolean\n    showGroup?: boolean\n    // 当type = user 时，可以选择企业名称当做全公司成员\n    allowSelectAllCompany?: boolean\n  }>(),\n  {\n    modelValue: () => [],\n    type: 'general',\n    defaultFirstValue: true,\n    multiple: true,\n    showGroup: false,\n    allowSelectAllCompany: false,\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'update:modelValue', value: any[]): void\n  (e: 'change', result: { value: any[] }): void\n  (e: 'confirm', result: { value: any[] }): void\n}>()\n\nconst treeData = ref([])\nconst rootData = ref({})\nconst loading = ref(false)\nconst selectedValue = ref(JSON.parse(JSON.stringify(props.modelValue)))\nconst visible = ref(false)\nconst selectionMode = ref('member')\nconst groupData = ref([])\n\nconst setModelValue = ({ value = [] } = {}) => {\n  value = JSON.parse(JSON.stringify(value))\n  selectedValue.value = value\n  emits('update:modelValue', value)\n  emits('change', { value })\n}\nconst fetchDepartmentTree = async () => {\n  loading.value = true\n  treeData.value = await departmentApi.fetch_department_tree().finally(() => {\n    loading.value = false\n  })\n  rootData.value = treeData.value[0]\n}\n\nconst treeRef = ref()\nconst treeGroupRef = ref()\n\nconst filterForm = reactive({\n  keyword: '',\n})\n\nconst open = () => {\n  selectedValue.value = JSON.parse(JSON.stringify(props.modelValue)).map((item = {}) => {\n    item.value = +item.value || +item.did || +item.user_id || 0\n    item.label = item.label || item.name || ''\n    return item\n  })\n  visible.value = true\n}\nconst close = () => {\n  visible.value = false\n}\nconst handleKeywordChange = () => {\n  if (selectionMode.value === 'member') {\n    treeRef.value.filter(filterForm.keyword)\n  } else if (selectionMode.value === 'group') {\n    treeGroupRef.value.filter(filterForm.keyword)\n  }\n}\nconst filterNode = (value: string, data: any) => {\n  if (!value) return true\n  // 根据当前选中的标签页来决定搜索字段\n  if (selectionMode.value === 'group') {\n    return (data.label || '').includes(value) || (data.group_name || '').includes(value)\n  }\n  return (data.name || '').includes(value) || (data.label || '').includes(value)\n}\nconst handleRemove = (item: any) => {\n  selectedValue.value = selectedValue.value.filter(i => i.value !== item.value)\n}\nconst handleNodeClick = (data: any) => {\n  if (props.type === 'user') {\n    if (props.allowSelectAllCompany) {\n      if (!data.user_id && data.value) return\n    } else if (!data.user_id) return\n  }\n\n  if (props.multiple) {\n    if (selectedValue.value.some(i => i.value === data.value))\n      selectedValue.value = selectedValue.value.filter(i => i.value !== data.value)\n    else selectedValue.value.push(data)\n  } else {\n    selectedValue.value = [data]\n  }\n}\nconst handleNodeClickGroup = (data: any) => {\n  if (selectedValue.value.some(i => i.value === data.value))\n    selectedValue.value = selectedValue.value.filter(i => i.value !== data.value)\n  else selectedValue.value.push(data)\n}\nconst allUserData = ref([])\nconst fetchInternalUserData = async () => {\n  const params = {\n    status: INTERNAL_USER_STATUS_ALL,\n    // keyword: filterForm.keyword,\n    offset: 0,\n    limit: 10000,\n  }\n  const { list = [] } = await userApi.fetch_internal_user(params)\n  allUserData.value = list.map((item = {}) => {\n    item.value = +item.user_id || 0\n    item.label = item.nickname || item.name || ''\n    item.type = 'member'\n    return item\n  })\n}\n\nconst handleClear = () => {\n  setModelValue({ value: [] })\n}\nconst handleConfirm = () => {\n  setModelValue({ value: selectedValue.value })\n  emits('confirm', { value: selectedValue.value })\n  close()\n}\n\nonMounted(async () => {\n  if (['general', 'department', 'user'].includes(props.type)) {\n    rootData.value = await getRootDepartmentData()\n    if (props.defaultFirstValue && !props.modelValue.length) setModelValue({ value: [rootData.value] })\n    await Promise.all([\n      fetchDepartmentTree(),\n      ['general', 'user'].includes(props.type) ? fetchInternalUserData() : Promise.resolve(),\n    ])\n    if (['general', 'user'].includes(props.type)) {\n      const findData = (data: any = {}) => {\n        data.children = data.children.map((item, index) => {\n          item = findData(item)\n          return item\n        })\n        allUserData.value.forEach(item => {\n          const dept_id_list = item.dept_id_list || []\n          if (dept_id_list.includes(data.did) || (!dept_id_list.length && data.did == 0))\n            data.children.push(JSON.parse(JSON.stringify(item)))\n        })\n        return data\n      }\n      treeData.value = treeData.value.map((item, index) => {\n        item = findData(item)\n        return item\n      })\n    }\n  }\n  if (props.showGroup) {\n    const list = await groupApi.list({ params: { group_type: GROUP_TYPE.INTERNAL_USER } })\n    groupData.value = list.map((item, index) => {\n      item.value = item.group_id || 0\n      item.label = item.group_name || ''\n      item.type = 'group'\n      return item\n    })\n  }\n})\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/components/DialogueRecord/drawer.vue",
    "content": "<script setup lang=\"ts\">\nimport DialogueRecordView from '@/components/DialogueRecord/index.vue'\n\nimport { computed, onMounted, ref } from 'vue'\n\nconst visible = ref(false)\n\nonMounted(() => {\n})\n\nconst type = ref<'user' | 'agent'>('user')\nconst relatedId = ref<string | number>()\nconst open = ({ type: _type, relatedId: _relatedId }: { type: 'user' | 'agent', relatedId: string | number }) => {\n\ttype.value = _type\n\trelatedId.value = _relatedId\n\tvisible.value = true\n}\n\nconst close = () => {\n\tvisible.value = false\n}\n\ndefineExpose({ open, close })\n</script>\n\n<template>\n\t<ElDrawer v-model=\"visible\" :title=\"$t('dialogue_record')\" size=\"880px\" destroy-on-close append-to-body\n\t\t:close-on-click-modal=\"true\">\n\t\t<DialogueRecordView className=\"!px-2 !py-2\" :type=\"type\" :relatedId=\"relatedId\" />\n\t</ElDrawer>\n</template>\n\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/components/DialogueRecord/index.vue",
    "content": "<template>\n  <div class=\"h-full overflow-y-auto bg-white rounded-lg px-8 py-7 box-border overflow-hidden\" :class=\"className\">\n    <div class=\"flex items-center gap-2\">\n      <!-- <ElSelect class=\"flex-none !w-[180px]\" v-model=\"filterForm.sort_by\" :placeholder=\"$t('form_select_placeholder')\"\n\t\t\t\tsize=\"large\" @change=\"refresh\">\n\t\t\t\t<template #prefix>\n\t\t\t\t\t<label class=\"text-sm text-[#768097]\">{{ $t('filter') }}：</label>\n\t\t\t\t</template>\n\t\t\t\t<ElOption v-for=\"item in sortOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\" />\n\t\t\t</ElSelect> -->\n      <div class=\"flex-none w-[250px]\">\n        <DateRangeFilter v-model=\"filterForm.date\" class=\"!w-full\" @change=\"refresh\" />\n      </div>\n      <div class=\"flex-1 w-0\" />\n      <ElInput\n        v-model=\"filterForm.keyword\"\n        class=\"max-w-[268px]\"\n        size=\"large\"\n        clearable\n        :placeholder=\"$t(type === 'agent' ? 'user/mobile' : 'keyword')\"\n        :suffix-icon=\"Search\"\n        @change=\"refresh\"\n      />\n    </div>\n    <TablePlus\n      class=\"mt-5\"\n      :data=\"tableList\"\n      :total=\"tableTotal\"\n      :loading=\"tableLoading\"\n      :page=\"filterForm.page\"\n      :limit=\"filterForm.pageSize\"\n      style=\"width: 100%\"\n      header-row-class-name=\"rounded overflow-hidden\"\n      header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n      @page-size-change=\"handleSizeChange\"\n      @page-current-change=\"handleCurrentChange\"\n    >\n      <!-- <ElTableColumn prop=\"updated_time\" :label=\"$t('update_time')\" width=\"160\" show-overflow-tooltip>\n\t\t\t\t<template #default=\"scope\">\n\t\t\t\t\t{{ scope.row.updated_time }}\n\t\t\t\t</template>\n\t\t\t</ElTableColumn> -->\n      <ElTableColumn prop=\"create_time\" :label=\"$t('create_time')\" width=\"160\" show-overflow-tooltip>\n        <template #default=\"scope\">\n          {{ scope.row.create_time }}\n        </template>\n      </ElTableColumn>\n      <ElTableColumn prop=\"summary\" :label=\"$t('summary')\" min-width=\"180\" show-overflow-tooltip>\n        <template #default=\"scope\">\n          {{ scope.row.summary_content || '- -' }}\n        </template>\n      </ElTableColumn>\n      <ElTableColumn prop=\"message_count\" :label=\"$t('message_count')\" width=\"120\" align=\"center\" />\n      <ElTableColumn :label=\"$t('operation')\" width=\"140\" align=\"center\">\n        <template #default=\"{ row }\">\n          <ElButton type=\"primary\" link @click=\"handleDetail(row)\">\n            {{ $t('detail') }}\n          </ElButton>\n        </template>\n      </ElTableColumn>\n\n      <!-- <el-table-column label=\"用户反馈\" width=\"140\">\n\t\t\t\t<template #default=\"scope\">\n\t\t\t\t\t<div class=\"flex gap-1\">\n\t\t\t\t\t\t<div v-if=\"scope.row.user_feedback_stats.like\"\n\t\t\t\t\t\t\tclass=\"h-6 flex-center gap-1 px-1 bg-[#EFF3FD] rounded text-xs text-[#2563EB]\">\n\t\t\t\t\t\t\t<svg-icon name=\"like\" />\n\t\t\t\t\t\t\t{{ scope.row.user_feedback_stats.like }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"scope.row.user_feedback_stats.dislike\"\n\t\t\t\t\t\t\tclass=\"h-6 flex-center gap-1 px-1 bg-[#EFF3FD] rounded text-xs text-[#FA5151]\">\n\t\t\t\t\t\t\t<svg-icon name=\"dislike\" />\n\t\t\t\t\t\t\t{{ scope.row.user_feedback_stats.dislike }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div v-if=\"!scope.row.user_feedback_stats.like && !scope.row.user_feedback_stats.dislike\"\n\t\t\t\t\t\t\tclass=\"text-sm text-[#182B50]\">\n\t\t\t\t\t\t\t--\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</el-table-column> -->\n    </TablePlus>\n  </div>\n\n  <ElDrawer v-model=\"detailVisible\" destroy-on-close :title=\"$t('dialogue_detail')\" size=\"697px\">\n    <div v-loading=\"detailLoading\">\n      <x-bubble-list :messages=\"messageList\" class=\"px-4 relative py-4\">\n        <template #header>\n          <!-- <x-bubble-assistant :content=\"agentFormStore.form_data.settings.opening_statement\"\n\t\t\t\t\t\t:suggestions=\"agentFormStore.form_data.settings.suggested_questions\" />\n\t\t\t\t\t<ElEmpty v-if=\"showChatListEmpty\" class=\"mt-10\" :description=\"$t('chat.empty_desc')\" /> -->\n        </template>\n        <template #item=\"{ message, index }\">\n          <x-bubble-user :content=\"message.question.content\" :files=\"message.question.user_files\">\n            <template v-if=\"!message.answer.loading\" #menu>\n              <x-icon size=\"16\" class=\"cursor-pointer\" name=\"copy\" @click=\"onCopy(message.question.content)\" />\n            </template>\n          </x-bubble-user>\n          <!-- :always-show-menu=\"message_index === messageList.length - 1\" -->\n          <x-bubble-assistant\n            :content=\"message.answer.content\"\n            :reasoning=\"message.answer.reasoning_content\"\n            :reasoning-expanded=\"message.answer.reasoning_expanded\"\n            :streaming=\"message.answer.loading\"\n          >\n            <template v-if=\"!message.answer.loading\" #menu>\n              <x-icon size=\"16\" class=\"cursor-pointer\" name=\"copy\" @click=\"onCopy(message.answer.content)\" />\n            </template>\n          </x-bubble-assistant>\n        </template>\n      </x-bubble-list>\n    </div>\n    <!-- <ChatView ref=\"chatViewRef\" v-if=\"detailVisible\" :library=\"realLibrary\" :mode=\"app.mode\" :features=\"app.model_config\"\n\t\t\t@feedback=\"fetchData\" /> -->\n  </ElDrawer>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, reactive, ref } from 'vue'\nimport { Search } from '@element-plus/icons-vue'\n\n// import ChatView from '@/flow/components/chat/chat-view.vue'\nimport DateRangeFilter from '@/components/Filter/date-range.vue'\n\nimport { getSimpleDateFormatString, getDateTimestamp } from '@/utils/moment'\nimport { conversationApi } from '@/api/modules/conversation'\nimport { messageApi } from '@/api/modules/message'\nimport { copyToClip } from '@/utils/copy'\n// import { useAgentFormStore } from '@/views/agent/create/store'\n\nconst props = withDefaults(\n  defineProps<{\n    type?: 'agent' | 'user'\n    relatedId?: string | number\n    className?: string\n  }>(),\n  {}\n)\n\n// const agentFormStore = useAgentFormStore()\n\nconst sortOptions = [\n  {\n    value: '-updated_at',\n    label: `${window.$t('update_time')} ↓`,\n  },\n  {\n    value: 'updated_at',\n    label: `${window.$t('update_time')} ↑`,\n  },\n  {\n    value: '-created_at',\n    label: `${window.$t('create_time')} ↓`,\n  },\n  {\n    value: 'created_at',\n    label: `${window.$t('create_time')} ↑`,\n  },\n]\n\n// const app = inject('app') as Dify.App\n// const realLibrary = inject('realLibrary')\n// const chatViewRef = ref()\n// const chatView2Ref = ref()\n\nconst filterForm = reactive({\n  keyword: '',\n  sort_by: '-updated_at',\n  date: [],\n  page: 1,\n  pageSize: 10,\n})\nconst detailVisible = ref(false)\nconst detailLoading = ref(false)\nconst tableList = ref([])\nconst tableTotal = ref(0)\nconst tableLoading = ref(false)\n\n// const showChatListEmpty = computed(() => {\n// \tconst settings = agentFormStore.form_data.settings\n// \tif (chat_list.value.length)\n// \t\treturn false\n// \tif (settings.opening_statement.replace(/\\s/g, ''))\n// \t\treturn false\n// \tif (settings.suggested_questions.length && settings.suggested_questions.some(item => item.content.replace(/\\s/g, '')))\n// \t\treturn false\n// \treturn true\n// })\n\nconst getCommonParams = () => {\n  const params = {\n    sort_by: filterForm.sort_by,\n  }\n  if (filterForm.keyword) options.params = filterForm.keyword\n  if (filterForm.date[0]) params.created_at_start = getDateTimestamp(filterForm.date[0])\n  if (filterForm.date[1]) params.created_at_end = getDateTimestamp(filterForm.date[1])\n  if (props.type === 'agent') params.agent_id = props.relatedId\n  else if (props.type === 'user') params.user_id = props.relatedId\n  return params\n}\n\nconst refresh = async () => {\n  filterForm.page = 1\n  return fetchData()\n}\nconst fetchData = async () => {\n  const params = {\n    offset: (filterForm.page - 1) * filterForm.pageSize,\n    limit: filterForm.pageSize,\n    ...getCommonParams(),\n  }\n  tableLoading.value = true\n  const {\n    data: { count = 0, items = [] },\n  } = await conversationApi[`fetch_${props.type}_conversations`]({\n    ...params,\n  }).finally(() => {\n    tableLoading.value = false\n  })\n  tableList.value = items.map(item => {\n    item.create_time = getSimpleDateFormatString({ date: item.created_at, format: 'YYYY-MM-DD hh:mm' })\n    try {\n      item.summary = JSON.parse(item.summary || '[]')\n    } catch (error) {\n      item.summary = []\n    }\n    item.summary_content = (item.summary[0] || {}).content || ''\n    return item\n  })\n  tableTotal.value = +count || 0\n}\nconst handleCurrentChange = page => {\n  filterForm.page = page\n  fetchData()\n}\nconst handleSizeChange = pageSize => {\n  filterForm.pageSize = pageSize\n  refresh()\n}\nconst messageList = ref([])\nconst handleDetail = async data => {\n  detailVisible.value = true\n  detailLoading.value = true\n  const { data: { messages = [] } = {} } = await messageApi\n    .fetch_conversation_messages({\n      conversation_id: data.id,\n      offset: 0,\n      limit: 1000,\n    })\n    .finally(() => {\n      detailLoading.value = false\n    })\n  messageList.value = messages.map((item = {}) => {\n    try {\n      item.message = JSON.parse(item.message || '[]')\n    } catch (error) {\n      item.message = []\n    }\n    const question = item.message[0] || {}\n    return {\n      question: {\n        role: question.role || 'user',\n        content: question.content || '',\n        user_files: question.user_files || [],\n      },\n      answer: {\n        loading: false,\n        role: 'assistant',\n        content: item.answer || '',\n        reasoning_expanded: true,\n        reasoning_content: item.reasoning_content || '',\n      },\n    }\n  })\n}\nconst onCopy = async (text = '') => {\n  await copyToClip(text)\n  ElMessage.success(window.$t('action_copy_success'))\n}\n\nonMounted(() => {\n  refresh()\n})\n</script>\n"
  },
  {
    "path": "web/console/src/components/EntityDisplay/README.md",
    "content": "# EntityDisplay 组件\n\n统一的实体显示组件，支持用户和群组信息的显示。\n\n## 功能特性\n\n- 🔄 **统一接口**: 支持用户和群组的统一显示\n- 📦 **智能缓存**: 内置缓存机制，避免重复请求\n- 🎨 **多种模式**: 支持头像、名称、完整显示模式\n- ⚡ **性能优化**: 请求去重，避免并发重复请求\n- 🔧 **向下兼容**: 保持原有 API 完全兼容\n\n## 基本使用\n\n### 1. 使用统一组件\n\n```vue\n<template>\n  <!-- 显示用户头像 -->\n  <EntityDisplay type=\"user\" :id=\"userId\" mode=\"avatar\" />\n  \n  <!-- 显示群组名称 -->\n  <EntityDisplay type=\"group\" :id=\"groupId\" mode=\"name\" />\n  \n  <!-- 完整显示（头像 + 名称） -->\n  <EntityDisplay type=\"user\" :id=\"userId\" mode=\"full\" />\n</template>\n\n<script setup lang=\"ts\">\nimport EntityDisplay from '@/components/EntityDisplay/index.vue'\n\nconst userId = ref(123)\nconst groupId = ref(456)\n</script>\n```\n\n### 2. 使用 Hook 获取数据\n\n```typescript\nimport { useEntityInfo } from '@/hooks/useEntityInfo'\nimport { ENTITY_TYPE } from '@/types/entity'\n\nconst { getEntityInfo, getBatchEntityInfo } = useEntityInfo()\n\n// 获取用户信息\nconst userInfo = await getEntityInfo(ENTITY_TYPE.USER, userId)\n\n// 获取群组信息  \nconst groupInfo = await getEntityInfo(ENTITY_TYPE.GROUP, groupId)\n\n// 批量获取\nconst entities = await getBatchEntityInfo([\n  { type: ENTITY_TYPE.USER, id: 1 },\n  { type: ENTITY_TYPE.GROUP, id: 2 }\n])\n```\n\n### 3. 兼容性\n\n为了保持向后兼容性，EntityDisplay 组件内部提供了兼容性组件：\n\n```vue\n<template>\n  <!-- 使用统一的 EntityDisplay 组件 -->\n  <EntityDisplay type=\"user\" :entity-id=\"userId\" mode=\"avatar\" />\n  <EntityDisplay type=\"group\" :entity-id=\"groupId\" mode=\"name\" />\n</template>\n\n<script setup lang=\"ts\">\nimport EntityDisplay from '@/components/EntityDisplay/index.vue'\n</script>\n```\n\n新的统一组件提供了更好的性能和一致性。\n\n## API 参考\n\n### EntityDisplay Props\n\n| 属性 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| type | `'user' \\| 'group'` | - | 实体类型 |\n| id | `number \\| string` | - | 实体ID |\n| mode | `'avatar' \\| 'name' \\| 'full'` | `'avatar'` | 显示模式 |\n| avatarSize | `number \\| string` | `20` | 头像大小 |\n| avatarShape | `'circle' \\| 'square'` | `'circle'` | 头像形状 |\n| showLoading | `boolean` | `true` | 是否显示加载状态 |\n| defaultAvatar | `string` | `''` | 自定义默认头像路径 |\n\n### 显示模式说明\n\n- **avatar**: 仅显示头像\n- **name**: 仅显示名称\n- **full**: 显示头像 + 名称\n\n## Hook 使用\n\n### 1. 使用统一 Hook\n\n```typescript\nimport { useEntityInfo } from '@/hooks/useEntityInfo'\nimport { ENTITY_TYPE } from '@/types/entity'\n\nconst { \n  loading,\n  getEntityInfo,\n  getBatchEntityInfo,\n  clearEntityCache \n} = useEntityInfo()\n\n// 获取用户信息\nconst userInfo = await getEntityInfo(ENTITY_TYPE.USER, 123)\n\n// 获取群组信息\nconst groupInfo = await getEntityInfo(ENTITY_TYPE.GROUP, 456)\n\n// 批量获取\nconst users = await getBatchEntityInfo(ENTITY_TYPE.USER, [123, 456])\n```\n\n### 2. 使用兼容性 Hook\n\n```typescript\n// 原有的 Hook 仍然可用，但建议迁移到统一 Hook\nimport { useUserInfo } from '@/hooks/useUserInfo'\nimport { useGroupInfo } from '@/hooks/useGroupInfo'\n\nconst { getUserInfo } = useUserInfo()\nconst { getGroupInfo } = useGroupInfo()\n```\n\n## 类型定义\n\n```typescript\n// 实体类型\nexport type EntityType = 'user' | 'group'\n\n// 用户信息\nexport interface UserInfo {\n  user_id: number\n  nickname: string\n  name: string\n  avatar: string\n  email: string\n  mobile: string\n  role: number\n  status: number\n  departments: unknown[]\n  created_time: number\n  value: number\n  label: string\n}\n\n// 群组信息\nexport interface GroupInfo {\n  group_id: number\n  group_name: string\n  sort: number\n  value: number\n  label: string\n  avatar?: string\n}\n```\n\n## 迁移指南\n\n### 从旧组件迁移到新组件\n\n#### 旧的 UserDisplay 组件迁移\n\n```vue\n<!-- 旧的写法 -->\n<UserDisplay \n  :user-id=\"123\" \n  mode=\"full\" \n  :avatar-size=\"32\"\n/>\n\n<!-- 新的写法 -->\n<EntityDisplay \n  type=\"user\"\n  :entity-id=\"123\" \n  mode=\"full\" \n  :avatar-size=\"32\"\n/>\n```\n\n#### 旧的 GroupDisplay 组件迁移\n\n```vue\n<!-- 旧的写法 -->\n<GroupDisplay \n  :group-id=\"456\" \n  mode=\"compact\" \n  :show-avatar=\"false\"\n/>\n\n<!-- 新的写法 -->\n<EntityDisplay \n  type=\"group\"\n  :entity-id=\"456\" \n  mode=\"compact\" \n  :show-avatar=\"false\"\n/>\n```\n\n#### 旧的 Hook 迁移\n\n```vue\n<script setup lang=\"ts\">\n// 旧的写法\nimport { useUserInfo } from '@/hooks/useUserInfo'\nimport { useGroupInfo } from '@/hooks/useGroupInfo'\n\nconst { loading: userLoading, getUserInfo } = useUserInfo()\nconst { loading: groupLoading, getGroupInfo } = useGroupInfo()\n\n// 新的写法\nimport { useEntityInfo } from '@/hooks/useEntityInfo'\nimport { ENTITY_TYPE } from '@/types/entity'\n\nconst { loading, getEntityInfo } = useEntityInfo()\n\n// 获取用户信息\nconst userInfo = await getEntityInfo(ENTITY_TYPE.USER, 123)\n\n// 获取群组信息\nconst groupInfo = await getEntityInfo(ENTITY_TYPE.GROUP, 456)\n</script>\n```\n\n## 注意事项\n\n1. **缓存机制**: 组件内置了5分钟的缓存机制，相同的请求会复用缓存结果\n2. **请求去重**: 并发的相同请求会被合并，避免重复调用 API\n3. **错误处理**: 组件内置了错误处理，获取失败时会显示默认状态\n4. **性能优化**: 使用了 Vue 3 的响应式系统和组合式 API，性能更优\n\n## 最佳实践\n\n1. **优先使用统一组件**: 新代码建议直接使用 `EntityDisplay` 组件\n2. **合理使用缓存**: 利用内置缓存机制，避免不必要的 API 调用\n3. **类型安全**: 使用 TypeScript 类型定义，确保类型安全\n4. **错误边界**: 在关键位置添加错误处理逻辑"
  },
  {
    "path": "web/console/src/components/EntityDisplay/index.vue",
    "content": "<template>\n  <div class=\"inline-flex items-center\">\n    <!-- 加载状态 -->\n    <template v-if=\"loading && showLoading\">\n      <el-skeleton\n        v-if=\"mode === 'avatar'\"\n        :style=\"{ '--el-skeleton-circle-size': `${avatarSize}px`, height: `${avatarSize}px` }\"\n      >\n        <template #template>\n          <el-skeleton-item variant=\"circle\" />\n        </template>\n      </el-skeleton>\n\n      <el-skeleton v-else :rows=\"0\" animated :style=\"{ width: '80px', height: '20px' }\" />\n    </template>\n\n    <!-- 显示实体头像 -->\n    <div v-else-if=\"mode === 'avatar'\" class=\"inline-flex items-center\">\n      <el-avatar\n        v-if=\"entityInfo?.avatar\"\n        :src=\"String(entityInfo.avatar)\"\n        :size=\"Number(avatarSize)\"\n        :shape=\"avatarShape\"\n      />\n      <el-avatar\n        v-else\n        :src=\"defaultAvatarUrl\"\n        :size=\"Number(avatarSize)\"\n        :shape=\"avatarShape\"\n        style=\"--el-avatar-bg-color: transparent\"\n      />\n    </div>\n\n    <!-- 显示实体名称 -->\n    <span v-else-if=\"mode === 'name'\" class=\"text-sm text-gray-600\">\n      {{ displayName }}\n    </span>\n\n    <!-- 完整显示模式（头像 + 名称） -->\n    <div v-else-if=\"mode === 'full'\" class=\"inline-flex items-center gap-2\">\n      <el-avatar\n        v-if=\"entityInfo?.avatar\"\n        :src=\"String(entityInfo.avatar)\"\n        :size=\"Number(avatarSize)\"\n        :shape=\"avatarShape\"\n      />\n      <el-avatar\n        v-else\n        :src=\"defaultAvatarUrl\"\n        :size=\"Number(avatarSize)\"\n        :shape=\"avatarShape\"\n        style=\"--el-avatar-bg-color: transparent\"\n      />\n      <span class=\"text-sm text-gray-600\">{{ displayName }}</span>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted } from 'vue'\nimport { useEntityInfo } from '@/hooks/useEntityInfo'\nimport type { EntityType, EntityInfo } from '@/types/entity'\nimport { ENTITY_TYPE } from '@/types/entity'\n\ninterface Props {\n  /** 实体类型：user | group */\n  type?: EntityType\n  /** 实体ID */\n  id: number | string\n  /** 显示模式：avatar | name | full */\n  mode?: 'avatar' | 'name' | 'full'\n  /** 头像大小 */\n  avatarSize?: number | string\n  /** 头像形状 */\n  avatarShape?: 'circle' | 'square'\n  /** 是否显示加载状态 */\n  showLoading?: boolean\n  /** 自定义默认头像路径 */\n  defaultAvatar?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  type: ENTITY_TYPE.USER,\n  mode: 'avatar',\n  avatarSize: 20,\n  avatarShape: 'circle',\n  showLoading: true,\n  defaultAvatar: ''\n})\n\nconst { getEntityInfo, loading } = useEntityInfo()\n\nconst entityInfo = ref<EntityInfo | null>(null)\n\n/**\n * 计算默认头像URL\n */\nconst defaultAvatarUrl = computed(() => {\n  if (props.defaultAvatar) {\n    return props.defaultAvatar\n  }\n\n  // 根据实体类型返回默认头像\n  const defaultAvatars = {\n    [ENTITY_TYPE.USER]: '/images/space/people.png',\n    [ENTITY_TYPE.GROUP]: '/images/space/group.png'\n  }\n\n  const avatarPath = defaultAvatars[props.type] || '/images/space/people.png'\n  \n  // 使用全局方法获取真实路径\n  if (typeof window !== 'undefined' && window.$getRealPath) {\n    return window.$getRealPath({ url: avatarPath })\n  }\n  \n  return avatarPath\n})\n\n/**\n * 计算显示名称\n */\nconst displayName = computed(() => {\n  if (!entityInfo.value) {\n    return props.type === ENTITY_TYPE.USER ? '未知用户' : '未知群组'\n  }\n\n  if (props.type === ENTITY_TYPE.USER) {\n    const userInfo = entityInfo.value as any\n    return userInfo.nickname || userInfo.name || '未知用户'\n  } else {\n    const groupInfo = entityInfo.value as any\n    return groupInfo.group_name || '未知群组'\n  }\n})\n\n/**\n * 获取实体信息\n */\nconst fetchEntityInfo = async () => {\n  if (!props.id) return\n  \n  try {\n    const info = await getEntityInfo(props.type, Number(props.id))\n    entityInfo.value = info\n  } catch (error) {\n    console.error(`获取${props.type}信息失败:`, error)\n    entityInfo.value = null\n  }\n}\n\n// 监听关键属性变化\nwatch(\n  () => [props.type, props.id],\n  () => {\n    fetchEntityInfo()\n  },\n  { immediate: true }\n)\n\nonMounted(() => {\n  fetchEntityInfo()\n})\n\n// 暴露给父组件的方法和数据\ndefineExpose({\n  entityInfo,\n  loading,\n  refresh: fetchEntityInfo\n})\n</script>\n\n<style scoped>\n/* 组件样式 */\n.inline-flex {\n  display: inline-flex;\n}\n</style>"
  },
  {
    "path": "web/console/src/components/EntityDisplay/types.ts",
    "content": "export type { EntityType, EntityInfo, UserInfo, GroupInfo, EntityDisplayConfig } from '@/types/entity'\n\n/**\n * EntityDisplay 组件实例类型\n */\nexport interface EntityDisplayInstance {\n  entityInfo: EntityInfo | null\n  loading: boolean\n  refresh: () => Promise<void>\n}\n\n/**\n * 组件事件类型\n */\nexport interface EntityDisplayEmits {\n  /** 实体信息加载完成 */\n  (e: 'loaded', info: EntityInfo | null): void\n  /** 实体信息加载失败 */\n  (e: 'error', error: Error): void\n  /** 点击实体 */\n  (e: 'click', info: EntityInfo | null): void\n}"
  },
  {
    "path": "web/console/src/components/Filter/date-range.vue",
    "content": "<template>\n  <el-date-picker\n    v-model=\"model\"\n    type=\"daterange\"\n    :start-placeholder=\"startPlaceholder\"\n    :end-placeholder=\"endPlaceholder\"\n    :size=\"size\"\n    style=\"--el-date-editor-width: 280px;\"\n    :popper-options=\"{ placement: 'bottom-start' }\"\n    :shortcuts=\"shortcuts\"\n    v-bind=\"{ ...$attrs }\"\n    @change=\"handleChange\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport useVmodel from '@/hooks/useVmodel'\nimport { getSimpleDateFormatString } from '@/utils/moment'\nimport { dateRangeOptions, getRangeStartEndDates } from '@/utils/filter'\n\ninterface DateRange {\n  start: string\n  end: string\n}\n\nconst props = withDefaults(defineProps<{\n  modelValue?: (string | number)[]\n  prop?: DateRange\n  startPlaceholder?: string\n  endPlaceholder?: string\n  size?: 'small' | 'default' | 'large'\n  valueFormat?: Function\n}>(), {\n  modelValue: () => [],\n  prop: () => ({\n    start: 'start',\n    end: 'end',\n  }),\n  startPlaceholder: window.$t('start_time'),\n  endPlaceholder: window.$t('end_time'),\n  size: 'default',\n  valueFormat: (date: Date) => getSimpleDateFormatString({ date, format: 'YYYY-MM-DD hh:mm' }),\n})\n\nconst emits = defineEmits<{\n  (e: 'update:modelValue', data: (string | number)[]): void\n  (e: 'add'): void\n  (e: 'change', data: (string | number)[]): void\n}>()\n\nconst model = useVmodel({\n  props,\n  emits,\n})\n\nconst handleChange = (e: Date[]) => {\n  let date: (string | number)[] = []\n  if (e && e.length) {\n    e[0].setHours(0, 0, 0, 0)\n    e[1].setHours(23, 59, 59, 999)\n    date = [\n      props.valueFormat(e[0]),\n      props.valueFormat(e[1]),\n    ]\n  }\n  emits('update:modelValue', date)\n  emits('change', date)\n}\n\nconst shortcuts = dateRangeOptions.map((item) => {\n  return {\n    text: item.label,\n    value: () => {\n      const date = getRangeStartEndDates(item.value)\n      return [date.start, date.end]\n    },\n  }\n})\n</script>\n\n<style scoped>\n\n</style>\n"
  },
  {
    "path": "web/console/src/components/Filter/select.vue",
    "content": "<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus'\nimport { ArrowDown } from '@element-plus/icons-vue'\n\ninterface Option {\n  [key: string]: string | number | null\n  value: string | number | null\n  label: string\n}\n\nconst props = withDefaults(defineProps<{\n  options: Option[]\n  prop: {\n    value: string\n    label: string\n  }\n  modelValue: string | number | null\n  showAll?: boolean\n  allOption?: {\n    value: null\n    label: string\n  }\n}>(), {\n  options: () => [],\n  prop: () => ({\n    value: 'value',\n    label: 'label',\n  }),\n  modelValue: '',\n  showAll: false,\n  allOption: () => ({\n    value: null,\n    label: '全部',\n  }),\n})\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: string | number | null): void\n  (e: 'change', value: string | number | null): void\n}>()\n\nconst mergedOptions = computed<Option[]>(() => {\n  if (!props.showAll)\n    return props.options\n\n  return [\n    {\n      [props.prop.value]: props.allOption.value,\n      [props.prop.label]: props.allOption.label,\n    } as Option,\n    ...props.options,\n  ]\n})\n\nconst label = computed(() => {\n  return mergedOptions.value.find(opt => opt[props.prop.value] === props.modelValue)?.[props.prop.label] || ''\n})\n\nconst handleCommand = (command: string | number | null) => {\n  emit('update:modelValue', command)\n  emit('change', command)\n}\n</script>\n\n<template>\n  <ElDropdown placement=\"bottom\" trigger=\"click\" :max-height=\"250\" @command=\"handleCommand\">\n    <div\n      class=\"!border-none !outline-none h-9 flex-center px-5 gap-1.5 rounded-2xl bg-[#F6F7F8] text-xs text-[#1D1E1F] cursor-pointer\"\n    >\n      {{ label }}\n      <ElIcon size=\"14\" color=\"#9EA5B6\">\n        <ArrowDown />\n      </ElIcon>\n    </div>\n    <template #dropdown>\n      <ElDropdownMenu>\n        <ElDropdownItem v-for=\"opt in mergedOptions\" :key=\"opt[prop.value]\" :command=\"opt[prop.value]\">\n          {{ opt[prop.label] }}\n        </ElDropdownItem>\n      </ElDropdownMenu>\n    </template>\n  </ElDropdown>\n</template>\n\n<style>\n\n</style>\n"
  },
  {
    "path": "web/console/src/components/Filter/user.vue",
    "content": "<template>\n  <DeptMemberPicker v-model=\"user\" :multiple=\"multiple\" :default-first-value=\"defaultFirstValue\" v-bind=\"{ ...$attrs }\" @confirm=\"handleUserAddConfirm\">\n    <template #trigger>\n      <div\n        class=\"border rounded h-10 min-w-44 flex items-center px-5 gap-1.5 text-xs text-[#1D1E1F] overflow-hidden cursor-pointer\"\n      >\n\n        <p class=\"flex-1 text-xs text-[#1D1E1F] truncate\">{{ label }}</p>\n        <ElIcon size=\"14\" color=\"#9EA5B6\">\n          <ArrowDown />\n        </ElIcon>\n      </div>\n    </template>\n  </DeptMemberPicker>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { ArrowDown } from '@element-plus/icons-vue';\n\nwithDefaults(defineProps<{\n  modelValue: string | number | null | any[]\n  multiple?: boolean\n  defaultFirstValue?: boolean\n}>(), {\n  modelValue: '',\n  multiple: false,\n  defaultFirstValue: false,\n})\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: string | number | null): void\n  (e: 'change', value: string | number | null): void\n}>()\n\nconst user = ref([])\n\nconst label = computed(() => {\n  return user.value.map(item => item.label).join(',') || window.$t('all')\n})\n\nconst handleUserAddConfirm = (data: any) => {\n  user.value = data.value\n  emit('update:modelValue', data.value)\n  emit('change', data.value)\n}\n</script>\n\n<style>\n\n</style>\n"
  },
  {
    "path": "web/console/src/components/Fullscreen/index.vue",
    "content": "<template>\n  <Teleport :to=\"target\" :disabled=\"!isFullscreen\">\n    <div\n      ref=\"contentRef\"\n      :class=\"[containerClasses, $attrs.class]\"\n      :style=\"containerStyle\"\n      @keydown.esc=\"handleEscapeKey\"\n    >\n      <slot :is-fullscreen=\"isFullscreen\" :toggle-fullscreen=\"toggleFullscreen\" />\n    </div>\n  </Teleport>\n  <div v-if=\"isFullscreen\" :style=\"placeholderStyle\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch, readonly } from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport { useZIndex } from 'element-plus'\n\n// 类型定义\ntype FullscreenProps = {\n  /** 传送目标元素选择器 */\n  target?: string\n  /** 是否使用 flex 布局 */\n  flex?: boolean\n  /** 自定义 z-index 值 */\n  zIndex?: number\n  /** 是否启用 ESC 键退出全屏 */\n  escapeToExit?: boolean\n  /** 全屏状态 */\n  modelValue?: boolean\n}\n\ntype FullscreenEmits = {\n  /** 全屏状态变化事件 */\n  (e: 'update:modelValue', value: boolean): void\n  /** 全屏切换事件 */\n  (e: 'toggle', value: boolean): void\n}\n\nconst props = withDefaults(defineProps<FullscreenProps>(), {\n  target: 'body',\n  flex: false,\n  zIndex: 0,\n  escapeToExit: true,\n  modelValue: false,\n})\n\nconst emit = defineEmits<FullscreenEmits>()\n\nconst { nextZIndex } = useZIndex()\n\n// 响应式数据\nconst contentRef = ref<HTMLElement>()\nconst isFullscreen = ref(props.modelValue)\nconst nodeHeight = ref(0)\n\n// 计算属性\nconst containerClasses = computed(() => ({\n  'fullscreen-container': isFullscreen.value,\n  'fullscreen-flex': props.flex && isFullscreen.value,\n}))\n\nconst containerStyle = computed(() => ({\n  zIndex: props.zIndex || nextZIndex(),\n}))\n\nconst placeholderStyle = computed(() => ({\n  height: `${nodeHeight.value}px`,\n}))\n\n// 方法\nconst toggleFullscreen = () => {\n  isFullscreen.value = !isFullscreen.value\n  emit('update:modelValue', isFullscreen.value)\n  emit('toggle', isFullscreen.value)\n}\n\nconst handleEscapeKey = (event: KeyboardEvent) => {\n  if (props.escapeToExit && event.key === 'Escape' && isFullscreen.value) {\n    toggleFullscreen()\n  }\n}\n\n// 监听器\nwatch(\n  () => props.modelValue,\n  newValue => {\n    isFullscreen.value = newValue\n  }\n)\n\n// 生命周期\nlet stopResizeObserver: any\n\nonMounted(async () => {\n  await nextTick()\n  if (contentRef.value) {\n    stopResizeObserver = useResizeObserver(contentRef, ([entry]) => {\n      nodeHeight.value = entry.target.scrollHeight\n    })\n  }\n})\n\nonUnmounted(() => {\n  if (stopResizeObserver) {\n    stopResizeObserver.stop()\n  }\n})\n\n// 暴露给父组件的方法\ndefineExpose({\n  toggleFullscreen,\n  isFullscreen: readonly(isFullscreen),\n})\n</script>\n\n<style scoped>\n.fullscreen-container {\n  @apply fixed inset-0 p-4 bg-black/25 overflow-y-auto;\n  backdrop-filter: blur(2px);\n}\n\n.fullscreen-container:deep(> *) {\n  @apply w-full h-full bg-white rounded-lg shadow-2xl;\n  margin-top: 0 !important;\n  animation: fullscreen-enter 0.2s ease-out;\n}\n\n.fullscreen-flex {\n  @apply flex overflow-hidden;\n}\n\n.fullscreen-flex:deep(> *) {\n  @apply flex-1;\n}\n\n@keyframes fullscreen-enter {\n  from {\n    opacity: 0;\n    transform: scale(0.95);\n  }\n  to {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n  .fullscreen-container {\n    @apply p-2;\n  }\n\n  .fullscreen-container:deep(> *) {\n    @apply rounded-none;\n  }\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/GroupDialog/index.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('group_management')\"\n    width=\"680px\"\n    align-center\n    destroy-on-close\n    :close-on-click-modal=\"false\"\n  >\n    <div class=\"text-[#182B50] text-opacity-60 text-sm pb-4\">\n      {{ $t('display_order') }}\n    </div>\n    <Sortable\n      v-model=\"options\"\n      v-loading=\"submitting\"\n      identity=\"group_id\"\n      custom-sortable-id=\"group_sortable\"\n      class=\"w-full flex flex-col gap-4 max-h-[60vh] overflow-y-auto\"\n    >\n      <template #item=\"{ item, index }\">\n        <div class=\"flex items-center\">\n          <div class=\"pr-3 sort-icon cursor-move\">\n            <svg-icon name=\"drag\" width=\"16px\" height=\"32px\" color=\"#a1a5af\" />\n          </div>\n          <div class=\"flex-1\">\n            <el-input\n              v-model=\"item.group_name\"\n              size=\"large\"\n              :placeholder=\"$t('form_input_placeholder')\"\n              class=\"w-full\"\n              maxlength=\"10\"\n              show-word-limit\n            />\n          </div>\n          <el-icon class=\"ml-4 cursor-pointer\" color=\"rgba(24, 43, 80, 0.4)\" @click=\"onGroupRemove({ index })\">\n            <Delete />\n          </el-icon>\n        </div>\n      </template>\n    </Sortable>\n    <ElButton type=\"primary\" link class=\"mt-4 ml-5\" @click=\"onGroupAdd\"> +{{ $t('action_add') }} </ElButton>\n\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"onSave\">\n          {{ $t('action_save') }}\n        </ElButton>\n        <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { Delete } from '@element-plus/icons-vue'\n\nimport { ref, onMounted, nextTick } from 'vue'\nimport type { Group } from '@/api/modules/group'\nimport { groupApi, DEFAULT_GROUP_DATA } from '@/api/modules/group'\nimport { deepCopy } from '@/utils'\nimport type { GroupType } from '@/constants/group'\n\nconst props = withDefaults(\n  defineProps<{\n    groupType: GroupType\n    beforeRemove?: (args: { data: Group }) => boolean | Promise<boolean>\n  }>(),\n  {\n    groupType: 1,\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'change', result: { value: Group[] }): any\n}>()\n\nconst visible = ref(false)\nconst options = ref<Group[]>([])\nconst originalOptions = ref<Group[]>([])\nconst submitting = ref(false)\nlet deleted_group_list: Group[] = []\n\nonMounted(() => {\n  refresh()\n})\n\nconst refresh = async () => {\n  const list = await groupApi.list({ params: { group_type: props.groupType } })\n  options.value = [...list]\n  originalOptions.value = [...list]\n  if (!options.value.length) options.value = [deepCopy(DEFAULT_GROUP_DATA)]\n  else emits('change', { value: options.value })\n}\nconst open = async ({ value = [] } = {}) => {\n  submitting.value = false\n  options.value = []\n  await nextTick()\n  options.value = [...originalOptions.value]\n  if (deleted_group_list.length) await refresh()\n  deleted_group_list = []\n  if (value && value.length) options.value = [...value]\n  visible.value = true\n}\nconst close = async () => {\n  visible.value = false\n}\nconst onGroupAdd = async () => {\n  options.value.push({\n    ...deepCopy(DEFAULT_GROUP_DATA),\n    group_id: -Date.now(),\n    sort: options.value.length,\n  })\n  await nextTick()\n  const scrollerEl = document.querySelector('#group_sortable')\n  scrollerEl.scrollTop = scrollerEl.scrollHeight\n}\nconst onGroupRemove = async ({ index }: { index: number }) => {\n  const data = options.value[index]\n  if (options.value.filter(item => item.group_id).length === 1) return ElMessage.warning(window.$t('group_min_one'))\n  const intercept = props.beforeRemove ? props.beforeRemove({ data }) : true\n  if (intercept === false) return\n  if (intercept.then && intercept.catch) {\n    const res = await intercept\n    if (res === false) return\n  }\n  await ElMessageBox.confirm(window.$t('group_delete_confirm'), window.$t('action_delete'))\n  deleted_group_list.push(data)\n  options.value.splice(index, 1)\n}\nconst deleteGroup = async () => {\n  for (let i = 0; i < deleted_group_list.length; i++) {\n    const item = deleted_group_list[i]\n    if (item.group_id > 0) await groupApi.delete({ data: { group_id: item.group_id } })\n  }\n}\nconst onSave = async () => {\n  if (submitting.value) return\n  const list = options.value.filter(item => item.group_name.trim())\n  if (!list.length) return ElMessage.warning(window.$t('group_not_empty'))\n  submitting.value = true\n  await deleteGroup().catch(() => {\n    submitting.value = false\n  })\n  await groupApi\n    .save({\n      data: {\n        group_type: props.groupType,\n        groups: list.map((item, index) => ({\n          group_name: item.group_name.trim(),\n          group_id: item.group_id > 0 ? item.group_id : 0,\n          sort: list.length - index,\n        })),\n      },\n    })\n    .catch(() => {\n      submitting.value = false\n    })\n  deleted_group_list = []\n  ElMessage.success(window.$t('action_save_success'))\n  refresh()\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/components/GroupSelect/index.vue",
    "content": "<template>\n  <ElSkeleton class=\"w-full\" animated :loading=\"loading\">\n    <template #default>\n      <div v-if=\"type === 'picker'\" class=\"relative\">\n        <div v-if=\"$slots.trigger\" @click=\"open\">\n          <slot name=\"trigger\" />\n        </div>\n        <ul v-if=\"!$slots.trigger\" class=\"w-full flex items-center flex-wrap gap-2\">\n          <li\n            v-for=\"opt in modelOptions\"\n            :key=\"opt.group_id\"\n            class=\"flex items-center gap-2 px-2 box-border border border-[#E5E5E5] rounded-sm text-[#666]\"\n          >\n            <SvgIcon name=\"user-group\" width=\"18px\" height=\"18px\" color=\"#C7C7C7\" />\n            {{ opt.name }}\n          </li>\n          <ElButton type=\"primary\" link @click=\"open\">\n            {{ $t(!modelValue.length ? 'action_add' : 'action_modify') }}\n          </ElButton>\n        </ul>\n        <ElDialog\n          v-model=\"pickerVisible\"\n          :title=\"$t('action_select')\"\n          width=\"650px\"\n          :close-on-click-modal=\"false\"\n          destroy-on-close\n          append-to-body\n        >\n          <div class=\"flex h-[400px]\">\n            <div class=\"flex-1 w-0 pr-4 box-border flex flex-col border-r border-[#E5E5E5]\">\n              <ElInput\n                v-model=\"filterForm.keyword\"\n                class=\"w-full h-[36px]\"\n                size=\"default\"\n                clearable\n                :prefix-icon=\"Search\"\n                :placeholder=\"$t('internal_user.group.search_placeholder_v2')\"\n                @change=\"handleKeywordChange\"\n              />\n              <ElTree\n                ref=\"treeRef\"\n                class=\"mt-4 flex-1 h-0 box-border pr-1 overflow-auto\"\n                node-key=\"group_id\"\n                :data=\"groupOptions\"\n                :default-expanded-keys=\"[0]\"\n                :expand-on-click-node=\"false\"\n                :filter-node-method=\"filterNode\"\n                @node-click=\"handleNodeClick\"\n              >\n                <template #default=\"{ data }\">\n                  <div class=\"w-full flex items-center gap-2 group\">\n                    <SvgIcon\n                      name=\"user-group\"\n                      width=\"18px\"\n                      height=\"18px\"\n                      :color=\"selectedValue.some(val => val === data.group_id) ? '#3664EF' : '#999'\"\n                    />\n                    <div\n                      class=\"flex-1 w-0 text-sm truncate\"\n                      :class=\"[selectedValue.some(val => val === data.group_id) ? 'text-[#3664EF]' : 'text-[#333]']\"\n                      :title=\"data.label\"\n                    >\n                      {{ data.label }}\n                    </div>\n                    <ElIcon v-if=\"selectedValue.some(val => val === data.group_id)\" color=\"#3664EF\">\n                      <Check />\n                    </ElIcon>\n                  </div>\n                </template>\n              </ElTree>\n            </div>\n            <div class=\"flex-1 w-0 pl-4 box-border flex flex-col\">\n              <h4 class=\"leading-[40px]\">{{ $t('internal_user.scope.selected_title') }}</h4>\n              <div class=\"flex-1 h-0 w-full mt-3 bg-[#FBF8FB] rounded overflow-auto\">\n                <ul class=\"box-border p-4 flex items-start flex-wrap gap-2\">\n                  <li\n                    v-for=\"opt in selectedOptions\"\n                    :key=\"opt.group_id\"\n                    class=\"py-1 bg-white px-2 box-border border border-[#E5E5E5] rounded-sm\"\n                  >\n                    <SvgIcon class=\"inline-block mr-1\" name=\"user-group\" width=\"18px\" height=\"18px\" color=\"#939499\" />\n                    {{ opt.group_name }}\n                    <ElButton\n                      class=\"ml-1 !outline-none !border-none !bg-[#C4C4C4] !size-4\"\n                      style=\"zoom: 0.9\"\n                      :icon=\"Close\"\n                      type=\"info\"\n                      size=\"small\"\n                      circle\n                      @click=\"handleRemove(opt)\"\n                    />\n                  </li>\n                </ul>\n              </div>\n            </div>\n          </div>\n          <template #footer>\n            <div class=\"py-2 flex items-center justify-end\">\n              <ElButton class=\"w-[96px] h-[36px]\" @click.stop=\"close\">\n                {{ $t('action_cancel') }}\n              </ElButton>\n              <ElButton class=\"w-[96px] h-[36px]\" size=\"large\" type=\"primary\" @click=\"handleConfirm\">\n                {{ $t('action_confirm') }}\n              </ElButton>\n            </div>\n          </template>\n        </ElDialog>\n      </div>\n      <ElRadioGroup v-else-if=\"type === 'radio'\" v-model=\"selectedValue\" v-bind=\"$attrs\" @change=\"handleChange\">\n        <ElRadio v-for=\"item in groupOptions\" :key=\"item.group_id\" :label=\"item.group_id\">\n          <span class=\"text-[#1D1E1F]\">{{ item.group_name }}</span>\n        </ElRadio>\n      </ElRadioGroup>\n      <ElCheckboxGroup v-else-if=\"type === 'checkbox'\" v-model=\"selectedValue\" v-bind=\"$attrs\" @change=\"handleChange\">\n        <ElCheckbox v-for=\"item in groupOptions\" :key=\"item.group_id\" :label=\"item.group_id\">\n          <span class=\"text-[#1D1E1F]\">{{ item.group_name }}</span>\n        </ElCheckbox>\n      </ElCheckboxGroup>\n      <ElSelect\n        v-else\n        v-model=\"selectedValue\"\n        :size=\"size\"\n        :placeholder=\"$t('form_select_placeholder')\"\n        v-bind=\"$attrs\"\n        @change=\"handleChange\"\n      >\n        <ElOption v-for=\"item in groupOptions\" :key=\"item.group_id\" :label=\"item.group_name\" :value=\"item.group_id\" />\n      </ElSelect>\n    </template>\n    <template #template>\n      <ElSkeletonItem class=\"w-full !h-[40px]\" variant=\"h1\" />\n    </template>\n  </ElSkeleton>\n</template>\n\n<script setup lang=\"ts\">\nimport { Close, Check, Search } from '@element-plus/icons-vue'\n\nimport { ref, nextTick, onMounted, watch, computed, reactive } from 'vue'\nimport type { Group } from '@/api/modules/group'\nimport { groupApi } from '@/api/modules/group'\n\nimport { GROUP_TYPE, type GroupType } from '@/constants/group'\n\nconst props = withDefaults(\n  defineProps<{\n    type?: 'select' | 'checkbox' | 'picker' | 'radio'\n    groupType?: GroupType\n    modelValue?: number | string | number[] | string[] | null\n    size?: 'large' | 'default' | 'small'\n    defaultAll?: boolean\n    defaultFirst?: boolean\n  }>(),\n  {\n    type: 'select',\n    groupType: GROUP_TYPE.USER,\n    modelValue: null,\n    size: 'large',\n    defaultAll: false,\n    defaultFirst: false,\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'update:modelValue', value: string): void\n  (e: 'change', result: { value: string }): void\n  (e: 'confirm', result: { value: string }): void\n}>()\n\nconst treeRef = ref()\n\n// const selectedValue = ref(props.modelValue)\nconst selectedValue = ref([])\nconst groupOptions = ref<Group[]>([])\nconst loading = ref(false)\n\nconst selectedOptions = computed(() => {\n  return groupOptions.value.filter(item => selectedValue.value.includes(item.group_id))\n})\nconst modelOptions = computed(() => {\n  return groupOptions.value.filter(item => props.modelValue.includes(item.group_id))\n})\n\nconst handleChange = () => {\n  const value = JSON.parse(JSON.stringify(selectedValue.value))\n  emits('update:modelValue', value)\n  emits('change', { value })\n}\nconst refresh = async () => {\n  loading.value = true\n  const list = await groupApi.list({ params: { group_type: props.groupType } }).catch(() => {\n    loading.value = false\n  })\n  groupOptions.value = list.map(item => {\n    item.value = +item.group_id || 0\n    item.label = item.name = item.group_name || ''\n    return item\n  })\n  await nextTick()\n  const value = JSON.parse(JSON.stringify(props.modelValue))\n  // 过滤一些不存在的值\n  if (Array.isArray(value)) {\n    const oldLength = value.length\n    selectedValue.value = value.filter(val => groupOptions.value.some(item => item.group_id === val))\n    if (oldLength && oldLength !== selectedValue.value.length) handleChange()\n    if (props.defaultAll && (!props.modelValue || !props.modelValue.length)) {\n      selectedValue.value = groupOptions.value.map(item => item.group_id)\n      handleChange()\n    } else if (props.defaultFirst && (!props.modelValue || !props.modelValue.length)) {\n      selectedValue.value = [groupOptions.value[0].group_id]\n      handleChange()\n    }\n  }\n  if (['radio'].includes(props.type)) {\n    if (props.defaultFirst && !props.modelValue) {\n      selectedValue.value = groupOptions.value[0].group_id\n      handleChange()\n    }\n  }\n  loading.value = false\n}\n\nconst pickerVisible = ref(false)\nconst filterForm = reactive({\n  keyword: '',\n})\nconst open = () => {\n  selectedValue.value = JSON.parse(JSON.stringify(props.modelValue))\n  pickerVisible.value = true\n}\nconst close = () => {\n  pickerVisible.value = false\n}\nconst handleKeywordChange = () => {\n  treeRef.value.filter(filterForm.keyword)\n}\nconst filterNode = (value: string, data: any) => {\n  if (!value) return true\n  return data.name.includes(value)\n}\nconst handleRemove = (item: any) => {\n  selectedValue.value = selectedValue.value.filter(val => val !== item.group_id)\n}\nconst handleNodeClick = (data: any) => {\n  if (selectedValue.value.some(val => val === data.value)) {\n    selectedValue.value = selectedValue.value.filter(val => val !== data.group_id)\n  } else {\n    selectedValue.value.push(data.group_id)\n  }\n}\nconst handleConfirm = () => {\n  handleChange()\n  const value = JSON.parse(JSON.stringify(selectedValue.value))\n  emits('confirm', { value })\n  close()\n}\n\nwatch(\n  () => props.modelValue,\n  val => {\n    selectedValue.value = val\n  }\n)\n\nonMounted(() => {\n  refresh()\n})\n\ndefineExpose({\n  refresh,\n  open,\n  close,\n})\n</script>\n\n<style lang=\"scss\" scoped></style>\n"
  },
  {
    "path": "web/console/src/components/GroupTabs/index.vue",
    "content": "<template>\n  <ElSelect\n    v-if=\"type === 'dropdown'\"\n    ref=\"selectRef\"\n    v-model=\"selectedValue\"\n    multiple\n    collapse-tags\n    collapse-tags-tooltip\n    :placeholder=\"$t('all')\"\n    size=\"large\"\n    class=\"max-w-[160px]\"\n    @visible-change=\"handleDropdownVisibleChange\"\n  >\n    <template #prefix>\n      <span class=\"max-w-16 text-sm truncate\">\n        {{ selectedOptions.length ? selectedOptions[0].group_name || '--' : $t('group') + ':' }}\n      </span>\n    </template>\n    <ElOption v-for=\"opt in tabOptions\" :key=\"opt.group_id\" :label=\"opt.group_name\" :value=\"opt.group_id\" @click.stop />\n    <template #empty>\n      <div class=\"text-center text-[#A4AABA] text-sm py-8\">\n        {{ $t('no_data') }}\n      </div>\n    </template>\n    <template #footer>\n      <div class=\"w-full\">\n        <div class=\"w-full flex items-center justify-between gap-5\">\n          <div class=\"cursor-pointer text-[#5A6D9E] text-sm hover:opacity-80\" @click=\"groupRef.open\">\n            {{ $t('group_management') }}\n          </div>\n          <div>\n            <ElButton class=\"w-12 h-7\" @click=\"handleDropdownCancel\">\n              {{ $t('action_cancel') }}\n            </ElButton>\n            <ElButton class=\"w-12 h-7\" type=\"primary\" @click=\"handleDropdownConfirm\">\n              {{ $t('action_confirm') }}\n            </ElButton>\n          </div>\n        </div>\n      </div>\n    </template>\n  </ElSelect>\n  <ElTabs v-else-if=\"type === 'tabs-pure'\" v-model=\"activeTab\" class=\"group-tabs\" type=\"card\" @tab-change=\"onTabChange\">\n    <ElTabPane\n      v-for=\"opt in options\"\n      :key=\"opt.group_id\"\n      :label=\"opt.group_name\"\n      :name=\"opt.group_id\"\n      :disabled=\"disabled || opt.disabled\"\n    />\n  </ElTabs>\n  <ElTabs v-else v-model=\"activeTab\" class=\"group-tabs\" type=\"card\" @tab-change=\"onTabChange\">\n    <ElTabPane\n      v-for=\"opt in tabOptions\"\n      :key=\"opt.group_id\"\n      :label=\"$t(opt.group_name)\"\n      :name=\"opt.group_id\"\n      :disabled=\"disabled || opt.disabled\"\n    />\n  </ElTabs>\n  <GroupDialog v-if=\"groupType\" ref=\"groupRef\" :group-type=\"groupType\" @change=\"onGroupChange\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from 'vue';\nimport type { Group } from '@/api/modules/group';\nimport type { GroupType } from '@/constants/group';\n\nconst props = withDefaults(\n  defineProps<{\n    type?: 'tabs' | 'dropdown' | 'tabs-pure'\n    groupType?: GroupType\n    modelValue?: string | number | string[] | number[] | null\n    options?: Group[]\n    disabled?: boolean\n  }>(),\n  {\n    type: 'tabs',\n    modelValue: null,\n    groupType: 1,\n    options: [],\n    disabled: false,\n  }\n)\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: string): void\n  (e: 'change', result: { value: string }): void\n  (e: 'get-options', result: { options: Group[] }): void\n}>()\n\nconst groupRef = ref<InstanceType<typeof GroupDialog>>()\nconst selectRef = ref<InstanceType<typeof ElSelect>>()\nconst activeTab = ref(props.modelValue)\nconst tabOptions = ref<Group[]>(props.options)\nconst selectedValue = ref(props.modelValue)\n\nconst selectedOptions = computed(() => {\n  return tabOptions.value.filter(item => selectedValue.value.includes(item.group_id))\n})\n\nconst setModelValue = (value: string | number | string[] | number[]) => {\n  value = JSON.parse(JSON.stringify(value))\n  emit('update:modelValue', value)\n  emit('change', { value })\n}\nconst onTabChange = () => {\n  setModelValue(activeTab.value)\n}\nconst onGroupChange = async ({ value = [] } = {}) => {\n  if (props.type === 'tabs-pure') return\n  tabOptions.value = []\n  await nextTick()\n  tabOptions.value = [...value]\n  if (['tabs'].includes(props.type)) {\n    tabOptions.value.unshift({ group_id: '-1', group_name: 'all' })\n    if (!tabOptions.value.find(item => item.group_id === activeTab.value)) {\n      activeTab.value = tabOptions.value[0].group_id\n      onTabChange()\n    }\n  }\n  emit('get-options', { options: tabOptions.value })\n}\nconst handleDropdownCancel = () => {\n  selectedValue.value = JSON.parse(JSON.stringify(props.modelValue || []))\n  selectRef.value?.blur()\n}\nconst handleDropdownConfirm = async () => {\n  setModelValue(selectedValue.value)\n  selectRef.value?.blur()\n  await nextTick()\n}\nconst handleDropdownVisibleChange = (visible: boolean) => {\n  if (!visible) handleDropdownCancel()\n}\n\ndefineExpose({\n  open: () => {\n    groupRef.value?.open()\n  },\n  getData: () => {\n    return tabOptions.value\n  },\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.group-tabs {\n  ::v-deep(.el-tabs__header) {\n    margin-bottom: 0;\n  }\n\n  ::v-deep(.el-tabs__content) {\n    display: none;\n  }\n\n  ::v-deep(.el-tabs__header),\n  ::v-deep(.el-tabs__nav),\n  ::v-deep(.el-tabs__item) {\n    border: none;\n  }\n  ::v-deep(.el-tabs__item) {\n    border-radius: 4px;\n    background-color: #fff;\n    color: #1d1e1f;\n  }\n\n  ::v-deep(.el-tabs__item + .el-tabs__item) {\n    margin-left: 12px;\n  }\n\n  ::v-deep(.el-tabs__item.is-active) {\n    background-color: #e0eaff;\n    color: #2563eb;\n  }\n  ::v-deep(.el-tabs__item.is-disabled) {\n    opacity: 0.7;\n  }\n}\n\n::v-deep(.el-select__selected-item:nth-child(1)) .el-tag {\n  display: none !important;\n}\n\n::v-deep(.el-select__placeholder) {\n  color: black !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Header/index.vue",
    "content": "<template>\n  <div class=\"flex-none flex items-center justify-between gap-3\">\n    <div class=\"flex-1 flex items-center gap-3\">\n      <div v-if=\"back\" class=\"w-7 h-7 flex-center cursor-pointer\" @click=\"handleBack\">\n        <el-icon size=\"18\">\n          <ArrowLeft />\n        </el-icon>\n      </div>\n      <slot name=\"title_prefix\" />\n      <h2 class=\"text-[26px] text-[#1D1E1F] font-semibold\">\n        {{ title }}\n      </h2>\n      <slot name=\"title_suffix\" />\n    </div>\n    <slot name=\"right\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowLeft } from '@element-plus/icons-vue';\nimport { useRouter } from 'vue-router';\n\nwithDefaults(defineProps<{\n  back?: boolean\n  title?: string\n}>(), {\n  back: false,\n  title: '',\n})\nconst router = useRouter()\nconst handleBack = () => {\n  const {back} = window.history.state\n  if (back) {\n    router.go(-1)\n  }\n  else {\n    // 如果没有上一页，则返回到一级目录\n    router.push('/')\n  }\n}\n</script>\n\n<style scoped>\n\n</style>\n"
  },
  {
    "path": "web/console/src/components/LanguageDropdown/LanguageDropdown.vue",
    "content": "<script setup lang=\"ts\">\nimport { ArrowDown } from '@element-plus/icons-vue'\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport HubUiX from 'hub-ui-x'\nimport eventBus from '@/utils/event-bus'\n\nconst { t, locale } = useI18n()\n\nconst lang_options = ref([\n  { label: '中文（简体）', value: 'zh-cn' },\n  { label: '中文（繁體）', value: 'zh-tw' },\n  { label: 'English（US）', value: 'en' },\n  { label: '日本語', value: 'ja' },\n])\nconst current_lang_label = ref(lang_options.value.find(item => item.value === locale.value)?.label || '')\n\nconst onLanguageChange = (locale_value: string) => {\n  localStorage.setItem('default_lang', locale_value)\n  locale.value = locale_value\n  current_lang_label.value = lang_options.value.find(item => item.value === locale_value)?.label || ''\n  eventBus.emit('language-change', locale_value)\n\n  HubUiX.setLang(locale_value)\n}\n</script>\n\n<template>\n  <ElDropdown trigger=\"click\" @command=\"onLanguageChange\">\n    <div class=\"!outline-none !border-none flex-center gap-1 cursor-pointer\">\n      <SvgIcon name=\"language\" />\n      <span class=\"text-sm  cursor-pointer\">\n        {{ current_lang_label }}\n      </span>\n      <ElIcon>\n        <ArrowDown />\n      </ElIcon>\n    </div>\n    <template #dropdown>\n      <ElDropdownMenu>\n        <ElDropdownItem v-for=\"item in lang_options\" :key=\"item.value\" :command=\"item.value\">\n          {{ item.label }}\n        </ElDropdownItem>\n      </ElDropdownMenu>\n    </template>\n  </ElDropdown>\n</template>\n\n<style lang=\"scss\" scoped>\n\n</style>\n"
  },
  {
    "path": "web/console/src/components/Layout/index.vue",
    "content": "<script setup lang=\"ts\">\n</script>\n\n<template>\n  <div class=\"h-screen flex flex-col overflow-hidden\">\n    <slot />\n  </div>\n</template>\n\n<style>\n\n</style>\n"
  },
  {
    "path": "web/console/src/components/Markdown/editor.vue",
    "content": "<template>\n  <div>\n    <div\n      ref=\"vditorRef\"\n      v-loading=\"loading\"\n      class=\"w-full vditor-custom\"\n      :class=\"[props.preview ? 'vditor-preview !border-none !bg-transparent' : '']\"\n      :style=\"{ height: props.height, '--panel-background-color': props.bgColor }\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, ref, watch } from 'vue';\n// import Vditor from 'vditor'\n// import 'vditor/dist/index.css'\n// import { markdownEditor } from './helper'\n\nimport { api_host, lib_host } from '@/utils/config';\nimport loadLib from '@/utils/loadLib';\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: string\n    height?: string\n    maxlength?: number\n    showWordLimit?: boolean\n    preview?: boolean\n    bgColor?: string\n    type?: 'full' | 'simple'\n  }>(),\n  {\n    modelValue: '',\n    height: '300px',\n    bgColor: '#fff',\n    type: 'full',\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'update:modelValue', value: string): void\n}>()\n\nconst vditorRef = ref(null)\n\nconst loading = ref(false)\nconst vditor = ref<null>(null)\n\nconst getUploadConfig = () => {\n  const access_token = localStorage.getItem('access_token') || ''\n  return {\n    url: `${api_host}/api/upload`,\n    multiple: false,\n    headers: {\n      authorization: `Bearer ${access_token}`,\n    },\n    max: 15 * 1024 * 1024,\n    fieldName: 'file',\n    filename: name => name,\n    format(files: File[], response: string) {\n      const result = JSON.parse(response)\n      const data = result.data || {}\n      return JSON.stringify({\n        msg: '',\n        code: 0,\n        data: {\n          errFiles: [],\n          succMap: {\n            [`${files[0].name}`]: `${api_host}/api/preview/${data.preview_key || ''}`,\n          },\n        },\n      })\n    },\n  }\n}\nconst setVditor = async () => {\n  if (vditor.value) vditor.value.destroy()\n\n  loading.value = true\n\n  await loadLib('vditor')\n  const options: any = {\n    height: props.height,\n    cache: {\n      enable: false,\n    },\n    cdn: `${lib_host}/js/vditor`,\n    toolbar:\n      props.type === 'full'\n        ? [\n            'undo',\n            'redo',\n            '|',\n            {\n              name: 'insert',\n              toolbar: [\n                'image',\n                // 'upload',\n                // 'table',\n                'link',\n                // 'video',\n                'code',\n                'inline-code',\n                'line',\n                'insert-before',\n                'insert-after',\n                // '-',\n                // 'echarts',\n                // 'math',\n                // 'mermaid',\n                // 'mindmap',\n                // 'mermaid-sequence',\n                // 'mermaid-gantt',\n              ],\n            },\n            '|',\n            'headings',\n            'bold',\n            'italic',\n            'strike',\n            '|',\n            'list',\n            'ordered-list',\n            'outdent',\n            'indent',\n            '|',\n            'quote',\n            '|',\n            'copy',\n            'edit-mode',\n            'fullscreen',\n          ]\n        : [\n            {\n              name: 'insert',\n              toolbar: [\n                'image',\n                // 'upload',\n                // 'table',\n                'link',\n                // 'video',\n                'code',\n                'inline-code',\n                'line',\n                'insert-before',\n                'insert-after',\n                // '-',\n                // 'echarts',\n                // 'math',\n                // 'mermaid',\n                // 'mindmap',\n                // 'mermaid-sequence',\n                // 'mermaid-gantt',\n              ],\n            },\n            '|',\n            'headings',\n            'bold',\n            'italic',\n            'strike',\n            '|',\n            'list',\n            'ordered-list',\n            'quote',\n            '|',\n            'copy',\n            'fullscreen',\n          ],\n    toolbarConfig: {\n      hide: props.preview,\n    },\n    after: () => {\n      // loading.value = false\n      vditor.value!.setValue(props.modelValue)\n    },\n    input: (value: string) => {\n      emits('update:modelValue', value)\n    },\n    blur: (value: string) => {\n      emits('update:modelValue', value)\n    },\n    upload: getUploadConfig(),\n    image: {\n      accept: 'image/*',\n      ...getUploadConfig(),\n    },\n    video: {\n      accept: 'video/*',\n      ...getUploadConfig(),\n    },\n    mode: 'wysiwyg',\n    counter: {\n      enable: !!props.maxlength,\n      max: props.maxlength,\n    },\n  }\n  // if (currentMode.value === 'wysiwyg') {\n  //   options.mode = 'wysiwyg'\n  // }\n  // else if (currentMode.value === 'ir') {\n  //   options.mode = 'ir'\n  // }\n  // else if (currentMode.value === 'sv') {\n  //   options.mode = 'sv'\n  //   options.preview = {\n  //     mode: 'editor',\n  //   }\n  // }\n  options.preview = options.preview || {\n    markdown: {\n      toc: true,\n      mark: true,\n      footnotes: true,\n      autoSpace: true,\n    },\n    math: {\n      engine: 'MathJax',\n      inlineDigit: true,\n    },\n    actions: [],\n  }\n  setTimeout(() => {\n    vditor.value = new Vditor(vditorRef.value, options)\n  }, 100)\n}\n\n// 监听外部传入的值变化\nwatch(\n  () => props.modelValue,\n  newValue => {\n    if (vditor.value && newValue !== vditor.value.getValue()) vditor.value.setValue(newValue)\n  }\n)\n\nonMounted(() => {\n  setVditor()\n})\n\nonUnmounted(() => {\n  if (vditor.value) vditor.value.destroy()\n})\n</script>\n\n<style>\n.vditor-custom .vditor-toolbar {\n  padding-left: 0 !important;\n}\n.vditor-custom .vditor-reset {\n  padding: 10px 30px !important;\n}\n.vditor-custom .vditor-toolbar--hide {\n  display: none;\n}\n.vditor-preview .vditor-reset {\n  padding: 0 !important;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  /* -webkit-line-clamp: 8; */\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Model/dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"title\"\n    :close-on-click-modal=\"false\"\n    width=\"600px\"\n    destroy-on-close\n    append-to-body\n  >\n    <div\n      class=\"max-h-[500px] overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300 scrollbar-track-gray-100 hover:scrollbar-thumb-gray-400\"\n    >\n      <!-- 模型列表 -->\n      <div v-for=\"platform in modelList\" :key=\"platform.channel_id\" class=\"mb-4 last:mb-0\">\n        <!-- 平台标题 -->\n        <div class=\"h-9 flex items-center mb-0.5\">\n          <span class=\"text-sm font-medium text-[#4F5052]\">{{ platform.label }}</span>\n        </div>\n\n        <!-- 模型列表 -->\n        <div class=\"space-y-1\">\n          <div v-for=\"model in platform.options\" :key=\"model.model_value\" class=\"h-8 flex items-center justify-between\">\n            <div class=\"flex items-center flex-1\">\n              <img :src=\"model.icon\" :alt=\"model.label\" class=\"size-5 mr-2\" />\n              <span class=\"text-sm text-[#1D1E1F]\">{{ model.label }}</span>\n            </div>\n            <el-switch\n              v-model=\"selectedModels[model.model_value]\"\n              size=\"small\"\n              @change=\"onModelToggle(model.model_value, $event)\"\n            />\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- 底部按钮 -->\n    <template #footer>\n      <el-button @click=\"handleCancel\">{{ $t('action_cancel') }}</el-button>\n      <el-button type=\"primary\" @click=\"handleConfirm\">{{ $t('action_confirm') }}</el-button>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, reactive } from 'vue'\nimport { ElMessage } from 'element-plus'\n\nimport { loadModels } from './index'\nimport { ModelUseType, MODEL_USE_TYPE } from '@/constants/platform/config'\n\n// 定义类型\ninterface ModelOption {\n  model_value: string\n  value: string\n  label: string\n  icon: string\n}\n\ninterface PlatformItem {\n  channel_id: number\n  label: string\n  icon: string\n  options: ModelOption[]\n}\n\nconst props = withDefaults(\n  defineProps<{\n    type?: ModelUseType\n    defaultSelected?: string[] // 默认选中的模型\n  }>(),\n  {\n    type: MODEL_USE_TYPE.REASONING,\n    defaultSelected: () => [],\n  }\n)\n\nconst emit = defineEmits<{\n  (e: 'confirm', selectedModels: string[]): void\n  (e: 'cancel'): void\n}>()\n\nconst visible = ref(false)\nconst title = ref('逻辑推理模型')\nconst modelList = ref<PlatformItem[]>([])\nconst selectedModels = reactive<Record<string, boolean>>({})\n\n// 初始化选中状态\nconst initializeSelectedModels = () => {\n  // 清空之前的状态\n  Object.keys(selectedModels).forEach(key => {\n    delete selectedModels[key]\n  })\n  // 设置默认选中状态\n  modelList.value.forEach(platform => {\n    platform.options.forEach(model => {\n      selectedModels[model.model_value] = props.defaultSelected.includes(model.model_value)\n    })\n  })\n}\n\n// 加载模型列表\nconst loadModelList = async () => {\n  try {\n    const models = await loadModels(MODEL_USE_TYPE[props.type])\n    modelList.value = models\n\n    // 初始化选中状态\n    initializeSelectedModels()\n  } catch (error) {\n    console.error('Failed to load models:', error)\n    ElMessage.error('加载模型列表失败')\n  }\n}\n\n// 打开对话框\nconst open = () => {\n  visible.value = true\n  loadModelList()\n}\n\n// 关闭对话框\nconst close = () => {\n  visible.value = false\n}\n\n// 模型开关切换\nconst onModelToggle = (modelValue: string, isSelected: boolean) => {\n  selectedModels[modelValue] = isSelected\n}\n\n// 获取选中的模型列表\nconst getSelectedModels = (): string[] => {\n  return Object.keys(selectedModels).filter(key => selectedModels[key])\n}\n\n// 确认选择\nconst handleConfirm = () => {\n  const selected = getSelectedModels()\n  emit('confirm', selected)\n  close()\n}\n\n// 取消选择\nconst handleCancel = () => {\n  emit('cancel')\n  close()\n}\n\nonMounted(() => {\n  // 组件挂载时不自动加载，等待调用 open 方法\n})\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style scoped>\n/* 开关样式优化 */\n:deep(.el-switch) {\n  --el-switch-on-color: #409eff;\n  --el-switch-off-color: #c0c4cc;\n}\n\n:deep(.el-switch__core) {\n  border: 1px solid #dcdfe6;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Model/index.ts",
    "content": "import channelApi, { transformSelectData } from '@/api/modules/channel/index'\nimport cache from '@/utils/cache'\n\nexport const loadModels = (type?: string): Promise<any[]> => {\n  return cache.getOrFetch(`modelList_${type}`, () =>\n    channelApi.listv2().then(res => {\n      const modelList = res.map(item => transformSelectData(item, type))\n      return modelList\n    })\n  )\n}\n\n// 导出组件\nexport { default as ModelView } from './view.vue'\nexport { default as ModelSelect } from './select.vue'\n"
  },
  {
    "path": "web/console/src/components/Model/select.vue",
    "content": "<template>\n  <SelectPlus\n    v-model=\"value\"\n    size=\"large\"\n    :use-i18n=\"false\"\n    :options=\"options\"\n    :clearable=\"clearable\"\n    @change=\"onModelChange\"\n  >\n    <template #item_after=\"{ data }\">\n      <el-tooltip v-if=\"(data as any).vision\" :content=\"$t('support_image')\" placement=\"top\">\n        <div class=\"flex-center inline-flex align-middle ml-1 w-4 h-4 bg-[#FDF8EB] rounded-sm\">\n          <el-icon size=\"10px\" color=\"#F0A105\">\n            <View />\n          </el-icon>\n        </div>\n      </el-tooltip>\n    </template>\n  </SelectPlus>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, computed } from 'vue'\nimport { View } from '@element-plus/icons-vue'\nimport { loadModels } from './index'\nimport { ModelUseType } from '@/constants/platform/config'\n\n// 定义类型，兼容 SelectPlus 组件的接口\ninterface ModelOption {\n  value: string\n  label: string\n  icon?: string\n  vision?: boolean\n}\n\ninterface ChannelOption {\n  value: string\n  label: string\n  icon?: string\n  options: ModelOption[]\n}\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue: string\n    type?: ModelUseType\n    clearable?: boolean\n  }>(),\n  {\n    modelValue: '',\n  }\n)\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: string): void\n  (e: 'change', value: string, option: ChannelOption | ModelOption): void\n}>()\n\nconst options = ref<ChannelOption[]>([])\n\nconst value = computed({\n  get: () => props.modelValue,\n  set: value => emit('update:modelValue', value),\n})\n\nconst onModelChange = (result: { value: string; option: any }) => {\n  emit('update:modelValue', result.value)\n  emit('change', result.value, result.option)\n}\n\nconst loadChannelOptions = async () => {\n  try {\n    const modelList = await loadModels(props.type)\n\n    options.value = modelList\n    // 如果modelValue 有值， 需要找modelList是否存在， 如果存在， 则设置value = ''\n    if (props.modelValue) {\n      const options = modelList.map(item => item.options).flat()\n      const option = options.find(item => item.value === props.modelValue)\n      if (!option) {\n        value.value = ''\n      }\n    }\n  } catch (error) {\n    console.error('Failed to load channel options:', error)\n  }\n}\n\nonMounted(() => {\n  loadChannelOptions()\n})\n</script>\n"
  },
  {
    "path": "web/console/src/components/Model/view.vue",
    "content": "<template>\n  <div class=\"model-display\">\n    <div v-if=\"isLoading\" class=\"flex items-center gap-2\">\n      <div class=\"w-5 h-5 flex items-center justify-center animate-spin\">\n        <el-icon size=\"12px\" color=\"#999\">\n          <Loading />\n        </el-icon>\n      </div>\n    </div>\n    <div v-else-if=\"modelInfo\" class=\"flex items-center gap-2\">\n      <img\n        v-if=\"modelInfo.icon\"\n        :src=\"modelInfo.icon\"\n        :alt=\"modelInfo.label\"\n        class=\"w-5 h-5 object-contain\"\n        @error=\"handleImageError\"\n      />\n      <span class=\"text-sm text-gray-700 whitespace-nowrap\">{{ modelInfo.label }}</span>\n    </div>\n    <div v-else class=\"flex items-center gap-2\">\n      <div class=\"w-5 h-5 bg-gray-200 rounded flex items-center justify-center\" v-if=\"showIcon\">\n        <el-icon size=\"12px\" color=\"#999\">\n          <QuestionFilled />\n        </el-icon>\n      </div>\n      <span class=\"text-sm text-gray-500 whitespace-nowrap\">{{ '已删除' }}</span>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, watch } from 'vue'\nimport { QuestionFilled, Loading } from '@element-plus/icons-vue'\nimport { loadModels } from './index'\n\ninterface ModelInfo {\n  icon: string\n  label: string\n  value: string\n}\n\ninterface Props {\n  channelId: string | number\n  model: string\n  showIcon?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n  channelId: '',\n  model: '',\n  showIcon: true,\n})\n\nconst modelInfo = ref<ModelInfo | null>(null)\nconst isLoading = ref(true)\n\n// 计算模型信息的组合值\nconst modelValue = computed(() => {\n  if (props.channelId && props.model) {\n    return `${props.channelId}_${props.model}`\n  }\n  return ''\n})\n\n// 加载模型信息\nconst loadModelInfo = async () => {\n  if (!props.channelId || !props.model) {\n    modelInfo.value = null\n    isLoading.value = false\n    return\n  }\n\n  isLoading.value = true\n  try {\n    const modelList = await loadModels()\n\n    // 在所有渠道中查找匹配的模型\n    for (const channel of modelList) {\n      const matchedOption = channel.options?.find(option => option.value === modelValue.value)\n\n      if (matchedOption) {\n        modelInfo.value = {\n          icon: matchedOption.icon,\n          label: matchedOption.label,\n          value: matchedOption.value,\n        }\n        break\n      }\n    }\n\n    // 如果没有找到完全匹配的，尝试只匹配模型名称\n    if (!modelInfo.value) {\n      for (const channel of modelList) {\n        const matchedOption = channel.options?.find(option => {\n          // 从 option.value 中提取模型名称进行比较\n          const parts = option.value.split('_')\n          const modelName = parts[1] // 第二部分是模型名称\n          return modelName === props.model\n        })\n\n        if (matchedOption) {\n          modelInfo.value = {\n            icon: matchedOption.icon,\n            label: matchedOption.label,\n            value: matchedOption.value,\n          }\n          break\n        }\n      }\n    }\n  } catch (error) {\n    console.error('Failed to load model info:', error)\n    modelInfo.value = null\n  } finally {\n    isLoading.value = false\n  }\n}\n\n// 处理图片加载错误\nconst handleImageError = (event: Event) => {\n  const img = event.target as HTMLImageElement\n  img.style.display = 'none'\n}\n\n// 监听参数变化\nwatch(\n  [() => props.channelId, () => props.model],\n  () => {\n    loadModelInfo()\n  },\n  { immediate: true }\n)\n\nonMounted(() => {\n  loadModelInfo()\n})\n</script>\n\n<style scoped>\n.model-display {\n  display: inline-flex;\n  align-items: center;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/OpenData/index.vue",
    "content": "<template>\n  <slot name=\"prefix\" />\n  <template v-if=\"isSsoSync && values.length && syncValue.value === ENTERPRISE_SYNC_FROM.WECOM\">\n    <template v-for=\"(value, index) in values\" :key=\"value\">\n      <ww-open-data :type=\"type\" :openid=\"value\" />\n      <template v-if=\"index !== values.length - 1\"> , </template>\n    </template>\n  </template>\n  <template v-else>\n    {{ text }}\n  </template>\n  <slot name=\"suffix\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, watch } from 'vue'\nimport { ENTERPRISE_SYNC_FROM, type EnterpriseSyncFrom } from '@/constants/enterprise'\nimport wecomInstance from '@/utils/wecom'\n\nimport { useSso } from '@/hooks/useSso'\n\ntype Type = 'userName' | 'memberName' | 'wxUserName' | 'departmentName'\n\nconst props = withDefaults(\n  defineProps<{\n    source?: EnterpriseSyncFrom\n    type: Type\n    openid?: any\n    text?: string\n  }>(),\n  {\n    source: ENTERPRISE_SYNC_FROM.DEFAULT,\n    type: 'userName',\n    openid: '',\n    text: '',\n  }\n)\n\nconst { isSsoSync, loadSyncSetting, syncValue } = useSso()\n\nconst values = computed(() => {\n  if (props.openid) {\n    const list = props.openid.split(',')\n    return props.type === 'departmentName' ? list.filter(item => item > 0) : list\n  }\n\n  return []\n})\n\nonMounted(async () => {\n  await loadSyncSetting()\n})\n\nwatch([() => props.openid, () => props.source], () => {\n  if (isSsoSync.value && props.openid && syncValue.value.value === ENTERPRISE_SYNC_FROM.WECOM) {\n    wecomInstance().then(() => {\n      window.WWOpenData.bind(document.querySelector('ww-open-data'))\n    })\n  }\n})\n</script>\n\n<style></style>\n\n<!-- <template>\n  <slot name=\"prefix\" />\n  <template v-if=\"syncValue.value !== ENTERPRISE_SYNC_FROM.DEFAULT\">\n    <template v-for=\"(item, index) in bindvalue\" :key=\"index\">\n      <ww-open-data\n        v-if=\"organization_from_wecom\"\n        :type=\"type === 'departmentName' ? 'departmentName' : 'userName'\"\n        :openid=\"item.bindvalue\"\n      />\n      <dt-open-data\n        v-if=\"organization_from_dingtalk\"\n        :open-type=\"type === 'departmentName' ? 'deptName' : 'userName'\"\n        :open-id=\"item.bindvalue\"\n      />\n      <template v-if=\"index !== bindvalue.length - 1\"> 、 </template>\n    </template>\n  </template>\n  <template v-else>\n    {{ text }}\n  </template>\n  <slot name=\"suffix\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\n// import unit from '@/components/Unit2'\nimport wecomInstance from '@/utils/wecom'\nimport { useEnterpriseStore } from '@/stores'\nimport { useSso } from '@/hooks/useSso'\nimport { ENTERPRISE_SYNC_FROM } from '@/constants/enterprise'\n\ntype Type = 'userName' | 'memberName' | 'wxUserName' | 'departmentName'\n\nconst props = withDefaults(\n  defineProps<{\n    // source?: '53ai' | 'wecom' | 'dingtalk'\n    type: Type\n    value?: any\n    openid?: any\n    text?: string\n  }>(),\n  {\n    // source: '53ai',\n    type: 'userName',\n    value: '',\n    openid: '',\n    text: '',\n  }\n)\nconst { syncValue, loadSyncSetting } = useSso()\nconst enterpriseStore = useEnterpriseStore()\nconst bindvalue = ref([])\n\nconst UNIT_GET_MAP = {\n  userName: 'getUser',\n  wxUserName: 'getWxUser',\n  memberName: 'getMember',\n  departmentName: 'getDepartment',\n}\n\nconst organization_from_wecom = computed(() => syncValue.value.value === ENTERPRISE_SYNC_FROM.WECOM)\nconst organization_from_dingtalk = computed(() => syncValue.value.value === ENTERPRISE_SYNC_FROM.DINGTALK)\n\nonMounted(async () => {\n  await loadSyncSetting()\n})\n\nlet dt_open_init_flag = Boolean(window.DTOpenData._corpId)\nwatch(\n  [() => props.value, () => props.openid, () => organization_from_dingtalk.value, () => organization_from_wecom.value],\n  async () => {\n    const { info: { dingtalk_info } = {} } = enterpriseStore\n    bindvalue.value = []\n    // await unit.instance()\n    if (organization_from_wecom.value) {\n      await wecomInstance()\n    } else if (organization_from_dingtalk.value) {\n      if (!dt_open_init_flag) dt_open_init_flag = window.DTOpenData.init(dingtalk_info?.corpId)\n    }\n\n    if (String(props.openid) && typeof props.openid !== 'undefined') {\n      const value = Array.isArray(props.openid) ? props.openid : [props.openid]\n      bindvalue.value = value.map(bindvalue => ({ bindvalue }))\n    }\n    await nextTick()\n    if (organization_from_wecom.value) window.WWOpenData.bind(document.querySelector('ww-open-data'))\n    else if (organization_from_dingtalk.value) {\n      window.DTOpenData.update(document.querySelectorAll('dt-open-data'))\n    }\n  },\n  {\n    immediate: true,\n  }\n)\n</script>\n\n<style></style> -->\n"
  },
  {
    "path": "web/console/src/components/Pagination/index.vue",
    "content": "<template>\n  <div class=\"flex justify-between items-center py-4\">\n    <div\n      class=\"text-sm text-[#666]\"\n      v-html=\"$t('table_footer_text', { total: `<span class='text-[#2563eb]'>${total}</span>` })\"\n    />\n    <el-pagination\n      :current-page=\"current_page\"\n      :page-size=\"page_size\"\n      :page-sizes=\"pageSizes\"\n      :layout=\"layout\"\n      :total=\"total\"\n      @current-change=\"handleCurrentChange\"\n      @size-change=\"handleSizeChange\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport { debounce } from '@/utils/functions/debounce';\n\nconst props = withDefaults(\n  defineProps<{\n    total?: number | string\n    pageSize?: number\n    page?: number\n    layout?: string\n    pageSizes?: number[]\n  }>(),\n  {\n    page: 1,\n    total: 0,\n    pageSize: 20,\n    layout: 'prev, pager, next, jumper',\n    pageSizes: () => [10, 20, 30, 40, 50, 100],\n  }\n)\n\nconst current_page = ref<number>(props.page)\nconst page_size = ref<number>(props.pageSize)\n\nconst emits = defineEmits<{\n  (e: 'currentChange', page: number): void\n  (e: 'update:page', page: number): void\n  (e: 'sizeChange', size: number): void\n  (e: 'update:pageSize', size: number): void\n}>()\n\nconst handleCurrentChange = debounce(\n  (page: number) => {\n    current_page.value = page\n    emits('currentChange', page)\n    emits('update:page', page)\n  },\n  200,\n  true\n)\nconst handleSizeChange = debounce(\n  (size: number) => {\n    page_size.value = size\n    emits('sizeChange', size)\n    emits('update:pageSize', size)\n  },\n  800,\n  true\n)\n\nwatch(\n  () => props.page,\n  page => {\n    current_page.value = page\n  },\n  {\n    immediate: true,\n  }\n)\nwatch(\n  () => props.pageSize,\n  size => {\n    page_size.value = size\n  },\n  {\n    immediate: true,\n  }\n)\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/console/src/components/Pagination/simple.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport { ArrowLeft, ArrowRight } from '@element-plus/icons-vue'\n\nconst props = withDefaults(defineProps<{\n  page?: number\n  total: number\n}>(), {\n  page: 1,\n  total: 0,\n})\nconst emits = defineEmits<{\n  (e: 'change', page: number): void\n}>()\nconst val = ref(1)\n\nconst onChange = () => {\n  emits('change', val.value)\n}\nconst handlePrev = () => {\n  if (val.value === 1)\n    return\n  val.value -= 1\n  onChange()\n}\n\nconst handleNext = () => {\n  if (val.value === props.total)\n    return\n  val.value += 1\n  onChange()\n}\n\nwatch(() => props.page, (page) => {\n  val.value = page\n})\n</script>\n\n<template>\n  <!-- 当el-input-number中的max为0时，会导致页面卡主，所以一定要有才渲染或者默认值大于0 -->\n  <div v-if=\"total\" class=\"flex items-center gap-5\">\n    <el-icon color=\"#182B50\" :class=\"[val === 1 ? 'cursor-not-allowed opacity-20' : 'cursor-pointer']\" @click=\"handlePrev\">\n      <ArrowLeft />\n    </el-icon>\n    <div class=\"flex items-center\">\n      <el-input-number v-model=\"val\" :controls=\"false\" :min=\"1\" :max=\"total\" @change=\"onChange\" />\n      <span class=\"text-[#182B50] mx-2\">/</span>\n      <span class=\"text-sm text-[#182B50]\">{{ total }}</span>\n    </div>\n    <el-icon color=\"#182B50\" :class=\"[val === total ? 'cursor-not-allowed opacity-20' : 'cursor-pointer']\" @click=\"handleNext\">\n      <ArrowRight />\n    </el-icon>\n  </div>\n</template>\n\n<style scoped>\n::v-deep(.el-input-number) {\n  width: 47px;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Permission/constant.ts",
    "content": "export const RESOURCE_TYPE = {\n  space: 0,\n  library: 1,\n  file: 2,\n} as const\n\nexport const SUBJECT_TYPE = {\n  user: 0,\n  group: 1,\n  company_all: 2,\n  space_admin: 3,\n  space_user: 4,\n  library_admin: 5,\n  library_user: 6,\n  space_active: 7,\n} as const\n\nexport const FILE_TYPE = {\n  FOLDER: 0,\n  FILE: 1,\n} as const\n\nexport const PERMISSION_TYPE = {\n  inherit: 999999,\n  manage: 500,\n  edit_all: 400,\n  edit_knowledge: 300,\n  view_and_export: 200,\n  viewer: 100,\n  public_only: 1,\n  none: 0,\n  remove: -1,\n  loading: -999999,\n} as const\n\nexport const VISIBILITY_TYPE = {\n  public: 1,\n  private: 0,\n} as const\n\nexport const ACTION_TYPE = {\n  view: 'view',\n  view_and_export: 'view_and_export',\n  edit_knowledge: 'edit_knowledge',\n  edit_all: 'edit_all',\n  manage: 'manage',\n} as const\n\nexport type ResourceType = (typeof RESOURCE_TYPE)[keyof typeof RESOURCE_TYPE]\nexport type SubjectType = (typeof SUBJECT_TYPE)[keyof typeof SUBJECT_TYPE]\nexport type FileType = (typeof FILE_TYPE)[keyof typeof FILE_TYPE]\nexport type PermissionType = (typeof PERMISSION_TYPE)[keyof typeof PERMISSION_TYPE]\nexport type VisibilityType = (typeof VISIBILITY_TYPE)[keyof typeof VISIBILITY_TYPE]\nexport type ActionType = (typeof ACTION_TYPE)[keyof typeof ACTION_TYPE]\n"
  },
  {
    "path": "web/console/src/components/Permission/data.ts",
    "content": "import { SUBJECT_TYPE, PERMISSION_TYPE } from './constant'\n\nexport const getLibraryDefault = () => {\n  return [\n    {\n      subject_type: SUBJECT_TYPE.space_admin,\n      subject_id: 0,\n      permission: PERMISSION_TYPE.inherit,\n    },\n    {\n      subject_type: SUBJECT_TYPE.space_user,\n      subject_id: 0,\n      permission: PERMISSION_TYPE.inherit,\n    },\n  ]\n}\n\nexport const getFileDefault = () => {\n  return [\n    {\n      subject_type: SUBJECT_TYPE.library_admin,\n      subject_id: 0,\n      permission: PERMISSION_TYPE.manage,\n    },\n    {\n      subject_type: SUBJECT_TYPE.library_user,\n      subject_id: 0,\n      permission: PERMISSION_TYPE.inherit,\n    },\n  ]\n}\n"
  },
  {
    "path": "web/console/src/components/Permission/member-selector.vue",
    "content": "<template>\n  <div>\n    <DeptMemberPicker\n      v-model=\"memberList\"\n      :default-first-value=\"false\"\n      type=\"user\"\n      :show-group=\"true\"\n      :allow-select-all-company=\"true\"\n      @confirm=\"handleUserAddConfirm\"\n    >\n      <template #trigger>\n        <slot name=\"trigger\" />\n      </template>\n    </DeptMemberPicker>\n\n    <el-dialog\n      :model-value=\"visible\"\n      append-to-body\n      align-center\n      title=\"添加用户\"\n      width=\"400px\"\n      :close-on-click-modal=\"false\"\n      @close=\"handleCancel\"\n    >\n      <div class=\"max-h-52 p-3 bg-[#F7F8FA] rounded-md space-y-1.5 overflow-y-auto\">\n        <template v-for=\"item in memberList\" :key=\"item.value\">\n          <div class=\"h-8 flex items-center justify-between gap-2\">\n            <img :src=\"item.avatar\" alt=\"avatar\" class=\"w-5 h-5 rounded-full\" />\n            <p class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{ item.label }}</p>\n            <RolePopover v-model=\"item.permission\" />\n          </div>\n        </template>\n      </div>\n\n      <template #footer>\n        <el-button size=\"large\" @click=\"handleCancel\">取消</el-button>\n        <el-button size=\"large\" type=\"primary\" @click=\"handleConfirm\">确定</el-button>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\n// 用户和分组选择器，用于添加成员并设置权限\nimport { ref } from 'vue'\nimport DeptMemberPicker from '@/components/DeptMemberPicker/index.vue'\nimport RolePopover from './selector.vue'\nimport { PERMISSION_TYPE, SUBJECT_TYPE, type PermissionType, type SubjectType } from './constant'\n\ntype PickerItem = {\n  label: string\n  value: string\n  type: 'member' | 'group' | 'company'\n  permission: PermissionType\n  avatar: string\n}\n\nconst emits = defineEmits<{\n  (e: 'confirm', value: { list: { subject_id: number; subject_type: SubjectType; permission: PermissionType }[] }): void\n}>()\n\nconst memberList = ref<PickerItem[]>([])\n\nconst visible = ref(false)\n\nconst handleUserAddConfirm = (data: any) => {\n  memberList.value = data.value.map(item => {\n    const isCompany = item.value === 0\n    return {\n      label: isCompany ? '全体成员' : item.label,\n      type: isCompany ? 'company' : item.type,\n      value: item.value,\n      avatar: isCompany\n        ? window.$getRealPath({ url: '/images/space/peoples.png' })\n        : window.$getRealPath({ url: '/images/space/people.png' }),\n      permission: PERMISSION_TYPE.viewer,\n    }\n  })\n  visible.value = true\n}\n\nconst handleCancel = () => {\n  memberList.value = []\n  visible.value = false\n}\n\nconst handleConfirm = () => {\n  const userList = memberList.value.filter(item => item.type === 'member')\n  const groupList = memberList.value.filter(item => item.type === 'group')\n  const companyList = memberList.value.filter(item => item.type === 'company')\n\n  emits('confirm', {\n    list: [\n      ...userList.map(item => {\n        return {\n          subject_id: item.value,\n          subject_type: SUBJECT_TYPE.user,\n          permission: item.permission,\n        }\n      }),\n      ...groupList.map(item => {\n        return {\n          subject_id: item.value,\n          subject_type: SUBJECT_TYPE.group,\n          permission: item.permission,\n        }\n      }),\n      ...companyList.map(item => {\n        return {\n          subject_id: 0,\n          subject_type: SUBJECT_TYPE.company_all,\n          permission: item.permission,\n        }\n      }),\n    ],\n  })\n  handleCancel()\n}\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/components/Permission/selector.vue",
    "content": "<template>\n  <el-popover\n    ref=\"popoverRef\"\n    placement=\"right-end\"\n    popper-class=\"!p-0\"\n    trigger=\"click\"\n    :teleported=\"teleported\"\n    :width=\"260\"\n    :append-to=\"appendTo\"\n  >\n    <div class=\"flex flex-col gap-0.5 px-1 py-1.5\">\n      <template v-for=\"opt in roleOptions\" :key=\"opt.value\">\n        <div v-if=\"opt.color\" class=\"border-t my-1\"></div>\n        <button\n          type=\"button\"\n          class=\"relative px-3 py-2 rounded hover:bg-[#2563EB14] text-left\"\n          :class=\"[currentValue === opt.value ? 'bg-[#2563EB14]' : '']\"\n          @click=\"handleSelect(opt.value)\"\n        >\n          <div\n            v-if=\"currentValue === opt.value\"\n            class=\"absolute top-1/2 left-0 -translate-y-1/2 w-1 h-4 rounded-full bg-[#2563EB]\"\n          ></div>\n          <div class=\"text-sm\" :class=\"[opt.color ? `text-[${opt.color}]` : 'text-[#1D1E1F]']\">\n            {{ opt.title }}\n          </div>\n          <div v-if=\"opt.desc\" class=\"text-xs text-[#939499]\">{{ opt.desc }}</div>\n        </button>\n      </template>\n    </div>\n    <template #reference>\n      <el-button :link=\"link\" :type=\"type\" :disabled=\"disabled\">\n        <span class=\"text-sm\">{{ displayLabel }}</span>\n        <el-icon v-if=\"!disabled\" class=\"ml-1\"><ArrowDown /></el-icon>\n      </el-button>\n    </template>\n  </el-popover>\n</template>\n\n<script setup lang=\"ts\">\n// 权限选择下拉组件，用于选择不同的权限级别\nimport { computed, type ComputedRef, ref } from 'vue';\nimport { ArrowDown } from '@element-plus/icons-vue';\nimport type { ElButton, ElPopover } from 'element-plus';\nimport { PERMISSION_TYPE, type PermissionType, RESOURCE_TYPE, ResourceType } from './constant';\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue: string | number\n    resourceType?: ResourceType\n    link?: boolean\n    type?: (typeof ElButton)['type']\n    inherit?: boolean\n    none?: boolean\n    remove?: boolean\n    disabled?: boolean\n    teleported?: boolean\n    appendTo?: string | HTMLElement\n  }>(),\n  {\n    modelValue: '',\n    resourceType: () => RESOURCE_TYPE.space,\n    link: true,\n    type: 'default',\n    inherit: false,\n    none: false,\n    remove: false,\n    disabled: false,\n    teleported: true,\n    appendTo: 'body',\n  }\n)\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: PermissionType): void\n  (e: 'select', value: PermissionType): void\n}>()\n\nconst popoverRef = ref<InstanceType<typeof ElPopover>>()\n\ntype RoleItem = { title: string; value: PermissionType; desc?: string; color?: string }\nconst roleOptions: ComputedRef<RoleItem[]> = computed(() => {\n  let options = [\n    {\n      title: props.resourceType === RESOURCE_TYPE.space ? '继承团队空间权限' : '继承上级权限',\n      desc: props.resourceType === RESOURCE_TYPE.space ? '继承团队空间权限' : '继承上级权限',\n      value: PERMISSION_TYPE.inherit,\n      color: '',\n    },\n    { title: '可管理', desc: '可编辑/下载/导出，添加成员', value: PERMISSION_TYPE.manage },\n    { title: '可编辑知识&语料', desc: '可编辑知识和语料', value: PERMISSION_TYPE.edit_all },\n    { title: '可编辑知识', desc: '编辑知识，不可编辑语料', value: PERMISSION_TYPE.edit_knowledge },\n    { title: '可查看/导出', desc: '可查看及下载导出', value: PERMISSION_TYPE.view_and_export },\n    { title: '仅查看', desc: '仅查看，不可下载导出', value: PERMISSION_TYPE.viewer },\n    { title: '无权限', desc: '无权限，不可见', value: PERMISSION_TYPE.none, color: '' },\n    { title: '移除', value: PERMISSION_TYPE.remove, color: '' },\n  ]\n  if (!props.inherit) {\n    options = options.filter(o => o.value !== PERMISSION_TYPE.inherit)\n  }\n  if (!props.none) {\n    options = options.filter(o => o.value !== PERMISSION_TYPE.none)\n  }\n  if (!props.remove) {\n    options = options.filter(o => o.value !== PERMISSION_TYPE.remove)\n  }\n\n  const removeOption = options.find(o => o.value === PERMISSION_TYPE.remove)\n  const noneOption = options.find(o => o.value === PERMISSION_TYPE.none)\n\n  if (removeOption) {\n    removeOption.color = '#FA5151'\n  } else if (noneOption) {\n    noneOption.color = '#FA5151'\n  }\n  return options\n})\n\nconst currentValue = computed(() => props.modelValue)\nconst displayLabel = computed(() => roleOptions.value.find(o => o.value === currentValue.value)?.title || '')\n\nconst handleSelect = (value: PermissionType) => {\n  emit('update:modelValue', value)\n  emit('select', value)\n  popoverRef.value?.hide()\n}\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/components/Prompt/README.md",
    "content": "# Prompt Token 计算器\n\n## 概述\n\n本组件使用原生JavaScript实现了一个GPT token计算器，替代了原来的`tiktoken`库依赖。\n\n## 实现原理\n\n### Token计算规则\n\n基于GPT tokenizer的工作原理，我们实现了以下规则：\n\n1. **中文字符**: 每个中文字符对应1个token\n2. **英文单词**:\n   - 短单词(≤3字符): 1个token\n   - 中等单词(4-6字符): 1.5个token\n   - 长单词(>6字符): 按长度比例计算\n3. **数字**: 连续数字按3.5个字符对应1个token\n4. **标点符号**: 每个字符0.3个token\n5. **空白字符**: 不计入token\n\n### 算法特点\n\n- **性能优化**: 使用单次遍历，避免重复计算\n- **准确性**: 提供相对准确的token估算\n- **轻量级**: 无外部依赖，减少包体积\n- **可维护**: 纯JavaScript实现，易于调试和优化\n\n## 使用方式\n\n```typescript\nimport { calculateTokens } from \"./input.vue\"\n\nconst text = \"Hello 世界！123\"\nconst tokenCount = calculateTokens(text)\nconsole.log(`Token数量: ${tokenCount}`)\n```\n\n## 注意事项\n\n1. 这是一个**估算值**，与实际的GPT tokenizer可能有差异\n2. 对于大多数业务场景，这个估算已经足够准确\n3. 如果需要精确的token计算，建议使用官方的tokenizer\n\n## 性能对比\n\n- **tiktoken**: 精确但体积大(~1MB)，加载慢\n- **原生实现**: 快速估算，体积小，加载快\n\n## 未来优化\n\n- 可以添加更多语言支持\n- 优化特殊字符的处理逻辑\n- 添加缓存机制提高性能\n"
  },
  {
    "path": "web/console/src/components/Prompt/generate.vue",
    "content": "<template>\n  <el-dialog v-model=\"visible\" title=\"角色指令自动生成\" class=\"el-dialog--p-0\" :close-on-click-modal=\"false\" width=\"1100px\" append-to-body @close=\"handleClose\">\n    <div class=\"h-[450px] flex border-b\">\n      <div class=\"flex-1 px-7 py-5\">\n        <div class=\"flex-none text-sm text-[#182B50]\">\n          参考示例\n        </div>\n        <div class=\"mt-3 flex items-center gap-2\">\n          <template v-for=\"item in menulist\" :key=\"item.type\">\n            <div\n              class=\"h-8 rounded px-3 flex items-center gap-1 cursor-pointer border\"\n              :class=\"[state.type === item.type ? 'border-[#2563EB] text-[#2563EB] bg-[#F4F7FD]' : 'border-[#F3F3F4] text-[#182B50] bg-[#F3F3F4]']\"\n              @click=\"handleExample(item)\"\n            >\n              <svg-icon :name=\"item.icon\" width=\"18px\" />\n              {{ item.title }}\n            </div>\n          </template>\n        </div>\n        <EditorContent\n          class=\"h-[162px] overflow-y-auto rounded border border-[#EBEEF5] mt-3\"\n          :editor=\"editor\"\n        />\n        <el-button :disabled=\"!state.prompt.trim()\" :loading=\"state.loading\" class=\"mt-5\" size=\"large\" type=\"primary\" @click=\"handleGenerate\">\n          <svg-icon name=\"magic-stick\" width=\"18px\" class=\"mr-1\" />\n          智能生成\n        </el-button>\n      </div>\n\n      <div class=\"flex-1 px-7 py-5 border-l flex flex-col overflow-hidden\">\n        <template v-if=\"state.result || state.loading\">\n          <div class=\"flex-none text-sm text-[#182B50]\">\n            生成的角色指令\n          </div>\n          <div class=\"flex-1 border rounded bg-[#F9FAFB] mt-3 flex flex-col overflow-hidden\">\n            <div class=\"flex-none h-10 px-5 flex items-center text-sm text-[#182B5099] border-b\">\n              *用于对 AI 的回复做出一系列指令和约束\n            </div>\n            <div class=\"flex-1 overflow-y-auto\">\n              <PromptInput ref=\"resultRef\" v-model=\"state.result\" word-wrap :disabled=\"state.loading\" :placeholder=\"state.loading ? '生成中...' : '请输入'\" show-line style=\"height: 100%;\" />\n            </div>\n          </div>\n        </template>\n\n        <div v-else class=\"h-full flex-center\">\n          <el-empty image=\"/images/prompt-empty.png\" :image-size=\"110\" description=\"生成后的的角色指令将会显示在这里\" />\n        </div>\n      </div>\n    </div>\n    <template #footer>\n      <div v-if=\"state.result && !state.loading\" class=\"mt-5\">\n        <el-button size=\"large\" @click=\"handleClose\">\n          取消\n        </el-button>\n        <el-button\n          type=\"primary\"\n          size=\"large\"\n          @click=\"handleUse\"\n        >\n          使用\n        </el-button>\n      </div>\n    </template>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, reactive, ref } from 'vue'\nimport { EditorContent, useEditor } from '@tiptap/vue-3'\nimport Document from '@tiptap/extension-document'\nimport Text from '@tiptap/extension-text'\nimport History from '@tiptap/extension-history'\nimport Placeholder from '@tiptap/extension-placeholder'\nimport Paragraph from '@tiptap/extension-paragraph'\nimport PromptInput from './input.vue'\n\nimport Test from './test/index.ts'\nimport { formatNormal, stream } from '@/utils/request/helper'\n\n\nconst emits = defineEmits<{\n  (e: 'confirm', text: string): void\n}>()\n\nconst resultRef = ref()\nconst visible = ref(false)\nconst state = reactive({\n  type: 'custom',\n  prompt: '',\n  result: '',\n  loading: false,\n})\n\nconst menulist = ref([\n  { type: 'custom', icon: 'magic-stick', title: '自定义', content: '' },\n  { type: 'server', icon: 'service', title: '智能客服', content: '<p>创建一个<link value=\"房地产\" defaultValue=\"房地产\"></link>行业的<link value=\"售后客服\" defaultValue=\"售后客服\"></link></p>' },\n  { type: 'expert', icon: 'people-safe', title: '专家顾问', content: '<p>创建一个拥有十年经验的<link value=\"人力资源\" defaultValue=\"人力资源\"></link>行业的<link value=\"专家顾问\" defaultValue=\"专家顾问\"></link></p>' },\n  { type: 'creator', icon: 'edit', title: '内容创作', content: '<p>创建一个<link value=\"小红书文案\" defaultValue=\"小红书文案\" type=\"creator\"></link>的<link value=\"编写\" defaultValue=\"编写\"></link>专家，目的是<link value=\"提炼产品卖点，提高市场营销效果\" defaultValue=\"提炼产品卖点，提高市场营销效果\"></link></p>' },\n])\n\nlet controller\nconst optimize = async (prompt: string) => {\n  prompt = prompt.trim()\n  if (!prompt)\n    return ElMessage.warning('请先填写指令')\n\n  state.loading = true\n  controller = new AbortController()\n  state.result = ''\n  state.type = 'result'\n  try {\n    await api.console.apps.prompt_optimise({\n      prompt,\n      prompt_action: 'generate',\n    }, {\n      hideError: true,\n      signal: controller.signal,\n      onDownloadProgress: (result) => {\n        const list = stream(result)\n        const data = formatNormal(list, { answerKey: 'answer', textKey: 'text' })\n        state.result = data.answer.replace('```markdown', '').replace('```', '')\n\n        resultRef.value?.scrollToBottom()\n      },\n    })\n  }\n  catch (error) {\n    console.error(error)\n  }\n  finally {\n    state.loading = false\n    controller = null\n    state.expect = ''\n    state.unexpect = ''\n  }\n}\n\nfunction jsonToString(jsonArray) {\n  return jsonArray.map((item) => {\n    if (item.type === 'paragraph') {\n      if (!item.content)\n        return ''\n      return item.content.map((contentItem) => {\n        if (contentItem.type === 'text')\n          return contentItem.text\n        if (contentItem.type === 'link')\n          return contentItem.attrs.value || contentItem.attrs.defaultValue\n\n        return ''\n      }).join('')\n    }\n    return ''\n  }).join('\\n')\n}\nconst editor = useEditor({\n  content: '',\n  extensions: [\n    Document,\n    Text,\n    Paragraph,\n    History,\n    Test,\n    Placeholder.configure({\n      placeholder: '创建一个广告文案的编写专家，目的是提炼产品价值，创造营销效果',\n    }),\n  ],\n  onTransaction({\n    editor,\n  }) {\n    const json = editor.getJSON()\n    const data = jsonToString(json.content)\n    state.prompt = data\n  },\n  editable: true,\n})\n\nconst handleExample = (item) => {\n  state.type = item.type\n  editor.value.commands.setContent(item.content)\n}\n\nconst handleGenerate = async () => {\n  await optimize(state.prompt)\n}\nconst handleClose = () => {\n  if (controller)\n    controller.abort()\n\n  visible.value = false\n}\nconst handleUse = () => {\n  emits('confirm', state.result)\n  visible.value = false\n}\n\ndefineExpose({\n  open() {\n    state.type = 'custom'\n    visible.value = true\n    state.result = ''\n    nextTick(() => {\n      editor.value.commands.setContent('')\n    })\n  },\n})\n</script>\n\n<style scoped>\n::v-deep(.tiptap) {\n  height: 100%;\n  padding: 12px;\n}\n::v-deep(.tiptap p.is-editor-empty:first-child::before) {\n  color: #adb5bd;\n  content: attr(data-placeholder);\n  float: left;\n  height: 0;\n  pointer-events: none;\n}\n\n::v-deep(.tiptap.ProseMirror-focused) {\n  box-shadow: 0 0 0 1px rgba(37, 99, 235, 1) inset;\n  outline: none;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Prompt/input.vue",
    "content": "<template>\n  <Codemirror\n    ref=\"codemirrorRef\"\n    v-model=\"prompt\"\n    :disabled=\"disabled\"\n    class=\"w-full prompt-code\"\n    :class=\"[showLine ? '' : 'prompt-line--hidden']\"\n    :placeholder=\"placeholder\"\n    :indent-with-tab=\"false\"\n    :tab-size=\"2\"\n    :extensions=\"extensions\"\n    :style=\"$attrs.style\"\n    @change=\"onChange\"\n    @focus=\"emits('focus')\"\n    @blur=\"emits('blur')\"\n  />\n  <!-- v-bind=\"{ ...$attrs }\" -->\n\n  <!-- 隐藏的 Tooltip 模板 -->\n  <div v-show=\"false\" ref=\"tooltipTemplate\">\n    <div class=\"variable-tooltip\" style=\"padding: 16px; min-width: 300px\">\n      <div class=\"flex items-center gap-2\">\n        <el-image v-if=\"agentInfo.icon\" :src=\"agentInfo.icon\" class=\"size-8 rounded\" />\n        <p class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{ agentInfo.name }}</p>\n      </div>\n    </div>\n  </div>\n\n  <div v-if=\"showToken\" class=\"px-2 py-px text-right text-[#182B50] text-opacity-60 text-xs\">{{ token }}个token</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport { Codemirror } from 'vue-codemirror'\n// 移除 tiktoken 导入\nimport type { DecorationSet, Tooltip } from '@codemirror/view'\nimport { Decoration, EditorView, MatchDecorator, ViewPlugin, WidgetType, keymap, showTooltip } from '@codemirror/view'\nimport { StateEffect, StateField } from '@codemirror/state'\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue: string\n    placeholder?: string\n    disabled?: boolean\n    // 左边显示的行号\n    showLine?: boolean\n    showToken?: boolean\n    variables?: {\n      label: string\n      children: {\n        label: string\n        value: string\n      }[]\n    }[]\n    wordWrap?: boolean\n    agentInfo?: {\n      icon: string\n      name: string\n    }\n  }>(),\n  {\n    modelValue: '',\n    disabled: false,\n    placeholder: window.$t('form.input_placeholder'),\n    showLine: false,\n    showToken: false,\n    variables: () => [],\n    wordWrap: false,\n    agentInfo: () => ({ icon: '', name: '' }),\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'change', data: any): void\n  (e: 'input', data: any): void\n  (e: 'update:modelValue', value: string): void\n  (e: 'focus'): void\n  (e: 'blur'): void\n}>()\n\nconst codemirrorRef = ref()\nconst editorView = ref<EditorView | null>(null)\nconst tooltipRef = ref<HTMLElement | null>(null)\nconst tooltipTemplate = ref()\n\nconst token = ref(0)\nconst prompt = ref('')\nconst selectedIndex = ref(-1)\n\n// 修复 tooltip 状态管理\nconst addTooltip = StateEffect.define<{ pos: number; above?: boolean; create: () => { dom: HTMLElement } } | null>()\nconst tooltipField = StateField.define<Tooltip | null>({\n  create() {\n    return null\n  },\n  update(tooltip, tr) {\n    for (const e of tr.effects) {\n      if (e.is(addTooltip)) return e.value\n    }\n    return tooltip\n  },\n  provide: f => showTooltip.from(f),\n})\n\nconst findVariableByValue = (value: string) => {\n  for (const group of props.variables) {\n    const found = group.children.find(item => item.value === value)\n    if (found) return { ...found, group: group.label }\n  }\n  return null\n}\n\nclass VariableWidget extends WidgetType {\n  name: string\n\n  value: string\n\n  constructor(name: string, value: string) {\n    super()\n    this.name = name\n    this.value = value\n  }\n\n  eq(other: any) {\n    return this.name === other.name\n  }\n\n  toDOM() {\n    const elt = document.createElement('span')\n    elt.style.cssText = `\n      color: rgb(42, 100, 231);\n      padding: 0 4px;`\n    elt.textContent = this.name\n    return elt\n  }\n\n  ignoreEvent() {\n    return false\n  }\n}\n\nconst variableMatcher = new MatchDecorator({\n  regexp: /(\\{\\#(\\S+?)\\#\\}|\\{\\{(\\S+?)\\}\\})/g,\n  decoration: match => {\n    const variable = findVariableByValue(match[0])\n    if (variable) {\n      return Decoration.replace({\n        widget: new VariableWidget(variable?.label, match[1]),\n      })\n    }\n    return null\n  },\n})\n\nconst variablePlugin = ViewPlugin.fromClass(\n  class {\n    variablePlugin: DecorationSet\n\n    constructor(view: any) {\n      this.variablePlugin = variableMatcher.createDeco(view)\n    }\n\n    update(update: any) {\n      this.variablePlugin = variableMatcher.updateDeco(update, this.variablePlugin)\n    }\n  },\n  {\n    decorations: instance => instance.variablePlugin,\n    provide: plugin =>\n      EditorView.atomicRanges.of(view => {\n        return view.plugin(plugin)?.variablePlugin || Decoration.none\n      }),\n  }\n)\n\n// 添加原生JavaScript token计算函数\nconst calculateTokens = (text: string): number => {\n  if (!text || text.trim().length === 0) return 0\n\n  // 基于GPT tokenizer的简化规则\n  // 这个函数提供了一个相对准确的token估算\n  // 实际GPT tokenizer更复杂，但这个方法对于大多数用例已经足够准确\n\n  let tokenCount = 0\n  let i = 0\n\n  while (i < text.length) {\n    const char = text[i]\n    const charCode = char.charCodeAt(0)\n\n    if (charCode >= 0x4e00 && charCode <= 0x9fff) {\n      // 中文字符 - 每个中文字符通常对应1个token\n      tokenCount += 1\n      i++\n    } else if (charCode >= 48 && charCode <= 57) {\n      // 数字 0-9 - 连续数字通常被合并为一个token\n      let numLength = 0\n      while (i < text.length && text.charCodeAt(i) >= 48 && text.charCodeAt(i) <= 57) {\n        numLength++\n        i++\n      }\n      // 连续数字按长度计算，通常每3-4个数字对应1个token\n      tokenCount += Math.ceil(numLength / 3.5)\n    } else if ((charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122)) {\n      // 英文字母 - 查找单词边界\n      let wordLength = 0\n      while (\n        i < text.length &&\n        ((text.charCodeAt(i) >= 65 && text.charCodeAt(i) <= 90) ||\n          (text.charCodeAt(i) >= 97 && text.charCodeAt(i) <= 122))\n      ) {\n        wordLength++\n        i++\n      }\n      // 英文单词通常按长度计算，短单词1个token，长单词按比例\n      if (wordLength <= 3) {\n        tokenCount += 1\n      } else if (wordLength <= 6) {\n        tokenCount += 1.5\n      } else {\n        tokenCount += Math.ceil(wordLength / 4)\n      }\n    } else if (char === ' ' || char === '\\n' || char === '\\t') {\n      // 空白字符 - 通常不计入token\n      i++\n    } else {\n      // 其他字符（标点符号、特殊字符等）\n      // 标点符号通常与相邻字符合并为一个token\n      tokenCount += 0.3\n      i++\n    }\n  }\n\n  return Math.round(tokenCount)\n}\n\nlet _tokenTimer: any\nconst calcToken = () => {\n  if (!props.showToken) return\n\n  clearTimeout(_tokenTimer)\n  _tokenTimer = setTimeout(() => {\n    const content_html = prompt.value\n    // 使用原生JavaScript计算token，替换tiktoken\n    const tokens = calculateTokens(content_html)\n    token.value = content_html.trim() ? tokens : 0\n  }, 200)\n}\n\nconst onChange = () => {\n  nextTick(() => {\n    emits('update:modelValue', prompt.value)\n    emits('change', prompt.value)\n    emits('input', prompt.value)\n  })\n  calcToken()\n}\n\nconst insertContent = (from: number, to: number, content: string) => {\n  editorView.value?.dispatch({\n    changes: {\n      from, // 保留已输入的 /\n      to,\n      insert: content,\n    },\n  })\n}\n\nconst updateSelectedItem = () => {\n  const items = tooltipRef.value?.querySelectorAll('.tooltip-item')\n  items?.forEach((item: any, index) => {\n    if (index === selectedIndex.value) {\n      item.classList.add('selected')\n      item.scrollIntoView({ block: 'nearest' })\n    } else {\n      item.classList.remove('selected')\n    }\n  })\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  if (!tooltipRef.value) return\n\n  const items = tooltipRef.value.querySelectorAll('.tooltip-item')\n  switch (event.key) {\n    case 'ArrowDown':\n    case 'ArrowUp':\n      event.preventDefault()\n      event.stopPropagation()\n      const direction = event.key === 'ArrowDown' ? 1 : -1\n      selectedIndex.value = Math.max(0, Math.min(selectedIndex.value + direction, items.length - 1))\n      updateSelectedItem()\n      break\n    case 'Enter':\n      event.preventDefault()\n      event.stopPropagation()\n      if (selectedIndex.value >= 0) {\n        const node = items[selectedIndex.value] as HTMLElement\n        node.click()\n        hideTooltip()\n      }\n      break\n  }\n}\n\nfunction hideTooltip() {\n  if (editorView.value) {\n    editorView.value.dispatch({\n      effects: addTooltip.of(null),\n    })\n  }\n  document.removeEventListener('keydown', handleKeyDown, true)\n}\n\nconst showVarTooltip = (pos: number, to: number) => {\n  // 克隆模板中的 Tooltip\n  const template = tooltipTemplate.value.querySelector('.variable-tooltip')\n  const dom = template.cloneNode(true) as HTMLElement\n  tooltipRef.value = dom\n\n  props.variables.forEach(group => {\n    // 添加分组标题\n    const groupTitle = document.createElement('div')\n    groupTitle.className = 'tooltip-title'\n    groupTitle.textContent = group.label\n    dom.appendChild(groupTitle)\n\n    // 添加变量选项\n    group.children.forEach(variable => {\n      const item = document.createElement('div')\n      item.className = 'tooltip-item'\n      item.textContent = variable.label\n      item.dataset.value = variable.value\n      item.onclick = () => {\n        insertContent(pos, to, variable.value)\n        hideTooltip()\n      }\n      dom.appendChild(item)\n    })\n  })\n\n  // 显示 tooltip\n  editorView.value?.dispatch({\n    effects: addTooltip.of({\n      pos,\n      above: true,\n      create: () => {\n        return { dom }\n      },\n    }),\n  })\n\n  nextTick(() => {\n    // 重置选中索引\n    selectedIndex.value = 0\n    updateSelectedItem()\n    document.addEventListener('keydown', handleKeyDown, true)\n  })\n}\n\nconst extensions = computed(() => {\n  const options = [\n    EditorView.updateListener.of(update => {\n      editorView.value = update.view\n      // 在输入其他内容时关闭 tooltip\n      if (update.docChanged) {\n        update.view.dispatch({\n          effects: addTooltip.of(null),\n        })\n      }\n    }),\n  ]\n  if (props.wordWrap) options.push(EditorView.lineWrapping)\n\n  if (props.variables && props.variables.length) {\n    options.push(\n      ...[\n        variablePlugin,\n        tooltipField,\n        keymap.of([\n          {\n            key: '/',\n            run(view) {\n              const pos = view.state.selection.main.head\n\n              // 延迟显示 tooltip\n              setTimeout(() => {\n                if (view.state.selection.main.head === pos + 1) {\n                  // 确保用户没有继续输入\n                  showVarTooltip(pos, pos + 1)\n                }\n              }, 200) // 200ms 延迟\n              return false\n            },\n          },\n        ]),\n      ]\n    )\n  }\n  return options\n})\n\nconst scrollToBottom = () => {\n  nextTick(() => {\n    if (editorView.value) {\n      const lastLine = editorView.value.state.doc.lines - 1\n      const lastLineEnd = editorView.value.state.doc.line(lastLine).to\n      editorView.value.dispatch({\n        selection: { anchor: lastLineEnd, head: lastLineEnd },\n        scrollIntoView: true,\n      })\n    }\n  })\n}\n\nwatch(\n  () => props.modelValue,\n  () => {\n    prompt.value = props.modelValue\n    calcToken()\n  },\n  { immediate: true }\n)\n\nwatch(\n  () => props.variables,\n  () => {\n    if (codemirrorRef.value) {\n      setTimeout(async () => {\n        const oldPrompt = prompt.value\n        prompt.value = ''\n        await nextTick()\n        prompt.value = oldPrompt\n      }, 200)\n    }\n  },\n  { deep: true }\n)\n// 新增：处理全局点击的方法\nconst handleGlobalClick = (event: MouseEvent) => {\n  if (tooltipRef.value && !tooltipRef.value.contains(event.target as Node)) hideTooltip()\n}\n\n// 设置和清理全局点击事件监听器\nonMounted(() => {\n  document.addEventListener('click', handleGlobalClick)\n})\n\nonUnmounted(() => {\n  document.removeEventListener('click', handleGlobalClick)\n})\n\ndefineExpose({\n  showTooltip() {\n    const pos = editorView.value?.state.selection.main.head ?? 0\n    showVarTooltip(pos, pos)\n  },\n  insertContent(content: string) {\n    const pos = editorView.value?.state.selection.main.head ?? 0\n    insertContent(pos, pos, content)\n  },\n  forceUpdate(text = '') {\n    prompt.value = text\n  },\n  scrollToBottom,\n})\n</script>\n\n<style>\n.cm-focused {\n  outline: none !important;\n}\n.prompt-line--hidden .cm-gutters {\n  display: none !important;\n}\n.ͼ1 .cm-placeholder {\n}\n.ͼ1 .cm-scroller {\n  font-family: Arial, Helvetica, sans-serif;\n  font-size: 14px;\n  color: #182b50;\n}\n.ͼ2 .cm-activeLine {\n  background: none !important;\n}\n.variable-tooltip {\n  width: 150px;\n  max-height: 250px;\n  overflow-y: auto;\n  border: none !important;\n  background-color: white !important;\n  padding: 4px 4px;\n  border-radius: 4px !important;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n  z-index: 1000;\n}\n\n.tooltip-title {\n  height: 24px;\n  line-height: 24px;\n  font-size: 12px;\n  color: #182b50;\n  opacity: 0.6;\n  cursor: default;\n  padding: 0px 8px;\n  margin-top: 4px;\n}\n\n.tooltip-item {\n  padding: 0px 8px;\n  height: 24px;\n  line-height: 24px;\n  cursor: pointer;\n  font-size: 12px;\n  color: #2563eb;\n  border-radius: 4px;\n  transition: background-color 0.2s;\n}\n\n.tooltip-item:hover,\n.tooltip-item.selected {\n  background-color: #f5f5f5;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Prompt/optimize.vue",
    "content": "<template>\n  <el-dialog v-model=\"visible\" title=\"角色指令自动优化\" class=\"el-dialog--p-0\" :close-on-click-modal=\"false\" width=\"1100px\" append-to-body @close=\"handleClose\">\n    <div class=\"h-[450px] flex border-b\">\n      <div class=\"flex-1 px-7 py-5 flex flex-col overflow-hidden\">\n        <div class=\"flex-none text-sm text-[#182B50]\">\n          当前：\n        </div>\n        <div class=\"flex-1 border rounded bg-[#F9FAFB] mt-3 flex flex-col overflow-hidden\">\n          <div class=\"flex-none h-10 px-5 flex items-center text-sm text-[#182B5099] border-b\">\n            *用于对 AI 的回复做出一系列指令和约束\n          </div>\n          <div class=\"flex-1 overflow-y-auto\">\n            <PromptInput v-model=\"state.prompt\" word-wrap show-line style=\"height: 100%;\" />\n          </div>\n        </div>\n      </div>\n\n      <div class=\"flex-1 px-7 py-5 border-l flex flex-col overflow-hidden\">\n        <div v-if=\"state.type === 'suggestion'\">\n          <div class=\"flex items-center gap-2\">\n            <el-icon @click=\"handleBack\">\n              <ArrowLeft />\n            </el-icon>\n            <span class=\"text-sm text-[#182B50]\">根据调试结果优化：</span>\n          </div>\n          <el-form label-position=\"top\" class=\"mt-4\">\n            <el-form-item label=\"不符合预期的地方\" required>\n              <el-input v-model=\"state.unexpect\" placeholder=\"请输入智能体表现哪里不符合预期\" size=\"large\" />\n            </el-form-item>\n            <el-form-item label=\"您的预期是什么\" required>\n              <el-input v-model=\"state.expect\" placeholder=\"说说您的预期，我来帮您优化\" size=\"large\" />\n            </el-form-item>\n          </el-form>\n          <el-button v-debounce :disabled=\"!(state.unexpect.trim() && state.expect.trim())\" size=\"large\" type=\"primary\" @click=\"handleSuggest\">\n            开始优化\n          </el-button>\n        </div>\n        <template v-else-if=\"state.type === 'result'\">\n          <div class=\"flex-none text-sm text-[#182B50]\">\n            优化后：\n          </div>\n          <div class=\"flex-1 border rounded bg-[#F9FAFB] mt-3 flex flex-col overflow-hidden\">\n            <div class=\"flex-none h-10 px-5 flex items-center text-sm text-[#182B5099] border-b\">\n              *用于对 AI 的回复做出一系列指令和约束\n            </div>\n            <div class=\"flex-1 overflow-hidden\">\n              <PromptInput ref=\"resultRef\" v-model=\"state.result\" word-wrap :disabled=\"state.loading\" :placeholder=\"state.loading ? '生成中...' : '请输入'\" show-line style=\"height: 100%;\" />\n            </div>\n          </div>\n        </template>\n\n        <div v-else class=\"h-full flex-center\">\n          <el-empty image=\"/images/prompt-empty.png\" :image-size=\"110\" description=\"优化后的角色指令将会显示在这里\" />\n        </div>\n      </div>\n    </div>\n    <template #footer>\n      <div class=\"flex items-center justify-between mt-5\">\n        <div>\n          <el-button :loading=\"state.loading\" size=\"large\" type=\"info\" plain @click=\"handleOptimize\">\n            <svg-icon name=\"hglt\" width=\"18px\" />\n            <span class=\"ml-1\">自动优化</span>\n          </el-button>\n          <el-button :loading=\"state.loading\" size=\"large\" type=\"info\" plain @click=\"handleResultOptimize\">\n            <svg-icon name=\"hglt2\" width=\"18px\" />\n            <span class=\"ml-1\">根据调试结果优化</span>\n          </el-button>\n        </div>\n        <div v-if=\"state.result && !state.loading\">\n          <el-button size=\"large\" @click=\"handleClose\">\n            取消\n          </el-button>\n          <el-button\n            type=\"primary\"\n            size=\"large\"\n            @click=\"handleUse\"\n          >\n            使用\n          </el-button>\n        </div>\n      </div>\n    </template>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref } from 'vue';\nimport { ArrowLeft } from '@element-plus/icons-vue';\nimport PromptInput from './input.vue';\n\nimport { formatNormal, stream } from '@/utils/request/helper';\n\nconst emits = defineEmits<{\n  (e: 'confirm', text: string): void\n}>()\n\nconst resultRef = ref()\nconst visible = ref(false)\nconst state = reactive({\n  prompt: '',\n  result: '',\n  type: '',\n  loading: false,\n  unexpect: '',\n  expect: '',\n})\n\nlet controller\nconst optimize = async (prompt: string) => {\n  prompt = prompt.trim()\n  if (!prompt)\n    return ElMessage.warning('请先填写指令')\n\n  state.loading = true\n  controller = new AbortController()\n  state.result = ''\n  state.type = 'result'\n  try {\n    await api.console.apps.prompt_optimise({\n      prompt,\n      prompt_action: 'optimise',\n      unexpect: state.unexpect,\n      expect: state.expect,\n    }, {\n      hideError: true,\n      signal: controller.signal,\n      onDownloadProgress: (result) => {\n        const list = stream(result)\n        const data = formatNormal(list, { answerKey: 'answer', textKey: 'text' })\n        state.result = data.answer.replace('```markdown', '').replace('```', '')\n\n        resultRef.value?.scrollToBottom()\n      },\n    })\n  }\n  catch (error) {\n    console.error(error)\n  }\n  finally {\n    state.loading = false\n    controller = null\n    state.expect = ''\n    state.unexpect = ''\n  }\n}\n\nconst handleOptimize = async () => {\n  await optimize(state.prompt)\n}\n\nconst handleSuggest = async () => {\n  await optimize(state.result || state.prompt)\n}\n\nconst handleBack = () => {\n  state.type = ''\n}\n\nconst handleResultOptimize = () => {\n  const prompt = (state.result || state.prompt).trim()\n  if (!prompt)\n    return ElMessage.warning('请先填写指令')\n\n  state.type = 'suggestion'\n}\n\nconst handleClose = () => {\n  if (controller)\n    controller.abort()\n\n  visible.value = false\n}\n\nconst handleUse = () => {\n  emits('confirm', state.result)\n  visible.value = false\n}\n\ndefineExpose({\n  open(prompt = '') {\n    state.prompt = prompt\n    state.type = ''\n    state.result = ''\n    state.expect = ''\n    state.unexpect = ''\n    visible.value = true\n  },\n})\n</script>\n\n<style scoped>\n\n</style>\n"
  },
  {
    "path": "web/console/src/components/Prompt/test/component.vue",
    "content": "<script>\nimport { NodeViewWrapper, nodeViewProps } from '@tiptap/vue-3'\nimport { CaretBottom } from '@element-plus/icons-vue'\n\nexport default {\n  components: {\n    NodeViewWrapper,\n    CaretBottom,\n  },\n\n  props: nodeViewProps,\n\n  methods: {\n    handleInput(e) {\n      const newContent = e.target.innerText.trim()\n\n      // 立即清空可见内容（保持与存储值一致）\n      if (newContent === '')\n        e.target.innerText = ''\n\n      this.updateAttributes({ value: newContent })\n    },\n\n    handleBlur(e) {\n      // 确保 blur 时同步最新状态\n      this.handleInput(e)\n    },\n\n    handleCommand(value) {\n      this.updateAttributes({ value })\n    },\n    handleWrapperClick() {\n      this.$refs.contentEl.focus()\n    },\n  },\n}\n</script>\n\n<template>\n  <NodeViewWrapper as=\"span\" class=\"mx-1\">\n    <span class=\"py-px px-1 rounded bg-[#F1F5FD] text-sm text-[#91B1F5] outline-none\" @click=\"handleWrapperClick\">\n      <span\n        ref=\"contentEl\"\n        contenteditable=\"true\"\n        :data-placeholder=\"node.attrs.defaultValue\"\n        class=\"content-editable outline-none\"\n        :class=\"{ empty: !node.attrs.value }\"\n        @input=\"handleInput\"\n        @blur=\"handleBlur\"\n      >\n        {{ node.attrs.value }}\n      </span>\n      <el-dropdown v-if=\"node.attrs.type === 'creator'\" @command=\"handleCommand\">\n        <el-icon color=\"#92B1F5\" class=\"ml-1 align-text-top\">\n          <CaretBottom />\n        </el-icon>\n        <template #dropdown>\n          <el-dropdown-menu>\n            <el-dropdown-item command=\"小红书文案\">小红书文案</el-dropdown-item>\n            <el-dropdown-item command=\"广告文案\">广告文案</el-dropdown-item>\n            <el-dropdown-item command=\"抖音脚本\">抖音脚本</el-dropdown-item>\n            <el-dropdown-item command=\"品牌故事\">品牌故事</el-dropdown-item>\n          </el-dropdown-menu>\n        </template>\n      </el-dropdown>\n    </span>\n  </NodeViewWrapper>\n</template>\n\n<style scoped>\n.content-editable.empty:empty::before {\n  content: attr(data-placeholder);\n  color: #91B1F5;\n  pointer-events: none; /* 允许点击穿透 */\n}\n\n/* 修复空内容时的布局 */\n.content-editable:empty {\n  display: inline-block;\n}\n.tiptap .ProseMirror-selectednode {\n  outline: none;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Prompt/test/index.ts",
    "content": "import { Node, mergeAttributes } from '@tiptap/core'\nimport { VueNodeViewRenderer } from '@tiptap/vue-3'\n\nimport Component from './component.vue'\n\nexport default Node.create({\n  name: 'link',\n\n  group: 'inline',\n\n  inline: true,\n  atom: true,\n\n  addAttributes() {\n    return {\n      value: {\n        default: '',\n      },\n      defaultValue: {\n        default: '',\n      },\n      type: {\n        // creator\n        default: '',\n      },\n    }\n  },\n\n  parseHTML() {\n    return [\n      {\n        tag: 'link',\n      },\n    ]\n  },\n\n  addCommands() {\n    return {\n      setLink: options => ({ commands }) => {\n        return commands.insertContent({\n          type: this.name,\n          attrs: options,\n        })\n      },\n    }\n  },\n\n  renderHTML({ HTMLAttributes }) {\n    return ['link', mergeAttributes(HTMLAttributes)]\n  },\n\n  addNodeView() {\n    return VueNodeViewRenderer(Component)\n  },\n})\n"
  },
  {
    "path": "web/console/src/components/ResourcePicker/index.vue",
    "content": "<template>\n  <div class=\"relative\">\n    <div v-if=\"$slots.trigger\" @click=\"open\">\n      <slot name=\"trigger\" />\n    </div>\n    <div v-if=\"!$slots.trigger\" class=\"w-full flex items-center flex-wrap gap-2\">\n      <ElButton\n        type=\"default\"\n        class=\"!bg-transparent !border-dashed border-[#3664EF] text-[#3664EF]\"\n        plain\n        size=\"large\"\n        @click=\"open\"\n      >\n        + {{ $t('action_add') }}\n      </ElButton>\n      <ElTag\n        v-for=\"item in modelValue\"\n        :key=\"item.value\"\n        size=\"large\"\n        effect=\"plain\"\n        type=\"info\"\n        closable\n        class=\"!h-[40px]\"\n        @close=\"handleRemove(item)\"\n      >\n        <img\n          v-if=\"item.logo\"\n          class=\"size-6 inline-block object-contain rounded-full overflow-hidden\"\n          :src=\"item.logo || ''\"\n        />\n        <label class=\"text-[#333] inline-block ml-2\" :class=\"item.logo ? 'mt-2' : ''\">{{ item.label }}</label>\n      </ElTag>\n    </div>\n    <ElDialog\n      v-model=\"visible\"\n      :title=\"$t('action_select')\"\n      :close-on-click-modal=\"false\"\n      width=\"800px\"\n      destroy-on-close\n      append-to-body\n      align-center\n      @close=\"close\"\n    >\n      <div class=\"w-full flex items-center justify-between gap-4\">\n        <div class=\"flex-1 w-0\">\n          <GroupTabs\n            ref=\"group_tabs_ref\"\n            v-model=\"filterForm.group_id\"\n            :group-type=\"props.groupType\"\n            @change=\"refresh\"\n          />\n        </div>\n        <ElInput\n          v-model=\"filterForm.keyword\"\n          style=\"width: 220px\"\n          size=\"large\"\n          clearable\n          :suffix-icon=\"Search\"\n          :placeholder=\"filterInputPlaceholder\"\n          @change=\"refresh\"\n        />\n      </div>\n      <TablePlus\n        ref=\"tableRef\"\n        class=\"mt-5\"\n        :page=\"filterForm.page\"\n        :limit=\"filterForm.pageSize\"\n        :data=\"tableData\"\n        :total=\"tableTotal\"\n        style=\"width: 100%\"\n        header-row-class-name=\"rounded overflow-hidden\"\n        header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n        :loading=\"loading\"\n        max-height=\"54vh\"\n        @page-size-change=\"onPageSizeChange\"\n        @page-current-change=\"onPageChange\"\n        @selection-change=\"onSelectionChange\"\n      >\n        <ElTableColumn type=\"selection\" width=\"40\" :selectable=\"selectable\" />\n        <template v-if=\"props.groupType === GROUP_TYPE.AGENT\">\n          <ElTableColumn prop=\"date\" :label=\"$t('module.agent')\" min-width=\"260\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <div class=\"flex items-center gap-2 w-full\">\n                <img class=\"flex-none w-8 h-8 rounded-full overflow-hidden\" :src=\"row.logo\" alt=\"\" />\n                <div class=\"flex-1 w-0 text-sm flex flex-col\">\n                  <div class=\"text-[#2563EB] truncate\">{{ row.name || '--' }}</div>\n                  <div v-show=\"row.description\" class=\"text-xs text-[#808080] truncate\">\n                    {{ row.description || '' }}\n                  </div>\n                </div>\n              </div>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('type')\" width=\"200\" show-overflow-tooltip>\n            <template #default=\"{ row = {} }\">\n              {{ $t(row.agent_type_label) || '--' }}\n            </template>\n          </ElTableColumn>\n        </template>\n        <template v-if=\"props.groupType === GROUP_TYPE.PROMPT\">\n          <ElTableColumn prop=\"date\" :label=\"$t('name')\" width=\"260\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <div class=\"truncate\">{{ row.name || '--' }}</div>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('description')\" show-overflow-tooltip>\n            <template #default=\"{ row = {} }\">\n              {{ row.description || '--' }}\n            </template>\n          </ElTableColumn>\n        </template>\n        <template v-if=\"props.groupType === GROUP_TYPE.AI_LINK\">\n          <ElTableColumn prop=\"date\" :label=\"$t('module.ai_product')\" min-width=\"260\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <div class=\"flex items-center gap-2 w-full\">\n                <img class=\"flex-none w-8 h-8 rounded-full overflow-hidden\" :src=\"row.logo\" alt=\"\" />\n                <div class=\"text-[#2563EB] truncate\">{{ row.name || '--' }}</div>\n              </div>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('jump_path')\" width=\"300\" show-overflow-tooltip>\n            <template #default=\"{ row = {} }\">\n              {{ row.url || '--' }}\n            </template>\n          </ElTableColumn>\n        </template>\n      </TablePlus>\n\n      <template #footer>\n        <div class=\"py-4 flex items-center justify-between\">\n          <div\n            class=\"text-sm text-[#768097] text-left\"\n            v-html=\"$t('selected_tip', { total: `<span class='text-[#3664EF]'>${checkedList.length}</span>` })\"\n          />\n          <div class=\"flex-center\">\n            <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n              {{ $t('action_cancel') }}\n            </ElButton>\n            <ElButton\n              class=\"w-[96px] h-[36px]\"\n              type=\"primary\"\n              :loading=\"loading\"\n              :disabled=\"!checkedList.length\"\n              @click=\"handleConfirm\"\n            >\n              {{ $t('action_confirm') }}\n            </ElButton>\n          </div>\n        </div>\n      </template>\n    </ElDialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Search } from '@element-plus/icons-vue'\nimport { ref, onMounted, computed, reactive, nextTick } from 'vue'\nimport { agentApi } from '@/api/modules/agent'\nimport { aiLinkApi } from '@/api/modules/ai-link'\nimport { GROUP_TYPE, GroupType } from '@/constants/group'\nimport promptApi from '@/api/modules/prompt'\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: any[]\n    groupType: GroupType\n  }>(),\n  {\n    modelValue: () => [],\n    groupType: GROUP_TYPE.AGENT,\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'update:modelValue', value: any[]): void\n  (e: 'change', result: { value: any[] }): void\n  (e: 'confirm', result: { value: any[] }): void\n  (e: 'remove', result: { value: any[] }): void\n}>()\n\nconst tableRef = ref()\nconst selectedValue = ref(JSON.parse(JSON.stringify(props.modelValue)))\nconst visible = ref(false)\nconst tableData = ref([])\nconst tableTotal = ref(0)\nconst loading = ref(false)\nconst filterForm = reactive({\n  group_id: '-1',\n  keyword: '',\n  page: 1,\n  pageSize: 10,\n})\nconst checkedListMap = ref(new Map([]))\n\nconst filterInputPlaceholder = computed(() => {\n  return props.groupType === GROUP_TYPE.AGENT\n    ? window.$t('module.agent_search_placeholder')\n    : props.groupType === GROUP_TYPE.PROMPT\n      ? window.$t('module.prompt_search_placeholder')\n      : window.$t('website_name')\n})\nconst idName = computed(() => {\n  return props.groupType === GROUP_TYPE.AGENT ? 'agent_id' : props.groupType === GROUP_TYPE.PROMPT ? 'prompt_id' : 'id'\n})\n\nconst checkedList = computed(() => {\n  let list = Array.from(checkedListMap.value.values()).flat()\n  list = list.filter(\n    (item, index, self) =>\n      index === self.findIndex(t => t[idName.value] === item[idName.value]) &&\n      !props.modelValue.find((row: any) => row[idName.value] === item[idName.value])\n  )\n  return list\n})\n\nconst setModelValue = ({ value = [] } = {}) => {\n  value = JSON.parse(JSON.stringify(value))\n  selectedValue.value = value\n  emits('update:modelValue', value)\n  emits('change', { value })\n}\n\nconst fetchAgentData = async () => {\n  const { count = 0, agents = [] } = await agentApi.list({\n    params: {\n      group_id: filterForm.group_id,\n      keyword: filterForm.keyword,\n      offset: (filterForm.page - 1) * filterForm.pageSize,\n      limit: filterForm.pageSize,\n    },\n  })\n  return { count, list: agents }\n}\nconst fetchPromptData = async () => {\n  const { total = 0, list = [] } = await promptApi.list({\n    params: {\n      group_id: filterForm.group_id,\n      keyword: filterForm.keyword,\n      offset: (filterForm.page - 1) * filterForm.pageSize,\n      limit: filterForm.pageSize,\n    },\n  })\n  return { count: total, list }\n}\nconst fetchAIToolkitData = async () => {\n  const list = await aiLinkApi.list({\n    params: {\n      group_id: +filterForm.group_id,\n      keyword: filterForm.keyword,\n    },\n  })\n  return { count: list.length ?? 0, list: list ?? [] }\n}\nconst fetchTableData = async () => {\n  loading.value = true\n  let data = { count: 0, list: [] }\n  if (props.groupType === GROUP_TYPE.AGENT) {\n    data = await fetchAgentData()\n  } else if (props.groupType === GROUP_TYPE.PROMPT) {\n    data = await fetchPromptData()\n  } else {\n    data = await fetchAIToolkitData()\n  }\n  tableTotal.value = data.count\n  tableData.value = []\n  await nextTick()\n  tableData.value = data.list.map((item = {}) => {\n    item.value = +item[idName.value] || 0\n    item.label = item.name || ''\n    return item\n  })\n  await nextTick()\n  if (checkedList.value.length) {\n    await nextTick()\n    checkedList.value.forEach((item = {}) => {\n      const row = tableData.value.find(row => row[idName.value] === item[idName.value])\n      if (row) tableRef.value.toggleRowSelection(row)\n    })\n  }\n  await nextTick()\n  tableData.value.forEach((item = {}) => {\n    const disabled = !!props.modelValue.find((row: any) => row[idName.value] === item[idName.value])\n    if (disabled && !checkedList.value.find((row: any) => row[idName.value] === item[idName.value]))\n      tableRef.value.toggleRowSelection(item)\n  })\n  loading.value = false\n}\n\nconst open = async () => {\n  checkedListMap.value = new Map([])\n  selectedValue.value = JSON.parse(JSON.stringify(props.modelValue)).map((item = {}) => {\n    item.value = +item.value || +item[idName.value] || 0\n    item.label = item.label || item.name || ''\n    return item\n  })\n  tableTotal.value = 0\n  tableData.value = []\n  visible.value = true\n  await nextTick()\n  refresh()\n}\nconst close = () => {\n  visible.value = false\n}\nconst refresh = () => {\n  filterForm.page = 1\n  fetchTableData()\n}\nconst onPageSizeChange = (pageSize: number) => {\n  filterForm.pageSize = pageSize\n  refresh()\n}\nconst onPageChange = (page: number) => {\n  filterForm.page = page\n  fetchTableData()\n}\nconst onSelectionChange = (selection: any[]) => {\n  if (loading.value) return\n  checkedListMap.value.set(filterForm.group_id, [...selection])\n}\nconst selectable = (data: any = {}) => {\n  const disabled = !!props.modelValue.find((row: any) => row[idName.value] === data[idName.value])\n  return !disabled\n}\nconst handleRemove = (item: any) => {\n  selectedValue.value = selectedValue.value.filter(i => i.value !== item.value)\n  emits('remove', { value: [item] })\n}\nconst handleConfirm = () => {\n  const value = JSON.parse(JSON.stringify(checkedList.value))\n  setModelValue({ value })\n  emits('confirm', { value })\n  close()\n}\n\nonMounted(async () => {})\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style scoped lang=\"scss\">\n::v-deep(.el-tabs__content),\n::v-deep(.el-tabs__nav-wrap:after) {\n  display: none;\n}\n\n::v-deep(.el-tabs__header) {\n  margin-bottom: 0 !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Scroller/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { nextTick, ref } from 'vue'\nimport { debounce } from '@/utils/functions/debounce'\n\nconst props = withDefaults(defineProps<{\n  disableTop?: boolean\n  disableBottom?: boolean\n  threshold?: number\n  debounceTime?: number\n}>(), {\n  disableTop: false,\n  disableBottom: false,\n  threshold: 50,\n  debounceTime: 200,\n})\n\nconst emit = defineEmits<{\n  (e: 'load-top', done: () => void): void\n  (e: 'load-bottom', done: () => void): void\n}>()\n\nconst containerRef = ref<HTMLElement | null>(null)\nconst contentRef = ref<HTMLElement | null>(null)\nconst topLoading = ref(false)\nconst bottomLoading = ref(false)\nconst lastScrollTop = ref(0)\nlet previousScrollHeight = 0\n\nconst checkPosition = debounce(() => {\n  if (!containerRef.value)\n    return\n\n  const { scrollTop, scrollHeight, clientHeight } = containerRef.value\n  const currentScroll = scrollTop\n\n  // 判断滚动方向\n  const isScrollingDown = currentScroll > lastScrollTop.value\n  lastScrollTop.value = currentScroll\n\n  // 触发条件判断\n  const isAtTop = currentScroll <= props.threshold\n  const isAtBottom = currentScroll + clientHeight >= scrollHeight - props.threshold\n\n  if (!isScrollingDown && isAtTop && !props.disableTop) {\n    topLoading.value = true\n    emit('load-top', () => {\n      topLoading.value = false\n    })\n  }\n\n  if (isScrollingDown && isAtBottom && !props.disableBottom) {\n    bottomLoading.value = true\n    emit('load-bottom', () => {\n      bottomLoading.value = false\n    })\n  }\n}, props.debounceTime)\n\nconst handleScroll = () => {\n  checkPosition()\n}\n\nconst scrollToTop = (behavior: ScrollBehavior = 'smooth') => {\n  containerRef.value?.scrollTo({\n    top: 0,\n    behavior,\n  })\n}\n\nconst scrollToBottom = (behavior: ScrollBehavior = 'smooth') => {\n  if (!containerRef.value)\n    return\n  const { scrollHeight, clientHeight } = containerRef.value\n  containerRef.value.scrollTo({\n    top: scrollHeight - clientHeight,\n    behavior,\n  })\n}\n\n// 滚动位置保持相关方法\nconst prepareTopLoad = () => {\n  if (containerRef.value)\n    previousScrollHeight = containerRef.value.scrollHeight\n}\n\nconst adjustScrollPosition = () => {\n  nextTick(() => {\n    if (!containerRef.value)\n      return\n    const newScrollHeight = containerRef.value.scrollHeight\n    const diff = newScrollHeight - previousScrollHeight\n    if (diff > 0)\n      containerRef.value.scrollTop += diff\n  })\n}\n\ndefineExpose({\n  scrollToTop,\n  scrollToBottom,\n  prepareTopLoad,\n  adjustScrollPosition,\n})\n</script>\n\n<template>\n  <div\n    ref=\"containerRef\"\n    class=\"scroll-container\"\n    @scroll.passive=\"handleScroll\"\n  >\n    <div ref=\"contentRef\" class=\"scroll-content\">\n      <!-- 顶部加载提示 -->\n      <div\n        v-if=\"!disableTop\"\n        class=\"load-indicator top-indicator\"\n        :data-visible=\"topLoading\"\n      >\n        <slot name=\"top-loading\" :loading=\"topLoading\">\n          <div class=\"loader\">\n            <div class=\"loader-spinner\" />\n          </div>\n        </slot>\n      </div>\n\n      <!-- 主要内容 -->\n      <slot />\n\n      <!-- 底部加载提示 -->\n      <div\n        v-if=\"!disableBottom\"\n        class=\"load-indicator bottom-indicator\"\n        :data-visible=\"bottomLoading\"\n      >\n        <slot name=\"bottom-loading\" :loading=\"bottomLoading\">\n          <div class=\"loader\">\n            <div class=\"loader-spinner\" />\n          </div>\n        </slot>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style scoped lang=\"scss\">\n.scroll-container {\n  height: 100%;\n  overflow-y: auto;\n  position: relative;\n  -webkit-overflow-scrolling: touch;\n}\n\n.scroll-content {\n  min-height: 100%;\n  position: relative;\n}\n\n.load-indicator {\n  height: 0;\n  transition: opacity 0.3s ease;\n  opacity: 0;\n  pointer-events: none;\n  background: rgba(255, 255, 255, 0.9);\n\n  &.top-indicator {\n    position: sticky;\n    top: 20px;\n    z-index: 1;\n  }\n\n  &.bottom-indicator {\n    position: sticky;\n    bottom: 20px;\n  }\n\n  &[data-visible=\"true\"] {\n    opacity: 1;\n  }\n\n  .loader {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: 100%;\n  }\n\n  .loader-spinner {\n    width: 24px;\n    height: 24px;\n    border: 3px solid rgba(0, 0, 0, 0.1);\n    border-top-color: #007aff;\n    border-radius: 50%;\n    animation: spin 1s linear infinite;\n  }\n}\n\n@keyframes spin {\n  to { transform: rotate(360deg); }\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Search/index.vue",
    "content": "<template>\n  <el-input\n    v-if=\"searching\"\n    ref=\"inputRef\"\n    v-model=\"input\"\n    style=\"max-width: 230px\"\n    size=\"default\"\n    clearable\n    :prefix-icon=\"Search\"\n    :placeholder=\"$t(placeholder)\"\n    class=\"input-with-search\"\n\t\t:disabled=\"disabled\"\n    @blur=\"handleBlur\"\n    @input=\"handleInput\"\n\t\t@change=\"handleChange\"\n  />\n  <div v-else class=\"flex items-center gap-1\" :class=\"[disabled ? 'text-[#999] cursor-not-allowed' : 'cursor-pointer text-[#576D9C]']\" @click=\"handleFocus\">\n    <svg-icon name=\"search\" width=\"16\" />\n    <span class=\"text-sm \">{{ $t('action_search') }}</span>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, ref } from 'vue';\nimport { Search } from '@element-plus/icons-vue';\n\nimport { debounce } from '@/utils/functions/debounce';\n\nconst props = withDefaults(defineProps<{\n  placeholder?: string\n  size?: string\n\tdisabled?: boolean\n}>(), {\n\tplaceholder: 'form_input_placeholder',\n  size: 'default',\n\tdisabled: false,\n})\n\nconst emits = defineEmits<{\n\t(e: 'input', value: string): void\n\t(e: 'change', value: string): void\n}>()\n\nconst inputRef = ref()\n\nconst input = ref('')\nconst searching = ref(false)\n\nconst handleFocus = () => {\n\tif (props.disabled) return\n  searching.value = true\n  nextTick(() => {\n    inputRef.value.focus()\n  })\n}\nconst handleBlur = () => {\n  if (input.value)\n    return\n  searching.value = false\n}\n\nconst handleInput = debounce(() => {\n\temits('input', input.value)\n}, 600)\nconst handleChange = debounce(() => {\n  emits('change', input.value)\n}, 0)\n</script>\n\n<style>\n.input-with-search  .el-input-group__prepend {\n\tpadding: 0 10px;\n\t--el-fill-color-light: transparent;\n}\n.input-with-search  .el-input-group__append {\n\tpadding: 0 12px;\n\tcursor: pointer;\n\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/SelectPlus/index.vue",
    "content": "<template>\n  <ElSelect v-bind=\"$attrs\" :filterable=\"filterable\" :size=\"size\" @change=\"onChange\">\n    <template v-if=\"selected_option.icon\" #prefix>\n      <div class=\"w-[24px] h-[24px] inline-block\">\n        <img v-if=\"iconType === 'image'\" :src=\"selected_option.icon\" class=\"h-full inline-block object-cover\" />\n        <ElIcon v-else-if=\"iconType === 'icon'\" class=\"text-lg\">\n          <component :is=\"selected_option.icon\" />\n        </ElIcon>\n      </div>\n    </template>\n\n    <slot>\n      <template v-for=\"item in options\" :key=\"item.value\">\n        <ElOptionGroup v-if=\"item.options\" :label=\"getLabel(item.label)\">\n          <ElOption v-for=\"row in item.options\" :key=\"row.value\" :label=\"getLabel(row.label)\" :value=\"row.value\">\n            <div class=\"flex items-center gap-2\">\n              <div class=\"flex-none size-6 flex items-center justify-center\">\n                <img v-if=\"iconType === 'image'\" :src=\"row.icon\" class=\"h-full inline-block object-cover\" />\n                <ElIcon v-else-if=\"iconType === 'icon'\" class=\"text-lg\">\n                  <component :is=\"row.icon\" />\n                </ElIcon>\n              </div>\n              <span class=\"flex-1 truncate\">{{ getLabel(row.label) }}</span>\n              <slot name=\"item_after\" :data=\"row\" />\n            </div>\n          </ElOption>\n        </ElOptionGroup>\n        <ElOption v-else :label=\"getLabel(item.label)\" :value=\"item.value\">\n          <div class=\"size-6 inline-block mr-2\">\n            <img v-if=\"iconType === 'image'\" :src=\"item.icon\" class=\"h-full inline-block object-cover\" />\n            <ElIcon v-else-if=\"iconType === 'icon'\" class=\"size-6 text-lg\">\n              <component :is=\"item.icon\" />\n            </ElIcon>\n          </div>\n          <span>{{ getLabel(item.label) }}</span>\n        </ElOption>\n      </template>\n    </slot>\n  </ElSelect>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, nextTick } from 'vue'\nimport type { ComponentInternalInstance } from 'vue'\nimport { ElIcon } from 'element-plus'\n\ninterface OptionItem {\n  value: string\n  label: string\n  icon?: string\n}\n\ninterface GroupOptionItem extends OptionItem {\n  options?: OptionItem[]\n}\n\nconst props = withDefaults(\n  defineProps<{\n    iconType?: 'image' | 'svg' | 'icon'\n    options?: GroupOptionItem[]\n    filterable?: boolean\n    size?: 'large' | 'default' | 'small'\n    useI18n?: boolean\n  }>(),\n  {\n    iconType: 'image',\n    options: () => [],\n    filterable: true,\n    size: 'large',\n    useI18n: true,\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'change', result: { value: string; option: GroupOptionItem | OptionItem }): void\n}>()\n\nconst instance = getCurrentInstance()\nif (!instance) throw new Error('SelectPlus must be used within setup')\n\nconst { proxy } = instance as ComponentInternalInstance & { proxy: { $attrs: any; $t: (key: string) => string } }\n\n// 处理标签文本\nconst getLabel = (label: string) => {\n  if (!props.useI18n) return label\n  return proxy.$t(label)\n}\n\nconst selected_option = computed<GroupOptionItem | OptionItem>(() => {\n  const value = proxy.$attrs.modelValue\n  let option: GroupOptionItem | OptionItem = { value: '', label: '' }\n  props.options.forEach(item => {\n    if (item.options) {\n      item.options.forEach(row => {\n        if (row.value === value) option = row\n      })\n    } else if (item.value === value) option = item\n  })\n  return option\n})\n\nconst onChange = (value: string) => {\n  nextTick(() => {\n    emits('change', { value, option: selected_option.value })\n  })\n}\n</script>\n\n<style scoped>\n/* 输入框样式 */\n\n/* 选项图标样式 */\n.option-icon {\n  margin-right: 8px;\n  vertical-align: middle;\n}\n\n.option-label {\n  vertical-align: middle;\n}\n\n/* 清除按钮调整 */\n:deep(.el-icon-circle-close) {\n  right: 25px; /* 避免与原生清除按钮重叠 */\n}\n\n.el-select :deep(.el-input__prefix) {\n  display: flex;\n  align-items: center;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/ServiceDialog/index.vue",
    "content": "<template>\n  <el-dialog\n    class=\"service-dialog\"\n    :title=\"title || $t('service.title')\"\n    width=\"520px\"\n    :before-close=\"handleClose\"\n    :model-value=\"visible\"\n  >\n    <div class=\"consult\">\n      <div class=\"consult-info\">\n        <div class=\"w-[70px] h-[70px] rounded-full bg-white flex justify-center items-center\">\n          <img class=\"w-[50px] h-[50px]\" src=\"https://chat.53ai.com/images/extension_icon.png\" />\n        </div>\n        <div class=\"consult-info--rt\">\n          <p class=\"name\">\n            {{ $t('service.consult_name') }}\n          </p>\n          <div class=\"flex-center\">\n            <ElIcon :size=\"16\">\n              <PhoneFilled />\n            </ElIcon>\n            <span class=\"mobile-number\">186 8888 1185</span>\n          </div>\n        </div>\n      </div>\n      <div class=\"consult-ft px-[50px] py-[30px] max-md:px-4\">\n        <p\n          class=\"max-w-64\"\n          v-html=\"\n            `\n              <span style='font-size: 15px;'>“</span>\n              ${$t('service.desc_3') + $t('version.upgrade_renew')}\n              <span style='font-size: 15px;'>”</span>\n            `\n          \"\n        ></p>\n        <!-- <p v-html=\"`<span style='font-size: 15px;'>“</span>${$t('service.desc_1')}<br />${$t('service.desc_2')}<span style='font-size: 15px;'>”</span>`\" /> -->\n      </div>\n      <div class=\"consult-img right-[30px] max-md:right-[15px]\">\n        <img src=\"https://hub.53ai.com/console/images/upgrade-qrcode.png\" />\n      </div>\n    </div>\n  </el-dialog>\n</template>\n\n<script lang=\"ts\" setup>\nimport { PhoneFilled } from '@element-plus/icons-vue';\n\ninterface Emit {\n  (e: 'update:visible', visible: boolean): void\n}\ninterface Props {\n  title?: string\n  visible: boolean\n}\nwithDefaults(defineProps<Props>(), {\n  title: '',\n  visible: false,\n})\n\nconst emit = defineEmits<Emit>()\n\nconst handleClose = () => {\n  emit('update:visible', false)\n}\n</script>\n\n<style>\n.service-dialog {\n  border-radius: 10px 10px 11px 11px !important;\n  background-color: #efefef !important;\n  padding: 0 !important;\n}\n\n.service-dialog .el-dialog__header {\n  padding: var(--el-dialog-padding-primary) !important;\n}\n\n.service-dialog .el-dialog__headerbtn {\n  width: max-content !important;\n  height: max-content !important;\n}\n\n.service-dialog .el-dialog__body {\n  padding: 30px 0 0 !important;\n  border: none !important;\n  margin: 0 !important;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.consult {\n  &-info {\n    display: flex;\n    margin-bottom: 30px;\n    padding: 0 38px;\n\n    &--rt {\n      margin-left: 20px;\n\n      .name {\n        font-size: 24px;\n        font-weight: 500;\n        vertical-align: text-bottom;\n        margin-bottom: 10px;\n      }\n\n      .phone-icon {\n        font-size: 16px;\n        color: #0082f0;\n      }\n\n      .mobile-number {\n        color: #666;\n        margin-left: 5px;\n        font-size: 18px;\n      }\n    }\n  }\n\n  &-ft {\n    box-sizing: border-box;\n    height: 125px;\n    background-color: #0082f0;\n    border-radius: 0 0 10px 10px;\n    color: #fff;\n    position: relative;\n\n    &::before {\n      content: '';\n      width: 20px;\n      height: 20px;\n      background-color: #0082f0;\n      transform: rotate(45deg);\n      position: absolute;\n      top: -10px;\n      left: 125px;\n    }\n\n    p {\n      line-height: 24px;\n      position: relative;\n      // &::before {\n      //   content: '“';\n      //   font-size: 40px;\n      //   position: absolute;\n      //   top: 10px;\n      //   left: -20px;\n      // }\n      // &::after {\n      //   content: '”';\n      //   font-size: 40px;\n      //   position: absolute;\n      //   bottom: -15px;\n      // }\n    }\n  }\n\n  &-img {\n    width: 104px;\n    height: 104px;\n    background: #fff;\n    padding: 2px;\n    box-shadow: 1px 1px 2px 0 rgb(7 116 208 / 20%);\n    border-radius: 4px;\n    position: absolute;\n    bottom: 50px;\n\n    img {\n      width: 100%;\n      height: 100%;\n    }\n  }\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Sortable/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\n\nimport Sortable from 'sortablejs'\n\nconst props = withDefaults(defineProps<{\n  modelValue: any[]\n  props?: any\n  dragBg?: string\n  identity?: string\n  customSortableId?: string\n  forceRender?: boolean\n  infiniteScrollImmediate?: boolean\n  infiniteScrollDistance?: number\n  disabled?: boolean\n  group?: string | {\n    name: string\n    pull?: boolean | string | ((to: any, from: any, dragEl: HTMLElement, evt: Event) => boolean)\n    put?: boolean | string[] | ((to: any, from: any, dragEl: HTMLElement, evt: Event) => boolean)\n    revertClone?: boolean\n  }\n  sort?: boolean\n  allowCrossInstanceDrag?: boolean\n}>(), {\n  dragBg: '#ECF5FF',\n  modelValue: () => [],\n  identity: 'id',\n  props: {\n    handle: '.sort-icon',\n    animation: 150,\n  },\n  customSortableId: '',\n  forceRender: false,\n  infiniteScrollImmediate: false,\n  infiniteScrollDistance: 20,\n  disabled: false,\n  group: undefined,\n  sort: true,\n  allowCrossInstanceDrag: false,\n})\n\nconst emits = defineEmits<{\n  (event: 'update:modelValue', data: any): any\n  (event: 'change', args: {\n    action: 'sort' | 'remove' | 'add'\n    value: any\n    prevValue?: any\n    originSortableId: string\n    targetSortableId: string\n    originData?: any\n    targetData?: any\n    originIndex?: number | string\n    targetIndex?: number | string\n  }): any\n  (event: 'start', data: any): any\n  (event: 'end', data: any): any\n  (event: 'scroll', args: {\n    scrollTop: number\n  }): any\n}>()\nconst id = `sort_${Math.random().toString(36).substr(2, 9)}`\n\nconst list = ref([])\nconst renderFlag = ref(false)\nconst sortableId = computed(() => props.customSortableId || id)\n\nonMounted(() => {\n\tinitSortable()\n})\nonUnmounted(() => {\n  destroySortable()\n})\n\nlet _sortableInstance: any = null\nlet _removing = false\nconst initSortable = () => {\n\tif (props.disabled) return\n  const sortableEl = document.querySelector(`#${sortableId.value}`)\n  if (!sortableEl) return\n\n  const sortableConfig: any = {\n    group: props.group || (props.allowCrossInstanceDrag ? 'shared' : undefined),\n    sort: props.sort,\n    onStart: (event = {}) => {\n      const { target, oldIndex } = event\n      emits('start', event)\n      if (target?.children?.[oldIndex]) {\n        target.children[oldIndex].style.background = props.dragBg\n      }\n    },\n    onEnd: (event = {}) => {\n      const { from = {}, to = {}, target, newIndex: targetIndex, oldIndex: originIndex } = event\n      emits('end', event)\n      if (target?.children?.[targetIndex])\n        target.children[targetIndex].style.background = 'transparent'\n\n      if (from === to && targetIndex !== originIndex) {\n        if (_removing) return _removing = false\n        const value = [...list.value]\n        const prevValue = JSON.parse(JSON.stringify(value))\n        const originData = value.splice(originIndex, 1)[0]\n        const targetData = value[targetIndex]\n        value.splice(targetIndex, 0, originData)\n        list.value = value\n        emits('update:modelValue', value)\n        emits('change', {\n          action: 'sort',\n          prevValue,\n          value,\n          originSortableId: from.id,\n          targetSortableId: to.id,\n          originData,\n          targetData,\n          originIndex,\n          targetIndex,\n        })\n      }\n    },\n    onAdd: (event = {}) => {\n      const { from = {}, to = {}, target, newIndex: targetIndex, oldIndex: originIndex, item } = event\n      if (target?.children?.[targetIndex])\n        target.children[targetIndex].style.background = 'transparent'\n\n      const value = [...list.value]\n      const newItem = JSON.parse(item.dataset.sortableData || '{}')\n      value.splice(targetIndex, 0, newItem)\n      list.value = value\n      emits('update:modelValue', value)\n      emits('change', {\n        action: 'add',\n        value,\n        originSortableId: from.id,\n        targetSortableId: to.id,\n        originIndex,\n        targetIndex,\n        newItem,\n      })\n    },\n    onRemove: (event = {}) => {\n      const { from = {}, to = {}, target, newIndex: targetIndex, oldIndex: originIndex } = event\n      if (target?.children?.[targetIndex])\n        target.children[targetIndex].style.background = 'transparent'\n\n      const value = [...list.value]\n      const removedItem = value.splice(originIndex, 1)[0]\n      list.value = value\n      _removing = true\n      emits('update:modelValue', value)\n      emits('change', {\n        action: 'remove',\n        value,\n        originSortableId: from.id,\n        targetSortableId: to.id,\n        originIndex,\n        targetIndex,\n        removedItem,\n      })\n    },\n    ...props.props,\n  }\n\n  _sortableInstance = Sortable.create(sortableEl, sortableConfig)\n}\nconst destroySortable = () => {\n  if (_sortableInstance) {\n    _sortableInstance.destroy()\n \t \t_sortableInstance = null\n  }\n}\nlet _scrollTop = 0\nconst handleScroll = (event) => {\n  const sortableEl = document.querySelector(`#${sortableId.value}`)\n  if (sortableEl)\n    _scrollTop = sortableEl?.scrollTop || 0\n  emits('scroll', { scrollTop: _scrollTop })\n}\n\nconst rerender = async () => {\n\tdestroySortable()\n\tlist.value = []\n\trenderFlag.value = true\n\tawait nextTick()\n\trenderFlag.value = false\n\tawait nextTick()\n  list.value = [...props.modelValue]\n\tawait nextTick()\n\tinitSortable()\n}\nwatch(() => props.modelValue, async () => {\n  const { forceRender = false } = props\n  if (forceRender) {\n    // 强制重新渲染，修复部分移动分组问题\n\t\tawait rerender()\n  }\n  list.value = [...props.modelValue]\n  if (forceRender) {\n    // 强制重新渲染后恢复滚动位置\n    await nextTick()\n  \tconst sortableEl = document.querySelector(`#${sortableId.value}`)\n    if (sortableEl)\n      sortableEl.scrollTop = _scrollTop\n  }\n}, { immediate: true, deep: true })\nwatch(() => props.disabled, async (val) => {\n\trerender()\n})\n\ndefineExpose({\n\trerender\n})\n</script>\n\n<template>\n  <div\n    v-if=\"!renderFlag\"\n    :id=\"sortableId\"\n    v-infinite-scroll=\"handleScroll\"\n    :infinite-scroll-immediate=\"infiniteScrollImmediate\"\n    :infinite-scroll-distance=\"infiniteScrollDistance\"\n  >\n    <slot name=\"header\" />\n    <template v-for=\"(item, index) in list\" :key=\"item[identity] || index\">\n      <div :data-sortable-data=\"JSON.stringify(item)\">\n        <slot name=\"item\" :item=\"item\" :index=\"index\" />\n      </div>\n    </template>\n    <slot name=\"footer\" />\n  </div>\n</template>\n\n<style>\n\n</style>\n"
  },
  {
    "path": "web/console/src/components/SvgIcon/index.vue",
    "content": "<script setup lang=\"ts\" name=\"SvgIcon\">\nimport { computed } from 'vue'\n\ninterface SvgProps {\n  name: string // 图标的名称 ==> 必传\n  prefix?: string // 图标的前缀 ==> 非必传（默认为\"icon\"）\n  width?: string\n  height?: string\n  color?: string\n}\n\n// 接收父组件参数并设置默认值\nconst props = withDefaults(defineProps<SvgProps>(), {\n  prefix: 'icon',\n  width: '20px',\n  height: '20px',\n  color: '',\n})\n\nconst symbolId = computed(() => `#${props.prefix}-${props.name}`)\n</script>\n\n<template>\n  <svg :style=\"{ width, height, fill: color, stroke: color }\" aria-hidden=\"true\">\n    <use :xlink:href=\"symbolId\" :fill=\"color\" />\n  </svg>\n</template>\n\n<style scoped>\nsvg {\n width: 1em;\n height: 1em;\n overflow: hidden;\n vertical-align: -0.15em;\n fill: currentColor;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/TablePlus/create-slots.ts",
    "content": "import { defineComponent } from 'vue'\ntype CallFun = (vnodeEl: HTMLElement) => void\ntype Funs = Record<'mountedCallFun' | 'updatedCallFun' | 'unmountedCallFun', CallFun>\nexport default ({ mountedCallFun, updatedCallFun, unmountedCallFun }: Funs) => {\n  return defineComponent({\n    props: ['vnode'],\n    setup(props, ctx) {\n    },\n    mounted() {\n      mountedCallFun(this.$el)\n    },\n    render(props: any, ctx: any) {\n      return props.vnode\n    },\n  })\n}\n"
  },
  {
    "path": "web/console/src/components/TablePlus/index.vue",
    "content": "<template>\n\t<!-- 继承属性 -->\n\t<ElTable ref=\"tableRef\" v-loading=\"loading\" v-bind=\"{ ...$attrs }\">\n\t\t<ElTableColumn v-if=\"sortable\" width=\"40\">\n\t\t\t<div class=\"pr-3 sort-icon cursor-move\">\n\t\t\t\t<SvgIcon name=\"drag\" width=\"20px\" height=\"28px\" color=\"#C7C7C7\" />\n\t\t\t</div>\n\t\t</ElTableColumn>\n\t\t<visibleSlots :vnode=\"showSlots\" />\n\t\t<ElTableColumn v-if=\"allFieldList.length\" class-name=\"table-setting\" prop=\"system_setting\" label=\"\" width=\"20\"\n\t\t\talign=\"center\" fixed=\"right\">\n\t\t\t<template #header=\"scope\">\n\t\t\t\t<div class=\"cursor-pointer\" @click=\"handleSetting\">\n\t\t\t\t\t<el-icon>\n\t\t\t\t\t\t<Setting />\n\t\t\t\t\t</el-icon>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</ElTableColumn>\n\t\t<template v-if=\"$slots.empty\" #empty>\n\t\t\t<slot name=\"empty\" />\n\t\t</template>\n\t</ElTable>\n\n\t<Pagination v-if=\"pagination\" layout=\"sizes, prev, pager, next, jumper\" :page=\"page\" :page-size=\"limit\" :total=\"total\"\n\t\t@size-change=\"onSizeChange\" @current-change=\"onCurrentChange\" />\n\n\t<el-dialog v-model=\"showFieldVisible\" title=\"列表显示设置\" width=\"660px\">\n\t\t<div class=\"flex border-b pb-4\" style=\"height: 350px;\">\n\t\t\t<div class=\"flex-1 flex flex-col overflow-y-auto\">\n\t\t\t\t<div class=\"flex-none text-sm mb-3\">\n\t\t\t\t\t<span class=\"text-[#182B50]\">\n\t\t\t\t\t\t需显示的字段\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"text-[#182B5066]\">\n\t\t\t\t\t\t（最多展示{{ MAX_SHOW_NUM }}个）\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"flex-1 overflow-y-auto\">\n\t\t\t\t\t<div class=\"el-checkbox-group\">\n\t\t\t\t\t\t<template v-for=\"field in allFieldList\" :key=\"field.field_key\">\n\t\t\t\t\t\t\t<el-checkbox\n\t\t\t\t\t\t\t\t:disabled=\"fixedFields.includes(field.field_key) || (showFieldList.length === 1 && field.field_key === showFieldList[0].field_key)\"\n\t\t\t\t\t\t\t\t:checked=\"Boolean(showFieldList.find(item => item.field_key === field.field_key))\"\n\t\t\t\t\t\t\t\t:value=\"field.field_key\" @change=\"handleFieldChange($event, field)\">\n\t\t\t\t\t\t\t\t{{ field.field_name }}\n\t\t\t\t\t\t\t</el-checkbox>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"border-l mx-4\" />\n\t\t\t<div class=\"flex-1 flex flex-col\">\n\t\t\t\t<div class=\"flex-none text-sm mb-3\">\n\t\t\t\t\t<span class=\"text-[#182B50]\">\n\t\t\t\t\t\t显示顺序\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"text-[#182B5066]\">\n\t\t\t\t\t\t（拖动分组调整分组顺序）\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<Sortable v-model=\"showFieldList\" identity=\"id\" class=\"flex-1 w-full flex flex-col gap-1 overflow-y-auto\">\n\t\t\t\t\t<template #item=\"{ item, index }\">\n\t\t\t\t\t\t<div class=\"flex-none h-8 flex items-center\">\n\t\t\t\t\t\t\t<div class=\"pr-3 sort-icon cursor-move\">\n\t\t\t\t\t\t\t\t<svg-icon name=\"drag\" width=\"16px\" height=\"32px\" color=\"#a1a5af\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex-1 text-sm text-[#182B50] truncate\">\n\t\t\t\t\t\t\t\t{{ item.field_name }}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</Sortable>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<template #footer>\n\t\t\t<el-button size=\"large\" type=\"default\" @click=\"handleCancel\">\n\t\t\t\t取消\n\t\t\t</el-button>\n\t\t\t<el-button v-debounce size=\"large\" type=\"primary\" @click=\"handleConfirm\">\n\t\t\t\t保存\n\t\t\t</el-button>\n\t\t</template>\n\t</el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { h, nextTick, onMounted, ref, useSlots, onUnmounted, watch, getCurrentInstance, computed } from 'vue'\nimport { Setting } from '@element-plus/icons-vue'\nimport { ElTableColumn } from 'element-plus'\n\nimport Sortable from 'sortablejs'\nimport createSlots from './create-slots'\n\nconst { proxy } = getCurrentInstance()\nconst tableData = computed(() => proxy.$attrs.data || [])\nconst props = withDefaults(defineProps<{\n  type?: string\n  page?: number\n  limit?: number\n  total?: number\n  prefix?: string\n  pagination?: boolean\n  // 固定显示那几个字段\n  fixedFields?: any[]\n  hiddenProps?: any[]\n  // 需要插入到那个后面\n\tinsertIndex?: number\n\tloading?: boolean\n\tsortable?: boolean\n}>(), {\n  type: '',\n  page: 1,\n  limit: 10,\n  total: 0,\n  prefix: '',\n  fixedFields: () => [],\n  hiddenProps: () => [],\n  pagination: true,\n\tloading: false,\n\tsortable: false,\n})\n\nconst emits = defineEmits<{\n  (event: 'pageSizeChange', data: any): any\n\t(event: 'pageCurrentChange', data: any): any\n\t(event: 'sortableChange', data: any): any\n\t(event: 'update:data', data: any): any\n}>()\n\nconst MAX_SHOW_NUM = 30\n\nconst tableRef = ref()\n\nconst slots = useSlots()\n\nconst showSlots = ref([])\nconst visibleSlots = createSlots({\n  mountedCallFun() {\n\n  },\n  updatedCallFun() {\n\n  },\n  unmountedCallFun() {\n\n  },\n})\n\nconst showFieldVisible = ref(false)\nconst allFieldList = ref([])\nconst showFieldList = ref([])\n\nconst onSizeChange = (...args) => {\n  emits('pageSizeChange', ...args)\n}\nconst onCurrentChange = (...args) => {\n  emits('pageCurrentChange', ...args)\n}\n\nconst createColumnVNode = (column) => {\n  return h(ElTableColumn, {\n    prop: column.prop,\n    label: column.label,\n    showOverflowTooltip: true,\n    formatter: (row, column, cellValue) => {\n      return cellValue || '--'\n    },\n  })\n}\n\nconst handleSetting = () => {\n  showFieldVisible.value = true\n}\n\nconst handleFieldChange = (check: boolean, item: any) => {\n  if (check)\n    showFieldList.value.push({ ...item })\n  else\n    showFieldList.value = showFieldList.value.filter(i => i.id !== item.id)\n}\n\nconst loadUserMemoryFieldList = async () => {\n  const form_relation_id = props.type.split('user_memory_list_')[1] || 0\n  let data = []\n  let use_key_list = []\n  data = []\n  use_key_list = []\n  const defaultSlotList = slots.default()\n  allFieldList.value = data\n  if (props.fixedFields && props.fixedFields.length) {\n    props.fixedFields.forEach((key = '') => {\n      if (!use_key_list.includes(key))\n        use_key_list.unshift(key)\n    })\n  }\n  if (use_key_list && use_key_list.length)\n    showFieldList.value = use_key_list.map(key => data.find(item => item.field_key === key)).filter(item => item).map(item => ({ ...item }))\n  else\n    showFieldList.value = data.map(item => ({ ...item }))\n\n  const list = showFieldList.value.map((item) => {\n    return createColumnVNode({ prop: props.prefix + item.field_key, label: item.field_name })\n  })\n\n  let newSlotList = []\n  if (Number(props.insertIndex) > -1) {\n    const prevSlotList = defaultSlotList.slice(0, props.insertIndex)\n    const nextSlotList = defaultSlotList.slice(props.insertIndex)\n    newSlotList = [...prevSlotList, ...list, ...nextSlotList]\n  }\n  else {\n    newSlotList = [...list, ...defaultSlotList]\n  }\n  if (props.hiddenProps && props.hiddenProps.length)\n    newSlotList = newSlotList.filter(({ props: { prop: _prop = '' } = {} }: any = {}) => !props.hiddenProps.includes(_prop))\n  showSlots.value = newSlotList\n}\nconst handleCancel = () => {\n  showFieldVisible.value = false\n}\nconst handleConfirm = async () => {\n  ElMessage.success('已设置')\n  showFieldVisible.value = false\n}\n\nlet sortableInstance: any = null\nconst initSortable = () => {\n\tif (!props.sortable || !tableData.value.length) return\n\tconst sortable_el = tableRef.value.$el.querySelector('.el-table__body tbody')\n\tsortableInstance = Sortable.create(sortable_el, {\n\t\tonStart: (event = {}) => {\n\t\t\tconst { target, oldIndex } = event\n\t\t\ttarget.children[oldIndex].style.background = '#ECF5FF'\n\t\t},\n\t\tonEnd: async (event = {}) => {\n\t\t\tconst { from = {}, to = {}, target, newIndex: targetIndex, oldIndex: originIndex } = event\n\t\t\tif (target.children && target.children[targetIndex])\n\t\t\t\ttarget.children[targetIndex].style.background = 'transparent'\n\t\t\tif (targetIndex === originIndex) return\n\t\t\tconst list = JSON.parse(JSON.stringify(tableData.value))\n\t\t\tconst originData = list.splice(originIndex, 1)[0]\n\t\t\tlist.splice(targetIndex, 0, originData)\n\t\t\temits('update:data', [])\n\t\t\tawait nextTick()\n\t\t\temits('update:data', list)\n\t\t\temits('sortableChange', { data: list, targetIndex, originIndex })\n\t\t},\n\t})\n}\nconst destroySortable = () => {\n\tif (sortableInstance) {\n\t\tsortableInstance.destroy()\n\t\tsortableInstance = null\n\t}\n}\n\nonMounted(() => {\n  nextTick(() => {\n    if (/^user_memory_list/im.test(props.type)) {\n      loadUserMemoryFieldList()\n    }\n    else {\n      const slotList = slots.default()\n      showSlots.value = slotList\n    }\n  })\n})\nonUnmounted(() => {\n  destroySortable()\n})\n\nwatch(() => tableData.value, async (val) => {\n\tdestroySortable()\n\tawait nextTick()\n\tinitSortable()\n}, {\n\tdeep: true,\n\timmediate: true,\n})\ndefineExpose({\n  toggleRowSelection(...args) {\n    tableRef.value.toggleRowSelection(...args)\n  },\n  refresh: () => {\n    loadUserMemoryFieldList()\n  },\n})\n</script>\n\n<style>\n.table-setting .cell{\n\tpadding: 0 6px 0 0;\n}\n</style>\n\n<style scoped>\n::v-deep(.el-checkbox-group) {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n}\n::v-deep(.el-checkbox-group .el-checkbox) {\n\tflex: 0 0 50%;\n  margin-right: 0;\n\toverflow: hidden;\n}\n::v-deep(.el-checkbox-group .el-checkbox__label) {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/TipConfirm/index.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    header-class=\"hidden\"\n    width=\"520px\"\n    :style=\"{\n      '--el-dialog-border-radius': '16px',\n    }\"\n    :close-on-click-modal=\"false\"\n    :show-close=\"false\"\n    destroy-on-close\n    append-to-body\n    center\n    align-center\n  >\n    <header class=\"p-2 flex items-center justify-between\">\n      <h1 class=\"text-lg font-semibold text-[#1D1E1F]\">{{ title }}</h1>\n      <ElIcon class=\"font-bold\" :size=\"20\" color=\"#9A9A9A\" @click=\"close\">\n        <Close />\n      </ElIcon>\n    </header>\n    <section class=\"p-2 text-base text-[#535456]\">\n      {{ content }}\n    </section>\n    <template #footer>\n      <div class=\"flex items-center justify-center my-2\">\n        <ElButton v-if=\"showCancelButton\" size=\"large\" @click=\"close\">\n          {{ cancelButtonText }}\n        </ElButton>\n        <ElButton v-if=\"showConfirmButton\" class=\"!px-8\" type=\"primary\" size=\"large\" @click=\"close\">\n          {{ confirmButtonText }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { Close } from '@element-plus/icons-vue';\n\nimport { ref, onMounted, onUnmounted } from 'vue';\n\nwithDefaults(\n  defineProps<{\n    title: string\n    content: string\n    confirmButtonText: string\n    showConfirmButton: boolean\n    cancelButtonText: string\n    showCancelButton: boolean\n  }>(),\n  {\n    title: '',\n    content: '',\n    confirmButtonText: window.$t('action_confirm'),\n    showConfirmButton: true,\n    cancelButtonText: window.$t('action_cancel'),\n    showCancelButton: true,\n  }\n)\n\nconst visible = ref(false)\n\nonMounted(() => {})\nonUnmounted(() => {})\n\nconst open = async () => {\n  visible.value = true\n}\nconst close = () => {\n  visible.value = false\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/components/TipConfirm/setup.ts",
    "content": "import { createApp, h, ref, onMounted } from 'vue'\nimport TipConfirmComponent from './index.vue'\n\nexport default function ({\n  title,\n  content,\n  confirmButtonText = window.$t('action.confirm'),\n  cancelButtonText = window.$t('action.cancel'),\n  showConfirmButton = true,\n  showCancelButton = true,\n}: {\n  title: string\n  content: string\n  confirmButtonText: string\n  showConfirmButton?: boolean\n  cancelButtonText?: string\n  showCancelButton?: boolean\n}): {\n  open: () => void\n  close: () => void\n  destory: () => void\n} {\n  try {\n    const container = document.createElement('div')\n    document.body.appendChild(container)\n    let instance: any = {}\n    const app = createApp({\n      setup() {\n        const component_instance = ref(null)\n        onMounted(() => {\n          if (component_instance.value) instance = component_instance.value\n        })\n        return () =>\n          h(TipConfirmComponent, {\n            ref: component_instance,\n            title,\n            content,\n            confirmButtonText,\n            showConfirmButton,\n            cancelButtonText,\n            showCancelButton,\n          })\n      },\n    })\n    app.config.globalProperties.$t = window.$t\n    app.mount(container)\n    instance.destory = () => {\n      app.unmount()\n      container.remove()\n    }\n    return instance\n  } catch (error) {\n    console.error(error)\n    return {\n      open: () => {},\n      close: () => {},\n      destory: () => {},\n    }\n  }\n}\n"
  },
  {
    "path": "web/console/src/components/UEditor/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\n\nconst iframeRef = ref()\n\nconst ready = ref(false)\nconst getReady = () => new Promise((resolve) => {\n\tif (ready.value) return resolve()\n\twindow.addEventListener('message', (e) => {\n\t\tconst data = e.data || {}\n\t\tconst action = data.action || ''\n\t\tif (action === 'ueditor-ready') {\n\t\t\tready.value = true\n\t\t\tresolve()\n\t\t}\n\t})\n})\n\nonMounted(() => {\n\twindow.addEventListener('message', (e) => {\n\t\tconst data = e.data || {}\n\t\tconst action = data.action || ''\n\t\tif (action === 'ueditor-ready') ready.value = true\n\t})\n})\n\ndefineExpose({\n\tsetValue: async (value: string) => {\n\t\tawait getReady()\n\t\tiframeRef.value.contentWindow.postMessage({ action: 'setValue', value }, '*')\n\t},\n\tgetHtml: async () => {\n\t\tawait getReady()\n\t\treturn new Promise((resolve) => {\n\t\t\tiframeRef.value.contentWindow.postMessage({ action: 'getHtml' }, '*')\n\t\t\twindow.addEventListener('message', (e) => {\n\t\t\t\tconst data = e.data || {}\n\t\t\t\tconst action = data.action || ''\n\t\t\t\tif (action === 'getHtml') resolve(data.value)\n\t\t\t})\n\t\t})\n\t}\n})\n</script>\n\n<template>\n\t<iframe ref=\"iframeRef\" class=\"w-full h-full\" :src=\"$getRealPath({ url: '/UEditor/index.html' })\" />\n</template>\n\n<style scoped lang=\"scss\"></style>"
  },
  {
    "path": "web/console/src/components/Upload/certificate.vue",
    "content": "<template>\n\t<div>\n\t\t<ElUpload v-if=\"!file_list.length\" action=\"#\" :limit=\"1\" :on-change=\"onFileChange\" :auto-upload=\"false\"\n\t\t\t:show-file-list=\"false\" accept=\".pem\" :disabled=\"uploading\">\n\t\t\t<ElButton class=\"!border-none !outline-none\" type=\"primary\" plain :loading=\"uploading\">{{ $t('action_select_file') }}</ElButton>\n\t\t</ElUpload>\n\t\t<ul v-else>\n\t\t\t<li v-for=\"(item, index) in file_list\" :key=\"item.id\" class=\"flex items-center gap-2 text-[#9A9A9A] text-sm\">\n\t\t\t\t<SvgIcon name=\"certificate\" width=\"16\" />\n\t\t\t\t<span>{{ item.name || '--' }}</span>\n\t\t\t\t<ElIcon :size=\"16\" class=\"cursor-pointer text-[#333]\" @click=\"onFileDelete({ data: item, index })\">\n\t\t\t\t\t<Delete />\n\t\t\t\t</ElIcon>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Delete } from '@element-plus/icons-vue';\n\nimport { ref, nextTick, watch } from 'vue';\nimport uploadApi from '@/api/modules/upload';\n\nconst props = defineProps<{\n\tmodelValue: string\n\tfileName: string\n}>()\n\nconst emits = defineEmits(['change', 'update:modelValue', 'update:fileName'])\n\nconst file_list = ref([])\nconst uploading = ref(false)\n\nasync function uploadFile(dataFile: File) {\n\tuploading.value = true\n\ttry {\n\t\tconst res = await uploadApi.upload(dataFile).finally(() => {\n\t\t\tuploading.value = false\n\t\t})\n\t\treturn res.data\n\t}\n\tcatch (error) {\n\t\tuploading.value = false\n\t\treturn {}\n\t}\n}\nasync function onFileChange(file: any, fileList: any) {\n\t// if (!(file.name.endsWith('.pem') || file.name.endsWith('.crt'))) {\n\tif (!file.name.endsWith('.pem')) {\n\t\tElMessage.warning(window.$t('upload_pem_file_tip'))\n\t\treturn\n\t}\n\tconst data = await uploadFile(file.raw)\n\tObject.assign(file, data)\n\tfile_list.value = [file]\n\temits('update:modelValue', file.key)\n\temits('update:fileName', file.name)\n\tawait nextTick()\n\temits('change', { fileList: file_list.value })\n}\nfunction onFileDelete({ data, index }: { data: any, index: number }) {\n\tfile_list.value.splice(index, 1)\n}\n\nwatch(() => props.modelValue, () => {\n\tif (props.modelValue) {\n\t\tfile_list.value = [{\n\t\t\tname: props.fileName,\n\t\t\tkey: props.modelValue,\n\t\t}]\n\t}\n}, {\n\timmediate: true\n})\nwatch(() => props.fileName, () => {\n\tif (props.modelValue) {\n\t\tfile_list.value = [{\n\t\t\tname: props.fileName,\n\t\t\tkey: props.modelValue,\n\t\t}]\n\t}\n}, {\n\timmediate: true\n})\n</script>\n\n<style scoped>\n\n</style>\n\n"
  },
  {
    "path": "web/console/src/components/Upload/image.vue",
    "content": "<template>\n  <div\n    class=\"w-[50px] h-[50px] rounded overflow-hidden relative cursor-pointer group\"\n    :class=\"[disabled ? 'cursor-not-allowed' : '']\"\n    @click.stop=\"onSelectFile\"\n  >\n    <slot>\n      <ElButton v-if=\"showText\" type=\"text\">{{ $t(text) }}</ElButton>\n      <template v-else>\n        <img v-if=\"modelValue\" class=\"w-full h-full object-cover\" :src=\"modelValue\" alt=\"logo\" />\n        <div v-else class=\"w-full h-full flex items-center justify-center border rounded upload-image-placeholder\">\n          <ElIcon size=\"16\" color=\"#9A9A9A\">\n            <Plus />\n          </ElIcon>\n        </div>\n        <div\n          class=\"hidden group-hover:flex absolute top-0 right-0 bottom-0 left-0 bg-black bg-opacity-40 items-center justify-center gap-6 text-xs text-white\"\n        >\n          <slot name=\"mask-text\">\n            {{ $t(text) }}\n          </slot>\n        </div>\n      </template>\n    </slot>\n    <CropperDialog\n      ref=\"cropper_ref\"\n      action=\"python\"\n      :cropper-disabled=\"cropperDisabled\"\n      :allow-type-list=\"allowTypeList\"\n      @confirm=\"onConfirm\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue';\nimport { ref } from 'vue';\nimport CropperDialog from '@/components/CropperDialog/index.vue';\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: string\n    text?: string\n    showText?: boolean\n    cropperDisabled?: boolean\n    allowTypeList?: string[]\n    disabled?: boolean\n  }>(),\n  {\n    modelValue: '',\n    text: 'action_replace',\n    showText: false,\n    cropperDisabled: false,\n    disabled: false,\n  }\n)\nconst emits = defineEmits<{\n  (e: 'update:modelValue', data: string): void\n  (e: 'confirm', result: { url: string }): void\n}>()\n\nconst cropper_ref = ref()\n\nconst onSelectFile = () => {\n  if (props.disabled) return\n  cropper_ref.value.uploadFile()\n}\nconst onConfirm = (data: { url: string }) => {\n  emits('update:modelValue', data.url)\n  emits('confirm', { url: data.url })\n}\n</script>\n\n<style>\n.el-form-item.is-error .upload-image-placeholder {\n  border-color: #f56c6c;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/Upload/index.vue",
    "content": "<template>\n  <el-upload\n    :id=\"uuid\"\n    ref=\"uploadRef\"\n    :class=\"[hide ? 'absolute right-0 top-0' : '', full ? 'el-upload--full' : '']\"\n    :data=\"extraData\"\n    :accept=\"accept\"\n    :name=\"name\"\n    :drag=\"drag\"\n    :disabled=\"disabled\"\n    :show-file-list=\"false\"\n    :limit=\"limit\"\n    :multiple=\"multiple\"\n    :auto-upload=\"autoUpload\"\n    :on-success=\"handleFileSuccess\"\n    :on-error=\"handleFileError\"\n    :on-progress=\"handleFileProgress\"\n    :before-upload=\"handleBeforeUpload\"\n    :on-exceed=\"handleExceed\"\n    :http-request=\"httpRequest\"\n    v-bind=\"$attrs\"\n  >\n    <slot />\n  </el-upload>\n  <!-- :on-change=\"handleFileChange\" -->\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { genFileId } from 'element-plus'\nimport type { UploadFile, UploadInstance, UploadProps, UploadRawFile } from 'element-plus'\nimport { api_host } from '@/utils/config'\nimport { uploadApi } from '@/api/modules/upload'\n\nconst props = withDefaults(\n  defineProps<{\n    // .pdf, .md, markdown,.txt\n    accept: string\n    name?: string\n    // 大小为M.\n    size?: number\n    hide?: boolean\n    full?: boolean\n    drag?: boolean\n    multiple?: boolean\n    limit?: number\n    disabled?: boolean\n    autoUpload?: boolean\n    extraData?: any\n  }>(),\n  {\n    accept: '',\n    name: 'file',\n    size: 15,\n    hide: false,\n    full: false,\n    drag: false,\n    multiple: false,\n    disabled: false,\n    autoUpload: true,\n    extraData: () => ({}),\n  }\n)\nconst emits = defineEmits<{\n  (e: 'error', data: any): void\n  (e: 'success', data: { id: string; size: string; icon: string; name: string }): void\n  (e: 'before', file: File): void\n  (e: 'progress', file: any, value: number): void\n  (\n    e: 'change',\n    args?: {\n      file: any\n      fileList: any[]\n    }\n  ): void\n}>()\nconst uuid = `upload_${Math.random()}`\n\nconst uploadRef = ref<UploadInstance>()\nconst uploadingCount = ref(0)\n\nlet firstType = ''\nconst isOverLimit = (data: File) => {\n  if (!firstType) firstType = data.type\n\n  const name = data.name\n  if (!new RegExp(`(${props.accept.split(',').join('|')})$`).test(name)) {\n    ElMessage.warning(\n      window.$t('file.type_limit', {\n        accept: props.accept\n          .replace(/\\./g, '')\n          .split(',')\n          .map(item => item.toUpperCase())\n          .join('、'),\n      })\n    )\n    return true\n  }\n  if (data.size === 0) {\n    ElMessage.warning(window.$t('file.size_empty'))\n    return true\n  }\n  if (props.size && data.size / 1024 / 1024 > props.size) {\n    ElMessage.warning(window.$t('file.size_limit', { size: props.size, name }))\n    return true\n  }\n\n  uploadingCount.value++\n  return false\n}\nconst handleBeforeUpload = async (data: File) => {\n  if (isOverLimit(data)) return false\n  // data.loading = true\n  emits('before', data)\n  return true\n}\nconst handleFileProgress = async (e, data) => {\n  if (!data.vid) {\n    Object.assign(data, {\n      id: '',\n      vid: data.raw.uid,\n      name: data.raw.name,\n      url: '',\n      error_msg: '',\n      job_id: '',\n    })\n  } else emits('progress', data, e.percent.toFixed(2))\n}\n\nconst checkAllUploadsCompleted = () => {\n  uploadingCount.value--\n  if (uploadingCount.value === 0) firstType = ''\n}\nconst handleFileSuccess = (e, data) => {\n  data.loading = false\n  data.id = e.id\n  data.error_msg = e.error_msg\n  data.url = e.url\n  emits('success', data)\n  checkAllUploadsCompleted()\n}\nconst handleFileError = (e, data) => {\n  data.loading = false\n  emits('error', {\n    error_msg: '上传失败',\n  })\n  checkAllUploadsCompleted()\n}\n\nconst httpRequest = (data: any) => {\n  return uploadApi.upload(data.file).then(res => {\n    return {\n      id: res.data.id,\n      url: `${api_host}/api/preview/${res.data.preview_key || ''}`,\n      size: res.data.size,\n      name: res.data.file_name,\n      mime_type: res.data.mime_type,\n    }\n  })\n}\n\nconst handleExceed: UploadProps['onExceed'] = files => {\n  if (props.limit === 1) {\n    uploadRef.value!.clearFiles()\n    const file = files[0] as UploadRawFile\n    file.uid = genFileId()\n    uploadRef.value!.handleStart(file)\n    if (props.autoUpload) uploadRef.value!.submit()\n  } else {\n    ElMessage.warning(window.$t('file.upload_limit', { limit: props.limit }))\n  }\n}\n\ndefineExpose({\n  abort: (file: UploadFile) => uploadRef.value!.abort(file),\n  submit: () => uploadRef.value!.submit(),\n  clearFiles: () => uploadRef.value!.clearFiles(),\n  trigger() {\n    const parent = document.getElementById(uuid)\n    const input = parent?.querySelector('.el-upload__input')\n    input?.dispatchEvent(new MouseEvent('click'))\n    // input.click()\n  },\n  handleStart: (file: File) => {\n    file.uid = genFileId()\n    uploadRef.value.handleStart(file)\n  },\n  handleRemove: (...args) => {\n    uploadRef.value!.handleRemove(...args)\n  },\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.el-upload--full {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  opacity: 0;\n}\n\n::v-deep(.el-upload) {\n  width: 100%;\n  height: 100%;\n}\n::v-deep(.el-upload-dragger) {\n  width: 100%;\n  height: 100%;\n  background: transparent;\n  border: none;\n  padding: 0;\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  cursor: pointer;\n  outline: 0;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/components/UserLoginDialog/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { Close } from '@element-plus/icons-vue'\n\nimport { ref, reactive, onMounted, onUnmounted, nextTick } from 'vue'\nimport { useUserStore } from '@/stores'\nimport { generateInputRules } from '@/utils/form-rule'\nimport eventBus from '@/utils/event-bus'\nimport { RESPONSE_CODE_UNAUTHORIZED_ERROR } from '@/utils/request/code'\n\nconst user_store = useUserStore()\nconst form_ref = ref()\nconst agree_ref = ref()\nconst policy_ref = ref()\nconst visible = ref(false)\nconst form = reactive({\n\tusername: '',\n\tpassword: ''\n\t// username: 'liuzimu',\n\t// password: 'password123',\n})\n\nonMounted(() => {\n\t// visible.value = true\n\teventBus.on('user-login-open', open)\n})\nonUnmounted(() => {\n\teventBus.off('user-login-open', open)\n})\n\nconst open = async ({ data = {} } = {}) => {\n\tvisible.value = true\n\tawait nextTick()\n\tconst agree_el = agree_ref.value.$el\n\tconst agree_hook_el = form_ref.value.$el.querySelector('.agree-hook')\n\tagree_hook_el.appendChild(agree_el)\n\tconst policy_el = policy_ref.value.$el\n\tconst policy_hook_el = form_ref.value.$el.querySelector('.policy-hook')\n\tpolicy_hook_el.appendChild(policy_el)\n}\nconst close = () => {\n\tvisible.value = false\n\treset()\n}\nconst reset = () => {\n\tform.username = ''\n\tform.password = ''\n}\nconst onLogin = () => {\n\tform_ref.value.validate(async (valid) => {\n\t\tif (!valid) return\n\t\tconst { data } = await user_store.login({ data: form, hideError: true }).catch((err) => {\n\t\t\tif (err.code == RESPONSE_CODE_UNAUTHORIZED_ERROR && err.origin_message == 'unauthorized: user not found') {\n\t\t\t\tonRegister()\n\t\t\t} else ElMessage.warning(window.$t(err.message))\n\t\t\treturn Promise.reject(err)\n\t\t})\n\t\tElMessage.success(window.$t('action_login_success'))\n\t\tclose()\n\t\treset()\n\t})\n}\nconst onRegister = () => {\n\tform_ref.value.validate(async (valid) => {\n\t\tif (!valid) return\n\t\tawait user_store.register({ data: form })\n\t\t// ElMessage.success(window.$t('action_register_success'))\n\t\tElMessage.success(window.$t('action_login_success'))\n\t\tclose()\n\t\treset()\n\t})\n}\nconst onForgetPassword = () => {\n\tElMessage.warning(window.$t('feature_coming_soon'))\n}\nconst onAgree = () => {\n\tElMessage.warning(window.$t('feature_coming_soon'))\n}\nconst onPolicy = () => {\n\tElMessage.warning(window.$t('feature_coming_soon'))\n}\n\ndefineExpose({\n\topen,\n\tclose,\n\treset\n})\n</script>\n\n<template>\n\t<ElDialog\n\t\theader-class=\"hidden\"\n\t\twidth=\"504px\"\n\t\t:style=\"{\n\t\t\t'--el-dialog-border-radius': '16px',\n      backgroundImage: `url('/images/login_bg.png')`,\n\t\t\tbackgroundRepeat: 'no-repeat',\n\t\t\tbackgroundPosition: 'center',\n\t\t\tbackgroundSize: 'cover',\n    }\"\n\t\t:close-on-click-modal=\"false\"\n\t\t:show-close=\"false\"\n\t\tdestroy-on-close\n\t\tappend-to-body\n\t\tcenter\n\t\tv-model=\"visible\"\n\t\t@close=\"close\"\n\t>\n    <div class=\"pt-8 pb-4 relative\">\n\t\t\t<ElIcon class=\"absolute top-2 right-1\" :size=\"20\" color=\"#9A9A9A\" @click=\"close\">\n\t\t\t\t<Close />\n\t\t\t</ElIcon>\n\t\t\t<h4 class=\"text-3xl text-[#1D1E1F] font-bold text-center mb-3\">\n\t\t\t\t{{ $t('login.password_login') }}\n      </h4>\n      <p class=\"text-sm text-[#9A9A9A] text-center\">{{ $t('login.unregistered_account_desc') }}</p>\n\t\t\t<ElForm ref=\"form_ref\" class=\"mt-8\" :model=\"form\" label-position=\"top\">\n\t\t\t\t<ElFormItem prop=\"username\" :rules=\"generateInputRules({ message: 'login.account_placeholder' })\">\n\t\t\t\t\t<template #label>\n\t\t\t\t\t\t<span class=\"text-[#1D1E1F]\">{{ $t('account') }}</span>\n\t\t\t\t\t</template>\n\t\t\t\t\t<ElInput style=\"--el-input-bg-color: #F1F2F3; --el-input-border-color: transparent; --el-input-height: 44px;\" v-model=\"form.username\" size=\"large\" :placeholder=\"$t('login.account_placeholder')\" clearable />\n\t\t\t\t</ElFormItem>\n\t\t\t\t<ElFormItem class=\"relative\" prop=\"password\" :rules=\"generateInputRules({ message: 'login.password_placeholder' })\">\n\t\t\t\t\t<template #label>\n\t\t\t\t\t\t<span class=\"text-[#1D1E1F]\">{{ $t('password') }}</span>\n\t\t\t\t\t</template>\n\t\t\t\t\t<ElInput style=\"--el-input-bg-color: #F1F2F3; --el-input-border-color: transparent; --el-input-height: 44px;\" v-model=\"form.password\" size=\"large\" type=\"password\" show-password clearable\n\t\t\t\t\t\t:placeholder=\"$t('login.password_placeholder')\" />\n\t\t\t\t\t<ElButton type=\"text\" class=\"text-[#9A9A9A] bg-transparent text-sm absolute right-0 -bottom-8\" @click=\"onForgetPassword\">\n\t\t\t\t\t\t{{ $t('login.forget_password') }}\n\t\t\t\t\t</ElButton>\n\t\t\t\t</ElFormItem>\n        <ElButton type=\"primary\" round v-debounce class=\"w-full mt-8 !h-10\" :disabled=\"!form.username || !form.password\" @click=\"onLogin\">\n          {{ $t('action_login') }}\n        </ElButton>\n\t\t\t\t<div class=\"text-xs text-[#9A9A9A] text-center mt-5\" v-html=\"$t('login.agree_and_policy', {\n\t\t\t\t\tagree: `<span class=\\'agree-hook\\'></span>`,\n\t\t\t\t\tpolicy: `<span class=\\'policy-hook\\'></span>`,\n\t\t\t\t})\" />\n\t\t\t\t<ElButton ref=\"agree_ref\" type=\"text\" class=\"text-[#4F5052] text-xs bg-transparent mx-1 -mt-0.5 underline underline-offset-4\" @click=\"onAgree\">\n\t\t\t\t\t{{ $t('login.agree') }}\n\t\t\t\t</ElButton>\n\t\t\t\t<ElButton ref=\"policy_ref\" type=\"text\" class=\"text-[#4F5052] text-xs bg-transparent mx-1 -mt-0.5 underline underline-offset-4\" @click=\"onPolicy\">\n\t\t\t\t\t{{ $t('login.policy') }}\n\t\t\t\t</ElButton>\n\t\t\t</ElForm>\n    </div>\n\t</ElDialog>\n</template>\n\n<style scoped lang=\"scss\">\n</style>\n"
  },
  {
    "path": "web/console/src/components/UserLoginDialog/setup.ts",
    "content": "import { createApp, h, ref, onMounted } from 'vue'\nimport LoginDialogComponent from './index.vue'\n\nexport default function () {\n\ttry {\n\t\tconst container = document.createElement('div')\n\t\tdocument.body.appendChild(container)\n\t\tlet instance = {}\n\t\tconst app = createApp({\n\t\t\tsetup() {\n\t\t\t\tconst component_instance = ref(null)\n\t\t\t\tonMounted(() => {\n\t\t\t\t\tif (component_instance.value) instance = component_instance.value\n\t\t\t\t})\n\t\t\t\treturn () => h(LoginDialogComponent, { ref: component_instance })\n\t\t\t}\n\t\t})\n\t\tapp.config.globalProperties.$t = window.$t\n\t\tapp.mount(container)\n\t\tinstance.destroy = () => {\n\t\t\tapp.unmount()\n\t\t\tcontainer.remove()\n\t\t}\n\t\treturn instance\n\t} catch (error) {\n\t\tconsole.error(error)\n\t\treturn {}\n\t}\n}\n"
  },
  {
    "path": "web/console/src/components/VerificationCodeInput/index.vue",
    "content": "<template>\n  <ElInput\n    v-model=\"input_value\"\n    :style=\"{ '--el-input-height': height }\"\n    :clearable=\"clearable\"\n    :size=\"size\"\n    :disabled=\"disabled\"\n    :maxlength=\"maxlength\"\n    :placeholder=\"$t(placeholder)\"\n    @change=\"onChange\"\n  >\n    <template #append>\n      <ElButton class=\"!bg-transparent\" type=\"primary\" text :disabled=\"send_disabled\" @click=\"onSend\">\n        <span :class=\"[send_disabled ? 'cursor-not-allowed' : 'cursor-pointer hover:opacity-70 text-[#3664EF]']\">\n          {{ send_countdown > 0 ? `${$t('action_send_success')}(${send_countdown}s)` : $t('get_verification_code') }}\n        </span>\n      </ElButton>\n    </template>\n  </ElInput>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onUnmounted, ref } from 'vue';\nimport api from '@/apis';\nimport { commonApi } from '@/api';\n\nconst props = withDefaults(\n  defineProps<{\n    account?: string\n    accountType?: 'email' | 'mobile'\n    modelValue?: string\n    bgColor?: string\n    height?: string\n    size?: 'large' | 'default' | 'small'\n    clearable?: boolean\n    disabled?: boolean\n    countdown?: number\n    maxlength?: number\n    placeholder?: string\n  }>(),\n  {\n    account: '',\n    accountType: 'mobile',\n    modelValue: '',\n    bgColor: '#F1F2F3',\n    height: '44px',\n    size: 'large',\n    clearable: true,\n    disabled: false,\n    countdown: 60,\n    maxlength: 4,\n    placeholder: 'verification_code_placeholder',\n  }\n)\nconst emits = defineEmits<{\n  (e: 'update:modelValue', value: string): void\n}>()\n\nconst input_value = ref(props.modelValue)\nconst send_countdown = ref(0)\n\nconst send_disabled = computed(() => {\n  return props.disabled || !props.account || send_countdown.value > 0\n})\nconst real_account_type = computed(() => {\n  return props.accountType || /^(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\\d{8}$/.test(props.account)\n    ? 'mobile'\n    : 'email'\n})\n\nonUnmounted(() => {\n  if (timer) clearInterval(timer)\n})\n\nconst onChange = (value: string) => {\n  emits('update:modelValue', value)\n}\n\n// function isChinaMobile(phone: string): boolean {\n//   // 清洗并处理手机号\n//   let cleaned = phone.replace(/\\D/g, '') // 去除非数字字符\n//   if (cleaned.length > 11)\n//     cleaned = cleaned.slice(-11) // 处理带国际区号的情况\n\n//   // 基础验证\n//   if (cleaned.length !== 11 || !cleaned.startsWith('1'))\n//     return false\n\n//   // 中国移动号段正则（2023年最新版）\n//   const mobilePattern = /^1(3[5-9]|34[0-8]|440|4(7|8[0-9])|5[0-27-9]|7[28]|8[2-47-8]|9[58]|20)/\n//   return mobilePattern.test(cleaned)\n// }\n\nlet timer: NodeJS.Timeout | null = null\nconst onSend = async () => {\n  if (!props.account) {\n    ElMessage.warning(window.$t(`login.${real_account_type.value}_placeholder`))\n    return\n  }\n  if (real_account_type.value !== 'mobile') {\n    ElMessage.warning(window.$t('form_mobile_validator'))\n    return\n  }\n\n  if (props.accountType === 'mobile') {\n    await api.qyy.send_code({\n      data: {\n        mobile: props.account,\n        source: 'companyibos',\n      },\n    })\n  } else {\n    await commonApi.sendEmailCode({ email: props.account })\n  }\n  send_countdown.value = props.countdown\n  ElMessage.success(window.$t('action_send_success'))\n  timer = setInterval(() => {\n    send_countdown.value--\n    if (send_countdown.value < 0) clearInterval(timer)\n  }, 1000)\n}\nconst reset = () => {\n  if (timer) clearInterval(timer)\n  input_value.value = ''\n  send_countdown.value = 0\n}\nconst validateCode = async () => {\n  return commonApi\n    .verifycode({\n      mobile: props.account,\n      verifycode: input_value.value,\n      type: '1',\n    })\n    .catch(() => Promise.resolve(false))\n}\n\ndefineExpose({\n  reset,\n  validateCode,\n})\n</script>\n\n<style scoped lang=\"scss\">\n::v-deep(.el-input-group__append) {\n  position: relative;\n  background-color: var(--el-input-bg-color);\n}\n::v-deep(.el-input-group__append::before) {\n  content: '';\n  position: absolute;\n  top: 50%;\n  left: 0;\n  transform: translateY(-50%);\n  display: block;\n  width: 1px;\n  height: 14px;\n  background-color: #c7c7c7;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/constants/.gitkeep",
    "content": ""
  },
  {
    "path": "web/console/src/constants/agent.ts",
    "content": "export const inputTypeList = [\n  {\n    label: window.$t('variable_type.text'),\n    type: 'text',\n  },\n  {\n    label: window.$t('variable_type.textarea'),\n    type: 'textarea',\n  },\n  {\n    label: window.$t('variable_type.inputNumber'),\n    type: 'inputNumber',\n  },\n  {\n    label: window.$t('variable_type.select'),\n    type: 'select',\n  },\n  { label: window.$t('variable_type.date'), type: 'date', allowed: ['53ai_workflow'] },\n  { label: window.$t('variable_type.tag'), type: 'tag', allowed: ['53ai_workflow'] },\n  { label: window.$t('variable_type.file'), type: 'file' },\n  {\n    label: window.$t('variable_type.array_text'),\n    type: 'array_text',\n    allowed: ['coze_workflow_cn'],\n  },\n  {\n    label: window.$t('variable_type.array_image'),\n    type: 'array_image',\n    allowed: ['coze_workflow_cn'],\n  },\n  {\n    label: window.$t('variable_type.array_audio'),\n    type: 'array_audio',\n    allowed: ['coze_workflow_cn'],\n  },\n  {\n    label: window.$t('variable_type.array_video'),\n    type: 'array_video',\n    allowed: ['coze_workflow_cn'],\n  },\n  {\n    label: window.$t('variable_type.array_file'),\n    type: 'array_file',\n    allowed: ['coze_workflow_cn'],\n  },\n]\n\nexport const outputTypeList = [\n  { label: window.$t('variable_type.textarea'), type: 'textarea' },\n  { label: window.$t('variable_type.image'), type: 'image' },\n  { label: window.$t('variable_type.audio'), type: 'audio' },\n  { label: window.$t('variable_type.video'), type: 'video' },\n  { label: window.$t('variable_type.markdown'), type: 'markdown' },\n  { label: window.$t('variable_type.array_text'), type: 'array_text' },\n  { label: window.$t('variable_type.array_image'), type: 'array_image' },\n  { label: window.$t('variable_type.array_audio'), type: 'array_audio' },\n  { label: window.$t('variable_type.array_video'), type: 'array_video' },\n]\n\nexport const outputDefaultField: Agent.Field = {\n  id: '',\n  variable: '',\n  label: '',\n  type: 'text',\n  desc: '',\n  required: false,\n  max_length: 0,\n  is_system: false,\n  options: [],\n  date_format: '',\n  multiple: false,\n  show_word_limit: false,\n  file_type: 'all',\n  file_accept: [],\n  file_limit: 1,\n  file_size: 30,\n}\n"
  },
  {
    "path": "web/console/src/constants/banner.ts",
    "content": "export const BANNER_CONFIG = {\n  MAX_IMAGES: 5,\n  MIN_INTERVAL: 1,\n  MAX_INTERVAL: 1000,\n  DEFAULT_INTERVAL: 5,\n} as const\n"
  },
  {
    "path": "web/console/src/constants/chunk.ts",
    "content": "export const CHUNK_SETTING_DEFAULT = {\n  id: 0,\n  eid: 0,\n  library_id: null,\n  file_id: null,\n  chunking_config: {\n    version: '1.0',\n    knowledge_chunking: {\n      split_rule: 'h2',\n      max_length: 2000,\n      overlap_size: 0,\n      include_title: false,\n      include_filename: false,\n      chunk_mode: '',\n    },\n    index_chunking: {\n      split_rule: 'h2',\n      max_length: 2000,\n      overlap_size: 0,\n      include_title: false,\n      include_filename: false,\n      chunk_mode: '',\n    },\n    content_summary: {\n      generation_method: 'manual',\n    },\n    common_questions: {\n      generation_method: 'manual',\n    },\n  },\n  created_time: 0,\n  updated_time: 0,\n}\n"
  },
  {
    "path": "web/console/src/constants/domain.ts",
    "content": "/**\n * 域名解析类型常量\n */\nexport const INDEPENDENT_RESOLVE_TYPE = {\n  CNAME: 1,\n  CUSTOM: 2,\n} as const\n\nexport type IndependentResolveType =\n  (typeof INDEPENDENT_RESOLVE_TYPE)[keyof typeof INDEPENDENT_RESOLVE_TYPE]\n\n/**\n * 独立域名 SSL 证书类型\n */\nexport const INDEPENDENT_SSL_CERT_TYPE = {\n  '53AI': 1,\n  CUSTOM: 2,\n} as const\n\nexport type IndependentSslCertType =\n  (typeof INDEPENDENT_SSL_CERT_TYPE)[keyof typeof INDEPENDENT_SSL_CERT_TYPE]\n\n/**\n * 域名配置默认值\n */\nexport const DOMAIN_CONFIG = {\n  DEFAULT_ENABLE_HTTPS: true,\n  DEFAULT_FORCE_HTTPS: false,\n  DEFAULT_USE_SUBDIR: false,\n  DEFAULT_SUBDIR: '',\n} as const\n\n/**\n * 域名类型\n */\nexport const DOMAIN_TYPE = {\n  EXCLUSIVE: 'exclusive',\n  INDEPENDENT: 'independent',\n} as const\n\nexport type DomainType = (typeof DOMAIN_TYPE)[keyof typeof DOMAIN_TYPE]\n"
  },
  {
    "path": "web/console/src/constants/enterprise.ts",
    "content": "export const VERSION_MODULE = {\n  AGENT: 'agent',\n  INDEPENDENT_DOMAIN: 'independent_domain',\n  REGISTERED_USER: 'registered_user',\n  INTERNAL_USER: 'internal_user',\n} as const\nexport type VersionModule = (typeof VERSION_MODULE)[keyof typeof VERSION_MODULE]\n\nexport const WEBSITE_TYPE = {\n  INDEPENDENT: 'independent',\n  ENTERPRISE: 'enterprise',\n  INDUSTRY: 'industry',\n} as const\nexport type WebsiteType = (typeof WEBSITE_TYPE)[keyof typeof WEBSITE_TYPE]\n\nexport const WEBSITE_VERSION = {\n  // 创业版\n  FREE: 1,\n  // 专业版\n  STANDARD: 2,\n  // 企业版\n  ENTERPRISE: 3,\n} as const\nexport type WebsiteVersion = (typeof WEBSITE_VERSION)[keyof typeof WEBSITE_VERSION]\n\nexport const ENTERPRISE_SYNC_FROM = {\n  DEFAULT: '0',\n  WECOM: '1',\n  DINGTALK: '2',\n} as const\nexport type EnterpriseSyncFrom = (typeof ENTERPRISE_SYNC_FROM)[keyof typeof ENTERPRISE_SYNC_FROM]\n\nexport const WEBSITE_TYPE_LABEL_MAP = new Map([\n  [WEBSITE_TYPE.INDEPENDENT, 'module.website_type_independent'],\n  [WEBSITE_TYPE.ENTERPRISE, 'module.website_type_enterprise'],\n  [WEBSITE_TYPE.INDUSTRY, 'module.website_type_industry'],\n])\n\nexport const WEBSITE_TYPE_DESC_MAP = new Map([\n  [WEBSITE_TYPE.INDEPENDENT, 'module.website_type_independent_desc'],\n  [WEBSITE_TYPE.ENTERPRISE, 'module.website_type_enterprise_desc'],\n  [WEBSITE_TYPE.INDUSTRY, 'module.website_type_industry_desc'],\n])\n\nexport const WEBSITE_VERSION_NAME_MAP = {\n  [WEBSITE_VERSION.FREE]: 'free',\n  [WEBSITE_VERSION.STANDARD]: 'standard',\n  [WEBSITE_VERSION.ENTERPRISE]: 'enterprise',\n}\n\nexport const WEBSITE_STYLE = {\n  WEBSITE: 'website',\n  SOFTWARE: 'software',\n} as const\nexport type WebsiteStyle = (typeof WEBSITE_STYLE)[keyof typeof WEBSITE_STYLE]\n\nexport const WEBSITE_STYLE_LABEL_MAP = new Map([\n  [WEBSITE_STYLE.WEBSITE, 'template_style.website'],\n  [WEBSITE_STYLE.SOFTWARE, 'template_style.software'],\n])\nexport const WEBSITE_STYLE_DEMO_MAP = new Map([\n  [WEBSITE_STYLE.WEBSITE, '/images/info/template-website.png'],\n  [WEBSITE_STYLE.SOFTWARE, '/images/info/template-software.png'],\n])\n"
  },
  {
    "path": "web/console/src/constants/group.ts",
    "content": "export const GROUP_TYPE = {\n  USER: 1,\n  AI_LINK: 2,\n  AGENT: 3,\n  INTERNAL_USER: 4,\n  PROMPT: 5,\n} as const\n\nexport type GroupType = (typeof GROUP_TYPE)[keyof typeof GROUP_TYPE]\n\nexport const RESOURCE_TYPE = {\n  AGENT: 'agent',\n  PROMPT: 'prompt',\n  AI_LINK: 'ai_link',\n} as const\n\nexport type ResourceType = (typeof RESOURCE_TYPE)[keyof typeof RESOURCE_TYPE]\n"
  },
  {
    "path": "web/console/src/constants/navigation.ts",
    "content": "/**\n * 导航类型枚举\n */\nexport const NAVIGATION_TYPE = {\n  /** 系统导航 */\n  SYSTEM: 1,\n  /** 外部链接 */\n  EXTERNAL: 2,\n  /** 自定义页面 */\n  CUSTOM: 3,\n} as const\n\nexport type NavigationType = (typeof NAVIGATION_TYPE)[keyof typeof NAVIGATION_TYPE]\n\n/**\n * 导航打开方式枚举\n */\nexport const NAVIGATION_TARGET = {\n  /** 当前窗口打开 */\n  SELF: 1,\n  /** 新窗口打开 */\n  BLANK: 2,\n} as const\n\nexport type NavigationTarget = (typeof NAVIGATION_TARGET)[keyof typeof NAVIGATION_TARGET]\n\n/**\n * 导航类型标签映射\n */\nexport const NAVIGATION_TYPE_LABEL_MAP = new Map<NavigationType, string>([\n  [NAVIGATION_TYPE.SYSTEM, 'navigation.type.system'],\n  [NAVIGATION_TYPE.EXTERNAL, 'navigation.type.external'],\n  [NAVIGATION_TYPE.CUSTOM, 'navigation.type.custom'],\n])\n\n/**\n * 导航打开方式标签映射\n */\nexport const NAVIGATION_TARGET_LABEL_MAP = new Map<NavigationTarget, string>([\n  [NAVIGATION_TARGET.SELF, 'navigation.target.self'],\n  [NAVIGATION_TARGET.BLANK, 'navigation.target.blank'],\n])\n\n/**\n * 默认导航配置\n */\nconst createDefaultConfig = () =>\n  JSON.stringify({\n    target: NAVIGATION_TARGET.SELF,\n    seo_title: '',\n    seo_keywords: '',\n    seo_description: '',\n  })\n\n/**\n * 默认初始化数据\n */\nexport const NAVIGATION_INIT_DATA = [\n  {\n    jump_path: '/index',\n    name: '首页',\n    sort: 9999,\n    config: createDefaultConfig(),\n  },\n  {\n    jump_path: '/agent',\n    name: '智能体',\n    sort: 9998,\n    config: createDefaultConfig(),\n  },\n  {\n    jump_path: '/prompt',\n    name: '提示词',\n    sort: 9997,\n    config: createDefaultConfig(),\n  },\n  {\n    jump_path: '/toolkit',\n    name: 'AI工具',\n    sort: 9996,\n    config: createDefaultConfig(),\n  },\n] as const\n\n/**\n * 表单验证规则配置\n */\nexport const NAVIGATION_FORM_RULES = {\n  NAME_REQUIRED: { required: true, message: 'form_input_placeholder' },\n  PATH_REQUIRED: { required: true, message: 'form_input_placeholder' },\n} as const\n\n/**\n * 导航相关常量\n */\nexport const NAVIGATION_CONSTANTS = {\n  /** 最大导航项数量 */\n  MAX_ITEMS: 8,\n  /** 默认排序值 */\n  DEFAULT_SORT: 9999,\n} as const\n"
  },
  {
    "path": "web/console/src/constants/order.ts",
    "content": "export const ORDER_STATUS = {\n  ALL: -1,\n  NOT_CONFIRM: 1,\n  PENDING: 2,\n  PAID: 3,\n  EXPIRED: 4,\n  CANCELLED: 5\n} as const\n\nexport type OrderStatus = (typeof ORDER_STATUS)[keyof typeof ORDER_STATUS]\n\nexport const ORDER_STATUS_LABEL_MAP = new Map([\n  [ORDER_STATUS.ALL, 'order.status.all'],\n  [ORDER_STATUS.NOT_CONFIRM, 'order.status.not_confirm'],\n  [ORDER_STATUS.PENDING, 'order.status.pending'],\n  [ORDER_STATUS.PAID, 'order.status.paid'],\n  [ORDER_STATUS.EXPIRED, 'order.status.expired'],\n  [ORDER_STATUS.CANCELLED, 'order.status.cancelled']\n])\n"
  },
  {
    "path": "web/console/src/constants/payment.ts",
    "content": "/**\n * 支付相关常量配置\n */\n\n// 支付类型枚举\nexport const PAYMENT_TYPE = {\n  ALL: -1,\n  WECHAT: 1,\n  MANUAL: 2,\n  PAYPAL: 3,\n  ALIPAY: 4,\n} as const\n\nexport type PaymentType = (typeof PAYMENT_TYPE)[keyof typeof PAYMENT_TYPE]\n\n// 支付类型标签映射\nexport const PAYMENT_TYPE_LABEL_MAP = new Map([\n  [PAYMENT_TYPE.ALL, window.$t('payment.type.all')],\n  [PAYMENT_TYPE.WECHAT, window.$t('payment.type.wechat')],\n  [PAYMENT_TYPE.MANUAL, window.$t('payment.type.manual')],\n  [PAYMENT_TYPE.PAYPAL, window.$t('payment.type.paypal')],\n  [PAYMENT_TYPE.ALIPAY, window.$t('payment.type.alipay')],\n])\n\n// 支付类型对应的图标名称\nexport const PAYMENT_TYPE_ICON_MAP = new Map([\n  [PAYMENT_TYPE.WECHAT, 'wechat'],\n  [PAYMENT_TYPE.ALIPAY, 'alipay'],\n  [PAYMENT_TYPE.MANUAL, 'manual-pay'],\n  [PAYMENT_TYPE.PAYPAL, 'paypal'],\n])\n\n// 支付类型对应的键名（用于组件引用）\nexport const PAYMENT_TYPE_KEY_MAP = new Map([\n  [PAYMENT_TYPE.WECHAT, 'wechat'],\n  [PAYMENT_TYPE.ALIPAY, 'alipay'],\n  [PAYMENT_TYPE.MANUAL, 'manual'],\n  [PAYMENT_TYPE.PAYPAL, 'paypal'],\n])\n\n// 支持的支付类型列表\nexport const SUPPORTED_PAYMENT_TYPES = [\n  PAYMENT_TYPE.WECHAT,\n  PAYMENT_TYPE.ALIPAY,\n  PAYMENT_TYPE.MANUAL,\n  PAYMENT_TYPE.PAYPAL,\n] as const\n\n// 默认支付配置\nexport const DEFAULT_PAYMENT_CONFIG = {\n  pay_setting_id: 0,\n  pay_config: {},\n  extra_config: {},\n  pay_status: true,\n  pay_type: PAYMENT_TYPE.WECHAT,\n} as const\n\n// 支付状态相关常量\nexport const PAYMENT_STATUS = {\n  ENABLED: true,\n  DISABLED: false,\n} as const\n\n// 支付操作命令\nexport const PAYMENT_COMMAND = {\n  SETTING: 'setting',\n  ENABLE: 'enable',\n  DISABLE: 'disable',\n} as const\n"
  },
  {
    "path": "web/console/src/constants/platform/agent.ts",
    "content": "import { AGENT_TYPES, agents } from './config'\nimport type { AgentType } from './config'\n\n// 从 agents 配置中提取所有 agent id\nexport const AGENT_TYPE = AGENT_TYPES\n\nexport type { AgentType }\n\n// 从 agents 配置中构建分类\nconst AGENT_CATEGORIES = Object.entries(agents).reduce(\n  (acc, [key, agent]) => {\n    if (!agent.visible) return acc\n    if (!acc[agent.category]) acc[agent.category] = []\n\n    acc[agent.category].push(key)\n    return acc\n  },\n  {} as Record<string, string[]>\n)\n\nexport const AGENT_APP_OPTIONS = Object.entries(AGENT_CATEGORIES).map(([title, types]) => ({\n  title,\n  children: types.map((value) => {\n    const agent = agents[value]\n    return {\n      value,\n      label: `agent_app.${value}` || '',\n      icon: agent.icon || '',\n      response: agent.mode || '',\n      channel_type: agent.channelType || 0\n    }\n  })\n}))\n"
  },
  {
    "path": "web/console/src/constants/platform/channel.ts",
    "content": "import { CHANNEL_TYPE_VALUE_MAP, channels, models } from './config'\n\n// 平台介入，通用大模型需要\nexport const CHANNEL_TYPE = Object.fromEntries(\n  [...Object.entries(channels), ...Object.entries(models)].map(([key, value]) => [\n    key.toUpperCase(),\n    key,\n  ])\n) as Record<string, string>\n\nexport type ChannelType = (typeof CHANNEL_TYPE)[keyof typeof CHANNEL_TYPE]\n\nexport const CHANNEL_TYPE_LABEL_MAP = new Map<string, string>(\n  [...Object.entries(models), ...Object.entries(channels)].map(([key, value]) => [\n    value.channelType,\n    value.label,\n  ])\n)\nexport const CHANNEL_TYPE_ICON_MAP = new Map<number, string>(\n  [...Object.entries(models), ...Object.entries(channels)].map(([key, value]) => [\n    value.channelType,\n    value.icon,\n  ])\n)\n\nexport const CHANNEL_TYPE_OPTIONS = [\n  CHANNEL_TYPE.SILICONFLOW,\n  CHANNEL_TYPE.DEEPSEEK,\n  CHANNEL_TYPE.OPENAI,\n  CHANNEL_TYPE.AZURE,\n  CHANNEL_TYPE.DARK_MOON,\n  CHANNEL_TYPE.ZHIPU,\n].map(value => {\n  const channel_type = CHANNEL_TYPE_VALUE_MAP.get(value)\n  return {\n    value,\n    channel_type,\n    label: CHANNEL_TYPE_LABEL_MAP.get(channel_type),\n    icon: CHANNEL_TYPE_ICON_MAP.get(channel_type),\n    is_add: false,\n    add_visible: [\n      CHANNEL_TYPE.SILICONFLOW,\n      CHANNEL_TYPE.DEEPSEEK,\n      CHANNEL_TYPE.OPENAI,\n      CHANNEL_TYPE.AZURE,\n    ].includes(value),\n  }\n})\nexport { CHANNEL_TYPE_VALUE_MAP }\n"
  },
  {
    "path": "web/console/src/constants/platform/config.ts",
    "content": "import { img_host } from '@/utils/config'\n\n// 智能体类型定义\nconst AGENT_TYPE = {\n  PROMPT: 'prompt',\n  COZE_AGENT_CN: 'coze_agent_cn',\n  COZE_WORKFLOW_CN: 'coze_workflow_cn',\n  COZE_AGENT_OSV: 'coze_agent_osv',\n  COZE_WORKFLOW_OSV: 'coze_workflow_osv',\n  APP_BUILDER: 'app_builder',\n  '53AI_AGENT': '53ai_agent',\n  '53AI_WORKFLOW': '53ai_workflow',\n  DIFY_AGENT: 'dify_agent',\n  DIFY_WORKFLOW: 'dify_workflow',\n  BAILIAN: 'bailian',\n  VOLCENGINE: 'volcengine',\n  YUANQI: 'yuanqi',\n  FASTGPT_AGENT: 'fastgpt_agent',\n  FASTGPT_WORKFLOW: 'fastgpt_workflow',\n  MAXKB_AGENT: 'maxkb_agent',\n  N8N_WORKFLOW: 'n8n_workflow',\n  TENCENT: 'tencent',\n} as const\n\nconst BACKEND_AGENT_TYPE = {\n  AGENT: 0,\n  WORKFLOW: 1,\n}\n\nconst AGENT_MODES = {\n  CHAT: 'chat',\n  COMPLETION: 'completion',\n} as const\n\nconst MODEL_USE_TYPE = {\n  // 推理\n  REASONING: '1',\n  // 嵌入\n  EMBEDDING: '2',\n  // 重排序\n  RERANKER: '3',\n} as const\n\n// 统一的平台配置\nconst PLATFORM_CONFIG = {\n  prompt: {\n    // 提供商ID\n    providerValue: 0,\n    // 渠道ID\n    channelValue: 0,\n    // 分类\n    category: 'model_platform',\n    // 需不需要授权\n    auth: false,\n    // 智能体列表\n    label: window.$t('provider_platform.prompt'),\n    agents: [\n      {\n        id: AGENT_TYPE.PROMPT,\n        name: AGENT_TYPE.PROMPT,\n        label: window.$t('agent_app.prompt'),\n      },\n    ],\n  },\n  coze_cn: {\n    providerValue: 1,\n    channelValue: 34,\n    category: 'intelligent_agent_platform',\n    auth: true,\n    label: window.$t('provider_platform.coze_cn'),\n    agents: [\n      {\n        id: AGENT_TYPE.COZE_AGENT_CN,\n        name: AGENT_TYPE.COZE_AGENT_CN,\n        label: window.$t('agent_app.coze_agent_cn'),\n      },\n      {\n        id: AGENT_TYPE.COZE_WORKFLOW_CN,\n        name: AGENT_TYPE.COZE_WORKFLOW_CN,\n        mode: AGENT_MODES.COMPLETION,\n        visible: false,\n      },\n    ],\n  },\n  coze_osv: {\n    providerValue: 5,\n    channelValue: 1010,\n    category: 'intelligent_agent_platform',\n    auth: true,\n    label: window.$t('provider_platform.coze_osv'),\n    agents: [\n      {\n        id: AGENT_TYPE.COZE_AGENT_OSV,\n        name: AGENT_TYPE.COZE_AGENT_OSV,\n        label: window.$t('agent_app.coze_agent_osv'),\n      },\n      {\n        id: AGENT_TYPE.COZE_WORKFLOW_OSV,\n        name: AGENT_TYPE.COZE_WORKFLOW_OSV,\n        mode: AGENT_MODES.COMPLETION,\n        label: window.$t('agent_app.coze_workflow_osv'),\n        visible: false,\n      },\n    ],\n  },\n  app_builder: {\n    providerValue: 3,\n    channelValue: 1005,\n    category: 'cloud_computing_platform',\n    auth: true,\n    label: window.$t('provider_platform.app_builder'),\n    agents: [\n      {\n        id: AGENT_TYPE.APP_BUILDER,\n        name: AGENT_TYPE.APP_BUILDER,\n        label: window.$t('agent_app.app_builder'),\n      },\n    ],\n  },\n  '53ai': {\n    providerValue: 4,\n    channelValue: 1002,\n    category: 'intelligent_agent_platform',\n    auth: true,\n    label: window.$t('provider_platform.53ai'),\n    agents: [\n      {\n        id: AGENT_TYPE['53AI_AGENT'],\n        name: AGENT_TYPE['53AI_AGENT'],\n        label: window.$t('agent_app.53ai_agent'),\n      },\n      {\n        id: AGENT_TYPE['53AI_WORKFLOW'],\n        name: AGENT_TYPE['53AI_WORKFLOW'],\n        mode: AGENT_MODES.COMPLETION,\n        label: window.$t('agent_app.53ai_workflow'),\n        visible: false,\n      },\n    ],\n  },\n  dify: {\n    channelValue: 1001,\n    providerValue: 1001,\n    category: 'intelligent_agent_platform',\n    auth: false,\n    label: window.$t('provider_platform.dify'),\n    agents: [\n      {\n        id: AGENT_TYPE.DIFY_AGENT,\n        name: AGENT_TYPE.DIFY_AGENT,\n        label: window.$t('agent_app.dify_agent'),\n      },\n      {\n        id: AGENT_TYPE.DIFY_WORKFLOW,\n        name: AGENT_TYPE.DIFY_WORKFLOW,\n        mode: AGENT_MODES.COMPLETION,\n        label: window.$t('agent_app.dify_workflow'),\n        visible: false,\n      },\n    ],\n  },\n  bailian: {\n    channelValue: 1003,\n    providerValue: 1003,\n    category: 'cloud_computing_platform',\n    auth: false,\n    label: window.$t('provider_platform.bailian'),\n    agents: [\n      {\n        id: AGENT_TYPE.BAILIAN,\n        name: AGENT_TYPE.BAILIAN,\n        label: window.$t('agent_app.bailian'),\n      },\n    ],\n  },\n  volcengine: {\n    channelValue: 1004,\n    providerValue: 1004,\n    category: 'cloud_computing_platform',\n    auth: false,\n    label: window.$t('provider_platform.volcengine'),\n    agents: [\n      {\n        id: AGENT_TYPE.VOLCENGINE,\n        name: AGENT_TYPE.VOLCENGINE,\n        label: window.$t('agent_app.volcengine'),\n      },\n    ],\n  },\n  yuanqi: {\n    channelValue: 1006,\n    providerValue: 1006,\n    category: 'intelligent_agent_platform',\n    auth: false,\n    label: window.$t('provider_platform.yuanqi'),\n    agents: [\n      {\n        id: AGENT_TYPE.YUANQI,\n        name: AGENT_TYPE.YUANQI,\n        label: window.$t('agent_app.yuanqi'),\n      },\n    ],\n  },\n  fastgpt: {\n    channelValue: 22,\n    providerValue: 22,\n    category: 'intelligent_agent_platform',\n    auth: false,\n    label: window.$t('provider_platform.fastgpt'),\n    agents: [\n      {\n        id: AGENT_TYPE.FASTGPT_AGENT,\n        name: AGENT_TYPE.FASTGPT_AGENT,\n        label: window.$t('agent_app.fastgpt_agent'),\n      },\n      {\n        id: AGENT_TYPE.FASTGPT_WORKFLOW,\n        name: AGENT_TYPE.FASTGPT_WORKFLOW,\n        mode: AGENT_MODES.COMPLETION,\n        label: window.$t('agent_app.fastgpt_workflow'),\n        visible: false,\n      },\n    ],\n  },\n  maxkb: {\n    channelValue: 1008,\n    providerValue: 1008,\n    category: 'intelligent_agent_platform',\n    auth: false,\n    label: window.$t('provider_platform.maxkb'),\n    agents: [\n      {\n        id: AGENT_TYPE.MAXKB_AGENT,\n        name: AGENT_TYPE.MAXKB_AGENT,\n        label: window.$t('agent_app.maxkb_agent'),\n      },\n    ],\n  },\n  n8n: {\n    providerValue: 1009,\n    channelValue: 1009,\n    category: 'intelligent_agent_platform',\n    auth: false,\n    label: window.$t('provider_platform.n8n'),\n    agents: [\n      {\n        id: AGENT_TYPE.N8N_WORKFLOW,\n        name: AGENT_TYPE.N8N_WORKFLOW,\n        mode: AGENT_MODES.COMPLETION,\n        label: window.$t('agent_app.n8n_workflow'),\n      },\n    ],\n  },\n  tencent: {\n    providerValue: 6,\n    channelValue: 1011,\n    category: 'cloud_computing_platform',\n    auth: true,\n    label: window.$t('provider_platform.tencent'),\n    agents: [\n      {\n        id: AGENT_TYPE.TENCENT,\n        name: AGENT_TYPE.TENCENT,\n        mode: AGENT_MODES.CHAT,\n        label: window.$t('agent_app.tencent'),\n      },\n    ],\n  },\n} as const\n\n// 统一的大模型配置\nconst MODEL_CONFIG = {\n  siliconflow: {\n    name: 'siliconflow',\n    owner: 'siliconflow',\n    channelType: 44,\n    multiple: false,\n    label: window.$t('provider_platform.siliconflow'),\n  },\n  deepseek: {\n    name: 'deepseek',\n    owner: 'deepseek',\n    channelType: 36,\n    multiple: false,\n    label: window.$t('provider_platform.deepseek'),\n  },\n  openai: {\n    name: 'openai',\n    owner: 'openai',\n    channelType: 1,\n    multiple: false,\n    label: window.$t('provider_platform.openai'),\n  },\n  azure: {\n    name: 'azure',\n    owner: 'openai',\n    channelType: 3,\n    multiple: true,\n    label: window.$t('provider_platform.azure'),\n  },\n  // #ifdef KM\n  bailian: {\n    name: 'bailian',\n    owner: 'bailian',\n    channelType: 17,\n    multiple: false,\n    label: window.$t('provider_platform.bailian'),\n  },\n  volcengine: {\n    name: 'volcengine',\n    owner: 'volcengine',\n    channelType: 900,\n    multiple: false,\n    label: window.$t('provider_platform.volcengine'),\n  },\n  qianfan: {\n    name: 'qianfan',\n    owner: 'qianfan',\n    channelType: 901,\n    multiple: false,\n    label: window.$t('provider_platform.app_builder'),\n  },\n  // #endif\n} as const\n\nexport { AGENT_MODES, BACKEND_AGENT_TYPE, MODEL_USE_TYPE }\n\nexport const AGENT_CATEGORIES = {\n  INTELLIGENT_AGENT_PLATFORM: 'intelligent_agent_platform',\n  CLOUD_COMPUTING_PLATFORM: 'cloud_computing_platform',\n  MODEL_PLATFORM: 'model_platform',\n} as const\n\nexport const PROVIDER_CATEGORIES = {\n  INTELLIGENT_AGENT_PLATFORM: 'intelligent_agent_platform',\n  CLOUD_COMPUTING_PLATFORM: 'cloud_computing_platform',\n} as const\n\n// 类型定义\nexport type ProviderId = number\nexport type AgentType = (typeof AGENT_TYPE)[keyof typeof AGENT_TYPE]\nexport type ChannelType = keyof typeof PLATFORM_CONFIG\nexport type ChannelValue = (typeof PLATFORM_CONFIG)[keyof typeof PLATFORM_CONFIG]['channelValue']\n\nexport type ProviderType = keyof typeof PLATFORM_CONFIG\nexport type ProviderValue = (typeof PLATFORM_CONFIG)[keyof typeof PLATFORM_CONFIG]['providerValue']\n\nexport type ModelType = keyof typeof MODEL_CONFIG\nexport type ModelValue = (typeof MODEL_CONFIG)[keyof typeof MODEL_CONFIG]['channelType']\nexport type ModelUseType = (typeof MODEL_USE_TYPE)[keyof typeof MODEL_USE_TYPE]\n\nexport type AgentMode = (typeof AGENT_MODES)[keyof typeof AGENT_MODES]\nexport type AgentCategory = (typeof AGENT_CATEGORIES)[keyof typeof AGENT_CATEGORIES]\nexport type ProviderCategory = (typeof PROVIDER_CATEGORIES)[keyof typeof PROVIDER_CATEGORIES]\n\n// 从配置对象中提取键\ntype ConfigKeys = keyof typeof PLATFORM_CONFIG\ntype ModelKeys = keyof typeof MODEL_CONFIG\n\n// 创建值类型映射\nexport type ProviderValuesType = Record<Uppercase<ConfigKeys & string>, number>\nexport type ChannelValuesType = Record<Uppercase<ConfigKeys & string>, number>\nexport type AgentValuesType = Record<Uppercase<ConfigKeys & string>, string>\nexport type ModelValuesType = Record<Uppercase<ModelKeys & string>, number>\n\n// 导出常量\nexport const AGENT_TYPES = AGENT_TYPE\n\nexport const CHANNEL_TYPES = Object.fromEntries(\n  Object.entries(PLATFORM_CONFIG).map(([key]) => [key.toUpperCase(), key])\n) as Record<Uppercase<ConfigKeys & string>, string>\nexport const PROVIDER_TYPES = Object.fromEntries(\n  Object.entries(PLATFORM_CONFIG).map(([key]) => [key.toUpperCase(), key])\n) as Record<Uppercase<ConfigKeys & string>, string>\nexport const MODEL_TYPES = Object.fromEntries(\n  Object.entries(MODEL_CONFIG).map(([key]) => [key.toUpperCase(), key])\n) as Record<Uppercase<ModelKeys & string>, string>\n\n// 创建常量并指定类型\nexport const PROVIDER_VALUES = Object.fromEntries(\n  Object.entries(PLATFORM_CONFIG).map(([key, config]) => [key.toUpperCase(), config.providerValue])\n) as ProviderValuesType\n\nexport const CHANNEL_VALUES = Object.fromEntries(\n  Object.entries(PLATFORM_CONFIG).map(([key, config]) => [key.toUpperCase(), config.channelValue])\n) as ChannelValuesType\n\nexport const AGENT_VALUES = Object.fromEntries(\n  Object.entries(PLATFORM_CONFIG).map(([key, config]) => [key.toUpperCase(), config.agents[0].name])\n) as AgentValuesType\n\nexport const MODEL_VALUES = Object.fromEntries(\n  Object.entries(MODEL_CONFIG).map(([key, config]) => [key.toUpperCase(), config.channelType])\n) as ModelValuesType\n\n// 配置接口\nexport interface ProviderConfig {\n  id: ProviderId\n  name: string\n  icon: string\n  label: string\n  channelId: ChannelType\n  agentId: AgentType\n  auth: boolean\n  category: ProviderCategory\n}\n\ninterface ChannelConfig {\n  id: ChannelType\n  name: string\n  label: string\n  icon: string\n  channelType: number\n}\n\ninterface AgentConfig {\n  id: AgentType\n  name: AgentType\n  label: string\n  icon: string\n  channelName: ChannelType\n  channelType: ChannelValue\n  providerId: ProviderValue\n  mode: AgentMode\n  category: AgentCategory\n  visible: boolean\n}\n\nexport interface ModelConfig {\n  id: ModelType\n  name: string\n  label: string\n  icon: string\n  owner: string\n  channelType: ModelValue\n  multiple: boolean\n}\n\n// 通用配置生成函数\nconst createConfig = <T>(type: string, template: (type: string) => T): T => template(type)\n\n// 配置数据生成\nexport const providers: Record<ProviderId, ProviderConfig> = Object.fromEntries(\n  Object.entries(PLATFORM_CONFIG)\n    .filter(([, config]) => config.providerValue > 0)\n    .map(([key, config]) => [\n      config.providerValue,\n      createConfig(key, type => ({\n        id: config.providerValue,\n        name: type,\n        icon: type,\n        label: config.label,\n        provider_type: config.providerValue,\n        channelId: type as ChannelType,\n        agentId: config.agents[0].name as AgentType,\n        auth: config.auth,\n        category: config.category as ProviderCategory,\n      })),\n    ])\n) as Record<ProviderId, ProviderConfig>\n\nexport const channels: Record<ChannelType, ChannelConfig> = Object.fromEntries(\n  Object.entries(PLATFORM_CONFIG).map(([key, config]) => [\n    key,\n    createConfig(key, type => ({\n      id: type as ChannelType,\n      name: type,\n      label: config.label,\n      icon: type,\n      channelType: config.channelValue,\n    })),\n  ])\n) as Record<ChannelType, ChannelConfig>\n\nexport const agents: Record<AgentType, AgentConfig> = Object.fromEntries(\n  Object.entries(PLATFORM_CONFIG)\n    .map(([key, config]) => {\n      return config.agents.map(agent => {\n        return [\n          agent.name,\n          createConfig(agent.name, type => ({\n            id: type as AgentType,\n            name: type as AgentType,\n            label: agent.label,\n            icon: `${img_host}/agent/${type.toLowerCase()}.png`,\n            channelName: key as ChannelType,\n            channelType: config.channelValue as ChannelValue,\n            providerId: config.providerValue as ProviderValue,\n            mode: agent.mode || AGENT_MODES.CHAT,\n            category: config.category as AgentCategory,\n            visible: 'visible' in agent ? agent.visible : true,\n          })),\n        ]\n      })\n    })\n    .flat()\n) as Record<AgentType, AgentConfig>\n// 模型配置\nexport const models = Object.fromEntries(\n  Object.entries(MODEL_CONFIG).map(([key, config]) => [\n    key,\n    createConfig(key, type => ({\n      id: type as ModelType,\n      name: type,\n      label: config.label,\n      icon: type,\n      owner: config.owner,\n      channelType: config.channelType,\n      multiple: config.multiple,\n    })),\n  ])\n) as Record<ModelType, ModelConfig>\n\n// 渠道类型映射\nconst CHANNEL_MAPPINGS = [\n  ['openai', 1],\n  ['API2D', 2],\n  ['Azure', 3],\n  ['azure', 3],\n  ['CloseAI', 4],\n  ['OpenAISB', 5],\n  ['OpenAIMax', 6],\n  ['OhMyGPT', 7],\n  ['Custom', 8],\n  ['Ails', 9],\n  ['AIProxy', 10],\n  ['PaLM', 11],\n  ['API2GPT', 12],\n  ['AIGC2D', 13],\n  ['Anthropic', 14],\n  ['Baidu', 15],\n  ['Zhipu', 16],\n  ['zhipu', 16],\n  ['Ali', 17],\n  ['Xunfei', 18],\n  ['AI360', 19],\n  ['OpenRouter', 20],\n  ['AIProxyLibrary', 21],\n  ['FastGPT', 22],\n  ['Tencent', 23],\n  ['Gemini', 24],\n  ['Moonshot', 25],\n  ['dark_moon', 25],\n  ['Baichuan', 26],\n  ['Minimax', 27],\n  ['Mistral', 28],\n  ['Groq', 29],\n  ['Ollama', 30],\n  ['LingYiWanWu', 31],\n  ['StepFun', 32],\n  ['AwsClaude', 33],\n  ['coze', 34],\n  ['Cohere', 35],\n  ['deepseek', 36],\n  ['deep_seek', 36],\n  ['Cloudflare', 37],\n  ['DeepL', 38],\n  ['TogetherAI', 39],\n  ['Doubao', 40],\n  ['Novita', 41],\n  ['VertextAI', 42],\n  ['Proxy', 43],\n  ['siliconflow', 44],\n  ['silicon_flow', 44],\n  ['XAI', 45],\n  ['Replicate', 46],\n  ['Dummy', 47],\n  // ['dify', 1001],\n  // ['53ai', 1002],\n  // ['n8n', 1009],\n] as const\n\nexport const CHANNEL_TYPE_VALUE_MAP = new Map([\n  ...CHANNEL_MAPPINGS,\n  ...Object.entries(PLATFORM_CONFIG).map(([key, value]) => [key, value.channelValue] as const),\n  ...Object.entries(models).map(([key, value]) => [key, value.channelType] as const),\n  ...Object.entries(agents).map(([key, value]) => [key, value.channelType] as const),\n])\n// 工具函数\nexport const getProviderByProviderType = (providerType: ProviderType): ProviderConfig =>\n  providers[providerType] || ({} as ProviderConfig)\n\nexport const getProviderByAgentId = (agentId: AgentType) =>\n  agents[agentId]?.providerId && providers[agents[agentId].providerId]\n\nexport const getAgentsByCategory = (category: AgentConfig['category']) =>\n  Object.values(agents).filter(agent => agent.category === category)\n\nexport const getAgentsByProvider = (providerId: ProviderId) =>\n  Object.values(agents).filter(agent => agent.providerId === providerId)\n\nexport const getAgentByAgentType = (agentType: AgentType): AgentConfig =>\n  agents[agentType] || ({} as AgentConfig)\n\nexport const getAgentByChannelType = (channelType: ChannelValue): AgentConfig => {\n  return (\n    Object.values(agents).find(agent => agent.channelType === channelType) || ({} as AgentConfig)\n  )\n}\n\nexport const getProvidersByAuth = (auth: boolean): ProviderConfig[] =>\n  Object.values(providers).filter(provider => provider.auth === auth)\n\n// 获取所有 models 中的channleType\nexport const getModelChannelTypes = () => {\n  return Object.values(models).map(model => model.channelType)\n}\n\nexport const getModelByChannelType = (channelType: ModelValue): ModelConfig =>\n  Object.values(models).find(model => model.channelType === channelType) || ({} as ModelConfig)\n"
  },
  {
    "path": "web/console/src/constants/platform/index.ts",
    "content": "export * from './provider'\nexport * from './channel'\nexport * from './agent'\n"
  },
  {
    "path": "web/console/src/constants/platform/model.ts",
    "content": "import { MODEL_VALUES } from './config'\n\nexport interface FormConfig {\n  label: string\n  prop: string\n  type: 'input' | 'select' | 'url'\n  rules?: unknown[]\n  placeholder?: string\n  required?: boolean\n  size?: 'large' | 'default' | 'small'\n  multiple?: boolean\n  default?: string\n}\n\n// 深度搜索表单配置\nexport const DEEPSEEK_FORM_CONFIG: FormConfig[] = [\n  {\n    label: 'module.platform_model_api_endpoint',\n    prop: 'base_url',\n    type: 'url',\n    placeholder: 'module.platform_model_api_endpoint_placeholder',\n    required: true,\n    default: 'https://api.deepseek.com',\n  },\n  {\n    label: 'module.platform_tool_api_key',\n    prop: 'key',\n    type: 'input',\n    placeholder: 'module.platform_tool_api_key_placeholder',\n    required: true,\n  },\n  {\n    label: 'module.platform_model_models',\n    prop: 'models',\n    type: 'select',\n    multiple: true,\n    placeholder: 'module.platform_model_models_placeholder',\n    required: true,\n  },\n]\n\n// OpenAI表单配置\nexport const OPENAI_FORM_CONFIG: FormConfig[] = [\n  {\n    label: 'module.platform_model_base_url',\n    prop: 'base_url',\n    type: 'url',\n    placeholder: 'module.platform_model_base_url_placeholder',\n    required: true,\n  },\n  {\n    label: 'module.platform_tool_api_key',\n    prop: 'key',\n    type: 'input',\n    placeholder: 'module.platform_tool_api_key_placeholder',\n    required: true,\n  },\n  {\n    label: 'module.platform_model_models',\n    prop: 'models',\n    type: 'select',\n    multiple: true,\n    placeholder: 'module.platform_model_models_placeholder',\n    required: true,\n  },\n]\n\nexport const SILICONFLOW_FORM_CONFIG: FormConfig[] = [\n  {\n    label: 'module.platform_tool_api_key',\n    prop: 'key',\n    type: 'input',\n    placeholder: 'module.platform_tool_api_key_placeholder',\n    required: true,\n  },\n  {\n    label: 'module.platform_model_models',\n    prop: 'models',\n    type: 'select',\n    multiple: true,\n    placeholder: 'module.platform_model_models_placeholder',\n    required: true,\n  },\n]\n\n// Azure表单配置\nexport const AZURE_FORM_CONFIG: FormConfig[] = [\n  {\n    label: 'module.platform_model_name',\n    prop: 'name',\n    type: 'input',\n    placeholder: 'module.platform_model_name_placeholder',\n    required: true,\n  },\n  {\n    label: 'module.platform_model_base_url_azure',\n    prop: 'base_url',\n    type: 'url',\n    placeholder: 'module.platform_model_base_url_azure_placeholder',\n    required: true,\n  },\n  {\n    label: 'module.platform_tool_api_key',\n    prop: 'key',\n    type: 'input',\n    placeholder: 'module.platform_tool_api_key_placeholder',\n    required: true,\n  },\n  {\n    label: 'module.platform_model_other',\n    prop: 'other',\n    type: 'input',\n    placeholder: 'module.platform_model_other_placeholder',\n    required: true,\n  },\n  {\n    label: 'module.platform_model_models_azure',\n    prop: 'models',\n    type: 'select',\n    placeholder: 'module.platform_model_models_azure_placeholder',\n    required: true,\n  },\n]\n\nexport const BAILIAN_FORM_CONFIG: FormConfig[] = [\n  {\n    label: 'module.platform_model_api_endpoint',\n    prop: 'base_url',\n    type: 'url',\n    placeholder: 'module.platform_model_base_url_placeholder',\n    required: true,\n    // default: 'https://example.com',\n  },\n  {\n    label: 'module.platform_tool_api_key',\n    prop: 'key',\n    type: 'input',\n    placeholder: 'module.platform_tool_api_key_placeholder',\n    required: true,\n  },\n  {\n    label: 'module.platform_model_models',\n    prop: 'models',\n    type: 'select',\n    multiple: true,\n    placeholder: 'module.platform_model_models_placeholder',\n    required: true,\n  },\n]\n\n// 获取表单配置\nexport const getFormConfig = (channel_type: number): FormConfig[] => {\n  switch (channel_type) {\n    case MODEL_VALUES.DEEPSEEK:\n      return DEEPSEEK_FORM_CONFIG\n    case MODEL_VALUES.OPENAI:\n      return OPENAI_FORM_CONFIG\n    case MODEL_VALUES.AZURE:\n      return AZURE_FORM_CONFIG\n    case MODEL_VALUES.SILICONFLOW:\n      return SILICONFLOW_FORM_CONFIG\n    case MODEL_VALUES.BAILIAN:\n    case MODEL_VALUES.VOLCENGINE:\n    case MODEL_VALUES.QIANFAN:\n      return BAILIAN_FORM_CONFIG\n    default:\n      return []\n  }\n}\n"
  },
  {
    "path": "web/console/src/constants/platform/provider.ts",
    "content": "import { providers } from './config'\n\n// 提供商类型，针对于 平台接入\nexport const PROVIDER_VALUE = Object.fromEntries(\n  Object.entries(providers).map(([id, provider]) => [provider.name.toUpperCase(), Number(id)]),\n)\n\nexport type ProviderValueType = (typeof PROVIDER_VALUE)[keyof typeof PROVIDER_VALUE]\n\nexport const PROVIDER_VALUE_LABEL_MAP = new Map(\n  Object.entries(providers).map(([id, provider]) => [Number(id), provider.name]),\n)\n"
  },
  {
    "path": "web/console/src/constants/sync.ts",
    "content": "export const SYNC_FROM = {\n  DEFAULT: '0' as const,\n  WECOM: '1' as const,\n} as const\n\nexport const SYNC_FROM_NUMBER = {\n  DEFAULT: 0 as const,\n  WECOM: 1 as const,\n} as const\n\nexport type SyncFrom = (typeof SYNC_FROM)[keyof typeof SYNC_FROM]\nexport type SyncFromNumber = (typeof SYNC_FROM_NUMBER)[keyof typeof SYNC_FROM_NUMBER]\n"
  },
  {
    "path": "web/console/src/constants/system-log.ts",
    "content": "export const SYSTEM_LOG_ACTION = {\n  LOGIN: 5,\n  LOGOUT: 5,\n} as const\n\nexport type SystemLogAction = (typeof SYSTEM_LOG_ACTION)[keyof typeof SYSTEM_LOG_ACTION]\n"
  },
  {
    "path": "web/console/src/constants/user.ts",
    "content": ""
  },
  {
    "path": "web/console/src/directive/copy.ts",
    "content": "import { copyToClip } from '@/utils/copy'\n\nconst handler = (el: any, binding: any) => {\n  if (el._copyHandler) {\n    el.removeEventListener('click', el._copyHandler)\n    delete el._copyHandler\n  }\n  el._copyHandler = () => {\n    copyToClip(binding.value)\n      .then(() => {\n        ElMessage.success(window.$i18nT('action.copy_success'))\n      })\n  }\n  el.addEventListener('click', el._copyHandler)\n}\nexport default {\n  mounted: handler,\n  updated: handler,\n}\n"
  },
  {
    "path": "web/console/src/directive/debounce.ts",
    "content": "// 定义类型\ninterface VNodeProps {\n  onClick?: (...args: unknown[]) => unknown\n  _onClick?: (...args: unknown[]) => unknown\n  loading?: boolean\n  [key: string]: unknown\n}\n\ninterface VNode {\n  ctx: {\n    type: { name: string }\n    vnode: {\n      props: VNodeProps\n      loading?: boolean\n      key?: string\n    }\n    props: VNodeProps\n    proxy?: {\n      $forceUpdate?: () => void\n    }\n  }\n}\n\ninterface HTMLElementWithListener extends HTMLElement {\n  dListener?: (ev: Event) => void\n  disabled?: boolean\n}\n\n/**\n * AOP函数 - 在原函数执行前后添加额外逻辑\n */\nfunction AOP(\n  func: (...args: unknown[]) => unknown,\n  beforeFn: (...args: unknown[]) => void,\n  afterFn: (...args: unknown[]) => void\n) {\n  return function (this: unknown, ...args: unknown[]) {\n    beforeFn.apply(this, args)\n    const ret = func.apply(this, args)\n\n    if (ret && typeof ret === 'object' && 'then' in ret && 'catch' in ret) {\n      // 处理Promise返回值\n      ;(ret as Promise<unknown>).finally(() => {\n        afterFn.apply(this, args)\n      })\n    } else {\n      // 非Promise返回值，使用setTimeout模拟异步\n      setTimeout(() => {\n        afterFn.apply(this, args)\n      }, 1000)\n    }\n\n    return ret\n  }\n}\n\n/**\n * 创建函数副本，避免直接修改原函数\n */\nfunction createFunctionCopy(originalFn: (...args: unknown[]) => unknown) {\n  return function (this: unknown, ...args: unknown[]) {\n    return originalFn.apply(this, args)\n  }\n}\n\n/**\n * 创建防抖函数\n */\nfunction debounce(fn: (...args: unknown[]) => unknown, delay = 1000, immediate = true) {\n  let timer: number | null = null\n  let hasExecuted = false\n\n  return function (this: unknown, ...args: unknown[]) {\n    if (timer) clearTimeout(timer)\n\n    if (immediate && !hasExecuted) {\n      // 立即执行\n      fn.apply(this, args)\n      hasExecuted = true\n    }\n\n    timer = window.setTimeout(() => {\n      if (!immediate) {\n        // 延迟执行\n        fn.apply(this, args)\n      }\n      timer = null\n      hasExecuted = false\n    }, delay)\n  }\n}\n\n/**\n * 指令处理函数\n */\nconst handler = (el: HTMLElement, binding: { value?: number }, vnode: VNode) => {\n  const { ctx } = vnode\n  const delay = binding.value || 1000\n\n  // 处理ElButton组件\n  if (ctx.type.name === 'ElButton') {\n    const click = ctx.vnode.props?.onClick\n\n    // 如果没有保存原始点击事件，则保存\n    if (!ctx.vnode.props._onClick && click) {\n      ctx.vnode.props._onClick = click\n      ctx.vnode.key = `debounce_${Math.random().toString(36).substr(2, 9)}`\n    }\n\n    // 设置初始loading状态\n    ctx.props.loading = ctx.vnode.loading || false\n\n    // 使用防抖函数包装原始点击事件\n    if (ctx.vnode.props._onClick) {\n      const debouncedClick = debounce(createFunctionCopy(ctx.vnode.props._onClick), delay, true)\n\n      // 使用AOP包装防抖后的点击事件，添加loading效果\n      ctx.vnode.props.onClick = AOP(\n        debouncedClick,\n        () => {\n          // 点击前立即设置loading状态\n          ctx.props.loading = true\n          ctx.vnode.loading = true\n          // 强制更新组件状态\n          if (ctx.proxy && typeof ctx.proxy.$forceUpdate === 'function') ctx.proxy.$forceUpdate()\n        },\n        () => {\n          // 操作完成后取消loading状态\n          ctx.props.loading = false\n          ctx.vnode.loading = false\n          // 强制更新组件状态\n          if (ctx.proxy && typeof ctx.proxy.$forceUpdate === 'function') ctx.proxy.$forceUpdate()\n        }\n      )\n    }\n  } else {\n    // 处理普通元素\n    const elementWithListener = el as HTMLElementWithListener\n\n    // 移除旧的事件监听器\n    if (elementWithListener.dListener) {\n      el.removeEventListener('click', elementWithListener.dListener)\n    }\n\n    // 创建新的防抖事件监听器\n    elementWithListener.dListener = (_ev: Event) => {\n      if (elementWithListener.disabled) return\n\n      ctx.props.loading = true\n      elementWithListener.disabled = true\n\n      setTimeout(() => {\n        elementWithListener.disabled = false\n        ctx.props.loading = false\n      }, delay)\n    }\n\n    // 添加事件监听\n    el.addEventListener(\n      'click',\n      debounce(\n        (...args: unknown[]) => {\n          const ev = args[0] as Event\n          elementWithListener.dListener?.(ev)\n        },\n        delay,\n        true\n      )\n    )\n  }\n}\n\nexport default {\n  mounted: handler,\n  updated: handler,\n}\n"
  },
  {
    "path": "web/console/src/directive/index.ts",
    "content": "import debounce from './debounce';\nimport copy from './copy';\nimport router from './router';\nimport version from './version';\n\nimport overflowTooltip from './overflow-tooltip';\nimport truncate from './truncate';\nimport tooltip from './tooltip';\n\nexport function setupDirective(app) {\n  app.directive('debounce', debounce);\n  app.directive('copy', copy);\n  app.directive('router', router);\n  app.directive('version', version);\n  app.directive('overflow-tooltip', overflowTooltip);\n  app.directive('truncate', truncate);\n  app.directive('tooltip', tooltip);\n}\n"
  },
  {
    "path": "web/console/src/directive/overflow-tooltip.ts",
    "content": "// import { getStyle } from 'element-plus/es/utils/dom/index'\nimport { getStyle } from 'element-plus/es/utils/dom/index'\n/**\n * show-overflow-tooltip for text\n * 当text没有被折叠时，不显示tooltip\n */\nconst akTooltipAutoShow = {\n  created(el, binding, vnode) {\n    const tooltipNode = vnode.children.find(childrenCmpt => childrenCmpt.component?.type.name == 'ElTooltip')\n    if (tooltipNode) {\n      const { content } = tooltipNode.props\n      if (content && ['添加', '编辑', '删除', '查看'].includes(content)) {\n        el.addEventListener('click', (e) => {\n          const defalutDisabled = tooltipNode.component.props.disabled\n          if (!defalutDisabled) {\n            tooltipNode.component.props.disabled = true\n            setTimeout(() => {\n              tooltipNode.component.props.disabled = defalutDisabled\n            }, 200)\n          }\n        })\n      }\n      else {\n        el.addEventListener('mouseenter', (e) => {\n          tooltipNode.component.props.disabled = true\n          const range = document.createRange()\n          range.setStart(el, 0)\n          range.setEnd(el, el.childNodes.length)\n          const rangeWidth = Math.round(range.getBoundingClientRect().width)\n          const padding = (parseInt(getStyle(el, 'paddingLeft'), 10) || 0) + (parseInt(getStyle(el, 'paddingRight'), 10) || 0)\n          if (rangeWidth + padding > el.offsetWidth || el.scrollWidth > el.offsetWidth)\n            tooltipNode.component.props.disabled = false\n        })\n      }\n    }\n  },\n}\nexport default akTooltipAutoShow\n"
  },
  {
    "path": "web/console/src/directive/readme.md",
    "content": "# Vue 指令使用文档\n\n本目录包含了项目中使用的所有 Vue 自定义指令，这些指令提供了常用的功能增强。\n\n## 目录\n\n- [debounce](#debounce) - 防抖指令\n- [copy](#copy) - 复制指令\n- [router](#router) - 路由指令\n- [version](#version) - 版本控制指令\n- [overflow-tooltip](#overflow-tooltip) - 溢出提示指令\n- [truncate](#truncate) - 文本截断指令\n- [tooltip](#tooltip) - 提示框指令\n\n## debounce\n\n防抖指令，用于防止按钮重复点击，并自动添加 loading 状态。\n\n### 功能特性\n\n- 自动防抖处理，避免重复点击\n- 自动添加 loading 状态\n- 支持 ElButton 组件和普通元素\n- 可配置防抖延迟时间\n- 自动清理资源，防止内存泄漏\n\n### 使用方法\n\n```vue\n<template>\n  <!-- 基础用法 -->\n  <el-button v-debounce @click=\"handleClick\">提交</el-button>\n\n  <!-- 自定义延迟时间（毫秒） -->\n  <el-button v-debounce=\"2000\" @click=\"handleClick\">提交</el-button>\n\n  <!-- 普通元素 -->\n  <div v-debounce=\"1000\" @click=\"handleClick\">点击提交</div>\n</template>\n\n<script setup>\nconst handleClick = async () => {\n  // 模拟异步操作\n  await new Promise(resolve => setTimeout(resolve, 2000))\n  console.log(\"操作完成\")\n}\n</script>\n```\n\n### 参数说明\n\n| 参数  | 类型   | 默认值 | 说明                 |\n| ----- | ------ | ------ | -------------------- |\n| value | number | 1000   | 防抖延迟时间（毫秒） |\n\n## copy\n\n复制指令，点击元素时复制指定内容到剪贴板。\n\n### 功能特性\n\n- 一键复制内容到剪贴板\n- 自动显示成功提示\n- 支持动态内容\n\n### 使用方法\n\n```vue\n<template>\n  <!-- 复制固定文本 -->\n  <el-button v-copy=\"'要复制的文本'\">复制文本</el-button>\n\n  <!-- 复制动态内容 -->\n  <el-button v-copy=\"copyContent\">复制内容</el-button>\n\n  <!-- 复制变量值 -->\n  <span v-copy=\"userInfo.email\">{{ userInfo.email }}</span>\n</template>\n\n<script setup>\nimport { ref } from \"vue\"\n\nconst copyContent = ref(\"动态内容\")\nconst userInfo = ref({\n  email: \"user@example.com\",\n})\n</script>\n```\n\n### 参数说明\n\n| 参数  | 类型   | 说明                 |\n| ----- | ------ | -------------------- |\n| value | string | 要复制到剪贴板的内容 |\n\n## router\n\n路由指令，用于处理路由跳转，防止重复点击。\n\n### 功能特性\n\n- 防止路由重复跳转\n- 支持 push 和 back 操作\n- 自动防抖处理\n\n### 使用方法\n\n```vue\n<template>\n  <!-- 路由跳转 -->\n  <el-button v-router.push=\"/user/profile\">跳转到用户资料</el-button>\n\n  <!-- 带参数的路由跳转 -->\n  <el-button v-router.push=\"{ path: '/user', query: { id: 123 } }\"\n    >跳转到用户</el-button\n  >\n\n  <!-- 返回上一页 -->\n  <el-button v-router.back>返回</el-button>\n</template>\n```\n\n### 修饰符说明\n\n| 修饰符 | 说明                            |\n| ------ | ------------------------------- |\n| push   | 使用 router.push() 进行路由跳转 |\n| back   | 使用 router.back() 返回上一页   |\n\n### 参数说明\n\n| 参数  | 类型             | 说明               |\n| ----- | ---------------- | ------------------ |\n| value | string \\| object | 路由路径或路由对象 |\n\n## version\n\n版本控制指令，用于根据版本权限控制元素的显示和交互。\n\n### 功能特性\n\n- 版本权限检查\n- 支持多种模式：tooltip、remove\n- 自动显示版本提示\n- 可配置版本要求\n\n### 使用方法\n\n```vue\n<template>\n  <!-- tooltip 模式：显示提示 -->\n  <el-button\n    v-version=\"{\n      module: 'premium',\n      count: 1,\n      mode: 'tooltip',\n      content: '需要高级版本',\n      placement: 'top',\n    }\"\n    @click=\"premiumFeature\"\n  >\n    高级功能\n  </el-button>\n\n  <!-- remove 模式：直接移除元素 -->\n  <div v-version=\"{ module: 'basic', count: 1, mode: 'remove' }\">\n    基础版本内容\n  </div>\n\n  <!-- 简化用法 -->\n  <el-button v-version=\"{ module: 'pro', count: 2 }\"> 专业功能 </el-button>\n</template>\n```\n\n### 参数说明\n\n| 参数      | 类型   | 默认值    | 说明                        |\n| --------- | ------ | --------- | --------------------------- |\n| module    | string | -         | 模块名称                    |\n| count     | number | -         | 所需版本数量                |\n| mode      | string | 'tooltip' | 模式：'tooltip' 或 'remove' |\n| content   | string | -         | 提示内容                    |\n| placement | string | 'top'     | 提示框位置                  |\n| effect    | string | 'dark'    | 提示框主题                  |\n\n## overflow-tooltip\n\n溢出提示指令，当文本溢出时自动显示 tooltip。\n\n### 功能特性\n\n- 自动检测文本是否溢出\n- 智能显示/隐藏 tooltip\n- 支持特殊按钮文本处理\n\n### 使用方法\n\n```vue\n<template>\n  <!-- 基础用法 -->\n  <div v-overflow-tooltip class=\"text-container\">\n    <el-tooltip content=\"这是一段很长的文本内容\">\n      这是一段很长的文本内容\n    </el-tooltip>\n  </div>\n\n  <!-- 按钮文本处理 -->\n  <div v-overflow-tooltip>\n    <el-tooltip content=\"添加\">\n      <el-button>添加</el-button>\n    </el-tooltip>\n  </div>\n</template>\n\n<style scoped>\n.text-container {\n  width: 200px;\n  overflow: hidden;\n}\n</style>\n```\n\n### 工作原理\n\n- 自动检测文本是否超出容器宽度\n- 对于操作按钮（添加、编辑、删除、查看），点击时临时禁用 tooltip\n- 对于普通文本，鼠标悬停时根据溢出状态显示 tooltip\n\n## truncate\n\n文本截断指令，用于处理长文本的智能截断和显示。\n\n### 功能特性\n\n- 智能文本截断\n- 支持显示总数和剩余数量\n- 自动添加省略号\n- 响应式处理\n\n### 使用方法\n\n```vue\n<template>\n  <!-- 基础用法 -->\n  <div v-truncate class=\"tag-container\">\n    <span class=\"tag\" v-for=\"tag in tags\" :key=\"tag\">{{ tag }}</span>\n  </div>\n\n  <!-- 显示总数 -->\n  <div v-truncate=\"{ node: '.tag', show_total: true }\" class=\"tag-container\">\n    <span class=\"tag\" v-for=\"tag in tags\" :key=\"tag\">{{ tag }}</span>\n  </div>\n\n  <!-- 显示剩余数量 -->\n  <div\n    v-truncate=\"{ node: '.tag', show_remainder: true }\"\n    class=\"tag-container\"\n  >\n    <span class=\"tag\" v-for=\"tag in tags\" :key=\"tag\">{{ tag }}</span>\n  </div>\n\n  <!-- 完整配置 -->\n  <div\n    v-truncate=\"{\n      node: '.tag',\n      show_total: true,\n      show_remainder: true,\n      show_tooltip: true,\n      offset: 20,\n    }\"\n    class=\"tag-container\"\n  >\n    <span class=\"tag\" v-for=\"tag in tags\" :key=\"tag\">{{ tag }}</span>\n  </div>\n</template>\n\n<script setup>\nimport { ref } from \"vue\"\n\nconst tags = ref([\n  \"Vue\",\n  \"React\",\n  \"Angular\",\n  \"TypeScript\",\n  \"JavaScript\",\n  \"Node.js\",\n])\n</script>\n\n<style scoped>\n.tag-container {\n  width: 300px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n.tag {\n  padding: 4px 8px;\n  background: #f0f0f0;\n  border-radius: 4px;\n  font-size: 12px;\n}\n</style>\n```\n\n### 参数说明\n\n| 参数           | 类型    | 默认值 | 说明                 |\n| -------------- | ------- | ------ | -------------------- |\n| node           | string  | -      | 要截断的子元素选择器 |\n| show_total     | boolean | false  | 是否显示总数         |\n| show_remainder | boolean | false  | 是否显示剩余数量     |\n| show_tooltip   | boolean | false  | 是否显示 tooltip     |\n| offset         | number  | 12     | 偏移量（像素）       |\n\n## tooltip\n\n通用提示框指令，提供灵活的 tooltip 功能。\n\n### 功能特性\n\n- 自动判断是否显示 tooltip\n- 支持自定义内容和配置\n- 基于 Element Plus Tooltip 组件\n- 响应式处理\n\n### 使用方法\n\n```vue\n<template>\n  <!-- 自动判断是否显示 -->\n  <div v-tooltip class=\"text-container\">这是一段可能溢出的文本内容</div>\n\n  <!-- 强制显示 -->\n  <div v-tooltip=\"true\" class=\"text-container\">强制显示提示</div>\n\n  <!-- 自定义内容 -->\n  <div v-tooltip=\"{ content: '自定义提示内容' }\" class=\"text-container\">\n    自定义提示\n  </div>\n\n  <!-- 完整配置 -->\n  <div\n    v-tooltip=\"{\n      content: '完整配置的提示',\n      placement: 'bottom',\n      effect: 'light',\n      trigger: 'click',\n    }\"\n    class=\"text-container\"\n  >\n    完整配置\n  </div>\n</template>\n\n<style scoped>\n.text-container {\n  width: 200px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n</style>\n```\n\n### 参数说明\n\n| 参数      | 类型   | 默认值   | 说明       |\n| --------- | ------ | -------- | ---------- |\n| content   | string | 元素内容 | 提示内容   |\n| placement | string | 'top'    | 提示框位置 |\n| effect    | string | 'dark'   | 提示框主题 |\n| trigger   | string | 'hover'  | 触发方式   |\n\n### 配置选项\n\n- **placement**: 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end'\n- **effect**: 'dark' | 'light'\n- **trigger**: 'hover' | 'click' | 'focus' | 'manual'\n\n## 全局注册\n\n所有指令已在 `src/directive/index.ts` 中统一注册，在 `main.ts` 中调用 `setupDirective(app)` 即可全局使用。\n\n```typescript\n// main.ts\nimport { setupDirective } from \"@/directive\"\n\nconst app = createApp(App)\nsetupDirective(app)\napp.mount(\"#app\")\n```\n\n## 注意事项\n\n1. **debounce 指令**：适用于按钮和可点击元素，会自动处理 loading 状态，使用通用定时器管理器防止内存泄漏\n2. **copy 指令**：需要确保复制的内容不为空\n3. **router 指令**：防止重复路由跳转，建议用于导航按钮\n4. **version 指令**：需要配合版本检查工具使用\n5. **overflow-tooltip 指令**：需要配合 ElTooltip 组件使用\n6. **truncate 指令**：适用于标签、按钮等需要截断的场景\n7. **tooltip 指令**：提供通用的提示框功能，可替代 overflow-tooltip\n\n## 相关工具\n\n- **定时器管理器**：`src/utils/timer-manager.ts` - 通用的定时器管理工具，防止内存泄漏\n- **定时器管理器文档**：`src/utils/timer-manager.md` - 详细的使用说明和最佳实践\n\n## 最佳实践\n\n1. 根据具体需求选择合适的指令\n2. 合理配置指令参数，避免过度使用\n3. 注意指令的性能影响，特别是在列表渲染中\n4. 保持指令使用的一致性，提高代码可维护性\n"
  },
  {
    "path": "web/console/src/directive/router.ts",
    "content": "import { router } from '@/router'\n\nlet _routing = false\nconst handler = (el: any, binding: any) => {\n  const params = binding.value\n  const modifiers = binding.modifiers\n  el.addEventListener('click', () => {\n    if (_routing)\n      return\n    _routing = true\n    if (modifiers.push)\n      router.push(params)\n    else if (modifiers.back)\n      router.back()\n\n    const timer = setTimeout(() => {\n      _routing = false\n      clearTimeout(timer)\n    }, 1000)\n  })\n}\nexport default {\n  mounted: handler,\n  updated: handler,\n}\n"
  },
  {
    "path": "web/console/src/directive/tooltip.ts",
    "content": "import { createApp } from 'vue'\nimport { ElTooltip } from 'element-plus'\nimport type { DirectiveBinding } from 'vue'\n\nconst destroyTooltip = (el: any) => {\n  if (el._tipapp) {\n    el._tipapp.unmount()\n    el._tiproot && el._tiproot.remove()\n    el._tipapp = null\n    el._tiproot = null\n  }\n}\n/**\n * 创建tooltip，这里采用element-plus的tooltip组件\n * @param el\n * @param binding\n */\nconst createTooltip = (el: any, binding: DirectiveBinding) => {\n  /**\n   * 判断是否显示tooltip\n   * 如果传值为true，则显示tooltip\n   * 否则，autoShowToolTip 自动判断是否显示tooltip\n   */\n  // 获取指令绑定的值\n  const bindingValue = binding.value || {}\n  // 判断是否显示tooltip\n  const isShow = typeof bindingValue === 'object' ? true : autoShowToolTip(el, binding)\n\n  destroyTooltip(el)\n  // 创建组件，显示tooltip\n  if (isShow) {\n    // 判断是否有根元素，存在，则移除\n    const elRoot = document.querySelector('#agenthub_tooltip_root')\n    if (elRoot)\n      elRoot.remove()\n\n    // 初始化 根元素\n    el._tiproot = null\n    el._tipapp = null\n    const id = 'agenthub_tooltip_root'\n    const _tiproot = document.createElement('div')\n    _tiproot.id = id\n    _tiproot.classList.add('_tiproot')\n\n    // 获取配置参数\n    const content = typeof bindingValue === 'object' && bindingValue.content ? bindingValue.content : el.innerHTML\n    const placement = typeof bindingValue === 'object' && bindingValue.placement ? bindingValue.placement : 'top'\n    const effect = typeof bindingValue === 'object' && bindingValue.effect ? bindingValue.effect : 'dark'\n    const trigger = typeof bindingValue === 'object' && bindingValue.trigger ? bindingValue.trigger : 'hover'\n\n    // 通过createApp 创建实例组件\n    const _tipapp = createApp(ElTooltip, {\n      trigger,\n      virtualRef: el,\n      rawContent: true,\n      placement,\n      effect,\n      virtualTriggering: true,\n      content,\n    })\n\n    el._tiproot = _tiproot\n    el._tipapp = _tipapp\n    // body添加根元素\n    document.body.appendChild(_tiproot)\n    // 将新组件挂载到根元素\n    if (_tipapp && _tiproot)\n      el._tipapp.mount(`#${id}`)\n  }\n}\n\n/**\n * 判断宽度和高度是否自动展示提示内容\n * @param el\n * @param binding\n * @returns\n */\nconst autoShowToolTip = (el: any, binding: DirectiveBinding) => {\n  /**\n   * 通过创建range 获取元素内容的宽度和高度\n   */\n  const range = document.createRange()\n  range.setStart(el, 0)\n  if (el && el.childNodes.length)\n    range.setEnd(el, el.childNodes.length)\n\n  let rangeWidth = range.getBoundingClientRect().width\n  let rangeHeight = range.getBoundingClientRect().height\n  const offsetWidth = rangeWidth - Math.floor(rangeWidth)\n  const offsetHeight = rangeHeight - Math.floor(rangeHeight)\n  if (offsetWidth < 0.001)\n    rangeWidth = Math.floor(rangeWidth)\n\n  if (offsetHeight < 0.001)\n    rangeHeight = Math.floor(rangeHeight)\n\n  // 计算元素在页面中的宽度、高度\n  const style: any = window.getComputedStyle(el, null)\n  const maxWidth = parseInt(style.maxWidth) || parseInt(style.width || style.width) || 0\n  const maxHeight = parseInt(style.height)\n  // 获取元素的padding\n  const pLeft = style['padding-left']\n  const pRight = style['padding-right']\n  const pTop = style['padding-top']\n  const pBottom = style['padding-bottom']\n  // 计算最终宽度、高度\n  const finalWidth = rangeWidth + parseInt(pLeft) + parseInt(pRight)\n  const finalHeight = rangeHeight + parseInt(pTop) + parseInt(pBottom)\n\n  if (finalWidth > maxWidth || finalHeight > maxHeight)\n    return true\n\n  return false\n}\n\n/**\n * 指令 tooltip\n * 使用方式：\n * <div v-tooltip></div>                           - 自动判断是否显示\n * <div v-tooltip=\"true\"></div>                    - 强制显示\n * <div v-tooltip=\"{ content: '自定义内容' }\"></div> - 自定义内容\n * <div v-tooltip=\"{ placement: 'bottom', effect: 'light', trigger: 'click', content: '自定义内容' }\"></div> - 完整配置\n */\nexport default {\n  mounted(el: HTMLElement, binding: DirectiveBinding) {\n    createTooltip(el, binding)\n  },\n  updated(el: HTMLElement, binding: DirectiveBinding) {\n    createTooltip(el, binding)\n  },\n  unmounted(el: HTMLElement) {\n    destroyTooltip(el)\n  },\n}\n"
  },
  {
    "path": "web/console/src/directive/truncate.ts",
    "content": "import { debounce } from '@/utils/functions/debounce'\n\n// const generateUUID = () => {\n// \tif (typeof crypto.randomUUID === 'function') return crypto.randomUUID()\n//   let temp_url = URL.createObjectURL(new Blob())\n//   let uuid = temp_url.toString()\n//   URL.revokeObjectURL(temp_url)\n//   return uuid.substr(uuid.lastIndexOf(\"/\") + 1)\n// }\nconst setElementStyle = (el, style_config = {}) => {\n\tif (!el) return\n\tel.setAttribute('style', Object.entries(style_config).map(([key, val]) => `${key}:${val};`).join(''))\n}\n\nconst handler = (el: any, binding: any = {}, vnode) => {\n  // const ctx = vnode.ctx\n\tconst { value = {} } = binding || {}\n\n\tel.style.display = 'flex'\n\tel.style.itemsAlign = 'center'\n\tel.style.overflow = 'hidden'\n\tel.style.textOverflow = 'ellipsis'\n\tel.style.whiteSpace = 'nowrap'\n\n\tconst node = value.node || (typeof value === 'string' && value) || ''\n\tconst show_total = value.show_total || value.showTotal || false\n\tconst show_tooltip = value.show_tooltip || value.showTooltip || false\n\tconst show_remainder = value.show_remainder || value.showRemainder || false\n\tconst offset = +value.offset || 12\n\tconst child_node_list = (node && el.querySelectorAll(node)) || el.childNodes || []\n\tconst node_list = []\n\tfor (let i = 0; i < child_node_list.length; i++) {\n\t\tconst node_el = child_node_list[i]\n\t\tif (Array.from(node_el.classList || []).map((val) => `.${val}`).some(class_name => class_name === node)) node_list.push(node_el)\n\t}\n\tconst node_total = node_list.length\n\n\tlet suffix_el = el.querySelector(`${node}--suffix`) || null\n\tif (suffix_el && el.contains(suffix_el)) {\n\t\tel.removeChild(suffix_el)\n\t\tsuffix_el = null\n\t}\n\n\tif (!node_total) return\n\tconst container_width = el.clientWidth\n\tlet node_total_width = 0\n\tlet remainder_count = 0\n\tlet is_over_flag = false\n\tlet node_style_config = {\n\t\tdisplay: 'inline-block',\n\t\tflex: 'none',\n\t\twidth: 'max-content',\n\t\toverflow: 'hidden',\n\t\t'text-overflow': 'ellipsis',\n\t\t'white-space': 'nowrap'\n\t}\n\n\tnode_list.forEach((node_el) => {\n\t\tconst node_width = +node_el.clientWidth || 0\n\t\tnode_total_width += node_width\n\t\tif (node_total_width > container_width - offset || !node_width) {\n\t\t\tif (!is_over_flag) suffix_el = node_el.cloneNode()\n\t\t\tnode_style_config.visibility = 'hidden'\n\t\t\tnode_style_config.position = 'absolute'\n\t\t\tis_over_flag = true\n\t\t\tremainder_count++\n\t\t}\n\t\tel.title = (el.title || '') + node_el.innerText\n\t\t// setElementStyle(node_el, {})\n\t\tsetElementStyle(node_el, node_style_config)\n\t})\n\n\tif (!is_over_flag || !show_tooltip) el.removeAttribute('title')\n\n\tif (!suffix_el && (show_total || show_remainder) && node_list[0]) suffix_el = node_list[0].cloneNode()\n\tif (suffix_el) {\n\t\tfor (let i = 0; i < suffix_el.classList.length; i++) {\n\t\t\tif ([node.replace(/\\./img, ''), `${node.replace(/\\./img, '')}--suffix`].includes(suffix_el.classList.item(i))) suffix_el.classList.remove(suffix_el.classList.item(i))\n\t\t}\n\t\tsuffix_el.classList.add(`${node.replace(/\\./img, '')}--suffix`)\n\t\tsuffix_el.innerHTML = `${show_remainder && remainder_count ? `+${remainder_count}` : ''}${is_over_flag ? '...' : ''}${show_total ? `(${node_total})` : ''}`\n\t\tsetElementStyle(suffix_el, {\n\t\t\tflex: 'none',\n\t\t\twidth: 'max-content',\n\t\t})\n\t\tif (suffix_el.innerHTML) el.appendChild(suffix_el)\n\t}\n}\n\nexport default {\n\tmounted: (el, binding, vnode) => {\n\t\thandler(el, binding, vnode)\n\t\tconst resize_observer = new ResizeObserver(entries => {\n\t\t\tentries.forEach(entry => {\n\t\t\t\thandler(entry.target || el, binding, vnode)\n\t\t\t})\n\t\t})\n\t\tresize_observer.observe(el)\n\t},\n\tupdated: handler,\n\tunmounted: (el, binding, vnode) => {\n\t}\n}\n"
  },
  {
    "path": "web/console/src/directive/version.ts",
    "content": "import { checkVersionPermission, showVersionTooltip, checkVersion } from '@/utils/version'\n\nconst handler = (el, binding) => {\n  el._versionParams = binding.value\n  const params = el._versionParams || {}\n  const isTooltipMode = params.mode === 'tooltip'\n  const isRemoveMode = params.mode === 'remove'\n\n  // remove 模式：直接检查版本并移除/显示元素\n  if (isRemoveMode) {\n    // 保存原始的 display 值\n    if (!el._originalDisplay) {\n      el._originalDisplay = getComputedStyle(el).display\n    }\n\n    const passed = checkVersionPermission(params, el)\n    if (!passed) {\n      // 版本检查不通过，直接从 DOM 中移除元素\n      if (el.parentNode) {\n        el.parentNode.removeChild(el)\n      }\n      return\n    }\n    // 版本检查通过，确保元素正常显示\n    if (el._originalDisplay && el._originalDisplay !== 'none') {\n      el.style.display = el._originalDisplay\n    } else {\n      // 如果原始值是 none 或未知，使用默认值\n      el.style.display = ''\n    }\n\n    // 版本检查通过，不需要添加任何事件监听器，直接返回\n    return\n  }\n\n  // 点击事件处理器\n  if (!el._versionHandler) {\n    el._versionHandler = (event) => {\n      const params = el._versionParams || {}\n      const passed = checkVersionPermission(params, el)\n\n      if (!passed) {\n        // 阻止原始的点击事件\n        event.stopPropagation()\n        event.preventDefault()\n        event.stopImmediatePropagation()\n        return false\n      }\n\n      // 如果检查通过，让原始的点击事件继续执行\n      return true\n    }\n  }\n\n  // 鼠标悬停事件处理器（仅在 tooltip 模式下使用）\n  if (isTooltipMode && !el._versionHoverHandler) {\n    el._versionHoverHandler = {\n      mouseenter() {\n        const params = el._versionParams || {}\n        const { content, effect, placement, module, count } = params\n\n        // 检查版本，如果不通过则显示 tooltip\n        if (!checkVersion(module, count)) {\n          showVersionTooltip(el, content, { effect, placement })\n        }\n      },\n      mouseleave() {\n        // 鼠标离开时隐藏 tooltip\n        if (el._versionTooltip) {\n          setTimeout(() => {\n            el._versionTooltip.destroy()\n            delete el._versionTooltip\n          }, 1000)\n        }\n      }\n    }\n  }\n\n  // 移除旧的监听器\n  const clickEvents = ['click', 'mousedown', 'mouseup', 'touchstart', 'touchend']\n  clickEvents.forEach((eventType) => {\n    el.removeEventListener(eventType, el._versionHandler, true)\n  })\n\n  if (el._versionHoverHandler) {\n    el.removeEventListener('mouseenter', el._versionHoverHandler.mouseenter)\n    el.removeEventListener('mouseleave', el._versionHoverHandler.mouseleave)\n  }\n\n  // 添加新的监听器\n  if (isTooltipMode) {\n    // tooltip 模式：添加悬停事件监听器和点击事件监听器（禁用点击）\n    el.addEventListener('mouseenter', el._versionHoverHandler.mouseenter)\n    el.addEventListener('mouseleave', el._versionHoverHandler.mouseleave)\n    if (checkVersion(el._versionParams.module, el._versionParams.count)) {\n      el.style.cursor = 'pointer'\n      el.style.opacity = '1'\n    } else {\n      el.style.cursor = 'not-allowed'\n      el.style.opacity = '0.5'\n    }\n    // 在 tooltip 模式下也要禁用点击事件\n    clickEvents.forEach((eventType) => {\n      el.addEventListener(eventType, el._versionHandler, true)\n    })\n  } else {\n    // dialog 模式：添加点击事件监听器\n    clickEvents.forEach((eventType) => {\n      el.addEventListener(eventType, el._versionHandler, true)\n    })\n  }\n}\n\nexport default {\n  mounted: handler,\n  updated: handler,\n  beforeUnmount: (el) => {\n    // 清理点击事件监听器\n    if (el._versionHandler) {\n      const clickEvents = ['click', 'mousedown', 'mouseup', 'touchstart', 'touchend']\n      clickEvents.forEach((eventType) => {\n        el.removeEventListener(eventType, el._versionHandler, true)\n      })\n      delete el._versionHandler\n    }\n\n    // 清理悬停事件监听器\n    if (el._versionHoverHandler) {\n      el.removeEventListener('mouseenter', el._versionHoverHandler.mouseenter)\n      el.removeEventListener('mouseleave', el._versionHoverHandler.mouseleave)\n      delete el._versionHoverHandler\n    }\n\n    // 清理参数和 tooltip 相关资源\n    delete el._versionParams\n    delete el._originalDisplay\n    if (el._versionTooltip) {\n      el._versionTooltip.destroy()\n      delete el._versionTooltip\n    }\n  }\n}\n"
  },
  {
    "path": "web/console/src/global/filters.ts",
    "content": "import { App } from 'vue'\nimport { getFormatTimeStamp, getSimpleDateFormatString } from '@/utils/moment'\n\nconst filters = {\n  addCommasToNumber(number: number | string) {\n    return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n  },\n  formatTime(time: number) {\n    return getFormatTimeStamp(time)\n  },\n  formatDate(time: number, format = 'YYYY-MM-DD hh:mm') {\n    return getSimpleDateFormatString({\n      date: time,\n      format,\n    })\n  },\n  formatSecret(secret: string) {\n    return `${secret.slice(0, 4)}****${secret.slice(-4)}`\n  },\n} as const\n\n// 定义过滤器类型\nexport type GlobalFilters = typeof filters\n\n/**\n * 设置全局过滤器\n * @param app Vue 应用实例\n */\nexport function setupFilter(app: App) {\n  app.config.globalProperties.$filters = filters\n}\n"
  },
  {
    "path": "web/console/src/global/index.ts",
    "content": "import { App } from 'vue'\nimport { setupFilter } from './filters'\nimport { setupGlobal } from './methods'\n\n/**\n * 统一设置全局配置\n * @param app Vue 应用实例\n */\nexport function setupGlobalConfig(app: App) {\n  setupFilter(app)\n  setupGlobal(app)\n}\n\n// 重新导出所有模块\nexport * from './filters'\nexport * from './methods'\n"
  },
  {
    "path": "web/console/src/global/methods.ts",
    "content": "import { App } from 'vue'\nimport { base_path } from '@/utils/config'\n\n// 允许的键盘按键\nconst ALLOWED_KEYS = [\n  '1',\n  '2',\n  '3',\n  '4',\n  '5',\n  '6',\n  '7',\n  '8',\n  '9',\n  '0',\n  '.',\n  'Backspace',\n  'Delete',\n  'ArrowLeft',\n  'ArrowRight',\n  'ArrowUp',\n  'ArrowDown',\n] as const\n\ntype Key = (typeof ALLOWED_KEYS)[number]\n\nconst methods = {\n  $noop: () => {},\n  $getRealPath: ({ url = '' }: { url: string }): string => {\n    return base_path + (url || '')\n  },\n  $numberInputKeydownHandler: (e: KeyboardEvent) => {\n    if (!ALLOWED_KEYS.includes(e.key as Key)) {\n      e.preventDefault()\n      e.stopPropagation()\n    }\n  },\n} as const\n\n// 定义全局方法类型\nexport type GlobalMethods = typeof methods\n\n/**\n * 设置全局方法\n * @param app Vue 应用实例\n */\nexport function setupGlobal(app: App) {\n  Object.assign(app.config.globalProperties, methods)\n  Object.assign(window, methods)\n}\n"
  },
  {
    "path": "web/console/src/global/readme.md",
    "content": "# Global 全局配置使用指南\n\n## 概述\n\n`src/global` 文件夹包含了 Vue 应用的全局配置，主要提供全局过滤器（Filters）和全局方法（Global Methods）的设置。这些功能可以在整个应用中使用，无需在每个组件中重复导入。\n\n## 文件结构\n\n```\nsrc/global/\n├── index.ts      # 入口文件，统一导出和配置\n├── filters.ts    # 过滤器实现和类型定义\n├── methods.ts    # 全局方法实现和类型定义\n└── readme.md     # 使用指南（本文件）\n```\n\n## 功能模块\n\n### 1. 全局过滤器 (Global Filters)\n\n通过 `setupFilter` 函数设置，提供以下过滤器：\n\n#### `addCommasToNumber`\n\n- **功能**: 为数字添加千位分隔符\n- **参数**: `number: number | string` - 要格式化的数字\n- **返回**: `string` - 格式化后的字符串\n- **使用示例**:\n\n```vue\n<template>\n  <div>{{ $filters.addCommasToNumber(1234567) }}</div>\n  <!-- 输出: 1,234,567 -->\n</template>\n```\n\n#### `formatTime`\n\n- **功能**: 格式化时间戳\n- **参数**: `time: number` - 时间戳\n- **返回**: `string` - 格式化后的时间字符串\n- **使用示例**:\n\n```vue\n<template>\n  <div>{{ $filters.formatTime(1640995200000) }}</div>\n  <!-- 输出: 2022-01-01 00:00:00 -->\n</template>\n```\n\n#### `formatDate`\n\n- **功能**: 格式化日期，支持自定义格式\n- **参数**:\n  - `time: number` - 时间戳\n  - `format: string` - 日期格式（可选，默认为 'YYYY-MM-DD hh:mm'）\n- **返回**: `string` - 格式化后的日期字符串\n- **使用示例**:\n\n```vue\n<template>\n  <div>{{ $filters.formatDate(1640995200000) }}</div>\n  <!-- 输出: 2022-01-01 00:00 -->\n\n  <div>{{ $filters.formatDate(1640995200000, \"YYYY年MM月DD日\") }}</div>\n  <!-- 输出: 2022年01月01日 -->\n</template>\n```\n\n### 2. 全局方法 (Global Methods)\n\n通过 `setupGlobal` 函数设置，提供以下全局方法：\n\n#### `$noop`\n\n- **功能**: 空操作函数，用于占位或默认回调\n- **参数**: 无\n- **返回**: `undefined`\n- **使用示例**:\n\n```vue\n<script setup>\n// 在组件中使用\nconst handleClick = () => {\n  // 使用全局空操作函数\n  $noop()\n}\n</script>\n```\n\n#### `$getRealPath`\n\n- **功能**: 获取资源的真实路径\n- **参数**: `{ url: string }` - 包含 URL 的对象\n- **返回**: `string` - 完整的资源路径\n- **使用示例**:\n\n```vue\n<script setup>\n// 在组件中使用\nconst imagePath = $getRealPath({ url: \"/images/logo.png\" })\n// 返回: base_path + '/images/logo.png'\n</script>\n```\n\n#### `$numberInputKeydownHandler`\n\n- **功能**: 数字输入框的键盘事件处理器，只允许数字、小数点和导航键\n- **参数**: `e: KeyboardEvent` - 键盘事件对象\n- **返回**: `void`\n- **使用示例**:\n\n```vue\n<template>\n  <input\n    type=\"text\"\n    @keydown=\"$numberInputKeydownHandler\"\n    placeholder=\"请输入数字\"\n  />\n</template>\n```\n\n## 安装和配置\n\n### 1. 在 main.ts 中注册\n\n```typescript\nimport { createApp } from \"vue\"\nimport App from \"./App.vue\"\nimport { setupGlobalConfig } from \"@/global\"\n\nconst app = createApp(App)\n\n// 统一设置全局配置\nsetupGlobalConfig(app)\n\napp.mount(\"#app\")\n```\n\n或者分别设置：\n\n```typescript\nimport { createApp } from \"vue\"\nimport App from \"./App.vue\"\nimport { setupFilter, setupGlobal } from \"@/global\"\n\nconst app = createApp(App)\n\n// 分别设置全局过滤器和全局方法\nsetupFilter(app)\nsetupGlobal(app)\n\napp.mount(\"#app\")\n```\n\n### 2. 在组件中使用\n\n#### 使用过滤器\n\n```vue\n<template>\n  <div>\n    <!-- 数字格式化 -->\n    <p>价格: {{ $filters.addCommasToNumber(1234567) }}</p>\n\n    <!-- 时间格式化 -->\n    <p>时间: {{ $filters.formatTime(timestamp) }}</p>\n\n    <!-- 日期格式化 -->\n    <p>日期: {{ $filters.formatDate(timestamp, \"YYYY-MM-DD\") }}</p>\n  </div>\n</template>\n\n<script setup>\nimport { ref } from \"vue\"\n\nconst timestamp = ref(1640995200000)\n</script>\n```\n\n#### 使用全局方法\n\n```vue\n<template>\n  <div>\n    <input\n      v-model=\"numberValue\"\n      @keydown=\"$numberInputKeydownHandler\"\n      placeholder=\"请输入数字\"\n    />\n    <img :src=\"$getRealPath({ url: '/images/icon.png' })\" alt=\"图标\" />\n  </div>\n</template>\n\n<script setup>\nimport { ref } from \"vue\"\n\nconst numberValue = ref(\"\")\n</script>\n```\n\n## TypeScript 支持\n\n所有全局方法和过滤器都支持 TypeScript 类型检查。在 Vue 3 中，全局方法可以直接调用，过滤器通过 `$filters` 对象调用，无需使用 `this`。类型定义与实现逻辑在同一文件中，便于维护：\n\n```typescript\n// 过滤器类型\ndeclare module \"@vue/runtime-core\" {\n  interface ComponentCustomProperties {\n    $filters: {\n      addCommasToNumber: (number: number | string) => string\n      formatTime: (time: number) => string\n      formatDate: (time: number, format?: string) => string\n    }\n  }\n}\n\n// 全局方法类型 - Vue 3 Composition API\ndeclare global {\n  interface Window {\n    $noop: () => void\n    $getRealPath: (params: { url: string }) => string\n    $numberInputKeydownHandler: (e: KeyboardEvent) => void\n  }\n}\n\n// 在 Composition API 中使用的类型声明\ndeclare module \"vue\" {\n  interface ComponentCustomProperties {\n    $noop: () => void\n    $getRealPath: (params: { url: string }) => string\n    $numberInputKeydownHandler: (e: KeyboardEvent) => void\n  }\n}\n```\n\n## 最佳实践\n\n### 1. 过滤器使用建议\n\n- 在 Vue 3 中，过滤器通过 `$filters.xxx()` 的方式调用\n- 优先使用过滤器进行数据格式化，保持模板的简洁性\n- 对于复杂的格式化逻辑，考虑使用计算属性\n- 过滤器是纯函数，不应该有副作用\n\n### 2. 全局方法使用建议\n\n- 全局方法应该只包含通用的工具函数\n- 避免在全局方法中包含业务逻辑\n- 使用 TypeScript 类型定义确保类型安全\n- 在 Vue 3 Composition API 中，全局方法可以直接调用，无需使用 `this`\n\n### 3. 性能优化\n\n- 过滤器会在每次数据变化时重新计算，对于复杂计算考虑使用计算属性\n- 全局方法会被挂载到每个组件实例上，注意内存使用\n\n## 扩展指南\n\n### 添加新的过滤器\n\n```typescript\n// 在 setupFilter 函数中添加\nexport function setupFilter(app) {\n  app.config.globalProperties.$filters = {\n    // 现有过滤器...\n\n    // 新增过滤器\n    formatCurrency(value: number, currency = \"CNY\") {\n      return new Intl.NumberFormat(\"zh-CN\", {\n        style: \"currency\",\n        currency,\n      }).format(value)\n    },\n  }\n}\n```\n\n### 添加新的全局方法\n\n```typescript\n// 在 setupGlobal 函数中添加\nexport function setupGlobal(app) {\n  const globalMethods = {\n    // 现有方法...\n\n    // 新增方法\n    $debounce: (func: Function, delay: number) => {\n      let timeoutId: NodeJS.Timeout\n      return (...args: any[]) => {\n        clearTimeout(timeoutId)\n        timeoutId = setTimeout(() => func.apply(null, args), delay)\n      }\n    },\n  }\n\n  Object.assign(app.config.globalProperties, globalMethods)\n  Object.assign(window, globalMethods)\n}\n```\n\n## 注意事项\n\n1. **命名规范**: 全局方法以 `$` 开头，避免与组件属性冲突\n2. **类型安全**: 使用 TypeScript 确保类型安全\n3. **测试**: 为全局功能编写单元测试\n4. **文档**: 及时更新文档，说明新功能的使用方法\n5. **兼容性**: 确保全局功能在不同浏览器中正常工作\n\n## 相关文件\n\n- `src/global/filters.ts` - 过滤器实现和类型定义\n- `src/global/methods.ts` - 全局方法实现和类型定义\n- `src/utils/config.ts` - 基础路径配置\n- `src/utils/moment.ts` - 时间格式化工具\n- `src/main.ts` - 应用入口文件\n"
  },
  {
    "path": "web/console/src/hooks/useBasicLayout.ts",
    "content": "import { computed } from 'vue'\nimport { breakpointsTailwind, useBreakpoints } from '@vueuse/core'\n\nexport function useBasicLayout() {\n  const breakpoints = useBreakpoints(breakpointsTailwind)\n\n  const isInMobile = computed(() => /Android|iPhone|SymbianOS|Windows Phone|iPad|iPod/gi.test(navigator.userAgent))\n  const isInDingTalk = computed(() => /dingtalk/img.test(navigator.userAgent))\n\n  const isSm = breakpoints.smaller('sm')\n  const isMiddle = breakpoints.smaller('md')\n  const isLarge = breakpoints.smaller('lg')\n  const isXl = breakpoints.smaller('xl')\n\n  return { isInMobile, isInDingTalk, isSm, isMiddle, isLarge, isXl }\n}\n"
  },
  {
    "path": "web/console/src/hooks/useEntityInfo.ts",
    "content": "import { ref } from 'vue'\nimport { userApi, INTERNAL_USER_STATUS_ALL } from '@/api/modules/user'\nimport { groupApi } from '@/api/modules/group'\nimport { GROUP_TYPE } from '@/constants/group'\nimport cache from '@/utils/cache'\nimport type { EntityType, UserInfo, GroupInfo, EntityInfo, EntityCacheConfig } from '@/types/entity'\nimport { ENTITY_TYPE } from '@/types/entity'\n\n/**\n * 统一实体信息管理 Composable\n * 提供用户和群组信息获取和缓存功能\n */\nexport function useEntityInfo() {\n  const loading = ref(false)\n\n  // 请求去重：存储正在进行的请求 Promise\n  const pendingRequests = new Map<string, Promise<EntityInfo[]>>()\n\n  /**\n   * 缓存配置\n   */\n  const cacheConfig: Record<EntityType, EntityCacheConfig> = {\n    [ENTITY_TYPE.USER]: {\n      duration: 5, // 5分钟\n      keyPrefix: 'all_users_list',\n    },\n    [ENTITY_TYPE.GROUP]: {\n      duration: 5, // 5分钟\n      keyPrefix: 'all_groups_list',\n    },\n  }\n\n  /**\n   * 通用的缓存获取方法\n   * @param type 实体类型\n   * @param fetcher 数据获取函数\n   * @returns 实体列表\n   */\n  const getCachedEntities = async <T extends EntityInfo>(\n    type: EntityType,\n    fetcher: () => Promise<T[]>\n  ): Promise<T[]> => {\n    const config = cacheConfig[type]\n    const cacheKey = config.keyPrefix\n\n    // 如果已经有正在进行的请求，直接返回该请求的 Promise\n    if (pendingRequests.has(cacheKey)) {\n      return pendingRequests.get(cacheKey) as Promise<T[]>\n    }\n    // 检查缓存\n    const cached = await cache.get<T[]>(cacheKey)\n    if (cached) {\n      return cached\n    }\n\n    // 创建新的请求\n    const request = (async () => {\n      try {\n        loading.value = true\n\n        const entities = await cache.getOrFetch(cacheKey, fetcher, config.duration)\n        return entities\n      } catch (error) {\n        console.error(`获取${type === ENTITY_TYPE.USER ? '用户' : '群组'}列表失败:`, error)\n        return []\n      } finally {\n        loading.value = false\n        // 清除正在进行的请求标记\n        pendingRequests.delete(cacheKey)\n      }\n    })()\n\n    pendingRequests.set(cacheKey, request)\n    return request\n  }\n\n  /**\n   * 获取所有用户列表（带缓存）\n   * @returns 所有用户列表\n   */\n  const getAllUsers = async (): Promise<UserInfo[]> => {\n    return getCachedEntities(ENTITY_TYPE.USER, async () => {\n      const params = {\n        status: INTERNAL_USER_STATUS_ALL as typeof INTERNAL_USER_STATUS_ALL,\n        offset: 0,\n        limit: 10000,\n      }\n\n      const res = await userApi.fetch_internal_user(params)\n      return res.list.map(\n        (item: Record<string, unknown>): UserInfo => ({\n          user_id: Number(item.user_id) || 0,\n          nickname: String(item.nickname || item.name || ''),\n          name: String(item.name || ''),\n          avatar: String(item.avatar || ''),\n          email: String(item.email || ''),\n          mobile: String(item.mobile || ''),\n          role: Number(item.role) || 1,\n          status: Number(item.status) || 1,\n          departments: Array.isArray(item.departments) ? item.departments : [],\n          created_time: Number(item.created_time) || 0,\n          value: Number(item.user_id) || 0,\n          label: String(item.nickname || item.name || ''),\n        })\n      )\n    })\n  }\n\n  /**\n   * 获取所有群组列表（带缓存）\n   * @returns 所有群组列表\n   */\n  const getAllGroups = async (): Promise<GroupInfo[]> => {\n    return getCachedEntities(ENTITY_TYPE.GROUP, async () => {\n      const res = await groupApi.list({ params: { group_type: GROUP_TYPE.INTERNAL_USER } })\n      return res.map(\n        (item: Record<string, unknown>): GroupInfo => ({\n          group_id: Number(item.group_id) || 0,\n          group_name: String(item.group_name || ''),\n          sort: Number(item.sort) || 0,\n          value: Number(item.group_id) || 0,\n          label: String(item.group_name || ''),\n          avatar: String(item.avatar || ''),\n        })\n      )\n    })\n  }\n\n  /**\n   * 根据类型获取所有实体列表\n   * @param type 实体类型\n   * @returns 实体列表\n   */\n  const getAllEntities = async (type: EntityType): Promise<EntityInfo[]> => {\n    switch (type) {\n      case ENTITY_TYPE.USER:\n        return getAllUsers()\n      case ENTITY_TYPE.GROUP:\n        return getAllGroups()\n      default:\n        return []\n    }\n  }\n\n  /**\n   * 获取用户信息（从缓存的用户列表中查找）\n   * @param userId 用户ID\n   * @returns 用户信息\n   */\n  const getUserInfo = async (userId: number): Promise<UserInfo | null> => {\n    if (!userId) return null\n\n    try {\n      const allUsers = await getAllUsers()\n      const user = allUsers.find((item: UserInfo) => +item.user_id === +userId)\n      return user || null\n    } catch (error) {\n      console.error('获取用户信息失败:', error)\n      return null\n    }\n  }\n\n  /**\n   * 获取群组信息（从缓存的群组列表中查找）\n   * @param groupId 群组ID\n   * @returns 群组信息\n   */\n  const getGroupInfo = async (groupId: number): Promise<GroupInfo | null> => {\n    if (!groupId) return null\n\n    try {\n      const allGroups = await getAllGroups()\n      const group = allGroups.find((item: GroupInfo) => +item.group_id === +groupId)\n      return group || null\n    } catch (error) {\n      console.error('获取群组信息失败:', error)\n      return null\n    }\n  }\n\n  /**\n   * 统一获取实体信息\n   * @param type 实体类型\n   * @param id 实体ID\n   * @returns 实体信息\n   */\n  const getEntityInfo = async (type: EntityType, id: number): Promise<EntityInfo | null> => {\n    switch (type) {\n      case ENTITY_TYPE.USER:\n        return getUserInfo(id)\n      case ENTITY_TYPE.GROUP:\n        return getGroupInfo(id)\n      default:\n        return null\n    }\n  }\n\n  /**\n   * 批量获取用户信息\n   * @param userIds 用户ID数组\n   * @returns 用户信息数组\n   */\n  const getBatchUserInfo = async (userIds: number[]): Promise<UserInfo[]> => {\n    if (!userIds.length) return []\n\n    try {\n      const allUsers = await getAllUsers()\n      const users = allUsers.filter((item: UserInfo) => userIds.includes(+item.user_id))\n      return users\n    } catch (error) {\n      console.error('批量获取用户信息失败:', error)\n      return []\n    }\n  }\n\n  /**\n   * 批量获取群组信息\n   * @param groupIds 群组ID数组\n   * @returns 群组信息数组\n   */\n  const getBatchGroupInfo = async (groupIds: number[]): Promise<GroupInfo[]> => {\n    if (!groupIds.length) return []\n\n    try {\n      const allGroups = await getAllGroups()\n      const groups = allGroups.filter((item: GroupInfo) => groupIds.includes(+item.group_id))\n      return groups\n    } catch (error) {\n      console.error('批量获取群组信息失败:', error)\n      return []\n    }\n  }\n\n  /**\n   * 批量获取实体信息\n   * @param type 实体类型\n   * @param ids 实体ID数组\n   * @returns 实体信息数组\n   */\n  const getBatchEntityInfo = async (type: EntityType, ids: number[]): Promise<EntityInfo[]> => {\n    switch (type) {\n      case ENTITY_TYPE.USER:\n        return getBatchUserInfo(ids)\n      case ENTITY_TYPE.GROUP:\n        return getBatchGroupInfo(ids)\n      default:\n        return []\n    }\n  }\n\n  /**\n   * 清除实体信息缓存\n   * @param type 实体类型，不传则清除所有缓存\n   * @param id 实体ID，不传则清除该类型的所有缓存\n   */\n  const clearEntityCache = (type?: EntityType, id?: number) => {\n    if (type) {\n      const cacheKey = cacheConfig[type].keyPrefix\n      // 清除正在进行的请求\n      pendingRequests.delete(cacheKey)\n      // 清除缓存\n      cache.delete(cacheKey)\n    } else {\n      // 清除所有缓存\n      Object.values(cacheConfig).forEach(config => {\n        pendingRequests.delete(config.keyPrefix)\n        cache.delete(config.keyPrefix)\n      })\n    }\n  }\n\n  /**\n   * 清除用户信息缓存（兼容性方法）\n   */\n  const clearUserCache = () => {\n    clearEntityCache(ENTITY_TYPE.USER)\n  }\n\n  /**\n   * 清除群组信息缓存（兼容性方法）\n   */\n  const clearGroupCache = () => {\n    clearEntityCache(ENTITY_TYPE.GROUP)\n  }\n\n  return {\n    // 状态\n    loading,\n\n    // 统一方法\n    getEntityInfo,\n    getBatchEntityInfo,\n    getAllEntities,\n    clearEntityCache,\n\n    // 用户相关方法（兼容性）\n    getUserInfo,\n    getBatchUserInfo,\n    getAllUsers,\n    clearUserCache,\n\n    // 群组相关方法（兼容性）\n    getGroupInfo,\n    getBatchGroupInfo,\n    getAllGroups,\n    clearGroupCache,\n  }\n}\n"
  },
  {
    "path": "web/console/src/hooks/useEnv.ts",
    "content": "import { ref } from 'vue'\n\nfunction useEnv() {\n  const { host, hostname } = window.location\n\n  // https://hub.53ai.com/console/\n  // https://hubtest.53ai.com/console/\n  const isWorkEnv = ref<boolean>(host === 'hub.53ai.com')\n  const isDevEnv = ref<boolean>(!isWorkEnv.value)\n  const isOpLocalEnv = ref<boolean>(import.meta.env.VITE_PLATFORM === 'op-local')\n\n  return {\n    isWorkEnv,\n    isDevEnv,\n    isOpLocalEnv\n  }\n}\n\nexport { useEnv }\nexport default useEnv\n"
  },
  {
    "path": "web/console/src/hooks/useMobile.ts",
    "content": "import { computed, reactive } from 'vue'\nimport type { FormRules } from 'element-plus'\nimport api from '@/apis'\nimport { debounce } from '@/utils/functions/debounce'\n\nexport default () => {\n  const mobileForm = reactive({\n    mobile: '',\n    code: '',\n    countdown: 0,\n  })\n  const mobileRules = reactive<FormRules>({\n    mobile: [{\n      validator: (rule: any, value: any, callback: any) => {\n        if (/^1\\d{10}$/.test(value))\n\t\t\t\t\t callback()\n\t\t\t\t else\n\t\t\t\t\t callback(new Error('请输入正确的手机号'))\n      },\n      trigger: ['blur', 'change'],\n    }],\n    code: [{\n      validator: (rule: any, value: any, callback: any) => {\n        if (/^\\d{4}$/.test(value))\n\t\t\t\t\t callback()\n\t\t\t\t else\n\t\t\t\t\t callback(new Error('请输入正确的验证码'))\n      },\n      trigger: ['blur', 'change'],\n    }],\n  })\n\n  const isMobile = computed(() => /^1\\d{10}$/.test(mobileForm.mobile))\n\n  let _countTimer: any\n  const countdown = () => {\n    clearTimeout(_countTimer)\n    _countTimer = setTimeout(() => {\n      mobileForm.countdown -= 1\n      if (mobileForm.countdown <= 0)\n        return\n      countdown()\n    }, 1000)\n  }\n\n  const handleSendCode = debounce(() => {\n    api.v3.users.sendcode(mobileForm.mobile)\n      .then(() => {\n        mobileForm.countdown = 60\n        countdown()\n        ElMessage.success('已发送')\n      })\n  }, 1000)\n\n  return {\n    mobileForm,\n    mobileRules,\n    isMobile,\n    handleSendCode,\n  }\n}\n"
  },
  {
    "path": "web/console/src/hooks/useScroll.ts",
    "content": "import type { Ref } from 'vue'\nimport { nextTick, ref } from 'vue'\n\ntype ScrollElement = HTMLDivElement | null\n\ninterface ScrollReturn {\n  scrollRef: Ref<ScrollElement>\n  scrollToBottom: () => Promise<void>\n  scrollToTop: () => Promise<void>\n  scrollTo: (selector: string, diff?: number) => Promise<void>\n  scrollToBottomIfAtBottom: () => Promise<void>\n}\n\nexport function useScroll(): ScrollReturn {\n  const scrollRef = ref<ScrollElement>(null)\n\n  const scrollToBottom = async () => {\n    await nextTick()\n    if (scrollRef.value)\n      scrollRef.value.scrollTop = scrollRef.value.scrollHeight\n  }\n\n  const scrollToTop = async () => {\n    await nextTick()\n    if (scrollRef.value)\n      scrollRef.value.scrollTop = 0\n  }\n\n  const scrollToBottomIfAtBottom = async () => {\n    await nextTick()\n    if (scrollRef.value) {\n      const threshold = 100 // 阈值，表示滚动条到底部的距离阈值\n      const distanceToBottom = scrollRef.value.scrollHeight - scrollRef.value.scrollTop - scrollRef.value.clientHeight\n      if (distanceToBottom <= threshold)\n        scrollRef.value.scrollTop = scrollRef.value.scrollHeight\n    }\n  }\n\n  const scrollTo = async (selector: string, diff = 0) => {\n    await nextTick()\n    const node = document.querySelector(selector)\n    if (scrollRef.value && node)\n      scrollRef.value.scrollTop = node.offsetTop + diff\n    await nextTick()\n  }\n  const scrollToVal = async (value: number) => {\n    await nextTick()\n    if (scrollRef.value)\n      scrollRef.value.scrollTop = value\n  }\n\n  return {\n    scrollRef,\n    scrollToBottom,\n    scrollToTop,\n    scrollTo,\n    scrollToVal,\n    scrollToBottomIfAtBottom,\n  }\n}\n"
  },
  {
    "path": "web/console/src/hooks/useSso.ts",
    "content": "import { computed, ref } from 'vue'\nimport { useSettingStore, useEnterpriseStore } from '@/stores'\nimport { ENTERPRISE_SYNC_FROM } from '@/constants/enterprise'\n\nimport type { EnterpriseSyncFrom } from '@/constants/enterprise'\nimport cacheManager from '@/utils/cache'\n\nexport const useSso = () => {\n  const settingStore = useSettingStore()\n\n  const enterprise = useEnterpriseStore()\n\n  const SYNC_VALUE_KEY = 'sso_sync_from'\n\n  const syncValue = ref<{\n    key: string\n    setting_id: number\n    value: EnterpriseSyncFrom\n  }>({\n    key: SYNC_VALUE_KEY,\n    setting_id: 0,\n    value: ENTERPRISE_SYNC_FROM.DEFAULT,\n  })\n\n  const loadSyncSetting = async () => {\n    if (!enterprise.info.is_install_wecom && !enterprise.info.is_install_dingtalk) return\n    const value = await cacheManager.getOrFetch(SYNC_VALUE_KEY, () =>\n      settingStore.get(SYNC_VALUE_KEY)\n    )\n    syncValue.value = value || {\n      key: SYNC_VALUE_KEY,\n      setting_id: 0,\n      value: ENTERPRISE_SYNC_FROM.DEFAULT,\n    }\n  }\n\n  const saveSyncSetting = async (value: string) => {\n    const data = await settingStore.save(syncValue.value.setting_id, {\n      value,\n      key: SYNC_VALUE_KEY,\n    })\n    cacheManager.delete(SYNC_VALUE_KEY)\n    syncValue.value = data\n  }\n\n  const isSsoSync = computed(() => syncValue.value.value !== ENTERPRISE_SYNC_FROM.DEFAULT)\n  return {\n    syncValue,\n    isSsoSync,\n    loadSyncSetting,\n    saveSyncSetting,\n  }\n}\n"
  },
  {
    "path": "web/console/src/hooks/useTooltip.ts",
    "content": "import type { Ref } from 'vue'\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\n\ninterface toolReturn {\n  tooltipVisible: Ref<boolean>\n}\n\nexport default function useTooltip(): toolReturn {\n  const tooltipVisible = ref(false)\n  const findParent = (el: any): boolean => {\n    if (el.classList && el.classList.contains('el-popper'))\n      return true\n    if (el.parentNode)\n      return findParent(el.parentNode)\n    return false\n  }\n\n  const hidePromptTooltip = (e) => {\n    if (!findParent(e.target))\n      tooltipVisible.value = false\n  }\n\n  onMounted(() => {\n    document.addEventListener('click', hidePromptTooltip)\n  })\n\n  onBeforeUnmount(() => {\n    // 移除监听器\n    document.removeEventListener('click', hidePromptTooltip)\n  })\n  return {\n    tooltipVisible,\n  }\n}\n"
  },
  {
    "path": "web/console/src/hooks/useVmodel.ts",
    "content": "import { getCurrentInstance, ref } from 'vue'\n\ninterface UseVmodelOptions {\n  props: any\n  key?: string\n  emits?: any\n}\nexport default function useVmodel(options: UseVmodelOptions) {\n  const vm = getCurrentInstance()\n  const { props, key = 'modelValue', emits } = options\n  const _emit = emits || vm?.emit\n  const event = `update:${key}`\n  const proxy = ref(props[key])\n\n  // watch(\n  //   () => proxy.value,\n  //   v => _emit(event, v),\n  // )\n  return proxy\n}\n"
  },
  {
    "path": "web/console/src/icons/403.vue",
    "content": "<template>\n  <div class=\"text-[#142D6E] dark:text-[#3a71ff]\">\n    <svg viewBox=\"0 0 400 300\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><mask id=\"a\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"31\" y=\"31\" width=\"338\" height=\"238\"><path d=\"M368.9 31H31v238h337.9V31Z\" fill=\"#fff\" /></mask><g mask=\"url(#a)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path d=\"m357.4 219.2 3.4-39.3-58.7-5.1-3.4 39.3 58.7 5.1Z\" fill=\"#fff\" /><path d=\"M299.4 213.9h-.4v-.4l-.5-.1v.9l.8.1.1-.5ZM355.5 218.8l-1.3-.1v.5l1.3.1v-.5ZM353 218.5l-1.3-.1v.5l1.3.1v-.5ZM350.4 218.3l-1.3-.1v.5l1.3.1v-.5ZM347.9 218.1l-1.3-.1v.5l1.3.1v-.5ZM345.4 217.9l-1.3-.1v.5l1.3.1v-.5ZM342.8 217.6l-1.3-.1v.5l1.3.1v-.5ZM340.3 217.4l-1.3-.1v.5l1.3.1v-.5ZM337.7 217.2l-1.3-.1v.5l1.3.1v-.5ZM335.2 217l-1.3-.1v.5l1.3.1v-.5ZM332.7 216.8l-1.3-.1v.5l1.3.1v-.5ZM330.1 216.5l-1.3-.1v.5l1.3.1v-.5ZM327.6 216.3l-1.3-.1v.5l1.3.1v-.5ZM325.1 216.1l-1.3-.1v.5l1.3.1v-.5ZM322.5 215.9l-1.3-.1v.5l1.3.1v-.5ZM320 215.7l-1.3-.1v.5l1.3.1v-.5ZM317.5 215.4l-1.3-.1v.5l1.3.1v-.5ZM314.9 215.2l-1.3-.1v.5l1.3.1v-.5ZM312.4 215l-1.3-.1v.5l1.3.1v-.5ZM309.8 214.8l-1.3-.1v.5l1.3.1v-.5ZM307.3 214.6l-1.3-.1v.5l1.3.1v-.5ZM304.8 214.3l-1.3-.1v.5l1.3.1v-.5ZM302.2 214.1l-1.3-.1v.5l1.3.1v-.5ZM357.7 218.6l-.4-.1-.1.4h-.4v.5h.9v-.8ZM357.9 216h-.5l-.1 1.2.5.1.1-1.3ZM358.1 213.7h-.5l-.1 1.2h.5l.1-1.2ZM358.3 211.2h-.5l-.1 1.2h.5l.1-1.2ZM358.6 208.8h-.5l-.1 1.2h.5l.1-1.2ZM358.8 206.3h-.5l-.1 1.2h.5l.1-1.2ZM359 203.9h-.5l-.1 1.2h.5l.1-1.2ZM359.2 201.4h-.5l-.1 1.2h.5l.1-1.2ZM359.4 199h-.5l-.1 1.2h.5l.1-1.2ZM359.6 196.5h-.5l-.1 1.2h.5l.1-1.2ZM359.8 194.1h-.5l-.1 1.2h.5l.1-1.2ZM360 191.6h-.5l-.1 1.2h.5l.1-1.2ZM360.2 189.1h-.5l-.1 1.2h.5l.1-1.2ZM360.4 186.7h-.5l-.1 1.2h.5l.1-1.2ZM360.6 184.2h-.5l-.1 1.2h.5l.1-1.2ZM360.8 181.8h-.5l-.1 1.2h.5l.1-1.2ZM361 179.7l-.8-.1-.1.5h.4v.4h.5v-.8ZM358.9 179.5l-1.3-.1v.5l1.3.1v-.5ZM356.3 179.3l-1.3-.1v.5l1.3.1v-.5ZM353.8 179l-1.3-.1v.5l1.3.1v-.5ZM351.2 178.8l-1.3-.1v.5l1.3.1v-.5ZM348.7 178.6l-1.3-.1v.5l1.3.1v-.5ZM346.2 178.4l-1.3-.1v.5l1.3.1v-.5ZM343.6 178.1l-1.3-.1v.5l1.3.1v-.5ZM341.1 177.9l-1.3-.1v.5l1.3.1v-.5ZM338.6 177.7l-1.3-.1v.5l1.3.1v-.5ZM336 177.5l-1.3-.1v.5l1.3.1v-.5ZM333.5 177.3l-1.3-.1v.5l1.3.1v-.5ZM330.9 177l-1.3-.1v.5l1.3.1v-.5ZM328.4 176.8l-1.3-.1v.5l1.3.1v-.5ZM325.9 176.6l-1.3-.1v.5l1.3.1v-.5ZM323.3 176.4l-1.3-.1v.5l1.3.1v-.5ZM320.6 176.2l-1.3-.1.2.5 1.3.1-.2-.5ZM318.3 175.9l-1.3-.1v.5l1.3.1v-.5ZM315.7 175.7l-1.3-.1v.5l1.3.1v-.5ZM313.2 175.5l-1.3-.1v.5l1.3.1v-.5ZM310.7 175.3l-1.3-.1v.5l1.3.1v-.5ZM308.1 175.1l-1.3-.1v.5l1.3.1v-.5ZM305.6 174.8l-1.3-.1v.5l1.3.1v-.5ZM302.3 175.1h.4v-.5h-.9v.8l.4.1.1-.4ZM299.2 211.1h-.5l-.1 1.2h.5l.1-1.2ZM299.4 208.6h-.5l-.1 1.2h.5l.1-1.2ZM299.6 206.2h-.5l-.1 1.2h.5l.1-1.2ZM299.8 203.7h-.5l-.1 1.2h.5l.1-1.2ZM300 201.3h-.5l-.1 1.2h.5l.1-1.2ZM300.3 198.8h-.5l-.1 1.2h.5l.1-1.2ZM300.5 196.3h-.5l-.1 1.2h.5l.1-1.2ZM300.7 193.9h-.5l-.1 1.2h.5l.1-1.2ZM300.9 191.4h-.5l-.1 1.2h.5l.1-1.2ZM301.1 189h-.5l-.1 1.2h.5l.1-1.2ZM301.3 186.5h-.5l-.1 1.2h.5l.1-1.2ZM301.5 184.1h-.5l-.1 1.2h.5l.1-1.2ZM301.7 181.6h-.5l-.1 1.2h.5l.1-1.2ZM301.9 179.2h-.5l-.1 1.2h.5l.1-1.2ZM302.1 176.7h-.5l-.1 1.2h.5l.1-1.2Z\" fill=\"#DBDBDB\" /><path d=\"m355.2 216.5 2.9-34.4-53.8-4.6-2.9 34.4 53.8 4.6Z\" fill=\"#EBEBEB\" /><path d=\"M333.895 197.096c.2-2.5-1.7-4.7-4.2-4.9-2.5-.2-4.7 1.7-4.9 4.2-.2 2.5 1.7 4.7 4.2 4.9 2.5.2 4.7-1.7 4.9-4.2Zm-7.79-.491c-.1 1.8 1.3 3.4 3.1 3.5 1.8.1 3.4-1.2 3.5-3 .1-1.9-1.3-3.5-3.1-3.6-1.8-.1-3.4 1.3-3.5 3.1Z\" fill=\"#DBDBDB\" /><path d=\"m316.8 195.802.4.5c3.6 4.2 7.5 6.5 11.7 6.8l.7.1c6.8.1 11.6-4.9 11.8-5.1l.4-.4-.3-.4c-.2-.2-4.2-5.9-10.9-6.8-4.4-.6-8.9 1.1-13.3 4.9l-.5.4Zm12.8 5.999c5.2.1 9.2-3.1 10.4-4.3-1.1-1.3-4.6-5.2-9.7-5.8-3.7-.5-7.7.9-11.7 4.2 3.4 3.8 7.1 5.8 11 5.9Z\" fill=\"#DBDBDB\" /><path d=\"m320.004 205.586 19.368-16.587-.846-.988-19.367 16.588.845.987Z\" fill=\"#DBDBDB\" /><path d=\"m368.8 128.1-7.5-15.8-34-13.2-22.9 58.9 45.9 17.7 18.5-47.6Z\" fill=\"#fff\" /><path d=\"m350.4 175.6-1.2-.5-.2.4 1.2.5.2-.4ZM351.3 174l-.4-.2-.5 1.2.4.2.5-1.2ZM348.1 174.6l-1.2-.5-.2.4 1.2.5.2-.4ZM345.7 173.8l-1.2-.5-.2.4 1.2.5.2-.4ZM343.4 172.8l-1.2-.5-.2.4 1.2.5.2-.4ZM352.2 171.7l-.4-.2-.5 1.2.4.2.5-1.2ZM341 171.9l-1.2-.5-.2.4 1.2.5.2-.4ZM338.6 171l-1.2-.5-.2.4 1.2.5.2-.4ZM353.1 169.3l-.4-.2-.5 1.2.4.2.5-1.2ZM336.2 170.1l-1.2-.5-.2.4 1.2.5.2-.4ZM333.9 169.1l-1.2-.5-.2.4 1.2.5.2-.4ZM331.5 168.2l-1.2-.5-.2.4 1.2.5.2-.4ZM354 167l-.4-.2-.5 1.2.4.2.5-1.2ZM329.1 167.3l-1.2-.5-.2.4 1.2.5.2-.4ZM326.8 166.4l-1.2-.5-.2.4 1.2.5.2-.4ZM324.4 165.5l-1.2-.5-.2.4 1.2.5.2-.4ZM354.9 164.6l-.4-.2-.5 1.2.4.2.5-1.2ZM322.1 164.6l-1.2-.5-.2.4 1.2.5.2-.4ZM319.7 163.6l-1.2-.5-.2.4 1.2.5.2-.4ZM355.8 162.2l-.4-.2-.5 1.2.4.2.5-1.2ZM317.3 162.7l-1.2-.5-.2.4 1.2.5.2-.4ZM315 161.8l-1.2-.5-.2.4 1.2.5.2-.4ZM312.6 160.9l-1.2-.5-.2.4 1.2.5.2-.4ZM356.8 159.8l-.4-.2-.5 1.2.4.2.5-1.2ZM310.2 160l-1.2-.5-.2.4 1.2.5.2-.4ZM307.9 159.1l-1.2-.5-.2.4 1.2.5.2-.4ZM357.7 157.5l-.4-.2-.5 1.2.4.2.5-1.2ZM305.4 158l-.7-.3-.4-.2-.2.5 1.2.5.1-.5ZM305.7 155.4l-.4-.2-.5 1.2.4.2.5-1.2ZM358.6 155.1l-.4-.2-.5 1.2.4.2.5-1.2ZM306.6 153.1l-.4-.2-.5 1.2.4.2.5-1.2ZM359.5 152.8l-.4-.2-.5 1.2.4.2.5-1.2ZM307.5 150.7l-.4-.2-.5 1.2.4.2.5-1.2ZM360.4 150.4l-.4-.2-.5 1.2.4.2.5-1.2ZM308.5 148.3l-.4-.2-.5 1.2.4.2.5-1.2ZM361.3 148l-.4-.2-.5 1.2.4.2.5-1.2ZM309.4 146l-.4-.2-.5 1.2.4.2.5-1.2ZM362.3 145.7l-.4-.2-.5 1.2.4.2.5-1.2ZM310.3 143.6l-.4-.2-.5 1.2.4.2.5-1.2ZM363.2 143.3l-.4-.2-.5 1.2.4.2.5-1.2ZM311.2 141.2l-.4-.2-.5 1.2.4.2.5-1.2ZM364.1 140.9l-.4-.2-.5 1.2.4.2.5-1.2ZM312.1 138.9l-.4-.2-.5 1.2.4.2.5-1.2ZM365 138.6l-.4-.2-.5 1.2.4.2.5-1.2ZM313 136.5l-.4-.2-.5 1.2.4.2.5-1.2ZM365.9 136.2l-.4-.2-.5 1.2.4.2.5-1.2ZM314 134.1l-.4-.2-.5 1.2.4.2.5-1.2ZM366.9 133.8l-.4-.2-.5 1.2.4.2.5-1.2ZM314.9 131.8l-.4-.2-.5 1.2.4.2.5-1.2ZM367.8 131.5l-.4-.2-.5 1.2.4.2.5-1.2ZM315.8 129.4l-.4-.2-.5 1.2.4.2.5-1.2ZM368.7 129.1l-.4-.2-.5 1.2.4.2.5-1.2ZM316.7 127l-.4-.2-.5 1.2.4.2.5-1.2ZM368.9 127.8l-.5-1.1-.4.2.5 1.1.4-.2ZM317.6 124.7l-.4-.2-.5 1.2.4.2.5-1.2ZM367.8 125.5l-.5-1.1-.4.2.5 1.1.4-.2ZM318.4 122.3l-.4-.2-.4 1.2.4.2.4-1.2ZM366.7 123.2l-.5-1.1-.4.2.5 1.1.4-.2ZM319.5 119.9l-.4-.2-.5 1.2.4.2.5-1.2ZM365.7 120.9l-.5-1.1-.4.2.5 1.1.4-.2ZM364.6 118.6l-.5-1.1-.4.2.5 1.1.4-.2ZM320.4 117.6l-.4-.2-.5 1.2.4.2.5-1.2ZM363.5 116.3l-.5-1.1-.4.2.5 1.1.4-.2ZM321.3 115.2l-.4-.2-.5 1.2.4.2.5-1.2ZM362.4 114l-.5-1.1-.4.2.5 1.1.4-.2ZM322.2 112.8l-.4-.2-.5 1.2.4.2.5-1.2ZM361 111.9l-1.2-.5-.2.4 1.2.5.2-.4ZM323.1 110.5l-.4-.2-.5 1.2.4.2.5-1.2ZM358.6 111l-1.2-.5-.2.4 1.2.5.2-.4ZM356.3 110l-1.2-.5-.2.4 1.2.5.2-.4ZM353.9 109.1l-1.2-.5-.2.4 1.2.5.2-.4ZM324.1 108.1l-.4-.2-.5 1.2.4.2.5-1.2ZM351.5 108.2l-1.2-.5-.2.4 1.2.5.2-.4ZM349.2 107.3l-1.2-.5-.2.4 1.2.5.2-.4ZM325 105.7l-.4-.2-.5 1.2.4.2.5-1.2ZM346.8 106.4l-1.2-.5-.2.4 1.2.5.2-.4ZM344.4 105.5l-1.2-.5-.2.4 1.2.5.2-.4ZM342.1 104.5l-1.2-.5-.2.4 1.2.5.2-.4ZM325.9 103.4l-.4-.2-.5 1.2.4.2.5-1.2ZM339.7 103.6l-1.2-.5-.2.4 1.2.5.2-.4ZM337.3 102.7l-1.2-.5-.2.4 1.2.5.2-.4ZM335 101.8l-1.2-.5-.2.4 1.2.5.2-.4ZM326.8 101l-.4-.2-.5 1.2.4.2.5-1.2ZM332.6 100.9l-1.2-.5-.2.4 1.2.5.2-.4ZM330.2 100.1l-1.2-.5-.2.4 1.2.4.2-.3ZM327.4 99.3l.3.1.2-.4-.7-.3-.4.9.4.2.2-.5Z\" fill=\"#DBDBDB\" /><path d=\"m357 123.5 11.8 4.6-7.5-15.8-4.3 11.2ZM342.201 139.101c.9-2.4-.3-5-2.7-5.9-2.4-.9-5 .3-5.9 2.7-.9 2.4.3 5 2.7 5.9 2.4.9 5-.3 5.9-2.7Zm-7.299-2.699c-.6 1.7.2 3.6 1.9 4.2 1.7.6 3.6-.2 4.2-1.9.6-1.7-.2-3.6-1.9-4.2-1.7-.6-3.6.2-4.2 1.9Z\" fill=\"#DBDBDB\" /><path d=\"m349 142.104.5-.3-.2-.5c-.1-.3-2.3-6.9-8.5-9.6-4-1.7-8.8-1.4-14.1 1l-.6.3.3.6c2.3 5.1 5.4 8.4 9.3 9.9.2.1.5.2.5.1 6.5 2.1 12.5-1.3 12.8-1.5Zm-12.2.4c4.9 1.6 9.7-.4 11.2-1.1-.6-1.6-2.9-6.3-7.6-8.3-3.6-1.6-7.8-1.4-12.5.6 2.2 4.6 5.2 7.6 8.9 8.8Z\" fill=\"#DBDBDB\" /><path d=\"m326.581 143.347 23.261-10.449-.533-1.186-23.261 10.45.533 1.185ZM260.796 107.601c-.8-7.3 4-14 10.9-14.8 6.9-.8 13.2 4.5 14.1 11.9l2.3 19.4 5.5-.6-2.3-19.4c-1.2-10.5-10.3-18.1-20.3-17.1-9.9 1.1-16.9 10.7-15.7 21.2l2.3 19.4 5.5-.6-2.3-19.4Z\" fill=\"#DBDBDB\" /><path d=\"m257.7 127.7 5.5-.6-1.4-11.8-5.5.4 1.4 12ZM286.9 113.4l1.2 10.7 5.5-.6-1.2-10.5-5.5.4Z\" fill=\"#A6A6A6\" /><path d=\"m254.43 160.014 49.952-5.91-4.712-39.822-49.951 5.91 4.711 39.822Z\" fill=\"#FFC412\" /><path d=\"M280.4 135.8c1.1-2.2.1-4.9-2.1-5.9-2.2-1.1-4.9-.1-5.9 2.1-1.1 2.2-.1 4.9 2.1 5.9l-.9 10.1 8.9-1-3.3-9.6c.5-.4 1-.9 1.2-1.6Z\" fill=\"#fff\" /><path d=\"M362.5 81.4c0-7-5.7-12.7-12.7-12.7-7 0-12.7 5.7-12.7 12.7 0 7 5.7 12.7 12.7 12.7 7 0 12.7-5.7 12.7-12.7Zm-22.4.1c0 5.4 4.3 9.7 9.7 9.7 5.3 0 9.7-4.3 9.7-9.7 0-5.4-4.3-9.7-9.7-9.7-5.3 0-9.7 4.3-9.7 9.7Z\" fill=\"#03D5B7\" /><path d=\"m238.498 182.298 4.9-12.2c.2-.5-.1-1.1-.6-1.3-.5-.2-1.1.1-1.3.6l-4.9 12.2c-.2.5.1 1.1.6 1.3.1.1.3.1.4.1.4 0 .8-.3.9-.7ZM225 165.2c-.8-1.9-2.3-3.3-4.2-4.1-1.9-.8-4-.8-5.9 0-1.9.8-3.3 2.3-4.1 4.2-.8 1.9-.8 4 0 5.9.8 1.9 2.3 3.3 4.2 4.1 1 .4 1.9.6 2.9.6s2-.2 3-.6c1.9-.8 3.3-2.3 4.1-4.2.8-1.9.8-4 0-5.9Zm-4.903 8.3c1.4-.6 2.5-1.7 3-3.1.5-1.4.6-2.9 0-4.3s-1.7-2.5-3.1-3c-.7-.4-1.4-.5-2.1-.5-.8 0-1.5.2-2.2.5-1.4.6-2.5 1.7-3 3.1-.5 1.4-.6 2.9 0 4.3s1.7 2.5 3.1 3c1.4.6 2.9.6 4.3 0ZM215.795 196.296c.5-.3.5-1 .2-1.4l-21.3-27.9c-.3-.4-1-.5-1.4-.2-.5.3-.5 1-.2 1.4l21.3 27.9c.2.3.5.4.8.4.2 0 .4-.1.6-.2Z\" fill=\"#FFC412\" /><path d=\"m259.6 80.6-12.5-44.9-65.9 14.6 12.6 45 65.8-14.7Z\" fill=\"#DBDBDB\" /><path d=\"m222.5 41.1 24.6-5.4-1.3-4.7-23.3 5.2v4.9Z\" fill=\"#DBDBDB\" /><path d=\"m259.7 80.6-4.5-43.9-65.8 14.6 4.4 43.9 65.9-14.6Z\" fill=\"#EBEBEB\" /><path d=\"m230.6 42.1 24.6-5.4-.4-4.6-23.3 5.2-.9 4.8Z\" fill=\"#EBEBEB\" /><path d=\"M227.398 65.298c-.4-2.1-2.6-3.5-4.7-3-2.1.4-3.5 2.6-3 4.7.4 2.1 2.6 3.5 4.7 3 2.1-.4 3.5-2.6 3-4.7Zm-6.701 1.505c.3 1.5 1.9 2.5 3.4 2.2 1.5-.3 2.5-1.9 2.2-3.4-.3-1.6-1.8-2.5-3.4-2.2-1.5.3-2.5 1.9-2.2 3.4Z\" fill=\"#fff\" /><path d=\"m213.2 67.999-.3.5.5.3c4 2.6 7.9 3.5 11.4 2.7l.5-.1c5.6-1.6 8.4-7 8.5-7.2l.2-.4-.4-.3c-.2-.2-4.9-3.9-10.7-2.9-3.7.6-7 3.1-9.7 7.4Zm11.9 2.3c4.3-1.2 6.8-4.9 7.6-6.2-1.2-.8-5.1-3.1-9.5-2.4-3.3.6-6.2 2.8-8.7 6.5 3.8 2.3 7.3 3 10.6 2.1Z\" fill=\"#fff\" /><path d=\"m218.069 75.787 11.871-18.64-.927-.591-11.872 18.64.928.591Z\" fill=\"#fff\" /><path d=\"M58.195 88.704h-14.8c.9 2.7 2.7 5.1 5.4 6.7l-5.9 28.5 25.5-.1-4.7-21.8h-8.6c-.5 0-1-.5-1-1 0-.6.4-1 1-1h8.2l-1-4.6c1.7-1 3-2.4 4.1-4.1 1.9-3.1 2.3-6.7 1.5-9.9h-14.8c-.6 0-1-.4-1-1s.4-1 1-1h14c-1-2.2-2.7-4.2-4.9-5.6-6-3.7-13.9-1.8-17.6 4.1-1.7 2.8-2.2 5.9-1.7 8.8h15.3c.6 0 1 .4 1 1s-.4 1-1 1ZM324.1 74.197c4.2-.9 6.9-5.1 6-9.3-.9-4.2-5.1-6.9-9.3-6-4.2.9-6.9 5.1-6 9.3l-15 9.5 10.9 11.2 9.9-14.8c1.2.3 2.4.3 3.5.1Z\" fill=\"#F5F5F5\" /><path d=\"M333.7 74.3c.2-.3.2-.7 0-.9l-9.8-10.2c-.3-.2-.7-.2-.9 0-.2.3-.2.7 0 .9l9.8 10.2c.1.1.2.2.4.2.1 0 .3-.1.5-.2ZM322.7 69.5c.2-.3.2-.7 0-.9l-9.8-10.2c-.3-.2-.7-.2-.9 0-.2.3-.2.7 0 .9l9.9 10.2c.1.1.2.2.4.2.1 0 .3-.1.4-.2ZM325.4 83.9c.2-.3.2-.7 0-.9l-9.8-10.2c-.3-.2-.7-.2-.9 0-.2.3-.2.7 0 .9l9.8 10.2c.1.1.2.2.4.2s.3 0 .5-.2Z\" fill=\"#fff\" /><path d=\"M45.7 140.8h-8.4c-.5 0-1 .5-1 1L31 257.7c0 .3.1.5.3.7.2.2.4.3.7.3h8.8c.5 0 .9-.4 1-1l4.9-115.9c0-.2-.1-.5-.3-.7-.2-.2-.4-.3-.7-.3Zm-6 115.9 4.8-113.9h-6.3L33 256.7h6.7Z\" fill=\"currentColor\" /><path d=\"M154.8 268.8h117.5v-4.9H154.8v4.9Z\" fill=\"#00BC9C\" /><path d=\"m327.6 268.8 14-73H234.2l-14.1 73h107.5Z\" fill=\"#00BC9C\" /><path d=\"m331.9 268.8 14.1-73H238.5l-14 73h107.4Z\" fill=\"#03D5B7\" /><path d=\"M289.7 231.9c0-5-4-9-9-9s-9 4-9 9 4 9 9 9c4.9 0 8.9-4 9-9Zm-15.5 0c0 3.5 2.9 6.5 6.4 6.5 3.6 0 6.5-2.9 6.5-6.4 0-3.6-2.9-6.5-6.4-6.5-3.6 0-6.5 2.9-6.5 6.4Z\" fill=\"#fff\" /><path d=\"M280.8 244.502c.5 0 .9-.1 1.3 0 13.2-.7 21.9-11.3 22.3-11.7l.6-.8-.6-.8c-.4-.5-9.1-11-22.3-11.7-8.7-.4-17.1 3.5-25.2 11.6l-.9.9.9.9c7.7 7.7 15.7 11.6 23.9 11.6Zm1.2-2.604c10.1-.5 17.5-7.5 19.8-9.9-2.3-2.4-9.7-9.4-19.8-9.9-7.6-.4-15.1 2.9-22.3 9.9 7.3 7 14.8 10.3 22.3 9.9Z\" fill=\"#fff\" /><path d=\"m263.81 250.562 35.355-35.355-1.768-1.768-35.355 35.355 1.768 1.768Z\" fill=\"#fff\" /><path d=\"M54.3 256.7H33l5.2-113.9H116c.6 0 1-.4 1-1s-.4-1-1-1H37.3c-.5 0-1 .5-1 1L31 257.7c0 .3.1.5.3.7.2.2.4.3.7.3h22.3c.6 0 1-.4 1-1s-.4-1-1-1Z\" fill=\"currentColor\" /><path d=\"m139.404 157.398.7-5.3c3.3 1.7 7.1 2.8 15.9.3 14.4-4.2 17.4-25.4 19.2-38.1l.2-1.3c1-7.1-.5-13.5-4.3-18.5-4.7-6.2-12.8-10.1-24-11.6-21.9-2.9-29.1 22.3-30.2 26.5-3 1-4.3 4.3-4.3 4.4-1 2.2-1.1 4.3-.3 6.3 1.4 3.5 5.3 5.6 7 6.4l-8 30c-.2.6-2.9 10.9 7.6 14.3 1.7.4 3.9.8 6 .8 1.5 0 3-.2 4.2-.7.3-.1.5-.2.8-.3 5.1-2.3 8.8-7.4 9.5-13.2Zm-1.007-6.997c0-.3.2-.6.5-.8.3-.2.6-.1.9 0 3.5 1.9 6.5 3.5 15.7.8 13.2-3.8 16.1-24.3 17.8-36.5l.2-1.4c.9-6.6-.4-12.4-3.9-17-4.4-5.8-12-9.4-22.6-10.8-22-2.9-28.1 25.3-28.2 25.6-.1.4-.4.7-.8.8-2.3.5-3.5 3.4-3.5 3.4-.8 1.7-.9 3.3-.3 4.8 1.5 3.7 6.6 5.6 6.7 5.7.5.2.7.7.6 1.2l-8.2 30.9c-.1.4-2.6 9 6.2 11.8 3.7.9 6.9 1 9 .2.2-.1.4-.2.7-.3 4.5-2.1 7.7-6.5 8.3-11.7l.9-6.7Z\" fill=\"currentColor\" /><path d=\"M158.599 150.3c9.8 2.9 23.4-3 23.4-3l-9-23.8c-1.09 20.34-14.17 26.74-14.4 26.8ZM116.5 141.502l3.1-15.8c-11.4-8.7-5.3-13.1-1.4-14.6 1.4-.5 3.4-.1 3.4-.1.5 10.4 3.2 13.1 7 12.5 4.1-.6 3.4-10 3.4-10 15.6 4.7 21.3-18 21.3-18 7.9 17.7 27.8 14.5 27.8 14.5 1.7-35.5-29.1-36.3-29.3-36.2-43.6-24.3-70.9 47.9-70.9 47.9 7.2 20.6 35.6 19.8 35.6 19.8Z\" fill=\"currentColor\" /><path d=\"M111.671 121.402a5.202 5.202 0 0 0 2.826 6.789 5.202 5.202 0 0 0 6.789-2.826 5.202 5.202 0 0 0-2.826-6.789 5.203 5.203 0 0 0-6.789 2.826Z\" fill=\"#FFC412\" /><path d=\"M163.286 118.3a7.302 7.302 0 0 0 3.967 9.531 7.301 7.301 0 0 0 9.531-3.967 7.302 7.302 0 0 0-3.967-9.531 7.302 7.302 0 0 0-9.531 3.967Z\" fill=\"#fff\" /><path d=\"M173.195 128.805c2.1-.8 3.7-2.4 4.5-4.5.9-2.1.9-4.3 0-6.4-.8-2.1-2.4-3.7-4.5-4.5-2.1-.9-4.3-.9-6.4 0-2.1.8-3.7 2.4-4.5 4.5-.9 2.1-.9 4.3 0 6.4.8 2.1 2.4 3.7 4.5 4.5 1 .4 2.1.6 3.2.6s2.2-.2 3.2-.6ZM167.6 115.2c-1.6.7-2.8 1.9-3.4 3.4-.6 1.6-.6 3.3 0 4.9.7 1.6 1.9 2.8 3.4 3.4 3.2 1.3 6.9-.2 8.3-3.4.6-1.6.6-3.3 0-4.9-.7-1.6-1.9-2.8-3.4-3.4-.9-.3-1.7-.5-2.5-.5s-1.7.2-2.4.5Z\" fill=\"currentColor\" /><path d=\"M169.213 123.476a1.9 1.9 0 1 0 3.126 2.16 1.9 1.9 0 0 0-3.126-2.16ZM178.197 120.397l3.7-1.3c.5-.2.8-.8.6-1.3-.2-.5-.8-.8-1.3-.6l-3.7 1.3c-.5.2-.8.8-.6 1.3.1.4.5.7.9.7.2 0 .3 0 .4-.1ZM176.7 117.5l3.7-3.7c.4-.4.4-1 0-1.4-.4-.4-1-.4-1.4 0l-3.7 3.7c-.4.4-.4 1 0 1.4.2.2.4.3.7.3.2 0 .5-.1.7-.3Z\" fill=\"currentColor\" /><path d=\"M143.062 114.906a7.302 7.302 0 0 0 3.967 9.531 7.303 7.303 0 0 0 9.532-3.967 7.304 7.304 0 0 0-3.967-9.531 7.303 7.303 0 0 0-9.532 3.967Z\" fill=\"#fff\" /><path d=\"M146.595 110.005c-2.09.8-3.7 2.4-4.5 4.5-.9 2.1-.9 4.3 0 6.4.8 2.1 2.41 3.7 4.5 4.5 1 .4 2.11.6 3.21.6s2.2-.2 3.2-.6c2.1-.8 3.7-2.4 4.5-4.5.9-2.1.9-4.3 0-6.4-.8-2.1-2.4-3.7-4.5-4.5-2.11-.9-4.31-.9-6.41 0ZM143.9 115.2c-.6 1.6-.6 3.3 0 4.9.7 1.6 1.9 2.8 3.4 3.4 1.6.6 3.3.6 4.9 0 1.6-.7 2.8-1.9 3.4-3.4.6-1.6.6-3.3 0-4.9-.7-1.6-1.9-2.8-3.4-3.4-.8-.3-1.6-.5-2.4-.5-2.5 0-4.9 1.5-5.9 3.9Z\" fill=\"currentColor\" /><path d=\"M149.763 119.956a1.9 1.9 0 1 0 3.126 2.16 1.9 1.9 0 0 0-3.126-2.16ZM145.302 111.801c.4-.2.6-.8.4-1.3l-1.8-3.5c-.2-.4-.8-.6-1.3-.4-.4.2-.6.8-.4 1.3l1.8 3.5c.2.4.5.6.9.6.1 0 .3 0 .4-.2ZM149.1 110.4v-5.2c0-.5-.4-1-1-1s-1 .4-1 1v5.2c0 .5.4 1 1 1s1-.5 1-1ZM158.701 127.505c-.3.5-.2 1.1.3 1.4 1.2.7 2.2 1 3.2 1h1.1c.9-.3 1.6-.9 2.1-1.8 1-1.9-1-4-2-4.8l.5-6.6c.1-.6-.3-1.1-.9-1.1-.6-.1-1.1.3-1.1.9l-.6 7.1c0 .4.1.7.4.9 1 .7 2.2 2.1 1.9 2.6-.2.4-.5.7-.9.8-.6.1-1.6-.1-2.6-.7-.5-.3-1.1-.2-1.4.3ZM159.297 105.895c.4-.4.5-1 .1-1.4-.4-.4-1-.5-1.4-.1-3.3 3.1-6.9 1.9-7.1 1.8-.5-.2-1.1.1-1.3.6-.2.5.1 1.1.6 1.3 0 0 1.1.4 2.6.4 1.8 0 4.2-.5 6.5-2.6ZM176.603 112.003c0-.5-.4-1-1-1-4.6-.2-6.2-3.6-6.3-3.8-.2-.5-.8-.7-1.3-.5-.5.2-.7.8-.5 1.3.1.2 2.2 4.7 8.1 5 .6 0 1-.4 1-1ZM158.803 136.402c0 .6.4 1 1 1.1.5 0 .9-.4 1.1-1 .2-1.7-.2-3.1-1-4-.7-.8-1.8-1.2-3.1-1.3-3.2-.2-4.9 3.7-5 3.9-.2.5 0 1.1.5 1.3.5.2 1.1 0 1.3-.5 0 0 1.3-2.8 3-2.7.8.1 1.3.3 1.7.7.5.7.6 1.7.5 2.5Z\" fill=\"currentColor\" /><path d=\"m152.4 71.6-4.3-.6v2.3l5.9.6-1.6-2.3Z\" fill=\"#E2A40A\" /><path d=\"M136.403 67.003c-24 24.6-15.3 43.3-15.3 43.3 1.2-31.1 31.3-38.7 31.3-38.7-7.5-9.9-16-4.6-16-4.6Z\" fill=\"#FFC412\" /><path d=\"M151.899 241.999c1.9.9 11.7 5.4 14.9 4 .8-.4 1.1-.9 1.2-1.3 1.2-3.7-2.5-7.2-26.1-15.9-21.6-8-70.4 19.4-72.5 20.6-.5.3-.7.9-.4 1.4.2.3.6.5.9.5.2 0 .3 0 .5-.2.5-.2 50.1-28.1 70.8-20.4 18.3 6.8 25.8 10.8 24.9 13.4-.8.9-7.2-1-13.4-3.9-.5-.2-1.1 0-1.3.5-.2.5 0 1.1.5 1.3Z\" fill=\"currentColor\" /><path d=\"M160.796 258.495c.9-.8 1.3-2 1.3-3.3-.3-6.8-13.9-17.9-15.4-19.1-.4-.3-1.1-.2-1.4.2-.3.4-.2 1.1.2 1.4 4 3.2 14.4 12.6 14.6 17.6 0 .7-.2 1.3-.6 1.7-.6.3-2.8-.1-5.9-5.2-.3-.4-.9-.6-1.4-.3-.4.3-.6.9-.3 1.4 2.2 3.6 4.4 5.7 6.5 6.1.2.1.5.1.7.1.9 0 1.5-.4 1.6-.5 0-.1.1-.1.1-.1Z\" fill=\"currentColor\" /><path d=\"M147.701 262.501c.9.8 1.9 1.2 2.9 1.2.6 0 1.2-.2 1.9-.5 1-.6 3.3-2.8 1.5-9.4-2.2-8.3-13.4-15.1-13.9-15.4-.5-.3-1.1-.2-1.4.3-.3.5-.2 1.1.3 1.4.1.1 11 6.7 13 14.2 1.2 4.3.4 6.6-.6 7.2-.7.4-1.6.2-2.4-.5-.4-.4-1-.3-1.4.1-.4.4-.3 1 .1 1.4Z\" fill=\"currentColor\" /><path d=\"M133.799 241.999c-.3.5-.1 1.1.4 1.4.1 0 12.7 7.2 12.3 15.4-.2 4.5-1.3 5.2-1.6 5.3-.6.2-1.7-.5-2.4-1.3-.4-.4-1-.5-1.4-.1-.4.4-.5 1-.1 1.4.4.5 1.9 2 3.6 2 .3 0 .6 0 1.1-.1 1.8-.6 2.7-2.9 2.9-7.1.4-9.5-12.8-17-13.4-17.3-.5-.3-1.1-.1-1.4.4Z\" fill=\"currentColor\" /><path d=\"M132.403 258.101c.9.6 1.5 2.3 2.1 3.8.9 2.3 1.8 4.5 3.6 4.9 1.6.3 2.6-.2 3.1-.7 1.4-1.2 1.8-3.8 1.2-7.8-.9-6.3-11.5-13.4-12-13.7-.5-.3-1.1-.2-1.4.3-.3.5-.2 1.1.3 1.4 2.9 1.9 10.5 7.9 11.1 12.3.6 4.5-.2 5.8-.6 6.1-.2.2-.5.4-1.3.2s-1.6-2.1-2.2-3.7c-.8-1.8-1.5-3.8-2.8-4.7-2.3-1.7-5.3-2.8-11.5.6-5.4 2.9-21.4 9.9-21.6 10-.5.2-.7.8-.5 1.3.1.4.5.6.9.6.1 0 .2 0 .5-.1.6-.3 16.2-7.1 21.7-10.1s7.6-2 9.4-.7ZM55.5 258.7c0-.6-5.1-56.4-.9-73.1C59 168.4 68.7 160 112 158.5c.6 0 1-.4 1-1s-.4-1-1-1c-44.6 1.5-54.6 10.4-59.2 28.6-4.3 17 .7 71.4.9 73.7.1.5.5.9 1 .9.7-.1 1.1-.6.8-1Z\" fill=\"currentColor\" /><path d=\"m84.6 243 .9-44.8c0-.5-.4-1-1-1-.5 0-1 .4-1 1l-.9 44.8c0 .5.4 1 1 1 .5 0 1-.4 1-1Z\" fill=\"currentColor\" /><path d=\"M83.801 207.201c.6-.2.9-.8.7-1.3-.2-.6-.8-.9-1.3-.7-15.5 4.8-29.8-4.4-29.9-4.5-.5-.3-1.1-.2-1.4.3-.3.5-.2 1.1.3 1.4.5.3 9.6 6.2 21.5 6.2 3.2 0 6.6-.4 10.1-1.4ZM188.004 226.802c0-.3-1.4-28.9-7.3-52.8-6.1-24.8-41.7-18.8-42.1-18.7-.5.1-.9.7-.8 1.2.1.5.7.9 1.2.8.3 0 34.1-5.7 39.8 17.2 5.9 23.8 7.2 52.1 7.2 52.4 0 .6.5 1 1 1 .6 0 1-.5 1-1.1Z\" fill=\"currentColor\" /><path d=\"M167.104 234.804c.5 0 .9-.6.8-1.1l-7.2-46.7c0-.5-.6-.9-1.1-.8-.5 0-.9.6-.8 1.1l7.2 46.7c.1.4.5.8 1 .8h.1ZM168.497 245.701c.5.2 1.1-.2 1.2-.7.2-.8 5.4-20.6 31.8-18.1 14.7 1.4 20.8 7.7 23.3 12.7 2.1 4.2 1.9 7.9 1.5 8.7-1 .4-3.3.8-9-9.6-.3-.5-.9-.7-1.4-.4-.5.3-.7.9-.4 1.4 4.7 8.6 7.6 10.8 9.9 10.8.7 0 1.3-.2 2-.5 1.5-.8 1.3-4.5.9-6.4-.9-5-5.4-16.7-26.6-18.7-28.2-2.7-33.8 19.4-33.9 19.6-.2.5.2 1.1.7 1.2Z\" fill=\"currentColor\" /><path d=\"M186.504 258.995c1.2.1 2.2-.2 3-.9 2.2-2.1 1.9-7.2 1.7-11.2 0-1.3-.1-3 0-3.4 0-.2.4-.4 1.1-.4 2.3-.1 6 2.1 9.5 8.3 3.1 5.5 5.4 8 7.5 8 1.7-.1 2.5-1.7 3.1-2.2 1.2-2.5-2.7-14.6-8.5-19.3-.4-.4-1-.3-1.4.1-.4.4-.3 1.1.1 1.4 5.2 4.3 8.6 15.3 7.9 16.9-.4.7-.7 1.1-1 1.1-.4 0-2.1-.4-5.8-7-5-8.9-9.9-9.5-11.3-9.4-1.4 0-2.4.6-2.9 1.5-.4.7-.3 1.9-.2 4.4.2 3.2.5 8.1-1.1 9.6-.2.2-.6.5-1.4.4-.6 0-1.1-.3-1.5-.9-1.9-2.8-.4-10.6.3-13.4.2-.5-.2-1.1-.7-1.2-.5-.2-1.1.2-1.2.7-.3 1.1-2.9 11-.1 15.1.7 1 1.7 1.7 2.9 1.8Z\" fill=\"currentColor\" /><path d=\"M211.996 255.996c-.5-.2-1.1.2-1.2.7-.1.5.2 1.1.7 1.2 0 0 .5.1 1.1.1.7 0 1.7-.1 2.5-.9 1.3-.9 1.9-2.5 2-4.7.2-5.9-7.3-16.5-7.6-16.9-.3-.4-1-.5-1.4-.2-.4.3-.5 1-.2 1.4.1.1 7.5 10.5 7.3 15.7-.1 1.6-.5 2.7-1.2 3.2-.8.7-2 .4-2 .4Z\" fill=\"currentColor\" /><path d=\"M214.999 234.799c-.3-.5-.9-.7-1.4-.4-.5.3-.7.9-.4 1.4 1.7 3 6.3 11.5 6.4 15 .1 1.4-.5 2.5-1.9 3.1-1.1.5-2.3.6-2.3.6-.6 0-1 .4-1 1s.5 1 1 1c.2 0 3.2-.1 5-2.1.9-.9 1.4-2.2 1.3-3.7-.2-4.7-6.4-15.4-6.7-15.9ZM184.6 195.201c.3-.5.2-1.1-.3-1.4-.5-.3-1.1-.2-1.4.3-5.4 8.5-20.5 6.7-20.7 6.7-.5 0-1 .4-1.1.9 0 .5.4 1 .9 1.1.2 0 1.7.2 3.9.2 5.2 0 14.4-1.1 18.7-7.8Z\" fill=\"currentColor\" /><path d=\"m84.796 37.503-10.1 22.7c-.2.4-.1.8.2 1.1.2.2.4.3.7.3.1 0 .2-.1.3-.1l32.9-12.6c.3-.1.6-.5.6-.9s-.2-.7-.6-.9l-22.7-10.1c-.5-.2-1.1 0-1.3.5ZM77.5 58.8l28.3-10.9-19.6-8.7-8.7 19.6Z\" fill=\"#03D5B7\" /></g></svg>\n  </div>\n</template>\n"
  },
  {
    "path": "web/console/src/icons/500.vue",
    "content": "<template>\n  <div class=\"text-[currentColor] dark:text-[#3a71ff]\">\n    <svg viewBox=\"0 0 400 300\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><mask id=\"a\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"31\" y=\"32\" width=\"338\" height=\"237\"><path d=\"M368.4 32H31v236.9h337.4V32Z\" fill=\"#fff\" /></mask><g mask=\"url(#a)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path d=\"M79.498 122.599c-3.3-7.4-5.2-17.8-7.9-29.5-2.4-12.9-20.8-28.3-34.1-17.6-6.2 5.1-8 17.7-5.4 28.5 2.3 11 9 20.1 14 23.2 10.5 6.3 26.2.8 29.9 4.4 7.6 6.9 11.2 12.8 11.2 13 .2-.2-2.4-10.3-7.7-22Z\" fill=\"#EBEBEB\" /><path d=\"M64.9 112.503c.8-.1 1.1-1.4.6-2.9-.5-1.5-1.5-2.6-2.4-2.5-.9.1-1.2 1.5-.7 3s1.6 2.6 2.5 2.4ZM56.103 110.604c.8-.2 1.2-1.5.7-3.1s-1.6-2.8-2.5-2.7c-.9.1-1.1 1.6-.7 3.2.5 1.6 1.7 2.8 2.5 2.6ZM47.202 108.504c.9-.2 1.2-1.6.7-3.2s-1.6-2.9-2.6-2.8c-1 .1-1.3 1.7-.8 3.3.5 1.7 1.7 2.9 2.7 2.7Z\" fill=\"#fff\" /><path d=\"M76.002 69.395c1.3-7.3 11.4-9.2 14.7-15.1 3.2-5.9 4.5-20.4-.5-22.1-5.1-1.7-17 7-18.3 14.9-1.3 6.9-1.1 16.4-.3 21.8 1.3 8.7 5.1 14.1 5.1 14.1s-1.9-7.1-.7-13.6Z\" fill=\"#EBEBEB\" /><path d=\"M88.099 47.302c.7-.9 1-2 .9-3.2-.1-1.1-.8-1.5-1.4-.8-.7 1-1.1 2.1-.9 3.2.1 1.1.8 1.5 1.4.8ZM82.399 50.702c.7-.9 1-2.1.8-3.2-.1-1.1-.8-1.5-1.4-.8-.7 1-1 2.1-.8 3.2.2 1.1.8 1.5 1.4.8ZM76.796 54.202c.7-.9.9-2.1.8-3.2-.2-1.1-.8-1.5-1.4-.8-.7.9-.9 2.1-.8 3.2.2 1.1.8 1.5 1.4.8Z\" fill=\"#fff\" /><path d=\"M159.502 190.201c69.4-1.4 71.8-64.6 71.6-77.3-.2-12.8-8-39.3-27.7-56.5-15.6-13.6-35.6-18.9-59.5-16-35.4 4.4-50.8 26.1-57.5 43.6-4.4 11.9-6.5 24.5-6.1 37.1.1 4.9 3.2 22.4 14.9 38.8 9.9 13.9 28.6 30.3 62.1 30.3h2.2Zm-.002-.901c68.601-1.4 71.001-64 70.801-76.5-.2-12.5-7.9-38.8-27.4-55.8-12.7-11-28.301-16.5-46.601-16.5-4.1 0-8.2.3-12.2.8-35 4.3-50.2 25.8-56.8 43-4.4 11.8-6.4 24.3-6.1 36.8.2 6 4.1 23.2 14.8 38.3 9.8 13.8 28.3 29.9 61.4 29.9h2.1Z\" fill=\"#EBEBEB\" /><path d=\"M101.804 66.303c-44.2 46-9.1 89 3.9 101.6 12.7 12.2 67.9 42.4 108.8-10.1 40.9-52.5-11.7-98.5-11.7-98.5-7-6.6-56.8-39-101 7Z\" fill=\"#EBEBEB\" /><path d=\"M159.499 191.898c22.1-.1 39.7-7 52.2-20.6 22.3-24.2 20.9-60.8 20.9-61.1-.1-1.7-3.2-42-30.7-62.5-15.2-11.2-34.8-14.2-58.3-8.9-24.6 5.6-42.3 17.2-52.5 34.4-17 28.8-7.2 63.9-7 64.5 3.3 9.9 8.4 19.1 15.1 27.1 10.3 12.4 29.1 27 60.1 27l.2.1ZM165.098 37.1c-7.1.1-14.3.9-21.2 2.6-24.4 5.5-41.9 17-52 34.1-16.9 28.6-7 63.4-6.9 63.8 3.2 9.8 8.3 18.9 15 26.8 10 12.1 28.6 26.6 59.3 26.6h.3c21.4-.1 38.5-6.6 50.8-19.5 22.7-23.7 21.4-60.9 21.4-61.2-.1-1.7-3.2-41.6-30.4-61.9-10.1-7.6-22.3-11.3-36.3-11.3Z\" fill=\"#EBEBEB\" /><path d=\"M232.696 107.798c.7-24.8-8.4-43.4-27.1-55.3-25.9-16.5-60-13.8-60.1-13.7l-.5.1c-9.3 1.5-41 8.2-57.2 33.5-11 17.1-12.8 39.2-5.4 65.7 6.5 23.4 18.7 39.3 36.2 47.2 9.3 4.3 19.4 5.8 29.1 5.8 25.6 0 48.5-10.8 49.1-11 .4-.2 8.9-4 17.4-14.5 8-9.9 17.6-27.9 18.5-57.8Zm-19.094 57.101c7.9-9.8 17.5-27.6 18.3-57.2.6-21.2-6.1-37.9-19.9-49.6-25.5-21.4-65.301-18.6-66.201-18.5-.2.1-.4.1-.6.1-9.2 1.5-40.6 8.2-56.7 33.1-10.8 16.9-12.6 38.8-5.3 65.1 6.4 23.1 18.5 38.8 35.7 46.6 9.3 4.2 19.2 5.7 28.8 5.7 25.5 0 48.501-10.8 48.801-11 .1 0 8.6-3.7 17.1-14.3Z\" fill=\"#EBEBEB\" /><path d=\"M157.198 192.605c3.4 0 6.8-.2 10.2-.6 53.4-6.6 60.1-50.4 65.1-82.3l.3-1.8c2.5-16.3-8.2-38.1-26.2-52.9-13-10.7-40.6-26.6-79-12.7-33 11.9-43.2 36.7-46 55.4-1.8 12.7-1.1 25.6 1.9 38l.9-.2c-3-12.3-3.7-25.1-1.9-37.7 2.7-18.5 12.8-42.9 45.4-54.7 38-13.8 65.3 1.9 78.1 12.5 17.8 14.7 28.4 36.1 25.9 52.2l-.3 1.8c-4.9 31.7-11.7 75.1-64.4 81.6-27.4 3.4-47-7.6-58.6-17.4-15-12.8-23.4-29.2-23.7-36.1h-.9c.4 7.1 8.9 23.8 24.1 36.7 13.7 11.7 31.1 18.2 49.1 18.2Z\" fill=\"#EBEBEB\" /><path d=\"M203.097 123.1c.6-.3.4-1-.1-.8-5.9 2.1-13.2 2.4-18.4-1.6-4.3-3.3-5.9-9.1-5.1-14.3.4-2.7 1.4-5.4 2.9-7.7 1.9-2.9 4.3-5.2 6.7-7.6 4.5-4.5 9.7-9.9 9.5-16.8-.2-6-5.1-10.7-10.6-12.4-3.9-1.1-8.1-.9-11.9.5-.2-.3-.4-.6-.6-.8-3.3-4.1-8.7-6-13.8-6-5.9.1-11.6 2.1-16.2 5.9-1.1.9-2.1 1.9-3.1 3.1-.3.4.2.9.5.5 3.7-4.4 8.9-7.3 14.5-8.3 5.2-.9 10.8-.2 15 3 1.1.8 2.1 1.8 2.8 2.9-1.3.6-2.5 1.3-3.7 2.1-2.1 1.5-5.1 4.2-3.9 7.1 1 2.1 3.3 3.2 5.6 2.7 2.6-.7 4.1-3.5 4.3-6 .1-1.9-.3-3.8-1.2-5.5 3.6-1.3 7.6-1.5 11.3-.5 5.5 1.6 10.3 6.4 10.1 12.4-.1 3.2-1.5 6.3-3.3 8.9-1.8 2.6-4.2 5-6.5 7.3-2.4 2.2-4.5 4.7-6.4 7.4-1.4 2.2-2.4 4.7-2.8 7.3-.8 4.9.3 10.2 3.7 14 4.1 4.5 10.7 5.5 16.4 4.4 1.5-.3 2.9-.6 4.3-1.2Zm-27.299-59.9c-1.4.6-2.7 1.3-3.9 2.2-1.9 1.5-5 4.4-2.9 6.9.7.9 1.7 1.4 2.8 1.5 1.2.1 2.4-.3 3.3-1.2 1.9-1.8 2.3-4.7 1.6-7.2-.2-.8-.5-1.5-.9-2.2ZM269.1 153.3c-3.2-1.6-6.8-2.1-10.4-2.3-.9 0-1.9-.1-2.9-.1-.2 0-.4.2-.4.4s.2.4.4.4c3.7.1 7.6.2 11.1 1.5 3 1.1 5.7 3 7.3 5.8 1.7 3.1 1.6 6.7 1.1 10.1-.5 3.3-1.4 6.5-1.7 9.8-.3 2.9-.1 6.1 1.3 8.7 1.4 2.6 3.8 4.4 6.7 5.1 3 .7 6 .3 8.8-1 2.9-1.3 5.4-3.4 7.7-5.6 2.4-2.3 4.7-4.7 7.5-6.5 2.8-1.9 5.9-3.3 9.3-3.1.8 0 1.6.2 2.4.5.2 0 .4-.7 0-.9-6.7-2.1-12.9 2.7-17.4 7-4.5 4.3-9.4 9.4-16.1 9.1-3.1-.1-5.9-1.5-7.7-4-1.7-2.5-2-5.7-1.8-8.7.4-6.5 3.7-13.4 1.1-19.8-1.3-2.8-3.5-5.1-6.3-6.4ZM91.7 156c.2-.5.4-1 .5-1.5.4-1.3.4-2.7 0-4-.2-.7-.6-1.2-1.1-1.6-.6-.4-1.3-.3-1.7.3-.8 1.2-.1 3.1.5 4.3.5.9 1.1 1.7 1.8 2.5Zm1.004.804c-.2-.1-.3-.3-.5-.4.3-.6.5-1.2.7-1.9.4-1.4.4-2.9 0-4.3-.4-1.2-1.4-2.5-2.8-2.4-1.7.2-2 2.2-1.8 3.6.3 1.6 1.1 3.1 2.2 4.3.2.3.5.5.8.8-1 1.7-2.5 3.1-4.2 4-2.7 1.2-5.8 1.2-8.6.2-6.5-2.3-10.1-9.2-11.2-15.6-1-6-.1-12.2 2.7-17.7.3-.7.7-1.3 1.1-2 .2-.4-.3-.8-.6-.4-3.5 5.7-5 12.5-4.1 19.1.9 7 4.7 14.6 11.7 17.2 3 1.2 6.3 1.1 9.3-.1 1.9-.9 3.5-2.3 4.5-4.1 2 1.7 4.5 2.7 7.1 2.7 3.3-.1 6.4-1.6 8.5-4.2.5-.6.9-1.3 1.3-2 .2-.5-.5-.7-.7-.3-1.4 2.7-3.9 4.7-6.9 5.4-3 .7-6.1 0-8.5-1.9Zm-28.206-27.7c-.3.3 0 .9.4.6 2-1.6 4.1-3.2 6.2-4.6-.6 2.3-.9 4.7-1 7.2 0 .4.7.4.7 0 0-2.7.4-5.3 1.1-7.8.1-.2 0-.4-.2-.4-.1-.2-.2-.2-.3-.1-2.4 1.5-4.7 3.2-6.9 5.1ZM293.403 83.996c-.4-.3-.9-.5-1.4-.7-1.3-.4-2.7-.5-4-.2-.6.2-1.2.5-1.6 1-.4.5-.3 1.3.2 1.7 1.2.9 3.1.4 4.3-.2.9-.4 1.8-1 2.5-1.6Zm-7.9.903c.1 1.7 2.1 2.2 3.5 2 1.6-.2 3.1-.9 4.4-1.9.3-.2.6-.5.9-.7 1.7 1.1 2.9 2.7 3.7 4.5 1 2.8.8 5.9-.4 8.6-2.7 6.4-9.8 9.5-16.3 10.2-6.1.6-12.2-.7-17.5-3.8-.7-.4-1.3-.8-1.9-1.2-.4-.3-.9.3-.5.6 5.5 3.9 12.1 5.8 18.8 5.3 7.1-.5 14.9-3.7 17.9-10.5 1.4-2.9 1.5-6.2.5-9.3-.8-1.9-2.1-3.6-3.8-4.8 1.8-1.9 2.9-4.3 3.1-6.9.1-3.3-1.2-6.5-3.6-8.7-.6-.5-1.3-1-2-1.4-.5-.4-.8.3-.4.5 2.6 1.6 4.5 4.2 5 7.2s-.4 6.1-2.4 8.3c-.1.2-.3.3-.4.5-.6-.3-1.2-.6-1.8-.8-1.4-.5-2.9-.6-4.3-.3-1.2.3-2.6 1.2-2.5 2.6ZM264.9 109.5c.3.4.9 0 .6-.3-1.5-2.1-2.9-4.3-4.2-6.5 2.3.8 4.7 1.2 7.1 1.4.4 0 .5-.7 0-.7-2.6-.2-5.2-.8-7.7-1.7-.2 0-.4.1-.4.3v.2c1.4 2.5 2.9 5 4.6 7.3ZM275.098 222.3c-.3-.5-.6-.9-.9-1.3-.8-1-2-1.8-3.3-2.2-.6-.2-1.3-.2-1.9 0-.6.3-.9 1-.7 1.6.5 1.4 2.5 1.8 3.8 2 1.1.1 2.1.1 3-.1Zm-22.594 14.095c-5.6-2.5-10.2-6.8-13.1-12.1-.4-.7-.7-1.3-1-2-.2-.4-.9-.2-.7.2 2.8 6.1 7.6 11.1 13.6 14.1 6.3 3.2 14.7 4.3 20.8-.1 2.6-1.8 4.5-4.6 5.1-7.8.3-2.1 0-4.2-.9-6.1 2.5-.7 4.7-2.2 6.2-4.4 1.8-2.8 2.2-6.2 1.3-9.3-.2-.8-.6-1.5-1-2.2-.3-.3-.9.1-.7.5 1.5 2.7 1.7 5.9.7 8.8-1.1 2.8-3.4 5-6.3 5.9-.2.1-.4.1-.6.2-.3-.6-.7-1.1-1.2-1.6-.9-1.1-2.2-1.9-3.6-2.4-1.2-.4-2.9-.3-3.5 1-.8 1.5.7 2.9 2 3.5 1.5.6 3.1.8 4.8.6.4 0 .7-.1 1.1-.2.9 1.8 1.2 3.8.9 5.7-.6 2.9-2.2 5.5-4.7 7.2-5.6 4.1-13.2 3.3-19.2.5Zm-14.902-6.491c0 .4.7.5.7 0-.3-2.6-.4-5.2-.3-7.7 1.6 1.8 3.4 3.4 5.4 4.8.4.3.7-.3.4-.6-2.2-1.5-4.2-3.3-5.9-5.3-.2-.1-.4-.1-.5.1 0 0-.1 0-.1.1-.1 2.9 0 5.8.3 8.6Z\" fill=\"currentColor\" /><path d=\"M210.296 131.103c-.4-.5-.8-.9-1.2-1.3-1.1-1-2.5-1.7-4-1.9-.7-.1-1.5 0-2.1.3h-.1c-.7.3-.9 1.2-.5 1.8.8 1.5 3 1.6 4.5 1.6 1.1-.1 2.2-.3 3.4-.5Zm-.9-1.998c-1.2-1.1-2.7-1.8-4.3-2.1-1.3-.2-3.2.1-3.7 1.6-.6 1.8 1.3 3.1 2.7 3.5 1.8.4 3.6.4 5.3-.1.4-.1.8-.2 1.2-.4 1.3 1.8 1.9 4 1.9 6.2-.2 3.3-1.6 6.4-4 8.7-5.5 5.4-14.1 5.7-21.1 3.7-6.5-1.9-12.3-5.9-16.4-11.3-.5-.7-1-1.3-1.4-2.1-.3-.4-1-.1-.7.4 4 6.3 10.1 11 17.2 13.4 7.5 2.5 16.9 2.4 22.9-3.4 2.6-2.4 4.2-5.8 4.4-9.4 0-2.3-.7-4.6-2-6.5 2.7-1.1 4.8-3.2 6.1-5.8 1.5-3.3 1.5-7.2-.1-10.5-.4-.8-.9-1.6-1.4-2.3-.2-.4-.8.1-.5.6 2.1 2.7 2.8 6.2 2.1 9.5-.7 3.3-3 6.1-6 7.6-.2.1-.4.2-.7.3-.5-.6-1-1.1-1.5-1.6Zm5.504-9.5c-.1.4.6.6.7.1.4-2.41.4-4.8.2-7.21 1.9 1.71 3.7 3.6 5.4 5.5.3.3.7-.2.5-.5-1.9-2.2-3.9-4.2-6.1-6.09-.1-.1-.4-.1-.5 0-.1.09-.1.19-.1.3.3 2.59.3 5.29-.1 7.9ZM238.404 119.804c1.6 3.2 2.3 6.7 2.3 10.3-.2 3.7-1.3 7.4-3.2 10.6-3.5 6.2-9.6 10.5-16.2 13.1l-2.4.9c-.2.1-.2.3-.1.5.1.1.2.2.3.2 6.6-2.2 12.8-5.9 17.1-11.4 4.3-5.9 6.3-13.6 4.3-20.6-1.9-6.7-6.7-12-9.3-18.4-5.6-13.8-.2-29.6 12.6-37.2.7-.4 1.5-.8 2.3-1.2.4-.2.2-.9-.2-.7-13.1 6.3-20 20.9-16.7 35 .9 3.4 2.2 6.7 4.1 9.8 1.7 3 3.6 5.9 5.1 9.1ZM123 189.001c-2.9.3-5.9 0-8.7-.9-5.8-2-10.7-6.1-13.6-11.4-1.8-3.3-3-6.8-3.5-10.5-.1-.5-.8-.4-.7 0 1 6.6 3.9 13 8.9 17.6 4.4 4 10.2 6.2 16.1 6.1 4.2-.2 8.2-1.6 12-3.1.6-.3.4-1-.1-.8-3.3 1.3-6.8 2.6-10.4 3ZM276.797 194.001c-.8 2.8-2.3 5.4-4.2 7.7-4.1 4.6-9.7 7.5-15.8 8.1-3.7.4-7.4.1-11-.8-.5-.1-.7.6-.3.7 6.5 1.7 13.6 1.4 19.7-1.5 5.4-2.5 9.7-7 11.8-12.5 1.5-3.9 1.6-8.2 1.8-12.3.1-.5-.6-.6-.7-.1-.1 3.6-.2 7.3-1.3 10.7Z\" fill=\"currentColor\" /><path d=\"M207.499 90.705c-1.8 1.5-3.3 3.2-4.4 5.2-1.3 2.3-2.3 5.1-1.6 7.7.3 1.2.9 2.2 1.8 3 1.1.9 2.4 1.4 3.8 1.4 2.5.2 5-.6 7-2.2 1.9-1.6 3.1-4 3.1-6.5 0-2.4-1.1-4.7-2.9-6.2-1.4-1.2-3.1-2.2-4.9-2.9 3.6-2.5 7.8-4 12.1-4.5 5.5-.6 11.1-.4 16.6.8 5.6 1.1 11 2.9 16.1 5.5 1.3.6 2.5 1.3 3.7 2 .2.1.5.1.6-.2.3-.21.2-.51 0-.61-5.2-3.1-10.9-5.39-16.7-6.89-5.7-1.51-11.6-2.11-17.5-1.8-5.6.4-11.1 1.9-15.7 5.3l-.2.1c-2.5-.8-5.1-1.3-7.7-1.5-4.9-.6-9.8-.4-14.6.5-9.6 1.7-18.6 6.1-25.8 12.7-.9.8-1.7 1.6-2.5 2.5-.4.4.2 1.1.7.7 6.3-6.7 14.4-11.6 23.3-14 4.4-1.2 9-1.8 13.6-1.8 4.1 0 8.2.5 12.1 1.7Zm1.102.295c-.4.3-.8.7-1.2 1-2 1.8-3.6 4-4.6 6.5-.8 2.4-.9 5.3.9 7.2 1.8 1.9 5 1.8 7.3.9s4.1-2.7 4.9-5.1c.7-2.3.2-4.8-1.3-6.7-1.5-1.7-3.5-3-5.7-3.7l-.3-.1ZM217.004 54.8c-2 1-3.7 2.3-5.3 3.8-1.8 1.9-3.6 4.4-3.4 7.1.1 1.3.6 2.4 1.5 3.3 1 .8 2.3 1.1 3.6.8 2.6-.6 4.1-3 4.7-5.5.6-3.2.3-6.5-1.1-9.5Zm-64.502.804c5.2-1.5 9.9-4.3 14.6-6.9 2.4-1.4 4.8-2.6 7.4-3.7 2.7-1.2 5.6-2 8.5-2.6 5.7-1.1 11.6-1.1 17.2.2 5.1 1.2 10.2 3.5 13.7 7.5 1.1 1.2 2 2.6 2.7 4.1-3.3 1.7-6.3 4.1-8.1 7.4-1.2 2.2-1.5 5 0 7.1 1.4 2 4 2.4 6.2 1.4 2.3-1.1 3.6-3.5 4.1-5.9.5-2.5.4-5.2-.4-7.6-.2-.7-.4-1.4-.7-2.1l.3-.1c5.301-2.5 11.201-2.9 17.001-3h4.6c.2-.1.3-.3.3-.5-.2-.1-.3-.2-.5-.2-6.2-.1-12.7-.2-18.601 1.8-1.2.4-2.4.8-3.5 1.4-4.5-9.1-15.5-12.8-25.3-13-6.1-.1-12.1 1-17.6 3.4-5.3 2.2-10.1 5.4-15.3 7.9-5 2.5-10.3 4-15.9 3.8-5.4-.2-10.7-1.7-15.3-4.6-1.1-.7-2.2-1.5-3.3-2.3-.4-.3-.9.2-.5.5 7.9 6.5 18.5 8.7 28.4 6ZM128.6 55.7c.3.3.9-.1.6-.4-1.8-1.9-3.5-3.8-5-5.9 2.4.4 4.8.6 7.2.4.4 0 .4-.7-.1-.7-2.6.2-5.3 0-7.9-.6-.2 0-.4.1-.4.3v.3c1.7 2.3 3.6 4.5 5.6 6.6Z\" fill=\"currentColor\" /><path d=\"M290.8 174.205c5 1.7 11.6-1.9 13.9-6.4.8-1.5 1-3.4.3-5-.7-1.7-2.3-2.7-4.1-2.5-1.8.2-3.4 1.3-4.7 2.5-1.2 1.1-2.2 2.4-3 3.8-1.2 2.3-2.1 4.9-2.4 7.6Zm-3.795-62.607c2.7 2.3 5 5.2 6.6 8.4 1.7 3.5 2.6 7.3 2.6 11.2 0 3.9-.7 7.9-2 11.6-1.4 3.8-3.1 7.4-5.2 10.8-1.9 3.3-3.8 6.7-4.2 10.5-.3 3.1.4 6.6 2.7 8.9.8.8 1.7 1.4 2.7 1.9-.2 2.3-.2 4.7.1 7 2 15.2 14.5 26.9 29.9 28 1.8.1 3.7.1 5.5-.1.3-.2.3-1-.1-.9-7.3.7-14.6-1.1-20.8-5.1-6.1-4-10.6-10.1-12.7-17-1.2-3.8-1.7-7.8-1.3-11.8 4.8 1.5 10.8-1.5 13.7-5.4 1.1-1.4 1.8-3.1 1.8-4.9-.11-1.5-.7-3-1.9-4-2.9-2.4-6.8 0-9 2.2-3 3-4.6 7-5.1 11.2-.9-.4-1.7-1-2.4-1.7-2.2-2.4-2.8-5.9-2.3-9 .6-3.8 2.6-7.1 4.5-10.4 3.8-6.5 6.6-13.6 6.7-21.3.1-3.7-.6-7.3-2-10.7-1.3-3.1-3.3-5.9-5.6-8.3-4.9-5.1-11.41-8.5-17.9-10.9a75.99 75.99 0 0 0-24.01-4.8c-1.99-.1-4 0-6 .1-.49 0-.49.8 0 .7 8.6-.4 17.2.7 25.41 3.2 7.3 2.2 14.5 5.5 20.3 10.6Zm31.593 94.7c-.4-.1-.7.5-.2.7 2.5.6 5 1.4 7.4 2.2-2.2.9-4.3 2.1-6.3 3.5-.4.3.1.8.4.5 2.2-1.6 4.5-2.8 7-3.8.2-.1.2-.3.1-.5 0 .1-.1 0-.2 0-2.7-1-5.4-1.9-8.2-2.6ZM301.404 246.904c.2 0 0-.6-.5-.5-3.8 1.1-8.8.6-11.3-2.7-2.3-2.9-1.7-6.9 0-9.9.9-1.6 2.1-3 3.5-4.1 1.7-1.3 3.5-2.4 5.3-3.6 1.6-1.2 3.1-2.5 3.9-4.4.8-1.8.7-3.8-.1-5.5-1.9-4.3-6.7-5.7-11-6.2-5-.5-10.1-.4-15.1-.8-4.6-.4-9.2-1.2-13.3-3.2-3.7-1.8-7.1-4.5-9.1-8.2-2-3.9-2.4-8.4-1.2-12.6 1.3-4.5 3.9-8.5 7.6-11.5.9-.8 1.8-1.5 2.8-2.1.4-.3 0-.8-.4-.6-4.1 2.6-7.3 6.3-9.5 10.6-1.9 4-2.4 8.5-1.3 12.8 2.2 8.7 11 13.4 19.2 14.8 5 .9 10.2.9 15.3 1.1 4.7.2 10.6.2 14 4 1.4 1.5 2.1 3.5 1.9 5.5-.3 2.1-1.8 3.7-3.4 5-1.7 1.3-3.6 2.4-5.4 3.7-1.5 1.1-2.8 2.4-3.8 4-1.9 2.9-2.8 6.8-1.2 10 1.8 3.8 6.2 5.2 10.1 4.9 1-.1 2-.3 3-.5Z\" fill=\"currentColor\" /><path d=\"M255.101 171.9c-.4.1-.4.8.1.7 2.5-.5 5.1-.9 7.7-1.2-1.6 1.8-3 3.8-4.1 5.9-.2.4.4.7.6.3 1.2-2.3 2.8-4.5 4.6-6.4.1-.2.1-.4-.1-.5-.2 0-.2-.1-.3-.1-2.9.2-5.7.7-8.5 1.3ZM99.7 69.3c4.6-.5 9.3 1.9 12.6 5 .3.3.8-.2.5-.5-.8-.8-1.7-1.5-2.6-2.1-3.6-2.5-8.4-4.1-12.8-2.7-4 1.3-6.5 5-7.2 9.1-.8 4.4.5 8.8 2.8 12.6 2.7 4.4 6.5 7.9 10 11.699 4 4.3 7.7 8.7 11.2 13.4 3.1 4.2 6.1 8.8 7.2 14.1.9 4.5.2 9.7-2.9 13.3-2.9 3.4-7.5 4.6-11.8 4.2-4.7-.4-8.9-2.8-12.3-6-3.7-3.4-6.5-7.8-9.1-12.1-.3-.5-.9-.1-.7.3.7 1.1 1.3 2.1 2 3.2 2.7 4.1 5.8 8.2 9.8 11.2 3.6 2.8 8 4.3 12.5 4.2 4.3-.1 8.5-2 11-5.6 2.6-3.8 3.1-8.9 2.1-13.5-1.2-5.1-4.2-9.7-7.3-13.9-3.4-4.6-7.2-9.1-11.1-13.3-3.6-3.7-7.4-7.3-10.1-11.8-2.3-3.8-3.5-8.4-2.4-12.8.4-2 1.4-3.8 2.8-5.3 1.6-1.5 3.6-2.5 5.8-2.7ZM269.6 89.305c5.7 4 12.6 5.8 19.3 7.4 6.9 1.7 13.9 3.2 20 6.8 5.5 3.2 10.2 8.3 11.4 14.8.6 3 .3 6-.9 8.8-1.3 3-3.5 5.4-5.9 7.6-4.7 4.4-10.4 8.3-12.3 14.8-.9 2.9-.6 6.1.9 8.7.7 1.3 1.7 2.399 2.8 3.3 1.3.9 2.5 1.7 3.9 2.4 1.4.8 2.4 2 3 3.5.5 1.3.6 2.799.3 4.1-.5 3.199-2.7 5.8-5 7.8-1.2 1-2.5 2-3.8 2.899-.4.301 0 .901.4.601 4.5-3.2 10-7.601 9.1-14-.2-1.3-.7-2.5-1.4-3.5-1-1.1-2.2-2.101-3.6-2.8-1.5-.7-2.8-1.7-3.9-2.9-1-1.1-1.7-2.5-2.1-3.9-2-6.9 3.6-12.9 8.3-17 4.6-4 9.8-8.3 10.9-14.7 1-5.801-1.5-11.801-5.4-16-4.5-4.901-11-7.7-17.3-9.5-7.1-2.1-14.5-3.3-21.4-6-5.7-2.3-11.1-5.9-14.3-11.2-7.2-11.8 1.5-25.7 11.6-32.5 1.4-.9 2.9-1.7 4.4-2.4.4-.2.2-.9-.2-.7-5.9 2.5-11.1 7.2-14.6 12.5-3.3 5.1-5.4 11.3-4.1 17.4 1.2 5.7 5.1 10.4 9.9 13.7Z\" fill=\"currentColor\" /><path d=\"M270.901 46.4c-.4.1-.4.8.1.7 2.5-.5 5.1-.9 7.7-1.1-1.6 1.8-3 3.8-4.2 5.9-.2.4.4.7.6.3 1.3-2.3 2.8-4.5 4.7-6.4.1-.2.1-.4-.1-.5-.2-.1-.3-.1-.3-.1-2.9.2-5.7.6-8.5 1.2ZM181.698 129.399c4.6 0 8.8-2.8 10.4-7.1.5-1.4.9-2.9 1.2-4.4.4-1.5 1.2-2.9 2.5-3.8 1.1-.8 2.5-1.3 3.9-1.5 3.2-.4 6.3.9 8.9 2.6 1.3.9 2.6 1.8 3.9 2.8.4.3.8-.3.5-.6-4.5-3.5-10.3-7.4-16.2-4.7-1.2.5-2.2 1.3-2.9 2.4-.8 1.3-1.4 2.7-1.6 4.2-.3 1.6-.9 3.2-1.7 4.6-.8 1.3-1.9 2.3-3.1 3.2-6 3.9-13.4.2-18.7-3.1-5.2-3.2-10.8-7-17.2-6.2-5.9.7-10.8 4.9-13.8 9.8-3.4 5.8-4.2 12.7-4.2 19.3 0 7.4 1.1 14.8.4 22.3-.6 6.1-2.4 12.3-6.6 16.9-9.2 10.3-25.1 6-34.4-1.7-1.3-1.1-2.5-2.2-3.5-3.5-.3-.4-.9.1-.6.4 4.1 5 10.1 8.5 16.2 10.4 5.8 1.8 12.4 1.9 17.8-1.1 5.2-2.8 8.5-7.9 10.3-13.4 2.1-6.7 1.9-13.7 1.6-20.6-.4-7-.9-14.2.7-21.2 1.5-6.3 5-12.2 10.8-15.2 2.6-1.4 5.7-2 8.7-1.7 3.2.4 6.2 1.8 9 3.4 5.5 3.2 11 7.6 17.7 7.5Z\" fill=\"currentColor\" /><path d=\"M96 182.598c-2.6-.6-5.1-1.4-7.5-2.7-.2-.1-.4 0-.5.1 0 .1 0 .3.1.4 1 2.7 2.3 5.3 3.6 7.8.2.4.9.1.7-.2-1.2-2.3-2.4-4.6-3.3-7 2.2 1 4.5 1.8 6.8 2.3.2 0 .3-.2.3-.4 0-.1-.1-.3-.2-.3ZM150.9 94.798c-3.8-6.4-11.9-7.7-18.2-10.1-3.3-1.3-6.7-3-8.9-5.9-2.2-2.9-2.7-6.8-1.4-10.2.6-1.7 1.7-3.1 3.1-4.2.4-.3-.2-.8-.5-.5-2.7 2.3-4.2 5.8-4 9.3.2 3.5 2.2 6.5 4.9 8.7 5.9 4.6 13.9 4.9 20.1 9 3.2 2.1 5.5 5.2 5.7 9.1.2 4-1.5 7.9-4 10.9-2.8 3.3-6.6 5.6-10.3 7.7-3.7 2.1-7.6 4.1-11.2 6.7-6.8 4.8-12.8 12-12.9 20.8 0 7.2 5.2 14.7 12.9 15 4.5.2 8.7-1.9 12.2-4.5 3.7-2.7 7.1-5.9 11.1-8.2 3.7-2.1 8-3.8 12.3-4 3.9-.2 8.1 1 9.8 4.8 1.7 3.6.7 7.9-1 11.3-1.9 3.9-4.8 7.3-6.5 11.3-1.5 3.6-2.2 8.1-.1 11.7 1.8 2.7 4.8 4.3 8.1 4.2 1.6 0 3.1-.4 4.4-1.2.3-.2-.1-.9-.5-.6-3 1.7-6.6 1.5-9.4-.5-3.3-2.4-3.9-6.7-2.9-10.5 2-8 10-13.7 9.3-22.5-.3-3.6-2.2-6.7-5.7-8-3.6-1.4-7.7-.8-11.3.3-4.1 1.3-8 3.3-11.4 6-3.6 2.7-7 5.9-11.1 7.9-3.8 1.8-8.2 2.4-12.1.4-3.2-1.8-5.6-4.7-6.7-8.3-2.7-8.4 2.4-16.9 8.5-22.3 3.4-2.8 7-5.2 10.9-7.2 3.7-2 7.4-4 10.7-6.6 3.1-2.4 5.5-5.6 6.9-9.3 1.2-3.5 1.1-7.3-.8-10.5ZM266.895 118.002c1.7-.5 3.5-.6 5.2-.3.5.1.5-.6.1-.7-3.5-.7-7.2.3-9.8 2.8-2.6 2.4-3.7 5.8-3.6 9.3.2 7.5 4.9 13.9 5.7 21.3.4 3.7-.6 7.5-3.4 10.2-2.9 2.6-7.1 3.8-11 3.8-4.3-.1-8.5-1.6-12.5-3.1-4-1.6-8-3.3-12.2-4.5-8-2.2-17.4-2.4-24.2 3.1-5.6 4.5-8.1 13.3-3.5 19.4 2.7 3.6 7 5.5 11.1 6.7 4.4 1.2 9 1.8 13.3 3.5 4 1.5 8 3.8 10.9 7 2.6 2.9 4.3 6.9 2.5 10.6-1.8 3.6-5.7 5.5-9.4 6.4-4.2 1-8.7.9-12.9 2.1-3.8 1.1-7.7 3.4-9.1 7.3-1 3.1-.3 6.5 1.8 9 1 1.2 2.3 2.1 3.7 2.7.2.1.4 0 .5-.3-.1-.6-.2-.8-.5-.9-3.2-1.2-5.3-4.2-5.5-7.6-.3-4.1 2.8-7.2 6.3-8.9 7.4-3.5 16.9-.9 23.3-6.9 2.6-2.5 3.8-5.9 2.7-9.4-1.2-3.7-4.2-6.5-7.3-8.6-3.6-2.4-7.6-4.1-11.9-5.1-4.4-1.1-9-1.7-13.2-3.7-3.8-1.8-7.1-4.8-7.9-9.1-.6-3.6.1-7.4 2.2-10.4 4.8-7.3 14.7-8.8 22.6-7.4 4.3.9 8.4 2.2 12.5 3.9 3.9 1.6 7.8 3.3 11.9 4.2 3.8.9 7.8.7 11.5-.5 3.4-1.3 6.4-3.7 7.7-7.2 2.6-6.9-1.5-14-3.6-20.5-1.1-3.4-1.9-7.1-1.1-10.7.9-3.6 3.6-6.4 7.1-7.5ZM110.604 220.504c3.8 4.1 9.2 6.5 14.7 7.2 6.9.9 13.9-.7 20.3-3.2 1.6-.6 3.2-1.3 4.7-2 .4-.2 0-.8-.4-.7-6.8 3.1-14.1 5.6-21.7 5.4-6-.2-12.1-2.4-16.4-6.6-2.2-2.1-3.8-4.7-4.7-7.6-1-3-1.4-6.2-2.4-9.3-1.6-5.8-7-9.8-13-9.5-6 .2-11.2 4.4-13.5 9.8-2.3 5.2-2 12 2.1 16.3.5.5 1 .9 1.5 1.3-.8 2.6-.9 5.3-.5 7.9 1.1 6 5.3 10.9 11 12.9 1.3.5 2.7.8 4.2.9.5 0 .5-.7 0-.7-5.8-.6-10.8-4.1-13.3-9.4-1.5-3.5-1.8-7.5-.7-11.1 3.5 2.1 8.4 2 11.5-.7 2.1-1.8 3.5-5.1 1.4-7.4-.9-1-2.2-1.6-3.5-1.7-1.5-.1-3 .3-4.2 1.1-2.6 1.6-4.4 4.4-5.5 7.2-.1.1-.1.3-.1.4-.3-.2-.5-.4-.8-.7-4.2-3.9-4.6-10.6-2.5-15.7 2.2-5.2 7.2-9.4 13-9.6 2.8-.1 5.5.7 7.8 2.3 2.5 1.7 3.9 4.4 4.7 7.2.9 2.8 1.3 5.9 2.2 8.8.8 2.7 2.2 5.1 4.1 7.2Zm-28.004.9c3.6 2.1 8.8 1.9 11.6-1.3.9-1.2 1.7-2.8 1.3-4.3-.4-1.3-1.4-2.3-2.7-2.7-2.9-1-5.8 1.1-7.6 3.3-1.1 1.5-2 3.1-2.6 5Z\" fill=\"currentColor\" /><path d=\"M91.203 237.597c-.3-.3-.8.2-.5.5 2.1 1.6 4 3.2 5.9 5-2.4-.1-4.8.2-7.2.7-.4.1-.3.8.2.7 2.6-.6 5.2-.8 7.9-.7.2 0 .3-.2.3-.4-.1-.1-.1-.1-.1-.2-2.1-2-4.2-3.9-6.5-5.6ZM239.904 176.903c6 .6 11.6-3.2 13.4-9 1.9-5.7-.3-12-4.5-16.1-4.1-4-10.6-6.1-16-3.7-.6.3-1.2.6-1.7 1-2.1-1.6-4.6-2.7-7.2-3.2-6-1-12 1.2-15.9 5.9-.9 1.1-1.7 2.3-2.3 3.6-.2.4.5.7.7.3 2.5-5.2 7.6-8.8 13.4-9.3 3.8-.2 7.6.9 10.7 3.2-3.2 2.6-4.8 7.1-3.4 11.1.9 2.6 3.6 5 6.5 3.9 1.2-.5 2.3-1.5 2.8-2.7.6-1.4.8-2.9.4-4.4-.6-3-2.6-5.7-4.9-7.7l-.3-.3c.3-.2.6-.4.9-.5 5.1-2.6 11.5-.7 15.6 3.1 4.1 3.9 6.4 10 4.5 15.5-.9 2.6-2.6 4.9-4.9 6.5-2.5 1.7-5.5 2.1-8.4 2-2.9-.2-6-.8-9-.9-2.8-.1-5.6.4-8.2 1.4-5.1 2.2-9.3 6.4-11.8 11.3-3.2 6.1-4.1 13.3-3.9 20.1 0 1.7.1 3.4.3 5.1 0 .5.8.4.7-.1-.6-7.4-.4-15.2 2.4-22.2 2.2-5.6 6.4-10.5 11.9-13.2 2.7-1.3 5.7-1.9 8.7-1.7 3.2.1 6.3.9 9.5 1Zm-8.701-26.803c-3.2 2.6-4.9 7.5-2.8 11.3.7 1.3 1.9 2.6 3.5 2.7 1.3.1 2.6-.5 3.4-1.6 1.9-2.5 1-5.9-.5-8.3-1-1.6-2.2-3-3.6-4.1Z\" fill=\"currentColor\" /><path d=\"M212.9 152.395c.4-.2.1-.9-.3-.6-2.2 1.4-4.4 2.7-6.8 3.8.9-2.2 1.5-4.6 1.8-7 .1-.4-.6-.5-.7-.1-.4 2.6-1.1 5.2-2.1 7.6-.1.2 0 .4.2.4.2.2.3.2.4.1 2.6-1.2 5.1-2.6 7.5-4.2Z\" fill=\"currentColor\" /><path d=\"M64.4 52.8c0-7-5.7-12.7-12.7-12.7-7 0-12.7 5.6-12.7 12.6s5.7 12.7 12.7 12.7c7 0 12.7-5.6 12.7-12.6Zm-22.4 0c0 5.4 4.3 9.7 9.7 9.7 5.4 0 9.7-4.3 9.7-9.7 0-5.4-4.4-9.7-9.7-9.7-5.3 0-9.7 4.3-9.7 9.7Z\" fill=\"#03D5B7\" /><path d=\"m351.898 160.898 12.6-3.9c.6-.2.9-.8.7-1.3-.2-.6-.8-.9-1.3-.7l-12.6 3.9c-.6.2-.9.8-.7 1.3.2.4.6.7 1 .7h.3ZM343.503 144.697c1.2.6 2.4.9 3.6.9.8 0 1.6-.1 2.2-.4 1.9-.7 3.6-2 4.5-3.8.9-1.8 1.2-3.9.5-5.8s-2-3.6-3.8-4.5c-1.8-.9-3.8-1.1-5.8-.5-1.9.7-3.6 2-4.5 3.8-.9 1.8-1.2 3.9-.5 5.8s2 3.5 3.8 4.5Zm-1.407-9.397c-.7 1.3-.8 2.9-.4 4.3s1.4 2.6 2.8 3.3c1.3.7 2.9.8 4.3.4s2.6-1.4 3.3-2.8c.7-1.3.8-2.9.4-4.3s-1.4-2.6-2.8-3.3c-.7-.4-1.6-.7-2.6-.7-.6 0-1.1.1-1.7.3-1.4.4-2.6 1.4-3.3 2.8ZM318.297 126.997l8.2-34.1c.2-.5-.2-1.1-.7-1.2-.5-.2-1.1.2-1.2.7l-8.2 34.1c-.2.5.2 1.1.7 1.2h.2c.4 0 .8-.3 1-.7ZM64.695 188.595l8.8-9.9c.4-.4.3-1-.1-1.4-.4-.4-1-.3-1.4.1l-8.8 9.9c-.4.4-.3 1 .1 1.4.2.2.5.3.7.3.3 0 .6-.1.7-.4ZM53.801 204.1c2.1-.2 3.9-1.1 5.3-2.6 1.3-1.5 2-3.5 1.9-5.5-.2-2.1-1.1-3.9-2.6-5.3-1.5-1.3-3.5-2-5.5-1.9-4.2.2-7.5 3.9-7.2 8.1.2 2.1 1.1 3.9 2.6 5.3 1.4 1.2 3.2 1.9 5.1 1.9h.4Zm-.703-13.3c-3.1.2-5.5 2.9-5.3 6 .1 1.5.8 2.9 1.9 3.9 1.1 1 2.6 1.5 4.1 1.4 1.5-.1 2.9-.8 3.9-1.9 1-1.1 1.5-2.6 1.4-4.1-.1-1.5-.8-2.9-1.9-3.9-1.1-.9-2.4-1.4-3.8-1.4h-.3Z\" fill=\"#FFC412\" /><path d=\"M42.005 258.701c-.1.4.1.8.5 1 .2.1.3.1.5.1s.4 0 .7-.2l26.9-22.5c.3-.3.4-.7.3-1.1-.2-.4-.5-.7-.9-.7l-24.7-2.2c-.2-.1-.5 0-.7.2-.2.2-.4.4-.4.7l-2.2 24.7ZM44.2 256.5l23.2-19.4-21.3-1.9-1.9 21.3Z\" fill=\"#03D5B7\" /><path d=\"M132.097 118.801c.3-.5.1-1.1-.4-1.4-3.2-1.7-9.1-1.2-9.4-1.2-.5.1-1 .6-.9 1.1.1.5.5 1 1.1.9 1.6-.2 6.1-.3 8.3.9.2.1.3.1.5.1.4 0 .7-.2.8-.4ZM100.504 122.2c2.8-4.9 6.9-5.2 7.1-5.2.5 0 .9-.5.9-1-.1-.5-.6-.9-1.1-.9-.2 0-5.3.4-8.7 6.2-.2.5-.1 1.1.4 1.4.2.1.3.1.5.1.3 0 .7-.2.9-.6ZM96.097 118.903c.6-2.2 2.4-5.2 2.4-5.2.2-.5.1-1.1-.4-1.4-.5-.2-1.1-.1-1.4.4-.1.2-1.9 3.3-2.6 5.8-.2.5.2 1.1.7 1.2h.3c.4 0 .8-.3 1-.8ZM368.4 263.1c0-.6-.4-1-1-1H211.6c-.6 0-1 .4-1 1s.4 1 1 1h155.8c.5 0 1-.4 1-1ZM203.1 263.1c0-.6-.4-1-1-1h-14.5c-.6 0-1 .4-1 1s.4 1 1 1h14.5c.6 0 1-.4 1-1Z\" fill=\"currentColor\" /><path d=\"M127.499 62.199c-1 2.8-1.7 5.7-2.2 8.5-2.2 2.5-3.9 5.4-4.9 8.6-1.3 4.4-1.1 12.1.1 20.2-1.6-.9-3-.7-4.5-.4-9.6 1.8-6.9 15 1.5 17.5.9.4 6.9 2.2 7.8 2.1 1.2 3.3 2.6 6 4.1 8-.3 8.1-.7 17-.5 17.3 5.3 8.7 18.2 19 25.4 17 6.9-2 4.5-21.4 4.4-22.1-.1-1.4-.1-2.8 0-4.2 4.1-1.5 16.3-5.9 18.8-10.7 3.5-7-7.3-48.2-9-52.7-2.1-5.6-4.5-9.8-6.9-11.6-9.7-7-24.6-5.3-34.1 2.5Z\" fill=\"#fff\" /><path d=\"M159.7 139.005v-3.5c4.9-1.8 16.2-6 18.7-11 3.8-7.7-7.6-49.7-9-53.5-1.5-4.2-4.1-9.7-7.2-12-9.8-7-25-5.9-35.3 2.6-.1.1-.2.2-.3.4-1 2.7-1.7 5.5-2.2 8.4-2.3 2.6-4 5.6-4.9 8.8-1.1 4.1-1.2 10.9-.1 19-1.2-.3-2.4-.1-3.5.1-4.1.8-6.7 3.7-6.9 7.7-.3 4.5 2.8 10.1 8.2 11.7.8.4 5.4 1.8 7.5 2.1 1.2 3.1 2.5 5.5 3.8 7.4l-.2 4.2c-.5 12.7-.5 12.8-.2 13.3 4.8 7.7 16.1 17.7 24.2 17.7.8 0 1.6-.1 2.2-.2 7-2.1 5.8-18.3 5.2-23.2Zm-38.001-39.302c.1.4-.1.7-.4 1-.3.2-.7.2-1 .1-1.3-.7-2.5-.6-3.9-.3-3.2.6-5.1 2.7-5.3 5.8-.2 3.7 2.3 8.4 6.8 9.7h.1c1 .4 6.5 2 7.4 2 .4 0 .9.3 1 .6 1.3 3.3 2.6 6 3.9 7.8.1.2.2.4.2.6l-.2 4.6c-.2 5.1-.4 11-.4 12.2 5.5 8.8 17.9 18.2 24.1 16.4 4.7-1.3 4.5-13.8 3.7-21v-.1c-.1-1.3-.1-2.7 0-4.3 0-.4.3-.8.7-.9l.6-.2c4.2-1.6 15.5-5.7 17.6-10 3.3-6.5-7.3-47.3-9-51.9-2.1-5.6-4.4-9.5-6.5-11.1-8.9-6.4-23.1-5.3-32.6 2.3-.9 2.6-1.6 5.3-2.1 8.1 0 .2-.1.4-.2.5-2.2 2.5-3.8 5.2-4.7 8.3-1.2 4-1.1 11.3.2 19.8Z\" fill=\"currentColor\" /><path d=\"M149.8 101.295c3.3-.5 2-7.8-1.1-7.3-3.6.6-2.2 7.8 1.1 7.3ZM167.598 97.405c3.3-.9 1.7-8.1-1.9-7.1-3 .8-1.3 8 1.9 7.1ZM157.9 119.7c.6-.1.9-.7.7-1.2 0-.2-1.1-3.6-6.9-4.3-.5 0-1 .4-1.1.9 0 .5.4 1 .9 1.1 4.4.6 5.3 2.8 5.3 2.9.2.4.6.7 1 .7.1 0 .2-.1.1-.1Z\" fill=\"currentColor\" /><path d=\"M162.1 109.8s5.1-.7 4.9-3.3c-.2-2.6-5.3-2.1-5.3-2.1l-2.4-15.3 2.8 20.7Z\" fill=\"#fff\" /><path d=\"M167.804 106.504c-.1-.8-.4-1.4-1-1.9-1.2-1.1-3.3-1.2-4.5-1.2l-2.2-14.4c0-.5-.6-.9-1.1-.8-.5 0-.9.6-.8 1.1l2.4 15.3c.1.5.6.9 1.1.8 1.1-.1 3.2 0 4 .7.2.1.3.3.3.5.1 1.2-2.8 2-4.1 2.2-.5 0-.9.6-.8 1.1.1.5.5.9 1 .9 0 0 .1 0-.1.1.6-.1 6.1-1 5.8-4.4ZM142.003 92.1c2.8-4 7.8-4.1 7.9-4.1.6 0 1-.4 1-1s-.5-1-1-1c-.2 0-6.1.1-9.5 4.9-.4.5-.3 1.1.2 1.4.2.1.4.2.6.2.3 0 .6-.1.8-.4ZM169.9 85.1c0-.5-.4-1-1-1 0 0-3.5-.1-6-2.5-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4 3.1 2.9 7.1 3 7.3 3 .6 0 1-.4 1.1-.9Z\" fill=\"currentColor\" /><path d=\"M151.998 108.698c5.4-2.4 7.7-8.7 5.3-14-1.2-2.5-3.3-4.5-5.9-5.5-2.7-1-5.5-.9-8.1.3-2.5 1.2-4.5 3.3-5.5 5.9-1 2.7-.9 5.5.3 8.1 1.7 3.9 5.6 6.2 9.6 6.2 1.5 0 3-.3 4.3-1ZM144.204 91.4c-4.3 2-6.2 7-4.3 11.3 2 4.3 7 6.2 11.3 4.3 4.3-2 6.2-7 4.3-11.3-.9-2.1-2.6-3.7-4.8-4.5-.9-.4-2-.6-3-.6-1.2 0-2.4.3-3.5.8ZM171.704 104.302c4.6-.7 7.6-5.6 6.8-11-.4-2.6-1.6-4.9-3.4-6.5-1.8-1.6-4.1-2.3-6.3-2-2.2.3-4.1 1.7-5.4 3.8-1.2 2.1-1.7 4.6-1.3 7.2.7 5 4.5 8.6 8.6 8.6.4 0 .7 0 1-.1ZM169.103 86.9c-1.6.2-3.1 1.3-4 2.9-1 1.7-1.4 3.7-1.1 5.8.6 4.3 4 7.4 7.4 6.8 3.4-.5 5.7-4.4 5.1-8.7-.3-2.1-1.3-4-2.7-5.3-1.1-1.1-2.5-1.6-3.9-1.6-.3 0-.5 0-.8.1Z\" fill=\"#FFC412\" /><path d=\"M138 101.1c.6 0 1-.4 1-1s-.5-1-1-1l-13.1.4c-.6 0-1 .4-1 1s.5 1 1 1l13.1-.4ZM157.395 97.502c.1-.1 2.5-2.1 5.2-.9.5.2 1.1 0 1.3-.5.2-.5 0-1.1-.5-1.3-3.8-1.8-7.2 1.1-7.3 1.2-.4.4-.5 1-.1 1.4.2.2.5.3.8.3.3 0 .5-.1.6-.2Z\" fill=\"#FFC412\" /><path d=\"M168.601 36.9c-3-1.5-6.9.7-8.6 5.1l-.2-.2c-2.5-1.8-5.9-1.3-7.7 1.2-1.9 2.4-3.1 5.3-3.7 8.3 0 0-10.2-.7-18.3.7-1.1.2-2.3.3-3.4.4-1.1.1-2.2.4-3.3.9-4.8 2.2-7.2 7.4-5.9 12.3-.9.1-1.8.4-2.7.8-4.9 2.2-6.6 7.2-5.8 12.7 1.2 10.1 9.1 31.301 16.7 29.701 5.8-1.2 3.4-23.5 3.4-23.5 6.3-.9 11.2-5.8 12.2-12 0 0 20.6 9.4 31.4-2.3 9-9.7 1.4-31.4-4.1-34.1Z\" fill=\"currentColor\" /><path d=\"M158.803 64.096c-1.5 1.6 14.9 9.9 14.9 9.9l.7 10.6 1.7.7 2.1 1.3 39 35-47.5 28.3s16.5 32.6 17.5 33.3l54.4-44.8c4.8-4.1 7.4-10.2 7.1-16.5-.4-6.7-4.2-12.8-10.1-16.1l-51.7-28.8-10.3-9.6-2.9-7.2c.5-2.4-1.1-4.8-3.5-5.2-.1 0-.2 0-.3-.1l-8.8-.6s-4.2-.2-3.8 2.4c.1.5.4.9.9 1l-.9 1.5c-.1 2.4 3 2.7 3 2.7l7.3.7 1.5 3.9s-8.8-4-10.3-2.4Z\" fill=\"#fff\" /><path d=\"m177.495 87.398 38 34-46.3 27.6c-.5.3-.6.8-.4 1.3 6.2 12.2 16.8 32.8 17.7 33.6.1.1.4.2.6.2.2 0 .5-.1.6-.2l54.4-44.8c5.1-4.2 7.9-10.7 7.5-17.3-.4-7.1-4.4-13.4-10.6-16.9l-51.3-28.7-10.1-9.3-2.7-6.7c.4-2.8-1.5-5.5-4.3-6.1-.2-.1-.3-.1-.5-.1l-8.9-.6c-.3 0-2.9-.1-4.2 1.3-.6.6-.8 1.4-.7 2.3 0 .4.2.8.5 1.1l-.4.7c-.1.2-.1.3-.1.5-.1 2.1 1.6 3.1 3 3.5-.5.1-.9.3-1.2.6-.3.3-.4.8-.3 1.2.4 2.2 9.3 7.1 15 10l.6 10.1c0 .4.2.8.6.9l1.6.6 1.9 1.2ZM175.6 67.8l-2.9-7.2c-.1-.2-.1-.4-.1-.6.4-1.9-.8-3.7-2.7-4.1h-.2l-8.8-.6c-.6 0-2.1.1-2.6.6-.1.1-.2.3-.2.7 0 .1.1.2.2.2.3.1.5.3.6.6.1.3.1.6-.1.9l-.7 1.3c.1 1.2 1.9 1.4 2.1 1.4l7.4.7c.4 0 .7.3.8.6l1.5 3.9c.1.4 0 .8-.3 1.1-.3.3-.7.3-1.1.2-3.5-1.6-7.1-2.7-8.6-2.8 1.7 1.7 8.2 5.4 14.1 8.4.3.2.5.5.5.8l.6 10 1.1.4c.1 0 .1.1.2.1l2.1 1.3.1.1 39 35c.2.2.4.5.3.8 0 .3-.2.6-.5.8L171 150.2c5.8 11.4 14.1 27.6 16.4 31.5l53.5-44.1c4.6-3.8 7.2-9.6 6.8-15.6-.4-6.4-4-12.2-9.6-15.3l-51.7-28.8c-.1 0-.1-.1-.2-.1l-10.3-9.6c-.1-.1-.2-.2-.3-.4Zm-8.3-3.1-.4-1.1-3.7-.3c1.3.4 2.8.9 4.1 1.4Z\" fill=\"currentColor\" /><path d=\"m113.702 65.5-1.1.7-8.9 6.8s-43.9 33.2-52.7 42.5c-4.1 4.3-5.6 15.7-.6 20.8 13 13.3 39.3 37.2 39.3 37.2l22-25.1-30.8-27.3 25.9-26 .1.1 16.7-17.2 2.7.8c1.4.2 2.9-.2 4-1.2 1-.9 2-1.9 2.8-2.9.6-.8 1.9-2.9 2.1-3.2.6-.6 1.4-1.1 2.2-1.5 0 0 13.6-.2 14.7-.8 1-.6 2.3-2.6-1-3.2l-12.9-2 7.5-3.8 3.6-.1c-.5-2.3-2.4-3.9-4.7-4-4-.3-4.7.6-4.7.6s-2-4.2-3-4.5c-1.5-.5-3.1-.7-4.7-.8-1.3.5-2.4 1.2-3.4 2.2 0 0-4.8-2.6-5.9-1-1.1 2.1-2 4.3-2.6 6.5l-6.6 6.4Z\" fill=\"#fff\" /><path d=\"m82.398 121 24.7-24.8c.2-.1.4-.2.5-.3l16.3-16.8 2.1.6h.1c1.8.3 3.6-.2 4.8-1.4 1-.9 2-2 2.9-3.1.4-.4.9-1.2 1.3-1.9.2-.4.6-1 .7-1.1.5-.5 1.1-.9 1.7-1.2 6.3-.1 14-.4 15-1 .9-.6 1.8-1.7 1.6-2.9-.2-.8-.8-1.7-3-2.1l-9.8-1.6 4.5-2.3 3.4-.1c.3 0 .6-.2.8-.4.2-.2.3-.5.2-.8-.5-2.7-2.9-4.7-5.6-4.8-2.1-.2-3.5 0-4.3.2-1-1.9-2.2-3.8-3.2-4.1-1.6-.5-3.3-.8-5-.8-.2 0-.3.1-.4.1-1.2.4-2.2 1.1-3.2 1.9-1.8-.8-5.3-2.2-6.6-.3-.1 0-.1.1-.1.1-1.1 2.1-1.9 4.3-2.6 6.5l-6.3 6.1-1 .6c0 .1-.1.1-.1.1l-8.6 6.7c-.1 0-.1.1-.2.1-1.8 1.3-44 33.3-52.9 42.5-4.3 4.5-6.3 16.5-.6 22.2 12.9 13.2 39.1 37.1 39.4 37.3.2.2.5.3.7.3.4 0 .6-.2.8-.4l22-25.1c.3-.4.3-1-.1-1.4l-29.9-26.6Zm55.001-52c6.3-.1 13.4-.4 14.3-.7.3-.2.6-.7.6-.8 0 0-.2-.3-1.3-.5l-13-2.1c-.4-.1-.8-.4-.8-.8-.1-.4.2-.9.5-1l7.5-3.8c.1-.1.3-.1.4-.1l2.2-.1c-.7-1.2-1.9-2-3.3-2.1-2.9-.2-3.8.2-4 .3-.2.2-.5.3-.8.3-.3 0-.6-.3-.8-.6-.9-1.9-2-3.7-2.5-4-1.4-.4-2.8-.7-4.2-.7-1.1.4-2.1 1.1-2.9 1.9-.3.3-.8.4-1.2.2-2.1-1.1-4.2-1.6-4.6-1.3-1 2-1.9 4.1-2.5 6.2 0 .2-.1.3-.3.4l-6.6 6.4c-.1.1-.1.1-.2.1l-.9.8-8.7 6.8c-.1 0-.2.1-.3.1-3.2 2.4-44 33.4-52.4 42.2-3.6 3.9-5.3 14.7-.6 19.5 11.6 11.9 34.1 32.5 38.5 36.5l20.7-23.5-30-26.7c-.2-.2-.3-.4-.3-.7 0-.3.1-.5.3-.7l25.9-26c.1-.1.3-.2.4-.3l16.4-16.8c.3-.3.6-.4 1-.3l2.7.8c1.1.2 2.2-.2 3.1-1 1-.9 1.9-1.8 2.7-2.8.3-.4.8-1.1 1.2-1.8.6-1 .8-1.3 1-1.5.7-.7 1.5-1.2 2.4-1.7.1-.1.3-.1.4-.1Z\" fill=\"currentColor\" /><path d=\"M192.1 206c1.2 16.7 6.5 20.9 6.5 20.9l-97.2 23.7-3.2-55.3L93 190l-24.6-26.4c11.6-8.9 18-21.2 18.4-38.5l13.5 13c2.3 2.2 5.2 3.7 8.3 4.4 3.8.8 7.8 1 11.8.7l6.2-.5c11.1 13.3 31.7 15.5 35-.8l4.7.6c2.3.3 4.7-.5 6.4-2.1l1-.9h4.2l24.9-9.8s16.3 21.1 17.6 31.4L191.2 184l.9 22Z\" fill=\"#fff\" /><path d=\"M67.4 163.196c0 .3.1.6.3.8l24.6 26.5 5.2 5.3c.4.4 1 .4 1.4 0 .4-.4.4-1 0-1.4l-5.2-5.2-23.8-25.6c11.1-8.9 17-20.8 17.8-36.3l11.8 11.6c2.4 2.4 5.5 4 8.8 4.7 4 .8 8 1.1 12.1.7l5.6-.5c7 8.1 17.5 12.2 25.8 10.1 5.3-1.4 9-5.2 10.4-10.9l3.8.5c2.6.3 5.3-.5 7.2-2.4l.7-.7h3.8c.2 0 .3-.1.4-.1l24.2-9.5c2.6 3.4 15.3 20.6 16.9 29.8l-28.7 22.6c-.3.2-.4.5-.4.8l.9 22c.9 12.2 4 18 5.7 20.3l-95.6 23.3c-.5.1-.8.7-.7 1.2.1.5.5.8 1 .8h.2l97.2-23.7c.3-.1.6-.4.7-.8.1-.4 0-.8-.3-1 0-.1-5-4.3-6.1-20.2l-.8-21.5 28.8-22.6c.3-.2.4-.6.4-.9-1.3-10.5-17.1-31-17.8-31.9-.3-.3-.8-.5-1.2-.3l-24.7 9.7h-4c-.3 0-.5.1-.7.3l-1 .9c-1.5 1.4-3.5 2.1-5.6 1.8l-4.7-.6c-.5-.1-1 .3-1.1.8-1 5.4-4.2 9-9.1 10.2-7.6 1.9-17.7-2.3-24.1-9.9-.3-.3-.6-.4-.9-.4l-6.2.5c-3.8.3-7.7.1-11.5-.7-3-.7-5.7-2.1-7.9-4.2l-13.5-13c-.3-.3-.7-.4-1.1-.2-.3.1-.6.5-.6.9-.4 16.3-6.3 28.7-18 37.7-.2.2-.4.4-.4.7Z\" fill=\"currentColor\" /><path d=\"M103.905 268.198c.2.4.6.7 1 .7h.2c.1 0 15.4-4.5 17.9-23.3 0-.5-.4-1-.9-1.1-.5 0-1 .4-1.1.9-1.9 15-12.3 20.1-15.5 21.3-12.9-45.2-3.9-83-3.8-83.4.2-.5-.2-1.1-.7-1.2-.5-.2-1.1.2-1.2.7-.1.4-9.4 39.2 4.1 85.4ZM143.104 250.405c.6 0 1-.6.9-1.1l-2.3-16.1c0-.6-.6-1-1.1-.9-.6 0-1 .6-.9 1.1l2.3 16.1c.1.5.5.9 1 .9h.1ZM152.005 249.205c.6 0 1-.6.9-1.1l-2.3-16.7c0-.6-.6-1-1.1-.9-.6 0-1 .6-.9 1.1l2.3 16.7c.1.5.5.9 1 .9h.1Z\" fill=\"currentColor\" /><path d=\"m99.6 243.801 94.401-23.9c.5-.1.8-.7.7-1.2-.1-.5-.7-.8-1.2-.7l-94.4 23.9c-.5.1-.8.7-.7 1.2.1.5.6.8 1 .8.1 0 .2 0 .2-.1Z\" fill=\"currentColor\" /><path d=\"M368.198 43.5c.6-3.2-.6-6.4-3.1-8.5-2.5-2.1-5.9-2.7-9-1.6l-49.2 17.9c-1.5.5-2.8 1.5-3.8 2.7-3.2 3.8-2.8 9.6 1.1 12.8l40.1 33.599c1.2 1 2.7 1.7 4.2 2 5 .9 9.8-2.3 10.6-7.3l9.1-51.6Zm-2.603-.404c.4-2.3-.4-4.5-2.2-6-1.8-1.5-4.2-1.9-6.3-1.1l-49.2 17.9c-3.3 1.2-5 4.9-3.8 8.2.4 1.1 1.1 2 1.9 2.7l40.1 33.7c2.7 2.2 6.7 1.9 9-.8.7-.9 1.2-1.9 1.4-3l9.1-51.6Z\" fill=\"#E0E0E0\" /><path d=\"m348.5 49.3-12.2 16.3 3.3 2.7 13.8-14.9-4.9-4.1ZM335.602 69.902l-.1-.1c-1.4-1.2-3.5-1-4.7.4l-.1.1c-1.1 1.5-.9 3.6.6 4.8l.1.1c1.4 1.2 3.6 1 4.7-.5 0-.2.1-.2.1-.2 1.1-1.4.8-3.5-.6-4.6Z\" fill=\"#E0E0E0\" /><path d=\"M261.3 248s3.2 9.9-6.8 15.1h47.3s-11.3-3.9-8.4-15.1h49.1c2.3 0 4.1-1.8 4.1-4.1v-93.1c.1-2.3-1.8-4.1-4.1-4.1H210.7c-2.3 0-4.1 1.8-4.1 4.1v93.1c0 2.3 1.8 4.1 4.1 4.1h50.6Z\" fill=\"currentColor\" /><path d=\"M278.203 238c-1-.8-2.4-.8-3.3 0-1.1.9-1.2 2.5-.3 3.6 0 .1.1.1.2.2 1 .8 2.4.8 3.3 0 1.1-.9 1.2-2.5.3-3.6-.1 0-.2-.1-.2-.2Z\" fill=\"#455A64\" /><path d=\"M208.8 231v-79.7c0-1.6 1.4-2.9 3-2.9h129.6c1.6 0 3 1.3 3 3V231H208.8Z\" fill=\"#03D5B7\" /><path d=\"M208.8 151.6v3.7h135.6V151c0-1.5-1.2-2.6-2.6-2.6H211.9c-1.7 0-3.1 1.4-3.1 3.2Z\" fill=\"#EBEBEB\" /><path d=\"M213.1 151c-.6 0-1 .4-1 1s.5 1 1 1c.6 0 1-.5 1-1 0-.6-.4-1-1-1ZM215.9 151c-.6 0-1 .4-1 1s.5 1 1 1c.6 0 1-.5 1-1 0-.6-.4-1-1-1Z\" fill=\"#E0E0E0\" /><path d=\"M218.6 151c-.6 0-1 .4-1 1s.5 1 1 1c.6 0 1-.5 1-1 0-.6-.4-1-1-1Z\" fill=\"#03D5B7\" /><path d=\"M277.1 248c-23.1 0-41.9 0-41.9.1s18.7.1 41.9.1c23.1 0 41.9-.1 41.9-.1 0-.1-18.8-.1-41.9-.1Z\" fill=\"#455A64\" /><path d=\"M245.4 182.8c-.8 0-1.4.1-2 .1l1-7.3h10.8v-3.9h-14.1l-1.9 14.9c1-.1 2.1-.2 3.7-.2 5.5 0 8.2 2.4 8.2 6.4s-3.1 6.4-6.6 6.4c-2.5 0-4.8-.9-6-1.6l-1.1 3.6c1.4.9 4.2 1.7 7.2 1.7 6.7 0 11.2-4.6 11.2-10.5 0-6.3-4.8-9.6-10.4-9.6ZM268.5 175.1c3.9 0 5.3 2.6 5.3 5.6 0 4.6-3.6 8.8-10.1 15.5l-3.2 3.4v2.9h18.8v-4h-12.4v-.1l2.5-2.6c5.4-5.4 9.2-10.1 9.2-15.7 0-4.6-2.8-8.9-9.1-8.9-3.4 0-6.4 1.3-8.3 2.9l1.4 3.4c1.4-1.1 3.5-2.4 5.9-2.4ZM293 203c6.3 0 10.1-5.7 10.1-16.1 0-9.3-3.3-15.6-9.8-15.6-6.4 0-10.2 5.9-10.2 15.9 0 9.4 3.4 15.7 9.9 15.8Zm.2-28c-3.1 0-5.2 4.3-5.2 12 0 7.6 1.9 12.1 5.1 12.1 3.9 0 5.2-5.7 5.2-12.1 0-7.3-1.6-12-5.1-12ZM231.995 202.4c.9 0 1.7-.5 2.2-1.2.5-.7.5-1.7 0-2.5l-7.2-12.6c-.4-.8-1.3-1.3-2.19-1.3-.91 0-1.7.5-2.2 1.2l-7.3 12.5c-.51.8-.51 1.7 0 2.5.4.8 1.3 1.3 2.19 1.3l14.5.1Zm-7.1-16.8c-.6 0-1.2.4-1.5.9l-7.3 12.5c-.5.8-.2 1.9.6 2.4.3.1.6.2.9.2l14.5.1c1 0 1.7-.8 1.7-1.8 0-.3 0-.6-.2-.9l-7.2-12.6c-.3-.5-.9-.8-1.5-.8Z\" fill=\"#fff\" /><path d=\"M225.7 190.8h-1.8l.3 5.6h1.2l.3-5.6ZM223.8 198.404c0 .5.4.9 1 .9.5 0 .9-.4.9-.9v-.1c0-.5-.4-.9-.9-.8-.6 0-1 .4-1 .9ZM338.795 198.7l-7.2-12.6c-.39-.8-1.3-1.3-2.19-1.3-.9 0-1.7.5-2.2 1.2l-7.3 12.5c-.51.8-.51 1.7 0 2.5.39.8 1.3 1.3 2.19 1.3l14.5.1c.9 0 1.7-.5 2.2-1.2.5-.7.5-1.7 0-2.5Zm-10.799-12.2-7.3 12.5c-.5.8-.2 1.9.6 2.4.3.1.6.2.9.2l14.5.1c1 0 1.7-.8 1.7-1.8 0-.3 0-.6-.2-.9l-7.2-12.6c-.3-.5-.9-.8-1.5-.8s-1.2.4-1.5.9Z\" fill=\"#fff\" /><path d=\"M330.3 190.8h-1.8l.3 5.6h1.2l.3-5.6ZM328.4 198.404c0 .5.4.9 1 .9.5 0 .9-.4.9-.9v-.1c0-.5-.4-.9-.9-.8-.6 0-1 .4-1 .9ZM240.7 215c1.9 0 3.2-1.5 3.2-3.9s-1.3-3.9-3.2-3.9c-1.9 0-3.2 1.5-3.2 3.9s1.4 3.9 3.2 3.9Zm0-7c-1.4 0-2.3 1.2-2.3 3.1 0 1.9.9 3.2 2.3 3.2 1.4-.1 2.3-1.3 2.3-3.2 0-1.9-.9-3.1-2.3-3.1ZM252 214.8v-4.4c0-.6.1-1.5.1-2.2l-.6 1.7-1.5 4.1h-.6l-1.5-4.1-.6-1.7c0 .7.1 1.5.1 2.2v4.4h-.8v-7.5h1l1.5 4.1c.2.5.4 1.1.5 1.6h.1c.2-.5.3-1.1.5-1.6l1.5-4.1h1v7.5h-.7ZM258.8 208c.8 0 1.3.3 1.7.7l.5-.6c-.4-.4-1.1-.9-2.1-.9-2 0-3.4 1.5-3.4 3.9s1.3 3.9 3.2 3.9c1 0 1.8-.4 2.3-.9V211h-2.4v.7h1.6v2.1c-.3.3-.8.5-1.4.5-1.7 0-2.6-1.3-2.6-3.2 0-1.9 1-3.1 2.6-3.1ZM266.4 214.7c0 .1-.1.2-.2.2h-1.1c.1.2.2.5.2.7.7 0 1.1 0 1.4-.1.2-.1.3-.3.3-.7v-8.2h-2.9v3.7c0 1.5-.1 3.5-.8 5 .2 0 .5.2.6.3.5-1 .7-2.3.8-3.5h1.7v2.6Zm0-5h-1.7V211.5h1.7v-1.8Zm-1.7-.6h1.7v-1.8h-1.7v1.8Zm5.6.2c.8 0 1.3 0 1.6-.1.3-.1.4-.2.4-.6v-2H268v9h.6v-4.9h.3c.3 1 .8 2.1 1.4 2.9-.5.6-1 1.1-1.6 1.4.1.1.3.3.4.5.6-.3 1.1-.7 1.6-1.3.5.6 1.1 1.1 1.7 1.4.1-.1.2-.4.4-.5-.7-.3-1.3-.8-1.8-1.4.7-1 1.2-2.1 1.5-3.5l-.4-.2h-3.5v-2.8h3v1.3c0 .1 0 .2-.2.2h-1.3c.1.2.2.4.2.6Zm.4 3.9c.5-.7.9-1.5 1.1-2.4h-2.3c.3.9.7 1.7 1.2 2.4ZM278.9 206.3l-.7-.1c-.5.9-1.6 1.9-3 2.7.1.1.3.3.4.5.6-.3 1.1-.7 1.5-1 .4.5 1 1 1.6 1.3-1.3.4-2.7.7-4 .8.1.1.3.4.3.6 1.5-.1 3.1-.5 4.5-1 1.2.5 2.6.8 4.2.9.1-.2.3-.4.4-.6-1.4 0-2.7-.2-3.8-.6 1.1-.6 2.1-1.3 2.7-2.2l-.5-.4h-4.3c.3-.3.5-.6.7-.9Zm-3.8 9.4c2.1-.5 3.4-1.3 4-3h3.2c-.1 1.5-.4 2.1-.6 2.3-.1.1-.2.1-.4.1s-.9 0-1.5-.1c.1.2.2.4.2.6h1.5c.4 0 .6-.1.8-.3.3-.3.6-1.1.8-3v-.3.1h-3.9c.1-.3.1-.7.2-1l-.7-.1c0 .3-.1.7-.2 1h-3.1v.7h2.9c-.6 1.3-1.7 2.1-3.6 2.4.2.2.3.4.4.6Zm4.4-6.2c1-.4 1.9-.9 2.5-1.6h-4.2l-.2.2c.4.6 1.1 1 1.9 1.4ZM292.4 211.1c.12.1.25.2.38.3h2.32v-.6h-1.8l.2-.3c-.3-.3-1-.6-1.5-.8l-.4.4c.4.1 1 .4 1.3.6h-3c.3-.4.5-.8.7-1.1l-.7-.1c-.2.4-.4.8-.7 1.1H286v.6h2.6c-.7.6-1.6 1.2-2.8 1.6.2.1.3.3.4.5.3-.1.6-.2.8-.3v2.5h.6v-.3h1.8v.3h.7v-3.1h-2.2c.7-.4 1.2-.8 1.7-1.3h2c.5.5 1.1.9 1.8 1.3h-2.2v3.1h.6v-.3h1.9v.3h.7v-2.6c.2.1.4.1.6.2.1-.1.2-.4.4-.5-.94-.26-1.87-.66-2.62-1.2h-.38v-.3Zm.38.3c-.13-.1-.26-.2-.38-.3v.3h.38Zm-6.08-4.6v2.7h3.2v-2.7h-3.2Zm.8.5v1.5h1.9v-1.5h-1.9Zm.2 5.8v1.6h1.8v-1.6h-1.8Zm6.8-6.3h-3.3v2.7h3.3v-2.7Zm-.8 6.3h-1.9v1.6h1.9v-1.6Zm-1.8-5.8v1.5h2v-1.5h-2ZM298.7 213.2h2.1v1.5c0 .1-.1.2-.2.2h-1c.1.2.2.4.2.6.6 0 1.1 0 1.3-.1.2-.1.3-.3.3-.6h.1v-5.5h-3.3v2.2c0 1.1-.1 2.6-.9 3.7.2 0 .4.3.5.4.5-.7.8-1.6.9-2.4Zm-.6-6.6v2h8v-2h-.7v1.4h-3v-1.8h-.7v1.8h-2.9v-1.4h-.7Zm2.7 5h-2c0 .3 0 .7-.1 1.1h2.1v-1.1Zm-2-.6h2v-1.1h-2v1.1Zm2.9 4.3c.2 0 .4.3.5.4.5-.7.8-1.6.9-2.4h2.3v1.5c0 .2-.1.2-.2.2h-1.1c.1.2.2.4.2.6.7 0 1.1 0 1.4-.1.2-.1.3-.3.3-.7h.1v-5.4h-3.5v2.5c0 1.1-.1 2.4-.9 3.4Zm3.7-3.8h-2.2v1.2h2.2v-1.2Zm-2.2-.5h2.2v-1.1h-2.2v1.1ZM312.7 214.8h-1.9c.1.2.3.5.3.7 1.1 0 1.7 0 2.1-.1.4-.1.5-.3.5-.8v-4.5c1.3-.6 2.7-1.7 3.6-2.7l-.4-.5H309.3v.7h6.7c-.8.8-2 1.6-3 2.1v4.9c0 .1-.1.2-.3.2Z\" fill=\"#fff\" /><path d=\"M356.5 234.3h-22.2l3.6 29.9c4.9 2.6 10.1 2.3 15.4 0l3.2-29.9Z\" fill=\"#FDFEFF\" /><path d=\"M357.4 234.4c0-.3-.2-.6-.3-.8-.1-.2-.4-.3-.7-.3h-22.2c-.2 0-.5.1-.7.3-.1.2-.2.5-.2.8l3.6 29.9c0 .4.2.6.5.8 2.5 1.3 5.1 1.9 7.8 1.9s5.6-.6 8.4-1.9c.3-.1.6-.4.6-.8l3.2-29.9Zm-5.1 29.2 3.1-28.3h-20l3.4 28.3c4.1 2 8.6 2 13.5 0Z\" fill=\"currentColor\" /><path d=\"M333.4 232.401v3.9c8.4 1.5 16.4 1.6 24.1 0v-3.9l-2.4.1-.6-2.1-16.8-2.1c-.5-.1-.9.2-1 .6l-1.2 3.5h-2.1Z\" fill=\"#FDFEFF\" /><path d=\"M358.3 232.397c0-.3-.1-.5-.3-.7-.2-.2-.4-.3-.7-.3h-1.5l-.4-1.4c-.1-.4-.4-.7-.8-.7l-16.8-2.1c-.9-.1-1.8.4-2.1 1.3l-1 2.9h-1.4c-.6 0-1 .4-1 1v3.9c0 .5.3.9.8 1 4.4.8 8.6 1.2 12.7 1.2s8-.4 11.7-1.2c.5-.1.8-.5.8-1v-3.9Zm-24 3.103c7.9 1.3 15.3 1.3 22.1 0v-2h-1.3c-.4 0-.8-.3-1-.7l-.5-1.5-16.1-2-1.2 3.5c-.1.4-.5.7-.9.7h-1.1v2Z\" fill=\"currentColor\" /><path d=\"M356 245.2c-7 .8-14 .8-21 0l.9 9.1c6.8.8 13.2.9 19 0l1.1-9.1Z\" fill=\"#FDFEFF\" /><path d=\"M335 244.1c-.3 0-.6.1-.8.3-.2.2-.3.5-.3.8l.9 9.1c.1.5.4.8.9.9 3.8.5 7.2.7 10.4.7s6.2-.2 8.9-.7c.4-.1.7-.5.8-.9l1.1-9.1c0-.3-.1-.6-.3-.8-.2-.2-.5-.3-.8-.3-6.9.8-13.9.8-20.8 0Zm19 9.3.9-7.1c-6.2.6-12.5.6-18.8 0l.7 7.1c6.6.7 12.2.7 17.2 0Z\" fill=\"currentColor\" /><path d=\"m343.396 250.7.6 1.3c.4.9 1.5 1.4 2.5 1.1l-2.3-5c-.9.5-1.2 1.6-.8 2.6ZM346.9 252.802c.9-.5 1.2-1.6.8-2.6l-.6-1.3c-.5-.8-1.5-1.3-2.5-1l2.3 4.9Z\" fill=\"#03D5B7\" /></g></svg>\n  </div>\n</template>\n"
  },
  {
    "path": "web/console/src/layout/Child.vue",
    "content": "<script setup lang=\"ts\">\n</script>\n\n<template>\n  <RouterView v-slot=\"{ Component, route }\">\n    <component :is=\"Component\" :key=\"route.path\" />\n  </RouterView>\n</template>\n\n<style>\n\n</style>\n"
  },
  {
    "path": "web/console/src/layout/Layout.vue",
    "content": "<script setup lang=\"ts\">\nimport { onMounted } from 'vue'\nimport Sider from './Sider.vue'\nimport { useEnterpriseStore } from '@/stores'\n\nconst enterpriseStore = useEnterpriseStore()\n\nonMounted(async () => {\n\n})\n</script>\n\n<template>\n  <el-container class=\"h-full z-40 bg-[#F6F7F8] overflow-hidden\">\n    <Sider :sider-hidden=\"$route.meta.siderHidden\" />\n    <el-main v-if=\"enterpriseStore.info.id\" class=\"h-full relative\" style=\"--el-main-padding: 0;\">\n      <RouterView v-slot=\"{ Component, route }\">\n        <KeepAlive :include=\"route.path.includes('/prompt') ? ['Prompt'] : route.path.includes('/agent') ? ['Agent'] : []\">\n          <component :is=\"Component\" :key=\"route.path\" />\n        </KeepAlive>\n      </RouterView>\n    </el-main>\n  </el-container>\n</template>\n\n<style>\n\n</style>\n"
  },
  {
    "path": "web/console/src/layout/Sider.vue",
    "content": "<template>\n  <el-aside v-show=\"!siderHidden\" width=\"232px\">\n    <div class=\"flex flex-col flex-1 h-full\">\n      <div class=\"flex-none pl-7 pt-8 pb-5\">\n        <!-- #ifndef KM -->\n        <img class=\"w-[136px] object-contain\" :src=\"$getRealPath({ url: '/images/logo_2.png' })\" alt=\"\" />\n        <!-- #endif -->\n\n        <!-- #ifdef KM -->\n        <img class=\"w-[136px] object-contain\" :src=\"$getRealPath({ url: '/images/km-logo.png' })\" alt=\"\" />\n        <!-- #endif -->\n      </div>\n      <div class=\"flex-1 border-t overflow-y-auto scrollbar--none\">\n        <el-menu\n          router\n          :default-active=\"activeName\"\n          :default-openeds=\"[openedMenu, '/agent']\"\n          active-text-color=\"#2563EB\"\n          background-color=\"#F6F7F8\"\n          class=\"border-none mx-4\"\n          text-color=\"#4C4D4E\"\n          style=\"--el-menu-item-height: 54px; --el-menu-item-font-size: 16px; --el-menu-hover-bg-color: #eeeff0\"\n        >\n          <el-menu-item index=\"/index\">\n            <svg-icon name=\"home\" width=\"18px\" class=\"mr-2\" />\n            <span>{{ $t('module.homepage') }}</span>\n          </el-menu-item>\n\n          <!-- #ifndef KM -->\n          <el-sub-menu index=\"/agent\">\n            <template #title>\n              <svg-icon name=\"app\" width=\"18px\" class=\"mr-2\" />\n              <span>{{ $t('module.app_management') }}</span>\n            </template>\n            <el-menu-item-group>\n              <el-menu-item index=\"/agent\">\n                {{ $t('module.agent') }}\n              </el-menu-item>\n              <el-menu-item index=\"/prompt\">\n                {{ $t('prompt.title') }}\n              </el-menu-item>\n              <el-menu-item index=\"/toolbox\">\n                {{ $t('module.ai_toolbox') }}\n              </el-menu-item>\n            </el-menu-item-group>\n          </el-sub-menu>\n          <!-- #endif -->\n\n          <!-- #ifdef KM -->\n          <el-menu-item index=\"/space\">\n            <svg-icon name=\"app-one\" width=\"18px\" class=\"mr-2\" />\n            <span>{{ $t('module.space') }}</span>\n          </el-menu-item>\n\n          <el-sub-menu index=\"/chunk\">\n            <template #title>\n              <svg-icon name=\"book-one\" width=\"18px\" class=\"mr-2\" />\n              <span>{{ $t('module.library') }}</span>\n            </template>\n            <el-menu-item-group>\n              <el-menu-item v-if=\"isKmRc\" index=\"/viewer\">\n                {{ $t('module.viewer') }}\n              </el-menu-item>\n            </el-menu-item-group>\n            <el-menu-item-group>\n              <el-menu-item index=\"/parse\">\n                {{ $t('module.parse') }}\n              </el-menu-item>\n            </el-menu-item-group>\n            <el-menu-item-group>\n              <el-menu-item index=\"/model\"> {{ $t('module.model_setting') }} </el-menu-item>\n            </el-menu-item-group>\n            <el-menu-item-group>\n              <el-menu-item index=\"/chunk\">\n                {{ $t('module.chunk_setting') }}\n              </el-menu-item>\n            </el-menu-item-group>\n          </el-sub-menu>\n          <el-sub-menu index=\"/search\">\n            <template #title>\n              <svg-icon name=\"file-search-two\" width=\"18px\" class=\"mr-2\" />\n              <span>{{ $t('module.search_section') }}</span>\n            </template>\n            <el-menu-item-group>\n              <el-menu-item v-if=\"isKmRc\" index=\"/search\">\n                {{ $t('module.search') }}\n              </el-menu-item>\n            </el-menu-item-group>\n          </el-sub-menu>\n          <!-- #endif -->\n\n          <!-- #ifndef KM -->\n          <el-sub-menu index=\"3\">\n            <template #title>\n              <svg-icon name=\"operate\" width=\"18px\" class=\"mr-2\" />\n              <span>{{ $t('module.operation_management') }}</span>\n            </template>\n            <el-menu-item-group>\n              <el-menu-item v-if=\"enterprise_info.is_independent || enterprise_info.is_industry\" index=\"/order\">\n                {{ $t('module.operation_order') }}\n              </el-menu-item>\n              <el-menu-item v-if=\"enterprise_info.is_independent || enterprise_info.is_industry\" index=\"/user/register\">\n                {{ $t('register_user.title') }}\n              </el-menu-item>\n\n              <el-menu-item v-if=\"!isOpLocalEnv && !enterprise_info.is_independent\" index=\"/user/internal\">\n                {{ $t('internal_user.title') }}\n              </el-menu-item>\n\n              <el-menu-item index=\"/subscription\">\n                {{ $t('module.subscription') }}\n              </el-menu-item>\n\n              <el-menu-item index=\"/user/admin\">\n                {{ $t('admin_user.title') }}\n              </el-menu-item>\n              <!-- <el-menu-item index=\"/visit\">\n\t\t\t\t\t\t\t\t{{ $t('module.operation_visit') }}\n\t\t\t\t\t\t\t</el-menu-item> -->\n            </el-menu-item-group>\n          </el-sub-menu>\n\n          <el-sub-menu index=\"5\">\n            <template #title>\n              <svg-icon name=\"decoration\" width=\"18px\" class=\"mr-2\" />\n              <span>{{ $t('module.site_decoration') }}</span>\n            </template>\n            <el-menu-item-group>\n              <el-menu-item index=\"/template-style\">\n                {{ $t('module.template_style') }}\n              </el-menu-item>\n              <el-menu-item index=\"/banner\">\n                {{ $t('module.banner_diagram') }}\n              </el-menu-item>\n              <el-menu-item index=\"/navigation\">\n                {{ $t('navigation.title') }}\n              </el-menu-item>\n            </el-menu-item-group>\n          </el-sub-menu>\n          <!-- #endif -->\n\n          <el-sub-menu index=\"6\">\n            <template #title>\n              <svg-icon name=\"setting\" width=\"18px\" class=\"mr-2\" />\n              <!-- #ifdef KM -->\n              <span>{{ $t('module.system_config') }}</span>\n              <!-- #endif -->\n              <!-- #ifndef KM -->\n              <span>{{ $t('module.site_config') }}</span>\n              <!-- #endif -->\n            </template>\n            <el-menu-item-group>\n              <el-menu-item index=\"/info\">\n                {{ $t('module.website_info') }}\n              </el-menu-item>\n\n              <!-- #ifdef KM -->\n              <el-menu-item index=\"/user/admin\">\n                {{ $t('admin_user.title') }}\n              </el-menu-item>\n              <el-menu-item index=\"/user/internal\">\n                {{ $t('internal_user.alias') }}\n              </el-menu-item>\n              <!-- #endif -->\n              <el-menu-item v-if=\"!isOpLocalEnv && !enterprise_info.is_independent\" index=\"/sso\">\n                {{ $t('sso.title') }}\n              </el-menu-item>\n\n              <!-- #ifdef KM -->\n              <el-menu-item index=\"/sso\">\n                {{ $t('sso.title') }}\n              </el-menu-item>\n              <!-- #endif -->\n\n              <el-menu-item index=\"/platform\">\n                {{ $t('module.platform') }}\n              </el-menu-item>\n              <!-- #ifndef KM -->\n              <el-menu-item index=\"/payment\">\n                {{ $t('module.payment') }}\n              </el-menu-item>\n              <el-menu-item v-if=\"!isOpLocalEnv\" index=\"/domain\">\n                {{ $t('module.domain') }}\n              </el-menu-item>\n              <el-menu-item index=\"/statistics\">\n                {{ $t('module.statistics') }}\n              </el-menu-item>\n              <el-menu-item v-if=\"isOpLocalEnv\" index=\"/SMTP\">\n                {{ $t('module.SMTP') }}\n              </el-menu-item>\n              <!-- #endif -->\n              <el-menu-item v-if=\"!isWorkEnv\" index=\"/system-log\">\n                {{ $t('module.system_log') }}\n              </el-menu-item>\n            </el-menu-item-group>\n          </el-sub-menu>\n        </el-menu>\n      </div>\n\n      <div class=\"flex-none flex flex-col pt-2 px-4 pb-6 border-t\">\n        <div\n          class=\"h-14 flex items-center gap-2 px-4 rounded-lg cursor-pointer hover:bg-[#EEEFF0]\"\n          @click=\"handleFunctionUpdate\"\n        >\n          <div class=\"w-6 h-6 flex-center\">\n            <svg-icon name=\"generate\" width=\"18\" />\n          </div>\n          <div class=\"flex-1 text-[#4C4D4E] text-sm\">\n            {{ $t('function_update') }}\n          </div>\n          <el-icon size=\"12px\" color=\"#707172\">\n            <ArrowRight />\n          </el-icon>\n        </div>\n        <!-- <div\n\t\t\t\t\tclass=\"h-14 flex items-center gap-2 px-4 rounded-lg cursor-pointer hover:bg-[#EEEFF0] opacity-60 pointer-events-none\">\n\t\t\t\t\t<div class=\"w-6 h-6 flex-center\">\n\t\t\t\t\t\t<svg-icon name=\"remind\" width=\"18\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"flex-1 text-[#4C4D4E] text-sm\">\n\t\t\t\t\t\t{{ $t('notification_center') }}\n\t\t\t\t\t</div>\n\t\t\t\t\t<el-icon size=\"12px\" color=\"#707172\">\n\t\t\t\t\t\t<ArrowRight />\n\t\t\t\t\t</el-icon>\n\t\t\t\t</div> -->\n        <div\n          class=\"h-14 flex items-center gap-2 px-4 rounded-lg cursor-pointer hover:bg-[#EEEFF0]\"\n          @click.stop=\"onExit\"\n        >\n          <div class=\"w-6 h-6 flex-center\">\n            <svg-icon name=\"exit\" width=\"18\" />\n          </div>\n          <div class=\"flex-1 text-[#4C4D4E] text-sm\">\n            {{ $t('action_exit') }}\n          </div>\n        </div>\n        <div class=\"flex items-center justify-start gap-2 px-5 mt-4 text-[#1D1E1F]\" style=\"font-size: 10px\">\n          <span>POWERED BY</span>\n          <!-- #ifndef KM -->\n          <img class=\"w-[58px] object-contain\" :src=\"$getRealPath({ url: '/images/logo_2.png' })\" alt=\"\" />\n          <!-- #endif -->\n          <!-- #ifdef KM -->\n          <img class=\"w-[58px] object-contain\" :src=\"$getRealPath({ url: '/images/km-logo.png' })\" alt=\"\" />\n          <!-- #endif -->\n        </div>\n      </div>\n    </div>\n  </el-aside>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watchEffect } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { ArrowRight } from '@element-plus/icons-vue'\nimport { useEnterpriseStore, useUserStore } from '@/stores'\nimport { useEnv } from '@/hooks/useEnv'\n\nwithDefaults(\n  defineProps<{\n    siderHidden?: boolean\n  }>(),\n  {\n    siderHidden: false,\n  }\n)\n\nconst isKmRc =\n  ['kmrc.53ai.com', 'km.cc'].includes(window.location.host) || /192\\.168\\.1\\.\\d+/.test(window.location.host)\nconst { isOpLocalEnv, isWorkEnv } = useEnv()\nconst route = useRoute()\nconst user_store = useUserStore()\nconst enterprise_store = useEnterpriseStore()\nconst activeName = ref('')\nconst openedMenu = ref('') // 新增：存储当前展开的子菜单\n\nconst enterprise_info = computed(() => enterprise_store.info)\n\nwatchEffect(() => {\n  const paths = route.path.match(/\\/[^/]+/g) || ['']\n  activeName.value = paths[0]\n  openedMenu.value = paths[0]\n})\n\nonMounted(() => {})\n\nconst onExit = () => {\n  user_store.logoff({ show_confirm: true, back_to_login: true })\n}\nconst handleFunctionUpdate = () => {\n  window.open('https://doc.53ai.com/%E5%85%A5%E9%97%A8/%E4%BA%A7%E5%93%81%E8%B7%AF%E7%BA%BF%E5%9B%BE.html', '_blank')\n}\n</script>\n\n<style scoped>\n:deep(.el-menu-item-group__title:empty) {\n  display: none;\n}\n\n/* :deep(.el-menu-item)  {\n\tmargin-bottom: 6px;\n} */\n:deep(.el-menu-item),\n:deep(.el-sub-menu__title) {\n  padding: 0 16px !important;\n}\n\n:deep(.el-menu-item:hover),\n:deep(.el-sub-menu__title:hover) {\n  border-radius: 8px;\n}\n\n:deep(.el-sub-menu .el-menu-item) {\n  --el-menu-sub-item-height: 40px;\n  --el-menu-base-level-padding: 0px;\n  --el-menu-level-padding: 16px;\n\n  font-size: 14px;\n}\n\n:deep(.el-menu-item-group) {\n  padding-left: 30px;\n}\n\n:deep(.el-sub-menu .el-menu-item:hover) {\n  background-color: #eeeff0;\n  border-radius: 8px;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/locales/en-v2.json",
    "content": "{\n  \"response_code\": {\n    \"success\": \"Success\",\n    \"param_error\": \"Parameter Error\",\n    \"database_error\": \"Database Error\",\n    \"network_error\": \"Network Error, Please Try Again\",\n    \"system_error\": \"System Error\",\n    \"auth_error\": \"Authentication Error\",\n    \"not_found_error\": \"Not Found Error\",\n    \"unauthorized_error\": \"identity authentication Error\",\n    \"file_error\": \"File Error\",\n    \"forbidden_error\": \"Forbidden Error\",\n    \"agent_error\": \"Agent Error\",\n    \"token_expired_error\": \"Token Expired Error\",\n    \"verification_code_error\": \"Verification Code Error\"\n  },\n  \"response_message\": {\n    \"unknown_error\": \"Unknown Error\",\n    \"user_not_found\": \"User Not Found\",\n    \"username_or_password_is_incorrect\": \"Username or Password is Incorrect\",\n    \"operate_too_fast\": \"Operate Too Fast, Please Try Again Later\"\n  },\n  \"response_data\": {\n    \"domain_already_bound\": \"The domain name has already been bound\",\n    \"apply_already_submitted\": \"You have already submitted an application, please do not submit it again\"\n  },\n  \"module\": {\n    \"agent_type_prompt\": \"Create via Prompt\",\n    \"agent_type_53ai_agent\": \"53AI studio\",\n    \"agent_type_53ai_workflow\": \"53AI Intelligent Applications\",\n    \"agent_type_coze_agent_cn\": \"Coze\",\n    \"agent_type_coze_workflow_cn\": \"Coze Intelligent Applications\",\n    \"agent_type_coze_agent\": \"Coze Agent\",\n    \"agent_type_coze_workflow\": \"Coze workflow\",\n    \"agent_type_dify_agent\": \"Dify\",\n    \"agent_type_dify_workflow\": \"Dify workflow\",\n    \"agent_type_yuanqi\": \"Tencent Yuanqi\",\n    \"agent_type_bailian\": \"Alibaba Bailian\",\n    \"agent_type_volcengine\": \"Volcengine\",\n    \"agent_sort_desc\": \"The larger the number, the higher the ranking\",\n    \"dialogue\": \"Work Dialogues\",\n    \"draft\": \"intelligent Solutions\",\n    \"writer\": \"Content Creation\",\n    \"aibox\": \"AI Toolbox\",\n    \"bot\": \"AI Agent\",\n    \"prompt\": \"Prompts\",\n    \"library\": \"All Knowledge base\",\n    \"chunk_setting\": \"Corpus Segmentation\",\n    \"model_setting\": \"Model Settings\",\n    \"system\": \"System Management\",\n    \"dialogue_digital_employee\": \"AI Employee\",\n    \"dialogue_prompt\": \"Prompts\",\n    \"dialogue_large_model\": \"Large Models\",\n    \"enterprise_info\": \"Enterprise Information\",\n    \"large_model\": \"Large Model Access\",\n    \"user\": \"Employee Accounts\",\n    \"combinat\": \"Single Sign-On\",\n    \"system_log\": \"System Logs\",\n    \"homepage\": \"Homepage\",\n    \"app_management\": \"Application Management\",\n    \"agent\": \"Agents\",\n    \"knowledge\": \"Knowledge management\",\n    \"space\": \"Team Space\",\n    \"agent_search_placeholder\": \"Search AI Agent\",\n    \"prompt_search_placeholder\": \"Prompt Name\",\n    \"ai_product\": \"AI Product\",\n    \"ai_toolbox\": \"AI Tools\",\n    \"ai_toolbox_search_placeholder\": \"Search Tool\",\n    \"operation_management\": \"Operations management\",\n    \"operation_user\": \"User Data\",\n    \"operation_user_delete_confirm\": \"Are you sure you want to delete this user?\",\n    \"operation_user_search_placeholder\": \"Member Name/Phone Number/Email\",\n    \"operation_order\": \"Order information\",\n    \"operation_order_delete_confirm\": \"Are you sure you want to delete this order?\",\n    \"operation_order_search_placeholder\": \"user/Order ID\",\n    \"operation_order_user_tip\": \"You can directly input the username to select, if you select multiple users, it will create a separate order for each user\",\n    \"operation_visit\": \"access Data\",\n    \"site_config\": \"Site Configuration\",\n    \"website_info\": \"Site Information\",\n    \"website_info_logo\": \"Logo\",\n    \"website_info_logo_tip\": \"Please upload a square logo (recommended size: 512×512px) in 1:1 ratio, supported formats: PNG/JPG. File size must be less than 2MB\",\n    \"website_info_logo_placeholder\": \"Please upload Logo\",\n    \"website_info_ico\": \"ico\",\n    \"website_info_ico_tip\": \"Recommended size: 64×64\",\n    \"website_info_ico_placeholder\": \"Please upload ico\",\n    \"website_info_name\": \"Website Name\",\n    \"website_info_name_placeholder\": \"Please enter website name\",\n    \"website_info_language\": \"Default Language\",\n    \"website_info_keyword\": \"Keywords\",\n    \"website_info_keyword_placeholder\": \"Please enter keywords\",\n    \"website_info_keyword_placeholder_v2\": \"You can enter multiple keywords - press Enter after each one\",\n    \"website_info_desc\": \"Website Description\",\n    \"website_info_desc_placeholder\": \"Please enter website description\",\n    \"website_info_copyright\": \"Copyright information\",\n    \"website_info_copyright_placeholder\": \"Please enter copyright information\",\n    \"website_info_type\": \"Site categories\",\n    \"website_type_independent\": \"AI Independent Site\",\n    \"website_type_independent_desc\": \"Site is only accessible to registered users\",\n    \"website_type_enterprise\": \"Enterprise AI Portal\",\n    \"website_type_enterprise_desc\": \"Site is only accessible to internal users\",\n    \"website_type_industry\": \"Industry AI Portal\",\n    \"website_type_industry_desc\": \"Site is accessible to internal employees and registered users\",\n    \"website_info_template\": \"Site style\",\n    \"website_info_layout\": \"Website Layout\",\n    \"platform\": \"Platform access\",\n    \"platform_v2\": \"Platform\",\n    \"all_platform\": \"All Platforms\",\n    \"platform_delete_confirm\": \"Are you sure you want to delete this agent platform?\",\n    \"platform_tools\": \"Extended Tools\",\n    \"platform_auth_client_id\": \"Client ID\",\n    \"platform_auth_client_id_placeholder\": \"Please enter client ID\",\n    \"platform_auth_client_secret\": \"Client secret\",\n    \"platform_auth_client_secret_placeholder\": \"Please enter client secret\",\n    \"platform_auth_coze_confirm\": \"Confirm you have saved your secret in Coze\",\n    \"platform_auth_url\": \"URL\",\n    \"platform_auth_secret\": \"Secret\",\n    \"platform_search_online\": \"Search online\",\n    \"platform_search_online_desc\": \"Search the website content via bochaai, and summarize the results.\",\n    \"platform_search_online_delete_confirm\": \"Are you sure you want to delete this search online tool?\",\n    \"platform_tool_api_key\": \"API Key\",\n    \"platform_tool_api_key_placeholder\": \"Enter your API Key\",\n    \"platform_model\": \"General Large Model\",\n    \"platform_model_add\": \"General Large Model\",\n    \"platform_model_organization_id\": \"Organization ID\",\n    \"platform_model_organization_id_placeholder\": \"Enter your organization ID\",\n    \"platform_model_base_url\": \"API Base\",\n    \"platform_model_base_url_azure\": \"API Domain\",\n    \"platform_model_base_url_maxkb\": \"Base URL\",\n    \"platform_model_base_url_azure_placeholder\": \"Enter your API domain, e.g. https://example.com/xxx\",\n    \"platform_model_name\": \"Deployment Name\",\n    \"platform_model_name_placeholder\": \"Enter your deployment name, matching the Azure deployment name\",\n    \"platform_model_other\": \"API Version\",\n    \"platform_model_other_placeholder\": \"Enter your API version\",\n    \"platform_model_base_url_placeholder\": \"Enter your API Base, e.g. https://api.openai.com\",\n    \"platform_model_base_url_placeholder_53ai\": \"Enter your API Base, e.g. https://api.53ai.com\",\n    \"platform_model_api_endpoint\": \"Customize API endpoint address\",\n    \"platform_model_api_endpoint_placeholder\": \"Enter your customized API endpoint address, e.g. https://api.deepseek.com/v1 or https://api.deepseek.com\",\n    \"platform_model_models_azure\": \"Foundation Model\",\n    \"platform_model_models_azure_placeholder\": \"Select your foundation model\",\n    \"platform_model_models\": \"Enabled Models\",\n    \"platform_model_models_empty\": \"No available models\",\n    \"platform_model_models_total\": \"{total} models\",\n    \"platform_model_models_edit\": \"Edit Model\",\n    \"platform_model_models_id\": \"Model ID\",\n    \"platform_model_models_name\": \"Model Name\",\n    \"platform_model_delete_confirm\": \"Are you sure you want to delete this model?\",\n    \"navigation\": \"Navigation Menu\",\n    \"pc_navigation\": \"PC-side Navigation\",\n    \"mobile_navigation\": \"Mobile-side Navigation\",\n    \"nav_type_homepage\": \"Homepage\",\n    \"nav_type_single\": \"Single Page\",\n    \"nav_type_agent\": \"AI Agents\",\n    \"nav_target_self\": \"Current Window\",\n    \"nav_target_blank\": \"New Window\",\n    \"nav_name\": \"column\",\n    \"nav_name_placeholder\": \"Please select column name\",\n    \"nav_agent_class_placeholder\": \"Please select category\",\n    \"nav_agent_placeholder\": \"Please select AI agent\",\n    \"nav_type\": \"Type\",\n    \"nav_target\": \"Open mode\",\n    \"nav_url\": \"Redirect Link\",\n    \"nav_visible\": \"Display in Navigation Bar\",\n    \"nav_operation\": \"Operations\",\n    \"nav_operation_seo\": \"SEO\",\n    \"action_delete_confirm\": \"Are you sure you want to delete this column?\",\n    \"nav_seo_setting\": \"SEO Settings\",\n    \"nav_seo_setting_title\": \"SEO Title\",\n    \"nav_seo_setting_keywords\": \"SEO Keywords\",\n    \"nav_seo_setting_keywords_tip\": \"Separate each keyword with commas\",\n    \"nav_seo_setting_description\": \"SEO Description\",\n    \"payment\": \"Payment Configuration\",\n\n    \"subscription\": \"Subscription Settings\",\n    \"subscription_header_title\": \"Subscription Services and Pricing\",\n    \"subscription_free\": \"Free\",\n    \"subscription_pro\": \"Professional\",\n    \"subscription_flagship\": \"Flagship\",\n    \"subscription_charge\": \"Subscription Fee\",\n    \"subscription_points\": \"Points\",\n    \"subscription_advanced_points\": \"Advanced Points\",\n    \"subscription_agent_bots\": \"Available AI Agents\",\n    \"subscription_advanced_agent_bots\": \"Available Advanced Agents\",\n    \"subscription_ai_assistant\": \"Cross-platform AI Assistant\",\n    \"subscription_ai_assistant_tip\": \"Enable support for macOS, Windows, and browser plugins for users to download and use.\",\n    \"subscription_delete_confirm\": \"Are you sure you want to delete this subscription?\",\n    \"domain\": \"Site Domain\",\n    \"domain_exclusive\": \"Exclusive Domain\",\n    \"domain_exclusive_label\": \"Customize your exclusive domain\",\n    \"domain_exclusive_validator_1\": \"Please use lowercase letters, numbers, or ”-“, and at least 5 characters\",\n    \"domain_exclusive_validator_2\": \"The domain name is already occupied, please use another domain name\",\n    \"domain_independent\": \"Independent Domain\",\n    \"domain_independent_label\": \"Customize your independent domain\",\n    \"domain_independent_desc\": \"Add a customized domain you want to use.\",\n    \"domain_independent_delete_confirm\": \"Are you sure you want to delete this independent domain?\",\n    \"domain_independent_cname\": \"CNAME\",\n    \"domain_independent_self\": \"Self-owned Server Relay\",\n    \"domain_independent_cname_desc\": \"Please select an appropriate CNAME address from the following list and go to your registered domain name provider to set up domain DNS resolution.\",\n    \"domain_independent_cname_desc_1\": \"1. Filing on Alibaba Cloud: 53aihub.n1.53ai.com\",\n    \"domain_independent_cname_desc_2\": \"2. Filing on Tencent Cloud: 53aihub.n2.53ai.com\",\n    \"domain_independent_cname_desc_3\": \"3. Hong Kong server, slightly slower: 53aihub.n3.53ai.com\",\n    \"domain_independent_https\": \"Enable HTTPS\",\n    \"domain_independent_https_always\": \"Always use HTTPS\",\n    \"domain_independent_ssl\": \"SSL Certificate\",\n    \"domain_independent_ssl_option_1\": \"Generated by 53AI\",\n    \"domain_independent_ssl_option_2\": \"Customized by user\",\n    \"domain_independent_ssl_certificate\": \"Certificate\",\n    \"domain_independent_ssl_certificate_placeholder\": \"Please copy and paste the certificate here\",\n    \"domain_independent_ssl_private_key\": \"Private Key\",\n    \"domain_independent_ssl_private_key_placeholder\": \"Please copy and paste the private key here\",\n    \"domain_independent_self_desc_1\": \"Method 1: Use nginx or other web servers for simple configuration.\",\n    \"domain_independent_self_desc_2\": \"Method 2: Use full - site acceleration services (DCDN) from cloud vendors such as Alibaba Cloud, Tencent Cloud, and Qiniu Cloud.\",\n    \"domain_independent_self_desc_3\": \"Docs Site ID: {site_id}\",\n    \"use_subdirectories\": \"Use Subdirectories\",\n    \"use_subdirectories_tip\": \"If you want to use subdirectories (e.g. 53aihub/docs), you can toggle the switch\",\n    \"statistics\": \"Third-party Statistics\",\n    \"statistics_header_title\": \"Embed Code\",\n    \"statistics_header_desc\": \"You can add customer service plugins, visitor statistics, and other features to your site through embedded code\",\n    \"statistics_textarea_label_1\": \"Head Section Code\",\n    \"statistics_textarea_label_1_example\": \"Please enter JS code……\\nFor example\\n<script>console.log('hello world')</script>\\nOr\\n<script src=\\\"xxx\\\"></script>\",\n    \"statistics_textarea_label_2\": \"CSS Code\",\n    \"statistics_textarea_label_2_example\": \"Please enter CSS code\",\n    \"site_decoration\": \"Site Decoration\",\n    \"template_style\": \"Template Style\",\n    \"banner_diagram\": \"Banner image\"\n  },\n  \"chat\": {\n    \"empty_desc\": \"Fill in the content in the input box to debug\"\n  },\n  \"login\": {\n    \"unregistered_account_desc\": \"Unregistered accounts automatically log in after verification\",\n    \"account_placeholder\": \"Please enter your phone number/email\",\n    \"email_placeholder\": \"Please enter your email\",\n    \"mobile_placeholder\": \"Please enter your phone number\",\n    \"account_exists\": \"The phone number has been registered, use the account to login.\",\n    \"account_no_exists\": \"The phone number has not been registered, please register first.\",\n    \"password_placeholder\": \"Please enter your password\",\n    \"forget_password\": \"Forget Password?\",\n    \"password_login\": \"Password Login\",\n    \"password_login_v2\": \"Password Login\",\n    \"mobile_login\": \"Login with SMS verification code\",\n    \"mobile_login_v2\": \"Login with SMS verification code\",\n    \"wechat_login\": \"WeChat Login\",\n    \"wechat_login_v2\": \"Login with WeChat\",\n    \"google_login\": \"Google Login\",\n    \"google_login_v2\": \"Login with Google\",\n    \"agree_and_policy\": \"Login means you agree to {agree} and {policy}\",\n    \"agree\": \"Terms and Conditions\",\n    \"policy\": \"Privacy Policy\",\n    \"account_length\": \"Account length must be between 4 and 20 characters\",\n    \"account_format\": \"Account must start with a letter, and can only contain letters, numbers, and underscores\",\n    \"password_length\": \"Password length must be between 8-20 characters and can include letters, numbers, and symbols\",\n    \"password_length_v2\": \"Password length must be between 8-20 characters\",\n    \"password_format\": \"Password must contain uppercase and lowercase letters and numbers\",\n    \"password_not_match\": \"The two passwords you entered do not match\",\n    \"reset_password\": \"Reset Password\",\n    \"update_password\": \"Update Password\",\n    \"back_to_login\": \"Back to Login\",\n    \"has_account\": \"Already have an account,\",\n    \"direct_login\": \"Direct Login\",\n    \"select_reset_password_way\": \"Choose a password reset method\",\n    \"email_validate\": \"Email verification\",\n    \"mobile_validate\": \"Mobile verification\",\n    \"new_password\": \"New Password\",\n    \"new_password_placeholder\": \"Please enter new password\",\n    \"confirm_password\": \"Confirm New Password\",\n    \"confirm_password_placeholder\": \"Please enter new password again\",\n    \"verify_identity\": \"Verify Identity\",\n    \"enterprise_info\": \"Enterprise Information\",\n    \"application_complete\": \"Complete Application\",\n    \"website_name\": \"Website Name\",\n    \"website_name_placeholder\": \"Please enter website name\",\n    \"contact_name\": \"Contact person\",\n    \"contact_name_placeholder\": \"Please enter contact person\",\n    \"complete_registration_and_login\": \"Complete Registration and Login\",\n    \"apply_open_repetition\": \"You have already submitted an application, please do not submit it again\",\n    \"select_enterprise\": \"Select To Enter The Enterprise\",\n    \"new_user_tip\": \"Your initial password is “{password}”, please modify it in time\",\n    \"I_remember\": \"I got it\",\n    \"modify_password\": \"Modify Password\"\n  },\n  \"apply\": {\n    \"process\": \"Processing\",\n    \"expired\": \"Expired\",\n    \"reject\": \"Rejected\",\n    \"refresh_list\": \"Refresh List\",\n    \"contact_customer_service\": \"meet problems? Contact Customer Service\",\n    \"contact_customer_service_v2\": \"Contact Customer Service\",\n    \"create_site\": \"Create Site\",\n    \"create_title\": \"Welcome to activate 53AI {project}\",\n    \"waiting_audit\": \"Waiting for review\",\n    \"create_success\": \"Created successfully\",\n    \"expired_time_forever\": \"Permanently valid\",\n    \"enterprise_name_placeholder\": \"Please enter the enterprise/organization name\",\n    \"domain\": \"Domain Name\",\n    \"domain_placeholder\": \"Please enter your domain name\",\n    \"enterprise_not_empty\": \"The enterprise/organization name cannot be empty\",\n    \"mobile_unregistered_tip\": \"This mobile number is unregistered. Enter the verification code and login password to complete enterprise creation.\",\n    \"domain_already_use\": \"{domain} is already in use. Please try another domain~\"\n  },\n  \"service\": {\n    \"title\": \"Activate Now\",\n    \"consult_name\": \"Chief Customer Service Consultant\",\n    \"desc_1\": \"Hello, scan the QR code to contact your exclusive consultant\",\n    \"desc_2\": \"Activate and Use\",\n    \"desc_3\": \"Hello, scan the WeChat QR code to contact your exclusive consultant,\"\n  },\n  \"website_version\": {\n    \"free\": \"Startup Version\",\n    \"standard\": \"Professional Version\",\n    \"enterprise\": \"Enterprise Version\"\n  },\n  \"language_option_label\": {\n    \"zh-cn\": \"Chinese-CN\",\n    \"zh-tw\": \"Chinese-TW\",\n    \"en\": \"English-EN\",\n    \"jp\": \"Japanese-JP\"\n  },\n  \"template_option_label\": {\n    \"portal\": \"AI Portal\",\n    \"doubao\": \"Doubao Style\",\n    \"mita\": \"Mita Style\",\n    \"kimi\": \"Kimi Style\",\n    \"independent\": \"Independent Site\"\n  },\n  \"layout_option_label\": {\n    \"loose\": \"Loose\",\n    \"center\": \"Center\"\n  },\n  \"layout_option_desc\": {\n    \"loose\": \"Loose layout, full screen, adaptive to user resolution\",\n    \"center\": \"Center layout, compact content\"\n  },\n  \"order\": {\n    \"status\": {\n      \"all\": \"All Orders\",\n      \"not_confirm\": \"Pending Confirmation\",\n      \"pending\": \"Pending Payment\",\n      \"paid\": \"Paid\",\n      \"expired\": \"Expired\",\n      \"cancelled\": \"Cancelled\"\n    },\n    \"confirm_tip\": \"Confirming will set the order to paid and increase the user's corresponding benefits.\"\n  },\n  \"payment\": {\n    \"type\": {\n      \"all\": \"All Payment Methods\",\n      \"alipay\": \"Alipay\",\n      \"wechat\": \"WeChat\",\n      \"manual\": \"Manual Transfer\",\n      \"paypal\": \"PayPal\"\n    },\n    \"manual\": {\n      \"qrcode\": \"Receipt QR code\",\n      \"qrcode_placeholder\": \"Please upload the Receipt QR code\",\n      \"desc\": \"Remarks\",\n      \"desc_placeholder\": \"Please enter remarks,e.g.:Please use WeChat/Alipay to scan and pay the above amount\"\n    },\n    \"wechat_app_id\": \"AppID\",\n    \"wechat_app_id_placeholder\": \"Please enter AppID\",\n    \"wechat_mch_id\": \"WeChat Pay Merchant ID\",\n    \"wechat_mch_id_placeholder\": \"Please enter WeChat Pay Merchant number\",\n    \"wechat_api_secret\": \"APIv3 Key\",\n    \"wechat_api_secret_placeholder\": \"Please enter APIv3 Key\",\n    \"wechat_app_id_tip\": \"Login to WeChat Pay Merchant Platform → Click 'Account Center' → Get 'WeChat Pay Merchant ID' in 'Merchant Information'\",\n    \"wechat_mch_id_tip\": \"Login to WeChat Public Platform → Settings → Public Account Settings → Basic Configuration → View 'Developer ID (AppID)'\",\n    \"wechat_api_secret_tip\": \"Login to WeChat Pay Merchant Platform → Account Center → API Security → Set 'API Key'\",\n    \"wechat_serial_no\": \"Certificate Serial Number\",\n    \"wechat_serial_no_placeholder\": \"Please enter Certificate Serial Number\",\n    \"wechat_cert\": \"Certificate File\",\n    \"wechat_cert_placeholder\": \"Please upload Certificate File\",\n    \"wechat_private_key\": \"Certificate Key\",\n    \"wechat_private_key_placeholder\": \"Please upload Certificate Key\",\n    \"manual_tip\": \"Manual transfer supports more payment methods, but the amount needs to be filled in by the user themselves, and manual confirmation by the administrator in the background is required after payment.\",\n    \"manual_pay_qrcode\": \"Payment QR Code\",\n    \"manual_pay_qrcode_placeholder\": \"Please upload payment QR code\",\n    \"alipay_app_id\": \"Alipay AppID\",\n    \"alipay_app_id_placeholder\": \"Please enter Alipay AppID\",\n    \"alipay_mch_id\": \"Application Private Key\",\n    \"alipay_mch_id_placeholder\": \"Please enter Application Private Key\",\n    \"alipay_api_secret\": \"Alipay Public Key\",\n    \"alipay_api_secret_placeholder\": \"Please enter Alipay Public Key\",\n    \"alipay_guide_html\": \"1、Login to Alipay Open Platform<a class='text-[#5A6D9E]' href='https://open.alipay.com/module/webApp/' target='_blank'>https://open.alipay.com/module/webApp/</a>Create \\\"Web/Mobile Application\\\" to get APPID; \\n2、Click to enter the application, configure according to the official guide of Alipay in \\\"Development Settings\\\" \\\"Interface Signing Method\\\" to get application private key and Alipay public key; \\n3、In \\\"Development Settings\\\" \\\"Authorization Callback Address\\\", fill in: <span  style=\\\"color: #FA5151;\\\">{callback_url}</span><span class='copy-hook'></span>\\n4、In [API Management], access the capability of \\\"PC Website Payment\\\" and configure or activate it according to Alipay's official guidance;\"\n  },\n  \"template_style\": {\n    \"website_style\": \"Site Style\",\n    \"website\": \"Website Style\",\n    \"software\": \"Software Style\",\n    \"theme_color\": \"Primary Color\",\n    \"theme_color_v2\": \"Theme Color\",\n    \"text_color\": \"Text Color\",\n    \"nav_bg_color\": \"Navigation Background\",\n    \"nav_text_color\": \"Navigation Text\",\n    \"page_footer_bg_color\": \"Footer Background\",\n    \"page_footer_text_color\": \"Footer Text\"\n  },\n  \"banner\": {\n    \"upload_image\": \"Upload Image\",\n    \"upload_image_tip\": \"Upload 1920×380 pixel images for the best effect, image size less than 10 MB\",\n    \"interval\": \"Image Carousel Interval\",\n    \"interval_tip\": \"When there are multiple images in the Banner area, set the image scrolling interval\"\n  },\n  \"wechat_payment\": {\n    \"mch_guide\": {\n      \"title\": \"How to get WeChat Pay Merchant number\",\n      \"step_1\": \"1、Login to WeChat Pay Merchant Platform（{url}）\",\n      \"step_2\": \"2、WeChat Pay Merchant ID can be viewed in the【Account Center - Merchant Information】of WeChat Pay Merchant Platform.\",\n      \"step_3\": \"Note:If you are not a WeChat Pay merchant yet, you can click 'Become a Merchant' on the login homepage, register and apply for a WeChat Pay merchant number, fill in relevant enterprise information as prompted, such as business license, corporate account, etc., and submit for review. After passing the review, you can obtain a WeChat Pay merchant number .\"\n    },\n    \"app_guide\": {\n      \"title\": \"How to get APPID\",\n      \"step_1\": \"1、In the WeChat Pay Merchant Platform, go to [Product Center - AppID Account Management] and click \\\"Associate APPID\\\". Fill in the APPID of the previously obtained WeChat Official Account or Mini Program and confirm the association. Log in to the WeChat Open Platform and agree to the association in the Message Center.\",\n      \"step_2\": \"2、Copy the associated APPID and fill it into the form. \\n\\n note: If no Official Account has been associated yet, you need to associate an Official Account first. Operation method: Click to associate AppID\",\n      \"step_3\": \"Then log in to the WeChat Official Platform ({url}), enter the Official Account backend, and obtain the Developer ID (AppID) in [Settings and Development - Basic Configuration]. If it's a Mini Program, you can obtain the Mini Program APPID in the Mini Program management backend of the WeChat Official Platform.\"\n    },\n    \"api_guide\": {\n      \"title\": \"How to get APIv3 Key\",\n      \"step_1\": \"1、Login to WeChat Pay Merchant Platform, enter【Account Center - Account Settings - API Security】, click【APIv3 Key】\",\n      \"step_2\": \"2、In the pop-up window, click “I have communicated”, input a 32-bit random key (containing numbers and uppercase and lowercase letters), click Get SMS Verification Code, input the verification code and click “Confirm”, then set successfully.\"\n    },\n    \"cert_guide\": {\n      \"title\": \"How to Obtain Payment Certificate Files and Keys\",\n      \"step_1\": \"1、Log in to the WeChat Pay Merchant Platform, go to [Account Center - API Security], and apply for a new certificate. Follow the guide [Download Certificate Tool], copy the obtained request string to the text box, and click Next.\",\n      \"step_2\": \"2、After applying, download apiclient_cert.pem (certificate file) and apiclient_key.pem (private key file).\"\n    },\n    \"serial_guide\": {\n      \"title\": \"How to get Certificate Serial Number\",\n      \"step_1\": \"1、View the certificate serial number in [Account Center - API Security] of the WeChat Pay Merchant Platform.\"\n    }\n  },\n  \"alipay_payment\": {\n    \"app_guide\": {\n      \"title\": \"How to get APPID\",\n      \"step_1\": \"1、Copy the number below the application name, which is the APPID\"\n    }\n  },\n  \"platform_auth\": {\n    \"coze_cn\": {\n      \"tip\": \"Go to Coze API - Authorization - Create New Application（{url}） \\nStep 1: Create an OAuth application（\\\"Client Type\\\" is \\\"Web Backend Application\\\"）\\nStep 2: Fill in the \\\"Redirect URL\\\" in: {redirect_url} \\nStep 3: Fill in {client_id} and {client_secret} in the form below,check all permissions and save.\",\n      \"tip_1\": \"Ensure you click 'Save' on the Coze side before clicking 'Confirm'\"\n    },\n    \"app_builder\": {\n      \"tip\": \"Go to Baidu Cloud - App Builder（{url}） \\nStep 1: Login and click \\\"API Key\\\" on the left navigation bar \\nStep 2: Click \\\"Create API Key\\\"（select \\\"AppBuilder\\\" for \\\"Service\\\", and configure application resources as needed）\\nStep 3: Complete creation, copy the API Key and fill it in the form below.\"\n    },\n    \"53ai\": {\n      \"tip\": \"Go to 53AI（{url}） \\nStep 1: Login and click \\\"Settings\\\" on the left navigation bar \\nStep 2: Click \\\"Generate Secret Key\\\" under \\\"Enterprise Information\\\" \\nStep 3: After generation, copy the Sercet Key and fill it in the form below.\"\n    }\n  },\n  \"agent_app\": {\n    \"prompt\": \"Prompt\",\n    \"prompt_v2\": \"Create via Prompt\",\n    \"53ai_agent\": \"53AI\",\n    \"53ai_workflow\": \"53AI\",\n    \"coze_agent_cn\": \"Coze\",\n    \"coze_workflow_cn\": \"Coze\",\n    \"coze_agent\": \"Coze Agent\",\n    \"coze_workflow\": \"Coze Workflow\",\n    \"dify_agent\": \"Dify\",\n    \"dify_workflow\": \"Dify\",\n    \"app_builder\": \"Qianfan Appbuilder\",\n    \"yuanqi\": \"Tencent Yuanqi\",\n    \"bailian\": \"Alibaba Bailian\",\n    \"volcengine\": \"Volcengine\",\n    \"fastgpt_agent\": \"FastGPT\",\n    \"fastgpt_workflow\": \"FastGPT\",\n    \"maxkb_agent\": \"MaxKB\",\n    \"n8n_workflow\": \"n8n\",\n    \"tencent\": \"Tencent Cloud\",\n    \"check_agent_config_tip\": \"Please check if the agent configuration is correct\",\n    \"failed_tip\": \"Please check if the authorization key is available and if the balance is sufficient.\"\n  },\n  \"provider_platform\": {\n    \"prompt\": \"Prompt\",\n    \"openai\": \"OpenAI\",\n    \"deepseek\": \"DeepSeek\",\n    \"coze\": \"Coze\",\n    \"siliconflow\": \"SiliconFlow\",\n    \"azure\": \"Azure OpenAI\",\n    \"azure_open_ai\": \"Azure OpenAI\",\n    \"dark_moon\": \"Dark Moon\",\n    \"zhipu\": \"Zhipu\",\n    \"tongyi\": \"Tongyi\",\n    \"coze_cn\": \"Coze\",\n    \"app_builder\": \"BaiduQianfan Appbuilder\",\n    \"dify\": \"Dify\",\n    \"53ai\": \"53AI\",\n    \"bailian\": \"Alibaba Bailian\",\n    \"volcengine\": \"Volcengine\",\n    \"yuanqi\": \"Tencent Yuanqi\",\n    \"fastgpt\": \"FastGPT\",\n    \"maxkb\": \"MaxKB\"\n  },\n  \"register_user\": {\n    \"title\": \"Registered User\"\n  },\n  \"internal_user\": {\n    \"title\": \"Internal User\",\n    \"account\": {\n      \"title\": \"Account\",\n      \"search_placeholder\": \"Member Name/Phone Number/Email\",\n      \"name\": \"Name\",\n      \"nickname\": \"Nickname\",\n      \"mobile\": \"Mobile\",\n      \"group\": \"Group\",\n      \"department\": \"Department\",\n      \"status\": \"Status\",\n      \"add\": \"Add Account\",\n      \"name_placeholder\": \"Please enter name\",\n      \"name_disabled_tip\": \"The name is synchronized from a third party and cannot be modified\",\n      \"nickname_placeholder\": \"Please enter a nickname\",\n      \"mobile_placeholder\": \"Please enter a mobile phone number\",\n      \"mobile_disabled_tip\": \"Note: The mobile phone number entered must be the same as the member's login mobile phone number\",\n      \"password_placeholder\": \"Please set initial password\",\n      \"department_placeholder\": \"Please select department\",\n      \"same_member_exists_tip\": \"The member's mobile phone number already exists\",\n      \"same_mobile_exists_tip\": \"Same as the mobile phone number of the {index}th member\",\n      \"register_to_internal_confirm\": \"The phone number ({mobile}) is already a registered user, are you sure to upgrade to an internal user?\",\n      \"edit_member\": \"Edit Member\"\n    },\n    \"organization\": {\n      \"title\": \"Organization\",\n      \"all_search_placeholder\": \"Member/Department\",\n      \"user_search_placeholder\": \"Member\",\n      \"department_search_placeholder\": \"Department\"\n    },\n    \"group\": {\n      \"title\": \"Group\",\n      \"search_placeholder\": \"Search Group\",\n      \"search_placeholder_v2\": \"Search User Group Name\",\n      \"create\": \"Create Group\",\n      \"member\": \"Member\",\n      \"usable\": \"Available\",\n      \"remove_user_confirm\": \"Are you sure you want to remove this member?\",\n      \"remove_agent_confirm\": \"Are you sure you want to remove this agent?\",\n      \"remove_prompt_confirm\": \"Are you sure you want to remove this prompt?\",\n      \"remove_ai_toolkit_confirm\": \"Are you sure you want to remove this AI tool?\",\n      \"create_tip\": \"Please create a group first\"\n    },\n    \"status\": {\n      \"all\": \"All Members\",\n      \"undefined\": \"Not Joined\",\n      \"enabled\": \"Joined\",\n      \"disabled\": \"Disabled\"\n    },\n    \"action\": {\n      \"disabled\": \"Disable Account\",\n      \"disabled_success\": \"Disabled\",\n      \"enable\": \"Activate Account\",\n      \"enable_success\": \"Activated\",\n      \"disabled_account\": \"Disable Account\",\n      \"enable_account\": \"Activate Account\"\n    },\n    \"department\": {\n      \"add\": \"Add Department\",\n      \"add_children\": \"Add Sub Department\",\n      \"update_name\": \"Modify Name\",\n      \"move_up\": \"Move Up\",\n      \"move_down\": \"Move Down\",\n      \"delete\": \"Delete\",\n      \"delete_confirm\": \"Are you sure to delete this department?\",\n      \"create\": \"Create Department\",\n      \"edit\": \"Edit Department\",\n      \"name\": \"Department Name\",\n      \"name_placeholder\": \"Please enter department name\",\n      \"member_total_count\": \"（{total} members）\"\n    },\n    \"scope\": {\n      \"title\": \"Visible Range\",\n      \"selected_title\": \"Selected Items\"\n    }\n  },\n  \"admin_user\": {\n    \"title\": \"Administrator\",\n    \"search_placeholder\": \"Search existing users\",\n    \"delete_confirm\": \"Are you sure to delete this administrator?\"\n  },\n  \"role\": {\n    \"title\": \"Role\",\n    \"normal\": \"Ordinary User\",\n    \"admin\": \"Administrator\",\n    \"creator\": \"Creator\"\n  },\n  \"prompt\": {\n    \"title\": \"Prompt\",\n    \"search_placeholder\": \"Search Prompt\",\n    \"delete_confirm\": \"Are you sure to delete this prompt?\",\n    \"config\": \"Prompt Word\",\n    \"guide\": \"Usage Guide\",\n    \"content\": \"Content\"\n  },\n  \"navigation\": {\n    \"title\": \"Navigation Management\",\n    \"search_placeholder\": \"Search Navigation\",\n    \"delete_confirm\": \"Are you sure to delete this navigation?\",\n    \"type\": {\n      \"system\": \"System Built-in\",\n      \"external\": \"External Link\",\n      \"custom\": \"Custom Page\"\n    },\n    \"target\": {\n      \"self\": \"Current Window\",\n      \"blank\": \"New Window\"\n    },\n    \"web_setting\": \"Page Editor\"\n  },\n  \"sso\": {\n    \"title\": \"Single Sign-On\",\n    \"sync_corp\": \"Sync Enterprise\",\n    \"wecom\": {\n      \"title\": \"WeCom\",\n      \"abbr_title\": \"WeCom\",\n      \"access_title\": \"Access WeCom\",\n      \"access_desc\": \"WeCom administrator scans the code to install and access\",\n      \"sync_desc\": \"After completing the WeCom credential authorization binding, you can bind the WeCom account source to import the WeCom member directory\",\n      \"sync_tip\": \"Enterprise WeCom organization structure has been synchronized\"\n    },\n    \"dingtalk\": {\n      \"title\": \"DingTalk\",\n      \"abbr_title\": \"DingTalk\",\n      \"access_title\": \"Access DingTalk\",\n      \"access_desc\": \"Create a enterprise internal application to achieve access\",\n      \"sync_desc\": \"After completing the DingTalk authorization binding, you can bind the DingTalk account source to import the DingTalk member directory\",\n      \"sync_tip\": \"The DingTalk organizational structure has been synchronized.\"\n    },\n    \"ad_ldap\": {\n      \"title\": \"AD/LDAP\",\n      \"abbr_title\": \"AD/LDAP\",\n      \"access_title\": \"Access AD/LDAP\",\n      \"access_desc\": \"After binding AD/LDAP, you can import the AD/LDAP member directory and realize single sign-on for AD/LDAP accounts in 53Hub\"\n    },\n    \"api_access\": {\n      \"title\": \"API Access\",\n      \"access_title\": \"API Access\",\n      \"access_desc\": \"Single sign-on is achieved through API authentication. Users can log in directly by clicking the link without manually entering their account and password\"\n    },\n    \"feishu\": {\n      \"title\": \"Feishu\",\n      \"abbr_title\": \"Feishu\",\n      \"access_title\": \"Access Feishu\",\n      \"access_desc\": \"Enterprise administrator scans the code to install and access\",\n      \"sync_desc\": \"After completing the Feishu authorization binding, you can bind the Feishu account source to import the Feishu member directory\"\n    },\n    \"auth_access\": \"Authorize Access\",\n    \"organization_sync\": \"Organization Sync\",\n    \"access_title\": \"Access {title}\",\n    \"access_desc\": \"Need {title} administrator scan the code and install\",\n    \"access_desc_v2\": \"Existing {title} can scan code to authorize directly; unregistered {title} please register first\",\n    \"goto_access\": \"Go to {title} authorization\",\n    \"goto_register\": \"Go to register {title}\",\n    \"sync_confirm\": \"After sync, {title} organization will overwrite current organization and cannot be recovered\",\n    \"sync_cancel\": \"Canceling sync will restore to initial org state\",\n    \"sync_cancel_tip\": \"Cancel synchronization\",\n    \"authorized_enterprise\": \"Authorized Enterprise\",\n    \"unauthorized\": \"Revoke Authorization\",\n    \"bind_member\": \"Associate Member\",\n    \"unbind_member\": \"Cancel Association\",\n    \"bind_member_tip\": \"Confirm associating this member with the current user?\",\n    \"unbind_member_tip\": \"Confirm canceling association with this member?\",\n    \"auth_completed_tip\": \"Please confirm you have completed app binding; Page will refresh after confirmation\",\n    \"access_setting\": \"Access Settings\",\n    \"access_method\": \"Access Method: \",\n    \"method_tip1\": \"1. Single sign-on is achieved by completing user identity authentication through a single jump\",\n    \"method_tip2\": \"2. The link format is: \",\n    \"method_tip3\": \"3. Parameter description: \",\n    \"username_tip\": \"a mobile phone or an email address\",\n    \"timestamp_tip\": \"Current timestamp (This link will expire in 10 minutes)\",\n    \"sign_tip\": \"It is an md5 value of Sercet concatenated from timestamp={timestamp}&username={username}\",\n    \"enable_encryption\": \"Enable Encryption: \",\n    \"API_documentation\": \"API Documentation\",\n    \"save_success\": \"Saved Successfully\"\n  },\n  \"action_visit\": \"Visit\",\n  \"action_add\": \"Add\",\n  \"action_add_success\": \"Added\",\n  \"action_create\": \"Create\",\n  \"action_edit\": \"Edit\",\n  \"action_save\": \"Save\",\n  \"action_save_success\": \"Saved\",\n  \"action_save_failed\": \"Saving failed\",\n  \"action_sync_start\": \"Sync Failed\",\n  \"action_sync_failed\": \"Start Sync\",\n  \"action_delete\": \"Delete\",\n  \"action_delete_tip\": \"Delete Prompt\",\n  \"action_delete_confirm\": \"Are you sure to delete this data?\",\n  \"action_delete_success\": \"Deleted\",\n  \"action_remove\": \"Remove\",\n  \"action_remove_success\": \"Removed\",\n  \"action_confirm\": \"Confirm\",\n  \"action_confirm_success\": \"Confirmed\",\n  \"action_cancel\": \"Cancel\",\n  \"action_select\": \"Select\",\n  \"action_sort\": \"Sort\",\n  \"action_sort_success\": \"Sort Updated\",\n  \"action_setting\": \"Settings\",\n  \"action_enable\": \"Enable\",\n  \"action_enable_success\": \"Enabled\",\n  \"action_disable\": \"Disable\",\n  \"action_disable_success\": \"Disabled\",\n  \"action_upload\": \"Upload\",\n  \"action_upgrade\": \"Upgrade\",\n  \"action_renew\": \"Renew\",\n  \"action_renew_v2\": \"Extend\",\n  \"action_modify\": \"Modify\",\n  \"action_view_example\": \"View Example\",\n  \"action_authorize\": \"Authorize\",\n  \"action_authorize_success\": \"Authorized\",\n  \"action_copy\": \"Copy\",\n  \"action_copy_success\": \"Copied\",\n  \"action_replace\": \"Replace\",\n  \"action_clear\": \"Clear\",\n  \"action_search\": \"Search\",\n  \"action_close\": \"Close\",\n  \"action_view_more\": \"View More\",\n  \"action_open\": \"Open\",\n  \"action_send\": \"Send\",\n  \"action_send_success\": \"Sent\",\n  \"action_login\": \"Login\",\n  \"action_login_success\": \"Logged in\",\n  \"action_register\": \"Register\",\n  \"action_register_and_login\": \"Register and Login\",\n  \"action_register_success\": \"Registered\",\n  \"action_reset\": \"Reset\",\n  \"action_preview\": \"Preview\",\n  \"action_amplify\": \"Enlarge\",\n  \"action_shrink\": \"reduce\",\n  \"action_stop_generation\": \"Stop Generation\",\n  \"action_restart_generation\": \"Restart Generation\",\n  \"action_update\": \"Update\",\n  \"action_update_success\": \"Updated\",\n  \"action_next_step\": \"Next Step\",\n  \"action_exit\": \"Logout\",\n  \"action_exit_success\": \"Logged Out\",\n  \"action_exit_confirm\": \"Are you sure to logout?\",\n  \"action_select_file\": \"+ Select File\",\n  \"action_manage\": \"Manage\",\n  \"action_go\": \"Go\",\n  \"action_rename\": \"Rename\",\n  \"action_bind\": \"Associate\",\n  \"action_unbind\": \"Cancel Association\",\n  \"action_bind_success\": \"Associated\",\n  \"action_unbind_success\": \"Association canceled\",\n  \"action_confirm_payment\": \"Confirm Payment receipt\",\n  \"action_confirm_payment_success\": \"Payment receipt confirmed\",\n  \"completion_completed\": \"Deep Thinking Completed\",\n  \"completion_thinking\": \"Deep Thinking in progress...\",\n  \"form_input_placeholder\": \"Please enter\",\n  \"form_input_placeholder_max_length\": \"Maximum {max} characters allowed\",\n  \"form_select_placeholder\": \"Please select\",\n  \"form_upload_placeholder\": \"Please upload\",\n  \"form_link_validator\": \"Please enter a valid link address\",\n  \"form_mobile_validator\": \"Please enter a valid mobile number\",\n  \"form_email_validator\": \"Please enter a valid email address\",\n  \"form_mobile_or_email_validator\": \"Please enter a valid mobile number or email address\",\n  \"form_password_validator\": \"Password cannot contain Chinese characters or spaces\",\n  \"form_url_validator\": \"Please enter a valid URL address\",\n  \"form_path_validator\": \"Please enter a valid path address (e.g. /index)\",\n  \"form_path_same_tip\": \"The same path address already exists, please re-enter\",\n  \"form_image_validator\": \"Please upload a valid image\",\n  \"form_variable_validator\": \"Variable names can only contain letters, numbers, and underscores, and cannot start with a number\",\n  \"form_hide_logo\": \"Hide Technical Support Logo\",\n  \"enterprise_edition\": \"Enterprise Edition\",\n  \"image_cropper\": \"Image Cropper\",\n  \"reupload\": \"Re-upload\",\n  \"wechat\": \"WeChat\",\n  \"alipay\": \"Alipay\",\n  \"alipay_pay\": \"Alipay Payment\",\n  \"enabled\": \"Enabled\",\n  \"disabled\": \"Disabled\",\n  \"setting\": \"Configured\",\n  \"not_setting\": \"Not Configured\",\n  \"updated_at\": \"Updated at\",\n  \"yearly\": \"Year\",\n  \"monthly\": \"Month\",\n  \"expired_time\": \"Expiration Time\",\n  \"basic_info\": \"Basic Information\",\n  \"connected\": \"Connected\",\n  \"connecting\": \"Connecting\",\n  \"not_connected\": \"Not Connected\",\n  \"connecting_agent_total\": \"Connected to {total} applications\",\n  \"authorized_at\": \"Authorized at\",\n  \"no_data\": \"No Data\",\n  \"effective\": \"Effective\",\n  \"https_enabled\": \"HTTPS Enabled\",\n  \"group\": \"Group\",\n  \"all\": \"All\",\n  \"all_group\": \"All Groups\",\n  \"user\": \"User\",\n  \"mobile\": \"Mobile number\",\n  \"verification_code\": \"Verification Code\",\n  \"verification_code_placeholder\": \"Please enter verification code\",\n  \"get_verification_code\": \"Get Verification Code\",\n  \"subscription\": {\n    \"title\": \"Subscription\",\n    \"end_at\": \"Subscription End At\",\n    \"transfer_title\": \"Delete Subscription\",\n    \"transfer_desc\": \"Delete the following subscription service and migrate the subscription users to the new subscription service\",\n    \"transfer_to\": \"Migrate To\"\n  },\n  \"register_time\": \"Register Time\",\n  \"created_time\": \"Created Time\",\n  \"add_time\": \"Add Time\",\n  \"operation\": \"Operation\",\n  \"language\": \"Language\",\n  \"website_domain\": \"Website Domain\",\n  \"website_home\": \"Website Home\",\n  \"create_time\": \"Create Time\",\n  \"update_time\": \"Update Time\",\n  \"service_expired_time\": \"Service Expiration\",\n  \"configuration_completion\": \"Config Completion\",\n  \"description\": \"Description\",\n  \"pictorial_image\": \"Diagram\",\n  \"type\": \"Type\",\n  \"all_type\": \"All Types\",\n  \"usage_record\": \"Usage Record\",\n  \"usage_guide\": \"Usage Guide\",\n  \"dialogue_record\": \"Conversation Record\",\n  \"user_info\": \"User Info\",\n  \"avatar\": \"Avatar\",\n  \"login_password\": \"Login Password\",\n  \"bind_account\": \"Bound Account\",\n  \"mobile_v2\": \"Mobile\",\n  \"email\": \"Email\",\n  \"open_id\": \"OpenID\",\n  \"google_account\": \"Google Account\",\n  \"not_bound\": \"Not Bound\",\n  \"all_order\": \"All Orders\",\n  \"all_order_payment\": \"All Payments\",\n  \"order_id\": \"Order ID\",\n  \"order_no\": \"Order Number\",\n  \"order_subscription\": \"Subscription\",\n  \"order_amount\": \"Amount\",\n  \"order_status\": \"Status\",\n  \"order_status_pending\": \"Pending\",\n  \"order_status_paid\": \"Paid\",\n  \"order_status_refunded\": \"Refunded\",\n  \"order_status_timeout\": \"Timeout\",\n  \"order_status_expired\": \"Expired\",\n  \"order_create_time\": \"Order Time\",\n  \"order_payment_type\": \"Type\",\n  \"order_payment_type_wechat\": \"WeChat\",\n  \"order_payment_type_alipay\": \"Alipay\",\n  \"order_payment_type_manual\": \"Manual Transfer\",\n  \"order_subscription_version\": \"Subscription Version\",\n  \"order_subscription_duration\": \"Subscription Duration\",\n  \"table_footer_text\": \"Total {total} items\",\n  \"app_config\": \"App Config\",\n  \"market_insight\": \"Market Insight\",\n  \"opportunity_capture\": \"Opportunity Capture\",\n  \"product_mastery\": \"Product Mastery\",\n  \"media_operation\": \"Media Operation\",\n  \"usage_case\": \"Usage Case\",\n  \"usage_case_desc\": \"Add usage cases to your application to make it easier for users to get started\",\n  \"input\": \"Input\",\n  \"output\": \"Output\",\n  \"output_variable\": \"Output Variables\",\n  \"usage_scene\": \"Usage Scene\",\n  \"usage_scene_desc\": \"Add more usage scenes to your application\",\n  \"image\": \"Image\",\n  \"database_management\": \"Database Management\",\n  \"database_management_desc\": \"Database administrators and developers can use this tool to quickly generate SQL statements, query, update, and manage databases, improving work efficiency.\",\n  \"scene\": \"Scene\",\n  \"function_update\": \"Function Update\",\n  \"function_update_desc\": \"Product Feature Update\",\n  \"notification_center\": \"Notification Center\",\n  \"access_model\": \"Access Model\",\n  \"name\": \"Name\",\n  \"role_instruction\": \"Role Instruction\",\n  \"role_instruction_desc\": \"Used to make a series of instructions and constraints for the AI's replies\",\n  \"optimize\": \"Optimize\",\n  \"optimize_tip\": \"Role Instruction Optimization\",\n  \"generate_tip\": \"Role Instruction Generation\",\n  \"icon\": \"Icon\",\n  \"website_name\": \"Web Name\",\n  \"group_management\": \"Group Management\",\n  \"display_order\": \"Display Order\",\n  \"permission_setting\": \"Scope of Use\",\n  \"expand_setting\": \"Expanded Settings\",\n  \"base_setting\": \"Welcome Message\",\n  \"visible_range\": \"Visible Range\",\n  \"dialogue_frequency\": \"Dialogue Frequency\",\n  \"dialogue_total\": \" Total Dialogue\",\n  \"limit\": \"Restriction\",\n  \"second\": \"Second\",\n  \"send\": \"Send\",\n  \"unit_messages\": \"Messages\",\n  \"unit_messages_v2\": \"piece\",\n  \"over_message\": \"Default reply if exceeded\",\n  \"limit_every_dialogue\": \"Limit total dialogues per user\",\n  \"select_agent\": \"Select Agent\",\n  \"debug_preview\": \"Debug Preview\",\n  \"restart\": \"Restart\",\n  \"start_running\": \"Start Running\",\n  \"message_input_placeholder\": \"Send a message or enter your question...\",\n  \"workspace\": \"Workspace\",\n  \"edit_agent\": \"Edit Agent\",\n  \"coze_workflow_link\": \"Coze workflow \\\"edit state\\\" link\",\n  \"model_name\": \"Model Name\",\n  \"model_name_placeholder\": \"Please enter model name\",\n  \"prompt_placeholder\": \"Please enter prompt word\",\n  \"copyright_desc\": \"Copyright © 2014-{year} Guangzhou Qunying Network Technology Co., Ltd. All Rights Reserved. ICP Filing No. 17114055\",\n  \"no_permission_tip\": \"You haven't obtained permission to use this function. Please contact the administrator to enable it\",\n  \"not_found_tip\": \"Corresponding page not found or you haven't obtained permission to use this function. Please contact the administrator to enable it\",\n  \"go_home\": \"Go to Homepage\",\n  \"register\": \"Register\",\n  \"username\": \"Username\",\n  \"account\": \"Account\",\n  \"password\": \"Password\",\n  \"group_min_one\": \"At least one group\",\n  \"group_delete_confirm\": \"Are you sure to delete this group?\",\n  \"group_not_empty\": \"Group cannot be empty\",\n  \"agent_delete_confirm\": \"Are you sure to delete this agent?\",\n  \"feature_coming_soon\": \"Feature coming soon, please wait\",\n  \"silicon_flow\": \"Silicon Flow\",\n  \"deep_seek\": \"Deep Seek\",\n  \"openai\": \"OpenAI\",\n  \"azure_open_ai\": \"Azure OpenAI\",\n  \"dark_moon\": \"Dark Moon\",\n  \"chat_glm\": \"ChatGLM\",\n  \"tongyi\": \"TongyiQianWen\",\n  \"coze_cn\": \"Coze.cn\",\n  \"dify\": \"Dify\",\n  \"app_builder\": \"Qianfan AppBuilder\",\n  \"coze\": \"Coze\",\n  \"53ai\": \"53AI\",\n  \"fast_gpt\": \"FastGPT\",\n  \"yuanqi\": \"Tencent Yuanqi\",\n  \"bailian\": \"Alibaba Bailian\",\n  \"volcengine\": \"Volcengine\",\n  \"sort\": \"Sort\",\n  \"official_website\": \"Home\",\n  \"create_new_enterprise\": \"Create a New Enterprise/Organization\",\n  \"return\": \"Back\",\n  \"apply_open\": \"Apply for Activation\",\n  \"user_register\": \"User Register\",\n  \"account_register\": \"Register Account\",\n  \"or\": \"Or\",\n  \"other_login_method\": \"Other login methods\",\n  \"account_psd\": \"Account And Password\",\n  \"mobile_login\": \"SMS Login\",\n  \"apply_success\": \"Application Successful\",\n  \"apply_success_desc\": \"We will complete the review within 24 hours. You can also scan the code to add a dedicated customer service to know the progress\",\n  \"agent_not_found\": \"Please save the created agent first\",\n  \"agent_channel_type_not_found\": \"Channel type not found. Please save first and then debug\",\n  \"permanent_effect\": \"Permanent effect\",\n  \"empty_to_not_change\": \"Leave blank for no change\",\n  \"api_host\": \"Backend Service API\",\n  \"ap_host_fastgpt\": \"API Root Address\",\n  \"api_screet\": \"API Secret Key\",\n  \"api_botid\": \"Agent ID\",\n  \"api_botid_en\": \"Bot ID\",\n  \"api_appid\": \"App ID\",\n  \"api_key\": \"API Key\",\n  \"agent_type\": \"AI Agent Type\",\n  \"agent_type_chat\": \"Dialogue - type Application\",\n  \"agent_type_chat_v2\": \"Dialogue Type\",\n  \"agent_type_completion\": \"Workflow Application\",\n  \"agent_type_completion_v2\": \"Application Type\",\n  \"agent_type_workflow\": \"Workflow Orchestration Dialogue - type Application\",\n  \"app_type\": \"Application Type\",\n  \"how_get\": \"How to obtain\",\n  \"53ai_api_endpoint\": \"API Endpoint\",\n  \"53ai_api_screet\": \"Secret Key\",\n  \"upload_pem_file_tip\": \"Please upload pem file\",\n  \"usage_range\": \"Usage Range\",\n  \"internal_member_group\": \"Internal Member Grouping\",\n  \"dify_agent_get_tip\": \"Go to Dify and login ({url}) \\nStep 1: Select the agent to be accessed, click \\\"Access API\\\" \\nStep 2: Copy \\\"API Server\\\" and \\\"API Secret Key\\\" in the upper right corner, and fill in the form below.\",\n  \"53ai_agent_get_tip\": \"Go to 53AI and login ({url}) \\n Step 1: Select the agent to be accessed, click \\\"Access API\\\" \\n Step 2: Copy \\\"API Endpoint\\\" 、 \\\"Bot-Id\\\" 和 \\\"SECRET_KEY\\\", and fill in the form below.\",\n  \"bailian_agent_get_tip\": \"Go to Alibaba Bailian and login ({ url })\\n Step 1: Login Alibaba Bailian and go to the Application - Application Management page.\\n Step 2:  Select an application, copy the 'Application ID' in the application card and paste it into the form below.\\n Step3: Click Publish under the application card to obtain the API - KEY, copy and paste it into the form below.\",\n  \"volcengine_agent_get_tip\": \"Go to Volcengine ({ url })\\n Step 1: Login Volcengine, click to enter My Applications ({my_url})\\n Step 2: Click an existing application (or create an application), click to copy bot - xxxxxx in the upper left corner (there is a copy button behind it), and paste it into the form below\\n Step 3: Click 'API Call Guide' in the upper right corner, click to select API Key and copy, then copy a key and paste it into the form below.\",\n  \"yuanqi_agent_get_tip\": \"Go to Tencent Yuanqi({ url })\\n Step 1: Login Tencent Yuanqi, go to my creation. \\n Step 2: Click the More Button in the lower right corner of the agent card, click Call API (new agent needs to wait for approval to have). \\n Step 3: Click copy  agent ID, paste it below. \\n Step 4: Click copy Token, and paste it below.\",\n  \"fastgpt_agent_get_tip\": \"Go to FastGPT ({ url })\\n Step 1: Login FastGPT, click \\\"Workbench\\\" then click to select the application to access   \\n Step 2: Enter the application and select \\\"API Access\\\" under [Publishing Channels] \\n Step 3: Under API Key Management, click New. After successful creation, copy \\\"API KEY\\\" and fill it into the form; \\nStep 4: Copy \\\"API Root Address\\\" and fill it into the form; \",\n  \"maxkb_agent_get_tip\": \"Go to MaxKB({ url })\\n Step 1: Download MaxKB client; \\n Step 2: Click the application to be accessed in \\\"Application\\\"; \\n Step 3: Under \\\"API Access Credentials\\\", copy the Base URL, create and copy the API Key, and fill them into the following form.\",\n  \"tip\": \"Tip\",\n  \"auth_required\": \"{provider_name} is not authorized, please go to {provider_name} to authorize\",\n  \"intelligent_agent_platform\": \"AI Agent Platform\",\n  \"cloud_computing_platform\": \"Cloud Computing Platform\",\n  \"local_config_limited_tip\": \"Configuration Limited Tip\",\n  \"local_config_limited_desc\": \"Due to the current system access being an intranet address ({url}), adding/configuring Coze agents, WeChat Pay, and Alipay is not possible. It needs to be deployed to an address accessible from the external network before configuration.\",\n  \"know_it\": \"I know\",\n  \"selected_tip\": \"Selected {total} items\",\n  \"support_image\": \"Image Supported\",\n  \"debugger_config_change_confirm\": \"Modifying the settings will reset the debug area.You need to save and restart debugging\",\n  \"save_and_restart\": \"Save and Restart\",\n  \"title\": \"Title\",\n  \"year\": \"Year\",\n  \"month\": \"Month\",\n  \"agent_file_parse\": \"Document Parsing\",\n  \"agent_image_parse\": \"Image Vision\",\n  \"model_platform\": \"Large Model Platform\",\n  \"commom\": {\n    \"add_manual\": \"Add Manually\",\n    \"add_market\": \"Add from App Market\"\n  },\n\n  \"jump_path\": \"Jump Address\",\n  \"open_method\": \"Open Method\",\n  \"navigation_is_open\": \"Whether to Display in Navigation\",\n  \"page_edit\": \"Page Edit\",\n  \"last_edit\": \"Last Edit\",\n  \"opening_statement\": \"Opening Statement\",\n  \"suggested_questions\": \"Suggested Questions\",\n  \"max_add_tip\": \"Maximum {max} items\",\n  \"join_group\": \"Join Group\",\n  \"join_group_desc\": \"Join the group to learn and progress together\",\n  \"start_time\": \"Start Time\",\n  \"end_time\": \"End Time\",\n  \"filter\": \"Filter\",\n  \"user/mobile\": \"User/Mobile\",\n  \"summary\": \"Summary\",\n  \"message_count\": \"Number of Messages\",\n  \"detail\": \"Detail\",\n  \"dialogue_detail\": \"Dialogue Detail\",\n  \"more\": \"More\",\n  \"keyword\": \"Keyword\",\n  \"software_style\": \"Software Style\",\n  \"website_style\": \"Website Style\",\n  \"system_log\": {\n    \"log_label\": \"Log\",\n    \"log_action\": \"Action\",\n    \"log_module\": \"Module\",\n    \"log_operator\": \"Operator\",\n    \"log_time\": \"Time\",\n    \"log_ip\": \"IP\"\n  },\n  \"version\": {\n    \"title\": \"Version\",\n    \"scan_consult\": \"Scan Code for Consultation\",\n    \"upgrade_tip\": \"Upgrade Tip\",\n    \"upgrade\": \"Upgrade Version\",\n    \"upgrade_renew\": \"Upgrade version/Renew\",\n    \"not_support\": \"Current Version Not Supported\",\n    \"agent_limit\": \"The number of agents added has reached the upper limit. Please Upgrade to Add\",\n    \"upgrade_hide_logo\": \"Upgrade to the enterprise version to enable hiding the technical support logo\"\n  },\n  \"knowledge\": {\n    \"name\": \"Knowledge Base\",\n    \"short_name\": \"Knowledge\"\n  },\n  \"space\": {\n    \"title\": \"Team Space\",\n    \"search_placeholder\": \"Enter Space Name\",\n    \"name\": \"Team Space Name\",\n    \"name_placeholder\": \"Please enter space name\",\n    \"icon\": \"Icon\",\n    \"capacity\": \"Capacity\",\n    \"description\": \"Description\",\n    \"description_placeholder\": \"Please enter description\",\n    \"delete_tip\": \"There are {total} knowledge bases in the current space, please clear the knowledge bases before deleting the space\",\n    \"delete_confirm\": \"Are you sure to delete the space?\",\n    \"delete_confirm_tip\": \"Please note! This operation will clear all content in the space. <br> Please enter the space name to be deleted: {name}\",\n    \"delete_confirm_tip_placeholder\": \"Please enter the space name to be deleted\",\n    \"system\": \"System\",\n    \"system_space_delete_tip\": \"System space, cannot be deleted\"\n  },\n  \"common\": {\n    \"name\": \"Name\",\n    \"short_name\": \"Abbreviation\",\n    \"member\": \"Member\",\n    \"creator\": \"Creator\",\n    \"created_time\": \"Created Time\"\n  },\n  \"action\": {\n    \"create\": \"Create\",\n    \"add\": \"Add\",\n    \"added\": \"Added\",\n    \"edit\": \"Edit\",\n    \"manage\": \"Manage\",\n    \"delete\": \"Delete\",\n    \"save\": \"Save\",\n    \"operation\": \"Operation\",\n    \"more\": \"More\",\n    \"cancel\": \"Cancel\",\n    \"setting\": \"Setting\"\n  },\n  \"default_links\": {\n    \"default_setting\": \"Default Setting\",\n    \"website\": \"Website\",\n    \"jump_path\": \"Jump Address\"\n  },\n  \"message_status\": {\n    \"create_success\": \"Created\",\n    \"save_success\": \"Saved\",\n    \"logic_reasoning_required\": \"Please select logic reasoning model\",\n    \"vector_embedding_required\": \"Please select vector embedding model\",\n    \"rerank_model_required\": \"Please select rerank model\"\n  },\n  \"agent\": {\n    \"name\": \"Agent\",\n    \"name_v2\": \"Agent Name\",\n    \"base_info\": \"Base Info\",\n    \"input_variable\": \"Input\",\n    \"output_variable\": \"Output\",\n    \"variable_name\": \"Variable Name\",\n    \"variable_type\": \"Variable Type\",\n    \"variable_label\": \"Display Name\",\n    \"variable_desc\": \"Description\",\n    \"variable_required\": \"Required\",\n    \"variable_max_length\": \"Max Length\",\n    \"variable_show_word_limit\": \"Show Word count\",\n    \"variable_options\": \"Options\",\n    \"coze\": {\n      \"workspace\": \"Workspace\",\n      \"workflow_link\": \"Coze workflow \\\"edit state\\\" link\",\n      \"agent_type_chat\": \"Conversational (Agent)\",\n      \"agent_type_chat_desc\": \"User interacts with a large model, which is autonomous and decision-making, suitable for simple business logic.\",\n      \"agent_type_workflow\": \"Application Type (Workflow)\",\n      \"agent_type_workflow_desc\": \"Workflow is a collection of executable instructions, used to implement business logic or complete specific tasks.\"\n    },\n    \"53ai\": {\n      \"agent_type_chat\": \"Conversational (Intelligent Q&A)\",\n      \"agent_type_chat_desc\": \"User interacts with a large model, which is autonomous and decision-making, suitable for simple business logic.\",\n      \"agent_type_workflow\": \"Application Type (Application Intelligent Transformation)\",\n      \"agent_type_workflow_desc\": \"Users enter requirements in a form, and the large model thinks and outputs according to the requirements, suitable for intelligent transformation scenarios of complex business logic.\"\n    },\n    \"dify\": {\n      \"agent_type_chat\": \"Conversational (Chat Assistant/Agent/Chatflow)\",\n      \"agent_type_chat_desc\": \"User interacts with a large model, which is autonomous and decision-making, suitable for simple business logic.\",\n      \"agent_type_workflow\": \"Application Type (Workflow/Text Generation Application)\",\n      \"agent_type_workflow_desc\": \"Workflow is a collection of executable instructions, used to implement business logic or complete specific tasks.\"\n    },\n    \"fastgpt\": {\n      \"agent_type_chat\": \"Conversational (Simple Application/Workflow)\",\n      \"agent_type_chat_desc\": \"User interacts with a large model, which is autonomous and decision-making, suitable for simple business logic.\",\n      \"agent_type_workflow\": \"Application Type (Plugin)\",\n      \"agent_type_workflow_desc\": \"A workflow that can customize input and output, usually used to encapsulate frequently used workflows.\"\n    },\n    \"relate_app\": {\n      \"title\": \"Associated Scenario\",\n      \"desc\": \"Assign the 'output' of the agent to the 'input' of the associated scenario agent to realize the automated flow of multi-scenario tasks.\",\n      \"input_mapping\": \"Parameter Mapping\",\n      \"execution_rule\": \"Execution Rule\",\n      \"auto_execution\": \"Auto Execution\",\n      \"manual_execution\": \"Manual Execution\"\n    }\n  },\n  \"form\": {\n    \"input_placeholder\": \"Please enter\",\n    \"select_placeholder\": \"Please select\",\n    \"set_variable_placeholder\": \"Please set ｛#variable｝\"\n  },\n  \"file\": {\n    \"type_limit\": \"Currently only supports {accept} format files\",\n    \"size_empty\": \"File content cannot be empty\",\n    \"size_limit\": \"File upload size cannot exceed {size}MB ({name} size exceeds)\",\n    \"upload_limit\": \"Upload up to {limit} files\"\n  },\n  \"variable_type\": {\n    \"text\": \"Text\",\n    \"textarea\": \"Textarea\",\n    \"inputNumber\": \"Number\",\n    \"select\": \"Select\",\n    \"date\": \"Date\",\n    \"tag\": \"Tag\",\n    \"file\": \"File\",\n    \"markdown\": \"Markdown\",\n    \"image\": \"Image\",\n    \"audio\": \"Audio\",\n    \"video\": \"Video\"\n  }\n}\n"
  },
  {
    "path": "web/console/src/locales/en.json",
    "content": "{\n  \"response_code\": {\n    \"success\": \"Success\",\n    \"param_error\": \"Parameter Error\",\n    \"database_error\": \"Database Error\",\n    \"network_error\": \"Network Error, Please Try Again\",\n    \"system_error\": \"System Error\",\n    \"auth_error\": \"Authentication Error\",\n    \"not_found_error\": \"Not Found Error\",\n    \"unauthorized_error\": \"Unauthorized Error\",\n    \"file_error\": \"File Error\",\n    \"forbidden_error\": \"Forbidden Error\",\n    \"agent_error\": \"Agent Error\",\n    \"token_expired_error\": \"Token Expired Error\",\n    \"verification_code_error\": \"Verification Code Error\"\n  },\n  \"response_message\": {\n    \"unknown_error\": \"Unknown Error\",\n    \"user_not_found\": \"User Not Found\",\n    \"username_or_password_is_incorrect\": \"Username or Password is Incorrect\",\n    \"operate_too_fast\": \"Operate Too Fast, Please Try Again Later\"\n  },\n  \"response_data\": {\n    \"domain_already_bound\": \"The domain name has already been bound\",\n    \"apply_already_submitted\": \"You have already submitted an application, please do not submit it again\"\n  },\n  \"module\": {\n    \"parse\": \"Content Cleaning\",\n    \"viewer\": \"Document View\",\n    \"agent_type_prompt\": \"Create via Prompt\",\n    \"agent_type_53ai_agent\": \"53AI Intelligent Agent\",\n    \"agent_type_53ai_workflow\": \"53AI Application Intelligence\",\n    \"agent_type_coze_agent_cn\": \"Coze Intelligent Agent\",\n    \"agent_type_coze_workflow_cn\": \"Coze Application Intelligence\",\n    \"agent_type_coze_agent\": \"Coze Intelligent Agent\",\n    \"agent_type_coze_workflow\": \"Coze Application Intelligence\",\n    \"agent_type_dify_agent\": \"Dify Intelligent Agent\",\n    \"agent_type_dify_workflow\": \"Dify Application Intelligence\",\n    \"agent_type_yuanqi\": \"Tencent Yuanqi\",\n    \"agent_type_bailian\": \"Alibaba Bailian\",\n    \"agent_type_volcengine\": \"Volcengine\",\n    \"agent_sort_desc\": \"The larger the number, the higher the ranking\",\n    \"dialogue\": \"Work Dialogue\",\n    \"draft\": \"Smart Solutions\",\n    \"writer\": \"Content Creation\",\n    \"aibox\": \"AI Toolbox\",\n    \"bot\": \"Intelligent Agent\",\n    \"prompt\": \"Prompts\",\n    \"library\": \"Knowledge Settings\",\n    \"search_section\": \"AI Question Assistant\",\n    \"search\": \"AI Question\",\n    \"chunk_setting\": \"Chunk Template\",\n    \"model_setting\": \"Model Settings\",\n    \"system\": \"System Management\",\n    \"dialogue_digital_employee\": \"AI Employee\",\n    \"dialogue_prompt\": \"Prompts\",\n    \"dialogue_large_model\": \"Large Models\",\n    \"enterprise_info\": \"Enterprise Information\",\n    \"large_model\": \"Large Model Access\",\n    \"user\": \"Employee Accounts\",\n    \"combinat\": \"Single Sign-On\",\n    \"system_log\": \"System Logs\",\n    \"homepage\": \"Homepage\",\n    \"app_management\": \"App Manage\",\n    \"agent\": \"Intelligent Agent\",\n    \"knowledge\": \"Knowledge\",\n    \"space\": \"Space\",\n    \"agent_search_placeholder\": \"Search Intelligent Agent\",\n    \"ai_toolbox\": \"AI Toolbox\",\n    \"ai_toolbox_search_placeholder\": \"Search Toolbox\",\n    \"operation_management\": \"Operation\",\n    \"operation_user\": \"User Data\",\n    \"operation_user_delete_confirm\": \"Are you sure you want to delete this user?\",\n    \"operation_user_search_placeholder\": \"Member Name/Phone Number/Email\",\n    \"operation_order\": \"Order Data\",\n    \"operation_order_delete_confirm\": \"Are you sure you want to delete this order?\",\n    \"operation_order_search_placeholder\": \"Order ID/Phone Number\",\n    \"operation_order_user_tip\": \"You can directly input the user nickname to select, if you select multiple users, it will create a separate order for each user\",\n    \"operation_visit\": \"Visit Data\",\n    \"site_config\": \"Site Config\",\n    \"system_config\": \"System Config\",\n    \"website_info\": \"Site Info\",\n    \"website_info_logo\": \"Logo\",\n    \"website_info_logo_tip\": \"Please upload a square logo (recommended size: 512×512px) in 1:1 ratio, supported formats: PNG/JPG, file size must be less than 2MB\",\n    \"website_info_logo_placeholder\": \"Please upload Logo\",\n    \"website_info_ico\": \"ico\",\n    \"website_info_ico_tip\": \"Recommended size: 64×64\",\n    \"website_info_ico_placeholder\": \"Please upload ico\",\n    \"website_info_name\": \"Website Name\",\n    \"website_info_name_placeholder\": \"Please enter website name\",\n    \"website_info_language\": \"Default Language\",\n    \"website_info_keyword\": \"Keywords\",\n    \"website_info_keyword_placeholder\": \"Please enter keywords\",\n    \"website_info_keyword_placeholder_v2\": \"You can enter multiple keywords - press Enter after each one\",\n    \"website_info_desc\": \"Website Description\",\n    \"website_info_desc_placeholder\": \"Please enter website description\",\n    \"website_info_copyright\": \"Copyright\",\n    \"website_info_copyright_placeholder\": \"Please enter copyright\",\n    \"website_info_type\": \"Site Type\",\n    \"website_type_independent\": \"AI Independent Site\",\n    \"website_type_independent_desc\": \"Site is only accessible to registered users\",\n    \"website_type_enterprise\": \"Enterprise AI Portal\",\n    \"website_type_enterprise_desc\": \"Site is only accessible to internal users\",\n    \"website_type_industry\": \"Industry AI Portal\",\n    \"website_type_industry_desc\": \"Site is accessible to internal employees and registered users\",\n    \"website_info_template\": \"Site Template\",\n    \"website_info_layout\": \"Website Layout\",\n    \"platform\": \"Platform Integration\",\n    \"platform_v2\": \"Platform\",\n    \"all_platform\": \"All Platform\",\n    \"platform_delete_confirm\": \"Are you sure you want to delete this agent platform?\",\n    \"platform_tools\": \"Extended Tools\",\n    \"platform_auth_client_id\": \"Client ID\",\n    \"platform_auth_client_id_placeholder\": \"Please enter client ID\",\n    \"platform_auth_client_secret\": \"Client Secret\",\n    \"platform_auth_client_secret_placeholder\": \"Please enter client secret\",\n    \"platform_auth_coze_confirm\": \"Confirm you have saved in Coze\",\n    \"platform_auth_url\": \"URL\",\n    \"platform_auth_secret\": \"Secret\",\n    \"platform_auth_secret_id\": \"SecretId\",\n    \"platform_auth_secret_id_placeholder\": \"Please enter SecretId\",\n    \"platform_auth_secret_key\": \"SecretKey\",\n    \"platform_auth_secret_key_placeholder\": \"Please enter SecretKey\",\n    \"platform_search_online\": \"Search online\",\n    \"platform_search_online_desc\": \"Search the web content, and summarize the results.\",\n    \"platform_search_online_delete_confirm\": \"Are you sure you want to delete this search online tool?\",\n    \"platform_tool_api_key\": \"API Key\",\n    \"platform_tool_api_key_placeholder\": \"Enter your API Key\",\n    \"platform_model\": \"General Large Model\",\n    \"platform_model_add\": \"General Large Model\",\n    \"platform_model_organization_id\": \"Organization ID\",\n    \"platform_model_organization_id_placeholder\": \"Enter your organization ID\",\n    \"platform_model_base_url\": \"API Base\",\n    \"platform_model_base_url_azure\": \"API Domain\",\n    \"platform_model_base_url_maxkb\": \"Base URL\",\n    \"platform_model_base_url_azure_placeholder\": \"Enter your API domain, e.g. https://example.com/xxx\",\n    \"platform_model_name\": \"Deployment Name\",\n    \"platform_model_name_placeholder\": \"Enter your deployment name, matching the Azure deployment name\",\n    \"platform_model_other\": \"API Version\",\n    \"platform_model_other_placeholder\": \"Enter your API version\",\n    \"platform_model_base_url_placeholder\": \"Enter your API Base, e.g. https://api.openai.com\",\n    \"platform_model_base_url_placeholder_53ai\": \"Enter your API Base, e.g. https://api.53ai.com\",\n    \"platform_model_api_endpoint\": \"Custom API endpoint address\",\n    \"platform_model_api_endpoint_placeholder\": \"Enter your custom API endpoint address, e.g. https://api.deepseek.com/v1 or https://api.deepseek.com\",\n    \"platform_model_models_azure\": \"Base Model\",\n    \"platform_model_models_azure_placeholder\": \"Select your base model\",\n    \"platform_model_models\": \"Enabled Models\",\n    \"platform_model_models_empty\": \"No available models\",\n    \"platform_model_models_total\": \"{total} models\",\n    \"platform_model_models_edit\": \"Edit Model\",\n    \"platform_model_models_id\": \"Model ID\",\n    \"platform_model_models_name\": \"Model Name\",\n    \"platform_model_delete_confirm\": \"Are you sure you want to delete this model?\",\n    \"navigation\": \"Navigation Menu\",\n    \"pc_navigation\": \"PC Navigation\",\n    \"mobile_navigation\": \"Mobile Navigation\",\n    \"nav_type_homepage\": \"Homepage\",\n    \"nav_type_single\": \"Single Page\",\n    \"nav_type_agent\": \"Intelligent Agent\",\n    \"nav_target_self\": \"Current Window\",\n    \"nav_target_blank\": \"New Window\",\n    \"nav_name\": \"Section\",\n    \"nav_name_placeholder\": \"Please select section name\",\n    \"nav_agent_class_placeholder\": \"Please select category\",\n    \"nav_agent_placeholder\": \"Please select agent\",\n    \"nav_type\": \"Type\",\n    \"nav_target\": \"Open Method\",\n    \"nav_url\": \"Redirect Link\",\n    \"nav_visible\": \"Display in Navigation Bar\",\n    \"nav_operation\": \"Operations\",\n    \"nav_operation_seo\": \"SEO\",\n    \"action_delete_confirm\": \"Are you sure you want to delete this section?\",\n    \"nav_seo_setting\": \"SEO Settings\",\n    \"nav_seo_setting_title\": \"SEO Title\",\n    \"nav_seo_setting_keywords\": \"SEO Keywords\",\n    \"nav_seo_setting_keywords_tip\": \"Separate each keyword with English commas\",\n    \"nav_seo_setting_description\": \"SEO Description\",\n    \"payment\": \"Payment Configuration\",\n\n    \"subscription\": \"Subscription Services\",\n    \"subscription_header_title\": \"Subscription Services and Pricing\",\n    \"subscription_free\": \"Free Version\",\n    \"subscription_pro\": \"Professional Version\",\n    \"subscription_flagship\": \"Flagship Version\",\n    \"subscription_charge\": \"Subscription Fee\",\n    \"subscription_points\": \"Points\",\n    \"subscription_advanced_points\": \"Advanced Points\",\n    \"subscription_agent_bots\": \"Available Agents\",\n    \"subscription_advanced_agent_bots\": \"Available Advanced Agents\",\n    \"subscription_ai_assistant\": \"Cross-platform AI Assistant\",\n    \"subscription_ai_assistant_tip\": \"Enable support for macOS, Windows, and browser plugins for users to download and use.\",\n    \"subscription_delete_confirm\": \"Are you sure you want to delete this subscription?\",\n    \"domain\": \"Site Domain\",\n    \"domain_exclusive\": \"Exclusive Domain\",\n    \"domain_exclusive_label\": \"Customize your exclusive domain\",\n    \"domain_exclusive_validator_1\": \"Please use lowercase letters, numbers, or ”-“, and at least 5 characters\",\n    \"domain_exclusive_validator_2\": \"The domain name is already occupied, please use another domain name\",\n    \"domain_independent\": \"Independent Domain\",\n    \"domain_independent_label\": \"Customize your independent domain\",\n    \"domain_independent_desc\": \"Add a custom domain you want to use.\",\n    \"domain_independent_delete_confirm\": \"Are you sure you want to delete this independent domain?\",\n    \"domain_independent_cname\": \"CNAME\",\n    \"domain_independent_self\": \"Self-hosted\",\n    \"domain_independent_cname_desc\": \"Please select a suitable CNAME address from the following list, and set up domain name DNS resolution at the domain name provider you have备案.\",\n    \"domain_independent_cname_desc_1\": \"1. Domain registered with Alibaba Cloud: 53aihub.n1.53ai.com\",\n    \"domain_independent_cname_desc_2\": \"2. Domain registered with Tencent Cloud: 53aihub.n2.53ai.com\",\n    \"domain_independent_cname_desc_3\": \"3. Hong Kong server, slightly slower: 53aihub.n3.53ai.com\",\n    \"domain_independent_https\": \"Enable HTTPS\",\n    \"domain_independent_https_always\": \"Always use HTTPS\",\n    \"domain_independent_ssl\": \"SSL Certificate\",\n    \"domain_independent_ssl_option_1\": \"Generated by 53AI\",\n    \"domain_independent_ssl_option_2\": \"Customized by user\",\n    \"domain_independent_ssl_certificate\": \"Certificate\",\n    \"domain_independent_ssl_certificate_placeholder\": \"Please copy and paste the certificate here\",\n    \"domain_independent_ssl_private_key\": \"Private Key\",\n    \"domain_independent_ssl_private_key_placeholder\": \"Please copy and paste the private key here\",\n    \"domain_independent_self_desc_1\": \"Method 1: Use nginx or other web servers for simple configuration.\",\n    \"domain_independent_self_desc_2\": \"Method 2: Use Alibaba Cloud, Tencent Cloud, Qiniu Cloud, etc. cloud vendors' full-site acceleration service (DCDN).\",\n    \"domain_independent_self_desc_3\": \"Docs Site ID: {site_id}\",\n    \"use_subdirectories\": \"Use Subdirectories\",\n    \"use_subdirectories_tip\": \"If you want to use subdirectories (e.g. 53aihub/docs), you can open the switch\",\n    \"statistics\": \"Third-party Statistics\",\n    \"statistics_header_title\": \"Embed Code\",\n    \"statistics_header_desc\": \"You can add customer service plugins, visitor statistics, and other features to your site through embedded code\",\n    \"statistics_textarea_label_1\": \"Head Section Code\",\n    \"statistics_textarea_label_1_example\": \"Please enter JS code……\\nFor example\\n<script>console.log('hello world')</script>\\nOr\\n<script src=\\\"xxx\\\"></script>\",\n    \"statistics_textarea_label_2\": \"CSS Code\",\n    \"statistics_textarea_label_2_example\": \"Please enter CSS code\",\n    \"SMTP\": \"Registration and Login\",\n    \"SMTP_email_log\": \"Email Registration/Login\",\n    \"SMTP_mobile_log\": \"Mobile Registration/Login\",\n    \"SMTP_server\": \"SMTP Server\",\n    \"SMTP_port\": \"SMTP Port\",\n    \"SMTP_email_account\": \"Email Account\",\n    \"SMTP_email_password\": \"Email Password\",\n    \"SMTP_receiver_email\": \"Recipient Email\",\n    \"SMTP_addresser_email\": \"Sender Email\",\n    \"SMTP_send_email\": \"Send Test Email\",\n    \"SMTP_openTLS\": \"Enable TLS\",\n    \"site_decoration\": \"Site Decoration\",\n    \"template_style\": \"Template Style\",\n    \"banner_diagram\": \"Banner Diagram\"\n  },\n  \"chat\": {\n    \"empty_desc\": \"Fill in the content in the input box to debug\"\n  },\n  \"login\": {\n    \"unregistered_account_desc\": \"Unregistered account, please register first\",\n    \"account_placeholder\": \"Please enter your phone number/email\",\n    \"email_placeholder\": \"Please enter your email\",\n    \"mobile_placeholder\": \"Please enter your phone number\",\n    \"mobile_exists\": \"This mobile number has been registered. Please use this account to log in.\",\n    \"mobile_no_exists\": \"This mobile number is not registered. Please register first.\",\n    \"email_exists\": \"This email has been registered. Please use this account to log in.\",\n    \"email_no_exists\": \"This email is not registered. Please register first.\",\n    \"password_placeholder\": \"Please enter your password\",\n    \"forget_password\": \"Forget Password?\",\n    \"bind_mobile_login\": \"Bind Mobile Number\",\n    \"password_login\": \"Password Login\",\n    \"password_login_v2\": \"Password Login\",\n    \"mobile_login\": \"Mobile Login\",\n    \"mobile_login_v2\": \"Mobile Login\",\n    \"wechat_login\": \"WeChat Login\",\n    \"wechat_login_v2\": \"WeChat Login\",\n    \"google_login\": \"Google Login\",\n    \"google_login_v2\": \"Google Login\",\n    \"agree_and_policy\": \"Login means you agree to {agree} and {policy}\",\n    \"agree\": \"Terms and Conditions\",\n    \"policy\": \"Privacy Policy\",\n    \"account_length\": \"Account length must be between 4 and 20 characters\",\n    \"account_format\": \"Account must start with a letter, and can only contain letters, numbers, and underscores\",\n    \"password_length\": \"Password length must be between 8-20 characters and can include letters, numbers, and symbols\",\n    \"password_length_v2\": \"Password length must be between 8-20 characters\",\n    \"password_format\": \"Password must contain uppercase and lowercase letters and numbers\",\n    \"password_not_match\": \"The two passwords you entered do not match\",\n    \"reset_password\": \"Reset Password\",\n    \"update_password\": \"Update Password\",\n    \"back_to_login\": \"Back to Login\",\n    \"has_account\": \"Already have an account,\",\n    \"direct_login\": \"Direct Login\",\n    \"immediate_login\": \"Immediate Login\",\n    \"login_by_wechat\": \"Please use WeChat to scan the code for login\",\n    \"select_reset_password_way\": \"Select the way to reset the password\",\n    \"select_register_way\": \"Select the way to register an account\",\n    \"email_validate\": \"Email Validate\",\n    \"mobile_validate\": \"Mobile Validate\",\n    \"new_password\": \"New Password\",\n    \"new_password_placeholder\": \"Please enter new password\",\n    \"confirm_password\": \"Confirm New Password\",\n    \"confirm_password_placeholder\": \"Please enter new password again\",\n    \"verify_identity\": \"Verify Identity\",\n    \"enterprise_info\": \"Enterprise Info\",\n    \"application_complete\": \"Application Complete\",\n    \"website_name\": \"Website Name\",\n    \"website_name_placeholder\": \"Please enter website name\",\n    \"contact_name\": \"Contact Name\",\n    \"contact_name_placeholder\": \"Please enter contact name\",\n    \"complete_registration_and_login\": \"Complete Registration and Login\",\n    \"apply_open_repetition\": \"You have already submitted an application, please do not submit it again\",\n    \"select_enterprise\": \"Select Existing Site\",\n    \"new_user_tip\": \"Your initial password is “{password}”, please modify it in time\",\n    \"I_remember\": \"I remember\",\n    \"modify_password\": \"Modify Password\"\n  },\n  \"apply\": {\n    \"process\": \"Processing\",\n    \"expired\": \"Expired\",\n    \"reject\": \"Rejected\",\n    \"refresh_list\": \"Refresh List\",\n    \"contact_customer_service\": \"Contact Customer Service\",\n    \"contact_customer_service_v2\": \"Contact Customer Service\",\n    \"create_site\": \"Create Site\",\n    \"waiting_audit\": \"Waiting Audit\",\n    \"create_success\": \"Create Success\",\n    \"expired_time_forever\": \"Permanent Effective\"\n  },\n  \"service\": {\n    \"title\": \"Open Now\",\n    \"consult_name\": \"Chief Customer Service Consultant\",\n    \"desc_1\": \"Hello, scan the QR code to contact your exclusive consultant\",\n    \"desc_2\": \"Open and Use\",\n    \"desc_3\": \"Hello, scan the WeChat QR code to contact your exclusive consultant,\"\n  },\n  \"website_version\": {\n    \"free\": \"Startup Version\",\n    \"standard\": \"Professional Version\",\n    \"enterprise\": \"Enterprise Version\"\n  },\n  \"language_option_label\": {\n    \"zh-cn\": \"Chinese-CN\",\n    \"zh-tw\": \"Chinese-TW\",\n    \"en\": \"English-EN\",\n    \"jp\": \"Japanese-JP\"\n  },\n  \"template_option_label\": {\n    \"portal\": \"AI Portal\",\n    \"doubao\": \"Doubao Style\",\n    \"mita\": \"Mita Style\",\n    \"kimi\": \"Kimi Style\",\n    \"independent\": \"Independent Site\"\n  },\n  \"layout_option_label\": {\n    \"loose\": \"Loose\",\n    \"center\": \"Center\"\n  },\n  \"layout_option_desc\": {\n    \"loose\": \"Loose layout, full screen, adaptive to user resolution\",\n    \"center\": \"Center layout, compact content\"\n  },\n  \"order\": {\n    \"status\": {\n      \"all\": \"All Orders\",\n      \"not_confirm\": \"Pending Confirmation\",\n      \"pending\": \"Pending Payment\",\n      \"paid\": \"Paid\",\n      \"expired\": \"Expired\",\n      \"cancelled\": \"Cancelled\"\n    },\n    \"confirm_tip\": \"Are you sure you want to confirm this order?\"\n  },\n  \"payment\": {\n    \"type\": {\n      \"all\": \"All Payment Methods\",\n      \"alipay\": \"Alipay\",\n      \"wechat\": \"WeChat\",\n      \"manual\": \"Manual Transfer\",\n      \"paypal\": \"PayPal\"\n    },\n    \"manual\": {\n      \"qrcode\": \"QR Code\",\n      \"qrcode_placeholder\": \"Please upload the QR code\",\n      \"desc\": \"Description\",\n      \"desc_placeholder\": \"Please enter the description, such as: Please use WeChat/Alipay to scan and pay the above amount\"\n    },\n    \"wechat_app_id\": \"AppID\",\n    \"wechat_app_id_placeholder\": \"Please enter AppID\",\n    \"wechat_mch_id\": \"WeChat Pay Merchant ID\",\n    \"wechat_mch_id_placeholder\": \"Please enter WeChat Pay Merchant ID\",\n    \"wechat_api_secret\": \"APIv3 Key\",\n    \"wechat_api_secret_placeholder\": \"Please enter APIv3 Key\",\n    \"wechat_app_id_tip\": \"Login to WeChat Pay Merchant Platform → Click 'Account Center' → Get 'WeChat Pay Merchant ID' in 'Merchant Information'\",\n    \"wechat_mch_id_tip\": \"Login to WeChat Public Platform → Settings → Public Account Settings → Basic Configuration → View 'Developer ID (AppID)'\",\n    \"wechat_api_secret_tip\": \"Login to WeChat Pay Merchant Platform → Account Center → API Security → Set 'API Key'\",\n    \"wechat_serial_no\": \"Certificate Serial Number\",\n    \"wechat_serial_no_placeholder\": \"Please enter Certificate Serial Number\",\n    \"wechat_cert\": \"Certificate File\",\n    \"wechat_cert_placeholder\": \"Please upload Certificate File\",\n    \"wechat_private_key\": \"Certificate Key\",\n    \"wechat_private_key_placeholder\": \"Please upload Certificate Key\",\n    \"manual_tip\": \"If it's inconvenient to provide payment channels including Alipay and WeChat, you can also leave a QR code, and manually confirm orders after users make payments.\",\n    \"manual_pay_qrcode\": \"Payment QR Code\",\n    \"manual_pay_qrcode_placeholder\": \"Please upload payment QR code\",\n    \"alipay_app_id\": \"Alipay AppID\",\n    \"alipay_app_id_placeholder\": \"Please enter Alipay AppID\",\n    \"alipay_mch_id\": \"Application Private Key\",\n    \"alipay_mch_id_placeholder\": \"Please enter Application Private Key\",\n    \"alipay_api_secret\": \"Alipay Public Key\",\n    \"alipay_api_secret_placeholder\": \"Please enter Alipay Public Key\",\n    \"alipay_guide_html\": \"1、Login to Alipay Open Platform<a class='text-[#5A6D9E]' href='https://open.alipay.com/module/webApp/' target='_blank'>https://open.alipay.com/module/webApp/</a>Create \\\"Web/Mobile Application\\\" to get APPID; \\n2、Click to enter the application, configure according to the official guide of Alipay in \\\"Development Settings\\\" \\\"Signature Method\\\" to get application private key and Alipay public key; \\n3、In \\\"Development Settings\\\" \\\"Authorization Callback Address\\\", fill in: <span  style=\\\"color: #FA5151;\\\">{callback_url}</span><span class='copy-hook'></span>\\n4、In [API Management], access the ability of \\\"Computer Website Payment\\\" according to the official guide of Alipay to configure or open;\"\n  },\n  \"template_style\": {\n    \"website_style\": \"Website Style\",\n    \"website\": \"Website Style\",\n    \"software\": \"Software Style\",\n    \"theme_color\": \"Theme Color\",\n    \"theme_color_v2\": \"Theme Color\",\n    \"text_color\": \"Text Color\",\n    \"nav_bg_color\": \"Nav Background\",\n    \"nav_text_color\": \"Nav Text\",\n    \"page_footer_bg_color\": \"Page Footer Background\",\n    \"page_footer_text_color\": \"Page Footer Text\"\n  },\n  \"banner\": {\n    \"upload_image\": \"Upload Image\",\n    \"upload_image_tip\": \"Upload 1920×380 pixel images for the best effect, image size less than 10 MB\",\n    \"interval\": \"Image Carousel Interval\",\n    \"interval_tip\": \"When there are multiple images in the Banner area, set the image scrolling time interval\"\n  },\n  \"wechat_payment\": {\n    \"mch_guide\": {\n      \"title\": \"How to get WeChat Pay Merchant ID\",\n      \"step_1\": \"1、Login to WeChat Pay Merchant Platform（{url}）\",\n      \"step_2\": \"2、WeChat Pay Merchant ID can be viewed in the【Account Center - Merchant Information】of WeChat Pay Merchant Platform.\",\n      \"step_3\": \"Note: If you are not a WeChat Pay merchant, you can click to become a merchant on the login page, register and apply for a WeChat Pay Merchant ID, fill in the enterprise related information such as营业执照、对公账户等, submit for review. After approval, you can get the WeChat Pay Merchant ID.\"\n    },\n    \"app_guide\": {\n      \"title\": \"How to get APPID\",\n      \"step_1\": \"1、In the【Product Center - AppID Account Management】of WeChat Pay Merchant Platform, click “Associate APPID”, fill in the previously obtained public account or mini program APPID and confirm the association. Login to WeChat Open Platform, agree to the association in the message center.\",\n      \"step_2\": \"2、Copy the associated APPID and fill it into the form. \\n\\nNote: If you have not associated any public account, you need to associate a public account first. Operation method: click to associate AppID\",\n      \"step_3\": \"Then login to WeChat Public Platform（{url}）, enter the public account background, get the developer ID（AppID） in the【Settings and Development - Basic Configuration】. If it is a mini program, you can get the mini program APPID in the mini program management background of WeChat Public Platform.\"\n    },\n    \"api_guide\": {\n      \"title\": \"How to get APIv3 Key\",\n      \"step_1\": \"1、Login to WeChat Pay Merchant Platform, enter【Account Center - Account Settings - API Security】, click【APIv3 Key】\",\n      \"step_2\": \"2、In the pop-up window, click “I have communicated”, input a 32-bit random key (containing numbers and uppercase and lowercase letters), click Get SMS Verification Code, input the verification code and click “Confirm”, then set successfully.\"\n    },\n    \"cert_guide\": {\n      \"title\": \"How to get Certificate\",\n      \"step_1\": \"1、Login to WeChat Pay Merchant Platform, enter【Account Center - Account Settings - API Security】, click【APIv3 Key】\",\n      \"step_2\": \"2、In the pop-up window, click “I have communicated”, input a 32-bit random key (containing numbers and uppercase and lowercase letters), click Get SMS Verification Code, input the verification code and click “Confirm”, then set successfully.\"\n    },\n    \"serial_guide\": {\n      \"title\": \"How to get Certificate Serial Number\",\n      \"step_1\": \"1、Login to WeChat Pay Merchant Platform, enter【Account Center - Account Settings - API Security】, click【APIv3 Key】\"\n    }\n  },\n  \"alipay_payment\": {\n    \"app_guide\": {\n      \"title\": \"How to get APPID\",\n      \"step_1\": \"1、Login to Alipay Open Platform<a class='text-[#5A6D9E]' href='https://open.alipay.com/module/webApp/' target='_blank'>https://open.alipay.com/module/webApp/</a>Create \\\"Web/Mobile Application\\\" to get APPID; \\n2、Click to enter the application, configure according to the official guide of Alipay in \\\"Development Settings\\\" \\\"Signature Method\\\" to get application private key and Alipay public key; \\n3、In \\\"Development Settings\\\" \\\"Authorization Callback Address\\\", fill in: <span class=\\\"text-[#586D9A]\\\">{callback_url}</span><span class='copy-hook'></span>\\n4、In [API Management], access the ability of \\\"Computer Website Payment\\\" according to the official guide of Alipay to configure or open;\"\n    }\n  },\n  \"platform_auth\": {\n    \"coze_cn\": {\n      \"tip\": \"Go to Coze API - Authorization - Create New Application（{url}） \\nStep 1: Create an OAuth application（\\\"Client Type\\\" is \\\"Web Backend Application\\\"）\\nStep 2: Fill in the \\\"Redirect URL\\\" as: {redirect_url} \\nStep 3: Fill in {client_id} and {client_secret} in the form below. All permissions should be selected.\",\n      \"tip_1\": \"Ensure you click 'Save' on the Coze side before clicking 'Confirm'\"\n    },\n    \"app_builder\": {\n      \"tip\": \"Go to Baidu Cloud - App Builder（{url}） \\nStep 1: Login and click \\\"API Key\\\" on the left navigation bar \\nStep 2: Click \\\"Create API Key\\\"（\\\"Service\\\" select \\\"AppBuilder\\\", configure application resources as needed）\\nStep 3: Complete creation, copy the API Key and fill it in the form below.\"\n    },\n    \"53ai\": {\n      \"tip\": \"Go to 53AI（{url}） \\nStep 1: Login and click \\\"Settings\\\" on the left navigation bar \\nStep 2: Click \\\"Generate Secret Key\\\" under \\\"Enterprise Information\\\" \\nStep 3: After generation, copy the Sercet Key and fill it in the form below.\"\n    }\n  },\n  \"agent_app\": {\n    \"prompt\": \"Prompt\",\n    \"prompt_v2\": \"Create via Prompt\",\n    \"53ai_agent\": \"53AI\",\n    \"53ai_workflow\": \"53AI\",\n    \"coze_agent_cn\": \"Coze\",\n    \"coze_workflow_cn\": \"Coze\",\n    \"coze_agent\": \"Coze Agent\",\n    \"coze_workflow\": \"Coze Workflow\",\n    \"dify_agent\": \"Dify\",\n    \"dify_workflow\": \"Dify\",\n    \"app_builder\": \"Qianfan Appbuilder\",\n    \"yuanqi\": \"Tencent Yuanqi\",\n    \"bailian\": \"Alibaba Bailian\",\n    \"volcengine\": \"Volcengine\",\n    \"fastgpt_agent\": \"FastGPT\",\n    \"fastgpt_workflow\": \"FastGPT\",\n    \"maxkb_agent\": \"MaxKB\",\n    \"n8n_workflow\": \"n8n\",\n    \"tencent\": \"Tencent Cloud\",\n    \"check_agent_config_tip\": \"Please check if the agent configuration is correct\"\n  },\n  \"provider_platform\": {\n    \"prompt\": \"Prompt\",\n    \"openai\": \"OpenAI\",\n    \"deepseek\": \"DeepSeek\",\n    \"coze\": \"Coze\",\n    \"siliconflow\": \"SiliconFlow\",\n    \"azure\": \"Azure OpenAI\",\n    \"azure_open_ai\": \"Azure OpenAI\",\n    \"dark_moon\": \"Dark Moon\",\n    \"zhipu\": \"Zhipu\",\n    \"tongyi\": \"Tongyi\",\n    \"coze_cn\": \"Coze\",\n    \"app_builder\": \"BaiduQianfan Appbuilder\",\n    \"dify\": \"Dify\",\n    \"53ai\": \"53AI\",\n    \"bailian\": \"Alibaba Bailian\",\n    \"volcengine\": \"Volcengine\",\n    \"yuanqi\": \"Tencent Yuanqi\",\n    \"fastgpt\": \"FastGPT\",\n    \"maxkb\": \"MaxKB\",\n    \"n8n\": \"n8n\",\n    \"qianfan\": \"Qianfan\",\n    \"tencent\": \"Tencent Cloud Intelligent Agent Development Platform\"\n  },\n  \"register_user\": {\n    \"title\": \"Register User\"\n  },\n  \"internal_user\": {\n    \"title\": \"Internal User\",\n    \"alias\": \"Contact\",\n    \"account\": {\n      \"title\": \"Account\",\n      \"search_placeholder\": \"Member Name/Phone Number/Email\",\n      \"name\": \"Name\",\n      \"nickname\": \"Nickname\",\n      \"mobile\": \"Mobile\",\n      \"group\": \"Group\",\n      \"department\": \"Department\",\n      \"status\": \"Status\",\n      \"add\": \"Add Account\",\n      \"name_placeholder\": \"Please enter name\",\n      \"name_disabled_tip\": \"Name is from third-party synchronization, cannot be modified\",\n      \"nickname_placeholder\": \"Please enter nickname\",\n      \"mobile_placeholder\": \"Please enter mobile\",\n      \"mobile_disabled_tip\": \"Note: The mobile number entered must be the same as the member's login mobile number\",\n      \"password_placeholder\": \"Please set initial password\",\n      \"department_placeholder\": \"Please select department\",\n      \"same_member_exists_tip\": \"Member mobile already exists\",\n      \"same_mobile_exists_tip\": \"Same as the {index}th member mobile\",\n      \"register_to_internal_confirm\": \"The phone number ({mobile}) is already a registered user, are you sure to upgrade to an internal user?\",\n      \"edit_member\": \"Edit Member\"\n    },\n    \"organization\": {\n      \"title\": \"Organization\",\n      \"all_search_placeholder\": \"Member/Department\",\n      \"user_search_placeholder\": \"Member\",\n      \"department_search_placeholder\": \"Department\"\n    },\n    \"group\": {\n      \"title\": \"Group\",\n      \"search_placeholder\": \"Search Group\",\n      \"search_placeholder_v2\": \"Search Group Name\",\n      \"create\": \"Create Group\",\n      \"member\": \"Member\",\n      \"usable\": \"Usable\",\n      \"remove_user_confirm\": \"Are you sure you want to remove this member?\",\n      \"remove_agent_confirm\": \"Are you sure you want to remove this agent?\",\n      \"create_tip\": \"Please create a group first\"\n    },\n    \"status\": {\n      \"all\": \"All Members\",\n      \"undefined\": \"Not Joined\",\n      \"enabled\": \"Joined\",\n      \"disabled\": \"Disabled\"\n    },\n    \"action\": {\n      \"disabled\": \"Disable\",\n      \"disabled_success\": \"Disabled\",\n      \"enable\": \"Enable\",\n      \"enable_success\": \"Enabled\",\n      \"disabled_account\": \"Disabled Account\",\n      \"enable_account\": \"Enable Account\"\n    },\n    \"department\": {\n      \"add\": \"Add Department\",\n      \"add_children\": \"Add Sub Department\",\n      \"update_name\": \"Update Name\",\n      \"move_up\": \"Move Up\",\n      \"move_down\": \"Move Down\",\n      \"delete\": \"Delete\",\n      \"delete_confirm\": \"Are you sure you want to delete this department?\",\n      \"create\": \"Create Department\",\n      \"edit\": \"Edit Department\",\n      \"name\": \"Department Name\",\n      \"name_placeholder\": \"Please enter department name\",\n      \"member_total_count\": \"（{total} members）\"\n    },\n    \"scope\": {\n      \"title\": \"Visible Range\",\n      \"selected_title\": \"Selected Items\"\n    }\n  },\n  \"admin_user\": {\n    \"title\": \"Admin\",\n    \"search_placeholder\": \"Please enter admin account\",\n    \"delete_confirm\": \"Are you sure you want to delete this admin?\"\n  },\n  \"role\": {\n    \"title\": \"Role\",\n    \"normal\": \"Normal\",\n    \"admin\": \"Admin\",\n    \"creator\": \"Creator\"\n  },\n  \"prompt\": {\n    \"title\": \"Prompt\",\n    \"search_placeholder\": \"Search Prompt\",\n    \"delete_confirm\": \"Are you sure you want to delete this prompt?\",\n    \"config\": \"Prompt Config\",\n    \"guide\": \"Usage Guide\",\n    \"content\": \"Content\"\n  },\n  \"navigation\": {\n    \"title\": \"Navigation\",\n    \"search_placeholder\": \"Search Navigation\",\n    \"delete_confirm\": \"Are you sure you want to delete this navigation?\",\n    \"type\": {\n      \"system\": \"System Built-in\",\n      \"external\": \"External Link\",\n      \"custom\": \"Custom Page\"\n    },\n    \"target\": {\n      \"self\": \"Current Window\",\n      \"blank\": \"New Window\"\n    },\n    \"web_setting\": \"Page Editor\"\n  },\n  \"sso\": {\n    \"title\": \"Single Sign-On\",\n    \"sync_corp\": \"Sync Enterprise\",\n    \"wecom\": {\n      \"title\": \"WeCom\",\n      \"abbr_title\": \"WeCom\",\n      \"access_title\": \"Access WeCom\",\n      \"access_desc\": \"WeCom administrator scan and install access\",\n      \"sync_desc\": \"After completing the WeCom credential authorization binding, you can bind the WeCom account source to import the WeCom member directory\",\n      \"sync_tip\": \"Enterprise WeCom organization structure has been synchronized\"\n    },\n    \"dingtalk\": {\n      \"title\": \"DingTalk\",\n      \"abbr_title\": \"DingTalk\",\n      \"access_title\": \"Access DingTalk\",\n      \"access_desc\": \"Create a enterprise internal application to achieve access\",\n      \"sync_desc\": \"After completing the DingTalk authorization binding, you can bind the DingTalk account source to import the DingTalk member directory\"\n    },\n    \"ad_ldap\": {\n      \"title\": \"AD/LDAP\",\n      \"abbr_title\": \"AD/LDAP\",\n      \"access_title\": \"Access AD/LDAP\",\n      \"access_desc\": \"Bind AD/LDAP, you can import AD/LDAP member directory, realize AD/LDAP account single sign-on 53Hub\"\n    },\n    \"api_access\": {\n      \"title\": \"API Access\",\n      \"access_title\": \"API Access\",\n      \"access_desc\": \"Single sign-on is achieved through API authentication. Users can log in directly by clicking the link without manually entering their account and password\"\n    },\n    \"feishu\": {\n      \"title\": \"Feishu\",\n      \"abbr_title\": \"Feishu\",\n      \"access_title\": \"Access Feishu\",\n      \"access_desc\": \"Enterprise administrator scan and install access\",\n      \"sync_desc\": \"After completing the Feishu authorization binding, you can bind the Feishu account source to import the Feishu member directory\"\n    },\n    \"auth_access\": \"Auth Access\",\n    \"organization_sync\": \"Organization Sync\",\n    \"access_title\": \"Access {title}\",\n    \"access_desc\": \"Need {title} administrator scan and install\",\n    \"access_desc_v2\": \"Already have {title} can directly scan and authorize, not registered {title} please register first\",\n    \"goto_access\": \"Go to {title} authorization\",\n    \"goto_register\": \"Go to register {title}\",\n    \"sync_confirm\": \"After synchronization, the {title} organization will cover the current organization and cannot be recovered\",\n    \"sync_cancel\": \"Cancel synchronization will restore to the initial organization state\",\n    \"sync_cancel_tip\": \"Cancel synchronization\",\n    \"authorized_enterprise\": \"Authorized Enterprise\",\n    \"unauthorized\": \"Unauthorized\",\n    \"bind_member\": \"Bind Member\",\n    \"unbind_member\": \"Unbind Member\",\n    \"bind_member_tip\": \"Are you sure you want to bind this member to the current user?\",\n    \"unbind_member_tip\": \"Are you sure you want to unbind this member?\",\n    \"auth_completed_tip\": \"Confirm you have completed the application binding, confirm to refresh the page\",\n    \"access_setting\": \"Access Settings\",\n    \"access_method\": \"Access Method: \",\n    \"method_tip1\": \"1. Single sign-on is achieved by completing user identity authentication through a single jump\",\n    \"method_tip2\": \"2. The link format is: \",\n    \"method_tip3\": \"3. Parameter description: \",\n    \"username_tip\": \"a mobile phone or an email address\",\n    \"timestamp_tip\": \"Current timestamp (This link will expire in 10 minutes)\",\n    \"sign_tip\": \"It is an md5 value of Sercet concatenated from timestamp={timestamp}&username={username}\",\n    \"enable_encryption\": \"Enable Encryption: \",\n    \"API_documentation\": \"API Documentation\",\n    \"save_success\": \"Saved Successfully\"\n  },\n  \"action_visit\": \"Visit\",\n  \"action_test\": \"Test\",\n  \"action_add\": \"Add\",\n  \"action_add_success\": \"Added\",\n  \"action_create\": \"Create\",\n  \"action_edit\": \"Edit\",\n  \"action_save\": \"Save\",\n  \"action_save_success\": \"Saved\",\n  \"action_save_failed\": \"Save Failed\",\n  \"action_test_success\": \"Available\",\n  \"action_test_failed\": \"Unavailable\",\n  \"action_delete\": \"Delete\",\n  \"action_delete_tip\": \"Delete Prompt\",\n  \"action_delete_confirm\": \"Are you sure you want to delete this data?\",\n  \"action_delete_success\": \"Deleted\",\n  \"action_remove\": \"Remove\",\n  \"action_remove_success\": \"Removed Successfully\",\n  \"action_confirm\": \"Confirm\",\n  \"action_confirm_success\": \"Confirmed Successfully\",\n  \"action_cancel\": \"Cancel\",\n  \"action_select\": \"Select\",\n  \"action_sort\": \"Sort\",\n  \"action_sort_success\": \"Sort Order Updated\",\n  \"action_setting\": \"Settings\",\n  \"action_enable\": \"Enable\",\n  \"action_enable_success\": \"Enabled Successfully\",\n  \"action_disable\": \"Disable\",\n  \"action_disable_success\": \"Disabled Successfully\",\n  \"action_upload\": \"Upload\",\n  \"action_upgrade\": \"Upgrade\",\n  \"action_renew\": \"Renew\",\n  \"action_renew_v2\": \"Renew\",\n  \"action_modify\": \"Modify\",\n  \"action_view_example\": \"View Example\",\n  \"action_authorize\": \"Authorize\",\n  \"action_authorize_success\": \"Authorized Successfully\",\n  \"action_copy\": \"Copy\",\n  \"action_copy_success\": \"Copied Successfully\",\n  \"action_replace\": \"Replace\",\n  \"action_clear\": \"Clear\",\n  \"action_search\": \"Search\",\n  \"action_close\": \"Close\",\n  \"action_view_more\": \"View More\",\n  \"action_open\": \"Open\",\n  \"action_send\": \"Send\",\n  \"action_send_success\": \"Sent Successfully\",\n  \"action_login\": \"Login\",\n  \"action_login_success\": \"Login Successfully\",\n  \"action_register\": \"Register\",\n  \"action_register_and_login\": \"Register and Login\",\n  \"action_register_success\": \"Register Successfully\",\n  \"action_reset\": \"Reset\",\n  \"action_preview\": \"Preview\",\n  \"action_amplify\": \"Amplify\",\n  \"action_shrink\": \"Shrink\",\n  \"action_stop_generation\": \"Stop Generation\",\n  \"action_restart_generation\": \"Restart Generation\",\n  \"action_update\": \"Update\",\n  \"action_update_success\": \"Updated Successfully\",\n  \"action_next_step\": \"Next Step\",\n  \"action_exit\": \"Logout\",\n  \"action_exit_success\": \"Logged Out Successfully\",\n  \"action_exit_confirm\": \"Are you sure you want to logout?\",\n  \"action_select_file\": \"+ Select File\",\n  \"action_manage\": \"Manage\",\n  \"action_go\": \"Go\",\n  \"action_rename\": \"Rename\",\n  \"action_bind\": \"Bind\",\n  \"action_unbind\": \"Unbind\",\n  \"action_bind_success\": \"Bind Successfully\",\n  \"action_unbind_success\": \"Unbind Successfully\",\n  \"action_confirm_payment\": \"Confirm Payment\",\n  \"action_confirm_payment_success\": \"Confirmed Successfully\",\n  \"completion_completed\": \"Deep Thinking Completed\",\n  \"completion_thinking\": \"Deep Thinking...\",\n  \"form_input_placeholder\": \"Please enter\",\n  \"form_input_placeholder_max_length\": \"Maximum input {max} characters\",\n  \"form_select_placeholder\": \"Please select\",\n  \"form_upload_placeholder\": \"Please upload\",\n  \"form_link_validator\": \"Please enter a valid link address\",\n  \"form_account_validator\": \"Account cannot contain spaces\",\n  \"form_mobile_validator\": \"Please enter a valid mobile number\",\n  \"form_email_validator\": \"Please enter a valid email address\",\n  \"form_mobile_or_email_validator\": \"Please enter a valid mobile number or email address\",\n  \"form_password_validator\": \"Password cannot contain Chinese or space symbols\",\n  \"form_url_validator\": \"Please enter a valid URL address\",\n  \"form_path_validator\": \"Please enter a valid path address (e.g. /index)\",\n  \"form_path_same_tip\": \"The same path address already exists, please re-enter\",\n  \"form_image_validator\": \"Please upload a valid image\",\n  \"form_variable_validator\": \"Variable names can only contain letters, numbers, and underscores, and cannot start with a number\",\n  \"form_port_validator\": \"Port must be a number\",\n  \"form_account_exit\": \"This shared account already exists\",\n  \"form_delete_confirm\": \"Are you sure you want to delete this shared account?\",\n  \"form_hide_logo\": \"Hide Technical Support Logo\",\n  \"enterprise_edition\": \"Enterprise Edition\",\n  \"image_cropper\": \"Image Cropper\",\n  \"reupload\": \"Reupload\",\n  \"wechat\": \"WeChat\",\n  \"alipay\": \"Alipay\",\n  \"alipay_pay\": \"Alipay Payment\",\n  \"enabled\": \"Enabled\",\n  \"disabled\": \"Disabled\",\n  \"setting\": \"Configured\",\n  \"not_setting\": \"Not Configured\",\n  \"updated_at\": \"Updated at\",\n  \"yearly\": \"Year\",\n  \"monthly\": \"Month\",\n  \"expired_time\": \"Expiration Time\",\n  \"basic_info\": \"Basic Information\",\n  \"connected\": \"Connected\",\n  \"connecting\": \"Connecting\",\n  \"not_connected\": \"Not Connected\",\n  \"connecting_agent_total\": \"Connected {total} agents\",\n  \"authorized_at\": \"Authorized at\",\n  \"no_data\": \"No Data\",\n  \"effective\": \"Effective\",\n  \"https_enabled\": \"HTTPS Enabled\",\n  \"group\": \"Group\",\n  \"all\": \"All\",\n  \"all_group\": \"All Groups\",\n  \"user\": \"User\",\n  \"mobile\": \"Mobile\",\n  \"verification_code\": \"Verification Code\",\n  \"verification_code_placeholder\": \"Please enter verification code\",\n  \"get_verification_code\": \"Get Verification Code\",\n  \"shared_account\": \"Shared Account\",\n  \"subscription\": {\n    \"title\": \"Subscription\",\n    \"end_at\": \"Subscription End At\",\n    \"transfer_title\": \"Subscription Delete\",\n    \"transfer_desc\": \"Delete the following subscription service and migrate the subscription users to the new subscription service\",\n    \"transfer_to\": \"Migrate To\"\n  },\n  \"register_time\": \"Register Time\",\n  \"created_time\": \"Created Time\",\n  \"add_time\": \"Add Time\",\n  \"operation\": \"Operation\",\n  \"language\": \"Language\",\n  \"website_domain\": \"Website Domain\",\n  \"website_home\": \"Website Home\",\n  \"create_time\": \"Create Time\",\n  \"update_time\": \"Update Time\",\n  \"service_expired_time\": \"Service Expired Time\",\n  \"configuration_completion\": \"Config Completion\",\n  \"description\": \"Description\",\n  \"pictorial_image\": \"Pictorial Image\",\n  \"type\": \"Type\",\n  \"all_type\": \"All Type\",\n  \"usage_record\": \"Usage Record\",\n  \"usage_guide\": \"Usage Guide\",\n  \"dialogue_record\": \"Dialogue Record\",\n  \"user_info\": \"User Info\",\n  \"avatar\": \"Avatar\",\n  \"remark\": \"Remark\",\n  \"login_password\": \"Login Password\",\n  \"bind_account\": \"Bind Account\",\n  \"mobile_v2\": \"Mobile\",\n  \"email\": \"Email\",\n  \"open_id\": \"OpenID\",\n  \"google_account\": \"Google Account\",\n  \"not_bound\": \"Not Bound\",\n  \"all_order\": \"All Orders\",\n  \"all_order_payment\": \"All Payment\",\n  \"order_id\": \"Order ID\",\n  \"order_no\": \"Order No\",\n  \"order_subscription\": \"Subscription\",\n  \"order_amount\": \"Amount\",\n  \"order_status\": \"Status\",\n  \"order_status_pending\": \"Pending\",\n  \"order_status_paid\": \"Paid\",\n  \"order_status_refunded\": \"Refunded\",\n  \"order_status_timeout\": \"Timeout\",\n  \"order_status_expired\": \"Expired\",\n  \"order_create_time\": \"Create Time\",\n  \"order_payment_type\": \"Type\",\n  \"order_payment_type_wechat\": \"WeChat\",\n  \"order_payment_type_alipay\": \"Alipay\",\n  \"order_payment_type_manual\": \"Manual Transfer\",\n  \"order_subscription_version\": \"Subscription Version\",\n  \"order_subscription_duration\": \"Subscription Duration\",\n  \"table_footer_text\": \"Total {total} items\",\n  \"app_config\": \"App Config\",\n  \"market_insight\": \"Market Insight\",\n  \"opportunity_capture\": \"Opportunity Capture\",\n  \"product_mastery\": \"Product Mastery\",\n  \"media_operation\": \"Media Operation\",\n  \"usage_case\": \"Usage Case\",\n  \"usage_case_desc\": \"Add usage cases to your application to make it easier for users to get started\",\n  \"input\": \"Input\",\n  \"output\": \"Output\",\n  \"output_variable\": \"Output Variables\",\n  \"usage_scene\": \"Usage Scene\",\n  \"usage_scene_desc\": \"Add more usage scenes to your application to make it easier for users to get started\",\n  \"image\": \"Image\",\n  \"database_management\": \"Database Management\",\n  \"database_management_desc\": \"Database administrators and developers can use this tool to quickly generate SQL statements, query, update, and manage databases, improving work efficiency.\",\n  \"scene\": \"Scene\",\n  \"function_update\": \"Function Update\",\n  \"function_update_desc\": \"Product Feature Update\",\n  \"notification_center\": \"Notification Center\",\n  \"access_model\": \"Access Model\",\n  \"name\": \"Name\",\n  \"role_instruction\": \"Role Instruction\",\n  \"role_instruction_desc\": \"Used to make a series of instructions and constraints for the AI's reply\",\n  \"optimize\": \"Optimize\",\n  \"optimize_tip\": \"Role Instruction Optimization\",\n  \"generate_tip\": \"Role Instruction Generation\",\n  \"icon\": \"Icon\",\n  \"website_name\": \"Web Name\",\n  \"group_management\": \"Group Management\",\n  \"display_order\": \"Display Order\",\n  \"permission_setting\": \"Permission Setting\",\n  \"expand_setting\": \"Expand Setting\",\n  \"base_setting\": \"Welcome\",\n  \"over_response\": \"Over Response\",\n  \"visible_range\": \"Visible Range\",\n  \"dialogue_frequency\": \"Dialogue Frequency\",\n  \"dialogue_total\": \"Dialogue Total\",\n  \"limit\": \"Limit\",\n  \"second\": \"Second\",\n  \"send\": \"Send\",\n  \"unit_messages\": \"Messages\",\n  \"unit_messages_v2\": \"piece\",\n  \"over_message\": \"Over Message\",\n  \"limit_every_dialogue\": \"Limit total dialogues for each user\",\n  \"select_agent\": \"Select Agent\",\n  \"debug_preview\": \"Debug Preview\",\n  \"restart\": \"Restart\",\n  \"start_running\": \"Start Running\",\n  \"sync_output_variable\": \"Synchronized Output Variable\",\n  \"not_found_url\": \"URL not found, please check if the agent is set correctly\",\n  \"message_input_placeholder\": \"Send a message or enter your question...\",\n  \"workspace\": \"Workspace\",\n  \"edit_agent\": \"Edit Agent\",\n  \"coze_workflow_link\": \"Coze workflow \\\"edit state\\\" link\",\n  \"model_name\": \"Model Name\",\n  \"model_name_placeholder\": \"Please enter model name\",\n  \"prompt_placeholder\": \"Please enter prompt\",\n  \"copyright_desc\": \"Copyright © 2014-{year} 53AI. All rights reserved.\",\n  \"no_permission_tip\": \"You do not have permission to use this feature, please contact the administrator to enable it\",\n  \"not_found_tip\": \"Page not found or you do not have permission to use this feature, please contact the administrator to enable it\",\n  \"go_home\": \"Go to Homepage\",\n  \"register\": \"Register\",\n  \"username\": \"Username\",\n  \"account\": \"Account\",\n  \"password\": \"Password\",\n  \"group_min_one\": \"At least one group\",\n  \"group_delete_confirm\": \"Are you sure you want to delete this group?\",\n  \"group_not_empty\": \"Group cannot be empty\",\n  \"agent_delete_confirm\": \"Are you sure you want to delete this agent?\",\n  \"feature_coming_soon\": \"Feature coming soon, please wait\",\n  \"silicon_flow\": \"Silicon Flow\",\n  \"deep_seek\": \"Deep Seek\",\n  \"openai\": \"OpenAI\",\n  \"azure_open_ai\": \"Azure OpenAI\",\n  \"dark_moon\": \"Dark Moon\",\n  \"chat_glm\": \"ChatGLM\",\n  \"tongyi\": \"TongyiQianWen\",\n  \"coze_cn\": \"Coze.cn\",\n  \"dify\": \"Dify\",\n  \"app_builder\": \"Qianfan AppBuilder\",\n  \"coze\": \"Coze\",\n  \"53ai\": \"53AI\",\n  \"fast_gpt\": \"FastGPT\",\n  \"yuanqi\": \"Tencent Yuanqi\",\n  \"bailian\": \"Alibaba Bailian\",\n  \"volcengine\": \"Volcengine\",\n  \"sort\": \"Sort\",\n  \"official_website\": \"Home\",\n  \"apply_open\": \"Apply Open\",\n  \"user_register\": \"User Register\",\n  \"account_register\": \"Register Account\",\n  \"or\": \"Or\",\n  \"apply_success\": \"Apply Success\",\n  \"apply_success_desc\": \"Please wait for the administrator to review, and you can use it after it is approved\",\n  \"agent_not_found\": \"Please save and create an intelligent agent first\",\n  \"agent_channel_type_not_found\": \"Channel type not found, please save and create an intelligent agent first\",\n  \"permanent_effect\": \"Permanent\",\n  \"empty_to_not_change\": \"Leave blank to not change\",\n  \"api_host\": \"Backend Service API\",\n  \"ap_host_fastgpt\": \"API Root Address\",\n  \"api_screet\": \"API Secret Key\",\n  \"api_botid\": \"Bot ID\",\n  \"api_botid_en\": \"Bot ID\",\n  \"api_appid\": \"App ID\",\n  \"api_key\": \"API Key\",\n  \"agent_type\": \"Intelligent Agent Type\",\n  \"agent_type_chat\": \"Chat Application\",\n  \"agent_type_chat_v2\": \"Chat Type\",\n  \"agent_type_completion\": \"Workflow Application\",\n  \"agent_type_completion_v2\": \"Application Type\",\n  \"agent_type_workflow\": \"Workflow Orchestration Application\",\n  \"app_type\": \"Application Type\",\n  \"how_get\": \"How to get\",\n  \"53ai_api_endpoint\": \"API Endpoint\",\n  \"53ai_api_screet\": \"Secret Key\",\n  \"upload_pem_file_tip\": \"Please upload pem file\",\n  \"usage_range\": \"Usage Range\",\n  \"internal_member_group\": \"Internal Member Grouping\",\n  \"dify_agent_get_tip\": \"Go to Dify and login ({url}) \\nStep 1: Select the intelligent agent to be accessed, click \\\"Access API\\\" \\nStep 2: Copy \\\"API Server\\\" and \\\"API Secret Key\\\" in the upper right corner, and fill in the form below.\",\n  \"53ai_agent_get_tip\": \"Go to 53AI and login ({url}) \\n Step 1: Select the intelligent agent to be accessed, click \\\"Access API\\\" \\n Step 2: Copy \\\"API Endpoint\\\" 、 \\\"Bot-Id\\\" 和 \\\"SECRET_KEY\\\", and fill in the form below.\",\n  \"bailian_agent_get_tip\": \"Go to Alibaba Bailian and login ({ url })\\n Step 1: Login Alibaba Bailian, select an application (or create one), click \\\"Publish\\\", get API-KEY, copy it below\\n Step 2: Find the assistant/ part in the current URL of Alibaba Bailian, copy and paste it below\\n Help: How to get APP ID and Workspace ID ({ help_url })\",\n  \"volcengine_agent_get_tip\": \"Go to Volcengine and login ({ url })\\n Step 1: Login Volcengine, click \\\"My App\\\" in the system management \\n Step 2: Click \\\"Create API Key\\\", and fill in the form below after completion.\",\n  \"yuanqi_agent_get_tip\": \"Go to Tencent Yuanqi and login ({ url })\\n Step 1: Login Tencent Yuanqi, go to my creation. \\n Step 2: Click the more button in the lower right corner of the intelligent agent card, click call API (new intelligent agent needs to wait for approval to have). \\n Step 3: Click copy intelligent agent ID, paste it below. \\n Step 4: Click copy Token, paste it below.\",\n  \"fastgpt_agent_get_tip\": \"Go to FastGPT and login ({ url })\\n Step 1: Login FastGPT, click \\\"Workspace\\\" in the system management \\n Step 2: Click \\\"API Key\\\" in the system management \\n Step 3: Click \\\"Create API Key\\\", and fill in the form below after completion.\",\n  \"maxkb_agent_get_tip\": \"Go to MaxKB and login ({ url })\\n Step 1: Download MaxKB client; \\n Step 2: Click the application to be accessed in \\\"Application\\\"; \\n Step 3: Copy Base URL in \\\"API Access Credentials\\\", create and copy API Key, fill in the form below.\",\n  \"tip\": \"Tip\",\n  \"auth_required\": \"{provider_name} is not authorized, please go to {provider_name} to authorize\",\n  \"intelligent_agent_platform\": \"Intelligent Agent Platform\",\n  \"cloud_computing_platform\": \"Cloud Computing Platform\",\n  \"local_config_limited_tip\": \"Configuration Limited Tip\",\n  \"local_config_limited_desc\": \"Due to the current system access being an internal network address ({url}), it is not possible to add/configure Coze intelligent agent, WeChat payment, and Alipay payment, which needs to be deployed to an address that can be accessed from the outside to configure.\",\n  \"know_it\": \"I know\",\n  \"selected_tip\": \"Selected {total} items\",\n  \"support_image\": \"Support Image\",\n  \"debugger_config_change_confirm\": \"Modifying the settings will reset the debug area, and you need to save and restart debugging\",\n  \"save_and_restart\": \"Save and Restart\",\n  \"title\": \"Title\",\n  \"year\": \"Year\",\n  \"month\": \"Month\",\n  \"agent_file_parse\": \"Document Parsing\",\n  \"agent_image_parse\": \"Image Vision\",\n  \"model_platform\": \"Large Model Platform\",\n  \"commom\": {\n    \"add_manual\": \"Add Manually\",\n    \"add_market\": \"Add from App Market\"\n  },\n\n  \"jump_path\": \"Jump Path\",\n  \"open_method\": \"Open Method\",\n  \"navigation_is_open\": \"Navigation Is Open\",\n  \"page_edit\": \"Page Edit\",\n  \"last_edit\": \"Last Edit\",\n  \"opening_statement\": \"Opening Statement\",\n  \"suggested_questions\": \"Suggested Questions\",\n  \"max_add_tip\": \"Maximum {max} items\",\n  \"join_group\": \"Join Group\",\n  \"join_group_desc\": \"Join the group to learn and progress together\",\n  \"start_time\": \"Start Time\",\n  \"end_time\": \"End Time\",\n  \"filter\": \"Filter\",\n  \"user/mobile\": \"User/Mobile\",\n  \"summary\": \"Summary\",\n  \"message_count\": \"Message Count\",\n  \"detail\": \"Detail\",\n  \"dialogue_detail\": \"Dialogue Detail\",\n  \"more\": \"More\",\n  \"keyword\": \"Keyword\",\n  \"software_style\": \"Software Style\",\n  \"website_style\": \"Website Style\",\n  \"system_log\": {\n    \"log_label\": \"Log\",\n    \"log_action\": \"Action\",\n    \"log_module\": \"Module\",\n    \"log_operator\": \"Operator\",\n    \"log_time\": \"Time\",\n    \"log_ip\": \"IP\"\n  },\n  \"version\": {\n    \"title\": \"Version\",\n    \"scan_consult\": \"Scan Consult\",\n    \"upgrade_tip\": \"Upgrade Tip\",\n    \"upgrade\": \"Upgrade Version\",\n    \"upgrade_renew\": \"Upgrade version/Renew\",\n    \"not_support\": \"Current Version Not Support\",\n    \"agent_limit\": \"Agent Add Limit, Please Upgrade to Add\",\n    \"upgrade_hide_logo\": \"Upgrade to the enterprise version to enable hiding the technical support logo\"\n  },\n  \"knowledge\": {\n    \"name\": \"Knowledge\",\n    \"short_name\": \"Knowledge\"\n  },\n  \"space\": {\n    \"title\": \"Space\",\n    \"search_placeholder\": \"Enter Space Name\",\n    \"name\": \"Space\",\n    \"name_placeholder\": \"Please enter space name\",\n    \"icon\": \"Icon\",\n    \"capacity\": \"Capacity\",\n    \"description\": \"Description\",\n    \"description_placeholder\": \"Please enter description\",\n    \"delete_tip\": \"There are {total} knowledge bases in the current space, please clear the knowledge bases before deleting the space\",\n    \"delete_confirm\": \"Are you sure you want to delete the space?\",\n    \"delete_confirm_tip\": \"Please note! This operation will clear all content in the space. <br> Please enter the space name to be deleted: {name}\",\n    \"delete_confirm_tip_placeholder\": \"Please enter the space name to be deleted\",\n    \"system\": \"System\",\n    \"system_space_delete_tip\": \"System space, cannot be deleted\"\n  },\n  \"common\": {\n    \"name\": \"Name\",\n    \"short_name\": \"Short Name\",\n    \"member\": \"Member\",\n    \"creator\": \"Creator\",\n    \"created_time\": \"Created Time\"\n  },\n  \"action\": {\n    \"create\": \"Create\",\n    \"add\": \"Add\",\n    \"added\": \"Added\",\n    \"edit\": \"Edit\",\n    \"manage\": \"Manage\",\n    \"delete\": \"Delete\",\n    \"save\": \"Save\",\n    \"operation\": \"Operation\",\n    \"more\": \"More\",\n    \"cancel\": \"Cancel\",\n    \"setting\": \"Setting\",\n    \"confirm\": \"Confirm\"\n  },\n  \"default_links\": {\n    \"default_setting\": \"Default Setting\",\n    \"website\": \"Website\",\n    \"jump_path\": \"Jump Path\"\n  },\n  \"message_status\": {\n    \"create_success\": \"Created\",\n    \"save_success\": \"Saved\",\n    \"logic_reasoning_required\": \"Please select logic reasoning model\",\n    \"vector_embedding_required\": \"Please select vector embedding model\",\n    \"rerank_model_required\": \"Please select rerank model\"\n  },\n  \"agent\": {\n    \"name\": \"Agent\",\n    \"name_v2\": \"Intelligent Agent Name\",\n    \"base_info\": \"Base Info\",\n    \"input_variable\": \"Input\",\n    \"output_variable\": \"Output\",\n    \"variable_name\": \"Variable Name\",\n    \"variable_type\": \"Variable Type\",\n    \"variable_label\": \"Display Name\",\n    \"variable_desc\": \"Description\",\n    \"variable_required\": \"Required\",\n    \"variable_max_length\": \"Max Length\",\n    \"variable_show_word_limit\": \"Show Word Limit\",\n    \"variable_options\": \"Options\",\n    \"coze\": {\n      \"workspace\": \"Workspace\",\n      \"workflow_link\": \"Coze workflow \\\"edit state\\\" link\",\n      \"agent_type_chat\": \"Chat Application\",\n      \"agent_type_chat_desc\": \"User interacts with a large model, which is autonomous and decision-making, suitable for simple business logic.\",\n      \"agent_type_workflow\": \"Workflow Orchestration Application\",\n      \"agent_type_workflow_desc\": \"Workflow is a collection of executable instructions, used to implement business logic or complete specific tasks.\"\n    },\n    \"53ai\": {\n      \"agent_type_chat\": \"Chat Application\",\n      \"agent_type_chat_desc\": \"User interacts with a large model, which is autonomous and decision-making, suitable for simple business logic.\",\n      \"agent_type_workflow\": \"Workflow Orchestration Application\",\n      \"agent_type_workflow_desc\": \"Workflow is a collection of executable instructions, used to implement business logic or complete specific tasks.\"\n    },\n    \"dify\": {\n      \"agent_type_chat\": \"Chat Application\",\n      \"agent_type_chat_desc\": \"User interacts with a large model, which is autonomous and decision-making, suitable for simple business logic.\",\n      \"agent_type_workflow\": \"Workflow Orchestration Application\",\n      \"agent_type_workflow_desc\": \"Workflow is a collection of executable instructions, used to implement business logic or complete specific tasks.\"\n    },\n    \"fastgpt\": {\n      \"agent_type_chat\": \"Chat Type (Simple Application/Workflow)\",\n      \"agent_type_chat_desc\": \"User interacts with a large model, which is autonomous and decision-making, suitable for simple business logic.\",\n      \"agent_type_workflow\": \"Application Type (Plugin)\",\n      \"agent_type_workflow_desc\": \"Customizable input and output workflows, usually used to encapsulate reusable workflows.\"\n    },\n    \"relate_app\": {\n      \"title\": \"Relate App\",\n      \"desc\": \"Assign the output of the intelligent agent to the input of the related scene intelligent agent to realize the automatic flow of multi-scene tasks.\",\n      \"input_mapping\": \"Input Mapping\",\n      \"execution_rule\": \"Execution Rule\",\n      \"auto_execution\": \"Auto Execution\",\n      \"manual_execution\": \"Manual Execution\"\n    }\n  },\n  \"form\": {\n    \"input_placeholder\": \"Please enter\",\n    \"select_placeholder\": \"Please select\",\n    \"set_variable_placeholder\": \"Please set ｛#variable｝\"\n  },\n  \"file\": {\n    \"type_limit\": \"Currently only supports {accept} format files\",\n    \"size_empty\": \"File content cannot be empty\",\n    \"size_limit\": \"File upload size cannot exceed {size}MB ({name} size exceeds)\",\n    \"upload_limit\": \"Upload up to {limit} files\"\n  },\n  \"variable_type\": {\n    \"text\": \"Text\",\n    \"textarea\": \"Textarea\",\n    \"inputNumber\": \"Number\",\n    \"select\": \"Select\",\n    \"date\": \"Date\",\n    \"tag\": \"Tag\",\n    \"file\": \"File\",\n    \"markdown\": \"Markdown\",\n    \"image\": \"Image\",\n    \"audio\": \"Audio\",\n    \"video\": \"Video\",\n    \"array_text\": \"Array Text\",\n    \"array_image\": \"Array Image\",\n    \"array_audio\": \"Array Audio\",\n    \"array_video\": \"Array Video\",\n    \"array_file\": \"Array File\"\n  },\n  \"platform\": {\n    \"model_tip\": \"{total} { type } models\",\n    \"model_test_success\": \"Test successful, \\\"{platform}\\\" is currently available\",\n    \"model_test_failed\": \"Test failed, \\\"{platform}\\\" is currently unavailable\",\n    \"failed_tip\": \"Test failed: Please check if the authorization key is available. {error}\"\n  }\n}\n"
  },
  {
    "path": "web/console/src/locales/index.ts",
    "content": "import { createI18n } from 'vue-i18n'\nimport HubUiX from 'hub-ui-x'\n\n// element-plus 中的语言配置\nimport elementZhLocale from 'element-plus/es/locale/lang/zh-cn'\nimport elementZhTwLocale from 'element-plus/es/locale/lang/zh-tw'\nimport elementEnLocale from 'element-plus/es/locale/lang/en'\nimport elementJaLocale from 'element-plus/es/locale/lang/ja'\n// 自己的语言配置\nimport zhLocale from './zh-cn.json'\nimport twLocale from './zh-tw.json'\nimport enLocale from './en.json'\nimport enLocaleV2 from './en-v2.json'\nimport jaLocale from './ja.json'\nimport { assign } from '@/utils'\n\nassign(enLocale, enLocaleV2)\n\n// 语言配置整合\nconst messages = {\n  'zh-cn': {\n    ...zhLocale,\n    elementZhLocale,\n  },\n  'zh-tw': {\n    ...twLocale,\n    elementZhTwLocale,\n  },\n  en: {\n    ...enLocale,\n    elementEnLocale,\n  },\n  ja: {\n    ...jaLocale,\n    elementJaLocale,\n  },\n}\n\nconst browser_lang = navigator.language.toLowerCase()\n// const is_zh = /^zh\\b/.test(browser_lang)\nconst is_en = /^en\\b/.test(browser_lang)\nconst is_ja = /^ja\\b/.test(browser_lang)\nconst is_tw = /^tw\\b/.test(browser_lang)\nconsole.info('browser_lang: ', browser_lang)\n\nconst locale =\n  localStorage.getItem('default_lang') || (is_ja ? 'ja' : is_en ? 'en' : is_tw ? 'zh-tw' : 'zh-cn')\n\n// 创建 i18n\nconst i18n = createI18n({\n  legacy: false,\n  fallbackLocale: 'zh-cn',\n  globalInjection: true, // 全局模式，可以直接使用 $t\n  locale,\n  messages,\n})\n\nHubUiX.setLang(locale)\n\n// 注册到全局，方便js上使用\n// @ts-expect-error\nwindow.$t = i18n.global.t\nexport default i18n\n"
  },
  {
    "path": "web/console/src/locales/ja.json",
    "content": "{\n  \"response_code\": {\n    \"success\": \"成功\",\n    \"param_error\": \"パラメータエラー\",\n    \"database_error\": \"データベースエラー\",\n    \"network_error\": \"ネットワークエラー，再試行してください\",\n    \"system_error\": \"システムエラー\",\n    \"auth_error\": \"認証エラー\",\n    \"not_found_error\": \"未找到エラー\",\n    \"unauthorized_error\": \"認証エラー\",\n    \"file_error\": \"ファイルエラー\",\n    \"forbidden_error\": \"禁止エラー\",\n    \"agent_error\": \"インテリジェントエージェントエラー\",\n    \"token_expired_error\": \"トークン期限切れエラー\",\n    \"verification_code_error\": \"驗證碼錯誤\"\n  },\n  \"response_message\": {\n    \"unknown_error\": \"未知エラー\",\n    \"user_not_found\": \"ユーザーが見つかりません\",\n    \"username_or_password_is_incorrect\": \"ユーザー名またはパスワードが間違っています\",\n    \"operate_too_fast\": \"操作が速すぎます。後でもう一度試してください\"\n  },\n  \"response_data\": {\n    \"domain_already_bound\": \"ドメイン名はすでに使用されています。別のドメイン名を使用してください\",\n    \"apply_already_submitted\": \"申請がすでに提出されています。繰り返し提出しないでください\"\n  },\n  \"module\": {\n    \"parse\": \"コンテンツクリーニング\",\n    \"viewer\": \"文書查看\",\n    \"agent_type_prompt\": \"プロンプトで作成\",\n    \"agent_type_53ai_agent\": \"53AIインテリジェントエージェント\",\n    \"agent_type_53ai_workflow\": \"53AIアプリケーションインテリジェント\",\n    \"agent_type_coze_agent_cn\": \"Cozeインテリジェントエージェント\",\n    \"agent_type_coze_workflow_cn\": \"Cozeアプリケーションインテリジェント\",\n    \"agent_type_coze_agent\": \"Cozeインテリジェントエージェント\",\n    \"agent_type_coze_workflow\": \"Cozeアプリケーションインテリジェント\",\n    \"agent_type_dify_agent\": \"Difyインテリジェントエージェント\",\n    \"agent_type_dify_workflow\": \"Difyアプリケーションインテリジェント\",\n    \"agent_type_yuanqi\": \"Tencent Yuanqi\",\n    \"agent_type_bailian\": \"Alibaba Bailian\",\n    \"agent_type_volcengine\": \"Volcengine\",\n    \"agent_sort_desc\": \"数字が大きいほど、順位が高くなります\",\n    \"dialogue\": \"業務対話\",\n    \"draft\": \"インテリジェントプラン\",\n    \"writer\": \"コンテンツ作成\",\n    \"aibox\": \"AIツールボックス\",\n    \"bot\": \"インテリジェントエージェント\",\n    \"library\": \"知識庫設置\",\n    \"search_section\": \"AI問答助手\",\n    \"search\": \"AI問答\",\n    \"chunk_setting\": \"拆分テンプレート\",\n    \"model_setting\": \"モデル設定\",\n    \"system\": \"システム管理\",\n    \"dialogue_digital_employee\": \"AIスタッフ\",\n    \"dialogue_prompt\": \"プロンプト\",\n    \"dialogue_large_model\": \"大規模モデル\",\n    \"enterprise_info\": \"企業情報\",\n    \"large_model\": \"大規模モデル連携\",\n    \"user\": \"スタッフアカウント\",\n    \"combinat\": \"シングルサインオン\",\n    \"system_log\": \"システムログ\",\n    \"homepage\": \"ホームページ\",\n    \"app_management\": \"アプリケーション管理\",\n    \"agent\": \"インテリジェントエージェント\",\n    \"knowledge\": \"知識管理\",\n    \"space\": \"空間管理\",\n    \"agent_search_placeholder\": \"インテリジェントエージェントを検索\",\n    \"prompt_search_placeholder\": \"プロンプト名\",\n    \"ai_product\": \"AI 製品\",\n    \"ai_toolbox\": \"AIツールボックス\",\n    \"ai_toolbox_search_placeholder\": \"ツールを検索\",\n    \"operation_management\": \"運用管理\",\n    \"operation_user\": \"ユーザーデータ\",\n    \"operation_user_delete_confirm\": \"このユーザーを削除してもよろしいですか？\",\n    \"operation_user_search_placeholder\": \"メンバー名/電話番号/メール\",\n    \"operation_order\": \"注文データ\",\n    \"operation_order_delete_confirm\": \"この注文を削除してもよろしいですか？\",\n    \"operation_order_search_placeholder\": \"注文ID/電話番号\",\n    \"operation_order_user_tip\": \"ユーザーのニックネームを直接入力して選択することができます。複数のユーザーを選択すると、それぞれのユーザーに対して別々の注文が作成されます。\",\n    \"operation_visit\": \"訪問データ\",\n    \"site_config\": \"サイト設定\",\n    \"system_config\": \"システム設定\",\n    \"website_info\": \"サイト情報\",\n    \"website_info_logo\": \"ロゴ\",\n    \"website_info_logo_tip\": \"1:1比率の正方形ロゴをアップロードしてください（推奨サイズ：512×512px）PNG/JPG形式対応、ファイルサイズは2MB以下\",\n    \"website_info_logo_placeholder\": \"ロゴをアップロードしてください\",\n    \"website_info_ico\": \"ico\",\n    \"website_info_ico_tip\": \"推奨サイズは64×64です\",\n    \"website_info_ico_placeholder\": \"icoファイルをアップロードしてください\",\n    \"website_info_name\": \"サイト名\",\n    \"website_info_name_placeholder\": \"サイト名を入力してください\",\n    \"website_info_language\": \"デフォルト言語\",\n    \"website_info_keyword\": \"キーワード\",\n    \"website_info_keyword_placeholder\": \"キーワードを入力してください\",\n    \"website_info_keyword_placeholder_v2\": \"複数のキーワードを入力できます（各キーワード入力後、Enterキーを押してください）\",\n    \"website_info_desc\": \"サイト説明\",\n    \"website_info_desc_placeholder\": \"サイト説明を入力してください\",\n    \"website_info_copyright\": \"著作権情報\",\n    \"website_info_copyright_placeholder\": \"著作権情報を入力してください\",\n    \"website_info_type\": \"サイトタイプ\",\n    \"website_type_independent\": \"AI 独立站\",\n    \"website_type_independent_desc\": \"サイトは登録ユーザーのみがアクセスできます\",\n    \"website_type_enterprise\": \"企業 AI ポータル\",\n    \"website_type_enterprise_desc\": \"サイトは内部ユーザーのみがアクセスできます\",\n    \"website_type_industry\": \"業界 AI ポータル\",\n    \"website_type_industry_desc\": \"サイトは内部従業員+登録ユーザーがアクセスできます\",\n    \"website_info_template\": \"サイトテンプレート\",\n    \"website_info_layout\": \"ウェブサイトレイアウト\",\n    \"platform\": \"プラットフォーム連携\",\n    \"platform_v2\": \"プラットフォーム\",\n    \"all_platform\": \"すべてのプラットフォーム\",\n    \"platform_delete_confirm\": \"このインテリジェントエージェントプラットフォームを削除してもよろしいですか？\",\n    \"platform_tools\": \"拡張ツール\",\n    \"platform_auth_client_id\": \"クライアントID\",\n    \"platform_auth_client_id_placeholder\": \"クライアントIDを入力してください\",\n    \"platform_auth_client_secret\": \"クライアントシークレット\",\n    \"platform_auth_client_secret_placeholder\": \"クライアントシークレットを入力してください\",\n    \"platform_auth_coze_confirm\": \"確認你在扣子已經保存\",\n    \"platform_auth_url\": \"URL\",\n    \"platform_auth_secret\": \"Secret\",\n    \"platform_auth_secret_id\": \"SecretId\",\n    \"platform_auth_secret_id_placeholder\": \"SecretIdを入力してください\",\n    \"platform_auth_secret_key\": \"SecretKey\",\n    \"platform_auth_secret_key_placeholder\": \"SecretKeyを入力してください\",\n    \"platform_search_online\": \"ネットワーク検索\",\n    \"platform_search_online_desc\": \"ウェブコンテンツを検索し、結果を要約します。\",\n    \"platform_search_online_delete_confirm\": \"このネットワーク検索ツールを削除してもよろしいですか？\",\n    \"platform_tool_api_key\": \"APIキー\",\n    \"platform_tool_api_key_placeholder\": \"APIキーを入力してください\",\n    \"platform_model\": \"一般大規模モデル\",\n    \"platform_model_add\": \"一般大規模モデル\",\n    \"platform_model_organization_id\": \"組織ID\",\n    \"platform_model_organization_id_placeholder\": \"組織IDを入力してください\",\n    \"platform_model_base_url\": \"API Base\",\n    \"platform_model_base_url_azure\": \"API ドメイン\",\n    \"platform_model_base_url_maxkb\": \"Base URL\",\n    \"platform_model_base_url_placeholder\": \"API Baseを入力してください、例：https://api.openai.com\",\n    \"platform_model_base_url_placeholder_53ai\": \"API Baseを入力してください、例：https://api.53ai.com\",\n    \"platform_model_api_endpoint\": \"カスタムAPIエンドポイント\",\n    \"platform_model_api_endpoint_placeholder\": \"カスタムAPIエンドポイントを入力してください、例：https://api.deepseek.com/v1 or https://api.deepseek.com\",\n    \"platform_model_models\": \"有効なモデル\",\n    \"platform_model_models_empty\": \"利用可能なモデルがありません\",\n    \"platform_model_models_total\": \"{total}個のモデル\",\n    \"platform_model_models_edit\": \"モデル編集\",\n    \"platform_model_models_id\": \"モデルID\",\n    \"platform_model_models_name\": \"モデル名\",\n    \"platform_model_delete_confirm\": \"このモデルを削除してもよろしいですか？\",\n    \"navigation\": \"ナビゲーションメニュー\",\n    \"pc_navigation\": \"PCナビゲーション\",\n    \"mobile_navigation\": \"モバイルナビゲーション\",\n    \"nav_type_homepage\": \"ホームページ\",\n    \"nav_type_single\": \"シングルページ\",\n    \"nav_type_agent\": \"インテリジェントエージェント\",\n    \"nav_target_self\": \"同じウィンドウ\",\n    \"nav_target_blank\": \"新しいウィンドウ\",\n    \"nav_name\": \"セクション\",\n    \"nav_name_placeholder\": \"セクション名を選択してください\",\n    \"nav_agent_class_placeholder\": \"分類を選択してください\",\n    \"nav_agent_placeholder\": \"エージェントを選択してください\",\n    \"nav_type\": \"タイプ\",\n    \"nav_target\": \"開き方\",\n    \"nav_url\": \"リダイレクトリンク\",\n    \"nav_visible\": \"ナビゲーションバーに表示\",\n    \"nav_operation\": \"操作\",\n    \"nav_operation_seo\": \"SEO\",\n    \"action_delete_confirm\": \"このセクションを削除してもよろしいですか？\",\n    \"nav_seo_setting\": \"SEO設定\",\n    \"nav_seo_setting_title\": \"SEOタイトル\",\n    \"nav_seo_setting_keywords\": \"SEOキーワード\",\n    \"nav_seo_setting_keywords_tip\": \"キーワードは英語のカンマ（,）で区切ってください\",\n    \"nav_seo_setting_description\": \"SEO説明\",\n    \"payment\": \"支払い設定\",\n    \"subscription\": \"サブスクリプションサービス\",\n    \"subscription_header_title\": \"サブスクリプションサービスと価格設定\",\n    \"subscription_free\": \"無料版\",\n    \"subscription_pro\": \"プロフェッショナル版\",\n    \"subscription_flagship\": \"フラッグシップ版\",\n    \"subscription_charge\": \"サブスクリプション料金\",\n    \"subscription_points\": \"ポイント\",\n    \"subscription_advanced_points\": \"高度なポイント\",\n    \"subscription_agent_bots\": \"利用可能なエージェント\",\n    \"subscription_advanced_agent_bots\": \"利用可能な高度なエージェント\",\n    \"subscription_ai_assistant\": \"クロスプラットフォームAIアシスタント\",\n    \"subscription_ai_assistant_tip\": \"macOS、Windows、ブラウザプラグインをサポートし、ユーザーがダウンロードして使用できるようにします。\",\n    \"subscription_delete_confirm\": \"このサブスクリプションを削除してもよろしいですか？\",\n    \"domain\": \"サイトドメイン\",\n    \"domain_exclusive\": \"専用ドメイン\",\n    \"domain_exclusive_label\": \"自分の専用ドメインをカスタマイズします\",\n    \"domain_exclusive_validator_1\": \"小文字の英数字または \\\"-\\\" を使用し、少なくとも5文字以上である必要があります\",\n    \"domain_exclusive_validator_2\": \"ドメイン名はすでに使用されています。別のドメイン名を使用してください\",\n    \"domain_independent\": \"独立ドメイン\",\n    \"domain_independent_label\": \"自分の独立ドメインをカスタマイズします\",\n    \"domain_independent_desc\": \"使用したいカスタムドメインを追加します。\",\n    \"domain_independent_delete_confirm\": \"この独立ドメインを削除してもよろしいですか？\",\n    \"domain_independent_cname\": \"CNAME\",\n    \"domain_independent_self\": \"セルフホスティング\",\n    \"domain_independent_cname_desc\": \"次のリストから適切なCNAMEアドレスを選択し、ドメイン名プロバイダーでドメイン名DNS解決を設定してください。\",\n    \"domain_independent_cname_desc_1\": \"1. アリババクラウドで登録されたドメイン：53aihub.n1.53ai.com\",\n    \"domain_independent_cname_desc_2\": \"2. テンセントクラウドで登録されたドメイン：53aihub.n2.53ai.com\",\n    \"domain_independent_cname_desc_3\": \"3. 香港サーバー、やや遅い：53aihub.n3.53ai.com\",\n    \"domain_independent_https\": \"HTTPSを有効にする\",\n    \"domain_independent_https_always\": \"常にHTTPSを使用する\",\n    \"domain_independent_ssl\": \"SSL証明書\",\n    \"domain_independent_ssl_option_1\": \"53AIによって生成された\",\n    \"domain_independent_ssl_option_2\": \"ユーザーが自分で設定した\",\n    \"domain_independent_ssl_certificate\": \"証明書\",\n    \"domain_independent_ssl_certificate_placeholder\": \"証明書の内容をコピーして貼り付けてください\",\n    \"domain_independent_ssl_private_key\": \"秘密鍵\",\n    \"domain_independent_ssl_private_key_placeholder\": \"秘密鍵の内容をコピーして貼り付けてください\",\n    \"domain_independent_self_desc_1\": \"方法1：nginx などの Web サーバーを使用して簡単な設定を行うだけで実現できます。\",\n    \"domain_independent_self_desc_2\": \"方法2：アリババクラウド、テンセントクラウド、七牛クラウドなどのクラウドベンダーの全サイト加速サービス (DCDN) を使用します。\",\n    \"domain_independent_self_desc_3\": \"Docs Site ID: {site_id}\",\n    \"use_subdirectories\": \"サブディレクトリを使用する\",\n    \"use_subdirectories_tip\": \"サブディレクトリ（例：53aihub/docs）を使用する場合は、スイッチをオンにします\",\n    \"statistics\": \"サードパーティ統計\",\n    \"statistics_header_title\": \"埋め込みコード\",\n    \"statistics_header_desc\": \"埋め込みコードを使用して、サイトにカスタマーサービスプラグインやアクセス統計などの機能を追加できます\",\n    \"statistics_textarea_label_1\": \"Headヘッダーコード\",\n    \"statistics_textarea_label_1_example\": \"JSコードを入力してください……\\n例えば\\n<script>console.log('hello world')</script>\\nまたは\\n<script src=\\\"xxx\\\"></script>\",\n    \"statistics_textarea_label_2\": \"CSSコード\",\n    \"statistics_textarea_label_2_example\": \"CSSコードを入力してください\",\n    \"SMTP\": \"登録とログイン\",\n    \"SMTP_email_log\": \"メール登録/ログイン\",\n    \"SMTP_mobile_log\": \"携帯電話登録/ログイン\",\n    \"SMTP_server\": \"SMTPサーバー\",\n    \"SMTP_port\": \"SMTPポート\",\n    \"SMTP_email_account\": \"メールアカウント\",\n    \"SMTP_email_password\": \"メールパスワード\",\n    \"SMTP_receiver_email\": \"受信者メール\",\n    \"SMTP_addresser_email\": \"送信者メール\",\n    \"SMTP_send_email\": \"テストメールを送信\",\n    \"SMTP_openTLS\": \"TLSを有効化\",\n    \"site_decoration\": \"サイト装飾\",\n    \"template_style\": \"テンプレートスタイル\",\n    \"banner_diagram\": \"バナー図\"\n  },\n  \"chat\": {\n    \"empty_desc\": \"入力ボックスに内容を入力してデバッグしてください\"\n  },\n  \"login\": {\n    \"unregistered_account_desc\": \"未登録のアカウントは、登録後自動ログインします\",\n    \"account_placeholder\": \"ユーザー名を入力してください\",\n    \"email_placeholder\": \"メールアドレスを入力してください\",\n    \"mobile_placeholder\": \"携帯電話番号を入力してください\",\n    \"mobile_exists\": \"この携帯電話番号はすでに登録されています。このアカウントでログインしてください。\",\n    \"mobile_no_exists\": \"この携帯電話番号は登録されていません。先に登録してください。\",\n    \"email_exists\": \"このメールアドレスはすでに登録されています。このアカウントでログインしてください。\",\n    \"email_no_exists\": \"このメールアドレスは登録されていません。先に登録してください。\",\n    \"password_placeholder\": \"パスワードを入力してください\",\n    \"forget_password\": \"パスワードを忘れた？\",\n    \"bind_mobile_login\": \"携帯電話番号を紐付ける\",\n    \"password_login\": \"パスワードログイン\",\n    \"password_login_v2\": \"パスワードログイン\",\n    \"mobile_login\": \"携帯電話番号ログイン\",\n    \"mobile_login_v2\": \"携帯電話番号ログイン\",\n    \"wechat_login\": \"微信ログイン\",\n    \"wechat_login_v2\": \"微信ログイン\",\n    \"google_login\": \"Googleログイン\",\n    \"google_login_v2\": \"Googleログイン\",\n    \"agree_and_policy\": \"ログイン即視您同意{agree}和{policy}\",\n    \"agree\": \"条项和条件\",\n    \"policy\": \"プライバシーポリシー\",\n    \"account_length\": \"アカウント長さは4から20文字の間である必要があります\",\n    \"account_format\": \"アカウントは英字で始まり、英字、数字、および下線のみを含める必要があります\",\n    \"password_length\": \"パスワードの長さは8～20文字で、英字、数字、記号の組み合わせが可能です\",\n    \"password_length_v2\": \"パスワードの長さは8～20文字で\",\n    \"password_format\": \"パスワードは大文字と小文字の英字と数字を含める必要があります\",\n    \"password_not_match\": \"2回入力したパスワードが一致しません\",\n    \"reset_password\": \"パスワードをリセット\",\n    \"update_password\": \"パスワードを更新\",\n    \"back_to_login\": \"ログインに戻る\",\n    \"has_account\": \"既にアカウントを持っています\",\n    \"direct_login\": \"直接ログイン\",\n    \"immediate_login\": \"直ちにログイン\",\n    \"login_by_wechat\": \"微信でQRコードをスキャンしてログインしてください\",\n    \"select_reset_password_way\": \"パスワードをリセットする方法を選択\",\n    \"select_register_way\": \"アカウントを登録する方法を選択\",\n    \"email_validate\": \"メールアドレスを検証\",\n    \"mobile_validate\": \"携帯電話番号を検証\",\n    \"new_password\": \"新パスワード\",\n    \"new_password_placeholder\": \"新パスワードを入力してください\",\n    \"confirm_password\": \"新パスワードを確認\",\n    \"confirm_password_placeholder\": \"新パスワードを再入力してください\",\n    \"verify_identity\": \"身分証明\",\n    \"enterprise_info\": \"企業情報\",\n    \"application_complete\": \"申請完了\",\n    \"website_name\": \"サイト名\",\n    \"website_name_placeholder\": \"サイト名を入力してください\",\n    \"contact_name\": \"連絡先\",\n    \"contact_name_placeholder\": \"連絡先を入力してください\",\n    \"complete_registration_and_login\": \"登録完了してログイン\",\n    \"apply_open_repetition\": \"申請がすでに提出されています。繰り返し提出しないでください\",\n    \"select_enterprise\": \"企業に進むを選択\",\n    \"new_user_tip\": \"初期パスワードは\\\"{password}\\\"です。すぐに変更してください\",\n    \"I_remember\": \"覚えています\",\n    \"modify_password\": \"パスワードを変更\"\n  },\n  \"apply\": {\n    \"process\": \"処理中\",\n    \"expired\": \"期限切れ\",\n    \"reject\": \"拒否\",\n    \"refresh_list\": \"リストを更新\",\n    \"contact_customer_service\": \"問題がありますか？カスタマーサービスにお問い合わせください\",\n    \"contact_customer_service_v2\": \"カスタマーサポートへ連絡\",\n    \"create_site\": \"サイトを作成\",\n    \"create_title\": \"53AI {project} の开通を歓迎します\",\n    \"waiting_audit\": \"審査中\",\n    \"create_success\": \"作成成功\",\n    \"expired_time_forever\": \"永久有効\",\n    \"enterprise_name_placeholder\": \"企業 / 組織名を入力してください\",\n    \"domain\": \"ドメイン名\",\n    \"domain_placeholder\": \"あなたのドメイン名を入力してください\",\n    \"enterprise_not_empty\": \"企業 / 組織名は空にできません\",\n    \"mobile_unregistered_tip\": \"この電話番号は未登録です。認証コードとログインパスワードを入力し、企業作成を完了してください。\",\n    \"domain_already_use\": \"{domain} はすでに使用されています。他のドメインを試してみてください～\"\n  },\n  \"service\": {\n    \"title\": \"即時開通\",\n    \"consult_name\": \"首席顧客サービスコンサルタント\",\n    \"desc_1\": \"お好きなタイミングでお問い合わせください\",\n    \"desc_2\": \"開通使用\",\n    \"desc_3\": \"こんにちは、WeChat の QR コードをスキャンして専属コンサルタントに連絡してください,\"\n  },\n  \"website_version\": {\n    \"free\": \"スタートアップ版\",\n    \"standard\": \"プロフェッショナル版\",\n    \"enterprise\": \"エンタープライズ版\"\n  },\n  \"language_option_label\": {\n    \"zh-cn\": \"中文-CN\",\n    \"zh-tw\": \"中文-TW\",\n    \"en\": \"英文-EN\",\n    \"jp\": \"日文-JP\"\n  },\n  \"template_option_label\": {\n    \"portal\": \"AIポータル\",\n    \"doubao\": \"豆包風格\",\n    \"mita\": \"秘塔風格\",\n    \"kimi\": \"Kimi風格\",\n    \"independent\": \"独立サイト\"\n  },\n  \"layout_option_label\": {\n    \"loose\": \"緩い\",\n    \"center\": \"中心\"\n  },\n  \"layout_option_desc\": {\n    \"loose\": \"緩いレイアウト、画面を埋め尽くし、ユーザーの解像度に適応します\",\n    \"center\": \"緊密なレイアウト、コンテンツを中心に配置します\"\n  },\n  \"order\": {\n    \"status\": {\n      \"all\": \"全部注文\",\n      \"not_confirm\": \"待確認\",\n      \"pending\": \"待支払い\",\n      \"paid\": \"支払い済み\",\n      \"expired\": \"超时\",\n      \"cancelled\": \"キャンセル\"\n    },\n    \"confirm_tip\": \"確認すると、注文は確定されます。\"\n  },\n  \"payment\": {\n    \"type\": {\n      \"all\": \"全部支払い方式\",\n      \"alipay\": \"Alipay\",\n      \"wechat\": \"WeChat\",\n      \"manual\": \"手動送金\",\n      \"paypal\": \"PayPal\"\n    },\n    \"manual\": {\n      \"qrcode\": \"収款コード\",\n      \"qrcode_placeholder\": \"収款コードをアップロードしてください\",\n      \"desc\": \"備考\",\n      \"desc_placeholder\": \"例：上記金額を支払うには、微信/アリババ のQRコードを使用してください\"\n    },\n    \"wechat_app_id\": \"アプリID\",\n    \"wechat_app_id_placeholder\": \"アプリIDを入力してください\",\n    \"wechat_mch_id\": \"WeChat決済加盟店番号\",\n    \"wechat_mch_id_placeholder\": \"WeChat決済加盟店番号を入力してください\",\n    \"wechat_api_secret\": \"APIv3シークレットキー\",\n    \"wechat_api_secret_placeholder\": \"APIv3シークレットキーを入力してください\",\n    \"wechat_app_id_tip\": \"WeChat決済加盟店プラットフォームにログイン → 「アカウントセンター」をクリック → 「加盟店情報」から「WeChat決済加盟店番号」を取得\",\n    \"wechat_mch_id_tip\": \"WeChatパブリックプラットフォームにログイン → 設定 → パブリックアカウント設定 → 基本設定 → 「開発者ID（アプリID）」を確認\",\n    \"wechat_api_secret_tip\": \"WeChat決済加盟店プラットフォームにログイン → アカウントセンター → APIセキュリティ → 「APIキー」を設定\",\n    \"wechat_serial_no\": \"証明書シリアル番号\",\n    \"wechat_serial_no_placeholder\": \"証明書シリアル番号を入力してください\",\n    \"wechat_cert\": \"証明書ファイル\",\n    \"wechat_cert_placeholder\": \"証明書ファイルをアップロードしてください\",\n    \"wechat_private_key\": \"証明書キー\",\n    \"wechat_private_key_placeholder\": \"証明書キーをアップロードしてください\",\n    \"manual_tip\": \"支付宝やWeChatなどの支払いチャネルを提供できない場合は、QRコードを残すことができます。ユーザーが支払った後、手動で注文を確認します。\",\n    \"manual_pay_qrcode\": \"支払いコード\",\n    \"manual_pay_qrcode_placeholder\": \"支払いコードをアップロードしてください\",\n    \"alipay_app_id\": \"Alipay AppID\",\n    \"alipay_app_id_placeholder\": \"Alipay AppIDを入力してください\",\n    \"alipay_mch_id\": \"アプリケーション秘密鍵\",\n    \"alipay_mch_id_placeholder\": \"アプリケーション秘密鍵を入力してください\",\n    \"alipay_api_secret\": \"Alipay公開鍵\",\n    \"alipay_api_secret_placeholder\": \"Alipay公開鍵を入力してください\",\n    \"alipay_guide_html\": \"1、Alipay開放プラットフォームにログイン<a class='text-[#5A6D9E]' href='https://open.alipay.com/module/webApp/' target='_blank'>https://open.alipay.com/module/webApp/</a>「Web/モバイルアプリケーション」を作成してAPPIDを取得；\\n2、アプリケーションに入り、Alipay公式のガイドに従って「開発設定」「インターフェース署名方式」を設定し、アプリケーション秘密鍵とAlipay公開鍵を取得；\\n3、「開発設定」「認証コールバックアドレス」に以下を入力：<span style=\\\"color: #FA5151;\\\">{callback_url}</span><span class='copy-hook'></span>\\n4、[API管理]で「コンピューターサイト支払い」の機能を導入し、Alipay公式のガイドに従って設定または開通してください。\"\n  },\n  \"template_style\": {\n    \"website_style\": \"ウェブサイトスタイル\",\n    \"website\": \"ウェブサイトスタイル\",\n    \"software\": \"ソフトウェアスタイル\",\n    \"theme_color\": \"テーマカラー\",\n    \"theme_color_v2\": \"テーマカラー\",\n    \"text_color\": \"テキストカラー\",\n    \"nav_bg_color\": \"ナビゲーション背景\",\n    \"nav_text_color\": \"ナビゲーションテキスト\",\n    \"page_footer_bg_color\": \"ページフッター背景\",\n    \"page_footer_text_color\": \"ページフッターテキスト\"\n  },\n  \"banner\": {\n    \"upload_image\": \"画像をアップロード\",\n    \"upload_image_tip\": \"1920×380 のピクセル画像が最適で、画像サイズは 10 MB 未満です\",\n    \"interval\": \"画像輪播間隔\",\n    \"interval_tip\": \"バナー領域に複数の画像が存在する場合、画像スクロール時間間隔を設定します\"\n  },\n  \"wechat_payment\": {\n    \"mch_guide\": {\n      \"title\": \"WeChat Pay Merchant IDの取得方法\",\n      \"step_1\": \"1、WeChat Pay Merchant Platform（{url}）にログインします\",\n      \"step_2\": \"2、WeChat Pay Merchant ID can be viewed in the【Account Center - Merchant Information】of WeChat Pay Merchant Platform.\",\n      \"step_3\": \"Note: If you are not a WeChat Pay merchant, you can click to become a merchant on the login page, register and apply for a WeChat Pay Merchant ID, fill in the enterprise related information such as营业执照、对公账户等, submit for review. After approval, you can get the WeChat Pay Merchant ID.\"\n    },\n    \"app_guide\": {\n      \"title\": \"APPIDの取得方法\",\n      \"step_1\": \"1、在微信支付商戶平台的【產品中心 - AppID賬號管理】中點擊\\\"關聯APPID\\\"，將之前獲取的公眾號或小程序的APPID填入並確認關聯。登錄微信開放平台，在消息中心中同意關聯。\",\n      \"step_2\": \"2、將已關聯的APPID，複製填入表單。\\n\\n補充：如果還未關聯任何公眾號，則需要先關聯公眾號，操作方法：點擊關聯AppID\",\n      \"step_3\": \"然後登錄微信公眾平台（{url}），進入公眾號後台，在【設置與開發 - 基本配置】中獲取開發者ID（AppID）。如果是小程序，可在微信公眾平台的小程序管理後台獲取小程序APPID。\"\n    },\n    \"api_guide\": {\n      \"title\": \"APIV3密鑰の取得方法\",\n      \"step_1\": \"1、登錄微信支付商戶平台，進入【賬戶中心 - 賬戶設置 - API安全】，點擊【APIv3密鑰】\",\n      \"step_2\": \"2、在彈出窗口中點擊\\\"已溝通\\\"，輸入一個32位的隨機密鑰（包含數字及大小寫字母），點擊獲取短信驗證碼，輸入驗證碼後點擊\\\"確認\\\"，即可設置成功。\"\n    },\n    \"cert_guide\": {\n      \"title\": \"証書の取得方法\",\n      \"step_1\": \"1、登錄微信支付商戶平台，進入【賬戶中心 - 賬戶設置 - API安全】，點擊【APIv3密鑰】\",\n      \"step_2\": \"2、在彈出窗口中點擊\\\"已溝通\\\"，輸入一個32位的隨機密鑰（包含數字及大小寫字母），點擊獲取短信驗證碼，輸入驗證碼後點擊\\\"確認\\\"，即可設置成功。\"\n    },\n    \"serial_guide\": {\n      \"title\": \"証書序列号の取得方法\",\n      \"step_1\": \"1、登錄微信支付商戶平台，進入【賬戶中心 - 賬戶設置 - API安全】，點擊【APIv3密鑰】\"\n    }\n  },\n  \"alipay_payment\": {\n    \"app_guide\": {\n      \"title\": \"How to get APPID\",\n      \"step_1\": \"1、Login to Alipay Open Platform<a class='text-[#5A6D9E]' href='https://open.alipay.com/module/webApp/' target='_blank'>https://open.alipay.com/module/webApp/</a>Create \\\"Web/Mobile Application\\\" to get APPID; \\n2、Click to enter the application, configure according to the official guide of Alipay in \\\"Development Settings\\\" \\\"Signature Method\\\" to get application private key and Alipay public key; \\n3、In \\\"Development Settings\\\" \\\"Authorization Callback Address\\\", fill in: <span class=\\\"text-[#586D9A]\\\">{callback_url}</span><span class='copy-hook'></span>\\n4、In [API Management], access the ability of \\\"Computer Website Payment\\\" according to the official guide of Alipay to configure or open;\"\n    }\n  },\n  \"platform_auth\": {\n    \"coze_cn\": {\n      \"tip\": \"Coze API-認証-新規アプリケーション作成へ移動（{url}）\\n手順1：OAuthアプリケーションを作成（\\\"クライアントタイプ\\\"は\\\"Webバックエンドアプリケーション\\\"を選択）\\n手順2：\\\"リダイレクトURL\\\"に以下を入力：{redirect_url}\\n手順3：{client_id}と{client_secret}を下記フォームに入力し、すべての権限にチェックを入れて保存してください。\",\n      \"tip_1\": \"Coze側で保存をクリックしてから、確認をクリックしてください\"\n    },\n    \"app_builder\": {\n      \"tip\": \"Baidu Intelligence Cloud Qianfanへ移動（{url}）\\n手順1：ログイン後、左側ナビゲーションバーの\\\"API Key\\\"をクリック\\n手順2：API Keyを作成（\\\"サービス\\\"で\\\"Qianfan AppBuilder\\\"を選択し、必要に応じてアプリケーションリソースを設定）\\n手順3：作成完了後、API Keyをコピーして下記フォームに入力してください。\"\n    },\n    \"53ai\": {\n      \"tip\": \"前往 53AI（{url}） 第一步：登录后，点击左侧导航栏的 \\\"设置\\\"\\n第二步：在\\\"企业信息\\\"下点击生成Secret Key\\n第三步：生成后，复制Sercet Key填入下列表单。\"\n    }\n  },\n  \"agent_app\": {\n    \"prompt\": \"Prompt\",\n    \"prompt_v2\": \"プロンプトで作成\",\n    \"53ai_agent\": \"53AI\",\n    \"53ai_workflow\": \"53AI\",\n    \"coze_agent_cn\": \"Coze\",\n    \"coze_workflow_cn\": \"Coze\",\n    \"coze_agent\": \"Cozeインテリジェントエージェント\",\n    \"coze_workflow\": \"Cozeアプリケーションインテリジェント\",\n    \"dify_agent\": \"Dify\",\n    \"dify_workflow\": \"Dify\",\n    \"app_builder\": \"千帆Appbuilder\",\n    \"yuanqi\": \"Tencent Yuanqi\",\n    \"bailian\": \"Alibaba Bailian\",\n    \"volcengine\": \"Volcengine\",\n    \"fastgpt_agent\": \"FastGPT\",\n    \"fastgpt_workflow\": \"FastGPT\",\n    \"maxkb_agent\": \"MaxKB\",\n    \"n8n_workflow\": \"n8n\",\n    \"tencent\": \"Tencent Cloud\",\n    \"check_agent_config_tip\": \"智能体配置が正しいか確認してください\",\n    \"failed_tip\": \"認証キーが使用可能かどうか、および残高が充足しているかどうかを確認してください\"\n  },\n  \"provider_platform\": {\n    \"prompt\": \"Prompt\",\n    \"openai\": \"OpenAI\",\n    \"deepseek\": \"DeepSeek\",\n    \"coze\": \"Coze\",\n    \"siliconflow\": \"SiliconFlow\",\n    \"zhipu\": \"Zhipu\",\n    \"azure\": \"Azure OpenAI\",\n    \"azure_open_ai\": \"Azure OpenAI\",\n    \"dark_moon\": \"Dark Moon\",\n    \"tongyi\": \"Tongyi\",\n    \"coze_cn\": \"Coze\",\n    \"app_builder\": \"BaiduQianfan Appbuilder\",\n    \"dify\": \"Dify\",\n    \"53ai\": \"53AI\",\n    \"bailian\": \"Alibaba Bailian\",\n    \"volcengine\": \"Volcengine\",\n    \"yuanqi\": \"Tencent Yuanqi\",\n    \"fastgpt\": \"FastGPT\",\n    \"maxkb\": \"MaxKB\",\n    \"n8n\": \"n8n\",\n    \"qianfan\": \"Qianfan\",\n    \"tencent\": \"Tencent Cloud Intelligent Agent Development Platform\"\n  },\n  \"register_user\": {\n    \"title\": \"登録ユーザー\"\n  },\n  \"internal_user\": {\n    \"title\": \"内部ユーザー\",\n    \"alias\": \"連絡先\",\n    \"account\": {\n      \"title\": \"アカウント\",\n      \"search_placeholder\": \"メンバー名/電話番号/電子メール\",\n      \"name\": \"名前\",\n      \"nickname\": \"ニックネーム\",\n      \"mobile\": \"電話番号\",\n      \"group\": \"グループ\",\n      \"department\": \"部門\",\n      \"status\": \"ステータス\",\n      \"add\": \"アカウントを追加\",\n      \"name_placeholder\": \"名前を入力してください\",\n      \"name_disabled_tip\": \"名前は第三者の同期から来ているため、変更できません\",\n      \"nickname_placeholder\": \"ニックネームを入力してください\",\n      \"mobile_placeholder\": \"電話番号を入力してください\",\n      \"mobile_disabled_tip\": \"注意: 所輸入の電話番号は、メンバー本人のログイン電話番号と一致している必要があります\",\n      \"password_placeholder\": \"初期パスワードを入力してください\",\n      \"department_placeholder\": \"部門を選択してください\",\n      \"same_member_exists_tip\": \"メンバーの電話番号がすでに存在します\",\n      \"same_mobile_exists_tip\": \"第{index}個のメンバーの電話番号と同じです\",\n      \"register_to_internal_confirm\": \"電話番号 ({mobile}) はすでに登録されています。内部ユーザーにアップグレードしますか？\",\n      \"edit_member\": \"メンバーを編集\"\n    },\n    \"organization\": {\n      \"title\": \"組織\",\n      \"all_search_placeholder\": \"メンバー/部門\",\n      \"user_search_placeholder\": \"メンバー\",\n      \"department_search_placeholder\": \"部門\"\n    },\n    \"group\": {\n      \"title\": \"グループ\",\n      \"search_placeholder\": \"グループを検索\",\n      \"search_placeholder_v2\": \"グループ名を検索\",\n      \"create\": \"新しいグループを作成\",\n      \"member\": \"メンバー\",\n      \"usable\": \"可使用\",\n      \"remove_user_confirm\": \"このメンバーを削除してもよろしいですか？\",\n      \"remove_agent_confirm\": \"このインテリジェントエージェントを削除してもよろしいですか？\",\n      \"remove_prompt_confirm\": \"このプロンプトを削除することを確認しますか？\",\n      \"remove_ai_toolkit_confirm\": \"この AI ツールを削除することを確認しますか？\",\n      \"create_tip\": \"グループを先に作成してください\"\n    },\n    \"status\": {\n      \"all\": \"全てのメンバー\",\n      \"undefined\": \"未加入\",\n      \"enabled\": \"加入中\",\n      \"disabled\": \"被禁用\"\n    },\n    \"action\": {\n      \"disabled\": \"無効\",\n      \"disabled_success\": \"無効\",\n      \"enable\": \"有効\",\n      \"enable_success\": \"有効\"\n    },\n    \"department\": {\n      \"add\": \"部門を追加\",\n      \"add_children\": \"子部門を追加\",\n      \"update_name\": \"名前を更新\",\n      \"move_up\": \"上に移動\",\n      \"move_down\": \"下に移動\",\n      \"delete\": \"削除\",\n      \"delete_confirm\": \"この部門を削除してもよろしいですか？\",\n      \"create\": \"部門を作成\",\n      \"edit\": \"部門を編集\",\n      \"name\": \"部門名\",\n      \"name_placeholder\": \"部門名を入力してください\",\n      \"member_total_count\": \"（{total}人）\"\n    },\n    \"scope\": {\n      \"title\": \"可見範圍\",\n      \"selected_title\": \"選択済み項目\"\n    }\n  },\n  \"admin_user\": {\n    \"title\": \"管理員\",\n    \"search_placeholder\": \"管理員アカウントを入力してください\",\n    \"delete_confirm\": \"このデータを削除してもよろしいですか？\"\n  },\n  \"role\": {\n    \"title\": \"角色\",\n    \"normal\": \"一般用户\",\n    \"admin\": \"管理員\",\n    \"creator\": \"创建者\"\n  },\n  \"prompt\": {\n    \"title\": \"プロンプト\",\n    \"search_placeholder\": \"プロンプトを検索\",\n    \"delete_confirm\": \"このデータを削除してもよろしいですか？\",\n    \"config\": \"プロンプト設定\",\n    \"guide\": \"使用ガイド\",\n    \"content\": \"プロンプト内容\"\n  },\n  \"navigation\": {\n    \"title\": \"ナビゲーション管理\",\n    \"search_placeholder\": \"ナビゲーションを検索\",\n    \"delete_confirm\": \"このデータを削除してもよろしいですか？\",\n    \"type\": {\n      \"system\": \"システム内蔵\",\n      \"external\": \"外部リンク\",\n      \"custom\": \"カスタムページ\"\n    },\n    \"target\": {\n      \"self\": \"現在のウィンドウ\",\n      \"blank\": \"新しいウィンドウ\"\n    },\n    \"web_setting\": \"ページ編集\"\n  },\n  \"sso\": {\n    \"title\": \"シングルサインオン\",\n    \"sync_corp\": \"同期企業\",\n    \"wecom\": {\n      \"title\": \"企業微信\",\n      \"abbr_title\": \"企微\",\n      \"access_title\": \"接入企微\",\n      \"access_desc\": \"企業微信管理員掃碼安裝接入\",\n      \"sync_desc\": \"完成企業微信憑據授權の綁定後，可綁定企業微信賬號源，導入企業微信成員目錄\",\n      \"sync_tip\": \"企業微信組織構造が同期されています\"\n    },\n    \"dingtalk\": {\n      \"title\": \"釘釘\",\n      \"abbr_title\": \"釘釘\",\n      \"access_title\": \"接入釘釘\",\n      \"access_desc\": \"創建企業內部應用實現接入\",\n      \"sync_desc\": \"完成釘釘授權の綁定後，可綁定釘釘賬號源，導入釘釘成員目錄\",\n      \"sync_tip\": \"DingTalk の組織構造が同期されました。\"\n    },\n    \"ad_ldap\": {\n      \"title\": \"AD/LDAP\",\n      \"abbr_title\": \"AD/LDAP\",\n      \"access_title\": \"接入AD/LDAP\",\n      \"access_desc\": \"綁定 AD/LDAP 後，可導入 AD/LDAP 成員目錄，實現 AD/LDAP 帳號單点登錄 53Hub\"\n    },\n    \"api_access\": {\n      \"title\": \"API連携\",\n      \"access_title\": \"API連携\",\n      \"access_desc\": \"API認証によるワンポイントログインは、リンクをクリックするだけでログインが完了し、パスワードを手入力する必要がありません\"\n    },\n    \"feishu\": {\n      \"title\": \"飛書\",\n      \"abbr_title\": \"飛書\",\n      \"access_title\": \"接入飛書\",\n      \"access_desc\": \"企業管理員掃碼安裝接入\",\n      \"sync_desc\": \"完成飛書授權の綁定後，可綁定飛書賬號源，導入飛書成員目錄\"\n    },\n    \"auth_access\": \"授權接入\",\n    \"organization_sync\": \"組織同步\",\n    \"access_title\": \"接入{title}\",\n    \"access_desc\": \"需要{title}管理員掃碼安裝\",\n    \"access_desc_v2\": \"已有{title}可直接掃碼授權，尚未註冊{title}請先註冊\",\n    \"goto_access\": \"前往{title}授權\",\n    \"goto_register\": \"去註冊{title}\",\n    \"sync_confirm\": \"同步後{title}組織將會覆蓋當前組織，不可恢復\",\n    \"sync_cancel\": \"取消同步將會恢復到最初始組織狀態\",\n    \"sync_cancel_tip\": \"取消同步\",\n    \"authorized_enterprise\": \"授權企業\",\n    \"unauthorized\": \"解除授權\",\n    \"bind_member\": \"メンバーを関連付ける\",\n    \"unbind_member\": \"メンバーを関連付け解除する\",\n    \"bind_member_tip\": \"このメンバーを現在のユーザーに関連付けますか？\",\n    \"unbind_member_tip\": \"このメンバーを関連付け解除しますか？\",\n    \"auth_completed_tip\": \"確認您已完成應用綁定，確認後將刷新頁面\",\n    \"access_setting\": \"アクセス設定です\",\n    \"access_method\": \"アクセス方法です: \",\n    \"method_tip1\": \"1、1つのジャンプでユーザ識別認証を完了してシングルサインオンを実現します\",\n    \"method_tip2\": \"2、リンク形式は次の通りです：\",\n    \"method_tip3\": \"3、パラメータ説明です：\",\n    \"username_tip\": \"携帯電話でもメールでもかまいません\",\n    \"timestamp_tip\": \"現在のタイムスタンプ(このリンクは10分で無効になります)\",\n    \"sign_tip\": \"timestamp={timestamp}&username={username}をつなぎ合わせたSercetのmd5値です\",\n    \"enable_encryption\": \"暗号化を可能にします：\",\n    \"API_documentation\": \"APIドキュメントです\",\n    \"save_success\": \"保存成功です\"\n  },\n  \"action_visit\": \"訪問します\",\n  \"action_test\": \"テスト\",\n  \"action_add\": \"追加\",\n  \"action_add_success\": \"追加しました\",\n  \"action_create\": \"作成\",\n  \"action_edit\": \"編集\",\n  \"action_save\": \"保存\",\n  \"action_save_success\": \"保存しました\",\n  \"action_save_failed\": \"保存失敗\",\n  \"action_sync_start\": \"同期開始\",\n  \"action_sync_failed\": \"同期失敗\",\n  \"action_test_success\": \"可用\",\n  \"action_test_failed\": \"不可用\",\n  \"action_delete\": \"削除\",\n  \"action_delete_tip\": \"削除ヒント\",\n  \"action_delete_confirm\": \"このデータを削除してもよろしいですか？\",\n  \"action_delete_success\": \"削除しました\",\n  \"action_remove\": \"削除\",\n  \"action_remove_success\": \"削除しました\",\n  \"action_confirm\": \"確認\",\n  \"action_confirm_success\": \"確認しました\",\n  \"action_cancel\": \"キャンセル\",\n  \"action_select\": \"選択\",\n  \"action_sort\": \"並べ替え\",\n  \"action_sort_success\": \"並べ替えが更新されました\",\n  \"action_setting\": \"設定\",\n  \"action_enable\": \"有効化\",\n  \"action_enable_success\": \"有効化しました\",\n  \"action_disable\": \"無効化\",\n  \"action_disable_success\": \"無効化しました\",\n  \"action_upload\": \"アップロード\",\n  \"action_upgrade\": \"アップグレード\",\n  \"action_renew\": \"更新\",\n  \"action_renew_v2\": \"更新\",\n  \"action_modify\": \"修正\",\n  \"action_view_example\": \"例を表示\",\n  \"action_authorize\": \"認証\",\n  \"action_authorize_success\": \"認証しました\",\n  \"action_copy\": \"コピー\",\n  \"action_copy_success\": \"コピーしました\",\n  \"action_replace\": \"置換\",\n  \"action_clear\": \"クリア\",\n  \"action_search\": \"検索\",\n  \"action_close\": \"閉じる\",\n  \"action_view_more\": \"もっと見る\",\n  \"action_open\": \"開く\",\n  \"action_send\": \"送信\",\n  \"action_send_success\": \"送信しました\",\n  \"action_login\": \"ログイン\",\n  \"action_login_success\": \"ログインしました\",\n  \"action_register\": \"登録\",\n  \"action_register_and_login\": \"登録してログイン\",\n  \"action_register_success\": \"登録しました\",\n  \"action_reset\": \"リセット\",\n  \"action_preview\": \"プレビュー\",\n  \"action_amplify\": \"拡大\",\n  \"action_shrink\": \"縮小\",\n  \"action_stop_generation\": \"生成停止\",\n  \"action_restart_generation\": \"再生成\",\n  \"action_update\": \"更新\",\n  \"action_update_success\": \"更新しました\",\n  \"action_next_step\": \"次のステップ\",\n  \"action_exit\": \"ログアウト\",\n  \"action_exit_success\": \"ログアウトしました\",\n  \"action_exit_confirm\": \"ログアウトしますか？\",\n  \"action_select_file\": \"+ ファイルを選択\",\n  \"action_manage\": \"管理\",\n  \"action_go\": \"前往\",\n  \"action_rename\": \"名前を変更\",\n  \"action_bind\": \"関連付ける\",\n  \"action_unbind\": \"関連付け解除する\",\n  \"action_bind_success\": \"関連付けました\",\n  \"action_unbind_success\": \"関連付け解除しました\",\n  \"action_confirm_payment\": \"確認支払い\",\n  \"action_confirm_payment_success\": \"確認しました\",\n  \"completion_completed\": \"深い思考が完了しました\",\n  \"completion_thinking\": \"深く考えています...\",\n  \"form_input_placeholder\": \"入力してください\",\n  \"form_input_placeholder_max_length\": \"最大入力{max}文字\",\n  \"form_select_placeholder\": \"選択してください\",\n  \"form_upload_placeholder\": \"アップロードしてください\",\n  \"form_link_validator\": \"正しいリンクアドレスを入力してください\",\n  \"form_account_validator\": \"アカウントにスペースを含めることはできません\",\n  \"form_mobile_validator\": \"正しい携帯電話番号を入力してください\",\n  \"form_email_validator\": \"正しい電子メールアドレスを入力してください\",\n  \"form_mobile_or_email_validator\": \"正しい携帯電話番号または電子メールアドレスを入力してください\",\n  \"form_password_validator\": \"パスワードには日本語やスペースを含めることはできません\",\n  \"form_url_validator\": \"正しいURLアドレスを入力してください\",\n  \"form_path_validator\": \"正しいパスアドレスを入力してください(例:/index)\",\n  \"form_path_same_tip\": \"すでに同じパスアドレスが存在します。再入力してください\",\n  \"form_image_validator\": \"正しい画像をアップロードしてください\",\n  \"form_variable_validator\": \"変数名には英字、数字、アンダースコアのみ使用できます。数字で始まることはできません\",\n  \"form_port_validator\": \"ポートは数字のみで入力してください\",\n  \"form_account_exit\": \"この共有アカウントは既に存在します\",\n  \"form_delete_confirm\": \"この共有アカウントを削除してもよろしいですか？\",\n  \"form_hide_logo\": \"技術サポートロゴを非表示\",\n  \"enterprise_edition\": \"エンタープライズ版\",\n  \"image_cropper\": \"画像裁剪\",\n  \"reupload\": \"再アップロード\",\n  \"wechat\": \"WeChat\",\n  \"alipay\": \"Alipay\",\n  \"enabled\": \"有効\",\n  \"disabled\": \"無効\",\n  \"setting\": \"設定済み\",\n  \"not_setting\": \"未設定\",\n  \"updated_at\": \"更新日時\",\n  \"yearly\": \"年間\",\n  \"year\": \"年\",\n  \"monthly\": \"月間\",\n  \"month\": \"月\",\n  \"expired_time\": \"有効期限\",\n  \"basic_info\": \"基本情報\",\n  \"connected\": \"連携済み\",\n  \"connecting\": \"連携中\",\n  \"not_connected\": \"未連携\",\n  \"connecting_agent_total\": \"連携済み {total} 個應用\",\n  \"authorized_at\": \"認証日時\",\n  \"no_data\": \"データなし\",\n  \"effective\": \"有効\",\n  \"https_enabled\": \"HTTPS有効\",\n  \"group\": \"グループ\",\n  \"all\": \"全て\",\n  \"all_group\": \"全てのグループ\",\n  \"user\": \"ユーザー\",\n  \"mobile\": \"電話番号\",\n  \"verification_code\": \"検証コード\",\n  \"verification_code_placeholder\": \"検証コードを入力してください\",\n  \"get_verification_code\": \"検証コードを取得\",\n  \"shared_account\": \"共有アカウント\",\n  \"subscription\": {\n    \"title\": \"サブスクリプション\",\n    \"end_at\": \"サブスクリプション期限\",\n    \"transfer_title\": \"サブスクリプション削除\",\n    \"transfer_desc\": \"以下のサブスクリプションを削除し、ユーザーを新しいサブスクリプションに移行します\",\n    \"transfer_to\": \"移行先\"\n  },\n  \"register_time\": \"登録日時\",\n  \"created_time\": \"作成日時\",\n  \"add_time\": \"添加時間\",\n  \"operation\": \"運用\",\n  \"language\": \"言語\",\n  \"website_domain\": \"サイトドメイン\",\n  \"website_home\": \"サイトホーム\",\n  \"create_time\": \"作成日時\",\n  \"update_time\": \"更新日時\",\n  \"service_expired_time\": \"サービス期限\",\n  \"configuration_completion\": \"設定完了度\",\n  \"description\": \"説明\",\n  \"pictorial_image\": \"示図\",\n  \"type\": \"タイプ\",\n  \"all_type\": \"すべてのタイプ\",\n  \"usage_record\": \"使用記録\",\n  \"usage_guide\": \"使用ガイド\",\n  \"dialogue_record\": \"対話記録\",\n  \"user_info\": \"ユーザー情報\",\n  \"avatar\": \"アバター\",\n  \"remark\": \"備考\",\n  \"login_password\": \"ログインパスワード\",\n  \"bind_account\": \"バインドアカウント\",\n  \"mobile_v2\": \"電話番号\",\n  \"email\": \"電子メール\",\n  \"open_id\": \"OpenID\",\n  \"google_account\": \"Googleアカウント\",\n  \"not_bound\": \"未バインド\",\n  \"all_order\": \"全ての注文\",\n  \"all_order_payment\": \"全ての支払い方式\",\n  \"order_id\": \"注文ID\",\n  \"order_no\": \"注文番号\",\n  \"order_subscription\": \"サブスクリプション\",\n  \"order_amount\": \"注文金額\",\n  \"order_status\": \"注文ステータス\",\n  \"order_status_pending\": \"未支払い\",\n  \"order_status_paid\": \"支払い済み\",\n  \"order_status_refunded\": \"返金済み\",\n  \"order_status_timeout\": \"超時\",\n  \"order_status_expired\": \"期限切れ\",\n  \"order_create_time\": \"注文日時\",\n  \"order_payment_type\": \"注文タイプ\",\n  \"order_payment_type_wechat\": \"WeChat\",\n  \"order_payment_type_alipay\": \"Alipay\",\n  \"order_payment_type_manual\": \"手動送金\",\n  \"order_subscription_version\": \"サブスクリプションバージョン\",\n  \"order_subscription_duration\": \"サブスクリプション期間\",\n  \"table_footer_text\": \"全てのグループ {total} 件\",\n  \"app_config\": \"アプリケーション設定\",\n  \"market_insight\": \"市場洞察\",\n  \"opportunity_capture\": \"商機捕獲\",\n  \"product_mastery\": \"吃透産品\",\n  \"media_operation\": \"媒体運用\",\n  \"usage_case\": \"使用例\",\n  \"usage_case_desc\": \"アプリケーションに使用例を追加して、ユーザーがより容易に開始できるようにします\",\n  \"input\": \"入力\",\n  \"output\": \"出力\",\n  \"output_variable\": \"出力変数\",\n  \"usage_scene\": \"使用シナリオ\",\n  \"usage_scene_desc\": \"アプリケーションに使用シナリオを追加して、ユーザーがより容易に開始できるようにします\",\n  \"image\": \"画像\",\n  \"database_management\": \"データベース管理\",\n  \"database_management_desc\": \"データベース管理者と開発者は、このツールを使用して、SQL文を迅速に生成し、データベースを照会、更新、管理し、作業効率を向上させることができます。\",\n  \"scene\": \"シナリオ\",\n  \"function_update\": \"機能更新\",\n  \"function_update_desc\": \"製品機能更新動態\",\n  \"notification_center\": \"通知センター\",\n  \"access_model\": \"接続モデル\",\n  \"name\": \"名前\",\n  \"role_instruction\": \"役割指示\",\n  \"role_instruction_desc\": \"AI の回答に対して一連の指示と制約を作成するために使用されます\",\n  \"optimize\": \"最適化\",\n  \"optimize_tip\": \"役割指示の最適化\",\n  \"generate_tip\": \"役割指示の生成\",\n  \"icon\": \"アイコン\",\n  \"website_name\": \"サイト名\",\n  \"group_management\": \"グループ管理\",\n  \"display_order\": \"表示順\",\n  \"permission_setting\": \"権限設定\",\n  \"expand_setting\": \"拡張設定\",\n  \"base_setting\": \"欢迎语\",\n  \"over_response\": \"超えた場合のデフォルトの回答\",\n  \"visible_range\": \"表示範囲\",\n  \"dialogue_frequency\": \"会話頻度\",\n  \"dialogue_total\": \"会話総数\",\n  \"limit\": \"制限\",\n  \"second\": \"秒\",\n  \"send\": \"送信\",\n  \"unit_messages\": \"メッセージ\",\n  \"unit_messages_v2\": \"件\",\n  \"over_message\": \"超えた場合のデフォルトの回答\",\n  \"limit_every_dialogue\": \"各ユーザーの総会話数を制限する\",\n  \"select_agent\": \"エージェントを選択\",\n  \"debug_preview\": \"デバッグプレビュー\",\n  \"restart\": \"再起動\",\n  \"start_running\": \"実行開始\",\n  \"sync_output_variable\": \"同期出力変数（どうきしゅつりょくへんすう）\",\n  \"not_found_url\": \"URL が見つかりません。エージェントの設定を確認してください\",\n  \"message_input_placeholder\": \"メッセージを入力するか、質問を入力してください...\",\n  \"workspace\": \"ワークスペース\",\n  \"edit_agent\": \"エージェントを編集\",\n  \"coze_workflow_link\": \"Cozeワークフロー\\\"編集状態\\\"のリンク\",\n  \"model_name\": \"モデル名\",\n  \"model_name_placeholder\": \"モデル名を入力してください\",\n  \"prompt_placeholder\": \"プロンプトを入力してください\",\n  \"copyright_desc\": \"Copyright © 2014-{year} 53AI. All rights reserved.\",\n  \"no_permission_tip\": \"この機能を使用する権限がありません。管理者に問い合わせてください。\",\n  \"not_found_tip\": \"ページが見つからないか、この機能を使用する権限がありません。管理者に問い合わせてください。\",\n  \"go_home\": \"ホームページに戻る\",\n  \"register\": \"登録\",\n  \"username\": \"ユーザー名\",\n  \"account\": \"アカウント\",\n  \"password\": \"パスワード\",\n  \"group_min_one\": \"少なくとも1つのグループを保持してください\",\n  \"group_delete_confirm\": \"このグループを削除してもよろしいですか？\",\n  \"group_not_empty\": \"グループを空にすることはできません\",\n  \"agent_delete_confirm\": \"このインテリジェントエージェントを削除してもよろしいですか？\",\n  \"feature_coming_soon\": \"機能はすぐに登場します。お楽しみに！\",\n  \"silicon_flow\": \"シリコンフロー\",\n  \"deep_seek\": \"深度求索\",\n  \"openai\": \"OpenAI\",\n  \"azure_open_ai\": \"Azure OpenAI\",\n  \"dark_moon\": \"月の暗さ\",\n  \"chat_glm\": \"ChatGLM\",\n  \"tongyi\": \"通義千問\",\n  \"coze_cn\": \"扣子\",\n  \"dify\": \"Dify\",\n  \"app_builder\": \"百度千帆AppBuilder\",\n  \"coze\": \"Coze\",\n  \"53ai\": \"53AI\",\n  \"fast_gpt\": \"FastGPT\",\n  \"yuanqi\": \"Tencent Yuanqi\",\n  \"bailian\": \"Alibaba Bailian\",\n  \"volcengine\": \"Volcengine\",\n  \"sort\": \"ソート\",\n  \"official_website\": \"ホーム\",\n  \"create_new_enterprise\": \"新しい企業 / 組織を作成する\",\n  \"return\": \"戻る\",\n  \"apply_open\": \"申請開通\",\n  \"user_register\": \"ユーザー登録\",\n  \"account_register\": \"アカウント登録\",\n  \"or\": \"または\",\n  \"other_login_method\": \"その他のログイン方法\",\n  \"account_psd\": \"アカウントとパスワード\",\n  \"mobile_login\": \"SMS ログイン\",\n  \"apply_success\": \"申請成功\",\n  \"apply_success_desc\": \"管理者が審査を行い、承認された後に使用できるようになります\",\n  \"agent_not_found\": \"まずは保存してから、インテリジェントエージェントを作成してください\",\n  \"agent_channel_type_not_found\": \"チャネルタイプが見つからないため、まず保存してから、インテリジェントエージェントを作成してください\",\n  \"permanent_effect\": \"永久効果\",\n  \"empty_to_not_change\": \"空のままにすると変更しません\",\n  \"api_host\": \"後端サービスAPI\",\n  \"ap_host_fastgpt\": \"APIルートアドレス\",\n  \"api_screet\": \"APIシークレットキー\",\n  \"api_botid\": \"Bot ID\",\n  \"api_botid_en\": \"Bot ID\",\n  \"api_appid\": \"App ID\",\n  \"api_key\": \"API Key\",\n  \"agent_type\": \"インテリジェントエージェントタイプ\",\n  \"agent_type_chat\": \"会話型アプリケーション\",\n  \"agent_type_chat_v2\": \"チャットタイプ\",\n  \"agent_type_completion\": \"ワークフロー型アプリケーション\",\n  \"agent_type_completion_v2\": \"アプリケーションタイプ\",\n  \"agent_type_workflow\": \"ワークフロー編排会話型アプリケーション\",\n\n  \"agent_file_parse\": \"ドキュメント解析\",\n  \"agent_image_parse\": \"画像認識\",\n\n  \"app_type\": \"应用类型\",\n  \"how_get\": \"如何获取\",\n  \"53ai_api_endpoint\": \"API Endpoint\",\n  \"53ai_api_screet\": \"Secret Key\",\n  \"upload_pem_file_tip\": \"pemファイルをアップロードしてください\",\n  \"usage_range\": \"使用範囲\",\n  \"internal_member_group\": \"内部メンバーのグルーピング\",\n  \"dify_agent_get_tip\": \"Difyにログイン（{url}） \\nステップ1：アクセスするインテリジェントエージェントを選択し、\\\"APIアクセス\\\"をクリック \\nステップ2：右上の\\\"APIサーバー\\\"と\\\"APIシークレットキー\\\"をコピーし、以下のフォームに入力してください。\",\n  \"53ai_agent_get_tip\": \"53AIにログイン（{url}） \\n ステップ1：アクセスするインテリジェントエージェントを選択し、\\\"APIアクセス\\\"をクリック \\n ステップ2：\\\"APIエンドポイント\\\" 、 \\\"Bot-Id\\\" と \\\"SECRET_KEY\\\"をコピーし、以下のフォームに入力してください。\",\n  \"bailian_agent_get_tip\": \"Alibaba Bailianにログイン（{ url }）\\n ステップ1：Alibaba Bailianにログインし、アプリケーションを選択（または作成）し、\\\"公開\\\"をクリックし、API-KEYを取得し、以下に入力してください。\\n ステップ2：Alibaba Bailianの現在のURLからassistant/の後の部分をコピーし、以下に入力してください。\\n 付帯ヘルプ：APP IDとWorkspace IDの取得方法（{ help_url }）\",\n  \"volcengine_agent_get_tip\": \"Volcano Engine（{ url }）にアクセス \\n手順1：Volcano Arkにログインし、マイアプリケーション（{ my_url }）をクリック\\n手順2：既存のアプリケーション（または新規作成）をクリックし、左上のbot-xxxxxx（コピーボタンあり）をコピーして下のフォームに貼り付け\\n手順3：右上の「APIコールガイド」をクリックし、API Keyを選択してコピーし、キーを下のフォームに貼り付け\",\n  \"yuanqi_agent_get_tip\": \"テンセントYuanqi（{ url }）にアクセス \\n手順1：テンセントYuanqiにログインし、マイクリエイションに移動。\\n手順2：AIエージェントカードの右下にある詳細ボタンをクリックし、API呼び出しをクリック（新規エージェントは審査後に利用可能）。\\n手順3：エージェントIDをコピーし、下のフォームに貼り付け。\\n手順4：トークンをコピーし、下のフォームに貼り付け。\",\n  \"fastgpt_agent_get_tip\": \"FastGPT（ {url} ）にアクセス \\n手順1：FastGPTにログインし、「ワークスペース」に入り、接続したいアプリケーションを選択。\\n手順2：アプリケーションに入り、「配信チャネル」で「APIアクセス」を選択。\\n手順3：APIキー管理で新規作成をクリックし、作成後「API KEY」をコピーしてフォームに入力。\\n手順4：「APIルートアドレス」をコピーし、フォームに入力。\",\n  \"maxkb_agent_get_tip\": \"MaxKB（ {url} ）にアクセス \\n手順1：MaxKBクライアントをダウンロード。\\n手順2：「アプリケーション」でアクセスしたいアプリケーションをクリック。\\n手順3：「APIアクセス資格」でBase URLをコピーし、API Keyを作成してフォームに入力。\",\n  \"tip\": \"ヒント\",\n  \"auth_required\": \"{provider_name}未授權，請先前往{provider_name}授權\",\n  \"intelligent_agent_platform\": \"インテリジェントエージェントプラットフォーム\",\n  \"cloud_computing_platform\": \"クラウドコンピューティングプラットフォーム\",\n  \"model_platform\": \"モデルプラットフォーム\",\n  \"local_config_limited_tip\": \"設定受限提示\",\n  \"local_config_limited_desc\": \"現在のシステムアクセスが内部ネットワークアドレス({url})であるため、Coze インテリジェントエージェント、WeChat支払い、Alipay支払いを追加/設定できません。外部からアクセスできるアドレスにデプロイして設定する必要があります。\",\n  \"know_it\": \"わかった\",\n  \"selected_tip\": \"選択済み {total} 個\",\n  \"support_image\": \"画像をサポート\",\n  \"debugger_config_change_confirm\": \"設定を変更するとデバッグ領域がリセットされます。保存して再開する必要があります\",\n  \"save_and_restart\": \"保存して再開\",\n  \"title\": \"タイトル\",\n  \"commom\": {\n    \"add_manual\": \"手動追加\",\n    \"add_market\": \"アプリケーションマーケットから追加\"\n  },\n  \"jump_path\": \"ジャンプパス\",\n  \"open_method\": \"オープンメソッド\",\n  \"navigation_is_open\": \"ナビゲーション表示\",\n  \"page_edit\": \"ページ編集\",\n  \"last_edit\": \"最近編集\",\n  \"opening_statement\": \"開場白\",\n  \"suggested_questions\": \"提問引導\",\n  \"max_add_tip\": \"最大{max}個\",\n  \"join_group\": \"グループに参加\",\n  \"join_group_desc\": \"グループに参加して、一緒に学び、進歩しましょう\",\n  \"start_time\": \"開始時間\",\n  \"end_time\": \"結束時間\",\n  \"filter\": \"フィルター\",\n  \"user/mobile\": \"ユーザー/携帯電話番号\",\n  \"summary\": \"要約\",\n  \"message_count\": \"メッセージ数\",\n  \"detail\": \"詳細\",\n  \"dialogue_detail\": \"対話詳細\",\n  \"more\": \"もっと\",\n  \"keyword\": \"キーワード\",\n  \"software_style\": \"ソフトウェアスタイル\",\n  \"website_style\": \"ウェブサイトスタイル\",\n  \"system_log\": {\n    \"log_label\": \"ログ\",\n    \"log_action\": \"動作\",\n    \"log_module\": \"モジュール\",\n    \"log_operator\": \"操作人\",\n    \"log_time\": \"時間\",\n    \"log_ip\": \"IP\"\n  },\n  \"version\": {\n    \"title\": \"バージョン\",\n    \"scan_consult\": \"スキャン相談\",\n    \"upgrade_tip\": \"アップグレードヒント\",\n    \"upgrade\": \"アップグレードバージョン\",\n    \"upgrade_renew\": \"バージョンアップ / 更新\",\n    \"not_support\": \"現在のバージョンはサポートされていません\",\n    \"agent_limit\": \"アジェント追加制限、アップグレードして追加してください\",\n    \"upgrade_hide_logo\": \"エンタープライズ版にアップグレードし、技術サポートのロゴを非表示にする機能を有効にします\"\n  },\n  \"knowledge\": {\n    \"name\": \"知識\",\n    \"short_name\": \"知識\"\n  },\n  \"space\": {\n    \"title\": \"空間\",\n    \"search_placeholder\": \"空間名を入力してください\",\n    \"name\": \"空間\",\n    \"name_placeholder\": \"空間名を入力してください\",\n    \"icon\": \"アイコン\",\n    \"capacity\": \"容量\",\n    \"description\": \"説明\",\n    \"description_placeholder\": \"説明を入力してください\",\n    \"delete_tip\": \"現在の空間に{total}個の知識があります。知識を先に削除してから空間を削除してください\",\n    \"system\": \"システム\",\n    \"system_space_delete_tip\": \"システム空間、削除できません\"\n  },\n  \"common\": {\n    \"name\": \"名前\",\n    \"short_name\": \"簡略名\",\n    \"member\": \"メンバー\",\n    \"creator\": \"作成者\",\n    \"created_time\": \"作成日時\"\n  },\n  \"action\": {\n    \"create\": \"作成\",\n    \"add\": \"追加\",\n    \"added\": \"追加済み\",\n    \"edit\": \"編集\",\n    \"manage\": \"管理\",\n    \"delete\": \"削除\",\n    \"save\": \"保存\",\n    \"operation\": \"操作\",\n    \"more\": \"もっと\",\n    \"cancel\": \"キャンセル\",\n    \"setting\": \"設定\",\n    \"confirm\": \"確認\"\n  },\n  \"default_links\": {\n    \"default_setting\": \"デフォルト設定\",\n    \"website\": \"ウェブサイト\",\n    \"jump_path\": \"ジャンプパス\"\n  },\n  \"message_status\": {\n    \"create_success\": \"作成済み\",\n    \"save_success\": \"保存済み\",\n    \"logic_reasoning_required\": \"請選擇邏輯推理模型\",\n    \"vector_embedding_required\": \"請選擇向量嵌入模型\",\n    \"rerank_model_required\": \"請選擇rerank模型\"\n  },\n  \"agent\": {\n    \"name\": \"エージェント\",\n    \"name_v2\": \"インテリジェントエージェント名\",\n    \"base_info\": \"基礎情報\",\n    \"input_variable\": \"入力\",\n    \"output_variable\": \"出力\",\n    \"variable_name\": \"変数名称\",\n    \"variable_type\": \"変数タイプ\",\n    \"variable_label\": \"表示名\",\n    \"variable_desc\": \"説明\",\n    \"variable_required\": \"必須\",\n    \"variable_max_length\": \"最大長\",\n    \"variable_show_word_limit\": \"単語数表示\",\n    \"variable_options\": \"オプション\",\n    \"coze\": {\n      \"workspace\": \"ワークスペース\",\n      \"workflow_link\": \"Cozeワークフロー\\\"編集状態\\\"のリンク\",\n      \"agent_type_chat\": \"会話型アプリケーション\",\n      \"agent_type_chat_desc\": \"ユーザーが大模型と対話し、大模型が自主的に判断決定する。シンプルな業務ロジックに適しています。\",\n      \"agent_type_workflow\": \"ワークフロー編排会話型アプリケーション\",\n      \"agent_type_workflow_desc\": \"ワークフローは一連の実行可能な命令の集合で、業務ロジックや特定のタスクを実現するために使用されます。\"\n    },\n    \"53ai\": {\n      \"agent_type_chat\": \"会話型アプリケーション\",\n      \"agent_type_chat_desc\": \"ユーザーが大模型と対話し、大模型が自主的に判断決定する。シンプルな業務ロジックに適しています。\",\n      \"agent_type_workflow\": \"ワークフロー編排会話型アプリケーション\",\n      \"agent_type_workflow_desc\": \"ワークフローは一連の実行可能な命令の集合で、業務ロジックや特定のタスクを実現するために使用されます。\"\n    },\n    \"dify\": {\n      \"agent_type_chat\": \"会話型アプリケーション\",\n      \"agent_type_chat_desc\": \"ユーザーが大模型と対話し、大模型が自主的に判断決定する。シンプルな業務ロジックに適しています。\",\n      \"agent_type_workflow\": \"ワークフロー編排会話型アプリケーション\",\n      \"agent_type_workflow_desc\": \"ワークフローは一連の実行可能な命令の集合で、業務ロジックや特定のタスクを実現するために使用されます。\"\n    },\n    \"fastgpt\": {\n      \"agent_type_chat\": \"対話型（簡易アプリケーション/ワークフロー）\",\n      \"agent_type_chat_desc\": \"ユーザーが大模型と対話し、大模型が自主的に判断決定する。シンプルな業務ロジックに適しています。\",\n      \"agent_type_workflow\": \"アプリケーション型（プラグイン）\",\n      \"agent_type_workflow_desc\": \"入力と出力をカスタマイズ可能なワークフローで、通常は繰り返し使用されるワークフローをパッケージ化するために使用されます。\"\n    },\n    \"relate_app\": {\n      \"title\": \"関連シナリオ\",\n      \"desc\": \"エージェントの「出力」を関連シナリオエージェントの「入力」にマッピングし、多シナリオタスクの自動化を実現します。\",\n      \"input_mapping\": \"入力マッピング\",\n      \"execution_rule\": \"実行ルール\",\n      \"auto_execution\": \"自動実行\",\n      \"manual_execution\": \"手動実行\"\n    }\n  },\n  \"form\": {\n    \"input_placeholder\": \"入力してください\",\n    \"select_placeholder\": \"選択してください\",\n    \"set_variable_placeholder\": \"｛#変数｝を設定してください\"\n  },\n  \"file\": {\n    \"type_limit\": \"現在、{accept} 形式のファイルのみサポートしています\",\n    \"size_empty\": \"ファイルの内容を空にすることはできません\",\n    \"size_limit\": \"ファイルのサイズは {size} MB を超えることはできません ({name} のサイズが超過しています)\",\n    \"upload_limit\": \"最大 {limit} 個のファイルをアップロードできます\"\n  },\n  \"variable_type\": {\n    \"text\": \"テキスト\",\n    \"textarea\": \"テキストエリア\",\n    \"inputNumber\": \"数字\",\n    \"select\": \"セレクト\",\n    \"date\": \"日付\",\n    \"tag\": \"タグ\",\n    \"file\": \"ファイル\",\n    \"markdown\": \"マークダウン\",\n    \"image\": \"画像\",\n    \"audio\": \"オーディオ\",\n    \"video\": \"ビデオ\",\n    \"array_text\": \"配列テキスト\",\n    \"array_image\": \"配列画像\",\n    \"array_audio\": \"配列オーディオ\",\n    \"array_video\": \"配列ビデオ\",\n    \"array_file\": \"配列ファイル\"\n  },\n  \"platform\": {\n    \"model_tip\": \"{total} { type } モデル\",\n    \"model_test_success\": \"テスト成功、「{platform}」現在正常に使用できます\",\n    \"model_test_failed\": \"テスト失敗、「{platform}」現在正常に使用できません\",\n    \"failed_tip\": \"テスト失敗：認証キーが使用可能かどうかを確認してください。{error}\"\n  }\n}\n"
  },
  {
    "path": "web/console/src/locales/zh-cn.json",
    "content": "{\n  \"response_code\": {\n    \"success\": \"成功\",\n    \"param_error\": \"参数错误\",\n    \"database_error\": \"数据库错误\",\n    \"network_error\": \"网络错误，请重新尝试\",\n    \"system_error\": \"系统错误\",\n    \"auth_error\": \"认证错误\",\n    \"not_found_error\": \"未找到错误\",\n    \"unauthorized_error\": \"身份认证错误\",\n    \"file_error\": \"文件错误\",\n    \"forbidden_error\": \"禁止错误\",\n    \"agent_error\": \"智能体错误\",\n    \"token_expired_error\": \"身份过期错误\",\n    \"verification_code_error\": \"验证码不正确\"\n  },\n  \"response_message\": {\n    \"unknown_error\": \"未知错误\",\n    \"user_not_found\": \"用户不存在\",\n    \"username_or_password_is_incorrect\": \"用户名或密码错误\",\n    \"operate_too_fast\": \"操作过快，请稍后再试\"\n  },\n  \"response_data\": {\n    \"domain_already_bound\": \"该域名已被绑定\",\n    \"apply_already_submitted\": \"您已提交过申请，请勿重复提交\"\n  },\n  \"module\": {\n    \"parse\": \"文档清洗\",\n    \"viewer\": \"文档查看\",\n    \"agent_type_prompt\": \"通过Prompt创建\",\n    \"agent_type_53ai_agent\": \"53AI Studio\",\n    \"agent_type_53ai_workflow\": \"53AI应用智改\",\n    \"agent_type_coze_agent_cn\": \"扣子\",\n    \"agent_type_coze_workflow_cn\": \"扣子应用智改\",\n    \"agent_type_coze_agent\": \"Coze智能体\",\n    \"agent_type_coze_workflow\": \"Coze工作流\",\n    \"agent_type_dify_agent\": \"Dify\",\n    \"agent_type_dify_workflow\": \"Dify工作流\",\n    \"agent_type_yuanqi\": \"腾讯元器\",\n    \"agent_type_bailian\": \"阿里百炼\",\n    \"agent_type_volcengine\": \"火山引擎\",\n    \"agent_sort_desc\": \"数字越大，排名越靠前\",\n    \"dialogue\": \"工作对话\",\n    \"draft\": \"智能方案\",\n    \"writer\": \"内容创作\",\n    \"aibox\": \"AI百宝箱\",\n    \"bot\": \"智能体\",\n    \"prompt\": \"提示词\",\n    \"system\": \"系统管理\",\n    \"library\": \"知识库设置\",\n    \"search_section\": \"AI问答助手\",\n    \"search\": \"AI问答\",\n    \"chunk_setting\": \"拆分模板\",\n    \"model_setting\": \"模型设置\",\n    \"dialogue_digital_employee\": \"AI员工\",\n    \"dialogue_prompt\": \"提示词\",\n    \"dialogue_large_model\": \"大模型\",\n    \"enterprise_info\": \"企业信息\",\n    \"large_model\": \"大模型接入\",\n    \"user\": \"员工账号\",\n    \"combinat\": \"单点登录\",\n    \"system_log\": \"系统日志\",\n    \"homepage\": \"首页\",\n    \"app_management\": \"应用管理\",\n    \"agent\": \"智能体\",\n    \"knowledge\": \"知识管理\",\n    \"space\": \"团队空间\",\n    \"agent_search_placeholder\": \"搜索智能体\",\n    \"prompt_search_placeholder\": \"提示词名称\",\n    \"ai_product\": \"AI产品\",\n    \"ai_toolbox\": \"AI工具\",\n    \"ai_toolbox_search_placeholder\": \"搜索工具\",\n    \"operation_management\": \"运营管理\",\n    \"operation_user\": \"用户数据\",\n    \"operation_user_delete_confirm\": \"确定删除该用户吗？\",\n    \"operation_user_search_placeholder\": \"成员名/手机号/电子邮箱\",\n    \"operation_order\": \"订单数据\",\n    \"operation_order_delete_confirm\": \"确定删除该订单吗？\",\n    \"operation_order_search_placeholder\": \"用户/订单ID\",\n    \"operation_order_user_tip\": \"可直接输入用户昵称进行选择，若选择多位用户，则为每位用户单独创建一份订单\",\n    \"operation_visit\": \"访问数据\",\n    \"site_config\": \"站点配置\",\n    \"system_config\": \"系统配置\",\n    \"website_info\": \"站点信息\",\n    \"website_info_logo\": \"Logo\",\n    \"website_info_logo_tip\": \"请上传1:1比例的方形Logo（建议尺寸：512×512px）支持PNG/JPG格式，文件大小不超过2MB\",\n    \"website_info_logo_placeholder\": \"请上传Logo\",\n    \"website_info_ico\": \"ico\",\n    \"website_info_ico_tip\": \"建议尺寸为 64×64\",\n    \"website_info_ico_placeholder\": \"请上传ico\",\n    \"website_info_name\": \"站点名称\",\n    \"website_info_name_placeholder\": \"请输入站点名称\",\n    \"website_info_language\": \"默认语言\",\n    \"website_info_keyword\": \"关键词\",\n    \"website_info_keyword_placeholder\": \"请输入关键词\",\n    \"website_info_keyword_placeholder_v2\": \"可输入多个关键词，每个关键词输入后按回车即可\",\n    \"website_info_desc\": \"站点描述\",\n    \"website_info_desc_placeholder\": \"请输入站点描述\",\n    \"website_info_copyright\": \"版权信息\",\n    \"website_info_copyright_placeholder\": \"请输入版权信息\",\n    \"website_info_type\": \"站点类型\",\n    \"website_type_independent\": \"AI 独立站\",\n    \"website_type_independent_desc\": \"站点仅为注册用户访问使用\",\n    \"website_type_enterprise\": \"企业 AI 门户\",\n    \"website_type_enterprise_desc\": \"站点仅为内部用户访问使用\",\n    \"website_type_industry\": \"行业 AI 门户\",\n    \"website_type_industry_desc\": \"站点为内部员工+注册用户 访问使用\",\n    \"website_info_template\": \"站点风格\",\n    \"website_info_layout\": \"网站布局\",\n    \"platform\": \"平台接入\",\n    \"platform_v2\": \"平台\",\n    \"all_platform\": \"全部平台\",\n    \"platform_delete_confirm\": \"确定删除该智能体平台吗？\",\n    \"platform_tools\": \"拓展工具\",\n    \"platform_auth_client_id\": \"客户端ID\",\n    \"platform_auth_client_id_placeholder\": \"请输入客户端ID\",\n    \"platform_auth_client_secret\": \"客户端密钥\",\n    \"platform_auth_client_secret_placeholder\": \"请输入客户端密钥\",\n    \"platform_auth_coze_confirm\": \"确认你在扣子已经保存\",\n    \"platform_auth_url\": \"URL\",\n    \"platform_auth_secret\": \"Secret\",\n    \"platform_auth_secret_id\": \"SecretId\",\n    \"platform_auth_secret_id_placeholder\": \"请输入SecretId\",\n    \"platform_auth_secret_key\": \"SecretKey\",\n    \"platform_auth_secret_key_placeholder\": \"请输入SecretKey\",\n    \"platform_search_online\": \"联网搜索\",\n    \"platform_search_online_desc\": \"通过博查搜索网络内容，可总结摘要\",\n    \"platform_search_online_delete_confirm\": \"确定删除该拓展工具吗？\",\n    \"platform_tool_token\": \"令牌\",\n    \"platform_tool_api_endpoint\": \"API Endpoint\",\n    \"platform_tool_api_key\": \"API Key\",\n    \"platform_tool_api_key_placeholder\": \"输入您的API Key\",\n    \"platform_tool_token_placeholder\": \"输入您的令牌\",\n    \"platform_model\": \"通用大模型\",\n    \"platform_model_add\": \"选择模型接入\",\n    \"platform_model_organization_id\": \"组织 ID\",\n    \"platform_model_organization_id_placeholder\": \"输入您的组织 ID\",\n    \"platform_model_webhook_url\": \"Webhook URL\",\n    \"platform_model_base_url\": \"API Base\",\n    \"platform_model_base_url_azure\": \"API 域名\",\n    \"platform_model_base_url_maxkb\": \"Base URL\",\n    \"platform_model_base_url_azure_placeholder\": \"在此输入您的 API 域名，如：https://example.com/xxx\",\n    \"platform_model_name\": \"部署名称\",\n    \"platform_model_name_placeholder\": \"在此输入您的部署名称，与 Azure 部署名称匹配\",\n    \"platform_model_other\": \"API 版本\",\n    \"platform_model_other_placeholder\": \"输入您的API 版本\",\n    \"platform_model_base_url_placeholder\": \"输入您的API Base，如：https://api.openai.com\",\n    \"platform_model_base_url_placeholder_53ai\": \"输入您的API Base，如：https://api.53ai.com\",\n    \"platform_model_api_endpoint\": \"自定义 API endpoint 地址\",\n    \"platform_model_api_endpoint_placeholder\": \"输入您的自定义 API endpoint 地址，如：https://api.deepseek.com/v1 or https://api.deepseek.com\",\n    \"platform_model_models_azure\": \"基础模型\",\n    \"platform_model_models_azure_placeholder\": \"选择您的基础模型\",\n    \"platform_model_models\": \"启用模型\",\n    \"platform_model_models_empty\": \"暂无可用模型\",\n    \"platform_model_models_total\": \"{total}个模型\",\n    \"platform_model_models_edit\": \"编辑模型\",\n    \"platform_model_models_id\": \"模型ID\",\n    \"platform_model_models_name\": \"模型名称\",\n    \"platform_model_delete_confirm\": \"确定删除该模型吗？\",\n    \"navigation\": \"导航菜单\",\n    \"pc_navigation\": \"PC端导航\",\n    \"mobile_navigation\": \"移动端导航\",\n    \"nav_type_homepage\": \"首页\",\n    \"nav_type_single\": \"单页\",\n    \"nav_type_agent\": \"智能体\",\n    \"nav_target_self\": \"原窗口\",\n    \"nav_target_blank\": \"新窗口\",\n    \"nav_name\": \"栏目\",\n    \"nav_name_placeholder\": \"请选择栏目名称\",\n    \"nav_agent_class_placeholder\": \"请选择分类\",\n    \"nav_agent_placeholder\": \"请选择智能体\",\n    \"nav_type\": \"类型\",\n    \"nav_target\": \"打开方式\",\n    \"nav_url\": \"跳转链接\",\n    \"nav_visible\": \"导航栏显示\",\n    \"nav_operation\": \"操作\",\n    \"nav_operation_seo\": \"SEO\",\n    \"action_delete_confirm\": \"确认是否删除该栏目吗？\",\n    \"nav_seo_setting\": \"SEO设置\",\n    \"nav_seo_setting_title\": \"Title\",\n    \"nav_seo_setting_keywords\": \"Keywords\",\n    \"nav_seo_setting_keywords_tip\": \"每个关键词请用英文逗号隔开\",\n    \"nav_seo_setting_description\": \"Description\",\n    \"payment\": \"支付配置\",\n    \"subscription\": \"订阅设置\",\n    \"subscription_header_title\": \"订阅服务与定价\",\n    \"subscription_free\": \"免费版\",\n    \"subscription_pro\": \"专业版\",\n    \"subscription_flagship\": \"旗舰版\",\n    \"subscription_charge\": \"订阅费用\",\n    \"subscription_points\": \"积分\",\n    \"subscription_advanced_points\": \"高级积分\",\n    \"subscription_agent_bots\": \"可使用的智能体\",\n    \"subscription_advanced_agent_bots\": \"可使用的高级智能体\",\n    \"subscription_ai_assistant\": \"跨平台的 AI 助手\",\n    \"subscription_ai_assistant_tip\": \"启用支持 macOs、Windows以及浏览器插件开放给用户下载使用。\",\n    \"subscription_delete_confirm\": \"确定删除该订阅吗？\",\n    \"domain\": \"站点域名\",\n    \"domain_exclusive\": \"专属域名\",\n    \"domain_exclusive_label\": \"自定义你的专属域名\",\n    \"domain_exclusive_validator_1\": \"请使用小写字母或数字或 \\\"-\\\"，且不少于5个字符\",\n    \"domain_exclusive_validator_2\": \"域名已被占用，请使用其他域名\",\n    \"domain_independent\": \"独立域名\",\n    \"domain_independent_label\": \"自定义你的独立域名\",\n    \"domain_independent_desc\": \"添加一个你想要使用的自定义域名。\",\n    \"domain_independent_delete_confirm\": \"确定删除该独立域名吗？\",\n    \"domain_independent_cname\": \"CNAME方式\",\n    \"domain_independent_self\": \"自有服务器中转\",\n    \"domain_independent_cname_desc\": \"请从以下列表中选择一个合适的 CNAME 地址，去您已备案的域名厂商设置域名 DNS 解析。\",\n    \"domain_independent_cname_desc_1\": \"1. 域名在阿里云备案：53aihub.n1.53ai.com\",\n    \"domain_independent_cname_desc_2\": \"2. 域名在腾讯云备案：53aihub.n2.53ai.com\",\n    \"domain_independent_cname_desc_3\": \"3. 香港服务器，略慢：53aihub.n3.53ai.com\",\n    \"domain_independent_https\": \"启用 HTTPS\",\n    \"domain_independent_https_always\": \"始终使用 HTTPS\",\n    \"domain_independent_ssl\": \"SSL证书\",\n    \"domain_independent_ssl_option_1\": \"由53AI 生成\",\n    \"domain_independent_ssl_option_2\": \"使用自有证书\",\n    \"domain_independent_ssl_certificate\": \"证书\",\n    \"domain_independent_ssl_certificate_placeholder\": \"请将证书文件内容复制后粘贴到这里\",\n    \"domain_independent_ssl_private_key\": \"私钥\",\n    \"domain_independent_ssl_private_key_placeholder\": \"请将证书私钥复制后粘贴到这里\",\n    \"domain_independent_self_desc_1\": \"方式一：使用 nginx 等 web 服务器做简单配置即可实现。\",\n    \"domain_independent_self_desc_2\": \"方式二：使用阿里云、腾讯云、七牛云等云厂商的全站加速服务 (DCDN)。\",\n    \"domain_independent_self_desc_3\": \"Docs Site ID：{site_id}\",\n    \"use_subdirectories\": \"使用子目录\",\n    \"use_subdirectories_tip\": \"如果你想使用子目录(例如 53aihub/docs)，可以打开开关\",\n    \"statistics\": \"三方统计\",\n    \"statistics_header_title\": \"嵌入代码\",\n    \"statistics_header_desc\": \"您可以通过嵌入代码为您的站点添加客服插件、访问统计等功能\",\n    \"statistics_textarea_label_1\": \"Head头部代码\",\n    \"statistics_textarea_label_1_example\": \"请输入JS代码……\\n例如\\n<script>console.log('hello world')</script>\\n或\\n<script src=\\\"xxx\\\"></script>\",\n    \"statistics_textarea_label_2\": \"CSS代码\",\n    \"statistics_textarea_label_2_example\": \"请输入CSS代码\",\n    \"SMTP\": \"注册与登录\",\n    \"SMTP_email_log\": \"邮箱注册/登录\",\n    \"SMTP_mobile_log\": \"手机注册/登录\",\n    \"SMTP_server\": \"SMTP服务器\",\n    \"SMTP_port\": \"SMTP端口\",\n    \"SMTP_email_account\": \"邮箱账号\",\n    \"SMTP_email_password\": \"邮箱密码\",\n    \"SMTP_receiver_email\": \"收件人邮箱\",\n    \"SMTP_addresser_email\": \"发件人邮箱\",\n    \"SMTP_send_email\": \"发送测试邮件\",\n    \"SMTP_openTLS\": \"启用TLS\",\n    \"site_decoration\": \"站点装修\",\n    \"template_style\": \"模板风格\",\n    \"banner_diagram\": \"Banner图\"\n  },\n  \"chat\": {\n    \"empty_desc\": \"在输入框中填写内容调试吧~\"\n  },\n  \"login\": {\n    \"unregistered_account_desc\": \"未注册的账号验证后自动登录\",\n    \"account_placeholder\": \"请输入您的手机号/邮箱\",\n    \"email_placeholder\": \"请输入您的邮箱\",\n    \"mobile_placeholder\": \"请输入您的手机号\",\n    \"mobile_exists\": \"该手机号已注册，请使用该账号登录。\",\n    \"mobile_no_exists\": \"该手机号未注册，请先注册。\",\n    \"email_exists\": \"该邮箱已注册，请使用该账号登录。\",\n    \"email_no_exists\": \"该邮箱未注册，请先注册。\",\n    \"password_placeholder\": \"请输入密码\",\n    \"forget_password\": \"忘记密码？\",\n    \"password_login\": \"密码登录\",\n    \"password_login_v2\": \"使用密码登录\",\n    \"bind_mobile_login\": \"绑定手机号\",\n    \"mobile_login\": \"手机验证码登录\",\n    \"mobile_login_v2\": \"使用手机验证码登录\",\n    \"wechat_login\": \"微信登录\",\n    \"wechat_login_v2\": \"使用微信登录\",\n    \"google_login\": \"谷歌登录\",\n    \"google_login_v2\": \"使用谷歌登录\",\n    \"agree_and_policy\": \"登录即视您同意{agree}和{policy}\",\n    \"agree\": \"条款和条件\",\n    \"policy\": \"隐私政策\",\n    \"account_length\": \"账号长度必须在 4-20 个字符之间\",\n    \"account_format\": \"账号必须以字母开头，只能包含字母、数字和下划线\",\n    \"password_length\": \"密码长度需在 8-20 个字符之间，可以是字母、数字、符号组合\",\n    \"password_length_v2\": \"密码长度需在 8-20 个字符之间\",\n    \"password_format\": \"密码必须包含大小写字母和数字\",\n    \"password_not_match\": \"两次输入的密码不一致\",\n    \"reset_password\": \"重置密码\",\n    \"update_password\": \"更新密码\",\n    \"back_to_login\": \"返回登录\",\n    \"has_account\": \"已有账号，\",\n    \"direct_login\": \"直接登录\",\n    \"immediate_login\": \"立即登录\",\n    \"login_by_wechat\": \"请使用微信扫码登录\",\n    \"select_reset_password_way\": \"选择重置密码的方式\",\n    \"select_register_way\": \"选择注册账号的方式\",\n    \"email_validate\": \"邮箱验证\",\n    \"mobile_validate\": \"手机验证\",\n    \"new_password\": \"新密码\",\n    \"new_password_placeholder\": \"请输入新密码\",\n    \"confirm_password\": \"重复新密码\",\n    \"confirm_password_placeholder\": \"请再次输入新密码\",\n    \"verify_identity\": \"验证身份\",\n    \"enterprise_info\": \"企业信息\",\n    \"application_complete\": \"完成申请\",\n    \"website_name\": \"站点名称\",\n    \"website_name_placeholder\": \"请输入站点名称\",\n    \"contact_name\": \"联系人\",\n    \"contact_name_placeholder\": \"请输入联系人\",\n    \"complete_registration_and_login\": \"完成注册并登录\",\n    \"apply_open_repetition\": \"您已提交过申请，请勿重复提交\",\n    \"select_enterprise\": \"选择进入企业\",\n    \"new_user_tip\": \"你的初始密码是“{password}”，请及时修改\",\n    \"I_remember\": \"我记住了\",\n    \"modify_password\": \"修改密码\"\n  },\n  \"apply\": {\n    \"process\": \"审核中\",\n    \"expired\": \"已过期\",\n    \"reject\": \"已拒绝\",\n    \"refresh_list\": \"刷新列表\",\n    \"contact_customer_service\": \"遇到问题？联系客服解答\",\n    \"contact_customer_service_v2\": \"联系客服\",\n    \"create_site\": \"创建站点\",\n    \"create_title\": \"欢迎开通53AI {project}\",\n    \"waiting_audit\": \"等待审核\",\n    \"create_success\": \"创建成功\",\n    \"expired_time_forever\": \"永久生效\",\n    \"enterprise_name_placeholder\": \"请输入企业/组织名称\",\n    \"domain\": \"域名\",\n    \"domain_placeholder\": \"请输入你的域名\",\n    \"enterprise_not_empty\": \"企业/组织名称不能为空\",\n    \"mobile_unregistered_tip\": \"该手机号未注册，输入验证码及登录密码完成企业创建\",\n    \"domain_already_use\": \"{domain} 已被使用，试试其他域名吧~\"\n  },\n  \"service\": {\n    \"title\": \"立即开通\",\n    \"consult_name\": \"首席客服顾问\",\n    \"desc_1\": \"您好，扫码联系您的专属顾问，\",\n    \"desc_2\": \"开通使用\",\n    \"desc_3\": \"您好，微信扫码联系您的专属顾问，\"\n  },\n  \"website_version\": {\n    \"free\": \"创业版\",\n    \"standard\": \"专业版\",\n    \"enterprise\": \"企业版\"\n  },\n  \"language_option_label\": {\n    \"zh-cn\": \"中文-CN\",\n    \"zh-tw\": \"中文-TW\",\n    \"en\": \"英文-EN\",\n    \"jp\": \"日文-JP\"\n  },\n  \"template_option_label\": {\n    \"portal\": \"AI门户\",\n    \"doubao\": \"豆包风格\",\n    \"mita\": \"秘塔风格\",\n    \"kimi\": \"Kimi风格\",\n    \"independent\": \"独立站\"\n  },\n  \"layout_option_label\": {\n    \"loose\": \"宽松\",\n    \"center\": \"居中\"\n  },\n  \"layout_option_desc\": {\n    \"loose\": \"布局宽松铺满屏幕，自适应用户的分辨率\",\n    \"center\": \"布局紧凑且内容居中\"\n  },\n  \"order\": {\n    \"status\": {\n      \"all\": \"全部订单\",\n      \"not_confirm\": \"待确认\",\n      \"pending\": \"待支付\",\n      \"paid\": \"已支付\",\n      \"expired\": \"已超时\",\n      \"cancelled\": \"已取消\"\n    },\n    \"confirm_tip\": \"确定则订单会设置为已支付，且会增加用户对应权益。\"\n  },\n  \"payment\": {\n    \"type\": {\n      \"all\": \"全部支付\",\n      \"wechat\": \"微信支付\",\n      \"alipay\": \"支付宝支付\",\n      \"manual\": \"手动转账\",\n      \"paypal\": \"PayPal\"\n    },\n    \"manual\": {\n      \"qrcode\": \"收款码\",\n      \"qrcode_placeholder\": \"请上传收款码\",\n      \"desc\": \"备注\",\n      \"desc_placeholder\": \"请输入备注，如：请使用微信/支付宝 扫码支付以上金额\"\n    },\n    \"wechat_app_id\": \"AppID\",\n    \"wechat_app_id_placeholder\": \"请输入AppID\",\n    \"wechat_mch_id\": \"微信支付商户号\",\n    \"wechat_mch_id_placeholder\": \"请输入微信支付商户号\",\n    \"wechat_api_secret\": \"APIv3密钥\",\n    \"wechat_api_secret_placeholder\": \"请输入APIv3密钥\",\n    \"wechat_app_id_tip\": \"登录微信支付商户平台 → 点击「账户中心」→ 在「商户信息」中获取「微信支付商户号」\",\n    \"wechat_mch_id_tip\": \"登录微信公众平台 → 设置 → 公众号设置 → 基本配置 → 查看「开发者ID（AppID）」\",\n    \"wechat_api_secret_tip\": \"登录微信支付商户平台 → 账户中心 → API安全 → 设置「API密钥」\",\n    \"wechat_serial_no\": \"证书序列号\",\n    \"wechat_serial_no_placeholder\": \"请输入证书序列号\",\n    \"wechat_cert\": \"证书文件\",\n    \"wechat_cert_placeholder\": \"请上传证书文件\",\n    \"wechat_private_key\": \"证书密钥\",\n    \"wechat_private_key_placeholder\": \"请上传证书密钥\",\n    \"manual_tip\": \"手动转账可支持更多的支付方式，但金额需要用户自己填写，支付后需管理员后台手动确认。\",\n    \"manual_pay_qrcode\": \"付款码\",\n    \"manual_pay_qrcode_placeholder\": \"请上传付款码\",\n\n    \"alipay_app_id\": \"支付宝AppID\",\n    \"alipay_app_id_placeholder\": \"请输入支付宝AppID\",\n    \"alipay_mch_id\": \"应用私钥\",\n    \"alipay_mch_id_placeholder\": \"请输入应用私钥\",\n    \"alipay_api_secret\": \"支付宝公钥\",\n    \"alipay_api_secret_placeholder\": \"请输入支付宝公钥\",\n    \"alipay_guide_html\": \"1、登录支付宝开放平台<a class='text-[#5A6D9E]' href='https://open.alipay.com/module/webApp/' target='_blank'>https://open.alipay.com/module/webApp/</a>创建\\\"网页/移动应用\\\"，获得APPID；\\n2、点击进入应用，在「开发设置」\\\"接口加签方式\\\"中按照支付宝官方的引导进行配置，获取应用私钥、支付宝公钥；\\n3、在「开发设置」\\\"授权回调地址\\\"中填入: <span style=\\\"color: #FA5151;\\\">{callback_url}</span><span class='copy-hook'></span>\\n4、在【API管理】接入\\\"电脑网站支付\\\"的能力，按照支付宝官方的引导进行配置或开通；\"\n  },\n  \"template_style\": {\n    \"website_style\": \"站点风格\",\n    \"website\": \"网站风格\",\n    \"software\": \"软件风格\",\n    \"theme_color\": \"主题色\",\n    \"theme_color_v2\": \"主题颜色\",\n    \"text_color\": \"文本颜色\",\n    \"nav_bg_color\": \"导航背景\",\n    \"nav_text_color\": \"导航文本\",\n    \"page_footer_bg_color\": \"页脚背景\",\n    \"page_footer_text_color\": \"页脚文本\"\n  },\n  \"banner\": {\n    \"upload_image\": \"上传图片\",\n    \"upload_image_tip\": \"上传 1920×380 的像素图片效果最佳，图片大小小于 10 MB\",\n    \"interval\": \"图片轮播间隔\",\n    \"interval_tip\": \"当Banner区存在多张图片时，设定图片滚动时间间隔\"\n  },\n  \"wechat_payment\": {\n    \"mch_guide\": {\n      \"title\": \"如何获取微信支付商户号\",\n      \"step_1\": \"1、登录微信支付官网（{url}）\",\n      \"step_2\": \"2、微信支付商户号可在微信支付商户平台的【账户中心 - 商户信息】中查看。\",\n      \"step_3\": \"补充：如果还不是微信支付商家，可在登录首页点击成为商家，注册申请微信支付商户号，按照提示填写企业相关信息，如营业执照、对公账户等，提交审核。审核通过后，即可获得微信支付商户号。\"\n    },\n    \"app_guide\": {\n      \"title\": \"如何获取APPID\",\n      \"step_1\": \"1、在微信支付商户平台的【产品中心 - AppID账号管理】中点击“关联APPID”，将之前获取的微信公众号或小程序的APPID填入并确认关联。登录微信开放平台，在消息中心中同意关联。\",\n      \"step_2\": \"2、将已关联的APPID，复制填入表单。\\n\\n补充：如果还未关联任何公众号，则需要先关联公众号，操作方法：点击关联AppID\",\n      \"step_3\": \"然后登录微信公众平台（{url}），进入公众号后台，在【设置与开发 - 基本配置】中获取开发者ID（AppID）。如果是小程序，可在微信公众平台的小程序管理后台获取小程序APPID。\"\n    },\n    \"api_guide\": {\n      \"title\": \"如何获取APIV3密钥\",\n      \"step_1\": \"1、登录微信支付商户平台，进入【账户中心 - 账户设置 - API安全】，点击【APIv3密钥】\",\n      \"step_2\": \"2、在弹出窗口中点击“已沟通”，输入一个32位的随机密钥（包含数字及大小写字母），点击获取短信验证码，输入验证码后点击“确认”，即可设置成功。\"\n    },\n    \"cert_guide\": {\n      \"title\": \"如何获取支付证书文件与密钥\",\n      \"step_1\": \"1、登录微信支付商户平台，进入【账户中心 - API安全】，申请新证书。按照指引【下载证书工具】，将获得的请求串复制至文本框，点击下一步。\",\n      \"step_2\": \"2、申请后，下载apiclient_cert.pem（证书文件）和apiclient_key.pem（私钥文件）。\"\n    },\n    \"serial_guide\": {\n      \"title\": \"如何获取证书序列号\",\n      \"step_1\": \"1、在微信支付商户平台的【账户中心 - API安全 】中查看证书的序列号。\"\n    }\n  },\n  \"alipay_payment\": {\n    \"app_guide\": {\n      \"title\": \"如何获取APPID\",\n      \"step_1\": \"1、复制应用名称下方的数字即是APPID\"\n    }\n  },\n  \"platform_auth\": {\n    \"coze_cn\": {\n      \"tip\": \"前往 扣子API-授权-创建新应用（{url}） \\n第一步：创建一个OAuth应用（\\\"客户端类型\\\"为\\\"Web后端应用\\\"）\\n第二步：在\\\"重定向URL\\\"中填入：{redirect_url} \\n第三步：将{client_id}和{client_secret}填入下列表单，权限全部勾选上并保存。\",\n      \"tip_1\": \"务必先在扣子端点击保存后再点确定\"\n    },\n    \"app_builder\": {\n      \"tip\": \"前往 百度智能云千帆（{url}）\\n第一步：登录后，点击左侧导航栏的\\\"API Key\\\" \\n第二步：点击创建API Key（\\\"服务\\\" 选择 \\\"千帆AppBuilder\\\"，按需配置应用资源）\\n第三步：完成创建，复制API Key填入下列表单。\"\n    },\n    \"53ai\": {\n      \"tip\": \"前往 53AI（{url}） 第一步：登录后，点击左侧导航栏的 \\\"设置\\\"\\n第二步：在\\\"企业信息\\\"下点击生成Secret Key\\n第三步：生成后，复制Sercet Key填入下列表单。\"\n    },\n    \"n8n\": {\n      \"tip\": \"前往n8n官网并登录（{url}）\",\n      \"tip_1\": \"第一步：在「Personal」下，点击创建一个工作流，再点击添加节点「On webhook call」；\",\n      \"tip_2\": \"第二步：在Webhook节点的编辑弹窗内，复制Webhook URLs 填入表单，Authentication选择「{headerAuth}」，然后在点击「Creat new credential」;\",\n      \"tip_3\": \"第三步：“Name”固定填入： {authorization}\\n“Value”对应的是渠道的 key 字段，可以是随机字符串，字符数请控制在64位内；\",\n      \"tip_4\": \"第四步：“Respond”选择：{select}\"\n    },\n    \"coze_osv\": {\n      \"tip\": \"前往 设置-API授权-个人访问令牌 \\n第一步：点击添加新令牌\\n第二步：填写令牌名称，设置过期时间，权限全部勾选，选择所有工作空间并确定\\n第三步：复制令牌填入下列表单\"\n    },\n    \"tencent\": {\n      \"tip\": \"前往 腾讯云控制台（ {url} ） \\n第一步：登录后，点击左侧导航栏的 \\\"API 密钥管理\\\"\\n第二步：点击新建密钥，复制 SecretId 和 SecretKey 填入下列表单。\"\n    }\n  },\n  \"agent_app\": {\n    \"prompt\": \"Prompt\",\n    \"prompt_v2\": \"通过Prompt创建\",\n    \"53ai_agent\": \"53AI\",\n    \"53ai_workflow\": \"53AI\",\n    \"coze_agent_cn\": \"扣子\",\n    \"coze_workflow_cn\": \"扣子\",\n    \"coze_agent_osv\": \"coze studio 开源版\",\n    \"coze_workflow_osv\": \"coze studio 开源版\",\n    \"coze_agent\": \"Coze智能体\",\n    \"coze_workflow\": \"Coze工作流\",\n    \"dify_agent\": \"Dify\",\n    \"dify_workflow\": \"Dify\",\n    \"app_builder\": \"百度千帆Appbuilder\",\n    \"yuanqi\": \"腾讯元器\",\n    \"bailian\": \"阿里百炼\",\n    \"volcengine\": \"火山方舟\",\n    \"fastgpt_agent\": \"FastGPT\",\n    \"fastgpt_workflow\": \"FastGPT\",\n    \"maxkb_agent\": \"MaxKB\",\n    \"n8n_workflow\": \"n8n\",\n    \"tencent\": \"腾讯云智能体开发平台\",\n    \"check_agent_config_tip\": \"请检查智能体配置是否正确\",\n    \"failed_tip\": \"请检查授权key是否可用以及余额是否充足\"\n  },\n  \"provider_platform\": {\n    \"prompt\": \"Prompt\",\n    \"openai\": \"OpenAI\",\n    \"deepseek\": \"深度求索\",\n    \"coze\": \"Coze\",\n    \"siliconflow\": \"硅基流动\",\n    \"zhipu\": \"智谱AI\",\n    \"azure\": \"Azure OpenAI\",\n    \"azure_open_ai\": \"Azure OpenAI\",\n    \"dark_moon\": \"月之暗面\",\n    \"tongyi\": \"通义千问\",\n    \"coze_cn\": \"扣子\",\n    \"coze_osv\": \"coze-studio开源版\",\n    \"app_builder\": \"百度千帆AppBuilder\",\n    \"dify\": \"Dify\",\n    \"53ai\": \"53AI\",\n    \"bailian\": \"阿里百炼\",\n    \"volcengine\": \"火山方舟\",\n    \"yuanqi\": \"腾讯元器\",\n    \"fastgpt\": \"FastGPT\",\n    \"maxkb\": \"MaxKB\",\n    \"n8n\": \"n8n\",\n    \"qianfan\": \"百度千帆ModelBuilder\",\n    \"tencent\": \"腾讯云智能体开发平台\"\n  },\n  \"register_user\": {\n    \"title\": \"注册用户\"\n  },\n  \"internal_user\": {\n    \"title\": \"内部用户\",\n    \"alias\": \"通讯录\",\n    \"account\": {\n      \"title\": \"账号\",\n      \"search_placeholder\": \"成员名/手机号/电子邮箱\",\n      \"name\": \"姓名\",\n      \"nickname\": \"昵称\",\n      \"mobile\": \"手机\",\n      \"group\": \"用户组\",\n      \"department\": \"部门\",\n      \"status\": \"状态\",\n      \"add\": \"添加账号\",\n      \"name_placeholder\": \"请输入姓名\",\n      \"name_disabled_tip\": \"姓名来自第三方同步，不可修改\",\n      \"nickname_placeholder\": \"请输入昵称\",\n      \"mobile_placeholder\": \"请输入手机\",\n      \"mobile_disabled_tip\": \"注意: 所输入的手机号须与成员本人登录的手机号一致才能使用\",\n      \"password_placeholder\": \"请设置初始密码\",\n      \"department_placeholder\": \"请选择部门\",\n      \"same_member_exists_tip\": \"成员手机已存在\",\n      \"same_mobile_exists_tip\": \"与第{index}个成员手机号相同\",\n      \"register_to_internal_confirm\": \"手机号 {mobile} 当前为注册用户。若将其添加为内部用户，系统将自动从注册用户列表中移除该账号，且用户密码保持不变。\",\n      \"edit_member\": \"编辑成员\"\n    },\n    \"organization\": {\n      \"title\": \"组织\",\n      \"all_search_placeholder\": \"成员/部门\",\n      \"user_search_placeholder\": \"成员\",\n      \"department_search_placeholder\": \"部门\"\n    },\n    \"group\": {\n      \"title\": \"分组\",\n      \"search_placeholder\": \"搜索分组\",\n      \"search_placeholder_v2\": \"搜索用户组名称\",\n      \"create\": \"新建分组\",\n      \"member\": \"成员\",\n      \"usable\": \"可使用\",\n      \"remove_user_confirm\": \"确定移除该成员吗？\",\n      \"remove_agent_confirm\": \"确定移除该智能体吗？\",\n      \"remove_prompt_confirm\": \"确定移除该提示词吗？\",\n      \"remove_ai_toolkit_confirm\": \"确定移除该AI工具吗？\",\n      \"create_tip\": \"请先创建分组\"\n    },\n    \"status\": {\n      \"all\": \"全部成员\",\n      \"undefined\": \"未加入\",\n      \"enabled\": \"已加入\",\n      \"disabled\": \"被禁用\"\n    },\n    \"action\": {\n      \"disabled\": \"禁用账号\",\n      \"disabled_success\": \"已禁用\",\n      \"enable\": \"激活账号\",\n      \"enable_success\": \"已激活\",\n      \"disabled_account\": \"禁用账号\",\n      \"enable_account\": \"激活账号\"\n    },\n    \"department\": {\n      \"add\": \"添加部门\",\n      \"add_children\": \"添加子部门\",\n      \"update_name\": \"修改名称\",\n      \"move_up\": \"上移\",\n      \"move_down\": \"下移\",\n      \"delete\": \"删除\",\n      \"delete_confirm\": \"确定删除该部门吗？\",\n      \"create\": \"创建部门\",\n      \"edit\": \"编辑部门\",\n      \"name\": \"部门名称\",\n      \"name_placeholder\": \"请输入部门名称\",\n      \"member_total_count\": \"（{total}人）\"\n    },\n    \"scope\": {\n      \"title\": \"可见范围\",\n      \"selected_title\": \"已选择项\"\n    }\n  },\n  \"admin_user\": {\n    \"title\": \"管理员\",\n    \"search_placeholder\": \"搜索已有用户\",\n    \"delete_confirm\": \"确定删除该管理员吗？\"\n  },\n  \"role\": {\n    \"title\": \"角色\",\n    \"normal\": \"普通用户\",\n    \"admin\": \"管理员\",\n    \"creator\": \"创建者\"\n  },\n  \"prompt\": {\n    \"title\": \"提示词\",\n    \"search_placeholder\": \"输入想搜索的提示词\",\n    \"delete_confirm\": \"确定删除该提示词吗？\",\n    \"config\": \"提示词\",\n    \"guide\": \"使用指引\",\n    \"content\": \"提示词内容\"\n  },\n  \"navigation\": {\n    \"title\": \"导航管理\",\n    \"search_placeholder\": \"搜索栏目\",\n    \"delete_confirm\": \"确定删除该导航吗？\",\n    \"type\": {\n      \"system\": \"系统内置\",\n      \"external\": \"外部链接\",\n      \"custom\": \"自定义页\"\n    },\n    \"target\": {\n      \"self\": \"原窗口\",\n      \"blank\": \"新窗口\"\n    },\n    \"web_setting\": \"页面编辑\"\n  },\n  \"sso\": {\n    \"title\": \"单点登录\",\n    \"sync_corp\": \"同步企业\",\n    \"wecom\": {\n      \"title\": \"企业微信\",\n      \"abbr_title\": \"企微\",\n      \"access_title\": \"接入企微\",\n      \"access_desc\": \"企业微信管理员扫码安装接入\",\n      \"sync_desc\": \"完成企业微信凭据授权的绑定后，可绑定企业微信账号源，导入企业微信成员目录\",\n      \"sync_tip\": \"已同步企业微信组织架构\"\n    },\n    \"dingtalk\": {\n      \"title\": \"钉钉\",\n      \"abbr_title\": \"钉钉\",\n      \"access_title\": \"接入钉钉\",\n      \"access_desc\": \"创建企业内部应用实现接入\",\n      \"sync_desc\": \"完成钉钉授权的绑定后，可绑定钉钉账号源，导入钉钉成员目录\",\n      \"sync_tip\": \"已同步钉钉组织架构\"\n    },\n    \"ad_ldap\": {\n      \"title\": \"AD/LDAP\",\n      \"abbr_title\": \"AD/LDAP\",\n      \"access_title\": \"接入AD/LDAP\",\n      \"access_desc\": \"绑定 AD/LDAP 后，可导入 AD/LDAP 成员目录，实现 AD/LDAP 账号单点登录 53Hub\"\n    },\n    \"api_access\": {\n      \"title\": \"API接入\",\n      \"access_title\": \"API接入\",\n      \"access_desc\": \"通过API鉴权实现单点登录，用户点击链接就能直接完成登录，无需手动输入账号密码\"\n    },\n    \"feishu\": {\n      \"title\": \"飞书\",\n      \"abbr_title\": \"飞书\",\n      \"access_title\": \"接入飞书\",\n      \"access_desc\": \"企业管理员扫码安装接入\",\n      \"sync_desc\": \"完成飞书授权的绑定后，可绑定飞书账号源，导入飞书成员目录\"\n    },\n    \"bind_member\": \"关联成员\",\n    \"unbind_member\": \"取消关联\",\n    \"bind_member_tip\": \"确定将该成员关联到当前用户吗？\",\n    \"unbind_member_tip\": \"确定取消关联该成员吗？\",\n    \"auth_access\": \"授权接入\",\n    \"organization_sync\": \"组织同步\",\n    \"access_title\": \"接入{title}\",\n    \"access_desc\": \"需要{title}管理员扫码安装\",\n    \"access_desc_v2\": \"已有{title}可直接扫码授权，尚未注册{title}请先注册\",\n    \"goto_access\": \"前往{title}授权\",\n    \"goto_register\": \"去注册{title}\",\n    \"sync_confirm\": \"同步后{title}组织将会覆盖当前组织，不可恢复\",\n    \"sync_cancel\": \"取消同步将会恢复到最初始组织状态\",\n    \"sync_cancel_tip\": \"取消同步\",\n    \"authorized_enterprise\": \"授权企业\",\n    \"unauthorized\": \"解除授权\",\n    \"auth_completed_tip\": \"请确认您已完成应用绑定，确认后将刷新页面\",\n    \"access_setting\": \"接入设置\",\n    \"access_method\": \"接入方式：\",\n    \"method_tip1\": \"1、通过一个跳转完成用户身份鉴权实现单点登录\",\n    \"method_tip2\": \"2、链接格式为：\",\n    \"method_tip3\": \"3、参数说明：\",\n    \"username_tip\": \"可以是手机或邮箱\",\n    \"timestamp_tip\": \"当前时间戳（这个链接10分钟失效）\",\n    \"sign_tip\": \"是由 timestamp={timestamp}&username={username} 拼接上Sercet的md5值\",\n    \"enable_encryption\": \"启用加密：\",\n    \"API_documentation\": \"API文档\",\n    \"save_success\": \"保存成功\"\n  },\n  \"action_visit\": \"访问\",\n  \"action_test\": \"测试\",\n  \"action_add\": \"添加\",\n  \"action_add_success\": \"已添加\",\n  \"action_create\": \"创建\",\n  \"action_edit\": \"编辑\",\n  \"action_save\": \"保存\",\n  \"action_save_success\": \"已保存\",\n  \"action_save_failed\": \"保存失败\",\n  \"action_sync_start\": \"开始同步\",\n  \"action_sync_failed\": \"同步失败\",\n  \"action_test_success\": \"可用\",\n  \"action_test_failed\": \"不可用\",\n  \"action_delete\": \"删除\",\n  \"action_delete_tip\": \"删除提示\",\n  \"action_delete_confirm\": \"确定删除该数据吗？\",\n  \"action_delete_success\": \"已删除\",\n  \"action_remove\": \"移除\",\n  \"action_remove_success\": \"已移除\",\n  \"action_confirm\": \"确定\",\n  \"action_confirm_success\": \"已确认\",\n  \"action_cancel\": \"取消\",\n  \"action_select\": \"选择\",\n  \"action_sort\": \"排序\",\n  \"action_sort_success\": \"已更新排序\",\n  \"action_setting\": \"设置\",\n  \"action_enable\": \"启用\",\n  \"action_enable_success\": \"已启用\",\n  \"action_disable\": \"禁用\",\n  \"action_disable_success\": \"已禁用\",\n  \"action_upload\": \"上传\",\n  \"action_upgrade\": \"升级\",\n  \"action_renew\": \"续费\",\n  \"action_renew_v2\": \"续期\",\n  \"action_modify\": \"修改\",\n  \"action_view_example\": \"查看示例\",\n  \"action_authorize\": \"授权\",\n  \"action_authorize_success\": \"已授权\",\n  \"action_copy\": \"复制\",\n  \"action_copy_success\": \"已复制\",\n  \"action_replace\": \"更换\",\n  \"action_clear\": \"清空\",\n  \"action_search\": \"搜索\",\n  \"action_close\": \"关闭\",\n  \"action_view_more\": \"查看更多\",\n  \"action_open\": \"开启\",\n  \"action_send\": \"发送\",\n  \"action_send_success\": \"已发送\",\n  \"action_login\": \"登录\",\n  \"action_login_success\": \"已登录\",\n  \"action_register\": \"注册\",\n  \"action_register_and_login\": \"注册并登录\",\n  \"action_register_success\": \"已注册\",\n  \"action_reset\": \"重置\",\n  \"action_preview\": \"预览\",\n  \"action_amplify\": \"扩大\",\n  \"action_shrink\": \"缩小\",\n  \"action_stop_generation\": \"停止生成\",\n  \"action_restart_generation\": \"重新生成\",\n  \"action_update\": \"更新\",\n  \"action_update_success\": \"已更新\",\n  \"action_next_step\": \"下一步\",\n  \"action_exit\": \"退出登录\",\n  \"action_exit_success\": \"已退出\",\n  \"action_exit_confirm\": \"确定退出登录吗？\",\n  \"action_select_file\": \"+ 选择文件\",\n  \"action_manage\": \"管理\",\n  \"action_go\": \"前往\",\n  \"action_rename\": \"重命名\",\n  \"action_bind\": \"关联\",\n  \"action_unbind\": \"取消关联\",\n  \"action_bind_success\": \"已关联\",\n  \"action_unbind_success\": \"已取消关联\",\n  \"action_confirm_payment\": \"确认收款\",\n  \"action_confirm_payment_success\": \"已确认收款\",\n  \"completion_completed\": \"已完成深度思考\",\n  \"completion_thinking\": \"深度思考中...\",\n  \"form_input_placeholder\": \"请输入\",\n  \"form_input_placeholder_max_length\": \"最大限制输入{max}个字符\",\n  \"form_select_placeholder\": \"请选择\",\n  \"form_upload_placeholder\": \"请上传\",\n  \"form_link_validator\": \"请输入正确格式的链接地址\",\n  \"form_account_validator\": \"账号不能包含空格符号\",\n  \"form_mobile_validator\": \"请输入正确格式的手机号码\",\n  \"form_email_validator\": \"请输入正确格式的邮箱地址\",\n  \"form_mobile_or_email_validator\": \"请输入正确格式的手机号码或邮箱地址\",\n  \"form_password_validator\": \"密码不能包含中文或空格符号\",\n  \"form_url_validator\": \"请输入正确格式的URL地址\",\n  \"form_path_validator\": \"请输入正确格式的路径地址 (如:/index) \",\n  \"form_path_same_tip\": \"已存在相同路径地址, 请重新输入\",\n  \"form_image_validator\": \"请上传正确格式的图片\",\n  \"form_variable_validator\": \"变量名只能包含字母、数字和下划线，且不能以数字开头\",\n  \"form_port_validator\": \"端口只能是数字\",\n  \"form_account_exit\": \"该共享账号已存在\",\n  \"form_delete_confirm\": \"确定删除该共享账号吗？\",\n  \"form_hide_logo\": \"隐藏技术支持Logo\",\n  \"enterprise_edition\": \"企业版\",\n  \"image_cropper\": \"图片裁剪\",\n  \"reupload\": \"重新上传\",\n  \"wechat\": \"微信\",\n  \"alipay\": \"支付宝\",\n  \"alipay_pay\": \"支付宝支付\",\n  \"enabled\": \"已启用\",\n  \"disabled\": \"已禁用\",\n  \"setting\": \"已设置\",\n  \"not_setting\": \"未设置\",\n  \"updated_at\": \"更新于\",\n  \"yearly\": \"年\",\n  \"year\": \"年\",\n  \"monthly\": \"月\",\n  \"month\": \"月\",\n  \"expired_time\": \"到期时间\",\n  \"basic_info\": \"基本信息\",\n  \"connected\": \"已接入\",\n  \"connecting\": \"接入中\",\n  \"not_connected\": \"未接入\",\n  \"connecting_agent_total\": \"已接入 {total} 个应用\",\n  \"authorized_at\": \"授权于\",\n  \"no_data\": \"暂无数据\",\n  \"effective\": \"已生效\",\n  \"https_enabled\": \"已启用HTTPS\",\n  \"group\": \"分组\",\n  \"all\": \"全部\",\n  \"all_group\": \"全部分组\",\n  \"user\": \"用户\",\n  \"mobile\": \"手机号码\",\n  \"verification_code\": \"验证码\",\n  \"verification_code_placeholder\": \"请输入验证码\",\n  \"get_verification_code\": \"获取验证码\",\n  \"shared_account\": \"共享账号\",\n  \"subscription\": {\n    \"title\": \"订阅服务\",\n    \"end_at\": \"服务期限\",\n    \"transfer_title\": \"订阅删除\",\n    \"transfer_desc\": \"删除以下订阅服务，并将订阅用户迁移至新的订阅服务\",\n    \"transfer_to\": \"迁移至\"\n  },\n  \"register_time\": \"注册时间\",\n  \"created_time\": \"创建时间\",\n  \"add_time\": \"添加时间\",\n  \"operation\": \"操作\",\n  \"language\": \"语言\",\n  \"website_domain\": \"网站域名\",\n  \"website_home\": \"网站首页\",\n  \"create_time\": \"创建时间\",\n  \"update_time\": \"更新时间\",\n  \"service_expired_time\": \"服务到期\",\n  \"configuration_completion\": \"配置完成度\",\n  \"description\": \"描述\",\n  \"pictorial_image\": \"示图\",\n  \"type\": \"类型\",\n  \"all_type\": \"全部类型\",\n  \"usage_record\": \"使用记录\",\n  \"usage_guide\": \"使用指引\",\n  \"dialogue_record\": \"对话记录\",\n  \"user_info\": \"用户信息\",\n  \"avatar\": \"头像\",\n  \"remark\": \"备注\",\n  \"login_password\": \"登录密码\",\n  \"bind_account\": \"已绑定的账户\",\n  \"mobile_v2\": \"手机号\",\n  \"email\": \"电子邮箱\",\n  \"open_id\": \"OpenID\",\n  \"google_account\": \"谷歌账号\",\n  \"not_bound\": \"未绑定\",\n  \"all_order\": \"全部订单\",\n  \"all_order_payment\": \"全部支付\",\n  \"order_id\": \"订单ID\",\n  \"order_no\": \"订单号\",\n  \"order_subscription\": \"订阅服务\",\n  \"order_amount\": \"订单金额\",\n  \"order_status\": \"状态\",\n  \"order_status_pending\": \"待支付\",\n  \"order_status_paid\": \"已支付\",\n  \"order_status_refunded\": \"已退款\",\n  \"order_status_timeout\": \"已超时\",\n  \"order_status_expired\": \"已过期\",\n  \"order_create_time\": \"下单时间\",\n  \"order_payment_type\": \"类型\",\n  \"order_payment_type_wechat\": \"微信支付\",\n  \"order_payment_type_alipay\": \"支付宝支付\",\n  \"order_payment_type_manual\": \"手动转账\",\n  \"order_subscription_version\": \"订阅版本\",\n  \"order_subscription_duration\": \"订阅时长\",\n  \"table_footer_text\": \"共有 {total} 条\",\n  \"app_config\": \"应用配置\",\n  \"market_insight\": \"市场洞察\",\n  \"opportunity_capture\": \"商机捕获\",\n  \"product_mastery\": \"吃透产品\",\n  \"media_operation\": \"媒体运营\",\n  \"usage_case\": \"使用案例\",\n  \"usage_case_desc\": \"为你的应用添加使用案例，让用户更加容易上手\",\n  \"input\": \"输入\",\n  \"output\": \"输出\",\n  \"output_variable\": \"输出变量\",\n  \"usage_scene\": \"使用场景\",\n  \"usage_scene_desc\": \"为你的应用添加更多使用场景\",\n  \"image\": \"图片\",\n  \"database_management\": \"数据库管理\",\n  \"database_management_desc\": \"数据库管理员和开发人员可以使用这个工具来快速生成SQL语句，查询、更新和管理数据库，提高工作效率。\",\n  \"scene\": \"场景\",\n  \"function_update\": \"功能更新\",\n  \"function_update_desc\": \"产品功能更新动态\",\n  \"notification_center\": \"通知中心\",\n  \"access_model\": \"接入模型\",\n  \"name\": \"名称\",\n  \"role_instruction\": \"角色指令\",\n  \"role_instruction_desc\": \"用于对 AI 的回复做出一系列指令和约束\",\n  \"optimize\": \"优化\",\n  \"optimize_tip\": \"角色指令自动优化\",\n  \"generate_tip\": \"角色指令自动生成\",\n  \"icon\": \"图标\",\n  \"website_name\": \"网站名称\",\n  \"group_management\": \"分组管理\",\n  \"display_order\": \"显示顺序\",\n  \"permission_setting\": \"使用范围\",\n  \"expand_setting\": \"拓展设置\",\n  \"base_setting\": \"欢迎语\",\n  \"over_response\": \"超纲回复\",\n  \"visible_range\": \"可见范围\",\n  \"dialogue_frequency\": \"对话频率\",\n  \"dialogue_total\": \"对话总量\",\n  \"limit\": \"限制\",\n  \"second\": \"秒\",\n  \"send\": \"发送\",\n  \"unit_messages\": \"条信息\",\n  \"unit_messages_v2\": \"条\",\n  \"over_message\": \"超出将默认回复\",\n  \"limit_every_dialogue\": \"限制每个用户总对话数\",\n  \"select_agent\": \"选择智能体\",\n  \"debug_preview\": \"调试预览\",\n  \"restart\": \"重新开始\",\n  \"start_running\": \"开始运行\",\n  \"sync_output_variable\": \"同步输出变量\",\n  \"not_found_url\": \"无法找到URL，请检查智能体是否设置正确\",\n  \"message_input_placeholder\": \"发消息或输入您的问题...\",\n  \"workspace\": \"工作空间\",\n  \"edit_agent\": \"编辑智能体\",\n  \"coze_workflow_link\": \"Coze工作流“编辑状态”的链接\",\n  \"model_name\": \"模型名称\",\n  \"model_name_placeholder\": \"请输入模型名称\",\n  \"prompt_placeholder\": \"请输入提示词\",\n  \"copyright_desc\": \"Copyright © 2014-{year} 广州群应用网络科技有限公司. All Rights Reserved 版权所有 粤ICP备17114055号\",\n  \"no_permission_tip\": \"尚未获得使用该功能的权限，请联系管理员开启\",\n  \"not_found_tip\": \"未找到对应页面 或者 尚未获得使用该功能的权限，请联系管理员开启\",\n  \"go_home\": \"回到首页\",\n  \"register\": \"注册\",\n  \"username\": \"用户名\",\n  \"account\": \"账号\",\n  \"password\": \"密码\",\n  \"group_min_one\": \"至少保留一个分组\",\n  \"group_delete_confirm\": \"确定删除该分组？\",\n  \"group_not_empty\": \"分组不能为空\",\n  \"agent_delete_confirm\": \"确定删除该智能体？\",\n  \"feature_coming_soon\": \"功能即将上线，敬请期待\",\n  \"silicon_flow\": \"硅基流动\",\n  \"deep_seek\": \"深度求索\",\n  \"openai\": \"OpenAI\",\n  \"azure_open_ai\": \"Azure OpenAI\",\n  \"dark_moon\": \"月之暗面\",\n  \"chat_glm\": \"智谱AI\",\n  \"tongyi\": \"通义千问\",\n  \"coze_cn\": \"扣子\",\n  \"dify\": \"Dify\",\n  \"app_builder\": \"百度千帆AppBuilder\",\n  \"coze\": \"Coze\",\n  \"53ai\": \"53AI\",\n  \"fast_gpt\": \"FastGPT\",\n  \"yuanqi\": \"腾讯元器\",\n  \"bailian\": \"阿里百炼\",\n  \"volcengine\": \"火山方舟\",\n  \"n8n\": \"n8n\",\n  \"sort\": \"排序\",\n  \"official_website\": \"首页\",\n  \"create_new_enterprise\": \"创建新企业/组织\",\n  \"return\": \"返回\",\n  \"apply_open\": \"申请开通\",\n  \"user_register\": \"用户注册\",\n  \"account_register\": \"注册账号\",\n  \"or\": \"或\",\n  \"other_login_method\": \"其他登录方式\",\n  \"account_psd\": \"账号密码\",\n  \"mobile_login\": \"短信登录\",\n  \"apply_success\": \"申请成功\",\n  \"apply_success_desc\": \"我们会在24小时内完成审核，你也可以扫码添加专属客服了解进度\",\n  \"agent_not_found\": \"请先保存创建智能体\",\n  \"agent_channel_type_not_found\": \"渠道类型未找到，请先保存后再进行调试\",\n  \"permanent_effect\": \"永久生效\",\n  \"empty_to_not_change\": \"留空为不变更\",\n  \"api_host\": \"后端服务API\",\n  \"ap_host_fastgpt\": \"API 根地址\",\n  \"api_screet\": \"API密钥\",\n  \"api_botid\": \"智能体ID\",\n  \"api_botid_en\": \"Bot ID\",\n  \"api_appid\": \"应用ID\",\n  \"api_key\": \"API Key\",\n  \"agent_type\": \"智能体类型\",\n  \"agent_type_chat\": \"对话型应用\",\n  \"agent_type_chat_v2\": \"对话型\",\n  \"agent_type_completion\": \"workflow型应用\",\n  \"agent_type_completion_v2\": \"应用型\",\n  \"agent_type_workflow\": \"工作流编排对话型应用\",\n  \"agent_file_parse\": \"文档解析\",\n  \"agent_image_parse\": \"图片视觉\",\n  \"app_type\": \"应用类型\",\n  \"how_get\": \"如何获取\",\n  \"53ai_api_endpoint\": \"API Endpoint\",\n  \"53ai_api_screet\": \"Secret Key\",\n  \"upload_pem_file_tip\": \"请上传pem文件\",\n  \"usage_range\": \"使用范围\",\n  \"internal_member_group\": \"内部成员分组\",\n  \"dify_agent_get_tip\": \"前往Dify并登录（{url}） \\n第一步：选择要接入的智能体，点\\\"访问API\\\" \\n第二步：右上角复制\\\"API服务器\\\" 和 \\\"API密钥\\\"，填入下列表单。\",\n  \"53ai_agent_get_tip\": \"前往53AI并登录（{url}） \\n 第一步：选择要接入的智能体，点击\\\"接入使用\\\" \\n第二步：在复制\\\"API Endpoint\\\" 、 \\\"Bot-Id\\\" 和 \\\"SECRET_KEY\\\"，填入下列表单。\",\n  \"volcengine_agent_get_tip\": \"前往火山引擎（{ url }） \\n第一步：登录火山方舟，点击进入我的应用（{ my_url }）\\n第二步：点击已有的应用（或创建应用），点复制左上角的bot-xxxxxx（后面有个复制按钮），粘贴到下面表单\\n第三步：点击右上角“API调用指南”，点击选择API Key并复制，然后复制出一个key粘贴到下面表单\",\n  \"bailian_agent_get_tip\": \"前往阿里百炼并登录（{ url }）\\n第一步：登录阿里百炼，去到应用 - 应用管理页。\\n第二步：选择一个应用，复制应用卡片中的“应用ID”粘贴到下面表单。\\n第三步：点应用卡片下的发布，获取API-KEY，复制粘贴到下面表单。\",\n  \"yuanqi_agent_get_tip\": \"前往腾讯元器（{ url }） \\n第一步：登录腾讯元器，去到我的创建。\\n第二步：选择一个智能体卡片的右下角更多按钮，点击调用API（新建智能体要等审核通过才有）。\\n第三步：点击复制智能体ID，粘贴到下面表单。\\n第四步：点击复制Token，粘贴到下面表单。\",\n  \"fastgpt_agent_get_tip\": \"前往 FastGPT（ {url} ） \\n第一步：登录FastGPT，点击进入「工作台」,点击选择要接入的应用；\\n第二步：进入应用，在「发布渠道」下选择\\\"API 访问\\\"；\\n第三步：在API密钥管理下，点击新建，新建成功后复制\\\"API KEY\\\"填入表单；\\n第四步：复制\\\"API 根地址\\\",填入表单；\",\n  \"maxkb_agent_get_tip\": \"前往 MaxKB（ {url} ） \\n第一步：下载MaxKB客户端；\\n第二步：在「应用」下，点击要接入的应用；\\n第三步：在\\\"API 访问凭据\\\"下复制Base URL，创建并复制API Key，填入下列表单；\",\n  \"tip\": \"提示\",\n  \"auth_required\": \"{provider_name}未授权，请先前往{provider_name}授权\",\n  \"intelligent_agent_platform\": \"智能体平台\",\n  \"cloud_computing_platform\": \"云计算平台\",\n  \"model_platform\": \"大模型平台\",\n  \"local_config_limited_tip\": \"配置受限提示\",\n  \"local_config_limited_desc\": \"由于当前系统访问为内网地址({url})，无法添加/配置Coze 智能体、微信支付、支付宝支持，需要部署到外网能访问的地址访问再配置。\",\n  \"know_it\": \"知道了\",\n  \"selected_tip\": \"已选择 {total} 个\",\n  \"support_image\": \"支持图片\",\n  \"debugger_config_change_confirm\": \"修改设置将重置调试区域，需要保存并重新开始调试\",\n  \"save_and_restart\": \"保存并重新开始\",\n  \"title\": \"标题\",\n  \"commom\": {\n    \"add_manual\": \"手动添加\",\n    \"add_market\": \"从应用市场添加\"\n  },\n  \"jump_path\": \"跳转地址\",\n  \"open_method\": \"打开方式\",\n  \"navigation_is_open\": \"是否导航显示\",\n  \"page_edit\": \"页面编辑\",\n  \"last_edit\": \"最近编辑\",\n  \"opening_statement\": \"开场白\",\n  \"suggested_questions\": \"提问引导\",\n  \"max_add_tip\": \"最多添加{max}个\",\n  \"join_group\": \"加入交流群\",\n  \"join_group_desc\": \"加入交流群，共同学习进步\",\n  \"start_time\": \"开始时间\",\n  \"end_time\": \"结束时间\",\n  \"filter\": \"筛选\",\n  \"user/mobile\": \"用户/手机号\",\n  \"summary\": \"摘要\",\n  \"message_count\": \"消息数\",\n  \"detail\": \"详情\",\n  \"dialogue_detail\": \"对话详情\",\n  \"more\": \"更多\",\n  \"keyword\": \"关键词\",\n  \"software_style\": \"软件风格\",\n  \"website_style\": \"网站风格\",\n  \"system_log\": {\n    \"log_label\": \"日志\",\n    \"log_action\": \"动作\",\n    \"log_module\": \"模块\",\n    \"log_operator\": \"操作人\",\n    \"log_time\": \"时间\",\n    \"log_ip\": \"IP\"\n  },\n  \"version\": {\n    \"title\": \"版本\",\n    \"scan_consult\": \"扫码咨询\",\n    \"upgrade_tip\": \"升级提示\",\n    \"upgrade\": \"升级版本\",\n    \"upgrade_renew\": \"升级版本/续期\",\n    \"not_support\": \"当前版本不支持\",\n    \"agent_limit\": \"智能体添加数量达上限，请升级后尝试添加\",\n    \"upgrade_hide_logo\": \"升级至企业版，开启隐藏技术支持Logo\"\n  },\n  \"knowledge\": {\n    \"name\": \"知识库\",\n    \"short_name\": \"知识\"\n  },\n\n  \"space\": {\n    \"title\": \"团队空间\",\n    \"search_placeholder\": \"输入空间名称\",\n    \"name\": \"团队空间\",\n    \"name_placeholder\": \"请输入空间名称\",\n    \"icon\": \"图标\",\n    \"capacity\": \"容量\",\n    \"description\": \"简介\",\n    \"description_placeholder\": \"请输入简介\",\n    \"delete_tip\": \"当前空间中有{total}个知识库，请先清空知识库后再删除空间\",\n    \"delete_confirm\": \"确定删除空间吗\",\n    \"delete_confirm_tip\": \"请注意！本操作将清空该空间里的所有内容。<br>请输入需要删除的空间名称：{name}\",\n    \"delete_confirm_tip_placeholder\": \"请输入要删除的空间名称\",\n    \"system\": \"系统\",\n    \"system_space_delete_tip\": \"系统空间，无法删除\"\n  },\n  \"common\": {\n    \"name\": \"名称\",\n    \"short_name\": \"简称\",\n    \"member\": \"成员\",\n    \"creator\": \"创建人\",\n    \"created_time\": \"创建时间\"\n  },\n  \"action\": {\n    \"create\": \"创建\",\n    \"add\": \"添加\",\n    \"added\": \"已添加\",\n    \"edit\": \"编辑\",\n    \"manage\": \"管理\",\n    \"delete\": \"删除\",\n    \"save\": \"保存\",\n    \"operation\": \"操作\",\n    \"more\": \"更多\",\n    \"cancel\": \"取消\",\n    \"setting\": \"设置\",\n    \"confirm\": \"确认\"\n  },\n  \"default_links\": {\n    \"default_setting\": \"默认设置\",\n    \"website\": \"网站\",\n    \"jump_path\": \"跳转地址\"\n  },\n  \"message_status\": {\n    \"create_success\": \"已创建\",\n    \"save_success\": \"已保存\",\n    \"logic_reasoning_required\": \"请选择逻辑推理模型\",\n    \"vector_embedding_required\": \"请选择向量嵌入模型\",\n    \"rerank_model_required\": \"请选择rerank模型\"\n  },\n  \"agent\": {\n    \"name\": \"智能体\",\n    \"name_v2\": \"智能体名称\",\n    \"base_info\": \"基础信息\",\n    \"input_variable\": \"输入\",\n    \"output_variable\": \"输出\",\n    \"variable_name\": \"变量名称\",\n    \"variable_type\": \"变量类型\",\n    \"variable_label\": \"显示名称\",\n    \"variable_desc\": \"描述\",\n    \"variable_required\": \"是否必填\",\n    \"variable_max_length\": \"最大输入字数\",\n    \"variable_show_word_limit\": \"是否展示字数\",\n    \"variable_options\": \"选项\",\n    \"coze\": {\n      \"workspace\": \"工作空间\",\n      \"workflow_link\": \"扣子工作流\\\"编辑状态\\\"的链接\",\n      \"agent_link\": \"扣子智能体\\\"编辑状态\\\"的链接\",\n      \"agent_type_chat\": \"对话型（智能体）\",\n      \"agent_type_chat_desc\": \"用户与大模型进行对话，由一个大模型自主思考决策，适用于较为简单的业务逻辑。\",\n      \"agent_type_workflow\": \"应用型（工作流）\",\n      \"agent_type_workflow_desc\": \"工作流是一系列可执行指令的集合，用于实现业务逻辑或完成特定任务。\"\n    },\n    \"53ai\": {\n      \"agent_type_chat\": \"对话型（智能问答）\",\n      \"agent_type_chat_desc\": \"用户与大模型进行对话，由一个大模型自主思考决策，适用于较为简单的业务逻辑。\",\n      \"agent_type_workflow\": \"应用型（应用智改）\",\n      \"agent_type_workflow_desc\": \"用户在表单录入需求，由大模型依据要求思考输出，适用于复杂业务逻辑的智能改造场景 。\"\n    },\n    \"dify\": {\n      \"agent_type_chat\": \"对话型 （聊天助手/Agent/Chatflow）\",\n      \"agent_type_chat_desc\": \"用户与大模型进行对话，由一个大模型自主思考决策，适用于较为简单的业务逻辑。\",\n      \"agent_type_workflow\": \"应用型（工作流/文本生成应用）\",\n      \"agent_type_workflow_desc\": \"工作流是一系列可执行指令的集合，用于实现业务逻辑或完成特定任务。 \"\n    },\n    \"fastgpt\": {\n      \"agent_type_chat\": \"对话型（简易应用/工作流）\",\n      \"agent_type_chat_desc\": \"用户与大模型进行对话，由一个大模型自主思考决策，适用于较为简单的业务逻辑。\",\n      \"agent_type_workflow\": \"应用型（插件）\",\n      \"agent_type_workflow_desc\": \"可以自定义输入和输出的工作流，通常用于封装重复使用的工作流。\"\n    },\n    \"relate_app\": {\n      \"title\": \"关联场景\",\n      \"desc\": \"将智能体的“输出”赋值给关联场景智能体的“输入”，实现多场景任务的自动化流转。\",\n      \"input_mapping\": \"传参映射\",\n      \"execution_rule\": \"执行规则\",\n      \"auto_execution\": \"自动执行\",\n      \"manual_execution\": \"手动执行\"\n    }\n  },\n  \"form\": {\n    \"input_placeholder\": \"请输入\",\n    \"select_placeholder\": \"请选择\",\n    \"set_variable_placeholder\": \"请设置｛#变量｝\"\n  },\n  \"file\": {\n    \"type_limit\": \"目前支持仅{accept}格式文件\",\n    \"size_empty\": \"文件内容不能为空\",\n    \"size_limit\": \"文件上传大小不能超过{size}MB({name}大小已超出)\",\n    \"upload_limit\": \"最多上传{limit}个文件\"\n  },\n  \"variable_type\": {\n    \"text\": \"单行文本\",\n    \"textarea\": \"多行文本\",\n    \"inputNumber\": \"数字\",\n    \"select\": \"选项\",\n    \"date\": \"日期\",\n    \"tag\": \"标签\",\n    \"file\": \"文件\",\n    \"markdown\": \"Markdown\",\n    \"image\": \"图片\",\n    \"audio\": \"音频\",\n    \"video\": \"视频\",\n    \"array_text\": \"数组文本\",\n    \"array_image\": \"数组图片\",\n    \"array_audio\": \"数组音频\",\n    \"array_video\": \"数组视频\",\n    \"array_file\": \"数组文件\"\n  },\n  \"model\": {\n    \"reason\": \"推理模型\",\n    \"embedding\": \"向量嵌入模型\",\n    \"rerank\": \"rerank模型\"\n  },\n  \"platform\": {\n    \"model_tip\": \"{total}个{ type }模型\",\n    \"model_test_success\": \"测试成功，「{platform}」当前可正常使用\",\n    \"model_test_failed\": \"测试失败：您已超出当前配额，请检查您的账单详情\",\n    \"failed_tip\": \"测试失败：请检查授权key是否可用。{error}\"\n  }\n}\n"
  },
  {
    "path": "web/console/src/locales/zh-tw.json",
    "content": "{\n  \"response_code\": {\n    \"success\": \"成功\",\n    \"param_error\": \"參數錯誤\",\n    \"database_error\": \"數據庫錯誤\",\n    \"network_error\": \"網絡錯誤，請重新嘗試\",\n    \"system_error\": \"系統錯誤\",\n    \"auth_error\": \"身份認證錯誤\",\n    \"not_found_error\": \"未找到錯誤\",\n    \"unauthorized_error\": \"未授權錯誤\",\n    \"file_error\": \"文件錯誤\",\n    \"forbidden_error\": \"禁止錯誤\",\n    \"agent_error\": \"智能體錯誤\",\n    \"token_expired_error\": \"令牌過期錯誤\",\n    \"verification_code_error\": \"驗證碼錯誤\"\n  },\n  \"response_message\": {\n    \"unknown_error\": \"未知錯誤\",\n    \"user_not_found\": \"用戶不存在\",\n    \"username_or_password_is_incorrect\": \"用戶名或密碼錯誤\",\n    \"operate_too_fast\": \"操作過快，請稍後再試\"\n  },\n  \"response_data\": {\n    \"domain_already_bound\": \"該域名已被綁定\",\n    \"apply_already_submitted\": \"您已提交過申請，請勿重複提交\"\n  },\n  \"module\": {\n    \"parse\": \"內容清洗\",\n    \"viewer\": \"文檔查看\",\n    \"agent_type_prompt\": \"通過Prompt創建\",\n    \"agent_type_53ai_agent\": \"53AI智能體\",\n    \"agent_type_53ai_workflow\": \"53AI應用智改\",\n    \"agent_type_coze_agent_cn\": \"扣子智能體\",\n    \"agent_type_coze_workflow_cn\": \"扣子應用智改\",\n    \"agent_type_coze_agent\": \"Coze智能體\",\n    \"agent_type_coze_workflow\": \"Coze工作流\",\n    \"agent_type_dify_agent\": \"Dify智能體\",\n    \"agent_type_dify_workflow\": \"Dify工作流\",\n    \"agent_type_yuanqi\": \"腾讯元器\",\n    \"agent_type_bailian\": \"阿里百炼\",\n    \"agent_type_volcengine\": \"火山引擎\",\n    \"agent_sort_desc\": \"數字越大，排名越靠前\",\n    \"dialogue\": \"工作對話\",\n    \"draft\": \"智能方案\",\n    \"writer\": \"內容創作\",\n    \"aibox\": \"AI百寶箱\",\n    \"bot\": \"智能體\",\n    \"prompt\": \"提示詞\",\n    \"library\": \"知識庫設置\",\n    \"search_section\": \"AI問答助手\",\n    \"search\": \"AI問答\",\n    \"chunk_setting\": \"拆分模板\",\n    \"model_setting\": \"模型設定\",\n    \"system\": \"系統管理\",\n    \"dialogue_digital_employee\": \"AI員工\",\n    \"dialogue_prompt\": \"提示詞\",\n    \"dialogue_large_model\": \"大模型\",\n    \"enterprise_info\": \"企業信息\",\n    \"large_model\": \"大模型接入\",\n    \"user\": \"員工賬號\",\n    \"combinat\": \"單點登錄\",\n    \"system_log\": \"系統日誌\",\n    \"homepage\": \"首頁\",\n    \"app_management\": \"應用管理\",\n    \"agent\": \"智能體\",\n    \"knowledge\": \"知識管理\",\n    \"space\": \"空間管理\",\n    \"agent_search_placeholder\": \"搜索智能體\",\n    \"prompt_search_placeholder\": \"提示詞名稱\",\n    \"ai_product\": \"AI 產品\",\n    \"ai_toolbox\": \"AI工具\",\n    \"ai_toolbox_search_placeholder\": \"搜索工具\",\n    \"operation_management\": \"運營管理\",\n    \"operation_user\": \"用戶數據\",\n    \"operation_user_delete_confirm\": \"確定刪除該用戶嗎？\",\n    \"operation_user_search_placeholder\": \"成員名/手機號/電子郵箱\",\n    \"operation_order\": \"訂單數據\",\n    \"operation_order_delete_confirm\": \"確定刪除該訂單嗎？\",\n    \"operation_order_search_placeholder\": \"用戶/訂單ID\",\n    \"operation_order_user_tip\": \"可直接輸入用戶暱稱進行選擇，若選擇多位用戶，則為每位用戶單獨創建一份訂單\",\n    \"operation_visit\": \"訪問數據\",\n    \"site_config\": \"站點配置\",\n    \"system_config\": \"系統配置\",\n    \"website_info\": \"站點信息\",\n    \"website_info_logo\": \"Logo\",\n    \"website_info_logo_tip\": \"請上傳1:1比例的方形Logo（建議尺寸：512×512px）支持PNG/JPG格式，文件大小不超過2MB\",\n    \"website_info_logo_placeholder\": \"請上傳Logo\",\n    \"website_info_ico\": \"ico\",\n    \"website_info_ico_tip\": \"建議尺寸為 64×64\",\n    \"website_info_ico_placeholder\": \"請上傳ico\",\n    \"website_info_name\": \"站點名稱\",\n    \"website_info_name_placeholder\": \"請輸入站點名稱\",\n    \"website_info_language\": \"默認語言\",\n    \"website_info_keyword\": \"關鍵詞\",\n    \"website_info_keyword_placeholder\": \"請輸入關鍵詞\",\n    \"website_info_keyword_placeholder_v2\": \"可輸入多個關鍵詞，每個關鍵詞輸入後按Enter即可\",\n    \"website_info_desc\": \"站點描述\",\n    \"website_info_desc_placeholder\": \"請輸入站點描述\",\n    \"website_info_copyright\": \"版權信息\",\n    \"website_info_copyright_placeholder\": \"請輸入版權信息\",\n    \"website_info_type\": \"站點類型\",\n    \"website_type_independent\": \"AI 獨立站\",\n    \"website_type_independent_desc\": \"站點僅為註冊用戶訪問使用\",\n    \"website_type_enterprise\": \"企業 AI 門戶\",\n    \"website_type_enterprise_desc\": \"站點僅為內部用戶訪問使用\",\n    \"website_type_industry\": \"行業 AI 門戶\",\n    \"website_type_industry_desc\": \"站點為內部員工+註冊用戶 訪問使用\",\n    \"website_info_template\": \"站點模板\",\n    \"website_info_layout\": \"網站佈局\",\n    \"platform\": \"平台接入\",\n    \"platform_v2\": \"平台\",\n    \"all_platform\": \"全部平台\",\n    \"platform_delete_confirm\": \"確定刪除該智能體平台嗎？\",\n    \"platform_tools\": \"拓展工具\",\n    \"platform_auth_client_id\": \"客戶端ID\",\n    \"platform_auth_client_id_placeholder\": \"請輸入客戶端ID\",\n    \"platform_auth_client_secret\": \"客戶端密鑰\",\n    \"platform_auth_client_secret_placeholder\": \"請輸入客戶端密鑰\",\n    \"platform_auth_coze_confirm\": \"確認你在扣子已經保存\",\n    \"platform_auth_url\": \"URL\",\n    \"platform_auth_secret\": \"Secret\",\n    \"platform_auth_secret_id\": \"SecretId\",\n    \"platform_auth_secret_id_placeholder\": \"請輸入SecretId\",\n    \"platform_auth_secret_key\": \"SecretKey\",\n    \"platform_auth_secret_key_placeholder\": \"請輸入SecretKey\",\n    \"platform_search_online\": \"聯網搜索\",\n    \"platform_search_online_desc\": \"通過博查搜索網絡內容，可總結摘要\",\n    \"platform_search_online_delete_confirm\": \"確定刪除該拓展工具嗎？\",\n    \"platform_tool_api_key\": \"API Key\",\n    \"platform_tool_api_key_placeholder\": \"輸入您的API Key\",\n    \"platform_model\": \"通用大模型\",\n    \"platform_model_add\": \"選擇模型接入\",\n    \"platform_model_organization_id\": \"組織 ID\",\n    \"platform_model_organization_id_placeholder\": \"輸入您的組織 ID\",\n    \"platform_model_base_url\": \"API Base\",\n    \"platform_model_base_url_azure\": \"API 域名\",\n    \"platform_model_base_url_maxkb\": \"Base URL\",\n    \"platform_model_base_url_placeholder\": \"輸入您的API Base，如：https://api.openai.com\",\n    \"platform_model_base_url_placeholder_53ai\": \"輸入您的API Base，如：https://api.53ai.com\",\n    \"platform_model_api_endpoint\": \"自定義 API endpoint 地址\",\n    \"platform_model_api_endpoint_placeholder\": \"輸入您的自定義 API endpoint 地址，如：https://api.deepseek.com/v1 or https://api.deepseek.com\",\n    \"platform_model_models_azure\": \"基础模型\",\n    \"platform_model_models_azure_placeholder\": \"選擇您的基础模型\",\n    \"platform_model_models\": \"啟用模型\",\n    \"platform_model_models_empty\": \"暫無可用模型\",\n    \"platform_model_models_total\": \"{total}個模型\",\n    \"platform_model_models_edit\": \"編輯模型\",\n    \"platform_model_models_id\": \"模型ID\",\n    \"platform_model_models_name\": \"模型名稱\",\n    \"platform_model_delete_confirm\": \"確定刪除該模型嗎？\",\n    \"navigation\": \"導航菜單\",\n    \"pc_navigation\": \"PC端導航\",\n    \"mobile_navigation\": \"移動端導航\",\n    \"nav_type_homepage\": \"首頁\",\n    \"nav_type_single\": \"單頁\",\n    \"nav_type_agent\": \"智能體\",\n    \"nav_target_self\": \"原窗口\",\n    \"nav_target_blank\": \"新窗口\",\n    \"nav_name\": \"欄目\",\n    \"nav_name_placeholder\": \"請選擇欄目名稱\",\n    \"nav_agent_class_placeholder\": \"請選擇分類\",\n    \"nav_agent_placeholder\": \"請選擇智能體\",\n    \"nav_type\": \"類型\",\n    \"nav_target\": \"打開方式\",\n    \"nav_url\": \"跳轉鏈接\",\n    \"nav_visible\": \"導航欄顯示\",\n    \"nav_operation\": \"操作\",\n    \"nav_operation_seo\": \"SEO\",\n    \"action_delete_confirm\": \"確認是否刪除該欄目嗎？\",\n    \"nav_seo_setting\": \"SEO設置\",\n    \"nav_seo_setting_title\": \"SEO Title\",\n    \"nav_seo_setting_keywords\": \"SEO Keywords\",\n    \"nav_seo_setting_keywords_tip\": \"每個關鍵詞請用英文逗號隔開\",\n    \"nav_seo_setting_description\": \"SEO Description\",\n    \"payment\": \"支付配置\",\n    \"subscription\": \"訂閱服務\",\n    \"subscription_header_title\": \"訂閱服務與定價\",\n    \"subscription_free\": \"免費版\",\n    \"subscription_pro\": \"專業版\",\n    \"subscription_flagship\": \"旗艦版\",\n    \"subscription_charge\": \"訂閱費用\",\n    \"subscription_points\": \"積分\",\n    \"subscription_advanced_points\": \"高級積分\",\n    \"subscription_agent_bots\": \"可使用的智能體\",\n    \"subscription_advanced_agent_bots\": \"可使用的高級智能體\",\n    \"subscription_ai_assistant\": \"跨平台的 AI 助手\",\n    \"subscription_ai_assistant_tip\": \"啟用支持 macOs、Windows以及瀏覽器插件開放給用戶下載使用。\",\n    \"subscription_delete_confirm\": \"確定刪除該訂閱嗎？\",\n    \"domain\": \"站點域名\",\n    \"domain_exclusive\": \"專屬域名\",\n    \"domain_exclusive_label\": \"自定義你的專屬域名\",\n    \"domain_exclusive_validator_1\": \"請使用小寫字母或數字或 \\\"-\\\"，且不少於5個字符\",\n    \"domain_exclusive_validator_2\": \"域名已被佔用，請使用其他域名\",\n    \"domain_independent\": \"獨立域名\",\n    \"domain_independent_label\": \"自定義你的獨立域名\",\n    \"domain_independent_desc\": \"添加一個你想要使用的自定義域名。\",\n    \"domain_independent_delete_confirm\": \"確定刪除該獨立域名嗎？\",\n    \"domain_independent_cname\": \"CNAME方式\",\n    \"domain_independent_self\": \"自有服務器中轉\",\n    \"domain_independent_cname_desc\": \"請從以下列表中選擇一個合適的 CNAME 地址，去您已備案的域名廠商設置域名 DNS 解析。\",\n    \"domain_independent_cname_desc_1\": \"1. 域名在阿里雲備案：53aihub.n1.53ai.com\",\n    \"domain_independent_cname_desc_2\": \"2. 域名在騰訊雲備案：53aihub.n2.53ai.com\",\n    \"domain_independent_cname_desc_3\": \"3. 香港服務器，略慢：53aihub.n3.53ai.com\",\n    \"domain_independent_https\": \"啟用 HTTPS\",\n    \"domain_independent_https_always\": \"始終使用 HTTPS\",\n    \"domain_independent_ssl\": \"SSL證書\",\n    \"domain_independent_ssl_option_1\": \"由53AI 生成\",\n    \"domain_independent_ssl_option_2\": \"使用自有證書\",\n    \"domain_independent_ssl_certificate\": \"證書\",\n    \"domain_independent_ssl_certificate_placeholder\": \"請將證書文件內容複製後粘貼到這裡\",\n    \"domain_independent_ssl_private_key\": \"私鑰\",\n    \"domain_independent_ssl_private_key_placeholder\": \"請將證書私鑰複製後粘貼到這裡\",\n    \"domain_independent_self_desc_1\": \"方式一：使用 nginx 等 web 服務器做簡單配置即可實現。\",\n    \"domain_independent_self_desc_2\": \"方式二：使用阿里雲、騰訊雲、七牛雲等雲廠商的全站加速服務 (DCDN)。\",\n    \"domain_independent_self_desc_3\": \"Docs Site ID：{site_id}\",\n    \"use_subdirectories\": \"使用子目錄\",\n    \"use_subdirectories_tip\": \"如果你想使用子目錄(例如 53aihub/docs)，可以打開開關\",\n    \"statistics\": \"三方統計\",\n    \"statistics_header_title\": \"嵌入代碼\",\n    \"statistics_header_desc\": \"您可以通過嵌入代碼為您的站點添加客服插件、訪問統計等功能\",\n    \"statistics_textarea_label_1\": \"Head頭部代碼\",\n    \"statistics_textarea_label_1_example\": \"請輸入JS代碼……\\n例如\\n<script>console.log('hello world')</script>\\n或\\n<script src=\\\"xxx\\\"></script>\",\n    \"statistics_textarea_label_2\": \"CSS代碼\",\n    \"statistics_textarea_label_2_example\": \"請輸入CSS代碼\",\n    \"SMTP\": \"註冊與登錄\",\n    \"SMTP_email_log\": \"郵箱註冊/登錄\",\n    \"SMTP_mobile_log\": \"手機註冊/登錄\",\n    \"SMTP_server\": \"SMTP伺服器\",\n    \"SMTP_port\": \"SMTP端口\",\n    \"SMTP_email_account\": \"郵箱帳號\",\n    \"SMTP_email_password\": \"郵箱密碼\",\n    \"SMTP_receiver_email\": \"收件人郵箱\",\n    \"SMTP_addresser_email\": \"發件人郵箱\",\n    \"SMTP_send_email\": \"傳送測試郵件\",\n    \"SMTP_openTLS\": \"啟用TLS\",\n    \"site_decoration\": \"站點裝修\",\n    \"template_style\": \"模板風格\",\n    \"banner_diagram\": \"Banner圖\"\n  },\n  \"chat\": {\n    \"empty_desc\": \"在輸入框中填寫內容調試吧~\"\n  },\n  \"login\": {\n    \"unregistered_account_desc\": \"未註冊的賬號驗證後自動登錄\",\n    \"account_placeholder\": \"請輸入您的手機號/郵箱\",\n    \"email_placeholder\": \"請輸入您的郵箱\",\n    \"mobile_placeholder\": \"請輸入您的手機號\",\n    \"mobile_exists\": \"該手機號已註冊，請使用該賬號登錄。\",\n    \"mobile_no_exists\": \"該手機號未註冊，請先註冊。\",\n    \"email_exists\": \"該郵箱已註冊，請使用該賬號登錄。\",\n    \"email_no_exists\": \"該郵箱未註冊，請先註冊。\",\n    \"password_placeholder\": \"請輸入密碼\",\n    \"forget_password\": \"忘記密碼？\",\n    \"bind_mobile_login\": \"綁定手機號\",\n    \"password_login\": \"密碼登錄\",\n    \"password_login_v2\": \"使用密碼登錄\",\n    \"mobile_login\": \"手機驗證碼登錄\",\n    \"mobile_login_v2\": \"使用手機驗證碼登錄\",\n    \"wechat_login\": \"微信登錄\",\n    \"wechat_login_v2\": \"使用微信登錄\",\n    \"google_login\": \"谷歌登錄\",\n    \"google_login_v2\": \"使用谷歌登錄\",\n    \"agree_and_policy\": \"登錄即視您同意{agree}和{policy}\",\n    \"agree\": \"條款和條件\",\n    \"policy\": \"隱私政策\",\n    \"account_length\": \"賬號長度必須在 4-20 個字符之間\",\n    \"account_format\": \"賬號必須以字母開頭，只能包含字母、數字和下劃線\",\n    \"password_length\": \"密碼長度需在 8-20 個字元之間，可以是字母、數字、符號組合\",\n    \"password_length_v2\": \"密碼長度需在 8-20 個字元之間\",\n    \"password_format\": \"密碼必須包含大小寫字母和數字\",\n    \"password_not_match\": \"兩次輸入的密碼不一致\",\n    \"reset_password\": \"重置密碼\",\n    \"update_password\": \"更新密碼\",\n    \"back_to_login\": \"返回登錄\",\n    \"has_account\": \"已有賬號，\",\n    \"direct_login\": \"直接登錄\",\n    \"immediate_login\": \"立即登入\",\n    \"login_by_wechat\": \"請使用微信掃碼登入\",\n    \"select_reset_password_way\": \"選擇重設密碼的方式\",\n    \"select_register_way\": \"選擇註冊帳號的方式\",\n    \"email_validate\": \"郵箱驗證\",\n    \"mobile_validate\": \"手機驗證\",\n    \"new_password\": \"新密碼\",\n    \"new_password_placeholder\": \"請輸入新密碼\",\n    \"confirm_password\": \"重複新密碼\",\n    \"confirm_password_placeholder\": \"請再次輸入新密碼\",\n    \"verify_identity\": \"驗證身份\",\n    \"enterprise_info\": \"企業信息\",\n    \"application_complete\": \"完成申請\",\n    \"website_name\": \"網站名稱\",\n    \"website_name_placeholder\": \"請輸入網站名稱\",\n    \"contact_name\": \"聯繫人\",\n    \"contact_name_placeholder\": \"請輸入聯繫人\",\n    \"complete_registration_and_login\": \"完成註冊並登錄\",\n    \"apply_open_repetition\": \"您已提交過申請，請勿重複提交\",\n    \"select_enterprise\": \"選擇進入企業\",\n    \"new_user_tip\": \"你的初始密碼是\\\"{password}\\\"，請及時修改\",\n    \"I_remember\": \"我記住了\",\n    \"modify_password\": \"修改密碼\"\n  },\n  \"apply\": {\n    \"process\": \"審核中\",\n    \"expired\": \"已過期\",\n    \"reject\": \"已拒绝\",\n    \"refresh_list\": \"刷新列表\",\n    \"contact_customer_service\": \"遇到問題？聯繫客服解答\",\n    \"contact_customer_service_v2\": \"聯絡客服\",\n    \"create_site\": \"創建站點\",\n    \"create_title\": \"歡迎開通 53AI {project}\",\n    \"waiting_audit\": \"等待審核\",\n    \"create_success\": \"創建成功\",\n    \"expired_time_forever\": \"永久生效\",\n    \"enterprise_name_placeholder\": \"請輸入企業 / 組織名稱\",\n    \"domain\": \"域名\",\n    \"domain_placeholder\": \"請輸入你的域名\",\n    \"enterprise_not_empty\": \"企業 / 組織名稱不能為空\",\n    \"mobile_unregistered_tip\": \"該手機號未註冊，輸入驗證碼及登錄密碼完成企業建立\",\n    \"domain_already_use\": \"{domain} 已被使用，試試其他域名吧～\"\n  },\n  \"service\": {\n    \"title\": \"立即開通\",\n    \"consult_name\": \"首席客服顧問\",\n    \"desc_1\": \"您好，掃碼聯繫您的專屬顧問，\",\n    \"desc_2\": \"開通使用\",\n    \"desc_3\": \"您好，微信掃碼聯繫您的專屬顧問，\"\n  },\n  \"website_version\": {\n    \"free\": \"創業版\",\n    \"standard\": \"專業版\",\n    \"enterprise\": \"企業版\"\n  },\n  \"language_option_label\": {\n    \"zh-cn\": \"中文-CN\",\n    \"zh-tw\": \"中文-TW\",\n    \"en\": \"英文-EN\",\n    \"jp\": \"日文-JP\"\n  },\n  \"template_option_label\": {\n    \"portal\": \"AI門戶\",\n    \"doubao\": \"豆包風格\",\n    \"mita\": \"秘塔風格\",\n    \"kimi\": \"Kimi風格\",\n    \"independent\": \"獨立站\"\n  },\n  \"layout_option_label\": {\n    \"loose\": \"寬鬆\",\n    \"center\": \"居中\"\n  },\n  \"layout_option_desc\": {\n    \"loose\": \"布局寬鬆鋪滿屏幕，自適應用戶的分辨率\",\n    \"center\": \"布局緊湊且內容居中\"\n  },\n  \"order\": {\n    \"status\": {\n      \"all\": \"全部訂單\",\n      \"not_confirm\": \"待確認\",\n      \"pending\": \"待支付\",\n      \"paid\": \"已支付\",\n      \"expired\": \"已超時\",\n      \"cancelled\": \"已取消\"\n    },\n    \"confirm_tip\": \"确定则订单会设置为已支付，且会增加用户对应权益。\"\n  },\n  \"payment\": {\n    \"type\": {\n      \"all\": \"全部支付\",\n      \"alipay\": \"支付寶\",\n      \"wechat\": \"微信支付\",\n      \"manual\": \"手動轉賬\",\n      \"paypal\": \"PayPal\"\n    },\n    \"manual\": {\n      \"qrcode\": \"收款碼\",\n      \"qrcode_placeholder\": \"請上傳收款碼\",\n      \"desc\": \"備註\",\n      \"desc_placeholder\": \"請輸入備註，如：請使用微信/支付寶 掃碼支付以上金額\"\n    },\n    \"wechat_app_id\": \"AppID\",\n    \"wechat_app_id_placeholder\": \"請輸入AppID\",\n    \"wechat_mch_id\": \"微信支付商戶號\",\n    \"wechat_mch_id_placeholder\": \"請輸入微信支付商戶號\",\n    \"wechat_api_secret\": \"APIv3密鑰\",\n    \"wechat_api_secret_placeholder\": \"請輸入APIv3密鑰\",\n    \"wechat_app_id_tip\": \"登錄微信支付商戶平台 → 點擊「賬戶中心」→ 在「商戶信息」中獲取「微信支付商戶號」\",\n    \"wechat_mch_id_tip\": \"登錄微信公眾平台 → 設置 → 公眾號設置 → 基本配置 → 查看「開發者ID（AppID）」\",\n    \"wechat_api_secret_tip\": \"登錄微信支付商戶平台 → 賬戶中心 → API安全 → 設置「API密鑰」\",\n    \"wechat_serial_no\": \"證書序列號\",\n    \"wechat_serial_no_placeholder\": \"請輸入證書序列號\",\n    \"wechat_cert\": \"證書文件\",\n    \"wechat_cert_placeholder\": \"請上傳證書文件\",\n    \"wechat_private_key\": \"證書密鑰\",\n    \"wechat_private_key_placeholder\": \"請上傳證書密鑰\",\n    \"manual_tip\": \"如果不便提供包括支付寶和微信等支付通道，您也可以留下二維碼或，用戶支付後手動確認單。\",\n    \"manual_pay_qrcode\": \"付款碼\",\n    \"manual_pay_qrcode_placeholder\": \"請上傳付款碼\",\n    \"alipay_app_id\": \"支付寶AppID\",\n    \"alipay_app_id_placeholder\": \"請輸入支付寶AppID\",\n    \"alipay_mch_id\": \"應用私鑰\",\n    \"alipay_mch_id_placeholder\": \"請輸入應用私鑰\",\n    \"alipay_api_secret\": \"支付寶公鑰\",\n    \"alipay_api_secret_placeholder\": \"請輸入支付寶公鑰\",\n    \"alipay_guide_html\": \"1、登錄支付寶開放平台<a class='text-[#5A6D9E]' href='https://open.alipay.com/module/webApp/' target='_blank'>https://open.alipay.com/module/webApp/</a>創建\\\"網頁/移動應用\\\"，獲得APPID；\\n2、點擊進入應用，在「開發設置」\\\"接口加簽方式\\\"中按照支付寶官方的引導進行配置，獲取應用私鑰、支付寶公鑰；\\n3、在「開發設置」\\\"授權回調地址\\\"中填入: <span  style=\\\"color: #FA5151;\\\">{callback_url}</span><span class='copy-hook'></span>\\n4、在【API管理】接入\\\"電腦網站支付\\\"的能力，按照支付寶官方的引導進行配置或開通；\"\n  },\n  \"template_style\": {\n    \"website_style\": \"網站風格\",\n    \"website\": \"網站風格\",\n    \"software\": \"軟件風格\",\n    \"theme_color\": \"主題色\",\n    \"theme_color_v2\": \"主題顏色\",\n    \"text_color\": \"文本顏色\",\n    \"nav_bg_color\": \"導航背景\",\n    \"nav_text_color\": \"導航文本\",\n    \"page_footer_bg_color\": \"頁腳背景\",\n    \"page_footer_text_color\": \"頁腳文本\"\n  },\n  \"banner\": {\n    \"upload_image\": \"上傳圖片\",\n    \"upload_image_tip\": \"上傳 1920×380 的像素圖片效果最佳，圖片大小小於 10 MB\",\n    \"interval\": \"圖片輪播間隔\",\n    \"interval_tip\": \"當Banner區存在多張圖片時，設定圖片滾動時間間隔\"\n  },\n  \"wechat_payment\": {\n    \"mch_guide\": {\n      \"title\": \"如何獲取微信支付商戶號\",\n      \"step_1\": \"1、登錄微信支付官網（{url}）\",\n      \"step_2\": \"2、微信支付商戶號可在微信支付商戶平台的【賬戶中心 - 商戶信息】中查看。\",\n      \"step_3\": \"補充：如果還不是微信支付商家，可在登錄首頁點擊成為商家，註冊申請微信支付商戶號，按照提示填寫企業相關信息，如營業執照、對公賬戶等，提交審核。審核通過後，即可獲得微信支付商戶號。\"\n    },\n    \"app_guide\": {\n      \"title\": \"如何獲取APPID\",\n      \"step_1\": \"1、在微信支付商戶平台的【產品中心 - AppID賬號管理】中點擊“關聯APPID”，將之前獲取的公眾號或小程序的APPID填入並確認關聯。登錄微信開放平台，在消息中心中同意關聯。\",\n      \"step_2\": \"2、將已關聯的APPID，複製填入表單。\\n\\n補充：如果還未關聯任何公眾號，則需要先關聯公眾號，操作方法：點擊關聯AppID\",\n      \"step_3\": \"然後登錄微信公眾平台（{url}），進入公眾號後台，在【設置與開發 - 基本配置】中獲取開發者ID（AppID）。如果是小程序，可在微信公眾平台的小程序管理後台獲取小程序APPID。\"\n    },\n    \"api_guide\": {\n      \"title\": \"如何獲取APIV3密鑰\",\n      \"step_1\": \"1、登錄微信支付商戶平台，進入【賬戶中心 - 賬戶設置 - API安全】，點擊【APIv3密鑰】\",\n      \"step_2\": \"2、在彈出窗口中點擊“已溝通”，輸入一個32位的隨機密鑰（包含數字及大小寫字母），點擊獲取短信驗證碼，輸入驗證碼後點擊“確認”，即可設置成功。\"\n    },\n    \"cert_guide\": {\n      \"title\": \"如何获取支付证书文件与密钥\",\n      \"step_1\": \"1、登錄微信支付商戶平台，進入【賬戶中心 - 賬戶設置 - API安全】，點擊【APIv3密鑰】\",\n      \"step_2\": \"2、在彈出窗口中點擊“已溝通”，輸入一個32位的隨機密鑰（包含數字及大小寫字母），點擊獲取短信驗證碼，輸入驗證碼後點擊“確認”，即可設置成功。\"\n    },\n    \"serial_guide\": {\n      \"title\": \"如何获取证书序列号\",\n      \"step_1\": \"1、在微信支付商户平台的【账户中心 - API安全 】中查看证书的序列号。\"\n    }\n  },\n  \"alipay_payment\": {\n    \"app_guide\": {\n      \"title\": \"如何獲取APPID\",\n      \"step_1\": \"1、複製應用名稱下方的數字即是APPID\"\n    }\n  },\n  \"platform_auth\": {\n    \"coze_cn\": {\n      \"tip\": \"前往 扣子API-授权-创建新应用（{url}） \\n第一步：创建一个OAuth应用（\\\"客户端类型\\\"为\\\"Web后端应用\\\"）\\n第二步：在\\\"重定向URL\\\"中填入：{redirect_url} \\n第三步：将{client_id}和{client_secret}填入下列表单，权限全部勾选上并保存。\",\n      \"tip_1\": \"务必先在扣子端点击保存后再点确定\"\n    },\n    \"app_builder\": {\n      \"tip\": \"前往 百度智能云千帆（{url}）\\n第一步：登录后，点击左侧导航栏的\\\"API Key\\\" \\n第二步：点击创建API Key（\\\"服务\\\" 选择 \\\"千帆AppBuilder\\\"，按需配置应用资源）\\n第三步：完成创建，复制API Key填入下列表单。\"\n    },\n    \"53ai\": {\n      \"tip\": \"前往 53AI（{url}） 第一步：登录后，点击左侧导航栏的 \\\"设置\\\"\\n第二步：在\\\"企业信息\\\"下点击生成Secret Key\\n第三步：生成后，复制Sercet Key填入下列表单。\"\n    }\n  },\n  \"agent_app\": {\n    \"prompt\": \"Prompt\",\n    \"prompt_v2\": \"通過Prompt創建\",\n    \"53ai_agent\": \"53AI\",\n    \"53ai_workflow\": \"53AI\",\n    \"coze_agent_cn\": \"扣子\",\n    \"coze_workflow_cn\": \"扣子\",\n    \"coze_agent\": \"Coze智能體\",\n    \"coze_workflow\": \"Coze工作流\",\n    \"dify_agent\": \"Dify\",\n    \"dify_workflow\": \"Dify\",\n    \"app_builder\": \"千帆Appbuilder\",\n    \"yuanqi\": \"腾讯元器\",\n    \"bailian\": \"阿里百煉\",\n    \"volcengine\": \"火山方舟\",\n    \"fastgpt_agent\": \"FastGPT\",\n    \"fastgpt_workflow\": \"FastGPT\",\n    \"maxkb_agent\": \"MaxKB\",\n    \"n8n_workflow\": \"n8n\",\n    \"tencent\": \"腾讯云智能体开发平台\",\n    \"check_agent_config_tip\": \"請檢查智能體配置是否正確\",\n    \"failed_tip\": \"請檢查授權金鑰是否可用以及餘額是否充足\"\n  },\n  \"provider_platform\": {\n    \"prompt\": \"Prompt\",\n    \"openai\": \"OpenAI\",\n    \"deepseek\": \"DeepSeek\",\n    \"coze\": \"Coze\",\n    \"siliconflow\": \"硅基流动\",\n    \"zhipu\": \"智谱AI\",\n    \"azure\": \"Azure OpenAI\",\n    \"azure_open_ai\": \"Azure OpenAI\",\n    \"dark_moon\": \"月之暗面\",\n    \"tongyi\": \"通义千问\",\n    \"coze_cn\": \"扣子\",\n    \"app_builder\": \"百度千帆AppBuilder\",\n    \"dify\": \"Dify\",\n    \"53ai\": \"53AI\",\n    \"bailian\": \"阿里百煉\",\n    \"volcengine\": \"火山方舟\",\n    \"yuanqi\": \"腾讯元器\",\n    \"fastgpt\": \"FastGPT\",\n    \"maxkb\": \"MaxKB\",\n    \"n8n\": \"n8n\",\n    \"qianfan\": \"千帆\",\n    \"tencent\": \"腾讯云智能体开发平台\"\n  },\n  \"register_user\": {\n    \"title\": \"註冊用戶\"\n  },\n  \"internal_user\": {\n    \"title\": \"內部用戶\",\n    \"alias\": \"通訊錄\",\n    \"account\": {\n      \"title\": \"帳號\",\n      \"search_placeholder\": \"成員名/手機號/電子郵箱\",\n      \"name\": \"姓名\",\n      \"nickname\": \"暱稱\",\n      \"mobile\": \"手機\",\n      \"group\": \"用戶組\",\n      \"department\": \"部門\",\n      \"status\": \"狀態\",\n      \"add\": \"添加帳號\",\n      \"name_placeholder\": \"請輸入姓名\",\n      \"name_disabled_tip\": \"姓名来自第三方同步，不可修改\",\n      \"nickname_placeholder\": \"請輸入暱稱\",\n      \"mobile_placeholder\": \"請輸入手機號\",\n      \"mobile_disabled_tip\": \"注意: 所輸入的手機號須與成員本人登錄的手機號一致才能使用\",\n      \"password_placeholder\": \"請設置初始密碼\",\n      \"department_placeholder\": \"請選擇部門\",\n      \"same_member_exists_tip\": \"成員手機已存在\",\n      \"same_mobile_exists_tip\": \"與第{index}個成員手機號相同\",\n      \"register_to_internal_confirm\": \"手機號 ({mobile}) 已是註冊用戶，是否確認升級為內部用戶？\",\n      \"edit_member\": \"編輯成員\"\n    },\n    \"organization\": {\n      \"title\": \"組織\",\n      \"all_search_placeholder\": \"成員/部門\",\n      \"user_search_placeholder\": \"成員\",\n      \"department_search_placeholder\": \"部門\"\n    },\n    \"group\": {\n      \"title\": \"分組\",\n      \"search_placeholder\": \"搜索分組\",\n      \"search_placeholder_v2\": \"搜索用戶組名稱\",\n      \"create\": \"新建分組\",\n      \"member\": \"成員\",\n      \"usable\": \"可使用\",\n      \"remove_user_confirm\": \"確定移除該成員嗎？\",\n      \"remove_agent_confirm\": \"確定移除該智能體嗎？\",\n      \"remove_prompt_confirm\": \"確定移除該提示詞嗎？\",\n      \"remove_ai_toolkit_confirm\": \"確定移除該 AI 工具嗎？\",\n      \"create_tip\": \"請先創建分組\"\n    },\n    \"status\": {\n      \"all\": \"全部成員\",\n      \"undefined\": \"未加入\",\n      \"enabled\": \"已加入\",\n      \"disabled\": \"被禁用\"\n    },\n    \"action\": {\n      \"disabled_account\": \"禁用帳號\",\n      \"disabled_success\": \"已禁用\",\n      \"enable_account\": \"激活帳號\",\n      \"enable_success\": \"已激活\"\n    },\n    \"department\": {\n      \"add\": \"添加部門\",\n      \"add_children\": \"添加子部門\",\n      \"update_name\": \"修改名稱\",\n      \"move_up\": \"上移\",\n      \"move_down\": \"下移\",\n      \"delete\": \"刪除\",\n      \"delete_confirm\": \"確定刪除該部門嗎？\",\n      \"create\": \"創建部門\",\n      \"edit\": \"編輯部門\",\n      \"name\": \"部門名稱\",\n      \"name_placeholder\": \"請輸入部門名稱\",\n      \"member_total_count\": \"（{total}人）\"\n    },\n    \"scope\": {\n      \"title\": \"可見範圍\",\n      \"selected_title\": \"已選擇項\"\n    }\n  },\n  \"admin_user\": {\n    \"title\": \"管理員\",\n    \"search_placeholder\": \"請輸入管理員賬號\",\n    \"delete_confirm\": \"確定刪除該管理員嗎？\"\n  },\n  \"role\": {\n    \"title\": \"角色\",\n    \"normal\": \"普通用戶\",\n    \"admin\": \"管理員\",\n    \"creator\": \"創建者\"\n  },\n  \"prompt\": {\n    \"title\": \"提示詞\",\n    \"search_placeholder\": \"請輸入想搜索的提示詞\",\n    \"delete_confirm\": \"確定刪除該提示詞嗎？\",\n    \"config\": \"提示詞\",\n    \"guide\": \"使用指引\",\n    \"content\": \"提示詞內容\"\n  },\n  \"navigation\": {\n    \"title\": \"導航管理\",\n    \"search_placeholder\": \"請輸入想搜索的導航\",\n    \"delete_confirm\": \"確定刪除該導航嗎？\",\n    \"type\": {\n      \"system\": \"系統內置\",\n      \"external\": \"外部鏈接\",\n      \"custom\": \"自定義頁\"\n    },\n    \"target\": {\n      \"self\": \"當前窗口\",\n      \"blank\": \"新窗口\"\n    },\n    \"web_setting\": \"页面编辑\"\n  },\n  \"sso\": {\n    \"title\": \"單點登錄\",\n    \"sync_corp\": \"同步企業\",\n    \"wecom\": {\n      \"title\": \"企業微信\",\n      \"abbr_title\": \"企微\",\n      \"access_title\": \"接入企微\",\n      \"access_desc\": \"企業微信管理員掃碼安裝接入\",\n      \"sync_desc\": \"完成企業微信憑據授權的綁定後，可綁定企業微信賬號源，導入企業微信成員目錄\",\n      \"sync_tip\": \"已同步企業微信組織架構\"\n    },\n    \"dingtalk\": {\n      \"title\": \"釘釘\",\n      \"abbr_title\": \"釘釘\",\n      \"access_title\": \"接入釘釘\",\n      \"access_desc\": \"創建企業內部應用實現接入\",\n      \"sync_desc\": \"完成釘釘授權的綁定後，可綁定釘釘賬號源，導入釘釘成員目錄\",\n      \"sync_tip\": \"已同步釘釘組織架構\"\n    },\n    \"ad_ldap\": {\n      \"title\": \"AD/LDAP\",\n      \"abbr_title\": \"AD/LDAP\",\n      \"access_title\": \"接入AD/LDAP\",\n      \"access_desc\": \"綁定 AD/LDAP 後，可導入 AD/LDAP 成員目錄，實現 AD/LDAP 帳號單點登錄 53Hub\"\n    },\n    \"api_access\": {\n      \"title\": \"API接入\",\n      \"access_title\": \"API接入\",\n      \"access_desc\": \"通过API鉴权实现单点登录，用户点击链接就能直接完成登录，无需手动输入账号密码\"\n    },\n    \"feishu\": {\n      \"title\": \"飛書\",\n      \"abbr_title\": \"飛書\",\n      \"access_title\": \"接入飛書\",\n      \"access_desc\": \"企業管理員掃碼安裝接入\",\n      \"sync_desc\": \"完成飛書授權的綁定後，可綁定飛書賬號源，導入飛書成員目錄\"\n    },\n    \"auth_access\": \"授權接入\",\n    \"organization_sync\": \"組織同步\",\n    \"access_title\": \"接入{title}\",\n    \"access_desc\": \"需要{title}管理員掃碼安裝\",\n    \"access_desc_v2\": \"已有{title}可直接掃碼授權，尚未註冊{title}請先註冊\",\n    \"goto_access\": \"前往{title}授權\",\n    \"goto_register\": \"去註冊{title}\",\n    \"sync_confirm\": \"同步後{title}組織將會覆蓋當前組織，不可恢復\",\n    \"sync_cancel\": \"取消同步將會恢復到最初始組織狀態\",\n    \"sync_cancel_tip\": \"取消同步\",\n    \"authorized_enterprise\": \"授權企業\",\n    \"unauthorized\": \"解除授權\",\n    \"bind_member\": \"關聯成員\",\n    \"unbind_member\": \"取消關聯\",\n    \"bind_member_tip\": \"確定將該成員關聯到當前用戶嗎？\",\n    \"unbind_member_tip\": \"確定取消關聯該成員嗎？\",\n    \"auth_completed_tip\": \"確認您已完成應用綁定，確認後將刷新頁面\",\n    \"access_setting\": \"接入設定\",\n    \"access_method\": \"接入方式：\",\n    \"method_tip1\": \"1、透過一個跳轉完成使用者身份鑑權實現單點登入\",\n    \"method_tip2\": \"2、連結格式為：\",\n    \"method_tip3\": \"3、參數說明：\",\n    \"username_tip\": \"可以是手機或郵箱\",\n    \"timestamp_tip\": \"當前時間戳（這個鏈接 10 分鐘失效）\",\n    \"sign_tip\": \"是由 timestamp={timestamp}&username={username} 拼接上Sercet的md5值\",\n    \"enable_encryption\": \"啟用加密：\",\n    \"API_documentation\": \"API 文件\",\n    \"save_success\": \"儲存成功\"\n  },\n  \"action_visit\": \"訪問\",\n  \"action_test\": \"測試\",\n  \"action_add\": \"添加\",\n  \"action_add_success\": \"已添加\",\n  \"action_create\": \"創建\",\n  \"action_edit\": \"編輯\",\n  \"action_save\": \"保存\",\n  \"action_save_success\": \"已保存\",\n  \"action_save_failed\": \"保存失敗\",\n  \"action_sync_start\": \"開始同步\",\n  \"action_sync_failed\": \"同步失敗\",\n  \"action_test_success\": \"可用\",\n  \"action_test_failed\": \"不可用\",\n  \"action_delete\": \"刪除\",\n  \"action_delete_tip\": \"刪除提示\",\n  \"action_delete_confirm\": \"確定刪除該數據嗎？\",\n  \"action_delete_success\": \"已刪除\",\n  \"action_remove\": \"移除\",\n  \"action_remove_success\": \"已移除\",\n  \"action_confirm\": \"確定\",\n  \"action_confirm_success\": \"已確認\",\n  \"action_cancel\": \"取消\",\n  \"action_select\": \"選擇\",\n  \"action_sort\": \"排序\",\n  \"action_sort_success\": \"已更新排序\",\n  \"action_setting\": \"設置\",\n  \"action_enable\": \"啟用\",\n  \"action_enable_success\": \"已啟用\",\n  \"action_disable\": \"禁用\",\n  \"action_disable_success\": \"已禁用\",\n  \"action_upload\": \"上傳\",\n  \"action_upgrade\": \"升級\",\n  \"action_renew\": \"續費\",\n  \"action_renew_v2\": \"續期\",\n  \"action_modify\": \"修改\",\n  \"action_view_example\": \"查看示例\",\n  \"action_authorize\": \"授權\",\n  \"action_authorize_success\": \"已授權\",\n  \"action_copy\": \"複製\",\n  \"action_copy_success\": \"已複製\",\n  \"action_replace\": \"更換\",\n  \"action_clear\": \"清空\",\n  \"action_search\": \"搜索\",\n  \"action_close\": \"關閉\",\n  \"action_view_more\": \"查看更多\",\n  \"action_open\": \"開啟\",\n  \"action_send\": \"發送\",\n  \"action_send_success\": \"已發送\",\n  \"action_login\": \"登錄\",\n  \"action_login_success\": \"已登錄\",\n  \"action_register\": \"註冊\",\n  \"action_register_and_login\": \"註冊並登錄\",\n  \"action_register_success\": \"已註冊\",\n  \"action_reset\": \"重置\",\n  \"action_preview\": \"預覽\",\n  \"action_amplify\": \"擴大\",\n  \"action_shrink\": \"縮小\",\n  \"action_stop_generation\": \"停止生成\",\n  \"action_restart_generation\": \"重新生成\",\n  \"action_update\": \"更新\",\n  \"action_update_success\": \"已更新\",\n  \"action_next_step\": \"下一步\",\n  \"action_exit\": \"退出登錄\",\n  \"action_exit_success\": \"已退出\",\n  \"action_exit_confirm\": \"確定退出登錄嗎？\",\n  \"action_select_file\": \"+ 選擇文件\",\n  \"action_manage\": \"管理\",\n  \"action_go\": \"前往\",\n  \"action_rename\": \"重命名\",\n  \"action_bind\": \"關聯\",\n  \"action_unbind\": \"取消關聯\",\n  \"action_bind_success\": \"已關聯\",\n  \"action_unbind_success\": \"已取消關聯\",\n  \"action_confirm_payment\": \"確認收款\",\n  \"action_confirm_payment_success\": \"已確認收款\",\n  \"completion_completed\": \"已完成深度思考\",\n  \"completion_thinking\": \"深度思考中...\",\n  \"form_input_placeholder\": \"請輸入\",\n  \"form_input_placeholder_max_length\": \"最大限制輸入{max}個字符\",\n  \"form_select_placeholder\": \"請選擇\",\n  \"form_upload_placeholder\": \"請上傳\",\n  \"form_link_validator\": \"請輸入正確的鏈接地址\",\n  \"form_account_validator\": \"帳號不能包含空格符號\",\n  \"form_mobile_validator\": \"請輸入正確的手機號碼\",\n  \"form_email_validator\": \"請輸入正確的電子郵箱地址\",\n  \"form_mobile_or_email_validator\": \"請輸入正確的手機號碼或電子郵箱地址\",\n  \"form_password_validator\": \"密碼不能包含中文或空格符號\",\n  \"form_url_validator\": \"請輸入正確的URL地址\",\n  \"form_path_validator\": \"请输入正确格式的路径地址 (如:/index) \",\n  \"form_path_same_tip\": \"已存在相同路径地址, 请重新输入\",\n  \"form_image_validator\": \"請上傳正確的圖片\",\n  \"form_variable_validator\": \"變量名只能包含字母、數字和下劃線，且不能以數字開頭\",\n  \"form_port_validator\": \"端口只能是數字\",\n  \"form_account_exit\": \"該共享帳號已存在\",\n  \"form_delete_confirm\": \"確定刪除該共享帳號嗎？\",\n  \"form_hide_logo\": \"隱藏技術支援Logo\",\n  \"enterprise_edition\": \"企業版\",\n  \"image_cropper\": \"圖片裁剪\",\n  \"reupload\": \"重新上傳\",\n  \"wechat\": \"微信\",\n  \"alipay\": \"支付寶\",\n  \"alipay_pay\": \"支付寶支付\",\n  \"enabled\": \"已啟用\",\n  \"disabled\": \"已禁用\",\n  \"setting\": \"已設置\",\n  \"not_setting\": \"未設置\",\n  \"updated_at\": \"更新於\",\n  \"yearly\": \"年\",\n  \"year\": \"年\",\n  \"monthly\": \"月\",\n  \"month\": \"月\",\n  \"expired_time\": \"到期時間\",\n  \"basic_info\": \"基礎信息\",\n  \"connected\": \"已接入\",\n  \"connecting\": \"接入中\",\n  \"not_connected\": \"未接入\",\n  \"connecting_agent_total\": \"已接入 {total} 個應用\",\n  \"authorized_at\": \"授權於\",\n  \"no_data\": \"暫無數據\",\n  \"effective\": \"已生效\",\n  \"https_enabled\": \"已啟用HTTPS\",\n  \"group\": \"分組\",\n  \"all\": \"全部\",\n  \"all_group\": \"全部分組\",\n  \"user\": \"用戶\",\n  \"mobile\": \"手機號碼\",\n  \"verification_code\": \"驗證碼\",\n  \"verification_code_placeholder\": \"請輸入驗證碼\",\n  \"get_verification_code\": \"獲取驗證碼\",\n  \"shared_account\": \"共享帳號\",\n  \"subscription\": {\n    \"title\": \"訂閱\",\n    \"end_at\": \"服務期至\",\n    \"transfer_title\": \"訂閱刪除\",\n    \"transfer_desc\": \"刪除以下訂閱服務，並將訂閱用戶遷移至新的訂閱服務\",\n    \"transfer_to\": \"遷移至\"\n  },\n  \"register_time\": \"註冊時間\",\n  \"created_time\": \"創建時間\",\n  \"add_time\": \"添加時間\",\n  \"operation\": \"操作\",\n  \"language\": \"語言\",\n  \"website_domain\": \"網站域名\",\n  \"website_home\": \"網站首頁\",\n  \"create_time\": \"創建時間\",\n  \"update_time\": \"更新時間\",\n  \"service_expired_time\": \"服務到期\",\n  \"configuration_completion\": \"配置完成度\",\n  \"description\": \"描述\",\n  \"pictorial_image\": \"示圖\",\n  \"type\": \"類型\",\n  \"all_type\": \"全部類型\",\n  \"usage_record\": \"使用記錄\",\n  \"usage_guide\": \"使用指引\",\n  \"dialogue_record\": \"對話記錄\",\n  \"user_info\": \"用戶信息\",\n  \"avatar\": \"頭像\",\n  \"remark\": \"備註\",\n  \"login_password\": \"登錄密碼\",\n  \"bind_account\": \"已綁定的賬戶\",\n  \"mobile_v2\": \"手機號\",\n  \"email\": \"電子郵箱\",\n  \"open_id\": \"OpenID\",\n  \"google_account\": \"谷歌賬號\",\n  \"not_bound\": \"未綁定\",\n  \"all_order\": \"全部訂單\",\n  \"all_order_payment\": \"全部支付\",\n  \"order_id\": \"訂單ID\",\n  \"order_no\": \"訂單號\",\n  \"order_subscription\": \"訂閱服務\",\n  \"order_amount\": \"訂單金額\",\n  \"order_status\": \"狀態\",\n  \"order_status_pending\": \"待支付\",\n  \"order_status_paid\": \"已支付\",\n  \"order_status_refunded\": \"已退款\",\n  \"order_status_timeout\": \"已超時\",\n  \"order_status_expired\": \"已過期\",\n  \"order_create_time\": \"下單時間\",\n  \"order_payment_type\": \"類型\",\n  \"order_payment_type_wechat\": \"微信支付\",\n  \"order_payment_type_alipay\": \"支付寶支付\",\n  \"order_payment_type_manual\": \"手動轉賬\",\n  \"order_subscription_version\": \"訂閱版本\",\n  \"order_subscription_duration\": \"訂閱時長\",\n  \"table_footer_text\": \"共有 {total} 條\",\n  \"app_config\": \"應用配置\",\n  \"market_insight\": \"市場洞察\",\n  \"opportunity_capture\": \"商機捕獲\",\n  \"product_mastery\": \"吃透產品\",\n  \"media_operation\": \"媒體運營\",\n  \"usage_case\": \"使用案例\",\n  \"usage_case_desc\": \"為你的應用添加使用案例，讓用戶更加容易上手\",\n  \"input\": \"輸入\",\n  \"output\": \"輸出\",\n  \"output_variable\": \"輸出變量\",\n  \"usage_scene\": \"使用場景\",\n  \"usage_scene_desc\": \"為你的應用添加更多使用場景\",\n  \"image\": \"圖片\",\n  \"database_management\": \"數據庫管理\",\n  \"database_management_desc\": \"數據庫管理員和開發人員可以使用這個工具來快速生成SQL語句，查詢、更新和管理數據庫，提高工作效率。\",\n  \"scene\": \"場景\",\n  \"function_update\": \"功能更新\",\n  \"function_update_desc\": \"產品功能更新動態\",\n  \"notification_center\": \"通知中心\",\n  \"access_model\": \"接入模型\",\n  \"name\": \"名稱\",\n  \"role_instruction\": \"角色指令\",\n  \"role_instruction_desc\": \"用於對 AI 的回覆做出一系列指令和約束\",\n  \"optimize\": \"優化\",\n  \"optimize_tip\": \"角色指令自動優化\",\n  \"generate_tip\": \"角色指令自動生成\",\n  \"icon\": \"圖標\",\n  \"website_name\": \"網站名稱\",\n  \"group_management\": \"分組管理\",\n  \"display_order\": \"顯示順序\",\n  \"permission_setting\": \"權限設置\",\n  \"expand_setting\": \"擴展設置\",\n  \"base_setting\": \"欢迎语\",\n  \"over_response\": \"超綱回覆\",\n  \"visible_range\": \"可見範圍\",\n  \"dialogue_frequency\": \"對話頻率\",\n  \"dialogue_total\": \"對話總量\",\n  \"limit\": \"限制\",\n  \"second\": \"秒\",\n  \"send\": \"發送\",\n  \"unit_messages\": \"條信息\",\n  \"unit_messages_v2\": \"條\",\n  \"over_message\": \"超出將默認回覆\",\n  \"limit_every_dialogue\": \"限制每個用戶總對話數\",\n  \"select_agent\": \"選擇智能體\",\n  \"debug_preview\": \"調試預覽\",\n  \"restart\": \"重新開始\",\n  \"start_running\": \"開始運行\",\n  \"sync_output_variable\": \"同步輸出變數\",\n  \"not_found_url\": \"無法找到 URL，請檢查智能體是否設定正確\",\n  \"message_input_placeholder\": \"發消息或輸入您的問題...\",\n  \"workspace\": \"工作空間\",\n  \"edit_agent\": \"編輯智能體\",\n  \"coze_workflow_link\": \"Coze工作流\\\"編輯狀態\\\"的鏈接\",\n  \"model_name\": \"模型名稱\",\n  \"model_name_placeholder\": \"請輸入模型名稱\",\n  \"prompt_placeholder\": \"請輸入提示詞\",\n  \"copyright_desc\": \"版權所有 © 2014-{year} 廣州群應用網絡科技有限公司.Al Rights Reserve 版權所有 粵ICP備17114055號\",\n  \"no_permission_tip\": \"尚未獲得使用該功能的權限，請聯繫管理員開啟\",\n  \"not_found_tip\": \"未找到對應頁面 或者 尚未獲得使用該功能的權限，請聯繫管理員開啟\",\n  \"go_home\": \"回到首頁\",\n  \"register\": \"註冊\",\n  \"username\": \"用戶名\",\n  \"account\": \"賬號\",\n  \"password\": \"密碼\",\n  \"group_min_one\": \"至少保留一個分組\",\n  \"group_delete_confirm\": \"確定刪除該分組嗎？\",\n  \"group_not_empty\": \"分組不能為空\",\n  \"agent_delete_confirm\": \"確定刪除該智能體嗎？\",\n  \"feature_coming_soon\": \"功能即將上線，敬請期待\",\n  \"silicon_flow\": \"硅基流動\",\n  \"deep_seek\": \"深度求索\",\n  \"openai\": \"OpenAI\",\n  \"azure_open_ai\": \"Azure OpenAI\",\n  \"dark_moon\": \"月之暗面\",\n  \"chat_glm\": \"智譜AI\",\n  \"tongyi\": \"通義千問\",\n  \"coze_cn\": \"扣子\",\n  \"dify\": \"Dify\",\n  \"app_builder\": \"千帆AppBuilder\",\n  \"coze\": \"Coze\",\n  \"53ai\": \"53AI\",\n  \"fast_gpt\": \"FastGPT\",\n  \"yuanqi\": \"腾讯元器\",\n  \"bailian\": \"阿里百炼\",\n  \"volcengine\": \"火山引擎\",\n  \"sort\": \"排序\",\n  \"official_website\": \"首頁\",\n  \"create_new_enterprise\": \"建立新企業 / 組織\",\n  \"return\": \"返回\",\n  \"apply_open\": \"申請開通\",\n  \"user_register\": \"用戶註冊\",\n  \"account_register\": \"註冊賬號\",\n  \"or\": \"或\",\n  \"other_login_method\": \"其他登錄方式\",\n  \"account_psd\": \"帳號密碼\",\n  \"mobile_login\": \"簡訊登錄\",\n  \"apply_success\": \"申請成功\",\n  \"apply_success_desc\": \"請等待管理員審核，審核通過後即可使用\",\n  \"agent_not_found\": \"請先保存創建智能體\",\n  \"agent_channel_type_not_found\": \"渠道類型未找到，請先保存後再進行調試\",\n  \"permanent_effect\": \"永久生效\",\n  \"empty_to_not_change\": \"留空為不變更\",\n  \"api_host\": \"後端服務API\",\n  \"ap_host_fastgpt\": \"API 根地址\",\n  \"api_screet\": \"API密鑰\",\n  \"api_botid\": \"Bot ID\",\n  \"api_botid_en\": \"Bot ID\",\n  \"api_appid\": \"應用ID\",\n  \"api_key\": \"API Key\",\n  \"agent_type\": \"智能體類型\",\n  \"agent_type_chat\": \"對話型應用\",\n  \"agent_type_chat_v2\": \"對話型\",\n  \"agent_type_completion\": \"workflow型應用\",\n  \"agent_type_completion_v2\": \"應用型\",\n  \"agent_type_workflow\": \"工作流編排對話型應用\",\n  \"agent_file_parse\": \"文檔解析\",\n  \"agent_image_parse\": \"圖片視覺\",\n  \"app_type\": \"應用類型\",\n  \"how_get\": \"如何獲取\",\n  \"53ai_api_endpoint\": \"API Endpoint\",\n  \"53ai_api_screet\": \"Secret Key\",\n  \"upload_pem_file_tip\": \"請上傳pem文件\",\n  \"usage_range\": \"使用範圍\",\n  \"internal_member_group\": \"內部成員分組\",\n  \"dify_agent_get_tip\": \"前往Dify并登录（{url}） \\n第一步：选择要接入的智能体，点\\\"访问API\\\" \\n第二步：右上角复制\\\"API服务器\\\" 和 \\\"API密钥\\\"，填入下列表单。\",\n  \"53ai_agent_get_tip\": \"前往53AI并登录（{url}） \\n 第一步：选择要接入的智能体，点击\\\"接入使用\\\" \\n第二步：在复制\\\"API Endpoint\\\" 、 \\\"Bot-Id\\\" 和 \\\"SECRET_KEY\\\"，填入下列表单。\",\n  \"bailian_agent_get_tip\": \"前往阿里百炼并登录（{ url }）\\n第一步，登录阿里百炼，去到应用 - 应用管理页。\\n第二步：选择一个应用，复制应用卡片中的“应用ID”粘贴到下面表单。\\n第三步：点应用卡片下的发布，获取API-KEY，复制粘贴到下面表单。\",\n  \"volcengine_agent_get_tip\": \"前往火山引擎（{ url }） \\n第一步：登录火山方舟，点击进入我的应用（{ my_url }）\\n第二步：点击已有的应用（或创建应用），点复制左上角的bot-xxxxxx（后面有个复制按钮），粘贴到下面表单\\n第三步：点击右上角“API调用指南”，点击选择API Key并复制，然后复制出一个key粘贴到下面表单\",\n  \"yuanqi_agent_get_tip\": \"前往腾讯元器（{ url }） \\n第一步：登录腾讯元器，去到我的创建。\\n第二步：选择一个智能体卡片的右下角更多按钮，点击调用API（新建智能体要等审核通过才有）。\\n第三步，点击复制智能体ID，粘贴到下面表单。\\n第四步：点击复制Token,粘贴到下面表单。\",\n  \"fastgpt_agent_get_tip\": \"前往 FastGPT（ {url} ） \\n第一步：登录FastGPT，点击进入「工作台」,点击选择要接入的应用；\\n第二步：进入应用，在「发布渠道」下选择\\\"API 访问\\\"；\\n第三步：在API密钥管理下，点击新建，新建成功后复制\\\"API KEY\\\"填入表单；\\n第四步：复制\\\"API 根地址\\\",填入表单；\",\n  \"maxkb_agent_get_tip\": \"前往 MaxKB（ {url} ） \\n第一步：下载MaxKB客户端；\\n第二步：在「应用」下，点击要接入的应用；\\n第三步：在\\\"API 访问凭据\\\"下复制Base URL，创建并复制API Key，填入下列表单；\",\n  \"tip\": \"提示\",\n  \"auth_required\": \"{provider_name}未授權，請先前往{provider_name}授權\",\n  \"intelligent_agent_platform\": \"智能體平台\",\n  \"cloud_computing_platform\": \"雲計算平台\",\n  \"model_platform\": \"大模型平台\",\n  \"local_config_limited_tip\": \"配置受限提示\",\n  \"local_config_limited_desc\": \"由於當前系統訪問為內網地址({url})，無法添加/配置Coze 智能體、微信支付、支付寶支持，需要部署到外網能訪問的地址訪問再配置。\",\n  \"know_it\": \"知道了\",\n  \"selected_tip\": \"已選擇 {total} 個\",\n  \"support_image\": \"支持圖片\",\n  \"debugger_config_change_confirm\": \"修改設置將重置調試區域，需要保存並重新開始調試\",\n  \"save_and_restart\": \"保存並重新開始\",\n  \"title\": \"標題\",\n  \"commom\": {\n    \"add_manual\": \"手動添加\",\n    \"add_market\": \"從應用市場添加\"\n  },\n  \"jump_path\": \"跳轉地址\",\n  \"open_method\": \"打開方式\",\n  \"navigation_is_open\": \"是否導航顯示\",\n  \"page_edit\": \"頁面編輯\",\n  \"last_edit\": \"最近编辑\",\n  \"opening_statement\": \"開場白\",\n  \"suggested_questions\": \"提問引導\",\n  \"max_add_tip\": \"最多添加{max}個\",\n  \"join_group\": \"加入交流群\",\n  \"join_group_desc\": \"加入交流群，共同學習進步\",\n  \"start_time\": \"開始時間\",\n  \"end_time\": \"結束時間\",\n  \"filter\": \"篩選\",\n  \"user/mobile\": \"用戶/手機號\",\n  \"summary\": \"摘要\",\n  \"message_count\": \"消息數\",\n  \"detail\": \"詳情\",\n  \"dialogue_detail\": \"對話詳情\",\n  \"more\": \"更多\",\n  \"keyword\": \"關鍵詞\",\n  \"software_style\": \"軟件風格\",\n  \"website_style\": \"網站風格\",\n  \"system_log\": {\n    \"log_label\": \"日誌\",\n    \"log_action\": \"動作\",\n    \"log_module\": \"模塊\",\n    \"log_operator\": \"操作人\",\n    \"log_time\": \"時間\",\n    \"log_ip\": \"IP\"\n  },\n  \"version\": {\n    \"title\": \"版本\",\n    \"scan_consult\": \"掃碼咨詢\",\n    \"upgrade_tip\": \"升級提示\",\n    \"upgrade_renew\": \"升級版本/續期\",\n    \"upgrade\": \"升級版本\",\n    \"not_support\": \"當前版本不支持\",\n    \"agent_limit\": \"智能體添加數量達上限，請升級後嘗試添加\",\n    \"upgrade_hide_logo\": \"升級至企業版，開啟隱藏技術支援 Logo\"\n  },\n  \"knowledge\": {\n    \"name\": \"知識庫\",\n    \"short_name\": \"知識\"\n  },\n  \"space\": {\n    \"title\": \"空間管理\",\n    \"search_placeholder\": \"輸入空間名稱\",\n    \"name\": \"空間\",\n    \"name_placeholder\": \"請輸入空間名稱\",\n    \"icon\": \"圖標\",\n    \"capacity\": \"容量\",\n    \"description\": \"簡介\",\n    \"description_placeholder\": \"請輸入簡介\",\n    \"delete_tip\": \"當前空間中有{total}個知識庫，請先清空知識庫後再刪除空間\",\n    \"system\": \"系統\",\n    \"system_space_delete_tip\": \"系統空間，無法刪除\"\n  },\n  \"common\": {\n    \"name\": \"名稱\",\n    \"short_name\": \"簡稱\",\n    \"member\": \"成員\",\n    \"creator\": \"創建人\",\n    \"created_time\": \"創建時間\"\n  },\n  \"action\": {\n    \"create\": \"創建\",\n    \"add\": \"添加\",\n    \"added\": \"已添加\",\n    \"edit\": \"編輯\",\n    \"manage\": \"管理\",\n    \"delete\": \"刪除\",\n    \"save\": \"保存\",\n    \"operation\": \"操作\",\n    \"more\": \"更多\",\n    \"cancel\": \"取消\",\n    \"setting\": \"設置\",\n    \"confirm\": \"確認\"\n  },\n  \"default_links\": {\n    \"default_setting\": \"默認設置\",\n    \"website\": \"網站\",\n    \"jump_path\": \"跳轉地址\"\n  },\n  \"message_status\": {\n    \"create_success\": \"已創建\",\n    \"save_success\": \"已保存\",\n    \"logic_reasoning_required\": \"請選擇邏輯推理模型\",\n    \"vector_embedding_required\": \"請選擇向量嵌入模型\",\n    \"rerank_model_required\": \"請選擇rerank模型\"\n  },\n  \"agent\": {\n    \"name\": \"智能體\",\n    \"name_v2\": \"智能體名稱\",\n    \"base_info\": \"基礎信息\",\n    \"input_variable\": \"輸入\",\n    \"output_variable\": \"輸出\",\n    \"variable_name\": \"變量名称\",\n    \"variable_type\": \"變量類型\",\n    \"variable_label\": \"顯示名稱\",\n    \"variable_desc\": \"描述\",\n    \"variable_required\": \"是否必填\",\n    \"variable_max_length\": \"最大輸入字數\",\n    \"variable_show_word_limit\": \"是否展示字數\",\n    \"variable_options\": \"選項\",\n    \"coze\": {\n      \"workspace\": \"工作空間\",\n      \"workflow_link\": \"Coze工作流\\\"編輯狀態\\\"的鏈接\",\n      \"agent_type_chat\": \"對話型應用\",\n      \"agent_type_chat_desc\": \"用戶與大模型進行對話，由一個大模型自主思考決策，適用於較為簡單的業務邏輯。\",\n      \"agent_type_workflow\": \"工作流編排對話型應用\",\n      \"agent_type_workflow_desc\": \"工作流是一系列可執行指令的集合，用於實現業務邏輯或完成特定任務。\"\n    },\n    \"53ai\": {\n      \"agent_type_chat\": \"對話型應用\",\n      \"agent_type_chat_desc\": \"用戶與大模型進行對話，由一個大模型自主思考決策，適用於較為簡單的業務邏輯。\",\n      \"agent_type_workflow\": \"工作流編排對話型應用\",\n      \"agent_type_workflow_desc\": \"工作流是一系列可執行指令的集合，用於實現業務邏輯或完成特定任務。\"\n    },\n    \"dify\": {\n      \"agent_type_chat\": \"對話型應用\",\n      \"agent_type_chat_desc\": \"用戶與大模型進行對話，由一個大模型自主思考決策，適用於較為簡單的業務邏輯。\",\n      \"agent_type_workflow\": \"工作流編排對話型應用\",\n      \"agent_type_workflow_desc\": \"工作流是一系列可執行指令的集合，用於實現業務邏輯或完成特定任務。\"\n    },\n    \"fastgpt\": {\n      \"agent_type_chat\": \"對話型（簡易應用/工作流）\",\n      \"agent_type_chat_desc\": \"用戶與大模型進行對話，由一個大模型自主思考決策，適用於較為簡單的業務邏輯。\",\n      \"agent_type_workflow\": \"應用型（插件）\",\n      \"agent_type_workflow_desc\": \"可以自定義輸入和輸出的工作流，通常用於封裝重複使用的工作流。\"\n    },\n    \"relate_app\": {\n      \"title\": \"關聯場景\",\n      \"desc\": \"將智能體的“輸出”賦值給關聯場景智能體的“輸入”，實現多場景任務的自動化流轉。\",\n      \"input_mapping\": \"傳參映射\",\n      \"execution_rule\": \"執行規則\",\n      \"auto_execution\": \"自動執行\",\n      \"manual_execution\": \"手動執行\"\n    }\n  },\n  \"form\": {\n    \"input_placeholder\": \"請輸入\",\n    \"select_placeholder\": \"請選擇\",\n    \"set_variable_placeholder\": \"請設置｛#變量｝\"\n  },\n  \"file\": {\n    \"type_limit\": \"目前支持僅{accept}格式文件\",\n    \"size_empty\": \"文件內容不能為空\",\n    \"size_limit\": \"文件上傳大小不能超過{size}MB({name}大小已超出)\",\n    \"upload_limit\": \"最多上傳{limit}個文件\"\n  },\n  \"variable_type\": {\n    \"text\": \"单行文本\",\n    \"textarea\": \"多行文本\",\n    \"inputNumber\": \"数字\",\n    \"select\": \"选项\",\n    \"date\": \"日期\",\n    \"tag\": \"标签\",\n    \"file\": \"文件\",\n    \"markdown\": \"Markdown\",\n    \"image\": \"图片\",\n    \"audio\": \"音频\",\n    \"video\": \"视频\",\n    \"array_text\": \"陣列文本\",\n    \"array_image\": \"陣列圖片\",\n    \"array_audio\": \"陣列音頻\",\n    \"array_video\": \"陣列視頻\",\n    \"array_file\": \"陣列檔案\"\n  },\n  \"platform\": {\n    \"model_tip\": \"{total}個{ type }模型\",\n    \"model_test_success\": \"測試成功，「{platform}」當前可正常使用\",\n    \"model_test_failed\": \"測試失敗，「{platform}」當前不可用\",\n    \"failed_tip\": \"測試失敗：請檢查授權金鑰是否可用，{error}\"\n  }\n}\n"
  },
  {
    "path": "web/console/src/main.ts",
    "content": "import { createApp } from 'vue'\nimport HubUiX from 'hub-ui-x'\nimport i18n from './locales/index'\n\nimport App from './App.vue'\nimport { setupStore } from './stores'\nimport { setupRouter } from './router'\nimport { setupAssets } from './plugins/index'\nimport { setupDirective } from './directive'\nimport { setupFilter, setupGlobal } from './global'\n\nimport 'element-plus/theme-chalk/el-message.css'\nimport 'element-plus/theme-chalk/el-notification.css'\nimport 'element-plus/theme-chalk/el-message-box.css'\nimport 'element-plus/theme-chalk/el-overlay.css'\n\nimport 'hub-ui-x/dist/hub-ui-x.css'\n\nimport 'virtual:svg-icons-register'\n\nasync function bootstrap() {\n  const app = createApp(App)\n\n  setupAssets()\n  setupStore(app)\n\n  setupGlobal(app)\n  setupFilter(app)\n  setupDirective(app)\n\n  await setupRouter(app)\n  app.use(i18n)\n  app.use(HubUiX)\n  app.mount('#app')\n}\n\nbootstrap()\n"
  },
  {
    "path": "web/console/src/plugins/assets.ts",
    "content": "import '@/styles/lib/tailwind.css'\nimport '@/styles/global.scss'\nimport '@/styles/element/vars.scss'\nimport '@/styles/element/override.scss'\n\n/** Tailwind's Preflight Style Override */\n\nfunction setupAssets() {\n}\n\nexport default setupAssets\n"
  },
  {
    "path": "web/console/src/plugins/index.ts",
    "content": "import setupAssets from './assets'\n\nexport { setupAssets }\n"
  },
  {
    "path": "web/console/src/router/index.ts",
    "content": "import type { App } from 'vue'\nimport type { RouteRecordRaw } from 'vue-router'\nimport { createRouter, createWebHashHistory } from 'vue-router'\nimport Layout from '@/layout/Layout.vue'\nimport { useEnterpriseStore, useUserStore } from '@/stores'\nimport { useDefaultUser } from '@/stores/modules/user'\nimport { useEnv } from '@/hooks/useEnv'\n\nconst routes: RouteRecordRaw[] = [\n  {\n    path: '/',\n    name: 'Main',\n    component: Layout,\n    redirect: () => '/index',\n    children: [\n      {\n        path: '/index',\n        name: 'Index',\n        component: () => import('@/views/index.vue'),\n      },\n      // #ifndef KM\n      {\n        path: '/agent',\n        name: 'Agent',\n        component: () => import('@/views/agent/index.vue'),\n      },\n      {\n        path: '/agent/create',\n        name: 'AgentCreate',\n        component: () => import('@/views/agent/create/index.vue'),\n      },\n      {\n        path: '/prompt',\n        name: 'Prompt',\n        meta: {\n          title: 'prompt.title',\n        },\n        component: () => import('@/views/prompt/index.vue'),\n      },\n      {\n        path: '/prompt/create',\n        name: 'PromptCreate',\n        meta: {\n          title: 'prompt.title',\n        },\n        component: () => import('@/views/prompt/create/index.vue'),\n      },\n      {\n        path: '/toolbox',\n        name: 'Toolbox',\n        component: () => import('@/views/toolbox/index.vue'),\n      },\n      // #endif\n      {\n        path: '/order',\n        name: 'Order',\n        component: () => import('@/views/order/index.vue'),\n      },\n      {\n        path: '/user/register',\n        name: 'RegisterUser',\n        meta: {\n          title: 'register_user.title',\n        },\n        component: () => import('@/views/user/register/index.vue'),\n      },\n      {\n        path: '/user/internal',\n        name: 'InternalUser',\n        meta: {\n          title: 'internal_user.title',\n        },\n        component: () => import('@/views/user/internal/index.vue'),\n      },\n      {\n        path: '/user/admin',\n        name: 'AdminUser',\n        meta: {\n          title: 'admin_user.title',\n        },\n        component: () => import('@/views/user/admin/index.vue'),\n      },\n      {\n        path: '/user/dialogue-record/:user_id',\n        name: 'UserDialogueRecord',\n        meta: {\n          title: 'dialogue_record',\n        },\n        component: () => import('@/views/user/dialogue-record/index.vue'),\n      },\n      {\n        path: '/info',\n        name: 'Info',\n        component: () => import('@/views/info/index.vue'),\n      },\n      {\n        path: '/platform',\n        name: 'Platform',\n        // #ifdef KM\n        component: () => import('@/views/platform/km.vue'),\n        // #endif\n        // #ifndef KM\n        component: () => import('@/views/platform/index.vue'),\n        // #endif\n      },\n      {\n        path: '/navigation',\n        name: 'Navigation',\n        component: () => import('@/views/navigation/index.vue'),\n      },\n      {\n        path: '/payment',\n        name: 'Payment',\n        component: () => import('@/views/payment/index.vue'),\n      },\n      {\n        path: '/subscription',\n        name: 'Subscription',\n        component: () => import('@/views/subscription/index.vue'),\n      },\n      {\n        path: '/domain',\n        name: 'Domain',\n        component: () => import('@/views/domain/index.vue'),\n      },\n      {\n        path: '/statistics',\n        name: 'Statistics',\n        component: () => import('@/views/statistics/index.vue'),\n      },\n      {\n        path: '/SMTP',\n        name: 'SMTP',\n        component: () => import('@/views/smtp/index.vue'),\n      },\n      {\n        path: '/template-style',\n        name: 'TemplateStyle',\n        component: () => import('@/views/template-style/index.vue'),\n      },\n      {\n        path: '/banner',\n        name: 'Banner',\n        component: () => import('@/views/banner/index.vue'),\n      },\n      {\n        path: '/navigation',\n        name: 'Navigation',\n        meta: {\n          title: 'navigation.title',\n        },\n        component: () => import('@/views/navigation/index.vue'),\n      },\n      {\n        path: '/navigation/web-setting/:navigation_id',\n        name: 'NavigationWebSetting',\n        meta: {\n          title: 'navigation.web_setting',\n        },\n        component: () => import('@/views/navigation/web-setting.vue'),\n      },\n      {\n        path: '/sso',\n        name: 'SSO',\n        meta: {\n          title: 'sso.title',\n        },\n        component: () => import('@/views/sso/index.vue'),\n      },\n      {\n        path: '/system-log',\n        name: 'SystemLog',\n        component: () => import('@/views/system-log/index.vue'),\n        meta: {\n          title: 'module.system_log',\n        },\n      },\n      // #ifdef KM\n      {\n        path: '/chunk',\n        name: 'Chunk',\n        component: () => import('@/views/chunk/index.vue'),\n        meta: {\n          title: 'module.chunk_setting',\n        },\n      },\n      {\n        path: '/model',\n        name: 'Model',\n        component: () => import('@/views/model/index.vue'),\n        meta: {\n          title: '模型设置',\n        },\n      },\n      {\n        path: '/space',\n        name: 'Space',\n        component: () => import('@/views/space/index.vue'),\n        meta: {\n          title: '团队空间',\n        },\n      },\n      {\n        path: '/search',\n        name: 'Search',\n        component: () => import('@/views/search/index.vue'),\n        meta: {\n          title: 'AI搜索设置',\n        },\n      },\n      {\n        path: '/parse',\n        name: 'Parse',\n        component: () => import('@/views/parse/index.vue'),\n        meta: {\n          title: '文档解析',\n        },\n      },\n      {\n        path: '/viewer',\n        name: 'Viewer',\n        component: () => import('@/views/viewer/index.vue'),\n        meta: {\n          title: '文档编辑',\n        },\n      },\n      // #endif\n    ],\n  },\n  {\n    path: '/login',\n    name: 'Login',\n    component: () => import('@/views/login/index.vue'),\n  },\n  {\n    path: '/svglist',\n    name: 'Svg',\n    component: () => import('@/views/svg/index.vue'),\n  },\n  {\n    path: '/500',\n    name: 'Error500',\n    component: () => import('@/views/exception/500/index.vue'),\n  },\n  {\n    path: '/404',\n    name: 'Error404',\n    component: () => import('@/views/exception/404/index.vue'),\n  },\n  {\n    path: '/:pathMatch(.*)*',\n    name: 'NotFound',\n    redirect: '/404',\n  },\n]\n\nexport const router = createRouter({\n  // history: createWebHistory(base_path),\n  history: createWebHashHistory(),\n  routes,\n  scrollBehavior: () => ({ left: 0, top: 0 }),\n})\n\n// 重写back方法，如果history.state.back为true，则调用原来的back方法，否则重定向到首页\nconst oldBack = router.back\nrouter.back = () => {\n  if (window.history.state.back) {\n    oldBack()\n  } else {\n    router.push('/')\n  }\n}\n\nexport const gotoLogin = () => {\n  const { isOpLocalEnv } = useEnv()\n  // let login_url = sessionStorage.getItem('from_origin') || ''\n  let login_url = ''\n  if (!login_url) {\n    login_url = `//${window.location.host}${window.location.search}`\n    if (/(127.0.0.1)|(localhost)|(agenthubdev.cc)|(192.168.1.\\d+)|/.test(login_url)) {\n      // #ifndef KM\n      login_url = `//${window.location.host}/console/saas-login/index.html${window.location.search}`\n      // #endif\n\n      // #ifdef KM\n      login_url = `//${window.location.host}/console/km-login/index.html${window.location.search}`\n      // #endif\n    }\n  }\n  if (isOpLocalEnv.value) login_url = `${window.location.origin}/#/index`\n  window.location.replace(login_url)\n}\nrouter.beforeEach(async (to, from, next) => {\n  const user_store = useUserStore()\n  const user_info = useDefaultUser()\n  const enterprise_store = useEnterpriseStore()\n\n  // const is_invalid_user = !user_info.access_token || !user_info.eid\n  const is_invalid_user = !user_info.access_token\n  if (is_invalid_user) user_store.logoff()\n  if (!['/login', '/register'].includes(to.path) && is_invalid_user) {\n    gotoLogin()\n    return\n  }\n  // #ifndef KM\n  if (['RegisterUser', 'InternalUser'].includes(to.name)) {\n    if (!enterprise_store.info.eid) await enterprise_store.loadSelfInfo()\n    if (\n      (to.name === 'RegisterUser' &&\n        !enterprise_store.info.is_independent &&\n        !enterprise_store.info.is_industry) ||\n      (to.name === 'InternalUser' &&\n        !enterprise_store.info.is_enterprise &&\n        !enterprise_store.info.is_industry)\n    ) {\n      next({ name: 'Error404' })\n      return\n    }\n  }\n  // #endif\n\n  next()\n})\n\nexport async function setupRouter(app: App) {\n  app.use(router)\n  await router.isReady()\n}\n"
  },
  {
    "path": "web/console/src/stores/index.ts",
    "content": "import type { App } from 'vue'\nimport { createPinia } from 'pinia'\n\nexport const store = createPinia()\n\nexport function setupStore(app: App) {\n  app.use(store)\n}\n\n// export * from './modules'\nexport * from './modules/user'\nexport * from './modules/group'\nexport * from './modules/channel'\nexport * from './modules/conversation'\nexport * from './modules/enterprise'\nexport * from './modules/setting'"
  },
  {
    "path": "web/console/src/stores/modules/channel.ts",
    "content": "import { defineStore } from 'pinia'\nimport { channelApi } from '@/api/modules/channel'\nimport { deepCopy } from '@/utils'\n\nexport const useChannelStore = defineStore('channel-store', {\n  state: () => ({\n    channel_list: [],\n    channel_models: [],\n  }),\n  actions: {\n    async loadListData({ reset = true } = {}) {\n      if (reset || !this.channel_list.length) this.channel_list = await channelApi.list()\n      return JSON.parse(JSON.stringify(this.channel_list))\n    },\n    async save({ data = {} } = {}) {\n      return channelApi.save({ data })\n    },\n    async delete({ data: { channel_id } }: { data: { channel_id: number } }) {\n      return channelApi.delete({ data })\n    },\n    async loadChannelModels(owner = 'all') {\n      if (!this.channel_models.length) {\n        const list = await channelApi.modelList({ params: { owner } })\n        this.channel_models = list\n      }\n      if (owner === 'all') return deepCopy(this.channel_models)\n      const list = this.channel_models.filter((item: any) => item.owned_by === owner)\n      return deepCopy(list)\n    },\n  },\n})\n"
  },
  {
    "path": "web/console/src/stores/modules/conversation.ts",
    "content": "import { defineStore } from 'pinia'\nimport api from '@/apis'\n\nexport const useConversationStore = defineStore('conversation-store', {\n  state: () => ({}),\n  actions: {\n    async loadListData({ data: { offset, limit } = {} } = {}) {\n      const { data: { conversations = [] } = {} } = await api.conversation.list({ data: { offset, limit } })\n      return conversations.map((item = {}, index) => {\n        return item\n      })\n    },\n    async save({ data } = {}) {\n      data = {\n        conversation_id: 0,\n        agent_id: 0,\n        ...data,\n      }\n      if (!data.conversation_id)\n        delete data.conversation_id\n      return api.conversation[data.conversation_id ? 'update' : 'create']({ data })\n    },\n    async chat({ data, onDownloadProgress, signal, hideError = false } = {}) {\n      const completionParams = data?.agent_configs?.completion_params || {\n        frequency_penalty: 0.5,\n        presence_penalty: 0.5,\n        temperature: 0.2,\n        top_p: 0.75,\n      }\n\n      // Need to delete agent_configs here, otherwise some channels will report errors\n      if (data.agent_configs)\n        delete data.agent_configs\n\n      data = {\n        conversation_id: 0,\n        frequency_penalty: completionParams.frequency_penalty || 0,\n        messages: [],\n        model: '',\n        presence_penalty: completionParams.presence_penalty || 0,\n        stream: true,\n        temperature: completionParams.temperature || 0,\n        top_p: completionParams.top_p || 0,\n        ...data,\n      }\n\n      if (data.agent_id) {\n        data.model = `agent-${data.agent_id}`\n        delete data.agent_id\n      }\n      return api.conversation.chat({ data, onDownloadProgress, signal, hideError })\n    },\n  },\n})\n"
  },
  {
    "path": "web/console/src/stores/modules/domain.ts",
    "content": "import { defineStore } from 'pinia'\nimport { useEnterpriseStore } from './enterprise'\n\nimport { domainApi } from '@/api/modules/domain'\nimport {\n  transformDomainList,\n  formatDomain,\n  validateIndependentConfig,\n  getDefaultExclusiveDomain,\n  getDefaultIndependentDomain,\n} from '@/api/modules/domain/transform'\nimport type {\n  DomainListResponse,\n  ExclusiveDomainData,\n  IndependentDomainData,\n  DomainInfo,\n} from '@/api/modules/domain/types'\n\nexport const useDomainStore = defineStore('domain-store', {\n  state: () => ({\n    domainList: null as DomainListResponse | null,\n    loading: false,\n  }),\n\n  getters: {\n    exclusiveDomains: state => state.domainList?.exclusive_domains || [],\n    independentDomains: state => state.domainList?.independent_domains || [],\n    totalDomains: state => {\n      const exclusive = state.domainList?.exclusive_domains?.length || 0\n      const independent = state.domainList?.independent_domains?.length || 0\n      return exclusive + independent\n    },\n  },\n\n  actions: {\n    /**\n     * 加载域名列表数据\n     */\n    async loadListData(): Promise<DomainListResponse> {\n      this.loading = true\n      try {\n        const rawData = await domainApi.list()\n        const transformedData = transformDomainList(rawData)\n        this.domainList = transformedData\n        return transformedData\n      } finally {\n        this.loading = false\n      }\n    },\n\n    /**\n     * 保存专属域名\n     */\n    async saveExclusiveDomain(data: { domain_id?: number; domain: string }): Promise<any> {\n      const formattedDomain = formatDomain(data.domain)\n      const domainData: ExclusiveDomainData = { domain: formattedDomain }\n\n      let result\n      if (data.domain_id) {\n        result = await domainApi.updateExclusive(data.domain_id, domainData)\n      } else {\n        result = await domainApi.createExclusive(domainData)\n      }\n\n      // 刷新企业信息和域名列表\n      await this._refreshAfterSave()\n      return result\n    },\n\n    /**\n     * 保存独立域名\n     */\n    async saveIndependentDomain(\n      data: { domain_id?: number } & IndependentDomainData\n    ): Promise<any> {\n      // 验证配置\n      if (!validateIndependentConfig(data.config)) {\n        throw new Error('域名配置验证失败')\n      }\n\n      const formattedData: IndependentDomainData = {\n        domain: formatDomain(data.domain),\n        config: data.config,\n      }\n\n      let result\n      if (data.domain_id) {\n        result = await domainApi.updateIndependent(data.domain_id, formattedData)\n      } else {\n        result = await domainApi.createIndependent(formattedData)\n      }\n\n      // 刷新企业信息和域名列表\n      await this._refreshAfterSave()\n      return result\n    },\n\n    /**\n     * 删除独立域名\n     */\n    async deleteIndependentDomain(domainId: number): Promise<void> {\n      await domainApi.deleteIndependent(domainId)\n\n      // 刷新企业信息和域名列表\n      await this._refreshAfterSave()\n    },\n\n    /**\n     * 根据域名 ID 查找域名信息\n     */\n    findDomainById(domainId: number, type: 'exclusive' | 'independent'): DomainInfo | undefined {\n      const domains = type === 'exclusive' ? this.exclusiveDomains : this.independentDomains\n      return domains.find(domain => domain.domain_id === domainId)\n    },\n\n    /**\n     * 检查域名是否已存在\n     */\n    isDomainExists(domain: string, excludeId?: number): boolean {\n      const formattedDomain = formatDomain(domain)\n      const allDomains = [...this.exclusiveDomains, ...this.independentDomains]\n\n      return allDomains.some(\n        d => formatDomain(d.domain) === formattedDomain && d.domain_id !== excludeId\n      )\n    },\n\n    /**\n     * 获取默认的专属域名数据\n     */\n    getDefaultExclusiveDomain,\n\n    /**\n     * 获取默认的独立域名数据\n     */\n    getDefaultIndependentDomain,\n\n    /**\n     * 保存后刷新相关数据\n     */\n    async _refreshAfterSave(): Promise<void> {\n      const enterpriseStore = useEnterpriseStore()\n      await Promise.all([enterpriseStore.loadSelfInfo(), this.loadListData()])\n    },\n\n    /**\n     * 重置状态\n     */\n    resetState(): void {\n      this.domainList = null\n      this.loading = false\n    },\n  },\n})\n"
  },
  {
    "path": "web/console/src/stores/modules/enterprise.ts",
    "content": "import { defineStore } from 'pinia'\nimport { useDefaultUser, useUserStore } from './user'\nimport { deepCopy } from '@/utils'\nimport api from '@/apis'\nimport { getSimpleDateFormatString } from '@/utils/moment'\nimport eventBus from '@/utils/event-bus'\n\nimport { saasApi } from '@/api/modules/saas'\n\nimport { WEBSITE_VERSION, WEBSITE_VERSION_NAME_MAP } from '@/constants/enterprise'\n\nexport const WEBSITE_TYPE_INDEPENDENT = 'independent'\nexport const WEBSITE_TYPE_ENTERPRISE = 'enterprise'\nexport const WEBSITE_TYPE_INDUSTRY = 'industry'\n\nexport const getDefaultLogo = () => window.$getRealPath({ url: '/images/default_website_logo.png' })\n\nconst default_version = {\n  product_id: 1,\n  name: '创业版',\n  version: 1,\n  features: {\n    agent: {\n      max: 5,\n    },\n    independent_domain: {\n      max: 0,\n    },\n    internal_user: {\n      max: 0,\n    },\n    registered_user: {\n      max: 100,\n    },\n  },\n  disabled_features:\n    '{\"agent\":{\"max\":5,\"name\":\"智能体\"},\"independent_domain\":{\"max\":0,\"name\":\"独立域名\"},\"internal_user\":{\"max\":0,\"name\":\"内部用户\"},\"registered_user\":{\"max\":100,\"name\":\"注册用户\"}}',\n  created_time: 1751594448404,\n  updated_time: 1751594448404,\n}\n\nexport const useEnterpriseStore = defineStore('enterprise-store', {\n  state: () => ({\n    info: deepCopy({}),\n    version: deepCopy(default_version),\n  }),\n  actions: {\n    getFormatEnterpriseData(data = {}) {\n      data.apply = data.apply || data.apply_info || {}\n      data.domains = data.domains || []\n      data.enterprise = data.enterprise || {}\n      data = {\n        ...data,\n        ...data.enterprise,\n      }\n      data.eid = data.eid || data.apply.eid || data.enterprise.id || ''\n      data.logo = data.logo || data.enterprise.logo || getDefaultLogo()\n      data.description = data.description || data.enterprise.description || ''\n      data.domain = data.domain || (data.domains[0] || {}).domain || ''\n      if (data.domain) data.domain = `https://${data.domain.replace(/^https?:\\/\\//, '')}`\n      data.apply_id = data.apply.apply_id || data.apply.id || ''\n      data.apply_name = data.apply.enterprise_name || ''\n      data.name = data.name || data.enterprise.display_name || data.apply_name || ''\n      data.is_process = data.apply.status == 0\n      data.is_reject = data.apply.status == 2\n      data.reject_reason = data.apply.reject_reason || data.apply.reason || ''\n      data.expired_time = data.apply.expired_time || 0\n      data.is_expired = data.expired_time ? data.expired_time < Date.now() : false\n      data.expired_time = data.expired_time\n        ? getSimpleDateFormatString({\n            date: new Date(data.expired_time),\n            format: 'YYYY-MM-DD hh:mm',\n          })\n        : ''\n      data.created_time = data.enterprise.created_time || 0\n      data.created_time = getSimpleDateFormatString({ date: new Date(data.created_time) })\n      data.version = +data.version || +data.apply.version || 1\n      data.version_name =\n        WEBSITE_VERSION_NAME_MAP[data.version] || WEBSITE_VERSION_NAME_MAP[WEBSITE_VERSION.FREE]\n      data.is_loading = false\n\n      data.is_independent = data.type === WEBSITE_TYPE_INDEPENDENT\n      data.is_enterprise = data.type === WEBSITE_TYPE_ENTERPRISE\n      data.is_industry = data.type === WEBSITE_TYPE_INDUSTRY\n      data.is_install_wecom = data.wecom_install_info?.install_wecom_app\n      data.wecom_info = data.wecom_install_info?.auth_corp_info || {}\n      data.is_install_dingtalk = data.dingtalk_auth_corp_info?.install_dingtalk_app\n      data.dingtalk_info = data.dingtalk_auth_corp_info?.auth_corp_info || {}\n\n      return data\n    },\n    //  (-1 for all) 0:待审核 1:已通过 2:已拒绝\n    async loadListData({\n      data: { status = -1, offset = 0, limit = 500 },\n      hideError = false,\n    }: {\n      data: { status: -1 | 0 | 1 | 2; offset: number; limit: number }\n      hideError: boolean\n    }) {\n      const { data: { count = 0, details = [] } = {} } = await api.enterprise.saas_list({\n        data: { status, offset, limit },\n        hideError,\n      })\n      const list = details.map((item = {}) => this.getFormatEnterpriseData(item))\n      return { count, list }\n    },\n    async apply({\n      data: { contact_name = '', enterprise_name = '', domain = '', email = '', phone = '' },\n      hideError = false,\n    }: {\n      data: {\n        contact_name: string\n        enterprise_name: string\n        domain: string\n        email: string\n        phone: string\n      }\n      hideError: boolean\n    }) {\n      return api.enterprise.saas_apply({\n        data: { contact_name, enterprise_name, domain, email, phone },\n        hideError,\n      })\n    },\n    async loadDetailData({\n      data: { eid = '' },\n      hideError = false,\n    }: {\n      data: { eid: string }\n      hideError: boolean\n    }) {\n      const { data: { access_token = '', enterprise = {} } = {} } =\n        await api.enterprise.saas_detail({\n          data: { eid },\n          extra_headers: { 'X-My-Id': eid },\n          hideError,\n        })\n      if (access_token) {\n        const user_store = useUserStore()\n        user_store.setAccessToken(access_token)\n        user_store.setEid(eid)\n      }\n      return this.getFormatEnterpriseData(enterprise)\n    },\n    async loadSelfInfo() {\n      const user_info = useDefaultUser()\n      const is_invalid_user = !user_info.access_token || !user_info.eid\n      if (is_invalid_user) return this\n      try {\n        const { data: { is_saas = false } = {} } = await api.enterprise.is_saas()\n        const user_store = useUserStore()\n        user_store.setIsSaasLogin(is_saas)\n        const { data = {} } = await api.enterprise[is_saas ? 'saas_self_info' : 'self_info']()\n        this.info = this.getFormatEnterpriseData(data)\n        if (is_saas) this.loadVersionInfo()\n        else this.version.features = {}\n\n        const link = document.querySelector('link[rel=\"icon\"]') || document.createElement('link')\n        link.rel = 'icon'\n        link.href = this.info.ico || getDefaultLogo()\n        if (!document.querySelector('link[rel=\"icon\"]')) document.head.appendChild(link)\n        eventBus.emit('enterprise-info-loaded', this.info)\n      } catch (error) {\n        console.log(error)\n      }\n      return this\n    },\n    async loadHomeInfo() {\n      const { data = {} } = await api.enterprise.home_info()\n      return data\n    },\n    async update({\n      data = {},\n    }: {\n      data: {\n        eid: string\n        logo: string\n        display_name: string\n        language: string\n        description: string\n        layout_type: 'portal' | 'doubao' | 'mita' | 'kimi' | 'independent'\n        template_type: string\n      }\n    }) {\n      data = {\n        eid: 0,\n        logo: '',\n        display_name: '',\n        language: 'zh-cn',\n        description: '',\n        layout_type: 'portal',\n        domain: '',\n        slogan: '',\n        template_type: '',\n        ...data,\n      }\n      return api.enterprise.update({ data })\n    },\n\n    async loadVersionInfo() {\n      const { data = {} } = await saasApi.product\n        .find(this.info.version)\n        .catch(() => ({ data: {} }))\n      data.features = data.disabled_features ? JSON.parse(data.disabled_features) : {}\n      this.version = data\n    },\n    async loadSMTPInfo() {\n      const { data = {} } = await api.enterprise.smtp_config()\n      return data\n    },\n    async loadSMTPDetail({ data: { type = '' } }) {\n      const { data } = await api.enterprise.smtp_detail({\n        data: { type },\n      })\n      return data\n    },\n    async saveSMTPInfo({\n      data = {},\n    }: {\n      data: {\n        content: string\n        enabled: boolean\n        type: 'smtp' | 'mobile'\n      }\n    }) {\n      data = {\n        content: '',\n        enabled: true,\n        type: 'smtp',\n        ...data,\n      }\n      return api.enterprise.smtp_save({ data })\n    },\n    async sendTestEmail({\n      data = {},\n    }: {\n      data: {\n        from: string\n        host: string\n        is_ssl: boolean\n        password: string\n        port: number\n        to: string\n        username: string\n      }\n    }) {\n      data = {\n        from: '',\n        host: '',\n        is_ssl: true,\n        password: '',\n        port: '',\n        to: '',\n        username: '',\n        ...data,\n      }\n      return api.enterprise.smtp_send({ data })\n    },\n  },\n})\n"
  },
  {
    "path": "web/console/src/stores/modules/group.ts",
    "content": "import { defineStore } from 'pinia'\nimport type { Group } from '@/api/modules/group'\nimport api from '@/apis'\nimport type { GroupType } from '@/constants/group'\n\nexport const useGroupStore = defineStore('group-store', {\n  state: () => ({}),\n  actions: {\n    async loadListData({ data: { group_type } }: { data?: { group_type: GroupType } }) {\n      const { data = {} } = await api.group.list({ data: { group_type } })\n      return data\n    },\n    async save({\n      data: { group_type, groups }\n    }: {\n      data: { group_type: GroupType; groups: Group[] }\n    }) {\n      const { data = {} } = await api.group.save({ data: { group_type, groups } })\n      return data\n    },\n    async delete({ data: { group_id } }: { data: { group_id: number } }) {\n      return api.group.delete({ data: { group_id } })\n    }\n  }\n})\n"
  },
  {
    "path": "web/console/src/stores/modules/setting.ts",
    "content": "import { defineStore } from 'pinia'\nimport settingApi from '@/api/modules/setting'\n\nexport const useSettingStore = defineStore('setting-store', {\n  state: () => ({\n  }),\n  actions: {\n    async loadListData(): Promise<Settings.Info[]> {\n      const res = await settingApi.list()\n      return res.data\n    },\n    async get(key: string) {\n      const res = await settingApi.get(key)\n      return res.data\n    },\n    async loadDetailData(group_name: string) {\n      const { data = [] } = await settingApi.detail(group_name)\n      return data\n    },\n    async save(setting_id: number, data: { key: string; value: string }): Promise<Settings.Info> {\n      if (setting_id) {\n        const res = await settingApi.update(setting_id, data)\n        return res.data\n      }\n      else {\n        const res = await settingApi.create({\n          key: data.key,\n          value: data.value,\n        })\n        return res.data\n      }\n    },\n  },\n})\n"
  },
  {
    "path": "web/console/src/stores/modules/user.ts",
    "content": "import { defineStore } from 'pinia'\nimport { deepCopy } from '@/utils'\nimport api from '@/apis'\nimport eventBus from '@/utils/event-bus'\nimport { getFormatUserData } from '@/api/modules/user'\nimport { systemLogApi } from '@/api/modules/system-log'\nimport { saasApi } from '@/api/modules/saas'\nimport { SYSTEM_LOG_ACTION } from '@/constants/system-log'\n\nexport interface User {\n  access_token: string\n  user_id: string\n  eid: string\n}\n\nexport interface BindWechatForm {\n  mobile?: string\n  verify_code?: string\n  openid: string\n  unionid?: string\n  nickname?: string\n  from?: string\n}\n\nexport const useDefaultUser = () => ({\n  access_token: localStorage.getItem('access_token') || '',\n  user_id: '',\n  eid: '',\n  ...JSON.parse(localStorage.getItem('user_info') || '{}'),\n})\nconst default_user = useDefaultUser()\n\nexport const useUserStore = defineStore('user-store', {\n  state: () => ({\n    info: deepCopy(default_user),\n    is_new_user: false,\n    is_saas_login: false,\n  }),\n  actions: {\n    async login({\n      type = 'password',\n      data: { username, password, verify_code },\n      hideError = false,\n    }: {\n      type: 'password' | 'mobile'\n      data: { username: string; password: string; verify_code: string }\n      hideError: boolean\n    }) {\n      const { data = {} } = await api.user[type === 'mobile' ? 'saas_sms_login' : 'saas_login']({\n        data:\n          type === 'mobile'\n            ? { mobile: username, verify_code }\n            : { username, password, verify_code },\n        hideError,\n      })\n      this.info = {\n        ...this.info,\n        ...data,\n      }\n      this.is_new_user = !!+data.is_new_user\n      localStorage.setItem('access_token', this.info.access_token)\n      localStorage.setItem('site_token', this.info.access_token)\n      localStorage.setItem('user_info', JSON.stringify(this.info))\n      eventBus.emit('user-login-success', this)\n      console.log('login')\n      // this.loadSelfInfo()\n      return this\n    },\n    async wechat_login(params: { unionid?: string; from?: string }) {\n      const res = await saasApi.wechat_login(params).catch(() => ({ data: { access_token: '' } }))\n      if (!res.data.platform_user.access_token)\n        return Promise.reject(new Error('access_token is empty'))\n      this.setAccessToken(res.data.platform_user.access_token)\n      eventBus.emit('user-login-success', this)\n      return res.data\n    },\n    async bind_wechat(data: BindWechatForm) {\n      const res = await saasApi.bind_wechat(data)\n      const isCreated = Boolean(res.data.access_token && data.mobile)\n      if (isCreated) this.setAccessToken(res.data.access_token)\n      if (isCreated) eventBus.emit('user-login-success', this)\n    },\n    async logoff({ show_confirm = false, back_to_login = false } = {}) {\n      if (show_confirm) {\n        await ElMessageBox.confirm(window.$t('action_exit_confirm'), window.$t('action_exit'))\n        await systemLogApi.create({\n          action: SYSTEM_LOG_ACTION.LOGOUT,\n          content: '退出',\n        })\n        // #ifndef KM\n        await api.user.logout()\n        await api.user.saas_logout()\n        // #endif\n      }\n      localStorage.removeItem('access_token')\n      localStorage.removeItem('site_token')\n      localStorage.removeItem('user_info')\n      this.is_saas_login = false\n      this.info = useDefaultUser()\n      if (back_to_login) eventBus.emit('user-login-expired', this)\n    },\n    async resetPassword({\n      data: { mobile, email, new_password, confirm_password, verify_code },\n    }: {\n      data: {\n        mobile: string\n        email: string\n        new_password: string\n        confirm_password: string\n        verify_code: string\n      }\n    }) {\n      return api.user.reset_password({\n        data: { mobile, email, new_password, confirm_password, verify_code },\n      })\n    },\n    setAccessToken(access_token: string) {\n      this.info.access_token = access_token\n      localStorage.setItem('access_token', this.info.access_token)\n      localStorage.setItem('user_info', JSON.stringify(this.info))\n    },\n    setEid(eid: string) {\n      this.info.eid = eid\n      localStorage.setItem('user_info', JSON.stringify(this.info))\n    },\n    setIsSaasLogin(is_saas_login: boolean) {\n      this.is_saas_login = is_saas_login\n    },\n    setIsNewUser(is_new_user: boolean) {\n      this.is_new_user = is_new_user\n    },\n    async loadListData({\n      data: {\n        role = '',\n        keyword = '',\n        group_id,\n        offset = 0,\n        limit = 10,\n        start_time,\n        end_time,\n        range_by,\n      },\n      hideError = false,\n    }: {\n      data: {\n        role?: string\n        keyword?: string\n        group_id?: number\n        offset?: number\n        limit?: number\n        start_time?: string\n        end_time?: string\n        range_by?: string\n      }\n      hideError: boolean\n    }) {\n      const { data: { count = 0, users = [] } = {} } = await api.user.list({\n        data: { role, keyword, group_id, offset, limit, start_time, end_time, range_by },\n        hideError,\n      })\n      return {\n        total: count,\n        list: users.map(item => getFormatUserData(item)),\n      }\n    },\n    async delete({ data: { user_id } }: { data: { user_id: string } }) {\n      return api.user.delete({ data: { user_id } })\n    },\n    async save({ data = {} }: { data: { user_id: string } }) {\n      data = {\n        user_id: 0,\n        avatar: '',\n        expired_time: 0,\n        group_id: 0,\n        nickname: '',\n        password: '',\n        ...data,\n      }\n      if (!data.user_id) delete data.user_id\n      if (!data.password) delete data.password\n      return api.user.update({ data })\n    },\n\n    async loadSelfInfo() {\n      const access_token = localStorage.getItem('access_token')\n      if (!access_token) return Promise.reject('no access_token')\n      const { data = {} } = await api.user.self_info()\n      this.info = {\n        ...this.info,\n        ...data,\n      }\n      localStorage.setItem('user_info', JSON.stringify(this.info))\n      eventBus.emit('load-user-self-info-success', this)\n      return this\n    },\n    // async register({ data: { username, password, nickname } }: { data: { username: string, password: string, nickname: string } }) {\n    // \tconst { data = {} } = await api.user.register({ data: { username, password, nickname: nickname || username } })\n    // \tthis.info.access_token = data.access_token || ''\n    // \tthis.info.user_id = data.user_id || ''\n    // \tlocalStorage.setItem('access_token', this.info.access_token)\n    // \teventBus.emit('user-login-success', this)\n    // \tthis.loadSelfInfo()\n    // \treturn this\n    // },\n    // async loadSelfInfo() {\n    // \tif (!this.is_saas_login) return Promise.reject('no login')\n    // \tconst { data = {} } = await api.user.self_info()\n    // \tthis.info = {\n    // \t\t...this.info,\n    // \t\t...data,\n    // \t}\n    // \treturn this\n    // },\n  },\n})\n"
  },
  {
    "path": "web/console/src/styles/element/_variables.scss",
    "content": "/* 只需要重写你需要的即可 */\n@forward 'element-plus/theme-chalk/src/common/var.scss' with (\n  $colors: (\n    'primary': (\n      'base': green,\n    ),\n  ),\n);\n\n\n// @forward 'element-plus/theme-chalk/src/common/var.scss' with (\n//   $dialog: (\n//     'bg-color': rgba(255,255,255,0.9),\n//     'box-shadow': 0 4px 20px rgba(0,0,0,0.15)\n//   )\n// );\n// 如果只是按需导入，则可以忽略以下内容。\n// 如果你想导入所有样式:\n// @use \"element-plus/theme-chalk/src/index.scss\" as *;\n"
  },
  {
    "path": "web/console/src/styles/element/override.scss",
    "content": ".el-dialog {\n  padding: 16px 30px;\n\n  &__header {\n    padding: var(--el-dialog-padding-primary) 0;\n    border-bottom: 1px solid #dcdfe6;\n    margin-bottom: 20px;\n  }\n\n  &--noheader .el-dialog__header {\n    display: none;\n  }\n\n  &__headerbtn {\n    right: 16px;\n    top: 22px;\n  }\n}\n\n.el-dialog--footer-center {\n  .el-dialog__footer {\n    text-align: center;\n  }\n}\n\n.el-dialog--center {\n  .el-dialog__header {\n    text-align: left;\n  }\n}\n\n.el-drawer {\n  transition: none !important;\n\n  &__header {\n    border-bottom: 1px solid #dcdfe6;\n    margin-bottom: 0 !important;\n    padding: 30px 30px 24px !important;\n  }\n\n  &__title {\n    font-size: 24px !important;\n    font-weight: 500;\n    color: #1d1e1f;\n  }\n}\n\n.el-tabs--full {\n  overflow: hidden;\n\n  .el-tabs__content {\n    height: 100%;\n  }\n\n  .el-tab-pane {\n    height: 100%;\n  }\n}\n\n.el-input-number.el-input-number--left {\n  .el-input__inner {\n    text-align: left !important;\n  }\n}\n"
  },
  {
    "path": "web/console/src/styles/element/vars.scss",
    "content": ":root {\n  /* 修改对话框相关变量 */\n  // --el-dialog-bg-color: #ffffff;\n  // --el-dialog-border-radius: 12px;\n  // --el-dialog-padding-primary: 20px;\n\n  /* 标题样式 */\n  // --el-dialog-title-font-size: 18px;\n  // --el-text-color-primary: #303133;\n\n\t--el-color-primary: #2563EB;\n}\n"
  },
  {
    "path": "web/console/src/styles/global.scss",
    "content": "html,\nbody,\n#app {\n  height: 100%;\n}\n\nbody {\n  padding-bottom: constant(safe-area-inset-bottom);\n  padding-bottom: env(safe-area-inset-bottom);\n  font-family:\n    -apple-system-font, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB',\n    'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;\n}\n\n// 全局去除滚动条，hover才显示\n\n/* 针对WebKit内核浏览器（Chrome, Safari等） */\n::-webkit-scrollbar {\n  width: 5px;\n  height: 5px;\n  background: transparent; /* 设置滚动条背景透明 */\n}\n\n::-webkit-scrollbar-thumb {\n  background: transparent; /* 滑块透明 */\n}\n\n:hover::-webkit-scrollbar-thumb {\n  cursor: pointer;\n  border-radius: 4px;\n  background-color: rgb(0 0 0 / 25%);\n}\n\n.flex-center {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n/* 版本升级弹窗样式 */\n.version-upgrade-dialog {\n  --el-messagebox-width: 520px;\n  --el-messagebox-border-radius: 8px;\n\n  padding: 12px 26px;\n}\n\n.version-upgrade-dialog .el-message-box__header {\n  padding: 14px 0 10px;\n  border-bottom: none;\n}\n\n.version-upgrade-dialog .el-message-box__title {\n  font-size: 18px;\n  font-weight: 600;\n  color: #333;\n  line-height: 1.4;\n  justify-content: start;\n}\n\n.version-upgrade-dialog .el-message-box__container {\n  justify-content: start;\n}\n\n.version-upgrade-dialog .el-message-box__content {\n  text-align: center;\n}\n\n.version-upgrade-dialog .el-message-box__message {\n  font-size: 14px;\n  color: #666;\n  line-height: 1.5;\n  margin: 0;\n}\n\n.version-upgrade-dialog .el-message-box__btns {\n  padding: 20px;\n  display: flex;\n  justify-content: center;\n  gap: 12px;\n  flex-direction: row-reverse;\n}\n\n.version-upgrade-dialog .el-message-box__btns .el-button {\n  width: 96px;\n}\n\n.version-upgrade-dialog .el-message-box__status {\n  display: none;\n}\n\n.version-tooltip-content {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n}\n"
  },
  {
    "path": "web/console/src/styles/lib/tailwind.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"
  },
  {
    "path": "web/console/src/types/agent.d.ts",
    "content": "declare namespace Agent {\n\tinterface UseCase {\n\t\ttype: 'case' | 'scene';\n\t\tid: string;\n\t\tinput_text?: string;\n\t\toutput_text?: string;\n\t\timage?: string;\n\t\tscene?: string;\n\t\tdesc?: string;\n\t}\n\n\tinterface CompletionParams {\n\t\ttemperature: number;\n\t\ttop_p: number;\n\t\tpresence_penalty: number;\n\t\tfrequency_penalty: number;\n\t}\n\n\tinterface CustomConfig {\n\t\tagent_type: string;\n\t\tcoze_workspace_id: string;\n\t\tcoze_bot_id: string;\n\t\tapp_builder_bot_id: string;\n\t\tfile_parse: {\n\t\t\tenable: boolean;\n\t\t};\n\t\timage_parse: {\n\t\t\tenable: boolean;\n\t\t};\n\t}\n\n\tinterface State {\n\t\tagent_id: number;\n\t\teid: number;\n\t\tname: string;\n\t\tlogo: string;\n\t\tsort: number;\n\t\tdescription: string;\n\t\tchannel_type: number;\n\t\tmodel: string;\n\t\tprompt: string;\n\t\tconfigs: string;  // 或者可以使用 CompletionParams 类型\n\t\ttools: string;    // 可以根据实际内容定义具体的工具类型\n\t\tgroup_id: number;\n\t\tuse_cases: string;  // 或者可以使用 UseCase[] 类型\n\t\tcreated_by: number;\n\t\tcustom_config: string;  // 或者可以使用 CustomConfig 类型\n\t\tuser_group_ids: number[];\n\t\tuser_group_names: string[];\n    settings: {\n      opening_statement: string\n      suggested_questions: string[]\n      file_parse: {\n        enable: boolean\n      }\n      image_parse: {\n        enable: boolean\n      }\n      input_fields: Field[]\n      output_fields: Field[]\n    }\n\t\tenable: boolean;\n\t\tcreated_time: number;\n\t\tupdated_time: number;\n    internal_members: string[];\n\t}\n\n  interface RelateAgent {\n    agent_id: number\n    name: string\n    logo: string\n    description: string\n    input_fields: Field[]\n    field_mapping: Record<string, string>\n    execution_rule: 'auto' | 'manual'\n  }\n\n\tinterface FormData  {\n\t\tlogo: string\n\t\tname: string\n\t\tgroup_id: number\n\t\tdescription: string\n\t\tchannel_type: number\n\t\tmodel: string\n\t\tsort: number\n\t\tprompt: string\n\t\tuser_group_ids: number[]\n\t\tsubscription_group_ids: number[]\n\t\ttools: any[]\n\t\tuse_cases: any[]\n\t\tconfigs: Record<string, any>\n\t\tenable: boolean\n\t\tcustom_config: {\n\t\t\tagent_type: string\n      agent_mode: string\n      provider_id: number\n\t\t\tcoze_workspace_id: string\n\t\t\tcoze_bot_id: string\n      coze_bot_url: string\n      tencent_bot_id: string\n\t\t\tapp_builder_bot_id: string\n\t\t\tchat53ai_agent_id: string\n      channel_config: Record<string, any>\n\t\t}\n    settings: {\n      opening_statement: string\n      suggested_questions: string[]\n      file_parse: {\n        enable: boolean\n      }\n      image_parse: {\n        enable: boolean\n      }\n      relate_agents: RelateAgent[]\n      input_fields: Field[]\n      output_fields: Field[]\n    }\n\t}\n\n\n  interface Field {\n    id: string\n    // 变量名\n    variable: string\n    // 类型\n    type: string\n    // 显示名\n    label: string\n    // 描述\n    desc: string\n    // 是否必填\n    required: boolean\n    // 是否多选\n    multiple: boolean\n    // 选项\n    options: FieldOption[]\n    // 最大长度\n    max_length: number\n    // 是否显示字数统计\n    show_word_limit: boolean\n    // 时间格式\n    date_format: string\n    // 是否系统变量\n    is_system: boolean\n    // 文件类型\n    file_type: 'all' | 'custom'\n    // 支持文件格式\n    file_accept: string[]\n    // 单个文件上限\n    file_size: number\n    // 上传最大数量\n    file_limit: number\n  }\n\n  interface FieldOption {\n    id: string\n    label: string\n    value: string\n  }\n}\n"
  },
  {
    "path": "web/console/src/types/ai-link.d.ts",
    "content": "declare namespace AI_LINK {\n  interface State {\n    id: number\n    eid: number\n    group_id: number\n    name: string\n    logo: string\n    url: string\n    description: string\n    sort: number\n    created_by: number\n    created_time: number\n    updated_time: number\n  }\n}"
  },
  {
    "path": "web/console/src/types/category.d.ts",
    "content": "declare namespace Category {\n\tinterface State {\n\t\tgroup_id: number\n\t\teid: number\n\t\tcreated_by: number\n\t\tgroup_name: string\n\t\tgroup_type: number\n\t\tsort: number\n\t\tagents: null\n\t\tcreated_time: number\n\t\tupdated_time: number\n\t}\n}"
  },
  {
    "path": "web/console/src/types/channel.d.ts",
    "content": "export interface ChannelConfig {\n  channel_id: number\n  key: string\n  base_url: string\n  models: string[]\n  model?: string\n  config: {\n    agent_type: 'chat' | 'completion' | 'workflow'\n  }\n  name: string\n}\n\nexport interface ChannelInfo {\n  value: ChannelConfig\n}\n\nexport interface ChannelForm {\n  key: string\n  base_url: string\n  models: string[]\n  model: string\n  config: {\n    agent_type: 'chat' | 'completion' | 'workflow'\n  }\n}\n"
  },
  {
    "path": "web/console/src/types/domain.d.ts",
    "content": "declare namespace Domain {\n\n}\n"
  },
  {
    "path": "web/console/src/types/enterprise.d.ts",
    "content": "declare namespace Enterprise {\n  interface Version {\n    product_id: number\n    name: string\n    version: number\n    features: {\n      [key: string]: {\n        max: number\n        name: string\n      }\n    }\n    disabled_features: string\n    created_time: number\n    updated_time: number\n  }\n}\n"
  },
  {
    "path": "web/console/src/types/entity.ts",
    "content": "/**\n * 实体类型枚举\n */\nexport const ENTITY_TYPE = {\n  USER: 'user',\n  GROUP: 'group'\n} as const\n\nexport type EntityType = (typeof ENTITY_TYPE)[keyof typeof ENTITY_TYPE]\n\n/**\n * 基础实体接口\n */\nexport interface BaseEntity {\n  value: number\n  label: string\n}\n\n/**\n * 用户信息类型定义\n */\nexport interface UserInfo extends BaseEntity {\n  user_id: number\n  nickname: string\n  name: string\n  avatar: string\n  email: string\n  mobile: string\n  role: number\n  status: number\n  departments: unknown[]\n  created_time: number\n}\n\n/**\n * 群组信息类型定义\n */\nexport interface GroupInfo extends BaseEntity {\n  group_id: number\n  group_name: string\n  sort: number\n  avatar?: string\n}\n\n/**\n * 统一实体类型\n */\nexport type EntityInfo = UserInfo | GroupInfo\n\n/**\n * 实体显示配置\n */\nexport interface EntityDisplayConfig {\n  /** 实体类型 */\n  type: EntityType\n  /** 实体ID */\n  id: number | string\n  /** 显示模式：avatar | name | full */\n  mode: 'avatar' | 'name' | 'full'\n  /** 头像大小 */\n  avatarSize?: number | string\n  /** 头像形状 */\n  avatarShape?: 'circle' | 'square'\n  /** 是否显示加载状态 */\n  showLoading?: boolean\n  /** 默认头像路径 */\n  defaultAvatar?: string\n}\n\n/**\n * 实体缓存配置\n */\nexport interface EntityCacheConfig {\n  /** 缓存时间（分钟） */\n  duration: number\n  /** 缓存键前缀 */\n  keyPrefix: string\n}\n\n/**\n * 实体API参数类型\n */\nexport interface EntityApiParams {\n  /** 用户API参数 */\n  user: {\n    status: number\n    offset: number\n    limit: number\n  }\n  /** 群组API参数 */\n  group: {\n    group_type: number\n  }\n}"
  },
  {
    "path": "web/console/src/types/env.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n/// <reference types=\"vue/macros-global\" />\n\n// Vue模板类型支持\ndeclare module '*.vue' {\n  import type { DefineComponent } from 'vue'\n  const component: DefineComponent<{}, {}, any>\n  export default component\n}\n\n// 全局类型声明\ndeclare global {\n  interface ImportMetaEnv {\n    readonly VITE_APP_TITLE: string\n    readonly VITE_APP_API_BASE_URL: string\n    readonly VITE_PLATFORM: string\n    readonly VITE_BASE_PATH: string\n    readonly VITE_GLOB_APP_PWA: string\n  }\n\n  interface ImportMeta {\n    readonly env: ImportMetaEnv\n  }\n}\n"
  },
  {
    "path": "web/console/src/types/global.d.ts",
    "content": "import 'vue'\n\nimport type { GlobalMethods } from '@/global/methods'\n\n// 类型声明，避免ts错误\ndeclare global {\n  interface Window extends GlobalMethods {\n    $t: (key: string, ...args: unknown[]) => string\n  }\n}\n"
  },
  {
    "path": "web/console/src/types/payment.d.ts",
    "content": "import type { PAYMENT_TYPE } from '@/constants/payment'\n\ndeclare namespace Payment {\n  type PaymentType = typeof PAYMENT_TYPE[keyof typeof PAYMENT_TYPE]\n}"
  },
  {
    "path": "web/console/src/types/platform.d.ts",
    "content": " "
  },
  {
    "path": "web/console/src/types/settings.d.ts",
    "content": "declare namespace Settings {\n\tinterface Info {\n\t\t\"setting_id\": number\n\t\t\"eid\": number\n\t\t\"key\": \"third_party_statistic_css\" | \"third_party_statistic_header\" | string\n\t\t\"value\": string\n\t\t\"created_time\": number\n\t\t\"updated_time\": number\n\t}\n}\n"
  },
  {
    "path": "web/console/src/types/subscription.d.ts",
    "content": "export interface PricingInfo {\n  amount: string | number\n  currency: string\n  relation_id: number\n  time_unit: string\n  type: number\n}\n\nexport interface SubscriptionAgent {\n  logo: string\n  name: string\n}\n\nexport interface SubscriptionItem {\n  delete: boolean\n  group_id: number\n  setting_id: number\n  ai_enabled: boolean\n  sort: number\n  group_name: string\n  logo_url: string\n  relations: PricingInfo[]\n  year_info: PricingInfo\n  month_info: PricingInfo\n  point_month_info: PricingInfo\n  agents: SubscriptionAgent[]\n  isdefault: boolean\n  target_group_id?: number\n}\n\nexport interface UnitOption {\n  value: string\n  label: string\n}\n\nexport interface AdvancedAgentOption {\n  icon: string\n  label: string\n  includes: string[]\n}\n\nexport interface SubscriptionSaveData {\n  items: SubscriptionItem[]\n}\n"
  },
  {
    "path": "web/console/src/types/vue-template.d.ts",
    "content": "import type { GlobalFilters } from '@/global/filters'\nimport type { GlobalMethods } from '@/global/methods'\n\n// Vue模板类型声明\ndeclare module '@vue/runtime-dom' {\n  interface ComponentCustomProperties extends GlobalMethods {\n    $filters: GlobalFilters\n    $t: (key: string, ...args: unknown[]) => string\n  }\n}\n\n// 确保Vue 3模板中的类型支持\ndeclare module 'vue' {\n  interface ComponentCustomProperties extends GlobalMethods {\n    $filters: GlobalFilters\n    $t: (key: string, ...args: unknown[]) => string\n  }\n}\n"
  },
  {
    "path": "web/console/src/utils/cache.ts",
    "content": "/**\n * 缓存管理工具类\n * 提供多种缓存模式，支持过期时间和泛型数据类型\n */\n\n/** 缓存模式枚举 */\nexport enum CacheMode {\n  /** 内存缓存（默认） */\n  MEMORY = 'memory',\n  /** SessionStorage 缓存 */\n  SESSION_STORAGE = 'sessionStorage',\n  /** LocalStorage 缓存 */\n  LOCAL_STORAGE = 'localStorage',\n  /** IndexedDB 缓存 */\n  INDEXED_DB = 'indexedDB',\n  /** Cookie 缓存 */\n  COOKIE = 'cookie',\n}\n\n/** 数据获取器类型定义 */\ntype Fetcher<T> = (() => Promise<T>) | (() => T) | T\n\n/** 缓存项接口定义 */\ninterface CacheItem<T> {\n  /** 缓存的数据 */\n  data: T\n  /** 过期时间戳 */\n  expireTime: number\n  /** 缓存模式 */\n  mode: CacheMode\n}\n\n/** 缓存适配器接口 */\ninterface CacheAdapter {\n  /** 设置缓存 */\n  set<T>(key: string, value: CacheItem<T>): Promise<void> | void\n  /** 获取缓存 */\n  get<T>(key: string): Promise<CacheItem<T> | null> | CacheItem<T> | null\n  /** 删除缓存 */\n  delete(key: string): Promise<void> | void\n  /** 清空缓存 */\n  clear(): Promise<void> | void\n  /** 获取所有键 */\n  keys(): Promise<string[]> | string[]\n}\n\n/** Cookie 工具函数 */\nclass CookieUtils {\n  /**\n   * 设置 Cookie\n   * @param name Cookie 名称\n   * @param value Cookie 值\n   * @param options Cookie 选项\n   */\n  static setCookie(\n    name: string,\n    value: string,\n    options: {\n      expires?: Date | number\n      path?: string\n      domain?: string\n      secure?: boolean\n      sameSite?: 'strict' | 'lax' | 'none'\n    } = {}\n  ): void {\n    let cookieString = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`\n\n    if (options.expires) {\n      if (typeof options.expires === 'number') {\n        const date = new Date()\n        date.setTime(date.getTime() + options.expires * 24 * 60 * 60 * 1000)\n        cookieString += `; expires=${date.toUTCString()}`\n      } else {\n        cookieString += `; expires=${options.expires.toUTCString()}`\n      }\n    }\n\n    if (options.path) {\n      cookieString += `; path=${options.path}`\n    }\n\n    if (options.domain) {\n      cookieString += `; domain=${options.domain}`\n    }\n\n    if (options.secure) {\n      cookieString += '; secure'\n    }\n\n    if (options.sameSite) {\n      cookieString += `; samesite=${options.sameSite}`\n    }\n\n    document.cookie = cookieString\n  }\n\n  /**\n   * 获取 Cookie\n   * @param name Cookie 名称\n   * @returns Cookie 值或 null\n   */\n  static getCookie(name: string): string | null {\n    const nameEQ = `${encodeURIComponent(name)}=`\n    const cookies = document.cookie.split(';')\n\n    for (let cookie of cookies) {\n      cookie = cookie.trim()\n      if (cookie.indexOf(nameEQ) === 0) {\n        return decodeURIComponent(cookie.substring(nameEQ.length))\n      }\n    }\n\n    return null\n  }\n\n  /**\n   * 删除 Cookie\n   * @param name Cookie 名称\n   * @param path Cookie 路径\n   * @param domain Cookie 域名\n   */\n  static deleteCookie(name: string, path?: string, domain?: string): void {\n    this.setCookie(name, '', {\n      expires: new Date(0),\n      path,\n      domain,\n    })\n  }\n\n  /**\n   * 获取所有 Cookie 名称\n   * @returns Cookie 名称数组\n   */\n  static getAllCookieNames(): string[] {\n    if (!document.cookie) return []\n\n    return document.cookie\n      .split(';')\n      .map(cookie => cookie.trim().split('=')[0])\n      .map(name => decodeURIComponent(name))\n  }\n}\n\n/** 内存缓存适配器 */\nclass MemoryCacheAdapter implements CacheAdapter {\n  private cacheMap: Map<string, CacheItem<unknown>> = new Map()\n\n  set<T>(key: string, value: CacheItem<T>): void {\n    this.cacheMap.set(key, value as CacheItem<unknown>)\n  }\n\n  get<T>(key: string): CacheItem<T> | null {\n    return this.cacheMap.get(key) as CacheItem<T> | null\n  }\n\n  delete(key: string): void {\n    this.cacheMap.delete(key)\n  }\n\n  clear(): void {\n    this.cacheMap.clear()\n  }\n\n  keys(): string[] {\n    return Array.from(this.cacheMap.keys())\n  }\n}\n\n/** SessionStorage 缓存适配器 */\nclass SessionStorageCacheAdapter implements CacheAdapter {\n  private readonly prefix = 'cache_'\n\n  set<T>(key: string, value: CacheItem<T>): void {\n    try {\n      const storageKey = this.prefix + key\n      sessionStorage.setItem(storageKey, JSON.stringify(value))\n    } catch (error) {\n      console.warn('SessionStorage 缓存设置失败:', error)\n    }\n  }\n\n  get<T>(key: string): CacheItem<T> | null {\n    try {\n      const storageKey = this.prefix + key\n      const item = sessionStorage.getItem(storageKey)\n      return item ? JSON.parse(item) : null\n    } catch (error) {\n      console.warn('SessionStorage 缓存获取失败:', error)\n      return null\n    }\n  }\n\n  delete(key: string): void {\n    try {\n      const storageKey = this.prefix + key\n      sessionStorage.removeItem(storageKey)\n    } catch (error) {\n      console.warn('SessionStorage 缓存删除失败:', error)\n    }\n  }\n\n  clear(): void {\n    try {\n      const keys = Object.keys(sessionStorage)\n      keys.forEach(key => {\n        if (key.startsWith(this.prefix)) {\n          sessionStorage.removeItem(key)\n        }\n      })\n    } catch (error) {\n      console.warn('SessionStorage 缓存清空失败:', error)\n    }\n  }\n\n  keys(): string[] {\n    try {\n      const keys = Object.keys(sessionStorage)\n      return keys\n        .filter(key => key.startsWith(this.prefix))\n        .map(key => key.substring(this.prefix.length))\n    } catch (error) {\n      console.warn('SessionStorage 获取键列表失败:', error)\n      return []\n    }\n  }\n}\n\n/** LocalStorage 缓存适配器 */\nclass LocalStorageCacheAdapter implements CacheAdapter {\n  private readonly prefix = 'cache_'\n\n  set<T>(key: string, value: CacheItem<T>): void {\n    try {\n      const storageKey = this.prefix + key\n      localStorage.setItem(storageKey, JSON.stringify(value))\n    } catch (error) {\n      console.warn('LocalStorage 缓存设置失败:', error)\n    }\n  }\n\n  get<T>(key: string): CacheItem<T> | null {\n    try {\n      const storageKey = this.prefix + key\n      const item = localStorage.getItem(storageKey)\n      return item ? JSON.parse(item) : null\n    } catch (error) {\n      console.warn('LocalStorage 缓存获取失败:', error)\n      return null\n    }\n  }\n\n  delete(key: string): void {\n    try {\n      const storageKey = this.prefix + key\n      localStorage.removeItem(storageKey)\n    } catch (error) {\n      console.warn('LocalStorage 缓存删除失败:', error)\n    }\n  }\n\n  clear(): void {\n    try {\n      const keys = Object.keys(localStorage)\n      keys.forEach(key => {\n        if (key.startsWith(this.prefix)) {\n          localStorage.removeItem(key)\n        }\n      })\n    } catch (error) {\n      console.warn('LocalStorage 缓存清空失败:', error)\n    }\n  }\n\n  keys(): string[] {\n    try {\n      const keys = Object.keys(localStorage)\n      return keys\n        .filter(key => key.startsWith(this.prefix))\n        .map(key => key.substring(this.prefix.length))\n    } catch (error) {\n      console.warn('LocalStorage 获取键列表失败:', error)\n      return []\n    }\n  }\n}\n\n/** IndexedDB 缓存适配器 */\nclass IndexedDBCacheAdapter implements CacheAdapter {\n  private readonly dbName = 'CacheDB'\n\n  private readonly storeName = 'cache'\n\n  private readonly version = 1\n\n  private db: IDBDatabase | null = null\n\n  private async initDB(): Promise<IDBDatabase> {\n    if (this.db) return this.db\n\n    return new Promise((resolve, reject) => {\n      const request = indexedDB.open(this.dbName, this.version)\n\n      request.onerror = () => reject(request.error)\n      request.onsuccess = () => {\n        this.db = request.result\n        resolve(this.db)\n      }\n\n      request.onupgradeneeded = event => {\n        const db = (event.target as IDBOpenDBRequest).result\n        if (!db.objectStoreNames.contains(this.storeName)) {\n          db.createObjectStore(this.storeName, { keyPath: 'key' })\n        }\n      }\n    })\n  }\n\n  async set<T>(key: string, value: CacheItem<T>): Promise<void> {\n    try {\n      const db = await this.initDB()\n      const transaction = db.transaction([this.storeName], 'readwrite')\n      const store = transaction.objectStore(this.storeName)\n      store.put({ key, ...value })\n    } catch (error) {\n      console.warn('IndexedDB 缓存设置失败:', error)\n    }\n  }\n\n  async get<T>(key: string): Promise<CacheItem<T> | null> {\n    try {\n      const db = await this.initDB()\n      const transaction = db.transaction([this.storeName], 'readonly')\n      const store = transaction.objectStore(this.storeName)\n\n      return new Promise((resolve, reject) => {\n        const request = store.get(key)\n        request.onerror = () => reject(request.error)\n        request.onsuccess = () => {\n          const result = request.result\n          if (result) {\n            const { key: _, ...cacheItem } = result\n            resolve(cacheItem as CacheItem<T>)\n          } else {\n            resolve(null)\n          }\n        }\n      })\n    } catch (error) {\n      console.warn('IndexedDB 缓存获取失败:', error)\n      return null\n    }\n  }\n\n  async delete(key: string): Promise<void> {\n    try {\n      const db = await this.initDB()\n      const transaction = db.transaction([this.storeName], 'readwrite')\n      const store = transaction.objectStore(this.storeName)\n      store.delete(key)\n    } catch (error) {\n      console.warn('IndexedDB 缓存删除失败:', error)\n    }\n  }\n\n  async clear(): Promise<void> {\n    try {\n      const db = await this.initDB()\n      const transaction = db.transaction([this.storeName], 'readwrite')\n      const store = transaction.objectStore(this.storeName)\n      store.clear()\n    } catch (error) {\n      console.warn('IndexedDB 缓存清空失败:', error)\n    }\n  }\n\n  async keys(): Promise<string[]> {\n    try {\n      const db = await this.initDB()\n      const transaction = db.transaction([this.storeName], 'readonly')\n      const store = transaction.objectStore(this.storeName)\n\n      return new Promise((resolve, reject) => {\n        const request = store.getAllKeys()\n        request.onerror = () => reject(request.error)\n        request.onsuccess = () => resolve(request.result as string[])\n      })\n    } catch (error) {\n      console.warn('IndexedDB 获取键列表失败:', error)\n      return []\n    }\n  }\n}\n\n/** Cookie 缓存适配器 */\nclass CookieCacheAdapter implements CacheAdapter {\n  private readonly prefix = 'cache_'\n\n  private readonly maxValueSize = 3000 // 考虑编码后的实际值大小限制\n\n  set<T>(key: string, value: CacheItem<T>): void {\n    try {\n      const cookieKey = this.prefix + key\n      const serializedValue = JSON.stringify(value)\n\n      // 检查数据大小是否超过 Cookie 限制\n      if (serializedValue.length > this.maxValueSize) {\n        console.warn(`Cookie 缓存数据过大，跳过存储: ${key}`, {\n          size: serializedValue.length,\n          maxSize: this.maxValueSize,\n        })\n        return\n      }\n\n      // 计算过期时间（相对于当前时间的天数）\n      const now = Date.now()\n      const expireTime = value.expireTime\n      const daysUntilExpiry = Math.ceil((expireTime - now) / (1000 * 60 * 60 * 24))\n\n      CookieUtils.setCookie(cookieKey, serializedValue, {\n        expires: daysUntilExpiry,\n        path: '/',\n        sameSite: 'lax',\n      })\n    } catch (error) {\n      console.warn('Cookie 缓存设置失败:', error)\n    }\n  }\n\n  get<T>(key: string): CacheItem<T> | null {\n    try {\n      const cookieKey = this.prefix + key\n      const cookieValue = CookieUtils.getCookie(cookieKey)\n\n      if (!cookieValue) return null\n\n      const cacheItem = JSON.parse(cookieValue) as CacheItem<T>\n\n      // 检查是否过期\n      if (Date.now() >= cacheItem.expireTime) {\n        this.delete(key)\n        return null\n      }\n\n      return cacheItem\n    } catch (error) {\n      console.warn('Cookie 缓存获取失败:', error)\n      return null\n    }\n  }\n\n  delete(key: string): void {\n    try {\n      const cookieKey = this.prefix + key\n      CookieUtils.deleteCookie(cookieKey, '/')\n    } catch (error) {\n      console.warn('Cookie 缓存删除失败:', error)\n    }\n  }\n\n  clear(): void {\n    try {\n      const allCookieNames = CookieUtils.getAllCookieNames()\n      const cacheCookieNames = allCookieNames.filter(name => name.startsWith(this.prefix))\n\n      cacheCookieNames.forEach(name => {\n        const key = name.substring(this.prefix.length)\n        this.delete(key)\n      })\n    } catch (error) {\n      console.warn('Cookie 缓存清空失败:', error)\n    }\n  }\n\n  keys(): string[] {\n    try {\n      const allCookieNames = CookieUtils.getAllCookieNames()\n      return allCookieNames\n        .filter(name => name.startsWith(this.prefix))\n        .map(name => name.substring(this.prefix.length))\n    } catch (error) {\n      console.warn('Cookie 获取键列表失败:', error)\n      return []\n    }\n  }\n}\n\n/**\n * 缓存管理器类\n * 使用单例模式，提供全局统一的缓存管理\n */\nexport class CacheManager {\n  /** 单例实例 */\n  // eslint-disable-next-line no-use-before-define\n  private static instance: CacheManager | null = null\n\n  /** 缓存适配器映射 */\n  private adapters: Map<CacheMode, CacheAdapter> = new Map()\n\n  /** 正在执行的 Promise 缓存，避免同一 key 的并发请求 */\n  private pendingPromises: Map<string, Promise<unknown>> = new Map()\n\n  /**\n   * 获取单例实例\n   * @returns CacheManager 实例\n   */\n  static getInstance(): CacheManager {\n    if (!CacheManager.instance) {\n      CacheManager.instance = new CacheManager()\n    }\n    return CacheManager.instance\n  }\n\n  /**\n   * 构造函数，初始化缓存适配器\n   */\n  constructor() {\n    this.adapters.set(CacheMode.MEMORY, new MemoryCacheAdapter())\n    this.adapters.set(CacheMode.SESSION_STORAGE, new SessionStorageCacheAdapter())\n    this.adapters.set(CacheMode.LOCAL_STORAGE, new LocalStorageCacheAdapter())\n    this.adapters.set(CacheMode.INDEXED_DB, new IndexedDBCacheAdapter())\n    this.adapters.set(CacheMode.COOKIE, new CookieCacheAdapter())\n  }\n\n  /**\n   * 获取指定模式的缓存适配器\n   * @param mode 缓存模式\n   * @returns 缓存适配器\n   */\n  private getAdapter(mode: CacheMode = CacheMode.MEMORY): CacheAdapter {\n    const adapter = this.adapters.get(mode)\n    if (!adapter) {\n      throw new Error(`不支持的缓存模式: ${mode}`)\n    }\n    return adapter\n  }\n\n  /**\n   * 判断值是否为 Promise\n   * @param value 待检查的值\n   * @returns 是否为 Promise\n   */\n  private isPromise<T>(value: unknown): value is Promise<T> {\n    return value != null && typeof (value as { then?: unknown }).then === 'function'\n  }\n\n  /**\n   * 设置缓存\n   * @param key 缓存键\n   * @param value 缓存值\n   * @param expireMinutes 过期时间（分钟），默认 1 分钟\n   * @param mode 缓存模式，默认内存缓存\n   */\n  async set<T>(\n    key: string,\n    value: T,\n    expireMinutes = 1,\n    mode: CacheMode = CacheMode.MEMORY\n  ): Promise<void> {\n    const expireTime = Date.now() + expireMinutes * 60 * 1000\n    const cacheItem: CacheItem<T> = {\n      data: value,\n      expireTime,\n      mode,\n    }\n\n    const adapter = this.getAdapter(mode)\n    await adapter.set(key, cacheItem)\n  }\n\n  /**\n   * 获取缓存\n   * @param key 缓存键\n   * @param mode 缓存模式，默认内存缓存\n   * @returns 缓存值，如果不存在或已过期则返回 null\n   */\n  async get<T>(key: string, mode: CacheMode = CacheMode.MEMORY): Promise<T | null> {\n    const now = Date.now()\n    const adapter = this.getAdapter(mode)\n    const cacheItem = await adapter.get<T>(key)\n\n    if (cacheItem && now < cacheItem.expireTime) {\n      return cacheItem.data\n    }\n\n    // 清理过期缓存\n    if (cacheItem) {\n      await adapter.delete(key)\n    }\n    return null\n  }\n\n  /**\n   * 获取缓存或执行获取函数\n   * 如果缓存存在且未过期，直接返回缓存值\n   * 否则执行获取函数并缓存结果\n   *\n   * @param key 缓存键\n   * @param fetcher 数据获取器，可以是函数、异步函数或直接的值\n   * @param expireMinutes 过期时间（分钟），默认 2 分钟\n   * @param mode 缓存模式，默认内存缓存\n   * @returns 缓存或获取的数据\n   *\n   * @example\n   * ```typescript\n   * // 缓存API请求结果到内存\n   * const userData = await cache.getOrFetch(\n   *   'user:123',\n   *   () => fetch('/api/user/123').then(res => res.json()),\n   *   5, // 5分钟过期\n   *   CacheMode.MEMORY\n   * )\n   *\n   * // 缓存计算结果到 localStorage\n   * const computed = await cache.getOrFetch(\n   *   'expensive-calc',\n   *   () => expensiveCalculation(),\n   *   30, // 30分钟过期\n   *   CacheMode.LOCAL_STORAGE\n   * )\n   *\n   * // 缓存用户设置到 sessionStorage\n   * const settings = await cache.getOrFetch(\n   *   'user-settings',\n   *   () => loadUserSettings(),\n   *   60, // 1小时过期\n   *   CacheMode.SESSION_STORAGE\n   * )\n   *\n   * // 缓存大量数据到 IndexedDB\n   * const largeData = await cache.getOrFetch(\n   *   'large-dataset',\n   *   () => fetchLargeDataset(),\n   *   120, // 2小时过期\n   *   CacheMode.INDEXED_DB\n   * )\n   * ```\n   */\n  async getOrFetch<T>(\n    key: string,\n    fetcher: Fetcher<T>,\n    expireMinutes = 2,\n    mode: CacheMode = CacheMode.MEMORY\n  ): Promise<T> {\n    // 检查缓存\n    const cachedValue = await this.get<T>(key, mode)\n    if (cachedValue !== null) return cachedValue\n\n    // 检查是否有正在执行的相同 key 的 Promise\n    const pendingKey = `${mode}:${key}`\n    if (this.pendingPromises.has(pendingKey)) {\n      // 如果有正在执行的 Promise，直接等待它完成\n      return this.pendingPromises.get(pendingKey) as Promise<T>\n    }\n\n    // 处理不同类型的 fetcher\n    let result: T | Promise<T>\n    if (typeof fetcher === 'function') {\n      const fetchResult = (fetcher as () => T | Promise<T>)()\n      result = fetchResult\n    } else {\n      result = fetcher\n    }\n\n    // 如果是 Promise，需要先缓存 Promise 再等待解析\n    if (this.isPromise<T>(result)) {\n      // 将 Promise 缓存起来，避免并发请求\n      this.pendingPromises.set(pendingKey, result as Promise<unknown>)\n\n      try {\n        const resolvedResult = await result\n        // 存储解析后的结果\n        await this.set(key, resolvedResult, expireMinutes, mode)\n        return resolvedResult\n      } catch (error) {\n        // Promise 被拒绝时，不存储任何内容\n        throw error\n      } finally {\n        // 无论成功还是失败，都要清理 pending Promise\n        this.pendingPromises.delete(pendingKey)\n      }\n    } else {\n      // 非 Promise 直接存储\n      await this.set(key, result, expireMinutes, mode)\n      return result\n    }\n  }\n\n  /**\n   * 删除指定缓存\n   * @param key 缓存键\n   * @param mode 缓存模式，默认内存缓存\n   */\n  async delete(key: string, mode: CacheMode = CacheMode.MEMORY): Promise<void> {\n    const adapter = this.getAdapter(mode)\n    await adapter.delete(key)\n  }\n\n  /**\n   * 清空指定模式的所有缓存\n   * @param mode 缓存模式，默认内存缓存\n   */\n  async clear(mode: CacheMode = CacheMode.MEMORY): Promise<void> {\n    const adapter = this.getAdapter(mode)\n    await adapter.clear()\n  }\n\n  /**\n   * 清空所有缓存模式的数据\n   */\n  async clearAll(): Promise<void> {\n    const clearPromises = Array.from(this.adapters.keys()).map(mode => this.clear(mode))\n    await Promise.all(clearPromises)\n  }\n\n  /**\n   * 获取指定模式的缓存状态信息\n   * @param mode 缓存模式，默认内存缓存\n   * @returns 缓存统计信息\n   */\n  async getStats(mode: CacheMode = CacheMode.MEMORY): Promise<{\n    /** 缓存项总数 */\n    total: number\n    /** 有效缓存项数量 */\n    valid: number\n    /** 过期缓存项数量 */\n    expired: number\n  }> {\n    const adapter = this.getAdapter(mode)\n    const keys = await adapter.keys()\n    const now = Date.now()\n    let validCount = 0\n    let expiredCount = 0\n\n    for (const key of keys) {\n      const item = await adapter.get(key)\n      if (item) {\n        if (now < item.expireTime) {\n          validCount++\n        } else {\n          expiredCount++\n        }\n      }\n    }\n\n    return {\n      total: keys.length,\n      valid: validCount,\n      expired: expiredCount,\n    }\n  }\n\n  /**\n   * 获取所有缓存模式的统计信息\n   * @returns 各模式的缓存统计信息\n   */\n  async getAllStats(): Promise<\n    Record<\n      CacheMode,\n      {\n        total: number\n        valid: number\n        expired: number\n      }\n    >\n  > {\n    const stats: Record<string, any> = {}\n    const modes = Array.from(this.adapters.keys())\n\n    for (const mode of modes) {\n      stats[mode] = await this.getStats(mode)\n    }\n\n    return stats as Record<\n      CacheMode,\n      {\n        total: number\n        valid: number\n        expired: number\n      }\n    >\n  }\n\n  /**\n   * 清理指定模式的过期缓存\n   * @param mode 缓存模式，默认内存缓存\n   * @returns 清理的缓存项数量\n   */\n  async cleanExpired(mode: CacheMode = CacheMode.MEMORY): Promise<number> {\n    const adapter = this.getAdapter(mode)\n    const keys = await adapter.keys()\n    const now = Date.now()\n    let cleanedCount = 0\n\n    for (const key of keys) {\n      const item = await adapter.get(key)\n      if (item && now >= item.expireTime) {\n        await adapter.delete(key)\n        cleanedCount++\n      }\n    }\n\n    return cleanedCount\n  }\n\n  /**\n   * 清理所有模式的过期缓存\n   * @returns 各模式清理的缓存项数量\n   */\n  async cleanAllExpired(): Promise<Record<CacheMode, number>> {\n    const results: Record<string, number> = {}\n    const modes = Array.from(this.adapters.keys())\n\n    for (const mode of modes) {\n      results[mode] = await this.cleanExpired(mode)\n    }\n\n    return results as Record<CacheMode, number>\n  }\n}\n\n/** 默认导出缓存管理器单例实例 */\nexport default CacheManager.getInstance()\n"
  },
  {
    "path": "web/console/src/utils/config.ts",
    "content": "// @ts-ignore\nexport const pathname = '/api'\n// @ts-ignore\nexport const api_host =\n  window.api_host || import.meta.env.VITE_GLOB_API_HOST || window.location.origin\n// @ts-ignore\nexport const qyy_host =\n  window.qyy_host || import.meta.env.VITE_GLOB_QYY_HOST || window.location.origin\n\nexport const img_host = `${api_host}/api/images`\nexport const lib_host = `${api_host}/api/libs`\n\nexport const base_path = import.meta.env.VITE_BASE_PATH || '/console'\n"
  },
  {
    "path": "web/console/src/utils/copy.ts",
    "content": "export function copyToClip(text: string) {\n  return new Promise((resolve, reject) => {\n    try {\n      const input: HTMLTextAreaElement = document.createElement('textarea')\n      input.setAttribute('readonly', 'readonly')\n      input.value = text\n      document.body.appendChild(input)\n      input.select()\n      if (document.execCommand('copy'))\n        document.execCommand('copy')\n      document.body.removeChild(input)\n      resolve(text)\n    }\n    catch (error) {\n      reject(error)\n    }\n  })\n}\n\n/**\n * 复制图片\n */\nexport function copyImageToClip(url: string) {\n  return new Promise((resolve) => {\n    const img = new Image()\n    img.src = url\n\n    img.crossOrigin = 'Anonymous'\n\n    img.onload = () => {\n      const canvas = document.createElement('canvas')\n      const ctx = canvas.getContext('2d')\n      canvas.width = img.width\n      canvas.height = img.height\n\n      ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n      ctx.drawImage(img, 0, 0)\n      // 将canvas转为blob\n      canvas.toBlob(async (blob) => {\n        try {\n          const clipboardItem = new ClipboardItem({ 'image/png': blob })\n          // https://w3c.github.io/clipboard-apis/#dom-clipboard-write\n          await navigator.clipboard.write([clipboardItem])\n          resolve()\n        }\n        catch (error) {\n          console.error('Unable to write to clipboard.', error)\n          copyToClip(url).then(() => resolve())\n        }\n      }, 'image/png')\n    }\n  })\n}\n"
  },
  {
    "path": "web/console/src/utils/event-bus.ts",
    "content": "// eventBus.js\nconst eventBus: {\n  events: {\n    [eventName: string]: ((data: any) => void)[]\n  }\n  emit: (eventName: string, data?: any) => void\n  on: (eventName: string, callback: () => void) => void\n  off: (eventName: string, callback?: () => void) => void\n} = {\n  events: {},\n\n  emit(eventName: string, data?: any) {\n    if (this.events[eventName]) this.events[eventName].forEach(callback => callback(data))\n  },\n\n  on(eventName: string, callback: () => void) {\n    this.events[eventName] = this.events[eventName] || []\n    this.events[eventName].push(callback)\n  },\n\n  off(eventName: string, callback?: () => void) {\n    if (this.events[eventName]) {\n      if (callback) this.events[eventName] = this.events[eventName].filter(cb => cb !== callback)\n      else delete this.events[eventName]\n    }\n  },\n}\n\nexport default eventBus\n"
  },
  {
    "path": "web/console/src/utils/filter.ts",
    "content": "import * as moment from '@/utils/moment'\n\nexport const dateRangeOptions: { value: string; label: string }[] = [\n  {\n    value: '0',\n    label: '今天',\n  },\n  {\n    value: '1',\n    label: '过去7天',\n  },\n  {\n    value: '2',\n    label: '过去4周',\n  },\n  {\n    value: '3',\n    label: '过去3月',\n  },\n  {\n    value: '4',\n    label: '过去12月',\n  },\n  {\n    value: '5',\n    label: '本月至今',\n  },\n  {\n    value: '6',\n    label: '本季度至今',\n  },\n  {\n    value: '7',\n    label: '本年至今',\n  },\n  {\n    value: '8',\n    label: '所有时间',\n  },\n]\n\nexport const getRangeStartEndDates = (time_type: string): { start?: string; end?: string } => {\n  const options = {}\n  let start = ''\n  if (time_type === '0') start = moment.getCurrentDate('YYYY-MM-DD 00:01')\n  else if (time_type === '1') start = moment.getLastTimeAsDay(7, 'YYYY-MM-DD hh:mm')\n  else if (time_type === '2') start = moment.getLastTimeAsWeek(4, 'YYYY-MM-DD hh:mm')\n  else if (time_type === '3') start = moment.getLastTimeAsMonth(3, 'YYYY-MM-DD hh:mm')\n  else if (time_type === '4') start = moment.getLastTimeAsMonth(12, 'YYYY-MM-DD hh:mm')\n  else if (time_type === '5') start = moment.getCurrentMonth('YYYY-MM-DD hh:mm')\n  else if (time_type === '6') start = moment.getCurrentQuarter('YYYY-MM-DD hh:mm')\n  else if (time_type === '7') start = moment.getCurrentYeaer('YYYY-MM-DD hh:mm')\n  else if (time_type === '8') start = '2022-01-01 00:00'\n\n  if (start) {\n    options.start = start\n    options.end = moment.getCurrentDate('YYYY-MM-DD hh:mm')\n  } else {\n    options.start = null\n    options.end = null\n  }\n\n  return options\n}\n"
  },
  {
    "path": "web/console/src/utils/form-rule.ts",
    "content": "export const textValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  callback()\n}\n\nexport const linkValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  if (\n    !/^(https?:\\/\\/)?((([\\w.-]+)(\\.[\\w.-]+)+)|((\\d{1,3}\\.){3}\\d{1,3}))(:\\d+)?([\\/#\\?].*)?$/.test(\n      value\n    )\n  )\n    return callback(new Error(window.$t('form_link_validator')))\n  callback()\n}\n\nexport const accountValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (/[\\s]/.test(value)) {\n    return callback(new Error(window.$t('form_account_validator')))\n  }\n  if (!value) return callback(new Error(window.$t(message)))\n  callback()\n}\n\nexport const mobileValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  if (!/^(\\+86)?(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\\d{8}$/.test(value))\n    return callback(new Error(window.$t('form_mobile_validator')))\n  callback()\n}\n\nexport const emailValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  if (!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(value))\n    return callback(new Error(window.$t('form_email_validator')))\n  callback()\n}\n\nexport const mobileOrEmailValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  if (\n    !/^(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\\d{8}$/.test(value) &&\n    !/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(value)\n  )\n    return callback(new Error(window.$t('form_mobile_or_email_validator')))\n  callback()\n}\n\nexport const passwordValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (/[\\u4e00-\\u9fa5]/.test(value) || /[\\s]/.test(value))\n    return callback(new Error(window.$t('form_password_validator')))\n  if (!value) return callback(new Error(window.$t(message)))\n  callback()\n}\n\nexport const urlValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  if (\n    !/^(https?:\\/\\/)?([\\w.-]+)(\\.[\\w.-]+)+(:(0|([1-9]\\d{0,3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5])))?([\\/#\\?].*)?$/.test(\n      value\n    )\n  )\n    return callback(new Error(window.$t('form_url_validator')))\n  callback()\n}\nexport const pathValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  if (!/^(\\/[\\w-]+)+$/.test(value)) return callback(new Error(window.$t('form_path_validator')))\n  callback()\n}\nexport const imageValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  if (!/^https?:\\/\\/.+\\.(jpg|jpeg|png|gif|bmp|webp)$/.test(value))\n    return callback(new Error(window.$t('form_image_validator')))\n  callback()\n}\n\nexport const variableValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(value))\n    return callback(new Error(window.$t('form_variable_validator')))\n  callback()\n}\n\nexport const portValidator = ({ rule, value, callback, message } = {}) => {\n  value = String(value || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  if (!/^\\d+$/.test(value) || Number(value) < 1 || Number(value) > 65535) {\n    return callback(new Error(window.$t('form_port_validator')))\n  }\n  callback()\n}\n\nexport const numberValidator = ({ rule, value, callback, message, min, max } = {}) => {\n  value = String(value).trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  if (!/^\\d+$/.test(value)) return callback(new Error(window.$t(message)))\n  if (Number(value) < min || Number(value) > max) return callback(new Error(window.$t(message)))\n  callback()\n}\n\nexport const generateInputRules = ({\n  message = 'form_input_placeholder',\n  trigger = ['blur', 'change'],\n  validator = ['text'],\n  min = 0,\n  max = 99999999,\n} = {}) => {\n  const rules = []\n  if (validator.includes('text'))\n    rules.push({\n      validator: (rule, value, callback) => textValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  if (validator.includes('port'))\n    rules.push({\n      validator: (rule, value, callback) => portValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  if (validator.includes('account'))\n    rules.push({\n      validator: (rule, value, callback) => accountValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  if (validator.includes('link'))\n    rules.push({\n      validator: (rule, value, callback) => linkValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  if (validator.includes('mobile') && validator.includes('email'))\n    rules.push({\n      validator: (rule, value, callback) =>\n        mobileOrEmailValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  else if (validator.includes('mobile'))\n    rules.push({\n      validator: (rule, value, callback) => mobileValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  else if (validator.includes('email'))\n    rules.push({\n      validator: (rule, value, callback) => emailValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  if (validator.includes('password'))\n    rules.push({\n      validator: (rule, value, callback) => passwordValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  if (validator.includes('url'))\n    rules.push({\n      validator: (rule, value, callback) => urlValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  if (validator.includes('path'))\n    rules.push({\n      validator: (rule, value, callback) => pathValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  if (validator.includes('image'))\n    rules.push({\n      validator: (rule, value, callback) =>\n        imageValidator({ rule, value, callback, message: 'form_upload_placeholder' }),\n      trigger,\n    })\n  if (validator.includes('variable'))\n    rules.push({\n      validator: (rule, value, callback) => variableValidator({ rule, value, callback, message }),\n      trigger,\n    })\n  if (validator.includes('number'))\n    rules.push({\n      validator: (rule, value, callback) =>\n        numberValidator({ rule, value, callback, message, min, max }),\n      trigger,\n    })\n  return rules\n}\n"
  },
  {
    "path": "web/console/src/utils/form-rule.v2.ts",
    "content": "// 验证器函数类型\ntype ValidatorFn = (value: string, message: string) => string | null\n\n// 验证规则类型\ntype ValidationRule = {\n  validator: (rule: unknown, value: unknown, callback: (error?: Error) => void) => void\n  trigger: string[]\n}\n\n// 基础验证器工厂函数\nconst createValidator = (validatorFn: ValidatorFn) => {\n  return ({\n    value,\n    callback,\n    message,\n  }: {\n    value: unknown\n    callback: (error?: Error) => void\n    message: string\n  }): void => {\n    const trimmedValue = String(value || '').trim()\n    const error = validatorFn(trimmedValue, message)\n    callback(error ? new Error(error) : undefined)\n  }\n}\n\n// 各种验证器实现\nconst validators = {\n  // 必填验证\n  required: (value: string, message: string) => (!value ? message : null),\n\n  // 链接验证\n  link: (value: string, message: string) => {\n    if (!value) return message\n    const pattern =\n      /^(https?:\\/\\/)?((([\\w.-]+)(\\.[\\w.-]+)+)|((\\d{1,3}\\.){3}\\d{1,3}))(:\\d+)?([\\/#\\?].*)?$/\n    return pattern.test(value) ? null : window.$t('form_link_validator')\n  },\n\n  // 手机号验证\n  mobile: (value: string, message: string) => {\n    if (!value) return message\n    const pattern = /^(\\+86)?(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\\d{8}$/\n    return pattern.test(value) ? null : window.$t('form_mobile_validator')\n  },\n\n  // 邮箱验证\n  email: (value: string, message: string) => {\n    if (!value) return message\n    const pattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\n    return pattern.test(value) ? null : window.$t('form_email_validator')\n  },\n\n  // 手机号或邮箱验证\n  mobileOrEmail: (value: string, message: string) => {\n    if (!value) return message\n    const mobilePattern = /^(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\\d{8}$/\n    const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\n    return mobilePattern.test(value) || emailPattern.test(value)\n      ? null\n      : window.$t('form_mobile_or_email_validator')\n  },\n\n  // 密码验证\n  password: (value: string, message: string) => {\n    if (!value) return message\n    if (/[\\u4e00-\\u9fa5\\s]/.test(value)) return window.$t('form_password_validator')\n    return null\n  },\n\n  // URL验证\n  url: (value: string, message: string) => {\n    if (!value) return message\n    const pattern = /^(https?:\\/\\/)?([\\w.-]+)(\\.[\\w.-]+)+([\\/#\\?].*)?$/\n    return pattern.test(value) ? null : window.$t('form_url_validator')\n  },\n\n  // 路径验证\n  path: (value: string, message: string) => {\n    if (!value) return message\n    const pattern = /^(\\/[\\w-]+)+$/\n    return pattern.test(value) ? null : window.$t('form_path_validator')\n  },\n\n  // 图片URL验证\n  image: (value: string, message: string) => {\n    if (!value) return message\n    const pattern = /^https?:\\/\\/.+\\.(jpg|jpeg|png|gif|bmp|webp)$/\n    return pattern.test(value) ? null : window.$t('form_image_validator')\n  },\n\n  // 变量名验证\n  variable: (value: string, message: string) => {\n    if (!value) return message\n    const pattern = /^[a-zA-Z_][a-zA-Z0-9_]*$/\n    return pattern.test(value) ? null : window.$t('form_variable_validator')\n  },\n} as const\n\nexport type ValidatorType = keyof typeof validators\n\n// 导出各个验证器\nexport const textValidator = createValidator(validators.required)\nexport const linkValidator = createValidator(validators.link)\nexport const mobileValidator = createValidator(validators.mobile)\nexport const emailValidator = createValidator(validators.email)\nexport const mobileOrEmailValidator = createValidator(validators.mobileOrEmail)\nexport const passwordValidator = createValidator(validators.password)\nexport const urlValidator = createValidator(validators.url)\nexport const pathValidator = createValidator(validators.path)\nexport const imageValidator = createValidator(validators.image)\nexport const variableValidator = createValidator(validators.variable)\n\n// 生成表单验证规则\nexport const generateFormRules = ({\n  message = window.$t('form_input_placeholder'),\n  trigger = ['blur', 'change'],\n  validator = ['required'],\n}: {\n  message?: string\n  trigger?: string[]\n  validator?: string[]\n} = {}): ValidationRule[] => {\n  const rules: ValidationRule[] = []\n\n  // 处理验证器\n  validator.forEach(v => {\n    const fn = validators[v as ValidatorType]\n    if (fn) {\n      rules.push({\n        validator: (rule: unknown, value: unknown, callback: (error?: Error) => void) => {\n          const err = fn(String(value || '').trim(), message)\n          callback(err ? new Error(err) : undefined)\n        },\n        trigger,\n      })\n    }\n  })\n\n  return rules\n}\n"
  },
  {
    "path": "web/console/src/utils/form-validator.ts",
    "content": "import { Ref } from 'vue'\nimport { ElForm } from 'element-plus'\n\n/**\n * 表单字段验证工具函数\n * @param formRef 表单实例引用\n * @param field 要验证的字段名\n * @returns 验证结果\n */\nexport const validateFormField = async (\n  formRef: Ref<InstanceType<typeof ElForm> | undefined>,\n  field: string\n): Promise<boolean> => {\n  if (!formRef.value) {\n    return false\n  }\n\n  try {\n    await formRef.value.validateField(field)\n    return true\n  } catch (error) {\n    return false\n  }\n}\n"
  },
  {
    "path": "web/console/src/utils/functions/debounce.ts",
    "content": "type CallbackFunc<T extends unknown[]> = (...args: T) => void\n\nexport function debounce<T extends unknown[]>(\n  func: CallbackFunc<T>,\n  wait: number,\n  immediate = false,\n): (...args: T) => void {\n  let timeoutId: ReturnType<typeof setTimeout> | undefined\n\n  return (...args: T) => {\n    const later = () => {\n      func(...args)\n    }\n\n    clearTimeout(timeoutId)\n    if (immediate) {\n      const callNow = !timeoutId\n      timeoutId = setTimeout(() => {\n        timeoutId = undefined\n      }, wait)\n      if (callNow)\n        later()\n    }\n    else {\n      timeoutId = setTimeout(later, wait)\n    }\n  }\n}\n"
  },
  {
    "path": "web/console/src/utils/functions/index.ts",
    "content": ""
  },
  {
    "path": "web/console/src/utils/index.ts",
    "content": "/**\n * 判断在对象数据中是否有效值\n * @param { string | number | symbol } key 对象键值\n * @param { object } source 对象数据\n * @returns { boolean }\n */\nexport const isValidKeyInObject = (\n  key: string | number | symbol | keyof typeof source = '',\n  source: any = {}\n) => {\n  return !!(key && source && Object.keys(source).length && key in source && source[key])\n}\nexport const typeOfData = source => {\n  return Object.prototype.toString.call(source).slice(8, -1)\n}\n/**\n * 系列化对象为 search 参数\n * @param { object } source 参数\n * @returns { string }\n */\nexport const serialize = (source: any) => {\n  return Object.keys(source)\n    .filter(key => isValidKeyInObject(key, source))\n    .sort()\n    .map(key => {\n      let value: any = source[key]\n      if (typeOfData(value) === 'object') value = JSON.stringify(value)\n      else if (typeOfData(value) === 'array') value = value.join(',')\n      return `${key}=${value}`\n    })\n    .join('&')\n}\n\n/**\n *\n */\nexport const joinUrl = (url, paramStr) => {\n  if (typeof url === 'string') return url + (url.includes('?') ? '&' : '?') + paramStr\n\n  return ''\n}\n\n/**\n * 获取日期的时间戳\n */\nexport const getTimeStamp = (str: string) => {\n  return new Date(str.replace(/-/g, '/')).getTime()\n}\n\n/**\n * 深拷贝\n */\nexport const deepCopy = (obj, ignore: string[] = []): any => {\n  if (obj === null || typeof obj !== 'object') {\n    // 如果是基本类型或 null，则直接返回\n    return obj\n  }\n\n  if (Array.isArray(obj)) {\n    // 如果是数组，则创建一个新数组并递归复制每个元素\n    return obj.map(item => deepCopy(item, ignore))\n  }\n  if (obj instanceof Date) return obj\n\n  // 如果是对象，则创建一个新对象并递归复制每个属性\n  const newObj = {}\n  for (const key in obj) {\n    if (obj.hasOwnProperty(key) && !ignore.includes(key)) newObj[key] = deepCopy(obj[key], ignore)\n  }\n\n  return newObj\n}\n\n/**\n * 继承\n * @param target\n * @param source\n * @returns\n */\nexport const assign = (target, ...source) => {\n  for (const i in source) {\n    if (!source.hasOwnProperty(i)) continue\n\n    const object = source[i]\n    if (typeof object === 'object' && object !== null) {\n      Object.keys(object).forEach(key => {\n        const value = object[key]\n        if (Array.isArray(value)) target[key] = value\n        else if (typeof value === 'object' && value !== null)\n          target[key] = assign({}, target[key] || {}, value)\n        else target[key] = value\n      })\n    } else {\n      target[i] = object\n    }\n  }\n  return target\n}\n\nexport const generateRandomId = (length: number, isvar = false, isUuid = false): string => {\n  const numberChars = '0123456789' // 数字字符集\n  const nonNumericChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' // 非数字字符集\n  const characters = nonNumericChars + numberChars\n  let result = ''\n\n  // 生成第一个字符，如果isvar为true，则从非数字字符中选取\n  if (isvar) result += nonNumericChars[Math.floor(Math.random() * nonNumericChars.length)]\n  else result += characters[Math.floor(Math.random() * characters.length)]\n\n  // 生成剩余的字符\n  for (let i = 1; i < length; i++)\n    result += characters[Math.floor(Math.random() * characters.length)]\n\n  if (isUuid) {\n    result = result.toLowerCase()\n    return result.replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/, '$1-$2-$3-$4-$5')\n  }\n\n  return result\n}\n\nexport const sleep = (time: number) => {\n  return new Promise(resolve => {\n    let timer: any\n    timer = setTimeout(() => {\n      resolve()\n      clearTimeout(timer)\n    }, time * 1000)\n  })\n}\n\n/**\n * 删除js地址\n */\nexport const removeScript = (src: string) => {\n  const node = document.querySelector(`script[src=\"${src}\"]`)\n  if (node) node.remove()\n}\n\n/**\n *\n * @param src 加载js地址\n */\nexport const loadScript = (src: string, cache = true) => {\n  return new Promise((resolve, reject) => {\n    const node = document.querySelector(`script[src=\"${src}\"]`)\n    if (node) {\n      if (cache) return resolve()\n      node.remove()\n    }\n\n    const element = document.createElement('script')\n    element.src = src\n    element.referrerpolicy = 'origin'\n    element.onload = function () {\n      resolve()\n    }\n    element.onerror = function () {\n      reject()\n    }\n    document.body.appendChild(element)\n  })\n}\n\nexport const compare = (obj1, obj2, fields?: any[] = []) => {\n  let object1 = {}\n  let object2 = {}\n  if (fields && fields.length) {\n    fields.forEach(field => {\n      object1[field] = obj1[field]\n      object2[field] = obj2[field]\n    })\n  } else {\n    object1 = obj1\n    object2 = obj2\n  }\n  return JSON.stringify(object1) === JSON.stringify(object2)\n}\n\n/**\n * 是不是空对象\n */\nexport const isEmptyObject = obj => {\n  return Object.keys(obj).length === 0 && obj.constructor === Object\n}\n\n// 判断是否是function或Promise\nexport const isFunction: (_function: any, onlyFunction?: boolean) => boolean = (\n  _function = null,\n  onlyFunction = false\n) => Boolean(typeof _function === 'function' || (!onlyFunction && _function instanceof Promise))\nexport const isObject = (value: any) => typeof value === 'object' && value !== null\n\n// Promise按顺序逐个执行\nexport const runResolvers = (resolvers = [() => Promise.resolve()]) => {\n  let resolver = Promise.resolve()\n  const results = []\n  const errors = []\n  while (resolvers.length) {\n    const task = resolvers.shift()\n    resolver = resolver.finally(() =>\n      task()\n        .then(res => results.push(res))\n        .catch(err => errors.push(err))\n    )\n  }\n  return resolver\n    .then(() => results)\n    .catch(() => errors)\n    .finally(() => ({ resultList: results, errorList: errors }))\n}\n\nexport const generateUUID = () => {\n  if (typeof crypto.randomUUID === 'function') return crypto.randomUUID()\n  const temp_url = URL.createObjectURL(new Blob())\n  const uuid = temp_url.toString()\n  URL.revokeObjectURL(temp_url)\n  return uuid.substr(uuid.lastIndexOf('/') + 1)\n}\n\nconst idleQueue = []\nlet isRunning = false\nlet _runTimer: any\n\nconst executeNextTask = deadline => {\n  if (isRunning || !idleQueue.length) return\n\n  isRunning = true\n  const task = idleQueue.shift()\n\n  try {\n    task(deadline)\n  } catch (error) {\n    console.error('Error executing idle task:', error)\n  } finally {\n    isRunning = false\n    requestIdleCallback(executeNextTask)\n  }\n}\n/**\n * 空闲时间执行任务\n */\nexport const runOnIdle = (callback, options = {}) => {\n  if (window.requestIdleCallback) {\n    window.requestIdleCallback(executeNextTask, options)\n  } else {\n    console.warn('requestIdleCallback is not supported. Falling back to setTimeout.')\n    _runTimer = setTimeout(deadline => {\n      try {\n        callback(deadline)\n      } catch (error) {\n        console.error('Error executing idle function:', error)\n      }\n      clearTimeout(_runTimer)\n    }, 0)\n  }\n}\n\nexport const isInternalNetwork = () => {\n  const hostname = window.location.hostname\n\n  // 检查localhost和其他本地主机名\n  if (['localhost', '127.0.0.1', '::1', '0.0.0.0'].includes(hostname)) {\n    return true\n  }\n\n  // 检查IPv4内网地址范围\n  if (/^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(hostname)) {\n    const parts = hostname.split('.').map(Number)\n\n    // 检查地址合法性\n    if (parts.some(p => p < 0 || p > 255)) return false\n\n    // 私有地址段判断\n    return (\n      parts[0] === 10 || // 10.0.0.0/8\n      (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31) || // 172.16.0.0/12\n      (parts[0] === 192 && parts[1] === 168) || // 192.168.0.0/16\n      (parts[0] === 169 && parts[1] === 254)\n    ) // APIPA 169.254.0.0/16\n  }\n\n  // 检查IPv6内网地址\n  if (hostname.startsWith('[') && hostname.endsWith(']')) {\n    const ip = hostname.slice(1, -1)\n    return (\n      ip === 'fc00:' || // IPv6私有地址范围 (fc00::/7)\n      ip === 'fd00:' ||\n      ip.startsWith('fe80:')\n    ) // 链路本地地址 (fe80::/10)\n  }\n\n  // 检查常见内网域名后缀\n  return /\\.(local|lan|intranet|internal|priv)$/i.test(hostname)\n}\n\n/**\n * 解析JSON\n * @param json\n * @param defaultValue\n * @returns\n */\nexport const JSONParse = (json: string, defaultValue: any = {}) => {\n  try {\n    return JSON.parse(json)\n  } catch (error) {\n    return defaultValue\n  }\n}\n"
  },
  {
    "path": "web/console/src/utils/is/index.ts",
    "content": "export function isNumber<T extends number>(value: T | unknown): value is number {\n  return Object.prototype.toString.call(value) === '[object Number]'\n}\n\nexport function isString<T extends string>(value: T | unknown): value is string {\n  return Object.prototype.toString.call(value) === '[object String]'\n}\n\nexport function isBoolean<T extends boolean>(value: T | unknown): value is boolean {\n  return Object.prototype.toString.call(value) === '[object Boolean]'\n}\n\nexport function isNull<T extends null>(value: T | unknown): value is null {\n  return Object.prototype.toString.call(value) === '[object Null]'\n}\n\nexport function isUndefined<T extends undefined>(value: T | unknown): value is undefined {\n  return Object.prototype.toString.call(value) === '[object Undefined]'\n}\n\nexport function isObject<T extends object>(value: T | unknown): value is object {\n  return Object.prototype.toString.call(value) === '[object Object]'\n}\n\nexport function isArray<T extends any[]>(value: T | unknown): value is T {\n  return Object.prototype.toString.call(value) === '[object Array]'\n}\n\nexport function isFunction<T extends (...args: any[]) => any | void | never>(value: T | unknown): value is T {\n  return Object.prototype.toString.call(value) === '[object Function]'\n}\n\nexport function isDate<T extends Date>(value: T | unknown): value is T {\n  return Object.prototype.toString.call(value) === '[object Date]'\n}\n\nexport function isRegExp<T extends RegExp>(value: T | unknown): value is T {\n  return Object.prototype.toString.call(value) === '[object RegExp]'\n}\n\nexport function isPromise<T extends Promise<any>>(value: T | unknown): value is T {\n  return Object.prototype.toString.call(value) === '[object Promise]'\n}\n\nexport function isSet<T extends Set<any>>(value: T | unknown): value is T {\n  return Object.prototype.toString.call(value) === '[object Set]'\n}\n\nexport function isMap<T extends Map<any, any>>(value: T | unknown): value is T {\n  return Object.prototype.toString.call(value) === '[object Map]'\n}\n\nexport function isFile<T extends File>(value: T | unknown): value is T {\n  return Object.prototype.toString.call(value) === '[object File]'\n}\n"
  },
  {
    "path": "web/console/src/utils/loadLib.ts",
    "content": "import { lib_host } from './config'\n\n/**\n * 库项类型定义\n * 每个库包含基本信息和动态加载的 Promise\n */\ntype LibItem = {\n  /** 库的唯一标识符 */\n  id: string\n  /** 库的 JavaScript 文件路径 */\n  src: string\n  /** 库加载完成后的回调函数，用于执行额外的初始化操作 */\n  callback: () => void\n  /** 库加载的 Promise，用于缓存加载状态 */\n  _promise?: Promise<void>\n}\n\n/**\n * 支持的库配置\n * 使用 Record 类型确保类型安全\n */\nconst libs: Record<string, LibItem> = {\n  /** Vditor 富文本编辑器库 */\n  vditor: {\n    id: 'vditor-lib',\n    src: `${lib_host}/js/vditor/dist/index.min.js`,\n    callback() {\n      // 动态加载 Vditor 的 CSS 样式文件\n      const css = document.createElement('link')\n      css.rel = 'stylesheet'\n      css.href = `${lib_host}/js/vditor/dist/index.css`\n      document.head.appendChild(css)\n    },\n  },\n  /** UEditor 富文本编辑器库 */\n  ueditor: {\n    id: 'ueditor-lib',\n    src: `${lib_host}/js/UEditor/ueditor.all.min.js`,\n    callback() {\n      // 动态加载 UEditor 的配置文件\n      const script = document.createElement('script')\n      script.src = `${lib_host}/js/UEditor/ueditor.config.js`\n      script.id = 'ueditor-config'\n      document.head.appendChild(script)\n    },\n  },\n} as const\n\n/** 支持的库名称类型 */\ntype LibName = keyof typeof libs\n\n/** 支持的库名称 */\nexport const LIB_NAME = Object.keys(libs) as LibName[]\n\n/**\n * 动态加载外部 JavaScript 库\n * 支持缓存机制，避免重复加载\n *\n * @param name 库名称，必须是预定义的库之一\n * @returns Promise<void> 加载完成后的 Promise\n *\n * @example\n * ```typescript\n * // 加载 Vditor 编辑器\n * await loadLib('vditor')\n *\n * // 加载 UEditor 编辑器\n * await loadLib('ueditor')\n * ```\n */\nexport default (name: LibName): Promise<void> => {\n  // 检查库是否存在\n  if (!libs[name]) return Promise.reject(new Error(`Library ${name} not found`))\n\n  // 如果库已经加载过，直接返回缓存的 Promise\n  if (!libs[name]._promise) {\n    libs[name]._promise = new Promise<void>((resolve, reject) => {\n      const { src, id, callback } = libs[name]\n\n      // 创建 script 标签\n      const script = document.createElement('script')\n      script.src = src\n      script.id = id\n\n      // 处理 ES 模块\n      if (src.endsWith('.mjs')) script.type = 'module'\n\n      // 加载成功回调\n      script.onload = () => {\n        // 执行库特定的初始化回调\n        if (callback) callback()\n\n        // 延迟 100ms 确保库完全初始化\n        setTimeout(() => {\n          resolve()\n        }, 100)\n      }\n\n      // 加载失败回调\n      script.onerror = () => {\n        reject(new Error(`Failed to load library ${name}`))\n      }\n\n      // 将 script 标签添加到页面\n      document.body.appendChild(script)\n    })\n  }\n\n  // 返回加载 Promise（使用非空断言，因为此时 _promise 一定存在）\n  return libs[name]._promise!\n}\n"
  },
  {
    "path": "web/console/src/utils/md5.ts",
    "content": "'use strict'\n\nfunction t(n, t) {\n  const r = (65535 & n) + (65535 & t)\n  return (((n >> 16) + (t >> 16) + (r >> 16)) << 16) | (65535 & r)\n}\n\nfunction r(n, t) {\n  return (n << t) | (n >>> (32 - t))\n}\n\nfunction e(n, e, o, u, c, f) {\n  return t(r(t(t(e, n), t(u, f)), c), o)\n}\n\nfunction o(n, t, r, o, u, c, f) {\n  return e((t & r) | (~t & o), n, t, u, c, f)\n}\n\nfunction u(n, t, r, o, u, c, f) {\n  return e((t & o) | (r & ~o), n, t, u, c, f)\n}\n\nfunction c(n, t, r, o, u, c, f) {\n  return e(t ^ r ^ o, n, t, u, c, f)\n}\n\nfunction f(n, t, r, o, u, c, f) {\n  return e(r ^ (t | ~o), n, t, u, c, f)\n}\n\nfunction i(n, r) {\n  (n[r >> 5] |= 128 << r % 32), (n[14 + (((r + 64) >>> 9) << 4)] = r)\n  let e\n  let i\n  let a\n  let d\n  let h\n  let l = 1732584193\n  let g = -271733879\n  let v = -1732584194\n  let m = 271733878\n  for (e = 0; e < n.length; e += 16) {\n    (i = l),\n    (a = g),\n    (d = v),\n    (h = m),\n    (g = f(\n      (g = f(\n        (g = f(\n          (g = f(\n            (g = c(\n              (g = c(\n                (g = c(\n                  (g = c(\n                    (g = u(\n                      (g = u(\n                        (g = u(\n                          (g = u(\n                            (g = o(\n                              (g = o(\n                                (g = o(\n                                  (g = o(\n                                    g,\n                                    (v = o(\n                                      v,\n                                      (m = o(\n                                        m,\n                                        (l = o(\n                                          l,\n                                          g,\n                                          v,\n                                          m,\n                                          n[e],\n                                          7,\n                                          -680876936,\n                                        )),\n                                        g,\n                                        v,\n                                        n[e + 1],\n                                        12,\n                                        -389564586,\n                                      )),\n                                      l,\n                                      g,\n                                      n[e + 2],\n                                      17,\n                                      606105819,\n                                    )),\n                                    m,\n                                    l,\n                                    n[e + 3],\n                                    22,\n                                    -1044525330,\n                                  )),\n                                  (v = o(\n                                    v,\n                                    (m = o(\n                                      m,\n                                      (l = o(\n                                        l,\n                                        g,\n                                        v,\n                                        m,\n                                        n[e + 4],\n                                        7,\n                                        -176418897,\n                                      )),\n                                      g,\n                                      v,\n                                      n[e + 5],\n                                      12,\n                                      1200080426,\n                                    )),\n                                    l,\n                                    g,\n                                    n[e + 6],\n                                    17,\n                                    -1473231341,\n                                  )),\n                                  m,\n                                  l,\n                                  n[e + 7],\n                                  22,\n                                  -45705983,\n                                )),\n                                (v = o(\n                                  v,\n                                  (m = o(\n                                    m,\n                                    (l = o(\n                                      l,\n                                      g,\n                                      v,\n                                      m,\n                                      n[e + 8],\n                                      7,\n                                      1770035416,\n                                    )),\n                                    g,\n                                    v,\n                                    n[e + 9],\n                                    12,\n                                    -1958414417,\n                                  )),\n                                  l,\n                                  g,\n                                  n[e + 10],\n                                  17,\n                                  -42063,\n                                )),\n                                m,\n                                l,\n                                n[e + 11],\n                                22,\n                                -1990404162,\n                              )),\n                              (v = o(\n                                v,\n                                (m = o(\n                                  m,\n                                  (l = o(\n                                    l,\n                                    g,\n                                    v,\n                                    m,\n                                    n[e + 12],\n                                    7,\n                                    1804603682,\n                                  )),\n                                  g,\n                                  v,\n                                  n[e + 13],\n                                  12,\n                                  -40341101,\n                                )),\n                                l,\n                                g,\n                                n[e + 14],\n                                17,\n                                -1502002290,\n                              )),\n                              m,\n                              l,\n                              n[e + 15],\n                              22,\n                              1236535329,\n                            )),\n                            (v = u(\n                              v,\n                              (m = u(\n                                m,\n                                (l = u(l, g, v, m, n[e + 1], 5, -165796510)),\n                                g,\n                                v,\n                                n[e + 6],\n                                9,\n                                -1069501632,\n                              )),\n                              l,\n                              g,\n                              n[e + 11],\n                              14,\n                              643717713,\n                            )),\n                            m,\n                            l,\n                            n[e],\n                            20,\n                            -373897302,\n                          )),\n                          (v = u(\n                            v,\n                            (m = u(\n                              m,\n                              (l = u(l, g, v, m, n[e + 5], 5, -701558691)),\n                              g,\n                              v,\n                              n[e + 10],\n                              9,\n                              38016083,\n                            )),\n                            l,\n                            g,\n                            n[e + 15],\n                            14,\n                            -660478335,\n                          )),\n                          m,\n                          l,\n                          n[e + 4],\n                          20,\n                          -405537848,\n                        )),\n                        (v = u(\n                          v,\n                          (m = u(\n                            m,\n                            (l = u(l, g, v, m, n[e + 9], 5, 568446438)),\n                            g,\n                            v,\n                            n[e + 14],\n                            9,\n                            -1019803690,\n                          )),\n                          l,\n                          g,\n                          n[e + 3],\n                          14,\n                          -187363961,\n                        )),\n                        m,\n                        l,\n                        n[e + 8],\n                        20,\n                        1163531501,\n                      )),\n                      (v = u(\n                        v,\n                        (m = u(\n                          m,\n                          (l = u(l, g, v, m, n[e + 13], 5, -1444681467)),\n                          g,\n                          v,\n                          n[e + 2],\n                          9,\n                          -51403784,\n                        )),\n                        l,\n                        g,\n                        n[e + 7],\n                        14,\n                        1735328473,\n                      )),\n                      m,\n                      l,\n                      n[e + 12],\n                      20,\n                      -1926607734,\n                    )),\n                    (v = c(\n                      v,\n                      (m = c(\n                        m,\n                        (l = c(l, g, v, m, n[e + 5], 4, -378558)),\n                        g,\n                        v,\n                        n[e + 8],\n                        11,\n                        -2022574463,\n                      )),\n                      l,\n                      g,\n                      n[e + 11],\n                      16,\n                      1839030562,\n                    )),\n                    m,\n                    l,\n                    n[e + 14],\n                    23,\n                    -35309556,\n                  )),\n                  (v = c(\n                    v,\n                    (m = c(\n                      m,\n                      (l = c(l, g, v, m, n[e + 1], 4, -1530992060)),\n                      g,\n                      v,\n                      n[e + 4],\n                      11,\n                      1272893353,\n                    )),\n                    l,\n                    g,\n                    n[e + 7],\n                    16,\n                    -155497632,\n                  )),\n                  m,\n                  l,\n                  n[e + 10],\n                  23,\n                  -1094730640,\n                )),\n                (v = c(\n                  v,\n                  (m = c(\n                    m,\n                    (l = c(l, g, v, m, n[e + 13], 4, 681279174)),\n                    g,\n                    v,\n                    n[e],\n                    11,\n                    -358537222,\n                  )),\n                  l,\n                  g,\n                  n[e + 3],\n                  16,\n                  -722521979,\n                )),\n                m,\n                l,\n                n[e + 6],\n                23,\n                76029189,\n              )),\n              (v = c(\n                v,\n                (m = c(\n                  m,\n                  (l = c(l, g, v, m, n[e + 9], 4, -640364487)),\n                  g,\n                  v,\n                  n[e + 12],\n                  11,\n                  -421815835,\n                )),\n                l,\n                g,\n                n[e + 15],\n                16,\n                530742520,\n              )),\n              m,\n              l,\n              n[e + 2],\n              23,\n              -995338651,\n            )),\n            (v = f(\n              v,\n              (m = f(\n                m,\n                (l = f(l, g, v, m, n[e], 6, -198630844)),\n                g,\n                v,\n                n[e + 7],\n                10,\n                1126891415,\n              )),\n              l,\n              g,\n              n[e + 14],\n              15,\n              -1416354905,\n            )),\n            m,\n            l,\n            n[e + 5],\n            21,\n            -57434055,\n          )),\n          (v = f(\n            v,\n            (m = f(\n              m,\n              (l = f(l, g, v, m, n[e + 12], 6, 1700485571)),\n              g,\n              v,\n              n[e + 3],\n              10,\n              -1894986606,\n            )),\n            l,\n            g,\n            n[e + 10],\n            15,\n            -1051523,\n          )),\n          m,\n          l,\n          n[e + 1],\n          21,\n          -2054922799,\n        )),\n        (v = f(\n          v,\n          (m = f(\n            m,\n            (l = f(l, g, v, m, n[e + 8], 6, 1873313359)),\n            g,\n            v,\n            n[e + 15],\n            10,\n            -30611744,\n          )),\n          l,\n          g,\n          n[e + 6],\n          15,\n          -1560198380,\n        )),\n        m,\n        l,\n        n[e + 13],\n        21,\n        1309151649,\n      )),\n      (v = f(\n        v,\n        (m = f(\n          m,\n          (l = f(l, g, v, m, n[e + 4], 6, -145523070)),\n          g,\n          v,\n          n[e + 11],\n          10,\n          -1120210379,\n        )),\n        l,\n        g,\n        n[e + 2],\n        15,\n        718787259,\n      )),\n      m,\n      l,\n      n[e + 9],\n      21,\n      -343485551,\n    )),\n    (l = t(l, i)),\n    (g = t(g, a)),\n    (v = t(v, d)),\n    (m = t(m, h))\n  }\n  return [l, g, v, m]\n}\n\nfunction a(n) {\n  let t\n  let r = ''\n  const e = 32 * n.length\n  for (t = 0; t < e; t += 8)\n    r += String.fromCharCode((n[t >> 5] >>> t % 32) & 255)\n  return r\n}\n\nfunction d(n) {\n  let t\n  const r = []\n  for (r[(n.length >> 2) - 1] = void 0, t = 0; t < r.length; t += 1) r[t] = 0\n  const e = 8 * n.length\n  for (t = 0; t < e; t += 8) r[t >> 5] |= (255 & n.charCodeAt(t / 8)) << t % 32\n  return r\n}\n\nfunction h(n) {\n  return a(i(d(n), 8 * n.length))\n}\n\nfunction l(n, t) {\n  let r\n  let e\n  let o = d(n)\n  const u = []\n  const c = []\n  for (\n    u[15] = c[15] = void 0, o.length > 16 && (o = i(o, 8 * n.length)), r = 0;\n    r < 16;\n    r += 1\n  )\n    (u[r] = 909522486 ^ o[r]), (c[r] = 1549556828 ^ o[r])\n  return (e = i(u.concat(d(t)), 512 + 8 * t.length)), a(i(c.concat(e), 640))\n}\n\nfunction g(n) {\n  let t\n  let r\n  let e = ''\n  for (r = 0; r < n.length; r += 1) {\n    (t = n.charCodeAt(r)),\n    (e\n        += '0123456789abcdef'.charAt((t >>> 4) & 15)\n        + '0123456789abcdef'.charAt(15 & t))\n  }\n  return e\n}\n\nfunction v(n) {\n  return unescape(encodeURIComponent(n))\n}\n\nfunction m(n) {\n  return h(v(n))\n}\n\nfunction p(n) {\n  return g(m(n))\n}\n\nfunction s(n, t) {\n  return l(v(n), v(t))\n}\n\nfunction C(n, t) {\n  return g(s(n, t))\n}\n\nfunction A(n: string, t?: string, r?: string) {\n  return t ? (r ? s(t, n) : C(t, n)) : r ? m(n) : p(n)\n}\nexport default A\n// # sourceMappingURL=md5.min.js.map\n"
  },
  {
    "path": "web/console/src/utils/moment.ts",
    "content": "/**\n * 时间工具函数集合\n * 提供常用的时间格式化、计算和转换功能\n */\n\n// 时间常量定义\nexport const ONE_SECOND_TIMESTAMP = 1000\nexport const ONE_MINUTE_TIMESTAMP = 60 * ONE_SECOND_TIMESTAMP\nexport const ONE_HOUR_TIMESTAMP = 60 * ONE_MINUTE_TIMESTAMP\nexport const ONE_DAY_TIMESTAMP = 24 * ONE_HOUR_TIMESTAMP\nexport const ONE_WEEK_TIMESTAMP = 7 * ONE_DAY_TIMESTAMP\n\n/** 星期文本映射 */\nconst WEEK_TEXT_LIST = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']\n\n/**\n * 获取日期的时间戳\n * @param str 日期字符串，支持 yyyy-MM-dd 格式\n * @returns 时间戳（毫秒）\n */\nexport const getTimeStamp = (str: string): number => {\n  return new Date(str.replace(/-/g, '/')).getTime()\n}\n\n/**\n * 日期格式化函数\n * 将 Date 对象或日期字符串转换为指定格式的字符串\n *\n * @param options 格式化选项\n * @param options.date 要格式化的日期，默认为当前时间\n * @param options.format 输出格式，默认为 'YYYY-MM-DD hh:mm:ss'\n * @param options.fillZero 是否自动补零，默认为 true\n * @returns 格式化后的日期字符串\n *\n * @example\n * ```typescript\n * // 格式化当前时间\n * getSimpleDateFormatString() // \"2024-01-15 14:30:25\"\n *\n * // 自定义格式\n * getSimpleDateFormatString({\n *   date: new Date(),\n *   format: 'YYYY年MM月DD日 hh时mm分ss秒'\n * })\n *\n * // 不补零\n * getSimpleDateFormatString({\n *   date: '2024-1-5',\n *   fillZero: false\n * }) // \"2024-1-5 14:30:25\"\n * ```\n */\nexport const getSimpleDateFormatString = ({\n  date = new Date(),\n  format = 'YYYY-MM-DD hh:mm:ss',\n  fillZero = true,\n}: {\n  date?: Date | string | number\n  format?: string\n  fillZero?: boolean\n} = {}): string => {\n  // 处理输入参数\n  let targetDate: Date\n  if (!date) {\n    targetDate = new Date()\n  } else if (typeof date === 'string') {\n    targetDate = new Date(date.replace(/-/gm, '/'))\n  } else {\n    targetDate = new Date(date)\n  }\n\n  // 提取日期组件\n  const year = targetDate.getFullYear().toString()\n  const month = (targetDate.getMonth() + 1).toString()\n  const day = targetDate.getDate().toString()\n  const hour = targetDate.getHours().toString()\n  const minute = targetDate.getMinutes().toString()\n  const second = targetDate.getSeconds().toString()\n  const week = targetDate.getDay()\n\n  // 格式化字符串\n  return format\n    .replace('YYYY', year)\n    .replace('YY', year.substring(2))\n    .replace('MM', month.length === 1 && fillZero ? `0${month}` : month)\n    .replace('DD', day.length === 1 && fillZero ? `0${day}` : day)\n    .replace('hh', hour.length === 1 && fillZero ? `0${hour}` : hour)\n    .replace('mm', minute.length === 1 && fillZero ? `0${minute}` : minute)\n    .replace('ss', second.length === 1 && fillZero ? `0${second}` : second)\n    .replace('week', WEEK_TEXT_LIST[week] || '')\n}\n\n/**\n * 获取当前日期字符串\n * @param format 输出格式\n * @returns 格式化后的当前日期字符串\n */\nexport const getCurrentDate = (format: string): string => {\n  return getSimpleDateFormatString({ date: new Date(), format })\n}\n\n/**\n * 获取指定天数前的日期\n * @param day 天数\n * @param format 输出格式\n * @returns 格式化后的日期字符串\n */\nexport const getLastTimeAsDay = (day: number, format: string): string => {\n  const date = new Date()\n  date.setDate(date.getDate() - day)\n  return getSimpleDateFormatString({ date, format })\n}\n\n/**\n * 获取指定周数前的日期\n * @param week 周数\n * @param format 输出格式\n * @returns 格式化后的日期字符串\n */\nexport const getLastTimeAsWeek = (week: number, format: string): string => {\n  const date = new Date()\n  date.setDate(date.getDate() - 7 * week)\n  return getSimpleDateFormatString({ date, format })\n}\n\n/**\n * 获取指定月数前的日期\n * @param month 月数\n * @param format 输出格式\n * @returns 格式化后的日期字符串\n */\nexport const getLastTimeAsMonth = (month: number, format: string): string => {\n  const date = new Date()\n  date.setMonth(date.getMonth() - month)\n  return getSimpleDateFormatString({ date, format })\n}\n\n/**\n * 获取当前月份第一天\n * @param format 输出格式\n * @returns 格式化后的日期字符串\n */\nexport const getCurrentMonth = (format: string): string => {\n  const date = new Date()\n  date.setDate(1)\n  return getSimpleDateFormatString({ date, format })\n}\n\n/**\n * 获取当前季度第一天\n * @param format 输出格式\n * @returns 格式化后的日期字符串\n */\nexport const getCurrentQuarter = (format: string): string => {\n  const date = new Date()\n  date.setMonth(Math.floor(date.getMonth() / 3) * 3)\n  date.setDate(1)\n  return getSimpleDateFormatString({ date, format })\n}\n\n/**\n * 获取当前年份第一天\n * @param format 输出格式\n * @returns 格式化后的日期字符串\n */\nexport const getCurrentYear = (format: string): string => {\n  const date = new Date()\n  date.setMonth(0)\n  date.setDate(1)\n  return getSimpleDateFormatString({ date, format })\n}\n\n/**\n * 获取指定日期范围内的所有日期\n * @param start 开始日期字符串\n * @param end 结束日期字符串\n * @param format 输出格式，默认为 'YYYY-MM-DD'\n * @returns 日期字符串数组\n */\nexport const getDatesInRange = (start: string, end: string, format = 'YYYY-MM-DD'): string[] => {\n  const startDate = new Date(start.replace(/-/g, '/'))\n  const endDate = new Date(end.replace(/-/g, '/'))\n  const dates: string[] = []\n\n  // 遍历日期范围，生成所有日期\n  for (let date = new Date(startDate); date <= endDate; date.setDate(date.getDate() + 1)) {\n    dates.push(getSimpleDateFormatString({ date: new Date(date), format }))\n  }\n\n  return dates\n}\n\n/**\n * 获取相对时间描述\n * 将时间戳转换为\"xx前\"或\"昨天\"等相对时间描述\n *\n * @param time 时间戳或日期字符串\n * @returns 相对时间描述字符串，如果超过1天则返回具体日期\n */\nexport const getFormatTimeStamp = (time: number | string): string => {\n  const date = new Date(time)\n  const interval = Math.ceil((new Date().getTime() - date.getTime()) / 1000) || 1\n\n  // 时间单位配置\n  const timeUnits = [\n    { seconds: 86400, label: '天' },\n    { seconds: 3600, label: '小时' },\n    { seconds: 60, label: '分钟' },\n    { seconds: 1, label: '秒' },\n  ]\n\n  // 计算相对时间\n  for (const unit of timeUnits) {\n    const tempResult = Math.floor(interval / unit.seconds)\n    if (tempResult > 0) {\n      // 特殊处理天数\n      if (unit.seconds === 86400) {\n        if (tempResult === 1) return '昨天'\n        return getSimpleDateFormatString({ date, format: 'YYYY-MM-DD hh:mm' })\n      }\n      return `${tempResult}${unit.label}前`\n    }\n  }\n\n  // 如果时间差小于1秒，返回\"刚刚\"\n  return '刚刚'\n}\n\n/**\n * 获取时间戳\n * @param dateStr 日期字符串，为空时返回当前时间戳\n * @returns 时间戳（毫秒）\n */\nexport const getDateTimestamp = (dateStr = ''): number => {\n  if (!dateStr) return new Date().getTime()\n\n  // 处理数字字符串和日期字符串\n  const normalizedDateStr = Number.isNaN(Number(dateStr)) ? dateStr.replace(/-/g, '/') : dateStr\n\n  return new Date(normalizedDateStr).getTime()\n}\n"
  },
  {
    "path": "web/console/src/utils/request/axios.ts",
    "content": "import axios, { type AxiosResponse } from 'axios'\nimport { generateSignParams } from './signature'\nimport md5 from '@/utils/md5'\nimport { qyy_host } from '@/utils/config'\n\nconst service = axios.create({\n  baseURL: '',\n})\n\nservice.interceptors.request.use(\n  (config) => {\n    const authkey = 'c3a39e4eeacf4542d6a488e19037fa45'\n    const platform = 'web'\n    const createtime = Math.floor(Date.now() / 1000)\n    const token = md5(authkey + createtime)\n    config.params = config.params || {}\n\n    const access_token = config.params.access_token || localStorage.getItem('access_token') || ''\n    if (access_token)\n      config.headers.set('Authorization', `Bearer ${access_token}`)\n\n    if (config.url.includes(qyy_host)) {\n      config.headers.set('token', token)\n      config.headers.set('platform', platform)\n      config.headers.set('createtime', createtime)\n      if (config.url.includes('sendcode'))\n        config.params = generateSignParams(config.data)\n    }\n\n    if (config.extra_headers && Object.keys(config.extra_headers).length) {\n      Object.keys(config.extra_headers).forEach((key) => {\n        config.headers.set(key, config.extra_headers[key])\n      })\n    }\n\n    return config\n  },\n  (error) => {\n    return Promise.reject(error.response)\n  },\n)\n\nservice.interceptors.response.use(\n  (response: AxiosResponse): AxiosResponse => {\n    if ([200, 201, 204].includes(response.status))\n      return response\n\n    throw new Error(response.status.toString())\n  },\n  (error) => {\n    return Promise.reject(error)\n  },\n)\n\nexport default service\n"
  },
  {
    "path": "web/console/src/utils/request/blob.ts",
    "content": "import axios from 'axios'\nexport default function downFileToblob(url) {\n  return axios({\n    url,\n    methods: 'get',\n    headers: {\n      'Cache-Control': 'no-cache',\n    },\n    responseType: 'blob',\n  }).then((res) => {\n    if (res.status !== 200)\n      return Promise.reject('request Blob fail!')\n    return res.data\n  })\n}\n"
  },
  {
    "path": "web/console/src/utils/request/code.ts",
    "content": "export const RESPONSE_CODE_SUCCESS = 0\nexport const RESPONSE_CODE_PARAM_ERROR = 1\nexport const RESPONSE_CODE_DATABASE_ERROR = 2\nexport const RESPONSE_CODE_NETWORK_ERROR = 3\nexport const RESPONSE_CODE_SYSTEM_ERROR = 4\nexport const RESPONSE_CODE_AUTH_ERROR = 5\nexport const RESPONSE_CODE_NOT_FOUND_ERROR = 6\nexport const RESPONSE_CODE_UNAUTHORIZED_ERROR = 7\nexport const RESPONSE_CODE_FILE_ERROR = 8\nexport const RESPONSE_CODE_FORBIDDEN_ERROR = 9\nexport const RESPONSE_CODE_AGENT_ERROR = 10\nexport const RESPONSE_CODE_TOKEN_EXPIRED_ERROR = 11\n\nexport const RESPONSE_CODE_MESSAGE_MAP = new Map([\n  [RESPONSE_CODE_SUCCESS, 'response_code.success'],\n  [RESPONSE_CODE_PARAM_ERROR, 'response_code.param_error'],\n  [RESPONSE_CODE_DATABASE_ERROR, 'response_code.database_error'],\n  [RESPONSE_CODE_NETWORK_ERROR, 'response_code.network_error'],\n  [RESPONSE_CODE_SYSTEM_ERROR, 'response_code.system_error'],\n  [RESPONSE_CODE_AUTH_ERROR, 'response_code.auth_error'],\n  [RESPONSE_CODE_NOT_FOUND_ERROR, 'response_code.not_found_error'],\n  [RESPONSE_CODE_UNAUTHORIZED_ERROR, 'response_code.unauthorized_error'],\n  [RESPONSE_CODE_FILE_ERROR, 'response_code.file_error'],\n  [RESPONSE_CODE_FORBIDDEN_ERROR, 'response_code.forbidden_error'],\n  [RESPONSE_CODE_AGENT_ERROR, 'response_code.agent_error'],\n  [RESPONSE_CODE_TOKEN_EXPIRED_ERROR, 'response_code.token_expired_error'],\n])\n\nexport const RESPONSE_MESSAGE_MAP = new Map([\n  ['unauthorized: user not found', 'response_message.user_not_found'],\n  ['invalid or expired verification code', 'response_code.verification_code_error'],\n  [\n    'unauthorized: username or password is incorrect',\n    'response_message.username_or_password_is_incorrect',\n  ],\n])\n"
  },
  {
    "path": "web/console/src/utils/request/helper.ts",
    "content": "export const stream = result => {\n  const xhr = result.event.target\n  const { responseText } = xhr\n  return responseText\n    .split('data: ')\n    .map(text => {\n      if (!text) return ''\n      const lastIndex = text.lastIndexOf('}')\n      let chunk = text\n      if (lastIndex !== -1) chunk = text.slice(0, lastIndex + 1)\n      try {\n        return JSON.parse(chunk)\n      } catch (error) {\n        return ''\n      }\n    })\n    .filter(item => item)\n}\n\nexport const formatNormal = (list): { text: string } => {\n  return list.reduce(\n    (result, item) => {\n      Object.assign(result, item)\n      result.text += item.answer || ''\n      if (item.event === 'message_replace') result.text = item.answer\n\n      return result\n    },\n    { text: '' }\n  )\n}\n"
  },
  {
    "path": "web/console/src/utils/request/index.ts",
    "content": "import type { AxiosProgressEvent, AxiosResponse, GenericAbortSignal } from 'axios'\nimport { ElMessage } from 'element-plus'\nimport request from './axios'\nimport {\n  RESPONSE_CODE_MESSAGE_MAP,\n  RESPONSE_CODE_NETWORK_ERROR,\n  RESPONSE_CODE_TOKEN_EXPIRED_ERROR,\n  RESPONSE_CODE_UNAUTHORIZED_ERROR,\n  RESPONSE_MESSAGE_MAP,\n} from './code'\nimport { api_host as default_api_host, pathname as default_pathname } from '@/utils/config'\nimport eventBus from '@/utils/event-bus'\nimport { useDefaultUser } from '@/stores/modules/user'\n\nexport interface HttpOption {\n  url: string\n  data?: any\n  method?: string\n  headers?: any\n  responseType?: any\n  onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void\n  signal?: GenericAbortSignal\n  hideError?: boolean\n  beforeRequest?: () => void\n  afterRequest?: () => void\n}\n\nexport interface Response<T = any> {\n  data: T\n  message: string | null\n  code: number | string\n  response: any\n  config: any\n}\n\nfunction http<T = any>({\n  url,\n  data,\n  method,\n  pathname,\n  api_host,\n  headers,\n  extra_headers,\n  onDownloadProgress,\n  signal,\n  hideError,\n  beforeRequest,\n  afterRequest,\n  responseType,\n  isStream,\n  ...config\n}: HttpOption) {\n  hideError = !!+hideError\n  const successHandler = (res: AxiosResponse<Response<T>>) => {\n    if (responseType === 'blob') return res\n    if (url.includes('console/api')) {\n      return res.data\n    }\n\n    if (res.data.code === 0 || typeof res.data === 'string') return res.data\n    if (!hideError)\n      ElMessage.warning(\n        window.$t(\n          RESPONSE_CODE_MESSAGE_MAP.get(+res.data.code) ||\n            RESPONSE_MESSAGE_MAP.get(res.data.message) ||\n            res.data.message\n        )\n      )\n    return Promise.reject(res.data)\n  }\n\n  const failHandler = (error: Response<Error>) => {\n    afterRequest?.()\n    const response = error.response || {}\n    let response_data = response.data || {}\n    if (response_data.error) response_data = response_data.error\n    let message =\n      RESPONSE_MESSAGE_MAP.get(response_data.message) ||\n      RESPONSE_CODE_MESSAGE_MAP.get(+response_data.code) ||\n      response_data.message ||\n      error.message ||\n      RESPONSE_CODE_MESSAGE_MAP.get(RESPONSE_CODE_NETWORK_ERROR)\n    const error_config = {\n      code: response_data.code,\n      message,\n      origin_message: response_data.message,\n    }\n    const user_info = useDefaultUser()\n    const is_invalid_user = !user_info.access_token || !user_info.eid\n    if (\n      !/\\/login/.test(location.href) &&\n      ([RESPONSE_CODE_TOKEN_EXPIRED_ERROR, RESPONSE_CODE_UNAUTHORIZED_ERROR].includes(\n        error_config.code\n      ) ||\n        is_invalid_user)\n    )\n      eventBus.emit('user-login-expired')\n\n    if (error.config.url.includes('console/api')) {\n      if (!hideError) {\n        if (error_config.origin_message.includes('Did not find openai_api_key'))\n          message = '嵌入模型不可以用，切换嵌入模型或更换可用的API KEY'\n        error_config.message = message\n        ElMessage.warning(message)\n      }\n      // throw new Error(error_config)\n      return Promise.reject(error_config)\n    }\n    if (!hideError && message !== 'canceled') ElMessage.warning(window.$t(message))\n    // throw new Error(error_config)\n    return Promise.reject(error_config)\n  }\n\n  if (isStream) {\n    const origin_onDownloadProgress = onDownloadProgress\n    onDownloadProgress = (progressEvent = {}) => {\n      const { event: { target: { responseText = '' } = {} } = {} } = progressEvent\n      let chunks = []\n      let intact_content = ''\n      let intact_reasoning_content = ''\n      if (responseText) {\n        chunks = responseText\n          .split(/data\\:\\s*/g)\n          .filter(text => text)\n          .map(text => {\n            try {\n              // 找到最后一个完整的JSON对象\n              const lastIndex = text.lastIndexOf('}')\n              if (lastIndex !== -1) {\n                const chunk = text.slice(0, lastIndex + 1)\n                return JSON.parse(chunk)\n              }\n              return null\n            } catch (error) {\n              console.log(text, error)\n              return null\n            }\n          })\n          .filter(item => item)\n          .map((item = {}) => {\n            const { delta = {} } = (item.choices || [])[0] || {}\n            item.content_id = item.content_id || item.id || delta.content_id || delta.id || ''\n            item.content = delta.content || ''\n            item.reasoning_content = delta.reasoning_content || ''\n            item.role = delta.role || ''\n            intact_content += item.content\n            intact_reasoning_content += item.reasoning_content\n            item.intact_content = intact_content\n            item.intact_reasoning_content = intact_reasoning_content\n            return item\n          })\n        console.log(chunks)\n      }\n      origin_onDownloadProgress({ progressEvent, chunks, intact_content, intact_reasoning_content })\n    }\n  }\n\n  beforeRequest?.()\n\n  method = method || 'GET'\n  const params = Object.assign(typeof data === 'function' ? data() : (data ?? {}), {})\n\n  url = url.replace(/\\$\\{[^}]+\\}/g, (...args) => {\n    const key = args[0].replace(/\\$\\{|\\}/g, '')\n    const value = params[key] || ''\n    delete params[key]\n    return value\n  })\n  url = `${api_host || default_api_host}${pathname || default_pathname}${url}`\n  switch (method) {\n    case 'POST':\n      return request\n        .post(url, params, { headers, extra_headers, signal, onDownloadProgress, responseType })\n        .then(successHandler, failHandler)\n    case 'PUT':\n      return request\n        .put(url, params, { headers, extra_headers, signal, onDownloadProgress, responseType })\n        .then(successHandler, failHandler)\n    case 'PATCH':\n      return request\n        .patch(url, params, { headers, extra_headers, signal, onDownloadProgress, responseType })\n        .then(successHandler, failHandler)\n    case 'DELETE':\n      return request.delete(url, { data }).then(successHandler, failHandler)\n    default:\n      return request\n        .get(url, { params, extra_headers, signal, onDownloadProgress, responseType })\n        .then(successHandler, failHandler)\n  }\n}\n\nexport function get<T = any>({\n  url,\n  data,\n  method = 'GET',\n  onDownloadProgress,\n  signal,\n  hideError,\n  beforeRequest,\n  afterRequest,\n  responseType,\n  ...config\n}: HttpOption): Promise<Response<T>> {\n  return http<T>({\n    url,\n    method,\n    data,\n    onDownloadProgress,\n    signal,\n    hideError,\n    beforeRequest,\n    afterRequest,\n    responseType,\n    ...config,\n  })\n}\n\nexport function post<T = any>({\n  url,\n  data,\n  method = 'POST',\n  headers,\n  onDownloadProgress,\n  signal,\n  hideError,\n  beforeRequest,\n  afterRequest,\n  responseType,\n  ...config\n}: HttpOption): Promise<Response<T>> {\n  return http<T>({\n    url,\n    method,\n    data,\n    headers,\n    onDownloadProgress,\n    signal,\n    hideError,\n    beforeRequest,\n    afterRequest,\n    responseType,\n    ...config,\n  })\n}\n\nexport function del<T = any>({\n  url,\n  data,\n  method = 'DELETE',\n  headers,\n  onDownloadProgress,\n  signal,\n  hideError,\n  beforeRequest,\n  afterRequest,\n  responseType,\n  ...config\n}: HttpOption): Promise<Response<T>> {\n  return http<T>({\n    url,\n    method,\n    data,\n    headers,\n    onDownloadProgress,\n    signal,\n    hideError,\n    beforeRequest,\n    afterRequest,\n    responseType,\n    ...config,\n  })\n}\nexport function patch<T = any>({\n  url,\n  data,\n  method = 'PATCH',\n  headers,\n  onDownloadProgress,\n  signal,\n  hideError,\n  beforeRequest,\n  afterRequest,\n  responseType,\n  ...config\n}: HttpOption): Promise<Response<T>> {\n  return http<T>({\n    url,\n    method,\n    data,\n    headers,\n    onDownloadProgress,\n    signal,\n    hideError,\n    beforeRequest,\n    afterRequest,\n    responseType,\n    ...config,\n  })\n}\n\nexport function put<T = any>({\n  url,\n  data,\n  method = 'PUT',\n  headers,\n  onDownloadProgress,\n  signal,\n  hideError,\n  beforeRequest,\n  afterRequest,\n  responseType,\n  ...config\n}: HttpOption): Promise<Response<T>> {\n  return http<T>({\n    url,\n    method,\n    data,\n    headers,\n    onDownloadProgress,\n    signal,\n    hideError,\n    beforeRequest,\n    afterRequest,\n    responseType,\n    ...config,\n  })\n}\n\nexport default post\n"
  },
  {
    "path": "web/console/src/utils/request/signature.ts",
    "content": "import { serialize } from '@/utils'\n\nimport md5 from '@/utils/md5'\n\nexport function generateSignParams(params = {}) {\n  const authkey = 'c3a39e4eeacf4542d6a488e19037fa45'\n  params = Object.assign({}, params, {\n    timestamp: Math.floor(Date.now() / 1000),\n    platform: 'web',\n  })\n\n  const strForSign = serialize(params)\n  const sign = md5(strForSign + authkey)\n\n  return {\n    sign,\n    method: 'md5',\n    ...params,\n  }\n}\n"
  },
  {
    "path": "web/console/src/utils/timer-manager.ts",
    "content": "/**\n * 定时器管理工具\n * 用于统一管理定时器，防止内存泄漏\n */\n\nexport type TimerType = ReturnType<typeof setTimeout> | ReturnType<typeof setInterval>\n\nexport interface TimerInfo {\n  id: TimerType\n  type: 'timeout' | 'interval'\n  callback: () => void\n  delay: number\n  createdAt: number\n}\n\n/**\n * 定时器管理器\n */\nexport class TimerManager {\n  private timers: Map<string, TimerInfo> = new Map()\n\n  private timerIdCounter = 0\n\n  /**\n   * 创建定时器\n   * @param callback 回调函数\n   * @param delay 延迟时间\n   * @param type 定时器类型\n   * @param key 可选的标识符\n   * @returns 定时器ID\n   */\n  setTimeout(callback: () => void, delay: number, key?: string): string {\n    const timerKey = key || `timer_${++this.timerIdCounter}`\n\n    // 如果已存在同名定时器，先清理\n    this.clearTimer(timerKey)\n\n    const id = setTimeout(() => {\n      callback()\n      this.timers.delete(timerKey)\n    }, delay)\n\n    this.timers.set(timerKey, {\n      id,\n      type: 'timeout',\n      callback,\n      delay,\n      createdAt: Date.now(),\n    })\n\n    return timerKey\n  }\n\n  /**\n   * 创建间隔定时器\n   * @param callback 回调函数\n   * @param delay 间隔时间\n   * @param key 可选的标识符\n   * @returns 定时器ID\n   */\n  setInterval(callback: () => void, delay: number, key?: string): string {\n    const timerKey = key || `interval_${++this.timerIdCounter}`\n\n    // 如果已存在同名定时器，先清理\n    this.clearTimer(timerKey)\n\n    const id = setInterval(callback, delay)\n\n    this.timers.set(timerKey, {\n      id,\n      type: 'interval',\n      callback,\n      delay,\n      createdAt: Date.now(),\n    })\n\n    return timerKey\n  }\n\n  /**\n   * 清理指定定时器\n   * @param key 定时器标识符\n   */\n  clearTimer(key: string): boolean {\n    const timer = this.timers.get(key)\n    if (timer) {\n      if (timer.type === 'timeout') {\n        clearTimeout(timer.id)\n      } else {\n        clearInterval(timer.id)\n      }\n      this.timers.delete(key)\n      return true\n    }\n    return false\n  }\n\n  /**\n   * 清理所有定时器\n   */\n  clearAll(): void {\n    this.timers.forEach(timer => {\n      if (timer.type === 'timeout') {\n        clearTimeout(timer.id)\n      } else {\n        clearInterval(timer.id)\n      }\n    })\n    this.timers.clear()\n  }\n\n  /**\n   * 获取定时器信息\n   * @param key 定时器标识符\n   */\n  getTimer(key: string): TimerInfo | undefined {\n    return this.timers.get(key)\n  }\n\n  /**\n   * 获取所有定时器\n   */\n  getAllTimers(): Map<string, TimerInfo> {\n    return new Map(this.timers)\n  }\n\n  /**\n   * 检查定时器是否存在\n   * @param key 定时器标识符\n   */\n  hasTimer(key: string): boolean {\n    return this.timers.has(key)\n  }\n\n  /**\n   * 获取定时器数量\n   */\n  getTimerCount(): number {\n    return this.timers.size\n  }\n\n  /**\n   * 清理过期的定时器（超过指定时间的timeout）\n   * @param maxAge 最大存活时间（毫秒）\n   */\n  clearExpiredTimers(maxAge: number = 30000): number {\n    const now = Date.now()\n    let clearedCount = 0\n\n    this.timers.forEach((timer, key) => {\n      if (timer.type === 'timeout' && now - timer.createdAt > maxAge) {\n        this.clearTimer(key)\n        clearedCount++\n      }\n    })\n\n    return clearedCount\n  }\n}\n\n/**\n * 全局定时器管理器实例\n */\nexport const globalTimerManager = new TimerManager()\n\n/**\n * Vue 组合式函数：在组件卸载时自动清理定时器\n */\nexport function useTimerManager() {\n  const manager = new TimerManager()\n\n  // 在组件卸载时清理所有定时器\n  if (typeof window !== 'undefined') {\n    // 动态导入 Vue 以避免 SSR 问题\n    import('vue')\n      .then(({ onUnmounted }) => {\n        onUnmounted(() => {\n          manager.clearAll()\n        })\n      })\n      .catch(() => {\n        // 如果 Vue 不可用，使用页面卸载事件作为备选\n        window.addEventListener('beforeunload', () => {\n          manager.clearAll()\n        })\n      })\n  }\n\n  return {\n    setTimeout: manager.setTimeout.bind(manager),\n    setInterval: manager.setInterval.bind(manager),\n    clearTimer: manager.clearTimer.bind(manager),\n    clearAll: manager.clearAll.bind(manager),\n    getTimer: manager.getTimer.bind(manager),\n    hasTimer: manager.hasTimer.bind(manager),\n    getTimerCount: manager.getTimerCount.bind(manager),\n  }\n}\n\n// 导出 Vue 相关类型（如果可用）\ndeclare global {\n  interface Window {\n    __TIMER_MANAGER_DEBUG__?: boolean\n  }\n}\n\n// 开发环境下的调试功能\nif (process.env.NODE_ENV === 'development') {\n  window.__TIMER_MANAGER_DEBUG__ = true\n\n  // 定期检查是否有泄漏的定时器\n  setInterval(() => {\n    const count = globalTimerManager.getTimerCount()\n    if (count > 100) {\n      console.warn(`[TimerManager] 检测到大量定时器 (${count})，可能存在内存泄漏`)\n    }\n  }, 30000)\n}\n"
  },
  {
    "path": "web/console/src/utils/url.ts",
    "content": "export const isUrl = (str: string) => {\n  try {\n    const url = new URL(str)\n    return url.protocol === 'http:' || url.protocol === 'https:'\n  } catch (e) {\n    return false\n  }\n}\n"
  },
  {
    "path": "web/console/src/utils/version.ts",
    "content": "import { createApp, h } from 'vue'\nimport { ElMessageBox, ElTooltip, ElButton, ElIcon } from 'element-plus'\nimport { WarningFilled } from '@element-plus/icons-vue'\nimport ServiceDialog from '@/components/ServiceDialog/index.vue'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\n\nlet serviceMountNode: HTMLElement | null = null\n\nexport interface VersionOptions {\n  // 模块\n  module: string\n  // 数量\n  count?: number\n  content: string\n  mode?: 'dialog' | 'tooltip' // 新增模式选择\n  effect?: 'dark' | 'light' // tooltip 主题\n  placement?:\n    | 'top'\n    | 'top-start'\n    | 'top-end'\n    | 'bottom'\n    | 'bottom-start'\n    | 'bottom-end'\n    | 'left'\n    | 'left-start'\n    | 'left-end'\n    | 'right'\n    | 'right-start'\n    | 'right-end' // tooltip 位置\n  onClick?: () => void\n}\n\n/**\n * 显示服务弹窗\n * @param content 提示内容\n */\nconst showServiceDialog = () => {\n  if (serviceMountNode) {\n    serviceMountNode.remove()\n    serviceMountNode = null\n  }\n\n  serviceMountNode = document.createElement('div')\n  document.body.appendChild(serviceMountNode)\n\n  const serviceApp = createApp(ServiceDialog, {\n    visible: true,\n    title: window.$t('version.scan_consult'),\n    'onUpdate:visible': (visible: boolean) => {\n      if (!visible && serviceMountNode) {\n        setTimeout(() => {\n          if (serviceMountNode) {\n            serviceMountNode.remove()\n            serviceMountNode = null\n          }\n        }, 300)\n      }\n    }\n  })\n\n  // 设置全局$t函数\n  serviceApp.config.globalProperties.$t = window.$t || ((key) => key)\n\n  serviceApp.mount(serviceMountNode)\n}\n\n/**\n * 显示升级提示弹窗\n * @param content 提示内容\n */\nconst showUpgradeDialog = (content: string) => {\n  ElMessageBox.confirm(content, window.$t('version.upgrade_tip'), {\n    confirmButtonText: window.$t('action_upgrade'),\n    cancelButtonText: window.$t('action_cancel'),\n    customClass: 'version-upgrade-dialog',\n    type: 'warning',\n    center: true\n  })\n    .then(() => {\n      // 点击升级时显示服务弹窗\n      showServiceDialog()\n    })\n    .catch(() => {\n      // 用户取消\n      console.log('用户取消了升级')\n    })\n}\n\n/**\n * 创建带有升级按钮的 tooltip 内容\n * @param content 基础内容\n * @returns VNode\n */\nconst createTooltipContent = (content?: string) => {\n  const baseText = content || window.$t('version.not_support')\n\n  return h('div', { class: 'version-tooltip-content' }, [\n    h(ElIcon, { color: '#F0A105', size: '16px' }, h(WarningFilled, {})),\n    h('div', {}, baseText),\n    h(\n      ElButton,\n      {\n        type: 'primary',\n        size: 'small',\n        link: true,\n        onClick: () => showServiceDialog()\n      },\n      () => window.$t('version.upgrade')\n    )\n  ])\n}\n\n/**\n * 显示版本限制 tooltip\n * @param el 目标元素\n * @param content 提示内容\n * @param options tooltip 选项\n */\nconst showVersionTooltip = (\n  el: HTMLElement,\n  content: string,\n  options: { effect?: string; placement?: string } = {}\n) => {\n  // 已存在就不创建\n  if (el._versionTooltip) return\n\n  // 如果是字符串且需要升级按钮，创建带按钮的内容\n  const finalContent = createTooltipContent(content)\n\n  let hideTimer: NodeJS.Timeout | null = null\n\n  // 挂载到元素\n  const mountNode = document.createElement('div')\n  mountNode.style.cssText =\n    'position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: auto; z-index: 99; '\n\n  // 确保元素有相对定位\n  if (getComputedStyle(el).position === 'static') {\n    el.style.position = 'relative'\n  }\n\n  // 创建 tooltip 实例\n  const tooltipApp = createApp({\n    render() {\n      return h(\n        ElTooltip,\n        {\n          placement: options.placement || 'top-end',\n          effect: options.effect || 'light',\n          trigger: 'manual',\n          visible: true\n        },\n        {\n          default: () => h('span', { style: 'display: inline-block; width: 100%; height: 100%;' }),\n          content: () => finalContent\n        }\n      )\n    }\n  })\n\n  el.appendChild(mountNode)\n  tooltipApp.mount(mountNode)\n\n  // 保存引用以便清理\n  el._versionTooltip = {\n    app: tooltipApp,\n    mountNode,\n    hideTimer,\n    destroy() {\n      if (hideTimer) {\n        clearTimeout(hideTimer)\n      }\n      tooltipApp.unmount()\n      if (mountNode.parentNode) {\n        mountNode.parentNode.removeChild(mountNode)\n      }\n    }\n  }\n}\n\n/**\n * 检查版本权限\n * @param module 模块\n * @param count 数量\n * @returns boolean 是否满足版本要求\n */\nexport const checkVersion = (module: string, count?: number) => {\n  const enterpriseStore = useEnterpriseStore()\n  const features = enterpriseStore.version.features\n  if (module in features) {\n    const feature = features[module]\n    return feature.max > (count || 0)\n  }\n  return true\n}\n\n/**\n * 统一的版本权限检查函数\n * @param options 版本检查选项\n * @param el 目标元素（tooltip 模式时需要）\n * @returns boolean 是否通过版本检查\n */\nexport const checkVersionPermission = (options: VersionOptions, el?: HTMLElement) => {\n  const { module, count, content, mode = 'dialog', effect, placement, onClick } = options\n\n  if (!checkVersion(module, count)) {\n    if (mode === 'tooltip' && el) {\n      // 显示 tooltip 提示\n      showVersionTooltip(el, content, { effect, placement })\n    } else {\n      // 显示升级提示弹窗\n      showUpgradeDialog(typeof content === 'string' ? content : window.$t('version.not_support'))\n    }\n    return false\n  }\n\n  // 如果版本检查通过，执行回调\n  if (onClick) {\n    onClick()\n  }\n\n  return true\n}\n\n/**\n * 导出 tooltip 相关函数供外部使用\n */\nexport { showVersionTooltip }\n"
  },
  {
    "path": "web/console/src/utils/wecom.ts",
    "content": "import { loadScript, sleep } from '@/utils'\nimport wecomApi from '@/api/modules/wecom'\n\nconst userAgent = navigator.userAgent.toLowerCase()\nconst isInQw = /wxwork|micromessenger/im.test(userAgent)\n\n/*\nhttp://ask.dcloud.net.cn/article/36007\n1 测试时，可以将debug设置为true，可以看到日志信息\n2 签名建议在服务端，签名的url必须和当前页面的url一致，否则自定义分享无效\n3 每个页面都需要单独初始化配置，即jweixin.config()\n4 在公众号后台设置安全域名\n*/\nconst openTagList = ['wx-open-launch-weapp']\n\nconst jsApiList = ['agentConfig', 'openEnterpriseChat', 'selectEnterpriseContact']\n\n// 企微需要用到\nconst agentApiList = [\n  'getContext',\n  'selectExternalContact',\n  'openUserProfile',\n  'sendChatMessage',\n  'getCurExternalContact',\n  'getCurExternalChat',\n  'shareAppMessage',\n  'openEnterpriseChat',\n  'openAppManage',\n  'openAppPurchase',\n  'openThirdAppServiceChat',\n  'shareAppMessage',\n  'shareWechatMessage',\n  'shareToExternalContact',\n  'shareToExternalChat',\n  'shareToExternalMoments'\n]\n\nconst jssdk = {\n  loadScript() {\n    return sleep(2).then(() => {\n      return Promise.all([\n        loadScript('//res.wx.qq.com/open/js/jweixin-1.2.0.js'),\n        loadScript('//open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js')\n      ])\n    })\n  },\n  /**\n   * 初始化sdk配置\n   */\n  getConfig() {\n    const { origin, pathname, search } = window.location\n    const url = `${origin}${pathname}${search}`\n    return wecomApi.jssdk_config(import.meta.env.VITE_GLOB_SUITEID, { url }).then((res) => res.data)\n  },\n\n  /**\n   * 初始化jssdk\n   * @param {Object} data\n   */\n  initConfig(data) {\n    // 需要兼容企业微信的展示\n    // 优先使用内部应用的配置、第三方应用次之，最后是公众号 配置\n    // data.internalApp ||\n    return new Promise((resolve, reject) => {\n      const params = data.corp || data\n      const config = {\n        openTagList,\n        jsApiList,\n        debug: false,\n        beta: true,\n        appId: params.app_id,\n        timestamp: params.timestamp,\n        nonceStr: params.nonce_str,\n        signature: params.signature\n      }\n      console.log('jssdk init start')\n      wx.config(config)\n      wx.ready(() => {\n        console.log('jssdk init success!!')\n        resolve()\n      })\n      wx.error((err) => {\n        console.log('jssdk init error')\n        console.error(err)\n        reject()\n      })\n    })\n  },\n\n  /**\n   * agentConfig注入的是应用的身份与权限。\n   * 需要config配置成功后才可以调用\n   */\n  agentConfig(agent) {\n    return new Promise((resolve, reject) => {\n      console.log('jssdk agentconfig init start!!', agent)\n      wx.agentConfig({\n        corpid: agent.app_id, // 必填，企业微信的corpid，必须与当前登录的企业一致\n        agentid: agent.agent_id, // 必填，企业微信的应用id\n        timestamp: agent.timestamp, // 必填，生成签名的时间戳\n        nonceStr: agent.nonce_str, // 必填，生成签名的随机串\n        signature: agent.signature, // 必填，签名，见附录1\n        jsApiList: agentApiList, // 必填\n        success() {\n          console.log('jssdk agentconfig init success!!')\n          resolve()\n        },\n        fail(err) {\n          if (err.errMsg.includes('function not exist')) alert('企业微信版本过低请升级')\n          else reject()\n\n          console.error(err)\n        }\n      })\n    })\n  }\n}\n\n/**\n * 初始化配置,企微需要用到tokens中的corpid\n */\nlet instance: any\nexport default function (reset = false) {\n  if (reset) instance = undefined\n\n  if (!instance) {\n    instance = new Promise((resolve) => {\n      const fail = () => {\n        instance = undefined\n        // resolve(getInstance())\n      }\n      const task = jssdk.loadScript()\n      task\n        .then(() => jssdk.getConfig())\n        .then((data) => {\n          if (isInQw) return jssdk.initConfig(data.corp_config).then(() => data)\n          return data\n        })\n        .then((data) => {\n          return jssdk.agentConfig(data.agent_config)\n        })\n        .then(() => resolve())\n        .catch(() => fail())\n    })\n  }\n  return instance\n}\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/agent-info.vue",
    "content": "<template>\n  <div class=\"flex items-center gap-4\">\n    <ElFormItem\n      class=\"flex-1\"\n      :label=\"$t('name')\"\n      prop=\"name\"\n      :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n    >\n      <ElInput\n        v-model=\"store.form_data.name\"\n        size=\"large\"\n        show-word-limit\n        maxlength=\"20\"\n        :placeholder=\"$t('form_input_placeholder')\"\n      />\n    </ElFormItem>\n    <ElFormItem\n      :label=\"$t('group')\"\n      class=\"flex-1\"\n      prop=\"group_id\"\n      :rules=\"generateInputRules({ message: 'form_select_placeholder' })\"\n    >\n      <ElSelect v-model=\"store.form_data.group_id\" size=\"large\">\n        <ElOption v-for=\"item in store.group_options\" :key=\"item.value\" :value=\"item.value\" :label=\"item.label\" />\n      </ElSelect>\n    </ElFormItem>\n  </div>\n  <ElFormItem :label=\"$t('description')\">\n    <ElInput\n      v-model=\"store.form_data.description\"\n      type=\"textarea\"\n      :rows=\"3\"\n      resize=\"none\"\n      show-word-limit\n      maxlength=\"200\"\n    />\n  </ElFormItem>\n  <ElFormItem :label=\"$t('avatar')\" prop=\"logo\" :rules=\"generateInputRules({ message: 'form_upload_placeholder' })\">\n    <UploadImage v-model=\"store.form_data.logo\" class=\"w-12 h-12\" />\n  </ElFormItem>\n  <ElFormItem\n    :label=\"$t('action_sort')\"\n    prop=\"sort\"\n    :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['number'], min: 0, max: 99999999 })\"\n  >\n    <ElInputNumber\n      v-model=\"store.form_data.sort\"\n      class=\"!w-[300px] el-input-number--left\"\n      size=\"large\"\n      :controls=\"false\"\n      :precision=\"0\"\n      :min=\"0\"\n      :max=\"99999999\"\n      :placeholder=\"$t('form_input_placeholder')\"\n      @keydown=\"$numberInputKeydownHandler\"\n    />\n    <div class=\"w-full text-sm text-[#9A9A9A]\">\n      {{ $t('module.agent_sort_desc') }}\n    </div>\n  </ElFormItem>\n</template>\n\n<script setup lang=\"ts\">\nimport { useAgentFormStore } from '../store'\nimport UploadImage from '@/components/Upload/image.vue'\n\nimport { generateInputRules } from '@/utils/form-rule'\n\nconst store = useAgentFormStore()\n</script>\n\n<style lang=\"scss\" scoped>\n::v-deep(.el-input__inner) {\n  text-align: left;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/agent-type.vue",
    "content": "<template>\n  <div class=\"flex items-center gap-4 mb-4\">\n    <div\n      v-for=\"item in options\"\n      :key=\"item.value\"\n      class=\"flex-1 border rounded px-4 py-3\"\n      :class=\"[\n        item.value === modelValue ? 'border-[#007AFF] bg-[#2563EB] bg-opacity-5' : 'border-[#E5E5E5]',\n        disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n      ]\"\n      @click=\"handleChange(item.value)\"\n    >\n      <div class=\"flex items-center gap-2\">\n        <div class=\"size-4 flex items-center justify-center\">\n          <svg-icon v-if=\"item.icon\" :name=\"item.icon\" />\n        </div>\n        <p class=\"flex-1 text-sm text-[#1D1E1F] font-medium\">{{ item.label }}</p>\n        <el-icon v-if=\"modelValue === item.value\" class=\"size-4 text-[#2563EB]\"><SuccessFilled /></el-icon>\n      </div>\n      <p class=\"text-xs text-[#9A9A9A] mt-2\">\n        {{ item.description }}\n      </p>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { SuccessFilled } from '@element-plus/icons-vue';\nimport { nextTick } from 'vue';\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue: string\n    options: { icon?: string; label: string; description: string; value: string }[]\n    disabled?: boolean\n  }>(),\n  {\n    modelValue: '',\n    options: () => [],\n    disabled: false,\n  }\n)\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: string): void\n  (e: 'change', value: string): void\n}>()\n\nconst handleChange = (value: string) => {\n  if (props.disabled) return\n  emit('update:modelValue', value)\n  nextTick(() => emit('change', value))\n}\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/base-config.vue",
    "content": "<script setup lang=\"ts\">\nimport { onMounted } from 'vue'\nimport { Delete } from '@element-plus/icons-vue'\nimport { useAgentFormStore } from '../store'\nimport MarkdownEditor from '@/components/Markdown/editor.vue'\n\nconst MAX_QUESTION_LENGTH = 10\n\nconst store = useAgentFormStore()\n\nconst handleAdd = () => {\n  const question = store.form_data.settings.suggested_questions\n  if (question.length >= MAX_QUESTION_LENGTH) {\n    ElMessage.error(`${$t('max_add_tip', { max: MAX_QUESTION_LENGTH })}`)\n    return\n  }\n  question.push({\n    id: Date.now(),\n    content: '',\n  })\n}\n\nconst handleDel = (id: number) => {\n  store.form_data.settings.suggested_questions = store.form_data.settings.suggested_questions.filter(item => item.id !== id)\n}\n\nonMounted(() => {\n  if (!store.form_data.settings.suggested_questions.length) {\n    store.form_data.settings.suggested_questions = [{\n      id: Date.now(),\n      content: '',\n    }]\n  }\n})\n</script>\n\n<template>\n  <div class=\"text-base text-[#1D1E1F] font-medium mb-4\">\n    {{ $t('base_setting') }}\n  </div>\n  <div class=\"flex items-center justify-between gap-2 mb-2\">\n    <div class=\"text-sm text-[#4F5052]\">\n      {{ $t('opening_statement') }}\n    </div>\n  </div>\n  <MarkdownEditor v-model=\"store.form_data.settings.opening_statement\" type=\"simple\" class=\"w-full mb-4\" height=\"200px\" />\n  <div class=\"flex items-center justify-between gap-2 mb-2\">\n    <div class=\"text-sm text-[#4F5052]\">\n      {{ $t('suggested_questions') }}\n    </div>\n    <el-button link size=\"large\" @click=\"handleAdd\">\n      +{{ $t('action_add') }}\n    </el-button>\n  </div>\n  <Sortable v-model=\"store.form_data.settings.suggested_questions\" identity=\"cid\" class=\"w-full flex flex-col gap-4 mb-4\">\n    <template #item=\"{ item, index }\">\n      <div class=\"flex items-center border px-2 border-[#DCDFE6] rounded-sm\">\n        <div class=\"sort-icon cursor-move\">\n          <svg-icon name=\"drag\" width=\"16px\" height=\"32px\" color=\"#a1a5af\" />\n        </div>\n        <div class=\"flex-1\">\n          <el-input v-model=\"item.content\" size=\"large\" style=\"--el-input-border-color:none; --el-input-hover-border-color:none; --el-input-focus-border-color:none;\" :placeholder=\"$t('form_input_placeholder')\" class=\"w-full\" />\n        </div>\n        <el-icon class=\"ml-4 cursor-pointer\" color=\"rgba(24, 43, 80, 0.4)\" @click=\"handleDel(item.id)\">\n          <Delete />\n        </el-icon>\n      </div>\n    </template>\n  </Sortable>\n</template>\n\n<style>\n\n</style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/expand-config.vue",
    "content": "<template>\n  <template v-if=\"store.support_file || store.support_image\">\n    <div class=\"text-base text-[#1D1E1F] font-medium mb-4 mt-10\">\n      {{ $t('expand_setting') }}\n    </div>\n    <div v-if=\"store.support_file\" class=\"flex items-center gap-2\">\n      <div class=\"flex-1\">\n        <div class=\"text-sm text-[#1D1E1F]\">\n          {{ $t('agent_file_parse') }}\n        </div>\n      </div>\n      <div class=\"flex-none text-sm text-[#1D1E1F]\">\n        {{ store.form_data.settings.file_parse.enable ? $t('action_open') : $t('action_close') }}\n        <el-switch v-model=\"store.form_data.settings.file_parse.enable\" />\n      </div>\n    </div>\n    <div v-if=\"store.support_image\" class=\"flex items-center gap-2 mt-4\">\n      <div class=\"flex-1\">\n        <div class=\"text-sm text-[#1D1E1F]\">\n          {{ $t('agent_image_parse') }}\n        </div>\n      </div>\n      <div class=\"flex-none text-sm text-[#1D1E1F]\">\n        {{ store.form_data.settings.image_parse.enable ? $t('action_open') : $t('action_close') }}\n        <el-switch v-model=\"store.form_data.settings.image_parse.enable\" />\n      </div>\n    </div>\n  </template>\n</template>\n\n<script setup lang=\"ts\">\nimport { useAgentFormStore } from '../store';\n\nconst store = useAgentFormStore()\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/field-input-setting.vue",
    "content": "<template>\n  <el-dialog\n    v-model=\"visible\"\n    width=\"600\"\n    destroy-on-close\n    :title=\"widgetForm.id ? $t('action.edit') : $t('action.add')\"\n  >\n    <el-form\n      ref=\"formRef\"\n      :model=\"widgetForm\"\n      label-width=\"100px\"\n      label-position=\"top\"\n      require-asterisk-position=\"right\"\n      style=\"max-height: 520px; overflow-y: auto\"\n    >\n      <el-form-item\n        :label=\"$t('agent.variable_name')\"\n        prop=\"variable\"\n        required\n        :rules=\"generateInputRules({ message: 'form.input_placeholder', validator: ['variable'] })\"\n      >\n        <el-input\n          v-model=\"widgetForm.variable\"\n          :disabled=\"widgetForm.is_system\"\n          size=\"large\"\n          maxlength=\"30\"\n          show-word-limit\n          :placeholder=\"$t('form.input_placeholder') + $t('agent.variable_name')\"\n        />\n      </el-form-item>\n      <el-form-item\n        :label=\"$t('agent.variable_label')\"\n        prop=\"label\"\n        required\n        :rules=\"generateInputRules({ message: 'form.input_placeholder' })\"\n      >\n        <el-input\n          v-model=\"widgetForm.label\"\n          size=\"large\"\n          maxlength=\"30\"\n          show-word-limit\n          :placeholder=\"$t('form.input_placeholder') + $t('agent.variable_label')\"\n        />\n      </el-form-item>\n      <el-form-item :label=\"$t('agent.variable_type')\">\n        <template v-if=\"widgetForm.is_system\">\n          <el-input :model-value=\"typeLabel\" size=\"large\" disabled :placeholder=\"$t('form.input_placeholder')\" />\n        </template>\n        <div v-else class=\"flex flex-wrap gap-2\">\n          <template v-for=\"item in typeList\" :key=\"item.type\">\n            <div\n              class=\"w-[100px] h-10 border rounded flex-center gap-1 cursor-pointer\"\n              :class=\"[\n                widgetForm.type === item.type\n                  ? 'border-[#2563EB] text-[#2563EB] bg-[#2563EB] bg-opacity-[8%]'\n                  : 'text-[#182B50] bg-[#F9FAFC]',\n              ]\"\n              @click=\"handleType(item)\"\n            >\n              <span class=\"text-sm\">{{ item.label }}</span>\n            </div>\n          </template>\n        </div>\n      </el-form-item>\n      <el-form-item v-if=\"['date'].includes(widgetForm.type)\" :label=\"$t('form.select_placeholder')\">\n        <el-select v-model=\"widgetForm.date_format\" class=\"w-full\" size=\"large\" placeholder=\"请选择\">\n          <el-option label=\"年\" value=\"y\" />\n          <el-option label=\"年/月\" value=\"y-m\" />\n          <el-option label=\"年/月/日\" value=\"y-m-d\" />\n          <el-option label=\"时/分\" value=\"h-m\" />\n          <el-option label=\"时间范围\" value=\"daterange\" />\n        </el-select>\n      </el-form-item>\n      <el-form-item v-if=\"type === 'input'\" :label=\"$t('agent.variable_desc')\">\n        <el-input\n          v-model=\"widgetForm.desc\"\n          size=\"large\"\n          maxlength=\"1000\"\n          show-word-limit\n          :placeholder=\"$t('form.input_placeholder')\"\n        />\n      </el-form-item>\n      <el-form-item v-if=\"type === 'input'\" :label=\"$t('agent.variable_required')\">\n        <el-switch v-model=\"widgetForm.required\" />\n      </el-form-item>\n      <el-form-item\n        v-if=\"['text', 'textarea', 'array_text'].includes(widgetForm.type) && type === 'input'\"\n        :label=\"$t('agent.variable_max_length')\"\n      >\n        <el-input-number\n          v-model=\"widgetForm.max_length\"\n          style=\"width: 100%\"\n          class=\"el-input-number--left\"\n          :precision=\"0\"\n          :controls=\"false\"\n          size=\"large\"\n          :maxlength=\"256\"\n          :placeholder=\"$t('form.input_placeholder')\"\n        />\n      </el-form-item>\n      <el-form-item\n        v-if=\"['text', 'textarea', 'array_text'].includes(widgetForm.type) && type === 'input'\"\n        :label=\"$t('agent.variable_show_word_limit')\"\n      >\n        <el-switch v-model=\"widgetForm.show_word_limit\" />\n      </el-form-item>\n\n      <el-form-item v-if=\"widgetForm.type === 'select'\" :label=\"$t('agent.variable_options')\">\n        <div class=\"flex flex-col gap-3 w-full\">\n          <template v-for=\"(item, index) in widgetForm.options\" :key=\"item.value\">\n            <div class=\"flex items-center\">\n              <el-input v-model=\"item.label\" class=\"flex-1\" size=\"large\" :placeholder=\"$t('form.input_placeholder')\" />\n              <div class=\"px-2\">\n                <el-icon class=\"cursor-pointer\" color=\"#999999\" @click=\"handleDelOption(index)\">\n                  <Delete />\n                </el-icon>\n              </div>\n            </div>\n          </template>\n        </div>\n        <div\n          class=\"w-full h-10 leading-10 rounded text-center border border-dashed border-[#DCDFE6] cursor-pointer text-sm text-[#182B50] text-opacity-80 mt-3\"\n          @click=\"handleAddOption\"\n        >\n          + {{ $t('action.add') }}\n        </div>\n      </el-form-item>\n      <el-form-item v-if=\"widgetForm.type === 'select'\" label=\"模式\">\n        <el-radio-group v-model=\"widgetForm.multiple\">\n          <el-radio size=\"large\" :label=\"false\"> 单选 </el-radio>\n          <el-radio size=\"large\" :label=\"true\"> 多选 </el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <template\n        v-if=\"\n          ['file', 'array_image', 'array_audio', 'array_video', 'array_file'].includes(widgetForm.type) &&\n          type === 'input'\n        \"\n      >\n        <el-form-item\n          v-if=\"!['array_image', 'array_audio', 'array_video'].includes(widgetForm.type)\"\n          label=\"上传文件类型\"\n        >\n          <el-select\n            v-model=\"widgetForm.file_type\"\n            class=\"w-full\"\n            size=\"large\"\n            placeholder=\"请选择\"\n            @change=\"handleFileTypeChange($event, widgetForm)\"\n          >\n            <el-option label=\"不限格式\" value=\"all\" />\n            <el-option label=\"自定义\" value=\"custom\" />\n          </el-select>\n        </el-form-item>\n        <el-form-item\n          v-if=\"widgetForm.file_type === 'custom'\"\n          label=\"支持文件格式\"\n          prop=\"file_accept\"\n          required\n          :rules=\"generateInputRules({ message: 'form.select_placeholder' })\"\n        >\n          <el-select v-model=\"widgetForm.file_accept\" multiple class=\"w-full\" size=\"large\" placeholder=\"请选择\">\n            <el-option\n              v-for=\"item in fileAcceptOptions\"\n              :key=\"item\"\n              :label=\"item === 'md' ? 'markdown' : item\"\n              :value=\"item\"\n            />\n          </el-select>\n        </el-form-item>\n        <el-form-item label=\"单个文件上限\">\n          <div class=\"w-full flex items-center gap-5 overflow-hidden\">\n            <div class=\"flex-1\">\n              <el-slider v-model=\"widgetForm.file_size\" :min=\"1\" :max=\"300\" />\n            </div>\n            <span class=\"text-sm text-[#182B50]\">{{ widgetForm.file_size }}M</span>\n          </div>\n        </el-form-item>\n        <el-form-item v-if=\"showFileLimit\" label=\"上传最大数量\">\n          <div class=\"flex items-center gap-2\">\n            <el-input-number\n              v-model=\"widgetForm.file_limit\"\n              :precision=\"0\"\n              :min=\"1\"\n              :max=\"6\"\n              size=\"large\"\n              placeholder=\"请输入\"\n            />\n            <span class=\"text-sm text-[#182B50]\">个</span>\n          </div>\n        </el-form-item>\n      </template>\n    </el-form>\n    <template #footer>\n      <el-button size=\"large\" @click=\"visible = false\"> {{ $t('action.cancel') }} </el-button>\n      <el-button v-debounce type=\"primary\" size=\"large\" @click=\"handleSave\"> {{ $t('action.save') }} </el-button>\n    </template>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport { Delete } from '@element-plus/icons-vue'\nimport type { FormInstance } from 'element-plus'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { generateRandomId } from '@/utils'\nimport { inputTypeList, outputTypeList, outputDefaultField } from '@/constants/agent'\nimport { AGENT_TYPES } from '@/constants/platform/config'\n\nconst props = defineProps<{\n  type: 'input' | 'output'\n  agentType: string\n}>()\n\nconst emit = defineEmits<{\n  (e: 'save', value: Agent.Field): void\n}>()\n\nconst formRef = ref<FormInstance>()\nconst visible = ref(false)\n\nconst widgetForm = ref<Agent.Field>({\n  ...outputDefaultField,\n  file_accept: [],\n})\n\nconst typeList = computed(() => {\n  return (props.type === 'input' ? inputTypeList : outputTypeList).filter(item =>\n    item.allowed ? item.allowed.includes(props.agentType) : true\n  )\n})\n\nconst typeLabel = computed(() => {\n  return [...inputTypeList, ...outputTypeList].find(item => item.type === widgetForm.value.type)?.label\n})\n\nconst fileAcceptOptions = computed(() => {\n  if (widgetForm.value.type.includes('file')) {\n    return ['doc', 'docx', 'pdf', 'xlsx', 'csv', 'txt', 'png', 'jpg', 'bmp', 'md', 'tiff', 'html']\n  }\n  if (widgetForm.value.type === 'array_image') {\n    return ['png', 'jpg', 'bmp', 'tiff']\n  }\n  if (widgetForm.value.type === 'array_audio') {\n    return ['mp3', 'wav', 'flac', 'aac', 'ogg']\n  }\n  if (widgetForm.value.type === 'array_video') {\n    return ['mp4', 'mov', 'flv', 'm4v', 'wmv']\n  }\n  return []\n})\n\nconst showFileLimit = computed(() => {\n  return props.agentType === AGENT_TYPES.COZE_WORKFLOW_CN ? widgetForm.value.type !== 'file' : true\n})\n\nconst handleType = item => {\n  widgetForm.value.type = item.type\n  if (\n    props.agentType === AGENT_TYPES.COZE_WORKFLOW_CN &&\n    ['file', 'array_image', 'array_audio', 'array_video', 'array_file'].includes(widgetForm.value.type)\n  ) {\n    widgetForm.value.file_accept = []\n    if (widgetForm.value.type === 'file') widgetForm.value.file_limit = 1\n    if (['array_image', 'array_audio', 'array_video'].includes(widgetForm.value.type)) {\n      widgetForm.value.file_type = 'custom'\n    } else {\n      widgetForm.value.file_type = 'all'\n    }\n  }\n}\n\nconst handleAddOption = () => {\n  widgetForm.value.options.push({\n    id: '',\n    label: '',\n    value: '',\n  })\n}\n\nconst handleDelOption = index => {\n  widgetForm.value.options.splice(index, 1)\n}\n\nconst handleFileTypeChange = (fileType: string, form: Agent.Field) => {\n  form.file_accept = []\n}\nconst handleSave = async () => {\n  const is_valid = await formRef.value?.validate()\n  if (!is_valid) return\n  emit('save', {\n    ...widgetForm.value,\n    id: widgetForm.value.id || generateRandomId(10),\n  })\n  visible.value = false\n}\n\ndefineExpose({\n  open(data: Agent.Field = {} as Agent.Field) {\n    widgetForm.value.id = data.id || ''\n    widgetForm.value.variable = data.variable || ''\n    widgetForm.value.label = data.label || ''\n    widgetForm.value.type = data.type || typeList.value[0].type\n    widgetForm.value.desc = data.desc || ''\n    widgetForm.value.required = data.required || false\n    widgetForm.value.max_length = data.max_length || 0\n    widgetForm.value.show_word_limit = data.show_word_limit || false\n    widgetForm.value.options = data.options || []\n    widgetForm.value.multiple = data.multiple || false\n    widgetForm.value.file_type = data.file_type || 'all'\n    widgetForm.value.file_accept = data.file_accept || []\n    widgetForm.value.file_limit = data.file_limit || 1\n    widgetForm.value.file_size = data.file_size || 30\n    widgetForm.value.is_system = data.is_system || false\n\n    visible.value = true\n  },\n})\n</script>\n\n<style scoped>\n/* ::v-deep(.el-input-number .el-input__inner) {\n  text-align: left;\n} */\n</style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/field-input.vue",
    "content": "<template>\n  <div class=\"flex items-center gap-1\">\n    <div class=\"flex-1 text-base text-[#1D1E1F] font-medium mb-3\">\n      {{ title }}\n    </div>\n    <el-button v-if=\"allowAdd\" link type=\"default\" @click=\"handleFieldAdd\">\n      <el-icon class=\"mr-1\"><Plus /></el-icon>\n      {{ $t('action_add') }}\n    </el-button>\n    <el-button v-if=\"allowUpdate\" v-debounce class=\"!ml-0\" link type=\"primary\" @click=\"handleFieldUpdate\">\n      <el-icon class=\"mr-1\"><Refresh /></el-icon>\n      {{ $t('action_update') }}\n    </el-button>\n  </div>\n  <el-table :data=\"list\" class=\"border mb-7\" header-cell-class-name=\"!bg-[#F8F9FA] h-[46px]\">\n    <el-table-column prop=\"variable\" :label=\"$t('agent.variable_name')\" :show-overflow-tooltip=\"true\" />\n    <el-table-column prop=\"type\" :label=\"$t('agent.variable_type')\">\n      <template #default=\"{ row }\">\n        {{ getLabel(row.type) }}\n      </template>\n    </el-table-column>\n    <el-table-column prop=\"label\" :label=\"$t('agent.variable_label')\" :show-overflow-tooltip=\"true\" />\n\n    <el-table-column prop=\"operation\" :label=\"$t('operation')\" :width=\"70\">\n      <template #default=\"{ row, $index }\">\n        <div class=\"flex items-center gap-2 cursor-pointer\">\n          <svg-icon name=\"edit\" width=\"16\" @click=\"handleFieldEdit(row)\" />\n          <svg-icon v-if=\"allowAdd\" name=\"del\" width=\"16\" @click=\"handleFieldDelete(row, $index)\" />\n        </div>\n      </template>\n    </el-table-column>\n  </el-table>\n\n  <FieldSave ref=\"fieldSaveRef\" :type=\"type\" :agent-type=\"agentType\" @save=\"handleFieldSave\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Refresh, Plus } from '@element-plus/icons-vue';\nimport FieldSave from './field-input-setting.vue';\nimport { inputTypeList, outputTypeList } from '@/constants/agent';\n\nconst props = withDefaults(\n  defineProps<{\n    allowUpdate?: boolean\n    allowAdd?: boolean\n    title?: string\n    list?: Agent.Field[]\n    type?: 'input' | 'output'\n    updateRequest?: () => Promise<Agent.Field[]>\n    agentType?: string\n  }>(),\n  {\n    allowUpdate: false,\n    allowAdd: false,\n    title: '',\n    list: () => [],\n    updateRequest: () => Promise.resolve([]),\n    type: 'input',\n    agentType: '',\n  }\n)\n\nconst emit = defineEmits<{\n  (e: 'update:list', list: Agent.Field[]): void\n}>()\n\nconst fieldSaveRef = ref<InstanceType<typeof FieldSave>>()\n\nconst getLabel = (type: string) => {\n  return [...inputTypeList, ...outputTypeList].find(item => item.type === type)?.label\n}\n\nconst handleFieldAdd = () => {\n  fieldSaveRef.value?.open({})\n}\n\nconst handleFieldUpdate = async () => {\n  const list: Agent.Field[] = await props.updateRequest()\n  const oldList = props.list.filter(item => !item.is_system)\n  emit('update:list', [...oldList, ...list])\n}\n\nconst handleFieldEdit = (row: Agent.Field) => {\n  fieldSaveRef.value?.open(row)\n}\n\nconst handleFieldDelete = (row: Agent.Field, index: number) => {\n  const list = props.list.filter((item, i) => i !== index)\n  emit('update:list', list)\n}\n\nconst handleFieldSave = (value: Agent.Field) => {\n  const list = [...props.list]\n  const index = list.findIndex(item => item.id === value.id)\n  if (index !== -1) {\n    list[index] = value\n  } else {\n    list.push(value)\n  }\n  emit('update:list', list)\n}\n</script>\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/limit-config.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref } from 'vue'\nconst form = ref({\n  request_limit: {\n    frequency: {\n      enable: false,\n      interval: 1,\n      number: 1,\n      over_message: '',\n    },\n    total: {\n      enable: false,\n      limit: 1,\n      over_message: '',\n    },\n  },\n})\n</script>\n\n<template>\n  <el-form-item :label=\"$t('dialogue_frequency')\">\n    <div class=\"w-full\">\n      <div class=\"text-[#182B50] text-opacity-60\">\n        <el-switch v-model=\"form.request_limit.frequency.enable\" class=\"mr-2\" /> {{ form.request_limit.frequency.enable\n          ? $t('action_open') : $t('action_close') }}\n      </div>\n      <div v-if=\"form.request_limit.frequency.enable\">\n        <div class=\"flex items-center whitespace-nowrap text-[#182B50] mt-4\">\n          {{ $t('limit') }}<el-input-number\n            v-model=\"form.request_limit.frequency.interval\" :min=\"1\" :controls=\"false\"\n            class=\"mx-2 w-7\" size=\"large\"\n          /> {{ $t('second') }}, {{ $t('send') }} <el-input-number\n            v-model=\"form.request_limit.frequency.number\" :min=\"1\" :controls=\"false\" class=\"mx-2 w-7\" size=\"large\"\n          /> {{\n            $t('unit_messages') }}\n        </div>\n        <div class=\"flex items-center whitespace-nowrap text-[#182B50] mt-4\">\n          {{ $t('over_message') }} <el-input\n            v-model=\"form.request_limit.frequency.over_message\" type=\"textarea\"\n            :rows=\"3\" resize=\"none\" class=\"mx-2\" size=\"large\"\n          />\n        </div>\n      </div>\n    </div>\n  </el-form-item>\n  <el-form-item :label=\"$t('dialogue_total')\">\n    <div class=\"w-full\">\n      <div class=\"text-[#182B50] text-opacity-60\">\n        <el-switch v-model=\"form.request_limit.total.enable\" class=\"mr-2\" /> {{ form.request_limit.total.enable\n          ? $t('action_open') : $t('action_close') }}\n      </div>\n      <div v-if=\"form.request_limit.total.enable\">\n        <!-- 为了让对话频率跟对话总量宽度一样，复制上面一份 -->\n        <div class=\"h-[1px] flex overflow-hidden items-center whitespace-nowrap text-[#182B50] invisible\">\n          {{ $t('limit') }}<el-input-number :min=\"1\" :controls=\"false\" class=\"mx-2 w-7\" size=\"large\" />{{ $t('second')\n          }}, {{ $t('send') }}<el-input-number :min=\"1\" :controls=\"false\" class=\"mx-2 w-7\" size=\"large\" />{{\n            $t('unit_messages') }}\n        </div>\n\n        <div class=\"flex items-center whitespace-nowrap text-[#182B50] mt-4\">\n          {{ $t('limit_every_dialogue') }} <el-input-number\n            v-model=\"form.request_limit.total.limit\" :min=\"1\" :controls=\"false\"\n            class=\"mx-2 w-7\" size=\"large\"\n          /> {{ $t('unit_messages_v2') }}\n        </div>\n        <div class=\"flex items-center whitespace-nowrap text-[#182B50] mt-4\">\n          {{ $t('over_message') }} <el-input\n            v-model=\"form.request_limit.total.over_message\" type=\"textarea\" :rows=\"3\"\n            resize=\"none\" class=\"mx-2\" size=\"large\"\n          />\n        </div>\n      </div>\n    </div>\n  </el-form-item>\n</template>\n\n<style scoped>\n\n</style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/relate-agents-dialog.vue",
    "content": "<template>\n  <ElDialog v-model=\"visible\" :title=\"$t('action_add')\" width=\"870px\">\n    <div class=\"h-[560px] flex flex-col\">\n      <div class=\"flex-none flex items-center justify-between\">\n        <div class=\"flex-1 w-0\">\n          <GroupTabs v-model=\"filterForm.group_id\" :group-type=\"GROUP_TYPE.AGENT\" @change=\"refresh\" />\n        </div>\n        <div class=\"flex-none flex-center gap-3 ml-8\">\n          <Search\n            v-model=\"filterForm.keyword\"\n            placeholder=\"module.ai_toolbox_search_placeholder\"\n            @change=\"refresh\"\n            @input=\"refresh\"\n          />\n        </div>\n      </div>\n\n      <div v-loading=\"tableData.loading\" class=\"flex-1 mt-4 flex flex-col gap-4 overflow-y-auto relative\">\n        <template v-for=\"item in tableData.list\" :key=\"item.agent_id\">\n          <div class=\"bg-white rounded border p-4 flex items-center gap-2 relative group\">\n            <img alt=\"AI 搜索\" :src=\"item.logo\" class=\"size-10\" />\n            <div class=\"flex-1 overflow-hidden\">\n              <div class=\"text-sm text-[#1D1E1F]\">\n                {{ item.name }}\n              </div>\n              <div class=\"text-xs text-[#1D1E1F] text-opacity-60 truncate mt-1\">\n                {{ item.description }}\n              </div>\n            </div>\n            <el-button v-if=\"isExist(item.agent_id)\" type=\"primary\" plain class=\"border-none\" :disabled=\"true\">{{\n              $t('action.added')\n            }}</el-button>\n            <el-button v-else type=\"primary\" class=\"invisible group-hover:visible\" @click=\"handleAdd(item)\">\n              {{ $t('action_add') }}\n            </el-button>\n          </div>\n        </template>\n\n        <el-empty v-if=\"showEmpty\" />\n      </div>\n\n      <Pagination\n        :total=\"tableData.total\"\n        :page-size=\"filterForm.pageSize\"\n        :current-page=\"filterForm.page\"\n        @current-change=\"handleCurrentChange\"\n        @size-change=\"handleSizeChange\"\n      />\n    </div>\n  </ElDialog>\n  <RelateAgentsSetting ref=\"relateAgentsSettingRef\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, reactive } from 'vue';\n\nimport RelateAgentsSetting from './relate-agents-setting.vue';\n\nimport agentApi from '@/api/modules/agent';\n\nimport { GROUP_TYPE } from '@/constants/group';\n\nconst emit = defineEmits<{\n  (e: 'select', item: Agent.State): void\n}>()\n\nconst visible = ref(false)\n\nconst filterForm = reactive({\n  group_id: 0,\n  keyword: '',\n  page: 1,\n  pageSize: 20,\n})\n\nconst tableData: {\n  loading: boolean\n  total: number\n  list: Agent.State[]\n} = reactive({\n  loading: true,\n  total: 0,\n  list: [],\n})\n\nconst showEmpty = computed(() => {\n  return tableData.list.length === 0 && !tableData.loading\n})\n\nconst existAgents = ref<Agent.RelateAgent[]>([])\n\nconst loadList = async () => {\n  try {\n    tableData.loading = true\n    const { count = 0, agents = [] } = await agentApi.list({\n      params: {\n        group_id: filterForm.group_id,\n        keyword: filterForm.keyword,\n        offset: (filterForm.page - 1) * filterForm.pageSize,\n        limit: filterForm.pageSize,\n      },\n    })\n    tableData.total = count\n    tableData.list = agents\n  } finally {\n    tableData.loading = false\n  }\n}\n\nconst refresh = () => {\n  filterForm.page = 1\n  loadList()\n}\n\nconst handleCurrentChange = (page: number) => {\n  filterForm.page = page\n  loadList()\n}\n\nconst handleSizeChange = (size: number) => {\n  filterForm.pageSize = size\n  loadList()\n}\n\nconst open = (relateAgents: Agent.RelateAgent[]) => {\n  existAgents.value = relateAgents\n  visible.value = true\n}\n\nconst close = () => {\n  visible.value = false\n}\nconst isExist = (agent_id: number) => {\n  return (existAgents.value || []).some(item => item.agent_id === agent_id)\n}\n\nconst handleAdd = (item: Agent.State) => {\n  emit('select', item)\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/relate-agents-setting.vue",
    "content": "<template>\n  <el-dialog v-model=\"visible\" class=\"el-dialog--footer-center\" :title=\"$t('action.setting')\" width=\"600px\">\n    <el-form label-width=\"100px\" label-position=\"top\">\n      <el-form-item :label=\"$t('agent.relate_app.input_mapping')\">\n        <div class=\"w-full border rounded\">\n          <div class=\"flex items-center gap-2 px-5 py-4 border-b border-dashed\">\n            <img :src=\"agent.logo\" class=\"size-8\" />\n            <p class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{ agent.name }}</p>\n          </div>\n          <div class=\"py-4 px-5 max-h-[300px] overflow-y-auto\">\n            <template v-for=\"(field, index) in agent.input_fields\" :key=\"index\">\n              <div>\n                <div class=\"flex items-center justify-between mb-1\">\n                  <div class=\"text-sm text-[#1D1E1F]\">{{ field.label }}</div>\n                  <span class=\"text-[#2563EB] cursor-pointer\" @click.stop=\"handleSelectVariable(index)\">{#}</span>\n                </div>\n                <div class=\"h-28 border rounded p-2\">\n                  <PromptInput\n                    ref=\"promptInputRef\"\n                    v-model=\"agent.field_mapping[field.id]\"\n                    :placeholder=\"$t('form.set_variable_placeholder')\"\n                    style=\"height: 100%\"\n                    :variables=\"variables\"\n                    :agent-info=\"agentInfo\"\n                  />\n                </div>\n              </div>\n            </template>\n          </div>\n        </div>\n      </el-form-item>\n      <el-form-item :label=\"$t('agent.relate_app.execution_rule')\">\n        <div class=\"w-full flex items-center gap-4\">\n          <div\n            class=\"flex-1 h-10 flex items-center gap-2 px-3 border rounded cursor-pointer\"\n            :class=\"{ 'border-[#2563EB] text-[#2563EB]': agent.execution_rule === 'auto' }\"\n            @click=\"handleExecutionRule('auto')\"\n          >\n            <div class=\"size-4 flex items-center justify-center\">\n              <svg-icon v-if=\"agent.execution_rule === 'auto'\" name=\"check\" />\n              <svg-icon v-else name=\"circle\" />\n            </div>\n            {{ $t('agent.relate_app.auto_execution') }}\n          </div>\n          <div\n            class=\"flex-1 h-10 flex items-center gap-2 px-3 border rounded cursor-pointer\"\n            :class=\"{ 'border-[#2563EB] text-[#2563EB]': agent.execution_rule === 'manual' }\"\n            @click=\"handleExecutionRule('manual')\"\n          >\n            <div class=\"size-4 flex items-center justify-center\">\n              <svg-icon v-if=\"agent.execution_rule === 'manual'\" name=\"check\" />\n              <svg-icon v-else name=\"circle\" />\n            </div>\n            {{ $t('agent.relate_app.manual_execution') }}\n          </div>\n        </div>\n      </el-form-item>\n    </el-form>\n\n    <template #footer>\n      <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" @click=\"handleSave\">\n        {{ $t('action_confirm') }}\n      </ElButton>\n      <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click=\"close\">\n        {{ $t('action_cancel') }}\n      </ElButton>\n    </template>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\nimport { useAgentFormStore } from '../store'\nimport { deepCopy } from '@/utils'\nimport PromptInput from '@/components/Prompt/input.vue'\nimport { AGENT_MODES } from '@/constants/platform/config'\n\nconst store = useAgentFormStore()\n\nconst emit = defineEmits<{\n  (e: 'save', value: Agent.RelateAgent): void\n}>()\n\nconst variables = computed(() => {\n  const isChatAgent = store.agent_option_data.mode === AGENT_MODES.CHAT\n  if (isChatAgent) {\n    return [\n      {\n        label: window.$t('output_variable'),\n        children: [{ label: '{#text#}', value: '{#text#}' }],\n      },\n    ]\n  }\n  return [\n    {\n      label: window.$t('output_variable'),\n      children: store.form_data.settings.output_fields.map(item => ({\n        label: `{#${item.label}#}`,\n        value: `{#${item.variable}#}`,\n      })),\n    },\n  ]\n})\n\nconst visible = ref(false)\nconst agent = ref<Agent.RelateAgent>({} as Agent.RelateAgent)\nconst agentInfo = ref({\n  icon: '',\n  name: '',\n})\n\nconst promptInputRef = ref()\nconst open = (item: Agent.RelateAgent) => {\n  agent.value = deepCopy(item)\n  visible.value = true\n  agentInfo.value.icon = store.form_data.logo\n  agentInfo.value.name = store.form_data.name\n}\n\nconst close = () => {\n  visible.value = false\n}\nconst handleSelectVariable = (index: number) => {\n  promptInputRef.value[index].showTooltip()\n}\n\nconst handleExecutionRule = (rule: 'auto' | 'manual') => {\n  agent.value.execution_rule = rule\n}\n\nconst handleSave = () => {\n  emit('save', agent.value)\n\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/relate-agents.vue",
    "content": "<template>\n  <div class=\"flex items-center mb-3\">\n    <div class=\"flex-1 text-base text-[#1D1E1F] font-medium\">\n      {{ $t('agent.relate_app.title') }}\n    </div>\n    <el-button link @click=\"handleAdd\">\n      <el-icon class=\"mr-1\"><Plus /></el-icon>\n      {{ $t('action_add') }}\n    </el-button>\n  </div>\n  <p v-if=\"relateAgents.length === 0\" class=\"text-sm text-[#9A9A9A]\">\n    {{ $t('agent.relate_app.desc') }}\n  </p>\n\n  <div class=\"flex flex-col\">\n    <template v-for=\"item in relateAgents\" :key=\"item.id\">\n      <div class=\"flex py-4 items-center gap-2 border-b\">\n        <el-image class=\"size-10 rounded\" :src=\"item.logo\" lazy />\n        <div class=\"flex-1 overflow-hidden\">\n          <div class=\"text-sm text-[#1D1E1F] truncate\">{{ item.name }}</div>\n          <div class=\"text-xs text-[#9A9A9A] mt-1 truncate\">\n            {{ item.description }}\n          </div>\n        </div>\n        <div class=\"flex\">\n          <el-button link @click=\"handleSetting(item)\">\n            <svg-icon name=\"setting\" />\n          </el-button>\n          <el-button link class=\"!ml-1\" @click=\"handleDelete(item.agent_id)\">\n            <svg-icon name=\"del\" />\n          </el-button>\n        </div>\n      </div>\n    </template>\n  </div>\n  <RelateAgentsDialog ref=\"relateAgentsDialogRef\" @select=\"handleSelect\" />\n  <RelateAgentsSetting ref=\"relateAgentsSettingRef\" @save=\"handleSave\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport { Plus } from '@element-plus/icons-vue'\nimport RelateAgentsDialog from './relate-agents-dialog.vue'\nimport RelateAgentsSetting from './relate-agents-setting.vue'\n\nimport { useAgentFormStore } from '../store'\n\nimport { BACKEND_AGENT_TYPE } from '@/constants/platform/config.ts'\n\nconst agentFormStore = useAgentFormStore()\n\nconst relateAgentsDialogRef = ref()\nconst relateAgentsSettingRef = ref()\n\nconst relateAgents = computed(() => {\n  return agentFormStore.form_data.settings.relate_agents || []\n})\n\nconst handleAdd = () => {\n  relateAgentsDialogRef.value.open(relateAgents.value)\n}\n\nconst handleSetting = (item: Agent.RelateAgent) => {\n  relateAgentsSettingRef.value.open(item)\n}\n\nconst handleDelete = (agent_id: number) => {\n  agentFormStore.form_data.settings.relate_agents = relateAgents.value.filter(item => item.agent_id !== agent_id)\n}\n\nconst handleSelect = (item: Agent.State) => {\n  let input_fields = item.settings.input_fields || []\n  const is_workflow = BACKEND_AGENT_TYPE.WORKFLOW === item.backend_agent_type\n  if (!is_workflow) {\n    input_fields = [\n      {\n        id: 'input',\n        type: 'text',\n        label: '输入',\n        variable: 'input'\n      }\n    ]\n  }\n  const data = {\n    agent_id: item.agent_id,\n    name: item.name,\n    logo: item.logo,\n    description: item.description,\n    input_fields,\n    execution_rule: 'auto',\n    is_workflow,\n    field_mapping: input_fields.reduce((acc, field) => {\n      acc[field.id] = ''\n      return acc\n    }, {}),\n  } as Agent.RelateAgent\n  handleSetting(data)\n}\n\nconst handleSave = (item: Agent.RelateAgent) => {\n  const index = relateAgents.value.findIndex(data => data.agent_id === item.agent_id)\n  if (index !== -1) {\n    relateAgents.value[index] = item\n  } else {\n    relateAgents.value.push(item)\n  }\n}\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/components/use-scope.vue",
    "content": "<template>\n  <div class=\"text-base text-[#1D1E1F] font-medium mt-10 mb-4\">\n    {{ $t('permission_setting') }}\n  </div>\n  <ElFormItem\n    :hidden=\"!(enterprise.info.is_independent || enterprise.info.is_industry)\"\n    :label=\"$t('register_user.title')\"\n  >\n    <GroupSelect\n      v-model=\"store.form_data.subscription_group_ids\"\n      type=\"checkbox\"\n      :group-type=\"GROUP_TYPE.USER\"\n      :default-all=\"store.is_new\"\n      multiple\n    />\n  </ElFormItem>\n  <ElFormItem\n    :hidden=\"!(enterprise.info.is_enterprise || enterprise.info.is_industry)\"\n    :label=\"$t('internal_user.title')\"\n    prop=\"user_group_ids\"\n  >\n    <GroupSelect\n      v-model=\"store.form_data.user_group_ids\"\n      type=\"picker\"\n      :group-type=\"GROUP_TYPE.INTERNAL_USER\"\n      multiple\n    />\n  </ElFormItem>\n</template>\n\n<script setup lang=\"ts\">\nimport { useAgentFormStore } from '../store'\n\nimport { GROUP_TYPE } from '@/constants/group'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\n\nconst store = useAgentFormStore()\n\nconst enterprise = useEnterpriseStore()\n</script>\n"
  },
  {
    "path": "web/console/src/views/agent/create/drawer.vue",
    "content": "<template>\n  <ElDrawer\n    v-model=\"visible\"\n    :title=\"editable ? $t('action_edit') : $t('action_add')\"\n    size=\"840px\"\n    destroy-on-close\n    append-to-body\n    :close-on-click-modal=\"false\"\n  >\n    <AgentForm ref=\"agentFormRef\" :agent-type=\"agentType\" show-channel-config />\n    <template #footer>\n      <div class=\"flex border-t pt-5 justify-end w-full\">\n        <ElButton size=\"large\" @click=\"handleClose\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n        <ElButton v-debounce type=\"primary\" size=\"large\" @click=\"handleSave\">\n          {{ $t('action_confirm') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDrawer>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, provide, ref } from 'vue'\nimport AgentForm from './platform/index.vue'\n\nimport { useAgentFormStore } from './store'\n\nimport { AGENT_TYPES, getAgentByAgentType } from '@/constants/platform/config'\nimport type { AgentType } from '@/constants/platform/config'\n\ninterface OpenParams {\n  agent_type?: AgentType\n  data?: {\n    channel_config?: ChannelConfig\n    label?: string\n    value?: string\n  }\n  agent_id?: number\n  group_id?: number\n  cache?: boolean\n}\n\nconst emits = defineEmits(['success', 'cancel'])\nconst agentFormStore = useAgentFormStore()\n\nconst agentFormRef = ref()\nconst visible = ref(false)\nconst agentType = ref<AgentType>(AGENT_TYPES.DIFY_AGENT)\nconst editable = ref(false)\nconst channelConfig = ref({})\n\nprovide('channelConfig', channelConfig)\n\n// 编辑页过来时，不重置状态，直接打开\nasync function open({ agent_type, data = {}, agent_id, group_id = 0, cache = false }: OpenParams = {}) {\n  // Update form state\n  agentType.value = agent_type || AGENT_TYPES.DIFY_AGENT\n  editable.value = !!+agent_id\n  // Update channel config\n  channelConfig.value = data.channel_config || {}\n  channelConfig.value.name = channelConfig.value.name || data.label || ''\n\n  if (!channelConfig.value.channel_type && data.value) channelConfig.value.channel_type = data.value\n\n  if (cache) {\n  } else {\n    agentFormStore.resetState()\n    await nextTick()\n    agentFormStore.agent_id = +agent_id || 0\n    agentFormStore.agent_type = agentFormStore.form_data.custom_config.agent_type = agentType.value\n    agentFormStore.form_data.logo = getAgentByAgentType(agentType.value).icon\n    agentFormStore.form_data.group_id = group_id || 0\n    await agentFormStore.loadDetailData()\n  }\n  // Load necessary data\n  agentFormStore.loadGroupOptions()\n  agentFormStore.loadChannelOptions()\n\n  visible.value = true\n}\n\nconst handleClose = () => {\n  visible.value = false\n  emits('cancel')\n}\n\nconst handleSave = async () => {\n  const comp_ref = agentFormRef.value\n  if (comp_ref && comp_ref.validateForm) {\n    const valid = await comp_ref.validateForm()\n    if (!valid) return Promise.reject()\n    await comp_ref.onChannelSave?.()\n    await agentFormStore.saveAgentData()\n    emits('success', {\n      agent_id: agentFormStore.agent_id,\n      agent_type: agentFormStore.agent_type,\n      action: editable.value ? 'update' : 'create',\n    })\n  }\n\n  handleClose()\n}\n\ndefineExpose({ open, close: handleClose })\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/guide.vue",
    "content": "<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue'\nimport { nextTick, reactive, ref, watch } from 'vue'\nimport { useAgentFormStore } from './store'\nimport UploadImage from '@/components/Upload/image.vue'\n\nimport { copyToClip } from '@/utils/copy'\nimport { generateRandomId } from '@/utils'\nimport { generateInputRules } from '@/utils/form-rule'\n\nconst agentFormStore = useAgentFormStore()\n\nconst case_form_ref = ref()\nconst scene_form_ref = ref()\nconst use_case_list = ref(agentFormStore.form_data.use_cases.filter(item => item.type === 'case'))\nconst use_scene_list = ref([])\nfor (let i = 0; i < 3; i++) {\n  const list = agentFormStore.form_data.use_cases.filter(item => item.type === 'scene')\n  use_scene_list.value.push(list[i] || {\n    id: '',\n    image: '',\n    scene: '',\n    desc: '',\n  })\n}\nconst case_visible = ref(false)\nconst case_form = reactive({\n  id: '',\n  input_text: '',\n  output_text: '',\n})\nconst scene_visible = ref(false)\nconst scene_form = reactive({\n  id: '',\n  image: '',\n  scene: '',\n  desc: '',\n})\n\nconst onCopy = async (text = '') => {\n  await copyToClip(text)\n  ElMessage.success(window.$t('action_copy_success'))\n}\nconst onCaseOpen = async ({ data = {} } = {}) => {\n  case_form.id = data.id || ''\n  case_form.input_text = data.input_text || ''\n  case_form.output_text = data.output_text || ''\n  case_visible.value = true\n  await nextTick()\n  case_form_ref.value.clearValidate()\n}\nconst onCaseDelete = ({ data = {}, index = -1 } = {}) => {\n  use_case_list.value.splice(index, 1)\n}\nconst onCaseConfirm = () => {\n  case_form_ref.value.validate((valid: boolean) => {\n    if (!valid)\n      return\n    const id = case_form.id || generateRandomId(8)\n    const data = use_case_list.value.find(item => item.id === id)\n    if (data) {\n      data.input_text = case_form.input_text || ''\n      data.output_text = case_form.output_text || ''\n    }\n    else {\n      use_case_list.value.push({\n        type: 'case',\n        id,\n        input_text: case_form.input_text || '',\n        output_text: case_form.output_text || '',\n      })\n    }\n    onCaseCancel()\n  })\n}\nconst onCaseCancel = () => {\n  case_visible.value = false\n}\nconst onSceneOpen = async ({ data = {} } = {}) => {\n  scene_form.id = data.id || ''\n  scene_form.image = data.image || ''\n  scene_form.scene = data.scene || ''\n  scene_form.desc = data.desc || ''\n  scene_visible.value = true\n  await nextTick()\n  scene_form_ref.value.clearValidate()\n}\nconst onSceneDelete = ({ data = {}, index = -1 } = {}) => {\n  use_scene_list.value.splice(index, 1)\n  use_scene_list.value.push({\n    id: '',\n    image: '',\n    scene: '',\n    desc: '',\n  })\n}\nconst onSceneConfirm = () => {\n  scene_form_ref.value.validate((valid: boolean) => {\n    if (!valid)\n      return\n    const id = scene_form.id || generateRandomId(8)\n    const data = use_scene_list.value.find(item => item.id === id)\n    if (data) {\n      data.image = scene_form.image || ''\n      data.scene = scene_form.scene || ''\n      data.desc = scene_form.desc || ''\n    }\n    else {\n      const index = use_scene_list.value.findIndex(item => !item.id)\n      if (index >= 0) {\n        use_scene_list.value.splice(index, 1, {\n          type: 'scene',\n          id,\n          image: scene_form.image || '',\n          scene: scene_form.scene || '',\n          desc: scene_form.desc || '',\n        })\n      }\n    }\n    onSceneCancel()\n  })\n}\nconst onSceneCancel = () => {\n  scene_visible.value = false\n}\n\nwatch(() => use_case_list.value, () => {\n  agentFormStore.form_data.use_cases = [...use_case_list.value, ...use_scene_list.value].filter(item => item.id)\n}, { immediate: true, deep: true })\nwatch(() => use_scene_list.value, () => {\n  agentFormStore.form_data.use_cases = [...use_case_list.value, ...use_scene_list.value].filter(item => item.id)\n}, { immediate: true, deep: true })\n</script>\n\n<template>\n  <div class=\"h-full overflow-y-auto relative\">\n    <div class=\"p-6 bg-white rounded\">\n      <h4 class=\"text-base text-[#1D1E1F]\">\n        {{ $t('usage_case') }}\n      </h4>\n      <div class=\"text-sm text-[#9A9A9A] mt-4\">\n        {{ $t('usage_case_desc') }}\n      </div>\n      <!-- <div class=\"flex flex-wrap gap-5 mt-5\"> -->\n      <!-- flex-none w-[48%] -->\n      <!-- <div class=\"columns-2 gap-4 space-y-4\"> -->\n      <div class=\"flex flex-wrap gap-5 mt-5\">\n        <div\n          v-for=\"(item, index) in use_case_list\" :key=\"index\"\n          class=\"flex-none w-[48%] box-border  p-5 bg-[#F7F9FC] rounded relative group cursor-pointer break-inside-avoid\"\n        >\n          <div class=\"bg-white rounded p-5 relative\">\n            <div class=\"text-sm text-[#9A9A9A]\">\n              {{ $t('input') }}\n            </div>\n            <div class=\"text-sm text-[#1D1E1F] break-words mt-4\">\n              {{ item.input_text || '--' }}\n            </div>\n            <div class=\"absolute right-8 -bottom-9\">\n              <svg-icon width=\"50\" height=\"50\" name=\"arrow-down\" color=\"white\" />\n            </div>\n          </div>\n          <div class=\"bg-[#E6EEFF] rounded p-5 mt-4\">\n            <div class=\"flex items-center justify-between\">\n              <div class=\"text-sm text-[#9A9A9A]\">\n                {{ $t('output') }}\n              </div>\n              <svg-icon name=\"copy\" color=\"#4F5052\" @click=\"onCopy(item.output_text)\" />\n            </div>\n            <div class=\"text-sm text-[#1D1E1F] text-wrap break-words whitespace-pre-wrap mt-4 truncate line-clamp-6\" style=\"-webkit-line-clamp: 12;\">\n              {{ item.output_text || '--' }}\n            </div>\n          </div>\n          <div\n            class=\"absolute inset-0 items-center justify-center bg-[#393C40] bg-opacity-10 rounded hidden group-hover:flex\"\n          >\n            <el-button type=\"primary\" @click=\"onCaseOpen({ data: item })\">\n              {{ $t('action_edit') }}\n            </el-button>\n            <el-button @click=\"onCaseDelete({ data: item, index })\">\n              {{ $t('action_delete') }}\n            </el-button>\n          </div>\n        </div>\n        <div\n          class=\"flex-none w-[48%] h-[140px] flex-center flex-col p-5 bg-[#F7F9FC] rounded cursor-pointer\"\n          @click.stop=\"onCaseOpen\"\n        >\n          <el-icon size=\"28\" color=\"#9A9A9A\">\n            <Plus />\n          </el-icon>\n          <p class=\"text-base text-[#9A9A9A] mt-4\">\n            {{ $t('action_add') }}\n          </p>\n        </div>\n      </div>\n    </div>\n    <div class=\"p-6 bg-white rounded mt-6\">\n      <h4 class=\"text-base text-[#1D1E1F]\">\n        {{ $t('usage_scene') }}\n      </h4>\n      <div class=\"text-sm text-[#9A9A9A] mt-4\">\n        {{ $t('usage_scene_desc') }}\n      </div>\n      <div class=\"flex flex-wrap justify-between gap-5 mt-5\">\n        <div\n          v-for=\"(item, index) in use_scene_list\" :key=\"index\"\n          class=\"flex-1 max-w-[330px] px-4 box-border flex flex-col items-center text-center pt-3 pb-10 relative cursor-pointer group\"\n        >\n          <div v-if=\"item.image\" class=\"w-[220px] h-[205px]\">\n            <img :src=\"item.image\" class=\"w-full h-full object-cover\">\n          </div>\n          <div\n            v-else class=\"w-[220px] h-[205px] border flex-center flex-col mx-auto\"\n            @click.stop=\"onSceneOpen({ data: item })\"\n          >\n            <el-icon size=\"28\" color=\"#9A9A9A\">\n              <Plus />\n            </el-icon>\n            <p class=\"text-base text-[#9A9A9A] mt-4\">\n              {{ $t('action_add') }}\n            </p>\n          </div>\n          <template v-if=\"item.id\">\n            <h6 class=\"text-base text-[#1D1E1F] mt-5 text-center max-w-[10em] truncate\" :title=\"item.scene || ''\">\n              {{ item.scene || '' }}\n            </h6>\n            <p class=\"text-xs text-[#9A9A9A] mt-4 text-center text-wrap break-words whitespace-pre-wrap max-w-[24em] truncate line-clamp-6\" :title=\"item.desc || ''\">\n              {{ item.desc || '' }}\n            </p>\n            <div\n              class=\"absolute inset-0 items-center justify-center bg-[#393C40] bg-opacity-10 rounded hidden group-hover:flex\"\n            >\n              <el-button type=\"primary\" @click.stop=\"onSceneOpen({ data: item })\">\n                {{ $t('action_edit') }}\n              </el-button>\n              <el-button @click=\"onSceneDelete({ data: item, index })\">\n                {{ $t('action_delete') }}\n              </el-button>\n            </div>\n          </template>\n          <template v-else>\n            <el-skeleton v-if=\"!item.scene\" class=\"mt-6\" :rows=\"1\" />\n          </template>\n        </div>\n      </div>\n    </div>\n\n    <slot name=\"footer\" />\n\n    <el-dialog\n      v-model=\"case_visible\" :title=\"case_form.id ? $t('action_edit') : $t('action_add')\" align-center\n      width=\"600px\"\n    >\n      <el-form ref=\"case_form_ref\" :model=\"case_form\" label-width=\"64px\" label-position=\"left\">\n        <el-form-item :label=\"$t('input')\" prop=\"input_text\" :rules=\"[...generateInputRules({ message: 'form_input_placeholder' }), { max: 200, message: $t('form_input_placeholder_max_length', { max: 200 }) }]\">\n          <el-input v-model=\"case_form.input_text\" size=\"large\" :maxlength=\"200\" show-word-limit />\n        </el-form-item>\n        <el-form-item :label=\"$t('output')\" prop=\"output_text\" :rules=\"[...generateInputRules({ message: 'form_input_placeholder' }), { max: 1000, message: $t('form_input_placeholder_max_length', { max: 1000 }) }]\">\n          <el-input v-model=\"case_form.output_text\" type=\"textarea\" size=\"large\" rows=\"10\" resize=\"none\" :maxlength=\"1000\" show-word-limit />\n        </el-form-item>\n      </el-form>\n\n      <template #footer>\n        <div class=\"py-4 flex items-center justify-center\">\n          <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" @click=\"onCaseConfirm\">\n            {{ $t('action_confirm') }}\n          </ElButton>\n          <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click=\"onCaseCancel\">\n            {{\n              $t('action_cancel')\n            }}\n          </ElButton>\n        </div>\n      </template>\n    </el-dialog>\n\n    <el-dialog\n      v-model=\"scene_visible\" :title=\"scene_form.id ? $t('action_edit') : $t('action_add')\" align-center\n      width=\"600px\"\n    >\n      <el-form ref=\"scene_form_ref\" :model=\"scene_form\" label-width=\"102px\" label-position=\"left\">\n        <el-form-item :label=\"$t('pictorial_image')\" prop=\"image\" :rules=\"generateInputRules({ message: 'form_upload_placeholder' })\">\n          <UploadImage v-model=\"scene_form.image\" class=\"!w-[120px] !h-[112px]\" />\n        </el-form-item>\n        <el-form-item :label=\"$t('scene')\" prop=\"scene\" :rules=\"[...generateInputRules({ message: 'form_input_placeholder' }), { max: 20, message: $t('form_input_placeholder_max_length', { max: 20 }) }]\">\n          <el-input v-model=\"scene_form.scene\" size=\"large\" :maxlength=\"20\" show-word-limit />\n        </el-form-item>\n        <el-form-item :label=\"$t('description')\" prop=\"desc\" :rules=\"[...generateInputRules({ message: 'form_input_placeholder' }), { max: 50, message: $t('form_input_placeholder_max_length', { max: 50 }) }]\">\n          <el-input v-model=\"scene_form.desc\" type=\"textarea\" size=\"large\" rows=\"5\" resize=\"none\" :maxlength=\"50\" show-word-limit />\n        </el-form-item>\n      </el-form>\n\n      <template #footer>\n        <div class=\"py-4 flex items-center justify-center\">\n          <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" @click=\"onSceneConfirm\">\n            {{ $t('action_confirm') }}\n          </ElButton>\n          <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click=\"onSceneCancel\">\n            {{\n              $t('action_cancel')\n            }}\n          </ElButton>\n        </div>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style scoped>\n\n</style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header back :title=\"title || agentFormStore.form_data.name\" class=\"mb-5\">\n      <template #title_prefix>\n        <el-image v-if=\"agentFormStore.form_data.logo\" :src=\"agentFormStore.form_data.logo\" class=\"w-8 rounded\" />\n        <div v-else class=\"size-8 rounded\" />\n      </template>\n      <template #title_suffix>\n        <el-button class=\"!size-5 !p-0 flex-center\" @click=\"handleEdit\">\n          <svg-icon name=\"edit\" width=\"14\" />\n        </el-button>\n      </template>\n    </Header>\n    <el-tabs v-model=\"active_tab_name\" class=\"flex-1 agent-tabs el-tabs--full\">\n      <el-tab-pane :label=\"$t('app_config')\" name=\"first\" lazy>\n        <div id=\"app-config-full-screen-hook\" v-loading=\"agentFormStore.loading\" class=\"relative h-full flex bg-white\">\n          <div class=\"flex-1 flex flex-col overflow-hidden\">\n            <AgentForm\n              ref=\"agentFormRef\"\n              class=\"flex-1 py-7 px-4 overflow-y-auto\"\n              :agent-type=\"agentFormStore.agent_type\"\n            />\n\n            <div class=\"border-t px-4 py-5\">\n              <el-button type=\"primary\" size=\"large\" :loading=\"agentFormStore.saving\" @click=\"onSave\">\n                {{ $t('action_save') }}\n              </el-button>\n            </div>\n          </div>\n          <div class=\"flex-none w-px border-r\" />\n          <template v-if=\"agentFormStore.agent_option_data.mode === 'chat'\">\n            <ChatView ref=\"chatRef\" class=\"flex-1 overflow-hidden\" @save=\"onSave\" />\n          </template>\n          <template v-else-if=\"agentFormStore.agent_option_data.mode === 'completion'\">\n            <CompletionView class=\"flex-1 py-7 overflow-hidden\" />\n          </template>\n        </div>\n      </el-tab-pane>\n      <el-tab-pane :label=\"$t('usage_guide')\" name=\"second\" lazy>\n        <GuideView>\n          <template #footer>\n            <div class=\"border-t px-4 py-5 mt-8 sticky bottom-0 left-0 right-0 bg-white z-10\">\n              <el-button type=\"primary\" size=\"large\" :loading=\"agentFormStore.saving\" @click=\"onSave\">\n                {{ $t('action_save') }}\n              </el-button>\n            </div>\n          </template>\n        </GuideView>\n      </el-tab-pane>\n      <el-tab-pane v-if=\"!isWorkEnv\" :label=\"$t('dialogue_record')\" name=\"third\" lazy>\n        <DialogueRecordView type=\"agent\" :related-id=\"agentFormStore.agent_id\" />\n      </el-tab-pane>\n    </el-tabs>\n    <InfoDrawer ref=\"infoDrawerRef\" @success=\"eventBus.emit('agent-change')\" @cancel=\"handleCancel\" />\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted, provide, ref } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\nimport AgentForm from './platform/index.vue'\nimport GuideView from './guide.vue'\nimport InfoDrawer from './drawer.vue'\nimport ChatView from './response/chat.vue'\nimport CompletionView from './response/completion.vue'\n\nimport DialogueRecordView from '@/components/DialogueRecord/index.vue'\n\nimport { useAgentFormStore } from './store'\n\nimport { AGENT_TYPE } from '@/constants/platform/agent'\nimport { getAgentByAgentType } from '@/constants/platform/config'\nimport type { AgentType } from '@/constants/platform/config'\n\nimport eventBus from '@/utils/event-bus'\n\nimport { useEnv } from '@/hooks/useEnv'\n\nconst route = useRoute()\nconst router = useRouter()\nconst agentFormStore = useAgentFormStore()\nconst { isWorkEnv } = useEnv()\n\nconst chatRef = ref<InstanceType<typeof ChatView>>()\nconst agentFormRef = ref<InstanceType<typeof AgentForm>>()\nconst infoDrawerRef = ref<InstanceType<typeof InfoDrawer>>()\n\nconst active_tab_name = ref('first')\nconst channelConfig = ref({})\nconst title = ref()\nprovide('channelConfig', channelConfig)\n\nconst onSave = async ({ restart = false } = {}) => {\n  if (agentFormStore.saving) return\n  const comp_ref = agentFormRef.value\n  let agent_id = ''\n  if (comp_ref && comp_ref.save) {\n    agentFormStore.saving = true\n    const { data = {} } = await comp_ref.save().catch(() => {\n      agentFormStore.saving = false\n    })\n    agent_id = data.agent_id\n  } else if (comp_ref && comp_ref.validateForm) {\n    const valid = await comp_ref.validateForm()\n    if (!valid) return Promise.reject()\n    await agentFormStore.saveAgentData().catch(() => {\n      agentFormStore.saving = false\n    })\n    agentFormStore.saving = true\n    agent_id = agentFormStore.agent_id\n  }\n  eventBus.emit('agent-change', { agent_id })\n  if (agent_id) await router.replace({ name: 'AgentCreate', query: { type: agentFormStore.agent_type, agent_id } })\n  agentFormStore.saving = false\n  if (chatRef.value) {\n    if (restart || chatRef.value?.getIsConfigChanged()) chatRef.value?.restart()\n  }\n}\n\nconst handleEdit = () => {\n  title.value = agentFormStore.form_data.name\n  if (infoDrawerRef.value) {\n    infoDrawerRef.value.open({\n      agent_type: agentFormStore.agent_type,\n      agent_id: agentFormStore.agent_id,\n      data: {\n        channel_config: channelConfig.value,\n      },\n      cache: true,\n    })\n  }\n}\n\nconst handleCancel = () => {\n  agentFormStore.form_data.name = title.value\n}\n\nconst handleAgentChange = () => {\n  // 重新加载数据以更新标题\n  title.value = agentFormStore.form_data.name\n}\n\nonMounted(async () => {\n  agentFormStore.resetState()\n  eventBus.on('agent-change', handleAgentChange)\n  await nextTick()\n  const agent_type = (route.query.type as string) || 'prompt'\n  agentFormStore.is_new = route.query.is_new === 'true'\n  agentFormStore.agent_id = Number(route.query.agent_id as string)\n  agentFormStore.agent_type = agent_type\n  // 加载详情\n  await agentFormStore.loadDetailData()\n  // 加载渠道\n  agentFormStore.loadChannelOptions()\n\n  if (agent_type !== AGENT_TYPE.PROMPT) {\n    const data = getAgentByAgentType(agent_type as AgentType)\n    channelConfig.value.name = data.channelType\n    channelConfig.value.channel_type = data.channelValue\n  }\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/53ai-agent.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <ElForm ref=\"agentFormRef\" :model=\"store.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"flex items-center justify-between mb-3\">\n          <div class=\"flex items-center gap-1\">\n            <h3 class=\"text-base text-[#1D1E1F]\">\n              {{ $t('53ai') }}\n            </h3>\n          </div>\n        </div>\n        <el-form-item :label=\"$t('module.website_info_name')\">\n          <el-select v-model=\"store.form_data.custom_config.provider_id\" size=\"large\" @change=\"onProviderChange\">\n            <el-option v-for=\"item in providers\" :key=\"item.provider_id\" :label=\"item.name\" :value=\"item.provider_id\" />\n          </el-select>\n        </el-form-item>\n        <AgentType\n          v-model=\"store.agent_type\"\n          :disabled=\"Boolean(store.agent_id)\"\n          :options=\"agentTypeOptions\"\n          @change=\"onAgentTypeChange\"\n        />\n\n        <el-form-item\n          :label=\"$t('select_agent')\"\n          prop=\"custom_config.chat53ai_agent_id\"\n          :rules=\"generateInputRules({ message: 'form_select_placeholder' })\"\n        >\n          <SelectPlus\n            v-model=\"store.form_data.custom_config.chat53ai_agent_id\"\n            :use-i18n=\"false\"\n            size=\"large\"\n            :options=\"bots\"\n            @change=\"onBotChange\"\n          />\n        </el-form-item>\n\n        <div class=\"text-base text-[#1D1E1F] font-medium mt-6 mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"store.form_data\" />\n      </template>\n      <template v-else>\n        <template v-if=\"store.agent_type === AGENT_TYPES['53AI_WORKFLOW']\">\n          <FieldInput\n            v-model:list=\"store.form_data.settings.input_fields\"\n            :title=\"$t('agent.input_variable')\"\n            allow-update\n            :update-request=\"inputUpdateRequest\"\n            type=\"input\"\n            :agent-type=\"store.agent_type\"\n          />\n          <FieldInput\n            v-model:list=\"store.form_data.settings.output_fields\"\n            :title=\"$t('agent.output_variable')\"\n            type=\"output\"\n            allow-add\n            :agent-type=\"store.agent_type\"\n          />\n          <RelateApp />\n        </template>\n        <template v-else>\n          <BaseConfig />\n          <RelateApp />\n          <ExpandConfig />\n        </template>\n        <UseScope />\n      </template>\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport AgentType from '../components/agent-type.vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport RelateApp from '../components/relate-agents.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport UseScope from '../components/use-scope.vue'\nimport FieldInput from '../components/field-input.vue'\n\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { AGENT_TYPES, PROVIDER_VALUES } from '@/constants/platform/config'\n\nimport providersApi from '@/api/modules/providers/index'\nimport { transformProviderList } from '@/api/modules/providers/transform'\nimport { ProviderItem } from '@/api/modules/providers/types'\nimport agentApi, { BotItem53aiItem, transform53aiBotItem } from '@/api/modules/agent'\n\nconst props = defineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst store = useAgentFormStore()\n\nconst agentFormRef = ref()\n\nconst agentTypeOptions = [\n  {\n    icon: 'agent',\n    label: window.$t('agent.53ai.agent_type_chat'),\n    description: window.$t('agent.53ai.agent_type_chat_desc'),\n    value: AGENT_TYPES['53AI_AGENT'],\n  },\n  {\n    icon: 'completion-agent',\n    label: window.$t('agent.53ai.agent_type_workflow'),\n    description: window.$t('agent.53ai.agent_type_workflow_desc'),\n    value: AGENT_TYPES['53AI_WORKFLOW'],\n  },\n]\nconst providers = ref<ProviderItem[]>([])\nconst bots = ref<BotItem53aiItem[]>([])\n\n// 53ai 的 agent 选择后，需要设置 那边的开场白和建议问题\nconst onBotChange = (data: { value: string; option: any }) => {\n  if (!store.agent_id) {\n    store.form_data.logo = data.option.logo\n    store.form_data.name = data.option.name\n    store.form_data.description = data.option.description || ''\n  }\n  store.form_data.custom_config.chat53ai_agent_id = data.value\n  store.form_data.settings.opening_statement = data.option.opening_statement\n  store.form_data.settings.suggested_questions = data.option.suggested_questions.map(item => {\n    return {\n      id: Math.random().toString(36).substring(2, 15),\n      content: item,\n    }\n  })\n}\n\nconst inputUpdateRequest = async () => {\n  const res = await agentApi.chat53ai.workflow_field_list(store.form_data.custom_config.chat53ai_agent_id)\n  return res.user_input_form.map(item => {\n    const value: any = Object.values(item)[0]\n    return {\n      id: value.id,\n      variable: value.variable,\n      type: value.type_53ai,\n      label: value.label,\n      desc: value.desc,\n      required: value.required,\n      multiple: value.multiple,\n      options: value.options_53ai,\n      max_length: value.max_length,\n      show_word_limit: value.showWordLimit,\n      date_format: value.mode || '',\n      file_type: value.docType,\n      file_accept: value.accept,\n      file_size: value.size,\n      file_limit: value.limit,\n      is_system: true,\n    }\n  })\n}\n\nconst load53aiBots = async () => {\n  const list = await agentApi.chat53ai.bots_list({\n    provider_id: store.form_data.custom_config.provider_id,\n  })\n  bots.value = list.map(transform53aiBotItem)\n}\nconst load53aiWorkflows = async () => {\n  const list = await agentApi.chat53ai.workflow_list({\n    provider_id: store.form_data.custom_config.provider_id,\n  })\n  bots.value = list.map(transform53aiBotItem)\n}\n\nconst loadApp = async () => {\n  if (store.agent_type === AGENT_TYPES['53AI_AGENT']) {\n    load53aiBots()\n  } else {\n    load53aiWorkflows()\n  }\n}\n\nconst onProviderChange = () => {\n  loadApp()\n  store.form_data.custom_config.chat53ai_agent_id = ''\n}\nconst loadProviders = async () => {\n  const list = await providersApi.list({\n    providerType: PROVIDER_VALUES['53AI'],\n  })\n  providers.value = transformProviderList(list)\n\n  const customConfig = store.form_data.custom_config\n  if (providers.value.length && !customConfig.provider_id) {\n    customConfig.provider_id = providers.value[0].provider_id\n  }\n  loadApp()\n}\n\nconst onAgentTypeChange = () => {\n  store.form_data.custom_config.chat53ai_agent_id = ''\n  loadApp()\n}\n\nonMounted(() => {\n  if (props.showChannelConfig) {\n    loadProviders()\n  }\n})\n\ndefineExpose({\n  validateForm() {\n    return agentFormRef.value && agentFormRef.value.validate()\n  },\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/app-builder-agent.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <ElForm ref=\"formRef\" :model=\"store.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mb-4\">\n          {{ $t('app_builder') }}\n        </div>\n\n        <el-form-item :label=\"$t('module.website_info_name')\">\n          <el-select v-model=\"store.form_data.custom_config.provider_id\" size=\"large\" @change=\"onProviderChange\">\n            <el-option v-for=\"item in providers\" :key=\"item.provider_id\" :label=\"item.name\" :value=\"item.provider_id\" />\n          </el-select>\n        </el-form-item>\n\n        <ElFormItem\n          prop=\"custom_config.app_builder_bot_id\"\n          :label=\"$t('select_agent')\"\n          :rules=\"generateInputRules({ message: 'form_select_placeholder' })\"\n        >\n          <SelectPlus\n            v-model=\"store.form_data.custom_config.app_builder_bot_id\"\n            :use-i18n=\"false\"\n            size=\"large\"\n            :options=\"bots\"\n          />\n        </ElFormItem>\n\n        <div class=\"text-base text-[#1D1E1F] font-medium mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"store.form_data\" />\n      </template>\n\n      <template v-else>\n        <BaseConfig />\n        <RelateApp />\n        <ExpandConfig />\n        <UseScope />\n      </template>\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport UseScope from '../components/use-scope.vue'\nimport RelateApp from '../components/relate-agents.vue'\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\n\nimport { PROVIDER_VALUES } from '@/constants/platform/config'\nimport providersApi from '@/api/modules/providers/index'\nimport { transformProviderList } from '@/api/modules/providers/transform'\nimport agentApi, { AppBuilderBotItem, transformAppBuilderBotItem } from '@/api/modules/agent'\nimport { ProviderItem } from '@/api/modules/providers/types'\n\nconst props = defineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst store = useAgentFormStore()\n\nconst providers = ref<ProviderItem[]>([])\nconst bots = ref<AppBuilderBotItem[]>([])\n\nconst formRef = ref()\n\nconst loadBots = async () => {\n  const list = await agentApi.appbuilder.bots_list({\n    provider_id: store.form_data.custom_config.provider_id,\n  })\n  bots.value = list.map(transformAppBuilderBotItem)\n}\n\nconst loadProviders = async () => {\n  const list = await providersApi.list({\n    providerType: PROVIDER_VALUES.APP_BUILDER,\n  })\n  providers.value = transformProviderList(list)\n\n  if (providers.value.length && !store.form_data.custom_config.provider_id) {\n    store.form_data.custom_config.provider_id = providers.value[0].provider_id\n  }\n  loadBots()\n}\n\nconst onProviderChange = () => {\n  loadBots()\n  store.form_data.custom_config.app_builder_bot_id = ''\n}\n\nonMounted(() => {\n  if (props.showChannelConfig) {\n    loadProviders()\n  }\n})\n\nconst validateForm = async () => formRef.value.validate()\n\ndefineExpose({\n  validateForm,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/bailian.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <template v-if=\"showChannelConfig\">\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-1\">\n          <h3 class=\"text-base text-[#1D1E1F]\">\n            {{ $t('bailian') }}\n          </h3>\n          <ElPopover content=\"Right Top prompts info\" placement=\"right-start\" width=\"480\">\n            <template #reference>\n              <div class=\"flex-center text-[#9A9A9A] gap-1 ml-1\">\n                <svg-icon name=\"help\" width=\"14\" color=\"#999\" />\n                <span class=\"text-sm\">{{ $t('how_get') }}</span>\n              </div>\n            </template>\n            <div\n              class=\"whitespace-pre-wrap text-sm text-[#333] leading-6\"\n              v-html=\"\n                $t('bailian_agent_get_tip', {\n                  url: `<a class='text-[#5A6D9E] underline' href='https://bailian.console.aliyun.com/?tab=app#/app-center' target='_blank'>https://bailian.console.aliyun.com/?tab=app#/app-center</a>`,\n                })\n              \"\n            />\n          </ElPopover>\n        </div>\n      </div>\n      <ElForm ref=\"channelFormRef\" :model=\"channelForm\" label-position=\"top\" class=\"mt-3\">\n        <ElFormItem\n          v-if=\"false\"\n          :label=\"$t('module.platform_model_base_url')\"\n          prop=\"base_url\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text', 'link'] })\"\n        >\n          <ElInput v-model=\"channelForm.base_url\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n        <ElFormItem\n          :label=\"$t('api_appid')\"\n          prop=\"model\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n        >\n          <ElInput v-model=\"channelForm.model\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n        <ElFormItem\n          :label=\"$t('api_key')\"\n          prop=\"key\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text'] })\"\n        >\n          <ElInput v-model=\"channelForm.key\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n        <ElFormItem\n          :label=\"$t('agent_type')\"\n          prop=\"config.agent_type\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n        >\n          <ElSelect\n            v-model=\"channelForm.config.agent_type\"\n            class=\"max-w-[360px]\"\n            size=\"large\"\n            :placeholder=\"$t('form_select_placeholder')\"\n            :disabled=\"channelEditable\"\n          >\n            <ElOption value=\"chat\" :label=\"$t('agent_type_chat')\" />\n            <!-- <ElOption value=\"completion\" :label=\"$t('agent_type_completion')\" />\n\t\t\t\t\t\t<ElOption value=\"workflow\" :label=\"$t('agent_type_workflow')\" /> -->\n          </ElSelect>\n        </ElFormItem>\n      </ElForm>\n    </template>\n\n    <ElForm ref=\"agentFormRef\" :model=\"agentFormStore.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mt-6 mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"agentFormStore.form_data\" />\n      </template>\n\n      <template v-else>\n        <BaseConfig />\n        <RelateApp />\n        <ExpandConfig />\n        <UseScope />\n      </template>\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, reactive, ref, watch } from 'vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport UseScope from '../components/use-scope.vue'\nimport RelateApp from '../components/relate-agents.vue'\n\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { channelApi } from '@/api/modules/channel'\n\nconst props = defineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst agentFormStore = useAgentFormStore()\n\nconst channelInfo = inject('channelConfig') || {}\nconst channelFormRef = ref()\nconst channelEditable = ref(false)\nconst channelForm = reactive({\n  key: '',\n  base_url: '',\n  models: [],\n  model: '',\n  config: {\n    agent_type: 'chat',\n  },\n})\nconst agentFormRef = ref()\n\nconst onChannelSave = async () => {\n  const valid = await channelFormRef.value.validate()\n  if (!valid) return\n  const models = [channelForm.model]\n  const name = 'bailian'\n  const saveData = {\n    channel_id: channelInfo.value.channel_id,\n    key: channelForm.key,\n    base_url: channelForm.base_url,\n    config: channelForm.config,\n    models,\n    name,\n  }\n  const resultData = await channelApi.save({\n    data: saveData,\n  })\n  Object.assign(channelInfo.value, resultData)\n  if (!saveData.channel_id) saveData.channel_id = resultData.channel_id\n  agentFormStore.form_data.custom_config.channel_config = saveData\n  agentFormStore.form_data.model = models[0]\n  channelEditable.value = true\n}\n\nconst validateForm = async () => {\n  channelFormRef.value && channelFormRef.value.validate()\n  return agentFormRef.value && agentFormRef.value.validate()\n}\n\nwatch(\n  () => agentFormStore.agent_data,\n  ({ channel_config = {} } = {}) => {\n    channelEditable.value = !!+channel_config.channel_id\n    channelInfo.value.channel_id = +channel_config.channel_id || 0\n    channelInfo.value.key = channelForm.key = channel_config.key || ''\n    channelInfo.value.base_url = channelForm.base_url = channel_config.base_url || 'https://dashscope.aliyuncs.com'\n    channelInfo.value.models = channelForm.models = channel_config.models || []\n    channelInfo.value.model = channelForm.model = channelForm.models[0] || ''\n    channelInfo.value.config = channelForm.config = {\n      ...(channel_config.config || {}),\n      agent_type: channel_config.config?.agent_type || 'chat',\n    }\n  },\n  { immediate: true, deep: true }\n)\n\ndefineExpose({\n  validateForm,\n  onChannelSave,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/coze-cn.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <ElForm ref=\"form_ref\" :model=\"store.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mb-3\">\n          {{ $t('agent_app.coze_agent_cn') }}\n        </div>\n        <el-form-item :label=\"$t('module.website_info_name')\">\n          <el-select v-model=\"store.form_data.custom_config.provider_id\" size=\"large\" @change=\"onProviderChange\">\n            <el-option v-for=\"item in providers\" :key=\"item.provider_id\" :label=\"item.name\" :value=\"item.provider_id\" />\n          </el-select>\n        </el-form-item>\n\n        <AgentType\n          v-model=\"store.agent_type\"\n          :disabled=\"!!store.agent_id\"\n          :options=\"agentTypeOptions\"\n          @change=\"handleAgentTypeChange\"\n        />\n\n        <el-form-item\n          v-if=\"store.agent_type === AGENT_TYPES.COZE_WORKFLOW_CN\"\n          class=\"mb-9\"\n          prop=\"custom_config.coze_bot_url\"\n          :label=\"$t('agent.coze.workflow_link')\"\n          :rules=\"generateInputRules({ message: 'form_link_validator', validator: ['link'] })\"\n        >\n          <el-input v-model=\"store.form_data.custom_config.coze_bot_url\" size=\"large\" />\n        </el-form-item>\n        <template v-else-if=\"store.agent_type === AGENT_TYPES.COZE_AGENT_CN\">\n          <div class=\"flex items-center gap-4 mb-9\">\n            <ElFormItem\n              class=\"flex-1 mb-0\"\n              :label=\"$t('agent.coze.workspace')\"\n              prop=\"custom_config.coze_workspace_id\"\n              :rules=\"generateInputRules({ message: 'form_select_placeholder' })\"\n            >\n              <SelectPlus\n                v-model=\"store.form_data.custom_config.coze_workspace_id\"\n                size=\"large\"\n                :use-i18n=\"false\"\n                :options=\"workspaces\"\n                @change=\"loadBots\"\n              />\n            </ElFormItem>\n            <ElFormItem\n              class=\"flex-1 mb-0\"\n              :label=\"$t('agent.name')\"\n              prop=\"custom_config.coze_bot_id\"\n              :rules=\"generateInputRules({ message: 'form_select_placeholder' })\"\n            >\n              <SelectPlus\n                v-model=\"store.form_data.custom_config.coze_bot_id\"\n                size=\"large\"\n                :options=\"bots\"\n                :use-i18n=\"false\"\n                @change=\"onBotChange\"\n              />\n            </ElFormItem>\n          </div>\n        </template>\n        <div class=\"text-base text-[#1D1E1F] font-medium mb-4\">\n          {{ $t('agent.base_info') }}\n        </div>\n        <AgentInfo v-model=\"store.form_data\" />\n      </template>\n      <template v-if=\"!showChannelConfig\">\n        <template v-if=\"store.agent_type === AGENT_TYPES.COZE_WORKFLOW_CN\">\n          <FieldInput\n            v-model:list=\"store.form_data.settings.input_fields\"\n            :title=\"$t('agent.input_variable')\"\n            allow-add\n            type=\"input\"\n            :agent-type=\"store.agent_type\"\n          />\n          <FieldInput\n            v-model:list=\"store.form_data.settings.output_fields\"\n            :title=\"$t('agent.output_variable')\"\n            allow-add\n            type=\"output\"\n            :agent-type=\"store.agent_type\"\n          />\n          <RelateApp />\n        </template>\n        <template v-else>\n          <BaseConfig />\n          <RelateApp />\n          <ExpandConfig />\n        </template>\n        <UseScope />\n      </template>\n      <!-- <div class=\"border-t mb-4\" />\n      <LimitConfig /> -->\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport AgentType from '../components/agent-type.vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport UseScope from '../components/use-scope.vue'\nimport FieldInput from '../components/field-input.vue'\nimport RelateApp from '../components/relate-agents.vue'\n\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\n\nimport { AGENT_TYPES, PROVIDER_VALUES } from '@/constants/platform/config'\nimport providersApi from '@/api/modules/providers/index'\nimport { transformProviderList } from '@/api/modules/providers/transform'\nimport { ProviderItem } from '@/api/modules/providers/types'\nimport agentApi, {\n  CozeBotItem,\n  CozeWorkspaceItem,\n  transformCozeWorkspaceItem,\n  transformCozeBotItem,\n} from '@/api/modules/agent'\n\nconst props = defineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst store = useAgentFormStore()\n\nconst providers = ref<ProviderItem[]>([])\nconst workspaces = ref<CozeWorkspaceItem[]>([])\nconst bots = ref<CozeBotItem[]>([])\n\nconst agentTypeOptions = [\n  {\n    icon: 'agent',\n    label: window.$t('agent.coze.agent_type_chat'),\n    description: window.$t('agent.coze.agent_type_chat_desc'),\n    value: AGENT_TYPES.COZE_AGENT_CN,\n  },\n  {\n    icon: 'completion-agent',\n    label: window.$t('agent.coze.agent_type_workflow'),\n    description: window.$t('agent.coze.agent_type_workflow_desc'),\n    value: AGENT_TYPES.COZE_WORKFLOW_CN,\n  },\n]\n\nconst form_ref = ref()\n\nconst validateForm = async () => form_ref.value.validate()\n\nconst handleAgentTypeChange = (value: string) => {\n  if (value === AGENT_TYPES.COZE_AGENT_CN) {\n    store.form_data.custom_config.coze_workspace_id = workspaces.value[0].value\n    store.form_data.custom_config.coze_bot_id = bots.value[0]?.value || ''\n  } else {\n    store.form_data.custom_config.coze_workspace_id = ''\n    store.form_data.custom_config.coze_bot_id = ''\n  }\n}\n\nconst onBotChange = (data: { value: string; option: any }) => {\n  if (!store.agent_id) {\n    store.form_data.logo = data.option.icon\n    store.form_data.name = data.option.label\n    store.form_data.description = data.option.description || ''\n  }\n  // store.form_data.custom_config.coze_bot_id = value.value\n}\n\nconst loadBots = async () => {\n  const customConfig = store.form_data.custom_config\n  const list = await agentApi.coze.bots_list(customConfig.coze_workspace_id, {\n    provider_id: customConfig.provider_id,\n  })\n  bots.value = list.map(transformCozeBotItem)\n}\n\nconst loadCozeWorkspaces = async () => {\n  const list = await agentApi.coze.workspaces_list({\n    provider_id: store.form_data.custom_config.provider_id,\n  })\n  workspaces.value = list.map(transformCozeWorkspaceItem)\n\n  if (workspaces.value.length && !store.form_data.custom_config.coze_workspace_id) {\n    store.form_data.custom_config.coze_workspace_id = workspaces.value[0].value\n  }\n  loadBots()\n}\n\nconst loadProviders = async () => {\n  const list = await providersApi.list({\n    providerType: PROVIDER_VALUES.COZE_CN,\n  })\n  providers.value = transformProviderList(list)\n\n  if (providers.value.length && !store.form_data.custom_config.provider_id) {\n    store.form_data.custom_config.provider_id = providers.value[0].provider_id\n  }\n  loadCozeWorkspaces()\n}\n\nconst onProviderChange = () => {\n  loadCozeWorkspaces()\n  store.form_data.custom_config.coze_workspace_id = ''\n  store.form_data.custom_config.coze_bot_id = ''\n}\n\nonMounted(() => {\n  if (props.showChannelConfig) {\n    loadProviders()\n  }\n})\n\ndefineExpose({\n  validateForm,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/coze-osv.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <template v-if=\"showChannelConfig\">\n      <div class=\"flex items-center justify-between mb-3\">\n        <div class=\"flex items-center gap-1\">\n          <h3 class=\"text-base text-[#1D1E1F]\">\n            {{ $t('agent_app.coze_agent_cn') }}\n          </h3>\n\n          <!-- <div class=\"flex-center text-[#9A9A9A] gap-1 ml-1\" @click=\"handleOpenDialog\">\n            <svg-icon name=\"help\" width=\"14\" color=\"#999\" />\n            <span class=\"text-sm\">{{ $t('how_get') }}</span>\n          </div> -->\n        </div>\n      </div>\n      <ElForm ref=\"channelFormRef\" :model=\"channelForm\" label-position=\"top\" class=\"mt-3\">\n        <el-form-item :label=\"$t('module.website_info_name')\">\n          <el-select v-model=\"store.form_data.custom_config.provider_id\" size=\"large\">\n            <el-option v-for=\"item in providers\" :key=\"item.provider_id\" :label=\"item.name\" :value=\"item.provider_id\" />\n          </el-select>\n        </el-form-item>\n\n        <AgentType v-model=\"store.agent_type\" :disabled=\"Boolean(store.agent_id)\" :options=\"agentTypeOptions\" />\n\n        <el-form-item\n          class=\"mb-9\"\n          prop=\"base_url\"\n          :label=\"$t('agent.coze.agent_link')\"\n          :rules=\"generateInputRules({ message: 'form_link_validator', validator: ['link'] })\"\n        >\n          <el-input v-model=\"channelForm.base_url\" size=\"large\" />\n        </el-form-item>\n      </ElForm>\n    </template>\n\n    <ElForm ref=\"agentFormRef\" :model=\"store.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mt-6 mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"store.form_data\" />\n      </template>\n      <template v-else>\n        <template v-if=\"store.agent_type === AGENT_TYPES.COZE_WORKFLOW_OSV\">\n          <FieldInput\n            v-model:list=\"store.form_data.settings.input_fields\"\n            :title=\"$t('agent.input_variable')\"\n            allow-add\n            type=\"input\"\n            :agent-type=\"store.agent_type\"\n          />\n          <FieldInput\n            v-model:list=\"store.form_data.settings.output_fields\"\n            :title=\"$t('agent.output_variable')\"\n            allow-add\n            type=\"output\"\n            :agent-type=\"store.agent_type\"\n          />\n          <RelateApp />\n        </template>\n        <template v-else>\n          <BaseConfig />\n          <RelateApp />\n          <ExpandConfig />\n        </template>\n        <UseScope />\n      </template>\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, reactive, ref, watch, onMounted } from 'vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport FieldInput from '../components/field-input.vue'\nimport UseScope from '../components/use-scope.vue'\nimport RelateApp from '../components/relate-agents.vue'\nimport AgentType from '../components/agent-type.vue'\n\nimport { channelApi } from '@/api/modules/channel'\nimport providersApi from '@/api/modules/providers/index'\nimport { transformProviderList } from '@/api/modules/providers/transform'\nimport { ProviderItem } from '@/api/modules/providers/types'\n\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\n\nimport { AGENT_MODES, AGENT_TYPES, getAgentByAgentType, PROVIDER_VALUES } from '@/constants/platform/config'\n\nconst props = defineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst store = useAgentFormStore()\n\nconst channelFormRef = ref()\n\nconst agentTypeOptions = [\n  {\n    icon: 'agent',\n    label: window.$t('agent.coze.agent_type_chat'),\n    description: window.$t('agent.coze.agent_type_chat_desc'),\n    value: AGENT_TYPES.COZE_AGENT_OSV,\n  },\n  {\n    icon: 'completion-agent',\n    label: window.$t('agent.coze.agent_type_workflow'),\n    description: window.$t('agent.coze.agent_type_workflow_desc'),\n    value: AGENT_TYPES.COZE_WORKFLOW_OSV,\n  },\n]\n\nconst channelInfo = inject('channelConfig') || {}\nconst providers = ref<ProviderItem[]>([])\n\nconst channelEditable = ref(false)\nconst channelForm = reactive({\n  key: '',\n  base_url: '',\n  models: [],\n  model: '',\n  config: {\n    agent_type: AGENT_MODES.COMPLETION,\n  },\n})\n\nconst agentFormRef = ref()\n\nconst onChannelSave = async () => {\n  const valid = await channelFormRef.value.validate()\n  if (!valid) return\n  const agent = getAgentByAgentType(store.agent_type)\n\n  if (agent.mode === 'completion') {\n    try {\n      const url = new URL(channelForm.base_url)\n      const params = new URLSearchParams(url.search)\n      channelForm.model = `workflow-${params.get('workflow_id')}` || ''\n    } catch (error) {\n      console.warn('Invalid URL format:', channelForm.base_url)\n      channelForm.model = ''\n    }\n  } else {\n    const model = channelForm.base_url.split('/').pop()\n    channelForm.model = `bot-${model}`\n  }\n\n  const models = [channelForm.model]\n  const name = 'coze_osv'\n  const saveData = {\n    channel_id: channelInfo.value.channel_id,\n    key: channelForm.key,\n    base_url: channelForm.base_url,\n    config: channelForm.config,\n    models,\n    name,\n  }\n  const resultData = await channelApi.save({\n    data: saveData,\n  })\n  Object.assign(channelInfo.value, resultData)\n  if (!saveData.channel_id) saveData.channel_id = resultData.channel_id\n  store.form_data.custom_config.channel_config = saveData\n  store.form_data.model = models[0]\n  channelEditable.value = true\n}\n\nconst validateForm = async () => {\n  channelFormRef.value && channelFormRef.value.validate()\n  return agentFormRef.value && agentFormRef.value.validate()\n}\n\nconst loadProviders = async () => {\n  const list = await providersApi.list({\n    providerType: PROVIDER_VALUES.COZE_OSV,\n  })\n  providers.value = transformProviderList(list)\n\n  if (providers.value.length && !store.form_data.custom_config.provider_id) {\n    store.form_data.custom_config.provider_id = providers.value[0].provider_id\n  }\n}\n\nonMounted(() => {\n  if (props.showChannelConfig) {\n    loadProviders()\n  }\n})\n\nwatch(\n  () => store.agent_data,\n  ({ channel_config = {} } = {}) => {\n    channelEditable.value = !!+channel_config.channel_id\n    channelInfo.value.channel_id = +channel_config.channel_id || 0\n    channelInfo.value.key = channelForm.key = channel_config.key || ''\n    channelInfo.value.base_url = channelForm.base_url = channel_config.base_url || ''\n    channelInfo.value.models = channelForm.models = channel_config.models || []\n    channelInfo.value.model = channelForm.model = channelForm.models[0] || ''\n    channelInfo.value.config = channelForm.config = {\n      ...(channel_config.config || {}),\n      agent_type: channel_config.config?.agent_type || 'chat',\n    }\n  },\n  { immediate: true, deep: true }\n)\n\ndefineExpose({\n  validateForm,\n  onChannelSave,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/dify-agent.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <template v-if=\"showChannelConfig\">\n      <div class=\"flex items-center justify-between mb-3\">\n        <div class=\"flex items-center gap-1\">\n          <h3 class=\"text-base text-[#1D1E1F]\">\n            {{ $t('dify') }}\n          </h3>\n          <ElPopover content=\"Right Top prompts info\" placement=\"right-start\" width=\"480\">\n            <template #reference>\n              <div class=\"flex-center text-[#9A9A9A] gap-1 ml-1\">\n                <svg-icon name=\"help\" width=\"14\" color=\"#999\" />\n                <span class=\"text-sm\">{{ $t('how_get') }}</span>\n              </div>\n            </template>\n            <div\n              class=\"whitespace-pre-wrap text-sm text-[#333] leading-6\"\n              v-html=\"\n                $t('dify_agent_get_tip', {\n                  url: `<a class='text-[#5A6D9E] underline' href='https://dify.ai/zh' target='_blank'>https://dify.ai/zh</a>`,\n                })\n              \"\n            />\n          </ElPopover>\n        </div>\n      </div>\n      <AgentType v-model=\"store.agent_type\" :disabled=\"!!store.agent_id\" :options=\"agentTypeOptions\" />\n      <ElForm ref=\"channelFormRef\" :model=\"channelForm\" label-position=\"top\" class=\"mt-3\">\n        <div class=\"flex items-center gap-4\">\n          <ElFormItem\n            class=\"flex-1\"\n            :label=\"$t('api_host')\"\n            prop=\"base_url\"\n            :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text', 'link'] })\"\n          >\n            <ElInput v-model=\"channelForm.base_url\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n          </ElFormItem>\n          <ElFormItem\n            class=\"flex-1\"\n            :label=\"$t('api_screet')\"\n            prop=\"key\"\n            :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n          >\n            <ElInput v-model=\"channelForm.key\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n          </ElFormItem>\n        </div>\n      </ElForm>\n    </template>\n\n    <ElForm ref=\"agentFormRef\" :model=\"store.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mt-6 mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"store.form_data\" />\n      </template>\n      <template v-else>\n        <template v-if=\"store.agent_type === AGENT_TYPES.DIFY_WORKFLOW\">\n          <FieldInput\n            v-model:list=\"store.form_data.settings.input_fields\"\n            :title=\"$t('agent.input_variable')\"\n            allow-update\n            allow-add\n            :update-request=\"inputUpdateRequest\"\n            type=\"input\"\n            :agent-type=\"store.agent_type\"\n          />\n          <FieldInput\n            v-model:list=\"store.form_data.settings.output_fields\"\n            :title=\"$t('agent.output_variable')\"\n            allow-add\n            type=\"output\"\n            :agent-type=\"store.agent_type\"\n          />\n          <RelateApp />\n        </template>\n        <template v-else>\n          <BaseConfig />\n          <RelateApp />\n          <ExpandConfig />\n        </template>\n        <UseScope />\n      </template>\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, reactive, ref, watch } from 'vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport UseScope from '../components/use-scope.vue'\nimport FieldInput from '../components/field-input.vue'\nimport AgentType from '../components/agent-type.vue'\nimport RelateApp from '../components/relate-agents.vue'\n\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { generateRandomId } from '@/utils'\nimport md5 from '@/utils/md5'\n\nimport { AGENT_TYPES, getAgentByAgentType } from '@/constants/platform/config'\n\nimport { channelApi } from '@/api/modules/channel'\nimport { agentApi } from '@/api'\n\ndefineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst store = useAgentFormStore()\n\nconst channelInfo = inject('channelConfig') || {}\nconst channelFormRef = ref()\nconst channelEditable = ref(false)\nconst channelForm = reactive({\n  key: '',\n  base_url: '',\n  models: [],\n  config: {\n    agent_type: 'chat',\n  },\n})\nconst agentFormRef = ref()\n\nconst agentTypeOptions = [\n  {\n    icon: 'agent',\n    label: window.$t('agent.dify.agent_type_chat'),\n    description: window.$t('agent.dify.agent_type_chat_desc'),\n    value: AGENT_TYPES.DIFY_AGENT,\n  },\n  {\n    icon: 'completion-agent',\n    label: window.$t('agent.dify.agent_type_workflow'),\n    description: window.$t('agent.dify.agent_type_workflow_desc'),\n    value: AGENT_TYPES.DIFY_WORKFLOW,\n  },\n]\n\nconst inputUpdateRequest = () => {\n  return agentApi.dify.workflow_field_list(store.form_data.custom_config.channel_config.channel_id).then(res => {\n    return res.user_input_form\n      .map(item => {\n        const type = Object.keys(item)[0]\n        const value = Object.values(item)[0] as any\n        if (!type) return null\n        return {\n          id: generateRandomId(6, true),\n          variable: value.variable,\n          type: type === 'paragraph' ? 'textarea' : type === 'select' ? 'select' : 'text',\n          label: value.label,\n          desc: value.desc,\n          required: value.required,\n          multiple: value.multiple || false,\n          options: (value.options || []).map((item: string) => ({\n            id: generateRandomId(6, true),\n            label: item,\n          })),\n          max_length: value.max_length || 0,\n          show_word_limit: value.show_word_limit || false,\n          is_system: true,\n        }\n      })\n      .filter(Boolean)\n  })\n}\n\nconst onChannelSave = async () => {\n  const valid = await channelFormRef.value.validate()\n  if (!valid) return\n  const agent = getAgentByAgentType(store.agent_type)\n  const model =\n    (agent && agent.mode === 'completion' ? 'workflow-' : '') + md5(`${channelForm.key}_${channelForm.base_url}`)\n  const name = 'dify'\n  const saveData = {\n    channel_id: channelInfo.value.channel_id,\n    key: channelForm.key,\n    base_url: channelForm.base_url,\n    config: channelForm.config,\n    models: [model],\n    name,\n  }\n  const resultData = await channelApi.save({\n    data: saveData,\n  })\n  Object.assign(channelInfo.value, resultData)\n  if (!saveData.channel_id) saveData.channel_id = resultData.channel_id\n  store.form_data.custom_config.channel_config = saveData\n  store.form_data.model = model\n  ElMessage.success(window.$t('action_save_success'))\n  channelEditable.value = true\n}\n\nconst validateForm = async () => {\n  channelFormRef.value && channelFormRef.value.validate()\n  if (agentFormRef.value) await agentFormRef.value.validate()\n  return true\n}\n\nwatch(\n  () => store.agent_data,\n  ({ channel_config = {} } = {}) => {\n    channelEditable.value = !!+channel_config.channel_id\n    channelInfo.value.channel_id = +channel_config.channel_id || 0\n    channelInfo.value.key = channelForm.key = channel_config.key || ''\n    channelInfo.value.base_url = channelForm.base_url = channel_config.base_url || 'https://api.dify.ai/v1'\n    channelInfo.value.models = channelForm.models = channel_config.models || []\n    channelInfo.value.config = channelForm.config = {\n      ...(channel_config.config || {}),\n      agent_type: channel_config.config?.agent_type || 'chat',\n    }\n  },\n  { immediate: true, deep: true }\n)\n\ndefineExpose({\n  validateForm,\n  onChannelSave,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/fastgpt-agent.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <template v-if=\"showChannelConfig\">\n      <div class=\"flex items-center justify-between mb-3\">\n        <div class=\"flex items-center gap-1\">\n          <h3 class=\"text-base text-[#1D1E1F]\">\n            {{ $t('agent_app.fastgpt_agent') }}\n          </h3>\n          <ElPopover content=\"Right Top prompts info\" placement=\"right-start\" width=\"480\">\n            <template #reference>\n              <div class=\"flex-center text-[#9A9A9A] gap-1 ml-1\">\n                <svg-icon name=\"help\" width=\"14\" color=\"#999\" />\n                <span class=\"text-sm\">{{ $t('how_get') }}</span>\n              </div>\n            </template>\n            <div\n              class=\"whitespace-pre-wrap text-sm text-[#333] leading-6\"\n              v-html=\"\n                $t('fastgpt_agent_get_tip', {\n                  url: `<a class='text-[#5A6D9E] underline' href='https://cloud.fastgpt.cn/login' target='_blank'>https://cloud.fastgpt.cn/login</a>`,\n                })\n              \"\n            />\n          </ElPopover>\n        </div>\n      </div>\n      <AgentType v-model=\"store.agent_type\" :disabled=\"store.agent_id\" :options=\"agentTypeOptions\" />\n      <ElForm ref=\"channelFormRef\" :model=\"channelForm\" label-position=\"top\" class=\"mt-3\">\n        <div class=\"flex items-center gap-4\">\n          <ElFormItem\n            class=\"flex-1\"\n            :label=\"$t('ap_host_fastgpt')\"\n            prop=\"base_url\"\n            :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text', 'link'] })\"\n          >\n            <ElInput v-model=\"channelForm.base_url\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n          </ElFormItem>\n          <ElFormItem\n            class=\"flex-1\"\n            :label=\"$t('api_key')\"\n            prop=\"key\"\n            :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n          >\n            <ElInput v-model=\"channelForm.key\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n          </ElFormItem>\n        </div>\n      </ElForm>\n    </template>\n\n    <ElForm ref=\"agentFormRef\" :model=\"store.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mt-6 mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"store.form_data\" />\n      </template>\n      <template v-else>\n        <template v-if=\"store.agent_type === AGENT_TYPES.FASTGPT_WORKFLOW\">\n          <FieldInput\n            v-model:list=\"store.form_data.settings.input_fields\"\n            :title=\"$t('agent.input_variable')\"\n            allow-add\n            type=\"input\"\n            :agent-type=\"store.agent_type\"\n          />\n          <FieldInput\n            v-model:list=\"store.form_data.settings.output_fields\"\n            :title=\"$t('agent.output_variable')\"\n            allow-add\n            type=\"output\"\n            :agent-type=\"store.agent_type\"\n          />\n          <RelateApp />\n        </template>\n        <template v-else>\n          <BaseConfig />\n          <RelateApp />\n          <ExpandConfig />\n        </template>\n        <UseScope />\n      </template>\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, reactive, ref, watch } from 'vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport FieldInput from '../components/field-input.vue'\nimport RelateApp from '../components/relate-agents.vue'\nimport UseScope from '../components/use-scope.vue'\n// import LimitConfig from '../components/limit-config.vue'\n\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { channelApi } from '@/api/modules/channel'\nimport md5 from '@/utils/md5'\nimport AgentType from '../components/agent-type.vue'\nimport { AGENT_TYPES } from '@/constants/platform/config'\n\ndefineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst store = useAgentFormStore()\n\nconst channelInfo = inject('channelConfig') || {}\nconst channelFormRef = ref()\nconst channelEditable = ref(false)\nconst channelForm = reactive({\n  key: '',\n  base_url: '',\n  models: [],\n  config: {\n    agent_type: 'chat',\n  },\n})\nconst agentFormRef = ref()\n\nconst agentTypeOptions = [\n  {\n    icon: 'agent',\n    label: window.$t('agent.fastgpt.agent_type_chat'),\n    description: window.$t('agent.fastgpt.agent_type_chat_desc'),\n    value: AGENT_TYPES.FASTGPT_AGENT,\n  },\n  {\n    icon: 'completion-agent',\n    label: window.$t('agent.fastgpt.agent_type_workflow'),\n    description: window.$t('agent.fastgpt.agent_type_workflow_desc'),\n    value: AGENT_TYPES.FASTGPT_WORKFLOW,\n  },\n]\n\nconst onChannelSave = async () => {\n  const valid = await channelFormRef.value.validate()\n  if (!valid) return\n  const models = [md5(`${channelForm.key}_${channelForm.base_url}`)]\n  const name = 'fastgpt_agent'\n  const saveData = {\n    channel_id: channelInfo.value.channel_id,\n    key: channelForm.key,\n    base_url: channelForm.base_url,\n    config: channelForm.config,\n    models,\n    name,\n  }\n  const resultData = await channelApi.save({\n    data: saveData,\n  })\n  Object.assign(channelInfo.value, resultData)\n  if (!saveData.channel_id) saveData.channel_id = resultData.channel_id\n  store.form_data.custom_config.channel_config = saveData\n  store.form_data.model = models[0]\n  ElMessage.success(window.$t('action_save_success'))\n  channelEditable.value = true\n}\n\nconst validateForm = async () => {\n  channelFormRef.value && channelFormRef.value.validate()\n  if (agentFormRef.value) await agentFormRef.value.validate()\n  return true\n}\n\nwatch(\n  () => store.agent_data,\n  ({ channel_config = {} } = {}) => {\n    channelEditable.value = !!+channel_config.channel_id\n    channelInfo.value.channel_id = +channel_config.channel_id || 0\n    channelInfo.value.key = channelForm.key = channel_config.key || ''\n    channelInfo.value.base_url = channelForm.base_url = channel_config.base_url || 'https://cloud.fastgpt.cn/api'\n    channelInfo.value.models = channelForm.models = channel_config.models || []\n    channelInfo.value.config = channelForm.config = {\n      ...(channel_config.config || {}),\n      agent_type: channel_config.config?.agent_type || 'chat',\n    }\n  },\n  { immediate: true, deep: true }\n)\n\ndefineExpose({\n  validateForm,\n  onChannelSave,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/index.vue",
    "content": "<template>\n  <component :is=\"CurrentComponent\" ref=\"viewRef\" :show-channel-config=\"showChannelConfig\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, defineAsyncComponent, ref } from 'vue';\nimport { AGENT_TYPES } from '@/constants/platform/config';\n\nconst props = defineProps<{\n  agentType: string\n  showChannelConfig?: boolean\n}>()\n\nconst components = {\n  [AGENT_TYPES.PROMPT]: defineAsyncComponent(() => import('./prompt.vue')),\n  [AGENT_TYPES.COZE_AGENT_CN]: defineAsyncComponent(() => import('./coze-cn.vue')),\n  [AGENT_TYPES.COZE_WORKFLOW_CN]: defineAsyncComponent(() => import('./coze-cn.vue')),\n  [AGENT_TYPES.COZE_AGENT_OSV]: defineAsyncComponent(() => import('./coze-osv.vue')),\n  [AGENT_TYPES.COZE_WORKFLOW_OSV]: defineAsyncComponent(() => import('./coze-osv.vue')),\n  [AGENT_TYPES.DIFY_AGENT]: defineAsyncComponent(() => import('./dify-agent.vue')),\n  [AGENT_TYPES.DIFY_WORKFLOW]: defineAsyncComponent(() => import('./dify-agent.vue')),\n  [AGENT_TYPES['53AI_AGENT']]: defineAsyncComponent(() => import('./53ai-agent.vue')),\n  [AGENT_TYPES['53AI_WORKFLOW']]: defineAsyncComponent(() => import('./53ai-agent.vue')),\n  [AGENT_TYPES.APP_BUILDER]: defineAsyncComponent(() => import('./app-builder-agent.vue')),\n  [AGENT_TYPES.YUANQI]: defineAsyncComponent(() => import('./yuanqi.vue')),\n  [AGENT_TYPES.BAILIAN]: defineAsyncComponent(() => import('./bailian.vue')),\n  [AGENT_TYPES.VOLCENGINE]: defineAsyncComponent(() => import('./volcengine.vue')),\n  [AGENT_TYPES.FASTGPT_AGENT]: defineAsyncComponent(() => import('./fastgpt-agent.vue')),\n  [AGENT_TYPES.FASTGPT_WORKFLOW]: defineAsyncComponent(() => import('./fastgpt-agent.vue')),\n  [AGENT_TYPES.MAXKB_AGENT]: defineAsyncComponent(() => import('./maxkb-agent.vue')),\n  [AGENT_TYPES.N8N_WORKFLOW]: defineAsyncComponent(() => import('./n8n.vue')),\n  [AGENT_TYPES.TENCENT]: defineAsyncComponent(() => import('./tencent.vue')),\n}\n\nconst viewRef = ref()\n\n// 计算当前需要显示的组件\nconst CurrentComponent = computed(() => components[props.agentType])\n\ndefineExpose({\n  get save() {\n    return viewRef.value?.save\n  },\n  get validateForm() {\n    return viewRef.value?.validateForm\n  },\n  get onChannelSave() {\n    return viewRef.value?.onChannelSave\n  },\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/maxkb-agent.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <template v-if=\"showChannelConfig\">\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-1\">\n          <h3 class=\"text-base text-[#1D1E1F]\">\n            {{ $t('provider_platform.maxkb') }}\n          </h3>\n          <ElPopover content=\"Right Top prompts info\" placement=\"right-start\" width=\"480\">\n            <template #reference>\n              <div class=\"flex-center text-[#9A9A9A] gap-1 ml-1\">\n                <svg-icon name=\"help\" width=\"14\" color=\"#999\" />\n                <span class=\"text-sm\">{{ $t('how_get') }}</span>\n              </div>\n            </template>\n            <div\n              class=\"whitespace-pre-wrap text-sm text-[#333] leading-6\"\n              v-html=\"\n                $t('maxkb_agent_get_tip', {\n                  url: `<a class='text-[#5A6D9E] underline' href='https://maxkb.cn/' target='_blank'>https://maxkb.cn/</a>`,\n                })\n              \"\n            />\n          </ElPopover>\n        </div>\n      </div>\n      <ElForm ref=\"channelFormRef\" :model=\"channelForm\" label-position=\"top\" class=\"mt-3\">\n        <ElFormItem\n          :label=\"$t('module.platform_model_base_url_maxkb')\"\n          prop=\"base_url\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text', 'link'] })\"\n        >\n          <ElInput v-model=\"channelForm.base_url\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n        <ElFormItem\n          label=\"API Key\"\n          prop=\"key\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text'] })\"\n        >\n          <ElInput v-model=\"channelForm.key\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n        <ElFormItem\n          :label=\"$t('agent_type')\"\n          prop=\"config.agent_type\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n        >\n          <ElSelect\n            v-model=\"channelForm.config.agent_type\"\n            class=\"max-w-[360px]\"\n            size=\"large\"\n            :placeholder=\"$t('form_select_placeholder')\"\n            :disabled=\"channelEditable\"\n          >\n            <ElOption value=\"chat\" :label=\"$t('agent_type_chat')\" />\n            <!-- <ElOption value=\"completion\" :label=\"$t('agent_type_completion')\" />\n\t\t\t\t\t\t<ElOption value=\"workflow\" :label=\"$t('agent_type_workflow')\" /> -->\n          </ElSelect>\n        </ElFormItem>\n      </ElForm>\n    </template>\n\n    <ElForm ref=\"agentFormRef\" :model=\"agentFormStore.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mt-6 mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"agentFormStore.form_data\" />\n      </template>\n      <template v-else>\n        <BaseConfig />\n        <RelateApp />\n        <ExpandConfig />\n        <UseScope />\n      </template>\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, reactive, ref, watch } from 'vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport UseScope from '../components/use-scope.vue'\nimport RelateApp from '../components/relate-agents.vue'\n\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { channelApi } from '@/api/modules/channel'\nimport md5 from '@/utils/md5'\n\nconst props = defineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst agentFormStore = useAgentFormStore()\n\nconst channelInfo = inject('channelConfig') || {}\nconst channelFormRef = ref()\nconst channelEditable = ref(false)\nconst channelForm = reactive({\n  key: '',\n  base_url: '',\n  models: [],\n  model: '',\n  config: {\n    agent_type: 'chat',\n  },\n})\n\nconst agentFormRef = ref()\n\nconst onChannelSave = async () => {\n  const valid = await channelFormRef.value.validate()\n  if (!valid) return\n  if (!channelForm.model) {\n    channelForm.model = md5(`${channelForm.key}_${channelForm.base_url}`)\n  }\n  const models = [channelForm.model]\n  const name = 'maxkb_agent'\n  const saveData = {\n    channel_id: channelInfo.value.channel_id,\n    key: channelForm.key,\n    base_url: channelForm.base_url,\n    config: channelForm.config,\n    models,\n    name,\n  }\n  const resultData = await channelApi.save({\n    data: saveData,\n  })\n  Object.assign(channelInfo.value, resultData)\n  if (!saveData.channel_id) saveData.channel_id = resultData.channel_id\n  agentFormStore.form_data.custom_config.channel_config = saveData\n  agentFormStore.form_data.model = models[0]\n  channelEditable.value = true\n}\n\nconst validateForm = async () => {\n  channelFormRef.value && channelFormRef.value.validate()\n  return agentFormRef.value && agentFormRef.value.validate()\n}\n\nwatch(\n  () => agentFormStore.agent_data,\n  ({ channel_config = {} } = {}) => {\n    channelEditable.value = !!+channel_config.channel_id\n    channelInfo.value.channel_id = +channel_config.channel_id || 0\n    channelInfo.value.key = channelForm.key = channel_config.key || ''\n    channelInfo.value.base_url = channelForm.base_url = channel_config.base_url || ''\n    channelInfo.value.models = channelForm.models = channel_config.models || []\n    channelInfo.value.model = channelForm.model = channelForm.models[0] || ''\n    channelInfo.value.config = channelForm.config = {\n      ...(channel_config.config || {}),\n      agent_type: channel_config.config?.agent_type || 'chat',\n    }\n  },\n  { immediate: true, deep: true }\n)\n\ndefineExpose({\n  validateForm,\n  onChannelSave,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/n8n.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <template v-if=\"showChannelConfig\">\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-1\">\n          <h3 class=\"text-base text-[#1D1E1F]\">\n            {{ $t('n8n') }}\n          </h3>\n\n          <div class=\"flex-center text-[#9A9A9A] gap-1 ml-1 cursor-pointer\" @click=\"handleOpenDialog\">\n            <svg-icon name=\"help\" width=\"14\" color=\"#999\" />\n            <span class=\"text-sm\">{{ $t('how_get') }}</span>\n          </div>\n        </div>\n      </div>\n      <ElForm ref=\"channelFormRef\" :model=\"channelForm\" label-position=\"top\" class=\"mt-3\">\n        <ElFormItem\n          :label=\"$t('module.platform_model_webhook_url')\"\n          prop=\"base_url\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text', 'link'] })\"\n        >\n          <ElInput v-model=\"channelForm.base_url\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n        <ElFormItem\n          label=\"Value\"\n          prop=\"key\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text'] })\"\n        >\n          <ElInput v-model=\"channelForm.key\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n      </ElForm>\n    </template>\n\n    <ElForm ref=\"agentFormRef\" :model=\"store.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mt-6 mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"store.form_data\" />\n      </template>\n      <template v-else>\n        <template v-if=\"store.agent_type === AGENT_TYPES.N8N_WORKFLOW\">\n          <FieldInput\n            v-model:list=\"store.form_data.settings.input_fields\"\n            :title=\"$t('agent.input_variable')\"\n            allow-add\n            type=\"input\"\n            :agent-type=\"store.agent_type\"\n          />\n          <FieldInput\n            v-model:list=\"store.form_data.settings.output_fields\"\n            :title=\"$t('agent.output_variable')\"\n            allow-add\n            type=\"output\"\n            :agent-type=\"store.agent_type\"\n          />\n          <RelateApp />\n        </template>\n        <template v-else>\n          <BaseConfig />\n          <RelateApp />\n          <ExpandConfig />\n        </template>\n        <UseScope />\n      </template>\n    </ElForm>\n\n    <ElDialog\n      v-model=\"guideVisible\"\n      :title=\"$t('how_get')\"\n      :align-center=\"true\"\n      width=\"860px\"\n      destroy-on-close\n      append-to-body\n    >\n      <ul class=\"flex flex-col gap-4 pb-4 box-border max-h-[84vh] overflow-y-auto\">\n        <li v-for=\"(item, index) in guideList\" :key=\"index\" class=\"flex flex-col gap-2 text-[#1D1E1F] text-sm\">\n          <div class=\"text-wrap break-words whitespace-pre-wrap\" v-html=\"item.title\" />\n          <div v-for=\"(image, imageIndex) in item.imageList\" :key=\"imageIndex\" class=\"w-full\">\n            <ElImage\n              :src=\"$getRealPath({ url: image })\"\n              class=\"w-full\"\n              fit=\"contain\"\n              :preview-teleported=\"true\"\n              :preview-src-list=\"[$getRealPath({ url: image })]\"\n            />\n          </div>\n        </li>\n      </ul>\n    </ElDialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, reactive, ref, watch, onMounted } from 'vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport FieldInput from '../components/field-input.vue'\nimport UseScope from '../components/use-scope.vue'\nimport RelateApp from '../components/relate-agents.vue'\n\nimport { channelApi } from '@/api/modules/channel'\n\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\n\nimport { AGENT_MODES, AGENT_TYPES, getAgentByAgentType } from '@/constants/platform/config'\n\ndefineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst store = useAgentFormStore()\n\nconst channelInfo = inject('channelConfig') || {}\nconst channelFormRef = ref()\nconst channelEditable = ref(false)\nconst channelForm = reactive({\n  key: '',\n  base_url: '',\n  models: [],\n  model: '',\n  config: {\n    agent_type: AGENT_MODES.COMPLETION,\n  },\n})\n\nconst agentFormRef = ref()\nconst guideVisible = ref(false)\n\nconst guideList = ref([\n  {\n    title: window.$t('platform_auth.n8n.tip', {\n      url: '<a style=\"color: #586D9A;\" href=\"https://n8n.io/\" target=\"_blank\">https://n8n.io/</a>',\n    }),\n    imageList: [],\n  },\n  {\n    title: window.$t('platform_auth.n8n.tip_1'),\n    imageList: ['/images/n8n-guide/guide-1.png', '/images/n8n-guide/guide-2.png'],\n  },\n  {\n    title: window.$t('platform_auth.n8n.tip_2', { headerAuth: '<span style=\"color: #FA5151;\"> Header Auth</span>' }),\n    imageList: ['/images/n8n-guide/guide-3.png'],\n  },\n  {\n    title: `${window.$t('platform_auth.n8n.tip_3', {\n      authorization: '<span style=\"color: #FA5151;\">authorization</span>',\n    })}<ElIcon ref=\"copy_ref\" @click=\"handleCopy(coze_auth_url)\"><CopyDocument /></ElIcon>`,\n    imageList: ['/images/n8n-guide/guide-4.png'],\n  },\n  {\n    title: window.$t('platform_auth.n8n.tip_4', {\n      select: '<span style=\"color: #FA5151;\">When Last Node Finishes</span>',\n    }),\n    imageList: ['/images/n8n-guide/guide-5.png'],\n  },\n])\n\nconst handleOpenDialog = () => {\n  guideVisible.value = true\n}\nconst onChannelSave = async () => {\n  const valid = await channelFormRef.value.validate()\n  if (!valid) return\n  const agent = getAgentByAgentType(store.agent_type)\n\n  if (!channelForm.model) {\n    const model = channelForm.base_url.split('/').pop()\n    if (agent.mode === 'completion') {\n      channelForm.model = `workflow-${model}`\n    } else {\n      channelForm.model = model\n    }\n  }\n\n  const models = [channelForm.model]\n  const name = 'n8n'\n  const saveData = {\n    channel_id: channelInfo.value.channel_id,\n    key: channelForm.key,\n    base_url: channelForm.base_url,\n    config: channelForm.config,\n    models,\n    name,\n  }\n  const resultData = await channelApi.save({\n    data: saveData,\n  })\n  Object.assign(channelInfo.value, resultData)\n  if (!saveData.channel_id) saveData.channel_id = resultData.channel_id\n  store.form_data.custom_config.channel_config = saveData\n  store.form_data.model = models[0]\n  channelEditable.value = true\n}\n\nconst validateForm = async () => {\n  channelFormRef.value && channelFormRef.value.validate()\n  return agentFormRef.value && agentFormRef.value.validate()\n}\n\nwatch(\n  () => store.agent_data,\n  ({ channel_config = {} } = {}) => {\n    channelEditable.value = !!+channel_config.channel_id\n    channelInfo.value.channel_id = +channel_config.channel_id || 0\n    channelInfo.value.key = channelForm.key = channel_config.key || ''\n    channelInfo.value.base_url = channelForm.base_url = channel_config.base_url || ''\n    channelInfo.value.models = channelForm.models = channel_config.models || []\n    channelInfo.value.model = channelForm.model = channelForm.models[0] || ''\n    channelInfo.value.config = channelForm.config = {\n      ...(channel_config.config || {}),\n      agent_type: channel_config.config?.agent_type || 'chat',\n    }\n  },\n  { immediate: true, deep: true }\n)\n\nconst handleAgentTypeChange = (value: string) => {\n  store.agent_type = value as AgentType\n}\n\nonMounted(() => {\n  store.agent_type = AGENT_TYPES.N8N_WORKFLOW\n})\n\ndefineExpose({\n  validateForm,\n  onChannelSave,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/prompt.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <ElForm ref=\"form_ref\" :model=\"store.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <h3 class=\"text-base text-[#1D1E1F] mb-3\">\n          {{ $t('agent_app.prompt_v2') }}\n        </h3>\n\n        <div class=\"text-base text-[#1D1E1F] font-medium mb-4\">\n          {{ $t('access_model') }}\n        </div>\n        <ElFormItem label-width=\"0\" prop=\"model\" :rules=\"generateInputRules({ message: 'form_select_placeholder' })\">\n          <SelectPlus\n            v-model=\"store.form_data.model\"\n            size=\"large\"\n            :options=\"store.model_options\"\n            @change=\"onModelChange\"\n          >\n            <template #item_after=\"{ data }\">\n              <el-tooltip v-if=\"data.vision\" :content=\"$t('support_image')\" placement=\"top\">\n                <div class=\"flex-center inline-flex align-middle ml-1 w-4 h-4 bg-[#FDF8EB] rounded-sm\">\n                  <el-icon size=\"10px\" color=\"#F0A105\">\n                    <View />\n                  </el-icon>\n                </div>\n              </el-tooltip>\n            </template>\n          </SelectPlus>\n        </ElFormItem>\n\n        <div class=\"text-base text-[#1D1E1F] font-medium mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"store.form_data\" />\n      </template>\n      <template v-else>\n        <div class=\"text-base text-[#1D1E1F] font-medium mb-4\">\n          {{ $t('role_instruction') }}\n        </div>\n        <ElFormItem label-width=\"0\" class=\"mb-10\">\n          <!-- target=\"#app-config-full-screen-hook\" -->\n          <Fullscreen class=\"w-full\" :z-index=\"9\">\n            <template #default=\"{ isFullscreen, toggleFullscreen }\">\n              <div class=\"border rounded w-full flex flex-col !bg-[#FAFBFC] overflow-auto relative\">\n                <div\n                  class=\"min-h-10 pl-3 pr-2 border-b flex items-center justify-between rounded-t bg-[#FBFBFC]\"\n                  :class=\"[isFullscreen ? 'sticky top-0 left-0 right-0 z-10' : '']\"\n                >\n                  <div class=\"flex-1 text-sm text-[#4F5052] truncate\" :title=\"$t('role_instruction_desc')\">\n                    *{{ $t('role_instruction_desc') }}\n                  </div>\n                  <div class=\"flex items-center gap-1\">\n                    <el-tooltip placement=\"top\" :content=\"$t('optimize_tip')\">\n                      <span\n                        class=\"flex-center gap-1 text-[#2563EB] text-sm px-1 cursor-pointer opacity-60 pointer-events-none\"\n                        @click.stop=\"onOptimize\"\n                      >\n                        <svg-icon name=\"hglt\" width=\"18px\" />\n                        {{ $t('optimize') }}\n                      </span>\n                    </el-tooltip>\n                    <div class=\"flex-none h-4 w-px border-r border-[#E1E2E6]\" />\n                    <el-tooltip placement=\"top\" :content=\"$t('generate_tip')\">\n                      <span\n                        class=\"text-[#182B50] px-1 cursor-pointer opacity-60 pointer-events-none\"\n                        @click.stop=\"onGenerate\"\n                      >\n                        <svg-icon name=\"magic-stick\" width=\"18px\" />\n                      </span>\n                    </el-tooltip>\n                    <el-tooltip placement=\"top\" :content=\"$t('action_copy')\">\n                      <span class=\"text-[#182B50] px-1 cursor-pointer\" @click.stop=\"onCopy(store.form_data.prompt)\">\n                        <svg-icon name=\"copy\" width=\"18px\" />\n                      </span>\n                    </el-tooltip>\n                    <el-tooltip placement=\"top\" :content=\"$t(!isFullscreen ? 'action_amplify' : 'action_shrink')\">\n                      <span class=\"text-[#182B50] px-1 cursor-pointer\" @click.stop=\"toggleFullscreen\">\n                        <svg-icon :name=\"!isFullscreen ? 'amplify' : 'shrink'\" width=\"18px\" />\n                      </span>\n                    </el-tooltip>\n                  </div>\n                </div>\n                <PromptInput\n                  v-model=\"store.form_data.prompt\"\n                  :style=\"{ flex: isFullscreen ? '1' : 'auto' }\"\n                  style=\"height: 280px; min-height: max-content\"\n                  show-line\n                />\n              </div>\n            </template>\n          </Fullscreen>\n        </ElFormItem>\n        <BaseConfig />\n        <RelateApp />\n        <ExpandConfig />\n        <UseScope />\n      </template>\n      <!-- <div class=\"border-t mb-4\" />\n\t\t\t<LimitConfig /> -->\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { View } from '@element-plus/icons-vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport UseScope from '../components/use-scope.vue'\nimport RelateApp from '../components/relate-agents.vue'\nimport { useAgentFormStore } from '../store'\nimport PromptInput from '@/components/Prompt/input.vue'\n// import LimitConfig from '../components/limit-config.vue'\nimport { copyToClip } from '@/utils/copy'\nimport { generateInputRules } from '@/utils/form-rule'\n\nconst props = defineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst store = useAgentFormStore()\n\nconst form_ref = ref()\n\nconst onOptimize = () => {\n  return ElMessage.warning(window.$t('feature_coming_soon'))\n}\nconst onGenerate = () => {\n  return ElMessage.warning(window.$t('feature_coming_soon'))\n}\n\nconst onModelChange = data => {\n  const { option } = data\n  if (!option.vision) store.form_data.custom_config.image_parse.enable = false\n}\nconst onCopy = async (text = '') => {\n  await copyToClip(text)\n  ElMessage.success(window.$t('action_copy_success'))\n}\nconst validateForm = async () => form_ref.value.validate()\n\ndefineExpose({\n  validateForm,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/tencent.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <ElForm ref=\"form_ref\" :model=\"store.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mb-3\">\n          {{ $t('agent_app.tencent') }}\n        </div>\n        <el-form-item :label=\"$t('module.website_info_name')\">\n          <el-select v-model=\"store.form_data.custom_config.provider_id\" size=\"large\" @change=\"onProviderChange\">\n            <el-option v-for=\"item in providers\" :key=\"item.provider_id\" :label=\"item.name\" :value=\"item.provider_id\" />\n          </el-select>\n        </el-form-item>\n\n        <div class=\"flex items-center gap-4 mb-9\">\n          <ElFormItem\n            class=\"flex-1 mb-0\"\n            :label=\"$t('agent.name')\"\n            prop=\"custom_config.tencent_bot_id\"\n            :rules=\"generateInputRules({ message: 'form_select_placeholder' })\"\n          >\n            <SelectPlus\n              v-model=\"store.form_data.custom_config.tencent_bot_id\"\n              size=\"large\"\n              :options=\"bots\"\n              :use-i18n=\"false\"\n              @change=\"onBotChange\"\n            />\n          </ElFormItem>\n        </div>\n        <div class=\"text-base text-[#1D1E1F] font-medium mb-4\">\n          {{ $t('agent.base_info') }}\n        </div>\n        <AgentInfo v-model=\"store.form_data\" />\n      </template>\n      <template v-if=\"!showChannelConfig\">\n        <BaseConfig />\n        <RelateApp />\n        <ExpandConfig />\n        <UseScope />\n      </template>\n      <!-- <div class=\"border-t mb-4\" />\n      <LimitConfig /> -->\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport UseScope from '../components/use-scope.vue'\nimport RelateApp from '../components/relate-agents.vue'\n\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\n\nimport { PROVIDER_VALUES } from '@/constants/platform/config'\nimport providersApi from '@/api/modules/providers/index'\nimport { transformProviderList } from '@/api/modules/providers/transform'\nimport { ProviderItem } from '@/api/modules/providers/types'\nimport agentApi, { TencentAppItem, transformTencentAppItem } from '@/api/modules/agent'\n\nconst props = defineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst store = useAgentFormStore()\n\nconst providers = ref<ProviderItem[]>([])\nconst bots = ref<TencentAppItem[]>([])\n\nconst form_ref = ref()\n\nconst validateForm = async () => form_ref.value.validate()\n\nconst onBotChange = (data: { value: string; option: any }) => {\n  if (!store.agent_id) {\n    store.form_data.logo = data.option.icon\n    store.form_data.name = data.option.label\n    store.form_data.description = data.option.description || ''\n  }\n  agentApi.tencent.detail(data.value)\n}\n\nconst loadBots = async () => {\n  const customConfig = store.form_data.custom_config\n  const list = await agentApi.tencent.bots_list({\n    provider_id: customConfig.provider_id,\n  })\n  bots.value = list.map(transformTencentAppItem)\n}\n\nconst loadProviders = async () => {\n  const list = await providersApi.list({\n    providerType: PROVIDER_VALUES.TENCENT,\n  })\n  providers.value = transformProviderList(list)\n\n  if (providers.value.length && !store.form_data.custom_config.provider_id) {\n    store.form_data.custom_config.provider_id = providers.value[0].provider_id\n  }\n  loadBots()\n}\n\nconst onProviderChange = () => {\n  store.form_data.custom_config.tencent_bot_id = ''\n}\n\nonMounted(() => {\n  if (props.showChannelConfig) {\n    loadProviders()\n  }\n})\n\ndefineExpose({\n  validateForm,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/volcengine.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <template v-if=\"showChannelConfig\">\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-1\">\n          <h3 class=\"text-base text-[#1D1E1F]\">\n            {{ $t('volcengine') }}\n          </h3>\n          <ElPopover content=\"Right Top prompts info\" placement=\"right-start\" width=\"480\">\n            <template #reference>\n              <div class=\"flex-center text-[#9A9A9A] gap-1 ml-1\">\n                <svg-icon name=\"help\" width=\"14\" color=\"#999\" />\n                <span class=\"text-sm\">{{ $t('how_get') }}</span>\n              </div>\n            </template>\n            <div\n              class=\"whitespace-pre-wrap text-sm text-[#333] leading-6\"\n              v-html=\"\n                $t('volcengine_agent_get_tip', {\n                  url: `<a class='text-[#5A6D9E] underline' href='https://www.volcengine.com/' target='_blank'>https://www.volcengine.com/</a>`,\n                  my_url: `<a class='text-[#5A6D9E] underline' href='https://console.volcengine.com/ark/region:ark+cn-beijing/assistant' target='_blank'>https://console.volcengine.com/ark/region:ark+cn-beijing/assistant</a>`,\n                })\n              \"\n            />\n          </ElPopover>\n        </div>\n      </div>\n      <ElForm ref=\"channelFormRef\" :model=\"channelForm\" label-position=\"top\" class=\"mt-3\">\n        <ElFormItem\n          :label=\"$t('module.platform_model_base_url')\"\n          prop=\"base_url\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text', 'link'] })\"\n        >\n          <ElInput v-model=\"channelForm.base_url\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n\n        <ElFormItem\n          :label=\"$t('api_botid_en')\"\n          prop=\"model\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n        >\n          <ElInput v-model=\"channelForm.model\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n\n        <ElFormItem\n          :label=\"$t('api_key')\"\n          prop=\"key\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text'] })\"\n        >\n          <ElInput v-model=\"channelForm.key\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n\n        <ElFormItem\n          :label=\"$t('agent_type')\"\n          prop=\"config.agent_type\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n        >\n          <ElSelect\n            v-model=\"channelForm.config.agent_type\"\n            class=\"max-w-[360px]\"\n            size=\"large\"\n            :placeholder=\"$t('form_select_placeholder')\"\n            :disabled=\"channelEditable\"\n          >\n            <ElOption value=\"chat\" :label=\"$t('agent_type_chat')\" />\n            <!-- <ElOption value=\"completion\" :label=\"$t('agent_type_completion')\" />\n\t\t\t\t\t\t<ElOption value=\"workflow\" :label=\"$t('agent_type_workflow')\" /> -->\n          </ElSelect>\n        </ElFormItem>\n      </ElForm>\n    </template>\n\n    <ElForm ref=\"agentFormRef\" :model=\"agentFormStore.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mt-6 mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"agentFormStore.form_data\" />\n      </template>\n      <template v-else>\n        <BaseConfig />\n        <RelateApp />\n        <ExpandConfig />\n        <UseScope />\n      </template>\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, reactive, ref, watch } from 'vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport UseScope from '../components/use-scope.vue'\nimport RelateApp from '../components/relate-agents.vue'\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { channelApi } from '@/api/modules/channel'\n\nconst props = defineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst agentFormStore = useAgentFormStore()\n\nconst channelInfo = inject('channelConfig') || {}\nconst channelFormRef = ref()\nconst channelEditable = ref(false)\nconst channelForm = reactive({\n  key: '',\n  base_url: '',\n  models: [],\n  model: '',\n  config: {\n    agent_type: 'chat',\n  },\n})\n\nconst agentFormRef = ref()\n\nconst onChannelSave = async () => {\n  const valid = await channelFormRef.value.validate()\n  if (!valid) return\n  const models = [channelForm.model]\n  const name = 'volcengine'\n  const saveData = {\n    channel_id: channelInfo.value.channel_id,\n    key: channelForm.key,\n    base_url: channelForm.base_url,\n    config: channelForm.config,\n    models,\n    name,\n  }\n  const resultData = await channelApi.save({\n    data: saveData,\n  })\n  Object.assign(channelInfo.value, resultData)\n  if (!saveData.channel_id) saveData.channel_id = resultData.channel_id\n  agentFormStore.form_data.custom_config.channel_config = saveData\n  agentFormStore.form_data.model = models[0]\n  channelEditable.value = true\n}\n\nconst validateForm = async () => {\n  channelFormRef.value && channelFormRef.value.validate()\n  return agentFormRef.value && agentFormRef.value.validate()\n}\n\nwatch(\n  () => agentFormStore.agent_data,\n  ({ channel_config = {} } = {}) => {\n    channelEditable.value = !!+channel_config.channel_id\n    channelInfo.value.channel_id = +channel_config.channel_id || 0\n    channelInfo.value.key = channelForm.key = channel_config.key || ''\n    channelInfo.value.base_url = channelForm.base_url = channel_config.base_url || 'https://ark.cn-beijing.volces.com'\n    channelInfo.value.models = channelForm.models = channel_config.models || []\n    channelInfo.value.model = channelForm.model = channelForm.models[0] || ''\n    channelInfo.value.config = channelForm.config = {\n      ...(channel_config.config || {}),\n      agent_type: channel_config.config?.agent_type || 'chat',\n    }\n  },\n  { immediate: true, deep: true }\n)\n\ndefineExpose({\n  validateForm,\n  onChannelSave,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/platform/yuanqi.vue",
    "content": "<template>\n  <div :class=\"[showChannelConfig ? '' : 'py-7']\">\n    <template v-if=\"showChannelConfig\">\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-1\">\n          <h3 class=\"text-base text-[#1D1E1F]\">\n            {{ $t('yuanqi') }}\n          </h3>\n          <ElPopover content=\"Right Top prompts info\" placement=\"right-start\" width=\"480\">\n            <template #reference>\n              <div class=\"flex-center text-[#9A9A9A] gap-1 ml-1\">\n                <svg-icon name=\"help\" width=\"14\" color=\"#999\" />\n                <span class=\"text-sm\">{{ $t('how_get') }}</span>\n              </div>\n            </template>\n            <div\n              class=\"whitespace-pre-wrap text-sm text-[#333] leading-6\"\n              v-html=\"\n                $t('yuanqi_agent_get_tip', {\n                  url: `<a class='text-[#5A6D9E] underline' href='https://yuanqi.tencent.com/my-creation/agent' target='_blank'>https://yuanqi.tencent.com/my-creation/agent</a>`,\n                })\n              \"\n            />\n          </ElPopover>\n        </div>\n      </div>\n      <ElForm ref=\"channelFormRef\" :model=\"channelForm\" label-position=\"top\" class=\"mt-3\">\n        <ElFormItem\n          v-if=\"false\"\n          :label=\"$t('module.platform_model_base_url')\"\n          prop=\"base_url\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text', 'link'] })\"\n        >\n          <ElInput v-model=\"channelForm.base_url\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n        <ElFormItem\n          :label=\"$t('api_botid')\"\n          prop=\"model\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n        >\n          <ElInput v-model=\"channelForm.model\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n        <ElFormItem\n          label=\"Token\"\n          prop=\"key\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text'] })\"\n        >\n          <ElInput v-model=\"channelForm.key\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        </ElFormItem>\n        <ElFormItem\n          :label=\"$t('agent_type')\"\n          prop=\"config.agent_type\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n        >\n          <ElSelect\n            v-model=\"channelForm.config.agent_type\"\n            class=\"max-w-[360px]\"\n            size=\"large\"\n            :placeholder=\"$t('form_select_placeholder')\"\n            :disabled=\"channelEditable\"\n          >\n            <ElOption value=\"chat\" :label=\"$t('agent_type_chat')\" />\n            <!-- <ElOption value=\"completion\" :label=\"$t('agent_type_completion')\" />\n\t\t\t\t\t\t<ElOption value=\"workflow\" :label=\"$t('agent_type_workflow')\" /> -->\n          </ElSelect>\n        </ElFormItem>\n      </ElForm>\n    </template>\n\n    <ElForm ref=\"agentFormRef\" :model=\"agentFormStore.form_data\" label-width=\"104px\" label-position=\"top\">\n      <template v-if=\"showChannelConfig\">\n        <div class=\"text-base text-[#1D1E1F] font-medium mt-6 mb-4\">\n          {{ $t('basic_info') }}\n        </div>\n        <AgentInfo v-model=\"agentFormStore.form_data\" />\n      </template>\n      <template v-else>\n        <BaseConfig />\n        <RelateApp />\n        <ExpandConfig />\n        <UseScope />\n      </template>\n    </ElForm>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, reactive, ref, watch } from 'vue'\nimport AgentInfo from '../components/agent-info.vue'\nimport BaseConfig from '../components/base-config.vue'\nimport ExpandConfig from '../components/expand-config.vue'\nimport UseScope from '../components/use-scope.vue'\nimport RelateApp from '../components/relate-agents.vue'\n\nimport { useAgentFormStore } from '../store'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { channelApi } from '@/api/modules/channel'\n\nconst props = defineProps({\n  showChannelConfig: {\n    type: Boolean,\n    default: false,\n  },\n})\n\nconst agentFormStore = useAgentFormStore()\n\nconst channelInfo = inject('channelConfig') || {}\nconst channelFormRef = ref()\nconst channelEditable = ref(false)\nconst channelForm = reactive({\n  key: '',\n  base_url: '',\n  models: [],\n  model: '',\n  config: {\n    agent_type: 'chat',\n  },\n})\n\nconst agentFormRef = ref()\n\nconst onChannelSave = async () => {\n  const valid = await channelFormRef.value.validate()\n  if (!valid) return\n  const models = [channelForm.model]\n  const name = 'yuanqi'\n  const saveData = {\n    channel_id: channelInfo.value.channel_id,\n    key: channelForm.key,\n    base_url: channelForm.base_url,\n    config: channelForm.config,\n    models,\n    name,\n  }\n  const resultData = await channelApi.save({\n    data: saveData,\n  })\n  Object.assign(channelInfo.value, resultData)\n  if (!saveData.channel_id) saveData.channel_id = resultData.channel_id\n  agentFormStore.form_data.custom_config.channel_config = saveData\n  agentFormStore.form_data.model = models[0]\n  channelEditable.value = true\n}\n\nconst validateForm = async () => {\n  channelFormRef.value && channelFormRef.value.validate()\n  return agentFormRef.value && agentFormRef.value.validate()\n}\n\nwatch(\n  () => agentFormStore.agent_data,\n  ({ channel_config = {} } = {}) => {\n    channelEditable.value = !!+channel_config.channel_id\n    channelInfo.value.channel_id = +channel_config.channel_id || 0\n    channelInfo.value.key = channelForm.key = channel_config.key || ''\n    channelInfo.value.base_url = channelForm.base_url = channel_config.base_url || 'https://yuanqi.tencent.com/'\n    channelInfo.value.models = channelForm.models = channel_config.models || []\n    channelInfo.value.model = channelForm.model = channelForm.models[0] || ''\n    channelInfo.value.config = channelForm.config = {\n      ...(channel_config.config || {}),\n      agent_type: channel_config.config?.agent_type || 'chat',\n    }\n  },\n  { immediate: true, deep: true }\n)\n\ndefineExpose({\n  validateForm,\n  onChannelSave,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/response/chat.vue",
    "content": "<template>\n  <div class=\"flex flex-col pt-7 relative\">\n    <div v-if=\"is_config_changed\" class=\"absolute top-0 left-0 w-full h-full bg-black/70 z-10\">\n      <div class=\"flex flex-col items-center justify-center gap-6 w-full h-full box-border\">\n        <div class=\"text-base text-[#fff] text-center mx-8\">\n          {{ $t('debugger_config_change_confirm') }}\n        </div>\n        <ElButton v-debounce type=\"primary\" size=\"large\" @click=\"onRestart({ saveAction: true })\">\n          {{ $t('save_and_restart') }}\n        </ElButton>\n      </div>\n    </div>\n    <div class=\"flex items-center justify-between px-4 mb-2\">\n      <div class=\"text-base text-[#1D1E1F]\">\n        {{ $t('debug_preview') }}\n      </div>\n      <div class=\"flex-center gap-1 cursor-pointer\" @click=\"onRestart\">\n        <ElIcon>\n          <RefreshRight />\n        </ElIcon>\n        <span class=\"text-sm text-[#1D1E1F]\">\n          {{ $t('restart') }}\n        </span>\n      </div>\n    </div>\n\n    <x-bubble-list :messages=\"chat_list\" class=\"flex-1 px-4 relative py-4\" main-class=\"mx-5\">\n      <template #header>\n        <ElEmpty v-if=\"showChatListEmpty\" class=\"mt-10\" :description=\"$t('chat.empty_desc')\" />\n        <x-bubble-assistant\n          v-if=\"showWelcome\"\n          type=\"welcome\"\n          :content=\"agentFormStore.form_data.settings.opening_statement\"\n          :suggestions=\"agentFormStore.form_data.settings.suggested_questions\"\n          @suggestion=\"handleSuggestion\"\n        />\n      </template>\n      <template #item=\"{ message }\">\n        <x-bubble-user :content=\"message.question.content\" :files=\"message.question.user_files\">\n          <template v-if=\"!message.answer.loading\" #menu>\n            <x-icon size=\"16\" class=\"cursor-pointer\" name=\"copy\" @click=\"onCopy(message.question.content)\" />\n          </template>\n        </x-bubble-user>\n        <x-bubble-assistant\n          :content=\"message.answer.content\"\n          :reasoning=\"message.answer.reasoning_content\"\n          :reasoning-expanded=\"message.answer.reasoning_expanded\"\n          :streaming=\"message.answer.loading\"\n          :always-show-menu=\"message_index === chat_list.length - 1\"\n        >\n          <template v-if=\"!message.answer.loading\" #menu>\n            <x-icon size=\"16\" class=\"cursor-pointer\" name=\"copy\" @click=\"onCopy(message.answer.content)\" />\n            <x-icon size=\"16\" class=\"cursor-pointer\" name=\"refresh\" @click=\"onRestartGeneration(message)\" />\n          </template>\n        </x-bubble-assistant>\n      </template>\n\n      <!-- <div class=\"flex flex-col space-y-4\">\n        <ElEmpty v-if=\"!chat_list.length\" class=\"mt-10\" :description=\"$t('chat.empty_desc')\" />\n        <template v-else>\n          <template v-for=\"(item, item_index) in chat_list\" :key=\"item_index\">\n\n          </template>\n        </template>\n      </div> -->\n    </x-bubble-list>\n    <div class=\"px-6 py-3\">\n      <x-sender\n        :enable-upload=\"enable_upload\"\n        :accept-types=\"upload_accept\"\n        :http-request=\"httpRequest\"\n        :loading=\"chat_loading\"\n        allow-multiple\n        enable-drag-upload\n        :allow-send-with-files=\"allowSendWithFiles\"\n        @send=\"onSendConfirm\"\n        @stop=\"onStopGeneration\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { RefreshRight } from '@element-plus/icons-vue'\nimport { computed, nextTick, ref, watch } from 'vue'\nimport { useAgentFormStore } from '../store'\n\nimport { useConversationStore } from '@/stores'\nimport { copyToClip } from '@/utils/copy'\nimport { api_host } from '@/utils/config'\nimport { AGENT_TYPES } from '@/constants/platform/config'\nimport uploadApi from '@/api/modules/upload'\n\nconst agentFormStore = useAgentFormStore()\nconst conversationStore = useConversationStore()\nconst scroll_ref = ref()\nconst chat_list = ref([])\nconst conversationCreating = ref(false)\n\nconst chat_loading = computed(() => conversationCreating.value || chat_list.value.some(item => item.answer.loading))\nconst enable_upload = computed(() =>\n  Boolean(\n    agentFormStore.form_data.settings?.file_parse?.enable || agentFormStore.form_data.settings?.image_parse?.enable\n  )\n)\nconst upload_accept = computed(() => {\n  let accept = ''\n  if (agentFormStore.form_data.settings?.file_parse?.enable)\n    accept += '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.csv,.txt,.html,.json,.xml,.md'\n  if (agentFormStore.form_data.settings?.image_parse?.enable) accept += ',image/*'\n  return accept\n})\nconst allowSendWithFiles = computed(() => {\n  return [AGENT_TYPES['53AI_AGENT'], AGENT_TYPES.FASTGPT_AGENT].includes(agentFormStore.agent_type)\n})\n\nconst showWelcome = computed(() => {\n  const { settings } = agentFormStore.form_data\n  if (settings.opening_statement.replace(/\\s/g, '')) return true\n  if (settings.suggested_questions.length && settings.suggested_questions.some(item => item.content.replace(/\\s/g, '')))\n    return true\n  return false\n})\nconst showChatListEmpty = computed(() => {\n  if (chat_list.value.length) return false\n  if (showWelcome.value) return false\n  return true\n})\n\nconst httpRequest = async (dataFile: File) => {\n  try {\n    const res = await uploadApi.upload(dataFile)\n    return {\n      id: res.data.id,\n      url: `${api_host}/api/preview/${res.data.preview_key || ''}`,\n      size: res.data.size,\n      name: res.data.file_name,\n      mime_type: res.data.mime_type,\n    }\n  } catch (error) {\n    return {}\n  }\n}\n\nlet conversation_id = 0\nlet active_chat_index = -1\nlet active_chat_data = {}\nlet abort_controller: any = null\nconst onSendConfirm = async (question: string, user_files?: any[], type = '') => {\n  if (chat_loading.value) return\n  user_files = user_files || []\n  if (!agentFormStore.agent_data.agent_id) return ElMessage.warning(window.$t('agent_not_found'))\n  if (!agentFormStore.agent_data.channel_type) await agentFormStore.saveAgentData({ hideToast: true })\n  // return ElMessage.warning(window.$t('agent_channel_type_not_found'))\n\n  if (abort_controller) abort_controller.abort()\n  abort_controller = new AbortController()\n\n  if (!conversation_id) {\n    conversationCreating.value = true\n    const { data = {} } = await conversationStore\n      .save({ data: { agent_id: agentFormStore.agent_data.agent_id, title: question } })\n      .finally(() => {\n        conversationCreating.value = false\n      })\n    conversation_id = data.conversation_id\n  }\n\n  if (type !== 'regenerate')\n    user_files =\n      user_files?.map(item => ({\n        type: 'image',\n        content: `file_id:${item.id}`,\n        filename: item.name,\n        size: item.size,\n        mime_type: item.mime_type,\n        url: item.url,\n      })) || []\n\n  chat_list.value.push({\n    question: {\n      role: 'user',\n      content: question,\n      user_files,\n    },\n    answer: {\n      loading: true,\n      role: 'assistant',\n      content: '',\n      reasoning_expanded: true,\n      reasoning_content: '',\n    },\n  })\n  active_chat_index = chat_list.value.length - 1\n  active_chat_data = chat_list.value[active_chat_index] || {}\n  let messages = [{ role: 'user', content: question }]\n  if (user_files.length) {\n    messages = [\n      {\n        role: 'user',\n        content: JSON.stringify([\n          {\n            type: 'text',\n            content: question,\n          },\n          ...user_files,\n        ]),\n      },\n    ]\n  }\n\n  conversationStore\n    .chat({\n      data: {\n        conversation_id,\n        messages,\n        agent_id: agentFormStore.agent_data.agent_id,\n        agent_configs: agentFormStore.agent_data.configs,\n      },\n      hideError: true,\n      onDownloadProgress: async ({ chunks = [], intact_content, intact_reasoning_content } = {}) => {\n        active_chat_data.answer.content = intact_content || active_chat_data.answer.content || ''\n        active_chat_data.answer.reasoning_content =\n          intact_reasoning_content || active_chat_data.answer.reasoning_content || ''\n        if (chunks[0] && chunks[0].role) active_chat_data.answer.role = chunks[0].role || ''\n        await nextTick()\n        if (scroll_ref.value) scroll_ref.value.scrollToBottom()\n      },\n      signal: abort_controller.signal,\n    })\n    .catch(err => {\n      if (!active_chat_data.answer.content) active_chat_data.answer.content = err.message\n      ElMessage.warning(window.$t('agent_app.failed_tip'))\n    })\n    .finally(() => {\n      active_chat_data.answer.loading = false\n      abort_controller = null\n    })\n  await nextTick()\n  if (scroll_ref.value) scroll_ref.value.scrollToBottom()\n}\nconst onStopGeneration = () => {\n  if (abort_controller) {\n    abort_controller.abort()\n    abort_controller = null\n    active_chat_data.answer.loading = false\n  }\n}\nconst onRestartGeneration = data => {\n  // chat_list.value.splice(0, active_chat_index + 1)\n  onSendConfirm(data.question.content, data.question.user_files, 'regenerate')\n}\nconst onRestart = ({ saveAction = false } = {}) => {\n  // 智能体 、模型选择暂时 搬到 设置里面了，所以这段暂时不用\n  // if (saveAction)\n  //   return emits('save', { restart: true })\n  conversation_id = 0\n  chat_list.value = []\n  is_config_changed.value = false\n}\nconst onCopy = async (text = '') => {\n  await copyToClip(text)\n  ElMessage.success(window.$t('action_copy_success'))\n}\nconst handleSuggestion = (question: string) => {\n  onSendConfirm(question)\n}\n\nconst is_config_changed = ref(false)\nwatch(\n  () => agentFormStore.form_data.custom_config,\n  data => {\n    is_config_changed.value = false\n    if (conversation_id) is_config_changed.value = true\n  },\n  {\n    deep: true,\n  }\n)\n\ndefineExpose({\n  restart: onRestart,\n  getIsConfigChanged: () => is_config_changed.value,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/response/completion.vue",
    "content": "<template>\n  <div class=\"flex flex-col px-4\">\n    <div class=\"flex items-center justify-between mb-5\">\n      <div class=\"text-base text-[#1D1E1F]\">\n        {{ $t('debug_preview') }}\n      </div>\n      <div class=\"flex-center gap-1 cursor-pointer\" @click=\"handleRestart\">\n        <el-icon><RefreshRight /></el-icon>\n        <span class=\"text-sm text-[#1D1E1F]\">\n          {{ $t('restart') }}\n        </span>\n      </div>\n    </div>\n\n    <div class=\"flex-1 overflow-y-auto\">\n      <div v-if=\"showError\" class=\"flex flex-col items-center gap-4\">\n        <img :src=\"$getRealPath({ url: '/images/chat/test_error.png' })\" class=\"w-10\" />\n        <p class=\"text-sm text-[#1D1E1F] mx-10 text-center\">\n          {{ errorMessage }}\n        </p>\n      </div>\n\n      <div v-else-if=\"showResult\">\n        <x-bubble-assistant class=\"!mb-0\" :streaming=\"loading\"></x-bubble-assistant>\n        <div\n          v-if=\"store.form_data.settings.output_fields.length === 0 && !loading && !initialHasOutputFields\"\n          class=\"flex flex-col items-center\"\n        >\n          <div\n            class=\"border prompt-input-wrapper rounded w-full h-full flex flex-col !bg-[#F8F9FA] relative overflow-y-auto\"\n          >\n            <div class=\"min-h-10 pl-3 pr-2 border-b flex items-center justify-between rounded-t bg-[#F8F9FA]\">\n              <div class=\"flex-1 text-sm text-[#4F5052] truncate\">JSON</div>\n            </div>\n            <PromptInput\n              v-model=\"resultString\"\n              style=\"flex: none; min-height: 40vh; height: max-content\"\n              show-line\n              show-token\n              :word-wrap=\"true\"\n            />\n          </div>\n          <ElButton type=\"primary\" class=\"mt-8\" @click=\"handleSyncVariables\">{{ $t('sync_output_variable') }}</ElButton>\n        </div>\n\n        <template v-for=\"item in result\" :key=\"item.id\">\n          <div class=\"text-sm text-[#1D1E1F] mt-2\">\n            <!-- <x-md-renderer :content=\"result\" /> -->\n            <x-bubble-assistant v-if=\"item.type === 'markdown'\" :content=\"item.value\" :streaming=\"loading\">\n            </x-bubble-assistant>\n            <div v-else-if=\"item.type.includes('image')\" class=\"overflow-hidden flex flex-col gap-5\">\n              <img\n                v-for=\"(src, index) in Array.isArray(item.value) ? item.value : [item.value]\"\n                :key=\"index\"\n                :src=\"src\"\n                class=\"max-w-full h-auto object-contain rounded\"\n              />\n            </div>\n            <div v-else-if=\"item.type.includes('video')\" class=\"overflow-hidden flex flex-col gap-5\">\n              <video\n                v-for=\"(src, index) in Array.isArray(item.value) ? item.value : [item.value]\"\n                :key=\"index\"\n                :src=\"getSrc(src, item.id)\"\n                controls\n                class=\"max-w-full h-auto\"\n              ></video>\n            </div>\n            <div v-else-if=\"item.type.includes('audio')\" class=\"overflow-hidden flex flex-col gap-5\">\n              <audio\n                v-for=\"(src, index) in Array.isArray(item.value) ? item.value : [item.value]\"\n                :key=\"index\"\n                :src=\"getSrc(src, item.id)\"\n                controls\n                class=\"max-w-full\"\n              ></audio>\n            </div>\n            <div v-else-if=\"item.type.includes('text')\">\n              <p\n                v-for=\"(text, index) in Array.isArray(item.value) ? item.value : [item.value]\"\n                :key=\"index\"\n                class=\"whitespace-pre-wrap break-all\"\n              >\n                {{ text }}\n              </p>\n            </div>\n          </div>\n        </template>\n      </div>\n\n      <template v-else>\n        <el-form ref=\"formRef\" :model=\"form\" label-position=\"top\" require-asterisk-position=\"right\" @submit.prevent>\n          <template v-for=\"(item, index) in form\" :key=\"item.id\">\n            <el-form-item\n              v-if=\"item.type === 'text'\"\n              :prop=\"`${index}.value`\"\n              :label=\"item.label\"\n              :required=\"item.required\"\n              :rules=\"[\n                { required: item.required, message: $t('form.input_placeholder') + item.label, trigger: 'blur' },\n              ]\"\n            >\n              <el-input\n                v-model=\"item.value\"\n                size=\"large\"\n                :placeholder=\"$t('form.input_placeholder')\"\n                :maxlength=\"item.max_length ? item.max_length : -1\"\n                :show-word-limit=\"item.show_word_limit\"\n              />\n              <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                {{ item.desc }}\n              </div>\n            </el-form-item>\n            <el-form-item\n              v-else-if=\"item.type === 'textarea'\"\n              :prop=\"`${index}.value`\"\n              :label=\"item.label\"\n              :required=\"item.required\"\n              :rules=\"[\n                { required: item.required, message: $t('form.input_placeholder') + item.label, trigger: 'blur' },\n              ]\"\n            >\n              <el-input\n                v-model=\"item.value\"\n                size=\"large\"\n                type=\"textarea\"\n                :rows=\"4\"\n                resize=\"none\"\n                :placeholder=\"$t('form.input_placeholder')\"\n                :maxlength=\"item.max_length ? item.max_length : -1\"\n                :show-word-limit=\"item.show_word_limit\"\n              />\n              <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                {{ item.desc }}\n              </div>\n            </el-form-item>\n            <el-form-item\n              v-else-if=\"item.type === 'inputNumber'\"\n              :prop=\"`${index}.value`\"\n              :label=\"item.label\"\n              :required=\"item.required\"\n              :rules=\"[\n                { required: item.required, message: $t('form.input_placeholder') + item.label, trigger: 'blur' },\n              ]\"\n            >\n              <div>\n                <el-input-number\n                  v-model=\"item.value\"\n                  size=\"large\"\n                  :min=\"1\"\n                  :placeholder=\"$t('form.input_placeholder')\"\n                />\n                <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                  {{ item.desc }}\n                </div>\n              </div>\n            </el-form-item>\n            <el-form-item\n              v-else-if=\"item.type === 'select'\"\n              :prop=\"`${index}.value`\"\n              :label=\"item.label\"\n              :required=\"item.required\"\n              :rules=\"[\n                { required: item.required, message: $t('form.input_placeholder') + item.label, trigger: 'change' },\n              ]\"\n            >\n              <el-select\n                v-model=\"item.value\"\n                class=\"w-full\"\n                size=\"large\"\n                :multiple=\"item.multiple\"\n                :placeholder=\"$t('form.select_placeholder')\"\n              >\n                <el-option\n                  v-for=\"option in item.options\"\n                  :key=\"option.value\"\n                  :label=\"option.label\"\n                  :value=\"option.label\"\n                />\n              </el-select>\n              <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                {{ item.desc }}\n              </div>\n            </el-form-item>\n\n            <el-form-item\n              v-else-if=\"item.type === 'date'\"\n              :prop=\"`${index}.value`\"\n              :label=\"item.label\"\n              :required=\"item.required\"\n              :rules=\"[\n                {\n                  required: item.required,\n                  message: $t('form.select_placeholder') + item.label,\n                  trigger: ['change', 'blur'],\n                },\n              ]\"\n            >\n              <el-time-picker\n                v-if=\"item.date_format === 'h-m'\"\n                v-model=\"item.value\"\n                format=\"HH:mm\"\n                size=\"large\"\n                value-format=\"HH:mm\"\n                :placeholder=\"$t('form.select_placeholder')\"\n              />\n              <el-date-picker\n                v-else-if=\"item.date_format === 'y'\"\n                v-model=\"item.value\"\n                size=\"large\"\n                type=\"year\"\n                value-format=\"YYYY\"\n                :placeholder=\"$t('form.select_placeholder')\"\n              />\n              <el-date-picker\n                v-else-if=\"item.date_format === 'y-m'\"\n                v-model=\"item.value\"\n                size=\"large\"\n                type=\"month\"\n                value-format=\"YYYY-MM\"\n                :placeholder=\"$t('form.select_placeholder')\"\n              />\n              <el-date-picker\n                v-else-if=\"item.date_format === 'y-m-d'\"\n                v-model=\"item.value\"\n                size=\"large\"\n                type=\"date\"\n                value-format=\"YYYY-MM-DD\"\n                :placeholder=\"$t('form.select_placeholder')\"\n              />\n              <el-date-picker\n                v-else-if=\"item.date_format === 'y-m-d-h'\"\n                v-model=\"item.value\"\n                size=\"large\"\n                type=\"datetime\"\n                format=\"YYYY-MM-DD HH\"\n                time-format=\"HH\"\n                value-format=\"YYYY-MM-DD HH\"\n                :placeholder=\"$t('form.select_placeholder')\"\n              />\n              <el-date-picker\n                v-else-if=\"item.date_format === 'daterange'\"\n                v-model=\"item.value\"\n                size=\"large\"\n                type=\"daterange\"\n                value-format=\"YYYY-MM-DD HH:mm\"\n              />\n\n              <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                {{ item.desc }}\n              </div>\n            </el-form-item>\n\n            <el-form-item\n              v-else-if=\"item.type === 'tag'\"\n              :prop=\"`${index}.value`\"\n              :label=\"item.label\"\n              :required=\"item.required\"\n              :rules=\"[{ validator: validator(item), trigger: 'change' }]\"\n            >\n              <div>\n                <div class=\"flex flex-wrap gap-3\">\n                  <template v-for=\"(tag, childIndex) in item.value\" :key=\"childIndex\">\n                    <div\n                      class=\"border bordre-[#B0B7C3] rounded-sm min-h-[32px] inline-flex items-center px-3 py-1 text-xs text-[#182B50] text-opacity-80 break-all\"\n                    >\n                      {{ tag }}\n                      <el-icon class=\"cursor-pointer ml-1\" color=\"#d2d5dc\" @click=\"handleDelTag(item, childIndex)\">\n                        <Close />\n                      </el-icon>\n                    </div>\n                  </template>\n                  <el-input\n                    v-if=\"item.focus\"\n                    v-model=\"item.temp\"\n                    autofocus\n                    style=\"width: 104px\"\n                    class=\"h-8\"\n                    :placeholder=\"$t('form_input_placeholder')\"\n                    @keypress.enter=\"handleAddTag(item)\"\n                    @blur=\"handleAddTag(item)\"\n                  />\n                  <div\n                    v-else\n                    class=\"border bordre-[#B0B7C3] border-dashed rounded-sm h-8 inline-flex items-center px-3 cursor-pointer\"\n                    @click=\"handleFocusTag(item)\"\n                  >\n                    <span class=\"text-xs text-[#182B50] text-opacity-80\">+ {{ $t('action_add') }}</span>\n                  </div>\n                </div>\n                <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                  {{ item.desc }}\n                </div>\n              </div>\n            </el-form-item>\n\n            <el-form-item\n              v-else-if=\"['file', 'array_image', 'array_audio', 'array_video', 'array_file'].includes(item.type)\"\n              :prop=\"`${index}.value`\"\n              :label=\"item.label\"\n              :required=\"item.required\"\n              :rules=\"[{ validator: validator(item), trigger: ['change', 'blur'] }]\"\n            >\n              <div class=\"w-full\">\n                <div v-show=\"item.file_limit !== item.value.length\">\n                  <FileUpload\n                    ref=\"uploadRef\"\n                    v-model:file-list=\"item.value\"\n                    class=\"w-20\"\n                    drag\n                    :accept=\"item.file_accept.map(item => `.${item}`).join(',')\"\n                    :limit=\"item.file_limit\"\n                    :multiple=\"item.file_limit === 1 ? false : true\"\n                    :size=\"item.file_size\"\n                    :show-file-list=\"false\"\n                  >\n                    <div class=\"w-20 h-20 border border-dashed rounded-sm flex-center flex-col\">\n                      <!-- <img class=\"w-4 h-4\" src=\"/images/upload.png\" /> -->\n                      <div class=\"text-xs text-[#182B5066] mt-2\">点击上传</div>\n                    </div>\n                  </FileUpload>\n                </div>\n                <template v-for=\"file in item.value\" :key=\"file.uid\">\n                  <div class=\"h-9 px-2 border rounded mt-3 flex items-center gap-2\">\n                    <div class=\"flex-1 text-sm text-[#182B50] truncate\">\n                      {{ file.name }}\n                    </div>\n                    <div v-if=\"file.status === 'success'\" class=\"flex items-center\">\n                      <el-button type=\"primary\" link @click=\"handleViewFile(file)\"> 查看 </el-button>\n                      <div class=\"w-px h-4 mx-1 bg-[#E3E5EA]\" />\n                      <el-button type=\"danger\" link @click=\"handleDelFile(file, item)\"> 删除 </el-button>\n                    </div>\n                    <div v-else class=\"flex items-center\">\n                      <el-icon class=\"animate-rotate\">\n                        <Loading />\n                      </el-icon>\n                    </div>\n                  </div>\n                </template>\n\n                <div class=\"flex items-center gap-1 mt-2\">\n                  <el-icon size=\"14\" color=\"#182B50\">\n                    <Warning />\n                  </el-icon>\n                  <span class=\"text-xs text-[#182B50CC]\">单个文件大小不超过{{ item.file_size }}MB</span>\n                </div>\n                <div>\n                  <span class=\"text-xs text-[#182B50CC]\">支持格式：{{ item.file_accept.join('、') }}</span>\n                </div>\n              </div>\n            </el-form-item>\n\n            <template v-if=\"item.type === 'array_text'\">\n              <el-form-item\n                v-for=\"(input, inputIndex) in item.value\"\n                :key=\"inputIndex\"\n                :prop=\"`${index}.value[${inputIndex}]`\"\n                :label=\"inputIndex === 0 ? item.label : ''\"\n                :required=\"item.required\"\n                :rules=\"[\n                  { required: item.required, message: $t('form.input_placeholder') + item.label, trigger: 'blur' },\n                ]\"\n                class=\"relative\"\n              >\n                <el-input\n                  v-model=\"item.value[inputIndex]\"\n                  size=\"large\"\n                  :placeholder=\"$t('form.input_placeholder')\"\n                  :maxlength=\"item.max_length ? item.max_length : -1\"\n                  :show-word-limit=\"item.show_word_limit\"\n                >\n                  <template #suffix>\n                    <svg-icon\n                      name=\"del\"\n                      width=\"16\"\n                      class=\"cursor-pointer hover:opacity-60\"\n                      @click=\"handleArrayTextDelete(item, inputIndex)\"\n                    />\n                  </template>\n                </el-input>\n                <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                  {{ item.desc }}\n                </div>\n                <el-button\n                  v-if=\"inputIndex === 0\"\n                  link\n                  type=\"primary\"\n                  class=\"absolute -top-7 right-0\"\n                  @click=\"handleArrayTextAdd(item)\"\n                >\n                  <el-icon class=\"mr-1\"><Plus /></el-icon>\n                  {{ $t('action_add') }}\n                </el-button>\n              </el-form-item>\n            </template>\n          </template>\n        </el-form>\n        <div>\n          <el-button v-debounce type=\"primary\" size=\"large\" @click=\"handleStartRunning\">\n            {{ $t('start_running') }}\n          </el-button>\n        </div>\n      </template>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { watch, ref } from 'vue'\nimport { Loading, RefreshRight, Warning, Close, Plus } from '@element-plus/icons-vue'\nimport type { FormInstance } from 'element-plus'\nimport FileUpload from '@/components/Upload/index.vue'\nimport PromptInput from '@/components/Prompt/input.vue'\n\nimport conversationApi from '@/api/modules/conversation'\n\nimport { useAgentFormStore } from '../store'\nimport { useConversationStore } from '@/stores'\n\nimport { generateRandomId } from '@/utils'\nimport { isUrl } from '@/utils/url'\nimport { outputDefaultField } from '@/constants/agent'\nimport { AGENT_TYPES } from '@/constants/platform/config'\n\nconst store = useAgentFormStore()\nconst conversationStore = useConversationStore()\n\nconst formRef = ref<FormInstance>()\nconst showResult = ref(false)\nconst loading = ref(false)\nconst result = ref([])\nconst resultString = ref('')\nconst showError = ref(false)\nconst initialHasOutputFields = ref(false)\nconst errorMessage = ref('')\n\ninterface FormItem extends Agent.Field {\n  value: string | string[]\n  temp?: string\n  focus?: boolean\n}\n\nconst form = ref<FormItem[]>([])\nconst abortController = ref<AbortController | null>(null)\n\nconst validator = (item: FormItem) => {\n  return (rule: any, value: any, callback: any) => {\n    if (item.required) {\n      let hasVal = false\n\n      if (item.type === 'file') {\n        // 处理文件类型\n        hasVal = Array.isArray(item.value) && item.value.length > 0\n      } else if (Array.isArray(item.value)) {\n        // 处理数组类型\n        hasVal = item.value.some(val => val && String(val).trim().length > 0)\n      } else {\n        // 处理字符串类型\n        hasVal = item.value && String(item.value).trim().length > 0\n      }\n\n      if (hasVal) callback()\n      else callback(new Error(`请添加${item.label}`))\n    } else {\n      callback()\n    }\n  }\n}\n\nconst setFormatForm = () => {\n  initialHasOutputFields.value = store.form_data.settings.output_fields.length > 0\n  form.value = (store.form_data.settings.input_fields || []).map(item => {\n    if (['tag', 'file', 'array_image', 'array_audio', 'array_video', 'array_file'].includes(item.type)) {\n      return {\n        ...item,\n        value: [],\n      }\n    }\n    if (item.type === 'array_text') {\n      return {\n        ...item,\n        value: [''],\n      }\n    }\n    return {\n      ...item,\n      value: item.type === 'select' && item.multiple ? [] : '',\n    }\n  })\n}\n\n// 从对象中获取url\nconst getSrc = (value: any, id: string) => {\n  if (typeof value === 'object' && value !== null) {\n    for (const key in value) {\n      if (Object.prototype.hasOwnProperty.call(value, key)) {\n        const val = value[key]\n        if (typeof val === 'string' && isUrl(val)) {\n          return val\n        }\n      }\n    }\n    result.value = result.value.filter(item => item.id !== id)\n    ElMessage.error(window.$t('not_found_url'))\n  }\n  return value\n}\n\nconst handleRestart = () => {\n  setFormatForm()\n  showResult.value = false\n  loading.value = false\n  result.value = []\n  showError.value = false\n  errorMessage.value = ''\n  if (abortController.value) {\n    abortController.value.abort()\n    abortController.value = null\n  }\n}\nconst handleFocusTag = (item: FormItem) => {\n  item.temp = ''\n  item.focus = true\n}\nconst handleAddTag = (item: FormItem) => {\n  const temp = item.temp?.trim()\n  if (temp) {\n    item.value.unshift(temp)\n    item.temp = ''\n  }\n  item.focus = false\n}\nconst handleDelTag = (item: FormItem, index: number) => {\n  item.value.splice(index, 1)\n}\n\nconst handleArrayTextAdd = (item: FormItem) => {\n  item.value.push('')\n}\nconst handleArrayTextDelete = (item: FormItem, index: number) => {\n  if (item.value.length === 1) {\n    item.value = ['']\n    return\n  }\n  item.value.splice(index, 1)\n}\n\nconst handleViewFile = (file: any) => {\n  window.open(file.url, '_blank')\n}\nconst handleDelFile = (file: any, item: FormItem) => {\n  item.value = item.value.filter(item => item.id !== file.id)\n}\n\nconst getInputs = () => {\n  const inputs = form.value.reduce((result, item) => {\n    if (item.value.toString() === '') return result\n    if (item.type === 'file') {\n      if (store.agent_type !== AGENT_TYPES.COZE_WORKFLOW_CN) {\n        result[`${item.variable}`] = Array.isArray(item.value)\n          ? item.value.map(item => `file_id:${item.id}`).join(',')\n          : `file_id:${item.value}`\n      } else {\n        result[`${item.variable}`] = `file_id:${item.value[0].id}`\n      }\n    } else if (['array_image', 'array_audio', 'array_video', 'array_file'].includes(item.type)) {\n      result[`${item.variable}`] = item.value.map(item => `file_id:${item.id}`)\n    } else if (item.type === 'array_text') {\n      result[`${item.variable}`] = item.value\n    } else {\n      result[`${item.variable}`] =\n        item.type === 'select' && !item.multiple\n          ? item.value\n          : Array.isArray(item.value)\n            ? item.value.join(',')\n            : String(item.value)\n    }\n    return result\n  }, {})\n  // Object.keys(inputs).forEach(key => {\n  //   if (!inputs[key]) {\n  //     delete inputs[key]\n  //   }\n  // })\n  return inputs\n}\n\n// 没有任何输入时也应正常运行\nconst getQuestion = inputs => {\n  const keys = Object.keys(inputs)\n  for (let index = 0; index < keys.length; index++) {\n    const key = keys[index]\n    const value = inputs[key]\n    if (value === undefined) continue // 跳过未定义值\n\n    if (typeof value === 'string' && value.includes('file_id:')) {\n      return 'image'\n    }\n    if (value !== undefined) {\n      return String(value).slice(0, 20)\n    }\n  }\n  return '' // 所有值均处理完毕后返回空字符串\n}\n\nconst handleStartRunning = async () => {\n  const isValid = await formRef.value?.validate()\n  if (!isValid) return\n  const inputs = getInputs()\n  loading.value = true\n\n  const conv = await conversationStore.save({\n    data: { agent_id: store.agent_data.agent_id, title: getQuestion(inputs) },\n  })\n\n  const data = {\n    conversation_id: conv.conversation_id,\n    model: `agent-${store.agent_data.agent_id}`,\n    parameters: inputs,\n    stream: true,\n  }\n  abortController.value = new AbortController()\n  showResult.value = true\n  conversationApi.workflow\n    .run(data, {\n      responseType: 'stream',\n      onDownloadProgress: e => {\n        // processedLength = processStreamData(e, processedLength)\n      },\n      signal: abortController.value.signal,\n    })\n    .then(response => {\n      const res = JSON.parse(response)\n      if (store.form_data.settings.output_fields.length > 0) {\n        const output: Record<string, string> = store.form_data.settings.output_fields.reduce((result, item) => {\n          if (!res.data.workflow_output_data[item.variable]) return result\n          result.push({\n            id: item.id,\n            label: item.label,\n            type: item.type,\n            variable: item.variable,\n            value: res.data.workflow_output_data[item.variable] || '',\n          })\n          return result\n        }, [])\n        result.value = output\n      } else {\n        resultString.value = JSON.stringify(res.data.workflow_output_data, null, 2)\n      }\n    })\n    .catch(res => {\n      const resData = JSON.parse(res.response.data)\n      showError.value = true\n      errorMessage.value = resData.message\n    })\n    .finally(() => {\n      loading.value = false\n      abortController.value = null\n    })\n}\n\n// 同步输出变量\nconst handleSyncVariables = () => {\n  if (!resultString.value) return\n\n  // 格式化result为对象类型\n  let resultData: Record<string, any>\n  try {\n    resultData = JSON.parse(resultString.value)\n  } catch (e) {\n    console.error('解析result失败:', e)\n    return\n  }\n\n  // 生成输出字段列表\n  const fields: Agent.Field[] = Object.keys(resultData).map(key => {\n    return { ...outputDefaultField, id: generateRandomId(10), variable: key, label: key, type: 'textarea' }\n  })\n\n  // 更新存储中的输出字段\n  store.form_data.settings.output_fields = fields\n\n  showResult.value = false\n  setTimeout(() => {\n    showResult.value = true\n    handleRestart()\n  }, 0)\n}\n\nwatch(\n  () => store.form_data.settings.input_fields,\n  () => {\n    setFormatForm()\n  },\n  { deep: true, immediate: true }\n)\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/agent/create/store.ts",
    "content": "import { defineStore } from 'pinia'\nimport { AGENT_TYPE, agentApi } from '@/api/modules/agent'\nimport { CHANNEL_TYPE_VALUE_MAP, channelApi } from '@/api/modules/channel'\nimport { groupApi } from '@/api/modules/group'\nimport { useEnterpriseStore } from '@/stores'\nimport {\n  getAgentByAgentType,\n  getModelChannelTypes,\n  BACKEND_AGENT_TYPE,\n  AGENT_MODES,\n} from '@/constants/platform/config'\nimport type { AgentType } from '@/constants/platform/config'\nimport { GROUP_TYPE } from '@/constants/group'\n\nconst enterprise_store = useEnterpriseStore()\n\nconst DEFAULT_COMPLETION_PARAMS = {\n  temperature: 0.2,\n  top_p: 0.75,\n  presence_penalty: 0.5,\n  frequency_penalty: 0.5,\n}\n\nexport const useAgentFormStore = defineStore('agent-form-store', {\n  state: (): {\n    saving: boolean\n    loading: boolean\n    agent_id: number\n    agent_type: string\n    form_data: Agent.FormData\n    agent_data: Record<string, any>\n    group_options: any[]\n    model_options: any[]\n    is_new: boolean\n  } => ({\n    saving: false,\n    loading: false,\n    agent_id: 0,\n    agent_type: 'prompt',\n    form_data: {\n      logo: '',\n      name: '',\n      group_id: 0,\n      description: '',\n      channel_type: 0,\n      model: '',\n      sort: 0,\n      prompt: '',\n      user_group_ids: [],\n      subscription_group_ids: [],\n      tools: [],\n      use_cases: [],\n      configs: {},\n      custom_config: {\n        agent_type: 'prompt',\n        agent_mode: 'chat',\n        provider_id: 0,\n        tencent_bot_id: '',\n        coze_workspace_id: '',\n        coze_bot_id: '',\n        coze_bot_url: '',\n        app_builder_bot_id: '',\n        chat53ai_agent_id: '',\n        channel_config: {},\n      },\n      settings: {\n        opening_statement: '',\n        suggested_questions: [],\n        file_parse: {\n          enable: false,\n        },\n        image_parse: {\n          enable: false,\n        },\n        relate_agents: [],\n        input_fields: [],\n        output_fields: [],\n      },\n    },\n    agent_data: {},\n    group_options: [],\n    model_options: [],\n    is_new: false,\n  }),\n  getters: {\n    agent_option_data: state => {\n      return getAgentByAgentType(state.agent_type as AgentType)\n    },\n    support_file: state => {\n      return state.agent_type !== AGENT_TYPE.PROMPT\n    },\n    support_image: state => {\n      if (state.agent_type !== AGENT_TYPE.PROMPT) return true\n\n      return (\n        state.model_options\n          .find((item: { model_options: Array<{ value: string }> }) =>\n            item.model_options.some((row: { value: string }) => row.value === state.form_data.model)\n          )\n          ?.model_options.find(\n            (item: { value: string; vision?: boolean }) => item.value === state.form_data.model\n          )?.vision || false\n      )\n    },\n    is_independent: () => enterprise_store.info.is_independent,\n  },\n\n  actions: {\n    async loadDetailData() {\n      if (!this.agent_id) return Promise.resolve()\n\n      this.loading = true\n      try {\n        this.agent_data = await agentApi.detail({ data: { agent_id: this.agent_id } })\n\n        this.updateFormData()\n      } finally {\n        this.loading = false\n      }\n    },\n\n    updateFormData() {\n      this.agent_type = this.agent_data.agent_type || this.agent_type || ''\n      Object.assign(this.form_data, {\n        logo: this.agent_data.logo || this.agent_option_data?.icon || '',\n        name: this.agent_data.name || '',\n        group_id: +this.agent_data.group_id || 0,\n        description: this.agent_data.description || '',\n        channel_type: +this.agent_data.channel_type || 0,\n        model: this.agent_data.model || '',\n        sort: +this.agent_data.sort || 0,\n        prompt: this.agent_data.prompt || '',\n        user_group_ids: this.agent_data.user_group_ids || [],\n        subscription_group_ids: this.agent_data.user_group_ids || [],\n        tools: this.agent_data.tools || [],\n        use_cases: this.agent_data.use_cases || [],\n        configs:\n          this.agent_data.configs && Object.keys(this.agent_data.configs).length > 0\n            ? this.agent_data.configs\n            : { completion_params: DEFAULT_COMPLETION_PARAMS },\n        enable: !!+this.agent_data.enable || false,\n        custom_config: {\n          agent_type: this.agent_type,\n          provider_id: 0,\n          channel_id: 0,\n          coze_workspace_id: '',\n          coze_bot_id: '',\n          coze_bot_url: '',\n          tencent_bot_id: '',\n          app_builder_bot_id: '',\n          chat53ai_agent_id: '',\n          channel_config: {},\n          ...(this.agent_data.custom_config || {}),\n        },\n        settings: {\n          opening_statement: '',\n          suggested_questions: [],\n          // 文件解析\n          file_parse: {\n            enable: false,\n          },\n          // 图片解析\n          image_parse: {\n            enable: false,\n          },\n          // 关联场景\n          relate_agents: [],\n          input_fields: [],\n          output_fields: [],\n          ...(this.agent_data.settings || {}),\n        },\n      })\n      const custom_config = this.agent_data.custom_config || {}\n      if (this.agent_type === AGENT_TYPE.PROMPT) {\n        this.form_data.model =\n          `${custom_config.channel_id}_${this.agent_data.channel_type}_${this.agent_data.model}` ||\n          ''\n      }\n      // 文件解析 迁移到 setting来\n      if (custom_config.file_parse) {\n        this.form_data.settings.file_parse = custom_config.file_parse\n        this.form_data.settings.image_parse = custom_config.image_parse\n        delete custom_config.file_parse\n        delete custom_config.image_parse\n      }\n    },\n\n    async loadGroupOptions() {\n      const list = await groupApi.list({ params: { group_type: GROUP_TYPE.AGENT } })\n      this.group_options = (list || []).map(item => {\n        item.value = +item.group_id || 0\n        item.label = item.group_name || ''\n        return item\n      })\n      if (this.group_options.length && !this.form_data.group_id)\n        this.form_data.group_id = this.group_options[0].value\n      if (!this.group_options.find(item => item.value === this.form_data.group_id))\n        this.form_data.group_id = ''\n    },\n\n    async loadChannelOptions() {\n      const list = await channelApi.list()\n      const model_List = (list || []).filter((item = {}) =>\n        getModelChannelTypes().includes(item.channel_type)\n      )\n      const all_model_options = []\n      this.model_options = model_List.reduce((acc, item) => {\n        ;((item.value = item.channel_type),\n          (item.icon = window.$getRealPath({ url: `/images/platform/${item.icon}.png` })))\n\n        const options = (item.model_options || []).map((option = {}) => {\n          option.value = `${item.channel_id}_${item.channel_type}_${option.value}`\n          option.icon = window.$getRealPath({ url: `/images/platform/${option.icon}.png` })\n          return option\n        })\n        const model = acc.find(res => res.value === item.channel_type)\n        if (model) {\n          model.options.push(...options)\n        } else {\n          item.options = options\n          acc.push(item)\n        }\n        all_model_options.push(...options)\n\n        return acc\n      }, [])\n      if (all_model_options.length && !this.form_data.model)\n        this.form_data.model = all_model_options[0].value\n      if (\n        [AGENT_TYPE.PROMPT].includes(this.agent_type) &&\n        !all_model_options.find(item => item.value === this.form_data.model)\n      )\n        this.form_data.model = ''\n    },\n    resetState() {\n      this.saving = false\n      this.loading = false\n      this.agent_id = 0\n      this.agent_type = 'prompt'\n      this.is_new = false\n      this.form_data = {\n        logo: '',\n        name: '',\n        group_id: 0,\n        description: '',\n        channel_type: 0,\n        model: '',\n        sort: 0,\n        prompt: '',\n        user_group_ids: [],\n        subscription_group_ids: [],\n        tools: [],\n        use_cases: [],\n        configs: { completion_params: DEFAULT_COMPLETION_PARAMS },\n        custom_config: {\n          agent_type: 'prompt',\n          agent_mode: 'chat',\n          provider_id: 0,\n          channel_id: 0,\n          coze_workspace_id: '',\n          coze_bot_id: '',\n          app_builder_bot_id: '',\n          tencent_bot_id: '',\n          channel_config: {},\n          file_parse: {\n            enable: false,\n          },\n          image_parse: {\n            enable: false,\n          },\n        },\n        settings: {\n          opening_statement: '',\n          suggested_questions: [],\n          file_parse: {\n            enable: false,\n          },\n          image_parse: {\n            enable: false,\n          },\n          relate_agents: [],\n          input_fields: [],\n          output_fields: [],\n        },\n      }\n      this.agent_data = {}\n      this.group_options = []\n      this.model_options = []\n    },\n\n    async saveAgentData({ hideToast = false } = {}) {\n      const {\n        logo = '',\n        name = '',\n        group_id = 0,\n        description = '',\n        model = '',\n        channel_type = 0,\n        prompt = '',\n        user_group_ids = [],\n        subscription_group_ids = [],\n        use_cases = [],\n        tools = [],\n        sort = 0,\n        configs = {},\n        enable,\n        custom_config = {},\n        settings = {},\n      } = this.form_data\n      const data = {\n        agent_id: this.agent_id || 0,\n        agent_type: BACKEND_AGENT_TYPE.AGENT,\n        channel_type,\n        model,\n        logo,\n        name,\n        group_id: +group_id || 0,\n        description,\n        sort,\n        prompt,\n        user_group_ids,\n        subscription_group_ids,\n        use_cases,\n        tools,\n        configs,\n        enable,\n        custom_config,\n        settings,\n      }\n      const agentConfig = getAgentByAgentType(this.agent_type as AgentType)\n\n      if (!channel_type) data.channel_type = CHANNEL_TYPE_VALUE_MAP.get(this.agent_type) || 0\n\n      switch (this.agent_type) {\n        case AGENT_TYPE.PROMPT:\n          data.custom_config.channel_id = +model.split('_')[0] || 0\n          data.channel_type = +model.split('_')[1] || 0\n          data.model = model.split('_')[2] || ''\n          break\n        case AGENT_TYPE.COZE_AGENT_CN:\n          data.model = custom_config.coze_bot_id || ''\n          break\n        // case AGENT_TYPE.COZE_AGENT_OSV:\n\n        // case AGENT_TYPE.COZE_WORKFLOW_OSV:\n        //   const params = custom_config.coze_bot_url.split('/')\n        //   data.model =\n\n        case AGENT_TYPE.COZE_WORKFLOW_CN:\n          const params = new URLSearchParams(custom_config.coze_bot_url.split('?')[1])\n          data.model = `workflow-${params.get('workflow_id')}` || ''\n          break\n\n        case AGENT_TYPE.APP_BUILDER:\n          data.model = custom_config.app_builder_bot_id || ''\n          break\n        case AGENT_TYPE.TENCENT:\n          data.model = `bot-${custom_config.tencent_bot_id}` || ''\n          break\n        case AGENT_TYPE['53AI_AGENT']:\n          data.model = custom_config.chat53ai_agent_id || ''\n          break\n        case AGENT_TYPE['53AI_WORKFLOW']:\n          data.model = `workflow-${custom_config.chat53ai_agent_id}` || ''\n          break\n      }\n      if (agentConfig && agentConfig.mode === AGENT_MODES.COMPLETION) {\n        data.agent_type = BACKEND_AGENT_TYPE.WORKFLOW\n      }\n      data.custom_config.agent_type = this.agent_type\n      data.custom_config.agent_mode = getAgentByAgentType(this.agent_type).mode || 'chat'\n      this.saving = true\n      const result_data = await agentApi.save({ data }).finally(() => {\n        this.saving = false\n      })\n      if (!hideToast) ElMessage.success(window.$t('action_save_success'))\n      this.agent_data = result_data\n      this.agent_id = result_data.agent_id\n      return this.agent_data\n    },\n  },\n})\n"
  },
  {
    "path": "web/console/src/views/agent/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.agent')\">\n      <template #right>\n        <el-button\n          v-version=\"{ module: VERSION_MODULE.AGENT, count: all_total, content: $t('version.agent_limit') }\"\n          type=\"primary\"\n          size=\"large\"\n          @click=\"add_visible = true\"\n        >\n          + {{ $t('action_add') }}\n        </el-button>\n      </template>\n    </Header>\n\n    <div class=\"flex-1 overflow-y-auto bg-white rounded-lg px-10 py-6 mt-4\">\n      <div class=\"flex items-center justify-between mb-4\">\n        <div class=\"flex flex-1 w-0 gap-2\">\n          <ElSelect\n            v-model=\"filter_form.group\"\n            size=\"large\"\n            :placeholder=\"$t('all')\"\n            class=\"flex-none max-w-[150px]\"\n            @change=\"refresh\"\n          >\n            <template #prefix> {{ $t('internal_user.group.title') }}: </template>\n            <ElOption v-if=\"filter_form.group\" :label=\"$t('all_group')\" :value=\"''\" class=\"min-w-[204px]\" />\n            <ElOption\n              v-for=\"item in groupList\"\n              :key=\"item.group_id\"\n              :label=\"item.group_name\"\n              :value=\"item.group_id\"\n              class=\"min-w-[204px] bg-[#ffffff]\"\n            />\n\n            <!-- 固定底部操作栏 -->\n            <template #footer>\n              <div class=\"flex justify-between items-center mx-2 px-1 pt-2 sticky bottom-0 bg-white z-10\">\n                <div class=\"cursor-pointer text-[#5A6D9E] text-sm hover:opacity-80\" @click=\"openDialog\">\n                  {{ $t('group_management') }}\n                </div>\n              </div>\n            </template>\n          </ElSelect>\n\n          <!-- 一个智能体可以在多个分组中 -->\n          <!-- <GroupTabs\n          ref=\"groupTabsRef\"\n          v-model=\"filter_form.group\"\n          type=\"dropdown\"\n          :group-type=\"GROUP_TYPE.AGENT\"\n          :is-agent-group=\"true\"\n          @change=\"refresh\"\n          @get-options=\"refresh\"\n          @open=\"openDialog\"\n        /> -->\n\n          <ElSelect\n            v-model=\"filter_form.platform\"\n            size=\"large\"\n            class=\"flex-none max-w-[160px]\"\n            clearable\n            :placeholder=\"$t('all')\"\n            @change=\"refresh\"\n          >\n            <template #prefix> {{ $t('module.platform_v2') }}: </template>\n            <ElOption v-if=\"filter_form.platform\" :label=\"$t('module.all_platform')\" :value=\"''\" />\n            <ElOption\n              v-for=\"item in channels\"\n              :key=\"item.label\"\n              :label=\"item.label\"\n              :value=\"item.channelType === 0 ? '1,3,44,36' : item.channelType\"\n            />\n          </ElSelect>\n\n          <ElSelect\n            v-model=\"filter_form.type\"\n            size=\"large\"\n            class=\"flex-none max-w-[160px]\"\n            clearable\n            :placeholder=\"$t('all')\"\n            @change=\"refresh\"\n          >\n            <template #prefix> {{ $t('type') }}: </template>\n            <ElOption v-if=\"filter_form.type\" :label=\"$t('all_type')\" :value=\"''\" />\n            <ElOption :label=\"$t('agent_type_completion_v2')\" value=\"1\" />\n            <ElOption :label=\"$t('agent_type_chat_v2')\" value=\"0\" />\n          </ElSelect>\n        </div>\n        <div class=\"flex-none flex-center gap-3 ml-8\">\n          <!-- <Search v-model=\"filter_form.keyword\" placeholder=\"module.agent_search_placeholder\" @change=\"refresh\" /> -->\n          <ElInput\n            v-model=\"filter_form.keyword\"\n            size=\"large\"\n            clearable\n            :suffix-icon=\"Search\"\n            :placeholder=\"$t('agent.name_v2')\"\n            @change=\"refresh\"\n          />\n        </div>\n      </div>\n\n      <TablePlus\n        header-row-class-name=\"rounded overflow-hidden\"\n        header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n        :data=\"table_data\"\n        :total=\"table_total\"\n        :loading=\"table_loading\"\n        :page=\"filter_form.page\"\n        :limit=\"filter_form.page_size\"\n        @page-size-change=\"onTableSizeChange\"\n        @page-current-change=\"onTableCurrentChange\"\n      >\n        <ElTableColumn prop=\"date\" :label=\"$t('module.agent')\" min-width=\"180\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <div class=\"flex items-center gap-2 w-full\">\n              <img class=\"flex-none w-8 h-8 rounded-full overflow-hidden\" :src=\"row.logo\" alt=\"\" />\n              <div class=\"flex-1 w-0 text-sm flex flex-col\">\n                <div class=\"text-[#2563EB] truncate\">\n                  {{ row.name || '--' }}\n                </div>\n                <div v-show=\"row.description\" class=\"text-xs text-[#808080] truncate\">\n                  {{ row.description || '' }}\n                </div>\n              </div>\n            </div>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('module.platform_v2')\" min-width=\"140\" show-overflow-tooltip>\n          <template #default=\"{ row = {} }\">\n            {{ $t(`agent_app.${row.agent_type}`) || '--' }}\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('type')\" min-width=\"140\" show-overflow-tooltip>\n          <template #default=\"{ row = {} }\">\n            {{ row.backend_agent_type === 0 ? $t('agent_type_chat_v2') : $t('agent_type_completion_v2') }}\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('usage_range')\" min-width=\"180\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <div :class=\"!row.user_group_names.length ? 'text-[#999]' : ''\">\n              <span class=\"text-[#999]\">{{ $t('register_user.title') }}： </span\n              >{{ row.user_group_names.join('、') || '--' }}\n            </div>\n            <div :class=\"!row.internal_members.length ? 'text-[#999]' : ''\">\n              <span class=\"text-[#999]\">{{ $t('internal_user.title') }}： </span\n              >{{ row.internal_members.join('、') || '--' }}\n            </div>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('action_enable')\" min-width=\"80\">\n          <template #default=\"{ row }\">\n            <ElSwitch v-model=\"row.enable\" @change=\"onAgentStatusChange({ data: row })\" />\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('operation')\" width=\"120\" align=\"right\" fixed=\"right\">\n          <template #default=\"{ row }\">\n            <el-button type=\"primary\" link @click=\"onAgentAdd(row.agent_type, row)\">\n              {{ $t('action_edit') }}\n            </el-button>\n            <el-button type=\"primary\" link @click=\"onAgentDelete({ data: row })\">\n              {{ $t('action_delete') }}\n            </el-button>\n          </template>\n        </ElTableColumn>\n      </TablePlus>\n    </div>\n  </Layout>\n\n  <el-drawer v-model=\"add_visible\" :title=\"$t('action_add')\" size=\"650px\" @opened=\"onAddOpened\">\n    <ul class=\"w-full min-h-[300px] overflow-y-auto\">\n      <li v-for=\"(item, itemIndex) in filteredAgentOptions\" :key=\"itemIndex\">\n        <h4 class=\"text-sm text-[#939499]\">\n          {{ $t(item.title) }}\n        </h4>\n        <ul class=\"flex flex-col gap-3 pt-4 pb-6\">\n          <li\n            v-for=\"row in item.filteredChildren\"\n            :key=\"row.value\"\n            class=\"h-[72px] px-6 rounded flex items-center gap-3 bg-[#F8F9FA] cursor-pointer hover:shadow\"\n          >\n            <img class=\"flex-none size-10 rounded-lg\" :src=\"row.icon\" alt=\"\" />\n            <div class=\"flex-1 text-base text-[#1D1E1F] truncate\">\n              {{ $t(row.label) }}\n            </div>\n            <ElButton type=\"primary\" plain class=\"border-none\" @click=\"handleAgentPrepare(row)\">\n              {{ $t('action_add') }}\n            </ElButton>\n          </li>\n        </ul>\n      </li>\n    </ul>\n  </el-drawer>\n\n  <CreateDrawer ref=\"createDrawerRef\" @success=\"row => onAgentAdd(row.agent_type, row, true)\" />\n  <GroupDialog ref=\"dialogRef\" :group-type=\"GROUP_TYPE.AGENT\" @change=\"handleGroupChange\" />\n</template>\n\n<script setup name=\"Agent\" lang=\"ts\">\nimport { nextTick, onMounted, onUnmounted, reactive, ref, computed } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { Search } from '@element-plus/icons-vue'\n\nimport { ElMessage } from 'element-plus'\nimport CreateDrawer from '@/views/agent/create/drawer.vue'\nimport GroupDialog from '@/components/GroupDialog/index.vue'\n\nimport eventBus from '@/utils/event-bus'\n\nimport { agentApi } from '@/api/modules/agent'\nimport { providerApi } from '@/api/modules/provider'\nimport { subscriptionApi } from '@/api/modules/subscription'\nimport { groupApi, Group } from '@/api/modules/group'\nimport { getProvidersByAuth, getProviderByAgentId, AgentType, channels } from '@/constants/platform/config'\nimport { AGENT_APP_OPTIONS } from '@/constants/platform/agent'\nimport { VERSION_MODULE } from '@/constants/enterprise'\nimport { GROUP_TYPE } from '@/constants/group'\n\ninterface SubscriptionItem {\n  group_id: number\n  group_name: string\n}\n\ninterface ProviderItem {\n  provider_type: string\n  [key: string]: any\n}\n\nconst router = useRouter()\nconst createDrawerRef = ref()\nconst dialogRef = ref()\n\nconst filter_form = reactive({\n  group: '',\n  platform: '',\n  type: '',\n  keyword: '',\n  page: 1,\n  page_size: 10,\n})\nconst all_total = ref(0)\nconst table_data = ref<Agent.State[]>([])\nconst table_total = ref(0)\nconst table_loading = ref(false)\nconst add_visible = ref(false)\nconst subscriptionList = ref<SubscriptionItem[]>([])\nconst groupList = ref<SubscriptionItem[]>([])\nconst internalGroupOptions = ref<Record<number, string>>({})\nconst auth_providers = ref<ProviderItem[]>([])\n\nconst openDialog = () => {\n  dialogRef.value?.open()\n}\n\nconst filteredAgentOptions = computed(() => {\n  const authMap = new Map(auth_providers.value.map(provider => [provider.provider_type, provider.is_auth]))\n  return AGENT_APP_OPTIONS.map(item => {\n    const filteredChildren = item.children.filter(row => {\n      const provider = getProviderByAgentId(row.value)\n\n      if (!provider?.auth) {\n        return true\n      }\n      // 需要授权的应用，检查是否已授权\n      return authMap.get(provider.id) === true\n    })\n\n    return {\n      ...item,\n      filteredChildren,\n    }\n  }).filter(item => {\n    return item.filteredChildren.length > 0\n  })\n})\n\nconst loadSubscriptionList = async () => {\n  if (!subscriptionList.value.length)\n    subscriptionList.value = await subscriptionApi.list({ params: { offset: 0, limit: 1000 } })\n}\n\nconst loadGroupList = async () => {\n  if (!groupList.value.length) groupList.value = await groupApi.list({ params: { group_type: GROUP_TYPE.AGENT } })\n}\n\nconst loadInternalGroupList = async () => {\n  const list = await groupApi.list({ params: { group_type: GROUP_TYPE.INTERNAL_USER } })\n  list.forEach((item: Group) => {\n    internalGroupOptions.value[item.group_id] = item.group_name\n  })\n}\n\nconst loadAllTotal = async () => {\n  const { count = 0 } = await agentApi.list({\n    params: {\n      group_id: '-1',\n      keyword: '',\n      offset: 0,\n      limit: 1,\n    },\n  })\n  all_total.value = count\n}\nconst loadListData = async () => {\n  table_loading.value = true\n  await loadSubscriptionList()\n  await loadGroupList()\n\n  try {\n    const { count = 0, agents = [] } = await agentApi.list({\n      params: {\n        group_id: filter_form.group,\n        channel_types: filter_form.platform,\n        agent_types: filter_form.type,\n        keyword: filter_form.keyword,\n        offset: (filter_form.page - 1) * filter_form.page_size,\n        limit: filter_form.page_size,\n      },\n    })\n\n    table_total.value = count\n    table_data.value = []\n    await nextTick()\n\n    table_data.value = agents.map((item: Partial<Agent.State> = {}) => {\n      const agent = item as Agent.State\n      agent.user_group_ids = agent.user_group_ids || []\n      agent.user_group_names = []\n      agent.internal_members = []\n      agent.user_group_ids.forEach(value => {\n        const subscription = subscriptionList.value.find(row => row.group_id === value)\n        if (subscription?.group_name) agent.user_group_names.push(subscription.group_name)\n        if (internalGroupOptions.value[value]) {\n          agent.internal_members.push(internalGroupOptions.value[value])\n        }\n      })\n      return agent\n    })\n  } finally {\n    table_loading.value = false\n  }\n\n  loadAllTotal()\n}\n\nconst refresh = async () => {\n  filter_form.page = 1\n  await loadListData()\n}\n\nconst handleGroupChange = (result: { value: Group[] }) => {\n  groupList.value = result.value\n  filter_form.group = ''\n  refresh()\n}\n\nconst onTableSizeChange = (size: number) => {\n  filter_form.page_size = size\n  refresh()\n}\n\nconst onTableCurrentChange = (current: number) => {\n  filter_form.page = current\n  loadListData()\n}\n\nconst onAgentDelete = async ({ data: { agent_id } }: { data: { agent_id: number } }) => {\n  await ElMessageBox.confirm(window.$t('agent_delete_confirm'), window.$t('action_delete'))\n  await agentApi.delete({ data: { agent_id } })\n  ElMessage.success(window.$t('action_delete_success'))\n  loadListData()\n}\n\nconst loadProviderList = async () => {\n  const list = (await providerApi.list()) as ProviderItem[]\n\n  auth_providers.value = getProvidersByAuth(true).map(item => {\n    const provider_type = item.id\n    return {\n      ...item,\n      provider_type,\n      is_auth: !!list.find(row => row.provider_type === provider_type),\n    }\n  })\n}\n\nconst checkAuth = (value: AgentType): Promise<void> => {\n  return new Promise<void>((resolve, reject) => {\n    const provider = getProviderByAgentId(value)\n    const auth_provider = auth_providers.value.find(row => row.provider_type === provider.id)\n\n    if (auth_provider && !auth_provider?.is_auth) {\n      reject(new Error('Authentication required'))\n      return ElMessageBox.confirm(\n        window.$t('auth_required', { provider_name: window.$t(provider.label) }),\n        window.$t('tip'),\n        {\n          confirmButtonText: window.$t('action_go'),\n          cancelButtonText: window.$t('action_cancel'),\n          type: 'warning',\n        }\n      ).then(() => {\n        router.push({\n          name: 'Platform',\n        })\n      })\n    }\n\n    resolve()\n  })\n}\n\nconst handleAgentPrepare = async (data: { value: string; channel_type: number }) => {\n  await checkAuth(data.value)\n  createDrawerRef.value.open({\n    agent_type: data.value,\n    group_id: +filter_form.group_id > 0 ? filter_form.group_id : undefined,\n    data: { channel_config: { channel_type: data.channel_type } },\n  })\n\n  add_visible.value = false\n}\n\nconst onAgentAdd = async (value: string, data: Partial<Agent.State> = {}, is_new = false) => {\n  await checkAuth(value)\n  loadListData()\n  await router.push({\n    name: 'AgentCreate',\n    query: data.agent_id\n      ? {\n          type: data.agent_type,\n          agent_id: data.agent_id,\n          is_new,\n        }\n      : {\n          type: value,\n          group_id: +filter_form.group_id > 0 ? filter_form.group_id : undefined,\n          is_new,\n        },\n  })\n}\n\nconst onAgentStatusChange = async ({ data: { agent_id, enable } }: { data: { agent_id: number; enable: boolean } }) => {\n  await agentApi.updateStatus({ data: { agent_id, enable } })\n  ElMessage.success(window.$t(enable ? 'action_enable_success' : 'action_disable_success'))\n}\n\n// 添加onAddOpened函数修复错误\nconst onAddOpened = () => {\n  // 抽屉打开时的处理逻辑\n}\n\nonMounted(async () => {\n  await loadInternalGroupList()\n  refresh()\n  loadProviderList()\n  eventBus.on('user-login-success', refresh)\n  eventBus.on('agent-change', loadListData)\n})\n\nonUnmounted(() => {\n  eventBus.off('user-login-success', refresh)\n  eventBus.off('agent-change', loadListData)\n})\n</script>\n\n<style lang=\"scss\" scoped>\n::v-deep(.el-table__cell) {\n  padding: 14px 0;\n}\n\n::v-deep(.el-select__placeholder) {\n  color: black !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/banner/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.banner_diagram')\"></Header>\n    <div v-loading=\"loading\" class=\"mt-5 flex-1 flex flex-col gap-4 bg-white py-6 px-8 box-border\">\n      <ElForm ref=\"formRef\" class=\"flex-1 max-h-[calc(100vh-288px)] overflow-auto\" :model=\"form\" label-position=\"top\">\n        <ElFormItem :label=\"$t('banner.upload_image')\">\n          <div class=\"text-[#939499] text-xs w-full\">{{ $t('banner.upload_image_tip') }}</div>\n          <ul v-if=\"form.url_list.length > 0\" class=\"mt-4 w-full flex flex-col gap-4\">\n            <li v-for=\"(url, index) in form.url_list\" :key=\"url\" class=\"w-full relative\">\n              <UploadImage\n                v-model=\"form.url_list[index]\"\n                class=\"!w-full !h-[14vw]\"\n                :cropper-disabled=\"true\"\n                @confirm=\"onUploadImageConfirm($event, index)\"\n              >\n                <template #mask-text>\n                  <ElIcon class=\"cursor-pointer\" size=\"24\" color=\"#fff\">\n                    <EditPen />\n                  </ElIcon>\n                  <ElIcon class=\"cursor-pointer\" size=\"24\" color=\"#fff\" @click=\"onImageDelete(index)\">\n                    <Delete />\n                  </ElIcon>\n                </template>\n              </UploadImage>\n            </li>\n          </ul>\n          <UploadImage\n            class=\"w-auto h-auto\"\n            :cropper-disabled=\"true\"\n            :disabled=\"addDisabled\"\n            @confirm=\"onUploadImageConfirm\"\n          >\n            <ElButton class=\"mt-4 !border-none !outline-none\" type=\"primary\" plain size=\"large\" :disabled=\"addDisabled\">\n              + {{ $t('action_add') }}({{ form.url_list.length }}/{{ UPLOAD_COUNT_LIMIT }})\n            </ElButton>\n          </UploadImage>\n        </ElFormItem>\n        <ElFormItem :label=\"$t('banner.interval')\">\n          <div class=\"text-[#939499] text-xs w-full\">{{ $t('banner.interval_tip') }}</div>\n          <ElInputNumber\n            v-model=\"form.interval\"\n            class=\"mt-4 !w-[300px] el-input-number--left\"\n            size=\"large\"\n            :controls=\"false\"\n            :min=\"1\"\n            :max=\"1000\"\n          >\n            <template #suffix>\n              <span>{{ $t('second') }}</span>\n            </template>\n          </ElInputNumber>\n        </ElFormItem>\n        <div class=\"w-full h-8\"></div>\n      </ElForm>\n      <ElDivider class=\"!mt-3\" />\n      <ElButton v-debounce class=\"h-[36px] w-[96px]\" type=\"primary\" size=\"large\" @click=\"handleSave\"\n        >{{ $t('action_save') }}\n      </ElButton>\n    </div>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed, onMounted } from 'vue'\nimport { Delete, EditPen } from '@element-plus/icons-vue'\nimport type { FormInstance } from 'element-plus'\nimport UploadImage from '@/components/Upload/image.vue'\n\nimport { getDefaultBanner, transformBanner } from '@/api/modules/banner/transform'\nimport { bannerApi } from '@/api/modules/banner/index'\nimport type { Banner } from '@/api/modules/banner/types'\nimport { BANNER_CONFIG } from '@/constants/banner'\n\nconst UPLOAD_COUNT_LIMIT = BANNER_CONFIG.MAX_IMAGES\n\nconst formRef = ref<FormInstance>()\n\nconst loading = ref(true)\nconst submitting = ref(false)\nconst form = reactive<Banner>(getDefaultBanner())\nconst addDisabled = computed(() => {\n  return form.url_list.length >= UPLOAD_COUNT_LIMIT\n})\n\nconst fetchBannerData = async () => {\n  loading.value = true\n  const data = await bannerApi\n    .get()\n    .then(transformBanner)\n    .finally(() => {\n      loading.value = false\n    })\n  form.url_list = data.url_list || []\n  form.interval = data.interval || BANNER_CONFIG.DEFAULT_INTERVAL\n}\n\nconst handleSave = async () => {\n  const valid = await formRef.value?.validate()\n  if (!valid) return\n  submitting.value = true\n  await bannerApi\n    .save({\n      ...form,\n    })\n    .finally(() => {\n      submitting.value = false\n    })\n  ElMessage.success(window.$t('action_save_success'))\n  fetchBannerData()\n}\n\nconst onUploadImageConfirm = ({ url = '' }, index?: number) => {\n  if (index !== undefined && form.url_list[index]) form.url_list[index] = url\n  else form.url_list.push(url)\n}\nconst onImageDelete = (index: number) => {\n  form.url_list.splice(index, 1)\n}\n\nonMounted(() => {\n  fetchBannerData()\n})\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/views/chunk/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.chunk_setting')\" />\n\n    <div v-loading=\"isLoading\" class=\"flex-1 flex flex-col bg-white p-6 mt-3 overflow-y-auto\">\n      <!-- <div\n        class=\"flex items-center justify-between bg-white border border-gray-200 rounded-lg p-4 hover:shadow-sm transition-shadow\"\n      >\n        <div class=\"flex-1 flex items-center gap-3\">\n          <img :src=\"$getRealPath({ url: '/images/tools/textin.png' })\" alt=\"通用文档\" class=\"size-8\" />\n          <h4 class=\"text-sm font-medium text-[#1D1E1F]\">通用文档</h4>\n          <span class=\"text-sm text-[#999999]\">根据智能算法进行分段计算及数据清洗</span>\n        </div>\n\n        <div class=\"flex items-center gap-4 ml-2\">\n          <div class=\"border-r h-3 w-px\"></div>\n          <div class=\"flex items-center\">\n            <el-button type=\"primary\" link @click=\"handleEdit('default')\">配置</el-button>\n          </div>\n        </div>\n      </div> -->\n\n      <div class=\"flex-1 flex flex-col overflow-y-auto\">\n        <!-- <div class=\"flex items-center gap-2.5 mb-4\">\n          <div class=\"w-1 h-4 bg-[#2563EB]\"></div>\n          <span class=\"text-sm text-[#1D1E1F] mr-2\">将知识标题添加至</span>\n          <el-checkbox v-model=\"setting.chunking_config.knowledge_chunking.include_title\" class=\"!mr-0\" :value=\"true\"\n            >知识点</el-checkbox\n          >\n          <el-checkbox v-model=\"setting.chunking_config.index_chunking.include_title\" :value=\"true\">索引块</el-checkbox>\n        </div> -->\n\n        <!-- 知识点配置 -->\n        <div class=\"border rounded\">\n          <div class=\"flex items-center gap-2 px-5 py-4 border-b\">\n            <SvgIcon name=\"notebook-one\" width=\"16px\" height=\"16px\" />\n            <h4 class=\"text-sm text-[#1D1E1F]\">知识点</h4>\n          </div>\n          <div class=\"py-5 px-10 flex flex-col gap-4\">\n            <div class=\"flex items-center\">\n              <el-radio-group v-model=\"setting.knowledge_chunking_type\">\n                <el-radio :value=\"CHUNK_TYPE.CUSTOM\">自定义拆分</el-radio>\n                <el-radio :value=\"CHUNK_TYPE.NONE\">不拆分</el-radio>\n              </el-radio-group>\n            </div>\n            <div v-if=\"setting.knowledge_chunking_type === CHUNK_TYPE.CUSTOM\" class=\"flex items-center gap-2\">\n              <div\n                class=\"w-[212px] h-9 px-3 border rounded flex items-center gap-1.5 cursor-pointer\"\n                :class=\"{\n                  'border-[#2563EB]': setting.chunking_config.knowledge_chunking.chunk_mode === CHUNK_MODE.LENGTH,\n                }\"\n                @click=\"handleChangeChunkMode('knowledge', CHUNK_MODE.LENGTH)\"\n              >\n                <div class=\"size-5 rounded bg-[#E0EAFF] flex-center text-[#2563EB]\">\n                  <svg-icon name=\"list-numbers\" width=\"14px\" />\n                </div>\n                <span class=\"flex-1 text-sm text-[#1D1E1F]\">长度优先</span>\n                <el-radio\n                  :model-value=\"setting.chunking_config.knowledge_chunking.chunk_mode\"\n                  :value=\"CHUNK_MODE.LENGTH\"\n                ></el-radio>\n              </div>\n              <div\n                class=\"w-[212px] h-9 px-3 border rounded flex items-center gap-1.5 cursor-pointer\"\n                :class=\"{\n                  'border-[#2563EB]': setting.chunking_config.knowledge_chunking.chunk_mode === CHUNK_MODE.IDENTIFIER,\n                }\"\n                @click=\"handleChangeChunkMode('knowledge', CHUNK_MODE.IDENTIFIER)\"\n              >\n                <div class=\"size-5 rounded bg-[#FFF1D6] flex-center text-[#F0A105]\">#</div>\n                <span class=\"flex-1 text-sm text-[#1D1E1F]\">标识符优先</span>\n                <el-radio\n                  :model-value=\"setting.chunking_config.knowledge_chunking.chunk_mode\"\n                  :value=\"CHUNK_MODE.IDENTIFIER\"\n                ></el-radio>\n              </div>\n            </div>\n            <div class=\"p-4 bg-[#F8F9FA] rounded-md\">\n              <div v-if=\"setting.knowledge_chunking_type === CHUNK_TYPE.CUSTOM\" class=\"space-y-3 mb-3\">\n                <div class=\"flex items-center\">\n                  <div class=\"flex-none w-20 text-sm text-[#4F5052]\">标识符</div>\n                  <el-checkbox-group v-model=\"setting.knowledge_chunking_rule\" class=\"flex items-center\">\n                    <el-checkbox class=\"!mr-0\" :value=\"SPLIT_TYPE.HEADING\"></el-checkbox>\n                    <div class=\"flex items-center mr-5\">\n                      <el-dropdown trigger=\"click\" @command=\"handleChangeHeading('knowledge', $event)\">\n                        <div class=\"flex items-center gap-1\">\n                          {{ getHeadingLabel('knowledge') }}\n                          <el-icon><ArrowDown /></el-icon>\n                        </div>\n                        <template #dropdown>\n                          <el-dropdown-menu>\n                            <el-dropdown-item v-for=\"item in headerList\" :key=\"item.type\" :command=\"item.type\">\n                              {{ item.label }}\n                            </el-dropdown-item>\n                          </el-dropdown-menu>\n                        </template>\n                      </el-dropdown>\n                    </div>\n                    <el-checkbox :value=\"CHUNK_TYPE.CUSTOM\"></el-checkbox>\n                    <div class=\"flex items-center gap-2\">\n                      <span class=\"text-sm text-[#4F5052] whitespace-nowrap\">指定标识符</span>\n                      <div class=\"w-52 max-w-96\">\n                        <el-select\n                          v-model=\"setting.knowledge_chunking_input\"\n                          default-first-option\n                          filterable\n                          :reserve-keyword=\"false\"\n                          multiple\n                          allow-create\n                          collapse-tags\n                          :max-collapse-tags=\"2\"\n                        >\n                          <el-option v-for=\"item in knowledgeCommonList\" :key=\"item.value\" :value=\"item.value\">\n                            {{ item.label }}\n                          </el-option>\n                        </el-select>\n                      </div>\n                    </div>\n                  </el-checkbox-group>\n                </div>\n                <div class=\"flex items-center\">\n                  <div class=\"flex-none w-20 text-sm text-[#4F5052]\">长度</div>\n                  <div>\n                    <el-input-number\n                      v-model=\"setting.chunking_config.knowledge_chunking.max_length\"\n                      class=\"el-input-number--left\"\n                      size=\"large\"\n                      :min=\"maxLength.min\"\n                      :max=\"maxLength.max\"\n                      :controls=\"false\"\n                      @blur=\"handleBlurMaxLength('knowledge')\"\n                    />\n                  </div>\n                </div>\n              </div>\n\n              <div class=\"flex items-center\">\n                <div class=\"flex-none w-20 text-sm text-[#4F5052]\">召回语料</div>\n                <el-checkbox v-model=\"setting.chunking_config.knowledge_chunking.include_filename\"\n                  >叠加文件名</el-checkbox\n                >\n                <el-checkbox v-model=\"setting.chunking_config.knowledge_chunking.include_title\"\n                  >叠加标题及子标题</el-checkbox\n                >\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <!-- 索引块配置 -->\n        <div class=\"border rounded mt-4\">\n          <div class=\"flex items-center gap-2 px-5 py-4 border-b\">\n            <SvgIcon name=\"layers\" width=\"16px\" height=\"16px\" />\n            <h4 class=\"text-sm text-[#1D1E1F]\">检索块</h4>\n          </div>\n          <div class=\"py-5 px-10 flex flex-col gap-4\">\n            <div class=\"flex items-center\">\n              <el-radio-group v-model=\"setting.index_chunking_type\">\n                <el-radio :value=\"CHUNK_TYPE.CUSTOM\">自定义拆分</el-radio>\n                <el-radio :value=\"CHUNK_TYPE.NONE\">不拆分</el-radio>\n              </el-radio-group>\n            </div>\n            <div v-if=\"setting.index_chunking_type === CHUNK_TYPE.CUSTOM\" class=\"flex items-center gap-2\">\n              <div\n                class=\"w-[212px] h-9 px-3 border rounded flex items-center gap-1.5 cursor-pointer\"\n                :class=\"{\n                  'border-[#2563EB]': setting.chunking_config.index_chunking.chunk_mode === CHUNK_MODE.LENGTH,\n                }\"\n                @click=\"handleChangeChunkMode('index', CHUNK_MODE.LENGTH)\"\n              >\n                <div class=\"size-5 rounded bg-[#E0EAFF] flex-center text-[#2563EB]\">\n                  <svg-icon name=\"list-numbers\" width=\"14px\" />\n                </div>\n                <span class=\"flex-1 text-sm text-[#1D1E1F]\">长度优先</span>\n                <el-radio\n                  :model-value=\"setting.chunking_config.index_chunking.chunk_mode\"\n                  :value=\"CHUNK_MODE.LENGTH\"\n                ></el-radio>\n              </div>\n              <div\n                class=\"w-[212px] h-9 px-3 border rounded flex items-center gap-1.5 cursor-pointer\"\n                :class=\"{\n                  'border-[#2563EB]': setting.chunking_config.index_chunking.chunk_mode === CHUNK_MODE.IDENTIFIER,\n                }\"\n                @click=\"handleChangeChunkMode('index', CHUNK_MODE.IDENTIFIER)\"\n              >\n                <div class=\"size-5 rounded bg-[#FFF1D6] flex-center text-[#F0A105]\">#</div>\n                <span class=\"flex-1 text-sm text-[#1D1E1F]\">标识符优先</span>\n                <el-radio\n                  :model-value=\"setting.chunking_config.index_chunking.chunk_mode\"\n                  :value=\"CHUNK_MODE.IDENTIFIER\"\n                ></el-radio>\n              </div>\n            </div>\n            <div v-if=\"setting.index_chunking_type === CHUNK_TYPE.CUSTOM\" class=\"p-4 bg-[#F8F9FA] rounded-md space-y-2\">\n              <!-- 拆分规则 -->\n              <div class=\"flex items-center\">\n                <div class=\"flex-none w-20 text-sm text-[#4F5052]\">标识符</div>\n                <el-checkbox-group v-model=\"setting.index_chunking_rule\" class=\"flex items-center\">\n                  <el-checkbox class=\"!mr-0\" :value=\"SPLIT_TYPE.HEADING\"></el-checkbox>\n                  <div class=\"flex items-center mr-5\">\n                    <el-dropdown trigger=\"click\" @command=\"handleChangeHeading('index', $event)\">\n                      <div class=\"flex items-center gap-1\" @click.stop>\n                        {{ getHeadingLabel('index') }}\n                        <el-icon><ArrowDown /></el-icon>\n                      </div>\n                      <template #dropdown>\n                        <el-dropdown-menu>\n                          <el-dropdown-item v-for=\"item in headerList\" :key=\"item.type\" :command=\"item.type\">\n                            {{ item.label }}\n                          </el-dropdown-item>\n                        </el-dropdown-menu>\n                      </template>\n                    </el-dropdown>\n                  </div>\n                  <el-checkbox :value=\"SPLIT_TYPE.CUSTOM\"></el-checkbox>\n                  <div class=\"flex items-center gap-2\">\n                    <span class=\"text-sm text-[#4F5052] whitespace-nowrap\">指定标识符</span>\n                    <div class=\"w-52 max-w-96\">\n                      <el-select\n                        v-model=\"setting.index_chunking_input\"\n                        default-first-option\n                        filterable\n                        :reserve-keyword=\"false\"\n                        multiple\n                        allow-create\n                        collapse-tags\n                        :max-collapse-tags=\"2\"\n                      >\n                        <el-option\n                          v-for=\"item in indexCommonList\"\n                          :key=\"item.value\"\n                          :label=\"item.value\"\n                          :value=\"item.value\"\n                        >\n                          {{ item.label }}\n                        </el-option>\n                      </el-select>\n                    </div>\n                  </div>\n                </el-checkbox-group>\n              </div>\n\n              <!-- 最大长度 -->\n              <div class=\"flex items-center\">\n                <div class=\"flex-none w-20 text-sm text-[#4F5052]\">长度</div>\n                <div>\n                  <el-input-number\n                    v-model=\"setting.chunking_config.index_chunking.max_length\"\n                    class=\"el-input-number--left\"\n                    size=\"large\"\n                    :min=\"0\"\n                    :max=\"1000000\"\n                    :controls=\"false\"\n                    @blur=\"handleBlurMaxLength('index')\"\n                  />\n                </div>\n              </div>\n            </div>\n\n            <div class=\"p-4 bg-[#F8F9FA] rounded-md space-y-2\">\n              <!-- 内容概要 -->\n              <div class=\"text-sm text-[#1D1E1F] font-semibold\">索引增强</div>\n              <div class=\"flex items-center\">\n                <div class=\"flex-none w-20 text-sm text-[#4F5052]\">默认索引</div>\n                <el-checkbox v-model=\"setting.chunking_config.index_chunking.include_filename\">叠加文件名</el-checkbox>\n                <el-checkbox v-model=\"setting.chunking_config.index_chunking.include_title\"\n                  >叠加标题及子标题</el-checkbox\n                >\n              </div>\n              <!-- 常见问法 -->\n              <div class=\"flex items-center -mt-2\">\n                <div class=\"flex-none w-20 text-sm text-[#4F5052]\">自动生成</div>\n                <el-checkbox\n                  v-model=\"setting.chunking_config.content_summary.generation_method\"\n                  :true-value=\"GENERATION.AI\"\n                  :false-value=\"GENERATION.MANUAL\"\n                  >内容概要</el-checkbox\n                >\n                <el-checkbox\n                  v-model=\"setting.chunking_config.common_questions.generation_method\"\n                  :true-value=\"GENERATION.AI\"\n                  :false-value=\"GENERATION.MANUAL\"\n                  >常见问法</el-checkbox\n                >\n                <!-- <el-checkbox :value=\"'graph'\">抽取知识图谱</el-checkbox> -->\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"flex-none\">\n        <el-button v-debounce type=\"primary\" size=\"large\" class=\"mt-4\" @click=\"handleConfirm\">保存</el-button>\n      </div>\n    </div>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowDown } from '@element-plus/icons-vue'\nimport { computed, onMounted, ref } from 'vue'\nimport chunkSettingApi from '@/api/modules/chunk-setting'\nimport type { ChunkSetting } from '@/api/modules/chunk-setting'\nimport { CHUNK_SETTING_DEFAULT } from '@/constants/chunk'\nimport { deepCopy } from '@/utils'\n\ninterface Setting extends ChunkSetting {\n  knowledge_chunking_type: string\n  knowledge_chunking_head: string\n  knowledge_chunking_input: string[]\n  knowledge_chunking_rule: string[]\n  index_chunking_type: string\n  index_chunking_head: string\n  index_chunking_input: string[]\n  index_chunking_rule: string[]\n}\n\n// 常量配置\nconst CONFIG = {\n  maxLength: { min: 50, max: 50000 },\n  headerList: [\n    { type: 'h1', label: '一级标题（H1）' },\n    { type: 'h2', label: '二级标题（H2）' },\n    { type: 'h3', label: '三级标题（H3）' },\n    { type: 'h4', label: '四级标题（H4）' },\n    { type: 'h5', label: '五级标题（H5）' },\n  ],\n  commonList: [\n    { label: '1 个换行符（\\\\n）', value: '\\\\n' },\n    { label: '2 个换行符（\\\\n\\\\n）', value: '\\\\n\\\\n' },\n    { label: '句号（。）', value: '。' },\n    { label: '感叹号（！）', value: '！' },\n    { label: '问号（？）', value: '？' },\n    { label: '分号（；）', value: '；' },\n    { label: '分割线（---）', value: '---' },\n  ],\n}\n\nconst { maxLength, headerList } = CONFIG\n\nconst CHUNK_TYPE = {\n  CUSTOM: 'custom',\n  NONE: 'none',\n}\n\nconst SPLIT_TYPE = {\n  HEADING: 'heading',\n  CUSTOM: 'custom',\n}\n\nconst GENERATION = {\n  MANUAL: 'manual',\n  AI: 'ai',\n}\n\nconst CHUNK_MODE = {\n  LENGTH: 'length_first',\n  IDENTIFIER: 'identifier_first',\n}\nconst isLoading = ref(false)\nconst extraSetting = {\n  knowledge_chunking_type: CHUNK_TYPE.CUSTOM,\n  knowledge_chunking_rule: ['heading'],\n  knowledge_chunking_head: headerList[0].type,\n  knowledge_chunking_input: [],\n  index_chunking_type: CHUNK_TYPE.CUSTOM,\n  index_chunking_head: headerList[0].type,\n  index_chunking_rule: ['heading'],\n  index_chunking_input: [],\n}\nconst setting = ref<Setting>(\n  deepCopy({\n    ...CHUNK_SETTING_DEFAULT,\n    ...extraSetting,\n  })\n)\n\nconst knowledgeCommonList = computed(() => {\n  const list = setting.value.knowledge_chunking_input.filter(\n    item => !CONFIG.commonList.some(common => common.value === item)\n  )\n  return CONFIG.commonList.concat(list.map(item => ({ label: item, value: item })))\n})\n\nconst indexCommonList = computed(() => {\n  const list = setting.value.index_chunking_input.filter(\n    item => !CONFIG.commonList.some(common => common.value === item)\n  )\n  return CONFIG.commonList.concat(list.map(item => ({ label: item, value: item })))\n})\n// 计算属性\nconst getHeadingLabel = (type: 'knowledge' | 'index') => {\n  const chunkHead = type === 'knowledge' ? 'knowledge_chunking_head' : 'index_chunking_head'\n  const label = headerList.find(item => item.type === setting.value[chunkHead])?.label\n  return label || headerList[0].label\n}\n\nconst handleChangeHeading = (type: 'knowledge' | 'index', value: string) => {\n  const chunkHead = type === 'knowledge' ? 'knowledge_chunking_head' : 'index_chunking_head'\n  setting.value[chunkHead] = value\n}\n\nconst handleChangeChunkMode = (type: 'knowledge' | 'index', value: string) => {\n  const config =\n    type === 'knowledge'\n      ? setting.value.chunking_config.knowledge_chunking\n      : setting.value.chunking_config.index_chunking\n  config.chunk_mode = value\n}\n\nconst handleBlurMaxLength = (type: 'knowledge' | 'index') => {\n  const config =\n    type === 'knowledge'\n      ? setting.value.chunking_config.knowledge_chunking\n      : setting.value.chunking_config.index_chunking\n\n  if (type === 'knowledge') {\n    config.max_length = Math.max(Math.min(config.max_length, maxLength.max), maxLength.min)\n    // 同步更新索引块最大长度\n    const indexConfig = setting.value.chunking_config.index_chunking\n    indexConfig.max_length = Math.max(Math.min(indexConfig.max_length, config.max_length), maxLength.min)\n  } else {\n    const knowledgeConfig = setting.value.chunking_config.knowledge_chunking\n    config.max_length = Math.max(Math.min(config.max_length, knowledgeConfig.max_length), maxLength.min)\n  }\n}\n\n// 特殊字符映射表：实际值 -> 显示值\nconst ESCAPE_MAP: Record<string, string> = {\n  '\\n': '\\\\n',\n  '\\n\\n': '\\\\n\\\\n',\n  '\\r\\n': '\\\\r\\\\n',\n  '\\r': '\\\\r',\n  '\\t': '\\\\t',\n  '\\b': '\\\\b',\n  '\\f': '\\\\f',\n  '\\v': '\\\\v',\n}\n\n// 反向映射表：显示值 -> 实际值\nconst REVERSE_MAP: Record<string, string> = Object.fromEntries(Object.entries(ESCAPE_MAP).map(([k, v]) => [v, k]))\n\nconst formatDisplayValue = (value: string) => ESCAPE_MAP[value] ?? value\n\nconst parseInputValue = (input: string) => REVERSE_MAP[input] ?? input\n\nconst handleConfirm = async () => {\n  const data = { chunking_config: deepCopy(setting.value.chunking_config) }\n\n  // // 统一处理拆分规则\n  const processSplitRule = (type: 'knowledge' | 'index') => {\n    const chunkType = type === 'knowledge' ? 'knowledge_chunking_type' : 'index_chunking_type'\n    const chunkInput = type === 'knowledge' ? 'knowledge_chunking_input' : 'index_chunking_input'\n    const chunkHead = type === 'knowledge' ? 'knowledge_chunking_head' : 'index_chunking_head'\n    const chunkRule = type === 'knowledge' ? 'knowledge_chunking_rule' : 'index_chunking_rule'\n    const config = type === 'knowledge' ? data.chunking_config.knowledge_chunking : data.chunking_config.index_chunking\n\n    if (setting.value[chunkType] === CHUNK_TYPE.NONE) {\n      config.split_rule = ''\n    } else if (setting.value[chunkType] === CHUNK_TYPE.CUSTOM) {\n      const split_rule = []\n      if (setting.value[chunkRule].includes(SPLIT_TYPE.HEADING)) {\n        split_rule.push(setting.value[chunkHead])\n      }\n      if (setting.value[chunkRule].includes(SPLIT_TYPE.CUSTOM) && setting.value[chunkInput].length > 0) {\n        split_rule.push(...setting.value[chunkInput].map(parseInputValue))\n      }\n      config.split_rule = split_rule.join(',')\n    }\n  }\n\n  processSplitRule('knowledge')\n  processSplitRule('index')\n  if (setting.value.knowledge_chunking_type === CHUNK_TYPE.CUSTOM) {\n    if (data.chunking_config.knowledge_chunking.split_rule === '') {\n      ElMessage.error('知识点拆分规则不能为空')\n      return\n    }\n  }\n  if (setting.value.index_chunking_type === CHUNK_TYPE.CUSTOM) {\n    if (data.chunking_config.index_chunking.split_rule === '') {\n      ElMessage.error('索引块拆分规则不能为空')\n      return\n    }\n  }\n\n  await chunkSettingApi.chunkingConfig.update(data)\n  ElMessage.success(window.$t('message_status.save_success'))\n}\n\n// 设置拆分规则\nconst setSplitRule = (config: Setting, prefix: 'knowledge_chunking' | 'index_chunking') => {\n  const splitRule = config.chunking_config[prefix].split_rule\n  if (splitRule) {\n    const rules = splitRule.split(',')\n    const headers = headerList.map(item => item.type)\n    if (headers.includes(rules[0])) {\n      config[`${prefix}_head`] = rules[0]\n      config[`${prefix}_input`] = rules.slice(1).map(formatDisplayValue)\n    } else {\n      config[`${prefix}_input`] = rules.map(formatDisplayValue)\n      config[`${prefix}_rule`] = []\n    }\n    if (config[`${prefix}_input`].length === 0) {\n      config[`${prefix}_input`] = [CONFIG.commonList[0].value]\n    } else {\n      config[`${prefix}_rule`].push(SPLIT_TYPE.CUSTOM)\n    }\n  } else {\n    config[`${prefix}_type`] = CHUNK_TYPE.NONE\n  }\n  if (config.chunking_config[prefix].chunk_mode === '') {\n    config.chunking_config[prefix].chunk_mode = CHUNK_MODE.LENGTH\n  }\n}\n\nonMounted(async () => {\n  isLoading.value = true\n  const data = await chunkSettingApi.chunkingConfig.get()\n  const config = {\n    ...data,\n    ...extraSetting,\n  }\n  setSplitRule(config, 'knowledge_chunking')\n  setSplitRule(config, 'index_chunking')\n  setting.value = config\n  isLoading.value = false\n})\n</script>\n\n<style scoped></style>\n\n<style>\n.allow-create-select .el-select__suffix {\n  display: none;\n}\n\n.allow-create-select-popper {\n  display: none;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/domain/components/exclusive-setting-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('module.domain_exclusive')\"\n    :close-on-click-modal=\"false\"\n    width=\"700px\"\n    destroy-on-close\n    append-to-body\n    align-center\n    @close=\"handleClose\"\n  >\n    <ElForm ref=\"formRef\" :model=\"form\" label-position=\"top\" @submit.prevent>\n      <ElFormItem\n        prop=\"domain\"\n        :rules=\"[\n          {\n            validator: validateDomain,\n            trigger: 'blur',\n          },\n        ]\"\n      >\n        <ElInput\n          v-model=\"form.domain\"\n          size=\"large\"\n          :maxlength=\"20\"\n          show-word-limit\n          :placeholder=\"$t('module.domain_exclusive')\"\n        >\n          <template #prepend> https:// </template>\n          <template #append> {{ isDevEnv ? '.hub' : '' }}.53ai.com </template>\n        </ElInput>\n      </ElFormItem>\n    </ElForm>\n\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton class=\"w-24 h-9\" type=\"primary\" :loading=\"submitting\" @click=\"handleConfirm\">\n          {{ $t('action_save') }}\n        </ElButton>\n        <ElButton class=\"w-24 h-9 text-[#1D1E1F]\" type=\"info\" plain @click=\"handleClose\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed } from 'vue'\nimport { domainApi } from '@/api/modules/domain'\nimport { useEnv } from '@/hooks/useEnv'\n\n// 类型定义\ntype DomainData = {\n  id?: number\n  domain?: string\n  [key: string]: unknown\n}\n\ntype FormData = {\n  domain: string\n}\n\ntype ValidationRule = {\n  field: string\n  fullField: string\n  type: string\n}\n\ntype ValidationCallback = (error?: Error) => void\n\n// Hooks\nconst { isDevEnv } = useEnv()\n\n// Emits\nconst emits = defineEmits<{\n  (e: 'success'): void\n}>()\n\n// 组件引用\nconst formRef = ref<InstanceType<typeof ElForm>>()\n\n// 响应式数据\nconst visible = ref(false)\nconst submitting = ref(false)\nconst originData = ref<DomainData>({})\n\nconst form = reactive<FormData>({\n  domain: '',\n})\n\n// 计算属性\nconst domainSuffix = computed(() => {\n  return `${isDevEnv.value ? '.hub' : ''}.53ai.com`\n})\n\n// 方法定义\nconst validateDomain = (rule: ValidationRule, value: string, callback: ValidationCallback): void => {\n  const trimmedValue = (value || '').trim()\n\n  if (!trimmedValue) {\n    callback(new Error(window.$t('form_input_placeholder')))\n    return\n  }\n\n  // 域名格式验证\n  if (!/^[a-z0-9-]{5,20}$/.test(trimmedValue)) {\n    callback(new Error(window.$t('module.domain_exclusive_validator_1')))\n    return\n  }\n\n  // 不能以连字符开头或结尾\n  if (trimmedValue.startsWith('-') || trimmedValue.endsWith('-')) {\n    callback(new Error(window.$t('module.domain_exclusive_validator_2')))\n    return\n  }\n\n  callback()\n}\n\nconst resetForm = () => {\n  form.domain = ''\n}\n\nconst populateForm = (data: DomainData) => {\n  const domain = data.domain || ''\n  // 移除后缀，只保留前缀部分\n  form.domain = domain\n    .replace(/^https?:\\/\\//, '')\n    .replace(/\\.hub\\.53ai\\.com$/, '')\n    .replace(/\\.53ai\\.com$/, '')\n}\n\nconst buildDomainUrl = (): string => {\n  return `${form.domain}${domainSuffix.value}`\n}\n\nconst open = ({ data = {} }: { data?: DomainData } = {}) => {\n  populateForm(data)\n  originData.value = data\n  visible.value = true\n}\n\nconst handleClose = () => {\n  visible.value = false\n  resetForm()\n}\n\nconst handleConfirm = async () => {\n  const isValid = await formRef.value?.validate()\n  if (!isValid) return\n  try {\n    submitting.value = true\n\n    const domainUrl = buildDomainUrl()\n    const requestData = { domain: domainUrl }\n\n    if (originData.value.id) {\n      await domainApi.updateExclusive(originData.value.id, requestData)\n    } else {\n      await domainApi.createExclusive(requestData)\n    }\n\n    ElMessage.success(window.$t('action_save_success'))\n    emits('success')\n    handleClose()\n  } catch (error) {\n    console.error('保存独占域名失败:', error)\n    ElMessage.error(window.$t('action_save_failed'))\n  } finally {\n    submitting.value = false\n  }\n}\n\n// 暴露方法\ndefineExpose({\n  open,\n  close: handleClose,\n  reset: resetForm,\n})\n</script>\n\n<style scoped lang=\"scss\">\n// 可以在这里添加组件特定的样式\n</style>\n"
  },
  {
    "path": "web/console/src/views/domain/components/independent-setting-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('module.domain_independent')\"\n    :close-on-click-modal=\"false\"\n    width=\"700px\"\n    destroy-on-close\n    append-to-body\n    align-center\n    @close=\"handleClose\"\n  >\n    <ElForm ref=\"formRef\" :model=\"form\" label-position=\"top\" @submit.prevent>\n      <!-- 域名输入 -->\n      <ElFormItem\n        prop=\"domain\"\n        :rules=\"[\n          {\n            validator: validateDomain,\n            trigger: 'blur',\n          },\n        ]\"\n      >\n        <div class=\"flex items-center w-full\">\n          <ElInput\n            v-model=\"form.domain\"\n            class=\"flex-1\"\n            :class=\"[shouldShowSubdirInput && 'has-subdir']\"\n            size=\"large\"\n            :maxlength=\"20\"\n            show-word-limit\n            :placeholder=\"$t('module.domain_independent')\"\n          >\n            <template #prepend> https:// </template>\n          </ElInput>\n\n          <!-- 子目录输入 -->\n          <ElFormItem\n            v-if=\"shouldShowSubdirInput\"\n            prop=\"subdir\"\n            :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n          >\n            <ElInput\n              v-model=\"form.subdir\"\n              class=\"flex-none w-[250px] h-[42px] subdir-input\"\n              size=\"large\"\n              :maxlength=\"10\"\n              show-word-limit\n              :placeholder=\"$t('form_input_placeholder')\"\n            >\n              <template #prepend> / </template>\n            </ElInput>\n          </ElFormItem>\n        </div>\n      </ElFormItem>\n\n      <!-- 子目录开关 -->\n      <ElFormItem v-if=\"isCustomResolveType\">\n        <div class=\"flex items-center text-sm text-[#4F5052]\">\n          <span>{{ $t('module.use_subdirectories') }}</span>\n          <ElTooltip :content=\"$t('module.use_subdirectories_tip')\">\n            <svg-icon class=\"text-[#A4AABA] ml-1\" name=\"help\" width=\"14\" />\n          </ElTooltip>\n          <ElSwitch v-model=\"form.use_subdir\" class=\"ml-2\" size=\"small\" />\n        </div>\n      </ElFormItem>\n\n      <!-- 解析类型选择 -->\n      <ElFormItem>\n        <ElRadioGroup v-model=\"form.resolve_type\" class=\"w-full\">\n          <ElRadio\n            v-for=\"resolveType in resolveTypeOptions\"\n            :key=\"resolveType.value\"\n            class=\"flex-1 border py-6 px-4 rounded overflow-hidden\"\n            :class=\"[form.resolve_type === resolveType.value ? 'border-[#3664EF]' : '']\"\n            :value=\"resolveType.value\"\n          >\n            {{ resolveType.label }}\n          </ElRadio>\n        </ElRadioGroup>\n      </ElFormItem>\n\n      <!-- CNAME 解析说明和配置 -->\n      <template v-if=\"isCnameResolveType\">\n        <ul class=\"w-full flex flex-col gap-3 bg-[#F6F9FC] p-5 mb-6 box-border text-sm text-[#4F5052]\">\n          <li>{{ $t('module.domain_independent_cname_desc') }}</li>\n          <li>{{ $t('module.domain_independent_cname_desc_1') }}</li>\n          <li>{{ $t('module.domain_independent_cname_desc_2') }}</li>\n          <li>{{ $t('module.domain_independent_cname_desc_3') }}</li>\n        </ul>\n\n        <!-- HTTPS 配置 -->\n        <ElFormItem>\n          <div class=\"flex items-center gap-2 text-sm text-[#4F5052]\">\n            <span>{{ $t('module.domain_independent_https') }}</span>\n            <ElSwitch v-model=\"form.enable_https\" size=\"small\" />\n            <template v-if=\"form.enable_https\">\n              <span class=\"ml-12\">{{ $t('module.domain_independent_https_always') }}</span>\n              <ElSwitch v-model=\"form.force_https\" size=\"small\" />\n            </template>\n          </div>\n        </ElFormItem>\n      </template>\n\n      <!-- 自定义解析说明 -->\n      <template v-else>\n        <ul class=\"w-full flex flex-col gap-3 bg-[#F6F9FC] p-5 mb-6 box-border text-sm text-[#4F5052]\">\n          <li>{{ $t('module.domain_independent_self_desc_1') }}</li>\n          <li>{{ $t('module.domain_independent_self_desc_2') }}</li>\n          <ElDivider class=\"!my-2\" />\n          <li>{{ $t('module.domain_independent_self_desc_3', { site_id: enterpriseStore.info.eid }) }}</li>\n        </ul>\n      </template>\n    </ElForm>\n\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"handleConfirm\">\n          {{ $t('action_save') }}\n        </ElButton>\n        <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click=\"handleClose\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed } from 'vue'\nimport { domainApi } from '@/api/modules/domain'\nimport { INDEPENDENT_RESOLVE_TYPE, INDEPENDENT_SSL_CERT_TYPE } from '@/constants/domain'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\n\n// 类型定义\ntype DomainConfig = {\n  resolve_type?: number\n  enable_https?: boolean | number\n  force_https?: boolean | number\n  ssl_cert_type?: number\n  ssl_certificate?: string\n  ssl_private_key?: string\n  subdir?: string\n  use_subdir?: boolean | number\n  [key: string]: unknown\n}\n\ntype DomainData = {\n  id?: number\n  domain?: string\n  config?: DomainConfig\n  [key: string]: unknown\n}\n\ntype FormData = {\n  domain: string\n  resolve_type: number\n  enable_https: boolean\n  force_https: boolean\n  ssl_cert_type: number\n  ssl_certificate: string\n  ssl_private_key: string\n  subdir: string\n  use_subdir: boolean\n}\n\ntype ValidationRule = {\n  field: string\n  fullField: string\n  type: string\n}\n\ntype ValidationCallback = (error?: Error) => void\n\n// Emits\nconst emits = defineEmits<{\n  (e: 'success'): void\n}>()\n\n// 组件引用\nconst formRef = ref<InstanceType<typeof ElForm>>()\n\n// 响应式数据\nconst visible = ref(false)\nconst submitting = ref(false)\nconst originData = ref<DomainData>({})\n\nconst form = reactive<FormData>({\n  domain: '',\n  resolve_type: INDEPENDENT_RESOLVE_TYPE.CNAME,\n  enable_https: false,\n  force_https: false,\n  ssl_cert_type: INDEPENDENT_SSL_CERT_TYPE['53AI'],\n  ssl_certificate: '',\n  ssl_private_key: '',\n  subdir: '',\n  use_subdir: false,\n})\n\n// Store\nconst enterpriseStore = useEnterpriseStore()\n\n// 计算属性\nconst isCnameResolveType = computed(() => form.resolve_type === INDEPENDENT_RESOLVE_TYPE.CNAME)\nconst isCustomResolveType = computed(() => form.resolve_type === INDEPENDENT_RESOLVE_TYPE.CUSTOM)\nconst shouldShowSubdirInput = computed(() => isCustomResolveType.value && form.use_subdir)\n\nconst resolveTypeOptions = computed(() => [\n  {\n    value: INDEPENDENT_RESOLVE_TYPE.CNAME,\n    label: window.$t('module.domain_independent_cname'),\n  },\n  {\n    value: INDEPENDENT_RESOLVE_TYPE.CUSTOM,\n    label: window.$t('module.domain_independent_self'),\n  },\n])\n\n// 方法定义\nconst validateDomain = (rule: ValidationRule, value: string, callback: ValidationCallback): void => {\n  const trimmedValue = (value || '').trim()\n  if (trimmedValue) {\n    callback()\n  } else {\n    callback(new Error(window.$t('form_input_placeholder')))\n  }\n  // 这里可以添加更严格的域名验证逻辑\n  // if (!/^[a-z0-9-]{5,}$/.test(trimmedValue)) {\n  //   return callback(new Error('域名格式不正确'))\n  // }\n}\n\nconst resetForm = () => {\n  Object.assign(form, {\n    domain: '',\n    resolve_type: INDEPENDENT_RESOLVE_TYPE.CNAME,\n    enable_https: false,\n    force_https: false,\n    ssl_cert_type: INDEPENDENT_SSL_CERT_TYPE['53AI'],\n    ssl_certificate: '',\n    ssl_private_key: '',\n    subdir: 'chat',\n    use_subdir: false,\n  })\n}\n\nconst populateForm = (data: DomainData) => {\n  const config = data.config || {}\n\n  form.domain = (data.domain || '').trim().replace(/^https?:\\/\\//, '')\n  form.resolve_type = Number(config.resolve_type) || INDEPENDENT_RESOLVE_TYPE.CNAME\n  form.enable_https = Boolean(Number(config.enable_https))\n  form.force_https = Boolean(Number(config.force_https))\n  form.ssl_cert_type = Number(config.ssl_cert_type) || INDEPENDENT_SSL_CERT_TYPE['53AI']\n  form.ssl_certificate = config.ssl_certificate || ''\n  form.ssl_private_key = config.ssl_private_key || ''\n  form.subdir = config.subdir || 'chat'\n  form.use_subdir = Boolean(Number(config.use_subdir))\n}\n\nconst buildConfigData = (): DomainConfig => ({\n  resolve_type: form.resolve_type,\n  enable_https: form.enable_https,\n  force_https: form.force_https,\n  ssl_cert_type: form.ssl_cert_type,\n  ssl_certificate: form.ssl_certificate,\n  ssl_private_key: form.ssl_private_key,\n  subdir: form.subdir,\n  use_subdir: form.use_subdir,\n})\n\nconst open = ({ data = {} }: { data?: DomainData } = {}) => {\n  populateForm(data)\n  originData.value = data\n  visible.value = true\n}\n\nconst handleClose = () => {\n  visible.value = false\n  resetForm()\n}\n\nconst handleConfirm = async () => {\n  const isValid = await formRef.value?.validate()\n  if (!isValid) return\n  try {\n    submitting.value = true\n\n    const requestData = {\n      domain: form.domain,\n      config: buildConfigData(),\n    }\n\n    if (originData.value.id) {\n      await domainApi.updateIndependent(originData.value.id, requestData)\n    } else {\n      await domainApi.createIndependent(requestData)\n    }\n\n    ElMessage.success(window.$t('action_save_success'))\n    emits('success')\n    handleClose()\n  } catch (error) {\n    console.error('保存独立域名失败:', error)\n    ElMessage.error(window.$t('action_save_failed'))\n  } finally {\n    submitting.value = false\n  }\n}\n\n// 暴露方法\ndefineExpose({\n  open,\n  close: handleClose,\n  reset: resetForm,\n})\n</script>\n\n<style scoped lang=\"scss\">\n:deep(.has-subdir .el-input__wrapper) {\n  border-top-right-radius: 0 !important;\n  border-bottom-right-radius: 0 !important;\n  box-shadow: none !important;\n  border-style: solid;\n  border-color: #dcdfe6;\n  border-top-width: 1px;\n  border-bottom-width: 1px;\n  border-left-width: 1px;\n  box-sizing: border-box;\n}\n\n:deep(.subdir-input .el-input-group__prepend) {\n  border-radius: 0 !important;\n  padding: 0 8px !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/domain/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.domain')\" />\n\n    <div class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border\">\n      <div v-loading=\"loading\" class=\"flex-1 max-h-[calc(100vh-100px)] overflow-auto\">\n        <!-- 专属域名部分 -->\n        <section class=\"mb-8\">\n          <h1 class=\"font-semibold text-[#1D1E1F]\">\n            {{ $t('module.domain_exclusive') }}\n          </h1>\n          <div class=\"mt-4 border rounded overflow-hidden p-6\">\n            <label class=\"text-[#1D1E1F] text-sm\">{{ $t('module.domain_exclusive_label') }}</label>\n            <div class=\"w-full mt-4 flex items-center gap-3\">\n              <ElInput\n                v-model=\"exclusiveDomainUrl\"\n                class=\"!max-w-[600px]\"\n                link\n                :placeholder=\"$t('form_input_placeholder')\"\n                disabled\n                size=\"large\"\n              />\n              <ElButton\n                class=\"flex-none text-[#3664EF]\"\n                type=\"default\"\n                size=\"large\"\n                @click=\"handleCopyDomain(exclusiveDomainUrl)\"\n              >\n                <ElIcon :size=\"16\" class=\"mr-2\" color=\"#3664EF\">\n                  <CopyDocument />\n                </ElIcon>\n                {{ $t('action_copy') }}\n              </ElButton>\n              <div class=\"flex-1 h-2\" />\n              <ElButton class=\"flex-none text-[#5A6D9E] !p-0\" link size=\"large\" @click=\"handleOpenExclusiveSetting\">\n                <ElIcon :size=\"16\" class=\"mr-2\" color=\"#5A6D9E\">\n                  <Setting />\n                </ElIcon>\n                {{ $t('action_setting') }}\n              </ElButton>\n            </div>\n          </div>\n        </section>\n\n        <!-- 独立域名部分 -->\n        <section>\n          <h1 class=\"font-semibold text-[#1D1E1F]\">\n            {{ $t('module.domain_independent') }}\n          </h1>\n          <div\n            v-version=\"{ module: VERSION_MODULE.INDEPENDENT_DOMAIN, mode: 'tooltip' }\"\n            class=\"mt-4 border rounded overflow-hidden p-6\"\n          >\n            <label class=\"text-[#1D1E1F] text-sm\">\n              {{ $t('module.domain_independent_label') }}\n              <template v-if=\"independentDomainUrl\">\n                <ElTag class=\"ml-3 !border-none !bg-[#E3F6E0] !text-[#09BB07]\" type=\"success\" size=\"default\">\n                  {{ $t('effective') }}\n                </ElTag>\n                <ElTag\n                  v-if=\"independentDomainInfo.httpsEnabled\"\n                  class=\"ml-3 !border-none !bg-[#E3F6E0] !text-[#09BB07] flex items-center\"\n                  type=\"success\"\n                  size=\"default\"\n                >\n                  <SvgIcon class=\"!inline-block\" name=\"global\" width=\"12\" height=\"12\" />\n                  {{ $t('https_enabled') }}\n                </ElTag>\n              </template>\n            </label>\n            <div class=\"w-full mt-4 flex items-center gap-3\">\n              <template v-if=\"independentDomainUrl\">\n                <ElInput\n                  v-model=\"independentDomainUrl\"\n                  class=\"!max-w-[600px]\"\n                  link\n                  :placeholder=\"$t('form_input_placeholder')\"\n                  disabled\n                  size=\"large\"\n                />\n                <ElButton\n                  class=\"flex-none text-[#3664EF]\"\n                  type=\"default\"\n                  size=\"large\"\n                  @click=\"handleCopyDomain(independentDomainUrl)\"\n                >\n                  <ElIcon :size=\"16\" class=\"mr-2\" color=\"#3664EF\">\n                    <CopyDocument />\n                  </ElIcon>\n                  {{ $t('action_copy') }}\n                </ElButton>\n              </template>\n              <div class=\"flex-1 text-sm text-[#9A9A9A]\">\n                {{ independentDomainUrl ? '' : $t('module.domain_independent_desc') }}\n              </div>\n              <ElButton class=\"flex-none text-[#5A6D9E] !p-0\" link size=\"large\" @click=\"handleOpenIndependentSetting\">\n                <ElIcon :size=\"16\" class=\"mr-2\" color=\"#5A6D9E\">\n                  <Setting />\n                </ElIcon>\n                {{ $t('action_setting') }}\n              </ElButton>\n              <ElButton\n                v-if=\"independentDomainUrl\"\n                class=\"flex-none text-[#5A6D9E] !p-0 !ml-0\"\n                link\n                size=\"large\"\n                @click=\"handleDeleteIndependentDomain\"\n              >\n                <ElIcon :size=\"16\" class=\"mr-2\" color=\"#5A6D9E\">\n                  <Delete />\n                </ElIcon>\n                {{ $t('action_delete') }}\n              </ElButton>\n            </div>\n          </div>\n        </section>\n      </div>\n    </div>\n  </Layout>\n\n  <!-- 弹窗组件 -->\n  <ExclusiveSettingDialog ref=\"exclusiveSettingRef\" @success=\"loadDomainData\" />\n  <IndependentSettingDialog ref=\"independentSettingRef\" @success=\"loadDomainData\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { CopyDocument, Delete, Setting } from '@element-plus/icons-vue'\nimport { onMounted, ref, computed } from 'vue'\nimport ExclusiveSettingDialog from './components/exclusive-setting-dialog.vue'\nimport IndependentSettingDialog from './components/independent-setting-dialog.vue'\nimport { VERSION_MODULE } from '@/constants/enterprise'\nimport { copyToClip } from '@/utils/copy'\nimport { useEnv } from '@/hooks/useEnv'\nimport { domainApi } from '@/api/modules/domain/index'\n\n// 类型定义\ntype DomainConfig = {\n  enable_https?: string | number\n  [key: string]: unknown\n}\n\ntype DomainInfo = {\n  id?: number\n  domain?: string\n  domain_name?: string\n  config?: string | DomainConfig\n  [key: string]: unknown\n}\n\ntype IndependentDomainInfo = {\n  httpsEnabled: boolean\n  domainName: string\n  rawData: DomainInfo\n}\n\n// 环境变量\nconst { isDevEnv } = useEnv()\n\n// 组件引用\nconst exclusiveSettingRef = ref<InstanceType<typeof ExclusiveSettingDialog>>()\nconst independentSettingRef = ref<InstanceType<typeof IndependentSettingDialog>>()\n\n// 响应式数据\nconst loading = ref(false)\nconst exclusiveDomainInfo = ref<DomainInfo>({})\nconst independentDomainInfo = ref<IndependentDomainInfo>({\n  httpsEnabled: false,\n  domainName: '',\n  rawData: {},\n})\n\n// 计算属性\nconst exclusiveDomainUrl = computed(() => {\n  const domainName = exclusiveDomainInfo.value.domain_name || ''\n  if (!domainName) return ''\n  return `https://${domainName}${isDevEnv.value ? '.hub' : ''}.53ai.com`\n})\n\nconst independentDomainUrl = computed(() => {\n  const { domainName, httpsEnabled } = independentDomainInfo.value\n  if (!domainName) return ''\n  return `http${httpsEnabled ? 's' : ''}://${domainName}`\n})\n\n// 数据处理方法（需要在 loadDomainData 之前定义）\nconst processExclusiveDomainData = (domainData: DomainInfo) => {\n  exclusiveDomainInfo.value = domainData\n\n  if (domainData.domain) {\n    let domainName = domainData.domain\n      .trim()\n      .replace(/^https?:\\/\\//, '')\n      .replace(/\\.53ai\\.com$/, '')\n\n    if (isDevEnv.value) {\n      domainName = domainName.replace(/\\.hub$/, '')\n    }\n\n    exclusiveDomainInfo.value.domain_name = domainName\n  }\n}\n\nconst processIndependentDomainData = (domainData: DomainInfo) => {\n  const rawData = { ...domainData }\n\n  // 解析配置\n  let config: DomainConfig = {}\n  if (domainData.config) {\n    try {\n      config = typeof domainData.config === 'string' ? JSON.parse(domainData.config) : domainData.config\n    } catch (error) {\n      console.error('解析独立域名配置失败:', error)\n      config = {}\n    }\n  }\n\n  rawData.config = config\n\n  // 处理域名信息\n  const domainName = (domainData.domain || '').trim().replace(/^https?:\\/\\//, '')\n  const httpsEnabled = Boolean(Number(config.enable_https))\n\n  independentDomainInfo.value = {\n    httpsEnabled,\n    domainName,\n    rawData,\n  }\n}\n\n// 主要方法定义\nconst loadDomainData = async () => {\n  loading.value = true\n\n  try {\n    const { exclusive_domains = [], independent_domains = [] } = await domainApi.list()\n\n    // 处理专属域名数据\n    processExclusiveDomainData(exclusive_domains[0] || {})\n\n    // 处理独立域名数据\n    processIndependentDomainData(independent_domains[0] || {})\n  } catch (error) {\n    console.error('加载域名数据失败:', error)\n    ElMessage.error('加载域名数据失败')\n  } finally {\n    loading.value = false\n  }\n}\n\nconst handleCopyDomain = async (domainUrl: string) => {\n  if (!domainUrl) {\n    ElMessage.warning('没有可复制的域名')\n    return\n  }\n\n  try {\n    await copyToClip(domainUrl)\n    ElMessage.success(window.$t('action_copy_success'))\n  } catch (error) {\n    console.error('复制失败:', error)\n    ElMessage.error('复制失败')\n  }\n}\n\nconst handleOpenExclusiveSetting = () => {\n  const settingData = {\n    ...exclusiveDomainInfo.value,\n    domain: exclusiveDomainUrl.value,\n  }\n  exclusiveSettingRef.value?.open({ data: settingData })\n}\n\nconst handleOpenIndependentSetting = () => {\n  independentSettingRef.value?.open({ data: independentDomainInfo.value.rawData })\n}\n\nconst handleDeleteIndependentDomain = async () => {\n  try {\n    await ElMessageBox.confirm(window.$t('module.domain_independent_delete_confirm'))\n\n    const domainId = independentDomainInfo.value.rawData.id\n    if (!domainId) {\n      ElMessage.error('域名ID不存在')\n      return\n    }\n\n    await domainApi.deleteIndependent(domainId)\n\n    // 重置独立域名信息\n    independentDomainInfo.value = {\n      httpsEnabled: false,\n      domainName: '',\n      rawData: {},\n    }\n\n    ElMessage.success(window.$t('action_delete_success'))\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('删除独立域名失败:', error)\n      ElMessage.error('删除失败')\n    }\n  }\n}\n\n// 生命周期\nonMounted(() => {\n  loadDomainData()\n})\n</script>\n\n<style scoped lang=\"scss\">\nsection {\n  &:not(:last-child) {\n    margin-bottom: 2rem;\n  }\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/exception/404/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport { onMounted } from 'vue'\nimport { useRouter } from 'vue-router'\n\nconst router = useRouter()\n\nfunction goHome() {\n  router.push('/')\n}\n\nonMounted(() => {\n  ElMessage({\n    type: 'warning',\n    dangerouslyUseHTMLString: true,\n\t\tmessage: window.$t('no_permission_tip'),\n    duration: 0,\n    showClose: true,\n  })\n})\n</script>\n\n<template>\n  <div class=\"flex h-full\">\n    <div class=\"px-4 m-auto space-y-4 text-center max-[400px]\">\n      <h1 class=\"text-4xl text-slate-800 dark:text-neutral-200\">\n        <!-- Sorry, page not found! -->\n        {{ $t('not_found_tip') }}\n      </h1>\n      <p class=\"text-base text-slate-500 dark:text-neutral-400\">\n        <!-- Sorry, we couldn’t find the page you’re looking for. Perhaps you’ve mistyped the URL? Be sure to check your spelling. -->\n        <!-- 请检查路径是否正确？ -->\n        <!-- 抱歉，我们找不到您要查找的页面。也许您输入的URL有误？一定要检查你的拼写。 -->\n      </p>\n      <div class=\"flex-center text-center\">\n        <div class=\"w-[300px]\">\n          <img src=\"../../../icons/404.svg\" alt=\"404\">\n        </div>\n      </div>\n      <el-button size=\"large\" type=\"primary\" @click=\"goHome\">\n        {{ $t('go_home') }}\n      </el-button>\n    </div>\n  </div>\n</template>\n"
  },
  {
    "path": "web/console/src/views/exception/500/index.vue",
    "content": "<script lang=\"ts\" setup>\nimport { useRouter } from 'vue-router'\nimport Icon500 from '@/icons/500.vue'\n\nconst router = useRouter()\n\nfunction goHome() {\n  router.push('/')\n}\n</script>\n\n<template>\n  <div class=\"flex h-full dark:bg-neutral-800\">\n    <div class=\"px-4 m-auto space-y-4 text-center max-[400px]\">\n      <header class=\"space-y-2\">\n        <h2 class=\"text-2xl font-bold text-center text-slate-800 dark:text-neutral-200\">\n          500\n        </h2>\n        <p class=\"text-base text-center text-slate-500 dark:text-slate-500\">\n          Server error\n        </p>\n        <div class=\"flex-center text-center\">\n          <Icon500 class=\"w-[300px]\" />\n        </div>\n      </header>\n      <el-button type=\"primary\" @click=\"goHome\">\n        Go to Home\n      </el-button>\n    </div>\n  </div>\n</template>\n"
  },
  {
    "path": "web/console/src/views/exception/mobile-tip/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { onMounted, reactive } from 'vue'\nimport { copyToClip } from '@/utils/copy'\n\nconst state: {\n  url: string\n} = reactive({\n  url: '',\n})\n\nonMounted(async() => {\n\tstate.url = sessionStorage.getItem('mobile_tip_url') || ''\n})\n\nconst handleCopy = () => {\n\tif (!state.url) return\n\tcopyToClip(state.url).then(() => {\n\t\tElMessage.success('已复制')\n\t})\n}\n</script>\n\n<template>\n\t<div class=\"w-full h-full overflow-y-auto overflow-x-hidden flex flex-col items-center justify-center bg-[#FCFDFF]\">\n\t\t<div class=\"w-[244px] h-[195px] bg-[url('/images/mobile_tip.png')] bg-[length:100%_100%]\" />\n\t\t<div class=\"mt-6 text-sm text-[#182B50]\">\n\t\t\t请前往pc端查看文档详情\n\t\t</div>\n\t\t<div class=\"w-[85%] mt-4 py-3 px-3 box-border text-sm text-wrap break-words text-[#BA8550] border-x-[1px] border-y-[1px] border-solid border-[#EBEEF5] bg-[#fff]\">\n\t\t\t{{ state.url || '' }}\n\t\t</div>\n\t\t<el-button v-if=\"state.url\" class=\"mt-4\" type=\"primary\" size=\"large\" @click.stop=\"handleCopy\">\n\t\t\t复制链接\n\t\t</el-button>\n\t</div>\n</template>\n\n<style>\n</style>\n"
  },
  {
    "path": "web/console/src/views/index.vue",
    "content": "<template>\n  <div class=\"h-full flex flex-col px-[60px] py-8\">\n    <Header :title=\"$t('module.homepage')\">\n      <template #right>\n        <LanguageDropdown />\n      </template>\n    </Header>\n\n    <div\n      v-loading=\"loading\"\n      class=\"flex-1 overflow-y-auto flex bg-white mt-4 py-[67px] box-border px-[76px] rounded-lg\"\n    >\n      <div class=\"flex-1 min-w-0\">\n        <div class=\"flex items-center gap-4\">\n          <img class=\"h-[70px] object-contain\" :src=\"enterpriseInfo.logo\" alt=\"\" />\n          <h3 class=\"text-2xl text-[#1D1E1F] font-semibold truncate\">\n            {{ enterpriseInfo.name }}\n          </h3>\n          <SvgIcon\n            v-router.push=\"{ name: 'Info' }\"\n            class=\"cursor-pointer hover:opacity-60\"\n            name=\"edit\"\n            color=\"#2563EB\"\n          />\n        </div>\n        <div class=\"text-sm text-[#9A9A9A] mt-3\">\n          {{ enterpriseInfo.description || '' }}\n        </div>\n        <div class=\"mt-10 flex flex-col gap-6\">\n          <!-- #ifndef KM -->\n          <div class=\"flex max-md:gap-2 md:gap-8 max-md:flex-col md:items-center\">\n            <div class=\"flex-none w-[64px] text-base text-[#9A9A9A]\">\n              {{ isOpLocalEnv ? $t('website_home') : $t('website_domain') }}\n            </div>\n            <div v-if=\"isSaasLogin || isOpLocalEnv\" class=\"flex items-center gap-2\">\n              <ElLink\n                style=\"--el-link-text-color: #1d1e1f; --el-link-font-size: 16px\"\n                target=\"_blank\"\n                :href=\"`${domainUrl}?access_token=${userInfo.access_token}&eid=${enterpriseInfo.eid}`\"\n              >\n                {{ domainUrl }}\n                <SvgIcon class=\"cursor-pointer ml-1\" name=\"blank\" width=\"16\" color=\"#2563EB\" />\n              </ElLink>\n              <SvgIcon\n                v-if=\"!isOpLocalEnv\"\n                v-router.push=\"{ name: 'Domain' }\"\n                class=\"cursor-pointer hover:opacity-60\"\n                name=\"edit\"\n                width=\"16\"\n                color=\"#2563EB\"\n              />\n            </div>\n          </div>\n          <!-- #endif -->\n          <!-- #ifdef KM -->\n          <div class=\"flex max-md:gap-2 md:gap-8 max-md:flex-col md:items-center\">\n            <div class=\"flex-none w-[64px] text-base text-[#9A9A9A]\">\n              {{ $t('website_home') }}\n            </div>\n            <div v-if=\"isSaasLogin || isOpLocalEnv\" class=\"flex items-center gap-2\">\n              <ElLink\n                style=\"--el-link-text-color: #1d1e1f; --el-link-font-size: 16px\"\n                target=\"_blank\"\n                :href=\"`${defaultDomain}`\"\n              >\n                {{ defaultDomain }}\n                <SvgIcon class=\"cursor-pointer ml-1\" name=\"blank\" width=\"16\" color=\"#2563EB\" />\n              </ElLink>\n            </div>\n          </div>\n          <!-- #endif -->\n\n          <div v-if=\"isSaasLogin\" class=\"flex max-md:gap-2 md:gap-8 max-md:flex-col md:items-center\">\n            <div class=\"flex-none w-[64px] text-base text-[#9A9A9A]\">\n              {{ $t('version.title') }}\n            </div>\n            <div class=\"flex items-center gap-3\">\n              <div class=\"text-base text-[#1D1E1F]\">\n                {{ enterpriseStore.version.name }}\n              </div>\n              <el-button\n                v-if=\"enterpriseInfo.version <= 3\"\n                link\n                type=\"primary\"\n                class=\"text-base\"\n                @click=\"handleService('upgrade')\"\n              >\n                {{ $t('action_upgrade') }}\n              </el-button>\n            </div>\n          </div>\n          <div class=\"flex max-md:gap-2 md:gap-8 max-md:flex-col md:items-center\">\n            <div class=\"flex-none w-[64px] text-base text-[#9A9A9A]\">\n              {{ $t('module.agent') }}\n            </div>\n            <div class=\"flex items-center gap-3\">\n              <div class=\"text-base text-[#1D1E1F]\">\n                {{ formatNumber(+indexInfo.agent_count || 0) }} / {{ getModuleMax(VERSION_MODULE.AGENT) }}\n              </div>\n            </div>\n          </div>\n          <div class=\"flex max-md:gap-2 md:gap-8 max-md:flex-col md:items-center\">\n            <div class=\"flex-none w-[64px] text-base text-[#9A9A9A]\">\n              {{ $t('module.prompt') }}\n            </div>\n            <div class=\"flex items-center gap-3\">\n              <div class=\"text-base text-[#1D1E1F]\">{{ formatNumber(+indexInfo.prompt_count || 0) }} / ∞</div>\n            </div>\n          </div>\n          <div class=\"flex max-md:gap-2 md:gap-8 max-md:flex-col md:items-center\">\n            <div class=\"flex-none w-[64px] text-base text-[#9A9A9A]\">\n              {{ $t('module.ai_toolbox') }}\n            </div>\n            <div class=\"flex items-center gap-3\">\n              <div class=\"text-base text-[#1D1E1F]\">{{ formatNumber(+indexInfo.ai_link_count || 0) }} / ∞</div>\n            </div>\n          </div>\n          <div class=\"flex max-md:gap-2 md:gap-8 max-md:flex-col md:items-center\">\n            <div class=\"flex-none w-[64px] text-base text-[#9A9A9A]\">\n              {{ $t('register_user.title') }}\n            </div>\n            <div class=\"flex items-center gap-3\">\n              <div class=\"text-base text-[#1D1E1F]\">\n                {{ formatNumber(+indexInfo.user_count || 0) }} / {{ getModuleMax(VERSION_MODULE.REGISTERED_USER) }}\n              </div>\n            </div>\n          </div>\n          <div class=\"flex max-md:gap-2 md:gap-8 max-md:flex-col md:items-center\">\n            <div class=\"flex-none w-[64px] text-base text-[#9A9A9A]\">\n              {{ $t('create_time') }}\n            </div>\n            <div class=\"flex items-center gap-3\">\n              <div class=\"text-base text-[#1D1E1F]\">\n                {{ (enterpriseInfo.created_time || '').substr(0, 16) }}\n              </div>\n            </div>\n          </div>\n          <div v-if=\"isSaasLogin\" class=\"flex max-md:gap-2 md:gap-8 max-md:flex-col\">\n            <div class=\"flex-none w-[64px] text-base text-[#9A9A9A]\">\n              {{ $t('service_expired_time') }}\n            </div>\n            <div class=\"flex items-center gap-3\">\n              <div class=\"text-base text-[#1D1E1F]\">\n                {{ enterpriseInfo.expired_time || $t('apply.expired_time_forever') }}\n              </div>\n              <el-button\n                v-if=\"enterpriseInfo.expired_time\"\n                link\n                type=\"primary\"\n                class=\"text-base\"\n                @click=\"handleService('renew')\"\n              >\n                {{ $t('action_renew_v2') }}\n              </el-button>\n            </div>\n          </div>\n        </div>\n        <div class=\"w-full h-[67px]\" />\n      </div>\n      <div class=\"ml-[48px] pt-[68px] flex flex-col items-end max-lg:hidden\">\n        <div class=\"flex flex-col gap-3 w-[238px]\">\n          <div class=\"flex justify-between text-sm text-[#4F5052]\">\n            <span>{{ $t('configuration_completion') }}</span>\n            <span>100%</span>\n          </div>\n          <el-progress :percentage=\"100\" :show-text=\"false\" />\n        </div>\n        <div class=\"w-[312px] h-[220px] mt-[74px] flex flex-col items-center justify-center bg-[#F5F7FA] group\">\n          <img\n            class=\"w-10 h-8 mb-8 transition-all duration-300 ease-in-out group-hover:hidden\"\n            :src=\"$getRealPath({ url: '/images/index/wechat.png' })\"\n            alt=\"\"\n          />\n          <img\n            class=\"w-[120px] h-[120px] mb-2 transition-all duration-300 ease-in-out group-hover:block hidden\"\n            :src=\"$getRealPath({ url: '/images/index/qrcode.png' })\"\n            alt=\"\"\n          />\n          <h6 class=\"text-xl text-[#1D1E1F] font-medium mb-2\">\n            {{ $t('join_group') }}\n          </h6>\n          <p class=\"text-sm text-[#1D1E1F]\">\n            {{ $t('join_group_desc') }}\n          </p>\n        </div>\n        <!-- <img class=\"w-[312px] h-[220px] mt-[74px]\" :src=\"$getRealPath({ url: '/images/intro.png' })\" alt=\"\"> -->\n      </div>\n    </div>\n    <div class=\"text-sm text-[#9A9A9A] text-center py-11\">\n      {{ $t('copyright_desc', { year }) }}\n    </div>\n\n    <ServiceDialog\n      v-model:visible=\"service.visible\"\n      :title=\"service.type === 'upgrade' ? $t('action_upgrade') : $t('version.scan_consult')\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport ServiceDialog from '@/components/ServiceDialog/index.vue'\n\nimport { useEnterpriseStore, useUserStore } from '@/stores'\nimport { useEnv } from '@/hooks/useEnv'\nimport { VERSION_MODULE } from '@/constants/enterprise'\n\nconst { isOpLocalEnv } = useEnv()\nconst enterpriseStore = useEnterpriseStore()\nconst userStore = useUserStore()\nconst year = new Date().getFullYear()\nconst loading = ref(false)\nconst indexInfo = ref({})\nconst service = ref({\n  type: 'upgrade',\n  visible: false,\n})\n\nconst userInfo = computed(() => userStore.info)\nconst enterpriseInfo = computed(() => enterpriseStore.info)\nconst isSaasLogin = computed(() => userStore.is_saas_login)\nconst defaultDomain = computed(() => `${window.location.origin}/#/index`)\nconst domainUrl = computed(() => (isOpLocalEnv.value ? defaultDomain.value : enterpriseInfo.value.domain))\n\nconst formatNumber = (num = 0) => num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n\nconst getModuleMax = (module: string) => {\n  return enterpriseStore.version?.features[module]?.max || '∞'\n}\n\nconst handleService = (type: string) => {\n  service.value.type = type\n  service.value.visible = true\n}\n\nonMounted(async () => {\n  loading.value = true\n  indexInfo.value = await enterpriseStore.loadHomeInfo().finally(() => {\n    loading.value = false\n  })\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/info/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.website_info')\" />\n\n    <div class=\"mt-5 flex-1 flex flex-col bg-white py-6 px-8 box-border\">\n      <ElForm\n        ref=\"form_ref\"\n        class=\"flex-1 max-h-[calc(100vh-264px)] overflow-auto\"\n        :model=\"form\"\n        :rules=\"rules\"\n        label-position=\"top\"\n      >\n        <h1 class=\"text-[#1D1E1F] font-semibold\">\n          {{ $t('basic_info') }}\n        </h1>\n        <ElFormItem class=\"mt-8\" :label=\"$t('module.website_info_logo')\" prop=\"logo\">\n          <div class=\"mt-4 w-full flex items-center gap-4\">\n            <ElImage\n              v-if=\"form.logo\"\n              class=\"h-[70px] w-[70px] rounded overflow-hidden\"\n              :src=\"form.logo\"\n              :preview-src-list=\"[form.logo]\"\n              fit=\"contain\"\n            />\n            <UploadLogo\n              v-model=\"form.logo\"\n              class=\"w-auto h-auto\"\n              show-text\n              :text=\"$t(form.logo ? 'action_modify' : 'action_upload')\"\n            />\n          </div>\n          <div class=\"mt-2 w-full text-sm text-[#9A9A9A]\">\n            {{ $t('module.website_info_logo_tip') }}\n          </div>\n        </ElFormItem>\n        <ElFormItem class=\"mt-8\" :label=\"$t('module.website_info_ico')\" prop=\"ico\">\n          <div class=\"mt-4 w-full flex items-center gap-4\">\n            <ElImage\n              v-if=\"form.ico\"\n              class=\"h-[24px] w-6 rounded overflow-hidden\"\n              :src=\"form.ico\"\n              :preview-src-list=\"[form.ico]\"\n              fit=\"contain\"\n            />\n            <UploadLogo\n              v-model=\"form.ico\"\n              class=\"w-auto h-auto\"\n              show-text\n              cropper-disabled\n              :allow-type-list=\"['ico']\"\n              :text=\"$t(form.ico ? 'action_modify' : 'action_upload')\"\n            />\n          </div>\n          <div class=\"mt-2 w-full text-sm text-[#9A9A9A]\">\n            {{ $t('module.website_info_ico_tip') }}\n          </div>\n        </ElFormItem>\n        <ElFormItem :label=\"$t('module.website_info_name')\" prop=\"name\">\n          <ElInput\n            v-model=\"form.name\"\n            class=\"max-w-[660px]\"\n            :placeholder=\"$t('module.website_info_name_placeholder')\"\n            size=\"large\"\n            clearable\n            maxlength=\"120\"\n            show-word-limit\n          />\n        </ElFormItem>\n        <ElFormItem :label=\"$t('module.website_info_keyword')\" prop=\"keywords\">\n          <ElInputTag\n            v-model=\"form.keywords\"\n            class=\"max-w-[660px]\"\n            draggable\n            size=\"large\"\n            :placeholder=\"$t('module.website_info_keyword_placeholder_v2')\"\n            :max=\"10\"\n            :maxlength=\"20\"\n          />\n        </ElFormItem>\n        <ElFormItem :label=\"$t('module.website_info_desc')\">\n          <ElInput\n            v-model=\"form.desc\"\n            class=\"max-w-[660px]\"\n            size=\"large\"\n            type=\"textarea\"\n            :rows=\"5\"\n            resize=\"none\"\n            clearable\n            maxlength=\"200\"\n            show-word-limit\n            :placeholder=\"$t('module.website_info_desc_placeholder')\"\n          />\n        </ElFormItem>\n        <!-- <ElFormItem :label=\"$t('module.website_info_copyright')\" prop=\"copyright\">\n          <ElInput\n            v-model=\"form.copyright\"\n            class=\"max-w-[660px]\"\n            :placeholder=\"$t('module.website_info_copyright_placeholder')\"\n            size=\"large\"\n            clearable\n            maxlength=\"200\"\n            show-word-limit\n          />\n        </ElFormItem> -->\n        <ElFormItem :label=\"$t('module.website_info_language')\">\n          <ElSelect v-model=\"form.language\" class=\"max-w-[660px]\" size=\"large\">\n            <ElOption\n              v-for=\"item in language_options\"\n              :key=\"item.value\"\n              :label=\"$t(`language_option_label.${item.value}`)\"\n              :value=\"item.value\"\n            />\n          </ElSelect>\n        </ElFormItem>\n        <!-- #ifndef KM -->\n        <ElFormItem v-if=\"!isOpLocalEnv\" :label=\"$t('module.website_info_type')\" prop=\"website_type\">\n          <ul class=\"flex items-center flex-wrap gap-4\">\n            <li\n              v-for=\"value in [WEBSITE_TYPE.INDEPENDENT, WEBSITE_TYPE.ENTERPRISE, WEBSITE_TYPE.INDUSTRY]\"\n              :key=\"value\"\n              v-version=\"{\n                module:\n                  value === WEBSITE_TYPE.INDEPENDENT ? VERSION_MODULE.REGISTERED_USER : VERSION_MODULE.INTERNAL_USER,\n                mode: 'tooltip',\n              }\"\n              class=\"relative w-[300px] px-5 py-4 bg-[#F5F5F5] flex flex-col gap-2 border rounded box-border overflow-hidden text-sm cursor-pointer hover:border-[#3664EF] hover:text-[#3664EF]\"\n              :class=\"[form.website_type === value ? 'border-[#3664EF] text-[#3664EF]' : 'text-[#1D1E1F]']\"\n              @click.stop=\"handleWebsiteTypeChange(value)\"\n            >\n              <div\n                v-if=\"form.website_type === value\"\n                class=\"absolute -top-6 -right-6 rotate-45 w-12 h-12 flex items-center justify-center bg-[#3664EF] text-white z-[9]\"\n              >\n                <ElIcon class=\"-rotate-45 translate-y-3.5 translate-x-0\" color=\"#fff\" :size=\"16\">\n                  <Check />\n                </ElIcon>\n              </div>\n              <div class=\"text-base\">\n                {{ $t(WEBSITE_TYPE_LABEL_MAP.get(value)) }}\n              </div>\n              <div class=\"text-sm text-[#939499]\">\n                {{ $t(WEBSITE_TYPE_DESC_MAP.get(value)) }}\n              </div>\n            </li>\n          </ul>\n        </ElFormItem>\n        <ElFormItem :label=\"$t('form_hide_logo')\" class=\"mt-7\">\n          <ElSwitch :model-value=\"form.copyright\" @update:model-value=\"handleSwitchChange\"></ElSwitch>\n        </ElFormItem>\n        <!-- #endif -->\n\n        <!-- <ElFormItem :label=\"$t('module.website_info_layout')\">\n\t\t\t\t\t<ul class=\"flex flex-wrap gap-8\">\n\t\t\t\t\t\t<li v-for=\"item in layout_options\" :key=\"item.value\"\n\t\t\t\t\t\t\tclass=\"w-[252px] flex flex-col cursor-pointer box-border overflow-hidden text-sm group hover:text-[#3664EF]\"\n\t\t\t\t\t\t\t:class=\"[form.layout_type === item.value ? 'text-[#3664EF]' : 'text-[#4F5052] opacity-60 pointer-events-none']\"\n\t\t\t\t\t\t\t@click.stop=\"form.layout_type = item.value\">\n\t\t\t\t\t\t\t<div class=\"w-full h-[158px] px-2.5 py-3.5 border rounded box-border  group-hover:border-[#3664EF]\"\n\t\t\t\t\t\t\t\t:class=\"[form.layout_type === item.value ? 'border-[#3664EF]' : '']\">\n\t\t\t\t\t\t\t\t<ElImage class=\"w-full\" :src=\"$getRealPath({ url: `/images/info/layout-${item.value}.png` })\"\n\t\t\t\t\t\t\t\t\tfit=\"contain\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"text-sm mt-3\">{{ $t(`layout_option_label.${item.value}`) }}</div>\n\t\t\t\t\t\t\t<div class=\"text-xs mt-2 text-[#9A9A9A]\">{{ $t(`layout_option_desc.${item.value}`) }}</div>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</ElFormItem> -->\n        <div class=\"w-full h-8\" />\n      </ElForm>\n      <ElDivider />\n      <ElButton class=\"h-[36px] w-[96px]\" type=\"primary\" size=\"large\" :loading=\"submitting\" @click=\"handleSave\">\n        {{ $t('action_save') }}\n      </ElButton>\n    </div>\n  </Layout>\n  <ElImageViewer v-if=\"preview_url\" :url-list=\"[preview_url]\" @close=\"preview_url = ''\" />\n  <ServiceDialog v-model:visible=\"service_visible\" :title=\"service_title\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { Check } from '@element-plus/icons-vue'\nimport { computed, getCurrentInstance, reactive, ref, watch } from 'vue'\nimport UploadLogo from '@/components/Upload/image.vue'\nimport ServiceDialog from '@/components/ServiceDialog/index.vue'\n\nimport { useEnterpriseStore } from '@/stores'\n\nimport { generateInputRules } from '@/utils/form-rule'\nimport { useEnv } from '@/hooks/useEnv'\n\nimport {\n  WEBSITE_VERSION,\n  WEBSITE_TYPE,\n  WEBSITE_TYPE_LABEL_MAP,\n  WEBSITE_TYPE_DESC_MAP,\n  VERSION_MODULE,\n} from '@/constants/enterprise'\n\nconst { proxy: _this } = getCurrentInstance()\n\nconst { isOpLocalEnv } = useEnv()\nconst enterprise_store = useEnterpriseStore()\nconst form_ref = ref()\nconst service_visible = ref(false)\nconst service_title = ref('')\nconst submitting = ref(false)\nconst enterprise_info = computed(() => enterprise_store.info)\n\nconst form = reactive({\n  logo: enterprise_info.value.logo || '',\n  ico: enterprise_info.value.ico || '',\n  name: enterprise_info.value.display_name || '',\n  keywords: enterprise_info.value.keywords || [],\n  language: (enterprise_info.value.language !== 'En' && enterprise_info.value.language) || 'zh-cn',\n  desc: enterprise_info.value.description || '',\n  copyright: enterprise_info.value.copyright.toLowerCase() === 'true',\n  website_type: enterprise_info.value.type || WEBSITE_TYPE.INDEPENDENT,\n  template_type: '',\n  layout_type: (enterprise_info.value.layout_type !== 1 && enterprise_info.value.layout_type) || 'loose',\n})\nconst rules = reactive({\n  logo: generateInputRules({ message: 'module.website_info_logo_placeholder' }),\n  icon: generateInputRules({ message: 'module.website_info_logo_placeholder' }),\n  name: generateInputRules({ message: 'module.website_info_name_placeholder' }),\n})\nconst language_options = ref([\n  { label: '中文-CN', value: 'zh-cn' },\n  { label: '中文-TW', value: 'zh-tw' },\n  { label: '英文-EN', value: 'en' },\n  { label: '日文-JP', value: 'jp' },\n])\nconst preview_url = ref('')\n\nconst handleWebsiteTypeChange = (value: string) => {\n  if (enterprise_info.value.version === WEBSITE_VERSION.ENTERPRISE) {\n    form.website_type = value\n  }\n}\n\nconst handleSwitchChange = () => {\n  if (enterprise_store.version.name !== window.$t('enterprise_edition')) {\n    ElMessageBox.confirm(window.$t('version.upgrade_hide_logo'), window.$t('version.upgrade_tip'), {\n      confirmButtonText: window.$t('action_confirm'),\n      cancelButtonText: window.$t('action.cancel'),\n    })\n      .then(() => {\n        service_visible.value = true\n        service_title.value = window.$t('action_upgrade')\n      })\n      .catch(() => {})\n  } else {\n    form.copyright = !form.copyright\n  }\n}\n\nconst handleSave = async () => {\n  const valid = await form_ref.value.validate()\n  if (!valid) return\n  submitting.value = true\n  await enterprise_store\n    .update({\n      data: {\n        eid: enterprise_info.value.eid,\n        logo: form.logo,\n        ico: form.ico,\n        display_name: form.name,\n        language: form.language,\n        description: form.desc,\n        keywords: JSON.stringify(form.keywords),\n        copyright: form.copyright.toString(),\n        type: form.website_type,\n        template_type: form.template_type,\n        layout_type: form.layout_type,\n      },\n    })\n    .finally(() => {\n      submitting.value = false\n    })\n  ElMessage.success(window.$t('action_save_success'))\n  enterprise_store.loadSelfInfo()\n}\nconst loadedHandler = () => {\n  // loading.value = false\n}\n\nwatch(\n  () => enterprise_info.value,\n  () => {\n    form.logo = enterprise_info.value.logo || ''\n    form.ico = enterprise_info.value.ico || ''\n    form.name = enterprise_info.value.display_name || ''\n    form.keywords = JSON.parse(enterprise_info.value.keywords || '[]')\n    form.language = (enterprise_info.value.language !== 'En' && enterprise_info.value.language) || 'zh-cn'\n    form.desc = enterprise_info.value.description || ''\n    form.copyright = enterprise_info.value.copyright.toLowerCase() === 'true'\n    form.website_type = enterprise_info.value.type || WEBSITE_TYPE.INDEPENDENT\n    form.template_type = enterprise_info.value.template_type || ''\n    // form.template_type = (enterprise_info.value.template_type !== 1 && enterprise_info.value.template_type) || 'website'\n    // if (!['software', 'website'].includes(form.template_type)) form.template_type = 'website'\n    form.layout_type = (enterprise_info.value.layout_type !== 1 && enterprise_info.value.layout_type) || 'loose'\n    if (+enterprise_info.value.eid) loadedHandler()\n  },\n  {\n    immediate: true,\n    deep: true,\n  }\n)\n</script>\n\n<style scoped lang=\"scss\">\n::v-deep(.el-textarea__inner) {\n  padding: 14px 16px;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/login/components/apply-form.vue",
    "content": "<template>\n  <ElForm ref=\"form_ref\" v-loading=\"loading\" class=\"relative max-w-[440px] w-full\" :model=\"form\" label-position=\"top\">\n    <h4 class=\"text-3xl text-[#1D1E1F] font-bold text-center mb-10\">\n      {{ $t('apply.create_site') }}\n    </h4>\n    <!-- 暂时去掉，现在后台自动审核成功了。需要跳过审核的 -->\n    <ElSteps v-if=\"false\" class=\"mb-8\" :active=\"active_step\" align-center>\n      <ElStep\n        v-for=\"(step_label, step_index) in ['module.website_info', 'apply.waiting_audit', 'apply.create_success']\"\n        :key=\"step_index\"\n      >\n        <template #icon>\n          <div class=\"w-9 h-9 bg-[#F2F3F3] rounded-full flex items-center justify-center\">\n            <div\n              class=\"w-7 h-7 rounded-full text-white text-sm flex items-center justify-center\"\n              :class=\"[\n                step_index < active_step\n                  ? 'bg-[#82A2F7]'\n                  : active_step === step_index\n                    ? 'bg-[#3664F0]'\n                    : 'bg-[#CFD1D6]',\n              ]\"\n            >\n              {{ step_index + 1 }}\n            </div>\n          </div>\n        </template>\n        <template #title>\n          <span\n            :class=\"[\n              step_index < active_step\n                ? 'text-[#B3C7FA]'\n                : active_step === step_index\n                  ? 'text-[#3664EF]'\n                  : 'text-[#9A9A9A]',\n            ]\"\n          >\n            {{ $t(step_label) }}\n          </span>\n        </template>\n      </ElStep>\n    </ElSteps>\n\n    <template v-if=\"active_step === 0\">\n      <ElFormItem\n        class=\"is-required\"\n        prop=\"website_name\"\n        :rules=\"generateInputRules({ message: 'login.website_name_placeholder' })\"\n      >\n        <template #label>\n          <span class=\"text-[#1D1E1F]\">{{ $t('login.website_name') }}</span>\n        </template>\n        <ElInput\n          v-model=\"form.website_name\"\n          style=\"--el-input-height: 44px\"\n          size=\"large\"\n          :placeholder=\"$t(`login.website_name_placeholder`)\"\n          clearable\n        />\n      </ElFormItem>\n      <ElFormItem\n        class=\"is-required\"\n        prop=\"contact_name\"\n        :rules=\"generateInputRules({ message: 'login.contact_name_placeholder' })\"\n      >\n        <template #label>\n          <span class=\"text-[#1D1E1F]\">{{ $t('login.contact_name') }}</span>\n        </template>\n        <ElInput\n          v-model=\"form.contact_name\"\n          style=\"--el-input-height: 44px\"\n          size=\"large\"\n          :placeholder=\"$t(`login.contact_name_placeholder`)\"\n          clearable\n        />\n      </ElFormItem>\n      <ElButton\n        type=\"primary\"\n        round\n        class=\"w-full mt-6 !h-10\"\n        :loading=\"submitting\"\n        :disabled=\"!form.website_name || !form.contact_name\"\n        @click.stop=\"onNextStep\"\n      >\n        {{ $t('action_confirm') }}\n      </ElButton>\n    </template>\n    <template v-else-if=\"active_step === 1\">\n      <div\n        class=\"h-[424px] p-10 box-border bg-[#EFF9FF] rounded-lg flex flex-col items-center justify-center text-center\"\n      >\n        <div class=\"flex items-center justify-center gap-2\">\n          <ElIcon color=\"#4CBF65\" size=\"28\">\n            <CircleCheckFilled />\n          </ElIcon>\n          <span class=\"text-[#1D1E1F] text-2xl font-bold\">{{ $t('apply.waiting_audit') }}</span>\n        </div>\n        <div class=\"text-[#666] text-sm mt-4\">\n          {{ $t('apply_success_desc') }}\n        </div>\n        <img class=\"w-[148px] object-contain mt-14\" src=\"//chat.53ai.com/images/upgrade-qrcode.png\" />\n      </div>\n    </template>\n    <template v-else />\n    <ElButton\n      type=\"primary\"\n      text\n      class=\"!p-0 mt-4 !mx-auto relative left-1/2 -translate-x-1/2 !bg-transparent\"\n      @click=\"onLogin\"\n    >\n      {{ $t('login.back_to_login') }}\n    </ElButton>\n  </ElForm>\n</template>\n\n<script setup lang=\"ts\">\nimport { CircleCheckFilled } from '@element-plus/icons-vue'\n\nimport { nextTick, onMounted, onUnmounted, reactive, ref } from 'vue'\nimport { useEnterpriseStore, useUserStore } from '@/stores'\nimport { generateInputRules } from '@/utils/form-rule'\nimport eventBus from '@/utils/event-bus'\n\nconst emits = defineEmits<{\n  (e: 'login'): void\n}>()\n\nconst user_store = useUserStore()\nconst enterprise_store = useEnterpriseStore()\nconst form_ref = ref()\nconst active_step = ref(0)\nconst form = reactive({\n  website_name: '',\n  contact_name: '',\n})\nconst submitting = ref(false)\nconst loading = ref(false)\nonMounted(async () => {\n  const { access_token } = user_store.info\n  if (access_token) {\n    loading.value = true\n    const { list = [] } = await enterprise_store.loadListData({ data: { status: 0 } }).finally(() => {\n      loading.value = false\n    })\n    if (list.length > 0) active_step.value = 1\n  }\n  eventBus.on('language-change', onLanguageChange)\n  if (localStorage.getItem('login_type')) {\n    localStorage.removeItem('login_type')\n  }\n})\nonUnmounted(() => {\n  eventBus.off('language-change', onLanguageChange)\n})\n\nconst onLanguageChange = () => {\n  if (form_ref.value) form_ref.value.clearValidate()\n  // form_ref.value.validate()\n}\nconst reset = () => {\n  form.website_name = ''\n  form.contact_name = ''\n}\nconst onNextStep = async () => {\n  const valid = await form_ref.value.validate()\n  if (!valid) return\n  switch (active_step.value) {\n    case 0:\n      submitting.value = true\n      await enterprise_store\n        .apply({\n          data: {\n            contact_name: form.contact_name,\n            enterprise_name: form.website_name,\n            phone: user_store.info.username,\n            email: '',\n          },\n        })\n        .then(() => {\n          nextTick(() => {\n            emits('login')\n          })\n        })\n        .finally(() => {\n          submitting.value = false\n        })\n      // active_step.value++\n      ElMessage.success($t('apply.create_success'))\n      break\n    case 1:\n      break\n    default:\n      break\n  }\n  reset()\n}\nconst onLogin = () => {\n  emits('login')\n}\n\ndefineExpose({\n  reset,\n})\n</script>\n\n<style scoped lang=\"scss\">\n::v-deep(.el-step__line) {\n  left: 70% !important;\n  right: -30% !important;\n  background-color: #e9ebee !important;\n}\n::v-deep(.el-step__title) {\n  margin-top: 8px;\n  font-weight: 400 !important;\n}\n::v-deep(.el-step__head.is-finish .el-step__line) {\n  background-color: #3664ef !important;\n  // background-color: #82A2F6 !important;\n}\n::v-deep(.el-step__head.is-process .el-step__line) {\n  // background-color: #3664EF !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/login/components/create-enterprise-form.vue",
    "content": "<template>\n  <ElButton\n    class=\"absolute top-6 right-8 !p-0 !border-none !outline-none !bg-transparent !leading-1 !h-auto hover:opacity-70\"\n    type=\"default\"\n    text\n    @click=\"emits('login')\"\n  >\n    <SvgIcon class=\"mr-1\" name=\"account\" width=\"13\" />\n    {{ $t('action_login') }}\n  </ElButton>\n  <ElForm ref=\"form_ref\" v-loading=\"loading\" class=\"relative max-w-[440px] w-full\" :model=\"form\" label-position=\"top\">\n    <h4 class=\"text-3xl text-[#1D1E1F] font-bold text-center mb-10\">\n      <!-- #ifndef KM -->\n      {{ $t('apply.create_title', { project: 'Hub' }) }}\n      <!-- #endif -->\n      <!-- #ifdef KM -->\n      {{ $t('apply.create_title', { project: 'KM' }) }}\n      <!-- #endif -->\n    </h4>\n    <template v-if=\"active_step === 0\">\n      <ElFormItem\n        prop=\"enterprise_name\"\n        :rules=\"generateInputRules({ message: 'apply.enterprise_not_empty', validator: ['text'] })\"\n      >\n        <template #label>\n          <span class=\"text-[#1D1E1F]\">{{ $t('name') }}</span>\n        </template>\n        <ElInput\n          v-model=\"form.enterprise_name\"\n          style=\"--el-input-height: 44px\"\n          size=\"large\"\n          :placeholder=\"$t(`apply.enterprise_name_placeholder`)\"\n          clearable\n        />\n      </ElFormItem>\n      <ElFormItem\n        prop=\"domain\"\n        :rules=\"[\n          {\n            validator: (rule, value, callback, message) => domainValidator({ rule, value, callback, message }),\n            trigger: 'blur',\n          },\n        ]\"\n      >\n        <template #label>\n          <span class=\"text-[#1D1E1F]\">{{ $t('apply.domain') }}</span>\n        </template>\n        <ElInput\n          v-model=\"form.domain\"\n          style=\"--el-input-height: 44px\"\n          class=\"domain-input\"\n          size=\"large\"\n          :placeholder=\"$t(`apply.domain_placeholder`)\"\n          clearable\n        >\n          <template #append>\n            <div class=\"w-[130px] border-[1px] border-[#e6e8eb] rounded-r-md bg-white\">\n              <!-- #ifndef KM -->\n              53ai.com\n              <!-- #endif -->\n              <!-- #ifdef KM -->\n              km.53ai.com\n              <!-- #endif -->\n            </div>\n          </template>\n        </ElInput>\n      </ElFormItem>\n      <ElFormItem\n        prop=\"username\"\n        :rules=\"\n          generateInputRules({\n            message: 'login.mobile_placeholder',\n            validator: ['text', 'mobile'],\n          })\n        \"\n        class=\"relative\"\n      >\n        <template #label>\n          <span class=\"text-[#1D1E1F]\">{{ $t('mobile') }}</span>\n        </template>\n        <ElInput\n          v-model=\"form.username\"\n          style=\"--el-input-height: 44px\"\n          autocomplete=\"off\"\n          name=\"prevent_autofill_username\"\n          size=\"large\"\n          :placeholder=\"$t('login.mobile_placeholder')\"\n          clearable\n          :disabled=\"user_store.info.username\"\n          @input=\"checkAccount\"\n          @blur=\"checkAccount\"\n        />\n        <div\n          v-if=\"!user_store.info.username && isAccountValidNow && !isAccountExists\"\n          class=\"text-xs leading-3 absolute top-full left-0 translate-y-[2px] text-[#07C160]\"\n        >\n          {{ $t('apply.mobile_unregistered_tip') }}\n        </div>\n      </ElFormItem>\n      <transition name=\"fade-slow\">\n        <ElFormItem\n          v-if=\"!user_store.info.username && isAccountValid\"\n          class=\"relative\"\n          prop=\"verify_code\"\n          :rules=\"generateInputRules({ message: 'verification_code_placeholder' })\"\n        >\n          <template #label>\n            <span class=\"text-[#1D1E1F]\">{{ $t('verification_code') }}</span>\n          </template>\n          <VerificationCodeInput\n            ref=\"verify_code_input_ref\"\n            v-model=\"form.verify_code\"\n            :account=\"form.username\"\n            :disabled=\"!isAccountValid\"\n          />\n        </ElFormItem>\n      </transition>\n      <transition name=\"fade-slow\">\n        <ElFormItem\n          v-if=\"!user_store.info.username && isAccountValid && !isAccountExists\"\n          class=\"relative\"\n          prop=\"password\"\n          :rules=\"[\n            ...generateInputRules({\n              message: 'login.password_placeholder',\n              validator: ['password'],\n            }),\n            {\n              min: 8,\n              max: 20,\n              message: $t('login.password_length_v2'),\n              trigger: 'blur',\n            },\n          ]\"\n        >\n          <template #label>\n            <span class=\"text-[#1D1E1F]\">{{ $t('password') }}</span>\n          </template>\n          <ElInput\n            v-model=\"form.password\"\n            style=\"--el-input-height: 44px\"\n            size=\"large\"\n            type=\"password\"\n            show-password\n            clearable\n            :placeholder=\"$t('login.password_placeholder')\"\n            @keyup.enter=\"onNextStep\"\n          />\n        </ElFormItem>\n      </transition>\n      <ElButton\n        type=\"primary\"\n        round\n        class=\"w-full mt-6 !h-10\"\n        :loading=\"submitting\"\n        :disabled=\"comfirmBtnDisabled\"\n        @click.stop=\"onNextStep\"\n      >\n        {{ $t('action_confirm') }}\n      </ElButton>\n    </template>\n    <template v-else-if=\"active_step === 1\">\n      <div\n        class=\"h-[424px] p-10 box-border bg-[#EFF9FF] rounded-lg flex flex-col items-center justify-center text-center\"\n      >\n        <div class=\"flex items-center justify-center gap-2\">\n          <ElIcon color=\"#4CBF65\" size=\"28\">\n            <CircleCheckFilled />\n          </ElIcon>\n          <span class=\"text-[#1D1E1F] text-2xl font-bold\">{{ $t('apply.waiting_audit') }}</span>\n        </div>\n        <div class=\"text-[#666] text-sm mt-4\">\n          {{ $t('apply_success_desc') }}\n        </div>\n        <img class=\"w-[148px] object-contain mt-14\" src=\"//chat.53ai.com/images/upgrade-qrcode.png\" />\n      </div>\n    </template>\n  </ElForm>\n</template>\n\n<script setup lang=\"ts\">\nimport { CircleCheckFilled } from '@element-plus/icons-vue'\nimport { onMounted, onUnmounted, reactive, ref, computed } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport { useEnterpriseStore, useUserStore } from '@/stores'\nimport { generateInputRules } from '@/utils/form-rule'\nimport eventBus from '@/utils/event-bus'\nimport { domainApi } from '@/api/modules/domain'\nimport { authApi } from '@/api/modules/auth'\n\nconst emits = defineEmits<{\n  (e: 'login'): void\n  (e: 'list'): void\n}>()\n\nconst user_store = useUserStore()\nconst enterprise_store = useEnterpriseStore()\nconst form_ref = ref()\nconst verify_code_input_ref = ref()\nconst active_step = ref(0)\nconst form = reactive({\n  enterprise_name: '',\n  domain: '',\n  username: '',\n  verify_code: '',\n  password: '',\n})\nconst submitting = ref(false)\nconst loading = ref(false)\nconst isAccountValid = ref(false)\nconst isAccountExists = ref(true)\nconst isAccountValidNow = ref(true)\n\n// 按钮是否禁用\nconst comfirmBtnDisabled = computed(() => {\n  // 已登录\n  if (user_store.info.username) {\n    return !(form.enterprise_name && form.domain)\n  }\n  // 未登录但手机号已注册\n  if (isAccountExists.value) {\n    return !(form.enterprise_name && form.domain && form.username && form.verify_code)\n  }\n  // 未登录且手机号未注册\n  return !(form.enterprise_name && form.domain && form.username && form.verify_code && form.password)\n})\n\n// 域名校验\nconst domainValidator = async ({ rule, value, callback, message } = {}) => {\n  if (!/^[a-z0-9-]{5,20}$/.test(form.domain)) {\n    callback('请使用小写字母或数字或\"-\"，且不少于5个字符不超过20个字符')\n    return\n  }\n  try {\n    const { available } = await domainApi.checkIsDomainExists(form.domain)\n    if (!available) {\n      // callback(`${form.domain} 已被使用，试试其他域名吧~`)\n      callback(window.$t('apply.domain_already_use', { domain: form.domain }))\n    }\n  } catch (error) {\n    callback(window.$t('apply.domain_already_use', { domain: form.domain }))\n  }\n}\n\n// 手机号校验\nconst checkAccount = async () => {\n  try {\n    await form_ref.value.validateField('username')\n    isAccountValid.value = true\n    isAccountValidNow.value = true\n    const { exists = false } = await authApi.checkAccount({ data: { account: form.username } })\n    isAccountExists.value = exists\n  } catch (err) {\n    isAccountValidNow.value = false\n  }\n}\n\nconst reset = () => {\n  form.enterprise_name = ''\n  form.domain = ''\n  form.username = ''\n  form.verify_code = ''\n  form.password = ''\n}\n\n// 手机验证码登录\nconst mobileLogin = async () => {\n  await user_store.login({ type: 'mobile', data: form, hideError: true }).catch(err => {\n    ElMessage.warning(\n      window.$t(\n        err.origin_message === 'unauthorized'\n          ? 'response_message.user_not_found'\n          : 'response_message.username_or_password_is_incorrect'\n      )\n    )\n    return Promise.reject(err)\n  })\n}\n\n// 注册\nconst register = async () => {\n  await user_store\n    .login({\n      type: 'password',\n      data: {\n        username: form.username,\n        password: form.password,\n        verify_code: form.verify_code,\n      },\n      hideError: false,\n    })\n    .catch(err => {\n      return Promise.reject(err)\n    })\n}\n\n// 设置初始密码\nconst setPassword = async () => {\n  await user_store\n    .resetPassword({\n      data: {\n        mobile: form.username,\n        email: '',\n        new_password: form.password,\n        confirm_password: form.password,\n        verify_code: form.verify_code,\n      },\n    })\n    .catch(err => {\n      return Promise.reject(err)\n    })\n}\n\n// 申请创建企业\nconst createEnterprise = async () => {\n  await enterprise_store\n    .apply({\n      data: {\n        contact_name: form.enterprise_name,\n        enterprise_name: form.enterprise_name,\n        domain: form.domain,\n        phone: form.username,\n        email: '',\n      },\n      hideError: false,\n    })\n    .then(() => {\n      emits('list')\n      ElMessage.success(window.$t('apply.create_success'))\n    })\n}\n\nconst onNextStep = async () => {\n  try {\n    await form_ref.value.validate()\n  } catch (error) {\n    return\n  }\n  switch (active_step.value) {\n    case 0:\n      submitting.value = true\n      try {\n        // 已登录-创建企业\n        if (user_store.info.username) {\n          await createEnterprise()\n        } else {\n          // 未登录\n          // 验证码校验\n          const valid = await verify_code_input_ref.value.validateCode()\n          if (!valid) {\n            submitting.value = false\n            return\n          }\n          // 手机号未注册\n          if (!isAccountExists.value) {\n            // 注册\n            await register()\n            // 设置初始密码\n            await setPassword()\n          }\n          // 验证码登录\n          await mobileLogin()\n          // 创建企业\n          await createEnterprise()\n          reset()\n        }\n      } catch (error) {\n        console.log('error', error)\n        submitting.value = false\n      }\n      break\n    case 1:\n      break\n    default:\n      break\n  }\n}\n\nconst onLanguageChange = () => {\n  if (form_ref.value) form_ref.value.clearValidate()\n}\n\nonMounted(async () => {\n  form.username = user_store.info.username\n  const { access_token } = user_store.info\n  if (access_token) {\n    loading.value = true\n    // 待审核\n    const { list = [] } = await enterprise_store.loadListData({ data: { status: 0 } }).finally(() => {\n      loading.value = false\n    })\n    if (list.length > 0) active_step.value = 1\n  }\n  eventBus.on('language-change', onLanguageChange)\n  if (localStorage.getItem('login_type')) {\n    localStorage.removeItem('login_type')\n  }\n})\n\nonUnmounted(() => {\n  eventBus.off('language-change', onLanguageChange)\n})\n\ndefineExpose({\n  reset,\n})\n</script>\n\n<style scoped lang=\"scss\">\n:deep(.domain-input .el-input-group__append) {\n  padding: 0 !important;\n  text-align: center;\n}\n\n.fade-slow-enter-from,\n.fade-slow-leave-to {\n  opacity: 0;\n}\n.fade-slow-enter-active,\n.fade-slow-leave-active {\n  transition: all 0.5s linear;\n}\n.fade-slow-enter-to {\n  opacity: 1;\n}\n\n::v-deep(.el-step__line) {\n  left: 70% !important;\n  right: -30% !important;\n  background-color: #e9ebee !important;\n}\n::v-deep(.el-step__title) {\n  margin-top: 8px;\n  font-weight: 400 !important;\n}\n::v-deep(.el-step__head.is-finish .el-step__line) {\n  background-color: #3664ef !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/login/components/enterprise-list.vue",
    "content": "<template>\n  <div>\n    <ElButton\n      class=\"absolute top-6 left-8 !p-0 !border-none !outline-none !bg-transparent !leading-1 !h-auto hover:opacity-70\"\n      type=\"default\"\n      text\n      @click=\"emits('back')\"\n    >\n      <SvgIcon class=\"mr-1\" name=\"back\" width=\"13\" />\n      {{ $t('return') }}\n    </ElButton>\n    <ElButton\n      class=\"absolute top-6 right-8 !p-0 !border-none !outline-none !bg-transparent !leading-1 !h-auto hover:opacity-70\"\n      type=\"default\"\n      text\n      @click=\"createNewEnterprise\"\n    >\n      <SvgIcon class=\"mr-1\" name=\"create\" width=\"13\" />\n      {{ $t('create_new_enterprise') }}\n    </ElButton>\n    <h4 class=\"text-3xl text-[#1D1E1F] font-bold text-center mb-8\">\n      {{ $t('login.select_enterprise') }}\n    </h4>\n    <ul v-loading=\"loading\" class=\"w-[400px] max-h-[440px] pr-1 box-border overflow-auto flex flex-col gap-4\">\n      <li\n        v-for=\"item in enterprise_list\"\n        :key=\"item.apply_id\"\n        class=\"flex items-center border rounded-sm p-4 cursor-pointer hover:border-[#3664EF] relative\"\n        @click=\"handleEnterpriseSelect({ data: item })\"\n      >\n        <img class=\"flex-none mr-4 w-[60px] h-[60px] object-cover rounded\" :src=\"item.logo\" />\n        <div class=\"w-[230px] mr-1\">\n          <div class=\"max-w-64 text-base text-[#182B50] truncate flex items-center\">\n            <span v-tooltip=\"'auto'\" class=\"tooltip-title\">{{ item.name || '- -' }}</span>\n            <ElTag v-if=\"item.is_admin\" type=\"warning\" effect=\"light\" class=\"ml-2\">\n              {{ $t('role.admin') }}\n            </ElTag>\n          </div>\n          <div v-tooltip=\"'auto'\" class=\"text-sm text-[#9A9A9A] mt-2 tooltip-title\">\n            {{ item.domain || '- -' }}\n          </div>\n        </div>\n        <ElTag v-if=\"item.is_process\" type=\"warning\" effect=\"light\">\n          {{ $t('apply.process') }}\n        </ElTag>\n        <ElTag v-else-if=\"item.is_expired\" type=\"info\" effect=\"light\">\n          {{ $t('apply.expired') }}\n        </ElTag>\n        <ElTag v-else-if=\"item.is_reject\" type=\"danger\" effect=\"light\">\n          {{ $t('apply.reject') }}\n        </ElTag>\n        <ElIcon\n          v-else-if=\"item.is_loading\"\n          size=\"18\"\n          color=\"#999\"\n          class=\"animate-spin absolute top-1/2 -translate-y-1/2 right-6\"\n        >\n          <Loading />\n        </ElIcon>\n        <ElIcon v-else size=\"18\" class=\"absolute top-1/2 -translate-y-1/2 right-6\">\n          <ArrowRight />\n        </ElIcon>\n      </li>\n    </ul>\n    <ElButton\n      type=\"primary\"\n      text\n      class=\"relative mt-4 !bg-transparent left-1/2 -translate-x-1/2\"\n      @click.stop=\"loadEnterpriseList\"\n    >\n      {{ $t('apply.refresh_list') }}\n    </ElButton>\n    <div\n      class=\"flex items-center text-sm text-[#5B6A91] cursor-pointer w-max mx-auto mt-2\"\n      @click=\"service_visible = true\"\n    >\n      <SvgIcon name=\"service\" width=\"14px\" height=\"14px\" class=\"mr-2\" />\n      {{ $t('apply.contact_customer_service') }}\n    </div>\n  </div>\n  <ServiceDialog v-model:visible=\"service_visible\" :title=\"$t('apply.contact_customer_service_v2')\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport { Loading, ArrowRight } from '@element-plus/icons-vue'\nimport { useEnterpriseStore, useUserStore } from '@/stores'\nimport { sleep } from '@/utils'\nimport systemLogApi from '@/api/modules/system-log'\nimport { SYSTEM_LOG_ACTION } from '@/constants/system-log'\n\nconst emits = defineEmits<{\n  (e: 'apply', data?: string): void\n  (e: 'back'): void\n}>()\n\nconst user_store = useUserStore()\nconst enterprise_store = useEnterpriseStore()\n\nconst loading = ref(false)\nconst enterprise_list = ref([])\nconst service_visible = ref(false)\n\nconst createNewEnterprise = () => {\n  emits('apply', user_store.info.username)\n}\n\n// 检查是否存在eid参数，如果存在，则直接跳转\nconst getUrlSearchEid = (): string | null => {\n  const search = window.location.search\n  const params = new URLSearchParams(search)\n  const redirect = params.get('redirect') || ''\n  const newParams = new URLSearchParams(`?${redirect.split('?')[1] || ''}`)\n  const eid = newParams.get('eid')\n  if (eid) {\n    return eid\n  }\n  return null\n}\n\nconst handleEnterpriseSelect = async ({ data = {} } = {}) => {\n  if (data.is_process) return ElMessage.warning(window.$t('apply.process'))\n  if (data.is_reject) return ElMessage.warning(data.reject_reason || window.$t('apply.reject'))\n  if (data.is_expired) return (service_visible.value = true)\n  if (data.is_loading) return\n\n  data.is_loading = true\n  if (!data.eid) {\n    // 考虑申请流程存在异步情况，需要多次请求\n    const { apply_id } = data\n    let request_count = 0\n    const refreshData = async () => {\n      const { list = [] } = await enterprise_store.loadListData({ data: { status: -1 } })\n      request_count++\n      const apply_data = list.find(item => item.apply_id == apply_id)\n      if (!apply_data.eid && request_count < 5) {\n        await sleep(1)\n        await refreshData()\n      }\n      data.eid = apply_data.eid || 0\n      return apply_data.eid\n    }\n    await refreshData()\n    data.is_loading = false\n    if (!data.eid) return ElMessage.warning('Invalid eid')\n  }\n\n  await enterprise_store.loadDetailData({ data: { eid: data.eid } })\n  await systemLogApi.create({\n    action: SYSTEM_LOG_ACTION.LOGIN,\n    content: '登录',\n  })\n\n  // 重置加载状态\n  data.is_loading = false\n\n  // 构建目标URL\n  // #ifdef KM\n  if (window.parent) {\n    const eid = getUrlSearchEid()\n    window.parent.postMessage(\n      {\n        action: 'saas-login-success',\n        eid: data.eid,\n        access_token: user_store.info.access_token,\n        allowd_redirect: eid ? String(data.eid) === eid : true,\n      },\n      '*'\n    )\n  } else {\n    window.location.reload()\n  }\n  // #endif\n\n  // #ifndef KM\n  const targetUrl = `${data.domain}?access_token=${user_store.info.access_token}&eid=${data.eid}`\n  if (window.parent) {\n    window.parent.postMessage({\n      action: 'saas-login-redirect',\n      url: targetUrl,\n    })\n  }\n  // #endif\n}\n\nconst loadEnterpriseList = async () => {\n  loading.value = true\n  const { list = [] } = await enterprise_store.loadListData({ data: { status: -1 } }).finally(() => {\n    loading.value = false\n  })\n  enterprise_list.value = list\n\n  const eid = getUrlSearchEid()\n\n  if (eid) {\n    const corp = list.find(item => String(item.eid) === eid)\n\n    if (corp) handleEnterpriseSelect({ data: corp })\n  }\n}\n\nonMounted(() => {\n  loadEnterpriseList()\n})\n</script>\n\n<style scoped>\n.tooltip-title {\n  max-width: 220px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/login/components/forget-form.vue",
    "content": "<template>\n  <ElForm ref=\"form_ref\" class=\"relative max-w-[440px] w-full\" :model=\"form\" label-position=\"top\">\n    <h4 class=\"text-3xl text-[#1D1E1F] font-bold text-center mb-10\">\n      {{ $t('login.reset_password') }}\n    </h4>\n    <ElFormItem>\n      <template #label>\n        <span class=\"text-[#1D1E1F]\">{{ $t('login.select_reset_password_way') }}</span>\n      </template>\n      <ElRadioGroup v-model=\"form.username_type\" @change=\"onUsernameTypeChange\">\n        <ElRadio label=\"email\">\n          {{ $t('login.email_validate') }}\n        </ElRadio>\n        <ElRadio label=\"mobile\">\n          {{ $t('login.mobile_validate') }}\n        </ElRadio>\n      </ElRadioGroup>\n    </ElFormItem>\n    <ElFormItem\n      prop=\"username\"\n      :rules=\"\n        generateInputRules({\n          message: `login.${form.username_type}_placeholder`,\n          validator: ['text', form.username_type],\n        })\n      \"\n    >\n      <template #label>\n        <span class=\"text-[#1D1E1F]\">{{ $t(form.username_type) }}</span>\n      </template>\n      <ElInput\n        v-model=\"form.username\"\n        style=\"--el-input-height: 44px\"\n        size=\"large\"\n        autocomplete=\"forgot-username\"\n        name=\"prevent_autofill_username\"\n        :placeholder=\"$t(`login.${form.username_type}_placeholder`)\"\n        clearable\n        @blur=\"checkAccount\"\n        @input=\"checkAccountValidation\"\n      />\n      <div v-if=\"!account_exists\" class=\"absolute -bottom-5 left-0 text-red-500 text-xs\">\n        {{ $t(`login.${form.username_type}_no_exists`) }}\n        <ElButton type=\"primary\" link size=\"small\" class=\"!p-0 !bg-transparent -ml-1\" @click=\"onRegister\">\n          {{ $t('action_register') }}\n        </ElButton>\n      </div>\n    </ElFormItem>\n    <ElFormItem\n      class=\"relative\"\n      prop=\"verification_code\"\n      :rules=\"generateInputRules({ message: 'verification_code_placeholder' })\"\n    >\n      <template #label>\n        <span class=\"text-[#1D1E1F]\">{{ $t('verification_code') }}</span>\n      </template>\n      <VerificationCodeInput\n        ref=\"verification_code_input_ref\"\n        v-model=\"form.verification_code\"\n        :account=\"form.username\"\n        :account-type=\"form.username_type\"\n        :disabled=\"!account_exists || !isAccountValid\"\n        :maxlength=\"form.username_type === 'mobile' ? 4 : 6\"\n      />\n    </ElFormItem>\n    <ElFormItem\n      class=\"relative\"\n      prop=\"password\"\n      :rules=\"[\n        ...generateInputRules({ message: 'login.new_password_placeholder', validator: ['password'] }),\n        {\n          min: 8,\n          max: 20,\n          message: $t('login.password_length'),\n          trigger: 'blur',\n        },\n      ]\"\n    >\n      <template #label>\n        <span class=\"text-[#1D1E1F]\">{{ $t('login.new_password') }}</span>\n      </template>\n      <ElInput\n        v-model=\"form.password\"\n        style=\"--el-input-height: 44px\"\n        size=\"large\"\n        type=\"password\"\n        show-password\n        clearable\n        autocomplete=\"new-password\"\n        name=\"prevent_autofill_password\"\n        :placeholder=\"$t('login.new_password_placeholder')\"\n      />\n    </ElFormItem>\n    <ElFormItem\n      class=\"relative\"\n      prop=\"confirm_password\"\n      :rules=\"[\n        ...generateInputRules({ message: 'login.confirm_password_placeholder', validator: ['password'] }),\n        {\n          min: 8,\n          max: 20,\n          message: $t('login.password_length'),\n          trigger: 'blur',\n        },\n        {\n          validator: (rule, value, callback) => {\n            if (value !== form.password) return callback(new Error($t('login.password_not_match')))\n            callback()\n          },\n          trigger: 'blur',\n        },\n      ]\"\n    >\n      <template #label>\n        <span class=\"text-[#1D1E1F]\">{{ $t('login.confirm_password') }}</span>\n      </template>\n      <ElInput\n        v-model=\"form.confirm_password\"\n        style=\"--el-input-height: 44px\"\n        size=\"large\"\n        type=\"password\"\n        show-password\n        clearable\n        autocomplete=\"new-password\"\n        name=\"prevent_autofill_password\"\n        :placeholder=\"$t('login.confirm_password_placeholder')\"\n      />\n    </ElFormItem>\n    <ElButton\n      type=\"primary\"\n      round\n      class=\"w-full mt-6 !h-10\"\n      :disabled=\"!form.username || !form.password || !form.verification_code || !form.confirm_password\"\n      :loading=\"submitting\"\n      @click.stop=\"onUpdatePassword\"\n    >\n      {{ $t('login.update_password') }}\n    </ElButton>\n    <ElButton\n      type=\"primary\"\n      text\n      class=\"!p-0 mt-4 !mx-auto relative left-1/2 -translate-x-1/2 !bg-transparent\"\n      @click=\"onLogin\"\n    >\n      {{ $t('login.back_to_login') }}\n    </ElButton>\n  </ElForm>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, onMounted, onUnmounted, nextTick } from 'vue'\nimport { useUserStore } from '@/stores'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { authApi } from '@/api/modules/auth'\nimport eventBus from '@/utils/event-bus'\nimport { validateFormField } from '@/utils/form-validator'\n\ninterface FormType {\n  username: string\n  username_type: 'email' | 'mobile'\n  password: string\n  confirm_password: string\n  verification_code: string\n}\n\nconst emits = defineEmits<{\n  (e: 'login'): void\n  (e: 'register'): void\n}>()\n\nconst user_store = useUserStore()\nconst form_ref = ref()\nconst verification_code_input_ref = ref()\nconst form = reactive<FormType>({\n  username_type: 'email',\n  username: '',\n  verification_code: '',\n  password: '',\n  confirm_password: '',\n})\nconst submitting = ref(false)\nconst account_exists = ref(true)\nconst isAccountValid = ref(false)\n\n// 检查账号验证状态\nconst checkAccountValidation = async () => {\n  isAccountValid.value = await validateFormField(form_ref, 'username')\n}\n\nonMounted(() => {\n  eventBus.on('language-change', onLanguageChange)\n})\nonUnmounted(() => {\n  eventBus.off('language-change', onLanguageChange)\n})\n\nconst onLanguageChange = () => {\n  if (form_ref.value) {\n    form_ref.value.clearValidate()\n    // form_ref.value.validate()\n  }\n}\n\nconst reset = () => {\n  form.username_type = 'mobile'\n  form.username = ''\n  form.verification_code = ''\n  form.password = ''\n  form.confirm_password = ''\n}\nconst onUpdatePassword = async () => {\n  let valid = await form_ref.value.validate()\n  if (!valid) return\n  submitting.value = true\n  await checkAccount()\n  if (!account_exists.value) {\n    ElMessage.warning(window.$t('login.account_no_exists'))\n    return (submitting.value = false)\n  }\n  if (form.username_type === 'mobile') {\n    valid = await verification_code_input_ref.value.validateCode()\n    if (!valid) return (submitting.value = false)\n  }\n  await user_store\n    .resetPassword({\n      data: {\n        mobile: form.username_type === 'mobile' ? form.username : '',\n        email: form.username_type === 'email' ? form.username : '',\n        new_password: form.password,\n        confirm_password: form.confirm_password,\n        verify_code: form.verification_code,\n      },\n    })\n    .finally(() => {\n      submitting.value = false\n    })\n  ElMessage.success($t('action_update_success'))\n  reset()\n  onLogin()\n}\nconst onLogin = () => {\n  emits('login')\n}\nconst onRegister = () => {\n  emits('register')\n}\nconst onUsernameTypeChange = async () => {\n  form.username = ''\n  verification_code_input_ref.value.reset()\n  await nextTick()\n  form_ref.value.clearValidate('username')\n  form_ref.value.clearValidate('verification_code')\n}\nconst checkAccount = async () => {\n  account_exists.value = true\n  const valid = await form_ref.value.validateField('username')\n  if (!valid) return\n  const { exists = false } = await authApi.checkAccount({ data: { account: form.username } })\n  account_exists.value = exists\n  return exists\n}\n\ndefineExpose({\n  reset,\n})\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/views/login/components/login-form.vue",
    "content": "<template>\n  <ElButton\n    class=\"absolute top-6 right-8 !p-0 !border-none !outline-none !bg-transparent !leading-1 !h-auto hover:opacity-70\"\n    type=\"default\"\n    text\n    @click=\"createNewEnterprise\"\n  >\n    <SvgIcon class=\"mr-1\" name=\"create\" width=\"13\" />\n    {{ $t('create_new_enterprise') }}\n  </ElButton>\n  <ElForm ref=\"form_ref\" class=\"relative max-w-[440px] w-full\" :model=\"form\" label-position=\"top\">\n    <h4 class=\"text-3xl text-[#1D1E1F] font-bold text-center mb-10\">\n      {{ $t(`login.${form.type}_login`) }}\n    </h4>\n    <template v-if=\"form.type === 'mobile'\">\n      <ElFormItem\n        prop=\"username\"\n        :rules=\"generateInputRules({ message: 'login.mobile_placeholder', validator: ['text', 'mobile'] })\"\n      >\n        <template #label>\n          <span class=\"text-[#1D1E1F]\">{{ $t('mobile') }}</span>\n        </template>\n        <ElInput\n          v-model=\"form.username\"\n          style=\"--el-input-height: 44px\"\n          autocomplete=\"new-username\"\n          name=\"prevent_autofill_username\"\n          size=\"large\"\n          :placeholder=\"$t('login.mobile_placeholder')\"\n          clearable\n          @input=\"checkAccountValidation\"\n          @blur=\"checkAccountValidation\"\n        />\n      </ElFormItem>\n      <ElFormItem\n        class=\"relative\"\n        prop=\"verify_code\"\n        :rules=\"generateInputRules({ message: 'verification_code_placeholder' })\"\n      >\n        <template #label>\n          <span class=\"text-[#1D1E1F]\">{{ $t('verification_code') }}</span>\n        </template>\n        <VerificationCodeInput\n          ref=\"verify_code_input_ref\"\n          v-model=\"form.verify_code\"\n          :account=\"form.username\"\n          :disabled=\"!isAccountValid\"\n        />\n        <div\n          class=\"absolute left-0 -bottom-7 text-xs text-[#9A9A9A]\"\n          v-html=\"\n            $t('login.agree_and_policy', {\n              agree: `<span class=\\'agree-hook cursor-pointer text-[#4F5052] text-xs mx-1 -mt-0.5 underline underline-offset-4\\'>${$t('login.agree')}</span>`,\n              policy: `<span class=\\'policy-hook cursor-pointer text-[#4F5052] text-xs mx-1 -mt-0.5 underline underline-offset-4\\'>${$t('login.policy')}</span>`,\n            })\n          \"\n        />\n      </ElFormItem>\n      <ElButton\n        type=\"primary\"\n        round\n        class=\"w-full mt-10 !h-10\"\n        :disabled=\"!form.username || !form.verify_code\"\n        :loading=\"submitting\"\n        @click=\"onLogin\"\n      >\n        {{ $t('action_login') }}\n      </ElButton>\n    </template>\n    <template v-if=\"form.type === 'password'\">\n      <ElFormItem\n        prop=\"username\"\n        :rules=\"generateInputRules({ message: 'login.account_placeholder', validator: ['text'] })\"\n      >\n        <template #label>\n          <span class=\"text-[#1D1E1F]\">{{ $t('account') }}</span>\n        </template>\n        <ElInput\n          v-model=\"form.username\"\n          style=\"--el-input-height: 44px\"\n          size=\"large\"\n          :placeholder=\"$t('login.account_placeholder')\"\n          clearable\n        />\n      </ElFormItem>\n      <ElFormItem\n        class=\"relative\"\n        prop=\"password\"\n        :rules=\"[\n          ...generateInputRules({ message: 'login.password_placeholder', validator: ['password'] }),\n          {\n            min: 8,\n            max: 20,\n            message: $t('login.password_length_v2'),\n            trigger: 'blur',\n          },\n        ]\"\n      >\n        <template #label>\n          <span class=\"text-[#1D1E1F]\">{{ $t('password') }}</span>\n        </template>\n        <ElInput\n          v-model=\"form.password\"\n          style=\"--el-input-height: 44px\"\n          size=\"large\"\n          type=\"password\"\n          show-password\n          clearable\n          :placeholder=\"$t('login.password_placeholder')\"\n          @keyup.enter=\"onLogin\"\n        />\n        <div class=\"w-full absolute right-0 -bottom-9 flex justify-between items-center\">\n          <div\n            class=\"text-xs text-[#9A9A9A]\"\n            v-html=\"\n              $t('login.agree_and_policy', {\n                agree: `<span class=\\'agree-hook cursor-pointer text-[#4F5052] text-xs mx-1 -mt-0.5 underline underline-offset-4\\'>${$t('login.agree')}</span>`,\n                policy: `<span class=\\'policy-hook cursor-pointer text-[#4F5052] text-xs mx-1 -mt-0.5 underline underline-offset-4\\'>${$t('login.policy')}</span>`,\n              })\n            \"\n          />\n          <ElButton type=\"text\" class=\"bg-transparent text-sm\" @click=\"onForgetPassword\">\n            {{ $t('login.forget_password') }}\n          </ElButton>\n        </div>\n      </ElFormItem>\n      <ElButton\n        type=\"primary\"\n        round\n        class=\"w-full mt-10 !h-10\"\n        :disabled=\"!form.username || !form.password\"\n        :loading=\"submitting\"\n        @click=\"onLogin\"\n      >\n        {{ $t('action_login') }}\n      </ElButton>\n    </template>\n    <template v-if=\"form.type === 'wechat'\">\n      <WeChat @oauth-success=\"handleOauthSuccess\" />\n    </template>\n    <template v-if=\"form.type === 'bind_mobile'\">\n      <ElFormItem\n        prop=\"username\"\n        class=\"mt-5\"\n        label-position=\"top\"\n        :rules=\"generateInputRules({ message: 'login.mobile_placeholder', validator: ['text', 'mobile'] })\"\n      >\n        <template #label>\n          <span class=\"text-[#1D1E1F]\">{{ $t('mobile') }}</span>\n        </template>\n        <ElInput\n          v-model=\"form.username\"\n          style=\"--el-input-height: 44px\"\n          autocomplete=\"new-username\"\n          name=\"prevent_autofill_username\"\n          size=\"large\"\n          :placeholder=\"$t('login.mobile_placeholder')\"\n          clearable\n        />\n      </ElFormItem>\n      <ElFormItem\n        class=\"relative\"\n        prop=\"verify_code\"\n        :rules=\"generateInputRules({ message: 'verification_code_placeholder' })\"\n      >\n        <VerificationCodeInput ref=\"verify_code_input_ref\" v-model=\"form.verify_code\" :account=\"form.username\" />\n      </ElFormItem>\n      <ElButton\n        type=\"primary\"\n        round\n        class=\"w-full mt-8 !h-10\"\n        :disabled=\"!form.username || !form.verify_code\"\n        :loading=\"submitting\"\n        @click=\"onLogin\"\n      >\n        {{ $t('action_confirm') }}\n      </ElButton>\n    </template>\n    <ElDivider class=\"!w-[80%] !mx-auto\">\n      <span class=\"text-[#9A9A9A]\">{{ $t('other_login_method') }}</span>\n    </ElDivider>\n    <div class=\"flex justify-around text-sm\">\n      <div\n        v-for=\"item in loginWayOptions\"\n        :key=\"item.type\"\n        class=\"w-14 flex flex-col items-center gap-3 cursor-pointer hover:opacity-70\"\n        :class=\"form.type === item.type ? 'text-[#2563eb]' : 'text-[#4f5052]'\"\n        @click=\"handleLoginWayChange(item.type)\"\n      >\n        <SvgIcon :name=\"item.icon\" width=\"25\" :color=\"form.type === item.type ? '#2563eb' : '#4f5052'\" />\n        {{ item.label }}\n      </div>\n    </div>\n  </ElForm>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, reactive, ref } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport WeChat from './wechat.vue'\nimport { useUserStore } from '@/stores'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { validateFormField } from '@/utils/form-validator'\nimport eventBus from '@/utils/event-bus'\n\nconst emits = defineEmits<{\n  (e: 'forget'): void\n  (e: 'register'): void\n  (e: 'apply'): void\n  (e: 'login-success'): void\n  (e: 'list'): void\n}>()\n\ninterface loginWayOption {\n  type: 'mobile' | 'wechat' | 'password'\n  icon: string\n  label: string\n}\nconst loginWayOptions: loginWayOption[] = [\n  {\n    type: 'wechat',\n    icon: 'wechat-new',\n    label: window.$t('wechat'),\n  },\n  {\n    type: 'password',\n    icon: 'account',\n    label: window.$t('account_psd'),\n  },\n  {\n    type: 'mobile',\n    icon: 'mobile-new',\n    label: window.$t('mobile_login'),\n  },\n]\n\nconst user_store = useUserStore()\nconst form_ref = ref()\nconst verify_code_input_ref = ref()\nconst form = reactive({\n  type: 'password',\n  username: '',\n  password: '',\n  verify_code: '',\n})\nconst submitting = ref(false)\nconst oauth_data = ref<any>({})\nconst isAccountValid = ref(false)\n\nconst createNewEnterprise = () => {\n  emits('apply')\n}\n\n// 检查账号验证状态\nconst checkAccountValidation = async () => {\n  isAccountValid.value = await validateFormField(form_ref, 'username')\n}\n\nconst onLanguageChange = () => {\n  if (form_ref.value) form_ref.value.clearValidate()\n  // form_ref.value.validate()\n}\n\nconst reset = () => {\n  form.type = 'password'\n  form.username = ''\n  form.password = ''\n  form.verify_code = ''\n}\nconst onLogin = async () => {\n  const valid = await form_ref.value.validate()\n  if (!valid) return\n  submitting.value = true\n  if (form.type.includes('mobile')) {\n    const valid = await verify_code_input_ref.value.validateCode()\n    if (!valid) return (submitting.value = false)\n  }\n  if (form.type === 'bind_mobile') {\n    await user_store.bind_wechat({\n      mobile: form.username,\n      verify_code: form.verify_code,\n      openid: oauth_data.value.openid,\n      unionid: oauth_data.value.unionid,\n      nickname: oauth_data.value.nickname,\n      from: 'saas',\n    })\n  } else {\n    const data = await user_store\n      .login({ type: form.type, data: form, hideError: true })\n      .catch(err => {\n        // if (err.code == RESPONSE_CODE_UNAUTHORIZED_ERROR && err.origin_message == 'unauthorized: user not found') {\n        // \tonRegister()\n        // } else ElMessage.warning(window.$t(err.message))\n        ElMessage.warning(\n          window.$t(\n            err.origin_message === 'unauthorized'\n              ? 'response_message.user_not_found'\n              : 'response_message.username_or_password_is_incorrect'\n          )\n        )\n        return Promise.reject(err)\n      })\n      .finally(() => {\n        submitting.value = false\n      })\n  }\n  ElMessage.success(window.$t('action_login_success'))\n  emits('list')\n  reset()\n}\n\nconst handleOauthSuccess = async (data: any) => {\n  await user_store.wechat_login({ unionid: data.unionid, from: 'saas' }).catch(err => {\n    oauth_data.value = data\n    form.type = 'bind_mobile'\n    return Promise.reject(err)\n  })\n  emits('list')\n  ElMessage.success(window.$t('action_login_success'))\n  reset()\n}\n\nconst onForgetPassword = () => {\n  emits('forget')\n}\nconst onRegister = () => {\n  emits('register')\n}\nconst onPasswordLogin = () => {\n  form.username = ''\n  form.password = ''\n  form.verify_code = ''\n  form.type = 'password'\n}\nconst onMobileLogin = () => {\n  form.username = ''\n  form.password = ''\n  form.verify_code = ''\n  form.type = 'mobile'\n}\nconst onWechatLogin = () => {\n  form.type = 'wechat'\n}\nconst onGoogleLogin = () => {\n  ElMessage.warning(window.$t('feature_coming_soon'))\n}\nconst handleLoginWayChange = (type: 'mobile' | 'wechat' | 'password') => {\n  if (type === 'mobile') onMobileLogin()\n  if (type === 'wechat') onWechatLogin()\n  if (type === 'password') onPasswordLogin()\n}\nconst onAgree = () => {\n  ElMessage.warning(window.$t('feature_coming_soon'))\n}\nconst onPolicy = () => {\n  ElMessage.warning(window.$t('feature_coming_soon'))\n}\n\nonMounted(() => {\n  const agree_hook_el = form_ref.value.$el.querySelector('.agree-hook')\n  agree_hook_el.onclick = onAgree\n  const policy_hook_el = form_ref.value.$el.querySelector('.policy-hook')\n  policy_hook_el.onclick = onPolicy\n  eventBus.on('language-change', onLanguageChange)\n})\nonUnmounted(() => {\n  eventBus.off('language-change', onLanguageChange)\n})\ndefineExpose({\n  reset,\n})\n</script>\n\n<style>\n.dialog .el-dialog__header {\n  border: none !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/login/components/register-form.vue",
    "content": "<template>\n  <ElForm ref=\"form_ref\" class=\"relative max-w-[440px] w-full\" :model=\"form\" label-position=\"top\">\n    <h4 class=\"text-3xl text-[#1D1E1F] font-bold text-center mb-10\">\n      {{ $t('account_register') }}\n    </h4>\n\n    <!-- <ElFormItem>\n      <template #label>\n        <span class=\"text-[#1D1E1F]\">{{ $t('login.select_register_way') }}</span>\n      </template>\n      <ElRadioGroup v-model=\"form.username_type\" @change=\"onUsernameTypeChange\">\n        <ElRadio label=\"email\">\n          {{ $t('login.email_validate') }}\n        </ElRadio>\n        <ElRadio label=\"mobile\">\n          {{ $t('login.mobile_validate') }}\n        </ElRadio>\n      </ElRadioGroup>\n    </ElFormItem> -->\n\n    <ElFormItem\n      prop=\"username\"\n      class=\"relative\"\n      :rules=\"\n        generateInputRules({\n          message: `login.${form.username_type}_placeholder`,\n          validator: ['text', form.username_type],\n        })\n      \"\n    >\n      <template #label>\n        <span class=\"text-[#1D1E1F]\">{{ $t('account') }}</span>\n      </template>\n      <ElInput\n        v-model=\"form.username\"\n        style=\"--el-input-height: 44px\"\n        size=\"large\"\n        autocomplete=\"new-username\"\n        name=\"prevent_autofill_username\"\n        :placeholder=\"$t(`login.${form.username_type}_placeholder`)\"\n        clearable\n        @blur=\"checkAccount\"\n        @input=\"checkAccountValidation\"\n      />\n      <div v-if=\"account_exists\" class=\"absolute -bottom-5 left-0 text-red-500 text-xs\">\n        {{ $t(`login.${form.username_type}_exists`) }}\n        <ElButton type=\"primary\" link size=\"small\" class=\"!p-0 !bg-transparent -ml-1\" @click=\"onLogin\">\n          {{ $t('action_login') }}\n        </ElButton>\n      </div>\n    </ElFormItem>\n    <ElFormItem\n      class=\"relative\"\n      prop=\"verification_code\"\n      :rules=\"generateInputRules({ message: 'verification_code_placeholder' })\"\n    >\n      <template #label>\n        <span class=\"text-[#1D1E1F]\">{{ $t('verification_code') }}</span>\n      </template>\n      <VerificationCodeInput\n        ref=\"verification_code_input_ref\"\n        v-model=\"form.verification_code\"\n        :account=\"form.username\"\n        :account-type=\"form.username_type\"\n        :disabled=\"account_exists || !isAccountValid\"\n        :maxlength=\"form.username_type === 'mobile' ? 4 : 6\"\n      />\n    </ElFormItem>\n    <ElFormItem\n      class=\"relative\"\n      prop=\"password\"\n      :rules=\"[\n        ...generateInputRules({ message: 'login.password_placeholder', validator: ['password'] }),\n        {\n          min: 8,\n          max: 20,\n          message: $t('login.password_length'),\n          trigger: 'blur',\n        },\n      ]\"\n    >\n      <template #label>\n        <span class=\"text-[#1D1E1F]\">{{ $t('password') }}</span>\n      </template>\n      <ElInput\n        v-model=\"form.password\"\n        style=\"--el-input-height: 44px\"\n        size=\"large\"\n        type=\"password\"\n        show-password\n        clearable\n        autocomplete=\"new-password\"\n        name=\"prevent_autofill_password\"\n        :placeholder=\"$t('login.password_placeholder')\"\n      />\n    </ElFormItem>\n\n    <ElButton\n      type=\"primary\"\n      round\n      :loading=\"submitting\"\n      size=\"large\"\n      class=\"w-full mt-6 !h-10\"\n      :disabled=\"!form.username || !form.password || !form.verification_code\"\n      @click.stop=\"onRegister\"\n    >\n      {{ $t('action_register') }}\n    </ElButton>\n    <div class=\"w-full flex-center mt-4 text-sm text-[#9A9A9A]\">\n      {{ $t('login.has_account') }}\n      <ElButton type=\"primary\" text class=\"!p-0 !bg-transparent\" @click=\"onLogin\">\n        {{ $t('login.direct_login') }}\n      </ElButton>\n    </div>\n  </ElForm>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, reactive, ref, nextTick } from 'vue'\nimport { useEnterpriseStore, useUserStore } from '@/stores'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { authApi } from '@/api/modules/auth'\nimport eventBus from '@/utils/event-bus'\nimport { validateFormField } from '@/utils/form-validator'\n\ninterface FormType {\n  username: string\n  username_type: 'email' | 'mobile'\n  password: string\n  verification_code: string\n}\n\nconst emits = defineEmits<{\n  (e: 'login'): void\n}>()\n\nconst user_store = useUserStore()\nconst enterprise_store = useEnterpriseStore()\nconst form_ref = ref()\nconst verification_code_input_ref = ref()\nconst form = reactive<FormType>({\n  username_type: 'mobile',\n  username: '',\n  verification_code: '',\n  password: '',\n})\nconst submitting = ref(false)\nconst account_exists = ref(false)\nconst isAccountValid = ref(false)\n\n// 检查账号验证状态\nconst checkAccountValidation = async () => {\n  isAccountValid.value = await validateFormField(form_ref, 'username')\n}\n\nonMounted(() => {\n  const { access_token } = user_store.info\n  eventBus.on('language-change', onLanguageChange)\n})\nonUnmounted(() => {\n  eventBus.off('language-change', onLanguageChange)\n})\n\nconst onLanguageChange = () => {\n  if (form_ref.value) form_ref.value.clearValidate()\n  // form_ref.value.validate()\n}\nconst reset = () => {\n  form.username = ''\n  form.verification_code = ''\n  form.password = ''\n}\nconst onRegister = async () => {\n  let valid = await form_ref.value.validate()\n  if (!valid) return\n  submitting.value = true\n  await checkAccount()\n  if (account_exists.value) {\n    ElMessage.warning(window.$t('login.account_exists'))\n    return (submitting.value = false)\n  }\n  if (form.username_type === 'mobile') {\n    valid = await verification_code_input_ref.value.validateCode()\n    if (!valid) return (submitting.value = false)\n  }\n  await user_store\n    .login({\n      data: {\n        username: form.username,\n        password: form.password,\n        verify_code: form.verification_code,\n      },\n      hideError: false,\n    })\n    .catch(err => {\n      submitting.value = false\n      return Promise.reject(err)\n    })\n  const { list = [] } = await enterprise_store.loadListData({ data: { status: 0 } }).catch(err => {\n    submitting.value = false\n    return Promise.reject(err)\n  })\n  submitting.value = false\n  if (list.length > 0) return ElMessage.warning($t('login.apply_open_repetition'))\n  // ElMessage.success($t('action_save_success'))\n  ElMessage.success(window.$t('action_login_success'))\n  reset()\n  onLogin()\n}\nconst onLogin = () => {\n  emits('login')\n}\nconst checkAccount = async () => {\n  account_exists.value = false\n  const valid = await form_ref.value.validateField('username')\n  if (!valid) return\n  const { exists = false } = await authApi.checkAccount({ data: { account: form.username } })\n  account_exists.value = exists\n  return exists\n}\n\nconst onUsernameTypeChange = async () => {\n  form.username = ''\n  verification_code_input_ref.value.reset()\n  await nextTick()\n  form_ref.value.clearValidate('username')\n  form_ref.value.clearValidate('verification_code')\n}\n\ndefineExpose({\n  reset,\n})\n</script>\n\n<style scoped lang=\"scss\">\n::v-deep(.el-step__line) {\n  left: 70% !important;\n  right: -30% !important;\n  background-color: #e9ebee !important;\n}\n::v-deep(.el-step__title) {\n  margin-top: 8px;\n  font-weight: 400 !important;\n}\n::v-deep(.el-step__head.is-finish .el-step__line) {\n  background-color: #3664ef !important;\n  // background-color: #82A2F6 !important;\n}\n::v-deep(.el-step__head.is-process .el-step__line) {\n  // background-color: #3664EF !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/login/components/wechat.vue",
    "content": "<template>\n  <div v-loading=\"loading\" class=\"w-full\">\n    <div v-if=\"isInMobile\" :style=\"{ height, width }\" class=\"flex flex-col justify-center items-center\">\n      <div class=\"w-[220px] h-[220px] border relative rounded-lg overflow-hidden\">\n        <img :src=\"$getPublicPath('/images/login/wecom_login.png')\" alt=\"\" />\n        <div class=\"absolute inset-0 bg-white bg-opacity-90 flex justify-center items-center\">\n          <ElButton type=\"danger\" @click=\"handleLogin\"> {{ $t('login.immediate_login') }} </ElButton>\n        </div>\n      </div>\n      <p class=\"text-sm text-regular mt-3 text-opacity-60\">{{ $t('login.login_by_wechat') }}</p>\n    </div>\n    <iframe\n      v-else\n      ref=\"iframeRef\"\n      class=\"-translate-x-1.5 scale-[1] overflow-hidden\"\n      :style=\"{ height, width }\"\n      scrolling=\"no\"\n      :src=\"WECHAT_LOGIN_URL\"\n      frameborder=\"0\"\n      @load=\"handleLoad\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount } from 'vue';\nimport { useBasicLayout } from '@/hooks/useBasicLayout';\nimport { api_host } from '@/utils/config';\n\nconst props = withDefaults(\n  defineProps<{\n    width?: string\n    height?: string\n  }>(),\n  {\n    width: '100%',\n    height: '280px',\n  }\n)\n\nconst emits = defineEmits(['oauthSuccess'])\n\nconst { isInMobile } = useBasicLayout()\n\n// const WECHAT_LOGIN_URL = `https://work.wescrm.com/wechat_oauth_login.html?plain=1&height=280&appid=wxbe904d4182458106&suiteid=53aihub&api=${encodeURIComponent(`${api_host}/api/saas/wechat/redirect`)}&redirect_url=${encodeURIComponent(`${location.origin}/oauth_login.html`)}`\nconst WECHAT_LOGIN_URL = `https://work.wescrm.com/wechat_oauth_login.html?plain=1&height=280&appid=wxbe904d4182458106&suiteid=53aihub&api=${encodeURIComponent(`${api_host}/api/saas/wechat/redirect`)}&redirect_url=${encodeURIComponent(`${location.origin}/console/oauth_login.html`)}`\n\nconst iframeRef = ref()\nconst loading = ref(false)\n\nconst mobileWechatUrl = ref('')\n\nlet timer: any = null\n\nconst messageHandler = (res: any = {}) => {\n  const data = res.data || {}\n  const params = data.params || {}\n  const from = data.from || params.from || ''\n  const action = data.action || params.action || ''\n  const state = data.state || params.state || ''\n  const openid = data.openid || params.openid || ''\n  const nickname = data.nickname || params.nickname || ''\n  const unionid = data.unionid || params.unionid || ''\n  const access_token = data.access_token || params.access_token || ''\n  // if (!['53hub', '53aihub', 'wescrm'].includes(from))\n  //   return\n  clearInterval(timer)\n\n  if (openid || access_token) {\n    emits('oauthSuccess', { openid, nickname, unionid, access_token })\n  }\n}\n\nonMounted(() => {\n  if (isInMobile.value) {\n  } else {\n    loading.value = true\n    timer = setInterval(() => {\n      const contentWindow =\n        (iframeRef.value.contentWindow && iframeRef.value.contentWindow[0]) || iframeRef.value.contentWindow\n      if (contentWindow) {\n        let oauthLoginData = null\n        try {\n          oauthLoginData = contentWindow.sessionStorage.getItem('oauth_login_data')\n          oauthLoginData = JSON.parse(oauthLoginData)\n        } catch (error) {\n          oauthLoginData = null\n        }\n        if (oauthLoginData) messageHandler({ data: oauthLoginData })\n      }\n    }, 2000)\n  }\n  // window.addEventListener('message', messageHandler)\n})\nonBeforeUnmount(() => {\n  // window.removeEventListener('message', messageHandler)\n  clearInterval(timer)\n})\n\nconst handleLogin = () => {\n  // const redirect_url = QYY_HOST + `/v4/xbot/hubredirect?appid=${ process.env.VITE_GLOB_OFFICIALID }&state=wechat_redirect&redirecturl=${encodeURIComponent(location.origin)}`\n  const redirect_url =\n    'https://api.ibos.cn' +\n    `/v4/xbot/hubredirect?appid=${import.meta.env.VITE_GLOB_OFFICIALID}&state=wechat_redirect&redirecturl=${encodeURIComponent(`${location.origin}/?login_way=wechat_login`)}`\n  window.location.href = redirect_url\n}\n\nconst handleLoad = () => {\n  loading.value = false\n}\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/login/index.vue",
    "content": "<template>\n  <ElContainer class=\"w-screen h-screen bg-white\">\n    <ElAside\n      width=\"55%\"\n      class=\"relative bg-[url('/images/login/background.png')] bg-cover bg-center bg-no-repeat max-md:hidden\"\n    >\n      <!-- #ifndef KM -->\n      <img\n        class=\"w-[24%] object-contain absolute top-8 left-10\"\n        :src=\"$getRealPath({ url: '/images/logo_2.png' })\"\n        alt=\"\"\n      />\n      <img\n        class=\"w-[48%] object-contain absolute top-[25%] left-1/2 -translate-x-1/2\"\n        :src=\"$getRealPath({ url: '/images/login/title.png' })\"\n        alt=\"\"\n      />\n      <img\n        class=\"w-[70%] object-contain absolute top-[32%] left-1/2 -translate-x-1/2\"\n        :src=\"$getRealPath({ url: '/images/login/demo.png' })\"\n        alt=\"\"\n      />\n      <!-- #endif -->\n\n      <!-- #ifdef KM -->\n      <img\n        class=\"w-[24%] object-contain absolute top-8 left-10\"\n        :src=\"$getRealPath({ url: '/images/km-logo.png' })\"\n        alt=\"\"\n      />\n      <img\n        class=\"w-[68%] object-contain absolute top-[25%] left-1/2 -translate-x-1/2\"\n        :src=\"$getRealPath({ url: '/images/login/km-title.png' })\"\n        alt=\"\"\n      />\n      <img\n        class=\"w-[80%] object-contain absolute top-[32%] left-1/2 -translate-x-1/2\"\n        :src=\"$getRealPath({ url: '/images/login/km-demo.png' })\"\n        alt=\"\"\n      />\n      <!-- #endif -->\n    </ElAside>\n    <ElMain class=\"relative flex flex-col justify-center items-center pt-10 px-6 box-border overflow-auto\">\n      <LoginForm\n        v-if=\"form_type === FORM_TYPE.LOGIN\"\n        @forget=\"onForgetOpen\"\n        @register=\"onRegisterOpen\"\n        @apply=\"onApplyOpen\"\n        @list=\"onListOpen\"\n      />\n      <CreateNewEnterprise v-else-if=\"form_type === FORM_TYPE.APPLY\" @login=\"onLoginOpen\" @list=\"onListOpen\" />\n      <EnterpriseList v-else-if=\"form_type === FORM_TYPE.LIST\" @apply=\"onApplyOpen\" @back=\"handleBack\" />\n      <ForgetForm v-else-if=\"form_type === FORM_TYPE.FORGET\" @login=\"onLoginOpen\" @register=\"onRegisterOpen\" />\n      <RegisterForm v-else-if=\"form_type === FORM_TYPE.REGISTER\" @login=\"onLoginOpen\" />\n    </ElMain>\n  </ElContainer>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport LoginForm from './components/login-form.vue'\nimport ForgetForm from './components/forget-form.vue'\nimport RegisterForm from './components/register-form.vue'\nimport CreateNewEnterprise from './components/create-enterprise-form.vue'\nimport EnterpriseList from './components/enterprise-list.vue'\n\nconst FORM_TYPE = {\n  LOGIN: 'login',\n  APPLY: 'apply',\n  FORGET: 'forget',\n  REGISTER: 'register',\n  LIST: 'list',\n} as const\n\ntype FormType = (typeof FORM_TYPE)[keyof typeof FORM_TYPE]\n\nconst form_type = ref<FormType>(FORM_TYPE.LOGIN)\nconst prev_form_type = ref<FormType>(FORM_TYPE.LOGIN)\n\nconst onApplyOpen = async () => {\n  prev_form_type.value = form_type.value\n  form_type.value = FORM_TYPE.APPLY\n}\nconst onForgetOpen = () => {\n  prev_form_type.value = form_type.value\n  form_type.value = FORM_TYPE.FORGET\n}\nconst onLoginOpen = () => {\n  prev_form_type.value = form_type.value\n  form_type.value = FORM_TYPE.LOGIN\n}\nconst onRegisterOpen = () => {\n  prev_form_type.value = form_type.value\n  form_type.value = FORM_TYPE.REGISTER\n}\nconst onListOpen = () => {\n  prev_form_type.value = form_type.value\n  form_type.value = FORM_TYPE.LIST\n}\nconst handleBack = () => {\n  form_type.value = prev_form_type.value\n}\n\nonMounted(() => {\n  // KM切换企业-点击创建新企业时进入创建页面\n  if (localStorage.getItem('login_type') === 'apply') {\n    form_type.value = FORM_TYPE.APPLY\n  }\n})\n</script>\n\n<style lang=\"scss\" scoped></style>\n"
  },
  {
    "path": "web/console/src/views/model/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header title=\"模型设置\" />\n    <div\n      v-loading=\"isLoading\"\n      class=\"flex-1 flex flex-col bg-white py-6 px-10 mt-3 box-border max-h-[calc(100vh-100px)] overflow-auto\"\n    >\n      <div class=\"max-w-[600px]\">\n        <ElForm label-position=\"top\">\n          <ElFormItem label=\"逻辑推理\">\n            <ModelSelect v-model=\"logicValue\" :type=\"MODEL_USE_TYPE.REASONING\" />\n            <!-- <ElSelect v-model=\"formData.data1\" class=\"w-[600px] h-10\">\n              <ElOption></ElOption>\n            </ElSelect> -->\n          </ElFormItem>\n\n          <ElFormItem label=\"向量嵌入\">\n            <ModelSelect v-model=\"vectorValue\" :type=\"MODEL_USE_TYPE.EMBEDDING\" />\n          </ElFormItem>\n\n          <ElFormItem label=\"检索设置\">\n            <div class=\"flex-1\">\n              <el-radio\n                v-model=\"searchConfig.vector\"\n                :label=\"true\"\n                @change=\"handleSearchMethodChange('vector', $event)\"\n              >\n                向量检索\n              </el-radio>\n              <el-radio\n                v-model=\"searchConfig.fulltext\"\n                :label=\"true\"\n                @change=\"handleSearchMethodChange('fulltext', $event)\"\n              >\n                全文检索\n              </el-radio>\n              <el-radio\n                v-model=\"searchConfig.hybrid\"\n                :label=\"true\"\n                @change=\"handleSearchMethodChange('hybrid', $event)\"\n              >\n                混合检索\n              </el-radio>\n              <!-- </el-radio-group> -->\n              <div class=\"border rounded p-4 mt-4\">\n                <div v-if=\"searchConfig.hybrid\">\n                  <div class=\"text-[#182B50] text-sm\">混合检索</div>\n                  <div class=\"text-[#182b50] text-opacity-60 text-xs mt-1\">\n                    同时执行向量检索和全文检索，通过Rerank模型（必须启用）进行重新排序，匹配用户问题的最佳结果\n                  </div>\n                </div>\n                <div v-else-if=\"searchConfig.vector\">\n                  <div class=\"text-[#182B50] text-sm\">向量检索</div>\n                  <div class=\"text-[#182b50] text-opacity-60 text-xs mt-1\">通过向量检索查询内容最相似的语料切片</div>\n                </div>\n                <div v-else-if=\"searchConfig.fulltext\">\n                  <div class=\"text-[#182B50] text-sm\">全文检索</div>\n                  <div class=\"text-[#182b50] text-opacity-60 text-xs mt-1\">通过全文检索查询包含词汇的语料切片</div>\n                </div>\n                <div class=\"border-b border-b-[#EBEEF5] mt-4\" />\n\n                <div v-if=\"searchConfig.hybrid\" class=\"flex gap-4 mt-4\">\n                  <div\n                    :class=\"[\n                      searchConfig.rerank_model === RERANKING_MODE.WEIGHTED_SCORE\n                        ? 'border-[#2563EB] bg-[#F6F9FE] text-[#2563EB]'\n                        : 'text-[#182B50]',\n                    ]\"\n                    class=\"flex-1 h-10 rounded border flex-center gap-1 cursor-pointer text-opacity-80 text-sm\"\n                    @click=\"handleRerankMode(RERANKING_MODE.WEIGHTED_SCORE)\"\n                  >\n                    权重计算\n                    <el-tooltip\n                      content=\"通过调整分配的权重，重新排序策略确定是优先进行语义匹配还是关键字匹配。\"\n                      placement=\"top\"\n                    >\n                      <svg-icon name=\"help\" width=\"14px\" color=\"A4AAB9\" />\n                    </el-tooltip>\n                  </div>\n                  <div\n                    :class=\"[\n                      searchConfig.rerank_model === RERANKING_MODE.RERANKING_MODEL\n                        ? 'border-[#2563EB] bg-[#F6F9FE] text-[#2563EB]'\n                        : 'text-[#182B50]',\n                    ]\"\n                    class=\"flex-1 h-10 rounded border flex-center gap-1 cursor-pointer text-opacity-80 text-sm bg-[#F6F9FE]\"\n                    @click=\"handleRerankMode(RERANKING_MODE.RERANKING_MODEL)\"\n                  >\n                    模型计算\n                    <el-tooltip\n                      content=\"重排序模型将根据候选文档列表与用户问题语义匹配度进行重新排序，从而改进语义排序的结果\"\n                      placement=\"top\"\n                    >\n                      <svg-icon name=\"help\" width=\"14px\" color=\"A4AAB9\" />\n                    </el-tooltip>\n                  </div>\n                </div>\n                <div\n                  v-if=\"searchConfig.hybrid && searchConfig.rerank_model === RERANKING_MODE.WEIGHTED_SCORE\"\n                  class=\"mt-5 rounded border px-5 py-4\"\n                >\n                  <el-slider\n                    v-model=\"searchConfig.weights.vector_setting.vector_weight\"\n                    :min=\"0\"\n                    :step=\"0.1\"\n                    :max=\"1\"\n                    style=\"--el-slider-runway-bg-color: #7575ff\"\n                    @input=\"handleWeightChange\"\n                  />\n                  <div class=\"flex items-center justify-between\">\n                    <div class=\"text-sm text-[#2590F5]\">\n                      语义 {{ searchConfig.weights.vector_setting.vector_weight }}\n                    </div>\n                    <div class=\"text-sm text-[#7575FF]\">\n                      关键词 {{ searchConfig.weights.keyword_setting.keyword_weight }}\n                    </div>\n                  </div>\n                </div>\n\n                <div\n                  v-if=\"!searchConfig.hybrid || searchConfig.rerank_model === RERANKING_MODE.RERANKING_MODEL\"\n                  class=\"mt-4\"\n                >\n                  <div class=\"flex items-center text-[#182B50] text-opacity-80 text-sm\">\n                    Rerank模型\n                    <el-tooltip\n                      effect=\"dark\"\n                      content=\"重排序模型将根据候选文档列表与用户问题语义匹配度进行重新排序，从而改进语义排序的结果\"\n                      placement=\"top\"\n                    >\n                      <el-icon class=\"ml-2\">\n                        <QuestionFilled />\n                      </el-icon>\n                    </el-tooltip>\n\n                    <el-switch\n                      v-if=\"searchConfig.fulltext || searchConfig.vector\"\n                      v-model=\"searchConfig.reranking_enable\"\n                      class=\"ml-4\"\n                    />\n                  </div>\n                  <div v-if=\"searchConfig.reranking_enable || searchConfig.hybrid\" class=\"mt-4\">\n                    <ModelSelect v-model=\"rerankValue\" :type=\"MODEL_USE_TYPE.RERANKER\" />\n                  </div>\n                </div>\n                <div class=\"border-t border-dashed my-4\" />\n                <div class=\"flex items-center\">\n                  <div class=\"flex-none flex items-center w-[214px] text-sm text-[#182B50] text-opacity-80\">\n                    召回数量\n                    <el-tooltip\n                      effect=\"dark\"\n                      content=\"用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整分段数量。\"\n                      placement=\"top\"\n                    >\n                      <el-icon class=\"ml-2\">\n                        <QuestionFilled />\n                      </el-icon>\n                    </el-tooltip>\n                  </div>\n                  <div class=\"flex-1 flex items-center\">\n                    <el-slider v-model=\"searchConfig.top_k\" :min=\"1\" :step=\"1\" :max=\"10\" />\n                    <span class=\"flex-none w-9 text-right text-[#182B50] text-opacity-80 text-sm\">{{\n                      searchConfig.top_k\n                    }}</span>\n                  </div>\n                </div>\n                <div class=\"flex items-center mt-5\">\n                  <div class=\"flex-none flex items-center w-[214px] text-sm text-[#182B50] text-opacity-80\">\n                    分数阈值\n                    <el-tooltip effect=\"dark\" content=\"用于设置文本片段筛选的相似度阈值。\" placement=\"top\">\n                      <el-icon class=\"ml-2\">\n                        <QuestionFilled />\n                      </el-icon>\n                    </el-tooltip>\n\n                    <el-switch v-model=\"searchConfig.score_threshold_enabled\" class=\"ml-4\" />\n                  </div>\n                  <div class=\"flex-1 flex items-center\">\n                    <el-slider\n                      v-model=\"searchConfig.score_threshold\"\n                      :disabled=\"!searchConfig.score_threshold_enabled\"\n                      :min=\"0\"\n                      :step=\"0.01\"\n                      :format-tooltip=\"(value: number) => `${(value * 100).toFixed(0)}`\"\n                      :max=\"1\"\n                    />\n                    <span class=\"flex-none w-9 text-right text-[#182B50] text-opacity-80 text-sm\">{{\n                      (searchConfig.score_threshold * 100).toFixed(0)\n                    }}</span>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </ElFormItem>\n        </ElForm>\n\n        <ElButton v-debounce type=\"primary\" class=\"mt-8 w-24 h-9\" @click=\"handleSave\">保存</ElButton>\n      </div>\n    </div>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, computed } from 'vue'\nimport { QuestionFilled } from '@element-plus/icons-vue'\nimport ModelSelect from '@/components/Model/select.vue'\nimport { chunkSettingApi, ModelSetting } from '@/api/modules/chunk-setting'\nimport { deepCopy } from '@/utils'\nimport { MODEL_USE_TYPE } from '@/constants/platform/config'\n\nconst RERANKING_MODE = {\n  WEIGHTED_SCORE: 'weighted_score',\n  RERANKING_MODEL: 'reranking_model',\n}\n\ntype RerankingMode = (typeof RERANKING_MODE)[keyof typeof RERANKING_MODE]\n\nconst defaultSetting: ModelSetting = {\n  created_time: 1672502400,\n  eid: 1,\n  file_id: 1,\n  id: 1,\n  library_id: 1,\n  model_config: {\n    logic_reasoning: {\n      channel_id: 0,\n      model_name: 'string',\n    },\n    search_config: {\n      fulltext: false,\n      hybrid: false,\n      rerank_model: RERANKING_MODE.RERANKING_MODEL,\n      score_threshold: 0,\n      top_k: 0,\n      vector: true,\n      rerank_channel_id: 0,\n      rerank_model_name: '',\n      reranking_enable: false,\n      score_threshold_enabled: false,\n      weights: {\n        keyword_setting: {\n          keyword_weight: 0,\n        },\n        vector_setting: {\n          vector_weight: 0,\n        },\n      },\n    },\n    vector_embedding: {\n      channel_id: 0,\n      model_name: 'string',\n    },\n    version: 'string',\n  },\n  updated_time: 1672502400,\n}\n\nconst isLoading = ref(false)\nconst setting = ref<ModelSetting>(deepCopy(defaultSetting))\n\nconst logicValue = computed({\n  get: () => {\n    const { channel_id, model_name } = setting.value.model_config.logic_reasoning\n    return channel_id && model_name ? `${channel_id}_${model_name}` : ''\n  },\n  set: value => {\n    const [channel_id, model_name] = value.split('_')\n    setting.value.model_config.logic_reasoning.channel_id = Number(channel_id)\n    setting.value.model_config.logic_reasoning.model_name = model_name\n  },\n})\n\nconst vectorValue = computed({\n  get: () => {\n    const { channel_id, model_name } = setting.value.model_config.vector_embedding\n    return channel_id && model_name ? `${channel_id}_${model_name}` : ''\n  },\n  set: value => {\n    const [channel_id, model_name] = value.split('_')\n    setting.value.model_config.vector_embedding.channel_id = Number(channel_id)\n    setting.value.model_config.vector_embedding.model_name = model_name\n  },\n})\n\nconst rerankValue = computed({\n  get: () => {\n    const { rerank_channel_id, rerank_model_name } = setting.value.model_config.search_config\n    return rerank_channel_id && rerank_model_name ? `${rerank_channel_id}_${rerank_model_name}` : ''\n  },\n  set: value => {\n    const [channel_id, model_name] = value.split('_')\n    setting.value.model_config.search_config.rerank_channel_id = Number(channel_id)\n    setting.value.model_config.search_config.rerank_model_name = model_name\n  },\n})\n\nconst searchConfig = computed(() => {\n  return setting.value.model_config.search_config\n})\n\nconst handleSearchMethodChange = (method: keyof ModelSetting['model_config']['search_config'], event: boolean) => {\n  setting.value.model_config.search_config.hybrid = false\n  setting.value.model_config.search_config.vector = false\n  setting.value.model_config.search_config.fulltext = false\n  setting.value.model_config.search_config[method] = event\n}\n\nconst handleRerankMode = (mode: RerankingMode) => {\n  setting.value.model_config.search_config.rerank_model = mode\n}\n\nconst handleWeightChange = (value: number) => {\n  setting.value.model_config.search_config.score_threshold = (100 - value * 100) / 100\n}\n\nconst handleSave = async () => {\n  if (!logicValue.value) {\n    ElMessage.error(window.$t('message_status.logic_reasoning_required'))\n    return\n  }\n  if (!vectorValue.value) {\n    ElMessage.error(window.$t('message_status.vector_embedding_required'))\n    return\n  }\n\n  const model_config = setting.value.model_config\n  const showRerank =\n    (model_config.search_config.hybrid && model_config.search_config.rerank_model === RERANKING_MODE.RERANKING_MODEL) ||\n    (!model_config.search_config.hybrid && model_config.search_config.reranking_enable)\n  if (showRerank && !rerankValue.value) {\n    ElMessage.error(window.$t('message_status.rerank_model_required'))\n    return\n  }\n  await chunkSettingApi.modelConfig.update({\n    model_config: setting.value.model_config,\n  })\n  ElMessage.success(window.$t('message_status.save_success'))\n}\n\nconst loadConfig = async () => {\n  isLoading.value = true\n  const data = await chunkSettingApi.modelConfig.get()\n  const { search_config } = data.model_config\n  if (search_config.rerank_model === '') {\n    search_config.rerank_model = RERANKING_MODE.RERANKING_MODEL\n  }\n\n  // 判断是否只有一个搜索方法，如果不只一个，则默认设置为vector为true\n  const searchMethods = [search_config.fulltext, search_config.vector, search_config.hybrid]\n  const notOnlyOne = searchMethods.filter(Boolean).length !== 1\n  if (notOnlyOne) {\n    search_config.vector = false\n  }\n\n  setting.value = data\n  isLoading.value = false\n}\n\nonMounted(async () => {\n  loadConfig()\n})\n</script>\n\n<style scoped>\n:deep(.el-form-item__label) {\n  padding-right: 0 !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/navigation/components/nav-create-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t(editable ? 'action_edit' : 'action_create')\"\n    :close-on-click-modal=\"false\"\n    width=\"680px\"\n    append-to-body\n    @close=\"close\"\n  >\n    <ElForm ref=\"form_ref\" :model=\"form\" label-position=\"left\" label-width=\"78px\">\n      <ElFormItem :label=\"$t('module.nav_type')\">\n        <ElRadioGroup v-model=\"form.type\" size=\"large\">\n          <ElRadio v-for=\"item in nav_type_options\" :key=\"item.value\" :label=\"item.value\">{{ item.label }}</ElRadio>\n        </ElRadioGroup>\n      </ElFormItem>\n      <ElFormItem v-if=\"form.type !== NAVIGATION_TYPE.AGENT\" :label=\"$t('module.nav_name')\">\n        <ElSelect\n          v-model=\"form.nav_id\"\n          size=\"large\"\n          :placeholder=\"$t('module.nav_name_placeholder')\"\n          @change=\"handleNavChange\"\n        >\n          <ElOption v-for=\"item in nav_options\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\" />\n        </ElSelect>\n      </ElFormItem>\n      <ElFormItem v-else :label=\"$t('action_select')\">\n        <div class=\"w-full flex items-center gap-2\">\n          <ElSelect\n            v-model=\"form.agent_class_id\"\n            class=\"flex-none !w-[160px]\"\n            size=\"large\"\n            :placeholder=\"$t('module.nav_agent_class_placeholder')\"\n          >\n            <ElOption\n              v-for=\"item in nav_agent_class_options\"\n              :key=\"item.value\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n            />\n          </ElSelect>\n          <ElSelect\n            v-model=\"form.agent_id\"\n            class=\"flex-1\"\n            size=\"large\"\n            :placeholder=\"$t('module.nav_agent_placeholder')\"\n            @change=\"handleAgentChange\"\n          >\n            <ElOption v-for=\"item in nav_agent_options\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\" />\n          </ElSelect>\n        </div>\n      </ElFormItem>\n      <ElFormItem :label=\"$t('module.nav_url')\">\n        <ElInput v-model=\"form.url\" disabled size=\"large\" :placeholder=\"$t('form_select_placeholder')\" />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('module.nav_target')\">\n        <ElSelect\n          v-model=\"form.target\"\n          :disabled=\"form.type !== NAVIGATION_TYPE.AGENT\"\n          size=\"large\"\n          :placeholder=\"$t('module.nav_target_placeholder')\"\n        >\n          <ElOption v-for=\"item in nav_target_options\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\" />\n        </ElSelect>\n      </ElFormItem>\n    </ElForm>\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" @click=\"handleConfirm\">{{ $t('action_confirm') }}</ElButton>\n        <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref, computed } from 'vue'\n\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\nimport { useAgentStore } from '@/stores/modules/agent'\nimport {\n  NAVIGATION_TYPE,\n  NAVIGATION_TARGET,\n  NAVIGATION_TYPE_LABEL_MAP,\n  NAVIGATION_TARGET_LABEL_MAP,\n} from '@/constants/navigation'\n\nconst enterpriseStore = useEnterpriseStore()\nconst agentStore = useAgentStore()\n\n// Types\ntype NavigationFormData = {\n  type: string\n  nav_id: string\n  url: string\n  target: string\n  agent_class_id: string\n  agent_id: string\n  name: string\n}\n\n// Emits\nconst emits = defineEmits<{\n  confirm: [data: { data: NavigationFormData }]\n}>()\n\n// Refs\nconst visible = ref(false)\nconst editable = ref(false)\nconst form_ref = ref()\n\n// Form data\nconst form = reactive<NavigationFormData>({\n  type: NAVIGATION_TYPE.HOMEPAGE,\n  nav_id: '',\n  url: '',\n  target: NAVIGATION_TARGET.BLANK,\n  agent_class_id: '',\n  agent_id: '',\n  name: '',\n})\n\n// Options\nconst nav_type_options = [\n  { label: NAVIGATION_TYPE_LABEL_MAP.get(NAVIGATION_TYPE.HOMEPAGE), value: NAVIGATION_TYPE.HOMEPAGE },\n  { label: NAVIGATION_TYPE_LABEL_MAP.get(NAVIGATION_TYPE.AGENT), value: NAVIGATION_TYPE.AGENT },\n]\n\nconst nav_target_options = [\n  { label: NAVIGATION_TARGET_LABEL_MAP.get(NAVIGATION_TARGET.SELF), value: NAVIGATION_TARGET.SELF },\n  { label: NAVIGATION_TARGET_LABEL_MAP.get(NAVIGATION_TARGET.BLANK), value: NAVIGATION_TARGET.BLANK },\n]\n\n// Computed\nconst nav_options = computed(() => {\n  const { nav_list = [] } = enterpriseStore.enterpriseInfo\n  return nav_list.map(item => ({\n    label: item.name,\n    value: item.navigation_id,\n    url: item.jump_path,\n  }))\n})\n\nconst nav_agent_class_options = computed(() => {\n  const { agent_class_list = [] } = agentStore.agentInfo\n  return agent_class_list.map(item => ({\n    label: item.name,\n    value: item.agent_class_id,\n  }))\n})\n\nconst nav_agent_options = computed(() => {\n  const { agent_list = [] } = agentStore.agentInfo\n  return agent_list\n    .filter(item => item.agent_class_id === form.agent_class_id)\n    .map(item => ({\n      label: item.name,\n      value: item.agent_id,\n      url: `#/agent/${item.agent_id}`,\n    }))\n})\n\n// Methods\nconst reset = () => {\n  Object.assign(form, {\n    type: NAVIGATION_TYPE.HOMEPAGE,\n    nav_id: '',\n    url: '',\n    target: NAVIGATION_TARGET.BLANK,\n    agent_class_id: '',\n    agent_id: '',\n    name: '',\n  })\n}\n\nconst open = ({ data = {} } = {}) => {\n  visible.value = true\n  editable.value = !!data.navigation_id\n\n  Object.assign(form, {\n    type: data.type || NAVIGATION_TYPE.HOMEPAGE,\n    nav_id: data.nav_id || '',\n    url: data.url || '',\n    target: data.target || NAVIGATION_TARGET.BLANK,\n    agent_class_id: data.agent_class_id || '',\n    agent_id: data.agent_id || '',\n    name: data.name || '',\n  })\n}\n\nconst close = () => {\n  visible.value = false\n  reset()\n}\n\nconst handleNavChange = () => {\n  const selectedNav = nav_options.value.find(item => item.value === form.nav_id)\n  if (selectedNav) {\n    form.url = selectedNav.url\n    form.name = selectedNav.label\n  }\n}\n\nconst handleAgentChange = () => {\n  const selectedAgent = nav_agent_options.value.find(item => item.value === form.agent_id)\n  if (selectedAgent) {\n    form.url = selectedAgent.url\n    form.name = selectedAgent.label\n  }\n}\n\nconst handleConfirm = async () => {\n  try {\n    const valid = await form_ref.value.validate()\n    if (!valid) return\n\n    ElMessage.success(window.$t('action_save_success'))\n    emits('confirm', { data: form })\n    close()\n  } catch (error) {\n    console.error('Form validation failed:', error)\n  }\n}\n\ndefineExpose({\n  open,\n  close,\n  reset,\n})\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/views/navigation/components/nav-create-drawer.vue",
    "content": "<template>\n  <ElDrawer\n    v-model=\"visible\"\n    size=\"700px\"\n    :title=\"$t(isEditable ? 'action_edit' : 'action_create')\"\n    :close-on-click-modal=\"false\"\n    append-to-body\n    destroy-on-close\n    @close=\"close\"\n  >\n    <ElForm ref=\"formRef\" class=\"px-4\" :model=\"formData\" label-position=\"top\">\n      <h1 class=\"font-semibold text-[#1D1E1F] mb-6\">{{ $t('basic_info') }}</h1>\n      <ElFormItem :label=\"$t('type')\">\n        <ElRadioGroup v-model=\"formData.type\" size=\"large\" @change=\"handleTypeChange\">\n          <ElRadio\n            v-for=\"value in [NAVIGATION_TYPE.SYSTEM, NAVIGATION_TYPE.EXTERNAL, NAVIGATION_TYPE.CUSTOM]\"\n            :key=\"value\"\n            :value=\"value\"\n            :disabled=\"formData.type === NAVIGATION_TYPE.SYSTEM || value === NAVIGATION_TYPE.SYSTEM || isEditable\"\n          >\n            {{ $t(NAVIGATION_TYPE_LABEL_MAP.get(value) || '') }}\n          </ElRadio>\n        </ElRadioGroup>\n      </ElFormItem>\n      <ElFormItem :label=\"$t('icon')\" prop=\"icon\" :rules=\"[{ required: true, message: $t('form_select_placeholder') }]\">\n        <div class=\"size-12 border border-gray-200 rounded flex items-center justify-center\">\n          <ElImage class=\"size-6 overflow-hidden\" :src=\"formData.icon\" fit=\"contain\" />\n        </div>\n        <ElPopover\n          v-if=\"formData.type !== NAVIGATION_TYPE.SYSTEM\"\n          ref=\"iconPopoverRef\"\n          placement=\"bottom\"\n          :width=\"228\"\n          trigger=\"click\"\n          :show-arrow=\"false\"\n          popper-class=\"icon-popover\"\n        >\n          <template #reference>\n            <ElButton type=\"text\" class=\"ml-4\">{{ $t('action_modify') }}</ElButton>\n          </template>\n          <template #default>\n            <div class=\"w-[228px] flex flex-wrap items-center\">\n              <ElButton\n                v-for=\"item in iconList\"\n                :key=\"item\"\n                class=\"size-10 border-none icon-btn\"\n                @click=\"selectIcon(item)\"\n              >\n                <ElImage class=\"size-6 overflow-hidden\" :src=\"item\" fit=\"contain\" />\n              </ElButton>\n            </div>\n          </template>\n        </ElPopover>\n      </ElFormItem>\n      <ElFormItem :label=\"$t('name')\" prop=\"name\" :rules=\"[{ required: true, message: $t('form_input_placeholder') }]\">\n        <ElInput\n          v-model=\"formData.name\"\n          size=\"large\"\n          :maxlength=\"20\"\n          show-word-limit\n          :placeholder=\"$t('form_input_placeholder')\"\n        />\n      </ElFormItem>\n      <ElFormItem\n        class=\"is-required\"\n        :label=\"$t('jump_path')\"\n        prop=\"jump_path\"\n        :rules=\"[\n          ...generateInputRules({\n            message: 'form_input_placeholder',\n            validator: ['text', formData.type === NAVIGATION_TYPE.EXTERNAL ? 'url' : 'path'],\n          }),\n          {\n            validator: (rule, value, callback) => {\n              if (\n                formData.type == NAVIGATION_TYPE.CUSTOM &&\n                navigationList.some(item => item.jump_path === value && item.navigation_id !== originData.navigation_id)\n              ) {\n                return callback(new Error($t('form_path_same_tip')))\n              }\n              callback()\n            },\n            trigger: 'blur',\n          },\n        ]\"\n      >\n        <ElInput\n          v-if=\"formData.type === NAVIGATION_TYPE.SYSTEM\"\n          :model-value=\"domainUrl + formData.jump_path\"\n          size=\"large\"\n          :placeholder=\"$t('form_input_placeholder')\"\n          disabled\n        />\n        <ElInput\n          v-else-if=\"formData.type === NAVIGATION_TYPE.EXTERNAL\"\n          v-model=\"formData.jump_path\"\n          size=\"large\"\n          :placeholder=\"$t('form_input_placeholder')\"\n        />\n        <ElInput v-else v-model=\"formData.jump_path\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\">\n          <template #prepend>{{ domainUrl }}</template>\n        </ElInput>\n      </ElFormItem>\n      <ElFormItem :label=\"$t('open_method')\" prop=\"target\">\n        <ElRadioGroup v-model=\"formData.target\" size=\"large\">\n          <ElRadio v-for=\"value in [NAVIGATION_TARGET.SELF, NAVIGATION_TARGET.BLANK]\" :key=\"value\" :value=\"value\">\n            {{ $t(NAVIGATION_TARGET_LABEL_MAP.get(value) || '') }}\n          </ElRadio>\n        </ElRadioGroup>\n      </ElFormItem>\n      <ElDivider />\n      <h1 class=\"font-semibold text-[#1D1E1F] mb-6\">{{ $t('module.nav_seo_setting') }}</h1>\n      <ElFormItem :label=\"$t('module.nav_seo_setting_title')\">\n        <ElInput\n          v-model=\"formData.seo_title\"\n          maxlength=\"60\"\n          show-word-limit\n          size=\"large\"\n          :placeholder=\"$t('form_input_placeholder')\"\n        />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('module.nav_seo_setting_keywords')\">\n        <ElInput v-model=\"formData.seo_keywords\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        <div class=\"mt-2 text-xs text-[#999]\">{{ $t('module.nav_seo_setting_keywords_tip') }}</div>\n      </ElFormItem>\n      <ElFormItem :label=\"$t('module.nav_seo_setting_description')\">\n        <ElInput\n          v-model=\"formData.seo_description\"\n          type=\"textarea\"\n          :rows=\"5\"\n          maxlength=\"100\"\n          show-word-limit\n          size=\"large\"\n          resize=\"none\"\n          :placeholder=\"$t('form_input_placeholder')\"\n        />\n      </ElFormItem>\n    </ElForm>\n    <template #footer>\n      <div class=\"flex border-t pt-5 justify-end w-full\">\n        <ElButton size=\"large\" @click=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n        <ElButton type=\"primary\" size=\"large\" :loading=\"isSubmitting\" @click=\"handleSave\">\n          {{ $t('action_save') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDrawer>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref, computed, nextTick } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { navigationApi } from '@/api/modules/navigation'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { useEnterpriseStore } from '@/stores'\nimport { useEnv } from '@/hooks/useEnv'\nimport { img_host } from '@/utils/config'\n\nimport {\n  NAVIGATION_TYPE,\n  NAVIGATION_TARGET,\n  NAVIGATION_TYPE_LABEL_MAP,\n  NAVIGATION_TARGET_LABEL_MAP,\n  type NavigationType,\n  type NavigationTarget,\n} from '@/constants/navigation'\nimport type { NavigationItem, CreateNavigationData, UpdateNavigationData } from '@/api/modules/navigation/types'\n\n// 类型定义\ntype NavigationFormData = {\n  type: number\n  name: string\n  icon: string\n  jump_path: string\n  target: number\n  seo_title: string\n  seo_keywords: string\n  seo_description: string\n}\n\n// 事件定义\nconst emits = defineEmits<{\n  success: [data: { data: NavigationFormData }]\n}>()\n\n// 状态管理\nconst enterpriseStore = useEnterpriseStore()\nconst router = useRouter()\nconst { isOpLocalEnv } = useEnv()\n\n// 组件引用\nconst formRef = ref()\n\n// 响应式数据\nconst visible = ref(false)\nconst isSubmitting = ref(false)\nconst originData = ref<Partial<NavigationItem>>({})\nconst navigationList = ref<NavigationItem[]>([])\n\n// 表单数据\nconst formData = reactive<NavigationFormData>({\n  type: NAVIGATION_TYPE.EXTERNAL,\n  name: '',\n  icon: '',\n  jump_path: '',\n  target: NAVIGATION_TARGET.SELF,\n  seo_title: '',\n  seo_keywords: '',\n  seo_description: '',\n})\n\n// 计算属性\nconst enterpriseInfo = computed(() => enterpriseStore.info)\nconst domainUrl = computed(() => `${isOpLocalEnv.value ? window.location.origin : enterpriseInfo.value.domain}/#`)\nconst isEditable = computed(() => !!originData.value.navigation_id)\n\n// 工具方法\nconst resetForm = () => {\n  Object.assign(formData, {\n    type: NAVIGATION_TYPE.EXTERNAL,\n    name: '',\n    icon: '',\n    jump_path: '',\n    target: NAVIGATION_TARGET.SELF,\n    seo_title: '',\n    seo_keywords: '',\n    seo_description: '',\n  })\n}\n\nconst iconPopoverRef = ref()\nconst iconList: string[] = []\nfor (let i = 1; i <= 12; i++) {\n  iconList.push(`${img_host}/navigation/icon${i}.png`)\n}\n\nconst selectIcon = (icon: string) => {\n  formData.icon = icon\n  iconPopoverRef.value.hide()\n}\n\n// 公共方法\nconst open = async ({\n  data = {} as Partial<NavigationItem>,\n  navigationList: _navigationList = [],\n}: {\n  data?: Partial<NavigationItem>\n  navigationList?: NavigationItem[]\n} = {}) => {\n  resetForm()\n  await nextTick()\n\n  const config = (data.config as any) || {}\n  formData.type = +(data.type || NAVIGATION_TYPE.EXTERNAL)\n  formData.name = data.name || ''\n  formData.icon = (data as any).icon || `${img_host}/navigation/icon5.png`\n  formData.jump_path = data.jump_path || ''\n  formData.target = (data.target || config.target || NAVIGATION_TARGET.SELF) as any\n  formData.seo_title = config.seo_title || ''\n  formData.seo_keywords = config.seo_keywords || ''\n  formData.seo_description = config.seo_description || ''\n  originData.value = data\n  navigationList.value = _navigationList\n  visible.value = true\n}\n\nconst close = () => {\n  visible.value = false\n}\n\n// 事件处理方法\nconst handleTypeChange = () => {\n  formData.jump_path = ''\n  formRef.value?.clearValidate('jump_path')\n}\n\nconst handleSave = async () => {\n  const valid = await formRef.value?.validate()\n  if (!valid) return\n\n  isSubmitting.value = true\n\n  try {\n    const saveData: CreateNavigationData | UpdateNavigationData = {\n      ...(originData.value.navigation_id ? { navigation_id: String(originData.value.navigation_id) } : {}),\n      type: formData.type as NavigationType,\n      name: formData.name,\n      jump_path: formData.jump_path,\n      sort: originData.value.sort || 9999 - navigationList.value.length,\n      config: {\n        target: formData.target as NavigationTarget,\n        seo_title: formData.seo_title,\n        seo_keywords: formData.seo_keywords.replace(/，/g, ','),\n        seo_description: formData.seo_description,\n      },\n      icon: formData.icon,\n    }\n\n    const result = await navigationApi.save(saveData)\n    ElMessage.success(window.$t('action_save_success'))\n    emits('success', { data: formData })\n    close()\n\n    // 如果是新建的自定义导航，跳转到页面编辑\n    if (!isEditable.value && formData.type === NAVIGATION_TYPE.CUSTOM) {\n      const navigationId = (result as any)?.navigation_id || originData.value.navigation_id\n      if (navigationId) {\n        router.push({\n          name: 'NavigationWebSetting',\n          params: {\n            navigation_id: String(navigationId),\n          },\n        })\n      }\n    }\n  } catch (error) {\n    console.error('保存导航失败:', error)\n  } finally {\n    isSubmitting.value = false\n  }\n}\n\n// 暴露方法\ndefineExpose({\n  open,\n  close,\n  reset: resetForm,\n})\n</script>\n\n<style scoped lang=\"scss\">\n.icon-btn {\n  margin: 0 12px 12px 0;\n\n  --el-button-hover-bg-color: rgb(243 244 245 / 100%);\n}\n</style>\n\n<style lang=\"scss\">\n.icon-popover {\n  margin-left: 36px;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/navigation/components/pc-navigation-pane.vue",
    "content": "<template>\n  <div\n    class=\"w-full py-3 px-6 box-border rounded flex flex-row items-center bg-white\"\n    style=\"box-shadow: 0 5px 15px rgb(22 23 26 / 10%)\"\n  >\n    <img\n      class=\"flex-none w-10 h-10 object-contain\"\n      src=\"https://img.js.design/assets/img/61889010bb6d5d11bc62c2b8.png#029311e2b191cdf96801016808d17a46\"\n      alt=\"\"\n    />\n    <ElTabs class=\"flex-1 w-0 ml-8\">\n      <ElTabPane v-for=\"item in nav_active_list\" :key=\"item.name\" :label=\"item.name\" :name=\"item.name\" />\n    </ElTabs>\n    <ElButton class=\"flex-none w-[128px] h-[36px] ml-8 border-none\" type=\"primary\" plain @click.stop=\"handleCreate\">\n      添加({{ nav_active_list.length }}/{{ nav_list.length }})\n    </ElButton>\n  </div>\n\n  <div class=\"mt-5 rounded py-9 px-10 bg-white\">\n    <ElTable\n      ref=\"table_ref\"\n      class=\"w-full rounded\"\n      :data=\"nav_list\"\n      :header-cell-style=\"{ background: '#F6F7F8', height: '60px' }\"\n      :cell-style=\"{ height: '66px' }\"\n      height=\"calc(100vh - 296px)\"\n    >\n      <ElTableColumn width=\"40\">\n        <div class=\"pr-3 sort-icon cursor-move\">\n          <svg-icon name=\"drag\" width=\"24px\" height=\"32px\" color=\"#a1a5af\" />\n        </div>\n      </ElTableColumn>\n      <ElTableColumn prop=\"name\" :label=\"$t('module.nav_name')\" min-width=\"120\" show-overflow-tooltip />\n      <ElTableColumn :label=\"$t('module.nav_type')\" show-overflow-tooltip min-width=\"100\">\n        <template #default=\"{ row = {} }\">\n          {{ NAVIGATION_TYPE_LABEL_MAP.get(row.type) }}\n        </template>\n      </ElTableColumn>\n      <ElTableColumn :label=\"$t('module.nav_target')\" show-overflow-tooltip min-width=\"100\">\n        <template #default=\"{ row = {} }\">\n          {{ NAVIGATION_TARGET_LABEL_MAP.get(row.target) }}\n        </template>\n      </ElTableColumn>\n      <ElTableColumn :label=\"$t('module.nav_visible')\" width=\"120\">\n        <template #default=\"scope\">\n          <ElSwitch v-model=\"scope.row.visible\" size=\"default\" />\n        </template>\n      </ElTableColumn>\n      <ElTableColumn :label=\"$t('module.nav_operation')\" align=\"right\" width=\"180\" fixed=\"right\">\n        <template #default=\"{ row = {}, $index }\">\n          <ElButton\n            class=\"h-auto !p-0 leading-none text-[#576D9C]\"\n            type=\"text\"\n            size=\"default\"\n            @click.stop=\"handleCreate({ data: row })\"\n          >\n            {{ $t('action_edit') }}\n          </ElButton>\n          <ElButton\n            class=\"h-auto !p-0 leading-none text-[#576D9C]\"\n            type=\"text\"\n            size=\"default\"\n            @click.stop=\"handlePreview({ data: row })\"\n          >\n            {{ $t('action_preview') }}\n          </ElButton>\n          <ElButton\n            class=\"h-auto !p-0 leading-none text-[#576D9C]\"\n            type=\"text\"\n            size=\"default\"\n            @click.stop=\"handleSeoSetting({ data: row })\"\n          >\n            {{ $t('module.nav_operation_seo') }}\n          </ElButton>\n          <ElButton\n            class=\"h-auto !p-0 leading-none text-[#576D9C]\"\n            type=\"text\"\n            size=\"default\"\n            @click.stop=\"handleDelete({ data: row, index: $index })\"\n          >\n            {{ $t('action_delete') }}\n          </ElButton>\n        </template>\n      </ElTableColumn>\n    </ElTable>\n  </div>\n\n  <SeoSettingDialog ref=\"seo_setting_dialog_ref\" />\n  <NavCreateDialog ref=\"nav_create_dialog_ref\" @confirm=\"handleCreateConfirm\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onUnmounted, watch, nextTick } from 'vue'\nimport Sortable from 'sortablejs'\nimport SeoSettingDialog from './seo-setting-dialog.vue'\nimport NavCreateDialog from './nav-create-dialog.vue'\n\nimport { NAVIGATION_TYPE_LABEL_MAP, NAVIGATION_TARGET_LABEL_MAP, NAVIGATION_INIT_DATA } from '@/constants/navigation'\n\n// Types\ntype SortableEvent = {\n  target: HTMLElement\n  oldIndex: number\n  newIndex: number\n  from: HTMLElement\n  to: HTMLElement\n}\n\nconst table_ref = ref()\nconst seo_setting_dialog_ref = ref()\nconst nav_create_dialog_ref = ref()\nconst nav_list = ref(JSON.parse(JSON.stringify(NAVIGATION_INIT_DATA)))\n\nconst nav_active_list = computed(() => {\n  return nav_list.value.filter(item => item.visible)\n})\n\nconst handlePreview = ({ data = {} } = {}) => {\n  if (data.url) window.open(data.url, '_blank')\n}\nconst handleSeoSetting = ({ data = {} } = {}) => {\n  seo_setting_dialog_ref.value.open({ data })\n}\nconst handleDelete = async ({ index = -1 } = {}) => {\n  await ElMessageBox.confirm(window.$t('module.action_delete_confirm'), window.$t('action_delete_tip'))\n  if (index > 0) nav_list.value.splice(index, 1)\n  ElMessage.success(window.$t('action_delete_success'))\n}\nconst handleCreate = ({ data = {} } = {}) => {\n  nav_create_dialog_ref.value.open({ data })\n}\nconst handleCreateConfirm = async ({ data = {} } = {}) => {\n  if (!data.id) {\n    data.id = nav_list.value.length + 1\n    const list = nav_list.value\n    list.push(data)\n    nav_list.value = []\n    await nextTick()\n    nav_list.value = list\n  }\n}\nlet _sortable_instance: Sortable | null = null\nconst initSortable = () => {\n  if (!table_ref.value || !table_ref.value.$el || !nav_list.value.length) return\n  const sortable_el = table_ref.value.$el.querySelector('.el-table__body tbody')\n  _sortable_instance = Sortable.create(sortable_el, {\n    onStart: (event: SortableEvent) => {\n      const { target, oldIndex } = event\n      target.children[oldIndex].style.background = '#ECF5FF'\n    },\n    onEnd: async (event: SortableEvent) => {\n      const { target, newIndex: target_index, oldIndex: origin_index } = event\n      if (target.children && target.children[target_index])\n        target.children[target_index].style.background = 'transparent'\n      if (target_index === origin_index) return\n      const list = nav_list.value\n      const origin_data = list.splice(origin_index, 1)[0]\n      list.splice(target_index, 0, origin_data)\n      nav_list.value = []\n      await nextTick()\n      nav_list.value = [...list].map((item, index) => ({ ...item, sort: index }))\n      ElMessage.success(window.$t('action_sort_success'))\n    },\n  })\n}\nconst destroySortable = () => {\n  if (_sortable_instance) {\n    _sortable_instance.destroy()\n    _sortable_instance = null\n  }\n}\n\nonUnmounted(() => {\n  destroySortable()\n})\n\nwatch(\n  () => nav_list.value,\n  async () => {\n    destroySortable()\n    await nextTick()\n    initSortable()\n  },\n  { deep: true, immediate: true }\n)\n</script>\n\n<style scoped lang=\"scss\">\n::v-deep(.el-tabs__content),\n::v-deep(.el-tabs__nav-wrap::after) {\n  display: none;\n}\n\n::v-deep(.el-tabs__header) {\n  margin-bottom: 0;\n}\n\n::v-deep(.el-tabs__item) {\n  pointer-events: none;\n  font-size: 16px;\n  font-weight: 400;\n  color: rgb(29 30 31 / 100%);\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/navigation/components/seo-setting-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('module.nav_seo_setting')\"\n    :close-on-click-modal=\"false\"\n    width=\"720px\"\n    append-to-body\n    @close=\"close\"\n  >\n    <ElForm ref=\"formRef\" :model=\"form\" label-position=\"left\" label-width=\"128px\">\n      <ElFormItem :label=\"$t('module.nav_seo_setting_title')\">\n        <ElInput\n          v-model=\"form.title\"\n          maxlength=\"60\"\n          show-word-limit\n          size=\"large\"\n          :placeholder=\"$t('form_input_placeholder')\"\n        />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('module.nav_seo_setting_keywords')\">\n        <ElInput v-model=\"form.keywords\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n        <div class=\"mt-2 text-xs text-[#999]\">{{ $t('module.nav_seo_setting_keywords_tip') }}</div>\n      </ElFormItem>\n      <ElFormItem :label=\"$t('module.nav_seo_setting_description')\">\n        <ElInput\n          v-model=\"form.description\"\n          type=\"textarea\"\n          :rows=\"5\"\n          size=\"large\"\n          resize=\"none\"\n          :placeholder=\"$t('form_input_placeholder')\"\n        />\n      </ElFormItem>\n    </ElForm>\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" @click=\"handleConfirm\">{{ $t('action_confirm') }}</ElButton>\n        <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">{{\n          $t('action_cancel')\n        }}</ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive } from 'vue'\n\n// 类型定义\ntype SeoFormData = {\n  title: string\n  keywords: string\n  description: string\n}\n\ntype NavigationData = {\n  seo_setting_info?: SeoFormData\n}\n\n// 组件引用\nconst formRef = ref()\n\n// 响应式数据\nconst visible = ref(false)\nconst form = reactive<SeoFormData>({\n  title: '',\n  keywords: '',\n  description: '',\n})\nconst originData = ref<NavigationData>({})\n\n// 默认SEO数据\nconst defaultSeoData = {\n  title: '快速成一个产品研发创意的agent',\n  keywords: '53AI，产品创意生成，智能体',\n  description: '没有产品研发创意？使用最新的AI agent 助你快速完成产品创意工作',\n}\n\n// 工具方法\nconst resetForm = () => {\n  Object.assign(form, {\n    title: '',\n    keywords: '',\n    description: '',\n  })\n}\n\n// 公共方法\nconst open = ({ data = {} }: { data?: NavigationData } = {}) => {\n  const seoSettingInfo = data.seo_setting_info || {}\n  form.title = seoSettingInfo.title || defaultSeoData.title\n  form.keywords = seoSettingInfo.keywords || defaultSeoData.keywords\n  form.description = seoSettingInfo.description || defaultSeoData.description\n  originData.value = data\n  visible.value = true\n}\n\nconst close = () => {\n  visible.value = false\n  resetForm()\n}\n\n// 事件处理方法\nconst handleConfirm = () => {\n  formRef.value?.validate((valid: boolean) => {\n    if (!valid) return\n\n    // 确保seo_setting_info对象存在\n    if (!originData.value.seo_setting_info) {\n      originData.value.seo_setting_info = {}\n    }\n\n    // 更新SEO设置信息\n    originData.value.seo_setting_info.title = form.title\n    originData.value.seo_setting_info.keywords = form.keywords\n    originData.value.seo_setting_info.description = form.description\n\n    ElMessage.success(window.$t('action_save_success'))\n    close()\n  })\n}\n\n// 暴露方法\ndefineExpose({\n  open,\n  close,\n  reset: resetForm,\n})\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/views/navigation/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t(route.meta?.title as string)\" />\n    <div class=\"flex-1 flex flex-col bg-white px-10 py-8 mt-3 box-border max-h-[calc(100vh-100px)] overflow-auto\">\n      <!-- 搜索区域 -->\n      <div class=\"flex items-center justify-between\">\n        <ElInput\n          v-model=\"searchKeyword\"\n          style=\"max-width: 268px\"\n          size=\"large\"\n          clearable\n          :suffix-icon=\"Search\"\n          :placeholder=\"$t('navigation.search_placeholder')\"\n          @change=\"handleSearch\"\n        />\n      </div>\n\n      <!-- 表格区域 -->\n      <div v-loading=\"isLoading\" class=\"flex-1 overflow-y-auto bg-white rounded-lg mt-4\">\n        <TablePlus\n          v-model:data=\"navigationList\"\n          :sortable=\"!searchKeyword\"\n          :total=\"totalCount\"\n          style=\"width: 100%\"\n          header-row-class-name=\"rounded overflow-hidden\"\n          header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n          :pagination=\"false\"\n          @page-size-change=\"handlePageSizeChange\"\n          @page-current-change=\"handlePageChange\"\n          @sortable-change=\"handleSortChange\"\n        >\n          <!-- 名称列 -->\n          <ElTableColumn :label=\"$t('name')\" min-width=\"160\" prop=\"name\" show-overflow-tooltip>\n            <template #default=\"scope\">\n              <div class=\"flex items-center\">\n                <ElImage\n                  v-if=\"scope?.row?.icon\"\n                  class=\"size-[18px] mr-2 overflow-hidden\"\n                  :src=\"scope?.row?.icon\"\n                  fit=\"contain\"\n                />\n                {{ scope?.row?.name }}\n              </div>\n            </template>\n          </ElTableColumn>\n\n          <!-- 类型列 -->\n          <ElTableColumn :label=\"$t('type')\" width=\"100\" prop=\"type\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.type_label }\">\n                {{ $t(row.type_label) || '--' }}\n              </span>\n            </template>\n          </ElTableColumn>\n\n          <!-- 跳转路径列 -->\n          <ElTableColumn :label=\"$t('jump_path')\" min-width=\"160\" prop=\"jump_path\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.jump_path }\">\n                {{ row.jump_path || '--' }}\n              </span>\n            </template>\n          </ElTableColumn>\n\n          <!-- 打开方式列 -->\n          <ElTableColumn :label=\"$t('open_method')\" width=\"100\" prop=\"target\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.target_label }\">\n                {{ $t(row.target_label) || '--' }}\n              </span>\n            </template>\n          </ElTableColumn>\n\n          <!-- 状态开关列 -->\n          <ElTableColumn :label=\"$t('navigation_is_open')\" width=\"140\" prop=\"status\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <ElSwitch v-model=\"row.status\" :active-value=\"1\" :inactive-value=\"0\" @change=\"handleStatusChange(row)\" />\n            </template>\n          </ElTableColumn>\n\n          <!-- 操作列 -->\n          <ElTableColumn :label=\"$t('operation')\" width=\"100\" fixed=\"right\" align=\"right\">\n            <template #default=\"{ row }\">\n              <div class=\"flex items-center justify-end gap-4\">\n                <!-- 页面编辑按钮 -->\n                <ElTooltip v-if=\"row.type === NAVIGATION_TYPE.CUSTOM\" placement=\"top\" :content=\"$t('page_edit')\">\n                  <span>\n                    <SvgIcon\n                      class=\"cursor-pointer\"\n                      name=\"editor\"\n                      color=\"#5A6D9E\"\n                      width=\"16\"\n                      @click=\"handlePageEdit(row)\"\n                    />\n                  </span>\n                </ElTooltip>\n\n                <!-- 设置按钮 -->\n                <ElTooltip placement=\"top\" :content=\"$t('action_setting')\">\n                  <span>\n                    <SvgIcon\n                      class=\"cursor-pointer\"\n                      name=\"web-setting\"\n                      color=\"#5A6D9E\"\n                      width=\"16\"\n                      @click=\"handleEdit(row)\"\n                    />\n                  </span>\n                </ElTooltip>\n\n                <!-- 删除按钮 -->\n                <ElTooltip placement=\"top\" :content=\"$t('action_delete')\">\n                  <ElIcon\n                    :class=\"[\n                      row.type === NAVIGATION_TYPE.SYSTEM\n                        ? 'text-[#BDC5D8] cursor-not-allowed'\n                        : 'text-[#5A6D9E] cursor-pointer',\n                    ]\"\n                    @click=\"handleDelete(row)\"\n                  >\n                    <Delete />\n                  </ElIcon>\n                </ElTooltip>\n              </div>\n            </template>\n          </ElTableColumn>\n        </TablePlus>\n\n        <!-- 添加按钮 -->\n        <ElButton\n          v-if=\"!searchKeyword\"\n          class=\"mt-4 !border-none\"\n          type=\"primary\"\n          size=\"large\"\n          plain\n          :disabled=\"isAddDisabled\"\n          @click=\"handleAdd()\"\n        >\n          + {{ $t('action_add') }}（{{ navigationList.length }}/{{ MAX_ITEMS }}）\n        </ElButton>\n      </div>\n    </div>\n\n    <NavCreateDrawer ref=\"navCreateRef\" @success=\"loadNavigationData\" />\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { Search, Delete } from '@element-plus/icons-vue'\nimport { ref, computed, onMounted, onUnmounted } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\nimport NavCreateDrawer from './components/nav-create-drawer.vue'\nimport eventBus from '@/utils/event-bus'\nimport { navigationApi } from '@/api/modules/navigation/index'\nimport { transformNavigationList } from '@/api/modules/navigation/transform'\nimport { NAVIGATION_TYPE, NAVIGATION_CONSTANTS } from '@/constants/navigation'\nimport type {\n  NavigationItem,\n  RawNavigationItem,\n  NavigationListResponse,\n  UpdateNavigationSortData,\n} from '@/api/modules/navigation/types'\nimport { sleep } from '@/utils'\n\n// 常量定义\nconst MAX_ITEMS = NAVIGATION_CONSTANTS.MAX_ITEMS\n\n// 路由和组件引用\nconst route = useRoute()\nconst router = useRouter()\nconst navCreateRef = ref()\n\n// 响应式数据\nconst navigationList = ref<NavigationItem[]>([])\nconst totalCount = ref(0)\nconst isLoading = ref(false)\nconst searchKeyword = ref('')\n\n// 分页参数\nconst paginationParams = ref({\n  offset: 0,\n  limit: 10,\n})\n\n// 计算属性\nconst isAddDisabled = computed(() => navigationList.value.length >= MAX_ITEMS)\n\n// 数据加载方法\nconst loadNavigationData = async () => {\n  isLoading.value = true\n  try {\n    const params = {\n      ...paginationParams.value,\n      keyword: searchKeyword.value,\n    }\n\n    const rawData = await navigationApi.list(params)\n\n    // 转换数据\n    const transformedList = transformNavigationList(rawData as RawNavigationItem[])\n    const response: NavigationListResponse = {\n      total: transformedList.length,\n      list: transformedList.filter(item => item.name.includes(searchKeyword.value)),\n    }\n\n    // 如果没有数据，初始化默认数据\n    if (!response.list.length) {\n      await navigationApi.init()\n      await sleep(1.5)\n      await loadNavigationData()\n      return\n    }\n\n    totalCount.value = response.total\n    navigationList.value = response.list\n  } catch (error) {\n    console.error('加载导航数据失败:', error)\n  } finally {\n    isLoading.value = false\n  }\n}\n\n// 搜索处理\nconst handleSearch = () => {\n  paginationParams.value.offset = 0\n  loadNavigationData()\n}\n\n// 分页处理\nconst handlePageSizeChange = (size: number) => {\n  paginationParams.value.limit = size\n  paginationParams.value.offset = 0\n  loadNavigationData()\n}\n\nconst handlePageChange = (page: number) => {\n  paginationParams.value.offset = (page - 1) * paginationParams.value.limit\n  loadNavigationData()\n}\n\n// 状态切换\nconst handleStatusChange = async (row: NavigationItem) => {\n  try {\n    await navigationApi.updateStatus({\n      navigation_id: row.navigation_id,\n      status: row.status ? 1 : 0,\n    })\n    ElMessage.success(window.$t(row.status ? 'action_enable_success' : 'action_disable_success'))\n  } catch (error) {\n    console.error('更新状态失败:', error)\n    // 恢复原状态\n    row.status = row.status ? 0 : 1\n  }\n}\n\n// 添加导航\nconst handleAdd = (data: NavigationItem | null = null) => {\n  navCreateRef.value.open({\n    data: data || {},\n    navigationList: navigationList.value,\n  })\n}\n\n// 编辑导航\nconst handleEdit = (data: NavigationItem) => {\n  handleAdd(data)\n}\n\n// 页面编辑\nconst handlePageEdit = (row: NavigationItem) => {\n  router.push({\n    name: 'NavigationWebSetting',\n    params: {\n      navigation_id: row.navigation_id,\n    },\n  })\n}\n\n// 删除导航\nconst handleDelete = async (row: NavigationItem) => {\n  if (row.type === NAVIGATION_TYPE.SYSTEM) return\n\n  try {\n    await ElMessageBox.confirm(window.$t('navigation.delete_confirm'), window.$t('tip'))\n    await navigationApi.delete(row.navigation_id)\n    ElMessage.success(window.$t('action_delete_success'))\n    loadNavigationData()\n  } catch (error) {\n    if (error !== 'cancel') {\n      console.error('删除导航失败:', error)\n    }\n  }\n}\n\n// 排序处理\nconst handleSortChange = async ({ data = [] }: { data: NavigationItem[] }) => {\n  try {\n    const sortList: UpdateNavigationSortData = data.map((item, index) => ({\n      id: item.navigation_id,\n      sort: 9999 - index,\n    }))\n    await navigationApi.updateSort(sortList)\n    ElMessage.success(window.$t('action_sort_success'))\n  } catch (error) {\n    console.error('更新排序失败:', error)\n  }\n}\n\n// 生命周期\nonMounted(() => {\n  loadNavigationData()\n  eventBus.on('user-login-success', loadNavigationData)\n})\n\nonUnmounted(() => {\n  eventBus.off('user-login-success', loadNavigationData)\n})\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/views/navigation/web-setting.vue",
    "content": "<template>\n  <Layout class=\"fixed top-0 left-0 w-screen h-screen z-[9] bg-[#F4F6FA]\">\n    <!-- 头部工具栏 -->\n    <header\n      class=\"w-full px-[56px] h-[70px] flex items-center gap-3 shadow box-border bg-white sticky top-0 left-0 right-0 z-[9]\"\n    >\n      <SvgIcon name=\"web-edit\" style=\"zoom: 1.2\" color=\"#858585\" width=\"24\" />\n      <div class=\"flex-1 flex flex-col gap-0.5\">\n        <span>{{ navigationDetail.name || $t(route.meta?.title as string) }}</span>\n        <span class=\"text-xs text-[#9A9BA0]\">\n          {{ $t('last_edit') }}: {{ formatLastEditTime(navigationDetail.content_update_time) }}\n        </span>\n      </div>\n      <ElButton class=\"!ml-0 !min-w-[96px] !h-9\" type=\"info\" plain size=\"large\" @click=\"handleCancel\">\n        {{ $t('action_cancel') }}\n      </ElButton>\n      <ElButton class=\"!ml-0 !min-w-[96px] !h-9\" type=\"primary\" size=\"large\" :loading=\"isSaving\" @click=\"handleSave\">\n        {{ $t('action_save') }}\n      </ElButton>\n    </header>\n\n    <!-- 主要内容区域 -->\n    <div\n      v-loading=\"isLoading\"\n      class=\"flex-1 flex flex-col w-5/6 max-w-[1084px] rounded box-border my-5 mx-auto bg-white\"\n    >\n      <!-- 导航栏预览 -->\n      <div class=\"w-full h-[76px] px-8 box-border flex items-center gap-4 border-b\">\n        <ElImage :src=\"enterpriseInfo.logo\" class=\"flex-none size-10 rounded\" fit=\"cover\" />\n        <h2 class=\"flex-none text-[#1D1E1F] font-semibold\">\n          {{ enterpriseInfo.display_name || '--' }}\n        </h2>\n        <ElMenu class=\"flex-1 w-0 overflow-hidden ml-2 !border-none\" mode=\"horizontal\">\n          <ElMenuItem\n            v-for=\"item in navigationList\"\n            :key=\"item.navigation_id\"\n            class=\"!cursor-auto !opacity-100\"\n            :index=\"item.jump_path\"\n            disabled\n          >\n            <span class=\"!text-base !text-[#1D1E1F]\">{{ item.name }}</span>\n          </ElMenuItem>\n        </ElMenu>\n      </div>\n\n      <!-- 编辑器区域 -->\n      <div class=\"flex-1 w-full p-2 box-border\">\n        <UEditor ref=\"ueditorRef\" />\n      </div>\n\n      <!-- 版权信息 -->\n      <div\n        class=\"w-full h-[64px] px-[56px] box-border flex items-center bg-[#22252E] rounded-sm text-sm text-[#989A9D]\"\n      >\n        {{ enterpriseInfo.copyright }}\n      </div>\n    </div>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted, computed } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\nimport UEditor from '@/components/UEditor/index.vue'\nimport eventBus from '@/utils/event-bus'\nimport { navigationApi } from '@/api/modules/navigation/index'\nimport { useEnterpriseStore } from '@/stores'\nimport type { NavigationItem } from '@/api/modules/navigation/types'\n\n// 类型定义\ntype NavigationDetail = {\n  name: string\n  updated_time: string\n  content_update_time: string\n  content?: {\n    html_content?: string\n    updated_time?: string | number\n  }\n}\n\ntype NavigationDetailResponse = NavigationItem & {\n  updated_time: string\n  content_update_time: string\n  content?: {\n    html_content?: string\n    updated_time?: string | number\n  }\n}\n\n// 路由和状态管理\nconst route = useRoute()\nconst router = useRouter()\nconst enterpriseStore = useEnterpriseStore()\n\n// 组件引用\nconst ueditorRef = ref()\n\n// 响应式数据\nconst navigationDetail = ref<NavigationDetail>({} as NavigationDetail)\nconst navigationList = ref<NavigationItem[]>([])\nconst isLoading = ref(false)\nconst isSaving = ref(false)\n\n// 计算属性\nconst enterpriseInfo = computed(() => enterpriseStore.info)\n\n// 工具方法\nconst formatLastEditTime = (timestamp?: string | number) => {\n  if (!timestamp) return ''\n  return new Date(timestamp).toLocaleString().replace(/\\//g, '-').slice(0, 15)\n}\n\n// 数据加载方法\nconst loadNavigationDetail = async () => {\n  const { navigation_id } = route.params\n  isLoading.value = true\n\n  try {\n    const data = (await navigationApi.detail(Number(navigation_id))) as NavigationDetailResponse\n\n    // 格式化时间\n    data.updated_time = formatLastEditTime(data.updated_time)\n    const contentData = data.content || {}\n    data.content_update_time = formatLastEditTime(contentData.updated_time)\n\n    // 设置编辑器内容\n    ueditorRef.value?.setValue(contentData.html_content || '')\n    navigationDetail.value = data as NavigationDetail\n  } catch (error) {\n    console.error('加载导航详情失败:', error)\n  } finally {\n    isLoading.value = false\n  }\n}\n\nconst loadNavigationList = async () => {\n  try {\n    const { list = [] } = await navigationApi.list({})\n    navigationList.value = list\n  } catch (error) {\n    console.error('加载导航列表失败:', error)\n  }\n}\n\nconst handleCancel = () => {\n  router.replace({ name: 'Navigation' })\n}\n// 事件处理方法\nconst handleSave = async () => {\n  try {\n    const html = await ueditorRef.value?.getHtml()\n    if (!html) return\n\n    isSaving.value = true\n\n    await navigationApi.saveContent({\n      navigation_id: +route.params.navigation_id,\n      html_content: html,\n    })\n\n    ElMessage.success(window.$t('action_save_success'))\n    handleCancel()\n  } catch (error) {\n    console.error('保存内容失败:', error)\n  } finally {\n    isSaving.value = false\n  }\n}\n\n// 生命周期\nonMounted(async () => {\n  isLoading.value = true\n  try {\n    await Promise.all([loadNavigationList(), loadNavigationDetail()])\n  } finally {\n    isLoading.value = false\n  }\n  eventBus.on('user-login-success', loadNavigationDetail)\n})\n\nonUnmounted(() => {\n  eventBus.off('user-login-success', loadNavigationDetail)\n})\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/views/order/components/order-add-dialog.vue",
    "content": "<template>\n\t<ElDialog v-model=\"visible\" :title=\"$t(editable ? 'action_edit' : 'action_add')\" :close-on-click-modal=\"false\"\n\t\twidth=\"700px\" destroy-on-close append-to-body @close=\"close\">\n\t\t<ElForm ref=\"form_ref\" v-loading=\"loading\" :model=\"form\" label-position=\"top\">\n\t\t\t<ElFormItem :label=\"$t('user')\" prop=\"user_id\" :rules=\"[{ validator: (rule, value, callback) => {\n\tif (!value) return callback(new Error($t('form_select_placeholder') + $t('user')))\n\t\t\t\tcallback()\n\t\t\t}, trigger: 'blur' }]\">\n\t\t\t\t<ElSelect v-if=\"editable\" v-model=\"origin_data.user_id\" filterable clearable :collapse-tags=\"false\" collapse-tags-tooltip size=\"large\"\n\t\t\t\t\t:placeholder=\"$t('form_select_placeholder') + $t('user')\" :disabled=\"true\">\n\t\t\t\t\t<ElOption :label=\"origin_data.nickname\" :value=\"origin_data.user_id\" />\n\t\t\t\t</ElSelect>\n\t\t\t\t<ElSelect v-else v-model=\"form.user_id\" filterable clearable :collapse-tags=\"false\" collapse-tags-tooltip size=\"large\"\n\t\t\t\t\t:placeholder=\"$t('form_select_placeholder') + $t('user')\">\n\t\t\t\t\t<ElOption v-for=\"opt in user_options\" :key=\"opt.value\" :label=\"opt.label\" :value=\"opt.value\" />\n\t\t\t\t</ElSelect>\n\t\t\t</ElFormItem>\n\t\t\t<ElFormItem :label=\"$t('order_subscription_version')\">\n\t\t\t\t<GroupSelect v-model=\"form.subscription_id\" default-first type=\"radio\" @change=\"computedAmount\" />\n\t\t\t</ElFormItem>\n\t\t\t<ElFormItem :label=\"$t('order_subscription_duration')\">\n\t\t\t\t<ElInputNumber v-model=\"form.subscription_duration\" :min=\"1\" :controls=\"false\" class=\"!w-[108px] mr-4\"\n\t\t\t\t\tsize=\"large\" :placeholder=\"$t('form_input_placeholder')\" @change=\"computedAmount\" />\n\t\t\t\t<ElRadioGroup v-model=\"form.subscription_unit\" size=\"large\" @change=\"computedAmount\">\n\t\t\t\t\t<ElRadio v-for=\"opt in subscription_unit_options\" :key=\"opt.value\" :label=\"opt.value\">{{ opt.label }}\n\t\t\t\t\t</ElRadio>\n\t\t\t\t</ElRadioGroup>\n\t\t\t</ElFormItem>\n\t\t\t<ElFormItem :label=\"$t('order_amount')\">\n\t\t\t\t<div class=\"border border-[#DCDFE6] border-r-0 h-10 px-5 rounded-s flex-center\">{{ active_time_option.currency }}</div>\n\t\t\t\t<ElInputNumber v-model=\"form.amount\" class=\"flex-1 amount-input\" :min=\"0\" :precision=\"2\" :controls=\"false\" size=\"large\"\n\t\t\t\t\t:placeholder=\"$t('form_input_placeholder')\">\n\t\t\t\t</ElInputNumber>\n\t\t\t</ElFormItem>\n\t\t</ElForm>\n\t\t<template #footer>\n\t\t\t<div class=\"py-4 flex items-center justify-center\">\n\t\t\t\t<ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"handleConfirm\">{{ $t('action_confirm') }}</ElButton>\n\t\t\t\t<ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">{{ $t('action_cancel')\n\t\t\t\t\t}}</ElButton>\n\t\t\t</div>\n\t\t</template>\n\t</ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, onMounted, computed } from 'vue'\nimport GroupSelect from '@/components/GroupSelect/index.vue'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport { orderApi } from '@/api/modules/order'\nimport { subscriptionApi } from '@/api/modules/subscription'\n\nconst emits = defineEmits(['success'])\n\nconst userStore = useUserStore()\n\nconst form_ref = ref()\nconst visible = ref(false)\nconst editable = ref(false)\nconst loading = ref(false)\nconst submitting = ref(false)\nconst form = reactive({\n\tuser_id: '',\n\tsubscription_id: '',\n\tsubscription_duration: 1,\n\tsubscription_unit: 'month',\n\tamount: null,\n})\nconst origin_data = ref({})\nconst user_options = ref([])\nconst subscription_unit_options = ref([\n\t{\n\t\tvalue: 'month',\n\t\tlabel: window.$t('month')\n\t},\n\t{\n\t\tvalue: 'year',\n\t\tlabel: window.$t('year')\n\t},\n])\n\nconst active_subscription_option = computed(() => {\n\tconst option = subscription_options.value.find(item => item.group_id === form.subscription_id) || {}\n\tconst { month_info = {}, year_info = {} } = option\n\treturn option\n})\nconst active_time_option = computed(() => {\n\tconst { month_info = {}, year_info = {} } = active_subscription_option.value\n\tconst option = form.subscription_unit === 'month' ? month_info : year_info\n\treturn option\n})\nconst active_user_option = computed(() => {\n\tconst option = user_options.value.find(item => item.value === form.user_id) || {}\n\treturn option\n})\n\nconst textValidator = ({ rule, value, callback, message } = {}) => {\n\tvalue = (value || '').trim()\n\tif (!value) return callback(new Error(window.$t(message)))\n\tcallback()\n}\n\nconst open = async ({ data = {} } = {}) => {\n\teditable.value = !!data.id\n\torigin_data.value = data\n\tvisible.value = true\n\tloading.value = true\n\n\tawait Promise.all([fetchUserData(), fetchSubscriptionData()]).catch(() => {\n\t\tloading.value = false\n\t})\n\n\tif (editable.value) {\n\t\t// const { data: detailData = {} } = await orderApi.detail({ id: data.id }).catch(() => {\n\t\t// \tloading.value = false\n\t\t// })\n\t\tconst detailData = data\n\t\tform.user_id = detailData.user_id || ''\n\t\tform.subscription_id = detailData.service_id || ''\n\t\tform.subscription_duration = Number(detailData.duration) || 1\n\t\tform.subscription_unit = detailData.time_unit || 'month'\n\t\tform.amount = detailData.amount ? Number((Number(detailData.amount) / 100).toFixed(2)) : null\n\t\torigin_data.value = detailData\n\t}\n\tloading.value = false\n}\nconst close = () => {\n\tvisible.value = false\n\treset()\n}\nconst reset = () => {\n\tform.user_id = ''\n\tform.subscription_id = ''\n\tform.subscription_duration = 1\n\tform.subscription_unit = 'month'\n\tform.amount = null\n}\nconst handleConfirm = async () => {\n\tconst valid = await form_ref.value.validate()\n\tif (!valid) return\n\tconst data = {\n\t\tid: origin_data.value.id,\n\t\tuser_id: form.user_id,\n\t\tnickname: active_user_option.value.label,\n\t\tsubscription_id: form.subscription_id,\n\t\tsubscription_name: active_subscription_option.value.group_name,\n\t\ttime_unit: form.subscription_unit,\n\t\tduration: form.subscription_duration,\n\t\tcurrency: active_time_option.value.currency,\n\t\tamount: Number(form.amount * 100)\n\t}\n\tif (editable.value) {\n\t\tdata.user_id = origin_data.value.user_id\n\t\tdata.nickname = origin_data.value.nickname\n\t}\n\tsubmitting.value = true\n\tawait orderApi.save(data).finally(() => {\n\t\tsubmitting.value = false\n\t})\n\tElMessage.success(window.$t('action_save_success'))\n\tclose()\n\temits('success')\n}\nconst fetchUserData = async () => {\n\tif (user_options.value.length) return Promise.resolve()\n\tconst { list = [] } = await userStore.loadListData({ data: { limit: 1000 } })\n\tuser_options.value = list.map(item => {\n\t\treturn {\n\t\t\tvalue: +item.user_id || 0,\n\t\t\tlabel: item.nickname || ''\n\t\t}\n\t})\n}\nconst subscription_options = ref([])\nconst fetchSubscriptionData = async () => {\n\tif (subscription_options.value.length) return Promise.resolve()\n\tsubscription_options.value = await subscriptionApi.list({ params: { limit: 1000 } })\n}\nconst computedAmount = () => {\n\tconst { amount = 0 } = active_time_option.value\n\tform.amount = Number(Number(amount) * form.subscription_duration)\n}\n\nonMounted(() => {\n})\n\ndefineExpose({\n\topen,\n\tclose,\n\treset\n})\n</script>\n\n<style scoped lang=\"scss\">\n::v-deep(.el-input-number .el-input__inner) {\n\ttext-align: left;\n}\n::v-deep(.amount-unit-select .el-select__wrapper) {\n\tborder-right-width: 0 !important;\n\tborder-top-right-radius: 0 !important;\n\tborder-bottom-right-radius: 0 !important;\n}\n\n::v-deep(.amount-input .el-input__wrapper) {\n\tborder-top-left-radius: 0 !important;\n\tborder-bottom-left-radius: 0 !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/order/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.operation_order')\" />\n    <div class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border max-h-[calc(100vh-100px)] overflow-auto\">\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-3\">\n          <ElSelect v-model=\"filter_form.status\" class=\"flex-none max-w-[180px]\" size=\"large\" @change=\"refresh\">\n            <template #prefix> {{ $t('order_status') }}： </template>\n            <ElOption v-for=\"opt in order_status_options\" :key=\"opt.value\" :label=\"$t(opt.label)\" :value=\"opt.value\" />\n          </ElSelect>\n\n          <ElSelect v-model=\"filter_form.pay_type\" class=\"flex-none max-w-[180px]\" size=\"large\" @change=\"refresh\">\n            <template #prefix> {{ $t('order_payment_type') }}： </template>\n            <ElOption\n              v-for=\"opt in order_payment_type_options\"\n              :key=\"opt.value\"\n              :label=\"$t(opt.label)\"\n              :value=\"opt.value\"\n            />\n          </ElSelect>\n          <div class=\"flex-none\">\n            <FilterDateRange\n              v-model=\"filter_form.date\"\n              size=\"large\"\n              :value-format=\"(date: Date) => date.getTime()\"\n              @change=\"refresh\"\n            />\n          </div>\n        </div>\n        <div class=\"flex-center gap-3\">\n          <ElInput\n            v-model=\"filter_form.keyword\"\n            style=\"max-width: 268px\"\n            size=\"large\"\n            clearable\n            :suffix-icon=\"Search\"\n            :placeholder=\"$t('module.operation_order_search_placeholder')\"\n            @change=\"refresh\"\n          />\n          <ElButton class=\"min-w-[96px]\" type=\"primary\" size=\"large\" @click=\"handleAdd\">\n            {{ $t('action_add') }}\n          </ElButton>\n        </div>\n      </div>\n\n      <div v-loading=\"tableLoading\" class=\"flex-1 overflow-y-auto bg-white rounded-lg mt-4\">\n        <TablePlus\n          :data=\"tableData\"\n          :total=\"tableTotal\"\n          style=\"width: 100%\"\n          header-row-class-name=\"rounded overflow-hidden\"\n          header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n          @page-size-change=\"handleSizeChange\"\n          @page-current-change=\"handleCurrentChange\"\n        >\n          <ElTableColumn :label=\"$t('order_id')\" min-width=\"160\" prop=\"order_id\" show-overflow-tooltip />\n          <ElTableColumn\n            :label=\"$t('order_subscription')\"\n            min-width=\"140\"\n            prop=\"subscription_name\"\n            show-overflow-tooltip\n          >\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.subscription_name }\">\n                {{ row.subscription_name }}*{{ row.duration }}{{ $t(row.time_unit) }}\n              </span>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('order_amount')\" min-width=\"140\" prop=\"amount\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.amount }\">\n                {{ row.currency || 'CNY' }}&nbsp;{{ ((+row.amount || 0) / 100).toFixed(2) }}\n              </span>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('order_status')\" min-width=\"120\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <div class=\"flex items-center gap-1\">\n                <ElTag\n                  class=\"!border-none\"\n                  :type=\"\n                    row.status == ORDER_STATUS.CANCELLED\n                      ? 'info'\n                      : row.status == ORDER_STATUS.NOT_CONFIRM\n                        ? 'danger'\n                        : row.status == ORDER_STATUS.PENDING\n                          ? 'primary'\n                          : row.status == ORDER_STATUS.EXPIRED\n                            ? 'warning'\n                            : 'success'\n                  \"\n                >\n                  {{ $t(ORDER_STATUS_LABEL_MAP.get(row.status) || '') }}\n                </ElTag>\n              </div>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('order_create_time')\" width=\"160\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.created_time }\">\n                {{ row.created_time.slice(0, 16) || '--' }}\n              </span>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('user')\" width=\"160\" prop=\"nickname\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.nickname }\">\n                {{ row.nickname || '--' }}\n              </span>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('order_payment_type')\" prop=\"pay_type\" width=\"120\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              {{ getPaymentLabel(row.pay_type) }}\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('operation')\" width=\"170\" fixed=\"right\" align=\"right\">\n            <template #default=\"{ row }\">\n              <template v-if=\"PAYMENT_TYPE.MANUAL === row.pay_type && row.status === ORDER_STATUS.NOT_CONFIRM\">\n                <ElButton class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click.stop=\"handleConfirm({ data: row })\">\n                  {{ $t('action_confirm_payment') }}\n                </ElButton>\n                <ElButton class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click.stop=\"handleAdd({ data: row })\">\n                  {{ $t('action_edit') }}\n                </ElButton>\n                <ElButton class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click.stop=\"handleDelete({ data: row })\">\n                  {{ $t('action_delete') }}\n                </ElButton>\n              </template>\n              <span v-else class=\"text-[#9B9B9B]\"> -- </span>\n            </template>\n          </ElTableColumn>\n        </TablePlus>\n      </div>\n    </div>\n  </Layout>\n  <OrderAddDialog ref=\"add_ref\" @success=\"loadList\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { Search } from '@element-plus/icons-vue'\nimport { onMounted, reactive, ref } from 'vue'\nimport FilterDateRange from '@/components/Filter/date-range.vue'\nimport OrderAddDialog from './components/order-add-dialog.vue'\nimport { ORDER_STATUS, ORDER_STATUS_LABEL_MAP } from '@/constants/order'\n\nimport { orderApi } from '@/api'\nimport { PAYMENT_TYPE, PAYMENT_TYPE_LABEL_MAP } from '@/constants/payment'\nimport type { PaymentType } from '@/constants/payment'\n\nconst add_ref = ref()\nconst filter_form = reactive({\n  status: ORDER_STATUS.ALL,\n  pay_type: PAYMENT_TYPE.ALL,\n  keyword: '',\n  offset: 0,\n  limit: 10,\n  date: [],\n})\nconst order_status_options = [\n  ORDER_STATUS.ALL,\n  ORDER_STATUS.NOT_CONFIRM,\n  ORDER_STATUS.PENDING,\n  ORDER_STATUS.PAID,\n  ORDER_STATUS.EXPIRED,\n  ORDER_STATUS.CANCELLED,\n].map(value => ({\n  value,\n  label: ORDER_STATUS_LABEL_MAP.get(value) || ORDER_STATUS_LABEL_MAP.get(ORDER_STATUS.ALL),\n}))\n/**\n * 安全获取支付方式标签\n */\nconst getPaymentLabel = (payType: PaymentType) => {\n  const label = PAYMENT_TYPE_LABEL_MAP.get(payType)\n  return label || ''\n}\n\nconst order_payment_type_options = [\n  PAYMENT_TYPE.ALL,\n  PAYMENT_TYPE.WECHAT,\n  PAYMENT_TYPE.ALIPAY,\n  PAYMENT_TYPE.MANUAL,\n].map(value => ({\n  value,\n  label: getPaymentLabel(value),\n}))\nconst tableData = ref([])\nconst tableTotal = ref(0)\nconst tableLoading = ref(false)\n\nconst loadList = async () => {\n  tableLoading.value = true\n  const { total = 0, list = [] } = await orderApi\n    .list({\n      params: {\n        ...filter_form,\n        start_time: filter_form.date[0],\n        end_time: filter_form.date[1],\n      },\n    })\n    .finally(() => {\n      tableLoading.value = false\n    })\n  tableTotal.value = total\n  tableData.value = list\n}\n\nconst refresh = () => {\n  filter_form.offset = 0\n  loadList()\n}\nconst handleSizeChange = (size: number) => {\n  filter_form.limit = size\n  refresh()\n}\nconst handleCurrentChange = (page: number) => {\n  filter_form.offset = (page - 1) * filter_form.limit\n  loadList()\n}\n\nconst handleAdd = ({ data = {} } = {}) => {\n  add_ref.value.open({ data })\n}\nconst handleDelete = async ({ data = {} } = {}) => {\n  await ElMessageBox.confirm(window.$t('module.operation_order_delete_confirm'), window.$t('tip'))\n  await orderApi.delete_order({ id: data.id })\n  ElMessage.success(window.$t('action_delete_success'))\n  loadList()\n}\nconst handleConfirm = async ({ data = {} } = {}) => {\n  await ElMessageBox.confirm(window.$t('order.confirm_tip'), window.$t('tip'))\n  await orderApi.confirm_order({ id: data.id })\n  ElMessage.success(window.$t('action_confirm_success'))\n  data.status = ORDER_STATUS.PAID\n}\n\nonMounted(async () => {\n  refresh()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/parse/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.parse')\" />\n    <div\n      v-loading=\"isLoading\"\n      class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border max-h-[calc(100vh-100px)] overflow-auto\"\n    >\n      <!-- 文档解析配置卡片 -->\n      <!-- 表格头部 -->\n\n      <!-- 表格内容 -->\n      <div class=\"px-5 py-4 border rounded-md\">\n        <el-table :data=\"tableData\" header-cell-class-name=\"!bg-[#F5F6F7] text-[#999999]\" cell-class-name=\"py-3\">\n          <el-table-column prop=\"type\" label=\"文档类型\" width=\"200\">\n            <template #default=\"{ row }\">\n              <div class=\"flex items-center gap-2\">\n                <img :src=\"$getRealPath({ url: `/images/parse/${row.ext}.png` })\" class=\"size-5\" />\n                <span class=\"text-sm text-[#4F5052]\">{{ row.name }}</span>\n              </div>\n            </template>\n          </el-table-column>\n\n          <el-table-column prop=\"extensions\" label=\"说明\">\n            <template #default=\"{ row }\">\n              <span class=\"text-sm text-gray-600\">{{ row.extensions }}</span>\n            </template>\n          </el-table-column>\n\n          <el-table-column prop=\"parseMethod\" label=\"解析\" width=\"200\">\n            <template #default=\"{ row }\">\n              <el-select v-model=\"row.func\" class=\"w-36 h-9\" placeholder=\"选择解析方法\">\n                <el-option label=\"标准解析\" value=\"default\" />\n                <el-option v-if=\"textinSetting\" label=\"高精解析\" value=\"textin\" />\n              </el-select>\n            </template>\n          </el-table-column>\n          <el-table-column prop=\"parseMethod\" label=\"拆分\" width=\"200\">\n            <template #default=\"{ row }\">\n              <el-select v-model=\"row.split\" class=\"w-36 h-9\" :disabled=\"true\" placeholder=\"选择拆分方法\">\n                <el-option label=\"通用文档\" value=\"default\" />\n              </el-select>\n            </template>\n          </el-table-column>\n        </el-table>\n      </div>\n\n      <!-- 底部操作按钮 -->\n      <div class=\"mt-8\">\n        <el-button v-debounce class=\"w-24 h-9\" type=\"primary\" @click=\"handleSave\"> 保存 </el-button>\n      </div>\n    </div>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport platformSettingsApi from '@/api/modules/platform-settings'\nimport { transformPlatformSetting } from '@/api/modules/platform-settings/transform'\nimport type { PlatformSetting } from '@/api/modules/platform-settings/types'\nimport { settingApi } from '@/api/modules/setting'\n\nconst textinSetting = ref<PlatformSetting | null>(null)\n// 解析方法配置\n\nconst SETTING_KEY = 'document_setting'\nconst settingId = ref<number | null>(null)\nconst isLoading = ref(true)\n// 表格数据\nconst tableData = ref([\n  {\n    ext: 'doc',\n    name: 'Word',\n    shortName: 'DOC',\n    extensions: 'doc, docx',\n    func: 'default',\n    split: 'default',\n  },\n  {\n    ext: 'xls',\n    name: 'Excel',\n    shortName: 'XLS',\n    extensions: 'xls, xlsx',\n    func: 'default',\n    split: 'default',\n  },\n  {\n    ext: 'ppt',\n    name: 'PowerPoint',\n    shortName: 'PPT',\n    extensions: 'ppt, pptx',\n    func: 'default',\n    split: 'default',\n  },\n  {\n    ext: 'pdf',\n    name: 'PDF',\n    shortName: 'PDF',\n    extensions: 'pdf',\n    func: 'default',\n    split: 'default',\n  },\n])\n\n// 加载高精解析配置\nconst loadTextinSetting = async () => {\n  const res = await platformSettingsApi.find({ platform_key: 'textin' })\n  if (res && res.length > 0) {\n    textinSetting.value = transformPlatformSetting(res[0])\n  }\n}\n\nconst loadParseSetting = async () => {\n  const res = await settingApi.get(SETTING_KEY)\n  if (res.data) {\n    settingId.value = res.data.setting_id\n    const valueData = JSON.parse(res.data.value)\n    tableData.value = tableData.value.map(item => {\n      const data = valueData.find((data: any) => data.ext === item.ext)\n      if (data) {\n        item.func = textinSetting.value ? data.func : 'default'\n        item.split = data.split || 'default'\n      }\n      return item\n    })\n  }\n  isLoading.value = false\n}\n\n// 保存设置\nconst handleSave = async () => {\n  const data = {\n    key: SETTING_KEY,\n    value: JSON.stringify(\n      tableData.value.map(item => ({\n        ext: item.ext,\n        func: item.func,\n        split: item.split,\n      }))\n    ),\n  }\n  if (settingId.value) {\n    await settingApi.update(settingId.value, data)\n  } else {\n    await settingApi.create(data)\n  }\n  await loadParseSetting()\n  // 这里可以添加保存逻辑\n  ElMessage.success(window.$t('action_save_success'))\n}\n\nonMounted(async () => {\n  await loadTextinSetting()\n  loadParseSetting()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/payment/components/alipay-setting-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('payment.type.alipay')\"\n    :align-center=\"true\"\n    :close-on-click-modal=\"false\"\n    width=\"700px\"\n    destroy-on-close\n    append-to-body\n    @close=\"close\"\n  >\n    <div ref=\"guide_ref\" class=\"gap-3 bg-[#F6F9FC] p-5 mb-4 box-border text-sm text-[#4F5052]\">\n      <div\n        class=\"whitespace-pre-wrap leading-6\"\n        v-html=\"$t('payment.alipay_guide_html', { callback_url: callback_url })\"\n      />\n      <ElIcon\n        ref=\"copy_ref\"\n        v-copy=\"callback_url\"\n        class=\"cursor-pointer ml-1 mt-1 text-[#4F5052] hover:text-[#3664EF]\"\n        :size=\"14\"\n      >\n        <CopyDocument />\n      </ElIcon>\n    </div>\n\n    <ElForm ref=\"form_ref\" :model=\"form\" label-position=\"top\">\n      <ElFormItem\n        :label=\"$t('payment.alipay_app_id')\"\n        prop=\"appId\"\n        :rules=\"generateInputRules({ message: 'payment.alipay_app_id_placeholder' })\"\n      >\n        <template #label>\n          <span>{{ $t('payment.alipay_app_id') }}</span>\n          <span\n            class=\"text-[#9A9A9A] gap-1 ml-2 text-sm hover:opacity-80 cursor-pointer\"\n            @click=\"onGuideOpen({ mode: 'app' })\"\n          >\n            <svg-icon class=\"inline translate-y-0.5\" name=\"help\" width=\"14\" color=\"#999\" />\n            {{ $t('how_get') }}\n          </span>\n        </template>\n        <ElInput v-model=\"form.appId\" size=\"large\" clearable :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n      <ElFormItem\n        :label=\"$t('payment.alipay_mch_id')\"\n        prop=\"privateKey\"\n        :rules=\"generateInputRules({ message: 'payment.alipay_mch_id_placeholder' })\"\n      >\n        <ElInput v-model=\"form.privateKey\" size=\"large\" clearable :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n      <ElFormItem\n        :label=\"$t('payment.alipay_api_secret')\"\n        prop=\"alipayPublicKey\"\n        :rules=\"generateInputRules({ message: 'payment.alipay_api_secret_placeholder' })\"\n      >\n        <ElInput v-model=\"form.alipayPublicKey\" size=\"large\" clearable :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n    </ElForm>\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"handleConfirm\">\n          {{ $t('action_confirm') }}\n        </ElButton>\n        <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n    <ElDialog\n      v-model=\"guideVisible\"\n      :title=\"$t(guideTitle)\"\n      :align-center=\"true\"\n      width=\"860px\"\n      destroy-on-close\n      append-to-body\n    >\n      <ul class=\"flex flex-col gap-4 pb-4 box-border max-h-[84vh] overflow-y-auto\">\n        <li v-for=\"(item, index) in guideList\" :key=\"index\" class=\"flex flex-col gap-2 text-[#1D1E1F] text-sm\">\n          <div class=\"text-wrap break-words whitespace-pre-wrap\" v-html=\"item.title\" />\n          <div v-for=\"(image, imageIndex) in item.imageList\" :key=\"imageIndex\" class=\"w-full\">\n            <ElImage\n              :src=\"$getRealPath({ url: image })\"\n              class=\"w-full\"\n              fit=\"contain\"\n              :preview-teleported=\"true\"\n              :preview-src-list=\"[$getRealPath({ url: image })]\"\n            />\n          </div>\n        </li>\n      </ul>\n    </ElDialog>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, ref, shallowRef, nextTick } from 'vue'\nimport { ElIcon } from 'element-plus'\nimport { CopyDocument } from '@element-plus/icons-vue'\n\nimport { generateInputRules } from '@/utils/form-rule'\nimport { paymentApi } from '@/api/modules/payment'\nimport { prepareSavePaymentSettingData } from '@/api/modules/payment/transform'\nimport { PAYMENT_TYPE } from '@/constants/payment'\nimport { useUserStore } from '@/stores/modules/user'\nimport { api_host } from '@/utils/config'\n\nconst emits = defineEmits(['success'])\n\nconst user_store = useUserStore()\n\nconst copy_ref = shallowRef<InstanceType<typeof ElIcon> | null>(null)\nconst guide_ref = ref()\n\nconst form_ref = ref()\nconst visible = ref(false)\nconst form = reactive({\n  appId: '',\n  privateKey: '',\n  alipayPublicKey: '',\n})\nconst origin_data = ref({})\nconst submitting = ref(false)\n\nconst callback_url = computed(() => {\n  return `${api_host}/api/payment/alipay/notify/${user_store.info.user_id}`\n})\n\nconst open = ({ data = {} } = {}) => {\n  const config = (data as any).pay_config || {}\n  form.appId = config.appId || ''\n  form.privateKey = config.privateKey || ''\n  form.alipayPublicKey = config.alipayPublicKey || ''\n  origin_data.value = data\n  visible.value = true\n  nextTick(() => {\n    const copy_hook_el = guide_ref.value?.querySelector('.copy-hook')\n    copy_hook_el?.appendChild(copy_ref.value?.$el)\n  })\n}\n\nconst reset = () => {\n  form.appId = ''\n  form.privateKey = ''\n  form.alipayPublicKey = ''\n}\n\nconst close = () => {\n  visible.value = false\n  reset()\n}\nconst handleConfirm = async () => {\n  const valid = await form_ref.value.validate()\n  if (!valid) return\n  submitting.value = true\n  const pay_config = JSON.parse(JSON.stringify(form))\n  const { preparedData, pay_setting_id } = prepareSavePaymentSettingData({\n    pay_setting_id: (origin_data.value as any).pay_setting_id,\n    pay_config,\n    extra_config: {},\n    pay_type: PAYMENT_TYPE.ALIPAY,\n  })\n\n  await paymentApi.savePaymentSetting({ pay_setting_id, ...preparedData }).finally(() => {\n    submitting.value = false\n  })\n  emits('success')\n  ElMessage.success(window.$t('action_save_success'))\n  close()\n}\n\nconst guideVisible = ref(false)\nconst guideTitle = computed(() => {\n  const guideTitleMap = new Map([['app', 'wechat_payment.app_guide.title']])\n  return guideTitleMap.get('app')\n})\nconst guideList = computed(() => {\n  const guideListMap = new Map([\n    [\n      'app',\n      [\n        {\n          title: window.$t('alipay_payment.app_guide.step_1'),\n          imageList: ['/images/alipay-payment/app-guide-1.png'],\n        },\n      ],\n    ],\n  ])\n  return guideListMap.get('app')\n})\n\nconst onGuideOpen = ({ mode }: { mode: string }) => {\n  guideVisible.value = true\n}\n\ndefineExpose({\n  open,\n  close,\n  reset,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/payment/components/manual-setting-dialog.vue",
    "content": "<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue'\nimport { reactive, ref } from 'vue'\nimport UploadImage from '@/components/Upload/image.vue'\n\nimport { paymentApi } from '@/api/modules/payment'\nimport { prepareSavePaymentSettingData } from '@/api/modules/payment/transform'\nimport { PAYMENT_TYPE } from '@/constants/payment'\n\nconst emits = defineEmits(['success'])\n\nconst form_ref = ref()\nconst visible = ref(false)\nconst form = reactive({\n  pay_qrcode: '',\n  pay_desc: ''\n})\nconst origin_data = ref({})\nconst submitting = ref(false)\n\nconst textValidator = ({ rule, value, callback, message } = {}) => {\n  value = (value || '').trim()\n  if (!value) {\n    callback(new Error(window.$t(message)))\n    return\n  }\n  callback()\n}\n\nconst open = ({ data = {} } = {}) => {\n  const extra_config = data.extra_config || {}\n  form.pay_qrcode = extra_config.pay_qrcode || ''\n  form.pay_desc = extra_config.pay_desc || ''\n  origin_data.value = data\n  visible.value = true\n}\nconst reset = () => {\n  form.pay_qrcode = ''\n  form.pay_desc = ''\n}\n\nconst close = () => {\n  visible.value = false\n  reset()\n}\nconst handleConfirm = async () => {\n  const valid = await form_ref.value.validate()\n  if (!valid) return\n  submitting.value = true\n  const { preparedData, pay_setting_id } = prepareSavePaymentSettingData({\n    pay_setting_id: origin_data.value.pay_setting_id,\n    pay_config: {},\n    extra_config: {\n      pay_qrcode: form.pay_qrcode,\n      pay_desc: form.pay_desc\n    },\n    pay_type: PAYMENT_TYPE.MANUAL\n  })\n  \n  await paymentApi\n    .savePaymentSetting({ pay_setting_id, ...preparedData })\n    .finally(() => {\n      submitting.value = false\n    })\n  emits('success')\n  ElMessage.success(window.$t('action_save_success'))\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n  reset\n})\n</script>\n\n<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('payment.type.manual')\"\n    :close-on-click-modal=\"false\"\n    width=\"700px\"\n    destroy-on-close\n    append-to-body\n    @close=\"close\"\n  >\n    <ElForm ref=\"form_ref\" :model=\"form\" label-position=\"top\">\n      <ol class=\"w-full flex flex-col gap-3 bg-[#F6F9FC] p-5 mb-6 box-border text-sm text-[#4F5052]\">\n        <li>{{ $t('payment.manual_tip') }}</li>\n      </ol>\n      <ElFormItem\n        :label=\"$t('payment.manual.qrcode')\"\n        prop=\"pay_qrcode\"\n        :rules=\"[\n          {\n            validator: (_rule, value, callback) => textValidator({ rule: _rule, value, callback, message: 'payment.manual.qrcode_placeholder' }),\n            trigger: 'blur'\n          }\n        ]\"\n      >\n        <UploadImage v-model=\"form.pay_qrcode\" class=\"!w-[148px] !h-[148px] border bg-[#F7F8FA] rounded-md overflow-hidden\">\n          <div class=\"w-full h-full flex flex-col items-center justify-center gap-2\">\n            <img v-if=\"form.pay_qrcode\" :src=\"form.pay_qrcode\" class=\"absolute top-0 left-0 w-full h-full object-cover\" />\n            <template v-else>\n              <ElIcon color=\"#9A9A9A\" size=\"20\">\n                <Plus />\n              </ElIcon>\n              <span class=\"text-[#9A9A9A] text-sm\">{{ $t('action_upload') }}</span>\n            </template>\n          </div>\n        </UploadImage>\n      </ElFormItem>\n      <ElFormItem :label=\"$t('payment.manual.desc')\" prop=\"pay_desc\">\n        <ElInput\n          v-model=\"form.pay_desc\"\n          size=\"large\"\n          resize=\"none\"\n          type=\"textarea\"\n          :rows=\"4\"\n          :maxlength=\"30\"\n          show-word-limit\n          clearable\n          :placeholder=\"$t('payment.manual.desc_placeholder')\"\n        />\n      </ElFormItem>\n    </ElForm>\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"handleConfirm\">\n          {{ $t('action_confirm') }}\n        </ElButton>\n        <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<style scoped>\n::v-deep(.el-upload-dragger) {\n  position: relative;\n  width: 148px;\n  height: 148px;\n  box-sizing: border-box;\n  border-style: solid;\n  background-color: #f7f9fa;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/payment/components/payment-card.vue",
    "content": "<template>\n  <div class=\"border rounded-lg p-5 pb-8 group\">\n    <!-- 支付方式头部 -->\n    <div class=\"relative w-full flex items-center gap-3\">\n      <!-- 支付图标 -->\n      <SvgIcon :name=\"iconName\" width=\"24\" />\n\n      <!-- 支付方式名称 -->\n      <label class=\"font-semibold text-[#1D1E1F]\">{{ paymentLabel }}</label>\n\n      <!-- 启用状态标签 -->\n      <ElTag\n        v-if=\"settingInfo.pay_status\"\n        class=\"!border-none !bg-[#E3F6E0] !text-[#09BB07]\"\n        type=\"success\"\n        size=\"default\"\n      >\n        {{ $t('enabled') }}\n      </ElTag>\n\n      <div class=\"flex-1\" />\n\n      <!-- 操作下拉菜单 -->\n      <ElDropdown placement=\"bottom\" @command=\"handleCommand\">\n        <div\n          class=\"!border-none !outline-none p-1 cursor-pointer rounded overflow-hidden invisible group-hover:visible hover:bg-[#F0F0F0]\"\n        >\n          <ElIcon class=\"rotate-90\" size=\"16\">\n            <MoreFilled />\n          </ElIcon>\n        </div>\n        <template #dropdown>\n          <el-dropdown-menu>\n            <!-- 设置选项 -->\n            <el-dropdown-item :command=\"PAYMENT_COMMAND.SETTING\">\n              {{ $t('action_setting') }}\n            </el-dropdown-item>\n\n            <!-- 启用/禁用选项（仅当已配置时显示） -->\n            <template v-if=\"settingInfo.pay_setting_id\">\n              <el-dropdown-item v-if=\"settingInfo.pay_status\" :command=\"PAYMENT_COMMAND.DISABLE\">\n                {{ $t('action_disable') }}\n              </el-dropdown-item>\n              <el-dropdown-item v-else :command=\"PAYMENT_COMMAND.ENABLE\">\n                {{ $t('action_enable') }}\n              </el-dropdown-item>\n            </template>\n          </el-dropdown-menu>\n        </template>\n      </ElDropdown>\n    </div>\n\n    <!-- 配置状态信息 -->\n    <div class=\"mt-3 text-sm text-[#4F5052]\">\n      <template v-if=\"settingInfo.pay_setting_id\">\n        {{ $t('setting') }} · {{ $t('updated_at') }} {{ formatUpdateTime }}\n      </template>\n      <template v-else>\n        {{ $t('not_setting') }}\n      </template>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { MoreFilled } from '@element-plus/icons-vue'\nimport { computed } from 'vue'\nimport { PAYMENT_TYPE_ICON_MAP, PAYMENT_TYPE_LABEL_MAP, PAYMENT_COMMAND } from '@/constants/payment'\nimport type { PaymentType } from '@/constants/payment'\nimport type { PaymentSetting } from '@/api/modules/payment/types'\n\n// 组件属性\ninterface Props {\n  settingInfo: Partial<PaymentSetting>\n  type: string\n}\n\n// 组件事件\ninterface Emits {\n  (e: 'command', command: string, type: string): void\n}\n\nconst props = defineProps<Props>()\nconst emit = defineEmits<Emits>()\n\n/**\n * 获取支付方式图标名称\n */\nconst iconName = computed(() => {\n  return PAYMENT_TYPE_ICON_MAP.get(props.settingInfo.pay_type as any) || 'default'\n})\n\n/**\n * 安全获取支付方式标签\n */\nconst getPaymentLabel = (payType: PaymentType) => {\n  const label = PAYMENT_TYPE_LABEL_MAP.get(payType)\n  return label || ''\n}\n\n/**\n * 获取支付方式标签\n */\nconst paymentLabel = computed(() => {\n  return getPaymentLabel(props.settingInfo.pay_type as PaymentType)\n})\n\n/**\n * 格式化更新时间\n */\nconst formatUpdateTime = computed(() => {\n  return props.settingInfo.updated_time?.slice(0, 16) || ''\n})\n\n/**\n * 处理下拉菜单命令\n * @param command 命令\n */\nconst handleCommand = (command: string) => {\n  emit('command', command, props.type)\n}\n</script>\n\n<style scoped lang=\"scss\">\n// 组件样式\n</style>\n"
  },
  {
    "path": "web/console/src/views/payment/components/wechat-setting-dialog.vue",
    "content": "<script setup lang=\"ts\">\nimport { computed, reactive, ref } from 'vue'\nimport UploadCertificate from '@/components/Upload/certificate.vue'\n\nimport { generateInputRules } from '@/utils/form-rule'\nimport { paymentApi } from '@/api/modules/payment'\nimport { prepareSavePaymentSettingData } from '@/api/modules/payment/transform'\nimport { PAYMENT_TYPE } from '@/constants/payment'\n\nconst emits = defineEmits(['success'])\n\nconst form_ref = ref()\nconst visible = ref(false)\nconst form = reactive({\n  mchId: '',\n  appId: '',\n  apiV3Key: '',\n  serialNo: '',\n  certPath: '',\n  certName: '',\n  privateKeyPath: '',\n  privateKeyName: '',\n  notifyUrl: '',\n  platformCertPath: ''\n})\nconst origin_data = ref({})\nconst submitting = ref(false)\n\nconst open = ({ data = {} } = {}) => {\n  const config = data.pay_config || {}\n  const extra_config = data.extra_config || {}\n  form.mchId = config.mchId || ''\n  form.appId = config.appId || ''\n  form.apiV3Key = config.apiV3Key || ''\n  form.serialNo = config.serialNo || ''\n  form.certPath = config.certPath || ''\n  form.certName = config.certName || extra_config.certName || ''\n  form.privateKeyPath = config.privateKeyPath || ''\n  form.privateKeyName = config.privateKeyName || extra_config.privateKeyName || ''\n  form.notifyUrl = config.notifyUrl || ''\n  form.platformCertPath = config.platformCertPath || ''\n  origin_data.value = data\n  visible.value = true\n}\nconst reset = () => {\n  form.mchId = ''\n  form.appId = ''\n  form.apiV3Key = ''\n  form.serialNo = ''\n  form.certPath = ''\n  form.certName = ''\n  form.privateKeyPath = ''\n  form.privateKeyName = ''\n  form.notifyUrl = ''\n  form.platformCertPath = ''\n}\n\nconst close = () => {\n  visible.value = false\n  reset()\n}\n\nconst handleConfirm = async () => {\n  const valid = await form_ref.value.validate()\n  if (!valid) return\n  submitting.value = true\n  const pay_config = JSON.parse(JSON.stringify(form))\n  const extra_config = {\n    ...JSON.parse(JSON.stringify(origin_data.value.extra_config || {})),\n    certName: form.certName,\n    privateKeyName: form.privateKeyName\n  }\n  delete pay_config.certName\n  delete pay_config.privateKeyName\n  const { preparedData, pay_setting_id } = prepareSavePaymentSettingData({\n    pay_setting_id: origin_data.value.pay_setting_id,\n    pay_config,\n    extra_config,\n    pay_type: PAYMENT_TYPE.WECHAT\n  })\n  \n  await paymentApi\n    .savePaymentSetting({ pay_setting_id, ...preparedData })\n    .finally(() => {\n      submitting.value = false\n    })\n  emits('success')\n  ElMessage.success(window.$t('action_save_success'))\n  close()\n}\n\nconst guideVisible = ref(false)\nconst guideMode = ref('mch')\nconst guideTitle = computed(() => {\n  const guideTitleMap = new Map([\n    ['mch', 'wechat_payment.mch_guide.title'],\n    ['app', 'wechat_payment.app_guide.title'],\n    ['api', 'wechat_payment.api_guide.title'],\n    ['cert', 'wechat_payment.cert_guide.title'],\n    ['serial', 'wechat_payment.serial_guide.title']\n  ])\n  return guideTitleMap.get(guideMode.value)\n})\nconst guideList = computed(() => {\n  const guideListMap = new Map([\n    [\n      'mch',\n      [\n        {\n          title: window.$t('wechat_payment.mch_guide.step_1', {\n            url: '<a style=\"color: #586D9A;\" href=\"https://pay.weixin.qq.com/\" target=\"_blank\">https://pay.weixin.qq.com/</a>'\n          }),\n          imageList: []\n        },\n        {\n          title: window.$t('wechat_payment.mch_guide.step_2'),\n          imageList: ['/images/wechat-payment/mch-guide-1.png']\n        },\n        {\n          title: window.$t('wechat_payment.mch_guide.step_3'),\n          imageList: ['/images/wechat-payment/mch-guide-2.png', '/images/wechat-payment/mch-guide-3.png']\n        }\n      ]\n    ],\n    [\n      'app',\n      [\n        {\n          title: window.$t('wechat_payment.app_guide.step_1'),\n          imageList: ['/images/wechat-payment/app-guide-1.png']\n        },\n        {\n          title: window.$t('wechat_payment.app_guide.step_2'),\n          imageList: ['/images/wechat-payment/app-guide-2.png']\n        },\n        {\n          title: window.$t('wechat_payment.app_guide.step_3', {\n            url: '<a style=\"color: #586D9A;\" href=\"https://mp.weixin.qq.com\" target=\"_blank\">https://mp.weixin.qq.com</a>'\n          }),\n          imageList: ['/images/wechat-payment/app-guide-3.png']\n        }\n      ]\n    ],\n    [\n      'api',\n      [\n        {\n          title: window.$t('wechat_payment.api_guide.step_1'),\n          imageList: ['/images/wechat-payment/api-guide-1.png']\n        },\n        {\n          title: window.$t('wechat_payment.api_guide.step_2'),\n          imageList: []\n        }\n      ]\n    ],\n    [\n      'cert',\n      [\n        {\n          title: window.$t('wechat_payment.cert_guide.step_1'),\n          imageList: ['/images/wechat-payment/cert-guide-1.png', '/images/wechat-payment/cert-guide-2.png']\n        },\n        {\n          title: window.$t('wechat_payment.cert_guide.step_2'),\n          imageList: []\n        }\n      ]\n    ],\n    [\n      'serial',\n      [\n        {\n          title: window.$t('wechat_payment.serial_guide.step_1'),\n          imageList: ['/images/wechat-payment/serial-guide-1.png']\n        }\n      ]\n    ]\n  ])\n  return guideListMap.get(guideMode.value)\n})\n\nconst onGuideOpen = ({ mode }: { mode: string }) => {\n  guideMode.value = mode\n  guideVisible.value = true\n}\n\ndefineExpose({\n  open,\n  close,\n  reset\n})\n</script>\n\n<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('payment.type.wechat')\"\n    :align-center=\"true\"\n    :close-on-click-modal=\"false\"\n    width=\"700px\"\n    destroy-on-close\n    append-to-body\n    @close=\"close\"\n  >\n    <ElForm ref=\"form_ref\" :model=\"form\" label-position=\"top\">\n      <ElFormItem :label=\"$t('payment.wechat_mch_id')\" prop=\"mchId\" :rules=\"generateInputRules({ message: 'payment.wechat_mch_id_placeholder' })\">\n        <template #label>\n          <span>{{ $t('payment.wechat_mch_id') }}</span>\n          <span class=\"text-[#9A9A9A] gap-1 ml-2 text-sm hover:opacity-80 cursor-pointer\" @click=\"onGuideOpen({ mode: 'mch' })\">\n            <svg-icon class=\"inline translate-y-0.5\" name=\"help\" width=\"14\" color=\"#999\" />\n            {{ $t('how_get') }}\n          </span>\n        </template>\n        <ElInput v-model=\"form.mchId\" size=\"large\" clearable :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('payment.wechat_app_id')\" prop=\"appId\" :rules=\"generateInputRules({ message: 'payment.wechat_app_id_placeholder' })\">\n        <template #label>\n          <span>{{ $t('payment.wechat_app_id') }}</span>\n          <span class=\"text-[#9A9A9A] gap-1 ml-2 text-sm hover:opacity-80 cursor-pointer\" @click=\"onGuideOpen({ mode: 'app' })\">\n            <svg-icon class=\"inline translate-y-0.5\" name=\"help\" width=\"14\" color=\"#999\" />\n            {{ $t('how_get') }}\n          </span>\n        </template>\n        <ElInput v-model=\"form.appId\" size=\"large\" clearable :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n      <ElFormItem\n        :label=\"$t('payment.wechat_api_secret')\"\n        prop=\"apiV3Key\"\n        :rules=\"generateInputRules({ message: 'payment.wechat_api_secret_placeholder' })\"\n      >\n        <template #label>\n          <span>{{ $t('payment.wechat_api_secret') }}</span>\n          <span class=\"text-[#9A9A9A] gap-1 ml-2 text-sm hover:opacity-80 cursor-pointer\" @click=\"onGuideOpen({ mode: 'api' })\">\n            <svg-icon class=\"inline translate-y-0.5\" name=\"help\" width=\"14\" color=\"#999\" />\n            {{ $t('how_get') }}\n          </span>\n        </template>\n        <ElInput v-model=\"form.apiV3Key\" size=\"large\" clearable :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('payment.wechat_cert')\" prop=\"certPath\" :rules=\"generateInputRules({ message: 'payment.wechat_cert_placeholder' })\">\n        <template #label>\n          <span>{{ $t('payment.wechat_cert') }}</span>\n          <span class=\"text-[#9A9A9A] gap-1 ml-2 text-sm hover:opacity-80 cursor-pointer\" @click=\"onGuideOpen({ mode: 'cert' })\">\n            <svg-icon class=\"inline translate-y-0.5\" name=\"help\" width=\"14\" color=\"#999\" />\n            {{ $t('how_get') }}\n          </span>\n        </template>\n        <UploadCertificate v-model=\"form.certPath\" v-model:file-name=\"form.certName\" @change=\"$refs.form_ref.validateField('certPath')\" />\n      </ElFormItem>\n      <ElFormItem\n        :label=\"$t('payment.wechat_private_key')\"\n        prop=\"privateKeyPath\"\n        :rules=\"generateInputRules({ message: 'payment.wechat_private_key_placeholder' })\"\n      >\n        <template #label>\n          <span>{{ $t('payment.wechat_private_key') }}</span>\n          <span class=\"text-[#9A9A9A] gap-1 ml-2 text-sm hover:opacity-80 cursor-pointer\" @click=\"onGuideOpen({ mode: 'cert' })\">\n            <svg-icon class=\"inline translate-y-0.5\" name=\"help\" width=\"14\" color=\"#999\" />\n            {{ $t('how_get') }}\n          </span>\n        </template>\n        <UploadCertificate\n          v-model=\"form.privateKeyPath\"\n          v-model:file-name=\"form.privateKeyName\"\n          @change=\"$refs.form_ref.validateField('privateKeyPath')\"\n        />\n      </ElFormItem>\n      <ElFormItem\n        :label=\"$t('payment.wechat_serial_no')\"\n        prop=\"serialNo\"\n        :rules=\"generateInputRules({ message: 'payment.wechat_serial_no_placeholder' })\"\n      >\n        <template #label>\n          <span>{{ $t('payment.wechat_serial_no') }}</span>\n          <span class=\"text-[#9A9A9A] gap-1 ml-2 text-sm hover:opacity-80 cursor-pointer\" @click=\"onGuideOpen({ mode: 'serial' })\">\n            <svg-icon class=\"inline translate-y-0.5\" name=\"help\" width=\"14\" color=\"#999\" />\n            {{ $t('how_get') }}\n          </span>\n        </template>\n        <ElInput v-model=\"form.serialNo\" size=\"large\" clearable :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n    </ElForm>\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"handleConfirm\">\n          {{ $t('action_confirm') }}\n        </ElButton>\n        <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n    <ElDialog v-model=\"guideVisible\" :title=\"$t(guideTitle)\" :align-center=\"true\" width=\"860px\" destroy-on-close append-to-body>\n      <ul class=\"flex flex-col gap-4 pb-4 box-border max-h-[84vh] overflow-y-auto\">\n        <li v-for=\"(item, index) in guideList\" :key=\"index\" class=\"flex flex-col gap-2 text-[#1D1E1F] text-sm\">\n          <div class=\"text-wrap break-words whitespace-pre-wrap\" v-html=\"item.title\" />\n          <div v-for=\"(image, imageIndex) in item.imageList\" :key=\"imageIndex\" class=\"w-full\">\n            <ElImage\n              :src=\"$getRealPath({ url: image })\"\n              class=\"w-full\"\n              fit=\"contain\"\n              :preview-teleported=\"true\"\n              :preview-src-list=\"[$getRealPath({ url: image })]\"\n            />\n          </div>\n        </li>\n      </ul>\n    </ElDialog>\n  </ElDialog>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/payment/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.payment')\" />\n\n    <div class=\"flex-1 flex flex-col bg-white py-8 px-6 mt-3\">\n      <h1 class=\"font-semibold text-[#1D1E1F]\">CNY</h1>\n      <!-- CNY支付方式 -->\n      <div class=\"mt-5 grid grid-cols-2 gap-5\">\n        <!-- 微信支付 -->\n        <PaymentCard :setting-info=\"wechat_setting_info\" type=\"wechat\" @command=\"handleCommand\" />\n\n        <!-- 支付宝 -->\n        <PaymentCard :setting-info=\"alipay_setting_info\" type=\"alipay\" @command=\"handleCommand\" />\n\n        <!-- 手动支付 -->\n        <PaymentCard :setting-info=\"manual_setting_info\" type=\"manual\" @command=\"handleCommand\" />\n      </div>\n      <!-- USD支付方式 -->\n      <h1 class=\"mt-10 font-semibold text-[#1D1E1F] opacity-60\">USD</h1>\n      <div class=\"mt-5 grid grid-cols-2 gap-5 opacity-60\">\n        <!-- PayPal支付（暂未开放） -->\n        <PaymentCard :setting-info=\"getPaymentSettingInfo('paypal')\" type=\"paypal\" @command=\"handleCommand\" />\n\n        <!-- 预留位置 -->\n        <div class=\"flex-1 rounded-lg p-5 pb-8 group\" />\n      </div>\n    </div>\n  </Layout>\n\n  <WechatSettingDialog ref=\"wechat_setting_ref\" @success=\"refresh\" />\n  <ManualSettingDialog ref=\"manual_setting_ref\" @success=\"refresh\" />\n  <AlipaySettingDialog ref=\"alipay_setting_ref\" @success=\"refresh\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, computed } from 'vue'\nimport WechatSettingDialog from './components/wechat-setting-dialog.vue'\nimport ManualSettingDialog from './components/manual-setting-dialog.vue'\nimport AlipaySettingDialog from './components/alipay-setting-dialog.vue'\nimport PaymentCard from './components/payment-card.vue'\n\n// 使用新的支付API模块\nimport { paymentApi } from '@/api/modules/payment'\nimport { transformPaymentSettingList, transformToPaymentSettingMap } from '@/api/modules/payment/transform'\nimport { PAYMENT_COMMAND, PAYMENT_STATUS } from '@/constants/payment'\nimport type { PaymentSettingMap, PaymentSetting } from '@/api/modules/payment/types'\nimport TipConfirm from '@/components/TipConfirm/setup'\nimport { isInternalNetwork } from '@/utils'\n\n// 对话框引用\nconst wechat_setting_ref = ref()\nconst manual_setting_ref = ref()\nconst alipay_setting_ref = ref()\n\n// 支付设置数据\nconst paymentSettings = ref<PaymentSettingMap>({\n  wechat: {} as PaymentSetting,\n  alipay: {} as PaymentSetting,\n  manual: {} as PaymentSetting,\n  paypal: {} as PaymentSetting,\n})\n\n/**\n * 获取支付设置数据\n */\nconst refresh = async () => {\n  try {\n    const rawData = await paymentApi.getPaymentSettings()\n    const settingsList = transformPaymentSettingList(rawData)\n    paymentSettings.value = transformToPaymentSettingMap(settingsList)\n  } catch (error) {\n    console.error('获取支付设置失败:', error)\n    ElMessage.error('获取支付设置失败')\n  }\n}\n\n/**\n * 获取指定类型的支付设置信息\n * @param type 支付类型\n * @returns 支付设置信息\n */\nconst getPaymentSettingInfo = (type: keyof PaymentSettingMap) => {\n  return paymentSettings.value[type] || ({} as PaymentSetting)\n}\n\n/**\n * 获取对话框引用\n * @param type 支付类型\n * @returns 对话框引用\n */\nconst getDialogRef = (type: keyof PaymentSettingMap) => {\n  const dialogMap: Record<string, any> = {\n    wechat: wechat_setting_ref,\n    alipay: alipay_setting_ref,\n    manual: manual_setting_ref,\n  }\n  return dialogMap[type]\n}\n\n/**\n * 更新支付状态\n * @param pay_setting_id 支付设置ID\n * @param pay_status 支付状态\n */\nconst updatePaymentStatus = async (pay_setting_id: number, pay_status: boolean) => {\n  try {\n    await paymentApi.updatePaymentStatus(pay_setting_id, { pay_status })\n    const statusText = pay_status ? 'enabled' : 'disabled'\n    ElMessage.success(window.$t(statusText))\n    await refresh()\n  } catch (error) {\n    console.error('更新支付状态失败:', error)\n    ElMessage.error('更新支付状态失败')\n  }\n}\n\n/**\n * 处理支付操作命令\n * @param command 操作命令\n * @param type 支付类型\n */\nconst handleCommand = async (command: string, type: string = '') => {\n  // PayPal功能暂未开放\n  if (type === 'paypal') {\n    ElMessage.warning(window.$t('feature_coming_soon'))\n    return\n  }\n\n  // 内网环境限制（手动支付除外）\n  if (isInternalNetwork() && type !== 'manual') {\n    TipConfirm({\n      title: window.$t('local_config_limited_tip'),\n      content: window.$t('local_config_limited_desc', { url: window.location.href }),\n      confirmButtonText: window.$t('know_it'),\n      showCancelButton: false,\n    }).open()\n    return\n  }\n\n  const settingInfo = getPaymentSettingInfo(type as keyof PaymentSettingMap)\n\n  switch (command) {\n    case PAYMENT_COMMAND.SETTING:\n      // 打开对应的设置对话框\n      const dialogRef = getDialogRef(type as keyof PaymentSettingMap)\n      if (dialogRef) {\n        dialogRef.value.open({ data: settingInfo })\n      }\n      break\n\n    case PAYMENT_COMMAND.ENABLE:\n      await updatePaymentStatus(settingInfo.pay_setting_id, PAYMENT_STATUS.ENABLED)\n      break\n\n    case PAYMENT_COMMAND.DISABLE:\n      await updatePaymentStatus(settingInfo.pay_setting_id, PAYMENT_STATUS.DISABLED)\n      break\n  }\n}\n\n// 计算属性：获取各支付类型的设置信息\nconst wechat_setting_info = computed(() => getPaymentSettingInfo('wechat'))\nconst alipay_setting_info = computed(() => getPaymentSettingInfo('alipay'))\nconst manual_setting_info = computed(() => getPaymentSettingInfo('manual'))\n\n// 组件挂载时获取数据\nonMounted(() => {\n  refresh()\n})\n</script>\n\n<style scoped lang=\"scss\"></style>\n"
  },
  {
    "path": "web/console/src/views/platform/components/agent-list-drawer.vue",
    "content": "<template>\n  <ElDrawer\n    v-model=\"visible\"\n    :title=\"drawerTitle\"\n    size=\"70%\"\n    destroy-on-close\n    append-to-body\n    :close-on-click-modal=\"false\"\n  >\n    <div class=\"flex items-center justify-between gap-4 mb-4\">\n      <div>\n        <ElInput\n          v-model=\"filterForm.keyword\"\n          :prefix-icon=\"Search\"\n          :placeholder=\"$t('action_search')\"\n          size=\"large\"\n          @change=\"refresh\"\n        />\n      </div>\n      <ElButton\n        v-version=\"{ module: VERSION_MODULE.AGENT, count: all_total, content: $t('version.agent_limit') }\"\n        type=\"primary\"\n        size=\"large\"\n        @click=\"onAgentCreate\"\n      >\n        {{ $t('action_add') }}\n      </ElButton>\n    </div>\n\n    <TablePlus\n      header-row-class-name=\"rounded overflow-hidden\"\n      header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n      :data=\"tableData\"\n      :total=\"tableTotal\"\n      :loading=\"tableLoading\"\n      :page=\"filterForm.offset + 1\"\n      :limit=\"filterForm.limit\"\n      @page-size-change=\"onTableSizeChange\"\n      @page-current-change=\"onTableCurrentChange\"\n    >\n      <ElTableColumn prop=\"date\" :label=\"$t('module.agent')\" min-width=\"180\" show-overflow-tooltip>\n        <template #default=\"{ row }\">\n          <div class=\"flex items-center gap-2 w-full\">\n            <img class=\"flex-none w-8 h-8 rounded-full overflow-hidden\" :src=\"row.logo\" alt=\"\" />\n            <div class=\"flex-1 w-0 text-sm flex flex-col\">\n              <div class=\"text-[#2563EB] truncate\">\n                {{ row.name || '--' }}\n              </div>\n              <div v-show=\"row.description\" class=\"text-xs text-[#808080] truncate\">\n                {{ row.description }}\n              </div>\n            </div>\n          </div>\n        </template>\n      </ElTableColumn>\n\n      <ElTableColumn :label=\"$t('usage_range')\" min-width=\"140\" show-overflow-tooltip>\n        <template #default=\"{ row }\">\n          <span :class=\"{ 'text-[#999]': !row.user_group_names.length }\">\n            {{ row.user_group_names.join('、') || '--' }}\n          </span>\n        </template>\n      </ElTableColumn>\n\n      <ElTableColumn :label=\"$t('sort')\" width=\"80\" show-overflow-tooltip>\n        <template #default=\"{ row }\">\n          {{ row.sort }}\n        </template>\n      </ElTableColumn>\n\n      <ElTableColumn :label=\"$t('action_enable')\" width=\"80\">\n        <template #default=\"{ row }\">\n          <ElSwitch v-model=\"row.enable\" @change=\"onAgentStatusChange({ data: row })\" />\n        </template>\n      </ElTableColumn>\n\n      <ElTableColumn :label=\"$t('operation')\" width=\"120\" align=\"right\" fixed=\"right\">\n        <template #default=\"{ row }\">\n          <ElButton type=\"primary\" link @click=\"onAgentCreate({ data: row })\">\n            {{ $t('action_edit') }}\n          </ElButton>\n          <ElButton type=\"primary\" link @click=\"onAgentDelete({ data: row })\">\n            {{ $t('action_delete') }}\n          </ElButton>\n        </template>\n      </ElTableColumn>\n    </TablePlus>\n  </ElDrawer>\n\n  <AgentCreateDrawer ref=\"agentCreateRef\" @success=\"onAgentCreateSuccess\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { Search } from '@element-plus/icons-vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { computed, nextTick, reactive, ref } from 'vue'\nimport AgentCreateDrawer from '@/views/agent/create/drawer.vue'\n\nimport { PROVIDER_VALUE } from '@/constants/platform/provider'\nimport { AGENT_TYPE, agentApi } from '@/api/modules/agent'\nimport { subscriptionApi } from '@/api/modules/subscription'\nimport { getAgentByChannelType } from '@/constants/platform/config'\n\nimport { VERSION_MODULE } from '@/constants/enterprise'\n\ninterface AgentData {\n  agent_id?: number\n  name?: string\n  description?: string\n  logo?: string\n  enable?: boolean\n  sort?: number\n  user_group_ids: number[]\n  user_group_names: string[]\n  channel_config?: {\n    channel_type?: string\n  }\n}\n\ninterface SubscriptionData {\n  group_id: number\n  group_name: string\n}\n\nconst emits = defineEmits(['change'])\n\nconst agentCreateRef = ref()\nconst visible = ref(false)\nconst filterForm = reactive({\n  channel_types: PROVIDER_VALUE.DIFY as string,\n  keyword: '',\n  offset: 0,\n  limit: 10,\n})\nconst drawerTitle = computed(() => {\n  const agent = getAgentByChannelType(filterForm.channel_types)\n  return agent && agent.label ? window.$t(agent.label) : ''\n})\nconst tableData = ref<Agent.State[]>([])\nconst tableTotal = ref(0)\nconst tableLoading = ref(false)\nconst originData = ref<Record<string, any>>({})\nconst subscriptionList = ref<SubscriptionData[]>([])\nconst all_total = ref(0)\n\nconst loadSubscriptionList = async () => {\n  if (!subscriptionList.value.length) {\n    const response = await subscriptionApi.list({ params: { offset: 0, limit: 1000 } })\n    subscriptionList.value = response\n  }\n}\n\nconst loadAllTotal = async () => {\n  const { count = 0 } = await agentApi.list({\n    params: {\n      group_id: '-1',\n      keyword: '',\n      offset: 0,\n      limit: 1,\n    },\n  })\n  all_total.value = count\n}\n\nconst loadListData = async ({ channel_types = filterForm.channel_types } = {}) => {\n  tableLoading.value = true\n  await loadSubscriptionList()\n  loadAllTotal()\n  try {\n    const { count = 0, agents = [] } = await agentApi.list({ params: { ...filterForm, channel_types } })\n\n    tableData.value = agents.map((item: Agent.State) => ({\n      ...item,\n      user_group_ids: item.user_group_ids || [],\n      user_group_names: (item.user_group_ids || [])\n        .map(value => (subscriptionList.value.find(row => row.group_id === value) || {}).group_name)\n        .filter(Boolean),\n    }))\n\n    tableTotal.value = count\n    originData.value.agent_total = count\n\n    return { count, agents }\n  } finally {\n    tableLoading.value = false\n  }\n}\n\nconst refresh = () => {\n  filterForm.offset = 0\n  return loadListData()\n}\n\nconst open = async ({ data = {}, type = PROVIDER_VALUE.DIFY } = {}) => {\n  filterForm.channel_types = type\n  originData.value = data\n  tableData.value = []\n  await nextTick()\n  visible.value = true\n  refresh()\n}\n\nconst close = () => {\n  visible.value = false\n}\n\nconst onAgentCreate = ({ data = {} }: { data?: Partial<AgentData> } = {}) => {\n  const agent = getAgentByChannelType(filterForm.channel_types)\n  const agent_type = agent.name || AGENT_TYPE.DIFY_AGENT\n  agentCreateRef.value.open({ agent_type, data: originData.value, agent_id: data.agent_id })\n}\n\nconst onAgentStatusChange = async ({ data }: { data: AgentData }) => {\n  await agentApi.updateStatus({ data: { agent_id: data.agent_id, enable: data.enable } })\n  ElMessage.success(window.$t(data.enable ? 'action_enable_success' : 'action_disable_success'))\n}\n\nconst onAgentDelete = async ({ data }: { data: AgentData }) => {\n  await ElMessageBox.confirm(window.$t('agent_delete_confirm'), window.$t('action_delete'))\n  await agentApi.delete({ data: { agent_id: data.agent_id } })\n  ElMessage.success(window.$t('action_delete_success'))\n  loadListData()\n}\n\nconst onTableSizeChange = (size: number) => {\n  filterForm.limit = size\n  refresh()\n}\n\nconst onTableCurrentChange = (page: number) => {\n  filterForm.offset = (page - 1) * filterForm.limit\n  loadListData()\n}\n\nconst onAgentCreateSuccess = ({ action = 'update' } = {}) => {\n  return action === 'create' ? refresh() : loadListData()\n}\n\ndefineExpose({\n  open,\n  close,\n  loadListData,\n  create: ({ data = {}, type = PROVIDER_VALUE.DIFY } = {}) => {\n    filterForm.channel_types = type\n    originData.value = data\n    onAgentCreate()\n  },\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/platform/components/auth-list-drawer.vue",
    "content": "<template>\n  <ElDrawer\n    v-model=\"visible\"\n    :title=\"$t(originData.label || '')\"\n    size=\"70%\"\n    destroy-on-close\n    append-to-body\n    :close-on-click-modal=\"false\"\n  >\n    <div class=\"flex items-center justify-between gap-4 mb-4\">\n      <div>\n        <ElInput\n          v-model=\"filterForm.name\"\n          :prefix-icon=\"Search\"\n          :placeholder=\"$t('action_search')\"\n          size=\"large\"\n          clearable\n          @change=\"refresh\"\n        />\n      </div>\n      <ElButton type=\"primary\" size=\"large\" @click=\"handleAddProvider\">\n        {{ $t('action_add') }}\n      </ElButton>\n    </div>\n\n    <TablePlus\n      header-row-class-name=\"rounded overflow-hidden\"\n      header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n      :data=\"tableData\"\n      :total=\"tableTotal\"\n      :loading=\"tableLoading\"\n      :page=\"1\"\n      :limit=\"tableTotal\"\n      :pagination=\"false\"\n    >\n      <ElTableColumn prop=\"name\" :label=\"$t('module.website_info_name')\" min-width=\"100\" show-overflow-tooltip>\n      </ElTableColumn>\n\n      <ElTableColumn\n        v-if=\"[PROVIDER_VALUE['53AI'], PROVIDER_VALUE.COZE_OSV].includes(originData.provider_type)\"\n        prop=\"base_url\"\n        :label=\"$t('module.platform_tool_api_endpoint')\"\n        min-width=\"180\"\n        show-overflow-tooltip\n      >\n      </ElTableColumn>\n\n      <ElTableColumn\n        v-else-if=\"originData.provider_type === PROVIDER_VALUE.COZE_CN\"\n        prop=\"configs.client_id\"\n        :label=\"$t('module.platform_auth_client_id')\"\n        min-width=\"180\"\n        show-overflow-tooltip\n      >\n      </ElTableColumn>\n\n      <ElTableColumn\n        v-else-if=\"originData.provider_type === PROVIDER_VALUE.TENCENT\"\n        prop=\"configs.secret_id\"\n        :label=\"$t('module.platform_auth_secret_id')\"\n        min-width=\"180\"\n        show-overflow-tooltip\n      >\n      </ElTableColumn>\n\n      <ElTableColumn prop=\"created_time\" width=\"180\" :label=\"$t('add_time')\"> </ElTableColumn>\n\n      <ElTableColumn :label=\"$t('operation')\" width=\"120\" align=\"right\" fixed=\"right\">\n        <template #default=\"{ row }\">\n          <ElButton type=\"primary\" link @click=\"handleEditProvider(row)\">\n            {{ $t('action_edit') }}\n          </ElButton>\n          <ElButton type=\"primary\" link @click=\"handleDeleteProvider(row)\">\n            {{ $t('action_delete') }}\n          </ElButton>\n        </template>\n      </ElTableColumn>\n    </TablePlus>\n  </ElDrawer>\n\n  <ProviderAuthorizeDialog ref=\"authorizeRef\" @success=\"onSuccess\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { Search } from '@element-plus/icons-vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { nextTick, reactive, ref } from 'vue'\n\nimport ProviderAuthorizeDialog from './provider-authorize-dialog.vue'\n\nimport { PROVIDER_VALUE } from '@/constants/platform/provider'\nimport { providerApi } from '@/api/modules/provider'\n\nconst emit = defineEmits<{\n  (e: 'change'): void\n}>()\n\ninterface AgentData {\n  agent_id?: number\n  name?: string\n  description?: string\n  logo?: string\n  enable?: boolean\n  sort?: number\n  user_group_ids: number[]\n  user_group_names: string[]\n  channel_config?: {\n    channel_type?: string\n  }\n}\n\nconst authorizeRef = ref()\nconst visible = ref(false)\nconst filterForm = reactive({\n  name: '',\n})\n\nconst tableData = ref<Agent.State[]>([])\nconst tableTotal = ref(0)\nconst tableLoading = ref(false)\nconst originData = ref<Record<string, any>>({})\n\nconst loadList = async () => {\n  tableLoading.value = true\n  // await loadSubscriptionList()\n  try {\n    const res = await providerApi.list({ params: { ...filterForm, providerType: originData.value.provider_type } })\n    tableData.value = res\n    tableTotal.value = res.length\n  } finally {\n    tableLoading.value = false\n  }\n}\n\nconst refresh = () => {\n  return loadList()\n}\n\nconst open = async ({ data = {}, type = PROVIDER_VALUE.DIFY } = {}) => {\n  originData.value = data\n  tableData.value = []\n  await nextTick()\n  visible.value = true\n  refresh()\n}\n\nconst close = () => {\n  visible.value = false\n}\n\nconst handleAddProvider = () => {\n  authorizeRef.value.open({ data: originData.value })\n}\n\nconst handleEditProvider = (data: AgentData) => {\n  authorizeRef.value.open({ data })\n}\n\nconst handleDeleteProvider = async (data: AgentData) => {\n  await ElMessageBox.confirm(window.$t('module.platform_delete_confirm'))\n  await providerApi.delete({ data: { provider_id: data.provider_id } })\n  ElMessage.success(window.$t('action_delete_success'))\n  loadList()\n  emit('change')\n}\n\nconst onSuccess = () => {\n  loadList()\n  emit('change')\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/platform/components/model-group.vue",
    "content": "<template>\n  <li class=\"w-full p-5 border rounded box-border overflow-hidden bg-[#F8F9FA]\">\n    <div class=\"flex items-center gap-4\">\n      <img\n        class=\"flex-none w-[40px] h-[40px] object-contain rounded-full overflow-hidden\"\n        :src=\"$getRealPath({ url: `/images/platform/${group.icon}.png` })\"\n      />\n      <div class=\"flex-1 text-[#1B2B51] font-semibold\">\n        {{ group.label }}\n      </div>\n      <template v-if=\"!group.multiple\">\n        <ElButton class=\"flex-none !px-5\" type=\"default\" size=\"large\" @click.stop=\"$emit('edit', group.data)\">\n          {{ $t('action_setting') }}\n        </ElButton>\n        <ElButton\n          v-debounce\n          class=\"flex-none !ml-0 !px-3\"\n          type=\"default\"\n          size=\"large\"\n          @click.stop=\"$emit('delete', group.data, null)\"\n        >\n          <ElIcon size=\"14\">\n            <Delete />\n          </ElIcon>\n        </ElButton>\n      </template>\n    </div>\n    <div class=\"w-full flex flex-col bg-white rounded overflow-hidden gap-4 mt-6 px-5\">\n      <template v-if=\"!group.multiple\">\n        <ElCollapse :model-value=\"['models']\" class=\"w-full !border-none\">\n          <ElCollapseItem name=\"models\">\n            <template #title>\n              <span class=\"text-[#4F5052] text-sm\">\n                {{\n                  $t('module.platform_model_models_total', {\n                    total: group.data.modelOptions.length,\n                  })\n                }}\n              </span>\n            </template>\n            <ul class=\"w-full flex flex-col gap-y-5 box-border overflow-auto\">\n              <li\n                v-for=\"model in group.data.modelOptions\"\n                :key=\"model.value\"\n                class=\"w-full box-border flex items-center gap-2 group\"\n              >\n                <img\n                  v-if=\"model.icon\"\n                  class=\"flex-none w-[20px] h-[20px] object-contain\"\n                  :src=\"$getRealPath({ url: `/images/platform/${model.icon}.png` })\"\n                />\n                <label class=\"flex-none text-sm text[#1D1E1F]\">{{ model.label }}</label>\n                <ElIcon\n                  class=\"flex-none cursor-pointer hover:opacity-70\"\n                  size=\"14\"\n                  @click=\"$emit('model-edit', { data: model, parentData: group.data })\"\n                >\n                  <Setting />\n                </ElIcon>\n                <template v-if=\"getTestResult(group.data, model)\">\n                  <template v-if=\"getTestResult(group.data, model).loading\"></template>\n                  <el-tag v-else-if=\"getTestResult(group.data, model).success\" type=\"success\">\n                    {{ $t('action_test_success') }}\n                  </el-tag>\n                  <el-tag v-else type=\"danger\">{{ $t('action_test_failed') }}</el-tag>\n                </template>\n                <div class=\"flex-1\" />\n                <el-button\n                  :loading=\"getTestResult(group.data, model)?.loading\"\n                  class=\"group-hover:visible invisible\"\n                  type=\"primary\"\n                  link\n                  @click=\"handleTest(model, group.data)\"\n                >\n                  {{ $t('action_test') }}\n                </el-button>\n                <ElIcon\n                  class=\"flex-none cursor-pointer hover:opacity-70\"\n                  size=\"16\"\n                  color=\"#F04F4D\"\n                  @click=\"$emit('delete', group.data, model)\"\n                >\n                  <Remove />\n                </ElIcon>\n              </li>\n            </ul>\n          </ElCollapseItem>\n        </ElCollapse>\n      </template>\n      <template v-else>\n        <!-- 同一个模型下有多个模型， azure 可以添加多个 -->\n        <ElCollapse :model-value=\"['models']\" class=\"w-full !border-none\">\n          <ElCollapseItem name=\"models\">\n            <template #title>\n              <span class=\"text-[#4F5052] text-sm\">\n                {{\n                  $t('module.platform_model_models_total', {\n                    total: group.children.length,\n                  })\n                }}\n              </span>\n            </template>\n            <ul class=\"w-full flex flex-col gap-y-5 box-border overflow-auto\">\n              <div v-for=\"channel in group.children\" :key=\"channel.channelId\">\n                <li\n                  v-for=\"model in channel.modelOptions\"\n                  :key=\"model.value\"\n                  class=\"w-full box-border flex items-center gap-2 group\"\n                >\n                  <img\n                    v-if=\"model.icon\"\n                    class=\"flex-none w-[20px] h-[20px] object-contain\"\n                    :src=\"$getRealPath({ url: `/images/platform/${model.icon}.png` })\"\n                  />\n                  <label class=\"flex-none text-sm text[#1D1E1F]\">{{ model.label }}</label>\n                  <ElIcon class=\"flex-none cursor-pointer hover:opacity-70\" size=\"14\" @click=\"$emit('edit', channel)\">\n                    <Setting />\n                  </ElIcon>\n\n                  <template v-if=\"getTestResult(channel, model)\">\n                    <template v-if=\"getTestResult(channel, model).loading\"></template>\n                    <el-tag v-else-if=\"getTestResult(channel, model).success\" type=\"success\">\n                      {{ $t('action_test_success') }}\n                    </el-tag>\n                    <el-tag v-else type=\"danger\">{{ $t('action_test_failed') }}</el-tag>\n                  </template>\n\n                  <div class=\"flex-1\" />\n\n                  <el-button\n                    :loading=\"getTestResult(channel, model)?.loading\"\n                    class=\"group-hover:visible invisible\"\n                    type=\"primary\"\n                    link\n                    @click=\"handleTest(model, channel)\"\n                  >\n                    {{ $t('action_test') }}\n                  </el-button>\n                  <ElIcon\n                    class=\"flex-none cursor-pointer hover:opacity-70\"\n                    size=\"16\"\n                    color=\"#F04F4D\"\n                    @click=\"$emit('delete', channel, null)\"\n                  >\n                    <Remove />\n                  </ElIcon>\n                </li>\n              </div>\n            </ul>\n          </ElCollapseItem>\n        </ElCollapse>\n      </template>\n    </div>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { Delete, Remove, Setting } from '@element-plus/icons-vue'\nimport channelApi from '@/api/modules/channel/index'\n\ninterface ChannelGroup {\n  label: string\n  icon: string\n  channelType: number\n  multiple: boolean\n  data: any\n  children: any[]\n}\n\nwithDefaults(\n  defineProps<{\n    group: ChannelGroup\n  }>(),\n  {\n    group: () => ({\n      label: '',\n      icon: '',\n      channelType: 0,\n      multiple: false,\n      data: {},\n      children: [],\n    }),\n  }\n)\n\ndefineEmits<{\n  edit: [data: any]\n  delete: [data: any, model: any]\n  'model-edit': [{ data: any; parentData: any }]\n}>()\n\nconst testMap = ref<Record<string, { loading: boolean; success: boolean; error?: string }>>({})\n\nconst getTestKey = (data: any, model: any) => {\n  return `${data.channel_id}-${model.value}`\n}\n\nconst getTestResult = (data: any, model: any) => {\n  return testMap.value[getTestKey(data, model)]\n}\n\nconst handleTest = (model: any, data: any) => {\n  const key = getTestKey(data, model)\n  testMap.value[key] = { loading: true, success: false, error: '' }\n  return channelApi\n    .test(data.channel_id, {\n      model: model.value,\n    })\n    .then(res => {\n      testMap.value[key] = { loading: false, success: res ? res.success : false, error: res.message ?? '' }\n    })\n    .catch(() => {\n      testMap.value[key] = { loading: false, success: false }\n    })\n    .finally(() => {\n      if (testMap.value[key].success) {\n        ElMessage.success(window.$t('platform.model_test_success', { platform: data.name || data.label }))\n      } else {\n        ElMessage.error(window.$t('platform.failed_tip', { error: testMap.value[key].error }))\n      }\n    })\n}\n</script>\n"
  },
  {
    "path": "web/console/src/views/platform/components/model-save-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('action_setting') + (model_config?.label ? $t(model_config.label) : '')\"\n    :close-on-click-modal=\"false\"\n    width=\"600px\"\n    center\n    destroy-on-close\n    append-to-body\n    @close=\"() => close()\"\n  >\n    <ElForm ref=\"form_ref\" :model=\"form\" label-position=\"top\" require-asterisk-position=\"right\">\n      <template v-for=\"config in model_schemas\" :key=\"config.prop\">\n        <ElFormItem\n          v-if=\"config.type === 'input'\"\n          :label=\"$t(config.label)\"\n          :prop=\"config.prop\"\n          :required=\"config.required\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n        >\n          <ElInput v-model=\"form[config.prop]\" size=\"large\" :placeholder=\"$t(config.placeholder || '')\" />\n        </ElFormItem>\n        <ElFormItem\n          v-else-if=\"config.type === 'url'\"\n          :label=\"$t(config.label)\"\n          :prop=\"config.prop\"\n          :required=\"config.required\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text', 'link'] })\"\n        >\n          <ElInput v-model=\"form[config.prop]\" size=\"large\" :placeholder=\"$t(config.placeholder || '')\" />\n        </ElFormItem>\n        <ElFormItem\n          v-else-if=\"config.type === 'select'\"\n          :label=\"$t(config.label)\"\n          :prop=\"config.prop\"\n          :required=\"config.required\"\n          :rules=\"generateInputRules({ message: 'form_select_placeholder' })\"\n        >\n          <template v-if=\"config.multiple\">\n            <ul v-loading=\"loading\" class=\"w-full max-h-[42vh] pr-1 flex flex-col gap-2 box-border overflow-auto\">\n              <div v-if=\"!model_options.length\" class=\"text-[#9A9A9A] w-full text-center py-4\">\n                {{ $t('module.platform_model_models_empty') }}\n              </div>\n              <li v-for=\"opt in model_options\" :key=\"opt.value\" class=\"w-full flex items-center gap-1.5\">\n                <img\n                  v-if=\"opt.icon\"\n                  class=\"flex-none w-[20px] h-[20px] object-contain\"\n                  :src=\"$getRealPath({ url: `/images/platform/${opt.icon}.png` })\"\n                />\n                <label class=\"text-sm text[#1D1E1F]\">{{ opt.label }}</label>\n                <div class=\"flex-1\" />\n                <ElSwitch\n                  :model-value=\"form.models.includes(opt.value)\"\n                  size=\"small\"\n                  @change=\"handleModelChange(opt.value)\"\n                />\n              </li>\n            </ul>\n          </template>\n          <ElSelect\n            v-else\n            v-model=\"form[config.prop]\"\n            size=\"large\"\n            :placeholder=\"$t(config.placeholder || '')\"\n            filterable\n          >\n            <ElOption v-for=\"opt in model_options\" :key=\"opt.id\" :label=\"opt.label\" :value=\"opt.id\" />\n          </ElSelect>\n        </ElFormItem>\n      </template>\n    </ElForm>\n    <template #footer>\n      <div class=\"pb-4 flex items-center justify-center\">\n        <ElButton v-debounce class=\"w-24 h-9\" type=\"primary\" @click=\"handleSave\">\n          {{ $t('action_save') }}\n        </ElButton>\n        <ElButton class=\"w-24 h-9 text-[#1D1E1F]\" type=\"info\" plain @click=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport type { FormInstance } from 'element-plus'\nimport { getFormConfig } from '@/constants/platform/model'\nimport type { FormConfig } from '@/constants/platform/model'\n\nimport { generateInputRules } from '@/utils/form-rule'\n\nimport { useChannelStore } from '@/stores'\nimport type { ModelConfig, ModelOption } from '@/constants/platform/config'\nimport { getModelByChannelType } from '@/constants/platform/config'\n\nconst emit = defineEmits<{\n  (e: 'success'): void\n}>()\nconst channel_store = useChannelStore()\nconst form_ref = ref<FormInstance>()\n\nconst visible = ref(false)\n\nconst model_schemas = ref<FormConfig[]>([])\nconst model_options = ref<ModelOption[]>([])\nconst model_config = ref<ModelConfig>({})\n\n// 模型是否单选\nconst select_single_model = ref(false)\nconst default_form = {\n  type: 0,\n  priority: 0,\n  weight: 0,\n  key: '',\n  name: '',\n  other: '',\n  base_url: '',\n  models: [],\n  model_mapping: '',\n  config: {},\n}\nconst form = ref<{\n  [key: string]: any\n}>({ ...default_form })\n\nconst loading = ref(false)\n\nconst clearForm = () => {\n  form.value = { ...default_form }\n}\nconst initForm = (data: any = {}) => {\n  form.value.type = data.channel_type\n  model_schemas.value = getFormConfig(form.value.type)\n  for (const schema of model_schemas.value) {\n    if (schema.type === 'select' && schema.prop === 'models') {\n      select_single_model.value = !schema.multiple || false\n      if (schema.multiple) form.value.models = (data.models || '').toString().split(',').filter(Boolean)\n      else form.value.models = (data.models || '').toString()\n    }\n  }\n}\n\nconst assignForm = (data: any = {}) => {\n  if (!data.channel_id) return\n  form.value.base_url = data.base_url\n  form.value.key = data.key\n  form.value.name = data.name\n  form.value.other = data.other\n  form.value.models = select_single_model.value ? (data.models || '').toString() : data.models\n  form.value.weight = data.weight\n  form.value.priority = data.priority\n  form.value.config = data.config || {}\n  form.value.model_mapping = data.model_mapping || ''\n  form.value.channel_id = data.channel_id\n}\n\nconst loadModelList = async () => {\n  loading.value = true\n  const model_list = await channel_store.loadChannelModels(model_config.value.owner).finally(() => {\n    loading.value = false\n  })\n  model_options.value = model_list.map((item: ModelOption) => {\n    item.value = item.id || ''\n    item.label = item.label || item.value\n    item.icon = item.icon || ''\n    if (!form.value.channel_id && Array.isArray(form.value.models)) form.value.models.push(item.value)\n    return item\n  })\n}\n\nconst open = async (data: any = {}) => {\n  model_config.value = getModelByChannelType(data.channel_type) || {}\n  clearForm()\n  initForm(data)\n  assignForm(data)\n\n  visible.value = true\n  loadModelList()\n}\n\nconst close = () => {\n  visible.value = false\n}\n\nconst handleModelChange = (value: string) => {\n  if (Array.isArray(form.value.models)) {\n    if (form.value.models.includes(value)) form.value.models = form.value.models.filter(item => item !== value)\n    else form.value.models.push(value)\n  } else {\n    form.value.models = value\n  }\n}\n\nconst handleSave = () => {\n  return form_ref.value?.validate().then(() => {\n    return channel_store\n      .save({\n        data: {\n          ...form.value,\n        },\n      })\n      .then(() => {\n        ElMessage.success(window.$t('action_save_success'))\n        emit('success')\n        close()\n      })\n  })\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/platform/components/model-select-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('module.platform_model_add')\"\n    :close-on-click-modal=\"false\"\n    width=\"700px\"\n    destroy-on-close\n    append-to-body\n  >\n    <ul class=\"flex flex-col gap-3 mb-8 pb-1 overflow-auto max-h-[60vh] pr-1\">\n      <li\n        v-for=\"opt in channel_options\"\n        :key=\"opt.id\"\n        class=\"flex items-center gap-4 py-5 px-6 border rounded box-border\"\n      >\n        <img\n          class=\"flex-none w-[40px] h-[40px] object-contain\"\n          :src=\"$getRealPath({ url: `/images/platform/${opt.icon}.png` })\"\n        />\n        <div class=\"flex-1 text-[#1B2B51] font-semibold\">\n          {{ $t(opt.label) }}\n        </div>\n        <ElButton\n          class=\"flex-none !border-none !px-5 text-[#3664EF] bg-[#F6F7F8]\"\n          :class=\"opt.isAdd ? '!text-[#9A9A9A] !bg-[#F6F7F8]' : ''\"\n          type=\"primary\"\n          plain\n          size=\"large\"\n          :disabled=\"opt.isAdd\"\n          @click=\"handleAdd(opt)\"\n        >\n          {{ $t(opt.isAdd ? 'action_add_success' : 'action_add') }}\n        </ElButton>\n      </li>\n    </ul>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\n\nimport { models } from '@/constants/platform/config';\n\nconst props = withDefaults(\n  defineProps<{\n    list: unknown[]\n  }>(),\n  {\n    list: () => [],\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'add', opt: unknown): void\n}>()\n\nconst visible = ref(false)\n\nconst channel_options = computed(() => {\n  return Object.values(models).map(item => {\n    return {\n      ...item,\n      isAdd: item.multiple ? false : props.list.some(a => a.channel_type === item.channelType),\n    }\n  })\n})\n\nconst handleAdd = (opt: unknown) => {\n  emits('add', opt)\n}\n\nconst open = () => {\n  visible.value = true\n}\nconst close = () => {\n  visible.value = false\n}\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/console/src/views/platform/components/model-setting-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"model_visible\"\n    :title=\"$t('module.platform_model_models_edit')\"\n    :close-on-click-modal=\"false\"\n    width=\"600px\"\n    destroy-on-close\n    append-to-body\n  >\n    <ElForm ref=\"model_form_ref\" :model=\"model_form\" label-position=\"top\">\n      <ElFormItem\n        :label=\"$t('module.platform_model_models_id')\"\n        prop=\"id\"\n        class=\"is-required\"\n        :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n      >\n        <ElInput v-model=\"model_form.id\" size=\"large\" disabled :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('module.platform_model_models_name')\" prop=\"name\">\n        <ElInput v-model=\"model_form.name\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n    </ElForm>\n    <template #footer>\n      <div class=\"pb-4 flex items-center justify-center\">\n        <ElButton\n          class=\"w-24 h-9\"\n          type=\"primary\"\n          :loading=\"submitting || loading\"\n          @click=\"() => onSave({ action: 'model_edit' })\"\n        >\n          {{ $t('action_save') }}\n        </ElButton>\n        <ElButton class=\"w-24 h-9 text-[#1D1E1F]\" type=\"info\" plain @click=\"() => close({ action: 'model_edit' })\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref } from 'vue'\nimport { useChannelStore } from '@/stores'\nimport { generateInputRules } from '@/utils/form-rule'\n\ninterface ModelData {\n  id?: string\n  value?: string\n  label?: string\n  icon?: string\n  models?: string[]\n  config?: {\n    model_alias_map?: Record<string, string>\n  }\n  channel_id?: string\n  key?: string\n  base_url?: string\n  type?: string\n  other?: string\n  name?: string\n  organization_id?: string\n}\n\nconst emits = defineEmits<{\n  (e: 'success', result: { action: 'add' | 'edit' | 'model_edit'; data: any }): void\n}>()\n\nconst channel_store = useChannelStore()\nconst model_form_ref = ref()\nconst loading = ref(false)\nconst submitting = ref(false)\n\nconst origin_data = ref<ModelData>({})\nconst model_visible = ref(false)\nconst model_form = reactive({\n  id: '',\n  name: '',\n  channel_type: 0,\n})\n\nconst open = async ({ data = {} as ModelData } = {}) => {\n  model_form.id = data.id || data.value || ''\n  model_form.name = data.label || data.name || ''\n  model_form.channel_type = data.channel_type\n  model_visible.value = true\n  origin_data.value = data\n}\n\nconst close = () => {\n  model_visible.value = false\n}\n\nconst onSave = () => {\n  model_form_ref.value.validate(async (valid: boolean) => {\n    if (!valid) return\n    let { id = '', name = '', channel_type } = model_form\n    name = name.trim()\n    const config = origin_data.value.config || {}\n    config.model_alias_map = {\n      ...(config.model_alias_map || {}),\n      [id]: name,\n    }\n    if (!config.model_alias_map[id]) delete config.model_alias_map[id]\n    if (!Object.keys(config.model_alias_map).length) delete config.model_alias_map\n    const data = {\n      channel_id: origin_data.value.channel_id,\n      config,\n      key: origin_data.value.key,\n      base_url: origin_data.value.base_url,\n      models: origin_data.value.models,\n      name: origin_data.value.name,\n      other: origin_data.value.other,\n      type: channel_type,\n      custom_config: origin_data.value.custom_config ? JSON.stringify(origin_data.value.custom_config) : '',\n    }\n    submitting.value = true\n    await channel_store.save({ data }).finally(() => {\n      submitting.value = false\n    })\n    emits('success', { action: 'model_edit', data: { id, name: name || id } })\n    ElMessage.success(window.$t('action_save_success'))\n    close()\n  })\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/platform/components/provider-authorize-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('action_authorize') + $t(originData.label || '')\"\n    :close-on-click-modal=\"false\"\n    width=\"720px\"\n    destroy-on-close\n    append-to-body\n    @close=\"close\"\n  >\n    <ElForm ref=\"formRef\" :model=\"form\" :rules=\"formRules\" label-position=\"top\">\n      <!-- 提示信息 -->\n      <div class=\"w-full flex flex-col gap-3 bg-[#F6F9FC] p-5 mb-4 box-border text-sm text-[#4F5052]\">\n        <div class=\"whitespace-pre-wrap leading-7\" v-html=\"guideHtml\" />\n        <ElIcon\n          v-if=\"isCozeCN\"\n          ref=\"copyRef\"\n          class=\"cursor-pointer ml-1 mt-1 text-[#4F5052] hover:text-[#3664EF]\"\n          :size=\"14\"\n          @click=\"handleCopy(coze_auth_url)\"\n        >\n          <CopyDocument />\n        </ElIcon>\n      </div>\n      <el-form-item prop=\"name\" :label=\"$t('module.website_info_name')\">\n        <ElInput v-model=\"form.name\" size=\"large\" :placeholder=\"$t('module.website_info_name_placeholder')\" />\n      </el-form-item>\n      <template v-for=\"option in schemaOptions\" :key=\"option.prop\">\n        <ElFormItem :label=\"option.label\" :prop=\"option.prop\">\n          <ElInput\n            :model-value=\"getFormValue(option.prop)\"\n            size=\"large\"\n            :placeholder=\"option.placeholder\"\n            @update:model-value=\"setFormValue(option.prop, $event)\"\n          />\n        </ElFormItem>\n      </template>\n    </ElForm>\n\n    <template #footer>\n      <div v-if=\"isCozeCN\" class=\"text-center text-sm text-[#9A9A9A]\">\n        {{ $t('platform_auth.coze_cn.tip_1') }}\n      </div>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton v-debounce class=\"w-[96px] h-[36px]\" type=\"primary\" @click=\"handleConfirm\">\n          {{ $t('action_confirm') }}\n        </ElButton>\n        <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, reactive, ref, shallowRef } from 'vue'\nimport type { FormInstance, FormRules } from 'element-plus'\nimport { CopyDocument } from '@element-plus/icons-vue'\nimport { ElIcon } from 'element-plus'\nimport { useEnterpriseStore } from '@/stores'\nimport { copyToClip } from '@/utils/copy'\nimport { api_host } from '@/utils/config'\nimport { generateFormRules } from '@/utils/form-rule.v2'\n\nimport { PROVIDER_VALUE } from '@/constants/platform/provider'\nimport type { ProviderValueType } from '@/constants/platform/provider'\n\nimport providersApi from '@/api/modules/providers'\nimport type { ProviderCreateRequest } from '@/api/modules/providers/types'\n\n// 类型定义\ninterface AuthForm extends Omit<ProviderCreateRequest, 'configs'> {\n  configs: Record<string, string>\n}\n\ninterface ProviderData {\n  name?: string\n  provider_type?: ProviderValueType\n  provider_id?: number\n  configs?: Record<string, string>\n  base_url?: string\n  is_authorized?: number\n  access_token?: string\n  label?: string\n  id?: number\n}\n\ninterface PlatformConfig {\n  i18n_key: string\n  tip: {\n    url: string\n    needRedirectUrl?: boolean\n  }\n  fields: {\n    label: string\n    prop: string\n    placeholder: string\n  }[]\n  setFormData?: (form: AuthForm) => void\n  needsConfirmation?: boolean\n  getAuthUrl?: (form: AuthForm, redirectUrl: string, provider_id: number) => string\n}\n\n// 事件定义\nconst emits = defineEmits<{\n  (e: 'success'): void\n}>()\n\n// 状态管理\nconst enterpriseStore = useEnterpriseStore()\nconst copyRef = shallowRef<InstanceType<typeof ElIcon> | null>(null)\nconst formRef = shallowRef<FormInstance>()\nconst visible = ref(false)\nconst form = reactive<AuthForm>({\n  name: '',\n  configs: {},\n  base_url: '',\n  access_token: '',\n  provider_type: 0,\n})\nconst originData = ref<ProviderData>({})\n\n// 平台配置\nconst PLATFORM_CONFIGS: Record<ProviderValueType, PlatformConfig> = {\n  [PROVIDER_VALUE.APP_BUILDER]: {\n    i18n_key: 'platform_auth.app_builder.tip',\n    tip: { url: 'https://qianfan.cloud.baidu.com/appbuilder' },\n    fields: [\n      {\n        label: window.$t('module.platform_tool_api_key'),\n        prop: 'access_token',\n        placeholder: window.$t('module.platform_tool_api_key_placeholder'),\n      },\n    ],\n  },\n  [PROVIDER_VALUE.COZE_CN]: {\n    i18n_key: 'platform_auth.coze_cn.tip',\n    tip: {\n      url: 'https://www.coze.cn/open/oauth/apps',\n      needRedirectUrl: true,\n    },\n    fields: [\n      {\n        label: window.$t('module.platform_auth_client_id'),\n        prop: 'configs.client_id',\n        placeholder: window.$t('module.platform_auth_client_id_placeholder'),\n      },\n      {\n        label: window.$t('module.platform_auth_client_secret'),\n        prop: 'configs.client_secret',\n        placeholder: window.$t('module.platform_auth_client_secret_placeholder'),\n      },\n    ],\n    needsConfirmation: true,\n    setFormData: (form: AuthForm) => {\n      form.access_token = ''\n    },\n    getAuthUrl: (form: AuthForm, redirectUrl: string, provider_id: number) =>\n      `https://www.coze.cn/api/permission/oauth2/authorize?response_type=code&client_id=${form.configs.client_id}&redirect_uri=${encodeURIComponent(redirectUrl)}&state=${encodeURIComponent(`provider_id=${provider_id.toString()}`)}`,\n  },\n  [PROVIDER_VALUE.COZE_OSV]: {\n    i18n_key: 'platform_auth.coze_osv.tip',\n    tip: { url: 'https://www.53ai.com/' },\n    fields: [\n      {\n        label: window.$t('module.platform_tool_api_endpoint'),\n        prop: 'base_url',\n        placeholder: window.$t('module.platform_model_base_url_placeholder'),\n      },\n      {\n        label: window.$t('module.platform_tool_token'),\n        prop: 'access_token',\n        placeholder: window.$t('module.platform_tool_token_placeholder'),\n      },\n    ],\n  },\n  [PROVIDER_VALUE['53AI']]: {\n    i18n_key: 'platform_auth.53ai.tip',\n    tip: { url: 'https://www.53ai.com/' },\n    fields: [\n      {\n        label: window.$t('module.platform_auth_url'),\n        prop: 'base_url',\n        placeholder: window.$t('module.platform_model_base_url_placeholder_53ai'),\n      },\n      {\n        label: window.$t('module.platform_auth_secret'),\n        prop: 'access_token',\n        placeholder: window.$t('module.platform_tool_api_key_placeholder'),\n      },\n    ],\n    setFormData: (form: AuthForm) => {\n      form.base_url = form.base_url.trim() || 'https://api.53ai.com'\n      form.access_token = form.access_token.trim()\n    },\n  },\n  [PROVIDER_VALUE.TENCENT]: {\n    i18n_key: 'platform_auth.tencent.tip',\n    tip: { url: 'https://console.cloud.tencent.com/cam/capi/' },\n    fields: [\n      {\n        label: window.$t('module.platform_auth_url'),\n        prop: 'base_url',\n        placeholder: window.$t('module.platform_model_base_url_placeholder_53ai'),\n      },\n      {\n        label: window.$t('module.platform_auth_secret_id'),\n        prop: 'configs.secret_id',\n        placeholder: window.$t('module.platform_auth_secret_id_placeholder'),\n      },\n      {\n        label: window.$t('module.platform_auth_secret_key'),\n        prop: 'configs.secret_key',\n        placeholder: window.$t('module.platform_auth_secret_key_placeholder'),\n      },\n    ],\n    setFormData: (form: AuthForm) => {\n      form.base_url = form.base_url.trim() || 'https://wss.lke.cloud.tencent.com'\n      form.configs.region = 'ap-guangzhou'\n    },\n  },\n}\n\n// 计算属性\nconst currentConfig = computed(() => {\n  const provider_type = originData.value.provider_type\n  return typeof provider_type === 'number' ? PLATFORM_CONFIGS[provider_type] : null\n})\n\nconst isCozeCN = computed(() => originData.value.provider_type === PROVIDER_VALUE.COZE_CN)\n\nconst coze_auth_url = computed(() => {\n  const enterprise_info = enterpriseStore.info\n  return `${api_host}/api/callback/cozecn/auth/${enterprise_info.eid}`\n})\n\nconst guideHtml = computed(() => {\n  const config = currentConfig.value\n  if (!config) return ''\n\n  const tipParams: Record<string, string> = {\n    url: `<a class='text-[#5A6D9E]' href='${config.tip.url}' target='_blank'>${config.tip.url}</a>`,\n  }\n\n  if (config.tip.needRedirectUrl) {\n    tipParams.redirect_url = `<span class='text-[#F04F4D]'>${coze_auth_url.value}</span><span class='copy-hook'></span>`\n    tipParams.client_id = `<span class='text-[#F04F4D]'>${window.$t('module.platform_auth_client_id')}</span>`\n    tipParams.client_secret = `<span class='text-[#F04F4D]'>${window.$t('module.platform_auth_client_secret')}</span>`\n  }\n\n  return window.$t(config.i18n_key, tipParams)\n})\n\nconst schemaOptions = computed(() => currentConfig.value?.fields || [])\n\nconst formRules = computed(() => {\n  const rules: FormRules = {\n    name: generateFormRules({ validator: ['required'] }),\n  }\n\n  currentConfig.value?.fields.forEach(field => {\n    rules[field.prop] = generateFormRules({ validator: ['required'], message: field.placeholder })\n  })\n\n  return rules\n})\n\n// 表单值处理 - 简化逻辑\nconst getFormValue = (prop: string) => {\n  const isConfigProp = prop.startsWith('configs.')\n  const key = isConfigProp ? prop.replace('configs.', '') : prop\n  return isConfigProp ? form.configs[key] || '' : (form as any)[key] || ''\n}\n\nconst setFormValue = (prop: string, value: string) => {\n  const isConfigProp = prop.startsWith('configs.')\n  const key = isConfigProp ? prop.replace('configs.', '') : prop\n\n  if (isConfigProp) {\n    form.configs[key] = value\n  } else {\n    ;(form as any)[key] = value\n  }\n}\n\n// 方法\nconst reset = () => {\n  Object.assign(form, {\n    name: '',\n    configs: {},\n    base_url: '',\n    access_token: '',\n    provider_type: 0,\n  })\n}\n\nconst open = async ({ data = {} as ProviderData } = {}) => {\n  reset()\n  originData.value = data\n\n  // 填充表单数据\n  Object.assign(form, {\n    name: data.name || '',\n    provider_type: data.provider_type || 0,\n    base_url: data.base_url || '',\n    access_token: data.access_token || '',\n  })\n  Object.assign(form.configs, data.configs || {})\n\n  // 应用平台特定的表单数据处理\n  currentConfig.value?.setFormData?.(form)\n\n  visible.value = true\n\n  // 处理 Coze CN 的复制功能\n  if (isCozeCN.value) {\n    await nextTick()\n    const copy_hook_el = formRef.value?.$el.querySelector('.copy-hook')\n    if (copyRef.value?.$el && copy_hook_el) {\n      copy_hook_el.appendChild(copyRef.value.$el)\n    }\n  }\n}\n\nconst close = () => {\n  visible.value = false\n  reset()\n}\n\nconst handleCopy = async (text: string) => {\n  if (!text) return\n  await copyToClip(text)\n  ElMessage.success(window.$t('action_copy_success'))\n}\n\nconst handleAuthorization = async (auth_url: string, provider_type: ProviderValueType) => {\n  const auth_window = window.open(auth_url, '_blank', 'width=1000,height=800')\n\n  window.addEventListener('message', ({ data = {} }) => {\n    if (data.provider_type === provider_type) {\n      auth_window?.close()\n      ElMessage.success(window.$t('action_authorize_success'))\n      emits('success')\n    }\n  })\n}\n\nconst handleConfirm = async () => {\n  const valid = await formRef.value?.validate()\n  if (!valid) return\n\n  const config = currentConfig.value\n  if (!config) return\n\n  const data: ProviderCreateRequest = {\n    name: form.name,\n    provider_type: form.provider_type,\n    configs: JSON.stringify(form.configs),\n    base_url: form.base_url,\n    access_token: form.access_token,\n  }\n\n  // 检查是否需要确认\n  if (config.needsConfirmation) {\n    await ElMessageBox.confirm(window.$t('module.platform_auth_coze_confirm'), window.$t('tip'))\n  }\n  let provider_id = originData.value.provider_id\n  // 保存数据\n  if (provider_id) {\n    await providersApi.update(provider_id, data)\n  } else {\n    const result = await providersApi.create(data)\n    provider_id = result.provider_id\n  }\n\n  // 处理授权流程\n  if (config.getAuthUrl) {\n    const auth_url = config.getAuthUrl(form, coze_auth_url.value, provider_id)\n    console.log(auth_url)\n    await handleAuthorization(auth_url, originData.value.provider_type as ProviderValueType)\n  }\n\n  ElMessage.success(window.$t('action_save_success'))\n  emits('success')\n  close()\n}\n\n// 暴露方法\ndefineExpose({\n  open,\n  close,\n  reset,\n})\n</script>\n\n<style scoped>\n.el-dialog {\n  --el-dialog-padding-primary: 24px;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/platform/components/provider-card.vue",
    "content": "<template>\n  <li\n    v-loading=\"provider.channelLoading\"\n    class=\"flex-none min-w-[246px] w-[24%] h-[178px] flex flex-col border rounded box-border overflow-hidden\"\n  >\n    <div class=\"flex items-center gap-4 p-5 box-border\">\n      <img\n        class=\"flex-none size-10 overflow-hidden\"\n        :src=\"$getRealPath({ url: `/images/platform/${provider.icon}.png` })\"\n      />\n      <div class=\"text-[#1B2B51] font-semibold\">\n        {{ provider.label }}\n      </div>\n    </div>\n    <div class=\"text-xs text-[#4F5052] px-5 box-border\">\n      <!-- <template> -->\n      {{ $t('connecting_agent_total', { total: provider.agentTotal }) }}\n      <!-- </template> -->\n      <!-- <template v-else-if=\"provider.connected && provider.authed_time\">\n        {{ $t('connected') }} · {{ $t('authorized_at') }} {{ provider.authed_time.slice(0, 16) }}\n      </template>\n      <template v-else-if=\"provider.connected\">\n        {{ $t('connecting') }}\n      </template>\n      <template v-else>\n        {{ $t('not_connected') }}\n      </template> -->\n    </div>\n    <div class=\"flex-1 w-full\" />\n    <div class=\"w-full h-11 flex border-t box-border\">\n      <template v-if=\"!provider.auth\">\n        <ElButton\n          class=\"flex-1 h-[46px] text-[#3664EF] !border-none !outline-none rounded-none\"\n          link\n          size=\"default\"\n          @click.stop=\"$emit('authorize', { data: provider })\"\n        >\n          {{ $t('action_manage') }}\n        </ElButton>\n        <ElDivider class=\"!h-full\" direction=\"vertical\" />\n        <ElButton\n          v-version=\"{ module: VERSION_MODULE.AGENT, count: allTotal, content: $t('version.agent_limit') }\"\n          class=\"flex-1 h-[46px] !border-none !outline-none rounded-none\"\n          link\n          size=\"default\"\n          @click.stop=\"$emit('add', { data: provider })\"\n        >\n          {{ $t('action_add') }}\n        </ElButton>\n      </template>\n      <template v-else-if=\"provider.connected\">\n        <ElButton\n          class=\"flex-1 h-[46px] !border-none !outline-none rounded-none\"\n          link\n          type=\"primary\"\n          size=\"default\"\n          @click.stop=\"$emit('authorize', { data: provider })\"\n        >\n          {{ $t('action_edit') }}\n        </ElButton>\n        <ElDivider class=\"!h-full\" direction=\"vertical\" />\n        <ElButton\n          class=\"flex-1 h-[46px] text-[#919499] !border-none !outline-none rounded-none\"\n          link\n          size=\"default\"\n          @click.stop=\"$emit('delete', { data: provider })\"\n        >\n          {{ $t('action_delete') }}\n        </ElButton>\n      </template>\n      <template v-else>\n        <ElButton\n          class=\"flex-1 h-[46px] bg-[#F3F6FE] text-[#3664EF] !border-none !outline-none rounded-none\"\n          type=\"default\"\n          size=\"default\"\n          @click.stop=\"$emit('authorize', { data: provider })\"\n        >\n          {{ $t('action_manage') }}\n        </ElButton>\n      </template>\n    </div>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { VERSION_MODULE } from '@/constants/enterprise'\n\ninterface ProviderOption {\n  id: number\n  icon: string\n  label: string\n  auth: boolean\n  connected: boolean\n  authed_time: string\n  agentTotal: number\n  channelLoading: boolean\n}\n\ndefineProps<{\n  provider: ProviderOption\n  allTotal: number\n}>()\n\ndefineEmits<{\n  authorize: [{ data: ProviderOption }]\n  add: [{ data: ProviderOption }]\n  delete: [{ data: ProviderOption }]\n}>()\n</script>\n"
  },
  {
    "path": "web/console/src/views/platform/componentsv2/model-group.vue",
    "content": "<template>\n  <li class=\"w-full p-5 border rounded box-border overflow-hidden bg-[#F8F9FA]\">\n    <div class=\"flex items-center gap-4\">\n      <img class=\"flex-none w-[40px] h-[40px] object-contain rounded-full overflow-hidden\" :src=\"group.icon\" />\n      <div class=\"flex-1 text-[#1B2B51] font-semibold\">\n        {{ group.label }}\n      </div>\n      <template v-if=\"!group.multiple\">\n        <ElButton class=\"flex-none !px-5\" type=\"default\" size=\"large\" @click.stop=\"$emit('edit', group.data)\">\n          {{ $t('action_setting') }}\n        </ElButton>\n        <ElButton\n          v-debounce\n          class=\"flex-none !ml-0 !px-3\"\n          type=\"default\"\n          size=\"large\"\n          @click.stop=\"$emit('delete', group.data, null)\"\n        >\n          <ElIcon size=\"14\">\n            <Delete />\n          </ElIcon>\n        </ElButton>\n      </template>\n    </div>\n    <div class=\"w-full flex flex-col bg-white rounded overflow-hidden gap-4 mt-6 px-5\">\n      <template v-if=\"!group.multiple\">\n        <ElCollapse :model-value=\"group.modelValue\" class=\"w-full !border-none\">\n          <ElCollapseItem v-for=\"item in group.data.group\" :key=\"item.type\" :name=\"item.type\">\n            <template #title>\n              <span class=\"text-[#4F5052] text-sm\">\n                {{\n                  $t('platform.model_tip', {\n                    total: item.options.length,\n                    type: item.typeName,\n                  })\n                }}\n              </span>\n            </template>\n            <ul class=\"w-full flex flex-col gap-y-5 box-border overflow-auto\">\n              <li\n                v-for=\"model in item.options\"\n                :key=\"model.value\"\n                class=\"w-full box-border flex items-center gap-2 group\"\n              >\n                <img v-if=\"model.icon\" class=\"flex-none size-5 object-contain\" :src=\"model.icon\" />\n                <label class=\"flex-none text-sm text[#1D1E1F]\">{{ model.label }}</label>\n                <ElIcon\n                  class=\"flex-none cursor-pointer hover:opacity-70\"\n                  size=\"14\"\n                  @click=\"$emit('model-edit', { data: model, parentData: group.data })\"\n                >\n                  <Setting />\n                </ElIcon>\n                <template v-if=\"getTestResult(group.data, model)\">\n                  <template v-if=\"getTestResult(group.data, model).loading\"></template>\n                  <el-tag v-else-if=\"getTestResult(group.data, model).success\" type=\"success\">\n                    {{ $t('action_test_success') }}\n                  </el-tag>\n                  <el-tag v-else type=\"danger\">{{ $t('action_test_failed') }}</el-tag>\n                </template>\n                <div class=\"flex-1\" />\n                <el-button\n                  :loading=\"getTestResult(group.data, model)?.loading\"\n                  class=\"group-hover:visible invisible\"\n                  type=\"primary\"\n                  link\n                  @click=\"handleTest(model, group.data)\"\n                >\n                  {{ $t('action_test') }}\n                </el-button>\n                <ElIcon\n                  class=\"flex-none cursor-pointer hover:opacity-70\"\n                  size=\"16\"\n                  color=\"#F04F4D\"\n                  @click=\"$emit('delete', group.data, model)\"\n                >\n                  <Remove />\n                </ElIcon>\n              </li>\n            </ul>\n          </ElCollapseItem>\n        </ElCollapse>\n      </template>\n      <template v-else>\n        <!-- 同一个模型下有多个模型， azure 可以添加多个 -->\n        <ElCollapse :model-value=\"['models']\" class=\"w-full !border-none\">\n          <ElCollapseItem name=\"models\">\n            <template #title>\n              <span class=\"text-[#4F5052] text-sm\">\n                {{\n                  $t('module.platform_model_models_total', {\n                    total: group.children.length,\n                  })\n                }}\n              </span>\n            </template>\n            <ul class=\"w-full flex flex-col gap-y-5 box-border overflow-auto\">\n              <div v-for=\"channel in group.children\" :key=\"channel.channelId\">\n                <li\n                  v-for=\"model in channel.group\"\n                  :key=\"model.value\"\n                  class=\"w-full box-border flex items-center gap-2 group\"\n                >\n                  <img v-if=\"model.icon\" class=\"flex-none size-5 object-contain\" :src=\"model.icon\" />\n                  <label class=\"flex-none text-sm text[#1D1E1F]\">{{ model.label }}</label>\n                  <ElIcon class=\"flex-none cursor-pointer hover:opacity-70\" size=\"14\" @click=\"$emit('edit', channel)\">\n                    <Setting />\n                  </ElIcon>\n                  <template v-if=\"getTestResult(channel, model)\">\n                    <template v-if=\"getTestResult(channel, model).loading\"></template>\n                    <el-tag v-else-if=\"getTestResult(channel, model).success\" type=\"success\">\n                      {{ $t('action_test_success') }}\n                    </el-tag>\n                    <el-tag v-else type=\"danger\">{{ $t('action_test_failed') }}</el-tag>\n                  </template>\n                  <div class=\"flex-1\" />\n                  <el-button\n                    :loading=\"getTestResult(channel, model)?.loading\"\n                    class=\"group-hover:visible invisible\"\n                    type=\"primary\"\n                    link\n                    @click=\"handleTest(model, channel)\"\n                  >\n                    {{ $t('action_test') }}\n                  </el-button>\n                  <ElIcon\n                    class=\"flex-none cursor-pointer hover:opacity-70\"\n                    size=\"16\"\n                    color=\"#F04F4D\"\n                    @click=\"$emit('delete', channel, null)\"\n                  >\n                    <Remove />\n                  </ElIcon>\n                </li>\n              </div>\n            </ul>\n          </ElCollapseItem>\n        </ElCollapse>\n      </template>\n    </div>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { Delete, Remove, Setting } from '@element-plus/icons-vue'\nimport channelApi from '@/api/modules/channel/index'\n\ninterface ChannelGroup {\n  label: string\n  icon: string\n  channelType: number\n  multiple: boolean\n  data: any\n  children: any[]\n}\n\ndefineProps<{\n  group: ChannelGroup\n}>()\n\ndefineEmits<{\n  edit: [data: any]\n  delete: [data: any, model: any]\n  'model-edit': [{ data: any; parentData: any }]\n}>()\n\nconst testMap = ref<Record<string, { loading: boolean; success: boolean }>>({})\n\nconst getTestKey = (data: any, model: any) => {\n  return `${data.channel_id}-${model.value}`\n}\n\nconst getTestResult = (data: any, model: any) => {\n  return testMap.value[getTestKey(data, model)]\n}\n\nconst handleTest = (model: any, data: any) => {\n  const key = getTestKey(data, model)\n  testMap.value[key] = { loading: true, success: false }\n  return channelApi\n    .test(data.channel_id, {\n      model: model.value,\n    })\n    .then(res => {\n      testMap.value[key] = { loading: false, success: res ? res.success : false }\n    })\n    .catch(() => {\n      testMap.value[key] = { loading: false, success: false }\n    })\n    .finally(() => {\n      if (testMap.value[key].success) {\n        ElMessage.success(window.$t('platform.model_test_success', { platform: data.name || data.label }))\n      } else {\n        ElMessage.error(window.$t('platform.model_test_failed'))\n      }\n    })\n}\n</script>\n"
  },
  {
    "path": "web/console/src/views/platform/componentsv2/model-save-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('action_setting') + (modelConfig?.label ? $t(modelConfig.label) : '')\"\n    :close-on-click-modal=\"false\"\n    width=\"600px\"\n    center\n    destroy-on-close\n    append-to-body\n    @close=\"() => close()\"\n  >\n    <ElForm ref=\"form_ref\" :model=\"form\" label-position=\"top\" require-asterisk-position=\"right\">\n      <template v-for=\"config in modelSchemas\" :key=\"config.prop\">\n        <ElFormItem\n          v-if=\"config.type === 'input'\"\n          :label=\"$t(config.label)\"\n          :prop=\"config.prop\"\n          :required=\"config.required\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n        >\n          <ElInput v-model=\"form[config.prop]\" size=\"large\" :placeholder=\"$t(config.placeholder || '')\" />\n        </ElFormItem>\n        <ElFormItem\n          v-else-if=\"config.type === 'url'\"\n          :label=\"$t(config.label)\"\n          :prop=\"config.prop\"\n          :required=\"config.required\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['text', 'link'] })\"\n        >\n          <ElInput v-model=\"form[config.prop]\" size=\"large\" :placeholder=\"$t(config.placeholder || '')\" />\n        </ElFormItem>\n        <ElFormItem\n          v-else-if=\"config.type === 'select'\"\n          :label=\"$t(config.label)\"\n          :prop=\"config.prop\"\n          :required=\"config.required\"\n          :rules=\"generateInputRules({ message: 'form_select_placeholder' })\"\n        >\n          <ul v-loading=\"loading\" class=\"w-full max-h-[42vh] pr-1 flex flex-col gap-2 box-border overflow-auto\">\n            <div v-if=\"!modelOptions.length\" class=\"text-[#9A9A9A] w-full text-center py-4\">\n              {{ $t('module.platform_model_models_empty') }}\n            </div>\n            <template v-for=\"opt in modelOptions\" :key=\"opt.value\">\n              <div class=\"text-sm text-[#1D1E1F] text-opacity-60\">{{ opt.model_type_name }}</div>\n              <template v-for=\"item in opt.models\" :key=\"item.model_id\">\n                <li class=\"w-full flex items-center gap-1.5\">\n                  <img v-if=\"item.icon\" class=\"flex-none w-[20px] h-[20px] object-contain\" :src=\"item.icon\" />\n                  <label class=\"text-sm text[#1D1E1F]\">{{ item.label }}</label>\n                  <div class=\"flex-1\" />\n                  <ElSwitch\n                    :model-value=\"form.models.includes(item.value)\"\n                    size=\"small\"\n                    @change=\"handleModelChange(item.value)\"\n                  />\n                </li>\n              </template>\n            </template>\n          </ul>\n        </ElFormItem>\n      </template>\n    </ElForm>\n    <template #footer>\n      <div class=\"pb-4 flex items-center justify-center\">\n        <ElButton v-debounce class=\"w-24 h-9\" type=\"primary\" @click=\"handleSave\">\n          {{ $t('action_save') }}\n        </ElButton>\n        <ElButton class=\"w-24 h-9 text-[#1D1E1F]\" type=\"info\" plain @click=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport type { FormInstance } from 'element-plus'\nimport { getFormConfig } from '@/constants/platform/model'\nimport type { FormConfig } from '@/constants/platform/model'\n\nimport { generateInputRules } from '@/utils/form-rule'\n\nimport type { ModelConfig } from '@/constants/platform/config'\nimport { getModelByChannelType } from '@/constants/platform/config'\nimport channelApi, { type ModelOption } from '@/api/modules/channel/index'\nimport { deepCopy } from '@/utils'\n\nconst props = withDefaults(\n  defineProps<{\n    modelList: ModelOption[]\n  }>(),\n  {\n    modelList: () => [],\n  }\n)\nconst emit = defineEmits<{\n  (e: 'success'): void\n}>()\nconst form_ref = ref<FormInstance>()\n\nconst visible = ref(false)\n\nconst modelSchemas = ref<FormConfig[]>([])\nconst modelOptions = ref<ModelOption[]>([])\nconst modelConfig = ref<ModelConfig>({})\n\n// 模型是否单选\nconst isSingleModel = ref(false)\nconst default_form = {\n  type: 0,\n  priority: 0,\n  weight: 0,\n  key: '',\n  name: '',\n  other: '',\n  base_url: '',\n  models: [],\n  model_mapping: '',\n  custom_config: '',\n  config: {},\n}\nconst form = ref<{\n  [key: string]: any\n}>({ ...default_form })\n\nconst loading = ref(false)\n\nconst clearForm = () => {\n  form.value = { ...default_form }\n}\nconst initForm = (data: any = {}) => {\n  form.value.type = data.channel_type\n  modelSchemas.value = getFormConfig(form.value.type)\n  for (const schema of modelSchemas.value) {\n    if (schema.type === 'select' && schema.prop === 'models') {\n      form.value.models = (data.models || '').toString().split(',').filter(Boolean)\n    } else if (schema.default) {\n      form.value[schema.prop] = schema.default\n    }\n  }\n}\n\nconst assignForm = (data: any = {}) => {\n  if (!data.channel_id) return\n  const models = Object.keys(data.custom_config).map(item => `${data.custom_config[item]}_${item}`)\n\n  form.value.base_url = data.base_url\n  form.value.key = data.key\n  form.value.name = data.name\n  form.value.other = data.other\n  form.value.models = models\n\n  form.value.weight = data.weight\n  form.value.priority = data.priority\n  form.value.config = data.config || {}\n  form.value.model_mapping = data.model_mapping || ''\n  form.value.channel_id = data.channel_id\n}\n\nconst loadModelList = async () => {\n  const models = props.modelList.find(item => item.channel_type === form.value.type)\n  if (!models) return\n  modelOptions.value = deepCopy(models.categories).map(item => {\n    return {\n      ...item,\n      models: item.models.map(model => {\n        return {\n          ...model,\n          value: `${item.model_type}_${model.model_id}`,\n          label: model.model_name,\n        }\n      }),\n    }\n  })\n}\n\nconst open = async (data: any = {}) => {\n  modelConfig.value = getModelByChannelType(data.channel_type) || {}\n  clearForm()\n  initForm(data)\n  assignForm(data)\n\n  visible.value = true\n  loadModelList()\n}\n\nconst close = () => {\n  visible.value = false\n}\n\nconst handleModelChange = (value: string) => {\n  if (form.value.models.includes(value)) form.value.models = form.value.models.filter(item => item !== value)\n  else form.value.models.push(value)\n}\n\nconst handleSave = () => {\n  return form_ref.value?.validate().then(async () => {\n    const data = deepCopy(form.value)\n    const custom_config: Record<string, string> = {}\n    const models: string[] = []\n    if (isSingleModel.value) {\n      const [model_type, model_id] = data.models.split('_')\n      custom_config[model_id] = model_type\n      models.push(model_id)\n    } else {\n      data.models.forEach((item: string) => {\n        const [model_type, model_id] = item.split('_')\n        custom_config[model_id] = model_type\n        models.push(model_id)\n      })\n    }\n    data.models = models.join(',')\n    data.config = JSON.stringify(data.config)\n    data.custom_config = JSON.stringify(custom_config)\n    if (data.channel_id) {\n      await channelApi.update(data.channel_id, data)\n    } else {\n      await channelApi.create(data)\n    }\n\n    ElMessage.success(window.$t('action_save_success'))\n    emit('success')\n    close()\n  })\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/platform/componentsv2/model-select-dialog.vue",
    "content": "<template>\n  <ElDrawer\n    v-model=\"visible\"\n    :title=\"$t('module.platform_model_add')\"\n    :close-on-click-modal=\"false\"\n    size=\"700px\"\n    destroy-on-close\n    append-to-body\n  >\n    <ul class=\"flex flex-col gap-3\">\n      <li\n        v-for=\"opt in channel_options\"\n        :key=\"opt.platform_id\"\n        class=\"h-[72px] flex items-center gap-4 py-5 px-6 rounded bg-[#F8F9FA]\"\n      >\n        <img class=\"flex-none size-10 object-contain\" :src=\"opt.icon\" />\n        <div class=\"flex-1 text-[#1B2B51] font-semibold\">\n          {{ $t(opt.platform_name) }}\n        </div>\n        <ElButton\n          class=\"flex-none !border-none\"\n          type=\"primary\"\n          plain\n          size=\"large\"\n          :disabled=\"opt.isAdd\"\n          @click=\"handleAdd(opt)\"\n        >\n          {{ $t(opt.isAdd ? 'action_add_success' : 'action_add') }}\n        </ElButton>\n      </li>\n    </ul>\n  </ElDrawer>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nimport type { ModelOption } from '@/api/modules/channel/index'\n\nconst props = withDefaults(\n  defineProps<{\n    list: unknown[]\n    modelList: ModelOption[]\n  }>(),\n  {\n    list: () => [],\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'add', opt: unknown): void\n}>()\n\nconst visible = ref(false)\n\nconst channel_options = computed(() => {\n  return props.modelList.map(item => {\n    return {\n      ...item,\n      isAdd: item.can_multiple ? false : props.list.some(a => a.channel_type === item.channel_type),\n    }\n  })\n})\n\nconst handleAdd = (opt: unknown) => {\n  emits('add', opt)\n  visible.value = false\n}\n\nconst open = () => {\n  visible.value = true\n}\nconst close = () => {\n  visible.value = false\n}\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/console/src/views/platform/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.platform')\" />\n    <div class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border max-h-[calc(100vh-100px)] overflow-auto\">\n      <!-- 平台列表 -->\n      <!-- #ifndef KM -->\n      <template v-for=\"group in providerGroupList\" :key=\"group.label\">\n        <h2 class=\"font-semibold text-[#1D1E1F] mb-6\">\n          {{ $t(group.label) }}\n        </h2>\n        <ul class=\"flex flex-wrap gap-4 mb-8\">\n          <ProviderCard\n            v-for=\"provider in group.children\"\n            :key=\"provider.id\"\n            :provider=\"provider\"\n            :all-total=\"providerTotal\"\n            @authorize=\"handleProviderAuthorize\"\n            @add=\"handleAgentAdd\"\n            @delete=\"handleProviderDelete\"\n          />\n        </ul>\n      </template>\n      <!-- #endif -->\n\n      <!-- 大模型列表 -->\n      <h2 class=\"w-full flex items-center font-semibold text-[#1D1E1F] mb-6\">\n        <div class=\"flex-1\">\n          {{ $t('module.platform_model') }}\n        </div>\n      </h2>\n      <ul v-loading=\"channelLoading\" class=\"w-full flex flex-col gap-4 mb-8\">\n        <ModelGroup\n          v-for=\"group in channelList\"\n          :key=\"group.channelType\"\n          :group=\"group\"\n          @edit=\"handleModelEdit\"\n          @delete=\"handleModelDelete\"\n          @model-edit=\"onModelEdit\"\n        />\n        <ElButton class=\"flex-none !border-none w-[106px]\" type=\"primary\" plain size=\"large\" @click=\"handleModelSelect\">\n          + {{ $t('action_add') }}\n        </ElButton>\n      </ul>\n    </div>\n  </Layout>\n\n  <ModelSaveDialog ref=\"modelSaveRef\" @success=\"loadModelList\" />\n  <ModelSelectDialog ref=\"modelSelectRef\" :list=\"channelList\" @add=\"handleModelAdd\" />\n  <ModelSettingDialog ref=\"modelSettingRef\" @success=\"loadModelList\" />\n\n  <AuthListDrawer ref=\"authListDrawerRef\" @change=\"loadProviderList\" />\n  <AgentListDrawer ref=\"agentListDrawerRef\" @change=\"onAgentListChange\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\n\nimport AuthListDrawer from './components/auth-list-drawer.vue'\nimport AgentListDrawer from './components/agent-list-drawer.vue'\n\nimport ModelSaveDialog from './components/model-save-dialog.vue'\nimport ModelSelectDialog from './components/model-select-dialog.vue'\nimport ModelSettingDialog from './components/model-setting-dialog.vue'\n\nimport ProviderCard from './components/provider-card.vue'\nimport ModelGroup from './components/model-group.vue'\n\nimport type { ModelConfig, ProviderConfig } from '@/constants/platform/config'\nimport { getModelByChannelType, getModelChannelTypes, getProvidersByAuth } from '@/constants/platform/config'\nimport { agentApi, channelApi, providerApi } from '@/api'\nimport providersApi from '@/api/modules/providers/index'\nimport { PROVIDER_VALUE } from '@/constants/platform/provider'\nimport { isInternalNetwork } from '@/utils'\nimport TipConfirm from '@/components/TipConfirm/setup'\n\n// 类型定义\ninterface ProviderOption extends ProviderConfig {\n  agentTotal: number\n  channelLoading: boolean\n  provider_id?: number\n}\n\ninterface ChannelGroup {\n  label: string\n  icon: string\n  channelType: number\n  multiple: boolean\n  data: any\n  children: any[]\n}\n\ninterface ProviderGroup {\n  label: string\n  children: ProviderOption[]\n}\n\n// 工具函数\nconst createProviderOption = (item: ProviderConfig): ProviderOption => ({\n  ...item,\n  agentTotal: 0,\n  channelLoading: !item.auth,\n})\n\n// 状态管理\nconst authProviders = ref<ProviderOption[]>(getProvidersByAuth(true).map(createProviderOption))\nconst agentProviders = ref<ProviderOption[]>(getProvidersByAuth(false).map(createProviderOption))\nconst channelList = ref<ChannelGroup[]>([])\nconst providerTotal = ref(0)\nconst channelLoading = ref(false)\n\n// 组件引用\nconst modelSaveRef = ref()\nconst modelSelectRef = ref()\nconst modelSettingRef = ref()\nconst agentListDrawerRef = ref()\nconst authListDrawerRef = ref()\n\n// 计算属性\nconst providerGroupList = computed<ProviderGroup[]>(() => {\n  const list = [...authProviders.value, ...agentProviders.value]\n  return list.reduce((acc: ProviderGroup[], item) => {\n    let group = acc.find(row => row.label === item.category)\n    if (!group) {\n      group = { label: item.category, children: [] }\n      acc.push(group)\n    }\n    group.children.push(item)\n    return acc\n  }, [])\n})\n\n// API 调用函数\nconst loadProviderList = async () => {\n  const list = await providerApi.list()\n  authProviders.value = authProviders.value.map(item => {\n    const providerData = list.filter((row: any) => item.id === row.provider_type)\n    item.agentTotal = providerData.length\n    return item\n  })\n}\n\nconst loadAllTotal = async () => {\n  const { count = 0 } = await agentApi.list({\n    params: { group_id: '-1', keyword: '', offset: 0, limit: 1 },\n  })\n  providerTotal.value = count\n}\n\nconst loadAgentListCount = async () => {\n  loadAllTotal()\n  const promises = agentProviders.value.map(async provider => {\n    const { count = 0 } = await agentApi.list({\n      params: { channel_types: provider.id.toString(), limit: 1 },\n    })\n    provider.agentTotal = count\n    provider.channelLoading = false\n  })\n  await Promise.all(promises)\n}\n\nconst loadModelList = async () => {\n  channelLoading.value = true\n  try {\n    const list = await channelApi.list()\n    channelList.value = list\n      .filter((item: any) => getModelChannelTypes().includes(item.channel_type as any))\n      .reduce((acc: ChannelGroup[], item: any) => {\n        let group = acc.find(row => row.channelType === item.channel_type)\n        if (!group) {\n          const model = getModelByChannelType(item.channel_type)\n          group = {\n            label: item.label,\n            icon: item.icon,\n            channelType: item.channel_type,\n            multiple: model.multiple,\n            data: item,\n            children: [],\n          }\n          acc.push(group)\n        }\n        group.children.push(item)\n        return acc\n      }, [])\n  } finally {\n    channelLoading.value = false\n  }\n}\n\n// 事件处理函数\nconst handleProviderAuthorize = ({ data }: { data: ProviderOption }): void => {\n  if ([PROVIDER_VALUE.COZE_CN, PROVIDER_VALUE.COZE_OSV].includes(data.id) && isInternalNetwork()) {\n    TipConfirm({\n      title: window.$t('local_config_limited_tip'),\n      content: window.$t('local_config_limited_desc', { url: window.location.href }),\n      confirmButtonText: window.$t('know_it'),\n      showCancelButton: false,\n    }).open()\n    return\n  }\n  if (data.auth) {\n    authListDrawerRef.value.open({ data })\n  } else {\n    agentListDrawerRef.value.open({ data, type: data.id })\n  }\n}\n\nconst handleAgentAdd = ({ data }: { data: ProviderOption }) => {\n  agentListDrawerRef.value.create({ data, type: data.id })\n}\n\nconst handleProviderDelete = async ({ data }: { data: ProviderOption }) => {\n  if (!data.provider_id) return\n\n  await ElMessageBox.confirm(window.$t('module.platform_delete_confirm'))\n  await providersApi.delete(data.provider_id)\n  ElMessage.success(window.$t('action_delete_success'))\n  setTimeout(() => {\n    authProviders.value = getProvidersByAuth(true).map(createProviderOption)\n    loadProviderList()\n  }, 1000)\n}\n\nconst handleModelSelect = () => modelSelectRef.value.open()\n\nconst handleModelAdd = (data: ModelConfig) => {\n  modelSaveRef.value.open({ channel_type: data.channelType })\n}\n\nconst handleModelEdit = (data: any) => modelSaveRef.value.open(data)\n\nconst handleModelDelete = async (data: any, model: any) => {\n  await ElMessageBox.confirm(window.$t('module.platform_model_delete_confirm'))\n  const isChildRemove = model && data.modelOptions.length > 1\n\n  if (isChildRemove) {\n    await channelApi.save({\n      data: {\n        channel_id: data.channel_id,\n        key: data.api_key,\n        base_url: data.base_url,\n        config: data.config || {},\n        models: data.modelOptions\n          ?.map((item: any) => item.value)\n          .filter((item: any) => item !== model.value)\n          .join(','),\n        name: data.name,\n        type: data.channel_type,\n      },\n    })\n  } else {\n    await channelApi.delete({ data: { channel_id: data.channel_id } })\n  }\n\n  ElMessage.success(window.$t('action_delete_success'))\n  loadModelList()\n}\n\nconst onModelEdit = ({ data, parentData }: { data: any; parentData: any }) => {\n  modelSettingRef.value.open({ data: { ...parentData, ...data, id: data.value } })\n}\n\nconst onAgentListChange = ({ data, count }: { data: ProviderOption; count: number }) => {\n  const provider = agentProviders.value.find(item => item.id === data.id)\n  if (provider) provider.agentTotal = count\n  loadAgentListCount()\n}\n\n// 初始化\nconst refresh = () => {\n  loadModelList()\n  loadProviderList()\n  loadAgentListCount()\n}\n\nonMounted(() => refresh())\n</script>\n\n<style scoped>\n::v-deep(.el-collapse-item__arrow) {\n  margin-left: 6px;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/platform/km.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.platform')\" />\n\n    <el-tabs v-model=\"activeName\" class=\"mt-2\">\n      <el-tab-pane label=\"大模型\" name=\"first\" lazy>\n        <ModelView />\n      </el-tab-pane>\n      <!-- <el-tab-pane label=\"联网搜索\" name=\"second\" lazy> <WebSearchView /> </el-tab-pane> -->\n      <el-tab-pane v-if=\"isKmRc\" label=\"文档查看与编辑\" name=\"third\" lazy> <FileEditorView /> </el-tab-pane>\n      <el-tab-pane label=\"文档解析\" name=\"fourth\" lazy> <FileParserView /> </el-tab-pane>\n      <!-- <el-tab-pane label=\"文档存储\" name=\"fifth\"> 文档存储功能 </el-tab-pane> -->\n    </el-tabs>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport ModelView from './view/model.vue'\n// import WebSearchView from './view/web-search.vue'\nimport FileParserView from './view/file-parser.vue'\nimport FileEditorView from './view/file-editor.vue'\n\nconst isKmRc =\n  ['kmrc.53ai.com', 'km.cc'].includes(window.location.host) || /192\\.168\\.1\\.\\d+/.test(window.location.host)\ntype TabPaneName = 'first' | 'second' | 'third' | 'fourth' | 'fifth'\nconst activeName = ref<TabPaneName>('first')\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/platform/view/file-editor.vue",
    "content": "<template>\n  <div v-loading=\"loading\" class=\"flex flex-col bg-white p-6 mt-3 box-border h-[calc(100vh-160px)] overflow-auto\">\n    <!-- 解析方法配置列表 -->\n    <template v-if=\"!loading && wpsSetting && wpsSetting.id\">\n      <div class=\"space-y-4\">\n        <!-- WPS WebOffice配置项 -->\n        <div\n          v-if=\"wpsSetting && wpsSetting.id\"\n          class=\"flex items-center justify-between bg-white border border-gray-200 rounded-lg p-4 hover:shadow-sm transition-shadow\"\n        >\n          <!-- 左侧：图标和名称 -->\n          <div class=\"flex-none w-[170px] flex items-center gap-3\">\n            <img :src=\"$getRealPath({ url: '/images/tools/wps-office.png' })\" alt=\"WPS WebOffice\" class=\"size-8\" />\n            <h4 class=\"flex-1 text-sm font-medium text-gray-900\">WPS WebOffice</h4>\n            <div class=\"border-r h-3 w-px\"></div>\n          </div>\n\n          <!-- 中间：服务器地址 -->\n          <div class=\"flex-1 px-6 flex items-center gap-2 overflow-hidden\">\n            <!-- <div class=\"flex items-center gap-1\">\n              <span class=\"text-sm text-[#999]\">服务器地址：</span>\n              <span class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{ wpsSetting.setting['server_url'] }}</span>\n            </div> -->\n            <div class=\"flex items-center gap-1\">\n              <span class=\"text-sm text-[#999]\">APPID：</span>\n              <span class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{ wpsSetting.setting['app_id'] }}</span>\n            </div>\n            <div class=\"flex items-center gap-1\">\n              <span class=\"text-sm text-[#999]\">AppSecret</span>\n              <span class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{\n                $filters.formatSecret(wpsSetting.setting['app_secret'])\n              }}</span>\n            </div>\n          </div>\n\n          <!-- 右侧：开关和操作按钮 -->\n          <div class=\"flex items-center gap-4 ml-2\">\n            <div class=\"border-r h-3 w-px\"></div>\n            <!-- <el-switch v-model=\"parseConfigs.precise.enabled\" size=\"large\" /> -->\n            <div class=\"flex items-center\">\n              <!-- <el-button type=\"primary\" size=\"small\" @click=\"testConnection('precise')\"> 测试 </el-button> -->\n              <!-- <div class=\"w-px h-4 bg-gray-300\"></div> -->\n              <el-button type=\"primary\" link @click=\"handleEdit\">编辑</el-button>\n              <el-button link @click=\"handleDelete\">删除</el-button>\n            </div>\n          </div>\n        </div>\n      </div>\n      <!-- 底部操作按钮 -->\n      <div class=\"mt-8\">\n        <el-button class=\"w-[108px] border-none\" type=\"primary\" plain @click=\"showAccessDrawer = true\">+添加</el-button>\n      </div>\n    </template>\n\n    <el-empty\n      v-if=\"!loading && !wpsSetting\"\n      :image=\"$getRealPath({ url: '/images/empty.png' })\"\n      :image-size=\"110\"\n      description=\"还未接入文档编辑，来添加文档编辑吧~~\"\n    >\n      <el-button class=\"border-none w-28 h-9\" type=\"primary\" plain @click=\"showAccessDrawer = true\">+添加</el-button>\n    </el-empty>\n\n    <!-- 选择接入抽屉 -->\n    <el-drawer\n      v-model=\"showAccessDrawer\"\n      title=\"选择接入\"\n      direction=\"rtl\"\n      size=\"700px\"\n      :before-close=\"handleDrawerClose\"\n    >\n      <div class=\"p-4\">\n        <div class=\"space-y-3\">\n          <!-- WPS WebOffice -->\n          <div class=\"flex items-center justify-between px-5 py-4 rounded-md bg-[#F8F9FA]\">\n            <div class=\"flex items-center gap-3\">\n              <div class=\"size-10\">\n                <img :src=\"$getRealPath({ url: '/images/tools/wps-office.png' })\" alt=\"WPS WebOffice\" class=\"size-10\" />\n              </div>\n              <span class=\"text-base font-medium text-[#1D1E1F]\">WPS WebOffice</span>\n            </div>\n            <el-button\n              :disabled=\"Boolean(wpsSetting && wpsSetting.id)\"\n              type=\"primary\"\n              class=\"!border-none\"\n              plain\n              @click=\"openHighPrecisionDialog\"\n              >添加</el-button\n            >\n          </div>\n        </div>\n      </div>\n    </el-drawer>\n\n    <!-- WPS WebOffice配置对话框 -->\n    <el-dialog v-model=\"showHighPrecisionDialog\" width=\"600px\" :before-close=\"handleDialogClose\">\n      <template #header>\n        <div class=\"flex items-center gap-2\">\n          <img :src=\"$getRealPath({ url: '/images/tools/wps-office.png' })\" alt=\"WPS WebOffice\" class=\"size-8\" />\n          <span class=\"text-base font-medium text-[#1D1E1F]\">WPS WebOffice</span>\n        </div>\n      </template>\n      <div class=\"space-y-4\">\n        <!-- 输入表单 -->\n        <el-form ref=\"settingFormRef\" :model=\"settingForm\" label-position=\"top\">\n          <!-- <el-form-item label=\"服务地址\" prop=\"server_url\" :rules=\"generateFormRules({ validator: ['required'] })\">\n            <el-input v-model=\"settingForm['server_url']\" size=\"large\" placeholder=\"请输入server_url\" clearable />\n          </el-form-item> -->\n          <el-form-item label=\"APPID\" prop=\"app_id\" :rules=\"generateFormRules({ validator: ['required'] })\">\n            <el-input v-model=\"settingForm['app_id']\" size=\"large\" placeholder=\"请输入APPID\" clearable />\n          </el-form-item>\n          <el-form-item label=\"AppSecret\" prop=\"app_secret\" :rules=\"generateFormRules({ validator: ['required'] })\">\n            <el-input v-model=\"settingForm['app_secret']\" size=\"large\" placeholder=\"请输入AppSecret\" clearable />\n          </el-form-item>\n        </el-form>\n        <!-- 说明文字 -->\n        <div class=\"p-4 text-sm text-[#1D1E1F] bg-[#F6F9FC]\">\n          <p class=\"mb-3\">通过调用WPS开放平台服务接口，实现文件的预览和编辑。</p>\n          <ol class=\"list-decimal list-inside space-y-1\">\n            <li>\n              在(<a href=\"https://solution.wps.cn/\" target=\"_blank\" class=\"text-[#2563EB]\">WPS开放平台</a\n              >)注册为服务商，按需购买服务:\n            </li>\n            <li>在【开发者后台-在线编辑预览】下，添加应用，得到APPID、AppSecret；</li>\n            <li>\n              数据回调地址：<span class=\"text-[#FA5151]\">{{ settingForm.server_url }}/api/wps</span\n              ><svg-icon class=\"inline-block ml-1 cursor-pointer\" name=\"copy\" width=\"18px\" @click=\"handleCopy\" />\n            </li>\n          </ol>\n        </div>\n      </div>\n\n      <template #footer>\n        <el-button size=\"large\" @click=\"showHighPrecisionDialog = false\">取消</el-button>\n        <el-button v-debounce size=\"large\" type=\"primary\" @click=\"handleSave\">保存</el-button>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref, onMounted } from 'vue'\nimport { FormInstance } from 'element-plus'\nimport { generateFormRules } from '@/utils/form-rule.v2'\n\nimport platformSettingsApi from '@/api/modules/platform-settings'\nimport { transformPlatformSetting } from '@/api/modules/platform-settings/transform'\nimport type { PlatformSetting } from '@/api/modules/platform-settings/types'\nimport { copyToClip } from '@/utils/copy'\nimport { api_host } from '@/utils/config'\n\n// 表单引用\nconst settingFormRef = ref<FormInstance>()\n\nconst loading = ref(false)\n// 抽屉和对话框状态\nconst showAccessDrawer = ref(false)\nconst showHighPrecisionDialog = ref(false)\nconst wpsSetting = ref<PlatformSetting | null>(null)\n\n// WPS WebOffice配置\nconst settingForm = reactive({\n  server_url: api_host,\n  app_id: '',\n  app_secret: '',\n})\n\n// 加载WPS WebOffice配置\nconst loadWpsSetting = async () => {\n  const res = await platformSettingsApi.find({ platform_key: 'wps' })\n  if (res && res.length > 0) {\n    wpsSetting.value = transformPlatformSetting(res[0])\n  }\n}\n\n// 打开WPS WebOffice配置对话框\nconst openHighPrecisionDialog = () => {\n  showAccessDrawer.value = false\n  showHighPrecisionDialog.value = true\n}\n\n// 编辑WPS WebOffice配置\nconst handleEdit = () => {\n  if (wpsSetting.value) {\n    settingForm.server_url = api_host\n    settingForm.app_id = wpsSetting.value.setting.app_id\n    settingForm.app_secret = wpsSetting.value.setting.app_secret\n  }\n  showHighPrecisionDialog.value = true\n}\n\n// 保存WPS WebOffice配置\nconst handleSave = async () => {\n  await settingFormRef.value?.validate()\n  if (wpsSetting.value?.id) {\n    await platformSettingsApi.update(wpsSetting.value.id, {\n      platform_key: 'wps',\n      setting: JSON.stringify(settingForm),\n      external_id: settingForm.app_id,\n    })\n  } else {\n    await platformSettingsApi.create({\n      platform_key: 'wps',\n      setting: JSON.stringify(settingForm),\n      external_id: settingForm.app_id,\n    })\n  }\n  ElMessage.success('保存成功')\n  showHighPrecisionDialog.value = false\n  loadWpsSetting()\n}\n\n// 删除WPS WebOffice配置\nconst handleDelete = async () => {\n  await ElMessageBox.confirm('确定删除WPS WebOffice配置吗？')\n  if (wpsSetting.value?.id) {\n    await platformSettingsApi.delete(wpsSetting.value.id)\n    wpsSetting.value = null\n    ElMessage.success('删除成功')\n  }\n}\n\n// 复制数据回调地址\nconst handleCopy = () => {\n  copyToClip(`${settingForm.server_url}/api/wps`)\n  ElMessage.success('复制成功')\n}\n// 抽屉关闭处理\nconst handleDrawerClose = (done: () => void) => {\n  done()\n}\n\n// 对话框关闭处理\nconst handleDialogClose = (done: () => void) => {\n  // 可以在这里添加关闭前的确认逻辑\n  done()\n}\nonMounted(async () => {\n  loading.value = true\n  await loadWpsSetting()\n  loading.value = false\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/platform/view/file-parser.vue",
    "content": "<template>\n  <div v-loading=\"loading\" class=\"flex flex-col bg-white p-6 mt-3 box-border h-[calc(100vh-160px)] overflow-auto\">\n    <!-- 页面标题 -->\n    <div class=\"flex items-center gap-2.5 mb-6\">\n      <h3 class=\"text-base font-medium text-[#1D1E1F]\">解析配置</h3>\n      <p class=\"text-xs text-[#999999]\">按文档类型设置解析方法和输出内容</p>\n    </div>\n\n    <!-- 解析方法配置列表 -->\n    <div class=\"space-y-4\">\n      <!-- 标准解析配置项 -->\n      <div\n        class=\"flex items-center justify-between bg-white border border-gray-200 rounded-lg p-4 hover:shadow-sm transition-shadow\"\n      >\n        <!-- 左侧：图标和名称 -->\n        <div class=\"flex-none w-[170px] flex items-center gap-3\">\n          <img :src=\"$getRealPath({ url: '/images/tools/markitdown.png' })\" alt=\"标准解析\" class=\"size-8\" />\n          <h4 class=\"flex-1 text-sm font-medium text-gray-900\">标准解析</h4>\n          <!-- <div class=\"border-r h-3 w-px\"></div> -->\n        </div>\n\n        <!-- 中间：服务器地址 -->\n        <!-- <div class=\"flex-1 px-6\">\n          <div class=\"flex items-center gap-2\">\n            <span class=\"text-sm text-gray-500\">服务器地址:</span>\n            <span class=\"text-sm text-gray-900 font-mono\">https://markdown.53ai.com</span>\n          </div>\n        </div> -->\n\n        <!-- 右侧：开关和操作按钮 -->\n        <!-- <div class=\"flex items-center gap-4\">\n          <el-switch v-model=\"parseConfigs.standard.enabled\" size=\"large\" />\n          <div class=\"flex items-center gap-2\">\n            <el-button type=\"primary\" size=\"small\" @click=\"testConnection('standard')\"> 测试 </el-button>\n            <div class=\"w-px h-4 bg-gray-300\"></div>\n            <el-button type=\"primary\" size=\"small\" link @click=\"editConfig('standard')\"> 编辑 </el-button>\n          </div>\n        </div> -->\n      </div>\n\n      <!-- 高精解析配置项 -->\n      <div\n        v-if=\"textinSetting && textinSetting.id\"\n        class=\"flex items-center justify-between bg-white border border-gray-200 rounded-lg p-4 hover:shadow-sm transition-shadow\"\n      >\n        <!-- 左侧：图标和名称 -->\n        <div class=\"flex-none w-[170px] flex items-center gap-3\">\n          <img :src=\"$getRealPath({ url: '/images/tools/textin.png' })\" alt=\"高精解析\" class=\"size-8\" />\n          <h4 class=\"flex-1 text-sm font-medium text-gray-900\">高精解析</h4>\n          <div class=\"border-r h-3 w-px\"></div>\n        </div>\n\n        <!-- 中间：服务器地址 -->\n        <div class=\"flex-1 px-6 flex items-center gap-2 overflow-hidden\">\n          <div class=\"flex items-center gap-1\">\n            <span class=\"text-sm text-[#999]\">x-ti-app-id：</span>\n            <span class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{ textinSetting.setting['x-ti-app-id'] }}</span>\n          </div>\n          <div class=\"flex items-center gap-1\">\n            <span class=\"text-sm text-[#999]\">x-ti-secret-code：</span>\n            <span class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{\n              $filters.formatSecret(textinSetting.setting['x-ti-secret-code'])\n            }}</span>\n          </div>\n        </div>\n\n        <!-- 右侧：开关和操作按钮 -->\n        <div class=\"flex items-center gap-4 ml-2\">\n          <div class=\"border-r h-3 w-px\"></div>\n          <!-- <el-switch v-model=\"parseConfigs.precise.enabled\" size=\"large\" /> -->\n          <div class=\"flex items-center\">\n            <!-- <el-button type=\"primary\" size=\"small\" @click=\"testConnection('precise')\"> 测试 </el-button> -->\n            <!-- <div class=\"w-px h-4 bg-gray-300\"></div> -->\n            <el-button type=\"primary\" link @click=\"handleEdit('textin')\">编辑</el-button>\n            <el-button link @click=\"handleDelete\">删除</el-button>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- 底部操作按钮 -->\n    <div class=\"mt-8\">\n      <el-button class=\"w-[108px] border-none\" type=\"primary\" plain @click=\"showAccessDrawer = true\">+添加</el-button>\n    </div>\n\n    <!-- 选择接入抽屉 -->\n    <el-drawer\n      v-model=\"showAccessDrawer\"\n      title=\"选择接入\"\n      direction=\"rtl\"\n      size=\"700px\"\n      :before-close=\"handleDrawerClose\"\n    >\n      <div class=\"p-4\">\n        <div class=\"space-y-3\">\n          <!-- 高精解析 -->\n          <div class=\"flex items-center justify-between px-5 py-4 rounded-md bg-[#F8F9FA]\">\n            <div class=\"flex items-center gap-3\">\n              <div class=\"size-10\">\n                <img :src=\"$getRealPath({ url: '/images/tools/textin.png' })\" alt=\"高精解析\" class=\"size-10\" />\n              </div>\n              <span class=\"text-base font-medium text-[#1D1E1F]\">高精解析</span>\n            </div>\n            <el-button\n              :disabled=\"Boolean(textinSetting && textinSetting.id)\"\n              type=\"primary\"\n              class=\"!border-none\"\n              plain\n              @click=\"openHighPrecisionDialog\"\n              >添加</el-button\n            >\n          </div>\n        </div>\n      </div>\n    </el-drawer>\n\n    <!-- 高精解析配置对话框 -->\n    <el-dialog v-model=\"showHighPrecisionDialog\" width=\"600px\" :before-close=\"handleDialogClose\">\n      <template #header>\n        <div class=\"flex items-center gap-2\">\n          <img :src=\"$getRealPath({ url: '/images/tools/textin.png' })\" alt=\"高精解析\" class=\"size-8\" />\n          <span class=\"text-base font-medium text-[#1D1E1F]\">高精解析</span>\n        </div>\n      </template>\n      <div class=\"space-y-4\">\n        <!-- 说明文字 -->\n        <div class=\"p-4 text-sm text-[#1D1E1F] bg-[#F6F9FC]\">\n          <p class=\"mb-3\">通过调用Textin的服务开放接口,实现对文件内容的解析。</p>\n          <ol class=\"list-decimal list-inside space-y-1\">\n            <li>\n              前往Textin工作台(<a\n                href=\"https://www.textin.com/console/dashboard/overview\"\n                target=\"_blank\"\n                class=\"text-[#2563EB]\"\n                >https://www.textin.com/console/dashboard/overview</a\n              >):\n            </li>\n            <li>在【账号与开发者信息】下,复制「x-ti-app-id」和「x-ti-secret-code」;</li>\n          </ol>\n        </div>\n\n        <!-- 输入表单 -->\n        <el-form ref=\"settingFormRef\" :model=\"settingForm\" label-position=\"top\">\n          <el-form-item label=\"x-ti-app-id\" prop=\"x-ti-app-id\" :rules=\"generateFormRules({ validator: ['required'] })\">\n            <el-input v-model=\"settingForm['x-ti-app-id']\" size=\"large\" placeholder=\"请输入x-ti-app-id\" clearable />\n          </el-form-item>\n          <el-form-item\n            label=\"x-ti-secret-code\"\n            prop=\"x-ti-secret-code\"\n            :rules=\"generateFormRules({ validator: ['required'] })\"\n          >\n            <el-input\n              v-model=\"settingForm['x-ti-secret-code']\"\n              size=\"large\"\n              placeholder=\"请输入x-ti-secret-code\"\n              clearable\n            />\n          </el-form-item>\n        </el-form>\n      </div>\n\n      <template #footer>\n        <el-button size=\"large\" @click=\"showHighPrecisionDialog = false\">取消</el-button>\n        <el-button v-debounce size=\"large\" type=\"primary\" @click=\"handleSave\">保存</el-button>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref, onMounted } from 'vue'\nimport { FormInstance } from 'element-plus'\nimport { generateFormRules } from '@/utils/form-rule.v2'\n\nimport platformSettingsApi from '@/api/modules/platform-settings'\nimport { transformPlatformSetting } from '@/api/modules/platform-settings/transform'\nimport type { PlatformSetting } from '@/api/modules/platform-settings/types'\n\n// 抽屉和对话框状态\nconst settingFormRef = ref<FormInstance>()\n\nconst loading = ref(false)\n\nconst showAccessDrawer = ref(false)\nconst showHighPrecisionDialog = ref(false)\nconst textinSetting = ref<PlatformSetting | null>(null)\n\n// 高精解析配置\nconst settingForm = reactive({\n  'x-ti-app-id': '',\n  'x-ti-secret-code': '',\n})\n\n// 加载高精解析配置\nconst loadTextinSetting = async () => {\n  const res = await platformSettingsApi.find({ platform_key: 'textin' })\n  if (res && res.length > 0) {\n    textinSetting.value = transformPlatformSetting(res[0])\n  }\n}\n\n// 打开高精解析配置对话框\nconst openHighPrecisionDialog = () => {\n  showAccessDrawer.value = false\n  showHighPrecisionDialog.value = true\n}\n\n// 编辑高精解析配置\nconst handleEdit = () => {\n  if (textinSetting.value) {\n    settingForm['x-ti-app-id'] = textinSetting.value.setting['x-ti-app-id']\n    settingForm['x-ti-secret-code'] = textinSetting.value.setting['x-ti-secret-code']\n  }\n  showHighPrecisionDialog.value = true\n}\n\n// 保存高精解析配置\nconst handleSave = async () => {\n  await settingFormRef.value?.validate()\n  if (textinSetting.value?.id) {\n    await platformSettingsApi.update(textinSetting.value.id, {\n      platform_key: 'textin',\n      setting: JSON.stringify(settingForm),\n    })\n  } else {\n    await platformSettingsApi.create({\n      platform_key: 'textin',\n      setting: JSON.stringify(settingForm),\n    })\n  }\n  ElMessage.success('保存成功')\n  showHighPrecisionDialog.value = false\n  loadTextinSetting()\n}\n\n// 删除高精解析配置\nconst handleDelete = async () => {\n  await ElMessageBox.confirm('确定删除高精解析配置吗？')\n  if (textinSetting.value?.id) {\n    await platformSettingsApi.delete(textinSetting.value.id)\n    textinSetting.value = null\n    ElMessage.success('删除成功')\n  }\n}\n\n// 抽屉关闭处理\nconst handleDrawerClose = (done: () => void) => {\n  done()\n}\n\n// 对话框关闭处理\nconst handleDialogClose = (done: () => void) => {\n  // 可以在这里添加关闭前的确认逻辑\n  done()\n}\nonMounted(async () => {\n  loading.value = true\n  await loadTextinSetting()\n  loading.value = false\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/platform/view/model.vue",
    "content": "<template>\n  <div class=\"flex flex-col bg-white p-6 mt-3 box-border max-h-[calc(100vh-160px)] overflow-auto\">\n    <!-- 大模型列表 -->\n    <h2 class=\"w-full flex items-center font-semibold text-[#1D1E1F] mb-6\">\n      <div class=\"flex-1\">\n        {{ $t('module.platform_model') }}\n      </div>\n    </h2>\n    <ul v-loading=\"channelLoading\" class=\"w-full flex flex-col gap-4 mb-8\">\n      <ModelGroupV2\n        v-for=\"group in channelList\"\n        :key=\"group.channel_type\"\n        :group=\"group\"\n        @edit=\"handleModelEdit\"\n        @delete=\"handleModelDelete\"\n        @model-edit=\"onModelEdit\"\n      />\n      <ElButton class=\"flex-none !border-none w-[106px]\" type=\"primary\" plain size=\"large\" @click=\"handleModelSelect\">\n        + {{ $t('action_add') }}\n      </ElButton>\n    </ul>\n    <ModelSaveDialog ref=\"modelSaveRef\" :model-list=\"modelList\" @success=\"loadModelList\" />\n    <ModelSelectDialog ref=\"modelSelectRef\" :list=\"channelList\" :model-list=\"modelList\" @add=\"handleModelAdd\" />\n    <ModelSettingDialog ref=\"modelSettingRef\" @success=\"loadModelList\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport ModelGroupV2 from '../componentsv2/model-group.vue'\n\nimport ModelSaveDialog from '../componentsv2/model-save-dialog.vue'\nimport ModelSelectDialog from '../componentsv2/model-select-dialog.vue'\nimport ModelSettingDialog from '../components/model-setting-dialog.vue'\n\nimport channelApi, { transformChannelData, transformModelList, type ModelOption } from '@/api/modules/channel/index'\n\ninterface ChannelGroup {\n  label: string\n  icon: string\n  channel_type: number\n  multiple: boolean\n  data: any\n  children: any[]\n}\n\n// 状态管理\nconst channelList = ref<ChannelGroup[]>([])\nconst channelLoading = ref(false)\n\nconst modelList = ref<ModelOption[]>([])\n\n// 组件引用\nconst modelSaveRef = ref()\nconst modelSelectRef = ref()\nconst modelSettingRef = ref()\n\nconst createChannelGroup = (list: any) => {\n  return list.reduce((acc: ChannelGroup[], item: any) => {\n    const group = {\n      name: item.name,\n      label: item.label,\n      icon: item.icon,\n      channel_type: item.channel_type,\n      multiple: false,\n      data: item,\n      modelValue: item.group.map(item => item.type.toString()),\n      children: [item],\n    }\n    acc.push(group)\n    return acc\n  }, [])\n}\n\nconst loadModelList = async () => {\n  channelLoading.value = true\n  try {\n    const list = await channelApi.listv2()\n    channelList.value = createChannelGroup(list.map(item => transformChannelData(item)))\n  } finally {\n    channelLoading.value = false\n  }\n}\n\nconst handleModelSelect = () => modelSelectRef.value.open()\n\nconst handleModelAdd = (data: ModelOption) => {\n  modelSaveRef.value.open({ channel_type: data.channel_type })\n}\n\nconst handleModelEdit = (data: any) => modelSaveRef.value.open(data)\n\nconst handleModelDelete = async (data: any, model: any) => {\n  await ElMessageBox.confirm(window.$t('module.platform_model_delete_confirm'))\n  const isChildRemove = model && data.models.length > 1\n  if (isChildRemove) {\n    const custom_config = { ...data.custom_config }\n    delete custom_config[model.value]\n    await channelApi.update(data.channel_id, {\n      channel_id: data.channel_id,\n      key: data.key,\n      base_url: data.base_url,\n      other: data.other,\n      models: data.models.filter((item: any) => item !== model.value).join(','),\n      name: data.name,\n      type: data.channel_type,\n      config: JSON.stringify(data.config || {}),\n      custom_config: JSON.stringify(custom_config),\n    })\n  } else {\n    await channelApi.delete(data.channel_id)\n  }\n\n  ElMessage.success(window.$t('action_delete_success'))\n  loadModelList()\n}\n\nconst onModelEdit = ({ data, parentData }: { data: any; parentData: any }) => {\n  modelSettingRef.value.open({ data: { ...parentData, ...data, id: data.value } })\n}\n\n// 初始化\nconst refresh = () => {\n  loadModelList()\n\n  channelApi.models.config().then(res => {\n    modelList.value = transformModelList(res)\n  })\n}\n\nonMounted(() => refresh())\n</script>\n\n<style scoped>\n::v-deep(.el-collapse-item__arrow) {\n  margin-left: 6px;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/platform/view/web-search.vue",
    "content": "<template>\n  <div class=\"flex flex-col bg-white p-6 mt-3 box-border h-[calc(100vh-160px)] overflow-auto\">\n    <el-empty\n      description=\"还未接入联网搜索，来添加联网搜索吧~\"\n      :image=\"$getRealPath({ url: '/images/empty.png' })\"\n      :image-size=\"110\"\n    >\n      <el-button class=\"border-none w-28 h-9\" type=\"primary\" plain @click=\"showAccessDrawer = true\">+添加</el-button>\n    </el-empty>\n\n    <!-- 解析方法配置列表 -->\n    <div class=\"space-y-4\">\n      <div\n        v-if=\"bochaSetting && bochaSetting.id\"\n        class=\"flex items-center justify-between bg-white border border-gray-200 rounded-lg p-4 hover:shadow-sm transition-shadow\"\n      >\n        <!-- 左侧：图标和名称 -->\n        <div class=\"flex-none w-[170px] flex items-center gap-3\">\n          <img :src=\"$getRealPath({ url: '/images/tools/bocha.png' })\" alt=\"博查（API）\" class=\"size-8\" />\n          <h4 class=\"flex-1 text-sm font-medium text-gray-900\">博查（API）</h4>\n          <div class=\"border-r h-3 w-px\"></div>\n        </div>\n\n        <!-- 中间：服务器地址 -->\n        <div class=\"flex-1 px-6 flex items-center gap-2 overflow-hidden\">\n          <div class=\"flex items-center gap-1\">\n            <span class=\"text-sm text-[#999]\">API Key：</span>\n            <span class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{\n              $filters.formatSecret(bochaSetting.setting['api-key'])\n            }}</span>\n          </div>\n        </div>\n\n        <!-- 右侧：开关和操作按钮 -->\n        <div class=\"flex items-center gap-4 ml-2\">\n          <el-switch v-model=\"bochaSetting.setting.enabled\" />\n          <div class=\"border-r h-3 w-px\"></div>\n          <!-- <el-switch v-model=\"parseConfigs.precise.enabled\" size=\"large\" /> -->\n          <div class=\"flex items-center\">\n            <!-- <el-button type=\"primary\" size=\"small\" @click=\"testConnection('precise')\"> 测试 </el-button> -->\n            <!-- <div class=\"w-px h-4 bg-gray-300\"></div> -->\n            <el-button type=\"primary\" link @click=\"handleEdit('textin')\">编辑</el-button>\n            <el-button link @click=\"handleDelete\">删除</el-button>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- 选择接入抽屉 -->\n    <el-drawer\n      v-model=\"showAccessDrawer\"\n      title=\"选择接入\"\n      direction=\"rtl\"\n      size=\"700px\"\n      :before-close=\"handleDrawerClose\"\n    >\n      <div class=\"p-4\">\n        <div class=\"space-y-3\">\n          <!-- 高精解析 -->\n          <div\n            class=\"flex items-center justify-between px-5 py-4 rounded-md bg-[#F8F9FA]\"\n            @click=\"openHighPrecisionDialog\"\n          >\n            <div class=\"flex items-center gap-3\">\n              <div class=\"size-10\">\n                <img :src=\"$getRealPath({ url: '/images/tools/bocha.png' })\" alt=\"博查（API）\" class=\"size-10\" />\n              </div>\n              <span class=\"text-base font-medium text-[#1D1E1F]\">博查（API）</span>\n            </div>\n            <el-button type=\"primary\" class=\"!border-none\" plain @click=\"showBochaDialog = true\">添加</el-button>\n          </div>\n        </div>\n      </div>\n    </el-drawer>\n\n    <!-- 博查（API）配置对话框 -->\n    <el-dialog v-model=\"showBochaDialog\" width=\"600px\" :before-close=\"handleDialogClose\">\n      <template #header>\n        <div class=\"flex items-center gap-2\">\n          <img :src=\"$getRealPath({ url: '/images/tools/bocha.png' })\" alt=\"博查（API）\" class=\"size-8\" />\n          <span class=\"text-base font-medium text-[#1D1E1F]\">博查（API）</span>\n        </div>\n      </template>\n      <div class=\"space-y-4\">\n        <el-form ref=\"settingFormRef\" :model=\"settingForm\" label-position=\"top\">\n          <el-form-item label=\"API Key\" prop=\"api-key\" :rules=\"generateFormRules({ validator: ['required'] })\">\n            <el-input v-model=\"settingForm['api-key']\" size=\"large\" placeholder=\"请输入api-key\" clearable />\n          </el-form-item>\n        </el-form>\n      </div>\n      <template #footer>\n        <el-button size=\"large\" @click=\"showBochaDialog = false\">取消</el-button>\n        <el-button v-debounce size=\"large\" type=\"primary\" @click=\"handleSave\">保存</el-button>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { FormInstance } from 'element-plus'\nimport { generateFormRules } from '@/utils/form-rule.v2'\n\nconst showAccessDrawer = ref(false)\nconst showBochaDialog = ref(false)\nconst bochaSetting = ref({\n  id: '23',\n  setting: {\n    'api-key': '',\n  },\n})\n\nconst settingForm = ref({\n  'api-key': '',\n})\nconst settingFormRef = ref<FormInstance>()\n\nconst handleDrawerClose = () => {\n  showAccessDrawer.value = false\n}\n\nconst openHighPrecisionDialog = () => {\n  showAccessDrawer.value = true\n}\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/prompt/components/create-drawer.vue",
    "content": "<template>\n  <ElDrawer\n    v-model=\"visible\"\n    :title=\"editable ? $t('action_edit') : $t('action_add')\"\n    size=\"760px\"\n    destroy-on-close\n    append-to-body\n    :close-on-click-modal=\"false\"\n  >\n    <FormView ref=\"formRef\" />\n    <template #footer>\n      <div class=\"flex border-t pt-5 justify-end w-full\">\n        <ElButton size=\"large\" @click=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n        <ElButton type=\"primary\" size=\"large\" :loading=\"submitting\" @click=\"handleSave\">\n          {{ $t('action_confirm') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDrawer>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport FormView from './form.vue'\nimport { useFormDataStore } from '../create/store'\nimport eventBus from '@/utils/event-bus'\nimport { settingApi } from '@/api/modules/setting'\n\nconst formRef = ref()\nconst router = useRouter()\nconst editable = ref(false)\nconst visible = ref(false)\nconst formDataStore = useFormDataStore()\nconst { detailData } = formDataStore\nconst { submitting } = formDataStore\n\nconst loadDefaultLinks = async () => {\n  const { data } = await settingApi.default_links.list()\n  formDataStore.set({\n    ai_links: data.map(item => {\n      return {\n        ai_link: { ...item },\n        delete: false,\n      }\n    }),\n  })\n}\nconst open = async ({ group_ids = [] } = {}) => {\n  editable.value = !!detailData.value.prompt_id\n\n  if (!editable.value) {\n    formDataStore.reset()\n    loadDefaultLinks()\n  }\n\n  visible.value = true\n}\nconst close = () => {\n  visible.value = false\n}\nconst handleSave = async () => {\n  const valid = await formRef.value.validate()\n  if (!valid) return Promise.reject()\n  const data = await formDataStore.save()\n  eventBus.emit(`prompt-${editable.value ? 'update' : 'create'}`, { data })\n  close()\n  if (!editable.value) {\n    router.push({\n      name: 'PromptCreate',\n      query: {\n        prompt_id: data.prompt_id,\n      },\n    })\n  } else {\n    formDataStore.fetchDetail()\n  }\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/prompt/components/form.vue",
    "content": "<template>\n  <ElForm ref=\"formRef\" class=\"py-0\" :model=\"formData\" label-position=\"top\" label-width=\"120px\">\n    <!-- <h1 class=\"font-semibold text-[#1D1E1F]\">{{ $t('basic_info') }}</h1> -->\n    <ElFormItem :label=\"$t('group')\" prop=\"group_ids\" :rules=\"[{ required: true, message: $t('group_min_one') }]\">\n      <GroupSelect v-model=\"formData.group_ids\" :group-type=\"GROUP_TYPE.PROMPT\" default-first multiple clearable />\n    </ElFormItem>\n    <ElFormItem\n      :label=\"$t('action_sort')\"\n      prop=\"sort\"\n      :rules=\"[{ required: true, message: $t('form_input_placeholder') }]\"\n    >\n      <ElInputNumber\n        v-model=\"formData.sort\"\n        class=\"!w-[200px] el-input-number--left\"\n        size=\"large\"\n        :controls=\"false\"\n        :precision=\"0\"\n        :min=\"0\"\n        :max=\"99999999\"\n        :placeholder=\"$t('form_input_placeholder')\"\n        @keydown=\"$numberInputKeydownHandler\"\n      />\n      <div class=\"w-full text-sm text-[#9A9A9A]\">\n        {{ $t('module.agent_sort_desc') }}\n      </div>\n    </ElFormItem>\n    <ElFormItem :label=\"$t('title')\" prop=\"name\" :rules=\"[{ required: true, message: $t('form_input_placeholder') }]\">\n      <ElInput\n        v-model=\"formData.name\"\n        size=\"large\"\n        :placeholder=\"$t('form_input_placeholder')\"\n        :maxlength=\"20\"\n        show-word-limit\n        clearable\n      />\n    </ElFormItem>\n    <ElFormItem :label=\"$t('description')\" prop=\"description\">\n      <ElInput\n        v-model=\"formData.description\"\n        type=\"textarea\"\n        :rows=\"6\"\n        resize=\"none\"\n        :placeholder=\"$t('form_input_placeholder')\"\n        :maxlength=\"200\"\n        show-word-limit\n        clearable\n      />\n    </ElFormItem>\n    <ElFormItem\n      v-if=\"false\"\n      :label=\"$t('prompt.content')\"\n      prop=\"content\"\n      :rules=\"[{ required: true, message: $t('form_input_placeholder') }]\"\n    >\n      <!-- <Fullscreen class=\"w-full\" :z-index=\"9\">\n\t\t\t\t<template #default=\"{ isopen, handler }\"></template>\n\t\t\t</Fullscreen> -->\n      <div class=\"border prompt-input-wrapper rounded w-full flex flex-col !bg-white overflow-auto relative\">\n        <div class=\"min-h-10 pl-3 pr-2 border-b flex items-center justify-between rounded-t bg-white\">\n          <div class=\"flex-1 text-sm text-[#4F5052] truncate\" :title=\"$t('role_instruction_desc')\">\n            *{{ $t('role_instruction_desc') }}\n          </div>\n          <div class=\"flex items-center gap-1\">\n            <ElTooltip placement=\"top\" :content=\"$t('optimize_tip')\">\n              <span\n                class=\"flex-center gap-1 text-[#2563EB] text-sm px-1 cursor-pointer opacity-60 pointer-events-none\"\n                @click.stop=\"onOptimize\"\n              >\n                <svg-icon name=\"hglt\" width=\"18px\" />\n                {{ $t('optimize') }}\n              </span>\n            </ElTooltip>\n            <div class=\"flex-none h-4 w-px border-r border-[#E1E2E6]\" />\n            <ElTooltip placement=\"top\" :content=\"$t('generate_tip')\">\n              <span class=\"text-[#182B50] px-1 cursor-pointer opacity-60 pointer-events-none\" @click.stop=\"onGenerate\">\n                <svg-icon name=\"magic-stick\" width=\"18px\" />\n              </span>\n            </ElTooltip>\n            <!-- <el-tooltip placement=\"top\" :content=\"$t('action_copy')\">\n\t\t\t\t\t\t\t<span class=\"text-[#182B50] px-1 cursor-pointer\" @click.stop=\"onCopy(store.form_data.prompt)\">\n\t\t\t\t\t\t\t\t<svg-icon name=\"copy\" width=\"18px\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</el-tooltip> -->\n            <!-- <el-tooltip placement=\"top\" :content=\"$t(!isopen ? 'action_amplify' : 'action_shrink')\">\n\t\t\t\t\t\t\t<span class=\"text-[#182B50] px-1 cursor-pointer\" @click.stop=\"handler\">\n\t\t\t\t\t\t\t\t<svg-icon :name=\"!isopen ? 'amplify' : 'shrink'\" width=\"18px\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</el-tooltip> -->\n          </div>\n        </div>\n        <PromptInput\n          v-model=\"formData.content\"\n          style=\"height: 548px; min-height: max-content\"\n          show-line\n          show-token\n          @change=\"formRef.validateField('content')\"\n        />\n      </div>\n    </ElFormItem>\n    <h1 class=\"font-semibold text-[#1D1E1F] mt-8 mb-4\">\n      {{ $t('usage_range') }}\n    </h1>\n    <ElFormItem\n      :hidden=\"!(enterprise.info.is_independent || enterprise.info.is_industry)\"\n      :label=\"$t('register_user.title')\"\n      prop=\"subscription_group_ids\"\n    >\n      <GroupSelect\n        v-model=\"formData.subscription_group_ids\"\n        type=\"checkbox\"\n        :group-type=\"GROUP_TYPE.USER\"\n        multiple\n        :default-all=\"formData.prompt_id === 0\"\n      />\n    </ElFormItem>\n    <ElFormItem\n      :hidden=\"!(enterprise.info.is_enterprise || enterprise.info.is_industry)\"\n      :label=\"$t('internal_user.title')\"\n      prop=\"user_group_ids\"\n    >\n      <GroupSelect v-model=\"formData.user_group_ids\" type=\"picker\" :group-type=\"GROUP_TYPE.INTERNAL_USER\" multiple />\n    </ElFormItem>\n  </ElForm>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useFormDataStore } from '../create/store'\nimport PromptInput from '@/components/Prompt/input.vue'\n\nimport { GROUP_TYPE } from '@/constants/group'\n\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\n\nconst enterprise = useEnterpriseStore()\nconst formDataStore = useFormDataStore()\n\nconst { formData } = formDataStore\nconst formRef = ref()\n\ndefineExpose({\n  validate: () => formRef.value.validate(),\n})\n</script>\n\n<style scoped>\n.is-error .prompt-input-wrapper {\n  border-color: #f56c6c;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/prompt/components/links-dialog.vue",
    "content": "<template>\n  <el-dialog v-model=\"visible\" :title=\"$t('default_links.default_setting')\" width=\"800px\" @close=\"handleCloseDefaultLinks\">\n    <TablePlus v-model:data=\"defaultLinks\" sortable :pagination=\"false\">\n      <el-table-column prop=\"name\" :label=\"$t('default_links.website')\" >\n        <template #default=\"{ row }\">\n          <div class=\"flex items-center gap-2\">\n            <img class=\"size-8 rounded-full\" :src=\"row.logo\" />\n            <p class=\"text-sm text-[#1D1E1F]\">{{ row.name }}</p>\n          </div>\n        </template>\n      </el-table-column>\n      <el-table-column prop=\"url\" :label=\"$t('default_links.jump_path')\" show-overflow-tooltip />\n      <el-table-column prop=\"operation\" :label=\"$t('action.operation')\" width=\"100\">\n        <template #default=\"{ row, $index }\">\n          <el-button type=\"primary\" link @click=\"handleDeleteDefaultLink(row, $index)\">{{ $t('action.delete') }}</el-button>\n        </template>\n      </el-table-column>\n    </TablePlus>\n    <div v-if=\"loading\" class=\"h-20\">\n      <el-skeleton :rows=\"3\" animated />\n    </div>\n    <el-button\n      type=\"primary\"\n      plain\n      size=\"large\"\n      class=\"!border-none mt-5\"\n      :disabled=\"defaultLinks.length >= MAX_LINKS_LEN\"\n      @click=\"handleOpenStoreDialog\">+{{ $t('action.add') }}({{ defaultLinks.length }}/{{ MAX_LINKS_LEN }})</el-button>\n\n\t\t<template #footer>\n\t\t\t<el-button v-debounce size=\"large\" type=\"primary\" @click=\"handleSaveDefaultLinks\">\n\t\t\t\t{{ $t('action.save') }}\n\t\t\t</el-button>\n\t\t</template>\n    <StoreDialog ref=\"storeDialogRef\" :show-add-manual=\"false\" @add=\"handleAddDefaultLink\" />\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport { settingApi, type DefaultLinkItem } from '@/api/modules/setting'\nimport StoreDialog from '@/views/toolbox/components/store-dialog.vue'\n\nconst storeDialogRef = ref()\n\nconst MAX_LINKS_LEN = 8\n\nconst visible = ref(false)\nconst loading = ref(false)\nconst defaultLinks = ref<DefaultLinkItem[]>([])\nconst originDefaultLinks = ref<DefaultLinkItem[]>([])\nconst deleteDefaultLinks = ref<DefaultLinkItem[]>([])\n\nconst handleAddDefaultLink = (item: { data: DefaultLinkItem }) => {\n  defaultLinks.value.push(item.data)\n}\n\nconst handleCloseDefaultLinks = () => {\n  defaultLinks.value = originDefaultLinks.value\n  deleteDefaultLinks.value = []\n}\n\nconst handleDeleteDefaultLink = (row: DefaultLinkItem, index: number) => {\n  defaultLinks.value.splice(index, 1)\n  deleteDefaultLinks.value.push(row)\n}\n\nconst handleOpenStoreDialog = () => {\n  storeDialogRef.value.open()\n}\n\nconst handleSaveDefaultLinks = async () => {\n  const data = {\n    links: defaultLinks.value.map((item) => {\n      return {\n        ai_link: { ...item },\n        delete: false\n      }\n    }).concat(deleteDefaultLinks.value.map((item) => {\n      return {\n        ai_link: { ...item },\n        delete: true\n      }\n    }))\n  }\n  await settingApi.default_links.save(data)\n  ElMessage.success(window.$t('message_status.save_success'))\n  visible.value = false\n}\n\nconst loadDefaultLinks = async () => {\n  loading.value = true\n  const { data } = await settingApi.default_links.list()\n  originDefaultLinks.value = data\n  defaultLinks.value = data\n  loading.value = false\n}\n\n\ndefineExpose({\n  open: () => {\n    loadDefaultLinks()\n    deleteDefaultLinks.value = []\n    visible.value = true\n  },\n  close: () => {\n    visible.value = false\n  }\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/prompt/create/guide.vue",
    "content": "<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue'\nimport { nextTick, reactive, ref, watch } from 'vue'\nimport { useFormDataStore } from './store'\nimport UploadImage from '@/components/Upload/image.vue'\nimport MarkdownEditor from '@/components/Markdown/editor.vue'\n\nimport { copyToClip } from '@/utils/copy'\nimport { generateRandomId, sleep } from '@/utils'\nimport { generateInputRules } from '@/utils/form-rule'\n\nconst formDataStore = useFormDataStore()\nconst formData = formDataStore.formData\nconst custom_config = formData.value.custom_config\n\nconst case_form_ref = ref()\nconst scene_form_ref = ref()\nconst use_case_list = ref(custom_config.use_cases.filter(item => item.type === 'case'))\nconst use_scene_list = ref([])\nfor (let i = 0; i < 3; i++) {\n  const list = custom_config.use_cases.filter(item => item.type === 'scene')\n  use_scene_list.value.push(list[i] || {\n    id: '',\n    image: '',\n    scene: '',\n    desc: '',\n  })\n}\nconst case_visible = ref(false)\nconst case_form = reactive({\n  id: '',\n  input_text: '',\n  output_text: '',\n})\nconst scene_visible = ref(false)\nconst scene_form = reactive({\n  id: '',\n  image: '',\n  scene: '',\n  desc: '',\n})\n\nconst onCopy = async (text = '') => {\n  await copyToClip(text)\n  ElMessage.success(window.$t('action_copy_success'))\n}\nconst onCaseOpen = async ({ data = {} } = {}) => {\n  case_form.id = data.id || ''\n  case_form.input_text = data.input_text || ''\n  case_form.output_text = data.output_text || ''\n  case_visible.value = true\n  await nextTick()\n  case_form_ref.value.clearValidate()\n}\nconst onCaseDelete = ({ data = {}, index = -1 } = {}) => {\n  use_case_list.value.splice(index, 1)\n}\nconst onCaseConfirm = async () => {\n  await sleep(0.2)\n  const valid = await case_form_ref.value.validate()\n  if (!valid)\n    return\n  const id = case_form.id || generateRandomId(8)\n  const data = use_case_list.value.find(item => item.id === id)\n  if (data) {\n    data.input_text = case_form.input_text || ''\n    data.output_text = case_form.output_text || ''\n  }\n  else {\n    use_case_list.value.push({\n      type: 'case',\n      id,\n      input_text: case_form.input_text || '',\n      output_text: case_form.output_text || '',\n    })\n  }\n  onCaseCancel()\n}\nconst onCaseCancel = () => {\n  case_visible.value = false\n}\nconst onSceneOpen = async ({ data = {} } = {}) => {\n  scene_form.id = data.id || ''\n  scene_form.image = data.image || ''\n  scene_form.scene = data.scene || ''\n  scene_form.desc = data.desc || ''\n  scene_visible.value = true\n  await nextTick()\n  scene_form_ref.value.clearValidate()\n}\nconst onSceneDelete = ({ data = {}, index = -1 } = {}) => {\n  use_scene_list.value.splice(index, 1)\n  use_scene_list.value.push({\n    id: '',\n    image: '',\n    scene: '',\n    desc: '',\n  })\n}\nconst onSceneConfirm = () => {\n  scene_form_ref.value.validate((valid: boolean) => {\n    if (!valid)\n      return\n    const id = scene_form.id || generateRandomId(8)\n    const data = use_scene_list.value.find(item => item.id === id)\n    if (data) {\n      data.image = scene_form.image || ''\n      data.scene = scene_form.scene || ''\n      data.desc = scene_form.desc || ''\n    }\n    else {\n      const index = use_scene_list.value.findIndex(item => !item.id)\n      if (index >= 0) {\n        use_scene_list.value.splice(index, 1, {\n          type: 'scene',\n          id,\n          image: scene_form.image || '',\n          scene: scene_form.scene || '',\n          desc: scene_form.desc || '',\n        })\n      }\n    }\n    onSceneCancel()\n  })\n}\nconst onSceneCancel = () => {\n  scene_visible.value = false\n}\n\nwatch(() => use_case_list.value, () => {\n  custom_config.use_cases = [...use_case_list.value, ...use_scene_list.value].filter(item => item.id)\n}, { immediate: true, deep: true })\nwatch(() => use_scene_list.value, () => {\n  custom_config.use_cases = [...use_case_list.value, ...use_scene_list.value].filter(item => item.id)\n}, { immediate: true, deep: true })\n</script>\n\n<template>\n  <div class=\"h-full overflow-y-auto relative\">\n    <div class=\"p-6 bg-white rounded\">\n      <h4 class=\"text-base text-[#1D1E1F]\">\n        {{ $t('usage_case') }}\n      </h4>\n      <div class=\"text-sm text-[#9A9A9A] mt-4\">\n        {{ $t('usage_case_desc') }}\n      </div>\n      <!-- <div class=\"flex flex-wrap gap-5 mt-5\"> -->\n      <!-- flex-none w-[48%] -->\n      <!-- <div class=\"columns-2 gap-4 space-y-4\"> -->\n      <div class=\"flex flex-wrap gap-5 mt-5\">\n        <div\n          v-for=\"(item, index) in use_case_list\" :key=\"index\"\n          class=\"flex-none w-[48%] box-border  p-5 bg-[#F7F9FC] rounded relative group cursor-pointer break-inside-avoid\"\n        >\n          <div class=\"bg-white rounded p-5 relative\">\n            <div class=\"text-sm text-[#9A9A9A]\">\n              {{ $t('input') }}\n            </div>\n            <div class=\"text-sm text-[#1D1E1F] break-words mt-4\">\n              <MarkdownEditor class=\"w-full\" height=\"auto\" :model-value=\"item.input_text || '--'\" preview />\n            </div>\n            <div class=\"absolute right-8 -bottom-9\">\n              <svg-icon width=\"50\" height=\"50\" name=\"arrow-down\" color=\"white\" />\n            </div>\n          </div>\n          <div class=\"bg-[#E6EEFF] rounded p-5 mt-4\">\n            <div class=\"flex items-center justify-between\">\n              <div class=\"text-sm text-[#9A9A9A]\">\n                {{ $t('output') }}\n              </div>\n              <svg-icon name=\"copy\" color=\"#4F5052\" @click=\"onCopy(item.output_text)\" />\n            </div>\n            <div\n              class=\"text-sm text-[#1D1E1F] text-wrap break-words whitespace-pre-wrap mt-4 truncate line-clamp-6\"\n              style=\"-webkit-line-clamp: 12;\"\n            >\n              <MarkdownEditor class=\"w-full\" bg-color=\"transparent\" :model-value=\"item.output_text || '--'\" preview />\n              <!-- {{ item.output_text || '--' }} -->\n            </div>\n          </div>\n          <div\n            class=\"absolute inset-0 items-center justify-center bg-[#393C40] bg-opacity-10 rounded hidden group-hover:flex\"\n          >\n            <el-button type=\"primary\" @click=\"onCaseOpen({ data: item })\">\n              {{ $t('action_edit') }}\n            </el-button>\n            <el-button @click=\"onCaseDelete({ data: item, index })\">\n              {{ $t('action_delete') }}\n            </el-button>\n          </div>\n        </div>\n        <div\n          class=\"flex-none w-[48%] h-[140px] flex-center flex-col p-5 bg-[#F7F9FC] rounded cursor-pointer\"\n          @click.stop=\"onCaseOpen\"\n        >\n          <el-icon size=\"28\" color=\"#9A9A9A\">\n            <Plus />\n          </el-icon>\n          <p class=\"text-base text-[#9A9A9A] mt-4\">\n            {{ $t('action_add') }}\n          </p>\n        </div>\n      </div>\n    </div>\n    <div class=\"p-6 bg-white rounded mt-6\">\n      <h4 class=\"text-base text-[#1D1E1F]\">\n        {{ $t('usage_scene') }}\n      </h4>\n      <div class=\"text-sm text-[#9A9A9A] mt-4\">\n        {{ $t('usage_scene_desc') }}\n      </div>\n      <div class=\"flex flex-wrap justify-between gap-5 mt-5\">\n        <div\n          v-for=\"(item, index) in use_scene_list\" :key=\"index\"\n          class=\"flex-1 max-w-[330px] px-4 box-border flex flex-col items-center text-center pt-3 pb-10 relative cursor-pointer group\"\n        >\n          <div v-if=\"item.image\" class=\"w-[220px] h-[205px]\">\n            <img :src=\"item.image\" class=\"w-full h-full object-cover\">\n          </div>\n          <div\n            v-else class=\"w-[220px] h-[205px] border flex-center flex-col mx-auto\"\n            @click.stop=\"onSceneOpen({ data: item })\"\n          >\n            <el-icon size=\"28\" color=\"#9A9A9A\">\n              <Plus />\n            </el-icon>\n            <p class=\"text-base text-[#9A9A9A] mt-4\">\n              {{ $t('action_add') }}\n            </p>\n          </div>\n          <template v-if=\"item.id\">\n            <h6 class=\"text-base text-[#1D1E1F] mt-5 text-center max-w-[10em] truncate\" :title=\"item.scene || ''\">\n              {{ item.scene || '' }}\n            </h6>\n            <p\n              class=\"text-xs text-[#9A9A9A] mt-4 text-center text-wrap break-words whitespace-pre-wrap max-w-[24em] truncate line-clamp-6\"\n              :title=\"item.desc || ''\"\n            >\n              {{ item.desc || '' }}\n            </p>\n            <div\n              class=\"absolute inset-0 items-center justify-center bg-[#393C40] bg-opacity-10 rounded hidden group-hover:flex\"\n            >\n              <el-button type=\"primary\" @click.stop=\"onSceneOpen({ data: item })\">\n                {{ $t('action_edit') }}\n              </el-button>\n              <el-button @click=\"onSceneDelete({ data: item, index })\">\n                {{ $t('action_delete') }}\n              </el-button>\n            </div>\n          </template>\n          <template v-else>\n            <el-skeleton v-if=\"!item.scene\" class=\"mt-6\" :rows=\"1\" />\n          </template>\n        </div>\n      </div>\n    </div>\n\n    <slot name=\"footer\" />\n\n    <ElDrawer\n      v-model=\"case_visible\" size=\"980px\" append-to-body destroy-on-close\n      :title=\"case_form.id ? $t('action_edit') : $t('action_add')\"\n    >\n      <ElForm ref=\"case_form_ref\" :model=\"case_form\" label-width=\"64px\" label-position=\"top\">\n        <ElFormItem\n          :label=\"$t('input')\" prop=\"input_text\"\n          :rules=\"[...generateInputRules({ message: 'form_input_placeholder' }), { max: 200, message: $t('form_input_placeholder_max_length', { max: 200 }) }]\"\n        >\n          <MarkdownEditor v-model=\"case_form.input_text\" class=\"w-full\" :maxlength=\"200\" show-word-limit />\n          <!-- <ElInput size=\"large\" v-model=\"case_form.input_text\" :maxlength=\"200\" show-word-limit /> -->\n        </ElFormItem>\n        <ElFormItem\n          :label=\"$t('output')\" prop=\"output_text\"\n          :rules=\"[...generateInputRules({ message: 'form_input_placeholder' }), { max: 1000, message: $t('form_input_placeholder_max_length', { max: 1000 }) }]\"\n        >\n          <MarkdownEditor v-model=\"case_form.output_text\" class=\"w-full\" :maxlength=\"1000\" show-word-limit />\n          <!-- <ElInput type=\"textarea\" size=\"large\" :rows=\"10\" resize=\"none\" v-model=\"case_form.output_text\"\n\t\t\t\t\t\t:maxlength=\"1000\" show-word-limit /> -->\n        </ElFormItem>\n      </ElForm>\n\n      <template #footer>\n        <div class=\"border-t pt-4 flex items-center justify-end\">\n          <ElButton class=\"w-[68px] h-[36px]\" plain @click=\"onCaseCancel\">\n            {{ $t('action_cancel') }}\n          </ElButton>\n          <ElButton class=\"w-[68px] h-[36px]\" type=\"primary\" @click=\"onCaseConfirm\">\n            {{ $t('action_confirm') }}\n          </ElButton>\n        </div>\n      </template>\n    </ElDrawer>\n\n    <el-dialog\n      v-model=\"scene_visible\" :title=\"scene_form.id ? $t('action_edit') : $t('action_add')\" align-center\n      width=\"600px\"\n    >\n      <el-form ref=\"scene_form_ref\" :model=\"scene_form\" label-width=\"102px\" label-position=\"left\">\n        <el-form-item\n          :label=\"$t('pictorial_image')\" prop=\"image\"\n          :rules=\"generateInputRules({ message: 'form_upload_placeholder' })\"\n        >\n          <UploadImage v-model=\"scene_form.image\" class=\"!w-[120px] !h-[112px]\" />\n        </el-form-item>\n        <el-form-item\n          :label=\"$t('scene')\" prop=\"scene\"\n          :rules=\"[...generateInputRules({ message: 'form_input_placeholder' }), { max: 20, message: $t('form_input_placeholder_max_length', { max: 20 }) }]\"\n        >\n          <el-input v-model=\"scene_form.scene\" size=\"large\" :maxlength=\"20\" show-word-limit />\n        </el-form-item>\n        <el-form-item\n          :label=\"$t('description')\" prop=\"desc\"\n          :rules=\"[...generateInputRules({ message: 'form_input_placeholder' }), { max: 50, message: $t('form_input_placeholder_max_length', { max: 50 }) }]\"\n        >\n          <el-input\n            v-model=\"scene_form.desc\" type=\"textarea\" size=\"large\" :rows=\"5\" resize=\"none\" :maxlength=\"50\"\n            show-word-limit\n          />\n        </el-form-item>\n      </el-form>\n\n      <template #footer>\n        <div class=\"py-4 flex items-center justify-center\">\n          <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" @click=\"onSceneConfirm\">\n            {{ $t('action_confirm') }}\n          </ElButton>\n          <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click=\"onSceneCancel\">\n            {{\n              $t('action_cancel')\n            }}\n          </ElButton>\n        </div>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<style scoped>\n\n</style>\n"
  },
  {
    "path": "web/console/src/views/prompt/create/index.vue",
    "content": "<template>\n\t<Layout class=\"px-[60px] py-8\">\n\t\t<Header back :title=\"detailData.name || $t('action_edit')\" class=\"mb-5\">\n\t\t\t<template #title_suffix>\n\t\t\t\t<ElButton class=\"bg-transparent !p-0 !size-6\" size=\"default\" :icon=\"EditPen\" @click=\"handleEdit\" />\n\t\t\t</template>\n\t\t</Header>\n\t\t<ElTabs v-model=\"tabActiveName\" class=\"flex-1 prompt-tabs el-tabs--full\">\n\t\t\t<ElTabPane :label=\"$t('prompt.config')\" name=\"config\" lazy>\n\t\t\t\t<div v-loading=\"loading\" class=\"relative h-full overflow-y-auto px-8 bg-white \">\n          <ElForm ref=\"formRef\" class=\"pt-6 flex-1 overflow-hidden\" :model=\"formData\" label-position=\"top\" label-width=\"120px\">\n            <ElFormItem :label=\"$t('prompt.content')\" prop=\"content\"\n              :rules=\"[{ required: true, message: $t('form_input_placeholder') }]\">\n              <div class=\"border prompt-input-wrapper rounded w-full h-full flex flex-col !bg-white  relative overflow-y-auto\">\n                <div class=\"min-h-10 pl-3 pr-2 border-b flex items-center justify-between rounded-t bg-white\">\n                  <div class=\"flex-1 text-sm text-[#4F5052] truncate\" :title=\"$t('role_instruction_desc')\">\n                    *{{ $t('role_instruction_desc') }}\n                  </div>\n                  <div class=\"flex items-center gap-1\">\n                    <ElTooltip placement=\"top\" :content=\"$t('optimize_tip')\">\n                      <span\n                        class=\"flex-center gap-1 text-[#2563EB] text-sm px-1 cursor-pointer opacity-60 pointer-events-none\"\n                        @click.stop=\"onOptimize\">\n                        <svg-icon name=\"hglt\" width=\"18px\" />\n                        {{ $t('optimize') }}\n                      </span>\n                    </ElTooltip>\n                    <div class=\"flex-none h-4 w-px border-r border-[#E1E2E6]\" />\n                    <ElTooltip placement=\"top\" :content=\"$t('generate_tip')\">\n                      <span class=\"text-[#182B50] px-1 cursor-pointer opacity-60 pointer-events-none\"\n                        @click.stop=\"onGenerate\">\n                        <svg-icon name=\"magic-stick\" width=\"18px\" />\n                      </span>\n                    </ElTooltip>\n                  </div>\n                </div>\n                <PromptInput v-model=\"formData.content\" style=\"flex: none; min-height: 60vh; height: max-content;\" show-line show-token\n                  @change=\"formRef.validateField('content')\" />\n              </div>\n            </ElFormItem>\n          </ElForm>\n          <div class=\"flex-none pb-6\">\n            <div class=\"flex items-center justify-between mb-4\">\n              <h3 class=\"text-sm text-[#1D1E1F]\">应用场景</h3>\n              <ElButton link type=\"primary\" size=\"large\" @click=\"handleOpenLinksDialog\">\n                <svg-icon name=\"cate-manage\" width=\"14px\" class=\"mr-1\" />\n                {{ $t('default_links.default_setting') }}\n              </ElButton>\n            </div>\n            <div class=\"flex flex-wrap gap-2\">\n              <template v-for=\"(item, index) in formData.ai_links\" :key=\"index\">\n                <div v-if=\"!item.delete\" class=\"h-10 flex items-center gap-2 px-3 border rounded hover:shadow-md\">\n                  <img class=\"size-6 rounded-full\" :src=\"item.ai_link.logo\" />\n                  <p class=\"text-sm text-[#1D1E1F]\">{{ item.ai_link.name }}</p>\n                  <el-icon class=\"cursor-pointer hover:opacity-50\" @click.stop=\"handleDeleteLink(item)\">\n                    <Close />\n                  </el-icon>\n                </div>\n              </template>\n\n              <ElButton class=\"border-dashed bg-transparent\" plain type=\"primary\" size=\"large\" @click=\"handleOpenStoreDialog\">+{{ $t('action.add') }}</ElButton>\n            </div>\n          </div>\n\t\t\t\t</div>\n\t\t\t</ElTabPane>\n\t\t\t<ElTabPane :label=\"$t('prompt.guide')\" name=\"guide\" lazy>\n\t\t\t\t<GuideView />\n\t\t\t</ElTabPane>\n\t\t</ElTabs>\n\t\t<div class=\"border-t px-4 py-5 bg-white\">\n\t\t\t<ElButton class=\"w-[96px]\" type=\"primary\" size=\"large\" :loading=\"loading || submitting\" @click.stop=\"handleSave\">\n\t\t\t\t{{ $t('action_save') }}\n\t\t\t</ElButton>\n\t\t</div>\n\t</Layout>\n\t<CreateDrawer ref=\"createRef\" />\n  <StoreDialog ref=\"storeDialogRef\" :show-add-manual=\"false\" @add=\"handleAddScene\" />\n  <LinksDialog ref=\"linksDialogRef\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { EditPen, Close } from '@element-plus/icons-vue'\nimport { nextTick, onMounted, ref, onUnmounted } from 'vue'\nimport { useRoute } from 'vue-router'\n\nimport CreateDrawer from '../components/create-drawer.vue'\nimport PromptInput from '@/components/Prompt/input.vue'\nimport LinksDialog from '../components/links-dialog.vue'\nimport StoreDialog from '@/views/toolbox/components/store-dialog.vue'\n\nimport GuideView from './guide.vue'\n\nimport eventBus from '@/utils/event-bus'\nimport { useFormDataStore } from './store'\n\nconst route = useRoute()\n\nconst formDataStore = useFormDataStore()\nconst {formData, detailData, loading, submitting} = formDataStore\n\nconst formRef = ref()\n\nconst createRef = ref()\nconst storeDialogRef = ref()\nconst linksDialogRef = ref()\n\nconst tabActiveName = ref('config')\n\n\nconst handleOpenLinksDialog = () => {\n  linksDialogRef.value.open()\n}\nconst handleOpenStoreDialog = () => {\n  storeDialogRef.value.open()\n}\n\nconst handleAddScene = (data: { data: DefaultLinkItem }) => {\n  formDataStore.set({\n    ai_links: [...formData.value.ai_links, {\n      ai_link: { ...data.data },\n      delete: false\n    }]\n  })\n  // linksDialogRef.value.open()\n}\n\nconst handleDeleteLink = (item: any) => {\n  item.delete = true\n}\n\n\nconst handleEdit = async () => {\n\tformDataStore.formatFormData()\n\tawait nextTick()\n\tcreateRef.value.open()\n}\nconst handleSave = async () => {\n\tconst valid = await formRef.value.validate()\n\tif (!valid) return\n\tconst data = await formDataStore.save()\n\teventBus.emit(`prompt-update`, { data })\n\tformDataStore.fetchDetail()\n}\n\n\n\nonMounted(async () => {\n\tconst prompt_id = route.query.prompt_id as string\n\tif (prompt_id) formDataStore.fetchDetail({ prompt_id })\n})\n\n\n\nonUnmounted(() => {\n\tformDataStore.reset()\n})\n</script>\n\n<style scoped>\n.prompt-tabs :deep(.el-tabs__nav-wrap) {\n\tpadding: 0 40px;\n}\n.is-error .prompt-input-wrapper {\n\tborder-color: #F56C6C;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/prompt/create/store.ts",
    "content": "import { ref } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport { promptApi } from '@/api/modules/prompt'\n\nconst DEFAULT_FORM_DATA = {\n  prompt_id: 0,\n  group_ids: [],\n  name: '',\n  description: '',\n  content: '',\n  subscription_group_ids: [],\n  user_group_ids: [],\n  sort: 0,\n  status: 1,\n  custom_config: {\n    use_cases: []\n  },\n  ai_links: []\n}\nconst formData = ref(JSON.parse(JSON.stringify(DEFAULT_FORM_DATA)))\nconst detailData = ref({})\nconst submitting = ref(false)\nconst loading = ref(false)\n\nexport const useFormDataStore = () => {\n  const reset = () => {\n    formData.value = JSON.parse(JSON.stringify(DEFAULT_FORM_DATA))\n    detailData.value = {}\n  }\n  const set = (data = {}) => {\n    formData.value = {\n      ...formData.value,\n      ...data\n    }\n  }\n  const get = () => formData.value\n  const save = async ({ prompt_id } = {}) => {\n    const data = {\n      ...formData.value,\n      prompt_id: prompt_id || formData.value.prompt_id || detailData.value.prompt_id || 0\n    }\n    submitting.value = true\n    const res = await promptApi.save({ ...data }).finally(() => {\n      submitting.value = false\n    })\n    ElMessage.success(window.$t('action_save_success'))\n    return res\n  }\n  const fetchDetail = async ({ prompt_id } = {}) => {\n    prompt_id = prompt_id || formData.value.prompt_id\n    loading.value = true\n    const data = await promptApi.detail({ prompt_id }).finally(() => {\n      loading.value = false\n    })\n    try {\n      data.custom_config = JSON.parse(data.custom_config)\n    } catch (error) {\n      data.custom_config = {}\n    }\n    try {\n      data.ai_links = JSON.parse(data.ai_links).map((item) => {\n        return {\n          ai_link: { ...item },\n          delete: false\n        }\n      })\n    } catch (error) {\n      data.ai_links = []\n    }\n    if (!data.custom_config) data.custom_config = {}\n    if (!data.custom_config.use_cases) data.custom_config.use_cases = []\n    detailData.value = data\n    formatFormData()\n  }\n  const formatFormData = (data?: any) => {\n    data = data || detailData.value || {}\n    set({\n      prompt_id: data.prompt_id || 0,\n      group_ids: data.group_ids || [],\n      name: data.name || '',\n      description: data.description || '',\n      content: data.content || '',\n      subscription_group_ids: data.group_ids || [],\n      user_group_ids: data.group_ids || [],\n      sort: data.sort || 0,\n      status: data.status,\n      custom_config: data.custom_config,\n      ai_links: data.ai_links\n    })\n  }\n\n  return {\n    formData,\n    detailData,\n    submitting,\n    loading,\n    reset,\n    set,\n    get,\n    save,\n    fetchDetail,\n    formatFormData\n  }\n}\n"
  },
  {
    "path": "web/console/src/views/prompt/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.prompt')\">\n      <template #right>\n        <el-button type=\"primary\" size=\"large\" @click=\"handleMoreCommand('add')\"> + {{ $t('action_add') }} </el-button>\n      </template>\n    </Header>\n    <div class=\"flex-1 overflow-y-auto bg-white rounded-lg px-10 py-6 mt-4\">\n      <div class=\"flex items-center justify-between mb-4\">\n        <div class=\"flex-1 w-0\">\n          <GroupTabs\n            ref=\"groupTabsRef\"\n            v-model=\"filter_form.group_id\"\n            type=\"dropdown\"\n            :group-type=\"GROUP_TYPE.PROMPT\"\n            @change=\"refresh\"\n            @get-options=\"refresh\"\n          />\n        </div>\n        <div class=\"flex-none flex-center gap-3 ml-8\">\n          <ElInput\n            v-model=\"filter_form.keyword\"\n            size=\"large\"\n            clearable\n            :placeholder=\"$t('prompt.search_placeholder')\"\n            :suffix-icon=\"Search\"\n            @change=\"refresh\"\n          />\n        </div>\n      </div>\n      <TablePlus\n        header-row-class-name=\"rounded overflow-hidden\"\n        header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n        :data=\"table_data\"\n        :total=\"table_total\"\n        :loading=\"table_loading\"\n        :page=\"filter_form.page\"\n        :limit=\"filter_form.page_size\"\n        @page-size-change=\"onTableSizeChange\"\n        @page-current-change=\"onTableCurrentChange\"\n      >\n        <ElTableColumn :label=\"$t('title')\" min-width=\"140\" prop=\"name\" show-overflow-tooltip />\n        <ElTableColumn :label=\"$t('description')\" min-width=\"250\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <span :class=\"!row.description ? 'text-[#999]' : ''\">\n              {{ row.description || '--' }}\n            </span>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('group')\" min-width=\"180\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <span :class=\"!row.group_names || !row.group_names.length ? 'text-[#999]' : ''\">\n              {{ row.group_names.join('、') || '--' }}\n            </span>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('usage_range')\" min-width=\"180\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <div :class=\"!row.user_group_names.length ? 'text-[#999]' : ''\">\n              <span class=\"text-[#999]\">{{ $t('register_user.title') }}： </span\n              >{{ row.user_group_names.join('、') || '--' }}\n            </div>\n            <div :class=\"!row.internal_members.length ? 'text-[#999]' : ''\">\n              <span class=\"text-[#999]\">{{ $t('internal_user.title') }}： </span\n              >{{ row.internal_members.join('、') || '--' }}\n            </div>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('action_enable')\" width=\"100\">\n          <template #default=\"{ row }\">\n            <ElSwitch\n              v-model=\"row.status\"\n              :active-value=\"1\"\n              :inactive-value=\"0\"\n              @change=\"handleMoreCommand('update_status', row)\"\n            />\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('operation')\" width=\"120\" align=\"right\" fixed=\"right\">\n          <template #default=\"{ row }\">\n            <el-button type=\"primary\" link @click=\"handleMoreCommand('edit', row)\">\n              {{ $t('action_edit') }}\n            </el-button>\n            <el-button type=\"primary\" link @click=\"handleMoreCommand('delete', row)\">\n              {{ $t('action_delete') }}\n            </el-button>\n          </template>\n        </ElTableColumn>\n      </TablePlus>\n    </div>\n  </Layout>\n\n  <CreateDrawer ref=\"createRef\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { Search } from '@element-plus/icons-vue'\nimport { nextTick, onMounted, onUnmounted, reactive, ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport CreateDrawer from './components/create-drawer.vue'\n\nimport eventBus from '@/utils/event-bus'\nimport { promptApi } from '@/api/modules/prompt'\nimport { groupApi, Group } from '@/api/modules/group'\nimport { GROUP_TYPE } from '@/constants/group'\nimport { subscriptionApi } from '@/api/modules/subscription'\n\ndefineOptions({\n  name: 'Prompt',\n})\n\nconst router = useRouter()\n\nconst groupTabsRef = ref()\nconst createRef = ref()\n\nconst filter_form = reactive({\n  group_id: [],\n  keyword: '',\n  page: 1,\n  page_size: 10,\n})\nconst table_data = ref([])\nconst table_total = ref(0)\nconst table_loading = ref(false)\nconst internalGroupOptions = ref<Record<number, string>>({})\nconst subscriptionListOptions = ref<Record<number, string>>({})\n\nconst loadSubscriptionList = async () => {\n  const subscriptionList = await subscriptionApi.list({ params: { offset: 0, limit: 1000 } })\n  subscriptionList.forEach((item: Group) => {\n    subscriptionListOptions.value[item.group_id] = item.group_name\n  })\n}\n\n// 内部成员列表\nconst loadInternalGroupList = async () => {\n  const list = await groupApi.list({ params: { group_type: GROUP_TYPE.INTERNAL_USER } })\n  list.forEach((item: Group) => {\n    internalGroupOptions.value[item.group_id] = item.group_name\n  })\n}\n\n// 分组列表\nconst getGroupList = () => {\n  const options = groupTabsRef.value.getData()\n  const idNameMap: Record<number, string> = {}\n  if (options?.length > 0) {\n    options.forEach((item: Group) => {\n      idNameMap[item.group_id] = item.group_name\n    })\n  }\n  return idNameMap\n}\n\nconst fetchPromptData = async () => {\n  table_loading.value = true\n  const { total = 0, list = [] } = await promptApi\n    .list({\n      params: {\n        group_id: filter_form.group_id.join(','),\n        keyword: filter_form.keyword,\n        offset: (filter_form.page - 1) * filter_form.page_size,\n        limit: filter_form.page_size,\n      },\n    })\n    .finally(() => {\n      table_loading.value = false\n    })\n  table_total.value = total\n  table_data.value = []\n  await nextTick()\n  const options = getGroupList()\n  table_data.value = [...list].map(item => {\n    item.group_ids = item.group_ids || []\n    item.group_names = []\n    item.internal_members = []\n    item.user_group_names = []\n    item.group_ids.forEach((id: number) => {\n      if (options[id]) {\n        item.group_names.push(options[id])\n      }\n      if (internalGroupOptions.value[id]) {\n        item.internal_members.push(internalGroupOptions.value[id])\n      }\n      if (subscriptionListOptions.value[id]) {\n        item.user_group_names.push(subscriptionListOptions.value[id])\n      }\n    })\n    return item\n  })\n}\nconst refresh = async () => {\n  filter_form.page = 1\n  await loadSubscriptionList()\n  return fetchPromptData()\n}\nconst onTableSizeChange = (size: number) => {\n  filter_form.page_size = size\n  refresh()\n}\nconst onTableCurrentChange = (current: number) => {\n  filter_form.page = current\n  fetchPromptData()\n}\nconst handleMoreCommand = async (command, data = {}) => {\n  switch (command) {\n    case 'add':\n      createRef.value.open({\n        group_ids: filter_form.group_id,\n      })\n      break\n    case 'edit':\n      await router.push({\n        name: 'PromptCreate',\n        query: {\n          prompt_id: data.prompt_id,\n        },\n      })\n      break\n    case 'delete':\n      await ElMessageBox.confirm(window.$t('prompt.delete_confirm'), window.$t('tip'))\n      await promptApi.delete({ prompt_id: data.prompt_id })\n      ElMessage.success(window.$t('action_delete_success'))\n      fetchPromptData()\n      break\n    case 'update_status':\n      await promptApi.update_status({ prompt_id: data.prompt_id, status: data.status })\n      ElMessage.success(window.$t('action_save_success'))\n      break\n  }\n}\n\nonMounted(async () => {\n  // refresh()\n  await loadInternalGroupList()\n  eventBus.on('user-login-success', refresh)\n  eventBus.on('prompt-create', refresh)\n  eventBus.on('prompt-update', fetchPromptData)\n})\nonUnmounted(() => {\n  eventBus.off('user-login-success', refresh)\n  eventBus.off('prompt-create', refresh)\n  eventBus.off('prompt-update', fetchPromptData)\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/search/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.search')\" />\n    <div\n      v-loading=\"isLoading\"\n      class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border max-h-[calc(100vh-100px)] overflow-auto\"\n    >\n      <div class=\"max-w-3xl\">\n        <div class=\"flex mb-4\">\n          <div class=\"flex-none w-[100px] h-10 flex items-center justify-between gap-2\">\n            <div class=\"text-sm text-[#1D1E1F]\">\n              {{ $t('base_setting') }}\n            </div>\n          </div>\n\n          <el-input\n            v-model=\"form.settings.opening_statement\"\n            type=\"textarea\"\n            :rows=\"8\"\n            resize=\"none\"\n            class=\"w-full\"\n            :maxlength=\"200\"\n            show-word-limit\n          />\n        </div>\n        <div class=\"w-full flex mb-4\">\n          <div class=\"flex-none w-[100px] h-10 flex items-center justify-between gap-2\">\n            <div class=\"text-sm text-[#1D1E1F]\">\n              {{ $t('suggested_questions') }}\n            </div>\n          </div>\n          <div class=\"flex-1\">\n            <Sortable v-model=\"form.settings.suggested_questions\" identity=\"id\" class=\"w-full flex flex-col gap-4\">\n              <template #item=\"{ item }\">\n                <div class=\"flex items-center border px-2 border-[#DCDFE6] rounded-sm\">\n                  <div class=\"sort-icon cursor-move\">\n                    <svg-icon name=\"drag\" width=\"16px\" height=\"32px\" color=\"#a1a5af\" />\n                  </div>\n                  <div class=\"flex-1\">\n                    <el-input\n                      v-model=\"item.content\"\n                      size=\"large\"\n                      style=\"\n                        --el-input-border-color: none;\n                        --el-input-hover-border-color: none;\n                        --el-input-focus-border-color: none;\n                      \"\n                      :placeholder=\"$t('form_input_placeholder')\"\n                      :maxlength=\"50\"\n                      show-word-limit\n                      class=\"w-full\"\n                    />\n                  </div>\n                  <el-icon class=\"ml-4 cursor-pointer\" color=\"rgba(24, 43, 80, 0.4)\" @click=\"handleDel(item.id)\">\n                    <Delete />\n                  </el-icon>\n                </div>\n              </template>\n            </Sortable>\n            <div class=\"flex items-center gap-2 mt-4\">\n              <el-button size=\"large\" type=\"primary\" plain class=\"border-none\" @click=\"handleAdd\">\n                +{{ $t('action_add') }}\n              </el-button>\n              <p class=\"text-sm text-[#999999]\">最多可设置4个问题</p>\n            </div>\n          </div>\n        </div>\n        <div class=\"flex mb-4\">\n          <div class=\"flex-none w-[100px] h-10 flex items-center justify-between gap-2\">\n            <div class=\"text-sm text-[#1D1E1F]\">\n              {{ $t('over_response') }}\n            </div>\n          </div>\n          <MarkdownEditor\n            v-model=\"form.settings.out_of_range_reply.reply\"\n            type=\"simple\"\n            class=\"w-full\"\n            height=\"200px\"\n          />\n        </div>\n        <div class=\"flex mb-4\">\n          <div class=\"flex-none w-[100px] h-10 flex items-center justify-between gap-2\">\n            <div class=\"text-sm text-[#1D1E1F]\">\n              {{ '模型设置' }}\n            </div>\n          </div>\n          <div class=\"flex items-center flex-wrap gap-2 mb-2\">\n            <ModelView\n              v-for=\"item in modelList\"\n              :key=\"item.channel_id\"\n              class=\"h-9 px-3 border rounded\"\n              :channel-id=\"item.channel_id\"\n              :model=\"item.model\"\n            />\n            <el-button link type=\"primary\" @click=\"handleModelSelect\">\n              {{ $t('action_add') }}\n            </el-button>\n          </div>\n        </div>\n        <div class=\"flex mb-4\">\n          <div class=\"flex-none w-[100px] h-10 flex items-center justify-between gap-2\">\n            <div class=\"text-sm text-[#1D1E1F]\">\n              {{ '重排序模型' }}\n            </div>\n          </div>\n          <div class=\"max-w-72\">\n            <ModelSelect v-model=\"rerankModel\" clearable :type=\"MODEL_USE_TYPE.RERANKER\" />\n          </div>\n        </div>\n        <div v-if=\"false\" class=\"flex mb-4\">\n          <div class=\"flex-none w-[100px] h-10 flex items-center justify-between gap-2\">\n            <div class=\"text-sm text-[#1D1E1F]\">\n              {{ '知识库检索' }}\n            </div>\n          </div>\n          <div class=\"max-w-72\">\n            <ModelSelect v-model=\"rerankModel\" clearable :type=\"MODEL_USE_TYPE.RERANKER\" />\n          </div>\n        </div>\n      </div>\n      <div class=\"mt-5\">\n        <el-button v-debounce type=\"primary\" size=\"large\" @click=\"handleSave\">\n          {{ $t('action_save') }}\n        </el-button>\n      </div>\n    </div>\n    <ModelDialog\n      ref=\"modelDialogRef\"\n      :default-selected=\"modelList.map(item => `${item.channel_id}_${item.model}_${item.channel_type}`)\"\n      @confirm=\"handleModelConfirm\"\n    />\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport { Delete } from '@element-plus/icons-vue'\n\nimport MarkdownEditor from '@/components/Markdown/editor.vue'\nimport Sortable from '@/components/Sortable/index.vue'\nimport ModelSelect from '@/components/Model/select.vue'\nimport ModelDialog from '@/components/Model/dialog.vue'\nimport ModelView from '@/components/Model/view.vue'\n\nimport { MODEL_USE_TYPE } from '@/constants/platform/config'\nimport { deepCopy, generateRandomId } from '@/utils'\n\nimport agentsApi from '@/api/modules/agents/index'\nimport { transformAgentInfo } from '@/api/modules/agents/transform'\n\nimport { useEnterpriseStore } from '@/stores'\n\nconst enterpriseStore = useEnterpriseStore()\n\nconst MAX_QUESTION_LENGTH = 4\n\nconst DEFAULT_SETTINGS = {\n  name: '',\n  logo: '',\n  description: '',\n  model: '',\n  enable: true,\n  agent_type: 0,\n  channel_type: 0,\n  prompt: '',\n  sort: 0,\n  configs: { completion_params: { temperature: 0.2, top_p: 0.75, presence_penalty: 0.5, frequency_penalty: 0.5 } },\n  custom_config: {\n    agent_type: 'prompt',\n    provider_id: 0,\n    channel_id: 0,\n    channel_config: {},\n    file_parse: { enable: false },\n    image_parse: { enable: false },\n    agent_mode: 'chat',\n  },\n  settings: {\n    opening_statement: `你好，我是${enterpriseStore.info.name}助手。无论你有什么问题，我都会尽我所能为你提供帮助和支持。`,\n    suggested_questions: [\n      { id: generateRandomId(10), content: '最近几年哪几个行业的前景不错？' },\n      { id: generateRandomId(10), content: '说说AI行业的发展趋势和重要事件' },\n    ],\n    out_of_range_reply: {\n      enable: true,\n      reply: '当前问题可能因内容未收录、解析中或权限限制无法解答。',\n    },\n    rerank_config: {\n      rerank_model: '',\n      rerank_channel_type: 0,\n      rerank_channel_id: 0,\n    },\n  },\n}\n\nconst modelDialogRef = ref<InstanceType<typeof ModelDialog>>()\n\nconst isLoading = ref(false)\nconst form = ref({\n  ...deepCopy(DEFAULT_SETTINGS),\n})\nconst modelList = ref<{ channel_id: number; channel_type: number; model: string }[]>([])\nconst rerankModel = ref('')\n\nconst handleAdd = () => {\n  const questions = form.value.settings.suggested_questions\n  if (questions.length >= MAX_QUESTION_LENGTH) {\n    ElMessage.error(`${window.$t('max_add_tip', { max: MAX_QUESTION_LENGTH })}`)\n    return\n  }\n  questions.push({ id: generateRandomId(10), content: '' })\n}\n\nconst handleDel = (id: number) => {\n  form.value.settings.suggested_questions = form.value.settings.suggested_questions.filter(item => item.id !== id)\n}\n\nconst handleModelSelect = () => {\n  modelDialogRef.value?.open()\n}\n\nconst handleModelConfirm = (selectedModels: string[]) => {\n  modelList.value = selectedModels.map(item => {\n    const [channel_id, model, channel_type] = item.split('_')\n    return {\n      channel_id: Number(channel_id),\n      channel_type: Number(channel_type),\n      model,\n    }\n  })\n}\n\nconst loadModelList = async () => {\n  const result = await agentsApi.models.list(form.value.agent_id)\n  modelList.value = result.agent_models\n}\n\nconst loadList = async () => {\n  isLoading.value = true\n  const result = await agentsApi.group({ group_id: 0 })\n  const agent = result.agents[0] ? transformAgentInfo(result.agents[0]) : deepCopy(DEFAULT_SETTINGS)\n\n  form.value = agent\n  if (agent.agent_id) {\n    if (agent.settings.rerank_config.rerank_channel_id && agent.settings.rerank_config.rerank_model) {\n      rerankModel.value = `${agent.settings.rerank_config.rerank_channel_id}_${agent.settings.rerank_config.rerank_model}`\n    }\n    loadModelList()\n  }\n  isLoading.value = false\n}\n\nconst modelsSave = async (agent_id: number) => {\n  await agentsApi.models.batch({\n    agent_id,\n    models: modelList.value.map(item => ({\n      channel_id: item.channel_id,\n      channel_type: item.channel_type,\n      model: item.model,\n    })),\n  })\n}\n\nconst handleSave = async () => {\n  const data = deepCopy(form.value)\n  if (!modelList.value.length) {\n    ElMessage.error('请选择模型')\n    return\n  }\n  const model = modelList.value[0]\n  data.channel_type = model.channel_type\n  data.model = model.model\n\n  const [rerank_channel_id, rerank_model_name, rerank_channel_type] = (rerankModel.value || '').split('_')\n  data.settings.rerank_config.rerank_channel_type = rerank_channel_type || 0\n  data.settings.rerank_config.rerank_channel_id = rerank_channel_id || 0\n  data.settings.rerank_config.rerank_model = rerank_model_name || ''\n\n  data.settings.suggested_questions = data.settings.suggested_questions.filter(item => item.content.trim())\n\n  data.configs = JSON.stringify(data.configs)\n  data.tools = JSON.stringify(data.tools)\n  data.use_cases = JSON.stringify(data.use_cases)\n  data.custom_config = JSON.stringify(data.custom_config)\n  data.settings = JSON.stringify(data.settings)\n\n  let agent_id = 0\n  if (form.value.agent_id) {\n    agent_id = form.value.agent_id\n    await agentsApi.update(form.value.agent_id, data)\n  } else {\n    const result = await agentsApi.create(data)\n    agent_id = result.agent_id\n  }\n  await modelsSave(agent_id)\n  ElMessage.success(window.$t('action_save_success'))\n}\n\nonMounted(async () => {\n  loadList()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/smtp/components/email-form.vue",
    "content": "<template>\n  <div class=\"mt-5 w-3/5\">\n    <!-- SMTP 配置表单 -->\n    <ElForm ref=\"formRef\" :model=\"formData\" size=\"large\" label-position=\"top\">\n      <!-- SMTP 服务器地址 -->\n      <ElFormItem\n        :label=\"$t('module.SMTP_server')\"\n        prop=\"smtp_host\"\n        :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n      >\n        <ElInput v-model=\"formData.smtp_host\" :placeholder=\"$t('form_input_placeholder')\" clearable />\n      </ElFormItem>\n\n      <!-- SMTP 端口 -->\n      <ElFormItem\n        :label=\"$t('module.SMTP_port')\"\n        prop=\"smtp_port\"\n        :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['port'] })\"\n      >\n        <ElInput v-model=\"formData.smtp_port\" :placeholder=\"$t('form_input_placeholder')\" clearable />\n      </ElFormItem>\n\n      <!-- 邮箱账号 -->\n      <ElFormItem\n        :label=\"$t('module.SMTP_email_account')\"\n        prop=\"smtp_username\"\n        :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['email'] })\"\n      >\n        <ElInput v-model=\"formData.smtp_username\" :placeholder=\"$t('form_input_placeholder')\" clearable />\n      </ElFormItem>\n\n      <!-- 邮箱密码 -->\n      <ElFormItem\n        :label=\"$t('module.SMTP_email_password')\"\n        prop=\"smtp_password\"\n        :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['password'] })\"\n      >\n        <ElInput\n          v-model=\"formData.smtp_password\"\n          type=\"password\"\n          :placeholder=\"$t('form_input_placeholder')\"\n          clearable\n          show-password\n        />\n      </ElFormItem>\n\n      <!-- 发件人邮箱 -->\n      <ElFormItem\n        :label=\"$t('module.SMTP_addresser_email')\"\n        prop=\"smtp_from\"\n        :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['email'] })\"\n      >\n        <ElInput v-model=\"formData.smtp_from\" :placeholder=\"$t('form_input_placeholder')\" clearable />\n      </ElFormItem>\n\n      <!-- 启用 TLS/SSL -->\n      <ElFormItem :label=\"$t('module.SMTP_openTLS')\">\n        <ElSwitch v-model=\"formData.smtp_is_ssl\" />\n      </ElFormItem>\n\n      <!-- 收件人邮箱和测试发送 -->\n      <ElFormItem\n        :label=\"$t('module.SMTP_receiver_email')\"\n        prop=\"smtp_to\"\n        :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['email'] })\"\n      >\n        <div class=\"w-full flex gap-3\">\n          <ElInput v-model=\"formData.smtp_to\" :placeholder=\"$t('form_input_placeholder')\" clearable />\n          <ElButton v-debounce type=\"primary\" plain :disabled=\"countDown > 0\" @click=\"handleSendEmail\">\n            {{ countDown > 0 ? `${countDown}s` : $t('module.SMTP_send_email') }}\n          </ElButton>\n        </div>\n      </ElFormItem>\n    </ElForm>\n\n    <!-- 操作按钮 -->\n    <div class=\"flex gap-3\">\n      <ElButton :loading=\"isSaving\" type=\"primary\" class=\"w-24 h-9\" @click=\"handleSave\">\n        {{ $t('action.save') }}\n      </ElButton>\n      <ElButton class=\"w-24 h-9\" @click=\"handleReset\">\n        {{ $t('action_reset') }}\n      </ElButton>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, onMounted, onUnmounted } from 'vue'\nimport { ElForm } from 'element-plus'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { useEnterpriseStore } from '@/stores'\n\n// 类型定义\ninterface SMTPFormData {\n  smtp_host: string\n  smtp_port: string\n  smtp_username: string\n  smtp_password: string\n  smtp_from: string\n  smtp_to: string\n  smtp_is_ssl: boolean\n}\n\ninterface SMTPConfig {\n  content: string\n  enabled: boolean\n  type: 'smtp' | 'mobile'\n}\n\ninterface TestEmailConfig {\n  from: string\n  host: string\n  is_ssl: boolean\n  password: string\n  port: number\n  to: string\n  username: string\n}\n\n// 常量定义\nconst COUNTDOWN_DURATION = 60 // 发送邮件后的倒计时时长（秒）\nconst SMTP_TYPE = 'smtp' as const // SMTP 配置类型\n\n// 状态管理\nconst store = useEnterpriseStore()\n\nconst formRef = ref<InstanceType<typeof ElForm>>() // 表单引用\n\n// 响应式数据\nconst isSaving = ref<boolean>(false) // 保存状态\nconst countDown = ref<number>(0) // 倒计时\n\n// 定时器\nlet timer: NodeJS.Timeout | null = null\n\n// 表单数据\nconst formData = reactive<SMTPFormData>({\n  smtp_host: '',\n  smtp_port: '',\n  smtp_username: '',\n  smtp_password: '',\n  smtp_from: '',\n  smtp_to: '',\n  smtp_is_ssl: true,\n})\n\n/**\n * 启动倒计时\n */\nconst startCountdown = (): void => {\n  countDown.value = COUNTDOWN_DURATION\n  timer = setInterval(() => {\n    countDown.value--\n    if (countDown.value <= 0) {\n      clearInterval(timer as NodeJS.Timeout)\n      timer = null\n      countDown.value = 0\n    }\n  }, 1000)\n}\n/**\n * 发送测试邮件\n */\nconst handleSendEmail = async (): Promise<void> => {\n  const valid = await formRef.value?.validate()\n  if (!valid) return\n  try {\n    const config: TestEmailConfig = {\n      from: formData.smtp_from,\n      host: formData.smtp_host,\n      is_ssl: formData.smtp_is_ssl,\n      password: formData.smtp_password,\n      port: Number(formData.smtp_port),\n      to: formData.smtp_to,\n      username: formData.smtp_username,\n    }\n\n    await store.sendTestEmail({ data: config })\n    ElMessage.success(window.$t('action_send_success'))\n\n    // 启动倒计时\n    startCountdown()\n  } catch (error) {\n    console.error('发送测试邮件失败:', error)\n  }\n}\n\n/**\n * 重置表单数据\n */\nconst handleReset = (): void => {\n  Object.assign(formData, {\n    smtp_host: '',\n    smtp_port: '',\n    smtp_username: '',\n    smtp_password: '',\n    smtp_from: '',\n    smtp_to: '',\n    smtp_is_ssl: true,\n  })\n}\n\n/**\n * 保存 SMTP 配置\n */\nconst handleSave = async (): Promise<void> => {\n  const valid = await formRef.value?.validate()\n  if (!valid) return\n\n  isSaving.value = true\n\n  const requestConfig: SMTPConfig = {\n    content: JSON.stringify(formData),\n    enabled: true,\n    type: SMTP_TYPE,\n  }\n\n  try {\n    await store.saveSMTPInfo({ data: requestConfig })\n    ElMessage.success(window.$t('action_save_success'))\n  } catch (error) {\n    console.error('保存SMTP配置失败:', error)\n  } finally {\n    isSaving.value = false\n  }\n}\n\n/**\n * 获取表单数据并加载配置\n */\nconst getData = (): SMTPFormData => {\n  store.loadSMTPDetail({ data: { type: SMTP_TYPE } }).then(data => {\n    const res = JSON.parse(data.content)\n    Object.assign(formData, {\n      smtp_host: res.smtp_host || '',\n      smtp_port: res.smtp_port || '',\n      smtp_username: res.smtp_username || '',\n      smtp_password: res.smtp_password || '',\n      smtp_to: res.smtp_to || '',\n      smtp_from: res.smtp_from || '',\n      smtp_is_ssl: res.smtp_is_ssl ?? true,\n    })\n  })\n  return { ...formData }\n}\n\n// 暴露给父组件的方法\ndefineExpose({\n  getData,\n})\n\n/**\n * 组件挂载时加载配置数据\n */\nonMounted((): void => {\n  getData()\n})\n\n/**\n * 组件卸载时清理定时器\n */\nonUnmounted((): void => {\n  if (timer) {\n    clearInterval(timer)\n    timer = null\n  }\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/smtp/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <!-- 页面标题 -->\n    <Header :title=\"$t('module.SMTP')\" />\n\n    <div class=\"flex-1 flex flex-col gap-4 bg-white p-6 mt-3 box-border overflow-y-auto\">\n      <!-- 邮件日志配置区域 -->\n      <div class=\"w-full px-6 py-4 border rounded hover:shadow\">\n        <div class=\"h-8 flex justify-between items-center\">\n          <p>{{ $t('module.SMTP_email_log') }}</p>\n          <div class=\"flex items-center\">\n            <ElSwitch v-model=\"openEmail\" @change=\"handleOpenEmail\" />\n            <span class=\"ml-2\">{{ openEmail ? $t('action_enable') : $t('action_close') }}</span>\n          </div>\n        </div>\n\n        <!-- 邮件配置表单 -->\n        <EmailForm v-if=\"openEmail\" ref=\"emialFormRef\" />\n      </div>\n\n      <!-- 手机日志配置区域（暂未开放） -->\n      <div class=\"w-full px-6 border rounded hover:shadow\">\n        <div class=\"h-16 flex justify-between items-center\">\n          <p>{{ $t('module.SMTP_mobile_log') }}</p>\n          <div class=\"flex items-center\">\n            <ElSwitch v-model=\"openMobile\" disabled @change=\"handleOpenMobile\" @click=\"handleClick\" />\n            <span class=\"ml-2\">{{ openMobile ? $t('action_enable') : $t('action_close') }}</span>\n          </div>\n        </div>\n      </div>\n    </div>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useEnterpriseStore } from '@/stores'\nimport EmailForm from './components/email-form.vue'\n\nconst SMTP_TYPE = {\n  EMAIL: 'smtp',\n  MOBILE: 'mobile',\n} as const\n\ntype SMTPType = (typeof SMTP_TYPE)[keyof typeof SMTP_TYPE]\n\n// 类型定义\ninterface SMTPConfig {\n  content: string\n  enabled: boolean\n  type: SMTPType\n}\n\n// 状态管理\nconst store = useEnterpriseStore()\n\nconst emialFormRef = ref<InstanceType<typeof EmailForm>>() // 表单组件引用\n\n// 响应式数据\nconst openEmail = ref<boolean>(false) // 邮件日志开关状态\nconst openMobile = ref<boolean>(false) // 手机日志开关状态（暂未开放）\n\n/**\n * 处理邮件日志开关变化\n * 当关闭邮件日志时，保存当前配置并禁用\n */\nconst handleOpenEmail = async (): Promise<void> => {\n  // 只有在关闭邮件日志时才需要保存配置\n  if (!openEmail.value) {\n    if (!emialFormRef.value) return\n\n    const formData = emialFormRef.value.getData()\n    if (!formData || Object.keys(formData).length === 0) return\n\n    try {\n      const requestConfig: SMTPConfig = {\n        content: JSON.stringify(formData),\n        enabled: false,\n        type: SMTP_TYPE.EMAIL,\n      }\n      await store.saveSMTPInfo({ data: requestConfig })\n    } catch (error) {\n      console.error('保存SMTP配置失败:', error)\n    }\n  }\n}\n\n/**\n * 处理手机日志开关变化（暂未开放）\n */\nconst handleOpenMobile = (): void => {\n  ElMessage.warning(window.$t('feature_coming_soon'))\n}\n\n/**\n * 处理手机日志开关点击（暂未开放）\n */\nconst handleClick = (): void => {\n  ElMessage.warning(window.$t('feature_coming_soon'))\n}\n\n/**\n * 组件挂载时加载SMTP配置信息\n */\nonMounted(async (): Promise<void> => {\n  try {\n    const data = await store.loadSMTPInfo()\n    openEmail.value = data[0]?.enabled || false\n  } catch (error) {\n    console.error('加载SMTP配置失败:', error)\n  }\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/space/components/info-save-dialog.vue",
    "content": "<template>\n  <el-dialog\n    v-model=\"visible\"\n    class=\"el-dialog--footer-center\"\n    :title=\"originData.id ? $t('action.edit') : $t('action.create')\"\n    destroy-on-close\n    center\n    :close-on-click-modal=\"false\"\n    width=\"500px\"\n  >\n    <el-form ref=\"formRef\" :model=\"formData\" label-width=\"108px\" require-asterisk-position=\"right\" label-position=\"top\">\n      <div class=\"flex items-center gap-4 mb-[18px]\">\n        <!-- <el-form-item :label=\"$t('space.icon')\" prop=\"icon\" :rules=\"rules.icon\" required> -->\n        <UploadImage v-model=\"formData.icon\" class=\"w-[60px] h-[60px]\" />\n        <!-- </el-form-item> -->\n        <el-form-item class=\"flex-1 !mb-0\" :label=\"$t('space.name')\" prop=\"name\" :rules=\"rules.name\" required>\n          <el-input\n            v-model=\"formData.name\"\n            size=\"large\"\n            :placeholder=\"$t('space.name_placeholder')\"\n            maxlength=\"20\"\n            show-word-limit\n          />\n        </el-form-item>\n      </div>\n      <!-- 成员与权限 -->\n      <el-form-item label=\"成员与权限\">\n        <template #label>\n          <div class=\"flex items-center justify-between gap-2\">\n            <span>成员与权限</span>\n            <MemberInput @confirm=\"handleMemberConfirm\">\n              <template #trigger>\n                <el-button class=\"!-mr-3\" type=\"primary\" link>+添加成员</el-button>\n              </template>\n            </MemberInput>\n          </div>\n        </template>\n        <div class=\"w-full p-3 flex flex-col bg-[#F7F8FA] rounded-xl\">\n          <div class=\"max-h-52 overflow-y-auto\">\n            <div\n              v-for=\"(member, index) in formData.permissions\"\n              :key=\"member.subject_id\"\n              class=\"flex items-center justify-between rounded-md py-1.5\"\n            >\n              <div class=\"flex items-center gap-2\">\n                <template v-if=\"member.subject_type === SUBJECT_TYPE.company_all\">\n                  <img :src=\"$getRealPath({ url: '/images/space/peoples.png' })\" alt=\"全体成员\" class=\"w-5 h-5\" />\n                  <span class=\"text-sm text-[#1D1E1F]\">全体成员</span>\n                </template>\n                <EntityDisplay\n                  v-else\n                  :id=\"member.subject_id\"\n                  :type=\"member.subject_type === SUBJECT_TYPE.group ? 'group' : 'user'\"\n                  mode=\"full\"\n                  :avatar-size=\"20\"\n                />\n              </div>\n              <div class=\"flex items-center gap-2\">\n                <RolePopover\n                  v-model=\"member.permission\"\n                  :remove=\"!isSelf(member.subject_id)\"\n                  :disabled=\"isSelf(member.subject_id) || isCreator(member.subject_id)\"\n                  @select=\"handlePermissionSelect($event, index)\"\n                />\n              </div>\n            </div>\n          </div>\n        </div>\n      </el-form-item>\n\n      <!-- 可见性设置 -->\n      <el-form-item label=\"可见性设置\">\n        <div class=\"grid grid-cols-2 gap-3\">\n          <div\n            class=\"rounded-md border p-3 relative cursor-pointer\"\n            :class=\"[formData.visibility === VISIBILITY_TYPE.public ? 'bg-[#2563EB14] border-[#2563EB]' : '']\"\n            @click=\"formData.visibility = VISIBILITY_TYPE.public\"\n          >\n            <div class=\"mb-2 flex items-center gap-1\">\n              <el-icon color=\"#999\" size=\"16\"><View /></el-icon>\n              <span class=\"text-sm text-[#1D1E1F]\">可见</span>\n            </div>\n            <div class=\"text-xs text-[#939499]\">非空间成员也可看查看，并主动申请加入空间内知识库</div>\n            <div class=\"absolute top-1 right-1\">\n              <el-radio :model-value=\"formData.visibility\" :value=\"VISIBILITY_TYPE.public\" />\n            </div>\n          </div>\n          <div\n            class=\"rounded-md border p-3 relative cursor-pointer\"\n            :class=\"[formData.visibility === VISIBILITY_TYPE.private ? 'bg-[#2563EB14] border-[#2563EB]' : '']\"\n            @click=\"formData.visibility = VISIBILITY_TYPE.private\"\n          >\n            <div class=\"mb-2 flex items-center gap-1\">\n              <el-icon color=\"#999\" size=\"16\"><Hide /></el-icon>\n              <span class=\"text-sm text-[#1D1E1F]\">不可见</span>\n            </div>\n            <div class=\"text-xs text-[#939499]\">仅空间成员可查看，只有获得链接的成员才能申请加入空间内知识库</div>\n            <div class=\"absolute top-1 right-1\">\n              <el-radio :model-value=\"formData.visibility\" :value=\"VISIBILITY_TYPE.private\" />\n            </div>\n          </div>\n        </div>\n      </el-form-item>\n    </el-form>\n\n    <template #footer>\n      <ElButton v-debounce class=\"w-24 h-9\" type=\"primary\" @click.stop=\"handleSave\">\n        {{ $t('action_save') }}\n      </ElButton>\n      <ElButton class=\"w-24 h-9 text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n        {{ $t('action_cancel') }}\n      </ElButton>\n    </template>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive } from 'vue'\nimport { View, Hide } from '@element-plus/icons-vue'\nimport UploadImage from '@/components/Upload/image.vue'\nimport MemberInput from '@/components/Permission/member-selector.vue'\nimport RolePopover from '@/components/Permission/selector.vue'\nimport EntityDisplay from '@/components/EntityDisplay/index.vue'\nimport {\n  PERMISSION_TYPE,\n  SUBJECT_TYPE,\n  RESOURCE_TYPE,\n  type PermissionType,\n  VISIBILITY_TYPE,\n} from '@/components/Permission/constant'\nimport spacesApi from '@/api/modules/spaces/index'\nimport { permissionsApi } from '@/api/modules/permissions'\nimport type { SpaceItem, SpaceCreateRequest } from '@/api/modules/spaces/types'\n\nimport { generateInputRules } from '@/utils/form-rule'\nimport { useUserStore } from '@/stores/modules/user'\n\nconst emit = defineEmits<{\n  (e: 'refresh', reset: boolean): void\n}>()\n\nconst formRef = ref()\nconst visible = ref(false)\nconst originData = ref<Partial<SpaceItem>>({})\nconst userStore = useUserStore()\n\nconst formData = reactive<SpaceCreateRequest>({\n  name: '',\n  description: '',\n  icon: '',\n  visibility: VISIBILITY_TYPE.public,\n  permissions: [],\n})\n\nconst default_permission = {\n  subject_type: SUBJECT_TYPE.company_all,\n  subject_id: 0,\n  permission: PERMISSION_TYPE.viewer,\n}\n\nconst isSelf = (subject_id: number) => {\n  return subject_id === userStore.info.user_id\n}\nconst isCreator = (subject_id: number) => {\n  return subject_id === originData.value.owner_id\n}\n\nconst rules = {\n  name: generateInputRules({ validator: ['text'] }),\n  icon: generateInputRules({ validator: ['image'] }),\n}\n\nconst handleMemberConfirm = data => {\n  const permissions = formData.permissions\n  data.list.forEach(member => {\n    const exist = permissions.find(\n      item => item.subject_id === member.subject_id && item.subject_type === member.subject_type\n    )\n    if (exist) {\n      if (isSelf(exist.subject_id)) {\n        return\n      }\n      exist.permission = member.permission\n      return\n    }\n\n    formData.permissions.push({\n      subject_id: member.subject_id,\n      permission: member.permission,\n      subject_type: member.subject_type,\n    })\n  })\n}\n\nconst handlePermissionSelect = (permission: PermissionType, index: number) => {\n  if (permission === PERMISSION_TYPE.remove) {\n    formData.permissions = formData.permissions.filter((item, i) => i !== index)\n  }\n}\n\nconst open = async (data: SpaceItem = {} as SpaceItem) => {\n  formData.name = data.name || ''\n  formData.description = data.description || ''\n  formData.icon = data.icon || `${window.location.origin}/images/space/logo.png`\n  formData.visibility = typeof data.visibility === 'number' ? data.visibility : VISIBILITY_TYPE.public\n  originData.value = data || {}\n  if (data.id) {\n    permissionsApi\n      .list({\n        resource_type: RESOURCE_TYPE.space,\n        resource_id: data.id,\n      })\n      .then(res => {\n        formData.permissions = res.filter(item => item.subject_type !== SUBJECT_TYPE.space_active)\n      })\n  } else {\n    formData.permissions = [\n      { ...default_permission },\n      {\n        subject_type: SUBJECT_TYPE.user,\n        subject_id: userStore.info.user_id,\n        permission: PERMISSION_TYPE.manage,\n      },\n    ]\n  }\n  visible.value = true\n}\n\nconst close = () => {\n  visible.value = false\n}\n\nconst handleSave = async () => {\n  const valid = await formRef.value.validate()\n  if (!valid) return\n  const form = {\n    ...formData,\n    permissions: [...formData.permissions],\n  }\n  if (originData.value.id) {\n    await spacesApi.update(originData.value.id, form)\n    ElMessage.success(window.$t('message_status.save_success'))\n  } else {\n    await spacesApi.create(form)\n    ElMessage.success(window.$t('message_status.create_success'))\n  }\n  emit('refresh', !originData.value.id)\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/space/components/knowledge-list-drawer.vue",
    "content": "<template>\n  <el-drawer v-model=\"visible\" :title=\"$t('knowledge.name')\" size=\"80%\">\n    <TablePlus\n      :data=\"tableData\"\n      :total=\"tableTotal\"\n      style=\"width: 100%\"\n      header-row-class-name=\"rounded overflow-hidden\"\n      header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n      @page-size-change=\"handleSizeChange\"\n      @page-current-change=\"handleCurrentChange\"\n    >\n      <ElTableColumn :label=\"$t('common.name')\" min-width=\"160\" prop=\"name\" show-overflow-tooltip />\n      <ElTableColumn\n        :label=\"$t('knowledge.short_name')\"\n        min-width=\"140\"\n        prop=\"description\"\n        show-overflow-tooltip\n      ></ElTableColumn>\n      <ElTableColumn :label=\"$t('common.member')\" width=\"160\" prop=\"nickname\" show-overflow-tooltip>\n        <template #default=\"{ row }\">\n          <span :class=\"{ 'text-[#9B9B9B]': !row.nickname }\">\n            {{ row.nickname || '--' }}\n          </span>\n        </template>\n      </ElTableColumn>\n      <ElTableColumn :label=\"$t('common.creator')\" prop=\"capacity\" width=\"120\" show-overflow-tooltip>\n        <template #default=\"{ row }\">\n          {{ row.capacity || '--' }}\n        </template>\n      </ElTableColumn>\n      <ElTableColumn :label=\"$t('created_time')\" min-width=\"140\" prop=\"created_time\" show-overflow-tooltip>\n        <template #default=\"{ row }\">\n          <span :class=\"{ 'text-[#9B9B9B]': !row.created_time }\">\n            {{ row.created_time }}\n          </span>\n        </template>\n      </ElTableColumn>\n      <ElTableColumn :label=\"$t('operation')\" width=\"170\" fixed=\"right\" align=\"right\">\n        <template #default=\"{ row }\">\n          <ElButton class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click.stop=\"handleEdit(row)\">\n            {{ $t('action.manage') }}\n          </ElButton>\n          <ElTooltip :content=\"$t('space.delete_tip', { total: 111 })\" placement=\"top\" trigger=\"hover\">\n            <span>\n              <ElButton\n                :disabled=\"11 > 0\"\n                class=\"text-[#5A6D9E] !bg-transparent\"\n                type=\"text\"\n                @click.stop=\"handleDelete(row)\"\n              >\n                {{ $t('action_delete') }}\n              </ElButton>\n            </span>\n          </ElTooltip>\n        </template>\n      </ElTableColumn>\n    </TablePlus>\n  </el-drawer>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { librariesApi } from '@/api/modules/libraries/index'\nimport type { SpaceItem } from '@/api/modules/spaces/types'\nimport type { LibraryItem } from '@/api/modules/libraries/types'\n\nconst visible = ref(false)\nconst space_id = ref(0)\nconst tableData = ref<LibraryItem[]>([])\nconst tableTotal = ref(0)\n\nconst loadList = () => {\n  librariesApi\n    .list({\n      space_id: space_id.value,\n      offset: 0,\n      limit: 10,\n    })\n    .then(res => {\n      tableData.value = res.list\n      tableTotal.value = res.total\n    })\n}\n\nconst open = (data: SpaceItem) => {\n  space_id.value = data.id\n  loadList()\n  visible.value = true\n}\n\nconst close = () => {\n  visible.value = false\n}\n\nconst handleSizeChange = (size: number) => {\n  console.log(size)\n}\n\nconst handleCurrentChange = (current: number) => {\n  console.log(current)\n}\n\nconst handleEdit = (row: LibraryItem) => {\n  console.log('Edit:', row)\n}\n\nconst handleDelete = (row: LibraryItem) => {\n  console.log('Delete:', row)\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/space/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.space')\" />\n    <div class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border max-h-[calc(100vh-100px)] overflow-auto\">\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-3\">\n          <ElInput\n            v-model=\"filter_form.name\"\n            style=\"max-width: 268px\"\n            size=\"large\"\n            clearable\n            :prefix-icon=\"Search\"\n            :placeholder=\"$t('space.search_placeholder')\"\n            @change=\"refresh\"\n          />\n        </div>\n        <div class=\"flex-center gap-3\">\n          <ElButton type=\"primary\" size=\"large\" @click=\"handleAdd\"> + {{ $t('action_add') }} </ElButton>\n        </div>\n      </div>\n\n      <div v-loading=\"tableLoading\" class=\"flex-1 overflow-y-auto bg-white rounded-lg mt-4\">\n        <TablePlus\n          :data=\"tableData\"\n          :page=\"filter_form.offset + 1\"\n          :limit=\"filter_form.limit\"\n          :total=\"tableTotal\"\n          style=\"width: 100%\"\n          header-row-class-name=\"rounded overflow-hidden\"\n          header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n          @page-size-change=\"handleSizeChange\"\n          @page-current-change=\"handleCurrentChange\"\n        >\n          <ElTableColumn :label=\"$t('space.name')\" min-width=\"160\" prop=\"name\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <div class=\"flex items-center gap-2\">\n                <img :src=\"row.icon\" class=\"size-8 rounded\" />\n                <span>\n                  {{ row.name }}\n                </span>\n              </div>\n            </template>\n          </ElTableColumn>\n\n          <ElTableColumn\n            :label=\"$t('knowledge.name')\"\n            min-width=\"140\"\n            prop=\"library_count\"\n            show-overflow-tooltip\n          ></ElTableColumn>\n          <ElTableColumn :label=\"$t('created_time')\" min-width=\"160\" prop=\"created_time\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              {{ row.created_time }}\n            </template>\n          </ElTableColumn>\n\n          <ElTableColumn :label=\"$t('common.creator')\" width=\"160\" prop=\"owner_info.nickname\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <template v-if=\"row.is_default\">\n                {{ $t('space.system') }}\n              </template>\n              <template v-else>\n                {{ row.owner_info.nickname }}\n              </template>\n            </template>\n          </ElTableColumn>\n          <!-- <ElTableColumn :label=\"$t('space.capacity')\" prop=\"capacity\" width=\"120\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              {{ row.capacity || '--' }}\n            </template>\n          </ElTableColumn> -->\n          <ElTableColumn :label=\"$t('operation')\" width=\"170\" fixed=\"right\" align=\"right\">\n            <template #default=\"{ row }\">\n              <ElButton class=\"text-[#5A6D9E] !bg-transparent\" link @click.stop=\"handleEdit(row)\">\n                {{ $t('action_edit') }}\n              </ElButton>\n              <!-- <ElButton class=\"text-[#5A6D9E] !bg-transparent\" link @click.stop=\"handleManage(row)\">\n                {{ $t('knowledge.name') }}\n              </ElButton> -->\n              <ElTooltip\n                v-if=\"row.is_default\"\n                :content=\"$t('space.system_space_delete_tip')\"\n                placement=\"top\"\n                trigger=\"hover\"\n              >\n                <span class=\"ml-2\">\n                  <ElButton disabled class=\"text-[#5A6D9E] !bg-transparent\" link @click.stop=\"handleDelete(row)\">\n                    {{ $t('action_delete') }}\n                  </ElButton>\n                </span>\n              </ElTooltip>\n              <ElTooltip\n                v-else\n                :disabled=\"row.library_count === 0\"\n                :content=\"$t('space.delete_tip', { total: row.library_count })\"\n                placement=\"top\"\n                trigger=\"hover\"\n              >\n                <span class=\"ml-2\">\n                  <ElButton\n                    :disabled=\"row.library_count > 0\"\n                    class=\"text-[#5A6D9E] !bg-transparent\"\n                    link\n                    @click.stop=\"handleDelete(row)\"\n                  >\n                    {{ $t('action_delete') }}\n                  </ElButton>\n                </span>\n              </ElTooltip>\n            </template>\n          </ElTableColumn>\n        </TablePlus>\n      </div>\n    </div>\n    <InfoSaveDialog ref=\"infoSaveDialogRef\" @refresh=\"refresh\" />\n    <KnowledgeListDrawer ref=\"knowledgeListDrawerRef\" @refresh=\"refresh\" />\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { Search } from '@element-plus/icons-vue'\nimport { onMounted, reactive, ref } from 'vue'\nimport spacesApi from '@/api/modules/spaces/index'\nimport type { SpaceItem, SpaceDisplayItem } from '@/api/modules/spaces/types'\nimport { transformSpaceList } from '@/api/modules/spaces/transform'\n\nimport InfoSaveDialog from './components/info-save-dialog.vue'\nimport KnowledgeListDrawer from './components/knowledge-list-drawer.vue'\n\nconst infoSaveDialogRef = ref<InstanceType<typeof InfoSaveDialog>>()\nconst knowledgeListDrawerRef = ref<InstanceType<typeof KnowledgeListDrawer>>()\nconst filter_form = reactive({\n  name: '',\n  offset: 0,\n  limit: 10,\n  view: 'admin',\n})\n\nconst tableData = ref<SpaceDisplayItem[]>([])\nconst tableTotal = ref(0)\nconst tableLoading = ref(false)\n\nconst loadList = async () => {\n  tableLoading.value = true\n  const res = await spacesApi.list({ ...filter_form }).finally(() => {\n    tableLoading.value = false\n  })\n  tableTotal.value = res.count\n  tableData.value = transformSpaceList(res.spaces)\n}\n\nconst refresh = (reset: boolean = true) => {\n  if (reset) {\n    filter_form.offset = 0\n  }\n  loadList()\n}\nconst handleSizeChange = (size: number) => {\n  filter_form.limit = size\n  refresh()\n}\nconst handleCurrentChange = (page: number) => {\n  filter_form.offset = (page - 1) * filter_form.limit\n  loadList()\n}\n\nconst handleAdd = () => {\n  infoSaveDialogRef.value?.open()\n}\nconst handleEdit = (data: SpaceItem) => {\n  infoSaveDialogRef.value?.open(data)\n}\n// const handleManage = (data: SpaceItem) => {\n//   knowledgeListDrawerRef.value?.open(data)\n// }\nconst handleDelete = async (data: SpaceItem) => {\n  await ElMessageBox.prompt(\n    window.$t('space.delete_confirm_tip', { name: data.name }),\n    window.$t('space.delete_confirm'),\n    {\n      inputPattern: new RegExp(data.name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')),\n      dangerouslyUseHTMLString: true,\n      buttonSize: 'large',\n      cancelButtonClass: 'w-24',\n      confirmButtonClass: 'w-24 !bg-[#FA5151] !border-none',\n      inputPlaceholder: window.$t('space.delete_confirm_tip_placeholder'),\n      inputErrorMessage: window.$t('space.delete_confirm_tip_placeholder'),\n    }\n  ).then(async ({ value }) => {\n    if (value === data.name) {\n      await spacesApi.delete(data.id)\n      ElMessage.success(window.$t('action_delete_success'))\n      refresh(false)\n    }\n  })\n}\n\nonMounted(async () => {\n  refresh()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/sso/components/access-dialog.vue",
    "content": "<template>\n  <el-dialog v-model=\"visible\" class=\"el-dialog--noheader\" width=\"650px\" :close-on-click-modal=\"false\">\n    <div class=\"h-[116px] bg-[#F1F4FD] flex items-center justify-center gap-5 -mx-7 -mt-4 rounded-t-lg\">\n      <img class=\"w-12 h-10\" alt=\"\" :src=\"LOGO_MAP[app_type]\" />\n      <img class=\"w-[46px] h-[21px]\" src=\"/images/sso/switch.png\" alt=\"\" />\n      <img class=\"w-12 h-12\" :src=\"enterpriseStore.info.logo\" alt=\"\" />\n    </div>\n    <span class=\"absolute right-4 top-4 cursor-pointer p-2\" @click=\"visible = false\">\n      <el-icon color=\"#909399\" size=\"20\">\n        <Close />\n      </el-icon>\n    </span>\n\n    <div class=\"text-[#182B50] text-[28px] font-semibold text-center py-10\">\n      {{ $t('sso.access_title', { title: $t(`sso.${app_type}.abbr_title`) }) }}\n    </div>\n    <div class=\"text-[#182B50] text-center text-lg font-semibold\">\n      {{ $t('sso.access_desc', { title: $t(`sso.${app_type}.abbr_title`) }) }}\n    </div>\n    <div class=\"text-[#182B50] text-center text-opacity-80 text-sm mt-3\">\n      {{ $t('sso.access_desc_v2', { title: $t(`sso.${app_type}.abbr_title`) }) }}\n    </div>\n    <div class=\"py-6 flex flex-col items-center gap-5 mt-20\">\n      <el-button type=\"primary\" size=\"large\" @click=\"handleInstall\">\n        {{ $t('sso.goto_access', { title: $t(`sso.${app_type}.abbr_title`) }) }}\n      </el-button>\n      <el-button style=\"margin-left: 0\" type=\"primary\" link @click=\"handleRegister\">\n        {{ $t('sso.goto_register', { title: $t(`sso.${app_type}.abbr_title`) }) }}\n      </el-button>\n    </div>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { Close } from '@element-plus/icons-vue'\n\nimport { useEnterpriseStore, useUserStore } from '@/stores'\nimport { api_host } from '@/utils/config'\nimport { dingtalkApi } from '@/api/modules/dingtalk'\n\ntype Type = 'wecom' | 'dingtalk'\nconst LOGO_MAP = {\n  wecom: window.$getRealPath({ url: '/images/sso/wecom_v2.png' }),\n  dingtalk: window.$getRealPath({ url: '/images/sso/dingtalk.png' }),\n}\n\nconst user_store = useUserStore()\n\nconst enterpriseStore = useEnterpriseStore()\nconst visible = ref(false)\nconst app_type = ref<Type>('wecom')\nconst WECOM_SUITE_ID = import.meta.env.VITE_GLOB_SUITEID\n\nconst handleInstall = async () => {\n  let url = ''\n  if (app_type.value === 'wecom') {\n    url = `${api_host}/api/saas/wecom/callback/start-install/${WECOM_SUITE_ID}?tk=${encodeURIComponent(user_store.info.access_token)}`\n    window.open(url, '_blank')\n    ElMessageBox.confirm(window.$t('sso.auth_completed_tip')).then(() => {\n      location.reload()\n    })\n  } else if (app_type.value === 'dingtalk') {\n    const data = await dingtalkApi.dingtalkOauth2({\n      redirect_uri: `${window.location.origin}${window.location.pathname}/#/sso`,\n    })\n    window.open(data.redirect_url, '_blank')\n  }\n}\nconst handleRegister = () => {\n  let url = ''\n  switch (app_type.value) {\n    case 'wecom':\n      url = 'https://work.weixin.qq.com/wework_admin/register_wx?from=loginpage'\n      break\n    case 'dingtalk':\n      url = 'https://open-dev.dingtalk.com/?spm=dd_developers.header.unLogin.openDevBtn'\n      break\n  }\n  window.open(url, '_blank')\n}\n\ndefineExpose({\n  open({ type }: { type?: Type } = {}) {\n    if (type) app_type.value = type\n    visible.value = true\n  },\n})\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/console/src/views/sso/components/api-access-dialog.vue",
    "content": "<template>\n  <el-dialog v-model=\"visible\" width=\"700px\" :close-on-click-modal=\"false\" class=\"api-access-dialog\">\n    <template #title>{{ $t('sso.api_access.title') }}</template>\n    <div class=\"bg-[#F6F9FC] p-4 leading-[1.85] relative change-line-text\">\n      {{ $t('sso.access_method') }}<br />\n      {{ $t('sso.method_tip1') }}<br />\n      {{ $t('sso.method_tip2') }}<span class=\"text-[#FA5151]\">{{ link }}</span>\n      <ElButton text class=\"p-0 w-4 h-4\" type=\"default\" @click=\"handleCopy('link')\">\n        <ElIcon :size=\"16\" class=\"ml-2\">\n          <CopyDocument />\n        </ElIcon> </ElButton\n      ><br />\n      <span v-if=\"isEncryptionEnabled\"\n        >{{ $t('sso.method_tip3') }}<br />\n        <span class=\"pl-2\">- username ：{{ $t('sso.username_tip') }}<br /></span>\n        <span class=\"pl-2\">- timestamp : {{ $t('sso.timestamp_tip') }}<br /></span>\n        <span class=\"pl-2\"\n          >- sign ：{{ $t('sso.sign_tip', { timestamp: timestamp, username: userStore.info.username }) }}</span\n        ></span\n      >\n      <el-link type=\"primary\" class=\"right-4 top-4\" style=\"position: absolute\">{{\n        $t('sso.API_documentation')\n      }}</el-link>\n    </div>\n    <div class=\"mt-4\">\n      {{ $t('sso.enable_encryption') }}\n      <el-switch v-model=\"isEncryptionEnabled\" class=\"ml-2\" />\n    </div>\n    <div v-if=\"isEncryptionEnabled\" class=\"mt-2\">\n      Secret\n      <span class=\"ml-2 mr-2\">{{ secret }}</span>\n      <ElButton text class=\"p-0 w-4 h-4\" type=\"default\" @click=\"handleCopy('secret')\">\n        <ElIcon :size=\"16\" class=\"ml-2\">\n          <CopyDocument />\n        </ElIcon>\n      </ElButton>\n      <ElButton text class=\"p-0\" type=\"primary\" @click=\"handleRecreateSecret\">{{\n        $t('action_restart_generation')\n      }}</ElButton>\n    </div>\n    <div class=\"flex justify-center mt-8\">\n      <el-button type=\"primary\" class=\"w-24 h-9\" @click=\"handleSaveConfig\">{{ $t('action_confirm') }}</el-button>\n      <el-button class=\"w-24 h-9\" @click=\"visible = false\">{{ $t('action_cancel') }}</el-button>\n    </div>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, computed } from 'vue'\nimport { CopyDocument } from '@element-plus/icons-vue'\nimport { copyToClip } from '@/utils/copy'\nimport { generateSignParams } from '@/api/signature'\nimport { domainApi } from '@/api/modules/domain/index'\nimport enterpriseApi from '@/api/modules/enterprise'\nimport { useUserStore } from '@/stores/modules/user'\nimport md5 from '@/utils/md5'\nimport { processExclusiveDomainData, processIndependentDomainData } from '@/api/modules/domain/transform'\n\nconst emit = defineEmits(['refresh'])\n\nconst userStore = useUserStore()\n\nconst visible = ref(false)\nconst domain = ref('')\nconst isEncryptionEnabled = ref(false)\nconst secret = ref('')\nconst timestamp = ref()\n\ninterface SsoContent {\n  encrypt_enabled: boolean\n  secret: string\n}\n\n// 链接\nconst link = computed(() => {\n  let url = `${domain.value}/index/apilogin`\n  const username = userStore.info.username\n  if (isEncryptionEnabled.value) {\n    const sign = md5(`timestamp=${timestamp.value}&username=${username}${secret.value}`)\n    url += `?timestamp=${timestamp.value}&username=${username}&sign=${sign}`\n  } else {\n    url += `?username=${username}`\n  }\n  return url\n})\n\n// 复制\nconst handleCopy = async (type: string) => {\n  try {\n    const copyStr = type === 'link' ? link.value : secret.value\n    await copyToClip(copyStr)\n    ElMessage.success(window.$t('action_copy_success'))\n  } catch (error) {\n    console.error('复制失败:', error)\n    ElMessage.error('复制失败')\n  }\n}\n\n// 重新生成secret\nconst handleRecreateSecret = () => {\n  secret.value = generateSignParams().sign\n}\n\n// 保存\nconst handleSaveConfig = async () => {\n  const content = {\n    encrypt_enabled: isEncryptionEnabled.value,\n    secret: secret.value,\n  }\n  const saveRes: any = await enterpriseApi.save_enterprise_config('auth_sso', {\n    content: JSON.stringify(content),\n    enabled: true,\n  })\n  if (saveRes.code === 0) {\n    ElMessage.success(window.$t(`sso.save_success`))\n    visible.value = false\n    emit('refresh')\n  }\n}\n\nconst open = async (content: SsoContent) => {\n  isEncryptionEnabled.value = content.encrypt_enabled\n  secret.value = content.secret\n  if (!secret.value) {\n    secret.value = generateSignParams().sign\n  }\n  timestamp.value = Math.floor(Date.now() / 1000)\n  visible.value = true\n}\n\nonMounted(async () => {\n  // 获取域名\n  const { exclusive_domains = [], independent_domains = [] } = await domainApi.list()\n  // 专属域名\n  const exclusiveDomainUrl = processExclusiveDomainData(exclusive_domains[0] || {})\n  // 独立域名\n  const independentDomainUrl = processIndependentDomainData(independent_domains[0] || {})\n  domain.value = independentDomainUrl || exclusiveDomainUrl\n})\n\ndefineExpose({\n  open,\n})\n</script>\n\n<style>\n.api-access-dialog {\n  padding-bottom: 30px;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/sso/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t(route.meta.title)\" />\n    <div class=\"bg-white rounded-md overflow-hidden py-8 px-10 mt-5 box-border space-y-10 flex-1 overflow-y-auto\">\n      <div v-for=\"item in ssoList\" :key=\"item.type\">\n        <h1 class=\"text-lg text-[#1D1E1F] flex items-center gap-2\">\n          <img :src=\"$getRealPath({ url: `/images/sso/${item.type}.png` })\" class=\"size-6 object-cover\" />\n          {{ $t(`sso.${item.type}.title`) }}\n        </h1>\n        <div class=\"mt-4 flex flex-wrap items-center gap-4\">\n          <div class=\"flex-none w-[300px] min-h-[176px] rounded overflow-hidden border p-5 box-border\">\n            <h2 class=\"font-semibold text-[#1D1E1F] h-[26px] relative\">\n              {{ $t(`sso.${item.type}.access_title`) }}\n              <ElTag v-if=\"installedMap[item.type]\" class=\"ml-2 -mt-1\" type=\"success\">\n                {{ $t('connected') }}\n              </ElTag>\n              <el-switch\n                v-if=\"item.type === 'api_access' && isInited\"\n                v-model=\"isApiAccessOpened\"\n                class=\"top-1/2 right-0 -translate-y-1/2\"\n                style=\"position: absolute !important\"\n                @change=\"toggleSwitch\"\n              />\n            </h2>\n            <p class=\"text-xs text-[#939499] mt-3\">\n              {{\n                installedMap[item.type]\n                  ? `${$t('sso.authorized_enterprise')}： ${enterpriseStore.info[item.type === 'wecom' ? 'wecom_info' : 'dingtalk_info'].corp_name}`\n                  : $t(`sso.${item.type}.access_desc`)\n              }}\n            </p>\n            <div class=\"mt-12\">\n              <ElButton v-if=\"installedMap[item.type]\" @click=\"handleUnauthorized({ type: item.type })\">\n                {{ $t('sso.unauthorized') }}\n              </ElButton>\n              <template v-else-if=\"item.type !== 'api_access'\">\n                <ElButton\n                  type=\"primary\"\n                  :disabled=\"['ad_ldap', 'feishu'].includes(item.type)\"\n                  @click=\"handleAuthorized({ type: item.type })\"\n                >\n                  {{ $t('sso.auth_access') }}\n                </ElButton>\n              </template>\n              <!-- API接入 -->\n              <template v-else>\n                <ElButton type=\"primary\" @click=\"handleAPIAccessSetting\">\n                  {{ $t('sso.access_setting') }}\n                </ElButton>\n              </template>\n            </div>\n          </div>\n          <div\n            v-if=\"item.type === 'wecom' || item.type === 'dingtalk'\"\n            class=\"relative flex-none w-[300px] min-h-[176px] rounded overflow-hidden border p-5 box-border\"\n          >\n            <h2 class=\"font-semibold text-[#1D1E1F]\">\n              {{ $t(`sso.organization_sync`) }}\n            </h2>\n            <p class=\"text-xs text-[#939499] mt-3\">\n              {{ $t(`sso.${item.type}.sync_desc`) }}\n            </p>\n            <div v-if=\"installedMap[item.type]\" class=\"absolute right-5 top-4\">\n              <ElSwitch\n                v-debounce\n                :model-value=\"syncValue.value === item.sync_value\"\n                @change=\"handleSyncToggle($event, item.sync_value)\"\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n    <AccessDialog ref=\"accessRef\" />\n    <!-- API接入弹窗 -->\n    <APIAccessDialog ref=\"apiAccessRef\" @refresh=\"getEnterpriseConfig\" />\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { useRoute } from 'vue-router'\nimport AccessDialog from './components/access-dialog.vue'\nimport APIAccessDialog from './components/api-access-dialog.vue'\nimport { useEnterpriseStore } from '@/stores'\nimport { useSso } from '@/hooks/useSso'\nimport enterpriseApi from '@/api/modules/enterprise'\n\nconst route = useRoute()\nconst enterpriseStore = useEnterpriseStore()\nconst { syncValue, loadSyncSetting, saveSyncSetting } = useSso()\n\nconst accessRef = ref<InstanceType<typeof AccessDialog>>()\nconst apiAccessRef = ref<InstanceType<typeof APIAccessDialog>>()\nconst isInited = ref(false) // 是否初始化\nconst isApiAccessOpened = ref(false)\nconst content = ref()\n\nconst ssoList = ref([\n  {\n    type: 'wecom',\n    title: 'sso.wecom.title',\n    access_title: 'sso.wecom.access_title',\n    access_desc: 'sso.wecom.access_desc',\n    sync_desc: 'sso.wecom.sync_desc',\n    sync_value: '1',\n  },\n  // {\n  //   type: 'dingtalk',\n  //   title: 'sso.dingtalk.title',\n  //   access_title: 'sso.dingtalk.access_title',\n  //   access_desc: 'sso.dingtalk.access_desc',\n  //   sync_desc: 'sso.dingtalk.sync_desc',\n  //   sync_value: '2',\n  // },\n  {\n    type: 'ad_ldap',\n    title: 'sso.ad_ldap.title',\n    access_title: 'sso.ad_ldap.access_title',\n    access_desc: 'sso.ad_ldap.access_desc',\n    sync_desc: 'sso.ad_ldap.sync_desc',\n  },\n  {\n    type: 'api_access',\n    title: 'sso.api_access.title',\n    access_title: 'sso.api_access.access_title',\n    access_desc: 'sso.api_access.access_desc',\n    sync_desc: 'sso.api_access.sync_desc',\n  },\n  {\n    type: 'feishu',\n    title: 'sso.feishu.title',\n    access_title: 'sso.feishu.access_title',\n    access_desc: 'sso.feishu.access_desc',\n    sync_desc: 'sso.feishu.sync_desc',\n  },\n])\n\nconst installedMap = computed(() => {\n  return {\n    wecom: enterpriseStore.info.is_install_wecom,\n    dingtalk: enterpriseStore.info.is_install_dingtalk,\n  }\n})\n\nconst handleAuthorized = ({ type }: { type: string }) => {\n  accessRef.value?.open({ type })\n}\n\nconst handleUnauthorized = ({ type }: { type: string }) => {\n  let url = ''\n  switch (type) {\n    case 'wecom':\n      url = 'https://work.weixin.qq.com/login'\n      break\n    case 'dingtalk':\n      url = 'https://oa.dingtalk.com/index.htm#/microApp/microAppListNew'\n      break\n  }\n  window.open(url, '_blank')\n}\nconst handleSyncToggle = async (checked: boolean, value: string) => {\n  await saveSyncSetting(checked ? value : '0')\n}\n\n// 获取企业配置\nconst getEnterpriseConfig = async () => {\n  const { data } = await enterpriseApi.enterprise_config('auth_sso')\n  content.value = data.content && JSON.parse(data.content)\n  if (!content.value.secret) {\n    isInited.value = false\n  } else {\n    isInited.value = true\n    isApiAccessOpened.value = data.enabled\n  }\n}\n\n// API接入-开关切换\nconst toggleSwitch = async () => {\n  await enterpriseApi.toggle_enterprise_config('auth_sso')\n}\n\n// 打开接入设置\nconst handleAPIAccessSetting = () => {\n  apiAccessRef.value?.open(content.value)\n}\n\nonMounted(async () => {\n  loadSyncSetting()\n  getEnterpriseConfig()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/statistics/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <!-- 页面标题 -->\n    <Header :title=\"$t('module.statistics')\" />\n\n    <!-- 主要内容区域 -->\n    <div class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border\">\n      <!-- 可滚动内容区域 -->\n      <div class=\"flex-1 max-h-[calc(100vh-240px)] overflow-auto\">\n        <!-- 页面标题和描述 -->\n        <h1 class=\"font-semibold text-[#1D1E1F]\">\n          {{ $t('module.statistics_header_title') }}\n        </h1>\n        <div class=\"text-[#9A9A9A] text-sm mt-4\">\n          {{ $t('module.statistics_header_desc') }}\n        </div>\n        <!-- 头部统计代码输入 -->\n        <div class=\"text-[#9A9A9A] text-sm mt-6\">\n          {{ $t('module.statistics_textarea_label_1') }}\n        </div>\n        <ElInput\n          v-model=\"head.value\"\n          v-loading=\"loading\"\n          class=\"mt-3 !w-[600px]\"\n          style=\"--el-input-bg-color: #f7f8fa\"\n          type=\"textarea\"\n          resize=\"none\"\n          :placeholder=\"$t('module.statistics_textarea_label_1_example')\"\n          :rows=\"8\"\n        />\n        <!-- CSS样式代码输入 -->\n        <div class=\"text-[#9A9A9A] text-sm mt-6\">\n          {{ $t('module.statistics_textarea_label_2') }}\n        </div>\n        <ElInput\n          v-model=\"css.value\"\n          v-loading=\"loading\"\n          class=\"mt-3 !w-[600px]\"\n          style=\"--el-input-bg-color: #f7f8fa\"\n          type=\"textarea\"\n          resize=\"none\"\n          :rows=\"8\"\n          :placeholder=\"$t('module.statistics_textarea_label_2_example')\"\n        />\n      </div>\n\n      <!-- 底部操作区域 -->\n      <ElDivider />\n      <ElButton v-debounce class=\"h-[36px] w-[96px]\" type=\"primary\" size=\"large\" @click=\"handleSave\">\n        {{ $t('action_save') }}\n      </ElButton>\n    </div>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, reactive, ref } from 'vue'\nimport { useSettingStore } from '@/stores/modules/setting'\n\n// 设置存储实例\nconst settingStore = useSettingStore()\n\n// 加载状态\nconst loading = ref(false)\n\n// 统计配置项常量\nconst STATISTICS_KEYS = {\n  HEAD: 'third_party_statistic_header',\n  CSS: 'third_party_statistic_css',\n} as const\n\n// 头部统计代码配置\nconst head = reactive({\n  setting_id: 0,\n  key: STATISTICS_KEYS.HEAD,\n  value: '',\n})\n\n// CSS样式代码配置\nconst css = reactive({\n  setting_id: 0,\n  key: STATISTICS_KEYS.CSS,\n  value: '',\n})\n\n/**\n * 初始化页面数据\n * 从服务器加载现有的统计配置\n */\nconst initializeData = async () => {\n  loading.value = true\n\n  try {\n    const settingsData = await settingStore.loadListData()\n\n    // 查找并更新头部统计配置\n    const headSetting = settingsData.find(item => item.key === STATISTICS_KEYS.HEAD)\n    if (headSetting) {\n      Object.assign(head, headSetting)\n    }\n    // 查找并更新CSS样式配置\n    const cssSetting = settingsData.find(item => item.key === STATISTICS_KEYS.CSS)\n    if (cssSetting) {\n      Object.assign(css, cssSetting)\n    }\n  } finally {\n    loading.value = false\n  }\n}\n\n/**\n * 保存统计配置\n * 同时保存头部统计代码和CSS样式代码\n */\nconst handleSave = async () => {\n  // 并行保存两个配置项\n  const [headResult, cssResult] = await Promise.all([\n    settingStore.save(head.setting_id, {\n      key: head.key,\n      value: head.value,\n    }),\n    settingStore.save(css.setting_id, {\n      key: css.key,\n      value: css.value,\n    }),\n  ])\n  // 更新设置ID\n  head.setting_id = headResult.setting_id || 0\n  css.setting_id = cssResult.setting_id || 0\n\n  // 显示成功消息\n  ElMessage.success(window.$t('action_save_success'))\n}\n\n// 组件挂载时初始化数据\nonMounted(initializeData)\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/subscription/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] !overflow-y-auto relative\">\n    <Header class=\"sticky top-0 left-0 right-0 z-10 pt-8 pb-4 bg-[#F6F7F8]\" :title=\"$t('module.subscription')\" />\n    <div class=\"flex flex-col bg-white px-6 pt-6 box-border overflow-hidden\">\n      <h1 class=\"flex-none text-sm text-[#4F5052]\">{{ $t('module.subscription_header_title') }}</h1>\n      <div class=\"overflow-x-auto mt-6 pb-1 pr-1\">\n        <ElForm\n          ref=\"form_ref\"\n          v-loading=\"loading\"\n          class=\"min-h-[70vh] overflow-hidden flex gap-4 w-max\"\n          :model=\"subscription_list\"\n          label-position=\"top\"\n        >\n          <div\n            v-for=\"(item, index) in subscription_list\"\n            :key=\"index\"\n            class=\"flex-none w-[334px] bg-[#F9F9FC] p-4 box-border\"\n          >\n            <ElFormItem>\n              <div class=\"w-full flex items-center gap-2.5\">\n                <ElDropdown placement=\"bottom\" trigger=\"click\" @command=\"onIconChange($event, item)\">\n                  <img\n                    :src=\"\n                      !/\\.png$/.test(item.logo_url)\n                        ? $getRealPath({ url: `/images/subscription/${item.logo_url}.png` })\n                        : item.logo_url\n                    \"\n                    class=\"flex-none w-[36px] h-[36px] object-cover cursor-pointer\"\n                    alt=\"订阅图标\"\n                  />\n                  <template #dropdown>\n                    <ElDropdownMenu>\n                      <ElDropdownItem v-for=\"i in [1, 2, 3, 4, 5]\" :key=\"i\" :command=\"i\">\n                        <img\n                          :src=\"img_host + `/subscription/vip-${i}.png`\"\n                          class=\"w-[36px] h-[36px] object-cover\"\n                          :alt=\"`VIP ${i}`\"\n                        />\n                      </ElDropdownItem>\n                    </ElDropdownMenu>\n                  </template>\n                </ElDropdown>\n                <ElFormItem\n                  class=\"flex-1\"\n                  :prop=\"`${index}.group_name`\"\n                  :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n                >\n                  <ElInput\n                    v-model=\"item.group_name\"\n                    size=\"large\"\n                    :placeholder=\"$t('form_input_placeholder')\"\n                    show-word-limit\n                    maxlength=\"10\"\n                  />\n                </ElFormItem>\n                <ElIcon\n                  class=\"flex-none cursor-pointer\"\n                  :class=\"[item.is_default ? 'invisible' : '']\"\n                  size=\"16\"\n                  color=\"#F04F4D\"\n                  @click=\"handleRemove({ data: item, index })\"\n                >\n                  <Delete />\n                </ElIcon>\n              </div>\n            </ElFormItem>\n            <ElFormItem :label=\"$t('module.subscription_charge')\">\n              <div class=\"w-full flex items-center gap-2\">\n                <ElSelect v-model=\"item.year_info.currency\" class=\"flex-none !w-[86px]\" size=\"large\">\n                  <ElOption\n                    v-for=\"option in unit_options\"\n                    :key=\"option.value\"\n                    :label=\"option.label\"\n                    :value=\"option.value\"\n                  />\n                </ElSelect>\n                <ElInputNumber\n                  v-model=\"item.year_info.amount\"\n                  class=\"charge-point-input flex-1\"\n                  size=\"large\"\n                  :controls=\"false\"\n                  :precision=\"2\"\n                  :min=\"0\"\n                  :disabled=\"item.is_default\"\n                  :max=\"999999999999\"\n                  :placeholder=\"$t('form_input_placeholder')\"\n                  @keydown=\"numberInputKeydownHandler\"\n                />\n                <div class=\"flex-none text-sm text-[#1D1E1F]\">/{{ $t('yearly') }}</div>\n              </div>\n              <div class=\"mt-3 w-full flex items-center gap-2\">\n                <ElSelect v-model=\"item.month_info.currency\" class=\"flex-none !w-[86px]\" size=\"large\">\n                  <ElOption\n                    v-for=\"option in unit_options\"\n                    :key=\"option.value\"\n                    :label=\"option.label\"\n                    :value=\"option.value\"\n                  />\n                </ElSelect>\n                <ElInputNumber\n                  v-model=\"item.month_info.amount\"\n                  class=\"charge-point-input flex-1\"\n                  size=\"large\"\n                  :controls=\"false\"\n                  :precision=\"2\"\n                  :min=\"0\"\n                  :disabled=\"item.is_default\"\n                  :max=\"999999999999\"\n                  :placeholder=\"$t('form_input_placeholder')\"\n                  @keydown=\"numberInputKeydownHandler\"\n                />\n                <div class=\"flex-none text-sm text-[#1D1E1F]\">/{{ $t('monthly') }}</div>\n              </div>\n            </ElFormItem>\n            <ElFormItem :label=\"$t('module.subscription_points')\">\n              <div class=\"w-full flex items-center gap-2\">\n                <ElInputNumber\n                  v-model=\"item.point_month_info.amount\"\n                  class=\"charge-point-input flex-1\"\n                  size=\"large\"\n                  :controls=\"false\"\n                  :precision=\"0\"\n                  :min=\"0\"\n                  :max=\"999999999999\"\n                  :placeholder=\"$t('form_input_placeholder')\"\n                  @keydown=\"numberInputKeydownHandler\"\n                />\n                <div class=\"flex-none text-sm text-[#1D1E1F]\">/{{ $t('monthly') }}</div>\n              </div>\n            </ElFormItem>\n            <ElDivider />\n            <template v-if=\"item.agents && item.agents.length\">\n              <ElFormItem class=\"!mb-0\" :label=\"$t('module.subscription_agent_bots')\">\n                <template v-for=\"(agent, agent_index) in item.agents\" :key=\"agent_index\">\n                  <div class=\"w-full flex items-center gap-2 mb-3\">\n                    <img\n                      :src=\"agent.logo\"\n                      class=\"flex-none w-[18px] h-[18px] object-contain rounded-full overflow-hidden\"\n                      :alt=\"agent.name\"\n                    />\n                    <div class=\"flex-1 truncate text-sm text-[#4F5052]\">{{ agent.name }}</div>\n                  </div>\n                </template>\n              </ElFormItem>\n              <ElDivider />\n            </template>\n            <ElFormItem class=\"!mb-0\">\n              <template #label>\n                <div class=\"flex items-center gap-1\">\n                  {{ $t('module.subscription_ai_assistant') }}\n                  <ElTooltip :content=\"$t('module.subscription_ai_assistant_tip')\" placement=\"bottom\">\n                    <SvgIcon class=\"flex-none\" name=\"question\" color=\"#A0A7B8\" width=\"14\" height=\"14\" />\n                  </ElTooltip>\n                  <div class=\"flex-1\"></div>\n                  <ElSwitch v-model=\"item.ai_enabled\" class=\"ml-2\" size=\"small\" />\n                </div>\n              </template>\n              <div class=\"flex flex-wrap items-center gap-2\">\n                <ElButton class=\"!p-2\" type=\"default\" plain size=\"default\" :disabled=\"!item.ai_enabled\">\n                  <SvgIcon\n                    class=\"mr-1.5\"\n                    :class=\"{ 'opacity-50': !item.ai_enabled }\"\n                    name=\"windows\"\n                    width=\"14\"\n                    height=\"14\"\n                  />\n                  <span class=\"text-xs\">Windows</span>\n                </ElButton>\n                <ElButton class=\"!p-2 !ml-0\" type=\"default\" plain size=\"default\" :disabled=\"!item.ai_enabled\">\n                  <SvgIcon\n                    class=\"mr-1.5\"\n                    :class=\"{ 'opacity-50': !item.ai_enabled }\"\n                    name=\"ios\"\n                    width=\"14\"\n                    height=\"14\"\n                  />\n                  <span class=\"text-xs\">macOS</span>\n                </ElButton>\n                <ElButton class=\"!p-2 !ml-0\" type=\"default\" plain size=\"default\" :disabled=\"!item.ai_enabled\">\n                  <SvgIcon\n                    class=\"mr-1.5\"\n                    :class=\"{ 'opacity-50': !item.ai_enabled }\"\n                    name=\"chrome\"\n                    width=\"14\"\n                    height=\"14\"\n                  />\n                  <span class=\"text-xs\">Google</span>\n                </ElButton>\n              </div>\n            </ElFormItem>\n          </div>\n          <div\n            v-if=\"subscription_list.length < 5\"\n            class=\"flex-none w-[200px] bg-[#F9F9FC] flex items-center justify-center p-4 box-border cursor-pointer hover:opacity-70 transition-opacity\"\n            @click=\"onAdd\"\n          >\n            <ElIcon size=\"16\" color=\"#4F5052\">\n              <Plus />\n            </ElIcon>\n          </div>\n        </ElForm>\n      </div>\n    </div>\n    <div v-if=\"!loading\" class=\"sticky bottom-0 left-0 right-0 z-10 bg-[#F6F7F8] pb-8 box-border\">\n      <div class=\"bg-white px-6 pt-2 pb-6\">\n        <ElDivider />\n        <ElButton v-debounce class=\"w-[96px]\" type=\"primary\" size=\"large\" @click=\"handleSave\">{{\n          $t('action_save')\n        }}</ElButton>\n      </div>\n    </div>\n  </Layout>\n\n  <el-dialog\n    v-model=\"transfer_dialog_visible\"\n    class=\"el-dialog--center\"\n    :title=\"$t('subscription.transfer_title')\"\n    width=\"480px\"\n  >\n    <p class=\"text-sm text-[#4F5052]\">{{ $t('subscription.transfer_desc') }}</p>\n    <template v-for=\"item in deleted_subscription_list\" :key=\"item.id\">\n      <div class=\"flex items-center gap-2 mt-4\">\n        <div class=\"flex-1\">\n          <SelectPlus\n            v-model=\"item.group_id\"\n            size=\"large\"\n            :options=\"formatSelectOptions(deleted_subscription_list)\"\n            disabled\n          />\n        </div>\n        <div class=\"text-sm text-[#4F5052] mx-3\">{{ $t('subscription.transfer_to') }}</div>\n        <div class=\"flex-1\">\n          <SelectPlus v-model=\"item.target_group_id\" size=\"large\" :options=\"formatSelectOptions(subscription_list)\" />\n        </div>\n      </div>\n    </template>\n\n    <div class=\"h-5\"></div>\n    <template #footer>\n      <ElButton v-debounce size=\"large\" type=\"primary\" @click=\"handleSubmit\">{{ $t('action_confirm') }}</ElButton>\n      <ElButton v-debounce size=\"large\" @click=\"handleCancel\">{{ $t('action_cancel') }}</ElButton>\n    </template>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { Delete, Plus } from '@element-plus/icons-vue'\nimport { ref, onMounted, onUnmounted } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport type { FormInstance } from 'element-plus'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { subscriptionApi } from '@/api/modules/subscription'\nimport { img_host } from '@/utils/config'\nimport { createNewSubscriptionItem, transformSubscriptionItemForSave } from './utils'\nimport type { SubscriptionItem, UnitOption } from '@/types/subscription'\n\n// 响应式数据\nconst form_ref = ref<FormInstance>()\nconst loading = ref(false)\nconst subscription_list = ref<SubscriptionItem[]>([])\nconst deleted_subscription_list = ref<SubscriptionItem[]>([])\n\nconst transfer_dialog_visible = ref(false)\n\nconst _original_subscription_list = ref<SubscriptionItem[]>([])\n\n// 货币选项\nconst unit_options = ref<UnitOption[]>([\n  { value: 'CNY', label: 'CNY' },\n  { value: 'USD', label: 'USD' },\n])\n\n// 刷新数据\nconst refresh = async (): Promise<void> => {\n  loading.value = true\n  try {\n    subscription_list.value = await subscriptionApi.list()\n    _original_subscription_list.value = subscription_list.value.map((item: SubscriptionItem) => ({ ...item }))\n  } catch (error) {\n    console.error('Failed to fetch subscription list:', error)\n  } finally {\n    loading.value = false\n  }\n}\n\n// 添加新订阅项\nconst onAdd = (): void => {\n  const template = subscription_list.value[0]\n  if (!template) return\n\n  const nextIndex = subscription_list.value.length + 1\n  const newSubscriptionData = createNewSubscriptionItem(template, nextIndex)\n  subscription_list.value.push(newSubscriptionData)\n}\n\n// 删除订阅项\nconst handleRemove = (params: { data: SubscriptionItem; index: number }) => {\n  const { data, index } = params\n  if (data.is_default) return\n\n  data.delete = true\n  if (data.group_id) {\n    deleted_subscription_list.value.push({\n      ...data,\n      target_group_id: subscription_list.value[0].group_id,\n    })\n  }\n\n  subscription_list.value.splice(index, 1)\n}\n\n// 图标改变\nconst onIconChange = (value: string, data: SubscriptionItem): void => {\n  data.logo_url = `${img_host}/subscription/vip-${value}.png`\n}\n\nconst formatSelectOptions = (list: SubscriptionItem[]): GroupOptionItem[] => {\n  return list.map((item: SubscriptionItem) => ({\n    value: item.group_id,\n    label: item.group_name,\n    icon: item.logo_url,\n  }))\n}\n\nconst handleSubmit = async () => {\n  try {\n    const items = subscription_list.value.map((item: SubscriptionItem, index: number) =>\n      transformSubscriptionItemForSave(item, index, subscription_list.value.length)\n    )\n\n    if (deleted_subscription_list.value.length) {\n      items.push(...deleted_subscription_list.value)\n    }\n    transfer_dialog_visible.value = false\n    await subscriptionApi.save({ data: { items } })\n    ElMessage.success(window.$t('action_save_success'))\n    deleted_subscription_list.value = []\n    await refresh()\n  } catch (error) {\n    console.error('Save failed:', error)\n    ElMessage.error(window.$t('action_save_failed'))\n  }\n}\n\n// 处理保存\nconst handleSave = (): void => {\n  if (!form_ref.value) return\n\n  form_ref.value.validate(async (valid: boolean) => {\n    if (!valid) return\n\n    if (deleted_subscription_list.value.length) {\n      transfer_dialog_visible.value = true\n      return\n    }\n    handleSubmit()\n  })\n}\n\n// 数字输入处理\nconst numberInputKeydownHandler = (event: KeyboardEvent): void => {\n  // 允许的按键：数字、退格、删除、Tab、Enter、左右箭头、小数点\n  const allowedKeys = ['Backspace', 'Delete', 'Tab', 'Enter', 'ArrowLeft', 'ArrowRight', '.']\n\n  if (\n    !allowedKeys.includes(event.key) &&\n    !(event.key >= '0' && event.key <= '9') &&\n    !(event.ctrlKey || event.metaKey)\n  ) {\n    event.preventDefault()\n  }\n}\n\nconst handleCancel = (): void => {\n  transfer_dialog_visible.value = false\n  deleted_subscription_list.value = []\n  subscription_list.value = _original_subscription_list.value.map((item: SubscriptionItem) => ({ ...item }))\n}\n\n// 生命周期钩子\nonMounted(() => {\n  refresh()\n})\n\nonUnmounted(() => {})\n</script>\n\n<style scoped>\n::v-deep .charge-point-input .el-input__inner {\n  text-align: left !important;\n}\n\n:deep(.el-divider--horizontal) {\n  margin: 20px 0;\n}\n\n:deep(.el-form-item__label) {\n  width: 100%;\n  padding-right: 0;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/subscription/utils.ts",
    "content": "import { deepCopy } from '@/utils'\nimport { img_host } from '@/utils/config'\nimport type { SubscriptionItem, PricingInfo } from '@/types/subscription'\n\n/**\n * 创建默认的价格信息\n */\nexport const createDefaultPricingInfo = (\n  timeUnit: 'year' | 'month',\n  type: 1 | 2 = 1,\n  amount: string = '0.00'\n): PricingInfo => ({\n  amount,\n  currency: type === 1 ? 'CNY' : '',\n  relation_id: 0,\n  time_unit: timeUnit,\n  type,\n})\n\n/**\n * 创建新的订阅项数据\n */\nexport const createNewSubscriptionItem = (\n  template: SubscriptionItem,\n  index: number\n): SubscriptionItem => {\n  if (!template) {\n    throw new Error('No template subscription item found')\n  }\n\n  const newItem = deepCopy(template)\n\n  return {\n    ...newItem,\n    delete: false,\n    group_id: 0,\n    setting_id: 0,\n    sort: 0,\n    group_name: '',\n    is_default: false,\n    logo_url: `${img_host}/subscription/vip-${index}.png`,\n    ai_enabled: false,\n    relations: [],\n    year_info: createDefaultPricingInfo('year', 1),\n    month_info: createDefaultPricingInfo('month', 1),\n    point_month_info: createDefaultPricingInfo('month', 2, '0'),\n    agents: [],\n  }\n}\n\n/**\n * 转换订阅项为保存格式\n */\nexport const transformSubscriptionItemForSave = (\n  item: SubscriptionItem,\n  index: number,\n  totalLength: number\n) => ({\n  delete: false,\n  group_id: item.group_id || 0,\n  setting_id: item.setting_id || 0,\n  ai_enabled: !!+item.ai_enabled,\n  sort: totalLength - index,\n  group_name: item.group_name || '',\n  logo_url: item.logo_url || '',\n  relations: [\n    {\n      amount: Math.round(Number(item.year_info.amount) * 10000) / 100,\n      currency: item.year_info.currency,\n      relation_id: item.year_info.relation_id || 0,\n      time_unit: item.year_info.time_unit,\n      type: item.year_info.type,\n    },\n    {\n      amount: Math.round(Number(item.month_info.amount) * 10000) / 100,\n      currency: item.month_info.currency,\n      relation_id: item.month_info.relation_id || 0,\n      time_unit: item.month_info.time_unit,\n      type: item.month_info.type,\n    },\n    {\n      amount: Number(item.point_month_info.amount || 0),\n      currency: item.point_month_info.currency,\n      relation_id: item.point_month_info.relation_id || 0,\n      time_unit: item.point_month_info.time_unit,\n      type: item.point_month_info.type,\n    },\n  ],\n})\n"
  },
  {
    "path": "web/console/src/views/svg/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\n\nconst lists = ref([])\n\nonMounted(() => {\n  const svgs = document.querySelectorAll('#__svg__icons__dom__ symbol')\n  const names = []\n  Array.from(svgs).forEach((item) => {\n    const name = item.getAttribute('id').replace('icon-', '')\n    names.push(name)\n  })\n  lists.value = names\n})\n// export default {\n\n// }\n</script>\n\n<template>\n  <div class=\"flex flex-wrap gap-4\">\n    <div v-for=\"(name, index) in lists\" :key=\"index\" class=\"flex flex-col items-center\">\n      {{ name }}\n      <svg-icon :name=\"name\" width=\"30px\" height=\"30px\" color=\"#182B50\" />\n    </div>\n  </div>\n</template>\n\n<style>\n\n</style>\n"
  },
  {
    "path": "web/console/src/views/system-log/index.vue",
    "content": "<template>\n  <Layout class=\"px-15 py-8\">\n    <Header :title=\"$t('module.system_log')\" />\n    <div class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border max-h-[calc(100vh-100px)] overflow-auto\">\n      <div class=\"flex items-center gap-3\">\n        <div class=\"flex-none\">\n          <FilterDateRange\n            v-model=\"selectDate\"\n            size=\"large\"\n            :value-format=\"(date: any) => new Date(date).getTime()\"\n            @change=\"onRefresh\"\n          />\n        </div>\n        <ElSelect\n          v-model=\"filterForm.action\"\n          size=\"large\"\n          class=\"flex-none max-w-[180px]\"\n          clearable\n          @change=\"onRefresh\"\n        >\n          <template #prefix> {{ $t('system_log.log_action') }}: </template>\n          <ElOption v-for=\"item in actions\" :key=\"item.value\" :label=\"item.text\" :value=\"item.value\" />\n        </ElSelect>\n        <ElSelect\n          v-model=\"filterForm.module\"\n          size=\"large\"\n          class=\"flex-none max-w-[180px]\"\n          clearable\n          @change=\"onRefresh\"\n        >\n          <template #prefix> {{ $t('system_log.log_module') }}: </template>\n          <ElOption v-for=\"item in modules\" :key=\"item.value\" :label=\"item.text\" :value=\"item.value\" />\n        </ElSelect>\n\n        <FilterUser v-model=\"userList\" class=\"flex-none max-w-[180px]\" type=\"user\" @change=\"onRefresh\" />\n      </div>\n\n      <div v-loading=\"tableLoading\" class=\"flex-1 overflow-y-auto bg-white rounded-lg mt-4\">\n        <TablePlus\n          :data=\"tableData\"\n          :total=\"tableTotal\"\n          style=\"width: 100%\"\n          header-row-class-name=\"rounded overflow-hidden\"\n          header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n          @page-size-change=\"handleSizeChange\"\n          @page-current-change=\"handleCurrentChange\"\n        >\n          <ElTableColumn :label=\"$t('system_log.log_time')\" min-width=\"160\" prop=\"action_time\" />\n          <ElTableColumn :label=\"$t('system_log.log_action')\" min-width=\"100\" prop=\"action\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.action }\">\n                {{ getActionLabel(row.action) }}\n              </span>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('system_log.log_module')\" min-width=\"100\" prop=\"module\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.module }\">\n                {{ getModuleLabel(row.module) }}\n              </span>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('system_log.log_operator')\" min-width=\"100\" prop=\"nickname\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.nickname }\">\n                {{ row.nickname }}\n              </span>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('system_log.log_label')\" prop=\"content\" min-width=\"140\" show-overflow-tooltip />\n          <ElTableColumn :label=\"$t('system_log.log_ip')\" min-width=\"120\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.ip }\">\n                {{ row.ip }}\n              </span>\n            </template>\n          </ElTableColumn>\n        </TablePlus>\n      </div>\n    </div>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, reactive, ref } from 'vue'\n\nimport FilterDateRange from '@/components/Filter/date-range.vue'\nimport FilterUser from '@/components/Filter/user.vue'\n\nimport { systemLogApi } from '@/api/modules/system-log/index'\nimport { transformSystemLogList, getDefaultSystemLogRequest } from '@/api/modules/system-log/transform'\nimport type { SystemLogListRequest, ActionItem, ModuleItem, SystemLogDisplayItem } from '@/api/modules/system-log/types'\n\ntype UserItem = {\n  user_id: number\n  nickname: string\n}\n\n// 响应式数据\nconst userList = ref<UserItem[]>([])\nconst selectDate = ref([])\nconst filterForm = reactive<SystemLogListRequest>(getDefaultSystemLogRequest())\n\nconst actions = ref<ActionItem[]>([])\nconst modules = ref<ModuleItem[]>([])\nconst tableData = ref<SystemLogDisplayItem[]>([])\nconst tableTotal = ref(0)\nconst tableLoading = ref(false)\n\n// 数据加载方法\nconst loadList = async (): Promise<void> => {\n  try {\n    const params = {\n      ...filterForm,\n      start_time: selectDate.value[0],\n      end_time: selectDate.value[1],\n      user_id: userList.value.length ? userList.value.map(item => item.user_id).join(',') : undefined,\n    }\n\n    const data = await systemLogApi.list(params)\n    tableData.value = transformSystemLogList(data.system_logs || [])\n    tableTotal.value = data.count || 0\n  } catch (error) {\n    console.error('加载系统日志失败:', error)\n    tableData.value = []\n    tableTotal.value = 0\n  }\n}\n\nconst loadActions = async (): Promise<void> => {\n  const data = await systemLogApi.actions()\n  actions.value = data\n}\n\nconst loadModules = async (): Promise<void> => {\n  const data = await systemLogApi.modules()\n  modules.value = data\n}\n\n// 工具方法\nconst getActionLabel = (action: number): string => {\n  return actions.value.find(item => item.value === action)?.text || String(action)\n}\n\nconst getModuleLabel = (module: number): string => {\n  return modules.value.find(item => item.value === module)?.text || String(module)\n}\n\n// 事件处理方法\nconst onRefresh = (): void => {\n  filterForm.offset = 0\n  loadList()\n}\n\nconst handleSizeChange = (size: number): void => {\n  filterForm.limit = size\n  onRefresh()\n}\n\nconst handleCurrentChange = (page: number): void => {\n  filterForm.offset = (page - 1) * filterForm.limit\n  loadList()\n}\n\n// 生命周期\nonMounted(async () => {\n  tableLoading.value = true\n  try {\n    await Promise.all([loadList(), loadActions(), loadModules()])\n  } finally {\n    tableLoading.value = false\n  }\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/template-style/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8 overflow-y-auto\">\n    <Header :title=\"$t('module.template_style')\"></Header>\n    <div v-loading=\"loading\" class=\"mt-5 flex-1 flex flex-col gap-4 bg-white py-6 px-8 box-border\">\n      <h4 class=\"text-[#1D1E1F] font-semibold\">{{ $t('action_preview') }}</h4>\n      <div class=\"w-full relative shadow-md overflow-auto\">\n        <div class=\"w-full relative flex items-center justify-between bg-[#F0F0F0] min-w-[720px]\">\n          <div\n            class=\"w-[340px] h-[46px]\"\n            :style=\"{\n              background: `url(${$getRealPath({ url: '/images/browser_navigation_bar.png' })})`,\n              'background-size': '1025px 46px',\n            }\"\n          />\n          <div\n            class=\"w-[280px] h-[46px]\"\n            :style=\"{\n              background: `url(${$getRealPath({ url: '/images/browser_navigation_bar.png' })})`,\n              'background-size': '1025px 46px',\n              'background-position': 'right top',\n            }\"\n          />\n        </div>\n        <div class=\"absolute top-0 left-[96px] h-[46px] overflow-hidden flex items-center gap-2\">\n          <img :src=\"enterprise_ico\" class=\"w-[14px] object-cover\" />\n          <div class=\"text-[#1D1E1F] text-sm max-w-[8em] truncate\">{{ enterprise_name }}</div>\n        </div>\n        <div\n          class=\"w-full min-w-[720px] h-[79px] px-[32px] box-border flex items-center justify-between rounded\"\n          :style=\"{ backgroundColor: form.nav_bg_color }\"\n        >\n          <div class=\"flex items-center gap-3\">\n            <img :src=\"enterprise_logo\" class=\"w-[44px] object-cover\" />\n            <div class=\"text-[24px] font-semibold max-w-[12em] truncate\" :style=\"{ color: form.nav_text_color }\">\n              {{ enterprise_name }}\n            </div>\n          </div>\n          <div class=\"flex items-center gap-2\">\n            <div\n              class=\"text-[#fff] text-sm w-[76px] h-[38px] leading-[38px] text-center rounded-md overflow-hidden\"\n              :style=\"{ backgroundColor: form.theme_color }\"\n            >\n              {{ $t('action_login') }}\n            </div>\n          </div>\n        </div>\n      </div>\n      <ElDivider />\n      <ElForm ref=\"form_ref\" class=\"flex-1\" :model=\"form\" :rules=\"rules\" label-position=\"top\">\n        <ElFormItem :label=\"$t('template_style.website_style')\">\n          <ul class=\"flex flex-wrap gap-4\">\n            <li\n              v-for=\"value in [WEBSITE_STYLE.WEBSITE, WEBSITE_STYLE.SOFTWARE]\"\n              :key=\"value\"\n              class=\"w-[172px] p-1.5 bg-[#F5F5F5] flex relative flex-col cursor-pointer items-center gap-2 border rounded box-border overflow-hidden text-sm hover:border-[#3664EF] hover:text-[#3664EF]\"\n              :class=\"[form.style_type === value ? 'border-[#3664EF] text-[#3664EF]' : 'text-[#4F5052]']\"\n              @click.stop=\"form.style_type = value\"\n            >\n              <!-- <div\n                v-if=\"form.style_type === value\"\n                class=\"absolute w-7 h-7 pt-1 pr-[2px] right-0 top-0 bg-[#3664EF] text-[#ffffff]\"\n                style=\"border-top: 28px solid #3664ef; border-left: 28px solid transparent\"\n              >\n                <SvgIcon name=\"check_v2\" />\n              </div> -->\n              <div v-if=\"form.style_type === value\" class=\"right-angle-triangle\"></div>\n              <SvgIcon name=\"check_v2\" class=\"absolute !w-4 h-2 top-0 right-0 text-[#ffffff]\" />\n              <div class=\"text-sm p-1.5\">\n                {{ $t(WEBSITE_STYLE_LABEL_MAP.get(value)) }}\n              </div>\n              <ElImage class=\"w-full\" :src=\"$getRealPath({ url: WEBSITE_STYLE_DEMO_MAP.get(value) })\" fit=\"contain\" />\n            </li>\n          </ul>\n        </ElFormItem>\n        <ElFormItem :label=\"$t('template_style.theme_color')\">\n          <ul class=\"flex items-center flex-wrap gap-7 text-[#4F5052] text-sm\">\n            <li class=\"flex items-center gap-2\">\n              <el-color-picker v-model=\"form.theme_color\" />\n              <span>{{ $t('template_style.theme_color_v2') }}</span>\n            </li>\n            <li class=\"flex items-center gap-2\">\n              <el-color-picker v-model=\"form.text_color\" />\n              <span>{{ $t('template_style.text_color') }}</span>\n            </li>\n            <li class=\"flex items-center gap-2\">\n              <el-color-picker v-model=\"form.nav_bg_color\" />\n              <span>{{ $t('template_style.nav_bg_color') }}</span>\n            </li>\n            <li class=\"flex items-center gap-2\">\n              <el-color-picker v-model=\"form.nav_text_color\" />\n              <span>{{ $t('template_style.nav_text_color') }}</span>\n            </li>\n            <li class=\"flex items-center gap-2\">\n              <el-color-picker v-model=\"form.page_footer_bg_color\" />\n              <span>{{ $t('template_style.page_footer_bg_color') }}</span>\n            </li>\n            <li class=\"flex items-center gap-2\">\n              <el-color-picker v-model=\"form.page_footer_text_color\" />\n              <span>{{ $t('template_style.page_footer_text_color') }}</span>\n            </li>\n          </ul>\n        </ElFormItem>\n        <div class=\"w-full h-8\"></div>\n      </ElForm>\n      <ElDivider class=\"!my-3\" />\n      <ElButton class=\"h-[36px] w-[96px]\" type=\"primary\" size=\"large\" :loading=\"submitting\" @click=\"handleSave\"\n        >{{ $t('action_save') }}\n      </ElButton>\n    </div>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, getCurrentInstance, computed, onMounted } from 'vue'\nimport { useEnterpriseStore } from '@/stores'\nimport { templateStyleApi } from '@/api/modules/template-style'\nimport { WEBSITE_STYLE, WEBSITE_STYLE_LABEL_MAP, WEBSITE_STYLE_DEMO_MAP } from '@/constants/enterprise'\n\nconst { proxy: _this } = getCurrentInstance()\n\nconst enterprise_store = useEnterpriseStore()\n\nconst form_ref = ref()\nconst loading = ref(true)\nconst submitting = ref(false)\nconst enterprise_logo = computed(() => enterprise_store.info.logo || '')\nconst enterprise_ico = computed(() => enterprise_store.info.ico || enterprise_logo.value)\nconst enterprise_name = computed(() => enterprise_store.info.display_name || '')\n\nconst form = reactive({\n  style_type: WEBSITE_STYLE.WEBSITE,\n  theme_color: '#2563eb',\n  text_color: '#333333',\n  nav_bg_color: '#ffffff',\n  nav_text_color: '#333333',\n  page_footer_bg_color: '#18191f',\n  page_footer_text_color: '#f2f2f2',\n})\nconst rules = reactive({})\nconst handleSave = async () => {\n  const valid = await form_ref.value.validate()\n  if (!valid) return\n  submitting.value = true\n  await templateStyleApi\n    .saveTemplateStyle({\n      ...form,\n    })\n    .finally(() => {\n      submitting.value = false\n    })\n  ElMessage.success(window.$t('action_save_success'))\n  fetchTemplateStyleData()\n  enterprise_store.loadSelfInfo()\n}\nconst fetchTemplateStyleData = async () => {\n  loading.value = true\n  const data = await templateStyleApi.getTemplateStyle().finally(() => {\n    loading.value = false\n  })\n  form.style_type = data.style_type || WEBSITE_STYLE.WEBSITE\n  if (![WEBSITE_STYLE.WEBSITE, WEBSITE_STYLE.SOFTWARE].includes(form.style_type))\n    form.style_type = WEBSITE_STYLE.WEBSITE\n  form.theme_color = data.theme_color || '#3664EF'\n  form.text_color = data.text_color || '#333333'\n  form.nav_bg_color = data.nav_bg_color || '#ffffff'\n  form.nav_text_color = data.nav_text_color || '#333333'\n  form.page_footer_bg_color = data.page_footer_bg_color || '#18191F'\n  form.page_footer_text_color = data.page_footer_text_color || '#F2F2F2'\n}\n\nonMounted(() => {\n  fetchTemplateStyleData()\n})\n</script>\n\n<style scoped>\n.right-angle-triangle {\n  width: 0;\n  height: 0;\n  border-top: 31px solid #3664ef;\n  border-left: 29px solid transparent;\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/toolbox/components/add-account.vue",
    "content": "<template>\n  <ElDialog v-model=\"visible\" :title=\"isEdit ? $t('action.edit') : $t('action.add')\" width=\"600\">\n    <ElForm ref=\"formRef\" :model=\"accountData\" label-position=\"top\">\n      <ElFormItem :label=\"$t('account')\" prop=\"account\" :rules=\"accountRules\">\n        <ElInput v-model=\"accountData.account\" :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n      <ElFormItem\n        :label=\"$t('password')\"\n        prop=\"password\"\n        :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['password'] })\"\n      >\n        <ElInput v-model=\"accountData.password\" :placeholder=\"$t('form_input_placeholder')\" />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('remark')\" :rules=\"generateInputRules({ message: 'form_input_placeholder' })\">\n        <ElInput\n          v-model=\"accountData.remark\"\n          :placeholder=\"$t('form_input_placeholder')\"\n          type=\"textarea\"\n          :rows=\"3\"\n          resize=\"none\"\n          show-word-limit\n          maxlength=\"200\"\n        />\n      </ElFormItem>\n    </ElForm>\n    <div class=\"w-full flex justify-center\">\n      <ElButton size=\"large\" @click=\"close\">{{ $t('action_cancel') }}</ElButton>\n      <ElButton size=\"large\" type=\"primary\" @click=\"confirm\">{{ $t('action_confirm') }}</ElButton>\n    </div>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed } from 'vue'\n\nimport { generateInputRules } from '@/utils/form-rule'\n\nconst emits = defineEmits(['success'])\n\ninterface AccountItem {\n  account: string\n  password: string\n  remark: string\n}\n\nconst props = withDefaults(\n  defineProps<{\n    accountList: AccountItem[]\n  }>(),\n  {\n    accountList: () => [],\n  }\n)\n\nconst visible = ref(false)\nconst isEdit = ref(false)\n\nconst formRef = ref()\nconst accountData = reactive({\n  account: '',\n  password: '',\n  remark: '',\n})\n\n// 检查共享账号是否已添加\nconst checkAccountExists = (account: string): boolean => {\n  return props.accountList.some(item => item.account === account)\n}\n\nconst accountRules = computed(() => {\n  const baseRules = generateInputRules({ message: 'form_input_placeholder', validator: ['account'] })\n  const duplicateValidator = (rule: any, value: any, callback: any) => {\n    if (!isEdit.value && value && checkAccountExists(value)) {\n      callback(new Error($t('form_account_exit')))\n    } else {\n      callback()\n    }\n  }\n\n  return [...baseRules, { validator: duplicateValidator, trigger: 'blur' }]\n})\n\nconst clear = () => {\n  accountData.account = ''\n  accountData.password = ''\n  accountData.remark = ''\n}\n\nconst open = (data: AccountItem) => {\n  clear()\n  if (data) {\n    isEdit.value = true\n    accountData.account = data.account\n    accountData.password = data.password\n    accountData.remark = data.remark\n  } else {\n    isEdit.value = false\n  }\n  visible.value = true\n}\n\nconst close = () => {\n  clear()\n  visible.value = false\n}\n\nconst confirm = async () => {\n  const valid = await formRef.value.validate()\n  if (!valid) return\n  ElMessage.success(isEdit.value ? $t('action_save_success') : $t('action_add_success'))\n  emits('success', {\n    account: accountData.account,\n    password: accountData.password,\n    remark: accountData.remark,\n  })\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/toolbox/components/create-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\" :title=\"$t(editable ? 'action_edit' : 'action_add')\" width=\"600px\" destroy-on-close\n    :close-on-click-modal=\"false\"\n  >\n    <ElForm ref=\"formRef\" label-width=\"108px\" label-position=\"left\" :model=\"formData\">\n      <ElFormItem\n        :label=\"$t('group')\" prop=\"group_id\"\n        :rules=\"generateInputRules({ message: 'form_select_placeholder' })\"\n      >\n        <ElSelect v-model=\"formData.group_id\" size=\"large\">\n          <ElOption v-for=\"item in showGroupOptions\" :key=\"item.group_id\" :value=\"item.group_id\" :label=\"$t(item.group_name)\" />\n        </ElSelect>\n      </ElFormItem>\n      <ElFormItem label=\"URL\" prop=\"url\" :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['url'] })\">\n        <ElInput v-model=\"formData.url\" size=\"large\" placeholder=\"http://\" />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('icon')\" prop=\"logo\" :rules=\"generateInputRules({ message: 'form_upload_placeholder' })\">\n        <UploadImage v-model=\"formData.logo\" class=\"w-12 h-12\" />\n      </ElFormItem>\n      <ElFormItem\n        :label=\"$t('website_name')\" prop=\"name\"\n        :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n      >\n        <ElInput\n          v-model=\"formData.name\" size=\"large\" show-word-limit maxlength=\"20\"\n          :placeholder=\"$t('form_input_placeholder')\"\n        />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('description')\" prop=\"description\">\n        <ElInput\n          v-model=\"formData.description\" size=\"large\" type=\"textarea\" resize=\"none\" rows=\"5\" maxlength=\"200\" show-word-limit\n          :placeholder=\"$t('form_input_placeholder')\"\n        />\n      </ElFormItem>\n    </ElForm>\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"onSave\">\n          {{ $t('action_save') }}\n        </ElButton>\n        <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, nextTick, reactive, ref } from 'vue';\nimport UploadImage from '@/components/Upload/image.vue';\n\nimport { generateInputRules } from '@/utils/form-rule';\nimport { aiLinkApi } from '@/api/modules/ai-link';\n\n\nconst emits = defineEmits<{\n  (e: 'success'): any\n}>()\n\nconst groupOptions = inject('groupOptions', [])\n\nconst formRef = ref()\n\nconst visible = ref(false)\nconst editable = ref(false)\nconst submitting = ref(false)\nconst originInfo = ref({})\nconst formData = reactive({\n  logo: '',\n  name: '',\n  url: '',\n  description: '',\n  group_id: '',\n})\n\n\nconst showGroupOptions = computed(() => groupOptions.value.filter(item => +item.group_id > 0))\n\nconst reset = () => {\n  formData.logo = ''\n  formData.name = ''\n  formData.url = ''\n  formData.description = ''\n  formData.group_id = (showGroupOptions.value[0] || {}).group_id || ''\n  submitting.value = false\n}\nconst open = async ({ data = {} } = {}) => {\n  reset()\n  await nextTick()\n  editable.value = !!+data.ai_link_id\n  formData.logo = data.logo || ''\n  formData.name = data.name || ''\n  formData.url = data.url || ''\n  formData.description = data.description || ''\n  formData.group_id = data.group_id || formData.group_id || ''\n  originInfo.value = data\n  visible.value = true\n}\nconst close = async () => {\n  visible.value = false\n}\nconst onSave = async () => {\n  if (submitting.value)\n    return\n  const valid = await formRef.value.validate()\n  if (!valid)\n    return\n  submitting.value = true\n  await aiLinkApi.save({\n    data: {\n      ...formData,\n      ai_link_id: originInfo.value.ai_link_id,\n    },\n  }).catch(() => {\n    submitting.value = false\n  })\n  emits('success')\n  ElMessage.success(window.$t('action_save_success'))\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n  reset,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/toolbox/components/create-drawer.vue",
    "content": "<template>\n  <ElDrawer\n    v-model=\"visible\"\n    :title=\"editable ? $t('action_edit') : $t('action_add')\"\n    size=\"840px\"\n    destroy-on-close\n    append-to-body\n    :close-on-click-modal=\"false\"\n  >\n    <ElForm ref=\"formRef\" :model=\"formData\" label-position=\"top\">\n      <div class=\"text-base text-[#1D1E1F] font-medium mb-4\">\n        {{ $t('basic_info') }}\n      </div>\n      <div class=\"flex items-center gap-4\">\n        <ElFormItem\n          class=\"flex-1\"\n          :label=\"$t('name')\"\n          prop=\"name\"\n          :rules=\"generateInputRules({ message: 'form_input_placeholder' })\"\n        >\n          <ElInput\n            v-model=\"formData.name\"\n            size=\"large\"\n            show-word-limit\n            maxlength=\"20\"\n            :placeholder=\"$t('form_input_placeholder')\"\n          />\n        </ElFormItem>\n        <ElFormItem\n          :label=\"$t('group')\"\n          class=\"flex-1\"\n          prop=\"group_id\"\n          :rules=\"generateInputRules({ message: 'form_select_placeholder' })\"\n        >\n          <ElSelect v-model=\"formData.group_id\" size=\"large\">\n            <ElOption\n              v-for=\"item in showGroupOptions\"\n              :key=\"item.group_id\"\n              :value=\"item.group_id\"\n              :label=\"$t(item.group_name)\"\n            />\n          </ElSelect>\n        </ElFormItem>\n      </div>\n      <ElFormItem\n        label=\"URL\"\n        prop=\"url\"\n        :rules=\"generateInputRules({ message: 'form_input_placeholder', validator: ['url'] })\"\n      >\n        <ElInput v-model=\"formData.url\" size=\"large\" placeholder=\"http://\" />\n      </ElFormItem>\n\n      <div class=\"flex items-center justify-between gap-2 mb-2\">\n        <div class=\"text-sm text-[#4F5052]\">{{ $t('shared_account') }}</div>\n        <el-button link size=\"large\" class=\"!text-blue-500\" @click=\"handleAdd\"> +{{ $t('action_add') }} </el-button>\n      </div>\n      <ElFormItem>\n        <TablePlus\n          header-row-class-name=\"rounded overflow-hidden\"\n          header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n          :data=\"accountList\"\n          :pagination=\"false\"\n        >\n          <ElTableColumn :label=\"$t('account')\" min-width=\"140\" show-overflow-tooltip>\n            <template #default=\"{ row = {} }\">\n              {{ row.account }}\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('password')\" min-width=\"140\" show-overflow-tooltip>\n            <template #default=\"{ row = {} }\">\n              {{ row.password }}\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('remark')\" min-width=\"140\" show-overflow-tooltip>\n            <template #default=\"{ row = {} }\">\n              {{ row.remark || '--' }}\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('operation')\" width=\"120\" align=\"left\" fixed=\"right\">\n            <template #default=\"{ row }\">\n              <div class=\"flex\">\n                <el-button type=\"primary\" link @click=\"onEdit(row)\">\n                  <SvgIcon name=\"edit\" class=\"text-[#606266]\"></SvgIcon>\n                </el-button>\n                <el-button type=\"primary\" link @click=\"onDelete(row)\">\n                  <SvgIcon name=\"del\" class=\"text-[#606266]\"></SvgIcon>\n                </el-button>\n              </div>\n            </template>\n          </ElTableColumn>\n        </TablePlus>\n      </ElFormItem>\n      <ElFormItem :label=\"$t('description')\">\n        <ElInput\n          v-model=\"formData.description\"\n          type=\"textarea\"\n          :rows=\"3\"\n          resize=\"none\"\n          show-word-limit\n          maxlength=\"200\"\n        />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('avatar')\" prop=\"logo\" :rules=\"generateInputRules({ message: 'form_upload_placeholder' })\">\n        <UploadImage v-model=\"formData.logo\" class=\"w-12 h-12\" />\n      </ElFormItem>\n\n      <UseGroup\n        :user-group=\"userGroup\"\n        :editable=\"editable\"\n        :subscription-group=\"subscriptionGroup\"\n        @change=\"onChange\"\n      />\n    </ElForm>\n    <template #footer>\n      <div class=\"flex border-t pt-5 justify-end w-full\">\n        <ElButton size=\"large\" :loading=\"submitting\" @click=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n        <ElButton v-debounce type=\"primary\" size=\"large\" @click=\"handleSave\">\n          {{ $t('action_confirm') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDrawer>\n\n  <AddAccount ref=\"addRef\" :account-list=\"accountList\" @success=\"handleAddSuccess\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, reactive, ref, nextTick } from 'vue'\nimport UploadImage from '@/components/Upload/image.vue'\nimport AddAccount from './add-account.vue'\nimport UseGroup from './use-group.vue'\n\nimport { generateInputRules } from '@/utils/form-rule'\nimport { aiLinkApi } from '@/api/modules/ai-link'\nimport { GROUP_TYPE } from '@/constants/group'\n\ninterface accountItem {\n  account: string\n  password: string\n  remark: string\n}\n\nconst emits = defineEmits<{\n  (e: 'success'): any\n}>()\n\nconst formRef = ref()\nconst addRef = ref()\n\nconst groupOptions = inject('groupOptions', [])\n\nconst visible = ref(false)\nconst editable = ref(false)\nconst accountEdit = ref(false)\nconst submitting = ref(false)\nconst originInfo = ref({})\nconst userGroup = ref([])\nconst subscriptionGroup = ref([])\nconst editingIndex = ref(-1)\nconst sort = ref(0)\n\nconst accountList = ref<accountItem[]>([])\n\nconst formData = reactive({\n  logo: '',\n  name: '',\n  url: '',\n  description: '',\n  group_id: '',\n})\n\nconst showGroupOptions = computed(() => groupOptions.value.filter(item => +item.group_id > 0))\n\nconst reset = () => {\n  formData.logo = ''\n  formData.name = ''\n  formData.url = ''\n  formData.description = ''\n  formData.group_id = (showGroupOptions.value[0] || {}).group_id || ''\n  submitting.value = false\n}\n\nconst handleAdd = () => {\n  accountEdit.value = false\n  addRef.value.open()\n}\n\nconst handleAddSuccess = (accountData: accountItem) => {\n  if (accountEdit.value) {\n    accountList.value.splice(editingIndex.value, 1, accountData)\n  } else {\n    accountList.value = [...accountList.value, accountData]\n  }\n}\n\nconst onDelete = async row => {\n  await ElMessageBox.confirm($t('form_delete_confirm'), $t('action.delete'))\n  const index = accountList.value.findIndex(item => item.account === row.account)\n  if (index !== -1) {\n    accountList.value.splice(index, 1)\n    ElMessage.success($t('action_delete_success'))\n  }\n}\n\nconst onEdit = row => {\n  accountEdit.value = true\n  editingIndex.value = accountList.value.findIndex(item => item.account === row.account)\n  addRef.value.open(row)\n}\n\nconst onChange = item => {\n  if (item.groupType === GROUP_TYPE.USER) {\n    subscriptionGroup.value = item.data.value?.length ? item.data.value : []\n  } else {\n    userGroup.value = item.data.value?.length ? item.data.value : []\n  }\n}\n\nconst open = async ({ data = {} } = {}) => {\n  reset()\n  await nextTick()\n  sort.value = data.sort || 0\n  userGroup.value = data.user_group_ids || []\n  subscriptionGroup.value = data.user_group_ids || []\n  editable.value = !!+data.ai_link_id\n  accountList.value = []\n  if (editable.value === true) {\n    const detail = await aiLinkApi.detail(data.ai_link_id)\n    accountList.value = detail.data.shared_account ? JSON.parse(detail.data.shared_account) : []\n  }\n  formData.logo = data.logo || ''\n  formData.name = data.name || ''\n  formData.url = data.url || ''\n  formData.description = data.description || ''\n  formData.group_id = data.group_id || formData.group_id || ''\n  originInfo.value = data\n  visible.value = true\n}\nconst close = async () => {\n  visible.value = false\n}\nconst handleSave = async () => {\n  if (submitting.value) return\n  const valid = await formRef.value.validate()\n  if (!valid) return\n  submitting.value = true\n\n  const requestData = {\n    ...formData,\n    sort: sort.value,\n    shared_account: accountList.value?.length ? JSON.stringify(accountList.value) : '',\n    subscription_group_ids: subscriptionGroup.value,\n    user_group_ids: userGroup.value,\n    ai_link_id: originInfo.value.ai_link_id,\n  }\n  await aiLinkApi\n    .save({\n      data: requestData,\n    })\n    .catch(() => {\n      submitting.value = false\n    })\n  emits('success')\n  ElMessage.success(window.$t('action_save_success'))\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n  reset,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/toolbox/components/store-dialog.vue",
    "content": "<template>\n  <ElDialog v-model=\"visible\" :title=\"$t('action_add')\" width=\"870px\">\n    <div class=\"bg-[#F7F7FA] -mx-7 -mt-5 px-7 py-4 mb-4\">\n      <div\n        v-if=\"showAddManual\"\n        class=\"flex items-center justify-center h-15 text-[#2563EB] bg-white text-sm cursor-pointer hover:bg-[#F2F4F8]\"\n        @click=\"handleAdd\"\n      >\n        + {{ $t('commom.add_manual') }}\n      </div>\n      <div class=\"text-base text-[#1D1E1F] font-medium mt-6 mb-4\">\n        {{ $t('commom.add_market') }}\n      </div>\n\n      <StoreView @add=\"handleAdd\" />\n    </div>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\n\nimport StoreView from './store-view.vue';\n\nconst emit = defineEmits(['add'])\n\nwithDefaults(\n  defineProps<{\n    showAddManual?: boolean\n  }>(),\n  {\n    showAddManual: true,\n  }\n)\n\nconst visible = ref(false)\n\nconst open = () => {\n  visible.value = true\n}\n\nconst close = () => {\n  visible.value = false\n}\n\nconst handleAdd = (data?: AI_LINK.State) => {\n  emit('add', data)\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/console/src/views/toolbox/components/store-view.vue",
    "content": "<template>\n  <div class=\"max-h-[360px] flex flex-col\">\n    <div class=\"flex-none flex items-center justify-between\">\n      <div class=\"flex-1 w-0\">\n        <GroupTabs v-model=\"filterForm.group_id\" type=\"tabs-pure\" :options=\"categoryList\" @change=\"onGroupChange\" />\n      </div>\n      <div class=\"flex-none flex-center gap-3 ml-8\">\n        <Search v-model=\"filterForm.keyword\" placeholder=\"module.ai_toolbox_search_placeholder\" />\n      </div>\n    </div>\n\n    <div ref=\"scrollRef\" class=\"flex-1 overflow-y-auto relative\">\n      <template v-for=\"item in searchList\" :key=\"item.group_id\">\n        <div v-if=\"item.links.length\" :id=\"`toolbox-group-${item.group_id}`\" class=\"text-sm text-[#939499] mt-4\">\n          {{ item.group_name }}\n        </div>\n        <div v-if=\"item.links.length\" class=\"grid grid-cols-3 gap-4 mt-3\">\n          <template v-for=\"(link, index) in item.links\" :key=\"index\">\n            <div class=\"bg-white rounded border p-4 flex items-center gap-2 relative group\">\n              <img alt=\"AI 搜索\" :src=\"link.logo\" class=\"size-10\" />\n              <div class=\"flex-1 overflow-hidden\">\n                <div class=\"text-sm text-[#1D1E1F]\">\n                  {{ link.name }}\n                </div>\n                <div class=\"text-xs text-[#1D1E1F] text-opacity-60 truncate mt-1\">\n                  {{ link.description }}\n                </div>\n              </div>\n\n              <div\n                class=\"absolute inset-0 items-center justify-center bg-[#222326] bg-opacity-55 rounded hidden group-hover:flex gap-2\"\n              >\n                <ElButton class=\"!mr-0\" @click=\"handleVisit(link)\"> {{ $t('action_visit') }} </ElButton\n                ><ElButton type=\"primary\" class=\"!ml-0\" @click=\"handleAdd(link)\">{{ $t('action_add') }}</ElButton>\n              </div>\n            </div>\n          </template>\n        </div>\n      </template>\n      <el-empty v-if=\"showEmpty\" />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, reactive, onMounted } from 'vue'\nimport aiLinkApi from '@/api/modules/ai-link'\nimport { useScroll } from '@/hooks/useScroll'\n\nconst { scrollRef, scrollTo, scrollToTop } = useScroll()\n\ninterface StoreState extends Category.State {\n  links: AI_LINK.State[]\n}\n\nconst emit = defineEmits(['add'])\n\nconst categoryList = ref<StoreState[]>([])\nconst filterForm = reactive({\n  group_id: 0,\n  keyword: '',\n})\n\nconst searchList = computed(() => {\n  return categoryList.value\n    .filter(item => item.group_id > 0)\n    .map(item => {\n      return {\n        ...item,\n        links: item.links.filter(\n          link => link.name.includes(filterForm.keyword) || link.description.includes(filterForm.keyword)\n        ),\n      }\n    })\n})\n\nconst showEmpty = computed(() => {\n  return searchList.value.every(item => !item.links.length)\n})\n\nconst loadList = () => {\n  aiLinkApi.store().then(res => {\n    const list = res.data.map((item, index) => {\n      return {\n        group_id: index + 1,\n        group_name: item.group_name,\n        links: item.links,\n      }\n    })\n    list.unshift({\n      group_id: 0,\n      group_name: window.$t('all'),\n    })\n    categoryList.value = list\n  })\n}\n\nconst onGroupChange = e => {\n  if (e.value > 0) {\n    scrollTo(`#toolbox-group-${e.value}`)\n  } else {\n    scrollToTop()\n  }\n}\n\nconst handleAdd = (data?: AI_LINK.State) => {\n  emit('add', { data })\n}\n\nconst handleVisit = (link: AI_LINK.State) => {\n  window.open(link.url, '_blank')\n}\nonMounted(() => {\n  loadList()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/toolbox/components/use-group.vue",
    "content": "<template>\n  <div class=\"text-base text-[#1D1E1F] font-medium mt-10 mb-4\">\n    {{ $t('permission_setting') }}\n  </div>\n  <div>\n    <ElFormItem\n      :hidden=\"!(enterprise.info.is_independent || enterprise.info.is_industry)\"\n      :label=\"$t('register_user.title')\"\n    >\n      <GroupSelect\n        v-model=\"props.subscriptionGroup\"\n        type=\"checkbox\"\n        :group-type=\"GROUP_TYPE.USER\"\n        multiple\n        :default-all=\"!props.editable\"\n        @change=\"handleSubscriptionChange\"\n      />\n    </ElFormItem>\n    <ElFormItem\n      :hidden=\"!(enterprise.info.is_enterprise || enterprise.info.is_industry)\"\n      :label=\"$t('internal_user.title')\"\n      prop=\"user_group_ids\"\n    >\n      <GroupSelect\n        v-model=\"props.userGroup\"\n        type=\"picker\"\n        :group-type=\"GROUP_TYPE.INTERNAL_USER\"\n        multiple\n        @change=\"handleUserGroupChange\"\n      />\n    </ElFormItem>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { GROUP_TYPE } from '@/constants/group';\nimport { useEnterpriseStore } from '@/stores/modules/enterprise';\n\nconst enterprise = useEnterpriseStore()\n\nconst props = withDefaults(\n  defineProps<{\n    userGroup: number[]\n    subscriptionGroup: number[]\n    editable: boolean\n  }>(),\n  {\n    userGroup: () => [],\n    subscriptionGroup: () => [],\n    editable: true,\n  }\n)\n\nconst emit = defineEmits(['change'])\n\nconst handleUserGroupChange = (data: number[]) => {\n  emit('change', { groupType: GROUP_TYPE.INTERNAL_USER, data })\n}\n\nconst handleSubscriptionChange = (data: number[]) => {\n  emit('change', { groupType: GROUP_TYPE.USER, data })\n}\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/toolbox/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.ai_toolbox')\">\n      <template #right>\n        <template v-if=\"isSort\">\n          <el-button type=\"default\" class=\"min-w-[96px]\" size=\"large\" @click=\"handleSortCancel\">\n            {{ $t('action_cancel') }}\n          </el-button>\n          <el-button v-debounce type=\"primary\" class=\"min-w-[96px] !ml-0\" size=\"large\" @click=\"handleSortSave\">\n            {{ $t('action_save') }}\n          </el-button>\n        </template>\n        <template v-else>\n          <el-button\n            type=\"default\"\n            class=\"min-w-[96px]\"\n            size=\"large\"\n            :disabled=\"!!filterForm.keyword\"\n            @click=\"handleSortOpen\"\n          >\n            {{ $t('action_sort') }}\n          </el-button>\n          <el-button type=\"primary\" class=\"min-w-[96px] !ml-0\" size=\"large\" @click=\"handleStore\">\n            {{ $t('action_add') }}\n          </el-button>\n        </template>\n      </template>\n    </Header>\n    <div class=\"flex-none flex items-center justify-between mt-5\">\n      <div class=\"flex-1 w-0\">\n        <GroupTabs\n          ref=\"groupTabsRef\"\n          v-model=\"filterForm.group_id\"\n          :disabled=\"isSort\"\n          :group-type=\"GROUP_TYPE.AI_LINK\"\n          type=\"dropdown\"\n          @change=\"refresh\"\n          @get-options=\"onGetOptions\"\n        />\n      </div>\n      <div class=\"flex-none flex-center gap-3 ml-8\">\n        <ElInput\n          v-model=\"filterForm.keyword\"\n          size=\"large\"\n          clearable\n          :placeholder=\"$t('prompt.search_placeholder')\"\n          :suffix-icon=\"Search\"\n          @change=\"refresh\"\n        />\n      </div>\n    </div>\n\n    <div v-loading=\"loading || saving\" class=\"mt-6 flex-1 box-border pr-1 overflow-y-auto relative\">\n      <ElEmpty v-if=\"!aiLinkList.length\" class=\"mt-10\" :description=\"$t('no_data')\" />\n      <ul v-else>\n        <li v-for=\"group in showGroupOptions\" :key=\"group.group_id\">\n          <div\n            v-show=\"!+filterForm.group_id || +filterForm.group_id < 0\"\n            class=\"text-[#4F5052] text-opacity-60 text-sm mb-4\"\n          >\n            {{ group.group_name }}\n          </div>\n          <Sortable\n            :model-value=\"group.children\"\n            identity=\"ai_link_id\"\n            class=\"grid grid-cols-4 gap-4 max-lg:grid-cols-3 max-md:grid-cols-2 max-sm:grid-cols-1 mb-9\"\n            :custom-sortable-id=\"`toolbox_group_${group.group_id}`\"\n            :disabled=\"!isSort\"\n            group=\"toolbox-group\"\n            force-render\n            :loading=\"saving\"\n            @change=\"handleSortChange\"\n          >\n            <template #item=\"{ item, index }\">\n              <div\n                class=\"h-[72px] bg-white overflow-hidden group relative border rounded p-4 flex items-center gap-2 cursor-pointer\"\n                role=\"button\"\n                :aria-label=\"item.name\"\n              >\n                <div\n                  v-if=\"!isSort\"\n                  class=\"invisible group-hover:visible w-full h-full z-[2] absolute top-0 left-0 bg-black bg-opacity-40 flex-center gap-1.5\"\n                >\n                  <ElButton type=\"default\" @click=\"onUrlOpen({ data: item })\">\n                    {{ $t('action_visit') }}\n                  </ElButton>\n                  <ElButton type=\"primary\" class=\"!ml-0\" @click=\"onCommand('edit', item)\">\n                    {{ $t('action_edit') }}\n                  </ElButton>\n                  <ElButton type=\"default\" class=\"!ml-0 !px-2\" @click=\"onCommand('del', item)\">\n                    <ElIcon color=\"#FA5151\" :size=\"16\">\n                      <Delete />\n                    </ElIcon>\n                  </ElButton>\n                </div>\n                <img class=\"w-10 h-10 object-cover rounded-full overflow-hidden\" :src=\"item.logo\" />\n                <div class=\"flex-1 w-0\">\n                  <div class=\"flex items-center justify-between\">\n                    <div class=\"text-sm text-[#1D1E1F] font-semibold line-clamp-1\">\n                      {{ item.name }}\n                    </div>\n                  </div>\n                  <div class=\"text-sm text-[#1D1E1F] text-opacity-60 line-clamp-1\">\n                    {{ item.description }}\n                  </div>\n                </div>\n                <div v-show=\"isSort\" class=\"sort-icon cursor-move\">\n                  <svg-icon name=\"drag\" width=\"24px\" height=\"42px\" color=\"#a1a5af\" />\n                </div>\n              </div>\n            </template>\n          </Sortable>\n        </li>\n      </ul>\n    </div>\n\n    <!-- <ToolBox class=\"mt-4\" /> -->\n\n    <createDrawer ref=\"drawerRef\" @success=\"refresh\" />\n    <StoreDialog ref=\"storeRef\" @add=\"onCreate\" @success=\"refresh\" />\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { Delete, Search } from '@element-plus/icons-vue'\nimport { computed, onMounted, provide, reactive, ref } from 'vue'\nimport StoreDialog from './components/store-dialog.vue'\nimport createDrawer from './components/create-drawer.vue'\n\nimport { aiLinkApi } from '@/api/modules/ai-link'\n\nimport { GROUP_TYPE } from '@/constants/group'\n\nconst groupTabsRef = ref()\nconst storeRef = ref()\nconst drawerRef = ref()\nconst filterForm = reactive({\n  group_id: [],\n  keyword: '',\n})\nconst aiLinkList = ref([])\nconst loading = ref(false)\n\nconst showGroupOptions = computed(() => {\n  let options = groupOptions.value.filter(item => +item.group_id > 0 && item.children && item.children.length)\n  if (filterForm.group_id.length > 0) options = options.filter(item => filterForm.group_id.includes(item.group_id))\n  return options\n})\n\nconst refresh = async () => {\n  await loadListData()\n}\n\nconst loadListData = async () => {\n  loading.value = true\n  const data = await aiLinkApi.list({ params: filterForm }).finally(() => {\n    loading.value = false\n  })\n  aiLinkList.value = data\n  setAiLinkToGroup()\n}\nconst handleStore = () => {\n  storeRef.value.open()\n}\nconst onCreate = ({ data = {} } = {}) => {\n  if (filterForm.group_id.length > 0 && filterForm.group_id[0] !== '-1') {\n    data.group_id = filterForm.group_id[0]\n  }\n  drawerRef.value.open({ data })\n}\nconst groupOptions = ref([])\nprovide('groupOptions', groupOptions)\n\nconst onGetOptions = ({ options = [] } = {}) => {\n  const allOption = { group_id: '-1', group_name: $t('all_group'), children: [] }\n  groupOptions.value = [\n    allOption,\n    ...options.map(item => ({\n      ...item,\n      children: [],\n    })),\n  ]\n  setAiLinkToGroup()\n}\nconst setAiLinkToGroup = () => {\n  groupOptions.value.forEach(item => {\n    item.children = aiLinkList.value.filter(aiLink => aiLink.group_id === item.group_id)\n    item.children.sort((a, b) => b.sort - a.sort)\n  })\n}\nconst onUrlOpen = ({ data = {} } = {}) => {\n  window.open(data.url, '_blank')\n}\nconst onCommand = async (command, data = {}) => {\n  switch (command) {\n    case 'edit':\n      onCreate({ data })\n      break\n    case 'del':\n      await ElMessageBox.confirm(window.$t('action_delete_confirm'), window.$t('action_delete_tip'))\n      await aiLinkApi.delete({ data: { ai_link_id: data.ai_link_id } })\n      ElMessage.success(window.$t('action_delete_success'))\n      refresh()\n      break\n  }\n}\nconst isSort = ref(false)\nconst saving = ref(false)\nconst handleSortOpen = () => {\n  isSort.value = true\n}\nconst handleSortCancel = () => {\n  isSort.value = false\n  setAiLinkToGroup()\n}\nconst handleSortSave = async () => {\n  saving.value = true\n  const items = groupOptions.value.reduce((result, item = {}) => {\n    return [\n      ...result,\n      ...item.children.map((child, index) => ({\n        group_id: item.group_id,\n        id: child.ai_link_id,\n        // name: child.name,\n        sort: item.children.length - index,\n      })),\n    ]\n  }, [])\n  await aiLinkApi.sort({ items }).finally(() => {\n    saving.value = false\n  })\n  ElMessage.success(window.$t('action_save_success'))\n  handleSortCancel()\n  refresh()\n}\nconst timer = null\nconst handleSortChange = (result = {}) => {\n  const { action, originSortableId = '', targetSortableId = '', value = [] } = result\n  const originGroupId = originSortableId.split('_').pop() || ''\n  const targetGroupId = targetSortableId.split('_').pop() || ''\n  const originGroupOption = groupOptions.value.find(item => item.group_id === +originGroupId)\n  const targetGroupOption = groupOptions.value.find(item => item.group_id === +targetGroupId)\n  switch (action) {\n    case 'add':\n      if (targetGroupOption) targetGroupOption.children = [...value]\n      break\n    case 'remove':\n      if (originGroupOption) originGroupOption.children = [...value]\n      break\n    case 'sort':\n      if (targetGroupOption) targetGroupOption.children = [...value]\n      break\n  }\n}\n\nonMounted(() => {\n  refresh()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/user/admin/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { Search, UserFilled } from '@element-plus/icons-vue'\nimport { computed, onMounted, onUnmounted, reactive, ref } from 'vue'\nimport { useRoute } from 'vue-router'\nimport UserSelectDialog from '../components/user-select-dialog.vue'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport { userApi } from '@/api'\n\nconst route = useRoute()\ninterface User {\n  'user_id': number\n  'username': string\n  'nickname': string\n  'avatar': string\n  'mobile': string\n  'email': string\n  'eid': number\n  'role': number\n  'group_id': number\n  'status': number\n  'expired_time': number\n  'last_login_time': number\n  'related_id': number\n  'created_time': number\n  'updated_time': number\n  'register_time': string\n}\n\nconst user_store = useUserStore()\nconst userSelectRef = ref()\nconst filter_form = reactive({\n  keyword: '',\n})\nconst loading = ref(false)\nconst user_info = computed(() => user_store.info)\n\nconst state: {\n  keyword: string\n  page: number\n  pageSize: number\n  count: number\n  list: User[]\n} = reactive({\n  keyword: '',\n  page: 1,\n  pageSize: 10,\n  count: 0,\n  list: [],\n})\n\nconst fetchAdminList = async () => {\n  loading.value = true\n  const { total = 0, list = [] } = await userApi.fetch_admin_user({ keyword: state.keyword, offset: (state.page - 1) * state.pageSize, limit: state.pageSize }).finally(() => {\n    loading.value = false\n  })\n  state.count = +total || 0\n  state.list = [...list]\n}\n\nconst refresh = () => {\n  state.page = 1\n  return fetchAdminList()\n}\n\nconst handleAdd = ({ data = {} } = {}) => {\n  userSelectRef.value.open({\n    success: ({ value }: { value: any[] }) => {\n      userApi.batch_save_admin({ user_ids: value.map(item => item.user_id) }).then((res) => {\n        ElMessage.success(window.$t('action_add_success'))\n        refresh()\n      })\n    },\n  })\n}\nconst handleDelete = async (data: User) => {\n  await ElMessageBox.confirm(window.$t('admin_user.delete_confirm'))\n  await userApi.batch_remove_admin({ user_ids: [data.user_id] })\n  ElMessage.success(window.$t('action_delete_success'))\n  fetchAdminList()\n}\nconst onPageSizeChange = (pageSize: number) => {\n  state.pageSize = pageSize\n  refresh()\n}\nconst onPageChange = (page: number) => {\n  state.page = page\n  fetchAdminList()\n}\nonMounted(async () => {\n  fetchAdminList()\n  // eventBus.on('load-user-self-info-success', fetchAdminList)\n})\nonUnmounted(() => {\n  // eventBus.off('load-user-self-info-success', fetchAdminList)\n})\n</script>\n\n<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t(route.meta.title)\" />\n    <div class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border  max-h-[calc(100vh-100px)] overflow-auto\">\n      <div class=\"flex items-center justify-between\">\n        <ElInput\n          v-model=\"state.keyword\" style=\"width: 268px\" size=\"large\" clearable :suffix-icon=\"Search\"\n          :placeholder=\"$t('admin_user.search_placeholder')\" @change=\"refresh\"\n        />\n        <ElButton class=\"min-w-[100px]\" type=\"primary\" size=\"large\" @click=\"handleAdd\">\n          + {{ $t('action_add') }}\n        </ElButton>\n      </div>\n\n      <div class=\"flex-1 overflow-y-auto bg-white rounded-lg mt-4\">\n        <TablePlus\n          :data=\"state.list\" :total=\"state.count\" style=\"width: 100%\" :loading=\"loading\"\n          header-row-class-name=\"rounded overflow-hidden\" header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n          @page-size-change=\"onPageSizeChange\" @page-current-change=\"onPageChange\"\n        >\n          <el-table-column :label=\"$t('user')\" min-width=\"160\" prop=\"nickname\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <div class=\"flex items-center gap-1 w-full\">\n                <ElIcon size=\"16\" color=\"#C7C7C7\">\n                  <UserFilled />\n                </ElIcon>\n                <div class=\"truncate\">\n                  {{ row.nickname }}\n                </div>\n              </div>\n            </template>\n          </el-table-column>\n          <el-table-column :label=\"$t('mobile')\" min-width=\"140\" prop=\"mobile\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.mobile }\">{{ row.mobile || '--' }}</span>\n            </template>\n          </el-table-column>\n          <el-table-column :label=\"$t('email')\" min-width=\"140\" prop=\"email\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.email }\">{{ row.email || '--' }}</span>\n            </template>\n          </el-table-column>\n          <el-table-column :label=\"$t('role.title')\" min-width=\"120\" prop=\"role\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.role_label }\">{{ $t(row.role_label) || '--' }}</span>\n            </template>\n          </el-table-column>\n          <el-table-column :label=\"$t('add_time')\" width=\"160\" prop=\"add_admin_time\">\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.add_admin_time }\">{{ (row.add_admin_time || '').slice(0, 16) || '--'\n              }}</span>\n            </template>\n          </el-table-column>\n          <el-table-column :label=\"$t('operation')\" width=\"60\" fixed=\"right\" align=\"right\">\n            <template #default=\"{ row }\">\n              <!-- <ElButton class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click=\"handleAdd({ data: row })\">\n\t\t\t\t\t\t\t\t{{ $t('action_edit') }}\n\t\t\t\t\t\t\t</ElButton> -->\n              <ElButton v-if=\"row.is_admin && user_info.user_id != row.user_id\" class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click=\"handleDelete(row)\">\n                {{ $t('action_delete') }}\n              </ElButton>\n              <template v-else>\n                --\n              </template>\n            </template>\n          </el-table-column>\n        </TablePlus>\n      </div>\n    </div>\n\n    <UserSelectDialog ref=\"userSelectRef\" />\n  </Layout>\n</template>\n\n<style scoped>\n\n</style>\n"
  },
  {
    "path": "web/console/src/views/user/components/department-add-dialog.vue",
    "content": "<script setup lang=\"ts\">\nimport { reactive, ref } from 'vue'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { departmentApi } from '@/api/modules/department'\n\nconst emits = defineEmits<{\n\t(e: 'success'): void\n}>()\n\nconst DEFAULT_SORT = 999999\n\nconst formRef = ref()\nconst visible = ref(false)\nconst editable = ref(false)\nconst formData = reactive({\n  name: '',\n})\nconst originData = ref({})\nconst submitting = ref(false)\nconst parentDid = ref(0)\nconst parentChildren = ref([])\n\nlet successCallback = null\nconst open = ({\n\tdata = {},\n\tparentDid: _parentDid = 0,\n\tparentChildren: _parentChildren = [],\n\tsuccess = null\n} = {}) => {\n\treset()\n\tsuccessCallback = success\n\teditable.value = !!data.did\n\tformData.name = data.name || ''\n\toriginData.value = data\n\tparentDid.value = _parentDid\n\tparentChildren.value = _parentChildren\n\tvisible.value = true\n}\nconst close = () => {\n  visible.value = false\n}\nconst reset = () => {\n\tformData.name = ''\n}\nconst handleSave = async () => {\n\tconst valid = await formRef.value.validate()\n\tif (!valid) return\n\tlet data = {\n\t\tdid: originData.value.did,\n\t\tname: formData.name,\n\t\tpdid: +parentDid.value || +originData.value.pdid || 0,\n\t\tsort: originData.value.sort || (DEFAULT_SORT - parentChildren.value.length),\n\t}\n\tsubmitting.value = true\n\tawait departmentApi.save(data).finally(() => {\n\t\tsubmitting.value = false\n\t})\n\tif (typeof successCallback === 'function') successCallback({ data })\n\temits('success')\n\tElMessage.success(window.$t('action_save_success'))\n\tclose()\n}\n\ndefineExpose({\n  open,\n  close,\n  reset,\n})\n</script>\n\n<template>\n\t<ElDialog v-model=\"visible\" :title=\"$t(editable ? 'internal_user.department.edit' : 'internal_user.department.create')\" :close-on-click-modal=\"false\"\n\t\twidth=\"600px\" destroy-on-close append-to-body @close=\"close\">\n\t\t<ElForm ref=\"formRef\" :model=\"formData\" label-position=\"top\">\n\t\t\t<ElFormItem :label=\"$t('internal_user.department.name')\" prop=\"name\"\n\t\t\t\t:rules=\"generateInputRules({ message: 'internal_user.department.name_placeholder' })\">\n\t\t\t\t<ElInput v-model=\"formData.name\" size=\"large\" maxlength=\"20\" show-word-limit\n\t\t\t\t\t:placeholder=\"$t('internal_user.department.name_placeholder')\" />\n\t\t\t</ElFormItem>\n\t\t</ElForm>\n\t\t<template #footer>\n\t\t\t<div class=\"py-4 flex items-center justify-center\">\n\t\t\t\t<ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"handleSave\">\n\t\t\t\t\t{{ $t('action_save') }}\n\t\t\t\t</ElButton>\n\t\t\t\t<ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n\t\t\t\t\t{{ $t('action_cancel') }}\n\t\t\t\t</ElButton>\n\t\t\t</div>\n\t\t</template>\n\t</ElDialog>\n</template>\n\n<style scoped>\n</style>\n"
  },
  {
    "path": "web/console/src/views/user/components/department-tree-select.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted, getCurrentInstance, watch } from 'vue'\nimport { departmentApi } from '@/api/modules/department'\n\nconst { proxy } = getCurrentInstance()\n\nconst props = withDefaults(defineProps<{\n\tmodelValue: number\n}>(), {\n\tmodelValue: ''\n})\n\nconst emits = defineEmits<{\n\t(e: 'update:modelValue', value: any): void\n\t(e: 'change', result: { value: any }): void\n}>()\n\nconst selectValue = ref(props.modelValue)\nconst treeData = ref([])\n\nconst fetchDepartmentTree = async () => {\n\tif (treeData.value.length) return\n\ttreeData.value = await departmentApi.fetch_department_tree()\n}\nconst filterNodeMethod = (value, data) => data.label.includes(value)\nconst handleChange = (value: number) => {\n\temits('update:modelValue', selectValue.value)\n\temits('change', { value: selectValue.value })\n\tproxy.$forceUpdate()\n}\n\nonMounted(async () => {\n\tawait fetchDepartmentTree()\n})\n\nwatch(() => props.modelValue, (value) => {\n\tselectValue.value = value\n})\n</script>\n\n<template>\n\t<div>\n\t\t<ElTreeSelect check-strictly show-checkbox check-on-click-node size=\"large\" clearable filterable\n\t\t\tcollapse-tags collapse-tags-tooltip :filter-node-method=\"filterNodeMethod\" :render-after-expand=\"false\"\n\t\t\t:placeholder=\"$t('internal_user.account.department_placeholder')\" :data=\"treeData\" :default-expanded-keys=\"[0]\"\n\t\t\tv-model=\"selectValue\" @change=\"handleChange\">\n\t\t\t<template #default=\"{ data }\">\n\t\t\t\t<div>{{ data.label }}</div>\n\t\t\t</template>\n\t\t</ElTreeSelect>\n\t</div>\n</template>\n\n<style scoped>\n</style>\n\n"
  },
  {
    "path": "web/console/src/views/user/components/department-tree.vue",
    "content": "<template>\n  <div class=\"flex flex-col h-full\">\n    <div class=\"px-4 py-4 flex items-center gap-2\">\n      <ElInput\n        v-model=\"filterForm.keyword\"\n        class=\"flex-1 h-[36px]\"\n        size=\"default\"\n        clearable\n        :prefix-icon=\"Search\"\n        :placeholder=\"$t('internal_user.organization.all_search_placeholder')\"\n        @change=\"refresh\"\n      />\n      <!-- 授权企业微信后 是不允许添加的 -->\n      <ElIcon\n        v-if=\"!isSsoSync\"\n        size=\"18\"\n        color=\"#333333\"\n        class=\"cursor-pointer\"\n        @click=\"handleCommand('add_children', treeData[0], 0)\"\n      >\n        <Plus />\n      </ElIcon>\n    </div>\n    <div v-loading=\"loading\" class=\"px-4 min-h-[300px] flex-1 h-0 overflow-auto\">\n      <ElTree\n        v-show=\"isSsoSync && isWecomSync ? !isSearch : true\"\n        ref=\"treeRef\"\n        node-key=\"bind_value\"\n        :data=\"treeData\"\n        :class=\"[searchData.member.length ? 'hidden-empty-block' : '']\"\n        style=\"--el-tree-node-content-height: 32px\"\n        :expand-on-click-node=\"false\"\n        :default-expanded-keys=\"isSearch ? [] : defaultExpandedKeys\"\n        :filter-node-method=\"filterNode\"\n        @node-expand=\"handleNodeExpand\"\n        @node-collapse=\"handleNodeCollapse\"\n        @node-click=\"handleNodeClick\"\n      >\n        <template #default=\"{ node, data }\">\n          <div class=\"w-full flex items-center gap-2 group pr-2\">\n            <SvgIcon name=\"department\" width=\"16px\" height=\"16px\" color=\"#57A1FF\" />\n            <div class=\"flex-1 w-0 text-[#333] text-sm truncate\" :title=\"data.label\">\n              <OpenData type=\"departmentName\" :openid=\"data.bind_value\" :text=\"data.label\" />\n            </div>\n            <template v-if=\"isSsoSync\">\n              <div v-if=\"data.value === treeData[0].value && organization.syncing\" class=\"demo-progress flex-none\">\n                <el-progress :percentage=\"organization.progress\" />\n              </div>\n              <El-Button\n                v-if=\"data.value === treeData[0].value\"\n                v-debounce\n                v-tooltip=\"{ content: $t('sso.sync_corp') }\"\n                link\n                @click.stop=\"handleSyncDepartment\"\n              >\n                <ElIcon size=\"16\" color=\"#333333\">\n                  <Refresh />\n                </ElIcon>\n              </El-Button>\n            </template>\n            <template v-else>\n              <ElDropdown v-if=\"!isSearch\" @command=\"handleCommand($event, data, data.index)\">\n                <span>\n                  <ElIcon class=\"text-[#999] rotate-90 mr-2 cursor-pointer invisible group-hover:visible\">\n                    <MoreFilled />\n                  </ElIcon>\n                </span>\n                <template #dropdown>\n                  <ElDropdownMenu>\n                    <ElDropdownItem command=\"add_children\">\n                      {{ $t('internal_user.department.add_children') }}\n                    </ElDropdownItem>\n                    <template v-if=\"data.did\">\n                      <ElDropdownItem command=\"update_name\">\n                        {{ $t('internal_user.department.update_name') }}\n                      </ElDropdownItem>\n                      <ElDropdownItem v-if=\"data.index > 0\" command=\"move_up\">\n                        {{ $t('internal_user.department.move_up') }}\n                      </ElDropdownItem>\n                      <ElDropdownItem v-if=\"data.lastIndex > data.index\" command=\"move_down\">\n                        {{ $t('internal_user.department.move_down') }}\n                      </ElDropdownItem>\n                      <ElDropdownItem command=\"delete\">\n                        {{ $t('internal_user.department.delete') }}\n                      </ElDropdownItem>\n                    </template>\n                  </ElDropdownMenu>\n                </template>\n              </ElDropdown>\n            </template>\n          </div>\n        </template>\n      </ElTree>\n      <ul v-if=\"isSearch\" class=\"pb-4 w-full box-border\">\n        <li\n          v-for=\"item in searchData.department\"\n          :key=\"item.bind_value\"\n          class=\"w-full box-border flex items-center gap-2 cursor-pointer p-2 hover:bg-[#f5f7fa]\"\n          @click=\"handleNodeClick(item)\"\n        >\n          <SvgIcon name=\"department\" width=\"16px\" height=\"16px\" color=\"#57A1FF\" />\n          <div class=\"flex-1 w-0 text-[#333] text-sm truncate\" :title=\"item.name\">\n            <OpenData type=\"departmentName\" :openid=\"item.bind_value\" :text=\"item.name\" />\n          </div>\n        </li>\n        <li\n          v-for=\"item in searchData.member\"\n          :key=\"item.did\"\n          class=\"w-full box-border flex items-center gap-2 cursor-pointer p-2 hover:bg-[#f5f7fa]\"\n          @click=\"handleNodeClick(item)\"\n        >\n          <SvgIcon name=\"member\" width=\"16px\" height=\"16px\" />\n          <div class=\"flex-1 w-0 text-[#333] text-sm truncate\" :title=\"isDingtalkSync ? item.name : item.nickname\">\n            <OpenData type=\"userName\" :openid=\"item.bind_value\" :text=\"isDingtalkSync ? item.name : item.nickname\" />\n          </div>\n        </li>\n      </ul>\n    </div>\n    <div v-if=\"isSsoSync\" class=\"flex-none h-11 flex items-center gap-2 px-4 border-t\">\n      <div class=\"flex-1 flex items-center gap-1\">\n        <img :src=\"$getRealPath({ url: `/images/sso/${isWecomSync ? 'wecom' : 'dingtalk'}.png` })\" class=\"size-4\" />\n        <span class=\"text-sm text-[#182B50]\">\n          {{ isWecomSync ? $t('sso.wecom.sync_tip') : $t('sso.dingtalk.sync_tip') }}\n        </span>\n      </div>\n      <el-link\n        class=\"px-1 cursor-pointer\"\n        :href=\"\n          isWecomSync\n            ? 'https://work.weixin.qq.com/login'\n            : 'https://oa.dingtalk.com/index.htm#/microApp/microAppListNew'\n        \"\n        target=\"_blank\"\n        :underline=\"false\"\n      >\n        <svg-icon name=\"setting\" width=\"16px\" color=\"rgba(24, 43, 80, 0.3)\" />\n      </el-link>\n    </div>\n    <DepartmentAddDialog ref=\"departmentAddRef\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { MoreFilled, Plus, Refresh, Search } from '@element-plus/icons-vue'\nimport { computed, onMounted, onUnmounted, reactive, ref } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport DepartmentAddDialog from './department-add-dialog.vue'\n\nimport { departmentApi } from '@/api/modules/department'\nimport { INTERNAL_USER_STATUS_ALL, userApi } from '@/api/modules/user'\n\nimport { ENTERPRISE_SYNC_FROM } from '@/constants/enterprise'\nimport type { EnterpriseSyncFrom } from '@/constants/enterprise'\nimport { wecomApi } from '@/api/modules/wecom'\nimport dingtalkApi from '@/api/modules/dingtalk'\n\nconst props = withDefaults(\n  defineProps<{\n    syncFrom: EnterpriseSyncFrom\n  }>(),\n  {\n    syncFrom: ENTERPRISE_SYNC_FROM.DEFAULT,\n  }\n)\n\nconst emit = defineEmits<{\n  (e: 'nodeClick', result: { data: any }): void\n}>()\n\nconst treeRef = ref()\nconst filterForm = reactive({\n  keyword: '',\n})\n\nconst departmentAddRef = ref()\nconst treeData = ref([])\n\nconst searchData = reactive({\n  department: [],\n  member: [],\n})\nconst loading = ref(false)\nconst rootData = ref({})\n\nconst isSearch = computed(() => !!filterForm.keyword)\nconst isSsoSync = computed(() => props.syncFrom !== ENTERPRISE_SYNC_FROM.DEFAULT)\nconst isWecomSync = computed(() => props.syncFrom === ENTERPRISE_SYNC_FROM.WECOM)\nconst isDingtalkSync = computed(() => props.syncFrom === ENTERPRISE_SYNC_FROM.DINGTALK)\n\nconst organization = reactive({\n  syncing: false,\n  progress: 0,\n})\n\nconst refresh = async () => {\n  searchData.member = []\n  searchData.department = []\n  // 搜索部门、成员\n  if (isSearch.value) {\n    if (isSsoSync.value) {\n      if (isWecomSync.value) {\n        const res = await wecomApi.contact_search({ keyword: filterForm.keyword })\n        const result = res.data.query_result\n        if (result.party?.department_id?.length) {\n          searchData.department = result.party.department_id.map(item => {\n            const node = treeRef.value.getNode(item)\n            if (node) return node.data\n\n            return {\n              bind_value: item,\n              name: item,\n            }\n          })\n        }\n        if (result.user?.userid?.length) {\n          searchData.member = result.user.userid.map(item => {\n            return {\n              bind_value: item,\n              nickname: item,\n            }\n          })\n        }\n        return\n      }\n      if (isDingtalkSync.value) {\n        const list = await dingtalkApi.contact_search({ keyword: filterForm.keyword })\n        searchData.member = list.map(item => {\n          return {\n            ...item,\n            nickname: item.bind_value,\n          }\n        })\n        treeRef.value.filter(filterForm.keyword)\n        return\n      }\n    }\n    treeRef.value.filter(filterForm.keyword)\n    return fetchDepartmentList()\n  }\n  return fetchDepartmentTree()\n}\n// 获取筛选的成员\nconst fetchDepartmentList = async () => {\n  loading.value = true\n  const { list = [] } = await userApi\n    .fetch_internal_user({\n      from: props.syncFrom,\n      status: INTERNAL_USER_STATUS_ALL,\n      keyword: filterForm.keyword,\n      offset: 0,\n      limit: 10000,\n    })\n    .finally(() => {\n      loading.value = false\n    })\n  searchData.member = list.map((item = {}) => {\n    item.name = rootData.value.name\n    return item\n  })\n}\nconst fetchDepartmentTree = async () => {\n  loading.value = true\n  treeData.value = await departmentApi.fetch_department_tree({ from: props.syncFrom }).finally(() => {\n    loading.value = false\n  })\n  rootData.value = treeData.value[0]\n}\nconst handleCommand = async (command: string, data: any, index: number) => {\n  const parentNode = treeRef.value.getNode(data.bind_value) || {}\n  const parentData = parentNode.data || {}\n  const parentChildren = parentData.children || []\n  const prevData = parentChildren[index - 1] || {}\n  const nextData = parentChildren[index + 1] || {}\n  switch (command) {\n    case 'add_children':\n      departmentAddRef.value.open({\n        parentDid: data.did,\n        parentChildren: data.children,\n        success: refresh,\n      })\n      break\n    case 'update_name':\n      departmentAddRef.value.open({\n        data,\n        success: ({ data: newData = {} } = {}) => {\n          data.name = data.label = newData.name\n        },\n      })\n      break\n    case 'move_up':\n      loading.value = true\n      await Promise.all([\n        departmentApi.save({ did: data.did, name: data.name, pdid: data.pdid, sort: prevData.sort }),\n        departmentApi.save({ did: prevData.did, name: prevData.name, pdid: prevData.pdid, sort: data.sort }),\n      ]).finally(() => {\n        loading.value = false\n      })\n      ElMessage.success(window.$t('action_save_success'))\n      refresh()\n      break\n    case 'move_down':\n      loading.value = true\n      await Promise.all([\n        departmentApi.save({ did: data.did, name: data.name, pdid: data.pdid, sort: nextData.sort }),\n        departmentApi.save({ did: nextData.did, name: nextData.name, pdid: nextData.pdid, sort: data.sort }),\n      ]).finally(() => {\n        loading.value = false\n      })\n      ElMessage.success(window.$t('action_save_success'))\n      refresh()\n      break\n    case 'delete':\n      await ElMessageBox.confirm(window.$t('internal_user.department.delete_confirm'), window.$t('tip'))\n      loading.value = true\n      await departmentApi.delete(data.did).finally(() => {\n        loading.value = false\n      })\n      ElMessage.success(window.$t('action_delete_success'))\n      refresh()\n      break\n  }\n}\n\nconst defaultExpandedKeys = ref([0])\nconst handleNodeExpand = (data: any, node: any, comp: any) => {\n  defaultExpandedKeys.value.push(data.did)\n}\nconst handleNodeCollapse = (data: any, node: any, comp: any) => {\n  defaultExpandedKeys.value = defaultExpandedKeys.value.filter(key => key !== data.did)\n}\nconst filterNode = (value: string, data: any) => {\n  if (!value) return true\n  return data.name.includes(value) || data.bind_value.includes(value)\n}\nconst handleNodeClick = (data: any) => {\n  emit('nodeClick', { data })\n}\n\nlet timer: NodeJS.Timeout | null = null\nconst handleClearTimeout = () => {\n  if (timer) {\n    clearTimeout(timer)\n    timer = null\n  }\n}\n\n// 同步进度\nconst loadSyncProgress = (isInited = false) => {\n  handleClearTimeout()\n  departmentApi\n    .sync_progress(props.syncFrom)\n    .then(async ({ data: { progress = 1, status = 'running', message = '' } }: any = {}) => {\n      if (isInited) {\n        if (status === 'running') {\n          organization.syncing = true\n          organization.progress = Number(progress)\n          timer = setTimeout(() => {\n            loadSyncProgress()\n          }, 5000)\n        }\n      } else if (status === 'completed') {\n        ElMessage.success(message)\n        organization.syncing = false\n        organization.progress = 0\n        await fetchDepartmentTree()\n        handleNodeClick(treeData.value[0])\n      } else if (status === 'running') {\n        organization.progress = Number(progress)\n        timer = setTimeout(() => {\n          loadSyncProgress()\n        }, 5000)\n      } else if (status === 'failed') {\n        organization.progress = Number(progress)\n        ElMessage.error(window.$t('action_sync_failed'))\n      }\n    })\n}\nconst handleSyncDepartment = async () => {\n  await departmentApi.sync(props.syncFrom)\n  ElMessage.success(window.$t('action_sync_start'))\n  organization.syncing = true\n  loadSyncProgress()\n}\n\nonMounted(() => {\n  if (props.syncFrom !== ENTERPRISE_SYNC_FROM.DEFAULT) {\n    // 进入页面先查询同步进度，如果是在同步过程中要展示同步进度\n    loadSyncProgress(true)\n  }\n  fetchDepartmentTree()\n})\n\nonUnmounted(() => {\n  handleClearTimeout()\n})\n\ndefineExpose({\n  refresh,\n})\n</script>\n\n<style scoped>\n::v-deep(.hidden-empty-block .el-tree__empty-block) {\n  display: none;\n}\n\n.demo-progress .el-progress--line {\n  width: 100px;\n}\n.demo-progress ::v-deep(.el-progress__text) {\n  min-width: 36px;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/user/components/group-add-dialog.vue",
    "content": "<template>\n\t<ElDialog v-model=\"visible\" :title=\"$t(editable ? 'action_edit' : 'action_create')\" :close-on-click-modal=\"false\"\n\t\twidth=\"600px\" destroy-on-close append-to-body @close=\"close\">\n\t\t<ElForm ref=\"formRef\" :model=\"formData\" label-position=\"top\">\n\t\t\t<ElFormItem class=\"is-required\" :label=\"$t('name')\" prop=\"name\"\n\t\t\t\t:rules=\"generateInputRules({ message: 'form_input_placeholder' })\">\n\t\t\t\t<ElInput v-model=\"formData.name\" size=\"large\" maxlength=\"20\" show-word-limit\n\t\t\t\t\t:placeholder=\"$t('form_input_placeholder')\" />\n\t\t\t</ElFormItem>\n\t\t</ElForm>\n\t\t<template #footer>\n\t\t\t<div class=\"py-4 flex items-center justify-center\">\n\t\t\t\t<ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n\t\t\t\t\t{{ $t('action_cancel') }}\n\t\t\t\t</ElButton>\n\t\t\t\t<ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"handleSave\">\n\t\t\t\t\t{{ $t('action_confirm') }}\n\t\t\t\t</ElButton>\n\t\t\t</div>\n\t\t</template>\n\t</ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref } from 'vue';\nimport { generateInputRules } from '@/utils/form-rule';\nimport { groupApi } from '@/api/modules/group';\n\nimport { GROUP_TYPE } from '@/constants/group';\n\nconst emits = defineEmits<{\n\t(e: 'success'): void\n}>()\n\nconst formRef = ref()\nconst visible = ref(false)\nconst editable = ref(false)\nconst formData = reactive({\n  name: '',\n})\nconst originData = ref({})\nconst submitting = ref(false)\n\nlet successCallback = null\nconst open = ({\n\tdata = {},\n\tsuccess = null\n} = {}) => {\n\treset()\n\tsuccessCallback = success\n\teditable.value = !!data.group_id\n\tformData.name = data.group_name || ''\n\toriginData.value = data\n\tvisible.value = true\n}\nconst close = () => {\n  visible.value = false\n}\nconst reset = () => {\n\tformData.name = ''\n}\nconst handleSave = async () => {\n\tconst valid = await formRef.value.validate()\n\tif (!valid) return\n\tconst data = {\n\t\tgroup_id: originData.value.group_id,\n\t\tgroup_type: GROUP_TYPE.INTERNAL_USER,\n\t\tgroup_name: formData.name,\n\t\tsort: +originData.value.sort || 0,\n\t}\n\tsubmitting.value = true\n\tawait groupApi.single_save(data).finally(() => {\n\t\tsubmitting.value = false\n\t})\n\tif (typeof successCallback === 'function') successCallback({ data })\n\temits('success')\n\tElMessage.success(window.$t('action_save_success'))\n\tclose()\n}\n\ndefineExpose({\n  open,\n  close,\n  reset,\n})\n</script>\n\n<style scoped>\n</style>\n"
  },
  {
    "path": "web/console/src/views/user/components/user-add-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t(editable ? 'action_edit' : 'action_add')\"\n    :close-on-click-modal=\"false\"\n    width=\"600px\"\n    destroy-on-close\n    append-to-body\n    @close=\"close\"\n  >\n    <ElForm ref=\"form_ref\" :model=\"form\" label-position=\"top\">\n      <h1 class=\"text-sm text-[#1D1E1F]\">\n        {{ $t('user_info') }}\n      </h1>\n      <!-- :rules=\"generateInputRules({ message: 'form_upload_placeholder' })\" -->\n      <ElFormItem class=\"mt-5\" prop=\"avatar\">\n        <template #label>\n          <span class=\"text-[#9A9A9A]\">{{ $t('avatar') }}</span>\n        </template>\n        <UploadImage v-model=\"form.avatar\" />\n      </ElFormItem>\n      <ElFormItem\n        :label=\"$t('user')\"\n        prop=\"nickname\"\n        :rules=\"generateInputRules({ message: 'form_upload_placeholder' })\"\n      >\n        <ElInput\n          v-model=\"form.nickname\"\n          size=\"large\"\n          maxlength=\"20\"\n          show-word-limit\n          :placeholder=\"$t('form_input_placeholder')\"\n        />\n      </ElFormItem>\n      <!-- <ElFormItem\n        :label=\"$t('login_password')\"\n        prop=\"password\"\n        :rules=\"\n          !form.password.length\n            ? []\n            : [\n                ...generateInputRules({ message: 'login.password_placeholder', validator: ['password'] }),\n                {\n                  min: 8,\n                  max: 20,\n                  message: $t('login.password_length'),\n                  trigger: 'blur',\n                },\n              ]\n        \"\n      >\n        <ElInput\n          v-model=\"form.password\"\n          size=\"large\"\n          :placeholder=\"$t('empty_to_not_change')\"\n          clearable\n          @blur=\"form_ref.validateField('password')\"\n        />\n      </ElFormItem> -->\n      <ElFormItem\n        :label=\"$t('subscription.title')\"\n        prop=\"group_id\"\n        :rules=\"[\n          {\n            validator: (rule, value, callback) => {\n              if (!value) return callback(new Error($t('form_select_placeholder')))\n              callback()\n            },\n            trigger: 'blur',\n          },\n        ]\"\n      >\n        <ElSelect v-model=\"form.group_id\" size=\"large\" :placeholder=\"$t('form_input_placeholder')\">\n          <ElOption v-for=\"item in subscription_options\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\" />\n        </ElSelect>\n      </ElFormItem>\n      <ElFormItem :label=\"$t('subscription.end_at')\" prop=\"expired_time\" :rules=\"[]\">\n        <ElDatePicker\n          v-model=\"form.expired_time\"\n          format=\"YYYY-MM-DD HH:mm\"\n          type=\"datetime\"\n          value-format=\"YYYY-MM-DD HH:mm\"\n          size=\"large\"\n          :placeholder=\"$t('permanent_effect')\"\n        />\n      </ElFormItem>\n      <h1 class=\"text-sm text-[#1D1E1F] mt-6\">\n        {{ $t('bind_account') }}\n      </h1>\n      <ul class=\"mb-4\">\n        <li class=\"flex items-center gap-2 mt-5 text-sm text-[#1D1E1F]\">\n          <SvgIcon class=\"flex-none\" name=\"mobile-circle\" />\n          <div class=\"flex-none w-[88px]\">\n            {{ $t('mobile_v2') }}\n          </div>\n          <div class=\"text-[#9A9A9A]\">\n            {{ origin_data.mobile || $t('not_bound') }}\n          </div>\n        </li>\n        <li class=\"flex items-center gap-2 mt-5 text-sm text-[#1D1E1F]\">\n          <SvgIcon class=\"flex-none\" name=\"email-circle\" />\n          <div class=\"flex-none w-[88px]\">\n            {{ $t('email') }}\n          </div>\n          <div class=\"text-[#9A9A9A]\">\n            {{ origin_data.email || $t('not_bound') }}\n          </div>\n        </li>\n        <li v-if=\"false\" class=\"flex items-center gap-2 mt-5 text-sm text-[#1D1E1F]\">\n          <SvgIcon class=\"flex-none\" name=\"wechat-circle\" />\n          <div class=\"flex-none w-[88px]\">\n            {{ $t('open_id') }}\n          </div>\n          <div class=\"text-[#9A9A9A]\">\n            {{ origin_data.open_id || $t('not_bound') }}\n          </div>\n        </li>\n        <li v-if=\"false\" class=\"flex items-center gap-2 mt-5 text-sm text-[#1D1E1F]\">\n          <SvgIcon class=\"flex-none\" name=\"google\" />\n          <div class=\"flex-none w-[88px]\">\n            {{ $t('google_account') }}\n          </div>\n          <div class=\"text-[#9A9A9A]\">\n            {{ origin_data.google_account || $t('not_bound') }}\n          </div>\n        </li>\n      </ul>\n    </ElForm>\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-center\">\n        <ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"handleSave\">\n          {{ $t('action_save') }}\n        </ElButton>\n        <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref } from 'vue'\nimport UploadImage from '@/components/Upload/image.vue'\n\nimport { getTimeStamp } from '@/utils/moment'\nimport { generateInputRules } from '@/utils/form-rule'\nimport { useUserStore } from '@/stores'\n\nconst emits = defineEmits<{\n  (e: 'success'): void\n}>()\n\nconst user_store = useUserStore()\n\nconst form_ref = ref()\nconst visible = ref(false)\nconst editable = ref(false)\nconst form = reactive({\n  avatar: '',\n  nickname: '',\n  password: '',\n  group_id: 0,\n  expired_time: '',\n})\nconst origin_data = ref({})\nconst subscription_options = ref([])\nconst submitting = ref(false)\n\nconst open = ({ data = {}, subscription_options: _subscription_options = [] } = {}) => {\n  form.avatar = data.avatar || ''\n  form.nickname = data.nickname || ''\n  form.password = data.password || ''\n  form.group_id = data.group_id || (_subscription_options[0] || {}).value || 0\n  form.expired_time = data.expired_time || ''\n  editable.value = !!data.user_id\n  origin_data.value = data\n  subscription_options.value = _subscription_options.filter(item => item.value !== 0)\n  if (!_subscription_options.find(item => item.value === form.group_id)) form.group_id = ''\n  visible.value = true\n}\nconst close = () => {\n  visible.value = false\n  reset()\n}\nconst reset = () => {\n  form.avatar = ''\n  form.nickname = ''\n  form.password = ''\n}\nconst handleSave = async () => {\n  const valid = await form_ref.value.validate()\n  if (!valid) return\n  submitting.value = true\n  await user_store\n    .save({\n      data: {\n        user_id: origin_data.value.user_id,\n        avatar: form.avatar,\n        nickname: form.nickname,\n        password: form.password,\n        group_id: form.group_id,\n        expired_time: (form.expired_time && getTimeStamp(form.expired_time)) || 0,\n      },\n    })\n    .finally(() => {\n      submitting.value = false\n    })\n  emits('success')\n  ElMessage.success(window.$t('action_save_success'))\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n  reset,\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/user/components/user-internal-add-dialog.vue",
    "content": "<script setup lang=\"ts\">\nimport { SemiSelect } from '@element-plus/icons-vue'\nimport DepartmentTreeSelect from './department-tree-select.vue'\n\nimport { reactive, ref, inject } from 'vue'\nimport { generateInputRules } from '@/utils/form-rule'\nimport {\n\tuserApi,\n} from '@/api/modules/user'\n\nconst emits = defineEmits<{\n\t(e: 'success'): void\n}>()\n\nconst organizationData = inject('organizationData') || ref({})\n\nconst formRef = ref()\nconst visible = ref(false)\nconst formData = reactive({\n\tusers: []\n})\nconst submitting = ref(false)\nconst allUserList = ref([])\n\nlet successCallback = null\nconst open = ({ success } = {}) => {\n\tfetchAllUser()\n\tformData.users = []\n\thandleAdd()\n\tsuccessCallback = success\n  visible.value = true\n}\nconst close = () => {\n  visible.value = false\n}\nconst fetchAllUser = async () => {\n\tconst { list = [] } = await userApi.fetch_internal_user({\n\t\toffset: 0,\n\t\tlimit: 10000\n\t})\n\tallUserList.value = list\n}\nconst handleAdd = () => {\n\tconst lastUser = formData.users[formData.users.length - 1] || {}\n\tformData.users.push({\n\t\tnickname: '',\n\t\tusername: '',\n\t\tpassword: lastUser.password || '',\n\t\tdid: lastUser.did || organizationData.value.did || 0,\n\t})\n}\nconst handleRemove = (index: number) => {\n\tformData.users.splice(index, 1)\n}\nconst checkSameMobile = (rule, value, callback) => {\n\tif (allUserList.value.some(item => item.username === value))\n\t\treturn callback(new Error(window.$t('internal_user.account.same_member_exists_tip')))\n\tconst field = rule.fullField || rule.field || ''\n\tlet index = Number(field.split('.')[1])\n\tconst sameIndexList = []\n\tformData.users.forEach((item, itemIndex) => {\n\t\tif (itemIndex !== index && item.username === value) sameIndexList.push(itemIndex + 1)\n\t})\n\tif (sameIndexList.length > 0) return callback(new Error(window.$t('internal_user.account.same_mobile_exists_tip', { index: sameIndexList.join('、') })))\n\tcallback()\n}\nconst handleConfirm = async () => {\n\tconst valid = await formRef.value.validate()\n\tif (!valid) return\n\tconst users = JSON.parse(JSON.stringify(formData.users)).map(item => {\n\t\titem.did = item.did || 0\n\t\treturn item\n\t})\n\tsubmitting.value = true\n\tconst { data: { failed = [] } = {} } = await userApi.batch_save_internal_user({\n\t\tusers,\n\t}).finally(() => {\n\t\tsubmitting.value = false\n\t})\n\tif (failed && failed.length) {\n\t\tconst registerList = failed.filter(item => item.existing_type == 1).map(item => {\n\t\t\tconst data = users.find(user => user.username === item.username) || {}\n\t\t\titem.did = data.did || 0\n\t\t\treturn item\n\t\t})\n\t\tawait ElMessageBox.confirm(\n\t\t\twindow.$t('internal_user.account.register_to_internal_confirm',\n\t\t\t\t{\n\t\t\t\t\tmobile: registerList.map(item => item.message).join('、')\n\t\t\t\t}),\n\t\t\twindow.$t('tip'))\n\t\t\t.then(() => {\n\t\t\t\treturn userApi.register_to_internal({\n\t\t\t\t\tuser_departments: registerList.map(item => ({\n\t\t\t\t\t\tdid: item.did,\n\t\t\t\t\t\tuser_id: item.user_id\n\t\t\t\t\t}))\n\t\t\t\t})\n\t\t\t})\n\t\t\t.catch(() => Promise.resolve())\n\t}\n\tif (typeof successCallback === 'function') successCallback()\n\temits('success')\n\tElMessage.success(window.$t('action_save_success'))\n\tclose()\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<template>\n\t<ElDialog v-model=\"visible\" :title=\"$t('action_add')\" :close-on-click-modal=\"false\" width=\"920px\" destroy-on-close\n\t\tappend-to-body @close=\"close\">\n\t\t<ElForm class=\"w-full\" ref=\"formRef\" :model=\"formData\" label-position=\"top\">\n\t\t\t<ElFormItem class=\"w-full\" v-for=\"(item, itemIndex) in formData.users\" :key=\"item.did\">\n\t\t\t\t<div class=\"w-full flex-center gap-4 relative\">\n\t\t\t\t\t<ElFormItem class=\"flex-1 w-0\" :label=\"$t('internal_user.account.name')\" :prop=\"`users.${itemIndex}.nickname`\"\n\t\t\t\t\t\t:rules=\"generateInputRules({ message: 'internal_user.account.name_placeholder' })\">\n\t\t\t\t\t\t<ElInput v-model=\"item.nickname\" size=\"large\" :placeholder=\"$t('internal_user.account.name_placeholder')\" />\n\t\t\t\t\t</ElFormItem>\n\t\t\t\t\t<ElFormItem class=\"flex-1 w-0\" :prop=\"`users.${itemIndex}.username`\" :rules=\"[\n\t\t\t\t\t\t\t...generateInputRules({ message: 'internal_user.account.mobile_placeholder', validator: ['text', 'mobile'] }),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalidator: checkSameMobile,\n\t\t\t\t\t\t\t\ttrigger: 'blur'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\">\n\t\t\t\t\t\t<template #label>\n\t\t\t\t\t\t\t<span class=\"text-[#1D1E1F]\">{{ $t('internal_user.account.mobile') }}</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<ElInput v-model=\"item.username\" size=\"large\" autocomplete=\"new-username\" name=\"prevent_autofill_username\"\n\t\t\t\t\t\t\t:placeholder=\"$t(`internal_user.account.mobile_placeholder`)\" clearable />\n\t\t\t\t\t</ElFormItem>\n\t\t\t\t\t<ElFormItem class=\"flex-1 w-0\" :label=\"$t('password')\" :prop=\"`users.${itemIndex}.password`\" :rules=\"[...generateInputRules({ message: 'internal_user.account.password_placeholder', validator: ['password'] }), {\n\t\t\t\t\t\tmin: 8,\n\t\t\t\t\t\tmax: 20,\n\t\t\t\t\t\tmessage: $t('login.password_length'),\n\t\t\t\t\t\ttrigger: 'blur'\n\t\t\t\t\t}]\">\n\t\t\t\t\t\t<ElInput v-model=\"item.password\" size=\"large\"\n\t\t\t\t\t\t\t:placeholder=\"$t('internal_user.account.password_placeholder')\" clearable\n\t\t\t\t\t\t\t@blur=\"formRef.validateField('password')\" />\n\t\t\t\t\t</ElFormItem>\n\t\t\t\t\t<ElFormItem v-if=\"false\" class=\"flex-1 w-0\" :label=\"$t('internal_user.account.department')\"\n\t\t\t\t\t\t:prop=\"`users.${itemIndex}.did`\">\n\t\t\t\t\t\t<DepartmentTreeSelect v-model=\"item.did\" />\n\t\t\t\t\t</ElFormItem>\n\t\t\t\t\t<ElButton v-if=\"formData.users.length > 1\" class=\"!size-4 translate-y-4\" type=\"danger\" circle size=\"small\"\n\t\t\t\t\t\t:icon=\"SemiSelect\" @click=\"handleRemove(itemIndex)\" />\n\t\t\t\t</div>\n\t\t\t</ElFormItem>\n\t\t</ElForm>\n\t\t<ElButton type=\"primary\" link @click=\"handleAdd\">\n\t\t\t+ {{ $t('internal_user.account.add') }}\n\t\t</ElButton>\n\t\t<template #footer>\n\t\t\t<div class=\"py-4 flex items-center justify-center\">\n\t\t\t\t<ElButton class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"submitting\" @click=\"handleConfirm\">\n\t\t\t\t\t{{ $t('action_confirm') }}\n\t\t\t\t</ElButton>\n\t\t\t\t<ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n\t\t\t\t\t{{ $t('action_cancel') }}\n\t\t\t\t</ElButton>\n\t\t\t</div>\n\t\t</template>\n\t</ElDialog>\n</template>\n\n<style scoped>\n</style>\n"
  },
  {
    "path": "web/console/src/views/user/components/user-internal-edit-drawer.vue",
    "content": "<script setup lang=\"ts\">\nimport { reactive, ref } from 'vue'\nimport UserStatus from './user-internal-status.vue'\nimport OpenData from '@/components/OpenData/index.vue'\n\nimport { generateInputRules } from '@/utils/form-rule'\nimport {\n  INTERNAL_USER_STATUS_UNDEFINED,\n  userApi,\n} from '@/api/modules/user'\n\nconst emits = defineEmits<{\n  (e: 'success'): void\n}>()\n\nconst formRef = ref()\nconst visible = ref(false)\nconst formData = reactive({\n  name: '',\n  nickname: '',\n  mobile: '',\n  department: [],\n  status: INTERNAL_USER_STATUS_UNDEFINED,\n})\nconst submitting = ref(false)\nconst allUserList = ref([])\nconst originalData = ref({})\n\nlet successCallback = null\nconst open = ({ data = {}, success } = {}) => {\n  const memberBindingInfo = (data.memberbindings || [])[0] || {}\n  formData.name = memberBindingInfo.name || ''\n  formData.nickname = data.nickname || ''\n  formData.mobile = data.mobile || ''\n  formData.department = data.departments || []\n  formData.status = +data.status || INTERNAL_USER_STATUS_UNDEFINED\n  originalData.value = data\n  successCallback = success\n  visible.value = true\n}\nconst close = () => {\n  visible.value = false\n}\nconst handleSave = async () => {\n  const valid = await formRef.value.validate()\n  if (!valid)\n    return\n  submitting.value = true\n  const { data: { failed = [] } = {} } = await userApi.update_internal_user({\n    user_id: originalData.value.user_id,\n    department: formData.department.map(item => item.value),\n    mobile: formData.mobile,\n    nickname: formData.nickname,\n    status: formData.status,\n  }).finally(() => {\n    submitting.value = false\n  })\n  if (failed && failed.length) {\n    const registerList = failed.filter(item => item.existing_type == 1).map((item) => {\n      const data = users.find(user => user.username === item.username) || {}\n      item.did = data.did || 0\n      return item\n    })\n    await ElMessageBox.confirm(\n      window.$t('internal_user.account.register_to_internal_confirm',\n        {\n          mobile: registerList.map(item => item.username).join('、'),\n        }),\n      window.$t('tip'))\n      .then(() => {\n        userApi.register_to_internal({\n          user_departments: registerList.map(item => ({\n            did: item.did,\n            user_id: item.user_id,\n          })),\n        })\n      })\n      .catch(() => Promise.resolve())\n  }\n  if (typeof successCallback === 'function')\n    successCallback()\n  emits('success')\n  ElMessage.success(window.$t('action_save_success'))\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<template>\n  <ElDrawer\n    v-model=\"visible\" :title=\"$t('internal_user.account.edit_member')\" :close-on-click-modal=\"false\"\n    size=\"700px\" destroy-on-close append-to-body @close=\"close\"\n  >\n    <ElForm ref=\"formRef\" class=\"w-full\" :model=\"formData\" label-position=\"top\">\n      <ElFormItem :label=\"$t('internal_user.account.name')\">\n        <ElInput\n          v-model=\"formData.name\" size=\"large\" disabled\n          :placeholder=\"$t('internal_user.account.name_placeholder')\"\n        />\n        <!-- 如果绑定了企微，后面需要使用opendata来显示名称 -->\n        <OpenData v-if=\"false\" type=\"userName\" :openid=\"formData.name\" :text=\"formData.name || 11\" />\n        <div class=\"text-[#999] text-sm mt-2\">\n          {{ $t('internal_user.account.name_disabled_tip') }}\n        </div>\n      </ElFormItem>\n      <ElFormItem\n        class=\"is-required\" :label=\"$t('internal_user.account.nickname')\" prop=\"nickname\"\n        :rules=\"generateInputRules({ message: 'internal_user.account.nickname_placeholder' })\"\n      >\n        <ElInput\n          v-model=\"formData.nickname\" size=\"large\"\n          :placeholder=\"$t('internal_user.account.nickname_placeholder')\"\n        />\n      </ElFormItem>\n\n      <ElFormItem\n        class=\"is-required\" :label=\"$t('internal_user.account.mobile')\" prop=\"mobile\" :rules=\"[\n          ...generateInputRules({ message: 'internal_user.account.mobile_placeholder', validator: ['text', 'mobile'] }),\n        ]\"\n      >\n        <ElInput\n          v-model=\"formData.mobile\" size=\"large\" autocomplete=\"new-mobile\"\n          :placeholder=\"$t(`internal_user.account.mobile_placeholder`)\"\n          :disabled=\"originalData.status !== INTERNAL_USER_STATUS_UNDEFINED\" clearable\n        />\n        <div class=\"text-[#999] text-sm mt-2\">\n          {{ $t('internal_user.account.mobile_disabled_tip') }}\n        </div>\n      </ElFormItem>\n      <ElFormItem :label=\"$t('internal_user.account.department')\" prop=\"department\">\n        <DeptMemberPicker v-model=\"formData.department\" type=\"department\" />\n      </ElFormItem>\n      <ElFormItem :label=\"$t('internal_user.account.status')\" prop=\"status\">\n        <UserStatus v-model=\"formData.status\" :user-data=\"originalData\" action-disabled size=\"large\" />\n      </ElFormItem>\n    </ElForm>\n    <template #footer>\n      <div class=\"pt-4 flex items-center justify-end border-t border-[#E5E5E5]\">\n        <ElButton size=\"large\" @click.stop=\"close\">\n          {{ $t('action_cancel') }}\n        </ElButton>\n        <ElButton size=\"large\" type=\"primary\" :loading=\"submitting\" @click=\"handleSave\">\n          {{ $t('action_save') }}\n        </ElButton>\n      </div>\n    </template>\n  </ElDrawer>\n</template>\n\n<style scoped>\n</style>\n"
  },
  {
    "path": "web/console/src/views/user/components/user-internal-status.vue",
    "content": "<script setup lang=\"ts\">\nimport { ArrowDown } from '@element-plus/icons-vue'\n\nimport { getCurrentInstance } from 'vue'\nimport type { InternalUserStatus } from '@/api/modules/user'\nimport {\n  INTERNAL_USER_STATUS_DISABLED,\n  INTERNAL_USER_STATUS_ENABLED,\n  INTERNAL_USER_STATUS_LABEL_MAP,\n  INTERNAL_USER_STATUS_UNDEFINED,\n  userApi,\n} from '@/api/modules/user'\n\nconst props = withDefaults(defineProps<{\n  modelValue: InternalUserStatus\n  actionDisabled?: boolean\n  userData?: any\n  buttonClass?: string\n  size?: 'small' | 'default' | 'large'\n}>(), {\n  modelValue: INTERNAL_USER_STATUS_UNDEFINED,\n  actionDisabled: false,\n  userData: () => ({}),\n  buttonClass: '',\n  size: 'default',\n})\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: InternalUserStatus): void\n  (e: 'change', result: { value: InternalUserStatus }): void\n}>()\n\nconst { proxy } = getCurrentInstance() as any\n\nconst TAG_TYPE_MAP = new Map<InternalUserStatus, string>([\n  [INTERNAL_USER_STATUS_UNDEFINED, 'info'],\n  [INTERNAL_USER_STATUS_ENABLED, 'success'],\n  [INTERNAL_USER_STATUS_DISABLED, 'danger'],\n])\n\nconst handleStatusChange = async (value: InternalUserStatus) => {\n  if (!props.actionDisabled) {\n    await userApi.update_user_status({ user_id: props.userData.user_id, status: value })\n    ElMessage.success(window.$t('action_save_success'))\n  }\n  emit('update:modelValue', value)\n  emit('change', { value })\n  proxy.$forceUpdate()\n}\n</script>\n\n<template>\n  <div class=\"flex items-center\">\n    <ElTag\n      :type=\"TAG_TYPE_MAP.get(modelValue)\"\n      :effect=\"modelValue === INTERNAL_USER_STATUS_UNDEFINED ? 'plain' : 'light'\" :size=\"size\"\n    >\n      {{ $t(INTERNAL_USER_STATUS_LABEL_MAP.get(modelValue) || '') }}\n    </ElTag>\n    <ElDropdown\n      v-if=\"[INTERNAL_USER_STATUS_ENABLED, INTERNAL_USER_STATUS_DISABLED].includes(modelValue)\" trigger=\"click\"\n      @command=\"handleStatusChange\"\n    >\n      <span>\n        <ElButton class=\"!px-2 ml-2\" :class=\"buttonClass\" :size=\"size === 'default' ? 'small' : 'default'\" :icon=\"ArrowDown\" />\n      </span>\n      <template #dropdown>\n        <ElDropdownMenu>\n          <ElDropdownItem\n            :command=\"modelValue === INTERNAL_USER_STATUS_ENABLED ? INTERNAL_USER_STATUS_DISABLED : INTERNAL_USER_STATUS_ENABLED\"\n          >\n            {{ $t(modelValue === INTERNAL_USER_STATUS_ENABLED ? 'internal_user.action.disabled'\n              : 'internal_user.action.enable') }}\n          </ElDropdownItem>\n        </ElDropdownMenu>\n      </template>\n    </ElDropdown>\n  </div>\n</template>\n"
  },
  {
    "path": "web/console/src/views/user/components/user-select-dialog.vue",
    "content": "<script setup lang=\"ts\">\nimport { Search } from '@element-plus/icons-vue'\n\nimport { computed, nextTick, reactive, ref } from 'vue'\nimport { useUserStore } from '@/stores/modules/user'\nimport {\n  USER_ROLE_ADMIN,\n  USER_ROLE_CREATOR,\n  userApi,\n} from '@/api/modules/user'\n\nconst emits = defineEmits<{\n  (e: 'success', result: { value: any[] }): void\n}>()\n\nconst user_store = useUserStore()\n\nconst tableRef = ref()\nconst visible = ref(false)\nconst loading = ref(false)\nconst filterForm = reactive({\n  keyword: '',\n  page: 1,\n  pageSize: 10,\n})\nconst tableData = ref([])\nconst tableTotal = ref(0)\nconst tabActiveName = ref('register')\nconst registerCheckedList = ref([])\nconst internalCheckedList = ref([])\n\nconst checkedList = computed(() => {\n  let list = [...registerCheckedList.value, ...internalCheckedList.value]\n  list = list.filter(item => ![USER_ROLE_ADMIN, USER_ROLE_CREATOR].includes(Number(item.role)))\n  return list\n})\n\nlet successCallback = null\nconst open = ({ value = [], success = null } = {}) => {\n  filterForm.keyword = ''\n  registerCheckedList.value = []\n  internalCheckedList.value = []\n  visible.value = true\n  tabActiveName.value = 'register'\n  refresh()\n  successCallback = success\n}\nconst close = () => {\n  visible.value = false\n}\nconst fetchUserList = async () => {\n  loading.value = true\n  const params = {\n    keyword: filterForm.keyword,\n    offset: (filterForm.page - 1) * filterForm.pageSize,\n    limit: filterForm.pageSize,\n  }\n  const { total = 0, list = [] } = await (tabActiveName.value === 'register' ? user_store.loadListData : userApi.fetch_internal_user)(\n    tabActiveName.value === 'register' ? { data: params } : params,\n  ).catch(() => {\n    loading.value = false\n  })\n  tableData.value = []\n  await nextTick()\n  tableData.value = [...list].map((item = {}) => {\n    return item\n  })\n  tableTotal.value = +total || 0\n  if (checkedList.value.length) {\n    await nextTick()\n    checkedList.value.forEach((item = {}) => {\n      const row = tableData.value.find((row: any) => row.user_id === item.user_id)\n      if (row)\n        tableRef.value.toggleRowSelection(row)\n    })\n  }\n  await nextTick()\n  tableData.value.forEach((item = {}) => {\n    const disabled = [USER_ROLE_ADMIN, USER_ROLE_CREATOR].includes(Number(item.role))\n    if (disabled && !checkedList.value.find((row: any) => row.user_id === item.user_id))\n      tableRef.value.toggleRowSelection(item)\n  })\n  loading.value = false\n}\nconst refresh = () => {\n  nextTick(() => {\n    filterForm.page = 1\n    return fetchUserList()\n  })\n}\nconst onPageSizeChange = (pageSize: number) => {\n  filterForm.pageSize = pageSize\n  refresh()\n}\nconst onPageChange = (page: number) => {\n  filterForm.page = page\n  fetchUserList()\n}\nconst onSelectionChange = (selection: any[]) => {\n  if (loading.value)\n    return\n  if (tabActiveName.value === 'register')\n    registerCheckedList.value = [...selection]\n\t else\n    internalCheckedList.value = [...selection]\n}\nconst selectable = (data: any = {}) => {\n  const disabled = [USER_ROLE_ADMIN, USER_ROLE_CREATOR].includes(Number(data.role))\n  return !disabled\n}\nconst onConfirm = () => {\n  const value = JSON.parse(JSON.stringify(checkedList.value))\n  if (typeof successCallback === 'function')\n    successCallback({ value })\n  emits('success', { value })\n  close()\n}\n\ndefineExpose({\n  open,\n  close,\n})\n</script>\n\n<template>\n  <ElDialog\n    v-model=\"visible\" :title=\"$t('action_select')\" :close-on-click-modal=\"false\" width=\"800px\" destroy-on-close\n    append-to-body align-center @close=\"close\"\n  >\n    <div class=\"w-full flex items-center justify-between\">\n      <ElTabs v-model=\"tabActiveName\" @tab-click=\"refresh\">\n        <ElTabPane :label=\"$t('register_user.title')\" name=\"register\" lazy />\n        <ElTabPane :label=\"$t('internal_user.title')\" name=\"internal\" lazy />\n      </ElTabs>\n      <ElInput\n        v-model=\"filterForm.keyword\" style=\"width: 220px\" size=\"default\" clearable :suffix-icon=\"Search\"\n        :placeholder=\"$t('module.operation_user_search_placeholder')\" @change=\"refresh\"\n      />\n    </div>\n    <TablePlus\n      ref=\"tableRef\" class=\"mt-5\" :data=\"tableData\" :total=\"tableTotal\" :page=\"filterForm.page\"\n      :limit=\"filterForm.pageSize\" style=\"width: 100%\" header-row-class-name=\"rounded overflow-hidden\"\n      header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\" :loading=\"loading\"\n      @page-size-change=\"onPageSizeChange\" @page-current-change=\"onPageChange\" @selection-change=\"onSelectionChange\"\n    >\n      <ElTableColumn type=\"selection\" width=\"40\" :selectable=\"selectable\" />\n      <ElTableColumn :label=\"$t('user')\" min-width=\"140\" prop=\"nickname\" show-overflow-tooltip />\n      <!-- <el-table-column :label=\"$t('account')\" min-width=\"140\" prop=\"username\" show-overflow-tooltip>\n\t\t\t\t<template #default=\"{ row }\">\n\t\t\t\t\t<span :class=\"{ 'text-[#9B9B9B]': !row.username }\">{{ row.username || '--' }}</span>\n\t\t\t\t</template>\n\t\t\t</el-table-column> -->\n      <ElTableColumn :label=\"$t('mobile')\" min-width=\"140\" prop=\"mobile\" show-overflow-tooltip>\n        <template #default=\"{ row }\">\n          <span :class=\"{ 'text-[#9B9B9B]': !row.mobile }\">{{ row.mobile || '--' }}</span>\n        </template>\n      </ElTableColumn>\n      <ElTableColumn :label=\"$t('email')\" min-width=\"140\" prop=\"email\" show-overflow-tooltip>\n        <template #default=\"{ row }\">\n          <span :class=\"{ 'text-[#9B9B9B]': !row.email }\">{{ row.email || '--' }}</span>\n        </template>\n      </ElTableColumn>\n      <ElTableColumn :label=\"$t('register_time')\" width=\"160\" prop=\"register_time\">\n        <template #default=\"{ row }\">\n          <span :class=\"{ 'text-[#9B9B9B]': !row.register_time }\">{{ (row.register_time || '').slice(0, 16) || '--'\n          }}</span>\n        </template>\n      </ElTableColumn>\n    </TablePlus>\n\n    <template #footer>\n      <div class=\"py-4 flex items-center justify-between\">\n        <div\n          class=\"text-sm text-[#768097] text-left\"\n          v-html=\"$t('selected_tip', { total: `<span class='text-[#3664EF]'>${checkedList.length}</span>` })\"\n        />\n        <div class=\"flex-center\">\n          <ElButton class=\"w-[96px] h-[36px] text-[#1D1E1F]\" type=\"info\" plain @click.stop=\"close\">\n            {{ $t('action_cancel') }}\n          </ElButton>\n          <ElButton\n            class=\"w-[96px] h-[36px]\" type=\"primary\" :loading=\"loading\" :disabled=\"!checkedList.length\"\n            @click=\"onConfirm\"\n          >\n            {{ $t('action_confirm') }}\n          </ElButton>\n        </div>\n      </div>\n    </template>\n  </ElDialog>\n</template>\n\n<style scoped>\n::v-deep(.el-tabs__content), ::v-deep(.el-tabs__nav-wrap:after) {\n\tdisplay: none;\n}\n::v-deep(.el-tabs__header) {\n\tmargin-bottom: 0 !important;\n}\n::v-deep(.el-tabs--top>.el-tabs__header .el-tabs__item:last-child) {\n\tpadding-left: 0;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/user/dialogue-record/index.vue",
    "content": "<script setup lang=\"ts\">\nimport DialogueRecordView from '@/components/DialogueRecord/index.vue'\n\nimport { computed, onMounted } from 'vue'\nimport { useRoute } from 'vue-router';\n\nconst route = useRoute()\n\nconst pageTitle = computed(() => {\n\treturn window.$t((route.meta || {}).title || 'dialogue_record')\n})\n\nonMounted(() => {\n})\n</script>\n\n<template>\n\t<Layout class=\"px-[60px] py-8\">\n\t\t<Header :title=\"pageTitle\" />\n\t\t<div class=\"mt-5\">\n\t\t\t<DialogueRecordView type=\"user\" :user_id=\"route.params.user_id\" />\n\t\t</div>\n\t</Layout>\n</template>\n\n\n<style scoped>\n</style>\n"
  },
  {
    "path": "web/console/src/views/user/internal/account.vue",
    "content": "<script setup lang=\"ts\">\nimport { ArrowDown, Search } from '@element-plus/icons-vue'\nimport { computed, onMounted, onUnmounted, reactive, ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport UserAddDialog from '../components/user-internal-add-dialog.vue'\nimport UserEditDrawer from '../components/user-internal-edit-drawer.vue'\nimport UserStatus from '../components/user-internal-status.vue'\nimport DialogueRecordDrawer from '@/components/DialogueRecord/drawer.vue'\n\nimport {\n  INTERNAL_USER_STATUS_ALL,\n  INTERNAL_USER_STATUS_DISABLED,\n  INTERNAL_USER_STATUS_ENABLED,\n  INTERNAL_USER_STATUS_LABEL_MAP,\n  INTERNAL_USER_STATUS_UNDEFINED,\n  userApi,\n} from '@/api/modules/user'\nimport { groupApi, Group } from '@/api/modules/group'\nimport { GROUP_TYPE } from '@/constants/group'\nimport { useEnterpriseStore, useUserStore } from '@/stores'\nimport { useEnv } from '@/hooks/useEnv'\n\nimport { ENTERPRISE_SYNC_FROM } from '@/constants/enterprise'\nimport type { EnterpriseSyncFrom } from '@/constants/enterprise'\n\nconst props = withDefaults(defineProps<{\n    syncFrom?: EnterpriseSyncFrom\n}>(), {\n    syncFrom: ENTERPRISE_SYNC_FROM.DEFAULT,\n})\n\nconst enterpriseStore = useEnterpriseStore()\nconst userStore = useUserStore()\nconst router = useRouter()\nconst { isWorkEnv } = useEnv()\n\nconst statusOptions = [\n  INTERNAL_USER_STATUS_ALL,\n  INTERNAL_USER_STATUS_UNDEFINED,\n  INTERNAL_USER_STATUS_ENABLED,\n  INTERNAL_USER_STATUS_DISABLED,\n].map(value => ({\n  value,\n  label: INTERNAL_USER_STATUS_LABEL_MAP.get(value),\n}))\nconst userAddRef = ref()\nconst userEditRef = ref()\nconst filterForm = reactive({\n  status: -1,\n  keyword: '',\n  page: 1,\n  pageSize: 10,\n})\nconst loading = ref(false)\nconst groupData = ref<Record<number, string>>({})\nconst tableData = ref([])\nconst tableTotal = ref(0)\n\nconst isSsoSync = computed(() => props.syncFrom !== ENTERPRISE_SYNC_FROM.DEFAULT)\n\nconst onStatusChange = (value: number) => {\n  filterForm.status = value\n  refresh()\n}\nconst refresh = () => {\n  filterForm.page = 1\n  fetchUserList()\n}\n\nconst fetchGroupData = async () => {\n  const list = await groupApi.list({ params: { group_type: GROUP_TYPE.INTERNAL_USER } })\n  list.forEach((item: Group) => {\n    groupData.value[item.group_id] = item.group_name\n  })\n}\n\nconst fetchUserList = async () => {\n  if (loading.value)\n    return\n  loading.value = true\n  const params = {\n    status: filterForm.status,\n    keyword: filterForm.keyword,\n    offset: (filterForm.page - 1) * filterForm.pageSize,\n    limit: filterForm.pageSize,\n    from: props.syncFrom,\n  }\n\n  if (params.status < 0)\n    delete params.status\n  const { total = 0, list = [] } = await userApi.fetch_internal_user(params).finally(() => {\n    loading.value = false\n  })\n  tableData.value = list.map((item) => {\n    item.deleting = false\n    item.group_names = (item.group_ids ?? [])\n      .reduce((names: string[], id: number) => {\n        const name = groupData.value[id]\n        if (name) names.push(name)\n        return names\n      }, [])\n      .join('、')\n    return item\n  })\n  tableTotal.value = +total || 0\n}\nconst handleAdd = () => {\n  userAddRef.value.open({\n    success: () => {\n      refresh()\n    },\n  })\n}\nconst handleEdit = (data) => {\n  userEditRef.value.open({\n    data,\n    success: () => {\n      fetchUserList()\n    },\n  })\n}\nconst onUserDelete = async (data) => {\n  await ElMessageBox.confirm(window.$t('module.operation_user_delete_confirm'))\n  data.deleting = true\n  await userApi.delete_user({ user_id: data.user_id }).finally(() => {\n    data.deleting = false\n  })\n  ElMessage.success(window.$t('action_delete_success'))\n  fetchUserList()\n}\nconst onPageSizeChange = (pageSize: number) => {\n  filterForm.pageSize = pageSize\n  refresh()\n}\nconst onPageChange = (page: number) => {\n  filterForm.page = page\n  fetchUserList()\n}\nconst dialogueRecordRef = ref()\nconst handleMoreCommand = (command, data = {}) => {\n  switch (command) {\n    case 'dialogue_record':\n      dialogueRecordRef.value.open({ type: 'user', relatedId: data.user_id })\n      break\n    case 'delete':\n      onUserDelete(data)\n      break\n  }\n}\n\nonMounted(async () => {\n  await fetchGroupData()\n  refresh()\n})\nonUnmounted(() => {\n})\n</script>\n\n<template>\n  <div\n    class=\"max-h-ful flex flex-col bg-white py-6 box-border overflow-auto px-8\"\n  >\n    <div class=\"flex items-center justify-between\">\n      <div class=\"flex items-center gap-3\">\n        <ElDropdown placement=\"bottom\" @command=\"onStatusChange\">\n          <div\n            class=\"!border-none !outline-none h-9 flex-center px-5 gap-1.5 rounded-2xl bg-[#F6F7F8] text-xs text-[#1D1E1F] cursor-pointer\"\n          >\n            {{ $t(statusOptions.find((item) => item.value === filterForm.status)?.label || 'internal_user.status.all')\n            }}\n            <ElIcon size=\"14\" color=\"#9EA5B6\">\n              <ArrowDown />\n            </ElIcon>\n          </div>\n          <template #dropdown>\n            <ElDropdownMenu>\n              <ElDropdownItem v-for=\"item in statusOptions\" :key=\"item.value\" :command=\"item.value\">\n                {{ $t(item.label) }}\n              </ElDropdownItem>\n            </ElDropdownMenu>\n          </template>\n        </ElDropdown>\n      </div>\n      <div class=\"flex-center gap-3\">\n        <ElInput\n          v-model=\"filterForm.keyword\" style=\"width: 268px\" size=\"large\" clearable\n          :suffix-icon=\"Search\" :placeholder=\"$t('internal_user.account.search_placeholder')\" @change=\"refresh\"\n        />\n        <ElButton v-if=\"!isSsoSync\" class=\"min-w-[100px]\" type=\"primary\" size=\"large\" @click=\"handleAdd\">\n          + {{ $t('action_add') }}\n        </ElButton>\n      </div>\n    </div>\n\n    <div class=\"flex-1 overflow-y-auto bg-white rounded-lg mt-4\">\n      <TablePlus\n        :data=\"tableData\" :total=\"tableTotal\" style=\"width: 100%\"\n        header-row-class-name=\"rounded overflow-hidden\" header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n        row-class-name=\"group\" :loading=\"loading\" @page-current-change=\"onPageChange\"\n        @page-size-change=\"onPageSizeChange\"\n      >\n        <ElTableColumn\n          :label=\"$t('internal_user.account.nickname')\" min-width=\"140\" prop=\"nickname\"\n          show-overflow-tooltip\n        />\n        <ElTableColumn :label=\"$t('internal_user.account.mobile')\" min-width=\"140\" prop=\"mobile\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <span :class=\"{ 'text-[#9B9B9B]': !row.mobile }\">{{ row.mobile || '--' }}</span>\n          </template>\n        </ElTableColumn>\n        <!-- <ElTableColumn v-if=\"!isOrganization\" :label=\"$t('internal_user.account.group')\" min-width=\"140\" prop=\"group\"\n\t\t\t\t\tshow-overflow-tooltip>\n\t\t\t\t\t<template #default=\"{ row }\">\n\t\t\t\t\t\t<span :class=\"{ 'text-[#9B9B9B]': !row.group }\">{{ row.group || '--' }}</span>\n\t\t\t\t\t</template>\n\t\t\t\t</ElTableColumn> -->\n        <ElTableColumn\n          :label=\"$t('internal_user.account.department')\" min-width=\"140\" prop=\"department\"\n          show-overflow-tooltip\n        >\n          <template #default=\"{ row }\">\n            <span>{{ row.dept_names || enterpriseStore.info.name || '--' }}</span>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('internal_user.group.title')\" min-width=\"140\" prop=\"group\" show-overflow-tooltip>\n          <template #default=\"{ row }\"> {{ row.group_names || '--' }} </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('internal_user.account.status')\" min-width=\"140\" prop=\"status\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <UserStatus v-model=\"row.status\" :user-data=\"row\" button-class=\"invisible group-hover:visible\" />\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('operation')\" width=\"120\" fixed=\"right\" align=\"right\">\n          <template #default=\"{ row }\">\n            <ElButton class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click=\"handleEdit(row)\">\n              {{ $t('action_edit') }}\n            </ElButton>\n            <!-- <ElButton class=\"text-[#5A6D9E]\" type=\"text\" @click=\"handleRecord(row)\">\n\t\t\t\t\t\t\t{{ $t('usage_record') }}\n\t\t\t\t\t\t</ElButton> -->\n            <ElDropdown v-if=\"!isWorkEnv\" placement=\"bottom\" @command=\"handleMoreCommand($event, row)\">\n              <div class=\"text-[#5A6D9E] h-8 flex-center ml-2 !outline-none !border-none\">\n                {{ $t('more') }}\n                <ElIcon size=\"14\" class=\"ml-1\">\n                  <ArrowDown />\n                </ElIcon>\n              </div>\n              <template #dropdown>\n                <ElDropdownMenu>\n                  <ElDropdownItem command=\"dialogue_record\">\n                    {{ $t('dialogue_record') }}\n                  </ElDropdownItem>\n                  <ElDropdownItem :disabled=\"row.user_id == userStore.info.user_id\" command=\"delete\">\n                    {{ $t('action_delete') }}\n                  </ElDropdownItem>\n                </ElDropdownMenu>\n              </template>\n            </ElDropdown>\n            <ElButton\n              v-else class=\"text-[#5A6D9E] !bg-transparent !w-[30px] text-left\" type=\"text\" :loading=\"row.deleting\"\n              :disabled=\"row.user_id == userStore.info.user_id\" @click=\"onUserDelete(row)\"\n            >\n              {{ row.user_id == userStore.info.user_id ? '--' : $t('action_delete') }}\n            </ElButton>\n          </template>\n        </ElTableColumn>\n      </TablePlus>\n    </div>\n\n    <UserAddDialog ref=\"userAddRef\" />\n    <UserEditDrawer ref=\"userEditRef\" />\n    <DialogueRecordDrawer ref=\"dialogueRecordRef\" />\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/user/internal/group.vue",
    "content": "<template>\n  <ElContainer class=\"bg-white h-full\">\n    <ElAside width=\"280px\" class=\"flex flex-col px-5 py-6 box-border border-r border-[#e5e5e5]\">\n      <div class=\"flex items-center gap-2\">\n        <ElInput\n          v-model=\"filterForm.groupKeyword\"\n          class=\"flex-1 h-[36px]\"\n          size=\"default\"\n          clearable\n          :prefix-icon=\"Search\"\n          :placeholder=\"$t('internal_user.group.search_placeholder')\"\n          @change=\"fetchGroupData\"\n        />\n      </div>\n      <ul v-loading=\"groupLoading\" class=\"flex-1 h-0 w-full box-border mt-4 overflow-auto\">\n        <li\n          v-for=\"(item, index) in groupData\"\n          :key=\"item.group_id\"\n          class=\"group w-full box-border flex items-center gap-2 cursor-pointer hover:bg-[#f5f7fa]\"\n          @click=\"handleGroupClick(item)\"\n        >\n          <div\n            class=\"flex-1 w-0 box-border text-sm truncate rounded-md py-2 px-4 hover:bg-[#F5F8FF]\"\n            :class=\"[filterForm.groupId === item.group_id ? 'text-[#3664EF]' : 'text-[#333]']\"\n            :title=\"item.group_name\"\n          >\n            {{ item.group_name || '--' }}\n          </div>\n          <ElDropdown @command=\"handleGroupCommand($event, item, index)\">\n            <span>\n              <ElIcon class=\"text-[#999] rotate-90 mr-2 cursor-pointer invisible group-hover:visible\">\n                <MoreFilled />\n              </ElIcon>\n            </span>\n            <template #dropdown>\n              <ElDropdownMenu>\n                <ElDropdownItem command=\"rename\">\n                  {{ $t('action_rename') }}\n                </ElDropdownItem>\n                <ElDropdownItem command=\"delete\">\n                  <span class=\"text-[#F56C6C]\">\n                    {{ $t('action_delete') }}\n                  </span>\n                </ElDropdownItem>\n              </ElDropdownMenu>\n            </template>\n          </ElDropdown>\n        </li>\n        <ElEmpty v-if=\"!groupData.length\" class=\"mt-10\" :description=\"$t('no_data')\" />\n      </ul>\n      <div class=\"w-full flex items-center gap-2 mt-4\">\n        <ElButton type=\"primary\" plain size=\"large\" class=\"mx-auto !border-none\" @click=\"handleGroupCommand('create')\">\n          +{{ $t('internal_user.group.create') }}\n        </ElButton>\n      </div>\n    </ElAside>\n    <ElMain>\n      <div class=\"h-[36px] flex items-center\">\n        <label\n          class=\"cursor-pointer\"\n          :class=\"[filterForm.activeTabIndex === 0 ? 'text-[#3664EF]' : 'text-[#333]']\"\n          @click=\"handleTabChange(0)\"\n        >\n          {{ $t('internal_user.group.member') }}\n        </label>\n        <ElDivider direction=\"vertical\" />\n        <label\n          class=\"cursor-pointer\"\n          :class=\"[filterForm.activeTabIndex === 1 ? 'text-[#3664EF]' : 'text-[#333]']\"\n          @click=\"handleTabChange(1)\"\n        >\n          {{ $t('internal_user.group.usable') }}\n        </label>\n      </div>\n      <div v-if=\"filterForm.activeTabIndex === 0\">\n        <div class=\"flex items-center justify-between h-[40px] gap-4\">\n          <h1 :title=\"activeGroupInfo.group_name\" class=\"truncate\">\n            {{ activeGroupInfo.group_name || '--' }}\n          </h1>\n          <div class=\"flex items-center gap-4\">\n            <ElInput\n              v-model=\"userFilterForm.keyword\"\n              style=\"width: 268px\"\n              size=\"large\"\n              clearable\n              :prefix-icon=\"Search\"\n              :placeholder=\"$t('internal_user.organization.all_search_placeholder')\"\n              @change=\"refresh\"\n            />\n            <DeptMemberPicker @confirm=\"handleUserAddConfirm\">\n              <template #trigger>\n                <ElButton class=\"min-w-[100px]\" type=\"primary\" size=\"large\"> + {{ $t('action_add') }} </ElButton>\n              </template>\n            </DeptMemberPicker>\n          </div>\n        </div>\n        <TablePlus\n          class=\"mt-4\"\n          :data=\"userTableData\"\n          :total=\"userTableTotal\"\n          style=\"width: 100%\"\n          header-row-class-name=\"rounded overflow-hidden\"\n          header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n          :loading=\"userLoading\"\n          max-height=\"calc(100vh - 360px)\"\n          @page-current-change=\"onUserPageChange\"\n          @page-size-change=\"onUserPageSizeChange\"\n        >\n          <ElTableColumn\n            :label=\"$t('internal_user.account.name')\"\n            min-width=\"140\"\n            prop=\"nickname\"\n            show-overflow-tooltip\n          >\n            <template #default=\"{ row }\">\n              <SvgIcon\n                class=\"inline-block mr-2\"\n                :name=\"row.resource_type === 'department' ? 'department' : 'member'\"\n                width=\"16px\"\n                height=\"16px\"\n                color=\"#999\"\n              />\n              {{ row.nickname || row.name || '--' }}\n            </template>\n          </ElTableColumn>\n          <ElTableColumn\n            :label=\"$t('internal_user.account.mobile')\"\n            min-width=\"140\"\n            prop=\"mobile\"\n            show-overflow-tooltip\n          >\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.mobile }\">{{ row.mobile || '--' }}</span>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn\n            :label=\"$t('internal_user.account.department')\"\n            min-width=\"140\"\n            prop=\"department\"\n            show-overflow-tooltip\n          >\n            <template #default=\"{ row }\">\n              <span>{{ row.dept_names || enterpriseStore.info.name || '--' }}</span>\n            </template>\n          </ElTableColumn>\n          <ElTableColumn :label=\"$t('operation')\" width=\"80\" fixed=\"right\" align=\"right\">\n            <template #default=\"{ row }\">\n              <ElButton\n                class=\"text-[#5A6D9E] !bg-transparent\"\n                type=\"text\"\n                :loading=\"row.deleting\"\n                @click=\"handleUserRemove(row)\"\n              >\n                {{ $t('action_remove') }}\n              </ElButton>\n            </template>\n          </ElTableColumn>\n        </TablePlus>\n      </div>\n      <div v-else-if=\"filterForm.activeTabIndex === 1\">\n        <div class=\"flex items-center gap-3 mt-2\">\n          <ElButton\n            v-for=\"item in availableBtns\"\n            :key=\"item.type\"\n            class=\"h-[36px] leading-[36px] px-3 text-sm rounded-md\"\n            :class=\"\n              filterForm.activeAvailableTabIndex === item.type\n                ? 'text-[#3664EF] bg-[#E9EFFF]'\n                : 'text-[#4F5052] bg-[#EEF0F4]'\n            \"\n            @click=\"handleAvailableTabChange(item.type)\"\n          >\n            {{ item.label }}\n          </ElButton>\n        </div>\n        <ResourcePicker\n          v-model=\"availableData\"\n          :group-type=\"filterForm.activeAvailableTabIndex\"\n          class=\"mt-4\"\n          @confirm=\"handleResourceAddConfirm\"\n          @remove=\"handleResourceRemove\"\n        />\n      </div>\n    </ElMain>\n\n    <GroupAddDialog ref=\"groupAddRef\" />\n  </ElContainer>\n</template>\n\n<script setup lang=\"ts\">\nimport { MoreFilled, Search } from '@element-plus/icons-vue'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport GroupAddDialog from '../components/group-add-dialog.vue'\nimport { groupApi } from '@/api/modules/group'\nimport { GROUP_TYPE, GroupType, ResourceType, RESOURCE_TYPE } from '@/constants/group'\nimport { useEnterpriseStore } from '@/stores'\nimport ResourcePicker from '@/components/ResourcePicker/index.vue'\n\nconst enterpriseStore = useEnterpriseStore()\nconst availableBtns = [\n  {\n    type: GROUP_TYPE.AGENT,\n    label: window.$t('module.agent'),\n  },\n  {\n    type: GROUP_TYPE.PROMPT,\n    label: window.$t('module.prompt'),\n  },\n  {\n    type: GROUP_TYPE.AI_LINK,\n    label: window.$t('module.ai_toolbox'),\n  },\n]\nconst groupAddRef = ref()\nconst filterForm = reactive<{\n  groupKeyword: string\n  groupId: number\n  activeTabIndex: number\n  activeAvailableTabIndex: GroupType\n}>({\n  groupKeyword: '',\n  groupId: 0,\n  activeTabIndex: 0,\n  activeAvailableTabIndex: GROUP_TYPE.AGENT,\n})\nconst groupData = ref([])\nconst groupLoading = ref(false)\n\nconst activeGroupInfo = computed(() => {\n  return groupData.value.find(item => item.group_id === filterForm.groupId) || {}\n})\n\nconst fetchGroupData = async () => {\n  groupLoading.value = true\n  const list = await groupApi.list({ params: { group_type: GROUP_TYPE.INTERNAL_USER } }).finally(() => {\n    groupLoading.value = false\n  })\n  groupData.value = list.filter(item => item.group_name && item.group_name.includes(filterForm.groupKeyword))\n  if (!filterForm.groupId) filterForm.groupId = (groupData.value[0] || {}).group_id || 0\n}\nconst handleGroupClick = (data = {}) => {\n  filterForm.groupId = data.group_id\n  refresh()\n}\nconst handleGroupCommand = async (command: string, data: any, index: number) => {\n  switch (command) {\n    case 'create':\n    case 'rename':\n      groupAddRef.value.open({\n        data,\n        success: () => {\n          fetchGroupData()\n        },\n      })\n      break\n    case 'delete':\n      await ElMessageBox.confirm(window.$t('group_delete_confirm'), window.$t('action_delete'))\n      await groupApi.delete({ data: { group_id: data.group_id } })\n      ElMessage.success(window.$t('action_delete_success'))\n      fetchGroupData()\n      break\n  }\n}\n\nconst handleTabChange = (index: number) => {\n  filterForm.activeTabIndex = index\n  refresh()\n}\nconst handleAvailableTabChange = (index: GroupType) => {\n  if (index === filterForm.activeAvailableTabIndex) return\n  filterForm.activeAvailableTabIndex = index\n  fetchResourceData()\n}\nconst refresh = () => {\n  if (filterForm.activeTabIndex === 0) {\n    userFilterForm.page = 1\n    fetchUserData()\n  }\n  if (filterForm.activeTabIndex === 1) {\n    fetchResourceData()\n  }\n}\n\nconst userFilterForm = reactive({\n  keyword: '',\n  page: 1,\n  pageSize: 10,\n})\nconst userTableData = ref([])\nconst userTableTotal = ref(0)\nconst userLoading = ref(false)\nconst fetchUserData = async () => {\n  userLoading.value = true\n  const { total = 0, list = [] } = await groupApi\n    .user_list({\n      group_id: filterForm.groupId,\n      keyword: userFilterForm.keyword,\n      offset: (userFilterForm.page - 1) * userFilterForm.pageSize,\n      limit: userFilterForm.pageSize,\n    })\n    .finally(() => {\n      userLoading.value = false\n    })\n  userTableTotal.value = total\n  userTableData.value = [...list]\n}\nconst onUserPageChange = (page: number) => {\n  userFilterForm.page = page\n  fetchUserData()\n}\nconst onUserPageSizeChange = (pageSize: number) => {\n  userFilterForm.pageSize = pageSize\n  refresh()\n}\nconst handleUserAddConfirm = async ({ value = [] } = {}) => {\n  if (!filterForm.groupId) return ElMessage.warning(window.$t('internal_user.group.create_tip'))\n  const department_ids = value.filter(item => +item.did).map(item => +item.did)\n  const user_ids = value.filter(item => +item.user_id).map(item => +item.user_id)\n  const data = {\n    group_id: filterForm.groupId,\n    department_ids,\n    user_ids,\n  }\n  await groupApi.batch_add_user(data)\n  ElMessage.success(window.$t('action_add_success'))\n  refresh()\n}\nconst handleUserRemove = async (data = {}) => {\n  await ElMessageBox.confirm(window.$t('internal_user.group.remove_user_confirm'), window.$t('tip'))\n  await groupApi.remove_user({\n    group_id: filterForm.groupId,\n    permission_ids: [data.permission_id],\n  })\n  ElMessage.success(window.$t('action_remove_success'))\n  fetchUserData()\n}\n\nconst availableData = ref([])\nconst resourceType = computed<ResourceType>(() => {\n  switch (filterForm.activeAvailableTabIndex) {\n    case GROUP_TYPE.AGENT:\n      return RESOURCE_TYPE.AGENT\n    case GROUP_TYPE.PROMPT:\n      return RESOURCE_TYPE.PROMPT\n    case GROUP_TYPE.AI_LINK:\n      return RESOURCE_TYPE.AI_LINK\n    default:\n      return RESOURCE_TYPE.AGENT\n  }\n})\n\nconst idName = computed(() => {\n  return resourceType.value === RESOURCE_TYPE.AGENT\n    ? 'agent_id'\n    : resourceType.value === RESOURCE_TYPE.PROMPT\n      ? 'prompt_id'\n      : 'id'\n})\n\nconst fetchResourceData = async () => {\n  const { list = [] } = await groupApi.resource_list({\n    id: filterForm.groupId,\n    params: {\n      offset: 0,\n      limit: 1000,\n      resource_type: resourceType.value,\n    },\n  })\n  availableData.value = list\n}\n\nconst handleResourceAddConfirm = async ({ value = [] } = {}) => {\n  if (!filterForm.groupId) return ElMessage.warning(window.$t('internal_user.group.create_tip'))\n  const resource_ids = value.filter(item => +item[idName.value]).map(item => +item[idName.value])\n  const data = {\n    id: filterForm.groupId,\n    request: {\n      resource_ids,\n      resource_type: resourceType.value,\n    },\n  }\n  await groupApi.batch_add_resource(data)\n  ElMessage.success(window.$t('action_add_success'))\n  refresh()\n}\n\nconst handleResourceRemove = ({ value = [] } = {}) => {\n  const resource_ids = value.filter(item => +item[idName.value]).map(item => +item[idName.value])\n  let confirmText = ''\n  switch (resourceType.value) {\n    case RESOURCE_TYPE.AGENT:\n      confirmText = window.$t('internal_user.group.remove_agent_confirm')\n      break\n    case RESOURCE_TYPE.PROMPT:\n      confirmText = window.$t('internal_user.group.remove_prompt_confirm')\n      break\n    case RESOURCE_TYPE.AI_LINK:\n      confirmText = window.$t('internal_user.group.remove_ai_toolkit_confirm')\n      break\n  }\n  ElMessageBox.confirm(confirmText, window.$t('tip'))\n    .then(async () => {\n      await groupApi.remove_resource({\n        id: filterForm.groupId,\n        request: {\n          resource_ids,\n          resource_type: resourceType.value,\n        },\n      })\n      ElMessage.success(window.$t('action_remove_success'))\n      fetchResourceData()\n    })\n    .catch(() => {})\n}\n\nonMounted(async () => {\n  await fetchGroupData()\n  refresh()\n})\n</script>\n"
  },
  {
    "path": "web/console/src/views/user/internal/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { defineAsyncComponent, onMounted, onUnmounted, ref } from 'vue'\nimport { useRoute } from 'vue-router'\n\nconst AccountView = defineAsyncComponent(() => import('./account.vue'))\nconst GroupView = defineAsyncComponent(() => import('./group.vue'))\nconst OrganizationView = defineAsyncComponent(() => import('./organization.vue'))\n\nconst route = useRoute()\nconst tabActiveName = ref('account')\n\nonMounted(async () => {\n})\nonUnmounted(() => {\n})\n</script>\n\n<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t(route.meta.title)\" />\n    <ElTabs v-model=\"tabActiveName\" class=\"mt-2 flex-1 h-0\">\n      <ElTabPane :label=\"$t('internal_user.account.title')\" name=\"account\" lazy>\n        <AccountView v-if=\"tabActiveName === 'account'\" />\n      </ElTabPane>\n      <ElTabPane :label=\"$t('internal_user.group.title')\" name=\"group\" lazy>\n        <GroupView v-if=\"tabActiveName === 'group'\" />\n      </ElTabPane>\n      <ElTabPane :label=\"$t('internal_user.organization.title')\" name=\"organization\" lazy>\n        <OrganizationView v-if=\"tabActiveName === 'organization'\" />\n      </ElTabPane>\n    </ElTabs>\n  </Layout>\n</template>\n\n<style scoped>\n::v-deep(.el-tab-pane) {\n\theight: 100%;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/user/internal/member.vue",
    "content": "<script setup lang=\"ts\">\nimport { ArrowDown, Search } from '@element-plus/icons-vue'\nimport { computed, nextTick, onMounted, onUnmounted, reactive, ref } from 'vue'\nimport UserAddDialog from '../components/user-internal-add-dialog.vue'\nimport UserEditDrawer from '../components/user-internal-edit-drawer.vue'\nimport UserStatus from '../components/user-internal-status.vue'\nimport OpenData from '@/components/OpenData/index.vue'\n\nimport {\n  INTERNAL_USER_STATUS_ALL,\n  INTERNAL_USER_STATUS_DISABLED,\n  INTERNAL_USER_STATUS_ENABLED,\n  INTERNAL_USER_STATUS_LABEL_MAP,\n  INTERNAL_USER_STATUS_UNDEFINED,\n  userApi,\n} from '@/api/modules/user'\nimport departmentApi from '@/api/modules/department'\nimport { useEnterpriseStore, useUserStore } from '@/stores'\n\nimport { ENTERPRISE_SYNC_FROM } from '@/constants/enterprise'\nimport type { EnterpriseSyncFrom } from '@/constants/enterprise'\n\ninterface Member {\n  id: number\n  mid: number\n  eid: number\n  name: string\n  bind_value: string\n  status: number\n  from: number\n  created_time: number\n  updated_time: number\n  user_id: number\n  username: string\n  nickname: string\n  avatar: string\n  mobile: string\n  email: string\n  role: number\n  user_status: number\n  department_relations: {\n    id: number\n    did: number\n    eid: number\n    bid: number\n    from: number\n    created_time: number\n    updated_time: number\n  }[]\n}\n\ninterface User {\n  user_id: number\n  username: string\n  nickname: string\n  avatar: string\n  mobile: string\n  email: string\n  eid: number\n  role: number\n  group_id: number\n  status: number\n  expired_time: number\n  last_login_time: number\n  access_token: string\n  related_id: number\n  type: number\n  add_admin_time: number\n  openid: string\n  unionid: string\n  departments: null\n  memberbindings: {\n    id: number\n    mid: number\n    eid: number\n    name: string\n    bind_value: string\n    status: number\n    from: number\n    created_time: number\n    updated_time: number\n  }[]\n  group_ids: number[] | null\n  created_time: number\n  updated_time: number\n  hide?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n  syncFrom?: EnterpriseSyncFrom\n  department?: any\n  filterParams?: {\n    keyword?: string\n    did?: number\n  }\n}>(), {\n  syncFrom: ENTERPRISE_SYNC_FROM.DEFAULT,\n  department: () => ({\n    name: '',\n    did: 0,\n  }),\n  filterParams: () => ({}),\n})\nconst enterpriseStore = useEnterpriseStore()\nconst userStore = useUserStore()\n\nconst statusOptions = [\n  INTERNAL_USER_STATUS_ALL,\n  INTERNAL_USER_STATUS_UNDEFINED,\n  INTERNAL_USER_STATUS_ENABLED,\n  INTERNAL_USER_STATUS_DISABLED,\n].map(value => ({\n  value,\n  label: INTERNAL_USER_STATUS_LABEL_MAP.get(value),\n}))\nconst userAddRef = ref()\nconst userEditRef = ref()\nconst relateRef = ref()\nconst relateTooltipRef = ref()\n\nconst filterForm = reactive({\n  status: INTERNAL_USER_STATUS_ALL,\n  keyword: '',\n  page: 1,\n  pageSize: 10,\n})\nconst relate = reactive({\n  list: [] as User[],\n  keyword: '',\n})\n\nconst loading = ref(false)\nconst tableData = ref<Member[]>([])\nconst tableTotal = ref(0)\n\nconst isSsoSync = computed(() => props.syncFrom !== ENTERPRISE_SYNC_FROM.DEFAULT)\nconst isDingtalkSync = computed(() => props.syncFrom === ENTERPRISE_SYNC_FROM.DINGTALK)\n\nconst fetchUserList = async () => {\n  if (loading.value)\n    return\n  loading.value = true\n  const params = {\n    status: INTERNAL_USER_STATUS_ALL,\n    offset: (filterForm.page - 1) * filterForm.pageSize,\n    limit: filterForm.pageSize,\n    from: props.syncFrom,\n    user_status: filterForm.status,\n    keyword: '',\n    did: props.department.did,\n  }\n  if (props.filterParams.keyword)\n    params.keyword = props.filterParams.keyword\n\n  const res = await userApi.organization(params).finally(() => {\n    loading.value = false\n  })\n  tableData.value = (res.data.data || []).map((item) => {\n    item.deleting = false\n    item.dept_names = (item.department_relations || []).map(item => item.name).join(',')\n    item.dept_dids = (item.department_relations || []).map(item => item.bind_value).join(',')\n    return item\n  })\n  tableTotal.value = +res.data.total_count || 0\n}\n\nconst refresh = () => {\n  filterForm.page = 1\n  fetchUserList()\n}\n\nconst handleAdd = () => {\n  userAddRef.value.open({\n    success: () => {\n      refresh()\n    },\n  })\n}\nconst handleEdit = (data) => {\n  userEditRef.value.open({\n    data: {\n      ...data,\n      status: data.user_status,\n      nickname: props.syncFrom === ENTERPRISE_SYNC_FROM.DINGTALK ? data.name : data.nickname\n    },\n    success: () => {\n      fetchUserList()\n    },\n  })\n}\nconst handleUserDelete = async (data) => {\n  await ElMessageBox.confirm(window.$t('module.operation_user_delete_confirm'))\n  data.deleting = true\n\n  if (isSsoSync.value)\n  \tawait departmentApi.unbind_member({ user_id: data.user_id, from: Number(props.syncFrom) })\n  await userApi.delete_user({ user_id: data.user_id }).finally(() => {\n    data.deleting = false\n  })\n  ElMessage.success(window.$t('action_delete_success'))\n  fetchUserList()\n}\nconst onPageSizeChange = (pageSize: number) => {\n  filterForm.pageSize = pageSize\n  refresh()\n}\nconst onPageChange = (page: number) => {\n  filterForm.page = page\n  fetchUserList()\n}\n\nconst loadUserList = async () => {\n  const NO_BIND = 1\n  userApi.fetch_internal_user({ limit: 1000, not_bind: NO_BIND, from: props.syncFrom }).then((res) => {\n    relate.list = res.list\n  })\n}\nconst handleAccountSearch = () => {\n  const keyword = relate.keyword.trim()\n  if (keyword) {\n    relate.list.forEach((item) => {\n      item.hide = !item.nickname.includes(keyword)\n    })\n  }\n  else {\n    relate.list.forEach((item) => {\n      item.hide = false\n    })\n  }\n}\nlet _currentMember: any\nconst handleRelate = (e, row) => {\n  relate.keyword = ''\n  handleAccountSearch()\n  loadUserList()\n  _currentMember = row\n  relateRef.value = e.currentTarget\n  relateTooltipRef.value.onOpen()\n}\nconst handleBind = async (member: Member) => {\n  await ElMessageBox.confirm(window.$t('sso.bind_member_tip'))\n  await departmentApi.bind_member({ bid: _currentMember.id, user_id: member.user_id, from: Number(props.syncFrom) })\n  ElMessage.success(window.$t('action_bind_success'))\n  loadUserList()\n  fetchUserList()\n\n  relateTooltipRef.value.onClose()\n}\n\nconst handleUnbind = async (member: Member) => {\n  await ElMessageBox.confirm(window.$t('sso.unbind_member_tip'))\n  await departmentApi.unbind_member({ user_id: member.user_id, from: Number(props.syncFrom) })\n  ElMessage.success(window.$t('action_unbind_success'))\n  loadUserList()\n  fetchUserList()\n}\n\nconst onStatusChange = (value: number) => {\n  filterForm.status = value\n  refresh()\n}\nonMounted(async () => {\n  refresh()\n})\nonUnmounted(() => {\n})\n\ndefineExpose({\n  refresh() {\n    nextTick(() => {\n      refresh()\n    })\n  },\n})\n</script>\n\n<template>\n  <div\n    class=\"max-h-ful flex flex-col bg-white py-6 box-border overflow-auto px-5\"\n  >\n    <div class=\"flex items-center gap-2\">\n      <!-- <div class=\"h-[40px] text-[#333] text-xl truncate\">\n        <OpenData type=\"departmentName\" :openid=\"department.bind_value\" :text=\"department.name || enterpriseStore.info.name\" />\n        {{ $t('internal_user.department.member_total_count', { total: tableTotal }) }}\n      </div> -->\n\n      <div class=\"h-[40px] text-[#333] text-xl truncate\">\n        <OpenData type=\"departmentName\" :openid=\"department.bind_value > 0 ? department.bind_value : 0\" :text=\"department.name || enterpriseStore.info.name\" />\n        {{ $t('internal_user.department.member_total_count', { total: tableTotal }) }}\n      </div>\n    </div>\n\n    <div class=\"flex items-center justify-between\">\n      <div class=\"flex items-center gap-3\">\n        <ElDropdown placement=\"bottom\" @command=\"onStatusChange\">\n          <div\n            class=\"!border-none !outline-none h-9 flex-center px-5 gap-1.5 rounded-2xl bg-[#F6F7F8] text-xs text-[#1D1E1F] cursor-pointer\"\n          >\n            {{ $t(statusOptions.find((item) => item.value === filterForm.status)?.label || 'internal_user.status.all')\n            }}\n            <ElIcon size=\"14\" color=\"#9EA5B6\">\n              <ArrowDown />\n            </ElIcon>\n          </div>\n          <template #dropdown>\n            <ElDropdownMenu>\n              <ElDropdownItem v-for=\"item in statusOptions\" :key=\"item.value\" :command=\"item.value\">\n                {{ $t(item.label) }}\n              </ElDropdownItem>\n            </ElDropdownMenu>\n          </template>\n        </ElDropdown>\n      </div>\n      <div class=\"flex-center gap-3\">\n        <ElButton v-if=\"!isSsoSync\" class=\"min-w-[100px]\" type=\"primary\" size=\"large\" @click=\"handleAdd\">\n          + {{ $t('action_add') }}\n        </ElButton>\n      </div>\n    </div>\n\n    <div class=\"flex-1 overflow-y-auto bg-white rounded-lg mt-4\">\n      <TablePlus\n        :data=\"tableData\" :total=\"tableTotal\" style=\"width: 100%\"\n        header-row-class-name=\"rounded overflow-hidden\" header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n        row-class-name=\"group\" :loading=\"loading\" @page-current-change=\"onPageChange\"\n        @page-size-change=\"onPageSizeChange\"\n      >\n        <ElTableColumn\n          :label=\"$t('internal_user.account.nickname')\" min-width=\"140\" :prop=\"isDingtalkSync ? 'name' : 'nickname'\"\n          show-overflow-tooltip\n        >\n          <template #default=\"{ row }\">\n            <div class=\"flex items-center gap-1\">\n              <OpenData type=\"userName\" :openid=\"row.bind_value\" :text=\"isDingtalkSync ? row.name : row.nickname\" />\n              <template v-if=\"isSsoSync\">\n                <template v-if=\"row.user_id\">\n                  ({{ row.nickname }})\n                </template>\n                <img v-else :src=\"$getRealPath({ url: `/images/sso/${isDingtalkSync ? 'dingtalk' : 'wecom'}.png` })\" class=\"size-4\">\n              </template>\n            </div>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('internal_user.account.mobile')\" min-width=\"140\" prop=\"mobile\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <span :class=\"{ 'text-[#9B9B9B]': !row.mobile }\">{{ row.mobile || '--' }}</span>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn\n          :label=\"$t('internal_user.account.department')\" min-width=\"140\" prop=\"department\"\n          show-overflow-tooltip\n        >\n          <template #default=\"{ row }\">\n            <OpenData type=\"departmentName\" :openid=\"row.dept_dids\" :text=\"row.dept_names || enterpriseStore.info.name || '--' \" />\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('internal_user.account.status')\" min-width=\"140\" prop=\"status\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <UserStatus v-model=\"row.user_status\" :user-data=\"row\" button-class=\"invisible group-hover:visible\" />\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('operation')\" width=\"130\" fixed=\"right\">\n          <template #default=\"{ row }\">\n            <template v-if=\"row.user_id\">\n              <ElButton class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click=\"handleEdit(row)\">\n                {{ $t('action_edit') }}\n              </ElButton>\n              <ElDropdown placement=\"bottom\">\n                <div class=\"text-[#5A6D9E] h-8 flex-center ml-2 !outline-none !border-none\">\n                  {{ $t('more') }}\n                  <ElIcon size=\"14\" class=\"ml-1\">\n                    <ArrowDown />\n                  </ElIcon>\n                </div>\n                <template #dropdown>\n                  <ElDropdownMenu>\n                    <ElDropdownItem command=\"dialogue_record\" @click=\"handleUnbind(row)\">\n                      {{ $t('sso.unbind_member') }}\n                    </ElDropdownItem>\n                    <ElDropdownItem :disabled=\"Number(row.user_id) === Number(userStore.info.user_id) || isSsoSync\" @click=\"handleUserDelete(row)\">\n                      {{ $t('action_delete') }}\n                    </ElDropdownItem>\n                  </ElDropdownMenu>\n                </template>\n              </ElDropdown>\n            </template>\n            <el-button v-else type=\"primary\" link @click=\"handleRelate($event, row)\">\n              {{ $t('sso.bind_member') }}\n            </el-button>\n          </template>\n        </ElTableColumn>\n      </TablePlus>\n    </div>\n\n    <UserAddDialog ref=\"userAddRef\" />\n    <UserEditDrawer ref=\"userEditRef\" />\n  </div>\n\n  <!-- 关联成员 -->\n  <el-tooltip\n    ref=\"relateTooltipRef\" effect=\"light\" trigger=\"click\" placement=\"bottom-start\" :popper-options=\"{\n      modifiers: [\n        {\n          name: 'computeStyles',\n          options: {\n            adaptive: false,\n            enabled: false,\n          },\n        },\n      ],\n    }\" :teleported=\"false\" virtual-triggering :virtual-ref=\"relateRef\" popper-class=\"relate-tooltip\"\n    :show-arrow=\"false\"\n  >\n    <template #content>\n      <div class=\"w-[132px] overflow-hidden\">\n        <div class=\"h-10 flex items-center gap-1 border-b px-4 overflow-hidden\">\n          <el-icon color=\"rgba(24, 43, 80, 0.3)\">\n            <Search />\n          </el-icon>\n          <input\n            v-model=\"relate.keyword\" class=\"flex-1 outline-none overflow-x-auto\" type=\"text\" :placeholder=\"$t('action_search')\"\n            @input=\"handleAccountSearch\"\n          >\n        </div>\n        <div class=\"max-h-[200px] overflow-y-auto\">\n          <template v-for=\"item in relate.list\" :key=\"item.id\">\n            <div\n              v-if=\"!item.hide\" class=\"text-[#182B50] text-sm px-4 py-2 cursor-pointer truncate hover:bg-slate-200\"\n              @click=\"handleBind(item)\"\n            >\n              {{ item.nickname || '--' }}\n            </div>\n          </template>\n        </div>\n      </div>\n    </template>\n  </el-tooltip>\n</template>\n\n<style scoped></style>\n\n<style>\n.relate-tooltip {\n\tpadding: 0;\n\tborder: none !important;\n\tbox-shadow: 0ch 0.5ch 1ch rgba(0, 0, 0, 0.1);\n\tleft: -10px !important;\n}\n</style>\n"
  },
  {
    "path": "web/console/src/views/user/internal/organization.vue",
    "content": "<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, ref } from 'vue'\nimport DepartmentTree from '../components/department-tree.vue'\nimport MemberView from './member.vue'\n\nimport { getRootDepartmentData } from '@/api/modules/department'\nimport { ENTERPRISE_SYNC_FROM } from '@/constants/enterprise'\n\nimport wecomInstance from '@/utils/wecom'\n\nimport { useSso } from '@/hooks/useSso'\n\nconst { syncValue, loadSyncSetting } = useSso()\n\nconst memberViewRef = ref()\n\nconst loading = ref(true)\n\nconst organizationData = ref({})\n\nconst handleNodeClick = ({ data = {} } = {}) => {\n  organizationData.value = data\n  memberViewRef.value?.refresh()\n}\n\nonMounted(async () => {\n  loading.value = true\n  await loadSyncSetting()\n  if (syncValue.value.value === ENTERPRISE_SYNC_FROM.WECOM)\n    wecomInstance()\n  organizationData.value = await getRootDepartmentData()\n\n  loading.value = false\n})\nonUnmounted(() => {\n})\n</script>\n\n<template>\n  <ElContainer v-loading=\"loading\" class=\"bg-white h-full\">\n    <ElAside class=\"border-r border-[#e5e5e5]\">\n      <DepartmentTree v-if=\"!loading\" :sync-from=\"syncValue.value\" @node-click=\"handleNodeClick\" />\n    </ElAside>\n    <ElMain class=\"!p-0\">\n      <MemberView v-if=\"!loading\" ref=\"memberViewRef\" :department=\"organizationData\" :filter-params=\"{ keyword: organizationData.nickname }\" :sync-from=\"syncValue.value\" />\n    </ElMain>\n  </ElContainer>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/src/views/user/register/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t(route.meta.title)\" />\n    <div class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border  max-h-[calc(100vh-100px)] overflow-auto\">\n      <div class=\"flex items-center justify-between\">\n        <div class=\"flex items-center gap-3\">\n          <ElSelect v-model=\"filter_form.group_id\" class=\"flex-none max-w-[180px]\" size=\"large\" @change=\"handleSearch\">\n            <template #prefix>\n              {{  $t('subscription.title')  }}：\n            </template>\n            <ElOption v-for=\"opt in subscription_options\" :key=\"opt.value\" :label=\"$t(opt.label)\" :value=\"opt.value\" />\n          </ElSelect>\n\n          <ElSelect v-model=\"filter_form.range_by\" class=\"flex-none max-w-[180px]\" size=\"large\" @change=\"handleSearch\">\n            <template #prefix>\n              {{  $t('filter')  }}：\n            </template>\n            <ElOption v-for=\"opt in range_by_options\" :key=\"opt.value\" :label=\"$t(opt.label)\" :value=\"opt.value\" />\n          </ElSelect>\n          <div class=\"flex-none \">\n            <FilterDateRange v-model=\"filter_form.date\" size=\"large\" :value-format=\"(date: Date) => date.getTime()\" @change=\"handleSearch\" />\n          </div>\n\n          <ElDropdown v-if=\"false\" placement=\"bottom\" @command=\"handleCommand\">\n            <div\n              class=\"!border-none !outline-none h-9 flex-center px-5 gap-1.5 rounded-2xl bg-[#F6F7F8] text-xs text-[#1D1E1F] cursor-pointer\"\n            >\n              {{ $t('all_group') }}\n              <ElIcon size=\"14\" color=\"#9EA5B6\">\n                <ArrowDown />\n              </ElIcon>\n            </div>\n            <template #dropdown>\n              <el-dropdown-menu>\n                <el-dropdown-item command=\"all\">\n                  {{ $t('all_group') }}\n                </el-dropdown-item>\n                <el-dropdown-item command=\"high\">\n                  高端用户\n                </el-dropdown-item>\n                <el-dropdown-item command=\"normal\">\n                  普通用户\n                </el-dropdown-item>\n              </el-dropdown-menu>\n            </template>\n          </ElDropdown>\n        </div>\n        <div class=\"flex-center gap-3\">\n          <ElInput\n            v-model=\"state.keyword\" style=\"width: 268px\" size=\"large\" clearable :suffix-icon=\"Search\"\n            :placeholder=\"$t('module.operation_user_search_placeholder')\" @change=\"handleSearch\"\n          />\n          <ElButton v-if=\"false\" class=\"min-w-[100px]\" type=\"primary\" size=\"large\" @click=\"handleAdd\">\n            {{ $t('action_add') }}\n          </ElButton>\n        </div>\n      </div>\n\n      <div class=\"flex-1 overflow-y-auto bg-white rounded-lg mt-4\">\n        <TablePlus\n          :data=\"state.list\" :total=\"state.count\" style=\"width: 100%\"\n          header-row-class-name=\"rounded overflow-hidden\" header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n          :loading=\"loading\" @page-size-change=\"handleSizeChange\" @page-current-change=\"handleCurrentChange\"\n        >\n          <el-table-column :label=\"$t('user')\" min-width=\"140\" prop=\"nickname\" show-overflow-tooltip />\n          <el-table-column :label=\"$t('mobile')\" min-width=\"140\" prop=\"mobile\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.mobile }\">{{ row.mobile || '--' }}</span>\n            </template>\n          </el-table-column>\n          <el-table-column :label=\"$t('email')\" min-width=\"140\" prop=\"email\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.email }\">{{ row.email || '--' }}</span>\n            </template>\n          </el-table-column>\n          <el-table-column :label=\"$t('subscription.title')\" min-width=\"100\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.subscription_name }\">{{ row.subscription_name || '--' }}</span>\n            </template>\n          </el-table-column>\n          <el-table-column :label=\"$t('subscription.end_at')\" width=\"120\" prop=\"expired_time\" show-overflow-tooltip>\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.expired_time }\">\n                {{ (row.expired_time || '').slice(0, 10) || +row.group_id && $t('permanent_effect') || '--' }}\n              </span>\n            </template>\n          </el-table-column>\n          <el-table-column :label=\"$t('register_time')\" width=\"160\" prop=\"register_time\">\n            <template #default=\"{ row }\">\n              <span :class=\"{ 'text-[#9B9B9B]': !row.register_time }\">{{ (row.register_time || '').slice(0, 16) || '--'\n              }}</span>\n            </template>\n          </el-table-column>\n          <el-table-column :label=\"$t('operation')\" width=\"120\" fixed=\"right\" align=\"right\">\n            <template #default=\"{ row }\">\n              <ElButton class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click=\"handleAdd({ data: row })\">\n                {{ $t('action_edit') }}\n              </ElButton>\n              <!-- <ElButton class=\"text-[#5A6D9E]\" type=\"text\" @click=\"handleRecord({ data: row })\">\n                {{ $t('usage_record') }}\n              </ElButton> -->\n              <ElDropdown v-if=\"!isWorkEnv\" placement=\"bottom\" @command=\"handleMoreCommand($event, row)\">\n                <div class=\"text-[#5A6D9E] h-8 flex-center ml-2 !outline-none !border-none\">\n                  {{ $t('more') }}\n                  <ElIcon size=\"14\" class=\"ml-1\">\n                    <ArrowDown />\n                  </ElIcon>\n                </div>\n                <template #dropdown>\n                  <ElDropdownMenu>\n                    <ElDropdownItem command=\"dialogue_record\">\n                      {{ $t('dialogue_record') }}\n                    </ElDropdownItem>\n                    <ElDropdownItem :disabled=\"user_store.info.user_id == row.user_id\" command=\"delete\">\n                      {{ $t('action_delete') }}\n                    </ElDropdownItem>\n                  </ElDropdownMenu>\n                </template>\n              </ElDropdown>\n              <ElButton\n                v-else :disabled=\"user_store.info.user_id == row.user_id\"\n                class=\"text-[#5A6D9E] !bg-transparent !w-[30px] text-left\" type=\"text\" @click=\"handleDelete(row)\"\n              >\n                {{ user_store.info.user_id == row.user_id ? '--' : $t('action_delete') }}\n              </ElButton>\n            </template>\n          </el-table-column>\n        </TablePlus>\n      </div>\n    </div>\n  </Layout>\n  <UserAddDialog ref=\"add_ref\" @success=\"loadList\" />\n  <DialogueRecordDrawer ref=\"dialogueRecordRef\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowDown, Search } from '@element-plus/icons-vue'\nimport { onMounted, onUnmounted, reactive, ref } from 'vue'\nimport { useRoute } from 'vue-router'\nimport UserAddDialog from '../components/user-add-dialog.vue'\nimport DialogueRecordDrawer from '@/components/DialogueRecord/drawer.vue'\nimport FilterDateRange from '@/components/Filter/date-range.vue'\n\nimport { useUserStore } from '@/stores'\nimport { groupApi } from '@/api/modules/group'\n\nimport { GROUP_TYPE } from '@/constants/group'\nimport { useEnv } from '@/hooks/useEnv'\n\nconst { isWorkEnv } = useEnv()\nconst route = useRoute()\ninterface User {\n  'user_id': number\n  'username': string\n  'nickname': string\n  'avatar': string\n  'mobile': string\n  'email': string\n  'eid': number\n  'role': number\n  'group_id': number\n  'status': number\n  'expired_time': number\n  'last_login_time': number\n  'related_id': number\n  'created_time': number\n  'updated_time': number\n  'register_time': string\n}\n\nconst user_store = useUserStore()\nconst add_ref = ref()\nconst filter_form = reactive({\n  group_id: 0,\n  keyword: '',\n  range_by: 'expired_time',\n  date: []\n})\nconst subscription_options = ref([])\nconst loading = ref(false)\nconst range_by_options = [\n  {\n    value: 'created_time',\n    label: window.$t('register_time')\n  },\n  {\n    value: 'expired_time',\n    label: window.$t('subscription.end_at')\n  }\n]\n\nconst state: {\n  keyword: string\n  page: number\n  limit: number\n  count: number\n  list: User[]\n} = reactive({\n  keyword: '',\n  page: 1,\n  limit: 10,\n  count: 0,\n  list: [],\n})\n\nconst loadList = () => {\n  loading.value = true\n  user_store.loadListData({ data: {keyword: state.keyword,\n    group_id: filter_form.group_id,\n    offset: (state.page - 1) * state.limit,\n    start_time: filter_form.date[0],\n    end_time: filter_form.date[1],\n    range_by: filter_form.range_by,\n    limit: state.limit } })\n    .then(({ total = 0, list = [] } = {}) => {\n      state.count = +total || 0\n      state.list = [...list].map((item) => {\n        return {\n          ...item,\n          subscription_name: (subscription_options.value.find(row => row.group_id === item.group_id) || {}).group_name || ''\n        }\n      })\n    }).finally(() => {\n      loading.value = false\n    })\n}\n\nconst handleSearch = () => {\n  state.page = 1\n  loadList()\n}\n\nconst handleCommand = (command: string) => {\n  filter_form.group_id = command\n}\n\nconst handleAdd = ({ data = {} } = {}) => {\n  add_ref.value.open({ data, subscription_options: subscription_options.value })\n}\nconst handleDelete = async (data: User) => {\n  await ElMessageBox.confirm(window.$t('module.operation_user_delete_confirm'))\n  await user_store.delete({ data: { user_id: data.user_id } })\n  ElMessage.success(window.$t('action_delete_success'))\n  loadList()\n}\nconst handleSizeChange = (size: number) => {\n  state.limit = size\n  state.page = 1\n  loadList()\n}\nconst handleCurrentChange = (page: number) => {\n  state.page = page\n  loadList()\n}\nconst dialogueRecordRef = ref()\nconst handleMoreCommand = (command, data = {}) => {\n  switch (command) {\n    case 'dialogue_record':\n      dialogueRecordRef.value.open({ type: 'user', relatedId: data.user_id })\n      break\n    case 'delete':\n      handleDelete(data)\n      break\n  }\n}\n\nonMounted(async () => {\n  const list = await groupApi.list({ params: { group_type: GROUP_TYPE.USER } })\n  const options = list.map((item = {}) => {\n    item.value = +item.group_id || 0\n    item.label = item.group_name || ''\n    return item\n  })\n  options.unshift({\n    value: 0,\n    label: $t('all')\n  })\n\n  subscription_options.value = options\n  loadList()\n  // eventBus.on('load-user-self-info-success', loadList)\n})\nonUnmounted(() => {\n  // eventBus.off('load-user-self-info-success', loadList)\n})\n</script>\n\n<style scoped>\n\n</style>\n"
  },
  {
    "path": "web/console/src/views/viewer/index.vue",
    "content": "<template>\n  <Layout class=\"px-[60px] py-8\">\n    <Header :title=\"$t('module.viewer')\" />\n    <div\n      v-loading=\"isLoading\"\n      class=\"flex-1 flex flex-col bg-white p-6 mt-3 box-border max-h-[calc(100vh-100px)] overflow-auto\"\n    >\n      <!-- 表格内容 -->\n      <div class=\"px-5 py-4 border rounded-md\">\n        <el-table :data=\"previewData\" header-cell-class-name=\"!bg-[#F5F6F7] text-[#999999]\" cell-class-name=\"py-3\">\n          <el-table-column prop=\"type\" label=\"文档类型\" width=\"200\">\n            <template #default=\"{ row }\">\n              <div class=\"flex items-center gap-2\">\n                <img :src=\"$getRealPath({ url: `/images/parse/${row.ext}.png` })\" class=\"size-5\" />\n                <span class=\"text-sm text-[#4F5052]\">{{ row.name }}</span>\n              </div>\n            </template>\n          </el-table-column>\n\n          <el-table-column prop=\"extensions\" label=\"说明\">\n            <template #default=\"{ row }\">\n              <span class=\"text-sm text-gray-600\">{{ row.extensions }}</span>\n            </template>\n          </el-table-column>\n\n          <el-table-column prop=\"parseMethod\" label=\"文档查看\" width=\"200\">\n            <template #default=\"{ row }\">\n              <el-select v-model=\"row.preview\" :disabled=\"!row.allow_wps\" class=\"w-36 h-9\" placeholder=\"选择查看方法\">\n                <el-option label=\"内置查看器\" value=\"default\" />\n                <el-option v-if=\"wpsSetting\" label=\"WPS WebOffice\" value=\"wps\" />\n              </el-select>\n            </template>\n          </el-table-column>\n          <el-table-column prop=\"parseMethod\" label=\"文档编辑\" width=\"200\">\n            <template #default=\"{ row }\">\n              <el-select v-model=\"row.editor\" :disabled=\"!row.allow_wps\" class=\"w-36 h-9\" placeholder=\"选择编辑方法\">\n                <el-option label=\"内置编辑器\" value=\"default\" />\n                <el-option v-if=\"wpsSetting\" label=\"WPS WebOffice\" value=\"wps\" />\n              </el-select>\n            </template>\n          </el-table-column>\n        </el-table>\n      </div>\n\n      <!-- 底部操作按钮 -->\n      <div class=\"mt-8\">\n        <el-button v-debounce class=\"w-24 h-9\" type=\"primary\" @click=\"handleSave\"> 保存 </el-button>\n      </div>\n    </div>\n  </Layout>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport platformSettingsApi from '@/api/modules/platform-settings'\nimport { transformPlatformSetting } from '@/api/modules/platform-settings/transform'\nimport type { PlatformSetting } from '@/api/modules/platform-settings/types'\nimport { settingApi } from '@/api/modules/setting'\n\nconst wpsSetting = ref<PlatformSetting | null>(null)\n// 解析方法配置\n\nconst SETTING_KEY = 'document_js_sdk_setting'\nconst settingId = ref<number | null>(null)\nconst isLoading = ref(true)\n// 表格数据\nconst previewData = ref([\n  {\n    ext: 'doc',\n    name: 'Word',\n    shortName: 'DOC',\n    extensions: 'doc, docx',\n    preview: 'default',\n    editor: 'default',\n    allow_wps: true,\n  },\n  {\n    ext: 'xls',\n    name: 'Excel',\n    shortName: 'XLS',\n    extensions: 'xls, xlsx',\n    preview: 'default',\n    editor: 'default',\n    allow_wps: true,\n  },\n  {\n    ext: 'ppt',\n    name: 'PowerPoint',\n    shortName: 'PPT',\n    extensions: 'ppt, pptx',\n    preview: 'default',\n    editor: 'default',\n    allow_wps: true,\n  },\n  {\n    ext: 'pdf',\n    name: 'PDF',\n    shortName: 'PDF',\n    extensions: 'pdf',\n    preview: 'default',\n    editor: 'default',\n    allow_wps: true,\n  },\n  {\n    ext: 'md',\n    name: 'Markdown',\n    shortName: 'MD',\n    extensions: 'md, txt',\n    preview: 'default',\n    editor: 'default',\n    allow_wps: false,\n  },\n  {\n    ext: 'html',\n    name: 'HTML',\n    shortName: 'HTML',\n    extensions: 'html, htm',\n    preview: 'default',\n    editor: 'default',\n    allow_wps: false,\n  },\n])\n\n// 加载WPS WebOffice配置\nconst loadWpsSetting = async () => {\n  const res = await platformSettingsApi.find({ platform_key: 'wps' })\n  if (res && res.length > 0) {\n    wpsSetting.value = transformPlatformSetting(res[0])\n  }\n}\n\nconst loadParseSetting = async () => {\n  const res = await settingApi.get(SETTING_KEY)\n  if (res.data) {\n    settingId.value = res.data.setting_id\n    const valueData = JSON.parse(res.data.value)\n    previewData.value = previewData.value.map(item => {\n      const data = valueData.preview[item.ext]\n      const editorData = valueData.editor[item.ext]\n      if (data) {\n        item.preview = wpsSetting.value ? data : 'default'\n      }\n      if (editorData) {\n        item.editor = wpsSetting.value ? editorData : 'default'\n      }\n      return item\n    })\n  }\n  isLoading.value = false\n}\n\n// 保存设置\nconst handleSave = async () => {\n  const data = {\n    key: SETTING_KEY,\n    value: JSON.stringify({\n      preview: previewData.value.reduce((acc: any, item: any) => {\n        acc[item.ext] = item.preview\n        return acc\n      }, {}),\n      editor: previewData.value.reduce((acc: any, item: any) => {\n        acc[item.ext] = item.editor\n        return acc\n      }, {}),\n    }),\n  }\n  if (settingId.value) {\n    await settingApi.update(settingId.value, data)\n  } else {\n    await settingApi.create(data)\n  }\n  await loadParseSetting()\n  // 这里可以添加保存逻辑\n  ElMessage.success(window.$t('action_save_success'))\n}\n\nonMounted(async () => {\n  await loadWpsSetting()\n  loadParseSetting()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/console/stylelint.config.js",
    "content": "module.exports = {\n  extends: ['stylelint-config-standard', 'stylelint-config-recommended-vue'],\n  rules: {\n    // 禁用一些与 Tailwind CSS 冲突的规则\n    'at-rule-no-unknown': [\n      true,\n      {\n        ignoreAtRules: ['tailwind', 'apply', 'variants', 'responsive', 'screen', 'layer']\n      }\n    ],\n    // 允许深度选择器\n    'selector-pseudo-element-no-unknown': [\n      true,\n      {\n        ignorePseudoElements: ['v-deep', 'v-global', 'v-slotted']\n      }\n    ],\n    // 允许 Vue 的 scoped 样式\n    'selector-pseudo-class-no-unknown': [\n      true,\n      {\n        ignorePseudoClasses: ['deep', 'global', 'slotted']\n      }\n    ],\n    // 自定义属性模式\n    'custom-property-pattern': null,\n    // 允许空的源文件\n    'no-empty-source': null,\n    // 字体族名称\n    'font-family-no-missing-generic-family-keyword': null,\n    // 选择器类名模式（允许 Element Plus 等库的类名）\n    'selector-class-pattern': null,\n    // 允许 @apply 规则（Tailwind CSS）\n    'at-rule-no-deprecated': [\n      true,\n      {\n        ignoreAtRules: ['apply']\n      }\n    ],\n    // 允许 CSS 常量（iOS 安全区域）\n    'declaration-property-value-no-unknown': null,\n    // 允许重复的选择器\n    'no-duplicate-selectors': null,\n    // 允许特异性降序（可能由于复杂的选择器结构）\n    'no-descending-specificity': null,\n    // 允许空的代码块\n    'block-no-empty': null\n  },\n  ignoreFiles: [\n    'node_modules/**/*',\n    'dist/**/*',\n    'build/**/*',\n    'out/**/*',\n    'src/renderer/public/libs/**/*',\n    '**/*.min.css'\n  ]\n}\n"
  },
  {
    "path": "web/console/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nconst colors = require('tailwindcss/colors')\n\nmodule.exports = {\n  mode: 'jit',\n  darkMode: 'class',\n  content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],\n  theme: {\n    colors: {\n      ...colors\n    },\n    extend: {\n      height: {\n        15: '60px'\n      },\n      padding: {\n        15: '60px'\n      },\n      animation: {\n        blink: 'blink 1.2s infinite steps(1, start)'\n      },\n      keyframes: {\n        blink: {\n          '0%, 100%': { 'background-color': 'currentColor' },\n          '50%': { 'background-color': 'transparent' }\n        }\n      }\n    }\n  },\n  plugins: [\n    function ({ addBase }) {\n      addBase({\n        '.el-button': {\n          'background-color': 'var(--el-button-bg-color,val(--el-color-white))'\n        }\n      })\n    }\n  ]\n}\n"
  },
  {
    "path": "web/console/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"module\": \"ESNext\",\n    \"target\": \"ESNext\",\n    \"lib\": [\n      \"DOM\",\n      \"ESNext\"\n    ],\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"jsx\": \"preserve\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"noUnusedLocals\": true,\n    \"strictNullChecks\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"skipLibCheck\": true,\n    \"paths\": {\n      \"@/*\": [\n        \"./src/*\"\n      ]\n    },\n    \"types\": [\n      \"vite/client\",\n      \"node\",\n      \"element-plus/global\",\n      \"vue\"\n    ]\n  },\n  \"exclude\": [\n    \"node_modules\",\n    \"dist\",\n    \"service\"\n  ],\n  \"vueCompilerOptions\": {\n    \"target\": 3,\n    \"plugins\": [\n      \"@vue/language-plugin-typescript\"\n    ]\n  }\n}\n"
  },
  {
    "path": "web/console/vite-plugins/conditional-compilation.ts",
    "content": "import type { Plugin } from 'vite'\n\ninterface ConditionalCompilationOptions {\n  // 当前平台类型\n  platform?: string\n  // 是否开启调试模式\n  debug?: boolean\n}\n\n// 版本常量映射 - 对应项目中的版本\nconst PLATFORM_CONSTANTS = {\n  SAAS: '', // SAAS版是默认版本，VITE_PLATFORM 为空或未设置\n  OP_LOCAL: 'op-local', // 开源版\n  KM: 'km' // KM版\n}\n\n// 预编译正则表达式提高性能\nconst CONDITIONAL_REGEX = {\n  // 快速检测是否包含条件编译指令\n  hasConditional: /#(?:ifdef|ifndef|endif)\\b/,\n\n  // ifdef 指令匹配\n  ifdef: [/^\\/\\/\\s*#ifdef\\s+(.+)/, /^<!--\\s*#ifdef\\s+(.+?)\\s*-->/, /^\\/\\*\\s*#ifdef\\s+(.+?)\\s*\\*\\//],\n\n  // ifndef 指令匹配\n  ifndef: [\n    /^\\/\\/\\s*#ifndef\\s+(.+)/,\n    /^<!--\\s*#ifndef\\s+(.+?)\\s*-->/,\n    /^\\/\\*\\s*#ifndef\\s+(.+?)\\s*\\*\\//\n  ],\n\n  // endif 指令匹配\n  endif: [/^\\/\\/\\s*#endif/, /^<!--\\s*#endif\\s*-->/, /^\\/\\*\\s*#endif\\s*\\*\\//]\n}\n\n/**\n * 评估单个条件\n */\nfunction evaluateSingleCondition(condition: string, currentPlatform: string): boolean {\n  const cleanCondition = condition.trim().toUpperCase()\n  const platformValue = PLATFORM_CONSTANTS[cleanCondition as keyof typeof PLATFORM_CONSTANTS]\n\n  if (platformValue === undefined) {\n    console.warn(`[条件编译] 未知的平台常量: ${cleanCondition}`)\n    return false\n  }\n\n  return platformValue === currentPlatform\n}\n\n/**\n * 处理 OR 表达式\n */\nfunction evaluateOrExpression(expression: string, currentPlatform: string): boolean {\n  const orParts = expression.split('||')\n  for (let i = 0; i < orParts.length; i++) {\n    if (evaluateSingleCondition(orParts[i].trim(), currentPlatform)) {\n      return true\n    }\n  }\n  return false\n}\n\n/**\n * 解析条件表达式\n * 支持：SAAS, OP_LOCAL, KM\n * 支持逻辑操作符：|| (或)\n * 示例：SAAS || OP_LOCAL\n * @param expression 条件表达式\n * @param currentPlatform 当前平台\n * @returns 是否满足条件\n */\nfunction evaluateCondition(expression: string, currentPlatform: string): boolean {\n  // 移除多余空格并转换为大写\n  const cleanExpression = expression.trim().toUpperCase()\n\n  // 如果表达式包含 || 操作符，处理 OR 表达式\n  if (cleanExpression.includes('||')) {\n    return evaluateOrExpression(cleanExpression, currentPlatform)\n  }\n\n  // 单个条件\n  return evaluateSingleCondition(cleanExpression, currentPlatform)\n}\n\n/**\n * 匹配条件编译指令\n */\nfunction matchDirective(line: string, regexArray: RegExp[]): RegExpMatchArray | null {\n  for (let i = 0; i < regexArray.length; i++) {\n    const match = line.match(regexArray[i])\n    if (match) return match\n  }\n  return null\n}\n\n/**\n * 条件编译 Vite 插件\n * 支持 #ifdef, #ifndef, #endif 指令进行条件编译\n *\n * 使用示例：\n * // #ifdef SAAS\n * console.log('只在 SAAS 版本中编译')\n * // #endif\n *\n * // #ifdef SAAS || OP_LOCAL\n * console.log('在 SAAS 版本和开源版中编译')\n * // #endif\n *\n * // #ifndef KM\n * console.log('在除了 KM 版本之外的版本中编译')\n * // #endif\n */\nexport function conditionalCompilation(options: ConditionalCompilationOptions = {}): Plugin {\n  const { platform = '', debug = false } = options\n\n  // 根据环境变量确定当前平台\n  const currentPlatform = platform || process.env.VITE_PLATFORM || ''\n\n  console.log(`[条件编译] 插件初始化 - 当前平台: \"${currentPlatform}\", 调试模式: ${debug}`)\n\n  /**\n   * 解析条件编译指令 - 优化版本\n   * @param content 文件内容\n   * @returns 处理后的内容\n   */\n  function parseConditionalCompilation(content: string): string {\n    // 早期退出：如果内容不包含条件编译指令，直接返回\n    if (!CONDITIONAL_REGEX.hasConditional.test(content)) {\n      return content\n    }\n\n    const lines = content.split('\\n')\n    const result: string[] = []\n\n    let currentShouldInclude = false\n    let hasChanges = false\n\n    for (let i = 0; i < lines.length; i++) {\n      const line = lines[i]\n      const trimmedLine = line.trim()\n\n      // 检测条件编译指令\n      const ifdefMatch = matchDirective(trimmedLine, CONDITIONAL_REGEX.ifdef)\n      const ifndefMatch = matchDirective(trimmedLine, CONDITIONAL_REGEX.ifndef)\n      const endifMatch = matchDirective(trimmedLine, CONDITIONAL_REGEX.endif)\n      if (ifdefMatch) {\n        currentShouldInclude = !evaluateCondition(ifdefMatch[1], currentPlatform)\n        hasChanges = currentShouldInclude\n      } else if (ifndefMatch) {\n        currentShouldInclude = evaluateCondition(ifndefMatch[1], currentPlatform)\n        hasChanges = currentShouldInclude\n      }\n\n      // 处理非条件编译指令行\n      if (!currentShouldInclude) {\n        result.push(line)\n      }\n      if (endifMatch) {\n        currentShouldInclude = false\n        hasChanges = true\n      }\n    }\n\n    // 如果没有变化，返回原内容避免不必要的字符串操作\n    return hasChanges ? result.join('\\n') : content\n  }\n\n  /**\n   * 处理 Vue 文件的条件编译 - 优化版本\n   */\n  function processVueFile(content: string, filePath: string): string {\n    // 早期退出：如果内容不包含条件编译指令，直接返回\n    if (!CONDITIONAL_REGEX.hasConditional.test(content)) {\n      return content\n    }\n\n    // 优化的 Vue 文件处理：减少正则匹配次数\n    let hasChanges = false\n    const processedContent = parseConditionalCompilation(content)\n    if (processedContent !== content) {\n      hasChanges = true\n    }\n    return hasChanges ? processedContent : content\n  }\n\n  return {\n    name: 'conditional-compilation',\n    enforce: 'pre', // 在其他插件之前执行\n    transform(code: string, id: string) {\n      // 只处理源码文件，排除 node_modules\n      if (id.includes('node_modules')) {\n        return null\n      }\n\n      // 早期退出：如果代码不包含条件编译指令，直接跳过\n      if (!CONDITIONAL_REGEX.hasConditional.test(code)) {\n        return null\n      }\n\n      let processedCode: string\n\n      // 根据文件类型处理条件编译\n      if (id.endsWith('.vue')) {\n        processedCode = processVueFile(code, id)\n      } else if (id.endsWith('.ts') || id.endsWith('.js')) {\n        processedCode = parseConditionalCompilation(code)\n      } else {\n        return null\n      }\n\n      // 如果内容有变化，返回处理后的代码\n      if (processedCode !== code) {\n        return {\n          code: processedCode,\n          map: null // 可以添加 source map 支持\n        }\n      }\n\n      return null\n    }\n  }\n}\n\nexport default conditionalCompilation\n"
  },
  {
    "path": "web/console/vite.config.ts",
    "content": "import path from 'path'\nimport fs from 'fs'\nimport type { PluginOption } from 'vite'\nimport { defineConfig, loadEnv } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport { VitePWA } from 'vite-plugin-pwa'\n\nimport wasm from 'vite-plugin-wasm'\nimport topLevelAwait from 'vite-plugin-top-level-await'\n\nimport AutoImport from 'unplugin-auto-import/vite'\nimport Components from 'unplugin-vue-components/vite'\nimport { ElementPlusResolver } from 'unplugin-vue-components/resolvers'\n\nimport { createSvgIconsPlugin } from 'vite-plugin-svg-icons'\nimport conditionalCompilation from './vite-plugins/conditional-compilation'\n\n// import { visualizer } from 'rollup-plugin-visualizer'\n\n// 读取 package.json 获取版本号\nconst packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf-8'))\nconst { version } = packageJson\n\n// 创建生成 version.txt 的插件\nconst versionPlugin = () => {\n  return {\n    name: 'version-txt',\n    writeBundle: {\n      sequential: true,\n      order: 'post',\n      handler: async (options: { dir?: string }) => {\n        const outDir = options.dir || 'dist'\n        fs.writeFileSync(path.join(outDir, 'version.txt'), version)\n      },\n    },\n  }\n}\n\nfunction setupPlugins(env: ImportMetaEnv): PluginOption[] {\n  return [\n    // 条件编译插件 - 必须在其他插件之前执行\n    conditionalCompilation({\n      platform: env.VITE_PLATFORM,\n      debug: true, // 强制开启调试模式\n    }),\n    vue({\n      template: {\n        compilerOptions: {\n          isCustomElement: tag => tag.startsWith('ww-open-data') || tag.startsWith('dt-open-data'),\n        },\n      },\n      script: {\n        defineModel: true,\n        propsDestructure: true,\n      },\n    }),\n    env.VITE_GLOB_APP_PWA === 'true' &&\n      VitePWA({\n        injectRegister: 'auto',\n        manifest: {\n          name: '53aiHub',\n          short_name: '53aiHub',\n          icons: [\n            { src: 'pwa-140x140.png', sizes: '140x140', type: 'image/png' },\n            { src: 'pwa-210x210.png', sizes: '210x210', type: 'image/png' },\n          ],\n        },\n      }),\n    AutoImport({\n      resolvers: [ElementPlusResolver()],\n    }),\n    Components({\n      resolvers: [ElementPlusResolver()],\n    }),\n    createSvgIconsPlugin({\n      iconDirs: [path.resolve(process.cwd(), 'src/icons')],\n      symbolId: 'icon-[name]',\n    }),\n    wasm(),\n    topLevelAwait(),\n    versionPlugin(),\n  ]\n}\n\nexport default defineConfig(env => {\n  const viteEnv = loadEnv(env.mode, process.cwd()) as unknown as ImportMetaEnv\n  console.log(viteEnv)\n  return {\n    base: viteEnv.VITE_BASE_PATH || '/console',\n    resolve: {\n      alias: {\n        '@': path.resolve(process.cwd(), 'src'),\n      },\n    },\n    plugins: setupPlugins(viteEnv),\n    server: {\n      host: '0.0.0.0',\n      port: viteEnv.VITE_PLATFORM === 'km' ? 8003 : 8002,\n      open: false,\n      proxy: {\n        '/api': {\n          target: viteEnv.VITE_APP_API_BASE_URL,\n          changeOrigin: true, // 允许跨域\n          rewrite: urlPath => urlPath.replace('/api/', '/'),\n        },\n      },\n      allowedHosts: ['hubtest.53ai.com', 'hub.53ai.com', 'kmtest.53ai.com', 'km.53ai.com'],\n    },\n    build: {\n      outDir: 'dist',\n      reportCompressedSize: false,\n      sourcemap: false,\n      commonjsOptions: {\n        ignoreTryCatch: false,\n      },\n      assetsDir: 'static/images/',\n      rollupOptions: {\n        output: {\n          chunkFileNames: 'static/js/[name]-[hash].js',\n          entryFileNames: 'static/js/[name]-[hash].js',\n          assetFileNames: 'static/[ext]/[name]-[hash].[ext]',\n          // 解决打包时Some chunks are larger警告\n          // manualChunks(id) {\n          //   if (id.includes('node_modules')) {\n          //     return id\n          //       .toString()\n          //       .split('node_modules/')[1]\n          //       .split('/')[0]\n          //       .toString()\n          //   }\n          // },\n        },\n      },\n    },\n  }\n})\n"
  },
  {
    "path": "web/front/.editorconfig",
    "content": "# Editor configuration, see http://editorconfig.org\n\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n"
  },
  {
    "path": "web/front/.eslintignore",
    "content": "node_modules\ndist\nout\n.gitignore\n\nsrc\\renderer\\public"
  },
  {
    "path": "web/front/.eslintrc.cjs",
    "content": "/* eslint-env node */\nrequire('@rushstack/eslint-patch/modern-module-resolution')\n\nmodule.exports = {\n  extends: [\n    'airbnb-base',\n    'eslint:recommended',\n    'plugin:vue/vue3-recommended',\n    '@electron-toolkit',\n    '@electron-toolkit/eslint-config-ts/eslint-recommended',\n    '@vue/eslint-config-typescript/recommended',\n    '@vue/eslint-config-prettier'\n  ],\n  rules: {\n    // Vue 相关规则\n    'vue/require-default-prop': 'off',\n    'vue/multi-word-component-names': 'off',\n    'vue/no-multiple-template-root': 'off',\n    'vue/no-dupe-keys': 'off', // 允许重复的键\n    'vue/no-v-html': 'off', // 允许 v-html 指令\n    'vue/no-mutating-props': 'off', // 允许修改 props\n    'vue/no-parsing-error': 'off', // 允许解析错误\n    'vue/valid-attribute-name': 'off', // 允许任意属性名\n    'vue/max-attributes-per-line': 'off', // 关闭每行最大属性数限制\n    'vue/singleline-html-element-content-newline': 'off', // 关闭单行元素内容换行规则\n    'vue/multiline-html-element-content-newline': 'off', // 关闭多行元素内容换行规则\n    'vue/html-closing-bracket-newline': 'off', // 关闭标签结束括号换行规则\n    'vue/html-self-closing': 'off', // 关闭自闭合标签规则\n    'vue/component-tags-order': [\n      'error',\n      {\n        order: ['template', 'script', 'style']\n      }\n    ], // 强制组件标签顺序：template -> script -> style\n\n    // Airbnb 规则调整\n    'import/no-extraneous-dependencies': 'off', // 关闭该规则，让 TypeScript 处理\n    'import/no-unresolved': 'off', // 由 TypeScript 处理\n    'import/extensions': 'off', // 关闭文件扩展名检查\n    'import/prefer-default-export': 'off', // 允许非默认导出\n    camelcase: 'off', // 关闭驼峰命名检查\n    'no-restricted-syntax': 'off', // 允许 for...of 等语法\n    'no-underscore-dangle': 'off', // 允许下划线命名\n    'no-nested-ternary': 'off', // 允许嵌套三元运算符\n    'no-plusplus': 'off', // 允许 ++ 和 -- 操作符\n    'max-classes-per-file': 'off', // 允许每个文件多个类\n    'class-methods-use-this': 'off', // 类方法不必使用 this\n    'no-useless-escape': 'off', // 允许看似无用的转义\n    'default-case': 'off', // switch 语句不必有 default\n    'no-case-declarations': 'off', // 允许在 case 中声明变量\n    'no-new': 'off', // 允许 new 操作符的副作用\n    'no-return-await': 'off', // 允许 return await\n    'no-empty': 'off', // 允许空的代码块\n    '@typescript-eslint/ban-types': 'off', // 允许 Function 类型等\n\n    // TypeScript 相关\n    'no-use-before-define': 'off',\n    'no-shadow': 'off',\n    '@typescript-eslint/no-shadow': 'off', // 允许变量阴影\n    'no-unused-vars': 'off',\n    '@typescript-eslint/no-unused-vars': [\n      'warn',\n      {\n        vars: 'all',\n        args: 'after-used',\n        ignoreRestSiblings: false,\n        argsIgnorePattern: '^_',\n        varsIgnorePattern: '^_'\n      }\n    ], // 检测未使用的变量但不报错\n    '@typescript-eslint/no-explicit-any': 'off', // 允许使用 any 类型\n\n    // 其他常用规则调整\n    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',\n    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',\n    'max-len': 'off', // 关闭行长度限制\n    'object-curly-newline': ['error', { consistent: true }],\n    'function-paren-newline': ['error', 'consistent'],\n\n    // Prettier 相关规则\n    'prettier/prettier': 'off' // 关闭 prettier 检查，避免与 ESLint 冲突\n  }\n}\n"
  },
  {
    "path": "web/front/.gitattributes",
    "content": ".github merge=ours\n.env.example merge=ours\n.env.production merge=ours\nelectron-builder.yml merge=ours\n\nsrc/main merge=ours\n\nsrc/renderer/main/components/Fullscreen/index.vue merge=ours\nsrc/renderer/main/views/desktop/components/Browser.vue merge=ours\nsrc/renderer/main/views/desktop/components/Reader/html.vue merge=ours\nsrc/renderer/main/views/desktop/index.vue merge=ours\nsrc/renderer/main/views/desktop/stores/tabs.ts merge=ours\nsrc/renderer/main/views/profile/glider.vue merge=ours\nsrc/renderer/main/views/profile/toolbar.vue merge=ours\n"
  },
  {
    "path": "web/front/.gitignore",
    "content": "node_modules\ndist\nout\n.DS_Store\n*.log*\n\n\nauto-imports.d.ts\ncomponents.d.ts"
  },
  {
    "path": "web/front/.husky/commit-msg",
    "content": "# 运行 commitlint 检查提交消息格式\nnpx commitlint --edit $1\n"
  },
  {
    "path": "web/front/.husky/pre-commit",
    "content": "# 只对 staged 文件运行 lint 检查和格式化\nnpx lint-staged\n"
  },
  {
    "path": "web/front/.npmrc",
    "content": "electron_mirror=https://npmmirror.com/mirrors/electron/\nelectron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/\nshamefully-hoist=true\n"
  },
  {
    "path": "web/front/.prettierignore",
    "content": "out\ndist\npnpm-lock.yaml\nLICENSE.md\ntsconfig.json\ntsconfig.*.json\n"
  },
  {
    "path": "web/front/.prettierrc.js",
    "content": "module.exports = {\n  // 基础配置\n  singleQuote: true,\n  semi: false,\n  printWidth: 100,\n  trailingComma: 'none',\n\n  // Vue 模板特殊配置\n  vueIndentScriptAndStyle: true,\n  htmlWhitespaceSensitivity: 'ignore',\n\n  // 属性格式化配置\n  singleAttributePerLine: false, // 不强制每个属性一行\n\n  // 针对不同文件类型的配置\n  overrides: [\n    {\n      files: '*.vue',\n      options: {\n        // Vue 文件特殊配置\n        printWidth: 150, // Vue 文件允许更长的行，防止 v-if 等指令被强制换行\n        htmlWhitespaceSensitivity: 'ignore', // 忽略 HTML 空白符敏感性\n        vueIndentScriptAndStyle: false, // 不缩进 script 和 style 标签\n\n        // 确保指令不会错误换行\n        singleAttributePerLine: false,\n        bracketSameLine: false, // 保持 > 符号在同一行\n\n        // 额外的 Vue 配置\n        proseWrap: 'preserve', // 保持原有的换行\n        useTabs: false,\n        tabWidth: 2\n      }\n    },\n    {\n      files: ['*.js', '*.ts'],\n      options: {\n        printWidth: 100\n      }\n    },\n    {\n      files: ['*.json'],\n      options: {\n        printWidth: 80\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "web/front/LINT_SETUP.md",
    "content": "# Lint 配置说明\n\n本项目已配置了完整的代码检查和格式化工具链，包括 commitlint + husky + eslint + stylelint + lint-staged。\n\n## 📦 已安装的工具\n\n### 提交规范\n\n- `@commitlint/cli` - commitlint 命令行工具\n- `@commitlint/config-conventional` - 常规提交规范配置\n- `husky` - Git hooks 管理工具\n\n### 代码检查\n\n- `eslint` - JavaScript/TypeScript 代码检查\n- `eslint-config-airbnb-base` - Airbnb 代码规范（已定制化调整）\n- `stylelint` - CSS/SCSS/Vue 样式检查\n- `stylelint-config-standard` - 标准样式规范\n- `stylelint-config-recommended-vue` - Vue 样式推荐规范\n\n### 自动化工具\n\n- `lint-staged` - 只对 staged 文件进行检查的工具\n- `prettier` - 代码格式化工具\n\n## 📄 配置文件\n\n### commitlint.config.js\n\n定义了提交消息的规范，支持以下类型：\n\n- `feat`: 新增功能\n- `fix`: 修复缺陷\n- `docs`: 文档变更\n- `style`: 代码格式修改\n- `refactor`: 代码重构\n- `perf`: 性能优化\n- `test`: 测试相关\n- `build`: 构建相关\n- `ci`: CI 配置\n- `chore`: 杂项\n- `revert`: 回滚\n- `wip`: 开发中\n- `workflow`: 工作流程改进\n- `types`: 类型声明修改\n\n### .eslintrc.cjs\n\nESLint 配置，基于 Airbnb 规范并进行了项目定制化调整：\n\n- 支持 TypeScript 和 Vue 3\n- 放宽了部分严格规则以适应项目需求\n- 关闭了与 Prettier 冲突的规则\n\n### stylelint.config.js\n\n样式检查配置：\n\n- 支持 Vue 单文件组件\n- 兼容 Tailwind CSS\n- 排除第三方库文件\n- 支持 Vue 的深度选择器语法\n\n### lint-staged.config.js\n\n定义了对不同文件类型的处理：\n\n- JS/TS 文件：ESLint 检查 + Prettier 格式化\n- Vue 文件：ESLint + Stylelint 检查 + Prettier 格式化\n- CSS 文件：Stylelint 检查 + Prettier 格式化\n- JSON/MD 文件：Prettier 格式化\n\n### .husky/pre-commit\n\n提交前自动运行 `lint-staged`\n\n### .husky/commit-msg\n\n提交时检查提交消息格式\n\n## 🚀 使用方法\n\n### 自动执行（推荐）\n\nGit 提交时会自动执行：\n\n1. `pre-commit` hook 运行 `lint-staged` 检查和修复 staged 文件\n2. `commit-msg` hook 检查提交消息格式\n\n### 手动执行\n\n```bash\n# 检查所有 TypeScript/JavaScript 文件\nnpm run lint\n\n# 检查所有样式文件\nnpm run stylelint\n\n# 只检查 staged 文件\nnpm run lint-staged\n\n# 格式化所有文件\nnpm run format\n\n# 检查提交消息格式\nnpm run commitlint\n```\n\n### 提交消息示例\n\n```bash\n# ✅ 正确格式\ngit commit -m \"feat: 添加用户登录功能\"\ngit commit -m \"fix: 修复登录页面样式问题\"\ngit commit -m \"docs: 更新 README 文档\"\n\n# ❌ 错误格式\ngit commit -m \"add login feature\"\ngit commit -m \"fix bug\"\ngit commit -m \"update\"\n```\n\n## 📋 工作流程\n\n1. **开发阶段**：正常编写代码\n2. **提交前**：\n   - `git add` 暂存要提交的文件\n   - `git commit -m \"feat: 描述\"`\n   - 自动运行 `pre-commit` hook：\n     - 对 staged 文件执行 ESLint 检查和修复\n     - 对 staged 文件执行 Stylelint 检查和修复\n     - 对 staged 文件执行 Prettier 格式化\n   - 自动运行 `commit-msg` hook：\n     - 检查提交消息格式\n3. **如果检查通过**：提交成功\n4. **如果检查失败**：修复问题后重新提交\n\n## 🔧 自定义配置\n\n如需调整规则，可以修改对应的配置文件：\n\n- ESLint 规则：修改 `.eslintrc.cjs`\n- Stylelint 规则：修改 `stylelint.config.js`\n- 提交规范：修改 `commitlint.config.js`\n- Lint-staged 行为：修改 `lint-staged.config.js`\n\n## 🚫 绕过检查（不推荐）\n\n在紧急情况下可以绕过检查：\n\n```bash\n# 绕过所有 hooks\ngit commit --no-verify -m \"emergency fix\"\n```\n\n**注意：绕过检查可能导致代码质量问题，请谨慎使用。**\n\n## 🔍 常见问题排查\n\n### 1. 提交被拒绝\n\n如果提交被拒绝，请检查：\n\n- 提交消息是否符合规范\n- 代码是否通过 lint 检查\n- 是否有语法错误\n\n### 2. v-if 指令格式化问题\n\n如果 Vue 文件中的 `v-if` 指令被错误地换行到最左边：\n\n- 确保使用了项目根目录的 `.vscode/settings.json` 配置\n- 检查是否安装了推荐的 VSCode 扩展\n- 确保 `editor.defaultFormatter` 设置为 `esbenp.prettier-vscode`\n- 重启 VSCode 并重新加载项目\n\n### 3. VSCode 配置\n\n为确保格式化正常工作，请：\n\n- 安装推荐的扩展（会自动提示）\n- 确保 `settings.json` 中的格式化器设置正确\n- 禁用可能冲突的格式化扩展（如 Vetur）\n\n### 4. 格式化不生效\n\n如果自动格式化不生效，请：\n\n- 确保已安装 Prettier 扩展\n- 检查 VSCode 设置是否正确\n- 重启 VSCode\n\n### 5. Stylelint 报错\n\n如果 CSS 样式检查报错，请：\n\n- 检查 CSS 语法是否正确\n- 确认是否使用了不支持的语法\n- 查看是否与 Tailwind 冲突\n\n## 🛠️ VSCode 配置说明\n\n项目已配置了 `.vscode/settings.json` 和 `.vscode/extensions.json`：\n\n- `settings.json`: 确保 VSCode 使用正确的格式化器和设置\n- `extensions.json`: 推荐安装的扩展列表\n- 重要：请确保安装了推荐的扩展，特别是 `esbenp.prettier-vscode`\n\n## 📋 格式化配置\n\n### Prettier 配置 (.prettierrc.js)\n\n- Vue 文件使用 150 字符宽度，防止 `v-if` 等指令被强制换行\n- 支持 Tailwind CSS 类名\n- 保持一致的代码风格\n\n### ESLint 配置 (.eslintrc.cjs)\n\n- 基于 Airbnb 规范，适应项目需求\n- 支持 TypeScript 和 Vue 3\n- 与 Prettier 协同工作\n"
  },
  {
    "path": "web/front/README.md",
    "content": "# 53AIHub 站点前台\n\n<p align=\"center\">基于 Vue3 和 TypeScript 的AI代理管理平台前台站点开发模板</p>\n\n<p align=\"center\">\n<img src=\"https://img.shields.io/github/package-json/dependency-version/alex8088/electron-vite-boilerplate/dev/vite\" alt=\"vite-version\" />\n<img src=\"https://img.shields.io/github/package-json/dependency-version/alex8088/electron-vite-boilerplate/dev/vue\" alt=\"vue-version\" />\n<img src=\"https://img.shields.io/github/package-json/dependency-version/alex8088/electron-vite-boilerplate/dev/typescript\" alt=\"typescript-version\" />\n</p>\n\n## 特性\n\n- 💡 优化的资源处理\n- 🚀 快速的热模块替换（HMR）\n- 🔌 便捷的调试体验\n- 📦 完善的构建流程\n\n## 开发环境配置\n\n### 推荐的 IDE 配置\n\n- [VSCode](https://code.visualstudio.com/) + [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) + [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin)\n\n## 项目设置\n\n### Node 版本要求\n\nv18.12.0\n\n### 安装依赖\n\n```bash\n$ npm install\n```\n\n### 开发模式\n\n```bash\n$ npm run dev\n```\n\n### 构建项目\n\n```bash\n$ npm run build\n```\n### 服务端前台代码更新\n复制`dist/`文件夹下的所有代码， 粘贴到`api/static/renderer`文件夹中\n\n## 技术文档\n\n- [项目配置](https://cn.vitejs.dev/config/)\n- [Vue3 文档](https://cn.vuejs.org/)\n- [TypeScript 文档](https://www.typescriptlang.org/zh/)\n- [Vite 指南](https://cn.vitejs.dev/guide/)\n\n## 代码规范\n\n本项目使用 ESLint 和 Prettier 来确保代码质量和一致性。请确保在提交代码前运行代码检查：\n\n```bash\n$ npm run lint\n```\n\n## 目录结构\n\n```\n├── src/renderer/main     # 源代码目录\n│   ├── api/              # api接口与错误code\n│   ├── assets/           # 样式跟icon\n│   ├── components/       # 组件\n│   ├── directive/        # 自定义指令\n│   ├── views/            # 页面\n│   ├── router/           # 路由配置\n│   ├── typings/          # 类型定义\n│   ├── constants/        # 常用变量\n│   ├── locales/          # 语言包\n│   ├── store/            # 状态管理\n│   ├── utils/            # 工具箱\n│   └── main.ts           # 入口文件\n├── src/renderer/public   # 公共资源\n├── dist/                 # 构建输出目录\n├── .eslintrc.js          # ESLint 配置\n├── .prettierrc           # Prettier 配置\n├── tsconfig.json         # TypeScript 配置\n└── vite.config.ts        # Vite 配置\n```\n"
  },
  {
    "path": "web/front/build/entitlements.mac.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n  <dict>\n    <key>com.apple.security.cs.allow-jit</key>\n    <true/>\n    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>\n    <true/>\n    <key>com.apple.security.cs.allow-dyld-environment-variables</key>\n    <true/>\n  </dict>\n</plist>\n"
  },
  {
    "path": "web/front/commitlint.config.js",
    "content": "module.exports = {\n  extends: ['@commitlint/config-conventional'],\n  rules: {\n    // 类型枚举，git提交type必须是以下类型\n    'type-enum': [\n      2,\n      'always',\n      [\n        'feat', // 新增功能\n        'fix', // 修复缺陷\n        'docs', // 文档变更\n        'style', // 代码格式（不影响功能，例如空格、分号等格式修正）\n        'refactor', // 代码重构（不包括 bug 修复、功能新增）\n        'perf', // 性能优化\n        'test', // 添加疏漏测试或已有测试改动\n        'build', // 构建流程、外部依赖变更（如升级 npm 包、修改 webpack 配置等）\n        'ci', // 修改 CI 配置、脚本\n        'chore', // 对构建过程或辅助工具和库的更改（不影响源文件、测试用例）\n        'revert', // 回滚 commit\n        'wip', // 开发中\n        'workflow', // 工作流程改进\n        'types' // 类型声明或修改\n      ]\n    ],\n    // subject 大小写不做校验\n    'subject-case': [0],\n    // subject 不允许为空\n    'subject-empty': [2, 'never'],\n    // subject 以什么为结束标志，禁用\n    'subject-full-stop': [0, 'never'],\n    // type 必须小写\n    'type-case': [2, 'always', 'lower-case'],\n    // type 不能为空\n    'type-empty': [2, 'never']\n  }\n}\n"
  },
  {
    "path": "web/front/dev-app-update.yml",
    "content": "provider: generic\nurl: http://oss.ibos.cn/common/53ai/app/\n"
  },
  {
    "path": "web/front/electron-builder.yml",
    "content": "appId: com.chat53ai.app\nproductName: 53AI\ndirectories:\n  buildResources: build\nfiles:\n  - '!**/.vscode/*'\n  - '!src/*'\n  - '!electron.vite.config.{js,ts,mjs,cjs}'\n  - '!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}'\n  - '!{.env,.env.*,.npmrc,pnpm-lock.yaml}'\n  - '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}'\nasarUnpack:\n  - resources/**\n  - '**/plugins/*.exe'\nwin:\n  executableName: 53AI\n  target:\n    - nsis\n  protocols:\n    - name: 'HTTP protocol'\n      schemes:\n        - 'http'\n        - 'https'\nnsis:\n  artifactName: ${productName}-${version}.${ext}\n  shortcutName: ${productName}\n  uninstallDisplayName: ${productName}\n  # 创建桌面快捷方式\n  createDesktopShortcut: always\n  # 创建开始菜单快捷方式\n  createStartMenuShortcut: true\n  # 是否创建一键安装程序或辅助\n  oneClick: false\n  # 是否允许用户更改安装目录\n  allowToChangeInstallationDirectory: true\n  # 不显示安装模式页面 默认为使用这台电脑的任何人安装（所有用户）\n  perMachine: true\n\nmac:\n  entitlementsInherit: build/entitlements.mac.plist\n  protocols:\n    - name: 'HTTP protocol'\n      schemes:\n        - 'http'\n        - 'https'\n  extendInfo:\n    - NSCameraUsageDescription: Application requests access to the device's camera.\n    - NSMicrophoneUsageDescription: Application requests access to the device's microphone.\n    - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder.\n    - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder.\n    # 配置不显示在 Dock(程序坞) 内\n    - LSUIElement: 1\n  notarize: false\ndmg:\n  artifactName: ${productName}-${version}.${ext}\nlinux:\n  target:\n    - AppImage\n    - snap\n    - deb\n  maintainer: electronjs.org\n  category: Utility\nappImage:\n  artifactName: ${productName}-${version}.${ext}\nnpmRebuild: false\npublish:\n  provider: generic\n  url: http://oss.ibos.cn/common/53ai/app/\nelectronDownload:\n  mirror: https://npmmirror.com/mirrors/electron/\n"
  },
  {
    "path": "web/front/electron.vite.config.ts",
    "content": "import { resolve } from 'path'\nimport { defineConfig, externalizeDepsPlugin, bytecodePlugin, loadEnv } from 'electron-vite'\nimport { commonPlugins, commonServer, commonResolve, commonCss, commonBuild } from './vite.common'\n\nexport default defineConfig(({ command, mode }) => {\n  const env = loadEnv(mode, process.cwd())\n  return {\n    main: {\n      plugins: [externalizeDepsPlugin(), bytecodePlugin()]\n    },\n    preload: {\n      plugins: [externalizeDepsPlugin(), bytecodePlugin()],\n      build: {\n        rollupOptions: {\n          input: {\n            index: resolve(__dirname, 'src/preload/index.ts'),\n            fastChat: resolve(__dirname, 'src/preload/fastChat.ts'),\n            hoverMenu: resolve(__dirname, 'src/preload/hoverMenu.ts')\n          },\n          output: {\n            format: 'cjs'\n          }\n        }\n      }\n    },\n    renderer: {\n      server: commonServer,\n      resolve: commonResolve,\n      css: commonCss,\n      build: commonBuild,\n      plugins: commonPlugins,\n      define: {\n        'process.env': env\n      }\n    }\n  }\n})\n"
  },
  {
    "path": "web/front/lint-staged.config.js",
    "content": "module.exports = {\n  // TypeScript 和 JavaScript 文件\n  '*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'],\n\n  // Vue 文件\n  '*.vue': ['eslint --fix', 'stylelint --fix', 'prettier --write'],\n\n  // CSS 和样式文件\n  '*.{css,scss,sass,less,styl}': ['stylelint --fix', 'prettier --write'],\n\n  // JSON 和配置文件\n  '*.{json,md,yml,yaml}': ['prettier --write']\n}\n"
  },
  {
    "path": "web/front/native/binding.gyp",
    "content": "{\n  \"targets\": [\n\n    {\n      \"target_name\": \"mouse_select_status\",\n      \"sources\": [ \"mouse_select_status_win.cpp\" ],\n      \"include_dirs\": [\n        \"<!@(node -p \\\"require('node-addon-api').include\\\")\"\n      ],\n      \"dependencies\": [\n        \"<!(node -p \\\"require('node-addon-api').gyp\\\")\"\n      ],\n      \"cflags!\": [ \"-fno-exceptions\" ],\n      \"cflags_cc!\": [ \"-fno-exceptions\" ],\n      \"defines\": [ \"NAPI_DISABLE_CPP_EXCEPTIONS\" ]\n    },\n    {\n      \"target_name\": \"mouse_select_status\",\n      \"sources\": [ \"mouse_select_status_mac.mm\" ],\n      \"include_dirs\": [\n        \"<!@(node -p \\\"require('node-addon-api').include\\\")\"\n      ],\n      \"dependencies\": [\n        \"<!(node -p \\\"require('node-addon-api').gyp\\\")\"\n      ],\n      \"cflags!\": [ \"-fno-exceptions\" ],\n      \"cflags_cc!\": [ \"-fno-exceptions\" ],\n      \"xcode_settings\": {\n        \"GCC_ENABLE_CPP_EXCEPTIONS\": \"YES\",\n        \"CLANG_ENABLE_OBJC_ARC\": \"YES\",\n        \"OTHER_CFLAGS\": [\n          \"-ObjC++\"\n        ]\n      },\n      \"link_settings\": {\n        \"libraries\": [\n          \"$(SDKROOT)/System/Library/Frameworks/Cocoa.framework\"\n        ]\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "web/front/native/mouse_select_status_mac.mm",
    "content": "#import <Foundation/Foundation.h>\n#import <Cocoa/Cocoa.h>\n#import <napi.h>\n\nNapi::Value GetMouseSelectStatus(const Napi::CallbackInfo& info) {\n    Napi::Env env = info.Env();\n\n    @autoreleasepool {\n        NSCursor *currentCursor = [NSCursor currentSystemCursor];\n        if ([currentCursor isEqual:[NSCursor IBeamCursor]]) {\n            return Napi::Number::New(env, 1);\n        }\n    }\n\n    return Napi::Number::New(env, 0);\n}\n\nNapi::Object Init(Napi::Env env, Napi::Object exports) {\n    exports.Set(Napi::String::New(env, \"getMouseSelectStatus\"), Napi::Function::New(env, GetMouseSelectStatus));\n    return exports;\n}\n\nNODE_API_MODULE(mouse_select_status, Init)\n"
  },
  {
    "path": "web/front/native/mouse_select_status_win.cpp",
    "content": "#include <iostream>\n#include <Windows.h>\n\n// 添加 user32.lib 到链接器的附加依赖项\n#pragma comment(lib, \"user32.lib\")\n\nint main()\n{\n    CURSORINFO cursorInfo = { sizeof(CURSORINFO) };\n    GetCursorInfo(&cursorInfo);\n\n    if (cursorInfo.flags == CURSOR_SHOWING)\n    {\n        HCURSOR hCursor = cursorInfo.hCursor;\n        if (hCursor != NULL)\n        {\n            if (hCursor == LoadCursor(NULL, IDC_IBEAM))\n            {\n                // 文本选择状态\n                std::cout << \"1\";\n            }\n            else\n            {\n                // 非文本选择状态\n                std::cout << \"0\";\n            }\n        }\n    }\n    return 0;\n}\n"
  },
  {
    "path": "web/front/package.json",
    "content": "{\n  \"name\": \"53aihub-front\",\n  \"version\": \"0.2.2\",\n  \"description\": \"53aihub-front\",\n  \"author\": \"53aihub\",\n  \"homepage\": \"https://53ai.com/\",\n  \"main\": \"./out/main/index.js\",\n  \"scripts\": {\n    \"format\": \"prettier --write .\",\n    \"lint\": \"eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts,.vue --fix\",\n    \"lint:vue\": \"eslint \\\"src/**/*.vue\\\" --fix\",\n    \"format:vue\": \"prettier --write \\\"src/**/*.vue\\\"\",\n    \"fix:vue-order\": \"npm run lint:vue && npm run format:vue\",\n    \"typecheck:node\": \"tsc --noEmit -p tsconfig.node.json --composite false\",\n    \"typecheck:web\": \"vue-tsc --noEmit -p tsconfig.web.json --composite false\",\n    \"typecheck\": \"npm run typecheck:node && npm run typecheck:web\",\n    \"commitlint\": \"commitlint --edit\",\n    \"stylelint\": \"stylelint \\\"src/**/*.{vue,css,scss,sass,less,styl}\\\" --fix\",\n    \"lint-staged\": \"lint-staged\",\n    \"start\": \"electron-vite dev\",\n    \"dev:op-local\": \"cross-env VITE_PLATFORM=op-local vite\",\n    \"dev\": \"vite\",\n    \"dev:win\": \"electron-vite dev\",\n    \"build\": \"vite build\",\n    \"postinstall\": \"electron-builder install-app-deps\",\n    \"build:unpack\": \"npm run build && electron-builder --dir\",\n    \"build:pure\": \"vite build\",\n    \"build:op-local\": \"cross-env VITE_PLATFORM=op-local vite build\",\n    \"build:win\": \"electron-vite build && electron-builder --win\",\n    \"build:mac\": \"npm run build && electron-builder --mac\",\n    \"build:linux\": \"npm run build && electron-builder --linux\",\n    \"prepare\": \"husky\"\n  },\n  \"dependencies\": {\n    \"@electron-toolkit/preload\": \"^3.0.0\",\n    \"@electron-toolkit/utils\": \"^3.0.0\",\n    \"@jitsi/robotjs\": \"^0.6.13\",\n    \"@mozilla/readability\": \"^0.6.0\",\n    \"auto-launch\": \"^5.0.6\",\n    \"axios\": \"^1.8.3\",\n    \"electron-log\": \"^5.3.2\",\n    \"electron-updater\": \"^6.3.9\",\n    \"element-plus\": \"^2.9.6\",\n    \"file-saver\": \"^2.0.5\",\n    \"hub-ui-x\": \"^0.0.21\",\n    \"markmap-common\": \"^0.18.9\",\n    \"markmap-lib\": \"^0.18.11\",\n    \"markmap-view\": \"^0.18.10\",\n    \"pinia\": \"^3.0.1\",\n    \"qrcode.vue\": \"^3.6.0\",\n    \"sortablejs\": \"^1.15.6\",\n    \"turndown\": \"^7.2.0\",\n    \"uiohook-napi\": \"^1.5.4\",\n    \"vditor\": \"^3.10.9\",\n    \"vis-network\": \"^9.1.9\",\n    \"vue-codemirror\": \"^6.1.1\",\n    \"vue-cropper\": \"^1.0.9\",\n    \"vue-demi\": \"^0.14.6\",\n    \"vue-i18n\": \"^11.1.2\",\n    \"vue-router\": \"^4.5.0\"\n  },\n  \"devDependencies\": {\n    \"@commitlint/cli\": \"^19.8.1\",\n    \"@commitlint/config-conventional\": \"^19.8.1\",\n    \"@electron-toolkit/eslint-config\": \"^1.0.2\",\n    \"@electron-toolkit/eslint-config-ts\": \"^1.0.1\",\n    \"@electron-toolkit/tsconfig\": \"^1.0.1\",\n    \"@rushstack/eslint-patch\": \"^1.7.1\",\n    \"@types/node\": \"^18.19.9\",\n    \"@vitejs/plugin-vue\": \"^5.0.3\",\n    \"@vue/eslint-config-prettier\": \"^9.0.0\",\n    \"@vue/eslint-config-typescript\": \"^12.0.0\",\n    \"autoprefixer\": \"^10.4.13\",\n    \"cross-env\": \"^7.0.3\",\n    \"electron\": \"^28.2.0\",\n    \"electron-builder\": \"^24.9.1\",\n    \"electron-vite\": \"^2.0.0\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-config-airbnb-base\": \"^15.0.0\",\n    \"eslint-plugin-vue\": \"^9.20.1\",\n    \"husky\": \"^9.1.7\",\n    \"lint-staged\": \"^16.1.2\",\n    \"postcss\": \"^8.4.21\",\n    \"prettier\": \"^3.2.4\",\n    \"rollup\": \"^4.41.1\",\n    \"stylelint\": \"^16.21.0\",\n    \"stylelint-config-recommended-vue\": \"^1.6.1\",\n    \"stylelint-config-standard\": \"^38.0.0\",\n    \"tailwindcss\": \"^3.2.7\",\n    \"typescript\": \"^5.8.2\",\n    \"unplugin-auto-import\": \"^19.1.1\",\n    \"unplugin-icons\": \"^22.1.0\",\n    \"unplugin-vue-components\": \"^28.4.1\",\n    \"vite\": \"^5.0.12\",\n    \"vite-plugin-svg-icons\": \"^2.0.1\",\n    \"vite-plugin-wasm\": \"^3.4.1\",\n    \"vue\": \"^3.4.15\",\n    \"vue-tsc\": \"^1.8.27\"\n  }\n}\n"
  },
  {
    "path": "web/front/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {}\n  }\n}\n"
  },
  {
    "path": "web/front/src/main/enums/SystemTypeEnum.ts",
    "content": "/**\n * 系统类型\n */\nclass SystemTypeEnum {\n  /**\n   * Windows\n   */\n  static WIN = 'win32'\n\n  /**\n   * MAC OS\n   */\n  static MAC = 'darwin'\n\n  /**\n   * Linux\n   */\n  static LINUX = 'linux'\n\n  /**\n   * 未知系统\n   */\n  static UNKNOWN = 'unknown'\n\n  /**\n   * 获取系统类型\n   *\n   * @returns {string} 系统类型\n   */\n  static getSystemType(): string {\n    // 获取当前系统类型\n    const platform = process.platform\n    if (platform === SystemTypeEnum.MAC) {\n      return SystemTypeEnum.MAC\n    } else if (platform === SystemTypeEnum.WIN) {\n      return SystemTypeEnum.WIN\n    } else if (platform === SystemTypeEnum.LINUX) {\n      return SystemTypeEnum.LINUX\n    } else {\n      console.log('未知系统 , platform = ', platform)\n      return SystemTypeEnum.UNKNOWN\n    }\n  }\n\n  /**\n   * 是否为 WIN 系统\n   *\n   * @returns {boolean} 是 返回 true 否则 返回 false\n   */\n  static isWin(): boolean {\n    return SystemTypeEnum.getSystemType() === SystemTypeEnum.WIN\n  }\n\n  /**\n   * 是否为 MAC 系统\n   *\n   * @returns {boolean} 是 返回 true 否则 返回 false\n   */\n  static isMac(): boolean {\n    return SystemTypeEnum.getSystemType() === SystemTypeEnum.MAC\n  }\n\n  /**\n   * 是否为 Linux 系统\n   *\n   * @returns {boolean} 是 返回 true 否则 返回 false\n   */\n  static isLinux(): boolean {\n    return SystemTypeEnum.getSystemType() === SystemTypeEnum.LINUX\n  }\n}\n\nexport { SystemTypeEnum }\n"
  },
  {
    "path": "web/front/src/main/helper/web.ts",
    "content": "import { app } from 'electron/main'\nimport { WebContents } from 'electron'\n\n\n\n/**\n * 如果需要，开启开发工具\n * 界面操作：连击左边 control 3 次\n */\nexport function startDevToolsIfNeed(webContents: WebContents) {\n  if (!app.isPackaged) {\n    let clicks = 0\n    let previousClickTime = 0\n    webContents.addListener('before-input-event', (_event, input) => {\n      if (input.type === 'keyDown' && input.code === 'ControlLeft') {\n        const now = +new Date()\n        if (now - previousClickTime < 300) {\n          clicks++\n        } else {\n          clicks = 1\n        }\n        previousClickTime = now\n\n        if (clicks >= 3) {\n          webContents.openDevTools({\n            mode: 'detach',\n            activate: true\n          })\n          webContents.devToolsWebContents?.focus()\n          clicks = 0\n        }\n      }\n    })\n  }\n}\n"
  },
  {
    "path": "web/front/src/main/host.ts",
    "content": "// export const WEB_HOST = 'https://chat.53ai.com'\nexport const WEB_HOST = 'http://chatrc.53ai.com?t=' + Date.now()\n// export const WEB_HOST = 'http://chat53dev.53ai.com'\n// export const WEB_HOST = 'http://192.168.1.81:3000'\n"
  },
  {
    "path": "web/front/src/main/index.ts",
    "content": "import { app, Tray, Menu } from 'electron'\nimport { electronApp, optimizer } from '@electron-toolkit/utils'\nimport path from 'path'\nimport { SystemTypeEnum } from './enums/SystemTypeEnum'\nimport MainService from './service/Main'\n\n// 解决使用 win.hide() 后再使用 win.show() 会引起窗口闪烁问题\napp.commandLine.appendSwitch('wm-window-animations-disabled')\n\nif (!SystemTypeEnum.isMac()) {\n  // 禁用硬件加速\n  app.disableHardwareAcceleration()\n}\n\n// 获取单例锁\nconst gotTheLock = app.requestSingleInstanceLock()\nif (gotTheLock) {\n  // 当多开时，多个实例执行调用 app.requestSingleInstanceLock() 时\n  // 这个事件将在应用程序的首个已经启动的实例中触发\n  app.on('second-instance', (_event, commandLine) => {\n    if (commandLine.includes('--new-window')) {\n      MainService.createMainWindow({ name: 'new-window' })\n    } else {\n      // 处理协议链接\n      const url = commandLine.find((arg) => arg.startsWith('http://') || arg.startsWith('https://'))\n      if (url) {\n        MainService.winSend('new-window', { url })\n      }\n    }\n  })\n  // 处理协议启动\n  app.on('open-url', (_event, url) => {\n    if (url) {\n      MainService.winSend('new-window', { url })\n    }\n  })\n} else {\n  // 如果获取单例锁失败，则表明应用程序已启动了\n  // 这里直接执行退出当前重复实例即可\n  app.quit()\n}\n\n// 将 tray 相关逻辑封装成函数\nfunction registerTray(): Tray {\n  const iconPath = path.join(app.getAppPath(), 'resources', 'icon.png')\n  const tray = new Tray(iconPath)\n  const contextMenu = Menu.buildFromTemplate([\n    { label: '显示', click: () => MainService.show() },\n    { type: 'separator' },\n    { label: '退出', click: () => app.quit() }\n  ])\n\n  tray.on('click', () => MainService.show())\n  tray.setToolTip('53AI')\n  tray.setContextMenu(contextMenu)\n\n  return tray\n}\n\n// 注册任务栏任务\nfunction registerUserTasks(): void {\n  app.setUserTasks([\n    {\n      program: process.execPath,\n      arguments: '--new-window',\n      iconPath: process.execPath,\n      iconIndex: 0,\n      title: '新建窗口',\n      description: '创建一个新的窗口'\n    }\n  ])\n}\n\napp.whenReady().then(() => {\n  electronApp.setAppUserModelId('com.chat53ai')\n  MainService.init()\n\n  registerTray()\n  registerUserTasks()\n\n  app.on('browser-window-created', (_, window) => {\n    optimizer.watchWindowShortcuts(window)\n\n    // 处理启动参数中的协议链接\n    const args = process.argv\n    const url = args.find((arg) => arg.startsWith('http://') || arg.startsWith('https://'))\n    if (url) {\n      MainService.winSend('new-window', { url })\n    }\n  })\n  app.on('web-contents-created', (_, contents) => {\n    contents.setWindowOpenHandler((event) => {\n      MainService.winSend('new-window', { url: event.url })\n      return { action: 'deny' }\n    })\n  })\n})\n\n// Quit when all windows are closed, except on macOS. There, it's common\n// for applications and their menu bar to stay active until the user quits\n// explicitly with Cmd + Q.\napp.on('window-all-closed', () => {\n  if (process.platform !== 'darwin') {\n    app.quit()\n  }\n})\n\n// 优化错误处理\nprocess.on('uncaughtException', (err, _origin) => {\n  console.error('Uncaught Exception:', err)\n  // 可以添加错误上报逻辑\n  if (process.env.NODE_ENV === 'development') {\n    console.error('Stack trace:', err.stack)\n  }\n})\n\n// 添加未处理的 Promise 异常处理\nprocess.on('unhandledRejection', (reason, promise) => {\n  console.error('Unhandled Rejection at:', promise, 'reason:', reason)\n  // 可以添加错误上报逻辑\n})\n"
  },
  {
    "path": "web/front/src/main/service/AutoUpdater.ts",
    "content": "import { ipcMain, app } from 'electron'\nimport { autoUpdater } from 'electron-updater'\n\ntype IPCHandlerParams = {\n  type: string\n  data?: unknown\n}\n\nexport class AutoUpdater {\n  private mainWin: any | null = null\n  private static readonly CHANNEL = 'updater:service'\n  constructor(mainWin) {\n    this.mainWin = mainWin\n    // 新增开发模式强制更新配置\n    // autoUpdater.forceDevUpdateConfig = true\n    // 可选：手动触发下载\n    autoUpdater.autoDownload = false\n\n    this.listenEvents()\n    this.listenWindowEvents()\n  }\n  listenEvents() {\n    autoUpdater.setFeedURL({\n      url: 'http://oss.ibos.cn/common/53ai/app/',\n      provider: 'generic'\n    })\n    autoUpdater.on('update-available', () => {\n      // 显示更新提示\n      this.mainWin?.updaterSend('available')\n    })\n    autoUpdater.on('update-not-available', () => {\n      // 没有可用的更新\n    })\n    autoUpdater.on('error', (err) => {\n      // 更新发生错误\n      console.error('Update error:', err)\n      this.mainWin?.updaterSend('error', err.message)\n    })\n    autoUpdater.on('update-downloaded', () => {\n      // 下载完成\n      this.mainWin?.updaterSend('downloaded')\n    })\n    autoUpdater.on('download-progress', (progress) => {\n      // 下载进度\n      this.mainWin?.updaterSend('progress', progress)\n    })\n  }\n\n  private listenWindowEvents(): void {\n    ipcMain.handle(AutoUpdater.CHANNEL, async (_event: any, params: IPCHandlerParams): Promise<boolean | void | string> => {\n      switch (params.type) {\n        case 'check':\n          try {\n            const info = await autoUpdater.checkForUpdates()\n            const hasUpdate = info ? (info?.updateInfo.version !== app.getVersion()) : false\n            // if (hasUpdate)\n            //   this.mainWin?.updaterSend('available')\n            return hasUpdate\n          } catch (error) {\n            return false\n          }\n          break\n        // 开始下载\n        case 'download':\n          autoUpdater.downloadUpdate()\n          break\n        // 重启\n        case 'restart':\n          autoUpdater.quitAndInstall()\n          break\n        case 'version':\n          return app.getVersion()\n          break\n        default:\n          console.warn(`未知的窗口操作类型: ${params.type}`)\n      }\n    })\n  }\n\n}\n"
  },
  {
    "path": "web/front/src/main/service/Bookmarks.ts",
    "content": "const { app } = require('electron')\nconst fs = require('fs')\nconst path = require('path')\n\nclass BookmarkManager {\n  private bookmarksFile: string\n  private bookmarks: any[]\n  constructor() {\n    this.bookmarksFile = path.join(app.getPath('userData'), 'bookmarks.json')\n    this.bookmarks = this.loadBookmarks()\n  }\n\n  loadBookmarks() {\n    try {\n      if (fs.existsSync(this.bookmarksFile)) {\n        const data = fs.readFileSync(this.bookmarksFile, 'utf8')\n        return JSON.parse(data)\n      }\n    } catch (error) {\n      console.error('Error loading bookmarks:', error)\n    }\n    return []\n  }\n\n  saveBookmarks() {\n    try {\n      fs.writeFileSync(this.bookmarksFile, JSON.stringify(this.bookmarks), 'utf8')\n    } catch (error) {\n      console.error('Error saving bookmarks:', error)\n    }\n  }\n\n  addBookmark(title, url) {\n    this.bookmarks.push({ title, url, createdAt: new Date().toISOString() })\n    this.saveBookmarks()\n  }\n\n  removeBookmark(url) {\n    this.bookmarks = this.bookmarks.filter(bookmark => bookmark.url !== url)\n    this.saveBookmarks()\n  }\n\n  getAllBookmarks() {\n    return this.bookmarks\n  }\n\n  importChromeBookmarks() {\n    try {\n      // Chrome 书签文件的默认路径\n      const chromeBookmarksPath = path.join(\n        process.env.LOCALAPPDATA,\n        'Google/Chrome/User Data/Default/Bookmarks'\n      )\n\n      if (!fs.existsSync(chromeBookmarksPath)) {\n        throw new Error('找不到 Chrome 书签文件')\n      }\n\n      const bookmarksData = fs.readFileSync(chromeBookmarksPath, 'utf8')\n      const bookmarksJson = JSON.parse(bookmarksData)\n\n      // 递归解析书签\n      const parseBookmarks = (node) => {\n        const results: any = []\n        if (node.type === 'url') {\n          results.push({\n            title: node.name,\n            url: node.url,\n            createdAt: new Date(node.date_added / 1000).toISOString()\n          })\n        } else if (node.children) {\n          node.children.forEach(child => {\n            results.push(...parseBookmarks(child))\n          })\n        }\n        return results\n      }\n\n      // 解析书签栏和其他书签\n      const bookmarkBar = bookmarksJson.roots.bookmark_bar\n      const otherBookmarks = bookmarksJson.roots.other\n\n      const newBookmarks = [\n        ...parseBookmarks(bookmarkBar),\n        ...parseBookmarks(otherBookmarks)\n      ]\n\n      // 合并书签，避免重复\n      const existingUrls = new Set(this.bookmarks.map(b => b.url))\n      const uniqueNewBookmarks = newBookmarks.filter(b => !existingUrls.has(b.url))\n\n      this.bookmarks = [...this.bookmarks, ...uniqueNewBookmarks]\n      this.saveBookmarks()\n\n      return uniqueNewBookmarks.length\n    } catch (error) {\n      console.error('导入 Chrome 书签时出错:', error)\n      throw error\n    }\n  }\n}\n\nmodule.exports = BookmarkManager"
  },
  {
    "path": "web/front/src/main/service/Container.ts",
    "content": "import { BrowserView, BrowserViewConstructorOptions } from 'electron'\nimport GNBEventBus from '../helper/event-bus'\nimport { handleOpenWindow, startDevToolsIfNeed } from '../helper/web'\n\n/**\n * Web 容器选项\n */\nexport interface GDWebContainerOptions extends BrowserViewConstructorOptions {\n  /**\n   * 是否使用加载视图\n   */\n  useLoadingView?: boolean\n  /**\n   * 是否使用错误视图\n   */\n  useErrorView?: boolean\n  /**\n   * 是否需要使用网页标题和图标\n   */\n  useHTMLTitleAndIcon?: boolean\n}\n\n/**\n * Web 容器\n */\nexport class GDWebContainer {\n  /**\n   * 唯一 ID\n   */\n  public readonly id: number\n  /**\n   * 封装的视图\n   */\n  public readonly context: BrowserView\n  public leftContext: BrowserView\n  public rightContext: BrowserView\n  /**\n   * 禁用关闭能力\n   */\n  public disableClose = false\n  /**\n   * 配置项\n   */\n  private options: GDWebContainerOptions\n  /**\n   * 加载地址\n   */\n  private url?: string\n  /**\n   * 是否已初始化\n   */\n  private initialized = false\n\n  constructor(options: GDWebContainerOptions = {}) {\n    const defaultOptions: GDWebContainerOptions = {\n      useLoadingView: false,\n      useErrorView: false,\n      useHTMLTitleAndIcon: false\n    }\n    this.options = {\n      ...defaultOptions,\n      ...options\n    }\n    // this.context = new BrowserView(this.options)\n    // this.context.setBackgroundColor('rgba(255, 255, 255, 1)')\n\n    this.leftContext = new BrowserView(this.options)\n    this.rightContext = new BrowserView(this.options)\n    // 设置背景色\n    this.leftContext.setBackgroundColor('rgba(255, 255, 255, 1)')\n    this.rightContext.setBackgroundColor('rgba(255, 255, 255, 1)')\n\n    this.context = this.leftContext\n    this.id = this.leftContext.webContents.id\n  }\n\n  /**\n   * 加载链接\n   * @param url 链接\n   */\n  public async loadURL(url: string): Promise<void> {\n    this.url = url\n    if (!this.initialized) {\n      this.setup()\n      this.initialized = true\n    }\n    this.context.webContents.loadURL(this.url)\n  }\n\n  /**\n   * 重新加载\n   */\n  public reload() {\n    if (this.url) {\n      this.context.webContents.loadURL(this.url)\n    } else {\n      this.context.webContents.reload()\n    }\n  }\n\n  /**\n   * 设置选项\n   * @param options 选项\n   */\n  public async setOptions(options: GDWebContainerOptions) {\n    this.options = {\n      ...this.options,\n      ...options\n    }\n  }\n\n\n  /**\n   * 新增布局设置方法\n   */\n  public setContainerBounds(parentWidth: number, parentHeight: number) {\n    const leftWidth = parentWidth - 400 // 左侧自适应宽度\n    const rightWidth = 400 // 右侧固定宽度\n\n    // 设置左视图布局\n    this.leftContext.setBounds({\n      x: 0,\n      y: 32,\n      width: leftWidth,\n      height: parentHeight\n    })\n\n    // 设置右视图布局\n    this.rightContext.setBounds({\n      x: leftWidth,\n      y: 32,\n      width: rightWidth,\n      height: parentHeight\n    })\n  }\n\n  /**\n   * 执行 JS 方法\n   */\n  public executeJavaScript(script: string) {\n    if (this.context?.webContents?.isDestroyed()) {\n      return\n    }\n    return this.context?.webContents?.executeJavaScript(script).catch((error) => {\n      console.error(error)\n    })\n  }\n\n  /**\n   * 获取当前 URL\n   */\n  public getURL() {\n    return this.url\n  }\n\n  // ================ Setter Getter ================= //\n  private _title = ''\n  private _icon = ''\n\n  /**\n   * 标题\n   */\n  public get title() {\n    return this._title\n  }\n  public get icon() {\n    return this._icon\n  }\n\n  public set title(value: string) {\n    this._title = value\n    this.options.useHTMLTitleAndIcon &&\n      GNBEventBus.shared.emit({\n        eventName: 'desktop.onTabTitle',\n        data: { id: this.id, title: this.title, icon: this.icon }\n      })\n  }\n\n  public set icon(value: string) {\n    this._icon = value\n    this.options.useHTMLTitleAndIcon &&\n      GNBEventBus.shared.emit({\n        eventName: 'desktop.onTabTitle',\n        data: { id: this.id, title: this.title, icon: this.icon }\n      })\n  }\n\n  // ================ Private Methods ================= //\n  private setup() {\n    // 配置页面信息\n    this.configDocumentInfo()\n\n    this.context.webContents.on('render-process-gone', (_event, details) => {\n      console.error(details)\n    })\n    // this.context.webContents.openDevTools({ mode: 'detach' })\n    handleOpenWindow(this.context.webContents)\n\n    startDevToolsIfNeed(this.context.webContents)\n  }\n\n  private configDocumentInfo() {\n    this.context.webContents.on('dom-ready', async () => {\n      const title = this.context.webContents.getTitle()\n      if (!this.title && title) {\n        this.title = title\n      }\n    })\n    this.context.webContents.on('page-favicon-updated', (_, favicons) => {\n      this.icon = favicons && favicons[0] ? favicons[0] : ''\n    })\n  }\n}\n"
  },
  {
    "path": "web/front/src/main/service/FileSystem.ts",
    "content": "import fs from 'fs'\nimport path from 'path'\n\ninterface IFileNode {\n  name: string\n  type: 'file' | 'directory'\n  content?: string\n  children?: IFileNode[]\n  path: string\n}\n\nexport class FileSystem {\n  private root: IFileNode\n\n  constructor() {\n    this.root = {\n      name: 'root',\n      type: 'directory',\n      children: [],\n      path: '/'\n    }\n  }\n\n  // 创建目录\n  createDirectory(dirPath: string): void {\n    const parts = dirPath.split('/').filter(Boolean)\n    let current = this.root\n    let currentPath = ''\n\n    for (const part of parts) {\n      currentPath += '/' + part\n      let node = current.children?.find(child => child.name === part)\n      \n      if (!node) {\n        node = {\n          name: part,\n          type: 'directory',\n          children: [],\n          path: currentPath\n        }\n        current.children = current.children || []\n        current.children.push(node)\n      }\n      \n      current = node\n    }\n  }\n\n  // 创建文件\n  createFile(filePath: string, content: string = ''): void {\n    const parts = filePath.split('/').filter(Boolean)\n    const fileName = parts.pop()\n    if (!fileName) return\n\n    // 确保父目录存在\n    const dirPath = '/' + parts.join('/')\n    this.createDirectory(dirPath)\n\n    // 找到父目录\n    const parentDir = this.findNode(dirPath)\n    if (!parentDir || parentDir.type !== 'directory') return\n\n    // 创建文件节点\n    const fileNode: IFileNode = {\n      name: fileName,\n      type: 'file',\n      content: content,\n      path: dirPath + '/' + fileName\n    }\n\n    parentDir.children = parentDir.children || []\n    const existingFile = parentDir.children.findIndex(child => child.name === fileName)\n    if (existingFile !== -1) {\n      parentDir.children[existingFile] = fileNode\n    } else {\n      parentDir.children.push(fileNode)\n    }\n  }\n\n  // 获取目录结构\n  getStructure(): IFileNode {\n    return this.root\n  }\n\n  // 保存到实际文件系统\n  save(basePath: string): void {\n    const savePath = path.resolve(basePath, 'filesystem.json')\n    fs.writeFileSync(savePath, JSON.stringify(this.root, null, 2), 'utf-8')\n  }\n\n  // 从文件系统加载\n  load(basePath: string): void {\n    const loadPath = path.resolve(basePath, 'filesystem.json')\n    if (fs.existsSync(loadPath)) {\n      const data = fs.readFileSync(loadPath, 'utf-8')\n      this.root = JSON.parse(data)\n    }\n  }\n\n  // 查找节点\n  private findNode(nodePath: string): IFileNode | null {\n    if (nodePath === '/') return this.root\n\n    const parts = nodePath.split('/').filter(Boolean)\n    let current = this.root\n\n    for (const part of parts) {\n      const found = current.children?.find(child => child.name === part)\n      if (!found) return null\n      current = found\n    }\n\n    return current\n  }\n\n  // 读取文件内容\n  readFile(filePath: string): string | null {\n    const node = this.findNode(filePath)\n    if (!node || node.type !== 'file') return null\n    return node.content || null\n  }\n}\n\n/* \nimport { FileSystem } from './service/FileSystem'\n\n// 创建文件系统实例\nconst fs = new FileSystem()\n\n// 创建目录\nfs.createDirectory('/documents/work')\nfs.createDirectory('/documents/personal')\n\n// 创建文件\nfs.createFile('/documents/work/report.txt', '这是工作报告内容')\nfs.createFile('/documents/personal/notes.txt', '这是个人笔记')\n\n// 读取文件内容\nconst content = fs.readFile('/documents/work/report.txt')\nconsole.log('文件内容:', content)\n\n// 获取目录结构\nconst structure = fs.getStructure()\nconsole.log('目录结构:', JSON.stringify(structure, null, 2))\n\n// 保存文件系统状态\nfs.save('./data')\n\n// 加载文件系统状态\nconst newFs = new FileSystem()\nnewFs.load('./data') */"
  },
  {
    "path": "web/front/src/main/service/GlobalShortcutEvent.ts",
    "content": "import { clipboard } from 'electron'\nimport robotjs from '@jitsi/robotjs'\n\nclass GlobalShortcutEvent {\n  private static readonly PLATFORM_CMD = process.platform === 'darwin' ? 'command' : 'control'\n\n  static getSelectedText = async () => {\n    return new Promise<string>((resolve) => {\n      try {\n        const lastText = clipboard.readText('clipboard')\n        const { PLATFORM_CMD } = GlobalShortcutEvent\n        robotjs.keyTap('c', PLATFORM_CMD)\n\n        const newContent = (clipboard.readText('clipboard') || '').trim()\n        // 修复静态属性访问方式\n        resolve(newContent)\n\n        clipboard.writeText(lastText)\n      } catch (error) {\n        resolve('')\n      }\n    })\n  }\n\n  registerAll() { }\n}\nexport default GlobalShortcutEvent\n"
  },
  {
    "path": "web/front/src/main/service/Main.ts",
    "content": "import { ipcMain, session, app } from 'electron'\n// import GDTabPage from './Page'\nimport { MainWin } from '../window/Main'\nimport { HoverMenuWin } from '../window/HoverMenu'\nimport { MouseEventsHandler } from './MouseEventsHandler'\nimport { AutoUpdater } from './AutoUpdater'\n\nimport AutoLaunch from 'auto-launch'\n\ntype IPCHandlerParams = {\n  type: string\n  data?: unknown\n}\n\nconst autoLauncher = new AutoLaunch({\n  name: '53AI',\n  path: process.execPath\n})\n\nclass MainService {\n  private mainWindows: Map<number | string, MainWin> = new Map()\n  private activeWindow: MainWin | null = null\n  private hoverMenuWin: HoverMenuWin | null = null\n  private isLogin: boolean = false\n  private loginData: any = null\n  private setting: any = {}\n  private mouseHandler: any = null\n\n  private static readonly WIN_CHANNEL = 'win:service'\n\n  constructor() {\n\n  }\n\n  public init(): void {\n    this.createMainWindow({}, 'main')\n    this.listenWindowEvents()\n\n    new AutoUpdater(this)\n  }\n\n  public createMainWindow(options = {}, name: string = ''): void {\n    const mainWin = new MainWin(name)\n    mainWin.create(options)\n    this.mainWindows.set(mainWin.id, mainWin)\n    this.activeWindow = mainWin\n\n    mainWin.browser?.on('focus', () => {\n      const activeWin = Array.from(this.mainWindows.values())\n        .find(mw => mw?.id === mainWin.id)\n      console.log('main focus id:' + activeWin?.id)\n      if (activeWin && activeWin.browser) {\n        this.activeWindow = activeWin\n      }\n    })\n\n    mainWin.browser?.on('ready-to-show', () => {\n      if (this.isLogin) {\n        this.broadcastToAll(MainService.WIN_CHANNEL, { type: 'login', data: this.loginData })\n      }\n      this.broadcastToAll(MainService.WIN_CHANNEL, {\n        type: 'setting',\n        data: JSON.stringify({\n          default_browser_enabled: this.checkDefaultBrowser()\n        })\n      })\n    })\n  }\n\n  private getActiveWindow(): MainWin | null {\n    return this.activeWindow\n  }\n\n  public show() {\n    this.getActiveWindow()?.show()\n  }\n\n  public hide() {\n    this.getActiveWindow()?.hide()\n\n  }\n\n  private listenWindowEvents(): void {\n    ipcMain.handle(MainService.WIN_CHANNEL, (_event: any, params: IPCHandlerParams) => {\n      const mainWin = this.getActiveWindow()\n      if (!mainWin) return\n      const data = (params.data || {}) as any\n      console.log('main win params:' + JSON.stringify(params))\n      switch (params.type) {\n        case 'minimize':\n          mainWin.minimize()\n          break\n        case 'maximize':\n          mainWin.maximize()\n          break\n        case 'restore':\n          mainWin.restore()\n          break\n        case 'close':\n          mainWin.hide()\n          break\n        case 'login':\n          this.handleUserLogin(data)\n          break\n        case 'agenthub_login':\n          this.broadcastToAll(MainService.WIN_CHANNEL, { type: 'agenthub_login', data })\n          break\n        case 'agenthub_logout':\n          this.broadcastToAll(MainService.WIN_CHANNEL, { type: 'agenthub_logout', data })\n          break\n        case 'logout':\n          this.handleUserLogout()\n          break\n        case 'open':\n          mainWin.show()\n          this.hoverMenuHide()\n          break\n        case 'hide':\n          mainWin.hide()\n          break\n        case 'setPosition':\n          // left center right\n          mainWin.setPosition(data.position)\n          break\n        case 'test':\n          // left center right\n          mainWin.openDevTools()\n          break\n        case 'setAlwaysOnTop':\n          mainWin.setAlwaysOnTop(data.alwaysOnTop)\n          break\n        case 'setting':\n          this.handleSetting(data)\n          break\n        case 'clearSession':\n          this.clearSession(data.url)\n          break\n        case 'glider:setting':\n          mainWin.show()\n          this.winSend('glider:setting', {})\n          break\n        case 'glider:forbid':\n          this.winSend('glider:forbid', {})\n          break\n        case 'new-window':\n          this.createMainWindow({\n            name: 'new-window',\n            url: data.url\n          })\n          break\n        case 'new-tab':\n          this.winSend('new-tab', data)\n          break\n        default:\n          console.warn(`未知的窗口操作类型: ${params.type}`)\n      }\n    })\n  }\n\n  // private closeWindow(winId: number): void {\n  //   const win = this.mainWindows.get(winId)\n  //   if (win) {\n  //     win.hide()\n  //     if (this.mainWindows.size <= 1) {\n  //       // 如果是最后一个窗口，只是隐藏\n  //       return\n  //     }\n  //     this.mainWindows.delete(winId)\n  //     if (this.activeWindow?.id === winId) {\n  //       this.activeWindow = this.mainWindows.values().next().value\n  //     }\n  //   }\n  // }\n\n  private hoverMenuShow(point: any, text: string): void {\n    if (!this.isLogin) return\n    if (this.hoverMenuWin) {\n      this.hoverMenuWin.show(this.setting, point, text)\n    }\n  }\n  private hoverMenuHide(): void {\n    if (this.hoverMenuWin) {\n      this.hoverMenuWin.hide()\n    }\n  }\n\n  private handleUserLogin(data: any): void {\n    console.log('user login')\n    this.broadcastToAll(MainService.WIN_CHANNEL, { type: 'login', data })\n    this.isLogin = true\n    this.loginData = data\n\n    if (!this.hoverMenuWin) {\n      this.hoverMenuWin = HoverMenuWin.shared\n    }\n  }\n\n  private handleUserLogout(): void {\n    console.log('user logout')\n    this.isLogin = false\n    this.loginData = null\n    this.mainWindows.forEach(win => win.reload())\n\n    if (this.hoverMenuWin) {\n      this.hoverMenuWin.destroy()\n      this.hoverMenuWin = null\n    }\n    if (this.mouseHandler) {\n      this.mouseHandler.destroy()\n      this.mouseHandler = null\n    }\n  }\n\n  private handleSetting(data: any): void {\n    this.setting = data ? JSON.parse(data) : {}\n    console.log('setting sync')\n\n    // 划词功能\n    this.handleGliderSetting()\n    // 浏览器默认打开\n    this.handleProtocols(['http', 'https'], this.setting.default_browser_enabled)\n    // 开机启动\n    this.handleAutoLaunch()\n  }\n  private handleGliderSetting() {\n    // 划词功能\n    if (this.setting.glider_enabled) {\n      if (!this.mouseHandler)\n        this.mouseHandler = new MouseEventsHandler(this.hoverMenuShow.bind(this), this.hoverMenuHide.bind(this))\n    } else {\n      if (this.mouseHandler) {\n        this.mouseHandler.destroy()\n        this.mouseHandler = null\n      }\n    }\n  }\n\n  private handleProtocols(protocols: string[], enable: boolean): void {\n    protocols.forEach(protocol => {\n      const isClient = app.isDefaultProtocolClient(protocol)\n      const darwinArgs = [\n        '--process-path',\n        `\"${process.execPath}\"`,\n        '--open-url'\n      ]\n\n      if (enable && !isClient) {\n        if (process.platform === 'win32') {\n          // Windows 平台特殊处理\n          app.setAsDefaultProtocolClient(protocol, process.execPath, [\n            '--protocol-launcher',\n            '%1'\n          ])\n        } else if (process.platform === 'darwin') {\n          app.setAsDefaultProtocolClient(protocol, process.execPath, darwinArgs)\n        } else {\n          app.setAsDefaultProtocolClient(protocol)\n        }\n      } else if (!enable && isClient) {\n        if (process.platform === 'win32') {\n          app.removeAsDefaultProtocolClient(protocol, process.execPath, [\n            '--protocol-launcher',\n            '%1'\n          ])\n        } else if (process.platform === 'darwin') {\n          app.removeAsDefaultProtocolClient(protocol, process.execPath, darwinArgs)\n        } else {\n          app.removeAsDefaultProtocolClient(protocol)\n        }\n      }\n    })\n  }\n\n  private handleAutoLaunch(): void {\n    autoLauncher.isEnabled().then((isEnabled: boolean) => {\n      if (this.setting.boot_up_enabled) {\n        if (!isEnabled) {\n          autoLauncher.enable()\n        }\n      } else {\n        if (isEnabled) {\n          autoLauncher.disable()\n        }\n      }\n    })\n  }\n\n  private broadcastToAll(event, data: { type: string; data?: any }) {\n    this.mainWindows.forEach(win => {\n      win.send(event, data)\n    })\n  }\n\n  winSend(type: string, data: any) {\n    this.getActiveWindow()?.send(MainService.WIN_CHANNEL, { type, data })\n  }\n\n  updaterSend(type: string, data: any) {\n    this.broadcastToAll('updater:service', { type, data })\n  }\n\n  private async clearSession(url) {\n    const ses = session.defaultSession\n    try {\n      await ses.clearStorageData({ origin: url, storages: ['cookies', 'localstorage', 'cachestorage', 'indexdb'] })\n      return true\n    } catch (error) {\n      console.error('清除站点数据时出错:', error)\n      throw error\n    }\n  }\n\n  public checkDefaultBrowser() {\n    return app.isDefaultProtocolClient('http') && app.isDefaultProtocolClient('https');\n  }\n}\n\nconst mainService = new MainService()\nexport default mainService\n"
  },
  {
    "path": "web/front/src/main/service/MouseEventsHandler.ts",
    "content": "// src/service/MouseEventsHandler.ts\nimport { app, BrowserWindow, screen } from 'electron'\nimport { uIOhook, UiohookMouseEvent } from 'uiohook-napi'\nimport GlobalShortcutEvent from './GlobalShortcutEvent'\nimport { SystemTypeEnum } from '../enums/SystemTypeEnum'\nimport path from 'path'\nimport { spawn } from 'child_process'\n\n\ntype Position = { x: number; y: number }\ntype ShowHandler = (point: any, text: string) => void\ntype HideHandler = () => void\n\nexport class MouseEventsHandler {\n  private mousedownInfo: UiohookMouseEvent | null = null\n  private mousedownTime = 0\n  private showHandler: ShowHandler\n  private hideHandler: HideHandler\n\n  private isShowing = false\n  private scaleFactor: number = 1\n  private lastText: string = ''\n\n\n  constructor(showHandler: ShowHandler, hideHandler: HideHandler\n  ) {\n    this.showHandler = showHandler\n    this.hideHandler = hideHandler\n    this.init()\n    this.updateScaleFactor()\n  }\n\n  private init(): void {\n    uIOhook.start()\n\n    uIOhook.on('mousedown', this.handleMouseDown.bind(this))\n    uIOhook.on('mouseup', this.handleMouseUp.bind(this))\n    uIOhook.on('click', this.handleClick.bind(this))\n  }\n\n  private updateScaleFactor(): void {\n    if (process.platform !== 'win32') {\n      this.scaleFactor = 1\n      return\n    }\n    const currentWindow = BrowserWindow.getFocusedWindow()\n    const targetDisplay = currentWindow\n      ? screen.getDisplayNearestPoint(currentWindow.getBounds())\n      : screen.getPrimaryDisplay()\n\n    this.scaleFactor = targetDisplay.scaleFactor\n  }\n\n  private scalePosition(position: Position): Position {\n    console.log('scalePosition', position)\n    return {\n      x: Math.round(position.x / this.scaleFactor),\n      y: Math.round(position.y / this.scaleFactor)\n    }\n  }\n\n  private async handleMouseDown(e: UiohookMouseEvent): Promise<void> {\n    if (e.button === 1) {\n      this.mousedownInfo = e\n      this.mousedownTime = Date.now()\n    } else {\n      this.mousedownTime = 0\n    }\n  }\n  private async getSelectedText(): Promise<string | null> {\n    return GlobalShortcutEvent.getSelectedText().catch(async () => {\n      await new Promise(resolve => setTimeout(resolve, 50));\n      return GlobalShortcutEvent.getSelectedText();\n    })\n  }\n\n  private isMouseSelectTextStatus(): Promise<number> {\n    return new Promise((resolve, reject) => {\n      if (!SystemTypeEnum.isWin()) {\n        return resolve(1)\n      }\n      let mouseSelectTextStatusPath\n      if (app.isPackaged) {\n        mouseSelectTextStatusPath = path.join(\n          __dirname,\n          '../../../app.asar.unpacked/plugins/mouse-select-text-status.exe'\n        )\n      } else {\n        mouseSelectTextStatusPath = path.join(__dirname, '../../plugins/mouse-select-text-status.exe')\n      }\n      const selectStatusSpawn = spawn(mouseSelectTextStatusPath)\n      // 执行成功回调\n      selectStatusSpawn.stdout.on('data', (data) => {\n        resolve(Number(data.toString()))\n      })\n      // 执行失败回调\n      selectStatusSpawn.stderr.on('data', (data) => {\n        reject(data)\n      })\n    })\n  }\n\n  private async handleMouseUp(e: UiohookMouseEvent): Promise<void> {\n    if (this.mousedownTime && Date.now() - this.mousedownTime >= 200) {\n      if (e.button === 1 && this.mousedownInfo) {\n        if (this.mousedownInfo.x !== e.x || this.mousedownInfo.y !== e.y) {\n          const isSelected = await this.isMouseSelectTextStatus()\n          const selectedText = await this.getSelectedText()\n          const text = isSelected ? selectedText : ''\n          // 如果是划自己的弹窗 则不显示\n          const selfWindow = BrowserWindow.getFocusedWindow()\n          console.log('text:', text)\n          console.log('isSelected:', isSelected)\n          console.log('selfWindow', selfWindow)\n          if (!text || text === this.lastText) return\n          // 应添加窗口位置变化时的缩放因子更新\n          this.updateScaleFactor() // 窗口可能被拖动到不同缩放的显示器\n          await this.showHandler({\n            start: this.scalePosition(this.mousedownInfo),\n            end: this.scalePosition(e),\n          }, text)\n          this.lastText = text\n          this.isShowing = true\n          return\n        }\n      }\n    }\n    this.isShowing = false\n    this.mousedownInfo = null\n  }\n\n  private async handleClick(_e: UiohookMouseEvent): Promise<void> {\n    if (this.isShowing) return\n    await new Promise(resolve => setTimeout(resolve, 200));\n    this.lastText = ''\n    this.hideHandler()\n  }\n\n  public destroy(): void {\n    uIOhook.off('mousedown', this.handleMouseDown)\n    uIOhook.off('mouseup', this.handleMouseUp)\n    uIOhook.off('click', this.handleClick)\n    uIOhook.stop()\n  }\n}\n"
  },
  {
    "path": "web/front/src/main/service/Pages.ts",
    "content": "import { EventEmitter } from 'events'\nimport GNBEventBus from '../helper/event-bus'\nimport GDContainerManager from './ContainerManager'\nimport { BrowserView, BrowserWindow } from 'electron'\nimport { GDWebContainer } from './Container'\n\n/**\n * Tab 栏高度\n */\nconst subPageTabHeight = 32\n\nconst FRAME_READY = 'FRAME_READY'\n\n/**\n * 页面容器管理\n */\nexport default class GDTabPage {\n  private static instance: GDTabPage\n\n  static get shared(): GDTabPage {\n    if (!GDTabPage.instance) {\n      GDTabPage.instance = new GDTabPage()\n    }\n    return GDTabPage.instance\n  }\n\n  /**\n   * 存储的 tabs <url, id>\n   */\n  private tabs: Map<string, number>\n  /**\n   * 记录当前的 URL 集合\n   */\n  private urls: string[]\n  /**\n   * 是否初始化完成\n   */\n  private initialized = false\n  /**\n   * 回调事件\n   */\n  private emitter: EventEmitter\n\n  private mainWin: BrowserWindow | null\n\n  constructor() {\n    this.emitter = new EventEmitter()\n    this.tabs = new Map<string, number>()\n    this.urls = []\n  }\n\n  public init(mainWin: BrowserWindow) {\n    this.mainWin = mainWin\n  }\n\n  // ================ Public Methods ================= //\n  /**\n   * 切换 Tab 页\n   * @param url URL\n   */\n  public async switchTab(url: string): Promise<GDWebContainer> {\n    await this.initFrameIfNeed()\n    let id = this.tabs.get(url)\n    if (!id) {\n      id = this.createTab(url).id\n      this.urls.push(url)\n    }\n    return this.switchTabWithId(id)\n  }\n\n  /**\n   * 切换 Tab 页\n   * @param id 容器 ID\n   */\n  public async switchTabWithId(id: number, notify = true): Promise<GDWebContainer> {\n    console.log(`触发 Tab 切换 id: ${id}`)\n    if (notify) {\n      GNBEventBus.shared.emit({\n        eventName: 'desktop.onSwitchTab',\n        data: { id: id }\n      })\n    }\n    const container = GDContainerManager.shared.getContainer(id)!\n    this.attachContainerIfNeed(container)\n    this.window.setTopBrowserView(container.context)\n    this.removeAllWithoutTab(id)\n    this.window.show()\n    this.window.focus()\n    container.context.webContents.focus()\n    return container\n  }\n\n  /**\n   * 创建 Tab 页\n   * @param url URL\n   */\n  public createTab(url: string, closable = true) {\n    const container = GDContainerManager.shared.createContainer(url, {\n      useHTMLTitleAndIcon: true,\n      useLoadingView: true,\n      useErrorView: true\n    })\n    this.window.addBrowserView(container.context)\n    this.setContainerBounds(container)\n    this.tabs.set(url, container.id)\n    GNBEventBus.shared.emit({\n      eventName: 'desktop.onCreateTab',\n      data: { id: container.id, closable: closable }\n    })\n    return container\n  }\n\n  /**\n   * 关闭标签页\n   * @param id ID\n   */\n  public closeTab(id: number, { needNotifyView = false } = {}): void {\n    const container = GDContainerManager.shared.getContainer(id)\n    if (container) {\n      this.window.removeBrowserView(container.context)\n      container.context.webContents.close()\n    }\n    if (needNotifyView) {\n      GNBEventBus.shared.emit({\n        eventName: 'desktop.onCloseTab',\n        data: { id: id }\n      })\n    }\n    GDContainerManager.shared.removeContainer(id)\n    const url = this.getURLById(id)\n    if (url) {\n      this.deleteURL(url)\n      this.tabs.delete(url)\n    }\n  }\n\n  /**\n   * 通过 URL 关闭标签页\n   * @param url URL\n   */\n  public closeTabByURL(url: string): void {\n    const id = this.tabs.get(url)\n    if (id) {\n      this.closeTab(id, {\n        needNotifyView: true\n      })\n    }\n  }\n\n  /**\n   * 关闭当前标签\n   */\n  public closeCurrentTab() {\n    const id = this.currentTab?.webContents.id\n    if (id) {\n      this.closeTab(id, {\n        needNotifyView: true\n      })\n    }\n  }\n\n  /**\n   * 关闭所有标签页\n   */\n  public closeAllTabs(): void {\n    for (const [_key, id] of this.tabs) {\n      this.closeTab(id)\n    }\n    this.tabs.clear()\n    const views = this.window.getBrowserViews() || []\n    console.log(views.length)\n    for (const view of views) {\n      view.webContents.close()\n    }\n  }\n\n  /**\n   * 刷新当前 Tab\n   */\n  public reloadCurrentTab() {\n    const container = this.getCurrentTabContainer()\n    container?.reload()\n  }\n\n  /**\n   * 当前 Tab\n   */\n  public get currentTab(): BrowserView | undefined {\n    const views = this.window.getBrowserViews()\n    return views.length ? views[views.length - 1] : undefined\n  }\n\n  /**\n   * 聚焦\n   */\n  public focus() {\n    this.window.focus()\n  }\n\n  /**\n   * 设置框架准备完毕\n   */\n  public setFrameReady() {\n    this.emitter.emit(FRAME_READY)\n  }\n\n  public setAllContainerBounds() {\n    this.tabs.forEach((id) => {\n      const container = GDContainerManager.shared.getContainer(id)!\n      this.setContainerBounds(container)\n    })\n  }\n\n  // ================ Private Methods ================= //\n  private get window(): BrowserWindow {\n    return this.mainWin.browser\n  }\n\n  private async initFrameIfNeed(): Promise<void> {\n    if (this.initialized) {\n      return\n    }\n    this.initialized = true\n\n    return new Promise((resolve) => {\n      this.emitter.once(FRAME_READY, () => {\n        resolve()\n      })\n    })\n  }\n\n  private attachContainerIfNeed(container: GDWebContainer) {\n    const exists = this.window.getBrowserViews() || []\n    for (const view of exists) {\n      if (view === container.context) {\n        return\n      }\n    }\n    this.window.addBrowserView(container.context)\n    this.setContainerBounds(container)\n  }\n\n  /**\n   * 通过容器 ID 获取 URL\n   */\n  private getURLById(id: number): string | undefined {\n    for (const [key, value] of this.tabs.entries()) {\n      if (value === id) {\n        return key\n      }\n    }\n    return undefined\n  }\n\n  /**\n   * 在 window 上移除其他 BrowserView\n   */\n  private removeAllWithoutTab(containerId: number) {\n    this.tabs.forEach((id) => {\n      if (id !== containerId) {\n        const container = GDContainerManager.shared.getContainer(id)!\n        this.window.removeBrowserView(container.context)\n      }\n    })\n  }\n\n  /**\n   * 移除 URL\n   */\n  private deleteURL(element: string) {\n    const index = this.urls.findIndex((ele) => ele == element)\n    this.urls.splice(index, 1)\n  }\n\n  /**\n   * 获取当前 Tab 容器\n   */\n  private getCurrentTabContainer() {\n    const id = this.currentTab?.webContents.id\n    if (id) {\n      const container = GDContainerManager.shared.getContainer(id)\n      return container\n    }\n    return undefined\n  }\n\n  private setContainerBounds(container: GDWebContainer) {\n    // container.context.setBounds({\n    //   x: 0,\n    //   y: subPageTabHeight,\n    //   width: this.window.getBounds().width || 1024,\n    //   height: (this.window.getBounds().height || 768) - subPageTabHeight\n    // })\n\n      const { width, height } = this.window.getBounds()\n      const containerHeight = height - subPageTabHeight\n\n      // 调用新的布局方法\n      container.setContainerBounds(width, containerHeight)\n\n      // 将两个视图添加到窗口\n      this.window.addBrowserView(container.leftContext)\n      this.window.addBrowserView(container.rightContext)\n      }\n}\n"
  },
  {
    "path": "web/front/src/main/utils/index.ts",
    "content": "export const sleep = (time): Promise<void> => {\n  return new Promise((resolve) => {\n    setTimeout(() => resolve(), time)\n  })\n}\n"
  },
  {
    "path": "web/front/src/main/utils/validate.ts",
    "content": "/**\n * 检测数据是否空\n *\n * @param date 数据\n * @returns {boolean}\n */\nexport function isNull(date: string | object | unknown): boolean {\n  return date === undefined || date === null || date === ''\n}\n\n/**\n * 检测数据是否不为空\n *\n * @param date 数据\n * @returns {boolean}\n */\nexport function isNotNull(date: string | object | unknown): boolean {\n  return !isNull(date)\n}\n\n/**\n * 检测是否为正确的URL格式\n *\n * @param url url\n * @returns {boolean}\n */\nexport function isUrl(url): boolean {\n  return /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/.test(url)\n}\n\n/**\n * 检测是否不为正确的URL格式\n *\n * @param url url\n * @returns {boolean}\n */\nexport function isNotUrl(url): boolean {\n  return !isUrl(url)\n}\n"
  },
  {
    "path": "web/front/src/main/window/FastChat.ts",
    "content": "import { BrowserWindow, ipcMain, screen } from 'electron'\nimport { SystemTypeEnum } from '../enums/SystemTypeEnum'\n\nimport { WEB_HOST } from '../host'\n\nimport path from 'path'\n\nexport class FastChatWin {\n  private static instance: FastChatWin | null = null\n  private browser: BrowserWindow | null = null\n  private ipcHanlder: any = null\n  private static readonly CHANNEL = 'fastchat:service'\n\n  constructor() {\n    this.initIpcListeners()\n  }\n\n  static get shared(): FastChatWin | null {\n    if (!FastChatWin.instance) {\n      FastChatWin.instance = new FastChatWin()\n    }\n    return FastChatWin.instance\n  }\n\n\n  initIpcListeners(): void {\n    this.ipcHanlder = (_event, { type, data }) => {\n      console.log(data)\n      switch (type) {\n        case 'close':\n          this.hide()\n          break\n      }\n    }\n    ipcMain.on(FastChatWin.CHANNEL, this.ipcHanlder);\n  }\n\n  create(): void {\n    const browser = new BrowserWindow({\n      width: 478,\n      height: 590,\n      show: false,\n      // 跳过任务栏显示\n      skipTaskbar: true,\n      // 关闭阴影效果 否则设置了窗口透明清空下 透明处会显示阴影效果\n      hasShadow: true,\n      // 设置窗口透明\n      transparent: true,\n      // 设置窗口透明色\n      backgroundColor: '#0000',\n      // 去除窗口边框\n      frame: false,\n      // 可调整大小\n      resizable: false,\n      // 自动隐藏菜单栏\n      autoHideMenuBar: true,\n      type: SystemTypeEnum.isMac() ? 'panel' : 'toolbar',\n      alwaysOnTop: true,\n      webPreferences: {\n        preload: path.join(__dirname, '../preload/fastChat.js'),\n        sandbox: false,\n        // 关闭检测同源策略\n        webSecurity: false,\n        // 关闭拼写检查器\n        spellcheck: false\n      }\n    })\n    // 禁用按下F11全屏事件\n    browser.setFullScreenable(false)\n    // 打开开发者工具\n    // browser.webContents.openDevTools({ mode: 'detach' })\n\n    browser.loadURL(WEB_HOST + '/#/desktop/fastchat')\n    this.browser = browser\n  }\n\n  show(): void {\n    this.browser?.setAlwaysOnTop(true, 'pop-up-menu', 1)\n    this.browser?.setVisibleOnAllWorkspaces(true)\n\n    // 获取到鼠标的横坐标和纵坐标\n    const point = screen.getCursorScreenPoint()\n    const currentScrren = screen.getDisplayNearestPoint(point)\n    const width = currentScrren.bounds.width\n    const x = currentScrren.bounds.x\n    const size = 600\n    const position = Math.ceil((width - size) / 2)\n    // 设置坐标的同时设置宽高 否则在多显示器且显示器之间缩放比例不一致的情况下来回切换会导致悬浮球显示错位\n    this.browser?.setBounds({\n      x: x + position,\n      // 屏幕三分之一的地方，有些电脑设置放大后，固定200会溢出屏幕导致显示异常\n      y: currentScrren.bounds.y + Math.ceil(currentScrren.bounds.height * 0.3),\n      width: size,\n      height: size\n    })\n    this.browser?.showInactive()\n  }\n\n  hide(): void {\n    this.browser?.hide()\n  }\n\n  send(type: string, data: any): void {\n    if (this.browser === null) {\n      return\n    }\n    this.browser?.webContents.send(FastChatWin.CHANNEL, {\n      type: type,\n      data: data\n    })\n  }\n\n  destroy(): void {\n    ipcMain.off(FastChatWin.CHANNEL, this.ipcHanlder)\n    this.hide()\n    if (this.browser) {\n      this.browser.destroy()\n      this.browser = null\n    }\n    FastChatWin.instance = null\n  }\n}\n"
  },
  {
    "path": "web/front/src/main/window/HoverMenu.ts",
    "content": "// HoverMenu.ts\nimport { BrowserWindow, ipcMain, screen } from 'electron'\nimport { SystemTypeEnum } from '../enums/SystemTypeEnum'\nimport { FastChatWin } from './FastChat'\nimport path from 'path'\nimport { WEB_HOST } from '../host'\n\nexport class HoverMenuWin {\n  private static instance: HoverMenuWin | null = null\n\n  private fastChatWin: FastChatWin | null = null\n  private browser: BrowserWindow | null = null\n  private ipcHanlder: any = null\n  private static readonly CHANNEL = 'glider:service'\n\n  private selectedText: string = ''\n  // 是否点击了hoverMenu\n  private isClickHoverMenu: boolean = false\n\n  private lastY: { min: number, max: number } = { min: 0, max: 0 }\n  private lastPlacement: string = 'top'\n\n  constructor() {\n    this.fastChatWin = new FastChatWin()\n    this.fastChatWin.create()\n    this.create()\n    this.initIpcListeners()\n    this.initWinListeners()\n  }\n\n  static get shared(): HoverMenuWin {\n    if (!HoverMenuWin.instance) {\n      HoverMenuWin.instance = new HoverMenuWin()\n    }\n    return HoverMenuWin.instance\n  }\n  create(): void {\n    const browser = new BrowserWindow({\n      width: 40,\n      height: 40,\n      show: false,\n      // 跳过任务栏显示\n      skipTaskbar: true,\n      // 关闭阴影效果 否则设置了窗口透明清空下 透明处会显示阴影效果\n      hasShadow: true,\n      // 设置窗口透明\n      transparent: true,\n      // 设置窗口透明色\n      backgroundColor: '#0000',\n      // 去除窗口边框\n      frame: false,\n      // 可调整大小\n      resizable: false,\n      // 自动隐藏菜单栏\n      autoHideMenuBar: true,\n      focusable: false,\n      type: SystemTypeEnum.isMac() ? 'panel' : 'toolbar',\n      alwaysOnTop: true,\n      webPreferences: {\n        preload: path.join(__dirname, '../preload/hoverMenu.js'),\n        sandbox: false,\n        // 关闭检测同源策略\n        webSecurity: false,\n        // 关闭拼写检查器\n        spellcheck: false\n      }\n    })\n    // browser.webContents.openDevTools({ mode: 'detach' })\n    // 禁用按下F11全屏事件\n    browser.setFullScreenable(false)\n    if (false) {\n    } else {\n      browser.loadURL(WEB_HOST + '/#/desktop/glider')\n    }\n\n    this.browser = browser\n  }\n\n  initIpcListeners(): void {\n    this.ipcHanlder = (_event, { type, data }) => {\n      switch (type) {\n        case 'select':\n          this.fastChatWin?.show()\n          this.hide()\n          this.fastChatWin?.send('app', data)\n          this.fastChatWin?.send('submit', this.selectedText)\n          break\n        case 'tap':\n          this.isClickHoverMenu = true\n          break\n        case 'hide':\n          this.hide()\n          break\n      }\n    }\n    ipcMain.on(HoverMenuWin.CHANNEL, this.ipcHanlder)\n  }\n\n  initWinListeners(): void {\n    this.browser?.on('moved', () => {\n      const bounds = this.browser?.getBounds()\n      if (!bounds) return\n      if (bounds.y < this.lastY.min) {\n        this.lastPlacement = 'top'\n      } else if (bounds.y > this.lastY.max) {\n        this.lastPlacement = 'bottom'\n      }\n    })\n  }\n\n  send(type: string, data: any): void {\n    this.browser?.webContents.send(HoverMenuWin.CHANNEL, { type, data })\n  }\n\n  show(_setting: any, point: any, text: string): void {\n    this.selectedText = text\n    this.browser?.setAlwaysOnTop(true, 'pop-up-menu', 1)\n    this.browser?.setVisibleOnAllWorkspaces(true)\n\n    const menuWidth = 600\n    const menuHeight = 600\n    const realHeight = 46\n    let x: number = Math.min(point.start.x, point.end.x)\n    let y: number = 0\n\n    // 获取鼠标所在的屏幕\n    // const displays = screen.getAllDisplays()\n    const cursorPoint = { x: point.start.x, y: point.start.y }\n    const currentDisplay = screen.getDisplayNearestPoint(cursorPoint)\n\n\n    if (this.lastPlacement === 'top') {\n      y = Math.min(point.start.y, point.end.y) - 54\n    } else {\n      y = Math.max(point.start.y, point.end.y) + 10\n    }\n\n    // 确保窗口不超出屏幕边界\n    const bounds = currentDisplay.bounds\n\n    // 调整 x 坐标，确保不超出屏幕右侧\n    if (x + menuWidth > bounds.x + bounds.width) {\n      x = bounds.x + bounds.width - menuWidth\n    }\n\n    // 确保不超出屏幕左侧\n    if (x < bounds.x) {\n      x = bounds.x\n    }\n\n    // 调整 y 坐标，确保不超出屏幕底部\n    if (y + realHeight > bounds.y + bounds.height) {\n      y = bounds.y + bounds.height - realHeight\n      this.lastPlacement = 'top' // 强制改为顶部显示\n    }\n\n    // 确保不超出屏幕顶部\n    if (y < bounds.y) {\n      y = bounds.y\n      this.lastPlacement = 'bottom' // 强制改为底部显示\n    }\n\n    this.lastY = {\n      min: Math.min(point.start.y, point.end.y),\n      max: Math.max(point.start.y, point.end.y)\n    }\n\n    this.browser?.showInactive()\n    // 一定要放在showInactive后面，不然位置会不对\n    this.browser?.setBounds({\n      x,\n      y,\n      width: menuWidth,\n      height: menuHeight\n    });\n\n    // this.browser?.webContents.once('did-finish-load', () => {\n    //   this.send(HoverMenuWin.CHANNEL, {\n    //     type: 'setting',\n    //     data: { glider_menus: _setting.glider_menus }\n    //   })\n    // })\n  }\n  hide(): void {\n    if (this.isClickHoverMenu) {\n      this.isClickHoverMenu = false;\n      return;\n    }\n    this.browser?.hide()\n  }\n\n  destroy(): void {\n    ipcMain.off(HoverMenuWin.CHANNEL, this.ipcHanlder)\n    this.hide()\n\n    if (this.fastChatWin) {\n      this.fastChatWin.destroy()\n      this.fastChatWin = null\n    }\n\n    if (this.browser) {\n      this.browser.destroy()\n      this.browser = null\n    }\n\n    HoverMenuWin.instance = null\n  }\n}\n"
  },
  {
    "path": "web/front/src/main/window/Main.ts",
    "content": "import { app, BrowserWindow, screen } from 'electron'\nimport { join } from 'path'\nimport { is } from '@electron-toolkit/utils'\nimport icon from '../../../resources/icon.png?asset'\n\nconst WINDOW_WIDTH = 1280\nconst WINDOW_HEIGHT = 960\n\nexport class MainWin {\n  public browser: BrowserWindow | null = null\n\n  public readonly id: number | string\n\n  private static winCounter = 0\n\n  private static readonly CHANNEL = 'win:service'\n\n  constructor(id?: number | string) {\n    this.id = id || MainWin.winCounter++\n  }\n\n  public create(options: { name?: string; url?: string } = {}): void {\n    const browser = new BrowserWindow({\n      width: WINDOW_WIDTH,\n      height: WINDOW_HEIGHT,\n      frame: false,\n      show: false,\n      autoHideMenuBar: true,\n      ...(process.platform === 'linux' ? { icon } : {}),\n      webPreferences: {\n        preload: join(__dirname, '../preload/index.js'),\n        webSecurity: false, // 禁用同源策略（慎用）\n        nodeIntegration: true, // 根据需求决定是否开启\n        webviewTag: true, // 启用 WebView 标签,\n        // 关闭拼写检查器\n        spellcheck: false\n      }\n    })\n    options.name = options.name ?? 'main'\n    // browser.webContents.openDevTools()\n    // this.openDevTools()\n    if (is.dev && process.env.ELECTRON_RENDERER_URL) {\n      browser.loadURL(\n        `${process.env.ELECTRON_RENDERER_URL}?window=${options.name}${options.url ? `&url=${options.url}` : ''}#/desktop`\n      )\n    } else {\n      const filePath = join(__dirname, '../renderer/index.html')\n      browser.loadFile(filePath, {\n        hash: 'desktop',\n        query: {\n          window: options.name,\n          ...(options.url ? { url: options.url } : {})\n        }\n      })\n    }\n\n    this.browser = browser\n    this.initBrowserListeners()\n    browser.webContents.setWindowOpenHandler((event) => {\n      console.log('setWindowOpenHandler')\n      this.send(MainWin.CHANNEL, { type: 'new-window', data: { url: event.url } })\n      return {\n        action: 'deny'\n      }\n    })\n  }\n\n  private initBrowserListeners(): void {\n    this.browser?.on('ready-to-show', () => {\n      this.browser?.show()\n    })\n    /**\n     * 主窗口关闭事件\n     */\n    this.browser?.on('close', (e) => {\n      console.log('关闭主窗口')\n      // app.quit()\n      // 当只剩最后一个窗口时退出应用\n      if (BrowserWindow.getAllWindows().length === 1) {\n        app.quit()\n      } else {\n        e.preventDefault()\n        this.browser?.destroy()\n        this.browser = null\n      }\n    })\n\n    /**\n     * 主窗口显示时触发事件\n     */\n    // this.browser?.on('focus', () => {\n    //   console.log('main show')\n    // })\n\n    /**\n     * 窗口失去焦点事件\n     */\n    // this.browser?.on('blur', () => {\n    //   console.log('main blur')\n    // })\n\n    this.browser?.on('maximize', () => {\n      this.send(MainWin.CHANNEL, { type: 'maximize' })\n    })\n    this.browser?.on('unmaximize', () => {\n      this.send(MainWin.CHANNEL, { type: 'unmaximize' })\n    })\n  }\n\n  // 获取窗口状态\n  public isDestroyed(): boolean {\n    return this.browser?.isDestroyed() ?? true\n  }\n\n  public isFocused(): boolean {\n    return this.browser?.isFocused() ?? false\n  }\n\n  public getBounds(): Electron.Rectangle {\n    return this.browser?.getBounds() ?? { x: 0, y: 0, width: 0, height: 0 }\n  }\n\n  public openDevTools(): void {\n    this.browser?.webContents.openDevTools({ mode: 'detach' })\n  }\n\n  public send(type: string, data: any): void {\n    this.browser?.webContents.send(type, data)\n  }\n\n  // 设置窗口位置\n  public setPosition(position: 'left' | 'center' | 'right') {\n    if (!this.browser) return\n\n    const { width: screenWidth, height: screenHeight } = screen.getPrimaryDisplay().workAreaSize\n    const windowWidth = 400\n    const windowHeight = WINDOW_HEIGHT\n    let x = 0\n    let y = 0\n\n    switch (position) {\n      case 'left':\n        x = 0\n        this.browser.setSize(windowWidth, windowHeight)\n        break\n      case 'right':\n        x = screenWidth - windowWidth\n        this.browser.setSize(windowWidth, windowHeight)\n        break\n      case 'center':\n        x = Math.floor((screenWidth - WINDOW_WIDTH) / 2)\n        y = Math.floor((windowHeight - windowHeight) / 2)\n        this.browser.setSize(WINDOW_WIDTH, windowHeight)\n        break\n    }\n\n    y = Math.floor((screenHeight - windowHeight) / 2)\n    this.browser.setPosition(x, y)\n  }\n\n  // 设置置顶\n  public setAlwaysOnTop(alwaysOnTop: boolean) {\n    this.browser?.setAlwaysOnTop(alwaysOnTop)\n  }\n\n  public show() {\n    this.browser?.show()\n  }\n\n  public hide() {\n    if (this.id === 'main') this.browser?.hide()\n    else {\n      this.destroy()\n    }\n  }\n\n  public reload() {\n    this.browser?.reload()\n  }\n\n  public minimize() {\n    this.browser?.minimize()\n  }\n\n  public maximize() {\n    if (!this.browser) return\n    if (this.browser.isMaximized()) {\n      this.browser.unmaximize()\n    } else {\n      this.browser.maximize()\n    }\n  }\n\n  public restore() {\n    this.browser?.restore()\n  }\n\n  // 添加销毁方法\n  public destroy(): void {\n    if (this.browser) {\n      // 注销快捷键\n      this.browser.destroy()\n      this.browser = null\n    }\n  }\n}\n"
  },
  {
    "path": "web/front/src/preload/fastChat.ts",
    "content": "import { contextBridge, ipcRenderer } from 'electron'\nimport { electronAPI } from '@electron-toolkit/preload'\n\n// Custom APIs for renderer\n\nconst $chat53ai = {\n  $win: ({ type, data }) => ipcRenderer.invoke('win:service', { type, data }),\n  $fastchat: ({ type, data }) => ipcRenderer.send('fastchat:service', { type, data }),\n  $on: (event, callback) => ipcRenderer.on(event, callback),\n  $off: (event, callback) => ipcRenderer.off(event, callback),\n  $once: (event, callback) => ipcRenderer.once(event, callback),\n}\n\n// Use `contextBridge` APIs to expose Electron APIs to\n// renderer only if context isolation is enabled, otherwise\n// just add to the DOM global.\nif (process.contextIsolated) {\n  try {\n    contextBridge.exposeInMainWorld('electron', electronAPI)\n    contextBridge.exposeInMainWorld('$chat53ai', $chat53ai)\n  } catch (error) {\n    console.error(error)\n  }\n} else {\n  // @ts-ignore (define in dts)\n  window.electron = electronAPI\n  // @ts-ignore (define in dts)\n  window.$chat53ai = $chat53ai\n}\n"
  },
  {
    "path": "web/front/src/preload/hoverMenu.ts",
    "content": "import { contextBridge, ipcRenderer } from 'electron'\nimport { electronAPI } from '@electron-toolkit/preload'\n\nconst $chat53ai = {\n  $win: ({ type, data }) => ipcRenderer.invoke('win:service', { type, data }),\n  $glider: ({ type, data }) => ipcRenderer.send('glider:service', { type, data }),\n  $on: (event, callback) => ipcRenderer.on(event, callback),\n  $off: (event, callback) => ipcRenderer.off(event, callback),\n  $once: (event, callback) => ipcRenderer.once(event, callback),\n}\n\n// Use `contextBridge` APIs to expose Electron APIs to\n// renderer only if context isolation is enabled, otherwise\n// just add to the DOM global.\nif (process.contextIsolated) {\n  try {\n    contextBridge.exposeInMainWorld('electron', electronAPI)\n    contextBridge.exposeInMainWorld('$chat53ai', $chat53ai)\n  } catch (error) {\n    console.error(error)\n  }\n} else {\n  // @ts-ignore (define in dts)\n  window.electron = electronAPI\n  // @ts-ignore (define in dts)\n  window.$chat53ai = $chat53ai\n}\n"
  },
  {
    "path": "web/front/src/preload/index.ts",
    "content": "import { contextBridge, ipcRenderer } from 'electron'\nimport { electronAPI } from '@electron-toolkit/preload'\nimport path from 'path'\n\n// Custom APIs for renderer\nconst $chat53ai = {\n  $win: ({ type, data }) => ipcRenderer.invoke('win:service', { type, data }),\n  $updater: ({ type, data }) => ipcRenderer.invoke('updater:service', { type, data }),\n  $agenthub: ({ type, data }) => ipcRenderer.invoke('agenthub:service', { type, data }),\n  $bookmarks: ({ type, data }) => ipcRenderer.invoke('bookmarks:service', { type, data }),\n  $on: (event, callback) => ipcRenderer.on(event, callback),\n  $off: (event, callback) => ipcRenderer.off(event, callback),\n  $once: (event, callback) => ipcRenderer.once(event, callback),\n  getPreloadPath: () => {\n    return 'file://' + path.join(__dirname, './index.js')\n  },\n  getPublicPath: (name) => {\n    return 'file://' + path.join(__dirname, '../renderer/', name)\n  },\n}\n\n// Use `contextBridge` APIs to expose Electron APIs to\n// renderer only if context isolation is enabled, otherwise\n// just add to the DOM global.\nif (process.contextIsolated) {\n  try {\n    contextBridge.exposeInMainWorld('electron', electronAPI)\n    contextBridge.exposeInMainWorld('$chat53ai', $chat53ai)\n  } catch (error) {\n    console.error(error)\n  }\n} else {\n  // @ts-ignore (define in dts)\n  window.electron = electronAPI\n  // @ts-ignore (define in dts)\n  window.$chat53ai = $chat53ai\n}\n"
  },
  {
    "path": "web/front/src/renderer/index.html",
    "content": "<!doctype html>\n<html>\n\n<head>\n  <meta charset=\"UTF-8\" />\n  <title></title>\n  <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->\n\n  <!-- <meta http-equiv=\"Content-Security-Policy\"\n    content=\"default-src 'self' 'unsafe-eval' 'unsafe-inline' data: http: https:;\"> -->\n  <!-- <meta http-equiv=\"Content-Security-Policy\" content=\"script-src 'self'; style-src 'self' 'unsafe-inline'; \" /> -->\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n  <style>\n    html,\n    body,\n    #app {\n      margin: 0;\n      padding: 0;\n      width: 100%;\n      height: 100%;\n      overflow: hidden;\n    }\n  </style>\n</head>\n\n<body spellcheck=\"false\">\n  <script>\n    function getSearchParam() {\n      const search = location.search.split('?')[1] || ''\n      const reg = /([^?&=]+)=([^?&=]+)/g\n      const params = {}\n      search.match(reg)?.forEach((item) => {\n        const [key, value] = item.split('=')\n        params[key] = value\n      })\n      return params\n    }\n    function joinSearchParam(params = {}) {\n      let search = ''\n      Object.keys(params).forEach((key) => {\n        search += `${key}=${params[key]}&`\n      })\n      if (search) search = `?${search}`\n      return search\n    }\n    const search_params = getSearchParam()\n    if (search_params.access_token) {\n      localStorage.removeItem('access_token')\n      localStorage.setItem('access_token', search_params.access_token)\n      delete search_params.access_token\n      delete search_params.eid\n      delete search_params.from_origin\n      location.href = location.origin + location.pathname\n    }\n  </script>\n  <div id=\"app\"></div>\n  <script type=\"module\" src=\"/main/main.ts\"></script>\n</body>\n\n</html>\n"
  },
  {
    "path": "web/front/src/renderer/main/App.vue",
    "content": "<template>\n  <ElConfigProvider :locale=\"zhCn\" :input=\"{ spellcheck: false }\">\n    <LoginModal ref=\"loginModalRef\" />\n    <ExpireModal ref=\"expireModalRef\" />\n    <RouterView />\n  </ElConfigProvider>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, nextTick, watch } from 'vue'\nimport { ElConfigProvider, ElMessageBox } from 'element-plus'\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\nimport settingApi from '@/api/modules/setting'\n\nimport LoginModal from './components/LoginModal/index.vue'\nimport ExpireModal from './components/ExpireModal/index.vue'\nimport { useUserStore } from '@/stores/modules/user'\n\nimport eventBus from '@/utils/event-bus'\nimport { shouldShowReminder, recordReminderShown, STORAGE_KEYS } from '@/utils/storage'\nimport { STORAGE_CONFIG } from '@/constants/storage'\n\nimport { EVENT_NAMES } from '@/constants/events'\nimport subscriptionApi from './api/modules/subscription'\n\nconst loginModalRef = ref<InstanceType<typeof LoginModal>>()\nconst expireModalRef = ref<InstanceType<typeof ExpireModal>>()\n\nconst userStore = useUserStore()\n\n// 将插入样式和脚本的函数移到 onMounted 外部，提高可读性和复用性\nconst insertStyle = (content: string) => {\n  if (!content) return\n\n  const trimmed = content.trim()\n  const type = 'style'\n  const tag = `<${type}`\n  try {\n    if (trimmed.toLowerCase().startsWith(tag)) {\n      document.head.insertAdjacentHTML('beforeend', trimmed)\n    } else {\n      const element = document.createElement(type)\n      element.innerHTML = trimmed\n      document.head.appendChild(element)\n    }\n  } catch (error) {\n    console.error(`Failed to insert ${type} content:`, error)\n  }\n}\n\nconst insertScript = (content: string) => {\n  if (!content) return\n\n  const trimmed = content.trim()\n  const node = document.createElement('div')\n  node.innerHTML = trimmed\n  const scripts = node.querySelectorAll('script')\n\n  if (scripts.length) {\n    scripts.forEach((script) => {\n      const newScript = document.createElement('script')\n      // Copy all attributes from the original script element\n      Array.from(script.attributes).forEach((attr) => {\n        newScript.setAttribute(attr.name, attr.value)\n      })\n\n      // If no src attribute, set type and content\n      if (!script.src) {\n        newScript.type = 'text/javascript'\n        newScript.appendChild(document.createTextNode(script.innerHTML))\n      }\n      document.body.appendChild(newScript)\n    })\n  } else {\n    const newScript = document.createElement('script')\n    newScript.type = 'text/javascript'\n    newScript.appendChild(document.createTextNode(content))\n    document.body.appendChild(newScript)\n  }\n}\n\nconst checkSubscriptionExpire = async () => {\n  await nextTick()\n\n  // 检查是否需要显示过期提醒（使用通用方法）\n  if (!shouldShowReminder(STORAGE_KEYS.EXPIRE_REMINDER, userStore.info.group_expire_time)) {\n    return\n  }\n\n  const expireTime = userStore.info.group_expire_time\n  const minExpireDay = STORAGE_CONFIG.MIN_EXPIRE_DAY\n\n  // 情况: 已过期 | 即将过期（小于配置的最小天数）\n  if (userStore.info.group_isexpired || userStore.info.group_expire_day < minExpireDay) {\n    expireModalRef.value?.open({\n      group_name: userStore.info.group_name,\n      day: userStore.info.group_expire_day,\n      expire_time: expireTime\n    })\n    recordReminderShown(STORAGE_KEYS.EXPIRE_REMINDER, expireTime)\n  }\n}\n\nwatch(\n  () => userStore.is_login,\n  () => {\n    if (userStore.is_login) {\n      setTimeout(() => {\n        checkSubscriptionExpire()\n      }, 1000)\n    }\n  },\n  { immediate: true }\n)\n\nonMounted(() => {\n  const search = new URLSearchParams(window.location.search)\n\n  if (search.get('login_way') === 'wechat_login') {\n    loginModalRef.value?.open({ way: 'wechat_login', openid: search.get('openid') || '', unionid: search.get('unionid') || '' })\n  } else if (search.get('login_way') === 'wecom_login') {\n    if (search.get('errorcode') === '-7') {\n      ElMessageBox.confirm((window as any).$t('login.wecom_login_error'), (window as any).$t('common.tip'), {\n        type: 'warning',\n        showCancelButton: false\n      })\n    }\n  }\n  // 双层判断，防止支付宝支付成功后，页面刷新，导致搜索参数丢失\n  if (search.get('method') === 'alipay.trade.page.pay.return' && search.get('out_trade_no')) {\n    // 支付宝支付成功\n    const order_id = search.get('out_trade_no')\n    subscriptionApi.getOrderStatus({ order_id })\n    // 删除支付宝支付成功后的搜索参数\n    const delete_keys = [\n      'charset',\n      'method',\n      'app_id',\n      'utf-8',\n      'out_trade_no',\n      'sign',\n      'total_amount',\n      'trade_no',\n      'auth_app_id',\n      'version',\n      'sign_type',\n      'seller_id',\n      'timestamp'\n    ]\n    delete_keys.forEach((key) => {\n      search.delete(key)\n    })\n    window.location.search = search.toString()\n  }\n\n  settingApi.group\n    .get('third_party_statistic')\n    .then((res) => {\n      const items = {\n        style: res.data.find((item) => item.key === 'third_party_statistic_css')?.value || '',\n        script: res.data.find((item) => item.key === 'third_party_statistic_header')?.value || ''\n      }\n\n      insertStyle(items.style)\n      insertScript(items.script)\n    })\n    .catch((error) => {\n      console.error('Failed to fetch third party statistic settings:', error)\n    })\n\n  // 保留原有的事件监听，用于处理登录成功后的情况\n  eventBus.on(EVENT_NAMES.LOGIN_SUCCESS, () => {\n    checkSubscriptionExpire()\n  })\n})\n</script>\n"
  },
  {
    "path": "web/front/src/renderer/main/api/code.ts",
    "content": "// 使用枚举替代常量\nexport const RESPONSE_CODE = {\n  SUCCESS: 0,\n  PARAM_ERROR: 1,\n  DATABASE_ERROR: 2,\n  NETWORK_ERROR: 3,\n  SYSTEM_ERROR: 4,\n  AUTH_ERROR: 5,\n  NOT_FOUND_ERROR: 6,\n  UNAUTHORIZED_ERROR: 7,\n  FILE_ERROR: 8,\n  FORBIDDEN_ERROR: 9,\n  AGENT_ERROR: 10,\n  TOKEN_EXPIRED_ERROR: 11,\n\n  VERIFICATION_CODE_ERROR: -14,\n\n  // 未认证被拦截\n  UNAUTHORIZED_INTERCEPTED: 1000,\n} as const\n\nexport type ResponseCode = typeof RESPONSE_CODE[keyof typeof RESPONSE_CODE]\n\nexport const RESPONSE_STATUS = {\n  SUCCESS: 200,\n  BAD_REQUEST: 400,\n  UNAUTHORIZED: 401,\n  FORBIDDEN: 403,\n  NOT_FOUND: 404,\n  INTERNAL_SERVER_ERROR: 500,\n  BAD_GATEWAY: 502,\n  SERVICE_UNAVAILABLE: 503,\n  GATEWAY_TIMEOUT: 504,\n} as const\n\nexport type ResponseStatus = typeof RESPONSE_STATUS[keyof typeof RESPONSE_STATUS]\n\nexport const ResponseMessage = {\n  Canceled: 'canceled',\n} as const\n\nexport const RESPONSE_CODE_MESSAGE_MAP = new Map([\n  [RESPONSE_CODE.SUCCESS, 'response_code.success'],\n  [RESPONSE_CODE.PARAM_ERROR, 'response_code.param_error'],\n  [RESPONSE_CODE.DATABASE_ERROR, 'response_code.database_error'],\n  [RESPONSE_CODE.NETWORK_ERROR, 'response_code.network_error'],\n  [RESPONSE_CODE.SYSTEM_ERROR, 'response_code.system_error'],\n  [RESPONSE_CODE.AUTH_ERROR, 'response_code.auth_error'],\n  [RESPONSE_CODE.NOT_FOUND_ERROR, 'response_code.not_found_error'],\n  [RESPONSE_CODE.UNAUTHORIZED_ERROR, 'response_code.unauthorized_error'],\n  [RESPONSE_CODE.FILE_ERROR, 'response_code.file_error'],\n  [RESPONSE_CODE.FORBIDDEN_ERROR, 'response_code.forbidden_error'],\n  [RESPONSE_CODE.AGENT_ERROR, 'response_code.agent_error'],\n  [RESPONSE_CODE.TOKEN_EXPIRED_ERROR, 'response_code.token_expired_error'],\n  [RESPONSE_CODE.VERIFICATION_CODE_ERROR, 'response_code.verification_code_error'],\n])\n\n// 错误码映射\nexport const ERROR_MESSAGES = new Map([\n  [RESPONSE_STATUS.BAD_REQUEST, 'response_status.400'],\n  [RESPONSE_STATUS.UNAUTHORIZED, 'response_status.401'],\n  [RESPONSE_STATUS.FORBIDDEN, 'response_status.403'],\n  [RESPONSE_STATUS.NOT_FOUND, 'response_status.404'],\n  [RESPONSE_STATUS.SERVICE_UNAVAILABLE, 'response_status.503'],\n  [RESPONSE_STATUS.BAD_GATEWAY, 'response_status.502'],\n  [RESPONSE_STATUS.INTERNAL_SERVER_ERROR, 'response_status.500'],\n  [RESPONSE_STATUS.GATEWAY_TIMEOUT, 'response_status.504'],\n])\n\nexport const RESPONSE_MESSAGE_MAP = new Map([\n  // ['unauthorized: user not found', 'response_message.user_not_found'],\n  ['unauthorized: user not found', 'not_tip'],\n  ['unauthorized: record not found', 'not_tip'],\n  ['param error: username already exists', 'response_message.username_already_exists'],\n  ['Invalid or expired verification code', 'response_message.username_or_password_is_incorrect'],\n  ['unauthorized: username or password is incorrect', 'response_message.username_or_password_is_incorrect'],\n  ['auth failed: This email has been bound by another user', 'response_message.email_already_bind'],\n  ['auth failed: This mobile has been bound by another user', 'response_message.mobile_already_bind'],\n  ['param error: This WeChat account is already bound to another user', 'response_message.wechat_already_bind']\n])\n\n"
  },
  {
    "path": "web/front/src/renderer/main/api/config.ts",
    "content": "import axios, { type AxiosResponse, type AxiosRequestConfig } from 'axios'\n\nimport { generateSignParams, generateIbosSignParams } from './signature'\nimport { RESPONSE_CODE, RESPONSE_STATUS } from './code'\nimport { API_HOST } from './host'\n\n// 定义重试配置接口\ninterface RetryConfig {\n  retry: number\n  retryDelay: number\n  count?: number\n}\n\n// 扩展 AxiosRequestConfig 类型\ndeclare module 'axios' {\n  export interface AxiosRequestConfig {\n    // 重试配置\n    retryConfig?: RetryConfig\n    // ibos签名\n    ibos_sign?: boolean\n    // 手机号签名\n    sign?: boolean\n    // 需要身份验证\n    requiresAuth?: boolean\n  }\n}\n\nconst service = axios.create({\n  baseURL: API_HOST\n})\n\n// 默认重试配置\nconst defaultRetryConfig: RetryConfig = {\n  count: 1,\n  retry: 3, // 最大重试次数\n  retryDelay: 1000 // 重试延迟时间（毫秒）\n}\n\nservice.interceptors.request.use(\n  (config) => {\n    const params = config.params || {}\n    const access_token = params.access_token || localStorage.getItem('access_token') || ''\n    if (access_token) config.headers.set('Authorization', `Bearer ${access_token}`)\n\n    // 如果需要身份验证，但没有token，则返回200, code 返回特定的1000\n    if (config.requiresAuth && !access_token) {\n      const error = new Error('Authentication required')\n      ;(error as any).response = {\n        status: RESPONSE_STATUS.SUCCESS,\n        data: {\n          code: RESPONSE_CODE.UNAUTHORIZED_INTERCEPTED,\n          message: 'Authentication required'\n        }\n      }\n      return Promise.reject(error)\n    }\n\n    if (config.ibos_sign) {\n      const { token, platform, createtime } = generateIbosSignParams()\n      config.headers.set('token', token)\n      config.headers.set('platform', platform)\n      config.headers.set('createtime', createtime)\n    }\n\n    return {\n      ...config,\n      params: config.sign ? generateSignParams(params) : params,\n      retryConfig: {\n        ...defaultRetryConfig,\n        ...(config.retryConfig || {})\n      }\n    }\n  },\n  (error) => {\n    return Promise.reject(error.response)\n  }\n)\n\nservice.interceptors.response.use(\n  (response: AxiosResponse): AxiosResponse => {\n    const data = response.data || {}\n    if ([RESPONSE_CODE.FORBIDDEN_ERROR].includes(Number(data.code))) {\n      return Promise.reject(data)\n    }\n    if ([200, 201, 204].includes(response.status)) return response.data\n    throw new Error(response.status.toString())\n  },\n  async (error) => {\n    const { config } = error\n\n    // 如果没有重试配置，直接拒绝\n    if (!config || !config.retryConfig) {\n      return Promise.reject(error)\n    }\n\n    // 判断是否应该重试\n    const shouldRetry = () => {\n      // 网络错误（没有响应）\n      if (!error.response) {\n        return true\n      }\n\n      const { status } = error.response\n\n      // 只对以下状态码进行重试：\n      // - 5xx 服务器错误\n      // - 429 请求过于频繁\n      // - 408 请求超时\n      if (status >= 500 || status === 429 || status === 408) {\n        return true\n      }\n\n      // 4xx 客户端错误不重试（除了上面的特殊情况）\n      return false\n    }\n\n    // 如果不应该重试，直接拒绝\n    if (!shouldRetry()) {\n      return Promise.reject(error)\n    }\n\n    const { retry, retryDelay, count = 1 } = config.retryConfig\n\n    // 如果已经达到最大重试次数，拒绝请求\n    if (count >= retry) {\n      return Promise.reject(error)\n    }\n\n    // 增加重试计数\n    config.retryConfig.count = count + 1\n\n    // 延迟重试\n    await new Promise((resolve) => {\n      setTimeout(resolve, retryDelay)\n    })\n\n    // 重试请求\n    return service(config)\n  }\n)\n\n// 封装通用请求方法\nfunction request<T = any>(config: AxiosRequestConfig): Promise<T> {\n  return service(config).then((res) => res.data)\n}\n\n// 导出常用HTTP方法\nexport const get = <T = any>(url: string, config?: AxiosRequestConfig): Promise<T> => {\n  return request({ ...config, method: 'get', url })\n}\n\nexport const post = <T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> => {\n  return request({ ...config, method: 'post', url, data })\n}\n\nexport const put = <T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> => {\n  return request({ ...config, method: 'put', url, data })\n}\n\nexport const del = <T = any>(url: string, config?: AxiosRequestConfig): Promise<T> => {\n  return request({ ...config, method: 'delete', url })\n}\n\nexport const patch = <T = any>(\n  url: string,\n  data?: any,\n  config?: AxiosRequestConfig\n): Promise<T> => {\n  return request({ ...config, method: 'patch', url, data })\n}\n\nexport default service\n"
  },
  {
    "path": "web/front/src/renderer/main/api/errorHandler.ts",
    "content": "import { ElMessage } from 'element-plus'\n\nimport type { ResponseCode, ResponseStatus } from './code'\nimport {\n  RESPONSE_CODE,\n  RESPONSE_STATUS,\n  ResponseMessage,\n  RESPONSE_MESSAGE_MAP,\n  RESPONSE_CODE_MESSAGE_MAP,\n  ERROR_MESSAGES\n} from './code'\n\n// 定义错误响应接口\ninterface ErrorResponse {\n  status?: ResponseStatus\n  response?: {\n    status?: ResponseStatus\n    data?: {\n      code?: ResponseCode\n      message?: string\n    }\n  }\n  message?: string\n}\n\n// 统一错误处理\nexport function handleError(error: ErrorResponse): Promise<never> {\n  const response = error.response || {}\n  const data = response.data || error || {}\n  const status = response.status || 500\n  const { code } = data\n  let { message } = data\n  if (error.message === ResponseMessage.Canceled) {\n    return Promise.reject(error)\n  }\n  if (code === RESPONSE_CODE.UNAUTHORIZED_INTERCEPTED) {\n    return Promise.reject(error)\n  }\n\n  if (message === 'feature not available: feature over limit') {\n    return ElMessageBox.confirm(\n      window.$t('upgrade_dialog.title'),\n      window.$t('upgrade_dialog.cancel'),\n      {\n        customClass: 'version-upgrade-dialog',\n        showCancelButton: false\n      }\n    )\n  }\n\n  const messageMatch = RESPONSE_MESSAGE_MAP.get(message || '')\n  if (messageMatch) {\n    if (messageMatch === 'not_tip') {\n      message = ''\n    } else {\n      message = window.$t(messageMatch)\n    }\n  } else {\n    // 优化消息获取逻辑\n    message =\n      (code !== undefined && RESPONSE_CODE_MESSAGE_MAP.get(code)\n        ? window.$t(RESPONSE_CODE_MESSAGE_MAP.get(code)!)\n        : '') ||\n      (ERROR_MESSAGES.get(status) ? window.$t(ERROR_MESSAGES.get(status)!) : '') ||\n      error.message ||\n      window.$t('response_message.unknown_error')\n  }\n  if (message) {\n    ElMessage.error(message)\n  }\n  if (\n    code === RESPONSE_CODE.TOKEN_EXPIRED_ERROR ||\n    (status === RESPONSE_STATUS.UNAUTHORIZED && localStorage.getItem('access_token'))\n  ) {\n    localStorage.removeItem('access_token')\n    window.location.reload(true)\n  }\n  return Promise.reject(error)\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/api/host.ts",
    "content": "/**\n * 格式化URL，确保返回完整的URL\n * @param url 需要格式化的URL\n * @returns 格式化后的完整URL\n */\nconst formatUrl = (url: string): string => {\n  if (!url) return ''\n\n  const { origin } = window.location\n\n  // 如果已经是完整的URL，直接返回\n  if (url.startsWith('http')) {\n    return url\n  }\n\n  return origin\n}\n\n/**\n * 获取环境变量或window对象中的值\n * @param windowKey window对象中的键名\n * @param envKey 环境变量键名\n * @param defaultValue 默认值\n * @returns 配置值\n */\nconst getConfigValue = (\n  windowKey: keyof Window,\n  envKey: string,\n  defaultValue: string = ''\n): string => {\n  return (window[windowKey] as string) || process.env[envKey] || defaultValue\n}\n\n// 导出配置常量\nexport const API_HOST = formatUrl(getConfigValue('api_host', 'VITE_GLOB_API_HOST'))\nexport const QYY_HOST = formatUrl(getConfigValue('qyy_host', 'VITE_GLOB_QYY_HOST'))\nexport const ADMIN_URL = getConfigValue('admin_url', 'VITE_GLOB_ADMIN_URL', '/console')\n\n// 基于API_HOST的派生配置\nexport const IMG_HOST = `${API_HOST}/api/images`\nexport const LIB_HOST = `${API_HOST}/api/libs`\n"
  },
  {
    "path": "web/front/src/renderer/main/api/index.ts",
    "content": "export * from './modules/agent'\nexport * from './modules/chat'\nexport * from './modules/common'\nexport * from './modules/conversation'\nexport * from './modules/enterprise'\nexport * from './modules/group'\nexport * from './modules/links'\nexport * from './modules/setting'\nexport * from './modules/upload'\nexport * from './modules/user'\nexport * from './modules/subscription'\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/agent.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\n\nexport const agent = {\n  async list() {\n    return service.get(`/api/agents/current`).catch(handleError)\n  },\n  internalList() {\n    return service.get(`/api/agents/internal_users`).catch(handleError)\n  },\n  available(params: {\n    offset?: number\n    limit?: number\n  } = {}) {\n    return service.get(`/api/agents/available`, { params }).catch(handleError)\n  }\n}\nexport default agent\n\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/chat.ts",
    "content": "import type { AxiosRequestConfig } from 'axios'\nimport service from '../config'\nimport { handleError } from '../errorHandler'\n\ntype WorkflowRunRequest = {\n  conversation_id: string | null\n  model: string\n  parameters: Record<string, any>\n  stream: boolean\n}\n\nexport const chatApi = {\n  completions(data: Conversation.Sender, config: AxiosRequestConfig) {\n    return service.post(`/v1/chat/completions`, data, config)\n  },\n  workflow: {\n    run(data: WorkflowRunRequest, config: AxiosRequestConfig) {\n      return service.post(`/v1/workflow/run`, data, config).catch(handleError)\n    }\n  }\n}\n\nexport default chatApi\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/common.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport { QYY_HOST } from '../host'\n\nexport const common = {\n  sendcode(data: { mobile: string; source: '53ai' | 'companyibos' }) {\n    return service.post(`${QYY_HOST}/v3/users/sendcode`, data, {\n      sign: true,\n      baseURL: ''\n    }).catch(handleError)\n  },\n  verifycode(data: { mobile: string; verifycode: string; type: '1' }) {\n    return service.post(`${QYY_HOST}/v4/xbot/checkverificationcode`, data, {\n      ibos_sign: true,\n      baseURL: ''\n    }).then((res) => {\n      if (res.code !== 0) {\n        return Promise.reject({ response: { data: res } })\n      }\n      return res\n    }).catch(handleError)\n  },\n  sendEmailCode(data: { email: string }) {\n    return service.post('/api/email/send_verification', data).catch(handleError)\n  },\n  verifyEmailcode(data: { email: string; code: string }, id: string) {\n    return service.patch(`/api/users/${id}/email`, data).then((res) => {\n      if (res.code !== 0) {\n        return Promise.reject({ response: { data: res } })\n      }\n      return res\n    }).catch(handleError)\n  }\n\n}\nexport default common\n\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/conversation.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const conversation = {\n  list() {\n    return service.get(`/api/conversations`, { requiresAuth: true }).catch(handleError)\n  },\n  create(data: { agent_id: number, title: string }) {\n    return service.post(`/api/conversations`, data).catch(handleError)\n  },\n  edit(id: number, data: { title: string }) {\n    return service.put(`/api/conversations/${id}`, data).catch(handleError)\n  },\n  del(id: number) {\n    return service.delete(`/api/conversations/${id}`).catch(handleError)\n  },\n  messasges(id: number, params: { keyword?: string, offset?: number, limit?: number } = {}) {\n    return service.get(`/api/conversations/${id}/messages`, { params }).catch(handleError)\n  }\n}\nexport default conversation\n\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/enterprise.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const enterprise = {\n  current() {\n    return service.get('/api/enterprises/current').catch(handleError)\n  },\n  get(id: string) {\n    return service.get(`/api/enterprises/${id}`).catch(handleError)\n  },\n  getSMTPInfo(type: string) {\n    return service.get(`/api/enterprise-configs/${type}/enabled`).catch(handleError)\n  },\n  async update(\n    id: number,\n    data: {\n      display_name: string\n      logo: string\n      language: string\n      template_type: string\n    }\n  ) {\n    return service.put(`/api/enterprises/${id}`, data).catch(handleError)\n  }\n}\n\nexport default enterprise\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/group.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const group = {\n  list(group_type: number) {\n    return service.get(`/api/groups/type/current/${group_type}`).catch(handleError)\n  }\n}\nexport default group\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/links.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const links = {\n  list(params?: { group_id?: number; keyword?: string }) {\n    return service.get(`/api/ai_links/current`, { params }).catch(handleError)\n  },\n  detail(id: number) {\n    return service.get(`api/ai_links/${id}`).catch(handleError)\n  }\n}\nexport default links\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/navigation.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport { INIT_DATA_LIST } from '@/constants/navigation'\n\nexport const navigation = {\n  async list(\n    params: {\n      keyword?: string\n      offset?: number\n      limit?: number\n    } = {}\n  ) {\n    let { data = [] } = await service.get(`/api/navigations`, { params }).catch(handleError)\n    return { total: data.length, list: data }\n  },\n  init() {\n    return service.post(`/api/navigations/init`, [...INIT_DATA_LIST]).catch(handleError)\n  },\n  async detail({ navigation_id }: { navigation_id: number }) {\n    const { data = {} } = await service.get(`/api/navigations/${navigation_id}`).catch(handleError)\n    return data\n  },\n\n}\nexport default navigation\n\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/order.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const ordersApi = {\n  list(\n    params: {\n      status?: number\n      pay_type?: number\n      offset?: number\n      keyword?: string\n      limit?: number\n      subscription?: number\n      start_time?: number\n      end_time?: number\n    } = {}\n  ) {\n    return service.get(`/api/orders/me`, { params }).catch(handleError)\n  },\n  close(order_id: string) {\n    return service.post(`/api/orders/${order_id}/close`)\n  }\n}\nexport default ordersApi\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/payment.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const paymentApi = {\n  async getAvailableList() {\n    const { data = {} } = await service.get(`/api/payment/available`).catch(handleError)\n    return data\n  },\n  async getPaymentConfig() {\n    const { data = {} } = await service.get(`/api/pay_settings`).catch(handleError)\n    return data\n  },\n}\nexport default paymentApi\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/prompt.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\n\nexport const prompt = {\n  async list() {\n    return service.get(`/api/prompts`, { params: { limit: 1000 } }).catch(handleError)\n  },\n  async approve({ prompt_id }: { prompt_id: number }) {\n    return service.patch(`/api/prompts/${prompt_id}/like`).catch(handleError)\n  },\n  async detail({ prompt_id }: { prompt_id: number }) {\n    return service.get(`/api/prompts/${prompt_id}`).catch(handleError)\n  }\n}\nexport default prompt\n\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/setting.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport { getSimpleDateFormatString } from '@/utils/moment'\n\nexport const settingApi = {\n  group: {\n    get(group_name: 'third_party_statistic') {\n      return service.get(`/api/settings/group/${group_name}`).catch(handleError)\n    }\n  },\n  payment: {\n    async get() {\n      const { data: { pay_settings = [] } = {} } = await service\n        .get('/api/pay_settings')\n        .catch(handleError)\n      return pay_settings.map((item: any = {}) => {\n        item.pay_setting_id = +item.pay_setting_id || 0\n        item.pay_type = +item.pay_type || 0\n        item.pay_status = !!+item.pay_status\n        item.pay_config = item.pay_config || '{}'\n        item.pay_config =\n          typeof item.pay_config === 'string' ? JSON.parse(item.pay_config) : item.pay_config\n        item.extra_config = item.extra_config || '{}'\n        item.extra_config =\n          typeof item.extra_config === 'string' ? JSON.parse(item.extra_config) : item.extra_config\n        item.created_time = +item.created_time || 0\n        if (item.created_time)\n          item.created_time = getSimpleDateFormatString({ date: item.created_time })\n        item.updated_time = +item.updated_time || 0\n        if (item.updated_time)\n          item.updated_time = getSimpleDateFormatString({ date: item.updated_time })\n        return item\n      })\n    }\n  }\n}\n\nexport default settingApi\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/share/index.ts",
    "content": "import service from '../../config'\nimport { handleError } from '../../errorHandler'\nimport type { ShareCreateRequest, ShareCreateResponse, ShareFindReponse } from './types'\n\nexport const sharesApi = {\n  create(data: ShareCreateRequest): Promise<ShareCreateResponse> {\n    return service\n      .post('/api/shares', data)\n      .then((res) => res.data)\n      .catch(handleError)\n  },\n  find(id: ShareCreateResponse['share_id']): Promise<ShareFindReponse> {\n    return service.get(`/api/shares/${id}`).then((res) => res.data)\n  }\n}\n\nexport default sharesApi\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/share/transform.ts",
    "content": ""
  },
  {
    "path": "web/front/src/renderer/main/api/modules/share/types.ts",
    "content": "export interface ShareCreateRequest {\n  message_ids: string | number[]\n  conversation_id: number\n  select_all: boolean\n}\n\nexport interface ShareCreateResponse {\n  share_id: string\n}\n\nexport interface ShareFindReponse {\n  conversation: {\n    id: number\n    title: string\n    created_time: number\n  }\n  user: {\n    nickname: string\n    avatar: string\n  }\n  agent: {\n    name: string\n    logo: string\n    model: string\n    description: string\n    agent_id: number\n  }\n  messages: [\n    {\n      id: number\n      eid: number\n      user_id: number\n      message: string\n      agent_id: number\n      conversation_id: number\n      answer: string\n      reasoning_content: string\n      model_name: string\n      quota: number\n      prompt_tokens: number\n      completion_tokens: number\n      total_tokens: number\n      channel: number\n      request_id: string\n      elapsed_time: number\n      is_stream: boolean\n      quota_content: string\n      agent_custom_config: string\n      created_time: number\n      updated_time: number\n      message_type: 'chat'\n      parsed_message: { content: string; role: 'user' | 'assistant' }[]\n      parsed_answer: string\n    }\n  ]\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/subscription.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport { PAYMENT_TYPE, TIME_UNIT, TimeUnitType } from '@/constants/payment'\nimport type { PaymentType } from '@/constants/payment'\nimport { CURRENCY_TYPE, getCurrencySymbol, CurrencyType } from '@/constants/currency'\nimport md5 from '@/utils/md5'\n\ninterface OrderCacheData {\n  order_id?: number\n  payment_expired_time?: number\n  [key: string]: any\n}\n\ninterface OrderParams {\n  user_id: number\n  nickname: string\n  subscription_id: number\n  subscription_name: string\n  pay_type: PaymentType\n  amount: number\n  currency: CurrencyType\n  duration: number\n  time_unit: TimeUnitType\n}\n\nexport const getOrderCache = ({ key = '' } = {}): OrderCacheData => {\n  const temporary_order_data = JSON.parse(localStorage.getItem('temporary_order_data') || '{}')\n  const order_data = temporary_order_data[key]\n  if (!order_data) return temporary_order_data\n  if (\n    !Number(order_data.payment_expired_time) ||\n    Number(order_data.payment_expired_time) < Date.now()\n  ) {\n    setOrderCache({ key, value: {} })\n    return {}\n  }\n  return order_data\n}\n\nexport const setOrderCache = ({ key = '', value = {} } = {}) => {\n  const temporary_order_data = getOrderCache()\n  temporary_order_data[key] = value\n  localStorage.setItem('temporary_order_data', JSON.stringify(temporary_order_data))\n}\n\nlet subscription_list: any[] = []\n\nexport const subscriptionApi = {\n  async list({ reset = false } = {}) {\n    if (reset) subscription_list = []\n    if (subscription_list.length)\n      return { count: subscription_list.length, list: subscription_list }\n    const { data: { count = 0, settings = [] } = {} } = await service\n      .get(`/api/subscriptions/settings`)\n      .catch(handleError)\n    subscription_list = settings.map((item: any = {}, index) => {\n      item.group = item.group || {}\n      item.setting = item.setting || {}\n      item = {\n        ...item,\n        ...item.group,\n        ...item.setting\n      }\n      item.logo = item.logo || item.setting.logo_url || ''\n      item.delete = Boolean(item.delete) || false\n      item.group_id = item.group_id || 0\n      item.setting_id = item.setting_id || 0\n      item.sort = item.sort || settings.length - index || 0\n      item.group_name = item.group_name || ''\n      item.logo_url = item.logo_url || ''\n      item.ai_enabled = Boolean(item.ai_enabled) || false\n      item.relations = item.relations || []\n\n      // 处理年度信息\n      item.year_info = JSON.parse(\n        JSON.stringify(\n          item.relations.find(\n            (row: any = {}) => row.type == 1 && row.time_unit === TIME_UNIT.YEAR\n          ) || {}\n        )\n      )\n      item.year_info.amount = (Number(item.year_info.amount || 0) / 100)\n        .toFixed(2)\n        .replace('.00', '')\n      item.year_info.currency = item.year_info.currency || CURRENCY_TYPE.CNY\n      item.year_info.currency_symbol = getCurrencySymbol(item.year_info.currency)\n      item.year_info.relation_id = item.year_info.relation_id || 0\n      item.year_info.time_unit = item.year_info.time_unit || TIME_UNIT.YEAR\n      item.year_info.type = item.year_info.type || 1\n\n      // 处理月度信息\n      item.month_info = JSON.parse(\n        JSON.stringify(\n          item.relations.find(\n            (row: any = {}) => row.type == 1 && row.time_unit === TIME_UNIT.MONTH\n          ) || {}\n        )\n      )\n      item.month_info.amount = (Number(item.month_info.amount || 0) / 100)\n        .toFixed(2)\n        .replace('.00', '')\n      item.month_info.currency = item.month_info.currency || CURRENCY_TYPE.CNY\n      item.month_info.currency_symbol = getCurrencySymbol(item.month_info.currency)\n      item.month_info.relation_id = item.month_info.relation_id || 0\n      item.month_info.time_unit = item.month_info.time_unit || TIME_UNIT.MONTH\n      item.month_info.type = item.month_info.type || 1\n\n      // 处理信用月度信息\n      item.credit_month_info = JSON.parse(\n        JSON.stringify(item.relations.find((row: any = {}) => row.type == 2) || {})\n      )\n      item.credit_month_info.amount = Number(item.credit_month_info.amount || 0)\n        .toFixed(2)\n        .replace('.00', '')\n      item.credit_month_info.currency = item.credit_month_info.currency || ''\n      item.credit_month_info.currency_symbol = getCurrencySymbol(item.credit_month_info.currency)\n      item.credit_month_info.relation_id = item.credit_month_info.relation_id || 0\n      item.credit_month_info.time_unit = item.credit_month_info.time_unit || TIME_UNIT.MONTH\n      item.credit_month_info.type = item.credit_month_info.type || 2\n\n      item.agents = item.agents || []\n      return item\n    })\n    return {\n      count,\n      list: subscription_list\n    }\n  },\n\n  getFormatOrderData(data: any = {}) {\n    data.order = data.order || {}\n    data.payment_info = data.payment_info || {}\n    data = {\n      ...data,\n      ...data.order,\n      ...data.payment_info\n    }\n    data.order_id = +data.order.id || 0\n    data.payment_expired_time = +data.payment_info.expired_time || 0\n    if (data.payment_expired_time) data.payment_expired_time -= 1000 * 60 * 10\n    data.payment_order_id = data.payment_info.order_id || 0\n    return data\n  },\n\n  async createOrder({\n    params = {},\n    cache_disabled = false\n  }: {\n    params?: Partial<OrderParams>\n    cache_disabled?: boolean\n  } = {}) {\n    const defaultParams: OrderParams = {\n      user_id: 0,\n      nickname: '',\n      subscription_id: 0,\n      subscription_name: '',\n      pay_type: PAYMENT_TYPE.WECHAT,\n      amount: 0,\n      currency: CURRENCY_TYPE.CNY,\n      duration: 0,\n      time_unit: TIME_UNIT.MONTH\n    }\n\n    const mergedParams = { ...defaultParams, ...params }\n    const isAlipay = mergedParams.pay_type === PAYMENT_TYPE.ALIPAY\n    if (isAlipay) {\n      mergedParams.return_url = window.location.href\n    }\n    const storage_key = md5(JSON.stringify(mergedParams))\n\n    if (!cache_disabled) {\n      const order_data = getOrderCache({ key: storage_key })\n      if (order_data && +order_data.order_id > 0) return order_data\n    }\n\n    let { data = {} } = await service.post(`/api/orders`, mergedParams).catch(handleError)\n    if (isAlipay) {\n      window.location.href = data.payment_info.returnUrl\n      return true\n    }\n    data = this.getFormatOrderData(data)\n\n    if (!cache_disabled) {\n      setOrderCache({ key: storage_key, value: data })\n    }\n\n    return data\n  },\n\n  async getOrderStatus(params: { order_id: string }) {\n    const { data = {} } = await service\n      .get(`/api/orders/status/${params.order_id}`)\n      .catch(handleError)\n    return data\n  }\n}\n\nexport default subscriptionApi\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/system.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const system = {\n  init() {\n    return service.get('/api/is_init').catch(handleError)\n  }\n}\n\nexport default system\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/upload.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\n\nexport const uploadApi = {\n  upload(file: File) {\n    const formData = new FormData()\n    formData.append('file', file)\n    return service.post(`/api/upload`, formData).catch(handleError)\n  },\n  preview(key: string) {\n    return service.get(`/api/preview/${key}`).catch(handleError)\n  }\n}\nexport default uploadApi\n"
  },
  {
    "path": "web/front/src/renderer/main/api/modules/user.ts",
    "content": "import service from '../config'\nimport { handleError } from '../errorHandler'\nimport useEnv from '@/hooks/useEnv'\n\nconst { isOpLocalEnv } = useEnv()\n\nconst userApi = {\n  login(data: { username: string; password: string }) {\n    return service.post('/api/login', data).catch(handleError)\n  },\n  logout() {\n    return service.post('/api/logout').catch(handleError)\n  },\n  sms_login(data: { mobile: string; verify_code: string }) {\n    return service.post('/api/sms_login', data).catch(handleError)\n  },\n  wechat_login(params: { unionid: string }) {\n    // return service.get('/api/saas/wechat/user', { params }).catch(handleError)\n    return service.get('/api/saas/wechat/user', { params })\n  },\n  bind_wechat(data: {\n    mobile?: string\n    verify_code?: string\n    openid: string\n    unionid?: string\n    nickname?: string\n  }) {\n    let api_url = '/api/saas/wechat/bind'\n    if (data.mobile) api_url = '/api/saas/wechat/user'\n    return service.post(api_url, data).catch(handleError)\n  },\n  unbind_wechat() {\n    return service.post('/api/saas/wechat/unbind').catch(handleError)\n  },\n  register(data: { username: string; password: string; nickname: string; verfiy_code?: string }) {\n    return service.post('/api/register', data).catch(handleError)\n  },\n  reset_password(data: User.ResetPasswordForm) {\n    if (!isOpLocalEnv.value) {\n      return service.post('/api/saas/auth/reset_password', data).catch(handleError)\n    }\n    return service.post('/api/reset_password', data).catch(handleError)\n  },\n  change_mobile(data: User.ChangeMobileForm, id: string) {\n    return service.patch(`/api/users/${id}/mobile`, data).catch(handleError)\n  },\n  me() {\n    return service.get('/api/users/me').catch(handleError)\n  },\n  update(data: { nickname?: string; avatar?: string }) {\n    return service.put(`/api/users/me`, data).catch(handleError)\n  },\n  updatePassword(data: { password: string; newPassword: string }) {\n    return service.put(`/api/users/password`, data).catch(handleError)\n  },\n  checkUsername(account: string) {\n    return service\n      .post(`/api/check_account`, {\n        account\n      })\n      .catch(handleError)\n  },\n  update_default_subscription(user_id: number) {\n    return service.put(`/api/users/${user_id}/default_subscription`).catch(handleError)\n  },\n  ssoLogin(data: User.SsoLoginParam) {\n    return service.post(`/api/auth/sso_login`, data).catch(handleError)\n  }\n}\n\nexport default userApi\n\nexport type { userApi }\n"
  },
  {
    "path": "web/front/src/renderer/main/api/signature.ts",
    "content": "import { serialize } from '@/utils'\n\nimport md5 from '@/utils/md5'\n\nexport function generateSignParams(params = {}) {\n  const authkey = process.env.VITE_GLOB_AUTH_KEY as string\n  params = { ...params, timestamp: Math.floor(Date.now() / 1000), platform: 'web' }\n\n  const strForSign = serialize(params)\n  const sign = md5(strForSign + authkey)\n\n  return {\n    sign,\n    method: 'md5',\n    ...params\n  }\n}\n\nexport function generateIbosSignParams() {\n  const authkey = process.env.VITE_GLOB_AUTH_KEY as string\n  const platform = 'web'\n  const createtime = Math.floor(Date.now() / 1000)\n  const token = md5(authkey + createtime)\n  return {\n    token,\n    platform,\n    createtime\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/api/types.ts",
    "content": "// 基础响应类型\nexport interface BaseResponse<T = any> {\n  code: number\n  message: string\n  data: T\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/assets/styles/animate.css",
    "content": ".slide-enter-active,\n.slide-leave-active {\n  transition: transform 0.3s ease;\n}\n\n.slide-enter-from,\n.slide-leave-to {\n  transform: translateX(100%);\n}\n\n.slide-enter-to,\n.slide-leave-from {\n  transform: translateX(0);\n}\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n  opacity: 0;\n}\n\n.fade-enter-to,\n.fade-leave-from {\n  opacity: 1;\n}"
  },
  {
    "path": "web/front/src/renderer/main/assets/styles/custom.css",
    "content": ".bg-primary {\n  background-color: var(--el-color-primary, #2563eb);\n}\n\n.bg-primary-light-3 {\n  background-color: var(--el-color-primary-light-3);\n}\n\n.bg-primary-light-5 {\n  background-color: var(--el-color-primary-light-5);\n}\n\n.bg-primary-light-7 {\n  background-color: var(--el-color-primary-light-7);\n}\n\n.bg-primary-light-8 {\n  background-color: var(--el-color-primary-light-8);\n}\n\n.bg-primary-light-9,\n.hover-bg-primary-light-9:hover {\n  background-color: var(--el-color-primary-light-9);\n}\n\n.border-primary {\n  border-color: var(--el-color-primary, #2563eb);\n}\n\n.text-theme,\n.hover-text-theme:hover {\n  color: var(--el-color-primary, #2563eb);\n}\n\n.text-theme-important,\n.hover-text-theme-important:hover {\n  color: var(--el-color-primary, #2563eb) !important;\n}\n\n.text-primary {\n  color: var(--el-text-color-primary, #121519);\n}\n\n.text-primary-important {\n  color: var(--el-text-color-primary, #121519) !important;\n}\n\n.text-regular {\n  color: var(--el-text-color-regular, #182b50);\n}\n\n.text-regular-important {\n  color: var(--el-text-color-regular, #182b50) !important;\n}\n\n.text-secondary {\n  color: var(--el-text-color-secondary, #999);\n}\n\n.text-secondary-important {\n  color: var(--el-text-color-secondary, #999) !important;\n}\n\n.text-placeholder {\n  color: var(--el-text-color-placeholder, #999);\n}\n\n.text-placeholder-important {\n  color: var(--el-text-color-placeholder, #999) !important;\n}\n\n.nav-bg {\n  background-color: var(--el-color-nav-bg, #fff);\n}\n\n.nav-text {\n  color: var(--el-color-nav-text, #1d1e1f);\n}\n\n.page-footer-bg {\n  background-color: var(--el-color-page-footer-bg, #18191f);\n}\n\n.page-footer-text {\n  color: var(--el-color-page-footer-text, #f2f2f2);\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/assets/styles/element-plus.css",
    "content": ":root {\n  /* --el-color-primary: #2563eb !important; */\n  --el-color-info: #1d1e1f !important;\n}\n\n.el-popper--plain {\n  padding: 0 !important;\n}\n\n/* Element plus下拉框el-dropdown有黑框框 */\n.el-tooltip__trigger:first-child:focus-visible {\n  outline: unset;\n}\n\n/* 输入框 */\n.el-input--main {\n  --el-input-bg-color: #f5f5f5 !important;\n  --el-input-border-color: transparent !important;\n  --el-input-height: 36px !important;\n}\n\n/* 移动端底部弹出样式 */\n.el-popper.el-popper--m {\n  max-width: 100% !important;\n  width: 100%;\n  margin: 0 !important;\n  transform: none !important;\n  left: 0 !important;\n  right: 0 !important;\n}\n\n.el-popper.el-popper--m .el-popper__arrow {\n  display: none;\n}\n\n.el-popper.el-popper--m .el-popper__content {\n  width: 100%;\n  border-radius: 16px 16px 0 0;\n  box-shadow: 0 -2px 12px 0 rgb(0 0 0 / 10%);\n}\n\n@media (width <= 768px) {\n  .el-overlay-dialog {\n    padding-left: 10px;\n    padding-right: 10px;\n  }\n\n  .el-dialog {\n    max-width: 100%;\n  }\n}\n\n/* dialog弹窗 */\n\n.el-dialog--bottom-center .el-dialog__footer {\n  text-align: center;\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/assets/styles/global.css",
    "content": "/* 针对WebKit内核浏览器（Chrome, Safari等） */\nbody {\n  padding-bottom: constant(safe-area-inset-bottom);\n  padding-bottom: env(safe-area-inset-bottom);\n  font-family: -apple-system-font, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC',\n    'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;\n}\n\n::-webkit-scrollbar {\n  width: 5px;\n  height: 5px;\n  background: transparent;\n\n  /* 设置滚动条背景透明 */\n}\n\n::-webkit-scrollbar-thumb {\n  background: transparent;\n\n  /* 滑块透明 */\n}\n\n:hover::-webkit-scrollbar-thumb {\n  cursor: pointer;\n  border-radius: 4px;\n  background-color: rgb(0 0 0 / 25%);\n}\n\n/* el-tabs 样式 */\n.index-tabs .el-tabs__header {\n  margin-bottom: 0;\n}\n\n.index-tabs .el-tabs__nav-prev,\n.index-tabs .el-tabs__nav-next {\n  line-height: 38px;\n}\n\n.index-tabs .el-tabs__nav-wrap::after {\n  display: none;\n}\n\n.index-tabs .el-tabs__item {\n  height: 36px;\n  padding: 0 14px !important;\n  border-radius: 6px;\n  line-height: 36px;\n  text-align: center;\n  font-size: 16px;\n}\n\n.index-tabs .el-tabs__item.is-active {\n  color: white;\n  background-color: var(--el-color-primary);\n}\n\n.index-tabs .el-tabs__active-bar {\n  display: none;\n}\n\n/* 升级弹窗 */\n.version-upgrade-dialog {\n  --el-messagebox-width: 520px;\n  --el-messagebox-border-radius: 8px;\n\n  padding: 12px 26px;\n}\n\n.version-upgrade-dialog .el-message-box__header {\n  padding: 14px 0 10px;\n  border-bottom: none;\n}\n\n.version-upgrade-dialog .el-message-box__title {\n  font-size: 18px;\n  font-weight: 600;\n  color: #333;\n  line-height: 1.4;\n  justify-content: start;\n}\n\n.version-upgrade-dialog .el-message-box__container {\n  justify-content: start;\n}\n\n.version-upgrade-dialog .el-message-box__content {\n  text-align: center;\n}\n\n.version-upgrade-dialog .el-message-box__message {\n  font-size: 14px;\n  color: #666;\n  line-height: 1.5;\n  margin: 0;\n}\n\n.version-upgrade-dialog .el-message-box__btns {\n  padding: 20px 0;\n  display: flex;\n  gap: 12px;\n}\n\n.version-upgrade-dialog .el-message-box__btns .el-button {\n  width: 96px;\n}\n\n.version-upgrade-dialog .el-message-box__status {\n  display: none;\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/assets/styles/tailwind.css",
    "content": "/* /src/asstes/css/tailwind.css */\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n\n.flex-center {\n  @apply flex justify-center items-center;\n}\n\n.drag {\n  -webkit-app-region: drag\n}\n\n.no-drag {\n  -webkit-app-region: no-drag\n}\n\n.w-50 {\n  width: 12.5rem;\n}\n\n\n.text-52 {\n  font-size: 3rem;\n}\n\n.max-w-50 {\n  max-width: 12.5rem;\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/components/AuthTagGroup/index.vue",
    "content": "<template>\n  <ElSkeleton animated :loading=\"loading\">\n    <template #default>\n      <ul class=\"flex flex-wrap items-center gap-4\">\n        <label v-if=\"!hideLabel\" class=\"inline-block text-sm text-regular\" :class=\"[labelPosition === 'top' ? 'w-full -mb-1' : '']\">\n          {{ label }}:\n        </label>\n        <span v-if=\"!subscriptionList.length && !userGroupList.length\" class=\"text-sm text-placeholder\">\n          {{ emptyText }}\n        </span>\n        <template v-if=\"enterpriseStore.is_independent || enterpriseStore.is_industry\">\n          <li\n            v-for=\"item in subscriptionList\"\n            :key=\"item.group_id\"\n            class=\"flex items-center gap-1 text-sm\"\n            :class=\"[modelValue.includes(item.group_id) ? 'text-primary' : 'hidden']\"\n          >\n            <img\n              :src=\"\n                modelValue.includes(item.group_id)\n                  ? !/\\.png$/.test(item.logo)\n                    ? $getPublicPath(`/images/subscription/${item.logo}.png`)\n                    : item.logo\n                  : $getPublicPath(`/images/subscription/vip-0.png`)\n              \"\n              class=\"flex-none size-6 rounded-full overflow-auto\"\n            />\n            {{ item.group_name }}\n          </li>\n        </template>\n        <template v-if=\"userGroupList.length && (enterpriseStore.is_enterprise || enterpriseStore.is_industry)\">\n          <!-- <ElDivider class=\"!mx-0\" direction=\"vertical\" /> -->\n          <template v-if=\"hasVisibleItems\">\n            <ElDivider class=\"!mx-0\" direction=\"vertical\" />\n          </template>\n          <li\n            v-for=\"item in userGroupList\"\n            :key=\"item.group_id\"\n            class=\"flex items-center gap-1 text-sm\"\n            :class=\"modelValue.includes(item.group_id) ? 'text-primary' : 'hidden'\"\n          >\n            <SvgIcon name=\"user-group\" class=\"flex-none size-6\" :class=\"[modelValue.includes(item.group_id) ? 'text-theme' : 'text-placeholder']\" />\n            {{ item.group_name }}\n          </li>\n        </template>\n      </ul>\n    </template>\n    <template #template>\n      <div class=\"flex items-center gap-4\">\n        <ElSkeletonItem v-for=\"i in 6\" :key=\"i\" class=\"!w-[80px] !h-[24px]\" variant=\"h1\" />\n      </div>\n    </template>\n  </ElSkeleton>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, computed } from 'vue'\nimport { subscriptionApi } from '@/api/modules/subscription'\nimport groupApi from '@/api/modules/group'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\n\nconst enterpriseStore = useEnterpriseStore()\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: (string | number)[]\n    label?: string\n    labelPosition?: 'left' | 'top'\n    hideLabel?: boolean\n    emptyText?: string\n  }>(),\n  {\n    modelValue: () => [],\n    label: window.$t('authority.use_range'),\n    labelPosition: 'left',\n    hideLabel: false,\n    emptyText: '--'\n  }\n)\n\n// 计算是否有可见的 subscriptionList 或 userGroupList 项\nconst hasVisibleItems = computed(() => {\n  const hasVisibleSubscriptionItems = subscriptionList.value.some((item) => props.modelValue.includes(item.group_id))\n  const hasVisibleUserGroupItems = userGroupList.value.some((item) => props.modelValue.includes(item.group_id))\n  return hasVisibleSubscriptionItems && hasVisibleUserGroupItems\n})\n\nconst loading = ref(false)\nconst subscriptionList = ref([])\nconst fetchSubscriptionData = async () => {\n  const { list = [] } = await subscriptionApi.list()\n  subscriptionList.value = list\n}\n\nconst userGroupList = ref([])\nconst fetchUserGroupList = async () => {\n  const { data = [] } = await groupApi.list(4)\n  userGroupList.value = data\n}\n\nonMounted(async () => {\n  loading.value = true\n  await Promise.all([fetchSubscriptionData(), fetchUserGroupList()]).finally(() => {\n    loading.value = false\n  })\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/CropperDialog/index.vue",
    "content": "<script lang=\"ts\" setup>\n// 需要引入的库\nimport 'vue-cropper/dist/index.css'\nimport { VueCropper } from 'vue-cropper'\nimport { CirclePlus, RefreshRight, Remove } from '@element-plus/icons-vue'\n\nimport { reactive, ref, watch, nextTick } from 'vue'\n// 封装的dialog组件\nimport { ElMessage } from 'element-plus'\nimport { API_HOST  } from '@/api/host'\nimport uploadApi from '@/api/modules/upload'\n\n// 父组件传参props\ninterface IProps {\n  type?: string // 上传类型, 企业logo / 浏览器logo\n  allowTypeList?: string[] // 接收允许上传的图片类型\n  limitSize?: number // 限制大小，单位MB\n  fixedNumber?: number[] // 截图框的宽高比例\n  fixedNumberAider?: number[] // 侧边栏收起截图框的宽高比例\n  previewWidth?: number // 预览宽度\n  title?: string // 裁剪标题\n  showWidth?: number\n  showHeight?: number\n  action?: 'ibos' | 'python'\n  uploadAvatar?: boolean\n}\n\n// 裁剪组件需要使用到的参数\ninterface Options {\n  img: string | ArrayBuffer | null // 裁剪图片的地址\n  info: true // 裁剪框的大小信息\n  outputSize: number // 裁剪生成图片的质量 [1至0.1]\n  outputType: string // 裁剪生成图片的格式\n  canScale: boolean // 图片是否允许滚轮缩放\n  autoCrop: boolean // 是否默认生成截图框\n  autoCropWidth: number // 默认生成截图框宽度\n  autoCropHeight: number // 默认生成截图框高度\n  fixedBox: boolean // 固定截图框大小 不允许改变\n  fixed: boolean // 是否开启截图框宽高固定比例\n  fixedNumber: Array<number> // 截图框的宽高比例  需要配合centerBox一起使用才能生效\n  full: boolean // 是否输出原图比例的截图\n  canMove: boolean // 截图框能否拖动\n  original: boolean // 上传图片按照原始比例渲染\n  centerBox: boolean // 截图框是否被限制在图片里面\n  infoTrue: boolean // true 为展示真实输出图片宽高 false 展示看到的截图框宽高\n  accept: string // 上传允许的格式\n  fillColor: string\n}\n\n// 预览样式\ninterface IStyle {\n  width: number | string\n  height: number | string\n}\n\nconst props = withDefaults(defineProps<IProps>(), {\n  type: 'systemLogo',\n  allowTypeList: () => ['jpg', 'png', 'jpeg'],\n  limitSize: 10,\n  fixedNumber: () => [1, 1],\n  fixedNumberAider: () => [1, 1],\n  previewWidth: 160,\n  title: '图片裁剪',\n  showWidth: 300,\n  showHeight: 300,\n  action: 'ibos',\n  uploadAvatar: false\n}) // dialog的显示与隐藏\n\nconst emits = defineEmits(['confirm']) // 封装的api\nconst dialogVisible = ref<boolean>(false) // 自定义事件\n\n// 裁剪组件需要使用到的参数\nconst options = reactive<Options>({\n  img: '', // 需要剪裁的图片\n  autoCrop: true, // 是否默认生成截图框\n  autoCropWidth: 300, // 默认生成截图框的宽度\n  autoCropHeight: 300, // 默认生成截图框的长度\n  fixedBox: false, // 是否固定截图框的大小 不允许改变\n  info: true, // 裁剪框的大小信息\n  outputSize: 1, // 裁剪生成图片的质量 [1至0.1]\n  outputType: 'png', // 裁剪生成图片的格式\n  canScale: true, // 图片是否允许滚轮缩放\n  fixed: true, // 是否开启截图框宽高固定比例\n  fixedNumber: [1, 1], // 截图框的宽高比例 需要配合centerBox一起使用才能生效 1比1\n  full: true, // 是否输出原图比例的截图\n  canMove: false, // 截图框能否拖动\n  original: false, // 上传图片按照原始比例渲染\n  centerBox: true, // 截图框是否被限制在图片里面\n  infoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高\n  accept: 'image/jpeg,image/jpg,image/png,image/gif,image/x-icon',\n  fillColor: 'transparent'\n})\n\nconst getStyle = ref<IStyle>({\n  width: '',\n  height: ''\n})\n\n/* 允许上传的类型 */\nconst acceptType = ref<string[]>([])\n\n// 裁剪后的预览样式信息\nconst previews: any = ref({})\n\n// 裁剪组件Ref\nconst cropperRef: any = ref({})\n// input组件Ref\nconst reuploadInput = ref<HTMLElement | null | undefined>()\nconst uploading = ref(false)\n\n/* 上传图片前置拦截函数 */\nconst beforeUploadEvent = (file: File) => {\n  const type = file.name.substring(file.name.lastIndexOf('.') + 1) // 获得图片上传后缀\n  // 判断是否符合上传类型\n  const isAllowTye = props.allowTypeList.includes(type)\n  if (!isAllowTye) {\n    ElMessage.error(`仅支持${acceptType.value.join('、')}格式的图片`)\n    return false\n  }\n  return true\n}\n\n// 回显图片使用的方法\nconst onChange = (e: any) => {\n  const { limitSize } = props\n  const file = e.target.files[0]\n  if (file.size > limitSize * 1024 * 1024)\n    return ElMessage.warning(`图片上传大小不能超过${limitSize}MB`)\n  const URL = window.URL || window.webkitURL\n  // 上传图片前置钩子，用于判断限制类型用\n  if (beforeUploadEvent(file)) {\n    options.img = URL.createObjectURL(file)\n    dialogVisible.value = true\n  }\n}\n/* 重置裁剪组件 */\nconst refreshCrop = () => {\n  // cropperRef裁剪组件自带很多方法，可以打印看看\n  cropperRef.value.refresh()\n}\n\n/* 右旋转图片 */\nconst rotateRight = () => {\n  cropperRef.value.rotateRight()\n}\n\n/* 放大缩小图片比例 */\nconst changeScale = (num: number) => {\n  const scale = num || 1\n  cropperRef.value.changeScale(scale)\n}\n\n// 点击上传\nconst uploadFile = async (type: string): Promise<void> => {\n  if (uploading.value) return\n  /* 打开新的上传文件无需生成新的input元素 */\n  if (type === 'reupload') {\n    reuploadInput.value?.click()\n    return\n  }\n  let input: HTMLInputElement | null = document.createElement('input')\n  input.type = 'file'\n  input.accept = options.accept\n  input.onchange = onChange\n  input.click()\n  await nextTick()\n  input = null\n}\n\n/* 上传成功方法 */\nconst cropperSuccess = async (dataFile: File) => {\n  // 在接口请求中需要上传file文件格式, 并且该接口需要改header头部为form-data格式\n  try {\n    const res = await uploadApi.upload(dataFile)\n    return res.data\n  } catch (error) {\n    return {}\n  }\n}\n\n// base64转图片文件\nconst dataURLtoFile = (dataUrl: string, filename: string) => {\n  const arr = dataUrl.split(',')\n  const mime = arr[0].match(/:(.*?);/)[1]\n  const bstr = atob(arr[1])\n  let len = bstr.length\n  const u8arr = new Uint8Array(len)\n  while (len--) u8arr[len] = bstr.charCodeAt(len)\n\n  return new File([u8arr], filename, { type: mime })\n}\n\n// 上传图片（点击保存按钮）\nconst onConfirm = () => {\n  uploading.value = true\n  cropperRef.value.getCropData(async (data: string) => {\n    const dataFile: File = dataURLtoFile(data, 'images.png')\n    const res = await cropperSuccess(dataFile).finally(() => {\n      uploading.value = false\n    })\n    const url = `${API_HOST}/api/preview/${res.preview_key || ''}`\n    res.url = url\n    emits('confirm', res)\n    dialogVisible.value = false\n  })\n}\n\n// 裁剪之后的数据\nconst previewHandle = (data: any) => {\n  // previews.value = data // 预览img图片\n\n  cropperRef.value.getCropData((data: string) => {\n    previews.value.img = data\n  })\n}\n\nwatch(\n  () => props,\n  () => {\n    /* 预览样式 */\n    getStyle.value = {\n      width: `${props.previewWidth}px`, // 预览宽度\n      height: `${props.previewWidth / props.fixedNumber[0]}px`, // 预览高度\n      border: '1px solid #e8e8e8',\n      'border-radius': '2px'\n    }\n    // 上传格式tips信息\n    acceptType.value = []\n    for (let i = 0; i < props.allowTypeList.length; i++)\n      acceptType.value.push(props.allowTypeList[i].toUpperCase())\n  },\n  {\n    deep: true,\n    immediate: true\n  }\n)\n\n/* 向子组件抛出上传事件 */\ndefineExpose({\n  uploadFile,\n  open(url) {\n    options.img = url\n    dialogVisible.value = true\n  }\n})\n</script>\n\n<template>\n  <el-dialog\n    :model-value=\"dialogVisible\"\n    :title=\"$t('common.image_cropper')\"\n    width=\"550px\"\n    :close-on-click-modal=\"false\"\n    :close-on-press-escape=\"false\"\n    append-to-body\n    @close=\"dialogVisible = false\"\n  >\n    <template #default>\n      <div class=\"cropper\">\n        <div class=\"cropper_left\">\n          <VueCropper\n            ref=\"cropperRef\"\n            :style=\"{ width: `${showWidth}px`, height: `${showHeight}px` }\"\n            :img=\"options.img\"\n            :info=\"true\"\n            :info-true=\"options.infoTrue\"\n            :auto-crop=\"options.autoCrop\"\n            :fixed-box=\"options.fixedBox\"\n            :can-move=\"options.canMove\"\n            :can-scale=\"options.canScale\"\n            :fixed-number=\"fixedNumber\"\n            :fixed=\"options.fixed\"\n            :full=\"options.full\"\n            :output-type=\"options.outputType\"\n            :center-box=\"options.centerBox\"\n            :fill-color=\"options.fillColor\"\n            @real-time=\"previewHandle\"\n          />\n          <div class=\"reupload_box\">\n            <div class=\"reupload_text\" @click=\"uploadFile('reload')\">\n              {{ $t('action.reupload') }}\n            </div>\n            <div>\n              <el-icon class=\"rotate_right\" @click=\"changeScale(1)\">\n                <CirclePlus />\n              </el-icon>\n              <el-icon class=\"rotate_right\" @click=\"changeScale(-1)\">\n                <Remove />\n              </el-icon>\n              <el-icon class=\"rotate_right\" @click=\"rotateRight\">\n                <RefreshRight />\n              </el-icon>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"cropper_right\">\n          <div class=\"preview_text\">\n            {{ $t('action.preview') }}\n          </div>\n          <div :style=\"getStyle\" class=\"previewImg\">\n            <img :style=\"previews.img\" :src=\"previews.img\" alt=\"\" />\n          </div>\n        </div>\n      </div>\n    </template>\n\n    <template #footer>\n      <span class=\"dialog-footer\">\n        <el-button size=\"large\" @click=\"dialogVisible = false\">\n          {{ $t('action.cancel') }}\n        </el-button>\n        <el-button size=\"large\" type=\"\" @click=\"refreshCrop\">\n          {{ $t('action.reset') }}\n        </el-button>\n        <el-button size=\"large\" type=\"primary\" :loading=\"uploading\" @click=\"onConfirm\">\n          {{ $t('action.confirm') }}\n        </el-button>\n      </span>\n    </template>\n  </el-dialog>\n</template>\n\n<style scoped>\n.cropper {\n  width: 100%;\n  height: 330px;\n  display: flex;\n  overflow: hidden;\n}\n.cropper_left {\n  display: flex;\n  flex-direction: column;\n}\n\n.reupload_box {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-top: 10px;\n}\n\n.reupload_text {\n  color: var(--primary-color);\n  cursor: pointer;\n}\n.cropper_right {\n  flex: 1;\n  margin-left: 16px;\n}\n\n.rotate_right {\n  margin-left: 16px;\n  cursor: pointer;\n}\n\n.preview_text {\n  margin-bottom: 12px;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/ExpireModal/index.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    class=\"el-dialog--bottom-center\"\n    :title=\"$t('common.tip')\"\n    :width=\"520\"\n    :close-on-click-modal=\"false\"\n    :close-on-press-escape=\"false\"\n    @close=\"handleClose\"\n  >\n    <div v-if=\"expireDay > 0\" class=\"text-sm text-[#4F5052] pb-4\">\n      {{ $t('subscription.expire_time_desc', { group_name, day: expireDay, expire_time: expireTime }) }}\n    </div>\n    <div v-else class=\"text-sm text-[#4F5052] pb-4\">\n      {{ $t('subscription.expired_time_desc', { group_name, expire_time: expireTime }) }}\n    </div>\n    <template #footer>\n      <ElButton class=\"w-24 h-9\" size=\"large\" type=\"primary\" @click=\"handleConfirm\">\n        {{ $t('subscription.renew') }}\n      </ElButton>\n      <ElButton class=\"w-24h-9\" size=\"large\" @click=\"handleClose\">\n        {{ $t('common.later') }}\n      </ElButton>\n    </template>\n    <Upgrade ref=\"upgrade_ref\" />\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, defineAsyncComponent } from 'vue'\nimport { ElDialog, ElButton } from 'element-plus'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport userApi from '@/api/modules/user'\n\nconst Upgrade = defineAsyncComponent(() => import('@/components/Upgrade/index.vue'))\n\nconst userStore = useUserStore()\n\nconst upgrade_ref = ref<InstanceType<typeof Upgrade>>()\n\nconst visible = ref(false)\nconst group_name = ref('')\nconst expireDay = ref(0)\nconst expireTime = ref('')\n\nconst open = (data: { group_name: string; day: number; expire_time: string }) => {\n  group_name.value = data.group_name\n  expireDay.value = data.day\n  expireTime.value = data.expire_time\n  visible.value = true\n}\n\n// 调整\n// const\n// 直接调接口修改版本\nconst updateExpireTime = () => {\n  // 调接口修改版本\n  if (expireDay.value > 0) return\n  // 调接口修改版本\n  userApi.update_default_subscription(userStore.info.user_id).finally(() => userStore.getUserInfo())\n}\n\nconst handleConfirm = () => {\n  visible.value = false\n  upgrade_ref.value.open()\n  updateExpireTime()\n}\n\nconst handleClose = () => {\n  updateExpireTime()\n  visible.value = false\n}\n\ndefineExpose({\n  open\n})\n</script>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/FileUpload/index.vue",
    "content": "<template>\n\n</template>\n\n<script lang=\"ts\" setup>\n</script>\n\n\n<style></style>"
  },
  {
    "path": "web/front/src/renderer/main/components/Filter/date-range.vue",
    "content": "<template>\n  <el-date-picker\n    v-model=\"model\"\n    type=\"daterange\"\n    :start-placeholder=\"startPlaceholder\"\n    :end-placeholder=\"endPlaceholder\"\n    :size=\"size\"\n    :popper-options=\"{ placement: 'bottom-start' }\"\n    :shortcuts=\"shortcuts\"\n    v-bind=\"{ ...$attrs }\"\n    @change=\"handleChange\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport useVmodel from '@/hooks/useVmodel'\nimport { getSimpleDateFormatString } from '@/utils/moment'\nimport { dateRangeOptions, getRangeStartEndDates } from '@/utils/filter'\n\ninterface DateRange {\n  start: string\n  end: string\n}\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: (string | number)[]\n    prop?: DateRange\n    startPlaceholder?: string\n    endPlaceholder?: string\n    size?: 'small' | 'default' | 'large'\n    valueFormat?: Function\n  }>(),\n  {\n    modelValue: () => [],\n    prop: () => ({\n      start: 'start',\n      end: 'end'\n    }),\n    startPlaceholder: window.$t('filter.start_time'),\n    endPlaceholder: window.$t('filter.end_time'),\n    size: 'default',\n    valueFormat: (date: Date) => getSimpleDateFormatString({ date, format: 'YYYY-MM-DD hh:mm' })\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'update:modelValue', data: (string | number)[]): void\n  (e: 'add'): void\n  (e: 'change', data: (string | number)[]): void\n}>()\n\nconst model = useVmodel({\n  props,\n  emits\n})\n\nconst handleChange = (e: Date[]) => {\n  let date: (string | number)[] = []\n  if (e && e.length) {\n    e[0].setHours(0, 0, 0, 0)\n    e[1].setHours(23, 59, 59, 999)\n    date = [props.valueFormat(e[0]), props.valueFormat(e[1])]\n  }\n  emits('update:modelValue', date)\n  emits('change', date)\n}\n\nconst shortcuts = dateRangeOptions.map((item) => {\n  return {\n    text: item.label,\n    value: () => {\n      const date = getRangeStartEndDates(item.value)\n      return [date.start, date.end]\n    }\n  }\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Fullscreen/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { computed, onMounted, ref, getCurrentInstance } from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport { useZIndex } from 'element-plus'\n\n// 移除未使用的 ElMessage 导入\nconst { proxy: _this } = getCurrentInstance()\n\n// 优化 Props 类型定义\ninterface FullscreenProps {\n  target?: string | HTMLElement\n  flex?: boolean\n  zIndex?: number\n}\n\nconst props = withDefaults(defineProps<FullscreenProps>(), {\n  target: 'body',\n  flex: false,\n  zIndex: 0\n})\n\nconst emits = defineEmits<{\n  (e: 'zoom', value: boolean): void\n}>()\n\nconst { nextZIndex } = useZIndex()\n\nconst contentRef = ref<HTMLElement>()\nconst isopen = ref(false)\nconst nodeHeight = ref(0)\nconst zIndex = ref(0)\n\nconst containerClasses = computed(() => ({\n  'content-container': true,\n  'bg-black bg-opacity-25 overflow-y-auto': isopen.value,\n  'content-flex': props.flex,\n  [_this.$attrs.class as string]: !!_this.$attrs.class\n}))\nconst handler = () => {\n  isopen.value = !isopen.value\n  if (isopen.value && !props.zIndex) zIndex.value = nextZIndex()\n\n  emits('zoom', isopen.value)\n}\n\nonMounted(() => {\n  useResizeObserver(contentRef, ([entry]) => {\n    nodeHeight.value = entry.target.scrollHeight\n  })\n})\n</script>\n\n<template>\n  <Teleport :to=\"target\" :disabled=\"!isopen\">\n    <div ref=\"contentRef\" :class=\"containerClasses\" :style=\"{ zIndex }\">\n      <slot :isopen=\"isopen\" :handler=\"handler\" />\n    </div>\n  </Teleport>\n  <div v-if=\"isopen\" :style=\"{ height: `${nodeHeight}px` }\" />\n</template>\n\n<style scoped>\n.content-container {\n  position: absolute;\n  inset: 0;\n  padding: 16px;\n  background: rgb(0 0 0 / 25%);\n}\n\n.content-container:deep(> *) {\n  width: 100%;\n  height: 100%;\n  background-color: #fff;\n  margin: 0;\n}\n\n.content-flex {\n  display: flex;\n  overflow: hidden;\n  flex: 1;\n}\n\n.content-flex:deep(> *) {\n  flex: 1;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/LazyComponent/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    value: string | number\n    name: string\n    cache?: boolean\n  }>(),\n  {\n    value: '',\n    name: '',\n    cache: true\n  }\n)\n\nconst emits = defineEmits<{\n  (ev: 'load'): void\n  (ev: 'show'): void\n}>()\n\nconst loaded = ref<boolean>(false)\n\nwatch(\n  () => props.value,\n  (val) => {\n    if (val === props.name) {\n      if (!loaded.value) {\n        loaded.value = true\n        emits('load')\n      }\n      emits('show')\n    } else {\n      if (!props.cache) loaded.value = false\n    }\n  },\n  { immediate: true }\n)\n\ndefineExpose({\n  async reset() {\n    loaded.value = false\n  }\n})\n</script>\n\n<template>\n  <div v-if=\"loaded\" v-show=\"name === value\">\n    <slot />\n  </div>\n</template>\n\n<style>\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Lead/index.vue",
    "content": "<template>\n  <div class=\"h-full overflow-y-auto\">\n    <div class=\"md:w-[90%] sm:w-[90%] lg:w-[65%] mx-auto pt-20 px-4\">\n      <div class=\"flex flex-col gap-3 items-center\">\n        <h3 class=\"text-[32px] font-bold\">{{ $t('guide.title') }}</h3>\n        <p class=\"text-sm text-[#2029459e]\">{{ $t('guide.description') }}</p>\n      </div>\n      <el-steps class=\"mt-12\" :active=\"steps\" align-center>\n        <el-step :title=\"$t('guide.website_info')\" />\n        <el-step :title=\"$t('guide.website_setting')\" />\n        <el-step :title=\"$t('guide.website_success')\" />\n      </el-steps>\n\n      <ElForm ref=\"formRef\" :model=\"form\" :rules=\"rules\" label-position=\"top\" class=\"flex flex-col mt-10\">\n        <template v-if=\"isFirstStep\">\n          <ElFormItem :label=\"$t('guide.website_info_name')\" prop=\"name\">\n            <ElInput\n              v-model=\"form.name\"\n              class=\"max-w-full h-11\"\n              :placeholder=\"$t('guide.website_info_name_placeholder')\"\n              size=\"large\"\n              clearable\n              maxlength=\"120\"\n              show-word-limit\n            />\n          </ElFormItem>\n\n          <ElFormItem :label=\"$t('guide.website_info_logo')\" prop=\"logo\">\n            <div class=\"mt-4 w-full flex items-center gap-4\">\n              <ElImage\n                v-if=\"form.logo\"\n                class=\"h-[70px] w-[70px] rounded overflow-hidden\"\n                :src=\"form.logo\"\n                :preview-src-list=\"[form.logo]\"\n                fit=\"contain\"\n              />\n              <UploadLogo\n                v-model=\"form.logo\"\n                class=\"w-auto h-auto\"\n                show-text\n                :text=\"$t(form.logo ? 'guide.website_info_logo_change' : 'guide.website_info_logo_upload')\"\n              />\n            </div>\n            <div class=\"mt-2 w-full text-sm text-[#9A9A9A]\">\n              {{ $t('guide.website_info_logo_tip') }}\n            </div>\n          </ElFormItem>\n\n          <ElFormItem :label=\"$t('guide.website_style')\">\n            <ul class=\"flex flex-wrap gap-4\">\n              <li\n                v-for=\"value in [WEBSITE_STYLE.WEBSITE, WEBSITE_STYLE.SOFTWARE]\"\n                :key=\"value\"\n                class=\"w-[172px] p-1.5 bg-[#F5F5F5] flex relative flex-col cursor-pointer items-center border rounded box-border overflow-hidden text-sm hover:border-[#3664EF] hover:text-[#3664EF]\"\n                :class=\"[form.type === value ? 'border-[#3664EF] text-[#3664EF]' : 'text-[#4F5052]']\"\n                @click.stop=\"form.type = value\"\n              >\n                <div v-if=\"form.type === value\">\n                  <div class=\"right-angle-triangle\"></div>\n                  <SvgIcon name=\"tick\" stroke=\"true\" class=\"absolute !w-4 h-2 top-0 right-0 text-[#ffffff]\" />\n                </div>\n                <div class=\"text-sm p-1.5\">\n                  {{ $t(WEBSITE_STYLE_LABEL_MAP.get(value)) }}\n                </div>\n                <ElImage class=\"w-full mt-2\" :src=\"WEBSITE_STYLE_DEMO_MAP.get(value)\" fit=\"contain\" />\n              </li>\n            </ul>\n          </ElFormItem>\n\n          <ElFormItem :label=\"$t('guide.website_info_language')\">\n            <ElSelect v-model=\"form.language\" class=\"h-11\" size=\"large\" @change=\"handleLanguageChange\">\n              <ElOption v-for=\"item in languageOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\" />\n            </ElSelect>\n          </ElFormItem>\n        </template>\n\n        <template v-else-if=\"isSecondStep\">\n          <ElFormItem :label=\"$t('form.account')\" prop=\"account\" :rules=\"[getAccountOrEmailRules()]\">\n            <ElInput v-model=\"form.account\" class=\"h-11\" :placeholder=\"$t('form.account_format')\" size=\"large\" clearable />\n          </ElFormItem>\n\n          <el-form-item :label=\"$t('form.password')\" prop=\"password\" :rules=\"[getPasswordRules()]\">\n            <el-input v-model=\"form.password\" v-trim show-password size=\"large\" :placeholder=\"$t('form.password_placeholder')\"></el-input>\n          </el-form-item>\n\n          <el-form-item\n            :label=\"$t('guide.confirm_password')\"\n            prop=\"confirm_password\"\n            :rules=\"[getPasswordRules(), getConfirmPasswordRules(form, 'password')]\"\n          >\n            <el-input\n              v-model=\"form.confirm_password\"\n              v-trim\n              show-password\n              size=\"large\"\n              :placeholder=\"$t('guide.confirm_password_placeholder')\"\n            ></el-input>\n          </el-form-item>\n        </template>\n\n        <template v-else-if=\"isThirdStep\">\n          <div class=\"flex flex-col items-center justify-center py-10\">\n            <h4 class=\"text-xl font-semibold text-[#202945] mb-2\">{{ $t('guide.init_success') }}</h4>\n            <p\n              class=\"text-sm text-[#2029459e]\"\n              v-html=\"\n                $t('guide.jump_tip', {\n                  count: `<span style='color: #3664EF; font-weight: 500'>${countdown}</span>`\n                })\n              \"\n            ></p>\n            <el-button type=\"text\" class=\"mt-4 text-[#3664EF]\" @click=\"handleManualJump\">{{ $t('guide.jump_now') }}</el-button>\n          </div>\n        </template>\n      </ElForm>\n\n      <ElButton v-if=\"isFirstStep || isSecondStep\" type=\"primary\" class=\"w-full h-11 my-6\" round @click=\"handleNext\">\n        {{ isFirstStep ? $t('guide.next') : $t('guide.init') }}\n      </ElButton>\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport { ElButton, ElForm } from 'element-plus'\nimport { ref, reactive, onUnmounted, computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useRouter } from 'vue-router'\nimport UploadLogo from '@/components/Upload/image.vue'\nimport { WEBSITE_STYLE, WEBSITE_STYLE_LABEL_MAP, WEBSITE_STYLE_DEMO_MAP } from '@/constants/website'\nimport { getAccountOrEmailRules, getPasswordRules, getConfirmPasswordRules, generateInputRules } from '@/utils/form-rules'\nimport { enterprise } from '@/api/modules/enterprise'\nimport userApi from '@/api/modules/user'\n\n// 常量定义\nconst DEFAULT_LOCAL_EID = 1\nconst COUNTDOWN_DURATION = 2\nconst COUNTDOWN_INTERVAL = 1000\n\n// 获取 i18n 实例和路由\nconst { locale } = useI18n()\nconst router = useRouter()\n\n// 响应式数据\nconst steps = ref(1)\nconst formRef = ref()\nconst countdown = ref(COUNTDOWN_DURATION)\nlet jumpTimer = null\n\n// 表单数据\nconst form = reactive({\n  name: '',\n  logo: 'https://hub.53ai.com/console/images/default_website_logo.png',\n  type: WEBSITE_STYLE.WEBSITE,\n  language: 'zh-cn',\n  account: '',\n  password: '',\n  confirm_password: ''\n})\n\n// 语言选项配置\nconst languageOptions = [\n  { label: '中文-CN', value: 'zh-cn' },\n  { label: '中文-TW', value: 'zh-tw' },\n  { label: '英文-EN', value: 'en' },\n  { label: '日文-JP', value: 'jp' }\n]\n\n// 默认模板配置\nconst defaultTemplateConfig = {\n  style_type: 'software',\n  theme_color: '#3664EF',\n  text_color: '#333333',\n  nav_bg_color: '#ffffff',\n  nav_text_color: '#333333',\n  page_footer_bg_color: '#18191F',\n  page_footer_text_color: '#F2F2F2'\n}\n\n// 表单验证规则\nconst rules = reactive({\n  name: generateInputRules({ message: 'guide.website_info_name_placeholder' }),\n  logo: generateInputRules({ message: 'guide.website_info_logo_placeholder' })\n})\n\n// 计算属性\nconst isFirstStep = computed(() => steps.value === 1)\nconst isSecondStep = computed(() => steps.value === 2)\nconst isThirdStep = computed(() => steps.value === 3)\n\n// 语言切换处理函数\nconst handleLanguageChange = () => {\n  locale.value = form.language\n}\n\n// 清理定时器\nconst clearJumpTimer = () => {\n  if (jumpTimer) {\n    clearInterval(jumpTimer)\n    jumpTimer = null\n  }\n}\n\n// 开始倒计时\nconst startJumpCountdown = () => {\n  clearJumpTimer()\n  countdown.value = COUNTDOWN_DURATION\n\n  jumpTimer = setInterval(() => {\n    countdown.value--\n    if (countdown.value <= 0) {\n      clearJumpTimer()\n      router.push('/index')\n    }\n  }, COUNTDOWN_INTERVAL)\n}\n\n// 处理第一步：更新企业信息\nconst handleFirstStep = async () => {\n  try {\n    await enterprise.update(DEFAULT_LOCAL_EID, {\n      display_name: form.name,\n      logo: form.logo,\n      template_type: JSON.stringify({\n        ...defaultTemplateConfig,\n        style_type: form.type\n      }),\n      language: form.language\n    })\n    steps.value++\n  } catch (error) {\n    console.error('更新企业信息失败:', error)\n    throw error\n  }\n}\n\n// 处理第二步：用户注册\nconst handleSecondStep = async () => {\n  try {\n    await userApi.register({\n      username: form.account,\n      password: form.password,\n      nickname: form.account\n    })\n    steps.value++\n    startJumpCountdown()\n  } catch (error) {\n    console.error('用户注册失败:', error)\n    throw error\n  }\n}\n\n// 下一步处理\nconst handleNext = async () => {\n  try {\n    const valid = await formRef.value.validate()\n    if (!valid) return\n\n    if (isFirstStep.value) {\n      await handleFirstStep()\n    } else if (isSecondStep.value) {\n      await handleSecondStep()\n    }\n  } catch (error) {\n    console.error('操作失败:', error)\n  }\n}\n\n// 手动跳转\nconst handleManualJump = () => {\n  clearJumpTimer()\n  router.push('/index')\n}\n\n// 组件卸载时清理定时器\nonUnmounted(() => {\n  clearJumpTimer()\n})\n</script>\n\n<style scoped>\n.right-angle-triangle {\n  width: 0;\n  height: 0;\n  border-top: 31px solid #3664ef;\n  border-left: 29px solid transparent;\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n\n:deep(.el-step__icon.is-text) {\n  width: 36px;\n  height: 36px;\n  border-radius: 50%;\n}\n\n:deep(.el-step__title.is-wait) {\n  color: #c0c2c4;\n  font-weight: bold;\n}\n\n:deep(.el-step__title.is-process) {\n  color: #c0c2c4;\n}\n\n:deep(.el-step__head.is-process > .el-step__icon) {\n  background: #c0c2c4;\n  color: #fff;\n  margin-left: 12px;\n}\n\n:deep(.el-step__head.is-wait > .el-step__icon) {\n  background: #c0c2c4;\n  color: #fff;\n  margin-left: 12px;\n}\n\n:deep(.el-step__head.is-finish > .el-step__icon) {\n  background: #409eff;\n  color: #fff;\n  margin-left: 12px;\n}\n\n:deep(.el-step__line) {\n  background-color: #dcdfe6;\n  height: 2px;\n  margin-top: 5px;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/LoginModal/email.vue",
    "content": "<template>\n  <el-form ref=\"formRef\" label-position=\"top\" :model=\"form\" :rules=\"rules\" :validate-on-rule-change=\"true\" @keyup.enter=\"handleSubmit\">\n    <el-form-item :label=\"$t('form.new_email')\" prop=\"email\">\n      <el-input v-model=\"form.email\" v-trim size=\"large\" :placeholder=\"$t('form.input_placeholder') + $t('form.email')\" clearable />\n    </el-form-item>\n    <el-form-item :label=\"$t('form.verify_code')\" prop=\"verify_code\">\n      <el-input v-model=\"form.verify_code\" v-trim size=\"large\" :placeholder=\"$t('form.input_placeholder') + $t('form.verify_code')\">\n        <template #append>\n          <el-button :disabled=\"isSending || Boolean(emailCodeCount)\" @click.stop=\"handleGetCode\">\n            <div :class=\"emailCodeCount ? 'text-[#9A9A9A]' : 'text-[#2563EB]'\">\n              {{ emailCodeCount ? `${emailCodeCount}s` : $t('form.get_verify_code') }}\n            </div>\n          </el-button>\n        </template>\n      </el-input>\n    </el-form-item>\n\n    <!-- 更换按钮 -->\n    <div class=\"flex justify-end mt-7.5\">\n      <el-button class=\"w-24 h-9\" @click=\"handleClose\">\n        {{ $t('action.cancel') }}\n      </el-button>\n      <el-button type=\"primary\" class=\"w-24 h-9\" @click=\"handleSubmit\">\n        {{ $t('action.ok') }}\n      </el-button>\n    </div>\n  </el-form>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport type { FormInstance } from 'element-plus'\nimport { getEmailRules } from '@/utils/form-rules'\nimport commonApi from '@/api/modules/common'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport useEmail from '@/hooks/useEmail'\n\nconst emits = defineEmits(['success', 'close'])\n\nconst userStore = useUserStore()\nconst { sendEmailCode, emailCodeRule, emailCodeCount } = useEmail()\n\nconst formRef = ref<FormInstance>()\n\nconst form = reactive({\n  email: '',\n  verify_code: ''\n})\n\nconst isSending = ref(false)\n\n// 计算属性\nconst isEmail = computed(() => /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(form.email))\n\nconst rules = computed(() => ({\n  email: [getEmailRules()],\n  verify_code: [emailCodeRule]\n}))\n\n// 验证码发送\nconst handleGetCode = () => {\n  if (!isEmail.value) return\n  isSending.value = true\n  sendEmailCode(form.email).finally(() => {\n    isSending.value = false\n  })\n}\n\n// 关闭弹窗\nconst handleClose = () => {\n  emits('close')\n}\n\n// 重置表单\nconst resetForm = () => {\n  Object.assign(form, {\n    email: '',\n    verify_code: ''\n  })\n  formRef.value?.resetFields()\n}\n\n// 提交表单\nconst handleSubmit = () => {\n  return formRef.value?.validate().then(async (valid) => {\n    if (!valid) return\n\n    try {\n      await userStore.getUserInfo()\n      const id = userStore.info.user_id\n\n      await commonApi.verifyEmailcode(\n        {\n          email: form.email,\n          code: form.verify_code\n        },\n        id\n      )\n\n      const message = userStore.info.email\n        ? window.$t('profile.bind') + window.$t('status.success')\n        : window.$t('profile.change') + window.$t('status.success')\n\n      ElMessage.success(message)\n      emits('success')\n    } catch (error) {}\n  })\n}\n\ndefineExpose({\n  resetForm\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/LoginModal/forgetPassword.vue",
    "content": "<template>\n  <div v-if=\"!isOpLocalEnv\" class=\"mb-2\">\n    <h3>{{ $t('form.reset_password_method') }}</h3>\n    <el-radio-group v-model=\"verify_way\" @change=\"handleVerifyWayChange\">\n      <el-radio value=\"email_verify\" size=\"large\">{{ $t('form.email_verify') }}</el-radio>\n      <el-radio value=\"mobile_verify\" size=\"large\">{{ $t('form.mobile_verify') }}</el-radio>\n    </el-radio-group>\n  </div>\n\n  <el-form ref=\"formRef\" label-position=\"top\" :model=\"form\" :rules=\"[]\" @keyup.enter=\"handleSubmit\">\n    <el-form-item\n      :label=\"$t(`form.${verify_way === 'email_verify' ? 'email' : 'mobile'}`)\"\n      prop=\"username\"\n      :rules=\"[getUsernameRules(), usernameCheck]\"\n    >\n      <el-input\n        v-model=\"form.username\"\n        v-trim\n        size=\"large\"\n        :placeholder=\"$t('form.input_placeholder') + $t(`form.${verify_way === 'email_verify' ? 'email' : 'mobile'}`)\"\n        clearable\n        @blur=\"onUsernameBlur\"\n      />\n      <template #error>\n        <div v-if=\"!existingAccount\" class=\"text-xs text-[#f56c6c] absolute\" style=\"top: 100%; left: 0\">\n          {{ $t('status.not_found_account') }}\n          <button type=\"button\" class=\"text-xs text-[#2563EB] underline\" @click=\"handleClose\">\n            {{ $t('action.register') }}\n          </button>\n        </div>\n      </template>\n    </el-form-item>\n\n    <el-form-item :label=\"$t('form.verify_code')\" prop=\"verify_code\" :rules=\"[getCodeRules()]\">\n      <div class=\"flex items-center\" style=\"width: 100%\">\n        <el-input\n          v-model=\"form.verify_code\"\n          v-trim\n          size=\"large\"\n          class=\"no-right-radius flex-1\"\n          :placeholder=\"$t('form.input_placeholder') + $t('form.verify_code')\"\n        >\n          <template #append>\n            <el-button v-debounce :disabled=\"isRegister || isSending\" class=\"!bg-[#f5f5f5] border-0 w-29 no-left-radius\" @click.stop=\"handleGetCode\">\n              <div :class=\"['text-[#2563EB]', { 'text-[#9A9A9A]': isRegister || isSending }]\">\n                {{ getCodeCount() ? `${getCodeCount()}s` : $t('form.get_verify_code') }}\n              </div>\n            </el-button>\n          </template>\n        </el-input>\n      </div>\n    </el-form-item>\n\n    <el-form-item :label=\"$t('form.new_password')\" prop=\"new_password\" :rules=\"[getPasswordRules()]\">\n      <el-input v-model=\"form.new_password\" v-trim show-password size=\"large\" :placeholder=\"$t('form.new_password_placeholder')\"></el-input>\n    </el-form-item>\n\n    <el-form-item\n      :label=\"$t('form.new_password_confirm')\"\n      prop=\"confirm_password\"\n      :rules=\"[getPasswordRules(), getConfirmPasswordRules(form, 'new_password')]\"\n    >\n      <el-input\n        v-model=\"form.confirm_password\"\n        v-trim\n        show-password\n        size=\"large\"\n        :placeholder=\"$t('form.new_password_confirm_placeholder')\"\n      ></el-input>\n    </el-form-item>\n\n    <!-- 修改按钮 -->\n    <el-button v-debounce type=\"primary\" round class=\"w-full mt-3 !h-10\" @click=\"handleSubmit\">\n      {{ $t('action.update_password') }}\n    </el-button>\n  </el-form>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed, nextTick, watch } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport type { FormInstance } from 'element-plus'\nimport useEnv from '@/hooks/useEnv'\nimport commonApi from '@/api/modules/common'\nimport userApi from '@/api/modules/user'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport useEmail from '@/hooks/useEmail'\nimport useMobile from '@/hooks/useMobile'\nimport { getMobileRules, getEmailRules, getPasswordRules, getConfirmPasswordRules } from '@/utils/form-rules'\n\nconst emits = defineEmits(['success', 'close'])\n\nconst userStore = useUserStore()\nconst { emailCodeRule, sendEmailCode, emailCodeCount } = useEmail()\nconst { sendcode, codeRule, codeCount } = useMobile()\nconst { isOpLocalEnv } = useEnv()\n\nconst formRef = ref<FormInstance>()\n\nconst form = reactive({\n  username: '',\n  verify_code: '',\n  new_password: '',\n  confirm_password: ''\n})\n\nconst verify_way = ref('email_verify')\nconst isSending = ref(true)\nconst existingAccount = ref(true)\nconst usernameCache = reactive(new Map())\nconst isRegister = ref(true)\n\n// 获取用户名验证规则\nconst getUsernameRules = () => {\n  return verify_way.value === 'email_verify' ? getEmailRules() : getMobileRules()\n}\n\n// 获取验证码规则\nconst getCodeRules = () => {\n  return verify_way.value === 'email_verify' ? emailCodeRule : codeRule\n}\n\n// 获取验证码倒计时\nconst getCodeCount = () => {\n  return verify_way.value === 'email_verify' ? emailCodeCount.value : codeCount.value\n}\n\nconst isFormatCorrect = computed(() => {\n  const patterns = {\n    mobile_verify: /^1[3-9]\\d{9}$/,\n    email_verify: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\n  }\n  return patterns[verify_way.value].test(form.username)\n})\n\n// 重置表单\nconst resetForm = () => {\n  Object.assign(form, {\n    username: '',\n    verify_code: '',\n    new_password: '',\n    confirm_password: ''\n  })\n  existingAccount.value = true\n  isRegister.value = true\n  nextTick(() => {\n    formRef.value?.clearValidate()\n  })\n}\n\nconst handleVerifyWayChange = () => {\n  resetForm()\n}\n\n// 用户名验证规则\nconst usernameCheck = {\n  validator: async (_rule, _value, callback) => {\n    try {\n      if (form.username.trim() === '' || !isFormatCorrect.value) {\n        return callback()\n      }\n\n      await onUsernameBlur()\n\n      if (isRegister.value) {\n        existingAccount.value = false\n        return callback(new Error(window.$t(`form.${verify_way.value === 'email_verify' ? 'email' : 'mobile'}`) + window.$t('register.unregistered')))\n      }\n      return callback()\n    } catch (error) {\n      return callback()\n    }\n  },\n  trigger: 'blur'\n}\n\nconst handleGetCode = () => {\n  const sendCodeFn = verify_way.value === 'email_verify' ? sendEmailCode : sendcode\n  sendCodeFn(form.username)\n}\n\nconst onUsernameBlur = async () => {\n  if (!isFormatCorrect.value) return Promise.resolve()\n\n  if (usernameCache.has(form.username)) {\n    const cachedResult = usernameCache.get(form.username)\n    if (Date.now() - cachedResult.timestamp < 2 * 60 * 1000) {\n      isRegister.value = !cachedResult.exists\n      return Promise.resolve()\n    }\n  }\n\n  // 返回Promise确保外部可以await\n  return userApi.checkUsername(form.username).then((res) => {\n    isRegister.value = !res.data.exists\n    usernameCache.set(form.username, {\n      exists: res.data.exists,\n      timestamp: Date.now()\n    })\n  })\n}\n\nconst handleClose = () => {\n  resetForm()\n  emits('close')\n}\n\nconst handleSubmit = () => {\n  return formRef.value?.validate().then(async (valid) => {\n    if (!valid) return\n\n    try {\n      const resetData = {\n        verify_code: form.verify_code,\n        new_password: form.new_password,\n        confirm_password: form.confirm_password\n      }\n\n      if (verify_way.value === 'email_verify') {\n        await userStore.reset_password({\n          email: form.username,\n          ...resetData\n        })\n      } else {\n        await commonApi.verifycode({\n          mobile: form.username,\n          verifycode: form.verify_code,\n          type: '1'\n        })\n        await userStore.reset_password({\n          mobile: form.username,\n          ...resetData\n        })\n      }\n\n      ElMessage.success(window.$t('status.update_success'))\n      emits('success')\n      resetForm()\n    } catch (error) {\n      ElMessage.error()\n    }\n  })\n}\n// 监听验证码倒计时状态\nwatch(\n  [() => codeCount.value, () => emailCodeCount.value],\n  ([mobileCount, emailCount]) => {\n    isSending.value = mobileCount > 0 || emailCount > 0\n  },\n  {\n    immediate: true\n  }\n)\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/LoginModal/index.vue",
    "content": "<template>\n  <!-- 登录弹窗 -->\n  <el-dialog\n    v-model=\"isVisible\"\n    class=\"login-dialog\"\n    destroy-on-close\n    :style=\"dialogStyle\"\n    :close-on-click-modal=\"false\"\n    :show-close=\"login_way !== 'bind_mobile'\"\n    center\n  >\n    <!-- 顶栏显示 -->\n    <div v-if=\"login_way === 'bind_mobile'\" class=\"flex justify-center mt-5\">\n      <h4 class=\"text-xl text-primary font-semibold w-full flex items-center\">\n        <ElIcon class=\"mr-1 cursor-pointer\" size=\"18\" color=\"#4E4F51\" @click=\"handleLOGIN_WAY(LOGIN_WAY.wechat_login)\">\n          <ArrowLeft />\n        </ElIcon>\n        {{ $t('login.bind_mobile') }}\n      </h4>\n    </div>\n    <div v-else class=\"flex justify-center mt-5\">\n      <h4 class=\"text-xl text-[#1D1E1F] font-bold text-center\">\n        {{ $t('login.' + login_way + '_title') }}\n      </h4>\n    </div>\n\n    <template v-if=\"login_way === LOGIN_WAY.wechat_login || login_way === LOGIN_WAY.wecom_login\">\n      <WechatView v-if=\"login_way === LOGIN_WAY.wechat_login\" height=\"292px\" @oauth-success=\"handleOauthSuccess\" />\n      <WecomView v-else height=\"292px\" />\n\n      <div class=\"text-xs text-[#9A9A9A] text-center\">\n        {{ $t('login.agree') }}\n        <a class=\"text-[#4F5052] cursor-pointer underline\">{{ $t('login.terms_of_service') }}</a>\n        {{ $t('action.and') }}\n        <a class=\"text-[#4F5052] cursor-pointer underline\">{{ $t('login.privacy_policy') }}</a>\n      </div>\n    </template>\n    <template v-else>\n      <!-- 统一表单 -->\n      <el-form ref=\"formRef\" label-position=\"top\" :model=\"form\" :rules=\"rules\" class=\"mt-7\" @keyup.enter=\"handleSubmit\">\n        <!-- 用户名输入框 -->\n        <el-form-item :label=\"getUsernameLabel()\" prop=\"username\">\n          <el-input v-model=\"form.username\" v-trim size=\"large\" class=\"el-input--main\" :placeholder=\"getUsernamePlaceholder()\" clearable />\n        </el-form-item>\n\n        <!-- 密码输入框 -->\n        <el-form-item v-if=\"login_way === LOGIN_WAY.password_login\" :label=\"$t('form.password')\" prop=\"password\">\n          <el-input\n            v-model=\"form.password\"\n            v-trim\n            show-password\n            size=\"large\"\n            class=\"el-input--main\"\n            :placeholder=\"$t('form.input_placeholder') + $t('form.password')\"\n          />\n        </el-form-item>\n\n        <!-- 验证码输入框 -->\n        <el-form-item\n          v-if=\"login_way === LOGIN_WAY.message_login || login_way === LOGIN_WAY.bind_mobile\"\n          :label=\"getVerifyCodeLabel()\"\n          prop=\"verify_code\"\n        >\n          <el-input\n            v-model=\"form.verify_code\"\n            v-trim\n            size=\"large\"\n            class=\"el-input--main no-right-radius\"\n            :placeholder=\"$t('form.input_placeholder') + $t('form.verify_code')\"\n          >\n            <template #append>\n              <el-button v-debounce :disabled=\"isSending || !isMobile\" class=\"!bg-[#f5f5f5] border-0 w-29 no-left-radius\" @click.stop=\"handleGetCode\">\n                <div :class=\"['text-[#2563EB]', { 'text-[#9A9A9A]': isSending || !isMobile }]\">\n                  {{ codeCount ? `${codeCount}s` : $t('form.get_verify_code') }}\n                </div>\n              </el-button>\n            </template>\n          </el-input>\n        </el-form-item>\n      </el-form>\n\n      <div v-if=\"login_way !== 'bind_mobile'\" class=\"flex items-center justify-between mt-3 max-md:flex-col max-md:gap-2\">\n        <!-- 底部协议 -->\n        <div v-if=\"['password_login', 'message_login', 'wechat_login'].includes(login_way)\" class=\"text-xs text-[#9A9A9A] flex\">\n          {{ $t('login.agree') }}\n          <a class=\"text-[#4F5052] cursor-pointer underline\">{{ $t('login.terms_of_service') }}</a>\n          {{ $t('action.and') }}\n          <a class=\"text-[#4F5052] cursor-pointer underline\">{{ $t('login.privacy_policy') }}</a>\n        </div>\n        <div class=\"flex items-center justify-end\">\n          <el-button class=\"mr-1\" link type=\"primary\" @click=\"handleRegister\">\n            {{ $t('action.user_register') }}\n          </el-button>\n          <template v-if=\"!isOpLocalEnv || (isOpLocalEnv && openSMTP)\">\n            <div class=\"border-l border-[#E6E8EB] mr-1 h-4\"></div>\n            <el-button link type=\"primary\" @click=\"handleForgetPassword\">\n              {{ $t('action.forget_password') }}\n            </el-button>\n          </template>\n        </div>\n      </div>\n\n      <template v-if=\"login_way === 'bind_mobile'\">\n        <div class=\"flex items-center justify-end\">\n          <ElButton v-debounce type=\"primary\" :disabled=\"!form.verify_code && !form.username\" size=\"large\" class=\"min-w-[96px]\" @click=\"handleSubmit\">\n            {{ $t('action.ok') }}\n          </ElButton>\n        </div>\n      </template>\n      <el-button v-else v-debounce type=\"primary\" size=\"large\" round class=\"w-full mt-5\" @click=\"handleSubmit\">\n        {{ $t('action.login') }}\n      </el-button>\n    </template>\n\n    <!-- 其他登录方式 -->\n    <template v-if=\"!isOpLocalEnv && login_way !== 'bind_mobile'\">\n      <ElDivider class=\"my-8\">\n        <span class=\"text-placeholder text-sm\">\n          {{ $t('login.other_login_way') }}\n        </span>\n      </ElDivider>\n      <div class=\"flex items-center justify-center mt-5\">\n        <template v-for=\"item in LOGIN_WAYList\" :key=\"item.value\">\n          <div\n            class=\"flex-1 flex flex-col items-center justify-center gap-3 cursor-pointer\"\n            :class=\"item.value === login_way ? 'text-theme' : 'text-regular'\"\n            @click=\"handleLOGIN_WAY(item.value)\"\n          >\n            <div class=\"size-6\">\n              <svg-icon :name=\"item.icon\" size=\"24\" :stroke=\"item.value !== 'wecom_login'\" />\n            </div>\n            <p class=\"text-sm\">\n              {{ $t(`login.${item.label}`) }}\n            </p>\n          </div>\n        </template>\n      </div>\n    </template>\n  </el-dialog>\n\n  <!-- 注册弹窗 -->\n  <el-dialog v-model=\"registerVisible\" class=\"login-dialog\" destroy-on-close :style=\"dialogStyle\" :close-on-click-modal=\"false\" center>\n    <Register ref=\"registerRef\" :open-s-m-t-p=\"openSMTP\" @success=\"handleClose\" @close=\"handleClose\"></Register>\n  </el-dialog>\n\n  <!-- 重置密码弹窗 -->\n  <el-dialog v-model=\"forgetPasswordVisible\" class=\"login-dialog\" destroy-on-close :style=\"dialogStyle\" :close-on-click-modal=\"false\" center>\n    <ElButton class=\"absolute top-8 left-8 !text-[#B9BEC2]\" type=\"info\" link @click=\"handleClose\">\n      <ElIcon class=\"mr-1\">\n        <ArrowLeft />\n      </ElIcon>\n      {{ $t('action.back') }}\n    </ElButton>\n\n    <div class=\"pb-2\">\n      <h4 class=\"text-xl text-[#1D1E1F] font-bold text-center pb-8\">\n        {{ $t('form.reset_password') }}\n      </h4>\n      <ForgetPassword ref=\"forgetPasswordRef\" @success=\"handleClose\" @close=\"handleClosePaw\" />\n    </div>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowLeft } from '@element-plus/icons-vue'\nimport { ref, reactive, watch, computed, onMounted } from 'vue'\nimport type { FormInstance } from 'element-plus'\nimport { ElMessage } from 'element-plus'\nimport { useUserStore } from '@/stores/modules/user'\nimport { useAgentStore } from '@/stores/modules/agent'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\nimport { getMobileRules, getAccountOrEmailRules, getEmailRules, getPasswordRules } from '@/utils/form-rules'\nimport SvgIcon from '@/components/SvgIcon.vue'\n\nimport useEnv from '@/hooks/useEnv'\nimport useMobile from '@/hooks/useMobile'\n\nimport commonApi from '@/api/modules/common'\nimport enterpriseApi from '@/api/modules/enterprise'\nimport Register from './register.vue'\nimport ForgetPassword from './forgetPassword.vue'\nimport WechatView from './wechat.vue'\nimport WecomView from './wecom.vue'\n\nconst emit = defineEmits(['login', 'close'])\n\nconst { isOpLocalEnv } = useEnv()\nconst registerVisible = ref(false)\nconst forgetPasswordVisible = ref(false)\n\nconst userStore = useUserStore()\nconst agentStore = useAgentStore()\nconst enterpriseStore = useEnterpriseStore()\n\nconst { sendcode, codeRule, codeCount } = useMobile()\n\nconst formRef = ref<FormInstance>()\n\nconst openSMTP = ref(false)\n\nconst isVisible = ref(false)\n\nconst isSending = ref(true)\n\nconst LOGIN_WAY = {\n  password_login: 'password_login',\n  message_login: 'message_login',\n  wechat_login: 'wechat_login',\n  wecom_login: 'wecom_login',\n  bind_mobile: 'bind_mobile'\n} as const\n\ntype LoginWay = (typeof LOGIN_WAY)[keyof typeof LOGIN_WAY]\n\nconst login_way = ref<LoginWay>(LOGIN_WAY.password_login as LoginWay)\n\nconst form = reactive({\n  username: '',\n  password: '',\n  verify_code: ''\n})\n\n// 计算属性\nconst isMobile = computed(() => /^1[3-9]\\d{9}$/.test(form.username))\n\nconst dialogStyle = computed(() => ({\n  backgroundImage: `url(${window.$getPublicPath('/images/login_bg.png')})`\n}))\n\nconst showVerifyCode = computed(() => {\n  return [LOGIN_WAY.message_login, LOGIN_WAY.bind_mobile].includes(login_way.value)\n})\n\n// 工具函数\nconst getUsernameLabel = () => {\n  if (login_way.value === LOGIN_WAY.password_login) return window.$t('form.account')\n  return window.$t('form.mobile')\n}\n\nconst getUsernamePlaceholder = () => {\n  return window.$t('form.input_placeholder') + window.$t('form.account')\n}\n\nconst getVerifyCodeLabel = () => {\n  return login_way.value === LOGIN_WAY.bind_mobile ? '' : window.$t('form.verify_code')\n}\n\nconst rules = computed(() => {\n  return {\n    username: [isOpLocalEnv.value ? getEmailRules() : login_way.value === LOGIN_WAY.password_login ? getAccountOrEmailRules() : getMobileRules()],\n    password: [getPasswordRules()],\n    verify_code: [codeRule]\n  }\n})\n\nconst LOGIN_WAYList = computed(() => {\n  return [\n    {\n      icon: 'wechat',\n      label: 'wechat_login',\n      value: LOGIN_WAY.wechat_login\n    },\n    {\n      icon: 'wecom',\n      label: 'wecom_login',\n      value: LOGIN_WAY.wecom_login\n    },\n    {\n      icon: 'safe',\n      label: 'password_login',\n      value: LOGIN_WAY.password_login\n    },\n    {\n      icon: 'iphone',\n      label: 'message_login',\n      value: LOGIN_WAY.message_login\n    }\n  ]\n    .filter((item) => {\n      return isOpLocalEnv.value ? item.value === LOGIN_WAY.password_login : true\n    })\n    .filter((item) => {\n      return item.value === LOGIN_WAY.wecom_login ? enterpriseStore.is_install_wecom : true\n    })\n})\n\nconst handleGetCode = () => {\n  if (!isMobile.value) return\n  sendcode(form.username)\n}\n\nconst accountLogin = () => {\n  return userStore.login({\n    username: form.username,\n    password: form.password\n  })\n}\n\n// const smsLogin = () => {\n//   return commonApi.verifycode({\n//     mobile: form.username,\n//     verifycode: form.verify_code,\n//     type: '1'\n//   })\n// }\n\nconst handleSubmit = () => {\n  return formRef.value?.validate().then(async (valid) => {\n    if (!valid) return\n\n    try {\n      await performLogin()\n      ElMessage.success(window.$t('status.login_success'))\n      agentStore.loadAgentList()\n      close()\n    } catch (error) {\n      await handleLoginError(error)\n    }\n  })\n}\n\n// 执行登录逻辑\nconst performLogin = async () => {\n  if (showVerifyCode.value) {\n    await commonApi.verifycode({\n      mobile: form.username,\n      verifycode: form.verify_code,\n      type: '1'\n    })\n\n    if (login_way.value === 'bind_mobile') {\n      await userStore.bind_wechat({\n        mobile: form.username,\n        verify_code: form.verify_code,\n        openid: oauth_data.value.openid,\n        unionid: oauth_data.value.unionid,\n        nickname: oauth_data.value.nickname\n      })\n    } else {\n      await userStore.sms_login({\n        mobile: form.username,\n        verify_code: form.verify_code\n      })\n    }\n  } else {\n    await accountLogin()\n  }\n}\n\n// 处理登录错误\nconst handleLoginError = async (error) => {\n  const response = error.response || {}\n  const data = response.data || {}\n  const message = data.message || ''\n\n  if (message.includes('record not found')) {\n    if (isOpLocalEnv.value && !openSMTP.value) {\n      await userStore.register({\n        username: form.username,\n        password: form.password\n      })\n      ElMessage.success(window.$t('status.login_success'))\n      agentStore.loadAgentList()\n      isVisible.value = false\n    } else {\n      ElMessage.warning(window.$t('status.not_found_account'))\n    }\n  }\n  console.log(error)\n}\n\nconst oauth_data = ref<any>({})\n\n// 重置表单\nconst resetForm = () => {\n  Object.assign(form, {\n    username: '',\n    verify_code: '',\n    password: ''\n  })\n  clearFormValidation()\n}\n\n// 清除表单验证\nconst clearFormValidation = () => {\n  formRef.value?.clearValidate()\n}\n\n// 事件处理函数\nconst handleLOGIN_WAY = (value: LoginWay) => {\n  login_way.value = value\n  resetForm()\n}\n\nconst handleClose = () => {\n  isVisible.value = true\n  registerVisible.value = false\n  forgetPasswordVisible.value = false\n  form.verify_code = ''\n  login_way.value = LOGIN_WAY.password_login\n}\n\nconst handleClosePaw = () => {\n  forgetPasswordVisible.value = false\n  registerVisible.value = true\n}\n\nconst handleRegister = () => {\n  isVisible.value = false\n  registerVisible.value = true\n  resetForm()\n}\n\nconst handleForgetPassword = () => {\n  isVisible.value = false\n  forgetPasswordVisible.value = true\n  resetForm()\n}\n\n// 弹窗控制函数\nconst open = (data: { way?: LoginWay; openid?: string; unionid?: string } = {}) => {\n  if (data.way === LOGIN_WAY.wechat_login && data.openid) {\n    handleOauthSuccess({\n      openid: data.openid,\n      unionid: data.unionid\n    })\n  }\n  oauth_data.value = data\n  isVisible.value = true\n  clearFormValidation()\n}\n\nconst close = () => {\n  isVisible.value = false\n  clearFormValidation()\n  emit('close')\n}\n\n// OAuth 登录成功处理\nconst handleOauthSuccess = async (data: any) => {\n  await userStore.wechat_login({ unionid: data.unionid }).catch((err) => {\n    oauth_data.value = data\n    login_way.value = LOGIN_WAY.bind_mobile\n    return Promise.reject(err)\n  })\n  ElMessage.success(window.$t('status.login_success'))\n  agentStore.loadAgentList()\n  close()\n}\n\n// 加载 SMTP 配置\nconst loadSMTP = async () => {\n  const { data } = await enterpriseApi.getSMTPInfo('smtp')\n  openSMTP.value = data\n}\n\nwatch(\n  () => codeCount.value,\n  (newVal) => {\n    isSending.value = newVal > 0\n  },\n  {\n    immediate: true\n  }\n)\n\ndefineExpose({\n  open,\n  close\n})\n\nonMounted(() => {\n  loadSMTP()\n})\n</script>\n\n<style>\n.login-dialog {\n  --el-dialog-border-radius: 16px;\n  --el-dialog-padding-primary: 32px;\n  --el-dialog-width: 500px;\n\n  background: linear-gradient(180deg, #eaf3ff 0%, #fff 20%) !important;\n  background-size: cover;\n}\n\n.login-dialog .el-dialog__header {\n  padding: 0;\n}\n\n.login-dialog .el-dialog__headerbtn {\n  --el-color-info: #939499;\n\n  top: 18px;\n  right: 16px;\n  font-size: 18px;\n}\n\n.no-right-radius .el-input__wrapper {\n  border-top-right-radius: 0 !important;\n  border-bottom-right-radius: 0 !important;\n}\n\n.no-left-radius {\n  border-top-left-radius: 0 !important;\n  border-bottom-left-radius: 0 !important;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/LoginModal/register.vue",
    "content": "<template>\n  <!-- 顶栏显示 -->\n  <div class=\"flex justify-center mt-5\">\n    <template v-for=\"way in filteredRegisterWays\" :key=\"way.value\">\n      <el-button\n        :class=\"[\n          'bg-transparent border-0 hover:bg-white hover:border-[#2563EB]',\n          'px-0 rounded-none',\n          way.value === REGISTER_WAY.email ? '!ml-7.5' : '',\n          registerWay === way.value ? 'border-b-0.75 border-[#2563EB]' : 'border-b-0 border-[#1D1E1F]'\n        ]\"\n        @click=\"handleRegisterWay(way.value)\"\n      >\n        <h4 class=\"text-xl text-center mb-3\" :class=\"[registerWay === way.value ? 'text-[#1D1E1F] font-bold' : 'text-[#94959B]']\">\n          {{ $t(`form.${way.value}`) + $t('action.register') }}\n        </h4>\n      </el-button>\n    </template>\n  </div>\n\n  <el-form ref=\"formRef\" label-position=\"top\" :model=\"form\" :rules=\"[]\" class=\"px-2 mt-7\" @keyup.enter=\"handleSubmit\">\n    <el-form-item :label=\"$t(`form.${registerWay}`)\" prop=\"username\" :rules=\"[getUsernameRules(), usernameCheck]\">\n      <el-input\n        v-model=\"form.username\"\n        v-trim\n        size=\"large\"\n        class=\"el-input--main\"\n        :placeholder=\"$t('form.input_placeholder') + $t(`form.${registerWay}`)\"\n        clearable\n      />\n      <template #error>\n        <div v-if=\"existingAccount\" class=\"text-xs text-[#f56c6c] absolute\" style=\"top: 100%; left: 0\">\n          {{ $t(`form.existing_${registerWay}`) }}\n          <button type=\"button\" class=\"text-xs text-[#2563EB] underline\" @click=\"handleClose\">\n            {{ $t('action.login') }}\n          </button>\n        </div>\n      </template>\n    </el-form-item>\n\n    <el-form-item v-if=\"!isOpLocalEnv || (isOpLocalEnv && openSMTP)\" :label=\"$t('form.verify_code')\" prop=\"verify_code\" :rules=\"[getCodeRules()]\">\n      <div class=\"flex items-center\" style=\"width: 100%\">\n        <el-input\n          v-model=\"form.verify_code\"\n          v-trim\n          size=\"large\"\n          class=\"el-input--main w-80 no-right-radius flex-1\"\n          :placeholder=\"$t('form.input_placeholder') + $t('form.verify_code')\"\n        >\n          <template #append>\n            <el-button\n              v-debounce\n              :disabled=\"!isRegister || Boolean(getCodeCount())\"\n              class=\"!bg-[#f5f5f5] border-0 w-[100px] no-left-radius\"\n              @click.stop=\"handleGetCode\"\n            >\n              <div :class=\"['text-[#2563EB]', { 'text-[#9A9A9A]': !isRegister || Boolean(getCodeCount()) }]\">\n                {{ getCodeCount() ? `${getCodeCount()}s` : $t('form.get_verify_code') }}\n              </div>\n            </el-button>\n          </template>\n        </el-input>\n      </div>\n    </el-form-item>\n\n    <!-- 密码的输入框 -->\n    <el-form-item :label=\"$t('form.password')\" prop=\"password\" :rules=\"[getPasswordRules()]\">\n      <el-input\n        v-model=\"form.password\"\n        v-trim\n        show-password\n        size=\"large\"\n        class=\"el-input--main\"\n        :placeholder=\"$t('form.input_placeholder') + $t('form.password')\"\n      ></el-input>\n    </el-form-item>\n  </el-form>\n\n  <!-- 已有账号立即登录 -->\n  <div class=\"flex justify-end items-center\">\n    {{ $t('status.existing_account') }},\n    <el-button link type=\"primary\" @click=\"handleClose\">\n      {{ $t('action.login_directly') }}\n    </el-button>\n  </div>\n\n  <!-- 注册按钮  -->\n  <el-button v-debounce type=\"primary\" round class=\"w-full mt-5 !h-10\" @click=\"handleSubmit\">\n    {{ $t('action.register') }}\n  </el-button>\n\n  <!-- 底部协议 -->\n  <div class=\"text-xs text-[#9A9A9A] text-center mt-5\">\n    {{ $t('register.agree') }}\n    <a class=\"text-[#4F5052] cursor-pointer underline\">{{ $t('register.terms_of_service') }}</a>\n    {{ $t('action.and') }}\n    <a class=\"text-[#4F5052] cursor-pointer underline\">{{ $t('register.privacy_policy') }}</a>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed, nextTick } from 'vue'\nimport type { FormInstance } from 'element-plus'\nimport { ElMessage } from 'element-plus'\nimport { useUserStore } from '@/stores/modules/user'\nimport { getPasswordRules, getEmailRules, getMobileRules } from '@/utils/form-rules'\n\nimport useMobile from '@/hooks/useMobile'\nimport useEmail from '@/hooks/useEmail'\nimport useEnv from '@/hooks/useEnv'\n\nimport userApi from '@/api/modules/user'\nimport commonApi from '@/api/modules/common'\n\nwithDefaults(\n  defineProps<{\n    openSMTP: boolean\n  }>(),\n  {\n    openSMTP: false\n  }\n)\n\nconst emits = defineEmits(['success', 'close'])\n\nconst REGISTER_WAY = {\n  mobile: 'mobile',\n  email: 'email'\n} as const\n\nconst registerWays = [\n  { value: REGISTER_WAY.mobile, label: 'mobile' },\n  { value: REGISTER_WAY.email, label: 'email' }\n]\n\nconst userStore = useUserStore()\nconst { isOpLocalEnv } = useEnv()\nconst { emailCodeRule, sendEmailCode, emailCodeCount } = useEmail()\nconst { sendcode, codeRule, codeCount } = useMobile()\n\nconst formRef = ref<FormInstance>()\n\nconst form = reactive({\n  username: '',\n  password: '',\n  verify_code: ''\n})\n\nconst registerWay = ref(isOpLocalEnv.value ? REGISTER_WAY.email : REGISTER_WAY.mobile)\nconst existingAccount = ref(false)\nconst usernameCache = reactive(new Map())\nconst isRegister = ref(false)\n\n// 过滤注册方式\nconst filteredRegisterWays = computed(() => {\n  return registerWays.filter((way) => !isOpLocalEnv.value || way.value === REGISTER_WAY.email)\n})\n\nconst isFormatCorrect = computed(() => {\n  const patterns = {\n    [REGISTER_WAY.mobile]: /^1[3-9]\\d{9}$/,\n    [REGISTER_WAY.email]: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\n  }\n  return patterns[registerWay.value].test(form.username)\n})\n\n// 获取用户名验证规则\nconst getUsernameRules = () => {\n  if (registerWay.value === REGISTER_WAY.email) {\n    return getEmailRules()\n  }\n  return getMobileRules()\n}\n\n// 获取验证码规则\nconst getCodeRules = () => {\n  return registerWay.value === REGISTER_WAY.email ? emailCodeRule : codeRule\n}\n\n// 获取验证码倒计时\nconst getCodeCount = () => {\n  return registerWay.value === REGISTER_WAY.email ? emailCodeCount.value : codeCount.value\n}\n\nconst usernameCheck = {\n  validator: async (_rule, _value, callback) => {\n    try {\n      if (form.username.trim() === '' || !isFormatCorrect.value) {\n        return\n      }\n\n      await onUsernameBlur()\n\n      if (!isRegister.value) {\n        existingAccount.value = true\n        callback(new Error(window.$t(`form.${registerWay.value}`) + window.$t('register.unregistered')))\n      }\n    } catch (error) {}\n  },\n  trigger: 'blur'\n}\n\n// 重置表单\nconst resetForm = () => {\n  Object.assign(form, {\n    username: '',\n    verify_code: '',\n    password: ''\n  })\n  existingAccount.value = false\n  isRegister.value = false\n  nextTick(() => {\n    formRef.value?.clearValidate()\n  })\n}\n\nconst handleRegisterWay = (way) => {\n  resetForm()\n  registerWay.value = way\n}\n\nconst onUsernameBlur = async () => {\n  if (!isFormatCorrect.value) return Promise.resolve()\n\n  if (usernameCache.has(form.username)) {\n    const cachedResult = usernameCache.get(form.username)\n    if (Date.now() - cachedResult.timestamp < 2 * 60 * 1000) {\n      isRegister.value = !cachedResult.exists\n      return Promise.resolve()\n    }\n  }\n\n  // 返回Promise确保外部可以await\n  return userApi.checkUsername(form.username).then((res) => {\n    isRegister.value = !res.data.exists\n    usernameCache.set(form.username, {\n      exists: res.data.exists,\n      timestamp: Date.now()\n    })\n  })\n}\n\nconst handleGetCode = () => {\n  const sendCodeFn = registerWay.value === REGISTER_WAY.email ? sendEmailCode : sendcode\n  sendCodeFn(form.username)\n}\n\nconst handleClose = () => {\n  resetForm()\n  emits('close')\n}\n\nconst handleSubmit = () => {\n  return formRef.value?.validate().then(async (valid) => {\n    if (!valid) return\n\n    try {\n      // 手机号注册需要先验证验证码\n      if (registerWay.value === REGISTER_WAY.mobile) {\n        await commonApi.verifycode({\n          mobile: form.username,\n          verifycode: form.verify_code,\n          type: '1'\n        })\n      }\n\n      await userStore.register({\n        username: form.username,\n        password: form.password,\n        verify_code: form.verify_code\n      })\n\n      ElMessage.success(window.$t('action.register') + window.$t('status.success'))\n      emits('success')\n    } catch (error) {}\n  })\n}\n</script>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/LoginModal/resetPassword.vue",
    "content": "<template>\n  <div v-if=\"!isOpLocalEnv\" class=\"mb-2\">\n    <h3>{{ $t('form.reset_password_method') }}</h3>\n    <el-radio-group v-model=\"verify_way\" @change=\"handleVerifyWayChange\">\n      <el-radio value=\"email_verify\" size=\"large\" :disabled=\"!userStore.info.email\">{{ $t('form.email_verify') }}</el-radio>\n      <el-radio value=\"mobile_verify\" size=\"large\" :disabled=\"!userStore.info.mobile\">{{ $t('form.mobile_verify') }}</el-radio>\n    </el-radio-group>\n  </div>\n\n  <el-form ref=\"formRef\" label-position=\"top\" :model=\"form\" :rules=\"rules\" @keyup.enter=\"handleSubmit\">\n    <el-form-item :label=\"$t('form.verify_code')\" prop=\"verify_code\" :rules=\"[getCodeRules()]\">\n      <div class=\"flex items-center\" style=\"width: 100%\">\n        <el-input\n          v-model=\"form.verify_code\"\n          v-trim\n          size=\"large\"\n          class=\"md:min-w-80 no-right-radius flex-1\"\n          :placeholder=\"$t('form.input_placeholder') + $t('form.verify_code')\"\n        >\n          <template #append>\n            <el-button v-debounce :disabled=\"isSending\" class=\"w-29 no-left-radius\" @click.stop=\"handleGetCode\">\n              <div :class=\"['text-[#2563EB]', { 'text-[#9A9A9A]': isSending }]\">\n                {{ getCodeCount() ? `${getCodeCount()}s` : $t('form.get_verify_code') }}\n              </div>\n            </el-button>\n          </template>\n        </el-input>\n      </div>\n    </el-form-item>\n    <el-form-item :label=\"$t('form.new_password')\" prop=\"new_password\" :rules=\"[getPasswordRules()]\">\n      <el-input v-model=\"form.new_password\" v-trim show-password size=\"large\" :placeholder=\"$t('form.new_password_placeholder')\"></el-input>\n    </el-form-item>\n\n    <el-form-item\n      :label=\"$t('form.new_password_confirm')\"\n      prop=\"confirm_password\"\n      :rules=\"[getPasswordRules(), getConfirmPasswordRules(form, 'new_password')]\"\n    >\n      <el-input\n        v-model=\"form.confirm_password\"\n        v-trim\n        show-password\n        size=\"large\"\n        :placeholder=\"$t('form.new_password_confirm_placeholder')\"\n      ></el-input>\n    </el-form-item>\n\n    <!-- 修改按钮 -->\n    <el-button v-debounce type=\"primary\" round class=\"w-full mt-3 !h-10\" @click=\"handleSubmit\">\n      {{ $t('action.update_password') }}\n    </el-button>\n  </el-form>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed, watch } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport type { FormInstance } from 'element-plus'\nimport commonApi from '@/api/modules/common'\nimport useEnv from '@/hooks/useEnv'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport useEmail from '@/hooks/useEmail'\nimport useMobile from '@/hooks/useMobile'\nimport { getPasswordRules, getConfirmPasswordRules } from '@/utils/form-rules'\n\nconst { isOpLocalEnv } = useEnv()\n\nconst emits = defineEmits(['success'])\n\nconst userStore = useUserStore()\nconst { emailCodeRule, sendEmailCode, emailCodeCount } = useEmail()\nconst { sendcode, codeRule, codeCount } = useMobile()\n\nconst formRef = ref<FormInstance>()\n\nconst form = reactive({\n  verify_code: '',\n  new_password: '',\n  confirm_password: ''\n})\n\nconst verify_way = ref(userStore.info.email ? 'email_verify' : 'mobile_verify')\nconst isSending = ref(true)\n\n// 计算属性\nconst rules = computed(() => ({\n  new_password: [getPasswordRules()],\n  confirm_password: [getPasswordRules(), getConfirmPasswordRules(form, 'new_password')],\n  verify_code: [getCodeRules()]\n}))\n\n// 工具函数\nconst getCodeRules = () => {\n  return verify_way.value === 'email_verify' ? emailCodeRule : codeRule\n}\n\nconst getCodeCount = () => {\n  return verify_way.value === 'email_verify' ? emailCodeCount.value : codeCount.value\n}\n// 验证码发送\nconst handleGetCode = () => {\n  const sendCodeFn = verify_way.value === 'email_verify' ? sendEmailCode : sendcode\n  const target = verify_way.value === 'email_verify' ? userStore.info.email : userStore.info.mobile\n\n  sendCodeFn(target)\n  isSending.value = Boolean(getCodeCount())\n}\n\n// 提交表单\nconst handleSubmit = () => {\n  return formRef.value?.validate().then(async (valid) => {\n    if (!valid) return\n\n    try {\n      if (verify_way.value === 'email_verify') {\n        await performEmailReset()\n      } else {\n        await performMobileReset()\n      }\n\n      ElMessage.success(window.$t('status.update_success'))\n      emits('success')\n      resetForm()\n    } catch (error) {\n      ElMessage.error()\n    }\n  })\n}\n\n// 邮箱重置密码\nconst performEmailReset = async () => {\n  await userStore.reset_password({\n    email: userStore.info.email,\n    verify_code: form.verify_code,\n    new_password: form.new_password,\n    confirm_password: form.confirm_password\n  })\n}\n\n// 手机号重置密码\nconst performMobileReset = async () => {\n  await commonApi.verifycode({\n    mobile: userStore.info.mobile,\n    verifycode: form.verify_code,\n    type: '1'\n  })\n  await userStore.reset_password({\n    mobile: userStore.info.mobile,\n    verify_code: form.verify_code,\n    new_password: form.new_password,\n    confirm_password: form.confirm_password\n  })\n}\n\n// 验证方式切换\nconst handleVerifyWayChange = () => {\n  resetForm()\n}\n\n// 重置表单\nconst resetForm = () => {\n  Object.assign(form, {\n    verify_code: '',\n    new_password: '',\n    confirm_password: ''\n  })\n  formRef.value?.clearValidate()\n}\n\ndefineExpose({\n  resetForm\n})\n\n// 监听验证码倒计时状态\nwatch(\n  [() => codeCount.value, () => emailCodeCount.value],\n  ([mobileCount, emailCount]) => {\n    isSending.value = mobileCount > 0 || emailCount > 0\n  },\n  {\n    immediate: true\n  }\n)\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/LoginModal/wechat.vue",
    "content": "<script lang=\"ts\" setup>\nimport { onMounted, onBeforeUnmount, ref } from 'vue'\nimport { API_HOST, QYY_HOST  } from '@/api/host'\nimport { useBasicLayout } from '@/hooks/useBasicLayout'\n\nconst { isInMobile } = useBasicLayout()\n\n// const WECHAT_LOGIN_URL = `https://work.wescrm.com/wechat_oauth_login.html?plain=1&height=280&appid=wxbe904d4182458106&suiteid=53aihub&api=${encodeURIComponent(API_HOST + '/api/saas/wechat/redirect')}`\nconst WECHAT_LOGIN_URL = `https://work.wescrm.com/wechat_oauth_login.html?plain=1&height=280&appid=wxbe904d4182458106&suiteid=53aihub&api=${encodeURIComponent(API_HOST + '/api/saas/wechat/redirect')}&redirect_url=${encodeURIComponent(location.origin + '/oauth_login.html')}`\n\nconst props = withDefaults(defineProps<{\n  width?: string\n  height?: string\n}>(), {\n  width: '100%',\n  height: '280px'\n})\n\nconst emits = defineEmits(['oauthSuccess'])\n\nconst iframeRef = ref()\nconst loading = ref(false)\n\nconst mobileWechatUrl = ref('')\n\nlet timer: any = null\nonMounted(() => {\n  if (isInMobile.value){\n  } else {\n    loading.value = true\n    timer = setInterval(() => {\n      const contentWindow = (iframeRef.value.contentWindow && iframeRef.value.contentWindow[0]) || iframeRef.value.contentWindow\n      if (contentWindow) {\n        let oauthLoginData = null\n        try {\n          oauthLoginData = contentWindow.sessionStorage.getItem('oauth_login_data')\n          oauthLoginData = JSON.parse(oauthLoginData)\n        } catch (error) {\n          oauthLoginData = null\n        }\n        if (oauthLoginData) messageHandler({ data: oauthLoginData })\n      }\n    }, 2000)\n  }\n  // window.addEventListener('message', messageHandler)\n})\nonBeforeUnmount(() => {\n  // window.removeEventListener('message', messageHandler)\n  clearInterval(timer)\n})\nconst messageHandler = (res: any = {}) => {\n  const data = res.data || {}\n  const params = data.params || {}\n  const from = data.from || params.from || ''\n  const action = data.action || params.action || ''\n  const state = data.state || params.state || ''\n  const openid = data.openid || params.openid || ''\n  const nickname = data.nickname || params.nickname || ''\n  const unionid = data.unionid || params.unionid || ''\n  const access_token = data.access_token || params.access_token || ''\n  // if (!['53hub', '53aihub', 'wescrm'].includes(from))\n  //   return\n  clearInterval(timer)\n\n  if (openid || access_token) {\n    emits('oauthSuccess', { openid, nickname, unionid, access_token })\n    return\n  }\n}\n\n\nconst handleLogin = () => {\n  // const redirect_url = QYY_HOST + `/v4/xbot/hubredirect?appid=${ process.env.VITE_GLOB_OFFICIALID }&state=wechat_redirect&redirecturl=${encodeURIComponent(location.origin)}`\n  const redirect_url = 'https://api.ibos.cn'  + `/v4/xbot/hubredirect?appid=${ process.env.VITE_GLOB_OFFICIALID }&state=wechat_redirect&redirecturl=${encodeURIComponent(location.origin + '/?login_way=wechat_login')}`\n  window.location.href = redirect_url\n}\n\nconst handleLoad = () => {\n  loading.value = false\n}\n</script>\n\n<template>\n  <div class=\"w-full\" v-loading=\"loading\">\n    <div v-if=\"isInMobile\" :style=\"{ height, width }\" class=\"flex flex-col justify-center items-center\">\n      <div class=\"w-[220px] h-[220px] border relative rounded-lg overflow-hidden\">\n        <img :src=\"$getPublicPath('/images/login/wecom_login.png')\" alt=\"\" />\n        <div class=\"absolute inset-0 bg-white bg-opacity-90 flex justify-center items-center\">\n          <ElButton type=\"danger\" @click=\"handleLogin\"> {{ $t('login.immediate_login') }} </ElButton>\n        </div>\n      </div>\n      <p class=\"text-sm text-regular mt-3 text-opacity-60\">{{ $t('login.login_by_wechat') }}</p>\n    </div>\n    <iframe v-else ref=\"iframeRef\" @load=\"handleLoad\" class=\"-translate-x-1.5 scale-[1] overflow-hidden\" :style=\"{ height, width }\" scrolling=\"no\" :src=\"WECHAT_LOGIN_URL\" frameborder=\"0\" />\n  </div>\n</template>\n\n<style>\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/LoginModal/wecom.vue",
    "content": "<template>\n  <div :style=\"{ height, width }\" class=\"flex flex-col justify-center items-center\">\n    <div class=\"w-[220px] h-[220px] border relative rounded-lg overflow-hidden\">\n      <img :src=\"$getPublicPath('/images/login/wecom_login.png')\" alt=\"\" />\n      <div class=\"absolute inset-0 bg-white bg-opacity-90 flex justify-center items-center\">\n        <ElButton type=\"danger\" @click=\"handleLogin\"> {{ $t('login.immediate_login') }} </ElButton>\n      </div>\n    </div>\n    <p class=\"text-sm text-regular mt-3 text-opacity-60\">{{ $t('login.login_by_wecom') }}</p>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useBasicLayout } from '@/hooks/useBasicLayout'\n\nconst { isInMobile } = useBasicLayout()\n\nconst props = withDefaults(\n  defineProps<{\n    width?: string\n    height?: string\n  }>(),\n  {\n    width: '100%',\n    height: '280px'\n  }\n)\n\nconst handleLogin = () => {\n  const redirect_url = encodeURIComponent(\n    encodeURIComponent(`${window.location.origin}/?login_way=wecom_login`)\n  )\n  if (isInMobile.value) {\n    window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize'\n      .concat(`?appid=${process.env.VITE_GLOB_SUITEID}`)\n      .concat('&response_type=code')\n      .concat('&scope=snsapi_base')\n      .concat('&state=1')\n      .concat('#wechat_redirect')\n      .concat(\n        '&redirect_uri=' +\n          `https%3A%2F%2Fhubapi.53ai.com%2Fapi%2Fsaas%2Fwecom%2Fcallback%2Flogin%3Fsuiteid%3D${process.env.VITE_GLOB_SUITEID}%26redirect_url%3D${redirect_url}`\n      )\n  } else {\n    window.location.href = 'https://login.work.weixin.qq.com/wwlogin/sso/login/'\n      .concat('?login_type=ServiceApp')\n      .concat('&appid=ww4f0a0a97cee0f030')\n      .concat('&state=WWLogin')\n      .concat('&redirect_type=callback')\n      .concat(\n        `&redirect_uri=https%3A%2F%2Fwork.wescrm.com%2F%3Fsuiteid%3D${process.env.VITE_GLOB_SUITEID}%26redirect_url%3D${redirect_url}`\n      )\n  }\n}\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/MarkMap/index.ts",
    "content": "import { loadJS, loadCSS } from 'markmap-common';\nimport { Transformer } from 'markmap-lib';\nimport * as markmap from 'markmap-view';\n\nexport const transformer = new Transformer();\nconst { scripts, styles } = transformer.getAssets();\nloadCSS(styles);\nloadJS(scripts, { getMarkmap: () => markmap });\n"
  },
  {
    "path": "web/front/src/renderer/main/components/MarkMap/index.vue",
    "content": "<template>\n  <div class=\"flex flex-col bg-[#F9FAFB] rounded-xl overflow-hidden\">\n    <div class=\"flex-none h-[72px] bg-[#EBECEF] flex items-center px-6\">\n      <div class=\"flex-1\">\n        <div class=\"inline-flex h-12 px-1.5 items-center bg-[#E1E2E6] rounded-lg\">\n          <div :class=\"[\n            'w-16 h-9 cursor-pointer flex-center rounded text-base',\n            mode === 'image' ? 'bg-white text-[#1D1E1F]' : 'text-[#4F5052]'\n          ]\" @click=\"mode = 'image'\">\n            图片\n          </div>\n          <div :class=\"[\n            'w-16 h-9 cursor-pointer flex-center rounded text-base',\n            mode === 'code' ? 'bg-white text-[#1D1E1F]' : 'text-[#4F5052]'\n          ]\" @click=\"mode = 'code'\">\n            代码\n          </div>\n        </div>\n      </div>\n      <div class=\"flex items-center gap-5\" v-show=\"mode === 'image'\">\n        <el-dropdown>\n          <span class=\"el-dropdown-link\">\n            <el-icon color=\"#333333\" size=\"18\">\n              <Download />\n            </el-icon>\n            <el-icon color=\"#9A9A9A\" size=\"12\">\n              <ArrowDown />\n            </el-icon>\n          </span>\n          <template #dropdown>\n            <el-dropdown-menu>\n              <el-dropdown-item @click=\"downloadImage\">下载图片</el-dropdown-item>\n              <el-dropdown-item @click=\"copyPlainText\">复制文本</el-dropdown-item>\n              <el-dropdown-item @click=\"copyMarkdown\">复制markdown</el-dropdown-item>\n            </el-dropdown-menu>\n          </template>\n        </el-dropdown>\n\n        <el-icon class=\"cursor-pointer\" size=\"16\" color=\"#1D1E1F\" @click=\"zoomOut\">\n          <ZoomOut />\n        </el-icon>\n        <el-icon class=\"cursor-pointer\" size=\"16\" color=\"#1D1E1F\" @click=\"zoomIn\">\n          <ZoomIn />\n        </el-icon>\n      </div>\n      <div class=\"flex items-center gap-5\" v-show=\"mode === 'code'\">\n        <el-icon class=\"cursor-pointer\" @click=\"copyCode\">\n          <CopyDocument />\n        </el-icon>\n      </div>\n\n    </div>\n    <div class=\"flex-1 relative overflow-hidden\">\n      <transition name=\"slide-fade\" mode=\"out-in\">\n        <svg v-show=\"mode === 'image'\" class=\"absolute w-full h-full\" ref=\"svgRef\" key=\"image\" />\n      </transition>\n      <transition name=\"slide-fade\" mode=\"out-in\">\n        <div v-show=\"mode === 'code'\" class=\"absolute w-full h-full p-4\" key=\"code\">\n          <pre class=\"whitespace-pre-wrap h-full\">{{ value }}</pre>\n        </div>\n      </transition>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.slide-fade-enter-active {\n  transition: all 0.3s ease-out;\n}\n\n.slide-fade-leave-active {\n  transition: all 0.3s ease-in;\n}\n\n.slide-fade-enter-from {\n  transform: translateX(20px);\n  opacity: 0;\n}\n\n.slide-fade-leave-to {\n  transform: translateX(-20px);\n  opacity: 0;\n}\n</style>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { Markmap } from 'markmap-view'\nimport { ZoomOut, ZoomIn, Download, ArrowDown, CopyDocument } from '@element-plus/icons-vue'\nimport { ElMessage } from 'element-plus'\nimport { transformer } from './index'\nimport { saveAs } from 'file-saver'\n\nconst mode = ref('image') // 添加模式控制\nconst initValue = `\n# LlamaIndex定位转变及AgentWorkflow诞生背景\n- LlamaIndex从RAG框架转向多智能体框架\n- AgentWorkflow因Workflow不足而诞生\n# AgentWorkflow的构成及工作原理\n- Agent模块包含FunctionAgent和ReActAgent\n- AgentWorkflow模块负责整体流程编排\n# 基于AgentWorkflow的客户服务项目实践\n- 定义ConciergeAgent等不同功能智能体\n- 使用Chainlit进行UI开发\n# AgentWorkflow的问题及改进\n- FunctionAgent存在响应不及时的问题\n- 通过调整聊天记录解决响应问题\n# AgentWorkflow的优势与未来展望\n- 简化多智能体编排开发过程\n- 特定场景有待进一步改进完善\n- useful\n- easy\n- interactive\n`\nconst svgRef = ref()\nconst value = ref(initValue)\nlet mm\n\nconst update = async () => {\n  const { root } = transformer.transform(value.value)\n  await mm.setData(root)\n  mm.fit()\n}\n\nonMounted(() => {\n  mm = Markmap.create(svgRef.value)\n  update()\n})\n\n\nconst copyCode = () => {\n  navigator.clipboard.writeText(value.value).then(() => {\n    ElMessage.success('复制成功')\n  }).catch(() => {\n    ElMessage.error('复制失败')\n  })\n}\n\nconst zoomIn = () => {\n  mm.rescale(1.25)\n}\n\nconst zoomOut = () => {\n  mm.rescale(0.8)\n}\n\nconst downloadImage = async () => {\n  const svg = svgRef.value\n  // 克隆SVG元素以避免修改原SVG\n  const clonedSvg = svg.cloneNode(true)\n  // 添加白色背景\n  clonedSvg.setAttribute('style', 'background-color: white')\n  const svgData = new XMLSerializer().serializeToString(clonedSvg)\n  const canvas = document.createElement('canvas')\n  const ctx = canvas.getContext('2d')\n  const img = new Image()\n\n  // 获取SVG的实际宽高\n  const width = parseInt(svg.getAttribute('width')) || svg.clientWidth\n  const height = parseInt(svg.getAttribute('height')) || svg.clientHeight\n\n  canvas.width = width\n  canvas.height = height\n\n  img.onload = () => {\n    ctx?.drawImage(img, 0, 0, canvas.width, canvas.height)\n    canvas.toBlob((blob) => {\n      if (blob) {\n        saveAs(blob, 'markmap.png')\n      }\n    }, 'image/png')\n  }\n\n  img.src = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svgData)))\n}\n\nconst copyPlainText = () => {\n  const text = value.value.replace(/^[#*-]\\s*/gm, '')\n  navigator.clipboard.writeText(text).then(() => {\n    ElMessage.success('纯文本复制成功')\n  }).catch(() => {\n    ElMessage.error('复制失败')\n  })\n}\n\nconst copyMarkdown = () => {\n  navigator.clipboard.writeText(value.value).then(() => {\n    ElMessage.success('Markdown复制成功')\n  }).catch(() => {\n    ElMessage.error('复制失败')\n  })\n}\n</script>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/MarkMap/vis.vue",
    "content": "<template>\n  <div class=\"relative flex flex-col bg-[#F9FAFB] rounded-xl overflow-hidden\">\n    <div class=\"flex-1 bg-[#F9FAFB]\" ref=\"containerRef\"></div>\n    <div class=\"flex-none h-12 bg-[#F5F5F5] flex-center gap-5\">\n      <el-icon class=\"cursor-pointer\" size=\"18\" @click=\"zoomOut\">\n        <ZoomOut />\n      </el-icon>\n      <el-icon class=\"cursor-pointer\" size=\"18\" @click=\"zoomIn\">\n        <ZoomIn />\n      </el-icon>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from \"vue\"\nimport { ZoomIn, ZoomOut } from '@element-plus/icons-vue'\n// 导入vis-network\nimport { Network, DataSet } from 'vis-network/standalone'\n\nconst containerRef = ref(null)\nconst network = ref(null)\n\n// 放大功能\nconst zoomIn = () => {\n  if (network.value) {\n    const scale = network.value.getScale() * 1.2\n    network.value.moveTo({\n      scale: scale\n    })\n  }\n}\n\n// 缩小功能\nconst zoomOut = () => {\n  if (network.value) {\n    const scale = network.value.getScale() * 0.8\n    network.value.moveTo({\n      scale: scale\n    })\n  }\n}\n\nonMounted(() => {\n  // 定义节点组和颜色\n  const groups = {\n    center: { color: { background: '#9E9E9E', border: '#757575' }, shape: 'circle' },\n    blue: { color: { background: '#4285F4', border: '#3367D6' }, shape: 'circle' },\n    red: { color: { background: '#EA4335', border: '#C62828' }, shape: 'circle' },\n    green: { color: { background: '#34A853', border: '#2E7D32' }, shape: 'circle' },\n    orange: { color: { background: '#FBBC05', border: '#F57F17' }, shape: 'circle' }\n  }\n\n  // 创建节点数据集\n  var nodes = new DataSet([\n    { id: 1, label: \"一页爆火的...\", group: 'center' },\n    { id: 2, label: \"应用案例\", group: 'red' },\n    { id: 3, label: \"规划需求\", group: 'red' },\n    { id: 4, label: \"部分问题\", group: 'red' },\n    { id: 5, label: \"流程步骤\", group: 'green' },\n    { id: 6, label: \"入境要求\", group: 'green' },\n    { id: 7, label: \"相关文件\", group: 'green' },\n    { id: 8, label: \"城市景点\", group: 'green' },\n    { id: 9, label: \"对应文件\", group: 'green' },\n    { id: 10, label: \"任务处理\", group: 'orange' },\n    { id: 11, label: \"求婚地点\", group: 'orange' },\n    { id: 12, label: \"旅行贴士\", group: 'orange' },\n    { id: 13, label: \"旅行手册\", group: 'orange' },\n    { id: 14, label: \"手册要求\", group: 'blue' },\n    { id: 15, label: \"规划需求\", group: 'blue' },\n    { id: 16, label: \"成果分析\", group: 'blue' },\n  ]);\n\n  // 创建边数据集\n  var edges = new DataSet([\n    { from: 1, to: 2 },\n    { from: 1, to: 3, hidden: true }, // 图中未显示此连接\n    { from: 1, to: 5 },\n    { from: 1, to: 10 },\n    { from: 1, to: 16 },\n    { from: 2, to: 4 },\n    { from: 2, to: 3 },\n    { from: 5, to: 6 },\n    { from: 5, to: 7 },\n    { from: 5, to: 8 },\n    { from: 5, to: 9 },\n    { from: 10, to: 11 },\n    { from: 10, to: 12 },\n    { from: 10, to: 13 },\n    { from: 16, to: 14 },\n    { from: 16, to: 15 },\n  ]);\n  // 自定义节点绘制函数，添加三条横线\n  // 创建网络配置\n  var options = {\n    groups: groups,\n\n    physics: {\n      hierarchicalRepulsion: {\n        nodeDistance: 150\n      },\n      stabilization: true\n    },\n    nodes: {\n      size: 30,\n      font: {\n        size: 14,\n        color: '#576D9C',\n        face: 'Arial',\n        vadjust: 50 // 垂直调整，使文字位于节点下方\n      },\n      borderWidth: 0,\n    },\n    edges: {\n      width: 2,\n      color: {\n        color: '#c8c8c8',\n        highlight: '#848484'\n      },\n      smooth: {\n        type: 'continuous'\n      }\n    },\n    // interaction: {\n    //   hover: true,\n    //   navigationButtons: true,\n    //   keyboard: true\n    // }\n  };\n\n  // 创建网络\n  var data = {\n    nodes: nodes,\n    edges: edges,\n  };\n\n  // 保存网络实例的引用\n  network.value = new Network(containerRef.value, data, options);\n})\n</script>"
  },
  {
    "path": "web/front/src/renderer/main/components/Markdown/editor.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted, watch, onUnmounted } from 'vue'\n\nimport { markdownEditor } from './helper'\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: string\n  }>(),\n  {\n    modelValue: `# Markdown 示例\n\n## 二级标题\n这是一个简单的 Markdown 示例\n\n### 三级标题\n- 列表项1\n- 列表项2\n- 列表项3\n\n**加粗文本** 和 *斜体文本*\n\n[链接示例](https://example.com)\n\n\\`\\`\\`javascript\n// 代码块示例\nfunction hello() {\n  console.log('Hello World')\n}\n\\`\\`\\`\n`\n  }\n)\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: string): void\n}>()\n\nconst menuRef = ref(null)\nconst vditor = ref<Vditor | null>(null)\nconst currentMode = ref('wysiwyg')\n\nconst setVditor = () => {\n  if (vditor.value) {\n    vditor.value.destroy()\n  }\n\n  const options = {\n    after: () => {\n      vditor.value!.setValue(props.modelValue)\n    },\n    input: (value: string) => {\n      emit('update:modelValue', value)\n    }\n  }\n  if (currentMode.value === 'wysiwyg') {\n    options.mode = 'wysiwyg'\n  } else if (currentMode.value === 'ir') {\n    options.mode = 'sv'\n    options.preview = {\n      mode: 'both'\n    }\n  } else if (currentMode.value === 'sv') {\n    options.mode = 'sv'\n    options.preview = {\n      mode: 'editor'\n    }\n  }\n  options.preview = options.preview || {}\n  options.preview.actions = []\n  setTimeout(() => {\n    vditor.value = markdownEditor('vditor', options)\n  }, 100)\n}\n\n// 监听外部传入的值变化\nwatch(\n  () => props.modelValue,\n  (newValue) => {\n    if (vditor.value && newValue !== vditor.value.getValue()) {\n      vditor.value.setValue(newValue)\n    }\n  }\n)\n\n// 切换编辑器模式的函数\nconst switchMode = (mode: 'wysiwyg' | 'ir' | 'sv') => {\n  if (vditor.value && currentMode.value !== mode) {\n    currentMode.value = mode\n    setVditor()\n  }\n}\n\nonMounted(() => {\n  setVditor()\n})\n\nonUnmounted(() => {\n  if (vditor.value) {\n    vditor.value.destroy()\n  }\n})\n</script>\n\n<template>\n  <div class=\"h-full relative\">\n    <div\n      id=\"vditor\"\n      class=\"w-full !h-full vditor-custom\"\n      style=\"--toolbar-background-color: white\"\n    />\n\n    <div class=\"absolute right-5 top-1\">\n      <div ref=\"menuRef\" class=\"h-10 flex items-center border rounded px-2\">\n        <div\n          class=\"text-[#4F5052] flex-center gap-2 px-2 cursor-pointer\"\n          :class=\"{ 'text-[#1e80ff]': currentMode === 'wysiwyg' }\"\n          @click=\"switchMode('wysiwyg')\"\n        >\n          <div class=\"size-4 flex-center\">\n            <svg-icon name=\"edit\"></svg-icon>\n          </div>\n          <span class=\"text-sm\">{{ $t('common.preview') }}</span>\n        </div>\n        <div\n          class=\"text-[#4F5052] flex-center gap-2 px-2 cursor-pointer border-l\"\n          :class=\"{ 'text-[#1e80ff]': currentMode === 'ir' }\"\n          @click=\"switchMode('ir')\"\n        >\n          <div class=\"size-4 flex-center\">\n            <svg-icon name=\"layout-split\"></svg-icon>\n          </div>\n          <span class=\"text-sm\">{{ $t('common.split') }}</span>\n        </div>\n        <div\n          class=\"text-[#4F5052] flex-center gap-2 px-2 cursor-pointer border-l\"\n          :class=\"{ 'text-[#1e80ff]': currentMode === 'sv' }\"\n          @click=\"switchMode('sv')\"\n        >\n          <div class=\"size-4 flex-center\">\n            <svg-icon name=\"preview\" size=\"16\"></svg-icon>\n          </div>\n          <span class=\"text-sm\">{{ $t('common.code') }}</span>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style>\n.vditor-custom .vditor-toolbar {\n  padding-top: 6px;\n  padding-bottom: 6px;\n\n  /* height: 54px; */\n}\n\n.vditor-custom-menu .vditor-tooltipped {\n  width: auto;\n  padding: 0;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Markdown/helper.ts",
    "content": "\n\nimport loadLib from '@/utils/loadLib'\n\nexport const markdownEditor = async (element: HTMLDivElement | string | null, options: any = {}) => {\n  if (!element) {\n    element = document.createElement('div')\n  }\n  await loadLib('vditor')\n  return new window.Vditor(element, {\n    toolbar: [\n      'undo',\n      'redo',\n      '|',\n      'headings',\n      'bold',\n      'italic',\n      'strike',\n      'line',\n      'quote',\n      '|',\n      'list',\n      'ordered-list',\n      'check'\n    ],\n    mode: 'ir',  // 设置默认的编辑模式\n    preview: {},\n    cache: {\n      enable: false\n    },\n    cdn: window.$isElectron ? 'http://chat53dev.53ai.com/libs/js/vditor' : window.$chat53ai.getPublicPath('/libs/vditor'),\n    ...options\n  })\n}\n\nexport const mrakdownPreivew = async (element: HTMLDivElement | null, content: string = '', options: Partial<IVditorOptions> = {}) => {\n  if (!element) element = document.createElement('div')\n\n  await loadLib('vditor')\n  window.Vditor.preview(element, content, {\n    mode: 'light',\n    hljs: {\n      lineNumber: true,\n      style: 'github'\n    },\n    math: {\n      inlineDigit: true,\n      macros: {}\n    },\n    cdn: window.$isElectron ? 'http://chat53dev.53ai.com/libs/js/vditor' : window.$chat53ai.getPublicPath('/libs/vditor'),\n    ...options\n  })\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Markdown/preview.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onUnmounted, watch, nextTick } from 'vue'\nimport { mrakdownPreivew } from './helper'\n\nconst props = withDefaults(\n  defineProps<{\n    content?: string\n    typewriter?: boolean // 添加打字机模式属性\n    typingSpeed?: number // 打字速度控制\n  }>(),\n  {\n    content: ``,\n    typewriter: false, // 默认关闭打字机效果\n    typingSpeed: 50 // 默认打字速度，每秒字符数\n  }\n)\n\nconst contentRef = ref<HTMLDivElement>()\nconst displayedContent = ref('') // 用于存储当前显示的内容\nconst typingTimer = ref<number | null>(null)\nconst isTyping = ref(false)\n\n// 平滑打字效果函数\nconst smoothTyping = (newContent: string, typingSpeed: number) => {\n  if (typingTimer.value) {\n    clearTimeout(typingTimer.value)\n  }\n\n  isTyping.value = true\n  const currentLength = displayedContent.value.length\n\n  // 如果新内容比当前显示的短，直接更新（可能是内容被删除了）\n  if (newContent.length <= currentLength) {\n    displayedContent.value = newContent\n    mrakdownPreivew(contentRef.value!, displayedContent.value)\n    isTyping.value = false\n    return\n  }\n\n  // 计算需要添加的字符数\n  const charsToAdd = newContent.length - currentLength\n\n  // 计算打字间隔时间（毫秒）\n  const typingInterval = Math.max(10, Math.floor(1000 / typingSpeed))\n\n  // 逐字添加内容\n  let charIndex = 0\n\n  const typeNextChar = () => {\n    if (charIndex < charsToAdd) {\n      // 每次添加一个字符\n      displayedContent.value = newContent.substring(0, currentLength + charIndex + 1)\n      mrakdownPreivew(contentRef.value!, displayedContent.value)\n\n      // 滚动到底部\n      if (contentRef.value) {\n        contentRef.value.scrollTop = contentRef.value.scrollHeight\n      }\n\n      charIndex++\n      typingTimer.value = window.setTimeout(typeNextChar, typingInterval)\n    } else {\n      isTyping.value = false\n    }\n  }\n\n  typeNextChar()\n}\n\nwatch(\n  [() => props.content, () => props.typewriter],\n  ([content, newLoading], [oldLoading]) => {\n    // 当从打字机模式切换到非打字机模式时，需要更快的显示内容\n    if (!newLoading && oldLoading) {\n      smoothTyping(content, props.typingSpeed * 2)\n    } else if (!newLoading && !oldLoading) {\n      // 如果一直是非打字机模式，直接显示内容\n      nextTick(() => {\n        if (!contentRef.value) return\n        displayedContent.value = content\n        mrakdownPreivew(contentRef.value, content)\n      })\n    } else {\n      // 打字机模式下平滑显示内容\n      smoothTyping(content, props.typingSpeed)\n    }\n  },\n  { immediate: true }\n)\n\n// 组件卸载时清除定时器\nonUnmounted(() => {\n  if (typingTimer.value) {\n    clearTimeout(typingTimer.value)\n  }\n})\n</script>\n\n<template>\n  <div\n    ref=\"contentRef\"\n    class=\"markdown-preview vditor-reset\"\n    :class=\"{\n      'typewriter-mode': typewriter,\n      'is-typing': isTyping\n    }\"\n  >\n    <slot name=\"loading\" v-if=\"!content && typewriter\">\n      <span class=\"text-base text-[#1D1E1F] animate-bounce\">{{ $t('common.loading') }}... </span>\n    </slot>\n  </div>\n</template>\n\n<style>\n/* .markdown-preview.typewriter-mode {\n  overflow-y: auto;\n  max-height: 100%;\n  transition: all 0.2s ease;\n  position: relative;\n} */\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Pagination/index.vue",
    "content": "<template>\n  <div class=\"flex justify-between items-center py-4\">\n    <div class=\"text-sm text-[#666]\" v-html=\"$t('table.footer_text', { total: `<span class='text-[#2563eb]'>${total}</span>` })\" />\n    <el-pagination\n      :current-page=\"current_page\"\n      :page-size=\"page_size\"\n      :page-sizes=\"pageSizes\"\n      :layout=\"layout\"\n      :total=\"total\"\n      @current-change=\"handleCurrentChange\"\n      @size-change=\"handleSizeChange\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport { debounce } from '@/utils/functions/debounce'\n\nconst props = withDefaults(\n  defineProps<{\n    total?: number | string\n    pageSize?: number\n    page?: number\n    layout?: string\n    pageSizes?: number[]\n  }>(),\n  {\n    page: 1,\n    total: 0,\n    pageSize: 20,\n    layout: 'prev, pager, next, jumper',\n    pageSizes: () => [10, 20, 30, 40, 50, 100]\n  }\n)\n\nconst current_page = ref<number>(props.page)\nconst page_size = ref<number>(props.pageSize)\n\nconst emits = defineEmits<{\n  (e: 'currentChange', page: number): void\n  (e: 'update:page', page: number): void\n  (e: 'sizeChange', size: number): void\n  (e: 'update:pageSize', size: number): void\n}>()\n\nconst handleCurrentChange = debounce(\n  (page: number) => {\n    current_page.value = page\n    emits('currentChange', page)\n    emits('update:page', page)\n  },\n  200,\n  true\n)\nconst handleSizeChange = debounce(\n  (size: number) => {\n    page_size.value = size\n    emits('sizeChange', size)\n    emits('update:pageSize', size)\n  },\n  800,\n  true\n)\n\nwatch(\n  () => props.page,\n  (page) => {\n    current_page.value = page\n  },\n  {\n    immediate: true\n  }\n)\nwatch(\n  () => props.pageSize,\n  (size) => {\n    page_size.value = size\n  },\n  {\n    immediate: true\n  }\n)\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Prompt/input.vue",
    "content": "<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport { Codemirror } from 'vue-codemirror'\n// import { get_encoding } from 'tiktoken'\nimport type { DecorationSet, Tooltip } from '@codemirror/view'\nimport {\n  Decoration,\n  EditorView,\n  MatchDecorator,\n  ViewPlugin,\n  WidgetType,\n  keymap,\n  showTooltip\n} from '@codemirror/view'\nimport { StateEffect, StateField } from '@codemirror/state'\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue: string\n    placeholder?: string\n    disabled?: boolean\n    // 左边显示的行号\n    showLine?: boolean\n    showToken?: boolean\n    variables?: {\n      label: string\n      children: {\n        label: string\n        value: string\n      }[]\n    }[]\n    wordWrap?: boolean\n  }>(),\n  {\n    modelValue: '',\n    disabled: false,\n    placeholder: '',\n    showLine: false,\n    showToken: false,\n    variables: () => [],\n    wordWrap: true\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'change', data: any): void\n  (e: 'input', data: any): void\n  (e: 'update:modelValue', value: string): void\n  (e: 'focus'): void\n  (e: 'blur'): void\n}>()\n\nconst codemirrorRef = ref()\nconst editorView = ref<EditorView | null>(null)\nconst tooltipRef = ref<HTMLElement | null>(null)\n\nconst token = ref(0)\nconst prompt = ref('')\nconst selectedIndex = ref(-1)\n\n// 添加 tooltip 状态管理\nconst addTooltip = StateEffect.define<{ pos: number }>()\nconst tooltipField = StateField.define<readonly Tooltip[]>({\n  create() {\n    return null\n  },\n  update(tooltips, tr) {\n    for (const e of tr.effects) {\n      if (e.is(addTooltip)) return e.value\n    }\n    return tooltips\n  },\n  provide: (f) => showTooltip.from(f)\n})\n\nconst findVariableByValue = (value: string) => {\n  for (const group of props.variables) {\n    const found = group.children.find((item) => item.value === value)\n    if (found) return { ...found, group: group.label }\n  }\n  return null\n}\nclass VariableWidget extends WidgetType {\n  name: string\n\n  value: string\n\n  constructor(name: string, value: string) {\n    super()\n    this.name = name\n    this.value = value\n  }\n\n  eq(other: any) {\n    return this.name === other.name\n  }\n\n  toDOM() {\n    const elt = document.createElement('span')\n    elt.style.cssText = `\n      color: rgb(42, 100, 231);\n      padding: 0 4px;`\n    elt.textContent = this.name\n    return elt\n  }\n\n  ignoreEvent() {\n    return false\n  }\n}\nconst variableMatcher = new MatchDecorator({\n  regexp: /(\\{\\#(\\S+?)\\#\\}|\\{\\{(\\S+?)\\}\\})/g,\n  decoration: (match) => {\n    const variable = findVariableByValue(match[0])\n    if (variable) {\n      return Decoration.replace({\n        widget: new VariableWidget(variable?.label, match[1])\n      })\n    }\n\n    return ''\n  }\n})\n\nconst variablePlugin = ViewPlugin.fromClass(\n  class {\n    variablePlugin: DecorationSet\n\n    constructor(view: any) {\n      this.variablePlugin = variableMatcher.createDeco(view)\n    }\n\n    update(update) {\n      this.variablePlugin = variableMatcher.updateDeco(update, this.variablePlugin)\n    }\n  },\n  {\n    decorations: (instance) => instance.variablePlugin,\n    provide: (plugin) =>\n      EditorView.atomicRanges.of((view) => {\n        return view.plugin(plugin)?.variablePlugin || Decoration.none\n      })\n  }\n)\n\nlet _tokenTimer: any\nconst calcToken = () => {\n  if (!props.showToken) return\n\n  clearTimeout(_tokenTimer)\n  _tokenTimer = setTimeout(() => {\n    const content_html = prompt.value\n    // const encoding = get_encoding('cl100k_base')\n    // const tokens = encoding.encode(content_html)\n    // encoding.free()\n    // token.value = content_html.trim() ? tokens.length : 0\n  }, 200)\n}\n\nconst onChange = () => {\n  nextTick(() => {\n    emits('update:modelValue', prompt.value)\n    emits('change', prompt.value)\n    emits('input', prompt.value)\n  })\n  calcToken()\n}\n\nconst insertContent = (from: number, to: number, content: string) => {\n  editorView.value.dispatch({\n    changes: {\n      from, // 保留已输入的 /\n      to,\n      insert: content\n    }\n  })\n}\n\nconst updateSelectedItem = () => {\n  const items = tooltipRef.value.querySelectorAll('.tooltip-item')\n  items.forEach((item: HTMLElement, index) => {\n    if (index === selectedIndex.value) {\n      item.classList.add('selected')\n      item.scrollIntoView({ block: 'nearest' })\n    } else {\n      item.classList.remove('selected')\n    }\n  })\n}\nconst hideTooltip = () => {\n  if (editorView.value) {\n    editorView.value.dispatch({\n      effects: addTooltip.of(null)\n    })\n  }\n  document.removeEventListener('keydown', handleKeyDown, true)\n}\nconst handleKeyDown = (event: KeyboardEvent) => {\n  if (!tooltipRef.value) return\n\n  const items = tooltipRef.value.querySelectorAll('.tooltip-item')\n  switch (event.key) {\n    case 'ArrowDown':\n    case 'ArrowUp':\n      event.preventDefault()\n      event.stopPropagation()\n      const direction = event.key === 'ArrowDown' ? 1 : -1\n      selectedIndex.value = Math.max(0, Math.min(selectedIndex.value + direction, items.length - 1))\n      updateSelectedItem()\n      break\n    case 'Enter':\n      event.preventDefault()\n      event.stopPropagation()\n      if (selectedIndex.value >= 0) {\n        const node = items[selectedIndex.value]\n        node.click()\n        hideTooltip()\n      }\n      break\n  }\n}\n\nconst showVarTooltip = (pos: number, to: number) => {\n  // 创建 tooltip 内容\n  const dom = document.createElement('div')\n  dom.className = 'variable-tooltip'\n  tooltipRef.value = dom\n\n  props.variables.forEach((group) => {\n    const groupTitle = document.createElement('div')\n    groupTitle.className = 'tooltip-title'\n    groupTitle.textContent = group.label\n    dom.appendChild(groupTitle)\n\n    group.children.forEach((variable) => {\n      const item = document.createElement('div')\n      item.className = 'tooltip-item'\n      item.textContent = variable.label\n      item.dataset.value = variable.value\n      item.onclick = () => {\n        insertContent(pos, to, variable.value)\n        hideTooltip()\n      }\n      dom.appendChild(item)\n    })\n  })\n\n  // 显示 tooltip\n  editorView.value.dispatch({\n    effects: addTooltip.of({\n      pos,\n      above: true,\n      create: () => ({ dom })\n    })\n  })\n\n  nextTick(() => {\n    // 重置选中索引\n    selectedIndex.value = 0\n    updateSelectedItem()\n    document.addEventListener('keydown', handleKeyDown, true)\n  })\n}\n\nconst extensions = computed(() => {\n  const options = [\n    EditorView.updateListener.of((update) => {\n      editorView.value = update.view\n\n      // 在输入其他内容时关闭 tooltip\n      if (update.docChanged) {\n        update.view.dispatch({\n          effects: addTooltip.of(null)\n        })\n      }\n    })\n  ]\n  if (props.wordWrap) options.push(EditorView.lineWrapping)\n\n  if (props.variables && props.variables.length) {\n    options.push(\n      ...[\n        variablePlugin,\n        tooltipField,\n        keymap.of([\n          {\n            key: '/',\n            run(view) {\n              const pos = view.state.selection.main.head\n\n              // 延迟显示 tooltip\n              setTimeout(() => {\n                if (view.state.selection.main.head === pos + 1) {\n                  // 确保用户没有继续输入\n                  showVarTooltip(pos, pos + 1)\n                }\n              }, 200) // 200ms 延迟\n              return false\n            }\n          }\n        ])\n      ]\n    )\n  }\n  return options\n})\n\nconst scrollToBottom = () => {\n  nextTick(() => {\n    if (editorView.value) {\n      const lastLine = editorView.value.state.doc.lines - 1\n      const lastLineEnd = editorView.value.state.doc.line(lastLine).to\n      editorView.value.dispatch({\n        selection: { anchor: lastLineEnd, head: lastLineEnd },\n        scrollIntoView: true\n      })\n    }\n  })\n}\n\nwatch(\n  () => props.modelValue,\n  () => {\n    prompt.value = props.modelValue\n    calcToken()\n  },\n  { immediate: true }\n)\n\nwatch(\n  () => props.variables,\n  () => {\n    if (codemirrorRef.value) {\n      setTimeout(async () => {\n        const oldPrompt = prompt.value\n        prompt.value = ''\n        await nextTick()\n        prompt.value = oldPrompt\n      }, 200)\n    }\n  },\n  { deep: true }\n)\n// 新增：处理全局点击的方法\nconst handleGlobalClick = (event: MouseEvent) => {\n  if (tooltipRef.value && !tooltipRef.value.contains(event.target as Node)) hideTooltip()\n}\n\n// 设置和清理全局点击事件监听器\nonMounted(() => {\n  document.addEventListener('click', handleGlobalClick)\n})\n\nonUnmounted(() => {\n  document.removeEventListener('click', handleGlobalClick)\n})\n\ndefineExpose({\n  showTooltip() {\n    const pos = Math.max(editorView.value.state.doc.length, 0)\n    showVarTooltip(pos, pos)\n  },\n  insertContent(content: string) {\n    const pos = Math.max(editorView.value.state.doc.length, 0)\n    insertContent(pos, pos, content)\n  },\n  forceUpdate(text = '') {\n    prompt.value = text\n  },\n  scrollToBottom\n})\n</script>\n\n<template>\n  <Codemirror\n    ref=\"codemirrorRef\"\n    v-model=\"prompt\"\n    :disabled=\"disabled\"\n    class=\"w-full prompt-code\"\n    :class=\"[showLine ? '' : 'prompt-line--hidden']\"\n    :placeholder=\"$t(placeholder)\"\n    :indent-with-tab=\"false\"\n    :tab-size=\"2\"\n    :extensions=\"extensions\"\n    :style=\"$attrs.style\"\n    @change=\"onChange\"\n    @focus=\"emits('focus')\"\n    @blur=\"emits('blur')\"\n  />\n  <!-- v-bind=\"{ ...$attrs }\" -->\n\n  <div v-if=\"showToken\" class=\"px-2 py-px text-right text-[#182B50] text-opacity-60 text-xs\">\n    {{ token }}个token\n  </div>\n</template>\n\n<style>\n.cm-focused {\n  outline: none !important;\n}\n\n.prompt-line--hidden .cm-gutters {\n  display: none !important;\n}\n\n.ͼ1 .cm-placeholder {\n}\n\n.ͼ1 .cm-scroller {\n  font-family: Arial, Helvetica, sans-serif;\n  font-size: 14px;\n  color: #182b50;\n}\n\n.ͼ2 .cm-activeLine {\n  background: none !important;\n}\n\n.variable-tooltip {\n  width: 150px;\n  max-height: 250px;\n  overflow-y: auto;\n  border: none !important;\n  background-color: white !important;\n  padding: 4px;\n  border-radius: 4px !important;\n  box-shadow: 0 2px 8px rgb(0 0 0 / 15%);\n  z-index: 1000;\n}\n\n.tooltip-title {\n  height: 24px;\n  line-height: 24px;\n  font-size: 12px;\n  color: #182b50;\n  opacity: 0.6;\n  cursor: default;\n  padding: 0 8px;\n  margin-top: 4px;\n}\n\n.tooltip-item {\n  padding: 0 8px;\n  height: 24px;\n  line-height: 24px;\n  cursor: pointer;\n  font-size: 12px;\n  color: #2563eb;\n  border-radius: 4px;\n  transition: background-color 0.2s;\n}\n\n.tooltip-item:hover,\n.tooltip-item.selected {\n  background-color: #f5f5f5;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/RelatedScene/index.vue",
    "content": "<template>\n  <div v-if=\"currentAgent.settings_obj?.relate_agents?.length\">\n    <el-divider v-if=\"isWorkflow\" class=\"divider text-center\">\n      <span class=\"text-sm text-secondary\">{{ $t('chat.completion_next_action') }}</span>\n    </el-divider>\n    <div v-else class=\"flex items-center\">\n      <SvgIcon name=\"related\" stroke=\"true\" class=\"text-secondary\" />\n      <p class=\"pl-2 text-sm text-secondary\">{{ $t('chat.completion_scene') }}</p>\n    </div>\n    <div class=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mt-3\" :class=\"[isWorkflow ? 'p-4' : '']\">\n      <template v-for=\"item in currentAgent.settings_obj?.relate_agents\" :key=\"item.scene\">\n        <div\n          class=\"p-4 flex items-center gap-2 border rounded-md cursor-pointer hover:shadow-lg transition-all duration-300\"\n          @click=\"handleNextAgent(item)\"\n        >\n          <img class=\"size-10 rounded-md\" :src=\"item.logo\" />\n          <div class=\"flex-1 min-w-0\">\n            <h6 class=\"text-sm truncate\">{{ item.name }}</h6>\n            <p class=\"text-xs text-secondary truncate\">{{ item.description }}</p>\n          </div>\n        </div>\n      </template>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick } from 'vue'\n\nimport { useConversationStore } from '@/stores/modules/conversation'\nimport SvgIcon from '../SvgIcon.vue'\n\nconst convStore = useConversationStore()\n\nconst currentAgent = computed(() => convStore.currentAgent)\n\ninterface OutputField {\n  id: string\n  label: string\n  value: string\n  variable: string\n}\n\nconst props = withDefaults(\n  defineProps<{\n    isWorkflow?: boolean\n    // 应用型需要传数组，对话型传字符串\n    output: OutputField[] | string\n  }>(),\n  {\n    isWorkflow: false,\n    output: () => []\n  }\n)\n\nconst emit = defineEmits<{\n  (e: 'initAgent'): void\n}>()\n\nconst getParameter = (): OutputField[] => {\n  if (props.isWorkflow) return props.output as OutputField[]\n  // 跟后台设置统一变量名称\n  return [\n    {\n      id: 'output',\n      label: '',\n      value: props.output as string,\n      variable: 'text'\n    }\n  ]\n}\n\nconst handleNextAgent = (item) => {\n  const agent = convStore.findAgentByAgentId(item.agent_id)\n  if (agent) {\n    const currentAgentId = convStore.current_agentid\n    const parameters = getParameter()\n    convStore.setNextAgentPrepare({\n      agent_id: item.agent_id,\n      execution_rule: item.execution_rule,\n      // 兼容旧数据\n      is_workflow: typeof item.is_workflow === 'boolean' ? item.is_workflow : true,\n      parameters: Object.keys(item.field_mapping).reduce((acc, key) => {\n        acc[key] = item.field_mapping[key].replace(/\\{\\#(.*?)\\#\\}/g, (match, p1) => {\n          return parameters.find((item) => item.variable === p1)?.value || ''\n        })\n        return acc\n      }, {})\n    })\n    convStore.pushUsualAgent(agent)\n    convStore.setCurrentState(item.agent_id, 0)\n    if (item.agent_id === currentAgentId) {\n      nextTick(() => {\n        emit('initAgent')\n      })\n    }\n  } else {\n    ElMessage.warning(window.$t('chat.no_available_agent'))\n  }\n}\n</script>\n\n<style scoped>\n@media (width <= 768px) {\n  :deep(.divider .el-divider__text) {\n    width: 55%;\n  }\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Search/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { nextTick, ref } from 'vue'\nimport { Search } from '@element-plus/icons-vue'\n\nimport { debounce } from '@/utils/functions/debounce'\n\nconst props = withDefaults(\n  defineProps<{\n    placeholder?: string\n    size?: string\n  }>(),\n  {\n    placeholder: '',\n    size: 'large'\n  }\n)\n\nconst emits = defineEmits<{\n  (e: 'input', value: any): void\n  (e: 'change', value: any): void\n}>()\n\nconst inputRef = ref()\n\nconst input = ref('')\nconst searching = ref(false)\n\nconst handleFocus = () => {\n  searching.value = true\n  nextTick(() => {\n    inputRef.value.focus()\n  })\n}\nconst handleBlur = () => {\n  if (input.value) return\n  searching.value = false\n}\n\nconst onInput = debounce(() => {\n  emits('input', input.value)\n}, 600)\nconst onChange = debounce(() => {\n  emits('change', input.value)\n}, 0)\n</script>\n\n<template>\n  <ElInput\n    v-if=\"searching\"\n    ref=\"inputRef\"\n    v-model=\"input\"\n    style=\"max-width: 230px\"\n    :size=\"size\"\n    clearable\n    :prefix-icon=\"Search\"\n    :placeholder=\"placeholder\"\n    class=\"input-with-search\"\n    @blur=\"handleBlur\"\n    @input=\"onInput\"\n    @change=\"onChange\"\n  />\n  <div\n    v-else\n    class=\"flex items-center gap-1 cursor-pointer text-[#576D9C] h-[40px]\"\n    @click=\"handleFocus\"\n  >\n    <SvgIcon name=\"search\" width=\"16\" />\n    <span class=\"text-sm\">{{ $t('action.search') }}</span>\n  </div>\n</template>\n\n<style>\n.input-with-search .el-input-group__prepend {\n  padding: 0 10px;\n\n  --el-fill-color-light: transparent;\n}\n\n.input-with-search .el-input-group__append {\n  padding: 0 12px;\n  cursor: pointer;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Slider/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport { ArrowLeft, ArrowRight } from '@element-plus/icons-vue'\n\nconst props = withDefaults(defineProps<{\n  list: any[]\n  gap?: string | number\n}>(), {\n  gap: 2,\n  list: () => [],\n})\nconst scrollRef = ref()\n\nconst showBtn = ref<boolean>(true)\n\nfunction scroll(targetScrollLeft: number) {\n  const duration = 300 // 动画持续时间，单位为毫秒\n  const startTime = performance.now()\n  const element = scrollRef.value\n\n  function step(timestamp) {\n    const elapsedTime = timestamp - startTime\n    const progress = Math.min(elapsedTime / duration, 1) // 计算完成度\n    element.scrollLeft = easeInOutCubic(progress) * (targetScrollLeft - element.scrollLeft) + element.scrollLeft\n\n    if (progress < 1)\n      requestAnimationFrame(step)\n  }\n\n  requestAnimationFrame(step)\n}\n\n// 缓动函数，实现动画平滑开始和结束\nfunction easeInOutCubic(t) {\n  return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1\n}\n\nconst handleScrollLeft = () => {\n  scroll(scrollRef.value.scrollLeft - 200)\n}\nconst handleScrollRight = () => {\n  scroll(scrollRef.value.scrollLeft + 200)\n}\n\nconst onChange = () => {\n  nextTick(() => {\n    showBtn.value = scrollRef.value.scrollWidth > scrollRef.value.offsetWidth\n  })\n}\n\nconst resize = () => {\n  onChange()\n}\n\nonMounted(() => {\n  window.addEventListener('resize', resize)\n})\nonUnmounted(() => {\n  window.removeEventListener('resize', resize)\n})\n\nwatch(() => props.list.length, (_) => {\n  onChange()\n}, { immediate: true })\n</script>\n\n<template>\n  <div class=\"flex items-center gap-1\">\n    <el-icon v-if=\"showBtn\" class=\"flex-none icon cursor-pointer\" @click=\"handleScrollLeft\">\n      <ArrowLeft />\n    </el-icon>\n    <div ref=\"scrollRef\"\n      class=\"flex-1 flex flex-nowrap overflow-x-auto scrollbar--none whitespace-nowrap traslation-all\"\n      :class=\"[`gap-${gap}`]\">\n      <slot />\n    </div>\n    <el-icon v-if=\"showBtn\" class=\"flex-none icon cursor-pointer\" @click=\"handleScrollRight\">\n      <ArrowRight />\n    </el-icon>\n    <!-- 右箭头 -->\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Sortable/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, ref, watch } from 'vue'\n\nimport Sortable from 'sortablejs'\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue: any[]\n    identity?: string\n    props?: any\n  }>(),\n  {\n    modelValue: [],\n    identity: 'id',\n    props: {\n      handle: '.sort-icon',\n      animation: 150\n    }\n  }\n)\n\nconst emits = defineEmits<{\n  (event: 'update:modelValue', data: string): any\n}>()\nconst id = `sort_${Math.random().toString(36).substr(2, 9)}`\n\nconst list = ref([])\n\nlet _sortable\nonMounted(() => {\n  const sortableEl = document.querySelector(`#${id}`)\n  if (!sortableEl) return\n  _sortable = Sortable.create(sortableEl, {\n    onStart: ({ target, oldIndex }) => (target.children[oldIndex].style.background = props.dragBg),\n    onEnd: ({ target, newIndex: targetIndex, oldIndex: originIndex }) => {\n      if (targetIndex === originIndex) return\n      const value = list.value\n      const originData = value.splice(originIndex, 1)[0]\n      value.splice(targetIndex, 0, originData)\n      emits('update:modelValue', value)\n    },\n    ...props.props\n  })\n})\n\nonUnmounted(() => {\n  if (_sortable) _sortable.destroy()\n  _sortable = undefined\n})\nwatch(\n  () => props.modelValue,\n  (val) => {\n    list.value = val\n  },\n  { immediate: true, deep: true }\n)\n</script>\n\n<template>\n  <div :id=\"id\">\n    <slot name=\"header\" />\n    <template v-for=\"(item, index) in list\" :key=\"item[identity]\">\n      <slot name=\"item\" :item=\"item\" :index=\"index\" />\n    </template>\n    <slot name=\"footer\" />\n  </div>\n</template>\n\n<style>\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/SvgIcon.vue",
    "content": "<script setup lang=\"ts\" name=\"SvgIcon\">\nimport { computed } from 'vue'\n\ninterface SvgProps {\n  name: string // 图标的名称 ==> 必传\n  color?: string\n  size?: number | string\n  stroke?: boolean // 是否为描边类型的图标\n}\n\n// 接收父组件参数并设置默认值\nconst props = withDefaults(defineProps<SvgProps>(), {\n  name: '',\n  size: 16,\n  stroke: false\n})\n\nconst symbolId = computed(() => `#icon-${props.name}`)\n</script>\n\n<template>\n  <svg\n    :style=\"{ width: size + 'px', height: size + 'px' }\"\n    :class=\"{ 'custom-color': color, 'is-stroke': stroke }\"\n    aria-hidden=\"true\"\n  >\n    <use :xlink:href=\"symbolId\" />\n  </svg>\n</template>\n\n<style scoped>\nsvg {\n  width: 1em;\n  height: 1em;\n  overflow: hidden;\n  vertical-align: -0.15em;\n  fill: currentColor;\n}\n\n.is-stroke {\n  fill: none;\n  stroke: currentColor;\n}\n\n.custom-color:not(.is-stroke) {\n  fill: v-bind(color);\n}\n\n.custom-color.is-stroke {\n  fill: none;\n  stroke: v-bind(color);\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/TablePlus/create-slots.ts",
    "content": "import { defineComponent } from 'vue'\n\ntype CallFun = (vnodeEl: HTMLElement) => void\ntype Funs = Record<'mountedCallFun' | 'updatedCallFun' | 'unmountedCallFun', CallFun>\nexport default ({ mountedCallFun, updatedCallFun, unmountedCallFun }: Funs) => {\n  return defineComponent({\n    props: ['vnode'],\n    // props, ctx\n    setup() {\n      return {}\n    },\n    mounted() {\n      mountedCallFun(this.$el)\n    },\n    updated() {\n      updatedCallFun(this.$el)\n    },\n    unmounted() {\n      unmountedCallFun(this.$el)\n    },\n    // ctx: any\n    render(props: any) {\n      return props.vnode\n    }\n  })\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/components/TablePlus/index.vue",
    "content": "<template>\n  <!-- 继承属性 -->\n  <ElTable ref=\"tableRef\" v-loading=\"loading\" v-bind=\"{ ...$attrs }\">\n    <ElTableColumn v-if=\"sortable\" width=\"40\">\n      <div class=\"pr-3 sort-icon cursor-move\">\n        <SvgIcon name=\"drag\" width=\"20px\" height=\"28px\" color=\"#C7C7C7\" />\n      </div>\n    </ElTableColumn>\n    <visibleSlots :vnode=\"showSlots\" />\n    <ElTableColumn v-if=\"allFieldList.length\" class-name=\"table-setting\" prop=\"system_setting\" label=\"\" width=\"20\" align=\"center\" fixed=\"right\">\n      <template #header>\n        <div class=\"cursor-pointer\" @click=\"handleSetting\">\n          <el-icon>\n            <Setting />\n          </el-icon>\n        </div>\n      </template>\n    </ElTableColumn>\n    <template v-if=\"$slots.empty\" #empty>\n      <slot name=\"empty\" />\n    </template>\n  </ElTable>\n\n  <Pagination\n    v-if=\"pagination\"\n    layout=\"sizes, prev, pager, next, jumper\"\n    :page=\"page\"\n    :page-size=\"limit\"\n    :total=\"total\"\n    @size-change=\"onSizeChange\"\n    @current-change=\"onCurrentChange\"\n  />\n\n  <el-dialog v-model=\"showFieldVisible\" title=\"列表显示设置\" width=\"660px\">\n    <div class=\"flex border-b pb-4\" style=\"height: 350px\">\n      <div class=\"flex-1 flex flex-col overflow-y-auto\">\n        <div class=\"flex-none text-sm mb-3\">\n          <span class=\"text-[#182B50]\">需显示的字段</span>\n          <span class=\"text-[#182B5066]\">（最多展示{{ MAX_SHOW_NUM }}个）</span>\n        </div>\n        <div class=\"flex-1 overflow-y-auto\">\n          <div class=\"el-checkbox-group\">\n            <template v-for=\"field in allFieldList\" :key=\"field.field_key\">\n              <el-checkbox\n                :disabled=\"fixedFields.includes(field.field_key) || (showFieldList.length === 1 && field.field_key === showFieldList[0].field_key)\"\n                :checked=\"Boolean(showFieldList.find((item) => item.field_key === field.field_key))\"\n                :value=\"field.field_key\"\n                @change=\"handleFieldChange($event, field)\"\n              >\n                {{ field.field_name }}\n              </el-checkbox>\n            </template>\n          </div>\n        </div>\n      </div>\n      <div class=\"border-l mx-4\" />\n      <div class=\"flex-1 flex flex-col\">\n        <div class=\"flex-none text-sm mb-3\">\n          <span class=\"text-[#182B50]\">显示顺序</span>\n          <span class=\"text-[#182B5066]\">（拖动分组调整分组顺序）</span>\n        </div>\n        <Sortable v-model=\"showFieldList\" identity=\"id\" class=\"flex-1 w-full flex flex-col gap-1 overflow-y-auto\">\n          <template #item=\"{ item }\">\n            <div class=\"flex-none h-8 flex items-center\">\n              <div class=\"pr-3 sort-icon cursor-move\">\n                <svg-icon name=\"drag\" width=\"16px\" height=\"32px\" color=\"#a1a5af\" />\n              </div>\n              <div class=\"flex-1 text-sm text-[#182B50] truncate\">\n                {{ item.field_name }}\n              </div>\n            </div>\n          </template>\n        </Sortable>\n      </div>\n    </div>\n\n    <template #footer>\n      <el-button size=\"large\" type=\"default\" @click=\"handleCancel\">取消</el-button>\n      <el-button v-debounce size=\"large\" type=\"primary\" @click=\"handleConfirm\">保存</el-button>\n    </template>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted, ref, useSlots, onUnmounted, watch, getCurrentInstance, computed } from 'vue'\n\nimport { Setting } from '@element-plus/icons-vue'\nimport { ElTableColumn } from 'element-plus'\n\nimport Sortable from 'sortablejs'\nimport Pagination from '@/components/Pagination/index.vue'\nimport createSlots from './create-slots'\n\nconst { proxy } = getCurrentInstance()\nconst tableData = computed(() => proxy.$attrs.data || [])\nconst props = withDefaults(\n  defineProps<{\n    type?: string\n    page?: number\n    limit?: number\n    total?: number\n    prefix?: string\n    pagination?: boolean\n    // 固定显示那几个字段\n    fixedFields?: any[]\n    hiddenProps?: any[]\n    // 需要插入到那个后面\n    insertIndex?: number\n    loading?: boolean\n    sortable?: boolean\n  }>(),\n  {\n    type: '',\n    page: 1,\n    limit: 10,\n    total: 0,\n    prefix: '',\n    fixedFields: () => [],\n    hiddenProps: () => [],\n    pagination: true,\n    loading: false,\n    sortable: false\n  }\n)\n\nconst emits = defineEmits<{\n  (event: 'pageSizeChange', data: any): any\n  (event: 'pageCurrentChange', data: any): any\n  (event: 'sortableChange', data: any): any\n  (event: 'update:data', data: any): any\n}>()\n\nconst MAX_SHOW_NUM = 30\n\nconst tableRef = ref()\n\nconst slots = useSlots()\n\nconst showSlots = ref([])\nconst visibleSlots = createSlots({\n  mountedCallFun: () => {},\n  updatedCallFun: () => {},\n  unmountedCallFun: () => {}\n})\n\nconst showFieldVisible = ref(false)\nconst allFieldList = ref([])\nconst showFieldList = ref([])\n\nconst onSizeChange = (...args) => {\n  emits('pageSizeChange', ...args)\n}\nconst onCurrentChange = (...args) => {\n  emits('pageCurrentChange', ...args)\n}\n\nconst handleSetting = () => {\n  showFieldVisible.value = true\n}\n\nconst handleFieldChange = (check: boolean, item: any) => {\n  if (check) showFieldList.value.push({ ...item })\n  else showFieldList.value = showFieldList.value.filter((i) => i.id !== item.id)\n}\n\nconst handleCancel = () => {\n  showFieldVisible.value = false\n}\nconst handleConfirm = async () => {\n  if (/^user_memory_list/im.test(props.type)) {\n  }\n  ElMessage.success('已设置')\n  showFieldVisible.value = false\n}\n\nlet sortableInstance: any = null\nconst initSortable = () => {\n  if (!props.sortable || !tableData.value.length) return\n  const sortable_el = tableRef.value.$el.querySelector('.el-table__body tbody')\n  sortableInstance = Sortable.create(sortable_el, {\n    onStart: (event = {}) => {\n      const { target, oldIndex } = event\n      target.children[oldIndex].style.background = '#ECF5FF'\n    },\n    onEnd: async (event = {}) => {\n      const { target, newIndex: targetIndex, oldIndex: originIndex } = event\n      if (target.children && target.children[targetIndex]) target.children[targetIndex].style.background = 'transparent'\n      if (targetIndex === originIndex) return\n      const list = JSON.parse(JSON.stringify(tableData.value))\n      const originData = list.splice(originIndex, 1)[0]\n      list.splice(targetIndex, 0, originData)\n      emits('update:data', [])\n      await nextTick()\n      emits('update:data', list)\n      emits('sortableChange', { data: list, targetIndex, originIndex })\n    }\n  })\n}\nconst destroySortable = () => {\n  if (sortableInstance) {\n    sortableInstance.destroy()\n    sortableInstance = null\n  }\n}\n\nonMounted(() => {\n  nextTick(() => {\n    if (/^user_memory_list/im.test(props.type)) {\n    } else {\n      const slotList = slots.default()\n      showSlots.value = slotList\n    }\n  })\n})\nonUnmounted(() => {\n  destroySortable()\n})\n\nwatch(\n  () => tableData.value,\n  async () => {\n    destroySortable()\n    await nextTick()\n    initSortable()\n  },\n  {\n    deep: true,\n    immediate: true\n  }\n)\ndefineExpose({\n  toggleRowSelection(...args) {\n    tableRef.value.toggleRowSelection(...args)\n  },\n  refresh: () => {\n    // loadUserMemoryFieldList()\n  }\n})\n</script>\n\n<style>\n.table-setting .cell {\n  padding: 0 6px 0 0;\n}\n</style>\n\n<style scoped>\n::v-deep(.el-checkbox-group) {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n::v-deep(.el-checkbox-group .el-checkbox) {\n  flex: 0 0 50%;\n  margin-right: 0;\n  overflow: hidden;\n}\n\n::v-deep(.el-checkbox-group .el-checkbox__label) {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Upgrade/index.vue",
    "content": "<template>\n  <div>\n    <ElDialog\n      v-model=\"visible\"\n      class=\"max-w-[1200px] rounded-md !p-0 overflow-hidden w-[90%] max-md:mt-12 max-md:w-full\"\n      header-class=\"hidden\"\n      footer-class=\"hidden\"\n      :show-close=\"false\"\n      append-to-body\n      center\n      destroy-on-close\n    >\n      <ElContainer v-loading=\"loading\" class=\"h-[74vh] max-md:h-[90vh] md:!flex-row\">\n        <!-- <ElScrollbar class=\"w-full\"> -->\n        <ElMain class=\"!flex flex-col gap-4 relative !overflow-scroll !py-8 !pl-12 max-md:!pl-5 !pr-2\">\n          <ElIcon class=\"cursor-pointer absolute top-6 right-5 text-[#666] md:hidden\" :size=\"20\">\n            <Close @click.stop=\"close\" />\n          </ElIcon>\n          <h1 class=\"flex-none text-xl font-semibold text-[#000]\">\n            {{ $t('subscription.version_title') }}\n          </h1>\n          <div class=\"flex-1 relative overflow-y-hidden\">\n            <ElButton\n              v-show=\"scroll_left > 0\"\n              class=\"absolute left-0 top-1/2 -translate-y-1/2 z-10 bg-[#53585f] text-[#fff] !border-none !outline-none\"\n              :icon=\"ArrowLeft\"\n              size=\"default\"\n              circle\n              @click.stop=\"handleScrollLeft\"\n            />\n            <ElScrollbar\n              ref=\"version_scrollbar_ref\"\n              class=\"relative version-scrollbar\"\n              view-class=\"relative flex flex-nowrap gap-4 transition-all duration-300\"\n            >\n              <div\n                v-for=\"(item, item_index) in subscription_options\"\n                :key=\"item_index\"\n                class=\"flex-none rounded-md px-3.5 pt-4 pb-10 box-border border cursor-pointer min-w-[180px] h-max min-h-full max-md:(max-h-[430px] overflow-y-auto)\"\n                :class=\"[\n                  subscription_options.length > 2 ? 'w-[31%] max-w-[240px]' : subscription_options.length > 1 ? 'w-[47%] max-w-[340px]' : 'w-full',\n                  item.group_id == active_group_id\n                    ? `shadow-[0_0_20px_rgba(6, 114, 255, 0.2)] border-[#2F74FF] bg-cover bg-center`\n                    : 'border-[#EAEDF7] bg-[#F5F6FC]'\n                ]\"\n                :style=\"{\n                  backgroundImage: item.group_id == active_group_id ? `url(${$getPublicPath('/images/subscription/version-bg.png')})` : 'none'\n                }\"\n                @click.stop=\"handleVersionSelect({ data: item })\"\n              >\n                <header class=\"w-full flex items-center gap-3\">\n                  <img\n                    :src=\"!/\\.png$/.test(item.logo) ? $getPublicPath(`/images/subscription/${item.logo}.png`) : item.logo\"\n                    class=\"flex-none w-12 h-12 rounded-full overflow-auto\"\n                  />\n                  <h2\n                    class=\"text-lg font-semibold text-[#000] truncate\"\n                    :class=\"subscription_options.length <= 1 ? 'flex-none' : 'flex-1'\"\n                    :title=\"item.group_name\"\n                  >\n                    {{ item.group_name }}\n                  </h2>\n                  <div v-if=\"subscription_options.length <= 1\" class=\"flex-1\" />\n                  <div v-if=\"subscription_options.length <= 1\">\n                    <div class=\"flex items-center gap-1\">\n                      <span class=\"text-lg font-bold text-[#000]\">\n                        {{ item.month_info.currency_symbol }}\n                        {{ item.month_info.amount }}\n                      </span>\n                      <span class=\"text-xs text-[#333]\">/ {{ $t(`subscription.${item.month_info.time_unit}`) }}</span>\n                    </div>\n                    <div class=\"text-xs text-[#9A9A9A]\">\n                      {{\n                        $t(`subscription.credit_month_amount`, {\n                          amount: ` ${item.credit_month_info.amount} `\n                        })\n                      }}\n                    </div>\n                  </div>\n                </header>\n                <ElDivider class=\"!my-4 !border-[#E7ECF7]\" />\n                <template v-if=\"subscription_options.length > 1\">\n                  <div class=\"flex items-center gap-1\">\n                    <span class=\"text-lg font-bold text-[#000]\">\n                      {{ item.month_info.currency_symbol }}\n                      {{ item.month_info.amount }}\n                    </span>\n                    <span class=\"text-xs text-[#333]\">/ {{ $t(`subscription.${item.month_info.time_unit}`) }}</span>\n                  </div>\n                  <div class=\"text-xs text-[#9A9A9A]\">\n                    {{\n                      $t(`subscription.credit_month_amount`, {\n                        amount: ` ${item.credit_month_info.amount} `\n                      })\n                    }}\n                  </div>\n                </template>\n                <div :class=\"[subscription_options.length > 1 ? '' : 'flex flex-row']\">\n                  <div v-if=\"item.agents && item.agents.length\" :class=\"[subscription_options.length > 1 ? 'mt-6' : ' flex-1']\">\n                    <h2 class=\"text-sm font-semibold text-[#1D1E1F]\">\n                      {{ $t(`subscription.agent_bots_title`) }}\n                    </h2>\n                    <ul class=\"flex flex-wrap gap-3.5 mt-4\">\n                      <li v-for=\"(row, row_index) in item.agents\" :key=\"row_index\" class=\"flex items-center gap-2 w-full\" :title=\"row.name\">\n                        <img :src=\"row.logo || ''\" :alt=\"row.name\" class=\"flex-none w-4 h-4 rounded-full overflow-hidden\" />\n                        <div class=\"flex-1 text-sm text-[#4F5052] truncate\">\n                          {{ row.name }}\n                        </div>\n                      </li>\n                    </ul>\n                  </div>\n                  <div :class=\"[subscription_options.length > 1 ? 'mt-5' : 'flex-1']\">\n                    <h2 class=\"text-sm font-semibold text-[#1D1E1F]\">\n                      {{ $t(`subscription.ai_assistant_title`) }}\n                    </h2>\n                    <div class=\"mt-4 flex flex-wrap items-center gap-2\">\n                      <ElButton\n                        class=\"!p-1.5\"\n                        type=\"default\"\n                        plain\n                        size=\"default\"\n                        :disabled=\"!item.ai_enabled\"\n                        @click.stop=\"handleAIAssistantOpen({ type: 'windows' })\"\n                      >\n                        <img\n                          :src=\"$getPublicPath(`/images/windows.png`)\"\n                          class=\"w-4 h-4 object-cover mr-1\"\n                          :class=\"{ 'opacity-50': !item.ai_enabled }\"\n                        />\n                        <span class=\"text-xs\">Windows</span>\n                      </ElButton>\n                      <ElButton\n                        class=\"!p-1.5 !ml-0\"\n                        type=\"default\"\n                        plain\n                        size=\"default\"\n                        :disabled=\"!item.ai_enabled\"\n                        @click.stop=\"handleAIAssistantOpen({ type: 'ios' })\"\n                      >\n                        <img :src=\"$getPublicPath(`/images/ios.png`)\" class=\"w-4 h-4 object-cover mr-1\" :class=\"{ 'opacity-50': !item.ai_enabled }\" />\n                        <span class=\"text-xs\">macOS</span>\n                      </ElButton>\n                      <ElButton\n                        class=\"!p-1.5 !ml-0\"\n                        type=\"default\"\n                        plain\n                        size=\"default\"\n                        :disabled=\"!item.ai_enabled\"\n                        @click.stop=\"handleAIAssistantOpen({ type: 'chrome' })\"\n                      >\n                        <img\n                          :src=\"$getPublicPath(`/images/chrome.png`)\"\n                          class=\"w-4 h-4 object-cover mr-1\"\n                          :class=\"{ 'opacity-50': !item.ai_enabled }\"\n                        />\n                        <span class=\"text-xs\">Google</span>\n                      </ElButton>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </ElScrollbar>\n            <ElButton\n              v-show=\"scroll_left_limit > 0 && scroll_left < scroll_left_limit\"\n              class=\"absolute right-0 top-1/2 -translate-y-1/2 z-10 bg-[#53585f] text-[#fff] !border-none !outline-none\"\n              :icon=\"ArrowRight\"\n              size=\"default\"\n              circle\n              @click.stop=\"handleScrollRight\"\n            />\n          </div>\n          <template v-if=\"+(active_subscription_info.month_info || {}).amount || +(active_subscription_info.year_info || {}).amount\">\n            <h1 class=\"flex-none text-xl font-semibold text-[#000]\">\n              {{ $t('subscription.time_title') }}\n            </h1>\n            <ul class=\"flex-none w-full flex items-center gap-5 overflow-x-auto overflow-y-hidden\">\n              <template v-for=\"key in ['month', 'year']\" :key=\"key\">\n                <li\n                  v-if=\"+(active_subscription_info[`${key}_info`] || {}).amount\"\n                  class=\"h-[128px] w-[36%] max-w-[280px] p-5 box-border border rounded-md min-w-[150px]\"\n                  :class=\"[\n                    key == active_time_unit\n                      ? `shadow-[0_0_20px_rgba(6, 114, 255, 0.2)] border-[#2F74FF] bg-[url('https://img.js.design/assets/img/67e3c887985b9b806ee10e09.png#681a27dfb07db7652079a5900c960b9e')] bg-cover bg-center`\n                      : 'border-[#EAEDF7] bg-[#F5F6FC]'\n                  ]\"\n                  @click.stop=\"handleTimeUnitSelect({ unit: key })\"\n                >\n                  <div class=\"text-sm text-[#000]\">\n                    {{ $t(`subscription.time_unit_${key}`) }}\n                  </div>\n                  <div class=\"mt-2 flex items-baseline\">\n                    <span class=\"text-lg font-bold text-[#000]\">\n                      {{ (active_subscription_info[`${key}_info`] || {}).currency_symbol || '￥' }}\n                    </span>\n                    <span class=\"text-2xl font-bold text-[#000] mx-1\">\n                      {{ (active_subscription_info[`${key}_info`] || {}).amount || 0 }}\n                    </span>\n                    <span class=\"text-sm text-[#333]\">/ {{ $t(`subscription.${key}`) }}</span>\n                  </div>\n                </li>\n              </template>\n            </ul>\n          </template>\n        </ElMain>\n        <!-- </ElScrollbar> -->\n        <ElAside\n          class=\"flex flex-col flex-none max-w-[306px] relative bg-[#FAFAFA] border-l border-[#F2F0F0] !py-8 !pl-6 !pr-12 max-md:hidden w-[30%]\"\n        >\n          <ElIcon class=\"cursor-pointer absolute top-6 right-5 text-[#666]\" :size=\"20\">\n            <Close @click.stop=\"close\" />\n          </ElIcon>\n          <h2 class=\"mt-10 text-2xl font-semibold text-[#000]\">\n            {{ $t('subscription.aside_title') }}\n          </h2>\n          <p class=\"mt-2 text-sm text-[#333]\">{{ $t('subscription.aside_desc') }}</p>\n          <div class=\"w-full flex items-center gap-2 mt-3\">\n            <img class=\"flex-none size-8 rounded-full overflow-hidden object-cover\" :src=\"userStore.info.avatar\" />\n            <div class=\"flex-1 text-sm font-medium text-[#333]\">\n              {{ userStore.info.nickname }}\n            </div>\n          </div>\n          <ElDivider class=\"!my-5 !border-[#E7ECF7]\" />\n          <div class=\"w-full flex-1 md:min-h-[108px]\">\n            <div class=\"w-full flex items-center justify-between text-lg text-[#000]\">\n              <span>{{ active_subscription_info.group_name || '- -' }}</span>\n              <span>{{ active_time_info.currency_symbol || '￥' }}{{ active_time_info.amount || 0 }}</span>\n            </div>\n          </div>\n          <template v-if=\"+active_time_info.amount\">\n            <ElDivider class=\"!my-5 !border-[#E7ECF7]\" />\n            <template v-if=\"payment_options.length > 1\">\n              <h2 class=\"text-lg text-[#000]\">{{ $t('subscription.payment') }}</h2>\n              <ElRadioGroup v-model=\"active_payment\" class=\"mt-2\" :disabled=\"pay_disabled\">\n                <ElRadio v-for=\"opt in payment_options\" :key=\"opt.pay_type\" :value=\"opt.pay_type\">\n                  <span class=\"text-[#333]\">\n                    {{ $t(`${opt.label}`) }}\n                  </span>\n                </ElRadio>\n              </ElRadioGroup>\n            </template>\n            <div class=\"text-[#000] text-xl mt-8 flex items-center justify-between gap-2\">\n              <span>\n                {{ $t('subscription.total') }}\n              </span>\n              <span>\n                {{ active_time_info.currency_symbol || '￥' }}\n                {{ Number(active_time_info.amount || 0).toFixed(2) }}\n              </span>\n            </div>\n            <ElButton\n              class=\"w-full mt-4\"\n              type=\"primary\"\n              size=\"large\"\n              :disabled=\"pay_disabled\"\n              @click.stop=\"handleQrcodeOpen({ defaultDisabled: true })\"\n            >\n              {{ $t('action.pay') }}\n            </ElButton>\n          </template>\n        </ElAside>\n        <ElFooter\n          v-if=\"+active_time_info.amount\"\n          class=\"flex flex-col flex-none relative bg-[#FAFAFA] border-l border-[#F2F0F0] !py-2 !pl-6 !pr-12 shadow shadow-slate-700 min-h-max md:hidden\"\n        >\n          <template v-if=\"+active_time_info.amount\">\n            <div class=\"min-h-1 pb-1\" :class=\"{ 'pb-0': display_payment_detail }\">\n              <div v-if=\"display_payment_detail\">\n                <h2 class=\"mt-10 text-2xl font-semibold text-[#000]\">\n                  {{ $t('subscription.aside_title') }}\n                </h2>\n                <p class=\"mt-2 text-sm text-[#333]\">{{ $t('subscription.aside_desc') }}</p>\n                <div class=\"w-full flex items-center gap-2 mt-3\">\n                  <img class=\"flex-none size-8 rounded-full overflow-hidden object-cover\" :src=\"userStore.info.avatar\" />\n                  <div class=\"flex-1 text-sm font-medium text-[#333]\">\n                    {{ userStore.info.nickname }}\n                  </div>\n                </div>\n                <ElDivider class=\"!my-5 !border-[#E7ECF7]\" />\n                <div class=\"w-full flex-1 md:min-h-[108px] min-h-[48px] max-md:border-b\">\n                  <div class=\"w-full flex items-center justify-between text-lg text-[#000]\">\n                    <span>{{ active_subscription_info.group_name || '- -' }}</span>\n                    <span>{{ active_time_info.currency_symbol || '￥' }}{{ active_time_info.amount || 0 }}</span>\n                  </div>\n                </div>\n              </div>\n              <div v-if=\"payment_options.length > 1\" class=\"flex flex-row items-center gap-4 min-h-max md:pb-12\">\n                <h2 class=\"text-lg text-[#000] whitespace-nowrap\">{{ $t('subscription.payment') }}</h2>\n                <ElRadioGroup v-model=\"active_payment\" class=\"\" :disabled=\"pay_disabled\">\n                  <ElRadio v-for=\"opt in payment_options\" :key=\"opt.pay_type\" :value=\"opt.pay_type\">\n                    <span class=\"text-[#333]\">\n                      {{ $t(`${opt.label}`) }}\n                    </span>\n                  </ElRadio>\n                </ElRadioGroup>\n              </div>\n              <div class=\"flex flex-row items-end gap-4\">\n                <div class=\"mt-4 flex gap-1 items-end\">\n                  <span class=\"text-lg text-[#000]\">\n                    {{ active_time_info.currency_symbol || '￥' }}\n                  </span>\n                  <span class=\"text-4xl font-semibold text-[#000]\">\n                    {{ Number(active_time_info.amount || 0).toFixed(2) }}\n                  </span>\n                </div>\n\n                <div class=\"whitespace-nowrap min-w-max flex items-center gap-1\" @click=\"handlePaymentDetailToggle\">\n                  <span class=\"text-sm text-[#333]\">明细</span>\n                  <ElIcon class=\"text-sm text-[#333]\" :class=\"{ 'rotate-180': display_payment_detail }\">\n                    <ArrowUp />\n                  </ElIcon>\n                </div>\n\n                <ElButton\n                  class=\"w-full mt-4\"\n                  type=\"primary\"\n                  size=\"large\"\n                  :disabled=\"pay_disabled\"\n                  @click.stop=\"handleQrcodeOpen({ defaultDisabled: true })\"\n                >\n                  {{ $t('action.pay') }}\n                </ElButton>\n              </div>\n            </div>\n          </template>\n        </ElFooter>\n      </ElContainer>\n    </ElDialog>\n\n    <PaymentQrcode ref=\"payment_qrcode_ref\" @success=\"updateUserGroup({ refresh: true })\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowLeft, ArrowRight, ArrowUp, Close } from '@element-plus/icons-vue'\nimport { ref, computed, nextTick, provide } from 'vue'\nimport { ElScrollbar } from 'element-plus'\nimport PaymentQrcode from './payment-qrcode.vue'\nimport subscriptionApi from '@/api/modules/subscription'\nimport { PAYMENT_TYPE, PAYMENT_TYPE_LABEL_MAP, PaymentType } from '@/constants/payment'\nimport paymentApi from '@/api/modules/payment'\nimport { useUserStore } from '@/stores/modules/user'\n\nconst userStore = useUserStore()\n\nconst version_scrollbar_ref = ref()\nconst payment_qrcode_ref = ref()\nconst visible = ref(false)\nconst loading = ref(false)\nconst subscription_options = ref([])\nconst active_group_id = ref('')\nconst active_time_unit = ref('month')\nconst scroll_left = ref(0)\nconst scroll_left_limit = ref(0)\nconst scroll_left_distance = ref(0)\nconst active_payment = ref(PAYMENT_TYPE.WECHAT)\nconst payment_options = ref([])\nconst display_payment_detail = ref(false)\n\nconst active_subscription_info = computed(() => subscription_options.value.find((item) => item.group_id === active_group_id.value) || {})\nconst active_time_info = computed(() => active_subscription_info.value[`${active_time_unit.value}_info`] || {})\nconst pay_disabled = computed(() => !Number(active_time_info.value.amount || 0))\n\nprovide('active_subscription_info', active_subscription_info)\nprovide('active_time_info', active_time_info)\nprovide('active_payment', active_payment)\n\nasync function open() {\n  visible.value = true\n  loadPaymentSettingData()\n  await loadSubscriptionData()\n  active_group_id.value = (subscription_options.value[0] || {}).group_id\n  await nextTick()\n  const scrollbar_el = version_scrollbar_ref.value.$el\n  const scrollbar_view_el = scrollbar_el.querySelector('.el-scrollbar__view')\n  const scrollbar_view_children_el_list = scrollbar_view_el.children\n  if (scrollbar_view_children_el_list.length > 3) {\n    const child_el_width = scrollbar_view_children_el_list[0].getBoundingClientRect().width\n    scroll_left_distance.value = child_el_width + 16\n    scroll_left_limit.value = scroll_left_distance.value * (scrollbar_view_children_el_list.length - 3)\n  }\n}\nfunction close() {\n  visible.value = false\n}\nasync function loadSubscriptionData() {\n  const { access_token } = userStore.info\n  if (!access_token) return Promise.resolve(subscription_options.value)\n  if (subscription_options.value.length) return Promise.resolve(subscription_options.value)\n  loading.value = true\n  const { list = [] } = await subscriptionApi.list().finally(() => {\n    loading.value = false\n  })\n  subscription_options.value = list\n  updateUserGroup()\n  return Promise.resolve(subscription_options.value)\n}\nasync function handleVersionSelect({ data = {} } = {}) {\n  active_group_id.value = data.group_id || active_group_id.value\n  await nextTick()\n  active_time_unit.value = 'month'\n  if (!+(active_subscription_info.value.month_info || {}).amount && +(active_subscription_info.value.year_info || {}).amount) {\n    active_time_unit.value = 'year'\n  }\n}\nfunction handleTimeUnitSelect({ unit = 'month' }) {\n  active_time_unit.value = unit\n}\nfunction handleAIAssistantOpen() {\n  // window.open('#', '_blank')\n}\nfunction handleScrollLeft() {\n  for (let i = 0; i < scroll_left_distance.value; i += 6) {\n    setTimeout(() => {\n      scroll_left.value -= 6\n      version_scrollbar_ref.value.setScrollLeft(scroll_left.value)\n    }, 1)\n  }\n}\nfunction handleScrollRight() {\n  for (let i = 0; i < scroll_left_distance.value; i += 6) {\n    setTimeout(() => {\n      scroll_left.value += 6\n      version_scrollbar_ref.value.setScrollLeft(scroll_left.value)\n    }, 1)\n  }\n}\nasync function loadPaymentSettingData({ defaultDisabled = false } = {}) {\n  const list = await paymentApi.getAvailableList()\n  payment_options.value = list\n    .filter((item = {}) => [PAYMENT_TYPE.WECHAT, PAYMENT_TYPE.ALIPAY, PAYMENT_TYPE.MANUAL].includes(item.pay_type) && item.enabled && item.configured)\n    .map((item) => {\n      return {\n        ...item,\n        label: PAYMENT_TYPE_LABEL_MAP[item.pay_type as PaymentType]\n      }\n    })\n  if (!defaultDisabled) active_payment.value = (payment_options.value[0] || {}).pay_type || PAYMENT_TYPE.WECHAT\n}\nasync function validateUpgrade() {\n  await loadSubscriptionData()\n  if (!subscription_options.value.length) return false\n  // 逻辑调整, 支付配置放在支付按钮判断\n  // await loadPaymentSettingData()\n  // if (!payment_options.value.length) return false\n  return true\n}\nasync function updateUserGroup({ refresh = false } = {}) {\n  if (refresh) await userStore.getUserInfo()\n  const subscription_data = subscription_options.value.find((item = {}) => item.group_id === userStore.info.group_id)\n  if (subscription_data) {\n    userStore.setGroupName(subscription_data.group_name || userStore.info.group_name)\n    userStore.setGroupIcon(subscription_data.logo_url || userStore.info.group_icon)\n  }\n}\n\nfunction handlePaymentDetailToggle() {\n  display_payment_detail.value = !display_payment_detail.value\n}\nasync function handleQrcodeOpen({ defaultDisabled = false } = {}) {\n  await loadPaymentSettingData({ defaultDisabled })\n  if (!payment_options.value.length) {\n    ElMessage.warning(window.$t('authority.payment_not_setting'))\n  } else {\n    payment_qrcode_ref.value.open()\n  }\n}\n\ndefineExpose({\n  open,\n  close,\n  validateUpgrade\n})\n</script>\n\n<style scoped>\n.version-scrollbar::after {\n  content: '';\n  width: 100%;\n  height: 2.8rem;\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  background: linear-gradient(to top, rgb(255 255 255 / 80%), transparent);\n}\n\n.version-scrollbar ::v-deep(.el-scrollbar__bar.is-horizontal) {\n  display: none;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Upgrade/payment-qrcode.vue",
    "content": "<template>\n  <div>\n    <ElDialog\n      v-model=\"visible\"\n      header-class=\"!px-5 !py-3\"\n      footer-class=\"!hidden\"\n      append-to-body\n      destroy-on-close\n      width=\"640px\"\n      :title=\"$t('subscription.order_title')\"\n      :close-on-click-modal=\"false\"\n      @closed=\"close\"\n    >\n      <div v-loading=\"loading\" class=\"flex flex-col items-center justify-center\">\n        <h4 class=\"text-sm text-[#4F5052]\">{{ $t('subscription.pay_amount') }}</h4>\n        <div class=\"mt-2 text-2xl font-bold text-[#3664EF]\">\n          <span class=\"text-base mr-1\">{{ active_time_info.currency_symbol || '￥' }}</span>\n          <span>{{ Number(active_time_info.amount || 0).toFixed(2) }}</span>\n        </div>\n        <template v-if=\"PAYMENT_TYPE.WECHAT == active_payment\">\n          <div class=\"mt-3 w-[200px] h-[200px] rounded-lg flex items-center justify-center\">\n            <QrcodeVue v-if=\"pay_url\" ref=\"qrcode_ref\" :value=\"pay_url\" :size=\"180\" level=\"H\" />\n          </div>\n          <div class=\"mt-3 text-lg text-primary\">\n            {{ $t('subscription.pay_by_wechat') }}\n          </div>\n          <div\n            class=\"mt-2 text-xs text-[#666666]\"\n            v-html=\"$t('subscription.pay_policy', { policy: `<a style='color: #2F74FF;' href='#' target='_blank'>《隐私政策协议》</a>` })\"\n          />\n        </template>\n        <template v-else>\n          <ElImage class=\"mt-3 size-[180px]\" :src=\"pay_url\" fit=\"cover\" />\n          <div v-show=\"pay_desc\" class=\"mt-3 text-base text-primary text-center\">\n            {{ pay_desc }}\n          </div>\n        </template>\n      </div>\n      <template v-if=\"PAYMENT_TYPE.WECHAT == active_payment\">\n        <ElButton class=\"relative mt-8 mb-6 left-1/2 -translate-x-1/2 !px-8 !bg-[#F6F7F8] !text-[#333]\" type=\"info\" plain size=\"large\" @click=\"close\">\n          {{ $t('action.cancel') }}\n        </ElButton>\n      </template>\n      <div v-else class=\"mt-8 mb-6 flex items-center justify-center gap-2\">\n        <span class=\"text-sm text-regular\">{{ $t('subscription.pay_confirm') }}</span>\n        <ElButton class=\"min-w-[90px]\" type=\"primary\" size=\"large\" @click=\"handlePayed\">\n          {{ $t('subscription.payed') }}\n        </ElButton>\n      </div>\n    </ElDialog>\n    <ElDialog v-model=\"success_visible\" center append-to-body destroy-on-close width=\"420px\" :close-on-click-modal=\"false\" @closed=\"paySuccess\">\n      <div class=\"mt-8 flex flex-col items-center justify-center gap-4\">\n        <ElIcon size=\"58\" color=\"#3ABA52\">\n          <SuccessFilled />\n        </ElIcon>\n        <span class=\"text-2xl text-[#000]\">\n          {{ $t(PAYMENT_TYPE.WECHAT == active_payment ? 'subscription.pay_success' : 'subscription.manual_pay_success_title') }}\n        </span>\n      </div>\n      <div v-if=\"PAYMENT_TYPE.WECHAT != active_payment\" class=\"mt-4 text-sm text-placeholder text-center\">\n        {{ $t('subscription.manual_pay_success_desc') }}\n      </div>\n      <template #footer>\n        <ElButton class=\"mt-6 mb-6 !px-8\" type=\"primary\" size=\"large\" @click=\"paySuccess\">\n          {{ $t('action.ok_v2') }}\n        </ElButton>\n      </template>\n    </ElDialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { SuccessFilled } from '@element-plus/icons-vue'\nimport QrcodeVue from 'qrcode.vue'\n\nimport { ref, inject, nextTick, onUnmounted } from 'vue'\nimport { subscriptionApi, setOrderCache } from '@/api/modules/subscription'\nimport md5 from '@/utils/md5'\nimport { useUserStore } from '@/stores/modules/user'\nimport { PAYMENT_TYPE } from '@/constants/payment'\nimport paymentApi from '@/api/modules/payment'\n\nconst emit = defineEmits(['success'])\n\nconst userStore = useUserStore()\n\nconst active_subscription_info = inject('active_subscription_info')\nconst active_time_info = inject('active_time_info')\nconst active_payment = inject('active_payment')\n\nconst visible = ref(false)\nconst loading = ref(false)\nconst pay_url = ref('')\nconst pay_desc = ref('')\nconst success_visible = ref(false)\nconst order_info = ref({})\n\nonUnmounted(() => {\n  clearOrderStatusTimer()\n})\n\nfunction getOrderParams() {\n  return {\n    user_id: userStore.info.user_id,\n    nickname: userStore.info.nickname,\n    subscription_id: active_subscription_info.value.group_id,\n    subscription_name: active_subscription_info.value.group_name,\n    pay_type: active_payment.value,\n    amount: Math.round(Number(active_time_info.value.amount || 0).toFixed(2) * 10000) / 100,\n    currency: active_time_info.value.currency,\n    duration: 1,\n    time_unit: active_time_info.value.time_unit\n  }\n}\nasync function open() {\n  pay_url.value = ''\n  if (active_payment.value === PAYMENT_TYPE.ALIPAY) {\n    await subscriptionApi.createOrder({\n      params: getOrderParams(),\n      return_url: window.location.href\n    })\n    return\n  }\n  if (active_payment.value === PAYMENT_TYPE.WECHAT) {\n    order_info.value = await subscriptionApi.createOrder({\n      params: getOrderParams()\n    })\n    await nextTick()\n    queryOrderStatus()\n    pay_url.value = order_info.value.code_url\n  } else {\n    const { pay_settings = [] } = await paymentApi.getPaymentConfig()\n    const pay_setting = pay_settings.find((item) => item.pay_type === active_payment.value)\n    let extra_config = {}\n    try {\n      extra_config = JSON.parse(pay_setting.extra_config || '{}')\n    } catch (err) {\n      extra_config = {}\n    }\n    pay_url.value = extra_config.pay_qrcode || ''\n    pay_desc.value = extra_config.pay_desc || ''\n  }\n  visible.value = true\n  loading.value = false\n}\nfunction close() {\n  visible.value = false\n  clearOrderStatusTimer()\n}\nlet timer = null\nfunction queryOrderStatus() {\n  getOrderStatus()\n  clearOrderStatusTimer()\n  timer = setInterval(() => {\n    getOrderStatus()\n  }, 5000)\n}\nfunction clearOrderStatusTimer() {\n  if (timer) {\n    clearInterval(timer)\n    timer = null\n  }\n}\nfunction getOrderStatus() {\n  return subscriptionApi.getOrderStatus({ order_id: order_info.value.payment_order_id }).then((data) => {\n    // NOTPAY or SUCCESS\n    if (data.originalStatus === 'SUCCESS') {\n      setOrderCache({ key: md5(JSON.stringify(getOrderParams())), value: {} })\n      clearOrderStatusTimer()\n      success_visible.value = true\n    }\n  })\n}\nasync function paySuccess() {\n  success_visible.value = false\n  close()\n  emit('success')\n}\nasync function handlePayed() {\n  if (PAYMENT_TYPE.WECHAT !== active_payment) {\n    order_info.value = await subscriptionApi.createOrder({\n      params: getOrderParams()\n    })\n  }\n  success_visible.value = true\n}\n\ndefineExpose({\n  open,\n  close\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Upload/image.vue",
    "content": "<template>\n  <div\n    class=\"w-[50px] h-[50px] rounded overflow-hidden relative cursor-pointer group\"\n    :class=\"[disabled ? 'cursor-not-allowed' : '']\"\n    @click.stop=\"onSelectFile\"\n  >\n    <slot>\n      <ElButton v-if=\"showText\" type=\"text\">{{ $t(text) }}</ElButton>\n      <template v-else>\n        <img v-if=\"modelValue\" class=\"w-full h-full object-cover\" :src=\"modelValue\" alt=\"logo\" />\n        <div v-else class=\"w-full h-full flex items-center justify-center border rounded upload-image-placeholder\">\n          <ElIcon size=\"16\" color=\"#9A9A9A\">\n            <Plus />\n          </ElIcon>\n        </div>\n        <div\n          class=\"hidden group-hover:flex absolute top-0 right-0 bottom-0 left-0 bg-black bg-opacity-40 items-center justify-center gap-6 text-xs text-white\"\n        >\n          <slot name=\"mask-text\">\n            {{ $t(text) }}\n          </slot>\n        </div>\n      </template>\n    </slot>\n    <CropperDialog\n      ref=\"cropper_ref\"\n      action=\"python\"\n      :cropper-disabled=\"cropperDisabled\"\n      :allow-type-list=\"allowTypeList\"\n      :limit-size=\"2\"\n      @confirm=\"onConfirm\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Plus } from '@element-plus/icons-vue'\nimport { ref } from 'vue'\nimport CropperDialog from '@/components/CropperDialog/index.vue'\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue?: string\n    text?: string\n    showText?: boolean\n    cropperDisabled?: boolean\n    allowTypeList?: string[]\n    disabled?: boolean\n  }>(),\n  {\n    modelValue: '',\n    text: 'action_replace',\n    showText: false,\n    cropperDisabled: false,\n    disabled: false\n  }\n)\nconst emits = defineEmits<{\n  (e: 'update:modelValue', data: string): void\n  (e: 'confirm', result: { url: string }): void\n}>()\n\nconst cropper_ref = ref()\n\nconst onSelectFile = () => {\n  if (props.disabled) return\n  cropper_ref.value.uploadFile()\n}\nconst onConfirm = (data: { url: string }) => {\n  emits('update:modelValue', data.url)\n  emits('confirm', { url: data.url })\n}\n</script>\n\n<style>\n.el-form-item.is-error .upload-image-placeholder {\n  border-color: #f56c6c;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/Upload/index.vue",
    "content": "<template>\n  <el-upload\n    :id=\"uuid\"\n    ref=\"uploadRef\"\n    :class=\"[hide ? 'absolute right-0 top-0' : '', full ? 'el-upload--full' : '']\"\n    :data=\"extraData\"\n    :accept=\"accept\"\n    :name=\"name\"\n    :drag=\"drag\"\n    :disabled=\"disabled\"\n    :action=\"action\"\n    :show-file-list=\"false\"\n    :limit=\"limit\"\n    :multiple=\"multiple\"\n    :auto-upload=\"autoUpload\"\n    :on-success=\"handleFileSuccess\"\n    :on-error=\"handleFileError\"\n    :on-progress=\"handleFileProgress\"\n    :before-upload=\"handleBeforeUpload\"\n    :on-exceed=\"handleExceed\"\n    :http-request=\"httpRequest\"\n    v-bind=\"$attrs\"\n  >\n    <slot />\n  </el-upload>\n  <!-- :on-change=\"handleFileChange\" -->\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { genFileId } from 'element-plus'\nimport type { UploadFile, UploadInstance, UploadProps, UploadRawFile } from 'element-plus'\nimport { API_HOST } from '@/api/host'\nimport uploadApi from '@/api/modules/upload'\nimport { checkPermission } from '@/utils/permission'\n\nconst props = withDefaults(\n  defineProps<{\n    // .pdf, .md, markdown,.txt\n    accept: string\n    name?: string\n    // 大小为M.\n    size?: number\n    hide?: boolean\n    full?: boolean\n    drag?: boolean\n    multiple?: boolean\n    limit?: number\n    disabled?: boolean\n    autoUpload?: boolean\n    extraData?: any\n    action?: string\n  }>(),\n  {\n    accept: '',\n    name: 'file',\n    size: 15,\n    hide: false,\n    full: false,\n    drag: false,\n    multiple: false,\n    disabled: false,\n    autoUpload: true,\n    extraData: () => ({})\n  }\n)\nconst emits = defineEmits<{\n  (e: 'error', data: any): void\n  (e: 'success', data: { id: string; size: string; icon: string; name: string }): void\n  (e: 'before', file: File): void\n  (e: 'progress', file: any, value: number): void\n  (\n    e: 'change',\n    args?: {\n      file: any\n      fileList: any[]\n    }\n  ): void\n}>()\nconst uuid = `upload_${Math.random()}`\n\nconst uploadRef = ref<UploadInstance>()\nconst uploadingCount = ref(0)\n\nlet firstType = ''\nconst isOverLimit = (data: File) => {\n  if (!firstType) firstType = data.type\n\n  const { name } = data\n  if (!new RegExp(`(${props.accept.split(',').join('|')})$`).test(name)) {\n    ElMessage.warning(\n      window.$t('file.support_format', {\n        format: props.accept\n          .replace(/\\./g, '')\n          .split(',')\n          .map((item) => item.toUpperCase())\n          .join('、')\n      })\n    )\n    return true\n  }\n  if (data.size === 0) {\n    ElMessage.warning(window.$t('file.file_empty'))\n    return true\n  }\n  if (props.size && data.size / 1024 / 1024 > props.size) {\n    ElMessage.warning(window.$t('file.file_exceed', { size: props.size, name }))\n    return true\n  }\n\n  uploadingCount.value++\n  return false\n}\nconst handleBeforeUpload = async (data: File) => {\n  if (isOverLimit(data)) return false\n  const isLogin = checkPermission()\n  if (!isLogin) {\n    ElMessage.warning(window.$t('authority.login_not_permission'))\n    return false\n  }\n  // data.loading = true\n  emits('before', data)\n  return true\n}\nconst handleFileProgress = async (e, data) => {\n  if (!data.vid) {\n    Object.assign(data, {\n      id: '',\n      vid: data.raw.uid,\n      name: data.raw.name,\n      url: '',\n      error_msg: '',\n      job_id: ''\n    })\n  } else emits('progress', data, e.percent.toFixed(2))\n}\n\nconst checkAllUploadsCompleted = () => {\n  uploadingCount.value--\n  if (uploadingCount.value === 0) firstType = ''\n}\nconst handleFileSuccess = (e, data) => {\n  data.loading = false\n  data.id = e.id\n  data.error_msg = e.error_msg\n  data.url = e.url\n  emits('success', data)\n  checkAllUploadsCompleted()\n}\nconst handleFileError = (e, data) => {\n  data.loading = false\n  emits('error', {\n    error_msg: '上传失败'\n  })\n  checkAllUploadsCompleted()\n}\n\nconst httpRequest = (data: any) => {\n  return uploadApi.upload(data.file).then((res) => {\n    return {\n      id: res.data.id,\n      url: `${API_HOST}/api/preview/${res.data.preview_key || ''}`,\n      size: res.data.size,\n      name: res.data.file_name,\n      mime_type: res.data.mime_type\n    }\n  })\n}\n\nconst handleExceed: UploadProps['onExceed'] = (files) => {\n  if (props.limit === 1) {\n    uploadRef.value!.clearFiles()\n    const file = files[0] as UploadRawFile\n    file.uid = genFileId()\n    uploadRef.value!.handleStart(file)\n    if (props.autoUpload) uploadRef.value!.submit()\n  } else {\n    ElMessage.warning(window.$t('file.file_exceed_limit', { limit: props.limit }))\n  }\n}\n\ndefineExpose({\n  abort: (file: UploadFile) => uploadRef.value!.abort(file),\n  submit: () => uploadRef.value!.submit(),\n  clearFiles: () => uploadRef.value!.clearFiles(),\n  trigger() {\n    const parent = document.getElementById(uuid)\n    const input = parent?.querySelector('.el-upload__input')\n    input?.dispatchEvent(new MouseEvent('click'))\n    // input.click()\n  },\n  handleStart: (file: File) => {\n    file.uid = genFileId()\n    uploadRef.value.handleStart(file)\n  },\n  handleRemove: (...args) => {\n    uploadRef.value!.handleRemove(...args)\n  }\n})\n</script>\n\n<style scoped>\n.el-upload--full {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  opacity: 0;\n}\n\n::v-deep(.el-upload) {\n  width: 100%;\n  height: 100%;\n}\n::v-deep(.el-upload-dragger) {\n  width: 100%;\n  height: 100%;\n  background: transparent;\n  border: none;\n  padding: 0;\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  cursor: pointer;\n  outline: 0;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/VersionModal/index.vue",
    "content": "<template>\n  <el-dialog model-value width=\"1084px\">\n    <div class=\"flex\">\n      <div class=\"flex-1\">\n        <div class=\"flex\">\n          <div>1</div>\n          <div>2</div>\n          <div>3</div>\n        </div>\n        <div>\n          <p class=\"text-2xl text-black\">选择购买时长</p>\n          <div class=\"flex gap-[22px]\">\n            <div class=\"w-[280px] h-[130px] border rounded-md p-5 bg-[#F5F6FA]\">\n              <div class=\"text-sm text-black\">1个月</div>\n              <div class=\"text-[#333] text-sm mt-4\">\n                <span class=\"text-black text-[20px]\">¥</span>\n                <span class=\"text-black text-[32px]\">88</span>\n                /月\n              </div>\n            </div>\n            <div class=\"w-[280px] h-[130px] border rounded-md p-5 bg-[#F5F6FA]\">\n              <div class=\"text-sm text-black\">1个月</div>\n              <div class=\"text-[#333] text-sm mt-4\">\n                <span class=\"text-black text-[20px]\">¥</span>\n                <span class=\"text-black text-[32px]\">88</span>\n                /月\n              </div>\n              <div class=\"text-sm text-[#333333] mt-2\">原价：¥1056/年</div>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"flex-none w-[270px]\">右边</div>\n    </div>\n  </el-dialog>\n</template>\n<script setup lang=\"ts\">\nconst nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nconst target = 17\nfunction twoSum(nums, target) {}\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/components/modals/.editorconfig",
    "content": "# EditorConfig is awesome: https://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n[*]\nindent_style = tab\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = false\ninsert_final_newline = false"
  },
  {
    "path": "web/front/src/renderer/main/constants/currency.ts",
    "content": "export const CURRENCY_TYPE = {\n  CNY: 'CNY',\n  USD: 'USD',\n  JPY: 'JPY',\n  EUR: 'EUR',\n  GBP: 'GBP'\n} as const\n\nexport type CurrencyType = (typeof CURRENCY_TYPE)[keyof typeof CURRENCY_TYPE]\n\nexport const CURRENCY_SYMBOL_MAP = new Map<CurrencyType, string>([\n  [CURRENCY_TYPE.CNY, '¥'],\n  [CURRENCY_TYPE.USD, '$'],\n  [CURRENCY_TYPE.JPY, '¥'],\n  [CURRENCY_TYPE.EUR, '€'],\n  [CURRENCY_TYPE.GBP, '£'],\n])\n\n/**\n * 获取货币符号\n */\nexport function getCurrencySymbol(currency: CurrencyType): string {\n  return CURRENCY_SYMBOL_MAP.get(currency) || '¥'\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/constants/events.ts",
    "content": "\nexport const EVENT_NAMES = {\n  // 支付相关事件\n  LOGIN_SUCCESS: 'login:success',\n  UPGRADE_OPEN: 'upgrade:open',\n} as const\n\n// 导出事件名称类型\nexport type EventName = typeof EVENT_NAMES[keyof typeof EVENT_NAMES]\n"
  },
  {
    "path": "web/front/src/renderer/main/constants/navigation.ts",
    "content": "export const NAVIGATION_TYPE = {\n  SYSTEM: 1,\n  EXTERNAL: 2,\n  CUSTOM: 3,\n} as const\nexport type NavigationType = (typeof NAVIGATION_TYPE)[keyof typeof NAVIGATION_TYPE]\nexport const NAVIGATION_TARGET = {\n  SELF: 1,\n  BLANK: 2,\n} as const\nexport type NavigationTarget = (typeof NAVIGATION_TARGET)[keyof typeof NAVIGATION_TARGET]\n\nexport const INIT_DATA_LIST = [\n  {\n    jump_path: '/index',\n    name: '首页',\n    sort: 9999,\n    config: JSON.stringify({\n      target: NAVIGATION_TARGET.SELF,\n      seo_title: '',\n      seo_keywords: '',\n      seo_description: '',\n    }),\n  },\n  {\n    jump_path: '/agent',\n    name: '智能体',\n    sort: 9998,\n    config: JSON.stringify({\n      target: NAVIGATION_TARGET.SELF,\n      seo_title: '',\n      seo_keywords: '',\n      seo_description: '',\n    }),\n  },\n  {\n    jump_path: '/prompt',\n    name: '提示词',\n    sort: 9997,\n    config: JSON.stringify({\n      target: NAVIGATION_TARGET.SELF,\n      seo_title: '',\n      seo_keywords: '',\n      seo_description: '',\n    }),\n  },\n  {\n    jump_path: '/toolkit',\n    name: 'AI工具',\n    sort: 9996,\n    config: JSON.stringify({\n      target: NAVIGATION_TARGET.SELF,\n      seo_title: '',\n      seo_keywords: '',\n      seo_description: '',\n    }),\n  },\n]"
  },
  {
    "path": "web/front/src/renderer/main/constants/payment.ts",
    "content": "export const PAYMENT_TYPE = {\n  WECHAT: 1,\n  MANUAL: 2,\n  PAYPAL: 3,\n  ALIPAY: 4\n} as const\n\nexport const PAYMENT_TYPE_LABEL_MAP: Record<PaymentType, string> = {\n  [PAYMENT_TYPE.WECHAT]: 'subscription.wechat_pay',\n  [PAYMENT_TYPE.MANUAL]: 'subscription.manual_pay',\n  [PAYMENT_TYPE.PAYPAL]: 'subscription.paypal',\n  [PAYMENT_TYPE.ALIPAY]: 'subscription.alipay'\n}\n\n/**\n * 支付类型\n */\nexport type PaymentType = (typeof PAYMENT_TYPE)[keyof typeof PAYMENT_TYPE]\n\n/**\n * 时间单位类型\n */\nexport const TIME_UNIT = {\n  MONTH: 'month',\n  YEAR: 'year'\n} as const\n\nexport type TimeUnitType = (typeof TIME_UNIT)[keyof typeof TIME_UNIT]\n"
  },
  {
    "path": "web/front/src/renderer/main/constants/storage.ts",
    "content": "export const STORAGE_KEYS = {\n  // 过期提醒相关\n  EXPIRE_REMINDER: 'expire_reminder_shown'\n} as const\n\nexport const STORAGE_CONFIG = {\n  // 最小过期天数\n  MIN_EXPIRE_DAY: 30\n} as const\n\n// 导出存储键名类型\nexport type StorageKey = (typeof STORAGE_KEYS)[keyof typeof STORAGE_KEYS]\n"
  },
  {
    "path": "web/front/src/renderer/main/constants/website.ts",
    "content": "export const WEBSITE_STYLE = {\n  WEBSITE: 'website',\n  SOFTWARE: 'software'\n} as const\nexport type WebsiteStyle = (typeof WEBSITE_STYLE)[keyof typeof WEBSITE_STYLE]\n\nexport const WEBSITE_STYLE_LABEL_MAP = new Map([\n  [WEBSITE_STYLE.WEBSITE, 'guide.website'],\n  [WEBSITE_STYLE.SOFTWARE, 'guide.software']\n])\nexport const WEBSITE_STYLE_DEMO_MAP = new Map([\n  [WEBSITE_STYLE.WEBSITE, '/images/template-website.png'],\n  [WEBSITE_STYLE.SOFTWARE, '/images/template-software.png']\n])\n"
  },
  {
    "path": "web/front/src/renderer/main/directive/README.md",
    "content": "# 自定义指令使用文档\n\n本文档详细介绍了项目中可用的自定义指令，包括它们的功能、使用方法和示例代码。\n\n## 目录\n\n- [v-trim](#v-trim) - 输入框内容自动去除空格\n- [v-copy](#v-copy) - 点击复制内容\n- [v-tooltip](#v-tooltip) - 文本提示气泡\n- [v-debounce](#v-debounce) - 防抖点击处理\n- [v-auth](#v-auth) - 统一处理用户认证和权限检查\n\n## 指令详情\n\n### v-trim\n\n**功能说明**：自动去除输入框（input/textarea）内容的首尾空格。\n\n**使用场景**：用户输入数据时，自动清除不必要的空格，提高数据质量。\n\n**使用方法**：\n\n```vue\n<!-- 基本用法 - 失焦或内容变化时去除空格 -->\n<input v-trim />\n<textarea v-trim></textarea>\n\n<!-- 立即模式 - 输入时立即去除空格 -->\n<input v-trim.immediate />\n```\n\n**参数说明**：\n- `.immediate` - 修饰符，启用时会在输入过程中立即去除空格，而不是等待失焦或变化事件\n\n### v-copy\n\n**功能说明**：点击元素时复制指定内容到剪贴板。\n\n**使用场景**：需要用户复制文本、链接或代码片段时。\n\n**使用方法**：\n\n```vue\n<!-- 复制静态文本 -->\n<button v-copy=\"'要复制的文本'\">点击复制</button>\n\n<!-- 复制动态内容 -->\n<div v-copy=\"dynamicContent\">点击复制</div>\n```\n\n**参数说明**：\n- `value` - 要复制的内容，可以是静态字符串或动态绑定的变量\n\n**注意事项**：\n- 复制成功后会显示提示消息\n\n### v-tooltip\n\n**功能说明**：为元素添加悬浮提示气泡，基于Element Plus的ElTooltip组件实现。\n\n**使用场景**：内容溢出或需要额外说明时，提供悬浮提示。\n\n**使用方法**：\n\n```vue\n<!-- 自动判断是否显示提示（内容溢出时显示） -->\n<div v-tooltip>这是一段可能会溢出的文本</div>\n\n<!-- 强制显示提示 -->\n<div v-tooltip=\"true\">总是显示提示</div>\n\n<!-- 自定义提示内容 -->\n<div v-tooltip=\"{ content: '自定义提示内容' }\">鼠标悬浮查看提示</div>\n\n<!-- 完整配置 -->\n<div v-tooltip=\"{\n  content: '自定义提示内容',\n  placement: 'bottom',\n  effect: 'light',\n  trigger: 'click'\n}\">点击查看提示</div>\n```\n\n**参数说明**：\n- 不传参数 - 自动判断内容是否溢出，溢出时显示提示\n- `true` - 强制显示提示\n- 对象配置：\n  - `content` - 提示内容，默认为元素的innerHTML\n  - `placement` - 提示位置，可选值：'top'(默认)、'bottom'、'left'、'right'等\n  - `effect` - 主题，可选值：'dark'(默认)、'light'\n  - `trigger` - 触发方式，可选值：'hover'(默认)、'click'、'focus'\n\n### v-debounce\n\n**功能说明**：为点击事件添加防抖处理，避免重复点击，并提供加载状态反馈。\n\n**使用场景**：表单提交、API调用等需要防止重复操作的场景。\n\n**使用方法**：\n\n```vue\n<!-- 基本用法 - 用于普通元素 -->\n<button v-debounce=\"handleClick\">点击提交</button>\n\n<!-- 用于Element Plus的ElButton组件 -->\n<el-button v-debounce @click=\"handleSubmit\">提交</el-button>\n\n<!-- 使用对象形式传入处理函数 -->\n<button v-debounce=\"{ handler: handleClick }\">点击提交</button>\n```\n\n**工作原理**：\n- 点击后立即禁用元素并显示加载状态\n- 如果处理函数返回Promise，则等待Promise完成后恢复\n- 否则等待1秒后自动恢复可点击状态\n- 对于ElButton组件，会自动处理loading状态\n\n**注意事项**：\n- 对于ElButton组件，会自动处理组件的loading属性\n- 对于普通元素，会添加disabled属性来防止重复点击\n\n### v-auth\n\n**功能说明**：统一处理用户认证和权限检查的 Vue 指令。\n\n**使用场景**：需要根据用户认证状态和权限来控制功能可用性。\n\n**使用方法**：\n\n```vue\n<template>\n  <div>\n    <!-- 只需要登录 -->\n    <button v-auth=\"{ checkLogin: true }\" @click=\"normalFeature\">\n      普通功能\n    </button>\n\n    <!-- 需要登录 + 特定版本权限 -->\n    <button v-auth=\"{ checkLogin: true, checkVersion: true, groupIds: [1, 2, 3] }\" @click=\"premiumFeature\">\n      高级功能\n    </button>\n\n    <!-- 只需要版本权限（已登录用户） -->\n    <button v-auth=\"{ checkVersion: true, groupIds: [4, 5] }\" @click=\"specialFeature\">\n      特殊功能\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nconst normalFeature = () => {\n  console.log('执行普通功能')\n}\n\nconst premiumFeature = () => {\n  console.log('执行高级功能')\n}\n\nconst specialFeature = () => {\n  console.log('执行特殊功能')\n}\n</script>\n```\n\n**参数说明**：\n- `checkLogin` - 是否检查登录状态\n- `checkVersion` - 是否检查版本权限\n- `groupIds` - 需要的用户组ID列表\n\n## 在项目中使用\n\n这些指令已在项目初始化时通过`setupDirective`函数注册，可以直接在模板中使用。\n\n```js\n// 指令已在此处注册\nimport { setupDirective } from '@/renderer/main/directive'\n\n// 在应用初始化时调用\nsetupDirective(app)\n```\n\n## v-permission 指令（向后兼容）\n\n保持原有的 permission 指令用法，内部已重构为使用统一的认证系统。\n\n```vue\n<template>\n  <button v-permission=\"{ group_ids: [1, 2, 3] }\">\n    受权限控制的按钮\n  </button>\n</template>\n```\n\n## 工具函数\n\n### checkPermission\n\n统一的认证检查函数，可在 JavaScript 代码中直接使用：\n\n```typescript\nimport { checkPermission } from '@/utils/permission'\n\n// 基本用法\nconst isAuthorized = await checkPermission({\n})\n\nif (isAuthorized) {\n  // 执行需要权限的操作\n}\n\n// 带回调的用法\nawait checkPermission({\n  groupIds: [1, 2, 3],\n  onClick: () => {\n    console.log('认证通过，执行操作')\n  }\n})\n```\n"
  },
  {
    "path": "web/front/src/renderer/main/directive/copy.ts",
    "content": "import { copyToClip } from '@/utils/copy'\n\nconst handler = (el: any, binding: any) => {\n  el._copyText = binding.value\n  if (!el._copyHandler) {\n    el._copyHandler = function (event: Event) {\n      event.stopPropagation() // 阻止事件冒泡到父级\n      copyToClip(this._copyText).then(() => {\n        ElMessage.success(window.$t('common.copied'))\n      })\n    }\n  }\n  el.removeEventListener('click', el._copyHandler)\n  el.addEventListener('click', el._copyHandler)\n}\nexport default {\n  mounted: handler,\n  updated: handler,\n  unmounted: (el: any) => {\n    el.removeEventListener('click', el._copyHandler)\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/directive/debounce.ts",
    "content": "// 定义类型\ninterface VNode {\n  ctx: {\n    type: { name: string }\n    vnode: {\n      props: any\n      loading?: boolean\n      key?: string\n    }\n    props: any\n    proxy?: {\n      $forceUpdate: () => void\n    }\n  }\n}\n\ninterface HTMLElementWithListener extends HTMLElement {\n  dListener?: (ev: Event) => void\n  disabled?: boolean\n}\n\n/**\n * AOP函数 - 在原函数执行前后添加额外逻辑\n */\nfunction AOP(func: Function, beforeFn: Function, afterFn: Function) {\n  return function (this: any, ...args: any[]) {\n    beforeFn.apply(this, args)\n    const ret = func.apply(this, args)\n    const handleAfterFn = () => {\n      setTimeout(() => {\n        afterFn.apply(this, args)\n      }, 600)\n    }\n\n    if (ret && typeof ret.then === 'function' && typeof ret.catch === 'function') {\n      ret.finally(handleAfterFn)\n    }\n    else {\n      // 非Promise返回值\n      handleAfterFn()\n    }\n\n    return ret\n  }\n}\n\n/**\n * 创建函数副本，避免直接修改原函数\n */\nfunction createFunctionCopy(originalFn: Function) {\n  // 确保函数为空时不会出错\n  if (!originalFn)\n    return function () { }\n\n  return function (this: any, ...args: any[]) {\n    return originalFn.apply(this, args)\n  }\n}\n\n/**\n * 更新组件状态\n */\nfunction updateComponentState(ctx: VNode['ctx']) {\n  if (ctx.proxy && typeof ctx.proxy.$forceUpdate === 'function')\n    ctx.proxy.$forceUpdate()\n}\n\n/**\n * 处理ElButton组件\n */\nfunction handleElButton(ctx: VNode['ctx']) {\n  const click = ctx.vnode.props?.onClick ?? null\n\n  // 如果没有保存原始点击事件，则保存\n  if (!ctx.vnode.props._onClick) {\n    ctx.vnode.props._onClick = click\n    ctx.vnode.key = `debounce_${Math.random().toString(36).slice(2, 11)}`\n  }\n  // 设置初始loading状态\n  ctx.props.loading = ctx.vnode.loading || false\n\n  const debouncedClick = createFunctionCopy(ctx.vnode.props._onClick)\n\n  // 使用AOP包装防抖后的点击事件，添加loading效果\n  ctx.vnode.props.onClick = AOP(\n    (e: Event) => {\n      e?.stopPropagation() // 阻止事件冒泡\n      return debouncedClick.apply(this, [e])\n    },\n    () => {\n      // 点击前立即设置loading状态\n      ctx.props.loading = true\n      ctx.vnode.loading = true\n      updateComponentState(ctx)\n    },\n    () => {\n      // 操作完成后取消loading状态\n      ctx.props.loading = false\n      ctx.vnode.loading = false\n      updateComponentState(ctx)\n    },\n  )\n}\n\n/**\n * 处理普通元素\n */\nfunction handleNormalElement(el: HTMLElementWithListener, binding: any, ctx: VNode['ctx']) {\n  // 移除旧的事件监听器\n  if (el.dListener)\n    el.removeEventListener('click', el.dListener)\n  // 创建新的防抖事件监听器\n  el.dListener = (ev: Event) => {\n    ev?.stopPropagation() // 阻止事件冒泡\n    if (el.disabled)\n      return\n\n    ctx.props.loading = true\n    el.disabled = true\n\n    const originalClick = binding.value?.handler || binding.value\n\n    // 处理点击事件\n    if (typeof originalClick === 'function') {\n      const result = originalClick(ev)\n\n      const resetState = () => {\n        setTimeout(() => {\n          el.disabled = false\n          ctx.props.loading = false\n        }, 1000)\n      }\n\n      // 处理可能的Promise返回值\n      if (result && typeof result.then === 'function')\n        result.finally(resetState)\n      else\n        resetState()\n    }\n    else {\n      // 没有点击事件处理函数，直接等待1秒\n      setTimeout(() => {\n        el.disabled = false\n        ctx.props.loading = false\n      }, 1000)\n    }\n  }\n\n  // 添加事件监听\n  el.addEventListener('click', el.dListener)\n}\n\n/**\n * 指令处理函数\n */\nconst handler = (el: HTMLElementWithListener, binding: any, vnode: VNode) => {\n  const ctx = vnode.ctx\n  // 根据组件类型分别处理\n  if (ctx.type.name === 'ElButton')\n    handleElButton(ctx)\n  else\n    handleNormalElement(el, binding, ctx)\n}\n\nexport default {\n  mounted: handler,\n  updated: handler,\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/directive/index.ts",
    "content": "import trim from './trim'\nimport copy from './copy'\nimport tooltip from './tooltip'\nimport debounce from './debounce'\nimport permission from './permission'\n\nexport function setupDirective(app) {\n  app.directive('trim', trim)\n  app.directive('copy', copy)\n  app.directive('tooltip', tooltip)\n  app.directive('debounce', debounce)\n  app.directive('permission', permission)\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/directive/permission.ts",
    "content": "import { checkPermission, type AuthOptions } from '@/utils/permission'\n\nconst handler = (el: any, binding: any) => {\n  el._authParams = binding.value\n\n  if (!el._authHandler) {\n    el._authHandler = async function (event: Event) {\n      const params: AuthOptions = el._authParams || {}\n      const passed = await checkPermission(params)\n\n      if (!passed) {\n        // 阻止原始的点击事件\n        event.stopPropagation()\n        event.preventDefault()\n        return false\n      }\n\n      // 如果检查通过，让原始的点击事件继续执行\n      return true\n    }\n  }\n\n  // 移除旧的监听器\n  el.removeEventListener('click', el._authHandler, true)\n  // 添加新的监听器，使用捕获阶段以便在其他点击处理器之前执行\n  el.addEventListener('click', el._authHandler, true)\n}\n\nexport default {\n  mounted: handler,\n  updated: handler,\n  unmounted: (el: any) => {\n    if (el._authHandler) {\n      el.removeEventListener('click', el._authHandler, true)\n    }\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/directive/tooltip.ts",
    "content": "import { createApp } from \"vue\"\nimport { ElTooltip } from 'element-plus'\nimport { useBasicLayout } from \"@/hooks/useBasicLayout\"\nimport type { DirectiveBinding } from \"vue\"\n\nconst { isMdScreen } = useBasicLayout()\n\n\nconst destroyTooltip = (el: any) => {\n  if (el._tipapp) {\n    el._tipapp.unmount();\n    el._tiproot && el._tiproot.remove();\n    el._tipapp = null;\n    el._tiproot = null;\n  }\n}\n/**\n * 创建tooltip，这里采用element-plus的tooltip组件\n * @param el\n * @param binding\n */\nconst createTooltip = (el: any, binding: DirectiveBinding) => {\n  /**\n   * 判断是否显示tooltip\n   * 如果传值为true，则显示tooltip\n   * 否则，autoShowToolTip 自动判断是否显示tooltip\n   */\n  // 获取指令绑定的值\n  const bindingValue = binding.value || {};\n  // 判断是否显示tooltip\n  const isShow = typeof bindingValue === 'object' ? true : autoShowToolTip(el, binding)\n\n  destroyTooltip(el)\n  // 创建组件，显示tooltip\n  if (isShow) {\n    // 判断是否有根元素，存在，则移除\n    const elRoot = document.querySelector(\"#agenthub_tooltip_root\");\n    if (elRoot) {\n      elRoot.remove();\n    }\n    // 初始化 根元素\n    el._tiproot = null;\n    el._tipapp = null;\n    const id = \"agenthub_tooltip_root\";\n    const _tiproot = document.createElement(\"div\");\n    _tiproot.id = id;\n    _tiproot.classList.add(\"_tiproot\");\n\n    // 获取配置参数\n    const content = typeof bindingValue === 'object' && bindingValue.content ? bindingValue.content : el.innerHTML;\n    const placement = typeof bindingValue === 'object' && bindingValue.placement ? bindingValue.placement : 'top';\n    const effect = typeof bindingValue === 'object' && bindingValue.effect ? bindingValue.effect : 'dark';\n    const trigger = typeof bindingValue === 'object' && bindingValue.trigger ? bindingValue.trigger : 'hover';\n\n    // 通过createApp 创建实例组件\n    const _tipapp = createApp(ElTooltip, {\n      trigger: trigger,\n      virtualRef: el,\n      rawContent: true,\n      placement: placement,\n      effect: effect,\n      virtualTriggering: true,\n      content: content,\n    });\n\n    el._tiproot = _tiproot;\n    el._tipapp = _tipapp;\n    // body添加根元素\n    document.body.appendChild(_tiproot);\n    // 将新组件挂载到根元素\n    if (_tipapp && _tiproot) {\n      el._tipapp.mount(\"#\" + id);\n    }\n  }\n};\n\n/**\n * 判断宽度和高度是否自动展示提示内容\n * @param el\n * @param binding\n * @returns\n */\nconst autoShowToolTip = (el: any, binding: DirectiveBinding) => {\n  /**\n   * 通过创建range 获取元素内容的宽度和高度\n   */\n  const range = document.createRange();\n  range.setStart(el, 0);\n  if (el && el.childNodes.length) {\n    range.setEnd(el, el.childNodes.length);\n  }\n  let rangeWidth = range.getBoundingClientRect().width;\n  let rangeHeight = range.getBoundingClientRect().height;\n  const offsetWidth = rangeWidth - Math.floor(rangeWidth);\n  const offsetHeight = rangeHeight - Math.floor(rangeHeight);\n  if (offsetWidth < 0.001) {\n    rangeWidth = Math.floor(rangeWidth);\n  }\n  if (offsetHeight < 0.001) {\n    rangeHeight = Math.floor(rangeHeight);\n  }\n  // 计算元素在页面中的宽度、高度\n  const style: any = window.getComputedStyle(el, null);\n  const maxWidth = parseInt(style[\"width\"] || style[\"width\"]) || 0;\n  const maxHeight = parseInt(style[\"height\"]);\n  // 获取元素的padding\n  const pLeft = style[\"padding-left\"];\n  const pRight = style[\"padding-right\"];\n  const pTop = style[\"padding-top\"];\n  const pBottom = style[\"padding-bottom\"];\n  // 计算最终宽度、高度\n  const finalWidth = rangeWidth + parseInt(pLeft) + parseInt(pRight);\n  const finalHeight = rangeHeight + parseInt(pTop) + parseInt(pBottom);\n\n  if (finalWidth > maxWidth || finalHeight > maxHeight) {\n    return true;\n  }\n  return false;\n};\n\n\n/**\n * 指令 tooltip\n * 使用方式：\n * <div v-tooltip></div>                           - 自动判断是否显示\n * <div v-tooltip=\"true\"></div>                    - 强制显示\n * <div v-tooltip=\"{ content: '自定义内容' }\"></div> - 自定义内容\n * <div v-tooltip=\"{ placement: 'bottom', effect: 'light', trigger: 'click', content: '自定义内容' }\"></div> - 完整配置\n */\nexport default {\n  mounted(el: HTMLElement, binding: DirectiveBinding) {\n    if (isMdScreen.value) {\n      return\n    }\n    createTooltip(el, binding);\n  },\n  updated(el: HTMLElement, binding: DirectiveBinding) {\n    if (isMdScreen.value) {\n      return\n    }\n    createTooltip(el, binding);\n  },\n  unmounted(el: HTMLElement) {\n    if (isMdScreen.value) {\n      return\n    }\n    destroyTooltip(el);\n  }\n};\n"
  },
  {
    "path": "web/front/src/renderer/main/directive/trim.ts",
    "content": "import type { DirectiveBinding } from 'vue'\n\nexport default {\n  mounted(el: HTMLElement, binding: DirectiveBinding) {\n    const element = el.querySelector('input') || el.querySelector('textarea')\n    if (!element) return\n\n    const trimValue = () => {\n      if (element.value) {\n        element.value = element.value.trim()\n        element.dispatchEvent(new Event('input', { bubbles: true }))\n      }\n    }\n\n    // 将事件监听器存储在元素上，以便后续卸载时使用\n    const handlers = {\n      blur: trimValue,\n      change: trimValue,\n      input: () => {\n        if (binding.modifiers.immediate) {\n          trimValue()\n        }\n      }\n    }\n    \n    Object.entries(handlers).forEach(([event, handler]) => {\n      element.addEventListener(event, handler)\n    })\n\n    // 将handlers存储在元素上\n    el._trimHandlers = { element, handlers }\n  },\n\n  unmounted(el: HTMLElement) {\n    // 获取之前存储的handlers并清理事件\n    const stored = (el as any)._trimHandlers\n    if (stored) {\n      const { element, handlers } = stored\n      Object.entries(handlers).forEach(([event, handler]) => {\n        element.removeEventListener(event, handler)\n      })\n      delete el._trimHandlers\n    }\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/global/index.ts",
    "content": "// 类型声明\ndeclare global {\n  interface Window {\n    $noop?: () => void\n    $getPublicPath?: (path: string) => string\n    electron?: any\n    $isElectron?: boolean\n    $chat53ai?: any\n  }\n}\n\nexport function setupGlobal(app) {\n  window.$noop = () => {}\n\n  window.$isElectron = !!window.electron\n  if (!window.$chat53ai) {\n    window.$chat53ai = {\n      getPublicPath: (path: string) => {\n        return path\n      },\n      getPreloadPath: () => {\n        return ''\n      },\n      $on: () => {},\n      $updater: () => {},\n      $win: () => {}\n    }\n  }\n  window.$getPublicPath = (path: string) => {\n    return path\n  }\n  app.config.globalProperties.$isElectron = window.$isElectron\n  app.config.globalProperties.$noop = window.$noop\n  app.config.globalProperties.$getPublicPath = window.$getPublicPath\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/hooks/README.md",
    "content": "# Hooks 使用文档\n\n本文档详细介绍了项目中可用的自定义Hooks，包括它们的功能、使用方法和示例代码。\n\n## 目录\n\n- [useBasicLayout](#usebasiclayout) - 响应式布局判断\n- [useEnv](#useenv) - 环境变量判断\n- [useMobile](#usemobile) - 手机号验证与验证码处理\n- [useScroll](#usescroll) - 滚动容器控制\n\n## 详细说明\n\n### useBasicLayout\n\n**功能说明**：提供响应式布局判断，基于Tailwind CSS的断点系统，用于判断当前屏幕尺寸。\n\n**使用场景**：需要根据不同屏幕尺寸调整UI布局时。\n\n**使用方法**：\n\n```vue\n<script setup>\nimport { useBasicLayout } from '@/renderer/main/hooks/useBasicLayout'\n\nconst { isLgScreen, isMdScreen, isSmScreen } = useBasicLayout()\n</script>\n\n<template>\n  <div>\n    <div v-if=\"isSmScreen\">小屏幕布局</div>\n    <div v-else-if=\"isMdScreen\">中屏幕布局</div>\n    <div v-else>大屏幕布局</div>\n  </div>\n</template>\n```\n\n**返回值说明**：\n- `isLgScreen` - 是否小于大屏幕尺寸（< 1024px）\n- `isMdScreen` - 是否小于中屏幕尺寸（< 768px）\n- `isSmScreen` - 是否小于小屏幕尺寸（< 640px）\n\n**实现原理**：\n基于VueUse的`useBreakpoints`和Tailwind CSS的断点配置，提供响应式的屏幕尺寸判断。\n\n### useEnv\n\n**功能说明**：提供环境变量判断，用于区分不同运行环境。\n\n**使用场景**：需要根据不同环境执行不同逻辑时。\n\n**使用方法**：\n\n```vue\n<script setup>\nimport { useEnv } from '@/renderer/main/hooks/useEnv'\n\nconst { isOpLocalEnv } = useEnv()\n\n// 根据环境执行不同逻辑\nif (isOpLocalEnv.value) {\n  // 本地环境特定逻辑\n} else {\n  // 其他环境逻辑\n}\n</script>\n```\n\n**返回值说明**：\n- `isOpLocalEnv` - 是否为本地运营环境（VITE_PLATFORM === 'op-local'）\n\n**实现原理**：\n通过读取Vite环境变量`import.meta.env.VITE_PLATFORM`判断当前运行环境。\n\n### useMobile\n\n**功能说明**：提供手机号验证和验证码处理功能，包括验证码发送、倒计时等。\n\n**使用场景**：需要处理手机验证码登录、注册等场景。\n\n**使用方法**：\n\n```vue\n<script setup>\nimport useMobile from '@/renderer/main/hooks/useMobile'\n\nconst { codeCount, codeRule, sendcode } = useMobile()\n\n// 发送验证码\nconst handleSendCode = () => {\n  const mobile = '13800138000' // 从表单获取手机号\n  sendcode(mobile)\n}\n</script>\n\n<template>\n  <div>\n    <el-input v-model=\"form.mobile\" placeholder=\"请输入手机号\" />\n    <el-input\n      v-model=\"form.code\"\n      placeholder=\"请输入验证码\"\n      :rules=\"[codeRule]\"\n    />\n    <el-button\n      @click=\"handleSendCode\"\n      :disabled=\"codeCount > 0\"\n    >\n      {{ codeCount > 0 ? `${codeCount}秒后重试` : '发送验证码' }}\n    </el-button>\n  </div>\n</template>\n```\n\n**返回值说明**：\n- `codeCount` - 验证码倒计时计数（0表示可以发送验证码）\n- `codeRule` - 验证码格式校验规则（用于表单验证）\n- `sendcode` - 发送验证码的方法，接收手机号参数\n\n**实现原理**：\n- 提供中国手机号格式验证\n- 发送验证码并自动处理60秒倒计时\n- 提供验证码格式校验（4位数字）\n\n### useScroll\n\n**功能说明**：提供滚动容器的控制功能，包括滚动到顶部、底部、指定元素等。\n\n**使用场景**：需要控制滚动容器行为，如聊天窗口、长列表等。\n\n**使用方法**：\n\n```vue\n<script setup>\nimport { useScroll } from '@/renderer/main/hooks/useScroll'\n\nconst {\n  scrollRef,\n  scrollToBottom,\n  scrollToTop,\n  scrollTo,\n  scrollToVal,\n  scrollToBottomIfAtBottom\n} = useScroll()\n\n// 滚动到底部\nconst handleScrollToBottom = () => {\n  scrollToBottom()\n}\n\n// 滚动到指定元素\nconst handleScrollToElement = () => {\n  scrollTo('#target-element', -20) // 第二个参数是偏移量\n}\n</script>\n\n<template>\n  <div ref=\"scrollRef\" class=\"scroll-container\">\n    <!-- 滚动内容 -->\n    <div v-for=\"item in items\" :key=\"item.id\">\n      {{ item.content }}\n    </div>\n    <div id=\"target-element\">目标元素</div>\n\n    <!-- 控制按钮 -->\n    <button @click=\"handleScrollToBottom\">滚动到底部</button>\n    <button @click=\"scrollToTop\">滚动到顶部</button>\n    <button @click=\"handleScrollToElement\">滚动到目标元素</button>\n  </div>\n</template>\n\n<style>\n.scroll-container {\n  height: 400px;\n  overflow-y: auto;\n}\n</style>\n```\n\n**返回值说明**：\n- `scrollRef` - 滚动容器的ref引用\n- `scrollToBottom` - 滚动到底部的方法\n- `scrollToTop` - 滚动到顶部的方法\n- `scrollTo` - 滚动到指定选择器元素的方法，可设置偏移量\n- `scrollToVal` - 滚动到指定滚动值的方法\n- `scrollToBottomIfAtBottom` - 如果当前接近底部，则滚动到底部的方法（常用于新消息追加时）\n\n**实现原理**：\n- 使用Vue的ref和nextTick确保DOM更新后再滚动\n- 提供多种滚动控制方法，满足不同场景需求\n- 智能判断是否在底部，优化用户体验\n\n## 在项目中使用\n\n这些hooks遵循Vue Composition API的设计理念，可以在setup函数或`<script setup>`中直接导入使用。\n\n```js\n// 在组件中使用多个hooks\nimport { useBasicLayout } from '@/renderer/main/hooks/useBasicLayout'\nimport { useEnv } from '@/renderer/main/hooks/useEnv'\nimport useMobile from '@/renderer/main/hooks/useMobile'\nimport { useScroll } from '@/renderer/main/hooks/useScroll'\n\n// 使用hooks\nconst { isSmScreen } = useBasicLayout()\nconst { isOpLocalEnv } = useEnv()\nconst { sendcode } = useMobile()\nconst { scrollToBottom } = useScroll()\n```\n"
  },
  {
    "path": "web/front/src/renderer/main/hooks/useBasicLayout.ts",
    "content": "import { computed } from 'vue'\nimport { useBreakpoints, breakpointsTailwind } from '@vueuse/core'\n\nconst breakpoints = useBreakpoints(breakpointsTailwind)\n\nexport const useBasicLayout = () => {\n  const isLgScreen = breakpoints.smaller('lg')\n  const isMdScreen = breakpoints.smaller('md')\n  const isSmScreen = breakpoints.smaller('sm')\n\n  const isInMobile = computed(() => {\n    const userAgent = navigator.userAgent\n    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent)\n  })\n  return {\n    isLgScreen,\n    isMdScreen,\n    isSmScreen,\n    isInMobile\n  }\n}"
  },
  {
    "path": "web/front/src/renderer/main/hooks/useEmail.ts",
    "content": "\nimport { ref } from 'vue'\nimport commonApi from '@/api/modules/common'\n\nexport default () => {\n\tconst emailCodeCount = ref(0)\n\tconst emailCodeRule = {\n\t\tvalidator: (rule: any, value: any, callback: any) => {\n\t\t\tif (/^\\d{6}$/.test(value))\n\t\t\t\tcallback()\n\t\t\telse\n\t\t\t\tcallback(new Error(window.$t('form.verify_code_format')))\n\t\t},\n\t\ttrigger: ['blur', 'change'],\n\t}\n\n\tlet _countTimer: any\n\tconst countdown = () => {\n\t\tclearTimeout(_countTimer)\n\t\t_countTimer = setTimeout(() => {\n\t\t\temailCodeCount.value -= 1\n\t\t\tif (emailCodeCount.value <= 0)\n\t\t\t\treturn\n\t\t\tcountdown()\n\t\t}, 1000)\n\t}\n\n\t// 发送邮箱验证码\n\tconst sendEmailCode = (email: string) : Promise<void> => {\n\t\tif (!email.trim()) return Promise.reject()\n\n\t\treturn commonApi.sendEmailCode({\n\t\t\temail,\n\t\t}).then(() => {\n\t\t\temailCodeCount.value = 60\n\t\t\tcountdown()\n\t\t\tElMessage.success(window.$t('status.sent'))\n\t\t})\n\t}\n\n\treturn {\n\t\temailCodeCount,\n\t\temailCodeRule,\n\t\tsendEmailCode\n\t}\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/hooks/useEnv.ts",
    "content": "import { ref } from 'vue'\n\nfunction useEnv() {\n  const isOpLocalEnv = ref<boolean>(import.meta.env.VITE_PLATFORM === 'op-local')\n  return {\n    isOpLocalEnv\n  }\n}\n\nexport { useEnv }\nexport default useEnv\n"
  },
  {
    "path": "web/front/src/renderer/main/hooks/useMobile.ts",
    "content": "import { ref } from 'vue'\nimport commonApi from '@/api/modules/common'\n\n// function isChinaMobile(phone: string): boolean {\n//   // 清洗并处理手机号\n//   let cleaned = phone.replace(/\\D/g, '') // 去除非数字字符\n//   if (cleaned.length > 11)\n//     cleaned = cleaned.slice(-11) // 处理带国际区号的情况\n\n//   // 基础验证\n//   if (cleaned.length !== 11 || !cleaned.startsWith('1'))\n//     return false\n\n//   // 中国移动号段正则（2023年最新版）\n//   const mobilePattern = /^1(3[5-9]|34[0-8]|440|4(7|8[0-9])|5[0-27-9]|7[28]|8[2-47-8]|9[58]|20)/\n//   return mobilePattern.test(cleaned)\n// }\n\nexport default () => {\n  const codeCount = ref(0)\n  const codeRule = {\n    validator: (rule: any, value: any, callback: any) => {\n      if (/^\\d{4}$/.test(value)) callback()\n      else callback(new Error(window.$t('form.verify_code_format')))\n    },\n    trigger: ['blur', 'change']\n  }\n\n  let _countTimer: any\n  const countdown = () => {\n    clearTimeout(_countTimer)\n    _countTimer = setTimeout(() => {\n      codeCount.value -= 1\n      if (codeCount.value <= 0) return\n      countdown()\n    }, 1000)\n  }\n\n  const sendcode = (mobile: string) => {\n    if (!mobile.trim()) return\n\n    commonApi\n      .sendcode({\n        mobile,\n        source: 'companyibos'\n      })\n      .then(() => {\n        codeCount.value = 60\n        countdown()\n        ElMessage.success(window.$t('status.sent'))\n      })\n  }\n\n  return {\n    codeCount,\n    codeRule,\n    sendcode\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/hooks/useScroll.ts",
    "content": "import type { Ref } from 'vue'\nimport { nextTick, ref } from 'vue'\n\ntype ScrollElement = HTMLDivElement | null\n\ninterface ScrollReturn {\n  scrollRef: Ref<ScrollElement>\n  scrollToBottom: () => Promise<void>\n  scrollToTop: () => Promise<void>\n  scrollTo: (selector: string, diff?: number) => Promise<void>\n  scrollToVal: (value: number) => Promise<void>\n  scrollToBottomIfAtBottom: () => Promise<void>\n}\n\nexport function useScroll(): ScrollReturn {\n  const scrollRef = ref<ScrollElement>(null)\n\n  const scrollToBottom = async () => {\n    await nextTick()\n    if (scrollRef.value)\n      scrollRef.value.scrollTop = scrollRef.value.scrollHeight\n  }\n\n  const scrollToTop = async () => {\n    await nextTick()\n    if (scrollRef.value)\n      scrollRef.value.scrollTop = 0\n  }\n\n  const scrollToBottomIfAtBottom = async () => {\n    await nextTick()\n    if (scrollRef.value) {\n      const threshold = 100 // 阈值，表示滚动条到底部的距离阈值\n      const distanceToBottom = scrollRef.value.scrollHeight - scrollRef.value.scrollTop - scrollRef.value.clientHeight\n      if (distanceToBottom <= threshold)\n        scrollRef.value.scrollTop = scrollRef.value.scrollHeight\n    }\n  }\n\n  const scrollTo = async (selector: string, diff = 0) => {\n    await nextTick()\n    const node = document.querySelector(selector)\n    if (scrollRef.value && node)\n      scrollRef.value.scrollTop = node.offsetTop + diff\n    await nextTick()\n  }\n  const scrollToVal = async (value: number) => {\n    await nextTick()\n    if (scrollRef.value)\n      scrollRef.value.scrollTop = value\n  }\n\n  return {\n    scrollRef,\n    scrollToBottom,\n    scrollToTop,\n    scrollTo,\n    scrollToVal,\n    scrollToBottomIfAtBottom,\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/hooks/useVmodel.ts",
    "content": "import { ref } from 'vue'\n\ninterface UseVmodelOptions {\n  props: any\n  key?: string\n  emits?: any\n}\nexport default function useVmodel(options: UseVmodelOptions) {\n  const { props, key = 'modelValue' } = options\n  const proxy = ref(props[key])\n\n  // watch(\n  //   () => proxy.value,\n  //   v => _emit(event, v),\n  // )\n  return proxy\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/layout/header.vue",
    "content": "<template>\n  <!--  v-if=\"needLogin ? userStore.is_login : true\" -->\n  <header class=\"flex-none h-[70px] border-b sticky top-0 z-10\" :class=\"[type === 'homepage' ? 'nav-bg' : 'bg-white']\">\n    <div class=\"mx-auto px-4 flex items-center justify-between h-full\" :class=\"mainClass\">\n      <div class=\"flex-1 flex items-center gap-2 overflow-hidden relative\">\n        <slot name=\"before_prefix\"></slot>\n        <div\n          v-if=\"siderButton && !globalStore.siderVisible\"\n          v-tooltip=\"{\n            content: $t('chat.expand_side_bar')\n          }\"\n          class=\"flex-none size-7 rounded-md flex-center cursor-pointer hover:bg-[#ECEDEE] absolute top-0 left-0\"\n          @click=\"globalStore.toggleSider\"\n        >\n          <svg-icon name=\"layout-left\" size=\"20\" color=\"#9A9A9A\"></svg-icon>\n        </div>\n        <div\n          v-if=\"back\"\n          v-tooltip=\"{\n            content: $t('common.back')\n          }\"\n          class=\"flex-none size-7 rounded-md flex-center cursor-pointer max-md:hidden hover:bg-[#ECEDEE]\"\n          @click=\"$router.back()\"\n        >\n          <ElIcon class=\"text-regular cursor-pointer\" size=\"14\">\n            <ArrowLeft />\n          </ElIcon>\n        </div>\n        <slot name=\"before_suffix\"></slot>\n      </div>\n\n      <div class=\"flex items-center gap-2\">\n        <slot name=\"after_prefix\"></slot>\n        <template v-if=\"!$isElectron && !hideUser\">\n          <el-tooltip v-if=\"userStore.is_login\" effect=\"light\" popper-class=\"el-popper--plain\" placement=\"bottom-end\">\n            <template #content>\n              <div class=\"w-[300px] p-4 flex items-center gap-2\">\n                <el-image class=\"flex-none size-10 rounded-full\" :src=\"userStore.info.avatar\"></el-image>\n                <div class=\"flex-1 overflow-hidden\">\n                  <div class=\"w-full flex items-center gap-1 overflow-hidden\">\n                    <p class=\"flex-1 text-sm text-primary font-medium truncate\">\n                      {{ userStore.info.nickname }}\n                    </p>\n                    <div\n                      v-if=\"!userStore.info.is_internal\"\n                      class=\"h-6 flex-center gap-1 bg-[#F7F7F7] rounded-full px-2 text-xs text-placeholder whitespace-nowrap\"\n                      :title=\"userStore.info.group_name\"\n                    >\n                      <img\n                        :src=\"\n                          !/\\.png$/.test(userStore.info.group_icon)\n                            ? $getPublicPath(`/images/subscription/${userStore.info.group_icon}.png`)\n                            : userStore.info.group_icon\n                        \"\n                        class=\"w-4 h-4 object-cover\"\n                      />\n                      <p class=\"max-w-[5em] truncate\">{{ userStore.info.group_name }}</p>\n                    </div>\n                    <div\n                      v-if=\"upgrade_visible && !userStore.info.is_internal\"\n                      class=\"flex items-center gap-1 ml-auto cursor-pointer hover:opacity-70 bg-[#F4F0FF] rounded-2xl h-6 px-2 box-border text-xs text-[#8E5EFF] whitespace-nowrap\"\n                      @click.stop=\"upgrade_ref.open\"\n                    >\n                      <img :src=\"$getPublicPath(`/images/subscription/upgrade.png`)\" class=\"w-4 h-4 object-cover\" />\n                      {{ $t('subscription.upgrade') }}\n                    </div>\n                  </div>\n                  <div class=\"text-xs text-[#9A9A9A]\">{{ userStore.info.email }}</div>\n                </div>\n              </div>\n              <div class=\"flex flex-col gap-1.5 px-3 py-1.5 border-t\">\n                <router-link\n                  :to=\"{ name: 'Profile' }\"\n                  class=\"h-8 px-3 flex items-center gap-2 rounded cursor-pointer hover:bg-[#ECEDEE] text-primary\"\n                >\n                  <div class=\"flex-center size-6\">\n                    <svg-icon name=\"setting\" size=\"16\"></svg-icon>\n                  </div>\n                  <span class=\"text-sm\">{{ $t('action.setting') }}</span>\n                </router-link>\n                <div\n                  v-if=\"userStore.info.role > 1\"\n                  class=\"h-8 px-3 flex items-center gap-2 rounded cursor-pointer hover:bg-[#ECEDEE] text-primary\"\n                  @click=\"handleJumpToAdmin\"\n                >\n                  <div class=\"flex-center size-6\">\n                    <svg-icon name=\"jump\" size=\"16\"></svg-icon>\n                  </div>\n                  <span class=\"text-sm\">{{ $t('common.go_admin') }}</span>\n                </div>\n                <a\n                  href=\"https://doc.53ai.com/%E5%85%A5%E9%97%A8/%E6%AC%A2%E8%BF%8E%E4%BD%BF%E7%94%A8.html\"\n                  target=\"_blank\"\n                  class=\"h-8 px-3 flex items-center gap-2 rounded cursor-pointer text-primary hover:bg-[#ECEDEE]\"\n                >\n                  <div class=\"flex-center size-6\">\n                    <svg-icon name=\"toolkit\" size=\"16\" stroke></svg-icon>\n                  </div>\n                  <span class=\"text-sm\">{{ $t('common.new_friend') }}</span>\n                </a>\n                <a\n                  href=\"https://doc.53ai.com/%E7%A4%BE%E5%8C%BA/%E9%9C%80%E6%B1%82%E6%94%AF%E6%8C%81.html\"\n                  target=\"_blank\"\n                  class=\"h-8 px-3 flex items-center gap-2 rounded cursor-pointer text-primary hover:bg-[#ECEDEE]\"\n                >\n                  <div class=\"flex-center size-6\">\n                    <svg-icon name=\"help\" size=\"16\"></svg-icon>\n                  </div>\n                  <span class=\"text-sm\">{{ $t('common.help_feedback') }}</span>\n                </a>\n              </div>\n              <div class=\"flex flex-col gap-1.5 px-3 py-1.5 border-t\">\n                <div v-debounce class=\"h-8 px-3 flex items-center gap-2 rounded cursor-pointer hover:bg-[#ECEDEE] text-primary\" @click=\"handleLogout\">\n                  <div class=\"flex-center size-6\">\n                    <svg-icon name=\"quit\" size=\"14\"></svg-icon>\n                  </div>\n                  <span class=\"text-sm\">{{ $t('login.quit') }}</span>\n                </div>\n              </div>\n            </template>\n            <div class=\"flex items-center gap-1.5 cursor-pointer max-md:hidden\">\n              <el-image class=\"size-[26px] rounded-full\" :src=\"userStore.info.avatar\"></el-image>\n            </div>\n          </el-tooltip>\n          <el-button v-else type=\"primary\" @click=\"handleLogin\">{{ $t('action.login') }}</el-button>\n        </template>\n\n        <slot name=\"after_suffix\"></slot>\n      </div>\n    </div>\n\n    <Upgrade ref=\"upgrade_ref\" />\n  </header>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, onUnmounted, nextTick } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport { useI18n } from 'vue-i18n'\nimport HubUiX from 'hub-ui-x'\nimport { ArrowLeft } from '@element-plus/icons-vue'\n\nimport Upgrade from '@/components/Upgrade/index.vue'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\nimport { useGlobalStore } from '@/stores/modules/global'\n\nimport eventBus from '@/utils/event-bus'\n\nimport { EVENT_NAMES } from '@/constants/events'\n\nimport { ADMIN_URL } from '@/api/host'\n\nimport { checkPermission } from '@/utils/permission'\n\nwithDefaults(\n  defineProps<{\n    needLogin?: boolean\n    mainClass?: any\n    siderButton?: boolean\n    type?: 'homepage' | 'chat'\n    sticky?: boolean\n    hideUser?: boolean\n    back?: boolean\n  }>(),\n  {\n    needLogin: true,\n    mainClass: '',\n    siderButton: true,\n    back: true\n  }\n)\n\nconst { locale } = useI18n()\nconst userStore = useUserStore()\nconst globalStore = useGlobalStore()\nconst enterpriseStore = useEnterpriseStore()\n\nconst upgrade_ref = ref(null)\nconst upgrade_visible = ref(false)\n\nconst handleLogin = async () => {\n  await checkPermission()\n}\n\nconst handleJumpToAdmin = () => {\n  const url = `${ADMIN_URL}?access_token=${userStore.info.access_token}&eid=${userStore.info.eid}&from_origin=${encodeURIComponent(window.location.origin)}`\n  console.info('adminUrl: ', url)\n  window.open(url, '_blank')\n}\n\nconst handleLogout = () => {\n  userStore.logout()\n  ElMessage.success(window.$t('status.logout_success'))\n}\n\nconst validateUpgrade = async () => {\n  if (userStore.info.access_token) {\n    await nextTick()\n    if (upgrade_ref.value) upgrade_visible.value = await upgrade_ref.value.validateUpgrade()\n  }\n}\n\nconst updateLocal = (language) => {\n  locale.value = language\n  HubUiX.setLang(language)\n}\n\n// 初始化\nenterpriseStore.loadFromStorage().then((res) => {\n  updateLocal(res.language)\n})\nonMounted(async () => {\n  // 获取最新的企业信息\n  await enterpriseStore.loadInfo().then((res) => {\n    updateLocal(res.language)\n  })\n  await validateUpgrade()\n  eventBus.on(EVENT_NAMES.LOGIN_SUCCESS, validateUpgrade)\n\n  if (window.$chat53ai) {\n    window.$chat53ai.$on('agenthub:service', (_event, { type, data } = {}) => {\n      console.log(type, data)\n      if (type === 'login') {\n        handleLogin()\n      }\n    })\n  }\n})\n\nonUnmounted(() => {\n  eventBus.off(EVENT_NAMES.LOGIN_SUCCESS, validateUpgrade)\n})\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/layout/index.vue",
    "content": "<template>\n  <div class=\"h-full flex\">\n    <Sider v-if=\"showSidebar\"></Sider>\n    <main ref=\"mainRef\" class=\"flex-1 overflow-y-auto\">\n      <RouterView v-slot=\"{ Component, route }\">\n        <component :is=\"Component\" v-if=\"!route?.meta?.softCustom\" :key=\"route.path\" />\n        <!-- 软件模式下自定义页面 -->\n        <SoftCustom v-else></SoftCustom>\n      </RouterView>\n    </main>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, provide, watch } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\nimport { useAgentStore } from '@/stores/modules/agent'\n\nimport Sider from './sider.vue'\nimport SoftCustom from '@/views/custom/index.vue'\n\nconst mainRef = ref<HTMLElement>()\nconst route = useRoute()\nconst enterpriseStore = useEnterpriseStore()\nconst agentStore = useAgentStore()\n\nprovide('mainRef', mainRef)\n\nconst showSidebar = computed(() => {\n  const routes = ['Chat', 'Agent', 'Toolkit', 'Prompt', 'PromptDetail', 'Profile', 'Order']\n  return (routes.includes(route.name as string) && enterpriseStore.isSoftStyle) || route?.meta?.softCustom\n})\n\nwatch(\n  () => agentStore.boxHeight,\n  (newHeight) => {\n    mainRef.value.scrollTop = newHeight\n  }\n)\n\nonMounted(() => {})\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/layout/m-footer.vue",
    "content": "<template>\n  <template v-if=\"enterpriseStore.isSoftStyle\">\n    <div\n      v-if=\"enterpriseStore.copyright.toLowerCase() !== 'true'\"\n      class=\"w-full flex justify-center items-center gap-1.5 text-xs text-placeholder my-4\"\n    >\n      <span>本网站由</span>\n      <img :src=\"$getPublicPath(`/images/53ai-hub-v2.png`)\" class=\"flex-none w-[72px] object-cover\" />\n      <span>提供技术支持</span>\n    </div>\n    <div v-else class=\"h-12\"></div>\n    <div v-if=\"fixed\" class=\"h-14 md:hidden\"></div>\n    <div class=\"bg-white flex items-center border-t md:hidden\" :class=\"{ 'fixed bottom-0 left-0 right-0 z-[9]': fixed }\">\n      <template v-for=\"item in footerList\" :key=\"item.text\">\n        <div class=\"flex-1 flex items-center justify-center\">\n          <router-link\n            :to=\"{ name: item.name }\"\n            class=\"h-14 px-2 flex flex-col items-center justify-center gap-1 cursor-pointer\"\n            :class=\"[$route.name === item.name || $route.meta.parentName == item.name ? 'text-theme' : 'text-primary']\"\n          >\n            <svg-icon size=\"18\" :name=\"item.icon\" :stroke=\"item.stroke\"></svg-icon>\n            <p class=\"text-sm leading-none max-w-[100px] truncate\">{{ item.title || $t(item.text) }}</p>\n          </router-link>\n        </div>\n      </template>\n    </div>\n  </template>\n\n  <template v-else>\n    <div v-if=\"enterpriseStore.copyright.toLowerCase() !== 'true'\" class=\"mt-auto relative py-8 md:py-10 lg:py-12 page-footer-bg page-footer-text\">\n      <!-- <div  class=\"w-11/12 lg:w-4/5 mx-auto\">\n        <div class=\"grid grid-cols-2 md:grid-cols-3 lg:flex gap-6 md:gap-4\">\n          <div class=\"flex-1\">\n            <h4 class=\"text-lg md:text-xl font-medium mb-3 md:mb-4\">产品服务</h4>\n            <ul class=\"space-y-2 text-sm md:text-base text-white text-opacity-50\">\n              <li><a href=\"/product/work-ai\">工作AI</a></li>\n              <li><a href=\"/product/life-ai\">生活AI</a></li>\n              <li><a href=\"/product/enterprise-ai\">企业AI</a></li>\n              <li><a href=\"/product/custom-model\">大模型定制</a></li>\n              <li><a href=\"/product/magic-workshop\">魔法工坊</a></li>\n            </ul>\n          </div>\n          <div class=\"flex-1\">\n            <h4 class=\"text-lg md:text-xl font-medium mb-3 md:mb-4\">解决方案</h4>\n            <ul class=\"space-y-2 text-sm md:text-base text-white text-opacity-50\">\n              <li><a href=\"/solution/application\">【应用场景】解决方案</a></li>\n              <li><a href=\"/solution/function\">【功能场景】解决方案</a></li>\n              <li><a href=\"/solution/industry\">【行业场景】解决方案</a></li>\n            </ul>\n          </div>\n          <div class=\"flex-1\">\n            <h4 class=\"text-lg md:text-xl font-medium mb-3 md:mb-4\">AI知识库</h4>\n            <ul class=\"space-y-2 text-sm md:text-base text-white text-opacity-50\">\n              <li><a href=\"/knowledge/technology\">前沿技术</a></li>\n              <li><a href=\"/knowledge/application\">应用场景</a></li>\n              <li><a href=\"/knowledge/product\">产品世界</a></li>\n              <li><a href=\"/knowledge/practice\">企业实践</a></li>\n            </ul>\n          </div>\n          <div class=\"flex-1\">\n            <h4 class=\"text-lg md:text-xl font-medium mb-3 md:mb-4\">AI百宝箱</h4>\n            <ul class=\"space-y-2 text-sm md:text-base text-white text-opacity-50\">\n              <li><a href=\"/download/windows\">Windows版本</a></li>\n              <li><a href=\"/download/mac\">Mac OS版本</a></li>\n              <li><a href=\"/download/mobile\">移动版本</a></li>\n            </ul>\n          </div>\n          <div class=\"flex-1\">\n            <h4 class=\"text-lg md:text-xl font-medium mb-3 md:mb-4\">关于我们</h4>\n            <ul class=\"space-y-2 text-sm md:text-base text-white text-opacity-50\">\n              <li><a href=\"/about/company\">公司介绍</a></li>\n              <li><a href=\"/about/contact\">联系合作</a></li>\n            </ul>\n          </div>\n        </div>\n      </div>\n      <div  class=\"border-t border-dashed border-white border-opacity-10 my-6 md:my-8 lg:my-10\"></div> -->\n      <div class=\"w-11/12 lg:w-4/5 mx-auto flex flex-col md:flex-row items-center\">\n        <div class=\"flex-1 w-full md:w-auto mb-6 md:mb-0\">\n          <div v-if=\"false\" class=\"flex flex-col md:flex-row md:items-center mb-4\">\n            <span class=\"text-base text-white mb-2 md:mb-0\">友情链接：</span>\n            <div class=\"flex flex-wrap gap-3 md:space-x-4 text-sm md:text-base text-white text-opacity-50\">\n              <a href=\"/legal/statement\">法律声明</a>\n              <a href=\"/legal/privacy\">隐私政策</a>\n              <a href=\"/community/blackroom\">小黑屋</a>\n              <a href=\"/partner/recruit\">代理招募</a>\n            </div>\n          </div>\n\n          <!-- 版权信息 -->\n          <!-- <div class=\"text-sm md:text-base\">\n            {{ enterpriseStore.copyright }}\n            Copyright © 2012-{{ new Date().getFullYear() }} 深圳市某某科技有限公司 粤ICP备12345678号\n          </div> -->\n\n          <!-- 地址信息 -->\n          <div v-if=\"false\" class=\"mt-4 text-sm md:text-base text-white text-opacity-50 space-y-2\">\n            <p>广州：广州市科学城科学大道科学大学科技园B栋5楼 联系电话：020-1234-5678</p>\n            <p>深圳：深圳市南山区某某大厦1234室 联系电话：0755-1234-5678</p>\n            <p>上海：上海市某某区某某路1234号 联系电话：021-1234-5678</p>\n          </div>\n        </div>\n        <div v-if=\"false\" class=\"text-center\">\n          <img alt=\"企业AI专家微信公众号二维码\" title=\"扫码关注公众号\" class=\"size-24 md:size-28 mx-auto mb-2\" />\n          <p class=\"text-sm md:text-base text-white text-opacity-50\">微信扫码</p>\n          <p class=\"text-sm md:text-base text-white text-opacity-50\">和创始人交个朋友</p>\n        </div>\n      </div>\n      <div class=\"w-full flex justify-center items-center gap-1.5 text-xs absolute top-1/2 -translate-y-1/2 left-0 right-0\">\n        <span>本网站由</span>\n        <img :src=\"$getPublicPath(`/images/53ai-hub.png`)\" class=\"flex-none w-[72px] object-cover\" />\n        <span>提供技术支持</span>\n      </div>\n    </div>\n  </template>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useNavigationStore } from '@/stores/modules/navigation'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\n\nconst navigationStore = useNavigationStore()\n\nconst enterpriseStore = useEnterpriseStore()\n\n// 移动端底部导航栏\nconst footerList = ref([\n  {\n    name: 'Agent',\n    text: 'module.agent',\n    title: '',\n    icon: 'app',\n    stroke: true\n  },\n  {\n    name: 'Prompt',\n    text: 'module.prompt',\n    title: '',\n    icon: 'prompt',\n    stroke: true\n  },\n  {\n    name: 'Toolkit',\n    text: 'module.toolbox',\n    title: '',\n    icon: 'toolkit',\n    stroke: true\n  }\n])\n\nonMounted(async () => {\n  // await navigationStore.fetchNavigations()\n  footerList.value[0].title = navigationStore.agentNavigation.name || ''\n  footerList.value[1].title = navigationStore.promptNavigation.name || ''\n  footerList.value[2].title = navigationStore.toolkitNavigation.name || ''\n})\n\nwithDefaults(\n  defineProps<{\n    fixed?: boolean\n  }>(),\n  {\n    fixed: true\n  }\n)\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/layout/sider.vue",
    "content": "<template>\n  <div\n    v-if=\"!globalStore.siderVisible && !globalStore.siderCollapsed && !globalStore.isMdScreen\"\n    class=\"w-4 h-full absolute left-0 top-0 z-[3] hover:bg-gray-100/50 transition-colors\"\n    @mouseenter=\"globalStore.hoverSider(true)\"\n  />\n  <div v-if=\"globalStore.isMdScreen && globalStore.siderCollapsed\" class=\"absolute top-0 left-0 w-full h-full z-[10] bg-black/60\"></div>\n  <div\n    ref=\"siderRef\"\n    class=\"w-[280px] border-r flex flex-col bg-[#fff] transition-all duration-300 ease-linear md:bg-[#FAFAFA]\"\n    :class=\"[\n      {\n        'absolute z-[11] left-0 -translate-x-full shadow-xl rounded-r': !globalStore.siderVisible,\n        'translate-x-0': !globalStore.siderVisible && globalStore.siderCollapsed,\n        'top-0 bottom-0': globalStore.isMdScreen\n      },\n      globalStore.isMdScreen ? 'top-0 bottom-0' : 'top-20 bottom-5'\n    ]\"\n    @mouseleave=\"globalStore.hoverSider(false)\"\n  >\n    <div class=\"px-3 h-[70px] flex items-center gap-2\">\n      <router-link :to=\"{ name: 'Home' }\">\n        <img class=\"size-8 rounded\" :src=\"enterpriseStore.logo\" alt=\"企业Logo\" />\n      </router-link>\n      <router-link :to=\"{ name: 'Home' }\" class=\"flex-1 text-base text-primary truncate\">{{ enterpriseStore.display_name }}</router-link>\n\n      <div\n        v-tooltip=\"{\n          content: globalStore.siderVisible ? $t('chat.collapse_side_bar') : $t('chat.expand_side_bar')\n        }\"\n        class=\"flex-none size-7 rounded-md flex-center cursor-pointer hover:bg-[#ECEDEE]\"\n        @click=\"globalStore.toggleSider\"\n      >\n        <svg-icon name=\"layout-left\" size=\"20\" color=\"#9A9A9A\"></svg-icon>\n      </div>\n    </div>\n    <div class=\"border-b mx-2\"></div>\n    <div class=\"flex-1 py-3 overflow-y-auto\">\n      <div class=\"px-5 pb-2\">\n        <el-input\n          v-model=\"state.keyword\"\n          class=\"el-input--main\"\n          :placeholder=\"$t('action.search')\"\n          :prefix-icon=\"Search\"\n          style=\"--el-input-inner-height: 36px; --el-input-border-color: none\"\n          clearable\n        ></el-input>\n      </div>\n      <div v-if=\"state.keyword\" class=\"px-5\">\n        <template v-if=\"searchUsualAgents.length\">\n          <div class=\"h-9 flex items-center gap-2\">\n            <div class=\"text-sm text-[#939499]\">\n              {{ $t('module.chat') }}\n            </div>\n            <div class=\"flex-1 h-px bg-[#E6E8EB]\"></div>\n          </div>\n\n          <div class=\"flex flex-col gap-1\">\n            <template v-for=\"item in searchUsualAgents\" :key=\"item.agent_id\">\n              <div\n                class=\"h-9 px-6 flex items-center gap-2 rounded cursor-pointer text-[#4F5052] hover:bg-[#ECEDEE]\"\n                @click=\"convStore.setCurrentState(item.agent_id, 0)\"\n              >\n                <el-image class=\"flex-none size-6 rounded-full\" :src=\"item.logo\"></el-image>\n                <div class=\"flex-1 text-sm truncate\" v-html=\"item.formt_name\"></div>\n              </div>\n            </template>\n          </div>\n        </template>\n        <template v-if=\"searchAgents.length\">\n          <div class=\"h-9 flex items-center gap-2\">\n            <div class=\"text-sm text-[#939499] max-w-[100px] truncate\">\n              {{ $t('module.agent') }}\n            </div>\n            <div class=\"flex-1 h-px bg-[#E6E8EB]\"></div>\n          </div>\n\n          <div class=\"flex flex-col gap-1\">\n            <template v-for=\"item in searchAgents\" :key=\"item.agent_id\">\n              <div\n                class=\"h-9 px-6 flex items-center gap-2 rounded cursor-pointer text-[#4F5052] hover:bg-[#ECEDEE]\"\n                @click=\"\n                  () => {\n                    convStore.pushUsualAgent(item), convStore.setCurrentState(item.agent_id, 0)\n                  }\n                \"\n              >\n                <el-image class=\"flex-none size-6 rounded-full\" :src=\"item.logo\"></el-image>\n                <div class=\"flex-1 text-sm truncate\" v-html=\"item.formt_name\"></div>\n              </div>\n            </template>\n          </div>\n        </template>\n        <template v-if=\"searchToolBox.length\">\n          <div class=\"h-9 flex items-center gap-2\">\n            <div class=\"text-sm text-[#939499] max-w-[100px] truncate\">\n              {{ navigationStore.toolkitNavigation.name || $t('module.toolbox') }}\n            </div>\n            <div class=\"flex-1 h-px bg-[#E6E8EB]\"></div>\n          </div>\n\n          <div class=\"flex flex-col gap-1\">\n            <template v-for=\"item in searchToolBox\" :key=\"item.agent_id\">\n              <a :href=\"item.url\" target=\"_blank\" class=\"h-9 px-6 flex items-center gap-2 rounded cursor-pointer text-[#4F5052] hover:bg-[#ECEDEE]\">\n                <el-image class=\"flex-none size-6 rounded-full\" :src=\"item.logo\"></el-image>\n                <div class=\"flex-1 text-sm truncate\" v-html=\"item.name\"></div>\n              </a>\n            </template>\n          </div>\n        </template>\n        <template v-if=\"searchHistory.length\">\n          <div class=\"h-9 flex items-center gap-2\">\n            <div class=\"text-sm text-[#939499]\">\n              {{ $t('chat.history') }}\n            </div>\n            <div class=\"flex-1 h-px bg-[#E6E8EB]\"></div>\n          </div>\n\n          <div class=\"flex flex-col gap-1\">\n            <template v-for=\"item in searchHistory\" :key=\"item.agent_id\">\n              <div\n                class=\"h-9 px-3 rounded-md flex items-center gap-2 mt-0.5 group cursor-pointer hover:bg-[#ECEDEE] overflow-hidden\"\n                @click=\"convStore.setCurrentState(item.agent_id, item.conversation_id)\"\n              >\n                <span class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{ item.title }}</span>\n              </div>\n            </template>\n          </div>\n        </template>\n      </div>\n\n      <div v-show=\"!state.keyword\">\n        <div v-if=\"userStore.is_login\" class=\"px-2\">\n          <div\n            class=\"h-9 px-2 rounded-md flex items-center gap-0.5 cursor-pointer text-primary hover:bg-[#ECEDEE]\"\n            @click=\"state.showUsualAgents = !state.showUsualAgents\"\n          >\n            <div class=\"size-7 flex-center\">\n              <svg-icon size=\"18\" name=\"chat\"></svg-icon>\n            </div>\n            <p class=\"flex-1 text-base\">{{ $t('module.chat') }}</p>\n\n            <el-icon>\n              <ArrowUp v-if=\"state.showUsualAgents\" />\n              <ArrowDown v-else />\n            </el-icon>\n          </div>\n        </div>\n        <div v-show=\"state.showUsualAgents && userStore.is_login\" class=\"px-3\">\n          <transition-group name=\"list\" tag=\"div\" class=\"flex flex-col gap-1 mt-2\">\n            <template v-for=\"item in usualAgents\" :key=\"item.agent_id\">\n              <div\n                class=\"h-9 pl-6 pr-2 rounded-md flex items-center gap-2 cursor-pointer hover:bg-[#ECEDEE] group text-[#4F5052]\"\n                :class=\"[currentAgent.agent_id === item.agent_id && !currentConv.conversation_id ? 'bg-[#ECEDEE] ' : '']\"\n                @click=\"convStore.setCurrentState(item.agent_id, 0)\"\n              >\n                <el-image class=\"flex-none size-6 rounded\" :src=\"item.logo\"></el-image>\n                <div class=\"flex-1 text-sm truncate\">\n                  {{ item.name }}\n                </div>\n\n                <div\n                  v-show=\"!state.sidebarCollapsed\"\n                  v-tooltip=\"{ content: item.is_fixed ? $t('action.unfixed') : $t('action.fixed') }\"\n                  class=\"size-7 flex-center\"\n                  @click.stop=\"convStore.toggleUsualAgentFixed(item)\"\n                >\n                  <svg-icon v-if=\"item.is_fixed\" name=\"top\" color=\"#2563EB\"></svg-icon>\n                  <svg-icon v-else name=\"top\" color=\"#4F5052\" class=\"invisible group-hover:visible\"></svg-icon>\n                </div>\n              </div>\n            </template>\n          </transition-group>\n          <div\n            v-if=\"convStore.usual_agents.length > SHOW_USUAL_AGENT_LEN\"\n            class=\"flex items-center gap-1 mt-3.5 ml-5 cursor-pointer text-[#9A9A9A]\"\n            @click=\"toggleAgent\"\n          >\n            <span v-show=\"!state.sidebarCollapsed\" class=\"text-sm\">{{ state.agentCollapsed ? $t('action.collapse') : $t('action.expand') }}</span>\n            <el-icon>\n              <ArrowUp v-if=\"state.agentCollapsed\" />\n              <ArrowDown v-else />\n            </el-icon>\n          </div>\n        </div>\n        <div class=\"flex flex-col px-2 max-md:hidden\">\n          <template v-for=\"(item, index) in navigationStore.navigations\" :key=\"index\">\n            <!-- 首页隐藏 -->\n            <router-link\n              v-if=\"item.type !== NAVIGATION_TYPE.EXTERNAL && item.jump_path !== '/index'\"\n              :to=\"{ path: item.jump_path }\"\n              class=\"h-9 px-2 rounded-md flex items-center gap-0.5 mt-1.5 cursor-pointer text-[#4F5052] hover:bg-[#ECEDEE]\"\n              :class=\"[route.path === item.jump_path ? 'bg-[#ECEDEE]' : '']\"\n            >\n              <div class=\"size-7 flex-center\">\n                <!-- <svg-icon size=\"18\" :name=\"item.icon || 'app'\" stroke></svg-icon> -->\n                <img class=\"icon-img\" :src=\"item.icon\" />\n              </div>\n              <p class=\"flex-1 text-base text-[#000000] truncate\">\n                {{ item.name }}\n              </p>\n            </router-link>\n\n            <a\n              v-else-if=\"item.jump_path !== '/index'\"\n              :href=\"item.jump_path\"\n              :target=\"item.target === NAVIGATION_TARGET.BLANK ? '_blank' : '_self'\"\n              rel=\"noopener noreferrer\"\n              class=\"h-9 px-2 rounded-md flex items-center gap-0.5 mt-1.5 cursor-pointer text-[#4F5052] hover:bg-[#ECEDEE]\"\n            >\n              <div class=\"size-7 flex-center\">\n                <!-- <svg-icon size=\"18\" :name=\"item.icon || 'app'\" stroke></svg-icon> -->\n                <img class=\"icon-img\" :src=\"item.icon\" />\n              </div>\n              <p class=\"flex-1 text-base text-[#000000] truncate\">\n                {{ item.name }}\n              </p>\n            </a>\n          </template>\n          <div\n            v-if=\"$isElectron\"\n            href=\"http://ziroom.hub.53ai.com/space\"\n            target=\"_blank\"\n            class=\"h-9 px-2 rounded-md flex items-center gap-0.5 cursor-pointer text-[#4F5052] hover:bg-[#ECEDEE]\"\n            @click=\"handleJumpToLibrary\"\n          >\n            <div class=\"size-7 flex-center\">\n              <svg-icon size=\"18\" name=\"tips\"></svg-icon>\n            </div>\n            <p class=\"flex-1 text-base text-[#000000]\">{{ $t('module.library') }}</p>\n          </div>\n        </div>\n        <template v-if=\"userStore.is_login\">\n          <div class=\"mx-2 border-t mt-1.5\"></div>\n          <!-- 历史对话 -->\n          <div class=\"px-2 mt-1.5\">\n            <div\n              class=\"h-9 px-2 rounded-md flex items-center gap-0.5 cursor-pointer text-primary hover:bg-[#ECEDEE]\"\n              @click=\"state.showHistory = !state.showHistory\"\n            >\n              <div class=\"size-7 flex-center\">\n                <svg-icon size=\"18\" name=\"history\"></svg-icon>\n              </div>\n              <p class=\"flex-1 text-base\">{{ $t('chat.history') }}</p>\n              <el-icon>\n                <ArrowUp v-if=\"state.showHistory\" />\n                <ArrowDown v-else />\n              </el-icon>\n            </div>\n          </div>\n        </template>\n        <div v-show=\"state.showHistory\" class=\"px-3\">\n          <div v-if=\"state.isLoadingConv\" class=\"flex-center mt-2\">\n            <el-icon class=\"animate-spin\">\n              <Loading></Loading>\n            </el-icon>\n          </div>\n          <template v-for=\"conv in groupedConversations\" :key=\"conv.key\">\n            <template v-if=\"conv.list.length\">\n              <div class=\"h-[30px] pl-6 pr-2 flex items-center text-xs text-[#9A9A9A] mb-1\">\n                {{ $t(conv.key) }}\n              </div>\n              <template v-for=\"item in conv.list\" :key=\"item.conversation_id\">\n                <div\n                  class=\"h-9 pl-6 pr-2 rounded-md flex items-center gap-2 mt-0.5 group cursor-pointer hover:bg-[#ECEDEE] overflow-hidden\"\n                  :class=\"[currentConv.conversation_id === item.conversation_id ? 'bg-[#F1F2F3]' : '']\"\n                  @click=\"convStore.setCurrentState(item.agent_id, item.conversation_id)\"\n                >\n                  <span class=\"flex-1 text-sm text-[#1D1E1F] truncate\">{{ item.title }}</span>\n                  <el-dropdown @command=\"handleCommandConv($event, item)\">\n                    <div class=\"size-7 flex-center cursor-pointer invisible group-hover:visible max-md:visible\" @click.stop>\n                      <el-icon size=\"14\">\n                        <MoreFilled />\n                      </el-icon>\n                    </div>\n                    <template #dropdown>\n                      <el-dropdown-menu>\n                        <el-dropdown-item command=\"edit\">\n                          <svg-icon name=\"edit\" class=\"mr-1\"></svg-icon>\n                          {{ $t('action.rename') }}\n                        </el-dropdown-item>\n                        <el-dropdown-item command=\"del\">\n                          <span class=\"text-[#FA5151] flex-center\">\n                            <svg-icon name=\"del\" class=\"mr-1\"></svg-icon>\n                            {{ $t('action.del') }}\n                          </span>\n                        </el-dropdown-item>\n                      </el-dropdown-menu>\n                    </template>\n                  </el-dropdown>\n                </div>\n              </template>\n            </template>\n          </template>\n\n          <div\n            v-if=\"convStore.conversations.length > 5 && !state.expandHistory\"\n            class=\"h-9 pl-6 pr-2 flex items-center text-sm text-[#9A9A9A] mb-1 cursor-pointer\"\n            @click=\"state.expandHistory = !state.expandHistory\"\n          >\n            {{ $t('action.view_more') }}\n          </div>\n        </div>\n      </div>\n    </div>\n    <div v-if=\"userStore.is_login\" class=\"h-14 px-4 flex items-center gap-2 border-t border-b md:hidden\" @click=\"handleJumpToProfile\">\n      <el-image class=\"flex-none size-6\" :src=\"userStore.info.avatar\" :alt=\"userStore.info.nickname\"></el-image>\n      <div class=\"flex-1 flex items-center overflow-hidden\">\n        <p class=\"text-sm text-primary font-medium truncate\">{{ userStore.info.nickname }}</p>\n        <div\n          v-if=\"!userStore.info.is_internal\"\n          class=\"flex-none h-6 flex-center gap-1 bg-[#F7F7F7] rounded-full px-2 text-xs text-placeholder whitespace-nowrap\"\n          :title=\"userStore.info.group_name\"\n          @click.stop=\"upgradeRef.open\"\n        >\n          <img\n            :src=\"\n              !/\\.png$/.test(userStore.info.group_icon)\n                ? $getPublicPath(`/images/subscription/${userStore.info.group_icon}.png`)\n                : userStore.info.group_icon\n            \"\n            class=\"w-4 h-4 object-cover\"\n            alt=\"用户组图标\"\n          />\n          <p class=\"max-w-[5em] truncate\">{{ userStore.info.group_name }}</p>\n        </div>\n      </div>\n      <el-icon size=\"14\" color=\"#939499\">\n        <ArrowRight />\n      </el-icon>\n    </div>\n  </div>\n\n  <el-dialog v-model=\"state.editVisible\" :title=\"$t('chat.edit_conversation')\" width=\"480\">\n    <el-input v-model=\"convForm.title\" v-trim size=\"large\" :placeholder=\"$t('form.input_placeholder')\"></el-input>\n\n    <template #footer>\n      <el-button @click=\"state.editVisible = false\">{{ $t('action.cancel') }}</el-button>\n      <el-button v-debounce type=\"primary\" :disabled=\"!convForm.title.trim()\" @click=\"handleEditConv\">{{ $t('action.confirm') }}</el-button>\n    </template>\n  </el-dialog>\n\n  <Upgrade ref=\"upgradeRef\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, onMounted, onUnmounted, computed, ref, nextTick, watchEffect } from 'vue'\nimport { ArrowUp, ArrowDown, Search, ArrowRight, MoreFilled, Loading } from '@element-plus/icons-vue'\nimport { useRoute } from 'vue-router'\nimport { onClickOutside } from '@vueuse/core'\nimport { router } from '@/router'\n\nimport Upgrade from '@/components/Upgrade/index.vue'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport { useAgentStore } from '@/stores/modules/agent'\nimport { useGlobalStore } from '@/stores/modules/global'\nimport { useConversationStore } from '@/stores/modules/conversation'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\nimport { useLinksStore } from '@/stores/modules/links'\nimport { useNavigationStore } from '@/stores/modules/navigation'\nimport { NAVIGATION_TYPE, NAVIGATION_TARGET } from '@/constants/navigation'\n\nimport { EVENT_NAMES } from '@/constants/events'\nimport eventBus from '@/utils/event-bus'\n\nconst route = useRoute()\n\nconst userStore = useUserStore()\nconst agentStore = useAgentStore()\nconst globalStore = useGlobalStore()\nconst linksStore = useLinksStore()\nconst convStore = useConversationStore()\nconst enterpriseStore = useEnterpriseStore()\nconst navigationStore = useNavigationStore()\nconst SHOW_USUAL_AGENT_LEN = 4\n\nconst siderRef = ref()\nconst upgradeRef = ref()\n\nconst userGroups = userStore.info.group_ids || []\n\nconst state = reactive({\n  keyword: '',\n  sidebarCollapsed: false,\n  agentCollapsed: false,\n  showUsualAgents: true,\n  showConversations: true,\n  editVisible: false,\n  showHistory: false,\n  expandHistory: false,\n  isLoadingConv: true\n})\n\nconst convForm = reactive({\n  conversation_id: 0,\n  title: ''\n})\n\nconst usualAgents = computed(() => {\n  const filterList = convStore.usual_agents.filter((item) => item.user_group_ids.length > 0)\n  const agents = state.agentCollapsed ? filterList : filterList.slice(0, SHOW_USUAL_AGENT_LEN)\n  return agents\n})\nconst currentAgent = computed(() => convStore.currentAgent)\nconst currentConv = computed(() => convStore.currentConversation)\nconst searchUsualAgents = computed(() => {\n  if (!state.keyword) return []\n  return convStore.usual_agents\n    .filter((agent) => agent.name.toLowerCase().includes(state.keyword.toLowerCase()))\n    .map((item) => {\n      return {\n        ...item,\n        formt_name: item.name.replace(new RegExp(state.keyword, 'g'), `<span class=\"text-theme\">${state.keyword}</span>`)\n      }\n    })\n})\nconst searchAgents = computed(() => {\n  if (!state.keyword) return []\n  return agentStore.agentList\n    .filter((item) => {\n      const keywordMatch = item.name.toLowerCase().includes(state.keyword.toLowerCase())\n      const hasCommonGroup = item.user_group_ids?.some((groupId) => userGroups.includes(groupId))\n      return keywordMatch && hasCommonGroup\n    })\n    .map((item) => {\n      return {\n        ...item,\n        formt_name: item.name.replace(new RegExp(state.keyword, 'g'), `<span class=\"text-theme\">${state.keyword}</span>`)\n      }\n    })\n})\nconst searchToolBox = computed(() => {\n  if (!state.keyword) return []\n  return linksStore.links\n    .filter((item) => {\n      const keywordMatch = item.name.toLowerCase().includes(state.keyword.toLowerCase())\n      const hasCommonGroup = item.user_group_ids?.some((groupId) => userGroups.includes(groupId))\n      return keywordMatch && hasCommonGroup\n    })\n    .map((item) => {\n      return {\n        ...item,\n        name: item.name.replace(new RegExp(state.keyword, 'g'), `<span class=\"text-theme\">${state.keyword}</span>`)\n      }\n    })\n})\nconst searchHistory = computed(() => {\n  if (!state.keyword) return []\n  return convStore.conversations\n    .filter((item) => item.title.toLowerCase().includes(state.keyword.toLowerCase()))\n    .map((item) => {\n      return {\n        ...item,\n        name: item.title.replace(new RegExp(state.keyword, 'g'), `<span class=\"text-theme\">${state.keyword}</span>`)\n      }\n    })\n})\n// 添加对话分组逻辑\nconst groupedConversations = computed(() => {\n  const today = new Date()\n  today.setHours(0, 0, 0, 0)\n\n  const yesterday = new Date(today)\n  yesterday.setDate(yesterday.getDate() - 1)\n\n  const lastWeekStart = new Date(today)\n  lastWeekStart.setDate(lastWeekStart.getDate() - 7)\n\n  const historyList = state.expandHistory ? convStore.conversations : convStore.conversations.slice(0, 5)\n\n  return [\n    {\n      key: 'time.today',\n      list: historyList.filter((conv) => {\n        const convDate = new Date(conv.updated_time)\n        return convDate >= today\n      })\n    },\n    {\n      key: 'time.yesterday',\n      list: historyList.filter((conv) => {\n        const convDate = new Date(conv.updated_time)\n        return convDate >= yesterday && convDate < today\n      })\n    },\n    {\n      key: 'time.week_last',\n      list: historyList.filter((conv) => {\n        const convDate = new Date(conv.updated_time)\n        return convDate >= lastWeekStart && convDate < yesterday\n      })\n    },\n    {\n      key: 'time.week_ago',\n      list: historyList.filter((conv) => {\n        const convDate = new Date(conv.updated_time)\n        return convDate < lastWeekStart\n      })\n    }\n  ]\n})\n\n// 点击外部区域关闭侧边栏\nonClickOutside(siderRef, () => {\n  if (!globalStore.siderVisible && globalStore.siderCollapsed) globalStore.siderCollapsed = false\n})\n\nwatchEffect(() => {\n  globalStore.siderVisible = !globalStore.isMdScreen\n})\n\nconst toggleAgent = () => {\n  state.agentCollapsed = !state.agentCollapsed\n}\n\nconst handleEditConv = () => {\n  return convStore.editConversation(convForm).then(() => {\n    state.editVisible = false\n  })\n}\nconst delConversation = async (conv: Conversation.Info) => {\n  await ElMessageBox.confirm(window.$t('chat.conversation_confirm_delete'), window.$t('action.del'), {\n    confirmButtonText: window.$t('action.del'),\n    cancelButtonText: window.$t('action.cancel'),\n    type: 'warning'\n  })\n  convStore.delConversation(conv)\n}\nconst handleCommandConv = (event: string, conv: Conversation.Info) => {\n  if (event === 'del') {\n    delConversation(conv)\n  } else if (event === 'edit') {\n    convForm.conversation_id = conv.conversation_id\n    convForm.title = conv.title\n    state.editVisible = true\n  }\n}\n\nconst handleJumpToLibrary = () => {\n  if (window.$isElectron) {\n    window.$chat53ai.$win({\n      type: 'new-tab',\n      data: JSON.stringify({\n        title: 'AI知识库',\n        closable: true,\n        ability: false,\n        urls: ['http://ziroom.hub.53ai.com/space']\n      })\n    })\n  } else {\n    window.open('http://ziroom.hub.53ai.com/space', '_blank')\n  }\n}\n\nconst handleJumpToProfile = () => {\n  router.push({ name: 'Profile' })\n  globalStore.toggleSider()\n}\n\nconst loadConversations = () => {\n  state.isLoadingConv = true\n  convStore.loadConversations().finally(() => {\n    state.isLoadingConv = false\n  })\n}\n\nonMounted(async () => {\n  agentStore.loadCategorys()\n  // await navigationStore.fetchNavigations()\n  await agentStore.loadAgentList()\n  loadConversations()\n  eventBus.on(EVENT_NAMES.LOGIN_SUCCESS, () => {\n    loadConversations()\n  })\n  convStore.updateAgents(agentStore.agentList)\n  nextTick(() => {\n    linksStore.loadLinks()\n  })\n})\n\nonUnmounted(() => {\n  // 清理逻辑\n  convStore.clearCurrentState()\n})\n</script>\n\n<style scoped>\n.sidebar-transition {\n  transition: width 0.3s ease-in-out;\n}\n\n.list-move,\n.list-enter-active,\n.list-leave-active {\n  transition: all 0.3s ease;\n}\n\n.list-enter-from,\n.list-leave-to {\n  opacity: 0;\n  transform: translateY(-10px);\n}\n\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n  opacity: 0;\n}\n\n.icon-img {\n  width: 18px;\n  height: 18px;\n  margin-right: 4px;\n  transform: translateX(-60px);\n  filter: drop-shadow(#333333 60px 0);\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/locales/en.ts",
    "content": "export default {\n  // Module Navigation\n  module: {\n    index: 'Home',\n    toolbox: 'AI Toolbox',\n    tool: 'AI Toolbox',\n    agent: 'Agent',\n    chat: 'Chat',\n    app: 'App',\n    find: 'Discover',\n    library: 'Knowledge Base',\n    crop_space: 'Enterprise Space',\n    prompt: 'Prompt'\n  },\n\n  // Browser Related\n  browser: {\n    newTab: 'New Tab',\n    search_placeholder: 'Search in Baidu AI, or enter a URL',\n    knowledge_clean: 'Knowledge Cleaning',\n    load_error: 'Loading Failed',\n    reload: 'Reload',\n    not_logged_in: 'Not Logged In',\n    login: 'Login Now',\n    window_position: 'Window Position',\n    leftWindow: 'Left Small Window',\n    centerWindow: 'Center Large Window',\n    rightWindow: 'Right Small Window',\n    alwaysOnTop: 'Always On Top'\n  },\n\n  // Cleaning Features\n  clean: {\n    content: 'Content Extraction',\n    knowledge: 'Knowledge Organization',\n    summarize: 'Knowledge Extraction'\n  },\n\n  // Update Related\n  updater: {\n    newVersion: 'New version found, update now?',\n    newVersionTitle: 'Update Notification',\n    downloading: 'Downloading update',\n    completed: 'Update completed, restart now?',\n    completedTitle: 'Update Notification',\n    noUpdate: 'Current version is up to date',\n    currentVersion: 'Current version v{version}',\n    checkUpdate: 'Check for Updates'\n  },\n\n  // Common Text\n  common: {\n    new_friend: 'Beginner Guide',\n    help_feedback: 'Help & Feedback',\n    attach: 'Attachment',\n    screenshot: 'Screenshot',\n    title: 'Title',\n    desc: 'Description',\n    tip: 'Tip',\n    create_time: 'Creation Time',\n    update_time: 'Update Time',\n    recently_updated: 'Recently Updated',\n    loading: 'Loading',\n    // Load more\n    load_more: 'Load More',\n    load_new: 'Load New Messages',\n    no_data: 'No Data',\n    unknown: 'Unknown',\n    usual: 'Frequently Used',\n\n    render: 'Render',\n    preview: 'Preview',\n    code: 'Code',\n    split: 'Split Screen',\n    all: 'All',\n    recently_visit: 'Recently Visited',\n\n    confirm_delete: 'Are you sure you want to delete this item?',\n    copied: 'Copied',\n    image_cropper: 'Image Cropper',\n    back: 'Back',\n    go_admin: 'Go to Admin',\n    related_prompt: 'Related Prompts',\n    related_agent: 'Related Agents',\n    view_more: 'View More',\n    expand_more: 'Expand More',\n    collapse_more: 'Collapse More',\n    or: 'Or',\n    later: 'Later',\n    allow_to: 'Copied prompt content. Visit \"{name}\" site',\n    ai_generated: 'Content generated by AI,仅供参考',\n    back_home: 'Return to site homepage'\n  },\n\n  // Status Prompts\n  status: {\n    error: 'Error',\n    warning: 'Warning',\n    info: 'Information',\n    success: 'Success',\n    updated: 'Updated',\n    sent: 'Sent',\n    login_success: 'Logged In',\n    logout_success: 'Logged Out',\n    not_found_account: 'Account not found, please register first and then login',\n    existing_account: 'Account already exists',\n    approve_success: 'Liked',\n    approve_cancel: 'Unliked',\n    register_success: 'Registration successful',\n    update_success: 'Update successful',\n    copy_success: 'Copy successful',\n    copy_error: 'Copy failed'\n  },\n\n  // Action Buttons\n  action: {\n    login: 'Login',\n    login_directly: 'Login directly',\n    logout: 'Logout',\n    register: 'Register',\n    user_register: 'User registration',\n    forget_password: 'Forgot password?',\n    update_password: 'Update password',\n    search: 'Search',\n    setting: 'Settings',\n    confirm: 'Confirm',\n    cancel: 'Cancel',\n    close: 'Close',\n    open: 'Open',\n    ok: 'OK',\n    allow: 'Allow',\n    and: 'and',\n    copy: 'Copy',\n    upload: 'Upload',\n    download: 'Download',\n    del: 'Delete',\n    add: 'Add',\n    create: 'Create',\n    edit: 'Edit',\n    save: 'Save',\n    fixed: 'Pin',\n    unfixed: 'Unpin',\n    collapse: 'Collapse',\n    expand: 'Expand',\n    back: 'Back',\n    share: 'Share',\n    favorite: 'Favorite',\n    unfavorite: 'Unfavorite',\n    more: 'More',\n    refresh: 'Refresh',\n    apply: 'Apply',\n    reset: 'Reset',\n    submit: 'Submit',\n    manage: 'Manage',\n    rename: 'Rename',\n    find: 'Find',\n    preview: 'Preview',\n    reupload: 'Re-upload',\n    send: 'Send',\n    stop: 'Stop',\n    pay: 'Pay',\n    ok_v2: 'OK',\n    view_more: 'View More',\n    click_upload: 'Click Upload',\n    view: 'View',\n    delete: 'Delete',\n    select_all: 'Select All'\n  },\n\n  file: {\n    file_size: 'File size must be less than {size}MB',\n    file_format: 'Supported formats: {format}',\n    file_empty: 'File content cannot be empty',\n    file_exceed: 'File upload size cannot exceed {size}MB ({name} size exceeds)',\n    file_exceed_limit: 'Upload up to {limit} files'\n  },\n\n  // Form Related\n  form: {\n    icon: 'Icon',\n    name: 'Name',\n    desc: 'Description',\n    input_placeholder: 'Please enter',\n    select_placeholder: 'Please select',\n    icon_placeholder: 'For best display, please upload an image with a 1:1 aspect ratio',\n    required: 'Required',\n    optional: 'Optional',\n\n    // Knowledge Base Public Scope\n    library_view_scope: 'Knowledge Base Access Scope',\n    library_view_public: 'Public Access',\n    library_view_team: 'Team Space Members Access',\n    library_view_member: 'Knowledge Base Members Access',\n\n    avatar: 'Avatar',\n    nickname: 'Nickname',\n    select_verify: 'Please select verification method',\n    email_verify: 'Email Verification',\n    mobile_verify: 'Mobile Verification',\n    account: 'Account',\n    remark: 'Remark',\n    account_alias: 'Mobile',\n    password: 'Password',\n    password_placeholder: 'Please enter password',\n    email: 'Email',\n    new_email: 'New Email',\n    mobile: 'Mobile',\n    new_mobile: 'New Mobile',\n    verify_code: 'Verification Code',\n    get_verify_code: 'Get Verification Code',\n    verify_old_mobile: 'Verify your old phone number',\n    reset_password: 'Reset Password',\n    reset_password_method: 'Select a password reset method',\n    new_password: 'New Password',\n    new_password_placeholder: 'Please enter new password',\n    new_password_confirm: 'Confirm New Password',\n    new_password_confirm_placeholder: 'Please re-enter new password',\n    mobile_format: 'Please enter a valid mobile number',\n    email_format: 'Please enter a valid email',\n    account_format: 'Please enter a valid mobile or email',\n    verify_code_format: 'Please enter a valid verification code',\n    password_length: 'Password must be between 8-20 characters',\n    password_format: 'Password must contain uppercase, lowercase letters and numbers',\n    password_not_match: 'The two passwords do not match',\n    password_no_chinese: 'Password cannot contain Chinese characters',\n    change: 'Change',\n    existing_mobile: 'This mobile number has been registered. Please log in with this account.',\n    existing_email: 'This email has been registered. Please log in with this account.'\n  },\n\n  // Home Related\n  index: {\n    agent_recommend: 'Featured Agents',\n    agent_recommend_desc: 'Build your second productivity engine',\n    prompt_recommend: 'Featured Prompts',\n    prompt_recommend_desc: 'Use prompts well to always stay ahead',\n    toolbox_recommend: 'Featured AI Tools',\n    toolbox_recommend_desc: 'Select AI resources for your workflow, make AI your productivity tool',\n    use_history: '{count} people have chatted',\n    banner_title: '“{name} Expert” The secret weapon for efficiency',\n    banner_desc: 'Select AI resources for your workflow, make AI your productivity tool',\n    search_placeholder: 'Enter the AI resource you want to find',\n    hot_search: 'Hot Search'\n  },\n\n  // Login Related\n  login: {\n    agree: 'By logging in, you agree to',\n    terms_of_service: 'Terms and Conditions',\n    privacy_policy: 'Privacy Policy',\n    password_login: 'Password Login',\n    password_login_title: 'Password Login',\n    message_login: 'Message Login',\n    message_login_title: 'Message Login',\n    wechat_login: 'WeChat Login',\n    wechat_login_title: 'WeChat Login',\n    wecom_login: 'WeCom Login',\n    wecom_login_title: 'WeCom Login',\n    unregistered_account_desc:\n      'Unregistered accounts, please register first and then automatically login',\n    unregistered_account_confirm:\n      'Automatically log in after verifying the unregistered mobile phone number',\n    quit: 'Quit',\n    login_by_wechat: 'Use WeChat Login',\n    login_by_password: 'Use Password Login',\n    login_by_mobile: 'Use Mobile Login',\n    bind_mobile: 'Bind Mobile Number',\n    other_login_way: 'Other Login Way',\n    login_by_wecom: 'Use WeCom Login',\n    unbind_wechat_confirm_desc:\n      'After unbinding, you will not be able to log in with WeChat. Continue?',\n    unbind_wechat_confirm_title: 'Unbind WeChat Account Binding',\n    immediate_login: 'Immediate Login',\n    wecom_login_error:\n      'The enterprise wechat bound to the site is not the enterprise wechat currently logged in!\\nPlease use the correct enterprise wechat to log in.'\n  },\n\n  // Registration related\n  register: {\n    agree: 'By registering, you agree to',\n    terms_of_service: 'Terms of Service',\n    privacy_policy: 'Privacy Policy',\n    unregister: 'Unregister'\n  },\n\n  // Chat Related\n  chat: {\n    search_placholder: 'Search agents',\n    collapse_side_bar: 'Collapse Sidebar',\n    expand_side_bar: 'Expand Sidebar',\n    history: 'Conversation History',\n    new_conversation: 'New Conversation',\n    edit_conversation: 'Edit Conversation Name',\n\n    conversation_confirm_delete: 'After deletion, chat history cannot be recovered.',\n    input: 'Input',\n    output: 'Output',\n    start_generate: 'Start Generating',\n    regenerate: 'Regenerate',\n    like: 'Like',\n    dislike: 'Unlike',\n    input_placeholder: 'Send a message',\n    usage_guide: 'Usage Guide',\n    completion_empty_desc:\n      'Using AI large model to intelligently generate content, just input your requirements for one-click content creation',\n    usage_case: 'Use Cases',\n    usage_scene: 'Usage Scenarios',\n    online_search: 'Online Search',\n    completion_generating: 'Content generating, please wait...',\n    completion_rendering: 'Content rendering...',\n\n    // No available agents\n    no_available_agent: 'No available agents',\n\n    completion_completed: 'Deep thinking completed',\n    completion_thinking: 'Deep thinking...',\n    completion_scene: 'Related Scenes:',\n    completion_next_action: 'Related Scenarios: Next Action',\n\n    not_found_url: 'URL not found, please check if the agent is set correctly',\n    completion_share_link: 'Conversation link copied, share now~',\n    no_available_agent_desc: '很遗憾，你要访问的智能体已不存在，去看看其他有趣的智能体吧～'\n  },\n\n  // Knowledge Base Related\n  library: {\n    home: 'Home',\n    name: 'Knowledge Base',\n    create: 'Create Knowledge Base',\n    all_spaces: 'All Member Space',\n    space_name: 'Space Name',\n    chat: 'Knowledge Base Q&A',\n    file_count: '{count} files',\n    upload_file: 'Upload File',\n    manage: 'Manage Knowledge Base',\n    search: 'Search Knowledge Base',\n    all_libraries: 'All Knowledge Bases',\n    empty_desc:\n      'Create enterprise knowledge base, accumulate team knowledge, improve collaboration efficiency',\n\n    create_md: 'New Knowledge',\n    local_upload: 'Local Upload',\n    create_folder: 'New Folder',\n    tmpl_create: 'Template Creation',\n    github_import: 'Import from Github',\n    docs_qq_import: 'Import from Tencent Docs',\n    docs_feishu_import: 'Import from DingTalk Docs',\n    docs_dingtalk_import: 'Import from Feishu Docs'\n  },\n\n  agent: {\n    no_data: 'No data',\n    dialogue_type: 'Conversational',\n    applied_type: 'Applied',\n    failed_tip:\n      'Please check if the authorization key is available and if the balance is sufficient.'\n  },\n\n  prompt: {\n    default_sort: 'Default Sort',\n    likes_sort: 'Likes Sort',\n    views_sort: 'Views Sort',\n    content: 'Prompt Content',\n    auth_tip: 'You do not have permission to access this prompt',\n    let_use_prompt: '去使用这个提示词'\n  },\n\n  toolbox: {\n    // AI聚合问答\n    name: 'AI Aggregation',\n    title:\n      'Use AI large model to intelligently generate content, just input your requirements for one-click content creation',\n    input_placeholder: 'Send a message',\n    max_agent_count: 'You can only select {count} agents',\n    search_placeholder: 'Search website',\n    direct_access: 'Direct access',\n    click_access: 'Click to access',\n    account_access: 'Shared account',\n    account_text: 'The following are the shared account and password, for personal use only',\n    account_text2: 'You can copy the shared account password to access the target site'\n  },\n  // Space Related\n  space: {\n    create: 'Create Space',\n    join: 'Join Space',\n    manage: 'Manage Space',\n    member: 'Member Management',\n    settings: 'Space Settings',\n    space_usage: 'Used {used} / {total}',\n    expand: 'Expand Capacity'\n  },\n\n  // Time Related\n  time: {\n    just_now: 'Just now',\n    minutes_ago: '{count} minutes ago',\n    hours_ago: '{count} hours ago',\n    days_ago: '{count} days ago',\n    yesterday: 'Yesterday',\n    today: 'Today',\n    week_last: 'Within a week',\n    week_ago: 'A week ago'\n  },\n\n  profile: {\n    info: 'Personal Information',\n    profile: 'Profile',\n    change_password: 'Change Password',\n    login_password: 'Login Password',\n    bind_accounts: 'Account Information',\n    subscription_info: 'Subscription Information',\n    order_info: 'Order Information',\n    unbind_account: 'Not Bound',\n    bind_mobile: 'Mobile Number',\n    bind_email: 'Email',\n    bind_google: 'Google',\n    bind_wechat: 'WeChat',\n    bind: 'Bind',\n    unbind: 'Unbind',\n    change: 'Change',\n    logined_devices: 'Logged-in Devices',\n    used_devices: 'Previously Used Devices',\n    current_device: 'Current Device',\n    unbind_wechat_confirm_desc:\n      'After unbinding, you will not be able to log in with WeChat. Continue?',\n    unbind_wechat_confirm_title: 'Unbind WeChat Account Binding',\n    unbind_wechat_confirm_cancel: 'Cancel',\n    unbind_wechat_confirm_ok: 'Confirm',\n    renew: 'Renew',\n    expire_time_desc:\n      '{group_name} will expire in {day} days ({expire_time}), please renew to continue membership rights',\n    expired_time_desc:\n      '{group_name} has expired on {expire_time}, please renew to continue membership rights'\n  },\n  response_status: {\n    '400': 'Request parameter error',\n    '401': 'Unauthorized, please login',\n    '403': 'Access denied',\n    '404': 'Requested resource does not exist',\n    '500': 'Server error',\n    '502': 'Gateway error',\n    '504': 'Gateway timeout',\n    '503': 'Service unavailable'\n  },\n  response_code: {\n    success: 'Success',\n    param_error: 'Parameter error',\n    database_error: 'Database error',\n    network_error: 'Network error, please try again',\n    system_error: 'System error',\n    auth_error: 'Authentication error',\n    not_found_error: 'Not found error',\n    unauthorized_error: 'Authentication error',\n    file_error: 'File error',\n    forbidden_error: 'User is disabled, please contact the administrator',\n    agent_error: 'Agent error',\n    token_expired_error: 'Token expired error',\n    verification_code_error: 'Verification code error'\n  },\n  response_message: {\n    unknown_error: 'Unknown error',\n    user_not_found: 'User does not exist',\n    username_or_password_is_incorrect: 'Username or password is incorrect',\n    username_already_exists: 'Username already exists',\n    mobile_already_bind: 'The phone number has already been bound to another user',\n    email_already_bind: 'The email address is already bound to another user',\n    model_changed: 'The administrator has changed the model, please create a new conversation',\n    wechat_already_bind: 'WeChat account has been bound to another user'\n  },\n  subscription: {\n    free: 'Free',\n    upgrade: 'Upgrade',\n    version_title: 'Select Version',\n    time_title: 'Select Purchase Duration',\n    month: 'Month',\n    year: 'Year',\n    credit_month_amount: 'Monthly {amount} credits',\n    agent_bots_title: 'Available Agents',\n    ai_assistant_title: 'Cross-platform AI Assistant',\n    time_unit_month: 'One Month',\n    time_unit_year: 'One Year',\n    aside_title: 'New Order Purchase Details',\n    aside_desc: 'Purchase for the following users',\n    payment: 'Payment Method',\n    wechat_pay: 'WeChat Payment',\n    alipay: 'Alipay',\n    manual_pay: 'Manual Transfer',\n    paypal: 'PayPal',\n    total: 'Total',\n    order_title: 'Order Payment',\n    pay_amount: 'Payment Amount',\n    pay_by_wechat: 'Use WeChat QR Code to Pay',\n    pay_policy: 'Payment is deemed to agree to the relevant {policy}',\n    pay_success: 'Payment Successful',\n    pay_confirm: 'Confirm payment completion, please click',\n    payed: 'Paid',\n    manual_pay_success_title: 'Order Generated',\n    manual_pay_success_desc:\n      'Please wait or contact the administrator to confirm the payment information',\n    expire_time: 'Expire Time'\n  },\n  authority: {\n    group_not_permission: 'You do not have permission to access this group',\n    payment_not_setting:\n      'The site has not configured payment methods, please contact the administrator directly',\n    agent_not_permission:\n      'You do not have permission to use this agent, please contact the administrator directly',\n    login_not_permission: 'Please login first',\n    use_range: 'Use Range'\n  },\n  upgrade_dialog: {\n    title:\n      'The number of registered users of the site has reached the upper limit, please contact the administrator~~',\n    cancel: 'Close Registration'\n  },\n  order: {\n    id: 'Order ID',\n    subscription: 'Subscription Service',\n    amount: 'Order Amount',\n    pay_type: 'Payment Method',\n    create_time: 'Order Time',\n    status: 'Status',\n    action: 'Action',\n    search_placeholder: 'Please enter order ID',\n\n    payment: 'Payment',\n    cancel: 'Cancel',\n    cancel_confirm: 'Are you sure you want to cancel this order?',\n\n    status_list: {\n      all: 'All',\n      not_confirm: 'Not Confirm',\n      pending: 'Pending',\n      paid: 'Paid',\n      expired: 'Expired',\n      cancel: 'Canceled'\n    }\n  },\n  filter: {\n    start_time: 'Start Time',\n    end_time: 'End Time',\n\n    date_range: {\n      today: 'Today',\n      last_7_days: 'Last 7 Days',\n      last_4_weeks: 'Last 4 Weeks',\n      last_3_months: 'Last 3 Months',\n      last_12_months: 'Last 12 Months',\n      this_month: 'This Month',\n      this_quarter: 'This Quarter',\n      this_year: 'This Year',\n      all_time: 'All Time'\n    }\n  },\n  table: {\n    footer_text: 'Total {total} items'\n  },\n  guide: {\n    title: 'Welcome to 53AI Hub',\n    description:\n      'This is the initialization process. Please enter basic information (e.g., site details) to set up the system configuration.',\n    website_info: 'Site Information',\n    website_setting: 'Account Settings',\n    website_success: 'Installation Completed',\n    website_info_name: 'Site Name',\n    website_info_name_placeholder: 'Please enter the site name',\n    website_info_logo: 'Site Logo',\n    website_info_logo_placeholder: 'Please upload the logo',\n    website_info_logo_change: 'Change',\n    website_info_logo_upload: 'Upload',\n    website_info_logo_tip:\n      'Please upload a square logo with 1:1 aspect ratio (recommended size: 512×512px). Supported formats: PNG/JPG. File size must not exceed 2MB.',\n    website_style: 'Site Style',\n    website_info_language: 'Default Language',\n    website: 'Website Style',\n    software: 'Software Style',\n    init_success: 'Initialization Successful!',\n    jump_now: 'Jump Immediately',\n    jump_tip: 'Will automatically jump to the homepage in {count} seconds...',\n    next: 'Next Step',\n    init: 'Initialize',\n    confirm_password: 'Confirm Password',\n    confirm_password_placeholder: 'Please confirm your password again'\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/locales/index.ts",
    "content": "import { createI18n } from 'vue-i18n'\n\n// element-plus 中的语言配置\nimport elementEnLocale from 'element-plus/es/locale/lang/en'\nimport elementZhLocale from 'element-plus/es/locale/lang/zh-cn'\nimport elementZhTwLocale from 'element-plus/es/locale/lang/zh-tw'\nimport elementJaLocale from 'element-plus/es/locale/lang/ja'\n\n// 自己的语言配置\nimport zhLocale from './zh-cn'\nimport zhTwLocale from './zh-tw'\nimport enLocale from './en'\nimport jpLocale from './jp'\n\n// 语言配置整合\nconst messages = {\n  'zh-cn': {\n    ...zhLocale,\n    ...elementZhLocale\n  },\n  'zh-tw': {\n    ...zhTwLocale,\n    ...elementZhTwLocale\n  },\n  en: {\n    ...enLocale,\n    ...elementEnLocale\n  },\n  jp: {\n    ...jpLocale,\n    ...elementJaLocale\n  }\n}\n\n// 创建 i18n\nconst i18n = createI18n({\n  legacy: false,\n  fallbackLocale: 'zh-cn',\n  globalInjection: true, // 全局模式，可以直接使用 $t\n  locale: 'zh-cn',\n  messages\n})\n\n// 注册到全局，方便js上使用\nwindow.$t = i18n.global.t\nexport const setupI18n = (app) => {\n  app.use(i18n)\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/locales/jp.ts",
    "content": "export default {\n  // モジュールナビゲーション\n  module: {\n    index: 'ホーム',\n    toolbox: 'AIツール',\n    tool: 'AIツール',\n    agent: 'エージェント',\n    chat: 'チャット',\n    app: 'アプリ',\n    find: '発見',\n    library: 'ナレッジベース',\n    crop_space: '企業スペース',\n    prompt: 'プロンプト'\n  },\n\n  // ブラウザ関連\n  browser: {\n    newTab: '新しいタブ',\n    search_placeholder: 'Baidu AIで検索、またはURLを入力',\n    knowledge_clean: 'ナレッジクリーニング',\n    load_error: '読み込みに失敗しました',\n    reload: '再読み込み',\n    not_logged_in: 'ログインしていません',\n    login: '今すぐログイン',\n    window_position: 'ウィンドウ位置',\n    leftWindow: '左側小窓',\n    centerWindow: '中央大窓',\n    rightWindow: '右側小窓',\n    alwaysOnTop: 'ウィンドウを常に前面に表示'\n  },\n\n  // クリーニング機能\n  clean: {\n    content: 'コンテンツ抽出',\n    knowledge: 'ナレッジ整理',\n    summarize: 'ナレッジ抽出'\n  },\n\n  // アップデート関連\n  updater: {\n    newVersion: '新しいバージョンが見つかりました。今すぐ更新しますか？',\n    newVersionTitle: '更新通知',\n    downloading: '更新をダウンロード中',\n    completed: '更新が完了しました。今すぐ再起動しますか？',\n    completedTitle: '更新通知',\n    noUpdate: '現在最新バージョンです',\n    currentVersion: '現在のバージョン v{version}',\n    checkUpdate: '更新を確認'\n  },\n\n  // 一般テキスト\n  common: {\n    new_friend: '初心者ガイド',\n    help_feedback: 'ヘルプとフィードバック',\n    attach: '添付ファイル',\n    screenshot: 'スクリーンショット',\n    title: 'タイトル',\n    desc: '説明',\n    tip: 'ヒント',\n    create_time: '作成日時',\n    update_time: '更新日時',\n    recently_updated: '最近の更新',\n    loading: '読み込み中',\n    load_more: 'もっと読み込む',\n    load_new: '新しいメッセージを読み込む',\n    no_data: 'データがありません',\n    unknown: '不明',\n    usual: 'よく使う',\n\n    render: 'レンダリング',\n    preview: 'プレビュー',\n    code: 'コード',\n    split: '分割画面',\n    all: 'すべて',\n    recently_visit: '最近のアクセス',\n\n    confirm_delete: 'このアイテムを削除しますか？',\n    copied: 'コピーしました',\n    image_cropper: '画像トリミング',\n    back: '戻る',\n    go_admin: '管理画面に移動',\n    related_prompt: '関連プロンプト',\n    related_agent: '関連エージェント',\n    view_more: 'もっと見る',\n    expand_more: 'もっと見る',\n    collapse_more: 'もっと見る',\n    or: 'または',\n    later: '後で',\n    allow_to: 'プロンプトをコピーしました。\"{name}\"サイトにアクセスしますか',\n    ai_generated: '内容由AI生成，仅供参考',\n    back_home: '返回站点首页'\n  },\n\n  // ステータス通知\n  status: {\n    error: 'エラー',\n    warning: '警告',\n    info: '情報',\n    success: '成功',\n    updated: '更新済み',\n    sent: '送信済み',\n    login_success: 'ログインしました',\n    logout_success: 'ログアウトしました',\n    not_found_account: 'アカウントが見つかりません。登録後にログインします',\n    existing_account: '既存のアカウント',\n    approve_success: 'いいねしました',\n    approve_cancel: 'いいねを取り消しました',\n    register_success: '登録成功',\n    update_success: '更新成功',\n    copy_success: ' コピー成功 ',\n    copy_error: ' コピー失敗'\n  },\n\n  // アクションボタン\n  action: {\n    login: 'ログイン',\n    login_directly: '直接ログイン',\n    logout: 'ログアウト',\n    register: '登録',\n    user_register: 'ユーザー登録',\n    forget_password: 'パスワードを忘れましたか？',\n    update_password: 'パスワードを更新',\n    search: '検索',\n    setting: '設定',\n    confirm: '確認',\n    cancel: 'キャンセル',\n    close: '閉じる',\n    open: '開く',\n    ok: 'OK',\n    allow: '許可する',\n    and: 'と',\n    copy: 'コピー',\n    upload: 'アップロード',\n    download: 'ダウンロード',\n    del: '削除',\n    add: '追加',\n    create: '作成',\n    edit: '編集',\n    save: '保存',\n    fixed: '固定',\n    unfixed: '固定解除',\n    collapse: '折りたたむ',\n    expand: '展開',\n    back: '戻る',\n    share: '共有',\n    favorite: 'お気に入り',\n    unfavorite: 'お気に入り解除',\n    more: 'もっと見る',\n    refresh: '更新',\n    apply: '適用',\n    reset: 'リセット',\n    submit: '送信',\n    manage: '管理',\n    rename: '名前変更',\n    find: '発見',\n    preview: 'プレビュー',\n    reupload: '再アップロード',\n    send: '送信',\n    stop: '停止',\n    pay: '支払いに進む',\n    ok_v2: 'OK',\n    view_more: 'もっと見る',\n    click_upload: 'クリックアップロード',\n    view: '表示',\n    delete: '削除',\n    select_all: '全選択'\n  },\n\n  file: {\n    file_size: 'ファイルサイズは{size}MB以下でなければなりません',\n    file_format: 'サポートされる形式：{format}',\n    file_empty: 'ファイル内容を入力してください',\n    file_exceed: 'ファイルサイズは{size}MB以下でなければなりません ({name}サイズが超過しました)',\n    file_exceed_limit: '最大{limit}個のファイルをアップロードできます'\n  },\n\n  // フォーム関連\n  form: {\n    icon: 'アイコン',\n    name: '名前',\n    desc: '説明',\n    input_placeholder: '入力してください',\n    select_placeholder: '選択してください',\n    icon_placeholder: '表示効果を確保するため、縦横比1:1の画像をアップロードしてください',\n    required: '必須項目',\n    optional: '任意項目',\n\n    // ナレッジベース公開範囲\n    library_view_scope: 'ナレッジベース公開範囲',\n    library_view_public: '公開アクセス',\n    library_view_team: 'チームスペースメンバーがアクセス可能',\n    library_view_member: 'ナレッジベースメンバーがアクセス可能',\n\n    avatar: 'アバター',\n    nickname: 'ニックネーム',\n    select_verify: '認証方法を選択してください',\n    email_verify: 'メール認証',\n    mobile_verify: '電話認証',\n    account: 'アカウント',\n    remark: ' 備考 ',\n    account_alias: '電話番号',\n    password: 'パスワード',\n    password_placeholder: 'パスワードを入力してください',\n    email: 'メールアドレス',\n    new_email: '新しいメールアドレス',\n    mobile: '電話番号',\n    new_mobile: '新しい電話番号',\n    verify_code: '認証コード',\n    get_verify_code: '認証コードを取得',\n    verify_old_mobile: '古い携帯電話番号を確認してください',\n    reset_password: 'パスワードをリセット',\n    reset_password_method: 'パスワードをリセットする方法を選択',\n    new_password: '新しいパスワード',\n    new_password_placeholder: '新しいパスワードを入力してください',\n    new_password_confirm: 'パスワードの確認',\n    new_password_confirm_placeholder: '新しいパスワードを再入力してください',\n    mobile_format: '正しい電話番号を入力してください',\n    email_format: '正しいメールアドレスを入力してください',\n    account_format: '正しい電話番号またはメールアドレスを入力してください',\n    verify_code_format: '正しい認証コードを入力してください',\n    username_length: 'アカウント名の長さは 5~20 文字でなければなりません',\n    password_length: 'パスワードは8〜20文字である必要があります',\n    password_format: 'パスワードは大文字、小文字、数字を含む必要があります',\n    password_not_match: '入力されたパスワードが一致しません',\n    password_no_chinese: 'パスワードには中国語の文字を含めることができません',\n    change: '変更',\n    existing_mobile: 'この電話番号は既に登録されています。このアカウントでログインしてください。',\n    existing_email:\n      'このメールアドレスはすでに登録されています。ご登録済みのアカウントでログインしてください。'\n  },\n\n  // ホーム関連\n  index: {\n    agent_recommend: 'おすすめエージェント',\n    agent_recommend_desc: '第二の生産力エンジンを構築する',\n    prompt_recommend: 'おすすめプロンプト',\n    prompt_recommend_desc: 'プロンプトを使いこなすことで、常に先進的な状態を維持できます',\n    toolbox_recommend: 'おすすめAIツール',\n    toolbox_recommend_desc: 'ワークフローに応じた AI リソースを選択し、AI を生産性ツールに変えます',\n    use_history: '{count}人が利用',\n    banner_title: '“{name} 専門家”  効率を倍増する秘密の武器',\n    banner_desc: 'ワークフローに応じた AI リソースを選択し、AI を生産性ツールに変えます',\n    search_placeholder: '検索したいAIリソースを入力してください',\n    hot_search: '人気の検索'\n  },\n\n  // ログイン関連\n  login: {\n    agree: 'ログインすると、以下に同意したことになります',\n    terms_of_service: '利用規約',\n    privacy_policy: 'プライバシーポリシー',\n    password_login: 'パスワードでログイン',\n    password_login_title: 'パスワードでログイン',\n    message_login: 'SMSログイン',\n    message_login_title: 'SMSログイン',\n    wechat_login: 'WeChatログイン',\n    wechat_login_title: 'WeChatログイン',\n    wecom_login: 'WeComログイン',\n    wecom_login_title: 'WeComログイン',\n    unregistered_account_desc: '未登録のアカウントは、登録後に自動的にログインします',\n    unregistered_account_confirm: '未登録の携帯電話番号を認証した後、自動的にログインします',\n    quit: '終了',\n    login_by_wechat: 'WeChatでログイン',\n    login_by_password: 'パスワードでログイン',\n    login_by_mobile: '携帯電話でログイン',\n    bind_mobile: '携帯電話番号をバインド',\n    other_login_way: '他のログイン方式',\n    login_by_wecom: 'WeComでログイン',\n    immediate_login: 'すぐにログイン',\n    wecom_login_error:\n      'サイトにバインドされた企業微信は、現在のログインしている企業微信ではありません!\\n正しい企業微信を使用してログインしてください。'\n  },\n\n  // 登録関連\n  register: {\n    agree: '登録することで、あなたは同意したとみなされます',\n    terms_of_service: '利用規約',\n    privacy_policy: 'プライバシーポリシー',\n    unregister: '未登録'\n  },\n\n  // チャット関連\n  chat: {\n    search_placholder: 'エージェントとチャットを検索',\n    collapse_side_bar: 'サイドバーを折りたたむ',\n    expand_side_bar: 'サイドバーを展開',\n    history: '会話履歴',\n    new_conversation: '新しい会話',\n    edit_conversation: '会話名を編集',\n\n    conversation_confirm_delete: '削除すると、チャット履歴は復元できません。',\n    input: '入力',\n    output: '出力',\n    start_generate: '生成開始',\n    regenerate: '再生成',\n    like: 'いいね',\n    dislike: 'いいねを取り消す',\n    input_placeholder: 'メッセージを送信',\n    usage_guide: '使用ガイド',\n    completion_empty_desc:\n      'AI大規模モデルによるインテリジェントコンテンツ生成。要件を入力するだけでワンクリックで文章が作成できます',\n    usage_case: '使用例',\n    usage_scene: '使用シーン',\n    online_search: 'オンライン検索',\n    completion_generating: 'コンテンツ生成中、お待ちください...',\n    completion_rendering: 'コンテンツレンダリング中...',\n\n    // 利用可能なエージェントがありません\n    no_available_agent: '利用可能なエージェントがありません',\n\n    completion_completed: '深層思考が完了しました',\n    completion_thinking: '深度思考中...',\n    completion_scene: '関連シーン：',\n    completion_next_action: '関連シナリオ：次のアクション',\n\n    not_found_url: 'URL が見つかりません。エージェントの設定を確認してください',\n    completion_share_link: '対話リンクがコピーされました、すぐに共有してください~',\n    no_available_agent_desc: '很遺憾，你要訪問的智能體已不存在，去看看其他有趣的智能體吧～'\n  },\n\n  // ナレッジベース関連\n  library: {\n    home: 'ホーム',\n    name: 'ナレッジベース',\n    create: 'ナレッジベースを作成',\n    all_spaces: '全員スペース',\n    space_name: 'スペース名',\n    chat: 'ナレッジベースQ&A',\n    file_count: '{count}ファイル',\n    upload_file: 'ファイルをアップロード',\n    manage: 'ナレッジベースを管理',\n    search: 'ナレッジベースを検索',\n    all_libraries: 'すべてのナレッジベース',\n    empty_desc: '企業ナレッジベースを作成し、チームの知識を蓄積して協力効率を向上させる',\n\n    create_md: '新しい知識を作成',\n    local_upload: 'ローカルからアップロード',\n    create_folder: '新しいフォルダを作成',\n    tmpl_create: 'テンプレートから作成',\n    github_import: 'Githubからインポート',\n    docs_qq_import: 'テンセントドキュメントからインポート',\n    docs_feishu_import: 'DingTalkドキュメントからインポート',\n    docs_dingtalk_import: 'Feishuドキュメントからインポート'\n  },\n\n  agent: {\n    no_data: '管理者がまだエージェントを公開していません',\n    dialogue_type: '対話型',\n    applied_type: '応用型',\n    failed_tip: '認証キーが使用可能かどうか、および残高が充足しているかどうかを確認してください'\n  },\n\n  prompt: {\n    default_sort: 'デフォルト順',\n    likes_sort: 'いいね順',\n    views_sort: '閲覧順',\n    content: 'プロンプト内容',\n    auth_tip: 'あなたの所属グループにアクセス権がありません',\n    let_use_prompt: '去使用这个提示词'\n  },\n\n  toolbox: {\n    name: 'ツールボックス',\n    title: 'AIの世界を拡大しよう',\n    input_placeholder: 'AIの世界を拡大しよう',\n    max_agent_count: '最大で{count}つのモデルを選択できます',\n    search_placeholder: 'ウェブサイトを検索',\n    direct_access: ' 直接アクセス ',\n    click_access: ' クリックでアクセス ',\n    account_access: ' 共有アカウント ',\n    account_text: ' 以下は共有のアカウントとパスワードです。本人専用です',\n    account_text2: ' 以下は共有のアカウントとパスワードです。本人専用です'\n  },\n\n  // スペース関連\n  space: {\n    create: 'スペースを作成',\n    join: 'スペースに参加',\n    manage: 'スペースを管理',\n    member: 'メンバー管理',\n    settings: 'スペース設定',\n    space_usage: '使用中 {used} / {total}',\n    expand: '容量拡張'\n  },\n\n  // 時間関連\n  time: {\n    just_now: 'たった今',\n    minutes_ago: '{count}分前',\n    hours_ago: '{count}時間前',\n    days_ago: '{count}日前',\n    yesterday: '昨日',\n    today: '今日',\n    week_last: '1週間以内',\n    week_ago: '1週間前'\n  },\n\n  profile: {\n    info: '個人情報',\n    profile: 'プロフィール',\n    change_password: 'パスワード変更',\n    login_password: 'ログインパスワード',\n    bind_accounts: 'アカウント情報',\n    subscription_info: 'サブスクリプション情報',\n    order_info: '注文情報',\n    unbind_account: '未連携',\n    bind_mobile: '電話番号',\n    bind_email: 'メールアドレス',\n    bind_google: 'Googleアカウント',\n    bind_wechat: 'WeChatOpenId',\n    bind: '連携',\n    unbind: '連携解除',\n    change: 'さしかえる',\n    logined_devices: 'ログイン済みデバイス',\n    used_devices: '過去に使用したデバイス',\n    current_device: '現在のデバイス',\n    unbind_wechat_confirm_desc: '解綁後、WeChatでログインできなくなります。続行しますか？',\n    unbind_wechat_confirm_title: 'WeChatアカウントのバインドを解除',\n    unbind_wechat_confirm_cancel: '暫時解綁しない',\n    unbind_wechat_confirm_ok: '確認解綁',\n    renew: '更新',\n    expire_time_desc:\n      '{group_name}は{day}日後({expire_time})に期限切れになります、会員権利を継続するには更新してください',\n    expired_time_desc:\n      '{group_name}は{expire_time}に期限切れになりました、会員権利を継続するには更新してください'\n  },\n  response_status: {\n    '400': 'リクエストパラメータエラー',\n    '401': '認証されていません、ログインしてください',\n    '403': 'アクセス拒否',\n    '404': 'リソースが見つかりません',\n    '500': 'サーバーエラー',\n    '502': 'ゲートウェイエラー',\n    '504': 'ゲートウェイタイムアウト',\n    '503': 'サービス利用不可'\n  },\n  response_code: {\n    success: '成功',\n    param_error: 'パラメータエラー',\n    database_error: 'データベースエラー',\n    network_error: 'ネットワークエラー、再試行してください',\n    system_error: 'システムエラー',\n    auth_error: '認証エラー',\n    not_found_error: '見つかりませんエラー',\n    unauthorized_error: '認証エラー',\n    file_error: 'ファイルエラー',\n    forbidden_error: 'ユーザーが無効になっています、管理者に連絡してください',\n    agent_error: 'エージェントエラー',\n    token_expired_error: '認証期限切れエラー',\n    verification_code_error: '認証コードエラー'\n  },\n  response_message: {\n    unknown_error: '不明なエラー',\n    user_not_found: 'ユーザーが存在しません',\n    username_or_password_is_incorrect: 'ユーザー名またはパスワードが間違っています',\n    username_already_exists: 'ユーザー名が既に存在します',\n    mobile_already_bind: '携帯電話番号はすでに他のユーザーに登録されています',\n    email_already_bind: 'メールアドレスは他のユーザーに登録済みです',\n    model_changed: '管理者がモデルを変更しました、新しい会話を作成してください',\n    wechat_already_bind: 'WeChatアカウントはすでに他のユーザーに登録されています'\n  },\n  subscription: {\n    free: '無料版',\n    upgrade: 'アップグレード',\n    version_title: 'バージョンを選択',\n    time_title: '購入期間を選択',\n    month: '月',\n    year: '年',\n    credit_month_amount: '毎月{amount}積分',\n    agent_bots_title: '使用可能なエージェント',\n    ai_assistant_title: 'クロスプラットフォームの AI アシスタント',\n    time_unit_month: '1ヶ月',\n    time_unit_year: '1年',\n    aside_title: '新しい注文購入詳細',\n    aside_desc: '以下のユーザーに購入',\n    payment: '支払方法',\n    wechat_pay: 'WeChat支払い',\n    alipay: 'Alipay',\n    manual_pay: '手動支払い',\n    paypal: 'PayPal',\n    total: '総計',\n    order_title: '注文支払い',\n    pay_amount: '支払金額',\n    pay_by_wechat: 'WeChat支払い',\n    pay_policy: '支払いは関連する {policy} に同意したことを意味します',\n    pay_success: '支払い成功',\n    pay_confirm: '支払いが完了したことを確認してください、クリックしてください',\n    payed: '支払い済み',\n    manual_pay_success_title: '注文が生成されました',\n    manual_pay_success_desc: '支払い情報を確認するか、管理者に連絡してください',\n    expire_time: '有効期限'\n  },\n  authority: {\n    group_not_permission: 'あなたが所属するグループにはアクセス権限がありません',\n    payment_not_setting: 'サイトが支払い方法を設定していません、管理者に直接連絡してください',\n    agent_not_permission:\n      'このエージェントを使用する権限がありません、管理者に直接連絡してください',\n    login_not_permission: 'まずログインしてください',\n    use_range: '使用范围'\n  },\n  upgrade_dialog: {\n    title: 'サイトの登録ユーザー数が上限に達しました、管理者に連絡してください~~',\n    cancel: '登録を閉じる'\n  },\n  order: {\n    id: '注文ID',\n    subscription: 'サブスクリプションサービス',\n    amount: '注文金額',\n    pay_type: '支払方法',\n    create_time: '注文時間',\n    status: '状態',\n    action: '操作',\n    search_placeholder: '注文IDを入力してください',\n\n    payment: '支払い',\n    cancel: 'キャンセル',\n    cancel_confirm: '注文をキャンセルしますか？',\n\n    status_list: {\n      all: 'すべて',\n      not_confirm: '未確定',\n      pending: '待支払い',\n      paid: '支払い済み',\n      expired: '期限切れ',\n      cancel: 'キャンセル'\n    }\n  },\n  filter: {\n    start_time: '開始時間',\n    end_time: '結束時間',\n\n    date_range: {\n      today: '今日',\n      last_7_days: '過去7日',\n      last_4_weeks: '過去4週',\n      last_3_months: '過去3月',\n      last_12_months: '過去12月',\n      this_month: '今月',\n      this_quarter: '今四半期',\n      this_year: '今年',\n      all_time: 'すべての時間'\n    }\n  },\n  table: {\n    footer_text: '合計 {total} 項目'\n  },\n  guide: {\n    title: '53AI Hubをご利用いただきありがとうございます',\n    description:\n      '現在は初期化段階です。サイト情報などの基本情報を入力し、システム基本設定の構築に使用してください',\n    website_info: 'サイト情報',\n    website_setting: 'アカウント設定',\n    website_success: 'インストール完了',\n    website_info_name: 'サイト名',\n    website_info_name_placeholder: 'サイト名を入力してください',\n    website_info_logo: 'サイトロゴ',\n    website_info_logo_placeholder: 'ロゴをアップロードしてください',\n    website_info_logo_change: '変更',\n    website_info_logo_upload: 'アップロード',\n    website_info_logo_tip:\n      'アスペクト比1:1の正方形ロゴをアップロードしてください（推奨サイズ：512×512px）。対応形式：PNG/JPG。ファイルサイズは2MB以内に限ります',\n    website_style: 'サイトスタイル',\n    website_info_language: 'デフォルト言語',\n    website: 'ウェブサイトスタイル',\n    software: 'ソフトウェアスタイル',\n    init_success: '初期化が成功しました！',\n    jump_now: 'すぐに移動',\n    jump_tip: '{count}秒後にホームページに自動的に移動します...',\n    next: '次のステップ',\n    init: '初期化',\n    confirm_password: 'パスワードの確認',\n    confirm_password_placeholder: '再度パスワードを確認してください'\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/locales/zh-cn.ts",
    "content": "export default {\n  // 模块导航\n  module: {\n    index: '首页',\n    toolbox: 'AI工具',\n    tool: 'AI工具',\n    agent: '智能体',\n    chat: '对话',\n    app: '应用',\n    find: '发现',\n    library: '知识库',\n    crop_space: '企业空间',\n    prompt: '提示词'\n  },\n\n  // 浏览器相关\n  browser: {\n    newTab: '新标签页',\n    search_placeholder: '在百度AI中搜索，或者输入一个网址',\n    knowledge_clean: '知识清洗',\n    load_error: '加载失败',\n    reload: '重新加载',\n    not_logged_in: '未登录',\n    login: '立即登录',\n    window_position: '窗口位置',\n    leftWindow: '左侧小窗',\n    centerWindow: '居中大窗',\n    rightWindow: '右侧小窗',\n    alwaysOnTop: '窗口置顶'\n  },\n\n  // 清洗功能\n  clean: {\n    content: '内容抽取',\n    knowledge: '知识整理',\n    summarize: '知识萃取'\n  },\n\n  // 更新相关\n  updater: {\n    newVersion: '发现新版本，是否立即更新？',\n    newVersionTitle: '更新提示',\n    downloading: '正在下载更新',\n    completed: '更新完成，是否立即重启？',\n    completedTitle: '更新提示',\n    noUpdate: '当前已是最新版本',\n    currentVersion: '当前版本 v{version}',\n    checkUpdate: '检查更新'\n  },\n\n  // 通用文本\n  common: {\n    new_friend: '新手指引',\n    help_feedback: '帮助与反馈',\n    attach: '附件',\n    screenshot: '截图',\n    title: '标题',\n    desc: '描述',\n    tip: '提示',\n    create_time: '创建时间',\n    update_time: '更新时间',\n    recently_updated: '最近更新',\n    loading: '加载中',\n    // 加载更多\n    load_more: '加载更多',\n    load_new: '加载新消息',\n    no_data: '暂无数据',\n    unknown: '未知',\n    usual: '常用',\n\n    render: '渲染',\n    preview: '预览',\n    code: '代码',\n    split: '分屏',\n    all: '全部',\n    recently_visit: '最近访问',\n\n    confirm_delete: '确定删除该项？',\n    copied: '已复制',\n    image_cropper: '图片裁剪',\n    back: '返回',\n    go_admin: '去后台',\n    related_prompt: '相关提示词',\n    related_agent: '相关智能体',\n\n    view_more: '查看更多',\n\n    expand_more: '展开更多',\n    collapse_more: '收起更多',\n    or: '或',\n    later: '稍后再说',\n    allow_to: '已复制提示词内容，访问\"{name}\"站点',\n    ai_generated: '内容由AI生成，仅供参考',\n    back_home: '返回站点首页'\n  },\n\n  // 状态提示\n  status: {\n    error: '错误',\n    warning: '警告',\n    info: '信息',\n    success: '成功',\n    updated: '已更新',\n    sent: '已发送',\n    login_success: '已登录',\n    logout_success: '已退出登录',\n    not_found_account: '未找到账号,请先注册后再登录',\n    existing_account: '已有帐号',\n    approve_success: '已点赞',\n    approve_cancel: '已取消',\n    register_success: '注册成功',\n    update_success: '更改成功',\n    copy_success: '复制成功',\n    copy_error: '复制失败'\n  },\n\n  // 操作按钮\n  action: {\n    login: '登录',\n    login_directly: '直接登录',\n    logout: '退出登录',\n    register: '注册',\n    user_register: '用户注册',\n    forget_password: '忘记密码？',\n    update_password: '更新密码',\n    search: '搜索',\n    setting: '设置',\n    confirm: '确认',\n    cancel: '取消',\n    close: '关闭',\n    open: '打开',\n    ok: '确定',\n    allow: '允许',\n    and: '和',\n    copy: '复制',\n    upload: '上传',\n    download: '下载',\n    del: '删除',\n    add: '添加',\n    create: '创建',\n    edit: '编辑',\n    save: '保存',\n    fixed: '固定',\n    unfixed: '取消固定',\n    collapse: '收起',\n    expand: '展开',\n    back: '返回',\n    share: '分享',\n    favorite: '收藏',\n    unfavorite: '取消收藏',\n    more: '更多',\n    refresh: '刷新',\n    apply: '应用',\n    reset: '重置',\n    submit: '提交',\n    manage: '管理',\n    rename: '重命名',\n    find: '发现',\n    preview: '预览',\n    reupload: '重新上传',\n    send: '发送',\n    stop: '停止',\n    pay: '去支付',\n    ok_v2: '好的',\n    view_more: '查看更多',\n    click_upload: '点击上传',\n    view: '查看',\n    delete: '删除',\n    select_all: '全选',\n    unselect_all: '取消全选',\n    copy_link: '复制链接'\n  },\n\n  file: {\n    support_format: '目前仅支持{format}格式文件',\n    file_size: '单个文件大小不超过{size}MB',\n    file_format: '支持格式：{format}',\n    file_empty: '文件内容不能为空',\n    file_exceed: '文件上传大小不能超过{size}MB({name}大小已超出)',\n    file_exceed_limit: '最多上传{limit}个文件'\n  },\n\n  // 表单相关\n  form: {\n    icon: '图标',\n    name: '名称',\n    desc: '描述',\n    input_placeholder: '请输入',\n    select_placeholder: '请选择',\n    icon_placeholder: '为保证显示效果，请上传宽高比 1:1 的图片',\n    required: '必填项',\n    optional: '选填项',\n\n    // 知识库公开范围\n    library_view_scope: '知识库公开范围',\n    library_view_public: '公开访问',\n    library_view_team: '团队空间成员可访问',\n    library_view_member: '知识库成员可访问',\n\n    avatar: '头像',\n    nickname: '昵称',\n    select_verify: '请选择验证方式',\n    email_verify: '邮箱验证',\n    mobile_verify: '手机验证',\n    account: '账号',\n    remark: '备注',\n    account_alias: '手机',\n    password: '密码',\n    password_placeholder: '请输入密码',\n    email: '邮箱',\n    new_email: '新邮箱',\n    mobile: '手机号',\n    new_mobile: '新手机号',\n    verify_code: '验证码',\n    get_verify_code: '获取验证码',\n    verify_old_mobile: '验证你的旧手机号码',\n    reset_password: '重置密码',\n    reset_password_method: '选择重置密码的方式',\n    new_password: '新密码',\n    new_password_placeholder: '请输入新密码',\n    new_password_confirm: '重复新密码',\n    new_password_confirm_placeholder: '请再次输入新密码',\n    email_format: '请输入正确的邮箱',\n    mobile_format: '请输入正确手机号',\n    account_format: '请输入正确的手机或邮箱',\n    verify_code_format: '请输入正确的验证码',\n    username_length: '账号长度必须在 5-20 个字符之间',\n    password_length: '密码长度必须在 8-20 个字符之间',\n    password_format: '密码必须包含大小写字母和数字',\n    password_not_match: '两次输入的密码不一致',\n    password_no_chinese: '密码不能包含中文',\n    change: '修改',\n    existing_mobile: '该手机号已注册，请使用该账号登录。',\n    existing_email: '该邮箱已注册，请使用该账号登录。'\n  },\n\n  // 首页相关\n  index: {\n    agent_recommend: '精选智能体',\n    agent_recommend_desc: '打造您的第二生产力引擎',\n    prompt_recommend: '精选提示词',\n    prompt_recommend_desc: '掌握用大模型解决问题的方法',\n    toolbox_recommend: '精选AI工具',\n    toolbox_recommend_desc: '用好 AI 工具才能始终领先一步',\n    use_history: '{count}人聊过',\n    banner_title: '“{name} 专家”  效率倍增的秘密武器',\n    banner_desc: '精选工作场景 AI 资源，让 AI 成为你的生产力助手',\n    search_placeholder: '输入您想查找的AI资源',\n    hot_search: '热门搜索'\n  },\n\n  // 登录相关\n  login: {\n    agree: '登录即视您同意',\n    terms_of_service: '条款和条件',\n    privacy_policy: '隐私政策',\n    password_login: '账号密码',\n    password_login_title: '密码登录',\n    message_login: '短信登录',\n    message_login_title: '短信登录',\n    wechat_login: '微信登录',\n    wechat_login_title: '微信登录',\n    wecom_login: '企业微信',\n    wecom_login_title: '企业微信登录',\n    unregistered_account_desc: '未注册的账号，请先注册后再登录',\n    unregistered_account_confirm: '未注册手机号验证后自动登录，',\n    quit: '退出',\n    login_by_wechat: '请使用微信扫码登录',\n    login_by_password: '使用密码登录',\n    login_by_mobile: '使用手机登录',\n    bind_mobile: '绑定手机号',\n    other_login_way: '其他登录方式',\n    login_by_wecom: '请使用企业微信扫码登录',\n    immediate_login: '立即登录',\n    wecom_login_error: '站点绑定的企业微信并非当前登录的企业微信!\\n请用正确的企微登录。'\n  },\n\n  // 注册相关\n  register: {\n    agree: '注册即视您同意',\n    unregistered: '未注册',\n    terms_of_service: '条款和条件',\n    privacy_policy: '隐私政策'\n  },\n\n  // 聊天相关\n  chat: {\n    search_placholder: '搜索智能体',\n    collapse_side_bar: '收起侧边栏',\n    expand_side_bar: '展开侧边栏',\n    history: '历史会话',\n    new_conversation: '新对话',\n    edit_conversation: '编辑对话名称',\n\n    conversation_confirm_delete: '删除后，聊天记录将不可恢复。',\n    input: '输入',\n    output: '输出',\n    start_generate: '开始生成',\n    regenerate: '重新生成',\n    like: '点赞',\n    dislike: '取消点赞',\n    input_placeholder: '发送消息',\n    usage_guide: '使用指引',\n    completion_empty_desc: '采用AI大模型智能生成内容，输入需求即可一键成文，快去试试吧',\n    usage_case: '使用案例',\n    usage_scene: '使用场景',\n    online_search: '联网搜索',\n    completion_generating: '内容生成中，请稍候...',\n    completion_rendering: '内容渲染中...',\n\n    // 暂无可用的智能体\n    no_available_agent: '暂无可用的智能体',\n    completion_completed: '已完成深度思考',\n    completion_thinking: '深度思考中...',\n    completion_scene: '关联场景：',\n    completion_next_action: '关联场景：下一步操作',\n\n    not_found_url: '无法找到URL，请检查智能体是否设置正确',\n    completion_share_link: '对话链接已复制，快去分享吧~',\n    no_available_agent_desc: '很遗憾，你要访问的智能体已不存在，去看看其他有趣的智能体吧～'\n  },\n\n  // 知识库相关\n  library: {\n    home: '首页',\n    name: '知识库',\n    create: '创建知识库',\n    all_spaces: '全员空间',\n    space_name: '空间名称',\n    chat: '知识库问答',\n    file_count: '{count}个文件',\n    upload_file: '上传文件',\n    manage: '管理知识库',\n    search: '搜索知识库',\n    all_libraries: '全部知识库',\n    empty_desc: '创建企业知识库，沉淀团队知识，提升协作效率',\n\n    create_md: '新建知识',\n    local_upload: '本地上传',\n    create_folder: '新建文件夹',\n    tmpl_create: '模板创建',\n    github_import: '从Github导入',\n    docs_qq_import: '从腾讯文档导入',\n    docs_feishu_import: '从钉钉文档导入',\n    docs_dingtalk_import: '从飞书文档导入'\n  },\n\n  agent: {\n    no_data: '管理员还未发布智能体',\n    dialogue_type: '对话型',\n    applied_type: '应用型',\n    failed_tip: '请检查授权key是否可用以及余额是否充足'\n  },\n\n  prompt: {\n    default_sort: '默认排序',\n    likes_sort: '按最多点赞排序',\n    views_sort: '按最多浏览排序',\n    content: '提示词内容',\n\n    auth_tip: '你所在的分组无权限',\n    let_use_prompt: '去使用这个提示词'\n  },\n\n  toolbox: {\n    name: 'AI聚合问答',\n    title: '准备好了吗？开始体验AI聚合问答啦！',\n    input_placeholder: '多个AI解答你输入的问题，Shift+Enter换行，Enter发送',\n    max_agent_count: '最多只能选择{count}个模型',\n    search_placeholder: '搜索网站',\n    direct_access: '直接访问',\n    click_access: '点击访问',\n    account_access: '共享账号',\n    account_text: '以下是共享的账号与密码，仅限本人使用',\n    account_text2: '您可以复制下列共享的账号密码，访问目标站点'\n  },\n\n  // 空间相关\n  space: {\n    create: '创建空间',\n    join: '加入空间',\n    manage: '管理空间',\n    member: '成员管理',\n    settings: '空间设置',\n    space_usage: '已用 {used} / {total}',\n    expand: '扩容'\n  },\n\n  // 时间相关\n  time: {\n    just_now: '刚刚',\n    minutes_ago: '{count}分钟前',\n    hours_ago: '{count}小时前',\n    days_ago: '{count}天前',\n    yesterday: '昨天',\n    today: '今天',\n    week_last: '一周内',\n    week_ago: '一周前'\n  },\n\n  profile: {\n    info: '个人信息',\n    profile: '个人资料',\n    change_password: '修改密码',\n    login_password: '登录密码',\n    // 已绑定的账户\n    bind_accounts: '账户信息',\n    // 订阅信息\n    subscription_info: '订阅信息',\n    order_info: '订单记录',\n\n    unbind_account: '未绑定',\n    bind_mobile: '手机号',\n    bind_email: '电子邮箱',\n    bind_google: '谷歌账号',\n    bind_wechat: '微信OpenId',\n    bind: '绑定',\n    bind_success: '已绑定',\n    unbind: '解绑',\n    unbind_success: '已解绑',\n    change: '更换',\n    change_success: '已更换',\n    logined_devices: '已登录的设备',\n    used_devices: '曾用设备',\n    current_device: '当前设备',\n    unbind_wechat_confirm_desc: '解绑后将无法使用该微信账号登录此账号，请谨慎操作！',\n    unbind_wechat_confirm_title: '解绑微信账号绑定',\n    unbind_wechat_confirm_cancel: '暂不解绑',\n    unbind_wechat_confirm_ok: '确认解绑',\n    bind_wechat_title: '微信扫码完成绑定'\n  },\n  response_status: {\n    '400': '请求参数错误',\n    '401': '未授权，请登录',\n    '403': '拒绝访问',\n    '404': '请求资源不存在',\n    '500': '服务器错误',\n    '502': '网关错误',\n    '504': '网关超时',\n    '503': '服务不可用'\n  },\n  response_code: {\n    success: '成功',\n    param_error: '参数错误',\n    database_error: '数据库错误',\n    network_error: '网络错误，请重新尝试',\n    system_error: '系统错误',\n    auth_error: '认证错误',\n    not_found_error: '未找到错误',\n    unauthorized_error: '身份认证错误',\n    file_error: '文件错误',\n    forbidden_error: '用户已禁用，请联系管理员 ',\n    agent_error: '智能体错误',\n    token_expired_error: '身份过期错误',\n    verification_code_error: '验证码错误'\n  },\n  response_message: {\n    unknown_error: '未知错误',\n    user_not_found: '用户不存在',\n    username_or_password_is_incorrect: '用户名或密码错误',\n    username_already_exists: '用户名已存在',\n    mobile_already_bind: '手机号已被其他用户绑定',\n    email_already_bind: '邮箱已被其他用户绑定',\n    model_changed: '管理员已修改模型，请新建对话',\n    wechat_already_bind: '微信号已被其他用户绑定'\n  },\n  subscription: {\n    free: '免费版',\n    upgrade: '升级',\n    version_title: '选择版本',\n    time_title: '选择购买时长',\n    month: '月',\n    year: '年',\n    credit_month_amount: '每月{amount}积分',\n    agent_bots_title: '可使用智能体',\n    ai_assistant_title: '跨平台的 AI 助手',\n    time_unit_month: '1个月',\n    time_unit_year: '1年',\n    aside_title: '新订单购买详情',\n    aside_desc: '为以下用户购买',\n    payment: '支付方式',\n    wechat_pay: '微信',\n    alipay: '支付宝',\n    manual_pay: '手动转账',\n    paypal: 'PayPal',\n    total: '总计',\n    order_title: '订单支付',\n    pay_amount: '支付金额',\n    pay_by_wechat: '使用 微信扫码 支付',\n    pay_policy: '支付即视为你同意相关 {policy}',\n    pay_success: '支付成功',\n    pay_confirm: '确认支付完成，请点击',\n    payed: '已支付',\n    manual_pay_success_title: '订单已生成',\n    manual_pay_success_desc: '请等待或联系管理员确认支付信息',\n    expire_time: '到期时间',\n    renew: '续费',\n    expire_time_desc: '{group_name}将于{day}天后({expire_time})到期，马上续费延续会员权益',\n    expired_time_desc: '{group_name}已于{expire_time}到期，马上续费延续会员权益'\n  },\n  authority: {\n    group_not_permission: '您所在的分组无权限',\n    payment_not_setting: '站点未配置收费方式，请直接联系管理员',\n    agent_not_permission: '无权限使用此智能体，请联系管理员',\n    login_not_permission: '请先登录',\n    use_range: '使用范围'\n  },\n  upgrade_dialog: {\n    title: '站点注册用户已达上限，请联系管理员~~',\n    cancel: '关闭注册'\n  },\n  order: {\n    id: '订单ID',\n    subscription: '订阅服务',\n    amount: '订单金额',\n    pay_type: '支付方式',\n    create_time: '下单时间',\n    status: '状态',\n    action: '操作',\n    search_placeholder: '请输入订单ID',\n\n    payment: '支付',\n    cancel: '取消订单',\n    cancel_confirm: '确认取消该订单？',\n\n    status_list: {\n      all: '全部',\n      not_confirm: '待确定',\n      pending: '待支付',\n      paid: '已支付',\n      expired: '已超时',\n      cancel: '已取消'\n    }\n  },\n  filter: {\n    start_time: '开始时间',\n    end_time: '结束时间',\n\n    date_range: {\n      today: '今天',\n      last_7_days: '过去7天',\n      last_4_weeks: '过去4周',\n      last_3_months: '过去3月',\n      last_12_months: '过去12月',\n      this_month: '本月至今',\n      this_quarter: '本季度至今',\n      this_year: '本年至今',\n      all_time: '所有时间'\n    }\n  },\n  table: {\n    footer_text: '共有 {total} 条'\n  },\n  guide: {\n    title: '欢迎使用53AI Hub',\n    description: '当前为初始化环节，需录入站点等基础信息，用于系统基础配置搭建',\n    website_info: '站点信息',\n    website_setting: '账号设置',\n    website_success: '完成安装',\n    website_info_name: '站点名称',\n    website_info_name_placeholder: '请输入站点的名称',\n    website_info_logo: '站点logo',\n    website_info_logo_placeholder: '请上传Logo',\n    website_info_logo_change: '修改',\n    website_info_logo_upload: '上传',\n    website_info_logo_tip:\n      '请上传1:1比例的方形Logo（建议尺寸：512×512px）支持PNG/JPG格式，文件大小不超过2MB',\n    website_style: '站点风格',\n    website_info_language: '默认语言',\n    website: '网站风格',\n    software: '软件风格',\n    init_success: '初始化成功！',\n    jump_now: '立即跳转',\n    jump_tip: '将在 {count} 秒后自动跳转到首页...',\n    next: '下一步',\n    init: '初始化',\n    confirm_password: '确认密码',\n    confirm_password_placeholder: '请再次确认密码'\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/locales/zh-tw.ts",
    "content": "export default {\n  // 模塊導航\n  module: {\n    index: '首頁',\n    toolbox: 'AI工具',\n    tool: 'AI工具',\n    agent: '智能體',\n    chat: '对话',\n    app: '應用',\n    find: '發現',\n    library: '知識庫',\n    crop_space: '企業空間',\n    prompt: '提示詞'\n  },\n\n  // 瀏覽器相關\n  browser: {\n    newTab: '新標籤頁',\n    search_placeholder: '在百度AI中搜索，或者輸入一個網址',\n    knowledge_clean: '知識清洗',\n    load_error: '載入失敗',\n    reload: '重新載入',\n    not_logged_in: '未登入',\n    login: '立即登入',\n    window_position: '視窗位置',\n    leftWindow: '左側小窗',\n    centerWindow: '居中大窗',\n    rightWindow: '右側小窗',\n    alwaysOnTop: '視窗置頂'\n  },\n\n  // 清洗功能\n  clean: {\n    content: '內容抽取',\n    knowledge: '知識整理',\n    summarize: '知識萃取'\n  },\n\n  // 更新相關\n  updater: {\n    newVersion: '發現新版本，是否立即更新？',\n    newVersionTitle: '更新提示',\n    downloading: '正在下載更新',\n    completed: '更新完成，是否立即重啟？',\n    completedTitle: '更新提示',\n    noUpdate: '當前已是最新版本',\n    currentVersion: '當前版本 v{version}',\n    checkUpdate: '檢查更新'\n  },\n\n  // 通用文本\n  common: {\n    new_friend: '新手指引',\n    help_feedback: '幫助與反饋',\n    attach: '附件',\n    screenshot: '截圖',\n    title: '標題',\n    desc: '描述',\n    tip: '提示',\n    create_time: '創建時間',\n    update_time: '更新時間',\n    recently_updated: '最近更新',\n    loading: '載入中',\n    // 加載更多\n    load_more: '載入更多',\n    load_new: '載入新訊息',\n    no_data: '暫無數據',\n    unknown: '未知',\n    usual: '常用',\n\n    render: '渲染',\n    preview: '預覽',\n    code: '代碼',\n    split: '分屏',\n    all: '全部',\n    recently_visit: '最近訪問',\n\n    confirm_delete: '確定刪除該項？',\n    copied: '已複製',\n    image_cropper: '圖片裁剪',\n    back: '返回',\n    go_admin: '去後台',\n    related_prompt: '相關提示詞',\n    related_agent: '相關智能體',\n    view_more: '查看更多',\n    expand_more: '展開更多',\n    collapse_more: '收起更多',\n    or: '或',\n    later: '稍後再說',\n    allow_to: '已複製提示詞內容，訪問\"{name}\"站點',\n    ai_generated: '內容由AI生成，僅供參考',\n    back_home: '返回站點首頁'\n  },\n\n  // 狀態提示\n  status: {\n    error: '錯誤',\n    warning: '警告',\n    info: '信息',\n    success: '成功',\n    updated: '已更新',\n    sent: '已發送',\n    login_success: '已登入',\n    logout_success: '已退出登入',\n    not_found_account: '未找到賬號,請先註冊後再登入',\n    existing_account: '已有帳號',\n    approve_success: '已點讚',\n    approve_cancel: '已取消',\n    register_success: '註冊成功',\n    update_success: '更改成功',\n    copy_success: ' 複製成功 ',\n    copy_error: ' 複製失敗'\n  },\n\n  // 操作按鈕\n  action: {\n    login: '登入',\n    login_directly: '直接登入',\n    logout: '退出登入',\n    register: '註冊',\n    user_register: '用戶註冊',\n    forget_password: '忘記密碼？',\n    update_password: '更新密碼',\n    search: '搜索',\n    setting: '設置',\n    confirm: '確認',\n    cancel: '取消',\n    close: '關閉',\n    open: '打開',\n    ok: '確定',\n    allow: '允許',\n    and: '和',\n    copy: '複製',\n    upload: '上傳',\n    download: '下載',\n    del: '刪除',\n    add: '添加',\n    create: '創建',\n    edit: '編輯',\n    save: '保存',\n    fixed: '固定',\n    unfixed: '取消固定',\n    collapse: '收起',\n    expand: '展開',\n    back: '返回',\n    share: '分享',\n    favorite: '收藏',\n    unfavorite: '取消收藏',\n    more: '更多',\n    refresh: '刷新',\n    apply: '應用',\n    reset: '重置',\n    submit: '提交',\n    manage: '管理',\n    rename: '重命名',\n    find: '發現',\n    preview: '預覽',\n    reupload: '重新上傳',\n    send: '發送',\n    stop: '停止',\n    pay: '去支付',\n    ok_v2: '好的',\n    view_more: '查看更多',\n    click_upload: '點擊上傳',\n    view: '查看',\n    delete: '刪除',\n    select_all: '全選'\n  },\n\n  file: {\n    file_size: '單個文件大小不超過{size}MB',\n    file_format: '支持格式：{format}',\n    file_empty: '文件內容不能為空',\n    file_exceed: '文件上傳大小不能超過{size}MB({name}大小已超出)',\n    file_exceed_limit: '最多上傳{limit}個文件'\n  },\n\n  // 表單相關\n  form: {\n    icon: '圖標',\n    name: '名稱',\n    desc: '描述',\n    input_placeholder: '請輸入',\n    select_placeholder: '請選擇',\n    icon_placeholder: '為保證顯示效果，請上傳寬高比 1:1 的圖片',\n    required: '必填項',\n    optional: '選填項',\n\n    // 知識庫公開範圍\n    library_view_scope: '知識庫公開範圍',\n    library_view_public: '公開訪問',\n    library_view_team: '團隊空間成員可訪問',\n    library_view_member: '知識庫成員可訪問',\n\n    avatar: '頭像',\n    nickname: '暱稱',\n    select_verify: '請選擇驗證方式',\n    email_verify: '郵箱驗證',\n    mobile_verify: '手機驗證',\n    account: '賬號',\n    remark: ' 備註 ',\n    account_alias: '手機',\n    password: '密碼',\n    password_placeholder: '請輸入密碼',\n    email: '郵箱',\n    new_email: '新郵箱',\n    mobile: '手機號',\n    new_mobile: '新手機號',\n    verify_code: '驗證碼',\n    get_verify_code: '獲取驗證碼',\n    verify_old_mobile: '驗證你的舊手機號碼',\n    reset_password: '重置密碼',\n    reset_password_method: '選擇重置密碼的方式',\n    new_password: '新密碼',\n    new_password_placeholder: '請輸入新密碼',\n    new_password_confirm: '確認新密碼',\n    new_password_confirm_placeholder: '請再次輸入新密碼',\n    mobile_format: '請輸入正確手機號',\n    email_format: '請輸入正確的郵箱',\n    account_format: '請輸入正確的手機或郵箱',\n    verify_code_format: '請輸入正確的驗證碼',\n    password_length: '密碼長度必須在 8-20 個字符之間',\n    password_format: '密碼必須包含大小寫字母和數字',\n    password_not_match: '兩次輸入的密碼不一致',\n    password_no_chinese: '密碼不能包含中文',\n    change: '修改',\n    existing_mobile: '該手機號已註冊，請使用該帳號登入。',\n    existing_email: '該郵箱已註冊，請使用該帳號登入。'\n  },\n\n  // 首頁相關\n  index: {\n    agent_recommend: '精選智能體',\n    agent_recommend_desc: '打造您的第二生產力引擎',\n    prompt_recommend: '精選提示詞',\n    prompt_recommend_desc: '用好提示詞才能始終領先一步',\n    toolbox_recommend: '精選AI工具',\n    toolbox_recommend_desc: '用好 AI 工具才能始終領先一步',\n    use_history: '{count}人聊過',\n    banner_title: '“{name} 專家”  效率倍增的秘密武器',\n    banner_desc: '精選工作場景 AI 資源，讓 AI 成為你的生產力助手',\n    search_placeholder: '輸入您想查找的AI資源',\n    hot_search: '熱門搜索'\n  },\n\n  // 登入相關\n  login: {\n    agree: '登入即視您同意',\n    terms_of_service: '條款和條件',\n    privacy_policy: '隱私政策',\n    password_login: '密碼登入',\n    password_login_title: '密碼登入',\n    message_login: '簡訊登入',\n    message_login_title: '簡訊登入',\n    wechat_login: '微信登入',\n    wechat_login_title: '微信登入',\n    wecom_login: '企業微信',\n    wecom_login_title: '企業微信登入',\n    unregistered_account_desc: '未註冊的賬號，請先註冊後再自動登入',\n    unregistered_account_confirm: '未註冊手機號驗證後自動登錄',\n    quit: '退出',\n    login_by_wechat: '請使用微信登入',\n    login_by_password: '使用密碼登入',\n    login_by_mobile: '使用手機登入',\n    bind_mobile: '綁定手機號',\n    other_login_way: '其他登入方式',\n    login_by_wecom: '請使用企業微信登入',\n    immediate_login: '立即登入',\n    wecom_login_error: '站點綁定的企業微信並非當前登錄的企業微信!\\n請用正確的企微登入。'\n  },\n\n  // 註冊相關\n  register: {\n    agree: '註冊即視您同意',\n    terms_of_service: '條款和條件',\n    privacy_policy: '隱私政策',\n    unregistered: '未註冊'\n  },\n\n  // 聊天相關\n  chat: {\n    search_placholder: '搜索智能體',\n    collapse_side_bar: '收起側邊欄',\n    expand_side_bar: '展開側邊欄',\n    history: '對話記錄',\n    new_conversation: '新對話',\n    edit_conversation: '編輯對話名稱',\n\n    conversation_confirm_delete: '刪除後，聊天記錄將不可恢復。',\n    input: '輸入',\n    output: '輸出',\n    start_generate: '開始生成',\n    regenerate: '重新生成',\n    like: '點讚',\n    dislike: '取消點讚',\n    input_placeholder: '發送訊息',\n    usage_guide: '使用指引',\n    completion_empty_desc: '採用AI大模型智能生成內容，輸入需求即可一鍵成文，快去試試吧',\n    usage_case: '使用案例',\n    usage_scene: '使用場景',\n    online_search: '聯網搜索',\n    completion_generating: '內容生成中，請稍候...',\n    completion_rendering: '內容渲染中...',\n\n    // 暫無可用的智能體\n    no_available_agent: '暫無可用的智能體',\n    completion_completed: '已完成深度思考',\n    completion_thinking: '深度思考中...',\n    completion_scene: '關聯場景：',\n    completion_next_action: '關聯場景：下一步操作',\n\n    not_found_url: '無法找到 URL，請檢查智能體是否設定正確',\n    completion_share_link: '對話鏈接已複製，快去分享吧~',\n    no_available_agent_desc: '很遺憾，你要訪問的智能體已不存在，去看看其他有趣的智能體吧～'\n  },\n\n  // 知識庫相關\n  library: {\n    home: '首頁',\n    name: '知識庫',\n    create: '創建知識庫',\n    all_spaces: '全員空間',\n    space_name: '空間名稱',\n    chat: '知識庫問答',\n    file_count: '{count}個文件',\n    upload_file: '上傳文件',\n    manage: '管理知識庫',\n    search: '搜索知識庫',\n    all_libraries: '全部知識庫',\n    empty_desc: '創建企業知識庫，沉澱團隊知識，提升協作效率',\n\n    create_md: '新建知識',\n    local_upload: '本地上傳',\n    create_folder: '新建文件夾',\n    tmpl_create: '模板創建',\n    github_import: '從Github導入',\n    docs_qq_import: '從騰訊文檔導入',\n    docs_feishu_import: '從釘釘文檔導入',\n    docs_dingtalk_import: '從飛書文檔導入'\n  },\n\n  agent: {\n    no_data: '管理員還未發布智能體',\n    dialogue_type: '對話型',\n    applied_type: '應用型',\n    failed_tip: '請檢查授權金鑰是否可用以及餘額是否充足'\n  },\n\n  prompt: {\n    default_sort: '默認排序',\n    likes_sort: '按最多點讚排序',\n    views_sort: '按最多瀏覽排序',\n    content: '提示詞內容',\n    auth_tip: '您所在的分组无权限',\n    let_use_prompt: '去使用这个提示词'\n  },\n\n  toolbox: {\n    // AI聚合问答\n    name: 'AI聚合问答',\n    title: '準備好了嗎？開始體驗百寶箱吧！',\n    input_placeholder: '百寶箱可以讓你快速找到你需要的答案，Shift+Enter换行，Enter发送',\n    max_agent_count: '最多只能选择{count}个模型',\n    search_placeholder: '搜索網站',\n    direct_access: ' 直接訪問 ',\n    click_access: ' 點擊訪問 ',\n    account_access: ' 共享帳號 ',\n    account_text: ' 以下是共享的帳號與密碼，僅限本人使用',\n    account_text2: '您可以複製下列共享的帳號密碼，訪問目標站點'\n  },\n\n  // 空間相關\n  space: {\n    create: '創建空間',\n    join: '加入空間',\n    manage: '管理空間',\n    member: '成員管理',\n    settings: '空間設置',\n    space_usage: '已用 {used} / {total}',\n    expand: '擴容'\n  },\n\n  // 時間相關\n  time: {\n    just_now: '剛剛',\n    minutes_ago: '{count}分鐘前',\n    hours_ago: '{count}小時前',\n    days_ago: '{count}天前',\n    yesterday: '昨天',\n    today: '今天',\n    week_last: '一週內',\n    week_ago: '一週前'\n  },\n\n  profile: {\n    info: '個人信息',\n    profile: '個人資料',\n    change_password: '修改密碼',\n    login_password: '登入密碼',\n    bind_accounts: '賬戶信息',\n    subscription_info: '訂閱信息',\n    order_info: '訂單記錄',\n    unbind_account: '未綁定',\n    bind_mobile: '手機號',\n    bind_email: '電子郵箱',\n    bind_google: '谷歌賬號',\n    bind_wechat: '微信OpenId',\n    bind: '綁定',\n    unbind: '解綁',\n    change: '更換',\n    logined_devices: '已登入的設備',\n    used_devices: '曾用設備',\n    current_device: '當前設備',\n    unbind_wechat_confirm_desc: '解綁後，將無法使用微信登入，是否繼續？',\n    unbind_wechat_confirm_title: '解綁微信賬號綁定',\n    unbind_wechat_confirm_cancel: '暫不解綁',\n    unbind_wechat_confirm_ok: '確認解綁',\n    renew: '續費',\n    expire_time_desc: '{group_name}將於{day}天後({expire_time})到期，馬上續費延續會員權益',\n    expired_time_desc: '{group_name}已於{expire_time}到期，馬上續費延續會員權益'\n  },\n  response_status: {\n    '400': '請求參數錯誤',\n    '401': '未授權，請登入',\n    '403': '拒絕訪問',\n    '404': '請求資源不存在',\n    '500': '伺服器錯誤',\n    '502': '網關錯誤',\n    '504': '網關超時',\n    '503': '服務不可用'\n  },\n  response_code: {\n    success: '成功',\n    param_error: '參數錯誤',\n    database_error: '數據庫錯誤',\n    network_error: '網絡錯誤，請重新嘗試',\n    system_error: '系統錯誤',\n    auth_error: '認證錯誤',\n    not_found_error: '未找到錯誤',\n    unauthorized_error: '身份認證錯誤',\n    file_error: '文件錯誤',\n    forbidden_error: '用戶已禁用，請聯繫管理員',\n    agent_error: '智能體錯誤',\n    token_expired_error: '身份過期錯誤',\n    verification_code_error: '驗證碼錯誤'\n  },\n  response_message: {\n    unknown_error: '未知錯誤',\n    user_not_found: '用戶不存在',\n    username_or_password_is_incorrect: '用戶名或密碼錯誤',\n    username_already_exists: '用戶名已存在',\n    mobile_already_bind: '手機號已被其他用戶綁定',\n    email_already_bind: '郵箱已被其他用戶綁定',\n    model_changed: '管理員已修改模型，請新建對話',\n    wechat_already_bind: '微信號已被其他用戶綁定'\n  },\n  subscription: {\n    free: '免費版',\n    upgrade: '升級',\n    version_title: '選擇版本',\n    time_title: '選擇購買時長',\n    month: '月',\n    year: '年',\n    credit_month_amount: '每月{amount}積分',\n    agent_bots_title: '可使用智能體',\n    ai_assistant_title: '跨平台的 AI 助手',\n    time_unit_month: '1個月',\n    time_unit_year: '1年',\n    aside_title: '新訂單購買詳情',\n    aside_desc: '為以下用戶購買',\n    payment: '支付方式',\n    wechat_pay: '微信',\n    alipay: '支付寶',\n    manual_pay: '手動轉賬',\n    paypal: 'PayPal',\n    total: '總計',\n    order_title: '訂單支付',\n    pay_amount: '支付金額',\n    pay_by_wechat: '使用 微信掃碼 支付',\n    pay_policy: '支付即視為你同意相關 {policy}',\n    pay_success: '支付成功',\n    pay_confirm: '確認支付完成，請點擊',\n    payed: '已支付',\n    manual_pay_success_title: '訂單已生成',\n    manual_pay_success_desc: '請等待或聯繫管理員確認支付信息',\n    expire_time: '到期時間'\n  },\n  authority: {\n    group_not_permission: '您所在的分組無權限',\n    payment_not_setting: '站點未配置收費方式，請直接聯繫管理員',\n    agent_not_permission: '無權限使用此智能體，請聯繫管理員',\n    login_not_permission: '請先登入',\n    use_range: '使用范围'\n  },\n  upgrade_dialog: {\n    title: '站點註冊用戶已達上限，請聯繫管理員~~',\n    cancel: '關閉註冊'\n  },\n  order: {\n    id: '訂單ID',\n    subscription: '訂閱服務',\n    amount: '訂單金額',\n    pay_type: '支付方式',\n    create_time: '下單時間',\n    status: '狀態',\n    action: '操作',\n    search_placeholder: '請輸入訂單ID',\n\n    payment: '支付',\n    cancel: '取消訂單',\n    cancel_confirm: '確認取消該訂單？',\n\n    status_list: {\n      all: '全部',\n      not_confirm: '待確定',\n      pending: '待支付',\n      paid: '已支付',\n      expired: '已超時',\n      cancel: '已取消'\n    }\n  },\n  filter: {\n    start_time: '開始時間',\n    end_time: '結束時間',\n\n    date_range: {\n      today: '今天',\n      last_7_days: '過去7天',\n      last_4_weeks: '過去4周',\n      last_3_months: '過去3月',\n      last_12_months: '過去12月',\n      this_month: '本月至今',\n      this_quarter: '本季度至今',\n      this_year: '本年至今',\n      all_time: '所有時間'\n    }\n  },\n  table: {\n    footer_text: '共有 {total} 條'\n  },\n  guide: {\n    title: '歡迎使用53AI Hub',\n    description: '當前為初始化環節，需錄入站點等基礎資訊，用於系統基礎配置搭建',\n    website_info: '站點資訊',\n    website_setting: '帳號設置',\n    website_success: '完成安裝',\n    website_info_name: '站點名稱',\n    website_info_name_placeholder: '請輸入站點的名稱',\n    website_info_logo: '站點logo',\n    website_info_logo_placeholder: '請上傳Logo',\n    website_info_logo_change: '修改',\n    website_info_logo_upload: '上傳',\n    website_info_logo_tip:\n      '請上傳1:1比例的方形Logo（建議尺寸：512×512px）支援PNG/JPG格式，文件大小不超過2MB',\n    website_style: '站點風格',\n    website_info_language: '預設語言',\n    website: '網站風格',\n    software: '軟體風格',\n    init_success: '初始化成功！',\n    jump_now: '立即跳轉',\n    jump_tip: '將在 {count} 秒後自動跳轉到首頁...',\n    next: '下一步',\n    init: '初始化',\n    confirm_password: '確認密碼',\n    confirm_password_placeholder: '請再次確認密碼'\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/main.ts",
    "content": "import { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport HubUiX from 'hub-ui-x'\n\nimport App from './App.vue'\nimport { setupI18n } from './locales'\nimport { setupRouter } from './router'\nimport { setupGlobal } from './global'\nimport { setupDirective } from './directive'\nimport { setupPlugins } from './plugins'\nconst pinia = createPinia()\n\nimport SvgIcon from '@/components/SvgIcon.vue'\n\nimport './assets/styles/global.css' // 引入css文件\nimport './assets/styles/element-plus.css' // 引入css文件\nimport './assets/styles/tailwind.css' // 引入css文件\nimport './assets/styles/custom.css' // 引入css文件\nimport './assets/styles/animate.css' // 引入css文件\n\nimport 'element-plus/theme-chalk/el-message.css'\nimport 'element-plus/theme-chalk/el-notification.css'\nimport 'element-plus/theme-chalk/el-message-box.css'\nimport 'element-plus/theme-chalk/el-overlay.css'\nimport 'element-plus/theme-chalk/el-dialog.css'\n\nimport 'hub-ui-x/dist/hub-ui-x.css'\n\nimport 'virtual:svg-icons-register'\n\n\nasync function bootstrap() {\n  const app = createApp(App)\n  setupGlobal(app)\n  setupI18n(app)\n  setupDirective(app)\n  setupRouter(app)\n  setupPlugins(app)\n  app.component('SvgIcon', SvgIcon)\n  app.use(pinia);\n  app.use(HubUiX)\n  app.mount('#app')\n}\n\nbootstrap()\n"
  },
  {
    "path": "web/front/src/renderer/main/plugins/index.ts",
    "content": "// import loginModel from './loginModel'\nexport function setupPlugins(app) {\n  // app.use(loginModel)\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/router/index.ts",
    "content": "import type { App } from 'vue'\nimport type { RouteRecordRaw } from 'vue-router'\nimport { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'\nimport { checkPermission } from '@/utils/permission'\nimport useEnv from '@/hooks/useEnv'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport { useNavigationStore } from '@/stores/modules/navigation'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\nimport { NAVIGATION_TYPE } from '@/constants/navigation'\n\nconst { isOpLocalEnv } = useEnv()\n\nconst routes: RouteRecordRaw[] = [\n  {\n    path: '/',\n    name: 'Home',\n    redirect: () => {\n      return window.innerWidth < 768 || window.electron ? '/agent' : '/index'\n    },\n    // redirect: '/index',\n    component: () => import('@/layout/index.vue'),\n    // component: () => import('@/views/index/agent/index.vue'),\n    children: [\n      {\n        path: '/chat',\n        name: 'Chat',\n        component: () => import('@/views/chat/index.vue')\n      },\n      {\n        path: '/agent',\n        name: 'Agent',\n        component: () => import('@/views/agent/index.vue')\n      },\n      {\n        path: '/toolkit',\n        name: 'Toolkit',\n        component: () => import('@/views/toolkit/index.vue')\n      },\n      {\n        path: '/profile',\n        name: 'Profile',\n        component: () => import('@/views/profile/index.vue'),\n        meta: {\n          pass: true,\n          auth: !window.$isElectron\n        }\n      },\n      {\n        path: '/toolbox',\n        name: 'Toolbox',\n        component: () => import('@/views/desktop/tools/index.vue')\n      },\n      {\n        path: '/prompt',\n        name: 'Prompt',\n        component: () => import('@/views/prompt/index.vue')\n      },\n      {\n        path: '/prompt/:prompt_id',\n        name: 'PromptDetail',\n        component: () => import('@/views/prompt/detail/index.vue'),\n        meta: {\n          parentName: 'Prompt'\n        }\n      },\n      {\n        path: '/order',\n        name: 'Order',\n        component: () => import('@/views/order/index.vue'),\n        meta: {\n          pass: true,\n          auth: true\n        }\n      }\n    ]\n  },\n  {\n    path: '/index',\n    name: 'Index',\n    component: () => import('@/views/index/layout.vue'),\n    children: [\n      {\n        path: '/index-redirect',\n        name: 'HomeRedirect',\n        component: () => import('@/views/index/redirect.vue')\n      },\n      {\n        path: '/index',\n        name: 'HomeIndex',\n        component: () => import('@/views/index/index.vue')\n      },\n      {\n        path: '/index/agent',\n        name: 'HomeAgent',\n        component: () => import('@/views/index/agent/index.vue')\n      },\n      {\n        path: '/index/chat',\n        name: 'HomeChat',\n        component: () => import('@/views/index/agent/chat.vue')\n      },\n      {\n        path: '/index/prompt',\n        name: 'HomePrompt',\n        component: () => import('@/views/index/prompt/index.vue')\n      },\n      {\n        path: '/index/prompt/:prompt_id',\n        name: 'HomePromptDetail',\n        component: () => import('@/views/index/prompt/detail.vue')\n      },\n      {\n        path: '/index/toolkit',\n        name: 'HomeToolkit',\n        component: () => import('@/views/index/toolkit.vue')\n      }\n    ]\n  },\n  {\n    path: '/share/chat',\n    name: 'ShareChat',\n    component: () => import('@/views/share/chat.vue'),\n    meta: {\n      pass: true\n    }\n  },\n  {\n    path: '/guide',\n    name: 'Guide',\n    component: () => import('@/components/Lead/index.vue')\n  },\n  {\n    path: '/desktop',\n    name: 'Desktop',\n    component: () => import('@/views/desktop/index.vue')\n  },\n  {\n    path: '/svglist',\n    name: 'Svg',\n    component: () => import('@/views/svglist/index.vue')\n  }\n]\n\nexport const isHashRouter = !!window.electron\nexport const isHistoryRouter = !window.electron\n\nexport const router = createRouter({\n  // electron环境 需要使用hash跳转\n  history: isHashRouter ? createWebHashHistory() : createWebHistory(),\n  routes,\n  scrollBehavior: () => ({ left: 0, top: 0 })\n})\n\n// 添加路由守卫\nrouter.beforeEach(async (to, _from, next) => {\n  const isGuidePath = to.path === '/guide'\n  if (isGuidePath && _from.path === '/') {\n    next()\n    return\n  }\n\n  if (isOpLocalEnv.value) {\n    try {\n      const { system } = await import('@/api/modules/system')\n      const res = await system.init()\n      if (!res.data && !isGuidePath) {\n        next('/guide')\n        return\n      }\n      if (res.data && isGuidePath) {\n        next('/index')\n        return\n      }\n    } catch (error) {\n      console.log(error)\n    }\n  }\n\n  const userStore = useUserStore()\n\n  // 单点登录\n  if (to.path === '/index/apilogin') {\n    await userStore.sso_login()\n    next('/')\n    return\n  }\n\n  const isLoggedIn = localStorage.getItem('access_token') // 或其他判断用户是否登录的方法\n  if (isLoggedIn) {\n    userStore.getUserInfo()\n  }\n\n  const enterpriseStore = useEnterpriseStore()\n  if (!enterpriseStore.display_name) await enterpriseStore.loadInfo()\n  const isWebsite = !enterpriseStore.isSoftStyle\n  const isIndex = to.path.startsWith('/index')\n  const isPass = to.meta.pass\n\n  if (isPass || window.electron) {\n  } else if (isIndex && !isWebsite) {\n    next('/agent')\n  } else if (!isIndex && isWebsite) {\n    next('/')\n  }\n  if (to.meta.auth) {\n    // 使用统一的认证检查\n    if (!isLoggedIn) {\n      await checkPermission()\n      next('/') // 重定向到首页\n      return\n    }\n  }\n  next()\n})\n\n// 动态加载路由\nexport const initialDynamicRoutes = async () => {\n  const enterpriseStore = useEnterpriseStore()\n  const parentName = enterpriseStore.isSoftStyle ? 'Home' : 'Index'\n  const parentRoute = router.getRoutes().find((item) => item.name === parentName)\n  const navigationStore = useNavigationStore()\n  await navigationStore.fetchNavigations()\n  // 自定义页\n  const customNavigations = navigationStore.navigations.filter(\n    (item) => item.type === NAVIGATION_TYPE.CUSTOM\n  )\n  customNavigations.forEach((item) => {\n    let childRoute: any = null\n    if (parentRoute) {\n      if (enterpriseStore.isSoftStyle) {\n        childRoute = {\n          path: item.jump_path,\n          name: `Home${item.name}`,\n          component: () => import(`@/views/custom/index.vue`),\n          meta: {\n            softCustom: true\n          }\n        }\n      } else {\n        childRoute = {\n          path: item.menu_path,\n          name: `Home${item.name}`,\n          component: () => import(`@/views/custom/index.vue`)\n        }\n      }\n    }\n    router.addRoute(parentName, childRoute)\n  })\n  router.addRoute({\n    path: '/:pathMatch(.*)*',\n    name: 'NotFound',\n    // redirect: '/404',\n    redirect: '/agent'\n  })\n  router.addRoute({\n    path: '/index/:pathMatch(.*)*',\n    name: 'IndexNotFound',\n    redirect: () => {\n      const redirect = window.location.hash.replace('#', '')\n      return `/index-redirect?redirect=${redirect}`\n    }\n  })\n}\n\nexport async function setupRouter(app: App) {\n  app.use(router)\n  await router.isReady()\n  await initialDynamicRoutes()\n  // 动态路由加载完成后，确认当前路径有效并重新激活它\n  const { fullPath } = router.currentRoute.value\n  const isMatched = router.resolve(fullPath).matched.length > 0\n  if (isMatched && fullPath !== '/') {\n    await router.replace(fullPath)\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/stores/index.ts",
    "content": "\n"
  },
  {
    "path": "web/front/src/renderer/main/stores/modules/agent.ts",
    "content": "import { defineStore } from 'pinia'\nimport groupApi from '@/api/modules/group'\nimport agentApi from '@/api/modules/agent'\nimport { cacheManager } from '@/utils/cache'\n\nconst AGENT_TYPE = 3\n\n// 缓存key常量\nconst CACHE_KEYS = {\n  AGENT_LIST: 'agent_list',\n  CATEGORY_LIST: 'category_list'\n} as const\n\nexport const useAgentStore = defineStore('agent-store', {\n  state: (): {\n    categorys: Category.State[]\n    agentList: Agent.State[]\n    boxHeight: number\n  } => ({\n    categorys: [],\n    agentList: [],\n    boxHeight: 0\n  }),\n  actions: {\n    setBoxHeight(height: number) {\n      this.boxHeight = height\n    },\n    async loadAgentList(): Promise<Agent.State[]> {\n      const fetchAgents = async () => {\n        // const userStore = useUserStore()\n        // const { is_internal } = userStore.info\n        // 接口不用区分内外部，直接展示，然后点击时候判断权限\n        // const { data: { agents = [] } = {} } = is_internal ? await agentApi.internalList() : await agentApi.list()\n        const { data: { agents = [] } = {} } = await agentApi.available({ limit: 500 })\n        return agents.map((originalItem: Agent.State) => {\n          const item = { ...originalItem }\n          item.custom_config_obj = item.custom_config ? JSON.parse(item.custom_config) : {}\n          item.settings_obj = item.settings ? JSON.parse(item.settings) : {}\n          return item\n        })\n      }\n\n      this.agentList = await cacheManager.getOrFetch(CACHE_KEYS.AGENT_LIST, fetchAgents)\n      return this.agentList\n    },\n\n    async loadCategorys() {\n      const fetchCategories = async () => {\n        const res = await groupApi.list(AGENT_TYPE)\n        return [{ group_id: 0, group_name: window.$t('common.all') }].concat(\n          res.data\n        ) as Category.State[]\n      }\n\n      this.categorys = await cacheManager.getOrFetch(CACHE_KEYS.CATEGORY_LIST, fetchCategories)\n    }\n  }\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/stores/modules/browser-setting.ts",
    "content": "import { defineStore } from 'pinia'\n\n\nexport const useBrowserSettingStore = defineStore('browser-setting', {\n  state: () => ({\n    toolbar_enabled: true,\n    toolbar_menus: [\n      { name: '生成Q&A', value: 'answer' },\n      { name: '网页问答', value: 'parser' },\n      { name: '内容总结', value: 'sum' },\n      { name: '网页翻译', value: 'translate' },\n    ],\n    // 划词开关\n    glider_enabled: false,\n    glider_type: 'immidate',\n    glider_menus: [\n      { name: '解析', value: 'parser' },\n      { name: '问答', value: 'answer' },\n      { name: '总结', value: 'sum' },\n      { name: '翻译', value: 'translate' },\n    ],\n\n    boot_up_enabled: false,\n    default_browser_enabled: false,\n    default_search_url: 'https://chat.baidu.com/search?word=_word_',\n    default_tab_url: '',\n\n  }),\n\n  getters: {\n\n  },\n  actions: {\n\n  }\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/stores/modules/conversation.ts",
    "content": "import { defineStore } from 'pinia'\nimport conversationApi from '@/api/modules/conversation'\nimport { getSimpleDateFormatString } from '@/utils/moment'\nimport { setRouterQuery } from '@/utils/router'\nimport { isHashRouter, router } from '@/router'\nimport { cacheManager } from '@/utils/cache'\n\n// 添加类型定义\ninterface RouterOptions {\n  agent_id?: number | null\n  conversation_id?: number | null\n}\n\ninterface UsualAgent extends Agent.State {\n  is_fixed: boolean\n}\n\nconst USUAL_AGENTS_KEY = 'usual_agents'\n\n// 工具函数\nconst getLocalStorage = <T>(key: string, defaultValue: T): T => {\n  try {\n    const item = localStorage.getItem(key)\n    return item ? JSON.parse(item) : defaultValue\n  } catch (e) {\n    console.error(`Error reading localStorage key \"${key}\":`, e)\n    return defaultValue\n  }\n}\n\nconst CACHE_KEYS = {\n  CONVERSATION_LIST: 'conversation_list'\n}\n\nexport const useConversationStore = defineStore('conversation-store', {\n  state: (): {\n    conversations: Conversation.Info[]\n    agents: Agent.State[]\n    usual_agents: UsualAgent[]\n    current_agentid: number\n    current_conversationid: number\n    base_path: string\n    next_agent_prepare: Partial<Conversation.NextAgentPrepare>\n  } => ({\n    conversations: [],\n    agents: [],\n    usual_agents: getLocalStorage(USUAL_AGENTS_KEY, []),\n    current_agentid: 0,\n    current_conversationid: 0,\n    base_path: '/chat',\n    next_agent_prepare: {}\n  }),\n  getters: {\n    currentAgent: (state) => {\n      return (\n        state.usual_agents.find((item) => item.agent_id === state.current_agentid) || {\n          name: '',\n          logo: '',\n          agent_id: 0,\n          configs: '{}',\n          custom_config_obj: {}\n        }\n      )\n    },\n    currentConversation: (state) => {\n      return (\n        state.conversations.find(\n          (item) => item.conversation_id === state.current_conversationid\n        ) || {\n          conversation_id: 0,\n          title: '',\n          create_time: 0,\n          update_time: 0,\n          top: 0,\n          is_valid: 0,\n          virtual_id: Date.now().toString()\n        }\n      )\n    }\n  },\n  actions: {\n    setNextAgentPrepare(data: Partial<Conversation.NextAgentPrepare>) {\n      this.next_agent_prepare = data\n    },\n\n    setBasePath(path: string) {\n      this.base_path = path || '/chat'\n    },\n\n    findAgentByAgentId(agent_id: number) {\n      return this.agents.find((item) => item.agent_id === agent_id)\n    },\n\n    async loadConversations() {\n      const fetchConversations = async () => {\n        const res = await conversationApi.list()\n        return res.data.conversations.map((item) => {\n          return {\n            ...item,\n            created_at: getSimpleDateFormatString({\n              date: item.created_time,\n              format: 'YYYY.MM.DD hh:mm'\n            }),\n            updated_at: getSimpleDateFormatString({\n              date: item.updated_time,\n              format: 'YYYY.MM.DD hh:mm'\n            })\n          }\n        })\n      }\n\n      this.conversations = await cacheManager.getOrFetch(\n        CACHE_KEYS.CONVERSATION_LIST,\n        fetchConversations\n      )\n      return this.conversations\n    },\n\n    saveUsualAgents() {\n      try {\n        localStorage.setItem(USUAL_AGENTS_KEY, JSON.stringify(this.usual_agents))\n      } catch (error) {\n        console.error('Failed to save usual agents:', error)\n      }\n    },\n\n    async pushUsualAgent(agent: Agent.State) {\n      const index = this.usual_agents.findIndex((item) => item.agent_id === agent.agent_id)\n\n      const newAgent: UsualAgent = {\n        ...agent,\n        is_fixed: index > -1 ? this.usual_agents[index].is_fixed : false\n      }\n\n      // 将数组分为固定和非固定两部分\n      const fixedAgents = this.usual_agents.filter(\n        (item) => item.is_fixed && item.agent_id !== agent.agent_id\n      )\n      const unfixedAgents = this.usual_agents.filter(\n        (item) => !item.is_fixed && item.agent_id !== agent.agent_id\n      )\n\n      // 根据 is_fixed 状态决定插入位置\n      if (newAgent.is_fixed) {\n        this.usual_agents = [newAgent, ...fixedAgents, ...unfixedAgents]\n      } else {\n        this.usual_agents = [...fixedAgents, newAgent, ...unfixedAgents]\n      }\n      this.saveUsualAgents()\n    },\n\n    toggleUsualAgentFixed(agent: UsualAgent) {\n      const targetAgent = this.usual_agents.find((item) => item.agent_id === agent.agent_id)\n      if (targetAgent) {\n        targetAgent.is_fixed = !targetAgent.is_fixed\n\n        // 将数组分为固定和非固定两部分（不包括目标agent）\n        const fixedAgents = this.usual_agents.filter(\n          (item) => item.is_fixed && item.agent_id !== agent.agent_id\n        )\n        const unfixedAgents = this.usual_agents.filter(\n          (item) => !item.is_fixed && item.agent_id !== agent.agent_id\n        )\n\n        // 根据新的 is_fixed 状态重新排序\n        this.usual_agents = targetAgent.is_fixed\n          ? [targetAgent, ...fixedAgents, ...unfixedAgents]\n          : [...fixedAgents, targetAgent, ...unfixedAgents]\n\n        this.saveUsualAgents()\n      }\n    },\n\n    updateUsualAgents(agent: UsualAgent) {\n      this.usual_agents = this.usual_agents.map((item) =>\n        item.agent_id === agent.agent_id ? { ...item, ...agent } : item\n      )\n      this.saveUsualAgents()\n    },\n\n    deleteUsualAgent(agent: UsualAgent) {\n      this.usual_agents = this.usual_agents.filter((item) => item.agent_id !== agent.agent_id)\n      this.saveUsualAgents()\n    },\n\n    createConversation(agent_id: number, title: string = ''): Promise<Conversation.Info> {\n      return conversationApi\n        .create({\n          agent_id,\n          title\n        })\n        .then((res) => res.data)\n    },\n\n    addConversation(conversation: Conversation.Info) {\n      const newConversation = {\n        ...conversation,\n        created_at: getSimpleDateFormatString({\n          date: conversation.created_time,\n          format: 'YYYY.MM.DD hh:mm'\n        }),\n        updated_at: getSimpleDateFormatString({\n          date: conversation.updated_time,\n          format: 'YYYY.MM.DD hh:mm'\n        })\n      }\n      this.conversations.unshift(newConversation)\n    },\n\n    updateConversation(conversation: Partial<Conversation.Info>) {\n      this.conversations = this.conversations.map((item) =>\n        item.conversation_id === conversation.conversation_id ? { ...item, ...conversation } : item\n      )\n    },\n\n    async editConversation(conversation: Pick<Conversation.Info, 'conversation_id' | 'title'>) {\n      const data = { title: conversation.title }\n      await conversationApi.edit(conversation.conversation_id, data)\n      this.updateConversation(conversation)\n    },\n\n    async delConversation(conversation: Conversation.Info) {\n      this.conversations = this.conversations.filter(\n        (item) => item.conversation_id !== conversation.conversation_id\n      )\n      await conversationApi.del(conversation.conversation_id)\n      if (this.current_conversationid === conversation.conversation_id) {\n        this.setCurrentState(this.current_agentid, 0)\n      }\n    },\n\n    updateAgents(agents: Agent.State[]) {\n      this.agents = agents\n      // 过滤掉不在 agents 列表中的 usual_agents\n      this.usual_agents = this.usual_agents.filter((usualAgent) =>\n        agents.some((agent) => agent.agent_id === usualAgent.agent_id)\n      )\n      this.saveUsualAgents()\n    },\n\n    setCurrentState(agent_id: number, conversation_id: number) {\n      let newAgent_id = agent_id\n      let newConversation_id = conversation_id\n      if (agent_id) {\n        const agent = this.agents.find((item) => item.agent_id === agent_id)\n        if (!agent) {\n          newAgent_id = this.agents[0]?.agent_id || 0\n        }\n      }\n      if (conversation_id) {\n        const conversation = this.conversations.find(\n          (item) => item.conversation_id === conversation_id\n        )\n        if (!conversation) {\n          newConversation_id = 0\n        }\n      }\n      this.current_agentid = newAgent_id\n      this.current_conversationid = newConversation_id\n      this.setRouter({ agent_id: newAgent_id || null, conversation_id: newConversation_id || null })\n    },\n\n    clearCurrentState() {\n      this.current_agentid = 0\n      this.current_conversationid = 0\n    },\n\n    setRouter(data: RouterOptions = {}) {\n      if (!data.agent_id) return\n      // electron环境 需要使用hash跳转 使用setRouterQuery\n      if (isHashRouter) {\n        setRouterQuery(data, this.base_path)\n      } else {\n        const url = `${this.base_path}?agent_id=${data.agent_id}${data.conversation_id ? `&conversation_id=${data.conversation_id}` : ''}`\n        if (window.location.pathname.includes('/chat')) {\n          window.history.replaceState(null, '', url)\n        } else {\n          router.push({\n            path: this.base_path,\n            query: { agent_id: data.agent_id, conversation_id: data.conversation_id || null }\n          })\n        }\n      }\n    }\n  }\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/stores/modules/enterprise.ts",
    "content": "import { defineStore } from 'pinia'\nimport enterpriseApi from '@/api/modules/enterprise'\nimport { cacheManager } from '@/utils/cache'\n\nconst getDefaultLogo = () => window.$getPublicPath('/images/default_logo.png')\n\nconst CACHE_KEYS = {\n  ENTERPRISE_INFO: 'enterprise_info'\n}\n\nexport const useEnterpriseStore = defineStore('enterprise-store', {\n  state: (): Enterprise.State => ({\n    id: 0,\n    type: '',\n    banner: '',\n    timezone: '',\n    domain: '',\n    slogan: '',\n    status: 0,\n    template_type: '',\n    layout_type: '',\n    created_time: 0,\n    updated_time: 0,\n    logo: getDefaultLogo(),\n    ico: getDefaultLogo(),\n    display_name: '',\n    language: 'zh-cn',\n    copyright: '',\n    keywords: [],\n    description: '',\n    banner_info: {\n      url_list: [],\n      interval: ''\n    },\n    template_style_info: {\n      style_type: 'software'\n    },\n    is_independent: false,\n    is_enterprise: false,\n    is_industry: false,\n    is_install_wecom: false\n  }),\n  getters: {\n    isSoftStyle: (state) => state.template_style_info.style_type === 'software'\n  },\n  actions: {\n    initTemplateStyle() {\n      let {\n        theme_color,\n        text_color,\n        nav_bg_color,\n        nav_text_color,\n        page_footer_bg_color,\n        page_footer_text_color\n      } = this.template_style_info\n      theme_color = theme_color || '#2563eb'\n      text_color = text_color || '#333333'\n      nav_bg_color = nav_bg_color || '#ffffff'\n      nav_text_color = nav_text_color || '#333333'\n      page_footer_bg_color = page_footer_bg_color || '#18191f'\n      page_footer_text_color = page_footer_text_color || '#f2f2f2'\n\n      document.documentElement.style.setProperty('--el-color-primary', theme_color)\n      document.documentElement.style.setProperty('--el-color-primary-light-3', `${theme_color}cc`)\n      document.documentElement.style.setProperty('--el-color-primary-light-5', `${theme_color}aa`)\n      document.documentElement.style.setProperty('--el-color-primary-light-7', `${theme_color}99`)\n      document.documentElement.style.setProperty('--el-color-primary-light-8', `${theme_color}66`)\n      document.documentElement.style.setProperty('--el-color-primary-light-9', `${theme_color}33`)\n      document.documentElement.style.setProperty('--el-text-color-primary', text_color)\n      document.documentElement.style.setProperty('--el-text-color-regular', `${text_color}cc`)\n      document.documentElement.style.setProperty('--el-text-color-secondary', `${text_color}99`)\n      document.documentElement.style.setProperty('--el-text-color-placeholder', `${text_color}66`)\n      document.documentElement.style.setProperty('--el-color-nav-bg', nav_bg_color)\n      document.documentElement.style.setProperty('--el-color-nav-text', nav_text_color)\n      document.documentElement.style.setProperty('--el-color-page-footer-bg', page_footer_bg_color)\n      document.documentElement.style.setProperty(\n        '--el-color-page-footer-text',\n        page_footer_text_color\n      )\n    },\n    setMetaDescription(description: string = '') {\n      this.description = description\n      if (!description) return\n      const meta = document.querySelector('meta[name=\"description\"]')\n      if (meta) {\n        meta.setAttribute('content', description)\n      } else {\n        const meta = document.createElement('meta')\n        meta.setAttribute('name', 'description')\n        meta.setAttribute('content', description)\n        document.head.appendChild(meta)\n      }\n    },\n    setMetaKeywords(keywords: string[] = []) {\n      this.keywords = keywords\n      if (!keywords.length) return\n      const meta = document.querySelector('meta[name=\"keywords\"]')\n      if (meta) {\n        meta.setAttribute('content', keywords.join(', '))\n      } else {\n        const meta = document.createElement('meta')\n        meta.setAttribute('name', 'keywords')\n        meta.setAttribute('content', keywords.join(', '))\n        document.head.appendChild(meta)\n      }\n    },\n    setDocumentTitleAndIcon(title: string, iconUrl: string) {\n      document.title = title\n      const link = document.querySelector('link[rel=\"icon\"]') || document.createElement('link')\n      link.rel = 'icon'\n      link.href = iconUrl || getDefaultLogo()\n      if (!document.querySelector('link[rel=\"icon\"]')) {\n        document.head.appendChild(link)\n      }\n    },\n    setAppLanguage(language: string) {\n      const lang = language === 'En' ? 'en' : language\n      this.language = lang\n    },\n    saveToStorage() {\n      localStorage.setItem(\n        'enterprise',\n        JSON.stringify({\n          logo: this.logo,\n          display_name: this.display_name,\n          language: this.language\n        })\n      )\n    },\n    async loadFromStorage(): Promise<Enterprise.State> {\n      const storedEnterprise = localStorage.getItem('enterprise')\n      if (storedEnterprise) {\n        try {\n          const parsedEnterprise = JSON.parse(storedEnterprise)\n          this.logo = parsedEnterprise.logo || getDefaultLogo()\n          this.display_name = parsedEnterprise.display_name\n          this.language = parsedEnterprise.language\n\n          this.setDocumentTitleAndIcon(parsedEnterprise.display_name, parsedEnterprise.logo)\n          this.setAppLanguage(parsedEnterprise.language)\n        } catch (error) {\n          console.error('解析localStorage中的企业信息失败', error)\n        }\n      }\n      return this\n    },\n    async loadInfo(): Promise<Enterprise.State> {\n      const fetchInfo = async () => {\n        const res = await enterpriseApi.current()\n        return res.data.enterprise\n      }\n\n      try {\n        const info = await cacheManager.getOrFetch(CACHE_KEYS.ENTERPRISE_INFO, fetchInfo)\n        const {\n          display_name,\n          logo,\n          language,\n          copyright,\n          ico,\n          keywords,\n          description,\n          banner,\n          template_type,\n          type,\n          wecom_install_info\n        } = info\n\n        this.logo = logo || getDefaultLogo()\n        this.ico = ico || this.logo || getDefaultLogo()\n        this.display_name = display_name\n        this.copyright = copyright\n        this.description = description || ''\n        this.is_independent = type === 'independent'\n        this.is_enterprise = type === 'enterprise'\n        this.is_industry = type === 'industry'\n        this.is_install_wecom = wecom_install_info?.install_wecom_app || false\n        // 兼容都为false的情况\n        if (!this.is_independent && !this.is_enterprise && !this.is_industry)\n          this.is_independent = true\n\n        try {\n          this.keywords = JSON.parse(keywords || '[]')\n        } catch (error) {\n          // console.error(error)\n          this.keywords = []\n        }\n        try {\n          this.banner_info = JSON.parse(banner || '{}')\n        } catch (error) {\n          // console.error(error)\n          this.banner_info = {\n            url_list: [],\n            interval: ''\n          }\n        }\n        try {\n          this.template_style_info = JSON.parse(template_type || '{}')\n        } catch (error) {\n          // console.error(error)\n          this.template_style_info = {}\n        }\n        if (!['website', 'software'].includes(this.template_style_info.style_type))\n          this.template_style_info.style_type = 'website'\n        // 屏幕宽度小于768或electron环境 默认软件风格\n        const isMobile = window.innerWidth < 768 || window.electron\n        // 移动端默认软件风格\n        if (isMobile) this.template_style_info.style_type = 'software'\n\n        this.setAppLanguage(language)\n        this.setDocumentTitleAndIcon(display_name, this.ico)\n        this.setMetaKeywords(this.keywords)\n        this.setMetaDescription(this.description)\n        this.saveToStorage()\n        this.initTemplateStyle()\n      } catch (error) {\n        console.error('获取企业信息失败', error)\n      }\n      return this\n    }\n  }\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/stores/modules/global.ts",
    "content": "import { defineStore } from 'pinia'\nimport { useBasicLayout } from '@/hooks/useBasicLayout'\n\nconst { isMdScreen } = useBasicLayout()\n\n\nexport const useGlobalStore = defineStore('global', {\n  state: () => ({\n    // 侧边栏是否可见\n    siderVisible: true,\n    // 侧边栏是否隐藏\n    siderCollapsed: false,\n  }),\n\n  getters: {\n    isMdScreen: () => isMdScreen.value,\n  },\n  actions: {\n    toggleSider() {\n      if (this.isMdScreen) {\n        this.siderCollapsed = !this.siderCollapsed\n        return\n      }\n      this.siderVisible = !this.siderVisible\n      if (this.siderVisible) {\n        this.siderCollapsed = false\n      }\n    },\n    hoverSider(visible: boolean) {\n      if (this.isMdScreen && !visible) {\n        return\n      }\n      if (!this.siderVisible) {\n        this.siderCollapsed = visible\n      }\n    },\n  }\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/stores/modules/links.ts",
    "content": "import { defineStore } from 'pinia'\nimport groupApi from '@/api/modules/group'\nimport linksApi from '@/api/modules/links'\nimport { cacheManager } from '@/utils/cache'\n\nconst all_Group = { group_name: window.$t('common.all'), group_id: 0 }\n\nconst LINK_TYPE = 2\n\nconst CACHE_KEYS = {\n  CATEGORY_LIST: 'links_category_list',\n  LINKS_LIST: 'links_list',\n}\n\nexport const useLinksStore = defineStore('links', {\n  state: (): {\n    categorys: Category.State[]\n    links: Link.State[]\n  } => ({\n    categorys: [{ ...all_Group }],\n    links: [],\n  }),\n\n  getters: {\n\n  },\n  actions: {\n    async loadCategorys() {\n      const fetchCategorys = async () => {\n        const res = await groupApi.list(LINK_TYPE)\n        const list = res.data.map((item) => {\n          item.visible = true\n          return item\n        })\n        list.unshift(all_Group)\n        return list\n      }\n      this.categorys = await cacheManager.getOrFetch(\n        CACHE_KEYS.CATEGORY_LIST,\n        fetchCategorys\n      )\n    },\n\n    async loadLinks(): Promise<void> {\n      const fetchLinks = async () => {\n        const res = await linksApi.list()\n        return res.data.map(item => {\n          item.visible = true\n          return item\n        })\n      }\n      this.links = await cacheManager.getOrFetch(\n        CACHE_KEYS.LINKS_LIST,\n        fetchLinks\n      )\n    }\n  }\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/stores/modules/navigation.ts",
    "content": "import { defineStore } from 'pinia'\nimport navigationApi from '@/api/modules/navigation'\nimport { NAVIGATION_TYPE, NAVIGATION_TARGET } from '@/constants/navigation'\nimport { cacheManager } from '@/utils/cache'\nimport { IMG_HOST } from '@/api/host'\n\nconst getFormatData = (data: Navigation.State) => {\n  try {\n    data.config = typeof data.config === 'string' ? JSON.parse(data.config) : data.config\n  } catch (error) {\n    data.config = {}\n  }\n  data.type = +data.type || +data.config.type || NAVIGATION_TYPE.SYSTEM\n  // data.type_label = NAVIGATION_TYPE_LABEL_MAP.get(data.type)\n  data.target = +data.target || +data.config.target || NAVIGATION_TARGET.SELF\n  // data.target_label = NAVIGATION_TARGET_LABEL_MAP.get(data.target)\n  data.url = data.menu_path = data.jump_path = data.jump_path || ''\n  if ([NAVIGATION_TYPE.CUSTOM, NAVIGATION_TYPE.SYSTEM].includes(data.type)) {\n    if (data.menu_path !== '/index') data.menu_path = `/index${data.jump_path}`\n    data.url = `${location.origin}/#${data.menu_path}`\n  }\n\n  // 系统页面图标固定\n  if (data.type === 1) {\n    const pathIconMap: Record<string, number> = {\n      '/index': 1,\n      '/agent': 2,\n      '/prompt': 3,\n      '/toolkit': 4\n    }\n    data.icon = `${IMG_HOST}/navigation/icon${pathIconMap[data.jump_path]}.png`\n  } else if (data.icon?.indexOf('default') !== -1) {\n    data.icon = `${IMG_HOST}/navigation/icon5.png`\n  }\n  return data\n}\n\nconst CACHE_KEYS = {\n  NAVIGATION_LIST: 'navigation_list'\n}\n\nconst cacheNavigations = JSON.parse(localStorage.getItem(CACHE_KEYS.NAVIGATION_LIST) || '[]')\n\nexport const useNavigationStore = defineStore('navigation', {\n  state: (): {\n    navigations: Navigation.State[]\n    agentNavigation: Partial<Navigation.State>\n    promptNavigation: Partial<Navigation.State>\n    toolkitNavigation: Partial<Navigation.State>\n    homeNavigation: Partial<Navigation.State>\n    loading: boolean\n  } => ({\n    navigations: cacheNavigations,\n    agentNavigation: cacheNavigations.find((item) => item.jump_path === '/agent') || {},\n    promptNavigation: cacheNavigations.find((item) => item.jump_path === '/prompt') || {},\n    toolkitNavigation: cacheNavigations.find((item) => item.jump_path === '/toolkit') || {},\n    homeNavigation: cacheNavigations.find((item) => item.jump_path === '/index') || {},\n    loading: false\n  }),\n\n  getters: {},\n  actions: {\n    async fetchNavigations(): Promise<Navigation.State[]> {\n      this.loading = true\n      const fetchData = async () => {\n        const { list = [] } = await navigationApi.list().catch(() => {\n          this.loading = false\n        })\n        if (!list.length) {\n          await navigationApi.init()\n          return fetchData()\n        }\n        return list\n      }\n      const list = await cacheManager.getOrFetch(CACHE_KEYS.NAVIGATION_LIST, fetchData)\n      this.loading = false\n      this.navigations = list.filter((item) => +item.status).map((item) => getFormatData(item))\n      this.agentNavigation = this.navigations.find((item) => item.jump_path === '/agent') || {}\n      this.promptNavigation = this.navigations.find((item) => item.jump_path === '/prompt') || {}\n      this.toolkitNavigation = this.navigations.find((item) => item.jump_path === '/toolkit') || {}\n      this.homeNavigation = this.navigations.find((item) => item.jump_path === '/index') || {}\n      localStorage.setItem(CACHE_KEYS.NAVIGATION_LIST, JSON.stringify(this.navigations))\n      return this.navigations\n    }\n  }\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/stores/modules/prompt.ts",
    "content": "\n\nimport { defineStore } from 'pinia'\nimport groupApi from '@/api/modules/group'\nimport promptApi from '@/api/modules/prompt'\n\nconst PROMPT_TYPE = 5\nexport const usePromptStore = defineStore('prompt-store', {\n  state: (): {\n    categorys: Category.State[]\n    promptList: Prompt.State[]\n  } => ({\n    categorys: [],\n    promptList: []\n  }),\n  actions: {\n    async loadPromptList() {\n      try {\n        const res = await promptApi.list()\n        this.promptList = res.data.prompts.map((item: Prompt.State) => {\n          try {\n            item.custom_config_obj = item.custom_config ? JSON.parse(item.custom_config) : {}\n          } catch (error) {\n            item.custom_config_obj = {}\n          }\n          return item\n        })\n        return this.promptList\n      } catch (error) {\n        return []\n      }\n    },\n    async loadCategorys() {\n      const res = await groupApi.list(PROMPT_TYPE)\n      this.categorys = [{ group_id: 0, group_name: window.$t('common.all') }].concat(res.data) as Category.State[]\n    },\n  },\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/stores/modules/user.ts",
    "content": "import { defineStore } from 'pinia'\nimport userApi from '@/api/modules/user'\nimport { subscriptionApi } from '@/api/modules/subscription'\n\nimport eventBus from '@/utils/event-bus'\nimport { getSimpleDateFormatString } from '@/utils/moment'\nimport { EVENT_NAMES } from '@/constants/events'\nimport useEnv from '@/hooks/useEnv'\n\nconst { isOpLocalEnv } = useEnv()\n\nexport const DEFAULT_GROUP_NAME = '免费版'\nexport const DEFAULT_GROUP_ICON = 'vip-1'\n\ninterface UpdateData {\n  nickname?: string\n  avatar?: string\n}\n\nconst TOKEN_KEY = 'access_token'\n\nconst ONE_DAY_MS = 1000 * 60 * 60 * 24\n\nconst DEFAULT_USER: User.Info = {\n  access_token: localStorage.getItem(TOKEN_KEY) || '',\n  user_id: '',\n  openid: '',\n  username: '',\n  nickname: '',\n  avatar: '',\n  email: '',\n  eid: 0,\n  role: 0,\n  mobile: '',\n  group_id: 0,\n  group_ids: [],\n  group_name: DEFAULT_GROUP_NAME,\n  group_icon: DEFAULT_GROUP_ICON,\n  group_expire_day: 99,\n  group_isexpired: false,\n  group_expire_time: '',\n  is_internal: false\n}\n\nexport const useUserStore = defineStore('user-store', {\n  state: (): {\n    info: User.Info\n    is_login: boolean\n    subscriptions: Subscription.State[]\n  } => ({\n    info: { ...DEFAULT_USER },\n    is_login: !!DEFAULT_USER.access_token,\n    subscriptions: []\n  }),\n  actions: {\n    async login(data: User.LoginForm) {\n      const res = await userApi.login(data)\n      this.setAccessToken(res.data.access_token)\n      await this.getUserInfo()\n      eventBus.emit(EVENT_NAMES.LOGIN_SUCCESS)\n    },\n\n    async sms_login(data: User.SmsLoginForm) {\n      const res = await userApi.sms_login(data)\n      this.setAccessToken(res.data.access_token)\n      await this.getUserInfo()\n      eventBus.emit(EVENT_NAMES.LOGIN_SUCCESS)\n    },\n\n    async wechat_login(params: { unionid?: string }) {\n      const res = await userApi.wechat_login(params).catch(() => ({ data: { access_token: '' } }))\n      if (!res.data.user.access_token) return Promise.reject(new Error('access_token is empty'))\n      this.setAccessToken(res.data.user.access_token)\n      await this.getUserInfo()\n      eventBus.emit(EVENT_NAMES.LOGIN_SUCCESS)\n      return res.data\n    },\n\n    // 单点登录\n    async sso_login() {\n      const params: User.SsoLoginParam = {\n        sign: '',\n        timestamp: '',\n        username: ''\n      }\n      const searchParams = new URLSearchParams(window.location.search)\n      searchParams.forEach((value, key) => {\n        params[key] = value\n      })\n      const res = await userApi.ssoLogin({\n        sign: params.sign,\n        timestamp: params.timestamp,\n        username: params.username\n      })\n      if (res.code === 0) {\n        this.setAccessToken(res.data.access_token)\n        await this.getUserInfo()\n        eventBus.emit(EVENT_NAMES.LOGIN_SUCCESS)\n      }\n    },\n\n    async bind_wechat(data: User.BindWechatForm) {\n      const res = await userApi.bind_wechat(data)\n      const isCreated = Boolean(res.data.access_token && data.mobile)\n      if (isCreated) this.setAccessToken(res.data.access_token)\n      await this.getUserInfo()\n      if (isCreated) eventBus.emit(EVENT_NAMES.LOGIN_SUCCESS)\n    },\n\n    async unbind_wechat() {\n      await userApi.unbind_wechat()\n      await this.getUserInfo()\n    },\n\n    async register(data: User.RegisterForm) {\n      const registerData = {\n        ...data,\n        nickname: data.nickname || data.username\n      }\n      const res = await userApi.register(registerData)\n      this.setAccessToken(res.data.access_token)\n      await this.getUserInfo()\n    },\n\n    async reset_password(data: User.ResetPasswordForm) {\n      const newPasswordData = {\n        ...data\n      }\n      await userApi.reset_password(newPasswordData)\n      await this.getUserInfo()\n    },\n\n    async change_mobile(data: User.ChangeMobileForm, id: string) {\n      const newMobileData = {\n        ...data\n      }\n      await userApi.change_mobile(newMobileData, id)\n      await this.getUserInfo()\n    },\n\n    async update(data: UpdateData) {\n      const res = await userApi.update(data)\n      Object.assign(this.info, {\n        avatar: res.data.avatar,\n        nickname: res.data.nickname\n      })\n    },\n\n    async getUserInfo() {\n      if (!localStorage.getItem(TOKEN_KEY)) return\n      try {\n        const [res, { list: subscription_list = [] }] = await Promise.all([\n          userApi.me(),\n          subscriptionApi.list()\n        ])\n        const info = {\n          access_token: res.data.access_token || '',\n          user_id: res.data.user_id || '',\n          openid: res.data.openid || '',\n          username: res.data.username || '',\n          nickname: res.data.nickname || '',\n          avatar:\n            res.data.avatar.replace(/^(\\/\\/)/, 'http://') ||\n            'https://chat.53ai.com/images/robot_avatar.png',\n          email: res.data.email || '',\n          eid: res.data.eid || 0,\n          role: res.data.role || 0,\n          mobile: res.data.mobile || '',\n          group_id: res.data.group_id || 0,\n          group_ids: res.data.group_ids || [],\n          group_name: res.data.group_name || DEFAULT_GROUP_NAME,\n          group_icon: res.data.group_icon || DEFAULT_GROUP_ICON,\n          group_expire_time: res.data.expired_time\n            ? getSimpleDateFormatString({\n                date: res.data.expired_time,\n                format: 'YYYY-MM-DD hh:mm'\n              })\n            : '',\n          group_expire_day: res.data.expired_time\n            ? Math.max(\n                Math.ceil((new Date(res.data.expired_time).getTime() - Date.now()) / ONE_DAY_MS),\n                0\n              )\n            : 99,\n          group_isexpired: res.data.expired_time ? res.data.expired_time < Date.now() : false,\n          is_internal: res.data.type === 2\n        }\n        this.subscriptions = subscription_list\n        const subscription_data = subscription_list.find(\n          (item = {}) => item.group_id === info.group_id\n        )\n        if (info.is_internal || !subscription_data) {\n          info.group_expire_time = ''\n          info.group_isexpired = false\n          info.group_expire_day = 99\n        } else {\n          info.group_name = subscription_data.group_name || DEFAULT_GROUP_NAME\n          info.group_icon = subscription_data.logo_url || DEFAULT_GROUP_ICON\n          if (subscription_data.is_default) {\n            info.group_expire_time = ''\n            info.group_isexpired = false\n            info.group_expire_day = 99\n          }\n        }\n        this.info = info\n        this.is_login = true\n        if (window.$chat53ai)\n          window.$chat53ai.$win({ type: 'agenthub_login', data: JSON.stringify({ ...this.info }) })\n      } catch (error: any) {\n        const response = error.response || {}\n        const data = response.data || error || {}\n        const { message } = data\n        if (['token expired', 'forbidden'].includes(message)) {\n          this.logout({ redirectDisabled: true })\n        }\n        throw error\n      }\n    },\n    setGroupName(group_name: string) {\n      this.info.group_name = group_name || DEFAULT_GROUP_NAME\n    },\n    setGroupIcon(group_icon: string) {\n      this.info.group_icon = group_icon || DEFAULT_GROUP_ICON\n    },\n    setAccessToken(token: string) {\n      localStorage.setItem(TOKEN_KEY, token)\n      this.info.access_token = token\n    },\n    updateInfo(data) {\n      this.info = {\n        ...this.info,\n        ...data\n      }\n      this.is_login = true\n    },\n    async logout({ redirectDisabled = false }: { redirectDisabled?: boolean } = {}) {\n      this.info = { ...DEFAULT_USER }\n      this.is_login = false\n      if (!isOpLocalEnv.value) {\n        await userApi.logout()\n      }\n      localStorage.removeItem(TOKEN_KEY)\n      eventBus.clearCache(EVENT_NAMES.LOGIN_SUCCESS)\n      setTimeout(() => {\n        if (!redirectDisabled && !window.$isElectron) {\n          window.location.href = '/'\n        }\n      }, 800)\n    }\n  }\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/Browser.d.ts",
    "content": "declare namespace Browser {\n  interface Tab {\n    id: number | string\n    title: string\n    closable: boolean\n    url: string\n    defaultUrl: string\n    icon: string\n    type: 'browser' | 'page' | 'multibrowser'\n    timestamp: number\n    loading: 'loading' | 'error' | 'none' | 'completed' | 'abort'\n    component: any\n    browsers: Tab[]\n    width: number\n    ability: boolean\n    render?: boolean\n    webview?: any\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/agent.d.ts",
    "content": "declare namespace Agent {\n  interface State {\n    \"agent_id\": number\n    \"channel_type\": number\n    \"configs\": string\n    \"created_by\": number\n    \"created_time\": number\n    \"description\": string\n    \"eid\": number\n    \"group_id\": number\n    \"logo\": string\n    \"model\": string\n    \"name\": string\n    \"prompt\": string\n    \"sort\": number\n    \"tools\": string\n    \"updated_time\": number\n    \"use_cases\": string\n    \"user_group_ids\": [\n      number\n    ]\n    \"custom_config\": string\n    \"custom_config_obj\": any\n    \"settings\": string\n    \"settings_obj\": any\n    conversation_count: number\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/category.d.ts",
    "content": "declare namespace Category {\n  interface State {\n    group_id: number\n    eid: number\n    created_by: number\n    group_name: string\n    group_type: number\n    sort: number\n    agents: any\n    created_time: number\n    updated_time: number\n    visible?: boolean\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/conversation.d.ts",
    "content": "declare namespace Conversation {\n  interface Info {\n    agent_id: number\n    conversation_id: number\n    created_time: number\n    deleted_time: number\n    eid: number\n    last_message: string\n    quota: number\n    status: number\n    title: string\n    total_tokens: number\n    updated_time: number\n    user_id: number\n    // 针对于虚拟会话\n    virtual_id: string\n    created_at: string\n    updated_at: string\n  }\n\n  interface UserFile {\n    type: 'image'\n    content: string\n    filename: string\n    size: number\n    mime_type: string\n    url: string\n  }\n\n  interface Message {\n    agent_id: number\n    answer: string\n    channel: number\n    completion_tokens: number\n    conversation_id: number\n    created_time: number\n    eid: number\n    elapsed_time: number\n    id: number\n    is_stream: true\n    message: string\n    model_name: string\n    prompt_tokens: number\n    quota: number\n    quota_content: string\n    request_id: string\n    total_tokens: number\n    updated_time: number\n    user_id: number\n    query: string\n    loading?: boolean\n    user_files: UserFile[]\n    reasoning_content?: string\n    reasoning_expanded?: boolean\n  }\n\n  interface Sender {\n    conversation_id: number\n    frequency_penalty: number\n    messages: {\n      content: string\n      role: 'user' | 'assistant'\n    }[]\n    model: string\n    presence_penalty: number\n    stream: boolean\n    temperature: number\n    top_p: number\n  }\n\n  interface NextAgentPrepare {\n    agent_id: number\n    is_workflow: boolean\n    execution_rule: 'auto' | 'manual'\n    parameters: Record<string, any>\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/enterprise.d.ts",
    "content": "declare namespace Enterprise {\n  interface Banner {\n    url_list: string[]\n    interval: string\n  }\n  interface State {\n    id: number\n    display_name: string\n    logo: string\n    ico: string\n    keywords: string[]\n    copyright: string\n    type: string\n    banner: string\n    language: string\n    timezone: string\n    domain: string\n    slogan: string\n    status: number\n    description: string\n    banner_info: Banner\n    template_type: string\n    layout_type: string\n    created_time: number\n    updated_time: number\n    template_style_info: {\n      [key: string]: any\n      style_type: 'software' | 'website'\n    }\n    is_independent: boolean\n    is_enterprise: boolean\n    is_industry: boolean\n    is_install_wecom: boolean\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/global.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n\ndeclare global {\n  interface Window {\n    $t: (key: string, params?: Record<string, any>) => string\n    $chat53ai?: any\n    $getPublicPath: (path: string) => string\n    electron?: any\n    $isElectron?: boolean\n    $noop?: () => void\n\n    api_host: string\n    qyy_host: string\n    admin_url: string\n  }\n}\n\nexport {}\n\n// declare module '@vue/runtime-core' {\n//   interface ComponentCustomProperties {\n//     $getPublicPath: (path: string) => string\n//     // is electron\n//     $isElectron?: boolean\n//     $noop?: () => void\n//   }\n// }\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/link.d.ts",
    "content": "declare namespace Link {\n  interface State {\n    id: number\n    eid: number\n    group_id: number\n    name: string\n    logo: string\n    url: string\n    description: string\n    sort: number\n    created_by: number\n    created_time: number\n    updated_time: number\n    has_share_account: boolean\n    visible?: boolean\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/navigation.d.ts",
    "content": "declare namespace Navigation {\n  interface State {\n    navigation_id: number\n    eid: number\n    name: string\n    type: number\n    jump_path: string\n    sort: number\n    url: string\n    menu_path: string\n    config: {\n      [key: string]: any\n    }\n    status: number\n    content: string\n    created_time: number\n    updated_time: number\n    target: number\n    icon: string\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/order.d.ts",
    "content": "declare namespace Order {\n  interface State {\n    id: number\n    eid: number\n    order_id: string\n    service_id: number\n    service_type: number\n    subscription_name: string\n    duration: number\n    time_unit: string\n    currency: string\n    amount: number\n    pay_type: number\n    status: number\n    user_id: number\n    nickname: string\n    transaction_id: string\n    pay_time: number\n    expired_time: string\n    created_time: string\n    updated_time: string\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/prompt.ts",
    "content": "declare namespace Prompt {\n  interface State {\n    \"prompt_id\": number\n    content: string\n    created_time: number\n    custom_config: string\n    description: string\n    eid: number\n    group_ids: number[]\n    is_liked: boolean\n    likes: number\n    name: string\n    sort: number\n    status: 0 | 1\n    type: 1 | 2\n    updated_time: number\n    user_id: number\n    views: number\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/subscription.d.ts",
    "content": "declare namespace Subscription {\n  interface State {\n    group: {\n      created_by: number\n      created_time: number\n      eid: number\n      group_id: number\n      group_name: string\n      group_type: number\n      sort: number\n      updated_time: number\n    }\n    setting: {\n      ai_enabled: boolean\n      created_time: number\n      group_id: number\n      logo_url: string\n      setting_id: number\n      updated_time: number\n    }\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/typings/user.d.ts",
    "content": "declare namespace User {\n  interface Info {\n    access_token: string\n    user_id: string\n    username: string\n    nickname: string\n    avatar: string\n    email: string\n    eid: number\n    role: number\n    group_id: number\n    group_ids: number[]\n    group_name: string\n    group_icon: string\n    group_expire_time: string\n    group_expire_day: number\n    group_isexpired: boolean\n    mobile: string\n    openid: string\n    is_internal: boolean\n  }\n\n  interface LoginForm {\n    username: string\n    password: string\n  }\n\n  interface SmsLoginForm {\n    mobile: string\n    verify_code: string\n  }\n\n  interface BindWechatForm {\n    mobile?: string\n    verify_code?: string\n    openid: string\n    unionid?: string\n    nickname?: string\n  }\n\n  interface RegisterForm {\n    username: string\n    password: string\n    nickname?: string\n    verify_code?: string\n  }\n\n  interface ResetPasswordForm {\n    email?: string\n    mobile?: string\n    verify_code: string\n    confirm_password: string\n    new_password: string\n  }\n\n  interface ChangeMobileForm {\n    new_mobile: string\n    old_code?: string\n    new_code: string\n  }\n\n  interface SsoLoginParam {\n    sign: string\n    timestamp: string\n    username: string\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/cache.ts",
    "content": "type Fetcher<T> = (() => Promise<T>) | (() => T) | T\n\n// 创建缓存管理器\nexport class CacheManager {\n  private static instance: CacheManager\n  private cacheMap: Map<string, {\n    data: any\n    expireTime: number\n  }> = new Map()\n\n  private constructor() { }\n\n  static getInstance(): CacheManager {\n    if (!CacheManager.instance) {\n      CacheManager.instance = new CacheManager()\n    }\n    return CacheManager.instance\n  }\n\n  private isPromise(value: any): value is Promise<any> {\n    return value && typeof value.then === 'function'\n  }\n\n  set<T>(key: string, value: T, expireMinutes: number = 1): void {\n    const expireTime = Date.now() + expireMinutes * 60 * 1000\n    this.cacheMap.set(key, {\n      data: value,\n      expireTime\n    })\n  }\n\n  get<T>(key: string): T | null {\n    const now = Date.now()\n    const cacheItem = this.cacheMap.get(key)\n\n    if (cacheItem && now < cacheItem.expireTime) {\n      return cacheItem.data\n    }\n\n    this.cacheMap.delete(key)\n    return null\n  }\n\n  async getOrFetch<T>(\n    key: string,\n    fetcher: Fetcher<T>,\n    expireMinutes: number = 2\n  ): Promise<T> {\n    // 检查缓存\n    const cachedValue = this.get<T>(key)\n    if (cachedValue !== null) {\n      return cachedValue\n    }\n\n    // 处理不同类型的fetcher\n    let result: T\n    if (typeof fetcher === 'function') {\n      result = (fetcher as Function)()\n      if (this.isPromise(result)) {\n        result.catch(() => {\n          this.delete(key)\n        })\n      }\n    } else {\n      result = fetcher as T\n    }\n\n    // 存储结果\n    this.set(key, result, expireMinutes)\n    return result\n  }\n\n  delete(key: string): void {\n    this.cacheMap.delete(key)\n  }\n\n  clear(): void {\n    this.cacheMap.clear()\n  }\n}\n\nexport const cacheManager = CacheManager.getInstance()"
  },
  {
    "path": "web/front/src/renderer/main/utils/copy.ts",
    "content": "export function copyToClip(text: string) {\n  return new Promise((resolve, reject) => {\n    try {\n      const input: HTMLTextAreaElement = document.createElement('textarea')\n      input.setAttribute('readonly', 'readonly')\n      input.value = text\n      document.body.appendChild(input)\n      input.select()\n      if (document.execCommand('copy'))\n        document.execCommand('copy')\n      document.body.removeChild(input)\n      resolve(text)\n    }\n    catch (error) {\n      reject(error)\n    }\n  })\n}\n\n/**\n * 复制图片\n */\nexport function copyImageToClip(url: string) {\n  return new Promise((resolve) => {\n    const img = new Image()\n    img.src = url\n\n    img.crossOrigin = 'Anonymous'\n\n    img.onload = () => {\n      const canvas = document.createElement('canvas')\n      const ctx = canvas.getContext('2d')\n      canvas.width = img.width\n      canvas.height = img.height\n\n      ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n      ctx.drawImage(img, 0, 0)\n      // 将canvas转为blob\n      canvas.toBlob(async (blob) => {\n        try {\n          const clipboardItem = new ClipboardItem({ 'image/png': blob })\n          // https://w3c.github.io/clipboard-apis/#dom-clipboard-write\n          await navigator.clipboard.write([clipboardItem])\n          resolve()\n          console.log('Copied to clipboard successfully!')\n        }\n        catch (error) {\n          console.error('Unable to write to clipboard.', error)\n          copyToClip(url).then(() => resolve())\n        }\n      }, 'image/png')\n    }\n  })\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/event-bus.ts",
    "content": "import type { EventName } from '@/constants/events'\nimport { EVENT_NAMES } from '@/constants/events'\n\n// 定义事件回调函数类型\ntype EventCallback = (data?: any) => void;\n\n// 定义事件映射类型\ninterface EventMap {\n  [eventName: string]: EventCallback[];\n}\n\n// 定义缓存事件数据类型\ninterface CachedEvent {\n  data: any;\n  timestamp: number;\n}\n\n// 定义缓存事件映射类型\ninterface CachedEventMap {\n  [eventName: string]: CachedEvent;\n}\n\nconst eventBus = {\n  events: {} as EventMap,\n  // 事件缓存，用于处理 emit 在 on 之前的情况\n  cachedEvents: {} as CachedEventMap,\n  // 需要缓存的事件列表（状态类事件）\n  cacheableEvents: new Set<EventName>([EVENT_NAMES.LOGIN_SUCCESS] as EventName[]),\n\n  /**\n   * 触发事件\n   * @param eventName 事件名称\n   * @param data 事件数据\n   */\n  emit(eventName: EventName, data?: any) {\n    // 如果有监听器，直接触发\n    if (this.events[eventName] && this.events[eventName].length > 0) {\n      this.events[eventName].forEach(callback => callback(data));\n    }\n\n    // 如果是可缓存的事件，无论是否有监听器都进行缓存\n    if (this.cacheableEvents.has(eventName)) {\n      this.cachedEvents[eventName] = {\n        data,\n        timestamp: Date.now()\n      };\n    }\n\n    return this;\n  },\n\n  /**\n   * 监听事件\n   * @param eventName 事件名称\n   * @param callback 回调函数\n   */\n  on(eventName: EventName, callback: EventCallback) {\n    this.events[eventName] = this.events[eventName] || [];\n    this.events[eventName].push(callback);\n\n    // 如果有缓存的事件，立即触发\n    if (this.cachedEvents[eventName]) {\n      callback(this.cachedEvents[eventName].data);\n    }\n\n    return this;\n  },\n\n  /**\n   * 监听事件一次（触发后自动移除）\n   * @param eventName 事件名称\n   * @param callback 回调函数\n   */\n  once(eventName: EventName, callback: EventCallback) {\n    const onceWrapper = (data?: any) => {\n      callback(data);\n      this.off(eventName, onceWrapper);\n    };\n\n    this.events[eventName] = this.events[eventName] || [];\n    this.events[eventName].push(onceWrapper);\n\n    // 如果有缓存的事件，立即触发并移除监听器\n    if (this.cachedEvents[eventName]) {\n      onceWrapper(this.cachedEvents[eventName].data);\n    }\n\n    return this;\n  },\n\n  /**\n   * 移除事件监听\n   * @param eventName 事件名称\n   * @param callback 可选的回调函数，如果不提供则移除该事件的所有监听器\n   */\n  off(eventName: EventName, callback?: EventCallback) {\n    if (this.events[eventName]) {\n      if (callback) {\n        this.events[eventName] = this.events[eventName].filter(cb => cb !== callback);\n      } else {\n        delete this.events[eventName];\n      }\n    }\n    return this;\n  },\n\n  /**\n   * 获取指定事件的监听器数量\n   * @param eventName 事件名称\n   */\n  listenerCount(eventName: EventName): number {\n    return this.events[eventName]?.length || 0;\n  },\n\n  /**\n   * 移除所有事件监听器\n   */\n  clear() {\n    this.events = {};\n    return this;\n  },\n\n  /**\n   * 添加可缓存的事件类型\n   * @param eventName 事件名称\n   */\n  addCacheableEvent(eventName: EventName) {\n    this.cacheableEvents.add(eventName);\n    return this;\n  },\n\n  /**\n   * 移除可缓存的事件类型\n   * @param eventName 事件名称\n   */\n  removeCacheableEvent(eventName: EventName) {\n    this.cacheableEvents.delete(eventName);\n    delete this.cachedEvents[eventName];\n    return this;\n  },\n\n  /**\n   * 清除事件缓存\n   * @param eventName 可选的事件名称，如果不提供则清除所有缓存\n   */\n  clearCache(eventName?: EventName) {\n    if (eventName) {\n      delete this.cachedEvents[eventName];\n    } else {\n      this.cachedEvents = {};\n    }\n    return this;\n  },\n\n  /**\n   * 获取缓存的事件数据\n   * @param eventName 事件名称\n   */\n  getCachedEvent(eventName: EventName): CachedEvent | undefined {\n    return this.cachedEvents[eventName];\n  },\n\n  /**\n   * 检查是否有缓存的事件\n   * @param eventName 事件名称\n   */\n  hasCachedEvent(eventName: EventName): boolean {\n    return eventName in this.cachedEvents;\n  },\n\n  /**\n   * 清除所有数据（包括监听器和缓存）\n   */\n  clearAll() {\n    this.events = {};\n    this.cachedEvents = {};\n    return this;\n  }\n};\n\nexport default eventBus;\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/file.ts",
    "content": "export const downloadFile = (data: any, fileName: string) => {\n  let content = data\n  if (typeof data === 'object') {\n    content = JSON.stringify(data)\n  }\n  const blob = new Blob([content], { type: 'application/json;charset=utf-8' })\n  const url = URL.createObjectURL(blob)\n  const a = document.createElement('a')\n  a.href = url\n  a.download = fileName\n  a.click()\n  URL.revokeObjectURL(url)\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/filter.ts",
    "content": "import * as moment from '@/utils/moment'\n\nexport const dateRangeOptions: { value: string; label: string }[] = [\n  {\n    value: '0',\n    label: window.$t('filter.date_range.today')\n  },\n  {\n    value: '1',\n    label: window.$t('filter.date_range.last_7_days')\n  },\n  {\n    value: '2',\n    label: window.$t('filter.date_range.last_4_weeks')\n  },\n  {\n    value: '3',\n    label: window.$t('filter.date_range.last_3_months')\n  },\n  {\n    value: '4',\n    label: window.$t('filter.date_range.last_12_months')\n  },\n  {\n    value: '5',\n    label: window.$t('filter.date_range.this_month')\n  },\n  {\n    value: '6',\n    label: window.$t('filter.date_range.this_quarter')\n  },\n  {\n    value: '7',\n    label: window.$t('filter.date_range.this_year')\n  },\n  {\n    value: '8',\n    label: window.$t('filter.date_range.all_time')\n  }\n]\n\nexport const getRangeStartEndDates = (time_type: string): { start?: string; end?: string } => {\n  const options = {}\n  let start = ''\n  if (time_type === '0') start = moment.getCurrentDate('YYYY-MM-DD 00:01')\n  else if (time_type === '1') start = moment.getLastTimeAsDay(7, 'YYYY-MM-DD hh:mm')\n  else if (time_type === '2') start = moment.getLastTimeAsWeek(4, 'YYYY-MM-DD hh:mm')\n  else if (time_type === '3') start = moment.getLastTimeAsMonth(3, 'YYYY-MM-DD hh:mm')\n  else if (time_type === '4') start = moment.getLastTimeAsMonth(12, 'YYYY-MM-DD hh:mm')\n  else if (time_type === '5') start = moment.getCurrentMonth('YYYY-MM-DD hh:mm')\n  else if (time_type === '6') start = moment.getCurrentQuarter('YYYY-MM-DD hh:mm')\n  else if (time_type === '7') start = moment.getCurrentYeaer('YYYY-MM-DD hh:mm')\n  else if (time_type === '8') start = '2022-01-01 00:00'\n\n  if (start) {\n    options.start = start\n    options.end = moment.getCurrentDate('YYYY-MM-DD hh:mm')\n  } else {\n    options.start = null\n    options.end = null\n  }\n\n  return options\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/form-rules.ts",
    "content": "/**\n * 表单验证规则\n */\n\nexport const textValidator = ({ rule, value, callback, message } = {}) => {\n  value = (String(value) || '').trim()\n  if (!value) return callback(new Error(window.$t(message)))\n  callback()\n}\n\nexport const getPasswordRules = () => {\n  return {\n    validator: (rule: any, value: string) => {\n      if (value.length < 8 || value.length > 20) {\n        return Promise.reject(window.$t('form.password_length'))\n      }\n      if (/[\\u4e00-\\u9fa5]/.test(value)) {\n        return Promise.reject(window.$t('form.password_no_chinese'))\n      }\n      return Promise.resolve()\n    },\n    trigger: 'blur'\n  }\n}\n\nexport const getMobileRules = () => {\n  return {\n    validator: (rule: any, value: string) => {\n      // 手机号正则（中国大陆手机号）\n      const phoneRegex = /^1[3-9]\\d{9}$/\n\n      if (!phoneRegex.test(value)) {\n        return Promise.reject(window.$t('form.mobile_format'))\n      }\n      return Promise.resolve()\n    },\n    trigger: 'blur'\n  }\n}\n\nexport const getEmailRules = () => {\n  return {\n    validator: (rule: any, value: string) => {\n      if (!value) {\n        return Promise.reject(window.$t('form.email_format'))\n      }\n      // 邮箱正则\n      const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\n      if (!emailRegex.test(value)) {\n        return Promise.reject(window.$t('form.email_format'))\n      }\n      return Promise.resolve()\n    },\n    trigger: 'blur'\n  }\n}\n\nexport const getAccountOrEmailRules = () => {\n  return {\n    validator: (rule: any, value: string) => {\n      if (!value) {\n        return Promise.reject(window.$t('form.account_format'))\n      }\n      const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\n      if (emailRegex.test(value)) {\n        return Promise.resolve()\n      }\n      const mobileRegex = /^1[3-9]\\d{9}$/\n      if (mobileRegex.test(value)) {\n        return Promise.resolve()\n      }\n      return Promise.reject(window.$t('form.account_format'))\n    },\n    trigger: 'blur'\n  }\n}\n\nexport const getAccountRules = () => {\n  return {\n    validator: (rule: any, value: string) => {\n      value = value.trim()\n      if (value.length < 5 || value.length > 20) {\n        return Promise.reject(window.$t('form.username_length'))\n      }\n      const reg = /^[a-zA-Z0-9_]+$/\n      if (!reg.test(value)) {\n        return Promise.reject(window.$t('form.account_format'))\n      }\n      return Promise.resolve()\n    },\n    trigger: 'blur'\n  }\n}\n\nexport const getConfirmPasswordRules = (form: any, passwordField: string) => {\n  return {\n    validator: (rule: any, value: string) => {\n      if (value !== form[passwordField]) {\n        return Promise.reject(window.$t('form.password_not_match'))\n      }\n      return Promise.resolve()\n    },\n    trigger: 'blur'\n  }\n}\n\nexport const getRequiredRules = (message: string, trigger: string | string[] = 'blur') => {\n  return {\n    required: true,\n    message: message || window.$t('form.input_placeholder'),\n    trigger\n  }\n}\n\nexport const generateInputRules = ({\n  message = 'form_input_placeholder',\n  trigger = ['blur', 'change'],\n  validator = ['text']\n} = {}) => {\n  const rules = []\n  if (validator.includes('text'))\n    rules.push({\n      validator: (rule, value, callback) => textValidator({ rule, value, callback, message }),\n      trigger\n    })\n  return rules\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/functions/debounce.ts",
    "content": "type CallbackFunc<T extends unknown[]> = (...args: T) => void\n\nexport function debounce<T extends unknown[]>(\n  func: CallbackFunc<T>,\n  wait: number,\n  immediate = false,\n): (...args: T) => void {\n  let timeoutId: ReturnType<typeof setTimeout> | undefined\n\n  return (...args: T) => {\n    const later = () => {\n      func(...args)\n    }\n\n    clearTimeout(timeoutId)\n    if (immediate) {\n      const callNow = !timeoutId\n      timeoutId = setTimeout(() => {\n        timeoutId = undefined\n      }, wait)\n      if (callNow)\n        later()\n    }\n    else {\n      timeoutId = setTimeout(later, wait)\n    }\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/functions/index.ts",
    "content": "export function getCurrentDate() {\n  const date = new Date()\n  const day = date.getDate()\n  const month = date.getMonth() + 1\n  const year = date.getFullYear()\n  return `${year}-${month}-${day}`\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/index.ts",
    "content": "\n/**\n * 判断在对象数据中是否有效值\n * @param { string | number | symbol } key 对象键值\n * @param { object } source 对象数据\n * @returns { boolean }\n */\nexport const isValidKeyInObject = (\n  key: string | number | symbol | keyof typeof source = '',\n  source: any = {},\n) => {\n  return !!(\n    key\n    && source\n    && Object.keys(source).length\n    && key in source\n    && source[key]\n  )\n}\n\nexport const typeOfData = (source) => {\n  return Object.prototype.toString.call(source).slice(8, -1)\n}\n\n/**\n * 系列化对象为 search 参数\n * @param { object } source 参数\n * @returns { string }\n */\nexport const serialize = (source: any) => {\n  return Object.keys(source)\n    .filter(key => isValidKeyInObject(key, source))\n    .sort()\n    .map((key) => {\n      let value: any = source[key]\n      if (typeOfData(value) === 'object')\n        value = JSON.stringify(value)\n      else if (typeOfData(value) === 'array')\n        value = value.join(',')\n      return `${key}=${value}`\n    })\n    .join('&')\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/loadLib.ts",
    "content": "\nimport { LIB_HOST } from '@/api/host'\n\nconst libs = {\n  'vditor': {\n    id: 'vditor-lib',\n    src: `${LIB_HOST}/js/vditor/dist/index.min.js`,\n    callback() {\n      const css = document.createElement('link')\n      css.rel = 'stylesheet'\n      css.href = `${LIB_HOST}/js/vditor/dist/index.css`\n      document.head.appendChild(css)\n    },\n  },\n}\n\nexport default (name: 'vditor'): Promise<void> => {\n  if (!libs[name])\n    return Promise.reject()\n\n  if (!libs[name]._promise) {\n    libs[name]._promise = new Promise((resolve, reject) => {\n      const { src, id, callback } = libs[name]\n\n      const script = document.createElement('script')\n      script.src = src\n      script.id = id\n      if (src.endsWith('.mjs'))\n        script.type = 'module'\n\n      script.onload = () => {\n        callback && callback()\n        setTimeout(() => {\n          resolve()\n        }, 100)\n      }\n      script.onerror = () => {\n        reject()\n      }\n      document.body.appendChild(script)\n    })\n  }\n\n  return libs[name]._promise\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/md5.ts",
    "content": "'use strict'\n\nfunction t(n, t) {\n  const r = (65535 & n) + (65535 & t)\n  return (((n >> 16) + (t >> 16) + (r >> 16)) << 16) | (65535 & r)\n}\n\nfunction r(n, t) {\n  return (n << t) | (n >>> (32 - t))\n}\n\nfunction e(n, e, o, u, c, f) {\n  return t(r(t(t(e, n), t(u, f)), c), o)\n}\n\nfunction o(n, t, r, o, u, c, f) {\n  return e((t & r) | (~t & o), n, t, u, c, f)\n}\n\nfunction u(n, t, r, o, u, c, f) {\n  return e((t & o) | (r & ~o), n, t, u, c, f)\n}\n\nfunction c(n, t, r, o, u, c, f) {\n  return e(t ^ r ^ o, n, t, u, c, f)\n}\n\nfunction f(n, t, r, o, u, c, f) {\n  return e(r ^ (t | ~o), n, t, u, c, f)\n}\n\nfunction i(n, r) {\n  (n[r >> 5] |= 128 << r % 32), (n[14 + (((r + 64) >>> 9) << 4)] = r)\n  let e\n  let i\n  let a\n  let d\n  let h\n  let l = 1732584193\n  let g = -271733879\n  let v = -1732584194\n  let m = 271733878\n  for (e = 0; e < n.length; e += 16) {\n    (i = l),\n    (a = g),\n    (d = v),\n    (h = m),\n    (g = f(\n      (g = f(\n        (g = f(\n          (g = f(\n            (g = c(\n              (g = c(\n                (g = c(\n                  (g = c(\n                    (g = u(\n                      (g = u(\n                        (g = u(\n                          (g = u(\n                            (g = o(\n                              (g = o(\n                                (g = o(\n                                  (g = o(\n                                    g,\n                                    (v = o(\n                                      v,\n                                      (m = o(\n                                        m,\n                                        (l = o(\n                                          l,\n                                          g,\n                                          v,\n                                          m,\n                                          n[e],\n                                          7,\n                                          -680876936,\n                                        )),\n                                        g,\n                                        v,\n                                        n[e + 1],\n                                        12,\n                                        -389564586,\n                                      )),\n                                      l,\n                                      g,\n                                      n[e + 2],\n                                      17,\n                                      606105819,\n                                    )),\n                                    m,\n                                    l,\n                                    n[e + 3],\n                                    22,\n                                    -1044525330,\n                                  )),\n                                  (v = o(\n                                    v,\n                                    (m = o(\n                                      m,\n                                      (l = o(\n                                        l,\n                                        g,\n                                        v,\n                                        m,\n                                        n[e + 4],\n                                        7,\n                                        -176418897,\n                                      )),\n                                      g,\n                                      v,\n                                      n[e + 5],\n                                      12,\n                                      1200080426,\n                                    )),\n                                    l,\n                                    g,\n                                    n[e + 6],\n                                    17,\n                                    -1473231341,\n                                  )),\n                                  m,\n                                  l,\n                                  n[e + 7],\n                                  22,\n                                  -45705983,\n                                )),\n                                (v = o(\n                                  v,\n                                  (m = o(\n                                    m,\n                                    (l = o(\n                                      l,\n                                      g,\n                                      v,\n                                      m,\n                                      n[e + 8],\n                                      7,\n                                      1770035416,\n                                    )),\n                                    g,\n                                    v,\n                                    n[e + 9],\n                                    12,\n                                    -1958414417,\n                                  )),\n                                  l,\n                                  g,\n                                  n[e + 10],\n                                  17,\n                                  -42063,\n                                )),\n                                m,\n                                l,\n                                n[e + 11],\n                                22,\n                                -1990404162,\n                              )),\n                              (v = o(\n                                v,\n                                (m = o(\n                                  m,\n                                  (l = o(\n                                    l,\n                                    g,\n                                    v,\n                                    m,\n                                    n[e + 12],\n                                    7,\n                                    1804603682,\n                                  )),\n                                  g,\n                                  v,\n                                  n[e + 13],\n                                  12,\n                                  -40341101,\n                                )),\n                                l,\n                                g,\n                                n[e + 14],\n                                17,\n                                -1502002290,\n                              )),\n                              m,\n                              l,\n                              n[e + 15],\n                              22,\n                              1236535329,\n                            )),\n                            (v = u(\n                              v,\n                              (m = u(\n                                m,\n                                (l = u(l, g, v, m, n[e + 1], 5, -165796510)),\n                                g,\n                                v,\n                                n[e + 6],\n                                9,\n                                -1069501632,\n                              )),\n                              l,\n                              g,\n                              n[e + 11],\n                              14,\n                              643717713,\n                            )),\n                            m,\n                            l,\n                            n[e],\n                            20,\n                            -373897302,\n                          )),\n                          (v = u(\n                            v,\n                            (m = u(\n                              m,\n                              (l = u(l, g, v, m, n[e + 5], 5, -701558691)),\n                              g,\n                              v,\n                              n[e + 10],\n                              9,\n                              38016083,\n                            )),\n                            l,\n                            g,\n                            n[e + 15],\n                            14,\n                            -660478335,\n                          )),\n                          m,\n                          l,\n                          n[e + 4],\n                          20,\n                          -405537848,\n                        )),\n                        (v = u(\n                          v,\n                          (m = u(\n                            m,\n                            (l = u(l, g, v, m, n[e + 9], 5, 568446438)),\n                            g,\n                            v,\n                            n[e + 14],\n                            9,\n                            -1019803690,\n                          )),\n                          l,\n                          g,\n                          n[e + 3],\n                          14,\n                          -187363961,\n                        )),\n                        m,\n                        l,\n                        n[e + 8],\n                        20,\n                        1163531501,\n                      )),\n                      (v = u(\n                        v,\n                        (m = u(\n                          m,\n                          (l = u(l, g, v, m, n[e + 13], 5, -1444681467)),\n                          g,\n                          v,\n                          n[e + 2],\n                          9,\n                          -51403784,\n                        )),\n                        l,\n                        g,\n                        n[e + 7],\n                        14,\n                        1735328473,\n                      )),\n                      m,\n                      l,\n                      n[e + 12],\n                      20,\n                      -1926607734,\n                    )),\n                    (v = c(\n                      v,\n                      (m = c(\n                        m,\n                        (l = c(l, g, v, m, n[e + 5], 4, -378558)),\n                        g,\n                        v,\n                        n[e + 8],\n                        11,\n                        -2022574463,\n                      )),\n                      l,\n                      g,\n                      n[e + 11],\n                      16,\n                      1839030562,\n                    )),\n                    m,\n                    l,\n                    n[e + 14],\n                    23,\n                    -35309556,\n                  )),\n                  (v = c(\n                    v,\n                    (m = c(\n                      m,\n                      (l = c(l, g, v, m, n[e + 1], 4, -1530992060)),\n                      g,\n                      v,\n                      n[e + 4],\n                      11,\n                      1272893353,\n                    )),\n                    l,\n                    g,\n                    n[e + 7],\n                    16,\n                    -155497632,\n                  )),\n                  m,\n                  l,\n                  n[e + 10],\n                  23,\n                  -1094730640,\n                )),\n                (v = c(\n                  v,\n                  (m = c(\n                    m,\n                    (l = c(l, g, v, m, n[e + 13], 4, 681279174)),\n                    g,\n                    v,\n                    n[e],\n                    11,\n                    -358537222,\n                  )),\n                  l,\n                  g,\n                  n[e + 3],\n                  16,\n                  -722521979,\n                )),\n                m,\n                l,\n                n[e + 6],\n                23,\n                76029189,\n              )),\n              (v = c(\n                v,\n                (m = c(\n                  m,\n                  (l = c(l, g, v, m, n[e + 9], 4, -640364487)),\n                  g,\n                  v,\n                  n[e + 12],\n                  11,\n                  -421815835,\n                )),\n                l,\n                g,\n                n[e + 15],\n                16,\n                530742520,\n              )),\n              m,\n              l,\n              n[e + 2],\n              23,\n              -995338651,\n            )),\n            (v = f(\n              v,\n              (m = f(\n                m,\n                (l = f(l, g, v, m, n[e], 6, -198630844)),\n                g,\n                v,\n                n[e + 7],\n                10,\n                1126891415,\n              )),\n              l,\n              g,\n              n[e + 14],\n              15,\n              -1416354905,\n            )),\n            m,\n            l,\n            n[e + 5],\n            21,\n            -57434055,\n          )),\n          (v = f(\n            v,\n            (m = f(\n              m,\n              (l = f(l, g, v, m, n[e + 12], 6, 1700485571)),\n              g,\n              v,\n              n[e + 3],\n              10,\n              -1894986606,\n            )),\n            l,\n            g,\n            n[e + 10],\n            15,\n            -1051523,\n          )),\n          m,\n          l,\n          n[e + 1],\n          21,\n          -2054922799,\n        )),\n        (v = f(\n          v,\n          (m = f(\n            m,\n            (l = f(l, g, v, m, n[e + 8], 6, 1873313359)),\n            g,\n            v,\n            n[e + 15],\n            10,\n            -30611744,\n          )),\n          l,\n          g,\n          n[e + 6],\n          15,\n          -1560198380,\n        )),\n        m,\n        l,\n        n[e + 13],\n        21,\n        1309151649,\n      )),\n      (v = f(\n        v,\n        (m = f(\n          m,\n          (l = f(l, g, v, m, n[e + 4], 6, -145523070)),\n          g,\n          v,\n          n[e + 11],\n          10,\n          -1120210379,\n        )),\n        l,\n        g,\n        n[e + 2],\n        15,\n        718787259,\n      )),\n      m,\n      l,\n      n[e + 9],\n      21,\n      -343485551,\n    )),\n    (l = t(l, i)),\n    (g = t(g, a)),\n    (v = t(v, d)),\n    (m = t(m, h))\n  }\n  return [l, g, v, m]\n}\n\nfunction a(n) {\n  let t\n  let r = ''\n  const e = 32 * n.length\n  for (t = 0; t < e; t += 8)\n    r += String.fromCharCode((n[t >> 5] >>> t % 32) & 255)\n  return r\n}\n\nfunction d(n) {\n  let t\n  const r = []\n  for (r[(n.length >> 2) - 1] = void 0, t = 0; t < r.length; t += 1) r[t] = 0\n  const e = 8 * n.length\n  for (t = 0; t < e; t += 8) r[t >> 5] |= (255 & n.charCodeAt(t / 8)) << t % 32\n  return r\n}\n\nfunction h(n) {\n  return a(i(d(n), 8 * n.length))\n}\n\nfunction l(n, t) {\n  let r\n  let e\n  let o = d(n)\n  const u = []\n  const c = []\n  for (\n    u[15] = c[15] = void 0, o.length > 16 && (o = i(o, 8 * n.length)), r = 0;\n    r < 16;\n    r += 1\n  )\n    (u[r] = 909522486 ^ o[r]), (c[r] = 1549556828 ^ o[r])\n  return (e = i(u.concat(d(t)), 512 + 8 * t.length)), a(i(c.concat(e), 640))\n}\n\nfunction g(n) {\n  let t\n  let r\n  let e = ''\n  for (r = 0; r < n.length; r += 1) {\n    (t = n.charCodeAt(r)),\n    (e\n        += '0123456789abcdef'.charAt((t >>> 4) & 15)\n        + '0123456789abcdef'.charAt(15 & t))\n  }\n  return e\n}\n\nfunction v(n) {\n  return unescape(encodeURIComponent(n))\n}\n\nfunction m(n) {\n  return h(v(n))\n}\n\nfunction p(n) {\n  return g(m(n))\n}\n\nfunction s(n, t) {\n  return l(v(n), v(t))\n}\n\nfunction C(n, t) {\n  return g(s(n, t))\n}\n\nfunction A(n: string, t?: string, r?: string) {\n  return t ? (r ? s(t, n) : C(t, n)) : r ? m(n) : p(n)\n}\nexport default A\n// # sourceMappingURL=md5.min.js.map\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/moment.ts",
    "content": "export const ONE_SECOND_TIMESTAMP = 1000\nexport const ONE_MINUTE_TIMESTAMP = 60 * ONE_SECOND_TIMESTAMP\nexport const ONE_HOUR_TIMESTAMP = 60 * ONE_MINUTE_TIMESTAMP\nexport const ONE_DAY_TIMESTAMP = 24 * ONE_HOUR_TIMESTAMP\nexport const ONE_WEEK_TIMESTAMP = 7 * ONE_DAY_TIMESTAMP\n\nconst WEEK_TEXT_LIST = [\n  '星期日',\n  '星期一',\n  '星期二',\n  '星期三',\n  '星期四',\n  '星期五',\n  '星期六',\n]\n\n/**\n * 获取日期的时间戳\n */\nexport const getTimeStamp = (str: string) => {\n  return new Date(str.replace(/-/g, '/')).getTime()\n}\n\n/**\n * Date类型数据转成字符串类型数据\n * @param { any } date 自定义当前时间，默认当前时间\n * @param { string } format 返回时间格式，默认yyyy/MM/dd hh:mm:ss，年/月/日 时:分:秒\n * @param { boolean } fillZero 是否自动填充0补位\n * @returns { string }\n **/\nexport const getSimpleDateFormatString = (\n  {\n    date,\n    format = 'YYYY-MM-DD hh:mm:ss',\n    fillZero = true,\n  }: {\n    date?: any\n    format?: string\n    fillZero?: boolean\n  } = { date: new Date() },\n) => {\n  if (!date)\n    date = new Date()\n  if (typeof date === 'string')\n    date = date.replace(/-/gm, '/')\n  date = new Date(date)\n  const [year, month, day, hour, minute, second, week] = [\n\t\t`${date.getFullYear()}`,\n\t\t`${date.getMonth() + 1}`,\n\t\t`${date.getDate()}`,\n\t\t`${date.getHours()}`,\n\t\t`${date.getMinutes()}`,\n\t\t`${date.getSeconds()}`,\n\t\tdate.getDay(),\n  ]\n  return format\n    .replace('YYYY', year)\n    .replace('YY', year.substring(2))\n    .replace('MM', month.length === 1 && fillZero ? `0${month}` : month)\n    .replace('DD', day.length === 1 && fillZero ? `0${day}` : day)\n    .replace('hh', hour.length === 1 && fillZero ? `0${hour}` : hour)\n    .replace('mm', minute.length === 1 && fillZero ? `0${minute}` : minute)\n    .replace('ss', second.length === 1 && fillZero ? `0${second}` : second)\n    .replace('week', WEEK_TEXT_LIST[week] || '')\n}\n\nexport const getCurrentDate = (format: string) => {\n  const date = new Date()\n  return getSimpleDateFormatString({ date, format })\n}\n\nexport const getLastTimeAsDay = (day: number, format: string) => {\n  const date = new Date()\n  date.setDate(date.getDate() - day)\n  return getSimpleDateFormatString({ date, format })\n}\n\nexport const getLastTimeAsWeek = (week: number, format: string) => {\n  const date = new Date()\n  date.setDate(date.getDate() - 7 * week)\n\n  return getSimpleDateFormatString({ date, format })\n}\n\nexport const getLastTimeAsMonth = (month: number, format: string) => {\n  const date = new Date()\n  date.setMonth(date.getMonth() - month)\n\n  return getSimpleDateFormatString({ date, format })\n}\n\nexport const getCurrentMonth = (format: string) => {\n  const date = new Date()\n  date.setDate(1)\n\n  return getSimpleDateFormatString({ date, format })\n}\n\nexport const getCurrentQuarter = (format: string) => {\n  const date = new Date()\n  date.setMonth(Math.floor(date.getMonth() / 3) * 3)\n  date.setDate(1)\n\n  return getSimpleDateFormatString({ date, format })\n}\n\nexport const getCurrentYeaer = (format: string) => {\n  const date = new Date()\n  date.setMonth(0)\n  date.setDate(1)\n\n  return getSimpleDateFormatString({ date, format })\n}\n\n/**\n * 获取某个时间范围内的所以天数\n */\nexport const getDatesInRange = (start: string, end: string, format = 'YYYY-MM-DD') => {\n  start = start.replace(/-/g, '/')\n  end = end.replace(/-/g, '/')\n  const startDate = new Date(start)\n  const endDate = new Date(end)\n  const dates = []\n\n  //  循环遍历日期范围\n  for (let date = startDate; date <= endDate; date.setDate(date.getDate() + 1))\n    dates.push(getSimpleDateFormatString({ date: new Date(date), format })) //  将每个日期添加到数组中\n\n  return dates\n}\n\nexport const getFormatTimeStamp = (time) => {\n  const date = new Date(time)\n  const interval = Math.ceil((new Date().getTime() - date.getTime()) / 1000) || 1\n  const referenceArr = ['86400', '3600', '60', '1']\n  const reference = {\n    86400: '天',\n    3600: '小时',\n    60: '分钟',\n    1: '秒',\n  }\n\n  for (let i = 0; i < referenceArr.length; i++) {\n    const attr = referenceArr[i]\n    const tempResult = Math.floor(interval / Number(attr))\n    if (tempResult !== 0) {\n      if (attr === '86400') {\n        if (tempResult === 1)\n          return '昨天'\n        else\n          return getSimpleDateFormatString({ date, format: 'YYYY-MM-DD hh:mm' })\n      }\n      return `${tempResult + reference[attr]}前`\n    }\n  }\n}\n\n/**\n * 获取时间戳，单位毫秒\n * @param { string } dateStr\n * @returns { number }\n */\nexport const getDateTimestamp = (dateStr = '') => {\n  if (!dateStr)\n    return new Date().getTime()\n  return new Date(\n    !isNaN(dateStr) ? dateStr : dateStr.replace(/-/g, '/'),\n  ).getTime()\n}\n\nlet countDownTimer = null\nexport const countDown = (endTime = '', advance = 0, callback) => {\n  if (!endTime)\n    return\n  const countDownTime = getDateTimestamp(endTime)\n  if (countDownTimer) {\n    clearInterval(countDownTimer)\n    countDownTimer = null\n  }\n  countDownTimer = setInterval(() => {\n    const nowTime = new Date().getTime()\n    const distance = countDownTime - nowTime\n    if (distance < advance) {\n      clearInterval(countDownTimer)\n      countDownTimer = null\n      if (callback)\n        callback({ distance, status: 'complete' })\n      return\n    }\n    if (callback)\n      callback({ distance, status: 'pending' })\n    // const days = Math.floor(distance / (1000 * 60 * 60 * 24));\n    // const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n    // const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n    // const seconds = Math.floor((distance % (1000 * 60)) / 1000);\n  }, 1000)\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/permission.ts",
    "content": "import { createApp } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport type { ComponentPublicInstance } from 'vue'\nimport { setupI18n } from '../locales'\nimport { setupGlobal } from '../global'\nimport { setupDirective } from '../directive'\nimport { useUserStore } from '@/stores/modules/user'\n\nlet mountNode: HTMLElement | null = null\nlet loginMountNode: HTMLElement | null = null\n\nexport interface AuthOptions {\n  checkLogin?: boolean\n  checkVersion?: boolean\n  groupIds?: number[]\n  onClick?: () => void\n}\n\ninterface UpgradeInstance extends ComponentPublicInstance {\n  open: () => void\n}\n\ninterface LoginInstance extends ComponentPublicInstance {\n  open: () => void\n}\n\n/**\n * 创建并显示登录弹窗\n */\nconst showLoginModal = async (): Promise<void> => {\n  if (loginMountNode) {\n    loginMountNode.remove()\n    loginMountNode = null\n  }\n  loginMountNode = document.createElement('div')\n  document.body.appendChild(loginMountNode)\n\n  const LoginModal = (await import('@/components/LoginModal/index.vue')).default\n  const loginApp = createApp(LoginModal, {})\n  setupGlobal(loginApp)\n  setupDirective(loginApp)\n  setupI18n(loginApp)\n  const loginInstance = loginApp.mount(loginMountNode) as LoginInstance\n  loginInstance.open()\n}\n\n/**\n * 创建并显示升级弹窗\n */\nconst showUpgradeModal = async (): Promise<void> => {\n  if (mountNode) {\n    mountNode.remove()\n    mountNode = null\n  }\n  mountNode = document.createElement('div')\n  document.body.appendChild(mountNode)\n\n  const Upgrade = (await import('@/components/Upgrade/index.vue')).default\n  const upgradeApp = createApp(Upgrade, {})\n  setupGlobal(upgradeApp)\n  setupDirective(upgradeApp)\n  setupI18n(upgradeApp)\n  const upgradeInstance = upgradeApp.mount(mountNode) as UpgradeInstance\n  upgradeInstance.open()\n}\n\n/**\n * 检查登录状态\n */\nconst checkLoginStatus = (): boolean => {\n  const isLoggedIn = localStorage.getItem('access_token')\n  if (!isLoggedIn) {\n    showLoginModal()\n    return false\n  }\n  return true\n}\n\n/**\n * 检查版本权限\n */\nconst checkVersionPermission = (groupIds?: number[]): boolean => {\n  if (!groupIds) return true\n  // if (groupIds.length === 0) return true\n\n  const userStore = useUserStore()\n  const userGroupIds = userStore.info.group_ids || []\n  const isInternal = userStore.info.is_internal\n  const hasPermission = Boolean(\n    userGroupIds.length && groupIds.some((id) => userGroupIds.includes(id))\n  )\n\n  if (!hasPermission) {\n    if (isInternal) {\n      ElMessage.warning(window.$t('authority.agent_not_permission'))\n      return false\n    }\n    showUpgradeModal()\n    return false\n  }\n\n  return true\n}\n\n/**\n * 统一的认证检查函数\n * @param options 认证选项\n * @returns Promise<boolean> 是否通过认证\n */\nexport const checkPermission = (options: AuthOptions = {}): boolean => {\n  const { groupIds, onClick } = options\n\n  // 检查登录状态\n  if (!checkLoginStatus()) {\n    return false\n  }\n\n  // 检查版本权限\n  if (!checkVersionPermission(groupIds)) {\n    return false\n  }\n\n  // 如果所有检查都通过，执行回调\n  if (onClick) {\n    onClick()\n  }\n\n  return true\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/router.ts",
    "content": "export const setRouterQuery = (data: any = {}, hashVal = '') => {\n  // 获取当前URL\n  const currentUrl = window.location.href\n  // 分离基础URL和hash部分\n  const [, hash] = currentUrl.split('#')\n  // 解析当前hash中的参数\n  const hashParts = hash ? hash.split('?') : ['']\n  const hashPath = hashVal || hashParts[0]\n  const queryString = hashParts[1] || ''\n\n  // 解析当前查询参数\n  const queryParams = new URLSearchParams(queryString)\n\n  // 更新查询参数\n  Object.entries(data).forEach(([key, value]) => {\n    if (value !== undefined && value !== null) {\n      queryParams.set(key, String(value))\n    } else {\n      queryParams.delete(key)\n    }\n  })\n\n  // 构建新的URL\n  const newQueryString = queryParams.toString()\n  const newHash = hashPath + (newQueryString ? `?${newQueryString}` : '')\n\n  window.location.hash = newHash\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/scroll.ts",
    "content": "/**\n * 通用滚动工具函数\n */\n\n/**\n * 查找最近的滚动容器\n * @param element 起始元素\n * @returns 滚动容器元素\n */\nexport const findScrollContainer = (element: Element): Element | null => {\n  let parent = element.parentElement\n  while (parent) {\n    const style = window.getComputedStyle(parent)\n    if (style.overflowY === 'auto' || style.overflowY === 'scroll') {\n      return parent\n    }\n    parent = parent.parentElement\n  }\n  return document.documentElement\n}\n\n/**\n * 滚动到指定元素\n * @param elementId 目标元素ID\n * @param offset 偏移量，默认150px\n * @param behavior 滚动行为，默认'smooth'\n */\nexport const scrollToElement = (\n  elementId: string,\n  offset = 150,\n  behavior: ScrollBehavior = 'smooth'\n) => {\n  const targetElement = document.querySelector(elementId)\n  if (!targetElement) return\n\n  const scrollContainer = findScrollContainer(targetElement)\n  if (!scrollContainer) return\n\n  const containerRect = scrollContainer.getBoundingClientRect()\n  const targetRect = targetElement.getBoundingClientRect()\n  const scrollTop = scrollContainer.scrollTop + targetRect.top - containerRect.top - offset\n\n  scrollContainer.scrollTo({\n    top: Math.max(0, scrollTop),\n    behavior\n  })\n}\n\n/**\n * 滚动到指定元素（Promise版本）\n * @param elementId 目标元素ID\n * @param offset 偏移量，默认150px\n * @param behavior 滚动行为，默认'smooth'\n * @returns Promise，滚动完成后resolve\n */\nexport const scrollToElementAsync = (\n  elementId: string,\n  offset = 150,\n  behavior: ScrollBehavior = 'smooth'\n): Promise<void> => {\n  return new Promise((resolve) => {\n    scrollToElement(elementId, offset, behavior)\n\n    // 等待滚动动画完成\n    const scrollContainer = findScrollContainer(document.querySelector(elementId)!)\n    if (scrollContainer) {\n      const handleScrollEnd = () => {\n        scrollContainer.removeEventListener('scroll', handleScrollEnd)\n        resolve()\n      }\n      scrollContainer.addEventListener('scroll', handleScrollEnd)\n\n      // 设置超时，防止滚动事件不触发\n      setTimeout(resolve, 500)\n    } else {\n      resolve()\n    }\n  })\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/storage.ts",
    "content": "import { STORAGE_KEYS, type StorageKey } from '@/constants/storage'\n\n/**\n * 提醒数据结构\n */\nexport interface ReminderData {\n  date: string\n  value: any\n}\n\n/**\n * Storage 工具对象\n * 提供通用的 localStorage 操作方法\n */\nexport const storageManager = {\n  /**\n   * 设置 localStorage 项\n   */\n  setItem<T>(key: StorageKey | string, value: T): void {\n    try {\n      const serializedValue = JSON.stringify(value)\n      localStorage.setItem(key, serializedValue)\n    } catch (error) {\n      console.error('Failed to set localStorage item:', error)\n    }\n  },\n\n  /**\n   * 获取 localStorage 项\n   */\n  getItem<T>(key: StorageKey | string): T | null {\n    try {\n      const value = localStorage.getItem(key)\n      return value ? JSON.parse(value) : null\n    } catch (error) {\n      console.error('Failed to get localStorage item:', error)\n      return null\n    }\n  },\n\n  /**\n   * 删除 localStorage 项\n   */\n  removeItem(key: StorageKey | string): void {\n    try {\n      localStorage.removeItem(key)\n    } catch (error) {\n      console.error('Failed to remove localStorage item:', error)\n    }\n  },\n\n  /**\n   * 清空 localStorage\n   */\n  clear(): void {\n    try {\n      localStorage.clear()\n    } catch (error) {\n      console.error('Failed to clear localStorage:', error)\n    }\n  },\n\n  /**\n   * 检查 localStorage 中是否存在某个键\n   */\n  hasItem(key: StorageKey | string): boolean {\n    try {\n      return localStorage.getItem(key) !== null\n    } catch (error) {\n      console.error('Failed to check localStorage item:', error)\n      return false\n    }\n  },\n\n  /**\n   * 检查是否需要显示提醒（通用方法）\n   * @param key 存储键\n   * @param currentValue 当前值\n   * @param checkDaily 是否按日检查（默认 true）\n   */\n  shouldShowReminder(\n    key: StorageKey | string,\n    currentValue: any,\n    checkDaily: boolean = true\n  ): boolean {\n    const storedData = storageManager.getItem<ReminderData>(key)\n\n    if (!storedData) return true\n\n    // 如果需要按日检查\n    if (checkDaily) {\n      const today = new Date().toDateString()\n      // 如果是新的一天或者值发生变化，则允许显示提醒\n      return storedData.date !== today || storedData.value !== currentValue\n    }\n\n    // 如果不按日检查，只检查值是否变化\n    return storedData.value !== currentValue\n  },\n\n  /**\n   * 记录已显示提醒（通用方法）\n   * @param key 存储键\n   * @param value 要记录的值\n   * @param withDate 是否记录日期（默认 true）\n   */\n  recordReminderShown(key: StorageKey | string, value: any, withDate: boolean = true): void {\n    const data: ReminderData = {\n      date: withDate ? new Date().toDateString() : '',\n      value\n    }\n    storageManager.setItem(key, data)\n  },\n\n  /**\n   * 获取上次提醒记录\n   */\n  getLastReminderRecord(key: StorageKey | string): ReminderData | null {\n    return storageManager.getItem<ReminderData>(key)\n  }\n}\n\n// 导出便捷方法\nexport const {\n  setItem,\n  getItem,\n  removeItem,\n  clear,\n  hasItem,\n  shouldShowReminder,\n  recordReminderShown,\n  getLastReminderRecord\n} = storageManager\n\n// 导出 STORAGE_KEYS 常量供外部使用\nexport { STORAGE_KEYS }\n"
  },
  {
    "path": "web/front/src/renderer/main/utils/url.ts",
    "content": "export const isUrl = (str: string) => {\n  try {\n    const url = new URL(str)\n    return url.protocol === 'http:' || url.protocol === 'https:'\n  } catch (e) {\n    return false\n  }\n}\n"
  },
  {
    "path": "web/front/src/renderer/main/views/agent/components/list.vue",
    "content": "<template>\n  <div name=\"list\" tag=\"div\">\n    <template v-if=\"loading\">\n      <div v-for=\"i in 6\" :key=\"i\" class=\"flex items-start p-4 bg-[#FFF8FF] rounded-lg animate-pulse\">\n        <div class=\"w-[70px] h-[70px] bg-gray-200 rounded-full mr-4\"></div>\n        <div class=\"flex-1\">\n          <div class=\"h-5 bg-gray-200 rounded w-3/4 mb-2\"></div>\n          <div class=\"h-4 bg-gray-200 rounded w-full mb-1\"></div>\n          <div class=\"h-4 bg-gray-200 rounded w-2/3 mb-4\"></div>\n          <div class=\"h-4 bg-gray-200 rounded w-1/3\"></div>\n        </div>\n      </div>\n    </template>\n    <template v-else-if=\"showList.length === 0\">\n      <div class=\"col-span-full flex flex-col items-center justify-center\">\n        <el-empty :description=\"$t('agent.no_data')\" :image=\"$getPublicPath('/images/chat/completion_empty.png')\" />\n      </div>\n    </template>\n    <template v-for=\"item in showList\" v-else :key=\"item.agent_id\">\n      <div\n        class=\"relative flex items-start p-4 rounded-lg overflow-hidden bg-cover cursor-pointer border border-[#ECECEC] hover:shadow-md transition-all duration-300 bg-white\"\n        @click=\"\n          () => {\n            router.push({ name: route.path.includes('/index') ? 'HomeChat' : 'Chat', query: { agent_id: item.agent_id } })\n          }\n        \"\n      >\n        <div class=\"absolute top-0 right-0 bg-[#F4F4F7] flex items-center px-2 py-1 gap-1 rounded-bl-lg\">\n          <SvgIcon\n            :name=\"item.custom_config_obj.agent_mode === 'chat' ? 'chat-agent' : 'completion-agent'\"\n            class=\"h-3 w-[14px] text-[#939499]\"\n          ></SvgIcon>\n          <p class=\"text-xs text-[#939499]\">\n            {{ item.custom_config_obj.agent_mode === 'chat' ? $t('agent.dialogue_type') : $t('agent.applied_type') }}\n          </p>\n        </div>\n        <el-image class=\"flex-none size-[50px] mr-4 rounded-full\" :src=\"item.logo\" fit=\"contain\" />\n        <div class=\"flex-1 overflow-hidden\">\n          <h3\n            class=\"text-base font-medium mb-1 mt-1 line-clamp-1 text-primary\"\n            :title=\"item.name\"\n            v-html=\"item.name.replace(keyword, `<span class='text-theme'>${keyword}</span>`)\"\n          ></h3>\n          <p\n            class=\"text-sm text-opacity-60 line-clamp-2 text-regular\"\n            :title=\"item.description\"\n            v-html=\"item.description.replace(keyword, `<span class='text-theme'>${keyword}</span>`)\"\n          />\n          <div class=\"mt-3 flex items-center justify-between\">\n            <div class=\"flex items-center text-sm text-placeholder\">\n              <div class=\"size-[14px] flex-center\">\n                <svg-icon name=\"hot\"></svg-icon>\n              </div>\n              <span class=\"ml-1\">\n                {{ $t('index.use_history', { count: item.conversation_count || 0 }) }}\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useRouter, useRoute } from 'vue-router'\nimport { useUserStore } from '@/stores/modules/user'\nimport SvgIcon from '@/components/SvgIcon.vue'\n\nconst props = withDefaults(\n  defineProps<{\n    list: Agent.State[]\n    loading?: boolean\n    keyword?: string\n  }>(),\n  {\n    list: [],\n    loading: false,\n    keyword: ''\n  }\n)\n\nconst router = useRouter()\nconst route = useRoute()\nconst userStore = useUserStore()\nconst showList = computed(() => {\n  if (!props.keyword) {\n    return props.list\n  }\n  return props.list.filter((item) => {\n    return item.name.toLowerCase().includes(props.keyword.toLowerCase()) || item.description.toLowerCase().includes(props.keyword.toLowerCase())\n  })\n})\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/agent/index.vue",
    "content": "<template>\n  <div class=\"flex flex-col\" :class=\"[hideHeader ? '' : 'h-full overflow-hidden']\">\n    <MainHeader v-if=\"!hideHeader\" sticky>\n      <template #before_suffix>\n        <div class=\"text-base text-primary font-bold line-clamp-1 max-md:flex-1 max-md:text-center\">\n          {{ navigationStore.agentNavigation.name || $t('module.agent') }}\n        </div>\n      </template>\n      <template #after_prefix>\n        <!-- <span class=\"flex items-center gap-1 text-sm cursor-pointer md:hidden\" @click=\"$router.back()\">\n          <svg-icon name=\"return\" size=\"18\" stroke></svg-icon>\n        </span> -->\n      </template>\n    </MainHeader>\n    <div :class=\"[hideHeader ? '' : 'flex-1 overflow-y-auto']\">\n      <div :class=\"[singleRow ? 'w-full pb-6' : 'w-11/12 lg:w-4/5 mx-auto py-6 md:py-8 lg:py-10']\">\n        <!-- 功能选择标签 -->\n        <div v-if=\"!hideFilter\" class=\"flex md:flex-row flex-col-reverse gap-5 items-stretch md:items-center justify-between\">\n          <el-tabs v-model=\"state.group_id\" class=\"flex-1 index-tabs overflow-hidden\" @tab-change=\"onTabChange\">\n            <template v-for=\"item in agentStore.categorys\" :key=\"item.group_id\">\n              <el-tab-pane :label=\"item.group_name\" :name=\"item.group_id\"></el-tab-pane>\n            </template>\n          </el-tabs>\n          <div class=\"w-full md:w-auto\">\n            <SearchInput v-model=\"state.keyword\" class=\"hidden md:flex\" :placeholder=\"$t('action.search') + $t('module.prompt')\" />\n            <ElInput\n              v-model=\"state.keyword\"\n              size=\"large\"\n              class=\"w-full md:hidden el-input--main\"\n              :placeholder=\"$t('action.search') + $t('module.agent')\"\n              :prefix-icon=\"Search\"\n            />\n          </div>\n        </div>\n        <!-- 功能卡片网格 -->\n        <AgentList\n          :loading=\"loading\"\n          :keyword=\"state.keyword\"\n          :list=\"showAgentList\"\n          class=\"grid grid-cols-1 gap-4\"\n          :class=\"[singleRow ? '' : 'sm:grid-cols-2 lg:grid-cols-3 mt-6 md:mt-10 md:gap-5']\"\n        ></AgentList>\n      </div>\n    </div>\n    <MFooter v-if=\"!hideFooter\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, onMounted, computed, ref } from 'vue'\nimport { Search } from '@element-plus/icons-vue'\nimport SearchInput from '@/components/Search/index.vue'\n\nimport MainHeader from '@/layout/header.vue'\nimport MFooter from '@/layout/m-footer.vue'\nimport AgentList from './components/list.vue'\n\nimport { useAgentStore } from '@/stores/modules/agent'\nimport { useNavigationStore } from '@/stores/modules/navigation'\n\nconst props = withDefaults(\n  defineProps<{\n    hideHeader?: boolean\n    hideFilter?: boolean\n    singleRow?: boolean\n    hideFooter?: boolean\n    showLimit?: number\n    excludeIds?: (number | string)[]\n  }>(),\n  {\n    hideHeader: false,\n    hideFilter: false,\n    singleRow: false,\n    hideFooter: false,\n    excludeIds: () => []\n  }\n)\n\nconst agentStore = useAgentStore()\nconst navigationStore = useNavigationStore()\nconst loading = ref(false)\n\nconst state: {\n  keyword: string\n  group_id: number\n} = reactive({\n  keyword: '',\n  group_id: 0\n})\n\nconst showAgentList = computed(() => {\n  let list = state.group_id === 0 ? agentStore.agentList : agentStore.agentList.filter((item) => item.group_id === state.group_id)\n  list = list.filter((item) => item.user_group_ids.length > 0)\n  if (props.excludeIds.length) list = list.filter((item) => !props.excludeIds.includes(item.agent_id))\n  if (props.showLimit) list = list.slice(0, props.showLimit)\n  return list\n})\n\nconst onTabChange = (group_id: number) => {\n  state.group_id = group_id\n}\n\nonMounted(() => {\n  agentStore.loadCategorys()\n  agentStore.loadAgentList()\n})\n</script>\n\n<style scoped></style>\n\n<style>\n.list-enter-active,\n.list-leave-active {\n  transition: all 0.3s ease;\n}\n\n.list-enter-from,\n.list-leave-to {\n  opacity: 0;\n  transform: translateY(30px);\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/chat/chat/components/agent-tooltip.vue",
    "content": "<template>\n  <el-tooltip\n    ref=\"tooltipRef\"\n    effect=\"light\"\n    trigger=\"click\"\n    :popper-class=\"['el-popper--plain', { 'el-popper--m': isSmScreen }]\"\n    :placement=\"isSmScreen ? 'bottom' : 'top-start'\"\n  >\n    <template #content>\n      <div class=\"p-5 w-[596px] max-md:w-full\">\n        <div class=\"flex items-center justify-between relative\">\n          <div class=\"absolute right-0\">\n            <div\n              v-tooltip=\"{ content: $t('action.close') }\"\n              class=\"size-5 flex-center rounded cursor-pointer hover:bg-[#E1E2E3]\"\n              @click=\"handleClose\"\n            >\n              <el-icon>\n                <Close />\n              </el-icon>\n            </div>\n          </div>\n          <h4 class=\"text-lg text-primary w-full max-md:text-center\">{{ $t('action.find') }}</h4>\n        </div>\n        <el-input\n          v-model=\"state.keyword\"\n          size=\"large\"\n          :placeholder=\"$t('action.search') + $t('module.agent')\"\n          :prefix-icon=\"Search\"\n          class=\"mt-4 el-input--main\"\n        ></el-input>\n        <el-tabs v-model=\"state.group_id\" class=\"index-tabs mt-4\">\n          <template v-for=\"item in agentStore.categorys\" :key=\"item.group_id\">\n            <el-tab-pane :label=\"item.group_name\" :name=\"item.group_id\"></el-tab-pane>\n          </template>\n        </el-tabs>\n        <div class=\"h-[300px] overflow-y-auto mt-5\">\n          <div class=\"grid gap-4 grid-cols-2 max-md:grid-cols-1\">\n            <template v-for=\"item in showAgentList\" :key=\"item.agent_id\">\n              <div class=\"flex items-center p-3 bg-[#F8F9FA] rounded-lg cursor-pointer\" @click=\"handleSelect(item)\">\n                <el-avatar :size=\"36\" :src=\"item.logo\" class=\"mr-2\" />\n                <div class=\"flex-1 overflow-hidden\">\n                  <h3 class=\"text-base font-medium text-primary mb-1\">{{ item.name }}</h3>\n                  <p class=\"text-sm text-secondary truncate\">\n                    {{ item.description || '- -' }}\n                  </p>\n                </div>\n              </div>\n            </template>\n          </div>\n          <el-empty\n            v-if=\"showAgentList.length === 0\"\n            :description=\"$t('common.no_data')\"\n            :image-size=\"100\"\n            :image=\"$getPublicPath('/images/chat/completion_empty.png')\"\n          />\n        </div>\n      </div>\n    </template>\n\n    <slot></slot>\n  </el-tooltip>\n</template>\n\n<script setup lang=\"ts\">\nimport { Close, Search } from '@element-plus/icons-vue'\nimport { computed, reactive, ref } from 'vue'\n\nimport { useAgentStore } from '@/stores/modules/agent'\nimport { useBasicLayout } from '@/hooks/useBasicLayout'\n\nconst { isSmScreen } = useBasicLayout()\n\nconst emits = defineEmits<{\n  (e: 'select', data: Agent.State): void\n}>()\n\nconst agentStore = useAgentStore()\n\nconst tooltipRef = ref()\n\nconst state: {\n  keyword: string\n  group_id: number\n} = reactive({\n  keyword: '',\n  group_id: 0\n})\n\nconst showAgentList = computed(() => {\n  const filterList = agentStore.agentList.filter((item) => item.user_group_ids.length > 0)\n  // if (!state.keyword) {\n  //   return state.group_id === 0 ? agentStore.agentList : agentStore.agentList.filter((item) => item.group_id === state.group_id)\n  // }\n  if (!state.keyword) {\n    return state.group_id === 0 ? filterList : filterList.filter((item) => item.group_id === state.group_id)\n  }\n  const keyword = state.keyword.toLowerCase().trim()\n  // return agentStore.agentList.filter((item) => {\n  //   const matchKeyword = item.name.toLowerCase().includes(keyword) || (item.description && item.description.toLowerCase().includes(keyword))\n  //   return (state.group_id === 0 || item.group_id === state.group_id) && matchKeyword\n  // })\n  return filterList.filter((item) => {\n    const matchKeyword = item.name.toLowerCase().includes(keyword) || (item.description && item.description.toLowerCase().includes(keyword))\n    return (state.group_id === 0 || item.group_id === state.group_id) && matchKeyword\n  })\n})\n\nconst handleClose = () => {\n  tooltipRef.value.hide()\n}\nconst handleSelect = (item: Agent.State) => {\n  emits('select', item)\n  handleClose()\n}\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/chat/chat/components/history.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, computed, reactive } from 'vue'\nimport { useConversationStore } from '@/stores/modules/conversation'\n\nconst emits = defineEmits<{\n  (e: 'new'): void\n}>()\n\nconst convStore = useConversationStore()\nconst currentConv = computed(() => convStore.currentConversation)\n\nconst visible = ref(false)\n\nconst state = reactive({\n  editVisible: false\n})\nconst convForm = reactive({\n  conversation_id: 0,\n  title: ''\n})\n\nconst handleCreate = () => {\n  emits('new')\n  visible.value = false\n}\n\nconst handleEditConv = async () => {\n  await convStore.editConversation(convForm)\n  state.editVisible = false\n}\nconst delConversation = async (conv: Conversation.Info) => {\n  await ElMessageBox.confirm(\n    window.$t('chat.conversation_confirm_delete'),\n    window.$t('action.del'),\n    {\n      confirmButtonText: window.$t('action.del'),\n      cancelButtonText: window.$t('action.cancel'),\n      type: 'warning'\n    }\n  )\n  convStore.delConversation(conv)\n}\nconst handleCommandConv = (event: string, conv: Conversation.Info) => {\n  if (event === 'del') {\n    delConversation(conv)\n  } else if (event === 'edit') {\n    convForm.conversation_id = conv.conversation_id\n    convForm.title = conv.title\n    state.editVisible = true\n  }\n}\n\ndefineExpose({\n  open() {\n    visible.value = true\n  }\n})\n</script>\n\n<template>\n  <el-drawer v-model=\"visible\" :title=\"$t('chat.history')\" size=\"300px\">\n    <el-button class=\"w-full border-none -mt-4\" type=\"primary\" size=\"large\" plain @click=\"handleCreate\">\n      + {{ $t('chat.new_conversation') }}\n    </el-button>\n    <div class=\"flex flex-col gap-2 mt-4\">\n      <template v-for=\"item in convStore.conversations\" :key=\"item.conversation_id\">\n        <div class=\"group p-3 rounded cursor-pointer hover:bg-[#F5F6FA]\"\n          :class=\"[currentConv.conversation_id === item.conversation_id ? 'bg-[#F5F6FA]' : '']\"\n          @click=\"convStore.setCurrentState(item.agent_id, item.conversation_id)\">\n          <div class=\"flex items-center gap-2\">\n            <div class=\"flex-1 text-sm text-primary truncate\">{{ item.title }}</div>\n            <el-dropdown @command=\"handleCommandConv($event, item)\">\n              <div class=\"size-7 flex-center cursor-pointer invisible group-hover:visible\">\n                <svg-icon name=\"more-h\" />\n              </div>\n              <template #dropdown>\n                <el-dropdown-menu>\n                  <el-dropdown-item command=\"edit\">\n                    <svg-icon name=\"edit\" class=\"mr-1\"></svg-icon>\n                    {{ $t('action.rename') }}\n                  </el-dropdown-item>\n                  <el-dropdown-item command=\"del\">\n                    <span class=\"text-[#FA5151] flex-center\">\n                      <svg-icon name=\"del\" class=\"mr-1\"></svg-icon>\n                      {{ $t('action.del') }}\n                    </span>\n                  </el-dropdown-item>\n                </el-dropdown-menu>\n              </template>\n            </el-dropdown>\n          </div>\n          <div class=\"mt-2 text-xs text-secondary\">{{ item.created_at }}</div>\n        </div>\n      </template>\n    </div>\n  </el-drawer>\n\n  <el-dialog v-model=\"state.editVisible\" :title=\"$t('chat.edit_conversation')\" width=\"480\">\n    <el-input size=\"large\" v-model=\"convForm.title\" v-trim :placeholder=\"$t('form.input_placeholder')\" :maxlength=\"20\"\n      show-word-limit></el-input>\n\n    <template #footer>\n      <el-button @click=\"state.editVisible = false\">{{ $t('action.cancel') }}</el-button>\n      <el-button v-debounce type=\"primary\" :disabled=\"!convForm.title.trim()\" @click=\"handleEditConv\">{{\n        $t('action.confirm') }}</el-button>\n    </template>\n  </el-dialog>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/chat/chat/index.vue",
    "content": "<template>\n  <div class=\"flex flex-col min-h-full\">\n    <header v-if=\"isShareMode\" class=\"flex-none sticky top-0 z-10 bg-white\" :class=\"[showRecommend ? 'w-4/6' : 'border-b']\">\n      <div class=\"h-[70px] flex items-center justify-between\" :class=\"[showRecommend ? 'w-[95%]' : 'w-11/12 md:w-4/5 max-w-[800px] mx-auto']\">\n        <el-checkbox\n          :model-value=\"state.selectAll\"\n          :label=\"state.selectAll ? $t('action.unselect_all') : $t('action.select_all')\"\n          :value=\"true\"\n          size=\"large\"\n          @click=\"handleSelectAll\"\n        />\n        <div class=\"flex items-center gap-2\">\n          <div\n            v-if=\"state.selectMessageIds.length\"\n            v-debounce\n            class=\"h-8 flex items-center gap-1 px-2 rounded-md bg-[#F5F5F7] cursor-pointer hover:bg-[#E1E2E3]\"\n            @click.stop=\"handleCreateShare\"\n          >\n            <svg-icon name=\"unlink\" size=\"16\" stroke />\n            <span class=\"text-sm text-primary\">复制链接</span>\n          </div>\n          <div class=\"size-8 flex-center rounded-md bg-[#F5F5F7] cursor-pointer hover:bg-[#E1E2E3]\" @click=\"handleOpenShare()\">\n            <el-icon>\n              <Close />\n            </el-icon>\n          </div>\n        </div>\n      </div>\n    </header>\n    <MainHeader v-else-if=\"!hideMenuHeader\">\n      <template #before_suffix>\n        <div class=\"text-base text-primary line-clamp-1 max-md:flex-1 max-md:text-center\" :title=\"currentConv.title || currentAgent.name || ''\">\n          {{ currentConv.title || currentAgent.name || '' }}\n        </div>\n      </template>\n      <template #after_prefix>\n        <span class=\"flex items-center gap-1 text-sm cursor-pointer md:hidden\" @click=\"$router.back()\">\n          <svg-icon name=\"return\" size=\"18\" stroke></svg-icon>\n        </span>\n        <div\n          v-if=\"state.messageList.length\"\n          v-tooltip=\"{ content: $t('action.share') }\"\n          class=\"h-6 px-1 rounded flex-center gap-1 cursor-pointer hover:bg-[#E1E2E3]\"\n          @click.stop=\"handleOpenShare()\"\n        >\n          <svg-icon size=\"18\" name=\"share-two\" color=\"#4F5052\" stroke></svg-icon>\n        </div>\n        <div\n          v-tooltip=\"{ content: $t('chat.usage_guide') }\"\n          class=\"h-6 px-1 rounded flex-center gap-1 cursor-pointer hover:bg-[#E1E2E3]\"\n          @click=\"handleToggleGuide\"\n        >\n          <div class=\"size-4\">\n            <svg-icon name=\"layout-split\" size=\"18\"></svg-icon>\n          </div>\n        </div>\n      </template>\n    </MainHeader>\n\n    <!-- 消息列表区域 -->\n    <div class=\"flex-1 flex mt-5\">\n      <x-bubble-list\n        ref=\"bubbleListRef\"\n        :auto-scroll=\"false\"\n        class=\"flex-1\"\n        :messages=\"state.messageList\"\n        :main-class=\"showRecommend ? 'w-[95%]' : 'w-11/12 md:w-4/5 max-w-[800px] mx-auto'\"\n        enable-pull-up\n        @pull-up=\"handleLoadListMore\"\n      >\n        <template v-if=\"currentAgent.settings_obj && !state.messageList.length\" #header>\n          <div\n            class=\"w-full mt-2 flex items-center gap-3 box-border p-6 rounded-xl overflow-hidden\"\n            :style=\"{\n              background: `linear-gradient(90deg, rgba(243, 249, 254, 1) 0%, rgba(247, 243, 255, 1) 100%)`\n            }\"\n          >\n            <img class=\"flex-none size-10 rounded-full overflow-hidden\" :src=\"currentAgent.logo\" />\n            <div class=\"flex-1 flex flex-col gap-1\">\n              <div class=\"text-xl font-semibold text-primary\">{{ currentAgent.name }}</div>\n              <div class=\"text-sm text-regular break-words whitespace-pre-wrap\">\n                {{ currentAgent.description }}\n              </div>\n            </div>\n          </div>\n          <div class=\"mt-2 mb-10\">\n            <AuthTagGroup label-position=\"top\" :model-value=\"currentAgent.user_group_ids\" />\n          </div>\n          <x-bubble-assistant\n            v-if=\"showWelcome\"\n            type=\"welcome\"\n            :content=\"currentAgent.settings_obj.opening_statement\"\n            :suggestions=\"currentAgent.settings_obj.suggested_questions\"\n            @suggestion=\"handleSuggestion\"\n          ></x-bubble-assistant>\n        </template>\n        <template #item=\"{ message, index }\">\n          <div\n            class=\"flex items-center gap-5 rounded-xl\"\n            :class=\"[isShareMode ? 'mb-4 px-3 py-4 bg-[#F5F5F5]' : '']\"\n            @click=\"handleSelectMessage(message)\"\n          >\n            <el-checkbox v-if=\"isShareMode\" :model-value=\"state.selectMessageIds.includes(message.id)\" />\n            <div class=\"flex-1\">\n              <!-- 用户消息气泡 -->\n              <x-bubble-user :key=\"message.id + '_user'\" :content=\"message.query\" :class=\"[isShareMode ? '!mb-0' : '']\" :files=\"message.user_files\">\n                <template v-if=\"state.displayMode === DISPLAY_MODE.CHAT\" #menu>\n                  <div\n                    v-tooltip=\"{ content: $t('action.copy') }\"\n                    v-copy=\"message.query\"\n                    class=\"h-6 px-1 rounded flex-center cursor-pointer hover:bg-[#E1E2E3]\"\n                  >\n                    <el-icon color=\"#9B9B9B\">\n                      <CopyDocument />\n                    </el-icon>\n                  </div>\n                </template>\n              </x-bubble-user>\n            </div>\n          </div>\n\n          <!-- AI助手消息气泡 -->\n          <div\n            class=\"flex items-center gap-5 rounded-xl\"\n            :class=\"[isShareMode ? 'mb-4 px-3 py-4 bg-[#F5F5F5]' : '']\"\n            @click=\"handleSelectMessage(message)\"\n          >\n            <el-checkbox v-if=\"isShareMode\" :model-value=\"state.selectMessageIds.includes(message.id)\" />\n            <div class=\"flex-1\">\n              <x-bubble-assistant\n                :key=\"message.id + '_assistant'\"\n                :content=\"message.answer\"\n                :class=\"[isShareMode ? '!mb-0' : '']\"\n                :reasoning=\"message.reasoning_content\"\n                :reasoning-expanded=\"message.reasoning_expanded\"\n                :streaming=\"message.loading\"\n                :always-show-menu=\"index === state.messageList.length - 1\"\n              >\n                <template v-if=\"!message.loading && state.displayMode === DISPLAY_MODE.CHAT\" #menu>\n                  <div\n                    v-tooltip=\"{ content: $t('action.copy') }\"\n                    v-copy=\"message.answer\"\n                    class=\"h-6 px-1 rounded flex-center cursor-pointer hover:bg-[#E1E2E3]\"\n                  >\n                    <el-icon color=\"#9B9B9B\">\n                      <CopyDocument />\n                    </el-icon>\n                  </div>\n                  <div\n                    v-tooltip=\"{ content: $t('chat.regenerate') }\"\n                    class=\"h-6 px-1 rounded flex-center cursor-pointer hover:bg-[#E1E2E3]\"\n                    @click=\"handleRegenerate(message)\"\n                  >\n                    <el-icon color=\"#9B9B9B\">\n                      <Refresh />\n                    </el-icon>\n                  </div>\n                  <div class=\"h-6 px-1 rounded flex-center gap-1 cursor-pointer hover:bg-[#E1E2E3]\" @click=\"handleOpenShare(message)\">\n                    <svg-icon size=\"18\" name=\"share-two\" color=\"#9B9B9B\" stroke></svg-icon>\n                    <span class=\"text-sm text-[#939499]\">{{ $t('action.share') }}</span>\n                  </div>\n                  <div v-if=\"false\" v-tooltip=\"{ content: $t('chat.like') }\" class=\"h-6 px-1 rounded flex-center cursor-pointer hover:bg-[#E1E2E3]\">\n                    <svg-icon size=\"18\" name=\"like\" color=\"#9B9B9B\"></svg-icon>\n                  </div>\n                  <div v-if=\"false\" v-tooltip=\"{ content: $t('chat.like') }\" class=\"h-6 px-1 rounded flex-center cursor-pointer hover:bg-[#E1E2E3]\">\n                    <svg-icon size=\"18\" name=\"dislike\" color=\"#9B9B9B\"></svg-icon>\n                  </div>\n                </template>\n              </x-bubble-assistant>\n            </div>\n          </div>\n          <RelatedScene v-if=\"index === state.messageList.length - 1 && !message.loading && !isShareMode\" :output=\"message.answer\" />\n        </template>\n      </x-bubble-list>\n\n      <div v-if=\"showRecommend\" class=\"flex-none w-2/6 flex flex-col gap-4 pb-5\" :class=\"[isShareMode ? '-mt-[70px]' : '']\">\n        <h2 class=\"flex-none text-base font-semibold text-regular\">{{ $t('common.related_agent') }}</h2>\n        <div v-if=\"currentAgent.agent_id\" class=\"flex-1 overflow-y-auto flex flex-col gap-2.5\">\n          <template v-for=\"item in relatedAgentList\" :key=\"item.agent_id\">\n            <div class=\"flex-none h-24 border rounded p-4 cursor-pointer hover:bg-[#F1F2F3]\" @click=\"onSelectAgent(item)\">\n              <div class=\"flex items-center gap-2\">\n                <img class=\"size-6 rounded-full\" :src=\"item.logo\" />\n                <span class=\"text-sm text-primary\">{{ item.name }}</span>\n              </div>\n              <div class=\"text-sm text-regular line-clamp-2 mt-1.5\" :title=\"item.description\">\n                {{ item.description || '--' }}\n              </div>\n            </div>\n          </template>\n        </div>\n      </div>\n    </div>\n\n    <!-- 底部输入区域 -->\n    <div v-if=\"!isShareMode\" class=\"py-5 sticky bottom-0 bg-white\" :class=\"[showRecommend ? 'w-4/6' : 'w-11/12 md:w-4/5 max-w-[800px] mx-auto']\">\n      <div class=\"flex gap-2 mb-2.5\">\n        <AgentTooltip @select=\"onSelectAgent\">\n          <div class=\"h-8 px-2 rounded-full flex-center gap-1.5 bg-[#F1F2F3] cursor-pointer hover:bg-[#E1E2E3]\">\n            <img class=\"size-4 rounded-full\" :src=\"currentAgent.logo\" alt=\"\" />\n            <span class=\"text-sm text-primary\">{{ currentAgent.name }}</span>\n            <div class=\"size-4 flex-center\">\n              <el-icon color=\"#333333\">\n                <ArrowDown />\n              </el-icon>\n            </div>\n          </div>\n        </AgentTooltip>\n\n        <div v-if=\"false\" class=\"h-8 px-2 rounded-full flex-center gap-1.5 bg-[#F1F2F3] cursor-pointer hover:bg-[#E1E2E3]\">\n          <div class=\"size-4\">\n            <svg-icon name=\"network\"></svg-icon>\n          </div>\n          <span class=\"text-sm text-primary\">{{ $t('chat.online_search') }}</span>\n        </div>\n        <div class=\"flex-1\"></div>\n        <div\n          v-if=\"showHistory\"\n          v-permission\n          class=\"h-8 px-2 rounded-full flex-center gap-1.5 bg-[#F1F2F3] text-sm text-primary cursor-pointer hover:bg-[#E1E2E3]\"\n          @click=\"handleHistory\"\n        >\n          <div class=\"size-4\">\n            <svg-icon name=\"history\"></svg-icon>\n          </div>\n          {{ $t('chat.history') }}\n        </div>\n        <div\n          class=\"h-8 px-2 rounded-full flex-center gap-1.5 bg-[#F1F2F3] text-sm text-primary cursor-pointer hover:bg-[#E1E2E3]\"\n          @click=\"handleNewConversation\"\n        >\n          <div class=\"size-4\">\n            <svg-icon name=\"plus\"></svg-icon>\n          </div>\n          {{ $t('chat.new_conversation') }}\n        </div>\n      </div>\n      <x-sender\n        ref=\"senderRef\"\n        :http-request=\"httpRequest\"\n        :enable-upload=\"enable_upload\"\n        :accept-types=\"upload_accept\"\n        :loading=\"state.isStreaming\"\n        allow-multiple\n        enable-drag-upload\n        :allow-send-with-files=\"allowSendWithFiles\"\n        @send=\"handleSend\"\n        @stop=\"handleStop\"\n      ></x-sender>\n      <div v-if=\"enterpriseStore.copyright.toLowerCase() !== 'true'\" class=\"flex justify-center items-center my-2\">\n        <img :src=\"$getPublicPath('/images/chat/footer.png')\" class=\"h-3\" />\n      </div>\n    </div>\n  </div>\n\n  <!-- 右侧帮助面板 -->\n  <Transition name=\"slide\">\n    <div\n      v-if=\"state.showHelper\"\n      class=\"border-l bg-white left-0 right-0 top-0 bottom-0 z-10\"\n      :class=\"[useCaseFixed && state.showHelper ? 'fixed' : 'absolute']\"\n    >\n      <div class=\"h-[70px] flex-center border-b relative\">\n        <h4 class=\"text-lg text-primary\">{{ $t('chat.usage_guide') }}</h4>\n        <div\n          class=\"flex-center size-6 absolute right-2 top-1/2 -translate-y-1/2 rounded cursor-pointer hover:bg-[#ECEDEE]\"\n          @click=\"handleToggleGuide\"\n        >\n          <el-icon>\n            <Close />\n          </el-icon>\n        </div>\n      </div>\n      <Helper :agent=\"currentAgent\"></Helper>\n    </div>\n  </Transition>\n  <HistoryDrawer ref=\"historyRef\" @new=\"handleNewConversation\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowDown, Close, CopyDocument, Refresh } from '@element-plus/icons-vue'\nimport { computed, defineAsyncComponent, onMounted, onBeforeUnmount, reactive, ref } from 'vue'\nimport MainHeader from '@/layout/header.vue'\nimport AuthTagGroup from '@/components/AuthTagGroup/index.vue'\nimport AgentTooltip from './components/agent-tooltip.vue'\nimport HistoryDrawer from './components/history.vue'\nimport RelatedScene from '@/components/RelatedScene/index.vue'\n\nimport { useAgentStore } from '@/stores/modules/agent'\nimport { useConversationStore } from '@/stores/modules/conversation'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\n\nimport { API_HOST } from '@/api/host'\nimport chatApi from '@/api/modules/chat'\nimport conversationApi from '@/api/modules/conversation'\nimport uploadApi from '@/api/modules/upload'\n\nimport { checkPermission } from '@/utils/permission'\nimport sharesApi from '@/api/modules/share'\nimport { copyToClip } from '@/utils/copy'\nimport { isHashRouter } from '@/router'\n\nconst Helper = defineAsyncComponent(() => import('../helper.vue'))\n// 扩展消息类型，添加动效相关属性\ninterface ExtendedMessage extends Conversation.Message {\n  isNew?: boolean\n}\n\nconst DISPLAY_MODE = {\n  CHAT: 'chat',\n  SHARE: 'share'\n}\n\nconst agentStore = useAgentStore()\nconst convStore = useConversationStore()\nconst enterpriseStore = useEnterpriseStore()\n\nwithDefaults(\n  defineProps<{\n    hideMenuHeader?: boolean\n    showRecommend?: boolean\n    useCaseFixed?: boolean\n    showHistory?: boolean\n  }>(),\n  {\n    hideMenuHeader: false,\n    showRecommend: false,\n    useCaseFixed: false,\n    showHistory: false\n  }\n)\n\nconst abortController = ref<AbortController | null>(null)\nconst historyRef = ref<InstanceType<typeof HistoryDrawer> | null>(null)\n\nconst senderRef = ref(null)\nconst bubbleListRef = ref(null)\nconst containerHeight = ref(0)\nlet resizeObserver: ResizeObserver | null = null\n\nconst state = reactive<{\n  offset: number\n  limit: number\n  showHelper: boolean\n  messageList: ExtendedMessage[]\n  isStreaming: boolean\n  isLoadingMore: boolean\n  hasMore: boolean\n  displayMode: string\n  selectMessageIds: number[]\n  selectAll: boolean\n}>({\n  offset: 0,\n  limit: 10,\n  showHelper: false,\n  messageList: [],\n  isStreaming: false,\n  isLoadingMore: false, // 添加加载更多状态标志\n  hasMore: true, // 是否还有更多消息\n  displayMode: DISPLAY_MODE.CHAT,\n  selectMessageIds: [],\n  selectAll: false\n})\n\nconst currentAgent = computed(() => convStore.currentAgent)\nconst currentConv = computed(() => convStore.currentConversation)\nconst custom_config_obj = computed(() => convStore.currentAgent.custom_config_obj)\nconst enable_upload = computed(() => Boolean(custom_config_obj.value?.file_parse?.enable || custom_config_obj.value?.image_parse?.enable))\nconst upload_accept = computed(() => {\n  let accept = ''\n  if (custom_config_obj.value?.file_parse?.enable) accept += '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.csv,.txt,.html,.json,.xml,.md'\n  if (custom_config_obj.value?.image_parse?.enable) accept += ',image/*'\n  return accept\n})\nconst allowSendWithFiles = computed(() => {\n  return ['53ai_agent', 'fastgpt_agent'].includes(custom_config_obj.value?.agent_type)\n})\n\nconst relatedAgentList = computed(() => {\n  return agentStore.agentList.filter((item) => item.agent_id !== currentAgent.value.agent_id).slice(0, 4)\n})\n\nconst showWelcome = computed(() => {\n  const settings = currentAgent.value.settings_obj\n  if (settings.opening_statement && settings.opening_statement.replace(/\\s/g, '')) return true\n  if (\n    settings.suggested_questions &&\n    settings.suggested_questions.length &&\n    settings.suggested_questions.some((item) => item.content.replace(/\\s/g, ''))\n  )\n    return true\n  return false\n})\nconst handleHeightChange = (height) => {\n  agentStore.setBoxHeight(height)\n}\n\nconst isShareMode = computed(() => {\n  return state.displayMode === DISPLAY_MODE.SHARE\n})\n\nconst handleToggleGuide = () => {\n  state.showHelper = !state.showHelper\n}\n\nconst onSelectAgent = (agent: Agent.State) => {\n  convStore.pushUsualAgent(agent)\n  convStore.setCurrentState(agent.agent_id, 0)\n}\n\nconst handleNewConversation = () => {\n  convStore.setCurrentState(currentAgent.value.agent_id, 0)\n}\n\nconst httpRequest = (dataFile: File) => {\n  return new Promise((resolve, reject) => {\n    const isPermission = checkPermission({\n      groupIds: currentAgent.value.user_group_ids,\n      onClick: async () => {\n        try {\n          const res = await uploadApi.upload(dataFile)\n          resolve({\n            id: res.data.id,\n            url: `${API_HOST}/api/preview/${res.data.preview_key || ''}`,\n            size: res.data.size,\n            name: res.data.file_name,\n            mime_type: res.data.mime_type\n          })\n        } catch (error) {\n          reject(error)\n        }\n      }\n    })\n    if (!isPermission) {\n      reject(new Error(window.$t('authority.login_not_permission')))\n    }\n  })\n}\n\n// 处理流式数据的函数\nconst processStreamData = (e: any, processedLength: number): number => {\n  const lastMessage = state.messageList[state.messageList.length - 1]\n  if (!e.event?.target) return processedLength\n\n  const fullResponse = e.event.target.response || ''\n  // 只处理新增的部分\n  const newChunk = fullResponse.substring(processedLength)\n  const newProcessedLength = fullResponse.length\n\n  try {\n    // 处理SSE格式的数据\n    const lines = newChunk.split('\\n').filter((line) => line.trim() !== '' && line.trim() !== 'data: [DONE]')\n    console.log(lines)\n    for (const line of lines) {\n      if (line.startsWith('data:')) {\n        try {\n          const text = line.split(/data\\:\\s*/g)\n          const data = JSON.parse(text[1])\n          const { message_id } = data\n          const content = data.choices?.[0]?.delta?.content\n          const reasoning_content = data.choices?.[0]?.delta?.reasoning_content\n          if (content) {\n            // 将新内容追加到当前消息\n            lastMessage.answer += content\n          }\n          if (reasoning_content) {\n            // 将新内容追加到当前消息\n            lastMessage.reasoning_content += reasoning_content\n          }\n          if (message_id) {\n            lastMessage.id = message_id\n          }\n        } catch (err) {\n          console.error('解析JSON失败:', err)\n        }\n      }\n    }\n  } catch (err) {\n    console.error('处理流数据失败:', err)\n  }\n\n  return newProcessedLength\n}\n\n// 工具函数\nconst messageUtils = {\n  // 格式化消息\n  formatMessage: (item: any): ExtendedMessage => {\n    const data = {\n      ...item,\n      query: ''\n    }\n    const { content } = JSON.parse(item.message)[0]\n    try {\n      const arr = JSON.parse(content)\n      const query = arr.find((item) => item.type === 'text')?.content\n      data.query = query\n      data.user_files = arr.filter((item) => item.type === 'image')\n    } catch (error) {\n      data.query = content\n    }\n    return data\n  },\n\n  // 格式化文件\n  formatFiles: (user_files: any[]): Conversation.UserFile[] =>\n    user_files?.map((item) => ({\n      type: 'image',\n      content: `file_id:${item.id}`,\n      filename: item.name,\n      size: item.size,\n      mime_type: item.mime_type,\n      url: item.url\n    })) || [],\n\n  // 创建新消息\n  createNewMessage: (query: string, agent_id: number, conversation_id: number, user_files: Conversation.UserFile[]): ExtendedMessage => ({\n    id: Date.now(),\n    query,\n    answer: '',\n    loading: true,\n    agent_id,\n    conversation_id,\n    reasoning_content: '',\n    reasoning_expanded: true,\n    user_files\n  })\n}\n\n// 加载消息列表\nconst loadMessages = async (conversation_id: number, offset: number, limit: number) => {\n  try {\n    const res = await conversationApi.messasges(conversation_id, { offset, limit })\n    const list = res.data.messages.map(messageUtils.formatMessage)\n    return {\n      messages: list,\n      hasMore: list.length === limit\n    }\n  } catch (err) {\n    console.error('加载消息失败:', err)\n    return { messages: [], hasMore: false }\n  }\n}\n\nconst handleLoadListMore = async (done: () => void): Promise<void> => {\n  if (state.isLoadingMore || !state.hasMore) return done()\n\n  const { conversation_id } = currentConv.value\n  if (!conversation_id) return done()\n\n  state.isLoadingMore = true\n  state.offset += state.limit\n\n  try {\n    const { messages, hasMore } = await loadMessages(conversation_id, state.offset, state.limit)\n    state.hasMore = hasMore\n    state.messageList.unshift(...messages)\n  } catch (err) {\n    state.offset = Math.max(0, state.offset - state.limit)\n  } finally {\n    state.isLoadingMore = false\n  }\n  return done()\n}\n\nconst loadList = async () => {\n  const { conversation_id } = currentConv.value\n  if (!conversation_id) return\n\n  if (!enterpriseStore.template_style_info.style_type) {\n    await enterpriseStore.initTemplateStyle()\n  }\n\n  state.isLoadingMore = true\n  state.offset = 0\n  state.hasMore = true\n\n  try {\n    const { messages, hasMore } = await loadMessages(conversation_id, state.offset, state.limit)\n    state.hasMore = hasMore\n    state.messageList = messages\n  } finally {\n    state.isLoadingMore = false\n  }\n}\n\nconst sendMessage = async (query: string, user_files: any[]) => {\n  if (state.isStreaming) return\n\n  const { agent_id } = currentAgent.value\n  const { conversation_id } = currentConv.value\n\n  // 创建新消息\n  const newMessage = messageUtils.createNewMessage(query, agent_id, conversation_id, user_files)\n  state.messageList.push(newMessage)\n\n  const configs = JSON.parse(currentAgent.value.configs || '{}')\n  const completion_params = configs.completion_params || {}\n  state.isStreaming = true\n  abortController.value = new AbortController()\n  let processedLength = 0\n\n  let content = query\n  if (user_files.length > 0) {\n    content = JSON.stringify([{ type: 'text', content: query }, ...user_files])\n  }\n\n  try {\n    await chatApi.completions(\n      {\n        conversation_id,\n        model: `agent-${agent_id}`,\n        messages: [{ content, role: 'user' }],\n        frequency_penalty: 0,\n        presence_penalty: 0,\n        stream: true,\n        temperature: 0,\n        top_p: 0,\n        ...completion_params\n      },\n      {\n        responseType: 'stream',\n        onDownloadProgress: (e) => {\n          processedLength = processStreamData(e, processedLength)\n        },\n        signal: abortController.value.signal\n      }\n    )\n  } catch (err: any) {\n    if (err.message !== 'canceled') {\n      console.log(err)\n      const lastMessage = state.messageList[state.messageList.length - 1]\n      if (lastMessage && !lastMessage.answer) {\n        lastMessage.answer = err.response.data || window.$t('response_code.network_error')\n      }\n    }\n    ElMessage.warning(window.$t('agent.failed_tip'))\n  } finally {\n    const lastMessage = state.messageList[state.messageList.length - 1]\n    if (lastMessage) {\n      lastMessage.loading = false\n    }\n\n    state.isStreaming = false\n    abortController.value = null\n  }\n}\n\nconst handleSend = (question: string, user_files: any[]) => {\n  checkPermission({\n    groupIds: currentAgent.value.user_group_ids,\n    onClick: async () => {\n      const { agent_id } = currentAgent.value\n      if (!agent_id) return ElMessage.warning(window.$t('chat.no_available_agent'))\n      if (!currentConv.value.conversation_id) {\n        try {\n          const conversation = await convStore.createConversation(agent_id, question)\n          convStore.addConversation({ ...conversation, virtual_id: currentConv.value.virtual_id })\n          convStore.setCurrentState(conversation.agent_id, conversation.conversation_id)\n        } catch (err) {\n          console.error('创建对话失败:', err)\n        }\n      }\n      await sendMessage(question, messageUtils.formatFiles(user_files))\n      return true\n    }\n  })\n}\n\nconst handleHistory = () => {\n  historyRef.value?.open()\n}\n\nconst handleStop = () => {\n  // 取消当前请求\n  if (abortController.value) {\n    abortController.value.abort()\n    abortController.value = null\n  }\n  state.isStreaming = false\n}\n\nconst handleRegenerate = async (message: Conversation.Message) => {\n  await sendMessage(message.query, message.user_files)\n}\n\nconst handleSuggestion = (suggestion: string) => {\n  handleSend(suggestion, [])\n}\n\nconst handleOpenShare = (message?: Conversation.Message) => {\n  state.selectAll = false\n  state.selectMessageIds = []\n  if (message) {\n    state.displayMode = DISPLAY_MODE.SHARE\n  } else {\n    state.displayMode = DISPLAY_MODE.SHARE === state.displayMode ? DISPLAY_MODE.CHAT : DISPLAY_MODE.SHARE\n  }\n}\n\nconst handleSelectAll = () => {\n  if (state.displayMode === DISPLAY_MODE.SHARE) {\n    state.selectMessageIds = state.selectAll ? [] : state.messageList.map((item) => item.id)\n    state.selectAll = !state.selectAll\n  }\n}\nconst handleSelectMessage = (message: Conversation.Message) => {\n  if (state.displayMode === DISPLAY_MODE.SHARE) {\n    if (state.selectMessageIds.includes(message.id)) {\n      state.selectMessageIds = state.selectMessageIds.filter((id) => id !== message.id)\n      state.selectAll = false\n    } else {\n      state.selectMessageIds.push(message.id)\n    }\n  }\n}\n\nconst handleCreateShare = () => {\n  return sharesApi\n    .create({\n      message_ids: state.selectMessageIds,\n      conversation_id: currentConv.value.conversation_id,\n      select_all: state.selectAll\n    })\n    .then((res) => {\n      const link = `${window.location.origin}${isHashRouter ? '#' : ''}/share/chat?share_id=${res.share_id}`\n      copyToClip(link).then(() => {\n        ElMessage.success(window.$t('chat.completion_share_link'))\n      })\n      state.displayMode = DISPLAY_MODE.CHAT\n    })\n}\n\nonMounted(() => {\n  loadList()\n  if (bubbleListRef.value) {\n    resizeObserver = new ResizeObserver((entries) => {\n      for (const entry of entries) {\n        const { height } = entry.contentRect\n        containerHeight.value = height\n        handleHeightChange(height)\n      }\n    })\n\n    // 注意：有些组件可能需要访问 $el，有些则直接是 DOM 元素\n    const targetElement = bubbleListRef.value.$el || bubbleListRef.value\n    resizeObserver.observe(targetElement)\n  }\n\n  const prepare = convStore.next_agent_prepare\n  if (prepare.agent_id) {\n    const question = prepare.parameters.input\n    senderRef.value?.setPrompt && senderRef.value?.setPrompt(question)\n    if (prepare.execution_rule === 'auto') {\n      senderRef.value?.setPrompt('')\n      handleSend(question, [])\n    }\n    convStore.setNextAgentPrepare({})\n  }\n})\n\nonBeforeUnmount(() => {\n  if (resizeObserver) {\n    resizeObserver.disconnect()\n  }\n})\n\ndefineExpose({\n  showUseCase: () => {\n    state.showHelper = true\n  },\n  hideUseCase: () => {\n    state.showHelper = false\n  },\n  showShare: () => {\n    handleOpenShare()\n  }\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/chat/completion/index.vue",
    "content": "<template>\n  <div class=\"h-full bg-[#F5F6F7] flex flex-col\">\n    <MainHeader v-if=\"!hideMenuHeader\">\n      <template #before_suffix>\n        <div class=\"text-base text-primary line-clamp-1 max-md:flex-1 max-md:text-center\" :title=\"currentAgent.name || ''\">\n          {{ currentAgent.name || '' }}\n        </div>\n      </template>\n      <template #after_prefix>\n        <div class=\"absolute right-2 top-1/2 -translate-y-1/2 flex\">\n          <span class=\"flex items-center gap-1 text-sm cursor-pointer md:hidden\" @click=\"$router.back()\">\n            <svg-icon name=\"return\" size=\"18\" stroke></svg-icon>\n          </span>\n          <div\n            v-tooltip=\"{ content: $t('chat.usage_guide') }\"\n            class=\"h-[26px] px-2 rounded-full flex-center gap-1.5 text-sm text-primary cursor-pointer hover:bg-[#E1E2E3]\"\n            @click=\"handleToggleGuide\"\n          >\n            <div class=\"size-4\">\n              <svg-icon name=\"layout-split\" size=\"18\"></svg-icon>\n            </div>\n          </div>\n        </div>\n      </template>\n    </MainHeader>\n    <div class=\"h-full flex-1 flex flex-col md:flex-row gap-3 p-3 overflow-y-auto\">\n      <div class=\"w-full lg:w-2/5 md:w-2/5 md:h-full bg-white rounded flex flex-col mb-3 md:mb-0\">\n        <h3 class=\"flex-none h-14 flex items-center px-4 md:px-7 text-base text-[#1D1E1F] border-b\">\n          {{ $t('chat.input') }}\n        </h3>\n        <div class=\"flex-1 p-4 overflow-y-auto\">\n          <el-form ref=\"formRef\" :model=\"inputForm\" label-position=\"top\" require-asterisk-position=\"right\" @submit.prevent>\n            <template v-for=\"(item, index) in inputForm\" :key=\"item.id\">\n              <el-form-item\n                v-if=\"item.type === 'text'\"\n                :prop=\"`${index}.value`\"\n                :label=\"item.label\"\n                :required=\"item.required\"\n                :rules=\"[getRequiredRules($t('form.input_placeholder') + item.label, 'blur')]\"\n              >\n                <el-input\n                  v-model=\"item.value\"\n                  size=\"large\"\n                  :placeholder=\"$t('form.input_placeholder')\"\n                  :maxlength=\"item.max_length ? item.max_length : -1\"\n                  :show-word-limit=\"item.show_word_limit\"\n                />\n                <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                  {{ item.desc }}\n                </div>\n              </el-form-item>\n              <el-form-item\n                v-else-if=\"item.type === 'textarea'\"\n                :prop=\"`${index}.value`\"\n                :label=\"item.label\"\n                :required=\"item.required\"\n                :rules=\"[getRequiredRules($t('form.input_placeholder') + item.label, 'blur')]\"\n              >\n                <el-input\n                  v-model=\"item.value\"\n                  size=\"large\"\n                  type=\"textarea\"\n                  :rows=\"4\"\n                  resize=\"none\"\n                  :placeholder=\"$t('form.input_placeholder')\"\n                  :maxlength=\"item.max_length ? item.max_length : -1\"\n                  :show-word-limit=\"item.show_word_limit\"\n                />\n                <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                  {{ item.desc }}\n                </div>\n              </el-form-item>\n              <el-form-item\n                v-else-if=\"item.type === 'inputNumber'\"\n                :prop=\"`${index}.value`\"\n                :label=\"item.label\"\n                :required=\"item.required\"\n                :rules=\"[getRequiredRules($t('form.input_placeholder') + item.label, 'blur')]\"\n              >\n                <div>\n                  <el-input-number v-model=\"item.value\" size=\"large\" :min=\"1\" :placeholder=\"$t('form.input_placeholder')\" />\n                  <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                    {{ item.desc }}\n                  </div>\n                </div>\n              </el-form-item>\n              <el-form-item\n                v-else-if=\"item.type === 'select'\"\n                :prop=\"`${index}.value`\"\n                :label=\"item.label\"\n                :required=\"item.required\"\n                :rules=\"[getRequiredRules($t('form.select_placeholder') + item.label, 'change')]\"\n              >\n                <el-select v-model=\"item.value\" class=\"w-full\" size=\"large\" :multiple=\"item.multiple\" :placeholder=\"$t('form.select_placeholder')\">\n                  <el-option v-for=\"option in item.options\" :key=\"option.value\" :label=\"option.label\" :value=\"option.label\" />\n                </el-select>\n                <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                  {{ item.desc }}\n                </div>\n              </el-form-item>\n\n              <el-form-item\n                v-else-if=\"item.type === 'date'\"\n                :prop=\"`${index}.value`\"\n                :label=\"item.label\"\n                :required=\"item.required\"\n                :rules=\"[getRequiredRules($t('form.select_placeholder'), ['change', 'blur'])]\"\n              >\n                <el-time-picker\n                  v-if=\"item.date_format === 'h-m'\"\n                  v-model=\"item.value\"\n                  format=\"HH:mm\"\n                  size=\"large\"\n                  value-format=\"HH:mm\"\n                  :placeholder=\"$t('form.select_placeholder')\"\n                />\n                <el-date-picker\n                  v-else-if=\"item.date_format === 'y'\"\n                  v-model=\"item.value\"\n                  size=\"large\"\n                  type=\"year\"\n                  value-format=\"YYYY\"\n                  :placeholder=\"$t('form.select_placeholder')\"\n                />\n                <el-date-picker\n                  v-else-if=\"item.date_format === 'y-m'\"\n                  v-model=\"item.value\"\n                  size=\"large\"\n                  type=\"month\"\n                  value-format=\"YYYY-MM\"\n                  :placeholder=\"$t('form.select_placeholder')\"\n                />\n                <el-date-picker\n                  v-else-if=\"item.date_format === 'y-m-d'\"\n                  v-model=\"item.value\"\n                  size=\"large\"\n                  type=\"date\"\n                  value-format=\"YYYY-MM-DD\"\n                  :placeholder=\"$t('form.select_placeholder')\"\n                />\n                <el-date-picker\n                  v-else-if=\"item.date_format === 'y-m-d-h'\"\n                  v-model=\"item.value\"\n                  size=\"large\"\n                  type=\"datetime\"\n                  format=\"YYYY-MM-DD HH\"\n                  time-format=\"HH\"\n                  value-format=\"YYYY-MM-DD HH\"\n                  :placeholder=\"$t('form.select_placeholder')\"\n                />\n                <el-date-picker\n                  v-else-if=\"item.date_format === 'daterange'\"\n                  v-model=\"item.value\"\n                  size=\"large\"\n                  type=\"daterange\"\n                  value-format=\"YYYY-MM-DD HH:mm\"\n                  :start-placeholder=\"$t('form.select_placeholder')\"\n                  :end-placeholder=\"$t('form.select_placeholder')\"\n                />\n\n                <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                  {{ item.desc }}\n                </div>\n              </el-form-item>\n\n              <el-form-item\n                v-else-if=\"item.type === 'tag'\"\n                :prop=\"`${index}.value`\"\n                :label=\"item.label\"\n                :required=\"item.required\"\n                :rules=\"[{ validator: validator(item), trigger: 'change' }]\"\n              >\n                <div>\n                  <div class=\"flex flex-wrap gap-3\">\n                    <template v-for=\"(tag, childIndex) in item.value\" :key=\"childIndex\">\n                      <div\n                        class=\"border bordre-[#B0B7C3] rounded-sm min-h-[32px] inline-flex items-center px-3 py-1 text-xs text-[#182B50] text-opacity-80 break-all\"\n                      >\n                        {{ tag }}\n                        <el-icon class=\"cursor-pointer ml-1\" color=\"#d2d5dc\" @click=\"handleDelTag(item, childIndex)\">\n                          <Close />\n                        </el-icon>\n                      </div>\n                    </template>\n                    <el-input\n                      v-if=\"item.focus\"\n                      v-model=\"item.temp\"\n                      autofocus\n                      style=\"width: 104px\"\n                      class=\"h-8\"\n                      :placeholder=\"$t('form.input_placeholder')\"\n                      @keypress.enter=\"handleAddTag(item)\"\n                      @blur=\"handleAddTag(item)\"\n                    />\n                    <div\n                      v-else\n                      class=\"border bordre-[#B0B7C3] border-dashed rounded-sm h-8 inline-flex items-center px-3 cursor-pointer\"\n                      @click=\"handleFocusTag(item)\"\n                    >\n                      <span class=\"text-xs text-[#182B50] text-opacity-80\">+ {{ $t('action.add') }}</span>\n                    </div>\n                  </div>\n                  <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                    {{ item.desc }}\n                  </div>\n                </div>\n              </el-form-item>\n\n              <el-form-item\n                v-else-if=\"['file', 'array_image', 'array_audio', 'array_video', 'array_file'].includes(item.type)\"\n                :prop=\"`${index}.value`\"\n                :label=\"item.label\"\n                :required=\"item.required\"\n                :rules=\"[{ validator: validator(item), trigger: ['change', 'blur'] }]\"\n              >\n                <div class=\"w-full\">\n                  <div v-show=\"item.limit !== item.value.length\">\n                    <FileUpload\n                      ref=\"uploadRef\"\n                      v-model:file-list=\"item.value\"\n                      class=\"w-20\"\n                      drag\n                      :accept=\"item.file_accept.map((item) => `.${item}`).join(',')\"\n                      :limit=\"item.file_limit\"\n                      :multiple=\"item.file_limit === 1 ? false : true\"\n                      :size=\"item.file_size\"\n                      :show-file-list=\"false\"\n                    >\n                      <div class=\"w-20 h-20 border border-dashed rounded-sm flex-center flex-col\">\n                        <!-- <img class=\"w-4 h-4\" src=\"/images/upload.png\" /> -->\n\n                        <div class=\"text-xs text-[#182B5066] mt-2\">{{ $t('action.click_upload') }}</div>\n                      </div>\n                    </FileUpload>\n                  </div>\n                  <template v-for=\"file in item.value\" :key=\"file.uid\">\n                    <div class=\"h-9 px-2 border rounded mt-3 flex items-center gap-2\">\n                      <div class=\"flex-1 text-sm text-[#182B50] truncate\">\n                        {{ file.name }}\n                      </div>\n                      <div v-if=\"file.status === 'success'\" class=\"flex items-center\">\n                        <el-button type=\"primary\" link @click=\"handleViewFile(file)\">{{ $t('action.view') }}</el-button>\n                        <el-image-viewer v-if=\"imageVisible\" :url-list=\"[imageFile]\" show-progress :initial-index=\"0\" @close=\"imageVisible = false\" />\n                        <div class=\"w-px h-4 mx-1 bg-[#E3E5EA]\" />\n                        <el-button type=\"danger\" link @click=\"handleDelFile(file, item)\">{{ $t('action.delete') }}</el-button>\n                      </div>\n                      <div v-else class=\"flex items-center\">\n                        <el-icon class=\"animate-rotate\">\n                          <Loading />\n                        </el-icon>\n                      </div>\n                    </div>\n                  </template>\n\n                  <div class=\"flex items-center gap-1 mt-2\">\n                    <el-icon size=\"14\" color=\"#182B50\">\n                      <Warning />\n                    </el-icon>\n                    <span class=\"text-xs text-[#182B50CC]\">{{ $t('file.file_size', { size: item.file_size }) }}</span>\n                  </div>\n                  <p class=\"text-xs text-[#182B50CC]\">{{ $t('file.file_format', { format: item.file_accept.join('、') }) }}</p>\n                </div>\n              </el-form-item>\n\n              <template v-if=\"item.type === 'array_text'\">\n                <el-form-item\n                  v-for=\"(input, inputIndex) in item.value\"\n                  :key=\"inputIndex\"\n                  :prop=\"`${index}.value[${inputIndex}]`\"\n                  :label=\"inputIndex === 0 ? item.label : ''\"\n                  :required=\"item.required\"\n                  :rules=\"[{ required: item.required, message: $t('form.input_placeholder') + item.label, trigger: 'blur' }]\"\n                  class=\"relative\"\n                >\n                  <el-input\n                    v-model=\"item.value[inputIndex]\"\n                    size=\"large\"\n                    :placeholder=\"$t('form.input_placeholder')\"\n                    :maxlength=\"item.max_length ? item.max_length : -1\"\n                    :show-word-limit=\"item.show_word_limit\"\n                  >\n                    <template #suffix>\n                      <svg-icon name=\"del\" width=\"16\" class=\"cursor-pointer hover:opacity-60\" @click=\"handleArrayTextDelete(item, inputIndex)\" />\n                    </template>\n                  </el-input>\n                  <div v-if=\"item.desc\" class=\"text-xs text-[#182b50] text-opacity-30 mt-1\">\n                    {{ item.desc }}\n                  </div>\n                  <el-button v-if=\"inputIndex === 0\" link type=\"primary\" class=\"absolute -top-7 right-0\" @click=\"handleArrayTextAdd(item)\">\n                    <el-icon class=\"mr-1\"><Plus /></el-icon>\n                    {{ $t('action.add') }}\n                  </el-button>\n                </el-form-item>\n              </template>\n            </template>\n          </el-form>\n        </div>\n        <div class=\"border-t px-4 md:px-7 py-4 md:py-5\">\n          <el-button :loading=\"loading\" class=\"w-full\" size=\"large\" type=\"primary\" @click=\"handleRun\">{{ $t('chat.start_generate') }}</el-button>\n        </div>\n      </div>\n      <div class=\"flex-1 md:h-full bg-white rounded flex flex-col\">\n        <h3 class=\"flex-none h-14 flex items-center px-4 md:px-7 text-base text-[#1D1E1F] border-b\">\n          {{ $t('chat.output') }}\n        </h3>\n        <div class=\"flex-1 px-4 p-6 overflow-y-auto relative\">\n          <div v-if=\"showOutput && !loading\" class=\"absolute right-1 top-2 flex items-center z-10\">\n            <div v-copy=\"resultStr\" class=\"px-2 rounded flex-center gap-1 text-sm text-[#1D1E1F] cursor-pointer\">\n              <el-icon><CopyDocument /></el-icon>\n              {{ $t('action.copy') }}\n            </div>\n            <div v-debounce class=\"px-2 rounded flex-center gap-1 text-sm text-[#1D1E1F] cursor-pointer\" @click=\"handleDownload\">\n              <el-icon><Download /></el-icon>\n              {{ $t('action.download') }}\n            </div>\n          </div>\n\n          <el-empty\n            v-if=\"!showOutput\"\n            :image=\"$getPublicPath('/images/chat/completion_empty.png')\"\n            :description=\"$t('chat.completion_empty_desc')\"\n          ></el-empty>\n\n          <template v-else>\n            <div v-for=\"item in result\" :key=\"item.id\">\n              <div class=\"text-sm text-[#1D1E1F] mt-2\">\n                <!-- <x-md-renderer :content=\"result\" /> -->\n                <x-bubble-assistant v-if=\"item.type === 'markdown'\" :content=\"item.value\" :streaming=\"loading\"></x-bubble-assistant>\n                <div v-else-if=\"item.type.includes('image')\" class=\"overflow-hidden flex flex-col gap-5\">\n                  <img\n                    v-for=\"(src, index) in Array.isArray(item.value) ? item.value : [item.value]\"\n                    :key=\"index\"\n                    :src=\"src\"\n                    class=\"max-w-full h-auto object-contain rounded\"\n                  />\n                </div>\n                <div v-else-if=\"item.type.includes('video')\" class=\"overflow-hidden flex flex-col gap-5\">\n                  <video\n                    v-for=\"(src, index) in Array.isArray(item.value) ? item.value : [item.value]\"\n                    :key=\"index\"\n                    :src=\"getSrc(src, item.id)\"\n                    controls\n                    class=\"max-w-full h-auto\"\n                  ></video>\n                </div>\n                <div v-else-if=\"item.type.includes('audio')\" class=\"overflow-hidden flex flex-col gap-5\">\n                  <audio\n                    v-for=\"(src, index) in Array.isArray(item.value) ? item.value : [item.value]\"\n                    :key=\"index\"\n                    :src=\"getSrc(src, item.id)\"\n                    controls\n                    class=\"max-w-full\"\n                  ></audio>\n                </div>\n                <div v-else-if=\"item.type.includes('text')\">\n                  <p\n                    v-for=\"(text, index) in Array.isArray(item.value) ? item.value : [item.value]\"\n                    :key=\"index\"\n                    class=\"whitespace-pre-wrap break-all\"\n                  >\n                    {{ text }}\n                  </p>\n                </div>\n              </div>\n            </div>\n          </template>\n        </div>\n        <template v-if=\"currentAgent.settings_obj?.relate_agents?.length && showOutput && !loading\">\n          <div class=\"sticky top-[100%] pb-2\">\n            <RelatedScene :is-workflow=\"true\" :output=\"result\" @init-agent=\"initAgent\" />\n          </div>\n        </template>\n\n        <!-- 输出 -->\n        <!-- class=\"h-full\" -->\n      </div>\n    </div>\n  </div>\n\n  <!-- 右侧帮助面板 -->\n  <Transition name=\"slide\">\n    <div\n      v-if=\"showHelper\"\n      class=\"border-l bg-white left-0 right-0 top-0 bottom-0 z-[10]\"\n      :class=\"[useCaseFixed && showHelper ? 'fixed' : 'absolute']\"\n    >\n      <div class=\"h-[70px] flex-center border-b relative\">\n        <h4 class=\"text-lg text-primary\">{{ $t('chat.usage_guide') }}</h4>\n        <div\n          class=\"flex-center size-6 absolute right-2 top-1/2 -translate-y-1/2 rounded cursor-pointer hover:bg-[#ECEDEE]\"\n          @click=\"handleToggleGuide\"\n        >\n          <el-icon>\n            <Close />\n          </el-icon>\n        </div>\n      </div>\n      <Helper :agent=\"currentAgent\"></Helper>\n    </div>\n  </Transition>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watchEffect, nextTick } from 'vue'\nimport { Download, CopyDocument, Close, Warning, Loading, Plus } from '@element-plus/icons-vue'\nimport type { FormInstance } from 'element-plus'\nimport { ElMessage } from 'element-plus'\n\nimport { useConversationStore } from '@/stores/modules/conversation'\nimport { getRequiredRules } from '@/utils/form-rules'\nimport { checkPermission } from '@/utils/permission'\nimport chatApi from '@/api/modules/chat'\nimport { downloadFile } from '@/utils/file'\n\nimport MainHeader from '@/layout/header.vue'\nimport FileUpload from '@/components/Upload/index.vue'\nimport Helper from '../helper.vue'\nimport RelatedScene from '@/components/RelatedScene/index.vue'\n\nimport { isUrl } from '@/utils/url'\n\nwithDefaults(\n  defineProps<{\n    hideMenuHeader: boolean\n    useCaseFixed: boolean\n  }>(),\n  {\n    hideMenuHeader: false,\n    useCaseFixed: false\n  }\n)\n\nconst convStore = useConversationStore()\n\nconst currentAgent = computed(() => convStore.currentAgent)\n\nconst formRef = ref<FormInstance>()\n\nconst inputForm = ref<any>([])\nconst abortController = ref<AbortController | null>(null)\nconst loading = ref(false)\nconst showOutput = ref(false)\nconst result = ref([])\nconst resultStr = ref('')\nconst showHelper = ref(false)\nconst imageVisible = ref(false)\nconst imageFile = ref()\n\nconst validator = (item) => {\n  return (rule, value, callback) => {\n    if (item.required) {\n      const hasVal = item.value.some((item) => item.trim())\n      if (hasVal) callback()\n      else callback(new Error(`请添加${item.label}`))\n    } else {\n      callback()\n    }\n  }\n}\n\n// 从对象中获取url\nconst getSrc = (value: any, id: string) => {\n  if (typeof value === 'object' && value !== null) {\n    for (const key in value) {\n      if (Object.prototype.hasOwnProperty.call(value, key)) {\n        const val = value[key]\n        if (typeof val === 'string' && isUrl(val)) {\n          return val\n        }\n      }\n    }\n    result.value = result.value.filter((item) => item.id !== id)\n    ElMessage.error(window.$t('chat.not_found_url'))\n  }\n  return value\n}\n\nconst handleFocusTag = (item) => {\n  item.temp = ''\n  item.focus = true\n}\nconst handleAddTag = (item) => {\n  const temp = item.temp.trim()\n  if (temp) {\n    item.value.unshift(temp)\n    item.temp = ''\n  }\n  item.focus = false\n}\nconst handleDelTag = (item, index) => {\n  item.value.splice(index, 1)\n}\nconst handleArrayTextAdd = (item) => {\n  item.value.push('')\n}\nconst handleArrayTextDelete = (item, index) => {\n  if (item.value.length === 1) {\n    item.value = ['']\n    return\n  }\n  item.value.splice(index, 1)\n}\nconst handleViewFile = (file) => {\n  imageVisible.value = true\n  imageFile.value = file?.url\n}\nconst handleDelFile = (file, item) => {\n  item.value = item.value.filter((item) => item.id !== file.id)\n}\n\nconst handleDownload = () => {\n  downloadFile(result.value, `result_output_${Date.now()}.json`)\n}\n\nconst getInputs = () => {\n  const inputs = inputForm.value.reduce(\n    (result, item) => {\n      if (item.value.toString() === '') return result\n      if (item.type === 'file') {\n        result[`${item.variable}`] = item.value.map((item) => `file_id:${item.id}`).join(',')\n      } else if (['array_image', 'array_audio', 'array_video', 'array_file'].includes(item.type)) {\n        result[`${item.variable}`] = item.value.map((item) => `file_id:${item.id}`)\n      } else if (item.type === 'array_text') {\n        result[`${item.variable}`] = item.value\n      } else {\n        result[`${item.variable}`] =\n          item.type === 'select' && !item.multiple ? item.value : Array.isArray(item.value) ? item.value.join(',') : String(item.value)\n      }\n      return result\n    },\n    {} as Record<string, string>\n  )\n  Object.keys(inputs).forEach((key) => {\n    if (inputs[key] === '' || inputs[key] === null) {\n      delete inputs[key]\n    }\n  })\n  return inputs\n}\n\nconst getQuestion = (inputs): string => {\n  let question = ''\n  let index = 0\n  const keys = Object.keys(inputs)\n  if (keys.length === 0) return ''\n  while (!question) {\n    const value = inputs[keys[index]]\n    if (value) {\n      question = String(question).slice(0, 20)\n      return question\n    }\n    index++\n  }\n  return ''\n}\n\nconst workflowRun = async () => {\n  result.value = []\n  resultStr.value = ''\n  const { agent_id } = currentAgent.value\n  const inputs = getInputs()\n  const conversation = await convStore.createConversation(agent_id, getQuestion(inputs))\n\n  const data = {\n    conversation_id: conversation.conversation_id,\n    model: `agent-${agent_id}`,\n    parameters: inputs,\n    stream: true\n  }\n  loading.value = true\n  abortController.value = new AbortController()\n  showOutput.value = true\n  chatApi.workflow\n    .run(data, {\n      onDownloadProgress: (e) => {\n        console.log(e)\n      },\n      responseType: 'stream',\n      signal: abortController.value?.signal\n    })\n    .then((response) => {\n      const res = JSON.parse(response)\n      const output = convStore.currentAgent.settings_obj.output_fields.reduce((result, item) => {\n        if (!res.data.workflow_output_data[item.variable]) return result\n        result.push({\n          id: item.id,\n          label: item.label,\n          type: item.type,\n          variable: item.variable,\n          value: res.data.workflow_output_data[item.variable] || ''\n        })\n        return result\n      }, [])\n      result.value = output\n      resultStr.value = output.map((item) => `${item.value}`).join('\\n')\n    })\n    .finally(() => {\n      loading.value = false\n    })\n}\nconst handleRun = async () => {\n  const isValid = await formRef.value?.validate()\n  if (!isValid) return\n  checkPermission({\n    groupIds: currentAgent.value.user_group_ids,\n    onClick: async () => {\n      const { agent_id } = currentAgent.value\n      if (!agent_id) return ElMessage.warning(window.$t('chat.no_available_agent'))\n      workflowRun()\n      return true\n    }\n  })\n}\n\nconst handleToggleGuide = () => {\n  showHelper.value = !showHelper.value\n}\n\nconst initAgent = () => {\n  inputForm.value = (convStore.currentAgent.settings_obj?.input_fields || []).map((item) => {\n    let value\n    if (['tag', 'file', 'array_image', 'array_audio', 'array_video', 'array_file'].includes(item.type)) {\n      value = []\n    } else if (item.type === 'select' && item.multiple) {\n      value = []\n    } else if (item.type === 'array_text') {\n      value = ['']\n    } else {\n      value = ''\n    }\n    return {\n      ...item,\n      temp: '',\n      value\n    }\n  })\n\n  if (convStore.next_agent_prepare.agent_id) {\n    inputForm.value = inputForm.value.map((item) => {\n      const value = convStore.next_agent_prepare.parameters?.[item.id]\n      if (value) {\n        if (Array.isArray(item.value)) {\n          item.value = value.split(',') || []\n        } else {\n          item.value = value || ''\n        }\n      }\n      return item\n    })\n    if (convStore.next_agent_prepare.execution_rule === 'auto') {\n      handleRun()\n    }\n    convStore.setNextAgentPrepare({})\n  }\n}\n\nwatchEffect(() => {\n  const agent_id = convStore.current_agentid\n  if (agent_id) {\n    nextTick(() => {\n      initAgent()\n    })\n  }\n})\n\ndefineExpose({\n  showUseCase: () => {\n    showHelper.value = true\n  },\n  hideUseCase: () => {\n    showHelper.value = false\n  }\n})\n</script>\n\n<style>\n.completion-form .el-form-item__label {\n  text-indent: 12px;\n  position: relative;\n}\n\n.completion-form .el-form-item__label::before {\n  content: '';\n  position: absolute;\n  left: 0;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 4px;\n  height: 16px;\n  background: #2563eb;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/chat/helper.vue",
    "content": "<template>\n  <div class=\"h-full overflow-y-auto bg-white\">\n    <div class=\"p-6 bg-white rounded\">\n      <h4 class=\"text-base text-primary\">\n        {{ $t('chat.usage_case') }}\n      </h4>\n      <div class=\"columns-2 gap-5 space-y-5 mt-5 max-md:columns-1\">\n        <template v-for=\"(item, index) in state.cases\" :key=\"index\">\n          <div class=\"p-5 bg-[#F7F9FC] rounded relative group cursor-pointer break-inside-avoid\">\n            <div class=\"bg-white rounded p-5 relative\">\n              <div class=\"text-sm text-secondary\">\n                {{ $t('chat.input') }}\n              </div>\n              <div class=\"text-sm text-primary break-words mt-4\">{{ item.input_text }}</div>\n              <div class=\"absolute right-8 -bottom-9\">\n                <svg-icon :size=\"50\" name=\"arrow-down\" color=\"white\" />\n              </div>\n            </div>\n            <div class=\"bg-[#E6EEFF] rounded p-5 mt-4\">\n              <div class=\"flex items-center justify-between\">\n                <div class=\"text-sm text-secondary\">\n                  {{ $t('chat.output') }}\n                </div>\n                <div v-copy=\"item.output_text\" v-tooltip=\"{ content: $t('action.copy') }\">\n                  <svg-icon name=\"copy\" color=\"#4F5052\" />\n                </div>\n              </div>\n              <div class=\"text-sm text-primary break-words whitespace-pre-wrap mt-4\">{{ item.output_text }}</div>\n            </div>\n          </div>\n        </template>\n      </div>\n      <el-empty\n        v-if=\"state.cases.length === 0\"\n        :image-size=\"92\"\n        :description=\"$t('common.no_data')\"\n        :image=\"$getPublicPath('/images/chat/completion_empty.png')\"\n      />\n    </div>\n    <div class=\"p-6 bg-white rounded\">\n      <h4 class=\"text-base text-primary\">\n        {{ $t('chat.usage_scene') }}\n      </h4>\n      <div class=\"flex gap-6 py-5 max-md:flex-col max-md:gap-2\">\n        <template v-for=\"(item, index) in state.scenes\" :key=\"index\">\n          <div class=\"flex-1 px-4 text-center pt-3 pb-10 relative cursor-pointer group\">\n            <img class=\"max-w-[200px] mx-auto\" :src=\"item.image\" />\n            <h6 class=\"text-base text-primary mt-5 break-words\">\n              {{ item.scene }}\n            </h6>\n            <p class=\"text-xs text-secondary mt-4 break-words\">\n              {{ item.desc }}\n            </p>\n          </div>\n        </template>\n      </div>\n      <el-empty\n        v-if=\"state.scenes.length === 0\"\n        :image-size=\"92\"\n        :description=\"$t('common.no_data')\"\n        :image=\"$getPublicPath('/images/chat/completion_empty.png')\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, watchEffect } from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    agent: Agent.State\n  }>(),\n  {\n    agent: () => ({ use_cases: '[]' })\n  }\n)\nconst state = reactive({\n  cases: [],\n  scenes: []\n})\n\nwatchEffect(() => {\n  const list = JSON.parse(props.agent.use_cases || '[]') || []\n  state.cases = list.filter((item) => item.type === 'case')\n  state.scenes = list.filter((item) => item.type === 'scene')\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/chat/index.vue",
    "content": "<template>\n  <Completion\n    v-if=\"currentAgent?.custom_config_obj?.agent_mode === 'completion'\"\n    ref=\"chatRef\"\n    :use-case-fixed=\"useCaseFixed\"\n    :hide-menu-header=\"hideMenuHeader\"\n  />\n  <Chat\n    v-else\n    ref=\"chatRef\"\n    :key=\"currentConv.virtual_id || currentConv.conversation_id\"\n    class=\"flex-1\"\n    :hide-menu-header=\"hideMenuHeader\"\n    :show-recommend=\"showRecommend\"\n    :use-case-fixed=\"useCaseFixed\"\n    :show-history=\"showHistory\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted, defineAsyncComponent, computed, watch } from 'vue'\nimport { useRoute } from 'vue-router'\n\nimport { useAgentStore } from '@/stores/modules/agent'\nimport { useConversationStore } from '@/stores/modules/conversation'\nimport eventBus from '@/utils/event-bus'\nimport { EVENT_NAMES } from '@/constants/events'\n\nconst Chat = defineAsyncComponent(() => import('./chat/index.vue'))\nconst Completion = defineAsyncComponent(() => import('./completion/index.vue'))\n\nconst route = useRoute()\nconst agentStore = useAgentStore()\nconst convStore = useConversationStore()\n\nconst chatRef = ref<InstanceType<typeof Chat>>()\n\nwithDefaults(\n  defineProps<{\n    hideMenuHeader?: boolean\n    hideFooter?: boolean\n    showRecommend?: boolean\n    useCaseFixed?: boolean\n    showHistory?: boolean\n  }>(),\n  {\n    hideMenuHeader: false,\n    hideFooter: false,\n    showRecommend: false,\n    useCaseFixed: false,\n    showHistory: false\n  }\n)\n\nconst currentConv = computed(() => convStore.currentConversation)\nconst currentAgent = computed(() => convStore.currentAgent)\n\n// 监听路由参数变化\nwatch(\n  () => route.query,\n  async (newQuery) => {\n    const agent_id = Number(newQuery.agent_id || '0')\n    const conversation_id = newQuery.conversation_id || ''\n\n    const agentList = await agentStore.loadAgentList()\n    const agent = agentList.find((item) => item.agent_id === agent_id)\n\n    if (agent) {\n      convStore.pushUsualAgent(agent)\n    } else {\n      const usableAgent = convStore.usual_agents[0] || agentList[0]\n      if (usableAgent) {\n        convStore.pushUsualAgent(usableAgent)\n      }\n    }\n\n    convStore.updateAgents(agentList)\n\n    if (!conversation_id) {\n      convStore.setCurrentState(agent_id, 0)\n    } else {\n      const convList = await convStore.loadConversations()\n      const conversation = convList.find((item) => item.conversation_id === +conversation_id)\n      if (conversation) {\n        convStore.setCurrentState(conversation.agent_id, conversation.conversation_id)\n      }\n    }\n  },\n  { immediate: true }\n)\n\nonMounted(async () => {\n  convStore.setBasePath(route.path.includes('/index') ? '/index/chat' : '/chat')\n  agentStore.loadCategorys()\n\n  convStore.loadConversations()\n  eventBus.on(EVENT_NAMES.LOGIN_SUCCESS, () => {\n    convStore.loadConversations()\n  })\n})\n\nonUnmounted(() => {\n  // 清理逻辑\n  convStore.clearCurrentState()\n})\n\ndefineExpose({\n  detailData: currentAgent,\n  showUseCase: () => {\n    chatRef.value?.showUseCase()\n  },\n  hideUseCase: () => {\n    chatRef.value?.hideUseCase()\n  },\n  showShare: () => {\n    chatRef.value?.showShare()\n  }\n})\n</script>\n\n<style scoped>\n.sidebar-transition {\n  transition: width 0.3s ease-in-out;\n}\n\n.list-move,\n.list-enter-active,\n.list-leave-active {\n  transition: all 0.3s ease;\n}\n\n.list-enter-from,\n.list-leave-to {\n  opacity: 0;\n  transform: translateY(-10px);\n}\n\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 0.3s ease;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/chat/store.ts",
    "content": "import { defineStore } from 'pinia'\n\n\n\nconst useChatStore = defineStore('work-chat', {\n  state: () => {\n    return {\n\n    }\n  },\n  getters: {\n\n  },\n  actions: {},\n})\n\nexport default useChatStore\n"
  },
  {
    "path": "web/front/src/renderer/main/views/custom/index.vue",
    "content": "<template>\n  <div ref=\"containerRef\" class=\"iframe-container\">\n    <iframe\n      v-if=\"!route?.meta?.softCustom\"\n      ref=\"iframeRef\"\n      :srcdoc=\"iframeContent\"\n      class=\"w-full border-none\"\n      :style=\"{ height: iframeHeight + 'px' }\"\n      sandbox=\"allow-same-origin\"\n      @load=\"handleIframeLoad\"\n    />\n    <!-- 软件模式-自定义页 -->\n    <div v-else>\n      <MainHeader sticky>\n        <template #before_suffix>\n          <div class=\"text-base text-primary font-bold line-clamp-1 max-md:flex-1 max-md:text-center\">\n            {{ route?.name?.slice(4) }}\n          </div>\n        </template>\n      </MainHeader>\n      <div class=\"p-5 overflow-y-auto\" style=\"height: calc(100vh - 70px)\" v-html=\"softContent\"></div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, onUnmounted } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useNavigationStore } from '@/stores/modules/navigation'\nimport MainHeader from '@/layout/header.vue'\n\nconst navigationStore = useNavigationStore()\nconst route = useRoute()\nconst currentNavigation = ref<any>({})\nconst iframeRef = ref<HTMLIFrameElement>()\nconst containerRef = ref<HTMLDivElement>()\nconst iframeHeight = ref(500) // 默认高度\n\n// 构建完整的 HTML 文档结构\nconst iframeContent = ref('')\nconst softContent = ref('')\n\nlet timer = null\nconst handleIframeLoad = () => {\n  if (!iframeRef.value) return\n}\n\nconst buildIframeContent = (htmlContent: string) => {\n  return `\n    <!DOCTYPE html>\n    <html>\n      <head>\n        <meta charset=\"UTF-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n        <style>\n          html,\n          body {\n            /* overflow-y: auto !important; */\n            /* overflow: hidden !important; */\n            /* height: auto !important; */\n          }\n\n          body {\n            padding: 8px !important;\n            margin: 0 !important;\n            box-sizing: border-box;\n          }\n          img {\n            max-width: 100%;\n            height: auto;\n          }\n        </style>\n        <style type=\"text/css\">.view{padding:0;word-wrap:break-word;cursor:text;height:100%;}body{font-family:sans-serif;font-size:16px;}p{margin:5px 0;}</style><link rel=\"stylesheet\" type=\"text/css\" href=\"http://192.168.1.71:81/console/UEditor/themes/iframe.css\"><style id=\"tablesort\">table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;   background-image:url(http://192.168.1.71:81/console/UEditor/themes/default/images/sortable.png);}</style><style id=\"table\">.selectTdClass{background-color:#edf5fa !important}table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}table{margin-bottom:10px;border-collapse:collapse;display:table;}td,th{padding: 5px 10px;border: 1px solid #DDD;}caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}th{border-top:1px solid #BBB;background-color:#F7F7F7;}table tr.firstRow th{border-top-width:2px;}.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }td p{margin:0;padding:0;}</style><style id=\"list\">ol,ul{margin:0;pading:0;width:95%}li{clear:both;}li.list-cn-1-0{background-image:url(http://bs.baidu.com/listicon/list-cn-1-0.gif)}\nli.list-cn-1-1{background-image:url(http://bs.baidu.com/listicon/list-cn-1-1.gif)}\nli.list-cn-1-2{background-image:url(http://bs.baidu.com/listicon/list-cn-1-2.gif)}\nli.list-cn-1-3{background-image:url(http://bs.baidu.com/listicon/list-cn-1-3.gif)}\nli.list-cn-1-4{background-image:url(http://bs.baidu.com/listicon/list-cn-1-4.gif)}\nli.list-cn-1-5{background-image:url(http://bs.baidu.com/listicon/list-cn-1-5.gif)}\nli.list-cn-1-6{background-image:url(http://bs.baidu.com/listicon/list-cn-1-6.gif)}\nli.list-cn-1-7{background-image:url(http://bs.baidu.com/listicon/list-cn-1-7.gif)}\nli.list-cn-1-8{background-image:url(http://bs.baidu.com/listicon/list-cn-1-8.gif)}\nli.list-cn-1-9{background-image:url(http://bs.baidu.com/listicon/list-cn-1-9.gif)}\nli.list-cn-1-10{background-image:url(http://bs.baidu.com/listicon/list-cn-1-10.gif)}\nli.list-cn-1-11{background-image:url(http://bs.baidu.com/listicon/list-cn-1-11.gif)}\nli.list-cn-1-12{background-image:url(http://bs.baidu.com/listicon/list-cn-1-12.gif)}\nli.list-cn-1-13{background-image:url(http://bs.baidu.com/listicon/list-cn-1-13.gif)}\nli.list-cn-1-14{background-image:url(http://bs.baidu.com/listicon/list-cn-1-14.gif)}\nli.list-cn-1-15{background-image:url(http://bs.baidu.com/listicon/list-cn-1-15.gif)}\nli.list-cn-1-16{background-image:url(http://bs.baidu.com/listicon/list-cn-1-16.gif)}\nli.list-cn-1-17{background-image:url(http://bs.baidu.com/listicon/list-cn-1-17.gif)}\nli.list-cn-1-18{background-image:url(http://bs.baidu.com/listicon/list-cn-1-18.gif)}\nli.list-cn-1-19{background-image:url(http://bs.baidu.com/listicon/list-cn-1-19.gif)}\nli.list-cn-1-20{background-image:url(http://bs.baidu.com/listicon/list-cn-1-20.gif)}\nli.list-cn-1-21{background-image:url(http://bs.baidu.com/listicon/list-cn-1-21.gif)}\nli.list-cn-1-22{background-image:url(http://bs.baidu.com/listicon/list-cn-1-22.gif)}\nli.list-cn-1-23{background-image:url(http://bs.baidu.com/listicon/list-cn-1-23.gif)}\nli.list-cn-1-24{background-image:url(http://bs.baidu.com/listicon/list-cn-1-24.gif)}\nli.list-cn-1-25{background-image:url(http://bs.baidu.com/listicon/list-cn-1-25.gif)}\nli.list-cn-1-26{background-image:url(http://bs.baidu.com/listicon/list-cn-1-26.gif)}\nli.list-cn-1-27{background-image:url(http://bs.baidu.com/listicon/list-cn-1-27.gif)}\nli.list-cn-1-28{background-image:url(http://bs.baidu.com/listicon/list-cn-1-28.gif)}\nli.list-cn-1-29{background-image:url(http://bs.baidu.com/listicon/list-cn-1-29.gif)}\nli.list-cn-1-30{background-image:url(http://bs.baidu.com/listicon/list-cn-1-30.gif)}\nli.list-cn-1-31{background-image:url(http://bs.baidu.com/listicon/list-cn-1-31.gif)}\nli.list-cn-1-32{background-image:url(http://bs.baidu.com/listicon/list-cn-1-32.gif)}\nli.list-cn-1-33{background-image:url(http://bs.baidu.com/listicon/list-cn-1-33.gif)}\nli.list-cn-1-34{background-image:url(http://bs.baidu.com/listicon/list-cn-1-34.gif)}\nli.list-cn-1-35{background-image:url(http://bs.baidu.com/listicon/list-cn-1-35.gif)}\nli.list-cn-1-36{background-image:url(http://bs.baidu.com/listicon/list-cn-1-36.gif)}\nli.list-cn-1-37{background-image:url(http://bs.baidu.com/listicon/list-cn-1-37.gif)}\nli.list-cn-1-38{background-image:url(http://bs.baidu.com/listicon/list-cn-1-38.gif)}\nli.list-cn-1-39{background-image:url(http://bs.baidu.com/listicon/list-cn-1-39.gif)}\nli.list-cn-1-40{background-image:url(http://bs.baidu.com/listicon/list-cn-1-40.gif)}\nli.list-cn-1-41{background-image:url(http://bs.baidu.com/listicon/list-cn-1-41.gif)}\nli.list-cn-1-42{background-image:url(http://bs.baidu.com/listicon/list-cn-1-42.gif)}\nli.list-cn-1-43{background-image:url(http://bs.baidu.com/listicon/list-cn-1-43.gif)}\nli.list-cn-1-44{background-image:url(http://bs.baidu.com/listicon/list-cn-1-44.gif)}\nli.list-cn-1-45{background-image:url(http://bs.baidu.com/listicon/list-cn-1-45.gif)}\nli.list-cn-1-46{background-image:url(http://bs.baidu.com/listicon/list-cn-1-46.gif)}\nli.list-cn-1-47{background-image:url(http://bs.baidu.com/listicon/list-cn-1-47.gif)}\nli.list-cn-1-48{background-image:url(http://bs.baidu.com/listicon/list-cn-1-48.gif)}\nli.list-cn-1-49{background-image:url(http://bs.baidu.com/listicon/list-cn-1-49.gif)}\nli.list-cn-1-50{background-image:url(http://bs.baidu.com/listicon/list-cn-1-50.gif)}\nli.list-cn-1-51{background-image:url(http://bs.baidu.com/listicon/list-cn-1-51.gif)}\nli.list-cn-1-52{background-image:url(http://bs.baidu.com/listicon/list-cn-1-52.gif)}\nli.list-cn-1-53{background-image:url(http://bs.baidu.com/listicon/list-cn-1-53.gif)}\nli.list-cn-1-54{background-image:url(http://bs.baidu.com/listicon/list-cn-1-54.gif)}\nli.list-cn-1-55{background-image:url(http://bs.baidu.com/listicon/list-cn-1-55.gif)}\nli.list-cn-1-56{background-image:url(http://bs.baidu.com/listicon/list-cn-1-56.gif)}\nli.list-cn-1-57{background-image:url(http://bs.baidu.com/listicon/list-cn-1-57.gif)}\nli.list-cn-1-58{background-image:url(http://bs.baidu.com/listicon/list-cn-1-58.gif)}\nli.list-cn-1-59{background-image:url(http://bs.baidu.com/listicon/list-cn-1-59.gif)}\nli.list-cn-1-60{background-image:url(http://bs.baidu.com/listicon/list-cn-1-60.gif)}\nli.list-cn-1-61{background-image:url(http://bs.baidu.com/listicon/list-cn-1-61.gif)}\nli.list-cn-1-62{background-image:url(http://bs.baidu.com/listicon/list-cn-1-62.gif)}\nli.list-cn-1-63{background-image:url(http://bs.baidu.com/listicon/list-cn-1-63.gif)}\nli.list-cn-1-64{background-image:url(http://bs.baidu.com/listicon/list-cn-1-64.gif)}\nli.list-cn-1-65{background-image:url(http://bs.baidu.com/listicon/list-cn-1-65.gif)}\nli.list-cn-1-66{background-image:url(http://bs.baidu.com/listicon/list-cn-1-66.gif)}\nli.list-cn-1-67{background-image:url(http://bs.baidu.com/listicon/list-cn-1-67.gif)}\nli.list-cn-1-68{background-image:url(http://bs.baidu.com/listicon/list-cn-1-68.gif)}\nli.list-cn-1-69{background-image:url(http://bs.baidu.com/listicon/list-cn-1-69.gif)}\nli.list-cn-1-70{background-image:url(http://bs.baidu.com/listicon/list-cn-1-70.gif)}\nli.list-cn-1-71{background-image:url(http://bs.baidu.com/listicon/list-cn-1-71.gif)}\nli.list-cn-1-72{background-image:url(http://bs.baidu.com/listicon/list-cn-1-72.gif)}\nli.list-cn-1-73{background-image:url(http://bs.baidu.com/listicon/list-cn-1-73.gif)}\nli.list-cn-1-74{background-image:url(http://bs.baidu.com/listicon/list-cn-1-74.gif)}\nli.list-cn-1-75{background-image:url(http://bs.baidu.com/listicon/list-cn-1-75.gif)}\nli.list-cn-1-76{background-image:url(http://bs.baidu.com/listicon/list-cn-1-76.gif)}\nli.list-cn-1-77{background-image:url(http://bs.baidu.com/listicon/list-cn-1-77.gif)}\nli.list-cn-1-78{background-image:url(http://bs.baidu.com/listicon/list-cn-1-78.gif)}\nli.list-cn-1-79{background-image:url(http://bs.baidu.com/listicon/list-cn-1-79.gif)}\nli.list-cn-1-80{background-image:url(http://bs.baidu.com/listicon/list-cn-1-80.gif)}\nli.list-cn-1-81{background-image:url(http://bs.baidu.com/listicon/list-cn-1-81.gif)}\nli.list-cn-1-82{background-image:url(http://bs.baidu.com/listicon/list-cn-1-82.gif)}\nli.list-cn-1-83{background-image:url(http://bs.baidu.com/listicon/list-cn-1-83.gif)}\nli.list-cn-1-84{background-image:url(http://bs.baidu.com/listicon/list-cn-1-84.gif)}\nli.list-cn-1-85{background-image:url(http://bs.baidu.com/listicon/list-cn-1-85.gif)}\nli.list-cn-1-86{background-image:url(http://bs.baidu.com/listicon/list-cn-1-86.gif)}\nli.list-cn-1-87{background-image:url(http://bs.baidu.com/listicon/list-cn-1-87.gif)}\nli.list-cn-1-88{background-image:url(http://bs.baidu.com/listicon/list-cn-1-88.gif)}\nli.list-cn-1-89{background-image:url(http://bs.baidu.com/listicon/list-cn-1-89.gif)}\nli.list-cn-1-90{background-image:url(http://bs.baidu.com/listicon/list-cn-1-90.gif)}\nli.list-cn-1-91{background-image:url(http://bs.baidu.com/listicon/list-cn-1-91.gif)}\nli.list-cn-1-92{background-image:url(http://bs.baidu.com/listicon/list-cn-1-92.gif)}\nli.list-cn-1-93{background-image:url(http://bs.baidu.com/listicon/list-cn-1-93.gif)}\nli.list-cn-1-94{background-image:url(http://bs.baidu.com/listicon/list-cn-1-94.gif)}\nli.list-cn-1-95{background-image:url(http://bs.baidu.com/listicon/list-cn-1-95.gif)}\nli.list-cn-1-96{background-image:url(http://bs.baidu.com/listicon/list-cn-1-96.gif)}\nli.list-cn-1-97{background-image:url(http://bs.baidu.com/listicon/list-cn-1-97.gif)}\nli.list-cn-1-98{background-image:url(http://bs.baidu.com/listicon/list-cn-1-98.gif)}\nol.custom_cn{list-style:none;}ol.custom_cn li{background-position:0 3px;background-repeat:no-repeat}\nli.list-cn-paddingleft-1{padding-left:25px}\nli.list-cn-paddingleft-2{padding-left:40px}\nli.list-cn-paddingleft-3{padding-left:55px}\nli.list-cn-2-0{background-image:url(http://bs.baidu.com/listicon/list-cn-2-0.gif)}\nli.list-cn-2-1{background-image:url(http://bs.baidu.com/listicon/list-cn-2-1.gif)}\nli.list-cn-2-2{background-image:url(http://bs.baidu.com/listicon/list-cn-2-2.gif)}\nli.list-cn-2-3{background-image:url(http://bs.baidu.com/listicon/list-cn-2-3.gif)}\nli.list-cn-2-4{background-image:url(http://bs.baidu.com/listicon/list-cn-2-4.gif)}\nli.list-cn-2-5{background-image:url(http://bs.baidu.com/listicon/list-cn-2-5.gif)}\nli.list-cn-2-6{background-image:url(http://bs.baidu.com/listicon/list-cn-2-6.gif)}\nli.list-cn-2-7{background-image:url(http://bs.baidu.com/listicon/list-cn-2-7.gif)}\nli.list-cn-2-8{background-image:url(http://bs.baidu.com/listicon/list-cn-2-8.gif)}\nli.list-cn-2-9{background-image:url(http://bs.baidu.com/listicon/list-cn-2-9.gif)}\nli.list-cn-2-10{background-image:url(http://bs.baidu.com/listicon/list-cn-2-10.gif)}\nli.list-cn-2-11{background-image:url(http://bs.baidu.com/listicon/list-cn-2-11.gif)}\nli.list-cn-2-12{background-image:url(http://bs.baidu.com/listicon/list-cn-2-12.gif)}\nli.list-cn-2-13{background-image:url(http://bs.baidu.com/listicon/list-cn-2-13.gif)}\nli.list-cn-2-14{background-image:url(http://bs.baidu.com/listicon/list-cn-2-14.gif)}\nli.list-cn-2-15{background-image:url(http://bs.baidu.com/listicon/list-cn-2-15.gif)}\nli.list-cn-2-16{background-image:url(http://bs.baidu.com/listicon/list-cn-2-16.gif)}\nli.list-cn-2-17{background-image:url(http://bs.baidu.com/listicon/list-cn-2-17.gif)}\nli.list-cn-2-18{background-image:url(http://bs.baidu.com/listicon/list-cn-2-18.gif)}\nli.list-cn-2-19{background-image:url(http://bs.baidu.com/listicon/list-cn-2-19.gif)}\nli.list-cn-2-20{background-image:url(http://bs.baidu.com/listicon/list-cn-2-20.gif)}\nli.list-cn-2-21{background-image:url(http://bs.baidu.com/listicon/list-cn-2-21.gif)}\nli.list-cn-2-22{background-image:url(http://bs.baidu.com/listicon/list-cn-2-22.gif)}\nli.list-cn-2-23{background-image:url(http://bs.baidu.com/listicon/list-cn-2-23.gif)}\nli.list-cn-2-24{background-image:url(http://bs.baidu.com/listicon/list-cn-2-24.gif)}\nli.list-cn-2-25{background-image:url(http://bs.baidu.com/listicon/list-cn-2-25.gif)}\nli.list-cn-2-26{background-image:url(http://bs.baidu.com/listicon/list-cn-2-26.gif)}\nli.list-cn-2-27{background-image:url(http://bs.baidu.com/listicon/list-cn-2-27.gif)}\nli.list-cn-2-28{background-image:url(http://bs.baidu.com/listicon/list-cn-2-28.gif)}\nli.list-cn-2-29{background-image:url(http://bs.baidu.com/listicon/list-cn-2-29.gif)}\nli.list-cn-2-30{background-image:url(http://bs.baidu.com/listicon/list-cn-2-30.gif)}\nli.list-cn-2-31{background-image:url(http://bs.baidu.com/listicon/list-cn-2-31.gif)}\nli.list-cn-2-32{background-image:url(http://bs.baidu.com/listicon/list-cn-2-32.gif)}\nli.list-cn-2-33{background-image:url(http://bs.baidu.com/listicon/list-cn-2-33.gif)}\nli.list-cn-2-34{background-image:url(http://bs.baidu.com/listicon/list-cn-2-34.gif)}\nli.list-cn-2-35{background-image:url(http://bs.baidu.com/listicon/list-cn-2-35.gif)}\nli.list-cn-2-36{background-image:url(http://bs.baidu.com/listicon/list-cn-2-36.gif)}\nli.list-cn-2-37{background-image:url(http://bs.baidu.com/listicon/list-cn-2-37.gif)}\nli.list-cn-2-38{background-image:url(http://bs.baidu.com/listicon/list-cn-2-38.gif)}\nli.list-cn-2-39{background-image:url(http://bs.baidu.com/listicon/list-cn-2-39.gif)}\nli.list-cn-2-40{background-image:url(http://bs.baidu.com/listicon/list-cn-2-40.gif)}\nli.list-cn-2-41{background-image:url(http://bs.baidu.com/listicon/list-cn-2-41.gif)}\nli.list-cn-2-42{background-image:url(http://bs.baidu.com/listicon/list-cn-2-42.gif)}\nli.list-cn-2-43{background-image:url(http://bs.baidu.com/listicon/list-cn-2-43.gif)}\nli.list-cn-2-44{background-image:url(http://bs.baidu.com/listicon/list-cn-2-44.gif)}\nli.list-cn-2-45{background-image:url(http://bs.baidu.com/listicon/list-cn-2-45.gif)}\nli.list-cn-2-46{background-image:url(http://bs.baidu.com/listicon/list-cn-2-46.gif)}\nli.list-cn-2-47{background-image:url(http://bs.baidu.com/listicon/list-cn-2-47.gif)}\nli.list-cn-2-48{background-image:url(http://bs.baidu.com/listicon/list-cn-2-48.gif)}\nli.list-cn-2-49{background-image:url(http://bs.baidu.com/listicon/list-cn-2-49.gif)}\nli.list-cn-2-50{background-image:url(http://bs.baidu.com/listicon/list-cn-2-50.gif)}\nli.list-cn-2-51{background-image:url(http://bs.baidu.com/listicon/list-cn-2-51.gif)}\nli.list-cn-2-52{background-image:url(http://bs.baidu.com/listicon/list-cn-2-52.gif)}\nli.list-cn-2-53{background-image:url(http://bs.baidu.com/listicon/list-cn-2-53.gif)}\nli.list-cn-2-54{background-image:url(http://bs.baidu.com/listicon/list-cn-2-54.gif)}\nli.list-cn-2-55{background-image:url(http://bs.baidu.com/listicon/list-cn-2-55.gif)}\nli.list-cn-2-56{background-image:url(http://bs.baidu.com/listicon/list-cn-2-56.gif)}\nli.list-cn-2-57{background-image:url(http://bs.baidu.com/listicon/list-cn-2-57.gif)}\nli.list-cn-2-58{background-image:url(http://bs.baidu.com/listicon/list-cn-2-58.gif)}\nli.list-cn-2-59{background-image:url(http://bs.baidu.com/listicon/list-cn-2-59.gif)}\nli.list-cn-2-60{background-image:url(http://bs.baidu.com/listicon/list-cn-2-60.gif)}\nli.list-cn-2-61{background-image:url(http://bs.baidu.com/listicon/list-cn-2-61.gif)}\nli.list-cn-2-62{background-image:url(http://bs.baidu.com/listicon/list-cn-2-62.gif)}\nli.list-cn-2-63{background-image:url(http://bs.baidu.com/listicon/list-cn-2-63.gif)}\nli.list-cn-2-64{background-image:url(http://bs.baidu.com/listicon/list-cn-2-64.gif)}\nli.list-cn-2-65{background-image:url(http://bs.baidu.com/listicon/list-cn-2-65.gif)}\nli.list-cn-2-66{background-image:url(http://bs.baidu.com/listicon/list-cn-2-66.gif)}\nli.list-cn-2-67{background-image:url(http://bs.baidu.com/listicon/list-cn-2-67.gif)}\nli.list-cn-2-68{background-image:url(http://bs.baidu.com/listicon/list-cn-2-68.gif)}\nli.list-cn-2-69{background-image:url(http://bs.baidu.com/listicon/list-cn-2-69.gif)}\nli.list-cn-2-70{background-image:url(http://bs.baidu.com/listicon/list-cn-2-70.gif)}\nli.list-cn-2-71{background-image:url(http://bs.baidu.com/listicon/list-cn-2-71.gif)}\nli.list-cn-2-72{background-image:url(http://bs.baidu.com/listicon/list-cn-2-72.gif)}\nli.list-cn-2-73{background-image:url(http://bs.baidu.com/listicon/list-cn-2-73.gif)}\nli.list-cn-2-74{background-image:url(http://bs.baidu.com/listicon/list-cn-2-74.gif)}\nli.list-cn-2-75{background-image:url(http://bs.baidu.com/listicon/list-cn-2-75.gif)}\nli.list-cn-2-76{background-image:url(http://bs.baidu.com/listicon/list-cn-2-76.gif)}\nli.list-cn-2-77{background-image:url(http://bs.baidu.com/listicon/list-cn-2-77.gif)}\nli.list-cn-2-78{background-image:url(http://bs.baidu.com/listicon/list-cn-2-78.gif)}\nli.list-cn-2-79{background-image:url(http://bs.baidu.com/listicon/list-cn-2-79.gif)}\nli.list-cn-2-80{background-image:url(http://bs.baidu.com/listicon/list-cn-2-80.gif)}\nli.list-cn-2-81{background-image:url(http://bs.baidu.com/listicon/list-cn-2-81.gif)}\nli.list-cn-2-82{background-image:url(http://bs.baidu.com/listicon/list-cn-2-82.gif)}\nli.list-cn-2-83{background-image:url(http://bs.baidu.com/listicon/list-cn-2-83.gif)}\nli.list-cn-2-84{background-image:url(http://bs.baidu.com/listicon/list-cn-2-84.gif)}\nli.list-cn-2-85{background-image:url(http://bs.baidu.com/listicon/list-cn-2-85.gif)}\nli.list-cn-2-86{background-image:url(http://bs.baidu.com/listicon/list-cn-2-86.gif)}\nli.list-cn-2-87{background-image:url(http://bs.baidu.com/listicon/list-cn-2-87.gif)}\nli.list-cn-2-88{background-image:url(http://bs.baidu.com/listicon/list-cn-2-88.gif)}\nli.list-cn-2-89{background-image:url(http://bs.baidu.com/listicon/list-cn-2-89.gif)}\nli.list-cn-2-90{background-image:url(http://bs.baidu.com/listicon/list-cn-2-90.gif)}\nli.list-cn-2-91{background-image:url(http://bs.baidu.com/listicon/list-cn-2-91.gif)}\nli.list-cn-2-92{background-image:url(http://bs.baidu.com/listicon/list-cn-2-92.gif)}\nli.list-cn-2-93{background-image:url(http://bs.baidu.com/listicon/list-cn-2-93.gif)}\nli.list-cn-2-94{background-image:url(http://bs.baidu.com/listicon/list-cn-2-94.gif)}\nli.list-cn-2-95{background-image:url(http://bs.baidu.com/listicon/list-cn-2-95.gif)}\nli.list-cn-2-96{background-image:url(http://bs.baidu.com/listicon/list-cn-2-96.gif)}\nli.list-cn-2-97{background-image:url(http://bs.baidu.com/listicon/list-cn-2-97.gif)}\nli.list-cn-2-98{background-image:url(http://bs.baidu.com/listicon/list-cn-2-98.gif)}\nol.custom_cn1{list-style:none;}ol.custom_cn1 li{background-position:0 3px;background-repeat:no-repeat}\nli.list-cn1-paddingleft-1{padding-left:30px}\nli.list-cn1-paddingleft-2{padding-left:40px}\nli.list-cn1-paddingleft-3{padding-left:55px}\nli.list-cn-3-0{background-image:url(http://bs.baidu.com/listicon/list-cn-3-0.gif)}\nli.list-cn-3-1{background-image:url(http://bs.baidu.com/listicon/list-cn-3-1.gif)}\nli.list-cn-3-2{background-image:url(http://bs.baidu.com/listicon/list-cn-3-2.gif)}\nli.list-cn-3-3{background-image:url(http://bs.baidu.com/listicon/list-cn-3-3.gif)}\nli.list-cn-3-4{background-image:url(http://bs.baidu.com/listicon/list-cn-3-4.gif)}\nli.list-cn-3-5{background-image:url(http://bs.baidu.com/listicon/list-cn-3-5.gif)}\nli.list-cn-3-6{background-image:url(http://bs.baidu.com/listicon/list-cn-3-6.gif)}\nli.list-cn-3-7{background-image:url(http://bs.baidu.com/listicon/list-cn-3-7.gif)}\nli.list-cn-3-8{background-image:url(http://bs.baidu.com/listicon/list-cn-3-8.gif)}\nli.list-cn-3-9{background-image:url(http://bs.baidu.com/listicon/list-cn-3-9.gif)}\nli.list-cn-3-10{background-image:url(http://bs.baidu.com/listicon/list-cn-3-10.gif)}\nli.list-cn-3-11{background-image:url(http://bs.baidu.com/listicon/list-cn-3-11.gif)}\nli.list-cn-3-12{background-image:url(http://bs.baidu.com/listicon/list-cn-3-12.gif)}\nli.list-cn-3-13{background-image:url(http://bs.baidu.com/listicon/list-cn-3-13.gif)}\nli.list-cn-3-14{background-image:url(http://bs.baidu.com/listicon/list-cn-3-14.gif)}\nli.list-cn-3-15{background-image:url(http://bs.baidu.com/listicon/list-cn-3-15.gif)}\nli.list-cn-3-16{background-image:url(http://bs.baidu.com/listicon/list-cn-3-16.gif)}\nli.list-cn-3-17{background-image:url(http://bs.baidu.com/listicon/list-cn-3-17.gif)}\nli.list-cn-3-18{background-image:url(http://bs.baidu.com/listicon/list-cn-3-18.gif)}\nli.list-cn-3-19{background-image:url(http://bs.baidu.com/listicon/list-cn-3-19.gif)}\nli.list-cn-3-20{background-image:url(http://bs.baidu.com/listicon/list-cn-3-20.gif)}\nli.list-cn-3-21{background-image:url(http://bs.baidu.com/listicon/list-cn-3-21.gif)}\nli.list-cn-3-22{background-image:url(http://bs.baidu.com/listicon/list-cn-3-22.gif)}\nli.list-cn-3-23{background-image:url(http://bs.baidu.com/listicon/list-cn-3-23.gif)}\nli.list-cn-3-24{background-image:url(http://bs.baidu.com/listicon/list-cn-3-24.gif)}\nli.list-cn-3-25{background-image:url(http://bs.baidu.com/listicon/list-cn-3-25.gif)}\nli.list-cn-3-26{background-image:url(http://bs.baidu.com/listicon/list-cn-3-26.gif)}\nli.list-cn-3-27{background-image:url(http://bs.baidu.com/listicon/list-cn-3-27.gif)}\nli.list-cn-3-28{background-image:url(http://bs.baidu.com/listicon/list-cn-3-28.gif)}\nli.list-cn-3-29{background-image:url(http://bs.baidu.com/listicon/list-cn-3-29.gif)}\nli.list-cn-3-30{background-image:url(http://bs.baidu.com/listicon/list-cn-3-30.gif)}\nli.list-cn-3-31{background-image:url(http://bs.baidu.com/listicon/list-cn-3-31.gif)}\nli.list-cn-3-32{background-image:url(http://bs.baidu.com/listicon/list-cn-3-32.gif)}\nli.list-cn-3-33{background-image:url(http://bs.baidu.com/listicon/list-cn-3-33.gif)}\nli.list-cn-3-34{background-image:url(http://bs.baidu.com/listicon/list-cn-3-34.gif)}\nli.list-cn-3-35{background-image:url(http://bs.baidu.com/listicon/list-cn-3-35.gif)}\nli.list-cn-3-36{background-image:url(http://bs.baidu.com/listicon/list-cn-3-36.gif)}\nli.list-cn-3-37{background-image:url(http://bs.baidu.com/listicon/list-cn-3-37.gif)}\nli.list-cn-3-38{background-image:url(http://bs.baidu.com/listicon/list-cn-3-38.gif)}\nli.list-cn-3-39{background-image:url(http://bs.baidu.com/listicon/list-cn-3-39.gif)}\nli.list-cn-3-40{background-image:url(http://bs.baidu.com/listicon/list-cn-3-40.gif)}\nli.list-cn-3-41{background-image:url(http://bs.baidu.com/listicon/list-cn-3-41.gif)}\nli.list-cn-3-42{background-image:url(http://bs.baidu.com/listicon/list-cn-3-42.gif)}\nli.list-cn-3-43{background-image:url(http://bs.baidu.com/listicon/list-cn-3-43.gif)}\nli.list-cn-3-44{background-image:url(http://bs.baidu.com/listicon/list-cn-3-44.gif)}\nli.list-cn-3-45{background-image:url(http://bs.baidu.com/listicon/list-cn-3-45.gif)}\nli.list-cn-3-46{background-image:url(http://bs.baidu.com/listicon/list-cn-3-46.gif)}\nli.list-cn-3-47{background-image:url(http://bs.baidu.com/listicon/list-cn-3-47.gif)}\nli.list-cn-3-48{background-image:url(http://bs.baidu.com/listicon/list-cn-3-48.gif)}\nli.list-cn-3-49{background-image:url(http://bs.baidu.com/listicon/list-cn-3-49.gif)}\nli.list-cn-3-50{background-image:url(http://bs.baidu.com/listicon/list-cn-3-50.gif)}\nli.list-cn-3-51{background-image:url(http://bs.baidu.com/listicon/list-cn-3-51.gif)}\nli.list-cn-3-52{background-image:url(http://bs.baidu.com/listicon/list-cn-3-52.gif)}\nli.list-cn-3-53{background-image:url(http://bs.baidu.com/listicon/list-cn-3-53.gif)}\nli.list-cn-3-54{background-image:url(http://bs.baidu.com/listicon/list-cn-3-54.gif)}\nli.list-cn-3-55{background-image:url(http://bs.baidu.com/listicon/list-cn-3-55.gif)}\nli.list-cn-3-56{background-image:url(http://bs.baidu.com/listicon/list-cn-3-56.gif)}\nli.list-cn-3-57{background-image:url(http://bs.baidu.com/listicon/list-cn-3-57.gif)}\nli.list-cn-3-58{background-image:url(http://bs.baidu.com/listicon/list-cn-3-58.gif)}\nli.list-cn-3-59{background-image:url(http://bs.baidu.com/listicon/list-cn-3-59.gif)}\nli.list-cn-3-60{background-image:url(http://bs.baidu.com/listicon/list-cn-3-60.gif)}\nli.list-cn-3-61{background-image:url(http://bs.baidu.com/listicon/list-cn-3-61.gif)}\nli.list-cn-3-62{background-image:url(http://bs.baidu.com/listicon/list-cn-3-62.gif)}\nli.list-cn-3-63{background-image:url(http://bs.baidu.com/listicon/list-cn-3-63.gif)}\nli.list-cn-3-64{background-image:url(http://bs.baidu.com/listicon/list-cn-3-64.gif)}\nli.list-cn-3-65{background-image:url(http://bs.baidu.com/listicon/list-cn-3-65.gif)}\nli.list-cn-3-66{background-image:url(http://bs.baidu.com/listicon/list-cn-3-66.gif)}\nli.list-cn-3-67{background-image:url(http://bs.baidu.com/listicon/list-cn-3-67.gif)}\nli.list-cn-3-68{background-image:url(http://bs.baidu.com/listicon/list-cn-3-68.gif)}\nli.list-cn-3-69{background-image:url(http://bs.baidu.com/listicon/list-cn-3-69.gif)}\nli.list-cn-3-70{background-image:url(http://bs.baidu.com/listicon/list-cn-3-70.gif)}\nli.list-cn-3-71{background-image:url(http://bs.baidu.com/listicon/list-cn-3-71.gif)}\nli.list-cn-3-72{background-image:url(http://bs.baidu.com/listicon/list-cn-3-72.gif)}\nli.list-cn-3-73{background-image:url(http://bs.baidu.com/listicon/list-cn-3-73.gif)}\nli.list-cn-3-74{background-image:url(http://bs.baidu.com/listicon/list-cn-3-74.gif)}\nli.list-cn-3-75{background-image:url(http://bs.baidu.com/listicon/list-cn-3-75.gif)}\nli.list-cn-3-76{background-image:url(http://bs.baidu.com/listicon/list-cn-3-76.gif)}\nli.list-cn-3-77{background-image:url(http://bs.baidu.com/listicon/list-cn-3-77.gif)}\nli.list-cn-3-78{background-image:url(http://bs.baidu.com/listicon/list-cn-3-78.gif)}\nli.list-cn-3-79{background-image:url(http://bs.baidu.com/listicon/list-cn-3-79.gif)}\nli.list-cn-3-80{background-image:url(http://bs.baidu.com/listicon/list-cn-3-80.gif)}\nli.list-cn-3-81{background-image:url(http://bs.baidu.com/listicon/list-cn-3-81.gif)}\nli.list-cn-3-82{background-image:url(http://bs.baidu.com/listicon/list-cn-3-82.gif)}\nli.list-cn-3-83{background-image:url(http://bs.baidu.com/listicon/list-cn-3-83.gif)}\nli.list-cn-3-84{background-image:url(http://bs.baidu.com/listicon/list-cn-3-84.gif)}\nli.list-cn-3-85{background-image:url(http://bs.baidu.com/listicon/list-cn-3-85.gif)}\nli.list-cn-3-86{background-image:url(http://bs.baidu.com/listicon/list-cn-3-86.gif)}\nli.list-cn-3-87{background-image:url(http://bs.baidu.com/listicon/list-cn-3-87.gif)}\nli.list-cn-3-88{background-image:url(http://bs.baidu.com/listicon/list-cn-3-88.gif)}\nli.list-cn-3-89{background-image:url(http://bs.baidu.com/listicon/list-cn-3-89.gif)}\nli.list-cn-3-90{background-image:url(http://bs.baidu.com/listicon/list-cn-3-90.gif)}\nli.list-cn-3-91{background-image:url(http://bs.baidu.com/listicon/list-cn-3-91.gif)}\nli.list-cn-3-92{background-image:url(http://bs.baidu.com/listicon/list-cn-3-92.gif)}\nli.list-cn-3-93{background-image:url(http://bs.baidu.com/listicon/list-cn-3-93.gif)}\nli.list-cn-3-94{background-image:url(http://bs.baidu.com/listicon/list-cn-3-94.gif)}\nli.list-cn-3-95{background-image:url(http://bs.baidu.com/listicon/list-cn-3-95.gif)}\nli.list-cn-3-96{background-image:url(http://bs.baidu.com/listicon/list-cn-3-96.gif)}\nli.list-cn-3-97{background-image:url(http://bs.baidu.com/listicon/list-cn-3-97.gif)}\nli.list-cn-3-98{background-image:url(http://bs.baidu.com/listicon/list-cn-3-98.gif)}\nol.custom_cn2{list-style:none;}ol.custom_cn2 li{background-position:0 3px;background-repeat:no-repeat}\nli.list-cn2-paddingleft-1{padding-left:40px}\nli.list-cn2-paddingleft-2{padding-left:55px}\nli.list-cn2-paddingleft-3{padding-left:68px}\nli.list-num-1-0{background-image:url(http://bs.baidu.com/listicon/list-num-1-0.gif)}\nli.list-num-1-1{background-image:url(http://bs.baidu.com/listicon/list-num-1-1.gif)}\nli.list-num-1-2{background-image:url(http://bs.baidu.com/listicon/list-num-1-2.gif)}\nli.list-num-1-3{background-image:url(http://bs.baidu.com/listicon/list-num-1-3.gif)}\nli.list-num-1-4{background-image:url(http://bs.baidu.com/listicon/list-num-1-4.gif)}\nli.list-num-1-5{background-image:url(http://bs.baidu.com/listicon/list-num-1-5.gif)}\nli.list-num-1-6{background-image:url(http://bs.baidu.com/listicon/list-num-1-6.gif)}\nli.list-num-1-7{background-image:url(http://bs.baidu.com/listicon/list-num-1-7.gif)}\nli.list-num-1-8{background-image:url(http://bs.baidu.com/listicon/list-num-1-8.gif)}\nli.list-num-1-9{background-image:url(http://bs.baidu.com/listicon/list-num-1-9.gif)}\nli.list-num-1-10{background-image:url(http://bs.baidu.com/listicon/list-num-1-10.gif)}\nli.list-num-1-11{background-image:url(http://bs.baidu.com/listicon/list-num-1-11.gif)}\nli.list-num-1-12{background-image:url(http://bs.baidu.com/listicon/list-num-1-12.gif)}\nli.list-num-1-13{background-image:url(http://bs.baidu.com/listicon/list-num-1-13.gif)}\nli.list-num-1-14{background-image:url(http://bs.baidu.com/listicon/list-num-1-14.gif)}\nli.list-num-1-15{background-image:url(http://bs.baidu.com/listicon/list-num-1-15.gif)}\nli.list-num-1-16{background-image:url(http://bs.baidu.com/listicon/list-num-1-16.gif)}\nli.list-num-1-17{background-image:url(http://bs.baidu.com/listicon/list-num-1-17.gif)}\nli.list-num-1-18{background-image:url(http://bs.baidu.com/listicon/list-num-1-18.gif)}\nli.list-num-1-19{background-image:url(http://bs.baidu.com/listicon/list-num-1-19.gif)}\nli.list-num-1-20{background-image:url(http://bs.baidu.com/listicon/list-num-1-20.gif)}\nli.list-num-1-21{background-image:url(http://bs.baidu.com/listicon/list-num-1-21.gif)}\nli.list-num-1-22{background-image:url(http://bs.baidu.com/listicon/list-num-1-22.gif)}\nli.list-num-1-23{background-image:url(http://bs.baidu.com/listicon/list-num-1-23.gif)}\nli.list-num-1-24{background-image:url(http://bs.baidu.com/listicon/list-num-1-24.gif)}\nli.list-num-1-25{background-image:url(http://bs.baidu.com/listicon/list-num-1-25.gif)}\nli.list-num-1-26{background-image:url(http://bs.baidu.com/listicon/list-num-1-26.gif)}\nli.list-num-1-27{background-image:url(http://bs.baidu.com/listicon/list-num-1-27.gif)}\nli.list-num-1-28{background-image:url(http://bs.baidu.com/listicon/list-num-1-28.gif)}\nli.list-num-1-29{background-image:url(http://bs.baidu.com/listicon/list-num-1-29.gif)}\nli.list-num-1-30{background-image:url(http://bs.baidu.com/listicon/list-num-1-30.gif)}\nli.list-num-1-31{background-image:url(http://bs.baidu.com/listicon/list-num-1-31.gif)}\nli.list-num-1-32{background-image:url(http://bs.baidu.com/listicon/list-num-1-32.gif)}\nli.list-num-1-33{background-image:url(http://bs.baidu.com/listicon/list-num-1-33.gif)}\nli.list-num-1-34{background-image:url(http://bs.baidu.com/listicon/list-num-1-34.gif)}\nli.list-num-1-35{background-image:url(http://bs.baidu.com/listicon/list-num-1-35.gif)}\nli.list-num-1-36{background-image:url(http://bs.baidu.com/listicon/list-num-1-36.gif)}\nli.list-num-1-37{background-image:url(http://bs.baidu.com/listicon/list-num-1-37.gif)}\nli.list-num-1-38{background-image:url(http://bs.baidu.com/listicon/list-num-1-38.gif)}\nli.list-num-1-39{background-image:url(http://bs.baidu.com/listicon/list-num-1-39.gif)}\nli.list-num-1-40{background-image:url(http://bs.baidu.com/listicon/list-num-1-40.gif)}\nli.list-num-1-41{background-image:url(http://bs.baidu.com/listicon/list-num-1-41.gif)}\nli.list-num-1-42{background-image:url(http://bs.baidu.com/listicon/list-num-1-42.gif)}\nli.list-num-1-43{background-image:url(http://bs.baidu.com/listicon/list-num-1-43.gif)}\nli.list-num-1-44{background-image:url(http://bs.baidu.com/listicon/list-num-1-44.gif)}\nli.list-num-1-45{background-image:url(http://bs.baidu.com/listicon/list-num-1-45.gif)}\nli.list-num-1-46{background-image:url(http://bs.baidu.com/listicon/list-num-1-46.gif)}\nli.list-num-1-47{background-image:url(http://bs.baidu.com/listicon/list-num-1-47.gif)}\nli.list-num-1-48{background-image:url(http://bs.baidu.com/listicon/list-num-1-48.gif)}\nli.list-num-1-49{background-image:url(http://bs.baidu.com/listicon/list-num-1-49.gif)}\nli.list-num-1-50{background-image:url(http://bs.baidu.com/listicon/list-num-1-50.gif)}\nli.list-num-1-51{background-image:url(http://bs.baidu.com/listicon/list-num-1-51.gif)}\nli.list-num-1-52{background-image:url(http://bs.baidu.com/listicon/list-num-1-52.gif)}\nli.list-num-1-53{background-image:url(http://bs.baidu.com/listicon/list-num-1-53.gif)}\nli.list-num-1-54{background-image:url(http://bs.baidu.com/listicon/list-num-1-54.gif)}\nli.list-num-1-55{background-image:url(http://bs.baidu.com/listicon/list-num-1-55.gif)}\nli.list-num-1-56{background-image:url(http://bs.baidu.com/listicon/list-num-1-56.gif)}\nli.list-num-1-57{background-image:url(http://bs.baidu.com/listicon/list-num-1-57.gif)}\nli.list-num-1-58{background-image:url(http://bs.baidu.com/listicon/list-num-1-58.gif)}\nli.list-num-1-59{background-image:url(http://bs.baidu.com/listicon/list-num-1-59.gif)}\nli.list-num-1-60{background-image:url(http://bs.baidu.com/listicon/list-num-1-60.gif)}\nli.list-num-1-61{background-image:url(http://bs.baidu.com/listicon/list-num-1-61.gif)}\nli.list-num-1-62{background-image:url(http://bs.baidu.com/listicon/list-num-1-62.gif)}\nli.list-num-1-63{background-image:url(http://bs.baidu.com/listicon/list-num-1-63.gif)}\nli.list-num-1-64{background-image:url(http://bs.baidu.com/listicon/list-num-1-64.gif)}\nli.list-num-1-65{background-image:url(http://bs.baidu.com/listicon/list-num-1-65.gif)}\nli.list-num-1-66{background-image:url(http://bs.baidu.com/listicon/list-num-1-66.gif)}\nli.list-num-1-67{background-image:url(http://bs.baidu.com/listicon/list-num-1-67.gif)}\nli.list-num-1-68{background-image:url(http://bs.baidu.com/listicon/list-num-1-68.gif)}\nli.list-num-1-69{background-image:url(http://bs.baidu.com/listicon/list-num-1-69.gif)}\nli.list-num-1-70{background-image:url(http://bs.baidu.com/listicon/list-num-1-70.gif)}\nli.list-num-1-71{background-image:url(http://bs.baidu.com/listicon/list-num-1-71.gif)}\nli.list-num-1-72{background-image:url(http://bs.baidu.com/listicon/list-num-1-72.gif)}\nli.list-num-1-73{background-image:url(http://bs.baidu.com/listicon/list-num-1-73.gif)}\nli.list-num-1-74{background-image:url(http://bs.baidu.com/listicon/list-num-1-74.gif)}\nli.list-num-1-75{background-image:url(http://bs.baidu.com/listicon/list-num-1-75.gif)}\nli.list-num-1-76{background-image:url(http://bs.baidu.com/listicon/list-num-1-76.gif)}\nli.list-num-1-77{background-image:url(http://bs.baidu.com/listicon/list-num-1-77.gif)}\nli.list-num-1-78{background-image:url(http://bs.baidu.com/listicon/list-num-1-78.gif)}\nli.list-num-1-79{background-image:url(http://bs.baidu.com/listicon/list-num-1-79.gif)}\nli.list-num-1-80{background-image:url(http://bs.baidu.com/listicon/list-num-1-80.gif)}\nli.list-num-1-81{background-image:url(http://bs.baidu.com/listicon/list-num-1-81.gif)}\nli.list-num-1-82{background-image:url(http://bs.baidu.com/listicon/list-num-1-82.gif)}\nli.list-num-1-83{background-image:url(http://bs.baidu.com/listicon/list-num-1-83.gif)}\nli.list-num-1-84{background-image:url(http://bs.baidu.com/listicon/list-num-1-84.gif)}\nli.list-num-1-85{background-image:url(http://bs.baidu.com/listicon/list-num-1-85.gif)}\nli.list-num-1-86{background-image:url(http://bs.baidu.com/listicon/list-num-1-86.gif)}\nli.list-num-1-87{background-image:url(http://bs.baidu.com/listicon/list-num-1-87.gif)}\nli.list-num-1-88{background-image:url(http://bs.baidu.com/listicon/list-num-1-88.gif)}\nli.list-num-1-89{background-image:url(http://bs.baidu.com/listicon/list-num-1-89.gif)}\nli.list-num-1-90{background-image:url(http://bs.baidu.com/listicon/list-num-1-90.gif)}\nli.list-num-1-91{background-image:url(http://bs.baidu.com/listicon/list-num-1-91.gif)}\nli.list-num-1-92{background-image:url(http://bs.baidu.com/listicon/list-num-1-92.gif)}\nli.list-num-1-93{background-image:url(http://bs.baidu.com/listicon/list-num-1-93.gif)}\nli.list-num-1-94{background-image:url(http://bs.baidu.com/listicon/list-num-1-94.gif)}\nli.list-num-1-95{background-image:url(http://bs.baidu.com/listicon/list-num-1-95.gif)}\nli.list-num-1-96{background-image:url(http://bs.baidu.com/listicon/list-num-1-96.gif)}\nli.list-num-1-97{background-image:url(http://bs.baidu.com/listicon/list-num-1-97.gif)}\nli.list-num-1-98{background-image:url(http://bs.baidu.com/listicon/list-num-1-98.gif)}\nol.custom_num{list-style:none;}ol.custom_num li{background-position:0 3px;background-repeat:no-repeat}\nli.list-num-paddingleft-1{padding-left:25px}\nli.list-num-2-0{background-image:url(http://bs.baidu.com/listicon/list-num-2-0.gif)}\nli.list-num-2-1{background-image:url(http://bs.baidu.com/listicon/list-num-2-1.gif)}\nli.list-num-2-2{background-image:url(http://bs.baidu.com/listicon/list-num-2-2.gif)}\nli.list-num-2-3{background-image:url(http://bs.baidu.com/listicon/list-num-2-3.gif)}\nli.list-num-2-4{background-image:url(http://bs.baidu.com/listicon/list-num-2-4.gif)}\nli.list-num-2-5{background-image:url(http://bs.baidu.com/listicon/list-num-2-5.gif)}\nli.list-num-2-6{background-image:url(http://bs.baidu.com/listicon/list-num-2-6.gif)}\nli.list-num-2-7{background-image:url(http://bs.baidu.com/listicon/list-num-2-7.gif)}\nli.list-num-2-8{background-image:url(http://bs.baidu.com/listicon/list-num-2-8.gif)}\nli.list-num-2-9{background-image:url(http://bs.baidu.com/listicon/list-num-2-9.gif)}\nli.list-num-2-10{background-image:url(http://bs.baidu.com/listicon/list-num-2-10.gif)}\nli.list-num-2-11{background-image:url(http://bs.baidu.com/listicon/list-num-2-11.gif)}\nli.list-num-2-12{background-image:url(http://bs.baidu.com/listicon/list-num-2-12.gif)}\nli.list-num-2-13{background-image:url(http://bs.baidu.com/listicon/list-num-2-13.gif)}\nli.list-num-2-14{background-image:url(http://bs.baidu.com/listicon/list-num-2-14.gif)}\nli.list-num-2-15{background-image:url(http://bs.baidu.com/listicon/list-num-2-15.gif)}\nli.list-num-2-16{background-image:url(http://bs.baidu.com/listicon/list-num-2-16.gif)}\nli.list-num-2-17{background-image:url(http://bs.baidu.com/listicon/list-num-2-17.gif)}\nli.list-num-2-18{background-image:url(http://bs.baidu.com/listicon/list-num-2-18.gif)}\nli.list-num-2-19{background-image:url(http://bs.baidu.com/listicon/list-num-2-19.gif)}\nli.list-num-2-20{background-image:url(http://bs.baidu.com/listicon/list-num-2-20.gif)}\nli.list-num-2-21{background-image:url(http://bs.baidu.com/listicon/list-num-2-21.gif)}\nli.list-num-2-22{background-image:url(http://bs.baidu.com/listicon/list-num-2-22.gif)}\nli.list-num-2-23{background-image:url(http://bs.baidu.com/listicon/list-num-2-23.gif)}\nli.list-num-2-24{background-image:url(http://bs.baidu.com/listicon/list-num-2-24.gif)}\nli.list-num-2-25{background-image:url(http://bs.baidu.com/listicon/list-num-2-25.gif)}\nli.list-num-2-26{background-image:url(http://bs.baidu.com/listicon/list-num-2-26.gif)}\nli.list-num-2-27{background-image:url(http://bs.baidu.com/listicon/list-num-2-27.gif)}\nli.list-num-2-28{background-image:url(http://bs.baidu.com/listicon/list-num-2-28.gif)}\nli.list-num-2-29{background-image:url(http://bs.baidu.com/listicon/list-num-2-29.gif)}\nli.list-num-2-30{background-image:url(http://bs.baidu.com/listicon/list-num-2-30.gif)}\nli.list-num-2-31{background-image:url(http://bs.baidu.com/listicon/list-num-2-31.gif)}\nli.list-num-2-32{background-image:url(http://bs.baidu.com/listicon/list-num-2-32.gif)}\nli.list-num-2-33{background-image:url(http://bs.baidu.com/listicon/list-num-2-33.gif)}\nli.list-num-2-34{background-image:url(http://bs.baidu.com/listicon/list-num-2-34.gif)}\nli.list-num-2-35{background-image:url(http://bs.baidu.com/listicon/list-num-2-35.gif)}\nli.list-num-2-36{background-image:url(http://bs.baidu.com/listicon/list-num-2-36.gif)}\nli.list-num-2-37{background-image:url(http://bs.baidu.com/listicon/list-num-2-37.gif)}\nli.list-num-2-38{background-image:url(http://bs.baidu.com/listicon/list-num-2-38.gif)}\nli.list-num-2-39{background-image:url(http://bs.baidu.com/listicon/list-num-2-39.gif)}\nli.list-num-2-40{background-image:url(http://bs.baidu.com/listicon/list-num-2-40.gif)}\nli.list-num-2-41{background-image:url(http://bs.baidu.com/listicon/list-num-2-41.gif)}\nli.list-num-2-42{background-image:url(http://bs.baidu.com/listicon/list-num-2-42.gif)}\nli.list-num-2-43{background-image:url(http://bs.baidu.com/listicon/list-num-2-43.gif)}\nli.list-num-2-44{background-image:url(http://bs.baidu.com/listicon/list-num-2-44.gif)}\nli.list-num-2-45{background-image:url(http://bs.baidu.com/listicon/list-num-2-45.gif)}\nli.list-num-2-46{background-image:url(http://bs.baidu.com/listicon/list-num-2-46.gif)}\nli.list-num-2-47{background-image:url(http://bs.baidu.com/listicon/list-num-2-47.gif)}\nli.list-num-2-48{background-image:url(http://bs.baidu.com/listicon/list-num-2-48.gif)}\nli.list-num-2-49{background-image:url(http://bs.baidu.com/listicon/list-num-2-49.gif)}\nli.list-num-2-50{background-image:url(http://bs.baidu.com/listicon/list-num-2-50.gif)}\nli.list-num-2-51{background-image:url(http://bs.baidu.com/listicon/list-num-2-51.gif)}\nli.list-num-2-52{background-image:url(http://bs.baidu.com/listicon/list-num-2-52.gif)}\nli.list-num-2-53{background-image:url(http://bs.baidu.com/listicon/list-num-2-53.gif)}\nli.list-num-2-54{background-image:url(http://bs.baidu.com/listicon/list-num-2-54.gif)}\nli.list-num-2-55{background-image:url(http://bs.baidu.com/listicon/list-num-2-55.gif)}\nli.list-num-2-56{background-image:url(http://bs.baidu.com/listicon/list-num-2-56.gif)}\nli.list-num-2-57{background-image:url(http://bs.baidu.com/listicon/list-num-2-57.gif)}\nli.list-num-2-58{background-image:url(http://bs.baidu.com/listicon/list-num-2-58.gif)}\nli.list-num-2-59{background-image:url(http://bs.baidu.com/listicon/list-num-2-59.gif)}\nli.list-num-2-60{background-image:url(http://bs.baidu.com/listicon/list-num-2-60.gif)}\nli.list-num-2-61{background-image:url(http://bs.baidu.com/listicon/list-num-2-61.gif)}\nli.list-num-2-62{background-image:url(http://bs.baidu.com/listicon/list-num-2-62.gif)}\nli.list-num-2-63{background-image:url(http://bs.baidu.com/listicon/list-num-2-63.gif)}\nli.list-num-2-64{background-image:url(http://bs.baidu.com/listicon/list-num-2-64.gif)}\nli.list-num-2-65{background-image:url(http://bs.baidu.com/listicon/list-num-2-65.gif)}\nli.list-num-2-66{background-image:url(http://bs.baidu.com/listicon/list-num-2-66.gif)}\nli.list-num-2-67{background-image:url(http://bs.baidu.com/listicon/list-num-2-67.gif)}\nli.list-num-2-68{background-image:url(http://bs.baidu.com/listicon/list-num-2-68.gif)}\nli.list-num-2-69{background-image:url(http://bs.baidu.com/listicon/list-num-2-69.gif)}\nli.list-num-2-70{background-image:url(http://bs.baidu.com/listicon/list-num-2-70.gif)}\nli.list-num-2-71{background-image:url(http://bs.baidu.com/listicon/list-num-2-71.gif)}\nli.list-num-2-72{background-image:url(http://bs.baidu.com/listicon/list-num-2-72.gif)}\nli.list-num-2-73{background-image:url(http://bs.baidu.com/listicon/list-num-2-73.gif)}\nli.list-num-2-74{background-image:url(http://bs.baidu.com/listicon/list-num-2-74.gif)}\nli.list-num-2-75{background-image:url(http://bs.baidu.com/listicon/list-num-2-75.gif)}\nli.list-num-2-76{background-image:url(http://bs.baidu.com/listicon/list-num-2-76.gif)}\nli.list-num-2-77{background-image:url(http://bs.baidu.com/listicon/list-num-2-77.gif)}\nli.list-num-2-78{background-image:url(http://bs.baidu.com/listicon/list-num-2-78.gif)}\nli.list-num-2-79{background-image:url(http://bs.baidu.com/listicon/list-num-2-79.gif)}\nli.list-num-2-80{background-image:url(http://bs.baidu.com/listicon/list-num-2-80.gif)}\nli.list-num-2-81{background-image:url(http://bs.baidu.com/listicon/list-num-2-81.gif)}\nli.list-num-2-82{background-image:url(http://bs.baidu.com/listicon/list-num-2-82.gif)}\nli.list-num-2-83{background-image:url(http://bs.baidu.com/listicon/list-num-2-83.gif)}\nli.list-num-2-84{background-image:url(http://bs.baidu.com/listicon/list-num-2-84.gif)}\nli.list-num-2-85{background-image:url(http://bs.baidu.com/listicon/list-num-2-85.gif)}\nli.list-num-2-86{background-image:url(http://bs.baidu.com/listicon/list-num-2-86.gif)}\nli.list-num-2-87{background-image:url(http://bs.baidu.com/listicon/list-num-2-87.gif)}\nli.list-num-2-88{background-image:url(http://bs.baidu.com/listicon/list-num-2-88.gif)}\nli.list-num-2-89{background-image:url(http://bs.baidu.com/listicon/list-num-2-89.gif)}\nli.list-num-2-90{background-image:url(http://bs.baidu.com/listicon/list-num-2-90.gif)}\nli.list-num-2-91{background-image:url(http://bs.baidu.com/listicon/list-num-2-91.gif)}\nli.list-num-2-92{background-image:url(http://bs.baidu.com/listicon/list-num-2-92.gif)}\nli.list-num-2-93{background-image:url(http://bs.baidu.com/listicon/list-num-2-93.gif)}\nli.list-num-2-94{background-image:url(http://bs.baidu.com/listicon/list-num-2-94.gif)}\nli.list-num-2-95{background-image:url(http://bs.baidu.com/listicon/list-num-2-95.gif)}\nli.list-num-2-96{background-image:url(http://bs.baidu.com/listicon/list-num-2-96.gif)}\nli.list-num-2-97{background-image:url(http://bs.baidu.com/listicon/list-num-2-97.gif)}\nli.list-num-2-98{background-image:url(http://bs.baidu.com/listicon/list-num-2-98.gif)}\nol.custom_num1{list-style:none;}ol.custom_num1 li{background-position:0 3px;background-repeat:no-repeat}\nli.list-num1-paddingleft-1{padding-left:25px}\nli.list-num-3-0{background-image:url(http://bs.baidu.com/listicon/list-num-3-0.gif)}\nli.list-num-3-1{background-image:url(http://bs.baidu.com/listicon/list-num-3-1.gif)}\nli.list-num-3-2{background-image:url(http://bs.baidu.com/listicon/list-num-3-2.gif)}\nli.list-num-3-3{background-image:url(http://bs.baidu.com/listicon/list-num-3-3.gif)}\nli.list-num-3-4{background-image:url(http://bs.baidu.com/listicon/list-num-3-4.gif)}\nli.list-num-3-5{background-image:url(http://bs.baidu.com/listicon/list-num-3-5.gif)}\nli.list-num-3-6{background-image:url(http://bs.baidu.com/listicon/list-num-3-6.gif)}\nli.list-num-3-7{background-image:url(http://bs.baidu.com/listicon/list-num-3-7.gif)}\nli.list-num-3-8{background-image:url(http://bs.baidu.com/listicon/list-num-3-8.gif)}\nli.list-num-3-9{background-image:url(http://bs.baidu.com/listicon/list-num-3-9.gif)}\nli.list-num-3-10{background-image:url(http://bs.baidu.com/listicon/list-num-3-10.gif)}\nli.list-num-3-11{background-image:url(http://bs.baidu.com/listicon/list-num-3-11.gif)}\nli.list-num-3-12{background-image:url(http://bs.baidu.com/listicon/list-num-3-12.gif)}\nli.list-num-3-13{background-image:url(http://bs.baidu.com/listicon/list-num-3-13.gif)}\nli.list-num-3-14{background-image:url(http://bs.baidu.com/listicon/list-num-3-14.gif)}\nli.list-num-3-15{background-image:url(http://bs.baidu.com/listicon/list-num-3-15.gif)}\nli.list-num-3-16{background-image:url(http://bs.baidu.com/listicon/list-num-3-16.gif)}\nli.list-num-3-17{background-image:url(http://bs.baidu.com/listicon/list-num-3-17.gif)}\nli.list-num-3-18{background-image:url(http://bs.baidu.com/listicon/list-num-3-18.gif)}\nli.list-num-3-19{background-image:url(http://bs.baidu.com/listicon/list-num-3-19.gif)}\nli.list-num-3-20{background-image:url(http://bs.baidu.com/listicon/list-num-3-20.gif)}\nli.list-num-3-21{background-image:url(http://bs.baidu.com/listicon/list-num-3-21.gif)}\nli.list-num-3-22{background-image:url(http://bs.baidu.com/listicon/list-num-3-22.gif)}\nli.list-num-3-23{background-image:url(http://bs.baidu.com/listicon/list-num-3-23.gif)}\nli.list-num-3-24{background-image:url(http://bs.baidu.com/listicon/list-num-3-24.gif)}\nli.list-num-3-25{background-image:url(http://bs.baidu.com/listicon/list-num-3-25.gif)}\nli.list-num-3-26{background-image:url(http://bs.baidu.com/listicon/list-num-3-26.gif)}\nli.list-num-3-27{background-image:url(http://bs.baidu.com/listicon/list-num-3-27.gif)}\nli.list-num-3-28{background-image:url(http://bs.baidu.com/listicon/list-num-3-28.gif)}\nli.list-num-3-29{background-image:url(http://bs.baidu.com/listicon/list-num-3-29.gif)}\nli.list-num-3-30{background-image:url(http://bs.baidu.com/listicon/list-num-3-30.gif)}\nli.list-num-3-31{background-image:url(http://bs.baidu.com/listicon/list-num-3-31.gif)}\nli.list-num-3-32{background-image:url(http://bs.baidu.com/listicon/list-num-3-32.gif)}\nli.list-num-3-33{background-image:url(http://bs.baidu.com/listicon/list-num-3-33.gif)}\nli.list-num-3-34{background-image:url(http://bs.baidu.com/listicon/list-num-3-34.gif)}\nli.list-num-3-35{background-image:url(http://bs.baidu.com/listicon/list-num-3-35.gif)}\nli.list-num-3-36{background-image:url(http://bs.baidu.com/listicon/list-num-3-36.gif)}\nli.list-num-3-37{background-image:url(http://bs.baidu.com/listicon/list-num-3-37.gif)}\nli.list-num-3-38{background-image:url(http://bs.baidu.com/listicon/list-num-3-38.gif)}\nli.list-num-3-39{background-image:url(http://bs.baidu.com/listicon/list-num-3-39.gif)}\nli.list-num-3-40{background-image:url(http://bs.baidu.com/listicon/list-num-3-40.gif)}\nli.list-num-3-41{background-image:url(http://bs.baidu.com/listicon/list-num-3-41.gif)}\nli.list-num-3-42{background-image:url(http://bs.baidu.com/listicon/list-num-3-42.gif)}\nli.list-num-3-43{background-image:url(http://bs.baidu.com/listicon/list-num-3-43.gif)}\nli.list-num-3-44{background-image:url(http://bs.baidu.com/listicon/list-num-3-44.gif)}\nli.list-num-3-45{background-image:url(http://bs.baidu.com/listicon/list-num-3-45.gif)}\nli.list-num-3-46{background-image:url(http://bs.baidu.com/listicon/list-num-3-46.gif)}\nli.list-num-3-47{background-image:url(http://bs.baidu.com/listicon/list-num-3-47.gif)}\nli.list-num-3-48{background-image:url(http://bs.baidu.com/listicon/list-num-3-48.gif)}\nli.list-num-3-49{background-image:url(http://bs.baidu.com/listicon/list-num-3-49.gif)}\nli.list-num-3-50{background-image:url(http://bs.baidu.com/listicon/list-num-3-50.gif)}\nli.list-num-3-51{background-image:url(http://bs.baidu.com/listicon/list-num-3-51.gif)}\nli.list-num-3-52{background-image:url(http://bs.baidu.com/listicon/list-num-3-52.gif)}\nli.list-num-3-53{background-image:url(http://bs.baidu.com/listicon/list-num-3-53.gif)}\nli.list-num-3-54{background-image:url(http://bs.baidu.com/listicon/list-num-3-54.gif)}\nli.list-num-3-55{background-image:url(http://bs.baidu.com/listicon/list-num-3-55.gif)}\nli.list-num-3-56{background-image:url(http://bs.baidu.com/listicon/list-num-3-56.gif)}\nli.list-num-3-57{background-image:url(http://bs.baidu.com/listicon/list-num-3-57.gif)}\nli.list-num-3-58{background-image:url(http://bs.baidu.com/listicon/list-num-3-58.gif)}\nli.list-num-3-59{background-image:url(http://bs.baidu.com/listicon/list-num-3-59.gif)}\nli.list-num-3-60{background-image:url(http://bs.baidu.com/listicon/list-num-3-60.gif)}\nli.list-num-3-61{background-image:url(http://bs.baidu.com/listicon/list-num-3-61.gif)}\nli.list-num-3-62{background-image:url(http://bs.baidu.com/listicon/list-num-3-62.gif)}\nli.list-num-3-63{background-image:url(http://bs.baidu.com/listicon/list-num-3-63.gif)}\nli.list-num-3-64{background-image:url(http://bs.baidu.com/listicon/list-num-3-64.gif)}\nli.list-num-3-65{background-image:url(http://bs.baidu.com/listicon/list-num-3-65.gif)}\nli.list-num-3-66{background-image:url(http://bs.baidu.com/listicon/list-num-3-66.gif)}\nli.list-num-3-67{background-image:url(http://bs.baidu.com/listicon/list-num-3-67.gif)}\nli.list-num-3-68{background-image:url(http://bs.baidu.com/listicon/list-num-3-68.gif)}\nli.list-num-3-69{background-image:url(http://bs.baidu.com/listicon/list-num-3-69.gif)}\nli.list-num-3-70{background-image:url(http://bs.baidu.com/listicon/list-num-3-70.gif)}\nli.list-num-3-71{background-image:url(http://bs.baidu.com/listicon/list-num-3-71.gif)}\nli.list-num-3-72{background-image:url(http://bs.baidu.com/listicon/list-num-3-72.gif)}\nli.list-num-3-73{background-image:url(http://bs.baidu.com/listicon/list-num-3-73.gif)}\nli.list-num-3-74{background-image:url(http://bs.baidu.com/listicon/list-num-3-74.gif)}\nli.list-num-3-75{background-image:url(http://bs.baidu.com/listicon/list-num-3-75.gif)}\nli.list-num-3-76{background-image:url(http://bs.baidu.com/listicon/list-num-3-76.gif)}\nli.list-num-3-77{background-image:url(http://bs.baidu.com/listicon/list-num-3-77.gif)}\nli.list-num-3-78{background-image:url(http://bs.baidu.com/listicon/list-num-3-78.gif)}\nli.list-num-3-79{background-image:url(http://bs.baidu.com/listicon/list-num-3-79.gif)}\nli.list-num-3-80{background-image:url(http://bs.baidu.com/listicon/list-num-3-80.gif)}\nli.list-num-3-81{background-image:url(http://bs.baidu.com/listicon/list-num-3-81.gif)}\nli.list-num-3-82{background-image:url(http://bs.baidu.com/listicon/list-num-3-82.gif)}\nli.list-num-3-83{background-image:url(http://bs.baidu.com/listicon/list-num-3-83.gif)}\nli.list-num-3-84{background-image:url(http://bs.baidu.com/listicon/list-num-3-84.gif)}\nli.list-num-3-85{background-image:url(http://bs.baidu.com/listicon/list-num-3-85.gif)}\nli.list-num-3-86{background-image:url(http://bs.baidu.com/listicon/list-num-3-86.gif)}\nli.list-num-3-87{background-image:url(http://bs.baidu.com/listicon/list-num-3-87.gif)}\nli.list-num-3-88{background-image:url(http://bs.baidu.com/listicon/list-num-3-88.gif)}\nli.list-num-3-89{background-image:url(http://bs.baidu.com/listicon/list-num-3-89.gif)}\nli.list-num-3-90{background-image:url(http://bs.baidu.com/listicon/list-num-3-90.gif)}\nli.list-num-3-91{background-image:url(http://bs.baidu.com/listicon/list-num-3-91.gif)}\nli.list-num-3-92{background-image:url(http://bs.baidu.com/listicon/list-num-3-92.gif)}\nli.list-num-3-93{background-image:url(http://bs.baidu.com/listicon/list-num-3-93.gif)}\nli.list-num-3-94{background-image:url(http://bs.baidu.com/listicon/list-num-3-94.gif)}\nli.list-num-3-95{background-image:url(http://bs.baidu.com/listicon/list-num-3-95.gif)}\nli.list-num-3-96{background-image:url(http://bs.baidu.com/listicon/list-num-3-96.gif)}\nli.list-num-3-97{background-image:url(http://bs.baidu.com/listicon/list-num-3-97.gif)}\nli.list-num-3-98{background-image:url(http://bs.baidu.com/listicon/list-num-3-98.gif)}\nol.custom_num2{list-style:none;}ol.custom_num2 li{background-position:0 3px;background-repeat:no-repeat}\nli.list-num2-paddingleft-1{padding-left:35px}\nli.list-num2-paddingleft-2{padding-left:40px}\nli.list-dash{background-image:url(http://bs.baidu.com/listicon/dash.gif)}\nul.custom_dash{list-style:none;}ul.custom_dash li{background-position:0 3px;background-repeat:no-repeat}\nli.list-dash-paddingleft{padding-left:35px}\nli.list-dot{background-image:url(http://bs.baidu.com/listicon/dot.gif)}\nul.custom_dot{list-style:none;}ul.custom_dot li{background-position:0 3px;background-repeat:no-repeat}\nli.list-dot-paddingleft{padding-left:20px}\n.list-paddingleft-1{padding-left:0}\n.list-paddingleft-2{padding-left:30px}\n.list-paddingleft-3{padding-left:60px}</style><style id=\"pagebreak\">.pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}</style><style id=\"pre\">pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;}</style><style id=\"loading\">.loadingclass{display:inline-block;cursor:default;background: url('http://192.168.1.71:81/console/UEditor/themes/default/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-left:1px;height: 22px;width: 22px;}\n.loaderrorclass{display:inline-block;cursor:default;background: url('http://192.168.1.71:81/console/UEditor/themes/default/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}</style><style id=\"anchor\">.anchorclass{background: url('http://192.168.1.71:81/console/UEditor/themes/default/images/anchor.gif') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}</style>\n      </head>\n      <body>${htmlContent}</body>\n    </html>\n  `\n}\n\nonMounted(async () => {\n  const { path } = route\n  // if (!navigationStore.navigations.length) await navigationStore.fetchNavigations()\n  currentNavigation.value = navigationStore.navigations.find((item) => item.menu_path === path || item.jump_path === path) || {}\n  const contentData = currentNavigation.value.content || {}\n  const rawHtmlContent = contentData.html_content || ''\n\n  softContent.value = rawHtmlContent\n\n  if (!route?.meta?.softCustom) {\n    // 构建完整的 iframe 内容\n    iframeContent.value = buildIframeContent(rawHtmlContent)\n\n    if (timer) {\n      clearInterval(timer)\n      timer = null\n    }\n    timer = setInterval(() => {\n      // 调整 iframe 高度以适应内容\n      const iframeDocument = iframeRef.value.contentDocument\n      if (iframeDocument) {\n        const height = iframeDocument.documentElement.scrollHeight\n        iframeHeight.value = height\n      }\n    }, 1000)\n  }\n})\n\nonUnmounted(() => {\n  if (!route?.meta?.softCustom) {\n    clearInterval(timer)\n    timer = null\n  }\n})\n</script>\n\n<style scoped>\n.iframe-container {\n  width: 100%;\n  overflow: hidden;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/components/BookMarks.vue",
    "content": "<template>\n  <div class=\"flex items-center gap-1 py-1.5 bg-white\">\n    <template v-for=\"item in Array(10)\">\n      <div class=\"h-7 flex-center gap-1.5 px-1.5 rounded-full cursor-pointer hover:bg-[#F2F2F2]\">\n        <img class=\"size-4\" src=\"\" alt=\"\" />\n        <span class=\"text-xs text-[#454545]\">网购凭条</span>\n      </div>\n    </template>\n  </div>\n</template>\n\n<script>\n</script>\n\n<style>\n</style>"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/components/Browser.vue",
    "content": "<script setup lang=\"ts\">\nimport { computed, ref, onMounted, nextTick, onUnmounted, defineAsyncComponent } from 'vue'\nimport {\n  Close,\n  ArrowLeft,\n  ArrowRight,\n  RefreshRight,\n  MoreFilled,\n  WarningFilled\n} from '@element-plus/icons-vue'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport { useTabsStore } from '../stores/tabs'\nimport { useBrowserSettingStore } from '@/stores/modules/browser-setting.ts'\n\nconst props = withDefaults(\n  defineProps<{\n    tab: Browser.Tab\n    parent?: Browser.Tab | null\n  }>(),\n  {\n    tab: () => ({}),\n    parent: null\n  }\n)\n\nconst getPreloadPath = () => {\n  return window.$chat53ai.getPreloadPath()\n}\n\nconst Reader = defineAsyncComponent(() => import('./Reader/index.vue'))\n// 添加 Readability 的懒加载\nconst loadReadability = async () => {\n  const { Readability } = await import('@mozilla/readability')\n  return Readability\n}\n\n// 替换原有的响应式变量\nconst userStore = useUserStore()\nconst tabsStore = useTabsStore()\nconst settingStore = useBrowserSettingStore()\n\nconst webviewRef = ref<any>(null)\n\nconst isFocus = ref(false)\nconst isChange = ref(false)\nconst isSider = ref(false)\nconst showSider = ref(false)\nconst isReader = ref(false)\nconst loadError = ref('')\n\nconst cleaning = ref(false)\nconst contentHtml = ref('')\n\nconst webviewEvents = ref<Array<{ event: string; handler: Function }>>([])\n\nconst canBack = computed(() => {\n  if (!webviewRef.value || props.tab.loading !== 'completed') return false\n  return webviewRef.value.canGoBack()\n})\n\nconst canForward = computed(() => {\n  if (!webviewRef.value || props.tab.loading !== 'completed') return false\n  return webviewRef.value.canGoForward()\n})\n\nconst moreMenus = computed(() => {\n  return settingStore.toolbar_menus.slice(2)\n})\n\nconst models = ref([\n  {\n    name: '百度AI+',\n    value: 'baiduai+',\n    url: 'https://chat.baidu.com/search?word='\n  },\n  {\n    name: '纳米搜索',\n    value: 'n',\n    url: 'https://www.n.cn/?q='\n  },\n  {\n    name: '秘塔',\n    value: 'metaso',\n    url: 'https://metaso.cn/?q='\n  },\n  {\n    name: 'Perplexity',\n    value: 'perplexity',\n    url: 'https://perplexity.ai/search?q='\n  }\n])\n\nconst historys = ref([\n  { name: '百度', url: 'https://www.baidu.com' },\n  { name: 'AI知识库|大模型知识库|智能体开发|53AI', url: 'https://www.53ai.com' }\n])\n\nlet _isClickPanel = false\nconst handleChange = () => {\n  isChange.value = true\n  handleFocus()\n}\nconst handleFocus = () => {\n  isFocus.value = true\n}\nconst handleBlur = () => {\n  setTimeout(() => {\n    if (_isClickPanel) {\n      _isClickPanel = false\n      return\n    }\n    isFocus.value = false\n    isChange.value = false\n  }, 200)\n}\nconst handlePanelClick = () => {\n  _isClickPanel = true\n  // isFocus.value = true\n}\n\nconst handleBack = () => {\n  if (canBack.value && webviewRef.value) {\n    webviewRef.value.goBack()\n  }\n}\n\nconst handleForward = () => {\n  if (canForward.value && webviewRef.value) {\n    webviewRef.value.goForward()\n  }\n}\n\nconst handleRefresh = () => {\n  if (webviewRef.value) {\n    webviewRef.value.reload()\n  }\n}\n\nconst updateTab = (data = {}) => {\n  if (props.parent) {\n    tabsStore.updateChildTab(props.parent, props.tab.id, data)\n  } else {\n    tabsStore.updateTab(props.tab.id, data)\n  }\n}\n\nconst isUrl = (url: string) => {\n  try {\n    new URL(url)\n    return true\n  } catch {\n    return /^(https?:\\/\\/)?[\\w-]+(\\.[\\w-]+)+[\\w\\-.,@?^=%&:/~+#]*$/.test(url)\n  }\n}\n\nconst handleUrl = (value: string) => {\n  let targetUrl = value.trim()\n\n  if (!targetUrl) {\n    return\n  }\n  if (isUrl(targetUrl)) {\n    if (!/^https?:\\/\\//i.test(targetUrl)) {\n      targetUrl = `https://${targetUrl}`\n    }\n  } else {\n    targetUrl = settingStore.default_search_url.replace('_word_', encodeURIComponent(targetUrl))\n  }\n\n  if (props.tab.defaultUrl) {\n    updateTab({\n      url: targetUrl,\n      loading: 'loading'\n    })\n    nextTick(() => {\n      webviewRef.value.loadURL(targetUrl)\n    })\n  } else {\n    updateTab({\n      defaultUrl: targetUrl,\n      loading: 'loading'\n    })\n    nextTick(() => {\n      initWebviewListener()\n    })\n  }\n  handleBlur()\n}\n\nconst getWebviewContent = async () => {\n  return await webviewRef.value.executeJavaScript(`\n    (function() {\n      return document.documentElement.innerHTML; // 提取可见文本\n    })()\n  `)\n}\n\nconst processLinks = (html: string): string => {\n  const parser = new DOMParser()\n  const doc = parser.parseFromString(html, 'text/html')\n\n  doc.querySelectorAll('a').forEach((link) => {\n    try {\n      const href = link.getAttribute('href') || ''\n      if (props.tab.url && !href.startsWith('http')) {\n        const base = new URL(props.tab.url)\n        link.href = new URL(href, base).href\n      }\n      link.target = '_blank'\n      link.rel = 'noopener noreferrer'\n    } catch (e) {}\n  })\n\n  return doc.body.innerHTML\n}\nconst setContentOfMarkdown = async () => {\n  try {\n    cleaning.value = true\n    const content = await getWebviewContent()\n    const doc = document.implementation.createHTMLDocument('')\n    doc.documentElement.innerHTML = content\n    const Readability = await loadReadability()\n    const article = new Readability(doc).parse()\n\n    if (!article) {\n      cleaning.value = false\n      throw new Error('Failed to parse content')\n    }\n    contentHtml.value = processLinks(\n      `<h1 class=\"reader-title\">${article.title}</h1>${article.content}`\n    )\n    nextTick(() => {\n      cleaning.value = false\n    })\n  } catch (error) {\n    console.error('Content processing failed:', error)\n    // 可以添加用户提示\n  }\n}\n\n// 在现有方法后添加新的解析方法\nconst handleParseContent = async () => {\n  if (!webviewRef.value || props.tab.loading !== 'completed') return\n\n  isSider.value = true\n  showSider.value = true\n  nextTick(() => {\n    setContentOfMarkdown()\n  })\n}\n\nconst handleReader = () => {\n  if (props.tab.loading !== 'completed') return\n  if (isReader.value) {\n    isReader.value = false\n    return\n  }\n  isReader.value = true\n  setContentOfMarkdown()\n}\n\nconst handleMenuCommand = (command) => {\n  console.log(command)\n  switch (command) {\n    case 'setting':\n      tabsStore.activeSetting()\n      break\n    default:\n      handleParseContent()\n      break\n  }\n}\n\nconst initWebviewListener = () => {\n  removeWebviewListener()\n  if (webviewRef.value) {\n    tabsStore.updateTab(props.tab.id, {\n      webview: webviewRef.value\n    })\n    let hasError = false\n    const events = {\n      'did-start-loading': () => {\n        hasError = false\n        isReader.value = false\n        contentHtml.value = ''\n        updateTab({ loading: 'loading' })\n      },\n      'did-stop-loading': () => {\n        if (!hasError) {\n          const url = webviewRef.value.getURL()\n          updateTab({\n            loading: 'completed',\n            url\n          })\n        }\n      },\n      'did-navigate': (event) => {\n        const { url } = event\n        updateTab({\n          url: settingStore.default_tab_url === url ? '' : url,\n          loading: hasError ? 'error' : 'completed'\n        })\n      },\n      'did-navigate-in-page': (event) => {\n        updateTab({\n          url: event.url\n        })\n      },\n      'will-navigate': (event) => {\n        updateTab({\n          url: event.url,\n          loading: 'loading'\n        })\n      },\n      // 页面信息更新事件\n      'page-title-updated': (event) => {\n        if (!props.tab.ability) return\n        updateTab({\n          title: event.title\n        })\n      },\n      'page-favicon-updated': (event) => {\n        if (!props.tab.ability) return\n        updateTab({\n          icon: event.favicons[0] || ''\n        })\n      },\n      // 错误处理事件\n      'did-fail-load': (event) => {\n        // 除了主框架的错误，其他的都忽略\n        if (!event.isMainFrame) return\n        hasError = true\n        loadError.value = `加载失败: ${event.errorDescription}`\n        console.log(event)\n        updateTab({\n          loading: 'error'\n        })\n      },\n      // 新增：内容加载完成事件\n      'dom-ready': () => {\n        // 可以在这里执行一些页面加载完成后的操作\n        // 例如：注入自定义脚本或样式\n        // 例如：注入自定义脚本\n      },\n      // 新增：新窗口打开事件\n      'new-window': (event) => {\n        // 在新标签页中打开链接，而不是在新窗口中\n        tabsStore.addTab({ url: event.url })\n      },\n      // 新增：控制台消息事件\n      'console-message': (event) => {\n        console.log('Webview console:', event.message)\n      }\n    }\n    Object.keys(events).forEach((eventName) => {\n      webviewRef.value.addEventListener(eventName, events[eventName])\n      webviewEvents.value.push({\n        event: eventName,\n        handler: events[eventName]\n      })\n    })\n  }\n}\n\nconst removeWebviewListener = () => {\n  if (webviewRef.value) {\n    webviewEvents.value.forEach((event) => {\n      webviewRef.value.removeEventListener(event.event, event.handler)\n    })\n    webviewEvents.value = []\n  }\n}\n\nconst handleIframeMessage = (res) => {\n  const { type, from } = res.data\n  if (from !== 'chat53ai_extension') return\n  if (type === 'close') {\n    showSider.value = false\n  }\n}\nonMounted(() => {\n  nextTick(() => {\n    initWebviewListener()\n  })\n\n  window.addEventListener('message', handleIframeMessage)\n})\n\nonUnmounted(() => {\n  window.removeEventListener('message', handleIframeMessage)\n  removeWebviewListener()\n})\n</script>\n\n<template>\n  <div class=\"flex flex-col bg-white\">\n    <!-- 修改所有 currentTab 为 tab -->\n    <div v-if=\"tab.ability\" class=\"flex items-center gap-2 px-4 py-1.5 border-b\">\n      <div class=\"flex items-center gap-0.5\">\n        <div\n          class=\"size-[34px] flex-center rounded-full\"\n          :class=\"[canBack ? 'cursor-pointer hover:bg-[#F2F2F2]' : 'cursor-not-allowed']\"\n          @click=\"handleBack\"\n        >\n          <el-icon :color=\"canBack ? '#666666' : '#CCCCCC'\">\n            <ArrowLeft />\n          </el-icon>\n        </div>\n        <div\n          class=\"size-[34px] flex-center rounded-full\"\n          :class=\"[canForward ? 'cursor-pointer hover:bg-[#F2F2F2]' : 'cursor-not-allowed']\"\n          @click=\"handleForward\"\n        >\n          <el-icon :color=\"canForward ? '#666666' : '#CCCCCC'\">\n            <ArrowRight />\n          </el-icon>\n        </div>\n        <div\n          class=\"size-[34px] flex-center rounded-full hover:bg-[#F2F2F2] cursor-pointer\"\n          @click=\"handleRefresh\"\n        >\n          <el-icon color=\"#666666\">\n            <RefreshRight />\n          </el-icon>\n        </div>\n      </div>\n      <div class=\"flex-1\">\n        <div\n          class=\"relative h-full bg-white px-3\"\n          :class=\"[tab.url && isFocus && isChange ? 'shadow' : '']\"\n        >\n          <el-input\n            v-model=\"tab.url\"\n            style=\"\n              --el-border-radius-base: 50px;\n              --el-input-bg-color: #edf2fa;\n              --el-input-border-color: none;\n              --el-input-height: 32px;\n              --el-color-primary: #0b57d0;\n              --el-input-hover-border-color: transparent;\n            \"\n            class=\"url-input\"\n            :disabled=\"!tab.closable\"\n            :placeholder=\"$t('browser.search_placeholder')\"\n            autocomplete=\"false\"\n            @focus=\"handleFocus\"\n            @blur=\"handleBlur\"\n            @input=\"handleChange\"\n            @keydown.enter=\"handleUrl(tab.url)\"\n          >\n            <template #prefix>\n              <div\n                class=\"size-6 rounded-full bg-white ml-1 overflow-hidden\"\n                :style=\"{\n                  'background-image': `url(${\n                    tab.title === $t('browser.newTab')\n                      ? 'https://www.baidu.com/favicon.ico'\n                      : tab.icon\n                  })`,\n                  'background-size': '70%',\n                  'background-repeat': 'no-repeat',\n                  'background-position': 'center'\n                }\"\n                alt=\"\"\n              />\n            </template>\n          </el-input>\n          <div\n            v-if=\"tab.url && isFocus && isChange\"\n            class=\"absolute left-0 right-0 z-10 py-4 bg-white px-3 shadow rounded-b\"\n            @click=\"handlePanelClick\"\n          >\n            <div\n              v-if=\"isUrl(tab.url)\"\n              class=\"h-9 px-4 mb-4 flex items-center gap-3 rounded-full cursor-pointer hover:bg-[#F2F2F2]\"\n              @click.stop=\"handleUrl(tab.url)\"\n            >\n              <img\n                class=\"size-4\"\n                :src=\"\n                  isUrl(tab.url)\n                    ? 'https://chat.53ai.com/images/toolbox/website.png'\n                    : `https://www.baidu.com/favicon.ico`\n                \"\n              />\n              <div class=\"text-sm text-[#1D1E1F] truncate\">{{ tab.url }}</div>\n            </div>\n            <div class=\"text-sm text-[#9A9A9A] px-4 mb-2\">问答搜索</div>\n            <template v-for=\"item in models\" :key=\"item.value\">\n              <div\n                class=\"h-9 px-4 mt-1 flex items-center gap-3 rounded-full cursor-pointer hover:bg-[#F2F2F2]\"\n                @click.stop=\"handleUrl(item.url + tab.url)\"\n              >\n                <img\n                  class=\"size-4\"\n                  :src=\"`https://chat.53ai.com/images/toolbox/${item.value}.png`\"\n                />\n                <div class=\"text-sm text-[#1D1E1F] truncate\">{{ tab.url }}</div>\n              </div>\n            </template>\n            <div class=\"text-sm text-[#9A9A9A] px-4 mt-4 mb-2\">历史记录</div>\n            <template v-for=\"item in historys\" :key=\"item.value\">\n              <div\n                class=\"h-9 px-4 mt-1 flex items-center gap-3 rounded-full cursor-pointer hover:bg-[#F2F2F2]\"\n                @click.stop=\"handleUrl(item.url)\"\n              >\n                <div class=\"size-4\" />\n                <div class=\"text-sm text-[#1D1E1F] truncate\">\n                  {{ item.name }}-<span class=\"text-[#177CDD]\">{{ item.url }}</span>\n                </div>\n              </div>\n            </template>\n          </div>\n        </div>\n      </div>\n      <div\n        v-if=\"\n          settingStore.toolbar_enabled &&\n          tab.closable &&\n          userStore.is_login &&\n          (!parent || (parent && parent.browsers.length === 1))\n        \"\n        class=\"flex items-center gap-1 relative\"\n      >\n        <div\n          class=\"h-8 px-2 rounded-full flex-center gap-1 bg-[#F5F5F5] cursor-pointer hover:bg-[#dbdbdb]\"\n          @click=\"handleReader\"\n        >\n          <svg-icon name=\"clean\"></svg-icon>\n          <span class=\"text-sm text-[#1D1E1F]\">{{ $t('browser.knowledge_clean') }}</span>\n        </div>\n        <template v-for=\"item in settingStore.toolbar_menus.slice(0, 2)\" :key=\"item.value\">\n          <div\n            class=\"h-8 px-2 rounded-full flex-center gap-1 bg-[#F5F5F5] hover:bg-[#dbdbdb]\"\n            :class=\"[\n              tab.loading === 'completed' ? 'cursor-pointer' : 'opacity-50 cursor-not-allowed'\n            ]\"\n            @click=\"handleParseContent()\"\n          >\n            <svg-icon name=\"setting\" size=\"16\"></svg-icon>\n            <span class=\"text-sm text-[#1D1E1F]\">{{ item.name }}</span>\n          </div>\n        </template>\n        <template v-if=\"moreMenus.length\">\n          <el-dropdown trigger=\"click\" @command=\"handleMenuCommand\">\n            <div class=\"size-8 flex-center rounded cursor-pointer hover:bg-[#f0f0f0]\">\n              <el-icon size=\"14\">\n                <MoreFilled />\n              </el-icon>\n            </div>\n            <template #dropdown>\n              <el-dropdown-menu>\n                <template v-for=\"item in moreMenus\" :key=\"item.value\">\n                  <el-dropdown-item :command=\"item.value\" :disabled=\"tab.loading !== 'completed'\">\n                    <svg-icon class=\"mr-2\" name=\"setting\" size=\"16\"></svg-icon>\n                    {{ item.name }}\n                  </el-dropdown-item>\n                </template>\n                <el-dropdown-item divided command=\"setting\">\n                  <svg-icon class=\"mr-2\" name=\"setting\" size=\"16\"></svg-icon>\n                  {{ $t('action.setting') }}\n                </el-dropdown-item>\n              </el-dropdown-menu>\n            </template>\n          </el-dropdown>\n        </template>\n      </div>\n    </div>\n\n    <div class=\"flex-1 flex overflow-hidden\">\n      <div v-loading=\"cleaning\" class=\"flex-1 relative\">\n        <webview\n          v-if=\"tab.defaultUrl\"\n          ref=\"webviewRef\"\n          :src=\"tab.defaultUrl\"\n          style=\"height: 100%\"\n          nodeintegration\n          allowpopups\n          :preload=\"getPreloadPath()\"\n          webpreferences=\"contextIsolation=no\"\n        ></webview>\n\n        <div\n          v-if=\"tab.loading === 'error'\"\n          class=\"absolute inset-0 flex items-center justify-center bg-white\"\n        >\n          <div class=\"text-center\">\n            <el-icon class=\"text-red-500 text-4xl mb-2\">\n              <WarningFilled />\n            </el-icon>\n            <p class=\"text-lg font-semibold text-gray-800\">{{ loadError }}</p>\n            <el-button class=\"mt-4\" type=\"primary\" @click=\"handleRefresh\">{{\n              $t('browser.reload')\n            }}</el-button>\n          </div>\n        </div>\n        <div v-if=\"isReader\" class=\"absolute inset-0 bg-[#F5F5F5]\">\n          <Reader :content=\"contentHtml\"></Reader>\n        </div>\n      </div>\n\n      <div\n        v-if=\"isSider\"\n        v-show=\"showSider\"\n        class=\"flex-none w-[420px] p-5 border-l overflow-hidden relative\"\n      >\n        <div class=\"absolute right-1 top-1 cursor-pointer\" @click.stop=\"showSider = false\">\n          <el-icon>\n            <Close></Close>\n          </el-icon>\n        </div>\n        <div class=\"h-full border rounded overflow-y-auto\"></div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.url-input :deep(.el-input__wrapper) {\n  padding: 2px 4px;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/components/Error.vue",
    "content": ""
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/components/GNBTabs.vue",
    "content": "<template>\n  <Sortable\n    class=\"flex items-center gap-1.5 drag py-1.5 px-2\"\n    identity=\"id\"\n    ref=\"sortableRef\"\n    :props=\"{\n      handle: '.sort-icon',\n      filter: '.filtered',\n      animation: 150,\n      onMove: function (event) {\n        // 获取目标位置的索引\n        const newIndex = '' + event.related.dataset.index\n        // 禁止移动到第一个或最后一个位置\n        if (newIndex === '0' || newIndex === '-1') {\n          return false // 阻止移动\n        }\n        return true // 允许移动\n      }\n    }\"\n    v-model=\"tabsStore.tabs\"\n  >\n    <template #item=\"{ item, index }\">\n      <div\n        class=\"flex-1 h-7 flex items-center gap-2 px-2 rounded-md max-w-50 min-w-[28px] cursor-pointer relative select-none no-drag group\"\n        :data-index=\"index\"\n        :class=\"[\n          activeTabId === item.id\n            ? 'bg-[#FFFFFF] text-[#1D1E1F] rounded-b-none'\n            : 'text-[#182B50] hover:bg-[#CCD0D5]'\n        ]\"\n        @click=\"tabsStore.setActive(item.id)\"\n        :draggable=\"['index', 'setting'].includes(item.id) ? false : true\"\n        @dragstart=\"handleDragStart($event, item)\"\n        @dragend=\"handleDragEnd($event, item)\"\n      >\n        <div class=\"flex items-center gap-2 overflow-hidden flex-grow\">\n          <div\n            class=\"size-4 flex-center overflow-hidden transition-all duration-300\"\n            :class=\"[['index'].includes(item.id) ? 'filtered' : 'sort-icon']\"\n          >\n            <el-icon v-if=\"item.loading === 'loading'\" class=\"animate-spin\" size=\"14\">\n              <Loading />\n            </el-icon>\n            <img v-else-if=\"item.icon\" class=\"size-4\" :src=\"item.icon\" />\n            <svg-icon v-else name=\"tab\" color=\"#666666\"></svg-icon>\n          </div>\n          <div\n            class=\"text-xs text-#182B50 flex-1 truncate overflow-hidden transition-all duration-300\"\n            :class=\"[['index'].includes(item.id) ? 'filtered' : 'sort-icon']\"\n          >\n            {{ item.title }}\n          </div>\n        </div>\n        <div\n          v-if=\"item.closable\"\n          class=\"size-4 flex-center rounded-full hover:bg-[#DDDDDE] shrink-0\"\n          @click.stop=\"tabsStore.closeTab(item.id)\"\n        >\n          ×\n        </div>\n\n        <!-- 左右竖线 -->\n        <div\n          class=\"absolute -left-[4px] top-1.5 w-0.5 h-4 bg-[#CECECE] group-hover:bg-[#F0F0F0] group-hover:z-10\"\n          :class=\"[activeTabId === item.id ? 'bg-[#F0F0F0] z-10' : '']\"\n          v-if=\"index > 0\"\n        ></div>\n        <div\n          class=\"absolute -right-[4px] top-1.5 w-0.5 h-4 bg-[#CECECE] group-hover:bg-[#F0F0F0] group-hover:z-10\"\n          :class=\"[activeTabId === item.id ? 'bg-[#F0F0F0] z-10' : '']\"\n        ></div>\n        <!-- 底部边角 -->\n        <div\n          v-if=\"activeTabId === item.id\"\n          class=\"absolute left-0 right-0 -bottom-1.5 h-1.5 bg-white\"\n        >\n          <div class=\"absolute -left-2 bottom-0 size-2 bg-[#fff] overflow-hidden\">\n            <div class=\"absolute right-0 bottom-0 size-4 bg-[#F0F0F0] rounded-full\"></div>\n          </div>\n          <div class=\"absolute -right-2 bottom-0 size-2 bg-[#fff] overflow-hidden\">\n            <div class=\"absolute left-0 bottom-0 size-4 bg-[#F0F0F0] rounded-full\"></div>\n          </div>\n        </div>\n      </div>\n    </template>\n    <template #footer>\n      <div\n        class=\"flex-none size-7 flex-center cursor-pointer rounded-full hover:bg-[#A8C7FA] no-drag filtered\"\n        data-index=\"-1\"\n        @click=\"handleAddTab\"\n      >\n        <el-icon color=\"#474747\" size=\"14\">\n          <Plus />\n        </el-icon>\n      </div>\n    </template>\n  </Sortable>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { Plus, Loading } from '@element-plus/icons-vue'\nimport Sortable from '@/components/Sortable/index.vue'\n\nimport { useTabsStore } from '../stores/tabs'\nimport { useBrowserSettingStore } from '@/stores/modules/browser-setting.ts'\n\n// 替换原有的响应式变量\nconst tabsStore = useTabsStore()\nconst settingStore = useBrowserSettingStore()\n\nconst sortableRef = ref()\n\nconst activeTabId = computed({\n  get: () => tabsStore.activeId,\n  set: (val) => tabsStore.setActive(val)\n})\n\nconst handleAddTab = () => {\n  tabsStore.addTab({\n    title: window.$t('browser.newTab'),\n    closable: true,\n    url: '',\n    defaultUrl: settingStore.default_tab_url\n  })\n}\n\n// 添加 handleDragStart 函数\nconst handleDragStart = (e: DragEvent, item: Browser.Tab) => {\n  if (e.dataTransfer) {\n    // 设置拖拽数据，这样其他应用或窗口可以接收这些数据\n    e.dataTransfer.setData(\n      'text/plain',\n      JSON.stringify({\n        id: item.id,\n        title: item.title,\n        url: item.url || item.defaultUrl\n      })\n    )\n\n    // 设置允许的效果\n    e.dataTransfer.effectAllowed = 'copy'\n    // // 可选：设置自定义拖动图像\n    // if (item.icon) {\n    //   const img = new Image()\n    //   img.src = item.icon\n    //   e.dataTransfer.setDragImage(img, 10, 10)\n    // }\n  }\n}\nconst handleDragEnd = (e: Event, item: Browser.Tab) => {\n  // 获取窗口尺寸\n  const windowWidth = window.innerWidth\n  const windowHeight = window.innerHeight\n\n  // 获取鼠标位置\n  const mouseX = e.clientX\n  const mouseY = e.clientY\n\n  const sortableElement = sortableRef.value?.$el\n\n  // 判断鼠标是否在窗口外\n  const isOutsideBrowser =\n    mouseX <= 0 || mouseY <= 0 || mouseX >= windowWidth || mouseY >= windowHeight\n\n  const isOutsideSortable = sortableElement\n    ? !sortableElement.contains(document.elementFromPoint(mouseX, mouseY))\n    : false\n  if (isOutsideBrowser || isOutsideSortable) {\n    console.log('元素被拖放到浏览器外部', {\n      item,\n      position: { x: mouseX, y: mouseY }\n    })\n    // new-window\n    window.$chat53ai.$win({\n      type: 'new-window',\n      data: {\n        title: item.title,\n        url: encodeURIComponent(item.url || item.defaultUrl)\n      }\n    })\n\n    tabsStore.closeTab(item.id)\n\n    // 在这里处理元素被拖放到浏览器外的逻辑\n    // 例如：创建新窗口、发送到其他应用等\n\n    // 如果是Electron应用，可以通过IPC发送消息给主进程\n    // if (window.electron) {\n    //   console.log('haha')\n    //   // window.electron.ipcRenderer.send('tab-dragged-outside', {\n    //   //   tabData: {\n    //   //     id: item.id,\n    //   //     title: item.title,\n    //   //     url: item.url || item.defaultUrl\n    //   //   },\n    //   //   position: { x: mouseX, y: mouseY }\n    //   // })\n    // }\n  } else {\n    console.log('元素在浏览器内部拖放完成')\n  }\n}\n\n// 事件监听\n\nonMounted(() => {})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/components/MultiBrowser.vue",
    "content": "<template>\n  <div class=\"h-full flex relative\" ref=\"containerRef\" :class=\"{ 'select-none': isResizing }\">\n    <template v-for=\"(item, index) in tab.browsers\" :key=\"item.id\">\n      <Browser\n        class=\"flex-1\"\n        :style=\"{ flexBasis: item.width ? item.width + '%' : '0%' }\"\n        :parent=\"tab\"\n        :tab=\"item\"\n      />\n      <!-- webview 会导致mousemove无法执行，所以要添加一层遮罩 -->\n      <div class=\"absolute inset-0\" v-if=\"isResizing\"></div>\n      <div\n        v-if=\"index < tab.browsers.length - 1\"\n        class=\"w-1 hover:bg-blue-400 cursor-col-resize relative z-10\"\n        @mousedown=\"handleStartResize($event, index, tab)\"\n      ></div>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport Browser from './Browser.vue'\n\nconst props = withDefaults(\n  defineProps<{\n    tab: Browser.Tab\n  }>(),\n  {\n    tab: () => ({})\n  }\n)\n\nconst containerRef = ref<HTMLElement | null>(null)\n\n// 添加拖拽相关的状态和方法\nconst isResizing = ref(false)\nconst currentResizeIndex = ref(-1)\nconst currentResizeTab = ref(null)\nconst startX = ref(0)\n\nconst handleStartResize = (e: MouseEvent, index: number, tab: any) => {\n  e.preventDefault() // 添加防止默认行为\n\n  isResizing.value = true\n  currentResizeIndex.value = index\n  currentResizeTab.value = tab\n  startX.value = e.clientX\n  document.body.style.cursor = 'col-resize'\n\n  // 添加全局事件监听\n  document.addEventListener('mousemove', handleResize)\n  document.addEventListener('mouseup', stopResize)\n}\n\nconst handleResize = (e: MouseEvent) => {\n  if (!isResizing.value || !currentResizeTab.value) return\n  e.preventDefault() // 添加防止默认行为\n  console.log(e)\n  // 使用 requestAnimationFrame 来优化性能\n\n  const dx = e.clientX - startX.value\n  const container = containerRef.value\n  if (!container) return\n\n  const totalWidth = container.offsetWidth\n  const browsers = currentResizeTab.value.browsers\n\n  // 计算新的宽度百分比\n  const leftBrowser = browsers[currentResizeIndex.value]\n  const rightBrowser = browsers[currentResizeIndex.value + 1]\n\n  const leftWidth = leftBrowser.width || 100 / browsers.length\n  const rightWidth = rightBrowser.width || 100 / browsers.length\n\n  const deltaPercent = (dx / totalWidth) * 100\n\n  // 确保最小宽度为20%\n  const minWidth = 20\n  const newLeftWidth = Math.min(Math.max(leftWidth + deltaPercent, minWidth), 100 - minWidth)\n  const newRightWidth = Math.min(Math.max(rightWidth - deltaPercent, minWidth), 100 - minWidth)\n\n  leftBrowser.width = newLeftWidth\n  rightBrowser.width = newRightWidth\n\n  startX.value = e.clientX\n}\n\nconst stopResize = () => {\n  isResizing.value = false\n  currentResizeIndex.value = -1\n  currentResizeTab.value = null\n  document.body.style.cursor = ''\n\n  // 移除全局事件监听\n  window.removeEventListener('mousemove', handleResize)\n  window.removeEventListener('mouseup', stopResize)\n}\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/components/Reader/html.vue",
    "content": "<template>\n  <div\n    class=\"w-4/5 min-h-full mx-auto bg-white p-5 shadow-lg moz-reader-content\"\n    v-html=\"content\"\n  ></div>\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n  defineProps<{\n    content: string\n  }>(),\n  {\n    content: ''\n  }\n)\n</script>\n\n<style>\n@media print {\n  .moz-reader-content p,\n  .moz-reader-content code,\n  .moz-reader-content pre,\n  .moz-reader-content blockquote,\n  .moz-reader-content ul,\n  .moz-reader-content ol,\n  .moz-reader-content li,\n  .moz-reader-content figure,\n  .moz-reader-content .wp-caption {\n    margin: 0 0 10px !important;\n    padding: 0 !important;\n  }\n}\n\n.moz-reader-content {\n  font-size: 1em;\n\n  --main-background: var(--light-theme-background);\n  --main-foreground: var(--light-theme-foreground);\n  --primary-color: rgb(0 97 224);\n  --toolbar-border: var(--grey-90-a20);\n  --toolbar-transparent-border: transparent;\n  --toolbar-box-shadow: var(--grey-90-a10);\n  --toolbar-button-background: transparent;\n  --toolbar-button-background-hover: rgb(207 207 216 / 66%);\n  --toolbar-button-foreground-hover: var(--icon-fill);\n  --toolbar-button-background-active: rgb(207 207 216);\n  --toolbar-button-foreground-active: var(--primary-color);\n  --toolbar-button-border: transparent;\n  --toolbar-button-border-hover: var(--toolbar-button-border);\n  --toolbar-button-border-active: var(--toolbar-button-border);\n  --tooltip-background: var(--toolbar-button-background-active);\n  --tooltip-foreground: var(--icon-fill);\n  --tooltip-border: transparent;\n  --popup-background: #fff;\n  --popup-border: rgb(0 0 0 / 12%);\n  --opaque-popup-border: rgb(224 224 224);\n  --popup-line: var(--grey-30);\n  --popup-shadow: rgb(49 49 49 / 30%);\n  --popup-button-background: rgb(207 207 216 / 33%);\n  --popup-button-foreground: var(--main-foreground);\n  --popup-button-background-hover: var(--toolbar-button-background-hover);\n  --popup-button-foreground-hover: var(--main-foreground);\n  --popup-button-background-active: var(--toolbar-button-background-active);\n  --popup-button-border: var(--popup-border);\n  --selected-background: rgb(0 97 224 / 30%);\n  --selected-border: var(--primary-color);\n  --outline-focus-color: var(--primary-color);\n  --font-value-background: rgb(240 240 244);\n  --font-value-border: var(--grey-30);\n  --icon-fill: rgb(91 91 102);\n  --icon-disabled-fill: rgb(91 91 102 / 40%);\n  --text-selected-background: var(--selected-background);\n  --text-selected-foreground: inherit;\n  --link-foreground: var(--primary-color);\n  --link-selected-background: var(--selected-background);\n  --link-selected-foreground: #333;\n  --visited-link-foreground: #b5007f;\n}\n\n.moz-reader-content h1,\n.moz-reader-content h2,\n.moz-reader-content h3 {\n  font-weight: bold;\n}\n\n.moz-reader-content h1 {\n  font-size: 1.6em;\n  line-height: 1.25em;\n}\n\n.moz-reader-content h2 {\n  font-size: 1.2em;\n  line-height: 1.51em;\n}\n\n.moz-reader-content h3 {\n  font-size: 1em;\n  line-height: 1.66em;\n}\n\n.moz-reader-content a:link {\n  text-decoration: underline;\n  font-weight: normal;\n}\n\n.moz-reader-content a:link,\n.moz-reader-content a:link:hover,\n.moz-reader-content a:link:active {\n  color: var(--link-foreground);\n}\n\n.moz-reader-content a:visited {\n  color: var(--visited-link-foreground);\n}\n\n.moz-reader-content * {\n  max-width: 100%;\n  height: auto;\n}\n\n.moz-reader-content p,\n.moz-reader-content p,\n.moz-reader-content code,\n.moz-reader-content pre,\n.moz-reader-content blockquote,\n.moz-reader-content ul,\n.moz-reader-content ol,\n.moz-reader-content li,\n.moz-reader-content figure,\n.moz-reader-content .wp-caption {\n  margin: -10px -10px calc(8px + var(--line-height) * 0.4);\n  padding: 10px;\n  border-radius: 5px;\n}\n\n.moz-reader-content li {\n  margin-bottom: 0;\n}\n\n.moz-reader-content li > ul,\n.moz-reader-content li > ol {\n  margin-bottom: -10px;\n}\n\n.moz-reader-content p > img:only-child,\n.moz-reader-content p > a:only-child > img:only-child,\n.moz-reader-content .wp-caption img,\n.moz-reader-content figure img {\n  display: block;\n}\n\n.moz-reader-content img[moz-reader-center] {\n  margin-inline: auto;\n}\n\n/* Align non-centered images with the text. Margins are unset unless the user makes a text alignment selection. */\n\n/* Does not use logical properties because the margins are tied to text alignment and not text direction. */\n.moz-reader-content img:not([moz-reader-center]) {\n  margin-left: var(--block-img-margin-left);\n  margin-right: var(--block-img-margin-right);\n}\n\n.moz-reader-content .caption,\n.moz-reader-content .wp-caption-text .moz-reader-content figcaption {\n  font-size: 0.9em;\n  line-height: 1.48em;\n  font-style: italic;\n}\n\n.moz-reader-content pre {\n  white-space: pre-wrap;\n}\n\n.moz-reader-content blockquote {\n  padding: 0;\n  padding-inline-start: 16px;\n}\n\n.moz-reader-content ul,\n.moz-reader-content ol {\n  padding: 0;\n}\n\n.moz-reader-content ul {\n  padding-inline-start: 30px;\n  list-style: disc;\n}\n\n.moz-reader-content ol {\n  padding-inline-start: 30px;\n}\n\n.moz-reader-content table,\n.moz-reader-content th,\n.moz-reader-content td {\n  border: 1px solid currentcolor;\n  border-collapse: collapse;\n  padding: 6px;\n  vertical-align: top;\n}\n\n.moz-reader-content table {\n  margin: 5px;\n}\n\n/* Visually hide (but don't display: none) screen reader elements */\n.moz-reader-content .visually-hidden,\n.moz-reader-content .visuallyhidden,\n.moz-reader-content .sr-only {\n  display: inline-block;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  border-width: 0;\n}\n\n/* Hide elements with common \"hidden\" class names */\n.moz-reader-content .hidden,\n.moz-reader-content .invisible {\n  display: none;\n}\n\n/* Enforce wordpress and similar emoji/smileys aren't sized to be full-width,\n * see bug 1399616 for context. */\n.moz-reader-content img.wp-smiley,\n.moz-reader-content img.emoji {\n  display: inline-block;\n  border-width: 0;\n\n  /* height: auto is implied from `.moz-reader-content *` rule. */\n  width: 1em;\n  margin: 0 0.07em;\n  padding: 0;\n}\n\n.reader-show-element {\n  display: initial;\n}\n\n/* Provide extra spacing for images that may be aided with accompanying element such as <figcaption> */\n.moz-reader-block-img:not(:last-child) {\n  margin-block-end: 12px;\n}\n\n.moz-reader-wide-table {\n  overflow-x: auto;\n  display: block;\n}\n\n.moz-reader-content pre code {\n  background-color: var(--main-background);\n  border: 1px solid var(--main-foreground);\n  display: block;\n  overflow: auto;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/components/Reader/index.vue",
    "content": "<template>\n  <div class=\"h-full flex flex-col\">\n    <div class=\"flex-none h-16 flex-center bg-white\">\n      <template v-for=\"item in menus\" :key=\"item.value\">\n        <div\n          class=\"h-9 rounded-full flex-center gap-2 px-6 cursor-pointer\"\n          :class=\"[item.value === type ? 'text-[#2563EB] shadow' : 'text-[#4F5052]']\"\n          @click=\"type = item.value\"\n        >\n          <svg-icon name=\"inbox\" size=\"16\"></svg-icon>\n          <span class=\"text-base\">{{ item.label }}</span>\n        </div>\n      </template>\n    </div>\n    <LazyComponent class=\"flex-1 mt-5 overflow-y-auto\" name=\"content\" :value=\"type\">\n      <HtmlRender :content=\"content\" />\n    </LazyComponent>\n    <LazyComponent class=\"flex-1 mt-5 overflow-y-auto\" name=\"knowledge\" :value=\"type\">\n      <MarkdownRender :content=\"content\" type=\"html\" />\n    </LazyComponent>\n    <LazyComponent class=\"flex-1 mt-5 overflow-y-auto\" name=\"summarize\" :value=\"type\">\n      <SummarizeRender :content=\"content\" type=\"html\" />\n    </LazyComponent>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport LazyComponent from '@/components/LazyComponent/index.vue'\nimport HtmlRender from './html.vue'\nimport MarkdownRender from './markdown.vue'\nimport SummarizeRender from './summarize.vue'\n\nconst props = withDefaults(\n  defineProps<{\n    content: string\n  }>(),\n  {\n    content: ''\n  }\n)\nconst menus = ref([\n  {\n    label: window.$t('clean.content'),\n    value: 'content'\n  },\n  {\n    label: window.$t('clean.knowledge'),\n    value: 'knowledge'\n  },\n  {\n    label: window.$t('clean.summarize'),\n    value: 'summarize'\n  }\n])\nconst type = ref('content')\n</script>\n\n\n<style>\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/components/Reader/markdown.vue",
    "content": "<template>\n  <MarkdownEditor v-model=\"markdown\"></MarkdownEditor>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport MarkdownEditor from '@/components/Markdown/editor.vue'\n\nimport TurndownService from 'turndown'\n\nconst props = withDefaults(\n  defineProps<{\n    content: string\n    type?: 'html' | 'markdown'\n  }>(),\n  {\n    content: '',\n    type: 'markdown'\n  }\n)\nconst markdown = ref<string>('')\n\nconst turndownService = new TurndownService({\n  headingStyle: 'atx'\n})\n\nonMounted(() => {\n  markdown.value = props.type === 'html' ? turndownService.turndown(props.content) : props.content\n})\n</script>\n\n<style></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/components/Reader/summarize.vue",
    "content": "<template>\n  <div class=\"w-4/5 min-h-full mx-auto bg-white px-5 shadow-lg\">\n    <div class=\"py-10\">\n      <h3 class=\"mb-9 text-center\">\n        <span class=\"text-2xl font-semibold text-[#1D1E1F]\">知识要点</span>\n        <div class=\"w-[96px] h-3 bg-[#E0EAFF] mx-auto -mt-2\"></div>\n      </h3>\n\n      <ul class=\"space-y-4 text-gray-700\">\n        <li class=\"flex items-start\">\n          <div class=\"flex-shrink-0 mt-1\">\n            <div class=\"w-2 h-2 bg-blue-500 rounded-full\"></div>\n          </div>\n          <p class=\"ml-3\">\n            Manus 上线及效果惊人：Manus 咋晚 10 点上线，效果非常惊人，可通过案例看其实现效果。\n          </p>\n        </li>\n\n        <li class=\"flex items-start\">\n          <div class=\"flex-shrink-0 mt-1\">\n            <div class=\"w-2 h-2 bg-blue-500 rounded-full\"></div>\n          </div>\n          <div class=\"ml-3\">\n            <p class=\"mb-2\">\n              用户需求：用户为自己和未婚妻制定 4 月 15 - 23 日从西雅图出发的日本 7 天行程，预算 2500\n              - 5000\n              美元，热爱历史遗迹、小众景点和日本文化（创造、茶道、美食）。希望参观奈良小鹿并能步行探索城市，计划深挖并需特殊场地推荐，要求提供详细行程安排及简易\n              HTML 版旅行手册，包含地图标注、景点说明、实用日语短语和全程旅行贴士。\n            </p>\n          </div>\n        </li>\n\n        <li class=\"flex items-start\">\n          <div class=\"flex-shrink-0 mt-1\">\n            <div class=\"w-2 h-2 bg-blue-500 rounded-full\"></div>\n          </div>\n          <div class=\"ml-3\">\n            <p class=\"mb-2\">Manus 执行任务的 8 步流程：</p>\n            <ol class=\"list-decimal ml-5 space-y-2\">\n              <li>研究日本旅游基础信息和人境要求，创建 japan_trip 文件夹及 todo.md 文件。</li>\n              <li>创建旅行准备清单，创建 japan_trip/todo.md 文件。</li>\n              <li>\n                研究与旅行者兴趣相匹配的城市和景点，对任务拆解，用多个关键词搜索和信息汇总，遇到\n                CAPTCHA 验证会询问用户，继续收集小众景点、历史遗迹等信息。\n              </li>\n              <li>\n                制定全面的 7 天行程规划，创建日本旅行 / 日本研究.md、编辑日本旅行 /\n                待办事项.md、创建日本旅行 / 7 天行程.md。\n              </li>\n            </ol>\n          </div>\n        </li>\n\n        <li class=\"flex items-start\">\n          <div class=\"flex-shrink-0 mt-1\">\n            <div class=\"w-2 h-2 bg-blue-500 rounded-full\"></div>\n          </div>\n          <p class=\"ml-3\">\n            行程合理性分析：通过谷歌地图分析行程合理性，发现部分行程存在景点过多、距离远、路线规划不合理等问题，但总体来说\n            Manus 的表现还算十分惊人。\n          </p>\n        </li>\n      </ul>\n\n      <div class=\"flex items-center justify-end mt-6 space-x-3\">\n        <div class=\"flex-1 h-px bg-[#E6E8EB]\"></div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <CopyDocument />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.copy') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Refresh />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('chat.regenerate') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Share />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.share') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Star />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.favorite') }}</span>\n        </div>\n        <div class=\"w-px h-3 bg-[#E6E8EB]\"></div>\n        <div class=\"flex items-center text-[#4F5052] cursor-pointer\">\n          <svg-icon size=\"18\" name=\"like\" />\n        </div>\n        <div class=\"flex items-center text-[#4F5052] cursor-pointer\">\n          <svg-icon size=\"18\" name=\"dislike\" />\n        </div>\n      </div>\n    </div>\n\n    <div class=\"py-10\" v-if=\"visibles.includes('1')\">\n      <h3 class=\"mb-9 text-center\">\n        <span class=\"text-2xl font-semibold text-[#1D1E1F]\">Q&A问答</span>\n        <div class=\"w-[96px] h-3 bg-[#E0EAFF] mx-auto -mt-2\"></div>\n      </h3>\n      <div class=\"space-y-6\">\n        <!-- 问答项 1 -->\n        <div class=\"border-b pb-6\">\n          <div class=\"flex items-start mb-3\">\n            <div\n              class=\"flex-none text-base bg-[#EEF3FE] text-[#2563EB] w-12 h-7 rounded flex-center mr-2\"\n            >\n              问题\n            </div>\n            <div class=\"text-base text-[#1D1E1F]\">\n              要上晚班吗? 每天工作几个小时? 每周休息几天? 每月休息几天?\n            </div>\n          </div>\n          <div class=\"flex items-start\">\n            <div\n              class=\"flex-none text-base bg-green-100 text-green-600 w-12 h-7 rounded flex-center mr-2\"\n            >\n              回答\n            </div>\n            <div class=\"text-base text-[#1D1E1F]\">\n              我们有长白班也有两班制，如果你不想上夜班也可以自己选择长白班，每天工作10-12小时，具体看部门安排，长白班加班的时长会多一点，但是也是自由加班的哦，不会强制性的，每工作两个小时可以休息十分钟，中午下午也各有一个小时的吃饭休息时间哦。\n            </div>\n          </div>\n        </div>\n        <div class=\"border-b pb-6\">\n          <div class=\"flex items-start mb-3\">\n            <div\n              class=\"flex-none text-base bg-[#EEF3FE] text-[#2563EB] w-12 h-7 rounded flex-center mr-2\"\n            >\n              问题\n            </div>\n            <div class=\"text-base text-[#1D1E1F]\">\n              要上晚班吗? 每天工作几个小时? 每周休息几天? 每月休息几天?\n            </div>\n          </div>\n          <div class=\"flex items-start\">\n            <div\n              class=\"flex-none text-base bg-green-100 text-green-600 w-12 h-7 rounded flex-center mr-2\"\n            >\n              回答\n            </div>\n            <div class=\"text-base text-[#1D1E1F]\">\n              我们有长白班也有两班制，如果你不想上夜班也可以自己选择长白班，每天工作10-12小时，具体看部门安排，长白班加班的时长会多一点，但是也是自由加班的哦，不会强制性的，每工作两个小时可以休息十分钟，中午下午也各有一个小时的吃饭休息时间哦。\n            </div>\n          </div>\n        </div>\n        <div class=\"\">\n          <div class=\"flex items-start mb-3\">\n            <div\n              class=\"flex-none text-base bg-[#EEF3FE] text-[#2563EB] px-2 py-1 rounded flex-center mr-2\"\n            >\n              问题\n            </div>\n            <div class=\"text-base text-[#1D1E1F]\">\n              要上晚班吗? 每天工作几个小时? 每周休息几天? 每月休息几天?\n            </div>\n          </div>\n          <div class=\"flex items-start\">\n            <div\n              class=\"flex-none bg-green-100 text-green-600 px-2 py-1 rounded text-base flex-center mr-2\"\n            >\n              回答\n            </div>\n            <div class=\"text-base text-[#1D1E1F]\">\n              我们有长白班也有两班制，如果你不想上夜班也可以自己选择长白班，每天工作10-12小时，具体看部门安排，长白班加班的时长会多一点，但是也是自由加班的哦，不会强制性的，每工作两个小时可以休息十分钟，中午下午也各有一个小时的吃饭休息时间哦。\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"flex items-center justify-end mt-6 space-x-3\">\n        <div class=\"flex-1 h-px bg-[#E6E8EB]\"></div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <CopyDocument />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.copy') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Refresh />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('chat.regenerate') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Share />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.share') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Star />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.favorite') }}</span>\n        </div>\n        <div class=\"w-px h-3 bg-[#E6E8EB]\"></div>\n        <div class=\"flex items-center text-[#4F5052] cursor-pointer\">\n          <svg-icon size=\"18\" name=\"like\" />\n        </div>\n        <div class=\"flex items-center text-[#4F5052] cursor-pointer\">\n          <svg-icon size=\"18\" name=\"dislike\" />\n        </div>\n      </div>\n    </div>\n    <div class=\"py-10\" v-if=\"visibles.includes('2')\">\n      <h3 class=\"mb-9 text-center\">\n        <span class=\"text-2xl font-semibold text-[#1D1E1F]\">思维导图</span>\n        <div class=\"w-[96px] h-3 bg-[#E0EAFF] mx-auto -mt-2\"></div>\n      </h3>\n      <MarkMap class=\"h-[664px]\"></MarkMap>\n      <div class=\"flex items-center justify-end mt-6 space-x-3\">\n        <div class=\"flex-1 h-px bg-[#E6E8EB]\"></div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <CopyDocument />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.copy') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Refresh />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('chat.regenerate') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Share />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.share') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Star />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.favorite') }}</span>\n        </div>\n        <div class=\"w-px h-3 bg-[#E6E8EB]\"></div>\n        <div class=\"flex items-center text-[#4F5052] cursor-pointer\">\n          <svg-icon size=\"18\" name=\"like\" />\n        </div>\n        <div class=\"flex items-center text-[#4F5052] cursor-pointer\">\n          <svg-icon size=\"18\" name=\"dislike\" />\n        </div>\n      </div>\n    </div>\n    <div class=\"py-10\" v-if=\"visibles.includes('3')\">\n      <h3 class=\"mb-9 text-center\">\n        <span class=\"text-2xl font-semibold text-[#1D1E1F]\">知识图谱</span>\n        <div class=\"w-[96px] h-3 bg-[#E0EAFF] mx-auto -mt-2\"></div>\n      </h3>\n      <!-- <MarkMap class=\"h-[664px]\"></MarkMap> -->\n      <MarkMapVis class=\"h-[684px]\"></MarkMapVis>\n      <!-- <MarkMapKnowledge class=\"h-[664px]\"></MarkMapKnowledge> -->\n      <div class=\"flex items-center justify-end mt-6 space-x-3\">\n        <div class=\"flex-1 h-px bg-[#E6E8EB]\"></div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <CopyDocument />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.copy') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Refresh />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('chat.regenerate') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Share />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.share') }}</span>\n        </div>\n        <div class=\"flex items-center gap-1.5 text-[#4F5052] px-1 cursor-pointer\">\n          <el-icon>\n            <Star />\n          </el-icon>\n          <span class=\"text-sm\">{{ $t('action.favorite') }}</span>\n        </div>\n        <div class=\"w-px h-3 bg-[#E6E8EB]\"></div>\n        <div class=\"flex items-center text-[#4F5052] cursor-pointer\">\n          <svg-icon size=\"18\" name=\"like\" />\n        </div>\n        <div class=\"flex items-center text-[#4F5052] cursor-pointer\">\n          <svg-icon size=\"18\" name=\"dislike\" />\n        </div>\n      </div>\n    </div>\n\n    <div class=\"h-[122px]\"></div>\n  </div>\n  <div\n    class=\"fixed left-1/2 -translate-x-1/2 bottom-6 h-[78px] px-[60px] bg-[#FFFFFF] rounded-lg flex items-center gap-5 shadow-md\"\n  >\n    <div class=\"text-base text-[#1D1E1F] whitespace-nowrap\">还可以这些操作：</div>\n    <div class=\"w-[134px] h-11 flex-center gap-2.5 border rounded cursor-pointer\">\n      <div class=\"size-6 rounded-full flex-center bg-[#F0F3FA]\">\n        <svg-icon name=\"question\" color=\"#2D6EFA\"></svg-icon>\n      </div>\n      <span class=\"text-base text-[#4F5052]\">Q&A 问答</span>\n    </div>\n    <div class=\"w-[134px] h-11 flex-center gap-2.5 border rounded cursor-pointer\">\n      <div class=\"size-6 rounded-full flex-center bg-[#FFF0F0]\">\n        <svg-icon name=\"sitemap\" color=\"#FF4D4D\"></svg-icon>\n      </div>\n      <span class=\"text-base text-[#4F5052]\">思维导图</span>\n    </div>\n    <div class=\"w-[134px] h-11 flex-center gap-2.5 border rounded cursor-pointer\">\n      <div class=\"size-6 rounded-full flex-center bg-[#F3FBF5]\">\n        <svg-icon name=\"live-photo\" color=\"#35BE57\"></svg-icon>\n      </div>\n      <span class=\"text-base text-[#4F5052]\">知识图谱</span>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { CopyDocument, Refresh, Star, Share } from '@element-plus/icons-vue'\n\nimport MarkMap from '@/components/MarkMap/index.vue'\nimport MarkMapVis from '@/components/MarkMap/vis.vue'\n\nconst visibles = ref(['1', '2', '3'])\n// 总结\n</script>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/index.vue",
    "content": "<template>\n  <div class=\"w-screen h-screen flex flex-col bg-[#F0F0F0]\">\n    <!-- tabs -->\n    <div class=\"h-10 flex items-center gap-3\">\n      <GNBTabs class=\"flex-1 overflow-hidden\" />\n      <el-tooltip effect=\"light\" placement=\"bottom-end\" popper-class=\"!p-0 w-[300px]\">\n        <template #content>\n          <div class=\"flex items-center gap-2 px-4 py-2 mt-2\">\n            <img class=\"flex-none w-10 h-10 rounded-full\" :src=\"avatar\" />\n            <div class=\"flex-1 text-sm text-[#1D1E1F] truncate\">\n              {{ userStore.info.nickname || $t('browser.not_logged_in') }}\n            </div>\n            <el-button v-if=\"!userStore.is_login\" type=\"primary\" @click=\"handleImmeidateLogin(true)\">\n              {{ $t('browser.login') }}\n            </el-button>\n          </div>\n          <div class=\"flex items-center gap-2 px-3 py-2 border-t\">\n            <div class=\"h-8 flex-1 flex items-center gap-3 px-3\">\n              <img src=\"/images/blank.png\" alt=\"\" class=\"w-4 h-4\" />\n              <span class=\"text-[#1D1E1F] text-sm\">{{ $t('browser.window_position') }}</span>\n            </div>\n            <div class=\"flex items-center gap-2\">\n              <div\n                v-tooltip=\"{ content: $t('browser.leftWindow') }\"\n                class=\"size-6 flex-center rounded bg-[#F0EFEF] cursor-pointer\"\n                @click=\"handlePostion('left')\"\n              >\n                <svg-icon name=\"justify-left\"></svg-icon>\n              </div>\n              <div\n                v-tooltip=\"{ content: $t('browser.centerWindow') }\"\n                class=\"size-6 flex-center rounded bg-[#F0EFEF] cursor-pointer\"\n                @click=\"handlePostion('center')\"\n              >\n                <svg-icon name=\"justify-center\"></svg-icon>\n              </div>\n              <div\n                v-tooltip=\"{ content: $t('browser.rightWindow') }\"\n                class=\"size-6 flex-center rounded bg-[#F0EFEF] cursor-pointer\"\n                @click=\"handlePostion('right')\"\n              >\n                <svg-icon name=\"justify-right\"></svg-icon>\n              </div>\n              <div class=\"h-[14px] border-r\"></div>\n              <div\n                v-tooltip=\"{ content: $t('browser.alwaysOnTop') }\"\n                class=\"size-6 flex-center rounded bg-[#F0EFEF] cursor-pointer\"\n                @click=\"handleSetAlwaysOnTop\"\n              >\n                <svg-icon name=\"top\" :color=\"alwaysOnTop ? '#1D1E1F' : '#C4C4C4'\"></svg-icon>\n              </div>\n            </div>\n          </div>\n          <div class=\"flex flex-col gap-2 px-3 py-2 border-t\">\n            <div class=\"h-8 flex items-center gap-3 px-3 rounded cursor-pointer hover:bg-[#F0EFEF]\" @click=\"handleTest\">\n              <div class=\"size-4 flex-center\">\n                <svg-icon size=\"16\" name=\"setting\"></svg-icon>\n              </div>\n              <span class=\"text-[#1D1E1F] text-sm\">{{ '调试' }}</span>\n            </div>\n\n            <div class=\"h-8 flex items-center gap-3 px-3 rounded cursor-pointer hover:bg-[#F0EFEF]\" @click=\"handleSetting\">\n              <div class=\"size-4 flex-center\">\n                <svg-icon size=\"16\" name=\"setting\"></svg-icon>\n              </div>\n              <span class=\"text-[#1D1E1F] text-sm\">{{ $t('action.setting') }}</span>\n            </div>\n            <div v-if=\"userStore.is_login\" class=\"h-8 flex items-center gap-3 px-3 rounded cursor-pointer hover:bg-[#F0EFEF]\" @click=\"handleQuit\">\n              <div class=\"size-4 flex-center\">\n                <svg-icon size=\"14\" name=\"quit\"></svg-icon>\n              </div>\n              <span class=\"text-[#1D1E1F] text-sm\">{{ $t('login.quit') }}</span>\n            </div>\n          </div>\n          <div class=\"flex flex-col gap-2 px-3 py-2 border-t\">\n            <div\n              class=\"h-8 flex items-center gap-3 px-3 rounded cursor-pointer hover:bg-[#F0EFEF]\"\n              @click=\"handleJump('53ai_offical', 'https://www.53ai.com/', { title: '53AI' })\"\n            >\n              <div class=\"size-4 flex-center\">\n                <img src=\"https://www.53ai.com/favicon.ico\" class=\"size-4\" />\n              </div>\n              <span class=\"text-[#1D1E1F] text-sm\">{{ '53AI' }}</span>\n            </div>\n            <div\n              class=\"h-8 flex items-center gap-3 px-3 rounded cursor-pointer hover:bg-[#F0EFEF]\"\n              @click=\"handleJump('53ai_studio', 'http://chatrc.53ai.com/', { title: '53AI Studio' })\"\n            >\n              <div class=\"size-4 flex-center\">\n                <img src=\"https://chat.53ai.com/favicon.ico\" class=\"size-4\" />\n              </div>\n              <span class=\"text-[#1D1E1F] text-sm\">{{ '53AI Studio' }}</span>\n            </div>\n          </div>\n        </template>\n        <div class=\"h-8 flex items-center gap-1 px-2 rounded-full text-[#474747] bg-[#E6E6E6] cursor-pointer nodrag\">\n          <img class=\"size-6 rounded-full\" :src=\"avatar\" alt=\"\" />\n          <svg-icon name=\"down\" size=\"18\"></svg-icon>\n        </div>\n      </el-tooltip>\n\n      <nav class=\"flex no-drag\">\n        <div class=\"size-10 flex-center cursor-pointer text-[#333333] hover:bg-[#C6CCD1]\" @click=\"minimize\">\n          <svg-icon name=\"mini\" size=\"14\"></svg-icon>\n        </div>\n        <div class=\"size-10 flex-center cursor-pointer text-[#333333] hover:bg-[#C6CCD1]\" @click=\"toggleMaximize\">\n          <svg-icon :name=\"isMaximized ? 'zoom-in' : 'zoom-out'\" size=\"14\"></svg-icon>\n        </div>\n        <div class=\"size-10 flex-center cursor-pointer text-[#333333] hover:bg-[#C6CCD1]\" @click=\"close\">\n          <svg-icon name=\"close\" size=\"14\"></svg-icon>\n        </div>\n      </nav>\n    </div>\n\n    <!-- 书签 -->\n    <!-- <BookMarks></BookMarks> -->\n    <!-- 单独的主页，避免tab标签删除后无法正常退出 -->\n    <div v-for=\"tab in tabs\" v-show=\"tab.id === tabsStore.activeId\" :key=\"tab.id\" class=\"flex-1 rounded-t-lg overflow-hidden\">\n      <template v-if=\"!tab.render\"></template>\n      <Browser v-else-if=\"tab.type === 'browser'\" class=\"h-full\" :tab=\"tab\" />\n      <component :is=\"tab.component\" v-else-if=\"tab.type === 'page'\" />\n      <MultiBrowser v-else-if=\"tab.type === 'multibrowser'\" :tab=\"tab\"></MultiBrowser>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, computed, onMounted, h } from 'vue'\nimport GNBTabs from './components/GNBTabs.vue'\nimport Browser from './components/Browser.vue'\nimport MultiBrowser from './components/MultiBrowser.vue'\n\nimport { useLocalUserStore } from './stores/user'\nimport { useTabsStore } from './stores/tabs'\nimport { useUserStore } from '@/stores/modules/user.ts'\nimport { useBrowserSettingStore } from '@/stores/modules/browser-setting.ts'\n\nconst localUserStore = useLocalUserStore()\nconst settingStore = useBrowserSettingStore()\nconst userStore = useUserStore()\n\nconst tabsStore = useTabsStore()\n\nconst isMaximized = ref(false)\nconst alwaysOnTop = ref(false)\nconst notification = ref<any>(null)\nconst percentage = ref(0)\n\nconst avatar = computed(() => {\n  return userStore.info.avatar || window.$chat53ai.getPublicPath('/images/default_avatar.png')\n})\n\n// 为什么要重新拍下序，是因为browser 组件的顺序是根据tabs 中的顺序来的，tabs变动会导致webview丢失报错\nconst tabs = computed(() => {\n  const list = [...tabsStore.tabs]\n  list.sort((itemA, itemB) => (itemA.timestamp > itemB.timestamp ? -1 : 1))\n  return list\n})\n\n// 组合式函数封装通用逻辑\nconst useWindowActions = () => {\n  const minimize = () => window.$chat53ai.$win({ type: 'minimize' })\n  const close = () => window.$chat53ai.$win({ type: 'close' })\n  const toggleMaximize = () => {\n    isMaximized.value = !isMaximized.value\n    window.$chat53ai.$win({ type: isMaximized.value ? 'maximize' : 'restore' })\n  }\n\n  return { minimize, close, toggleMaximize }\n}\nconst { minimize, close, toggleMaximize } = useWindowActions()\n\nconst handlePostion = (position: string) => {\n  window.$chat53ai.$win({ type: 'setPosition', data: { position } })\n}\nconst handleSetAlwaysOnTop = () => {\n  alwaysOnTop.value = !alwaysOnTop.value\n  window.$chat53ai.$win({ type: 'setAlwaysOnTop', data: { alwaysOnTop: alwaysOnTop.value } })\n}\n\nconst handleTest = () => {\n  window.$chat53ai.$win({ type: 'test', data: {} })\n}\nconst handleSetting = () => {\n  tabsStore.activeSetting()\n}\n\nconst handleImmeidateLogin = (isActive = true) => {\n  tabsStore.addTab(\n    {\n      id: 'main',\n      title: '首页',\n      closable: false,\n      ability: false,\n      icon: window.$chat53ai.getPublicPath('/images/home.png'),\n      defaultUrl: tabsStore.MAIN_URL\n    },\n    true\n  )\n\n  if (isActive) {\n    const main = tabsStore.tabs.find((item) => item.id === 'main')\n    if (main && main.webview) {\n      main.webview.send('agenthub:service', { type: 'login' })\n    }\n  }\n}\nconst handleQuit = () => {\n  tabsStore.closeTab('setting')\n  tabsStore.refreshTab('main')\n  tabsStore.updateTab('main', {\n    title: '首页'\n  })\n  userStore.logout()\n  window.$chat53ai.$win({ type: 'clearSession', data: { url: tabsStore.MAIN_URL } })\n}\n\n// 传递配置\nconst subsriceConfig = () => {\n  window.$chat53ai.$win({ type: 'setting', data: JSON.stringify({ ...settingStore.$state }) })\n}\n\nconst showDownloading = () => {\n  notification.value = ElNotification({\n    title: window.$t('updater.downloading'),\n    message: () =>\n      h('div', { class: 'flex flex-col gap-2', percentage }, [\n        h(ElProgress, {\n          percentage: percentage.value,\n          format: (percentage) => `${percentage}%`\n        })\n      ]),\n    duration: 0,\n    showClose: false,\n    position: 'bottom-right',\n    onClose: () => {\n      notification.value = null\n    }\n  })\n}\n\nconst handleJump = (id: string, defaultUrl: string, options = {}) => {\n  tabsStore.addTab({\n    id,\n    title: '',\n    icon: `${defaultUrl}/favicon.ico`,\n    ability: false,\n    closable: true,\n    defaultUrl,\n    ...options\n  })\n}\n\nconst showUpdater = async () => {\n  // 如果正在下载中，不再显示确认框\n  if (notification.value) return\n  percentage.value = 0\n  await ElMessageBox.confirm(window.$t('updater.newVersion'), window.$t('updater.newVersionTitle'))\n  window.$chat53ai.$updater({ type: 'download' })\n}\nconst showDownloaded = async () => {\n  if (notification.value) {\n    notification.value.close()\n    notification.value = null\n    percentage.value = 0\n  }\n  await ElMessageBox.confirm(window.$t('updater.completed'), window.$t('updater.completedTitle'))\n  window.$chat53ai.$updater({ type: 'restart' })\n}\n\nconst initIPCListener = () => {\n  window.$chat53ai.$on('win:service', (_event, { type, data } = {}) => {\n    console.log(type, data, '成功')\n    switch (type) {\n      case 'login':\n        localUserStore.login(JSON.parse(data))\n        subsriceConfig()\n        break\n      case 'agenthub_login':\n        userStore.updateInfo(JSON.parse(data))\n        tabsStore.updateTab('main', {\n          title: '首页'\n        })\n        break\n      case 'agenthub_logout':\n        handleQuit()\n        break\n      case 'setting':\n        settingStore.$patch(JSON.parse(data))\n        break\n      case 'new-window':\n        tabsStore.addTab({\n          url: data.url,\n          defaultUrl: data.url\n        })\n        break\n      case 'new-tab':\n        const tabData = JSON.parse(data)\n\n        if (tabData.urls.length === 1) {\n          tabsStore.addTab({\n            title: tabData.title,\n            type: 'browser',\n            closable: tabData.closable === undefined ? true : tabData.closable,\n            ability: tabData.ability === undefined ? true : tabData.ability,\n            defaultUrl: tabData.urls[0]\n          })\n        } else {\n          const tab = tabsStore.addTab({\n            title: tabData.title,\n            type: 'multibrowser'\n          })\n          tabData.urls.forEach((defaultUrl: string) => {\n            tabsStore.addChildTab(tab.id, {\n              defaultUrl\n            })\n          })\n        }\n        break\n      case 'maximize':\n        isMaximized.value = true\n        break\n      case 'unmaximize':\n        isMaximized.value = false\n        break\n      case 'glider:setting':\n        handleSetting()\n        break\n      case 'glider:forbid':\n        settingStore.glider_enabled = false\n        break\n    }\n  })\n\n  window.$chat53ai.$on('glider:service', (_event, { type, data } = {}) => {\n    console.log(type, data, '成功')\n    switch (type) {\n      case 'login':\n        // userStore.login(JSON.parse(data))\n        // subsriceConfig()\n        break\n    }\n  })\n\n  window.$chat53ai.$on('updater:service', (_event, { type, data } = {}) => {\n    console.log(type, data, '成功')\n    switch (type) {\n      case 'available':\n        showUpdater()\n        break\n      case 'progress':\n        percentage.value = Math.floor(data.percent)\n\n        if (!notification.value) showDownloading()\n        break\n      case 'error':\n        if (notification.value) {\n          notification.value.close()\n          notification.value = null\n        }\n        ElMessage.error(data)\n\n        break\n      case 'downloaded':\n        showDownloaded()\n        break\n    }\n  })\n}\n\n// 监听settingStore 中数据变动，并同步到本地\nwatch(\n  settingStore.$state,\n  (newValue, oldValue) => {\n    console.log('settingStore 发生变化:', newValue, oldValue)\n    subsriceConfig()\n  },\n  { deep: true }\n)\nonMounted(() => {\n  const params = new URLSearchParams(window.location.search)\n  const isMain = params.get('window') === 'main'\n  if (isMain) {\n    handleImmeidateLogin(false)\n  } else {\n    tabsStore.addTab({\n      title: window.$t('browser.newTab'),\n      closable: true,\n      defaultUrl: decodeURIComponent(params.get('url') || '')\n    })\n  }\n\n  initIPCListener()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/stores/tabs.ts",
    "content": "import { defineStore } from 'pinia'\nimport { shallowRef, defineAsyncComponent } from 'vue'\n\nexport const useTabsStore = defineStore('tabs', {\n  state: (): {\n    tabs: Browser.Tab[]\n    activeId: number\n  } => ({\n    tabs: [] as Browser.Tab[],\n    activeId: 0\n  }),\n\n  getters: {\n    activeTab: (state) => state.tabs.find((t) => t.id === state.activeId),\n    // MAIN_URL: () => location.origin + location.pathname\n    MAIN_URL: () => window.location.origin + window.location.pathname\n    // MAIN_URL: () => 'http://ziroom.hub.53ai.com/'\n  },\n  actions: {\n    // addTab(tab: Omit<Browser.Tab, 'id' | 'loading' | 'defaultUrl' | 'type' | 'icon' | 'timestamp'>, isActive = true) {\n    pureAddTab(tab: Partial<Browser.Tab>) {\n      const newTab = {\n        defaultUrl: '',\n        loading: 'none',\n        type: 'browser',\n        id: Math.random() * 1e17,\n        title: '',\n        url: '',\n        closable: true,\n        ability: true,\n        timestamp: Date.now(),\n        icon: window.$chat53ai.getPublicPath('/images/blank.png'),\n        component: tab.type === 'page' ? shallowRef() : '',\n        browsers: tab.type === 'multibrowser' ? [] : '',\n        render: true,\n        webview: null,\n        ...tab\n      }\n      return newTab\n    },\n    addTab(tab: Partial<Browser.Tab>, isActive = true) {\n      const newTab = this.pureAddTab(tab)\n      if (this.tabs.some((t) => t.id === newTab.id)) {\n        this.setActive(newTab.id)\n        return\n      }\n      this.tabs.push(newTab)\n      if (isActive) {\n        this.activeId = newTab.id\n      }\n      return newTab\n    },\n    addChildTab(tabId: number | string, tab: Partial<Browser.Tab>) {\n      const index = this.tabs.findIndex((t) => t.id === tabId)\n      if (index > -1) {\n        this.tabs[index].browsers?.push(this.pureAddTab({ ...tab, width: null }))\n      }\n    },\n    closeTab(tabId: number | string) {\n      this.tabs = this.tabs.filter((t) => t.id !== tabId)\n      if (this.activeId === tabId) {\n        this.activeId = this.tabs[this.tabs.length - 1]?.id || 0\n      }\n    },\n    updateTab(tabId: number | string, updates: Partial<Browser.Tab>) {\n      const index = this.tabs.findIndex((t) => t.id === tabId)\n      if (index > -1) {\n        this.tabs[index] = { ...this.tabs[index], ...updates }\n      }\n    },\n    refreshTab(tabId: number | string) {\n      const tab = this.tabs.find((t) => t.id === tabId)\n      if (tab) {\n        if (tab.webview) {\n          tab.webview.reload()\n        } else {\n          tab.render = false\n          setTimeout(() => {\n            tab.render = true\n          }, 200)\n        }\n      }\n    },\n    updateChildTab(parent: Browser.Tab, tabId: number | string, updates: Partial<Browser.Tab>) {\n      const index = parent.browsers.findIndex((t) => t.id === tabId)\n      if (index > -1) {\n        parent.browsers[index] = { ...parent.browsers[index], ...updates }\n      }\n    },\n    setActive(tabId: number | string) {\n      if (this.tabs.some((t) => t.id === tabId)) {\n        this.activeId = tabId\n      }\n    },\n    activeSetting() {\n      this.addTab(\n        {\n          id: 'setting',\n          title: window.$t('action.setting'),\n          closable: true,\n          ability: false,\n          icon: window.$chat53ai.getPublicPath('/images/setting.png'),\n          type: 'page',\n          component: defineAsyncComponent(() => import('@/views/profile/index.vue'))\n        },\n        true\n      )\n    }\n  }\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/stores/user.ts",
    "content": "import { defineStore } from 'pinia'\n\n\n\nexport const useLocalUserStore = defineStore('user', {\n  state: () => ({\n    isLoggedIn: false,\n    eid: 0,\n    loginkey: '',\n    accesstoken: '',\n    userInfo: {},\n    enteriseinfo: {}\n  }),\n\n  getters: {\n\n  },\n  actions: {\n    login(data) {\n      this.isLoggedIn = true\n      this.eid = data.eid\n      this.loginkey = data.loginkey\n      this.userInfo = data.userInfo\n      this.enteriseinfo = data.enteriseinfo\n      this.accesstoken = data.accesstoken\n    },\n    logout() {\n      this.isLoggedIn = false\n      this.eid = 0\n      this.loginkey = ''\n      this.accesstoken = ''\n      this.userInfo = {}\n      this.enteriseinfo = {}\n    }\n  }\n})\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/tools/index.vue",
    "content": "<script setup lang=\"ts\">\nimport Toolbox from './toolbox.vue'\nimport MainHeader from '@/layout/header.vue'\nimport MFooter from '@/layout/m-footer.vue'\n</script>\n\n<template>\n  <div class=\"h-full bg-white flex flex-col\">\n    <MainHeader sticky>\n      <template #before_suffix>\n        <div class=\"text-base text-primary font-bold line-clamp-1 max-md:flex-1 max-md:text-center\">{{ $t('module.toolbox') }}</div>\n      </template>\n\n      <template #after_prefix>\n        <!-- <span class=\"flex items-center gap-1 text-sm cursor-pointer md:hidden\" @click=\"$router.back()\">\n          <svg-icon name=\"return\" size=\"18\" stroke></svg-icon>\n        </span> -->\n      </template>\n    </MainHeader>\n    <Toolbox></Toolbox>\n    <MFooter />\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/desktop/tools/toolbox.vue",
    "content": "<script setup lang=\"ts\">\nimport { reactive, ref, computed, onMounted } from 'vue'\nimport { CircleCheckFilled } from '@element-plus/icons-vue'\nimport { useScroll } from '@/hooks/useScroll'\nimport Search from '@/components/Search/index.vue'\n\nimport { useLinksStore } from '@/stores/modules/links'\n\nconst linksStore = useLinksStore()\nconst { scrollRef, scrollTo, scrollToTop } = useScroll()\n\nconst props = withDefaults(\n  defineProps<{\n    mode?: 'default' | 'index'\n  }>(),\n  {\n    mode: 'default'\n  }\n)\n\nconst state = reactive({\n  group_id: 0,\n  keyword: ''\n})\n\nconst MAX_AGENT_COUNT = 2\n\nconst loading = ref(false)\nconst isFocus = ref(false)\nconst question = ref('')\nconst models = ref([\n  {\n    name: '百度AI+',\n    value: 'baiduai+',\n    checked: true,\n    url: 'https://chat.baidu.com/search?word=_word_'\n  },\n  {\n    name: '纳米搜索',\n    value: 'n',\n    checked: true,\n    url: 'https://www.n.cn/?q=_word_'\n  },\n  {\n    name: '秘塔',\n    value: 'metaso',\n    checked: false,\n    url: 'https://metaso.cn/?q=_word_'\n  },\n  {\n    name: 'Perplexity',\n    value: 'perplexity',\n    checked: false,\n    url: 'https://perplexity.ai/search?q=_word_'\n  }\n])\nconst quickOptions = [\n  '👨‍💼 上班族预防病自救教程',\n  '🍽️ 日报/周报让你头疼？点击领取模板',\n  '🤔 遇到地震是该跑还是该躲？',\n  '💰 有哪些可以不靠年终奖就能赚钱的门路？',\n  '⚡ 针对时间管理的10大实用技巧',\n  '🎨 自己做自媒体应该如何快速起步？'\n]\n\nconst canSend = computed(() => {\n  return question.value.trim().length > 0 && models.value.some((item) => item.checked)\n})\n\nconst categorys = computed(() => {\n  const categorysList =\n    props.mode === 'index'\n      ? linksStore.categorys.filter((item) => item.group_id == 0)\n      : linksStore.categorys\n  return categorysList.filter((item) => {\n    if (item.group_id === 0 && props.mode !== 'index') return true\n    let list = linksStore.links.filter((item) => item.group_id === item.group_id) || []\n    if (props.mode === 'index') {\n      list = list.slice(0, 8)\n    }\n    return !(!list || list.length === 0)\n  })\n})\n\nconst links = computed(() => {\n  return linksStore.links.filter((item) => {\n    if (state.group_id === 0) return true\n    return item.group_id === state.group_id\n  })\n})\n\nconst handleSelectModel = (item) => {\n  const useModels = models.value.filter((item) => item.checked)\n  if (!item.checked && useModels.length >= MAX_AGENT_COUNT) {\n    ElMessage.warning(window.$t('toolbox.max_agent_count', { count: MAX_AGENT_COUNT }))\n    return\n  }\n\n  item.checked = !item.checked\n}\n\nconst handleSend = async () => {\n  const useModels = models.value.filter((item) => item.checked)\n\n  if (window.$isElectron) {\n    window.$chat53ai.$win({\n      type: 'new-tab',\n      data: JSON.stringify({\n        title: `${window.$t('toolbox.name')}-${question.value}`,\n        urls: useModels.map((item) => {\n          return item.url.replace('_word_', encodeURIComponent(question.value))\n        })\n      })\n    })\n  } else {\n    useModels.forEach((item) => {\n      window.open(item.url.replace('_word_', encodeURIComponent(question.value)))\n    })\n    // const tab = tabsStore.addTab({\n    //   title: 'AI聚合问答-' + question.value,\n    //   type: 'multibrowser'\n    // })\n    // useModels.forEach((item) => {\n    //   tabsStore.addChildTab(tab.id, {\n    //     defaultUrl: item.url.replace('_word_', encodeURIComponent(question.value))\n    //   })\n    // })\n  }\n\n  question.value = ''\n}\n\nconst handleSelect = (e) => {\n  const group_id = e.props.name\n  if (group_id === 0) scrollToTop()\n  else scrollTo(`#toolbox_cate_${group_id}`)\n}\n\nconst handleSearch = () => {\n  const trimmedValue = state.keyword.trim().toLowerCase()\n  linksStore.links.forEach((item) => {\n    item.visible = trimmedValue === '' || item.name.toLowerCase().includes(trimmedValue)\n  })\n}\nconst handleAdd = (item) => {\n  window.open(item.url, '_blank')\n}\n\nonMounted(() => {\n  loading.value = true\n  linksStore.loadCategorys()\n  linksStore.loadLinks().finally(() => {\n    loading.value = false\n  })\n})\n\ndefineExpose({\n  search: (keyword: string) => {\n    state.keyword = keyword\n    handleSearch()\n  }\n})\n</script>\n\n<template>\n  <template\n    v-if=\"mode !== 'index' || !state.keyword || categorys.filter((item) => item.visible).length\"\n  >\n    <div\n      v-if=\"$isElectron && mode !== 'index'\"\n      ref=\"scrollRef\"\n      v-loading=\"loading\"\n      class=\"flex-1 flex flex-col relative overflow-y-auto\"\n    >\n      <div class=\"w-4/6 mx-auto py-8 text-center\">\n        <h2 class=\"text-[40px] font-bold text-black\">{{ $t('toolbox.title') }}</h2>\n        <div\n          class=\"bg-white rounded-lg p-4 mt-9 border\"\n          :class=\"[isFocus ? 'border-[#0672FF]' : '']\"\n        >\n          <el-input\n            v-model=\"question\"\n            type=\"textarea\"\n            :placeholder=\"$t('toolbox.input_placeholder')\"\n            :rows=\"5\"\n            resize=\"none\"\n            style=\"\n              --el-input-text-color: #182b50;\n              --el-input-bg-color: transparent;\n              --el-border-color: none;\n              --el-input-focus-border: none;\n              --el-input-hover-border: none;\n              --el-input-hover-border-color: none;\n              --el-input-focus-border-color: none;\n            \"\n            @focus=\"isFocus = true\"\n            @blur=\"isFocus = false\"\n            @keyup.enter.exact=\"handleSend\"\n            @keyup.shift.enter.exact=\"() => {}\"\n          >\n          </el-input>\n          <div class=\"flex items-center justify-between mt-4\">\n            <div class=\"flex-1 flex items-center gap-3\">\n              <div\n                v-for=\"model in models\"\n                :key=\"model.value\"\n                class=\"h-9 px-2.5 flex-center gap-2 rounded-full border cursor-pointer min-w-[28px]\"\n                :class=\"[\n                  model.checked\n                    ? 'bg-[#EBF3FC] text-black border-[#0672FF]'\n                    : 'text-[#AAA] bg-[#EBF4F7] border-[#EBF4F7]'\n                ]\"\n                @click=\"handleSelectModel(model)\"\n              >\n                <img\n                  class=\"size-[22px] rounded-full\"\n                  :src=\"`https://chat.53ai.com/images/toolbox/${model.value}.png`\"\n                />\n                <div\n                  class=\"flex items-center gap-2 overflow-hidden transition-all duration-300 flex-grow\"\n                >\n                  <span class=\"text-sm truncate\">{{ model.name }}</span>\n                  <el-icon v-if=\"model.checked\" color=\"#0672FF\">\n                    <CircleCheckFilled />\n                  </el-icon>\n                </div>\n              </div>\n            </div>\n            <div class=\"flex-center gap-5\">\n              <div class=\"text-[#182B50] text-opacity-40 text-sm\">{{ question.length }}/300</div>\n              <el-button class=\"w-8 h-8\" type=\"primary\" :disabled=\"!canSend\" @click=\"handleSend\"\n                ><svg-icon name=\"send\" size=\"14\"\n              /></el-button>\n            </div>\n          </div>\n        </div>\n        <div class=\"mt-7 flex flex-wrap gap-3 justify-center\">\n          <el-button\n            v-for=\"(item, index) in quickOptions\"\n            :key=\"index\"\n            class=\"!border-[#D3EAF2] !text-gray-600 !ml-0\"\n            @click=\"question = item\"\n          >\n            {{ item }}\n          </el-button>\n        </div>\n      </div>\n      <div class=\"mt-10 mb-20\"></div>\n      <div class=\"flex items-center justify-between w-5/6 mx-auto\">\n        <el-tabs\n          v-model=\"state.group_id\"\n          class=\"index-tabs flex-1 overflow-hidden\"\n          style=\"--el-tabs-header-height: 36px\"\n          @tab-click=\"handleSelect\"\n        >\n          <el-tab-pane\n            v-for=\"item in categorys\"\n            :key=\"item.group_name\"\n            :label=\"item.group_name\"\n            :name=\"item.group_id\"\n          />\n        </el-tabs>\n        <div>\n          <el-input\n            v-model=\"state.keyword\"\n            style=\"\n              --el-input-inner-height: 36px;\n\n              width: 268px;\n            \"\n            :prefix-icon=\"Search\"\n            :placeholder=\"$t('toolbox.search_placeholder')\"\n            @input=\"handleSearch\"\n          ></el-input>\n        </div>\n      </div>\n\n      <div class=\"w-5/6 mx-auto mt-4\">\n        <template\n          v-for=\"category in categorys?.filter((category) => category.group_id != 0)\"\n          :key=\"category.group_id\"\n        >\n          <div\n            v-show=\"category.visible\"\n            :id=\"`toolbox_cate_${category.group_id}`\"\n            class=\"text-secondary text-sm py-4\"\n          >\n            {{ category.group_name }}\n          </div>\n          <div\n            name=\"list\"\n            tag=\"div\"\n            class=\"grid grid-cols-4 gap-5 mb-4 max-lg:grid-cols-3 max-md:grid-cols-2 max-sm:grid-cols-1\"\n          >\n            <div\n              v-for=\"item in linksStore.appMap[category.group_id]\"\n              v-show=\"item.visible\"\n              :key=\"item.key\"\n              class=\"h-[80px] bg-white rounded px-5 flex items-center gap-2 cursor-pointer border border-[#ECECEC] hover:shadow\"\n              @click=\"handleAdd(item)\"\n            >\n              <ElImage class=\"size-[40px] rounded-full\" fit=\"contain\" lazy :src=\"item.logo\" />\n              <div class=\"flex-1 overflow-hidden\">\n                <div class=\"text-sm text-primary font-semibold truncate\" :title=\"item.name\">\n                  {{ item.name }}\n                </div>\n                <div class=\"mt-1 text-xs truncate text-regular\" :title=\"item.description\">\n                  {{ item.description }}\n                </div>\n              </div>\n            </div>\n          </div>\n        </template>\n      </div>\n    </div>\n    <div\n      v-else\n      v-loading=\"loading\"\n      class=\"flex-1 flex flex-col overflow-y-auto py-6 md:py-8 lg:py-10\"\n    >\n      <div class=\"w-11/12 lg:w-4/5 mx-auto\">\n        <template v-if=\"mode === 'index'\">\n          <template v-if=\"state.keyword\">\n            <p class=\"text-sm md:text-base mt-3 line-clamp-2 text-regular\">\n              {{ $t('module.toolbox') }}\n            </p>\n          </template>\n          <template v-else>\n            <h2\n              class=\"text-xl md:text-2xl font-bold\"\n              style=\"color: var(--el-text-color-primary, #1d1e1f)\"\n            >\n              {{ $t('index.toolbox_recommend') }}\n            </h2>\n            <p class=\"text-sm md:text-base mt-3 line-clamp-2 text-regular\">\n              {{ $t('index.toolbox_recommend_desc') }}\n            </p>\n          </template>\n        </template>\n        <div\n          v-else\n          class=\"flex md:flex-row flex-col-reverse gap-5 items-stretch md:items-center justify-between\"\n        >\n          <el-tabs\n            v-model=\"state.group_id\"\n            class=\"index-tabs flex-1 overflow-hidden\"\n            style=\"--el-tabs-header-height: 36px\"\n            @tab-click=\"handleSelect\"\n          >\n            <el-tab-pane\n              v-for=\"item in categorys\"\n              :key=\"item.group_name\"\n              :label=\"item.group_name\"\n              :name=\"item.group_id\"\n            />\n          </el-tabs>\n          <div>\n            <Search\n              v-model=\"state.keyword\"\n              :placeholder=\"$t('action.search') + $t('module.prompt')\"\n              @input=\"handleSearch\"\n            />\n            <!-- <el-input v-model=\"state.keyword\" size=\"large\" class=\"w-full md:w-[240px] el-input--main\"\n              :prefix-icon=\"Search\" :placeholder=\"$t('toolbox.search_placeholder')\" @input=\"handleSearch\"></el-input> -->\n          </div>\n        </div>\n\n        <div>\n          <div\n            name=\"list\"\n            tag=\"div\"\n            class=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-5 mt-6 md:mt-10\"\n            :class=\"[mode === 'index' ? 'mt-7' : '']\"\n          >\n            <div\n              v-if=\"!links.filter((item) => item.visible).length\"\n              class=\"col-span-full flex flex-col items-center justify-center\"\n            >\n              <el-empty\n                :description=\"$t('common.no_data')\"\n                :image=\"$getPublicPath('/images/chat/completion_empty.png')\"\n              />\n            </div>\n            <div\n              v-for=\"item in links\"\n              v-show=\"item.visible\"\n              :key=\"item.id\"\n              class=\"min-h-[80px] bg-white rounded px-5 py-4 flex items-center gap-2 cursor-pointer border border-[#ECECEC] hover:shadow\"\n              @click=\"handleAdd(item)\"\n            >\n              <ElImage class=\"size-[50px] rounded-full\" fit=\"contain\" lazy :src=\"item.logo\" />\n              <div class=\"flex-1 overflow-hidden\">\n                <div\n                  class=\"text-base font-medium text-primary mb-1 mt-1 line-clamp-1\"\n                  :title=\"item.name\"\n                  v-html=\"\n                    item.name.replace(\n                      state.keyword,\n                      `<span class='text-theme'>${state.keyword}</span>`\n                    )\n                  \"\n                />\n                <div\n                  class=\"text-sm text-regular text-opacity-60 line-clamp-2\"\n                  :title=\"item.description\"\n                >\n                  {{ item.description }}\n                </div>\n              </div>\n            </div>\n          </div>\n          <router-link\n            v-if=\"mode === 'index' && !state.keyword\"\n            class=\"block w-[240px] h-[40px] leading-[40px] border border-primary box-border text-center text-theme mt-[54px] rounded-[24px] mx-auto hover-bg-primary-light-9 transition-all duration-300\"\n            :to=\"{ path: '/index/toolbox' }\"\n          >\n            {{ $t('action.view_more') }}\n          </router-link>\n        </div>\n      </div>\n    </div>\n  </template>\n</template>\n\n<style scoped>\n.tabs :deep(.el-tabs__header) {\n  margin: 0;\n}\n\n.tabs :deep(.el-tabs__nav-wrap) {\n  margin-bottom: 0;\n}\n\n.tabs :deep(.el-tabs__nav-wrap::after) {\n  display: none;\n}\n\n.tabs :deep(.el-tabs__nav) {\n  gap: 10px;\n}\n\n.tabs :deep(.el-tabs__item) {\n  font-size: 16px;\n\n  /* color: #000000; */\n  text-align: center;\n  padding: 0 16px !important;\n\n  /* background-color: #fff; */\n  border: 1px solid #ebf1f2;\n}\n\n.tabs :deep(.el-tabs__item.is-active) {\n  color: #fff;\n  background-color: var(--el-color-primary);\n  border-color: var(--el-color-primary);\n}\n\n.tabs :deep(.el-tabs__active-bar) {\n  display: none;\n}\n\n.tabs :deep(.el-tabs__nav-next),\n.tabs :deep(.el-tabs__nav-prev) {\n  line-height: 36px;\n}\n\n.list-enter-active,\n.list-leave-active {\n  transition: all 0.3s ease;\n}\n\n.list-enter-from,\n.list-leave-to {\n  opacity: 0;\n  transform: translateY(30px);\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/discover/index.vue",
    "content": "<template>\n  发现\n</template>\n\n<script setup lang=\"ts\">\n\n</script>\n\n<style scoped></style>\n\n<style></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/index/agent/chat.vue",
    "content": "<template>\n  <!-- <section class=\"h-full overflow-hidden flex flex-col w-11/12 lg:w-4/5 pt-6 px-4 mx-auto box-border\"> -->\n  <section class=\"h-full overflow-hidden flex flex-col pt-6\">\n    <div class=\"relative flex-none flex items-center gap-4 px-4 w-11/12 mx-auto lg:w-4/5 mb-5\">\n      <ElBreadcrumb class=\"flex-1 w-0\" :separator-icon=\"ArrowRight\">\n        <ElBreadcrumbItem v-if=\"navigationStore.homeNavigation.menu_path\" :to=\"navigationStore.homeNavigation.menu_path\" replace>\n          <span class=\"text-regular leading-6 font-normal hover-text-theme\">\n            {{ navigationStore.homeNavigation.name }}\n          </span>\n        </ElBreadcrumbItem>\n        <ElBreadcrumbItem v-if=\"navigationStore.agentNavigation.menu_path\" :to=\"navigationStore.agentNavigation.menu_path\" replace>\n          <span class=\"text-regular leading-6 font-normal hover-text-theme\">\n            {{ navigationStore.agentNavigation.name }}\n          </span>\n        </ElBreadcrumbItem>\n        <ElBreadcrumbItem>\n          <span class=\"text-primary leading-6 inline-block truncate max-w-[10em] md:max-w-[30rem]\" :title=\"detailData.name\">\n            {{ detailData.name }}\n          </span>\n        </ElBreadcrumbItem>\n      </ElBreadcrumb>\n      <ElButton v-if=\"currentAgent?.custom_config_obj?.agent_mode !== 'completion'\" link @click=\"agentDetailRef?.showShare()\">\n        <SvgIcon class=\"mr-1\" name=\"share-two\" size=\"18\" color=\"#4F5052\" stroke />\n        {{ $t('action.share') }}\n      </ElButton>\n      <ElButton link class=\"!ml-0\" @click=\"agentDetailRef?.showUseCase()\">\n        <SvgIcon class=\"mr-1\" name=\"layout-split\" size=\"18\" />\n        {{ $t('chat.usage_guide') }}\n      </ElButton>\n    </div>\n    <div ref=\"boxRef\" class=\"flex-1 px-4 overflow-y-auto\">\n      <div class=\"w-11/12 lg:w-4/5 mx-auto flex-1 h-full\">\n        <AgentDetailView ref=\"agentDetailRef\" hide-menu-header hide-footer show-recommend use-case-fixed show-history />\n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@element-plus/icons-vue'\n\nimport { onMounted, ref, computed, watch } from 'vue'\n\nimport SvgIcon from '@/components/SvgIcon.vue'\nimport AgentDetailView from '@/views/chat/index.vue'\n\nimport { useAgentStore } from '@/stores/modules/agent'\nimport { useNavigationStore } from '@/stores/modules/navigation'\nimport { useConversationStore } from '@/stores/modules/conversation'\n\nconst agentStore = useAgentStore()\nconst navigationStore = useNavigationStore()\nconst convStore = useConversationStore()\n\nconst agentDetailRef = ref<InstanceType<typeof AgentDetailView>>()\nconst boxRef = ref(null)\n\nconst currentAgent = computed(() => convStore.currentAgent)\nconst detailData = computed(() => {\n  return agentDetailRef.value?.detailData || { name: '' }\n})\n\nwatch(\n  () => agentStore.boxHeight,\n  (newData) => {\n    if (newData) {\n      boxRef.value.scrollTop = newData\n    }\n  }\n)\n\nonMounted(() => {\n  // navigationStore.fetchNavigations()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/index/agent/index.vue",
    "content": "<template>\n  <AgentView hide-header hide-footer />\n</template>\n\n<script setup lang=\"ts\">\nimport AgentView from '@/views/agent/index.vue'\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/index/index.vue",
    "content": "<template>\n  <div class=\"relative w-full overflow-hidden\">\n    <div\n      class=\"absolute top-0 left-1/2 -translate-x-1/2 w-[1920px] h-[700px] !max-w-none z-1\"\n      :style=\"{\n        backgroundImage: `url(${$getPublicPath('/images/index/card_bg_v2.png')})`,\n        backgroundSize: '1920px 700px',\n        backgroundPosition: 'center -68px',\n        backgroundRepeat: 'no-repeat'\n      }\"\n    />\n    <div class=\"relative z-2 w-full mt-[110px]\">\n      <h1\n        class=\"mx-auto text-center text-[60px] font-bold\"\n        v-html=\"$t('index.banner_title', { name: `<span class='text-[#007AFF]'>AI</span>` })\"\n      ></h1>\n      <p class=\"mx-auto text-center text-xl text-[#5E6881] mt-6\">{{ $t('index.banner_desc') }}</p>\n      <ElInput\n        v-model=\"searchValue\"\n        :clearable=\"false\"\n        class=\"search-input relative left-1/2 -translate-x-1/2 max-w-[980px] w-[52%] h-[54px] mt-[76px]\"\n        style=\"--el-input-border-color: transparent\"\n        placeholder=\"输入您想查找的AI资源\"\n        @input=\"handleSearch\"\n      >\n        <template #prefix>\n          <ElIcon class=\"text-[#939499]\">\n            <Search />\n          </ElIcon>\n        </template>\n        <template #suffix>\n          <ElButton type=\"primary\" size=\"large\" class=\"h-[36px] w-[94px] rounded-[32px]\" @click=\"handleSearch\">\n            {{ $t('action.search') }}\n          </ElButton>\n        </template>\n      </ElInput>\n      <div class=\"mx-auto text-center text-base text-[#757880] mt-[42px] flex items-center justify-center gap-3\">\n        <span>{{ $t('index.hot_search') }}:</span>\n        <div class=\"hover-text-theme cursor-pointer\" @click=\"handleHotSearch('网页抓取')\">网页抓取</div>\n        <div class=\"hover-text-theme cursor-pointer\" @click=\"handleHotSearch('文件操作')\">文件操作</div>\n        <div class=\"hover-text-theme cursor-pointer\" @click=\"handleHotSearch('邮件发送')\">邮件发送</div>\n        <div class=\"hover-text-theme cursor-pointer\" @click=\"handleHotSearch('图片处理')\">图片处理</div>\n        <div class=\"hover-text-theme cursor-pointer\" @click=\"handleHotSearch('浏览器自动化')\">浏览器自动化</div>\n      </div>\n      <!-- 智能体 -->\n      <div v-if=\"searchValue ? showAgentList.length > 0 : true\" class=\"w-11/12 lg:w-4/5 py-6 md:py-8 lg:py-10 mx-auto box-border\">\n        <p v-if=\"searchValue\" class=\"text-sm md:text-base mt-3 line-clamp-2 text-regular\">\n          {{ $t('module.agent') }}\n        </p>\n        <template v-else>\n          <h2 class=\"text-xl md:text-2xl font-bold\" style=\"color: var(--el-text-color-primary, #1d1e1f)\">\n            {{ $t('index.agent_recommend') }}\n          </h2>\n          <p class=\"text-sm md:text-base mt-3 line-clamp-2 text-regular\">\n            {{ $t('index.agent_recommend_desc') }}\n          </p>\n        </template>\n\n        <!-- 功能卡片网格 -->\n        <AgentList class=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-5 mt-5 md:mt-8\" :list=\"showAgentList\"></AgentList>\n\n        <router-link\n          v-if=\"!searchValue && showAgentList.length > 0\"\n          class=\"block w-[240px] h-[40px] leading-[40px] border border-primary box-border text-center text-theme mt-[54px] rounded-[24px] mx-auto hover-bg-primary-light-9 transition-all duration-300\"\n          :to=\"{ path: '/index/agent' }\"\n        >\n          {{ $t('action.view_more') }}\n        </router-link>\n      </div>\n\n      <div\n        class=\"w-full py-6 md:py-8 lg:py-10 mx-auto box-border\"\n        :style=\"{\n          backgroundImage: !searchValue ? `url(${$getPublicPath('/images/index/card_bg_v3.png')})` : '',\n          backgroundPosition: 'center center',\n          backgroundRepeat: 'no-repeat'\n        }\"\n      >\n        <PromptView ref=\"promptRef\" mode=\"index\" hide-filter :show-limit=\"6\" />\n      </div>\n      <!-- 工具箱 -->\n      <div v-if=\"searchValue ? showToolkitList.length > 0 : true\" class=\"w-11/12 lg:w-4/5 py-6 md:py-8 lg:py-10 mx-auto box-border\">\n        <p v-if=\"searchValue\" class=\"text-sm md:text-base mt-3 line-clamp-2 text-regular\">\n          {{ $t('module.toolbox') }}\n        </p>\n        <template v-else>\n          <h2 class=\"text-xl md:text-2xl font-bold\" style=\"color: var(--el-text-color-primary, #1d1e1f)\">\n            {{ $t('index.toolbox_recommend') }}\n          </h2>\n          <p class=\"text-sm md:text-base mt-3 line-clamp-2 text-regular\">\n            {{ $t('index.toolbox_recommend_desc') }}\n          </p>\n        </template>\n        <ToolkitList class=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-5 mt-7\" :list=\"showToolkitList\" only-all />\n\n        <router-link\n          v-if=\"!searchValue && showToolkitList.length > 0\"\n          class=\"block w-[240px] h-[40px] leading-[40px] border border-primary box-border text-center text-theme mt-[54px] rounded-[24px] mx-auto hover-bg-primary-light-9 transition-all duration-300\"\n          :to=\"{ name: 'HomeToolkit' }\"\n        >\n          {{ $t('action.view_more') }}\n        </router-link>\n      </div>\n      <div class=\"w-full h-[100px]\" />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, computed, ref } from 'vue'\nimport { Search } from '@element-plus/icons-vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport AgentList from '../agent/components/list.vue'\nimport ToolkitList from '../toolkit/components/list.vue'\nimport PromptView from '@/views/prompt/view.vue'\n\nimport { useLinksStore } from '@/stores/modules/links'\nimport { useAgentStore } from '@/stores/modules/agent'\nimport { useUserStore } from '@/stores/modules/user'\n\nconst route = useRoute()\nconst router = useRouter()\nconst linksStore = useLinksStore()\nconst agentStore = useAgentStore()\nconst userStore = useUserStore()\nconst promptRef = ref<InstanceType<typeof PromptView>>()\nconst searchValue = ref('')\n\nconst hasPermission = (userGroupIds: number[], itemGroupIds: number[]) => {\n  if (!itemGroupIds || itemGroupIds.length === 0) return false\n  return userGroupIds.some((groupId) => itemGroupIds.includes(groupId))\n}\n\nconst showAgentList = computed(() => {\n  const filterList = agentStore.agentList.filter((item) => item.user_group_ids.length > 0)\n  if (searchValue.value) {\n    return filterList.filter((item) => item.name.includes(searchValue.value))\n  }\n  return filterList.slice(0, 6)\n})\n\nconst showToolkitList = computed(() => {\n  const filterList = linksStore.links.filter(\n    (item) => item.user_group_ids.length > 0 && hasPermission(userStore.info.group_ids || [], item.user_group_ids || [])\n  )\n  if (searchValue.value) {\n    return filterList.filter((item) => item.name.includes(searchValue.value))\n  }\n  return filterList.slice(0, 6)\n})\n\nconst handleHotSearch = (keyword: string) => {\n  searchValue.value = keyword\n  handleSearch()\n}\n\nconst handleSearch = () => {\n  promptRef.value?.search(searchValue.value)\n}\n\nonMounted(() => {\n  linksStore.loadCategorys()\n  linksStore.loadLinks()\n  agentStore.loadAgentList()\n})\n</script>\n\n<style scoped>\n.search-input {\n  /* background: rgba(255, 255, 255, 1); */\n  background: transparent;\n  box-shadow: 0 4px 12px rgb(90 188 230 / 12%);\n}\n\n.search-input::after {\n  content: '';\n  display: block;\n  width: calc(100% + 6px);\n  height: calc(100% + 6px);\n  background: linear-gradient(90deg, rgb(125 232 220 / 100%) 0%, rgb(102 150 255 / 100%) 100%);\n  position: absolute;\n  z-index: -1;\n  top: -3px;\n  left: -3px;\n  border-radius: 32px;\n}\n\n::v-deep(.search-input .el-input__wrapper) {\n  box-shadow: none;\n  border-radius: 32px;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/index/layout.vue",
    "content": "<template>\n  <div ref=\"scrollRef\" class=\"relative h-full flex flex-col overflow-y-auto overflow-x-hidden\">\n    <MainHeader type=\"homepage\" :need-login=\"false\" :sider-button=\"false\" :back=\"false\" sticky :main-class=\"['w-11/12 lg:w-4/5']\">\n      <template #before_suffix>\n        <a href=\"/\" class=\"flex flex-none items-center gap-2 overflow-hidden\">\n          <img :alt=\"enterpriseStore.display_name\" :title=\"enterpriseStore.display_name\" class=\"min-w-11 h-11 rounded\" :src=\"enterpriseStore.logo\" />\n          <span class=\"min-w-0 flex-1 text-2xl font-semibold nav-text truncate max-w-50 sm:max-w-72 md:max-w-96\">\n            {{ enterpriseStore.display_name }}\n          </span>\n        </a>\n        <div class=\"flex-1 w-0 menu overflow-hidden\">\n          <ElSkeleton :loading=\"navigationStore.loading && false\" animated>\n            <template #template>\n              <ElSkeletonItem v-for=\"i in 4\" :key=\"i\" variant=\"text\" class=\"ml-4 mt-2 !w-[82px] !h-[42px]\" />\n            </template>\n            <template #default>\n              <ElMenu router mode=\"horizontal\" :default-active=\"activeMenuItem\">\n                <ElMenuItem\n                  v-for=\"item in navigationStore.navigations\"\n                  :key=\"item.navigation_id\"\n                  class=\"relative !cursor-pointer !opacity-100 hover-text-theme-important\"\n                  :index=\"item.menu_path\"\n                  :disabled=\"item.target === NAVIGATION_TARGET.BLANK || item.type === NAVIGATION_TYPE.EXTERNAL\"\n                >\n                  {{ item.name }}\n                  <div\n                    v-if=\"item.target === NAVIGATION_TARGET.BLANK || item.type === NAVIGATION_TYPE.EXTERNAL\"\n                    class=\"absolute top-0 left-0 w-full h-full bg-transparent z-[10]\"\n                    @click=\"handleNavigationClick(item)\"\n                  />\n                </ElMenuItem>\n              </ElMenu>\n            </template>\n          </ElSkeleton>\n        </div>\n      </template>\n    </MainHeader>\n    <div\n      v-if=\"\n        !['Index', 'HomeIndex', 'HomePromptDetail', 'HomeAgentDetail', 'HomeChat'].includes(route.name) &&\n        enterpriseStore.banner_info.url_list &&\n        !!enterpriseStore.banner_info.url_list.length\n      \"\n      class=\"w-full flex-none\"\n    >\n      <ElCarousel\n        class=\"!w-full\"\n        :arrow=\"enterpriseStore.banner_info.url_list.length > 1 ? 'always' : 'never'\"\n        :indicator-position=\"enterpriseStore.banner_info.url_list.length > 1 ? 'outside' : 'none'\"\n        :interval=\"enterpriseStore.banner_info.interval ? parseInt(enterpriseStore.banner_info.interval * 1000) : 5000\"\n      >\n        <ElCarouselItem v-for=\"url in enterpriseStore.banner_info.url_list || []\" :key=\"url\" class=\"w-full !flex items-center justify-center\">\n          <img :src=\"url\" class=\"object-cover max-w-full max-h-full\" />\n        </ElCarouselItem>\n      </ElCarousel>\n    </div>\n    <div class=\"flex-1\" :class=\"{ 'overflow-hidden': ['HomeChat'].includes(route.name) }\">\n      <RouterView v-slot=\"{ Component, route }\" v-loading=\"is_redirect\">\n        <component :is=\"Component\" :key=\"route.path\" />\n      </RouterView>\n    </div>\n    <!-- 底部布局 -->\n    <mFooter />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted, ref, watch, provide } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport MainHeader from '@/layout/header.vue'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\nimport { useNavigationStore } from '@/stores/modules/navigation'\nimport { NAVIGATION_TYPE, NAVIGATION_TARGET } from '@/constants/navigation'\nimport mFooter from '@/layout/m-footer.vue'\n\n// const mainRef = inject<Ref<HTMLElement>>('mainRef')\n\nconst enterpriseStore = useEnterpriseStore()\nconst navigationStore = useNavigationStore()\nconst route = useRoute()\nconst router = useRouter()\n\nconst activeMenuItem = ref()\n\nconst scrollRef = ref<HTMLElement>()\nprovide('mainScrollRef', scrollRef)\n\n// const fetchNavigationData = async () => {\n//   await navigationStore.fetchNavigations()\n//   const customNavigations = navigationStore.navigations.filter((item) => item.type === NAVIGATION_TYPE.CUSTOM)\n//   const indexRoute = router.getRoutes().find((item) => item.name === 'Index')\n//   customNavigations.forEach((item) => {\n//     if (indexRoute) {\n//       indexRoute.children.push({\n//         path: item.menu_path,\n//         name: `Home${item.name}`,\n//         component: () => import(`@/views/custom/index.vue`)\n//       })\n//     }\n//   })\n//   router.addRoute(indexRoute)\n// }\nconst handleNavigationClick = (data: any) => {\n  if (data.type === NAVIGATION_TYPE.EXTERNAL) {\n    if (data.target === NAVIGATION_TARGET.BLANK) {\n      window.open(data.url, '_blank')\n    } else {\n      window.location.href = data.url\n    }\n  } else if (data.target === NAVIGATION_TARGET.BLANK) {\n    window.open(data.url, '_blank')\n  }\n}\nconst is_redirect = ref(false)\nconst handleRedirect = async () => {\n  const from_home = route.query.from_home as string\n  let redirect = route.query.redirect as string\n  // await fetchNavigationData()\n  if (navigationStore.navigations.length) {\n    if (+from_home || redirect) {\n      is_redirect.value = true\n      await nextTick()\n      if (+from_home && !redirect) {\n        const defaultNavigation = navigationStore.navigations.filter((item) => item.type !== NAVIGATION_TYPE.EXTERNAL)[0]\n        if (defaultNavigation && defaultNavigation.menu_path !== route.path) redirect = defaultNavigation.menu_path\n        else redirect = '/index'\n      }\n      if (redirect) await router.replace({ path: redirect as string })\n      is_redirect.value = false\n    }\n  }\n}\nconst setMeta = ({ key = '', value = '' }) => {\n  const meta = document.querySelector(`meta[name=\"${key}\"]`)\n  if (meta) {\n    meta.setAttribute('content', value)\n  } else {\n    const meta = document.createElement('meta')\n    meta.setAttribute('name', key)\n    meta.setAttribute('content', value)\n    document.head.appendChild(meta)\n  }\n}\n\nonMounted(async () => {\n  // mainRef.value?.scrollTo(0, 0)\n  // handleRedirect()\n})\n\nrouter.beforeEach(() => {\n  if (scrollRef.value) {\n    scrollRef.value.scrollTo({\n      top: 0,\n      behavior: 'smooth'\n    })\n  }\n})\n\nwatch(\n  () => route.query,\n  () => {\n    handleRedirect()\n  },\n  {\n    immediate: true,\n    deep: true\n  }\n)\nwatch(\n  () => route.path,\n  (path) => {\n    const currentNavigation = navigationStore.navigations.find((item) => item.menu_path === path) || {}\n    const config = currentNavigation.config || {}\n    if (config.seo_title) setMeta({ key: 'title', value: config.seo_title })\n    if (config.seo_keywords) setMeta({ key: 'keywords', value: config.seo_keywords })\n    if (config.seo_description) setMeta({ key: 'description', value: config.seo_description })\n\n    // const priorityPaths = ['/chat', '/agent', '/prompt', '/toolkit', '/index']\n    // const matchedPath = priorityPaths.find((item) => path.includes(item))\n    // const targetMenu = matchedPath ? navigationStore.navigations.find((item) => item.menu_path.includes(matchedPath)) : null\n    // activeMenuItem.value = targetMenu?.menu_path || ''\n    activeMenuItem.value = route.path || ''\n  },\n  {\n    immediate: true\n  }\n)\n</script>\n\n<style scoped>\n.router-link-active {\n  @apply ring-2 ring-blue-500;\n}\n\n::v-deep(.el-menu) {\n  background-color: transparent;\n  border-bottom: none;\n}\n\n::v-deep(.el-menu-item),\n::v-deep(.el-menu-item.is-active) {\n  background-color: transparent !important;\n  border-bottom: none;\n}\n\n::v-deep(.el-carousel__container) {\n  height: 380px;\n}\n\n@media (width <= 768px) {\n  ::v-deep(.el-carousel__container) {\n    height: 300px;\n  }\n}\n\n@media (width <= 1024px) {\n  ::v-deep(.el-carousel__container) {\n    height: 385px;\n  }\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/index/prompt/detail.vue",
    "content": "<script setup lang=\"ts\">\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue'\nimport PromptDetailView from '@/views/prompt/detail/index.vue'\n\nimport { onMounted, ref, computed, watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useNavigationStore } from '@/stores/modules/navigation'\nimport SvgIcon from '@/components/SvgIcon.vue'\n\nconst locationHref = window.location.href\nconst route = useRoute()\nconst router = useRouter()\nconst navigationStore = useNavigationStore()\n\nconst promptDetailRef = ref<InstanceType<typeof PromptDetailView>>()\n\nconst detailData = computed(() => {\n  return promptDetailRef.value?.detailData || {}\n})\n\nonMounted(() => {\n  // navigationStore.fetchNavigations()\n})\n</script>\n\n<template>\n  <div class=\"h-full flex flex-col\">\n    <section class=\"w-11/12 lg:w-4/5 py-6 px-4 mx-auto box-border\">\n      <div class=\"relative w-full flex items-center gap-4 box-border\">\n        <ElBreadcrumb class=\"flex-1 w-0\" :separatorIcon=\"ArrowRight\">\n          <ElBreadcrumbItem v-if=\"navigationStore.homeNavigation.menu_path\" :to=\"navigationStore.homeNavigation.menu_path\" replace>\n            <span class=\"text-regular font-normal hover-text-theme\">\n              {{ navigationStore.homeNavigation.name }}\n            </span>\n          </ElBreadcrumbItem>\n          <ElBreadcrumbItem v-if=\"navigationStore.promptNavigation.menu_path\" :to=\"navigationStore.promptNavigation.menu_path\" replace>\n            <span class=\"text-regular font-normal hover-text-theme\">\n              {{ navigationStore.promptNavigation.name }}\n            </span>\n          </ElBreadcrumbItem>\n          <ElBreadcrumbItem>\n            <span class=\"text-primary inline-block truncate max-w-[10em] md:max-w-[30rem]\" :title=\"detailData.name\">\n              {{ detailData.name }}\n            </span>\n          </ElBreadcrumbItem>\n        </ElBreadcrumb>\n        <ElButton link @click=\"promptDetailRef?.showUseCase()\">\n          <SvgIcon class=\"mr-1.5\" name=\"layout-split\" size=\"18\" />\n          {{ $t('chat.usage_guide') }}\n        </ElButton>\n      </div>\n      <PromptDetailView\n        ref=\"promptDetailRef\"\n        mainClass=\"!px-0 !max-w-none\"\n        guideClass=\"!max-w-none\"\n        hideMenuHeader\n        hideFooter\n        showRecommend\n        hideContentTitle\n        useCaseFixed\n      />\n    </section>\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/index/prompt/index.vue",
    "content": "<template>\n  <PromptView />\n</template>\n\n<script setup lang=\"ts\">\nimport PromptView from '@/views/prompt/view.vue'\n</script>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/index/redirect.vue",
    "content": "<template>\n</template>\n\n<script setup lang=\"ts\">\n</script>\n\n<style scoped></style>"
  },
  {
    "path": "web/front/src/renderer/main/views/index/toolkit.vue",
    "content": "<template>\n  <div class=\"w-11/12 lg:w-4/5 mx-auto pb-10\">\n    <ToolkitGroupList :sticky-offset=\"70\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ToolkitGroupList from '@/views/toolkit/components/group-list.vue'\n</script>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/order/index.vue",
    "content": "<template>\n  <div class=\"h-full bg-white\">\n    <MainHeader sticky hide-user :sider-button=\"isSoftware\">\n      <template #before_suffix>\n        <div class=\"text-base text-primary font-bold line-clamp-1 max-md:flex-1 max-md:text-center\">\n          {{ $t('profile.order_info') }}\n        </div>\n      </template>\n      <template #after_suffix>\n        <ElIcon class=\"text-primary cursor-pointer\" size=\"18\" @click=\"$router.back()\">\n          <Close />\n        </ElIcon>\n      </template>\n    </MainHeader>\n\n    <div class=\"px-10 py-8\">\n      <div class=\"flex items-center gap-4\">\n        <FilterDateRange\n          v-model=\"searchParams.date\"\n          class=\"max-w-[300px]\"\n          :value-format=\"(date) => date.getTime()\"\n          size=\"large\"\n          @change=\"handleSearch\"\n        />\n        <el-select v-model=\"searchParams.subscription\" class=\"max-w-[200px]\" size=\"large\" @change=\"handleSearch\">\n          <template #prefix>{{ $t('order.subscription') }}：</template>\n          <el-option v-for=\"item in subscription_list\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\" />\n        </el-select>\n        <el-select v-model=\"searchParams.pay_type\" class=\"max-w-[180px]\" size=\"large\" @change=\"handleSearch\">\n          <template #prefix>{{ $t('order.pay_type') }}：</template>\n          <el-option v-for=\"item in order_pay_type_list\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\" />\n        </el-select>\n        <el-input\n          v-model=\"searchParams.keyword\"\n          class=\"max-w-[160px]\"\n          :prefix-icon=\"Search\"\n          size=\"large\"\n          :placeholder=\"$t('order.search_placeholder')\"\n          clearable\n          @change=\"handleSearch\"\n        />\n      </div>\n      <!-- 内容区域 -->\n      <TablePlus\n        :data=\"tableData\"\n        :total=\"tableTotal\"\n        style=\"width: 100%\"\n        class=\"mt-4\"\n        header-row-class-name=\"rounded overflow-hidden\"\n        header-cell-class-name=\"!bg-[#F6F7F8] !h-[60px] !border-none\"\n        @page-size-change=\"handleSizeChange\"\n        @page-current-change=\"handleCurrentChange\"\n      >\n        <ElTableColumn :label=\"$t('order.id')\" min-width=\"160\" prop=\"order_id\" show-overflow-tooltip />\n        <ElTableColumn :label=\"$t('order.subscription')\" min-width=\"140\" prop=\"subscription_name\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <span :class=\"{ 'text-[#9B9B9B]': !row.subscription_name }\">\n              {{ row.subscription_name }}*{{ row.duration }}{{ $t('subscription.' + row.time_unit) }}\n            </span>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('order.status')\" min-width=\"120\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <div class=\"flex items-center gap-1\">\n              <ElTag\n                class=\"!border-none\"\n                :type=\"\n                  row.status == ORDER_STATUS.CANCEL\n                    ? 'info'\n                    : row.status == ORDER_STATUS.NOT_CONFIRM\n                      ? 'danger'\n                      : row.status == ORDER_STATUS.PENDING\n                        ? 'primary'\n                        : row.status == ORDER_STATUS.EXPIRED\n                          ? 'warning'\n                          : 'success'\n                \"\n              >\n                {{ ORDER_STATUS_LABEL_MAP.get(row.status) }}\n              </ElTag>\n            </div>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('order.amount')\" min-width=\"140\" prop=\"amount\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <span :class=\"{ 'text-[#9B9B9B]': !row.amount }\">{{ row.currency || 'CNY' }}&nbsp;{{ ((+row.amount || 0) / 100).toFixed(2) }}</span>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('order.pay_type')\" prop=\"pay_type\" width=\"120\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            {{ getPayTypeLabel(row.pay_type) }}\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('order.create_time')\" width=\"160\" show-overflow-tooltip>\n          <template #default=\"{ row }\">\n            <span :class=\"{ 'text-[#9B9B9B]': !row.created_time }\">\n              {{ row.created_time.slice(0, 16) || '--' }}\n            </span>\n          </template>\n        </ElTableColumn>\n        <ElTableColumn :label=\"$t('order.action')\" width=\"170\" fixed=\"right\">\n          <template #default=\"{ row }\">\n            <template v-if=\"row.pay_type == PAY_TYPE.ALIPAY && row.status == ORDER_STATUS.PENDING\">\n              <ElButton v-debounce class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click.stop=\"handleAlipay(row)\">\n                {{ $t('order.payment') }}\n              </ElButton>\n              <ElButton v-debounce class=\"text-[#5A6D9E] !bg-transparent\" type=\"text\" @click.stop=\"handleCancel(row)\">\n                {{ $t('order.cancel') }}\n              </ElButton>\n            </template>\n            <span v-else class=\"text-[#9B9B9B]\">--</span>\n          </template>\n        </ElTableColumn>\n      </TablePlus>\n    </div>\n  </div>\n</template>\n<script setup lang=\"ts\">\nimport { ref, onMounted, computed } from 'vue'\nimport { Search, Close } from '@element-plus/icons-vue'\nimport { useUserStore } from '@/stores/modules/user'\nimport MainHeader from '@/layout/header.vue'\nimport TablePlus from '@/components/TablePlus/index.vue'\nimport FilterDateRange from '@/components/Filter/date-range.vue'\n\nimport { subscriptionApi } from '@/api/modules/subscription'\nimport { ordersApi } from '@/api/modules/order'\nimport { getSimpleDateFormatString } from '@/utils/moment'\n\nconst ORDER_STATUS = {\n  ALL: -1,\n  NOT_CONFIRM: 1,\n  PENDING: 2,\n  PAID: 3,\n  EXPIRED: 4,\n  CANCEL: 5\n}\nconst PAY_TYPE = {\n  ALL: -1,\n  WECHAT: 1,\n  ALIPAY: 4,\n  MANUAL: 2\n}\nconst ORDER_STATUS_LABEL_MAP = new Map([\n  [ORDER_STATUS.ALL, window.$t('order.status_list.all')],\n  [ORDER_STATUS.NOT_CONFIRM, window.$t('order.status_list.not_confirm')],\n  [ORDER_STATUS.PENDING, window.$t('order.status_list.pending')],\n  [ORDER_STATUS.PAID, window.$t('order.status_list.paid')],\n  [ORDER_STATUS.EXPIRED, window.$t('order.status_list.expired')],\n  [ORDER_STATUS.CANCEL, window.$t('order.status_list.cancel')]\n])\nconst order_pay_type_list = ref([\n  { label: window.$t('common.all'), value: PAY_TYPE.ALL },\n  { label: window.$t('subscription.wechat_pay'), value: PAY_TYPE.WECHAT },\n  { label: window.$t('subscription.alipay'), value: PAY_TYPE.ALIPAY },\n  { label: window.$t('subscription.manual_pay'), value: PAY_TYPE.MANUAL }\n])\n\nconst subscription_list = computed(() => {\n  return [{ label: window.$t('common.all'), value: 0 }].concat(\n    userStore.subscriptions.map((item) => {\n      return {\n        label: item.group_name,\n        value: item.group_id\n      }\n    })\n  )\n})\n\nconst userStore = useUserStore()\n\nconst tableData = ref([])\nconst tableTotal = ref(0)\n\nconst searchParams = ref({\n  offset: 0,\n  limit: 10,\n  status: -1,\n  pay_type: -1,\n  keyword: '',\n  date: [],\n  subscription: 0\n})\n\nconst getPayTypeLabel = (pay_type: number) => {\n  return order_pay_type_list.value.find((item) => item.value === pay_type)?.label || ''\n}\n\nconst loadList = async () => {\n  const res = await ordersApi.list({\n    ...searchParams.value,\n    start_time: searchParams.value.date[0] ? new Date(searchParams.value.date[0]).getTime() : undefined,\n    end_time: searchParams.value.date[1] ? new Date(searchParams.value.date[1]).getTime() : undefined\n  })\n  tableData.value = res.data.orders.map((item: Order.State) => ({\n    ...item,\n    created_time: getSimpleDateFormatString({\n      date: item.created_time,\n      format: 'YYYY-MM-DD hh:mm'\n    })\n  }))\n  tableTotal.value = res.data.total\n}\n\nconst handleSearch = () => {\n  searchParams.value.offset = 0\n  loadList()\n}\n\nconst handleSizeChange = (size: number) => {\n  searchParams.value.offset = 0\n  searchParams.value.limit = size\n  loadList()\n}\n\nconst handleCurrentChange = (current: number) => {\n  searchParams.value.offset = (current - 1) * searchParams.value.limit\n  loadList()\n}\n\nconst handleAlipay = (data: Order.State) => {\n  return subscriptionApi.createOrder({\n    params: {\n      user_id: userStore.info.user_id,\n      nickname: userStore.info.nickname,\n      order_id: data.order_id,\n      subscription_id: data.service_id,\n      subscription_name: data.subscription_name,\n      pay_type: data.pay_type,\n      amount: Number(data.amount || 0),\n      currency: data.currency,\n      duration: 1,\n      time_unit: data.time_unit\n    },\n    return_url: window.location.href\n  })\n}\nconst handleCancel = async (data: Order.State) => {\n  await ElMessageBox.confirm(window.$t('order.cancel_confirm'))\n  await ordersApi.close(data.order_id)\n  loadList()\n  ElMessage.success(window.$t('status.approve_cancel'))\n}\n\nonMounted(() => {\n  loadList()\n})\n</script>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/profile/about.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\n\nconst version = ref('')\nconst handleCheck = () => {\n  window.$chat53ai.$updater({ type: 'check' }).then((res) => {\n    if (!res) {\n      ElMessage.success(window.$t('updater.noUpdate'))\n    }\n  })\n}\n\nonMounted(() => {\n  window.$chat53ai.$updater({ type: 'version' }).then((res) => {\n    version.value = res\n  })\n})\n</script>\n\n<template>\n  <div class=\"border h-[310px] rounded-md flex-center flex-col gap-3\">\n    <img class=\"w-[68px]\" src=\"https://chat.53ai.com/images/logo-square.png\" alt=\"\" />\n    <h2 class=\"text-base text-[#1D1E1F]\">53AI 魔法菜单</h2>\n    <p class=\"text-sm text-[#9A9A9A]\">{{ $t('updater.currentVersion', { version }) }}</p>\n    <el-button type=\"primary\" @click=\"handleCheck\">{{ $t('updater.checkUpdate') }}</el-button>\n  </div>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/profile/changeMobile.vue",
    "content": "<template>\n  <el-form ref=\"formRef\" label-position=\"top\" :model=\"form\" :rules=\"rules\" :validate-on-rule-change=\"true\" @keyup.enter=\"handleSubmit\">\n    <el-form-item v-if=\"userStore.info.mobile\" prop=\"old_code\">\n      <el-input v-model=\"form.old_code\" v-trim size=\"large\" :placeholder=\"$t('form.input_placeholder') + $t('form.verify_code')\">\n        <template #append>\n          <el-button :disabled=\"isSendingOld\" @click.stop=\"handleGetOldCode\">\n            <div :class=\"codeCount ? 'text-[#9A9A9A]' : 'text-[#2563EB]'\">\n              {{ codeCount ? `${codeCount}s` : $t('form.get_verify_code') }}\n            </div>\n          </el-button>\n        </template>\n      </el-input>\n    </el-form-item>\n\n    <el-form-item :label=\"getMobileLabel()\" prop=\"new_mobile\">\n      <el-input v-model=\"form.new_mobile\" v-trim size=\"large\" :placeholder=\"getMobilePlaceholder()\" clearable />\n    </el-form-item>\n\n    <el-form-item :label=\"$t('form.verify_code')\" prop=\"new_code\">\n      <el-input v-model=\"form.new_code\" v-trim size=\"large\" :placeholder=\"$t('form.input_placeholder') + $t('form.verify_code')\">\n        <template #append>\n          <el-button :disabled=\"isSendingNew\" @click.stop=\"handleGetNewCode\">\n            <div :class=\"newCodeCount ? 'text-[#9A9A9A]' : 'text-[#2563EB]'\">\n              {{ newCodeCount ? `${newCodeCount}s` : $t('form.get_verify_code') }}\n            </div>\n          </el-button>\n        </template>\n      </el-input>\n    </el-form-item>\n\n    <!-- 更换/绑定按钮 -->\n    <div class=\"flex justify-end mt-7.5\">\n      <el-button class=\"w-24 h-9\" @click=\"handleClose\">\n        {{ $t('action.cancel') }}\n      </el-button>\n      <el-button type=\"primary\" class=\"w-24 h-9\" @click=\"handleSubmit\">\n        {{ $t('action.ok') }}\n      </el-button>\n    </div>\n  </el-form>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed } from 'vue'\nimport { ElMessage } from 'element-plus'\nimport type { FormInstance } from 'element-plus'\nimport { getMobileRules } from '@/utils/form-rules'\nimport commonApi from '@/api/modules/common'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport useMobile from '@/hooks/useMobile'\n\nconst emits = defineEmits(['success', 'close'])\n\nconst userStore = useUserStore()\nconst { sendcode, codeRule, codeCount } = useMobile()\nconst { sendcode: newSendCode, codeRule: newCodeRule, codeCount: newCodeCount } = useMobile()\n\nconst formRef = ref<FormInstance>()\n\nconst form = reactive({\n  old_code: '',\n  new_mobile: '',\n  new_code: ''\n})\n\nconst rules = reactive({\n  new_mobile: [getMobileRules()],\n  old_code: [codeRule],\n  new_code: [newCodeRule]\n})\n\nconst isSendingOld = ref(false)\nconst isSendingNew = ref(false)\n\n// 计算属性\nconst isMobile = computed(() => /^1[3-9]\\d{9}$/.test(form.new_mobile))\n\n// 工具函数\nconst getMobileLabel = () => {\n  return userStore.info.mobile ? window.$t('form.new_mobile') : window.$t('form.mobile')\n}\n\nconst getMobilePlaceholder = () => {\n  return userStore.info.mobile\n    ? window.$t('form.input_placeholder') + window.$t('form.new_mobile')\n    : window.$t('form.input_placeholder') + window.$t('form.mobile')\n}\n\nconst handleGetOldCode = () => {\n  sendcode(userStore.info.mobile)\n  isSendingOld.value = Boolean(codeCount.value)\n}\n\nconst handleGetNewCode = () => {\n  if (!isMobile.value) return\n  newSendCode(form.new_mobile)\n  isSendingNew.value = Boolean(newCodeCount.value)\n}\n\n// 重置表单\nconst resetForm = () => {\n  Object.assign(form, {\n    old_code: '',\n    new_mobile: '',\n    new_code: ''\n  })\n  formRef.value?.resetFields()\n}\n\nconst handleClose = () => {\n  resetForm()\n  emits('close')\n}\n\n// 更换手机号逻辑\nconst performChangeMobile = async (id) => {\n  await commonApi.verifycode({\n    mobile: userStore.info.mobile,\n    verifycode: form.old_code,\n    type: '1'\n  })\n\n  await commonApi.verifycode({\n    mobile: form.new_mobile,\n    verifycode: form.new_code,\n    type: '1'\n  })\n\n  await userStore.change_mobile(\n    {\n      new_code: form.new_code,\n      new_mobile: form.new_mobile,\n      old_code: form.old_code\n    },\n    id\n  )\n  ElMessage.success(window.$t('profile.change') + window.$t('status.success'))\n}\n\n// 绑定手机号逻辑\nconst performBindMobile = async (id) => {\n  await commonApi.verifycode({\n    mobile: form.new_mobile,\n    verifycode: form.new_code,\n    type: '1'\n  })\n\n  await userStore.change_mobile(\n    {\n      new_code: form.new_code,\n      new_mobile: form.new_mobile\n    },\n    id\n  )\n  ElMessage.success(window.$t('profile.bind') + window.$t('status.success'))\n}\nconst handleSubmit = () => {\n  return formRef.value?.validate().then(async (valid) => {\n    if (!valid) return\n\n    try {\n      await userStore.getUserInfo()\n      const id = userStore.info.user_id\n\n      if (userStore.info.mobile) {\n        await performChangeMobile(id)\n      } else {\n        await performBindMobile(id)\n      }\n\n      resetForm()\n      emits('success')\n    } catch (error) {}\n  })\n}\n\ndefineExpose({\n  resetForm\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/profile/common.vue",
    "content": "<script setup lang=\"ts\">\nimport { useBrowserSettingStore } from '@/stores/modules/browser-setting.ts'\n\nconst settingStore = useBrowserSettingStore()\n</script>\n\n<template>\n  <div class=\"flex items-center justify-between pb-3\">\n    <div class=\"text-[#1D1E1F] text-sm font-semibold\">通用设置</div>\n  </div>\n  <div class=\"h-10 flex items-center justify-between px-4 border rounded-md\">\n    <div class=\"text-sm text-[#1D1E1F]\">开机自动启动</div>\n    <el-switch v-model=\"settingStore.boot_up_enabled\"></el-switch>\n  </div>\n  <div class=\"h-10 flex items-center justify-between px-4 border rounded-md mt-2\">\n    <div class=\"text-sm text-[#1D1E1F]\">设置为默认浏览器</div>\n    <el-switch v-model=\"settingStore.default_browser_enabled\"></el-switch>\n  </div>\n  <div class=\"flex items-center justify-between py-3 mt-2\">\n    <div class=\"text-[#1D1E1F] text-sm font-semibold\">默认搜索引擎</div>\n  </div>\n  <el-select v-model=\"settingStore.default_search_url\" size=\"large\">\n    <el-option label=\"百度\" value=\"https://www.baidu.com/s?wd=_word_\"></el-option>\n    <el-option label=\"百度AI\" value=\"https://chat.baidu.com/search?word=_word_\"></el-option>\n  </el-select>\n  <div class=\"flex items-center justify-between py-3 mt-2\">\n    <div class=\"text-[#1D1E1F] text-sm font-semibold\">新标签页设置</div>\n  </div>\n\n  <el-input\n    size=\"large\"\n    v-model=\"settingStore.default_tab_url\"\n    placeholder=\"请填写新标签页url\"\n  ></el-input>\n  <!-- <div class=\"flex flex-col gap-2\">\n    <div class=\"h-10 flex items-center px-4 border rounded-md\">\n      <el-radio class=\"!mr-0\"></el-radio>\n      <div class=\"text-sm text-[#1D1E1F]\">打开新标签页</div>\n    </div>\n\n    <div class=\"h-10 flex items-center px-4 border rounded-md\">\n      <el-radio class=\"!mr-0\"></el-radio>\n      <div class=\"text-sm text-[#1D1E1F]\">打开特定网页</div>\n    </div>\n  </div> -->\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/profile/glider.vue",
    "content": "<template>\n  <img class=\"h-[160px] bg-[#E5ECFF] rounded-lg\" src=\"/images/glider.png\" />\n  <div class=\"flex items-center justify-between py-3 mt-2\">\n    <div class=\"text-[#1D1E1F] text-sm font-semibold\">启用/禁用</div>\n  </div>\n  <div class=\"flex flex-col gap-2\">\n    <div class=\"h-10 flex items-center justify-between px-4 border rounded-md\">\n      <div class=\"text-sm text-[#1D1E1F]\">启用划词菜单栏</div>\n      <el-switch v-model=\"settingStore.glider_enabled\"></el-switch>\n    </div>\n    <div v-if=\"settingStore.glider_enabled\" class=\"h-10 flex items-center justify-between px-4 border rounded-md\">\n      <div class=\"text-sm text-[#1D1E1F]\">唤起方式</div>\n      <el-dropdown trigger=\"click\">\n        <div class=\"text-sm text-[#1D1E1F]\">\n          划词立即唤起\n          <el-icon>\n            <arrow-down />\n          </el-icon>\n        </div>\n        <template #dropdown>\n          <el-dropdown-menu>\n            <el-dropdown-item>划词后立即唤起</el-dropdown-item>\n            <el-dropdown-item>划词后按快捷键唤起</el-dropdown-item>\n          </el-dropdown-menu>\n        </template>\n      </el-dropdown>\n    </div>\n  </div>\n  <template v-if=\"settingStore.glider_enabled\">\n    <div class=\"flex items-center justify-between py-3 mt-2\">\n      <div class=\"text-[#1D1E1F] text-sm font-semibold\">菜单栏</div>\n      <el-button type=\"primary\" plain class=\"!border-none\">系统内置</el-button>\n    </div>\n    <Sortable v-model=\"settingStore.glider_menus\" identity=\"value\" class=\"flex flex-col gap-2\">\n      <template #item=\"{ item, index }\">\n        <el-input v-model=\"item.name\" size=\"large\">\n          <template #prefix>\n            <div class=\"sort-icon cursor-move\">\n              <svg-icon size=\"18\" name=\"drag\" class=\"cursor-move\"></svg-icon>\n            </div>\n          </template>\n          <template #suffix>\n            <el-tooltip content=\"系统内置不可编辑\" placement=\"top\">\n              <svg-icon size=\"16\" name=\"edit\" class=\"cursor-pointer\" @click.stop=\"handleEdit(item)\"></svg-icon>\n            </el-tooltip>\n            <el-icon color=\"#1D1E1F\" class=\"ml-2 cursor-pointer\" @click.stop=\"handleDel(item, index)\"><Delete /></el-icon>\n          </template>\n        </el-input>\n      </template>\n    </Sortable>\n    <div>\n      <el-button type=\"primary\" plain class=\"!border-none mt-4\" @click=\"handleAdd\">+添加</el-button>\n      <el-button type=\"primary\" plain class=\"!border-none mt-4\">官方工具库</el-button>\n    </div>\n  </template>\n\n  <el-dialog v-model=\"visible\" title=\"添加工具\" width=\"600px\">\n    <el-form ref=\"formRef\" :model=\"form\" label-position=\"top\" require-asterisk-position=\"right\">\n      <el-form-item label=\"工具图标和名称\" required>\n        <el-input v-model=\"form.name\" size=\"large\" placeholder=\"请输入工具名称\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"执行Agent\" required>\n        <el-input v-model=\"form.value\" size=\"large\" placeholder=\"请输入工具名称\"></el-input>\n      </el-form-item>\n      <el-form-item label=\"执行指令\" required>\n        <div class=\"text-xs text-[#9A9A9A]\">\n          把\n          <span class=\"text-[#2563EB]\">\\{\\{划词内容}}</span>\n          填入到指令内容里，例如：总结以下内容：{{ 划词内容 }}\n        </div>\n        <el-input class=\"mt-2\" type=\"textarea\" :rows=\"5\" resize=\"none\"></el-input>\n      </el-form-item>\n    </el-form>\n    <template #footer>\n      <div class=\"flex-center\">\n        <el-button type=\"primary\" @click=\"handleSave\">保存</el-button>\n        <el-button type=\"default\" @click=\"visible = false\">取消</el-button>\n      </div>\n    </template>\n  </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { ArrowDown, Delete } from '@element-plus/icons-vue'\nimport Sortable from '@/components/Sortable/index.vue'\n\nimport { useBrowserSettingStore } from '@/stores/modules/browser-setting.ts'\n\nconst settingStore = useBrowserSettingStore()\n\nconst formRef = ref()\n\nconst visible = ref(false)\nconst form = ref({\n  name: '',\n  value: ''\n})\n\nconst handleAdd = () => {\n  form.value.name = ''\n  form.value.value = ''\n  visible.value = true\n}\n\nconst handleEdit = (item) => {\n  form.value.name = item.name\n  form.value.value = item.value\n  visible.value = true\n}\n\nconst handleDel = async (item, index) => {\n  await ElMessageBox.confirm('确认删除吗？')\n  settingStore.glider_menus.splice(index, 1)\n}\n\nconst handleSave = () => {\n  formRef.value.validate((valid) => {\n    if (!valid) return\n    // console.log('form', form.value)\n    settingStore.glider_menus.push(form.value)\n    visible.value = false\n  })\n}\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/profile/index.vue",
    "content": "<template>\n  <div class=\"h-full bg-white\">\n    <MainHeader sticky :back=\"false\" hide-user :sider-button=\"enterpriseStore.isSoftStyle\">\n      <template #before_suffix>\n        <div class=\"text-base text-primary font-bold line-clamp-1 max-md:flex-1 max-md:text-center\">\n          {{ $t('action.setting') }}\n        </div>\n      </template>\n      <template #after_suffix>\n        <ElIcon class=\"text-primary cursor-pointer\" size=\"18\" @click=\"$router.back()\">\n          <Close />\n        </ElIcon>\n      </template>\n    </MainHeader>\n\n    <div class=\"hidden w-[250px] max-md:w-full flex-none py-5 bg-white\">\n      <div class=\"h-15 flex items-center gap-2 px-6 mb-2 text-primary max-md:hidden\">\n        <svg-icon size=\"16\" name=\"setting\"></svg-icon>\n        <span class=\"text-[22px] max-md:text-lg\">{{ $t('action.setting') }}</span>\n      </div>\n      <div class=\"flex flex-col py-2 gap-1 max-md:hidden\">\n        <template v-for=\"item in menus\" :key=\"item.value\">\n          <div\n            v-if=\"item.visible\"\n            class=\"h-10 flex items-center gap-3 px-6 cursor-pointer hover-bg-primary-light-9 hover-text-theme max-md:flex-1\"\n            :class=\"[page === item.value ? 'text-theme bg-primary-light-9' : 'text-regular']\"\n            @click=\"handleSelect(item)\"\n          >\n            <svg-icon size=\"16\" :name=\"item.icon || 'setting'\"></svg-icon>\n            <span class=\"text-sm\">{{ item.label }}</span>\n          </div>\n        </template>\n      </div>\n      <el-tabs v-model=\"page\" class=\"index-tabs md:!hidden mx-4\">\n        <template v-for=\"item in menus\" :key=\"item.value\">\n          <el-tab-pane v-if=\"item.visible\" :label=\"item.label\" :name=\"item.value\"></el-tab-pane>\n        </template>\n      </el-tabs>\n    </div>\n\n    <!-- 内容区域 -->\n    <div class=\"flex-1 w-full md:w-4/5 lg:w-3/5 max-w-[600px] mx-auto box-border flex flex-col\">\n      <div class=\"flex-1 py-4 px-3 md:p-6 bg-[#FFFFFF] box-border overflow-y-auto\">\n        <UserInfo v-if=\"page === 'userinfo'\"></UserInfo>\n        <Password v-else-if=\"page === 'password'\"></Password>\n        <Toolbar v-else-if=\"page === 'toolbar'\"></Toolbar>\n        <Glider v-else-if=\"page === 'glider'\"></Glider>\n        <About v-else-if=\"page === 'about'\"></About>\n        <Common v-else-if=\"page === 'common'\"></Common>\n\n        <div\n          v-if=\"page === 'userinfo'\"\n          class=\"h-11 mt-8 flex items-center justify-center bg-[#F8F8F9] gap-2 px-6 mb-2 rounded text-[#F84E55] cursor-pointer\"\n          @click=\"handleLogout\"\n        >\n          <!-- <svg-icon size=\"14\" name=\"quit\"></svg-icon> -->\n          <span class=\"text-sm\">{{ $t('action.logout') }}</span>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Close } from '@element-plus/icons-vue'\nimport { computed, onMounted, ref } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { ElMessage } from 'element-plus'\n\nimport MainHeader from '@/layout/header.vue'\n\nimport { useUserStore } from '@/stores/modules/user'\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\n\nimport Toolbar from './toolbar.vue'\nimport Glider from './glider.vue'\nimport About from './about.vue'\nimport Common from './common.vue'\nimport Password from './password.vue'\nimport UserInfo from './userinfo.vue'\n\nconst userStore = useUserStore()\nconst enterpriseStore = useEnterpriseStore()\n\nconst props = withDefaults(\n  defineProps<{\n    type?: string\n  }>(),\n  {\n    type: 'glider'\n  }\n)\n\nconst route = useRoute()\n\nconst menus = computed(() => [\n  {\n    label: '划词菜单栏',\n    value: 'glider',\n    icon: 'mouse',\n    visible: userStore.is_login && window.$isElectron\n  },\n  {\n    label: '网页工具栏',\n    value: 'toolbar',\n    icon: 'web',\n    visible: userStore.is_login && window.$isElectron\n  },\n  {\n    label: '通用设置',\n    value: 'common',\n    icon: 'setting2',\n    visible: window.$isElectron\n  },\n  {\n    label: window.$t('profile.info'),\n    value: 'userinfo',\n    icon: 'person',\n    visible: userStore.is_login\n  },\n  {\n    label: window.$t('profile.change_password'),\n    value: 'password',\n    icon: 'lock',\n    visible: userStore.is_login\n  },\n  {\n    label: '关于',\n    value: 'about',\n    icon: 'info',\n    visible: window.$isElectron\n  }\n])\n\nconst page = ref('')\nconst handleSelect = (item: any) => {\n  page.value = item.value\n}\n\nconst handleLogout = () => {\n  userStore.logout()\n  ElMessage.success(window.$t('status.logout_success'))\n}\n\nonMounted(() => {\n  const visibleMenus = menus.value.filter((item) => item.visible).map((item) => item.value)\n  const type = props.type || (route.query.type as string) || 'userinfo'\n  page.value = visibleMenus.includes(type) ? type : visibleMenus[0]\n\n  enterpriseStore.loadInfo()\n})\n</script>\n\n<style scoped>\n@media (width <= 768px) {\n  .h-full {\n    min-height: 100vh;\n  }\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/profile/password.vue",
    "content": "<script setup lang=\"ts\">\nimport { ref, reactive } from 'vue'\nimport { getPasswordRules } from '@/utils/form-rules'\nimport userApi from '@/api/modules/user'\n\nconst props = withDefaults(defineProps<{\n  hideSubmit?: boolean\n}>(), {\n  hideSubmit: false\n})\nconst emits = defineEmits(['success'])\n\nconst formRef = ref(null)\n\nconst form = reactive({\n  newPassword: '',\n  confirmPassword: ''\n})\n\nconst rules = reactive({\n  newPassword: [getPasswordRules()],\n  confirmPassword: [\n    {\n      required: true,\n      message: window.$t('form.input_placeholder') + window.$t('form.new_password_confirm'),\n      trigger: 'blur'\n    },\n    {\n      validator: (_rule, value, callback) => {\n        if (value !== form.newPassword) {\n          callback(new Error(window.$t('form.password_not_match')))\n        } else {\n          callback()\n        }\n      },\n      trigger: 'blur'\n    }\n  ]\n})\n\nconst handleSubmit = () => {\n  return formRef.value.validate().then(async (valid) => {\n    if (!valid) return\n    console.log('valid')\n    await userApi\n      .updatePassword({\n        new_password: form.newPassword,\n        confirm_password: form.confirmPassword\n      })\n      .then(() => {\n        ElMessage.success(window.$t('status.success'))\n        emits('success')\n      })\n  })\n}\n</script>\n\n<template>\n  <el-form ref=\"formRef\" label-position=\"top\" :model=\"form\" :rules=\"rules\">\n    <template v-if=\"false\">\n      <el-form-item :label=\"$t('form.select_verify')\">\n        <el-radio-group>\n          <el-radio label=\"1\">{{ $t('form.email_verify') }}</el-radio>\n          <el-radio label=\"2\">{{ $t('form.mobile_verify') }}</el-radio>\n        </el-radio-group>\n      </el-form-item>\n      <el-form-item :label=\"$t('form.email')\">\n        <el-input size=\"large\"></el-input>\n      </el-form-item>\n      <el-form-item :label=\"$t('form.mobile')\">\n        <el-input size=\"large\"></el-input>\n      </el-form-item>\n      <el-form-item :label=\"$t('form.verify_code')\">\n        <el-input size=\"large\">\n          <template #append>\n            <el-button size=\"large\" type=\"primary\">{{ $t('form.get_verify_code') }}</el-button>\n          </template>\n        </el-input>\n      </el-form-item>\n    </template>\n\n    <el-form-item :label=\"$t('form.new_password')\" prop=\"newPassword\">\n      <el-input\n        v-model=\"form.newPassword\"\n        v-trim\n        type=\"password\"\n        size=\"large\"\n        show-password\n        clearable\n      ></el-input>\n    </el-form-item>\n    <el-form-item :label=\"$t('form.new_password_confirm')\" prop=\"confirmPassword\">\n      <el-input\n        v-model=\"form.confirmPassword\"\n        v-trim\n        type=\"password\"\n        size=\"large\"\n        show-password\n        clearable\n      ></el-input>\n    </el-form-item>\n  </el-form>\n  <ElButton v-if=\"!hideSubmit\" v-debounce class=\"!w-full rounded-3xl mt-5\" size=\"large\" type=\"primary\" :disabled=\"!form.newPassword.trim() || !form.confirmPassword.trim()\" @click=\"handleSubmit\">\n    {{ $t('action.update_password') }}\n  </ElButton>\n</template>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/profile/toolbar.vue",
    "content": "<template>\n  <img class=\"h-[280px] bg-[#E5ECFF] rounded-lg\" src=\"/images/toolbar.png\" />\n  <div class=\"flex items-center justify-between py-3 mt-2\">\n    <div class=\"text-[#1D1E1F] text-sm font-semibold\">启用/禁用</div>\n  </div>\n  <div class=\"h-10 flex items-center justify-between px-4 border rounded-md\">\n    <div class=\"text-sm text-[#1D1E1F]\">启用网页工具栏</div>\n    <el-switch v-model=\"settingStore.toolbar_enabled\"></el-switch>\n  </div>\n  <template v-if=\"settingStore.toolbar_enabled\">\n    <div class=\"flex items-center justify-between py-3 mt-2\">\n      <div class=\"text-[#1D1E1F] text-sm font-semibold\">工具栏</div>\n      <el-button type=\"primary\" plain class=\"!border-none\">系统内置</el-button>\n    </div>\n\n    <Sortable v-model=\"settingStore.toolbar_menus\" identity=\"value\" class=\"flex flex-col gap-2\">\n      <template #item=\"{ item, index }\">\n        <el-input v-model=\"item.name\" size=\"large\">\n          <template #prefix>\n            <div class=\"sort-icon cursor-move\">\n              <svg-icon size=\"18\" name=\"drag\" class=\"cursor-move\"></svg-icon>\n            </div>\n          </template>\n          <template #suffix>\n            <el-tooltip content=\"系统内置不可编辑\" placement=\"top\">\n              <svg-icon size=\"16\" name=\"edit\" class=\"cursor-pointer\" @click.stop=\"handleEdit(item)\"></svg-icon>\n            </el-tooltip>\n            <el-icon color=\"#1D1E1F\" class=\"ml-2 cursor-pointer\" @click.stop=\"handleDel(item, index)\"><Delete /></el-icon>\n          </template>\n        </el-input>\n      </template>\n    </Sortable>\n  </template>\n\n  <el-button type=\"primary\" plain class=\"!border-none mt-4\">+添加</el-button>\n</template>\n\n<script setup lang=\"ts\">\nimport { Delete } from '@element-plus/icons-vue'\n\nimport Sortable from '@/components/Sortable/index.vue'\n\nimport { useBrowserSettingStore } from '@/stores/modules/browser-setting.ts'\n\nconst settingStore = useBrowserSettingStore()\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/profile/userinfo.vue",
    "content": "<template>\n  <div class=\"md:flex md:items-center md:justify-between mt-6\">\n    <h2 class=\"text-primary font-semibold\">{{ $t('profile.info') }}</h2>\n    <div v-if=\"!userStore.info.is_internal\" class=\"flex justify-end items-center gap-1\">\n      <div class=\"h-6 flex-center gap-1 px-2 text-sm text-placeholder whitespace-nowrap\" :title=\"userStore.info.group_name\">\n        <img\n          :src=\"\n            !/\\.png$/.test(userStore.info.group_icon)\n              ? $getPublicPath(`/images/subscription/${userStore.info.group_icon}.png`)\n              : userStore.info.group_icon\n          \"\n          class=\"w-4 h-4 object-cover\"\n        />\n        <p class=\"max-w-[5em] truncate\">{{ userStore.info.group_name }}</p>\n      </div>\n      <div class=\"flex-none w-px h-3 bg-[#E6E8EB] mx-1\"></div>\n      <div class=\"text-sm text-secondary flex items-center gap-1\">\n        <span>{{ $t('subscription.expire_time') }}：</span>\n        <span class=\"text-primary\">{{ userStore.info.group_expire_time || '永久有效' }}</span>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"flex items-center gap-2 w-full p-4 box-border cursor-pointer mt-4 rounded-lg overflow-hidden bg-[#F7F7F7]\" @click=\"handleEdit\">\n    <ElAvatar class=\"flex-none\" :size=\"48\" :src=\"userStore.info.avatar\" style=\"--el-avatar-bg-color: transparent\" />\n    <div class=\"flex-1 w-0\">\n      <div class=\"text-primary font-semibold\">\n        {{ userStore.info.nickname }}\n      </div>\n      <p class=\"text-sm text-secondary mt-1 flex items-center gap-1\">\n        {{ userStore.info.mobile || '- -' }}\n        <!-- <svg-icon name=\"copy\" v-copy=\"userStore.info.mobile\"></svg-icon> -->\n      </p>\n    </div>\n    <ElIcon class=\"text-regular\" size=\"16\">\n      <ArrowRight />\n    </ElIcon>\n  </div>\n  <div class=\"flex items-center justify-center\">\n    <h2 class=\"text-primary font-semibold mt-6\">{{ $t('profile.bind_accounts') }}</h2>\n  </div>\n  <div class=\"flex flex-col mt-4 bg-[#F7F7F7] rounded-lg box-border overflow-hidden\">\n    <div class=\"p-4 box-border flex items-center gap-2.5 account-item\">\n      <img class=\"size-6\" :src=\"$getPublicPath('/images/profile/mobile.png')\" alt=\"\" />\n      <div class=\"flex-none text-base text-primary\">\n        {{ $t('profile.bind_mobile') }}\n      </div>\n      <div class=\"flex-1 w-0 text-sm text-placeholder invisible md:visible\">\n        {{ userStore.info.mobile || $t('profile.unbind_account') }}\n      </div>\n      <el-button v-if=\"!isOpLocalEnv\" type=\"info\" class=\"border-none !text-[#586D9A]\" link plain @click=\"change_Mobile_Visible = true\">\n        {{ userStore.info.mobile ? $t('profile.change') : $t('profile.bind') }}\n      </el-button>\n    </div>\n    <div class=\"p-4 box-border flex items-center gap-2.5 account-item\">\n      <img class=\"size-6\" :src=\"$getPublicPath('/images/profile/password.png')\" alt=\"\" />\n      <div class=\"flex-1 w-0 text-base text-primary\">{{ $t('profile.login_password') }}</div>\n      <el-button\n        v-if=\"!isOpLocalEnv || (isOpLocalEnv && openSMTP)\"\n        type=\"info\"\n        class=\"!border-none !text-[#586D9A] !bg-transparent\"\n        link\n        plain\n        @click=\"reset_Password_Visible = true\"\n      >\n        {{ $t('form.change') }}\n      </el-button>\n    </div>\n    <div class=\"p-4 box-border flex items-center gap-2.5 account-item\">\n      <img class=\"size-6\" :src=\"$getPublicPath('/images/profile/email.png')\" alt=\"\" />\n      <div class=\"flex-none text-base text-primary\">{{ $t('profile.bind_email') }}</div>\n      <div class=\"flex-1 w-0 text-sm text-placeholder invisible md:visible\">\n        {{ userStore.info.email || $t('profile.unbind_account') }}\n      </div>\n      <el-button\n        v-if=\"!isOpLocalEnv || (isOpLocalEnv && openSMTP)\"\n        type=\"info\"\n        class=\"border-none !text-[#586D9A]\"\n        link\n        plain\n        @click=\"emailVisible = true\"\n      >\n        {{ userStore.info.email ? $t('profile.change') : $t('profile.bind') }}\n      </el-button>\n    </div>\n    <div class=\"p-4 box-border flex items-center gap-2.5 account-item\">\n      <img class=\"size-6\" :src=\"$getPublicPath('/images/profile/wechat.png')\" alt=\"\" />\n      <div class=\"flex-none text-base text-primary\">\n        {{ $t('profile.bind_wechat') }}\n      </div>\n      <div class=\"flex-1 w-0 text-sm text-placeholder invisible md:visible\">\n        {{ userStore.info.openid || $t('profile.unbind_account') }}\n      </div>\n      <template v-if=\"userStore.info.openid\">\n        <ElButton type=\"info\" class=\"border-none !text-[#586D9A]\" link plain @click=\"handleUnbindWechat\">\n          {{ $t('profile.unbind') }}\n        </ElButton>\n        <ElButton type=\"info\" class=\"border-none !text-[#586D9A] !ml-0\" link plain @click=\"handleBindWechat\">\n          {{ $t('profile.change') }}\n        </ElButton>\n      </template>\n      <template v-else>\n        <ElButton :disabled=\"isOpLocalEnv\" type=\"info\" class=\"border-none !text-[#586D9A]\" link plain @click=\"handleBindWechat\">\n          {{ $t('profile.bind') }}\n        </ElButton>\n      </template>\n    </div>\n    <div class=\"p-4 box-border flex items-center gap-2.5 account-item\">\n      <img class=\"size-6\" :src=\"$getPublicPath('/images/profile/google.png')\" alt=\"\" />\n      <div class=\"flex-none text-base text-primary\">\n        {{ $t('profile.bind_google') }}\n      </div>\n      <div class=\"flex-1 w-0 text-sm text-placeholder invisible md:visible\">\n        {{ userStore.info.wechatid || $t('profile.unbind_account') }}\n      </div>\n      <el-button type=\"info\" class=\"border-none text-placeholder-important\" link plain disabled>{{ $t('profile.bind') }}</el-button>\n    </div>\n  </div>\n  <h2 class=\"text-primary font-semibold mt-6\">{{ $t('profile.subscription_info') }}</h2>\n  <router-link :to=\"{ name: 'Order' }\" class=\"flex flex-col mt-4 bg-[#F7F7F7] rounded-lg box-border overflow-hidden\">\n    <div class=\"p-4 box-border flex items-center gap-2.5 account-item\">\n      <img class=\"size-6\" :src=\"$getPublicPath('/images/profile/order.png')\" alt=\"\" />\n      <div class=\"flex-none text-base text-primary\">\n        {{ $t('profile.order_info') }}\n      </div>\n      <div class=\"flex-1 w-0 text-sm text-placeholder invisible md:visible\"></div>\n      <ElIcon class=\"text-regular\" size=\"16\">\n        <ArrowRight />\n      </ElIcon>\n    </div>\n  </router-link>\n  <h2 class=\"text-primary font-semibold mt-6\">{{ $t('profile.logined_devices') }}</h2>\n  <div class=\"flex flex-col gap-4 mt-4\">\n    <div class=\"h-[110px] px-6 rounded-lg flex items-center bg-[#F8F8F9]\">\n      <div class=\"flex-1\">\n        <div class=\"text-base text-primary flex items-center gap-2\">\n          <svg-icon name=\"network\"></svg-icon>\n          WindowsChrome 网页版\n        </div>\n        <div class=\"text-sm text-secondary ml-6 mt-1\">2025年3月22日上午10点51分</div>\n      </div>\n      <div class=\"text-sm text-regular\">{{ $t('profile.used_devices') }}</div>\n    </div>\n  </div>\n\n  <el-dialog v-model=\"profileVisible\" class=\"update-user-dialog\" :title=\"$t('action.edit') + $t('profile.info')\" width=\"500\">\n    <div class=\"\">\n      <div class=\"w-[73px] text-[#182B50] text-opacity-80\">{{ $t('form.avatar') }}</div>\n      <div class=\"mt-3 relative rounded-full w-[60px] h-[60px] overflow-hidden cursor-pointer\" @click=\"handleChangeAvatar\">\n        <el-avatar style=\"--el-avatar-size: 60px\" :src=\"profileForm.avatar\" />\n        <div\n          class=\"absolute bottom-0 left-0 right-0 h-5 flex justify-center items-center bg-[#000000] bg-opacity-60 text-white text-opacity-80 text-xs\"\n        >\n          {{ $t('form.change') }}\n        </div>\n      </div>\n    </div>\n    <div class=\"mt-6\">\n      <div class=\"w-[73px] text-[#182B50] text-opacity-80\">{{ $t('form.nickname') }}</div>\n      <el-input v-model=\"profileForm.nickname\" v-trim size=\"large\" class=\"mt-3 flex-1\" maxlength=\"15\" show-word-limit />\n    </div>\n    <template #footer>\n      <el-button size=\"large\" @click=\"profileVisible = false\">\n        {{ $t('action.cancel') }}\n      </el-button>\n      <el-button v-debounce size=\"large\" type=\"primary\" :disabled=\"!profileForm.nickname.trim()\" @click=\"handleSaveProfile\">\n        {{ $t('action.confirm') }}\n      </el-button>\n    </template>\n    <CropperDialog ref=\"corpperRef\" :upload-avatar=\"true\" :limit-size=\"2\" @confirm=\"handleSuccessCropper\" />\n  </el-dialog>\n\n  <!-- 绑定/更换手机号弹窗 -->\n  <el-dialog\n    v-model=\"change_Mobile_Visible\"\n    class=\"update-user-dialog\"\n    :title=\"userStore.info.mobile ? $t('profile.change') + $t('form.mobile') : $t('profile.bind') + $t('form.mobile')\"\n    width=\"500\"\n    @close=\"handleClose\"\n  >\n    <div v-if=\"userStore.info.mobile\" class=\"mb-4\">\n      {{ $t('form.verify_old_mobile') + userStore.info.mobile }}\n    </div>\n\n    <changeMobile ref=\"mobileRef\" @success=\"onChangeMobileSuccess\" @close=\"change_Mobile_Visible = false\"></changeMobile>\n  </el-dialog>\n\n  <!-- 修改密码弹窗 -->\n  <el-dialog v-model=\"reset_Password_Visible\" class=\"update-user-dialog\" :title=\"$t('profile.change_password')\" width=\"500\" @close=\"handleClose\">\n    <ResetPassword ref=\"passwordRef\" @success=\"reset_Password_Visible = false\"></ResetPassword>\n  </el-dialog>\n\n  <!-- 绑定/更换邮箱弹窗 -->\n  <el-dialog\n    v-model=\"emailVisible\"\n    class=\"update-user-dialog\"\n    :title=\"userStore.info.email ? $t('profile.change') + $t('form.email') : $t('profile.bind_email')\"\n    width=\"500\"\n    @close=\"handleClose\"\n  >\n    <Email ref=\"emailRef\" @success=\"onChangeEmailSuccess\" @close=\"emailVisible = false\"></Email>\n  </el-dialog>\n\n  <ElDialog\n    v-model=\"unbindWechatVisible\"\n    :show-close=\"false\"\n    class=\"!rounded-xl\"\n    header-class=\"px-4 py-3\"\n    body-class=\"px-4 pb-3\"\n    footer-class=\"px-4 pb-2\"\n    destroy-on-close\n    append-to-body\n    width=\"480\"\n  >\n    <template #header>\n      <div class=\"flex items-center\">\n        <ElIcon color=\"#FF9500\" size=\"24\">\n          <WarnTriangleFilled />\n        </ElIcon>\n        <h2 class=\"flex-1 w-0 text-primary font-semibold text-lg ml-2\">\n          {{ $t('profile.unbind_wechat_confirm_title') }}\n        </h2>\n        <ElIcon color=\"#909399\" size=\"18\" class=\"cursor-pointer\" @click=\"unbindWechatVisible = false\">\n          <Close />\n        </ElIcon>\n      </div>\n    </template>\n    {{ $t('profile.unbind_wechat_confirm_desc') }}\n    <template #footer>\n      <ElButton class=\"bg-[#F6F7F9] !h-[36px]\" plain size=\"large\" @click=\"unbindWechatVisible = false\">\n        {{ $t('profile.unbind_wechat_confirm_cancel') }}\n      </ElButton>\n      <ElButton class=\"!h-[36px]\" type=\"danger\" size=\"large\" @click=\"handleUnbindWechat({ confirm: true })\">\n        {{ $t('profile.unbind_wechat_confirm_ok') }}\n      </ElButton>\n    </template>\n  </ElDialog>\n  <ElDialog\n    v-model=\"bindWechatVisible\"\n    :show-close=\"false\"\n    class=\"!rounded-xl\"\n    header-class=\"px-4 py-4\"\n    body-class=\"px-4 pb-3\"\n    footer-class=\"px-4 pb-2\"\n    destroy-on-close\n    append-to-body\n    width=\"500\"\n  >\n    <template #header>\n      <div class=\"flex items-center justify-center relative\">\n        <img class=\"size-6\" :src=\"$getPublicPath('/images/profile/wechat.png')\" alt=\"\" />\n        <h2 class=\"text-primary font-semibold text-lg ml-2\">\n          {{ $t('profile.bind_wechat_title') }}\n        </h2>\n        <ElIcon color=\"#909399\" size=\"20\" class=\"cursor-pointer absolute right-0 -top-2\" @click=\"bindWechatVisible = false\">\n          <Close />\n        </ElIcon>\n      </div>\n    </template>\n    <WechatView v-if=\"qrcodeRender\" class=\"h-[280px] overflow-hidden\" @oauth-success=\"handleOauthSuccess\" />\n  </ElDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight, Close, WarnTriangleFilled } from '@element-plus/icons-vue'\nimport { ref, reactive, nextTick, onMounted } from 'vue'\nimport enterpriseApi from '@/api/modules/enterprise'\nimport CropperDialog from '@/components/CropperDialog/index.vue'\n// import Password from './password.vue'\nimport Email from '@/components/LoginModal/email.vue'\nimport ResetPassword from '@/components/LoginModal/resetPassword.vue'\nimport changeMobile from './changeMobile.vue'\nimport WechatView from '@/components/LoginModal/wechat.vue'\n\nimport useEnv from '@/hooks/useEnv'\n\nimport { useUserStore } from '@/stores/modules/user'\n\nconst { isOpLocalEnv } = useEnv()\n\nconst userStore = useUserStore()\n\nconst corpperRef = ref()\nconst mobileRef = ref()\nconst passwordRef = ref()\nconst emailRef = ref()\n\nconst profileVisible = ref(false)\n// const passwordVisible = ref(false)\nconst emailVisible = ref(false)\nconst reset_Password_Visible = ref(false)\nconst change_Mobile_Visible = ref(false)\nconst openSMTP = ref(false)\nconst originHistory = ref()\n\nconst handleClose = () => {\n  passwordRef.value?.resetForm?.()\n  mobileRef.value?.resetForm?.()\n  emailRef.value?.resetForm?.()\n}\n\nconst profileForm = reactive({\n  nickname: '',\n  avatar: ''\n})\n\nconst handleEdit = () => {\n  profileForm.avatar = userStore.info.avatar\n  profileForm.nickname = userStore.info.nickname\n\n  profileVisible.value = true\n}\n\nconst handleChangeAvatar = () => {\n  corpperRef.value.uploadFile()\n}\nconst handleSuccessCropper = (data) => {\n  profileForm.avatar = data.url\n}\n\nconst handleSaveProfile = () => {\n  return userStore.update(profileForm).then(() => {\n    profileVisible.value = false\n    ElMessage.success($t('status.updated'))\n  })\n}\n\nconst onChangeEmailSuccess = () => {\n  userStore.getUserInfo()\n  emailVisible.value = false\n}\n\nconst onChangeMobileSuccess = () => {\n  userStore.getUserInfo()\n  change_Mobile_Visible.value = false\n}\nconst unbindWechatVisible = ref(false)\nconst handleUnbindWechat = async ({ confirm = false } = {}) => {\n  if (confirm) {\n    await userStore.unbind_wechat()\n    ElMessage.success(window.$t('profile.unbind_success'))\n  }\n  unbindWechatVisible.value = !confirm\n}\nconst bindWechatVisible = ref(false)\nconst handleBindWechat = () => {\n  bindWechatVisible.value = true\n  originHistory.value = window.history.length\n}\nconst qrcodeRender = ref(true)\nconst handleOauthSuccess = async (data: any) => {\n  await userStore.bind_wechat({ openid: data.openid, unionid: data.unionid }).catch(async (err) => {\n    qrcodeRender.value = false\n    await nextTick()\n    qrcodeRender.value = true\n    return Promise.reject(err)\n  })\n  ElMessage.success(window.$t(userStore.info.openid ? 'profile.change_success' : 'profile.bind_success'))\n  bindWechatVisible.value = false\n\n  const backStep = originHistory.value - window.history.length\n  if (backStep !== 0) {\n    window.history.go(backStep)\n  }\n}\n\nconst loadSMTP = async () => {\n  const { data } = await enterpriseApi.getSMTPInfo('smtp')\n  openSMTP.value = data\n}\n\nonMounted(() => {\n  loadSMTP()\n})\n</script>\n\n<style scoped>\n.account-item {\n  position: relative;\n}\n\n.account-item::after {\n  content: '';\n  position: absolute;\n  bottom: 0;\n  left: 48px;\n  width: 100%;\n  border-bottom: 1px solid #edeeef;\n}\n\n.account-item:last-child::after {\n  display: none;\n}\n</style>\n<style>\n.update-user-dialog {\n  --el-dialog-border-radius: 12px;\n  --el-dialog-padding-primary: 30px;\n}\n\n.update-user-dialog .el-dialog__headerbtn {\n  --el-color-info: #939499;\n\n  top: 16px;\n  right: 16px;\n  font-size: 18px;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/prompt/detail/index.vue",
    "content": "<template>\n  <div class=\"bg-white flex flex-col\" :class=\"[useCaseFixed && isUseCase ? 'fixed top-0 left-0 right-0 z-[9999]' : 'relative']\">\n    <template v-if=\"!isUseCase\">\n      <MainHeader v-if=\"!hideMenuHeader\" sticky>\n        <template #before_suffix>\n          <div class=\"text-base text-primary font-bold line-clamp-1 max-md:flex-1 max-md:text-center\">\n            {{ detailData.name || $t('module.prompt') }}\n          </div>\n        </template>\n        <template #after_suffix>\n          <!-- <div class=\"flex items-center gap-1 text-sm cursor-pointer md:hidden\" @click=\"$router.back()\">\n            <svg-icon name=\"return\" size=\"18\" stroke></svg-icon>\n          </div> -->\n          <ElTooltip :content=\"$t('chat.usage_guide')\">\n            <div\n              class=\"h-[26px] px-2 rounded-full items-center justify-center gap-1.5 text-sm text-primary cursor-pointer hover:bg-[#E1E2E3] hidden md:flex\"\n              @click=\"isUseCase = true\"\n            >\n              <div class=\"size-4\">\n                <svg-icon name=\"layout-split\" size=\"18\"></svg-icon>\n              </div>\n            </div>\n          </ElTooltip>\n        </template>\n      </MainHeader>\n      <div class=\"flex-1 flex gap-8\">\n        <section class=\"w-full min-w-0 max-w-[1280px] pt-6 px-3 md:px-8 lg:px-10 mx-auto box-border\" :class=\"mainClass\">\n          <h1 class=\"text-2xl md:text-3xl font-semibold text-primary w-full flex items-center justify-between md:justify-start\">\n            <span>\n              {{ detailData.name }}\n            </span>\n            <ElTooltip :content=\"$t('chat.usage_guide')\">\n              <div\n                class=\"h-[26px] px-2 rounded-full flex items-center justify-center gap-1.5 text-sm text-primary cursor-pointer hover:bg-[#E1E2E3] md:hidden\"\n                @click=\"isUseCase = true\"\n              >\n                <div class=\"size-4\">\n                  <svg-icon name=\"layout-split\" size=\"18\"></svg-icon>\n                </div>\n              </div>\n            </ElTooltip>\n          </h1>\n          <p class=\"text-placeholder my-4 text-wrap break-words whitespace-pre-wrap\" v-text=\"detailData.description\" />\n          <AuthTagGroup :model-value=\"detailData.group_ids\" />\n          <h2\n            v-if=\"!hideContentTitle\"\n            class=\"text-base md:text-xl font-semibold text-primary mt-8 w-full flex items-center justify-between md:justify-start\"\n          >\n            <span>\n              {{ $t('prompt.content') }}\n            </span>\n            <div class=\"md:hidden\">\n              <!-- <ElButton class=\"!border-none h-[36px]\" type=\"primary\" plain>{{ $t('action.add') }}</ElButton> -->\n              <ElButton\n                v-if=\"(detailData.group_ids || []).some((id) => (userStore.info.group_ids || []).includes(id))\"\n                v-copy=\"detailData.content\"\n                class=\"h-[36px]\"\n                type=\"primary\"\n              >\n                {{ $t('action.copy') }}\n              </ElButton>\n              <ElButton v-copy=\"locationHref\" class=\"!bg-[#F9FAFB] h-[36px] !ml-2\" plain>\n                {{ $t('action.share') }}\n              </ElButton>\n            </div>\n          </h2>\n          <section class=\"w-full mt-4 flex gap-8\">\n            <div class=\"flex-1 w-0 max-h-max relative overflow-hidden group\">\n              <div class=\"rounded-md bg-[#F9FAFB]\">\n                <template v-if=\"(detailData.group_ids || []).some((id) => (userStore.info.group_ids || []).includes(id))\">\n                  <div class=\"absolute top-4 right-4 z-[2] invisible md:group-hover:visible\">\n                    <!-- <ElButton class=\"!border-none h-[36px]\" type=\"primary\" plain>{{ $t('action.add') }}</ElButton> -->\n                    <ElButton v-copy=\"detailData.content\" class=\"!bg-[#F9FAFB] h-[36px]\" plain>\n                      {{ $t('action.copy') }}\n                    </ElButton>\n                    <ElButton v-copy=\"locationHref\" class=\"!bg-[#F9FAFB] h-[36px] !ml-2\" plain>\n                      {{ $t('action.share') }}\n                    </ElButton>\n                  </div>\n                  <PromptInput :model-value=\"detailData.content\" disabled style=\"min-height: max-content\" show-line />\n                </template>\n                <div v-else class=\"relative border rounded\">\n                  <div class=\"blur-md\">\n                    <PromptInput :model-value=\"virtualPrompt\" disabled style=\"min-height: max-content\" show-line />\n                  </div>\n                  <div class=\"absolute inset-0\"></div>\n                  <div\n                    class=\"w-48 absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 h-10 px-5 bg-[#6F7275] rounded-full flex items-center gap-1\"\n                  >\n                    <svg-icon name=\"lock\" color=\"#fff\"></svg-icon>\n                    <span class=\"text-sm text-white\">{{ $t('prompt.auth_tip') }}</span>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </section>\n          <div class=\"sticky bottom-0 bg-white\">\n            <template v-if=\"(detailData.group_ids || []).some((id) => (userStore.info.group_ids || []).includes(id))\">\n              <el-divider v-if=\"detailData.ai_links_data && detailData.ai_links_data.length\">\n                <span class=\"text-sm text-regular\">{{ $t('prompt.let_use_prompt') }}</span>\n              </el-divider>\n              <div v-if=\"detailData.ai_links_data && detailData.ai_links_data.length\" class=\"flex items-center justify-center gap-4 flex-wrap\">\n                <template v-for=\"item in detailData.ai_links_data\" :key=\"item.url\">\n                  <a\n                    v-copy=\"detailData.content\"\n                    class=\"w-20 h-16 flex flex-col items-center justify-center gap-2 cursor-pointer\"\n                    :href=\"item.url\"\n                    target=\"_blank\"\n                    @click.prevent=\"handleClick\"\n                  >\n                    <div class=\"size-8 rounded-full border overflow-hidden flex items-center justify-center\">\n                      <img :src=\"item.logo\" class=\"size-6 rounded-full\" />\n                    </div>\n                    <p class=\"text-primary text-sm whitespace-nowrap\">{{ item.name }}</p>\n                  </a>\n                </template>\n              </div>\n            </template>\n          </div>\n        </section>\n\n        <div v-if=\"showRecommend\" class=\"flex-none w-2/6 box-border relative flex flex-col gap-4 mt-8\">\n          <h2 class=\"flex-none text-base font-semibold text-regular\">{{ $t('common.related_prompt') }}</h2>\n          <div v-if=\"detailData.prompt_id\" class=\"flex-1 overflow-y-auto flex flex-col gap-2.5\">\n            <template v-for=\"item in relatedPromptList\" :key=\"item.agent_id\">\n              <router-link\n                class=\"flex-none h-24 rounded p-4 cursor-pointer group hover:shadow-md transition-all duration-300\"\n                :style=\"{\n                  backgroundImage: `url(${$getPublicPath('/images/index/card_bg_v4.png')})`,\n                  backgroundSize: '100% 100%',\n                  backgroundPosition: 'center center',\n                  backgroundRepeat: 'no-repeat'\n                }\"\n                :to=\"{\n                  name: route.path.includes('/index') ? 'HomePromptDetail' : 'PromptDetail',\n                  params: { prompt_id: item.prompt_id }\n                }\"\n              >\n                <div class=\"flex items-center justify-between gap-2\">\n                  <span class=\"text-sm text-primary\">{{ item.name }}</span>\n                  <ElButton\n                    v-if=\"(item.group_ids || []).some((id) => (userStore.info.group_ids || []).includes(id))\"\n                    v-copy=\"item.content\"\n                    size=\"small\"\n                    class=\"invisible group-hover:visible !px-2\"\n                  >\n                    {{ $t('action.copy') }}\n                  </ElButton>\n                </div>\n                <div class=\"text-sm text-regular line-clamp-2 mt-1.5\" :title=\"item.description\">\n                  {{ item.description || '--' }}\n                </div>\n              </router-link>\n            </template>\n          </div>\n        </div>\n      </div>\n    </template>\n\n    <Transition name=\"slide\">\n      <div\n        v-if=\"isUseCase\"\n        class=\"bg-white overflow-y-auto\"\n        :class=\"[useCaseFixed && isUseCase ? '' : 'absolute h-screen top-0 left-0 right-0 bottom-0 z-[9]']\"\n      >\n        <MainHeader sticky hide-user :back=\"showBack\">\n          <template #before_suffix>\n            <div class=\"mx-auto text-primary\">\n              {{ $t('chat.usage_guide') }}\n            </div>\n          </template>\n          <template #after_suffix>\n            <ElIcon class=\"text-regular cursor-pointer font-semibold\" size=\"18\" @click=\"isUseCase = false\">\n              <Close />\n            </ElIcon>\n          </template>\n        </MainHeader>\n        <section class=\"w-full max-w-[1280px] py-6 px-3 md:px-8 lg:px-10 mx-auto box-border\" :class=\"guideClass\">\n          <h1 class=\"text-primary\">{{ $t('chat.usage_case') }}</h1>\n          <div class=\"columns-2 gap-5 space-y-5 mt-5 max-md:columns-1\">\n            <template v-for=\"(item, index) in useCaseList\" :key=\"index\">\n              <div class=\"p-5 bg-[#F7F9FC] rounded relative group cursor-pointer break-inside-avoid\">\n                <div class=\"bg-white rounded p-5 relative\">\n                  <div class=\"text-sm text-secondary\">\n                    {{ $t('chat.input') }}\n                  </div>\n                  <div class=\"text-sm text-primary break-words mt-4\">\n                    <x-md-renderer :content=\"item.input_text\" />\n                  </div>\n                  <div class=\"absolute right-8 -bottom-9\">\n                    <svg-icon :size=\"50\" name=\"arrow-down\" color=\"white\" />\n                  </div>\n                </div>\n                <div class=\"bg-[#E6EEFF] rounded p-5 mt-4\">\n                  <div class=\"flex items-center justify-between\">\n                    <div class=\"text-sm text-secondary\">\n                      {{ $t('chat.output') }}\n                    </div>\n                    <div v-copy=\"item.output_text\" v-tooltip=\"{ content: $t('action.copy') }\">\n                      <svg-icon name=\"copy\" color=\"#4F5052\" />\n                    </div>\n                  </div>\n                  <div class=\"text-sm text-primary break-words whitespace-pre-wrap mt-4\">\n                    <x-md-renderer :content=\"item.output_text\" />\n                  </div>\n                </div>\n              </div>\n            </template>\n          </div>\n          <ElEmpty\n            v-if=\"useCaseList.length === 0\"\n            :image-size=\"92\"\n            :description=\"$t('common.no_data')\"\n            :image=\"$getPublicPath('/images/chat/completion_empty.png')\"\n          />\n          <h1 class=\"text-primary mt-8\">{{ $t('chat.usage_scene') }}</h1>\n          <div class=\"flex gap-6 py-6 max-md:flex-col max-md:gap-2\">\n            <template v-for=\"(item, index) in useSceneList\" :key=\"index\">\n              <div class=\"flex-1 px-4 text-center pt-3 pb-10 relative cursor-pointer group\">\n                <img class=\"mx-auto max-w-[200px]\" :src=\"item.image\" />\n                <h6 class=\"text-base text-primary mt-5 break-words\">\n                  {{ item.scene }}\n                </h6>\n                <p class=\"text-xs text-secondary mt-4 break-words\">\n                  {{ item.desc }}\n                </p>\n              </div>\n            </template>\n          </div>\n          <ElEmpty\n            v-if=\"useSceneList.length === 0\"\n            :image-size=\"92\"\n            :description=\"$t('common.no_data')\"\n            :image=\"$getPublicPath('/images/chat/completion_empty.png')\"\n          />\n        </section>\n      </div>\n    </Transition>\n    <MFooter v-if=\"!hideFooter\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ElMessageBox } from 'element-plus'\nimport { Close } from '@element-plus/icons-vue'\nimport { onMounted, ref, computed } from 'vue'\nimport { useRoute } from 'vue-router'\nimport MainHeader from '@/layout/header.vue'\nimport MFooter from '@/layout/m-footer.vue'\nimport PromptInput from '@/components/Prompt/input.vue'\nimport AuthTagGroup from '@/components/AuthTagGroup/index.vue'\n\nimport { usePromptStore } from '@/stores/modules/prompt'\nimport { useUserStore } from '@/stores/modules/user'\nimport promptApi from '@/api/modules/prompt'\n\nconst locationHref = window.location.href\nconst route = useRoute()\nconst promptStore = usePromptStore()\nconst userStore = useUserStore()\n\nwithDefaults(\n  defineProps<{\n    hideMenuHeader?: boolean\n    hideFooter?: boolean\n    showRecommend?: boolean\n    hideContentTitle?: boolean\n    showBack?: boolean\n    useCaseFixed?: boolean\n    mainClass?: string\n    guideClass?: string\n  }>(),\n  {\n    hideMenuHeader: false,\n    hideFooter: false,\n    showRecommend: false,\n    hideContentTitle: false,\n    showBack: false,\n    useCaseFixed: false\n  }\n)\n\nconst detailData = ref<Prompt.State>({})\n\nconst virtualPrompt = ref(`\n我是一个虚拟助手，我可以回答用户的问题，也可以生成用户需要的内容。\n\n## 我的能力范围\n- 📝 文本创作：撰写文章、报告、邮件、创意文案等\n- 🔍 信息分析：数据解读、趋势分析、问题诊断\n- 💡 创意思维：头脑风暴、方案设计、创新建议\n- 🎯 专业咨询：技术指导、业务建议、学习辅导\n- 🌐 多语言支持：中英文翻译、多语言内容创作\n- 🤖 代码助手：编程指导、代码审查、技术解答\n\n## 交互方式\n请直接告诉我您的需求，我会：\n1. 仔细理解您的问题\n2. 提供详细且实用的解答\n3. 根据需要提供示例或步骤\n4. 确保回答的准确性和相关性\n\n## 注意事项\n- 我会尽力提供准确信息，但建议您验证重要决策\n- 对于专业领域问题，建议咨询相关专家\n- 我的知识有时效性，最新信息请以官方渠道为准\n\n## 交互方式\n请直接告诉我您的需求，我会：\n1. 仔细理解您的问题\n2. 提供详细且实用的解答\n3. 根据需要提供示例或步骤\n4. 确保回答的准确性和相关性\n\n## 注意事项\n- 我会尽力提供准确信息，但建议您验证重要决策\n- 对于专业领域问题，建议咨询相关专家\n- 我的知识有时效性，最新信息请以官方渠道为准\n\n现在，请告诉我您需要什么帮助？\n`)\nconst isUseCase = ref(false)\n\nconst handleClick = (e) => {\n  const { href } = e.currentTarget\n  const { target } = e.currentTarget\n  const siteName = e.currentTarget.querySelector('p').textContent\n  ElMessageBox.confirm(window.$t('common.allow_to', { name: siteName }), {\n    confirmButtonText: window.$t('action.allow', { name: siteName }),\n    cancelButtonText: window.$t('action.cancel'),\n    center: true,\n    showClose: false,\n    customStyle: 'width: 350px'\n  })\n    .then(() => {\n      window.open(href, target)\n    })\n    .catch(() => {})\n}\n\nconst useCaseList = computed(() => {\n  const use_cases = detailData.value.custom_config.use_cases || []\n  return use_cases.filter((item) => item.type === 'case')\n})\nconst useSceneList = computed(() => {\n  const use_cases = detailData.value.custom_config.use_cases || []\n  return use_cases.filter((item) => item.type === 'scene')\n})\n\nconst relatedPromptList = computed(() => {\n  return promptStore.promptList.filter((item) => item.prompt_id !== detailData.value.prompt_id).slice(0, 4)\n})\n\nconst fetchPromptDetail = async () => {\n  const { prompt_id } = route.params\n  const { data = {} } = await promptApi.detail({ prompt_id })\n  try {\n    data.custom_config = JSON.parse(data.custom_config || '{}')\n  } catch (error) {\n    data.custom_config = {}\n  }\n  detailData.value = data\n}\n\nonMounted(async () => {\n  promptStore.loadCategorys()\n  promptStore.loadPromptList()\n  fetchPromptDetail()\n})\n\ndefineExpose({\n  detailData,\n  isUseCase,\n  showUseCase: () => {\n    isUseCase.value = true\n  },\n  hideUseCase: () => {\n    isUseCase.value = false\n  }\n})\n</script>\n\n<style scoped>\n::v-deep(.cm-gutters) {\n  border-right-color: transparent;\n  background-color: #f2f3f5 !important;\n}\n\n::v-deep(.cm-gutters),\n::v-deep(.cm-content) {\n  padding: 16px 0;\n}\n\n::v-deep(.cm-gutterElement) {\n  background-color: transparent !important;\n  height: 26px;\n  margin-top: 0 !important;\n}\n\n::v-deep(.cm-line) {\n  padding: 0 16px;\n}\n\n::v-deep(.cm-line),\n::v-deep(.cm-gutterElement) {\n  line-height: 26px;\n}\n\n::v-deep(.markdown-body) {\n  background-color: transparent;\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/prompt/index.vue",
    "content": "<template>\n  <div class=\"h-full bg-white flex flex-col\">\n    <MainHeader sticky>\n      <template #before_suffix>\n        <div class=\"text-base text-primary font-bold line-clamp-1 max-md:flex-1 max-md:text-center\">\n          {{ navigationStore.promptNavigation.name || $t('module.prompt') }}\n        </div>\n      </template>\n    </MainHeader>\n    <PromptView class=\"flex-1\" />\n    <MFooter />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport PromptView from './view.vue'\nimport MainHeader from '@/layout/header.vue'\nimport MFooter from '@/layout/m-footer.vue'\nimport { useNavigationStore } from '@/stores/modules/navigation'\n\nconst navigationStore = useNavigationStore()\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/prompt/view.vue",
    "content": "<template>\n  <div\n    v-show=\"mode !== 'index' || !state.keyword || showPromptList.length\"\n    class=\"w-11/12 lg:w-4/5 mx-auto py-6 md:py-8 lg:py-10 box-border\"\n    :class=\"mainClass\"\n  >\n    <template v-if=\"mode === 'index'\">\n      <template v-if=\"state.keyword\">\n        <p class=\"text-sm md:text-base mt-3 line-clamp-2 text-regular\">\n          {{ $t('module.prompt') }}\n        </p>\n      </template>\n      <template v-else>\n        <h2 class=\"text-xl md:text-2xl font-bold\" style=\"color: var(--el-text-color-primary, #1d1e1f)\">\n          {{ $t('index.prompt_recommend') }}\n        </h2>\n        <p class=\"text-sm md:text-base mt-3 line-clamp-2 text-regular\">\n          {{ $t('index.prompt_recommend_desc') }}\n        </p>\n      </template>\n    </template>\n    <div v-if=\"!hideFilter\" class=\"flex md:flex-row flex-col-reverse gap-5 items-stretch md:items-center justify-between\">\n      <div class=\"flex-1 md:w-0 flex items-center gap-2\">\n        <ElTabs v-model=\"state.group_id\" class=\"w-full index-tabs md:mb-0 overflow-hidden\" @tab-change=\"onTabChange\">\n          <template v-for=\"item in promptStore.categorys\" :key=\"item.group_id\">\n            <ElTabPane :label=\"item.group_name\" :name=\"item.group_id\" />\n          </template>\n        </ElTabs>\n        <ElDropdown class=\"flex-none md:!hidden\" @command=\"handleSortChange\">\n          <div class=\"flex items-center gap-1 text-regular\">\n            <SvgIcon name=\"sort\" stroke />\n            <span>{{ $t(`prompt.${sort_type}`) }}</span>\n            <ElIcon :size=\"14\" color=\"#aaa\">\n              <ArrowDown />\n            </ElIcon>\n          </div>\n          <template #dropdown>\n            <ElDropdownMenu>\n              <ElDropdownItem v-for=\"opt in sortOptions\" :key=\"opt.value\" :command=\"opt.value\">\n                {{ $t(opt.label) }}\n              </ElDropdownItem>\n            </ElDropdownMenu>\n          </template>\n        </ElDropdown>\n      </div>\n      <div class=\"w-full md:w-auto flex-none flex md:flex-row-reverse items-center gap-2\">\n        <SearchInput v-model=\"state.keyword\" class=\"flex-none hidden md:flex\" :placeholder=\"$t('action.search') + $t('module.prompt')\" />\n        <ElInput\n          v-model=\"state.keyword\"\n          size=\"large\"\n          class=\"w-full md:hidden el-input--main\"\n          :placeholder=\"$t('action.search') + $t('module.prompt')\"\n          :prefix-icon=\"Search\"\n        />\n        <ElDivider class=\"flex-none !mx-0 !hidden md:!block\" direction=\"vertical\" />\n        <ElDropdown class=\"flex-none !hidden md:!block\" @command=\"handleSortChange\">\n          <div class=\"flex items-center gap-1 text-regular\">\n            <SvgIcon name=\"sort\" stroke />\n            <span>{{ $t(`prompt.${sort_type}`) }}</span>\n            <ElIcon :size=\"14\" color=\"#aaa\">\n              <ArrowDown />\n            </ElIcon>\n          </div>\n          <template #dropdown>\n            <ElDropdownMenu>\n              <ElDropdownItem v-for=\"opt in sortOptions\" :key=\"opt.value\" :command=\"opt.value\">\n                {{ $t(opt.label) }}\n              </ElDropdownItem>\n            </ElDropdownMenu>\n          </template>\n        </ElDropdown>\n      </div>\n    </div>\n    <!-- 功能卡片网格 -->\n    <div\n      :name=\"transition ? 'list' : ''\"\n      tag=\"div\"\n      class=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-5 mt-5 md:mt-8\"\n      :class=\"[singleRow ? '!mt-0 !grid-cols-1' : '']\"\n    >\n      <template v-if=\"loading\">\n        <div v-for=\"i in 6\" :key=\"i\" class=\"flex items-start p-4 bg-[#FFF8FF] rounded-lg animate-pulse\">\n          <div class=\"w-[70px] h-[70px] bg-gray-200 rounded-full mr-4\"></div>\n          <div class=\"flex-1\">\n            <div class=\"h-5 bg-gray-200 rounded w-3/4 mb-2\"></div>\n            <div class=\"h-4 bg-gray-200 rounded w-full mb-1\"></div>\n            <div class=\"h-4 bg-gray-200 rounded w-2/3 mb-4\"></div>\n            <div class=\"h-4 bg-gray-200 rounded w-1/3\"></div>\n          </div>\n        </div>\n      </template>\n      <template v-else-if=\"showPromptList.length === 0\">\n        <div class=\"col-span-full flex flex-col items-center justify-center\">\n          <ElEmpty :description=\"$t('common.no_data')\" :image=\"$getPublicPath('/images/chat/completion_empty.png')\" />\n        </div>\n      </template>\n      <template v-for=\"item in showPromptList\" v-else :key=\"item.prompt_id\">\n        <router-link\n          :to=\"{\n            name: route.path.includes('/index') ? 'HomePromptDetail' : 'PromptDetail',\n            params: { prompt_id: item.prompt_id }\n          }\"\n          class=\"group flex items-start p-4 min-h-[166px] box-border rounded overflow-hidden bg-cover cursor-pointer border-[#EFF1F3] hover:shadow-md transition-all duration-300\"\n          :style=\"{\n            backgroundImage: `url(${$getPublicPath('/images/index/card_bg_v4.png')})`,\n            backgroundSize: '100% 100%',\n            backgroundPosition: 'center center',\n            backgroundRepeat: 'no-repeat'\n          }\"\n        >\n          <div class=\"flex-1 overflow-hidden\">\n            <div class=\"w-full flex items-center justify-between gap-4\">\n              <h3\n                class=\"text-base font-medium line-clamp-1 text-primary\"\n                :title=\"item.name\"\n                v-html=\"item.name.replace(state.keyword, `<span class='text-theme'>${state.keyword}</span>`)\"\n              ></h3>\n              <ElButton\n                v-if=\"(item.group_ids || []).some((id) => (userStore.info.group_ids || []).includes(id))\"\n                size=\"small\"\n                class=\"invisible group-hover:visible !px-2\"\n                @click.stop=\"handleCopy($event, item)\"\n              >\n                {{ $t('action.copy') }}\n              </ElButton>\n            </div>\n            <div\n              v-if=\"item.group_names.length > 0\"\n              class=\"w-full text-sm text-opacity-60 text-regular mt-3 truncate\"\n              :title=\"item.group_names.join(' ')\"\n            >\n              <span\n                v-for=\"group_name in item.group_names\"\n                :key=\"group_name\"\n                class=\"px-2 py-1 box-border text-xs text-theme bg-[#ECF1FF] rounded-sm mr-2\"\n              >\n                {{ group_name }}\n              </span>\n            </div>\n            <p class=\"text-sm text-opacity-60 line-clamp-2 text-placeholder mt-2 min-h-[40px]\" :title=\"item.description\" v-text=\"item.description\" />\n            <!-- <p class=\"text-sm text-opacity-60 line-clamp-2 text-regular mt-2 min-h-[40px]\" :title=\"item.description\"\n              v-html=\"item.description.replace(state.keyword, `<span class='text-theme'>${state.keyword}</span>`)\" /> -->\n            <div class=\"mt-3 flex items-center justify-end gap-3 text-xs text-regular\">\n              <div class=\"flex items-center gap-1\" @click.stop=\"handleApprove($event, item)\">\n                <SvgIcon class=\"size-[18px]\" :class=\"[item.is_liked ? 'text-[#F3AB00]' : '']\" :name=\"item.is_liked ? 'approve-filled' : 'approve'\" />\n                <span>\n                  {{ item.likes || 0 }}\n                </span>\n              </div>\n              <div class=\"flex items-center gap-1\">\n                <SvgIcon class=\"size-[16px]\" name=\"view\" />\n                <span>\n                  {{ item.views || 0 }}\n                </span>\n              </div>\n            </div>\n          </div>\n        </router-link>\n      </template>\n    </div>\n    <router-link\n      v-if=\"mode === 'index' && !state.keyword\"\n      class=\"block w-[240px] h-[40px] leading-[40px] border border-primary box-border text-center text-theme mt-6 rounded-[24px] mx-auto hover-bg-primary-light-9 transition-all duration-300\"\n      :to=\"{ path: '/index/prompt' }\"\n    >\n      {{ $t('action.view_more') }}\n    </router-link>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowDown, Search } from '@element-plus/icons-vue'\nimport { reactive, onMounted, computed, ref } from 'vue'\nimport { useRoute } from 'vue-router'\nimport SearchInput from '@/components/Search/index.vue'\n\nimport { usePromptStore } from '@/stores/modules/prompt'\nimport promptApi from '@/api/modules/prompt'\nimport { copyToClip } from '@/utils/copy'\nimport { useUserStore } from '@/stores/modules/user'\n\nconst props = withDefaults(\n  defineProps<{\n    mode?: 'default' | 'index' | 'sidebar'\n    hideFilter?: boolean\n    singleRow?: boolean\n    defaultSort?: 'default_sort' | 'likes_sort' | 'views_sort'\n    showLimit?: number\n    excludeIds?: number[]\n    transition?: boolean\n    mainClass?: string\n  }>(),\n  {\n    mode: 'default',\n    defaultSort: 'default_sort',\n    excludeIds: () => [],\n    transition: true\n  }\n)\n\nconst route = useRoute()\nconst promptStore = usePromptStore()\nconst userStore = useUserStore()\nconst loading = ref(false)\n\nconst sortOptions = [\n  {\n    label: 'prompt.default_sort',\n    value: 'default_sort'\n  },\n  {\n    label: 'prompt.likes_sort',\n    value: 'likes_sort'\n  },\n  {\n    label: 'prompt.views_sort',\n    value: 'views_sort'\n  }\n]\nconst state: {\n  keyword: string\n  group_id: number\n} = reactive({\n  keyword: '',\n  group_id: 0\n})\n\nconst showPromptList = computed(() => {\n  const keyword = state.keyword.toLowerCase().trim()\n  const { categorys } = promptStore\n  let promptList = promptStore.promptList.map((item = {}) => {\n    item.group_ids = item.group_ids || []\n    const group_options = categorys.filter((row = {}) => +row.group_id && item.group_ids.includes(row.group_id))\n    item.group_names = group_options.map((row = {}) => row.group_name)\n    return item\n  })\n  if (sort_type.value === 'likes_sort') {\n    promptList = promptList.sort((a, b) => b.likes - a.likes)\n  } else if (sort_type.value === 'views_sort') {\n    promptList = promptList.sort((a, b) => b.views - a.views)\n  }\n  if (state.keyword) {\n    promptList = promptList.filter((item) => {\n      const matchKeyword = item.name.toLowerCase().includes(keyword)\n      return (state.group_id === 0 || (+state.group_id && item.group_ids.includes(state.group_id))) && matchKeyword\n    })\n  } else {\n    promptList = state.group_id === 0 ? promptList : promptList.filter((item) => +state.group_id && item.group_ids.includes(state.group_id))\n    if (props.mode === 'index') promptList = promptList.slice(0, props.showLimit || 6)\n  }\n  if (props.showLimit) promptList = promptList.slice(0, props.showLimit)\n  if (props.excludeIds.length) promptList = promptList.filter((item) => !props.excludeIds.includes(item.prompt_id))\n  return promptList\n})\n\nconst sort_type = ref(props.defaultSort)\nconst handleSortChange = (value: string) => {\n  sort_type.value = value\n}\nconst onTabChange = (group_id: number) => {\n  state.group_id = group_id\n}\nconst handleApprove = async (e: Event, data: any) => {\n  e.preventDefault()\n  e.stopPropagation()\n  await promptApi.approve({ prompt_id: data.prompt_id })\n  data.is_liked = !data.is_liked\n  data.likes = data.is_liked ? data.likes + 1 : data.likes - 1\n  ElMessage.success(window.$t(data.is_liked ? 'status.approve_success' : 'status.approve_cancel'))\n}\nconst handleCopy = async (e: Event, data: any) => {\n  e.preventDefault()\n  e.stopPropagation()\n  await copyToClip(data.content)\n  ElMessage.success(window.$t('common.copied'))\n}\n\nonMounted(() => {\n  promptStore.loadCategorys()\n  promptStore.loadPromptList()\n})\n\ndefineExpose({\n  search: (keyword: string) => {\n    state.keyword = keyword\n  },\n  sort: (type: string) => {\n    sort_type.value = type\n  }\n})\n</script>\n\n<style scoped>\n.router-link-active {\n  @apply ring-2 ring-blue-500;\n}\n</style>\n\n<style>\n.list-enter-active,\n.list-leave-active {\n  transition: all 0.3s ease;\n}\n\n.list-enter-from,\n.list-leave-to {\n  opacity: 0;\n  transform: translateY(30px);\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/share/chat.vue",
    "content": "<template>\n  <div v-loading=\"state.isLoading\" class=\"h-full flex flex-col bg-white relative overflow-hidden\">\n    <div class=\"flex-none h-[110px] flex items-center justify-center relative px-20 max-md:h-20 max-md:px-10\">\n      <div class=\"absolute left-4 md:left-11 flex items-center gap-2\">\n        <img :src=\"enterpriseStore.logo\" :title=\"enterpriseStore.display_name\" class=\"h-[34px]\" />\n        <h1 class=\"text-base font-bold max-md:hidden\">{{ enterpriseStore.display_name }}</h1>\n      </div>\n      <h2 v-if=\"state.agent\" class=\"text-lg md:text-xl text-[#1D1E1F] text-center px-4 md:px-0 max-w-[calc(100%-120px)] md:max-w-none truncate\">\n        {{ state.user?.nickname }}与{{ state.agent?.name || '--' }}的对话\n      </h2>\n    </div>\n\n    <template v-if=\"state.agent\">\n      <!-- 消息列表区域 -->\n      <div class=\"flex-1 overflow-hidden\">\n        <x-bubble-list\n          ref=\"bubbleListRef\"\n          :auto-scroll=\"false\"\n          class=\"flex-1\"\n          :messages=\"state.messageList\"\n          :main-class=\"'w-11/12 md:w-4/5 max-w-[800px] mx-auto mt-5'\"\n          enable-pull-up\n        >\n          <template #item=\"{ message, index }\">\n            <!-- 用户消息气泡 -->\n            <x-bubble-user :key=\"message.id + '_user'\" :content=\"message.query\" :files=\"message.user_files\"></x-bubble-user>\n\n            <!-- AI助手消息气泡 -->\n            <x-bubble-assistant\n              :key=\"message.id + '_assistant'\"\n              :content=\"message.answer\"\n              :reasoning=\"message.reasoning_content\"\n              :reasoning-expanded=\"message.reasoning_expanded\"\n              :streaming=\"message.loading\"\n              :always-show-menu=\"index === state.messageList.length - 1\"\n            ></x-bubble-assistant>\n\n            <div v-if=\"state.messageList.length - 1 === index\" class=\"text-xs text-[#939499]\">{{ $t('common.ai_generated') }}</div>\n          </template>\n        </x-bubble-list>\n      </div>\n\n      <div class=\"flex-none h-[110px] flex items-center justify-center relative\">\n        <div class=\"h-12 flex items-center gap-2 bg-[#2563EB] rounded-full px-8 cursor-pointer hover:bg-[#1D5ECD]\" @click=\"handleOpenAgent\">\n          <img :src=\"state.agent?.logo\" :title=\"state.agent?.name\" class=\"h-5 rounded-full\" />\n          <span class=\"text-sm text-white truncate max-w-80\">跟“{{ state.agent?.name || '--' }}”聊一聊</span>\n        </div>\n      </div>\n    </template>\n    <template v-else-if=\"!state.isLoading\">\n      <div class=\"flex-center flex-col gap-2\">\n        <el-empty :image=\"$getPublicPath('/images/chat/completion_empty.png')\" :description=\"$t('chat.no_available_agent_desc')\" />\n        <el-button class=\"rounded-full\" size=\"large\" type=\"primary\" @click=\"handleBackHome\">{{ $t('common.back_home') }}</el-button>\n      </div>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, onBeforeUnmount, reactive, ref } from 'vue'\nimport { useRoute } from 'vue-router'\n\nimport { useEnterpriseStore } from '@/stores/modules/enterprise'\n\nimport sharesApi from '@/api/modules/share'\nimport type { ShareFindReponse } from '@/api/modules/share/types'\n\nimport { router } from '@/router'\n\nconst route = useRoute()\nconst enterpriseStore = useEnterpriseStore()\n\nconst bubbleListRef = ref(null)\n\nconst state = reactive<{\n  user: ShareFindReponse['user'] | null\n  agent: ShareFindReponse['agent'] | null\n  messageList: ShareFindReponse['messages']\n  isLoading: boolean\n}>({\n  user: null,\n  agent: null,\n  messageList: [],\n  isLoading: false\n})\n\n// 工具函数\nconst messageUtils = {\n  // 格式化消息\n  formatMessage: (item: any): ExtendedMessage => {\n    const data = {\n      ...item,\n      query: ''\n    }\n    const { content } = JSON.parse(item.message)[0]\n    try {\n      const arr = JSON.parse(content)\n      const query = arr.find((item) => item.type === 'text')?.content\n      data.query = query\n      data.user_files = arr.filter((item) => item.type === 'image')\n    } catch (error) {\n      data.query = content\n    }\n    return data\n  }\n}\n\nconst handleOpenAgent = () => {\n  router.replace(`${enterpriseStore.isSoftStyle ? '' : '/index'}/chat?agent_id=${state.agent?.agent_id}`)\n}\n\nconst handleBackHome = () => {\n  router.replace('/')\n}\n\nonMounted(async () => {\n  state.isLoading = true\n  const shareId = route.query.share_id as string\n  try {\n    const res = await sharesApi.find(shareId)\n    state.messageList = res.messages.map(messageUtils.formatMessage) as ShareFindReponse['messages']\n    state.user = res.user\n    state.agent = res.agent\n  } finally {\n    state.isLoading = false\n  }\n})\n\nonBeforeUnmount(() => {})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/svglist/index.vue",
    "content": "<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\n\nconst lists = ref([])\n\nonMounted(() => {\n  const svgs = document.querySelectorAll('#__svg__icons__dom__ symbol')\n  const names = []\n  Array.from(svgs).forEach((item) => {\n    const name = item.getAttribute('id').replace('icon-', '')\n    names.push(name)\n  })\n  lists.value = names\n})\n// export default {\n\n// }\n</script>\n\n<template>\n  <div class=\"flex flex-wrap gap-4\">\n    <div v-for=\"(name, index) in lists\" :key=\"index\" class=\"flex flex-col items-center\">\n      {{ name }}\n      <svg-icon :name=\"name\" size=\"30\" />\n    </div>\n  </div>\n</template>\n\n<style>\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/toolkit/components/account-dialog.vue",
    "content": "<template>\n  <ElDialog\n    v-model=\"visible\"\n    :title=\"$t('toolbox.account_access')\"\n    width=\"600\"\n    align-center\n    class=\"el-dialog--bottom-center\"\n    modal-class=\"account-share-modal\"\n  >\n    <div class=\"text-[#999999] sm:hidden\">{{ $t('toolbox.account_text2') }}</div>\n    <div class=\"text-[#999999] max-sm:hidden\">{{ $t('toolbox.account_text') }}</div>\n\n    <div v-loading=\"loading\" class=\"max-h-72 min-h-28 overflow-y-auto flex flex-col gap-3 mt-4\">\n      <div v-for=\"(item, index) in accountList\" :key=\"index\" class=\"bg-[#F2F7FF] flex flex-col gap-5 p-5 rounded\">\n        <div class=\"flex\">\n          <span class=\"text-[#999999] flex-none w-14\">{{ $t('form.account') }}</span>\n          <span class=\"text-[#1D1E1F] break-words whitespace-pre-wrap min-w-0\">{{ item.account }}</span>\n          <el-link v-copy=\"item.account\" class=\"ml-1\" :underline=\"false\">\n            <SvgIcon name=\"copy\" />\n          </el-link>\n        </div>\n        <div class=\"flex\">\n          <span class=\"text-[#999999] flex-none w-14\">{{ $t('form.password') }}</span>\n          <span class=\"text-[#1D1E1F] break-words whitespace-pre-wrap min-w-0\">{{ item.password }}</span>\n          <el-link v-copy=\"item.password\" class=\"ml-1\" :underline=\"false\">\n            <SvgIcon name=\"copy\" />\n          </el-link>\n        </div>\n        <div v-if=\"item.remark\" class=\"flex\">\n          <span class=\"text-[#999999] flex-none w-14\">{{ $t('form.remark') }}</span>\n          <span class=\"text-[#1D1E1F] flex-1 break-words whitespace-pre-wrap min-w-0\">{{ item.remark }}</span>\n        </div>\n      </div>\n    </div>\n\n    <template #footer>\n      <ElButton type=\"primary\" size=\"large\" @click=\"handleVisit\">{{ $t('toolbox.click_access') }}</ElButton>\n      <ElButton size=\"large\" @click=\"close\">{{ $t('action.cancel') }}</ElButton>\n    </template>\n  </ElDialog>\n</template>\n\n<script setup>\nimport { ref } from 'vue'\n\nimport { ElButton } from 'element-plus'\nimport linksApi from '@/api/modules/links'\nimport SvgIcon from '@/components/SvgIcon.vue'\n\nconst visible = ref(false)\nconst loading = ref(false)\n\nconst accountList = ref()\nconst url = ref()\n\nconst open = async (item) => {\n  visible.value = true\n  loading.value = true\n  url.value = item.url\n  try {\n    const info = await linksApi.detail(item.id)\n    accountList.value = JSON.parse(info.data.shared_account)\n  } catch (error) {\n    console.log(error)\n  } finally {\n    loading.value = false\n  }\n}\n\nconst close = () => {\n  visible.value = false\n}\n\nconst handleVisit = () => {\n  window.open(url.value, '_blank')\n}\n\ndefineExpose({\n  open,\n  close\n})\n</script>\n\n<style scoped></style>\n<style>\n@media screen and (width <= 640px) {\n  .account-share-modal .el-overlay-dialog {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n\n  .account-share-modal .el-dialog {\n    margin-bottom: 0 !important;\n  }\n\n  .account-share-modal .el-dialog__footer {\n    display: none;\n  }\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/toolkit/components/group-list.vue",
    "content": "<template>\n  <div\n    class=\"left-0 z-[2] sticky top-0 bg-white flex md:flex-row flex-col-reverse gap-5 items-stretch md:items-center justify-between py-6 md:py-8 box-border rounded overflow-hidden\"\n    :style=\"{ top: stickyOffset ? stickyOffset + 'px' : '0' }\"\n  >\n    <el-tabs v-model=\"state.group_id\" class=\"index-tabs flex-1 overflow-hidden\" style=\"--el-tabs-header-height: 36px\" @tab-click=\"handleTabChange\">\n      <el-tab-pane v-for=\"item in categorys\" :key=\"item.group_id\" :label=\"item.group_name\" :name=\"item.group_id\" />\n    </el-tabs>\n    <div>\n      <SearchInput v-model=\"state.keyword\" class=\"hidden md:flex\" :placeholder=\"$t('action.search') + $t('module.prompt')\" />\n      <ElInput\n        v-model=\"state.keyword\"\n        size=\"large\"\n        class=\"w-full md:hidden el-input--main\"\n        :placeholder=\"$t('toolbox.search_placeholder')\"\n        :prefix-icon=\"Search\"\n      />\n    </div>\n  </div>\n  <ToolkitList\n    class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-5\"\n    :keyword=\"state.keyword\"\n    :list=\"links\"\n    :group-id=\"state.group_id\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, computed, onMounted } from 'vue'\nimport { Search } from '@element-plus/icons-vue'\nimport SearchInput from '@/components/Search/index.vue'\nimport ToolkitList from './list.vue'\nimport { scrollToElement } from '@/utils/scroll'\nimport { useLinksStore } from '@/stores/modules/links'\n\nconst linksStore = useLinksStore()\n\nconst props = defineProps<{\n  stickyOffset?: number\n}>()\n\nconst state = reactive({\n  group_id: 0,\n  keyword: ''\n})\n\nconst categorys = computed(() => {\n  return linksStore.categorys\n})\n\nconst links = computed(() => {\n  return linksStore.links.filter((item) => {\n    if (state.group_id === 0) return true\n    return item.group_id === state.group_id\n  })\n})\n\nconst handleTabChange = () => {\n  scrollToElement(`#group_${state.group_id}`, (props.stickyOffset || 0) + 150)\n}\nonMounted(() => {\n  linksStore.loadCategorys()\n  linksStore.loadLinks()\n})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/toolkit/components/list.vue",
    "content": "<template>\n  <div name=\"list\" tag=\"div\">\n    <div v-if=\"!showList.length\" class=\"col-span-full flex flex-col items-center justify-center\">\n      <el-empty :description=\"$t('common.no_data')\" />\n    </div>\n    <template v-for=\"item in showList\" :key=\"item\">\n      <h2 v-if=\"item.group_id !== null\" :id=\"`group_${item.group_id}`\" class=\"col-span-full text-placeholder\">{{ item.group_name }}</h2>\n      <div\n        v-for=\"row in item.children\"\n        :key=\"row.id\"\n        class=\"min-h-20 bg-white rounded px-5 py-4 flex items-center gap-2 cursor-pointer border border-[#ECECEC] hover:shadow relative group\"\n        @click=\"handleCardClick(row)\"\n      >\n        <ElImage class=\"size-10 rounded-full\" fit=\"contain\" lazy :src=\"row.logo\" />\n        <div class=\"flex-1 overflow-hidden\">\n          <div class=\"text-base font-medium text-primary mb-1 mt-1 line-clamp-1\" :title=\"row.name\" v-html=\"highlightText(row.name, keyword)\" />\n          <div class=\"text-sm text-regular text-opacity-60 line-clamp-1\" :title=\"row.description\" v-html=\"highlightText(row.description, keyword)\" />\n        </div>\n\n        <!-- PC端悬停覆盖层 -->\n        <div\n          v-if=\"row.has_share_account\"\n          class=\"absolute inset-0 items-center justify-center bg-[#222326] bg-opacity-55 rounded hidden md:group-hover:flex gap-2\"\n        >\n          <ElButton class=\"!mr-0 hover:bg-white\" @click.stop=\"handleVisit(row)\">{{ $t('toolbox.account_access') }}</ElButton>\n          <ElButton type=\"primary\" class=\"!ml-0\" @click.stop=\"handleTo(row)\">{{ $t('toolbox.direct_access') }}</ElButton>\n        </div>\n      </div>\n    </template>\n\n    <!-- 移动端底部弹窗 -->\n    <div v-if=\"showMobileModal\" class=\"fixed inset-0 z-50 md:hidden\" @click=\"closeMobileModal\">\n      <!-- 背景遮罩 -->\n      <div class=\"absolute inset-0 bg-black bg-opacity-50\" />\n\n      <!-- 底部弹窗 -->\n      <div class=\"absolute bottom-0 left-0 right-0 bg-white rounded-t-2xl transform transition-transform duration-300 ease-out\">\n        <div class=\"flex flex-col\">\n          <button class=\"h-12 font-medium text-base hover:bg-gray-200 transition-colors\" @click=\"handleTo(selectedItem!)\">\n            {{ $t('toolbox.direct_access') }}\n          </button>\n          <button class=\"h-12 font-medium text-base hover:bg-gray-200 transition-colors\" @click=\"handleVisit(selectedItem!)\">\n            {{ $t('toolbox.account_access') }}\n          </button>\n          <button class=\"h-12 border-t font-medium text-base hover:bg-gray-50 transition-colors\" @click=\"closeMobileModal\">\n            {{ $t('action.cancel') }}\n          </button>\n        </div>\n      </div>\n    </div>\n\n    <AccountDialog ref=\"dialogRef\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { useLinksStore } from '@/stores/modules/links'\nimport { useUserStore } from '@/stores/modules/user'\nimport AccountDialog from './account-dialog.vue'\nimport { useBasicLayout } from '@/hooks/useBasicLayout'\n\nconst linksStore = useLinksStore()\nconst userStore = useUserStore()\nconst { isSmScreen } = useBasicLayout()\n\nconst dialogRef = ref()\nconst showMobileModal = ref(false)\nconst selectedItem = ref<Link.State | null>(null)\n\nconst props = withDefaults(\n  defineProps<{\n    list: Link.State[]\n    keyword?: string\n    onlyAll?: boolean\n    groupId?: number\n  }>(),\n  {\n    list: () => [],\n    keyword: '',\n    onlyAll: false,\n    groupId: 0\n  }\n)\n\n// 检查用户是否有权限访问\nconst hasPermission = (userGroupIds: number[], itemGroupIds: number[]) => {\n  if (!itemGroupIds || itemGroupIds.length === 0) return false\n  return userGroupIds.some((groupId) => itemGroupIds.includes(groupId))\n}\n\n// 高亮文本函数（不区分大小写）\nconst highlightText = (text: string, keyword: string) => {\n  if (!text || !keyword) return text\n\n  const regex = new RegExp(keyword, 'gi')\n  return text.replace(regex, (match) => `<span class='text-theme'>${match}</span>`)\n}\n\nconst showList = computed(() => {\n  const categories = linksStore.categorys || []\n\n  // const links = linksStore.links || []\n  const links = props.list || []\n  // 首页\n  if (props.onlyAll) {\n    return [\n      {\n        group_id: null,\n        group_name: null,\n        children: links\n      }\n    ]\n  }\n  return categories\n    .map((category) => {\n      const children = links.filter((link) => {\n        const hasAccess = hasPermission(userStore.info.group_ids || [], (link as any).user_group_ids || [])\n        return hasAccess && link.group_id === category.group_id && (link as any).user_group_ids?.length > 0\n      })\n\n      // 搜索过滤\n      const filteredChildren = props.keyword\n        ? children.filter((link) => {\n            const keyword = props.keyword.toLowerCase()\n            return link.name?.toLowerCase().includes(keyword) || link.description?.toLowerCase().includes(keyword)\n          })\n        : children\n\n      return props.onlyAll ? { group_id: null, group_name: null, children: filteredChildren } : { ...category, children: filteredChildren }\n    })\n    .filter((category) => category.children.length > 0)\n})\n\nconst handleCardClick = (item: Link.State) => {\n  if (isSmScreen.value && item.has_share_account) {\n    selectedItem.value = item\n    showMobileModal.value = true\n  } else {\n    window.open(item.url, '_blank')\n  }\n}\n\nconst handleTo = (item: Link.State) => {\n  closeMobileModal()\n  window.open(item.url, '_blank')\n}\n\nconst handleVisit = (item: Link.State) => {\n  closeMobileModal()\n  dialogRef.value.open(item)\n}\n\nconst closeMobileModal = () => {\n  showMobileModal.value = false\n  selectedItem.value = null\n}\n</script>\n\n<style scoped>\n.list-enter-active,\n.list-leave-active {\n  transition: all 0.3s ease;\n}\n\n.list-enter-from,\n.list-leave-to {\n  opacity: 0;\n  transform: translateY(30px);\n}\n</style>\n"
  },
  {
    "path": "web/front/src/renderer/main/views/toolkit/index.vue",
    "content": "<template>\n  <div class=\"\">\n    <MainHeader sticky>\n      <template #before_suffix>\n        <div class=\"text-base text-primary font-bold line-clamp-1 max-md:flex-1 max-md:text-center\">\n          {{ navigationStore.toolkitNavigation.name || $t('module.toolbox') }}\n        </div>\n      </template>\n    </MainHeader>\n    <div class=\"w-11/12 lg:w-4/5 mx-auto min-h-[80vh]\">\n      <ToolkitGroupList :sticky-offset=\"70\" />\n    </div>\n    <MFooter />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted } from 'vue'\nimport MainHeader from '@/layout/header.vue'\nimport MFooter from '@/layout/m-footer.vue'\nimport ToolkitGroupList from './components/group-list.vue'\n\nimport { useNavigationStore } from '@/stores/modules/navigation'\n\nconst navigationStore = useNavigationStore()\n\nonMounted(() => {})\n</script>\n\n<style scoped></style>\n"
  },
  {
    "path": "web/front/src/renderer/public/oauth_login.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <script src=\"//res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <link rel=\"icon\" href=\"/favicon.png\" />\n    <title>Wescrm OAuth Login</title>\n  </head>\n  <body>\n    <div style=\"position: relative; width: 100vw; height: 100vh\">\n      <div class=\"loading-spinner-box\">\n        <div class=\"loading-spinner\"></div>\n        <div class=\"loading-text\">授权中...</div>\n      </div>\n    </div>\n    <script>\n      var parentWindow = (window.parent && window.parent[0]) || window.parent\n      var url_params = new URLSearchParams(window.location.search)\n      var wechat_oauth_code = url_params.get('code')\n      var appid = url_params.get('appid')\n      var suiteid = url_params.get('suiteid')\n      var state = url_params.get('state')\n      var api = decodeURIComponent(url_params.get('api') || '')\n      var redirect_url = decodeURIComponent(url_params.get('redirect_url') || '')\n      if (wechat_oauth_code) {\n        api = api || `https://${suiteid === '53aihub' ? 'agenthubdev.53ai.com/api/saas/wechat/redirect' : 'apircdev.ibos.cn/wescrm/wechat/redirect'}`\n        redirect_url = redirect_url || `${window.location.origin}${window.location.pathname}?state=${state}`\n        const wechat_redirect_url = `${api}?appid=${appid}&suiteid=${suiteid}&code=${wechat_oauth_code}&redirect_url=${encodeURIComponent(redirect_url)}`\n        setTimeout(() => {\n          location.href = wechat_redirect_url\n        }, 1000)\n      }\n      var loginkey = url_params.get('loginkey')\n      if (loginkey) {\n        if (parentWindow) parentWindow.postMessage({ from: '53hub', loginkey, state }, '*')\n        window.postMessage({ from: '53hub', loginkey, state }, '*')\n      }\n      var openid = url_params.get('openid') || ''\n      var nickname = url_params.get('nickname') || ''\n      var unionid = url_params.get('unionid') || ''\n      var access_token = url_params.get('access_token') || url_params.get('accesstoken') || ''\n      if (openid) {\n        let messageData = { from: '53hub', openid, unionid, nickname, state, access_token }\n        if (parentWindow) parentWindow.postMessage(messageData, '*')\n        window.postMessage(messageData, '*')\n        sessionStorage.setItem('oauth_login_data', JSON.stringify(messageData))\n      }\n    </script>\n    <style>\n      .loading-spinner-box {\n        width: 100%;\n        height: 100%;\n        position: absolute;\n        z-index: 9999;\n        top: 0;\n        left: 0;\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        align-items: center;\n        gap: 12px;\n        background-color: rgba(0, 0, 0, 0.5);\n      }\n      .loading-spinner {\n        width: 40px;\n        height: 40px;\n        border: 4px solid #f3f3f3;\n        border-top: 4px solid #0082f0;\n        border-radius: 50%;\n        animation: spin 1s linear infinite;\n        -webkit-animation: spin 1s linear infinite;\n      }\n      @keyframes spin {\n        0% {\n          transform: rotate(0deg);\n        }\n        100% {\n          transform: rotate(360deg);\n        }\n      }\n      .loading-text {\n        color: #fff;\n      }\n    </style>\n  </body>\n</html>\n"
  },
  {
    "path": "web/front/stylelint.config.js",
    "content": "module.exports = {\n  extends: ['stylelint-config-standard', 'stylelint-config-recommended-vue'],\n  rules: {\n    // 禁用一些与 Tailwind CSS 冲突的规则\n    'at-rule-no-unknown': [\n      true,\n      {\n        ignoreAtRules: ['tailwind', 'apply', 'variants', 'responsive', 'screen', 'layer']\n      }\n    ],\n    // 允许深度选择器\n    'selector-pseudo-element-no-unknown': [\n      true,\n      {\n        ignorePseudoElements: ['v-deep', 'v-global', 'v-slotted']\n      }\n    ],\n    // 允许 Vue 的 scoped 样式\n    'selector-pseudo-class-no-unknown': [\n      true,\n      {\n        ignorePseudoClasses: ['deep', 'global', 'slotted']\n      }\n    ],\n    // 自定义属性模式\n    'custom-property-pattern': null,\n    // 允许空的源文件\n    'no-empty-source': null,\n    // 字体族名称\n    'font-family-no-missing-generic-family-keyword': null,\n    // 选择器类名模式（允许 Element Plus 等库的类名）\n    'selector-class-pattern': null,\n    // 允许 @apply 规则（Tailwind CSS）\n    'at-rule-no-deprecated': [\n      true,\n      {\n        ignoreAtRules: ['apply']\n      }\n    ],\n    // 允许 CSS 常量（iOS 安全区域）\n    'declaration-property-value-no-unknown': null,\n    // 允许重复的选择器\n    'no-duplicate-selectors': null,\n    // 允许特异性降序（可能由于复杂的选择器结构）\n    'no-descending-specificity': null,\n    // 允许空的代码块\n    'block-no-empty': null\n  },\n  ignoreFiles: [\n    'node_modules/**/*',\n    'dist/**/*',\n    'build/**/*',\n    'out/**/*',\n    'src/renderer/public/libs/**/*',\n    '**/*.min.css'\n  ]\n}\n"
  },
  {
    "path": "web/front/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\n// 换算比例：\n// 1 = 0.25rem; // 4px\n// 2 = 0.5rem; // 8px\n// 3 = 0.75rem; // 12px\n// 4 = 1rem; // 16px\nmodule.exports = {\n  content: ['./src/renderer/index.html', './src/renderer/**/*.{vue,js,ts,jsx,tsx}'], // 包含的内容\n  theme: {\n    extend: {\n      width: {\n        15: '3.75rem',\n        29: '7.25rem',\n        50: '12.5rem',\n        63: '3.9375rem'\n      },\n      maxWidth: {\n        50: '12.5rem'\n      },\n      height: {\n        5.5: '1.375rem'\n        // 这里源码有内置14尺寸，最好不要重新自定义，避免影响其他地方使用\n        // 14: '0.875rem'\n      },\n      borderWidth: {\n        0.75: '0.1875rem'\n      },\n      margin: {\n        7.5: '1.875rem'\n      }\n    }\n  },\n  plugins: []\n}\n"
  },
  {
    "path": "web/front/tsconfig.json",
    "content": "{\n  \"files\": [],\n  \"references\": [\n    {\n      \"path\": \"./tsconfig.node.json\"\n    },\n    {\n      \"path\": \"./tsconfig.web.json\"\n    }\n  ],\n}\n"
  },
  {
    "path": "web/front/tsconfig.node.json",
    "content": "{\n  \"extends\": \"@electron-toolkit/tsconfig/tsconfig.node.json\",\n  \"include\": [\"electron.vite.config.*\", \"src/main/**/*\", \"src/preload/**/*\"],\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"types\": [\"electron-vite/node\"]\n  }\n}\n"
  },
  {
    "path": "web/front/tsconfig.web.json",
    "content": "{\n  \"extends\": \"@electron-toolkit/tsconfig/tsconfig.web.json\",\n  \"include\": [\n    \"src/renderer/main/typings/*.d.ts\",\n    \"src/renderer/main/**/*\",\n    \"src/renderer/main/**/*.vue\",\n    \"src/preload/*.d.ts\"\n  ],\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\n        \"src/renderer/main/*\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "web/front/vite.common.ts",
    "content": "import path, { resolve } from 'path'\nimport vue from '@vitejs/plugin-vue'\nimport tailwindcss from 'tailwindcss'\nimport { createSvgIconsPlugin } from 'vite-plugin-svg-icons'\nimport Components from 'unplugin-vue-components/vite'\nimport AutoImport from 'unplugin-auto-import/vite'\nimport IconResolver from 'unplugin-icons/resolver'\nimport { ElementPlusResolver } from 'unplugin-vue-components/resolvers'\nimport wasm from 'vite-plugin-wasm'\nimport fs from 'fs'\n\n// 读取 package.json 获取版本号\nconst packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf-8'))\nconst { version } = packageJson\n\n// 创建生成 version.txt 的插件\nconst versionPlugin = () => {\n  return {\n    name: 'version-txt',\n    writeBundle: {\n      sequential: true,\n      order: 'post',\n      handler: async (options: any) => {\n        const outDir = options.dir || 'dist'\n        fs.writeFileSync(path.join(outDir, 'version.txt'), version)\n      }\n    }\n  }\n}\n\n// 公共插件配置\nexport const commonPlugins = [\n  vue({\n    template: {\n      compilerOptions: {\n        isCustomElement: (tag) => tag === 'webview'\n      }\n    }\n  }),\n  createSvgIconsPlugin({\n    iconDirs: [resolve(__dirname, 'src/renderer/main/assets/icons')],\n    symbolId: 'icon-[name]',\n    svgoOptions: {\n      plugins: [\n        { name: 'removeAttrs', params: { attrs: ['class', 'data-name', 'fill', 'stroke'] } },\n        'removeStyleElement'\n      ]\n    }\n  }),\n  Components({\n    dts: true, // 为组件类型声明生成 dts 文件\n    resolvers: [ElementPlusResolver()] // 使用 Element Plus 的组件解析器\n  }),\n  AutoImport({\n    resolvers: [\n      ElementPlusResolver(),\n      IconResolver({\n        prefix: 'Icon'\n      })\n    ]\n  }),\n  wasm(),\n  versionPlugin()\n]\n\n// 公共服务器配置\nexport const commonServer = {\n  host: '0.0.0.0',\n  port: 80\n}\n\n// 公共解析配置\nexport const commonResolve = {\n  alias: {\n    '@': resolve('src/renderer/main')\n  }\n}\n\n// 公共CSS配置\nexport const commonCss = {\n  postcss: {\n    plugins: [tailwindcss]\n  }\n}\n\n// 公共构建配置\nexport const commonBuild = {\n  rollupOptions: {\n    input: {\n      main: resolve(__dirname, 'src/renderer/index.html')\n    }\n  }\n}\n"
  },
  {
    "path": "web/front/vite.config.ts",
    "content": "import { resolve } from 'path'\nimport { defineConfig, loadEnv } from 'vite'\n\nimport { commonPlugins, commonServer, commonResolve, commonCss, commonBuild } from './vite.common'\n\nexport default defineConfig(({ command, mode }) => {\n  const env = loadEnv(mode, process.cwd())\n  return {\n    root: resolve('src/renderer'),\n    publicDir: resolve('src/renderer/public/'),\n    server: commonServer,\n    resolve: commonResolve,\n    css: commonCss,\n    build: {\n      ...commonBuild,\n      outDir: resolve('out/renderer')\n    },\n    plugins: commonPlugins,\n    define: {\n      'process.env': env\n    }\n  }\n})\n"
  }
]